From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 From: David Cantrell To: git-commits@fedoraproject.org Subject: [rpms/ckermit] epel10: Add '-ansi -D_DEFAULT_SOURCE' to KFLAG variable to fix FTBFS (#2339971) Date: Tue, 15 Sep 2026 18:31:16 GMT Message-ID: <178949707698.1.7039132682182568977.rpms-ckermit-2a4818dae7fd@fedoraproject.org> List-ID: X-Git-Repo: rpms/ckermit X-Git-Branch: epel10 X-Git-Rev: 2a4818dae7fdaa057fe668f2b3bef750093fdc92 ICAgICAgICAgICAgQSBuZXcgY29tbWl0IGhhcyBiZWVuIHB1c2hlZC4KCiAgICAgICAgICAgIFJl cG8gICA6IHJwbXMvY2tlcm1pdAogICAgICAgICAgICBCcmFuY2ggOiBlcGVsMTAKICAgICAgICAg ICAgQ29tbWl0IDogMmE0ODE4ZGFlN2ZkYWEwNTdmZTY2OGYyYjNiZWY3NTAwOTNmZGM5MgogICAg ICAgICAgICBBdXRob3IgOiBEYXZpZCBDYW50cmVsbCA8ZGNhbnRyZWxsQGJ1cmRlbGwub3JnPgog ICAgICAgICAgICBEYXRlICAgOiAyMDI1LTAxLTIyVDE0OjI1OjI2LTA1OjAwCiAgICAgICAgICAg IFN0YXRzICA6ICs0MTA2NDAvLTIgaW4gODMgZmlsZShzKQogICAgICAgICAgICBVUkwgICAgOiBo dHRwczovL3NyYy5mZWRvcmFwcm9qZWN0Lm9yZy9ycG1zL2NrZXJtaXQvYy8yYTQ4MThkYWU3ZmRh YTA1N2ZlNjY4ZjJiM2JlZjc1MDA5M2ZkYzkyP2JyYW5jaD1lcGVsMTAKCiAgICAgICAgICAgIExv ZzoKICAgICAgICAgICAgQWRkICctYW5zaSAtRF9ERUZBVUxUX1NPVVJDRScgdG8gS0ZMQUcgdmFy aWFibGUgdG8gZml4IEZUQkZTICgjMjMzOTk3MSkKClNpZ25lZC1vZmYtYnk6IERhdmlkIENhbnRy ZWxsIDxkY2FudHJlbGxAYnVyZGVsbC5vcmc+CgotLS0KZGlmZiAtLWdpdCBhL2NrZXJtaXQtOS4w LjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvQ09QWUlORy5UWFQgYi9ja2VybWl0LTkuMC4zMDIt YnVpbGQvY2tlcm1pdC05LjAuMzAyL0NPUFlJTkcuVFhUCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLjIwMGYyMzYKLS0tIC9kZXYvbnVsbAorKysgYi9ja2VybWl0LTkuMC4zMDIt YnVpbGQvY2tlcm1pdC05LjAuMzAyL0NPUFlJTkcuVFhUCkBAIC0wLDAgKzEsMzEgQEAKK1RIRSBD LUtFUk1JVCA5LjAgTElDRU5TRQorCitGcmkgSnVuIDI0IDE0OjQzOjM1IDIwMTEKKworUmVkaXN0 cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo b3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93 aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisgCisgKyBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxp c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIAorICsgUmVk aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5 cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp bmcgZGlzY2xhaW1lciBpbgorICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy aWFscyBwcm92aWRlZCB3aXRoIHRoZQorICAgZGlzdHJpYnV0aW9uLgorIAorICsgTmVpdGhlciB0 aGUgbmFtZSBvZiBDb2x1bWJpYSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgYW55CisgICBj b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl cml2ZWQKKyAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0 ZW4gcGVybWlzc2lvbi4KKyAKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCitMSU1JVEVEIFRPLCBUSEUg SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKK0Eg UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg Q09QWVJJR0hUCitIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCitTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCitMSU1JVEVEIFRPLCBQUk9DVVJFTUVO VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKK0RBVEEsIE9S IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O IEFOWQorVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ QUJJTElUWSwgT1IgVE9SVAorKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCitPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgoKZGlmZiAtLWdpdCBh L2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvUkVBRE1FLmZlZG9yYSBiL2Nr ZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvUkVBRE1FLmZlZG9yYQpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZmE0MWFjCi0tLSAvZGV2L251bGwKKysrIGIv Y2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9SRUFETUUuZmVkb3JhCkBAIC0w LDAgKzEsMjIgQEAKK0lmIHVucHJpdmlsZWdlZCB1c2VycyBhdHRlbXB0IHRvIGFjY2VzcyBhIHNl cmlhbCBwb3J0LCBlLmcuCisvZGV2L3R0eVM8bj4gb3IgL2Rldi90dHlVU0I8bj4sIHRoZXkgd2ls bCBub3JtYWxseSBnZXQgYW4gZXJyb3IKK21lc3NhZ2Ugc3VjaCBhczoKKworICAgIFNvcnJ5LCB3 cml0ZSBhY2Nlc3MgdG8gVVVDUCBsb2NrZmlsZSBkaXJlY3RvcnkgZGVuaWVkLgorCitUaGlzIG1l c3NhZ2UgaXMgYWN0dWFsbHkgZHVlIHRvIHBlcm1pc3Npb25zIG9uIHRoZSBkZXZpY2UsIG5vdCB0 aGUKK2xvY2tmaWxlIGRpcmVjdG9yeS4KKworSWYgaXQgaXMgZGVzaXJlZCB0byBhbGxvdyBzcGVj aWZpYyB1bnByaXZpbGVnZWQgdXNlcnMgdG8gdXNlIGNrZXJtaXQKK3RvIGFjY2VzcyBzZXJpYWwg cG9ydHMsIGFkZCB0aG9zZSB1c2VycyB0byB0aGUgImRpYWxvdXQiIGdyb3VwLiAgT25lCit3YXkg dG8gYWNjb21wbGlzaCB0aGlzIGlzIHVzaW5nIGEgY29tbWFuZCBsaW5lIHN1Y2ggYXM6CisKKyAg ICBzdWRvIHVzZXJtb2QgLWEgLUcgZGlhbG91dCA8dXNlcm5hbWU+CisKK1RoaXMgd2lsbCBhcHBs eSB0byBmdXR1cmUgbG9naW5zIGJ5IHRoYXQgdXNlci4KKworSWYgeW91IHdhbnQgdG8gbWFrZSB0 aGUgc2VyaWFsIHBvcnRzIGFjY2Vzc2libGUgdG8gYWxsIHVzZXJzIHdpdGhvdXQKK2FkZGluZyB0 aGVtIHRvIHRoZSBkaWFsb3V0IGdyb3VwIChub3QgcmVjb21tZW5kZWQpLCB5b3UgY2FuIGNoYW5n ZSB0aGUKK3Blcm1pc3Npb25zIG9mIHRoZSBzZXJpYWwgZGV2aWNlIHRvIDY2NiwgZS5nLiwKKwor ICAgIHN1ZG8gY2htb2QgNjY2IC9kZXYvdHR5UzxuPgoKZGlmZiAtLWdpdCBhL2NrZXJtaXQtOS4w LjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2tfY3JwLmMgYi9ja2VybWl0LTkuMC4zMDItYnVp bGQvY2tlcm1pdC05LjAuMzAyL2NrX2NycC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAuLjU5M2QwYjQKLS0tIC9kZXYvbnVsbAorKysgYi9ja2VybWl0LTkuMC4zMDItYnVpbGQv Y2tlcm1pdC05LjAuMzAyL2NrX2NycC5jCkBAIC0wLDAgKzEsNTYyMiBAQAorY2hhciAqY2tjcnB2 ID0gIkVuY3J5cHRpb24gRW5naW5lLCA5LjAuMTE3LCAxOSBNYXIgMjAxMCI7CisvKgorICBDIEsg XyBDIFIgUCAuIEMgIC0gIENyeXB0b2dyYXBoeSBmb3IgQy1LZXJtaXQiCisKKyAgQ29weXJpZ2h0 IChDKSAxOTk4LCAyMDEwLAorICAgIFRydXN0ZWVzIG9mIENvbHVtYmlhIFVuaXZlcnNpdHkgaW4g dGhlIENpdHkgb2YgTmV3IFlvcmsuCisgICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFNlZSB0aGUg Qy1LZXJtaXQgQ09QWUlORy5UWFQgZmlsZSBvciB0aGUKKyAgICBjb3B5cmlnaHQgdGV4dCBpbiB0 aGUgY2tjbWFpLmMgbW9kdWxlIGZvciBkaXNjbGFpbWVyIGFuZCBwZXJtaXNzaW9ucy4KKworICBB dXRob3I6CisgIEplZmZyZXkgRSBBbHRtYW4gKGphbHRtYW5Ac2VjdXJlLWVuZHBvaW50cy5jb20p CisgIFNlY3VyZSBFbmRwb2ludHMgSW5jLiwgTmV3IFlvcmsgQ2l0eQorKi8KKworI2RlZmluZSBD S19DUlBfQworI2lmZGVmIENLX0RFUworI2lmZGVmIENLX1NTTAorI2lmbmRlZiBMSUJERVMKKyNk ZWZpbmUgTElCREVTCisjZW5kaWYgLyogTElCREVTICovCisjZW5kaWYgLyogQ0tfU1NMICovCisj ZW5kaWYgLyogQ0tfREVTICovCisKKyNpZmRlZiBDUllQVF9ETEwKKyNkZWZpbmUgQ0tfQVVUSEVO VElDQVRJT04KKyNkZWZpbmUgQ0tfRU5DUllQVElPTgorI2RlZmluZSBDS19ERVMKKyNkZWZpbmUg Q0tfQ0FTVAorI2lmbmRlZiBMSUJERVMKKyNkZWZpbmUgTElCREVTCisjZW5kaWYgLyogTElCREVT ICovCisKKyNkZWZpbmUgVEVMQ01EUyAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0byBkZWZp bmUgbmFtZSBhcnJheSAqLworI2RlZmluZSBURUxPUFRTICAgICAgICAgICAgICAgICAgICAgICAg IC8qIHRvIGRlZmluZSBuYW1lIGFycmF5ICovCisjZGVmaW5lIEVOQ1JZUFRfTkFNRVMKKyNlbmRp ZiAvKiBDUllQVF9ETEwgKi8KKworI2luY2x1ZGUgImNrY3N5bS5oIgorI2luY2x1ZGUgImNrY2Rl Yi5oIgorI2luY2x1ZGUgImNrY25ldC5oIgorCisjaWZkZWYgREVCVUcKKyN1bmRlZiBERUJVRwor I2VuZGlmIC8qIERFQlVHICovCisKKyNpZmRlZiBDS19BVVRIRU5USUNBVElPTgorI2lmZGVmIENL X0VOQ1JZUFRJT04KKyNkZWZpbmUgRU5DUllQVElPTgorI2lmZGVmIENLX0RFUworI2RlZmluZSBE RVNfRU5DUllQVElPTgorI2VuZGlmIC8qIENLX0RFUyAqLworI2lmZGVmICBDS19DQVNUCisjZGVm aW5lIENBU1RfRU5DUllQVElPTgorI2VuZGlmIC8qIENLX0NBU1QgKi8KKyNpZmRlZiBDT01NRU5U CisjZGVmaW5lIENBU1RfRVhQT1JUX0VOQ1JZUFRJT04KKyNlbmRpZiAvKiBDT01NRU5UICovCisj ZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLworI2VuZGlmIC8qIENLX0FVVEhFTlRJQ0FUSU9OICov CisKKyNpZmRlZiBDS19FTkNSWVBUSU9OCisKKyNpbmNsdWRlICJja3VjbWQuaCIgICAgICAgICAg ICAgICAgICAgICAvKiBGb3Igc3RydWN0IGtleXRhYiBkZWZpbml0aW9uICovCisjaW5jbHVkZSAi Y2t1YXRoLmgiCisjaW5jbHVkZSAiY2t1YXQyLmgiCisjaWZkZWYgTUlUX0NVUlJFTlQKKyNpbmNs dWRlIDxrcmI1Lmg+CisjZW5kaWYgLyogTUlUX0NVUlJFTlQgKi8KKworI2luY2x1ZGUgPHN0ZGxp Yi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2lmZGVmIE9TMgorI2luY2x1ZGUgPHN0ZGFyZy5o PgorI2lmZGVmIE9TMk9OTFkKKyNpbmNsdWRlIDxvczIuaD4KKyNlbmRpZiAvKiBPUzJPTkxZICov CisjaW5jbHVkZSAiY2tvc3luLmgiCisjZWxzZSAvKiBPUzIgKi8KK3N0YXRpYyBjaGFyICogdG1w c3RyaW5nID0gTlVMTDsKKyNlbmRpZiAvKiBPUzIgKi8KKworI2lmbmRlZiBDQVNUX09SX0VYUE9S VAorI2lmZGVmIENBU1RfRU5DUllQVElPTgorI2RlZmluZSBDQVNUX09SX0VYUE9SVAorI2VuZGlm IC8qIENBU1RfRU5DUllQVElPTiAqLworI2lmZGVmIENBU1RfRVhQT1JUX0VOQ1JZUFRJT04KKyNk ZWZpbmUgQ0FTVF9PUl9FWFBPUlQKKyNlbmRpZiAvKiBDQVNUX0VYUE9SVF9FTkNSWVBUSU9OICov CisjZW5kaWYgLyogQ0FTVF9PUl9FWFBPUlQgKi8KKworI2lmZGVmIE1BQ09TWAorI3VuZGVmIExJ QkRFUworI2VuZGlmIC8qIE1BQ09TWCAqLworCisjaWZkZWYgQ1JZUFRfRExMCitpbnQgY21kX3F1 b3RpbmcgPSAwOworCisjaWZuZGVmIFRFTE9QVF9NQUNSTworaW50Cit0ZWxvcHRfaW5kZXgob3B0 KSBpbnQgb3B0OyB7CisgICAgaWYgKCBvcHQgPj0gMCAmJiBvcHQgPD0gVEVMT1BUX1NFTkRfVVJM ICkKKyAgICAgICAgcmV0dXJuKG9wdCk7CisgICAgZWxzZSBpZiAoIG9wdCA+PSBURUxPUFRfUFJB R01BX0xPR09OICYmIG9wdCA8PSBURUxPUFRfUFJBR01BX0hFQVJUQkVBVCApCisgICAgICAgIHJl dHVybihvcHQtODkpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuKE5URUxPUFRTKTsKK30KKwor aW50Cit0ZWxvcHRfb2sob3B0KSBpbnQgb3B0OyB7CisgICAgcmV0dXJuKChvcHQgPj0gVEVMT1BU X0JJTkFSWSAmJiBvcHQgPD0gVEVMT1BUX1NFTkRfVVJMKSB8fAorICAgICAgICAob3B0ID49IFRF TE9QVF9QUkFHTUFfTE9HT04gJiYgb3B0IDw9IFRFTE9QVF9QUkFHTUFfSEVBUlRCRUFUKSk7Cit9 CisKK0NIQVIgKgordGVsb3B0KG9wdCkgaW50IG9wdDsgeworICAgIGlmICggdGVsb3B0X29rKG9w dCkgKQorICAgICAgICByZXR1cm4odGVsb3B0c1t0ZWxvcHRfaW5kZXgob3B0KV0pOworICAgIGVs c2UKKyAgICAgICAgcmV0dXJuKCJVTktOT1dOIik7Cit9CisjZW5kaWYgLyogVEVMT1BUX01BQ1JP ICovCisKK3N0YXRpYyBpbnQgKCpwX3R0b2wpKGNoYXIgKixpbnQpPU5VTEw7CitzdGF0aWMgaW50 ICgqcF9kb2RlYnVnKShpbnQsY2hhciAqLGNoYXIgKixDS19PRkZfVCk9TlVMTDsKK3N0YXRpYyBp bnQgKCpwX2RvaGV4ZHVtcCkoY2hhciAqLGNoYXIgKixpbnQpPU5VTEw7CitzdGF0aWMgdm9pZCAo KnBfdG5fZGVidWcpKGNoYXIgKik9TlVMTDsKK3N0YXRpYyBpbnQgKCpwX3ZzY3JucHJpbnRmKShj aGFyICosIC4uLik9TlVMTDsKK3N0YXRpYyB2b2lkICogcF9rNV9jb250ZXh0PU5VTEw7CitzdGF0 aWMgdW5zaWduZWQgbG9uZyAoKnBfcmVxdGVsbXV0ZXgpKHVuc2lnbmVkIGxvbmcpPU5VTEw7Citz dGF0aWMgdW5zaWduZWQgbG9uZyAoKnBfcmVsdGVsbXV0ZXgpKHZvaWQpPU5VTEw7CisKK3Vuc2ln bmVkIGxvbmcKK1JlcXVlc3RUZWxuZXRNdXRleCh1bnNpZ25lZCBsb25nIHgpCit7CisgICAgaWYg KCBwX3JlcXRlbG11dGV4ICkKKyAgICAgICAgcmV0dXJuIHBfcmVxdGVsbXV0ZXgoeCk7CisgICAg cmV0dXJuIDA7Cit9CisKK3Vuc2lnbmVkIGxvbmcKK1JlbGVhc2VUZWxuZXRNdXRleCh2b2lkKQor eworICAgIGlmICggcF9yZWx0ZWxtdXRleCApCisgICAgICAgIHJldHVybiBwX3JlbHRlbG11dGV4 KCk7CisgICAgcmV0dXJuIDA7Cit9CisKK2ludAordHRvbChjaGFyICogcywgaW50IG4pCit7Cisg ICAgaWYgKCBwX3R0b2wgKQorICAgICAgICByZXR1cm4ocF90dG9sKHMsbikpOworICAgIGVsc2UK KyAgICAgICAgcmV0dXJuKC0xKTsKK30KKworaW50Citkb2RlYnVnKGludCBmbGFnLCBjaGFyICog czEsIGNoYXIgKiBzMiwgQ0tfT0ZGX1QgbikKK3sKKyAgICBpZiAoIHBfZG9kZWJ1ZyApCisgICAg ICAgIHJldHVybihwX2RvZGVidWcoZmxhZyxzMSxzMixuKSk7CisgICAgZWxzZQorICAgICAgICBy ZXR1cm4oLTEpOworfQorCitpbnQKK2RvaGV4ZHVtcCggY2hhciAqIHMxLCBjaGFyICogczIsIGlu dCBuICkKK3sKKyAgICBpZiAoIHBfZG9oZXhkdW1wICkKKyAgICAgICAgcF9kb2hleGR1bXAoczEs czIsbik7CisgICAgcmV0dXJuKDApOworfQorCit2b2lkCit0bl9kZWJ1ZyggY2hhciAqIHMgKQor eworICAgIGlmICggcF90bl9kZWJ1ZyApCisgICAgICAgIHBfdG5fZGVidWcocyk7Cit9CisKK3N0 YXRpYyBjaGFyIG15cHJ0ZnN0cls0MDk2XTsKK2ludAorVnNjcm5wcmludGYoY29uc3QgY2hhciAq IGZvcm1hdCwgLi4uKSB7CisgICAgaW50IGksIGxlbiwgcmM9MDsKKyAgICBjaGFyICpjcDsKKyAg ICB2YV9saXN0IGFwOworCisgICAgdmFfc3RhcnQoYXAsIGZvcm1hdCk7CisjaWZkZWYgTlQKKyAg ICByYyA9IF92c25wcmludGYobXlwcnRmc3RyLCBzaXplb2YobXlwcnRmc3RyKS0xLCBmb3JtYXQs IGFwKTsKKyNlbHNlIC8qIE5UICovCisgICAgcmMgPSB2c3ByaW50ZihteXBydGZzdHIsIGZvcm1h dCwgYXApOworI2VuZGlmIC8qIE5UICovCisgICAgdmFfZW5kKGFwKTsKKworICAgIGlmICggcF92 c2NybnByaW50ZiApCisgICAgICAgIHJldHVybihwX3ZzY3JucHJpbnRmKG15cHJ0ZnN0cikpOwor ICAgIGVsc2UKKyAgICAgICAgcmV0dXJuKC0xKTsKK30KKworaW50CisjaWZkZWYgQ0tfQU5TSUMK K3RuX2hleChDSEFSICogYnVmLCBpbnQgYnVmbGVuLCBDSEFSICogZGF0YSwgaW50IGRhdGFsZW4p CisjZWxzZSAvKiBDS19BTlNJQyAqLwordG5faGV4KGJ1ZiwgYnVmbGVuLCBkYXRhLCBkYXRhbGVu KQorICAgIENIQVIgKiBidWY7CisgICAgaW50IGJ1ZmxlbjsKKyAgICBDSEFSICogZGF0YTsKKyAg ICBpbnQgZGF0YWxlbjsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworICAgIGludCBpID0gMCwg aiA9IDAsIGsgPSAwOworICAgIENIQVIgdG1wWzhdOworI2lmZGVmIENPTU1FTlQKKyAgICBpbnQg d2FzX2hleCA9IDE7CisKKyAgICBmb3IgKGs9MDsgayA8IGRhdGFsZW47IGsrKykgeworICAgICAg ICBpZiAoZGF0YVtrXSA8IDMyIHx8IGRhdGFba10gPj0gMTI3KSB7CisgICAgICAgICAgICBzcHJp bnRmKHRtcCwiJXMlMDJYICIsd2FzX2hleD8iIjoiXCIgIixkYXRhW2tdKTsKKyAgICAgICAgICAg IHdhc19oZXggPSAxOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3ByaW50Zih0bXAs IiVzJWMiLHdhc19oZXg/IlwiIjoiIixkYXRhW2tdKTsKKyAgICAgICAgICAgIHdhc19oZXggPSAw OworICAgICAgICB9CisgICAgICAgIGNrc3RybmNhdChidWYsdG1wLGJ1Zmxlbik7CisgICAgfQor ICAgIGlmICghd2FzX2hleCkKKyAgICAgICAgY2tzdHJuY2F0KGJ1ZiwiXCIgIixidWZsZW4pOwor I2Vsc2UgLyogQ09NTUVOVCAqLworICAgIGlmIChkYXRhbGVuIDw9IDAgfHwgZGF0YSA9PSBOVUxM KQorICAgICAgICByZXR1cm4oMCk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgZGF0YWxlbjsgaSsr KSB7CisgICAgICAgIGNrc3RybmNhdChidWYsIlxyXG4gICIsYnVmbGVuKTsKKyAgICAgICAgZm9y IChqID0gMCA7IChqIDwgMTYpOyBqKyspIHsKKyAgICAgICAgICAgIGlmICgoaSArIGopIDwgZGF0 YWxlbikKKyAgICAgICAgICAgICAgc3ByaW50Zih0bXAsCisgICAgICAgICAgICAgICAgICAgICAg IiVzJTAyeCAiLAorICAgICAgICAgICAgICAgICAgICAgIChqID09IDggPyAifCAiIDogIiIpLAor ICAgICAgICAgICAgICAgICAgICAgIChDSEFSKSBkYXRhW2kgKyBqXQorICAgICAgICAgICAgICAg ICAgICAgICk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIHNwcmludGYodG1wLAor ICAgICAgICAgICAgICAgICAgICAgICIlcyAgICIsCisgICAgICAgICAgICAgICAgICAgICAgKGog PT0gOCA/ICJ8ICIgOiAiIikKKyAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAg Y2tzdHJuY2F0KGJ1Zix0bXAsYnVmbGVuKTsKKyAgICAgICAgfQorICAgICAgICBja3N0cm5jYXQo YnVmLCIgIixidWZsZW4pOworICAgICAgICBmb3IgKGsgPSAwOyAoayA8IDE2KSAmJiAoKGkgKyBr KSA8IGRhdGFsZW4pOyBrKyspIHsKKyAgICAgICAgICAgIHNwcmludGYodG1wLAorICAgICAgICAg ICAgICAgICAgICAgIiVzJWMiLAorICAgICAgICAgICAgICAgICAgICAgKGsgPT0gOCA/ICIgIiA6 ICIiKSwKKyAgICAgICAgICAgICAgICAgICAgIGlzcHJpbnQoZGF0YVtpICsga10pID8gZGF0YVtp ICsga10gOiAnLicKKyAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICBja3N0cm5j YXQoYnVmLHRtcCxidWZsZW4pOworICAgICAgICB9CisgICAgICAgIGkgKz0gaiAtIDE7CisgICAg fSAvKiBlbmQgZm9yICovCisgICAgY2tzdHJuY2F0KGJ1ZiwiXHJcbiAgIixidWZsZW4pOworI2Vu ZGlmIC8qIENPTU1FTlQgKi8KKyAgICByZXR1cm4oc3RybGVuKGJ1ZikpOworfQorCisjaWZkZWYg Q09NTUVOVAorI2RlZmluZSB0dG9sICAgICAgICBkbGxfdHRvbAorI2RlZmluZSBkb2RlYnVnICAg ICBkbGxfZG9kZWJ1ZworI2RlZmluZSBkb2hleGR1bXAgICBkbGxfZG9oZXhkdW1wCisjZGVmaW5l IHRuX2RlYnVnICAgIGRsbF90bl9kZWJ1ZworI2RlZmluZSBWc2NybnByaW50ZiBkbGxfdnNjcm5w cmludGYKKyNlbmRpZiAvKiBDT01NRU5UICovCisKK2NoYXIgdG5fbXNnW1ROX01TR19MRU5dLCBo ZXhidWZbVE5fTVNHX0xFTl07ICAgLyogZnJvbSBja2NuZXQuYyAqLworaW50IGRlYmxvZz0xLCBk ZWJzZXM9MSwgdG5fZGViPTE7CisjZWxzZSAvKiBDUllQVF9ETEwgKi8KK2V4dGVybiBjaGFyIHRu X21zZ1tdLCBoZXhidWZbXTsgICAgICAgICAvKiBmcm9tIGNrY25ldC5jICovCitleHRlcm4gaW50 IGRlYmxvZywgZGVic2VzLCB0bl9kZWI7CisjaWZkZWYgTUlUX0NVUlJFTlQKK2V4dGVybiBrcmI1 X2NvbnRleHQgazVfY29udGV4dDsKKyNlbmRpZiAvKiBNSVRfQ1VSUkVOVCAqLworI2VuZGlmIC8q IENSWVBUX0RMTCAqLworCisjaWZkZWYgTElCREVTCisjaWZkZWYgTUFDT1NYCisjZGVmaW5lIGRl c19uZXdfcmFuZG9tX2tleSAgICAgICAgICAgIGNrX2Rlc19uZXdfcmFuZG9tX2tleQorI2RlZmlu ZSBkZXNfc2V0X3JhbmRvbV9nZW5lcmF0b3Jfc2VlZCBja19kZXNfc2V0X3JhbmRvbV9nZW5lcmF0 b3Jfc2VlZAorI2RlZmluZSBkZXNfa2V5X3NjaGVkICAgICAgICAgICAgICAgICBja19kZXNfa2V5 X3NjaGVkCisjZGVmaW5lIGRlc19lY2JfZW5jcnlwdCAgICAgICAgICAgICAgIGNrX2Rlc19lY2Jf ZW5jcnlwdAorI2RlZmluZSBkZXNfc3RyaW5nX3RvX2tleSAgICAgICAgICAgICBja19kZXNfc3Ry aW5nX3RvX2tleQorI2RlZmluZSBkZXNfZml4dXBfa2V5X3Bhcml0eSAgICAgICAgICBja19kZXNf Zml4dXBfa2V5X3Bhcml0eQorI2VuZGlmIC8qIE1BQ09TWCAqLworI2lmbmRlZiBVTklYCisjZGVm aW5lIGRlc19uZXdfcmFuZG9tX2tleSAgICAgICAgICAgIGRlc19yYW5kb21fa2V5CisjZGVmaW5l IGRlc19zZXRfcmFuZG9tX2dlbmVyYXRvcl9zZWVkIGRlc19yYW5kb21fc2VlZAorI2VuZGlmIC8q IFVOSVggKi8KKyNkZWZpbmUgZGVzX2ZpeHVwX2tleV9wYXJpdHkgICAgICAgICAgZGVzX3NldF9v ZGRfcGFyaXR5CisjaWZkZWYgT1BFTlNTTF8wOTcKKyNkZWZpbmUgT1BFTlNTTF9FTkFCTEVfT0xE X0RFU19TVVBQT1JUCisjaW5jbHVkZSA8b3BlbnNzbC9kZXMuaD4KKyNlbmRpZiAvKiBPUEVOU1NM XzA5NyAqLworI2Vsc2UgLyogTElCREVTICovCisjaWZkZWYgVU5JWAorI2RlZmluZSBkZXNfc2V0 X3JhbmRvbV9nZW5lcmF0b3Jfc2VlZCh4KSBkZXNfaW5pdF9yYW5kb21fbnVtYmVyX2dlbmVyYXRv cih4KQorI2VuZGlmIC8qIFVOSVggKi8KKyNpZmRlZiBPUzIKKyNkZWZpbmUgZGVzX25ld19yYW5k b21fa2V5ICAgICAgICAgICAgY2tfZGVzX25ld19yYW5kb21fa2V5CisjZGVmaW5lIGRlc19zZXRf cmFuZG9tX2dlbmVyYXRvcl9zZWVkIGNrX2Rlc19zZXRfcmFuZG9tX2dlbmVyYXRvcl9zZWVkCisj ZGVmaW5lIGRlc19rZXlfc2NoZWQgICAgICAgICAgICAgICAgIGNrX2Rlc19rZXlfc2NoZWQKKyNk ZWZpbmUgZGVzX2VjYl9lbmNyeXB0ICAgICAgICAgICAgICAgY2tfZGVzX2VjYl9lbmNyeXB0Cisj ZGVmaW5lIGRlc19zdHJpbmdfdG9fa2V5ICAgICAgICAgICAgIGNrX2Rlc19zdHJpbmdfdG9fa2V5 CisjZGVmaW5lIGRlc19maXh1cF9rZXlfcGFyaXR5ICAgICAgICAgIGNrX2Rlc19maXh1cF9rZXlf cGFyaXR5CisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogTElCREVTICovCisKKyNpZmRlZiBD S19ERVMKKy8qIFRoaXMgY29kZSBjb21lcyBmcm9tIEVyaWMgWW91bmcncyBsaWJkZXMgcGFja2Fn ZSBhbmQgaXMgbm90IHBhcnQgICAqLworLyogb2YgdGhlIHN0YW5kYXJkIE1JVCBERVMgbGlicmFy eSB0aGF0IGlzIHBhcnQgb2YgS2VyYmVyb3MuIEhvd2V2ZXIsICovCisvKiBpdCBpcyBleHRyZW1l bHkgdXNlZnVsLiAgU28gd2UgYWRkIGl0IGhlcmUuICAgICAgICAgICAgICAgICAgICAgICAgKi8K KworCisvKiBXZWFrIGFuZCBzZW1pIHdlZWsga2V5cyBhcyB0YWtlIGZyb20KKyAqICVBIEQuVy4g RGF2aWVzCisgKiAlQSBXLkwuIFByaWNlCisgKiAlVCBTZWN1cml0eSBmb3IgQ29tcHV0ZXIgTmV0 d29ya3MKKyAqICVJIEpvaG4gV2lsZXkgJiBTb25zCisgKiAlRCAxOTg0CisgKiBNYW55IHRoYW5r cyB0byBzbWJAdWx5c3Nlcy5hdHQuY29tIChTdGV2ZW4gQmVsbG92aW4pIGZvciB0aGUgcmVmZXJl bmNlCisgKiAoYW5kIGFjdHVhbCBjYmxvY2sgdmFsdWVzKS4KKyAqLworI2RlZmluZSBOVU1fV0VB S19LRVkgICAgMTYKK3N0YXRpYyBCbG9jayB3ZWFrX2tleXNbTlVNX1dFQUtfS0VZXT17CisgICAg ICAgIC8qIHdlYWsga2V5cyAqLworICAgICAgICB7MHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4 MDEsMHgwMSwweDAxfSwKKyAgICAgICAgezB4RkUsMHhGRSwweEZFLDB4RkUsMHhGRSwweEZFLDB4 RkUsMHhGRX0sCisgICAgICAgIHsweDFGLDB4MUYsMHgxRiwweDFGLDB4MUYsMHgxRiwweDFGLDB4 MUZ9LAorICAgICAgICB7MHhFMCwweEUwLDB4RTAsMHhFMCwweEUwLDB4RTAsMHhFMCwweEUwfSwK KyAgICAgICAgLyogc2VtaS13ZWFrIGtleXMgKi8KKyAgICAgICAgezB4MDEsMHhGRSwweDAxLDB4 RkUsMHgwMSwweEZFLDB4MDEsMHhGRX0sCisgICAgICAgIHsweEZFLDB4MDEsMHhGRSwweDAxLDB4 RkUsMHgwMSwweEZFLDB4MDF9LAorICAgICAgICB7MHgxRiwweEUwLDB4MUYsMHhFMCwweDBFLDB4 RjEsMHgwRSwweEYxfSwKKyAgICAgICAgezB4RTAsMHgxRiwweEUwLDB4MUYsMHhGMSwweDBFLDB4 RjEsMHgwRX0sCisgICAgICAgIHsweDAxLDB4RTAsMHgwMSwweEUwLDB4MDEsMHhGMSwweDAxLDB4 RjF9LAorICAgICAgICB7MHhFMCwweDAxLDB4RTAsMHgwMSwweEYxLDB4MDEsMHhGMSwweDAxfSwK KyAgICAgICAgezB4MUYsMHhGRSwweDFGLDB4RkUsMHgwRSwweEZFLDB4MEUsMHhGRX0sCisgICAg ICAgIHsweEZFLDB4MUYsMHhGRSwweDFGLDB4RkUsMHgwRSwweEZFLDB4MEV9LAorICAgICAgICB7 MHgwMSwweDFGLDB4MDEsMHgxRiwweDAxLDB4MEUsMHgwMSwweDBFfSwKKyAgICAgICAgezB4MUYs MHgwMSwweDFGLDB4MDEsMHgwRSwweDAxLDB4MEUsMHgwMX0sCisgICAgICAgIHsweEUwLDB4RkUs MHhFMCwweEZFLDB4RjEsMHhGRSwweEYxLDB4RkV9LAorICAgICAgICB7MHhGRSwweEUwLDB4RkUs MHhFMCwweEZFLDB4RjEsMHhGRSwweEYxfX07CisKK2ludAorY2tfZGVzX2lzX3dlYWtfa2V5KGtl eSkKK0Jsb2NrIGtleTsKK3sKKyAgICBpbnQgaTsKKworICAgIGZvciAoaT0wOyBpPE5VTV9XRUFL X0tFWTsgaSsrKSB7CisgICAgICAgIC8qIEFkZGVkID09IDAgdG8gY29tcGFyaXNpb24sIEkgb2J2 aW91c2x5IGRvbid0IHJ1bgorICAgICAgICAqIHRoaXMgc2VjdGlvbiB2ZXJ5IG9mdGVuIDotKCwg dGhhbmtzIHRvCisgICAgICAgICogZW5naW5lZXJpbmdATW9ybmluZ1N0YXIuQ29tIGZvciB0aGUg Zml4CisgICAgICAgICogZWF5IDkzLzA2LzI5CisgICAgICAgICogQW5vdGhlciBwcm9ibGVtLCBJ IHdhcyBjb21wYXJpbmcgb25seSB0aGUgZmlyc3QgNAorICAgICAgICAqIGJ5dGVzLCA5Ny8wMy8x OCAqLworICAgICAgICBpZiAobWVtY21wKHdlYWtfa2V5c1tpXSxrZXksc2l6ZW9mKEJsb2NrKSkg PT0gMCkKKyAgICAgICAgICAgIHJldHVybigxKTsKKyAgICB9CisgICAgcmV0dXJuKDApOworfQor CisjaWZkZWYgVU5JWAorI2lmZGVmIExJQkRFUworI2lmbmRlZiBNQUNPU1gKKy8qIFRoZXNlIGZ1 bmN0aW9ucyBhcmUgbm90IHBhcnQgb2YgRXJpYyBZb3VuZydzIERFUyBsaWJyYXJ5ICovCisvKiBf dW5peF90aW1lX2dtdF91bml4c2VjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICov CisvKiBfZGVzX3NldF9yYW5kb21fZ2VuZXJhdG9yX3NlZWQgICAgICAgICAgICAgICAgICAgICAg ICAgICovCisvKiBfZGVzX2ZpeHVwX2tleV9wYXJpdHkgICAoYWRkZWQgaW4gMC45LjUpICAgICAg ICAgICAgICAgICovCisvKiBfZGVzX25ld19yYW5kb21fa2V5ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICovCisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKwordW5zaWduZWQgbG9u ZwordW5peF90aW1lX2dtdF91bml4c2VjICh1c2VjcHRyKQorICAgIHVuc2lnbmVkIGxvbmcgICp1 c2VjcHRyOworeworICAgIHN0cnVjdCB0aW1ldmFsICBub3c7CisKKyAgICAodm9pZCkgZ2V0dGlt ZW9mZGF5ICgmbm93LCAoc3RydWN0IHRpbWV6b25lICopMCk7CisgICAgaWYgKHVzZWNwdHIpCisg ICAgICAgICp1c2VjcHRyID0gbm93LnR2X3VzZWM7CisgICAgcmV0dXJuIG5vdy50dl9zZWM7Cit9 CisKK3ZvaWQKK2Rlc19zZXRfcmFuZG9tX2dlbmVyYXRvcl9zZWVkKEJsb2NrIEIpCit7CisgICAg ZGVzX3JhbmRvbV9zZWVkKEIpOworICAgIHJldHVybjsKK30KKworI2lmZGVmIENPTU1FTlQKKy8q IGFkZGVkIHRvIG9wZW5zc2wgaW4gMC45LjUgKi8KK3ZvaWQKK2Rlc19maXh1cF9rZXlfcGFyaXR5 KEJsb2NrIEIpCit7CisgICAgZGVzX3NldF9vZGRfcGFyaXR5KEIpOworICAgIHJldHVybjsKK30K KyNlbmRpZiAvKiBDT01NRU5UICovCitpbnQKK2Rlc19uZXdfcmFuZG9tX2tleShCbG9jayBCKQor eworICAgIGludCByYz0wOworICAgIC8qIFdBUk5JTkc6CisgICAgICAgVGhpcyBtaWdodCBuZWVk IHRvIGhhdmUgdGhlICJyYyA9ICIgcmVtb3ZlZCBiZWNhdXNlIHRoaXMKKyAgICAgICBpcyBWT0lE IGluIGxhdGVyLCBhbmQgbWF5YmUgZXZlbiBhbGwsIHZlcnNpb25zLgorICAgICovICAgICAgIAor ICAgIHJjID0gZGVzX3JhbmRvbV9rZXkoQik7CisgICAgcmV0dXJuKHJjKTsKK30KKworI2VuZGlm IC8qIE1BQ09TWCAqLworI2VuZGlmIC8qIExJQkRFUyAqLworI2VuZGlmIC8qIFVOSVggKi8KKyNl bmRpZiAvKiBDS19ERVMgKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMTk5MSwgMTk5MworICog ICAgICBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJp Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMg bWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorICogICAgbXVzdCBk aXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorICogICAgICBUaGlzIHByb2R1 Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mCisgKiAg ICAgIENhbGlmb3JuaWEsIEJlcmtlbGV5IGFuZCBpdHMgY29udHJpYnV0b3JzLgorICogNC4gTmVp dGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250 cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0 cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlv ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC WSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBS RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF TlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFO WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP TlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VW RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U UkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBU SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBT VUNIIERBTUFHRS4KKyAqLworCisvKiBiYXNlZCBvbiBAKCMpZW5jcnlwdC5jICAgICAgIDguMSAo QmVya2VsZXkpIDYvNC85MyAqLworCisvKgorICogQ29weXJpZ2h0IChDKSAxOTkwIGJ5IHRoZSBN YXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5CisgKgorICogRXhwb3J0IG9mIHRo aXMgc29mdHdhcmUgZnJvbSB0aGUgVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhIG1heQorICogcmVx dWlyZSBhIHNwZWNpZmljIGxpY2Vuc2UgZnJvbSB0aGUgVW5pdGVkIFN0YXRlcyBHb3Zlcm5tZW50 LgorICogSXQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIGFueSBwZXJzb24gb3Igb3JnYW5pemF0 aW9uIGNvbnRlbXBsYXRpbmcKKyAqIGV4cG9ydCB0byBvYnRhaW4gc3VjaCBhIGxpY2Vuc2UgYmVm b3JlIGV4cG9ydGluZy4KKyAqCisgKiBXSVRISU4gVEhBVCBDT05TVFJBSU5ULCBwZXJtaXNzaW9u IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQKKyAqIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBh bmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZAorICogd2l0aG91dCBmZWUg aXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorICog bm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQg bm90aWNlIGFuZAorICogdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGlu ZyBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdAorICogdGhlIG5hbWUgb2YgTS5JLlQuIG5vdCBiZSB1 c2VkIGluIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nCisgKiB0byBkaXN0cmli dXRpb24gb2YgdGhlIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IKKyAq IHBlcm1pc3Npb24uICBNLkkuVC4gbWFrZXMgbm8gcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBz dWl0YWJpbGl0eSBvZgorICogdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdCBpcyBw cm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcworICogb3IgaW1wbGllZCB3YXJyYW50eS4K KyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKworLyoKKyAqIFRoZXNlIGZ1bmN0aW9uIHBvaW50 ZXJzIHBvaW50IHRvIHRoZSBjdXJyZW50IHJvdXRpbmVzCisgKiBmb3IgZW5jcnlwdGluZyBhbmQg ZGVjcnlwdGluZyBkYXRhLgorICovCisvKiBOT1RFOiBUaGVzZSBuZXh0IHR3byBtaWdodCBuZWVk IHRvIGhhdmUgdGhlICJzdGF0aWMgIiByZW1vdmVkICovCisKK3N0YXRpYyBWT0lEICAgICAoKmVu Y3J5cHRfb3V0cHV0KSBQKCh1bnNpZ25lZCBjaGFyICosIGludCkpOworc3RhdGljIGludCAgICAg ICgqZGVjcnlwdF9pbnB1dCkgUCgoaW50KSk7CisKKyNpZmRlZiBERUJVRworc3RhdGljIGludCBl bmNyeXB0X2RlYnVnX21vZGUgPSAxOworc3RhdGljIGludCBlbmNyeXB0X3ZlcmJvc2UgPSAxOwor I2Vsc2UKK3N0YXRpYyBpbnQgZW5jcnlwdF92ZXJib3NlID0gMTsKK3N0YXRpYyBpbnQgZW5jcnlw dF9kZWJ1Z19tb2RlID0gMDsKKyNlbmRpZgorCitzdGF0aWMgY2hhciBkYmdidWYgWzE2Mzg0XTsK Kworc3RhdGljIGludCBkZWNyeXB0X21vZGUgPSAwOworc3RhdGljIGludCBlbmNyeXB0X21vZGUg PSAwOworc3RhdGljIGludCBhdXRvZW5jcnlwdCA9IDE7CitzdGF0aWMgaW50IGF1dG9kZWNyeXB0 ID0gMTsKK3N0YXRpYyBpbnQgaGF2ZXNlc3Npb25rZXkgPSAwOworCitzdGF0aWMga3N0cmVhbSBF bmNyeXB0S1NHbG9iYWxIYWNrID0gTlVMTDsKK3N0YXRpYyBpbnQgICAgIEVuY3J5cHRUeXBlID0g RU5DVFlQRV9BTlk7CisKKyNkZWZpbmUgdHlwZW1hc2soeCkgICAgICgoeCkgPiAwID8gMSA8PCAo KHgpLTEpIDogMCkKKworc3RhdGljIGxvbmcgaV9zdXBwb3J0X2VuY3J5cHQgPQorICAgICAgICB0 eXBlbWFzayhFTkNUWVBFX0RFU19DRkI2NCkgfCB0eXBlbWFzayhFTkNUWVBFX0RFU19PRkI2NCk7 CitzdGF0aWMgbG9uZyBpX3N1cHBvcnRfZGVjcnlwdCA9CisgICAgICAgIHR5cGVtYXNrKEVOQ1RZ UEVfREVTX0NGQjY0KSB8IHR5cGVtYXNrKEVOQ1RZUEVfREVTX09GQjY0KTsKK3N0YXRpYyBsb25n IGlfd29udF9zdXBwb3J0X2VuY3J5cHQgPSAwOworc3RhdGljIGxvbmcgaV93b250X3N1cHBvcnRf ZGVjcnlwdCA9IDA7CisjZGVmaW5lIElfU1VQUE9SVF9FTkNSWVBUICAgICAgIChpX3N1cHBvcnRf ZW5jcnlwdCAmIH5pX3dvbnRfc3VwcG9ydF9lbmNyeXB0KQorI2RlZmluZSBJX1NVUFBPUlRfREVD UllQVCAgICAgICAoaV9zdXBwb3J0X2RlY3J5cHQgJiB+aV93b250X3N1cHBvcnRfZGVjcnlwdCkK Kworc3RhdGljIGxvbmcgcmVtb3RlX3N1cHBvcnRzX2VuY3J5cHQgPSAwOworc3RhdGljIGxvbmcg cmVtb3RlX3N1cHBvcnRzX2RlY3J5cHQgPSAwOworCisvKiBNYWtlIHN1cmUgdGhhdCB0aGlzIGxp c3QgaXMgaW4gb3JkZXIgb2YgYWxnb3JpdGhtIHN0cmVuZ3RoICAgICAqLworLyogYXMgaXQgZGV0 ZXJtaW5lcyB0aGUgc2VhcmNoIG9yZGVyIGZvciBzZWxlY3Rpbmcgc3BlY2lmaWMgICAgICAgKi8K Ky8qIGVuY3J5cHRpb24gY2hvaWNlcy4gIEFsbCBDRkIgbW9kZXMgbXVzdCBjb21lIGJlZm9yZSBP RkIgbW9kZXMuICovCitzdGF0aWMgRW5jcnlwdGlvbnMgZW5jcnlwdGlvbnNbXSA9IHsKKyNpZmRl ZiBERVNfRU5DUllQVElPTgorICAgIHsgIkRFUzNfQ0ZCNjQiLAorICAgICAgICAgIEVOQ1RZUEVf REVTM19DRkI2NCwKKyAgICAgICAgICBkZXMzX2NmYjY0X2VuY3J5cHQsCisgICAgICAgICAgZGVz M19jZmI2NF9kZWNyeXB0LAorICAgICAgICAgIGRlczNfY2ZiNjRfaW5pdCwKKyAgICAgICAgICBk ZXMzX2NmYjY0X3N0YXJ0LAorICAgICAgICAgIGRlczNfY2ZiNjRfaXMsCisgICAgICAgICAgZGVz M19jZmI2NF9yZXBseSwKKyAgICAgICAgICBkZXMzX2NmYjY0X3Nlc3Npb24sCisgICAgICAgICAg ZGVzM19jZmI2NF9rZXlpZCwKKyAgICAgICAgICBOVUxMIH0sCisjZW5kaWYgLyogREVTX0VOQ1JZ UFRJT04gKi8KKyNpZmRlZiBDQVNUX0VOQ1JZUFRJT04KKyNpZm5kZWYgQ0FTVF9FWFBPUlRfRU5D UllQVElPTgorICAgIHsgIkNBU1QxMjhfQ0ZCNjQiLCAgRU5DVFlQRV9DQVNUMTI4X0NGQjY0LAor ICAgICAgICAgIGNhc3RfY2ZiNjRfZW5jcnlwdCwKKyAgICAgICAgICBjYXN0X2NmYjY0X2RlY3J5 cHQsCisgICAgICAgICAgY2FzdF9jZmI2NF9pbml0LAorICAgICAgICAgIGNhc3RfY2ZiNjRfc3Rh cnQsCisgICAgICAgICAgY2FzdF9jZmI2NF9pcywKKyAgICAgICAgICBjYXN0X2NmYjY0X3JlcGx5 LAorICAgICAgICAgIGNhc3RfY2ZiNjRfc2Vzc2lvbiwKKyAgICAgICAgICBjYXN0X2NmYjY0X2tl eWlkLAorICAgICAgICAgIE5VTEwgfSwKKyNlbmRpZgorI2VuZGlmCisjaWZkZWYgREVTX0VOQ1JZ UFRJT04KKyAgICB7ICJERVNfQ0ZCNjQiLAorICAgICAgICAgIEVOQ1RZUEVfREVTX0NGQjY0LAor ICAgICAgICAgIGNmYjY0X2VuY3J5cHQsCisgICAgICAgICAgY2ZiNjRfZGVjcnlwdCwKKyAgICAg ICAgICBjZmI2NF9pbml0LAorICAgICAgICAgIGNmYjY0X3N0YXJ0LAorICAgICAgICAgIGNmYjY0 X2lzLAorICAgICAgICAgIGNmYjY0X3JlcGx5LAorICAgICAgICAgIGNmYjY0X3Nlc3Npb24sCisg ICAgICAgICAgY2ZiNjRfa2V5aWQsCisgICAgICAgICAgTlVMTCB9LAorI2VuZGlmICAvKiBERVNf RU5DUllQVElPTiAqLworI2lmIGRlZmluZWQgKENBU1RfRVhQT1JUX0VOQ1JZUFRJT04pIHx8IGRl ZmluZWQoQ0FTVF9FTkNSWVBUSU9OKQorICAgIHsgIkNBU1Q1XzQwX0NGQjY0IiwgRU5DVFlQRV9D QVNUNV80MF9DRkI2NCwKKyAgICAgICAgICBjYXN0ZXhwX2NmYjY0X2VuY3J5cHQsCisgICAgICAg ICAgY2FzdGV4cF9jZmI2NF9kZWNyeXB0LAorICAgICAgICAgIGNhc3RleHBfY2ZiNjRfaW5pdCwK KyAgICAgICAgICBjYXN0ZXhwX2NmYjY0X3N0YXJ0LAorICAgICAgICAgIGNhc3RleHBfY2ZiNjRf aXMsCisgICAgICAgICAgY2FzdGV4cF9jZmI2NF9yZXBseSwKKyAgICAgICAgICBjYXN0ZXhwX2Nm YjY0X3Nlc3Npb24sCisgICAgICAgICAgY2FzdGV4cF9jZmI2NF9rZXlpZCwKKyAgICAgICAgICBO VUxMIH0sCisjZW5kaWYgLyogQ0FTVF9FTkNSWVBUSU9OICovCisjaWZkZWYgREVTX0VOQ1JZUFRJ T04KKyAgICB7ICJERVMzX09GQjY0IiwKKyAgICAgICAgICBFTkNUWVBFX0RFUzNfT0ZCNjQsCisg ICAgICAgICAgZGVzM19vZmI2NF9lbmNyeXB0LAorICAgICAgICAgIGRlczNfb2ZiNjRfZGVjcnlw dCwKKyAgICAgICAgICBkZXMzX29mYjY0X2luaXQsCisgICAgICAgICAgZGVzM19vZmI2NF9zdGFy dCwKKyAgICAgICAgICBkZXMzX29mYjY0X2lzLAorICAgICAgICAgIGRlczNfb2ZiNjRfcmVwbHks CisgICAgICAgICAgZGVzM19vZmI2NF9zZXNzaW9uLAorICAgICAgICAgIGRlczNfb2ZiNjRfa2V5 aWQsCisgICAgICAgICAgTlVMTCB9LAorI2VuZGlmIC8qIERFU19FTkNSWVBUSU9OICovCisjaWZk ZWYgQ0FTVF9FTkNSWVBUSU9OCisjaWZuZGVmIENBU1RfRVhQT1JUX0VOQ1JZUFRJT04KKyAgICB7 ICJDQVNUMTI4X09GQjY0IiwgIEVOQ1RZUEVfQ0FTVDEyOF9PRkI2NCwKKyAgICAgICAgICBjYXN0 X29mYjY0X2VuY3J5cHQsCisgICAgICAgICAgY2FzdF9vZmI2NF9kZWNyeXB0LAorICAgICAgICAg IGNhc3Rfb2ZiNjRfaW5pdCwKKyAgICAgICAgICBjYXN0X29mYjY0X3N0YXJ0LAorICAgICAgICAg IGNhc3Rfb2ZiNjRfaXMsCisgICAgICAgICAgY2FzdF9vZmI2NF9yZXBseSwKKyAgICAgICAgICBj YXN0X29mYjY0X3Nlc3Npb24sCisgICAgICAgICAgY2FzdF9vZmI2NF9rZXlpZCwKKyAgICAgICAg ICBOVUxMIH0sCisjZW5kaWYKKyNlbmRpZgorI2lmZGVmIERFU19FTkNSWVBUSU9OCisgICAgeyAi REVTX09GQjY0IiwKKyAgICAgICAgICBFTkNUWVBFX0RFU19PRkI2NCwKKyAgICAgICAgICBvZmI2 NF9lbmNyeXB0LAorICAgICAgICAgIG9mYjY0X2RlY3J5cHQsCisgICAgICAgICAgb2ZiNjRfaW5p dCwKKyAgICAgICAgICBvZmI2NF9zdGFydCwKKyAgICAgICAgICBvZmI2NF9pcywKKyAgICAgICAg ICBvZmI2NF9yZXBseSwKKyAgICAgICAgICBvZmI2NF9zZXNzaW9uLAorICAgICAgICAgIG9mYjY0 X2tleWlkLAorICAgICAgICAgIE5VTEwgfSwKKyNlbmRpZiAgLyogREVTX0VOQ1JZUFRJT04gKi8K KyNpZiBkZWZpbmVkIChDQVNUX0VYUE9SVF9FTkNSWVBUSU9OKSB8fCBkZWZpbmVkKENBU1RfRU5D UllQVElPTikKKyAgICB7ICJDQVNUNV80MF9PRkI2NCIsIEVOQ1RZUEVfQ0FTVDVfNDBfT0ZCNjQs CisgICAgICAgICAgY2FzdGV4cF9vZmI2NF9lbmNyeXB0LAorICAgICAgICAgIGNhc3RleHBfb2Zi NjRfZGVjcnlwdCwKKyAgICAgICAgICBjYXN0ZXhwX29mYjY0X2luaXQsCisgICAgICAgICAgY2Fz dGV4cF9vZmI2NF9zdGFydCwKKyAgICAgICAgICBjYXN0ZXhwX29mYjY0X2lzLAorICAgICAgICAg IGNhc3RleHBfb2ZiNjRfcmVwbHksCisgICAgICAgICAgY2FzdGV4cF9vZmI2NF9zZXNzaW9uLAor ICAgICAgICAgIGNhc3RleHBfb2ZiNjRfa2V5aWQsCisgICAgICAgICAgTlVMTCB9LAorI2VuZGlm IC8qIENBU1RfRU5DUllQVElPTiAqLworICAgIHsgMCwwLDAsMCwwLDAsMCwwLDAsMCwwICB9Cit9 OworCitpbnQKK2dldF9jcnlwdF90YWJsZSggc3RydWN0IGtleXRhYiAqKiBwVGFibGUsIGludCAq IHBOICkKK3sKKyAgICBpbnQgaT0wLG49MDsKKworICAgIGlmICggKnBUYWJsZSApCisgICAgewor ICAgICAgICBmb3IgKCBpPTAgOyBpIDwgKnBOIDsgaSsrICkKKyAgICAgICAgICAgIGZyZWUoICgq cFRhYmxlKVtpXS5rd2QgKSA7CisgICAgICAgIGZyZWUgKCAqcFRhYmxlICkgIDsKKyAgICB9Cisg ICAgKnBUYWJsZSA9IE5VTEw7CisgICAgKnBOID0gMDsKKworICAgIC8qIEhvdyBtYW55IGVuY3J5 cHRpb24gdHlwZXMgZG8gd2UgaGF2ZT8gKi8KKyAgICB3aGlsZSAoIGVuY3J5cHRpb25zW25dLm5h bWUgKQorICAgICAgICBuKys7CisKKyAgICBpZiAoIG4gKQorICAgIHsKKyAgICAgICAgKnBUYWJs ZSA9IG1hbGxvYyggc2l6ZW9mKHN0cnVjdCBrZXl0YWIpICogKG4rMikgKSA7CisgICAgICAgIGlm ICggISgqcFRhYmxlKSApCisgICAgICAgICAgICByZXR1cm4oMCk7CisKKyNpZmRlZiBPUzIKKyAg ICAgICAgKCpwVGFibGUpWzBdLmt3ZCA9c3RyZHVwKCJhdXRvbWF0aWMiKTsKKyNlbHNlIC8qIE9T MiAqLworICAgICAgICBtYWtlc3RyKCZ0bXBzdHJpbmcsImF1dG9tYXRpYyIpOworICAgICAgICAo KnBUYWJsZSlbMF0ua3dkID0gdG1wc3RyaW5nOworICAgICAgICB0bXBzdHJpbmcgPSBOVUxMOwor I2VuZGlmIC8qIE9TMiAqLworICAgICAgICAoKnBUYWJsZSlbMF0ua3d2YWwgPSBFTkNUWVBFX0FO WTsKKyAgICAgICAgKCpwVGFibGUpWzBdLmZsZ3MgPSAwOworI2lmZGVmIE9TMgorICAgICAgICAo KnBUYWJsZSlbMV0ua3dkID1zdHJkdXAoIm5vbmUiKTsKKyNlbHNlIC8qIE9TMiAqLworICAgICAg ICBtYWtlc3RyKCZ0bXBzdHJpbmcsIm5vbmUiKTsKKyAgICAgICAgKCpwVGFibGUpWzFdLmt3ZCA9 IHRtcHN0cmluZzsKKyAgICAgICAgdG1wc3RyaW5nID0gTlVMTDsKKyNlbmRpZiAvKiBPUzIgKi8K KyAgICAgICAgKCpwVGFibGUpWzFdLmt3dmFsID0gOTk5OworICAgICAgICAoKnBUYWJsZSlbMV0u ZmxncyA9IDA7CisgICAgICAgICgqcE4pID0gMjsKKworICAgICAgICBmb3IgKCBpPTAgOyBpIDwg biA7IGkrKyApIHsKKyAgICAgICAgICAgIGNoYXIgKiBuZXdzdHIgPSBOVUxMLCAqIHA7CisgICAg ICAgICAgICBpbnQgbmV3dmFsID0gZW5jcnlwdGlvbnNbaV0udHlwZTsKKyAgICAgICAgICAgIGlu dCBqID0gMCwgbGVuID0gMDsKKworI2lmZGVmIE9TMgorICAgICAgICAgICAgbmV3c3RyID0gc3Ry ZHVwKGVuY3J5cHRpb25zW2ldLm5hbWUpOworICAgICAgICAgICAgc3RybHdyKG5ld3N0cik7Cisj ZWxzZSAvKiBPUzIgKi8KKyAgICAgICAgICAgIG1ha2VzdHIoJnRtcHN0cmluZyxlbmNyeXB0aW9u c1tpXS5uYW1lKTsKKyAgICAgICAgICAgIG5ld3N0ciA9IHRtcHN0cmluZzsKKyAgICAgICAgICAg IHRtcHN0cmluZyA9IE5VTEw7CisgICAgICAgICAgICBmb3IgKHAgPSBuZXdzdHI7ICpwOyBwKysp IGlmIChpc3VwcGVyKCpwKSkgKnAgPSB0b2xvd2VyKCpwKTsKKyNlbmRpZiAvKiBPUzIgKi8KKwor ICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8ICgqcE4pOyBqKyspIHsKKyAgICAgICAgICAgICAg ICBpbnQgdGVtcHZhbCA9IDA7CisgICAgICAgICAgICAgICAgY2hhciAqIHRlbXBzdHIgPSBOVUxM OworCisgICAgICAgICAgICAgICAgaWYgKCBzdHJjbXAoICgqcFRhYmxlKVtqXS5rd2QsIG5ld3N0 ciApID4gMCApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB0ZW1wdmFs ID0gKCpwVGFibGUpW2pdLmt3dmFsOworICAgICAgICAgICAgICAgICAgICB0ZW1wc3RyID0gKCpw VGFibGUpW2pdLmt3ZDsKKyAgICAgICAgICAgICAgICAgICAgKCpwVGFibGUpW2pdLmt3ZCA9IG5l d3N0ciA7CisgICAgICAgICAgICAgICAgICAgICgqcFRhYmxlKVtqXS5rd3ZhbCA9IG5ld3ZhbDsK KyAgICAgICAgICAgICAgICAgICAgbmV3dmFsID0gdGVtcHZhbDsKKyAgICAgICAgICAgICAgICAg ICAgbmV3c3RyID0gdGVtcHN0cjsKKyAgICAgICAgICAgICAgICAgICAgKCpwVGFibGUpW2pdLmZs Z3MgPSAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICgq cFRhYmxlKVsqcE5dLmt3ZCA9IG5ld3N0ciA7CisgICAgICAgICAgICAoKnBUYWJsZSlbKnBOXS5r d3ZhbCA9IG5ld3ZhbDsKKyAgICAgICAgICAgICgqcFRhYmxlKVsqcE5dLmZsZ3MgPSAwIDsKKyAg ICAgICAgICAgICgqcE4pKysgOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgKnBU YWJsZSA9IG1hbGxvYyggc2l6ZW9mKHN0cnVjdCBrZXl0YWIpICogMiApIDsKKyAgICAgICAgaWYg KCAhKCpwVGFibGUpICkKKyAgICAgICAgICAgIHJldHVybigwKTsKKworI2lmZGVmIE9TMgorICAg ICAgICAoKnBUYWJsZSlbMF0ua3dkID1zdHJkdXAoImF1dG9tYXRpYyIpOworI2Vsc2UgLyogT1My ICovCisgICAgICAgIG1ha2VzdHIoJnRtcHN0cmluZywiYXV0b21hdGljIik7CisgICAgICAgICgq cFRhYmxlKVswXS5rd2QgPSB0bXBzdHJpbmc7CisgICAgICAgIHRtcHN0cmluZyA9IE5VTEw7Cisj ZW5kaWYgLyogT1MyICovCisgICAgICAgICgqcFRhYmxlKVswXS5rd3ZhbCA9IEVOQ1RZUEVfQU5Z OworICAgICAgICAoKnBUYWJsZSlbMF0uZmxncyA9IDA7CisjaWZkZWYgT1MyCisgICAgICAgICgq cFRhYmxlKVsxXS5rd2QgPXN0cmR1cCgibm9uZSIpOworI2Vsc2UgLyogT1MyICovCisgICAgICAg IG1ha2VzdHIoJnRtcHN0cmluZywibm9uZSIpOworICAgICAgICAoKnBUYWJsZSlbMV0ua3dkID0g dG1wc3RyaW5nOworICAgICAgICB0bXBzdHJpbmcgPSBOVUxMOworI2VuZGlmIC8qIE9TMiAqLwor ICAgICAgICAoKnBUYWJsZSlbMV0ua3d2YWwgPSA5OTk7CisgICAgICAgICgqcFRhYmxlKVsxXS5m bGdzID0gMDsKKyAgICAgICAgKCpwTikgPSAyOworICAgIH0KKyAgICByZXR1cm4oKnBOKTsKK30K Kworc3RhdGljIHVuc2lnbmVkIGNoYXIgc3RyX3NlbmRbNjRdID0geyBJQUMsIFNCLCBURUxPUFRf RU5DUllQVElPTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRU5DUllQ VF9TVVBQT1JUIH07CitzdGF0aWMgdW5zaWduZWQgY2hhciBzdHJfc3VwbGVuID0gMDsKK3N0YXRp YyB1bnNpZ25lZCBjaGFyIHN0cl9zdGFydFs3Ml0gPSB7IElBQywgU0IsIFRFTE9QVF9FTkNSWVBU SU9OIH07CitzdGF0aWMgdW5zaWduZWQgY2hhciBzdHJfZW5kW10gPSB7IElBQywgU0IsIFRFTE9Q VF9FTkNSWVBUSU9OLCAwLCBJQUMsIFNFIH07CisKK19QUk9UT1RZUChpbnQgIGVuY3J5cHRfcmVx dWVzdF9lbmQsIChWT0lEKSk7CitfUFJPVE9UWVAoaW50ICBlbmNyeXB0X3JlcXVlc3Rfc3RhcnQs IChWT0lEKSk7CitfUFJPVE9UWVAoaW50ICBlbmNyeXB0X2VuY19rZXlpZCwgKHVuc2lnbmVkIGNo YXIgKiwgaW50KSk7CitfUFJPVE9UWVAoaW50ICBlbmNyeXB0X2RlY19rZXlpZCwgKHVuc2lnbmVk IGNoYXIgKiwgaW50KSk7CitfUFJPVE9UWVAoaW50ICBlbmNyeXB0X3N1cHBvcnQsICh1bnNpZ25l ZCBjaGFyICosIGludCkpOworX1BST1RPVFlQKGludCAgZW5jcnlwdF9zdGFydCwgKHVuc2lnbmVk IGNoYXIgKiwgaW50KSk7CitfUFJPVE9UWVAoaW50ICBlbmNyeXB0X2VuZCwgKFZPSUQpKTsKKwor X1BST1RPVFlQKGludCBlbmNyeXB0X2tzX3N0cmVhbSwoc3RydWN0IGtzdHJlYW1fZGF0YV9ibG9j ayAqLCAvKiBvdXRwdXQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ry dWN0IGtzdHJlYW1fZGF0YV9ibG9jayAqKSk7IC8qIGlucHV0ICovCisKK19QUk9UT1RZUChpbnQg ZGVjcnlwdF9rc19zdHJlYW0sKHN0cnVjdCBrc3RyZWFtX2RhdGFfYmxvY2sgKiwgLyogb3V0cHV0 ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBrc3RyZWFtX2Rh dGFfYmxvY2sgKikpOyAvKiBpbnB1dCAqLworCitpbnQKKyNpZmRlZiBDS19BTlNJQworZW5jcnlw dF9rc19zdHJlYW0oc3RydWN0IGtzdHJlYW1fZGF0YV9ibG9jayAqaSwKKyAgICAgICAgICAgICAg ICAgIHN0cnVjdCBrc3RyZWFtX2RhdGFfYmxvY2sgKm8pCisjZWxzZQorZW5jcnlwdF9rc19zdHJl YW0oaSxvKQorICAgIHN0cnVjdCBrc3RyZWFtX2RhdGFfYmxvY2sgKmk7IHN0cnVjdCBrc3RyZWFt X2RhdGFfYmxvY2sgKm87CisjZW5kaWYKK3sKKyAgICAvKgorICAgICogdGhpcyBpcyByZWFsbHkg cXVpdGUgYm9ndXMsIHNpbmNlIGl0IGRvZXMgYW4gaW4tcGxhY2UgZW5jcnlwdGlvbi4uLgorICAg ICovCisgICAgaWYgKGVuY3J5cHRfb3V0cHV0KSB7CisgICAgICAgIGVuY3J5cHRfb3V0cHV0KGkt PnB0ciwgaS0+bGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgIHJldHVybiAw OworfQorCisKK2ludAorI2lmZGVmIENLX0FOU0lDCitkZWNyeXB0X2tzX3N0cmVhbShzdHJ1Y3Qg a3N0cmVhbV9kYXRhX2Jsb2NrICppLAorICAgICAgICAgICAgICAgICAgc3RydWN0IGtzdHJlYW1f ZGF0YV9ibG9jayAqbykKKyNlbHNlCitkZWNyeXB0X2tzX3N0cmVhbShpLG8pCisgICAgc3RydWN0 IGtzdHJlYW1fZGF0YV9ibG9jayAqaTsgc3RydWN0IGtzdHJlYW1fZGF0YV9ibG9jayAqbzsKKyNl bmRpZgoreworICAgIHVuc2lnbmVkIGludCBsZW47CisgIC8qCisgICAqIHRoaXMgaXMgcmVhbGx5 IHF1aXRlIGJvZ3VzLCBzaW5jZSBpdCBkb2VzIGFuIGluLXBsYWNlIGRlY3J5cHRpb24uLi4KKyAg ICovCisgICAgaWYgKGRlY3J5cHRfaW5wdXQpIHsKKyAgICAgICAgZm9yIChsZW4gPSAwIDsgbGVu IDwgaS0+bGVuZ3RoIDsgbGVuKyspCisgICAgICAgICAgICAoKHVuc2lnbmVkIGNoYXIgKilpLT5w dHIpW2xlbl0KKyAgICAgICAgICAgICAgICA9IGRlY3J5cHRfaW5wdXQoKCh1bnNpZ25lZCBjaGFy ICopaS0+cHRyKVtsZW5dKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgIHJldHVybiAw OworfQorCitpbnQKKyNpZmRlZiBDS19BTlNJQworZGVjcnlwdF9rc19oYWNrKHVuc2lnbmVkIGNo YXIgKmJ1ZiwgaW50IGNudCkKKyNlbHNlCitkZWNyeXB0X2tzX2hhY2soYnVmLGNudCkgdW5zaWdu ZWQgY2hhciAqYnVmOyBpbnQgY250OworI2VuZGlmCit7CisgICAgaW50IGxlbjsKKyAgLyoKKyAg ICogdGhpcyBpcyByZWFsbHkgcXVpdGUgYm9ndXMsIHNpbmNlIGl0IGRvZXMgYW4gaW4tcGxhY2Ug ZGVjcnlwdGlvbi4uLgorICAgKi8KKyAgICBmb3IgKGxlbiA9IDAgOyBsZW4gPCBjbnQgOyBsZW4r KykKKyAgICAgICAgYnVmW2xlbl0gPSBkZWNyeXB0X2lucHV0KGJ1ZltsZW5dKTsKKworI2lmZGVm IERFQlVHCisgICAgY2toZXhkdW1wKCJkZWNyeXB0IGtzIGhhY2siLCBidWYsIGNudCk7CisjZW5k aWYKKyAgICByZXR1cm4gMTsKK30KKworCisvKgorICogcGFyc2VkYXRbMF0gPT0gdGhlIHN1Ym9w dGlvbiB3ZSBtaWdodCBiZSBuZWdvdGlhdGluZywKKyAqLworaW50CisjaWZkZWYgQ0tfQU5TSUMK K2VuY3J5cHRfcGFyc2UodW5zaWduZWQgY2hhciAqcGFyc2VkYXQsIGludCBlbmRfc3ViKQorI2Vs c2UKK2VuY3J5cHRfcGFyc2UocGFyc2VkYXQsZW5kX3N1YikgdW5zaWduZWQgY2hhciAqcGFyc2Vk YXQ7IGludCBlbmRfc3ViOworI2VuZGlmCit7CisgICAgaW50IHJjID0gMDsKKworICAgIHN3aXRj aChwYXJzZWRhdFsxXSkgeworICAgIGNhc2UgRU5DUllQVF9TVEFSVDoKKyAgICAgICAgcmMgPSBl bmNyeXB0X3N0YXJ0KHBhcnNlZGF0ICsgMiwgZW5kX3N1YiAtIDIpOworICAgICAgICBicmVhazsK KyAgICBjYXNlIEVOQ1JZUFRfRU5EOgorICAgICAgICByYyA9IGVuY3J5cHRfZW5kKCk7CisgICAg ICAgIGJyZWFrOworICAgIGNhc2UgRU5DUllQVF9TVVBQT1JUOgorICAgICAgICByYyA9IGVuY3J5 cHRfc3VwcG9ydChwYXJzZWRhdCArIDIsIGVuZF9zdWIgLSAyKTsKKyAgICAgICAgYnJlYWs7Cisg ICAgY2FzZSBFTkNSWVBUX1JFUVNUQVJUOgorICAgICAgICByYyA9IGVuY3J5cHRfcmVxdWVzdF9z dGFydCgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEVOQ1JZUFRfUkVRRU5EOgorICAgICAg ICAvKgorICAgICAgICAqIFdlIGNhbiBhbHdheXMgc2VuZCBhbiBSRVFFTkQgc28gdGhhdCB3ZSBj YW5ub3QKKyAgICAgICAgKiBnZXQgc3R1Y2sgZW5jcnlwdGluZy4gIFdlIHNob3VsZCBvbmx5IGdl dCB0aGlzCisgICAgICAgICogaWYgd2UgaGF2ZSBiZWVuIGFibGUgdG8gZ2V0IGluIHRoZSBjb3Jy ZWN0IG1vZGUKKyAgICAgICAgKiBhbnlob3cuCisgICAgICAgICovCisgICAgICAgIHJjID0gZW5j cnlwdF9yZXF1ZXN0X2VuZCgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEVOQ1JZUFRfSVM6 CisgICAgICAgIHJjID0gZW5jcnlwdF9pcyhwYXJzZWRhdCArIDIsIGVuZF9zdWIgLSAyKTsKKyAg ICAgICAgYnJlYWs7CisgICAgY2FzZSBFTkNSWVBUX1JFUExZOgorICAgICAgICByYyA9IGVuY3J5 cHRfcmVwbHkocGFyc2VkYXQgKyAyLCBlbmRfc3ViIC0gMik7CisgICAgICAgIGJyZWFrOworICAg IGNhc2UgRU5DUllQVF9FTkNfS0VZSUQ6CisgICAgICAgIHJjID0gZW5jcnlwdF9lbmNfa2V5aWQo cGFyc2VkYXQgKyAyLCBlbmRfc3ViIC0gMik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRU5D UllQVF9ERUNfS0VZSUQ6CisgICAgICAgIHJjID0gZW5jcnlwdF9kZWNfa2V5aWQocGFyc2VkYXQg KyAyLCBlbmRfc3ViIC0gMik7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAg IHJjID0gLTE7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4ocmMpOworfQorCisv KiBYWFggKi8KK0VuY3J5cHRpb25zICoKKyNpZmRlZiBDS19BTlNJQworZmluZGVuY3J5cHRpb24o aW50IHR5cGUpCisjZWxzZQorZmluZGVuY3J5cHRpb24odHlwZSkgaW50IHR5cGU7CisjZW5kaWYK K3sKKyAgICBFbmNyeXB0aW9ucyAqZXAgPSBlbmNyeXB0aW9uczsKKworICAgIGlmICghKElfU1VQ UE9SVF9FTkNSWVBUICYgcmVtb3RlX3N1cHBvcnRzX2RlY3J5cHQgJiB0eXBlbWFzayh0eXBlKSkp CisgICAgICAgIHJldHVybigwKTsKKyAgICB3aGlsZSAoZXAtPnR5cGUgJiYgZXAtPnR5cGUgIT0g dHlwZSkKKyAgICAgICAgKytlcDsKKyAgICByZXR1cm4oZXAtPnR5cGUgPyBlcCA6IDApOworfQor CitFbmNyeXB0aW9ucyAqCisjaWZkZWYgQ0tfQU5TSUMKK2ZpbmRkZWNyeXB0aW9uKGludCB0eXBl KQorI2Vsc2UKK2ZpbmRkZWNyeXB0aW9uKHR5cGUpIGludCB0eXBlOworI2VuZGlmCit7CisgICAg RW5jcnlwdGlvbnMgKmVwID0gZW5jcnlwdGlvbnM7CisKKyAgICBpZiAoIShJX1NVUFBPUlRfREVD UllQVCAmIHJlbW90ZV9zdXBwb3J0c19lbmNyeXB0ICYgdHlwZW1hc2sodHlwZSkpKQorICAgICAg ICByZXR1cm4oMCk7CisgICAgd2hpbGUgKGVwLT50eXBlICYmIGVwLT50eXBlICE9IHR5cGUpCisg ICAgICAgICsrZXA7CisgICAgcmV0dXJuKGVwLT50eXBlID8gZXAgOiAwKTsKK30KKworI2RlZmlu ZSBNQVhLRVlMRU4gNjQKKworc3RhdGljIHN0cnVjdCBrZXlfaW5mbyB7CisgICAgdW5zaWduZWQg Y2hhciBrZXlpZFtNQVhLRVlMRU5dOworICAgIGludCBrZXlsZW47CisgICAgaW50IGRpcjsKKyAg ICBpbnQgKm1vZGVwOworICAgIEVuY3J5cHRpb25zICooKmdldGNyeXB0KSgpOworfSBraVsyXSA9 IHsKKyAgICB7IHsgMCB9LCAwLCBESVJfRU5DUllQVCwgJmVuY3J5cHRfbW9kZSwgZmluZGVuY3J5 cHRpb24gfSwKKyAgICB7IHsgMCB9LCAwLCBESVJfREVDUllQVCwgJmRlY3J5cHRfbW9kZSwgZmlu ZGRlY3J5cHRpb24gfSwKK307CisKK1ZPSUQKKyNpZmRlZiBDS19BTlNJQworZW5jcnlwdF9pbml0 KGtzdHJlYW0gaWtzLCBpbnQgdHlwZSkKKyNlbHNlCitlbmNyeXB0X2luaXQoaWtzLCB0eXBlKSBr c3RyZWFtIGlrczsgaW50IHR5cGU7CisjZW5kaWYKK3sKKyAgICBFbmNyeXB0aW9ucyAqZXAgPSBl bmNyeXB0aW9uczsKKworICAgIGlfc3VwcG9ydF9lbmNyeXB0ID0gaV9zdXBwb3J0X2RlY3J5cHQg PSAwOworICAgIHJlbW90ZV9zdXBwb3J0c19lbmNyeXB0ID0gcmVtb3RlX3N1cHBvcnRzX2RlY3J5 cHQgPSAwOworICAgIGlfd29udF9zdXBwb3J0X2VuY3J5cHQgPSBpX3dvbnRfc3VwcG9ydF9kZWNy eXB0ID0gMDsKKyAgICBlbmNyeXB0X21vZGUgPSAwOworICAgIGRlY3J5cHRfbW9kZSA9IDA7Cisg ICAgZW5jcnlwdF9vdXRwdXQgPSBOVUxMOworICAgIGRlY3J5cHRfaW5wdXQgPSBOVUxMOworICAg IGtpWzBdLmtleWxlbiA9IDA7CisgICAgbWVtc2V0KGtpWzBdLmtleWlkLDAsTUFYS0VZTEVOKTsK KyAgICBraVsxXS5rZXlsZW4gPSAwOworICAgIG1lbXNldChraVsxXS5rZXlpZCwwLE1BWEtFWUxF Tik7CisgICAgaGF2ZXNlc3Npb25rZXkgPSAwOworICAgIGF1dG9lbmNyeXB0ID0gMTsKKyAgICBh dXRvZGVjcnlwdCA9IDE7CisKKyAgICBFbmNyeXB0S1NHbG9iYWxIYWNrID0gaWtzOworICAgIEVu Y3J5cHRUeXBlID0gdHlwZTsKKworICAgIHN0cl9zZW5kWzBdID0gSUFDOworICAgIHN0cl9zZW5k WzFdID0gU0I7CisgICAgc3RyX3NlbmRbMl0gPSBURUxPUFRfRU5DUllQVElPTjsKKyAgICBzdHJf c2VuZFszXSA9IEVOQ1JZUFRfU1VQUE9SVDsKKyAgICBzdHJfc3VwbGVuID0gNDsKKworICAgIHdo aWxlIChlcC0+dHlwZSkgeworICAgICAgICBpZiAoIEVuY3J5cHRUeXBlID09IEVOQ1RZUEVfQU5Z IHx8CisgICAgICAgICAgICAgRW5jcnlwdFR5cGUgPT0gZXAtPnR5cGUgKSB7CisjaWZkZWYgREVC VUcKKyAgICAgICAgICAgIGlmIChlbmNyeXB0X2RlYnVnX21vZGUpIHsKKyAgICAgICAgICAgICAg ICBzcHJpbnRmKGRiZ2J1ZiwgIj4+Pkkgd2lsbCBzdXBwb3J0ICVzXG4iLAorICAgICAgICAgICAg ICAgICAgICAgICAgIEVOQ1RZUEVfTkFNRShlcC0+dHlwZSkpOyAgICAgICAvKiBzYWZlICovCisg ICAgICAgICAgICAgICAgZGVidWcoRjExMCwiZW5jcnlwdF9pbml0IixkYmdidWYsMCk7CisgICAg ICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgICAgIGlfc3VwcG9ydF9lbmNyeXB0IHw9IHR5cGVt YXNrKGVwLT50eXBlKTsKKyAgICAgICAgICAgIGlfc3VwcG9ydF9kZWNyeXB0IHw9IHR5cGVtYXNr KGVwLT50eXBlKTsKKyAgICAgICAgICAgIGlmICgoaV93b250X3N1cHBvcnRfZGVjcnlwdCAmIHR5 cGVtYXNrKGVwLT50eXBlKSkgPT0gMCkKKyAgICAgICAgICAgICAgICBpZiAoKHN0cl9zZW5kW3N0 cl9zdXBsZW4rK10gPSBlcC0+dHlwZSkgPT0gSUFDKQorICAgICAgICAgICAgICAgICAgICBzdHJf c2VuZFtzdHJfc3VwbGVuKytdID0gSUFDOworICAgICAgICB9CisgICAgICAgIGlmIChlcC0+aW5p dCkKKyAgICAgICAgICAgICgqZXAtPmluaXQpKDApOworICAgICAgICArK2VwOworICAgIH0KKyAg ICBzdHJfc2VuZFtzdHJfc3VwbGVuKytdID0gSUFDOworICAgIHN0cl9zZW5kW3N0cl9zdXBsZW4r K10gPSBTRTsKK30KKworVk9JRAorI2lmZGVmIENLX0FOU0lDCitlbmNyeXB0X3NlbmRfc3VwcG9y dChWT0lEKQorI2Vsc2UKK2VuY3J5cHRfc2VuZF9zdXBwb3J0KCkKKyNlbmRpZgoreworICAgIEVu Y3J5cHRpb25zICplcCA9IGVuY3J5cHRpb25zOworCisjaWZkZWYgQ0tfU1NMCisgICAgaWYgKFRF TE9QVF9TQihURUxPUFRfU1RBUlRfVExTKS5zdGFydF90bHMubWVfZm9sbG93cykKKyAgICAgICAg cmV0dXJuOworI2VuZGlmIC8qIENLX1NTTCAqLworCisgICAgc3RyX3NlbmRbMF0gPSBJQUM7Cisg ICAgc3RyX3NlbmRbMV0gPSBTQjsKKyAgICBzdHJfc2VuZFsyXSA9IFRFTE9QVF9FTkNSWVBUSU9O OworICAgIHN0cl9zZW5kWzNdID0gRU5DUllQVF9TVVBQT1JUOworICAgIHN0cl9zdXBsZW4gPSA0 OworCisgICAgd2hpbGUgKGVwLT50eXBlKSB7CisgICAgICAgIGlmICggRW5jcnlwdFR5cGUgPT0g RU5DVFlQRV9BTlkgfHwKKyAgICAgICAgICAgICBFbmNyeXB0VHlwZSA9PSBlcC0+dHlwZSApIHsK KyNpZmRlZiBERUJVRworICAgICAgICAgICAgaWYgKGVuY3J5cHRfZGVidWdfbW9kZSkgeworICAg ICAgICAgICAgICAgIHNwcmludGYoZGJnYnVmLCAiPj4+SSB3aWxsIHN1cHBvcnQgJXNcbiIsCisg ICAgICAgICAgICAgICAgICAgICAgICAgRU5DVFlQRV9OQU1FKGVwLT50eXBlKSk7ICAgICAgICAg ICAgICAgLyogc2FmZSAqLworICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsImVuY3J5cHRfc2Vu ZF9zdXBwb3J0IixkYmdidWYsMCk7CisgICAgICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgICAg IGlmICgoaV93b250X3N1cHBvcnRfZGVjcnlwdCAmIHR5cGVtYXNrKGVwLT50eXBlKSkgPT0gMCkK KyAgICAgICAgICAgICAgICBpZiAoKHN0cl9zZW5kW3N0cl9zdXBsZW4rK10gPSBlcC0+dHlwZSkg PT0gSUFDKQorICAgICAgICAgICAgICAgICAgICBzdHJfc2VuZFtzdHJfc3VwbGVuKytdID0gSUFD OworICAgICAgICB9CisgICAgICAgICsrZXA7CisgICAgfQorICAgIHN0cl9zZW5kW3N0cl9zdXBs ZW4rK10gPSBJQUM7CisgICAgc3RyX3NlbmRbc3RyX3N1cGxlbisrXSA9IFNFOworCisgICAgLyoK KyAgICAqIElmIHRoZSB1c2VyIGhhcyByZXF1ZXN0ZWQgdGhhdCBkZWNyeXB0aW9uIHN0YXJ0Cisg ICAgKiBpbW1lZGlhdGx5LCB0aGVuIHNlbmQgYSAiUkVRVUVTVCBTVEFSVCIgYmVmb3JlCisgICAg KiB3ZSBuZWdvdGlhdGUgdGhlIHR5cGUuCisgICAgKi8KKyAgICBpZiAoYXV0b2RlY3J5cHQpCisg ICAgICAgIGVuY3J5cHRfc2VuZF9yZXF1ZXN0X3N0YXJ0KCk7CisKKyAgICBpZiAoZGVibG9nIHx8 IHRuX2RlYiB8fCBkZWJzZXMpIHsKKyAgICAgICAgaW50IGk7CisgICAgICAgIHNwcmludGYodG5f bXNnLCJURUxORVQgU0VOVCBTQiAlcyBTVVBQT1JUICIsCisgICAgICAgICAgICAgICAgIFRFTE9Q VChURUxPUFRfRU5DUllQVElPTikpOyAgICAgICAgICAgICAgICAgICAgLyogc2FmZSAqLworICAg ICAgICBmb3IgKCBpPTQ7aTxzdHJfc3VwbGVuLTI7aSsrICkgeworICAgICAgICAgICAgaWYgKCBz dHJfc2VuZFtpXSA9PSBJQUMgKSB7CisgICAgICAgICAgICAgICAgY2tzdHJuY2F0KHRuX21zZywi SUFDICIsVE5fTVNHX0xFTik7CisgICAgICAgICAgICAgICAgaSsrOworICAgICAgICAgICAgfQor ICAgICAgICAgICAgY2tzdHJuY2F0KHRuX21zZyxFTkNUWVBFX05BTUUoc3RyX3NlbmRbaV0pLFRO X01TR19MRU4pOworICAgICAgICAgICAgY2tzdHJuY2F0KHRuX21zZywiICIsVE5fTVNHX0xFTik7 CisgICAgICAgIH0KKyAgICAgICAgY2tzdHJuY2F0KHRuX21zZywiSUFDIFNFIixUTl9NU0dfTEVO KTsKKyAgICAgICAgZGVidWcoRjEwMCx0bl9tc2csIiIsMCk7CisgICAgICAgIGlmICh0bl9kZWIg fHwgZGVic2VzKSB0bl9kZWJ1Zyh0bl9tc2cpOworICAgIH0KKyNpZmRlZiBPUzIKKyAgICBSZXF1 ZXN0VGVsbmV0TXV0ZXgoIFNFTV9JTkRFRklOSVRFX1dBSVQgKTsKKyNlbmRpZgorICAgIHR0b2wo c3RyX3NlbmQsIHN0cl9zdXBsZW4pOworI2lmZGVmIE9TMgorICAgIFJlbGVhc2VUZWxuZXRNdXRl eCgpOworI2VuZGlmCisKKyAgICBzdHJfc3VwbGVuID0gMDsKK30KKworLyoKKyAqIENhbGxlZCB3 aGVuIEVOQ1JZUFQgU1VQUE9SVCBpcyByZWNlaXZlZC4KKyAqLworaW50CisjaWZkZWYgQ0tfQU5T SUMKK2VuY3J5cHRfc3VwcG9ydCh1bnNpZ25lZCBjaGFyICpfdHlwZWxpc3QsIGludCBfY250KQor I2Vsc2UKK2VuY3J5cHRfc3VwcG9ydChfdHlwZWxpc3QsIF9jbnQpIHVuc2lnbmVkIGNoYXIgKiBf dHlwZWxpc3Q7IGludCBfY250OworI2VuZGlmCit7CisgICAgcmVnaXN0ZXIgaW50IHR5cGUsIHVz ZV90eXBlID0gMDsKKyAgICB1bnNpZ25lZCBjaGFyICogdHlwZWxpc3QgPSBfdHlwZWxpc3Q7Cisg ICAgaW50IGNudCA9IF9jbnQ7CisgICAgRW5jcnlwdGlvbnMgKmVwOworCisgICAgZGVidWcoRjEx MSwiZW5jcnlwdF9zdXBwb3J0IiwiY250IixjbnQpOworCisgIC8qCisgICAqIEZvcmdldCBhbnl0 aGluZyB0aGUgb3RoZXIgc2lkZSBoYXMgcHJldmlvdXNseSB0b2xkIHVzLgorICAgKi8KKyAgICBy ZW1vdGVfc3VwcG9ydHNfZGVjcnlwdCA9IDA7CisKKyAgICB3aGlsZSAoY250LS0gPiAwKSB7CisJ ZGVidWcoRjEwMSwiWFhYIGNudCIsIiIsY250KTsKKyAgICAgICAgdHlwZSA9ICp0eXBlbGlzdCsr OworCWRlYnVnKEYxMDEsIlhYWCB0eXBlIiwiIix0eXBlKTsKKwlkZWJ1ZyhGMTAxLCJYWFggRU5D VFlQRV9BTlkiLCIiLEVOQ1RZUEVfQU5ZKTsKKyAgICAgICAgaWYgKCBFbmNyeXB0VHlwZSA9PSBF TkNUWVBFX0FOWSB8fAorICAgICAgICAgICAgIEVuY3J5cHRUeXBlID09IHR5cGUgKSB7CisjaWZk ZWYgREVCVUcKKyAgICAgICAgICAgIGlmIChlbmNyeXB0X2RlYnVnX21vZGUpIHsKKyAgICAgICAg ICAgICAgICBzcHJpbnRmKGRiZ2J1ZiwgIj4+PlJlbW90ZSBzdXBwb3J0cyAlcyAoJWQpXG4iLAor ICAgICAgICAgICAgICAgICAgICAgICAgIEVOQ1RZUEVfTkFNRSh0eXBlKSwgdHlwZSk7ICAgICAg ICAgICAgIC8qIHNhZmUgKi8KKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJlbmNyeXB0X3N1 cHBvcnQiLGRiZ2J1ZiwwKTsKKyAgICAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICAgICAgaWYg KCh0eXBlIDwgRU5DVFlQRV9DTlQpICYmCisgICAgICAgICAgICAgICAgIChJX1NVUFBPUlRfRU5D UllQVCAmIHR5cGVtYXNrKHR5cGUpKSkgeworICAgICAgICAgICAgICAgIHJlbW90ZV9zdXBwb3J0 c19kZWNyeXB0IHw9IHR5cGVtYXNrKHR5cGUpOworICAgICAgICAgICAgICAgIGlmICh1c2VfdHlw ZSA9PSAwKQorICAgICAgICAgICAgICAgICAgICB1c2VfdHlwZSA9IHR5cGU7CisgICAgICAgICAg ICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZGVidWcoRjEwMSwiWFhYIHVzZV90eXBlIiwiIix1 c2VfdHlwZSk7CisgICAgaWYgKHVzZV90eXBlKSB7CisgICAgICAgIGVwID0gZmluZGVuY3J5cHRp b24odXNlX3R5cGUpOworICAgICAgICBpZiAoIWVwKSB7CisgICAgICAgICAgICBkZWJ1ZyhGMTEx LCJlbmNyeXB0X3N1cHBvcnQiLCJmaW5kZW5jcnlwdGlvbiA9PSBOVUxMIix1c2VfdHlwZSk7Cisg ICAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICB9CisJZGVidWcoRjEwMCwiWFhYIGVwIG5v dCBOVUxMIiwiIiwwKTsKKyAgICAgICAgdHlwZSA9IGVwLT5zdGFydCA/ICgqZXAtPnN0YXJ0KShE SVJfRU5DUllQVCwgMCkgOiAwOworCWRlYnVnKEYxMDEsIlhYWCBuZXcgdHlwZSIsIiIsdHlwZSk7 CisjaWZkZWYgREVCVUcKKyAgICAgICAgaWYgKGVuY3J5cHRfZGVidWdfbW9kZSkgeworICAgICAg ICAgICAgc3ByaW50ZihkYmdidWYsICI+Pj4oKmVwLT5zdGFydCkoKSAlcyByZXR1cm5lZCAlZCAo JXMpXG4iLAorICAgICAgICAgICAgICAgICAgICAgRU5DVFlQRV9OQU1FKHVzZV90eXBlKSwgdHlw ZSwKKyAgICAgICAgICAgICAgICAgICAgIEVOQ1JZUFRfTkFNRSh0eXBlKSk7ICAgICAgICAgICAg ICAgICAgICAgICAvKiBzYWZlICovCisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJlbmNyeXB0X3N1 cHBvcnQiLGRiZ2J1ZiwwKTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgICAgIGlmICh0eXBlIDwg MCkgeworICAgICAgICAgICAgZGVidWcoRjExMSwiZW5jcnlwdF9zdXBwb3J0IiwidHlwZSA8IDAi LHR5cGUpOworICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgfQorICAgICAgICBlbmNy eXB0X21vZGUgPSB1c2VfdHlwZTsKKyAgICAgICAgaWYgKHR5cGUgPT0gMCkKKyAgICAgICAgICAg IGVuY3J5cHRfc3RhcnRfb3V0cHV0KHVzZV90eXBlKTsKKyAgICAgICAgZGVidWcoRjExMSwiZW5j cnlwdF9zdXBwb3J0Iiwic3VjY2VzcyIsdHlwZSk7CisgICAgICAgIHJldHVybigwKTsKKyAgICB9 CisgICAgZGVidWcoRjExMSwiZW5jcnlwdF9zdXBwb3J0IiwiZmFpbGVkIix1c2VfdHlwZSk7Cisg ICAgcmV0dXJuKC0xKTsKK30KKworaW50CisjaWZkZWYgQ0tfQU5TSUMKK2VuY3J5cHRfaXModW5z aWduZWQgY2hhciAqZGF0YSwgaW50IGNudCkKKyNlbHNlCitlbmNyeXB0X2lzKGRhdGEsIGNudCkg dW5zaWduZWQgY2hhciAqZGF0YTsgaW50IGNudDsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworewor ICAgIEVuY3J5cHRpb25zICplcDsKKyAgICByZWdpc3RlciBpbnQgdHlwZSwgcmV0OworCisgICAg aWYgKC0tY250IDwgMCkKKyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB0eXBlID0gKmRhdGErKzsK KyAgICBpZiAodHlwZSA8IEVOQ1RZUEVfQ05UKQorICAgICAgICByZW1vdGVfc3VwcG9ydHNfZW5j cnlwdCB8PSB0eXBlbWFzayh0eXBlKTsKKyAgICBpZiAoIShlcCA9IGZpbmRkZWNyeXB0aW9uKHR5 cGUpKSkgeworI2lmZGVmIERFQlVHCisgICAgICAgIGlmIChlbmNyeXB0X2RlYnVnX21vZGUpIHsK KyAgICAgICAgICAgIHNwcmludGYoZGJnYnVmLCAiPj4+ZW5jcnlwdF9pczogICIKKyAgICAgICAg ICAgICAgICAgICAgICJDYW4ndCBmaW5kIHR5cGUgJXMgKCVkKSBmb3IgaW5pdGlhbCBuZWdvdGlh dGlvblxuIiwKKyAgICAgICAgICAgICAgICAgICAgIEVOQ1RZUEVfTkFNRV9PSyh0eXBlKQorICAg ICAgICAgICAgICAgICAgICAgPyBFTkNUWVBFX05BTUUodHlwZSkgOiAiKHVua25vd24pIiwKKyAg ICAgICAgICAgICAgICAgICAgIHR5cGUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBzYWZlICovCisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJlbmNyeXB0X2lzIixkYmdi dWYsMCk7CisgICAgICAgIH0KKyNlbmRpZgorICAgICAgICByZXR1cm4oLTEpOworICAgIH0KKyAg ICBpZiAoIWVwLT5pcykgeworI2lmZGVmIERFQlVHCisgICAgICAgIGlmIChlbmNyeXB0X2RlYnVn X21vZGUpIHsKKyAgICAgICAgICAgIHNwcmludGYoZGJnYnVmLCAiPj4+ZW5jcnlwdF9pczogICIK KyAgICAgICAgICAgICAgICAgICAgICJObyBpbml0aWFsIG5lZ290aWF0aW9uIG5lZWRlZCBmb3Ig dHlwZSAlcyAoJWQpXG4iLAorICAgICAgICAgICAgICAgICAgICAgRU5DVFlQRV9OQU1FX09LKHR5 cGUpCisgICAgICAgICAgICAgICAgICAgICA/IEVOQ1RZUEVfTkFNRSh0eXBlKSA6ICIodW5rbm93 bikiLAorICAgICAgICAgICAgICAgICAgICAgdHlwZSk7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIHNhZmUgKi8KKyAgICAgICAgICAgIGRlYnVnKEYxMTAsImVuY3J5cHRf aXMiLGRiZ2J1ZiwwKTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgICAgIHJldCA9IDA7CisgICAg fSBlbHNlIHsKKyAgICAgICAgcmV0ID0gKCplcC0+aXMpKGRhdGEsIGNudCk7CisjaWZkZWYgREVC VUcKKyAgICAgICAgaWYgKGVuY3J5cHRfZGVidWdfbW9kZSkgeworICAgICAgICAgICAgc3ByaW50 ZihkYmdidWYsICJlbmNyeXB0X2lzOiAgIgorICAgICAgICAgICAgICAgICAgICAgIigqZXAtPmlz KSgleCwgJWQpIHJldHVybmVkICVzKCVkKVxuIiwgZGF0YSwgY250LAorICAgICAgICAgICAgICAg ICAgICAgKHJldCA8IDApID8gIkZBSUwgIiA6CisgICAgICAgICAgICAgICAgICAgICAocmV0ID09 IDApID8gIlNVQ0NFU1MgIiA6ICJNT1JFX1RPX0RPICIsIHJldCk7IC8qIHNhZmUgKi8KKyAgICAg ICAgICAgIGRlYnVnKEYxMTAsImVuY3J5cHRfaXMiLGRiZ2J1ZiwwKTsKKyAgICAgICAgfQorI2Vu ZGlmCisgICAgfQorICAgIGlmIChyZXQgPCAwKSB7CisgICAgICAgIGF1dG9kZWNyeXB0ID0gMDsK KyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9IGVsc2UgeworICAgICAgICBkZWNyeXB0X21vZGUg PSB0eXBlOworICAgICAgICBpZiAocmV0ID09IDAgJiYgYXV0b2RlY3J5cHQpIHsKKyAgICAgICAg ICAgIGVuY3J5cHRfc2VuZF9yZXF1ZXN0X3N0YXJ0KCk7CisgICAgICAgIH0KKyAgICB9CisgICAg cmV0dXJuKDApOworfQorCitpbnQKKyNpZmRlZiBDS19BTlNJQworZW5jcnlwdF9yZXBseSh1bnNp Z25lZCBjaGFyICpkYXRhLCBpbnQgY250KQorI2Vsc2UKK2VuY3J5cHRfcmVwbHkoZGF0YSwgY250 KSB1bnNpZ25lZCBjaGFyICpkYXRhOyBpbnQgY250OworI2VuZGlmCit7CisgICAgRW5jcnlwdGlv bnMgKmVwOworICAgIHJlZ2lzdGVyIGludCByZXQsIHR5cGU7CisKKyAgICBpZiAoLS1jbnQgPCAw KQorICAgICAgICByZXR1cm4oLTEpOworICAgIHR5cGUgPSAqZGF0YSsrOworICAgIGlmICghKGVw ID0gZmluZGVuY3J5cHRpb24odHlwZSkpKSB7CisjaWZkZWYgREVCVUcKKyAgICAgICAgaWYgKGVu Y3J5cHRfZGVidWdfbW9kZSkgeworICAgICAgICAgICAgc3ByaW50ZihkYmdidWYsCisgICAgICAg ICAgICAgICAgICAgICI+Pj5DYW4ndCBmaW5kIHR5cGUgJXMgKCVkKSBmb3IgaW5pdGlhbCBuZWdv dGlhdGlvblxuIiwKKyAgICAgICAgICAgICAgICAgICAgIEVOQ1RZUEVfTkFNRV9PSyh0eXBlKQor ICAgICAgICAgICAgICAgICAgICAgPyBFTkNUWVBFX05BTUUodHlwZSkgOiAiKHVua25vd24pIiwK KyAgICAgICAgICAgICAgICAgICAgIHR5cGUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBzYWZlICovCisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJlbmNyeXB0X3JlcGx5 IixkYmdidWYsMCk7CisgICAgICAgIH0KKyNlbmRpZgorICAgICAgICByZXR1cm4oLTEpOworICAg IH0KKyAgICBpZiAoIWVwLT5yZXBseSkgeworI2lmZGVmIERFQlVHCisgICAgICAgIGlmIChlbmNy eXB0X2RlYnVnX21vZGUpIHsKKyAgICAgIHNwcmludGYoZGJnYnVmLCAiPj4+Tm8gaW5pdGlhbCBu ZWdvdGlhdGlvbiBuZWVkZWQgZm9yIHR5cGUgJXMgKCVkKVxuIiwKKyAgICAgICAgICAgICAgIEVO Q1RZUEVfTkFNRV9PSyh0eXBlKQorICAgICAgICAgICAgICAgPyBFTkNUWVBFX05BTUUodHlwZSkg OiAiKHVua25vd24pIiwKKyAgICAgICAgICAgICAgIHR5cGUpOyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBzYWZlICovCisgICAgICAgICAgICBkZWJ1ZyhGMTEw LCJlbmNyeXB0X3JlcGx5IixkYmdidWYsMCk7CisgICAgICAgIH0KKyNlbmRpZgorICAgICAgICBy ZXQgPSAwOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldCA9ICgqZXAtPnJlcGx5KShkYXRhLCBj bnQpOworI2lmZGVmIERFQlVHCisgICAgICAgIGlmIChlbmNyeXB0X2RlYnVnX21vZGUpIHsKKyAg ICAgICAgICAgIHNwcmludGYoZGJnYnVmLCAiKCplcC0+cmVwbHkpKCV4LCAlZCkgcmV0dXJuZWQg JXMoJWQpXG4iLAorICAgICAgICAgICAgICAgICAgICAgZGF0YSwgY250LAorICAgICAgICAgICAg ICAgICAgICAgKHJldCA8IDApID8gIkZBSUwgIiA6CisgICAgICAgICAgICAgICAgICAgICAocmV0 ID09IDApID8gIlNVQ0NFU1MgIiA6ICJNT1JFX1RPX0RPICIsIHJldCk7IC8qIHNhZmUgKi8KKyAg ICAgICAgICAgIGRlYnVnKEYxMTAsImVuY3J5cHRfcmVwbHkiLGRiZ2J1ZiwwKTsKKyAgICAgICAg fQorI2VuZGlmCisgICAgfQorI2lmZGVmIERFQlVHCisgICAgaWYgKGVuY3J5cHRfZGVidWdfbW9k ZSkgeworICAgICAgICBzcHJpbnRmKGRiZ2J1ZiwgIj4+PmVuY3J5cHRfcmVwbHkgcmV0dXJuZWQg JWRcbiIsIHJldCk7IC8qIHNhZmUgKi8KKyAgICAgICAgZGVidWcoRjExMCwiZW5jcnlwdF9yZXBs eSIsZGJnYnVmLDApOworICAgIH0KKyNlbmRpZgorICAgIGlmIChyZXQgPCAwKSB7CisgICAgICAg IGF1dG9lbmNyeXB0ID0gMDsKKyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9IGVsc2UgeworICAg ICAgICBlbmNyeXB0X21vZGUgPSB0eXBlOworICAgICAgICBpZiAocmV0ID09IDAgJiYgYXV0b2Vu Y3J5cHQpCisgICAgICAgICAgICBlbmNyeXB0X3N0YXJ0X291dHB1dCh0eXBlKTsKKyAgICB9Cisg ICAgcmV0dXJuKDApOworfQorCisvKgorICogQ2FsbGVkIHdoZW4gYSBFTkNSWVBUIFNUQVJUIGNv bW1hbmQgaXMgcmVjZWl2ZWQuCisgKi8KK2ludAorI2lmZGVmIENLX0FOU0lDCitlbmNyeXB0X3N0 YXJ0KHVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBjbnQpCisjZWxzZQorZW5jcnlwdF9zdGFydChk YXRhLCBjbnQpIHVuc2lnbmVkIGNoYXIgKmRhdGE7IGludCBjbnQ7CisjZW5kaWYKK3sKKyAgICBF bmNyeXB0aW9ucyAqZXA7CisKKyAgICBpZiAoIWRlY3J5cHRfbW9kZSkgeworICAgICAgICAvKgor ICAgICAgICAqIFNvbWV0aGluZyBpcyB3cm9uZy4gIFdlIHNob3VsZCBub3QgZ2V0IGEgU1RBUlQK KyAgICAgICAgKiBjb21tYW5kIHdpdGhvdXQgaGF2aW5nIGFscmVhZHkgcGlja2VkIG91cgorICAg ICAgICAqIGRlY3J5cHRpb24gc2NoZW1lLiAgU2VuZCBhIFJFUVVFU1QtRU5EIHRvCisgICAgICAg ICogYXR0ZW1wdCB0byBjbGVhciB0aGUgY2hhbm5lbC4uLgorICAgICAgICAqLworICAgICAgICBl bmNyeXB0X3NlbmRfcmVxdWVzdF9lbmQoKTsKKyAgICAgICAgcHJpbnRmKCJBdXRoZW50aWNhdGlv biBlcnJvciFcbiVzXG4iLAorICAgICAgICAgICAgICAgICJXYXJuaW5nLCBDYW5ub3QgZGVjcnlw dCBpbnB1dCBzdHJlYW0hISEiKTsKKyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9CisKKyAgICBp ZiAoZXAgPSBmaW5kZGVjcnlwdGlvbihkZWNyeXB0X21vZGUpKSB7CisgICAgICAgIGlmICggZGVj cnlwdF9pbnB1dCAhPSBlcC0+aW5wdXQgKSB7CisgICAgICAgICAgICBkZWNyeXB0X2lucHV0ID0g ZXAtPmlucHV0OworICAgICAgICAgICAgRW5jcnlwdEtTR2xvYmFsSGFjay0+ZGVjcnlwdCA9IGRl Y3J5cHRfa3Nfc3RyZWFtOworICAgICAgICAgICAgRW5jcnlwdEtTR2xvYmFsSGFjay0+ZGVjcnlw dF90eXBlID0gZXAtPnR5cGU7CisKKyAgICAgICAgICAgIGlmIChlbmNyeXB0X3ZlcmJvc2UpIHsK KyAgICAgICAgICAgICAgICBzcHJpbnRmKGRiZ2J1ZiwgIklucHV0IGlzIG5vdyBkZWNyeXB0ZWQg d2l0aCB0eXBlICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBFTkNUWVBFX05BTUUoZGVj cnlwdF9tb2RlKSk7ICAgICAgICAgICAvKiBzYWZlICovCisgICAgICAgICAgICAgICAgZGVidWco RjExMCwiZW5jcnlwdF9zdGFydCIsZGJnYnVmLDApOworICAgICAgICAgICAgICAgIHByaW50Zigi JXNcbiIsZGJnYnVmKTsKKyAgICAgICAgICAgIH0KKyNpZmRlZiBERUJVRworICAgICAgICAgICAg aWYgKGVuY3J5cHRfZGVidWdfbW9kZSkgeworICAgICAgICAgICAgICAgIHNwcmludGYoZGJnYnVm LCAiPj4+U3RhcnQgdG8gZGVjcnlwdCBpbnB1dCB3aXRoIHR5cGUgJXMiLAorICAgICAgICAgICAg ICAgICAgICAgICAgIEVOQ1RZUEVfTkFNRShkZWNyeXB0X21vZGUpKTsgICAgICAgICAgIC8qIHNh ZmUgKi8KKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJja19jcnAiLGRiZ2J1ZiwwKTsKKyAg ICAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgY2hh ciBidWZbMTAyNF07CisgICAgICAgIHNwcmludGYoYnVmLCAiV2FybmluZywgQ2Fubm90IGRlY3J5 cHQgdHlwZSAlcyAoJWQpISEhIiwKKyAgICAgICAgICAgICAgICAgIEVOQ1RZUEVfTkFNRV9PSyhk ZWNyeXB0X21vZGUpCisgICAgICAgICAgICAgICAgICA/IEVOQ1RZUEVfTkFNRShkZWNyeXB0X21v ZGUpIDogIih1bmtub3duKSIsCisgICAgICAgICAgICAgICAgICBkZWNyeXB0X21vZGUpOyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2FmZSAqLworICAgICAgICBwcmludGYoIkF1 dGhlbnRpY2F0aW9uIGVycm9yIVxuJXNcbiIsYnVmKTsKKyAgICAgICAgZW5jcnlwdF9zZW5kX3Jl cXVlc3RfZW5kKCk7CisgICAgICAgIHJldHVybigtMSk7CisgICAgfQorICAgIHJldHVybigwKTsK K30KKworaW50CisjaWZkZWYgQ0tfQU5TSUMKK2VuY3J5cHRfZG9udF9zdXBwb3J0KGludCB0eXBl KQorI2Vsc2UKK2VuY3J5cHRfZG9udF9zdXBwb3J0KHR5cGUpIGludCB0eXBlOworI2VuZGlmCit7 CisgICAgaV93b250X3N1cHBvcnRfZW5jcnlwdCB8PSB0eXBlbWFzayh0eXBlKTsKKyAgICBpX3dv bnRfc3VwcG9ydF9kZWNyeXB0IHw9IHR5cGVtYXNrKHR5cGUpOworICAgIHJldHVybigwKTsKK30K KworaW50CisjaWZkZWYgQ0tfQU5TSUMKK2VuY3J5cHRfc2Vzc2lvbl9rZXkoU2Vzc2lvbl9LZXkg KmtleSwgaW50IHNlcnZlcikKKyNlbHNlCitlbmNyeXB0X3Nlc3Npb25fa2V5KGtleSwgc2VydmVy KSBTZXNzaW9uX0tleSAqa2V5OyBpbnQgc2VydmVyOworI2VuZGlmCit7CisgICAgRW5jcnlwdGlv bnMgKmVwID0gZW5jcnlwdGlvbnM7CisKKyAgICBpZiAoaGF2ZXNlc3Npb25rZXkpCisgICAgICAg IHJldHVybigwKTsKKworICAgIGhhdmVzZXNzaW9ua2V5ID0gMTsKKworICAgIHdoaWxlIChlcC0+ dHlwZSkgeworICAgICAgICBkZWJ1ZyhGMTExLCJlbmNyeXB0X3Nlc3Npb25fa2V5IixlcC0+bmFt ZSxlcC0+dHlwZSk7CisgICAgICAgIGlmIChlcC0+c2Vzc2lvbikgeworICAgICAgICAgICAgaWYg KCgqZXAtPnNlc3Npb24pKGtleSwgc2VydmVyKSA8IDApIHsKKyAgICAgICAgICAgICAgICBpX3dv bnRfc3VwcG9ydF9lbmNyeXB0IHw9IHR5cGVtYXNrKGVwLT50eXBlKTsKKyAgICAgICAgICAgICAg ICBpX3dvbnRfc3VwcG9ydF9kZWNyeXB0IHw9IHR5cGVtYXNrKGVwLT50eXBlKTsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgfQorICAgICAgICArK2VwOworICAgIH0KKyAgICBkZWJ1ZyhGMTExLCJl bmNyeXB0X3Nlc3Npb25fa2V5IChkb25lKSIsZXAtPm5hbWUsZXAtPnR5cGUpOworICAgIHJldHVy bigwKTsKK30KKworLyoKKyAqIENhbGxlZCB3aGVuIEVOQ1JZUFQgRU5EIGlzIHJlY2VpdmVkLgor ICovCitpbnQKKyNpZmRlZiBDS19BTlNJQworZW5jcnlwdF9lbmQoVk9JRCkKKyNlbHNlCitlbmNy eXB0X2VuZCgpCisjZW5kaWYKK3sKKyAgICBkZWNyeXB0X2lucHV0ID0gTlVMTDsKKyAgICBFbmNy eXB0S1NHbG9iYWxIYWNrLT5kZWNyeXB0ID0gTlVMTDsKKyAgICBFbmNyeXB0S1NHbG9iYWxIYWNr LT5kZWNyeXB0X3R5cGUgPSBFTkNUWVBFX0FOWTsKKyNpZmRlZiBERUJVRworICAgIGlmIChlbmNy eXB0X2RlYnVnX21vZGUpIHsKKyAgICAgICAgc3ByaW50ZihkYmdidWYsICI+Pj5JbnB1dCBpcyBi YWNrIHRvIGNsZWFyIHRleHQiKTsgICAgICAvKiBzYWZlICovCisgICAgICAgIGRlYnVnKEYxMTAs ImVuY3J5cHRfZW5kIixkYmdidWYsMCk7CisgICAgfQorI2VuZGlmCisgICAgaWYgKGVuY3J5cHRf dmVyYm9zZSkgeworICAgICAgICBzcHJpbnRmKGRiZ2J1ZiwgIklucHV0IGlzIG5vdyBjbGVhciB0 ZXh0Iik7ICAgICAgICAgICAgIC8qIHNhZmUgKi8KKyAgICAgICAgZGVidWcoRjExMCwiZW5jcnlw dF9lbmQiLGRiZ2J1ZiwwKTsKKyAgICAgICAgcHJpbnRmKCIlc1xuIixkYmdidWYpOworICAgIH0K KyAgICByZXR1cm4oMCk7Cit9CisKKy8qCisgKiBDYWxsZWQgd2hlbiBFTkNSWVBUIFJFUVVFU1Qt RU5EIGlzIHJlY2VpdmVkLgorICovCitpbnQKKyNpZmRlZiBDS19BTlNJQworZW5jcnlwdF9yZXF1 ZXN0X2VuZChWT0lEKQorI2Vsc2UKK2VuY3J5cHRfcmVxdWVzdF9lbmQoKQorI2VuZGlmCit7Cisg ICAgZW5jcnlwdF9zZW5kX2VuZCgpOworICAgIHJldHVybigwKTsKK30KKworLyoKKyAqIENhbGxl ZCB3aGVuIEVOQ1JZUFQgUkVRVUVTVC1TVEFSVCBpcyByZWNlaXZlZC4gIElmIHdlIHJlY2VpdmUK KyAqIHRoaXMgYmVmb3JlIGEgdHlwZSBpcyBwaWNrZWQsIHRoZW4gdGhhdCBpbmRpY2F0ZXMgdGhh dCB0aGUKKyAqIG90aGVyIHNpZGUgd2FudHMgdXMgdG8gc3RhcnQgZW5jcnlwdGluZyBkYXRhIGFz IHNvb24gYXMgd2UKKyAqIGNhbi4KKyAqLworaW50CisjaWZkZWYgQ0tfQU5TSUMKK2VuY3J5cHRf cmVxdWVzdF9zdGFydChWT0lEKQorI2Vsc2UKK2VuY3J5cHRfcmVxdWVzdF9zdGFydCgpCisjZW5k aWYKK3sKKyAgICBpZiAoZW5jcnlwdF9tb2RlICE9IDApCisgICAgICAgIGVuY3J5cHRfc3RhcnRf b3V0cHV0KGVuY3J5cHRfbW9kZSk7CisgICAgcmV0dXJuKDApOworfQorCitzdGF0aWMgdW5zaWdu ZWQgY2hhciBzdHJfa2V5aWRbKE1BWEtFWUxFTioyKSs1XSA9IHsKKyAgICBJQUMsIFNCLCBURUxP UFRfRU5DUllQVElPTgorfTsKK19QUk9UT1RZUChpbnQgZW5jcnlwdF9rZXlpZCwoc3RydWN0IGtl eV9pbmZvICosdW5zaWduZWQgY2hhciAqLGludCkpOworCitpbnQKKyNpZmRlZiBDS19BTlNJQwor ZW5jcnlwdF9lbmNfa2V5aWQodW5zaWduZWQgY2hhciAqa2V5aWQsIGludCBsZW4pCisjZWxzZQor ZW5jcnlwdF9lbmNfa2V5aWQoa2V5aWQsIGxlbikgdW5zaWduZWQgY2hhciAqa2V5aWQ7IGludCBs ZW47CisjZW5kaWYKK3sKKyAgICByZXR1cm4oZW5jcnlwdF9rZXlpZCgma2lbMV0sIGtleWlkLCBs ZW4pKTsKK30KKworaW50CisjaWZkZWYgQ0tfQU5TSUMKK2VuY3J5cHRfZGVjX2tleWlkKHVuc2ln bmVkIGNoYXIgKmtleWlkLCBpbnQgbGVuKQorI2Vsc2UKK2VuY3J5cHRfZGVjX2tleWlkKGtleWlk LCBsZW4pIHVuc2lnbmVkIGNoYXIgKmtleWlkOyBpbnQgbGVuOworI2VuZGlmIC8qIENLX0FOU0lD ICovCit7CisgICAgcmV0dXJuKGVuY3J5cHRfa2V5aWQoJmtpWzBdLCBrZXlpZCwgbGVuKSk7Cit9 CisKK2ludAorI2lmZGVmIENLX0FOU0lDCitlbmNyeXB0X2tleWlkKHN0cnVjdCBrZXlfaW5mbyAq a3AsIHVuc2lnbmVkIGNoYXIgKmtleWlkLCBpbnQgbGVuKQorI2Vsc2UKK2VuY3J5cHRfa2V5aWQo a3AsIGtleWlkLCBsZW4pCisgICAgc3RydWN0IGtleV9pbmZvICprcDsgdW5zaWduZWQgY2hhciAq a2V5aWQ7IGludCBsZW47CisjZW5kaWYKK3sKKyAgICBFbmNyeXB0aW9ucyAqZXA7CisgICAgaW50 IGRpciA9IGtwLT5kaXI7CisgICAgcmVnaXN0ZXIgaW50IHJldCA9IDA7CisKKyAgICBpZiAoIShl cCA9ICgqa3AtPmdldGNyeXB0KSgqa3AtPm1vZGVwKSkpIHsKKyAgICAgICAgaWYgKGxlbiA9PSAw KQorICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAga3AtPmtleWxlbiA9IDA7CisgICAg fSBlbHNlIGlmIChsZW4gPT0gMCB8fCBsZW4gPiBNQVhLRVlMRU4pIHsKKyAgICAgICAgLyoKKyAg ICAgICAgKiBFbXB0eSBvcHRpb24gb3IgS2V5IHRvbyBsb25nLCBpbmRpY2F0ZXMgYSBmYWlsdXJl LgorICAgICAgICAqLworICAgICAgICBpZiAoa3AtPmtleWxlbiA9PSAwKQorICAgICAgICAgICAg cmV0dXJuKC0xKTsKKyAgICAgICAga3AtPmtleWxlbiA9IDA7CisgICAgICAgIGlmIChlcC0+a2V5 aWQpCisgICAgICAgICAgICAodm9pZCkoKmVwLT5rZXlpZCkoZGlyLCBrcC0+a2V5aWQsICZrcC0+ a2V5bGVuKTsKKworICAgIH0gZWxzZSBpZiAoKGxlbiAhPSBrcC0+a2V5bGVuKSB8fCAobWVtY21w KGtleWlkLCBrcC0+a2V5aWQsIGxlbikgIT0gMCkpIHsKKyAgICAgICAgLyoKKyAgICAgICAgKiBM ZW5ndGggb3IgY29udGVudHMgYXJlIGRpZmZlcmVudAorICAgICAgICAqLworICAgICAgICBrcC0+ a2V5bGVuID0gbGVuOworICAgICAgICBtZW1jcHkoa3AtPmtleWlkLCBrZXlpZCwgbGVuKTsgICAg ICAgICAgLyogbGVuZ3RoIDwgTUFYS0VZTEVOICovCisgICAgICAgIGlmIChlcC0+a2V5aWQpCisg ICAgICAgICAgICAodm9pZCkoKmVwLT5rZXlpZCkoZGlyLCBrcC0+a2V5aWQsICZrcC0+a2V5bGVu KTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoZXAtPmtleWlkKQorICAgICAgICAgICAgcmV0 ID0gKCplcC0+a2V5aWQpKGRpciwga3AtPmtleWlkLCAma3AtPmtleWxlbik7CisgICAgICAgIGlm ICgocmV0ID09IDApICYmIChkaXIgPT0gRElSX0VOQ1JZUFQpICYmIGF1dG9lbmNyeXB0KQorICAg ICAgICAgICAgZW5jcnlwdF9zdGFydF9vdXRwdXQoKmtwLT5tb2RlcCk7CisgICAgICAgIHJldHVy bigwKTsKKyAgICB9CisKKyAgICBlbmNyeXB0X3NlbmRfa2V5aWQoZGlyLCBrcC0+a2V5aWQsIGtw LT5rZXlsZW4sIDApOworICAgIHJldHVybigwKTsKK30KKworaW50CisjaWZkZWYgQ0tfQU5TSUMK K2VuY3J5cHRfc2VuZF9rZXlpZChpbnQgZGlyLCB1bnNpZ25lZCBjaGFyICprZXlpZCwgaW50IGtl eWxlbiwgaW50IHNhdmVpdCkKKyNlbHNlCitlbmNyeXB0X3NlbmRfa2V5aWQoZGlyLCBrZXlpZCwg a2V5bGVuLCBzYXZlaXQpCisgICAgIGludCBkaXI7IHVuc2lnbmVkIGNoYXIgKmtleWlkOyBpbnQg a2V5bGVuOyBpbnQgc2F2ZWl0OworI2VuZGlmCit7CisgICAgdW5zaWduZWQgY2hhciAqc3RycDsK KworI2lmZGVmIENLX1NTTAorICAgIGlmIChURUxPUFRfU0IoVEVMT1BUX1NUQVJUX1RMUykuc3Rh cnRfdGxzLm1lX2ZvbGxvd3MpCisgICAgICAgIHJldHVybigwKTsKKyNlbmRpZiAvKiBDS19TU0wg Ki8KKworICAgIHN0cl9rZXlpZFszXSA9IChkaXIgPT0gRElSX0VOQ1JZUFQpCisgICAgICAgID8g RU5DUllQVF9FTkNfS0VZSUQgOiBFTkNSWVBUX0RFQ19LRVlJRDsKKyAgICBpZiAoc2F2ZWl0ICYm IGtleWxlbiA8PSBNQVhLRVlMRU4pIHsKKyAgICAgICAgc3RydWN0IGtleV9pbmZvICprcCA9ICZr aVsoZGlyID09IERJUl9FTkNSWVBUKSA/IDAgOiAxXTsKKyAgICAgICAgbWVtY3B5KGtwLT5rZXlp ZCwga2V5aWQsIGtleWxlbik7CisgICAgICAgIGtwLT5rZXlsZW4gPSBrZXlsZW47CisgICAgfQor CisgICAgZm9yIChzdHJwID0gJnN0cl9rZXlpZFs0XTsga2V5bGVuID4gMDsgLS1rZXlsZW4pIHsK KyAgICAgICAgaWYgKCgqc3RycCsrID0gKmtleWlkKyspID09IElBQykKKyAgICAgICAgICAgICpz dHJwKysgPSBJQUM7CisgICAgfQorICAgICpzdHJwKysgPSBJQUM7CisgICAgKnN0cnArKyA9IFNF OworCisgICAgaWYgKGRlYmxvZyB8fCB0bl9kZWIgfHwgZGVic2VzKSB7CisgICAgICAgIGludCBp OworICAgICAgICBzcHJpbnRmKHRuX21zZywiVEVMTkVUIFNFTlQgU0IgJXMgJXMgIiwKKyAgICAg ICAgICAgICAgICAgVEVMT1BUKFRFTE9QVF9FTkNSWVBUSU9OKSwKKyAgICAgICAgICAgICAgICAg KGRpciA9PSBESVJfRU5DUllQVCkgPyAiRU5DLUtFWUlEIiA6ICJERUMtS0VZSUQiKTsgLyogc2Fm ZSAqLworICAgICAgICB0bl9oZXgoKENIQVIgKil0bl9tc2csVE5fTVNHX0xFTiwmc3RyX2tleWlk WzRdLHN0cnAtc3RyX2tleWlkLTItNCk7CisgICAgICAgIGNrc3RybmNhdCh0bl9tc2csIklBQyBT RSIsVE5fTVNHX0xFTik7CisgICAgICAgIGRlYnVnKEYxMDAsdG5fbXNnLCIiLDApOworICAgICAg ICBpZiAodG5fZGViIHx8IGRlYnNlcykgdG5fZGVidWcodG5fbXNnKTsKKyAgICB9CisjaWZkZWYg T1MyCisgICAgUmVxdWVzdFRlbG5ldE11dGV4KCBTRU1fSU5ERUZJTklURV9XQUlUICk7CisjZW5k aWYKKyAgICB0dG9sKHN0cl9rZXlpZCwgc3RycCAtIHN0cl9rZXlpZCk7CisjaWZkZWYgT1MyCisg ICAgUmVsZWFzZVRlbG5ldE11dGV4KCk7CisjZW5kaWYKKyAgICByZXR1cm4oMCk7Cit9CisKK1ZP SUQKKyNpZmRlZiBDS19BTlNJQworZW5jcnlwdF9hdXRvKGludCBvbikKKyNlbHNlCitlbmNyeXB0 X2F1dG8ob24pIGludCBvbjsKKyNlbmRpZgoreworICAgIGlmIChvbiA8IDApCisgICAgICAgIGF1 dG9lbmNyeXB0IF49IDE7CisgICAgZWxzZQorICAgICAgICBhdXRvZW5jcnlwdCA9IG9uID8gMSA6 IDA7Cit9CisKK1ZPSUQKKyNpZmRlZiBDS19BTlNJQworZGVjcnlwdF9hdXRvKGludCBvbikKKyNl bHNlCitkZWNyeXB0X2F1dG8ob24pIGludCBvbjsKKyNlbmRpZgoreworICAgIGlmIChvbiA8IDAp CisgICAgICAgIGF1dG9kZWNyeXB0IF49IDE7CisgICAgZWxzZQorICAgICAgICBhdXRvZGVjcnlw dCA9IG9uID8gMSA6IDA7Cit9CisKK1ZPSUQKKyNpZmRlZiBDS19BTlNJQworZW5jcnlwdF9zdGFy dF9vdXRwdXQoaW50IHR5cGUpCisjZWxzZQorZW5jcnlwdF9zdGFydF9vdXRwdXQodHlwZSkgaW50 IHR5cGU7CisjZW5kaWYKK3sKKyAgICBFbmNyeXB0aW9ucyAqZXA7CisgICAgcmVnaXN0ZXIgdW5z aWduZWQgY2hhciAqcDsKKyAgICByZWdpc3RlciBpbnQgaTsKKworI2lmZGVmIENLX1NTTAorICAg IGlmIChURUxPUFRfU0IoVEVMT1BUX1NUQVJUX1RMUykuc3RhcnRfdGxzLm1lX2ZvbGxvd3MpCisg ICAgICAgIHJldHVybjsKKyNlbmRpZiAvKiBDS19TU0wgKi8KKworICAgIGlmICghKGVwID0gZmlu ZGVuY3J5cHRpb24odHlwZSkpKSB7CisjaWZkZWYgREVCVUcKKyAgICAgICAgaWYgKGVuY3J5cHRf ZGVidWdfbW9kZSkgeworICAgICAgICAgICAgc3ByaW50ZihkYmdidWYsICI+Pj5DYW4ndCBlbmNy eXB0IHdpdGggdHlwZSAlcyAoJWQpXG4iLAorICAgICAgICAgICAgICAgICAgICAgRU5DVFlQRV9O QU1FX09LKHR5cGUpCisgICAgICAgICAgICAgICAgICAgICA/IEVOQ1RZUEVfTkFNRSh0eXBlKSA6 ICIodW5rbm93bikiLAorICAgICAgICAgICAgICAgICAgICAgdHlwZSk7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIHNhZmUgKi8KKyAgICAgICAgICAgIGRlYnVnKEYxMTAs ImVuY3J5cHRfc3RhcnRfb3V0cHV0IixkYmdidWYsMCk7CisgICAgICAgIH0KKyNlbmRpZgorICAg ICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChlcC0+c3RhcnQpIHsKKyAgICAgICAgaSA9ICgq ZXAtPnN0YXJ0KShESVJfRU5DUllQVCwgMCk7CisjaWZkZWYgREVCVUcKKyAgICAgICAgaWYgKGVu Y3J5cHRfZGVidWdfbW9kZSkgeworICAgICAgICAgICAgc3ByaW50ZihkYmdidWYsICI+Pj5FbmNy eXB0IHN0YXJ0OiAlcyAoJWQpICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgKGkgPCAwKSA/ ICJmYWlsZWQiIDoKKyAgICAgICAgICAgICAgICAgICAgICJpbml0aWFsIG5lZ290aWF0aW9uIGlu IHByb2dyZXNzIiwKKyAgICAgICAgICAgICAgICAgICAgIGksIEVOQ1RZUEVfTkFNRSh0eXBlKSk7 ICAgICAgICAgICAgICAgICAgICAvKiBzYWZlICovCisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJl bmNyeXB0X3N0YXJ0X291dHB1dCIsZGJnYnVmLDApOworICAgICAgICB9CisjZW5kaWYKKyAgICAg ICAgaWYgKGkpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCBlbmNyeXB0 X291dHB1dCAhPSBlcC0+b3V0cHV0ICkgeworICAgICAgICBwID0gc3RyX3N0YXJ0OworICAgICAg ICAqcCsrID0gSUFDOworICAgICAgICAqcCsrID0gU0I7CisgICAgICAgICpwKysgPSBURUxPUFRf RU5DUllQVElPTjsKKyAgICAgICAgKnArKyA9IEVOQ1JZUFRfU1RBUlQ7CisgICAgICAgIGZvciAo aSA9IDA7IGkgPCBraVswXS5rZXlsZW47ICsraSkgeworICAgICAgICAgICAgaWYgKCggKnArKyA9 IGtpWzBdLmtleWlkW2ldKSA9PSBJQUMpCisgICAgICAgICAgICAgICAgKnArKyA9IElBQzsKKyAg ICAgICAgfQorICAgICAgICAqcCsrID0gSUFDOworICAgICAgICAqcCsrID0gU0U7CisKKyAgICAg ICAgaWYgKGRlYmxvZyB8fCB0bl9kZWIgfHwgZGVic2VzKSB7CisgICAgICAgICAgICBpbnQgaTsK KyAgICAgICAgICAgIHNwcmludGYodG5fbXNnLCJURUxORVQgU0VOVCBTQiAlcyBTVEFSVCAiLAor ICAgICAgICAgICAgICAgICAgICAgVEVMT1BUKFRFTE9QVF9FTkNSWVBUSU9OKSk7ICAgICAgICAg ICAgICAgIC8qIHNhZmUgKi8KKyAgICAgICAgICAgIHRuX2hleCgoQ0hBUiAqKXRuX21zZyxUTl9N U0dfTEVOLCZzdHJfc3RhcnRbNF0scC1zdHJfc3RhcnQtMi00KTsKKyAgICAgICAgICAgIGNrc3Ry bmNhdCh0bl9tc2csIklBQyBTRSIsVE5fTVNHX0xFTik7CisgICAgICAgICAgICBkZWJ1ZyhGMTAw LHRuX21zZywiIiwwKTsKKyAgICAgICAgICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKSB0bl9kZWJ1 Zyh0bl9tc2cpOworICAgICAgICB9CisjaWZkZWYgT1MyCisgICAgICAgIFJlcXVlc3RUZWxuZXRN dXRleCggU0VNX0lOREVGSU5JVEVfV0FJVCApOworI2VuZGlmCisgICAgICAgIHR0b2woc3RyX3N0 YXJ0LCBwIC0gc3RyX3N0YXJ0KTsKKyNpZmRlZiBPUzIKKyAgICAgICAgUmVsZWFzZVRlbG5ldE11 dGV4KCk7CisjZW5kaWYKKworICAvKgorICAgKiBJZiB3ZSBhcmUgYWxyZWFkeSBlbmNyeXB0aW5n IGluIHNvbWUgbW9kZSwgdGhlbgorICAgKiBlbmNyeXB0IHRoZSByaW5nICh3aGljaCBpbmNsdWRl cyBvdXIgcmVxdWVzdCkgaW4KKyAgICogdGhlIG9sZCBtb2RlLCBtYXJrIGl0IGFsbCBhcyAiY2xl YXIgdGV4dCIgYW5kIHRoZW4KKyAgICogc3dpdGNoIHRvIHRoZSBuZXcgbW9kZS4KKyAgICovCisg ICAgICAgIGVuY3J5cHRfb3V0cHV0ID0gZXAtPm91dHB1dDsKKyAgICAgICAgRW5jcnlwdEtTR2xv YmFsSGFjay0+ZW5jcnlwdCA9IGVuY3J5cHRfa3Nfc3RyZWFtOworICAgICAgICBFbmNyeXB0S1NH bG9iYWxIYWNrLT5lbmNyeXB0X3R5cGUgPSB0eXBlOworICAgICAgICBlbmNyeXB0X21vZGUgPSB0 eXBlOworI2lmZGVmIERFQlVHCisgICAgICAgIGlmIChlbmNyeXB0X2RlYnVnX21vZGUpIHsKKyAg ICAgICAgICAgIHNwcmludGYoZGJnYnVmLCAiPj4+U3RhcnRlZCB0byBlbmNyeXB0IG91dHB1dCB3 aXRoIHR5cGUgJXMiLAorICAgICAgICAgICAgICAgICAgICAgRU5DVFlQRV9OQU1FKHR5cGUpKTsg ICAgICAgICAgICAgICAgICAgICAgIC8qIHNhZmUgKi8KKyAgICAgICAgICAgIGRlYnVnKEYxMTAs ImVuY3J5cHRfc3RhcnRfb3V0cHV0IixkYmdidWYsMCk7CisgICAgICAgIH0KKyNlbmRpZgorICAg ICAgICBpZiAoZW5jcnlwdF92ZXJib3NlKSB7CisgICAgICAgICAgICBzcHJpbnRmKGRiZ2J1Ziwg Ik91dHB1dCBpcyBub3cgZW5jcnlwdGVkIHdpdGggdHlwZSAlcyIsCisgICAgICAgICAgICAgICAg ICAgICBFTkNUWVBFX05BTUUodHlwZSkpOyAgICAgICAgICAgICAgICAgICAgICAgLyogc2FmZSAq LworICAgICAgICAgICAgZGVidWcoRjExMCwiZW5jcnlwdF9zdGFydF9vdXRwdXQiLGRiZ2J1Ziww KTsKKyAgICAgICAgICAgIHByaW50ZigiJXNcbiIsZGJnYnVmKTsKKyAgICAgICAgfQorICAgIH0K K30KKworVk9JRAorI2lmZGVmIENLX0FOU0lDCitlbmNyeXB0X3NlbmRfZW5kKFZPSUQpCisjZWxz ZQorZW5jcnlwdF9zZW5kX2VuZCgpCisjZW5kaWYKK3sKKyNpZmRlZiBDS19TU0wKKyAgICBpZiAo VEVMT1BUX1NCKFRFTE9QVF9TVEFSVF9UTFMpLnN0YXJ0X3Rscy5tZV9mb2xsb3dzKQorICAgICAg ICByZXR1cm47CisjZW5kaWYgLyogQ0tfU1NMICovCisKKyAgICBpZiAoIWVuY3J5cHRfb3V0cHV0 KQorICAgICAgICByZXR1cm47CisKKyAgICBzdHJfZW5kWzBdID0gSUFDOworICAgIHN0cl9lbmRb MV0gPSBTQjsKKyAgICBzdHJfZW5kWzJdID0gVEVMT1BUX0VOQ1JZUFRJT047CisgICAgc3RyX2Vu ZFszXSA9IEVOQ1JZUFRfRU5EOworICAgIHN0cl9lbmRbNF0gPSBJQUM7CisgICAgc3RyX2VuZFs1 XSA9IFNFOworCisgICAgaWYgKGRlYmxvZyB8fCB0bl9kZWIgfHwgZGVic2VzKSB7CisgICAgICAg IGludCBpOworICAgICAgICBzcHJpbnRmKHRuX21zZywiVEVMTkVUIFNFTlQgU0IgJXMgRU5EIElB QyBTRSIsCisgICAgICAgICAgICAgICAgIFRFTE9QVChURUxPUFRfRU5DUllQVElPTikpOyAgICAg ICAgICAgICAgICAgICAgLyogc2FmZSAqLworICAgICAgICBkZWJ1ZyhGMTAwLHRuX21zZywiIiww KTsKKyAgICAgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpIHRuX2RlYnVnKHRuX21zZyk7CisgICAg fQorI2lmZGVmIE9TMgorICAgIFJlcXVlc3RUZWxuZXRNdXRleCggU0VNX0lOREVGSU5JVEVfV0FJ VCApOworI2VuZGlmCisgICAgdHRvbChzdHJfZW5kLCBzaXplb2Yoc3RyX2VuZCkpOworI2lmZGVm IE9TMgorICAgIFJlbGVhc2VUZWxuZXRNdXRleCgpOworI2VuZGlmCisKKyAgICBlbmNyeXB0X291 dHB1dCA9IDA7CisgICAgRW5jcnlwdEtTR2xvYmFsSGFjay0+ZW5jcnlwdCA9IE5VTEw7CisgICAg RW5jcnlwdEtTR2xvYmFsSGFjay0+ZW5jcnlwdF90eXBlID0gRU5DVFlQRV9BTlk7CisjaWZkZWYg REVCVUcKKyAgICBpZiAoZW5jcnlwdF9kZWJ1Z19tb2RlKSB7CisgICAgICAgIHNwcmludGYoZGJn YnVmLCAiPj4+T3V0cHV0IGlzIGJhY2sgdG8gY2xlYXIgdGV4dCIpOyAgICAgLyogc2FmZSAqLwor ICAgICAgICBkZWJ1ZyhGMTEwLCJlbmNyeXB0X3NlbmRfZW5kIixkYmdidWYsMCk7CisgICAgfQor I2VuZGlmCisgICAgaWYgKGVuY3J5cHRfdmVyYm9zZSkgeworICAgICAgICBzcHJpbnRmKGRiZ2J1 ZiwgIk91dHB1dCBpcyBub3cgY2xlYXIgdGV4dCIpOyAgICAgICAgICAgIC8qIHNhZmUgKi8KKyAg ICAgICAgZGVidWcoRjExMCwiZW5jcnlwdF9zZW5kX2VuZCIsZGJnYnVmLDApOworICAgICAgICBw cmludGYoIiVzXG4iLGRiZ2J1Zik7CisgICAgfQorfQorCitWT0lECisjaWZkZWYgQ0tfQU5TSUMK K2VuY3J5cHRfc2VuZF9yZXF1ZXN0X3N0YXJ0KFZPSUQpCisjZWxzZQorZW5jcnlwdF9zZW5kX3Jl cXVlc3Rfc3RhcnQoKQorI2VuZGlmCit7CisgICAgcmVnaXN0ZXIgdW5zaWduZWQgY2hhciAqcDsK KyAgICByZWdpc3RlciBpbnQgaTsKKworI2lmZGVmIENLX1NTTAorICAgIGlmIChURUxPUFRfU0Io VEVMT1BUX1NUQVJUX1RMUykuc3RhcnRfdGxzLm1lX2ZvbGxvd3MpCisgICAgICAgIHJldHVybjsK KyNlbmRpZiAvKiBDS19TU0wgKi8KKworICAgIHAgPSBzdHJfc3RhcnQ7CisgICAgKnArKyA9IElB QzsKKyAgICAqcCsrID0gU0I7CisgICAgKnArKyA9IFRFTE9QVF9FTkNSWVBUSU9OOworICAgICpw KysgPSBFTkNSWVBUX1JFUVNUQVJUOworICAgIGZvciAoaSA9IDA7IGkgPCBraVsxXS5rZXlsZW47 ICsraSkgeworICAgICAgICBpZiAoKCAqcCsrID0ga2lbMV0ua2V5aWRbaV0pID09IElBQykKKyAg ICAgICAgICAgICpwKysgPSBJQUM7CisgICAgfQorICAgICpwKysgPSBJQUM7CisgICAgKnArKyA9 IFNFOworCisgICAgaWYgKGRlYmxvZyB8fCB0bl9kZWIgfHwgZGVic2VzKSB7CisgICAgICAgIGlu dCBpOworICAgICAgICBzcHJpbnRmKHRuX21zZywiVEVMTkVUIFNFTlQgU0IgJXMgUkVRVUVTVC1T VEFSVCAiLAorICAgICAgICAgICAgICAgICBURUxPUFQoVEVMT1BUX0VOQ1JZUFRJT04pKTsgICAg ICAgICAgICAgICAgICAgIC8qIHNhZmUgKi8KKyAgICAgICAgdG5faGV4KChDSEFSICopdG5fbXNn LFROX01TR19MRU4sJnN0cl9zdGFydFs0XSxwLXN0cl9zdGFydC0yLTQpOworICAgICAgICBja3N0 cm5jYXQodG5fbXNnLCJJQUMgU0UiLFROX01TR19MRU4pOworICAgICAgICBkZWJ1ZyhGMTAwLHRu X21zZywiIiwwKTsKKyAgICAgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpIHRuX2RlYnVnKHRuX21z Zyk7CisgICAgfQorI2lmZGVmIE9TMgorICAgIFJlcXVlc3RUZWxuZXRNdXRleCggU0VNX0lOREVG SU5JVEVfV0FJVCApOworI2VuZGlmCisgICAgdHRvbChzdHJfc3RhcnQsIHAgLSBzdHJfc3RhcnQp OworI2lmZGVmIE9TMgorICAgIFJlbGVhc2VUZWxuZXRNdXRleCgpOworI2VuZGlmCisKKyAgICBp ZiAoZW5jcnlwdF9kZWJ1Z19tb2RlKSB7CisgICAgICAgIHNwcmludGYoZGJnYnVmLCAiPj4+UmVx dWVzdCBpbnB1dCB0byBiZSBlbmNyeXB0ZWRcbiIpOyAgLyogc2FmZSAqLworICAgICAgICBkZWJ1 ZyhGMTEwLCJlbmNyeXB0X3NlbmRfcmVxdWVzdF9zdGFydCIsZGJnYnVmLDApOworICAgIH0KK30K KworVk9JRAorI2lmZGVmIENLX0FOU0lDCitlbmNyeXB0X3NlbmRfcmVxdWVzdF9lbmQoVk9JRCkK KyNlbHNlCitlbmNyeXB0X3NlbmRfcmVxdWVzdF9lbmQoKQorI2VuZGlmCit7CisjaWZkZWYgQ0tf U1NMCisgICAgaWYgKFRFTE9QVF9TQihURUxPUFRfU1RBUlRfVExTKS5zdGFydF90bHMubWVfZm9s bG93cykKKyAgICAgICAgcmV0dXJuOworI2VuZGlmIC8qIENLX1NTTCAqLworCisgICAgc3RyX2Vu ZFswXSA9IElBQzsKKyAgICBzdHJfZW5kWzFdID0gU0I7CisgICAgc3RyX2VuZFsyXSA9IFRFTE9Q VF9FTkNSWVBUSU9OOworICAgIHN0cl9lbmRbM10gPSBFTkNSWVBUX1JFUUVORDsKKyAgICBzdHJf ZW5kWzRdID0gSUFDOworICAgIHN0cl9lbmRbNV0gPSBTRTsKKworICAgIGlmIChkZWJsb2cgfHwg dG5fZGViIHx8IGRlYnNlcykgeworICAgICAgICBpbnQgaTsKKyAgICAgICAgc3ByaW50Zih0bl9t c2csIlRFTE5FVCBTRU5UIFNCICVzIFJFUUVORCBJQUMgU0UiLAorICAgICAgICAgICAgICAgICBU RUxPUFQoVEVMT1BUX0VOQ1JZUFRJT04pKTsgICAgICAgICAgICAgICAgICAgIC8qIHNhZmUgKi8K KyAgICAgICAgZGVidWcoRjEwMCx0bl9tc2csIiIsMCk7CisgICAgICAgIGlmICh0bl9kZWIgfHwg ZGVic2VzKSB0bl9kZWJ1Zyh0bl9tc2cpOworICAgIH0KKyNpZmRlZiBPUzIKKyAgICBSZXF1ZXN0 VGVsbmV0TXV0ZXgoIFNFTV9JTkRFRklOSVRFX1dBSVQgKTsKKyNlbmRpZgorICAgIHR0b2woc3Ry X2VuZCwgc2l6ZW9mKHN0cl9lbmQpKTsKKyNpZmRlZiBPUzIKKyAgICBSZWxlYXNlVGVsbmV0TXV0 ZXgoKTsKKyNlbmRpZgorCisgICAgaWYgKGVuY3J5cHRfZGVidWdfbW9kZSkgeworICAgICAgICBz cHJpbnRmKGRiZ2J1ZiwgIj4+PlJlcXVlc3QgaW5wdXQgdG8gYmUgY2xlYXIgdGV4dFxuIik7IC8q IHNhZmUgKi8KKyAgICAgICAgZGVidWcoRjExMCwiZW5jcnlwdF9zZW5kX3JlcXVlc3RfZW5kIixk YmdidWYsMCk7CisgICAgfQorfQorCitpbnQKKyNpZmRlZiBDS19BTlNJQworZW5jcnlwdF9pc19l bmNyeXB0aW5nKFZPSUQpCisjZWxzZQorZW5jcnlwdF9pc19lbmNyeXB0aW5nKCkKKyNlbmRpZgor eworICAgIGlmIChlbmNyeXB0X291dHB1dCkKKyAgICAgICAgcmV0dXJuIDE7CisgICAgcmV0dXJu IDA7Cit9CisKK2ludAorI2lmZGVmIENLX0FOU0lDCitlbmNyeXB0X2lzX2RlY3J5cHRpbmcoVk9J RCkKKyNlbHNlCitlbmNyeXB0X2lzX2RlY3J5cHRpbmcoKQorI2VuZGlmCit7CisgICAgaWYgKGRl Y3J5cHRfaW5wdXQpCisgICAgICAgIHJldHVybiAxOworICAgIHJldHVybiAwOworfQorCisjaWZk ZWYgREVCVUcKK3ZvaWQKK2VuY3J5cHRfZGVidWcobW9kZSkKKyAgICAgaW50IG1vZGU7Cit7Cisg ICAgZW5jcnlwdF9kZWJ1Z19tb2RlID0gbW9kZTsKK30KKyNlbmRpZgorCisjaWZkZWYgQ0tfREVT CisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MSwgMTk5MworICogICAgICBUaGUgUmVnZW50cyBv ZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3 aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0 aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1 dGlvbi4KKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJl cyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dp bmcgYWNrbm93bGVkZ2VtZW50OgorICogICAgICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdh cmUgZGV2ZWxvcGVkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mCisgKiAgICAgIENhbGlmb3JuaWEsIEJl cmtlbGV5IGFuZCBpdHMgY29udHJpYnV0b3JzLgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0 aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1h eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhp cyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQg Q09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VO VFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNU LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERB TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT VElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBM SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ U0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLwor CisvKiBiYXNlZCBvbiBAKCMpZW5jX2Rlcy5jICAgICAgIDguMSAoQmVya2VsZXkpIDYvNC85MyAq LworCisjZGVmaW5lIENGQiAgICAgMAorI2RlZmluZSBPRkIgICAgIDEKKworI2RlZmluZSBOT19T RU5EX0lWICAgICAgMQorI2RlZmluZSBOT19SRUNWX0lWICAgICAgMgorI2RlZmluZSBOT19LRVlJ RCAgICAgICAgNAorI2RlZmluZSBJTl9QUk9HUkVTUyAgICAgKE5PX1NFTkRfSVZ8Tk9fUkVDVl9J VnxOT19LRVlJRCkKKyNkZWZpbmUgU1VDQ0VTUyAgICAgICAgIDAKKyNkZWZpbmUgeEZBSUxFRCAg ICAgICAgIC0xCisKK1NjaGVkdWxlIHRlc3Rfc2NoZWQ7CisKK3N0cnVjdCBkZXNfc3RpbmZvIHsK KyAgICBCbG9jayAgICAgICAgICAgICAgIHN0cl9vdXRwdXQ7CisgICAgQmxvY2sgICAgICAgICAg ICAgICBzdHJfZmVlZDsKKyAgICBCbG9jayAgICAgICAgICAgICAgIHN0cl9pdjsKKyAgICBCbG9j ayAgICAgICAgICAgICAgIHN0cl9pa2V5OworI2lmZGVmIE1JVF9DVVJSRU5UCisgICAgdW5zaWdu ZWQgY2hhciAgICAgICBzdHJfa2V5Ynl0ZXNbOF07CisgICAga3JiNV9rZXlibG9jayAgICAgICBz dHJfa2V5OworI2Vsc2UgLyogTUlUX0NVUlJFTlQgKi8KKyAgICBTY2hlZHVsZSAgICAgICAgICAg IHN0cl9zY2hlZDsKKyAgICBpbnQgICAgICAgICAgICAgICAgIHN0cl9pbmRleDsKKyNlbmRpZiAv KiBNSVRfQ1VSUkVOVCAqLworICAgIGludCAgICAgICAgICAgICAgICAgc3RyX2ZsYWdzaGlmdDsK K307CisKK3N0cnVjdCBkZXNfZmIgeworI2lmbmRlZiBNSVRfQ1VSUkVOVAorICAgIEJsb2NrIGty YmRlc19rZXk7CisgICAgU2NoZWR1bGUga3JiZGVzX3NjaGVkOworI2VuZGlmIC8qIE1JVF9DVVJS RU5UICovCisgICAgQmxvY2sgdGVtcF9mZWVkOworICAgIHVuc2lnbmVkIGNoYXIgZmJfZmVlZFs2 NF07CisgICAgaW50IG5lZWRfc3RhcnQ7CisgICAgaW50IHN0YXRlWzJdOworICAgIGludCBrZXlp ZFsyXTsKKyAgICBpbnQgb25jZTsKKyNpZmRlZiBNSVRfQ1VSUkVOVAorICAgIGludCB2YWxpZGtl eTsKKyNlbmRpZiAvKiBNSVRfQ1VSUkVOVCAqLworICAgIHN0cnVjdCBkZXNfc3RpbmZvICBzdHJl YW1zWzJdOworfTsKK3N0YXRpYyBzdHJ1Y3QgZGVzX2ZiIGRlc19mYlsyXTsKKworc3RydWN0IGRl czNfc3RpbmZvIHsKKyAgICBCbG9jayAgICAgICAgICAgICAgIHN0cl9vdXRwdXQ7CisgICAgQmxv Y2sgICAgICAgICAgICAgICBzdHJfZmVlZDsKKyAgICBCbG9jayAgICAgICAgICAgICAgIHN0cl9p djsKKyAgICBCbG9jayAgICAgICAgICAgICAgIHN0cl9pa2V5WzNdOworICAgIFNjaGVkdWxlICAg ICAgICAgICAgc3RyX3NjaGVkWzNdOworICAgIGludCAgICAgICAgICAgICAgICAgc3RyX2luZGV4 OworICAgIGludCAgICAgICAgICAgICAgICAgc3RyX2ZsYWdzaGlmdDsKK307CisKK3N0cnVjdCBk ZXMzX2ZiIHsKKyNpZm5kZWYgTUlUX0NVUlJFTlQKKyAgICBCbG9jayBrcmJkZXNfa2V5WzNdOwor ICAgIFNjaGVkdWxlIGtyYmRlc19zY2hlZFszXTsKKyNlbmRpZiAvKiBNSVRfQ1VSUkVOVCAqLwor ICAgIEJsb2NrIHRlbXBfZmVlZDsKKyAgICB1bnNpZ25lZCBjaGFyIGZiX2ZlZWRbNjRdOworICAg IGludCBuZWVkX3N0YXJ0OworICAgIGludCBzdGF0ZVsyXTsKKyAgICBpbnQga2V5aWRbMl07Cisg ICAgaW50IG9uY2U7CisjaWZkZWYgTUlUX0NVUlJFTlQKKyAgICBpbnQgdmFsaWRrZXk7CisjZW5k aWYgLyogTUlUX0NVUlJFTlQgKi8KKyAgICBzdHJ1Y3QgZGVzM19zdGluZm8gc3RyZWFtc1syXTsK K307CitzdGF0aWMgc3RydWN0IGRlczNfZmIgZGVzM19mYlsyXTsKKworc3RydWN0IGtleWlkbGlz dCB7CisgICAgY2hhciAgICAgICAgKmtleWlkOworICAgIGludCBrZXlpZGxlbjsKKyAgICBjaGFy ICAgICAgICAqa2V5OworICAgIGludCBrZXlsZW47CisgICAgaW50IGZsYWdzOworfSBrZXlpZGxp c3QgW10gPSB7CisgICAgeyAiXDAiLCAxLCAwLCAwLCAwIH0sICAgICAgICAgICAgICAgLyogZGVm YXVsdCBrZXkgb2YgemVybyAqLworICAgIHsgMCwgMCwgMCwgMCwgMCB9Cit9OworCisjZGVmaW5l IEtFWUZMQUdfTUFTSyAgICAwMworCisjZGVmaW5lIEtFWUZMQUdfTk9JTklUICAwMAorI2RlZmlu ZSBLRVlGTEFHX0lOSVQgICAgMDEKKyNkZWZpbmUgS0VZRkxBR19PSyAgICAgIDAyCisjZGVmaW5l IEtFWUZMQUdfQkFEICAgICAwMworCisjZGVmaW5lIEtFWUZMQUdfU0hJRlQgICAyCisKKyNkZWZp bmUgU0hJRlRfVkFMKGEsYikgIChLRVlGTEFHX1NISUZUKigoYSkrKChiKSoyKSkpCisKKyNkZWZp bmUgRkI2NF9JViAgICAgICAgIDEKKyNkZWZpbmUgRkI2NF9JVl9PSyAgICAgIDIKKyNkZWZpbmUg RkI2NF9JVl9CQUQgICAgIDMKKyNkZWZpbmUgRkI2NF9DSEFMTEVOR0UgIDQKKyNkZWZpbmUgRkI2 NF9SRVNQT05TRSAgIDUKKwordm9pZCBmYjY0X3N0cmVhbV9pdiBQKChCbG9jaywgc3RydWN0IGRl c19zdGluZm8gKikpOwordm9pZCBmYjY0X2luaXQgUCgoc3RydWN0IGRlc19mYiAqKSk7CitzdGF0 aWMgaW50IGZiNjRfc3RhcnQgUCgoc3RydWN0IGRlc19mYiAqLCBpbnQsIGludCkpOworaW50IGZi NjRfaXMgUCgodW5zaWduZWQgY2hhciAqLCBpbnQsIHN0cnVjdCBkZXNfZmIgKikpOworaW50IGZi NjRfcmVwbHkgUCgodW5zaWduZWQgY2hhciAqLCBpbnQsIHN0cnVjdCBkZXNfZmIgKikpOworc3Rh dGljIGludCBmYjY0X3Nlc3Npb24gUCgoU2Vzc2lvbl9LZXkgKiwgaW50LCBzdHJ1Y3QgZGVzX2Zi ICopKTsKK3ZvaWQgZmI2NF9zdHJlYW1fa2V5IFAoKEJsb2NrLCBzdHJ1Y3QgZGVzX3N0aW5mbyAq KSk7CitpbnQgZmI2NF9rZXlpZCBQKChpbnQsIHVuc2lnbmVkIGNoYXIgKiwgaW50ICosIHN0cnVj dCBkZXNfZmIgKikpOworCisjaWZkZWYgTUlUX0NVUlJFTlQKK3N0YXRpYyB2b2lkCisjaWZkZWYg Q0tfQU5TSUMKK2VjYl9lbmNyeXB0KHN0cnVjdCBkZXNfc3RpbmZvICpzdHAsIEJsb2NrIGluLCBC bG9jayBvdXQpCisjZWxzZSAvKiBDS0FOU0lDICovCitlY2JfZW5jcnlwdChzdHAsIGluLCBvdXQp CisgICAgc3RydWN0IGRlc19zdGluZm8gKnN0cDsKKyAgICBCbG9jayBpbjsKKyAgICBCbG9jayBv dXQ7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAgICBrcmI1X2Vycm9yX2NvZGUgY29kZTsK KyAgICBrcmI1X2RhdGEgZGluOworICAgIGtyYjVfZW5jX2RhdGEgZG91dDsKKworICAgIGRpbi5s ZW5ndGggPSA4OworICAgIGRpbi5kYXRhID0gaW47CisKKyAgICBkb3V0LmNpcGhlcnRleHQubGVu Z3RoID0gODsKKyAgICBkb3V0LmNpcGhlcnRleHQuZGF0YSA9IG91dDsKKyAgICBkb3V0LmVuY3R5 cGUgPSBFTkNUWVBFX1VOS05PV047CisKKyNpZmRlZiBDUllQVF9ETEwKKyAgICBjb2RlID0ga3Ji NV9jX2VuY3J5cHQoKnBfazVfY29udGV4dCwgJnN0cC0+c3RyX2tleSwgMCwgMCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICZkaW4sICZkb3V0KTsKKyNlbHNlIC8qIENSWVBUX0RMTCAqLwor ICAgIGNvZGUgPSBrcmI1X2NfZW5jcnlwdChrNV9jb250ZXh0LCAmc3RwLT5zdHJfa2V5LCAwLCAw LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRpbiwgJmRvdXQpOworI2VuZGlmIC8qIENS WVBUX0RMTCAqLworICAgIC8qIFhYWCBJJ20gbm90IHN1cmUgd2hhdCB0byBkbyBpZiB0aGlzIGZh aWxzICovCisgICAgaWYgKGNvZGUpCisgICAgICAgIGNvbV9lcnIoImxpYnRlbG5ldCIsIGNvZGUs ICJlbmNyeXB0aW5nIHN0cmVhbSBkYXRhIik7Cit9CisjZW5kaWYgLyogTUlUX0NVUlJFTlQgKi8K Kwordm9pZAorY2ZiNjRfaW5pdChzZXJ2ZXIpCisgICAgaW50IHNlcnZlcjsKK3sKKyAgICBmYjY0 X2luaXQoJmRlc19mYltDRkJdKTsKKyAgICBkZXNfZmJbQ0ZCXS5mYl9mZWVkWzRdID0gRU5DVFlQ RV9ERVNfQ0ZCNjQ7CisgICAgZGVzX2ZiW0NGQl0uc3RyZWFtc1swXS5zdHJfZmxhZ3NoaWZ0ID0g U0hJRlRfVkFMKDAsIENGQik7CisgICAgZGVzX2ZiW0NGQl0uc3RyZWFtc1sxXS5zdHJfZmxhZ3No aWZ0ID0gU0hJRlRfVkFMKDEsIENGQik7Cit9CisKK3ZvaWQKK29mYjY0X2luaXQoc2VydmVyKQor ICAgIGludCBzZXJ2ZXI7Cit7CisgICAgZmI2NF9pbml0KCZkZXNfZmJbT0ZCXSk7CisgICAgZGVz X2ZiW09GQl0uZmJfZmVlZFs0XSA9IEVOQ1RZUEVfREVTX09GQjY0OworICAgIGRlc19mYltDRkJd LnN0cmVhbXNbMF0uc3RyX2ZsYWdzaGlmdCA9IFNISUZUX1ZBTCgwLCBPRkIpOworICAgIGRlc19m YltDRkJdLnN0cmVhbXNbMV0uc3RyX2ZsYWdzaGlmdCA9IFNISUZUX1ZBTCgxLCBPRkIpOworfQor Cit2b2lkCitmYjY0X2luaXQoZmJwKQorICAgIHJlZ2lzdGVyIHN0cnVjdCBkZXNfZmIgKmZicDsK K3sKKyAgICBtZW1zZXQoKHZvaWQgKilmYnAsIDAsIHNpemVvZigqZmJwKSk7CisgICAgZmJwLT5z dGF0ZVswXSA9IGZicC0+c3RhdGVbMV0gPSB4RkFJTEVEOworICAgIGZicC0+ZmJfZmVlZFswXSA9 IElBQzsKKyAgICBmYnAtPmZiX2ZlZWRbMV0gPSBTQjsKKyAgICBmYnAtPmZiX2ZlZWRbMl0gPSBU RUxPUFRfRU5DUllQVElPTjsKKyAgICBmYnAtPmZiX2ZlZWRbM10gPSBFTkNSWVBUX0lTOworfQor CisvKgorICogUmV0dXJuczoKKyAqICAgICAgLTE6IHNvbWUgZXJyb3IuICBOZWdvdGlhdGlvbiBp cyBkb25lLCBlbmNyeXB0aW9uIG5vdCByZWFkeS4KKyAqICAgICAgIDA6IFN1Y2Nlc3NmdWwsIGlu aXRpYWwgbmVnb3RpYXRpb24gYWxsIGRvbmUuCisgKiAgICAgICAxOiBzdWNjZXNzZnVsLCBuZWdv dGlhdGlvbiBub3QgZG9uZSB5ZXQuCisgKiAgICAgICAyOiBOb3QgeWV0LiAgT3RoZXIgdGhpbmdz IChsaWtlIGdldHRpbmcgdGhlIGtleSBmcm9tCisgKiAgICAgICAgICBLZXJiZXJvcykgaGF2ZSB0 byBoYXBwZW4gYmVmb3JlIHdlIGNhbiBjb250aW51ZS4KKyAqLworaW50CitjZmI2NF9zdGFydChk aXIsIHNlcnZlcikKKyAgICBpbnQgZGlyOworICAgIGludCBzZXJ2ZXI7Cit7CisgICAgcmV0dXJu KGZiNjRfc3RhcnQoJmRlc19mYltDRkJdLCBkaXIsIHNlcnZlcikpOworfQoraW50CitvZmI2NF9z dGFydChkaXIsIHNlcnZlcikKKyAgICBpbnQgZGlyOworICAgIGludCBzZXJ2ZXI7Cit7CisgICAg cmV0dXJuKGZiNjRfc3RhcnQoJmRlc19mYltPRkJdLCBkaXIsIHNlcnZlcikpOworfQorCitzdGF0 aWMgaW50CitmYjY0X3N0YXJ0KGZicCwgZGlyLCBzZXJ2ZXIpCisgICAgc3RydWN0IGRlc19mYiAq ZmJwOworICAgIGludCBkaXI7CisgICAgaW50IHNlcnZlcjsKK3sKKyAgICBpbnQgeDsKKyAgICB1 bnNpZ25lZCBjaGFyICpwOworICAgIHJlZ2lzdGVyIGludCBzdGF0ZTsKKworICAgIHN3aXRjaCAo ZGlyKSB7CisgICAgY2FzZSBESVJfREVDUllQVDoKKyAgICAgICAgLyoKKyAgICAgICAgKiBUaGlz IGlzIHNpbXBseSBhIHJlcXVlc3QgdG8gaGF2ZSB0aGUgb3RoZXIgc2lkZQorICAgICAgICAqIHN0 YXJ0IG91dHB1dCAob3VyIGlucHV0KS4gIEhlIHdpbGwgbmVnb3RpYXRlIGFuCisgICAgICAgICog SVYgc28gd2UgbmVlZCBub3QgbG9vayBmb3IgaXQuCisgICAgICAgICovCisgICAgICAgIHN0YXRl ID0gZmJwLT5zdGF0ZVtkaXItMV07CisgICAgICAgIGlmIChzdGF0ZSA9PSB4RkFJTEVEKQorICAg ICAgICAgICAgc3RhdGUgPSBJTl9QUk9HUkVTUzsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNl IERJUl9FTkNSWVBUOgorICAgICAgICBzdGF0ZSA9IGZicC0+c3RhdGVbZGlyLTFdOworICAgICAg ICBpZiAoc3RhdGUgPT0geEZBSUxFRCkKKyAgICAgICAgICAgIHN0YXRlID0gSU5fUFJPR1JFU1M7 CisgICAgICAgIGVsc2UgaWYgKChzdGF0ZSAmIE5PX1NFTkRfSVYpID09IDApCisgICAgICAgICAg ICBicmVhazsKKworI2lmZGVmIE1JVF9DVVJSRU5UCisgICAgICAgIGlmICghZmJwLT52YWxpZGtl eSkgeworICAgICAgICAgICAgZmJwLT5uZWVkX3N0YXJ0ID0gMTsKKyAgICAgICAgICAgIGJyZWFr OworICAgICAgICB9CisjZWxzZSAvKiBNSVRfQ1VSUkVOVCAqLworICAgICAgICBpZiAoIVZBTElE S0VZKGZicC0+a3JiZGVzX2tleSkpIHsKKyAgICAgICAgICAgIGZicC0+bmVlZF9zdGFydCA9IDE7 CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorI2VuZGlmIC8qIE1JVF9DVVJSRU5UICov CisgICAgICAgIHN0YXRlICY9IH5OT19TRU5EX0lWOworICAgICAgICBzdGF0ZSB8PSBOT19SRUNW X0lWOworICAgICAgICAvKgorICAgICAgICAqIENyZWF0ZSBhIHJhbmRvbSBmZWVkIGFuZCBzZW5k IGl0IG92ZXIuCisgICAgICAgICovCisjaWZkZWYgTUlUX0NVUlJFTlQKKyAgICAgICAgeworICAg ICAgICAgICAga3JiNV9kYXRhIGQ7CisgICAgICAgICAgICBrcmI1X2Vycm9yX2NvZGUgY29kZTsK KworICAgICAgICAgICAgZC5kYXRhID0gZmJwLT50ZW1wX2ZlZWQ7CisgICAgICAgICAgICBkLmxl bmd0aCA9IHNpemVvZihmYnAtPnRlbXBfZmVlZCk7CisKKyNpZmRlZiBDUllQVF9ETEwKKyAgICAg ICAgICAgIGlmIChjb2RlID0ga3JiNV9jX3JhbmRvbV9tYWtlX29jdGV0cygqcF9rNV9jb250ZXh0 LCZkKSkKKyAgICAgICAgICAgICAgICByZXR1cm4oeEZBSUxFRCk7CisjZWxzZSAvKiBDUllQVF9E TEwgKi8KKyAgICAgICAgICAgIGlmIChjb2RlID0ga3JiNV9jX3JhbmRvbV9tYWtlX29jdGV0cyhr NV9jb250ZXh0LCZkKSkKKyAgICAgICAgICAgICAgICByZXR1cm4oeEZBSUxFRCk7CisjZW5kaWYg LyogQ1JZUFRfRExMICovCisgICAgICAgIH0KKworI2Vsc2UgLyogTUlUX0NVUlJFTlQgKi8KKyAg ICAgICAgZGVzX25ld19yYW5kb21fa2V5KGZicC0+dGVtcF9mZWVkKTsKKyAgICAgICAgZGVzX2Vj Yl9lbmNyeXB0KGZicC0+dGVtcF9mZWVkLCBmYnAtPnRlbXBfZmVlZCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICBmYnAtPmtyYmRlc19zY2hlZCwgMSk7CisjZW5kaWYgLyogTUlUX0NVUlJFTlQg Ki8KKyAgICAgICAgcCA9IGZicC0+ZmJfZmVlZCArIDM7CisgICAgICAgICpwKysgPSBFTkNSWVBU X0lTOworICAgICAgICBwKys7CisgICAgICAgICpwKysgPSBGQjY0X0lWOworICAgICAgICBmb3Ig KHggPSAwOyB4IDwgc2l6ZW9mKEJsb2NrKTsgKyt4KSB7CisgICAgICAgICAgICBpZiAoKCAqcCsr ID0gZmJwLT50ZW1wX2ZlZWRbeF0pID09IElBQykKKyAgICAgICAgICAgICAgICAqcCsrID0gSUFD OworICAgICAgICB9CisgICAgICAgICpwKysgPSBJQUM7CisgICAgICAgICpwKysgPSBTRTsKKwor ICAgICAgICBpZiAoZGVibG9nIHx8IHRuX2RlYiB8fCBkZWJzZXMpIHsKKyAgICAgICAgICAgIGlu dCBpOworICAgICAgICAgICAgc3ByaW50Zih0bl9tc2csCisgICAgICAgICAgICAgICAgICAgICAi VEVMTkVUIFNFTlQgU0IgJXMgSVMgJXMgRkI2NF9JViAiLAorICAgICAgICAgICAgICAgICAgICAg VEVMT1BUKGZicC0+ZmJfZmVlZFsyXSksCisgICAgICAgICAgICAgICAgICAgICBlbmN0eXBlX25h bWVzW2ZicC0+ZmJfZmVlZFs0XV0pOyAvKiBzYWZlICovCisgICAgICAgICAgICB0bl9oZXgoKENI QVIgKil0bl9tc2csVE5fTVNHX0xFTiwmZmJwLT5mYl9mZWVkWzZdLAorCQkocC1mYnAtPmZiX2Zl ZWQpLTItNik7CisgICAgICAgICAgICBja3N0cm5jYXQodG5fbXNnLCJJQUMgU0UiLFROX01TR19M RU4pOworICAgICAgICAgICAgZGVidWcoRjEwMCx0bl9tc2csIiIsMCk7CisgICAgICAgICAgICBp ZiAodG5fZGViIHx8IGRlYnNlcykgdG5fZGVidWcodG5fbXNnKTsKKyAgICAgICAgfQorI2lmZGVm IE9TMgorICAgICAgICBSZXF1ZXN0VGVsbmV0TXV0ZXgoIFNFTV9JTkRFRklOSVRFX1dBSVQgKTsK KyNlbmRpZgorICAgICAgICB0dG9sKGZicC0+ZmJfZmVlZCwgcCAtIGZicC0+ZmJfZmVlZCk7Cisj aWZkZWYgT1MyCisgICAgICAgIFJlbGVhc2VUZWxuZXRNdXRleCgpOworI2VuZGlmCisgICAgICAg IGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybih4RkFJTEVEKTsKKyAgICB9Cisg ICAgcmV0dXJuKGZicC0+c3RhdGVbZGlyLTFdID0gc3RhdGUpOworfQorCisvKgorICogUmV0dXJu czoKKyAqICAgICAgLTE6IHNvbWUgZXJyb3IuICBOZWdvdGlhdGlvbiBpcyBkb25lLCBlbmNyeXB0 aW9uIG5vdCByZWFkeS4KKyAqICAgICAgIDA6IFN1Y2Nlc3NmdWwsIGluaXRpYWwgbmVnb3RpYXRp b24gYWxsIGRvbmUuCisgKiAgICAgICAxOiBzdWNjZXNzZnVsLCBuZWdvdGlhdGlvbiBub3QgZG9u ZSB5ZXQuCisgKi8KK2ludAorY2ZiNjRfaXMoZGF0YSwgY250KQorICAgIHVuc2lnbmVkIGNoYXIg KmRhdGE7CisgICAgaW50IGNudDsKK3sKKyAgICByZXR1cm4oZmI2NF9pcyhkYXRhLCBjbnQsICZk ZXNfZmJbQ0ZCXSkpOworfQorCitpbnQKK29mYjY0X2lzKGRhdGEsIGNudCkKKyAgICB1bnNpZ25l ZCBjaGFyICpkYXRhOworICAgIGludCBjbnQ7Cit7CisgICAgcmV0dXJuKGZiNjRfaXMoZGF0YSwg Y250LCAmZGVzX2ZiW09GQl0pKTsKK30KKworaW50CitmYjY0X2lzKGRhdGEsIGNudCwgZmJwKQor ICAgIHVuc2lnbmVkIGNoYXIgKmRhdGE7CisgICAgaW50IGNudDsKKyAgICBzdHJ1Y3QgZGVzX2Zi ICpmYnA7Cit7CisgICAgdW5zaWduZWQgY2hhciAqcDsKKyAgICByZWdpc3RlciBpbnQgc3RhdGUg PSBmYnAtPnN0YXRlW0RJUl9ERUNSWVBULTFdOworCisgICAgaWYgKGNudC0tIDwgMSkKKyAgICAg ICAgZ290byBmYWlsdXJlOworCisjaWZkZWYgQ0tfU1NMCisgICAgaWYgKCFURUxPUFRfU0IoVEVM T1BUX1NUQVJUX1RMUykuc3RhcnRfdGxzLm1lX2ZvbGxvd3MpCisjZW5kaWYgLyogQ0tfU1NMICov CisgICAgc3dpdGNoICgqZGF0YSsrKSB7CisgICAgY2FzZSBGQjY0X0lWOgorICAgICAgICBpZiAo Y250ICE9IHNpemVvZihCbG9jaykpIHsKKyNpZmRlZiBERUJVRworICAgICAgICAgICAgaWYgKGVu Y3J5cHRfZGVidWdfbW9kZSkKKyAgICAgICAgICAgICAgICBwcmludGYoIkNGQjY0OiBpbml0aWFs IHZlY3RvciBmYWlsZWQgb24gc2l6ZVxyXG4iKTsKKyNlbmRpZgorICAgICAgICAgICAgc3RhdGUg PSB4RkFJTEVEOworICAgICAgICAgICAgZ290byBmYWlsdXJlOworICAgICAgICB9CisKKyNpZmRl ZiBERUJVRworICAgICAgICBpZiAoZW5jcnlwdF9kZWJ1Z19tb2RlKSB7CisgICAgICAgICAgICBw cmludGYoIkNGQjY0OiBpbml0aWFsIHZlY3RvciByZWNlaXZlZFxyXG4iKTsKKyAgICAgICAgICAg IHByaW50ZigiSW5pdGlhbGl6aW5nIERlY3J5cHQgc3RyZWFtXHJcbiIpOworICAgICAgICB9Cisj ZW5kaWYKKyAgICAgICAgZmI2NF9zdHJlYW1faXYoKHZvaWQgKilkYXRhLCAmZmJwLT5zdHJlYW1z W0RJUl9ERUNSWVBULTFdKTsKKworICAgICAgICBwID0gZmJwLT5mYl9mZWVkICsgMzsKKyAgICAg ICAgKnArKyA9IEVOQ1JZUFRfUkVQTFk7CisgICAgICAgIHArKzsKKyAgICAgICAgKnArKyA9IEZC NjRfSVZfT0s7CisgICAgICAgICpwKysgPSBJQUM7CisgICAgICAgICpwKysgPSBTRTsKKworICAg ICAgICBpZiAoZGVibG9nIHx8IHRuX2RlYiB8fCBkZWJzZXMpIHsKKyAgICAgICAgICAgIGludCBp OworICAgICAgICAgICAgc3ByaW50Zih0bl9tc2csCisgICAgICAgICAgICAgICAgICAgICAiVEVM TkVUIFNFTlQgU0IgJXMgUkVQTFkgJXMgRkI2NF9JVl9PSyAiLAorICAgICAgICAgICAgICAgICAg ICAgVEVMT1BUKGZicC0+ZmJfZmVlZFsyXSksCisgICAgICAgICAgICAgICAgICAgICBlbmN0eXBl X25hbWVzW2ZicC0+ZmJfZmVlZFs0XV0pOyAvKiBzYWZlICovCisgICAgICAgICAgICB0bl9oZXgo KENIQVIgKil0bl9tc2csVE5fTVNHX0xFTiwmZmJwLT5mYl9mZWVkWzZdLAorCQkocC1mYnAtPmZi X2ZlZWQpLTItNik7CisgICAgICAgICAgICBja3N0cm5jYXQodG5fbXNnLCJJQUMgU0UiLFROX01T R19MRU4pOworICAgICAgICAgICAgZGVidWcoRjEwMCx0bl9tc2csIiIsMCk7CisgICAgICAgICAg ICBpZiAodG5fZGViIHx8IGRlYnNlcykgdG5fZGVidWcodG5fbXNnKTsKKyAgICAgICAgfQorI2lm ZGVmIE9TMgorICAgICAgICBSZXF1ZXN0VGVsbmV0TXV0ZXgoIFNFTV9JTkRFRklOSVRFX1dBSVQg KTsKKyNlbmRpZgorICAgICAgICB0dG9sKGZicC0+ZmJfZmVlZCwgcCAtIGZicC0+ZmJfZmVlZCk7 CisjaWZkZWYgT1MyCisgICAgICAgIFJlbGVhc2VUZWxuZXRNdXRleCgpOworI2VuZGlmCisgICAg ICAgIHN0YXRlID0gSU5fUFJPR1JFU1M7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoK KyNpZiAwCisgICAgICAgIGlmIChlbmNyeXB0X2RlYnVnX21vZGUpIHsKKyAgICAgICAgICAgIHBy aW50ZigiVW5rbm93biBvcHRpb24gdHlwZTogJWRcclxuIiwgKihkYXRhLTEpKTsKKyAgICAgICAg ICAgIHByaW50ZigiXHJcbiIpOworICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgLyogRkFMTCBU SFJPVUdIICovCisgICAgICBmYWlsdXJlOgorICAgICAgICAvKgorICAgICAgICAqIFdlIGZhaWxl ZC4gIFNlbmQgYW4gRkI2NF9JVl9CQUQgb3B0aW9uCisgICAgICAgICogdG8gdGhlIG90aGVyIHNp ZGUgc28gaXQgd2lsbCBrbm93IHRoYXQKKyAgICAgICAgKiB0aGluZ3MgZmFpbGVkLgorICAgICAg ICAqLworICAgICAgICBwID0gZmJwLT5mYl9mZWVkICsgMzsKKyAgICAgICAgKnArKyA9IEVOQ1JZ UFRfUkVQTFk7CisgICAgICAgIHArKzsKKyAgICAgICAgKnArKyA9IEZCNjRfSVZfQkFEOworICAg ICAgICAqcCsrID0gSUFDOworICAgICAgICAqcCsrID0gU0U7CisKKyAgICAgICAgaWYgKGRlYmxv ZyB8fCB0bl9kZWIgfHwgZGVic2VzKSB7CisgICAgICAgICAgICBpbnQgaTsKKyAgICAgICAgICAg IHNwcmludGYodG5fbXNnLAorICAgICAgICAgICAgICAgICAgICAgIlRFTE5FVCBTRU5UIFNCICVz IFJFUExZICVzIEZCNjRfSVZfQkFEICIsCisgICAgICAgICAgICAgICAgICAgICBURUxPUFQoZmJw LT5mYl9mZWVkWzJdKSwKKyAgICAgICAgICAgICAgICAgICAgIGVuY3R5cGVfbmFtZXNbZmJwLT5m Yl9mZWVkWzRdXSk7IC8qIHNhZmUgKi8KKyAgICAgICAgICAgIHRuX2hleCgoQ0hBUiAqKXRuX21z ZyxUTl9NU0dfTEVOLCZmYnAtPmZiX2ZlZWRbNl0sCisJCShwLWZicC0+ZmJfZmVlZCktMi02KTsK KyAgICAgICAgICAgIGNrc3RybmNhdCh0bl9tc2csIklBQyBTRSIsVE5fTVNHX0xFTik7CisgICAg ICAgICAgICBkZWJ1ZyhGMTAwLHRuX21zZywiIiwwKTsKKyAgICAgICAgICAgIGlmICh0bl9kZWIg fHwgZGVic2VzKSB0bl9kZWJ1Zyh0bl9tc2cpOworICAgICAgICB9CisjaWZkZWYgT1MyCisgICAg ICAgIFJlcXVlc3RUZWxuZXRNdXRleCggU0VNX0lOREVGSU5JVEVfV0FJVCApOworI2VuZGlmCisg ICAgICAgIHR0b2woZmJwLT5mYl9mZWVkLCBwIC0gZmJwLT5mYl9mZWVkKTsKKyNpZmRlZiBPUzIK KyAgICAgICAgUmVsZWFzZVRlbG5ldE11dGV4KCk7CisjZW5kaWYKKyAgICAgICAgYnJlYWs7Cisg ICAgfQorICAgIHJldHVybihmYnAtPnN0YXRlW0RJUl9ERUNSWVBULTFdID0gc3RhdGUpOworfQor CisvKgorICogUmV0dXJuczoKKyAqICAgICAgLTE6IHNvbWUgZXJyb3IuICBOZWdvdGlhdGlvbiBp cyBkb25lLCBlbmNyeXB0aW9uIG5vdCByZWFkeS4KKyAqICAgICAgIDA6IFN1Y2Nlc3NmdWwsIGlu aXRpYWwgbmVnb3RpYXRpb24gYWxsIGRvbmUuCisgKiAgICAgICAxOiBzdWNjZXNzZnVsLCBuZWdv dGlhdGlvbiBub3QgZG9uZSB5ZXQuCisgKi8KK2ludAorY2ZiNjRfcmVwbHkoZGF0YSwgY250KQor ICAgIHVuc2lnbmVkIGNoYXIgKmRhdGE7CisgICAgaW50IGNudDsKK3sKKyAgICByZXR1cm4oZmI2 NF9yZXBseShkYXRhLCBjbnQsICZkZXNfZmJbQ0ZCXSkpOworfQoraW50CitvZmI2NF9yZXBseShk YXRhLCBjbnQpCisgICAgdW5zaWduZWQgY2hhciAqZGF0YTsKKyAgICBpbnQgY250OworeworICAg IHJldHVybihmYjY0X3JlcGx5KGRhdGEsIGNudCwgJmRlc19mYltPRkJdKSk7Cit9CisKKworaW50 CitmYjY0X3JlcGx5KGRhdGEsIGNudCwgZmJwKQorICAgIHVuc2lnbmVkIGNoYXIgKmRhdGE7Cisg ICAgaW50IGNudDsKKyAgICBzdHJ1Y3QgZGVzX2ZiICpmYnA7Cit7CisgICAgcmVnaXN0ZXIgaW50 IHN0YXRlID0gZmJwLT5zdGF0ZVtESVJfRU5DUllQVC0xXTsKKworICAgIGlmIChjbnQtLSA8IDEp CisgICAgICAgIGdvdG8gZmFpbHVyZTsKKworICAgIHN3aXRjaCAoKmRhdGErKykgeworICAgIGNh c2UgRkI2NF9JVl9PSzoKKyAgICAgICAgZmI2NF9zdHJlYW1faXYoZmJwLT50ZW1wX2ZlZWQsICZm YnAtPnN0cmVhbXNbRElSX0VOQ1JZUFQtMV0pOworICAgICAgICBpZiAoc3RhdGUgPT0geEZBSUxF RCkKKyAgICAgICAgICAgIHN0YXRlID0gSU5fUFJPR1JFU1M7CisgICAgICAgIHN0YXRlICY9IH5O T19SRUNWX0lWOworICAgICAgICBlbmNyeXB0X3NlbmRfa2V5aWQoRElSX0VOQ1JZUFQsICh1bnNp Z25lZCBjaGFyICopIlwwIiwgMSwgMSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBGQjY0 X0lWX0JBRDoKKyAgICAgICAgbWVtc2V0KGZicC0+dGVtcF9mZWVkLCAwLCBzaXplb2YoQmxvY2sp KTsKKyAgICAgICAgZmI2NF9zdHJlYW1faXYoZmJwLT50ZW1wX2ZlZWQsICZmYnAtPnN0cmVhbXNb RElSX0VOQ1JZUFQtMV0pOworICAgICAgICBzdGF0ZSA9IHhGQUlMRUQ7CisgICAgICAgIGJyZWFr OworCisgICAgZGVmYXVsdDoKKyNpZiAwCisgICAgICAgIGlmIChlbmNyeXB0X2RlYnVnX21vZGUp IHsKKyAgICAgICAgICAgIHByaW50ZigiVW5rbm93biBvcHRpb24gdHlwZTogJWRcclxuIiwgZGF0 YVstMV0pOworICAgICAgICAgICAgcHJpbnRmKCJcclxuIik7CisgICAgICAgIH0KKyNlbmRpZgor ICAgICAgICAvKiBGQUxMIFRIUk9VR0ggKi8KKyAgICAgIGZhaWx1cmU6CisgICAgICAgIHN0YXRl ID0geEZBSUxFRDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybihmYnAtPnN0YXRl W0RJUl9FTkNSWVBULTFdID0gc3RhdGUpOworfQorCitpbnQKK2NmYjY0X3Nlc3Npb24oa2V5LCBz ZXJ2ZXIpCisgICAgU2Vzc2lvbl9LZXkgKmtleTsKKyAgICBpbnQgc2VydmVyOworeworICAgIHJl dHVybihmYjY0X3Nlc3Npb24oa2V5LCBzZXJ2ZXIsICZkZXNfZmJbQ0ZCXSkpOworfQorCitpbnQK K29mYjY0X3Nlc3Npb24oa2V5LCBzZXJ2ZXIpCisgICAgU2Vzc2lvbl9LZXkgKmtleTsKKyAgICBp bnQgc2VydmVyOworeworICAgIHJldHVybihmYjY0X3Nlc3Npb24oa2V5LCBzZXJ2ZXIsICZkZXNf ZmJbT0ZCXSkpOworfQorCitzdGF0aWMgaW50CitmYjY0X3Nlc3Npb24oa2V5LCBzZXJ2ZXIsIGZi cCkKKyAgICBTZXNzaW9uX0tleSAqa2V5OworICAgIGludCBzZXJ2ZXI7CisgICAgc3RydWN0IGRl c19mYiAqZmJwOworeworICAgIGludCByYz0wOworICAgIGludCB1c2Uya2V5czsKKyAgICBzdHJ1 Y3QgZGVzX3N0aW5mbyAqIHNfc3RyZWFtOworICAgIHN0cnVjdCBkZXNfc3RpbmZvICogY19zdHJl YW07CisKKyAgICBpZihzZXJ2ZXIpIHsKKyAgICAgICAgc19zdHJlYW0gPSAmZmJwLT5zdHJlYW1z W0RJUl9FTkNSWVBULTFdOworICAgICAgICBjX3N0cmVhbSA9ICZmYnAtPnN0cmVhbXNbRElSX0RF Q1JZUFQtMV07CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBzX3N0cmVhbSA9ICZmYnAtPnN0 cmVhbXNbRElSX0RFQ1JZUFQtMV07CisgICAgICAgIGNfc3RyZWFtID0gJmZicC0+c3RyZWFtc1tE SVJfRU5DUllQVC0xXTsKKyAgICB9CisKKyAgICBpZiAoIWtleSB8fCBrZXktPmxlbmd0aCA8IHNp emVvZihCbG9jaykpIHsKKyAgICAgICAgQ0hBUiBidWZbODBdOworICAgICAgICBzcHJpbnRmKChj aGFyICopYnVmLCJDYW4ndCBzZXQgREVTIHNlc3Npb24ga2V5ICglZCA8ICVkKSIsCisgICAgICAg ICAgICAgICAga2V5ID8ga2V5LT5sZW5ndGggOiAwLCBzaXplb2YoQmxvY2spKTsgICAgICAgICAg Lyogc2FmZSAqLworI2lmZGVmIERFQlVHCisgICAgICAgIGlmIChlbmNyeXB0X2RlYnVnX21vZGUp CisgICAgICAgICAgICBwcmludGYoIiVzXHJcbiIsYnVmKTsKKyNlbmRpZgorICAgICAgICBkZWJ1 ZyhGMTEwLCJmYjY0X3Nlc3Npb24iLGJ1ZiwwKTsKKyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9 CisgICAgdXNlMmtleXMgPSAoa2V5LT50eXBlID09IFNLX0RFUyB8fAorICAgICAgICAgICAgICAg ICBrZXktPmxlbmd0aCA8IDIgKiBzaXplb2YoQmxvY2spKSA/IDAgOiAxOworI2lmZGVmIE1JVF9D VVJSRU5UCisgICAgaWYodXNlMmtleXMpIHsKKyAgICAgICAgbWVtY3B5KCh2b2lkICopIGZicC0+ a2V5Ynl0ZXMsCisgICAgICAgICAgICAgICAgICh2b2lkICopIChrZXktPmRhdGEgKyBzaXplb2Yo QmxvY2spKSwgc2l6ZW9mKEJsb2NrKSk7CisgICAgICAgIGRlc19maXh1cF9rZXlfcGFyaXR5KGZi cC0+KTsKKyAgICAgICAgZmI2NF9zdHJlYW1fa2V5KGZicC0+a3JiZGVzX2tleSwgc19zdHJlYW0p OworICAgIH0KKworICAgIG1lbWNweSgodm9pZCAqKWZicC0+a3JiZGVzX2tleSwgKHZvaWQgKilr ZXktPmRhdGEsIHNpemVvZihCbG9jaykpOworICAgIGlmIChrZXktPnR5cGUgIT0gU0tfREVTKQor ICAgICAgICBkZXNfZml4dXBfa2V5X3Bhcml0eShmYnAtPmtyYmRlc19rZXkpOworCisgICAgaWYo IXVzZTJrZXlzKQorICAgICAgICBmYjY0X3N0cmVhbV9rZXkoZmJwLT5rcmJkZXNfa2V5LCBzX3N0 cmVhbSk7CisgICAgZmI2NF9zdHJlYW1fa2V5KGZicC0+a3JiZGVzX2tleSwgY19zdHJlYW0pOwor ICAgIGZicC0+dmFsaWRrZXkgPSAxOworCisgICAgZmI2NF9zdHJlYW1fa2V5KGtleS0+ZGF0YSwg JmZicC0+c3RyZWFtc1tESVJfRU5DUllQVC0xXSk7CisgICAgZmI2NF9zdHJlYW1fa2V5KGtleS0+ ZGF0YSwgJmZicC0+c3RyZWFtc1tESVJfREVDUllQVC0xXSk7CisjZWxzZSAvKiBNSVRfQ1VSUkVO VCAqLworICAgIGlmKHVzZTJrZXlzKSB7CisgICAgICAgIG1lbWNweSgodm9pZCAqKSBmYnAtPmty YmRlc19rZXksCisgICAgICAgICAgICAgICAgICh2b2lkICopIChrZXktPmRhdGEgKyBzaXplb2Yo QmxvY2spKSwgc2l6ZW9mKEJsb2NrKSk7CisgICAgICAgIGRlc19maXh1cF9rZXlfcGFyaXR5KGZi cC0+a3JiZGVzX2tleSk7CisgICAgICAgIGZiNjRfc3RyZWFtX2tleShmYnAtPmtyYmRlc19rZXks IHNfc3RyZWFtKTsKKyAgICB9CisKKyAgICBtZW1jcHkoKHZvaWQgKilmYnAtPmtyYmRlc19rZXks ICh2b2lkICopa2V5LT5kYXRhLCBzaXplb2YoQmxvY2spKTsKKyAgICBpZiAoa2V5LT50eXBlICE9 IFNLX0RFUykKKyAgICAgICAgZGVzX2ZpeHVwX2tleV9wYXJpdHkoZmJwLT5rcmJkZXNfa2V5KTsK KworICAgIGlmKCF1c2Uya2V5cykKKyAgICAgICAgZmI2NF9zdHJlYW1fa2V5KGZicC0+a3JiZGVz X2tleSwgc19zdHJlYW0pOworICAgIGZiNjRfc3RyZWFtX2tleShmYnAtPmtyYmRlc19rZXksIGNf c3RyZWFtKTsKKworICAgIGlmIChmYnAtPm9uY2UgPT0gMCkgeworICAgICAgICBkZXNfc2V0X3Jh bmRvbV9nZW5lcmF0b3Jfc2VlZChmYnAtPmtyYmRlc19rZXkpOworICAgICAgICBmYnAtPm9uY2Ug PSAxOworICAgIH0KKworICAgIG1lbXNldChmYnAtPmtyYmRlc19zY2hlZCwwLHNpemVvZihTY2hl ZHVsZSkpOworICAgIGNraGV4ZHVtcCgiZmI2NF9zZXNzaW9uX2tleSIsZmJwLT5rcmJkZXNfa2V5 LDgpOworCisgICAgcmMgPSBkZXNfa2V5X3NjaGVkKGZicC0+a3JiZGVzX2tleSwgZmJwLT5rcmJk ZXNfc2NoZWQpOworICAgIGlmICggcmMgPT0gLTEgKSB7CisgICAgICAgIHByaW50ZigiP0ludmFs aWQgREVTIGtleSBzcGVjaWZpZWQgZm9yIGVuY3J5cHRpb25cbiIpOworICAgICAgICBkZWJ1ZyhG MTEwLCJmYjY0X3Nlc3Npb25fa2V5IiwKKyAgICAgICAgICAgICAgICJpbnZhbGlkIERFUyBLZXkg c3BlY2lmaWVkIGZvciBlbmNyeXB0aW9uIiwwKTsKKyAgICB9IGVsc2UgaWYgKCByYyA9PSAtMiAp IHsKKyAgICAgICAgcHJpbnRmKCI/V2VhayBERVMga2V5IHNwZWNpZmllZCBmb3IgZW5jcnlwdGlv blxuIik7CisgICAgICAgIGRlYnVnKEYxMTAsImZiNjRfc2Vzc2lvbl9rZXkiLAorICAgICAgICAg ICAgICAgIndlYWsgREVTIEtleSBzcGVjaWZpZWQgZm9yIGVuY3J5cHRpb24iLDApOworICAgIH0g ZWxzZSBpZiAoIHJjICE9IDAgKSB7CisgICAgICAgIHByaW50ZigiP0tleSBTY2hlZHVsZSBub3Qg Y3JlYXRlZCBieSBlbmNyeXB0aW9uXG4iKTsKKyAgICAgICAgZGVidWcoRjExMCwiZmI2NF9zZXNz aW9uX2tleSIsCisgICAgICAgICAgICAgICAiS2V5IFNjaGVkdWxlIG5vdCBjcmVhdGVkIGJ5IGVu Y3J5cHRpb24iLDApOworICAgIH0KKworICAgIGNraGV4ZHVtcCgiZmI2NF9zZXNzaW9uX2tleSBz Y2hlZHVsZSIsZmJwLT5rcmJkZXNfc2NoZWQsOCoxNik7CisjZW5kaWYgLyogTUlUX0NVUlJFTlQg Ki8KKyAgICAvKgorICAgICogTm93IGxvb2sgdG8gc2VlIGlmIGtyYmRlc19zdGFydCgpIHdhcyB3 YXMgd2FpdGluZyBmb3IKKyAgICAqIHRoZSBrZXkgdG8gc2hvdyB1cC4gIElmIHNvLCBnbyBhaGVh ZCBhbiBjYWxsIGl0IG5vdworICAgICogdGhhdCB3ZSBoYXZlIHRoZSBrZXkuCisgICAgKi8KKyAg ICBpZiAoZmJwLT5uZWVkX3N0YXJ0KSB7CisgICAgICAgIGZicC0+bmVlZF9zdGFydCA9IDA7Cisg ICAgICAgIGZiNjRfc3RhcnQoZmJwLCBESVJfRU5DUllQVCwgc2VydmVyKTsKKyAgICB9CisgICAg cmV0dXJuKDApOworfQorCisvKgorICogV2Ugb25seSBhY2NlcHQgYSBrZXlpZCBvZiAwLiAgSWYg d2UgZ2V0IGEga2V5aWQgb2YKKyAqIDAsIHRoZW4gbWFyayB0aGUgc3RhdGUgYXMgU1VDQ0VTUy4K KyAqLworaW50CitjZmI2NF9rZXlpZChkaXIsIGtwLCBsZW5wKQorICAgIGludCBkaXIsICpsZW5w OworICAgIHVuc2lnbmVkIGNoYXIgKmtwOworeworICAgIHJldHVybihmYjY0X2tleWlkKGRpciwg a3AsIGxlbnAsICZkZXNfZmJbQ0ZCXSkpOworfQorCitpbnQKK29mYjY0X2tleWlkKGRpciwga3As IGxlbnApCisgICAgaW50IGRpciwgKmxlbnA7CisgICAgdW5zaWduZWQgY2hhciAqa3A7Cit7Cisg ICAgcmV0dXJuKGZiNjRfa2V5aWQoZGlyLCBrcCwgbGVucCwgJmRlc19mYltPRkJdKSk7Cit9CisK K2ludAorZmI2NF9rZXlpZChkaXIsIGtwLCBsZW5wLCBmYnApCisgICAgaW50IGRpciwgKmxlbnA7 CisgICAgdW5zaWduZWQgY2hhciAqa3A7CisgICAgc3RydWN0IGRlc19mYiAqZmJwOworeworICAg IHJlZ2lzdGVyIGludCBzdGF0ZSA9IGZicC0+c3RhdGVbZGlyLTFdOworCisgICAgaWYgKCpsZW5w ICE9IDEgfHwgKCprcCAhPSAnXDAnKSkgeworICAgICAgICAqbGVucCA9IDA7CisgICAgICAgIHJl dHVybihzdGF0ZSk7CisgICAgfQorCisgICAgaWYgKHN0YXRlID09IHhGQUlMRUQpCisgICAgICAg IHN0YXRlID0gSU5fUFJPR1JFU1M7CisKKyAgICBzdGF0ZSAmPSB+Tk9fS0VZSUQ7CisKKyAgICBy ZXR1cm4oZmJwLT5zdGF0ZVtkaXItMV0gPSBzdGF0ZSk7Cit9CisKKyNpZiAwCit2b2lkCitmYjY0 X3ByaW50c3ViKGRhdGEsIGNudCwgYnVmLCBidWZsZW4sIHR5cGUpCisgICAgdW5zaWduZWQgY2hh ciAqZGF0YSwgKmJ1ZiwgKnR5cGU7CisgICAgaW50IGNudCwgYnVmbGVuOworeworICAgIGNoYXIg bGJ1Zls2NF07CisgICAgcmVnaXN0ZXIgaW50IGk7CisgICAgY2hhciAqY3A7CisKKyAgICBidWZb YnVmbGVuLTFdID0gJ1wwJzsgICAgICAgICAgICAgICAvKiBtYWtlIHN1cmUgaXQncyBOVUxMIHRl cm1pbmF0ZWQgKi8KKyAgICBidWZsZW4gLT0gMTsKKworICAgIHN3aXRjaChkYXRhWzJdKSB7Cisg ICAgY2FzZSBGQjY0X0lWOgorICAgICAgICBzcHJpbnRmKGxidWYsICIlc19JViIsIHR5cGUpOwor ICAgICAgICBjcCA9IGxidWY7CisgICAgICAgIGdvdG8gY29tbW9uOworCisgICAgY2FzZSBGQjY0 X0lWX09LOgorICAgICAgICBzcHJpbnRmKGxidWYsICIlc19JVl9PSyIsIHR5cGUpOworICAgICAg ICBjcCA9IGxidWY7CisgICAgICAgIGdvdG8gY29tbW9uOworCisgICAgY2FzZSBGQjY0X0lWX0JB RDoKKyAgICAgICAgc3ByaW50ZihsYnVmLCAiJXNfSVZfQkFEIiwgdHlwZSk7CisgICAgICAgIGNw ID0gbGJ1ZjsKKyAgICAgICAgZ290byBjb21tb247CisKKyAgICBjYXNlIEZCNjRfQ0hBTExFTkdF OgorICAgICAgICBzcHJpbnRmKGxidWYsICIlc19DSEFMTEVOR0UiLCB0eXBlKTsKKyAgICAgICAg Y3AgPSBsYnVmOworICAgICAgICBnb3RvIGNvbW1vbjsKKworICAgIGNhc2UgRkI2NF9SRVNQT05T RToKKyAgICAgICAgc3ByaW50ZihsYnVmLCAiJXNfUkVTUE9OU0UiLCB0eXBlKTsKKyAgICAgICAg Y3AgPSBsYnVmOworICAgICAgICBnb3RvIGNvbW1vbjsKKworICAgIGRlZmF1bHQ6CisgICAgICAg IHNwcmludGYobGJ1ZiwgIiAlZCAodW5rbm93bikiLCBkYXRhWzJdKTsKKyAgICAgICAgY3AgPSBs YnVmOworICAgICAgY29tbW9uOgorICAgICAgICBmb3IgKDsgKGJ1ZmxlbiA+IDApICYmICgqYnVm ID0gKmNwKyspOyBidWYrKykKKyAgICAgICAgICAgIGJ1Zmxlbi0tOworICAgICAgICBmb3IgKGkg PSAzOyBpIDwgY250OyBpKyspIHsKKyAgICAgICAgICAgIHNwcmludGYobGJ1ZiwgIiAlZCIsIGRh dGFbaV0pOworICAgICAgICAgICAgZm9yIChjcCA9IGxidWY7IChidWZsZW4gPiAwKSAmJiAoKmJ1 ZiA9ICpjcCsrKTsgYnVmKyspCisgICAgICAgICAgICAgICAgYnVmbGVuLS07CisgICAgICAgIH0K KyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit2b2lkCitjZmI2NF9wcmludHN1YihkYXRhLCBj bnQsIGJ1ZiwgYnVmbGVuKQorICAgIHVuc2lnbmVkIGNoYXIgKmRhdGEsICpidWY7CisgICAgaW50 IGNudCwgYnVmbGVuOworeworICAgIGZiNjRfcHJpbnRzdWIoZGF0YSwgY250LCBidWYsIGJ1Zmxl biwgIkNGQjY0Iik7Cit9CisKK3ZvaWQKK29mYjY0X3ByaW50c3ViKGRhdGEsIGNudCwgYnVmLCBi dWZsZW4pCisgICAgdW5zaWduZWQgY2hhciAqZGF0YSwgKmJ1ZjsKKyAgICBpbnQgY250LCBidWZs ZW47Cit7CisgICAgZmI2NF9wcmludHN1YihkYXRhLCBjbnQsIGJ1ZiwgYnVmbGVuLCAiT0ZCNjQi KTsKK30KKyNlbmRpZgorCit2b2lkCitmYjY0X3N0cmVhbV9pdihzZWVkLCBzdHApCisgICAgQmxv Y2sgc2VlZDsKKyAgICByZWdpc3RlciBzdHJ1Y3QgZGVzX3N0aW5mbyAqc3RwOworeworICAgIGlu dCByYz0wOworCisgICAgbWVtY3B5KHN0cC0+c3RyX2l2LCAgICAgc2VlZCwgc2l6ZW9mKEJsb2Nr KSk7CisgICAgbWVtY3B5KHN0cC0+c3RyX291dHB1dCwgc2VlZCwgc2l6ZW9mKEJsb2NrKSk7CisK KyAgICBtZW1zZXQoc3RwLT5zdHJfc2NoZWQsMCxzaXplb2YoU2NoZWR1bGUpKTsKKworICAgIGNr aGV4ZHVtcCgiZmI2NF9zdHJlYW1faXYiLHN0cC0+c3RyX2lrZXksOCk7CisKKyNpZm5kZWYgTUlU X0NVUlJFTlQKKyAgICByYyA9IGRlc19rZXlfc2NoZWQoc3RwLT5zdHJfaWtleSwgc3RwLT5zdHJf c2NoZWQpOworICAgIGlmICggcmMgPT0gLTEgKSB7CisgICAgICAgIHByaW50ZigiP0ludmFsaWQg REVTIGtleSBzcGVjaWZpZWQgZm9yIGVuY3J5cHRpb25cclxuIik7CisgICAgICAgIGRlYnVnKEYx MTAsImZiNjRfc3RyZWFtX2l2IiwKKyAgICAgICAgICAgICAgICJpbnZhbGlkIERFUyBLZXkgc3Bl Y2lmaWVkIGZvciBlbmNyeXB0aW9uIiwwKTsKKyAgICB9IGVsc2UgaWYgKCByYyA9PSAtMiApIHsK KyAgICAgICAgcHJpbnRmKCI/V2VhayBERVMga2V5IHNwZWNpZmllZCBmb3IgZW5jcnlwdGlvblxy XG4iKTsKKyAgICAgICAgZGVidWcoRjExMCwiZmI2NF9zdHJlYW1faXYiLAorICAgICAgICAgICAg ICAgIndlYWsgREVTIEtleSBzcGVjaWZpZWQgZm9yIGVuY3J5cHRpb24iLDApOworICAgIH0gZWxz ZSBpZiAoIHJjICE9IDAgKSB7CisgICAgICAgIHByaW50ZigiP0tleSBTY2hlZHVsZSBub3QgY3Jl YXRlZCBieSBlbmNyeXB0aW9uXHJcbiIpOworICAgICAgICBkZWJ1ZyhGMTEwLCJmYjY0X3N0cmVh bV9pdiIsCisgICAgICAgICAgICAgICAiS2V5IFNjaGVkdWxlIG5vdCBjcmVhdGVkIGJ5IGVuY3J5 cHRpb24iLDApOworICAgIH0KKyAgICBja2hleGR1bXAoImZiNjRfc3RyZWFtX2l2IHNjaGVkdWxl IixzdHAtPnN0cl9zY2hlZCw4KjE2KTsKKyNlbmRpZiAvKiBNSVRfQ1VSUkVOVCAqLworCisgICAg c3RwLT5zdHJfaW5kZXggPSBzaXplb2YoQmxvY2spOworfQorCit2b2lkCitmYjY0X3N0cmVhbV9r ZXkoa2V5LCBzdHApCisgICAgQmxvY2sga2V5OworICAgIHJlZ2lzdGVyIHN0cnVjdCBkZXNfc3Rp bmZvICpzdHA7Cit7CisgICAgaW50IHJjID0gMDsKKworI2lmZGVmIE1JVF9DVVJSRU5UCisgICAg bWVtY3B5KHN0cC0+c3RyX2tleWJ5dGVzLCBrZXksIHNpemVvZihCbG9jaykpOworICAgIHN0cC0+ c3RyX2tleS5sZW5ndGggPSA4OworICAgIHN0cC0+c3RyX2tleS5jb250ZW50cyA9IHN0cC0+c3Ry X2tleWJ5dGVzOworICAgIC8qIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoaXMgY29kZSB1c2Vz IGRlcyBlY2IgbW9kZSwgYnV0CisgICAgaXQgb25seSBldmVyIGRvZXMgb25lIGJsb2NrIGF0IGEg dGltZS4gIGNiYyB3aXRoIGEgemVybyBpdgorICAgIGlzIGlkZW50aWNhbCAqLworICAgIHN0cC0+ c3RyX2tleS5lbmN0eXBlID0gRU5DVFlQRV9ERVNfQ0JDX1JBVzsKKyNlbHNlIC8qIE1JVF9DVVJS RU5UICovCisgICAgbWVtY3B5KHN0cC0+c3RyX2lrZXksIGtleSwgc2l6ZW9mKEJsb2NrKSk7CisK KyAgICBtZW1zZXQoc3RwLT5zdHJfc2NoZWQsMCxzaXplb2YoU2NoZWR1bGUpKTsKKworICAgIGNr aGV4ZHVtcCgiZmI2NF9zdHJlYW1fa2V5IixrZXksOCk7CisKKyAgICByYyA9IGRlc19rZXlfc2No ZWQoa2V5LCBzdHAtPnN0cl9zY2hlZCk7CisgICAgaWYgKCByYyA9PSAtMSApIHsKKyAgICAgICAg cHJpbnRmKCI/SW52YWxpZCBERVMga2V5IHNwZWNpZmllZCBmb3IgZW5jcnlwdGlvblxyXG4iKTsK KyAgICAgICAgZGVidWcoRjExMCwiZmI2NF9zdHJlYW1fa2V5IiwKKyAgICAgICAgICAgICAgICJp bnZhbGlkIERFUyBLZXkgc3BlY2lmaWVkIGZvciBlbmNyeXB0aW9uIiwwKTsKKyAgICB9IGVsc2Ug aWYgKCByYyA9PSAtMiApIHsKKyAgICAgICAgcHJpbnRmKCI/V2VhayBERVMga2V5IHNwZWNpZmll ZCBmb3IgZW5jcnlwdGlvblxyXG4iKTsKKyAgICAgICAgZGVidWcoRjExMCwiZmI2NF9zdHJlYW1f a2V5IiwKKyAgICAgICAgICAgICAgICJ3ZWFrIERFUyBLZXkgc3BlY2lmaWVkIGZvciBlbmNyeXB0 aW9uIiwwKTsKKyAgICB9IGVsc2UgaWYgKCByYyAhPSAwICkgeworICAgICAgICBwcmludGYoIj9L ZXkgU2NoZWR1bGUgbm90IGNyZWF0ZWQgYnkgZW5jcnlwdGlvblxyXG4iKTsKKyAgICAgICAgZGVi dWcoRjExMCwiZmI2NF9zdHJlYW1fa2V5IiwKKyAgICAgICAgICAgICAgICJLZXkgU2NoZWR1bGUg bm90IGNyZWF0ZWQgYnkgZW5jcnlwdGlvbiIsMCk7CisgICAgfQorICAgIGNraGV4ZHVtcCgiZmI2 NF9zdHJlYW1fa2V5IHNjaGVkdWxlIixzdHAtPnN0cl9zY2hlZCw4KjE2KTsKKyNlbmRpZiAvKiBN SVRfQ1VSUkVOVCAqLworCisgICAgbWVtY3B5KHN0cC0+c3RyX291dHB1dCwgc3RwLT5zdHJfaXYs IHNpemVvZihCbG9jaykpOworCisgICAgc3RwLT5zdHJfaW5kZXggPSBzaXplb2YoQmxvY2spOwor fQorCisvKgorICogREVTIDY0IGJpdCBDaXBoZXIgRmVlZGJhY2sKKyAqCisgKiAgICAga2V5IC0t LT4rLS0tLS0rCisgKiAgICAgICAgICArLT58IERFUyB8LS0rCisgKiAgICAgICAgICB8ICArLS0t LS0rICB8CisgKiAgICAgICAgICB8ICAgICAgICAgICB2CisgKiAgSU5QVVQgLS0oLS0tLS0tLS0t PigrKSstLS0+IERBVEEKKyAqICAgICAgICAgIHwgICAgICAgICAgICAgfAorICogICAgICAgICAg Ky0tLS0tLS0tLS0tLS0rCisgKgorICoKKyAqIEdpdmVuOgorICogICAgICBpVjogSW5pdGlhbCB2 ZWN0b3IsIDY0IGJpdHMgKDggYnl0ZXMpIGxvbmcuCisgKiAgICAgIERuOiB0aGUgbnRoIGNodW5r IG9mIDY0IGJpdHMgKDggYnl0ZXMpIG9mIGRhdGEgdG8gZW5jcnlwdCAoZGVjcnlwdCkuCisgKiAg ICAgIE9uOiB0aGUgbnRoIGNodW5rIG9mIDY0IGJpdHMgKDggYnl0ZXMpIG9mIGVuY3J5cHRlZCAo ZGVjcnlwdGVkKSBvdXRwdXQuCisgKgorICogICAgICBWMCA9IERFUyhpViwga2V5KQorICogICAg ICBPbiA9IERuIF4gVm4KKyAqICAgICAgVihuKzEpID0gREVTKE9uLCBrZXkpCisgKi8KKwordm9p ZAorY2ZiNjRfZW5jcnlwdChzLCBjKQorICAgIHJlZ2lzdGVyIHVuc2lnbmVkIGNoYXIgKnM7Cisg ICAgaW50IGM7Cit7CisgICAgcmVnaXN0ZXIgc3RydWN0IGRlc19zdGluZm8gKnN0cCA9ICZkZXNf ZmJbQ0ZCXS5zdHJlYW1zW0RJUl9FTkNSWVBULTFdOworICAgIHJlZ2lzdGVyIGludCBpbmRleDsK KworICAgIGluZGV4ID0gc3RwLT5zdHJfaW5kZXg7CisgICAgd2hpbGUgKGMtLSA+IDApIHsKKyAg ICAgICAgaWYgKGluZGV4ID09IHNpemVvZihCbG9jaykpIHsKKyAgICAgICAgICAgIEJsb2NrIGI7 CisjaWZkZWYgTUlUX0NVUlJFTlQKKyAgICAgICAgICAgIGVjYl9lbmNyeXB0KHN0cCwgc3RwLT5z dHJfb3V0cHV0LCBiKTsKKyNlbHNlIC8qIE1JVF9DVVJSRU5UICovCisgICAgICAgICAgICBkZXNf ZWNiX2VuY3J5cHQoc3RwLT5zdHJfb3V0cHV0LCBiLCBzdHAtPnN0cl9zY2hlZCwgMSk7CisjZW5k aWYgLyogTUlUX0NVUlJFTlQgKi8KKyAgICAgICAgICAgIG1lbWNweShzdHAtPnN0cl9mZWVkLGIs c2l6ZW9mKEJsb2NrKSk7CisgICAgICAgICAgICBpbmRleCA9IDA7CisgICAgICAgIH0KKworICAg ICAgICAvKiBPbiBlbmNyeXB0aW9uLCB3ZSBzdG9yZSAoZmVlZCBeIGRhdGEpIHdoaWNoIGlzIGN5 cGhlciAqLworICAgICAgICAqcyA9IHN0cC0+c3RyX291dHB1dFtpbmRleF0gPSAoc3RwLT5zdHJf ZmVlZFtpbmRleF0gXiAqcyk7CisgICAgICAgIHMrKzsKKyAgICAgICAgaW5kZXgrKzsKKyAgICB9 CisgICAgc3RwLT5zdHJfaW5kZXggPSBpbmRleDsKK30KKworaW50CitjZmI2NF9kZWNyeXB0KGRh dGEpCisgICAgaW50IGRhdGE7Cit7CisgICAgcmVnaXN0ZXIgc3RydWN0IGRlc19zdGluZm8gKnN0 cCA9ICZkZXNfZmJbQ0ZCXS5zdHJlYW1zW0RJUl9ERUNSWVBULTFdOworICAgIGludCBpbmRleDsK KworICAgIGlmIChkYXRhID09IC0xKSB7CisgICAgICAgIC8qCisgICAgICAgICogQmFjayB1cCBv bmUgYnl0ZS4gIEl0IGlzIGFzc3VtZWQgdGhhdCB3ZSB3aWxsCisgICAgICAgICogbmV2ZXIgYmFj ayB1cCBtb3JlIHRoYW4gb25lIGJ5dGUuICBJZiB3ZSBkbywgdGhpcworICAgICAgICAqIG1heSBv ciBtYXkgbm90IHdvcmsuCisgICAgICAgICovCisgICAgICAgIGlmIChzdHAtPnN0cl9pbmRleCkK KyAgICAgICAgICAgIC0tc3RwLT5zdHJfaW5kZXg7CisgICAgICAgIHJldHVybigwKTsKKyAgICB9 CisKKyAgICBpbmRleCA9IHN0cC0+c3RyX2luZGV4Kys7CisgICAgaWYgKGluZGV4ID09IHNpemVv ZihCbG9jaykpIHsKKyAgICAgICAgQmxvY2sgYjsKKyNpZmRlZiBNSVRfQ1VSUkVOVAorICAgICAg ICBlY2JfZW5jcnlwdChzdHAsIHN0cC0+c3RyX291dHB1dCwgYik7CisjZWxzZSAvKiBNSVRfQ1VS UkVOVCAqLworICAgICAgICBkZXNfZWNiX2VuY3J5cHQoc3RwLT5zdHJfb3V0cHV0LCBiLCBzdHAt PnN0cl9zY2hlZCwgMSk7CisjZW5kaWYgLyogTUlUX0NVUlJFTlQgKi8KKyAgICAgICAgbWVtY3B5 KHN0cC0+c3RyX2ZlZWQsIGIsIHNpemVvZihCbG9jaykpOworICAgICAgICBzdHAtPnN0cl9pbmRl eCA9IDE7ICAgICAvKiBOZXh0IHRpbWUgd2lsbCBiZSAxICovCisgICAgICAgIGluZGV4ID0gMDsg ICAgICAgICAgICAgIC8qIEJ1dCBub3cgdXNlIDAgKi8KKyAgICB9CisKKyAgICAvKiBPbiBkZWNy eXB0aW9uIHdlIHN0b3JlIChkYXRhKSB3aGljaCBpcyBjeXBoZXIuICovCisgICAgc3RwLT5zdHJf b3V0cHV0W2luZGV4XSA9IGRhdGE7CisgICAgcmV0dXJuKGRhdGEgXiBzdHAtPnN0cl9mZWVkW2lu ZGV4XSk7Cit9CisKKy8qCisgKiBERVMgNjQgYml0IE91dHB1dCBGZWVkYmFjaworICoKKyAqIGtl eSAtLS0+Ky0tLS0tKworICogICAgICArLT58IERFUyB8LS0rCisgKiAgICAgIHwgICstLS0tLSsg IHwKKyAqICAgICAgKy0tLS0tLS0tLS0tKworICogICAgICAgICAgICAgICAgICB2CisgKiAgSU5Q VVQgLS0tLS0tLS0+KCspIC0tLS0+IERBVEEKKyAqCisgKiBHaXZlbjoKKyAqICAgICAgaVY6IElu aXRpYWwgdmVjdG9yLCA2NCBiaXRzICg4IGJ5dGVzKSBsb25nLgorICogICAgICBEbjogdGhlIG50 aCBjaHVuayBvZiA2NCBiaXRzICg4IGJ5dGVzKSBvZiBkYXRhIHRvIGVuY3J5cHQgKGRlY3J5cHQp LgorICogICAgICBPbjogdGhlIG50aCBjaHVuayBvZiA2NCBiaXRzICg4IGJ5dGVzKSBvZiBlbmNy eXB0ZWQgKGRlY3J5cHRlZCkgb3V0cHV0LgorICoKKyAqICAgICAgVjAgPSBERVMoaVYsIGtleSkK KyAqICAgICAgVihuKzEpID0gREVTKFZuLCBrZXkpCisgKiAgICAgIE9uID0gRG4gXiBWbgorICov Cit2b2lkCitvZmI2NF9lbmNyeXB0KHMsIGMpCisgICAgcmVnaXN0ZXIgdW5zaWduZWQgY2hhciAq czsKKyAgICBpbnQgYzsKK3sKKyAgICByZWdpc3RlciBzdHJ1Y3QgZGVzX3N0aW5mbyAqc3RwID0g JmRlc19mYltPRkJdLnN0cmVhbXNbRElSX0VOQ1JZUFQtMV07CisgICAgcmVnaXN0ZXIgaW50IGlu ZGV4OworCisgICAgaW5kZXggPSBzdHAtPnN0cl9pbmRleDsKKyAgICB3aGlsZSAoYy0tID4gMCkg eworICAgICAgICBpZiAoaW5kZXggPT0gc2l6ZW9mKEJsb2NrKSkgeworICAgICAgICAgICAgQmxv Y2sgYjsKKyNpZmRlZiBNSVRfQ1VSUkVOVAorICAgICAgICAgICAgZWNiX2VuY3J5cHQoc3RwLCBz dHAtPnN0cl9mZWVkLCBiKTsKKyNlbHNlIC8qIE1JVF9DVVJSRU5UICovCisgICAgICAgICAgICBk ZXNfZWNiX2VuY3J5cHQoc3RwLT5zdHJfZmVlZCwgYiwgc3RwLT5zdHJfc2NoZWQsIDEpOworI2Vu ZGlmIC8qIE1JVF9DVVJSRU5UICovCisgICAgICAgICAgICBtZW1jcHkoc3RwLT5zdHJfZmVlZCxi LHNpemVvZihCbG9jaykpOworICAgICAgICAgICAgaW5kZXggPSAwOworICAgICAgICB9CisgICAg ICAgICpzKysgXj0gc3RwLT5zdHJfZmVlZFtpbmRleF07CisgICAgICAgIGluZGV4Kys7CisgICAg fQorICAgIHN0cC0+c3RyX2luZGV4ID0gaW5kZXg7Cit9CisKK2ludAorb2ZiNjRfZGVjcnlwdChk YXRhKQorICAgIGludCBkYXRhOworeworICAgIHJlZ2lzdGVyIHN0cnVjdCBkZXNfc3RpbmZvICpz dHAgPSAmZGVzX2ZiW09GQl0uc3RyZWFtc1tESVJfREVDUllQVC0xXTsKKyAgICBpbnQgaW5kZXg7 CisKKyAgICBpZiAoZGF0YSA9PSAtMSkgeworICAgICAgICAvKgorICAgICAgICAqIEJhY2sgdXAg b25lIGJ5dGUuICBJdCBpcyBhc3N1bWVkIHRoYXQgd2Ugd2lsbAorICAgICAgICAqIG5ldmVyIGJh Y2sgdXAgbW9yZSB0aGFuIG9uZSBieXRlLiAgSWYgd2UgZG8sIHRoaXMKKyAgICAgICAgKiBtYXkg b3IgbWF5IG5vdCB3b3JrLgorICAgICAgICAqLworICAgICAgICBpZiAoc3RwLT5zdHJfaW5kZXgp CisgICAgICAgICAgICAtLXN0cC0+c3RyX2luZGV4OworICAgICAgICByZXR1cm4oMCk7CisgICAg fQorCisgICAgaW5kZXggPSBzdHAtPnN0cl9pbmRleCsrOworICAgIGlmIChpbmRleCA9PSBzaXpl b2YoQmxvY2spKSB7CisgICAgICAgIEJsb2NrIGI7CisjaWZkZWYgTUlUX0NVUlJFTlQKKyAgICAg ICAgZWNiX2VuY3J5cHQoc3RwLCBzdHAtPnN0cl9mZWVkLCBiKTsKKyNlbHNlIC8qIE1JVF9DVVJS RU5UICovCisgICAgICAgIGRlc19lY2JfZW5jcnlwdChzdHAtPnN0cl9mZWVkLCBiLCBzdHAtPnN0 cl9zY2hlZCwgMSk7CisjZW5kaWYgLyogTUlUX0NVUlJFTlQgKi8KKyAgICAgICAgbWVtY3B5KHN0 cC0+c3RyX2ZlZWQsIGIsIHNpemVvZihCbG9jaykpOworICAgICAgICBzdHAtPnN0cl9pbmRleCA9 IDE7ICAgICAvKiBOZXh0IHRpbWUgd2lsbCBiZSAxICovCisgICAgICAgIGluZGV4ID0gMDsgICAg ICAgICAgICAgIC8qIEJ1dCBub3cgdXNlIDAgKi8KKyAgICB9CisKKyAgICByZXR1cm4oZGF0YSBe IHN0cC0+c3RyX2ZlZWRbaW5kZXhdKTsKK30KKworCit2b2lkIGRlczNfZmI2NF9zdHJlYW1faXYg UCgoQmxvY2ssIHN0cnVjdCBkZXMzX3N0aW5mbyAqKSk7Cit2b2lkIGRlczNfZmI2NF9pbml0IFAo KHN0cnVjdCBkZXMzX2ZiICopKTsKK3N0YXRpYyBpbnQgZGVzM19mYjY0X3N0YXJ0IFAoKHN0cnVj dCBkZXMzX2ZiICosIGludCwgaW50KSk7CitpbnQgZGVzM19mYjY0X2lzIFAoKHVuc2lnbmVkIGNo YXIgKiwgaW50LCBzdHJ1Y3QgZGVzM19mYiAqKSk7CitpbnQgZGVzM19mYjY0X3JlcGx5IFAoKHVu c2lnbmVkIGNoYXIgKiwgaW50LCBzdHJ1Y3QgZGVzM19mYiAqKSk7CitzdGF0aWMgaW50IGRlczNf ZmI2NF9zZXNzaW9uIFAoKFNlc3Npb25fS2V5ICosIGludCwgc3RydWN0IGRlczNfZmIgKikpOwor dm9pZCBkZXMzX2ZiNjRfc3RyZWFtX2tleSBQKChCbG9jayAqLCBzdHJ1Y3QgZGVzM19zdGluZm8g KikpOworaW50IGRlczNfZmI2NF9rZXlpZCBQKChpbnQsIHVuc2lnbmVkIGNoYXIgKiwgaW50ICos IHN0cnVjdCBkZXMzX2ZiICopKTsKKwordm9pZAorZGVzM19jZmI2NF9pbml0KHNlcnZlcikKKyAg ICBpbnQgc2VydmVyOworeworICAgIGRlczNfZmI2NF9pbml0KCZkZXMzX2ZiW0NGQl0pOworICAg IGRlczNfZmJbQ0ZCXS5mYl9mZWVkWzRdID0gRU5DVFlQRV9ERVMzX0NGQjY0OworICAgIGRlczNf ZmJbQ0ZCXS5zdHJlYW1zWzBdLnN0cl9mbGFnc2hpZnQgPSBTSElGVF9WQUwoMCwgQ0ZCKTsKKyAg ICBkZXMzX2ZiW0NGQl0uc3RyZWFtc1sxXS5zdHJfZmxhZ3NoaWZ0ID0gU0hJRlRfVkFMKDEsIENG Qik7Cit9CisKK3ZvaWQKK2RlczNfb2ZiNjRfaW5pdChzZXJ2ZXIpCisgICAgaW50IHNlcnZlcjsK K3sKKyAgICBkZXMzX2ZiNjRfaW5pdCgmZGVzM19mYltPRkJdKTsKKyAgICBkZXMzX2ZiW09GQl0u ZmJfZmVlZFs0XSA9IEVOQ1RZUEVfREVTM19PRkI2NDsKKyAgICBkZXMzX2ZiW0NGQl0uc3RyZWFt c1swXS5zdHJfZmxhZ3NoaWZ0ID0gU0hJRlRfVkFMKDAsIE9GQik7CisgICAgZGVzM19mYltDRkJd LnN0cmVhbXNbMV0uc3RyX2ZsYWdzaGlmdCA9IFNISUZUX1ZBTCgxLCBPRkIpOworfQorCit2b2lk CitkZXMzX2ZiNjRfaW5pdChmYnApCisgICAgcmVnaXN0ZXIgc3RydWN0IGRlczNfZmIgKmZicDsK K3sKKyAgICBtZW1zZXQoKHZvaWQgKilmYnAsIDAsIHNpemVvZigqZmJwKSk7CisgICAgZmJwLT5z dGF0ZVswXSA9IGZicC0+c3RhdGVbMV0gPSB4RkFJTEVEOworICAgIGZicC0+ZmJfZmVlZFswXSA9 IElBQzsKKyAgICBmYnAtPmZiX2ZlZWRbMV0gPSBTQjsKKyAgICBmYnAtPmZiX2ZlZWRbMl0gPSBU RUxPUFRfRU5DUllQVElPTjsKKyAgICBmYnAtPmZiX2ZlZWRbM10gPSBFTkNSWVBUX0lTOworfQor CisvKgorICogUmV0dXJuczoKKyAqICAgICAgLTE6IHNvbWUgZXJyb3IuICBOZWdvdGlhdGlvbiBp cyBkb25lLCBlbmNyeXB0aW9uIG5vdCByZWFkeS4KKyAqICAgICAgIDA6IFN1Y2Nlc3NmdWwsIGlu aXRpYWwgbmVnb3RpYXRpb24gYWxsIGRvbmUuCisgKiAgICAgICAxOiBzdWNjZXNzZnVsLCBuZWdv dGlhdGlvbiBub3QgZG9uZSB5ZXQuCisgKiAgICAgICAyOiBOb3QgeWV0LiAgT3RoZXIgdGhpbmdz IChsaWtlIGdldHRpbmcgdGhlIGtleSBmcm9tCisgKiAgICAgICAgICBLZXJiZXJvcykgaGF2ZSB0 byBoYXBwZW4gYmVmb3JlIHdlIGNhbiBjb250aW51ZS4KKyAqLworaW50CitkZXMzX2NmYjY0X3N0 YXJ0KGRpciwgc2VydmVyKQorICAgIGludCBkaXI7CisgICAgaW50IHNlcnZlcjsKK3sKKyAgICBy ZXR1cm4oZGVzM19mYjY0X3N0YXJ0KCZkZXMzX2ZiW0NGQl0sIGRpciwgc2VydmVyKSk7Cit9Citp bnQKK2RlczNfb2ZiNjRfc3RhcnQoZGlyLCBzZXJ2ZXIpCisgICAgaW50IGRpcjsKKyAgICBpbnQg c2VydmVyOworeworICAgIHJldHVybihkZXMzX2ZiNjRfc3RhcnQoJmRlczNfZmJbT0ZCXSwgZGly LCBzZXJ2ZXIpKTsKK30KKworc3RhdGljIGludAorZGVzM19mYjY0X3N0YXJ0KGZicCwgZGlyLCBz ZXJ2ZXIpCisgICAgc3RydWN0IGRlczNfZmIgKmZicDsKKyAgICBpbnQgZGlyOworICAgIGludCBz ZXJ2ZXI7Cit7CisgICAgaW50IHg7CisgICAgdW5zaWduZWQgY2hhciAqcDsKKyAgICByZWdpc3Rl ciBpbnQgc3RhdGU7CisKKyAgICBzd2l0Y2ggKGRpcikgeworICAgIGNhc2UgRElSX0RFQ1JZUFQ6 CisgICAgICAgIC8qCisgICAgICAgICogVGhpcyBpcyBzaW1wbHkgYSByZXF1ZXN0IHRvIGhhdmUg dGhlIG90aGVyIHNpZGUKKyAgICAgICAgKiBzdGFydCBvdXRwdXQgKG91ciBpbnB1dCkuICBIZSB3 aWxsIG5lZ290aWF0ZSBhbgorICAgICAgICAqIElWIHNvIHdlIG5lZWQgbm90IGxvb2sgZm9yIGl0 LgorICAgICAgICAqLworICAgICAgICBzdGF0ZSA9IGZicC0+c3RhdGVbZGlyLTFdOworICAgICAg ICBpZiAoc3RhdGUgPT0geEZBSUxFRCkKKyAgICAgICAgICAgIHN0YXRlID0gSU5fUFJPR1JFU1M7 CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBESVJfRU5DUllQVDoKKyAgICAgICAgc3RhdGUg PSBmYnAtPnN0YXRlW2Rpci0xXTsKKyAgICAgICAgaWYgKHN0YXRlID09IHhGQUlMRUQpCisgICAg ICAgICAgICBzdGF0ZSA9IElOX1BST0dSRVNTOworICAgICAgICBlbHNlIGlmICgoc3RhdGUgJiBO T19TRU5EX0lWKSA9PSAwKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKCFWQUxJ REtFWShmYnAtPmtyYmRlc19rZXlbMF0pIHx8CisgICAgICAgICAgICAhVkFMSURLRVkoZmJwLT5r cmJkZXNfa2V5WzFdKSB8fAorICAgICAgICAgICAgIVZBTElES0VZKGZicC0+a3JiZGVzX2tleVsy XSkgKSB7CisgICAgICAgICAgICBmYnAtPm5lZWRfc3RhcnQgPSAxOworICAgICAgICAgICAgYnJl YWs7CisgICAgICAgIH0KKyAgICAgICAgc3RhdGUgJj0gfk5PX1NFTkRfSVY7CisgICAgICAgIHN0 YXRlIHw9IE5PX1JFQ1ZfSVY7CisgICAgICAgIC8qCisgICAgICAgICogQ3JlYXRlIGEgcmFuZG9t IGZlZWQgYW5kIHNlbmQgaXQgb3Zlci4KKyAgICAgICAgKi8KKyAgICAgICAgZGVzX25ld19yYW5k b21fa2V5KGZicC0+dGVtcF9mZWVkKTsKKyNpZmRlZiBMSUJERVMKKyAgICAgICAgZGVzX2VjYjNf ZW5jcnlwdChmYnAtPnRlbXBfZmVlZCwgZmJwLT50ZW1wX2ZlZWQsCisgICAgICAgICAgICAgICAg ICAgICAgICAgZmJwLT5rcmJkZXNfc2NoZWRbMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAg ZmJwLT5rcmJkZXNfc2NoZWRbMV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgZmJwLT5rcmJk ZXNfc2NoZWRbMl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgMSk7CisjZWxzZSAvKiBMSUJE RVMgKi8KKyAgICAgICAgZGVzX2VjYl9lbmNyeXB0KGZicC0+dGVtcF9mZWVkLCBmYnAtPnRlbXBf ZmVlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmYnAtPmtyYmRlc19zY2hlZFswXSwgMSk7 CisgICAgICAgIGRlc19lY2JfZW5jcnlwdChmYnAtPnRlbXBfZmVlZCwgZmJwLT50ZW1wX2ZlZWQs CisgICAgICAgICAgICAgICAgICAgICAgICAgZmJwLT5rcmJkZXNfc2NoZWRbMV0sIDApOworICAg ICAgICBkZXNfZWNiX2VuY3J5cHQoZmJwLT50ZW1wX2ZlZWQsIGZicC0+dGVtcF9mZWVkLAorICAg ICAgICAgICAgICAgICAgICAgICAgIGZicC0+a3JiZGVzX3NjaGVkWzJdLCAxKTsKKyNlbmRpZiAv KiBMSUJERVMgKi8KKworICAgICAgICBwID0gZmJwLT5mYl9mZWVkICsgMzsKKyAgICAgICAgKnAr KyA9IEVOQ1JZUFRfSVM7CisgICAgICAgIHArKzsKKyAgICAgICAgKnArKyA9IEZCNjRfSVY7Cisg ICAgICAgIGZvciAoeCA9IDA7IHggPCBzaXplb2YoQmxvY2spOyArK3gpIHsKKyAgICAgICAgICAg IGlmICgoICpwKysgPSBmYnAtPnRlbXBfZmVlZFt4XSkgPT0gSUFDKQorICAgICAgICAgICAgICAg ICpwKysgPSBJQUM7CisgICAgICAgIH0KKyAgICAgICAgKnArKyA9IElBQzsKKyAgICAgICAgKnAr KyA9IFNFOworCisgICAgICAgIGlmIChkZWJsb2cgfHwgdG5fZGViIHx8IGRlYnNlcykgeworICAg ICAgICAgICAgaW50IGk7CisgICAgICAgICAgICBzcHJpbnRmKHRuX21zZywKKyAgICAgICAgICAg ICAgICAgICAgICJURUxORVQgU0VOVCBTQiAlcyBJUyAlcyBGQjY0X0lWICIsCisgICAgICAgICAg ICAgICAgICAgICBURUxPUFQoZmJwLT5mYl9mZWVkWzJdKSwKKyAgICAgICAgICAgICAgICAgICAg IGVuY3R5cGVfbmFtZXNbZmJwLT5mYl9mZWVkWzRdXSk7IC8qIHNhZmUgKi8KKyAgICAgICAgICAg IHRuX2hleCgoQ0hBUiAqKXRuX21zZyxUTl9NU0dfTEVOLCZmYnAtPmZiX2ZlZWRbNl0sCisJCShw LWZicC0+ZmJfZmVlZCktMi02KTsKKyAgICAgICAgICAgIGNrc3RybmNhdCh0bl9tc2csIklBQyBT RSIsVE5fTVNHX0xFTik7CisgICAgICAgICAgICBkZWJ1ZyhGMTAwLHRuX21zZywiIiwwKTsKKyAg ICAgICAgICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKSB0bl9kZWJ1Zyh0bl9tc2cpOworICAgICAg ICB9CisjaWZkZWYgT1MyCisgICAgICAgIFJlcXVlc3RUZWxuZXRNdXRleCggU0VNX0lOREVGSU5J VEVfV0FJVCApOworI2VuZGlmCisgICAgICAgIHR0b2woZmJwLT5mYl9mZWVkLCBwIC0gZmJwLT5m Yl9mZWVkKTsKKyNpZmRlZiBPUzIKKyAgICAgICAgUmVsZWFzZVRlbG5ldE11dGV4KCk7CisjZW5k aWYKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuKHhGQUlMRUQp OworICAgIH0KKyAgICByZXR1cm4oZmJwLT5zdGF0ZVtkaXItMV0gPSBzdGF0ZSk7Cit9CisKKy8q CisgKiBSZXR1cm5zOgorICogICAgICAtMTogc29tZSBlcnJvci4gIE5lZ290aWF0aW9uIGlzIGRv bmUsIGVuY3J5cHRpb24gbm90IHJlYWR5LgorICogICAgICAgMDogU3VjY2Vzc2Z1bCwgaW5pdGlh bCBuZWdvdGlhdGlvbiBhbGwgZG9uZS4KKyAqICAgICAgIDE6IHN1Y2Nlc3NmdWwsIG5lZ290aWF0 aW9uIG5vdCBkb25lIHlldC4KKyAqLworaW50CitkZXMzX2NmYjY0X2lzKGRhdGEsIGNudCkKKyAg ICB1bnNpZ25lZCBjaGFyICpkYXRhOworICAgIGludCBjbnQ7Cit7CisgICAgcmV0dXJuKGRlczNf ZmI2NF9pcyhkYXRhLCBjbnQsICZkZXMzX2ZiW0NGQl0pKTsKK30KKworaW50CitkZXMzX29mYjY0 X2lzKGRhdGEsIGNudCkKKyAgICB1bnNpZ25lZCBjaGFyICpkYXRhOworICAgIGludCBjbnQ7Cit7 CisgICAgcmV0dXJuKGRlczNfZmI2NF9pcyhkYXRhLCBjbnQsICZkZXMzX2ZiW09GQl0pKTsKK30K KworaW50CitkZXMzX2ZiNjRfaXMoZGF0YSwgY250LCBmYnApCisgICAgdW5zaWduZWQgY2hhciAq ZGF0YTsKKyAgICBpbnQgY250OworICAgIHN0cnVjdCBkZXMzX2ZiICpmYnA7Cit7CisgICAgdW5z aWduZWQgY2hhciAqcDsKKyAgICByZWdpc3RlciBpbnQgc3RhdGUgPSBmYnAtPnN0YXRlW0RJUl9E RUNSWVBULTFdOworCisgICAgaWYgKGNudC0tIDwgMSkKKyAgICAgICAgZ290byBmYWlsdXJlOwor CisjaWZkZWYgQ0tfU1NMCisgICAgaWYgKCFURUxPUFRfU0IoVEVMT1BUX1NUQVJUX1RMUykuc3Rh cnRfdGxzLm1lX2ZvbGxvd3MpCisjZW5kaWYgLyogQ0tfU1NMICovCisgICAgc3dpdGNoICgqZGF0 YSsrKSB7CisgICAgY2FzZSBGQjY0X0lWOgorICAgICAgICBpZiAoY250ICE9IHNpemVvZihCbG9j aykpIHsKKyNpZmRlZiBERUJVRworICAgICAgICAgICAgaWYgKGVuY3J5cHRfZGVidWdfbW9kZSkK KyAgICAgICAgICAgICAgICBwcmludGYoIkRFUzNfRkI2NDogaW5pdGlhbCB2ZWN0b3IgZmFpbGVk IG9uIHNpemVcclxuIik7CisjZW5kaWYKKyAgICAgICAgICAgIHN0YXRlID0geEZBSUxFRDsKKyAg ICAgICAgICAgIGdvdG8gZmFpbHVyZTsKKyAgICAgICAgfQorCisjaWZkZWYgREVCVUcKKyAgICAg ICAgaWYgKGVuY3J5cHRfZGVidWdfbW9kZSkgeworICAgICAgICAgICAgcHJpbnRmKCJERVMzX0ZC NjQ6IGluaXRpYWwgdmVjdG9yIHJlY2VpdmVkXHJcbiIpOworICAgICAgICAgICAgcHJpbnRmKCJJ bml0aWFsaXppbmcgRGVjcnlwdCBzdHJlYW1cclxuIik7CisgICAgICAgIH0KKyNlbmRpZgorICAg ICAgICBkZXMzX2ZiNjRfc3RyZWFtX2l2KCh2b2lkICopZGF0YSwgJmZicC0+c3RyZWFtc1tESVJf REVDUllQVC0xXSk7CisKKyAgICAgICAgcCA9IGZicC0+ZmJfZmVlZCArIDM7CisgICAgICAgICpw KysgPSBFTkNSWVBUX1JFUExZOworICAgICAgICBwKys7CisgICAgICAgICpwKysgPSBGQjY0X0lW X09LOworICAgICAgICAqcCsrID0gSUFDOworICAgICAgICAqcCsrID0gU0U7CisKKyAgICAgICAg aWYgKGRlYmxvZyB8fCB0bl9kZWIgfHwgZGVic2VzKSB7CisgICAgICAgICAgICBpbnQgaTsKKyAg ICAgICAgICAgIHNwcmludGYodG5fbXNnLAorICAgICAgICAgICAgICAgICAgICAgIlRFTE5FVCBT RU5UIFNCICVzIFJFUExZICVzIEZCNjRfSVZfT0sgIiwKKyAgICAgICAgICAgICAgICAgICAgIFRF TE9QVChmYnAtPmZiX2ZlZWRbMl0pLAorICAgICAgICAgICAgICAgICAgICAgZW5jdHlwZV9uYW1l c1tmYnAtPmZiX2ZlZWRbNF1dKTsgLyogc2FmZSAqLworICAgICAgICAgICAgdG5faGV4KChDSEFS ICopdG5fbXNnLFROX01TR19MRU4sJmZicC0+ZmJfZmVlZFs2XSwKKwkJKHAtZmJwLT5mYl9mZWVk KS0yLTYpOworICAgICAgICAgICAgY2tzdHJuY2F0KHRuX21zZywiSUFDIFNFIixUTl9NU0dfTEVO KTsKKyAgICAgICAgICAgIGRlYnVnKEYxMDAsdG5fbXNnLCIiLDApOworICAgICAgICAgICAgaWYg KHRuX2RlYiB8fCBkZWJzZXMpIHRuX2RlYnVnKHRuX21zZyk7CisgICAgICAgIH0KKyNpZmRlZiBP UzIKKyAgICAgICAgUmVxdWVzdFRlbG5ldE11dGV4KCBTRU1fSU5ERUZJTklURV9XQUlUICk7Cisj ZW5kaWYKKyAgICAgICAgdHRvbChmYnAtPmZiX2ZlZWQsIHAgLSBmYnAtPmZiX2ZlZWQpOworI2lm ZGVmIE9TMgorICAgICAgICBSZWxlYXNlVGVsbmV0TXV0ZXgoKTsKKyNlbmRpZgorICAgICAgICBz dGF0ZSA9IElOX1BST0dSRVNTOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisjaWYg MAorICAgICAgICBpZiAoZW5jcnlwdF9kZWJ1Z19tb2RlKSB7CisgICAgICAgICAgICBwcmludGYo IlVua25vd24gb3B0aW9uIHR5cGU6ICVkXHJcbiIsICooZGF0YS0xKSk7CisgICAgICAgICAgICBw cmludGYoIlxyXG4iKTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgICAgIC8qIEZBTEwgVEhST1VH SCAqLworICAgICAgZmFpbHVyZToKKyAgICAgICAgLyoKKyAgICAgICAgKiBXZSBmYWlsZWQuICBT ZW5kIGFuIEZCNjRfSVZfQkFEIG9wdGlvbgorICAgICAgICAqIHRvIHRoZSBvdGhlciBzaWRlIHNv IGl0IHdpbGwga25vdyB0aGF0CisgICAgICAgICogdGhpbmdzIGZhaWxlZC4KKyAgICAgICAgKi8K KyAgICAgICAgcCA9IGZicC0+ZmJfZmVlZCArIDM7CisgICAgICAgICpwKysgPSBFTkNSWVBUX1JF UExZOworICAgICAgICBwKys7CisgICAgICAgICpwKysgPSBGQjY0X0lWX0JBRDsKKyAgICAgICAg KnArKyA9IElBQzsKKyAgICAgICAgKnArKyA9IFNFOworCisgICAgICAgIGlmIChkZWJsb2cgfHwg dG5fZGViIHx8IGRlYnNlcykgeworICAgICAgICAgICAgaW50IGk7CisgICAgICAgICAgICBzcHJp bnRmKHRuX21zZywKKyAgICAgICAgICAgICAgICAgICAgICJURUxORVQgU0VOVCBTQiAlcyBSRVBM WSAlcyBGQjY0X0lWX0JBRCAiLAorICAgICAgICAgICAgICAgICAgICAgVEVMT1BUKGZicC0+ZmJf ZmVlZFsyXSksCisgICAgICAgICAgICAgICAgICAgICBlbmN0eXBlX25hbWVzW2ZicC0+ZmJfZmVl ZFs0XV0pOyAvKiBzYWZlICovCisgICAgICAgICAgICB0bl9oZXgoKENIQVIgKil0bl9tc2csVE5f TVNHX0xFTiwmZmJwLT5mYl9mZWVkWzZdLAorCQkocC1mYnAtPmZiX2ZlZWQpLTItNik7CisgICAg ICAgICAgICBja3N0cm5jYXQodG5fbXNnLCJJQUMgU0UiLFROX01TR19MRU4pOworICAgICAgICAg ICAgZGVidWcoRjEwMCx0bl9tc2csIiIsMCk7CisgICAgICAgICAgICBpZiAodG5fZGViIHx8IGRl YnNlcykgdG5fZGVidWcodG5fbXNnKTsKKyAgICAgICAgfQorI2lmZGVmIE9TMgorICAgICAgICBS ZXF1ZXN0VGVsbmV0TXV0ZXgoIFNFTV9JTkRFRklOSVRFX1dBSVQgKTsKKyNlbmRpZgorICAgICAg ICB0dG9sKGZicC0+ZmJfZmVlZCwgcCAtIGZicC0+ZmJfZmVlZCk7CisjaWZkZWYgT1MyCisgICAg ICAgIFJlbGVhc2VUZWxuZXRNdXRleCgpOworI2VuZGlmCisgICAgICAgIGJyZWFrOworICAgIH0K KyAgICByZXR1cm4oZmJwLT5zdGF0ZVtESVJfREVDUllQVC0xXSA9IHN0YXRlKTsKK30KKworLyoK KyAqIFJldHVybnM6CisgKiAgICAgIC0xOiBzb21lIGVycm9yLiAgTmVnb3RpYXRpb24gaXMgZG9u ZSwgZW5jcnlwdGlvbiBub3QgcmVhZHkuCisgKiAgICAgICAwOiBTdWNjZXNzZnVsLCBpbml0aWFs IG5lZ290aWF0aW9uIGFsbCBkb25lLgorICogICAgICAgMTogc3VjY2Vzc2Z1bCwgbmVnb3RpYXRp b24gbm90IGRvbmUgeWV0LgorICovCitpbnQKK2RlczNfY2ZiNjRfcmVwbHkoZGF0YSwgY250KQor ICAgIHVuc2lnbmVkIGNoYXIgKmRhdGE7CisgICAgaW50IGNudDsKK3sKKyAgICByZXR1cm4oZGVz M19mYjY0X3JlcGx5KGRhdGEsIGNudCwgJmRlczNfZmJbQ0ZCXSkpOworfQoraW50CitkZXMzX29m YjY0X3JlcGx5KGRhdGEsIGNudCkKKyAgICB1bnNpZ25lZCBjaGFyICpkYXRhOworICAgIGludCBj bnQ7Cit7CisgICAgcmV0dXJuKGRlczNfZmI2NF9yZXBseShkYXRhLCBjbnQsICZkZXMzX2ZiW09G Ql0pKTsKK30KKworCitpbnQKK2RlczNfZmI2NF9yZXBseShkYXRhLCBjbnQsIGZicCkKKyAgICB1 bnNpZ25lZCBjaGFyICpkYXRhOworICAgIGludCBjbnQ7CisgICAgc3RydWN0IGRlczNfZmIgKmZi cDsKK3sKKyAgICByZWdpc3RlciBpbnQgc3RhdGUgPSBmYnAtPnN0YXRlW0RJUl9FTkNSWVBULTFd OworCisgICAgaWYgKGNudC0tIDwgMSkKKyAgICAgICAgZ290byBmYWlsdXJlOworCisgICAgc3dp dGNoICgqZGF0YSsrKSB7CisgICAgY2FzZSBGQjY0X0lWX09LOgorICAgICAgICBkZXMzX2ZiNjRf c3RyZWFtX2l2KGZicC0+dGVtcF9mZWVkLCAmZmJwLT5zdHJlYW1zW0RJUl9FTkNSWVBULTFdKTsK KyAgICAgICAgaWYgKHN0YXRlID09IHhGQUlMRUQpCisgICAgICAgICAgICBzdGF0ZSA9IElOX1BS T0dSRVNTOworICAgICAgICBzdGF0ZSAmPSB+Tk9fUkVDVl9JVjsKKyAgICAgICAgZW5jcnlwdF9z ZW5kX2tleWlkKERJUl9FTkNSWVBULCAodW5zaWduZWQgY2hhciAqKSJcMCIsIDEsIDEpOworICAg ICAgICBicmVhazsKKworICAgIGNhc2UgRkI2NF9JVl9CQUQ6CisgICAgICAgIG1lbXNldChmYnAt PnRlbXBfZmVlZCwgMCwgc2l6ZW9mKEJsb2NrKSk7CisgICAgICAgIGRlczNfZmI2NF9zdHJlYW1f aXYoZmJwLT50ZW1wX2ZlZWQsICZmYnAtPnN0cmVhbXNbRElSX0VOQ1JZUFQtMV0pOworICAgICAg ICBzdGF0ZSA9IHhGQUlMRUQ7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyNpZiAw CisgICAgICAgIGlmIChlbmNyeXB0X2RlYnVnX21vZGUpIHsKKyAgICAgICAgICAgIHByaW50Zigi VW5rbm93biBvcHRpb24gdHlwZTogJWRcclxuIiwgZGF0YVstMV0pOworICAgICAgICAgICAgcHJp bnRmKCJcclxuIik7CisgICAgICAgIH0KKyNlbmRpZgorICAgICAgICAvKiBGQUxMIFRIUk9VR0gg Ki8KKyAgICAgIGZhaWx1cmU6CisgICAgICAgIHN0YXRlID0geEZBSUxFRDsKKyAgICAgICAgYnJl YWs7CisgICAgfQorICAgIHJldHVybihmYnAtPnN0YXRlW0RJUl9FTkNSWVBULTFdID0gc3RhdGUp OworfQorCitpbnQKK2RlczNfY2ZiNjRfc2Vzc2lvbihrZXksIHNlcnZlcikKKyAgICBTZXNzaW9u X0tleSAqa2V5OworICAgIGludCBzZXJ2ZXI7Cit7CisgICAgcmV0dXJuKGRlczNfZmI2NF9zZXNz aW9uKGtleSwgc2VydmVyLCAmZGVzM19mYltDRkJdKSk7Cit9CisKK2ludAorZGVzM19vZmI2NF9z ZXNzaW9uKGtleSwgc2VydmVyKQorICAgIFNlc3Npb25fS2V5ICprZXk7CisgICAgaW50IHNlcnZl cjsKK3sKKyAgICByZXR1cm4oZGVzM19mYjY0X3Nlc3Npb24oa2V5LCBzZXJ2ZXIsICZkZXMzX2Zi W09GQl0pKTsKK30KKworc3RhdGljIGludAorZGVzM19mYjY0X3Nlc3Npb24oa2V5LCBzZXJ2ZXIs IGZicCkKKyAgICBTZXNzaW9uX0tleSAqa2V5OworICAgIGludCBzZXJ2ZXI7CisgICAgc3RydWN0 IGRlczNfZmIgKmZicDsKK3sKKyAgICBpbnQgcmM9MCxpPTA7CisgICAgaW50IGtleXMydXNlPTA7 CisgICAgc3RydWN0IGRlczNfc3RpbmZvICogc19zdHJlYW07CisgICAgc3RydWN0IGRlczNfc3Rp bmZvICogY19zdHJlYW07CisKKyAgICBpZihzZXJ2ZXIpIHsKKyAgICAgICAgc19zdHJlYW0gPSAm ZmJwLT5zdHJlYW1zW0RJUl9FTkNSWVBULTFdOworICAgICAgICBjX3N0cmVhbSA9ICZmYnAtPnN0 cmVhbXNbRElSX0RFQ1JZUFQtMV07CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBzX3N0cmVh bSA9ICZmYnAtPnN0cmVhbXNbRElSX0RFQ1JZUFQtMV07CisgICAgICAgIGNfc3RyZWFtID0gJmZi cC0+c3RyZWFtc1tESVJfRU5DUllQVC0xXTsKKyAgICB9CisKKyAgICBrZXlzMnVzZSA9IGtleS0+ bGVuZ3RoIC8gc2l6ZW9mKEJsb2NrKTsKKyAgICBpZiAoIWtleSB8fCAoa2V5LT50eXBlID09IFNL X0RFUykgfHwgKGtleXMydXNlIDwgMikpIHsKKyAgICAgICAgQ0hBUiBidWZbODBdOworICAgICAg ICBzcHJpbnRmKChjaGFyICopYnVmLCJDYW4ndCBzZXQgM0RFUyBzZXNzaW9uIGtleSAoJWQgPCAl ZCkiLAorICAgICAgICAgICAgICAgIGtleSA/IGtleS0+bGVuZ3RoIDogMCwgMiAqIChpbnQpc2l6 ZW9mKEJsb2NrKSk7CS8qIHNhZmUgKi8KKyNpZmRlZiBERUJVRworICAgICAgICBpZiAoZW5jcnlw dF9kZWJ1Z19tb2RlKQorICAgICAgICAgICAgcHJpbnRmKCIlc1xyXG4iLGJ1Zik7CisjZW5kaWYK KyAgICAgICAgZGVidWcoRjExMCwiZGVzM19mYjY0X3Nlc3Npb24iLGJ1ZiwwKTsKKyAgICAgICAg cmV0dXJuKC0xKTsKKyAgICB9CisKKyAgICBkZWJ1ZyhGMTExLCJkZXMzX2ZiNjRfc2Vzc2lvbiIs ImtleXMydXNlIixrZXlzMnVzZSk7CisgICAgLyogQ29tcHV0ZSB0aGUgZmlyc3Qgc2V0IG9mIGtl eXMgLyBrZXkgb3JkZXIgKi8KKyAgICBzd2l0Y2ggKCBrZXlzMnVzZSApIHsKKyAgICBjYXNlIDI6 CisgICAgICAgIG1lbWNweSgodm9pZCAqKWZicC0+a3JiZGVzX2tleVswXSwgKHZvaWQgKilrZXkt PmRhdGEsIHNpemVvZihCbG9jaykpOworICAgICAgICBtZW1jcHkoKHZvaWQgKikgZmJwLT5rcmJk ZXNfa2V5WzFdLCh2b2lkICopKGtleS0+ZGF0YSArIHNpemVvZihCbG9jaykpLAorICAgICAgICAg ICAgICAgICBzaXplb2YoQmxvY2spKTsKKyAgICAgICAgbWVtY3B5KCh2b2lkICopZmJwLT5rcmJk ZXNfa2V5WzJdLCAodm9pZCAqKWtleS0+ZGF0YSwgc2l6ZW9mKEJsb2NrKSk7CisgICAgICAgIGJy ZWFrOworICAgIGNhc2UgMzoKKyAgICBkZWZhdWx0OgorICAgICAgICBtZW1jcHkoKHZvaWQgKilm YnAtPmtyYmRlc19rZXlbMF0sICh2b2lkICopa2V5LT5kYXRhLCBzaXplb2YoQmxvY2spKTsKKyAg ICAgICAgbWVtY3B5KCh2b2lkICopIGZicC0+a3JiZGVzX2tleVsxXSwodm9pZCAqKShrZXktPmRh dGEgKyBzaXplb2YoQmxvY2spKSwKKyAgICAgICAgICAgICAgICAgc2l6ZW9mKEJsb2NrKSk7Cisg ICAgICAgIG1lbWNweSgodm9pZCAqKSBmYnAtPmtyYmRlc19rZXlbMl0sCisgICAgICAgICAgICAg ICAgICh2b2lkICopIChrZXktPmRhdGEgKyAyKnNpemVvZihCbG9jaykpLCBzaXplb2YoQmxvY2sp KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNraGV4ZHVtcCgiZGVzM19zZXNzaW9uX2tl eSBrZXktPmRhdGEiLGtleS0+ZGF0YSxzaXplb2YoQmxvY2spKTsKKyAgICBja2hleGR1bXAoImRl czNfc2Vzc2lvbl9rZXkgZmJwLT5rcmJkZXNfa2V5WzBdIiwKKyAgICAgICAgICAgIGZicC0+a3Ji ZGVzX2tleVswXSwKKyAgICAgICAgICAgIHNpemVvZihCbG9jaykKKyAgICAgICAgICAgICk7Cisg ICAgaWYgKGZicC0+b25jZSA9PSAwKSB7CisgICAgICAgIGRlc19zZXRfcmFuZG9tX2dlbmVyYXRv cl9zZWVkKGZicC0+a3JiZGVzX2tleVswXSk7CisgICAgICAgIGZicC0+b25jZSA9IDE7CisgICAg fQorCisgICAgZm9yICggaT0wO2k8MztpKysgKQorICAgICAgICBkZXNfZml4dXBfa2V5X3Bhcml0 eShmYnAtPmtyYmRlc19rZXlbaV0pOworICAgIGRlczNfZmI2NF9zdHJlYW1fa2V5KGZicC0+a3Ji ZGVzX2tleSwgc19zdHJlYW0pOworCisKKyAgICAvKiBDb21wdXRlIHRoZSBzZWNvbmQgc2V0IG9m IGtleXMgLyBrZXkgb3JkZXIgKi8KKyAgICBzd2l0Y2ggKCBrZXlzMnVzZSApIHsKKyAgICBjYXNl IDI6CisgICAgICAgIG1lbWNweSgodm9pZCAqKSBmYnAtPmtyYmRlc19rZXlbMF0sKHZvaWQgKiko a2V5LT5kYXRhICsgc2l6ZW9mKEJsb2NrKSksCisgICAgICAgICAgICAgICAgIHNpemVvZihCbG9j aykpOworICAgICAgICBtZW1jcHkoKHZvaWQgKilmYnAtPmtyYmRlc19rZXlbMV0sICh2b2lkICop a2V5LT5kYXRhLCBzaXplb2YoQmxvY2spKTsKKyAgICAgICAgbWVtY3B5KCh2b2lkICopIGZicC0+ a3JiZGVzX2tleVsyXSwodm9pZCAqKShrZXktPmRhdGEgKyBzaXplb2YoQmxvY2spKSwKKyAgICAg ICAgICAgICAgICAgc2l6ZW9mKEJsb2NrKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMzoK KyAgICAgICAgbWVtY3B5KCh2b2lkICopIGZicC0+a3JiZGVzX2tleVswXSwodm9pZCAqKShrZXkt PmRhdGEgKyBzaXplb2YoQmxvY2spKSwKKyAgICAgICAgICAgICAgICAgc2l6ZW9mKEJsb2NrKSk7 CisgICAgICAgIG1lbWNweSgodm9pZCAqKSBmYnAtPmtyYmRlc19rZXlbMV0sCisgICAgICAgICAg ICAgICAgICh2b2lkICopIChrZXktPmRhdGEgKyAyKnNpemVvZihCbG9jaykpLCBzaXplb2YoQmxv Y2spKTsKKyAgICAgICAgbWVtY3B5KCh2b2lkICopZmJwLT5rcmJkZXNfa2V5WzJdLCAodm9pZCAq KWtleS0+ZGF0YSwgc2l6ZW9mKEJsb2NrKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgNDoK KyAgICAgICAgbWVtY3B5KCh2b2lkICopIGZicC0+a3JiZGVzX2tleVswXSwodm9pZCAqKShrZXkt PmRhdGEgKyBzaXplb2YoQmxvY2spKSwKKyAgICAgICAgICAgICAgICAgc2l6ZW9mKEJsb2NrKSk7 CisgICAgICAgIG1lbWNweSgodm9pZCAqKSBmYnAtPmtyYmRlc19rZXlbMV0sCisgICAgICAgICAg ICAgICAgICh2b2lkICopIChrZXktPmRhdGEgKyAzKnNpemVvZihCbG9jaykpLCBzaXplb2YoQmxv Y2spKTsKKyAgICAgICAgbWVtY3B5KCh2b2lkICopZmJwLT5rcmJkZXNfa2V5WzJdLCAodm9pZCAq KWtleS0+ZGF0YSwgc2l6ZW9mKEJsb2NrKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgNToK KyAgICAgICAgbWVtY3B5KCh2b2lkICopIGZicC0+a3JiZGVzX2tleVswXSwodm9pZCAqKShrZXkt PmRhdGEgKyBzaXplb2YoQmxvY2spKSwKKyAgICAgICAgICAgICAgICAgc2l6ZW9mKEJsb2NrKSk7 CisgICAgICAgIG1lbWNweSgodm9pZCAqKSBmYnAtPmtyYmRlc19rZXlbMV0sCisgICAgICAgICAg ICAgICAgICh2b2lkICopIChrZXktPmRhdGEgKyAzKnNpemVvZihCbG9jaykpLCBzaXplb2YoQmxv Y2spKTsKKyAgICAgICAgbWVtY3B5KCh2b2lkICopZmJwLT5rcmJkZXNfa2V5WzJdLAorICAgICAg ICAgICAgICAgICAodm9pZCAqKShrZXktPmRhdGEgKyA0KnNpemVvZihCbG9jaykpLCBzaXplb2Yo QmxvY2spKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSA2OgorICAgICAgICBtZW1jcHkoKHZv aWQgKikgZmJwLT5rcmJkZXNfa2V5WzBdLAorICAgICAgICAgICAgICAgICAodm9pZCAqKSAoa2V5 LT5kYXRhICsgMypzaXplb2YoQmxvY2spKSwgc2l6ZW9mKEJsb2NrKSk7CisgICAgICAgIG1lbWNw eSgodm9pZCAqKWZicC0+a3JiZGVzX2tleVsxXSwKKyAgICAgICAgICAgICAgICAgKHZvaWQgKiko a2V5LT5kYXRhICsgNCpzaXplb2YoQmxvY2spKSwgc2l6ZW9mKEJsb2NrKSk7CisgICAgICAgIG1l bWNweSgodm9pZCAqKSBmYnAtPmtyYmRlc19rZXlbMl0sCisgICAgICAgICAgICAgICAgICh2b2lk ICopIChrZXktPmRhdGEgKyA1ICpzaXplb2YoQmxvY2spKSwgIHNpemVvZihCbG9jaykpOworICAg ICAgICBicmVhazsKKyAgICB9CisKKyAgICBmb3IgKCBpPTA7aTwzO2krKyApCisgICAgICAgIGRl c19maXh1cF9rZXlfcGFyaXR5KGZicC0+a3JiZGVzX2tleVtpXSk7CisgICAgZGVzM19mYjY0X3N0 cmVhbV9rZXkoZmJwLT5rcmJkZXNfa2V5LCBjX3N0cmVhbSk7CisKKyAgICAvKiBub3cgdXNlIHRo ZSBzZWNvbmQgc2V0IG9mIGtleXMgdG8gYnVpbGQgdGhlIGRlZmF1bHQgS2V5IFNjaGVkdWxlICov CisgICAgLyogd2hpY2ggaXMgdXNlZCBmb3IgZ2VuZXJhdGluZyB0aGUgSVYuICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAqLworICAgIGZvciAoIGk9MDtpPDM7aSsrICkgeworICAgICAgICBt ZW1zZXQoZmJwLT5rcmJkZXNfc2NoZWRbaV0sMCxzaXplb2YoU2NoZWR1bGUpKTsKKworICAgICAg ICByYyA9IGRlc19rZXlfc2NoZWQoZmJwLT5rcmJkZXNfa2V5W2ldLCBmYnAtPmtyYmRlc19zY2hl ZFtpXSk7CisgICAgICAgIGlmICggcmMgPT0gLTEgKSB7CisgICAgICAgICAgICBwcmludGYoIj9J bnZhbGlkIERFUyBrZXkgc3BlY2lmaWVkIGZvciBlbmNyeXB0aW9uIFtERVMzLCVzXVxyXG4iLAor ICAgICAgICAgICAgICAgICAgICBzZXJ2ZXI/InNlcnZlciI6ImNsaWVudCIpOworICAgICAgICAg ICAgZGVidWcoRjExMCwiZGVzM19mYjY0X3N0cmVhbV9pdiIsCisgICAgICAgICAgICAgICAgICAg ImludmFsaWQgREVTIEtleSBzcGVjaWZpZWQgZm9yIGVuY3J5cHRpb24iLDApOworICAgICAgICB9 IGVsc2UgaWYgKCByYyA9PSAtMiApIHsKKyAgICAgICAgICAgIHByaW50ZigiP1dlYWsgREVTIGtl eSBzcGVjaWZpZWQgZm9yIGVuY3J5cHRpb25cclxuIik7CisgICAgICAgICAgICBkZWJ1ZyhGMTEw LCJkZXMzX2ZiNjRfc3RyZWFtX2l2IiwKKyAgICAgICAgICAgICAgICAgICAid2VhayBERVMgS2V5 IHNwZWNpZmllZCBmb3IgZW5jcnlwdGlvbiIsMCk7CisgICAgICAgIH0gZWxzZSBpZiAoIHJjICE9 IDAgKSB7CisgICAgICAgICAgICBwcmludGYoIj9LZXkgU2NoZWR1bGUgbm90IGNyZWF0ZWQgYnkg ZW5jcnlwdGlvblxyXG4iKTsKKyAgICAgICAgICAgIGRlYnVnKEYxMTAsImRlczNfZmI2NF9zdHJl YW1faXYiLAorICAgICAgICAgICAgICAgICAgICJLZXkgU2NoZWR1bGUgbm90IGNyZWF0ZWQgYnkg ZW5jcnlwdGlvbiIsMCk7CisgICAgICAgIH0KKyAgICAgICAgY2toZXhkdW1wKCJkZXMzX2ZiNjRf c2Vzc2lvbl9rZXkgc2NoZWR1bGUiLGZicC0+a3JiZGVzX3NjaGVkW2ldLDgqMTYpOworICAgIH0K KyAgICAvKgorICAgICogTm93IGxvb2sgdG8gc2VlIGlmIGtyYmRlc19zdGFydCgpIHdhcyB3YXMg d2FpdGluZyBmb3IKKyAgICAqIHRoZSBrZXkgdG8gc2hvdyB1cC4gIElmIHNvLCBnbyBhaGVhZCBh biBjYWxsIGl0IG5vdworICAgICogdGhhdCB3ZSBoYXZlIHRoZSBrZXkuCisgICAgKi8KKyAgICBp ZiAoZmJwLT5uZWVkX3N0YXJ0KSB7CisgICAgICAgIGZicC0+bmVlZF9zdGFydCA9IDA7CisgICAg ICAgIGRlczNfZmI2NF9zdGFydChmYnAsIERJUl9FTkNSWVBULCBzZXJ2ZXIpOworICAgIH0KKyAg ICByZXR1cm4oMCk7Cit9CisKKy8qCisgKiBXZSBvbmx5IGFjY2VwdCBhIGtleWlkIG9mIDAuICBJ ZiB3ZSBnZXQgYSBrZXlpZCBvZgorICogMCwgdGhlbiBtYXJrIHRoZSBzdGF0ZSBhcyBTVUNDRVNT LgorICovCitpbnQKK2RlczNfY2ZiNjRfa2V5aWQoZGlyLCBrcCwgbGVucCkKKyAgICBpbnQgZGly LCAqbGVucDsKKyAgICB1bnNpZ25lZCBjaGFyICprcDsKK3sKKyAgICByZXR1cm4oZGVzM19mYjY0 X2tleWlkKGRpciwga3AsIGxlbnAsICZkZXMzX2ZiW0NGQl0pKTsKK30KKworaW50CitkZXMzX29m YjY0X2tleWlkKGRpciwga3AsIGxlbnApCisgICAgaW50IGRpciwgKmxlbnA7CisgICAgdW5zaWdu ZWQgY2hhciAqa3A7Cit7CisgICAgcmV0dXJuKGRlczNfZmI2NF9rZXlpZChkaXIsIGtwLCBsZW5w LCAmZGVzM19mYltPRkJdKSk7Cit9CisKK2ludAorZGVzM19mYjY0X2tleWlkKGRpciwga3AsIGxl bnAsIGZicCkKKyAgICBpbnQgZGlyLCAqbGVucDsKKyAgICB1bnNpZ25lZCBjaGFyICprcDsKKyAg ICBzdHJ1Y3QgZGVzM19mYiAqZmJwOworeworICAgIHJlZ2lzdGVyIGludCBzdGF0ZSA9IGZicC0+ c3RhdGVbZGlyLTFdOworCisgICAgaWYgKCpsZW5wICE9IDEgfHwgKCprcCAhPSAnXDAnKSkgewor ICAgICAgICAqbGVucCA9IDA7CisgICAgICAgIHJldHVybihzdGF0ZSk7CisgICAgfQorCisgICAg aWYgKHN0YXRlID09IHhGQUlMRUQpCisgICAgICAgIHN0YXRlID0gSU5fUFJPR1JFU1M7CisKKyAg ICBzdGF0ZSAmPSB+Tk9fS0VZSUQ7CisKKyAgICByZXR1cm4oZmJwLT5zdGF0ZVtkaXItMV0gPSBz dGF0ZSk7Cit9CisKKyNpZiAwCit2b2lkCitkZXMzX2ZiNjRfcHJpbnRzdWIoZGF0YSwgY250LCBi dWYsIGJ1ZmxlbiwgdHlwZSkKKyAgICB1bnNpZ25lZCBjaGFyICpkYXRhLCAqYnVmLCAqdHlwZTsK KyAgICBpbnQgY250LCBidWZsZW47Cit7CisgICAgY2hhciBsYnVmWzY0XTsKKyAgICByZWdpc3Rl ciBpbnQgaTsKKyAgICBjaGFyICpjcDsKKworICAgIGJ1ZltidWZsZW4tMV0gPSAnXDAnOyAgICAg ICAgICAgICAgIC8qIG1ha2Ugc3VyZSBpdCdzIE5VTEwgdGVybWluYXRlZCAqLworICAgIGJ1Zmxl biAtPSAxOworCisgICAgc3dpdGNoKGRhdGFbMl0pIHsKKyAgICBjYXNlIEZCNjRfSVY6CisgICAg ICAgIHNwcmludGYobGJ1ZiwgIiVzX0lWIiwgdHlwZSk7CisgICAgICAgIGNwID0gbGJ1ZjsKKyAg ICAgICAgZ290byBjb21tb247CisKKyAgICBjYXNlIEZCNjRfSVZfT0s6CisgICAgICAgIHNwcmlu dGYobGJ1ZiwgIiVzX0lWX09LIiwgdHlwZSk7CisgICAgICAgIGNwID0gbGJ1ZjsKKyAgICAgICAg Z290byBjb21tb247CisKKyAgICBjYXNlIEZCNjRfSVZfQkFEOgorICAgICAgICBzcHJpbnRmKGxi dWYsICIlc19JVl9CQUQiLCB0eXBlKTsKKyAgICAgICAgY3AgPSBsYnVmOworICAgICAgICBnb3Rv IGNvbW1vbjsKKworICAgIGNhc2UgRkI2NF9DSEFMTEVOR0U6CisgICAgICAgIHNwcmludGYobGJ1 ZiwgIiVzX0NIQUxMRU5HRSIsIHR5cGUpOworICAgICAgICBjcCA9IGxidWY7CisgICAgICAgIGdv dG8gY29tbW9uOworCisgICAgY2FzZSBGQjY0X1JFU1BPTlNFOgorICAgICAgICBzcHJpbnRmKGxi dWYsICIlc19SRVNQT05TRSIsIHR5cGUpOworICAgICAgICBjcCA9IGxidWY7CisgICAgICAgIGdv dG8gY29tbW9uOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgc3ByaW50ZihsYnVmLCAiICVkICh1 bmtub3duKSIsIGRhdGFbMl0pOworICAgICAgICBjcCA9IGxidWY7CisgICAgICBjb21tb246Cisg ICAgICAgIGZvciAoOyAoYnVmbGVuID4gMCkgJiYgKCpidWYgPSAqY3ArKyk7IGJ1ZisrKQorICAg ICAgICAgICAgYnVmbGVuLS07CisgICAgICAgIGZvciAoaSA9IDM7IGkgPCBjbnQ7IGkrKykgewor ICAgICAgICAgICAgc3ByaW50ZihsYnVmLCAiICVkIiwgZGF0YVtpXSk7CisgICAgICAgICAgICBm b3IgKGNwID0gbGJ1ZjsgKGJ1ZmxlbiA+IDApICYmICgqYnVmID0gKmNwKyspOyBidWYrKykKKyAg ICAgICAgICAgICAgICBidWZsZW4tLTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9 Cit9CisKK3ZvaWQKK2RlczNfY2ZiNjRfcHJpbnRzdWIoZGF0YSwgY250LCBidWYsIGJ1ZmxlbikK KyAgICB1bnNpZ25lZCBjaGFyICpkYXRhLCAqYnVmOworICAgIGludCBjbnQsIGJ1ZmxlbjsKK3sK KyAgICBkZXMzX2ZiNjRfcHJpbnRzdWIoZGF0YSwgY250LCBidWYsIGJ1ZmxlbiwgIkNGQjY0Iik7 Cit9CisKK3ZvaWQKK2RlczNfb2ZiNjRfcHJpbnRzdWIoZGF0YSwgY250LCBidWYsIGJ1ZmxlbikK KyAgICB1bnNpZ25lZCBjaGFyICpkYXRhLCAqYnVmOworICAgIGludCBjbnQsIGJ1ZmxlbjsKK3sK KyAgICBkZXMzX2ZiNjRfcHJpbnRzdWIoZGF0YSwgY250LCBidWYsIGJ1ZmxlbiwgIk9GQjY0Iik7 Cit9CisjZW5kaWYKKwordm9pZAorZGVzM19mYjY0X3N0cmVhbV9pdihzZWVkLCBzdHApCisgICAg QmxvY2sgc2VlZDsKKyAgICByZWdpc3RlciBzdHJ1Y3QgZGVzM19zdGluZm8gKnN0cDsKK3sKKyAg ICBpbnQgcmM9MCwgaSA9IDA7OworCisgICAgbWVtY3B5KHN0cC0+c3RyX2l2LCAgICAgc2VlZCwg c2l6ZW9mKEJsb2NrKSk7CisgICAgbWVtY3B5KHN0cC0+c3RyX291dHB1dCwgc2VlZCwgc2l6ZW9m KEJsb2NrKSk7CisgICAgZm9yICggaT0wO2k8MztpKysgKSB7CisgICAgICAgIG1lbXNldChzdHAt PnN0cl9zY2hlZFtpXSwwLHNpemVvZihTY2hlZHVsZSkpOworCisgICAgICAgIGNraGV4ZHVtcCgi ZGVzM19mYjY0X3N0cmVhbV9pdiIsc3RwLT5zdHJfaWtleVtpXSw4KTsKKworICAgICAgICByYyA9 IGRlc19rZXlfc2NoZWQoc3RwLT5zdHJfaWtleVtpXSwgc3RwLT5zdHJfc2NoZWRbaV0pOworICAg ICAgICBpZiAoIHJjID09IC0xICkgeworICAgICAgICAgICAgcHJpbnRmKCI/SW52YWxpZCBERVMg a2V5IHNwZWNpZmllZCBmb3IgZW5jcnlwdGlvbiBbREVTMyBpdl1cclxuIik7CisgICAgICAgICAg ICBkZWJ1ZyhGMTEwLCJkZXMzX2ZiNjRfc3RyZWFtX2l2IiwKKyAgICAgICAgICAgICAgICAgICAi aW52YWxpZCBERVMgS2V5IHNwZWNpZmllZCBmb3IgZW5jcnlwdGlvbiIsMCk7CisgICAgICAgIH0g ZWxzZSBpZiAoIHJjID09IC0yICkgeworICAgICAgICAgICAgcHJpbnRmKCI/V2VhayBERVMga2V5 IHNwZWNpZmllZCBmb3IgZW5jcnlwdGlvblxyXG4iKTsKKyAgICAgICAgICAgIGRlYnVnKEYxMTAs ImRlczNfZmI2NF9zdHJlYW1faXYiLAorICAgICAgICAgICAgICAgICAgICJ3ZWFrIERFUyBLZXkg c3BlY2lmaWVkIGZvciBlbmNyeXB0aW9uIiwwKTsKKyAgICAgICAgfSBlbHNlIGlmICggcmMgIT0g MCApIHsKKyAgICAgICAgICAgIHByaW50ZigiP0tleSBTY2hlZHVsZSBub3QgY3JlYXRlZCBieSBl bmNyeXB0aW9uXHJcbiIpOworICAgICAgICAgICAgZGVidWcoRjExMCwiZGVzM19mYjY0X3N0cmVh bV9pdiIsCisgICAgICAgICAgICAgICAgICAgIktleSBTY2hlZHVsZSBub3QgY3JlYXRlZCBieSBl bmNyeXB0aW9uIiwwKTsKKyAgICAgICAgfQorICAgICAgICBja2hleGR1bXAoImRlczNfZmI2NF9z dHJlYW1faXYgc2NoZWR1bGUiLHN0cC0+c3RyX3NjaGVkW2ldLDgqMTYpOworICAgIH0KKyAgICBz dHAtPnN0cl9pbmRleCA9IHNpemVvZihCbG9jayk7Cit9CisKK3ZvaWQKK2RlczNfZmI2NF9zdHJl YW1fa2V5KGtleSwgc3RwKQorICAgIEJsb2NrICoga2V5OworICAgIHJlZ2lzdGVyIHN0cnVjdCBk ZXMzX3N0aW5mbyAqc3RwOworeworICAgIGludCByYyA9IDAsIGkgPSAwOworCisgICAgZm9yICgg aT0wO2k8MztpKysgKSB7CisgICAgICAgIG1lbWNweShzdHAtPnN0cl9pa2V5W2ldLCBrZXlbaV0s IHNpemVvZihCbG9jaykpOworCisgICAgICAgIG1lbXNldChzdHAtPnN0cl9zY2hlZFtpXSwwLHNp emVvZihTY2hlZHVsZSkpOworCisgICAgICAgIGNraGV4ZHVtcCgiZGVzM19mYjY0X3N0cmVhbV9r ZXkiLGtleVtpXSw4KTsKKworICAgICAgICByYyA9IGRlc19rZXlfc2NoZWQoa2V5W2ldLCBzdHAt PnN0cl9zY2hlZFtpXSk7CisgICAgICAgIGlmICggcmMgPT0gLTEgKSB7CisgICAgICAgICAgICBw cmludGYoIj9JbnZhbGlkIERFUyBrZXkgc3BlY2lmaWVkIGZvciBlbmNyeXB0aW9uIFtERVMzIGtl eV1cclxuIik7CisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJkZXMzX2ZiNjRfc3RyZWFtX2tleSIs CisgICAgICAgICAgICAgICAgICAgImludmFsaWQgREVTIEtleSBzcGVjaWZpZWQgZm9yIGVuY3J5 cHRpb24iLDApOworICAgICAgICB9IGVsc2UgaWYgKCByYyA9PSAtMiApIHsKKyAgICAgICAgICAg IHByaW50ZigiP1dlYWsgREVTIGtleSBzcGVjaWZpZWQgZm9yIGVuY3J5cHRpb25cclxuIik7Cisg ICAgICAgICAgICBkZWJ1ZyhGMTEwLCJkZXMzX2ZiNjRfc3RyZWFtX2tleSIsCisgICAgICAgICAg ICAgICAgICAgIndlYWsgREVTIEtleSBzcGVjaWZpZWQgZm9yIGVuY3J5cHRpb24iLDApOworICAg ICAgICB9IGVsc2UgaWYgKCByYyAhPSAwICkgeworICAgICAgICAgICAgcHJpbnRmKCI/S2V5IFNj aGVkdWxlIG5vdCBjcmVhdGVkIGJ5IGVuY3J5cHRpb25cclxuIik7CisgICAgICAgICAgICBkZWJ1 ZyhGMTEwLCJkZXMzX2ZiNjRfc3RyZWFtX2tleSIsCisgICAgICAgICAgICAgICAgICAgIktleSBT Y2hlZHVsZSBub3QgY3JlYXRlZCBieSBlbmNyeXB0aW9uIiwwKTsKKyAgICAgICAgfQorICAgICAg ICBja2hleGR1bXAoImRlczNfZmI2NF9zdHJlYW1fa2V5IHNjaGVkdWxlIixzdHAtPnN0cl9zY2hl ZFtpXSw4KjE2KTsKKyAgICB9CisKKyAgICBtZW1jcHkoc3RwLT5zdHJfb3V0cHV0LCBzdHAtPnN0 cl9pdiwgc2l6ZW9mKEJsb2NrKSk7CisgICAgc3RwLT5zdHJfaW5kZXggPSBzaXplb2YoQmxvY2sp OworfQorCisvKgorICogREVTMyA2NCBiaXQgQ2lwaGVyIEZlZWRiYWNrCisgKgorICogICAgICAg ICAgICAgICAga2V5MSAgICAgICBrZXkyICAgICAgIGtleTMKKyAqICAgICAgICAgICAgICAgICB8 ICAgICAgICAgIHwgICAgICAgICAgfAorICogICAgICAgICAgICAgICAgIHYgICAgICAgICAgdiAg ICAgICAgICB2CisgKiAgICAgICAgICAgICArLS0tLS0tLSsgICstLS0tLS0tKyAgKy0tLS0tLS0r CisgKiAgICAgICAgICArLT58IERFUy1lIHwtPnwgREVTLWQgfC0+fCBERVMtZSB8LS0gKworICog ICAgICAgICAgfCAgKy0tLS0tLS0rICArLS0tLS0tLSsgICstLS0tLS0tKyAgIHwKKyAqICAgICAg ICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2CisgKiAgSU5QVVQgLS0o LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+KCspKy0tLT4gREFUQQorICogICAgICAg ICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAqICAgICAgICAgICst LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgKgorICoKKyAqIEdpdmVuOgor ICogICAgICBpVjogSW5pdGlhbCB2ZWN0b3IsIDY0IGJpdHMgKDggYnl0ZXMpIGxvbmcuCisgKiAg ICAgIERuOiB0aGUgbnRoIGNodW5rIG9mIDY0IGJpdHMgKDggYnl0ZXMpIG9mIGRhdGEgdG8gZW5j cnlwdCAoZGVjcnlwdCkuCisgKiAgICAgIE9uOiB0aGUgbnRoIGNodW5rIG9mIDY0IGJpdHMgKDgg Ynl0ZXMpIG9mIGVuY3J5cHRlZCAoZGVjcnlwdGVkKSBvdXRwdXQuCisgKgorICogICAgICBWMCA9 IERFUy1lKERFUy1kKERFUy1lKGlWLCBrZXkxKSxrZXkyKSxrZXkzKQorICogICAgICBPbiA9IERu IF4gVm4KKyAqICAgICAgVihuKzEpID0gREVTLWUoREVTLWQoREVTLWUoT24sIGtleTEpLGtleTIp LGtleTMpCisgKi8KKwordm9pZAorZGVzM19jZmI2NF9lbmNyeXB0KHMsIGMpCisgICAgcmVnaXN0 ZXIgdW5zaWduZWQgY2hhciAqczsKKyAgICBpbnQgYzsKK3sKKyAgICByZWdpc3RlciBzdHJ1Y3Qg ZGVzM19zdGluZm8gKnN0cCA9ICZkZXMzX2ZiW0NGQl0uc3RyZWFtc1tESVJfRU5DUllQVC0xXTsK KyAgICByZWdpc3RlciBpbnQgaW5kZXg7CisKKyAgICBpbmRleCA9IHN0cC0+c3RyX2luZGV4Owor ICAgIHdoaWxlIChjLS0gPiAwKSB7CisgICAgICAgIGlmIChpbmRleCA9PSBzaXplb2YoQmxvY2sp KSB7CisgICAgICAgICAgICBCbG9jayBiOworI2lmZGVmIExJQkRFUworICAgICAgICAgICAgZGVz X2VjYjNfZW5jcnlwdChzdHAtPnN0cl9vdXRwdXQsIGIsIHN0cC0+c3RyX3NjaGVkWzBdLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RwLT5zdHJfc2NoZWRbMV0sIHN0cC0+c3RyX3Nj aGVkWzJdLCAxKTsKKyNlbHNlIC8qIExJQkRFUyAqLworICAgICAgICAgICAgZGVzX2VjYl9lbmNy eXB0KHN0cC0+c3RyX291dHB1dCwgYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rw LT5zdHJfc2NoZWRbMF0sIDEpOworICAgICAgICAgICAgZGVzX2VjYl9lbmNyeXB0KHN0cC0+c3Ry X291dHB1dCwgYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RwLT5zdHJfc2NoZWRb MV0sIDApOworICAgICAgICAgICAgZGVzX2VjYl9lbmNyeXB0KHN0cC0+c3RyX291dHB1dCwgYiwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RwLT5zdHJfc2NoZWRbMl0sIDEpOworI2Vu ZGlmIC8qIExJQkRFUyAqLworICAgICAgICAgICAgbWVtY3B5KHN0cC0+c3RyX2ZlZWQsYixzaXpl b2YoQmxvY2spKTsKKyAgICAgICAgICAgIGluZGV4ID0gMDsKKyAgICAgICAgfQorCisgICAgICAg IC8qIE9uIGVuY3J5cHRpb24sIHdlIHN0b3JlIChmZWVkIF4gZGF0YSkgd2hpY2ggaXMgY3lwaGVy ICovCisgICAgICAgICpzID0gc3RwLT5zdHJfb3V0cHV0W2luZGV4XSA9IChzdHAtPnN0cl9mZWVk W2luZGV4XSBeICpzKTsKKyAgICAgICAgcysrOworICAgICAgICBpbmRleCsrOworICAgIH0KKyAg ICBzdHAtPnN0cl9pbmRleCA9IGluZGV4OworfQorCitpbnQKK2RlczNfY2ZiNjRfZGVjcnlwdChk YXRhKQorICAgIGludCBkYXRhOworeworICAgIHJlZ2lzdGVyIHN0cnVjdCBkZXMzX3N0aW5mbyAq c3RwID0gJmRlczNfZmJbQ0ZCXS5zdHJlYW1zW0RJUl9ERUNSWVBULTFdOworICAgIGludCBpbmRl eDsKKworICAgIGlmIChkYXRhID09IC0xKSB7CisgICAgICAgIC8qCisgICAgICAgICogQmFjayB1 cCBvbmUgYnl0ZS4gIEl0IGlzIGFzc3VtZWQgdGhhdCB3ZSB3aWxsCisgICAgICAgICogbmV2ZXIg YmFjayB1cCBtb3JlIHRoYW4gb25lIGJ5dGUuICBJZiB3ZSBkbywgdGhpcworICAgICAgICAqIG1h eSBvciBtYXkgbm90IHdvcmsuCisgICAgICAgICovCisgICAgICAgIGlmIChzdHAtPnN0cl9pbmRl eCkKKyAgICAgICAgICAgIC0tc3RwLT5zdHJfaW5kZXg7CisgICAgICAgIHJldHVybigwKTsKKyAg ICB9CisKKyAgICBpbmRleCA9IHN0cC0+c3RyX2luZGV4Kys7CisgICAgaWYgKGluZGV4ID09IHNp emVvZihCbG9jaykpIHsKKyAgICAgICAgQmxvY2sgYjsKKyNpZmRlZiBMSUJERVMKKyAgICAgICAg ZGVzX2VjYjNfZW5jcnlwdChzdHAtPnN0cl9vdXRwdXQsIGIsIHN0cC0+c3RyX3NjaGVkWzBdLAor ICAgICAgICAgICAgICAgICAgICAgICAgICBzdHAtPnN0cl9zY2hlZFsxXSwgc3RwLT5zdHJfc2No ZWRbMl0sIDEpOworI2Vsc2UgLyogTElCREVTICovCisgICAgICAgICAgICBkZXNfZWNiX2VuY3J5 cHQoc3RwLT5zdHJfb3V0cHV0LCBiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHAt PnN0cl9zY2hlZFswXSwgMSk7CisgICAgICAgICAgICBkZXNfZWNiX2VuY3J5cHQoc3RwLT5zdHJf b3V0cHV0LCBiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHAtPnN0cl9zY2hlZFsx XSwgMCk7CisgICAgICAgICAgICBkZXNfZWNiX2VuY3J5cHQoc3RwLT5zdHJfb3V0cHV0LCBiLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHAtPnN0cl9zY2hlZFsyXSwgMSk7CisjZW5k aWYgLyogTElCREVTICovCisgICAgICAgIG1lbWNweShzdHAtPnN0cl9mZWVkLCBiLCBzaXplb2Yo QmxvY2spKTsKKyAgICAgICAgc3RwLT5zdHJfaW5kZXggPSAxOyAgICAgLyogTmV4dCB0aW1lIHdp bGwgYmUgMSAqLworICAgICAgICBpbmRleCA9IDA7ICAgICAgICAgICAgICAvKiBCdXQgbm93IHVz ZSAwICovCisgICAgfQorCisgICAgLyogT24gZGVjcnlwdGlvbiB3ZSBzdG9yZSAoZGF0YSkgd2hp Y2ggaXMgY3lwaGVyLiAqLworICAgIHN0cC0+c3RyX291dHB1dFtpbmRleF0gPSBkYXRhOworICAg IHJldHVybihkYXRhIF4gc3RwLT5zdHJfZmVlZFtpbmRleF0pOworfQorCisvKgorICogREVTMyA2 NCBiaXQgT3V0cHV0IEZlZWRiYWNrCisgKgorICoKKyAqICAgICAgICAgICAgICAgIGtleTEgICAg ICAga2V5MiAgICAgICBrZXkzCisgKiAgICAgICAgICAgICAgICAgfCAgICAgICAgICB8ICAgICAg ICAgIHwKKyAqICAgICAgICAgICAgICAgICB2ICAgICAgICAgIHYgICAgICAgICAgdgorICogICAg ICAgICAgICAgKy0tLS0tLS0rICArLS0tLS0tLSsgICstLS0tLS0tKworICogICAgICAgICAgKy0+ fCBERVMtZSB8LT58IERFUy1kIHwtPnwgREVTLWUgfC0tICsKKyAqICAgICAgICAgIHwgICstLS0t LS0tKyAgKy0tLS0tLS0rICArLS0tLS0tLSsgICB8CisgKiAgICAgICAgICArLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHYKKyAqICBJTlBVVCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tPigrKSAtLS0tPiBEQVRBCisgKgorICogR2l2ZW46CisgKiAgICAgIGlWOiBJ bml0aWFsIHZlY3RvciwgNjQgYml0cyAoOCBieXRlcykgbG9uZy4KKyAqICAgICAgRG46IHRoZSBu dGggY2h1bmsgb2YgNjQgYml0cyAoOCBieXRlcykgb2YgZGF0YSB0byBlbmNyeXB0IChkZWNyeXB0 KS4KKyAqICAgICAgT246IHRoZSBudGggY2h1bmsgb2YgNjQgYml0cyAoOCBieXRlcykgb2YgZW5j cnlwdGVkIChkZWNyeXB0ZWQpIG91dHB1dC4KKyAqCisgKiAgICAgIFYwID0gREVTLWUoREVTLWQo REVTLWUoaVYsIGtleTEpLGtleTIpLGtleTMpCisgKiAgICAgIFYobisxKSA9IERFUy1lKERFUy1k KERFUy1lKFZuLCBrZXkxKSxrZXkyKSxrZXkzKQorICogICAgICBPbiA9IERuIF4gVm4KKyAqLwor dm9pZAorZGVzM19vZmI2NF9lbmNyeXB0KHMsIGMpCisgICAgcmVnaXN0ZXIgdW5zaWduZWQgY2hh ciAqczsKKyAgICBpbnQgYzsKK3sKKyAgICByZWdpc3RlciBzdHJ1Y3QgZGVzM19zdGluZm8gKnN0 cCA9ICZkZXMzX2ZiW09GQl0uc3RyZWFtc1tESVJfRU5DUllQVC0xXTsKKyAgICByZWdpc3RlciBp bnQgaW5kZXg7CisKKyAgICBpbmRleCA9IHN0cC0+c3RyX2luZGV4OworICAgIHdoaWxlIChjLS0g PiAwKSB7CisgICAgICAgIGlmIChpbmRleCA9PSBzaXplb2YoQmxvY2spKSB7CisgICAgICAgICAg ICBCbG9jayBiOworI2lmZGVmIExJQkRFUworICAgICAgICAgICAgZGVzX2VjYjNfZW5jcnlwdChz dHAtPnN0cl9mZWVkLCBiLCBzdHAtPnN0cl9zY2hlZFswXSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc3RwLT5zdHJfc2NoZWRbMV0sIHN0cC0+c3RyX3NjaGVkWzJdLCAxKTsKKyNlbHNl IC8qIExJQkRFUyAqLworICAgICAgICAgICAgZGVzX2VjYl9lbmNyeXB0KHN0cC0+c3RyX291dHB1 dCwgYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RwLT5zdHJfc2NoZWRbMF0sIDEp OworICAgICAgICAgICAgZGVzX2VjYl9lbmNyeXB0KHN0cC0+c3RyX291dHB1dCwgYiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc3RwLT5zdHJfc2NoZWRbMV0sIDApOworICAgICAgICAg ICAgZGVzX2VjYl9lbmNyeXB0KHN0cC0+c3RyX291dHB1dCwgYiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc3RwLT5zdHJfc2NoZWRbMl0sIDEpOworI2VuZGlmIC8qIExJQkRFUyAqLwor ICAgICAgICAgICAgbWVtY3B5KHN0cC0+c3RyX2ZlZWQsYixzaXplb2YoQmxvY2spKTsKKyAgICAg ICAgICAgIGluZGV4ID0gMDsKKyAgICAgICAgfQorICAgICAgICAqcysrIF49IHN0cC0+c3RyX2Zl ZWRbaW5kZXhdOworICAgICAgICBpbmRleCsrOworICAgIH0KKyAgICBzdHAtPnN0cl9pbmRleCA9 IGluZGV4OworfQorCitpbnQKK2RlczNfb2ZiNjRfZGVjcnlwdChkYXRhKQorICAgIGludCBkYXRh OworeworICAgIHJlZ2lzdGVyIHN0cnVjdCBkZXMzX3N0aW5mbyAqc3RwID0gJmRlczNfZmJbT0ZC XS5zdHJlYW1zW0RJUl9ERUNSWVBULTFdOworICAgIGludCBpbmRleDsKKworICAgIGlmIChkYXRh ID09IC0xKSB7CisgICAgICAgIC8qCisgICAgICAgICogQmFjayB1cCBvbmUgYnl0ZS4gIEl0IGlz IGFzc3VtZWQgdGhhdCB3ZSB3aWxsCisgICAgICAgICogbmV2ZXIgYmFjayB1cCBtb3JlIHRoYW4g b25lIGJ5dGUuICBJZiB3ZSBkbywgdGhpcworICAgICAgICAqIG1heSBvciBtYXkgbm90IHdvcmsu CisgICAgICAgICovCisgICAgICAgIGlmIChzdHAtPnN0cl9pbmRleCkKKyAgICAgICAgICAgIC0t c3RwLT5zdHJfaW5kZXg7CisgICAgICAgIHJldHVybigwKTsKKyAgICB9CisKKyAgICBpbmRleCA9 IHN0cC0+c3RyX2luZGV4Kys7CisgICAgaWYgKGluZGV4ID09IHNpemVvZihCbG9jaykpIHsKKyAg ICAgICAgQmxvY2sgYjsKKyNpZmRlZiBMSUJERVMKKyAgICAgICAgZGVzX2VjYjNfZW5jcnlwdChz dHAtPnN0cl9mZWVkLCBiLCBzdHAtPnN0cl9zY2hlZFswXSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgc3RwLT5zdHJfc2NoZWRbMV0sIHN0cC0+c3RyX3NjaGVkWzJdLCAxKTsKKyNlbHNlIC8q IExJQkRFUyAqLworICAgICAgICAgICAgZGVzX2VjYl9lbmNyeXB0KHN0cC0+c3RyX291dHB1dCwg YiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RwLT5zdHJfc2NoZWRbMF0sIDEpOwor ICAgICAgICAgICAgZGVzX2VjYl9lbmNyeXB0KHN0cC0+c3RyX291dHB1dCwgYiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc3RwLT5zdHJfc2NoZWRbMV0sIDApOworICAgICAgICAgICAg ZGVzX2VjYl9lbmNyeXB0KHN0cC0+c3RyX291dHB1dCwgYiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc3RwLT5zdHJfc2NoZWRbMl0sIDEpOworI2VuZGlmIC8qIExJQkRFUyAqLworICAg ICAgICBtZW1jcHkoc3RwLT5zdHJfZmVlZCwgYiwgc2l6ZW9mKEJsb2NrKSk7CisgICAgICAgIHN0 cC0+c3RyX2luZGV4ID0gMTsgICAgIC8qIE5leHQgdGltZSB3aWxsIGJlIDEgKi8KKyAgICAgICAg aW5kZXggPSAwOyAgICAgICAgICAgICAgLyogQnV0IG5vdyB1c2UgMCAqLworICAgIH0KKworICAg IHJldHVybihkYXRhIF4gc3RwLT5zdHJfZmVlZFtpbmRleF0pOworfQorI2VuZGlmIC8qIENLX0RF UyAqLworCisjaWZkZWYgQ0tfQ0FTVAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTEsIDE5OTMK KyAqICAgICAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFs bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92 aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJp YWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAqICAgIG11 c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAqICAgICAgVGhpcyBw cm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgVW5pdmVyc2l0eSBvZgor ICogICAgICBDYWxpZm9ybmlhLCBCZXJrZWxleSBhbmQgaXRzIGNvbnRyaWJ1dG9ycy4KKyAqIDQu IE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMg Y29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv ZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMg cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE RUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkg RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5P IEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZP UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP UiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1Mg T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBI T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g Q09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0Ug T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgor ICogU1VDSCBEQU1BR0UuCisgKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMTk5NyBTdGFuZm9y ZCBVbml2ZXJzaXR5CisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlz dHJpYnV0ZSwgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZSBhbmQKKyAqIGl0cyBkb2N1bWVudGF0aW9u IGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQK KyAqIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2VzIGFuZCB0aGlzIHBlcm1pc3Npb24g bm90aWNlIGFwcGVhciBpbgorICogYWxsIGNvcGllcyBvZiB0aGUgc29mdHdhcmUgYW5kIHJlbGF0 ZWQgZG9jdW1lbnRhdGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTLUlT IiBBTkQgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MsIElNUExJRUQg T1IgT1RIRVJXSVNFLCBJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkKKyAqIFdBUlJB TlRZIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RS4KKyAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBTVEFORk9SRCBCRSBMSUFCTEUgRk9SIEFOWSBT UEVDSUFMLCBJTkNJREVOVEFMLAorICogSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT IE9GIEFOWSBLSU5ELCBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSCisgKiBSRVNVTFRJTkcgRlJP TSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIE9SIE5PVCBBRFZJU0VEIE9G CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgREFNQUdFLCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC SUxJVFksIEFSSVNJTkcgT1VUCisgKiBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBP UiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5o PgorI2lmZGVmICBfX1NURENfXworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisKKy8qCisg KiBjYXN0LmgKKyAqIEF1dGhvcjogVG9tIFd1CisgKgorICogVHlwZSBhbmQgZnVuY3Rpb24gZGVj bGFyYXRpb25zIGZvciBDQVNULgorICovCisKKyNpZm5kZWYgX0NBU1RfSF8KKyNkZWZpbmUgX0NB U1RfSF8KKworI2lmbmRlZiBQCisjaWZkZWYgX19TVERDX18KKyNkZWZpbmUgUCh4KSB4CisjZWxz ZQorI2RlZmluZSBQKHgpICgpCisjZW5kaWYgLyogX19TVERDX18gKi8KKyNlbmRpZiAvKiBQICov CisKKyNpZm5kZWYgTElUVExFX0VORElBTgorI2lmbmRlZiBCSUdfRU5ESUFOCisjaWZuZGVmIFdP UkRTX0JJR0VORElBTgorI2RlZmluZSBMSVRUTEVfRU5ESUFOIDEKKyNlbmRpZiAvKiBXT1JEU19C SUdFTkRJQU4gKi8KKyNlbmRpZiAvKiBCSUdfRU5ESUFOICovCisjZW5kaWYgLyogTElUVExFX0VO RElBTiAqLworCit0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50MzI7ICAgIC8qIE11c3QgYmUgMzIg Yml0cyAqLwordHlwZWRlZiB1aW50MzIgKiB1aW50MzJwOwordHlwZWRlZiB1bnNpZ25lZCBjaGFy IHVpbnQ4OwordHlwZWRlZiB1aW50OCAqIHVpbnQ4cDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBz dHJ1Y3QgQ2FzdFN1YmtleVBhaXIgeworICAgIHVpbnQzMiBLbTsKKyAgICB1aW50MzIgS3I7Cisg IH0gS1sxNl07CisgIGludCBrc2l6ZTsKK30gQ2FzdEtleVNjaGVkOworCisvKgorICogY2FzdCpf a2V5X3NjaGVkKHNjaGVkdWxlLCBrZXkpCisgKgorICogSW5pdGlhbGl6ZXMgdGhlIENBU1Qga2V5 IHNjaGVkdWxlICJzY2hlZHVsZSIgYWNjb3JkaW5nIHRvIHRoZSBnaXZlbiBrZXkuCisgKiBUaGUg ZGlmZmVyZW50IHNldHVwIHJvdXRpbmVzIGFjY2VwdCBkaWZmZXJlbnQgbGVuZ3RoIGtleXM6Cisg KgorICogICBja19jYXN0NV80MF9rZXlfc2NoZWQ6IDQwLWJpdC81LWJ5dGUgKDEyIHJvdW5kKSBr ZXlzCisgKiAgIGNrX2Nhc3Q1XzY0X2tleV9zY2hlZDogNjQtYml0LzgtYnl0ZSAoMTIgcm91bmQp IGtleXMKKyAqICAgY2tfY2FzdDVfODBfa2V5X3NjaGVkOiA4MC1iaXQvMTAtYnl0ZSAoMTIgcm91 bmQpIGtleXMKKyAqICAgY2tfY2FzdDEyOF9rZXlfc2NoZWQ6IDEyOC1iaXQvMTYtYnl0ZSAoMTYg cm91bmQpIGtleXMKKyAqLworCitleHRlcm4gdm9pZCBja19jYXN0NV80MF9rZXlfc2NoZWQgUCgo Q2FzdEtleVNjaGVkICosIHVpbnQ4ICopKTsKK2V4dGVybiB2b2lkIGNrX2Nhc3Q1XzY0X2tleV9z Y2hlZCBQKChDYXN0S2V5U2NoZWQgKiwgdWludDggKikpOworZXh0ZXJuIHZvaWQgY2tfY2FzdDVf ODBfa2V5X3NjaGVkIFAoKENhc3RLZXlTY2hlZCAqLCB1aW50OCAqKSk7CitleHRlcm4gdm9pZCAg Y2tfY2FzdDEyOF9rZXlfc2NoZWQgUCgoQ2FzdEtleVNjaGVkICosIHVpbnQ4ICopKTsKKworLyoK KyAqIGNrX2Nhc3RfZWNiX2VuY3J5cHQob3V0cHV0LCBpbnB1dCwgc2NoZWR1bGUsIG1vZGUpCisg KiBja19jYXN0X2VjYl9jcnlwdChkYXRhLCBzY2hlZHVsZSwgbW9kZSkKKyAqCisgKiBFbmNyeXB0 cyB0aGUgNjQtYml0ICJpbnB1dCIgYWNjb3JkaW5nIHRvIHRoZSBDQVNUIGtleSBzY2hlZHVsZQor ICogInNjaGVkdWxlIiBhbmQgcGxhY2VzIHRoZSByZXN1bHQgaW4gIm91dHB1dCIuICBJZiAibW9k ZSIgaXMgMCwKKyAqIGNrX2Nhc3RfZWNiX2VuY3J5cHQgd2lsbCBlbmNyeXB0LCBvdGhlcndpc2Ug aXQgd2lsbCBkZWNyeXB0LgorICogIk91dHB1dCIgYW5kICJpbnB1dCIgY2FuIHBvaW50IHRvIHRo ZSBzYW1lIG1lbW9yeSwgaW4gd2hpY2ggY2FzZQorICogZW4vZGVjcnlwdGlvbiB3aWxsIGJlIHBl cmZvcm1lZCBpbiBwbGFjZS4KKyAqCisgKiBja19jYXN0X2VjYl9jcnlwdCBhY2NlcHRzIGlucHV0 IGluIHRoZSBmb3JtIG9mIGFuIGFycmF5IG9mIHR3bworICogMzItYml0IHdvcmRzIGFuZCBwZXJm b3JtcyBlbmNyeXB0aW9uL2RlY3J5cHRpb24gaW4gcGxhY2UuCisgKi8KKworZXh0ZXJuIHZvaWQg Y2tfY2FzdF9lY2JfZW5jcnlwdCBQKCh1aW50OCAqLCB1aW50OCAqLCBDYXN0S2V5U2NoZWQgKiwg aW50KSk7CitleHRlcm4gdm9pZCBja19jYXN0X2VjYl9jcnlwdCBQKCh1aW50MzIgKiwgQ2FzdEtl eVNjaGVkICosIGludCkpOworCisjZW5kaWYgLyogQ0FTVF9IICovCisKK2V4dGVybiBlbmNyeXB0 X2RlYnVnX21vZGU7CisKKyNkZWZpbmUgQ0ZCXzQwICAwCisjZGVmaW5lIE9GQl80MCAgMQorI2lm ZGVmIENBU1RfRVhQT1JUX0VOQ1JZUFRJT04KKyNkZWZpbmUgRkJfQ05UICAyCisjZWxzZQorI2Rl ZmluZSBDRkJfMTI4IDIKKyNkZWZpbmUgT0ZCXzEyOCAzCisjZGVmaW5lIEZCX0NOVCAgNAorI2Vu ZGlmCisKKyNkZWZpbmUgTk9fU0VORF9JViAgICAgIDEKKyNkZWZpbmUgTk9fUkVDVl9JViAgICAg IDIKKyNkZWZpbmUgTk9fS0VZSUQgICAgICAgIDQKKyNkZWZpbmUgSU5fUFJPR1JFU1MgICAgIChO T19TRU5EX0lWfE5PX1JFQ1ZfSVZ8Tk9fS0VZSUQpCisjZGVmaW5lIFNVQ0NFU1MgICAgICAgICAw CisjZGVmaW5lIGNGQUlMRUQgICAgICAgICAtMQorCisKK3N0cnVjdCBjYXN0X2ZiIHsKKyAgICAg ICAgQmxvY2sgdGVtcF9mZWVkOworICAgICAgICB1bnNpZ25lZCBjaGFyIGZiX2ZlZWRbNjRdOwor ICAgICAgICBpbnQga2V5X2lzc2V0OworICAgICAgICBpbnQgbmVlZF9zdGFydDsKKyAgICAgICAg aW50IHN0YXRlWzJdOworICAgICAgICBzdHJ1Y3QgY2FzdF9zdGluZm8geworICAgICAgICAgICAg ICAgIEJsb2NrICAgICAgICAgICBzdHJfb3V0cHV0OworICAgICAgICAgICAgICAgIEJsb2NrICAg ICAgICAgICBzdHJfZmVlZDsKKyAgICAgICAgICAgICAgICBCbG9jayAgICAgICAgICAgc3RyX2l2 OworICAgICAgICAgICAgICAgIENhc3RLZXlTY2hlZCAgICBzdHJfc2NoZWQ7CisgICAgICAgICAg ICAgICAgaW50ICAgICAgICAgICAgIHN0cl9pbmRleDsKKyAgICAgICAgfSBzdHJlYW1zWzJdOwor fTsKKworc3RhdGljIHN0cnVjdCBjYXN0X2ZiIGNhc3RfZmJbRkJfQ05UXTsKKworI2RlZmluZSBG QjY0X0lWICAgICAgICAgMQorI2RlZmluZSBGQjY0X0lWX09LICAgICAgMgorI2RlZmluZSBGQjY0 X0lWX0JBRCAgICAgMworCisKK3N0YXRpYyB2b2lkIGNhc3RfZmI2NF9zdHJlYW1faXYgUCgoQmxv Y2ssIHN0cnVjdCBjYXN0X3N0aW5mbyAqKSk7CitzdGF0aWMgdm9pZCBjYXN0X2ZiNjRfaW5pdCBQ KChzdHJ1Y3QgY2FzdF9mYiAqKSk7CitzdGF0aWMgaW50IGNhc3RfZmI2NF9zdGFydCBQKChzdHJ1 Y3QgY2FzdF9mYiAqLCBpbnQsIGludCkpOworc3RhdGljIGludCBjYXN0X2ZiNjRfaXMgUCgodW5z aWduZWQgY2hhciAqLCBpbnQsIHN0cnVjdCBjYXN0X2ZiICopKTsKK3N0YXRpYyBpbnQgY2FzdF9m YjY0X3JlcGx5IFAoKHVuc2lnbmVkIGNoYXIgKiwgaW50LCBzdHJ1Y3QgY2FzdF9mYiAqKSk7Citz dGF0aWMgaW50IGNhc3RfZmI2NF9zZXNzaW9uIFAoKFNlc3Npb25fS2V5ICosIGludCwgc3RydWN0 IGNhc3RfZmIgKiwgaW50KSk7CitzdGF0aWMgdm9pZCBjYXN0X2ZiNjRfc3RyZWFtX2tleSBQKChC bG9jaywgc3RydWN0IGNhc3Rfc3RpbmZvICosIGludCkpOworc3RhdGljIGludCBjYXN0X2ZiNjRf a2V5aWQgUCgoaW50LCB1bnNpZ25lZCBjaGFyICosIGludCAqLCBzdHJ1Y3QgY2FzdF9mYiAqKSk7 CitzdGF0aWMgdm9pZCBfY2FzdF9jZmI2NF9lbmNyeXB0IFAoKHVuc2lnbmVkIGNoYXIgKixpbnQs IHN0cnVjdCBjYXN0X3N0aW5mbyAqKSk7CitzdGF0aWMgaW50IF9jYXN0X2NmYjY0X2RlY3J5cHQg UCgoaW50LCBzdHJ1Y3QgY2FzdF9zdGluZm8gKikpOworc3RhdGljIHZvaWQgX2Nhc3Rfb2ZiNjRf ZW5jcnlwdCBQKCh1bnNpZ25lZCBjaGFyICosaW50LCBzdHJ1Y3QgY2FzdF9zdGluZm8gKikpOwor c3RhdGljIGludCBfY2FzdF9vZmI2NF9kZWNyeXB0IFAoKGludCwgc3RydWN0IGNhc3Rfc3RpbmZv ICopKTsKKworI2lmbmRlZiBDQVNUX0VYUE9SVF9FTkNSWVBUSU9OCit2b2lkCitjYXN0X2NmYjY0 X2luaXQoc2VydmVyKQorICAgICAgICBpbnQgc2VydmVyOworeworICAgICAgICBjYXN0X2ZiNjRf aW5pdCgmY2FzdF9mYltDRkJfMTI4XSk7CisgICAgICAgIGNhc3RfZmJbQ0ZCXzEyOF0uZmJfZmVl ZFs0XSA9IEVOQ1RZUEVfQ0FTVDEyOF9DRkI2NDsKK30KKwordm9pZAorY2FzdF9vZmI2NF9pbml0 KHNlcnZlcikKKyAgICAgICAgaW50IHNlcnZlcjsKK3sKKyAgICAgICAgY2FzdF9mYjY0X2luaXQo JmNhc3RfZmJbT0ZCXzEyOF0pOworICAgICAgICBjYXN0X2ZiW09GQl8xMjhdLmZiX2ZlZWRbNF0g PSBFTkNUWVBFX0NBU1QxMjhfT0ZCNjQ7Cit9CisjZW5kaWYKKwordm9pZAorY2FzdGV4cF9jZmI2 NF9pbml0KHNlcnZlcikKKyAgICAgICAgaW50IHNlcnZlcjsKK3sKKyAgICAgICAgY2FzdF9mYjY0 X2luaXQoJmNhc3RfZmJbQ0ZCXzQwXSk7CisgICAgICAgIGNhc3RfZmJbQ0ZCXzQwXS5mYl9mZWVk WzRdID0gRU5DVFlQRV9DQVNUNV80MF9DRkI2NDsKK30KKwordm9pZAorY2FzdGV4cF9vZmI2NF9p bml0KHNlcnZlcikKKyAgICAgICAgaW50IHNlcnZlcjsKK3sKKyAgICAgICAgY2FzdF9mYjY0X2lu aXQoJmNhc3RfZmJbT0ZCXzQwXSk7CisgICAgICAgIGNhc3RfZmJbT0ZCXzQwXS5mYl9mZWVkWzRd ID0gRU5DVFlQRV9DQVNUNV80MF9PRkI2NDsKK30KKworc3RhdGljIHZvaWQKK2Nhc3RfZmI2NF9p bml0KGZicCkKKyAgICByZWdpc3RlciBzdHJ1Y3QgY2FzdF9mYiAqZmJwOworeworICAgIG1lbXNl dCgodm9pZCAqKWZicCwgMCwgc2l6ZW9mKCpmYnApKTsKKyAgICBmYnAtPmtleV9pc3NldCA9IDA7 CisgICAgZmJwLT5zdGF0ZVswXSA9IGZicC0+c3RhdGVbMV0gPSBjRkFJTEVEOworICAgIGZicC0+ ZmJfZmVlZFswXSA9IElBQzsKKyAgICBmYnAtPmZiX2ZlZWRbMV0gPSBTQjsKKyAgICBmYnAtPmZi X2ZlZWRbMl0gPSBURUxPUFRfRU5DUllQVElPTjsKKyAgICBmYnAtPmZiX2ZlZWRbM10gPSBFTkNS WVBUX0lTOworfQorCisvKgorICogUmV0dXJuczoKKyAqICAgICAgLTE6IHNvbWUgZXJyb3IuICBO ZWdvdGlhdGlvbiBpcyBkb25lLCBlbmNyeXB0aW9uIG5vdCByZWFkeS4KKyAqICAgICAgIDA6IFN1 Y2Nlc3NmdWwsIGluaXRpYWwgbmVnb3RpYXRpb24gYWxsIGRvbmUuCisgKiAgICAgICAxOiBzdWNj ZXNzZnVsLCBuZWdvdGlhdGlvbiBub3QgZG9uZSB5ZXQuCisgKiAgICAgICAyOiBOb3QgeWV0LiAg T3RoZXIgdGhpbmdzIChsaWtlIGdldHRpbmcgdGhlIGtleSBmcm9tCisgKiAgICAgICAgICBLZXJi ZXJvcykgaGF2ZSB0byBoYXBwZW4gYmVmb3JlIHdlIGNhbiBjb250aW51ZS4KKyAqLworI2lmbmRl ZiBDQVNUX0VYUE9SVF9FTkNSWVBUSU9OCitpbnQKK2Nhc3RfY2ZiNjRfc3RhcnQoZGlyLCBzZXJ2 ZXIpCisgICAgaW50IGRpcjsKKyAgICBpbnQgc2VydmVyOworeworICAgIHJldHVybihjYXN0X2Zi NjRfc3RhcnQoJmNhc3RfZmJbQ0ZCXzEyOF0sIGRpciwgc2VydmVyKSk7Cit9CisKK2ludAorY2Fz dF9vZmI2NF9zdGFydChkaXIsIHNlcnZlcikKKyAgICBpbnQgZGlyOworICAgIGludCBzZXJ2ZXI7 Cit7CisgICAgcmV0dXJuKGNhc3RfZmI2NF9zdGFydCgmY2FzdF9mYltPRkJfMTI4XSwgZGlyLCBz ZXJ2ZXIpKTsKK30KKyNlbmRpZgorCitpbnQKK2Nhc3RleHBfY2ZiNjRfc3RhcnQoZGlyLCBzZXJ2 ZXIpCisgICAgaW50IGRpcjsKKyAgICBpbnQgc2VydmVyOworeworICAgIHJldHVybihjYXN0X2Zi NjRfc3RhcnQoJmNhc3RfZmJbQ0ZCXzQwXSwgZGlyLCBzZXJ2ZXIpKTsKK30KKworaW50CitjYXN0 ZXhwX29mYjY0X3N0YXJ0KGRpciwgc2VydmVyKQorICAgIGludCBkaXI7CisgICAgaW50IHNlcnZl cjsKK3sKKyAgICByZXR1cm4oY2FzdF9mYjY0X3N0YXJ0KCZjYXN0X2ZiW09GQl80MF0sIGRpciwg c2VydmVyKSk7Cit9CisKK3N0YXRpYyBpbnQKK2Nhc3RfZmI2NF9zdGFydChmYnAsIGRpciwgc2Vy dmVyKQorICAgIHN0cnVjdCBjYXN0X2ZiICpmYnA7CisgICAgaW50IGRpcjsKKyAgICBpbnQgc2Vy dmVyOworeworICAgIEJsb2NrIGI7CisgICAgaW50IHg7CisgICAgdW5zaWduZWQgY2hhciAqcDsK KyAgICByZWdpc3RlciBpbnQgc3RhdGU7CisKKyAgICBzd2l0Y2ggKGRpcikgeworICAgIGNhc2Ug RElSX0RFQ1JZUFQ6CisgICAgICAgIC8qCisgICAgICAgICAqIFRoaXMgaXMgc2ltcGx5IGEgcmVx dWVzdCB0byBoYXZlIHRoZSBvdGhlciBzaWRlCisgICAgICAgICAqIHN0YXJ0IG91dHB1dCAob3Vy IGlucHV0KS4gIEhlIHdpbGwgbmVnb3RpYXRlIGFuCisgICAgICAgICAqIElWIHNvIHdlIG5lZWQg bm90IGxvb2sgZm9yIGl0LgorICAgICAgICAgKi8KKyAgICAgICAgc3RhdGUgPSBmYnAtPnN0YXRl W2Rpci0xXTsKKyAgICAgICAgaWYgKHN0YXRlID09IGNGQUlMRUQpCisgICAgICAgICAgICBzdGF0 ZSA9IElOX1BST0dSRVNTOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgRElSX0VOQ1JZUFQ6 CisgICAgICAgIHN0YXRlID0gZmJwLT5zdGF0ZVtkaXItMV07CisgICAgICAgIGlmIChzdGF0ZSA9 PSBjRkFJTEVEKQorICAgICAgICAgICAgc3RhdGUgPSBJTl9QUk9HUkVTUzsKKyAgICAgICAgZWxz ZSBpZiAoKHN0YXRlICYgTk9fU0VORF9JVikgPT0gMCkKKyAgICAgICAgICAgIGJyZWFrOworCisg ICAgICAgIGlmICghZmJwLT5rZXlfaXNzZXQpIHsKKyAgICAgICAgICAgIGZicC0+bmVlZF9zdGFy dCA9IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBzdGF0ZSAmPSB+ Tk9fU0VORF9JVjsKKyAgICAgICAgc3RhdGUgfD0gTk9fUkVDVl9JVjsKKyNpZmRlZiBERUJVRwor ICAgICAgICBpZiAoZW5jcnlwdF9kZWJ1Z19tb2RlKQorICAgICAgICAgICAgcHJpbnRmKCJDcmVh dGluZyBuZXcgZmVlZFxyXG4iKTsKKyNlbmRpZgorICAgICAgICAvKgorICAgICAgICAgKiBDcmVh dGUgYSByYW5kb20gZmVlZCBhbmQgc2VuZCBpdCBvdmVyLgorICAgICAgICAgKi8KKyAgICAgICAg Y2tfY2FzdF9lY2JfZW5jcnlwdChmYnAtPnRlbXBfZmVlZCwgZmJwLT50ZW1wX2ZlZWQsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICZmYnAtPnN0cmVhbXNbZGlyLTFdLnN0cl9zY2hlZCwgMCk7 CisKKyAgICAgICAgcCA9IGZicC0+ZmJfZmVlZCArIDM7CisgICAgICAgICpwKysgPSBFTkNSWVBU X0lTOworICAgICAgICBwKys7CisgICAgICAgICpwKysgPSBGQjY0X0lWOworICAgICAgICBmb3Ig KHggPSAwOyB4IDwgc2l6ZW9mKEJsb2NrKTsgKyt4KSB7CisgICAgICAgICAgICBpZiAoKCpwKysg PSBmYnAtPnRlbXBfZmVlZFt4XSkgPT0gSUFDKQorICAgICAgICAgICAgICAgICpwKysgPSBJQUM7 CisgICAgICAgIH0KKyAgICAgICAgKnArKyA9IElBQzsKKyAgICAgICAgKnArKyA9IFNFOworCisg ICAgICAgIHR0b2woZmJwLT5mYl9mZWVkLCBwIC0gZmJwLT5mYl9mZWVkKTsKKyAgICAgICAgYnJl YWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuKGNGQUlMRUQpOworICAgIH0KKyAgICBy ZXR1cm4oZmJwLT5zdGF0ZVtkaXItMV0gPSBzdGF0ZSk7Cit9CisKKy8qCisgKiBSZXR1cm5zOgor ICogICAgICAtMTogc29tZSBlcnJvci4gIE5lZ290aWF0aW9uIGlzIGRvbmUsIGVuY3J5cHRpb24g bm90IHJlYWR5LgorICogICAgICAgMDogU3VjY2Vzc2Z1bCwgaW5pdGlhbCBuZWdvdGlhdGlvbiBh bGwgZG9uZS4KKyAqICAgICAgIDE6IHN1Y2Nlc3NmdWwsIG5lZ290aWF0aW9uIG5vdCBkb25lIHll dC4KKyAqLworI2lmbmRlZiBDQVNUX0VYUE9SVF9FTkNSWVBUSU9OCitpbnQKK2Nhc3RfY2ZiNjRf aXMoZGF0YSwgY250KQorICAgIHVuc2lnbmVkIGNoYXIgKmRhdGE7CisgICAgaW50IGNudDsKK3sK KyAgICByZXR1cm4oY2FzdF9mYjY0X2lzKGRhdGEsIGNudCwgJmNhc3RfZmJbQ0ZCXzEyOF0pKTsK K30KKworaW50CitjYXN0X29mYjY0X2lzKGRhdGEsIGNudCkKKyAgICB1bnNpZ25lZCBjaGFyICpk YXRhOworICAgIGludCBjbnQ7Cit7CisgICAgcmV0dXJuKGNhc3RfZmI2NF9pcyhkYXRhLCBjbnQs ICZjYXN0X2ZiW09GQl8xMjhdKSk7Cit9CisjZW5kaWYKKworaW50CitjYXN0ZXhwX2NmYjY0X2lz KGRhdGEsIGNudCkKKyAgICB1bnNpZ25lZCBjaGFyICpkYXRhOworICAgIGludCBjbnQ7Cit7Cisg ICAgcmV0dXJuKGNhc3RfZmI2NF9pcyhkYXRhLCBjbnQsICZjYXN0X2ZiW0NGQl80MF0pKTsKK30K KworaW50CitjYXN0ZXhwX29mYjY0X2lzKGRhdGEsIGNudCkKKyAgICB1bnNpZ25lZCBjaGFyICpk YXRhOworICAgIGludCBjbnQ7Cit7CisgICAgcmV0dXJuKGNhc3RfZmI2NF9pcyhkYXRhLCBjbnQs ICZjYXN0X2ZiW09GQl80MF0pKTsKK30KKworc3RhdGljIGludAorY2FzdF9mYjY0X2lzKGRhdGEs IGNudCwgZmJwKQorICAgIHVuc2lnbmVkIGNoYXIgKmRhdGE7CisgICAgaW50IGNudDsKKyAgICBz dHJ1Y3QgY2FzdF9mYiAqZmJwOworeworICAgIGludCB4OworICAgIHVuc2lnbmVkIGNoYXIgKnA7 CisgICAgQmxvY2sgYjsKKyAgICByZWdpc3RlciBpbnQgc3RhdGUgPSBmYnAtPnN0YXRlW0RJUl9E RUNSWVBULTFdOworCisgICAgaWYgKGNudC0tIDwgMSkKKyAgICAgICAgZ290byBmYWlsdXJlOwor CisjaWZkZWYgQ0tfU1NMCisgICAgaWYgKCFURUxPUFRfU0IoVEVMT1BUX1NUQVJUX1RMUykuc3Rh cnRfdGxzLm1lX2ZvbGxvd3MpCisjZW5kaWYgLyogQ0tfU1NMICovCisgICAgc3dpdGNoICgqZGF0 YSsrKSB7CisgICAgY2FzZSBGQjY0X0lWOgorICAgICAgICBpZiAoY250ICE9IHNpemVvZihCbG9j aykpIHsKKyNpZmRlZiBERUJVRworICAgICAgICAgICAgaWYgKGVuY3J5cHRfZGVidWdfbW9kZSkK KyAgICAgICAgICAgICAgICBwcmludGYoIkZCNjQ6IGluaXRpYWwgdmVjdG9yIGZhaWxlZCBvbiBz aXplXHJcbiIpOworI2VuZGlmCisgICAgICAgICAgICBzdGF0ZSA9IGNGQUlMRUQ7CisgICAgICAg ICAgICBnb3RvIGZhaWx1cmU7CisgICAgICAgIH0KKyNpZmRlZiBERUJVRworICAgICAgICBpZiAo ZW5jcnlwdF9kZWJ1Z19tb2RlKQorICAgICAgICAgICAgcHJpbnRmKCJGQjY0OiBpbml0aWFsIHZl Y3RvciByZWNlaXZlZFxyXG4iKTsKKworICAgICAgICBpZiAoZW5jcnlwdF9kZWJ1Z19tb2RlKQor ICAgICAgICAgICAgcHJpbnRmKCJJbml0aWFsaXppbmcgRGVjcnlwdCBzdHJlYW1cclxuIik7Cisj ZW5kaWYKKyAgICAgICAgY2FzdF9mYjY0X3N0cmVhbV9pdigodm9pZCAqKWRhdGEsICZmYnAtPnN0 cmVhbXNbRElSX0RFQ1JZUFQtMV0pOworCisgICAgICAgIHAgPSBmYnAtPmZiX2ZlZWQgKyAzOwor ICAgICAgICAqcCsrID0gRU5DUllQVF9SRVBMWTsKKyAgICAgICAgcCsrOworICAgICAgICAqcCsr ID0gRkI2NF9JVl9PSzsKKyAgICAgICAgKnArKyA9IElBQzsKKyAgICAgICAgKnArKyA9IFNFOwor CisgICAgICAgIHR0b2woZmJwLT5mYl9mZWVkLCBwIC0gZmJwLT5mYl9mZWVkKTsKKyAgICAgICAg c3RhdGUgPSBJTl9QUk9HUkVTUzsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAg ICAgICAvKiB1bmtub3duIG9wdGlvbiB0eXBlICovCisgICAgICAgIC8qIEZBTEwgVEhST1VHSCAq LworICAgICAgZmFpbHVyZToKKyAgICAgICAgLyoKKyAgICAgICAgKiBXZSBmYWlsZWQuICBTZW5k IGFuIEZCNjRfSVZfQkFEIG9wdGlvbgorICAgICAgICAqIHRvIHRoZSBvdGhlciBzaWRlIHNvIGl0 IHdpbGwga25vdyB0aGF0CisgICAgICAgICogdGhpbmdzIGZhaWxlZC4KKyAgICAgICAgKi8KKyAg ICAgICAgcCA9IGZicC0+ZmJfZmVlZCArIDM7CisgICAgICAgICpwKysgPSBFTkNSWVBUX1JFUExZ OworICAgICAgICBwKys7CisgICAgICAgICpwKysgPSBGQjY0X0lWX0JBRDsKKyAgICAgICAgKnAr KyA9IElBQzsKKyAgICAgICAgKnArKyA9IFNFOworCisgICAgICAgIHR0b2woZmJwLT5mYl9mZWVk LCBwIC0gZmJwLT5mYl9mZWVkKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybihm YnAtPnN0YXRlW0RJUl9ERUNSWVBULTFdID0gc3RhdGUpOworfQorCisvKgorICogUmV0dXJuczoK KyAqICAgICAgLTE6IHNvbWUgZXJyb3IuICBOZWdvdGlhdGlvbiBpcyBkb25lLCBlbmNyeXB0aW9u IG5vdCByZWFkeS4KKyAqICAgICAgIDA6IFN1Y2Nlc3NmdWwsIGluaXRpYWwgbmVnb3RpYXRpb24g YWxsIGRvbmUuCisgKiAgICAgICAxOiBzdWNjZXNzZnVsLCBuZWdvdGlhdGlvbiBub3QgZG9uZSB5 ZXQuCisgKi8KKyNpZm5kZWYgQ0FTVF9FWFBPUlRfRU5DUllQVElPTgoraW50CitjYXN0X2NmYjY0 X3JlcGx5KGRhdGEsIGNudCkKKyAgICB1bnNpZ25lZCBjaGFyICpkYXRhOworICAgIGludCBjbnQ7 Cit7CisgICAgcmV0dXJuKGNhc3RfZmI2NF9yZXBseShkYXRhLCBjbnQsICZjYXN0X2ZiW0NGQl8x MjhdKSk7Cit9CisKK2ludAorY2FzdF9vZmI2NF9yZXBseShkYXRhLCBjbnQpCisgICAgdW5zaWdu ZWQgY2hhciAqZGF0YTsKKyAgICBpbnQgY250OworeworICAgIHJldHVybihjYXN0X2ZiNjRfcmVw bHkoZGF0YSwgY250LCAmY2FzdF9mYltPRkJfMTI4XSkpOworfQorI2VuZGlmCisKK2ludAorY2Fz dGV4cF9jZmI2NF9yZXBseShkYXRhLCBjbnQpCisgICAgdW5zaWduZWQgY2hhciAqZGF0YTsKKyAg ICBpbnQgY250OworeworICAgIHJldHVybihjYXN0X2ZiNjRfcmVwbHkoZGF0YSwgY250LCAmY2Fz dF9mYltDRkJfNDBdKSk7Cit9CisKK2ludAorY2FzdGV4cF9vZmI2NF9yZXBseShkYXRhLCBjbnQp CisgICAgdW5zaWduZWQgY2hhciAqZGF0YTsKKyAgICBpbnQgY250OworeworICAgIHJldHVybihj YXN0X2ZiNjRfcmVwbHkoZGF0YSwgY250LCAmY2FzdF9mYltPRkJfNDBdKSk7Cit9CisKK3N0YXRp YyBpbnQKK2Nhc3RfZmI2NF9yZXBseShkYXRhLCBjbnQsIGZicCkKKyAgICB1bnNpZ25lZCBjaGFy ICpkYXRhOworICAgIGludCBjbnQ7CisgICAgc3RydWN0IGNhc3RfZmIgKmZicDsKK3sKKyAgICBp bnQgeDsKKyAgICB1bnNpZ25lZCBjaGFyICpwOworICAgIEJsb2NrIGI7CisgICAgcmVnaXN0ZXIg aW50IHN0YXRlID0gZmJwLT5zdGF0ZVtESVJfRU5DUllQVC0xXTsKKworICAgIGlmIChjbnQtLSA8 IDEpCisgICAgICAgIGdvdG8gZmFpbHVyZTsKKworICAgIHN3aXRjaCAoKmRhdGErKykgeworICAg IGNhc2UgRkI2NF9JVl9PSzoKKyAgICAgICAgY2FzdF9mYjY0X3N0cmVhbV9pdihmYnAtPnRlbXBf ZmVlZCwgJmZicC0+c3RyZWFtc1tESVJfRU5DUllQVC0xXSk7CisgICAgICAgIGlmIChzdGF0ZSA9 PSBjRkFJTEVEKQorICAgICAgICAgICAgc3RhdGUgPSBJTl9QUk9HUkVTUzsKKyAgICAgICAgc3Rh dGUgJj0gfk5PX1JFQ1ZfSVY7CisgICAgICAgIGVuY3J5cHRfc2VuZF9rZXlpZChESVJfRU5DUllQ VCwgKHVuc2lnbmVkIGNoYXIgKikiXDAiLCAxLCAxKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBj YXNlIEZCNjRfSVZfQkFEOgorICAgICAgICBtZW1zZXQoZmJwLT50ZW1wX2ZlZWQsIDAsIHNpemVv ZihCbG9jaykpOworICAgICAgICBjYXN0X2ZiNjRfc3RyZWFtX2l2KGZicC0+dGVtcF9mZWVkLCAm ZmJwLT5zdHJlYW1zW0RJUl9FTkNSWVBULTFdKTsKKyAgICAgICAgc3RhdGUgPSBjRkFJTEVEOwor ICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisjaWYgMAorICAgICAgICBpZiAoZW5jcnlw dF9kZWJ1Z19tb2RlKSB7CisgICAgICAgICAgICBwcmludGYoIlVua25vd24gb3B0aW9uIHR5cGU6 ICVkXHJcbiIsIGRhdGFbLTFdKTsKKyAgICAgICAgICAgIHByaW50ZChkYXRhLCBjbnQpOworICAg ICAgICAgICAgcHJpbnRmKCJcclxuIik7CisgICAgICAgIH0KKyNlbmRpZgorICAgICAgICAvKiBG QUxMIFRIUk9VR0ggKi8KKyAgICAgIGZhaWx1cmU6CisgICAgICAgIHN0YXRlID0gY0ZBSUxFRDsK KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybihmYnAtPnN0YXRlW0RJUl9FTkNSWVBU LTFdID0gc3RhdGUpOworfQorCisjaWZuZGVmIENBU1RfRVhQT1JUX0VOQ1JZUFRJT04KK2ludAor Y2FzdF9jZmI2NF9zZXNzaW9uKGtleSwgc2VydmVyKQorICAgIFNlc3Npb25fS2V5ICprZXk7Cisg ICAgaW50IHNlcnZlcjsKK3sKKyAgICByZXR1cm4oY2FzdF9mYjY0X3Nlc3Npb24oa2V5LCBzZXJ2 ZXIsICZjYXN0X2ZiW0NGQl8xMjhdLCAxKSk7Cit9CisKK2ludAorY2FzdF9vZmI2NF9zZXNzaW9u KGtleSwgc2VydmVyKQorICAgIFNlc3Npb25fS2V5ICprZXk7CisgICAgaW50IHNlcnZlcjsKK3sK KyAgICByZXR1cm4oY2FzdF9mYjY0X3Nlc3Npb24oa2V5LCBzZXJ2ZXIsICZjYXN0X2ZiW09GQl8x MjhdLCAxKSk7Cit9CisjZW5kaWYKKworaW50CitjYXN0ZXhwX2NmYjY0X3Nlc3Npb24oa2V5LCBz ZXJ2ZXIpCisgICAgU2Vzc2lvbl9LZXkgKmtleTsKKyAgICBpbnQgc2VydmVyOworeworICAgIHJl dHVybihjYXN0X2ZiNjRfc2Vzc2lvbihrZXksIHNlcnZlciwgJmNhc3RfZmJbQ0ZCXzQwXSwgMCkp OworfQorCitpbnQKK2Nhc3RleHBfb2ZiNjRfc2Vzc2lvbihrZXksIHNlcnZlcikKKyAgICBTZXNz aW9uX0tleSAqa2V5OworICAgIGludCBzZXJ2ZXI7Cit7CisgICAgcmV0dXJuKGNhc3RfZmI2NF9z ZXNzaW9uKGtleSwgc2VydmVyLCAmY2FzdF9mYltPRkJfNDBdLCAwKSk7Cit9CisKKyNkZWZpbmUg Q0FTVDEyOF9LRVlMRU4gIDE2ICAgICAgLyogMTI4IGJpdHMgKi8KKyNkZWZpbmUgQ0FTVDVfNDBf S0VZTEVOICA1ICAgICAgLyogIDQwIGJpdHMgKi8KKworc3RhdGljIGludAorY2FzdF9mYjY0X3Nl c3Npb24oa2V5LCBzZXJ2ZXIsIGZicCwgZnMpCisgICAgU2Vzc2lvbl9LZXkgKmtleTsKKyAgICBp bnQgc2VydmVyOworICAgIHN0cnVjdCBjYXN0X2ZiICpmYnA7CisgICAgaW50IGZzOworeworICAg IGludCBrbGVuOworICAgIHVuc2lnbmVkIGNoYXIgKiBrcHRyOworCisgICAgaWYoZnMpCisgICAg ICAgIGtsZW4gPSBDQVNUMTI4X0tFWUxFTjsKKyAgICBlbHNlCisgICAgICAgIGtsZW4gPSBDQVNU NV80MF9LRVlMRU47CisKKyAgICBpZiAoIWtleSB8fCBrZXktPmxlbmd0aCA8IGtsZW4pIHsKKyAg ICAgICAgQ0hBUiBidWZbODBdOworICAgICAgICBzcHJpbnRmKChjaGFyICopYnVmLCJDYW4ndCBz ZXQgQ0FTVCBzZXNzaW9uIGtleSAoJWQgPCAlZCkiLAorICAgICAgICAgICAgICAgIGtleSA/IGtl eS0+bGVuZ3RoIDogMCwga2xlbik7ICAgICAgICAgICAgICAgICAgIC8qIHNhZmUgKi8KKyNpZmRl ZiBERUJVRworICAgICAgICBpZiAoZW5jcnlwdF9kZWJ1Z19tb2RlKQorICAgICAgICAgICAgcHJp bnRmKCIlc1xyXG4iLGJ1Zik7CisjZW5kaWYKKyAgICAgICAgZGVidWcoRjExMCwiY2FzdF9mYjY0 X3Nlc3Npb24iLGJ1ZiwwKTsKKyAgICAgICAgcmV0dXJuKGNGQUlMRUQpOworICAgIH0KKyAgICBp ZihrZXktPmxlbmd0aCA8IDIgKiBrbGVuKQorICAgICAgICBrcHRyID0ga2V5LT5kYXRhOworICAg IGVsc2UKKyAgICAgICAga3B0ciA9IGtleS0+ZGF0YSArIGtsZW47CisKKyAgICBpZihzZXJ2ZXIp IHsKKyAgICAgICAgY2FzdF9mYjY0X3N0cmVhbV9rZXkoa3B0ciwgJmZicC0+c3RyZWFtc1tESVJf RU5DUllQVC0xXSwgZnMpOworICAgICAgICBjYXN0X2ZiNjRfc3RyZWFtX2tleShrZXktPmRhdGEs ICZmYnAtPnN0cmVhbXNbRElSX0RFQ1JZUFQtMV0sIGZzKTsKKyAgICB9CisgICAgZWxzZSB7Cisg ICAgICAgIGNhc3RfZmI2NF9zdHJlYW1fa2V5KGtwdHIsICZmYnAtPnN0cmVhbXNbRElSX0RFQ1JZ UFQtMV0sIGZzKTsKKyAgICAgICAgY2FzdF9mYjY0X3N0cmVhbV9rZXkoa2V5LT5kYXRhLCAmZmJw LT5zdHJlYW1zW0RJUl9FTkNSWVBULTFdLCBmcyk7CisgICAgfQorCisgICAgLyogU3R1ZmYgbGVm dG92ZXJzIGludG8gdGhlIGZlZWQgKi8KKyAgICBpZihrZXktPmxlbmd0aCA+PSAyICoga2xlbiAr IHNpemVvZihCbG9jaykpCisgICAgICAgIG1lbWNweShmYnAtPnRlbXBfZmVlZCwga2V5LT5kYXRh ICsgMiAqIGtsZW4sIHNpemVvZihCbG9jaykpOworICAgIGVsc2UgeworI2lmZGVmIENPTU1FTlQK KyAgICAgICAgLyogVGhpcyBpcyBhIGJldHRlciB3YXkgb2YgZXJhc2luZyB0aGUgcGFzc3dvcmQg Ki8KKyAgICAgICAgLyogYnV0IHdlIGRvIG5vdCB3YW50IHRvIGxpbmsgaW4gbGlic3JwICAgICAg ICAgKi8KKyAgICAgICAgdF9yYW5kb20oZmJwLT50ZW1wX2ZlZWQsIHNpemVvZihCbG9jaykpOwor I2Vsc2UKKyAgICAgICAgbWVtc2V0KGZicC0+dGVtcF9mZWVkLCAwLCBzaXplb2YoQmxvY2spKTsK KyNlbmRpZgorICAgIH0KKworICAgIGZicC0+a2V5X2lzc2V0ID0gMTsKKyAgICAvKgorICAgICog Tm93IGxvb2sgdG8gc2VlIGlmIGNhc3RfZmI2NF9zdGFydCgpIHdhcyB3YXMgd2FpdGluZyBmb3IK KyAgICAqIHRoZSBrZXkgdG8gc2hvdyB1cC4gIElmIHNvLCBnbyBhaGVhZCBhbiBjYWxsIGl0IG5v dworICAgICogdGhhdCB3ZSBoYXZlIHRoZSBrZXkuCisgICAgKi8KKyAgICBpZiAoZmJwLT5uZWVk X3N0YXJ0KSB7CisgICAgICAgIGZicC0+bmVlZF9zdGFydCA9IDA7CisgICAgICAgIGNhc3RfZmI2 NF9zdGFydChmYnAsIERJUl9FTkNSWVBULCBzZXJ2ZXIpOworICAgIH0KKyAgICByZXR1cm4oMCk7 Cit9CisKKy8qCisgKiBXZSBvbmx5IGFjY2VwdCBhIGtleWlkIG9mIDAuICBJZiB3ZSBnZXQgYSBr ZXlpZCBvZgorICogMCwgdGhlbiBtYXJrIHRoZSBzdGF0ZSBhcyBTVUNDRVNTLgorICovCisjaWZu ZGVmIENBU1RfRVhQT1JUX0VOQ1JZUFRJT04KK2ludAorY2FzdF9jZmI2NF9rZXlpZChkaXIsIGtw LCBsZW5wKQorICAgIGludCBkaXIsICpsZW5wOworICAgIHVuc2lnbmVkIGNoYXIgKmtwOworewor ICAgIHJldHVybihjYXN0X2ZiNjRfa2V5aWQoZGlyLCBrcCwgbGVucCwgJmNhc3RfZmJbQ0ZCXzEy OF0pKTsKK30KKworaW50CitjYXN0X29mYjY0X2tleWlkKGRpciwga3AsIGxlbnApCisgICAgaW50 IGRpciwgKmxlbnA7CisgICAgdW5zaWduZWQgY2hhciAqa3A7Cit7CisgICAgcmV0dXJuKGNhc3Rf ZmI2NF9rZXlpZChkaXIsIGtwLCBsZW5wLCAmY2FzdF9mYltPRkJfMTI4XSkpOworfQorI2VuZGlm CisKK2ludAorY2FzdGV4cF9jZmI2NF9rZXlpZChkaXIsIGtwLCBsZW5wKQorICAgIGludCBkaXIs ICpsZW5wOworICAgIHVuc2lnbmVkIGNoYXIgKmtwOworeworICAgIHJldHVybihjYXN0X2ZiNjRf a2V5aWQoZGlyLCBrcCwgbGVucCwgJmNhc3RfZmJbQ0ZCXzQwXSkpOworfQorCitpbnQKK2Nhc3Rl eHBfb2ZiNjRfa2V5aWQoZGlyLCBrcCwgbGVucCkKKyAgICBpbnQgZGlyLCAqbGVucDsKKyAgICB1 bnNpZ25lZCBjaGFyICprcDsKK3sKKyAgICByZXR1cm4oY2FzdF9mYjY0X2tleWlkKGRpciwga3As IGxlbnAsICZjYXN0X2ZiW09GQl80MF0pKTsKK30KKworc3RhdGljIGludAorY2FzdF9mYjY0X2tl eWlkKGRpciwga3AsIGxlbnAsIGZicCkKKyAgICBpbnQgZGlyLCAqbGVucDsKKyAgICB1bnNpZ25l ZCBjaGFyICprcDsKKyAgICBzdHJ1Y3QgY2FzdF9mYiAqZmJwOworeworICAgIHJlZ2lzdGVyIGlu dCBzdGF0ZSA9IGZicC0+c3RhdGVbZGlyLTFdOworCisgICAgaWYgKCpsZW5wICE9IDEgfHwgKCpr cCAhPSAnXDAnKSkgeworICAgICAgICAqbGVucCA9IDA7CisgICAgICAgIHJldHVybihzdGF0ZSk7 CisgICAgfQorCisgICAgaWYgKHN0YXRlID09IGNGQUlMRUQpCisgICAgICAgIHN0YXRlID0gSU5f UFJPR1JFU1M7CisKKyAgICBzdGF0ZSAmPSB+Tk9fS0VZSUQ7CisKKyAgICByZXR1cm4oZmJwLT5z dGF0ZVtkaXItMV0gPSBzdGF0ZSk7Cit9CisKK3N0YXRpYyB2b2lkCitjYXN0X2ZiNjRfcHJpbnRz dWIoZGF0YSwgY250LCBidWYsIGJ1ZmxlbiwgdHlwZSkKKyAgICB1bnNpZ25lZCBjaGFyICpkYXRh LCAqYnVmLCAqdHlwZTsKKyAgICBpbnQgY250LCBidWZsZW47Cit7CisgICAgY2hhciBsYnVmWzY0 XTsKKyAgICByZWdpc3RlciBpbnQgaTsKKyAgICBjaGFyICpjcDsKKworICAgIGJ1ZltidWZsZW4t MV0gPSAnXDAnOyAgICAgICAgICAgICAgIC8qIG1ha2Ugc3VyZSBpdCdzIE5VTEwgdGVybWluYXRl ZCAqLworICAgIGJ1ZmxlbiAtPSAxOworCisgICAgc3dpdGNoKGRhdGFbMl0pIHsKKyAgICBjYXNl IEZCNjRfSVY6CisgICAgICAgIHNwcmludGYobGJ1ZiwgIiVzX0lWIiwgdHlwZSk7CisgICAgICAg IGNwID0gbGJ1ZjsKKyAgICAgICAgZ290byBjb21tb247CisKKyAgICBjYXNlIEZCNjRfSVZfT0s6 CisgICAgICAgIHNwcmludGYobGJ1ZiwgIiVzX0lWX09LIiwgdHlwZSk7CisgICAgICAgIGNwID0g bGJ1ZjsKKyAgICAgICAgZ290byBjb21tb247CisKKyAgICBjYXNlIEZCNjRfSVZfQkFEOgorICAg ICAgICBzcHJpbnRmKGxidWYsICIlc19JVl9CQUQiLCB0eXBlKTsKKyAgICAgICAgY3AgPSBsYnVm OworICAgICAgICBnb3RvIGNvbW1vbjsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIHNwcmludGYo bGJ1ZiwgIiAlZCAodW5rbm93bikiLCBkYXRhWzJdKTsKKyAgICAgICAgY3AgPSBsYnVmOworICAg ICAgY29tbW9uOgorICAgICAgICBmb3IgKDsgKGJ1ZmxlbiA+IDApICYmICgqYnVmID0gKmNwKysp OyBidWYrKykKKyAgICAgICAgICAgIGJ1Zmxlbi0tOworICAgICAgICBmb3IgKGkgPSAzOyBpIDwg Y250OyBpKyspIHsKKyAgICAgICAgICAgIHNwcmludGYobGJ1ZiwgIiAlZCIsIGRhdGFbaV0pOwor ICAgICAgICAgICAgZm9yIChjcCA9IGxidWY7IChidWZsZW4gPiAwKSAmJiAoKmJ1ZiA9ICpjcCsr KTsgYnVmKyspCisgICAgICAgICAgICAgICAgYnVmbGVuLS07CisgICAgICAgIH0KKyAgICAgICAg YnJlYWs7CisgICAgfQorfQorCit2b2lkCitjYXN0X2NmYjY0X3ByaW50c3ViKGRhdGEsIGNudCwg YnVmLCBidWZsZW4pCisgICAgdW5zaWduZWQgY2hhciAqZGF0YSwgKmJ1ZjsKKyAgICBpbnQgY250 LCBidWZsZW47Cit7CisgICAgY2FzdF9mYjY0X3ByaW50c3ViKGRhdGEsIGNudCwgYnVmLCBidWZs ZW4sICJDRkI2NCIpOworfQorCit2b2lkCitjYXN0X29mYjY0X3ByaW50c3ViKGRhdGEsIGNudCwg YnVmLCBidWZsZW4pCisgICAgdW5zaWduZWQgY2hhciAqZGF0YSwgKmJ1ZjsKKyAgICBpbnQgY250 LCBidWZsZW47Cit7CisgICAgY2FzdF9mYjY0X3ByaW50c3ViKGRhdGEsIGNudCwgYnVmLCBidWZs ZW4sICJPRkI2NCIpOworfQorCitzdGF0aWMgdm9pZAorY2FzdF9mYjY0X3N0cmVhbV9pdihzZWVk LCBzdHApCisgICAgQmxvY2sgc2VlZDsKKyAgICByZWdpc3RlciBzdHJ1Y3QgY2FzdF9zdGluZm8g KnN0cDsKK3sKKyAgICBtZW1jcHkoKHZvaWQgKilzdHAtPnN0cl9pdiwgKHZvaWQgKilzZWVkLCBz aXplb2YoQmxvY2spKTsKKyAgICBtZW1jcHkoKHZvaWQgKilzdHAtPnN0cl9vdXRwdXQsICh2b2lk ICopc2VlZCwgc2l6ZW9mKEJsb2NrKSk7CisKKyAgICBzdHAtPnN0cl9pbmRleCA9IHNpemVvZihC bG9jayk7Cit9CisKK3N0YXRpYyB2b2lkCitjYXN0X2ZiNjRfc3RyZWFtX2tleShrZXksIHN0cCwg ZnMpCisgICAgdW5zaWduZWQgY2hhciAqIGtleTsKKyAgICByZWdpc3RlciBzdHJ1Y3QgY2FzdF9z dGluZm8gKnN0cDsKKyAgICBpbnQgZnM7Cit7CisjaWZuZGVmIENBU1RfRVhQT1JUX0VOQ1JZUFRJ T04KKyAgICBpZihmcykKKyAgICAgICAgY2tfY2FzdDEyOF9rZXlfc2NoZWQoJnN0cC0+c3RyX3Nj aGVkLCBrZXkpOworICAgIGVsc2UKKyNlbmRpZgorICAgICAgICBja19jYXN0NV80MF9rZXlfc2No ZWQoJnN0cC0+c3RyX3NjaGVkLCBrZXkpOworCisgICAgbWVtY3B5KCh2b2lkICopc3RwLT5zdHJf b3V0cHV0LCAodm9pZCAqKXN0cC0+c3RyX2l2LCBzaXplb2YoQmxvY2spKTsKKworICAgIHN0cC0+ c3RyX2luZGV4ID0gc2l6ZW9mKEJsb2NrKTsKK30KKworLyoKKyAqIENBU1QgNjQgYml0IENpcGhl ciBGZWVkYmFjaworICoKKyAqICAgICBrZXkgLS0tPistLS0tLS0rCisgKiAgICAgICAgICArLT58 IENBU1QgfC0tKworICogICAgICAgICAgfCAgKy0tLS0tLSsgIHwKKyAqICAgICAgICAgIHwgICAg ICAgICAgICB2CisgKiAgSU5QVVQgLS0oLS0tLS0tLS0tLT4oKykrLS0tPiBEQVRBCisgKiAgICAg ICAgICB8ICAgICAgICAgICAgICB8CisgKiAgICAgICAgICArLS0tLS0tLS0tLS0tLS0rCisgKgor ICoKKyAqIEdpdmVuOgorICogICAgICBpVjogSW5pdGlhbCB2ZWN0b3IsIDY0IGJpdHMgKDggYnl0 ZXMpIGxvbmcuCisgKiAgICAgIERuOiB0aGUgbnRoIGNodW5rIG9mIDY0IGJpdHMgKDggYnl0ZXMp IG9mIGRhdGEgdG8gZW5jcnlwdCAoZGVjcnlwdCkuCisgKiAgICAgIE9uOiB0aGUgbnRoIGNodW5r IG9mIDY0IGJpdHMgKDggYnl0ZXMpIG9mIGVuY3J5cHRlZCAoZGVjcnlwdGVkKSBvdXRwdXQuCisg KgorICogICAgICBWMCA9IENBU1QoaVYsIGtleSkKKyAqICAgICAgT24gPSBEbiBeIFZuCisgKiAg ICAgIFYobisxKSA9IENBU1QoT24sIGtleSkKKyAqLworI2lmbmRlZiBDQVNUX0VYUE9SVF9FTkNS WVBUSU9OCit2b2lkCitjYXN0X2NmYjY0X2VuY3J5cHQocywgYykKKyAgICAgICAgcmVnaXN0ZXIg dW5zaWduZWQgY2hhciAqczsKKyAgICAgICAgaW50IGM7Cit7CisgICAgX2Nhc3RfY2ZiNjRfZW5j cnlwdChzLCBjLCAmY2FzdF9mYltDRkJfMTI4XS5zdHJlYW1zW0RJUl9FTkNSWVBULTFdKTsKK30K KyNlbmRpZgorCit2b2lkCitjYXN0ZXhwX2NmYjY0X2VuY3J5cHQocywgYykKKyAgICByZWdpc3Rl ciB1bnNpZ25lZCBjaGFyICpzOworICAgIGludCBjOworeworICAgIF9jYXN0X2NmYjY0X2VuY3J5 cHQocywgYywgJmNhc3RfZmJbQ0ZCXzQwXS5zdHJlYW1zW0RJUl9FTkNSWVBULTFdKTsKK30KKwor c3RhdGljIHZvaWQKK19jYXN0X2NmYjY0X2VuY3J5cHQocywgYywgc3RwKQorICAgIHJlZ2lzdGVy IHVuc2lnbmVkIGNoYXIgKnM7CisgICAgaW50IGM7CisgICAgcmVnaXN0ZXIgc3RydWN0IGNhc3Rf c3RpbmZvICpzdHA7Cit7CisgICAgcmVnaXN0ZXIgaW50IGluZGV4OworCisgICAgaW5kZXggPSBz dHAtPnN0cl9pbmRleDsKKyAgICB3aGlsZSAoYy0tID4gMCkgeworICAgICAgICBpZiAoaW5kZXgg PT0gc2l6ZW9mKEJsb2NrKSkgeworICAgICAgICAgICAgQmxvY2sgYjsKKyAgICAgICAgICAgIGNr X2Nhc3RfZWNiX2VuY3J5cHQoYiwgc3RwLT5zdHJfb3V0cHV0LCAmc3RwLT5zdHJfc2NoZWQsIDAp OworICAgICAgICAgICAgbWVtY3B5KCh2b2lkICopc3RwLT5zdHJfZmVlZCwgKHZvaWQgKiliLCBz aXplb2YoQmxvY2spKTsKKyAgICAgICAgICAgIGluZGV4ID0gMDsKKyAgICAgICAgfQorCisgICAg ICAgIC8qIE9uIGVuY3J5cHRpb24sIHdlIHN0b3JlIChmZWVkIF4gZGF0YSkgd2hpY2ggaXMgY3lw aGVyICovCisgICAgICAgICpzID0gc3RwLT5zdHJfb3V0cHV0W2luZGV4XSA9IChzdHAtPnN0cl9m ZWVkW2luZGV4XSBeICpzKTsKKyAgICAgICAgcysrOworICAgICAgICBpbmRleCsrOworICAgIH0K KyAgICBzdHAtPnN0cl9pbmRleCA9IGluZGV4OworfQorCisjaWZuZGVmIENBU1RfRVhQT1JUX0VO Q1JZUFRJT04KK2ludAorY2FzdF9jZmI2NF9kZWNyeXB0KGRhdGEpCisgICAgaW50IGRhdGE7Cit7 CisgICAgcmV0dXJuIF9jYXN0X2NmYjY0X2RlY3J5cHQoZGF0YSwgJmNhc3RfZmJbQ0ZCXzEyOF0u c3RyZWFtc1tESVJfREVDUllQVC0xXSk7Cit9CisjZW5kaWYKKworaW50CitjYXN0ZXhwX2NmYjY0 X2RlY3J5cHQoZGF0YSkKKyAgICBpbnQgZGF0YTsKK3sKKyAgICByZXR1cm4gX2Nhc3RfY2ZiNjRf ZGVjcnlwdChkYXRhLCAmY2FzdF9mYltDRkJfNDBdLnN0cmVhbXNbRElSX0RFQ1JZUFQtMV0pOwor fQorCitzdGF0aWMgaW50CitfY2FzdF9jZmI2NF9kZWNyeXB0KGRhdGEsIHN0cCkKKyAgICBpbnQg ZGF0YTsKKyAgICByZWdpc3RlciBzdHJ1Y3QgY2FzdF9zdGluZm8gKnN0cDsKK3sKKyAgICBpbnQg aW5kZXg7CisKKyAgICBpZiAoZGF0YSA9PSAtMSkgeworICAgICAgICAvKgorICAgICAgICAqIEJh Y2sgdXAgb25lIGJ5dGUuICBJdCBpcyBhc3N1bWVkIHRoYXQgd2Ugd2lsbAorICAgICAgICAqIG5l dmVyIGJhY2sgdXAgbW9yZSB0aGFuIG9uZSBieXRlLiAgSWYgd2UgZG8sIHRoaXMKKyAgICAgICAg KiBtYXkgb3IgbWF5IG5vdCB3b3JrLgorICAgICAgICAqLworICAgICAgICBpZiAoc3RwLT5zdHJf aW5kZXgpCisgICAgICAgICAgICAtLXN0cC0+c3RyX2luZGV4OworICAgICAgICByZXR1cm4oMCk7 CisgICAgfQorCisgICAgaW5kZXggPSBzdHAtPnN0cl9pbmRleCsrOworICAgIGlmIChpbmRleCA9 PSBzaXplb2YoQmxvY2spKSB7CisgICAgICAgIEJsb2NrIGI7CisgICAgICAgIGNrX2Nhc3RfZWNi X2VuY3J5cHQoYiwgc3RwLT5zdHJfb3V0cHV0LCAmc3RwLT5zdHJfc2NoZWQsIDApOworICAgICAg ICBtZW1jcHkoKHZvaWQgKilzdHAtPnN0cl9mZWVkLCAodm9pZCAqKWIsIHNpemVvZihCbG9jaykp OworICAgICAgICBzdHAtPnN0cl9pbmRleCA9IDE7ICAgICAvKiBOZXh0IHRpbWUgd2lsbCBiZSAx ICovCisgICAgICAgIGluZGV4ID0gMDsgICAgICAgICAgICAgIC8qIEJ1dCBub3cgdXNlIDAgKi8K KyAgICB9CisKKyAgICAvKiBPbiBkZWNyeXB0aW9uIHdlIHN0b3JlIChkYXRhKSB3aGljaCBpcyBj eXBoZXIuICovCisgICAgc3RwLT5zdHJfb3V0cHV0W2luZGV4XSA9IGRhdGE7CisgICAgcmV0dXJu KGRhdGEgXiBzdHAtPnN0cl9mZWVkW2luZGV4XSk7Cit9CisKKy8qCisgKiBDQVNUIDY0IGJpdCBP dXRwdXQgRmVlZGJhY2sKKyAqCisgKiBrZXkgLS0tPistLS0tLS0rCisgKiAgICAgICstPnwgQ0FT VCB8LS0rCisgKiAgICAgIHwgICstLS0tLS0rICB8CisgKiAgICAgICstLS0tLS0tLS0tLS0rCisg KiAgICAgICAgICAgICAgICAgICB2CisgKiAgSU5QVVQgLS0tLS0tLS0tPigrKSAtLS0tPiBEQVRB CisgKgorICogR2l2ZW46CisgKiAgICAgIGlWOiBJbml0aWFsIHZlY3RvciwgNjQgYml0cyAoOCBi eXRlcykgbG9uZy4KKyAqICAgICAgRG46IHRoZSBudGggY2h1bmsgb2YgNjQgYml0cyAoOCBieXRl cykgb2YgZGF0YSB0byBlbmNyeXB0IChkZWNyeXB0KS4KKyAqICAgICAgT246IHRoZSBudGggY2h1 bmsgb2YgNjQgYml0cyAoOCBieXRlcykgb2YgZW5jcnlwdGVkIChkZWNyeXB0ZWQpIG91dHB1dC4K KyAqCisgKiAgICAgIFYwID0gQ0FTVChpViwga2V5KQorICogICAgICBWKG4rMSkgPSBDQVNUKFZu LCBrZXkpCisgKiAgICAgIE9uID0gRG4gXiBWbgorICovCisjaWZuZGVmIENBU1RfRVhQT1JUX0VO Q1JZUFRJT04KK3ZvaWQKK2Nhc3Rfb2ZiNjRfZW5jcnlwdChzLCBjKQorICAgIHJlZ2lzdGVyIHVu c2lnbmVkIGNoYXIgKnM7CisgICAgaW50IGM7Cit7CisgICAgX2Nhc3Rfb2ZiNjRfZW5jcnlwdChz LCBjLCAmY2FzdF9mYltPRkJfMTI4XS5zdHJlYW1zW0RJUl9FTkNSWVBULTFdKTsKK30KKyNlbmRp ZgorCit2b2lkCitjYXN0ZXhwX29mYjY0X2VuY3J5cHQocywgYykKKyAgICByZWdpc3RlciB1bnNp Z25lZCBjaGFyICpzOworICAgIGludCBjOworeworICBfY2FzdF9vZmI2NF9lbmNyeXB0KHMsIGMs ICZjYXN0X2ZiW09GQl80MF0uc3RyZWFtc1tESVJfRU5DUllQVC0xXSk7Cit9CisKK3N0YXRpYyB2 b2lkCitfY2FzdF9vZmI2NF9lbmNyeXB0KHMsIGMsIHN0cCkKKyAgICByZWdpc3RlciB1bnNpZ25l ZCBjaGFyICpzOworICAgIGludCBjOworICAgIHJlZ2lzdGVyIHN0cnVjdCBjYXN0X3N0aW5mbyAq c3RwOworeworICAgIHJlZ2lzdGVyIGludCBpbmRleDsKKworICAgIGluZGV4ID0gc3RwLT5zdHJf aW5kZXg7CisgICAgd2hpbGUgKGMtLSA+IDApIHsKKyAgICAgICAgaWYgKGluZGV4ID09IHNpemVv ZihCbG9jaykpIHsKKyAgICAgICAgICAgIEJsb2NrIGI7CisgICAgICAgICAgICBja19jYXN0X2Vj Yl9lbmNyeXB0KGIsIHN0cC0+c3RyX2ZlZWQsICZzdHAtPnN0cl9zY2hlZCwgMCk7CisgICAgICAg ICAgICBtZW1jcHkoKHZvaWQgKilzdHAtPnN0cl9mZWVkLCAodm9pZCAqKWIsIHNpemVvZihCbG9j aykpOworICAgICAgICAgICAgaW5kZXggPSAwOworICAgICAgICB9CisgICAgICAgICpzKysgXj0g c3RwLT5zdHJfZmVlZFtpbmRleF07CisgICAgICAgIGluZGV4Kys7CisgICAgfQorICAgIHN0cC0+ c3RyX2luZGV4ID0gaW5kZXg7Cit9CisKKyNpZm5kZWYgQ0FTVF9FWFBPUlRfRU5DUllQVElPTgor aW50CitjYXN0X29mYjY0X2RlY3J5cHQoZGF0YSkKKyAgICBpbnQgZGF0YTsKK3sKKyAgICByZXR1 cm4gX2Nhc3Rfb2ZiNjRfZGVjcnlwdChkYXRhLCAmY2FzdF9mYltPRkJfMTI4XS5zdHJlYW1zW0RJ Ul9ERUNSWVBULTFdKTsKK30KKyNlbmRpZgorCitpbnQKK2Nhc3RleHBfb2ZiNjRfZGVjcnlwdChk YXRhKQorICAgIGludCBkYXRhOworeworICAgIHJldHVybiBfY2FzdF9vZmI2NF9kZWNyeXB0KGRh dGEsICZjYXN0X2ZiW09GQl80MF0uc3RyZWFtc1tESVJfREVDUllQVC0xXSk7Cit9CisKK3N0YXRp YyBpbnQKK19jYXN0X29mYjY0X2RlY3J5cHQoZGF0YSwgc3RwKQorICAgIGludCBkYXRhOworICAg IHJlZ2lzdGVyIHN0cnVjdCBjYXN0X3N0aW5mbyAqc3RwOworeworICAgIGludCBpbmRleDsKKwor ICAgIGlmIChkYXRhID09IC0xKSB7CisgICAgICAgIC8qCisgICAgICAgICogQmFjayB1cCBvbmUg Ynl0ZS4gIEl0IGlzIGFzc3VtZWQgdGhhdCB3ZSB3aWxsCisgICAgICAgICogbmV2ZXIgYmFjayB1 cCBtb3JlIHRoYW4gb25lIGJ5dGUuICBJZiB3ZSBkbywgdGhpcworICAgICAgICAqIG1heSBvciBt YXkgbm90IHdvcmsuCisgICAgICAgICovCisgICAgICAgIGlmIChzdHAtPnN0cl9pbmRleCkKKyAg ICAgICAgICAgIC0tc3RwLT5zdHJfaW5kZXg7CisgICAgICAgIHJldHVybigwKTsKKyAgICB9CisK KyAgICBpbmRleCA9IHN0cC0+c3RyX2luZGV4Kys7CisgICAgaWYgKGluZGV4ID09IHNpemVvZihC bG9jaykpIHsKKyAgICAgICAgQmxvY2sgYjsKKyAgICAgICAgY2tfY2FzdF9lY2JfZW5jcnlwdChi LCBzdHAtPnN0cl9mZWVkLCAmc3RwLT5zdHJfc2NoZWQsIDApOworICAgICAgICBtZW1jcHkoKHZv aWQgKilzdHAtPnN0cl9mZWVkLCAodm9pZCAqKWIsIHNpemVvZihCbG9jaykpOworICAgICAgICBz dHAtPnN0cl9pbmRleCA9IDE7ICAgICAvKiBOZXh0IHRpbWUgd2lsbCBiZSAxICovCisgICAgICAg IGluZGV4ID0gMDsgICAgICAgICAgICAgIC8qIEJ1dCBub3cgdXNlIDAgKi8KKyAgICB9CisKKyAg ICByZXR1cm4oZGF0YSBeIHN0cC0+c3RyX2ZlZWRbaW5kZXhdKTsKK30KKworLyoKKyAqIENvcHly aWdodCAoYykgMTk5NyBTdGFuZm9yZCBVbml2ZXJzaXR5CisgKgorICogUGVybWlzc2lvbiB0byB1 c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSwgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZSBhbmQK KyAqIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3 aXRob3V0IGZlZSwgcHJvdmlkZWQKKyAqIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2Vz IGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbgorICogYWxsIGNvcGllcyBvZiB0 aGUgc29mdHdhcmUgYW5kIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbi4KKyAqCisgKiBUSEUgU09GVFdB UkUgSVMgUFJPVklERUQgIkFTLUlTIiBBTkQgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwK KyAqIEVYUFJFU1MsIElNUExJRUQgT1IgT1RIRVJXSVNFLCBJTkNMVURJTkcgV0lUSE9VVCBMSU1J VEFUSU9OLCBBTlkKKyAqIFdBUlJBTlRZIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBTVEFORk9S RCBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkNJREVOVEFMLAorICogSU5ESVJFQ1QgT1Ig Q09OU0VRVUVOVElBTCBEQU1BR0VTIE9GIEFOWSBLSU5ELCBPUiBBTlkgREFNQUdFUyBXSEFUU09F VkVSCisgKiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVU SEVSIE9SIE5PVCBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgREFNQUdFLCBBTkQg T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIEFSSVNJTkcgT1VUCisgKiBPRiBPUiBJTiBDT05O RUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICov CisKKy8qCisgKiBjYXN0LmMKKyAqIEF1dGhvcjogVG9tIFd1CisgKgorICogQW4gaW1wbGVtZW50 YXRpb24gb2YgdGhlIENBU1QtMTI4IGVuY3J5cHRpb24gYWxnb3JpdGhtLCBhcworICogc3BlY2lm aWVkIGluIFJGQyAyMTQ0LgorICovCisKKy8qIFRoZSBmaXJzdCBmb3VyIFMtYm94ZXMgYXJlIGZv ciBlbmNyeXB0aW9uL2RlY3J5cHRpb24gKi8KKworc3RhdGljIHVpbnQzMiBTMVtdID0geworICAw eDMwZmI0MGQ0LCAweDlmYTBmZjBiLCAweDZiZWNjZDJmLCAweDNmMjU4YzdhLCAweDFlMjEzZjJm LCAweDljMDA0ZGQzLAorICAweDYwMDNlNTQwLCAweGNmOWZjOTQ5LCAweGJmZDRhZjI3LCAweDg4 YmJiZGI1LCAweGUyMDM0MDkwLCAweDk4ZDA5Njc1LAorICAweDZlNjNhMGUwLCAweDE1YzM2MWQy LCAweGMyZTc2NjFkLCAweDIyZDRmZjhlLCAweDI4NjgzYjZmLCAweGMwN2ZkMDU5LAorICAweGZm MjM3OWM4LCAweDc3NWY1MGUyLCAweDQzYzM0MGQzLCAweGRmMmY4NjU2LCAweDg4N2NhNDFhLCAw eGEyZDJiZDJkLAorICAweGExYzllMGQ2LCAweDM0NmM0ODE5LCAweDYxYjc2ZDg3LCAweDIyNTQw ZjJmLCAweDJhYmUzMmUxLCAweGFhNTQxNjZiLAorICAweDIyNTY4ZTNhLCAweGEyZDM0MWQwLCAw eDY2ZGI0MGM4LCAweGE3ODQzOTJmLCAweDAwNGRmZjJmLCAweDJkYjlkMmRlLAorICAweDk3OTQz ZmFjLCAweDRhOTdjMWQ4LCAweDUyNzY0NGI3LCAweGI1ZjQzN2E3LCAweGI4MmNiYWVmLCAweGQ3 NTFkMTU5LAorICAweDZmZjdmMGVkLCAweDVhMDk3YTFmLCAweDgyN2I2OGQwLCAweDkwZWNmNTJl LCAweDIyYjBjMDU0LCAweGJjOGU1OTM1LAorICAweDRiNmQyZjdmLCAweDUwYmI2NGEyLCAweGQy NjY0OTEwLCAweGJlZTU4MTJkLCAweGI3MzMyMjkwLCAweGU5M2IxNTlmLAorICAweGI0OGVlNDEx LCAweDRiZmYzNDVkLCAweGZkNDVjMjQwLCAweGFkMzE5NzNmLCAweGM0ZjZkMDJlLCAweDU1ZmM4 MTY1LAorICAweGQ1YjFjYWFkLCAweGExYWMyZGFlLCAweGEyZDRiNzZkLCAweGMxOWIwYzUwLCAw eDg4MjI0MGYyLCAweDBjNmU0ZjM4LAorICAweGE0ZTRiZmQ3LCAweDRmNWJhMjcyLCAweDU2NGMx ZDJmLCAweGM1OWM1MzE5LCAweGI5NDllMzU0LCAweGIwNDY2OWZlLAorICAweGIxYjZhYjhhLCAw eGM3MTM1OGRkLCAweDYzODVjNTQ1LCAweDExMGY5MzVkLCAweDU3NTM4YWQ1LCAweDZhMzkwNDkz LAorICAweGU2M2QzN2UwLCAweDJhNTRmNmIzLCAweDNhNzg3ZDVmLCAweDYyNzZhMGI1LCAweDE5 YTZmY2RmLCAweDdhNDIyMDZhLAorICAweDI5ZjlkNGQ1LCAweGY2MWIxODkxLCAweGJiNzIyNzVl LCAweGFhNTA4MTY3LCAweDM4OTAxMDkxLCAweGM2YjUwNWViLAorICAweDg0YzdjYjhjLCAweDJh ZDc1YTBmLCAweDg3NGExNDI3LCAweGEyZDE5MzZiLCAweDJhZDI4NmFmLCAweGFhNTZkMjkxLAor ICAweGQ3ODk0MzYwLCAweDQyNWM3NTBkLCAweDkzYjM5ZTI2LCAweDE4NzE4NGM5LCAweDZjMDBi MzJkLCAweDczZTJiYjE0LAorICAweGEwYmViYzNjLCAweDU0NjIzNzc5LCAweDY0NDU5ZWFiLCAw eDNmMzI4YjgyLCAweDc3MThjZjgyLCAweDU5YTJjZWE2LAorICAweDA0ZWUwMDJlLCAweDg5ZmU3 OGU2LCAweDNmYWIwOTUwLCAweDMyNWZmNmMyLCAweDgxMzgzZjA1LCAweDY5NjNjNWM4LAorICAw eDc2Y2I1YWQ2LCAweGQ0OTk3NGM5LCAweGNhMTgwZGNmLCAweDM4MDc4MmQ1LCAweGM3ZmE1Y2Y2 LCAweDhhYzMxNTExLAorICAweDM1ZTc5ZTEzLCAweDQ3ZGE5MWQwLCAweGY0MGY5MDg2LCAweGE3 ZTI0MTllLCAweDMxMzY2MjQxLCAweDA1MWVmNDk1LAorICAweGFhNTczYjA0LCAweDRhODA1ZDhk LCAweDU0ODMwMGQwLCAweDAwMzIyYTNjLCAweGJmNjRjZGRmLCAweGJhNTdhNjhlLAorICAweDc1 YzYzNzJiLCAweDUwYWZkMzQxLCAweGE3YzEzMjc1LCAweDkxNWEwYmY1LCAweDZiNTRiZmFiLCAw eDJiMGIxNDI2LAorICAweGFiNGNjOWQ3LCAweDQ0OWNjZDgyLCAweGY3ZmJmMjY1LCAweGFiODVj NWYzLCAweDFiNTVkYjk0LCAweGFhZDRlMzI0LAorICAweGNmYTRiZDNmLCAweDJkZWFhM2UyLCAw eDllMjA0ZDAyLCAweGM4YmQyNWFjLCAweGVhZGY1NWIzLCAweGQ1YmQ5ZTk4LAorICAweGUzMTIz MWIyLCAweDJhZDVhZDZjLCAweDk1NDMyOWRlLCAweGFkYmU0NTI4LCAweGQ4NzEwZjY5LCAweGFh NTFjOTBmLAorICAweGFhNzg2YmY2LCAweDIyNTEzZjFlLCAweGFhNTFhNzliLCAweDJhZDM0NGNj LDB4N2I1YTQxZjAsIDB4ZDM3Y2ZiYWQsCisgIDB4MWIwNjk1MDUsIDB4NDFlY2U0OTEsIDB4YjRj MzMyZTYsIDB4MDMyMjY4ZDQsIDB4Yzk2MDBhY2MsIDB4Y2UzODdlNmQsCisgIDB4YmY2YmIxNmMs IDB4NmE3MGZiNzgsIDB4MGQwM2Q5YzksIDB4ZDRkZjM5ZGUsIDB4ZTAxMDYzZGEsIDB4NDczNmY0 NjQsCisgIDB4NWFkMzI4ZDgsIDB4YjM0N2NjOTYsIDB4NzViYjBmYzMsIDB4OTg1MTFiZmIsIDB4 NGZmYmNjMzUsIDB4YjU4YmNmNmEsCisgIDB4ZTExZjBhYmMsIDB4YmZjNWZlNGEsIDB4YTcwYWVj MTAsIDB4YWMzOTU3MGEsMHgzZjA0NDQyZiwgMHg2MTg4YjE1MywKKyAgMHhlMDM5N2EyZSwgMHg1 NzI3Y2I3OSwgMHg5Y2ViNDE4ZiwgMHgxY2FjZDY4ZCwgMHgyYWQzN2M5NiwgMHgwMTc1Y2I5ZCwK KyAgMHhjNjlkZmYwOSwgMHhjNzViNjVmMCwgMHhkOWRiNDBkOCwgMHhlYzBlNzc3OSwgMHg0NzQ0 ZWFkNCwgMHhiMTFjMzI3NCwKKyAgMHhkZDI0Y2I5ZSwgMHg3ZTFjNTRiZCwgMHhmMDExNDRmOSwg MHhkMjI0MGViMSwgMHg5Njc1YjNmZCwgMHhhM2FjMzc1NSwKKyAgMHhkNDdjMjdhZiwgMHg1MWM4 NWY0ZCwgMHg1NjkwNzU5NiwgMHhhNWJiMTVlNiwweDU4MDMwNGYwLCAweGNhMDQyY2YxLAorICAw eDAxMWEzN2VhLCAweDhkYmZhYWRiLCAweDM1YmEzZTRhLCAweDM1MjZmZmEwLCAweGMzN2I0ZDA5 LCAweGJjMzA2ZWQ5LAorICAweDk4YTUyNjY2LCAweDU2NDhmNzI1LCAweGZmNWU1NjlkLCAweDBj ZWQ2M2QwLCAweDdjNjNiMmNmLCAweDcwMGI0NWUxLAorICAweGQ1ZWE1MGYxLCAweDg1YTkyODcy LCAweGFmMWZiZGE3LCAweGQ0MjM0ODcwLCAweGE3ODcwYmYzLCAweDJkM2I0ZDc5LAorICAweDQy ZTA0MTk4LCAweDBjZDBlZGU3LCAweDI2NDcwZGI4LCAweGY4ODE4MTRjLDB4NDc0ZDZhZDcsIDB4 N2MwYzVlNWMsCisgIDB4ZDEyMzE5NTksIDB4MzgxYjcyOTgsIDB4ZjVkMmY0ZGIsIDB4YWI4Mzg2 NTMsIDB4NmUyZjFlMjMsIDB4ODM3MTljOWUsCisgIDB4YmQ5MWUwNDYsIDB4OWE1NjQ1NmUsIDB4 ZGMzOTIwMGMsIDB4MjBjOGM1NzEsIDB4OTYyYmRhMWMsIDB4ZTFlNjk2ZmYsCisgIDB4YjE0MWFi MDgsIDB4N2NjYTg5YjksIDB4MWE2OWU3ODMsIDB4MDJjYzQ4NDMsIDB4YTJmN2M1NzksIDB4NDI5 ZWY0N2QsCisgIDB4NDI3YjE2OWMsIDB4NWFjOWYwNDksIDB4ZGQ4ZjBmMDAsIDB4NWM4MTY1YmYK K307CisKK3N0YXRpYyB1aW50MzIgUzJbXSA9IHsKKyAgMHgxZjIwMTA5NCwgMHhlZjBiYTc1Yiwg MHg2OWUzY2Y3ZSwgMHgzOTNmNDM4MCwgMHhmZTYxY2Y3YSwgMHhlZWM1MjA3YSwKKyAgMHg1NTg4 OWM5NCwgMHg3MmZjMDY1MSwgMHhhZGE3ZWY3OSwgMHg0ZTFkNzIzNSwgMHhkNTVhNjNjZSwgMHhk ZTA0MzZiYSwKKyAgMHg5OWM0MzBlZiwgMHg1ZjBjMDc5NCwgMHgxOGRjZGI3ZCwgMHhhMWQ2ZWZm MywgMHhhMGI1MmY3YiwgMHg1OWU4MzYwNSwKKyAgMHhlZTE1YjA5NCwgMHhlOWZmZDkwOSwgMHhk YzQ0MDA4NiwgMHhlZjk0NDQ1OSwgMHhiYTgzY2NiMywgMHhlMGMzY2RmYiwKKyAgMHhkMWRhNDE4 MSwgMHgzYjA5MmFiMSwgMHhmOTk3ZjFjMSwgMHhhNWU2Y2Y3YiwgMHgwMTQyMGRkYiwgMHhlNGU3 ZWY1YiwKKyAgMHgyNWExZmY0MSwgMHhlMTgwZjgwNiwgMHgxZmM0MTA4MCwgMHgxNzliZWU3YSwg MHhkMzdhYzZhOSwgMHhmZTU4MzBhNCwKKyAgMHg5OGRlOGI3ZiwgMHg3N2U4M2Y0ZSwgMHg3OTky OTI2OSwgMHgyNGZhOWY3YiwgMHhlMTEzYzg1YiwgMHhhY2M0MDA4MywKKyAgMHhkNzUwMzUyNSwg MHhmN2VhNjE1ZiwgMHg2MjE0MzE1NCwgMHgwZDU1NGI2MywgMHg1ZDY4MTEyMSwgMHhjODY2YzM1 OSwKKyAgMHgzZDYzY2Y3MywgMHhjZWUyMzRjMCwgMHhkNGQ4N2U4NywgMHg1YzY3MmIyMSwgMHgw NzFmNjE4MSwgMHgzOWY3NjI3ZiwKKyAgMHgzNjFlMzA4NCwgMHhlNGViNTczYiwgMHg2MDJmNjRh NCwgMHhkNjNhY2Q5YywgMHgxYmJjNDYzNSwgMHg5ZTgxMDMyZCwKKyAgMHgyNzAxZjUwYywgMHg5 OTg0N2FiNCwgMHhhMGUzZGY3OSwgMHhiYTZjZjM4YywgMHgxMDg0MzA5NCwgMHgyNTM3YTk1ZSwK KyAgMHhmNDZmNmZmZSwgMHhhMWZmM2IxZiwgMHgyMDhjZmI2YSwgMHg4ZjQ1OGM3NCwgMHhkOWUw YTIyNywgMHg0ZWM3M2EzNCwKKyAgMHhmYzg4NGY2OSwgMHgzZTRkZThkZiwgMHhlZjBlMDA4OCwg MHgzNTU5NjQ4ZCwgMHg4YTQ1Mzg4YywgMHgxZDgwNDM2NiwKKyAgMHg3MjFkOWJmZCwgMHhhNTg2 ODRiYiwgMHhlODI1NjMzMywgMHg4NDRlODIxMiwgMHgxMjhkODA5OCwgMHhmZWQzM2ZiNCwKKyAg MHhjZTI4MGFlMSwgMHgyN2UxOWJhNSwgMHhkNWE2YzI1MiwgMHhlNDk3NTRiZCwgMHhjNWQ2NTVk ZCwgMHhlYjY2NzA2NCwKKyAgMHg3Nzg0MGI0ZCwgMHhhMWI2YTgwMSwgMHg4NGRiMjZhOSwgMHhl MGI1NjcxNCwgMHgyMWYwNDNiNywgMHhlNWQwNTg2MCwKKyAgMHg1NGYwMzA4NCwgMHgwNjZmZjQ3 MiwgMHhhMzFhYTE1MywgMHhkYWRjNDc1NSwgMHhiNTYyNWRiZiwgMHg2ODU2MWJlNiwKKyAgMHg4 M2NhNmI5NCwgMHgyZDZlZDIzYiwgMHhlY2NmMDFkYiwgMHhhNmQzZDBiYSwgMHhiNjgwM2Q1Yywg MHhhZjc3YTcwOSwKKyAgMHgzM2I0YTM0YywgMHgzOTdiYzhkNiwgMHg1ZWUyMmI5NSwgMHg1ZjBl NTMwNCwgMHg4MWVkNmY2MSwgMHgyMGU3NDM2NCwKKyAgMHhiNDVlMTM3OCwgMHhkZTE4NjM5Yiwg MHg4ODFjYTEyMiwgMHhiOTY3MjZkMSwgMHg4MDQ5YTdlOCwgMHgyMmI3ZGE3YiwKKyAgMHg1ZTU1 MmQyNSwgMHg1MjcyZDIzNywgMHg3OWQyOTUxYywgMHhjNjBkODk0YywgMHg0ODhjYjQwMiwgMHgx YmE0ZmU1YiwKKyAgMHhhNGIwOWY2YiwgMHgxY2E4MTVjZiwgMHhhMjBjMzAwNSwgMHg4ODcxZGY2 MywgMHhiOWRlMmZjYiwgMHgwY2M2YzllOSwKKyAgMHgwYmVlZmY1MywgMHhlMzIxNDUxNywgMHhi NDU0MjgzNSwgMHg5ZjYzMjkzYywgMHhlZTQxZTcyOSwgMHg2ZTFkMmQ3YywKKyAgMHg1MDA0NTI4 NiwgMHgxZTY2ODVmMywgMHhmMzM0MDFjNiwgMHgzMGEyMmM5NSwgMHgzMWE3MDg1MCwgMHg2MDkz MGYxMywKKyAgMHg3M2Y5ODQxNywgMHhhMTI2OTg1OSwgMHhlYzY0NWM0NCwgMHg1MmM4NzdhOSwg MHhjZGZmMzNhNiwgMHhhMDJiMTc0MSwKKyAgMHg3Y2JhZDlhMiwgMHgyMTgwMDM2ZiwgMHg1MGQ5 OWMwOCwgMHhjYjNmNDg2MSwgMHhjMjZiZDc2NSwgMHg2NGEzZjZhYiwKKyAgMHg4MDM0MjY3Niwg MHgyNWE3NWU3YiwgMHhlNGU2ZDFmYywgMHgyMGM3MTBlNiwgMHhjZGYwYjY4MCwgMHgxNzg0NGQz YiwKKyAgMHgzMWVlZjg0ZCwgMHg3ZTA4MjRlNCwgMHgyY2NiNDllYiwgMHg4NDZhM2JhZSwgMHg4 ZmY3Nzg4OCwgMHhlZTVkNjBmNiwKKyAgMHg3YWY3NTY3MywgMHgyZmRkNWNkYiwgMHhhMTE2MzFj MSwgMHgzMGY2NmY0MywgMHhiM2ZhZWM1NCwgMHgxNTdmZDdmYSwKKyAgMHhlZjg1NzljYywgMHhk MTUyZGU1OCwgMHhkYjJmZmQ1ZSwgMHg4ZjMyY2UxOSwgMHgzMDZhZjk3YSwgMHgwMmYwM2VmOCwK KyAgMHg5OTMxOWFkNSwgMHhjMjQyZmEwZiwgMHhhN2UzZWJiMCwgMHhjNjhlNDkwNiwgMHhiOGRh MjMwYywgMHg4MDgyMzAyOCwKKyAgMHhkY2RlZjNjOCwgMHhkMzVmYjE3MSwgMHgwODhhMWJjOCwg MHhiZWMwYzU2MCwgMHg2MWEzYzllOCwgMHhiY2E4ZjU0ZCwKKyAgMHhjNzJmZWZmYSwgMHgyMjgy MmU5OSwgMHg4MmM1NzBiNCwgMHhkOGQ5NGU4OSwgMHg4YjFjMzRiYywgMHgzMDFlMTZlNiwKKyAg MHgyNzNiZTk3OSwgMHhiMGZmZWFhNiwgMHg2MWQ5YjhjNiwgMHgwMGIyNDg2OSwgMHhiN2ZmY2Uz ZiwgMHgwOGRjMjgzYiwKKyAgMHg0M2RhZjY1YSwgMHhmN2UxOTc5OCwgMHg3NjE5YjcyZiwgMHg4 ZjFjOWJhNCwgMHhkYzg2MzdhMCwgMHgxNmE3ZDNiMSwKKyAgMHg5ZmMzOTNiNywgMHhhNzEzNmVl YiwgMHhjNmJjYzYzZSwgMHgxYTUxMzc0MiwgMHhlZjY4MjhiYywgMHg1MjAzNjVkNiwKKyAgMHgy ZDZhNzdhYiwgMHgzNTI3ZWQ0YiwgMHg4MjFmZDIxNiwgMHgwOTVjNmUyZSwgMHhkYjkyZjJmYiwg MHg1ZWVhMjljYiwKKyAgMHgxNDU4OTJmNSwgMHg5MTU4NGY3ZiwgMHg1NDgzNjk3YiwgMHgyNjY3 YThjYywgMHg4NTE5NjA0OCwgMHg4YzRiYWNlYSwKKyAgMHg4MzM4NjBkNCwgMHgwZDIzZTBmOSwg MHg2YzM4N2U4YSwgMHgwYWU2ZDI0OSwgMHhiMjg0NjAwYywgMHhkODM1NzMxZCwKKyAgMHhkY2Ix YzY0NywgMHhhYzRjNTZlYSwgMHgzZWJkODFiMywgMHgyMzBlYWJiMCwgMHg2NDM4YmM4NywgMHhm MGI1YjFmYSwKKyAgMHg4ZjVlYTJiMywgMHhmYzE4NDY0MiwgMHgwYTAzNmI3YSwgMHg0ZmIwODli ZCwgMHg2NDlkYTU4OSwgMHhhMzQ1NDE1ZSwKKyAgMHg1YzAzODMyMywgMHgzZTVkM2JiOSwgMHg0 M2Q3OTU3MiwgMHg3ZTZkZDA3YywgMHgwNmRmZGYxZSwgMHg2YzZjYzRlZiwKKyAgMHg3MTYwYTUz OSwgMHg3M2JmYmU3MCwgMHg4Mzg3NzYwNSwgMHg0NTIzZWNmMQorfTsKKworc3RhdGljIHVpbnQz MiBTM1tdID0geworICAweDhkZWZjMjQwLCAweDI1ZmE1ZDlmLCAweGViOTAzZGJmLCAweGU4MTBj OTA3LCAweDQ3NjA3ZmZmLCAweDM2OWZlNDRiLAorICAweDhjMWZjNjQ0LCAweGFlY2VjYTkwLCAw eGJlYjFmOWJmLCAweGVlZmJjYWVhLCAweGU4Y2YxOTUwLCAweDUxZGYwN2FlLAorICAweDkyMGU4 ODA2LCAweGYwYWQwNTQ4LCAweGUxM2M4ZDgzLCAweDkyNzAxMGQ1LCAweDExMTA3ZDlmLCAweDA3 NjQ3ZGI5LAorICAweGIyZTNlNGQ0LCAweDNkNGYyODVlLCAweGI5YWZhODIwLCAweGZhZGU4MmUw LCAweGEwNjcyNjhiLCAweDgyNzI3OTJlLAorICAweDU1M2ZiMmMwLCAweDQ4OWFlMjJiLCAweGQ0 ZWY5Nzk0LCAweDEyNWUzZmJjLCAweDIxZmZmY2VlLCAweDgyNWIxYmZkLAorICAweDkyNTVjNWVk LCAweDEyNTdhMjQwLCAweDRlMWE4MzAyLCAweGJhZTA3ZmZmLCAweDUyODI0NmU3LCAweDhlNTcx NDBlLAorICAweDMzNzNmN2JmLCAweDhjOWY4MTg4LCAweGE2ZmM0ZWU4LCAweGM5ODJiNWE1LCAw eGE4YzAxZGI3LCAweDU3OWZjMjY0LAorICAweDY3MDk0ZjMxLCAweGYyYmQzZjVmLCAweDQwZmZm N2MxLCAweDFmYjc4ZGZjLCAweDhlNmJkMmMxLCAweDQzN2JlNTliLAorICAweDk5YjAzZGJmLCAw eGI1ZGJjNjRiLCAweDYzOGRjMGU2LCAweDU1ODE5ZDk5LCAweGExOTdjODFjLCAweDRhMDEyZDZl LAorICAweGM1ODg0YTI4LCAweGNjYzM2ZjcxLCAweGI4NDNjMjEzLCAweDZjMDc0M2YxLCAweDgz MDk4OTNjLCAweDBmZWRkZDVmLAorICAweDJmN2ZlODUwLCAweGQ3YzA3ZjdlLCAweDAyNTA3ZmJm LCAweDVhZmI5YTA0LCAweGE3NDdkMmQwLCAweDE2NTExOTJlLAorICAweGFmNzBiZjNlLCAweDU4 YzMxMzgwLCAweDVmOTgzMDJlLCAweDcyN2NjM2M0LCAweDBhMGZiNDAyLCAweDBmN2ZlZjgyLAor ICAweDhjOTZmZGFkLCAweDVkMmMyYWFlLCAweDhlZTk5YTQ5LCAweDUwZGE4OGI4LCAweDg0Mjdm NGEwLCAweDFlYWM1NzkwLAorICAweDc5NmZiNDQ5LCAweDgyNTJkYzE1LCAweGVmYmQ3ZDliLCAw eGE2NzI1OTdkLCAweGFkYTg0MGQ4LCAweDQ1ZjU0NTA0LAorICAweGZhNWQ3NDAzLCAweGU4M2Vj MzA1LCAweDRmOTE3NTFhLCAweDkyNTY2OWMyLCAweDIzZWZlOTQxLCAweGE5MDNmMTJlLAorICAw eDYwMjcwZGYyLCAweDAyNzZlNGI2LCAweDk0ZmQ2NTc0LCAweDkyNzk4NWIyLCAweDgyNzZkYmNi LCAweDAyNzc4MTc2LAorICAweGY4YWY5MThkLCAweDRlNDhmNzllLCAweDhmNjE2ZGRmLCAweGUy OWQ4NDBlLCAweDg0MmY3ZDgzLCAweDM0MGNlNWM4LAorICAweDk2YmJiNjgyLCAweDkzYjRiMTQ4 LCAweGVmMzAzY2FiLCAweDk4NGZhZjI4LCAweDc3OWZhZjliLCAweDkyZGM1NjBkLAorICAweDIy NGQxZTIwLCAweDg0MzdhYTg4LCAweDdkMjlkYzk2LCAweDI3NTZkM2RjLCAweDhiOTA3Y2VlLCAw eGI1MWZkMjQwLAorICAweGU3YzA3Y2UzLCAweGU1NjZiNGExLCAweGMzZTk2MTVlLCAweDNjZjgy MDlkLCAweDYwOTRkMWUzLCAweGNkOWNhMzQxLAorICAweDVjNzY0NjBlLCAweDAwZWE5ODNiLCAw eGQ0ZDY3ODgxLCAweGZkNDc1NzJjLCAweGY3NmNlZGQ5LCAweGJkYTgyMjljLAorICAweDEyN2Rh ZGFhLCAweDQzOGEwNzRlLCAweDFmOTdjMDkwLCAweDA4MWJkYjhhLCAweDkzYTA3ZWJlLCAweGI5 MzhjYTE1LAorICAweDk3YjAzY2ZmLCAweDNkYzJjMGY4LCAweDhkMWFiMmVjLCAweDY0MzgwZTUx LCAweDY4Y2M3YmZiLCAweGQ5MGYyNzg4LAorICAweDEyNDkwMTgxLCAweDVkZTVmZmQ0LCAweGRk N2VmODZhLCAweDc2YTJlMjE0LCAweGI5YTQwMzY4LCAweDkyNWQ5NThmLAorICAweDRiMzlmZmZh LCAweGJhMzlhZWU5LCAweGE0ZmZkMzBiLCAweGZhZjc5MzNiLCAweDZkNDk4NjIzLCAweDE5M2Ni Y2ZhLAorICAweDI3NjI3NTQ1LCAweDgyNWNmNDdhLCAweDYxYmQ4YmEwLCAweGQxMWU0MmQxLCAw eGNlYWQwNGY0LCAweDEyN2VhMzkyLAorICAweDEwNDI4ZGI3LCAweDgyNzJhOTcyLCAweDkyNzBj NGE4LCAweDEyN2RlNTBiLCAweDI4NWJhMWM4LCAweDNjNjJmNDRmLAorICAweDM1YzBlYWE1LCAw eGU4MDVkMjMxLCAweDQyODkyOWZiLCAweGI0ZmNkZjgyLCAweDRmYjY2YTUzLCAweDBlN2RjMTVi LAorICAweDFmMDgxZmFiLCAweDEwODYxOGFlLCAweGZjZmQwODZkLCAweGY5ZmYyODg5LCAweDY5 NGJjYzExLCAweDIzNmE1Y2FlLAorICAweDEyZGVjYTRkLCAweDJjM2Y4Y2M1LCAweGQyZDAyZGZl LCAweGY4ZWY1ODk2LCAweGU0Y2Y1MmRhLCAweDk1MTU1YjY3LAorICAweDQ5NGE0ODhjLCAweGI5 YjZhODBjLCAweDVjOGY4MmJjLCAweDg5ZDM2YjQ1LCAweDNhNjA5NDM3LCAweGVjMDBjOWE5LAor ICAweDQ0NzE1MjUzLCAweDBhODc0YjQ5LCAweGQ3NzNiYzQwLCAweDdjMzQ2NzFjLCAweDAyNzE3 ZWY2LCAweDRmZWI1NTM2LAorICAweGEyZDAyZmZmLCAweGQyYmY2MGM0LCAweGQ0M2YwM2MwLCAw eDUwYjRlZjZkLCAweDA3NDc4Y2QxLCAweDAwNmUxODg4LAorICAweGEyZTUzZjU1LCAweGI5ZTZk NGJjLCAweGEyMDQ4MDE2LCAweDk3NTczODMzLCAweGQ3MjA3ZDY3LCAweGRlMGY4ZjNkLAorICAw eDcyZjg3YjMzLCAweGFiY2M0ZjMzLCAweDc2ODhjNTVkLCAweDdiMDBhNmIwLCAweDk0N2IwMDAx LCAweDU3MDA3NWQyLAorICAweGY5YmI4OGY4LCAweDg5NDIwMTllLCAweDQyNjRhNWZmLCAweDg1 NjMwMmUwLCAweDcyZGJkOTJiLCAweGVlOTcxYjY5LAorICAweDZlYTIyZmRlLCAweDVmMDhhZTJi LCAweGFmN2E2MTZkLCAweGU1Yzk4NzY3LCAweGNmMWZlYmQyLCAweDYxZWZjOGMyLAorICAweGYx YWMyNTcxLCAweGNjODIzOWMyLCAweDY3MjE0Y2I4LCAweGIxZTU4M2QxLCAweGI3ZGMzZTYyLCAw eDdmMTBiZGNlLAorICAweGY5MGE1YzM4LCAweDBmZjA0NDNkLCAweDYwNmU2ZGM2LCAweDYwNTQz YTQ5LCAweDU3MjdjMTQ4LCAweDJiZTk4YTFkLAorICAweDhhYjQxNzM4LCAweDIwZTFiZTI0LCAw eGFmOTZkYTBmLCAweDY4NDU4NDI1LCAweDk5ODMzYmU1LCAweDYwMGQ0NTdkLAorICAweDI4MmY5 MzUwLCAweDgzMzRiMzYyLCAweGQ5MWQxMTIwLCAweDJiNmQ4ZGEwLCAweDY0MmIxZTMxLCAweDlj MzA1YTAwLAorICAweDUyYmNlNjg4LCAweDFiMDM1ODhhLCAweGY3YmFlZmQ1LCAweDQxNDJlZDlj LCAweGE0MzE1YzExLCAweDgzMzIzZWM1LAorICAweGRmZWY0NjM2LCAweGExMzNjNTAxLCAweGU5 ZDM1MzFjLCAweGVlMzUzNzgzCit9OworCitzdGF0aWMgdWludDMyIFM0W10gPSB7CisgIDB4OWRi MzA0MjAsIDB4MWZiNmU5ZGUsIDB4YTdiZTdiZWYsIDB4ZDI3M2EyOTgsIDB4NGE0ZjdiZGIsIDB4 NjRhZDhjNTcsCisgIDB4ODU1MTA0NDMsIDB4ZmEwMjBlZDEsIDB4N2UyODdhZmYsIDB4ZTYwZmI2 NjMsIDB4MDk1ZjM1YTEsIDB4NzllYmYxMjAsCisgIDB4ZmQwNTlkNDMsIDB4NjQ5N2I3YjEsIDB4 ZjM2NDFmNjMsIDB4MjQxZTRhZGYsIDB4MjgxNDdmNWYsIDB4NGZhMmI4Y2QsCisgIDB4Yzk0MzAw NDAsIDB4MGNjMzIyMjAsIDB4ZmRkMzBiMzAsIDB4YzBhNTM3NGYsIDB4MWQyZDAwZDksIDB4MjQx NDdiMTUsCisgIDB4ZWU0ZDExMWEsIDB4MGZjYTUxNjcsIDB4NzFmZjkwNGMsIDB4MmQxOTVmZmUs IDB4MWEwNTY0NWYsIDB4MGMxM2ZlZmUsCisgIDB4MDgxYjA4Y2EsIDB4MDUxNzAxMjEsIDB4ODA1 MzAxMDAsIDB4ZTgzZTVlZmUsIDB4YWM5YWY0ZjgsIDB4N2ZlNzI3MDEsCisgIDB4ZDJiOGVlNWYs IDB4MDZkZjQyNjEsIDB4YmI5ZTliOGEsIDB4NzI5M2VhMjUsIDB4Y2U4NGZmZGYsIDB4ZjU3MTg4 MDEsCisgIDB4M2RkNjRiMDQsIDB4YTI2ZjI2M2IsIDB4N2VkNDg0MDAsIDB4NTQ3ZWViZTYsIDB4 NDQ2ZDRjYTAsIDB4NmNmM2Q2ZjUsCisgIDB4MjY0OWFiZGYsIDB4YWVhMGM3ZjUsIDB4MzYzMzhj YzEsIDB4NTAzZjdlOTMsIDB4ZDM3NzIwNjEsIDB4MTFiNjM4ZTEsCisgIDB4NzI1MDBlMDMsIDB4 ZjgwZWIyYmIsIDB4YWJlMDUwMmUsIDB4ZWM4ZDc3ZGUsIDB4NTc5NzFlODEsIDB4ZTE0ZjY3NDYs CisgIDB4YzkzMzU0MDAsIDB4NjkyMDMxOGYsIDB4MDgxZGJiOTksIDB4ZmZjMzA0YTUsIDB4NGQz NTE4MDUsIDB4N2YzZDVjZTMsCisgIDB4YTZjODY2YzYsIDB4NWQ1YmNjYTksIDB4ZGFlYzZmZWEs IDB4OWY5MjZmOTEsIDB4OWY0NjIyMmYsIDB4Mzk5MTQ2N2QsCisgIDB4YTViZjZkOGUsIDB4MTE0 M2M0NGYsIDB4NDM5NTgzMDIsIDB4ZDAyMTRlZWIsIDB4MDIyMDgzYjgsIDB4M2ZiNjE4MGMsCisg IDB4MThmODkzMWUsIDB4MjgxNjU4ZTYsIDB4MjY0ODZlM2UsIDB4OGJkNzhhNzAsIDB4NzQ3N2U0 YzEsIDB4YjUwNmUwN2MsCisgIDB4ZjMyZDBhMjUsIDB4NzkwOThiMDIsIDB4ZTRlYWJiODEsIDB4 MjgxMjNiMjMsIDB4NjlkZWFkMzgsIDB4MTU3NGNhMTYsCisgIDB4ZGY4NzFiNjIsIDB4MjExYzQw YjcsIDB4YTUxYTllZjksIDB4MDAxNDM3N2IsIDB4MDQxZThhYzgsIDB4MDkxMTQwMDMsCisgIDB4 YmQ1OWU0ZDIsIDB4ZTNkMTU2ZDUsIDB4NGZlODc2ZDUsIDB4MmY5MWEzNDAsIDB4NTU3YmU4ZGUs IDB4MDBlYWU0YTcsCisgIDB4MGNlNWMyZWMsIDB4NGRiNGJiYTYsIDB4ZTc1NmJkZmYsIDB4ZGQz MzY5YWMsIDB4ZWMxN2IwMzUsIDB4MDY1NzIzMjcsCisgIDB4OTlhZmM4YjAsIDB4NTZjOGMzOTEs IDB4NmI2NTgxMWMsIDB4NWUxNDYxMTksIDB4NmU4NWNiNzUsIDB4YmUwN2MwMDIsCisgIDB4YzIz MjU1NzcsIDB4ODkzZmY0ZWMsIDB4NWJiZmM5MmQsIDB4ZDBlYzNiMjUsIDB4Yjc4MDFhYjcsIDB4 OGQ2ZDNiMjQsCisgIDB4MjBjNzYzZWYsIDB4YzM2NmE1ZmMsIDB4OWMzODI4ODAsIDB4MGFjZTMy MDUsIDB4YWFjOTU0OGEsIDB4ZWNhMWQ3YzcsCisgIDB4MDQxYWZhMzIsIDB4MWQxNjYyNWEsIDB4 NjcwMTkwMmMsIDB4OWI3NTdhNTQsIDB4MzFkNDc3ZjcsIDB4OTEyNmIwMzEsCisgIDB4MzZjYzZm ZGIsIDB4YzcwYjhiNDYsIDB4ZDllNjZhNDgsIDB4NTZlNTVhNzksIDB4MDI2YTRjZWIsIDB4NTI0 MzdlZmYsCisgIDB4MmY4Zjc2YjQsIDB4MGRmOTgwYTUsIDB4ODY3NGNkZTMsIDB4ZWRkYTA0ZWIs IDB4MTdhOWJlMDQsIDB4MmMxOGY0ZGYsCisgIDB4Yjc3NDdmOWQsIDB4YWIyYWY3YjQsIDB4ZWZj MzRkMjAsIDB4MmUwOTZiN2MsIDB4MTc0MWEyNTQsIDB4ZTViNmEwMzUsCisgIDB4MjEzZDQyZjYs IDB4MmMxYzdjMjYsIDB4NjFjMmY1MGYsIDB4NjU1MmRhZjksIDB4ZDJjMjMxZjgsIDB4MjUxMzBm NjksCisgIDB4ZDgxNjdmYTIsIDB4MDQxOGYyYzgsIDB4MDAxYTk2YTYsIDB4MGQxNTI2YWIsIDB4 NjMzMTVjMjEsIDB4NWUwYTcyZWMsCisgIDB4NDliYWZlZmQsIDB4MTg3OTA4ZDksIDB4OGQwZGJk ODYsIDB4MzExMTcwYTcsIDB4M2U5YjY0MGMsIDB4Y2MzZTEwZDcsCisgIDB4ZDVjYWQzYjYsIDB4 MGNhZWMzODgsIDB4ZjczMDAxZTEsIDB4NmM3MjhhZmYsIDB4NzFlYWUyYTEsIDB4MWY5YWYzNmUs CisgIDB4Y2ZjYmQxMmYsIDB4YzFkZTg0MTcsIDB4YWMwN2JlNmIsIDB4Y2I0NGExZDgsIDB4OGI5 YjBmNTYsIDB4MDEzOTg4YzMsCisgIDB4YjFjNTJmY2EsIDB4YjRiZTMxY2QsIDB4ZDg3ODI4MDYs IDB4MTJhM2E0ZTIsIDB4NmY3ZGU1MzIsIDB4NThmZDdlYjYsCisgIDB4ZDAxZWU5MDAsIDB4MjRh ZGZmYzIsIDB4ZjQ5OTBmYzUsIDB4OTcxMWFhYzUsIDB4MDAxZDdiOTUsIDB4ODJlNWU3ZDIsCisg IDB4MTA5ODczZjYsIDB4MDA2MTMwOTYsIDB4YzMyZDk1MjEsIDB4YWRhMTIxZmYsIDB4Mjk5MDg0 MTUsIDB4N2ZiYjk3N2YsCisgIDB4YWY5ZWIzZGIsIDB4MjljOWVkMmEsIDB4NWNlMmE0NjUsIDB4 YTczMGYzMmMsIDB4ZDBhYTNmZTgsIDB4OGE1Y2MwOTEsCisgIDB4ZDQ5ZTJjZTcsIDB4MGNlNDU0 YTksIDB4ZDYwYWNkODYsIDB4MDE1ZjE5MTksIDB4NzcwNzkxMDMsIDB4ZGVhMDNhZjYsCisgIDB4 NzhhODU2NWUsIDB4ZGVlMzU2ZGYsIDB4MjFmMDVjYmUsIDB4OGI3NWUzODcsIDB4YjNjNTA2NTEs IDB4YjhhNWMzZWYsCisgIDB4ZDhlZWI2ZDIsIDB4ZTUyM2JlNzcsIDB4YzIxNTQ1MjksIDB4MmY2 OWVmZGYsIDB4YWZlNjdhZmIsIDB4ZjQ3MGM0YjIsCisgIDB4ZjNlMGViNWIsIDB4ZDZjYzk4NzYs IDB4MzllNDQ2MGMsIDB4MWZkYTg1MzgsIDB4MTk4NzgzMmYsIDB4Y2EwMDczNjcsCisgIDB4YTk5 MTQ0ZjgsIDB4Mjk2YjI5OWUsIDB4NDkyZmMyOTUsIDB4OTI2NmJlYWIsIDB4YjU2NzZlNjksIDB4 OWJkM2RkZGEsCisgIDB4ZGY3ZTA1MmYsIDB4ZGIyNTcwMWMsIDB4MWI1ZTUxZWUsIDB4ZjY1MzI0 ZTYsIDB4NmFmY2UzNmMsIDB4MDMxNmNjMDQsCisgIDB4ODY0NDIxM2UsIDB4YjdkYzU5ZDAsIDB4 Nzk2NTI5MWYsIDB4Y2NkNmZkNDMsIDB4NDE4MjM5NzksIDB4OTMyYmNkZjYsCisgIDB4YjY1N2Mz NGQsIDB4NGVkZmQyODIsIDB4N2FlNTI5MGMsIDB4M2NiOTUzNmIsIDB4ODUxZTIwZmUsIDB4OTgz MzU1N2UsCisgIDB4MTNlY2YwYjAsIDB4ZDNmZmIzNzIsIDB4M2Y4NWM1YzEsIDB4MGFlZjdlZDIK K307CisKKy8qIEVuY3J5cHQvZGVjcnlwdCBvbmUgNjQtYml0IGJsb2NrIG9mIGRhdGEgKi8KKwor dm9pZAorY2tfY2FzdF9lY2JfZW5jcnlwdChvdXQsIGluLCBzY2hlZCwgbW9kZSkKKyAgICB1aW50 OHAgb3V0OworICAgIHVpbnQ4cCBpbjsKKyAgICBDYXN0S2V5U2NoZWQgKiBzY2hlZDsKKyAgICBp bnQgbW9kZTsgICAgICAgICAgIC8qIHplcm8gbWVhbnMgZW5jcnlwdCAqLworeworICAgIHVpbnQz MiB0WzJdOworCisjaWZkZWYgTElUVExFX0VORElBTgorICAgIHRbMF0gPSAoaW5bMF0gPDwgMjQp IHwgKGluWzFdIDw8IDE2KSB8IChpblsyXSA8PCA4KSB8IGluWzNdOworICAgIHRbMV0gPSAoaW5b NF0gPDwgMjQpIHwgKGluWzVdIDw8IDE2KSB8IChpbls2XSA8PCA4KSB8IGluWzddOworI2Vsc2UK KyAgICB0WzBdID0gKih1aW50MzJwKSBpbjsKKyAgICB0WzFdID0gKih1aW50MzJwKSAoaW4gKyA0 KTsKKyNlbmRpZgorCisgICAgY2tfY2FzdF9lY2JfY3J5cHQodCwgc2NoZWQsIG1vZGUpOworCisj aWZkZWYgTElUVExFX0VORElBTgorICAgIG91dFswXSA9ICh0WzBdID4+IDI0KSAmIDB4ZmY7Cisg ICAgb3V0WzFdID0gKHRbMF0gPj4gMTYpICYgMHhmZjsKKyAgICBvdXRbMl0gPSAodFswXSA+PiA4 KSAmIDB4ZmY7CisgICAgb3V0WzNdID0gdFswXSAmIDB4ZmY7CisgICAgb3V0WzRdID0gKHRbMV0g Pj4gMjQpICYgMHhmZjsKKyAgICBvdXRbNV0gPSAodFsxXSA+PiAxNikgJiAweGZmOworICAgIG91 dFs2XSA9ICh0WzFdID4+IDgpICYgMHhmZjsKKyAgICBvdXRbN10gPSB0WzFdICYgMHhmZjsKKyNl bHNlCisgICAgKih1aW50MzJwKSBvdXQgPSB0WzBdOworICAgICoodWludDMycCkgKG91dCArIDQp ID0gdFsxXTsKKyNlbmRpZgorfQorCit2b2lkCitja19jYXN0X2VjYl9jcnlwdChkYXRhLCBzY2hl ZCwgbW9kZSkKKyAgICB1aW50MzJwIGRhdGE7CisgICAgQ2FzdEtleVNjaGVkICogc2NoZWQ7Cisg ICAgaW50IG1vZGU7Cit7CisgICAgcmVnaXN0ZXIgdWludDMyIEwsIFIsIHRlbXA7CisgICAgcmVn aXN0ZXIgc3RydWN0IENhc3RTdWJrZXlQYWlyICoga3A7CisgICAgcmVnaXN0ZXIgdWludDhwIElh LCBJYiwgSWMsIElkOworICAgIHVpbnQzMiBJOworCisjaWZkZWYgTElUVExFX0VORElBTgorICAg IElkID0gKHVpbnQ4cCkgJkk7CisgICAgSWMgPSBJZCArIDE7CisgICAgSWIgPSBJYyArIDE7Cisg ICAgSWEgPSBJYiArIDE7CisjZWxzZQorICAgIElhID0gKHVpbnQ4cCkgJkk7CisgICAgSWIgPSBJ YSArIDE7CisgICAgSWMgPSBJYiArIDE7CisgICAgSWQgPSBJYyArIDE7CisjZW5kaWYKKworICAg IEwgPSBkYXRhWzBdOworICAgIFIgPSBkYXRhWzFdOworCisjZGVmaW5lIHR5cGUwKGxlZnQscmln aHQpICAgICAgIFwKKyAgICAgIHRlbXAgPSBrcC0+S20gKyByaWdodDtcCisgICAgICBJID0gKHRl bXAgPDwga3AtPktyKSB8ICh0ZW1wID4+ICgzMiAtIGtwLT5LcikpO1wKKyAgICAgIGxlZnQgXj0g KChTMVsqSWFdIF4gUzJbKkliXSkgLSBTM1sqSWNdKSArIFM0WypJZF07CisKKyNkZWZpbmUgdHlw ZTEobGVmdCxyaWdodCkgICAgICAgXAorICAgICAgdGVtcCA9IGtwLT5LbSBeIHJpZ2h0O1wKKyAg ICAgIEkgPSAodGVtcCA8PCBrcC0+S3IpIHwgKHRlbXAgPj4gKDMyIC0ga3AtPktyKSk7XAorICAg ICAgbGVmdCBePSAoKFMxWypJYV0gLSBTMlsqSWJdKSArIFMzWypJY10pIF4gUzRbKklkXTsKKwor I2RlZmluZSB0eXBlMihsZWZ0LHJpZ2h0KSAgICAgICBcCisgICAgICB0ZW1wID0ga3AtPkttIC0g cmlnaHQ7XAorICAgICAgSSA9ICh0ZW1wIDw8IGtwLT5LcikgfCAodGVtcCA+PiAoMzIgLSBrcC0+ S3IpKTtcCisgICAgICBsZWZ0IF49ICgoUzFbKklhXSArIFMyWypJYl0pIF4gUzNbKkljXSkgLSBT NFsqSWRdOworCisgICAgaWYobW9kZSkgeworI2lmbmRlZiBDQVNUX0VYUE9SVF9FTkNSWVBUSU9O CisgICAgICAgIGlmKHNjaGVkLT5rc2l6ZSA+IDEwKSB7CisgICAgICAgICAgICBrcCA9ICZzY2hl ZC0+S1sxNV07CisgICAgICAgICAgICB0eXBlMChMLCBSKTsgLS1rcDsKKyAgICAgICAgICAgIHR5 cGUyKFIsIEwpOyAtLWtwOworICAgICAgICAgICAgdHlwZTEoTCwgUik7IC0ta3A7CisgICAgICAg ICAgICB0eXBlMChSLCBMKTsgLS1rcDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisjZW5kaWYK KyAgICAgICAga3AgPSAmc2NoZWQtPktbMTFdOworICAgICAgICB0eXBlMihMLCBSKTsgLS1rcDsK KyAgICAgICAgdHlwZTEoUiwgTCk7IC0ta3A7CisgICAgICAgIHR5cGUwKEwsIFIpOyAtLWtwOwor ICAgICAgICB0eXBlMihSLCBMKTsgLS1rcDsKKyAgICAgICAgdHlwZTEoTCwgUik7IC0ta3A7Cisg ICAgICAgIHR5cGUwKFIsIEwpOyAtLWtwOworICAgICAgICB0eXBlMihMLCBSKTsgLS1rcDsKKyAg ICAgICAgdHlwZTEoUiwgTCk7IC0ta3A7CisgICAgICAgIHR5cGUwKEwsIFIpOyAtLWtwOworICAg ICAgICB0eXBlMihSLCBMKTsgLS1rcDsKKyAgICAgICAgdHlwZTEoTCwgUik7IC0ta3A7CisgICAg ICAgIHR5cGUwKFIsIEwpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAga3AgPSAmc2NoZWQt PktbMF07CisgICAgICAgIHR5cGUwKEwsIFIpOyArK2twOworICAgICAgICB0eXBlMShSLCBMKTsg KytrcDsKKyAgICAgICAgdHlwZTIoTCwgUik7ICsra3A7CisgICAgICAgIHR5cGUwKFIsIEwpOyAr K2twOworICAgICAgICB0eXBlMShMLCBSKTsgKytrcDsKKyAgICAgICAgdHlwZTIoUiwgTCk7ICsr a3A7CisgICAgICAgIHR5cGUwKEwsIFIpOyArK2twOworICAgICAgICB0eXBlMShSLCBMKTsgKytr cDsKKyAgICAgICAgdHlwZTIoTCwgUik7ICsra3A7CisgICAgICAgIHR5cGUwKFIsIEwpOyArK2tw OworICAgICAgICB0eXBlMShMLCBSKTsgKytrcDsKKyAgICAgICAgdHlwZTIoUiwgTCk7ICsra3A7 CisjaWZuZGVmIENBU1RfRVhQT1JUX0VOQ1JZUFRJT04KKyAgICAgICAgaWYoc2NoZWQtPmtzaXpl ID4gMTApIHsKKyAgICAgICAgICAgIHR5cGUwKEwsIFIpOyArK2twOworICAgICAgICAgICAgdHlw ZTEoUiwgTCk7ICsra3A7CisgICAgICAgICAgICB0eXBlMihMLCBSKTsgKytrcDsKKyAgICAgICAg ICAgIHR5cGUwKFIsIEwpOworICAgICAgICB9CisjZW5kaWYKKyAgICB9CisKKyAgICBkYXRhWzBd ID0gUjsKKyAgICBkYXRhWzFdID0gTDsKK30KKworLyogVGhlIGxhc3QgZm91ciBTLWJveGVzIGFy ZSBmb3Iga2V5IHNjaGVkdWxlIHNldHVwICovCisKK3N0YXRpYyB1aW50MzIgUzVbXSA9IHsKKyAg MHg3ZWM5MGMwNCwgMHgyYzZlNzRiOSwgMHg5YjBlNjZkZiwgMHhhNjMzNzkxMSwgMHhiODZhN2Zm ZiwgMHgxZGQzNThmNSwKKyAgMHg0NGRkOWQ0NCwgMHgxNzMxMTY3ZiwgMHgwOGZiZjFmYSwgMHhl N2Y1MTFjYywgMHhkMjA1MWIwMCwgMHg3MzVhYmEwMCwKKyAgMHgyYWI3MjJkOCwgMHgzODYzODFj YiwgMHhhY2Y2MjQzYSwgMHg2OWJlZmQ3YSwgMHhlNmEyZTc3ZiwgMHhmMGM3MjBjZCwKKyAgMHhj NDQ5NDgxNiwgMHhjY2Y1YzE4MCwgMHgzODg1MTY0MCwgMHgxNWIwYTg0OCwgMHhlNjhiMThjYiwg MHg0Y2FhZGVmZiwKKyAgMHg1ZjQ4MGEwMSwgMHgwNDEyYjJhYSwgMHgyNTk4MTRmYywgMHg0MWQw ZWZlMiwgMHg0ZTQwYjQ4ZCwgMHgyNDhlYjZmYiwKKyAgMHg4ZGJhMWNmZSwgMHg0MWE5OWIwMiwg MHgxYTU1MGEwNCwgMHhiYThmNjVjYiwgMHg3MjUxZjRlNywgMHg5NWE1MTcyNSwKKyAgMHhjMTA2 ZWNkNywgMHg5N2E1OTgwYSwgMHhjNTM5YjlhYSwgMHg0ZDc5ZmU2YSwgMHhmMmYzZjc2MywgMHg2 OGFmODA0MCwKKyAgMHhlZDBjOWU1NiwgMHgxMWI0OTU4YiwgMHhlMWViNWE4OCwgMHg4NzA5ZTZi MCwgMHhkN2UwNzE1NiwgMHg0ZTI5ZmVhNywKKyAgMHg2MzY2ZTUyZCwgMHgwMmQxYzAwMCwgMHhj NGFjOGUwNSwgMHg5Mzc3ZjU3MSwgMHgwYzA1MzcyYSwgMHg1Nzg1MzVmMiwKKyAgMHgyMjYxYmUw MiwgMHhkNjQyYTBjOSwgMHhkZjEzYTI4MCwgMHg3NGI1NWJkMiwgMHg2ODIxOTljMCwgMHhkNDIx ZTVlYywKKyAgMHg1M2ZiM2NlOCwgMHhjOGFkZWRiMywgMHgyOGE4N2ZjOSwgMHgzZDk1OTk4MSwg MHg1YzFmZjkwMCwgMHhmZTM4ZDM5OSwKKyAgMHgwYzRlZmYwYiwgMHgwNjI0MDdlYSwgMHhhYTJm NGZiMSwgMHg0ZmI5Njk3NiwgMHg5MGM3OTUwNSwgMHhiMGE4YTc3NCwKKyAgMHhlZjU1YTFmZiwg MHhlNTljYTJjMiwgMHhhNmI2MmQyNywgMHhlNjZhNDI2MywgMHhkZjY1MDAxZiwgMHgwZWM1MDk2 NiwKKyAgMHhkZmRkNTViYywgMHgyOWRlMDY1NSwgMHg5MTFlNzM5YSwgMHgxN2FmODk3NSwgMHgz MmM3OTExYywgMHg4OWY4OTQ2OCwKKyAgMHgwZDAxZTk4MCwgMHg1MjQ3NTVmNCwgMHgwM2I2M2Nj OSwgMHgwY2M4NDRiMiwgMHhiY2YzZjBhYSwgMHg4N2FjMzZlOSwKKyAgMHhlNTNhNzQyNiwgMHgw MWIzZDgyYiwgMHgxYTllNzQ0OSwgMHg2NGVlMmQ3ZSwgMHhjZGRiYjFkYSwgMHgwMWM5NDkxMCwK KyAgMHhiODY4YmY4MCwgMHgwZDI2ZjNmZCwgMHg5MzQyZWRlNywgMHgwNGE1YzI4NCwgMHg2MzY3 MzdiNiwgMHg1MGY1YjYxNiwKKyAgMHhmMjQ3NjZlMywgMHg4ZWNhMzZjMSwgMHgxMzZlMDVkYiwg MHhmZWYxODM5MSwgMHhmYjg4N2EzNywgMHhkNmU3ZjdkNCwKKyAgMHhjN2ZiN2RjOSwgMHgzMDYz ZmNkZiwgMHhiNmY1ODlkZSwgMHhlYzI5NDFkYSwgMHgyNmU0NjY5NSwgMHhiNzU2NjQxOSwKKyAg MHhmNjU0ZWZjNSwgMHhkMDhkNThiNywgMHg0ODkyNTQwMSwgMHhjMWJhY2I3ZiwgMHhlNWZmNTUw ZiwgMHhiNjA4MzA0OSwKKyAgMHg1YmI1ZDBlOCwgMHg4N2Q3MmU1YSwgMHhhYjZhNmVlMSwgMHgy MjNhNjZjZSwgMHhjNjJiZjNjZCwgMHg5ZTA4ODVmOSwKKyAgMHg2OGNiM2U0NywgMHgwODZjMDEw ZiwgMHhhMjFkZTgyMCwgMHhkMThiNjlkZSwgMHhmM2Y2NTc3NywgMHhmYTAyYzNmNiwKKyAgMHg0 MDdlZGFjMywgMHhjYmIzZDU1MCwgMHgxNzkzMDg0ZCwgMHhiMGQ3MGViYSwgMHgwYWIzNzhkNSwg MHhkOTUxZmIwYywKKyAgMHhkZWQ3ZGE1NiwgMHg0MTI0YmJlNCwgMHg5NGNhMGI1NiwgMHgwZjU3 NTVkMSwgMHhlMGUxZTU2ZSwgMHg2MTg0YjViZSwKKyAgMHg1ODBhMjQ5ZiwgMHg5NGY3NGJjMCwg MHhlMzI3ODg4ZSwgMHg5ZjdiNTU2MSwgMHhjM2RjMDI4MCwgMHgwNTY4NzcxNSwKKyAgMHg2NDZj NmJkNywgMHg0NDkwNGRiMywgMHg2NmI0ZjBhMywgMHhjMGYxNjQ4YSwgMHg2OTdlZDVhZiwgMHg0 OWU5MmZmNiwKKyAgMHgzMDllMzc0ZiwgMHgyY2I2MzU2YSwgMHg4NTgwODU3MywgMHg0OTkxZjg0 MCwgMHg3NmYwYWUwMiwgMHgwODNiZTg0ZCwKKyAgMHgyODQyMWM5YSwgMHg0NDQ4OTQwNiwgMHg3 MzZlNGNiOCwgMHhjMTA5MjkxMCwgMHg4YmM5NWZjNiwgMHg3ZDg2OWNmNCwKKyAgMHgxMzRmNjE2 ZiwgMHgyZTc3MTE4ZCwgMHhiMzFiMmJlMSwgMHhhYTkwYjQ3MiwgMHgzY2E1ZDcxNywgMHg3ZDE2 MWJiYSwKKyAgMHg5Y2FkOTAxMCwgMHhhZjQ2MmJhMiwgMHg5ZmU0NTlkMiwgMHg0NWQzNDU1OSwg MHhkOWYyZGExMywgMHhkYmM2NTQ4NywKKyAgMHhmM2U0Zjk0ZSwgMHgxNzZkNDg2ZiwgMHgwOTdj MTNlYSwgMHg2MzFkYTVjNywgMHg0NDVmNzM4MiwgMHgxNzU2ODNmNCwKKyAgMHhjZGM2NmE5Nywg MHg3MGJlMDI4OCwgMHhiM2NkY2Y3MiwgMHg2ZTVkZDJmMywgMHgyMDkzNjA3OSwgMHg0NTliODBh NSwKKyAgMHhiZTYwZTJkYiwgMHhhOWMyMzEwMSwgMHhlYmE1MzE1YywgMHgyMjRlNDJmMiwgMHgx YzVjMTU3MiwgMHhmNjcyMWIyYywKKyAgMHgxYWQyZmZmMywgMHg4YzI1NDA0ZSwgMHgzMjRlZDcy ZiwgMHg0MDY3YjdmZCwgMHgwNTIzMTM4ZSwgMHg1Y2EzYmM3OCwKKyAgMHhkYzBmZDY2ZSwgMHg3 NTkyMjI4MywgMHg3ODRkNmIxNywgMHg1OGViYjE2ZSwgMHg0NDA5NGY4NSwgMHgzZjQ4MWQ4NywK KyAgMHhmY2ZlYWU3YiwgMHg3N2I1ZmY3NiwgMHg4YzIzMDJiZiwgMHhhYWY0NzU1NiwgMHg1ZjQ2 YjAyYSwgMHgyYjA5MjgwMSwKKyAgMHgzZDM4ZjVmNywgMHgwY2E4MWYzNiwgMHg1MmFmNGE4YSwg MHg2NmQ1ZTdjMCwgMHhkZjNiMDg3NCwgMHg5NTA1NTExMCwKKyAgMHgxYjVhZDdhOCwgMHhmNjFl ZDVhZCwgMHg2Y2Y2ZTQ3OSwgMHgyMDc1ODE4NCwgMHhkMGNlZmE2NSwgMHg4OGY3YmU1OCwKKyAg MHg0YTA0NjgyNiwgMHgwZmY2ZjhmMywgMHhhMDljN2Y3MCwgMHg1MzQ2YWJhMCwgMHg1Y2U5NmMy OCwgMHhlMTc2ZWRhMywKKyAgMHg2YmFjMzA3ZiwgMHgzNzY4MjlkMiwgMHg4NTM2MGZhOSwgMHgx N2UzZmUyYSwgMHgyNGI3OTc2NywgMHhmNWE5NmIyMCwKKyAgMHhkNmNkMjU5NSwgMHg2OGZmMWVi ZiwgMHg3NTU1NDQyYywgMHhmMTlmMDZiZSwgMHhmOWUwNjU5YSwgMHhlZWI5NDkxZCwKKyAgMHgz NDAxMDcxOCwgMHhiYjMwY2FiOCwgMHhlODIyZmUxNSwgMHg4ODU3MDk4MywgMHg3NTBlNjI0OSwg MHhkYTYyN2U1NSwKKyAgMHg1ZTc2ZmZhOCwgMHhiMTUzNDU0NiwgMHg2ZDQ3ZGUwOCwgMHhlZmU5 ZTdkNAorfTsKKworc3RhdGljIHVpbnQzMiBTNltdID0geworICAweGY2ZmE4ZjlkLCAweDJjYWM2 Y2UxLCAweDRjYTM0ODY3LCAweGUyMzM3ZjdjLCAweDk1ZGIwOGU3LCAweDAxNjg0M2I0LAorICAw eGVjZWQ1Y2JjLCAweDMyNTU1M2FjLCAweGJmOWYwOTYwLCAweGRmYTFlMmVkLCAweDgzZjA1Nzlk LCAweDYzZWQ4NmI5LAorICAweDFhYjZhNmI4LCAweGRlNWViZTM5LCAweGYzOGZmNzMyLCAweDg5 ODliMTM4LCAweDMzZjE0OTYxLCAweGMwMTkzN2JkLAorICAweGY1MDZjNmRhLCAweGU0NjI1ZTdl LCAweGEzMDhlYTk5LCAweDRlMjNlMzNjLCAweDc5Y2JkN2NjLCAweDQ4YTE0MzY3LAorICAweGEz MTQ5NjE5LCAweGZlYzk0YmQ1LCAweGExMTQxNzRhLCAweGVhYTAxODY2LCAweGEwODRkYjJkLCAw eDA5YTg0ODZmLAorICAweGE4ODg2MTRhLCAweDI5MDBhZjk4LCAweDAxNjY1OTkxLCAweGUxOTky ODYzLCAweGM4ZjMwYzYwLCAweDJlNzhlZjNjLAorICAweGQwZDUxOTMyLCAweGNmMGZlYzE0LCAw eGY3Y2EwN2QyLCAweGQwYTgyMDcyLCAweGZkNDExOTdlLCAweDkzMDVhNmIwLAorICAweGU4NmJl M2RhLCAweDc0YmVkM2NkLCAweDM3MmRhNTNjLCAweDRjN2Y0NDQ4LCAweGRhYjVkNDQwLCAweDZk YmEwZWMzLAorICAweDA4MzkxOWE3LCAweDlmYmFlZWQ5LCAweDQ5ZGJjZmIwLCAweDRlNjcwYzUz LCAweDVjM2Q5YzAxLCAweDY0YmRiOTQxLAorICAweDJjMGU2MzZhLCAweGJhN2RkOWNkLCAweGVh NmY3Mzg4LCAweGU3MGJjNzYyLCAweDM1ZjI5YWRiLCAweDVjNGNkZDhkLAorICAweGYwZDQ4ZDhj LCAweGI4ODE1M2UyLCAweDA4YTE5ODY2LCAweDFhZTJlYWM4LCAweDI4NGNhZjg5LCAweGFhOTI4 MjIzLAorICAweDkzMzRiZTUzLCAweDNiM2EyMWJmLCAweDE2NDM0YmUzLCAweDlhZWEzOTA2LCAw eGVmZThjMzZlLCAweGY4OTBjZGQ5LAorICAweDgwMjI2ZGFlLCAweGMzNDBhNGEzLCAweGRmN2U5 YzA5LCAweGE2OTRhODA3LCAweDViN2M1ZWNjLCAweDIyMWRiM2E2LAorICAweDlhNjlhMDJmLCAw eDY4ODE4YTU0LCAweGNlYjIyOTZmLCAweDUzYzA4NDNhLCAweGZlODkzNjU1LCAweDI1YmZlNjhh LAorICAweGI0NjI4YWJjLCAweGNmMjIyZWJmLCAweDI1YWM2ZjQ4LCAweGE5YTk5Mzg3LCAweDUz YmRkYjY1LCAweGU3NmZmYmU3LAorICAweGU5NjdmZDc4LCAweDBiYTkzNTYzLCAweDhlMzQyYmMx LCAweGU4YTExYmU5LCAweDQ5ODA3NDBkLCAweGM4MDg3ZGZjLAorICAweDhkZTRiZjk5LCAweGEx MTEwMWEwLCAweDdmZDM3OTc1LCAweGRhNWEyNmMwLCAweGU4MWY5OTRmLCAweDk1MjhjZDg5LAor ICAweGZkMzM5ZmVkLCAweGI4NzgzNGJmLCAweDVmMDQ0NTZkLCAweDIyMjU4Njk4LCAweGM5YzRj ODNiLCAweDJkYzE1NmJlLAorICAweDRmNjI4ZGFhLCAweDU3ZjU1ZWM1LCAweGUyMjIwYWJlLCAw eGQyOTE2ZWJmLCAweDRlYzc1Yjk1LCAweDI0ZjJjM2MwLAorICAweDQyZDE1ZDk5LCAweGNkMGQ3 ZmEwLCAweDdiNmUyN2ZmLCAweGE4ZGM4YWYwLCAweDczNDVjMTA2LCAweGY0MWUyMzJmLAorICAw eDM1MTYyMzg2LCAweGU2ZWE4OTI2LCAweDMzMzNiMDk0LCAweDE1N2VjNmYyLCAweDM3MmI3NGFm LCAweDY5MjU3M2U0LAorICAweGU5YTlkODQ4LCAweGYzMTYwMjg5LCAweDNhNjJlZjFkLCAweGE3 ODdlMjM4LCAweGYzYTVmNjc2LCAweDc0MzY0ODUzLAorICAweDIwOTUxMDYzLCAweDQ1NzY2OThk LCAweGI2ZmFkNDA3LCAweDU5MmFmOTUwLCAweDM2ZjczNTIzLCAweDRjZmI2ZTg3LAorICAweDdk YTRjZWMwLCAweDZjMTUyZGFhLCAweGNiMDM5NmE4LCAweGM1MGRmZTVkLCAweGZjZDcwN2FiLCAw eDA5MjFjNDJmLAorICAweDg5ZGZmMGJiLCAweDVmZTJiZTc4LCAweDQ0OGY0ZjMzLCAweDc1NDYx M2M5LCAweDJiMDVkMDhkLCAweDQ4YjlkNTg1LAorICAweGRjMDQ5NDQxLCAweGM4MDk4ZjliLCAw eDdkZWRlNzg2LCAweGMzOWEzMzczLCAweDQyNDEwMDA1LCAweDZhMDkxNzUxLAorICAweDBlZjNj OGE2LCAweDg5MDA3MmQ2LCAweDI4MjA3NjgyLCAweGE5YTlmN2JlLCAweGJmMzI2NzlkLCAweGQ0 NWI1Yjc1LAorICAweGIzNTNmZDAwLCAweGNiYjBlMzU4LCAweDgzMGYyMjBhLCAweDFmOGZiMjE0 LCAweGQzNzJjZjA4LCAweGNjM2M0YTEzLAorICAweDhjZjYzMTY2LCAweDA2MWM4N2JlLCAweDg4 Yzk4Zjg4LCAweDYwNjJlMzk3LCAweDQ3Y2Y4ZTdhLCAweGI2Yzg1MjgzLAorICAweDNjYzJhY2Zi LCAweDNmYzA2OTc2LCAweDRlOGYwMjUyLCAweDY0ZDgzMTRkLCAweGRhMzg3MGUzLCAweDFlNjY1 NDU5LAorICAweGMxMDkwOGYwLCAweDUxMzAyMWE1LCAweDZjNWI2OGI3LCAweDgyMmY4YWEwLCAw eDMwMDdjZDNlLCAweDc0NzE5ZWVmLAorICAweGRjODcyNjgxLCAweDA3MzM0MGQ0LCAweDdlNDMy ZmQ5LCAweDBjNWVjMjQxLCAweDg4MDkyODZjLCAweGY1OTJkODkxLAorICAweDA4YTkzMGY2LCAw eDk1N2VmMzA1LCAweGI3ZmJmZmJkLCAweGMyNjZlOTZmLCAweDZmZTRhYzk4LCAweGIxNzNlY2Mw LAorICAweGJjNjBiNDJhLCAweDk1MzQ5OGRhLCAweGZiYTFhZTEyLCAweDJkNGJkNzM2LCAweDBm MjVmYWFiLCAweGE0ZjNmY2ViLAorICAweGUyOTY5MTIzLCAweDI1N2YwYzNkLCAweDkzNDhhZjQ5 LCAweDM2MTQwMGJjLCAweGU4ODE2ZjRhLCAweDM4MTRmMjAwLAorICAweGEzZjk0MDQzLCAweDlj N2E1NGMyLCAweGJjNzA0ZjU3LCAweGRhNDFlN2Y5LCAweGMyNWFkMzNhLCAweDU0ZjRhMDg0LAor ICAweGIxN2Y1NTA1LCAweDU5MzU3Y2JlLCAweGVkYmQxNWM4LCAweDdmOTdjNWFiLCAweGJhNWFj N2I1LCAweGI2ZjZkZWFmLAorICAweDNhNDc5YzNhLCAweDUzMDJkYTI1LCAweDY1M2Q3ZTZhLCAw eDU0MjY4ZDQ5LCAweDUxYTQ3N2VhLCAweDUwMTdkNTViLAorICAweGQ3ZDI1ZDg4LCAweDQ0MTM2 Yzc2LCAweDA0MDRhOGM4LCAweGI4ZTVhMTIxLCAweGI4MWE5MjhhLCAweDYwZWQ1ODY5LAorICAw eDk3YzU1Yjk2LCAweGVhZWM5OTFiLCAweDI5OTM1OTEzLCAweDAxZmRiN2YxLCAweDA4OGU4ZGZh LCAweDlhYjZmNmY1LAorICAweDNiNGNiZjlmLCAweDRhNWRlM2FiLCAweGU2MDUxZDM1LCAweGEw ZTFkODU1LCAweGQzNmI0Y2YxLCAweGY1NDRlZGViLAorICAweGIwZTkzNTI0LCAweGJlYmI4ZmJk LCAweGEyZDc2MmNmLCAweDQ5YzkyZjU0LCAweDM4YjVmMzMxLCAweDcxMjhhNDU0LAorICAweDQ4 MzkyOTA1LCAweGE2NWIxZGI4LCAweDg1MWM5N2JkLCAweGQ2NzVjZjJmCit9OworCitzdGF0aWMg dWludDMyIFM3W10gPSB7CisgIDB4ODVlMDQwMTksIDB4MzMyYmY1NjcsIDB4NjYyZGJmZmYsIDB4 Y2ZjNjU2OTMsIDB4MmE4ZDdmNmYsIDB4YWI5YmM5MTIsCisgIDB4ZGU2MDA4YTEsIDB4MjAyOGRh MWYsIDB4MDIyN2JjZTcsIDB4NGQ2NDI5MTYsIDB4MThmYWMzMDAsIDB4NTBmMThiODIsCisgIDB4 MmNiMmNiMTEsIDB4YjIzMmU3NWMsIDB4NGIzNjk1ZjIsIDB4YjI4NzA3ZGUsIDB4YTA1ZmJjZjYs IDB4Y2Q0MTgxZTksCisgIDB4ZTE1MDIxMGMsIDB4ZTI0ZWYxYmQsIDB4YjE2OGMzODEsIDB4ZmRl NGU3ODksIDB4NWM3OWIwZDgsIDB4MWU4YmZkNDMsCisgIDB4NGQ0OTUwMDEsIDB4MzhiZTQzNDEs IDB4OTEzY2VlMWQsIDB4OTJhNzljM2YsIDB4MDg5NzY2YmUsIDB4YmFlZWFkZjQsCisgIDB4MTI4 NmJlY2YsIDB4YjZlYWNiMTksIDB4MjY2MGMyMDAsIDB4NzU2NWJkZTQsIDB4NjQyNDFmN2EsIDB4 ODI0OGRjYTksCisgIDB4YzNiM2FkNjYsIDB4MjgxMzYwODYsIDB4MGJkOGRmYTgsIDB4MzU2ZDFj ZjIsIDB4MTA3Nzg5YmUsIDB4YjNiMmU5Y2UsCisgIDB4MDUwMmFhOGYsIDB4MGJjMDM1MWUsIDB4 MTY2YmY1MmEsIDB4ZWIxMmZmODIsIDB4ZTM0ODY5MTEsIDB4ZDM0ZDc1MTYsCisgIDB4NGU3YjNh ZmYsIDB4NWY0MzY3MWIsIDB4OWNmNmUwMzcsIDB4NDk4MWFjODMsIDB4MzM0MjY2Y2UsIDB4OGM5 MzQxYjcsCisgIDB4ZDBkODU0YzAsIDB4Y2IzYTZjODgsIDB4NDdiYzI4MjksIDB4NDcyNWJhMzcs IDB4YTY2YWQyMmIsIDB4N2FkNjFmMWUsCisgIDB4MGM1Y2JhZmEsIDB4NDQzN2YxMDcsIDB4YjZl Nzk5NjIsIDB4NDJkMmQ4MTYsIDB4MGE5NjEyODgsIDB4ZTFhNWMwNmUsCisgIDB4MTM3NDllNjcs IDB4NzJmYzA4MWEsIDB4YjFkMTM5ZjcsIDB4Zjk1ODM3NDUsIDB4Y2YxOWRmNTgsIDB4YmVjM2Y3 NTYsCisgIDB4YzA2ZWJhMzAsIDB4MDcyMTFiMjQsIDB4NDVjMjg4MjksIDB4Yzk1ZTMxN2YsIDB4 YmM4ZWM1MTEsIDB4MzhiYzQ2ZTksCisgIDB4YzZlNmZhMTQsIDB4YmFlODU4NGEsIDB4YWQ0ZWJj NDYsIDB4NDY4ZjUwOGIsIDB4NzgyOTQzNWYsIDB4ZjEyNDE4M2IsCisgIDB4ODIxZGJhOWYsIDB4 YWZmNjBmZjQsIDB4ZWEyYzRlNmQsIDB4MTZlMzkyNjQsIDB4OTI1NDRhOGIsIDB4MDA5YjRmYzMs CisgIDB4YWJhNjhjZWQsIDB4OWFjOTZmNzgsIDB4MDZhNWI3OWEsIDB4YjI4NTZlNmUsIDB4MWFl YzNjYTksIDB4YmU4Mzg2ODgsCisgIDB4MGUwODA0ZTksIDB4NTVmMWJlNTYsIDB4ZTdlNTM2M2Is IDB4YjNhMWYyNWQsIDB4ZjdkZWJiODUsIDB4NjFmZTAzM2MsCisgIDB4MTY3NDYyMzMsIDB4M2Mw MzRjMjgsIDB4ZGE2ZDBjNzQsIDB4NzlhYWM1NmMsIDB4M2NlNGUxYWQsIDB4NTFmMGM4MDIsCisg IDB4OThmOGYzNWEsIDB4MTYyNmE0OWYsIDB4ZWVkODJiMjksIDB4MWQzODJmZTMsIDB4MGM0ZmI5 OWEsIDB4YmIzMjU3NzgsCisgIDB4M2VjNmQ5N2IsIDB4NmU3N2E2YTksIDB4Y2I2NThiNWMsIDB4 ZDQ1MjMwYzcsIDB4MmJkMTQwOGIsIDB4NjBjMDNlYjcsCisgIDB4YjkwNjhkNzgsIDB4YTMzNzU0 ZjQsIDB4ZjQzMGM4N2QsIDB4YzhhNzEzMDIsIDB4Yjk2ZDhjMzIsIDB4ZWJkNGU3YmUsCisgIDB4 YmU4YjlkMmQsIDB4Nzk3OWZiMDYsIDB4ZTcyMjUzMDgsIDB4OGI3NWNmNzcsIDB4MTFlZjhkYTQs IDB4ZTA4M2M4NTgsCisgIDB4OGQ2Yjc4NmYsIDB4NWE2MzE3YTYsIDB4ZmE1Y2Y3YTAsIDB4NWRk YTAwMzMsIDB4ZjI4ZWJmYjAsIDB4ZjViOWMzMTAsCisgIDB4YTBlYWMyODAsIDB4MDhiOTc2N2Es IDB4YTNkOWQyYjAsIDB4NzlkMzQyMTcsIDB4MDIxYTcxOGQsIDB4OWFjNjMzNmEsCisgIDB4Mjcx MWZkNjAsIDB4NDM4MDUwZTMsIDB4MDY5OTA4YTgsIDB4M2Q3ZmVkYzQsIDB4ODI2ZDJiZWYsIDB4 NGVlYjg0NzYsCisgIDB4NDg4ZGNmMjUsIDB4MzZjOWQ1NjYsIDB4MjhlNzRlNDEsIDB4YzI2MTBh Y2EsIDB4M2Q0OWE5Y2YsIDB4YmFlM2I5ZGYsCisgIDB4YjY1ZjhkZTYsIDB4OTJhZWFmNjQsIDB4 M2FjN2Q1ZTYsIDB4OWVhODA1MDksIDB4ZjIyYjAxN2QsIDB4YTQxNzNmNzAsCisgIDB4ZGQxZTE2 YzMsIDB4MTVlMGQ3ZjksIDB4NTBiMWI4ODcsIDB4MmI5ZjRmZDUsIDB4NjI1YWJhODIsIDB4NmEw MTc5NjIsCisgIDB4MmVjMDFiOWMsIDB4MTU0ODhhYTksIDB4ZDcxNmU3NDAsIDB4NDAwNTVhMmMs IDB4OTNkMjlhMjIsIDB4ZTMyZGJmOWEsCisgIDB4MDU4NzQ1YjksIDB4MzQ1M2RjMWUsIDB4ZDY5 OTI5NmUsIDB4NDk2Y2ZmNmYsIDB4MWM5ZjQ5ODYsIDB4ZGZlMmVkMDcsCisgIDB4Yjg3MjQyZDEs IDB4MTlkZTdlYWUsIDB4MDUzZTU2MWEsIDB4MTVhZDZmOGMsIDB4NjY2MjZjMWMsIDB4NzE1NGMy NGMsCisgIDB4ZWEwODJiMmEsIDB4OTNlYjI5MzksIDB4MTdkY2IwZjAsIDB4NThkNGYyYWUsIDB4 OWVhMjk0ZmIsIDB4NTJjZjU2NGMsCisgIDB4OTg4M2ZlNjYsIDB4MmVjNDA1ODEsIDB4NzYzOTUz YzMsIDB4MDFkNjY5MmUsIDB4ZDNhMGMxMDgsIDB4YTFlNzE2MGUsCisgIDB4ZTRmMmRmYTYsIDB4 NjkzZWQyODUsIDB4NzQ5MDQ2OTgsIDB4NGMyYjBlZGQsIDB4NGY3NTc2NTYsIDB4NWQzOTMzNzgs CisgIDB4YTEzMjIzNGYsIDB4M2QzMjFjNWQsIDB4YzNmNWUxOTQsIDB4NGIyNjkzMDEsIDB4Yzc5 ZjAyMmYsIDB4M2M5OTdlN2UsCisgIDB4NWU0Zjk1MDQsIDB4M2ZmYWZiYmQsIDB4NzZmN2FkMGUs IDB4Mjk2NjkzZjQsIDB4M2QxZmNlNmYsIDB4YzYxZTQ1YmUsCisgIDB4ZDNiNWFiMzQsIDB4Zjcy YmY5YjcsIDB4MWIwNDM0YzAsIDB4NGU3MmI1NjcsIDB4NTU5MmEzM2QsIDB4YjUyMjkzMDEsCisg IDB4Y2ZkMmE4N2YsIDB4NjBhZWI3NjcsIDB4MTgxNDM4NmIsIDB4MzBiY2MzM2QsIDB4MzhhMGMw N2QsIDB4ZmQxNjA2ZjIsCisgIDB4YzM2MzUxOWIsIDB4NTg5ZGQzOTAsIDB4NTQ3OWY4ZTYsIDB4 MWNiOGQ2NDcsIDB4OTdmZDYxYTksIDB4ZWE3NzU5ZjQsCisgIDB4MmQ1NzUzOWQsIDB4NTY5YTU4 Y2YsIDB4ZTg0ZTYzYWQsIDB4NDYyZTFiNzgsIDB4NjU4MGY4N2UsIDB4ZjM4MTc5MTQsCisgIDB4 OTFkYTU1ZjQsIDB4NDBhMjMwZjMsIDB4ZDE5ODhmMzUsIDB4YjZlMzE4ZDIsIDB4M2ZmYTUwYmMs IDB4M2Q0MGYwMjEsCisgIDB4YzNjMGJkYWUsIDB4NDk1OGMyNGMsIDB4NTE4ZjM2YjIsIDB4ODRi MWQzNzAsIDB4MGZlZGNlODMsIDB4ODc4ZGRhZGEsCisgIDB4ZjJhMjc5YzcsIDB4OTRlMDFiZTgs IDB4OTA3MTZmNGIsIDB4OTU0YjhhYTMKK307CisKK3N0YXRpYyB1aW50MzIgUzhbXSA9IHsKKyAg MHhlMjE2MzAwZCwgMHhiYmRkZmZmYywgMHhhN2ViZGFiZCwgMHgzNTY0ODA5NSwgMHg3Nzg5Zjhi NywgMHhlNmMxMTIxYiwKKyAgMHgwZTI0MTYwMCwgMHgwNTJjZThiNSwgMHgxMWE5Y2ZiMCwgMHhl NTk1MmYxMSwgMHhlY2U3OTkwYSwgMHg5Mzg2ZDE3NCwKKyAgMHgyYTQyOTMxYywgMHg3NmUzODEx MSwgMHhiMTJkZWYzYSwgMHgzN2RkZGRmYywgMHhkZTlhZGViMSwgMHgwYTBjYzMyYywKKyAgMHhi ZTE5NzAyOSwgMHg4NGEwMDk0MCwgMHhiYjI0M2EwZiwgMHhiNGQxMzdjZiwgMHhiNDRlNzlmMCwg MHgwNDllZWRmZCwKKyAgMHgwYjE1YTE1ZCwgMHg0ODBkMzE2OCwgMHg4YmJiZGU1YSwgMHg2Njlk ZWQ0MiwgMHhjN2VjZTgzMSwgMHgzZjhmOTVlNywKKyAgMHg3MmRmMTkxYiwgMHg3NTgwMzMwZCwg MHg5NDA3NDI1MSwgMHg1YzdkY2RmYSwgMHhhYmJlNmQ2MywgMHhhYTQwMjE2NCwKKyAgMHhiMzAx ZDQwYSwgMHgwMmU3ZDFjYSwgMHg1MzU3MWRhZSwgMHg3YTMxODJhMiwgMHgxMmE4ZGRlYywgMHhm ZGFhMzM1ZCwKKyAgMHgxNzZmNDNlOCwgMHg3MWZiNDZkNCwgMHgzODEyOTAyMiwgMHhjZTk0OWFk NCwgMHhiODQ3NjlhZCwgMHg5NjViZDg2MiwKKyAgMHg4MmYzZDA1NSwgMHg2NmZiOTc2NywgMHgx NWI4MGI0ZSwgMHgxZDViNDdhMCwgMHg0Y2ZkZTA2ZiwgMHhjMjhlYzRiOCwKKyAgMHg1N2U4NzI2 ZSwgMHg2NDdhNzhmYywgMHg5OTg2NWQ0NCwgMHg2MDhiZDU5MywgMHg2YzIwMGUwMywgMHgzOWRj NWZmNiwKKyAgMHg1ZDBiMDBhMywgMHhhZTYzYWZmMiwgMHg3ZThiZDYzMiwgMHg3MDEwOGMwYywg MHhiYmQzNTA0OSwgMHgyOTk4ZGYwNCwKKyAgMHg5ODBjZjQyYSwgMHg5YjZkZjQ5MSwgMHg5ZTdl ZGQ1MywgMHgwNjkxODU0OCwgMHg1OGNiN2UwNywgMHgzYjc0ZWYyZSwKKyAgMHg1MjJmZmZiMSwg MHhkMjQ3MDhjYywgMHgxYzdlMjdjZCwgMHhhNGViMjE1YiwgMHgzY2YxZDJlMiwgMHgxOWI0N2Ez OCwKKyAgMHg0MjRmNzYxOCwgMHgzNTg1NjAzOSwgMHg5ZDE3ZGVlNywgMHgyN2ViMzVlNiwgMHhj OWFmZjY3YiwgMHgzNmJhZjViOCwKKyAgMHgwOWM0NjdjZCwgMHhjMTg5MTBiMSwgMHhlMTFkYmY3 YiwgMHgwNmNkMWFmOCwgMHg3MTcwYzYwOCwgMHgyZDVlMzM1NCwKKyAgMHhkNGRlNDk1YSwgMHg2 NGM2ZDAwNiwgMHhiY2MwYzYyYywgMHgzZGQwMGRiMywgMHg3MDhmOGYzNCwgMHg3N2Q1MWI0MiwK KyAgMHgyNjRmNjIwZiwgMHgyNGI4ZDJiZiwgMHgxNWMxYjc5ZSwgMHg0NmE1MjU2NCwgMHhmOGQ3 ZTU0ZSwgMHgzZTM3ODE2MCwKKyAgMHg3ODk1Y2RhNSwgMHg4NTljMTVhNSwgMHhlNjQ1OTc4OCwg MHhjMzdiYzc1ZiwgMHhkYjA3YmEwYywgMHgwNjc2YTNhYiwKKyAgMHg3ZjIyOWIxZSwgMHgzMTg0 MmU3YiwgMHgyNDI1OWZkNywgMHhmOGJlZjQ3MiwgMHg4MzVmZmNiOCwgMHg2ZGY0YzFmMiwKKyAg MHg5NmY1YjE5NSwgMHhmZDBhZjBmYywgMHhiMGZlMTM0YywgMHhlMjUwNmQzZCwgMHg0ZjliMTJl YSwgMHhmMjE1ZjIyNSwKKyAgMHhhMjIzNzM2ZiwgMHg5ZmI0YzQyOCwgMHgyNWQwNDk3OSwgMHgz NGM3MTNmOCwgMHhjNDYxODE4NywgMHhlYTdhNmU5OCwKKyAgMHg3Y2QxNmVmYywgMHgxNDM2ODc2 YywgMHhmMTU0NDEwNywgMHhiZWRlZWUxNCwgMHg1NmU5YWYyNywgMHhhMDRhYTQ0MSwKKyAgMHgz Y2Y3Yzg5OSwgMHg5MmVjYmFlNiwgMHhkZDY3MDE2ZCwgMHgxNTE2ODJlYiwgMHhhODQyZWVkZiwg MHhmZGJhNjBiNCwKKyAgMHhmMTkwN2I3NSwgMHgyMGUzMDMwZiwgMHgyNGQ4YzI5ZSwgMHhlMTM5 NjczYiwgMHhlZmE2M2ZiOCwgMHg3MTg3MzA1NCwKKyAgMHhiNmYyY2YzYiwgMHg5ZjMyNjQ0Miwg MHhjYjE1YTRjYywgMHhiMDFhNDUwNCwgMHhmMWU0N2Q4ZCwgMHg4NDRhMWJlNSwKKyAgMHhiYWU3 ZGZkYywgMHg0MmNiZGE3MCwgMHhjZDdkYWUwYSwgMHg1N2U4NWI3YSwgMHhkNTNmNWFmNiwgMHgy MGNmNGQ4YywKKyAgMHhjZWE0ZDQyOCwgMHg3OWQxMzBhNCwgMHgzNDg2ZWJmYiwgMHgzM2QzY2Rk YywgMHg3Nzg1M2I1MywgMHgzN2VmZmNiNSwKKyAgMHhjNTA2ODc3OCwgMHhlNTgwYjNlNiwgMHg0 ZTY4YjhmNCwgMHhjNWM4YjM3ZSwgMHgwZDgwOWVhMiwgMHgzOThmZWI3YywKKyAgMHgxMzJhNGY5 NCwgMHg0M2I3OTUwZSwgMHgyZmVlN2QxYywgMHgyMjM2MTNiZCwgMHhkZDA2Y2FhMiwgMHgzN2Rm OTMyYiwKKyAgMHhjNDI0ODI4OSwgMHhhY2YzZWJjMywgMHg1NzE1ZjZiNywgMHhlZjM0NzhkZCwg MHhmMjY3NjE2ZiwgMHhjMTQ4Y2JlNCwKKyAgMHg5MDUyODE1ZSwgMHg1ZTQxMGZhYiwgMHhiNDhh MjQ2NSwgMHgyZWRhN2ZhNCwgMHhlODdiNDBlNCwgMHhlOThlYTA4NCwKKyAgMHg1ODg5ZTllMSwg MHhlZmQzOTBmYywgMHhkZDA3ZDM1YiwgMHhkYjQ4NTY5NCwgMHgzOGQ3ZTViMiwgMHg1NzcyMDEw MSwKKyAgMHg3MzBlZGViYywgMHg1YjY0MzExMywgMHg5NDkxN2U0ZiwgMHg1MDNjMmZiYSwgMHg2 NDZmMTI4MiwgMHg3NTIzZDI0YSwKKyAgMHhlMDc3OTY5NSwgMHhmOWMxN2E4ZiwgMHg3YTViMjEy MSwgMHhkMTg3Yjg5NiwgMHgyOTI2M2E0ZCwgMHhiYTUxMGNkZiwKKyAgMHg4MWY0N2M5ZiwgMHhh ZDExNjNlZCwgMHhlYTdiNTk2NSwgMHgxYTAwNzI2ZSwgMHgxMTQwMzA5MiwgMHgwMGRhNmQ3NywK KyAgMHg0YTBjZGQ2MSwgMHhhZDFmNDYwMywgMHg2MDViZGZiMCwgMHg5ZWVkYzM2NCwgMHgyMmVi ZTZhOCwgMHhjZWU3ZDI4YSwKKyAgMHhhMGU3MzZhMCwgMHg1NTY0YTZiOSwgMHgxMDg1MzIwOSwg MHhjN2ViOGYzNywgMHgyZGU3MDVjYSwgMHg4OTUxNTcwZiwKKyAgMHhkZjA5ODIyYiwgMHhiZDY5 MWE2YywgMHhhYTEyZTRmMiwgMHg4NzQ1MWMwZiwgMHhlMGY2YTI3YSwgMHgzYWRhNDgxOSwKKyAg MHg0Y2YxNzY0ZiwgMHgwZDc3MWMyYiwgMHg2N2NkYjE1NiwgMHgzNTBkODM4NCwgMHg1OTM4ZmEw ZiwgMHg0MjM5OWVmMywKKyAgMHgzNjk5N2IwNywgMHgwZTg0MDkzZCwgMHg0YWE5M2U2MSwgMHg4 MzYwZDg3YiwgMHgxZmE5OGIwYywgMHgxMTQ5MzgyYywKKyAgMHhlOTc2MjVhNSwgMHgwNjE0ZDFi NywgMHgwZTI1MjQ0YiwgMHgwYzc2ODM0NywgMHg1ODllOGQ4MiwgMHgwZDIwNTlkMSwKKyAgMHhh NDY2YmIxZSwgMHhmOGRhMGE4MiwgMHgwNGYxOTEzMCwgMHhiYTZlNGVjMCwgMHg5OTI2NTE2NCwg MHgxZWU3MjMwZCwKKyAgMHg1MGIyYWQ4MCwgMHhlYWVlNjgwMSwgMHg4ZGIyYTI4MywgMHhlYThi ZjU5ZQorfTsKKworLyogSW5pdGlhbGl6ZSBhIGtleSBzY2hlZHVsZSBmcm9tIGEgMTI4LWJpdCBr ZXkgKi8KKworc3RhdGljIHZvaWQKK2Nhc3Rfa2V5X3NjaGVkKHNjaGVkLCBrZXkpCisgICAgIENh c3RLZXlTY2hlZCAqIHNjaGVkOworICAgICB1aW50OHAga2V5OworeworICAgIHVpbnQ4cCB4MCwg eDEsIHgyLCB4MywgeDQsIHg1LCB4NiwgeDcsIHg4LCB4OSwgeEEsIHhCLCB4QywgeEQsIHhFLCB4 RjsKKyAgICB1aW50OHAgejAsIHoxLCB6MiwgejMsIHo0LCB6NSwgejYsIHo3LCB6OCwgejksIHpB LCB6QiwgekMsIHpELCB6RSwgekY7CisgICAgdWludDMyIFgwMywgWDQ3LCBYOEIsIFhDRiwgWjAz LCBaNDcsIFo4QiwgWkNGOworCisjaWZkZWYgTElUVExFX0VORElBTgorICAgIHgzID0gKHVpbnQ4 cCkgJlgwMzsgIHgyID0geDMgKyAxOyAgeDEgPSB4MiArIDE7ICB4MCA9IHgxICsgMTsKKyAgICB4 NyA9ICh1aW50OHApICZYNDc7ICB4NiA9IHg3ICsgMTsgIHg1ID0geDYgKyAxOyAgeDQgPSB4NSAr IDE7CisgICAgeEIgPSAodWludDhwKSAmWDhCOyAgeEEgPSB4QiArIDE7ICB4OSA9IHhBICsgMTsg IHg4ID0geDkgKyAxOworICAgIHhGID0gKHVpbnQ4cCkgJlhDRjsgIHhFID0geEYgKyAxOyAgeEQg PSB4RSArIDE7ICB4QyA9IHhEICsgMTsKKyAgICB6MyA9ICh1aW50OHApICZaMDM7ICB6MiA9IHoz ICsgMTsgIHoxID0gejIgKyAxOyAgejAgPSB6MSArIDE7CisgICAgejcgPSAodWludDhwKSAmWjQ3 OyAgejYgPSB6NyArIDE7ICB6NSA9IHo2ICsgMTsgIHo0ID0gejUgKyAxOworICAgIHpCID0gKHVp bnQ4cCkgJlo4QjsgIHpBID0gekIgKyAxOyAgejkgPSB6QSArIDE7ICB6OCA9IHo5ICsgMTsKKyAg ICB6RiA9ICh1aW50OHApICZaQ0Y7ICB6RSA9IHpGICsgMTsgIHpEID0gekUgKyAxOyAgekMgPSB6 RCArIDE7CisjZWxzZQorICAgIHgwID0gKHVpbnQ4cCkgJlgwMzsgIHgxID0geDAgKyAxOyAgeDIg PSB4MSArIDE7ICB4MyA9IHgyICsgMTsKKyAgICB4NCA9ICh1aW50OHApICZYNDc7ICB4NSA9IHg0 ICsgMTsgIHg2ID0geDUgKyAxOyAgeDcgPSB4NiArIDE7CisgICAgeDggPSAodWludDhwKSAmWDhC OyAgeDkgPSB4OCArIDE7ICB4QSA9IHg5ICsgMTsgIHhCID0geEEgKyAxOworICAgIHhDID0gKHVp bnQ4cCkgJlhDRjsgIHhEID0geEMgKyAxOyAgeEUgPSB4RCArIDE7ICB4RiA9IHhFICsgMTsKKyAg ICB6MCA9ICh1aW50OHApICZaMDM7ICB6MSA9IHowICsgMTsgIHoyID0gejEgKyAxOyAgejMgPSB6 MiArIDE7CisgICAgejQgPSAodWludDhwKSAmWjQ3OyAgejUgPSB6NCArIDE7ICB6NiA9IHo1ICsg MTsgIHo3ID0gejYgKyAxOworICAgIHo4ID0gKHVpbnQ4cCkgJlo4QjsgIHo5ID0gejggKyAxOyAg ekEgPSB6OSArIDE7ICB6QiA9IHpBICsgMTsKKyAgICB6QyA9ICh1aW50OHApICZaQ0Y7ICB6RCA9 IHpDICsgMTsgIHpFID0gekQgKyAxOyAgekYgPSB6RSArIDE7CisjZW5kaWYKKworI2lmZGVmIExJ VFRMRV9FTkRJQU4KKyAgICAqeDAgPSBrZXlbMF07CisgICAgKngxID0ga2V5WzFdOworICAgICp4 MiA9IGtleVsyXTsKKyAgICAqeDMgPSBrZXlbM107CisgICAgKng0ID0ga2V5WzRdOworICAgICp4 NSA9IGtleVs1XTsKKyAgICAqeDYgPSBrZXlbNl07CisgICAgKng3ID0ga2V5WzddOworICAgICp4 OCA9IGtleVs4XTsKKyAgICAqeDkgPSBrZXlbOV07CisgICAgKnhBID0ga2V5WzEwXTsKKyAgICAq eEIgPSBrZXlbMTFdOworICAgICp4QyA9IGtleVsxMl07CisgICAgKnhEID0ga2V5WzEzXTsKKyAg ICAqeEUgPSBrZXlbMTRdOworICAgICp4RiA9IGtleVsxNV07CisjZWxzZQorICAgIFgwMyA9ICoo dWludDMycCkga2V5OworICAgIFg0NyA9ICoodWludDMycCkgKGtleSArIDQpOworICAgIFg4QiA9 ICoodWludDMycCkgKGtleSArIDgpOworICAgIFhDRiA9ICoodWludDMycCkgKGtleSArIDEyKTsK KyNlbmRpZgorCisgIC8qIEZpcnN0IGhhbGYgb2Yga2V5IHNjaGVkdWxlICovCisKKyAgICBaMDMg PSBYMDMgXiBTNVsqeERdIF4gUzZbKnhGXSBeIFM3Wyp4Q10gXiBTOFsqeEVdIF4gUzdbKng4XTsK KyAgICBaNDcgPSBYOEIgXiBTNVsqejBdIF4gUzZbKnoyXSBeIFM3Wyp6MV0gXiBTOFsqejNdIF4g UzhbKnhBXTsKKyAgICBaOEIgPSBYQ0YgXiBTNVsqejddIF4gUzZbKno2XSBeIFM3Wyp6NV0gXiBT OFsqejRdIF4gUzVbKng5XTsKKyAgICBaQ0YgPSBYNDcgXiBTNVsqekFdIF4gUzZbKno5XSBeIFM3 Wyp6Ql0gXiBTOFsqejhdIF4gUzZbKnhCXTsKKworICAgIHNjaGVkLT5LWzBdLkttID0gUzVbKno4 XSBeIFM2Wyp6OV0gXiBTN1sqejddIF4gUzhbKno2XSBeIFM1Wyp6Ml07CisgICAgc2NoZWQtPktb MV0uS20gPSBTNVsqekFdIF4gUzZbKnpCXSBeIFM3Wyp6NV0gXiBTOFsqejRdIF4gUzZbKno2XTsK KyAgICBzY2hlZC0+S1syXS5LbSA9IFM1Wyp6Q10gXiBTNlsqekRdIF4gUzdbKnozXSBeIFM4Wyp6 Ml0gXiBTN1sqejldOworICAgIHNjaGVkLT5LWzNdLkttID0gUzVbKnpFXSBeIFM2Wyp6Rl0gXiBT N1sqejFdIF4gUzhbKnowXSBeIFM4Wyp6Q107CisKKyAgICBYMDMgPSBaOEIgXiBTNVsqejVdIF4g UzZbKno3XSBeIFM3Wyp6NF0gXiBTOFsqejZdIF4gUzdbKnowXTsKKyAgICBYNDcgPSBaMDMgXiBT NVsqeDBdIF4gUzZbKngyXSBeIFM3Wyp4MV0gXiBTOFsqeDNdIF4gUzhbKnoyXTsKKyAgICBYOEIg PSBaNDcgXiBTNVsqeDddIF4gUzZbKng2XSBeIFM3Wyp4NV0gXiBTOFsqeDRdIF4gUzVbKnoxXTsK KyAgICBYQ0YgPSBaQ0YgXiBTNVsqeEFdIF4gUzZbKng5XSBeIFM3Wyp4Ql0gXiBTOFsqeDhdIF4g UzZbKnozXTsKKworICAgIHNjaGVkLT5LWzRdLkttID0gUzVbKngzXSBeIFM2Wyp4Ml0gXiBTN1sq eENdIF4gUzhbKnhEXSBeIFM1Wyp4OF07CisgICAgc2NoZWQtPktbNV0uS20gPSBTNVsqeDFdIF4g UzZbKngwXSBeIFM3Wyp4RV0gXiBTOFsqeEZdIF4gUzZbKnhEXTsKKyAgICBzY2hlZC0+S1s2XS5L bSA9IFM1Wyp4N10gXiBTNlsqeDZdIF4gUzdbKng4XSBeIFM4Wyp4OV0gXiBTN1sqeDNdOworICAg IHNjaGVkLT5LWzddLkttID0gUzVbKng1XSBeIFM2Wyp4NF0gXiBTN1sqeEFdIF4gUzhbKnhCXSBe IFM4Wyp4N107CisKKyAgICBaMDMgPSBYMDMgXiBTNVsqeERdIF4gUzZbKnhGXSBeIFM3Wyp4Q10g XiBTOFsqeEVdIF4gUzdbKng4XTsKKyAgICBaNDcgPSBYOEIgXiBTNVsqejBdIF4gUzZbKnoyXSBe IFM3Wyp6MV0gXiBTOFsqejNdIF4gUzhbKnhBXTsKKyAgICBaOEIgPSBYQ0YgXiBTNVsqejddIF4g UzZbKno2XSBeIFM3Wyp6NV0gXiBTOFsqejRdIF4gUzVbKng5XTsKKyAgICBaQ0YgPSBYNDcgXiBT NVsqekFdIF4gUzZbKno5XSBeIFM3Wyp6Ql0gXiBTOFsqejhdIF4gUzZbKnhCXTsKKworICAgIHNj aGVkLT5LWzhdLkttID0gUzVbKnozXSBeIFM2Wyp6Ml0gXiBTN1sqekNdIF4gUzhbKnpEXSBeIFM1 Wyp6OV07CisgICAgc2NoZWQtPktbOV0uS20gPSBTNVsqejFdIF4gUzZbKnowXSBeIFM3Wyp6RV0g XiBTOFsqekZdIF4gUzZbKnpDXTsKKyAgICBzY2hlZC0+S1sxMF0uS20gPSBTNVsqejddIF4gUzZb Kno2XSBeIFM3Wyp6OF0gXiBTOFsqejldIF4gUzdbKnoyXTsKKyAgICBzY2hlZC0+S1sxMV0uS20g PSBTNVsqejVdIF4gUzZbKno0XSBeIFM3Wyp6QV0gXiBTOFsqekJdIF4gUzhbKno2XTsKKworICAg IFgwMyA9IFo4QiBeIFM1Wyp6NV0gXiBTNlsqejddIF4gUzdbKno0XSBeIFM4Wyp6Nl0gXiBTN1sq ejBdOworICAgIFg0NyA9IFowMyBeIFM1Wyp4MF0gXiBTNlsqeDJdIF4gUzdbKngxXSBeIFM4Wyp4 M10gXiBTOFsqejJdOworICAgIFg4QiA9IFo0NyBeIFM1Wyp4N10gXiBTNlsqeDZdIF4gUzdbKng1 XSBeIFM4Wyp4NF0gXiBTNVsqejFdOworICAgIFhDRiA9IFpDRiBeIFM1Wyp4QV0gXiBTNlsqeDld IF4gUzdbKnhCXSBeIFM4Wyp4OF0gXiBTNlsqejNdOworCisgICAgc2NoZWQtPktbMTJdLkttID0g UzVbKng4XSBeIFM2Wyp4OV0gXiBTN1sqeDddIF4gUzhbKng2XSBeIFM1Wyp4M107CisgICAgc2No ZWQtPktbMTNdLkttID0gUzVbKnhBXSBeIFM2Wyp4Ql0gXiBTN1sqeDVdIF4gUzhbKng0XSBeIFM2 Wyp4N107CisgICAgc2NoZWQtPktbMTRdLkttID0gUzVbKnhDXSBeIFM2Wyp4RF0gXiBTN1sqeDNd IF4gUzhbKngyXSBeIFM3Wyp4OF07CisgICAgc2NoZWQtPktbMTVdLkttID0gUzVbKnhFXSBeIFM2 Wyp4Rl0gXiBTN1sqeDFdIF4gUzhbKngwXSBeIFM4Wyp4RF07CisKKyAgLyogU2Vjb25kIGhhbGYg b2Yga2V5IHNjaGVkdWxlIC0ganVzdCBsaWtlIGZpcnN0IGhhbGYgKi8KKworICAgIFowMyA9IFgw MyBeIFM1Wyp4RF0gXiBTNlsqeEZdIF4gUzdbKnhDXSBeIFM4Wyp4RV0gXiBTN1sqeDhdOworICAg IFo0NyA9IFg4QiBeIFM1Wyp6MF0gXiBTNlsqejJdIF4gUzdbKnoxXSBeIFM4Wyp6M10gXiBTOFsq eEFdOworICAgIFo4QiA9IFhDRiBeIFM1Wyp6N10gXiBTNlsqejZdIF4gUzdbKno1XSBeIFM4Wyp6 NF0gXiBTNVsqeDldOworICAgIFpDRiA9IFg0NyBeIFM1Wyp6QV0gXiBTNlsqejldIF4gUzdbKnpC XSBeIFM4Wyp6OF0gXiBTNlsqeEJdOworCisgICAgc2NoZWQtPktbMF0uS3IgPSAoUzVbKno4XSBe IFM2Wyp6OV0gXiBTN1sqejddIF4gUzhbKno2XSBeIFM1Wyp6Ml0pICYgMHgxZjsKKyAgICBzY2hl ZC0+S1sxXS5LciA9IChTNVsqekFdIF4gUzZbKnpCXSBeIFM3Wyp6NV0gXiBTOFsqejRdIF4gUzZb Kno2XSkgJiAweDFmOworICAgIHNjaGVkLT5LWzJdLktyID0gKFM1Wyp6Q10gXiBTNlsqekRdIF4g UzdbKnozXSBeIFM4Wyp6Ml0gXiBTN1sqejldKSAmIDB4MWY7CisgICAgc2NoZWQtPktbM10uS3Ig PSAoUzVbKnpFXSBeIFM2Wyp6Rl0gXiBTN1sqejFdIF4gUzhbKnowXSBeIFM4Wyp6Q10pICYgMHgx ZjsKKworICAgIFgwMyA9IFo4QiBeIFM1Wyp6NV0gXiBTNlsqejddIF4gUzdbKno0XSBeIFM4Wyp6 Nl0gXiBTN1sqejBdOworICAgIFg0NyA9IFowMyBeIFM1Wyp4MF0gXiBTNlsqeDJdIF4gUzdbKngx XSBeIFM4Wyp4M10gXiBTOFsqejJdOworICAgIFg4QiA9IFo0NyBeIFM1Wyp4N10gXiBTNlsqeDZd IF4gUzdbKng1XSBeIFM4Wyp4NF0gXiBTNVsqejFdOworICAgIFhDRiA9IFpDRiBeIFM1Wyp4QV0g XiBTNlsqeDldIF4gUzdbKnhCXSBeIFM4Wyp4OF0gXiBTNlsqejNdOworCisgICAgc2NoZWQtPktb NF0uS3IgPSAoUzVbKngzXSBeIFM2Wyp4Ml0gXiBTN1sqeENdIF4gUzhbKnhEXSBeIFM1Wyp4OF0p ICYgMHgxZjsKKyAgICBzY2hlZC0+S1s1XS5LciA9IChTNVsqeDFdIF4gUzZbKngwXSBeIFM3Wyp4 RV0gXiBTOFsqeEZdIF4gUzZbKnhEXSkgJiAweDFmOworICAgIHNjaGVkLT5LWzZdLktyID0gKFM1 Wyp4N10gXiBTNlsqeDZdIF4gUzdbKng4XSBeIFM4Wyp4OV0gXiBTN1sqeDNdKSAmIDB4MWY7Cisg ICAgc2NoZWQtPktbN10uS3IgPSAoUzVbKng1XSBeIFM2Wyp4NF0gXiBTN1sqeEFdIF4gUzhbKnhC XSBeIFM4Wyp4N10pICYgMHgxZjsKKworICAgIFowMyA9IFgwMyBeIFM1Wyp4RF0gXiBTNlsqeEZd IF4gUzdbKnhDXSBeIFM4Wyp4RV0gXiBTN1sqeDhdOworICAgIFo0NyA9IFg4QiBeIFM1Wyp6MF0g XiBTNlsqejJdIF4gUzdbKnoxXSBeIFM4Wyp6M10gXiBTOFsqeEFdOworICAgIFo4QiA9IFhDRiBe IFM1Wyp6N10gXiBTNlsqejZdIF4gUzdbKno1XSBeIFM4Wyp6NF0gXiBTNVsqeDldOworICAgIFpD RiA9IFg0NyBeIFM1Wyp6QV0gXiBTNlsqejldIF4gUzdbKnpCXSBeIFM4Wyp6OF0gXiBTNlsqeEJd OworCisgICAgc2NoZWQtPktbOF0uS3IgPSAoUzVbKnozXSBeIFM2Wyp6Ml0gXiBTN1sqekNdIF4g UzhbKnpEXSBeIFM1Wyp6OV0pICYgMHgxZjsKKyAgICBzY2hlZC0+S1s5XS5LciA9IChTNVsqejFd IF4gUzZbKnowXSBeIFM3Wyp6RV0gXiBTOFsqekZdIF4gUzZbKnpDXSkgJiAweDFmOworICAgIHNj aGVkLT5LWzEwXS5LciA9IChTNVsqejddIF4gUzZbKno2XSBeIFM3Wyp6OF0gXiBTOFsqejldIF4g UzdbKnoyXSkgJiAweDFmOworICAgIHNjaGVkLT5LWzExXS5LciA9IChTNVsqejVdIF4gUzZbKno0 XSBeIFM3Wyp6QV0gXiBTOFsqekJdIF4gUzhbKno2XSkgJiAweDFmOworCisgICAgWDAzID0gWjhC IF4gUzVbKno1XSBeIFM2Wyp6N10gXiBTN1sqejRdIF4gUzhbKno2XSBeIFM3Wyp6MF07CisgICAg WDQ3ID0gWjAzIF4gUzVbKngwXSBeIFM2Wyp4Ml0gXiBTN1sqeDFdIF4gUzhbKngzXSBeIFM4Wyp6 Ml07CisgICAgWDhCID0gWjQ3IF4gUzVbKng3XSBeIFM2Wyp4Nl0gXiBTN1sqeDVdIF4gUzhbKng0 XSBeIFM1Wyp6MV07CisgICAgWENGID0gWkNGIF4gUzVbKnhBXSBeIFM2Wyp4OV0gXiBTN1sqeEJd IF4gUzhbKng4XSBeIFM2Wyp6M107CisKKyAgICBzY2hlZC0+S1sxMl0uS3IgPSAoUzVbKng4XSBe IFM2Wyp4OV0gXiBTN1sqeDddIF4gUzhbKng2XSBeIFM1Wyp4M10pICYgMHgxZjsKKyAgICBzY2hl ZC0+S1sxM10uS3IgPSAoUzVbKnhBXSBeIFM2Wyp4Ql0gXiBTN1sqeDVdIF4gUzhbKng0XSBeIFM2 Wyp4N10pICYgMHgxZjsKKyAgICBzY2hlZC0+S1sxNF0uS3IgPSAoUzVbKnhDXSBeIFM2Wyp4RF0g XiBTN1sqeDNdIF4gUzhbKngyXSBeIFM3Wyp4OF0pICYgMHgxZjsKKyAgICBzY2hlZC0+S1sxNV0u S3IgPSAoUzVbKnhFXSBeIFM2Wyp4Rl0gXiBTN1sqeDFdIF4gUzhbKngwXSBeIFM4Wyp4RF0pICYg MHgxZjsKK30KKworLyogSW5pdGlhbGl6ZSB3aXRoIGEgZnVsbC1zdHJlbmd0aCAxMjgtYml0IGtl eSAqLworCisjaWZuZGVmIENBU1RfRVhQT1JUX0VOQ1JZUFRJT04KK3ZvaWQKK2NrX2Nhc3QxMjhf a2V5X3NjaGVkKHNjaGVkLCBrZXkpCisgICAgQ2FzdEtleVNjaGVkICogc2NoZWQ7CisgICAgdWlu dDggKiBrZXk7Cit7CisgICAgc2NoZWQtPmtzaXplID0gMTY7CisgICAgY2FzdF9rZXlfc2NoZWQo c2NoZWQsIGtleSk7Cit9CisjZW5kaWYKKworLyogSGFuZGxlIHJlZHVjZWQta2V5c2l6ZSB2YXJp YW50cyAqLworCitzdGF0aWMgdm9pZAorY2FzdDVfa2V5X3NjaGVkKHNjaGVkLCBrZXksIHN6KQor ICAgIENhc3RLZXlTY2hlZCAqIHNjaGVkOworICAgIHVpbnQ4ICoga2V5OworICAgIGludCBzejsK K3sKKyAgICB1aW50OCBidWZbMTZdOworCisgICAgc2NoZWQtPmtzaXplID0gc3o7CisgICAgbWVt c2V0KGJ1ZiwgMCwgc2l6ZW9mKGJ1ZikpOworICAgIG1lbWNweShidWYsIGtleSwgc3opOworICAg IGNhc3Rfa2V5X3NjaGVkKHNjaGVkLCBidWYpOworfQorCisvKiA0MCwgNjQsIGFuZCA4MC1iaXQg a2V5cyAtIGFsbCB1c2UgMTIgcm91bmRzICovCisKK3ZvaWQKK2NrX2Nhc3Q1XzQwX2tleV9zY2hl ZChzY2hlZCwga2V5KQorICAgIENhc3RLZXlTY2hlZCAqIHNjaGVkOworICAgIHVpbnQ4ICoga2V5 OworeworICAgIGNhc3Q1X2tleV9zY2hlZChzY2hlZCwga2V5LCA1KTsKK30KKworI2lmbmRlZiBD QVNUX0VYUE9SVF9FTkNSWVBUSU9OCit2b2lkCitja19jYXN0NV82NF9rZXlfc2NoZWQoc2NoZWQs IGtleSkKKyAgICAgQ2FzdEtleVNjaGVkICogc2NoZWQ7CisgICAgIHVpbnQ4ICoga2V5Oworewor ICAgIGNhc3Q1X2tleV9zY2hlZChzY2hlZCwga2V5LCA4KTsKK30KKwordm9pZAorY2tfY2FzdDVf ODBfa2V5X3NjaGVkKHNjaGVkLCBrZXkpCisgICAgIENhc3RLZXlTY2hlZCAqIHNjaGVkOworICAg ICB1aW50OCAqIGtleTsKK3sKKyAgICBjYXN0NV9rZXlfc2NoZWQoc2NoZWQsIGtleSwgMTApOwor fQorI2VuZGlmIC8qIENBU1RfRVhQT1JUX0VOQ1JZUFRJT04gKi8KKyNlbmRpZiAvKiBDS19DQVNU ICovCisKKyNpZmRlZiBDUllQVF9ETEwKK3N0YXRpYyBjaGFyICoKK2NrX2NyeXB0X2RsbF92ZXJz aW9uKCkKK3sKKyAgICByZXR1cm4oY2tjcnB2KTsKK30KKworaW50CitjcnlwdF9kbGxfaW5pdCgg c3RydWN0IF9jcnlwdF9kbGxfaW5pdCAqIGluaXQgKQoreworI2lmZGVmIExJQkRFUworICAgIGV4 dGVybiBpbnQgZGVzX2NoZWNrX2tleTsKKyAgICBleHRlcm4gdm9pZCBsaWJkZXNfZGxsX2luaXQo c3RydWN0IF9jcnlwdF9kbGxfaW5pdCAqKTsKKyAgICBkZXNfY2hlY2tfa2V5ID0gMTsKKyNlbmRp ZiAvKiBMSUJERVMgKi8KKworICAgIGlmICggaW5pdC0+dmVyc2lvbiA+PSAxICkgeworICAgICAg ICBwX3R0b2wgPSBpbml0LT5wX3R0b2w7CisgICAgICAgIHBfZG9kZWJ1ZyA9IGluaXQtPnBfZG9k ZWJ1ZzsKKyAgICAgICAgcF9kb2hleGR1bXAgPSBpbml0LT5wX2RvaGV4ZHVtcDsKKyAgICAgICAg cF90bl9kZWJ1ZyA9IGluaXQtPnBfdG5fZGVidWc7CisgICAgICAgIHBfdnNjcm5wcmludGYgPSBp bml0LT5wX3ZzY3JucHJpbnRmOworICAgICAgICBpZiAoIGluaXQtPnZlcnNpb24gPT0gMSApCisg ICAgICAgICAgICByZXR1cm4oMSk7CisgICAgfQorICAgIGlmICggaW5pdC0+dmVyc2lvbiA+PSAy ICkgeworICAgICAgICAvKiBUaGlzIGlzIGEgazVfY29udGV4dCBidXQgd2UgZG9uJ3Qgd2FudCB0 byBpbmNsdWRlIGtyYjUuaCAqLworICAgICAgICBwX2s1X2NvbnRleHQgPSAodm9pZCAqKSBpbml0 LT5wX2s1X2NvbnRleHQ7CisgICAgICAgIGlmICggaW5pdC0+dmVyc2lvbiA9PSAyICkKKyAgICAg ICAgICAgIHJldHVybigxKTsKKyAgICB9CisgICAgaWYgKCBpbml0LT52ZXJzaW9uID49IDMgKSB7 CisgICAgICAgIGluaXQtPnBfaW5zdGFsbF9mdW5jcygiZW5jcnlwdF9wYXJzZSIsZW5jcnlwdF9w YXJzZSk7CisgICAgICAgIGluaXQtPnBfaW5zdGFsbF9mdW5jcygiZW5jcnlwdF9pbml0IixlbmNy eXB0X2luaXQpOworICAgICAgICBpbml0LT5wX2luc3RhbGxfZnVuY3MoImVuY3J5cHRfc2Vzc2lv bl9rZXkiLGVuY3J5cHRfc2Vzc2lvbl9rZXkpOworICAgICAgICBpbml0LT5wX2luc3RhbGxfZnVu Y3MoImVuY3J5cHRfc2VuZF9yZXF1ZXN0X3N0YXJ0IiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGVuY3J5cHRfc2VuZF9yZXF1ZXN0X3N0YXJ0CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICApOworICAgICAgICBpbml0LT5wX2luc3RhbGxfZnVuY3MoImVuY3J5cHRfcmVxdWVz dF9zdGFydCIsZW5jcnlwdF9yZXF1ZXN0X3N0YXJ0KTsKKyAgICAgICAgaW5pdC0+cF9pbnN0YWxs X2Z1bmNzKCJlbmNyeXB0X3NlbmRfcmVxdWVzdF9lbmQiLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZW5jcnlwdF9zZW5kX3JlcXVlc3RfZW5kCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICApOworICAgICAgICBpbml0LT5wX2luc3RhbGxfZnVuY3MoImVuY3J5cHRfcmVxdWVz dF9lbmQiLGVuY3J5cHRfcmVxdWVzdF9lbmQpOworICAgICAgICBpbml0LT5wX2luc3RhbGxfZnVu Y3MoImVuY3J5cHRfc2VuZF9lbmQiLGVuY3J5cHRfc2VuZF9lbmQpOworICAgICAgICBpbml0LT5w X2luc3RhbGxfZnVuY3MoImVuY3J5cHRfc2VuZF9zdXBwb3J0IixlbmNyeXB0X3NlbmRfc3VwcG9y dCk7CisgICAgICAgIGluaXQtPnBfaW5zdGFsbF9mdW5jcygiZW5jcnlwdF9pc19lbmNyeXB0aW5n IixlbmNyeXB0X2lzX2VuY3J5cHRpbmcpOworICAgICAgICBpbml0LT5wX2luc3RhbGxfZnVuY3Mo ImVuY3J5cHRfaXNfZGVjcnlwdGluZyIsZW5jcnlwdF9pc19kZWNyeXB0aW5nKTsKKyAgICAgICAg aW5pdC0+cF9pbnN0YWxsX2Z1bmNzKCJnZXRfY3J5cHRfdGFibGUiLGdldF9jcnlwdF90YWJsZSk7 CisgICAgICAgIGluaXQtPnBfaW5zdGFsbF9mdW5jcygiZGVzX2lzX3dlYWtfa2V5Iixja19kZXNf aXNfd2Vha19rZXkpOworICAgICAgICBsaWJkZXNfZGxsX2luaXQoaW5pdCk7CisgICAgICAgIGlm IChpbml0LT52ZXJzaW9uID09IDMpCisgICAgICAgICAgcmV0dXJuKDEpOworICAgIH0KKyAgICBp ZiAoIGluaXQtPnZlcnNpb24gPj0gNCApIHsKKyAgICAgICAgaW5pdC0+cF9pbnN0YWxsX2Z1bmNz KCJjcnlwdF9kbGxfdmVyc2lvbiIsY2tfY3J5cHRfZGxsX3ZlcnNpb24pOworICAgICAgICBpZiAo aW5pdC0+dmVyc2lvbiA9PSA0KQorICAgICAgICAgIHJldHVybigxKTsKKyAgICB9CisKKyAgICBp ZiAoIGluaXQtPnZlcnNpb24gPj0gNSApIHsKKyAgICAgICAgcF9yZXF0ZWxtdXRleCA9IGluaXQt PnBfcmVxdGVsbXV0ZXg7CisgICAgICAgIHBfcmVsdGVsbXV0ZXggPSBpbml0LT5wX3JlbHRlbG11 dGV4OworICAgICAgICBpZiAoaW5pdC0+dmVyc2lvbiA9PSA1KQorICAgICAgICAgIHJldHVybigx KTsKKyAgICB9CisKKyAgICBpZiAoIGluaXQtPnZlcnNpb24gPj0gNiApIHsKKyAgICAgICAgaW5p dC0+cF9pbnN0YWxsX2Z1bmNzKCJlbmNyeXB0X2RvbnRfc3VwcG9ydCIsZW5jcnlwdF9kb250X3N1 cHBvcnQpOworICAgICAgICBpZiAoIGluaXQtPnZlcnNpb24gPT0gNiApCisgICAgICAgICAgICBy ZXR1cm4oMSk7CisgICAgICAgIC8qIHdoZW4gYWRkaW5nIG5ldyB2ZXJzaW9uczsgbWlncmF0ZSB0 aGUgbmV4dCB0d28gbGluZXMgKi8KKyAgICAgICAgaW5pdC0+dmVyc2lvbiA9IDY7CisgICAgICAg IHJldHVybigxKTsKKyAgICB9CisgICAgcmV0dXJuKDApOworfQorCisjdW5kZWYgbWFsbG9jCisj dW5kZWYgcmVhbGxvYworI3VuZGVmIGZyZWUKKyN1bmRlZiBzdHJkdXAKKworc3RhdGljIHZvaWQK K2ZhdGFsKGNoYXIgKm1zZykgeworICAgIGlmICghbXNnKSBtc2cgPSAiIjsKKworICAgIHByaW50 Zihtc2cpOworICAgIGV4aXQoMSk7ICAgICAgICAvKiBFeGl0IGluZGljYXRpbmcgZmFpbHVyZSAq LworfQorCit2b2lkICoKK2ttYWxsb2Moc2l6ZV90IHNpemUpCit7CisgICAgdm9pZCAqcHRyOwor CisgICAgaWYgKHNpemUgPT0gMCkgeworICAgICAgICBmYXRhbCgia21hbGxvYzogemVybyBzaXpl Iik7CisgICAgfQorICAgIHB0ciA9IG1hbGxvYyhzaXplKTsKKyAgICBpZiAocHRyID09IE5VTEwp IHsKKyAgICAgICAgZmF0YWwoImttYWxsb2M6IG91dCBvZiBtZW1vcnkiKTsKKyAgICB9CisgICAg cmV0dXJuIHB0cjsKK30KKwordm9pZCAqCitrcmVhbGxvYyh2b2lkICpwdHIsIHNpemVfdCBuZXdf c2l6ZSkKK3sKKyAgICB2b2lkICpuZXdfcHRyOworCisgICAgaWYgKG5ld19zaXplID09IDApIHsK KyAgICAgICAgZmF0YWwoImtyZWFsbG9jOiB6ZXJvIHNpemUiKTsKKyAgICB9CisgICAgaWYgKHB0 ciA9PSBOVUxMKQorICAgICAgICBuZXdfcHRyID0gbWFsbG9jKG5ld19zaXplKTsKKyAgICBlbHNl CisgICAgICAgIG5ld19wdHIgPSByZWFsbG9jKHB0ciwgbmV3X3NpemUpOworICAgIGlmIChuZXdf cHRyID09IE5VTEwpIHsKKyAgICAgICAgZmF0YWwoImtyZWFsbG9jOiBvdXQgb2YgbWVtb3J5Iik7 CisgICAgfQorICAgIHJldHVybiBuZXdfcHRyOworfQorCit2b2lkCitrZnJlZSh2b2lkICpwdHIp Cit7CisgICAgaWYgKHB0ciA9PSBOVUxMKSB7CisgICAgICAgIHByaW50Zigia2ZyZWU6IE5VTEwg cG9pbnRlciBnaXZlbiBhcyBhcmd1bWVudCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg IGZyZWUocHRyKTsKK30KKworY2hhciAqCitrc3RyZHVwKGNvbnN0IGNoYXIgKnN0cikKK3sKKyAg ICBzaXplX3QgbGVuOworICAgIGNoYXIgKmNwOworCisgICAgaWYgKHN0ciA9PSBOVUxMKSB7Cisg ICAgICAgIGZhdGFsKCJrc3RyZHVwOiBOVUxMIHBvaW50ZXIgZ2l2ZW4gYXMgYXJndW1lbnQiKTsK KyAgICB9CisgICAgbGVuID0gc3RybGVuKHN0cikgKyAxOworICAgIGNwID0ga21hbGxvYyhsZW4p OworICAgIGlmIChjcCkKKyAgICAgICAgbWVtY3B5KGNwLCBzdHIsIGxlbik7CisgICAgcmV0dXJu IGNwOworfQorI2VuZGlmIC8qIENSWVBUX0RMTCAqLworI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04g Ki8KCmRpZmYgLS1naXQgYS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2Nr X2Rlcy5jIGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja19kZXMuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTM0NjUyCi0tLSAvZGV2L251bGwK KysrIGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja19kZXMuYwpAQCAt MCwwICsxLDk4IEBACisvKgorICBDIEsgXyBEIEUgUyAuIEMgIC0gIGxpYkRFUyBpbnRlcmZhY2Ug Zm9yIEtlcm1pdCA5NSIKKworICBDb3B5cmlnaHQgKEMpIDE5OTgsIDIwMDEsIFRydXN0ZWVzIG9m IENvbHVtYmlhIFVuaXZlcnNpdHkgaW4gdGhlIENpdHkgb2YgTmV3CisgIFlvcmsuICBUaGUgQy1L ZXJtaXQgc29mdHdhcmUgbWF5IG5vdCBiZSwgaW4gd2hvbGUgb3IgaW4gcGFydCwgbGljZW5zZWQg b3IKKyAgc29sZCBmb3IgcHJvZml0IGFzIGEgc29mdHdhcmUgcHJvZHVjdCBpdHNlbGYsIG5vciBt YXkgaXQgYmUgaW5jbHVkZWQgaW4gb3IKKyAgZGlzdHJpYnV0ZWQgd2l0aCBjb21tZXJjaWFsIHBy b2R1Y3RzIG9yIG90aGVyd2lzZSBkaXN0cmlidXRlZCBieSBjb21tZXJjaWFsCisgIGNvbmNlcm5z IHRvIHRoZWlyIGNsaWVudHMgb3IgY3VzdG9tZXJzIHdpdGhvdXQgd3JpdHRlbiBwZXJtaXNzaW9u IG9mIHRoZQorICBPZmZpY2Ugb2YgS2VybWl0IERldmVsb3BtZW50IGFuZCBEaXN0cmlidXRpb24s IENvbHVtYmlhIFVuaXZlcnNpdHkuICBUaGlzCisgIGNvcHlyaWdodCBub3RpY2UgbXVzdCBub3Qg YmUgcmVtb3ZlZCwgYWx0ZXJlZCwgb3Igb2JzY3VyZWQuCisKKyAgQXV0aG9yOgorICBKZWZmcmV5 IEUgQWx0bWFuIChqYWx0bWFuQHNlY3VyZS1lbmRwb2ludHMuY29tKQorKi8KKworLyoKKyAgIFRo aXMgZmlsZSBjb250YWlucyB3cmFwcGVycyBzbyB0aGF0IHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25z IHdpbGwgYmUgaW1wb3J0ZWQKKyAgIGludG8gdGhlIGs5NWNyeXB0LmRsbC9rMmNyeXB0LmRsbCBm aWxlcyBpbiBzdWNoIGEgZm9ybSB0aGF0IHRoZXkgY2FuIGJlCisgICByZS1leHBvcnRlZCB0byBr OTUuZXhlL2syLmV4ZS4gIFRoaXMgc3Vic2V0IG9mIHRoZSBERVMgbGlicmFyeSBpcyBuZWVkZWQg dG8KKyAgIHByb3ZpZGUgREVTIGJhc2VkIEtlcmJlcm9zIGF1dGhlbnRpY2F0aW9uLgorKi8KKwor CisjaWZkZWYgTElCREVTCisvKiBUaGUgZm9sbG93aW5nIGlzIHNwZWNpZmljIHRvIG15IGluc3Rh bGxhdGlvbiwgYnV0IHNpbmNlIEknbSB0aGUgb25seSBvbmUgKi8KKy8qIHRoYXQgdXNlcyB0aGlz IGZpbGUgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAqLworI2luY2x1ZGUgImNrY2RlYi5oIgorI2luY2x1ZGUgImNrdWF0aC5oIgorI2RlZmluZSBD S19ERVNfQworI2luY2x1ZGUgImNrdWF0Mi5oIgorI2lmZGVmIE5UCisjaWZkZWYgX01fQUxQSEEK KyNpbmNsdWRlIDxjOlxzcnBcZGVzXGRlcy5oPgorI2Vsc2UKKyNpbmNsdWRlIDxjOlxzcmNcc3Jw XGRlc1xkZXMuaD4KKyNlbmRpZgorI2Vsc2UKKyNpbmNsdWRlIDxjOlxzcnBcZGVzXGRlcy5oPgor I2VuZGlmCisKK2ludAorbGliZGVzX3JhbmRvbV9rZXkoZGVzX2NibG9jayBCKQoreworICAgIGRl c19yYW5kb21fa2V5KEIpOworICAgIHJldHVybigwKTsKK30KKwordm9pZAorbGliZGVzX3JhbmRv bV9zZWVkKGRlc19jYmxvY2sgQikKK3sKKyAgICBkZXNfcmFuZG9tX3NlZWQoQik7Cit9CisKK3Zv aWQKK2xpYmRlc19rZXlfc2NoZWQoZGVzX2NibG9jayAqIEIsIGRlc19rZXlfc2NoZWR1bGUgUykK K3sKKyAgICBkZXNfa2V5X3NjaGVkKEIsUyk7Cit9CisKK3ZvaWQKK2xpYmRlc19lY2JfZW5jcnlw dChkZXNfY2Jsb2NrICogQjEsIGRlc19jYmxvY2sgKiBCMiwgZGVzX2tleV9zY2hlZHVsZSBTLCBp bnQgbikKK3sKKyAgICBkZXNfZWNiX2VuY3J5cHQoQjEsQjIsUyxuKTsKK30KKworaW50CitsaWJk ZXNfc3RyaW5nX3RvX2tleShjaGFyICogcywgZGVzX2NibG9jayAqIEIpCit7CisgICAgZGVzX3N0 cmluZ190b19rZXkocyxCKTsKKyAgICByZXR1cm4oMCk7Cit9CisKK3ZvaWQKK2xpYmRlc19maXh1 cF9rZXlfcGFyaXR5KGRlc19jYmxvY2sgKiBCKQoreworICAgIGRlc19zZXRfb2RkX3Bhcml0eShC KTsKK30KKwordm9pZAorbGliZGVzX3BjYmNfZW5jcnlwdChkZXNfY2Jsb2NrICppbnB1dCwgZGVz X2NibG9jayAqb3V0cHV0LCBsb25nIGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgIGRlc19r ZXlfc2NoZWR1bGUgc2NoZWR1bGUsIGRlc19jYmxvY2sgKml2ZWMsIGludCBlbmMpCit7CisgICAg ZGVzX3BjYmNfZW5jcnlwdChpbnB1dCxvdXRwdXQsbGVuZ3RoLHNjaGVkdWxlLGl2ZWMsZW5jKTsK K30KKwordm9pZAorbGliZGVzX2RsbF9pbml0KHN0cnVjdCBfY3J5cHRfZGxsX2luaXQgKiBpbml0 KQoreworICAgIGluaXQtPnBfaW5zdGFsbF9mdW5jcygibGliZGVzX3JhbmRvbV9rZXkiLGxpYmRl c19yYW5kb21fa2V5KTsKKyAgICBpbml0LT5wX2luc3RhbGxfZnVuY3MoImxpYmRlc19yYW5kb21f c2VlZCIsbGliZGVzX3JhbmRvbV9zZWVkKTsKKyAgICBpbml0LT5wX2luc3RhbGxfZnVuY3MoImxp YmRlc19rZXlfc2NoZWQiLGxpYmRlc19rZXlfc2NoZWQpOworICAgIGluaXQtPnBfaW5zdGFsbF9m dW5jcygibGliZGVzX2VjYl9lbmNyeXB0IixsaWJkZXNfZWNiX2VuY3J5cHQpOworICAgIGluaXQt PnBfaW5zdGFsbF9mdW5jcygibGliZGVzX3N0cmluZ190b19rZXkiLGxpYmRlc19zdHJpbmdfdG9f a2V5KTsKKyAgICBpbml0LT5wX2luc3RhbGxfZnVuY3MoImxpYmRlc19maXh1cF9rZXlfcGFyaXR5 IixsaWJkZXNfZml4dXBfa2V5X3Bhcml0eSk7CisgICAgaW5pdC0+cF9pbnN0YWxsX2Z1bmNzKCJs aWJkZXNfcGNiY19lbmNyeXB0IixsaWJkZXNfcGNiY19lbmNyeXB0KTsKKworfQorI2VuZGlmIC8q IExJQkRFUyAqLwoKZGlmZiAtLWdpdCBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTku MC4zMDIvY2tfc3NsLmMgYi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2Nr X3NzbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyOGZiN2MKLS0tIC9k ZXYvbnVsbAorKysgYi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrX3Nz bC5jCkBAIC0wLDAgKzEsNDM1OCBAQAorY2hhciAqY2tzc2x2ID0gIlNTTC9UTFMgc3VwcG9ydCwg OS4wLjIyNywgMDQgQXVnIDIwMTAiOworLyoKKyAgQyBLIF8gUyBTIEwgLiBDIC0tICBPcGVuU1NM IEludGVyZmFjZSBmb3IgQy1LZXJtaXQKKworICBDb3B5cmlnaHQgKEMpIDE5ODUsIDIwMTAsCisg ICAgVHJ1c3RlZXMgb2YgQ29sdW1iaWEgVW5pdmVyc2l0eSBpbiB0aGUgQ2l0eSBvZiBOZXcgWW9y ay4KKyAgICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgU2VlIHRoZSBDLUtlcm1pdCBDT1BZSU5HLlRY VCBmaWxlIG9yIHRoZQorICAgIGNvcHlyaWdodCB0ZXh0IGluIHRoZSBja2NtYWkuYyBtb2R1bGUg Zm9yIGRpc2NsYWltZXIgYW5kIHBlcm1pc3Npb25zLgorCisgICAgQXV0aG9yOiAgSmVmZnJleSBF IEFsdG1hbiAoamFsdG1hbkBzZWN1cmUtZW5kcG9pbnRzLmNvbSkKKyAgICAgICAgICAgICAgIFNl Y3VyZSBFbmRwb2ludHMgSW5jLiwgTmV3IFlvcmsgQ2l0eQorCisgIFByb3ZpZGVzOgorCisgIC4g VGVsbmV0IEF1dGggU1NMIG9wdGlvbiBjb21wYXRpYmxlIHdpdGggVGltIEh1ZHNvbidzIGhhY2su CisgIC4gVGVsbmV0IFNUQVJUX1RMUyBvcHRpb24KKyAgLiBDb25maWd1cmF0aW9uIG9mIGNlcnRp ZmljYXRlIGFuZCBrZXkgZmlsZXMKKyAgLiBDZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gYW5kIHJl dm9jYXRpb24gbGlzdCBjaGVja3MKKyAgLiBDbGllbnQgY2VydGlmaWNhdGUgdG8gdXNlciBpZCBy b3V0aW5lCisKKyAgTm90ZTogVGhpcyBjb2RlIGlzIHdyaXR0ZW4gdG8gYmUgY29tcGF0aWJsZSB3 aXRoIE9wZW5TU0wgMC45LjZbYWJjZGVmZ2hdCisgIGFuZCAwLjkuNyBiZXRhIDUgKGFuZCwgcHJl c3VtYWJseSwgbGF0ZXIpLgorICBJdCB3aWxsIGFsc28gY29tcGlsZSB3aXRoIHZlcnNpb24gMC45 LjUgYWx0aG91Z2ggdGhhdCBpcyBkaXNjb3VyYWdlZAorICBkdWUgdG8gc2VjdXJpdHkgd2Vha25l c3NlcyBpbiB0aGF0IHJlbGVhc2UuCisqLworCisjaW5jbHVkZSAiY2tjc3ltLmgiCisjaW5jbHVk ZSAiY2tjZGViLmgiCisKKyNpZmRlZiBDS19TU0wKKyNpbmNsdWRlICJja2NuZXQuaCIKKyNpbmNs dWRlICJja3VhdGguaCIKKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5o PgorI2lmZGVmIFVOSVgKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaWZuZGVmIEZSRUVCU0Q0 CisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjZW5kaWYgLyogRlJFRUJTRDQgKi8KKyNlbmRpZiAv KiBVTklYICovCisKKyNpZmRlZiBERUNfVENQSVAKKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVk ZSA8aW5ldC5oPgorI2VuZGlmIC8qIERFQ19UQ1BJUCAqLworCisjaWZkZWYgT1MyCitleHRlcm4g Y2hhciBleGVkaXJbXTsKKyNpZmRlZiBOVAorY2hhciAqIEdldEFwcERhdGEoaW50KTsKKyNlbmRp ZgorI2VuZGlmIC8qIE9TMiAqLworCitleHRlcm4gaW50IHF1aWV0OwkJCS8qIGZkYyAtIE1vbiBO b3YgMjggMTE6NDQ6MTUgMjAwNSAqLworCitzdGF0aWMgaW50IHNzbF9pbnN0YWxsZWQgPSAxOwor I2VuZGlmIC8qIENLX1NTTCAqLworaW50Citja19zc2hfaXNfaW5zdGFsbGVkKCkKK3sKKyNpZmRl ZiBTU0hCVUlMVElOCisjaWZkZWYgU1NMRExMCisjaWZkZWYgTlQKKyAgICBleHRlcm4gSElOU1RB TkNFIGhDUllQVE87CisjZWxzZSAvKiBOVCAqLworICAgIGV4dGVybiBITU9EVUxFIGhDUllQVE87 CisjZW5kaWYgLyogTlQgKi8KKyAgICBkZWJ1ZyhGMTExLCJja19zc2hfaXNfaW5zdGFsbGVkIiwi aENSWVBUTyIsaENSWVBUTyk7CisgICAgcmV0dXJuKHNzbF9pbnN0YWxsZWQgJiYgKGhDUllQVE8g IT0gTlVMTCkpOworI2Vsc2UgLyogU1NMRExMICovCisgICAgcmV0dXJuKHNzbF9pbnN0YWxsZWQp OworI2VuZGlmIC8qIFNTTERMTCAqLworI2Vsc2UKKyAgICByZXR1cm4gMDsKKyNlbmRpZgorfQor CitpbnQKKyNpZmRlZiBDS19BTlNJQworY2tfc3NsZWF5X2lzX2luc3RhbGxlZCh2b2lkKQorI2Vs c2UKK2NrX3NzbGVheV9pc19pbnN0YWxsZWQoKQorI2VuZGlmCit7CisjaWZkZWYgQ0tfU1NMCisj aWZkZWYgU1NMRExMCisjaWZkZWYgTlQKKyAgICBleHRlcm4gSElOU1RBTkNFIGhTU0wsIGhDUllQ VE87CisjZWxzZSAvKiBOVCAqLworICAgIGV4dGVybiBITU9EVUxFIGhTU0wsIGhDUllQVE87Cisj ZW5kaWYgLyogTlQgKi8KKyAgICBkZWJ1ZyhGMTExLCJja19zc2xlYXlfaXNfaW5zdGFsbGVkIiwi aFNTTCIsaFNTTCk7CisgICAgZGVidWcoRjExMSwiY2tfc3NsZWF5X2lzX2luc3RhbGxlZCIsImhD UllQVE8iLGhDUllQVE8pOworICAgIHJldHVybihzc2xfaW5zdGFsbGVkICYmIChoU1NMICE9IE5V TEwpICYmIChoQ1JZUFRPICE9IE5VTEwpKTsKKyNlbHNlIC8qIFNTTERMTCAqLworICAgIHJldHVy bihzc2xfaW5zdGFsbGVkKTsKKyNlbmRpZiAvKiBTU0xETEwgKi8KKyNlbHNlIC8qIENLX1NTTCAq LworICAgIHJldHVybigwKTsKKyNlbmRpZiAvKiBDS19TU0wgKi8KK30KKworI2lmZGVmIENLX1NT TAorI2luY2x1ZGUgImNrY2tlci5oIgorI2luY2x1ZGUgImNrdWNtZC5oIiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogRm9yIHN0cnVjdCBrZXl0YWIgKi8KKyNpbmNsdWRlICJja2N0ZWwu aCIKKyNpbmNsdWRlICJja19zc2wuaCIKKyNpZmRlZiBVTklYCisjaW5jbHVkZSA8cHdkLmg+ICAg ICAgICAgICAgICAgICAgICAvKiBQYXNzd29yZCBmaWxlIGZvciBob21lIGRpcmVjdG9yeSAqLwor I2VuZGlmIC8qIFVOSVggKi8KKyNpZmRlZiBPUzIKKyNpbmNsdWRlIDxwcm9jZXNzLmg+CisjZW5k aWYgLyogT1MyICovCisjaWZkZWYgT1MyT05MWQorI2luY2x1ZGUgImNrb3RjcC5oIgorI2VuZGlm IC8qIE9TMk9OTFkgKi8KKworI2lmZGVmIFNTTERMTAoraW50IHNzbF9maW5pc2hlZF9tZXNzYWdl cyA9IDA7CisjZWxzZSAvKiBTU0xETEwgKi8KKyNpZmRlZiBPUEVOU1NMX1ZFUlNJT05fTlVNQkVS CitpbnQgc3NsX2ZpbmlzaGVkX21lc3NhZ2VzID0gKE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIgPj0g MHgwMDkwNTgxZkwpOworI2Vsc2UKKyFFUlJPUiBUaGlzIG1vZHVsZSByZXF1aXJlcyBPcGVuU1NM IDAuOS41YSBvciBoaWdoZXIKKyNlbmRpZiAvKiBPUEVOU1NMX1ZFUlNJT05fTlVNQkVSICovCisj ZW5kaWYgLyogU1NMRExMICovCisKK3N0YXRpYyBpbnQgYXV0aF9zc2xfdmFsaWQgPSAwOworc3Rh dGljIGNoYXIgKmF1dGhfc3NsX25hbWUgPSAwOyAgICAvKiB0aGlzIGhvbGRzIHRoZSBvbmVsaW5l IG5hbWUgKi8KK2NoYXIgc3NsX2VycltTU0xfRVJSX0JGU1pdPSIiOworCitCSU8gKmJpb19lcnI9 TlVMTDsKK1g1MDlfU1RPUkUgKmNybF9zdG9yZSA9IE5VTEw7CisKKyNpZm5kZWYgTk9GVFAKKyNp Zm5kZWYgU1lTRlRQCitTU0wgKnNzbF9mdHBfY29uICAgICAgICAgICAgID0gTlVMTDsKK1NTTF9D VFggKnNzbF9mdHBfY3R4ICAgICAgICAgPSBOVUxMOworU1NMICpzc2xfZnRwX2RhdGFfY29uICAg ICAgICA9IE5VTEw7CitpbnQgc3NsX2Z0cF9hY3RpdmVfZmxhZyAgICAgID0gMDsKK2ludCBzc2xf ZnRwX2RhdGFfYWN0aXZlX2ZsYWcgPSAwOworI2VuZGlmIC8qIFNZU0ZUUCAqLworI2VuZGlmIC8q IE5PRlRQICovCisKKyNpZm5kZWYgTk9IVFRQCitTU0wgKnRsc19odHRwX2NvbiAgICAgICAgICAg ID0gTlVMTDsKK1NTTF9DVFggKnRsc19odHRwX2N0eCAgICAgICAgPSBOVUxMOworaW50IHRsc19o dHRwX2FjdGl2ZV9mbGFnICAgICA9IDA7CitpbnQgc3NsX2h0dHBfaW5pdGlhbGl6ZWQgPSAwOwor I2VuZGlmIC8qIE5PSFRUUCAqLworCitTU0xfQ1RYICpzc2xfY3R4ID0gTlVMTDsKK1NTTCAqc3Ns X2NvbiA9IE5VTEw7CitpbnQgc3NsX2RlYnVnX2ZsYWcgPSAwOworaW50IHNzbF92ZXJib3NlX2Zs YWcgPSAwOworaW50IHNzbF9vbmx5X2ZsYWcgPSAwOworaW50IHNzbF9yYXdfZmxhZyA9IDA7Citp bnQgc3NsX2FjdGl2ZV9mbGFnID0gMDsKK2ludCBzc2xfdmVyaWZ5X2ZsYWcgPSBTU0xfVkVSSUZZ X1BFRVI7CitpbnQgc3NsX2NlcnRzb2tfZmxhZyA9IDA7CitjaGFyICpzc2xfcnNhX2NlcnRfZmls ZSA9IE5VTEw7CitjaGFyICpzc2xfcnNhX2NlcnRfY2hhaW5fZmlsZSA9IE5VTEw7CitjaGFyICpz c2xfcnNhX2tleV9maWxlID0gTlVMTDsKK2NoYXIgKnNzbF9kc2FfY2VydF9maWxlID0gTlVMTDsK K2NoYXIgKnNzbF9kc2FfY2VydF9jaGFpbl9maWxlID0gTlVMTDsKK2NoYXIgKnNzbF9kaF9rZXlf ZmlsZSA9IE5VTEw7CitjaGFyICpzc2xfY3JsX2ZpbGUgPSBOVUxMOworY2hhciAqc3NsX2NybF9k aXIgPSBOVUxMOworY2hhciAqc3NsX3ZlcmlmeV9maWxlID0gTlVMTDsKK2NoYXIgKnNzbF92ZXJp ZnlfZGlyID0gTlVMTDsKK2NoYXIgKnNzbF9kaF9wYXJhbV9maWxlID0gTlVMTDsKK2NoYXIgKnNz bF9jaXBoZXJfbGlzdCA9IE5VTEw7CitjaGFyICpzc2xfcm5kX2ZpbGUgPSBOVUxMOworCitTU0xf Q1RYICp0bHNfY3R4ID0gTlVMTDsKK1NTTCAqdGxzX2NvbiA9IE5VTEw7CitpbnQgdGxzX29ubHlf ZmxhZyA9IDA7CitpbnQgdGxzX3Jhd19mbGFnID0gMDsKK2ludCB0bHNfYWN0aXZlX2ZsYWcgPSAw OworCitpbnQgc3NsX2luaXRpYWxpemVkID0gMDsKK2ludCBzc2xfdmVyaWZ5X2RlcHRoID0gLTE7 IC8qIHVzZWQgdG8gdHJhY2sgZGVwdGggaW4gdmVyaWZ5IHJvdXRpbmVzICovCisKKy8qIGNvbXBp bGUgdGhpcyBzZXQgdG8gMSB0byBuZWdvdGlhdGUgU1NML1RMUyBidXQgbm90IGFjdHVhbGx5IHN0 YXJ0IGl0ICovCitpbnQgc3NsX2R1bW15X2ZsYWc9MDsKKworZXh0ZXJuIGludCBpbnNlcnZlcjsK K2V4dGVybiBpbnQgZGVic2VzOworZXh0ZXJuIGludCBhY2NlcHRfY29tcGxldGU7CitleHRlcm4g Y2hhciBzekhvc3ROYW1lW10sIHN6VXNlck5hbWVSZXF1ZXN0ZWRbXSwgc3pVc2VyTmFtZUF1dGhl bnRpY2F0ZWRbXTsKKworX1BST1RPVFlQKGludCBYNTA5X3RvX3VzZXIsKFg1MDkgKiwgY2hhciAq LCBpbnQpKTsKKworc3RhdGljIGludCB2ZXJib3NpdHkgPSAwOwkJLyogTWVzc2FnZSBjb250cm9s ICovCitzdGF0aWMgVk9JRAorc2V0dmVyYm9zaXR5KCkgeworICAgIHZlcmJvc2l0eSA9IHNzbF92 ZXJib3NlX2ZsYWc7CisgICAgaWYgKHF1aWV0KSB2ZXJib3NpdHkgPSAwOworfQorCitpbnQKKyNp ZmRlZiBDS19BTlNJQworc3NsX3NlcnZlcl92ZXJpZnlfY2FsbGJhY2soaW50IG9rLCBYNTA5X1NU T1JFX0NUWCAqIGN0eCkKKyNlbHNlIC8qIENLX0FOU0lDICovCitzc2xfc2VydmVyX3ZlcmlmeV9j YWxsYmFjayhvaywgY3R4KQoraW50IG9rOworWDUwOV9TVE9SRV9DVFggKmN0eDsKKyNlbmRpZiAv KiBDS19BTlNJQyAqLworeworICAgIHN0YXRpYyBjaGFyICpzYXZlZF9zdWJqZWN0PU5VTEw7Cisg ICAgY2hhciAqc3ViamVjdD1OVUxMLCAqaXNzdWVyPU5VTEw7CisgICAgaW50IGRlcHRoLGVycm9y OworICAgIFg1MDkgKnhzID0gTlVMTDsKKworICAgIGlmICggc3NsX2NlcnRzb2tfZmxhZyApCisg ICAgICAgIHJldHVybigxKTsKKworICAgIHNldHZlcmJvc2l0eSgpOworCisgICAgZXJyb3I9WDUw OV9TVE9SRV9DVFhfZ2V0X2Vycm9yKGN0eCk7CisgICAgZGVwdGg9WDUwOV9TVE9SRV9DVFhfZ2V0 X2Vycm9yX2RlcHRoKGN0eCk7CisgICAgeHM9WDUwOV9TVE9SRV9DVFhfZ2V0X2N1cnJlbnRfY2Vy dChjdHgpOworCisgICAgaWYgKGRlcHRoPT0wKSB7CisgICAgICAgIC8qIGNsZWFyIHRoaW5ncyAq LworICAgICAgICBpZiAoc2F2ZWRfc3ViamVjdCE9TlVMTCkgeworICAgICAgICAgICAgZnJlZShz YXZlZF9zdWJqZWN0KTsKKyAgICAgICAgICAgIHNhdmVkX3N1YmplY3Q9TlVMTDsKKyAgICAgICAg fQorICAgICAgICBpZiAoYXV0aF9zc2xfbmFtZSE9TlVMTCkgeworICAgICAgICAgICAgZnJlZShh dXRoX3NzbF9uYW1lKTsKKyAgICAgICAgICAgIGF1dGhfc3NsX25hbWU9TlVMTDsKKyAgICAgICAg fQorICAgIH0KKworCisgICAgaWYgKHNzbF9kZWJ1Z19mbGFnICYmICFpbnNlcnZlcikgeworICAg ICAgICBwcmludGYoInNzbDpzZXJ2ZXJfdmVyaWZ5X2NhbGxiYWNrOmRlcHRoPSVkIG9rPSVkIGVy cj0lZC0lc1xyXG4iLAorICAgICAgICAgICAgZGVwdGgsb2ssZXJyb3IsWDUwOV92ZXJpZnlfY2Vy dF9lcnJvcl9zdHJpbmcoZXJyb3IpKTsKKyAgICB9CisKKyAgICAvKiBmaXJzdCB0aGluZyBpcyB0 byBoYXZlIGEgbWVhbmluZ2Z1bCBuYW1lIGZvciB0aGUgY3VycmVudAorICAgICAqIGNlcnRpZmlj YXRlIHRoYXQgaXMgYmVpbmcgdmVyaWZpZWQgLi4uIGFuZCBpZiB3ZSBjYW5ub3QKKyAgICAgKiBk ZXRlcm1pbmUgdGhhdCB0aGVuIHNvbWV0aGluZyBpcyBzZXJpb3VzbHkgd3JvbmchCisgICAgICov CisgICAgbWFrZXN0cigmc3ViamVjdCwKKyAgICAgICAgICAgIChjaGFyICopWDUwOV9OQU1FX29u ZWxpbmUoWDUwOV9nZXRfc3ViamVjdF9uYW1lKHhzKSxOVUxMLDApKTsKKyAgICBtYWtlc3RyKCZp c3N1ZXIsCisgICAgICAgICAgICAoY2hhciAqKVg1MDlfTkFNRV9vbmVsaW5lKFg1MDlfZ2V0X2lz c3Vlcl9uYW1lKHhzKSxOVUxMLDApKTsKKyAgICBpZiAoIXN1YmplY3QgfHwgIXN1YmplY3RbMF0g fHwgIWlzc3VlciB8fCAhaXNzdWVyWzBdKSB7CisgICAgICAgIG9rID0gMDsKKyAgICAgICAgZ290 byByZXR1cm5fdGltZTsKKyAgICB9CisKKyAgICBpZiAodmVyYm9zaXR5ICYmICFpbnNlcnZlciAm JiBkZXB0aCAhPSBzc2xfdmVyaWZ5X2RlcHRoKSB7CisgICAgICAgIHByaW50ZigiWyVkXSBDZXJ0 aWZpY2F0ZSBTdWJqZWN0OlxyXG4lc1xyXG4iLGRlcHRoLHN1YmplY3QpOworICAgICAgICBwcmlu dGYoIlslZF0gQ2VydGlmaWNhdGUgSXNzdWVyOlxyXG4lc1xyXG4iLGRlcHRoLGlzc3Vlcik7Cisg ICAgICAgIHNzbF92ZXJpZnlfZGVwdGggPSBkZXB0aDsKKyAgICB9CisKKyAgICAvKiBtYWtlIHN1 cmUgdGhhdCB0aGUgY2VydGlmaWNhdGUgdGhhdCBoYXMgYmVlbiBwcmVzZW50ZWQgKi8KKyAgICAv KiBoYXMgbm90IGJlZW4gcmV2b2tlZCAoaWYgd2UgaGF2ZSBiZWVuIGdpdmVuIGEgQ1JMLiAgICAg Ki8KKyAgICBvayA9ICBzc2xfdmVyaWZ5X2NybChvaywgY3R4KTsKKworICAgIC8qIGlmIHdlIGhh dmUgYW55IGZvcm0gb2YgZXJyb3IgaW4gc2VjdXJlIG1vZGUgd2UgcmVqZWN0IHRoZSBjb25uZWN0 aW9uICovCisgICAgaWYgKGVycm9yIT1YNTA5X1ZfT0spIHsKKyAgICAgICAgaWYgKGluc2VydmVy KSB7CisjaWZkZWYgQ0tTWVNMT0cKKyAgICAgICAgICAgIGlmIChja3hzeXNsb2cgPj0gU1lTTEdf TEkgJiYgY2t4bG9nZ2luZykgeworICAgICAgICAgICAgICAgIGNrc3lzbG9nKFNZU0xHX0xJLCAw LAorICAgICAgICAgICAgICAgICAgICAgICAgICAiWC41MDkgQ2VydGlmaWNhdGUgdmVyaWZ5IGZh aWx1cmUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSBzdWJqZWN0LAorICAg ICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKVg1MDlfdmVyaWZ5X2NlcnRfZXJyb3Jfc3Ry aW5nKGVycm9yKQorICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgfQor I2VuZGlmIC8qIENLU1lTTE9HICovCisKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlm ICggc3NsX3ZlcmlmeV9mbGFnICYKKyAgICAgICAgICAgICAgICAgKFNTTF9WRVJJRllfUEVFUiB8 IFNTTF9WRVJJRllfRkFJTF9JRl9OT19QRUVSX0NFUlQpKQorICAgICAgICAgICAgICAgIHByaW50 ZigiRXJyb3I6ICIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHByaW50Zigi V2FybmluZzogIik7CisgICAgICAgICAgICBzd2l0Y2ggKGVycm9yKSB7CisgICAgICAgICAgICBj YXNlIFg1MDlfVl9FUlJfREVQVEhfWkVST19TRUxGX1NJR05FRF9DRVJUOgorICAgICAgICAgICAg ICAgIHByaW50ZigiQ2VydGlmaWNhdGUgaXMgc2VsZiBzaWduZWQuXHJcbiIpOworICAgICAgICAg ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBYNTA5X1ZfRVJSX0NFUlRfSEFTX0VYUElS RUQ6CisgICAgICAgICAgICAgICAgcHJpbnRmKCJDZXJ0aWZpY2F0ZSBoYXMgZXhwaXJlZC5cclxu Iik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFg1MDlfVl9FUlJf VU5BQkxFX1RPX0dFVF9JU1NVRVJfQ0VSVF9MT0NBTExZOgorICAgICAgICAgICAgICAgIHByaW50 ZigKKyAgIkNlcnRpZmljYXRlIGlzc3VlcidzIGNlcnRpZmljYXRlIGlzbid0IGF2YWlsYWJsZSBs b2NhbGx5LlxyXG4iKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug WDUwOV9WX0VSUl9VTkFCTEVfVE9fVkVSSUZZX0xFQUZfU0lHTkFUVVJFOgorICAgICAgICAgICAg ICAgIHByaW50ZigiVW5hYmxlIHRvIHZlcmlmeSBsZWFmIHNpZ25hdHVyZS5cclxuIik7CisgICAg ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFg1MDlfVl9FUlJfQ0VSVF9SRVZP S0VEOgorICAgICAgICAgICAgICAgIHByaW50ZigiQ2VydGlmaWNhdGUgcmV2b2tlZC5cclxuIik7 CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg ICAgICAgIHByaW50ZigiRXJyb3IgJWQgd2hpbGUgdmVyaWZ5aW5nIGNlcnRpZmljYXRlLlxyXG4i LAorICAgICAgICAgICAgICAgICAgICAgICBjdHgtPmVycm9yKTsKKyAgICAgICAgICAgICAgICBi cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBvayA9ICEoc3NsX3Zlcmlm eV9mbGFnICYgU1NMX1ZFUklGWV9GQUlMX0lGX05PX1BFRVJfQ0VSVCk7CisgICAgfSBlbHNlIHsK KyAgICAgICAgLyogaWYgd2UgZ290IGFsbCB0aGUgd2F5IHRvIHRoZSB0b3Agb2YgdGhlIHRyZWUg dGhlbgorICAgICAgICAgKiB3ZSAqY2FuKiB1c2UgdGhpcyBjZXJ0aWZpY2F0ZSBmb3IgYSB1c2Vy bmFtZSB0bworICAgICAgICAgKiBtYXRjaCAuLi4gaW4gYWxsIG90aGVyIGNhc2VzIHdlIG11c3Qg bm90IQorICAgICAgICAgKi8KKyAgICAgICAgYXV0aF9zc2xfbmFtZSA9IHNhdmVkX3N1YmplY3Q7 CisgICAgICAgIHNhdmVkX3N1YmplY3QgPSBOVUxMOworICAgIH0KKworICByZXR1cm5fdGltZToK KworICAgIC8qIHNhdmUgdGhlIG5hbWUgaWYgYXQgbGVhc3QgdGhlIGZpcnN0IGxldmVsIGlzIG9r YXkgKi8KKyAgICBpZiAoZGVwdGggPT0gMCAmJiBvaykKKyAgICAgICAgbWFrZXN0cigmc2F2ZWRf c3ViamVjdCxzdWJqZWN0KTsKKworICAgIC8qIGNsZWFuIHVwIHRoaW5ncyAqLworICAgIGlmIChz dWJqZWN0IT1OVUxMKQorICAgICAgICBmcmVlKHN1YmplY3QpOworICAgIGlmIChpc3N1ZXIhPU5V TEwpCisgICAgICAgIGZyZWUoaXNzdWVyKTsKKworICAgIHJldHVybiBvazsKK30KKworaW50Cisj aWZkZWYgQ0tfQU5TSUMKK3NzbF9jbGllbnRfdmVyaWZ5X2NhbGxiYWNrKGludCBvaywgWDUwOV9T VE9SRV9DVFggKiBjdHgpCisjZWxzZQorc3NsX2NsaWVudF92ZXJpZnlfY2FsbGJhY2sob2ssIGN0 eCkKK2ludCBvazsKK1g1MDlfU1RPUkVfQ1RYICpjdHg7CisjZW5kaWYKK3sKKyAgICBjaGFyIHN1 YmplY3RbMjU2XT0iIiwgaXNzdWVyWzI1Nl09IiI7CisgICAgaW50IGRlcHRoLCBlcnJvciwgbGVu OworICAgIFg1MDkgKnhzOworCisgICAgc2V0dmVyYm9zaXR5KCk7CisKKyAgICB4cz1YNTA5X1NU T1JFX0NUWF9nZXRfY3VycmVudF9jZXJ0KGN0eCk7CisgICAgZXJyb3I9WDUwOV9TVE9SRV9DVFhf Z2V0X2Vycm9yKGN0eCk7CisgICAgZGVwdGg9WDUwOV9TVE9SRV9DVFhfZ2V0X2Vycm9yX2RlcHRo KGN0eCk7CisKKyAgICBpZiAoIHNzbF9kZWJ1Z19mbGFnICkKKyAgICAgICAgcHJpbnRmKCJzc2w6 Y2xpZW50X3ZlcmlmeV9jYWxsYmFjazpkZXB0aD0lZCBvaz0lZCBlcnI9JWQtJXNcclxuIiwKKyAg ICAgICAgICAgICAgICBkZXB0aCxvayxlcnJvcixYNTA5X3ZlcmlmeV9jZXJ0X2Vycm9yX3N0cmlu ZyhlcnJvcikpOworCisgICAgaWYgKCBzc2xfY2VydHNva19mbGFnICkgeworICAgICAgICBvayA9 IDE7CisgICAgfQorCisgICAgLyogZmlyc3QgdGhpbmcgaXMgdG8gaGF2ZSBhIG1lYW5pbmdmdWwg bmFtZSBmb3IgdGhlIGN1cnJlbnQKKyAgICAgKiBjZXJ0aWZpY2F0ZSB0aGF0IGlzIGJlaW5nIHZl cmlmaWVkIC4uLiBhbmQgaWYgd2UgY2Fubm90CisgICAgICogZGV0ZXJtaW5lIHRoYXQgdGhlbiBz b21ldGhpbmcgaXMgc2VyaW91c2x5IHdyb25nIQorICAgICAqLworI2lmZGVmIFhOX0ZMQUdfU0VQ X01VTFRJTElORQorICAgIFg1MDlfTkFNRV9wcmludF9leChiaW9fZXJyLFg1MDlfZ2V0X3N1Ympl Y3RfbmFtZSh4cyksNCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFhOX0ZMQUdfU0VQX01VTFRJ TElORSk7CisgICAgbGVuID0gQklPX3JlYWQoYmlvX2VycixzdWJqZWN0LDI1Nik7CisgICAgc3Vi amVjdFtsZW4gPCAyNTYgPyBsZW4gOiAyNTVdID0gJ1wwJzsKKyAgICBpZiAoIXN1YmplY3RbMF0p IHsKKyAgICAgICAgRVJSX3ByaW50X2Vycm9ycyhiaW9fZXJyKTsKKyAgICAgICAgbGVuID0gQklP X3JlYWQoYmlvX2Vycixzc2xfZXJyLFNTTF9FUlJfQkZTWik7CisgICAgICAgIHNzbF9lcnJbbGVu IDwgU1NMX0VSUl9CRlNaID8gbGVuIDogU1NMX0VSUl9CRlNaXSA9ICdcMCc7CisgICAgICAgIHVx X29rKCJYLjUwOSBTdWJqZWN0IE5hbWUgdW5hdmFpbGFibGUiLCBzc2xfZXJyLCAxLCBOVUxMLCAw KTsKKyAgICAgICAgb2s9MDsKKyAgICAgICAgZ290byByZXR1cm5fdGltZTsKKyAgICB9CisKKyAg ICBYNTA5X05BTUVfcHJpbnRfZXgoYmlvX2VycixYNTA5X2dldF9pc3N1ZXJfbmFtZSh4cyksNCwK KyAgICAgICAgICAgICAgICAgICAgICAgIFhOX0ZMQUdfU0VQX01VTFRJTElORSk7CisgICAgbGVu ID0gQklPX3JlYWQoYmlvX2Vycixpc3N1ZXIsMjU2KTsKKyAgICBpc3N1ZXJbbGVuIDwgMjU2ID8g bGVuIDogMjU1XSA9ICdcMCc7CisgICAgaWYgKCFpc3N1ZXJbMF0pIHsKKyAgICAgICAgRVJSX3By aW50X2Vycm9ycyhiaW9fZXJyKTsKKyAgICAgICAgbGVuID0gQklPX3JlYWQoYmlvX2Vycixzc2xf ZXJyLFNTTF9FUlJfQkZTWik7CisgICAgICAgIHNzbF9lcnJbbGVuIDwgU1NMX0VSUl9CRlNaID8g bGVuIDogU1NMX0VSUl9CRlNaXSA9ICdcMCc7CisgICAgICAgIHVxX29rKCJYLjUwOSBJc3N1ZXIg TmFtZSB1bmF2YWlsYWJsZSIsIHNzbF9lcnIsIDEsIE5VTEwsIDApOworICAgICAgICBvaz0wOwor ICAgICAgICBnb3RvIHJldHVybl90aW1lOworICAgIH0KKyNlbHNlIC8qIFhOX0ZMQUdfU0VQX01V TFRJTElORSAqLworICAgIFg1MDlfTkFNRV9vbmVsaW5lKFg1MDlfZ2V0X3N1YmplY3RfbmFtZSh4 cyksc3ViamVjdCwyNTYpOworICAgIGlmICghc3ViamVjdFswXSkgeworICAgICAgICBpbnQgbGVu OworICAgICAgICBFUlJfcHJpbnRfZXJyb3JzKGJpb19lcnIpOworICAgICAgICBsZW4gPSBCSU9f cmVhZChiaW9fZXJyLHNzbF9lcnIsU1NMX0VSUl9CRlNaKTsKKyAgICAgICAgc3NsX2VycltsZW4g PCBTU0xfRVJSX0JGU1ogPyBsZW4gOiBTU0xfRVJSX0JGU1pdID0gJ1wwJzsKKyAgICAgICAgdXFf b2soIlguNTA5IFN1YmplY3QgTmFtZSB1bmF2YWlsYWJsZSIsIHNzbF9lcnIsIDEsIE5VTEwsIDAp OworICAgICAgICBvaz0wOworICAgICAgICBnb3RvIHJldHVybl90aW1lOworICAgIH0KKworICAg IFg1MDlfTkFNRV9vbmVsaW5lKFg1MDlfZ2V0X2lzc3Vlcl9uYW1lKHhzKSxpc3N1ZXIsMjU2KTsK KyAgICBpZiAoIWlzc3VlclswXSkgeworICAgICAgICBpbnQgbGVuOworICAgICAgICBFUlJfcHJp bnRfZXJyb3JzKGJpb19lcnIpOworICAgICAgICBsZW4gPSBCSU9fcmVhZChiaW9fZXJyLHNzbF9l cnIsU1NMX0VSUl9CRlNaKTsKKyAgICAgICAgc3NsX2VycltsZW4gPCBTU0xfRVJSX0JGU1ogPyBs ZW4gOiBTU0xfRVJSX0JGU1pdID0gJ1wwJzsKKyAgICAgICAgdXFfb2soIlguNTA5IElzc3VlciBO YW1lIHVuYXZhaWxhYmxlIiwgc3NsX2VyciwgMSwgTlVMTCwgMCk7CisgICAgICAgIG9rPTA7Cisg ICAgICAgIGdvdG8gcmV0dXJuX3RpbWU7CisgICAgfQorI2VuZGlmIC8qIFhOX0ZMQUdfU0VQX01V TFRJTElORSAqLworCisgICAgaWYgKHZlcmJvc2l0eSAmJiBkZXB0aCAhPSBzc2xfdmVyaWZ5X2Rl cHRoKSB7CisgICAgICAgIHByaW50ZigiWyVkXSBDZXJ0aWZpY2F0ZSBTdWJqZWN0OlxyXG4lc1xy XG4iLGRlcHRoLHN1YmplY3QpOworICAgICAgICBwcmludGYoIlslZF0gQ2VydGlmaWNhdGUgSXNz dWVyOlxyXG4lc1xyXG4iLGRlcHRoLGlzc3Vlcik7CisgICAgICAgIHNzbF92ZXJpZnlfZGVwdGgg PSBkZXB0aDsKKyAgICB9CisKKyAgICBvayA9IHNzbF92ZXJpZnlfY3JsKG9rLCBjdHgpOworCisg ICAgaWYgKCAhb2sgKSB7CisgICAgICAgIGNoYXIgcHJlZml4WzEwMjRdOworICAgICAgICAvKiBp ZiB0aGUgc2VydmVyIGlzIHVzaW5nIGEgc2VsZiBzaWduZWQgY2VydGlmaWNhdGUgdGhlbgorICAg ICAgICAgKiB3ZSBuZWVkIHRvIGRlY2lkZSBpZiB0aGF0IGlzIGdvb2QgZW5vdWdoIGZvciB1cyB0 bworICAgICAgICAgKiBhY2NlcHQgLi4uCisgICAgICAgICAqLworCisgICAgICAgIHN3aXRjaCAo IGVycm9yICkgeworICAgICAgICBjYXNlIFg1MDlfVl9FUlJfREVQVEhfWkVST19TRUxGX1NJR05F RF9DRVJUOiB7CisgICAgICAgICAgICBpZiAoc3NsX3ZlcmlmeV9mbGFnICYgU1NMX1ZFUklGWV9G QUlMX0lGX05PX1BFRVJfQ0VSVCkgeworICAgICAgICAgICAgICAgIC8qIG1ha2UgMTAwJSBzdXJl IHRoYXQgaW4gc2VjdXJlIG1vcmUgd2UgZHJvcCB0aGUKKyAgICAgICAgICAgICAgICAgKiBjb25u ZWN0aW9uIGlmIHRoZSBzZXJ2ZXIgZG9lcyBub3QgaGF2ZSBhCisgICAgICAgICAgICAgICAgICog cmVhbCBjZXJ0aWZpY2F0ZSEKKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBj a21ha3htc2cocHJlZml4LDEwMjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiRXJyb3I6 IFNlcnZlciBoYXMgYSBzZWxmLXNpZ25lZCBjZXJ0aWZpY2F0ZVxuIiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICJbIixja2l0b2EoZGVwdGgpLCJdIENlcnRpZmljYXRlIFN1YmplY3Q9XG4i LHN1YmplY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiXG5bIixja2l0b2EoZGVwdGgp LCJdIENlcnRpZmljYXRlIElzc3Vlcj1cbiIsaXNzdWVyLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgTlVMTCxOVUxMLE5VTEwpOworCisgICAgICAgICAgICAgICAgdXFfb2socHJlZml4LCAi UmVqZWN0aW5nIENvbm5lY3Rpb24iLCAxLCBOVUxMLCAwKTsKKworICAgICAgICAgICAgICAgIC8q IHNvbWV0aW1lcyBpdCBpcyByZWFsbHkgaGFuZHkgdG8gYmUgYWJsZSB0byBkZWJ1ZyB0aGluZ3MK KyAgICAgICAgICAgICAgICAqIGFuZCBzdGlsbCBnZXQgYSBjb25uZWN0aW9uIQorICAgICAgICAg ICAgICAgICovCisgICAgICAgICAgICAgICAgaWYgKHNzbF9kZWJ1Z19mbGFnKSB7CisgICAgICAg ICAgICAgICAgICAgIHByaW50ZigiU1NMOiBkZWJ1ZyAtPiBpZ25vcmluZyBjZXJ0IHJlcXVpcmVk IVxyXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgb2s9MTsKKyAgICAgICAgICAgICAgICB9IGVs c2UgeworICAgICAgICAgICAgICAgICAgICBvaz0wOworICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgICBnb3RvIHJldHVybl90aW1lOworICAgICAgICAgICAgfSBlbHNlIGlmIChzc2xf dmVyaWZ5X2ZsYWcgIT0gU1NMX1ZFUklGWV9OT05FKSB7CisgICAgICAgICAgICAgICAgY2ttYWt4 bXNnKHByZWZpeCwxMDI0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIldhcm5pbmc6IFNl cnZlciBoYXMgYSBzZWxmLXNpZ25lZCBjZXJ0aWZpY2F0ZVxuIiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICJbIixja2l0b2EoZGVwdGgpLCJdIENlcnRpZmljYXRlIFN1YmplY3Q9XG4iLHN1 YmplY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiXG5bIixja2l0b2EoZGVwdGgpLCJd IENlcnRpZmljYXRlIElzc3Vlcj1cbiIsaXNzdWVyLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgTlVMTCxOVUxMLE5VTEwpOworCisgICAgICAgICAgICAgICAgb2sgPSB1cV9vayhwcmVmaXgs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ29udGludWU/IChZL04pICIsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAzLCBOVUxMLCAwKTsKKyAgICAgICAgICAgICAgICBpZiAoIG9r IDwgMCApCisgICAgICAgICAgICAgICAgICAgIG9rID0gMDsKKyAgICAgICAgICAgICAgICBnb3Rv IHJldHVybl90aW1lOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGNhc2UgWDUw OV9WX0VSUl9VTkFCTEVfVE9fR0VUX0lTU1VFUl9DRVJUOgorICAgICAgICAgICAgaWYgKHNzbF92 ZXJpZnlfZmxhZyAmIFNTTF9WRVJJRllfRkFJTF9JRl9OT19QRUVSX0NFUlQpIHsKKyAgICAgICAg ICAgICAgICAvKiBtYWtlIDEwMCUgc3VyZSB0aGF0IGluIHNlY3VyZSBtb3JlIHdlIGRyb3AgdGhl CisgICAgICAgICAgICAgICAgICogY29ubmVjdGlvbiBpZiB0aGUgc2VydmVyIGRvZXMgbm90IGhh dmUgYQorICAgICAgICAgICAgICAgICAqIHJlYWwgY2VydGlmaWNhdGUhCisgICAgICAgICAgICAg ICAgICovCisgICAgICAgICAgICAgICAgY2ttYWt4bXNnKHByZWZpeCwxMDI0LAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgIkVycm9yOiAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg KGNoYXIgKilYNTA5X3ZlcmlmeV9jZXJ0X2Vycm9yX3N0cmluZyhlcnJvciksCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAiXG5DZXJ0aWZpY2F0ZSBJc3N1ZXI9XG4iLGlzc3VlciwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEws TlVMTCk7CisgICAgICAgICAgICAgICAgdXFfb2socHJlZml4LCAiUmVqZWN0aW5nIENvbm5lY3Rp b24iLCAxLCBOVUxMLCAwKTsKKworICAgICAgICAgICAgICAgIC8qIHNvbWV0aW1lcyBpdCBpcyBy ZWFsbHkgaGFuZHkgdG8gYmUgYWJsZSB0byBkZWJ1ZyB0aGluZ3MKKyAgICAgICAgICAgICAgICAq IGFuZCBzdGlsbCBnZXQgYSBjb25uZWN0aW9uIQorICAgICAgICAgICAgICAgICovCisgICAgICAg ICAgICAgICAgaWYgKHNzbF9kZWJ1Z19mbGFnKSB7CisgICAgICAgICAgICAgICAgICAgIHByaW50 ZigiU1NMOiBkZWJ1ZyAtPiBpZ25vcmluZyBjZXJ0IHJlcXVpcmVkIVxyXG4iKTsKKyAgICAgICAg ICAgICAgICAgICAgb2s9MTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg ICAgICAgICBvaz0wOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBnb3RvIHJl dHVybl90aW1lOworICAgICAgICAgICAgfSBlbHNlIGlmIChzc2xfdmVyaWZ5X2ZsYWcgIT0gU1NM X1ZFUklGWV9OT05FKSB7CisgICAgICAgICAgICAgICAgY2ttYWt4bXNnKHByZWZpeCwxMDI0LAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIldhcm5pbmc6ICIsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAoY2hhciAqKVg1MDlfdmVyaWZ5X2NlcnRfZXJyb3Jfc3RyaW5nKGVycm9yKSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICJcbkNlcnRpZmljYXRlIElzc3Vlcj1cbiIsaXNz dWVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxM LE5VTEwsTlVMTCxOVUxMKTsKKyAgICAgICAgICAgICAgICBvayA9IHVxX29rKHByZWZpeCwgIkNv bnRpbnVlIChZL04pIiwgMywgTlVMTCwgMCk7CisgICAgICAgICAgICAgICAgZ290byByZXR1cm5f dGltZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFg1 MDlfVl9FUlJfQ0VSVF9OT1RfWUVUX1ZBTElEOgorICAgICAgICBjYXNlIFg1MDlfVl9FUlJfRVJS T1JfSU5fQ0VSVF9OT1RfQkVGT1JFX0ZJRUxEOgorICAgICAgICAgICAgaWYgKHNzbF92ZXJpZnlf ZmxhZyAmIFNTTF9WRVJJRllfRkFJTF9JRl9OT19QRUVSX0NFUlQpIHsKKyAgICAgICAgICAgICAg ICBpbnQgbGVuOworICAgICAgICAgICAgICAgIC8qIG1ha2UgMTAwJSBzdXJlIHRoYXQgaW4gc2Vj dXJlIG1vcmUgd2UgZHJvcCB0aGUKKyAgICAgICAgICAgICAgICAgKiBjb25uZWN0aW9uIGlmIHRo ZSBzZXJ2ZXIgZG9lcyBub3QgaGF2ZSBhCisgICAgICAgICAgICAgICAgICogcmVhbCBjZXJ0aWZp Y2F0ZSEKKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBBU04xX1RJTUVfcHJp bnQoYmlvX2VycixYNTA5X2dldF9ub3RCZWZvcmUoeHMpKTsKKyAgICAgICAgICAgICAgICBsZW4g PSBCSU9fcmVhZChiaW9fZXJyLHNzbF9lcnIsU1NMX0VSUl9CRlNaKTsKKyAgICAgICAgICAgICAg ICBzc2xfZXJyW2xlbiA8IFNTTF9FUlJfQkZTWiA/IGxlbiA6IFNTTF9FUlJfQkZTWl0gPSAnXDAn OworICAgICAgICAgICAgICAgIGNrbWFreG1zZyhwcmVmaXgsMTAyNCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICJFcnJvcjogIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFy ICopWDUwOV92ZXJpZnlfY2VydF9lcnJvcl9zdHJpbmcoZXJyb3IpLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgIlxuQ2VydGlmaWNhdGUgU3ViamVjdD1cbiIsc3ViamVjdCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICJcbm5vdEJlZm9yZT0iLHNzbF9lcnIsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCk7CisgICAgICAgICAg ICAgICAgdXFfb2socHJlZml4LCAiUmVqZWN0aW5nIENvbm5lY3Rpb24iLCAxLCBOVUxMLCAwKTsK KyAgICAgICAgICAgICAgICAvKiBzb21ldGltZXMgaXQgaXMgcmVhbGx5IGhhbmR5IHRvIGJlIGFi bGUgdG8gZGVidWcgdGhpbmdzCisgICAgICAgICAgICAgICAgKiBhbmQgc3RpbGwgZ2V0IGEgY29u bmVjdGlvbiEKKyAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIGlmIChzc2xfZGVi dWdfZmxhZykgeworICAgICAgICAgICAgICAgICAgICBwcmludGYoIlNTTDogZGVidWcgLT4gaWdu b3JpbmcgY2VydCByZXF1aXJlZCFcclxuIik7CisgICAgICAgICAgICAgICAgICAgIG9rPTE7Cisg ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgb2s9MDsKKyAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZ290byByZXR1cm5fdGltZTsKKyAgICAgICAg ICAgIH0gZWxzZSBpZiAoc3NsX3ZlcmlmeV9mbGFnICE9IFNTTF9WRVJJRllfTk9ORSkgeworICAg ICAgICAgICAgICAgIGludCBsZW47CisgICAgICAgICAgICAgICAgQVNOMV9USU1FX3ByaW50KGJp b19lcnIsWDUwOV9nZXRfbm90QmVmb3JlKHhzKSk7CisgICAgICAgICAgICAgICAgbGVuID0gQklP X3JlYWQoYmlvX2Vycixzc2xfZXJyLFNTTF9FUlJfQkZTWik7CisgICAgICAgICAgICAgICAgc3Ns X2VycltsZW4gPCBTU0xfRVJSX0JGU1ogPyBsZW4gOiBTU0xfRVJSX0JGU1pdID0gJ1wwJzsKKyAg ICAgICAgICAgICAgICBja21ha3htc2cocHJlZml4LDEwMjQsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAiV2FybmluZzogIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICop WDUwOV92ZXJpZnlfY2VydF9lcnJvcl9zdHJpbmcoZXJyb3IpLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgIlxuQ2VydGlmaWNhdGUgU3ViamVjdD1cbiIsc3ViamVjdCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICJcbiAgICBub3RCZWZvcmU9Iixzc2xfZXJyLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwpOworICAgICAgICAg ICAgICAgIG9rID0gdXFfb2socHJlZml4LCAiQ29udGludWUgKFkvTikiLCAzLCBOVUxMLCAwKTsK KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFg1MDlfVl9F UlJfQ0VSVF9IQVNfRVhQSVJFRDoKKyAgICAgICAgY2FzZSBYNTA5X1ZfRVJSX0VSUk9SX0lOX0NF UlRfTk9UX0FGVEVSX0ZJRUxEOgorICAgICAgICAgICAgaWYgKHNzbF92ZXJpZnlfZmxhZyAmIFNT TF9WRVJJRllfRkFJTF9JRl9OT19QRUVSX0NFUlQpIHsKKyAgICAgICAgICAgICAgICBpbnQgbGVu OworICAgICAgICAgICAgICAgIC8qIG1ha2UgMTAwJSBzdXJlIHRoYXQgaW4gc2VjdXJlIG1vcmUg d2UgZHJvcCB0aGUKKyAgICAgICAgICAgICAgICAgKiBjb25uZWN0aW9uIGlmIHRoZSBzZXJ2ZXIg ZG9lcyBub3QgaGF2ZSBhCisgICAgICAgICAgICAgICAgICogcmVhbCBjZXJ0aWZpY2F0ZSEKKyAg ICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBBU04xX1RJTUVfcHJpbnQoYmlvX2Vy cixYNTA5X2dldF9ub3RBZnRlcih4cykpOworICAgICAgICAgICAgICAgIGxlbiA9IEJJT19yZWFk KGJpb19lcnIsc3NsX2VycixTU0xfRVJSX0JGU1opOworICAgICAgICAgICAgICAgIHNzbF9lcnJb bGVuIDwgU1NMX0VSUl9CRlNaID8gbGVuIDogU1NMX0VSUl9CRlNaXSA9ICdcMCc7CisKKyAgICAg ICAgICAgICAgICBja21ha3htc2cocHJlZml4LDEwMjQsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAiRXJyb3I6ICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKVg1MDlf dmVyaWZ5X2NlcnRfZXJyb3Jfc3RyaW5nKGVycm9yKSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICJcbkNlcnRpZmljYXRlIFN1YmplY3Q9XG4iLHN1YmplY3QsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAiXG4gICAgbm90QWZ0ZXI9Iixzc2xfZXJyLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwpOworICAgICAgICAgICAgICAg IHVxX29rKHByZWZpeCwgIlJlamVjdGluZyBDb25uZWN0aW9uIiwgMSwgTlVMTCwgMCk7CisgICAK KyAgICAgICAgICAgICAgICAvKiBzb21ldGltZXMgaXQgaXMgcmVhbGx5IGhhbmR5IHRvIGJlIGFi bGUgdG8gZGVidWcgdGhpbmdzCisgICAgICAgICAgICAgICAgKiBhbmQgc3RpbGwgZ2V0IGEgY29u bmVjdGlvbiEKKyAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIGlmIChzc2xfZGVi dWdfZmxhZykgeworICAgICAgICAgICAgICAgICAgICBwcmludGYoIlNTTDogZGVidWcgLT4gaWdu b3JpbmcgY2VydCByZXF1aXJlZCFcclxuIik7CisgICAgICAgICAgICAgICAgICAgIG9rPTE7Cisg ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgb2s9MDsKKyAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZ290byByZXR1cm5fdGltZTsKKyAgICAgICAg ICAgIH0gZWxzZSBpZiAoc3NsX3ZlcmlmeV9mbGFnICE9IFNTTF9WRVJJRllfTk9ORSkgeworICAg ICAgICAgICAgICAgIGludCBsZW47CisgICAgICAgICAgICAgICAgQVNOMV9USU1FX3ByaW50KGJp b19lcnIsWDUwOV9nZXRfbm90QWZ0ZXIoeHMpKTsKKyAgICAgICAgICAgICAgICBsZW4gPSBCSU9f cmVhZChiaW9fZXJyLHNzbF9lcnIsU1NMX0VSUl9CRlNaKTsKKyAgICAgICAgICAgICAgICBzc2xf ZXJyW2xlbiA8IFNTTF9FUlJfQkZTWiA/IGxlbiA6IFNTTF9FUlJfQkZTWl0gPSAnXDAnOworICAg ICAgICAgICAgICAgIGNrbWFreG1zZyhwcmVmaXgsMTAyNCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICJXYXJuaW5nOiAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKilY NTA5X3ZlcmlmeV9jZXJ0X2Vycm9yX3N0cmluZyhlcnJvciksCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAiXG5DZXJ0aWZpY2F0ZSBTdWJqZWN0PVxuIixzdWJqZWN0LAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgIlxuICAgIG5vdEFmdGVyPSIsc3NsX2VyciwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgIE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMKTsKKyAgICAgICAgICAg ICAgICBvayA9IHVxX29rKHByZWZpeCwgIkNvbnRpbnVlIChZL04pIiwgMywgTlVMTCwgMCk7Cisg ICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBYNTA5X1ZfRVJS X1NFTEZfU0lHTkVEX0NFUlRfSU5fQ0hBSU46CisgICAgICAgIGNhc2UgWDUwOV9WX0VSUl9VTkFC TEVfVE9fR0VUX0lTU1VFUl9DRVJUX0xPQ0FMTFk6CisgICAgICAgICAgICAvKgorICAgICAgICAg ICAgICogV2hlbiBhbiBTU0wgc2VydmVyIHNlbmRzIGl0cyBjZXJ0aWZpY2F0ZXMgdG8gdGhlIGNs aWVudCB0aGVyZQorICAgICAgICAgICAgICogYXJlIHR3byIgY29udmVudGlvbnMiOiBvbmUgaXMg dG8gc2VuZCB0aGUgY29tcGxldGUgY2VydGlmaWNhdGUKKyAgICAgICAgICAgICAqIGNoYWluIGFu ZCB0aGUgb3RoZXIgaXMgdG8gc2VuZCB0aGUgd2hvbGUgY2hhaW4gYXBhcnQgZnJvbSB0aGUKKyAg ICAgICAgICAgICAqIHJvb3QuCisgICAgICAgICAgICAgKgorICAgICAgICAgICAgICogWW91IGRv bid0IHVzdWFsbHkgbmVlZCB0aGUgcm9vdCBiZWNhdXNlIHRoZSByb290IGlzIG5vcm1hbGx5Cisg ICAgICAgICAgICAgKiBzdG9yZWQgYW5kIHRydXN0ZWQgbG9jYWxseS4KKyAgICAgICAgICAgICAq CisgICAgICAgICAgICAgKiBTbyBpZiB5b3UgZ2V0IHRoZSB3aG9sZSBjaGFpbiBpdCB3aWxsIGNv bXBsYWluIGFib3V0IHRoZSBzZWxmCisgICAgICAgICAgICAgKiBzaWduZWQgY2VydGlmaWNhdGUg d2hlcmVhcyBpZiB0aGUgcm9vdCBpcyBtaXNzaW5nIGl0IHNheXMgaXQKKyAgICAgICAgICAgICAq IGNhbid0IGZpbmQgdGhlIGlzc3VlciBjZXJ0aWZpY2F0ZS4KKyAgICAgICAgICAgICAqLworICAg ICAgICAgICAgaWYgKHNzbF92ZXJpZnlfZmxhZyAmIFNTTF9WRVJJRllfRkFJTF9JRl9OT19QRUVS X0NFUlQpIHsKKyAgICAgICAgICAgICAgICAvKiBtYWtlIDEwMCUgc3VyZSB0aGF0IGluIHNlY3Vy ZSBtb3JlIHdlIGRyb3AgdGhlCisgICAgICAgICAgICAgICAgICogY29ubmVjdGlvbiBpZiB0aGUg c2VydmVyIGRvZXMgbm90IGhhdmUgYQorICAgICAgICAgICAgICAgICAqIHJlYWwgY2VydGlmaWNh dGUhCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgY2ttYWt4bXNnKHByZWZp eCwxMDI0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIkVycm9yOiAiLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgKGNoYXIgKilYNTA5X3ZlcmlmeV9jZXJ0X2Vycm9yX3N0cmluZyhl cnJvciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiXG5DZXJ0aWZpY2F0ZSBJc3N1ZXI9 XG4iLGlzc3VlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsTlVMTCxOVUxMLE5V TEwsTlVMTCxOVUxMLE5VTEwsTlVMTCk7CisgICAgICAgICAgICAgICAgdXFfb2socHJlZml4LCAi UmVqZWN0aW5nIENvbm5lY3Rpb24iLCAxLCBOVUxMLCAwKTsKKyAgICAgICAgICAgICAgICAvKiBz b21ldGltZXMgaXQgaXMgcmVhbGx5IGhhbmR5IHRvIGJlIGFibGUgdG8gZGVidWcgdGhpbmdzCisg ICAgICAgICAgICAgICAgKiBhbmQgc3RpbGwgZ2V0IGEgY29ubmVjdGlvbiEKKyAgICAgICAgICAg ICAgICAqLworICAgICAgICAgICAgICAgIGlmIChzc2xfZGVidWdfZmxhZykgeworICAgICAgICAg ICAgICAgICAgICBwcmludGYoIlNTTDogZGVidWcgLT4gaWdub3JpbmcgY2VydCByZXF1aXJlZCFc clxuIik7CisgICAgICAgICAgICAgICAgICAgIG9rPTE7CisgICAgICAgICAgICAgICAgfSBlbHNl IHsKKyAgICAgICAgICAgICAgICAgICAgb2s9MDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgICAgZ290byByZXR1cm5fdGltZTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc3NsX3Zl cmlmeV9mbGFnICE9IFNTTF9WRVJJRllfTk9ORSkgeworICAgICAgICAgICAgICAgIGNrbWFreG1z ZyhwcmVmaXgsMTAyNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJXYXJuaW5nOiAiLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKilYNTA5X3ZlcmlmeV9jZXJ0X2Vycm9y X3N0cmluZyhlcnJvciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiXG5DZXJ0aWZpY2F0 ZSBJc3N1ZXI9XG4iLGlzc3VlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsTlVM TCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCk7CisgICAgICAgICAgICAgICAgb2sgPSB1 cV9vayhwcmVmaXgsICJDb250aW51ZSAoWS9OKSIsIDMsIE5VTEwsIDApOworI2lmZGVmIE5UCisg ICAgICAgICAgICAgICAgaWYgKG9rKSB7CisgICAgICAgICAgICAgICAgICAgIC8qIGlmIHRoZSB1 c2VyIGRlY2lkZXMgdG8gYWNjZXB0IHRoZSBjZXJ0aWZpY2F0ZQorICAgICAgICAgICAgICAgICAg ICAgKiBvZmZlciB0byBzdG9yZSBpdCBmb3IgZnV0dXJlIGNvbm5lY3Rpb25zIGluIAorICAgICAg ICAgICAgICAgICAgICAgKiB0aGUgdXNlcidzIHByaXZhdGUgc3RvcmUKKyAgICAgICAgICAgICAg ICAgICAgICovCisgICAgICAgICAgICAgICAgICAgIG9rID0gdXFfb2soCisgICJEbyB5b3Ugd2lz aCB0byBzdG9yZSB0aGUgY2VydGlmaWNhdGUgdG8gdmVyaWZ5IGZ1dHVyZSBjb25uZWN0aW9ucz8i LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDb250aW51ZSAoWS9OKSIsIDMsIE5V TEwsIDApOworICAgICAgICAgICAgICAgICAgICBpZiAob2spCisgICAgICAgICAgICAgICAgICAg ICAgICBja19YNTA5X3NhdmVfY2VydF90b191c2VyX3N0b3JlKHhzKTsKKyAgICAgICAgICAgICAg ICB9CisjZW5kaWYgLyogTlQgKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICBjYXNlIFg1MDlfVl9FUlJfVU5BQkxFX1RPX1ZFUklGWV9MRUFGX1NJR05BVFVSRToK KyAgICAgICAgY2FzZSBYNTA5X1ZfRVJSX1VOQUJMRV9UT19HRVRfQ1JMOgorICAgICAgICBjYXNl IFg1MDlfVl9FUlJfVU5BQkxFX1RPX0RFQ1JZUFRfQ0VSVF9TSUdOQVRVUkU6CisgICAgICAgIGNh c2UgWDUwOV9WX0VSUl9VTkFCTEVfVE9fREVDUllQVF9DUkxfU0lHTkFUVVJFOgorICAgICAgICBj YXNlIFg1MDlfVl9FUlJfVU5BQkxFX1RPX0RFQ09ERV9JU1NVRVJfUFVCTElDX0tFWToKKyAgICAg ICAgY2FzZSBYNTA5X1ZfRVJSX0NFUlRfU0lHTkFUVVJFX0ZBSUxVUkU6CisgICAgICAgIGNhc2Ug WDUwOV9WX0VSUl9DUkxfU0lHTkFUVVJFX0ZBSUxVUkU6CisgICAgICAgIGNhc2UgWDUwOV9WX0VS Ul9DUkxfTk9UX1lFVF9WQUxJRDoKKyAgICAgICAgY2FzZSBYNTA5X1ZfRVJSX0NSTF9IQVNfRVhQ SVJFRDoKKyAgICAgICAgY2FzZSBYNTA5X1ZfRVJSX0VSUk9SX0lOX0NSTF9MQVNUX1VQREFURV9G SUVMRDoKKyAgICAgICAgY2FzZSBYNTA5X1ZfRVJSX0VSUk9SX0lOX0NSTF9ORVhUX1VQREFURV9G SUVMRDoKKyAgICAgICAgY2FzZSBYNTA5X1ZfRVJSX09VVF9PRl9NRU06CisgICAgICAgIGNhc2Ug WDUwOV9WX0VSUl9DRVJUX0NIQUlOX1RPT19MT05HOgorICAgICAgICBjYXNlIFg1MDlfVl9FUlJf Q0VSVF9SRVZPS0VEOgorICAgICAgICBjYXNlIFg1MDlfVl9FUlJfQVBQTElDQVRJT05fVkVSSUZJ Q0FUSU9OOgorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgaWYgKHNzbF92ZXJpZnlfZmxh ZyAmIFNTTF9WRVJJRllfRkFJTF9JRl9OT19QRUVSX0NFUlQpIHsKKyAgICAgICAgICAgICAgICAv KiBtYWtlIDEwMCUgc3VyZSB0aGF0IGluIHNlY3VyZSBtb2RlIHdlIGRyb3AgdGhlCisgICAgICAg ICAgICAgICAgICogY29ubmVjdGlvbiBpZiB0aGUgc2VydmVyIGRvZXMgbm90IGhhdmUgYQorICAg ICAgICAgICAgICAgICAqIHJlYWwgY2VydGlmaWNhdGUhCisgICAgICAgICAgICAgICAgICovCisg ICAgICAgICAgICAgICAgY2ttYWt4bXNnKHByZWZpeCwxMDI0LAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgIkVycm9yOiAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKilY NTA5X3ZlcmlmeV9jZXJ0X2Vycm9yX3N0cmluZyhlcnJvciksCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAiXG5DZXJ0aWZpY2F0ZSBTdWJqZWN0PVxuIixzdWJqZWN0LAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMKTsK KyAgICAgICAgICAgICAgICB1cV9vayhwcmVmaXgsICJSZWplY3RpbmcgQ29ubmVjdGlvbiIsIDEs IE5VTEwsIDApOworCisgICAgICAgICAgICAgICAgLyogc29tZXRpbWVzIGl0IGlzIHJlYWxseSBo YW5keSB0byBiZSBhYmxlIHRvIGRlYnVnIHRoaW5ncworICAgICAgICAgICAgICAgICogYW5kIHN0 aWxsIGdldCBhIGNvbm5lY3Rpb24hCisgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAg ICBpZiAoc3NsX2RlYnVnX2ZsYWcpIHsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJTU0w6 IGRlYnVnIC0+IGlnbm9yaW5nIGNlcnQgcmVxdWlyZWQhXHJcbiIpOworICAgICAgICAgICAgICAg ICAgICBvaz0xOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg IG9rPTA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGdvdG8gcmV0dXJuX3Rp bWU7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHNzbF92ZXJpZnlfZmxhZyAhPSBTU0xfVkVSSUZZ X05PTkUpIHsKKyAgICAgICAgICAgICAgICBja21ha3htc2cocHJlZml4LDEwMjQsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAiV2FybmluZzogIiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIChjaGFyICopWDUwOV92ZXJpZnlfY2VydF9lcnJvcl9zdHJpbmcoZXJyb3IpLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgIlxuQ2VydGlmaWNhdGUgU3ViamVjdD1cbiIsc3ViamVjdCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxM LE5VTEwsTlVMTCk7CisgICAgICAgICAgICAgICAgb2sgPSB1cV9vayhwcmVmaXgsICJDb250aW51 ZSAoWS9OKSIsIDMsIE5VTEwsIDApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7 CisgICAgICAgIH0KKyAgICB9CisKKyAgcmV0dXJuX3RpbWU6CisgICAgaWYgKCBzc2xfZGVidWdf ZmxhZyApCisgICAgICAgIHByaW50Zigic3NsOmNsaWVudF92ZXJpZnlfY2FsbGJhY2sgPT4gb2s6 ICVkXHJcbiIsb2spOworICAgIHJldHVybiBvazsKK30KKworVk9JRAorI2lmZGVmIENLX0FOU0lD Citzc2xfY2xpZW50X2luZm9fY2FsbGJhY2soY29uc3QgU1NMICpzLCBpbnQgd2hlcmUsIGludCBy ZXQpCisjZWxzZQorc3NsX2NsaWVudF9pbmZvX2NhbGxiYWNrKHMsd2hlcmUscmV0KQorY29uc3Qg U1NMICpzOworaW50IHdoZXJlOworaW50IHJldDsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworewor ICAgIGlmIChpbnNlcnZlciB8fCAhc3NsX2RlYnVnX2ZsYWcpCisgICAgICAgIHJldHVybjsKKwor ICAgIHNldHZlcmJvc2l0eSgpOworCisgICAgc3dpdGNoICggd2hlcmUgKSB7CisgICAgY2FzZSBT U0xfQ0JfQ09OTkVDVF9MT09QOgorICAgICAgICBwcmludGYoIlNTTF9jb25uZWN0OiVzICVzXHJc biIsCisgICAgICAgICAgICAgICAgU1NMX3N0YXRlX3N0cmluZygoU1NMICopcyksU1NMX3N0YXRl X3N0cmluZ19sb25nKChTU0wgKilzKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU1NMX0NC X0NPTk5FQ1RfRVhJVDoKKyAgICAgICAgaWYgKHJldCA9PSAwKSB7CisgICAgICAgICAgICBwcmlu dGYoIlNTTF9jb25uZWN0OmZhaWxlZCBpbiAlcyAlc1xyXG4iLAorICAgICAgICAgICAgICAgICAg ICBTU0xfc3RhdGVfc3RyaW5nKChTU0wgKilzKSxTU0xfc3RhdGVfc3RyaW5nX2xvbmcoKFNTTCAq KXMpKTsKKyAgICAgICAgfSBlbHNlIGlmIChyZXQgPCAwKSB7CisgICAgICAgICAgICBwcmludGYo IlNTTF9jb25uZWN0OmVycm9yIGluICVzICVzXHJcbiIsCisgICAgICAgICAgICAgICAgICAgIFNT TF9zdGF0ZV9zdHJpbmcoKFNTTCAqKXMpLFNTTF9zdGF0ZV9zdHJpbmdfbG9uZygoU1NMICopcykp OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU1NMX0NCX0FDQ0VQVF9MT09Q OgorICAgICAgICBwcmludGYoIlNTTF9hY2NlcHQ6JXMgJXNcclxuIiwKKyAgICAgICAgICAgICAg ICBTU0xfc3RhdGVfc3RyaW5nKChTU0wgKilzKSxTU0xfc3RhdGVfc3RyaW5nX2xvbmcoKFNTTCAq KXMpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTU0xfQ0JfQUNDRVBUX0VYSVQ6CisgICAg ICAgIGlmIChyZXQgPT0gMCkgeworICAgICAgICAgICAgcHJpbnRmKCJTU0xfYWNjZXB0OmZhaWxl ZCBpbiAlcyAlc1xyXG4iLAorICAgICAgICAgICAgICAgICAgICBTU0xfc3RhdGVfc3RyaW5nKChT U0wgKilzKSxTU0xfc3RhdGVfc3RyaW5nX2xvbmcoKFNTTCAqKXMpKTsKKyAgICAgICAgfSBlbHNl IGlmIChyZXQgPCAwKSB7CisgICAgICAgICAgICBwcmludGYoIlNTTF9hY2NlcHQ6ZXJyb3IgaW4g JXMgJXNcclxuIiwKKyAgICAgICAgICAgICAgICAgICAgU1NMX3N0YXRlX3N0cmluZygoU1NMICop cyksU1NMX3N0YXRlX3N0cmluZ19sb25nKChTU0wgKilzKSk7CisgICAgICAgIH0KKyAgICAgICAg YnJlYWs7CisgICAgY2FzZSBTU0xfQ0JfUkVBRF9BTEVSVDoKKyAgICAgICAgcHJpbnRmKCJTU0xf cmVhZF9hbGVydFxyXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTU0xfQ0JfV1JJVEVf QUxFUlQ6CisgICAgICAgIHByaW50ZigiU1NMX3dyaXRlX2FsZXJ0XHJcbiIpOworICAgICAgICBi cmVhazsKKyAgICBjYXNlIFNTTF9DQl9IQU5EU0hBS0VfU1RBUlQ6CisgICAgICAgIHByaW50Zigi U1NMX2hhbmRzaGFrZTolcyAlc1xyXG4iLAorICAgICAgICAgICAgICAgIFNTTF9zdGF0ZV9zdHJp bmcoKFNTTCAqKXMpLFNTTF9zdGF0ZV9zdHJpbmdfbG9uZygoU1NMICopcykpOworICAgICAgICBi cmVhazsKKyAgICBjYXNlIFNTTF9DQl9IQU5EU0hBS0VfRE9ORToKKyAgICAgICAgcHJpbnRmKCJT U0xfaGFuZHNoYWtlOiVzICVzXHJcbiIsCisgICAgICAgICAgICAgICAgU1NMX3N0YXRlX3N0cmlu ZygoU1NMICopcyksU1NMX3N0YXRlX3N0cmluZ19sb25nKChTU0wgKilzKSk7CisgICAgICAgIGJy ZWFrOworICAgIH0KK30KKworI2lmZGVmIFVTRV9DRVJUX0NCCisvKiBSZXR1cm4gMSwgY2xpZW50 IGNlcnQgaXMgYXZhaWxhYmxlICovCisvKiBSZXR1cm4gMCwgbm8gY2xpZW50IGNlcnQgaXMgYXZh aWxhYmxlICovCisvKiBSZXR1cm4gLTEsIGNhbGxiYWNrIG11c3QgYmUgY2FsbGVkIGFnYWluLiBT U0xfd2FudF94NTA5X2xvb2t1cCgpID09IDEgKi8KK2ludAorI2lmZGVmIENLX0FOU0lDCitzc2xf Y2xpZW50X2NlcnRfY2FsbGJhY2soU1NMICogcywgWDUwOSAqKiB4NTA5LCBFVlBfUEtFWSAqKiBw a2V5KQorI2Vsc2UgLyogQ0tfQU5TSUMgKi8KK3NzbF9jbGllbnRfY2VydF9jYWxsYmFjayhzLCB4 NTA5LCBwa2V5KQorICAgIFNTTCAqIHM7CisgICAgWDUwOSAqKiB4NTA5OworICAgIEVWUF9QS0VZ ICoqIHBrZXk7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAgICBzZXR2ZXJib3NpdHkoKTsK KworICAgIGlmICggc3NsX2RlYnVnX2ZsYWcgKSB7CisgICAgICAgIGNvbnN0IGNoYXIgKiBjaXBo ZXJfbGlzdD1TU0xfZ2V0X2NpcGhlcihzKTsKKyAgICAgICAgcHJpbnRmKCJzc2xfY2xpZW50X2Nl cnRfY2FsbGJhY2sgY2FsbGVkICglcylcclxuIiwKKyAgICAgICAgICAgICAgICBjaXBoZXJfbGlz dD9jaXBoZXJfbGlzdDoiVU5LTk9XTiIpOworICAgIH0KKyNpZmRlZiBDT01NRU5UCisgICAgaWYg KCBzID09IHRsc19jb24gKSB7CisgICAgICAgIGlmICh0bHNfbG9hZF9jZXJ0cyh0bHNfY3RzLHRs c19jb24sMCkpIHsKKyAgICAgICAgICAgICp4NTA5ID0gU1NMX2dldF9jZXJ0aWZpY2F0ZShzKTsK KyAgICAgICAgICAgICpwa2V5ID0gU1NMX2dldF9wcml2YXRla2V5KHMpOworICAgICAgICAgICAg cmV0dXJuKDEpOworICAgICAgICB9CisgICAgfSBlbHNlIGlmICggcyA9PSBzc2xfY29uICkgewor ICAgICAgICBpZiAodGxzX2xvYWRfY2VydHMoc3NsX2N0eCxzc2xfY29uLDApKSB7CisgICAgICAg ICAgICAqeDUwOSA9IFNTTF9nZXRfY2VydGlmaWNhdGUocyk7CisgICAgICAgICAgICAqcGtleSA9 IFNTTF9nZXRfcHJpdmF0ZWtleShzKTsKKyAgICAgICAgICAgIHJldHVybigxKTsKKyAgICAgICAg fQorICAgIH0KKyAgICByZXR1cm4oMCk7CisjZWxzZSAvKiBDT01NRU5UICovCisgICAgcmV0dXJu KDApOworI2VuZGlmIC8qIENPTU1FTlQgKi8KK30KKyNlbmRpZiAvKiBVU0VfQ0VSVF9DQiAqLwor CisjaWZuZGVmIE1TX0NBTExCQUNLCisjZGVmaW5lIE1TX0NBTExCQUNLCisjZW5kaWYgLyogTVNf Q0FMTEJBQ0sgKi8KKworc3RhdGljIFJTQSBNU19DQUxMQkFDSyAqCisjaWZkZWYgQ0tfQU5TSUMK K3RtcF9yc2FfY2IoU1NMICogcywgaW50IGV4cG9ydCwgaW50IGtleWxlbmd0aCkKKyNlbHNlIC8q IENLX0FOU0lDICovCit0bXBfcnNhX2NiKHMsZXhwb3J0LGtleWxlbmd0aCkKK1NTTCAqczsKK2lu dCBleHBvcnQ7CitpbnQga2V5bGVuZ3RoOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAg c3RhdGljIFJTQSAqcnNhX3RtcD1OVUxMOworCisjaWZuZGVmIE5PX1JTQQorICAgIGlmIChyc2Ff dG1wID09IE5VTEwpCisgICAgeworICAgICAgICBpZiAoc3NsX2RlYnVnX2ZsYWcpCisgICAgICAg ICAgICBwcmludGYoIkdlbmVyYXRpbmcgdGVtcG9yYXJ5ICglZCBiaXQpIFJTQSBrZXkuLi5cclxu IixrZXlsZW5ndGgpOworCisgICAgICAgIHJzYV90bXA9UlNBX2dlbmVyYXRlX2tleShrZXlsZW5n dGgsUlNBX0Y0LE5VTEwsTlVMTCk7CisKKyAgICAgICAgaWYgKHNzbF9kZWJ1Z19mbGFnKQorICAg ICAgICAgICAgcHJpbnRmKCJcclxuIik7CisgICAgfQorI2Vsc2UgLyogTk9fUlNBICovCisgICAg aWYgKHNzbF9kZWJ1Z19mbGFnKQorICAgICAgICBwcmludGYoIlVuYWJsZSB0byBnZW5lcmF0ZSB0 ZW1wb3JhcnkgUlNBIGtleS4uLlxyXG4iKTsKKyNlbmRpZgorICAgIHJldHVybihyc2FfdG1wKTsK K30KKworCisjaWZuZGVmIE5PX0RICitzdGF0aWMgdW5zaWduZWQgY2hhciBkaDUxMl9wW109ewor ICAgIDB4RTksMHg0RSwweDNBLDB4NjQsMHhGQSwweDY1LDB4NUYsMHhBNiwweDQ0LDB4QzcsMHhG QywweEYxLAorICAgIDB4MTYsMHg4QiwweDExLDB4MTEsMHg3QSwweEYwLDB4QjIsMHg0OSwweDgw LDB4NTYsMHhBMywweEY4LAorICAgIDB4MEYsMHg3RCwweDAxLDB4NjgsMHg1RCwweEY2LDB4OEEs MHhFQSwweDhDLDB4REQsMHgwMSwweERDLAorICAgIDB4NDMsMHgxOCwweEUwLDB4QzQsMHg4OSww eDgwLDB4RTYsMHgyRCwweDQ0LDB4NzcsMHg0NSwweEZELAorICAgIDB4QkEsMHhGQywweDQzLDB4 MzUsMHgxMiwweEMwLDB4RUQsMHgzMiwweEQzLDB4MTYsMHhFRiwweDUxLAorICAgIDB4MDksMHg0 NCwweEEyLDB4REIsCit9Oworc3RhdGljIHVuc2lnbmVkIGNoYXIgZGg1MTJfZ1tdPXsKKyAgICAw eDA1LAorfTsKKworc3RhdGljIHVuc2lnbmVkIGNoYXIgZGg3NjhfcFtdPXsKKyAgICAweDhCLDB4 MkEsMHg4QywweDZDLDB4MEYsMHg4NywweEM3LDB4MzQsMHhFRSwweDJFLDB4RkIsMHg2MCwKKyAg ICAweDk0LDB4QjMsMHhCRiwweDk1LDB4QkEsMHg4NCwweDc0LDB4ODYsMHhFQSwweEUwLDB4QTQs MHgzMywKKyAgICAweEUwLDB4OEYsMHg3QywweDc5LDB4NUMsMHg2MiwweEUyLDB4OTEsMHhDNSww eDZELDB4NjgsMHhCOSwKKyAgICAweDZDLDB4NUUsMHg0RSwweDk0LDB4MEMsMHg4RSwweDU2LDB4 OEUsMHhFQiwweDk4LDB4N0MsMHg2RSwKKyAgICAweDBFLDB4RjIsMHhENSwweEFBLDB4MjIsMHgy NywweDNGLDB4MEYsMHhBRiwweDEwLDB4QjUsMHgwQiwKKyAgICAweDE2LDB4Q0MsMHgwNSwweDI3 LDB4QkIsMHg1OCwweDZELDB4NjEsMHg0QiwweDJCLDB4QUIsMHhEQywKKyAgICAweDZBLDB4MTUs MHhCQywweDM2LDB4NzUsMHg0RCwweEVDLDB4QUIsMHhGQSwweEI2LDB4RTEsMHhCMSwKKyAgICAw eDEzLDB4NzAsMHhEOCwweDc3LDB4Q0QsMHg1RSwweDUxLDB4NzcsMHg4MSwweDBELDB4NzcsMHg0 MywKK307CitzdGF0aWMgdW5zaWduZWQgY2hhciBkaDc2OF9nW109eworICAgIDB4MDUsCit9Owor CitzdGF0aWMgdW5zaWduZWQgY2hhciBkaDEwMjRfcFtdPXsKKyAgICAweEE0LDB4NzUsMHhDRiww eDM1LDB4MDAsMHhBRiwweDNDLDB4MTcsMHhDRSwweEIwLDB4RDAsMHg1MiwKKyAgICAweDQzLDB4 QTAsMHgwRSwweEZBLDB4QTIsMHhDOSwweEJFLDB4MEIsMHg3NiwweDdBLDB4RDksMHgyRSwKKyAg ICAweEY0LDB4OTcsMHhBQywweDAyLDB4MjQsMHg2OSwweEY2LDB4MzYsMHg0RiwweEFCLDB4Q0Ms MHg0MywKKyAgICAweEMxLDB4NzQsMHhGRiwweEEzLDB4RDQsMHgwNCwweDBGLDB4MTEsMHgyQiww eDZELDB4OEMsMHg0NywKKyAgICAweEM5LDB4Q0YsMHg0MCwweDkzLDB4OUIsMHg3RCwweDFFLDB4 NTIsMHg4NSwweEIyLDB4MTcsMHg1NSwKKyAgICAweDlDLDB4RjIsMHg0MSwweDAyLDB4MkEsMHg5 RCwweDVGLDB4MjQsMHgyMiwweEM2LDB4MDQsMHhDNCwKKyAgICAweEFCLDB4OTIsMHg2RCwweEM3 LDB4QzgsMHhGMywweDQxLDB4NTgsMHg2QywweDg2LDB4RkQsMHhCOCwKKyAgICAweDBGLDB4MkQs MHhERCwweEJGLDB4QTgsMHg0MCwweDBDLDB4NTgsMHhDOCwweEYyLDB4M0YsMHgxOCwKKyAgICAw eEVGLDB4RjEsMHg5MywweDNFLDB4QkEsMHgxNiwweDQxLDB4QkUsMHgzMiwweDZDLDB4QzUsMHg2 MywKKyAgICAweEZGLDB4OEEsMHgwMiwweDNELDB4QUMsMHhENSwweDVBLDB4NDksMHg2NCwweDM0 LDB4MTQsMHgyRSwKKyAgICAweEZCLDB4MkUsMHhFNywweDM5LDB4MUEsMHgwRiwweDNDLDB4MzMs Cit9Oworc3RhdGljIHVuc2lnbmVkIGNoYXIgZGgxMDI0X2dbXT17CisgICAgMHgwNSwKK307CisK K3N0YXRpYyB1bnNpZ25lZCBjaGFyIGRoMTUzNl9wW109eworICAgIDB4QTMsMHgyQiwweDc1LDB4 MEUsMHg3QiwweDMxLDB4ODIsMHhDQSwweEYyLDB4RkMsMHhGMywweDNELAorICAgIDB4Q0UsMHg1 RiwweENELDB4NUIsMHg5NSwweEY2LDB4MkYsMHhBNCwweDVELDB4MDgsMHgyNiwweEQyLAorICAg IDB4NUYsMHhDMCwweDNGLDB4QzUsMHhEOCwweEEyLDB4RkUsMHg4MywweDI2LDB4QkMsMHhFQiww eDdELAorICAgIDB4RjAsMHg0RSwweEQyLDB4QTYsMHhCQiwweDNDLDB4ODgsMHg2MywweENFLDB4 OTgsMHhERSwweDA4LAorICAgIDB4RTIsMHhFMSwweEFGLDB4RTIsMHgzOCwweEE4LDB4RkEsMHg2 OCwweDc2LDB4OEQsMHhCRiwweERGLAorICAgIDB4QkIsMHgzMCwweDE1LDB4RkUsMHhCRCwweDIy LDB4Q0MsMHgwMywweDRFLDB4NUUsMHgzMywweEEzLAorICAgIDB4NkQsMHhENiwweDY4LDB4MTIs MHg5NywweDE3LDB4NEIsMHhCNSwweDg0LDB4NUYsMHg1RiwweEEzLAorICAgIDB4NUMsMHgyRiww eEE0LDB4MTAsMHhDMSwweEFELDB4QkYsMHhBQywweDMwLDB4Q0EsMHg0NywweDY0LAorICAgIDB4 NjMsMHhGRSwweEVFLDB4RUUsMHhBMSwweDY0LDB4NzMsMHg3MCwweEFBLDB4RjksMHhGRSwweEM2 LAorICAgIDB4QUQsMHg1RSwweEY2LDB4RjMsMHg5QywweERGLDB4MzQsMHg1MywweDM0LDB4NzIs MHhBNiwweEE0LAorICAgIDB4QkIsMHg4MSwweDVBLDB4NDMsMHg0MSwweEZELDB4NDEsMHgwNSww eDVCLDB4NzcsMHg3QiwweDg0LAorICAgIDB4MDMsMHhGQSwweDhBLDB4RkEsMHhGNywweDhFLDB4 MEYsMHhDQiwweDUxLDB4QTIsMHhCOCwweDQ1LAorICAgIDB4RkYsMHg1OSwweDQyLDB4RUYsMHhD RiwweEY2LDB4MjUsMHgzNywweEUyLDB4NkQsMHhGRiwweDY5LAorICAgIDB4MTEsMHhGNSwweDc3 LDB4NTksMHg3OSwweDFDLDB4NUYsMHgwNSwweEZDLDB4N0EsMHg2NSwweDgxLAorICAgIDB4MDMs MHg0QSwweDc4LDB4QzYsMHhFOSwweDQ4LDB4NzMsMHhGNiwweDEwLDB4QkMsMHg5OSwweDFDLAor ICAgIDB4RUUsMHg0NCwweDJGLDB4OEIsMHg3MCwweENBLDB4QTgsMHhCNiwweDAyLDB4ODMsMHgz RSwweDBCLAorfTsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGRoMTUzNl9nW109eworICAgIDB4MDUs Cit9OworCitzdGF0aWMgdW5zaWduZWQgY2hhciBkaDIwNDhfcFtdPXsKKyAgICAweEZBLDB4NEUs MHhFNCwweDNCLDB4RkEsMHhDMSwweDg3LDB4REQsMHhFNywweEM2LDB4OEIsMHhFNiwKKyAgICAw eDEzLDB4ODUsMHhCQywweDlCLDB4MkIsMHg4QiwweDVCLDB4NDYsMHhCQiwweDhCLDB4ODYsMHg2 RCwKKyAgICAweEQ3LDB4QjYsMHhENSwweDQ5LDB4QzUsMHg1NCwweEYyLDB4M0UsMHhEMiwweDM5 LDB4NjQsMHg5QiwKKyAgICAweDBFLDB4MzMsMHgzOSwweDhGLDB4RkEsMHhGQSwweEQ5LDB4Nzgs MHhFRCwweDM0LDB4ODIsMHgyOSwKKyAgICAweDM3LDB4NTgsMHg0RCwweDVELDB4NDAsMHhDQiww eDY5LDB4RTMsMHg4QSwweDlGLDB4MTcsMHgwQywKKyAgICAweDAxLDB4MjMsMHg2QiwweDA1LDB4 MDEsMHhBRiwweDMzLDB4REUsMHhERiwweDFBLDB4QkIsMHg3QiwKKyAgICAweDZBLDB4OUYsMHhE OCwweEVELDB4OEQsMHg1RSwweDQ0LDB4MTksMHg1QiwweEUwLDB4QjYsMHgyMywKKyAgICAweEY5 LDB4N0EsMHg5NiwweDZFLDB4OTQsMHgzMywweDMxLDB4NDksMHhCQSwweDg0LDB4RDUsMHgxMiwK KyAgICAweEQ3LDB4NkQsMHhEQywweDM1LDB4NTQsMHg2NCwweEEzLDB4RDgsMHgwNCwweDI2LDB4 QzUsMHhBRiwKKyAgICAweDdGLDB4RTMsMHhGRSwweDZGLDB4QkUsMHhENSwweDE3LDB4NzIsMHg0 QiwweEE2LDB4RDAsMHhBNywKKyAgICAweDVGLDB4MTgsMHhGNSwweEYwLDB4MkQsMHgxMSwweDlB LDB4RjYsMHhENSwweDNCLDB4NkMsMHg2MSwKKyAgICAweDNDLDB4NkYsMHg4RSwweDA5LDB4NEYs MHgyQywweEUxLDB4MjYsMHgwNiwweDUxLDB4QjMsMHgxOSwKKyAgICAweDg1LDB4ODUsMHgxMyww eEY5LDB4QzIsMHg2RSwweDgwLDB4MjgsMHg5RSwweDhBLDB4QTAsMHgwMSwKKyAgICAweDQ2LDB4 RDEsMHg4NSwweDQ0LDB4OEMsMHhFNiwweEVFLDB4N0UsMHgxRSwweDE3LDB4M0QsMHhCQSwKKyAg ICAweDU0LDB4RkYsMHhFOCwweDBFLDB4REQsMHg1MSwweEYzLDB4NzQsMHg3RiwweDBELDB4MEIs MHhBQiwKKyAgICAweENBLDB4ODQsMHg4RCwweDI0LDB4NUQsMHg1NiwweEQ0LDB4NDcsMHgwMiww eEZDLDB4OTMsMHg5RiwKKyAgICAweEFFLDB4OUIsMHg1QywweERCLDB4NjMsMHhFQiwweDY1LDB4 MDEsMHgzOCwweEMyLDB4N0IsMHgzMCwKKyAgICAweDFFLDB4MTcsMHgxQywweDc1LDB4RjUsMHgx NiwweDNCLDB4NEYsMHg1RiwweDQxLDB4MzIsMHhCNSwKKyAgICAweEZGLDB4OUUsMHg2MSwweEZE LDB4RDIsMHg2MiwweDZFLDB4RkQsMHg4QSwweDI4LDB4OTMsMHg1OSwKKyAgICAweDJELDB4NzAs MHgxNCwweDRELDB4RTEsMHg4NiwweEQ1LDB4OTAsMHhCNCwweERGLDB4NzIsMHg3MSwKKyAgICAw eEUwLDB4QjQsMHhEMCwweEQ2LDB4ODIsMHgzQSwweDRBLDB4MDQsMHg1OCwweDMyLDB4MEIsMHhE MywKKyAgICAweDUxLDB4MTMsMHgzMiwweDYzLAorfTsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGRo MjA0OF9nW109eworICAgIDB4MDIsCit9OworCitzdGF0aWMgREggKgorZ2V0X2RoNTEyKCkKK3sK KyAgICBESCAqZGg9TlVMTDsKKworICAgIGlmICgoZGg9REhfbmV3KCkpID09IE5VTEwpCisgICAg ICAgIHJldHVybihOVUxMKTsKKyAgICBkaC0+cD1CTl9iaW4yYm4oZGg1MTJfcCxzaXplb2YoZGg1 MTJfcCksTlVMTCk7CisgICAgZGgtPmc9Qk5fYmluMmJuKGRoNTEyX2csc2l6ZW9mKGRoNTEyX2cp LE5VTEwpOworICAgIGlmICgoZGgtPnAgPT0gTlVMTCkgfHwgKGRoLT5nID09IE5VTEwpKQorICAg ICAgICByZXR1cm4oTlVMTCk7CisgICAgcmV0dXJuKGRoKTsKK30KKworc3RhdGljIERIICoKK2dl dF9kaDc2OCgpCit7CisgICAgREggKmRoPU5VTEw7CisKKyAgICBpZiAoKGRoPURIX25ldygpKSA9 PSBOVUxMKQorICAgICAgICByZXR1cm4oTlVMTCk7CisgICAgZGgtPnA9Qk5fYmluMmJuKGRoNzY4 X3Asc2l6ZW9mKGRoNzY4X3ApLE5VTEwpOworICAgIGRoLT5nPUJOX2JpbjJibihkaDc2OF9nLHNp emVvZihkaDc2OF9nKSxOVUxMKTsKKyAgICBpZiAoKGRoLT5wID09IE5VTEwpIHx8IChkaC0+ZyA9 PSBOVUxMKSkKKyAgICAgICAgcmV0dXJuKE5VTEwpOworICAgIHJldHVybihkaCk7Cit9CisKK3N0 YXRpYyBESCAqCitnZXRfZGgxMDI0KCkKK3sKKyAgICBESCAqZGg9TlVMTDsKKworICAgIGlmICgo ZGg9REhfbmV3KCkpID09IE5VTEwpCisgICAgICAgIHJldHVybihOVUxMKTsKKyAgICBkaC0+cD1C Tl9iaW4yYm4oZGgxMDI0X3Asc2l6ZW9mKGRoMTAyNF9wKSxOVUxMKTsKKyAgICBkaC0+Zz1CTl9i aW4yYm4oZGgxMDI0X2csc2l6ZW9mKGRoMTAyNF9nKSxOVUxMKTsKKyAgICBpZiAoKGRoLT5wID09 IE5VTEwpIHx8IChkaC0+ZyA9PSBOVUxMKSkKKyAgICAgICAgcmV0dXJuKE5VTEwpOworICAgIHJl dHVybihkaCk7Cit9CisKK3N0YXRpYyBESCAqCitnZXRfZGgxNTM2KCkKK3sKKyAgICBESCAqZGg9 TlVMTDsKKworICAgIGlmICgoZGg9REhfbmV3KCkpID09IE5VTEwpCisgICAgICAgIHJldHVybihO VUxMKTsKKyAgICBkaC0+cD1CTl9iaW4yYm4oZGgxNTM2X3Asc2l6ZW9mKGRoMTUzNl9wKSxOVUxM KTsKKyAgICBkaC0+Zz1CTl9iaW4yYm4oZGgxNTM2X2csc2l6ZW9mKGRoMTUzNl9nKSxOVUxMKTsK KyAgICBpZiAoKGRoLT5wID09IE5VTEwpIHx8IChkaC0+ZyA9PSBOVUxMKSkKKyAgICAgICAgcmV0 dXJuKE5VTEwpOworICAgIHJldHVybihkaCk7Cit9CisKK3N0YXRpYyBESCAqCitnZXRfZGgyMDQ4 KCkKK3sKKyAgICBESCAqZGg9TlVMTDsKKworICAgIGlmICgoZGg9REhfbmV3KCkpID09IE5VTEwp CisgICAgICAgIHJldHVybihOVUxMKTsKKyAgICBkaC0+cD1CTl9iaW4yYm4oZGgyMDQ4X3Asc2l6 ZW9mKGRoMjA0OF9wKSxOVUxMKTsKKyAgICBkaC0+Zz1CTl9iaW4yYm4oZGgyMDQ4X2csc2l6ZW9m KGRoMjA0OF9nKSxOVUxMKTsKKyAgICBpZiAoKGRoLT5wID09IE5VTEwpIHx8IChkaC0+ZyA9PSBO VUxMKSkKKyAgICAgICAgcmV0dXJuKE5VTEwpOworICAgIHJldHVybihkaCk7Cit9CisjZW5kaWYg LyogTk9fREggKi8KKworc3RhdGljIERIIE1TX0NBTExCQUNLICoKKyNpZmRlZiBDS19BTlNJQwor dG1wX2RoX2NiKFNTTCAqIHMsIGludCBleHBvcnQsIGludCBrZXlsZW5ndGgpCisjZWxzZSAvKiBD S19BTlNJQyAqLwordG1wX2RoX2NiKHMsZXhwb3J0LGtleWxlbmd0aCkKK1NTTCAqczsKK2ludCBl eHBvcnQ7CitpbnQga2V5bGVuZ3RoOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgc3Rh dGljIERIICpkaF90bXA9TlVMTDsKKyAgICBCSU8gKmJpbz1OVUxMOworCisjaWZuZGVmIE5PX0RI CisgICAgaWYgKGRoX3RtcCA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgaWYgKHNzbF9kaF9wYXJh bV9maWxlICAmJgorICAgICAgICAgICAgIChiaW89QklPX25ld19maWxlKHNzbF9kaF9wYXJhbV9m aWxlLCJyIikpICE9IE5VTEwpCisgICAgICAgICAgICBkaF90bXA9UEVNX3JlYWRfYmlvX0RIcGFy YW1zKGJpbyxOVUxMLE5VTEwsTlVMTCk7CisgICAgICAgIGlmIChiaW8gIT0gTlVMTCkKKyAgICAg ICAgICAgIEJJT19mcmVlKGJpbyk7CisKKyAgICAgICAgaWYgKCBkaF90bXAgPT0gTlVMTCApIHsK KyAgICAgICAgICAgIGlmICgga2V5bGVuZ3RoIDwgNzY4ICkKKyAgICAgICAgICAgICAgICBkaF90 bXAgPSBnZXRfZGg1MTIoKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKCBrZXlsZW5ndGggPCAxMDI0 ICkKKyAgICAgICAgICAgICAgICBkaF90bXAgPSBnZXRfZGg3NjgoKTsKKyAgICAgICAgICAgIGVs c2UgaWYgKCBrZXlsZW5ndGggPCAxNTM2ICkKKyAgICAgICAgICAgICAgICBkaF90bXAgPSBnZXRf ZGgxMDI0KCk7CisgICAgICAgICAgICBlbHNlIGlmICgga2V5bGVuZ3RoIDwgMjA0OCApCisgICAg ICAgICAgICAgICAgZGhfdG1wID0gZ2V0X2RoMTUzNigpOworICAgICAgICAgICAgZWxzZQorICAg ICAgICAgICAgICAgIGRoX3RtcCA9IGdldF9kaDIwNDgoKTsKKyAgICAgICAgfQorICAgIH0KKyNl bHNlIC8qIE5PX0RIICovCisgICAgaWYgKHNzbF9kZWJ1Z19mbGFnKQorICAgICAgICBwcmludGYo IkRIIG5vdCBzdXBwb3J0ZWQuLi5cclxuIik7CisjZW5kaWYgLyogTk9fREggKi8KKyAgICByZXR1 cm4oZGhfdG1wKTsKK30KKworc3RhdGljIHZvaWQKK3NzbF9kaXNwbGF5X2NvbXAoU1NMICogc3Ns KQoreworICAgIGlmICggcXVpZXQgKQkJCS8qIGZkYyAtIE1vbiBOb3YgMjggMTE6NDQ6MTUgMjAw NSAqLworICAgICAgICByZXR1cm47CisKKyAgICBpZiAoICFja19zc2xlYXlfaXNfaW5zdGFsbGVk KCkgKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoc3NsID09IE5VTEwpCisgICAgICAgIHJl dHVybjsKKworICAgIGlmIChzc2wtPmV4cGFuZCA9PSBOVUxMIHx8IHNzbC0+ZXhwYW5kLT5tZXRo ID09IE5VTEwpCisgICAgICAgIHByaW50ZigiQ29tcHJlc3Npb246IE5vbmVcclxuIik7CisgICAg ZWxzZSB7CisgICAgICAgIHByaW50ZigiQ29tcHJlc3Npb246ICVzXHJcbiIsc3NsLT5leHBhbmQt Pm1ldGgtPm5hbWUpOworICAgIH0KK30KKworaW50CisjaWZkZWYgQ0tfQU5TSUMKK3NzbF9kaXNw bGF5X2Nvbm5lY3RfZGV0YWlscyhTU0wgKiBzc2xfY29uLCBpbnQgc2VydmVyLCBpbnQgdmVyYm9z ZSkKKyNlbHNlIC8qIENLX0FOU0lDICovCitzc2xfZGlzcGxheV9jb25uZWN0X2RldGFpbHMoc3Ns X2NvbixzZXJ2ZXIsdmVyYm9zZSkKK1NTTCAqc3NsX2NvbjsKK2ludCBzZXJ2ZXI7CitpbnQgdmVy Ym9zZTsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworICAgIFg1MDkgKnBlZXI7CisgICAgU1NM X0NJUEhFUiAqIGNpcGhlcjsKKyAgICBjb25zdCBjaGFyICpjaXBoZXJfbGlzdDsKKyAgICBjaGFy IGJ1Zls1MTJdPSIiOworCisgICAgaWYgKCBxdWlldCApCQkJLyogZmRjIC0gTW9uIE5vdiAyOCAx MTo0NDoxNSAyMDA1ICovCisgICAgICAgIHJldHVybigwKTsKKworICAgIGlmICggIWNrX3NzbGVh eV9pc19pbnN0YWxsZWQoKSApCisgICAgICAgIHJldHVybigwKTsKKworICAgIGlmICggaW5zZXJ2 ZXIgJiYgIXRuX2RlYiApCisgICAgICAgIHJldHVybigwKTsKKworICAgIC8qIHRoZSBjaXBoZXIg bGlzdCAqY2FuKiBiZSBOVUxMIC4uLiB1c2VsZXNzIGJ1dCBpdCBoYXBwZW5zISAqLworICAgIGNp cGhlciA9IFNTTF9nZXRfY3VycmVudF9jaXBoZXIoc3NsX2Nvbik7CisgICAgY2lwaGVyX2xpc3Qg PSBTU0xfQ0lQSEVSX2dldF9uYW1lKGNpcGhlcik7CisgICAgU1NMX0NJUEhFUl9kZXNjcmlwdGlv bihjaXBoZXIsYnVmLHNpemVvZihidWYpKTsKKyAgICBpZiAoY2lwaGVyX2xpc3Q9PU5VTEwpCisg ICAgICAgIGNpcGhlcl9saXN0PSI8TlVMTD4iOworICAgIHByaW50ZigiW1RMUyAtICVzIixidWYp OworICAgIHNzbF9kaXNwbGF5X2NvbXAoc3NsX2Nvbik7CisKKyAgICBpZiAoIHNlcnZlciApIHsK KyAgICAgICAgY2lwaGVyX2xpc3Q9U1NMX2dldF9zaGFyZWRfY2lwaGVycyhzc2xfY29uLGJ1Ziw1 MTIpOworICAgICAgICBpZiAoY2lwaGVyX2xpc3Q9PU5VTEwpCisgICAgICAgICAgICBjaXBoZXJf bGlzdD0iPE5VTEw+IjsKKyAgICAgICAgcHJpbnRmKCJbVExTIC0gc2hhcmVkIGNpcGhlcnM9JXNd XHJcbiIsCisgICAgICAgICAgICAgICAgY2lwaGVyX2xpc3QpOworICAgICAgICB9ICAgICAgIAor ICAgIGlmICggc2VydmVyIHx8IHRuX2RlYiApIHsKKyAgICAgICAgcGVlcj1TU0xfZ2V0X3BlZXJf Y2VydGlmaWNhdGUoc3NsX2Nvbik7CisgICAgICAgIGlmIChwZWVyICE9IE5VTEwpIHsKKyAgICAg ICAgICAgIFg1MDlfTkFNRV9vbmVsaW5lKFg1MDlfZ2V0X3N1YmplY3RfbmFtZShwZWVyKSxidWYs NTEyKTsKKyAgICAgICAgICAgIHByaW50ZigiW1RMUyAtIHN1YmplY3Q9JXNdXHJcbiIsYnVmKTsK KyAgICAgICAgICAgIFg1MDlfTkFNRV9vbmVsaW5lKFg1MDlfZ2V0X2lzc3Vlcl9uYW1lKHBlZXIp LGJ1Ziw1MTIpOworICAgICAgICAgICAgcHJpbnRmKCJbVExTIC0gaXNzdWVyPSVzXVxyXG4iLGJ1 Zik7CisgICAgICAgICAgICAvKiBYNTA5X2ZyZWUocGVlcik7ICovCisgICAgICAgIH0gZWxzZSBp ZiAoIXRsc19pc19rcmI1KDApKSB7CisgICAgICAgICAgICBpZiAoICFzc3RlbG5ldCAmJiAhdGNw X2luY29taW5nICkgeworICAgICAgICAgICAgICAgIHByaW50ZigiW1RMUyAtIE5vIGNlcnRpZmlj YXRlIHByb3ZpZGVkLl1cclxuIik7CisgICAgICAgICAgICAgICAgcHJpbnRmKAorICAgICAiW1RM UyAtIFRoZSBpZGVudGl0eSBvZiB0aGUgaG9zdCBjb3VsZCBub3QgYmUgdmVyaWZpZWQuXVxyXG4i KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4oMCk7Cit9CisK Ky8qCisgKiBVc2UgU1NMX0NUWF9zZXRfZGVmYXVsdF9wYXNzd2RfY2JfdXNlcmRhdGEoU1NMX0NU WCAqLCB2b2lkICogdXNlcmRhdGEpCisgKiB0byBzZXQgdGhlIHZhbHVlIG9mIHRoZSB1c2VyZGF0 YS4gIFdlIGFyZSBnb2luZyB0byB1c2UgaXQgdG8gc3RvcmUgdGhlCisgKiBwcm9tcHQuCisgKi8K KworaW50CisjaWZkZWYgQ0tfQU5TSUMKK3NzbF9wYXNzd2RfY2FsbGJhY2soY2hhciAqYnVmLCBp bnQgbGVuLCBpbnQgcndmbGFnLCBWT0lEICogdXNlcmRhdGEpCisjZWxzZSAvKiBDS19BTlNJQyAq Lworc3NsX3Bhc3N3ZF9jYWxsYmFjayhidWYsbGVuLHJ3ZmxhZyx1c2VyZGF0YSkKKyAgICBjaGFy ICogYnVmOyBpbnQgbGVuOyBpbnQgcndmbGFnOyBWT0lEICp1c2VyZGF0YTsKKyNlbmRpZiAvKiBD S19BTlNJQyAqLworeworICAgIGV4dGVybiBjaGFyIHB3YnVmW107CisgICAgZXh0ZXJuIGludCAg cHdmbGcsIHB3Y3J5cHQ7CisgICAgaW50ICAgb2s7CisgICAgY2hhciAqcHJvbXB0PU5VTEw7CisK KyAgICBpZiAoIHB3YnVmWzBdICYmIHB3ZmxnICkgeworICAgICAgICBpbnQgbjsKKyAgICAgICAg biA9IGNrc3RybmNweShidWYscHdidWYsbGVuKTsKKyNpZmRlZiBPUzIKKyAgICAgICAgaWYgKCBw d2NyeXB0ICkKKyAgICAgICAgICAgIGNrX2VuY3J5cHQoKGNoYXIgKilidWYpOworI2VuZGlmIC8q IE9TMiAqLworICAgICAgICByZXR1cm4obik7CisgICAgfQorCisgICAgaWYgKCB1c2VyZGF0YSA9 PSBOVUxMICkKKyAgICAgICAgcHJvbXB0PSJFbnRlciBjZXJ0aWZpY2F0ZSBwYXNzcGhyYXNlOiAi OworICAgIGVsc2UKKyAgICAgICAgcHJvbXB0PShjaGFyKil1c2VyZGF0YTsKKyAgICBvayA9IHVx X3R4dChOVUxMLHByb21wdCwyLE5VTEwsYnVmLGxlbixOVUxMLERFRkFVTFRfVVFfVElNRU9VVCk7 CisgICAgcmV0dXJuKG9rID4gMCA/IHN0cmxlbihidWYpIDogMCk7Cit9CisKKworLyogQXR0ZW1w dHMgdG8gbG9hZCBjZXJ0aWZpY2F0ZSBkYXRhIGludG8gdGhlIFRMUyBjb250ZXh0IHN0cnVjdHVy ZXMgKi8KKy8qIFJldHVybnMgMSBvbiBzdWNjZXNzOyAwIG9uIGZhaWx1cmUgKi8KK2ludAordGxz X2xvYWRfY2VydHMoU1NMX0NUWCAqIGN0eCwgU1NMICogY29uLCBpbnQgc2VydmVyKQoreworICAg IGludCByYyA9IDE7CisKKyAgICBpZiAoICFja19zc2xlYXlfaXNfaW5zdGFsbGVkKCkgKQorICAg ICAgICByZXR1cm4oMCk7CisKKyAgICBkZWJ1ZyhGMTEwLCJ0bHNfbG9hZF9jZXJ0cyIsIlNTTF9D VFgiLDApOworICAgIGRlYnVnKEYxMTAsInRsc19sb2FkX2NlcnRzIiwiU1NMIiwwKTsKKyAgICBk ZWJ1ZyhGMTEwLCJ0bHNfbG9hZF9jZXJ0cyIsInNlcnZlciIsMCk7CisKKyAgICBpZiAoIGNvbiAp IHsKKyAgICAgICAgaWYgKHNzbF9yc2FfY2VydF9maWxlKSB7CisgICAgICAgICAgICBpZiAoIHNz bF9kZWJ1Z19mbGFnICkKKyAgICAgICAgICAgICAgICBwcmludGYoIkxvYWRpbmcgUlNBIGNlcnRp ZmljYXRlIGludG8gU1NMXHJcbiIpOworCisgICAgICAgICAgICByYyA9IFNTTF91c2VfY2VydGlm aWNhdGVfZmlsZShjb24sIHNzbF9yc2FfY2VydF9maWxlLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBYNTA5X0ZJTEVUWVBFX1BFTSk7CisgICAgICAgICAg ICBpZiAoIXJjKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICggIXF1aWV0IHx8 IHNzbF9kZWJ1Z19mbGFnICkKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJFcnJvciBsb2Fk aW5nIGNlcnRpZmljYXRlIGZyb20gJXNcclxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzc2xfcnNhX2NlcnRfZmlsZSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg ICAgIGlmICghc3NsX3JzYV9rZXlfZmlsZSB8fCAhc3NsX3JzYV9rZXlfZmlsZVswXSkKKyAgICAg ICAgICAgICAgICAgICAgbWFrZXN0cigmc3NsX3JzYV9rZXlfZmlsZSxzc2xfcnNhX2NlcnRfZmls ZSk7CisKKyAgICAgICAgICAgICAgICByYyA9IFNTTF91c2VfUHJpdmF0ZUtleV9maWxlKGNvbiwg c3NsX3JzYV9rZXlfZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgWDUwOV9GSUxFVFlQRV9QRU0pOworICAgICAgICAgICAgICAgIGlmICghcmMp CisgICAgICAgICAgICAgICAgICAgIHJjID0gU1NMX3VzZV9Qcml2YXRlS2V5X2ZpbGUoY29uLCBz c2xfcnNhX2NlcnRfZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFg1MDlfRklMRVRZUEVfUEVNKTsKKyAgICAgICAgICAgICAgICBpZiAo IXJjKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCAhcXVpZXQg fHwgc3NsX2RlYnVnX2ZsYWcgKQorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJFcnJv ciBsb2FkaW5nIGtleSBmcm9tICVzXHJcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHNzbF9yc2Ffa2V5X2ZpbGUpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg ICAgICAgICAgICAgIHJjID0gU1NMX2NoZWNrX3ByaXZhdGVfa2V5KGNvbik7CisgICAgICAgICAg ICAgICAgICAgIGlmICghcmMpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg ICAgICAgICAgIGlmICggc3NsX2RlYnVnX2ZsYWcgKQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHByaW50ZigKKyAgICAgICAgICAgICAgICAiUHJpdmF0ZSBrZXkgZG9lcyBub3QgbWF0Y2gg dGhlIGNlcnRpZmljYXRlIHB1YmxpYyBrZXlcclxuIik7CisgICAgICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBp ZiAoc3NsX2RzYV9jZXJ0X2ZpbGUpIHsKKyAgICAgICAgICAgIGlmICggc3NsX2RlYnVnX2ZsYWcg KQorICAgICAgICAgICAgICAgIHByaW50ZigiTG9hZGluZyBEU0EgY2VydGlmaWNhdGUgaW50byBT U0xcclxuIik7CisKKyAgICAgICAgICAgIHJjID0gU1NMX3VzZV9jZXJ0aWZpY2F0ZV9maWxlKGNv biwgc3NsX2RzYV9jZXJ0X2ZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFg1MDlfRklMRVRZUEVfUEVNKTsKKyAgICAgICAgICAgIGlmICghcmMpCisg ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKCBzc2xfZGVidWdfZmxhZyApIHsKKyAg ICAgICAgICAgICAgICAgICAgcHJpbnRmKCJFcnJvciBsb2FkaW5nIGNlcnRpZmljYXRlIGZyb20g JXNcclxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2xfZHNhX2NlcnRfZmlsZSk7 CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg ICBpZiAoIXNzbF9kaF9rZXlfZmlsZSB8fCAhc3NsX2RoX2tleV9maWxlWzBdKQorICAgICAgICAg ICAgICAgICAgICBtYWtlc3RyKCZzc2xfZGhfa2V5X2ZpbGUsc3NsX2RzYV9jZXJ0X2ZpbGUpOwor ICAgICAgICAgICAgICAgIHJjID0gU1NMX3VzZV9Qcml2YXRlS2V5X2ZpbGUoY29uLCBzc2xfZGhf a2V5X2ZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFg1MDlfRklMRVRZUEVfUEVNKTsKKyAgICAgICAgICAgICAgICBpZiAoIXJjKQorICAgICAg ICAgICAgICAgICAgICByYyA9IFNTTF91c2VfUHJpdmF0ZUtleV9maWxlKGNvbiwgc3NsX2RzYV9j ZXJ0X2ZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBYNTA5X0ZJTEVUWVBFX1BFTSk7CisgICAgICAgICAgICAgICAgaWYgKCFyYykKKyAg ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmICggIXF1aWV0IHx8IHNzbF9k ZWJ1Z19mbGFnICkgeworICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJFcnJvciBsb2Fk aW5nIGtleSBmcm9tICVzXHJcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNz bF9kaF9rZXlfZmlsZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9 IGVsc2UgeworICAgICAgICAgICAgICAgICAgICByYyA9IFNTTF9jaGVja19wcml2YXRlX2tleShj b24pOworICAgICAgICAgICAgICAgICAgICBpZiAoIXJjKQorICAgICAgICAgICAgICAgICAgICB7 CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHNzbF9kZWJ1Z19mbGFnICkKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICBwcmludGYoCisgICAgICAgICAgICAgICAgICAgIlByaXZhdGUg a2V5IGRvZXMgbm90IG1hdGNoIHRoZSBjZXJ0aWZpY2F0ZSBwdWJsaWMga2V5XG4iKTsKKyAgICAg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg ICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChzc2xfcnNhX2NlcnRfZmlsZSkgeworICAg ICAgICAgICAgaWYgKCBzc2xfZGVidWdfZmxhZyApCisgICAgICAgICAgICAgICAgcHJpbnRmKCJM b2FkaW5nIFJTQSBjZXJ0aWZpY2F0ZSBpbnRvIFNTTFxyXG4iKTsKKworICAgICAgICAgICAgcmMg PSBTU0xfQ1RYX3VzZV9jZXJ0aWZpY2F0ZV9maWxlKGN0eCwgc3NsX3JzYV9jZXJ0X2ZpbGUsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYNTA5X0ZJTEVUWVBFX1BFTSk7 CisgICAgICAgICAgICBpZiAoIXJjKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlm ICggIXF1aWV0IHx8IHNzbF9kZWJ1Z19mbGFnICkKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRm KCJFcnJvciBsb2FkaW5nIGNlcnRpZmljYXRlIGZyb20gJXNcclxuIiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzc2xfcnNhX2NlcnRfZmlsZSk7CisgICAgICAgICAgICB9IGVsc2Ugewor ICAgICAgICAgICAgICAgIGlmICghc3NsX3JzYV9rZXlfZmlsZSB8fCAhc3NsX3JzYV9rZXlfZmls ZVswXSkKKyAgICAgICAgICAgICAgICAgICAgbWFrZXN0cigmc3NsX3JzYV9rZXlfZmlsZSxzc2xf cnNhX2NlcnRfZmlsZSk7CisKKyAgICAgICAgICAgICAgICByYyA9IFNTTF9DVFhfdXNlX1ByaXZh dGVLZXlfZmlsZShjdHgsIHNzbF9yc2Ffa2V5X2ZpbGUsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFg1MDlfRklMRVRZUEVfUEVNKTsKKyAgICAgICAg ICAgICAgICBpZiAoIXJjKQorICAgICAgICAgICAgICAgICAgcmMgPSBTU0xfQ1RYX3VzZV9Qcml2 YXRlS2V5X2ZpbGUoY3R4LCBzc2xfcnNhX2NlcnRfZmlsZSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFg1MDlfRklMRVRZUEVfUEVNKTsKKyAgICAg ICAgICAgICAgICBpZiAoIXJjKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICggc3NsX2RlYnVn X2ZsYWcgKQorICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiRXJyb3IgbG9hZGluZyBrZXkg ZnJvbSAlc1xyXG4iLHNzbF9yc2Ffa2V5X2ZpbGUpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7 CisgICAgICAgICAgICAgICAgICAgIHJjID0gU1NMX0NUWF9jaGVja19wcml2YXRlX2tleShjdHgp OworICAgICAgICAgICAgICAgICAgICBpZiAoIXJjKSB7CisgICAgICAgICAgICAgICAgICAgICAg ICBpZiAoIHNzbF9kZWJ1Z19mbGFnICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRm KAorICAgICAgICAgICAgICAgICJQcml2YXRlIGtleSBkb2VzIG5vdCBtYXRjaCB0aGUgY2VydGlm aWNhdGUgcHVibGljIGtleVxyXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoc3NsX2RzYV9j ZXJ0X2ZpbGUpIHsKKyAgICAgICAgICAgIGlmICggc3NsX2RlYnVnX2ZsYWcgKQorICAgICAgICAg ICAgICBwcmludGYoIkxvYWRpbmcgRFNBIGNlcnRpZmljYXRlIGludG8gU1NMXHJcbiIpOworCisg ICAgICAgICAgICByYyA9IFNTTF9DVFhfdXNlX2NlcnRpZmljYXRlX2ZpbGUoY3R4LCBzc2xfZHNh X2NlcnRfZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBYNTA5X0ZJTEVUWVBFX1BFTSk7CisgICAgICAgICAgICBpZiAoIXJjKSB7CisgICAgICAgICAg ICAgICAgaWYgKCBzc2xfZGVidWdfZmxhZyApIHsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRm KCJFcnJvciBsb2FkaW5nIGNlcnRpZmljYXRlIGZyb20gJXNcclxuIiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgIHNzbF9kc2FfY2VydF9maWxlKTsKKyAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmICghc3NsX2RoX2tleV9maWxlIHx8 ICFzc2xfZGhfa2V5X2ZpbGVbMF0pCisgICAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJnNzbF9k aF9rZXlfZmlsZSxzc2xfZHNhX2NlcnRfZmlsZSk7CisgICAgICAgICAgICAgICAgcmMgPSBTU0xf Q1RYX3VzZV9Qcml2YXRlS2V5X2ZpbGUoY3R4LCBzc2xfZGhfa2V5X2ZpbGUsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFg1MDlfRklMRVRZUEVfUEVN KTsKKyAgICAgICAgICAgICAgICBpZiAoIXJjKQorICAgICAgICAgICAgICAgICAgcmMgPSBTU0xf Q1RYX3VzZV9Qcml2YXRlS2V5X2ZpbGUoY3R4LCBzc2xfZHNhX2NlcnRfZmlsZSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFg1MDlfRklMRVRZ UEVfUEVNKTsKKyAgICAgICAgICAgICAgICBpZiAoIXJjKSB7CisgICAgICAgICAgICAgICAgICAg IGlmICggc3NsX2RlYnVnX2ZsYWcgKQorICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiRXJy b3IgbG9hZGluZyBrZXkgZnJvbSAlc1xyXG4iLHNzbF9kaF9rZXlfZmlsZSk7CisgICAgICAgICAg ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcmMgPSBTU0xfQ1RYX2NoZWNrX3By aXZhdGVfa2V5KGN0eCk7CisgICAgICAgICAgICAgICAgICAgIGlmICghcmMpIHsKKyAgICAgICAg ICAgICAgICAgICAgICAgIGlmICggc3NsX2RlYnVnX2ZsYWcgKQorICAgICAgICAgICAgICAgICAg ICAgICAgICBwcmludGYoCisgICAgICAgICAgICAgICAgICAgIlByaXZhdGUga2V5IGRvZXMgbm90 IG1hdGNoIHRoZSBjZXJ0aWZpY2F0ZSBwdWJsaWMga2V5XG4iKTsKKyAgICAgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K KworICAgIGlmIChzc2xfcnNhX2NlcnRfY2hhaW5fZmlsZSAmJiBzZXJ2ZXIpIHsKKyAgICAgICAg aW50IHNraXAxc3QgPSAwOworICAgICAgICBpZiAoc3NsX2RlYnVnX2ZsYWcpCisgICAgICAgICAg ICBwcmludGYoIkxvYWRpbmcgUlNBIENlcnRpZmljYXRlIENoYWluIGludG8gU1NMXHJcbiIpOwor ICAgICAgICBpZiAoIWNrc3RyY21wKHNzbF9yc2FfY2VydF9jaGFpbl9maWxlLHNzbF9yc2FfY2Vy dF9maWxlLC0xLAorI2lmZGVmIE9TMgorICAgICAgICAgICAgICAgICAgICAgICAwCisjZWxzZQor ICAgICAgICAgICAgICAgICAgICAgICAxCisjZW5kaWYgLyogT1MyICovCisgICAgICAgICAgICAg ICAgICAgICAgICkpCisgICAgICAgICAgICBza2lwMXN0ID0gMTsKKyAgICAgICAgcmMgPSBTU0xf Q1RYX3VzZV9jZXJ0aWZpY2F0ZV9jaGFpbl9maWxlKGN0eCxzc2xfcnNhX2NlcnRfY2hhaW5fZmls ZSk7CisgICAgICAgIGlmICghcmMgJiYgc3NsX2RlYnVnX2ZsYWcpCisgICAgICAgICAgICAgICAg cHJpbnRmKCJFcnJvciBsb2FkaW5nIFJTQSBDZXJ0aWZpY2F0ZSBDaGFpbiBpbnRvIFNTTFxyXG4i KTsKKyAgICB9CisgICAgaWYgKHNzbF9kc2FfY2VydF9jaGFpbl9maWxlICYmIHNlcnZlcikgewor ICAgICAgICBpbnQgc2tpcDFzdCA9IDA7CisgICAgICAgIGlmIChzc2xfZGVidWdfZmxhZykKKyAg ICAgICAgICAgIHByaW50ZigiTG9hZGluZyBEU0EgQ2VydGlmaWNhdGUgQ2hhaW4gaW50byBTU0xc clxuIik7CisgICAgICAgIGlmICghY2tzdHJjbXAoc3NsX2RzYV9jZXJ0X2NoYWluX2ZpbGUsc3Ns X2RzYV9jZXJ0X2ZpbGUsLTEsCisjaWZkZWYgT1MyCisgICAgICAgICAgICAgICAgICAgICAgIDAK KyNlbHNlCisgICAgICAgICAgICAgICAgICAgICAgIDEKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAg ICAgICAgICAgICAgICAgICAgKSkKKyAgICAgICAgICAgIHNraXAxc3QgPSAxOworICAgICAgICBy YyA9IFNTTF9DVFhfdXNlX2NlcnRpZmljYXRlX2NoYWluX2ZpbGUoY3R4LHNzbF9kc2FfY2VydF9j aGFpbl9maWxlKTsKKyAgICAgICAgaWYgKCFyYyAmJiBzc2xfZGVidWdfZmxhZykKKyAgICAgICAg ICAgICAgICBwcmludGYoIkVycm9yIGxvYWRpbmcgRFNBIENlcnRpZmljYXRlIENoYWluIGludG8g U1NMXHJcbiIpOworICAgIH0KKyAgICByZXR1cm4ocmMpOworfQorCitWT0lECisjaWZkZWYgQ0tf QU5TSUMKK3NzbF9vbmNlX2luaXQodm9pZCkKKyNlbHNlCitzc2xfb25jZV9pbml0KCkKKyNlbmRp ZiAvKiBDS19BTlNJQyAqLworeworICAgIENPTVBfTUVUSE9EICogY207CisgICAgY2hhciAqIHM7 CisKKyAgICBpZiAoICFja19zc2xlYXlfaXNfaW5zdGFsbGVkKCkgKQorICAgICAgICByZXR1cm47 CisvKgorICBPcGVuU1NMIGRvZXMgbm90IHByb3ZpZGUgZm9yIEFCSSBjb21wYXRpYmlsaXR5IGJl dHdlZW4gcmVsZWFzZXMgcHJpb3IKKyAgdG8gdmVyc2lvbiAxLjAuMC4gIElmIHRoZSB2ZXJzaW9u IGRvZXMgbm90IG1hdGNoLCBpdCBpcyBub3Qgc2FmZSB0bworICBhc3N1bWUgdGhhdCBhbnkgZnVu Y3Rpb24geW91IGNhbGwgdGFrZXMgdGhlIHNhbWUgcGFyYW1ldGVycyBvciBkb2VzCisgIHRoZSBz YW1lIHRoaW5nIHdpdGggdGhlbS4gIFJlbW92aW5nIHRoaXMgdGVzdCBwcmlvciB0byB0aGUgT3Bl blNTTCAxLjAuMAorICByZWxlYXNlIHdpbGwgcmVzdWx0IGluIGFuIGluY3JlYXNlIGluIHVuZXhw bGFpbmVkIG9yIGluY29ycmVjdCBiZWhhdmlvcnMuCisgIFRoZSB0ZXN0IHNob3VsZCBiZSByZXZp c2VkIG9uY2UgT3BlblNTTCAxLjAuMCBpcyByZWxlYXNlZCBhbmQgd2Ugc2VlIHdoYXQKKyAgaXRz IGNsYWltcyBhcmUgYXMgdG8gQUJJIGNvbXBhdGliaWxpdHkuCisqLworICAgIGRlYnVnKEYxMTEs Iktlcm1pdCBidWlsdCBmb3IgT3BlblNTTCIsT1BFTlNTTF9WRVJTSU9OX1RFWFQsU1NMRUFZX1ZF UlNJT05fTlVNQkVSKTsKKyNpZm5kZWYgT1MyT05MWQorICAgIGRlYnVnKEYxMTEsIk9wZW5TU0wg TGlicmFyeSIsU1NMZWF5X3ZlcnNpb24oU1NMRUFZX1ZFUlNJT04pLAorICAgICAgICAgICBTU0xl YXkoKSk7CisgICAgZGVidWcoRjExMCwiT3BlblNTTCBMaWJyYXJ5IixTU0xlYXlfdmVyc2lvbihT U0xFQVlfQlVJTFRfT04pLDApOworICAgIGRlYnVnKEYxMTAsIk9wZW5TU0wgTGlicmFyeSIsU1NM ZWF5X3ZlcnNpb24oU1NMRUFZX0NGTEFHUyksMCk7CisgICAgZGVidWcoRjExMCwiT3BlblNTTCBM aWJyYXJ5IixTU0xlYXlfdmVyc2lvbihTU0xFQVlfUExBVEZPUk0pLDApOworCisgICAgLyogVGhl IGZvbGxvd2luZyB0ZXN0IGlzIHN1Z2dlc3RlZCBieSBSaWNoYXJkIExldml0dGUgKi8KKyAgICBp ZiAoKChPUEVOU1NMX1ZFUlNJT05fTlVNQkVSIF4gU1NMZWF5KCkpICYgMHhmZmZmZmYwZikgCisj aWZkZWYgT1MyCisgICAgICAgICB8fCBja3N0cmNtcChPUEVOU1NMX1ZFUlNJT05fVEVYVCwoY2hh ciAqKVNTTGVheV92ZXJzaW9uKFNTTEVBWV9WRVJTSU9OKSwtMSwxKQorI2VuZGlmIC8qIE9TMiAq LworICAgICAgICAgKSB7CisgICAgICAgIHNzbF9pbnN0YWxsZWQgPSAwOworICAgICAgICBkZWJ1 ZyhGMTExLCJPcGVuU1NMIFZlcnNpb24gZG9lcyBub3QgbWF0Y2guICBCdWlsdCB3aXRoIiwKKyAg ICAgICAgICAgICAgIFNTTGVheV92ZXJzaW9uKFNTTEVBWV9WRVJTSU9OKSxTU0xFQVlfVkVSU0lP Tl9OVU1CRVIpOworICAgICAgICBwcmludGYoIj9PcGVuU1NMIGxpYnJhcmllcyBkbyBub3QgbWF0 Y2ggcmVxdWlyZWQgdmVyc2lvbjpcclxuIik7CisgICAgICAgIHByaW50ZigiICAuIEMtS2VybWl0 IGJ1aWx0IHdpdGggJXNcclxuIixPUEVOU1NMX1ZFUlNJT05fVEVYVCk7CisgICAgICAgIHByaW50 ZigiICAuIFZlcnNpb24gZm91bmQgICVzXHJcbiIsU1NMZWF5X3ZlcnNpb24oU1NMRUFZX1ZFUlNJ T04pKTsKKyAgICAgICAgcHJpbnRmKCIgIE9wZW5TU0wgdmVyc2lvbnMgcHJpb3IgdG8gMS4wLjAg bXVzdCBiZSB0aGUgc2FtZS5cclxuIik7ICAgIAorCisJcyA9ICJSIjsKKyNpZmRlZiBTT0xBUklT CisJcHJpbnRmKCIgIFNldCBDRF9MSUJSQVJZX1BBVEggZm9yICVzLlxyXG4iLE9QRU5TU0xfVkVS U0lPTl9URVhUKTsKKwlzID0gIiBPciByIjsKKyNlbmRpZgkvKiBTT0xBUklTICovCisKKyNpZmRl ZiBIUFVYCisJcHJpbnRmKCIgIFNldCBTSExJQl9QQVRIIGZvciAlcy5cclxuIixPUEVOU1NMX1ZF UlNJT05fVEVYVCk7CisJcyA9ICIgT3IgciI7CisjZW5kaWYJLyogSFBVWCAqLworCisjaWZkZWYg QUlYCisJcHJpbnRmKCIgIFNldCBMSUJQQVRIIGZvciAlcy5cclxuIixPUEVOU1NMX1ZFUlNJT05f VEVYVCk7CisJcyA9ICIgT3IgciI7CisjZW5kaWYJLyogQUlYICovCisKKyNpZmRlZiBMSU5VWAor CXByaW50ZigiICBTZXQgTERfTElCUkFSWV9QQVRIIGZvciAlcy5cclxuIixPUEVOU1NMX1ZFUlNJ T05fVEVYVCk7CisJcyA9ICIgT3IgciI7CisjZW5kaWYJLyogTElOVVggKi8KKworICAgICAgICBw cmludGYoIiAlc2VidWlsZCBDLUtlcm1pdCBmcm9tIHNvdXJjZSBvbiB0aGlzIGNvbXB1dGVyIHRv IG1ha2UgXAordmVyc2lvbnMgYWdyZWUuXHJcbiIscyk7CisKKyNpZmRlZiBLVEFSR0VUCisJewor CSAgICBjaGFyICogczsKKwkgICAgcyA9IEtUQVJHRVQ7CisJICAgIGlmICghcykgcyA9ICIiOwor CSAgICBpZiAoISpzKSBzID0gIih1bmtub3duKSI7CisJICAgIHByaW50ZigiICBDLUtlcm1pdCBt YWtlZmlsZSB0YXJnZXQ6ICVzXHJcbiIscyk7CisJfQorI2VuZGlmCS8qIEtUQVJHRVQgKi8KKyAg ICAgICAgcHJpbnRmKCIgIE9yIGlmIHRoYXQgaXMgd2hhdCB5b3UgZGlkIHRoZW4gdHJ5IHRvIGZp bmQgb3V0IHdoeVxyXG4iKTsKKyAgICAgICAgcHJpbnRmKCIgIHRoZSBwcm9ncmFtIGxvYWRlciAo aW1hZ2UgYWN0aXZhdG9yKSBpcyBjaG9vc2luZyBhXHJcbiIpOworICAgICAgICBwcmludGYoIiAg ZGlmZmVyZW50IE9wZW5TU0wgbGlicmFyeSB0aGFuIHRoZSBvbmUgc3BlY2lmaWVkIGluIFwKK3Ro ZSBidWlsZC5cclxuXHJcbiIpOworICAgICAgICBwcmludGYoIiAgQWxsIFNTTC9UTFMgZmVhdHVy ZXMgZGlzYWJsZWQuXHJcblxyXG4iKTsKKyAgICAgICAgYmxlZXAoQlBfRkFJTCk7CisjaWZkZWYg U1NMRExMCisgICAgICAgIGNrX3NzbF91bmxvYWRkbGwoKTsKKyAgICAgICAgY2tfY3J5cHRvX3Vu bG9hZGRsbCgpOworI2VuZGlmIC8qIFNTTERMTCAqLworICAgICAgICByZXR1cm47CisgICAgfQor I2VuZGlmIC8qIE9TMk9OTFkgKi8KKworICAgIC8qIGluaXQgdGhpbmdzIHNvIHdlIHdpbGwgZ2V0 IG1lYW5pbmdmdWwgZXJyb3IgbWVzc2FnZXMKKyAgICAgKiByYXRoZXIgdGhhbiBudW1iZXJzCisg ICAgICovCisgICAgU1NMX2xvYWRfZXJyb3Jfc3RyaW5ncygpOworCisjaWZkZWYgU1NIQlVJTFRJ TgorICAgIE9QRU5TU0xfYWRkX2FsbF9hbGdvcml0aG1zX25vY29uZigpOworI2Vsc2UKKyAgICAv KiBTU0xfbGlicmFyeV9pbml0KCkgb25seSBsb2FkcyB0aG9zZSBjaXBoZXJzIG5lZWRzIGZvciBT U0wgICovCisgICAgLyogVGhlc2UgaGFwcGVuIHRvIGJlIGEgc2ltaWxhciBzZXQgdG8gdGhvc2Ug cmVxdWlyZWQgZm9yIFNTSCAqLworICAgIC8qIGJ1dCB0aGV5IGFyZSBub3QgYSBjb21wbGV0ZSBz ZXQgb2YgY2lwaGVycyBwcm92aWRlZCBieSB0aGUgKi8KKyAgICAvKiBjcnlwdG8gbGlicmFyeS4g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgU1NMX2xp YnJhcnlfaW5pdCgpOworI2VuZGlmIC8qIFNTSEJVSUxUSU4gKi8KKworI2lmZGVmIFpMSUIKKyAg ICBjbSA9IENPTVBfemxpYigpOworICAgIGlmIChjbSAhPSBOVUxMICYmIGNtLT50eXBlICE9IE5J RF91bmRlZikgeworICAgICAgICBTU0xfQ09NUF9hZGRfY29tcHJlc3Npb25fbWV0aG9kKDB4ZTAs IGNtKTsgLyogRUFZJ3MgWkxJQiBJRCAqLworICAgIH0KKyNlbmRpZiAvKiBaTElCICovCisgICAg Y20gPSBDT01QX3JsZSgpOworICAgIGlmIChjbSAhPSBOVUxMICYmIGNtLT50eXBlICE9IE5JRF91 bmRlZikKKyAgICAgICAgU1NMX0NPTVBfYWRkX2NvbXByZXNzaW9uX21ldGhvZCgweGUxLCBjbSk7 IC8qIEVBWSdzIFJMRSBJRCAqLworCisgICAgLyogRW5zdXJlIHRoZSBSYW5kb20gbnVtYmVyIGdl bmVyYXRvciBoYXMgZW5vdWdoIGVudHJvcHkgKi8KKyAgICBpZiAoICFSQU5EX3N0YXR1cygpICkg eworICAgICAgICBjaGFyIGJ1ZmZlclsyNTZdPSIiOworICAgICAgICBjaGFyIHJhbmRvbWJ5dGVz WzI1Nl07CisgICAgICAgIGludCByYzEgPSAtMSwgcmMyID0gMTsgIC8qIGFzc3VtZSBmYWlsdXJl IGFuZCBzdWNjZXNzICovCisKKyAgICAgICAgZGVidWcoRjExMCwic3NsX29uY2VfaW5pdCIsIiFS QU5EX3N0YXR1cygpIiwwKTsKKworICAgICAgICBpZiAoIHNzbF9ybmRfZmlsZSA9PSBOVUxMICkg eworICAgICAgICAgICAgZGVidWcoRjExMCwic3NsX3JuZF9maWxlIiwic3NsX3JuZF9maWxlIGlz IE5VTEwiLDApOworICAgICAgICAgICAgUkFORF9maWxlX25hbWUoYnVmZmVyLDI1Nik7CisgICAg ICAgICAgICBpZiAoIGJ1ZmZlclswXSApCisgICAgICAgICAgICAgICAgbWFrZXN0cigmc3NsX3Ju ZF9maWxlLCBidWZmZXIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1ha2Vz dHIoJnNzbF9ybmRfZmlsZSwiLnJuZCIpOworICAgICAgICB9CisgICAgICAgIGRlYnVnKEYxMTAs InNzbF9ybmRfZmlsZSIsc3NsX3JuZF9maWxlLDApOworCisgICAgICAgIHJjMSA9IFJBTkRfZWdk KHNzbF9ybmRfZmlsZSk7CisgICAgICAgIGRlYnVnKEYxMTEsInNzbF9vbmNlX2luaXQiLCJSQU5E X2VnZCgpIixyYzEpOworICAgICAgICBpZiAoIHJjMSA8PSAwICkgeworICAgICAgICAgICAgcmMy ID0gUkFORF9sb2FkX2ZpbGUoc3NsX3JuZF9maWxlLCAtMSk7CisgICAgICAgICAgICBkZWJ1ZyhG MTExLCJzc2xfb25jZV9pbml0IiwiUkFORF9sb2FkX2ZpbGUoKSIscmMxKTsKKyAgICAgICAgfQor CisgICAgICAgIGlmICggcmMxIDw9IDAgJiYgIXJjMiApCisgICAgICAgIHsKKyAgICAgICAgICAg IHRpbWVfdCB0ID0gdGltZShOVUxMKTsKKyAgICAgICAgICAgIGludCB0bGVuID0gc2l6ZW9mKHRp bWVfdCk7CisgICAgICAgICAgICBpbnQgcGlkID0gZ2V0cGlkKCk7CisgICAgICAgICAgICBpbnQg cGxlbiA9IHNpemVvZihpbnQpOworICAgICAgICAgICAgaW50IG47CisjaWZuZGVmIFJBTkRfTUFY CisjZGVmaW5lIFJBTkRfTUFYIDB4N0ZGRgorI2VuZGlmCisgICAgICAgICAgICBkZWJ1ZyhGMTEw LCJzc2xfb25jZV9pbml0IiwiY2FsbGluZyBSQU5EX3NlZWQoKSIsMCk7CisKKyAgICAgICAgICAg IFJBTkRfc2VlZCgodW5zaWduZWQgY2hhciAqKSZ0LCB0bGVuKTsKKyAgICAgICAgICAgIFJBTkRf c2VlZCgodW5zaWduZWQgY2hhciAqKSZwaWQsIHBsZW4pOworCisgICAgICAgICAgICBzcmFuZCgo dW5zaWduZWQgaW50KXQpOworICAgICAgICAgICAgc3ByaW50ZihidWZmZXIsICIlLjBmIiwgKCgo ZG91YmxlKShyYW5kKCklUkFORF9NQVgpL1JBTkRfTUFYKSoKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKHNpemVvZihyYW5kb21ieXRlcyktMTI4LTEpKSk7CisgICAgICAg ICAgICBuID0gKGF0b2koYnVmZmVyKSsxKSUoc2l6ZW9mKHJhbmRvbWJ5dGVzKS0xMjgtMSk7Cisg ICAgICAgICAgICBSQU5EX3NlZWQocmFuZG9tYnl0ZXMsIDEyOCk7CisgICAgICAgIH0KKworICAg ICAgICBpZiAoICFSQU5EX3N0YXR1cygpICkgeworICAgICAgICAgICAgZGVidWcoRjExMCwic3Ns X29uY2VfaW5pdCIsIlVuYWJsZSB0byBpbml0aWFsaXplIFBSTkciLDApOworICAgICAgICAgICAg cHJpbnRmKCIgVW5hYmxlIHRvIGxvYWQgJ3JhbmRvbSBzdGF0ZSdcbiIpOworICAgICAgICAgICAg cHJpbnRmKCIgU1NMIGFuZCBUTFMgYXJlIHVuYXZhaWxibGUuXG4iKTsKKyAgICAgICAgICAgIHBy aW50ZigiIFVzZSBTRVQgQVVUSCBTU0wgUkFORE9NLUZJTEUgPGZpbGU+IGNvbW1hbmQgdG8gcHJv dmlkZSByYW5kb20gZGF0YS5cbiIpOworICAgICAgICAgICAgcHJpbnRmKCIgU3BlY2lmaWVkIGZp bGUgd2lsbCBiZSBvdmVyd3JpdHRlbiB3aXRoIG5ldyByYW5kb20gZGF0YSBhZnRlciB1c2UuXG4i KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggc3NsX3Ju ZF9maWxlICkgeworICAgICAgICAgICAgaW50IHJjID0gUkFORF93cml0ZV9maWxlKHNzbF9ybmRf ZmlsZSk7CisgICAgICAgICAgICBkZWJ1ZyhGMTExLCJzc2xfb25jZV9pbml0IiwiUkFORF93cml0 ZV9maWxlKCkiLHJjKTsKKyAgICAgICAgfQorICAgIH0KKworI2lmZGVmIE5UCisgICAgLy8gSW5p dGlhbGl6ZSBhZGRpdGlvbmFsIE9JRCB0eXBlcyBmb3IgdXNlIHdoZW4gc2F2aW5nIGNlcnRzIHRv IGEgZmlsZQorICAgIE9CSl9jcmVhdGUoIjIuOTk5OTkuMyIsIlNFVC5leDMiLCJTRVQgeDUwOXYz IGV4dGVuc2lvbiAzIik7CisjZW5kaWYgLyogTlQgKi8KKworICAgIC8qIG1ha2Ugc3VyZSB3ZSBo YXZlIHNvbWV3aGVyZSB3ZSBjYW4gbG9nIGVycm9ycyB0byAqLworICAgIGJpb19lcnI9QklPX25l dyhCSU9fc19tZW0oKSk7CisKKyAgICBkZWJ1ZyhGMTAwLCJzc2xfb25jZV9pbml0KCkgY29tcGxl dGUiLCIiLDApOworfQorCitpbnQKKyNpZmRlZiBDS19BTlNJQworc3NsX3RuX2luaXQoaW50IG1v ZGUpCisjZWxzZQorc3NsX3RuX2luaXQobW9kZSkgaW50IG1vZGU7CisjZW5kaWYgLyogQ0tfQU5T SUMgKi8KK3sKKyNpZmRlZiBLUkI1CisgICAgZXh0ZXJuIGNoYXIgKiBrNV9rZXl0YWI7CisgICAg ZXh0ZXJuIGNoYXIgKiBrcmI1X2Rfc3J2OworI2VuZGlmIC8qIEtSQjUgKi8KKyAgICBzdGF0aWMg aW50IGxhc3Rfc3NsX21vZGUgPSAtMTsKKyAgICBTU0wgKiBzc2xfY29ueD1OVUxMLCAqIHRsc19j b254PU5VTEw7CisKKyAgICBzc2xfaW5pdGlhbGl6ZWQgPSAwOworCisgICAgaWYgKCAhY2tfc3Ns ZWF5X2lzX2luc3RhbGxlZCgpICkKKyAgICAgICAgcmV0dXJuKDApOworCisgICAgZGVidWcoRjEx MSwic3NsX3RuX2luaXQiLCJtb2RlIixtb2RlKTsKKworICAgIGlmIChzc2xfZGVidWdfZmxhZykK KyAgICAgICAgcHJpbnRmKCJTU0xfREVCVUdfRkxBRyBvblxyXG4iKTsKKworICAgIGlmIChsYXN0 X3NzbF9tb2RlICE9IG1vZGUpIHsKKyAgICAgICAgaWYgKHNzbF9jdHgpIHsKKyAgICAgICAgICAg IFNTTF9DVFhfZnJlZShzc2xfY3R4KTsKKyAgICAgICAgICAgIHNzbF9jdHggPSBOVUxMOworICAg ICAgICB9CisgICAgICAgIGlmICh0bHNfY3R4KSB7CisgICAgICAgICAgICBTU0xfQ1RYX2ZyZWUo dGxzX2N0eCk7CisgICAgICAgICAgICB0bHNfY3R4ID0gTlVMTDsKKyAgICAgICAgfQorICAgIH0K KworICAgIGlmICggKGxhc3Rfc3NsX21vZGUgIT0gbW9kZSkgfHwgIXNzbF9jdHggfHwgIXRsc19j dHggKSB7CisgICAgICAgIGlmICggbW9kZSA9PSBTU0xfQ0xJRU5UICkgeworICAgICAgICAgICAg c3NsX2N0eD0oU1NMX0NUWCAqKVNTTF9DVFhfbmV3KFNTTHYyM19jbGllbnRfbWV0aG9kKCkpOwor ICAgICAgICAgICAgLyogVGhpcyBjYW4gZmFpbCBiZWNhdXNlIHdlIGRvIG5vdCBoYXZlIFJTQSBh dmFpbGFibGUgKi8KKyAgICAgICAgICAgIGlmICggIXNzbF9jdHggKSB7CisgICAgICAgICAgICAg ICAgZGVidWcoRjExMCwic3NsX3RuX2luaXQiLCJTU0x2MjNfY2xpZW50X21ldGhvZCBmYWlsZWQi LDApOworICAgICAgICAgICAgICAgIHNzbF9jdHg9KFNTTF9DVFggKilTU0xfQ1RYX25ldyhTU0x2 M19jbGllbnRfbWV0aG9kKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCAhc3Ns X2N0eCApIHsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJzc2xfdG5faW5pdCIsIlNTTHYz X2NsaWVudF9tZXRob2QgZmFpbGVkIiwwKTsKKyAgICAgICAgICAgICAgICBsYXN0X3NzbF9tb2Rl ID0gLTE7CisgICAgICAgICAgICAgICAgcmV0dXJuKDApOworICAgICAgICAgICAgfQorI2lmbmRl ZiBDT01NRU5UCisgICAgICAgICAgICB0bHNfY3R4PShTU0xfQ1RYICopU1NMX0NUWF9uZXcoVExT djFfY2xpZW50X21ldGhvZCgpKTsKKyNlbHNlIC8qIENPTU1FTlQgKi8KKyAgICAgICAgICAgIHRs c19jdHg9KFNTTF9DVFggKilTU0xfQ1RYX25ldyhTU0x2MjNfY2xpZW50X21ldGhvZCgpKTsKKyAg ICAgICAgICAgIC8qIFRoaXMgY2FuIGZhaWwgYmVjYXVzZSB3ZSBkbyBub3QgaGF2ZSBSU0EgYXZh aWxhYmxlICovCisgICAgICAgICAgICBpZiAoICF0bHNfY3R4ICkgeworICAgICAgICAgICAgICAg IGRlYnVnKEYxMTAsInNzbF90bl9pbml0IiwiU1NMdjIzX2NsaWVudF9tZXRob2QgZmFpbGVkIiww KTsKKyAgICAgICAgICAgICAgICB0bHNfY3R4PShTU0xfQ1RYICopU1NMX0NUWF9uZXcoU1NMdjNf Y2xpZW50X21ldGhvZCgpKTsKKyAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBDT01NRU5UICovCisg ICAgICAgICAgICBpZiAoICF0bHNfY3R4ICkgeworICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAs InNzbF90bl9pbml0IiwiVExTdjFfY2xpZW50X21ldGhvZCBmYWlsZWQiLDApOworICAgICAgICAg ICAgICAgIGxhc3Rfc3NsX21vZGUgPSAtMTsKKyAgICAgICAgICAgICAgICByZXR1cm4oMCk7Cisg ICAgICAgICAgICB9CisjaWZkZWYgVVNFX0NFUlRfQ0IKKyAgICAgICAgICAgIFNTTF9DVFhfc2V0 X2NsaWVudF9jZXJ0X2NiKHNzbF9jdHgsc3NsX2NsaWVudF9jZXJ0X2NhbGxiYWNrKTsKKyAgICAg ICAgICAgIFNTTF9DVFhfc2V0X2NsaWVudF9jZXJ0X2NiKHRsc19jdHgsc3NsX2NsaWVudF9jZXJ0 X2NhbGxiYWNrKTsKKyNlbmRpZiAvKiBVU0VfQ0VSVF9DQiAqLworICAgICAgICB9IGVsc2UgaWYg KG1vZGUgPT0gU1NMX1NFUlZFUikgeworICAgICAgICAgICAgLyogV2UgYXJlIGEgc2VydmVyICov CisgICAgICAgICAgICBzc2xfY3R4PShTU0xfQ1RYICopU1NMX0NUWF9uZXcoU1NMdjIzX3NlcnZl cl9tZXRob2QoKSk7CisgICAgICAgICAgICAvKiBUaGlzIGNhbiBmYWlsIGJlY2F1c2Ugd2UgZG8g bm90IGhhdmUgUlNBIGF2YWlsYWJsZSAqLworICAgICAgICAgICAgaWYgKCAhc3NsX2N0eCApIHsK KyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJzc2xfdG5faW5pdCIsIlNTTHYyM19zZXJ2ZXJf bWV0aG9kIGZhaWxlZCIsMCk7CisgICAgICAgICAgICAgICAgc3NsX2N0eD0oU1NMX0NUWCAqKVNT TF9DVFhfbmV3KFNTTHYzX3NlcnZlcl9tZXRob2QoKSk7CisgICAgICAgICAgICB9CisgICAgICAg ICAgICBpZiAoICFzc2xfY3R4ICkgeworICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsInNzbF90 bl9pbml0IiwiU1NMdjNfc2VydmVyX21ldGhvZCBmYWlsZWQiLDApOworICAgICAgICAgICAgICAg IGxhc3Rfc3NsX21vZGUgPSAtMTsKKyAgICAgICAgICAgICAgICByZXR1cm4oMCk7CisgICAgICAg ICAgICB9CisjaWZkZWYgQ09NTUVOVAorICAgICAgICAgICAgdGxzX2N0eD0oU1NMX0NUWCAqKVNT TF9DVFhfbmV3KFRMU3YxX3NlcnZlcl9tZXRob2QoKSk7CisjZWxzZSAvKiBDT01NRU5UICovCisg ICAgICAgICAgICB0bHNfY3R4PShTU0xfQ1RYICopU1NMX0NUWF9uZXcoU1NMdjIzX3NlcnZlcl9t ZXRob2QoKSk7CisgICAgICAgICAgICAvKiBUaGlzIGNhbiBmYWlsIGJlY2F1c2Ugd2UgZG8gbm90 IGhhdmUgUlNBIGF2YWlsYWJsZSAqLworICAgICAgICAgICAgaWYgKCAhdGxzX2N0eCApIHsKKyAg ICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJzc2xfdG5faW5pdCIsIlNTTHYyM19zZXJ2ZXJfbWV0 aG9kIGZhaWxlZCIsMCk7CisgICAgICAgICAgICAgICAgdGxzX2N0eD0oU1NMX0NUWCAqKVNTTF9D VFhfbmV3KFRMU3YxX3NlcnZlcl9tZXRob2QoKSk7CisgICAgICAgICAgICB9CisjZW5kaWYgLyog Q09NTUVOVCAqLworICAgICAgICAgICAgaWYgKCAhdGxzX2N0eCApIHsKKyAgICAgICAgICAgICAg ICBkZWJ1ZyhGMTEwLCJzc2xfdG5faW5pdCIsIlRMU3YxX3NlcnZlcl9tZXRob2QgZmFpbGVkIiww KTsKKyAgICAgICAgICAgICAgICBsYXN0X3NzbF9tb2RlID0gLTE7CisgICAgICAgICAgICAgICAg cmV0dXJuKDApOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgLyogVW5rbm93biBtb2Rl ICovCisgICAgICAgICAgICByZXR1cm4oMCk7CisKKyAgICAgICAgaWYgKCAhaW5zZXJ2ZXIgKSB7 CisgICAgICAgICAgICBTU0xfQ1RYX3NldF9kZWZhdWx0X3Bhc3N3ZF9jYihzc2xfY3R4LAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGVtX3Bhc3N3b3JkX2NiICopc3NsX3Bh c3N3ZF9jYWxsYmFjayk7CisgICAgICAgICAgICBTU0xfQ1RYX3NldF9kZWZhdWx0X3Bhc3N3ZF9j Yih0bHNfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGVtX3Bhc3N3 b3JkX2NiICopc3NsX3Bhc3N3ZF9jYWxsYmFjayk7CisgICAgICAgIH0KKworICAgICAgICAvKiBm b3IgU1NMIHN3aXRjaCBvbiBhbGwgdGhlIGludGVyb3BlcmFiaWxpdHkgYW5kIGJ1ZworICAgICAg ICAgKiB3b3JrYXJvdW5kcyBzbyB0aGF0IHdlIHdpbGwgY29tbXVuaWNhdGUgd2l0aCBwZW9wbGUK KyAgICAgICAgICogdGhhdCBjYW5ub3QgcmVhZCBwb29ybHkgd3JpdHRlbiBzcGVjcyA6LSkKKyAg ICAgICAgICogZm9yIFRMUyBiZSBzdXJlIHRvIHByZXZlbnQgdXNlIG9mIFNTTHYyCisgICAgICAg ICAqLworICAgICAgICBTU0xfQ1RYX3NldF9vcHRpb25zKHNzbF9jdHgsU1NMX09QX0FMTHxTU0xf T1BfTk9fU1NMdjIpOworICAgICAgICBTU0xfQ1RYX3NldF9vcHRpb25zKHRsc19jdHgsCisgICAg ICAgICAgICAgICAgIFNTTF9PUF9OT19TU0x2MnxTU0xfT1BfU0lOR0xFX0RIX1VTRXxTU0xfT1Bf RVBIRU1FUkFMX1JTQSk7CisKKyAgICAgICAgU1NMX0NUWF9zZXRfaW5mb19jYWxsYmFjayhzc2xf Y3R4LHNzbF9jbGllbnRfaW5mb19jYWxsYmFjayk7CisgICAgICAgIFNTTF9DVFhfc2V0X2luZm9f Y2FsbGJhY2sodGxzX2N0eCxzc2xfY2xpZW50X2luZm9fY2FsbGJhY2spOworCisjaWZuZGVmIENP TU1FTlQKKyAgICAgICAgLyogU2V0IHRoZSBwcm9wZXIgY2FjaGluZyBtb2RlICovCisgICAgICAg IGlmICggbW9kZSA9PSBTU0xfU0VSVkVSICkgeworICAgICAgICAgICAgU1NMX0NUWF9zZXRfc2Vz c2lvbl9jYWNoZV9tb2RlKHNzbF9jdHgsU1NMX1NFU1NfQ0FDSEVfU0VSVkVSKTsKKyAgICAgICAg ICAgIFNTTF9DVFhfc2V0X3Nlc3Npb25fY2FjaGVfbW9kZSh0bHNfY3R4LFNTTF9TRVNTX0NBQ0hF X1NFUlZFUik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBTU0xfQ1RYX3NldF9zZXNz aW9uX2NhY2hlX21vZGUoc3NsX2N0eCxTU0xfU0VTU19DQUNIRV9DTElFTlQpOworICAgICAgICAg ICAgU1NMX0NUWF9zZXRfc2Vzc2lvbl9jYWNoZV9tb2RlKHRsc19jdHgsU1NMX1NFU1NfQ0FDSEVf Q0xJRU5UKTsKKyAgICAgICAgfQorICAgICAgICBTU0xfQ1RYX3NldF9zZXNzaW9uX2lkX2NvbnRl eHQoc3NsX2N0eCwoQ0hBUiAqKSIxIiwxKTsKKyAgICAgICAgU1NMX0NUWF9zZXRfc2Vzc2lvbl9p ZF9jb250ZXh0KHRsc19jdHgsKENIQVIgKikiMiIsMSk7CisjZWxzZSAvKiBDT01NRU5UICovCisg ICAgICAgIFNTTF9DVFhfc2V0X3Nlc3Npb25fY2FjaGVfbW9kZShzc2xfY3R4LFNTTF9TRVNTX0NB Q0hFX09GRik7CisgICAgICAgIFNTTF9DVFhfc2V0X3Nlc3Npb25fY2FjaGVfbW9kZSh0bHNfY3R4 LFNTTF9TRVNTX0NBQ0hFX09GRik7CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgIH0KKworICAg IC8qIFRoZSBzZXJ2ZXIgdXNlcyBkZWZhdWx0cyBmb3IgdGhlIGNlcnRpZmljYXRlIGZpbGVzLiAq LworICAgIC8qIFRoZSBjbGllbnQgZG9lcyBub3QuICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAqLworICAgIGlmIChtb2RlID09IFNTTF9TRVJWRVIpIHsKKyAgICAgICAgY2hhciBjZXJ0 X2ZpbGVwYXRoWzEwMjRdOworICAgICAgICBjb25zdCBjaGFyICogZGVmZGlyID0gTlVMTDsKKyAg ICAgICAgREggKiBkaCA9IE5VTEw7CisKKyAgICAgICAgZGVmZGlyID0gZ2V0ZW52KCJTU0xfQ0VS VF9ESVIiKTsKKyAgICAgICAgaWYgKCAhZGVmZGlyICkgeworI2lmZGVmIE9TMgorICAgICAgICAg ICAgZGVmZGlyID0gZXhlZGlyOworI2Vsc2UgLyogT1MyICovCisgICAgICAgICAgICBkZWZkaXIg PSBYNTA5X2dldF9kZWZhdWx0X2NlcnRfZGlyKCk7CisjZW5kaWYgLyogT1MyICovCisgICAgICAg ICAgICBkZWJ1ZyhGMTEwLCJzc2xfdG5faW5pdCAtIHNldHRpbmcgZGVmYXVsdCBkaXJlY3Rvcnkg dG8iLGRlZmRpciwwKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoICFkZWZkaXIgKQorICAgICAg ICAgICAgZGVmZGlyID0gIiI7CisKKyAgICAgICAgaWYgKCFzc2xfcnNhX2NlcnRfZmlsZSkgewor ICAgICAgICAgICAgLyogd2UgbmVlZCB0byBrbm93IHRoZSBmdWxscGF0aCB0byB0aGUgbG9jYXRp b24gb2YgdGhlCisgICAgICAgICAgICAqIGNlcnRpZmljYXRlIHRoYXQgd2Ugd2lsbCBiZSBydW5u aW5nIHdpdGggYXMgd2UgY2Fubm90CisgICAgICAgICAgICAqIGJlIHN1cmUgb2YgdGhlIGN3ZCB3 aGVuIHdlIGFyZSBsYXVuY2hlZAorICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHNwcmludGYo Y2VydF9maWxlcGF0aCwiJXMvJXMiLGRlZmRpciwidGVsbmV0ZC1yc2EucGVtIik7CisgICAgICAg ICAgICBpZiAoemNoa2koY2VydF9maWxlcGF0aCkgPiAwKQorICAgICAgICAgICAgICAgIG1ha2Vz dHIoJnNzbF9yc2FfY2VydF9maWxlLGNlcnRfZmlsZXBhdGgpOworICAgICAgICB9CisgICAgICAg IGlmIChzc2xfcnNhX2NlcnRfZmlsZSAmJiAhc3NsX3JzYV9rZXlfZmlsZSkgeworICAgICAgICAg ICAgLyogd2UgbmVlZCB0byBrbm93IHRoZSBmdWxscGF0aCB0byB0aGUgbG9jYXRpb24gb2YgdGhl CisgICAgICAgICAgICAqIGNlcnRpZmljYXRlIHRoYXQgd2Ugd2lsbCBiZSBydW5uaW5nIHdpdGgg YXMgd2UgY2Fubm90CisgICAgICAgICAgICAqIGJlIHN1cmUgb2YgdGhlIGN3ZCB3aGVuIHdlIGFy ZSBsYXVuY2hlZAorICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHNwcmludGYoY2VydF9maWxl cGF0aCwiJXMvJXMiLGRlZmRpciwidGVsbmV0ZC1yc2Eta2V5LnBlbSIpOworICAgICAgICAgICAg aWYgKHpjaGtpKGNlcnRfZmlsZXBhdGgpID4gMCkKKyAgICAgICAgICAgICAgICBtYWtlc3RyKCZz c2xfcnNhX2tleV9maWxlLGNlcnRfZmlsZXBhdGgpOworICAgICAgICB9CisgICAgICAgIGlmICgh c3NsX2RzYV9jZXJ0X2ZpbGUpIHsKKyAgICAgICAgICAgIC8qIHdlIG5lZWQgdG8ga25vdyB0aGUg ZnVsbHBhdGggdG8gdGhlIGxvY2F0aW9uIG9mIHRoZQorICAgICAgICAgICAgKiBjZXJ0aWZpY2F0 ZSB0aGF0IHdlIHdpbGwgYmUgcnVubmluZyB3aXRoIGFzIHdlIGNhbm5vdAorICAgICAgICAgICAg KiBiZSBzdXJlIG9mIHRoZSBjd2Qgd2hlbiB3ZSBhcmUgbGF1bmNoZWQKKyAgICAgICAgICAgICov CisgICAgICAgICAgICBzcHJpbnRmKGNlcnRfZmlsZXBhdGgsIiVzLyVzIixkZWZkaXIsInRlbG5l dGQtZHNhLnBlbSIpOworICAgICAgICAgICAgaWYgKHpjaGtpKGNlcnRfZmlsZXBhdGgpID4gMCkK KyAgICAgICAgICAgICAgICBtYWtlc3RyKCZzc2xfZHNhX2NlcnRfZmlsZSxjZXJ0X2ZpbGVwYXRo KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoc3NsX2RzYV9jZXJ0X2ZpbGUgJiYgIXNzbF9kaF9r ZXlfZmlsZSkgeworICAgICAgICAgICAgLyogd2UgbmVlZCB0byBrbm93IHRoZSBmdWxscGF0aCB0 byB0aGUgbG9jYXRpb24gb2YgdGhlCisgICAgICAgICAgICAqIGNlcnRpZmljYXRlIHRoYXQgd2Ug d2lsbCBiZSBydW5uaW5nIHdpdGggYXMgd2UgY2Fubm90CisgICAgICAgICAgICAqIGJlIHN1cmUg b2YgdGhlIGN3ZCB3aGVuIHdlIGFyZSBsYXVuY2hlZAorICAgICAgICAgICAgKi8KKyAgICAgICAg ICAgIHNwcmludGYoY2VydF9maWxlcGF0aCwiJXMvJXMiLGRlZmRpciwidGVsbmV0ZC1kc2Eta2V5 LnBlbSIpOworICAgICAgICAgICAgaWYgKHpjaGtpKGNlcnRfZmlsZXBhdGgpID4gMCkKKyAgICAg ICAgICAgICAgICBtYWtlc3RyKCZzc2xfZGhfa2V5X2ZpbGUsY2VydF9maWxlcGF0aCk7CisgICAg ICAgIH0KKyAgICAgICAgaWYgKCFzc2xfY3JsX2RpcikgeworICAgICAgICAgICAgLyogd2UgbmVl ZCB0byBrbm93IHRoZSBmdWxscGF0aCB0byB0aGUgbG9jYXRpb24gb2YgdGhlCisgICAgICAgICAg ICAqIGNlcnRpZmljYXRlIHRoYXQgd2Ugd2lsbCBiZSBydW5uaW5nIHdpdGggYXMgd2UgY2Fubm90 CisgICAgICAgICAgICAqIGJlIHN1cmUgb2YgdGhlIGN3ZCB3aGVuIHdlIGFyZSBsYXVuY2hlZAor ICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHNwcmludGYoY2VydF9maWxlcGF0aCwiJXMvY3Js IixkZWZkaXIpOworICAgICAgICAgICAgaWYgKHpjaGtpKGNlcnRfZmlsZXBhdGgpID4gMCkKKyAg ICAgICAgICAgICAgICBtYWtlc3RyKCZzc2xfY3JsX2RpcixjZXJ0X2ZpbGVwYXRoKTsKKyAgICAg ICAgfQorCisgICAgICAgIGlmIChzc2xfb25seV9mbGFnICYmICF0bHNfbG9hZF9jZXJ0cyhzc2xf Y3R4LHNzbF9jb24sMSkpIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMTAsInNzbF90bl9pbml0Iiwi VW5hYmxlIHRvIGxvYWQgU1NMIGNlcnRzIiwwKTsKKyAgICAgICAgICAgIGxhc3Rfc3NsX21vZGUg PSAtMTsKKyAgICAgICAgICAgIHJldHVybigwKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGxz X29ubHlfZmxhZyAmJiAhdGxzX2xvYWRfY2VydHModGxzX2N0eCx0bHNfY29uLDEpKSB7CisgICAg ICAgICAgICBkZWJ1ZyhGMTEwLCJzc2xfdG5faW5pdCIsIlVuYWJsZSB0byBsb2FkIFRMUyBjZXJ0 cyIsMCk7CisgICAgICAgICAgICBsYXN0X3NzbF9tb2RlID0gLTE7CisgICAgICAgICAgICByZXR1 cm4oMCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIChsYXN0X3NzbF9tb2RlICE9IG1vZGUp IHx8ICFzc2xfY3R4IHx8ICF0bHNfY3R4ICkgeworICAgICAgICAgICAgLyogd2UgbWF5IHJlcXVp cmUgYSB0ZW1wIDUxMiBiaXQgUlNBIGtleSBiZWNhdXNlIG9mIHRoZQorICAgICAgICAgICAgICog d29uZGVyZnVsIHdheSBleHBvcnQgdGhpbmdzIHdvcmsgLi4uIGlmIHNvIHdlIGdlbmVyYXRlCisg ICAgICAgICAgICAgKiBvbmUgbm93IQorICAgICAgICAgICAgICovCisKKyAgICAgICAgICAgIFNT TF9DVFhfc2V0X3RtcF9yc2FfY2FsbGJhY2soc3NsX2N0eCwgdG1wX3JzYV9jYik7CisgICAgICAg ICAgICBTU0xfQ1RYX3NldF90bXBfZGhfY2FsbGJhY2soIHNzbF9jdHgsIHRtcF9kaF9jYik7Cisg ICAgICAgICAgICBTU0xfQ1RYX3NldF90bXBfcnNhX2NhbGxiYWNrKHRsc19jdHgsIHRtcF9yc2Ff Y2IpOworICAgICAgICAgICAgU1NMX0NUWF9zZXRfdG1wX2RoX2NhbGxiYWNrKCB0bHNfY3R4LCB0 bXBfZGhfY2IpOworCisgICAgICAgICAgICBkaCA9IHRtcF9kaF9jYihOVUxMLDAsNTEyKTsKKyAg ICAgICAgICAgIFNTTF9DVFhfc2V0X3RtcF9kaChzc2xfY3R4LGRoKTsKKyAgICAgICAgICAgIFNT TF9DVFhfc2V0X3RtcF9kaCh0bHNfY3R4LGRoKTsKKworICAgICAgICAgICAgLyogVGhlIGZvbGxv d2luZyBjb2RlIGlzIG9ubHkgY2FsbGVkIGlmIHdlIGFyZSB1c2luZyBhCisgICAgICAgICAgICAg KiBjZXJ0aWZpY2F0ZSB3aXRoIGFuIFJTQSBwdWJsaWMga2V5IGFuZCB3aGVyZSB0aGUKKyAgICAg ICAgICAgICAqIGNlcnRpZmljYXRlIGhhcyBhIGtleSBsZW5ndGggbGVzcyB0aGFuIDUxMiBiaXRz IG9yIGlzCisgICAgICAgICAgICAgKiBtYXJrZWQgZm9yIHNpZ25pbmcgb25seS4gIFRoaXMgaXMg c28gd2UgY2FuIHN1cHBvcnQKKyAgICAgICAgICAgICAqIHRoZSBncmVhdGVzdCBsZWdhbCBwcml2 YWN5IGxldmVsIHdpdGggZXhwb3J0YWJsZSBjbGllbnRzLgorICAgICAgICAgICAgICovCisKKyAg ICAgICAgICAgIGlmIChTU0xfQ1RYX25lZWRfdG1wX1JTQShzc2xfY3R4KSB8fAorICAgICAgICAg ICAgICAgICBTU0xfQ1RYX25lZWRfdG1wX1JTQSh0bHNfY3R4KSkKKyAgICAgICAgICAgIHsKKyAg ICAgICAgICAgICAgICBSU0EgKnJzYTsKKworICAgICAgICAgICAgICAgIGlmICggc3NsX2RlYnVn X2ZsYWcgKQorICAgICAgICAgICAgICAgICAgICBwcmludGYoIkdlbmVyYXRpbmcgdGVtcCAoNTEy IGJpdCkgUlNBIGtleSAuLi5cclxuIik7CisgICAgICAgICAgICAgICAgcnNhPVJTQV9nZW5lcmF0 ZV9rZXkoNTEyLFJTQV9GNCxOVUxMLE5VTEwpOworICAgICAgICAgICAgICAgIGlmICggc3NsX2Rl YnVnX2ZsYWcgKQorICAgICAgICAgICAgICAgICAgICBwcmludGYoIkdlbmVyYXRpb24gb2YgdGVt cCAoNTEyIGJpdCkgUlNBIGtleSBkb25lXHJcbiIpOworCisgICAgICAgICAgICAgICAgaWYgKFNT TF9DVFhfbmVlZF90bXBfUlNBKHNzbF9jdHgpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICgh U1NMX0NUWF9zZXRfdG1wX3JzYShzc2xfY3R4LHJzYSkpIHsKKyAgICAgICAgICAgICAgICAgICAg ICAgIGlmICggc3NsX2RlYnVnX2ZsYWcgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBy aW50ZigKKyAgIkZhaWxlZCB0byBhc3NpZ24gZ2VuZXJhdGVkIHRlbXAgUlNBIGtleSB0byBTU0wh XHJcbiIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICAgIGlmIChTU0xfQ1RYX25lZWRfdG1wX1JTQSh0bHNfY3R4KSkgeworICAgICAgICAg ICAgICAgICAgICBpZiAoIVNTTF9DVFhfc2V0X3RtcF9yc2EodGxzX2N0eCxyc2EpKSB7CisgICAg ICAgICAgICAgICAgICAgICAgICBpZiAoIHNzbF9kZWJ1Z19mbGFnICkKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICBwcmludGYoCisgICJGYWlsZWQgdG8gYXNzaWduIGdlbmVyYXRlZCB0ZW1w IFJTQSBrZXkgdG8gVExTIVxyXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgICBSU0FfZnJlZShyc2EpOworICAgICAgICAgICAgICAg IGlmICggc3NsX2RlYnVnX2ZsYWcgKQorICAgICAgICAgICAgICAgICAgICBwcmludGYoIkFzc2ln bmVkIHRlbXAgKDUxMiBiaXQpIFJTQSBrZXlcclxuIik7CisgICAgICAgICAgICB9CisgICAgICAg IH0KKyAgICB9CisKKyAgICAvKiBtYWtlIHN1cmUgd2Ugd2lsbCBmaW5kIGNlcnRpZmljYXRlcyBp biB0aGUgc3RhbmRhcmQKKyAgICAgKiBsb2NhdGlvbiAuLi4gb3RoZXJ3aXNlIHdlIGRvbid0IGxv b2sgYW55d2hlcmUgZm9yCisgICAgICogdGhlc2UgdGhpbmdzIHdoaWNoIGlzIGdvaW5nIHRvIG1h a2UgY2xpZW50IGNlcnRpZmljYXRlCisgICAgICogZXhjaGFuZ2UgcmF0aGVyIHVzZWxlc3MgOi0p CisgICAgICogSW4gT1MyLCBkZWZhdWx0IHZhbHVlcyBmb3Igc3NsX3ZlcmlmeV9maWxlIGFuZCBz c2xfdmVyaWZ5X3BhdGguCisgICAgICovCisKKyNpZmRlZiBPUzIKKyNpZmRlZiBOVAorICAgIHsK KyAgICAgICAgLyogVGhlIGRlZmF1bHRzIGluIHRoZSBTU0wgY3J5cHRvIGxpYnJhcnkgYXJlIG5v dCBhcHByb3ByaWF0ZSBmb3IgT1MvMiAqLworICAgICAgICBjaGFyIHBhdGhbQ0tNQVhQQVRIXTsK KworICAgICAgICBja21ha21zZyhwYXRoLENLTUFYUEFUSCxleGVkaXIsImNlcnRzIixOVUxMLE5V TEwpOworICAgICAgICBpZiAoaXNkaXIocGF0aCkgJiYgCisgICAgICAgICAgICBTU0xfQ1RYX2xv YWRfdmVyaWZ5X2xvY2F0aW9ucyh0bHNfY3R4LE5VTEwscGF0aCkgPT0gMSkgIHsKKyAgICAgICAg ICAgIGRlYnVnKEYxMTAsInNzbF90bl9pbml0IGNlcnRpZmljYXRlIHZlcmlmeSBkaXIiLHBhdGgs MCk7CisgICAgICAgICAgICBpZiAoc3NsX2RlYnVnX2ZsYWcpCisgICAgICAgICAgICAgICAgcHJp bnRmKCIgIENlcnRpZmljYXRlIFZlcmlmaWNhdGlvbiBEaXJlY3Rvcnk6ICVzXHJcbiIscGF0aCk7 CisgICAgICAgICAgICBTU0xfQ1RYX2xvYWRfdmVyaWZ5X2xvY2F0aW9ucyhzc2xfY3R4LE5VTEws cGF0aCk7CisgICAgICAgIH0KKyAgICAgICAgY2ttYWttc2cocGF0aCxDS01BWFBBVEgsR2V0QXBw RGF0YSgxKSwia2VybWl0IDk1L2NlcnRzIixOVUxMLE5VTEwpOworICAgICAgICBpZiAoaXNkaXIo cGF0aCkgJiYKKyAgICAgICAgICAgIFNTTF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zKHRsc19j dHgsTlVMTCxwYXRoKSA9PSAxKSAgeworICAgICAgICAgICAgZGVidWcoRjExMCwic3NsX3RuX2lu aXQgY2VydGlmaWNhdGUgdmVyaWZ5IGRpciIscGF0aCwwKTsKKyAgICAgICAgICAgIGlmIChzc2xf ZGVidWdfZmxhZykKKyAgICAgICAgICAgICAgICBwcmludGYoIiAgQ2VydGlmaWNhdGUgVmVyaWZp Y2F0aW9uIERpcmVjdG9yeTogJXNcclxuIixwYXRoKTsKKyAgICAgICAgICAgIFNTTF9DVFhfbG9h ZF92ZXJpZnlfbG9jYXRpb25zKHNzbF9jdHgsTlVMTCxwYXRoKTsKKyAgICAgICAgfQorICAgICAg ICBja21ha21zZyhwYXRoLENLTUFYUEFUSCxHZXRBcHBEYXRhKDApLCJrZXJtaXQgOTUvY2VydHMi LE5VTEwsTlVMTCk7CisgICAgICAgIGlmIChpc2RpcihwYXRoKSAmJgorICAgICAgICAgICAgU1NM X0NUWF9sb2FkX3ZlcmlmeV9sb2NhdGlvbnModGxzX2N0eCxOVUxMLHBhdGgpID09IDEpICB7Cisg ICAgICAgICAgICBkZWJ1ZyhGMTEwLCJzc2xfdG5faW5pdCBjZXJ0aWZpY2F0ZSB2ZXJpZnkgZGly IixwYXRoLDApOworICAgICAgICAgICAgaWYgKHNzbF9kZWJ1Z19mbGFnKQorICAgICAgICAgICAg ICAgIHByaW50ZigiICBDZXJ0aWZpY2F0ZSBWZXJpZmljYXRpb24gRGlyZWN0b3J5OiAlc1xyXG4i LHBhdGgpOworICAgICAgICAgICAgU1NMX0NUWF9sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoc3NsX2N0 eCxOVUxMLHBhdGgpOworICAgICAgICB9CisgICAgICAgIGNrbWFrbXNnKHBhdGgsQ0tNQVhQQVRI LGV4ZWRpciwiY2FfY2VydHMucGVtIixOVUxMLE5VTEwpOworICAgICAgICBpZiAoemNoa2kocGF0 aCkgPiAwICYmIAorICAgICAgICAgICAgU1NMX0NUWF9sb2FkX3ZlcmlmeV9sb2NhdGlvbnModGxz X2N0eCxwYXRoLE5VTEwpID09IDEpIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMTAsInNzbF90bl9p bml0IGNlcnRpZmljYXRlIHZlcmlmeSBmaWxlIixwYXRoLDApOworICAgICAgICAgICAgaWYgKHNz bF9kZWJ1Z19mbGFnKQorICAgICAgICAgICAgICAgIHByaW50ZigiICBDZXJ0aWZpY2F0ZSBWZXJp ZmljYXRpb24gRmlsZTogJXNcclxuIixwYXRoKTsKKyAgICAgICAgICAgIFNTTF9DVFhfbG9hZF92 ZXJpZnlfbG9jYXRpb25zKHNzbF9jdHgscGF0aCxOVUxMKTsKKyAgICAgICAgfQorICAgICAgICBj a21ha21zZyhwYXRoLENLTUFYUEFUSCxHZXRBcHBEYXRhKDEpLCJrZXJtaXQgOTUvY2FfY2VydHMu cGVtIixOVUxMLE5VTEwpOworICAgICAgICBpZiAoemNoa2kocGF0aCkgPiAwICYmIAorICAgICAg ICAgICAgU1NMX0NUWF9sb2FkX3ZlcmlmeV9sb2NhdGlvbnModGxzX2N0eCxwYXRoLE5VTEwpID09 IDEpIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMTAsInNzbF90bl9pbml0IGNlcnRpZmljYXRlIHZl cmlmeSBmaWxlIixwYXRoLDApOworICAgICAgICAgICAgaWYgKHNzbF9kZWJ1Z19mbGFnKQorICAg ICAgICAgICAgICAgIHByaW50ZigiICBDZXJ0aWZpY2F0ZSBWZXJpZmljYXRpb24gRmlsZTogJXNc clxuIixwYXRoKTsKKyAgICAgICAgICAgIFNTTF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zKHNz bF9jdHgscGF0aCxOVUxMKTsKKyAgICAgICAgfQorICAgICAgICBja21ha21zZyhwYXRoLENLTUFY UEFUSCxHZXRBcHBEYXRhKDApLCJrZXJtaXQgOTUvY2FfY2VydHMucGVtIixOVUxMLE5VTEwpOwor ICAgICAgICBpZiAoemNoa2kocGF0aCkgPiAwICYmIAorICAgICAgICAgICAgU1NMX0NUWF9sb2Fk X3ZlcmlmeV9sb2NhdGlvbnModGxzX2N0eCxwYXRoLE5VTEwpID09IDEpIHsKKyAgICAgICAgICAg IGRlYnVnKEYxMTAsInNzbF90bl9pbml0IGNlcnRpZmljYXRlIHZlcmlmeSBmaWxlIixwYXRoLDAp OworICAgICAgICAgICAgaWYgKHNzbF9kZWJ1Z19mbGFnKQorICAgICAgICAgICAgICAgIHByaW50 ZigiICBDZXJ0aWZpY2F0ZSBWZXJpZmljYXRpb24gRmlsZTogJXNcclxuIixwYXRoKTsKKyAgICAg ICAgICAgIFNTTF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zKHNzbF9jdHgscGF0aCxOVUxMKTsK KyAgICAgICAgfQorICAgIH0KKyNlbHNlIC8qIE5UICovCisgICAgeworICAgICAgICAvKiBUaGUg ZGVmYXVsdHMgaW4gdGhlIFNTTCBjcnlwdG8gbGlicmFyeSBhcmUgbm90IGFwcHJvcHJpYXRlIGZv ciBPUy8yICovCisgICAgICAgIGNoYXIgcGF0aFtDS01BWFBBVEhdOworCisgICAgICAgIGNrbWFr bXNnKHBhdGgsQ0tNQVhQQVRILGV4ZWRpciwiY2VydHMiLE5VTEwsTlVMTCk7CisgICAgICAgIGlm IChpc2RpcihwYXRoKSAmJiAKKyAgICAgICAgICAgIFNTTF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRp b25zKHRsc19jdHgsTlVMTCxwYXRoKSA9PSAxKSAgeworICAgICAgICAgICAgZGVidWcoRjExMCwi c3NsX3RuX2luaXQgY2VydGlmaWNhdGUgdmVyaWZ5IGRpciIscGF0aCwwKTsKKyAgICAgICAgICAg IGlmIChzc2xfZGVidWdfZmxhZykKKyAgICAgICAgICAgICAgICBwcmludGYoIiAgQ2VydGlmaWNh dGUgVmVyaWZpY2F0aW9uIERpcmVjdG9yeTogJXNcclxuIixwYXRoKTsKKyAgICAgICAgICAgIFNT TF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zKHNzbF9jdHgsTlVMTCxwYXRoKTsKKyAgICAgICAg fQorICAgICAgICBja21ha21zZyhwYXRoLENLTUFYUEFUSCxleGVkaXIsImNhX2NlcnRzLnBlbSIs TlVMTCxOVUxMKTsKKyAgICAgICAgaWYgKHpjaGtpKHBhdGgpID4gMCAmJiAKKyAgICAgICAgICAg IFNTTF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zKHRsc19jdHgscGF0aCxOVUxMKSA9PSAxKSB7 CisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJzc2xfdG5faW5pdCBjZXJ0aWZpY2F0ZSB2ZXJpZnkg ZmlsZSIscGF0aCwwKTsKKyAgICAgICAgICAgIGlmIChzc2xfZGVidWdfZmxhZykKKyAgICAgICAg ICAgICAgICBwcmludGYoIiAgQ2VydGlmaWNhdGUgVmVyaWZpY2F0aW9uIEZpbGU6ICVzXHJcbiIs cGF0aCk7CisgICAgICAgICAgICBTU0xfQ1RYX2xvYWRfdmVyaWZ5X2xvY2F0aW9ucyhzc2xfY3R4 LHBhdGgsTlVMTCk7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgLyogTlQgKi8KKyNlbHNlIC8q IE9TMiAqLworICAgIFNTTF9DVFhfc2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzKHNzbF9jdHgpOwor ICAgIFNTTF9DVFhfc2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzKHRsc19jdHgpOworI2VuZGlmIC8q IE9TMiAqLworCisgICAgaWYgKHNzbF92ZXJpZnlfZmlsZSkgeworICAgICAgICBpZiAoemNoa2ko c3NsX3ZlcmlmeV9maWxlKSA+IDAgJiYgCisgICAgICAgICAgICBTU0xfQ1RYX2xvYWRfdmVyaWZ5 X2xvY2F0aW9ucyh0bHNfY3R4LHNzbF92ZXJpZnlfZmlsZSxOVUxMKSA9PSAxKSB7CisgICAgICAg ICAgICBkZWJ1ZyhGMTEwLCJzc2xfdG5faW5pdCBjZXJ0aWZpY2F0ZSB2ZXJpZnkgZmlsZSIsc3Ns X3ZlcmlmeV9maWxlLDApOworICAgICAgICAgICAgaWYgKHNzbF9kZWJ1Z19mbGFnKQorICAgICAg ICAgICAgICAgIHByaW50ZigiICBDZXJ0aWZpY2F0ZSBWZXJpZmljYXRpb24gRmlsZTogJXNcclxu Iixzc2xfdmVyaWZ5X2ZpbGUpOworICAgICAgICAgICAgU1NMX0NUWF9sb2FkX3ZlcmlmeV9sb2Nh dGlvbnMoc3NsX2N0eCxzc2xfdmVyaWZ5X2ZpbGUsTlVMTCk7CisgICAgICAgIH0KKyAgICB9Cisg ICAgaWYgKHNzbF92ZXJpZnlfZGlyICYmIGlzZGlyKHNzbF92ZXJpZnlfZGlyKSkgeworICAgICAg ICBpZiAoU1NMX0NUWF9sb2FkX3ZlcmlmeV9sb2NhdGlvbnModGxzX2N0eCxOVUxMLHNzbF92ZXJp ZnlfZGlyKSA9PSAxKSAgeworICAgICAgICAgICAgZGVidWcoRjExMCwic3NsX3RuX2luaXQgY2Vy dGlmaWNhdGUgdmVyaWZ5IGRpciIsc3NsX3ZlcmlmeV9kaXIsMCk7CisgICAgICAgICAgICBpZiAo c3NsX2RlYnVnX2ZsYWcpCisgICAgICAgICAgICAgICAgcHJpbnRmKCIgIENlcnRpZmljYXRlIFZl cmlmaWNhdGlvbiBEaXJlY3Rvcnk6ICVzXHJcbiIsc3NsX3ZlcmlmeV9kaXIpOworICAgICAgICAg ICAgU1NMX0NUWF9sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoc3NsX2N0eCxOVUxMLHNzbF92ZXJpZnlf ZGlyKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAobW9kZSA9PSBTU0xfU0VSVkVSKSB7Cisg ICAgICAgIFNTTF9DVFhfc2V0X3ZlcmlmeShzc2xfY3R4LAorICAgICAgICAgICAgICAgICAgICAg c3NsX3ZlcmlmeV9mbGFnP3NzbF92ZXJpZnlfZmxhZ3xTU0xfVkVSSUZZX0NMSUVOVF9PTkNFOjAs CisgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2xfc2VydmVyX3ZlcmlmeV9jYWxsYmFjayk7 CisgICAgICAgIFNTTF9DVFhfc2V0X3ZlcmlmeSh0bHNfY3R4LAorICAgICAgICAgICAgICAgICAg ICAgc3NsX3ZlcmlmeV9mbGFnP3NzbF92ZXJpZnlfZmxhZ3xTU0xfVkVSSUZZX0NMSUVOVF9PTkNF OjAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2xfc2VydmVyX3ZlcmlmeV9jYWxsYmFj ayk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgU1NMX0NUWF9zZXRfdmVyaWZ5KHNzbF9jdHgsc3Ns X3ZlcmlmeV9mbGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsX2NsaWVudF92ZXJp ZnlfY2FsbGJhY2spOworICAgICAgICBTU0xfQ1RYX3NldF92ZXJpZnkodGxzX2N0eCxzc2xfdmVy aWZ5X2ZsYWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2xfY2xpZW50X3ZlcmlmeV9j YWxsYmFjayk7CisgICAgfQorCisgICAgLyogRnJlZSB0aGUgZXhpc3RpbmcgQ1JMIFN0b3JlICov CisgICAgaWYgKGNybF9zdG9yZSkgeworICAgICAgICBYNTA5X1NUT1JFX2ZyZWUoY3JsX3N0b3Jl KTsKKyAgICAgICAgY3JsX3N0b3JlID0gTlVMTDsKKyAgICB9CisKKyAgICAvKiBzZXQgdXAgdGhl IG5ldyBDUkwgU3RvcmUgKi8KKyAgICBjcmxfc3RvcmUgPSBYNTA5X1NUT1JFX25ldygpOworICAg IGlmIChjcmxfc3RvcmUpIHsKKyNpZmRlZiBPUzIKKyAgICAgICAgY2hhciBwYXRoW0NLTUFYUEFU SF07CisKKyAgICAgICAgY2ttYWttc2cocGF0aCxDS01BWFBBVEgsZXhlZGlyLCJjcmxzIixOVUxM LE5VTEwpOworICAgICAgICBpZiAoaXNkaXIocGF0aCkgJiYKKyAgICAgICAgICAgIFg1MDlfU1RP UkVfbG9hZF9sb2NhdGlvbnMoY3JsX3N0b3JlLE5VTEwscGF0aCkgPT0gMSkgeworICAgICAgICAg ICAgZGVidWcoRjExMCwic3NsX3RuX2luaXQgY3JsIGRpciIscGF0aCwwKTsKKyAgICAgICAgICAg IGlmIChzc2xfZGVidWdfZmxhZykKKyAgICAgICAgICAgICAgICBwcmludGYoIiAgQ1JMIERpcmVj dG9yeTogJXNcclxuIixwYXRoKTsKKyAgICAgICAgfQorI2lmZGVmIE5UCisgICAgICAgIGNrbWFr bXNnKHBhdGgsQ0tNQVhQQVRILEdldEFwcERhdGEoMSksImtlcm1pdCA5NS9jcmxzIixOVUxMLE5V TEwpOworICAgICAgICBpZiAoaXNkaXIocGF0aCkgJiYgCisgICAgICAgICAgICBYNTA5X1NUT1JF X2xvYWRfbG9jYXRpb25zKGNybF9zdG9yZSxOVUxMLHBhdGgpID09IDEpIHsKKyAgICAgICAgICAg IGRlYnVnKEYxMTAsInNzbF90bl9pbml0IGNybCBkaXIiLHBhdGgsMCk7CisgICAgICAgICAgICBp ZiAoc3NsX2RlYnVnX2ZsYWcpCisgICAgICAgICAgICAgICAgcHJpbnRmKCIgIENSTCBEaXJlY3Rv cnk6ICVzXHJcbiIscGF0aCk7CisgICAgICAgIH0KKyAgICAgICAgY2ttYWttc2cocGF0aCxDS01B WFBBVEgsR2V0QXBwRGF0YSgwKSwia2VybWl0IDk1L2NybHMiLE5VTEwsTlVMTCk7CisgICAgICAg IGlmIChpc2RpcihwYXRoKSAmJiAKKyAgICAgICAgICAgIFg1MDlfU1RPUkVfbG9hZF9sb2NhdGlv bnMoY3JsX3N0b3JlLE5VTEwscGF0aCkgPT0gMSkgeworICAgICAgICAgICAgZGVidWcoRjExMCwi c3NsX3RuX2luaXQgY3JsIGRpciIscGF0aCwwKTsKKyAgICAgICAgICAgIGlmIChzc2xfZGVidWdf ZmxhZykKKyAgICAgICAgICAgICAgICBwcmludGYoIiAgQ1JMIERpcmVjdG9yeTogJXNcclxuIixw YXRoKTsKKyAgICAgICAgfQorI2VuZGlmIC8qIE5UICovCisgICAgICAgIAorICAgICAgICBja21h a21zZyhwYXRoLENLTUFYUEFUSCxleGVkaXIsImNhX2NybHMucGVtIixOVUxMLE5VTEwpOworICAg ICAgICBpZiAoemNoa2kocGF0aCkgPiAwICYmIAorICAgICAgICAgICAgWDUwOV9TVE9SRV9sb2Fk X2xvY2F0aW9ucyhjcmxfc3RvcmUscGF0aCxOVUxMKSA9PSAxKSB7CisgICAgICAgICAgICBkZWJ1 ZyhGMTEwLCJzc2xfdG5faW5pdCBjcmwgZmlsZSIscGF0aCwwKTsKKyAgICAgICAgICAgIGlmIChz c2xfZGVidWdfZmxhZykKKyAgICAgICAgICAgICAgICBwcmludGYoIiAgQ1JMIEZpbGU6ICVzXHJc biIscGF0aCk7CisgICAgICAgIH0KKyNpZmRlZiBOVAorICAgICAgICBja21ha21zZyhwYXRoLENL TUFYUEFUSCxHZXRBcHBEYXRhKDEpLCJrZXJtaXQgOTUvY2FfY3Jscy5wZW0iLE5VTEwsTlVMTCk7 CisgICAgICAgIGlmICh6Y2hraShwYXRoKSA+IDAgJiYgCisgICAgICAgICAgICBYNTA5X1NUT1JF X2xvYWRfbG9jYXRpb25zKGNybF9zdG9yZSxwYXRoLE5VTEwpID09IDEpIHsKKyAgICAgICAgICAg IGRlYnVnKEYxMTAsInNzbF90bl9pbml0IGNybCBmaWxlIixwYXRoLDApOworICAgICAgICAgICAg aWYgKHNzbF9kZWJ1Z19mbGFnKQorICAgICAgICAgICAgICAgIHByaW50ZigiICBDUkwgRmlsZTog JXNcclxuIixwYXRoKTsKKyAgICAgICAgfQorICAgICAgICBja21ha21zZyhwYXRoLENLTUFYUEFU SCxHZXRBcHBEYXRhKDApLCJrZXJtaXQgOTUvY2FfY3Jscy5wZW0iLE5VTEwsTlVMTCk7CisgICAg ICAgIGlmICh6Y2hraShwYXRoKSA+IDAgJiYgCisgICAgICAgICAgICBYNTA5X1NUT1JFX2xvYWRf bG9jYXRpb25zKGNybF9zdG9yZSxwYXRoLE5VTEwpID09IDEpIHsKKyAgICAgICAgICAgIGRlYnVn KEYxMTAsInNzbF90bl9pbml0IGNybCBmaWxlIixwYXRoLDApOworICAgICAgICAgICAgaWYgKHNz bF9kZWJ1Z19mbGFnKQorICAgICAgICAgICAgICAgIHByaW50ZigiICBDUkwgRmlsZTogJXNcclxu IixwYXRoKTsKKyAgICAgICAgfQorI2VuZGlmIC8qIE5UICovCisjZW5kaWYgLyogT1MyICovCisK KyAgICAgICAgaWYgKHNzbF9jcmxfZmlsZSB8fCBzc2xfY3JsX2RpcikgeworICAgICAgICAgICAg aWYgKHNzbF9jcmxfZmlsZSAmJiB6Y2hraShzc2xfY3JsX2ZpbGUpID4gMCAmJiAKKyAgICAgICAg ICAgICAgICBYNTA5X1NUT1JFX2xvYWRfbG9jYXRpb25zKGNybF9zdG9yZSxzc2xfY3JsX2ZpbGUs TlVMTCkgPT0gMSkgeworICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsInNzbF90bl9pbml0IGNy bCBmaWxlIixzc2xfY3JsX2ZpbGUsMCk7CisgICAgICAgICAgICAgICAgaWYgKHNzbF9kZWJ1Z19m bGFnKQorICAgICAgICAgICAgICAgICAgICBwcmludGYoIiAgQ1JMIEZpbGU6ICVzXHJcbiIsc3Ns X2NybF9maWxlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzc2xfY3JsX2RpciAm JiBpc2Rpcihzc2xfY3JsX2RpcikgJiYKKyAgICAgICAgICAgICAgICBYNTA5X1NUT1JFX2xvYWRf bG9jYXRpb25zKGNybF9zdG9yZSxOVUxMLHNzbF9jcmxfZGlyKSA9PSAxKSB7CisgICAgICAgICAg ICAgICAgZGVidWcoRjExMCwic3NsX3RuX2luaXQgY3JsIGRpciIsc3NsX2NybF9kaXIsMCk7Cisg ICAgICAgICAgICAgICAgaWYgKHNzbF9kZWJ1Z19mbGFnKQorICAgICAgICAgICAgICAgICAgICBw cmludGYoIiAgQ1JMIERpcmVjdG9yeTogJXNcclxuIixzc2xfY3JsX2Rpcik7CisgICAgICAgICAg ICB9CisgICAgICAgIH0gCisjaWZuZGVmIE9TMgorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg IFg1MDlfU1RPUkVfc2V0X2RlZmF1bHRfcGF0aHMoY3JsX3N0b3JlKTsKKyAgICAgICAgfQorI2Vu ZGlmIC8qIE9TMiAqLworICAgIH0KKworI2lmbmRlZiBDT01NRU5UCisgICAgc3NsX2NvbnggPSBz c2xfY29uOworICAgIHNzbF9jb249KFNTTCAqKVNTTF9uZXcoc3NsX2N0eCk7CisgICAgaWYgKCAh c3NsX2NvbiApIHsKKyAgICAgICAgZGVidWcoRjExMCwic3NsX3RuX2luaXQiLCJTU0xfbmV3KHNz bF9jb24pIGZhaWxlZCIsMCk7CisgICAgICAgIGxhc3Rfc3NsX21vZGUgPSAtMTsKKyAgICAgICAg c3NsX2NvbiA9IHNzbF9jb254OworICAgICAgICByZXR1cm4oMCk7CisgICAgfQorICAgIGlmIChz c2xfY29ueCkgeworICAgICAgICBpZiAoIG1vZGUgPT0gU1NMX0NMSUVOVCApIHsKKyAgICAgICAg ICAgIFNTTF9zZXRfc2Vzc2lvbihzc2xfY29uLCBTU0xfZ2V0X3Nlc3Npb24oc3NsX2NvbngpKTsK KyAgICAgICAgfQorI2lmZGVmIFNTTF9LUkI1CisJCWlmIChzc2xfY29ueC0+a3NzbF9jdHgpIHsK KwkJCWtzc2xfY3R4X2ZyZWUoc3NsX2NvbngtPmtzc2xfY3R4KTsKKwkJCXNzbF9jb254LT5rc3Ns X2N0eCA9IE5VTEw7CisJCX0KKyNlbmRpZiAvKiBTU0xfS1JCNSAqLworICAgICAgICBTU0xfZnJl ZShzc2xfY29ueCk7CisgICAgICAgIHNzbF9jb254ID0gTlVMTDsKKyAgICB9CisgICAgdGxzX2Nv bnggPSB0bHNfY29uOworICAgIHRsc19jb249KFNTTCAqKVNTTF9uZXcodGxzX2N0eCk7CisgICAg aWYgKCAhdGxzX2NvbiApIHsKKyAgICAgICAgZGVidWcoRjExMCwic3NsX3RuX2luaXQiLCJTU0xf bmV3KHRsc19jb24pIGZhaWxlZCIsMCk7CisgICAgICAgIGxhc3Rfc3NsX21vZGUgPSAtMTsKKyAg ICAgICAgdGxzX2NvbiA9IHRsc19jb254OworICAgICAgICByZXR1cm4oMCk7CisgICAgfQorICAg IGlmICh0bHNfY29ueCkgeworICAgICAgICBpZiAoIG1vZGUgPT0gU1NMX0NMSUVOVCApCisgICAg ICAgICAgICBTU0xfc2V0X3Nlc3Npb24odGxzX2NvbiwgU1NMX2dldF9zZXNzaW9uKHRsc19jb254 KSk7CisjaWZkZWYgU1NMX0tSQjUKKwkJaWYgKHRsc19jb254LT5rc3NsX2N0eCkgeworCQkJa3Nz bF9jdHhfZnJlZSh0bHNfY29ueC0+a3NzbF9jdHgpOworCQkJdGxzX2NvbngtPmtzc2xfY3R4ID0g TlVMTDsKKwkJfQorI2VuZGlmIC8qIFNTTF9LUkI1ICovCisgICAgICAgIFNTTF9mcmVlKHRsc19j b254KTsKKyAgICAgICAgdGxzX2NvbnggPSBOVUxMOworICAgIH0KKyNlbHNlIC8qIENPTU1FTlQg Ki8KKyAgICAvKiBJIGRvbid0IGtub3cgd2h5IHRoaXMgZG9lcyBub3Qgd29yayB0byByZXVzZSB0 aGUgY29ubmVjdGlvbi4gKi8KKyAgICBpZiAoIHNzbF9jb24gKSB7CisgICAgICAgIFNTTF9jbGVh cihzc2xfY29uKTsKKyAgICAgICAgU1NMX3NldF9zZXNzaW9uKHNzbF9jb24sTlVMTCk7CisgICAg ICAgIFNTTF9zZXRfYWNjZXB0X3N0YXRlKHNzbF9jb24pIDsKKyAgICB9IGVsc2UgeworICAgICAg ICBzc2xfY29uPShTU0wgKilTU0xfbmV3KHNzbF9jdHgpOworICAgICAgICBpZiAoIXNzbF9jb24p IHsKKyAgICAgICAgICAgIGRlYnVnKEYxMTAsInNzbF90bl9pbml0IiwiU1NMX25ldyhzc2xfY3R4 KSBmYWlsZWQiLDApOworICAgICAgICAgICAgbGFzdF9zc2xfbW9kZSA9IC0xOworICAgICAgICAg ICAgc3NsX2NvbiA9IHNzbF9jb254OworICAgICAgICAgICAgcmV0dXJuKDApOworICAgICAgICB9 CisgICAgfQorCisgICAgaWYgKCB0bHNfY29uICkgeworICAgICAgICBTU0xfY2xlYXIodGxzX2Nv bik7CisgICAgICAgIFNTTF9zZXRfc2Vzc2lvbih0bHNfY29uLE5VTEwpOworICAgICAgICBTU0xf c2V0X2FjY2VwdF9zdGF0ZSh0bHNfY29uKSA7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdGxzX2Nv bj0oU1NMICopU1NMX25ldyh0bHNfY3R4KTsKKyAgICAgICAgaWYgKCAhdGxzX2NvbiApIHsKKyAg ICAgICAgICAgIGRlYnVnKEYxMTAsInNzbF90bl9pbml0IiwiU1NMX25ldyh0bHNfY3R4KSBmYWls ZWQiLDApOworICAgICAgICAgICAgbGFzdF9zc2xfbW9kZSA9IC0xOworICAgICAgICAgICAgdGxz X2NvbiA9IHRsc19jb254OworICAgICAgICAgICAgcmV0dXJuKDApOworICAgICAgICB9CisgICAg fQorI2VuZGlmIC8qIENPTU1FTlQgKi8KKworI2lmZGVmIFNTTF9LUkI1CisjaWZuZGVmIEtSQjVf U0VSVklDRV9OQU1FCisjZGVmaW5lIEtSQjVfU0VSVklDRV9OQU1FICAgICJob3N0IgorI2VuZGlm CisKKyAgICBpZiAoc3NsX2Nvbi0+a3NzbF9jdHggPT0gTlVMTCkKKyAgICAgICAgc3NsX2Nvbi0+ a3NzbF9jdHggPSBrc3NsX2N0eF9uZXcoKTsKKyAgICBpZiAodGxzX2Nvbi0+a3NzbF9jdHggPT0g TlVMTCkKKyAgICB0bHNfY29uLT5rc3NsX2N0eCA9IGtzc2xfY3R4X25ldygpOworICAgIGlmICht b2RlID09IFNTTF9TRVJWRVIpIHsKKyAgICAgICAgaWYgKHNzbF9jb24tPmtzc2xfY3R4ICE9IE5V TEwpCisgICAgICAgICAgICBrc3NsX2N0eF9zZXRzdHJpbmcoc3NsX2Nvbi0+a3NzbF9jdHgsIEtT U0xfS0VZVEFCLCBrNV9rZXl0YWIpOworICAgICAgICBpZiAodGxzX2Nvbi0+a3NzbF9jdHggIT0g TlVMTCkKKyAgICAgICAgICAgIGtzc2xfY3R4X3NldHN0cmluZyh0bHNfY29uLT5rc3NsX2N0eCwg S1NTTF9LRVlUQUIsIGs1X2tleXRhYik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKHNzbF9j b24tPmtzc2xfY3R4ICE9IE5VTEwpCisgICAgICAgICAgICBrc3NsX2N0eF9zZXRzdHJpbmcoc3Ns X2Nvbi0+a3NzbF9jdHgsIEtTU0xfU0VSVkVSLCBzekhvc3ROYW1lKTsKKyAgICAgICAgaWYgKHRs c19jb24tPmtzc2xfY3R4ICE9IE5VTEwpCisgICAgICAgICAgICBrc3NsX2N0eF9zZXRzdHJpbmco dGxzX2Nvbi0+a3NzbF9jdHgsIEtTU0xfU0VSVkVSLCBzekhvc3ROYW1lKTsKKyAgICB9CisgICAg a3NzbF9jdHhfc2V0c3RyaW5nKHNzbF9jb24tPmtzc2xfY3R4LCBLU1NMX1NFUlZJQ0UsCisgICAg ICAgICAgICAgICAgICAgICAgICBrcmI1X2Rfc3J2ID8ga3JiNV9kX3NydiA6IEtSQjVfU0VSVklD RV9OQU1FKTsKKyAgICBrc3NsX2N0eF9zZXRzdHJpbmcodGxzX2Nvbi0+a3NzbF9jdHgsIEtTU0xf U0VSVklDRSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGtyYjVfZF9zcnYgPyBrcmI1X2Rfc3J2 IDogS1JCNV9TRVJWSUNFX05BTUUpOworI2VuZGlmIC8qIFNTTF9LUkI1ICovCisKKyAgICBpZiAo c3NsX2NpcGhlcl9saXN0KSB7CisgICAgICAgIFNTTF9zZXRfY2lwaGVyX2xpc3Qoc3NsX2Nvbixz c2xfY2lwaGVyX2xpc3QpOworICAgICAgICBTU0xfc2V0X2NpcGhlcl9saXN0KHRsc19jb24sc3Ns X2NpcGhlcl9saXN0KTsKKyAgICB9IGVsc2UgeworICAgICAgICBjaGFyICogcDsKKyAgICAgICAg aWYgKHAgPSBnZXRlbnYoIlNTTF9DSVBIRVIiKSkgeworICAgICAgICAgICAgU1NMX3NldF9jaXBo ZXJfbGlzdChzc2xfY29uLHApOworICAgICAgICAgICAgU1NMX3NldF9jaXBoZXJfbGlzdCh0bHNf Y29uLHApOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgU1NMX3NldF9jaXBoZXJfbGlz dChzc2xfY29uLERFRkFVTFRfQ0lQSEVSX0xJU1QpOworICAgICAgICAgICAgU1NMX3NldF9jaXBo ZXJfbGlzdCh0bHNfY29uLERFRkFVTFRfQ0lQSEVSX0xJU1QpOworICAgICAgICB9CisgICAgfQor CisgICAgc3NsX3ZlcmlmeV9kZXB0aCA9IC0xOworCisgICAgaWYgKCBzc2xfZGVidWdfZmxhZyAp CisgICAgICAgIHByaW50ZigiU1NML1RMUyBpbml0IGRvbmUhXHJcbiIpOworCisgICAgc3NsX2lu aXRpYWxpemVkID0gMTsKKyAgICBsYXN0X3NzbF9tb2RlID0gbW9kZTsKKyAgICBkZWJ1ZyhGMTEw LCJzc2xfdG5faW5pdCIsImRvbmUiLDApOworICAgIHJldHVybigxKTsKK30KKworI2lmbmRlZiBO T0hUVFAKK2ludAorI2lmZGVmIENLX0FOU0lDCitzc2xfaHR0cF9pbml0KGNoYXIgKiBob3N0bmFt ZSkKKyNlbHNlCitzc2xfaHR0cF9pbml0KGhvc3RuYW1lKSBjaGFyICogaG9zdG5hbWU7CisjZW5k aWYgLyogQ0tfQU5TSUMgKi8KK3sKKyNpZmRlZiBLUkI1CisgICAgZXh0ZXJuIGNoYXIgKiBrNV9r ZXl0YWI7CisgICAgZXh0ZXJuIGNoYXIgKiBrcmI1X2Rfc3J2OworI2VuZGlmIC8qIEtSQjUgKi8K KyAgICBTU0wgKiB0bHNfY29ueD1OVUxMOworCisgICAgc3NsX2h0dHBfaW5pdGlhbGl6ZWQgPSAw OworCisgICAgaWYgKCAhY2tfc3NsZWF5X2lzX2luc3RhbGxlZCgpICkKKyAgICAgICAgcmV0dXJu KDApOworICAgIGRlYnVnKEYxMTAsInNzbF9odHRwX2luaXQiLGhvc3RuYW1lLDApOworCisgICAg aWYgKHNzbF9kZWJ1Z19mbGFnKQorICAgICAgICBwcmludGYoIlNTTF9ERUJVR19GTEFHIG9uXHJc biIpOworCisgICAgaWYgKCF0bHNfaHR0cF9jdHggKSB7CisjaWZkZWYgQ09NTUVOVAorICAgICAg ICAvKiB0b28gbWFueSB3ZWIgc2VydmVycyBzdGlsbCBkbyBub3Qgc3VwcG9ydCBUTFN2MSAqLwor ICAgICAgICB0bHNfaHR0cF9jdHg9KFNTTF9DVFggKilTU0xfQ1RYX25ldyhUTFN2MV9jbGllbnRf bWV0aG9kKCkpOworI2Vsc2UgLyogQ09NTUVOVCAqLworICAgICAgICB0bHNfaHR0cF9jdHg9KFNT TF9DVFggKilTU0xfQ1RYX25ldyhTU0x2MjNfY2xpZW50X21ldGhvZCgpKTsKKyAgICAgICAgLyog VGhpcyBjYW4gZmFpbCBiZWNhdXNlIHdlIGRvIG5vdCBoYXZlIFJTQSBhdmFpbGFibGUgKi8KKyAg ICAgICAgaWYgKCAhdGxzX2h0dHBfY3R4ICkgeworICAgICAgICAgICAgZGVidWcoRjExMCwic3Ns X2h0dHBfaW5pdCIsIlNTTHYyM19jbGllbnRfbWV0aG9kIGZhaWxlZCIsMCk7CisgICAgICAgICAg ICB0bHNfaHR0cF9jdHg9KFNTTF9DVFggKilTU0xfQ1RYX25ldyhTU0x2M19jbGllbnRfbWV0aG9k KCkpOworICAgICAgICB9CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAgICBpZiAoICF0bHNf aHR0cF9jdHggKSB7CisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJzc2xfaHR0cF9pbml0IiwiVExT djFfY2xpZW50X21ldGhvZCBmYWlsZWQiLDApOworICAgICAgICAgICAgcmV0dXJuKDApOworICAg ICAgICB9CisjaWZkZWYgVVNFX0NFUlRfQ0IKKyAgICAgICAgU1NMX0NUWF9zZXRfY2xpZW50X2Nl cnRfY2IodGxzX2h0dHBfY3R4LHNzbF9jbGllbnRfY2VydF9jYWxsYmFjayk7CisjZW5kaWYgLyog VVNFX0NFUlRfQ0IgKi8KKyAgICB9CisKKyAgICBTU0xfQ1RYX3NldF9kZWZhdWx0X3Bhc3N3ZF9j Yih0bHNfaHR0cF9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBlbV9w YXNzd29yZF9jYiAqKXNzbF9wYXNzd2RfY2FsbGJhY2spOworCisgICAgLyogZm9yIFNTTCBzd2l0 Y2ggb24gYWxsIHRoZSBpbnRlcm9wZXJhYmlsaXR5IGFuZCBidWcKKyAgICAgKiB3b3JrYXJvdW5k cyBzbyB0aGF0IHdlIHdpbGwgY29tbXVuaWNhdGUgd2l0aCBwZW9wbGUKKyAgICAgKiB0aGF0IGNh bm5vdCByZWFkIHBvb3JseSB3cml0dGVuIHNwZWNzIDotKQorICAgICAqIGZvciBUTFMgYmUgc3Vy ZSB0byBwcmV2ZW50IHVzZSBvZiBTU0x2MgorICAgICAqLworICAgIFNTTF9DVFhfc2V0X29wdGlv bnModGxzX2h0dHBfY3R4LAorICAgICAgICAgICAgU1NMX09QX05PX1NTTHYyfFNTTF9PUF9TSU5H TEVfREhfVVNFfFNTTF9PUF9FUEhFTUVSQUxfUlNBKTsKKworICAgIFNTTF9DVFhfc2V0X2luZm9f Y2FsbGJhY2sodGxzX2h0dHBfY3R4LHNzbF9jbGllbnRfaW5mb19jYWxsYmFjayk7CisKKyNpZm5k ZWYgQ09NTUVOVAorICAgIFNTTF9DVFhfc2V0X3Nlc3Npb25fY2FjaGVfbW9kZSh0bHNfaHR0cF9j dHgsU1NMX1NFU1NfQ0FDSEVfQ0xJRU5UKTsKKyAgICBTU0xfQ1RYX3NldF9zZXNzaW9uX2lkX2Nv bnRleHQodGxzX2h0dHBfY3R4LChDSEFSICopIjMiLDEpOworI2Vsc2UgLyogQ09NTUVOVCAqLwor ICAgIFNTTF9DVFhfc2V0X3Nlc3Npb25fY2FjaGVfbW9kZSh0bHNfaHR0cF9jdHgsU1NMX1NFU1Nf Q0FDSEVfT0ZGKTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisKKyAgICAvKiBtYWtlIHN1cmUgd2Ug d2lsbCBmaW5kIGNlcnRpZmljYXRlcyBpbiB0aGUgc3RhbmRhcmQKKyAgICAgKiBsb2NhdGlvbiAu Li4gb3RoZXJ3aXNlIHdlIGRvbid0IGxvb2sgYW55d2hlcmUgZm9yCisgICAgICogdGhlc2UgdGhp bmdzIHdoaWNoIGlzIGdvaW5nIHRvIG1ha2UgY2xpZW50IGNlcnRpZmljYXRlCisgICAgICogZXhj aGFuZ2UgcmF0aGVyIHVzZWxlc3MgOi0pCisgICAgICovCisKKyNpZmRlZiBPUzIKKyNpZmRlZiBO VAorICAgIHsKKyAgICAgICAgLyogVGhlIGRlZmF1bHRzIGluIHRoZSBTU0wgY3J5cHRvIGxpYnJh cnkgYXJlIG5vdCBhcHByb3ByaWF0ZSBmb3IgT1MvMiAqLworICAgICAgICBjaGFyIHBhdGhbQ0tN QVhQQVRIXTsKKworICAgICAgICBja21ha21zZyhwYXRoLENLTUFYUEFUSCxleGVkaXIsImNlcnRz IixOVUxMLE5VTEwpOworICAgICAgICBpZiAoU1NMX0NUWF9sb2FkX3ZlcmlmeV9sb2NhdGlvbnMo dGxzX2h0dHBfY3R4LE5VTEwscGF0aCkgPT0gMCkgIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMTAs InNzbF9odHRwX2luaXQgdW5hYmxlIHRvIGxvYWQgcGF0aCIscGF0aCwwKTsKKyAgICAgICAgICAg IGlmIChzc2xfZGVidWdfZmxhZykKKyAgICAgICAgICAgICAgICBwcmludGYoIj9VbmFibGUgdG8g bG9hZCB2ZXJpZnktZGlyOiAlc1xyXG4iLHBhdGgpOworICAgICAgICB9CisKKyAgICAgICAgY2tt YWttc2cocGF0aCxDS01BWFBBVEgsR2V0QXBwRGF0YSgxKSwia2VybWl0IDk1L2NlcnRzIixOVUxM LE5VTEwpOworICAgICAgICBpZiAoU1NMX0NUWF9sb2FkX3ZlcmlmeV9sb2NhdGlvbnModGxzX2h0 dHBfY3R4LE5VTEwscGF0aCkgPT0gMCkgIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMTAsInNzbF9o dHRwX2luaXQgdW5hYmxlIHRvIGxvYWQgcGF0aCIscGF0aCwwKTsKKyAgICAgICAgICAgIGlmIChz c2xfZGVidWdfZmxhZykKKyAgICAgICAgICAgICAgICBwcmludGYoIj9VbmFibGUgdG8gbG9hZCB2 ZXJpZnktZGlyOiAlc1xyXG4iLHBhdGgpOworICAgICAgICB9CisKKyAgICAgICAgY2ttYWttc2co cGF0aCxDS01BWFBBVEgsR2V0QXBwRGF0YSgwKSwia2VybWl0IDk1L2NlcnRzIixOVUxMLE5VTEwp OworICAgICAgICBpZiAoU1NMX0NUWF9sb2FkX3ZlcmlmeV9sb2NhdGlvbnModGxzX2h0dHBfY3R4 LE5VTEwscGF0aCkgPT0gMCkgIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMTAsInNzbF9odHRwX2lu aXQgdW5hYmxlIHRvIGxvYWQgcGF0aCIscGF0aCwwKTsKKyAgICAgICAgICAgIGlmIChzc2xfZGVi dWdfZmxhZykKKyAgICAgICAgICAgICAgICBwcmludGYoIj9VbmFibGUgdG8gbG9hZCB2ZXJpZnkt ZGlyOiAlc1xyXG4iLHBhdGgpOworICAgICAgICB9CisKKyAgICAgICAgY2ttYWttc2cocGF0aCxD S01BWFBBVEgsZXhlZGlyLCJjYV9jZXJ0cy5wZW0iLE5VTEwsTlVMTCk7CisgICAgICAgIGlmIChT U0xfQ1RYX2xvYWRfdmVyaWZ5X2xvY2F0aW9ucyh0bHNfaHR0cF9jdHgscGF0aCxOVUxMKSA9PSAw KSB7CisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJzc2xfaHR0cF9pbml0IHVuYWJsZSB0byBsb2Fk IHBhdGgiLHBhdGgsMCk7CisgICAgICAgICAgICBpZiAoc3NsX2RlYnVnX2ZsYWcpCisgICAgICAg ICAgICAgICAgcHJpbnRmKCI/VW5hYmxlIHRvIGxvYWQgdmVyaWZ5LWZpbGU6ICVzXHJcbiIscGF0 aCk7CisgICAgICAgIH0KKworICAgICAgICBja21ha21zZyhwYXRoLENLTUFYUEFUSCxHZXRBcHBE YXRhKDEpLCJrZXJtaXQgOTUvY2FfY2VydHMucGVtIixOVUxMLE5VTEwpOworICAgICAgICBpZiAo U1NMX0NUWF9sb2FkX3ZlcmlmeV9sb2NhdGlvbnModGxzX2h0dHBfY3R4LHBhdGgsTlVMTCkgPT0g MCkgeworICAgICAgICAgICAgZGVidWcoRjExMCwic3NsX2h0dHBfaW5pdCB1bmFibGUgdG8gbG9h ZCBwYXRoIixwYXRoLDApOworICAgICAgICAgICAgaWYgKHNzbF9kZWJ1Z19mbGFnKQorICAgICAg ICAgICAgICAgIHByaW50ZigiP1VuYWJsZSB0byBsb2FkIHZlcmlmeS1maWxlOiAlc1xyXG4iLHBh dGgpOworICAgICAgICB9CisKKyAgICAgICAgY2ttYWttc2cocGF0aCxDS01BWFBBVEgsR2V0QXBw RGF0YSgwKSwia2VybWl0IDk1L2NhX2NlcnRzLnBlbSIsTlVMTCxOVUxMKTsKKyAgICAgICAgaWYg KFNTTF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zKHRsc19odHRwX2N0eCxwYXRoLE5VTEwpID09 IDApIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMTAsInNzbF9odHRwX2luaXQgdW5hYmxlIHRvIGxv YWQgcGF0aCIscGF0aCwwKTsKKyAgICAgICAgICAgIGlmIChzc2xfZGVidWdfZmxhZykKKyAgICAg ICAgICAgICAgICBwcmludGYoIj9VbmFibGUgdG8gbG9hZCB2ZXJpZnktZmlsZTogJXNcclxuIixw YXRoKTsKKyAgICAgICAgfQorICAgIH0KKyNlbHNlIC8qIE5UICovCisgICAgeworICAgICAgICAv KiBUaGUgZGVmYXVsdHMgaW4gdGhlIFNTTCBjcnlwdG8gbGlicmFyeSBhcmUgbm90IGFwcHJvcHJp YXRlIGZvciBPUy8yICovCisgICAgICAgIGNoYXIgcGF0aFtDS01BWFBBVEhdOworCisgICAgICAg IGNrbWFrbXNnKHBhdGgsQ0tNQVhQQVRILGV4ZWRpciwiY2VydHMiLE5VTEwsTlVMTCk7CisgICAg ICAgIGlmIChTU0xfQ1RYX2xvYWRfdmVyaWZ5X2xvY2F0aW9ucyh0bHNfaHR0cF9jdHgsTlVMTCxw YXRoKSA9PSAwKSAgeworICAgICAgICAgICAgZGVidWcoRjExMCwic3NsX2h0dHBfaW5pdCB1bmFi bGUgdG8gbG9hZCBwYXRoIixwYXRoLDApOworICAgICAgICAgICAgaWYgKHNzbF9kZWJ1Z19mbGFn KQorICAgICAgICAgICAgICAgIHByaW50ZigiP1VuYWJsZSB0byBsb2FkIHZlcmlmeS1kaXI6ICVz XHJcbiIscGF0aCk7CisgICAgICAgIH0KKyAgICAgICAgY2ttYWttc2cocGF0aCxDS01BWFBBVEgs ZXhlZGlyLCJjYV9jZXJ0cy5wZW0iLE5VTEwsTlVMTCk7CisgICAgICAgIGlmIChTU0xfQ1RYX2xv YWRfdmVyaWZ5X2xvY2F0aW9ucyh0bHNfaHR0cF9jdHgscGF0aCxOVUxMKSA9PSAwKSB7CisgICAg ICAgICAgICBkZWJ1ZyhGMTEwLCJzc2xfaHR0cF9pbml0IHVuYWJsZSB0byBsb2FkIHBhdGgiLHBh dGgsMCk7CisgICAgICAgICAgICBpZiAoc3NsX2RlYnVnX2ZsYWcpCisgICAgICAgICAgICAgICAg cHJpbnRmKCI/VW5hYmxlIHRvIGxvYWQgdmVyaWZ5LWZpbGU6ICVzXHJcbiIscGF0aCk7CisgICAg ICAgIH0KKyAgICB9CisjZW5kaWYgLyogTlQgKi8KKyNlbHNlIC8qIE9TMiAqLworICAgIFNTTF9D VFhfc2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzKHRsc19odHRwX2N0eCk7CisjZW5kaWYgLyogT1My ICovCisKKyAgICBpZiAoc3NsX3ZlcmlmeV9maWxlICYmCisgICAgICAgIFNTTF9DVFhfbG9hZF92 ZXJpZnlfbG9jYXRpb25zKHRsc19odHRwX2N0eCxzc2xfdmVyaWZ5X2ZpbGUsTlVMTCkgPT0gMCkg IHsKKyAgICAgICAgZGVidWcoRjExMCwic3NsX2h0dHBfaW5pdCB1bmFibGUgdG8gbG9hZCBzc2xf dmVyaWZ5X2ZpbGUiLHNzbF92ZXJpZnlfZmlsZSwwKTsKKyAgICAgICAgaWYgKHNzbF9kZWJ1Z19m bGFnKQorICAgICAgICAgICAgcHJpbnRmKCI/VW5hYmxlIHRvIGxvYWQgdmVyaWZ5LWZpbGU6ICVz XHJcbiIsc3NsX3ZlcmlmeV9maWxlKTsKKyAgICB9CisgICAgaWYgKHNzbF92ZXJpZnlfZGlyICYm CisgICAgICAgIFNTTF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zKHRsc19odHRwX2N0eCxOVUxM LHNzbF92ZXJpZnlfZGlyKSA9PSAwKSAgeworICAgICAgICBkZWJ1ZyhGMTEwLCJzc2xfaHR0cF9p bml0IHVuYWJsZSB0byBsb2FkIHNzbF92ZXJpZnlfZGlyIixzc2xfdmVyaWZ5X2RpciwwKTsKKyAg ICAgICAgaWYgKHNzbF9kZWJ1Z19mbGFnKQorICAgICAgICAgICAgcHJpbnRmKCI/VW5hYmxlIHRv IGxvYWQgdmVyaWZ5LWRpcjogJXNcclxuIixzc2xfdmVyaWZ5X2Rpcik7CisgICAgfQorCisgICAg U1NMX0NUWF9zZXRfdmVyaWZ5KHRsc19odHRwX2N0eCxzc2xfdmVyaWZ5X2ZsYWcsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICBzc2xfY2xpZW50X3ZlcmlmeV9jYWxsYmFjayk7CisKKyAgICAv KiBGcmVlIHRoZSBleGlzdGluZyBDUkwgU3RvcmUgKi8KKyAgICBpZiAoY3JsX3N0b3JlKSB7Cisg ICAgICAgIFg1MDlfU1RPUkVfZnJlZShjcmxfc3RvcmUpOworICAgICAgICBjcmxfc3RvcmUgPSBO VUxMOworICAgIH0KKworICAgIC8qIHNldCB1cCB0aGUgbmV3IENSTCBTdG9yZSAqLworICAgIGNy bF9zdG9yZSA9IFg1MDlfU1RPUkVfbmV3KCk7CisgICAgaWYgKGNybF9zdG9yZSkgeworI2lmZGVm IE9TMgorICAgICAgICBjaGFyIHBhdGhbQ0tNQVhQQVRIXTsKKworICAgICAgICBja21ha21zZyhw YXRoLENLTUFYUEFUSCxleGVkaXIsImNybHMiLE5VTEwsTlVMTCk7CisgICAgICAgIGlmIChYNTA5 X1NUT1JFX2xvYWRfbG9jYXRpb25zKGNybF9zdG9yZSxOVUxMLHBhdGgpID09IDApIHsKKyAgICAg ICAgICAgIGRlYnVnKEYxMTAsInNzbF9odHRwX2luaXQgdW5hYmxlIHRvIGxvYWQgZGlyIixwYXRo LDApOworICAgICAgICAgICAgaWYgKHNzbF9kZWJ1Z19mbGFnKQorICAgICAgICAgICAgICAgIHBy aW50ZigiP1VuYWJsZSB0byBsb2FkIGNybC1kaXI6ICVzXHJcbiIscGF0aCk7CisgICAgICAgIH0K KyNpZmRlZiBOVAorICAgICAgICBja21ha21zZyhwYXRoLENLTUFYUEFUSCxHZXRBcHBEYXRhKDEp LCJrZXJtaXQgOTUvY3JscyIsTlVMTCxOVUxMKTsKKyAgICAgICAgaWYgKFg1MDlfU1RPUkVfbG9h ZF9sb2NhdGlvbnMoY3JsX3N0b3JlLE5VTEwscGF0aCkgPT0gMCkgeworICAgICAgICAgICAgZGVi dWcoRjExMCwic3NsX2h0dHBfaW5pdCB1bmFibGUgdG8gbG9hZCBkaXIiLHBhdGgsMCk7CisgICAg ICAgICAgICBpZiAoc3NsX2RlYnVnX2ZsYWcpCisgICAgICAgICAgICAgICAgcHJpbnRmKCI/VW5h YmxlIHRvIGxvYWQgY3JsLWRpcjogJXNcclxuIixwYXRoKTsKKyAgICAgICAgfQorICAgICAgICBj a21ha21zZyhwYXRoLENLTUFYUEFUSCxHZXRBcHBEYXRhKDApLCJrZXJtaXQgOTUvY3JscyIsTlVM TCxOVUxMKTsKKyAgICAgICAgaWYgKFg1MDlfU1RPUkVfbG9hZF9sb2NhdGlvbnMoY3JsX3N0b3Jl LE5VTEwscGF0aCkgPT0gMCkgeworICAgICAgICAgICAgZGVidWcoRjExMCwic3NsX2h0dHBfaW5p dCB1bmFibGUgdG8gbG9hZCBkaXIiLHBhdGgsMCk7CisgICAgICAgICAgICBpZiAoc3NsX2RlYnVn X2ZsYWcpCisgICAgICAgICAgICAgICAgcHJpbnRmKCI/VW5hYmxlIHRvIGxvYWQgY3JsLWRpcjog JXNcclxuIixwYXRoKTsKKyAgICAgICAgfQorI2VuZGlmIC8qIE5UICovCisgICAgICAgIAorICAg ICAgICBja21ha21zZyhwYXRoLENLTUFYUEFUSCxleGVkaXIsImNhX2NybHMucGVtIixOVUxMLE5V TEwpOworICAgICAgICBpZiAoWDUwOV9TVE9SRV9sb2FkX2xvY2F0aW9ucyhjcmxfc3RvcmUscGF0 aCxOVUxMKSA9PSAwKSB7CisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJzc2xfaHR0cF9pbml0IHVu YWJsZSB0byBsb2FkIGZpbGUiLHBhdGgsMCk7CisgICAgICAgICAgICBpZiAoc3NsX2RlYnVnX2Zs YWcpCisgICAgICAgICAgICAgICAgcHJpbnRmKCI/VW5hYmxlIHRvIGxvYWQgY3JsLWZpbGU6ICVz XHJcbiIscGF0aCk7CisgICAgICAgIH0KKyNpZmRlZiBOVAorICAgICAgICBja21ha21zZyhwYXRo LENLTUFYUEFUSCxHZXRBcHBEYXRhKDEpLCJrZXJtaXQgOTUvY2FfY3Jscy5wZW0iLE5VTEwsTlVM TCk7CisgICAgICAgIGlmIChYNTA5X1NUT1JFX2xvYWRfbG9jYXRpb25zKGNybF9zdG9yZSxwYXRo LE5VTEwpID09IDApIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMTAsInNzbF9odHRwX2luaXQgdW5h YmxlIHRvIGxvYWQgZmlsZSIscGF0aCwwKTsKKyAgICAgICAgICAgIGlmIChzc2xfZGVidWdfZmxh ZykKKyAgICAgICAgICAgICAgICBwcmludGYoIj9VbmFibGUgdG8gbG9hZCBjcmwtZmlsZTogJXNc clxuIixwYXRoKTsKKyAgICAgICAgfQorICAgICAgICBja21ha21zZyhwYXRoLENLTUFYUEFUSCxH ZXRBcHBEYXRhKDApLCJrZXJtaXQgOTUvY2FfY3Jscy5wZW0iLE5VTEwsTlVMTCk7CisgICAgICAg IGlmIChYNTA5X1NUT1JFX2xvYWRfbG9jYXRpb25zKGNybF9zdG9yZSxwYXRoLE5VTEwpID09IDAp IHsKKyAgICAgICAgICAgIGRlYnVnKEYxMTAsInNzbF9odHRwX2luaXQgdW5hYmxlIHRvIGxvYWQg ZmlsZSIscGF0aCwwKTsKKyAgICAgICAgICAgIGlmIChzc2xfZGVidWdfZmxhZykKKyAgICAgICAg ICAgICAgICBwcmludGYoIj9VbmFibGUgdG8gbG9hZCBjcmwtZmlsZTogJXNcclxuIixwYXRoKTsK KyAgICAgICAgfQorI2VuZGlmIC8qIE5UICovCisjZW5kaWYgLyogT1MyICovCisKKyAgICAgICAg aWYgKHNzbF9jcmxfZmlsZSB8fCBzc2xfY3JsX2RpcikgeworICAgICAgICAgICAgaWYgKHNzbF9j cmxfZmlsZSAmJgorICAgICAgICAgICAgICAgIFg1MDlfU1RPUkVfbG9hZF9sb2NhdGlvbnMoY3Js X3N0b3JlLHNzbF9jcmxfZmlsZSxOVUxMKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgZGVidWco RjExMCwic3NsX2h0dHBfaW5pdCB1bmFibGUgdG8gbG9hZCBzc2xfY3JsX2ZpbGUiLHNzbF9jcmxf ZmlsZSwwKTsKKyAgICAgICAgICAgICAgICBpZiAoc3NsX2RlYnVnX2ZsYWcpCisgICAgICAgICAg ICAgICAgICAgIHByaW50ZigiP1VuYWJsZSB0byBsb2FkIGNybC1maWxlOiAlc1xyXG4iLHNzbF9j cmxfZmlsZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc3NsX2NybF9kaXIgJiYK KyAgICAgICAgICAgICAgICBYNTA5X1NUT1JFX2xvYWRfbG9jYXRpb25zKGNybF9zdG9yZSxOVUxM LHNzbF9jcmxfZGlyKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgZGVidWcoRjExMCwic3NsX2h0 dHBfaW5pdCB1bmFibGUgdG8gbG9hZCBzc2xfY3JsX2RpciIsc3NsX2NybF9kaXIsMCk7CisgICAg ICAgICAgICAgICAgaWYgKHNzbF9kZWJ1Z19mbGFnKQorICAgICAgICAgICAgICAgICAgICBwcmlu dGYoIj9VbmFibGUgdG8gbG9hZCBjcmwtZGlyOiAlc1xyXG4iLHNzbF9jcmxfZGlyKTsKKyAgICAg ICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFg1MDlfU1RPUkVfc2V0X2Rl ZmF1bHRfcGF0aHMoY3JsX3N0b3JlKTsKKyAgICAgICAgfQorICAgIH0KKworI2lmbmRlZiBDT01N RU5UCisgICAgdGxzX2NvbnggPSB0bHNfaHR0cF9jb247CisgICAgdGxzX2h0dHBfY29uPShTU0wg KilTU0xfbmV3KHRsc19odHRwX2N0eCk7CisgICAgaWYgKCAhdGxzX2h0dHBfY29uICkgeworICAg ICAgICBkZWJ1ZyhGMTEwLCJzc2xfaHR0cF9pbml0IiwiU1NMX25ldyh0bHNfaHR0cF9jb24pIGZh aWxlZCIsMCk7CisgICAgICAgIHRsc19odHRwX2NvbiA9IHRsc19jb254OworICAgICAgICByZXR1 cm4oMCk7CisgICAgfQorICAgIGlmICh0bHNfY29ueCkgeworICAgICAgICBTU0xfc2V0X3Nlc3Np b24odGxzX2h0dHBfY29uLCBTU0xfZ2V0X3Nlc3Npb24odGxzX2NvbngpKTsKKyNpZmRlZiBTU0xf S1JCNQorCQlpZiAodGxzX2NvbngtPmtzc2xfY3R4KSB7CisJCQlrc3NsX2N0eF9mcmVlKHRsc19j b254LT5rc3NsX2N0eCk7CisJCQl0bHNfY29ueC0+a3NzbF9jdHggPSBOVUxMOworCQl9CisjZW5k aWYgLyogU1NMX0tSQjUgKi8KKyAgICAgICAgU1NMX2ZyZWUodGxzX2NvbngpOworICAgICAgICB0 bHNfY29ueCA9IE5VTEw7CisgICAgfQorI2Vsc2UgLyogQ09NTUVOVCAqLworICAgIC8qIEkgZG9u J3Qga25vdyB3aHkgdGhpcyBkb2VzIG5vdCB3b3JrIHRvIHJldXNlIHRoZSBjb25uZWN0aW9uLiAq LworICAgIGlmICggdGxzX2h0dHBfY29uICkgeworICAgICAgICBTU0xfY2xlYXIodGxzX2h0dHBf Y29uKTsKKyAgICAgICAgU1NMX3NldF9zZXNzaW9uKHRsc19odHRwX2NvbixOVUxMKTsKKyAgICAg ICAgU1NMX3NldF9hY2NlcHRfc3RhdGUodGxzX2h0dHBfY29uKSA7CisgICAgfSBlbHNlIHsKKyAg ICAgICAgdGxzX2h0dHBfY29uPShTU0wgKilTU0xfbmV3KHRsc19odHRwX2N0eCk7CisgICAgICAg IGlmICggIXRsc19odHRwX2NvbiApIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMTAsInNzbF9odHRw X2luaXQiLCJTU0xfbmV3KHRsc19odHRwX2N0eCkgZmFpbGVkIiwwKTsKKyAgICAgICAgICAgIHRs c19odHRwX2NvbiA9IHRsc19jb254OworICAgICAgICAgICAgcmV0dXJuKDApOworICAgICAgICB9 CisgICAgfQorI2VuZGlmIC8qIENPTU1FTlQgKi8KKworI2lmZGVmIFNTTF9LUkI1CisjaWZuZGVm IEtSQjVfU0VSVklDRV9OQU1FCisjZGVmaW5lIEtSQjVfU0VSVklDRV9OQU1FICAgICJob3N0Igor I2VuZGlmCisKKyAgICBpZiAodGxzX2h0dHBfY29uLT5rc3NsX2N0eCA9PSBOVUxMKQorICAgIHRs c19odHRwX2Nvbi0+a3NzbF9jdHggPSBrc3NsX2N0eF9uZXcoKTsKKyAgICBpZiAodGxzX2h0dHBf Y29uLT5rc3NsX2N0eCAhPSBOVUxMKQorICAgICAgICBrc3NsX2N0eF9zZXRzdHJpbmcodGxzX2h0 dHBfY29uLT5rc3NsX2N0eCwgS1NTTF9TRVJWRVIsIGhvc3RuYW1lKTsKKworICAgIGtzc2xfY3R4 X3NldHN0cmluZyh0bHNfaHR0cF9jb24tPmtzc2xfY3R4LCBLU1NMX1NFUlZJQ0UsCisgICAgICAg ICAgICAgICAgICAgICAgICBrcmI1X2Rfc3J2ID8ga3JiNV9kX3NydiA6IEtSQjVfU0VSVklDRV9O QU1FKTsKKyNlbmRpZiAvKiBTU0xfS1JCNSAqLworCisgICAgaWYgKHNzbF9jaXBoZXJfbGlzdCkK KyAgICAgICAgU1NMX3NldF9jaXBoZXJfbGlzdCh0bHNfaHR0cF9jb24sc3NsX2NpcGhlcl9saXN0 KTsKKyAgICBlbHNlIHsKKyAgICAgICAgY2hhciAqIHA7CisgICAgICAgIGlmIChwID0gZ2V0ZW52 KCJTU0xfQ0lQSEVSIikpIHsKKyAgICAgICAgICAgIFNTTF9zZXRfY2lwaGVyX2xpc3QodGxzX2h0 dHBfY29uLHApOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgU1NMX3NldF9jaXBoZXJf bGlzdCh0bHNfaHR0cF9jb24sREVGQVVMVF9DSVBIRVJfTElTVCk7CisgICAgICAgIH0KKyAgICB9 CisKKyAgICBzc2xfdmVyaWZ5X2RlcHRoID0gLTE7CisKKyAgICBpZiAoIHNzbF9kZWJ1Z19mbGFn ICkKKyAgICAgICAgcHJpbnRmKCJTU0wvVExTIGluaXQgZG9uZSFcclxuIik7CisKKyAgICBzc2xf aHR0cF9pbml0aWFsaXplZCA9IDE7CisgICAgcmV0dXJuKDEpOworfQorI2VuZGlmIC8qIE5PSFRU UCAqLworCitjaGFyICoKK3NzbF9nZXRfZE5TTmFtZShzc2wpIFNTTCAqIHNzbDsKK3sKKyAgICBz dGF0aWMgY2hhciAqZG5zID0gTlVMTDsKKyAgICBYNTA5ICpzZXJ2ZXJfY2VydCA9IE5VTEw7Cisg ICAgaW50IGk7CisgICAgWDUwOV9FWFRFTlNJT04gKmV4dCA9IE5VTEw7CisgICAgU1RBQ0tfT0Yo R0VORVJBTF9OQU1FKSAqaWFsdCA9IE5VTEw7CisgICAgR0VORVJBTF9OQU1FICpnZW4gPSBOVUxM OworCisgICAgaWYgKCBkbnMgKSB7CisgICAgICAgIGZyZWUoZG5zKTsKKyAgICAgICAgZG5zID0g TlVMTDsKKyAgICB9CisKKyAgICBpZiAoc2VydmVyX2NlcnQgPSBTU0xfZ2V0X3BlZXJfY2VydGlm aWNhdGUoc3NsKSkgeworICAgICAgICBpZiAoKGkgPSBYNTA5X2dldF9leHRfYnlfTklEKHNlcnZl cl9jZXJ0LCBOSURfc3ViamVjdF9hbHRfbmFtZSwgLTEpKTwwKQorICAgICAgICAgICAgcmV0dXJu IE5VTEw7CisgICAgICAgIGlmICghKGV4dCA9IFg1MDlfZ2V0X2V4dChzZXJ2ZXJfY2VydCwgaSkp KQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIFg1MDlWM19hZGRfc3RhbmRhcmRf ZXh0ZW5zaW9ucygpOworICAgICAgICBpZiAoIShpYWx0ID0gWDUwOVYzX0VYVF9kMmkoZXh0KSkp CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IHNrX0dF TkVSQUxfTkFNRV9udW0oaWFsdCk7IGkrKykgeworICAgICAgICAgICAgZ2VuID0gc2tfR0VORVJB TF9OQU1FX3ZhbHVlKGlhbHQsIGkpOworICAgICAgICAgICAgaWYgKGdlbi0+dHlwZSA9PSBHRU5f RE5TKSB7CisgICAgICAgICAgICAgICAgaWYgKCFnZW4tPmQuaWE1IHx8ICFnZW4tPmQuaWE1LT5s ZW5ndGgpCisJCSAgYnJlYWs7CisgICAgICAgICAgICAgICAgaWYgKHN0cmxlbigoY2hhciAqKWdl bi0+ZC5pYTUtPmRhdGEpICE9IGdlbi0+ZC5pYTUtPmxlbmd0aCkgeworICAgICAgICAgICAgICAg ICAgICAvKiBJZ25vcmluZyBJQTVTdHJpbmcgY29udGFpbmluZyBudWxsIGNoYXJhY3RlciAqLwor ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgICAgZG5zID0gbWFsbG9jKGdlbi0+ZC5pYTUtPmxlbmd0aCArIDEpOworICAgICAgICAg ICAgICAgIGlmIChkbnMpIHsKKyAgICAgICAgICAgICAgICAgICAgbWVtY3B5KGRucywgZ2VuLT5k LmlhNS0+ZGF0YSwgZ2VuLT5kLmlhNS0+bGVuZ3RoKTsKKyAgICAgICAgICAgICAgICAgICAgZG5z W2dlbi0+ZC5pYTUtPmxlbmd0aF0gPSAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBYNTA5VjNfRVhU X2NsZWFudXAoKTsKKyAgICB9CitjbGVhbnVwOgorICAgIGlmIChpYWx0KSAgICAgICAgICAgc2tf R0VORVJBTF9OQU1FX2ZyZWUoaWFsdCk7CisgICAgaWYgKHNlcnZlcl9jZXJ0KSAgICBYNTA5X2Zy ZWUoc2VydmVyX2NlcnQpOworICAgIHJldHVybiBkbnM7Cit9CisKK2NoYXIgKgorc3NsX2dldF9j b21tb25OYW1lKHNzbCkgU1NMICogc3NsOyB7CisgICAgc3RhdGljIGNoYXIgbmFtZVsyNTZdOwor ICAgIGludCBuYW1lX3RleHRfbGVuOworICAgIGludCBlcnI7CisgICAgWDUwOSAqc2VydmVyX2Nl cnQ7CisKKyAgICBuYW1lX3RleHRfbGVuID0gMDsKKyAgICBpZiAoc2VydmVyX2NlcnQgPSBTU0xf Z2V0X3BlZXJfY2VydGlmaWNhdGUoc3NsKSkgeworICAgICAgICBuYW1lX3RleHRfbGVuID0KKwkg ICAgWDUwOV9OQU1FX2dldF90ZXh0X2J5X05JRChYNTA5X2dldF9zdWJqZWN0X25hbWUoc2VydmVy X2NlcnQpLAorCQkJCSAgICAgIE5JRF9jb21tb25OYW1lLCBuYW1lLCBzaXplb2YobmFtZSkpOwor ICAgICAgICBYNTA5X2ZyZWUoc2VydmVyX2NlcnQpOworICAgIH0KKyAgICBpZiAobmFtZV90ZXh0 X2xlbiA8PSAwKSB7CisJLyogQ29tbW9uIE5hbWUgd2FzIGVtcHR5IG9yIG5vdCByZXRyaWV2ZWQg Ki8KKyAgICAgICAgZXJyID0gMDsKKyAgICB9IGVsc2UgaWYgKHN0cmxlbihuYW1lKSAhPSBuYW1l X3RleHRfbGVuKSB7CisgICAgICAgIC8qIElnbm9yaW5nIENvbW1vbiBOYW1lIGNvbnRhaW5pbmcg bnVsbCBjaGFyYWN0ZXIgKi8KKwllcnIgPSAwOworICAgIH0gZWxzZSB7CisJZXJyID0gMTsKKyAg ICB9CisgICAgaWYgKGVyciA+IDApCisgICAgICByZXR1cm4gbmFtZTsKKyAgICBlbHNlCisgICAg ICByZXR1cm4gTlVMTDsKK30KKworY2hhciAqCitzc2xfZ2V0X2lzc3Vlcl9uYW1lKHNzbCkgU1NM ICogc3NsOworeworICAgIHN0YXRpYyBjaGFyIG5hbWVbMjU2XTsKKyAgICBYNTA5ICpzZXJ2ZXJf Y2VydDsKKworICAgIG5hbWVbMF0gPSAnXDAnOworICAgIGlmIChzZXJ2ZXJfY2VydCA9IFNTTF9n ZXRfcGVlcl9jZXJ0aWZpY2F0ZShzc2wpKSB7CisgICAgICAgIFg1MDlfTkFNRV9vbmVsaW5lKFg1 MDlfZ2V0X2lzc3Vlcl9uYW1lKHNlcnZlcl9jZXJ0KSxuYW1lLHNpemVvZihuYW1lKSk7CisgICAg ICAgIFg1MDlfZnJlZShzZXJ2ZXJfY2VydCk7CisgICAgICAgIHJldHVybiBuYW1lOworICAgIH0K KyAgICBlbHNlIHsKKyNpZmRlZiBDT01NRU5UCisgICAgICBmcHJpbnRmKHN0ZGVyciwgIldhcm5p bmc6IE5vIGNlcnRpZmljYXRlIGZyb20gc2VydmVyIVxyXG4iKTsKKyNlbmRpZiAvKiBDT01NRU5U ICovCisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KK30KKworY2hhciAqCitzc2xfZ2V0X3N1 YmplY3RfbmFtZShzc2wpIFNTTCAqIHNzbDsKK3sKKyAgICBzdGF0aWMgY2hhciBuYW1lWzI1Nl07 CisgICAgWDUwOSAqc2VydmVyX2NlcnQ7CisKKyAgICBuYW1lWzBdID0gJ1wwJzsKKyAgICBpZiAo c2VydmVyX2NlcnQgPSBTU0xfZ2V0X3BlZXJfY2VydGlmaWNhdGUoc3NsKSkgeworICAgICAgIFg1 MDlfTkFNRV9vbmVsaW5lKFg1MDlfZ2V0X3N1YmplY3RfbmFtZShzZXJ2ZXJfY2VydCksbmFtZSxz aXplb2YobmFtZSkpOworICAgICAgIFg1MDlfZnJlZShzZXJ2ZXJfY2VydCk7CisgICAgICAgcmV0 dXJuIG5hbWU7CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIE5VTEw7Cit9CisKKyNp ZmRlZiBDT01NRU5UCisjaWZkZWYgQ0tfU1NMCisgICAgICAgICAgICAmJiAhKGNrX3NzbGVheV9p c19pbnN0YWxsZWQoKSAmJgorICAgICAgICAgICAgICAgKHRsc19hY3RpdmVfZmxhZyB8fCBzc2xf YWN0aXZlX2ZsYWcpICYmCisgICAgICAgICAgICAgICBzc2xfYW5vbnltb3VzX2NpcGhlcih0bHNf YWN0aXZlX2ZsYWc/dGxzX2Nvbjpzc2xfY29uKSkKKyNlbmRpZiAvKiBDS19TU0wgKi8KKworaW50 Citzc2xfYW5vbnltb3VzX2NpcGhlcihzc2wpIFNTTCAqIHNzbDsKK3sKKyAgICBYNTA5ICogY2Vy dDsKKworICAgIGlmIChzc3RlbG5ldCkKKyAgICAgICAgY2VydCA9IFNTTF9nZXRfY2VydGlmaWNh dGUoc3NsKTsKKyAgICBlbHNlCisgICAgICAgIGNlcnQgPSBTU0xfZ2V0X3BlZXJfY2VydGlmaWNh dGUoc3NsKTsKKworICAgIGlmICggY2VydCApIHsKKyAgICAgICAgWDUwOV9mcmVlKGNlcnQpOwor ICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIDE7Cit9CisjZW5kaWYgLyogQ09N TUVOVCAqLworCisvKgorICBUaGlzIG9uZSBpcyAodmVyeSBtdWNoISkgYmFzZWQgb24gd29yayBi eQorICBSYWxmIFMuIEVuZ2Vsc2NoYWxsIDxyc2VAZW5nZWxzY2hhbGwuY29tPi4KKyAgQ29tbWVu dHMgYnkgUmFsZi4KKyovCitpbnQKK3NzbF92ZXJpZnlfY3JsKGludCBvaywgWDUwOV9TVE9SRV9D VFggKmN0eCkKK3sKKyAgICBYNTA5X09CSkVDVCBvYmo7CisgICAgWDUwOV9OQU1FICpzdWJqZWN0 ID0gTlVMTDsKKyAgICBYNTA5X05BTUUgKmlzc3VlciA9IE5VTEw7CisgICAgWDUwOSAqeHMgPSBO VUxMOworICAgIFg1MDlfQ1JMICpjcmwgPSBOVUxMOworICAgIFg1MDlfUkVWT0tFRCAqcmV2b2tl ZCA9IE5VTEw7CisgICAgWDUwOV9TVE9SRV9DVFggKiBzdG9yZV9jdHggPSBOVUxMOworICAgIGxv bmcgc2VyaWFsOworICAgIEJJTyAqYmlvID0gTlVMTDsKKyAgICBpbnQgaSwgbiwgcmM7CisgICAg Y2hhciAqY3A7CisgICAgY2hhciAqY3AyOworCisgICAgLyoKKyAgICAgKiBVbmxlc3MgYSByZXZv Y2F0aW9uIHN0b3JlIGZvciBDUkxzIHdhcyBjcmVhdGVkIHdlCisgICAgICogY2Fubm90IGRvIGFu eSBDUkwtYmFzZWQgdmVyaWZpY2F0aW9uLCBvZiBjb3Vyc2UuCisgICAgICovCisgICAgaWYgKCFj cmxfc3RvcmUpCisgICAgICAgIHJldHVybiBvazsKKworICAgIHN0b3JlX2N0eCA9IFg1MDlfU1RP UkVfQ1RYX25ldygpOworICAgIGlmICggIXN0b3JlX2N0eCApCisgICAgICAgIHJldHVybihvayk7 CisKKyAgICAvKgorICAgICAqIERldGVybWluZSBjZXJ0aWZpY2F0ZSBpbmdyZWRpZW50cyBpbiBh ZHZhbmNlCisgICAgICovCisgICAgeHMgICAgICA9IFg1MDlfU1RPUkVfQ1RYX2dldF9jdXJyZW50 X2NlcnQoY3R4KTsKKyAgICBzdWJqZWN0ID0gWDUwOV9nZXRfc3ViamVjdF9uYW1lKHhzKTsKKyAg ICBpc3N1ZXIgID0gWDUwOV9nZXRfaXNzdWVyX25hbWUoeHMpOworCisgICAgLyoKKyAgICAgKiBP cGVuU1NMIHByb3ZpZGVzIHRoZSBnZW5lcmFsIG1lY2hhbmlzbSB0byBkZWFsIHdpdGggQ1JMcyBi dXQgZG9lcyBub3QKKyAgICAgKiB1c2UgdGhlbSBhdXRvbWF0aWNhbGx5IHdoZW4gdmVyaWZ5aW5n IGNlcnRpZmljYXRlcywgc28gd2UgZG8gaXQKKyAgICAgKiBleHBsaWNpdGx5IGhlcmUuIFdlIHdp bGwgY2hlY2sgdGhlIENSTCBmb3IgdGhlIGN1cnJlbnRseSBjaGVja2VkCisgICAgICogY2VydGlm aWNhdGUsIGlmIHRoZXJlIGlzIHN1Y2ggYSBDUkwgaW4gdGhlIHN0b3JlLgorICAgICAqCisgICAg ICogV2UgY29tZSB0aHJvdWdoIHRoaXMgcHJvY2VkdXJlIGZvciBlYWNoIGNlcnRpZmljYXRlIGlu IHRoZSBjZXJ0aWZpY2F0ZQorICAgICAqIGNoYWluLCBzdGFydGluZyB3aXRoIHRoZSByb290LUNB J3MgY2VydGlmaWNhdGUuIEF0IGVhY2ggc3RlcCB3ZSd2ZSB0bworICAgICAqIGJvdGggdmVyaWZ5 IHRoZSBzaWduYXR1cmUgb24gdGhlIENSTCAodG8gbWFrZSBzdXJlIGl0J3MgYSB2YWxpZCBDUkwp CisgICAgICogYW5kIGl0J3MgcmV2b2NhdGlvbiBsaXN0ICh0byBtYWtlIHN1cmUgdGhlIGN1cnJl bnQgY2VydGlmaWNhdGUgaXNuJ3QKKyAgICAgKiByZXZva2VkKS4gIEJ1dCBiZWNhdXNlIHRvIGNo ZWNrIHRoZSBzaWduYXR1cmUgb24gdGhlIENSTCB3ZSBuZWVkIHRoZQorICAgICAqIHB1YmxpYyBr ZXkgb2YgdGhlIGlzc3VpbmcgQ0EgY2VydGlmaWNhdGUgKHdoaWNoIHdhcyBhbHJlYWR5IHByb2Nl c3NlZAorICAgICAqIG9uZSByb3VuZCBiZWZvcmUpLCB3ZSd2ZSBhIGxpdHRsZSBwcm9ibGVtLiBC dXQgd2UgY2FuIGJvdGggc29sdmUgaXQgYW5kCisgICAgICogYXQgdGhlIHNhbWUgdGltZSBvcHRp bWl6ZSB0aGUgcHJvY2Vzc2luZyBieSB1c2luZyB0aGUgZm9sbG93aW5nCisgICAgICogdmVyaWZp Y2F0aW9uIHNjaGVtZSAoaWRlYSBhbmQgY29kZSBzbmlwcGV0cyBib3Jyb3dlZCBmcm9tIHRoZSBH TE9CVVMKKyAgICAgKiBwcm9qZWN0KToKKyAgICAgKgorICAgICAqIDEuIFdlJ2xsIGNoZWNrIHRo ZSBzaWduYXR1cmUgb2YgYSBDUkwgaW4gZWFjaCBzdGVwIHdoZW4gd2UgZmluZCBhIENSTAorICAg ICAqICAgIHRocm91Z2ggdGhlIF9zdWJqZWN0XyBuYW1lIG9mIHRoZSBjdXJyZW50IGNlcnRpZmlj YXRlLiBUaGlzIENSTAorICAgICAqICAgIGl0c2VsZiB3aWxsIGJlIG5lZWRlZCB0aGUgZmlyc3Qg dGltZSBpbiB0aGUgbmV4dCByb3VuZCwgb2YgY291cnNlLgorICAgICAqICAgIEJ1dCB3ZSBkbyB0 aGUgc2lnbmF0dXJlIHByb2Nlc3Npbmcgb25lIHJvdW5kIGJlZm9yZSB0aGlzIHdoZXJlIHRoZQor ICAgICAqICAgIHB1YmxpYyBrZXkgb2YgdGhlIENBIGlzIGF2YWlsYWJsZS4KKyAgICAgKgorICAg ICAqIDIuIFdlJ2xsIGNoZWNrIHRoZSByZXZvY2F0aW9uIGxpc3Qgb2YgYSBDUkwgaW4gZWFjaCBz dGVwIHdoZW4KKyAgICAgKiAgICB3ZSBmaW5kIGEgQ1JMIHRocm91Z2ggdGhlIF9pc3N1ZXJfIG5h bWUgb2YgdGhlIGN1cnJlbnQgY2VydGlmaWNhdGUuCisgICAgICogICAgVGhpcyBDUkxzIHNpZ25h dHVyZSB3YXMgdGhlbiBhbHJlYWR5IHZlcmlmaWVkIG9uZSByb3VuZCBiZWZvcmUuCisgICAgICoK KyAgICAgKiBUaGlzIHZlcmlmaWNhdGlvbiBzY2hlbWUgYWxsb3dzIGEgQ0EgdG8gcmV2b2tlIGl0 cyBvd24gY2VydGlmaWNhdGUgYXMKKyAgICAgKiB3ZWxsLCBvZiBjb3Vyc2UuCisgICAgICovCisK KyAgICAvKgorICAgICAqIFRyeSB0byByZXRyaWV2ZSBhIENSTCBjb3JyZXNwb25kaW5nIHRvIHRo ZSBfc3ViamVjdF8gb2YKKyAgICAgKiB0aGUgY3VycmVudCBjZXJ0aWZpY2F0ZSBpbiBvcmRlciB0 byB2ZXJpZnkgaXQncyBpbnRlZ3JpdHkuCisgICAgICovCisgICAgbWVtc2V0KChjaGFyICopJm9i aiwgMCwgc2l6ZW9mKG9iaikpOworICAgIFg1MDlfU1RPUkVfQ1RYX2luaXQoc3RvcmVfY3R4LCBj cmxfc3RvcmUsIE5VTEwsIE5VTEwpOworICAgIHJjID0gWDUwOV9TVE9SRV9nZXRfYnlfc3ViamVj dChzdG9yZV9jdHgsIFg1MDlfTFVfQ1JMLCBzdWJqZWN0LCAmb2JqKTsKKyAgICBYNTA5X1NUT1JF X0NUWF9jbGVhbnVwKHN0b3JlX2N0eCk7CisgICAgY3JsID0gb2JqLmRhdGEuY3JsOworICAgIGlm IChyYyA+IDAgJiYgY3JsICE9IE5VTEwpIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogVmVyaWZ5 IHRoZSBzaWduYXR1cmUgb24gdGhpcyBDUkwKKyAgICAgICAgICovCisgICAgICAgIGlmIChYNTA5 X0NSTF92ZXJpZnkoY3JsLCBYNTA5X2dldF9wdWJrZXkoeHMpKSA8PSAwKSB7CisgICAgICAgICAg ICBmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgc2lnbmF0dXJlIG9uIENSTCFcbiIpOworICAgICAg ICAgICAgWDUwOV9TVE9SRV9DVFhfc2V0X2Vycm9yKGN0eCwgWDUwOV9WX0VSUl9DUkxfU0lHTkFU VVJFX0ZBSUxVUkUpOworICAgICAgICAgICAgWDUwOV9PQkpFQ1RfZnJlZV9jb250ZW50cygmb2Jq KTsKKyAgICAgICAgICAgIFg1MDlfU1RPUkVfQ1RYX2ZyZWUoc3RvcmVfY3R4KTsKKyAgICAgICAg ICAgIHJldHVybiAwOworICAgICAgICB9CisKKyAgICAgICAgLyoKKyAgICAgICAgICogQ2hlY2sg ZGF0ZSBvZiBDUkwgdG8gbWFrZSBzdXJlIGl0J3Mgbm90IGV4cGlyZWQKKyAgICAgICAgICovCisg ICAgICAgIGkgPSBYNTA5X2NtcF9jdXJyZW50X3RpbWUoWDUwOV9DUkxfZ2V0X25leHRVcGRhdGUo Y3JsKSk7CisgICAgICAgIGlmIChpID09IDApIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJy LCAiRm91bmQgQ1JMIGhhcyBpbnZhbGlkIG5leHRVcGRhdGUgZmllbGQuXG4iKTsKKyAgICAgICAg ICAgIFg1MDlfU1RPUkVfQ1RYX3NldF9lcnJvcihjdHgsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBYNTA5X1ZfRVJSX0VSUk9SX0lOX0NSTF9ORVhUX1VQREFURV9GSUVMRCk7 CisgICAgICAgICAgICBYNTA5X09CSkVDVF9mcmVlX2NvbnRlbnRzKCZvYmopOworICAgICAgICAg ICAgWDUwOV9TVE9SRV9DVFhfZnJlZShzdG9yZV9jdHgpOworICAgICAgICAgICAgcmV0dXJuIDA7 CisgICAgICAgIH0KKyAgICAgICAgaWYgKGkgPCAwKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0 ZGVyciwKKyJGb3VuZCBDUkwgaXMgZXhwaXJlZCAtIHJldm9raW5nIGFsbCBjZXJ0aWZpY2F0ZXMg dW50aWwgeW91IGdldCB1cGRhdGVkIENSTC5cbiIKKyAgICAgICAgICAgICAgICAgICAgKTsKKyAg ICAgICAgICAgIFg1MDlfU1RPUkVfQ1RYX3NldF9lcnJvcihjdHgsIFg1MDlfVl9FUlJfQ1JMX0hB U19FWFBJUkVEKTsKKyAgICAgICAgICAgIFg1MDlfT0JKRUNUX2ZyZWVfY29udGVudHMoJm9iaik7 CisgICAgICAgICAgICBYNTA5X1NUT1JFX0NUWF9mcmVlKHN0b3JlX2N0eCk7CisgICAgICAgICAg ICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICBYNTA5X09CSkVDVF9mcmVlX2NvbnRlbnRz KCZvYmopOworICAgIH0KKworICAgIC8qCisgICAgICogVHJ5IHRvIHJldHJpZXZlIGEgQ1JMIGNv cnJlc3BvbmRpbmcgdG8gdGhlIF9pc3N1ZXJfIG9mCisgICAgICogdGhlIGN1cnJlbnQgY2VydGlm aWNhdGUgaW4gb3JkZXIgdG8gY2hlY2sgZm9yIHJldm9jYXRpb24uCisgICAgICovCisgICAgbWVt c2V0KChjaGFyICopJm9iaiwgMCwgc2l6ZW9mKG9iaikpOworICAgIFg1MDlfU1RPUkVfQ1RYX2lu aXQoc3RvcmVfY3R4LCBjcmxfc3RvcmUsIE5VTEwsIE5VTEwpOworICAgIHJjID0gWDUwOV9TVE9S RV9nZXRfYnlfc3ViamVjdChzdG9yZV9jdHgsIFg1MDlfTFVfQ1JMLCBpc3N1ZXIsICZvYmopOwor ICAgIFg1MDlfU1RPUkVfQ1RYX2ZyZWUoc3RvcmVfY3R4KTsJCS8qIGNhbGxzIFg1MDlfU1RPUkVf Q1RYX2NsZWFudXAoKSAqLworICAgIGNybCA9IG9iai5kYXRhLmNybDsKKyAgICBpZiAocmMgPiAw ICYmIGNybCAhPSBOVUxMKSB7CisgICAgICAgIC8qCisgICAgICAgICAqIENoZWNrIGlmIHRoZSBj dXJyZW50IGNlcnRpZmljYXRlIGlzIHJldm9rZWQgYnkgdGhpcyBDUkwKKyAgICAgICAgICovCisg ICAgICAgIG4gPSBza19YNTA5X1JFVk9LRURfbnVtKFg1MDlfQ1JMX2dldF9SRVZPS0VEKGNybCkp OworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisgICAgICAgICAgICByZXZva2Vk ID0gc2tfWDUwOV9SRVZPS0VEX3ZhbHVlKFg1MDlfQ1JMX2dldF9SRVZPS0VEKGNybCksIGkpOwor ICAgICAgICAgICAgaWYgKEFTTjFfSU5URUdFUl9jbXAocmV2b2tlZC0+c2VyaWFsTnVtYmVyLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWDUwOV9nZXRfc2VyaWFsTnVtYmVyKHhz KSkgPT0gMCkgeworCisgICAgICAgICAgICAgICAgc2VyaWFsID0gQVNOMV9JTlRFR0VSX2dldChy ZXZva2VkLT5zZXJpYWxOdW1iZXIpOworICAgICAgICAgICAgICAgIGNwID0gWDUwOV9OQU1FX29u ZWxpbmUoaXNzdWVyLCBOVUxMLCAwKTsKKyAgICAgICAgICAgICAgICBmcmVlKGNwKTsKKworICAg ICAgICAgICAgICAgIFg1MDlfU1RPUkVfQ1RYX3NldF9lcnJvcihjdHgsIFg1MDlfVl9FUlJfQ0VS VF9SRVZPS0VEKTsKKyAgICAgICAgICAgICAgICBYNTA5X09CSkVDVF9mcmVlX2NvbnRlbnRzKCZv YmopOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICB9 CisgICAgICAgIFg1MDlfT0JKRUNUX2ZyZWVfY29udGVudHMoJm9iaik7CisgICAgfQorICAgIHJl dHVybiBvazsKK30KKworY2hhciAqCit0bHNfdXNlcmlkX2Zyb21fY2xpZW50X2NlcnQoc3NsKSBT U0wgKiBzc2w7Cit7CisgICAgc3RhdGljIGNoYXIgY25bMjU2XTsKKyAgICBzdGF0aWMgY2hhciAq ciA9IGNuOworICAgIGludCBlcnI7CisgICAgWDUwOSAqY2xpZW50X2NlcnQ7CisKKyAgICBpZiAo Y2xpZW50X2NlcnQgPSBTU0xfZ2V0X3BlZXJfY2VydGlmaWNhdGUoc3NsKSkgeworICAgICAgICAv KiBjYWxsIHRoZSBjdXN0b20gZnVuY3Rpb24gKi8KKyAgICAgICAgZXJyID0gWDUwOV90b191c2Vy KGNsaWVudF9jZXJ0LCBjbiwgc2l6ZW9mKGNuKSk7CisgICAgICAgIFg1MDlfZnJlZShjbGllbnRf Y2VydCk7CisgICAgICAgIGlmIChlcnIpCisgICAgICAgICAgICByZXR1cm4gciA9IE5VTEw7Cisg ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiByOworICAgIH0KKyAgICBlbHNlCisgICAg ICAgIHJldHVybiByID0gTlVMTDsKK30KKwordW5zaWduZWQgY2hhciAqKgordGxzX2dldF9TQU5f b2JqcyhTU0wgKiBzc2wsIGludCB0eXBlKQorLyogcmV0dXJucyBOVUxMIG9yIGFuIGFycmF5IG9m IG1hbGxvYydlZCBvYmplY3RzIG9mIHR5cGUgYHR5cGUnIGZyb20gdGhlIHNlcnZlcidzCisgKiBz dWJqZWN0QWx0TmFtZSwgcmVtZW1iZXIgdG8gZnJlZSgpIHRoZW0gYWxsIQorICovCit7CisjZGVm aW5lIE5VTV9TQU5fT0JKUyA2NAorICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyICpvYmpzW05VTV9T QU5fT0JKU107CisgICAgdW5zaWduZWQgY2hhciAqKnJ2ID0gTlVMTDsKKyAgICBYNTA5ICpzZXJ2 ZXJfY2VydCA9IE5VTEw7CisgICAgaW50IGksIGo7CisgICAgWDUwOV9FWFRFTlNJT04gKmV4dCA9 IE5VTEw7CisgICAgU1RBQ0tfT0YoR0VORVJBTF9OQU1FKSAqaWFsdCA9IE5VTEw7CisgICAgR0VO RVJBTF9OQU1FICpnZW4gPSBOVUxMOworCisgICAgbWVtc2V0KG9ianMsIDAsIHNpemVvZihvYmpz KSk7CisgICAgaWYgKHNlcnZlcl9jZXJ0ID0gU1NMX2dldF9wZWVyX2NlcnRpZmljYXRlKHNzbCkp IHsKKyAgICAgICAgaWYgKChpID0gWDUwOV9nZXRfZXh0X2J5X05JRChzZXJ2ZXJfY2VydCwgTklE X3N1YmplY3RfYWx0X25hbWUsIC0xKSkgPCAwKQorICAgICAgICAgICAgZ290byBlamVjdDsKKyAg ICAgICAgaWYgKCEoZXh0ID0gWDUwOV9nZXRfZXh0KHNlcnZlcl9jZXJ0LCBpKSkpCisgICAgICAg ICAgICBnb3RvIGVqZWN0OworICAgICAgICBYNTA5VjNfYWRkX3N0YW5kYXJkX2V4dGVuc2lvbnMo KTsKKyAgICAgICAgaWYgKCEoaWFsdCA9IFg1MDlWM19FWFRfZDJpKGV4dCkpKQorICAgICAgICAg ICAgZ290byBlamVjdDsKKyAgICAgICAgcnYgPSBvYmpzOworICAgICAgICBmb3IgKGkgPSAwLCBq ID0gMDsgaSA8IHNrX0dFTkVSQUxfTkFNRV9udW0oaWFsdCkgJiYgaiA8IE5VTV9TQU5fT0JKUyAt IDI7IGkrKykgeworICAgICAgICAgICAgZ2VuID0gc2tfR0VORVJBTF9OQU1FX3ZhbHVlKGlhbHQs IGkpOworICAgICAgICAgICAgLyogVGhlIHVzZSBvZiBWX0FTTjFfQ09OVEVYVF9TUEVDSUZJQyBp cyBiZWNhdXNlIE9wZW5TU0wgMC45LjYgZGVmaW5lZCBpdHMKKyAgICAgICAgICAgICAqIHR5cGVz IHwgVl9BU04xX0NPTlRFWFRfU1BFQ0lGSUMuICAwLjkuNyBkb2VzIG5vdC4gIEluIGNhc2UsIHdl IGFyZSBidWlsdAorICAgICAgICAgICAgICogd2l0aCBvbmUgYW5kIGxpbmtlZCB0byB0aGUgb3Ro ZXIgd2UgdXNlIHRoaXMgaGFjay4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgaWYgKChn ZW4tPnR5cGUgfCBWX0FTTjFfQ09OVEVYVF9TUEVDSUZJQykgPT0gKHR5cGUgfCBWX0FTTjFfQ09O VEVYVF9TUEVDSUZJQykpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWdlbi0+ZC5pYTUgfHwgIWdl bi0+ZC5pYTUtPmxlbmd0aCkKKwkJICBicmVhazsKKyAgICAgICAgICAgICAgICBpZiAoc3RybGVu KChjaGFyICopZ2VuLT5kLmlhNS0+ZGF0YSkgIT0gZ2VuLT5kLmlhNS0+bGVuZ3RoKSB7CisgICAg ICAgICAgICAgICAgICAgIC8qIElnbm9yaW5nIElBNVN0cmluZyBjb250YWluaW5nIG51bGwgY2hh cmFjdGVyICovCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgICBvYmpzW2pdID0gbWFsbG9jKGdlbi0+ZC5pYTUtPmxlbmd0aCAr IDEpOworICAgICAgICAgICAgICAgIGlmIChvYmpzW2pdKSB7CisgICAgICAgICAgICAgICAgICAg IG1lbWNweShvYmpzW2pdLCBnZW4tPmQuaWE1LT5kYXRhLCBnZW4tPmQuaWE1LT5sZW5ndGgpOwor ICAgICAgICAgICAgICAgICAgICBvYmpzW2pdW2dlbi0+ZC5pYTUtPmxlbmd0aF0gPSAwOworICAg ICAgICAgICAgICAgICAgICBqKys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor ICAgICAgICB9CisgICAgICAgIFg1MDlWM19FWFRfY2xlYW51cCgpOworICAgIH0KK2VqZWN0Ogor ICAgIGlmIChpYWx0KSAgICAgICAgICAgc2tfR0VORVJBTF9OQU1FX2ZyZWUoaWFsdCk7CisgICAg aWYgKHNlcnZlcl9jZXJ0KSAgICBYNTA5X2ZyZWUoc2VydmVyX2NlcnQpOworICAgIHJldHVybiBy djsKK30KKworCitzdGF0aWMgaW50CitkTlNOYW1lX2NtcChjb25zdCBjaGFyICpob3N0LCBjb25z dCBjaGFyICpkTlNOYW1lKQoreworICAgIGludCBjMSA9IDEsIGMyID0gMSwgbnVtX2NvbXAsIHJ2 ID0gLTE7CisgICAgY2hhciAqcCwgKnAxLCAqcDIsICpob3N0X2NvcHk9TlVMTCwgKmROU05hbWVf Y29weT1OVUxMOworCisgICAgLyogZmlyc3Qgd2UgY291bnQgdGhlIG51bWJlciBvZiBkb21haW4g bmFtZSBjb21wb25lbnRzIGluIGJvdGggcGFyYW1ldGVycy4KKyAgICAgKiB0aGV5IHNob3VsZCBi ZSBlcXVhbCBtYW55LCBvciBpdCdzIG5vdCBhIG1hdGNoCisgICAgICovCisgICAgcCA9IChjaGFy ICopIGhvc3Q7CisgICAgd2hpbGUgKHAgPSBzdHJzdHIocCwgIi4iKSkgeworICAgICAgICBjMSsr OworICAgICAgICBwKys7CisgICAgfQorICAgIHAgPSAoY2hhciAqKSBkTlNOYW1lOworICAgIHdo aWxlIChwID0gc3Ryc3RyKHAsICIuIikpIHsKKyAgICAgICAgYzIrKzsKKyAgICAgICAgcCsrOwor ICAgIH0KKyAgICBpZiAoYzEgIT0gYzIpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBudW1fY29t cCA9IGMxOworCisgICAgbWFrZXN0cigmaG9zdF9jb3B5LGhvc3QpOworICAgIG1ha2VzdHIoJmRO U05hbWVfY29weSxkTlNOYW1lKTsKKyAgICBpZiAoaG9zdF9jb3B5ID09IE5VTEwgfHwgZE5TTmFt ZV9jb3B5ID09IE5VTEwpCisgICAgICAgIGdvdG8gZWplY3Q7CisgICAgLyogbWFrZSBzdWJzdHJp bmdzIGJ5IHJlcGxhY2luZyAnLicgd2l0aCAnXDAnICovCisgICAgcCA9IGROU05hbWVfY29weTsK KyAgICB3aGlsZSAocCA9IHN0cnN0cihwLCAiLiIpKSB7CisgICAgICAgICpwID0gJ1wwJzsKKyAg ICAgICAgcCsrOworICAgIH0KKyAgICBwID0gaG9zdF9jb3B5OworICAgIHdoaWxlIChwID0gc3Ry c3RyKHAsICIuIikpIHsKKyAgICAgICAgKnAgPSAnXDAnOworICAgICAgICBwKys7CisgICAgfQor CisgICAgLyogY29tcGFyZSBlYWNoIGNvbXBvbmVudCAqLworICAgIHAxID0gaG9zdF9jb3B5Owor ICAgIHAyID0gZE5TTmFtZV9jb3B5OworICAgIGZvciAoOyBudW1fY29tcDsgbnVtX2NvbXAtLSkg eworICAgICAgICBpZiAoIWNrbWF0Y2gocDIsIHAxLDAsMSkpCisgICAgICAgICAgICAvKiBmYWls ZWQgbWF0Y2ggKi8KKyAgICAgICAgICAgIGdvdG8gZWplY3Q7CisgICAgICAgIHAxICs9IHN0cmxl bihwMSkgKyAxOworICAgICAgICBwMiArPSBzdHJsZW4ocDIpICsgMTsKKyAgICB9CisgICAgLyog bWF0Y2ggb2sgKi8KKyAgICBydiA9IDA7CisKKyAgZWplY3Q6CisgICAgaWYgKGROU05hbWVfY29w eSkgICBmcmVlKGROU05hbWVfY29weSk7CisgICAgaWYgKGhvc3RfY29weSkgICAgICBmcmVlKGhv c3RfY29weSk7CisgICAgcmV0dXJuIHJ2OworfQorCisKKworc3RhdGljIGludAorc2hvd19ob3N0 bmFtZV93YXJuaW5nKGNoYXIgKnMxLCBjaGFyICpzMikKK3sKKyAgICBjaGFyIHByZWZpeFsxMDI0 XTsKKyAgICBpbnQgb2sgPSAxOworICAgIHNldHZlcmJvc2l0eSgpOworICAgIGNrbWFreG1zZyhw cmVmaXgsMTAyNCwKKyAgICAgICAgICAgICAgIldhcm5pbmc6IEhvc3RuYW1lIChcIiIsIHMxLCAK KyAgICAgICAgICAgICAgIlwiKSBkb2VzIG5vdCBtYXRjaCBzZXJ2ZXIncyBjZXJ0aWZpY2F0ZSAo XCIiLCBzMiwgIlwiKSIsCisgICAgICAgICAgICAgIE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxO VUxMLE5VTEwpOworICAgIGlmIChzc2xfdmVyaWZ5X2ZsYWcpCisgICAgICAgIG9rID0gdXFfb2so cHJlZml4LAorICAgICAgICAgICAgICAgICAgICAiQ29udGludWU/IChZL04pICIsCisgICAgICAg ICAgICAgICAgICAgIDMsIE5VTEwsIDApOworICAgIGVsc2UgaWYgKHZlcmJvc2l0eSkKKyAgICAg ICAgcHJpbnRmKHByZWZpeCk7CisgICAgcmV0dXJuKG9rKTsKK30KKworI2lmbmRlZiBPU0Y1MAor I2lmbmRlZiBIUFVYMTAKKyNpZm5kZWYgSFBVWDExMDAKKyNpZm5kZWYgU0NPX09TUjUwNQorI2lm bmRlZiBPcGVuQlNECisjaWZuZGVmIEZSRUVCU0Q0CisjaWZuZGVmIE5FVEJTRDE1CisjaWZuZGVm IExJTlVYCisjaWZuZGVmIEFJWDQxCisjaWZuZGVmIFVXNworI2lmbmRlZiBJUklYNjUKKyNpZm5k ZWYgU09MQVJJUzkKKyNpZm5kZWYgU09MQVJJUzgKKyNpZm5kZWYgU09MQVJJUzcKKyNpZm5kZWYg TUFDT1NYCisjaWZkZWYgREVDX1RDUElQCisjZGVmaW5lIGluZXRfYXRvbiBJTkVUX0FUT04KKyNl bmRpZiAvKiBERUNfVENQSVAgKi8KKworI2lmbmRlZiBOT19EQ0xfSU5FVF9BVE9OCitzdGF0aWMg aW50CitpbmV0X2F0b24oY2hhciAqIGlwYWRkcmVzcywgc3RydWN0IGluX2FkZHIgKiBpYSkgewor ICAgIHN0cnVjdCBzdHJpbmdhcnJheSAqIHE7CisgICAgdW5pb24geworICAgICAgICB1bnNpZ25l ZCBsb25nIGw7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgYls0XTsKKyAgICB9IGR1bW15OworCisg ICAgcSA9IGNrc3BsaXQoMSwwLGlwYWRkcmVzcywiLiIsIjAxMjM0NTY3ODlhYmNkZWZBQ0RFRiIs OCwwLDApOworICAgIGlmIChxLT5hX3NpemUgPT0gNCkgeworICAgICAgICBkdW1teS5iWzBdID0g YXRvaShxLT5hX2hlYWRbMV0pOworICAgICAgICBkdW1teS5iWzFdID0gYXRvaShxLT5hX2hlYWRb Ml0pOworICAgICAgICBkdW1teS5iWzJdID0gYXRvaShxLT5hX2hlYWRbM10pOworICAgICAgICBk dW1teS5iWzNdID0gYXRvaShxLT5hX2hlYWRbNF0pOworICAgICAgICBpYS0+c19hZGRyID0gZHVt bXkubDsKKyAgICAgICAgcmV0dXJuKGlhLT5zX2FkZHIgIT0gMCk7CisgICAgfQorICAgIHJldHVy bigwKTsKK30KKyNlbmRpZgkvKiBOT19EQ0xfSU5FVF9BVE9OICovCisKKyNlbmRpZiAvKiBNQUNP U1ggKi8KKyNlbmRpZiAvKiBTT0xBUklTNyAqLworI2VuZGlmIC8qIFNPTEFSSVM4ICovCisjZW5k aWYgLyogU09MQVJJUzkgKi8KKyNlbmRpZiAvKiBJUklYNjUgKi8KKyNlbmRpZiAvKiBVVzcgKi8K KyNlbmRpZiAvKiBBSVg0MSAqLworI2VuZGlmIC8qIExJTlVYICovCisjZW5kaWYgLyogTkVUQlNE MTUgKi8KKyNlbmRpZiAvKiBGUkVFQlNENCAqLworI2VuZGlmIC8qIE9wZW5CU0QgKi8KKyNlbmRp ZiAvKiBTQ09fT1NSNTA1ICovCisjZW5kaWYgLyogSFBVWDExMDAgKi8KKyNlbmRpZiAvKiBIUFVY MTAgKi8KKyNlbmRpZiAvKiBPU0Y1MCAqLworCitpbnQKK3NzbF9jaGVja19zZXJ2ZXJfbmFtZShT U0wgKiBzc2wsIGNoYXIgKiBob3N0bmFtZSkKKy8qIHJldHVybnMgMCBpZiBob3N0bmFtZSBhbmQg c2VydmVyJ3MgY2VydCBtYXRjaGVzLCBlbHNlIC0xICovCit7CisgICAgY2hhciAqIGNvbW1vbk5h bWU7CisgICAgdW5zaWduZWQgY2hhciAqKiBkTlNOYW1lOworICAgIHVuc2lnbmVkIGNoYXIgKiog aXBBZGRyZXNzOworICAgIHN0cnVjdCBpbl9hZGRyIGlhOworICAgIGludCBydjsKKworICAgIHNl dHZlcmJvc2l0eSgpOworICAgIGlmICh2ZXJib3NpdHkgJiYgIWluc2VydmVyKSB7CisgICAgICAg IGlmIChkTlNOYW1lID0gdGxzX2dldF9TQU5fb2Jqcyhzc2wsR0VOX0ROUykpIHsKKyAgICAgICAg ICAgIGludCBpID0gMDsKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGROU05hbWVbaV07IGkrKykg eworICAgICAgICAgICAgICAgIHByaW50ZigiQ2VydGlmaWNhdGVbMF0gYWx0U3ViamVjdE5hbWUg RE5TPSVzXHJcbiIsZE5TTmFtZVtpXSk7CisgICAgICAgICAgICAgICAgZnJlZShkTlNOYW1lW2ld KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoaXBBZGRyZXNzID0gdGxz X2dldF9TQU5fb2Jqcyhzc2wsR0VOX0lQQUREKSkgeworICAgICAgICAgICAgaW50IGkgPSAwOwor ICAgICAgICAgICAgY2hhciAqc2VydmVyX2lwOworICAgICAgICAgICAgc3RydWN0IGluX2FkZHIg aWE7CisKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGlwQWRkcmVzc1tpXTsgaSsrKSB7CisgICAg ICAgICAgICAgICAgaWYgKGlwQWRkcmVzc1tpXSkgeworICAgICAgICAgICAgICAgICAgICBpYS5z X2FkZHIgPSAqKHVuc2lnbmVkIGxvbmcgKilpcEFkZHJlc3NbaV07CisgICAgICAgICAgICAgICAg ICAgIHNlcnZlcl9pcCA9IGluZXRfbnRvYShpYSk7CisgICAgICAgICAgICAgICAgICAgIHByaW50 ZigiQ2VydGlmaWNhdGVbMF0gYWx0U3ViamVjdE5hbWUgSVBBZGRyPSVzXHJcbiIsc2VydmVyX2lw KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZnJlZShpcEFkZHJlc3NbaV0p OworICAgICAgICAgICAgfQorICAgICAgICAgICAgLyogaXBBZGRyZXNzIHBvaW50cyB0byBhIHN0 YXRpYyAtIGRvbid0IGZyZWUgKi8KKyAgICAgICAgfQorICAgICAgICBpZiAoZE5TTmFtZSA9IHRs c19nZXRfU0FOX29ianMoc3NsLEdFTl9FTUFJTCkpIHsKKyAgICAgICAgICAgIGludCBpID0gMDsK KyAgICAgICAgICAgIGZvciAoaSA9IDA7IGROU05hbWVbaV07IGkrKykgeworICAgICAgICAgICAg ICAgIHByaW50ZigiQ2VydGlmaWNhdGVbMF0gYWx0U3ViamVjdE5hbWUgRW1haWw9JXNcclxuIixk TlNOYW1lW2ldKTsKKyAgICAgICAgICAgICAgICBmcmVlKGROU05hbWVbaV0pOworICAgICAgICAg ICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChkTlNOYW1lID0gdGxzX2dldF9TQU5fb2Jqcyhz c2wsR0VOX1VSSSkpIHsKKyAgICAgICAgICAgIGludCBpID0gMDsKKyAgICAgICAgICAgIGZvciAo aSA9IDA7IGROU05hbWVbaV07IGkrKykgeworICAgICAgICAgICAgICAgIHByaW50ZigiQ2VydGlm aWNhdGVbMF0gYWx0U3ViamVjdE5hbWUgVVJJPSVzXHJcbiIsZE5TTmFtZVtpXSk7CisgICAgICAg ICAgICAgICAgZnJlZShkTlNOYW1lW2ldKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg ICAgICBpZiAoZE5TTmFtZSA9IHRsc19nZXRfU0FOX29ianMoc3NsLEdFTl9PVEhFUk5BTUUpKSB7 CisgICAgICAgICAgICBpbnQgaSA9IDA7CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBkTlNOYW1l W2ldOyBpKyspIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIkNlcnRpZmljYXRlWzBdIGFsdFN1 YmplY3ROYW1lIE90aGVyPSVzXHJcbiIsZE5TTmFtZVtpXSk7CisgICAgICAgICAgICAgICAgZnJl ZShkTlNOYW1lW2ldKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8q IGZpcnN0IHdlIGNoZWNrIGlmIGBob3N0bmFtZScgaXMgaW4gZmFjdCBhbiBpcCBhZGRyZXNzICov CisgICAgaWYgKGluZXRfYXRvbihob3N0bmFtZSwgJmlhKSkgeworICAgICAgICBpcEFkZHJlc3Mg PSB0bHNfZ2V0X1NBTl9vYmpzKHNzbCxHRU5fSVBBREQpOworICAgICAgICBpZiAoaXBBZGRyZXNz KSB7CisgICAgICAgICAgICBpbnQgaSA9IDA7CisgICAgICAgICAgICBjaGFyICpzZXJ2ZXJfaXAg PSAiVU5LTk9XTiI7CisKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGlwQWRkcmVzc1tpXTsgaSsr KQorICAgICAgICAgICAgICAgIGlmICgqKHVuc2lnbmVkIGxvbmcgKilpcEFkZHJlc3NbaV0gPT0g aWEuc19hZGRyKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICAgICAg aWYgKGlwQWRkcmVzc1tpIC0gMV0pIHsKKyAgICAgICAgICAgICAgICBpYS5zX2FkZHIgPSAqKHVu c2lnbmVkIGxvbmcgKilpcEFkZHJlc3NbaSAtIDFdOworICAgICAgICAgICAgICAgIHNlcnZlcl9p cCA9IGluZXRfbnRvYShpYSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBydiA9IHNob3df aG9zdG5hbWVfd2FybmluZyhob3N0bmFtZSwgc2VydmVyX2lwKSA/IDAgOiAtMTsKKyAgICAgICAg ICAgIGZvciAoaSA9IDA7IGlwQWRkcmVzc1tpXTsgaSsrKQorICAgICAgICAgICAgICAgIGZyZWUo aXBBZGRyZXNzW2ldKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJ2ID0gc2hvd19o b3N0bmFtZV93YXJuaW5nKGhvc3RuYW1lLCAiTk8gSVAgSU4gQ0VSVCIpID8gMCA6IC0xOworICAg ICAgICB9CisgICAgICAgIHJldHVybihydik7CisgICAgfQorCisgICAgLyogbG9vayBmb3IgZE5T TmFtZShzKSBpbiBzdWJqZWN0QWx0TmFtZSBpbiB0aGUgc2VydmVyJ3MgY2VydGlmaWNhdGUgKi8K KyAgICBkTlNOYW1lID0gdGxzX2dldF9TQU5fb2Jqcyhzc2wsR0VOX0ROUyk7CisgICAgaWYgKGRO U05hbWUpIHsKKyAgICAgICAgaW50IGkgPSAwOworICAgICAgICBmb3IgKGkgPSAwOyBkTlNOYW1l W2ldOyBpKyspIHsKKyAgICAgICAgICAgIGlmICghZE5TTmFtZV9jbXAoaG9zdG5hbWUsKGNoYXIg KilkTlNOYW1lW2ldKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAg ICAgICBydiA9IHNob3dfaG9zdG5hbWVfd2FybmluZyhob3N0bmFtZSwKKwkJCQkgICAoY2hhciAq KSgoZE5TTmFtZVtpIC0gMV0gPT0gTlVMTCkgPyAKKwkJCSAgICAgICAgICAgKGNoYXIgKikiVU5L Tk9XTiIgOiAoY2hhciAqKWROU05hbWVbaSAtIDFdKSkKKwkgICAgID8gMCA6IC0xOworICAgICAg ICBmb3IgKGkgPSAwOyBkTlNOYW1lW2ldOyBpKyspCisgICAgICAgICAgICBmcmVlKGROU05hbWVb aV0pOworICAgICAgICByZXR1cm4gcnY7CisgICAgfSBlbHNlIGlmICgoY29tbW9uTmFtZSA9IHNz bF9nZXRfY29tbW9uTmFtZShzc2wpKSkgeworICAgICAgIC8qIHNvIHRoZSBzZXJ2ZXIgZGlkbid0 IGhhdmUgYW55IGROU05hbWUncywgY2hlY2sgdGhlIGNvbW1vbk5hbWUgKi8KKyAgICAgICBpZiAo IWROU05hbWVfY21wKGhvc3RuYW1lLCBjb21tb25OYW1lKSkKKyAgICAgICAgICAgcmV0dXJuIDA7 CisgICAgICAgZWxzZQorICAgICAgICAgICByZXR1cm4gKHNob3dfaG9zdG5hbWVfd2FybmluZyho b3N0bmFtZSwgY29tbW9uTmFtZSkgPyAwIDogLTEpOworICAgIH0KKyAgICByZXR1cm4gLTE7Cit9 CisKKy8qIElzICd1c2VyJyBhdXRob3JpemVkIHRvIGFjY2VzcyB0aGUgc3lzdGVtIHdpdGhvdXQg YSBsb2dpbiAqLworaW50Cit0bHNfaXNfdXNlcl92YWxpZChTU0wgKiBzc2wsIGNvbnN0IGNoYXIg KnVzZXIpCit7CisgICAgWDUwOSAqY2xpZW50X2NlcnQ7CisgICAgaW50IHIgPSAwOworCisgICAg aWYgKCAhc3NsIHx8ICF1c2VyIHx8ICF1c2VyWzBdICkKKyAgICAgICAgcmV0dXJuKDApOworCisg ICAgaWYgKCEoY2xpZW50X2NlcnQgPSBTU0xfZ2V0X3BlZXJfY2VydGlmaWNhdGUoc3NsKSkpCisg ICAgICAgIHJldHVybiAwOworCisgICAgLyogVXNlIHVzZXIgc3VwcGxpZWQgZnVuY3Rpb24gKi8K KyAgICByID0gWDUwOV91c2Vyb2soY2xpZW50X2NlcnQsdXNlcik7CisKKyAgICBYNTA5X2ZyZWUo Y2xpZW50X2NlcnQpOworICAgIHJldHVybiByOworfQorCitpbnQKK3Rsc19pc19hbm9uKGludCB4 KQoreworICAgIGNoYXIgYnVmWzEyOF07CisgICAgU1NMX0NJUEhFUiAqIGNpcGhlcjsKKyAgICBT U0wgKiBzc2wgPSBOVUxMOworCisgICAgc3dpdGNoICggeCApIHsKKyNpZm5kZWYgTk9GVFAKKyNp Zm5kZWYgU1lTRlRQCisgICAgY2FzZSAxOiAgICAgLyogZnRwIGNvbW1hbmQgKi8KKyAgICAgICAg aWYgKCBzc2xfZnRwX2FjdGl2ZV9mbGFnICkKKyAgICAgICAgICAgIHNzbCA9IHNzbF9mdHBfY29u OworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4oMCk7CisgICAgICAgIGJyZWFrOwor ICAgIGNhc2UgMjogICAgIC8qIGZ0cCBkYXRhICovCisgICAgICAgIGlmICggc3NsX2Z0cF9kYXRh X2FjdGl2ZV9mbGFnICkKKyAgICAgICAgICAgIHNzbCA9IHNzbF9mdHBfZGF0YV9jb247CisgICAg ICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybigwKTsKKyAgICAgICAgYnJlYWs7CisjZW5kaWYg LyogU1lTRlRQICovCisjZW5kaWYgLyogTk9GVFAgKi8KKyAgICBkZWZhdWx0OgorICAgICAgICBp ZiAodGxzX2FjdGl2ZV9mbGFnKQorICAgICAgICAgICAgc3NsID0gdGxzX2NvbjsKKyAgICAgICAg ZWxzZSBpZiAoc3NsX2FjdGl2ZV9mbGFnKQorICAgICAgICAgICAgc3NsID0gc3NsX2NvbjsKKyAg ICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuKDApOworICAgIH0KKworICAgIGNpcGhlciA9 IFNTTF9nZXRfY3VycmVudF9jaXBoZXIoc3NsKTsKKyAgICBpZiAoU1NMX0NJUEhFUl9kZXNjcmlw dGlvbihjaXBoZXIsYnVmLHNpemVvZihidWYpKSkgeworICAgICAgICBpZiAoY2tpbmRleCgiQXU9 Tm9uZSIsYnVmLDAsMCwwKSAhPSAwKQorICAgICAgICAgICAgcmV0dXJuKDEpOyAgICAgICAgICAg ICAgICAgIC8qIGFub255bW91cyAqLworICAgICAgICByZXR1cm4oMCk7ICAgICAgICAgICAgICAg ICAgLyoga25vd24gKi8KKyAgICB9IGVsc2UgeworICAgICAgICAvKiBjb3VsZCBub3QgZ2V0IGNp cGhlciBkZXNjcmlwdGlvbi4gIEFzc3VtZSBhbm9ueW1vdXMgKi8KKyAgICAgICAgcmV0dXJuKDEp OworICAgIH0KK30KKworaW50Cit0bHNfaXNfa3JiNShpbnQgeCkKK3sKKyAgICBjaGFyIGJ1Zlsx MjhdOworICAgIFNTTF9DSVBIRVIgKiBjaXBoZXI7CisgICAgU1NMICogc3NsID0gTlVMTDsKKwor ICAgIHN3aXRjaCAoIHggKSB7CisjaWZuZGVmIE5PRlRQCisjaWZuZGVmIFNZU0ZUUAorICAgIGNh c2UgMTogICAgIC8qIGZ0cCBjb21tYW5kICovCisgICAgICAgIGlmICggc3NsX2Z0cF9hY3RpdmVf ZmxhZyApCisgICAgICAgICAgICBzc2wgPSBzc2xfZnRwX2NvbjsKKyAgICAgICAgZWxzZQorICAg ICAgICAgICAgcmV0dXJuKDApOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDI6ICAgICAvKiBm dHAgZGF0YSAqLworICAgICAgICBpZiAoIHNzbF9mdHBfZGF0YV9hY3RpdmVfZmxhZyApCisgICAg ICAgICAgICBzc2wgPSBzc2xfZnRwX2RhdGFfY29uOworICAgICAgICBlbHNlCisgICAgICAgICAg ICByZXR1cm4oMCk7CisgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIFNZU0ZUUCAqLworI2VuZGlm IC8qIE5PRlRQICovCisjaWZuZGVmIE5PSFRUUAorICAgIGNhc2UgMzoKKyAgICAgICAgaWYgKCB0 bHNfaHR0cF9hY3RpdmVfZmxhZyApCisgICAgICAgICAgICBzc2wgPSB0bHNfaHR0cF9jb247Cisg ICAgICAgIGJyZWFrOworI2VuZGlmIC8qIE5PSFRUUCAqLworICAgIGRlZmF1bHQ6CisgICAgICAg IGlmICh0bHNfYWN0aXZlX2ZsYWcpCisgICAgICAgICAgICBzc2wgPSB0bHNfY29uOworICAgICAg ICBlbHNlIGlmIChzc2xfYWN0aXZlX2ZsYWcpCisgICAgICAgICAgICBzc2wgPSBzc2xfY29uOwor ICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4oMCk7CisgICAgfQorCisgICAgY2lwaGVy ID0gU1NMX2dldF9jdXJyZW50X2NpcGhlcihzc2wpOworICAgIGlmIChjaXBoZXIgJiYgU1NMX0NJ UEhFUl9kZXNjcmlwdGlvbihjaXBoZXIsYnVmLHNpemVvZihidWYpKSkgeworICAgICAgICBpZiAo Y2tpbmRleCgiQXU9S1JCNSIsYnVmLDAsMCwwKSAhPSAwKQorICAgICAgICAgICAgcmV0dXJuKDEp OyAgICAgICAgICAgICAgICAgIC8qIGtyYjUgKi8KKyAgICB9CisgICAgcmV0dXJuKDApOyAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogbm90ICovCit9CisKK2ludAorc3NsX2dldF9jbGllbnRf ZmluaXNoZWQoY2hhciAqYnVmLCBpbnQgY291bnQpCit7CisjaWZkZWYgTk9fR0VUX0ZJTklTSEVE CisgICAgcmV0dXJuKDApOworI2Vsc2UKKyAgICBpZiAoc3N0ZWxuZXQgfHwgdGNwX2luY29taW5n KSB7CisgICAgICAgIHJldHVybihTU0xfZ2V0X3BlZXJfZmluaXNoZWQoc3NsX2FjdGl2ZV9mbGFn P3NzbF9jb246dGxzX2NvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg YnVmLGNvdW50KSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuKFNTTF9nZXRfZmluaXNo ZWQoc3NsX2FjdGl2ZV9mbGFnP3NzbF9jb246dGxzX2NvbiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgYnVmLGNvdW50KSk7CisgICAgfQorI2VuZGlmIC8qIE5PX0dFVF9G SU5JU0hFRCAqLworfQorCitpbnQKK3NzbF9nZXRfc2VydmVyX2ZpbmlzaGVkKGNoYXIgKmJ1Ziwg aW50IGNvdW50KQoreworI2lmZGVmIE5PX0dFVF9GSU5JU0hFRAorICAgIHJldHVybigwKTsKKyNl bHNlCisgICAgaWYgKHNzdGVsbmV0IHx8IHRjcF9pbmNvbWluZykgeworICAgICAgICByZXR1cm4o U1NMX2dldF9maW5pc2hlZChzc2xfYWN0aXZlX2ZsYWc/c3NsX2Nvbjp0bHNfY29uLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWYsY291bnQpKTsKKyAgICB9IGVsc2Ug eworICAgICAgICByZXR1cm4oU1NMX2dldF9wZWVyX2ZpbmlzaGVkKHNzbF9hY3RpdmVfZmxhZz9z c2xfY29uOnRsc19jb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1 Zixjb3VudCkpOworICAgIH0KKyNlbmRpZiAvKiBOT19HRVRfRklOSVNIRUQgKi8KK30KKworCisj aWZkZWYgQ0tfQVVUSEVOVElDQVRJT04KK2ludAorI2lmZGVmIENLX0FOU0lDCitzc2xfcmVwbHko aW50IGhvdywgdW5zaWduZWQgY2hhciAqZGF0YSwgaW50IGNudCkKKyNlbHNlCitzc2xfcmVwbHko aG93LGRhdGEsY250KSBpbnQgaG93OyB1bnNpZ25lZCBjaGFyICpkYXRhOyBpbnQgY250OworI2Vu ZGlmCit7CisgICAgY2hhciAqIHN0cj1OVUxMOworCisgICAgc2V0dmVyYm9zaXR5KCk7CisgICAg ZGF0YSArPSA0OyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUG9pbnQgdG8gc3RhdHVzIGJ5 dGUgKi8KKyAgICBjbnQgIC09IDQ7CisKKyAgICBpZihjbnQtLSA8IDEpIHsKKyAgICAgICAgYXV0 aF9maW5pc2hlZChBVVRIX1JFSkVDVCk7CisgICAgICAgIHJldHVybiBBVVRIX0ZBSUxVUkU7Cisg ICAgfQorCisgICAgc3dpdGNoKCpkYXRhKyspIHsKKyAgICBjYXNlIFNTTF9BQ0NFUFQ6CisgICAg ICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKQorICAgICAgICAgICAgdG5fZGVidWcoIltTU0wgLSBo YW5kc2hha2Ugc3RhcnRpbmddIik7CisgICAgICAgIGVsc2UgaWYgKCB2ZXJib3NpdHkgKQorICAg ICAgICAgICAgcHJpbnRmKCJbU1NMIC0gaGFuZHNoYWtlIHN0YXJ0aW5nXVxyXG4iKTsKKyAgICAg ICAgZGVidWcoRjExMCwic3NsX3JlcGx5IiwiW1NTTCAtIGhhbmRzaGFrZSBzdGFydGluZ10iLDAp OworCisgICAgICAgIC8qIHJpZ2h0IC4uLiBub3cgd2UgZHJvcCBpbnRvIHRoZSBTU0wgbGlicmFy eSAqLworICAgICAgICBpZiAoIXNzbF9vbmx5X2ZsYWcpIHsKKyAgICAgICAgICAgIGlmIChzc2xf ZHVtbXlfZmxhZykgeworICAgICAgICAgICAgICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKQorICAg ICAgICAgICAgICAgICAgICB0bl9kZWJ1ZygiW1NTTCAtIER1bW15IENvbm5lY3RlZF0iKTsKKyAg ICAgICAgICAgICAgICBlbHNlIGlmICggdmVyYm9zaXR5ICkgeworICAgICAgICAgICAgICAgICAg ICBwcmludGYoIltTU0wgLSBEdW1teSBDb25uZWN0ZWRdXHJcbiIpOworICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJzc2xfcmVwbHkiLCJbU1NMIC0gRHVtbXkg Q29ubmVjdGVkXSIsMCk7CisgICAgICAgICAgICAgICAgYXV0aF9maW5pc2hlZChBVVRIX1VOS05P V04pOworICAgICAgICAgICAgICAgIGFjY2VwdF9jb21wbGV0ZSA9IDE7CisgICAgICAgICAgICAg ICAgcmV0dXJuIEFVVEhfU1VDQ0VTUzsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYg KFNTTF9jb25uZWN0KHNzbF9jb24pIDw9IDApIHsKKyAgICAgICAgICAgICAgICBpbnQgbGVuOwor ICAgICAgICAgICAgICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKSB7CisgICAgICAgICAgICAgICAg ICAgIHRuX2RlYnVnKCJbU1NMIC0gRkFJTEVEXSIpOworICAgICAgICAgICAgICAgICAgICBFUlJf cHJpbnRfZXJyb3JzKGJpb19lcnIpOworICAgICAgICAgICAgICAgICAgICBsZW4gPSBCSU9fcmVh ZChiaW9fZXJyLHNzbF9lcnIsU1NMX0VSUl9CRlNaKTsKKyAgICAgICAgICAgICAgICAgICAgc3Ns X2VycltsZW4gPCBTU0xfRVJSX0JGU1ogPyBsZW4gOiBTU0xfRVJSX0JGU1pdID0gJ1wwJzsKKyAg ICAgICAgICAgICAgICAgICAgcHJpbnRmKHNzbF9lcnIpOworICAgICAgICAgICAgICAgIH0gZWxz ZSBpZiAoIHZlcmJvc2l0eSApIHsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJbU1NMIC0g RkFJTEVEXVxyXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgRVJSX3ByaW50X2Vycm9ycyhiaW9f ZXJyKTsKKyAgICAgICAgICAgICAgICAgICAgbGVuID0gQklPX3JlYWQoYmlvX2Vycixzc2xfZXJy LFNTTF9FUlJfQkZTWik7CisgICAgICAgICAgICAgICAgICAgIHNzbF9lcnJbbGVuIDwgU1NMX0VS Ul9CRlNaID8gbGVuIDogU1NMX0VSUl9CRlNaXSA9ICdcMCc7CisgICAgICAgICAgICAgICAgICAg IHByaW50Zihzc2xfZXJyKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZGVi dWcoRjExMCwic3NsX3JlcGx5IiwiW1NTTCAtIEZBSUxFRF0iLDApOworICAgICAgICAgICAgICAg IGF1dGhfZmluaXNoZWQoQVVUSF9SRUpFQ1QpOworICAgICAgICAgICAgICAgIHR0Y2xvcygwKTsK KyAgICAgICAgICAgICAgICByZXR1cm4gQVVUSF9GQUlMVVJFOworICAgICAgICAgICAgfSBlbHNl IHsKKyAgICAgICAgICAgICAgICBpZiAodG5fZGViIHx8IGRlYnNlcykKKyAgICAgICAgICAgICAg ICAgICAgdG5fZGVidWcoIltTU0wgLSBPS10iKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmICgg dmVyYm9zaXR5ICkgeworICAgICAgICAgICAgICAgICAgICBwcmludGYoIltTU0wgLSBPS11cclxu Iik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsInNzbF9y ZXBseSIsIltTU0wgLSBPS10iLDApOworCisgICAgICAgICAgICAgICAgc3NsX2FjdGl2ZV9mbGFn ID0gMTsKKyAgICAgICAgICAgICAgICBzc2xfZGlzcGxheV9jb25uZWN0X2RldGFpbHMoc3NsX2Nv biwwLHZlcmJvc2l0eSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYXV0aF9m aW5pc2hlZChBVVRIX1VOS05PV04pOworICAgICAgICBhY2NlcHRfY29tcGxldGUgPSAxOworICAg ICAgICBicmVhazsKKworICAgIGNhc2UgU1NMX1JFSkVDVDoKKyAgICAgICAgaWYgKHRuX2RlYiB8 fCBkZWJzZXMpIHsKKyAgICAgICAgICAgIHRuX2RlYnVnKAorICAgICAgICAgICAgICAgICAiW1NT TCAtIGZhaWxlZCB0byBzd2l0Y2ggb24gU1NMIC0gdHJ5aW5nIHBsYWludGV4dCBsb2dpbl0iKTsK KyAgICAgICAgfSBlbHNlIGlmICggdmVyYm9zaXR5ICkgeworICAgICAgICAgICAgcHJpbnRmKCJb U1NMIC0gZmFpbGVkIHRvIHN3aXRjaCBvbiBTU0xdXHJcbiIpOworICAgICAgICAgICAgcHJpbnRm KCJUcnlpbmcgcGxhaW50ZXh0IGxvZ2luOlxyXG4iKTsKKyAgICAgICAgfQorICAgICAgICBkZWJ1 ZyhGMTEwLCJzc2xfcmVwbHkiLCJbU1NMIC0gZmFpbGVkIHRvIHN3aXRjaCBvbiBTU0xdIiwwKTsK KyAgICAgICAgYXV0aF9maW5pc2hlZChBVVRIX1JFSkVDVCk7CisgICAgICAgIHJldHVybiBBVVRI X0ZBSUxVUkU7CisKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gQVVUSF9GQUlMVVJFOwor ICAgIH0KKyAgICByZXR1cm4gQVVUSF9TVUNDRVNTOworfQorCitpbnQKKyNpZmRlZiBDS19BTlNJ Qworc3NsX2lzKHVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBjbnQpCisjZWxzZQorc3NsX2lzKGRh dGEsY250KSB1bnNpZ25lZCBjaGFyICpkYXRhOyBpbnQgY250OworI2VuZGlmCit7CisgICAgaWYg KChjbnQgLT0gNCkgPCAxKQorICAgICAgICByZXR1cm4gQVVUSF9GQUlMVVJFOworCisgICAgc2V0 dmVyYm9zaXR5KCk7CisgICAgZGF0YSArPSA0OworICAgIHN3aXRjaCgqZGF0YSsrKSB7CisgICAg Y2FzZSBTU0xfU1RBUlQ6CisgICAgICAgIC8qIHNlcnZlciBzdGFydHMgdGhlIFNTTCBzdHVmZiBu b3cgLi4uICovCisgICAgICAgIGlmICghc3NsX29ubHlfZmxhZykgeworICAgICAgICAgICAgaWYg KCAhdGxzX2xvYWRfY2VydHMoc3NsX2N0eCxzc2xfY29uLDEpICkgeworICAgICAgICAgICAgICAg IGF1dGhfZmluaXNoZWQoQVVUSF9SRUpFQ1QpOworICAgICAgICAgICAgICAgIHJldHVybiBBVVRI X0ZBSUxVUkU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0bl9kZWIgfHwgZGVi c2VzKQorICAgICAgICAgICAgICAgIHRuX2RlYnVnKCJbU1NMIC0gaGFuZHNoYWtlIHN0YXJ0aW5n XSIpOworICAgICAgICAgICAgZWxzZSBpZiAoIHZlcmJvc2l0eSApCisgICAgICAgICAgICAgICAg cHJpbnRmKCJbU1NMIC0gaGFuZHNoYWtlIHN0YXJ0aW5nXVxyXG4iKTsKKyAgICAgICAgICAgIGRl YnVnKEYxMTAsInNzbF9pcyIsIltTU0wgLSBoYW5kc2hha2Ugc3RhcnRpbmddIiwwKTsKKworICAg ICAgICAgICAgU2VuZFNTTEF1dGhTQihTU0xfQUNDRVBULCAodm9pZCAqKTAsIDApOworCisgICAg ICAgICAgICBhdXRoX3NzbF92YWxpZCA9IDE7CisKKyAgICAgICAgICAgIGlmIChzc2xfZHVtbXlf ZmxhZykgeworICAgICAgICAgICAgICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKQorICAgICAgICAg ICAgICAgICAgICB0bl9kZWJ1ZygiW1NTTCAtIER1bW15IENvbm5lY3RlZF0iKTsKKyAgICAgICAg ICAgICAgICBlbHNlIGlmICggdmVyYm9zaXR5ICkgeworICAgICAgICAgICAgICAgICAgICBwcmlu dGYoIltTU0wgLSBEdW1teSBDb25uZWN0ZWRdXHJcbiIpOworICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJzc2xfaXMiLCJbU1NMIC0gRHVtbXkgQ29ubmVjdGVk XSIsMCk7CisgICAgICAgICAgICAgICAgYWNjZXB0X2NvbXBsZXRlID0gMTsKKyAgICAgICAgICAg ICAgICBhdXRoX2ZpbmlzaGVkKEFVVEhfVU5LTk9XTik7CisgICAgICAgICAgICAgICAgcmV0dXJu IEFVVEhfU1VDQ0VTUzsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKFNTTF9hY2Nl cHQoc3NsX2NvbikgPD0gMCkgeworICAgICAgICAgICAgICAgIGNoYXIgZXJyYnVmWzEwMjRdOwor CisgICAgICAgICAgICAgICAgc3ByaW50ZihlcnJidWYsIltTU0wgLSBTU0xfYWNjZXB0IGVycm9y OiAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgRVJSX2Vycm9yX3N0cmluZyhFUlJfZ2V0 X2Vycm9yKCksTlVMTCkpOworCisgICAgICAgICAgICAgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMp CisgICAgICAgICAgICAgICAgICAgIHRuX2RlYnVnKGVycmJ1Zik7CisgICAgICAgICAgICAgICAg ZWxzZSBpZiAoIHNzbF9kZWJ1Z19mbGFnICkKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIl c1xyXG4iLGVycmJ1Zik7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoIHZlcmJvc2l0eSApCisg ICAgICAgICAgICAgICAgICAgIHByaW50ZigiW1NTTCAtIFNTTF9hY2NlcHQgZXJyb3JdXHJcbiIp OworCisgICAgICAgICAgICAgICAgZGVidWcoRjExMCwic3NsX2lzIixlcnJidWYsMCk7CisKKyAg ICAgICAgICAgICAgICBhdXRoX2ZpbmlzaGVkKEFVVEhfUkVKRUNUKTsKKyAgICAgICAgICAgICAg ICB0dGNsb3MoMCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIEFVVEhfRkFJTFVSRTsKKyAgICAg ICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpCisgICAgICAgICAg ICAgICAgdG5fZGVidWcoIltTU0wgLSBPS10iKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKCB2ZXJi b3NpdHkgKSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCJbU1NMIC0gT0tdXHJcbiIpOworICAg ICAgICAgICAgfQorICAgICAgICAgICAgZGVidWcoRjExMCwic3NsX2lzIiwiW1NTTCAtIE9LXSIs MCk7CisgICAgICAgICAgICBzc2xfYWN0aXZlX2ZsYWcgPSAxOworICAgICAgICAgICAgc3NsX2Rp c3BsYXlfY29ubmVjdF9kZXRhaWxzKHNzbF9jb24sMSx2ZXJib3NpdHkpOworCisgICAgICAgICAg ICAvKiBub3cgY2hlY2sgdG8gc2VlIHRoYXQgd2UgZ290IGV4YWN0bHkgd2hhdCB3ZQorICAgICAg ICAgICAgKiB3YW50ZWQgZnJvbSB0aGUgY2FsbGVyIC4uLiBpZiBhIGNlcnRpZmljYXRlIGlzCisg ICAgICAgICAgICAqIHJlcXVpcmVkIHRoZW4gd2UgbWFrZSAxMDAlIHN1cmUgdGhhdCB3ZSB3ZXJl CisgICAgICAgICAgICAqIGdpdmVuIG9uZSBkdXJpbmcgdGhlIGhhbmRzaGFrZSAoYXMgaXQgaXMg YW4gb3B0aW9uYWwKKyAgICAgICAgICAgICogcGFydCBvZiBTU0wpCisgICAgICAgICAgICAqLwor CisjaWZkZWYgU1NMX0tSQjUKKyAgICAgICAgICAgIGlmICggdGxzX2lzX2tyYjUoMCkgKSB7Cisg ICAgICAgICAgICAgICAgaWYgKHNzbF9jb24tPmtzc2xfY3R4LT5jbGllbnRfcHJpbmMpCisgICAg ICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsInNzbF9pcyBLUkI1Iixzc2xfY29uLT5rc3NsX2N0 eC0+Y2xpZW50X3ByaW5jLDApOworICAgICAgICAgICAgfSBlbHNlCisjZW5kaWYgLyogU1NMX0tS QjUgKi8KKyAgICAgICAgICAgIGlmIChzc2xfdmVyaWZ5X2ZsYWcgJiBTU0xfVkVSSUZZX0ZBSUxf SUZfTk9fUEVFUl9DRVJUKSB7CisgICAgICAgICAgICAgICAgWDUwOSAqIHBlZXIgPSBTU0xfZ2V0 X3BlZXJfY2VydGlmaWNhdGUoc3NsX2Nvbik7CisgICAgICAgICAgICAgICAgaWYgKHBlZXIgPT0g TlVMTCkgeworICAgICAgICAgICAgICAgICAgICBpZiAodG5fZGViIHx8IGRlYnNlcykKKyAgICAg ICAgICAgICAgICAgICAgICAgIHRuX2RlYnVnKCJbU1NMIC0gcGVlciBjaGVjayBmYWlsZWRdIik7 CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNzbF9kZWJ1Z19mbGFnKQorICAgICAgICAg ICAgICAgICAgICAgICAgcHJpbnRmKCJbU1NMIC0gcGVlciBjaGVjayBmYWlsZWRdXHJcbiIpOwor ICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJzc2xfaXMiLCJbU1NMIC0gcGVlciBjaGVj ayBmYWlsZWRdIiwwKTsKKworICAgICAgICAgICAgICAgICAgICAvKiBMT0dHSU5HIFJFUVVJUkVE IEhFUkUhICovCisgICAgICAgICAgICAgICAgICAgIGF1dGhfZmluaXNoZWQoQVVUSF9SRUpFQ1Qp OworICAgICAgICAgICAgICAgICAgICByZXR1cm4gQVVUSF9GQUlMVVJFOworICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGF1dGhfZmluaXNoZWQoQVVUSF9VTktO T1dOKTsKKyAgICAgICAgICAgIGFjY2VwdF9jb21wbGV0ZSA9IDE7CisgICAgICAgIH0KKyAgICAg ICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBTZW5kU1NMQXV0aFNCKFNTTF9SRUpF Q1QsICh2b2lkICopICJVbmtub3duIG9wdGlvbiByZWNlaXZlZCIsIC0xKTsKKyAgICAgICAgaWYg KHRuX2RlYiB8fCBkZWJzZXMpCisgICAgICAgICAgICB0bl9kZWJ1ZygiW1NTTCAtIFVua25vd24g b3B0aW9uIHJlY2VpdmVkXSIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBwcmludGYoIlVu a25vd24gU1NMIG9wdGlvbiAlZFxyXG4iLCBkYXRhWy0xXSk7CisgICAgICAgIGRlYnVnKEYxMTEs InNzbF9pcyIsIltTU0wgLSBVbmtub3duIG9wdGlvbiByZWNlaXZlZF0iLGRhdGFbLTFdKTsKKyAg ICAgICAgYXV0aF9zc2xfdmFsaWQgPSAwOworICAgICAgICBhdXRoX2ZpbmlzaGVkKEFVVEhfUkVK RUNUKTsKKyAgICAgICAgcmV0dXJuKEFVVEhfRkFJTFVSRSk7CisgICAgfQorICAgIHJldHVybiBB VVRIX1NVQ0NFU1M7Cit9CisKKyNlbmRpZiAvKiBDS19BVVRIRU5USUNBVElPTiAqLworCitpbnQK K2NrX3RuX3Rsc19uZWdvdGlhdGUoVk9JRCkKK3sKKyAgICBYNTA5ICogcGVlciA9IE5VTEw7Cisg ICAgY2hhciBzdHJbMjU2XSwgKnVpZD1OVUxMOworICAgIGV4dGVybiBpbnQgc3N0ZWxuZXQ7CisK KyAgICBpZiAoICFja19zc2xlYXlfaXNfaW5zdGFsbGVkKCkgKQorICAgICAgICByZXR1cm4oLTEp OworCisgICAgc2V0dmVyYm9zaXR5KCk7CisgICAgaWYgKHNzdGVsbmV0KSB7CisgICAgICAgIC8q IHNlcnZlciBzdGFydHMgdGhlIFRMUyBzdHVmZiBub3cgLi4uICovCisgICAgICAgIGlmICghdGxz X29ubHlfZmxhZykgeworICAgICAgICAgICAgaWYgKCAhdGxzX2xvYWRfY2VydHModGxzX2N0eCx0 bHNfY29uLDEpICkgeworICAgICAgICAgICAgICAgIGF1dGhfZmluaXNoZWQoQVVUSF9SRUpFQ1Qp OworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg ICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpCisgICAgICAgICAgICAgICAgdG5fZGVidWcoIltUTFMg LSBoYW5kc2hha2Ugc3RhcnRpbmddIik7CisgICAgICAgICAgICBlbHNlIGlmICggdmVyYm9zaXR5 ICkKKyAgICAgICAgICAgICAgICBwcmludGYoIltUTFMgLSBoYW5kc2hha2Ugc3RhcnRpbmddXHJc biIpOworICAgICAgICAgICAgZGVidWcoRjExMCwiY2tfdG5fdGxzX25lZ290aWF0ZSIsIltUTFMg LSBoYW5kc2hha2Ugc3RhcnRpbmddIiwwKTsKKworICAgICAgICAgICAgaWYgKHNzbF9kdW1teV9m bGFnKSB7CisgICAgICAgICAgICAgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpCisgICAgICAgICAg ICAgICAgICAgIHRuX2RlYnVnKCJbVExTIC0gRHVtbXkgQ29ubmVjdGVkXSIpOworICAgICAgICAg ICAgICAgIGVsc2UgaWYgKCB2ZXJib3NpdHkgKSB7CisgICAgICAgICAgICAgICAgICAgIHByaW50 ZigiW1RMUyAtIER1bW15IENvbm5lY3RlZF1cclxuIik7CisgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICAgIGRlYnVnKEYxMTAsImNrX3RuX3Rsc19uZWdvdGlhdGUiLCJbVExTIC0gRHVt bXkgQ29ubmVjdGVkXSIsMCk7CisgICAgICAgICAgICAgICAgYWNjZXB0X2NvbXBsZXRlID0gMTsK KyAgICAgICAgICAgICAgICBhdXRoX2ZpbmlzaGVkKEFVVEhfUkVKRUNUKTsKKyAgICAgICAgICAg ICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKFNTTF9hY2Nl cHQodGxzX2NvbikgPD0gMCkgeworICAgICAgICAgICAgICAgIGNoYXIgZXJyYnVmWzEwMjRdOwor CisgICAgICAgICAgICAgICAgc3ByaW50ZihlcnJidWYsIltUTFMgLSBTU0xfYWNjZXB0IGVycm9y OiAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgRVJSX2Vycm9yX3N0cmluZyhFUlJfZ2V0 X2Vycm9yKCksTlVMTCkpOworCisgICAgICAgICAgICAgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMp CisgICAgICAgICAgICAgICAgICAgIHRuX2RlYnVnKGVycmJ1Zik7CisgICAgICAgICAgICAgICAg ZWxzZSBpZiAoIHNzbF9kZWJ1Z19mbGFnICkKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIl c1xyXG4iLGVycmJ1Zik7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoIHZlcmJvc2l0eSApCisg ICAgICAgICAgICAgICAgICAgIHByaW50ZigiW1RMUyAtIFNTTF9hY2NlcHQgZXJyb3JdXHJcbiIp OworCisgICAgICAgICAgICAgICAgZGVidWcoRjExMCwiY2tfdG5fdGxzX25lZ290aWF0ZSIsZXJy YnVmLDApOworICAgICAgICAgICAgICAgIGF1dGhfZmluaXNoZWQoQVVUSF9SRUpFQ1QpOworICAg ICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYg KHRuX2RlYiB8fCBkZWJzZXMpCisgICAgICAgICAgICAgICAgdG5fZGVidWcoIltUTFMgLSBPS10i KTsKKyAgICAgICAgICAgIGVsc2UgaWYgKCB2ZXJib3NpdHkgKSB7CisgICAgICAgICAgICAgICAg cHJpbnRmKCJbVExTIC0gT0tdXHJcbiIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBk ZWJ1ZyhGMTEwLCJja190bl90bHNfbmVnb3RpYXRlIiwiW1RMUyAtIE9LXSIsMCk7CisgICAgICAg ICAgICB0bHNfYWN0aXZlX2ZsYWcgPSAxOworICAgICAgICAgICAgc3NsX2Rpc3BsYXlfY29ubmVj dF9kZXRhaWxzKHRsc19jb24sMSx2ZXJib3NpdHkpOworCisKKyNpZmRlZiBTU0xfS1JCNQorICAg ICAgICAgICAgaWYgKCB0bHNfaXNfa3JiNSgwKSApIHsKKyAgICAgICAgICAgICAgICBpZiAodGxz X2Nvbi0+a3NzbF9jdHgtPmNsaWVudF9wcmluYykgeworICAgICAgICAgICAgICAgICAgICBjaGFy ICpwOworICAgICAgICAgICAgICAgICAgICBja3N0cm5jcHkoc3pVc2VyTmFtZUF1dGhlbnRpY2F0 ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGxzX2Nvbi0+a3NzbF9jdHgtPmNs aWVudF9wcmluYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVSURCVUZMRU4pOwor ICAgICAgICAgICAgICAgICAgICBja3N0cm5jcHkoc3pVc2VyTmFtZVJlcXVlc3RlZCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB0bHNfY29uLT5rc3NsX2N0eC0+Y2xpZW50X3ByaW5j LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVJREJVRkxFTik7CisgICAgICAgICAg ICAgICAgICAgIGZvciAoIHAgPSBzelVzZXJOYW1lUmVxdWVzdGVkOyAqcCA7IHArKyApIHsKKyAg ICAgICAgICAgICAgICAgICAgICAgIGlmICggKnAgPT0gJ0AnIHx8ICpwID09ICcvJyApIHsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAqcCA9ICdcMCc7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBz elVzZXJOYW1lUmVxdWVzdGVkWzBdID0gJ1wwJzsKKyAgICAgICAgICAgICAgICAgICAgc3pVc2Vy TmFtZUF1dGhlbnRpY2F0ZWRbMF0gPSAnXDAnOworICAgICAgICAgICAgICAgIH0KKyNpZmRlZiBD S19MT0dJTgorICAgICAgICAgICAgICAgIGlmICh6dnVzZXIoc3pVc2VyTmFtZVJlcXVlc3RlZCkp CisgICAgICAgICAgICAgICAgICAgIGF1dGhfZmluaXNoZWQoQVVUSF9WQUxJRCk7CisgICAgICAg ICAgICAgICAgZWxzZQorI2VuZGlmIC8qIENLX0xPR0lOICovCisgICAgICAgICAgICAgICAgICAg IGF1dGhfZmluaXNoZWQoQVVUSF9VU0VSKTsKKyAgICAgICAgICAgIH0gZWxzZQorI2VuZGlmIC8q IFNTTF9LUkI1ICovCisgICAgICAgICAgICB7CisgICAgICAgICAgICAvKiBub3cgY2hlY2sgdG8g c2VlIHRoYXQgd2UgZ290IGV4YWN0bHkgd2hhdCB3ZQorICAgICAgICAgICAgKiB3YW50ZWQgZnJv bSB0aGUgY2FsbGVyIC4uLiBpZiBhIGNlcnRpZmljYXRlIGlzCisgICAgICAgICAgICAqIHJlcXVp cmVkIHRoZW4gd2UgbWFrZSAxMDAlIHN1cmUgdGhhdCB3ZSB3ZXJlCisgICAgICAgICAgICAqIGdp dmVuIG9uZSBkdXJpbmcgdGhlIGhhbmRzaGFrZSAoYXMgaXQgaXMgYW4gb3B0aW9uYWwKKyAgICAg ICAgICAgICogcGFydCBvZiBUTFMpCisgICAgICAgICAgICAqLworICAgICAgICAgICAgcGVlcj1T U0xfZ2V0X3BlZXJfY2VydGlmaWNhdGUodGxzX2Nvbik7CisgICAgICAgICAgICBpZiAocGVlciA9 PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgZGVidWcoRjEwMCwiU1NMX2dldF9wZWVyX2NlcnRp ZmljYXRlKCkgPT0gTlVMTCIsIiIsMCk7CisgICAgICAgICAgICAgICAgYXV0aF9maW5pc2hlZChB VVRIX1JFSkVDVCk7CisgICAgICAgICAgICAgICAgaWYgKHNzbF92ZXJpZnlfZmxhZyAmIFNTTF9W RVJJRllfRkFJTF9JRl9OT19QRUVSX0NFUlQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRu X2RlYiB8fCBkZWJzZXMpCisgICAgICAgICAgICAgICAgICAgICAgICB0bl9kZWJ1ZygiW1RMUyAt IHBlZXIgY2hlY2sgZmFpbGVkXSIpOworICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChzc2xf ZGVidWdfZmxhZykgeworICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJbVExTIC0gcGVl ciBjaGVjayBmYWlsZWRdXHJcbiIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgICAgICAgIGRlYnVnKEYxMTAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2tfdG5f dGxzX25lZ290aWF0ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiW1RMUyAtIHBlZXIg Y2hlY2sgZmFpbGVkXSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisgICAgICAgICAg ICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgICAgICAvKiBMT0dHSU5HIFJFUVVJ UkVEIEhFUkUhICovCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGRlYnVnKEYxMDAs IlNTTF9nZXRfcGVlcl9jZXJ0aWZpY2F0ZSgpICE9IE5VTEwiLCIiLDApOworICAgICAgICAgICAg ICAgIFg1MDlfTkFNRV9nZXRfdGV4dF9ieV9OSUQoWDUwOV9nZXRfc3ViamVjdF9uYW1lKHBlZXIp LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5JRF9jb21tb25O YW1lLHN0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNTYK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAg ICAgICAgIGlmICggdmVyYm9zaXR5ICkKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJbVExT IC0gY29tbW9uTmFtZT0lc11cclxuIixzdHIpOworCisgICAgICAgICAgICAgICAgWDUwOV9OQU1F X2dldF90ZXh0X2J5X05JRChYNTA5X2dldF9zdWJqZWN0X25hbWUocGVlciksCisjaWZuZGVmIE5J RF94NTAwVW5pcXVlSWRlbnRpZmllcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIE5JRF91bmlxdWVJZGVudGlmaWVyLAorI2Vsc2UKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBOSURfeDUwMFVuaXF1ZUlkZW50aWZpZXIsCisjZW5k aWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjU2CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICBpZiAoIHZl cmJvc2l0eSApCisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiW1RMUyAtIHVuaXF1ZUlkZW50 aWZpZXI9JXNdXHJcbiIsc3RyKTsKKworICAgICAgICAgICAgICAgIC8qIFRyeSB0byBkZXRlcm1p bmUgdXNlciBuYW1lICovCisgICAgICAgICAgICAgICAgdWlkID0gdGxzX3VzZXJpZF9mcm9tX2Ns aWVudF9jZXJ0KHRsc19jb24pOworICAgICAgICAgICAgICAgIGlmICggdWlkICkgeworICAgICAg ICAgICAgICAgICAgICAvKiBUaGlzIGNvZGUgaXMgdmVyeSBxdWVzdGlvbmFibGUuCisgICAgICAg ICAgICAgICAgICAgICAqIEhvdyBzaG91bGQgaXQgYmVoYXZlPworICAgICAgICAgICAgICAgICAg ICAgKiBUaGUgY2xpZW50IGhhcyBwcmVzZW50ZWQgYSBjZXJ0aWZpY2F0ZSB0aGF0CisgICAgICAg ICAgICAgICAgICAgICAqIGNvbnRhaW5zIGEgdXNlcm5hbWUuICBXZSBoYXZlIHZhbGlkYXRlZCB0 aGUKKyAgICAgICAgICAgICAgICAgICAgICogY2VydGlmaWNhdGUgYnV0IHdlIGRvIG5vdCBhdXRv bWF0aWNhbGx5CisgICAgICAgICAgICAgICAgICAgICAqIGxvZyB0aGUgdXNlciBpbiB1bmxlc3Mg dGhlcmUgaXMgYSAudGxzbG9naW4KKyAgICAgICAgICAgICAgICAgICAgICogZmlsZS4KKyAgICAg ICAgICAgICAgICAgICAgICovCisKKyAgICAgICAgICAgICAgICAgICAgY2tzdHJuY3B5KHN6VXNl ck5hbWVSZXF1ZXN0ZWQsdWlkLFVJREJVRkxFTik7CisjaWZkZWYgQ0tfTE9HSU4KKyAgICAgICAg ICAgICAgICAgICAgaWYgKHp2dXNlcih1aWQpKQorICAgICAgICAgICAgICAgICAgICAgICAgYXV0 aF9maW5pc2hlZChBVVRIX1ZBTElEKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorI2VuZGlm IC8qIENLX0xPR0lOICovCisgICAgICAgICAgICAgICAgICAgICAgICBhdXRoX2ZpbmlzaGVkKEFV VEhfVVNFUik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAg ICAgICAgICAgICAgICAgICBzelVzZXJOYW1lUmVxdWVzdGVkWzBdID0gJ1wwJzsKKyAgICAgICAg ICAgICAgICAgICAgYXV0aF9maW5pc2hlZChBVVRIX1JFSkVDVCk7CisgICAgICAgICAgICAgICAg fQorICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSBlbHNlIHsK KyAgICAgICAgY2hhciAqIHN0cj1OVUxMOworCisgICAgICAgIGlmICh0bl9kZWIgfHwgZGVic2Vz KQorICAgICAgICAgICAgdG5fZGVidWcoIltUTFMgLSBoYW5kc2hha2Ugc3RhcnRpbmddIik7Cisg ICAgICAgIGVsc2UgaWYgKCB2ZXJib3NpdHkgKQorICAgICAgICAgICAgcHJpbnRmKCJbVExTIC0g aGFuZHNoYWtlIHN0YXJ0aW5nXVxyXG4iKTsKKyAgICAgICAgZGVidWcoRjExMCwiY2tfdG5fdGxz X25lZ290aWF0ZSIsIltUTFMgLSBoYW5kc2hha2Ugc3RhcnRpbmddIiwwKTsKKworICAgICAgICAv KiByaWdodCAuLi4gbm93IHdlIGRyb3AgaW50byB0aGUgU1NMIGxpYnJhcnkgKi8KKyAgICAgICAg aWYgKCF0bHNfb25seV9mbGFnKSB7CisgICAgICAgICAgICBjaGFyICpzdWJqZWN0PU5VTEwsICpp c3N1ZXI9TlVMTCwgKmNvbW1vbk5hbWU9TlVMTCwgKmROU05hbWU9TlVMTDsKKworICAgICAgICAg ICAgaWYgKHNzbF9kdW1teV9mbGFnKSB7CisgICAgICAgICAgICAgICAgaWYgKHRuX2RlYiB8fCBk ZWJzZXMpCisgICAgICAgICAgICAgICAgICAgIHRuX2RlYnVnKCJbVExTIC0gRHVtbXkgQ29ubmVj dGVkXSIpOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKCB2ZXJib3NpdHkgKSB7CisgICAgICAg ICAgICAgICAgICAgIHByaW50ZigiW1RMUyAtIER1bW15IENvbm5lY3RlZF1cclxuIik7CisgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsImNrX3RuX3Rsc19uZWdv dGlhdGUiLCJbVExTIC0gRHVtbXkgQ29ubmVjdGVkXSIsMCk7CisgICAgICAgICAgICAgICAgYXV0 aF9maW5pc2hlZChBVVRIX1JFSkVDVCk7CisgICAgICAgICAgICAgICAgYWNjZXB0X2NvbXBsZXRl ID0gMTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKworI2lmbmRl ZiBVU0VfQ0VSVF9DQgorICAgICAgICAgICAgaWYgKCF0bHNfbG9hZF9jZXJ0cyh0bHNfY3R4LHRs c19jb24sMCkpCisgICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyNlbmRpZiAvKiBVU0VfQ0VS VF9DQiAqLworICAgICAgICAgICAgaWYgKFNTTF9jb25uZWN0KHRsc19jb24pIDw9IDApIHsKKyAg ICAgICAgICAgICAgICBpbnQgbGVuOworICAgICAgICAgICAgICAgIGlmICh0bl9kZWIgfHwgZGVi c2VzKSB7CisgICAgICAgICAgICAgICAgICAgIHRuX2RlYnVnKCJbVExTIC0gRkFJTEVEXSIpOwor ICAgICAgICAgICAgICAgICAgICBFUlJfcHJpbnRfZXJyb3JzKGJpb19lcnIpOworICAgICAgICAg ICAgICAgICAgICBsZW4gPSBCSU9fcmVhZChiaW9fZXJyLHNzbF9lcnIsU1NMX0VSUl9CRlNaKTsK KyAgICAgICAgICAgICAgICAgICAgc3NsX2VycltsZW4gPCBTU0xfRVJSX0JGU1ogPyBsZW4gOiBT U0xfRVJSX0JGU1pdID0gJ1wwJzsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKHNzbF9lcnIp OworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIHZlcmJvc2l0eSApIHsKKyAgICAgICAgICAg ICAgICAgICAgcHJpbnRmKCJbVExTIC0gRkFJTEVEXVxyXG4iKTsKKyAgICAgICAgICAgICAgICAg ICAgRVJSX3ByaW50X2Vycm9ycyhiaW9fZXJyKTsKKyAgICAgICAgICAgICAgICAgICAgbGVuID0g QklPX3JlYWQoYmlvX2Vycixzc2xfZXJyLFNTTF9FUlJfQkZTWik7CisgICAgICAgICAgICAgICAg ICAgIHNzbF9lcnJbbGVuIDwgU1NMX0VSUl9CRlNaID8gbGVuIDogU1NMX0VSUl9CRlNaXSA9ICdc MCc7CisgICAgICAgICAgICAgICAgICAgIHByaW50Zihzc2xfZXJyKTsKKyAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICAgICAgZGVidWcoRjExMCwiY2tfdG5fdGxzX25lZ290aWF0ZSIsIltU TFMgLSBGQUlMRURdIiwwKTsKKyAgICAgICAgICAgICAgICBhdXRoX2ZpbmlzaGVkKEFVVEhfUkVK RUNUKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisKKyAgICAg ICAgICAgIHRsc19hY3RpdmVfZmxhZyA9IDE7CisgICAgICAgICAgICBpZiAoICFzc2xfY2VydHNv a19mbGFnICYmIChzc2xfdmVyaWZ5X2ZsYWcgJiBTU0xfVkVSSUZZX1BFRVIpCisgICAgICAgICAg ICAgICAgICYmICF0bHNfaXNfa3JiNSgwKSkgeworICAgICAgICAgICAgICAgIGNoYXIgcHJtcHRb MTAyNF07CisgICAgICAgICAgICAgICAgc3ViamVjdCA9IHNzbF9nZXRfc3ViamVjdF9uYW1lKHRs c19jb24pOworCisgICAgICAgICAgICAgICAgaWYgKCFzdWJqZWN0KSB7CisgICAgICAgICAgICAg ICAgICAgIGlmIChzc2xfdmVyaWZ5X2ZsYWcgJiBTU0xfVkVSSUZZX0ZBSUxfSUZfTk9fUEVFUl9D RVJUKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo dG5fZGViIHx8IGRlYnNlcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bl9kZWJ1Zygi W1RMUyAtIEZBSUxFRF0iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCB2ZXJi b3NpdHkgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiW1RMUyAtIEZBSUxF RF1cclxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJja190bl90bHNf bmVnb3RpYXRlIiwiW1RMUyAtIEZBSUxFRF0iLDApOworICAgICAgICAgICAgICAgICAgICAgICAg YXV0aF9maW5pc2hlZChBVVRIX1JFSkVDVCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1 cm4gLTE7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg ICAgICBpbnQgb2s7CisgICAgICAgICAgICAgICAgICAgICAgICBvayA9IHVxX29rKCJXYXJuaW5n OiBTZXJ2ZXIgZGlkbid0IHByb3ZpZGUgYSBjZXJ0aWZpY2F0ZSIsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICJDb250aW51ZT8gKFkvTikiLCAzLCBOVUxMLCAwKTsKKyAgICAg ICAgICAgICAgICAgICAgICAgIGlmICghb2spIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpZiAodG5fZGViIHx8IGRlYnNlcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dG5fZGVidWcoIltUTFMgLSBGQUlMRURdIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZWxzZSBpZiAoIHZlcmJvc2l0eSApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBy aW50ZigiW1RMUyAtIEZBSUxFRF1cclxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZGVidWcoRjExMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNrX3RuX3Rs c19uZWdvdGlhdGUiLCJbVExTIC0gRkFJTEVEXSIsMCk7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgYXV0aF9maW5pc2hlZChBVVRIX1JFSkVDVCk7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzc2xfY2hlY2tfc2VydmVyX25h bWUodGxzX2Nvbiwgc3pIb3N0TmFtZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRuX2Rl YiB8fCBkZWJzZXMpCisgICAgICAgICAgICAgICAgICAgICAgICB0bl9kZWJ1ZygiW1RMUyAtIEZB SUxFRF0iKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIHZlcmJvc2l0eSApCisgICAg ICAgICAgICAgICAgICAgICAgICBwcmludGYoIltUTFMgLSBGQUlMRURdXHJcbiIpOworICAgICAg ICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImNr X3RuX3Rsc19uZWdvdGlhdGUiLCJbVExTIC0gRkFJTEVEXSIsMCk7CisgICAgICAgICAgICAgICAg ICAgIGF1dGhfZmluaXNoZWQoQVVUSF9SRUpFQ1QpOworICAgICAgICAgICAgICAgICAgICByZXR1 cm4gLTE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp ZiAoIHNzbF9kZWJ1Z19mbGFnICYmIHNzbF9maW5pc2hlZF9tZXNzYWdlcykgeworICAgICAgICAg ICAgICAgIGNoYXIgbXNnWzMyXTsKKyAgICAgICAgICAgICAgICBpbnQgaSwgbGVuPTMyOworICAg ICAgICAgICAgICAgIGV4dGVybiBjaGFyIHRuX21zZ1tdLCBoZXhidWZbXTsKKworICAgICAgICAg ICAgICAgIHRuX21zZ1swXSA9ICdcMCc7CisgICAgICAgICAgICAgICAgbGVuID0gc3NsX2dldF9j bGllbnRfZmluaXNoZWQobXNnLGxlbik7CisgICAgICAgICAgICAgICAgaWYgKCBsZW4gPiAwICkg eworICAgICAgICAgICAgICAgICAgICBmb3IgKCBpPTA7aTxsZW47aSsrICkgeworICAgICAgICAg ICAgICAgICAgICAgICAgc3ByaW50ZihoZXhidWYsIiUwMlggIixtc2dbaV0pOworICAgICAgICAg ICAgICAgICAgICAgICAgY2tzdHJuY2F0KHRuX21zZyxoZXhidWYsVE5fTVNHX0xFTik7CisgICAg ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJUTFMgY2xpZW50 IGZpbmlzaGVkOiAlc1xyXG4iLHRuX21zZyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICAgIHRuX21zZ1swXSA9ICdcMCc7CisgICAgICAgICAgICAgICAgbGVuID0gc3NsX2dldF9z ZXJ2ZXJfZmluaXNoZWQobXNnLGxlbik7CisgICAgICAgICAgICAgICAgaWYgKCBsZW4gPiAwICkg eworICAgICAgICAgICAgICAgICAgICBmb3IgKCBpPTA7aTxsZW47aSsrICkgeworICAgICAgICAg ICAgICAgICAgICAgICAgc3ByaW50ZihoZXhidWYsIiUwMlggIixtc2dbaV0pOworICAgICAgICAg ICAgICAgICAgICAgICAgY2tzdHJuY2F0KHRuX21zZyxoZXhidWYsVE5fTVNHX0xFTik7CisgICAg ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJUTFMgc2VydmVy IGZpbmlzaGVkOiAlc1xyXG4iLHRuX21zZyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgfQorCisgICAgICAgICAgICBpZiAodG5fZGViIHx8IGRlYnNlcykKKyAgICAgICAgICAgICAg ICB0bl9kZWJ1ZygiW1RMUyAtIE9LXSIpOworICAgICAgICAgICAgZWxzZSBpZiAoIHZlcmJvc2l0 eSApCisgICAgICAgICAgICAgICAgcHJpbnRmKCJbVExTIC0gT0tdXHJcbiIpOworICAgICAgICAg ICAgZGVidWcoRjExMCwiY2tfdG5fdGxzX25lZ290aWF0ZSIsIltUTFMgLSBPS10iLDApOworCisg ICAgICAgICAgICBzc2xfZGlzcGxheV9jb25uZWN0X2RldGFpbHModGxzX2NvbiwwLHZlcmJvc2l0 eSk7CisgICAgICAgIH0KKyAgICAgICAgYXV0aF9maW5pc2hlZChBVVRIX1JFSkVDVCk7CisgICAg fQorICAgIGFjY2VwdF9jb21wbGV0ZSA9IDE7CisgICAgYXV0aF9zc2xfdmFsaWQgPSAxOworICAg IHJldHVybigwKTsKK30KKworaW50Citja19zc2xfaW5jb21pbmcoZmQpIGludCBmZDsKK3sKKyAg ICAvKiBpZiB3ZSBhcmUgbm90IHJ1bm5pbmcgaW4gZGVidWcgdGhlbiBhbnkgZXJyb3IKKyAgICAq IHN0dWZmIGZyb20gU1NMIGRlYnVnICptdXN0KiBub3QgZ28gZG93bgorICAgICogdGhlIHNvY2tl dCAod2hpY2ggMCwxLDIgYXJlIGFsbCBwb2ludGluZyB0byBieQorICAgICogZGVmYXVsdCkKKyAg ICAqLworCisgICAgaW50IHRpbW8gPSAyMDAwOworCisgICAgc2V0dmVyYm9zaXR5KCk7CisgICAg aWYgKCAhY2tfc3NsZWF5X2lzX2luc3RhbGxlZCgpICkKKyAgICAgICAgcmV0dXJuKC0xKTsKKwor ICAgIC8qIGRvIHRoZSBTU0wgc3R1ZmYgbm93IC4uLiBiZWZvcmUgd2UgcGxheSB3aXRoIHB0eSdz ICovCisgICAgU1NMX3NldF9mZChzc2xfY29uLGZkKTsKKyAgICBTU0xfc2V0X2ZkKHRsc19jb24s ZmQpOworCisgICAgaWYgKHRsc19vbmx5X2ZsYWcpIHsKKyAgICAgICAgaWYgKHRuX2RlYiB8fCBk ZWJzZXMpCisgICAgICAgICAgICB0bl9kZWJ1ZygiW1RMUyAtIGhhbmRzaGFrZSBzdGFydGluZ10i KTsKKyAgICAgICAgZWxzZSBpZiAoIHZlcmJvc2l0eSApCisgICAgICAgICAgICBwcmludGYoIltU TFMgLSBoYW5kc2hha2Ugc3RhcnRpbmddXHJcbiIpOworICAgICAgICBkZWJ1ZyhGMTEwLCJja19z c2xfaW5jb21pbmciLCJbVExTIC0gaGFuZHNoYWtlIHN0YXJ0aW5nXSIsMCk7CisKKyAgICAgICAg LyogaG1tIC4uLiBvbmx5IHdoZW4gcnVubmluZyB0YWxraW5nIHRvIHRoaW5ncyBsaWtlCisgICAg ICAgICogaHR0cHMgc2VydmVycyBzaG91bGQgd2UgaGl0IHRoaXMgY29kZSBhbmQgdGhlbgorICAg ICAgICAqIHdlIHJlYWxseSBkb24ndCBjYXJlICp3aG8qIHdlIHRhbGsgdG8gOi0pCisgICAgICAg ICovCisgICAgICAgIGlmIChTU0xfYWNjZXB0KHRsc19jb24pIDw9IDApIHsKKyAgICAgICAgICAg IGNoYXIgZXJyYnVmWzEwMjRdOworCisgICAgICAgICAgICBzcHJpbnRmKGVycmJ1ZiwiW1RMUyAt IFNTTF9hY2NlcHQgZXJyb3I6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgIEVSUl9lcnJvcl9z dHJpbmcoRVJSX2dldF9lcnJvcigpLE5VTEwpKTsKKworICAgICAgICAgICAgaWYgKHRuX2RlYiB8 fCBkZWJzZXMpCisgICAgICAgICAgICAgICAgdG5fZGVidWcoZXJyYnVmKTsKKyAgICAgICAgICAg IGVsc2UgaWYgKCBzc2xfZGVidWdfZmxhZyApCisgICAgICAgICAgICAgICAgcHJpbnRmKCIlc1xy XG4iLGVycmJ1Zik7CisgICAgICAgICAgICBlbHNlIGlmICggdmVyYm9zaXR5ICkKKyAgICAgICAg ICAgICAgICBwcmludGYoIltUTFMgLSBTU0xfYWNjZXB0IGVycm9yXVxyXG4iKTsKKworICAgICAg ICAgICAgZGVidWcoRjExMCwiY2tfc3NsX2luY29taW5nIixlcnJidWYsMCk7CisgICAgICAgICAg ICByZXR1cm4oLTEpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKHRuX2RlYiB8 fCBkZWJzZXMpCisgICAgICAgICAgICAgICAgdG5fZGVidWcoIltUTFMgLSBPS10iKTsKKyAgICAg ICAgICAgIGVsc2UgaWYgKCB2ZXJib3NpdHkgKQorICAgICAgICAgICAgICAgIHByaW50ZigiW1RM UyAtIE9LXVxyXG4iKTsKKyAgICAgICAgICAgIGRlYnVnKEYxMTAsImNrX3NzbF9pbmNvbWluZyIs IltUTFMgLSBPS10iLDApOworICAgICAgICAgICAgdGxzX2FjdGl2ZV9mbGFnID0gMTsKKyAgICAg ICAgfQorICAgIH0gZWxzZSBpZiAoc3NsX29ubHlfZmxhZykgeworICAgICAgICBpZiAodG5fZGVi IHx8IGRlYnNlcykKKyAgICAgICAgICAgIHRuX2RlYnVnKCJbU1NMIC0gaGFuZHNoYWtlIHN0YXJ0 aW5nXSIpOworICAgICAgICBlbHNlIGlmICggdmVyYm9zaXR5ICkKKyAgICAgICAgICAgIHByaW50 ZigiW1NTTCAtIGhhbmRzaGFrZSBzdGFydGluZ11cclxuIik7CisgICAgICAgIGRlYnVnKEYxMTAs ImNrX3NzbF9pbmNvbWluZyIsIltTU0wgLSBoYW5kc2hha2Ugc3RhcnRpbmddIiwwKTsKKworICAg ICAgICAvKiBobW0gLi4uIG9ubHkgd2hlbiBydW5uaW5nIHRhbGtpbmcgdG8gdGhpbmdzIGxpa2UK KyAgICAgICAgICogaHR0cHMgc2VydmVycyBzaG91bGQgd2UgaGl0IHRoaXMgY29kZSBhbmQgdGhl bgorICAgICAgICAgKiB3ZSByZWFsbHkgZG9uJ3QgY2FyZSAqd2hvKiB3ZSB0YWxrIHRvIDotKQor ICAgICAgICAgKi8KKyAgICAgICAgaWYgKFNTTF9hY2NlcHQoc3NsX2NvbikgPD0gMCkgeworICAg ICAgICAgICAgY2hhciBlcnJidWZbMTAyNF07CisKKyAgICAgICAgICAgIHNwcmludGYoZXJyYnVm LCJbU1NMIC0gU1NMX2FjY2VwdCBlcnJvcjogJXMiLAorICAgICAgICAgICAgICAgICAgICAgRVJS X2Vycm9yX3N0cmluZyhFUlJfZ2V0X2Vycm9yKCksTlVMTCkpOworCisgICAgICAgICAgICBpZiAo dG5fZGViIHx8IGRlYnNlcykKKyAgICAgICAgICAgICAgICB0bl9kZWJ1ZyhlcnJidWYpOworICAg ICAgICAgICAgZWxzZSBpZiAoIHNzbF9kZWJ1Z19mbGFnICkKKyAgICAgICAgICAgICAgICBwcmlu dGYoIiVzXHJcbiIsZXJyYnVmKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKCB2ZXJib3NpdHkgKQor ICAgICAgICAgICAgICAgIHByaW50ZigiW1NTTCAtIFNTTF9hY2NlcHQgZXJyb3JdXHJcbiIpOwor CisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJja19zc2xfaW5jb21pbmciLGVycmJ1ZiwwKTsKKyAg ICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAo dG5fZGViIHx8IGRlYnNlcykKKyAgICAgICAgICAgICAgICB0bl9kZWJ1ZygiW1NTTCAtIE9LXSIp OworICAgICAgICAgICAgZWxzZSBpZiAoIHZlcmJvc2l0eSApCisgICAgICAgICAgICBwcmludGYo IltTU0wgLSBPS11cclxuIik7CisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJzc2xfaXMiLCJbU1NM IC0gT0tdIiwwKTsKKyAgICAgICAgICAgIHNzbF9hY3RpdmVfZmxhZyA9IDE7CisgICAgICAgIH0K KyAgICB9CisgICAgaWYgKHNzbF9hY3RpdmVfZmxhZyB8fCB0bHNfYWN0aXZlX2ZsYWcpIHsKKyAg ICAgICAgWDUwOSAqcGVlcjsKKyAgICAgICAgY2hhciBzdHJbMjU2XSwgKnVpZD1OVUxMOworCisg ICAgICAgIC8qIG5vdyBjaGVjayB0byBzZWUgdGhhdCB3ZSBnb3QgZXhhY3RseSB3aGF0IHdlCisg ICAgICAgICAqIHdhbnRlZCBmcm9tIHRoZSBjYWxsZXIgLi4uIGlmIGEgY2VydGlmaWNhdGUgaXMK KyAgICAgICAgICogcmVxdWlyZWQgdGhlbiB3ZSBtYWtlIDEwMCUgc3VyZSB0aGF0IHdlIHdlcmUK KyAgICAgICAgICogZ2l2ZW4gb24gZHVyaW5nIHRoZSBoYW5kc2hha2UgKGFzIGl0IGlzIGFuIG9w dGlvbmFsCisgICAgICAgICAqIHBhcnQgb2YgU1NMIGFuZCBUTFMpCisgICAgICAgICAqLworCisg ICAgICAgIGlmICggdGxzX2FjdGl2ZV9mbGFnICkgeworICAgICAgICAgICAgcGVlcj1TU0xfZ2V0 X3BlZXJfY2VydGlmaWNhdGUodGxzX2Nvbik7CisgICAgICAgIH0gZWxzZSBpZiAoIHNzbF9hY3Rp dmVfZmxhZyApIHsKKyAgICAgICAgICAgIHBlZXI9U1NMX2dldF9wZWVyX2NlcnRpZmljYXRlKHNz bF9jb24pOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHBlZXIgPT0gTlVMTCkgeworICAgICAg ICAgICAgZGVidWcoRjEwMCwiU1NMX2dldF9wZWVyX2NlcnRpZmljYXRlKCkgPT0gTlVMTCIsIiIs MCk7CisgICAgICAgICAgICBhdXRoX2ZpbmlzaGVkKEFVVEhfUkVKRUNUKTsKKworICAgICAgICAg ICAgaWYgKHNzbF92ZXJpZnlfZmxhZyAmIFNTTF9WRVJJRllfRkFJTF9JRl9OT19QRUVSX0NFUlQp IHsKKyAgICAgICAgICAgICAgICBpZiAodG5fZGViIHx8IGRlYnNlcykKKyAgICAgICAgICAgICAg ICAgICAgdG5fZGVidWcoIltTU0wvVExTIC0gcGVlciBjaGVjayBmYWlsZWRdIik7CisgICAgICAg ICAgICAgICAgZWxzZSBpZiAoc3NsX2RlYnVnX2ZsYWcpIHsKKyAgICAgICAgICAgICAgICAgICAg cHJpbnRmKCJbU1NML1RMUyAtIHBlZXIgY2hlY2sgZmFpbGVkXVxyXG4iKTsKKyAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgICAgZGVidWcoRjExMCwKKyAgICAgICAgICAgICAgICAgICAg ICAgImNrX3RuX3Rsc19uZWdvdGlhdGUiLAorICAgICAgICAgICAgICAgICAgICAgICAiW1NTTC9U TFMgLSBwZWVyIGNoZWNrIGZhaWxlZF0iLAorICAgICAgICAgICAgICAgICAgICAgICAwCisgICAg ICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgLyogTE9HR0lORyBSRVFVSVJF RCBIRVJFISAqLworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKwor ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZGVidWcoRjEwMCwiU1NMX2dldF9wZWVyX2Nl cnRpZmljYXRlKCkgIT0gTlVMTCIsIiIsMCk7CisgICAgICAgICAgICBYNTA5X05BTUVfZ2V0X3Rl eHRfYnlfTklEKFg1MDlfZ2V0X3N1YmplY3RfbmFtZShwZWVyKSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIE5JRF9jb21tb25OYW1lLHN0ciwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDI1NgorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIHByaW50ZigiW1RMUyAtIGNvbW1vbk5hbWU9JXNd XHJcbiIsc3RyKTsKKworICAgICAgICAgICAgWDUwOV9OQU1FX2dldF90ZXh0X2J5X05JRChYNTA5 X2dldF9zdWJqZWN0X25hbWUocGVlciksCisjaWZuZGVmIE5JRF94NTAwVW5pcXVlSWRlbnRpZmll cgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTklEX3VuaXF1ZUlkZW50 aWZpZXIsCisjZWxzZSAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg TklEX3g1MDBVbmlxdWVJZGVudGlmaWVyLAorI2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzdHIsMjU2CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICApOworICAgICAgICAgICAgcHJpbnRmKCJbVExTIC0gdW5pcXVlSWRlbnRpZmllcj0l c11cclxuIixzdHIpOworCisgICAgICAgICAgICAvKiBUcnkgdG8gZGV0ZXJtaW5lIHVzZXIgbmFt ZSAqLworICAgICAgICAgICAgdWlkID0gdGxzX3VzZXJpZF9mcm9tX2NsaWVudF9jZXJ0KHRsc19j b24pOworICAgICAgICAgICAgaWYgKCB1aWQgKSB7CisgICAgICAgICAgICAgICAgLyogVGhpcyBj b2RlIGlzIHZlcnkgcXVlc3Rpb25hYmxlLgorICAgICAgICAgICAgICAgICogSG93IHNob3VsZCBp dCBiZWhhdmU/CisgICAgICAgICAgICAgICAgKiBUaGUgY2xpZW50IGhhcyBwcmVzZW50ZWQgYSBj ZXJ0aWZpY2F0ZSB0aGF0CisgICAgICAgICAgICAgICAgKiBjb250YWlucyBhIHVzZXJuYW1lLiAg V2UgaGF2ZSB2YWxpZGF0ZWQgdGhlCisgICAgICAgICAgICAgICAgKiBjZXJ0aWZpY2F0ZSBidXQg d2UgZG8gbm90IGF1dG9tYXRpY2FsbHkKKyAgICAgICAgICAgICAgICAqIGxvZyB0aGUgdXNlciBp biB1bmxlc3MgdGhlcmUgaXMgYSAudGxzbG9naW4KKyAgICAgICAgICAgICAgICAqIGZpbGUuCisg ICAgICAgICAgICAgICAgKi8KKworICAgICAgICAgICAgICAgIGNrc3RybmNweShzelVzZXJOYW1l UmVxdWVzdGVkLHVpZCxVSURCVUZMRU4pOworI2lmZGVmIENLX0xPR0lOCisgICAgICAgICAgICAg ICAgaWYgKHp2dXNlcih1aWQpKQorICAgICAgICAgICAgICAgICAgICBhdXRoX2ZpbmlzaGVkKEFV VEhfVkFMSUQpOworICAgICAgICAgICAgICAgIGVsc2UKKyNlbmRpZiAvKiBDS19MT0dJTiAqLwor ICAgICAgICAgICAgICAgICAgICBhdXRoX2ZpbmlzaGVkKEFVVEhfVVNFUik7CisgICAgICAgICAg ICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBzelVzZXJOYW1lUmVxdWVz dGVkWzBdID0gJ1wwJzsKKyAgICAgICAgICAgICAgICBhdXRoX2ZpbmlzaGVkKEFVVEhfUkVKRUNU KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4oMCk7ICAvKiBz dWNjZXNzICovCit9CisKK2ludAorY2tfc3NsX291dGdvaW5nKGZkKSBpbnQgZmQ7Cit7CisgICAg aW50IHRpbW8gPSAyMDAwOworCisgICAgc2V0dmVyYm9zaXR5KCk7CisgICAgaWYgKCAhY2tfc3Ns ZWF5X2lzX2luc3RhbGxlZCgpICkKKyAgICAgICAgcmV0dXJuKC0xKTsKKworICAgIC8qIGJpbmQg aW4gdGhlIG5ldHdvcmsgZGVzY3JpcHRvciAqLworICAgIFNTTF9zZXRfZmQoc3NsX2NvbixmZCk7 CisgICAgU1NMX3NldF9mZCh0bHNfY29uLGZkKTsKKworICAgIC8qIElmIHdlIGFyZSBkb2luZyBy YXcgVExTIHRoZW4gc3RhcnQgaXQgbm93IC4uLiAqLworICAgIGlmICh0bHNfb25seV9mbGFnKSB7 CisjaWZuZGVmIFVTRV9DRVJUX0NCCisgICAgICAgIGlmICghdGxzX2xvYWRfY2VydHModGxzX2N0 eCx0bHNfY29uLDApKSB7CisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJja19zc2xfb3V0Z29pbmci LCJ0bHNfbG9hZF9jZXJ0cygpIGZhaWxlZCIsMCk7CisgICAgICAgICAgICByZXR1cm4oLTEpOwor ICAgICAgICB9CisjZW5kaWYgLyogVVNFX0NFUlRfQ0IgKi8KKyAgICAgICAgaWYgKHRuX2RlYiB8 fCBkZWJzZXMpCisgICAgICAgICAgICB0bl9kZWJ1ZygiW1RMUyAtIGhhbmRzaGFrZSBzdGFydGlu Z10iKTsKKyAgICAgICAgZWxzZSBpZiAodmVyYm9zaXR5KQorICAgICAgICAgICAgcHJpbnRmKCJb VExTIC0gaGFuZHNoYWtlIHN0YXJ0aW5nXVxyXG4iKTsKKyAgICAgICAgZGVidWcoRjExMCwiY2tf c3NsX291dGdvaW5nIiwiW1RMUyAtIGhhbmRzaGFrZSBzdGFydGluZ10iLDApOworICAgICAgICBp ZiAoU1NMX2Nvbm5lY3QodGxzX2NvbikgPD0gMCkgeworICAgICAgICAgICAgY2hhciBlcnJidWZb MTAyNF07CisKKyAgICAgICAgICAgIHNwcmludGYoZXJyYnVmLCJbVExTIC0gU1NMX2Nvbm5lY3Qg ZXJyb3I6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgIEVSUl9lcnJvcl9zdHJpbmcoRVJSX2dl dF9lcnJvcigpLE5VTEwpKTsKKworICAgICAgICAgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpCisg ICAgICAgICAgICAgICAgdG5fZGVidWcoZXJyYnVmKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKCBz c2xfZGVidWdfZmxhZyApCisgICAgICAgICAgICAgICAgcHJpbnRmKCIlc1xyXG4iLGVycmJ1Zik7 CisKKyAgICAgICAgICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKQorICAgICAgICAgICAgICAgIHRu X2RlYnVnKCJbVExTIC0gRkFJTEVEXSIpOworICAgICAgICAgICAgZWxzZSBpZiAoIHZlcmJvc2l0 eSApCisgICAgICAgICAgICAgICAgcHJpbnRmKCJbVExTIC0gRkFJTEVEXVxyXG4iKTsKKyAgICAg ICAgICAgIGRlYnVnKEYxMTAsImNrX3NzbF9vdXRnb2luZyIsIltUTFMgLSBGQUlMRURdIiwwKTsK KyAgICAgICAgICAgIG5ldGNsb3MoKTsKKyAgICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAg IH0gZWxzZSB7CisgICAgICAgICAgICB0bHNfYWN0aXZlX2ZsYWcgPSAxOworICAgICAgICAgICAg aWYgKCAhc3NsX2NlcnRzb2tfZmxhZyAmJiAoc3NsX3ZlcmlmeV9mbGFnICYgU1NMX1ZFUklGWV9Q RUVSKSAmJiAKKyAgICAgICAgICAgICAgICAgIXRsc19pc19rcmI1KDApICkgeworICAgICAgICAg ICAgICAgIGNoYXIgKnN1YmplY3QgPSBzc2xfZ2V0X3N1YmplY3RfbmFtZSh0bHNfY29uKTsKKwor ICAgICAgICAgICAgICAgIGlmICghc3ViamVjdCkgeworICAgICAgICAgICAgICAgICAgICBpZiAo c3NsX3ZlcmlmeV9mbGFnICYgU1NMX1ZFUklGWV9GQUlMX0lGX05PX1BFRVJfQ0VSVCkKKyAgICAg ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRuX2RlYiB8fCBk ZWJzZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG5fZGVidWcoIltUTFMgLSBGQUlM RURdIik7CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICggdmVyYm9zaXR5ICkKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIltUTFMgLSBGQUlMRURdXHJcbiIpOwor ICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoRjExMCwiY2tfdG5fdGxzX25lZ290aWF0ZSIs IltUTFMgLSBGQUlMRURdIiwwKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgYXV0aF9maW5p c2hlZChBVVRIX1JFSkVDVCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Cisg ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjaGFy IHBybXB0WzEwMjRdOworICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9rOworICAgICAgICAg ICAgICAgICAgICAgICAgb2sgPSB1cV9vaygiV2FybmluZzogU2VydmVyIGRpZG4ndCBwcm92aWRl IGEgY2VydGlmaWNhdGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ29u dGludWU/IChZL04pIiwgMywgTlVMTCwgMCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo IW9rKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMp CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRuX2RlYnVnKCJbVExTIC0gRkFJTEVE XSIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCB2ZXJib3NpdHkgKQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIltUTFMgLSBGQUlMRURdXHJc biIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICJja190bl90bHNfbmVnb3RpYXRlIiwiW1RMUyAtIEZB SUxFRF0iLDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhfZmluaXNoZWQoQVVU SF9SRUpFQ1QpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAg ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg ICAgIH0gZWxzZSBpZiAoc3NsX2NoZWNrX3NlcnZlcl9uYW1lKHRsc19jb24sIHN6SG9zdE5hbWUp KSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKQorICAgICAgICAg ICAgICAgICAgICAgICAgdG5fZGVidWcoIltUTFMgLSBGQUlMRURdIik7CisgICAgICAgICAgICAg ICAgICAgIGVsc2UgaWYgKCB2ZXJib3NpdHkgKQorICAgICAgICAgICAgICAgICAgICAgICAgcHJp bnRmKCJbVExTIC0gRkFJTEVEXVxyXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEx MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJja190bl90bHNfbmVnb3RpYXRlIiwiW1RM UyAtIEZBSUxFRF0iLDApOworICAgICAgICAgICAgICAgICAgICBhdXRoX2ZpbmlzaGVkKEFVVEhf UkVKRUNUKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKQorICAg ICAgICAgICAgICAgIHRuX2RlYnVnKCJbVExTIC0gT0tdIik7CisgICAgICAgICAgICBlbHNlIGlm ICghcXVpZXQpCisJCXByaW50ZigiW1RMUyAtIE9LXVxyXG4iKTsKKyAgICAgICAgICAgIGRlYnVn KEYxMTAsImNrX3NzbF9vdXRnb2luZyIsIltUTFMgLSBPS10iLDApOworICAgICAgICAgICAgc3Ns X2Rpc3BsYXlfY29ubmVjdF9kZXRhaWxzKHRsc19jb24sMCx2ZXJib3NpdHkpOworICAgICAgICB9 CisgICAgfQorICAgIC8qIGlmIHdlIGFyZSBkb2luZyByYXcgU1NMIHRoZW4gc3RhcnQgaXQgbm93 IC4uLiAqLworICAgIGVsc2UgaWYgKHNzbF9vbmx5X2ZsYWcpIHsKKyNpZm5kZWYgVVNFX0NFUlRf Q0IKKyAgICAgICAgaWYgKCF0bHNfbG9hZF9jZXJ0cyhzc2xfY3R4LHNzbF9jb24sMCkpCisgICAg ICAgICAgICByZXR1cm4oLTEpOworI2VuZGlmIC8qIFVTRV9DRVJUX0NCICovCisgICAgICAgIGlm ICh0bl9kZWIgfHwgZGVic2VzKQorICAgICAgICAgICAgdG5fZGVidWcoIltTU0wgLSBoYW5kc2hh a2Ugc3RhcnRpbmddIik7CisgICAgICAgIGVsc2UgaWYgKCB2ZXJib3NpdHkgKQorICAgICAgICAg ICAgcHJpbnRmKCJbU1NMIC0gaGFuZHNoYWtlIHN0YXJ0aW5nXVxyXG4iKTsKKyAgICAgICAgZGVi dWcoRjExMCwiY2tfc3NsX291dGdvaW5nIiwiW1NTTCAtIGhhbmRzaGFrZSBzdGFydGluZ10iLDAp OworICAgICAgICBpZiAoU1NMX2Nvbm5lY3Qoc3NsX2NvbikgPD0gMCkgeworICAgICAgICAgICAg aWYgKCBzc2xfZGVidWdfZmxhZyApIHsKKyAgICAgICAgICAgICAgICBjaGFyIGVycmJ1ZlsxMDI0 XTsKKworICAgICAgICAgICAgICAgIHNwcmludGYoZXJyYnVmLCJbU1NMIC0gU1NMX2Nvbm5lY3Qg ZXJyb3I6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBFUlJfZXJyb3Jfc3RyaW5nKEVS Ul9nZXRfZXJyb3IoKSxOVUxMKSk7CisgICAgICAgICAgICAgICAgcHJpbnRmKCIlc1xyXG4iLGVy cmJ1Zik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodG5fZGViIHx8IGRlYnNlcykK KyAgICAgICAgICAgICAgICB0bl9kZWJ1ZygiW1NTTCAtIEZBSUxFRF0iKTsKKyAgICAgICAgICAg IGVsc2UgaWYgKCB2ZXJib3NpdHkgKQorICAgICAgICAgICAgICAgIHByaW50ZigiW1NTTCAtIEZB SUxFRF1cclxuIik7CisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJja19zc2xfb3V0Z29pbmciLCJb U1NMIC0gRkFJTEVEXSIsMCk7CisgICAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICB9IGVs c2UgeworICAgICAgICAgICAgc3NsX2FjdGl2ZV9mbGFnID0gMTsKKworICAgICAgICAgICAgaWYg KCAhc3NsX2NlcnRzb2tfZmxhZyAmJiAoc3NsX3ZlcmlmeV9mbGFnICYgU1NMX1ZFUklGWV9QRUVS KSAmJgorICAgICAgICAgICAgICAgICAhdGxzX2lzX2tyYjUoMCkpIHsKKyAgICAgICAgICAgICAg ICBjaGFyICpzdWJqZWN0ID0gc3NsX2dldF9zdWJqZWN0X25hbWUoc3NsX2Nvbik7CisKKyAgICAg ICAgICAgICAgICBpZiAoIXN1YmplY3QpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNzbF92 ZXJpZnlfZmxhZyAmIFNTTF9WRVJJRllfRkFJTF9JRl9OT19QRUVSX0NFUlQpCisgICAgICAgICAg ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0bl9kZWIgfHwgZGVic2Vz KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRuX2RlYnVnKCJbU1NMIC0gRkFJTEVEXSIp OworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIHZlcmJvc2l0eSApCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJbU1NMIC0gRkFJTEVEXVxyXG4iKTsKKyAgICAg ICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsImNrX3RuX3Rsc19uZWdvdGlhdGUiLCJbU1NM IC0gRkFJTEVEXSIsMCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhfZmluaXNoZWQo QVVUSF9SRUpFQ1QpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAg ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBwcm1w dFsxMDI0XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBvazsKKyAgICAgICAgICAgICAg ICAgICAgICAgIG9rID0gdXFfb2soIldhcm5pbmc6IFNlcnZlciBkaWRuJ3QgcHJvdmlkZSBhIGNl cnRpZmljYXRlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNvbnRpbnVl PyAoWS9OKSIsIDMsIE5VTEwsIDApOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFvaykg eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bl9kZWJ1ZygiW1NTTCAtIEZBSUxFRF0iKTsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICggdmVyYm9zaXR5ICkKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJbU1NMIC0gRkFJTEVEXVxyXG4iKTsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAiY2tfdG5fdGxzX25lZ290aWF0ZSIsIltTU0wgLSBGQUlMRURd IiwwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRoX2ZpbmlzaGVkKEFVVEhfUkVK RUNUKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9 IGVsc2UgaWYgKHNzbF9jaGVja19zZXJ2ZXJfbmFtZShzc2xfY29uLCBzekhvc3ROYW1lKSkgewor ICAgICAgICAgICAgICAgICAgICBpZiAodG5fZGViIHx8IGRlYnNlcykKKyAgICAgICAgICAgICAg ICAgICAgICAgIHRuX2RlYnVnKCJbU1NMIC0gRkFJTEVEXSIpOworICAgICAgICAgICAgICAgICAg ICBlbHNlIGlmICggdmVyYm9zaXR5ICkKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50Zigi W1NTTCAtIEZBSUxFRF1cclxuIik7CisgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsICJj a190bl90bHNfbmVnb3RpYXRlIiwiW1NTTCAtIEZBSUxFRF0iLDApOworICAgICAgICAgICAgICAg ICAgICBhdXRoX2ZpbmlzaGVkKEFVVEhfUkVKRUNUKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0 dXJuIC0xOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm ICh0bl9kZWIgfHwgZGVic2VzKQorICAgICAgICAgICAgICAgIHRuX2RlYnVnKCJbU1NMIC0gT0td Iik7CisJICAgIGVsc2UgaWYgKCFxdWlldCkKKwkgICAgICAgIHByaW50ZigiW1NTTCAtIE9LXVxy XG4iKTsKKyAgICAgICAgICAgIGRlYnVnKEYxMTAsImNrX3NzbF9vdXRnb2luZyIsIltTU0wgLSBP S10iLDApOworICAgICAgICAgICAgc3NsX2Rpc3BsYXlfY29ubmVjdF9kZXRhaWxzKHNzbF9jb24s MCx2ZXJib3NpdHkpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybigwKTsgIC8qIHN1Y2Nl c3MgKi8KK30KKworI2lmbmRlZiBOT0hUVFAKK2ludAorY2tfc3NsX2h0dHBfY2xpZW50KGZkLCBo b3N0bmFtZSkgaW50IGZkOyBjaGFyICogaG9zdG5hbWU7Cit7CisgICAgaW50IHRpbW8gPSAyMDAw OworCisgICAgaWYgKCAhY2tfc3NsZWF5X2lzX2luc3RhbGxlZCgpICkKKyAgICAgICAgcmV0dXJu KC0xKTsKKworICAgIHNldHZlcmJvc2l0eSgpOworCisgICAgLyogYmluZCBpbiB0aGUgbmV0d29y ayBkZXNjcmlwdG9yICovCisgICAgU1NMX3NldF9mZCh0bHNfaHR0cF9jb24sZmQpOworCisgICAg LyogSWYgd2UgYXJlIGRvaW5nIHJhdyBUTFMgdGhlbiBzdGFydCBpdCBub3cgLi4uICovCisgICAg aWYgKDEpIHsKKyNpZm5kZWYgVVNFX0NFUlRfQ0IKKyAgICAgICAgaWYgKCF0bHNfbG9hZF9jZXJ0 cyh0bHNfaHR0cF9jdHgsdGxzX2h0dHBfY29uLDApKSB7CisgICAgICAgICAgICBkZWJ1ZyhGMTEw LCJja19zc2xfaHR0cF9jbGllbnQiLCJ0bHNfbG9hZF9jZXJ0cygpIGZhaWxlZCIsMCk7CisgICAg ICAgICAgICByZXR1cm4oLTEpOworICAgICAgICB9CisjZW5kaWYgLyogVVNFX0NFUlRfQ0IgKi8K KyAgICAgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpCisgICAgICAgICAgICB0bl9kZWJ1ZygiW1RM UyAtIGhhbmRzaGFrZSBzdGFydGluZ10iKTsKKyAgICAgICAgZWxzZSBpZiAodmVyYm9zaXR5KQor ICAgICAgICAgICAgcHJpbnRmKCJbVExTIC0gaGFuZHNoYWtlIHN0YXJ0aW5nXVxyXG4iKTsKKyAg ICAgICAgZGVidWcoRjExMCwiY2tfc3NsX291dGdvaW5nIiwiW1RMUyAtIGhhbmRzaGFrZSBzdGFy dGluZ10iLDApOworICAgICAgICBpZiAoU1NMX2Nvbm5lY3QodGxzX2h0dHBfY29uKSA8PSAwKSB7 CisgICAgICAgICAgICBjaGFyIGVycmJ1ZlsxMDI0XTsKKworICAgICAgICAgICAgc3ByaW50Zihl cnJidWYsIltUTFMgLSBTU0xfY29ubmVjdCBlcnJvcjogJXMiLAorICAgICAgICAgICAgICAgICAg ICAgRVJSX2Vycm9yX3N0cmluZyhFUlJfZ2V0X2Vycm9yKCksTlVMTCkpOworCisgICAgICAgICAg ICBpZiAodG5fZGViIHx8IGRlYnNlcykKKyAgICAgICAgICAgICAgICB0bl9kZWJ1ZyhlcnJidWYp OworICAgICAgICAgICAgZWxzZSBpZiAoIHNzbF9kZWJ1Z19mbGFnICkKKyAgICAgICAgICAgICAg ICBwcmludGYoIiVzXHJcbiIsZXJyYnVmKTsKKworICAgICAgICAgICAgaWYgKHRuX2RlYiB8fCBk ZWJzZXMpCisgICAgICAgICAgICAgICAgdG5fZGVidWcoIltUTFMgLSBGQUlMRURdIik7CisgICAg ICAgICAgICBlbHNlIGlmICggdmVyYm9zaXR5ICkKKyAgICAgICAgICAgICAgICBwcmludGYoIltU TFMgLSBGQUlMRURdXHJcbiIpOworICAgICAgICAgICAgZGVidWcoRjExMCwiY2tfc3NsX2h0dHBf Y2xpZW50IiwiW1RMUyAtIEZBSUxFRF0iLDApOworICAgICAgICAgICAgaHR0cF9jbG9zZSgpOwor ICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRs c19odHRwX2FjdGl2ZV9mbGFnID0gMTsKKyAgICAgICAgICAgIGlmICggIXNzbF9jZXJ0c29rX2Zs YWcgJiYgKHNzbF92ZXJpZnlfZmxhZyAmIFNTTF9WRVJJRllfUEVFUikgJiYKKyAgICAgICAgICAg ICAgICAgIXRsc19pc19rcmI1KDMpICkgeworICAgICAgICAgICAgICAgIGNoYXIgKnN1YmplY3Qg PSBzc2xfZ2V0X3N1YmplY3RfbmFtZSh0bHNfaHR0cF9jb24pOworCisgICAgICAgICAgICAgICAg aWYgKCFzdWJqZWN0KSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChzc2xfdmVyaWZ5X2ZsYWcg JiBTU0xfVkVSSUZZX0ZBSUxfSUZfTk9fUEVFUl9DRVJUKQorICAgICAgICAgICAgICAgICAgICB7 CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodG5fZGViIHx8IGRlYnNlcykKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICB0bl9kZWJ1ZygiW1RMUyAtIEZBSUxFRF0iKTsKKyAgICAgICAg ICAgICAgICAgICAgICAgIGVsc2UgaWYgKCB2ZXJib3NpdHkgKQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHByaW50ZigiW1RMUyAtIEZBSUxFRF1cclxuIik7CisgICAgICAgICAgICAgICAg ICAgICAgICBkZWJ1ZyhGMTEwLCJja190bl90bHNfbmVnb3RpYXRlIiwiW1RMUyAtIEZBSUxFRF0i LDApOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAg ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBwcm1wdFsxMDI0XTsK KyAgICAgICAgICAgICAgICAgICAgICAgIGludCBvazsKKyAgICAgICAgICAgICAgICAgICAgICAg IG9rID0gdXFfb2soIldhcm5pbmc6IFNlcnZlciBkaWRuJ3QgcHJvdmlkZSBhIGNlcnRpZmljYXRl IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNvbnRpbnVlPyAoWS9OKSIs IDMsIE5VTEwsIDApOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFvaykgeworICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB0bl9kZWJ1ZygiW1RMUyAtIEZBSUxFRF0iKTsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICggdmVyYm9zaXR5ICkKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcHJpbnRmKCJbVExTIC0gRkFJTEVEXVxyXG4iKTsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAiY2tfdG5fdGxzX25lZ290aWF0ZSIsIltUTFMgLSBGQUlMRURdIiwwKTsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYg KHNzbF9jaGVja19zZXJ2ZXJfbmFtZSh0bHNfaHR0cF9jb24sIGhvc3RuYW1lKSkgeworICAgICAg ICAgICAgICAgICAgICBpZiAodG5fZGViIHx8IGRlYnNlcykKKyAgICAgICAgICAgICAgICAgICAg ICAgIHRuX2RlYnVnKCJbVExTIC0gRkFJTEVEXSIpOworICAgICAgICAgICAgICAgICAgICBlbHNl IGlmICggdmVyYm9zaXR5ICkKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiW1RMUyAt IEZBSUxFRF1cclxuIik7CisgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAiY2tfdG5fdGxzX25lZ290aWF0ZSIsIltUTFMgLSBGQUlMRURd IiwwKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcHJpbnRmKCJbVExTIC0gT0tdXHJcbiIpOwor ICAgICAgICAgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpCisgICAgICAgICAgICAgICAgdG5fZGVi dWcoIltUTFMgLSBPS10iKTsKKyAgICAgICAgICAgIGRlYnVnKEYxMTAsImNrX3NzbF9vdXRnb2lu ZyIsIltUTFMgLSBPS10iLDApOworICAgICAgICAgICAgc3NsX2Rpc3BsYXlfY29ubmVjdF9kZXRh aWxzKHRsc19odHRwX2NvbiwwLHZlcmJvc2l0eSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0 dXJuKDApOyAgLyogc3VjY2VzcyAqLworfQorI2VuZGlmIC8qIE5PSFRUUCAqLworaW50Citja19z c2xfcmVuZWdvdGlhdGVfY2lwaGVycygpCit7CisKKyAgICBpZiAoICFja19zc2xlYXlfaXNfaW5z dGFsbGVkKCkgKQorICAgICAgICByZXR1cm4oMCk7CisKKyAgICBpZiAoICFzc3RlbG5ldCApCisg ICAgICAgIHJldHVybigwKTsKKworICAgIGlmICggc3NsX2FjdGl2ZV9mbGFnICkKKyAgICAgICAg cmV0dXJuIFNTTF9yZW5lZ290aWF0ZShzc2xfY29uKTsKKyAgICBlbHNlIGlmICggdGxzX2FjdGl2 ZV9mbGFnICkKKyAgICAgICAgcmV0dXJuIFNTTF9yZW5lZ290aWF0ZSh0bHNfY29uKTsKKyAgICBy ZXR1cm4oMCk7Cit9CisKKyNpZmRlZiBOVAoraW50IAorY2tfWDUwOV9zYXZlX2NlcnRfdG9fdXNl cl9zdG9yZShYNTA5ICpjZXJ0KQoreworI2lmZGVmIFg1MDlWM19FWFRfRFVNUF9VTktOT1dOCisg ICAgY2hhciBwYXRoW0NLTUFYUEFUSF07CisgICAgY2hhciBoYXNoWzE2XTsKKyAgICBjaGFyICog R2V0QXBwRGF0YShpbnQpOworICAgIEJJTyAqIG91dD1OVUxMOworCisgICAgaWYgKCBjZXJ0ID09 IE5VTEwgKQorICAgICAgICByZXR1cm4oMCk7CisKKyAgICBzcHJpbnRmKGhhc2gsIiUwOGx4IixY NTA5X3N1YmplY3RfbmFtZV9oYXNoKGNlcnQpKTsKKyAgICBja21ha21zZyhwYXRoLENLTUFYUEFU SCxHZXRBcHBEYXRhKDApLCJrZXJtaXQgOTUvY2VydHMvIiwKKyAgICAgICAgICAgICBoYXNoLCIu MCIpOworCisgICAgCisgICAgb3V0PUJJT19uZXcoQklPX3NfZmlsZSgpKTsKKyAgICBpZiAob3V0 ID09IE5VTEwpCisgICAgeworICAgICAgICBFUlJfcHJpbnRfZXJyb3JzKGJpb19lcnIpOworICAg ICAgICByZXR1cm4oMCk7CisgICAgfQorICAgIGlmIChCSU9fd3JpdGVfZmlsZW5hbWUob3V0LHBh dGgpIDw9IDApIHsKKyAgICAgICAgcGVycm9yKHBhdGgpOworICAgICAgICByZXR1cm4oMCk7Cisg ICAgfQorCisgICAgWDUwOV9wcmludF9leChvdXQsIGNlcnQsIFhOX0ZMQUdfU0VQX01VTFRJTElO RSwgWDUwOVYzX0VYVF9EVU1QX1VOS05PV04pOworICAgIGlmICghUEVNX3dyaXRlX2Jpb19YNTA5 KG91dCxjZXJ0KSkgeworICAgICAgICBCSU9fcHJpbnRmKGJpb19lcnIsInVuYWJsZSB0byB3cml0 ZSBjZXJ0aWZpY2F0ZVxuIik7CisgICAgICAgIEVSUl9wcmludF9lcnJvcnMoYmlvX2Vycik7Cisg ICAgICAgIEJJT19mcmVlX2FsbChvdXQpOworICAgICAgICByZXR1cm4oMCk7CisgICAgfQorICAg IEJJT19mcmVlX2FsbChvdXQpOworICAgIHJldHVybigxKTsKKyNlbHNlIC8qIFg1MDlWM19FWFRf RFVNUF9VTktOT1dOICovCisgICAgcmV0dXJuKDApOworI2VuZGlmIC8qIFg1MDlWM19FWFRfRFVN UF9VTktOT1dOICovCit9CisjZW5kaWYgLyogTlQgKi8KKworI2lmbmRlZiBPUzIKKy8qIFRoZSBm b2xsb3dpbmcgZnVuY3Rpb24gc2hvdWxkIGJlIHJlcGxhY2VkIGJ5IGluc3RpdHV0aW9uIHNwZWNp ZmljICovCisvKiBjb2RlIHRoYXQgd2lsbCBjb252ZXJ0IGFuIFg1MDkgY2VydCBzdHJ1Y3R1cmUg dG8gYSB1c2VyaWQgZm9yIHRoZSAqLworLyogcHVycG9zZXMgb2YgY2xpZW50IHRvIGhvc3QgbG9n aW4uICBUaGUgZXhhbXBsZSBjb2RlIGluY2x1ZGVkICAgICAgKi8KKy8qIHNpbXBseSByZXR1cm5z IHRoZSBVSUQgZmllbGQgb2YgdGhlIFN1YmplY3QgaWYgaXQgZXhpc3RzLiAgICAgICAgICovCisK Ky8qIFg1MDlfdG9fdXNlcigpIHJldHVybnMgMCBpZiB2YWxpZCB1c2VyaWQgaW4gJ3VzZXJpZCcs IGVsc2UgLTEgKi8KK2ludAorWDUwOV90b191c2VyKFg1MDkgKnBlZXJfY2VydCwgY2hhciAqdXNl cmlkLCBpbnQgbGVuKQoreworI2lmZGVmIFg1MDlfVUlEX1RPX1VTRVIKKyAgICAvKiBCRUdJTiBF WEFNUExFICovCisgICAgaW50IGVycjsKKworICAgIGlmICghKHBlZXJfY2VydCAmJiB1c2VyaWQp IHx8IGxlbiA8PSAwKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICB1c2VyaWRbMF0gPSAnXDAn OworICAgIGRlYnVnKEYxMTAsIlg1MDlfdG9fdXNlcigpIHN1YmplY3QiLAorICAgICAgICAgICBY NTA5X05BTUVfb25lbGluZShYNTA5X2dldF9zdWJqZWN0X25hbWUocGVlcl9jZXJ0KSxOVUxMLDAp LDApOworCisgICAgLyogdXNlcmlkIGlzIGluIGNlcnQgc3ViamVjdCAvVUlEICovCisgICAgZXJy ID0gWDUwOV9OQU1FX2dldF90ZXh0X2J5X05JRChYNTA5X2dldF9zdWJqZWN0X25hbWUocGVlcl9j ZXJ0KSwKKyNpZm5kZWYgTklEX3g1MDBVbmlxdWVJZGVudGlmaWVyCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgTklEX3VuaXF1ZUlkZW50aWZpZXIsCisjZWxzZQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5JRF94NTAwVW5pcXVlSWRlbnRpZmllciwK KyNlbmRpZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJpZCwgbGVu KTsKKworICAgIGRlYnVnKEYxMTEsIlg1MDlfdG9fdXNlcigpIHVzZXJpZCIsdXNlcmlkLGVycik7 CisgICAgaWYgKGVyciA+IDApCisgICAgICAgIHJldHVybiAwOworCisgICAgLyogRU5EIEVYQU1Q TEUgKi8KKyNlbHNlIC8qIFg1MDlfVUlEX1RPX1VTRVIgKi8KKyNpZmRlZiBYNTA5X1NVQkpFQ1Rf QUxUX05BTUVfVE9fVVNFUgorICAgIC8qIEJFR0lOIEVYQU1QTEUgKi8KKyAgICBpbnQgaTsKKyAg ICBYNTA5X0VYVEVOU0lPTiAqZXh0ID0gTlVMTDsKKyAgICBTVEFDS19PRihHRU5FUkFMX05BTUUp ICppYWx0ID0gTlVMTDsKKyAgICBHRU5FUkFMX05BTUUgKmdlbiA9IE5VTEw7CisgICAgY2hhciBl bWFpbFsyNTZdOworCisgICAgaWYgKCEocGVlcl9jZXJ0ICYmIHVzZXJpZCkgfHwgbGVuIDw9IDAp CisgICAgICAgIHJldHVybiAtMTsKKworICAgIHVzZXJpZFswXSA9ICdcMCc7CisgICAgZW1haWxb MF0gPSAnXDAnOworICAgIGRlYnVnKEYxMTAsIlg1MDlfdG9fdXNlcigpIHN1YmplY3QiLAorICAg ICAgICAgICBYNTA5X05BTUVfb25lbGluZShYNTA5X2dldF9zdWJqZWN0X25hbWUocGVlcl9jZXJ0 KSxOVUxMLDApLDApOworCisgICAgaWYgKChpID0gWDUwOV9nZXRfZXh0X2J5X05JRChwZWVyX2Nl cnQsIE5JRF9zdWJqZWN0X2FsdF9uYW1lLCAtMSkpPDApCisgICAgICAgIHJldHVybiAtMTsKKyAg ICBpZiAoIShleHQgPSBYNTA5X2dldF9leHQocGVlcl9jZXJ0LCBpKSkpCisgICAgICAgIHJldHVy biAtMTsKKyAgICBYNTA5VjNfYWRkX3N0YW5kYXJkX2V4dGVuc2lvbnMoKTsKKyAgICBpZiAoIShp YWx0ID0gWDUwOVYzX0VYVF9kMmkoZXh0KSkpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBmb3Ig KGkgPSAwOyBpIDwgc2tfR0VORVJBTF9OQU1FX251bShpYWx0KTsgaSsrKSB7CisgICAgICAgIGdl biA9IHNrX0dFTkVSQUxfTkFNRV92YWx1ZShpYWx0LCBpKTsKKyAgICAgICAgaWYgKGdlbi0+dHlw ZSA9PSBHRU5fRE5TKSB7CisgICAgICAgICAgICBpZiAoIWdlbi0+ZC5pYTUgfHwgIWdlbi0+ZC5p YTUtPmxlbmd0aCkKKwkgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChzdHJsZW4oZ2VuLT5k LmlhNS0+ZGF0YSkgIT0gZ2VuLT5kLmlhNS0+bGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgLyog SWdub3JpbmcgSUE1U3RyaW5nIGNvbnRhaW5pbmcgbnVsbCBjaGFyYWN0ZXIgKi8KKyAgICAgICAg ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICggZ2VuLT5k LmlhNS0+bGVuZ3RoICsgMSA+IHNpemVvZihlbWFpbCkgKSB7CisgICAgICAgICAgICAgICAgZ290 byBjbGVhbnVwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbWVtY3B5KGVtYWlsLCBnZW4t PmQuaWE1LT5kYXRhLCBnZW4tPmQuaWE1LT5sZW5ndGgpOworICAgICAgICAgICAgZW1haWxbZ2Vu LT5kLmlhNS0+bGVuZ3RoXSA9IDA7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg IH0KKyAgY2xlYW51cDoKKyAgICBYNTA5VjNfRVhUX2NsZWFudXAoKTsKKyAgICBpZiAoaWFsdCkK KyAgICAgICAgc2tfR0VORVJBTF9OQU1FX2ZyZWUoaWFsdCk7CisKKyAgICBkZWJ1ZyhGMTEwLCJY NTA5X3RvX3VzZXIoKSBlbWFpbCIsZW1haWwsMCk7CisKKyAgICBpZiAoIGVtYWlsWzBdICkgewor ICAgICAgICBjaGFyICogZG9tYWluID0gTlVMTDsKKworICAgICAgICAvKiBGaW5kIGRvbWFpbiAq LworICAgICAgICBmb3IgKCBpPTAgOyBlbWFpbFtpXSA7IGkrKyApIHsKKyAgICAgICAgICAgIGlm ICggZW1haWxbaV0gPT0gJ0AnICkgeworICAgICAgICAgICAgICAgIGVtYWlsW2ldID0gJ1wwJzsK KyAgICAgICAgICAgICAgICBkb21haW4gPSAmZW1haWxbaSsxXTsKKyAgICAgICAgICAgICAgICBi cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICggZG9tYWluICkg eworICAgICAgICAgICAgLyogWFhYIC0gUHV0IGNvZGUgdG8gVmVyaWZ5IGRvbWFpbiBoZXJlICov CisKKyAgICAgICAgICAgIGlmICggLyogZG9tYWluIGlzIG9rYXkgKi8gMSApCisgICAgICAgICAg ICAgICAgY2tzdHJuY3B5KHVzZXJpZCxlbWFpbCxsZW4pOworICAgICAgICB9CisgICAgfQorCisg ICAgcmV0dXJuKHVzZXJpZFswXSA/IDAgOiAtMSk7CisgICAgLyogRU5EIEVYQU1QTEUgKi8KKyNl bmRpZiAvKiBYNTA5X1NVQkpFQ1RfQUxUX05BTUVfVE9fVVNFUiAqLworI2VuZGlmIC8qIFg1MDlf VUlEX1RPX1VTRVIgKi8KKyAgICByZXR1cm4gLTE7Cit9CisKKy8qIFRoZSBmb2xsb3dpbmcgZnVu Y3Rpb24gc2hvdWxkIGJlIHJlcGxhY2VkIGJ5IGluc3RpdHV0aW9uIHNwZWNpZmljICovCisvKiBj b2RlIHRoYXQgd2lsbCBkZXRlcm1pbmUgd2hldGhlciBvciBub3QgdGhlIGNvbWJpbmF0aW9uIG9m IHRoZSAgICAqLworLyogcHJvdmlkZWQgWDUwOSBjZXJ0aWZpY2F0ZSBhbmQgdXNlcm5hbWUgaXMg dmFsaWQgZm9yIGF1dG9tYXRpYyAgICAgKi8KKy8qIGxvZ2luLiAgIFdoZXJlYXMgWDUwOV90b191 c2VyKCkgaXMgdXNlZCB0byBwcm92aWRlIGF1dGhlbnRpY2F0aW9uICovCisvKiBvZiB0aGUgdXNl ciwgdGhlIFg1MDlfdXNlcm9rKCkgZnVuY3Rpb24gaXMgdXNlZCB0byBwcm92aWRlICAgICAgICAq LworLyogYXV0aG9yaXphdGlvbi4gIFRoZSBjZXJ0aWZpY2F0ZSBwYXNzZWQgaW50byBYNTA5X3Vz ZXJvaygpIGRvZXMgICAgKi8KKy8qIG5lZWQgdG8gbWFwIHRvIGEgdXNlcmlkOyBub3Igd291bGQg dGhlIHVzZXJpZCBpdCB3b3VsZCBtYXAgdG8gICAgICovCisvKiBuZWVkIHRvIG1hdGNoIHRoZSB1 c2VyaWQgcHJvdmlkZWQgdG8gdGhlIGZ1bmN0aW9uLiAgVGhlcmUgYXJlICAgICAqLworLyogbnVt ZXJvdXMgY2lyY3Vtc3RhbmNlcyBpbiB3aGljaCBpdCBpcyBiZW5lZmljaWFsIHRvIGhhdmUgdGhl IGFiaWxpdHkgKi8KKy8qIGZvciBtdWx0aXBsZSB1c2VycyB0byBnYWluIGFjY2VzcyB0byBhIGNv bW1vbiBhY2NvdW50IHN1Y2ggYXMgICAgICovCisvKiAncm9vdCcgb24gVW5peDsgb3IgYSBjbGFz cyBhY2NvdW50IG9uIGEgd2ViIHNlcnZlci4gIEluIFVuaXggd2UgICAqLworLyogaW1wbGVtZW50 IHRoaXMgY2FwYWJpbGl0eSB3aXRoIHRoZSB+dXNlcmlkLy50bHNsb2dpbiBmaWxlIHdoaWNoICAg Ki8KKy8qIGEgbGlzdCBvZiBYNTA5IGNlcnRpZmljYXRlcyB3aGljaCBtYXkgYmUgdXNlZCB0byBh Y2Nlc3MgdGhlICAgICAgICovCisvKiBhY2NvdW50ICd1c2VyaWQnLiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisvKiBYNTA5X3RvX3VzZXIoKSBy ZXR1cm5zIDAgaWYgYWNjZXNzIGlzIGRlbmllZDsgMSBpcyBhY2Nlc3MgaXMgcGVybWl0dGVkICov CitpbnQKK1g1MDlfdXNlcm9rKFg1MDkgKiBwZWVyX2NlcnQsIGNvbnN0IGNoYXIgKiB1c2VyaWQp Cit7CisjaWZuZGVmIFZNUworICAgIC8qIGNoZWNrIGlmIGNsaWVudHMgY2VydCBpcyBpbiAidXNl ciIncyB+Ly50bHNsb2dpbiBmaWxlICovCisgICAgY2hhciBidWZbNTEyXTsKKyAgICBpbnQgciA9 IDA7CisgICAgRklMRSAqZnA7CisgICAgc3RydWN0IHBhc3N3ZCAqcHdkOworICAgIFg1MDkgKmZp bGVfY2VydDsKKworICAgIGlmICggcGVlcl9jZXJ0ID09IE5VTEwgKQorICAgICAgICByZXR1cm4o MCk7CisKKyAgICBpZiAoIShwd2QgPSBnZXRwd25hbSh1c2VyaWQpKSkKKyAgICAgICByZXR1cm4g MDsKKyAgICBpZiAoc3RybGVuKHB3ZC0+cHdfZGlyKSA+IDUwMCkKKyAgICAgICByZXR1cm4oMCk7 CisgICAgc3ByaW50ZihidWYsICIlcy8udGxzbG9naW4iLCBwd2QtPnB3X2Rpcik7CisKKyAgICBp ZiAoIShmcCA9IGZvcGVuKGJ1ZiwgInIiKSkpCisgICAgICAgIHJldHVybiAwOworICAgIHdoaWxl ICghciAmJiAoZmlsZV9jZXJ0ID0gUEVNX3JlYWRfWDUwOShmcCwgTlVMTCwgTlVMTCwgTlVMTCkp KSB7CisgICAgICAgIGlmICghQVNOMV9TVFJJTkdfY21wKHBlZXJfY2VydC0+c2lnbmF0dXJlLCBm aWxlX2NlcnQtPnNpZ25hdHVyZSkpCisgICAgICAgICAgICByID0gMTsKKyAgICAgICAgWDUwOV9m cmVlKGZpbGVfY2VydCk7CisgICAgfQorICAgIGZjbG9zZShmcCk7CisgICAgcmV0dXJuKHIpOwor I2Vsc2UgLyogVk1TICovCisgICAgLyogTmVlZCB0byBpbXBsZW1lbnQgYW4gYXBwcm9wcmlhdGUg ZnVuY3Rpb24gZm9yIFZNUyAqLworICAgIHJldHVybigwKTsKKyNlbmRpZiAvKiBWTVMgKi8KK30K KyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBDS19TU0wgKi8KCmRpZmYgLS1naXQgYS9ja2Vy bWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrX3NzbC5oIGIvY2tlcm1pdC05LjAu MzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja19zc2wuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwLi45N2I2NTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY2tlcm1pdC05LjAuMzAy LWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja19zc2wuaApAQCAtMCwwICsxLDE2MCBAQAorLyoKKyAg QyBLIF8gUyBTIEwgLiBIIC0tICBPcGVuU1NMIEludGVyZmFjZSBIZWFkZXIgZm9yIEMtS2VybWl0 CisKKyAgQ29weXJpZ2h0IChDKSAxOTg1LCAyMDA1LAorICAgIFRydXN0ZWVzIG9mIENvbHVtYmlh IFVuaXZlcnNpdHkgaW4gdGhlIENpdHkgb2YgTmV3IFlvcmsuCisgICAgQWxsIHJpZ2h0cyByZXNl cnZlZC4gIFNlZSB0aGUgQy1LZXJtaXQgQ09QWUlORy5UWFQgZmlsZSBvciB0aGUKKyAgICBjb3B5 cmlnaHQgdGV4dCBpbiB0aGUgY2tjbWFpLmMgbW9kdWxlIGZvciBkaXNjbGFpbWVyIGFuZCBwZXJt aXNzaW9ucy4KKworICAgIEF1dGhvcjogIEplZmZyZXkgRSBBbHRtYW4gKGphbHRtYW5Ac2VjdXJl LWVuZHBvaW50cy5jb20pCisgICAgICAgICAgICAgICBTZWN1cmUgRW5kcG9pbnRzIEluYy4sIE5l dyBZb3JrIENpdHkKKyovCisKKyNpZmRlZiBDS19TU0wKKyNpZm5kZWYgQ0tfQU5TSUMKKyNkZWZp bmUgTk9QUk9UTworI2VuZGlmIC8qIENLX0FOU0lDICovCisKKyNpZmRlZiBDT01NRU5UICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBOb3QgZm9yIEMtS2VybWl0IDcuMSAqLworI2lmZGVmIEtS QjUKKyNpZm5kZWYgTk9TU0xLNQorI2lmbmRlZiBTU0xfS1JCNQorI2RlZmluZSBTU0xfS1JCNQor I2VuZGlmIC8qIFNTTF9LUkI1ICovCisjZW5kaWYgLyogTk9TU0xLNSAqLworI2VuZGlmIC8qIEtS QjUgKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisKKyNpZmRlZiBPUzIKKyNpZm5kZWYgWkxJQgor I2RlZmluZSBaTElCCisjZW5kaWYgLyogWkxJQiAqLworI2VuZGlmIC8qIE9TMiAqLworCisjaWZk ZWYgWkxJQgorI2luY2x1ZGUgPG9wZW5zc2wvY29tcC5oPgorI2VuZGlmIC8qIFpMSUIgKi8KKy8q IFdlIHBsYWNlIHRoZSBmb2xsb3dpbmcgdG8gYXZvaWQgbG9hZGluZyBvcGVuc3NsL21kYzIuaCBz aW5jZSBpdCAKKyAqIHJlbGllcyBvbiB0aGUgT3BlblNTTCBkZXMuaC4gIFNpbmNlIHdlIGRvIG5v dCBuZWVkIHRoZSBNREMyIAorICogZGVmaW5pdGlvbnMgdGhlcmUgaXMgbm8gcmVhc29uIHRvIGhh dmUgaXQgaW5jbHVkZWQgYnkgb3BlbnNzbC9ldnAuaAorICovCisjZGVmaW5lIE9QRU5TU0xfTk9f TURDMgorI2lmZGVmIE9QRU5TU0xfMTAwCisjZGVmaW5lIE9QRU5TU0xfMDk4CisjZW5kaWYJLyog T1BFTlNTTF8xMDAgKi8KKyNpZmRlZiBPUEVOU1NMXzA5OAorI2RlZmluZSBPUEVOU1NMXzA5Nwor I2VuZGlmIC8qIE9QRU5TU0xfMDk4ICovCisjaWZkZWYgQ0tfREVTCisjaW5jbHVkZSA8b3BlbnNz bC9kZXMuaD4KKyNlbmRpZgkvKiBDS19ERVMgKi8KKyNpbmNsdWRlIDxvcGVuc3NsL3NzbC5oPgor I2luY2x1ZGUgPG9wZW5zc2wveDUwOXYzLmg+CisjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+Cisj aW5jbHVkZSA8b3BlbnNzbC94NTA5X3ZmeS5oPgorI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Cisj aW5jbHVkZSA8b3BlbnNzbC9wZW0uaD4KKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CisjaW5jbHVk ZSA8b3BlbnNzbC9ibG93ZmlzaC5oPgorI2luY2x1ZGUgPG9wZW5zc2wvZGguaD4KKyNpbmNsdWRl IDxvcGVuc3NsL3JjNC5oPgorI2luY2x1ZGUgPG9wZW5zc2wvY2FzdC5oPgorI2luY2x1ZGUgPG9w ZW5zc2wvZHNhLmg+CisjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KKyNpbmNsdWRlIDxvcGVuc3Ns L21kNS5oPgorI2luY2x1ZGUgPG9wZW5zc2wvc2hhLmg+CisjaW5jbHVkZSA8b3BlbnNzbC9ldnAu aD4KKyNpbmNsdWRlIDxvcGVuc3NsL2htYWMuaD4KKyNpZmRlZiBTU0xfS1JCNQorI2luY2x1ZGUg PG9wZW5zc2wva3NzbC5oPgorI2VuZGlmIC8qIFNTTF9LUkI1ICovCisKK2V4dGVybiBCSU8gKmJp b19lcnI7CitleHRlcm4gU1NMICpzc2xfY29uOworZXh0ZXJuIFNTTF9DVFggKnNzbF9jdHg7Citl eHRlcm4gaW50IHNzbF9kZWJ1Z19mbGFnOworZXh0ZXJuIGludCBzc2xfb25seV9mbGFnOworZXh0 ZXJuIGludCBzc2xfYWN0aXZlX2ZsYWc7CitleHRlcm4gaW50IHNzbF92ZXJpZnlfZmxhZzsKK2V4 dGVybiBpbnQgc3NsX3ZlcmJvc2VfZmxhZzsKK2V4dGVybiBpbnQgc3NsX2NlcnRzb2tfZmxhZzsK K2V4dGVybiBpbnQgc3NsX2R1bW15X2ZsYWc7CitleHRlcm4gaW50IHNzbF92ZXJpZnlfZGVwdGg7 CisKK2V4dGVybiBjaGFyICpzc2xfcnNhX2NlcnRfZmlsZTsKK2V4dGVybiBjaGFyICpzc2xfcnNh X2NlcnRfY2hhaW5fZmlsZTsKK2V4dGVybiBjaGFyICpzc2xfcnNhX2tleV9maWxlOworZXh0ZXJu IGNoYXIgKnNzbF9kc2FfY2VydF9maWxlOworZXh0ZXJuIGNoYXIgKnNzbF9kc2FfY2VydF9jaGFp bl9maWxlOworZXh0ZXJuIGNoYXIgKnNzbF9kaF9rZXlfZmlsZTsKK2V4dGVybiBjaGFyICpzc2xf Y2lwaGVyX2xpc3Q7CitleHRlcm4gY2hhciAqc3NsX2NybF9maWxlOworZXh0ZXJuIGNoYXIgKnNz bF9jcmxfZGlyOworZXh0ZXJuIGNoYXIgKnNzbF92ZXJpZnlfZmlsZTsKK2V4dGVybiBjaGFyICpz c2xfdmVyaWZ5X2RpcjsKK2V4dGVybiBjaGFyICpzc2xfZGhfcGFyYW1fZmlsZTsKK2V4dGVybiBj aGFyICpzc2xfcm5kX2ZpbGU7CisKK2V4dGVybiBTU0xfQ1RYICp0bHNfY3R4OworZXh0ZXJuIFNT TCAqdGxzX2NvbjsKK2V4dGVybiBpbnQgdGxzX29ubHlfZmxhZzsKK2V4dGVybiBpbnQgdGxzX2Fj dGl2ZV9mbGFnOworZXh0ZXJuIGludCB4NTA5X2NlcnRfdmFsaWQ7CitleHRlcm4gWDUwOV9TVE9S RSAqY3JsX3N0b3JlOworCitleHRlcm4gaW50IHNzbF9yYXdfZmxhZzsKK2V4dGVybiBpbnQgdGxz X3Jhd19mbGFnOworCisjaWZuZGVmIE5PSFRUUAorZXh0ZXJuIFNTTF9DVFggKnRsc19odHRwX2N0 eDsKK2V4dGVybiBTU0wgKnRsc19odHRwX2NvbjsKK2V4dGVybiBpbnQgdGxzX2h0dHBfYWN0aXZl X2ZsYWc7CisjZW5kaWYgLyogTk9IVFRQICovCisKK2V4dGVybiBpbnQgc3NsX2luaXRpYWxpemVk OworCitfUFJPVE9UWVAoVk9JRCBzc2xfb25jZV9pbml0LCh2b2lkKSk7CitfUFJPVE9UWVAoaW50 IHNzbF90bl9pbml0LChpbnQpKTsKK19QUk9UT1RZUChpbnQgc3NsX2h0dHBfaW5pdCwoY2hhciAq KSk7CitfUFJPVE9UWVAoaW50IGNrX3NzbF9odHRwX2NsaWVudCwoaW50LGNoYXIgKikpOworX1BS T1RPVFlQKGludCBzc2xfZGlzcGxheV9jb25uZWN0X2RldGFpbHMsKFNTTCAqLGludCxpbnQpKTsK K19QUk9UT1RZUChpbnQgc3NsX3NlcnZlcl92ZXJpZnlfY2FsbGJhY2ssKGludCwgWDUwOV9TVE9S RV9DVFggKikpOworX1BST1RPVFlQKGludCBzc2xfY2xpZW50X3ZlcmlmeV9jYWxsYmFjaywoaW50 LCBYNTA5X1NUT1JFX0NUWCAqKSk7CitfUFJPVE9UWVAoaW50IHNzbF9yZXBseSwoaW50LCB1bnNp Z25lZCBjaGFyICosIGludCkpOworX1BST1RPVFlQKGludCBzc2xfaXMsKHVuc2lnbmVkIGNoYXIg KiwgaW50KSk7CitfUFJPVE9UWVAoaW50IGNrX3NzbF9pbmNvbWluZywoaW50KSk7CitfUFJPVE9U WVAoaW50IGNrX3NzbF9vdXRnb2luZywoaW50KSk7CitfUFJPVE9UWVAoaW50IHRsc19pc191c2Vy X3ZhbGlkLChTU0wgKiwgY29uc3QgY2hhciAqKSk7CitfUFJPVE9UWVAoY2hhciAqIHNzbF9nZXRf ZG5zTmFtZSwoU1NMICopKTsKK19QUk9UT1RZUChjaGFyICogc3NsX2dldF9jb21tb25OYW1lLChT U0wgKikpOworX1BST1RPVFlQKGNoYXIgKiBzc2xfZ2V0X2lzc3Vlcl9uYW1lLChTU0wgKikpOwor X1BST1RPVFlQKGNoYXIgKiBzc2xfZ2V0X3N1YmplY3RfbmFtZSwoU1NMICopKTsKK19QUk9UT1RZ UChpbnQgc3NsX2dldF9jbGllbnRfZmluaXNoZWQsKGNoYXIgKiwgaW50KSk7CitfUFJPVE9UWVAo aW50IHNzbF9nZXRfc2VydmVyX2ZpbmlzaGVkLChjaGFyICosIGludCkpOworX1BST1RPVFlQKGlu dCBzc2xfcGFzc3dkX2NhbGxiYWNrLChjaGFyICosIGludCwgaW50LCBWT0lEICopKTsKK19QUk9U T1RZUChWT0lEIHNzbF9jbGllbnRfaW5mb19jYWxsYmFjaywoY29uc3QgU1NMICosaW50LCBpbnQp KTsKK19QUk9UT1RZUChpbnQgc3NsX2Fub255bW91c19jaXBoZXIsKFNTTCAqIHNzbCkpOworX1BS T1RPVFlQKGludCB0bHNfbG9hZF9jZXJ0cywoU1NMX0NUWCAqIGN0eCwgU1NMICogY29uLCBpbnQg c2VydmVyKSk7CitfUFJPVE9UWVAoaW50IHNzbF92ZXJpZnlfY3JsLChpbnQsIFg1MDlfU1RPUkVf Q1RYICopKTsKK19QUk9UT1RZUChpbnQgdGxzX2lzX2tyYjUsKGludCkpOworX1BST1RPVFlQKGlu dCBYNTA5X3VzZXJvaywoWDUwOSAqLGNvbnN0IGNoYXIgKikpOworX1BST1RPVFlQKGludCBja19Y NTA5X3NhdmVfY2VydF90b191c2VyX3N0b3JlLChYNTA5ICopKTsKKy8qIFNNUyAyMDA3LzAyLzE1 ICovCitfUFJPVE9UWVAoaW50IHNzbF9jaGVja19zZXJ2ZXJfbmFtZSwoU1NMICogc3NsLCBjaGFy ICogaG9zdG5hbWUpKTsKKyNpZmRlZiBPUzIKKyNpbmNsdWRlICJja29zc2xjLmgiCisjaW5jbHVk ZSAiY2tvc3NsLmgiCisjZW5kaWYgLyogT1MyICovCisKKyNkZWZpbmUgU1NMX0NMSUVOVCAwCisj ZGVmaW5lIFNTTF9TRVJWRVIgMQorI2RlZmluZSBTU0xfSFRUUCAgIDIKKworI2RlZmluZSBTU0xf RVJSX0JGU1ogNDA5NgorCisjaWZkZWYgU1NMX0tSQjUKKyNkZWZpbmUgREVGQVVMVF9DSVBIRVJf TElTVCAiSElHSDpNRURJVU06TE9XOitLUkI1OitBREg6K0VYUCIKKyNlbHNlCisjZGVmaW5lIERF RkFVTFRfQ0lQSEVSX0xJU1QgIkhJR0g6TUVESVVNOkxPVzorQURIOitFWFAiCisjZW5kaWYgLyog U1NMX0tSQjUgKi8KKyNlbmRpZiAvKiBDS19TU0wgKi8KCmRpZmYgLS1naXQgYS9ja2VybWl0LTku MC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrYWFhYS50eHQgYi9ja2VybWl0LTkuMC4zMDIt YnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrYWFhYS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uMzM1ZWM3ZAotLS0gL2Rldi9udWxsCisrKyBiL2NrZXJtaXQtOS4wLjMwMi1i dWlsZC9ja2VybWl0LTkuMC4zMDIvY2thYWFhLnR4dApAQCAtMCwwICsxLDM4MCBAQAorY2thYWFh LnR4dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgSnVseSAyMDExCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEMtS0VSTUlUIFZFUlNJ T04gOS4wLjMwMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1ZFUlZJRVcgT0YgRklM RVMKKworICAgICAgICAgICAgICAgQ29tbXVuaWNhdGlvbnMgc29mdHdhcmUgZm9yIFVOSVggYW5k IChPcGVuKVZNUy4KKworICAgICAgICAgICAgICAgICAgICAgICBBbmQgaW4gZm9ybWVyIHZlcnNp b25zIGFsc28gZm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJhdHVzIFZPUywgQU9T L1ZTLCBRTlgsCisgICAgICAgICAgICAgUGxhbiA5LCBPUy05LCBBcG9sbG8gQWVnaXMsIGFuZCB0 aGUgQ29tbW9kb3JlIEFtaWdhLgorICAgICAgICAgICAgICAgICAgICAgIFRoZSBBcHBsZSBNYWNp bnRvc2gsIHRoZSBBdGFyaSBTVC4KKworICAgICAgICAgICAgICAgICAgVGhlIEtlcm1pdCBQcm9q ZWN0IC0gQ29sdW1iaWEgVW5pdmVyc2l0eQorCisgICAgICAgICAgICAgIGh0dHA6Ly9rZXJtaXQu Y29sdW1iaWEuZWR1LyAtIGtlcm1pdEBjb2x1bWJpYS5lZHUKKworCisgIENvcHlyaWdodCAoQykg MTk4NSwgMjAxMSwKKyAgICBUcnVzdGVlcyBvZiBDb2x1bWJpYSBVbml2ZXJzaXR5IGluIHRoZSBD aXR5IG9mIE5ldyBZb3JrLgorICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBTZWUgdGhlIEMtS2Vy bWl0IENPUFlJTkcuVFhUIGZpbGUgb3IgdGhlCisgICAgY29weXJpZ2h0IHRleHQgaW4gdGhlIGNr Y21haS5jIG1vZHVsZSBmb3IgZGlzY2xhaW1lciBhbmQgcGVybWlzc2lvbnMuCisgICAgQlJJRUZM WTogQy1LZXJtaXQgOS4wIGhhcyB0aGUgT1BFTiBTT1VSQ0UgMy1jbGF1c2UgTU9ESUZJRUQgQlNE IExJQ0VOU0UuCisKKworRE9DVU1FTlRBVElPTgorCisgIEMtS2VybWl0IGlzIGRvY3VtZW50ZWQg aW4gdGhlIGJvb2sgIlVzaW5nIEMtS2VybWl0IiwgU2Vjb25kIEVkaXRpb24sIGJ5CisgIEZyYW5r IGRhIENydXogYW5kIENocmlzdGluZSBNLiBHaWFub25lLCBEaWdpdGFsIFByZXNzLCBJU0JOIDEt NTU1NTgtMTY0LTEsCisgIHN1cHBsZW1lbnRlZCBieSBXZWItYmFzZWQgdXBkYXRlcyBmb3IgQy1L ZXJtaXQgNy4wLCA4LjAsIGFuZCA5LjAuCisKK1BMQVRGT1JNUworICAgICAgICAgICAgICAgICAg IFNlY3VyaXR5CisgICBOYW1lICAgICAgICAgICAgSW5jbHVkZWQgICBMYXN0IFVwZGF0ZWQKKwor ICAgVW5peCAgICAgICAgICAgICAgIFllcyAgICAgOS4wLjMwMCAgMzAgSnVuIDIwMTEKKyAgIChP cGVuKVZNUyAgICAgICAgICBZZXMgICAgIDkuMC4zMDAgIDMwIEp1biAyMDExCisgICBXaW5kb3dz IChLOTUpICAgICAgWWVzICAgICA4LjAuMjA4ICAxNCBNYXIgMjAwMyAgKEs5NSAyLjEpCisgICBP Uy8yIChLOTUpICAgICAgICAgWWVzICAgICA4LjAuMjA4ICAxNCBNYXIgMjAwMyAgKEs5NSAyLjEp CisgICBERyBBT1MvVlMgICAgICAgICAgTm8gICAgICA3LjAuMTk2ICAgMSBKYW4gMjAwMAorICAg U3RyYXR1cyBWT1MgICAgICAgIE5vICAgICAgNy4wLjE5NiAgIDEgSmFuIDIwMDAKKyAgIEJlbGwg UGxhbiA5ICAgICAgICBObyAgICAgIDcuMC4xOTYgICAxIEphbiAyMDAwCisgICBNaWNyb3dhcmUg T1MtOSAgICAgTm8gICAgICA3LjAuMTk2ICAgMSBKYW4gMjAwMAorICAgQ29tbW9kb3JlIEFtaWdh ICAgIE5vICAgICAgNy4wLjE5NiAgIDEgSmFuIDIwMDAKKyAgIE1hY2ludG9zaCAgICAgICAgICBO byAgICAgIDVBKDE5MCkgIDE2IEF1ZyAxOTk0ICAoTWFjIEtlcm1pdCAwLjk5MSkKKyAgIEF0YXJp IFNUICAgICAgICAgICBObyAgICAgIDVBKDE4OSkgIDMwIEp1biAxOTkzCisKK1FVSUNLIFNUQVJU IEZPUiBGVFAgVVNFUlMKKworICBJZiB5b3UgaGF2ZSBhIFdlYiBicm93c2VyLCBnbyB0bzoKKwor ICAgIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKKworICBBbmQg dGFrZSBpdCBmcm9tIHRoZXJlLiAgT3RoZXJ3aXNlLi4uCisKKyAgVGhlIGRlZmluaXRpdmUgRlRQ IHNvdXJjZSBmb3IgS2VybWl0IHNvZnR3YXJlIGlzIGtlcm1pdC5jb2x1bWJpYS5lZHUuCisgIEtl cm1pdCBzb2Z0d2FyZSBvYnRhaW5lZCBmcm9tIG90aGVyIEZUUCBzaXRlcyBpcyBub3QgbmVjZXNz YXJpbHkgY29tcGxldGUKKyAgb3IgdXAgdG8gZGF0ZSwgYW5kIG1heSBoYXZlIGJlZW4gbW9kaWZp ZWQuCisKK0MtS2VybWl0IGZvciBVTklYIGNvbXB1dGVycyB0aGF0IGhhdmUgYSBDIGNvbXBpbGVy IGFuZCAnbWFrZScgcHJvZ3JhbToKKworICBEaXJlY3Rvcnkga2VybWl0L2FyY2hpdmVzLCBiaW5h cnkgbW9kZSwgZmlsZSBja3UyMTEudGFyLlogb3IgY2t1MjExLnRhci5negorCisgIFRoaXMgaXMg YSBjb21wcmVzc2VkIHRhciBhcmNoaXZlIG9mIFVOSVggQy1LZXJtaXQgc291cmNlIGNvZGUsIG1h a2VmaWxlLCBhbmQKKyAgb3RoZXIgZmlsZXMuICBJdCB1bnBhY2tzIGludG8gaXRzIGN1cnJlbnQg ZGlyZWN0b3J5LCBzbyBkb3dubG9hZCBpdCBpbnRvIGEKKyAgZnJlc2ggZGlyZWN0b3J5LiAgVHJh bnNmZXIgaW4gYmluYXJ5IG1vZGUsIHVuY29tcHJlc3MgKG9yIGd1bnppcCksIHVudGFyICh0YXIK KyAgeHZmIGNrdTIxMS50YXIpLCBhbmQgdGhlbiBnaXZlIHRoZSBhcHByb3ByaWF0ZSAibWFrZSIg Y29tbWFuZCB0byBidWlsZCBmb3IKKyAgeW91ciBVTklYIHN5c3RlbTsgcmVhZCB0aGUgY29tbWVu dHMgaW4gdGhlIG1ha2VmaWxlIGFuZCBja3VpbnMudHh0IGZvcgorICBmdXJ0aGVyIGluZm8uCisK K0MtS2VybWl0IGZvciBWTVM6CisKKyAgSWYgeW91IGhhdmUgVk1TIFVOWklQLCBnZXQgdGhlIGZp bGUga2VybWl0L2FyY2hpdmVzL2NrdjIxMS56aXAgaW4gYmluYXJ5CisgIG1vZGUsIHVuemlwIC1h YSwgYW5kIGJ1aWxkIHdpdGggQ0tWS0VSLkNPTSAoQGNrdmtlci5jb20pLiAgUmVhZCB0aGUgY29t bWVudHMKKyAgYXQgdGhlIHRvcCBvZiBDS1ZLRVIuQ09NIGZvciBkZXRhaWxzLgorCitPdGhlcnM6 ICBJbiB0aGUga2VybWl0L2Ygb3Iga2VybWl0L3Rlc3QgZGlyZWN0b3JpZXMgdW5kZXIgdGhlIGFw cHJvcHJpYXRlCitwcmVmaXhlcywgZXhwbGFpbmVkIGJlbG93LgorCisKK0lOU1RBTExBVElPTgor CitJbnN0YWxsYXRpb24gcHJvY2VkdXJlcyBkZXBlbmQgb24gdGhlIG9wZXJhdGluZyBzeXN0ZW0u ICBQbGVhc2UgcmVhZCB0aGUKK0NLP0lOUy5UWFQsIGlmIGFueSwgZmlsZSBmb3IgeW91ciBvcGVy YXRpbmcgc3lzdGVtICg/PVUgZm9yIFVOSVgsIFYgZm9yIFZNUywKK2V0YykuICBQbGVhc2Ugbm90 ZSB0aGUgbmFtaW5nIGFuZCBwbGFjZW1lbnQgZm9yIHRoZSBpbml0aWFsaXphdGlvbiBmaWxlczoK KworICBDS0VSTUlULklOSQorICAgIC5rZXJtcmMgaW4gdGhlIHVzZXIncyBob21lIGRpcmVjdG9y eSAoVU5JWCkuCisgICAgQ0tFUk1JVC5JTkkgaW4gdGhlIHVzZXIncyBob21lIGRpcmVjdG9yeSAo b3RoZXIgT1MncykuCisKKworICBDS0VSTU9ELklOSQorICAgIC5teWtlcm1yYyBpbiB0aGUgdXNl cidzIGhvbWUgZGlyZWN0b3J5IChVTklYKS4KKyAgICBDS0VSTU9ELklOSSBlbHNld2hlcmUuCisK KyAgRElBTElORyBESVJFQ1RPUklFUworICAgIERpYWxpbmcgZGlyZWN0b3J5IGZpbGVzIGNhbiBi ZSBzeXN0ZW0td2lkZSwgcGVyLWdyb3VwLCBvciBwZXItdXNlciwgb3IKKyAgICBhbnkgY29tYmlu YXRpb24uICBGb3IgZXhhbXBsZSwgdGhlcmUgY2FuIGJlIGEgY29ycG9yYXRlIHdpZGUgZGlyZWN0 b3J5CisgICAgc2hhcmVkIGJ5IGFsbCB1c2VycywgYSBzdXBwbGVtZW50YWwgZGlyZWN0b3J5IGZv ciBlYWNoIGRpdmlzaW9uIG9yCisgICAgZGVwYXJ0bWVudCwgYW5kIGEgcGVyc29uYWwgZGlyZWN0 b3J5IGZvciBlYWNoIHVzZXIuICBTaW1wbHkgYmUgc3VyZSB0aGUKKyAgICBkaWFsaW5nIGRpcmVj dG9yeSBmaWxlcyBhcmUgaWRlbnRpZmllZCBhIFNFVCBESUFMIERJUkVDVE9SWSBjb21tYW5kIGlu CisgICAgdGhlIHVzZXIncyAob3IgdGhlIHN5c3RlbS13aWRlKSBDLUtlcm1pdCBpbml0aWFsaXph dGlvbiBmaWxlLCBvciBpbiB0aGUKKyAgICBlbnZpcm9ubWVudCB2YXJpYWJsZSAobG9naWNhbCBu YW1lLCBzeW1ib2wpIEtfRElBTF9ESVJFQ1RPUlkuICAoVGhlCisgICAgc3RhbmRhcmQgaW5pdGlh bGl6YXRpb24gZmlsZSBsb29rcyBieSBkZWZhdWx0IGluIHRoZSB1c2VyJ3MgaG9tZSBvciBsb2dp bgorICAgIGRpcmVjdG9yeS4pICBXaGVuIGluc3RhbGxpbmcgQy1LZXJtaXQgb24gbXVsdGl1c2Vy IHBsYXRmb3JtcyBmcm9tIHdoaWNoCisgICAgdXNlcnMgd2lsbCBkaWFsIG91dCwgeW91IGNhbiBh bHNvIHNldCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yIGFyZWEKKyAgICBjb2RlLCBjb3VudHJ5 IGNvZGUsIGFuZCB0aGUgdmFyaW91cyBkaWFsaW5nIHByZWZpeGVzIGFzIGRlc2NyaWJlZCBvbiBw YWdlCisgICAgNDc4IG9mICJVc2luZyBDLUtlcm1pdCIgKHNlY29uZCBlZGl0aW9uKSwgc28gdXNl cnMgZG9uJ3QgaGF2ZSB0byB3b3JyeQorICAgIGFib3V0IGRlZmluaW5nIHRoZXNlIGl0ZW1zIHRo ZW1zZWx2ZXMuICAgTmV0d29yayBkaXJlY3RvcmllcyBhbmQgc2VydmljZQorICAgIGRpcmVjdG9y aWVzIGNhbiBhbHNvIGJlIHNldCB1cCBpbiBhIHNpbWlsYXIgbWFubmVyLgorCisgIERPQ1VNRU5U QVRJT04KKyAgICBJbiBVTklYLCB0aGUgZ2VuZXJhbCBDLUtlcm1pdCBtYW4gcGFnZSAob3Igb25l IG9mIHRoZSB2ZXJzaW9ucyB0YWlsb3JlZAorICAgIGZvciBhIHNwZWNpZmljIHBsYXRmb3JtLCBs aWtlIEhQLVVYIG9yIFNvbGFyaXMpIHNob3VsZCBiZSBpbnN0YWxsZWQgaW4KKyAgICB0aGUgYXBw cm9wcmlhdGUgcGxhY2UuICBJbiBWTVMsIHRoZSBWTVMgaGVscCB0b3BpYyAoQ0tWS0VSLkhMUCkg c2hvdWxkCisgICAgYmUgaW5zdGFsbGVkIGFzIGRlc2NyaWJlZCBpbiBDS1ZJTlMuVFhULiAgUGxh aW4tdGV4dCBkb2N1bWVudGF0aW9uIHN1Y2gKKyAgICBhcyBDS0VSTUlUMi5UWFQgc2hvdWxkIGJl IHB1dCBpbiB3aGF0ZXZlciBwbGFjZSBwZW9wbGUgYXJlIGFjY3VzdG9tZWQKKyAgICB0byBsb29r aW5nLgorCitGSUxFUyBBTkQgRklMRSBOQU1JTkcgQ09OVkVOVElPTlMKKworQy1LZXJtaXQgaXMg YSBmYW1pbHkgb2YgS2VybWl0IHByb2dyYW1zIGZvciBtYW55IGRpZmZlcmVudCBjb21wdXRlciBz eXN0ZW1zLgorVGhlIHByb2dyYW0gc2hhcmVzIGEgY29tbW9uIHNldCBvZiBzeXN0ZW0taW5kZXBl bmRlbnQgZmlsZSB0cmFuc2ZlciBwcm90b2NvbAorbW9kdWxlcywgd3JpdHRlbiBpbiB0aGUgQyBs YW5ndWFnZS4gIFN5c3RlbS1kZXBlbmRlbnQgb3BlcmF0aW9ucyBhcmUgY29sbGVjdGVkCitpbnRv IHN5c3RlbS1zcGVjaWZpYyBtb2R1bGVzIGZvciBlYWNoIHN5c3RlbS4KKworQy1LZXJtaXQgZmls ZSBuYW1lcyBhbGwgc3RhcnQgd2l0aCB0aGUgbGV0dGVycyAiQ0siLCBmb2xsb3dlZCBieSBhIHNp bmdsZQorbGV0dGVyIGluZGljYXRpbmcgdGhlIHN1Ymdyb3VwLiAgV2hlbiByZWZlcnJpbmcgdG8g dGhlc2UgZmlsZXMgaW4gdGhlIFVOSVgsCitBT1MvVlMsIG9yIFZPUyBlbnZpcm9ubWVudHMsIHVz ZSBsb3dlcmNhc2UgbGV0dGVycywgcmF0aGVyIHRoYW4gdGhlIHVwcGVyY2FzZQorbGV0dGVycyBz aG93biBoZXJlLiAgU3ViZ3JvdXBzOgorCisgIF86IFNlY3VyaXR5L0F1dGhlbnRpY2F0aW9uL0Vu Y3J5cHRpb24gY29kZSwgcG9zc2libHkgcmVndWxhdGVkIGJ5IGxhdworICBhOiBHZW5lcmFsIGRl c2NyaXB0aXZlIG1hdGVyaWFsIGFuZCBkb2N1bWVudGF0aW9uCisgIGI6IEJPTyBmaWxlIGVuY29k ZXJzIGFuZCBkZWNvZGVycyAob2Jzb2xldGUpCisgIGM6IEFsbCBwbGF0Zm9ybXMgd2l0aCBDIGNv bXBpbGVycworICBkOiBEYXRhIEdlbmVyYWwgQU9TL1ZTCisgIGU6IFJlc2VydmVkIGZvciAiY2tl cm1pdCIgZmlsZXMsIGxpa2UgQ0tFUk1JVC5JTkksIENLRVJNSVQ4MC5UWFQKKyAgZjogKHJlc2Vy dmVkKQorICBnOiAocmVzZXJ2ZWQpCisgIGg6IChyZXNlcnZlZCkKKyAgaTogQ29tbW9kb3JlIEFt aWdhIChJbnR1aXRpb24pCisgIGo6ICh1bnVzZWQpCisgIGs6ICh1bnVzZWQpCisgIGw6IFN0cmF0 dXMgVk9TCisgIG06IE1hY2ludG9zaCB3aXRoIE1hYyBPUworICBuOiBNaWNyb3NvZnQgV2luZG93 cyBOVAorICBvOiBPUy8yIGFuZC9vciBNaWNyb3NvZnQgV2luZG93cyA5NS85OC9NRS9OVC8yMDAw L1hQLy4uLgorICBwOiBCZWxsIExhYnMgUGxhbiA5CisgIHE6IChyZXNlcnZlZCkKKyAgcjogREVD IFBEUC0xMSB3aXRoIFJTVFMvRSAocmVzZXJ2ZWQpCisgIHM6IEF0YXJpIFNUIEdFTURPUyAobGFz dCBzdXBwb3J0ZWQgaW4gdmVyc2lvbiA1QSgxODkpKQorICB0OiBERUMgUERQLTExIHdpdGggUlQt MTEgKHJlc2VydmVkKQorICB1OiBVTklYIG9yIGVudmlyb25tZW50cyB3aXRoIFVOSVgtbGlrZSBD IGxpYnJhcmllcworICB2OiBWTVMgYW5kIE9wZW5WTVMKKyAgdzogV2FydCAoTGV4LWxpa2UgcHJl cHJvY2Vzc29yLCB1c2VkIHdpdGggYWxsIHN5c3RlbXMpCisgIHg6IChyZXNlcnZlZCkKKyAgeTog KHJlc2VydmVkKQorICB6OiAocmVzZXJ2ZWQpCisgIDAtMzogKHJlc2VydmVkKQorICA0OiBJQk0g QVMvNDAwIChyZXNlcnZlZCBidXQgcHJvYmFibHkgbmV2ZXIgd2lsbCBiZSB1c2VkKQorICA1LTg6 IChyZXNlcnZlZCkKKyAgOTogTWljcm93YXJlIE9TLTkKKworRXhhbXBsZXM6CisKKyAgY2thYWFh LnR4dCAtIFRoaXMgZmlsZQorICBja3VmaW8uYyAgIC0gRmlsZSBpL28gZm9yIFVOSVgKKyAgY2tz dGlvLmMgICAtIENvbW11bmljYXRpb25zIGkvbyBmb3IgdGhlIEF0YXJpIFNUCisgIG1ha2VmaWxl ICAgLSBtYWtlZmlsZSBmb3IgYnVpbGRpbmcgVU5JWCBDLUtlcm1pdAorICBja3BrZXIubWsgIC0g bWFrZWZpbGUgZm9yIGJ1aWxkaW5nIFBsYW4gOSBDLUtlcm1pdAorICBja3ZrZXIuY29tIC0gYnVp bGQgcHJvY2VkdXJlIGZvciBWTVMgQy1LZXJtaXQKKworSU1QT1JUQU5UIEZJTEVTICh1c2UgbG93 ZXJjYXNlIG5hbWVzIG9uIFVOSVgsIFZPUywgb3IgQU9TL1ZTKToKKworICBja2FhYWEudHh0ICAt IFRoaXMgZmlsZSAob3ZlcnZpZXcgb2YgdGhlIEMtS2VybWl0IGZpbGVzKS4KKyAgICAgICAgICAg ICAgICBGb3Igc3lzdGVtLXNwZWNpZmljIGRpc3RyaWJ1dGlvbnMsIHRoaXMgd2lsbCBub3JtYWxs eQorICAgICAgICAgICAgICAgIGJlIHJlcGxhY2VkIGJ5IGEgc3lzdGVtLXNwZWNpZmljIFJFQUQu TUUgZmlsZS4KKworICBja2VybWl0NzAudHh0IC0gVXBkYXRlczogU3VwcGxlbWVudCB0byAiVXNp bmcgQy1LZXJtaXQiLCAybmQgRWQsIGZvciA3LjAuCisgIGNrZXJtaXQ4MC50eHQgLSBVcGRhdGVz OiBTdXBwbGVtZW50IHRvICJVc2luZyBDLUtlcm1pdCIsIDJuZCBFZCwgZm9yIDguMC4KKyAgY2t1 dHV0b3IudHh0ICAtIEMtS2VybWl0IFR1dG9yaWFsIGZvciBVbml4IChwbGFpbiB0ZXh0KQorICBj a2Nid3IudHh0ICAtICJCZXdhcmUgZmlsZSIgKGxpbWl0YXRpb25zLCBrbm93biBidWdzLCBoaW50 cyksIGdlbmVyYWwuCisgIGNrZXJtaXQuaW5pIC0gU3RhbmRhcmQgaW5pdGlhbGl6YXRpb24gZmls ZSAocmVuYW1lIHRvIC5rZXJtcmMgaW4gVU5JWCwgT1MtOSkKKyAgY2tlcm1vZC5pbmkgLSBTYW1w bGUgY3VzdG9taXphdGlvbiBmaWxlIChyZW5hbWUgdG8gLm15a2VybXJjIGluIFVOSVgsIE9TLTkp CisKK1RoZSBmb2xsb3dpbmcgY2FuIGJlIGZvdW5kIGF0IHRoZSBLZXJtaXQgRlRQIHNpdGU6CisK KyAgY2tlcm1pdC5rZGQgLSBTYW1wbGUgZGlhbGluZyBkaXJlY3RvcnkgZmlsZSAocmVuYW1lIHRv IC5rZGQgaW4gVU5JWCwgT1MtOSkKKyAgY2tlcm1pdC5rbmQgLSBTYW1wbGUgZGlhbGluZyBkaXJl Y3RvcnkgZmlsZSAocmVuYW1lIHRvIC5rbmQgaW4gVU5JWCwgT1MtOSkKKyAgY2tlcm1pdC5rc2Qg LSBTYW1wbGUgc2VydmljZXMgZGlyZWN0b3J5IGZpbGUgKHJlbmFtZSB0byAua3NkIGluIFVOSVgs IE9TLTkpCisgIGNrZWRlbW8ua3NjIC0gRGVtb25zdHJhdGlvbiBtYWNyb3MgZnJvbSAiVXNpbmcg Qy1LZXJtaXQiCisgIGNrZXBhZ2Uua3NjIC0gRGl0dG8KKyAgY2tldnQua3NjICAgLSBEaXR0bwor CitVTklYLXNwZWNpZmljIGZpbGVzOgorCisgIGNrdWlucy50eHQgLSBVTklYLXNwZWNpZmljIGlu c3RhbGxhdGlvbiBpbnN0cnVjdGlvbnMuCisgIGNrdWJ3ci50eHQgLSBVTklYLXNwZWNpZmljIGJl d2FyZSBmaWxlLgorICBja3VrZXIubnIgIC0gIm1hbiBwYWdlIiBmb3IgVU5JWC4KKworVk1TLXNw ZWNpZmljIGZpbGVzOgorCisgIGNrdmlucy50eHQgLSBWTVMtc3BlY2lmaWMgaW5zdGFsbGF0aW9u IGluc3RydWN0aW9ucy4KKyAgY2t2YndyLnR4dCAtIFZNUy1zcGVjaWZpYyBiZXdhcmUgZmlsZQor ICBja3ZrZXIuaGxwIC0gVk1TIEMtS2VybWl0IEhFTFAgdG9waWMgKG5lZWRzIHVwZGF0aW5nKS4K KworREcgQU9TL1ZTLXNwZWNpZmljIGZpbGVzOgorCisgIGNrZGlucy50eHQgLSBEYXRhIEdlbmVy YWwgQU9TL1ZTIEMtS2VybWl0IGluc3RhbGxhdGlvbiBpbnN0cnVjdGlvbnMKKyAgY2tkYndyLnR4 dCAtIEFPUy9WUyAiYmV3YXJlIiBmaWxlCisgIGNrZCouY2xpICAgLSBQcm9jZWR1cmVzIGZvciBi dWlsZGluZyBBT1MvVlMgQy1LZXJtaXQKKworVGhlIGZvbGxvd2luZyBmaWxlcyBhcmUgb2YgaW50 ZXJlc3QgbWFpbmx5IHRvIHByb2dyYW1tZXJzIGFuZCBoaXN0b3JpYW5zCisoZmluZCB0aGVtIGF0 IHRoZSBLZXJtaXQgZnRwIHNpdGUgaW4gdGhlIGtlcm1pdC9mIGRpcmVjdG9yeSk6CisKKyAgY2tj a2VyLmFubiAtIFJlbGVhc2UgYW5ub3VuY2VtZW50cy4KKyAgY2tjY2ZnLnR4dCAtIENvbmZpZ3Vy YXRpb24gaW5mb3JtYXRpb24gKGZlYXR1cmUgc2VsZWN0aW9uKSwgZ2VuZXJhbC4KKyAgY2tjcGxt LnR4dCAtIFByb2dyYW0gbG9naWMgbWFudWFsIChmb3IgcHJvZ3JhbW1lcnMpLgorICBja2MzMDAu dHh0IC0gUHJvZ3JhbSB1cGRhdGUgaGlzdG9yeSBmb3IgZWRpdCAyMTItMzAwIChDLUtlcm1pdCA5 LjApLgorICBja2MyMTEudHh0IC0gUHJvZ3JhbSB1cGRhdGUgaGlzdG9yeSBmb3IgZWRpdCAyMDEt MjExLgorICBja2MyMDAudHh0IC0gUHJvZ3JhbSB1cGRhdGUgaGlzdG9yeSBmb3IgZWRpdCAxOTgt MjAwIChiaWcpCisgIGNrYzE5Ny50eHQgLSBQcm9ncmFtIHVwZGF0ZSBoaXN0b3J5IGZvciBlZGl0 IDE5NS0xOTcgKGJpZykKKyAgY2tjMTkwLnR4dCAtIFByb2dyYW0gdXBkYXRlIGhpc3RvcnkgZm9y IGVkaXRzIDE4OS0xOTAgKGJpZykuCisgIGNrYzE4OC50eHQgLSBQcm9ncmFtIHVwZGF0ZSBoaXN0 b3J5LCBlZGl0cyAxNzktMTg4IChiaWcpLgorICBja2MxNzgudHh0IC0gUHJvZ3JhbSBlZGl0IGhp c3RvcnksIDVBIGVkaXRzIHRocm91Z2ggMTc4ICh2ZXJ5IGJpZykuCisgIGNrY3Y0Zi50eHQgLSBQ cm9ncmFtIGVkaXQgaGlzdG9yeSwgdmVyc2lvbiA0Ri4KKyAgY2tjdjRlLnR4dCAtIFByb2dyYW0g ZWRpdCBoaXN0b3J5LCB2ZXJzaW9uIDRFLgorCitCSU5BUklFUworCitJZiB5b3UgaGF2ZSBGVFAg YWNjZXNzIHRvIGtlcm1pdC5jb2x1bWJpYS5lZHUgKGFsc28ga25vd24gYXMKK2tlcm1pdC5jYy5j b2x1bWJpYS5lZHUsIGZ0cC5jYy5jb2x1bWJpYS5lZHUpLCB5b3UgY2FuIGFsc28gcmV0cmlldmUg dmFyaW91cworQy1LZXJtaXQgYmluYXJpZXMgZnJvbSB0aGUgZGlyZWN0b3J5IGtlcm1pdC9iaW4v Y2sqLiosIG9yIG1vcmUgY29udmVuaWVudGx5Citmcm9tIHRoZSB3ZWIgcGFnZToKKworICBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2s4MGJpbmFyaWVzLmh0bWwKKworVGVzdCB2ZXJz aW9ucyB3b3VsZCBiZSBpbiBrZXJtaXQvdGVzdC9iaW4vY2sqLiouICBCZSBzdXJlIHRvIHRyYW5z ZmVyIHRoZXNlCitmaWxlcyBpbiBiaW5hcnkgbW9kZS4gIFRoZSBSRUFELk1FIGZpbGUgaW4gdGhh dCBkaXJlY3RvcnkgZXhwbGFpbnMgd2hhdCdzCit3aGF0LgorCitTT1VSQ0UgRklMRVMKKworVGhl IHNvdXJjZSBmaWxlcyBmb3IgdGhlIFVOSVggdmVyc2lvbiAoYWxsIFVOSVggdmVyc2lvbnMpIGFy ZSBhdmFpbGFibGUgaW4KK2tlcm1pdC9hcmNoaXZlcy9ja3VOTk4udGFyLlosIGFwcHJveGltYXRl bHkgMU1CIGluIHNpemUuICBUcmFuc2ZlciB0aGlzIGZpbGUKK2luIGJpbmFyeSBtb2RlLiAgVGhp cyBpcyBhIGNvbXByZXNzZWQgdGFyIGFyY2hpdmUuICBUaGVyZSBpcyBhbHNvIGEgZ3ppcCdkCit2 ZXJzaW9uLCBja3UyMTEudGFyLmd6LiAgVG8gZ2V0IHRoZSBiaW5hcnkgdGFyIGFyY2hpdmU6CisK KyAgbWtkaXIga2VybWl0ICAgICAgICAgICAgICAgICAgIChhdCBzaGVsbCBwcm9tcHQsIG1ha2Ug YSBLZXJtaXQgZGlyZWN0b3J5KQorICBjZCBrZXJtaXQgICAgICAgICAgICAgICAgICAgICAgKG1h a2UgaXQgeW91ciBjdXJyZW50IGRpcmVjdG9yeSkKKworICBmdHAga2VybWl0LmNvbHVtYmlhLmVk dSAgICAgICAgKG1ha2UgYW4gZnRwIGNvbm5lY3Rpb24pCisgIHVzZXI6IGFub255bW91cyAgICAg ICAgICAgICAgICAobG9nIGluIGFzIHVzZXIgImFub255bW91cyIsIGxvd2VyIGNhc2UhKQorICBw YXNzd29yZDogICAgICAgICAgICAgICAgICAgICAgKHVzZSB5b3VyIGVtYWlsIGlkIGFzIGEgcGFz c3dvcmQpCisgIGNkIGtlcm1pdC9hcmNoaXZlcyAgICAgICAgICAgICAoZ28gdG8gdGhlIGFyY2hp dmVzIGRpcmVjdG9yeSkKKyAgdHlwZSBiaW5hcnkgICAgICAgICAgICAgICAgICAgIChzcGVjaWZ5 IGJpbmFyeSBmaWxlIHRyYW5zZmVyKQorICBnZXQgY2t1MzAwLnRhci5aICAgICAgICAgICAgICAg KGdldCB0aGUgdGFyIGFyY2hpdmUpIChvciBnZXQgY2t1MTkyLnRhci5neikKKyAgYnllICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChkaXNjb25uZWN0IGFuZCBleGl0IGZyb20gZnRwKQorCisg IHVuY29tcHJlc3MgY2t1MzAwLnRhci5aICAgICAgICAoYXQgdGhlIHNoZWxsIHByb21wdCwgdW5j b21wcmVzcyB0aGUgYXJjaGl2ZSkKKyAgdGFyIHh2ZiBja3UzMDAudGFyICAgICAgICAgICAgIChl eHRyYWN0IHRoZSBmaWxlcyBmcm9tIHRoZSB0YXIgYXJjaGl2ZSkKKyAgbWFrZSB4eHggICAgICAg ICAgICAgICAgICAgICAgIChidWlsZCBDLUtlcm1pdCBmb3IgeW91ciBzeXN0ZW0pCisKKyh3aGVy ZSAieHh4IiBpcyB0aGUgbWFrZWZpbGUgZW50cnkgYXBwcm9wcmlhdGUgZm9yIHlvdXIgc3lzdGVt LikKKworQWxsIEMtS2VybWl0IHNvdXJjZSBhbmQgb3RoZXIgdGV4dCBmaWxlcyBhcmUgYWxzbyBr ZXB0IHNlcGFyYXRlbHkgaW4gdGhlCitrZXJtaXQvZiBkaXJlY3RvcnkuICBUaGUgZmlsZXMgbmVj ZXNzYXJ5IHRvIGJ1aWxkIGEgcGFydGljdWxhciBpbXBsZW1lbnRhdGlvbgorb2YgQy1LZXJtaXQg YXJlIGxpc3RlZCBpbiB0aGUgYXBwcm9wcmlhdGUgbWFrZWZpbGUgb3IgZXF1aXZhbGVudDoKKwor ICAgICAgIFVOSVg6IG1ha2VmaWxlIChvciByZW5hbWUgY2t1a2VyLm1hayB0byBtYWtlZmlsZSkK KyAgIDIuMTEgQlNEOiBja3ViczIubWFrIChyZW5hbWUgdG8gbWFrZWZpbGUpLCBja3VzdHIuc2Vk CisgICAgIFBsYW4gOTogY2twa2VyLm1rICAocmVuYW1lIHRvIG1rZmlsZSkKKyAgTWFjaW50b3No OiBja21rZXIubWFrIChyZW5hbWUgdG8ga2VybWl0Lm1ha2UsIHVzZSBNUFcgQyAzLjIpCisgICAg ICAgIFZNUzogQ0tWS0VSLkNPTSAoRENMKSAoYW5kIG9wdGlvbmFsbHkgYWxzbyBDS1ZLRVIuTU1T KQorICAgICAgICAgICAgIG9yIENLVk9MRC5DT00gKGZvciBWTVMgNC54KQorICAgICAgQW1pZ2E6 IENLSUtFUi5NQUsgKEF6dGVjIEMpIG9yIENLSVNBUy5NQUsgKFNBUyBDKQorICAgQXRhcmkgU1Q6 IENLU0tFUi5NQUsKKyAgICAgICBPUy05OiBjazlrZXIubWFrIG9yIGNrOWtlci5nY2MKKyAgICAg QU9TL1ZTOiBja2RtYWsuY2xpLCBja2RjYy5jbGksIGNrZGxuay5jbGkKK1N0cmF0dXMgVk9TOiBj a2xtYWsuY20KKworTWluaW1hbCBzb3VyY2UgZmlsZXMgZm9yIGJ1aWxkaW5nIHNlbGVjdGVkIHZl cnNpb25zICh0aGVzZSBwYXR0ZXJucyBnZXQgYWxsCit0aGUgZmlsZXMgeW91IG5lZWQsIGFuZCBp biBzb21lIGNhc2VzIG1heWJlIGEgZmV3IGV4dHJhKToKKworICAgVU5JWDogICBja1tjdXddKi5b Y3doXSAgIChpbmNsdWRpbmcgUU5YLCBQbGFuIDksIGFuZCBCZUJveCkKKyAgIFVOSVg6ICAgY2tb Y3V3X10qLltjd2hdICAoVW5peCB3aXRoIHNlY3VyaXR5IG1vZHVsZXMpCisgICBWTVM6ICAgIGNr W2N1d3ZdKi5bY3doXSAgVk1TCisgICBWTVM6ICAgIGNrW2N1d3ZfXSouW2N3aF0gVk1TIHdpdGgg U1NML1RMUworICAgTWFjOiAgICBja1tjdXdtXSouW2N3aHJdIE9sZCBNYWMgT1MsIG5vdCBNYWMg T1MgWCwgd2hpY2ggaXMgVU5JWC4KKyAgIEFPUy9WUzogY2tbY3V3ZF0qLltjd2hdCisgICBWT1M6 ICAgIGNrW2N3aGxdKi5bY3doXQorICAgQW1pZ2E6ICBja1tjdXdpXSouW2N3aF0KKyAgIEF0YXJp OiAgY2tbY3V3c10qLltjd2hdCisgICBPUy05OiAgIGNrW2N1dzldKi5bY3doYV0KKworRmluYWxs eSwgaGVyZSBpcyBhIG1vcmUgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgdGhlIEMtS2VybWl0IGZp bGUgbmFtaW5nCitjb252ZW50aW9ucy4gIEEgQy1LZXJtaXQgZmlsZW5hbWUgaGFzIHRoZSBmb3Jt OgorCisgIENLPHN5c3RlbT48d2hhdD4uPHR5cGU+CisKK3doZXJlOgorCis8c3lzdGVtPiBpcyBk ZXNjcmliZWQgZWFybGllciBpbiB0aGlzIGZpbGU7CisKKzx0eXBlPiBpcyB0aGUgZmlsZSB0eXBl ICh1c2UgbG93ZXJjYXNlIG9uIFVOSVgsIFZPUywgb3IgQU9TL1ZTKToKKworICBjOiAgIEMgbGFu Z3VhZ2Ugc291cmNlCisgIGg6ICAgSGVhZGVyIGZpbGUgZm9yIEMgbGFuZ3VhZ2Ugc291cmNlCisg IHc6ICAgV2FydCBwcmVwcm9jZXNzb3Igc291cmNlLCBjb252ZXJ0ZWQgYnkgV2FydCAob3IgTGV4 KSB0byBhIEMgcHJvZ3JhbQorICByOiAgIE1hY2ludG9zaCByZXNvdXJjZSBmaWxlICg4LWJpdCB0 ZXh0KQorICBhOiAgIEFzc2VtYmxlciBzb3VyY2UKKworICB0eHQ6IFBsYWluIHRleHQuCisgIG5y OiAgTnJvZmYvVHJvZmYgdGV4dCBmb3JtYXR0ZXIgc291cmNlIGZvciBVTklYICJtYW4gcGFnZSIK KyAgbXNzOiBTY3JpYmUgdGV4dCBmb3JtYXR0ZXIgc291cmNlCisgIHBzOiAgVHlwZXNldCBtYXRl cmlhbCB0byBiZSBwcmludGVkIG9uIGEgUG9zdFNjcmlwdCBwcmludGVyCisgIHBkZjogQW4gQWRv YmUgUERGIGZpbGUKKyAgaGxwOiBBIFZNUyBIZWxwIHRvcGljCisKKyAgaW5pOiBJbml0aWFsaXph dGlvbiBmaWxlCisgIGtzYzogQSBLZXJtaXQgU2NyaXB0IHRvIGJlIGV4ZWN1dGVkIGJ5IHRoZSBU QUtFIGNvbW1hbmQKKyAga2RkOiBBIEtlcm1pdCBEaWFsaW5nIERpcmVjdG9yeQorICBrbmQ6IEEg S2VybWl0IE5ldHdvcmsgRGlyZWN0b3J5CisgIGtzZDogQSBLZXJtaXQgU2VydmljZXMgRGlyZWN0 b3J5CisKKyAgbWFrOiBBIE1ha2VmaWxlIG9yIG90aGVyIGJ1aWxkIHByb2NlZHVyZSAob2Z0ZW4g bmVlZHMgcmVuYW1pbmcpCisgIGNvbTogKFZNUyBvbmx5KSBhIERDTCBjb21tYW5kIHByb2NlZHVy ZQorICBjbGk6IChBT1MvVlMgb25seSkgYSBjb21tYW5kIHByb2NlZHVyZQorICBjbWQ6IChPUy8y IG9ubHkpIGEgUmV4eCBjb21tYW5kIHByb2NlZHVyZQorCisgIGJvbzogImJvbyItZW5jb2RlZCBl eGVjdXRhYmxlIHByb2dyYW0sIGRlY29kZSB3aXRoIENLQlVOQiBwcm9ncmFtLgorICBoZXg6ICJo ZXgiLWVuY29kZWQgZXhlY3V0YWJsZSBwcm9ncmFtLCBkZWNvZGUgd2l0aCBDS1ZERUggcHJvZ3Jh bSAoVk1TIG9ubHkpLgorICBocXg6IEJpbkhleCdkIE1hY2ludG9zaCBLZXJtaXQgcHJvZ3JhbSwg ZGVjb2RlIHdpdGggQmluSGV4IHZlcnNpb24gNC4wLgorICB1dWU6IEEgdXVlbmNvZGVkIGJpbmFy eSBmaWxlLCBkZWNvZGUgd2l0aCB1dWRlY29kZSBvciAoREcgb25seSkgQ0tERUNPLgorCisgIGRl ZjogQW4gT1MvMiBsaW5rZXIgZGVmaW5pdGlvbnMgZmlsZS4KKyAgc2g6ICBBIFVOSVggc2hlbGwg c2NyaXB0LgorICBzZWQ6IEEgVU5JWCBzZWQgKGVkaXRvcikgc2NyaXB0LgorICBzdHI6IEEgZmls ZSBvZiBjaGFyYWN0ZXIgc3RyaW5ncyBleHRyYWN0ZWQgZnJvbSBDLUtlcm1pdCAoQlNEIDIuMXgg b25seSkuCisKKzx3aGF0PiBpcyBtbmVtb25pYyAodXAgdG8gMyBjaGFyYWN0ZXJzKSBmb3Igd2hh dCdzIGluIHRoZSBmaWxlOgorCitOT1RFOiBBZnRlciBDLUtlcm1pdCA2LjAsIHRleHQgZmlsZXR5 cGVzIHN1Y2ggYXMgLkRPQyBhbmQgLkhMUCB3ZXJlIGNoYW5nZWQKK3RvIC5UWFQgdG8gYXZvaWQg Y29uZnVzaW9uIGluIFdpbmRvd3MtYmFzZWQgV2ViIGJyb3dzZXJzLCB3aGljaCB3b3VsZAorb3Ro ZXJ3aXNlIG1pc3Rha2UgdGhlbSBmb3IgTWljcm9zb2Z0IFdvcmQgb3IgV2luZG93cyBIZWxwIGRv Y3VtZW50cy4KKworICBhYWE6IEEgInJlYWQtbWUiIGZpbGUsIGxpa2UgdGhpcyBvbmUKKyAgaW5z OiBJbnN0YWxsYXRpb24gaW5zdHJ1Y3Rpb25zIG9yIHByb2NlZHVyZXMKKyAgYndyOiAiQmV3YXJl IiBmaWxlIC0tIHRoaW5ncyB0byB3YXRjaCBvdXQgZm9yLCBoaW50cyBhbmQgdGlwcworICBwbG06 IFByb2dyYW0gTG9naWMgTWFudWFsCisgIGtlcjogR2VuZXJhbCBDLUtlcm1pdCBkZWZpbml0aW9u cywgaW5mb3JtYXRpb24sIGRvY3VtZW50YXRpb24KKworICBubm46IERpZ2l0czogQy1LZXJtaXQg ZWRpdCBudW1iZXIgKGUuZy4gY2t1MzAwLnRhci5neikKKyAgY21kOiBDb21tYW5kIHBhcnNpbmcK KyAgY29uOiBDT05ORUNUIGNvbW1hbmQKKyAgY25zOiBDT05ORUNUIGNvbW1hbmQgKFVOSVggb25s eSAtIHZlcnNpb24gdGhhdCB1c2VzIHNlbGVjdCgpLCBub3QgZm9yaygpKQorICBkZWI6IERlYnVn L1RyYW5zYWN0aW9uIExvZyBmb3JtYXRzLCBUeXBlZGVmcworICBkaWE6IE1vZGVtL0RpYWxlciBj b250cm9sCisgIGZpbzogU3lzdGVtLWRlcGVuZGVudCBGaWxlIEkvTworICBmbnM6IFByb3RvY29s IHN1cHBvcnQgZnVuY3Rpb25zCisgIGZuMjogTW9yZSBwcm90b2NvbCBzdXBwb3J0IGZ1bmN0aW9u cyAoYW5kIEZOMywgLi4uKQorICBsaWI6IENvbW1vbiBsaWJyYXJ5IHJvdXRpbmVzIG1vZHVsZQor ICBtYWk6IE1haW4gcHJvZ3JhbQorICBuZXQ6IE5ldHdvcmsgaS9vIG1vZHVsZQorICBwcm86IFBy b3RvY29sCisgIHNjcjogU0NSSVBUIGNvbW1hbmQKKyAgdGVsOiBUZWxuZXQgcHJvdG9jb2wgbW9k dWxlCisgIHRpbzogU3lzdGVtLWRlcGVuZGVudCBjb21tdW5pY2F0aW9ucyBpL28gJiBjb250cm9s IGFuZCBpbnRlcnJ1cHQgaGFuZGluZworICBzaWc6IFNpZ25hbCBoYW5kbGluZyBtb2R1bGUKKyAg dXNyOiBJbnRlcmFjdGl2ZS9zY3JpcHQgdXNlciBpbnRlcmZhY2UKKyAgdXMyOiBNb3JlIHVzZXIg aW50ZXJmYWNlIChtYWlubHkgaGVscCB0ZXh0KQorICB1czM6IFN0aWxsIG1vcmUgdXNlciBpbnRl cmZhY2UgKGFuZCBVU1I0LCBVU1I1LCBVU1I2LCBVU1I3KQorICB1c3g6IENvbW1vbiB1c2VyIGlu dGVyZmFjZSBmdW5jdGlvbnMKKyAgdXN5OiBDb21tYW5kLWxpbmUgcGFyc2luZworICB4bGE6IENo YXJhY3RlciBzZXQgdHJhbnNsYXRpb24gbW9kdWxlCisgIHVuaTogVW5pY29kZSBzdXBwb3J0Cisg IHB0eTogUHNldWRvdGVybWluYWwgc3VwcG9ydAorICBtZGI6IE1hbGxvYy1kZWJ1Z2dpbmcgbW9k dWxlIChub3QgaW5jbHVkZWQgaW4gcmVhbCBidWlsZHMpCisgIHN0cjogU3RyaW5ncyBtb2R1bGUg KG9ubHkgZm9yIDIueEJTRCkKKworKEVuZCBvZiBja2FhYWEudHh0KQoKZGlmZiAtLWdpdCBhL2Nr ZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2tjMzAyLnR4dCBiL2NrZXJtaXQt OS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2tjMzAyLnR4dApuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwLi4xM2E2NjFhCi0tLSAvZGV2L251bGwKKysrIGIvY2tlcm1pdC05 LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2MzMDIudHh0CkBAIC0wLDAgKzEsNzg4MSBA QAorQy1LRVJNSVQgOS4wIENIQU5HRSBMT0cgKENoYW5nZXMgc2luY2UgOC4wLjIwNyAvIEs5NSAy LjEuMyBKYW51YXJ5IDIwMDMpCisKKyAgQ2hyb25vbG9naWNhbCBvcmRlci4KKyAgR28gdG8gdGhl IGJvdHRvbSB0byBmaW5kIHRoZSBuZXdlc3QgZWRpdHMuCisKKyAgRi4gZGEgQ3J1eiwgVGhlIEtl cm1pdCBQcm9qZWN0LCBDb2x1bWJpYSBVbml2ZXJzaXR5LCBOWUMuCisgIExhc3QgdXBkYXRlOiAy OCBKdW5lIDIwMTEuCisKK0ZUUCBVU0VSLCBGVFAgQUNDT1VOVCwgcGx1cyB0aGUgdmFyaW91cyBw cm9tcHRzIGFuZCBzd2l0Y2hlcyBmb3IgRlRQIHVzZXJuYW1lLAorcGFzc3dvcmQsIGFuZCBhY2Nv dW50IGFsbCBuZWdsZWN0ZWQgdG8gc3RyaXAgcXVvdGVzLCBhbmQgaW4gbW9zdCBjYXNlcyBxdW90 ZXMKK2FyZSBuZWNlc3NhcnkgdG8gc3BlY2lmeSBhIHVzZXJuYW1lIHRoYXQgY29udGFpbnMgc3Bh Y2VzLiAgY2tjZnRwLmMsCisxNSBKYW4gMjAwMy4KKworRlRQIE1QVVQgZjEgZjIgZjMuLi4gZ2V0 cyBhIHBhcnNlIGVycm9yIGlmIGFueSBvZiB0aGUgZm4ncyBkbyBub3QgbWF0Y2ggYW4KK2V4aXN0 aW5nIGZpbGUuICBUaGlzIGlzIGJhZCBmb3Igc2NyaXB0cy4gIEluIGRvZnRwcHV0KCksIGNtZmRi KCkgbG9va3MgZm9yCitrZXl3b3JkcyAoc3dpdGNoZXMpIG9yIENNSUZJLiAgV2hlbiBpdCBoaXRz IENNSUZJLCBpdCBleGl0cyBmcm9tIHRoZSBpbml0aWFsCitwYXJzZSBsb29wIGFuZCB0aGVuIGRv ZXMgYWRkaXRpb25hbCBjbWlmaSgpcyBpbiBhIGxvb3AgdW50aWwgZG9uZS4gIFRoZSBtb3N0Citv YnZpb3VzIGZpeCBpcyB0byBwYXJzZSBlYWNoIGZpZWxkIHdpdGggY21mZGIoQ01JRkksQ01GTEQp LCBpLmUuIGZhbGwgYmFjayB0bworQ01GTEQgaWYgQ01JRkkgZG9lc24ndCBtYXRjaCBhbnl0aGlu Zy4gIFRoZW4gaWYgQ01GTEQgd2FzIHVzZWQsIHdlIGRvbid0IGFkZAordGhlIGZpbGVzcGVjIHRv IHRoZSBsaXN0LiAgVGhpcyBpcyBhIHJhdGhlciBiaWcgY2hhbmdlIGJ1dCBpdCBzZWVtcyB0byB3 b3JrLgorTm8gZXJyb3IgbWVzc2FnZXMgb3IgZmFpbHVyZXMgaGFwcGVuIGZvciBub24tbWF0Y2hp bmcgZmllbGRzLCBidXQgYW4gZXJyb3IKK21lc3NhZ2UgaXMgcHJpbnRlZCAoYW5kIHRoZSBNUFVU IGNvbW1hbmQgZmFpbHMpIGlmIG5vbmUgb2YgdGhlIGZpZWxkcyBtYXRjaAorYW55IGZpbGVzLiAg VGhpcyBmaXggZ290IGluIHRvbyBsYXRlIGZvciAyLjEuMzsgd29ya2Fyb3VuZDogdXNlIEMtU2hl bGwKK2xpa2Ugd2lsZGNhcmQgbGlzdCAoZnRwIG1wdXQgInsqLmFiYyxmb28uKn0iKS4gIGNrY2Z0 cC5jLCAxNiBKYW4gMjAwMy4KKworR1JFUCBkaWQgbm90IHBhc3MgaXRzIHBhdHRlcm4gdGhyb3Vn aCB0aGUgZXhwYW5kZXIsIHRodXMgdmFyaWFibGVzIGNvdWxkCitub3QgYmUgdXNlZCBmb3IgcGF0 dGVybnMuICBUaGlzIG11c3QgaGF2ZSBiZWVuIGFuIG92ZXJzaWdodCAtLSBJIGNhbid0IGZpbmQK K2FueXRoaW5nIGluIG15IG5vdGVzIGFib3V0IGl0LiAgRml4ZWQgaW4gZG9ncmVwKCk6IGNrdXVz Ni5jLCAyNCBKYW4gMjAwMy4KKworTmV3IG1ha2VmaWxlIHRhcmdldCBmb3IgSFAtVVggMTEueHgg d2l0aCBPcGVuU1NMIGZyb20gVGFwYW5pIFRhcnZhaW5lbi4KK21ha2VmaWxlLCAzMSBKYW4gMjAw My4KKworRnJvbSBKZWZmOgorIC4gQXZvaWQgY29yZSBkdW1wIHdoZW4gZGVyZWZlcmVuY2luZyB0 bmNfZ2V0X3NpZ25hdHVyZSgpOiBja3V1czQuYy4KKyAuIEJ1bXAgdmVyc2lvbiBudW1iZXJzIHRv IDguMC4yMDgsIDIuMS40OiBja2NtYWkuYy4KKworQWRkZWQgL05PTE9HSU4gdG8gRlRQIFtPUEVO XS4gIGNrY2Z0cC5jLCAxMCBGZWIgMjAwMy4KKworRG9uJ3QgZHVtcCBjb3JlIGlmIEZUUCBERUJV RyBpcyBPTiBhbmQgRlRQIE9QRU4gZG9lcyBub3QgaW5jbHVkZSBhIHNlcnZpY2UuCitvcGVuZnRw KCk6IGNrY2Z0cC5jLCAxMCBGZWIgMjAwMy4KKworSEVMUCBQQVRURVJOIHRleHQgaW5jb3JyZWN0 bHkgaWRlbnRpZmllZCBjb21tYW5kcyBhbmQgZnVuY3Rpb25zIHdpdGgKK2Zsb2F0aW5nIGFuZCBh bmNob3JlZCBwYXR0ZXJucy4gIFRoZSBjb3JyZWN0ZWQgbGlzdHMgYXJlOgorRmxvYXRpbmc6IEdS RVAsIFRZUEUgL01BVENIOiwgL0VYQ0VQVDogcGF0dGVybnMsIFxmYXJyYXlsb29rKCksCitBbmNo b3JlZDogSUYgTUFUQ0gsIGZpbGUtbWF0Y2hpbmcgd2lsZGNhcmRzLCBcZnNlYXJjaCgpLCBcZnJz ZWFyY2goKQorY2t1dXMyLmMsIDEwIEZlYiAyMDAzLiAgICAgCisKK0lOUFVUIG4gXGZwYXR0ZXJu KHh4eCkgZGlkIG5vdCB3b3JrIGZvciBjYXNlLWluZGVwZW5kZW50IGNvbXBhcmlzb25zLgorRml4 ZWQgaW4gZG9pbnB1dCgpOiBja3V1czQuYywgMTAgRmViIDIwMDMuCisKK0l0IHNlZW1zIFxmcGF0 dGVybigpIGRpZG4ndCB3b3JrIHdpdGggTUlOUFVUIGF0IGFsbC4gIFRoZXJlIHdhcyBubyBjb2Rl IHRvCitoYW5kbGUgXGZwYXR0ZXJuKCkgaW4gdGhlIE1JTlBVVCBwYXJzZSBsb29wLCBzbyBpdCBu ZXZlciB3b3JrZWQuICBUaGUgY29kZQoraGFkIHRvIGJlIHRvdGFsbHkgcmV3cml0dGVuIHRvIHVz ZSBjbWZsZCgpIGluIGEgbG9vcCwgcmF0aGVyIHRoYW4gY210eHQoKQorYW5kIHRoZW4gY2tzcGxp dCgpLiAgRnVydGhlcm1vcmUsIHdoZW5ldmVyIGFueSBvZiB0aGUgZmllbGRzIHdhcyBhbgorXGZq b2luKCksIHRoaXMgaGFkIHRvIGJlIHNwbGl0LiAgY2t1dXNyLmMsIDEwIEZlYiAyMDAzLgorCitN YWNybyByZXBsYWNlbWVudCB2aWEgXG0oKSBhbmQgXGZkZWZpbml0aW9uKCkgZG9lcyBub3Qgd29y ayBhcyBhZHZlcnRpc2VkCisoaS5lLiBjYXNlIHNlbnNpdGl2ZWx5KSBmb3IgYXNzb2NpYXRpdmUg YXJyYXkgZWxlbWVudHM7IGUuZy4gXG0oeHh4PGFiYz4pIGlzCit0cmVhdGVkIHRoZSBzYW1lIGFz IFxtKHh4eDxBQkM+KSwgY29udHJhcnkgdG8gc2VjdGlvbiA3LjEwLjEwIG9mIHRoZSBDLUtlcm1p dAorNy4wIHVwZGF0ZSBub3RlcywgYW5kIHRvIHRoZSBmYWN0IHRoYXQgdGhlIHR3byByZWFsbHkg ZG8gZXhpc3Qgc2VwYXJhdGVseS4KK0ZpeGVkIGJ5IGFkZGluZyBhIHN0YXRpYyBmdW5jdGlvbiBp c2FhcnJheShzKSB3aGljaCBzdWNjZWVkcyBpZiBzIGlzIGFuCithc3NvY2lhdGl2ZSBhcnJheSBy ZWZlcmVuY2UgYW5kIGZhaWxzIG90aGVyd2lzZSwgYW5kIHRoZW4gaGF2aW5nIFxtKCkKK2FuZCBc ZmRlZigpIGNhbGwgbXh4bG9vaygpIChjYXNlLXNlbnNpdGl2ZSBsb29rdXApIGlmIGlzYWFycmF5 KCksIG90aGVyd2lzZQorKGFzIGJlZm9yZSkgbXhsb29rKCkpLiAgY2t1dXM0LmMsIDExIEZlYiAy MDAzLgorCitGaXhlZCBGVFAgT1BFTiB0byBhbGxvdyB0aGUgL1VTRVIgc3dpdGNoIHRvIG92ZXJy aWRlIFNFVCBGVFAgQVVUT0xPR0lOIE9GRiwKK2p1c3QgYXMgL05PTE9HSU4gb3ZlcnJpZGVzIFNF VCBGVFAgQVVUT0xPR0lOIE9OLiAgY2tjZnRwLmMsIDExIEZlYiAyMDAzLgorCitJbiBLOTUsICJz ZXQga2V5IFwxMjM0IFwyN0giIChhbnkgU0VUIEtFWSBjb21tYW5kIGluIHdoaWNoIHRoZSBmaXJz dCBjaGFyIG9mCit0aGUgZGVmaW5pdGlvbiB3YXMgYmFja3NsYXNoLCBhbmQgdGhlIE9OTFkgY2hh cmFjdGVyIGFmdGVyIHRoZSBiYWNrc2xhc2gKK3F1YW50aXR5IHdhcyBhbiB1cHBlcmNhc2UgbGV0 dGVyLCB0aGF0IGxldHRlciB3b3VsZCBiZSBsb3dlcmNhc2VkKS4gIERpYWdub3NpczoKK3hsb29r dXAoKSBwb2tpbmcgaXRzIGFyZ3VtZW50IChzZWUgbm90ZXMgZnJvbSBKdWx5IDIwMDApLiAgSmVm ZiBzZW50IGEgZml4LgorY2t1Y21kLmMsIDE1IEZlYiAyMDAzLgorCitSYW4gbXkgUy1FeHByZXNz aW9uIHRvcnR1cmUgdGVzdCB0byBtYWtlIHN1cmUgU2V4cHMgc3RpbGwgd29ya2VkLiAgVGhleSBk bywKK2V4Y2VwdCB0aGUgYml0d2lzZSAmIGFuZCB8IG9wZXJhdG9ycyB3ZXJlIGJyb2tlbiwgZS5n LiAoJiA3IDIpIGFuZCAofCAxIDIgNCkKK2dldCAiSW52YWxpZCBvcGVyYW5kIiBlcnJvcnMuICBK ZWZmJ3MgY29kZSBoYWQgYWRkZWQgYW4gZWFybHkgZmFpbHVyZSByZXR1cm4KK2Zyb20gdGhlIGxv b2t1cCBsb29wIHdoZW4gd2hlbiBhIHNpbmdsZS1ieXRlIGtleXdvcmQgbWF0Y2hlZCBhIGtleXdv cmQgdGhhdAorc3RhcnRlZCB3aXRoIHRoZSBzYW1lIGJ5dGUgYnV0IHdhcyBtb3JlIHRoYW4gb25l IGJ5dGUgbG9uZy4gIFNvICImIiB3b3VsZCBoaXQKKyImJiIgYW5kIGZhaWwgaW5zdGVhZCBvZiBj b250aW51aW5nIGl0cyBzZWFyY2ggKHhsb29rdXAgdGFibGVzIGFyZW4ndCBzb3J0ZWQKK3NvIHRo ZXJlIGNhbiBiZSBubyBlYXJseSByZXR1cm4pLiAgRml4ZWQgaW4geGxvb2t1cCgpOiBja3VjbWQu YywgMTYgRmViIDIwMDMuCisKK0dvdCByaWQgb2YgImtyYm1pdCIgdGFyZ2V0IGZyb20gbWFrZWZp bGUuICBJdCdzIHN0aWxsIHRoZXJlLCBidXQgd2UgZG9uJ3QKK3VzZSBpdCBhbnkgbW9yZS4gIEFs bCBzZWN1cmUgdGFyZ2V0cyBub3cgdXNlICJ4ZXJtaXQiLCBhbmQgcHJvZHVjZSBhIGJpbmFyeQor Y2FsbGVkIHdlcm1pdCwganVzdCBsaWtlIHRoZSByZWd1bGFyIG9uZXMgZG8gKGV4Y2VwdCB0aGUg b2xkIGNrdWNvbi5jIG9uZXMpLgorTm9uLXNlY3VyZSB0YXJnZXRzLCBzaW5jZSB0aGV5IGRvbid0 IGRlZmluZSBhbnkgb2YgdGhlIHNlY3VyaXR5IHN5bWJvbHMsCit3aW5kIHVwIGNvbXBpbGluZyBh bmQgbGlua2luZyB0byAobW9zdGx5KSBlbXB0eSBzZWN1cml0eSBtb2R1bGVzLiAgbWFrZWZpbGUs CisxNSBGZWIgMjAwMy4KKworQWRkZWQgXGZjdnRkYXRlKHh4eCwzKSB0byBmb3JtYXQgaXRzIHJl c3VsdCBpbiBNRFRNIGZvcm1hdCAoeXl5eW1tZGRoaG1tc3MsCithbGwgbnVtZXJpYywgbm8gc3Bh Y2VzIG9yIHB1bmN0dWF0aW9uKS4gIE9mIGNvdXJzZSB0aGVzZSBudW1lcmljIHN0cmluZ3MKK2Fy ZSB0b28gYmlnIHRvIGJlIDMyLWJpdCBudW1iZXJzIGFuZCBhcmUgdXNlbGVzcyBmb3IgYXJpdGht ZXRpYywgYnV0IHRoZXkncmUKK3VzZWZ1bCBmb3IgbGV4aWNhbCBjb21wYXJpc29uLCBldGMuICBj a3V1c1syNF0uYywgMTYgRmViIDIwMDMuCisKK1RoZSBmb2xsb3dpbmcgRlRQIGNvbW1hbmRzIGRp ZCBub3Qgc2V0IEZBSUxVUkUgd2hlbiB0aGV5IGZhaWxlZDogUk1ESVIsCitDRCwgQ0RVUCwgRml4 ZWQgaW4gdGhlIGNvcnJlc3BvbmRpbmcgZG9mdHBibGFoKCkgcm91dGluZXMuICBja2NmdHAuYywK KzE2IEZlYiAyMDAzLgorCitSRU5BTUUgd291bGQgc29tZXRpbWVzIG5vdCBwcmludCBhbiBlcnJv ciBtZXNzYWdlIHdoZW4gaXQgZmFpbGVkLCBlLmcuIGluIEs5NQord2hlbiB0aGUgZGVzdGluYXRp b24gZmlsZSBhbHJlYWR5IGV4aXN0ZWQuICBja3V1czYuYywgMTcgRmViIDIwMDMuCisKK0ZpeGVk IENPUFkgZXJyb3IgbWVzc2FnZXMsIHdoaWNoIGRpZCBub3QgY29tZSBvdXQgaW4gc3RhbmRhcmQg Zm9ybWF0IHdoZW4KKy9MSVNUIHdhcyBub3QgaW5jbHVkZWQuICBja3V1czYuYywgMTcgRmViIDIw MDMuCisKK0ZpeGVkICNpZmRlZnMgaW4gY2tfY3JwLmMgdG8gYWxsb3cgbm9uc2VjdXJlIGJ1aWxk cyBvbiBvbGQgcGxhdGZvcm1zIGxpa2UKK1N5c3RlbSBWLzY4IFIzLiAgMTkgRmViIDIwMDMuCisK K1NpbWlsYXIgdHJlYXRtZW50IGZvciBja19zc2wuYy4gIDIwIEZlYiAyMDAzLgorCitGcm9tIEpl ZmYsIDIxIEZlYiAyMDAzOgorIC4gQUlYNTMgYW5kIEFJWDUyIHN5bWJvbHMgZm9yIGNrY2RlYi5o LCBtYWtlZmlsZS4KKyAuIE5ldyBnY2MgdGFyZ2V0cyBmb3IgdmFyaW91cyBBSVggNC54LzUueCB2 ZXJzaW9uczogbWFrZWZpbGUuCisgLiBDb3B5cmlnaHQgZGF0ZSB1cGRhdGVzOiBja19jcnAuYywg Y2tfc3NsLmMuCisgLiBFTkFCTEUvRElTQUJMRSBRVUVSWSBicm9rZW4gYmVjYXVzZSBrZXl3b3Jk IHRhYmxlIG91dCBvZiBvcmRlcjogY2t1dXNyLmMuCisgLiBGaXhlZCB0aGUgdXNlIG9mIEhUVFAg cHJveGllcyBmb3IgSFRUUCBbUkVdT1BFTiBmb3IgVW5peDogY2tjbmV0LmMuCisKK0Fsc28gZm9y IEs5NSBvbmx5OiBBbGxvdyBmaWxlIHRyYW5zZmVyIHdoZW4gSzk1IGlzIGludm9rZWQgb24gdGhl IHJlbW90ZSBlbmQKK29mIGEgY29ubmVjdGlvbiB0byBhIFByYWdtYSBTeXN0ZW1zIFRlcm1pbmFs IFNlcnZlciBjb25uZWN0aW9uOyBhdXRvbWF0aWNhbGx5CitTRVQgRVhJVCBIQU5HVVAgT0ZGIHdo ZW4gaW52b2tlZCB3aXRoIG9wZW4gcG9ydCBoYW5kbGUgKCJrOTUgLWwgbm5ubiIpLgorCisiY2Qg YSoiIGZhaWxlZCBldmVuIHdoZW4gImEqIiBtYXRjaGVkIG9ubHkgb25lIGRpcmVjdG9yeS4gIEZp eGVkIGluIGNtaWZpKCk6Citja3VjbWQuYywgMjEgRmViIDIwMDMuCisKK0luIHRoZSBVbml4IHZl cnNpb24sIHJlcGxhY2UgImV4dGVybiBpbnQgZXJybm87IiB3aXRoICIjaW5jbHVkZSA8ZXJybm8u aD4iCitpZiBfX0dMSUJDX18gaXMgZGVmaW5lZCwgc2luY2UgZ2xpYmMgbm93IGRlZmluZXMgYSB0 aHJlYWQtc3BlY2lmaWMgZXJybm8uCitja2NkZWIuaCwgMjYgRmViIDIwMDMuCisKK0FkZGVkICNp ZmRlZnMgdG8gc2tpcCBjb21waWxhdGlvbiBvZiBja3VhdGguYyBpbiBub25zZWN1cmUgYnVpbGRz LiAgVGVzdGVkCitieSBidWlsZGluZyBib3RoIHNlY3VyZSBhbmQgcmVndWxhciB2ZXJzaW9ucyBp biBMaW51eC4gIGNrdWF0aC5jLCAyNiBGZWIgMjAwMy4KKworUmFuIHRoZSBidWlsZC1pbi04NC1k aWZmZXJlbnQtY29uZmlndXJhdGlvbnMgc2NyaXB0IG9uIExpbnV4IHRvIG1ha2Ugc3VyZSBpdAor c3RpbGwgYnVpbGRzIHdpdGggYWxsIGRpZmZlcmVudCBjb21iaW5hdGlvbnMgb2YgZmVhdHVyZSBz ZWxlY3Rpb24gb3B0aW9ucy4KK0FsbCBPSy4gIDI2IEZlYiAyMDAzLgorCitCdWlsdCBvbiBWTVMu ICBOZWVkZWQgdG8gYWRkIGEgcHJvdG90eXBlIGZvciBteHhsb29rKigpIHRvIGNrdXVzci5oOyBi dWlsdAorT0sgb3RoZXJ3aXNlLiAgMjYgRmViIDIwMDMuCisKK0Zyb20gSmVmZjogTW9yZSAjaWZk ZWYgc2h1ZmZsaW5nIGZvciBub25zZWN1cmUgYnVpbGRzOiBja3VhdGguYywgY2tfc3NsLmMsCisy NyBGZWIgMjAwMy4KKworQWRkZWQgY29kZSB0byBlbnN1cmUgXHYoZG93bmxvYWQpIGVuZHMgaW4g YSBkaXJlY3Rvcnkgc2VwYXJhdG9yIGluIFVuaXgsCitXaW5kb3dzLCBhbmQgT1MvMi4gIGNrdXVz Ny5jLCAyNyBGZWIgMjAwMy4KKworQWRkZWQgY29kZSB0byBLOTUgemZucWZwKCkgdG8gdGFjayBv biBkaXJlY3Rvcnkgc2VwYXJhdG9yIHdoZW4gcmV0dXJuaW5nCithIGRpcmVjdG9yeSBuYW1lLiAg Y2tvZmlvLmMsIDI3IEZlYiAyMDAzLgorCitTb21laG93IGFuIG9sZCBjb3B5IG9mIGNrdWF0aC5j IHBvcHBlZCB0byByZXBsYWNlIHRoZSBuZXcgb25lLiAgUHV0IHRoZSBuZXcKK29uZSBiYWNrLiAg MjggRmViIDIwMDMuCisKK0Zyb20gSmVmZjogRml4IHR5cG8gaW4gbXkgSzk1IHpmbnFmcCgpIGNv ZGUgZnJvbSB5ZXN0ZXJkYXk7IGZpeGVzIGZvciBoYW5kbGluZworVU5DcyB1bmlmb3JtbHksIG5v IG1hdHRlciB3aGljaCB3YXkgdGhlaXIgc2xhc2hlcyBhcmUgbGVhbmluZy4gIGNrb2Zpby5jLAor MjggRmViIDIwMDMuCisKK0F0IEplZmYgTWV6ZWkncyBzdWdnZXN0aW9uLCBzZXBhcmF0ZSB0ZXh0 IGFuZCBiaW5hcnkgbW9kZSBvcGVuIHNlcXVlbmNlcworZm9yIFZNUyBzZXNzaW9uIGxvZy4gIGNr dmZpby5jLCAyOCBGZWIgMjAwMy4KKworQWRkZWQgZnJlZWJzZDQ4IHRhcmdldCBmb3IgRnJlZUJT RCA0LjguICBtYWtlZmlsZSwgMSBNYXIgMjAwMy4KKworQ2hhbmdlZCBNYWMgT1MgWCBlbnRyaWVz IHRvIGluY2x1ZGUgLURVU0VfU1RSRVJST1IuICBtYWtlZmlsZSwgMiBNYXIgMjAwMy4KKworRml4 ZWQgR0VUT0sgL0dVSSB0byBldmFsdWF0ZSBpdHMgdGV4dCBhcmd1bWVudC4gIGNrdXVzNi5jLCAz IE1hciAyMDAzLgorCitKZWZmIGZpeGVkIHRoZSBLOTUgRGlhbGVyIFFVSUNLIGRpYWxvZyB0byAo YSkgYWxsb3cgdGVtcGxhdGVzLCBhbmQgKGIpIGhhdmUKK2EgU2F2ZS1BcyBvcHRpb24uICAzIE1h ciAyMDAzLgorCitKZWZmIGZpeGVkIGEgcHJvYmxlbSB3aXRoIHRoZSBYbW9kZW0tQ1JDIGNoZWNr c3VtIGJlaW5nIGNydW5jaGVkIHdoZW5ldmVyCit0aGVyZSB3YXMgYSByZXRyYW5zbWlzc2lvbi4g IDcgTWFyIDIwMDMuCisKK0FkZGVkIHRhcmdldC9iYW5uZXIgZm9yIFRydTY0IDUuMUIuICBtYWtl ZmlsZSwgY2t1dmVyLmgsIDUgTWFyIDIwMDMuCisKK0luIFVuaXgsIHRoZSB6Y29weSgpIHJvdXRp bmUgKHVzZWQgYnkgdGhlIENPUFkgY29tbWFuZCkgcmVzZXQgdGhlIHVzZXIncyB1bWFzawordG8g MCBmb3IgdGhlIHJlbWFpbmRlciBvZiB0aGUgS2VybWl0IHByb2Nlc3MgbGlmZXRpbWUuICBUaGUg YnVnIHdhcyBpbgorY2t1ZmlvLmMgOC4wLjE5NCwgMjQgT2N0IDIwMDIsIGFuZCBpcyBmaXhlZCBp biBja3VmaW8uYyA4LjAuMTk1LCA2IE1hciAyMDAzLgorT2YgY291cnNlIHRoaXMgaGFwcGVuZWQg YWZ0ZXIgYnVpbGRpbmcgMTU1IEMtS2VybWl0IDguMC4yMDggYmluYXJpZXMuICAoQnV0CitiZWZv cmUgb2ZmaWNpYWxseSByZWxlYXNpbmcgOC4wLjIwOC4pCisKK0luIHRoZSBWTVMgdmVyc2lvbiwg Y2hhbmdlZDoKKworICAgICAgICB3aGlsZSAoKG4tLSkgJiYgeHhfaW5jKDIpID4gLTEpIDsKK3Rv OgorICAgICAgICB3aGlsZSAoKG4tLSkgJiYgeHhfaW5jKDIpID49IDApIDsKKwordG8gc3VwcHJl c3MgdGhlICIuLi5pcyBiZWluZyBjb21wYXJlZCB3aXRoIGEgcmVsYXRpb25hbCBvcGVyYXRvciB0 byBhIGNvbnN0YW50Cit3aG9zZSB2YWx1ZSBpcyBub3QgZ3JlYXRlciB0aGFuIHplcm8iIHdhcm5p bmcuICBja3Z0aW8uYywgNyBNYXIgMjAwMi4KKworQWRkZWQgYSBkZWJ1ZyBjYWxsIHRvIGRvbG9n ZW5kIGluIGhvcGVzIG9mIGNhdGNoaW5nIG92ZXJ6ZWFsb3VzIExvY3VzCitzd2l0Y2hpbmcsIHdo aWNoIHNlZW1zIHRvIGhhcHBlbiBvbmx5IGluIEs5NS4gIGNrdXVzMy5jLCA3IE1hciAyMDAyLgor CitSZWJ1aWx0IGJpbmFyaWVzIGZvciBzb21lIG9mIHRoZSBtb3JlIGN1cnJlbnQgVW5peCByZWxl YXNlczogQUlYIDQuMy4zLTUuMSwKK1NvbGFyaXMgNy05ICwgUmVkIEhhdCA3LjAtOC4wLCBTbGFj a3dhcmUgOC4xLCBGcmVlYnNkIDQuNy00LjgsIE5ldEJTRCAxLjYsCitPcGVuQlNEIDMuMiwgVW5p eHdhcmUgNy4xLjMsIE9wZW4gVW5peCA4LCBPU1I1LjAuNmEsIGV0Yy4gIEEgVW5peCBiaW5hcnkg d2l0aAorQ09QWSB1bWFzayBmaXggc2hvd3MgYSA2IE1hciAyMDAzIGRhdGUgZm9yICJVTklYIEZp bGUgc3VwcG9ydCIgaW4gU0hPVworVkVSU0lPTlM7IGEgYmluYXJ5IHdpdGhvdXQgdGhlIGZpeCBz aG93cyAyNCBPY3QgMjAwMi4KKworQy1LZXJtaXQgOC4wLjIwOCBkYXRlZCAxNCBNYXJjaCAyMDAz IHJlbGVhc2VkIG9uIDEwIE1hcmNoIDIwMDMuCisKKy0tLTguMC4yMDgtLS0KKworRnJvbSBKZWZm IDEzIE1hciAyMDAzOgorIC4gVXBkYXRlZCBTU0wgbW9kdWxlIGFsbG93cyBpbXBvcnRhdGlvbiBv ZiB0aWNrZXRzIGZyb20gaG9zdC4KKyAuIGZyZWVic2Q1MCtvcGVuc3NsIHRhcmdldDogbWFrZWZp bGUuCisgLiBGVFAgUFVUIC9QRVJNSVNTSU9OUyBlcnJvciBtZXNzYWdlIGZvciBLOTU6IGNrY2Z0 cC5jLgorIAorRml4ZWQgTUlOUFVUIHRvIHN0cmlwIHF1b3RlcyBvciBicmFjZXMgZnJvbSBhcm91 bmQgdGFyZ2V0cyAodGhpcyB3YXMgYnJva2VuCitvbiBGZWIgMTB0aCkuICBUaGFua3MgdG8gSmFz b24gSGVza2V0dCBmb3IgZGlzY292ZXJpbmcgYW5kIHJlcG9ydGluZyB0aGlzCisoa2lsbGVyKSBi dWcuICBja3V1c3IuYywgMTQgTWFyIDIwMDMuCisKK0NoYW5nZWQgdmVyc2lvbiBudW1iZXIgdG8g MjA5IERldi4wMC4gIGNrY21haS5jLCAxNCBNYXIgMjAwMy4KKworV2hpbGUgZGVidWdnaW5nIHRo ZSBhbHBoYXBhZ2Ugc2NyaXB0LCBJIGZvdW5kIHRoYXQgdGhlIGNvbW1hbmQgIm1pbnB1dCA4IFw2 XDEzCitcMjFcMTMgXDEzXDI3XDRcMTMgXDMwXDEzIiBnZXRzICI/Tm90IGNvbmZpcm1lZCIgaW4g OC4wLjIwOCBhbmQgOC4wLjIwOSwgYnV0Citub3QgaW4gMjA2IGFuZCBlYXJsaWVyLiAgVGhpcyBw cm9ibGVtIHRvbyB3YXMgaW50cm9kdWNlZCBvbiBGZWIgMTB0aCBieQorY2hhbmdpbmcgTUlOUFVU IHBhcnNpbmcgZnJvbSBjbXR4dCgpIGZvbGxvd2VkIGJ5IGNrc3BsaXQoKSB0byBjbWZsZCgpIGlu IGEKK2xvb3AuICBjbWZsZCgpIHVzZXMgc2V0YXRtKCkgdG8gcmV0dXJuIGl0cyByZXN1bHQgYW5k IG9mIGNvdXJzZSBzZXRhdG0oKQorYnJlYWtzIG9uIFwxMy4gIENoYW5naW5nIHNldGF0bSgpIG5v dCB0byBkbyB0aGlzIHdvdWxkIGJyZWFrIGV2ZXJ5dGhpbmcgZWxzZS4KK0J1dCBjbWZsZCgpIGhh cyBubyBhcmd1bWVudHMgdGhhdCBsZXQgdXMgdGVsbCBpdCB0byBkbyBhbnl0aGluZyBkaWZmZXJl bnQgaW4KK3RoaXMgY2FzZS4gIENoYW5naW5nIHRoZSBBUEkgd291bGQgYmUgYSBkaXNhc3Rlci4g IFRoZSBvbmx5IHNvbHV0aW9uIGlzIHRvIGFkZAorYW4gIk1JTlBVVCBBQ1RJVkUiIChtaW5wdXRh Y3RpdmUpIGdsb2JhbCB2YXJpYWJsZSB0aGF0IHRlbGxzIGNtZmxkKCkgdG8gdGVsbAorc2V0YXRt KCkgbm90IHRvIGJyZWFrIG9uIENSLiAgTm93IE1JTlBVVCB3aXRoIGJyYWNlZCB0YXJnZXRzIGNv bnRhaW5pbmcgQ1IKK2FuZC9vciBMRiB3b3JrcyBpbiAyMDksIDIwNiwgYW5kIDIwMSAoYnV0IG5v dCAyMDgpLiAgY2t1Y21kLmMsIGNrdXVzci5jLAorY2t1dXM1LmMsIDE1IE1hciAyMDAzLgorCitN SU5QVVQgbiBcZmpvaW4oJmEpIHdvcmtzIE9LIGlmIGFsbCB0aGUgbWVtYmVycyBvZiBcJmFbXSBh cmUgdGV4dCBzdHJpbmdzLCBidXQKK2lmIHRoZXkgYXJlIHN0cmluZ3Mgb2YgY29udHJvbCBjaGFy cyAoYXMgYWJvdmUpLCB0aGV5IGRvbid0IGdldCBzZXBhcmF0ZWQgYnkKK3RoZSBzcGFjZXMuICBG b3IgZXhhbXBsZSBpbjoKKworICBkY2wgXCZhW10gPSAiXDRcNSIgIlw2XDciIHh4eAorICBtaW5w dXQgMTAgXGZqb2luKCZhKQorCitNSU5QVVQgZ2V0cyB0d28gdGFyZ2V0czogImFhYSIgYW5kICJc NFw1IFw2XDcgeHh4Ii4gIFRoZSBidWcgd2FzIGluIHRoZQorY2tzcGxpdCgpIGNhbGwgaW4gdGhl IFxmam9pbigpIGNhc2Ugb2YgTUlOUFVUOiBpdCBuZWVkZWQgdG8gc3BlY2lmeSBhbgoraW5jbHVk ZSBzZXQgY29uc2lzdGluZyBvZiBhbGwgdGhlIGNvbnRyb2wgY2hhcmFjdGVycyBleGNlcHQgTlVM LiAgY2t1dXNyLmMsCisxNiBNYXIgMjAwMy4KKworQnV0IHRoZXJlJ3Mgc3RpbGwgYSBwcm9ibGVt OgorCisgIGRjbCBcJmFbXSA9ICJcNFw1XDEzXDEwIiAiXDZcNyIgInh4eCIKKworY3JlYXRlcyBh biBhcnJheSB3aG9zZSBmaXJzdCBtZW1iZXIgaXMgIl5EXkUgKG9uZSBkb3VibGVxdW90ZSBpbmNs dWRlZCkuICBCdXQKK2lmIGJyYWNlcyBhcmUgdXNlZCBpbnN0ZWFkLCB0aGVyZSdzIG5vIHByb2Js ZW0uICBTYW1lIGRlYWwgYXMgTUlOUFVUOiBjbWZsZCgpCiticmVha3Mgb24gQ1Igb3IgTEYsIHRo dXMgdGhlIGVuZCBxdW90ZSBpcyBsb3N0LiAgSWYgSSBzZXQgbWlucHV0YWN0aXZlIGZvcgorREVD TEFSRSBpbml0aWFsaXplcnMgdG9vLCB0aGF0IGZpeGVzIGl0LiAgSXMgdGhlcmUgYW55IHJlYXNv biBub3QgdG8gZG8gdGhpcz8KK0Nhbid0IHRoaW5rIG9mIGFueSAoZmFtb3VzIGxhc3Qgd29yZHMp Li4uICBja3V1c3IuYywgMTYgTWFyIDIwMDMuCisKK1NpbmNlIGl0IGhhcyBtdWx0aXBsZSBhcHBs aWNhdGlvbnMsIGNoYW5nZWQgdGhlIGZsYWcncyBuYW1lIGZyb20gbWlucHV0YWN0aXZlCit0byBr ZWVwYWxsY2hhcnMuICBja3VjbWQuYywgY2t1dXNbcjVdLmMsIDE2IE1hciAyMDAzLgorCitcdihl eGVkaXIpIHdhc24ndCBiZWluZyBzZXQgY29ycmVjdGx5IChpdCBpbmNsdWRlZCB0aGUgcHJvZ3Jh bSBuYW1lIGFzIHdlbGwKK2FzIHRoZSBkaXJlY3RvcnkpLiAgRml4ZWQgaW4gZ2V0ZXhlZGlyKCk6 IGNrdXVzNC5jLCAxNiBNYXIgMjAwMy4KKworU0VUIENBUlJJRVItV0FUQ0ggPEVzYz4gImF1dG8g bWF0aWMiIChzcHVyaW91cyBzcGFjZSBpbiBzdXBwbGllZCBrZXl3b3JkKS4KK0Nvc21ldGljIG9u bHk7IGl0IHN0aWxsIHdvcmtlZC4gIEZpeGVkIGluIHNldGRjZCgpOiBja3V1czMuYywgMTYgTWFy IDIwMDMuCisKKyJkaXJlY3RvcnkgYSBiIGMiIGxpc3RlZCB0b28gbWFueSBmaWxlcyAtLSBhbGwg ZmlsZXMgd2hvc2UgbmFtZXMgRU5EIFdJVEggYSwKK2IsIG9yIGMsIHJhdGhlciB0aGFuIHRoZSBm aWxlcyB3aG9zZSBuYW1lcyBXRVJFIGEsIGIsIG9yIGMuICBEaWFnbm9zaXM6IFRoZQorZmlsZXNw ZWMgaXMgY2hhbmdlZCBpbnRvIGEgcGF0dGVybjoge2EsYixjfSwgd2hpY2ggaXMgdGhlIGNvcnJl Y3QgZm9ybS4gIEl0IGlzCitwYXNzZWQgdG8gbnp4cGFuZCgpLCB3aGljaCBnb2VzIHRocm91Z2gg dGhlIGRpcmVjdG9yeSBnZXR0aW5nIGZpbGVuYW1lcyBhbmQKK3NlbmRpbmcgZWFjaCBvbmUgdG8g Y2ttYXRjaCgpIHdpdGggdGhlIGdpdmVuIHBhdHRlcm4uICBja21hdGNoKCkgcmVjZWl2ZXMgdGhl Citjb3JyZWN0IHBhdHRlcm4gYnV0IHRoZW4gcHJlcGVuZHMgYSAiKiIgLS0gdGhhdCdzIG5vdCBy aWdodC4gIEl0J3Mgbm90IGp1c3QKK2luIGZpbGVuYW1lIG1hdGNoaW5nIGVpdGhlci4gIFRoZSBm b2xsb3dpbmcgc3VjY2VlZHMgd2hlbiBpdCBzaG91bGRuJ3Q6CisKKyAgaWYgbWF0Y2ggeHh4eGMg e3thLGIsY319IDxjb21tYW5kPgorCitDaGFuZ2luZyBja21hdGNoKCkgdG8gbm90IHByZXBlbmQg dGhlICIqIiB0byBlYWNoIHNlZ21lbnQgZml4ZXMgdGhlIGNvbW1hbmQKK2Fib3ZlIGJ1dCBicmVh a3MgbG90cyBvZiBvdGhlcnMuICBSdW5uaW5nIHRocm91Z2ggdGhlICJtYXRjaCIgdG9ydHVyZS10 ZXN0CitzY3JpcHQgc2hvd3MgdGhlIHByb2JsZW0gb2NjdXJzIG9ubHkgd2hlbiB0aGUge2EsYixj fSBsaXN0IGlzIHRoZSBlbnRpcmUKK3BhdHRlcm4sIGFuZCBub3QgZW1iZWRkZWQgd2l0aGluIGEg bGFyZ2VyIHBhdHRlcm4uICBUZXN0aW5nIGZvciB0aGlzIGNhc2UKK2ZpeGVkIHRoZSBwcm9ibGVt LiAgY2ttYXRjaCgpOiBja2NsaWIuYywgMTYgTWFyIDIwMDMuCisKK0ZpeGVkIEZUUCBNT0RUSU1F IHRvIG5vdCBwcmludCBhbnl0aGluZyBpZiBRVUlFVCBPTi4gIGNrY2Z0cC5jLCAxNiBNYXIgMjAw My4KKworUGlja2VkIHVwIGEgbmV3IGNrdWF0aC5jIGZyb20gSmVmZiwgbm90IHN1cmUgd2hhdCB0 aGUgY2hhbmdlcyBhcmUuIDE2IE1hciAyMDAzLgorCitEaWQgYSBmZXcgcmVndWxhciBhbmQgc2Vj dXJlIGJ1aWxkcyB0byBtYWtlIHN1cmUgSSBkaWRuJ3Qgd3JlY2sgYW55dGhpbmcuCisKK0NoYW5n ZWQgdmVyc2lvbiBudW1iZXIgdG8gMjA5IChmaW5hbCkuICBja2NtYWkuYywgMTYgTWFyIDIwMDMu CisKK0phc29uIEhlc2tldHQgZm91bmQgYW5vdGhlciBidWc6IGlmIHlvdSBkZWZpbmUgYSBtYWNy byBGT08gaW5zaWRlIHRoZQorZGVmaW5pdGlvbiBvZiBhbm90aGVyIG1hY3JvIEJBUiwgYW5kIEZP TydzIGRlZmluaXRpb24gaW5jbHVkZXMgYW4gb2RkIG51bWJlcgorb2YgZG91YmxlcXVvdGVzIChz dWNoIGFzIDEpLCBGT08ncyBkZWZpbml0aW9uIGFic29yYnMgdGhlIHJlc3Qgb2YgQkFSJ3MKK2Rl ZmluaXRpb24uICBFeGFtcGxlOgorCisgIGRlZiBURVNUIHsKKyAgICAuZm9vID0ge1gifQorICAg IHNobyBtYWMgZm9vCisgIH0KKyAgZG8gdGVzdAorICBzaG8gbWFjIGZvbworCitSZXN1bHRzIGlu OgorCisgIGZvbyA9IHtYIn0sIHNobyBtYWMgZm9vCisKK0RpYWdub3NpczogdGhlIFRFU1QgZGVm aW5pdGlvbiBiZWNvbWVzOgorCisgIGRlZiBURVNUIC5mb28gPSB7WCJ9LCBzaG8gbWFjIGZvbwor CithbmQgdGhlIG1hY3JvIHJlYWRlciBpcyBlcnJvbmVvdXNseSB0cmVhdGluZyB0aGUgZG91Ymxl cXVvdGUgYXMgYW4gb3BlbgorcXVvdGUsIGFuZCB0aGVuIGF1dG9tYXRpY2FsbHkgY2xvc2VzIHRo ZSBxdW90ZSBhdCB0aGUgZW5kIG9mIHRoZSBkZWZpbml0aW9uLgorVGhlIGVycm9yIGlzIHRoYXQg YSBkb3VibGVxdW90ZSBzaG91bGQgYmUgc2lnbmlmaWNhbnQgb25seSBhdCB0aGUgYmVnaW5uaW5n IG9mCithIGZpZWxkLiAgQnV0IHRoZSBtYWNybyByZWFkZXIgaXNuJ3QgYSBjb21tYW5kIHBhcnNl cjsgaXQgZG9lc24ndCBrbm93IHdoYXQKK2EgZmllbGQgaXMgLS0gaXQncyBqdXN0IGxvb2tpbmcg Zm9yIGNvbW1hcyBhbmQgc2tpcHBpbmcgb3ZlciBxdW90ZWQgb25lcy4KK0ZpcnN0IHdlIGhhdmUg dG8gZml4IGFuIG92ZXJzaWdodDogU0VUIENPTU1BTkQgRE9VQkxFUVVPVElORyBPRkYgc2hvdWxk IGhhdmUKK3dvcmtlZCBoZXJlLCBidXQgaXQgd2Fzbid0IHRlc3RlZCBpbiB0aGlzIGNhc2UuICBG aXhlZCBpbiBnZXRuY20oKTogY2t1dXM1LmMsCisxNyBNYXIgMjAwMy4KKworVGhlcmUgYXJlIG9u bHkgY2VydGFpbiBjYXNlcyB3aGVyZSBpdCBtYWtlcyBzZW5zZSB0byB0cmVhdCBkb3VibGVxdW90 ZXMgYXMKK3NpZ25pZmljYW50OgorCisgLiBBbiBvcGVuIHF1b3RlIG11c3QgYmUgYXQgdGhlIGJl Z2lubmluZyBvciBwcmVjZWRlZCBieSBhIHNwYWNlLgorIC4gQSBjbG9zZSBxdW90ZSBpcyBvbmx5 IGF0IHRoZSBlbmQgb3IgZWxzZSBmb2xsb3dlZCBieSBhIHNwYWNlLgorCitUaGlzIHRvbyB3YXMg Zml4ZWQgaW4gZ2V0bmNtKCk6IGNrdXVzNS5jLCAxNyBNYXIgMjAwMy4KKworQSBmaXggZnJvbSBK ZWZmIFNTTC9UTFMgRlRQIGRhdGEgZGVjb2RpbmcuICBja2NmdHAuYywgMTggTWFyIDIwMDMuCisK K1RyaWVkIGJ1aWxkaW5nIEMtS2VybWl0IG9uIGEgQ3JheSBZLU1QIHdpdGggVU5JQ09TIDkuMC4g ICJpbnQgc3VzcGVuZCIsCitkZWNsYXJlZCBpbiBja2NtYWkuYyBhbmQgdXNlZCBpbiBtYW55IG1v ZHVsZXMsIGNvbmZsaWN0cyB3aXRoOgorCisgIHVuaXN0ZC5oOmV4dGVybiBpbnQgc3VzcGVuZCBf XygoaW50IF9DYXRlZ29yeSwgaW50IF9JZCkpOworCitUaGUgIj1Ec3VzcGVuZD14c3VzcGVuZCIg dHJpY2sgZG9lc24ndCB3b3JrIGZvciB0aGlzOyB0aGVyZSBpcyBubyB3YXkgYXJvdW5kCit0aGUg Y29uZmxpY3Qgb3RoZXIgdGhhbiB0byByZW5hbWUgdGhlIHZhcmlhYmxlOiBja2NtYWkuYywgY2t1 dGlvLmMsCitja3V1c1szNXh5XS5jLiAgMjYgTWFyIDIwMDMuICBWTVMgYW5kIEs5NSBub3QgYWZm ZWN0ZWQuCisKK09LIHRoYXQgZ2V0cyB1cyBwYXN0IGNrY21haS5jLi4uICBUaGVuIGluIGNrdXRp by5jIEkgaGFkIHRvIGFkZCBhIG5ldyAjaWZkZWYKK2Fyb3VuZCB0aGUgTEZERVZOTyBzZXR0aW5n LCBiZWNhdXNlIHRoZSBDcmF5IGRpZG4ndCBoYXZlIG1rZGV2LmguICBDb3VsZCBub3QKK2ZpbmQg YSBDcmF5LXNwZWNpZmljIG1hbmlmZXN0IHN5bWJvbCwgc28gSSBtYWRlIGEgbmV3IG1ha2VmaWxl IHRhcmdldCAoY3JheTkpCit0aGF0IHNldHMgdGhpcyBzeW1ib2wuICBIYXZpbmcgZG9uZSB0aGlz IEkgaGF2ZSBubyBpZGVhIHdoYXQga2luZCBvZiBsb2NrZmlsZQord291bGQgYmUgY3JlYXRlZCwg YnV0IEkgYWxzbyBkb3VidCBpZiBhbnlib2R5IGRpYWxzIG91dCBmcm9tIGEgQ3JheS4gIFRoZQor YmluYXJ5IHNob3VsZCBydW4gYSBDOTAsIEo5MCwgb3IgWS1NUC4gIG1ha2VmaWxlLCAyNiBNYXIg MjAwMy4KKworQWRkZWQgYSB0YXJnZXQgZm9yIFNDTyBPU1I1LjAuNy4gIG1ha2VmaWxlLCBja3V2 ZXIuaCwgMzAgTWFyIDIwMDMuCisKK0NoYW5nZWQgc2luY2UgMjA4OgorbWFrZWZpbGUgY2t1dmVy LmggY2tjbWFpLmMgY2tjbGliLmMgY2tjZnRwLmMgY2t1Y21kLmMgY2t1dXMqLmMgY2t1dGlvLmMu CisKKy0tLTguMC4yMDktLS0KKworRnJvbSBNYXJrIFNhcGlybywgYSBmaXggZm9yIHRoZSBNYXJj aCAxN3RoIGRvdWJsZXF1b3RlIGZpeCwgZ2V0bmNtKCk6IGNrdXVzNS5jLAorNCBBcHIgMjAwMy4K KworRnJvbSBKZWZmLCAyOSBBcHIgMjAwMzoKKyAuIENvcnJlY3RlZCB0YXJnZXQgZm9yIEhQLVVY IDExLjAwICsgT3BlblNTTDogbWFrZWZpbGUsIAorIC4gRG8gbm90IGFsbG93IFdJTEwgQVVUSCBi ZWZvcmUgV09OVCBTVEFSVF9UTFM6IGNrY3RlbC5oIGNrY3RlbC5jCisgLiBBZGQgaG9va3MgZm9y IFNGVFAgYW5kIFNFVC9TSE9XIFNGVFA6IGNrY2RlYi5oIGNrdXVzci5oIGNrdXVzci5jIGNrdXVz My5jCisgLiBBZGQgU0tFUk1JVCBja3V1c3IuaCBja3V1c3IuYworIC4gQWRkIEFETS01IHRlcm1p bmFsIGVtdWxhdGlvbjogY2t1dXM3LmMsIGNrdXVzNS5jCisgLiBVbmNvbW1lbnQgYW5kIHVwZGF0 ZSBIRUxQIFNFVCBTU0ggVjIgQVVUTy1SRUtFWTogY2t1dXMyLmMKKyAuIEVuYWJsZSBJRiBURVJN SU5BTC1NQUNSTyBhbmQgSUYgU1RBUlRFRC1GUk9NLURJQUxFUiBmb3IgQy1LZXJtaXQ6IGNrdXVz Ni5jCisgLiBGaXggY29uZmxpY3RpbmcgTk9TQ1JPTEwga2V5d29yZCBkZWZpbml0aW9uOiBja3V1 c3IuaAorIC4gU2V0IHR0bmFtZSB3aGVuIElfQU1fU1NIOiBja3V1c3kuYworIC4gQWRkIGV4dGVu ZGVkIGFyZyBwYXJzaW5nIGZvciBTU0gsIFJsb2dpbiwgVGVsbmV0OiBja3V1c3kuYywgY2t1dXM0 LmMKKyAuIFNlY3VyaXR5IHVwZGF0ZXM6IGNrdWF0aC5jLCBja19zc2wuYworIC4gQ2hhbmdlIEs5 NSB2ZXJzaW9uIG51bWJlciB0byAyLjIuMDogY2tjbWFpLmMKKyAuIFNhdmUgSzk1IHRlcm0gaS9v IHN0YXRlIGJlZm9yZSBleGVjdXRpbmcga2V5Ym9hcmQgbWFjcm86IGNrdXVzNC5jCisgLiBBZGQg dGVzdHMgZm9yIFNTSCBTdWJzeXN0ZW0gYWN0aXZlIGR1cmluZyBJTlBVVC9PVVRQVVQvQ09OTkVD VDogY2t1dXNbNDVdLmMKKyAuIEVuYWJsZSBLOTUgU0VUIFNTSCBWMiBBVVRPLVJFS0VZOiBja3V1 czMuYworCitTRlRQIGFuZCBTRVQgU0ZUUCBzdWJjb21tYW5kcyBhcmUgaW1wbGVtZW50ZWQgdXAg dG8gdGhlIGNhc2Ugc3RhdGVtZW50cy4KKworRmlsZXMgb2YgbWluZSB0aGF0IEplZmYgaGFkbid0 IHBpY2tlZCB1cDoKKyAgY2t1dmVyLmggY2tjZnRwLmMgY2t1dGlvLmMgY2t1dXN4LmMgKGp1c3Qg bWlub3IgY2hhbmdlcyBmb3IgbGFzdCBidWlsZC1hbGwpCisKK09uIDQgSmFuIDIwMDMsIFNFVCBS RUNFSVZFIE1PVkUtVE8gd2FzIGNoYW5nZWQgdG8gY29udmVydCBpcyBhcmd1bWVudCB0byBhbgor YWJzb2x1dGUgcGF0aCwgd2hpY2ggbWFkZSBpdCBpbXBvc3NpYmxlIHRvIHNwZWNpZnkgYSByZWxh dGl2ZSBwYXRoLCB0aGVuCittb3ZlIHRvIGRpZmZlcmVudCBkaXJlY3RvcmllcyBhbmQgaGF2ZSBp dCBhcHBseSByZWxhdGl2ZWx5IHRvIGVhY2ggZGlyZWN0b3J5LgorQ2hhbmdlZCB0aGlzIGFzIGZv bGxvd3M6CisKKyAuIFBhcnNlciB1c2VzIGNtdHh0KCkgcmF0aGVyIHRoYW4gY21kaXIoKSBzbyBp dCB3b24ndCBmYWlsIGF0IHBhcnNlIHRpbWUuCisgLiBJZiBwYXRoIGlzIGFic29sdXRlLCB3ZSBm YWlsIGF0IHBhcnNlIHRpbWUgaWYgZGlyZWN0b3J5IGRvZXNuJ3QgZXhpc3QuCisgLiBJbiByZW9m KCkgd2UgcnVuIHRoZSB0aGUgcGF0aCB0aHJvdWdoIHh4c3RyaW5nIChhZ2FpbiwgaW4gY2FzZSBk ZWZlcnJlZAorICAgZXZhbHVhdGlvbiBvZiB2YXJpYWJsZXMgaXMgZGVzaXJlZCkgYW5kIHRoZW4s IGlmIG5vdCBudWxsLCB1c2UgaXQuCisgLiBJZiB0aGUgZGlyZWN0b3J5IGRvZXNuJ3QgZXhpc3Qs IHJlbmFtZSgpIGZhaWxzIGFuZCByZW9mKCkgcmV0dXJucyAtNCwKKyAgIHJlc3VsdGluZyBpbiBh IHByb3RvY29sIGVycm9yICh0aGlzIGlzIG5vdCBhIGNoYW5nZSkuICBXZSBkbyBOT1QgY3JlYXRl CisgICB0aGUgZGlyZWN0b3J5IG9uIHRoZSBmbHkuIAorCitJIGFsc28gZml4ZWQgU0VUIFNFTkQv UkVDRUlWRSBSRU5BTUUtVE8gdG8gcGFyc2Ugd2l0aCBjbXR4dCgpIHJhdGhlciB0aGFuCitjbWRp cigpLCBzaW5jZSBpdCdzIHBhcnNpbmcgYSB0ZXh0IHRlbXBsYXRlLCBub3QgYSBkaXJlY3Rvcnkg bmFtZSwgZS5nLgorInNldCByZWNlaXZlIHJlbmFtZS10byBmaWxlLVx2KHRpbWUpLXYoZGF0ZSkt XHYocGlkKSIuICBUaGlzIHdhcyB0b3RhbGx5Citicm9rZW4sIHNpbmNlIHdoZW4gSSBkb24ndCBr bm93LiAgV2UgZG9uJ3QgY2FsbCB4eHN0cmluZygpIGluIHRoaXMgcGFyc2UsIHNvCitldmFsdWF0 aW9uIGlzIGFsd2F5cyBkZWZlcnJlZCAtLSBJJ2QgYmV0dGVyIG5vdCBjaGFuZ2UgdGhpcy4gIGNr dXVzNy5jLAorY2tjZm5zLmMsIDEgTWF5IDIwMDMuCisKK0Zyb20gSmVmZiwgU2F0IE1heSAgMyAx NDoxNToyMyAyMDAzOgorIC4gUGljayB1cCB0aGUgcmlnaHQgaXNhc2NpaSBkZWZpbml0aW9uIGZv ciBLOTU6IGNrY3RlbC5jCisgLiBtYWxsb2MuLi4gIGNrdWF0aC5jIChuZXcgc2FmZSBtYWxsb2Mg cm91dGluZXMgZm9yIEs5NSkKKyAuIEFkZCBhdXRob3IgbGlzdGluZzogY2t1dXM1LmMKKyAuIFNT SCBIZWFydGJlYXQgc3VwcG9ydCAoSzk1IG9ubHkpOiBja3V1c1syM10uYworIC4gUHJlc2NhbiAt LWhlaWdodCBhbmQgLS13aWR0aCB0byBhdm9pZCB3aW5kb3cgcmVzaXppbmcgYXQgc3RhcnR1cDog Y2t1dXN5LmMKKyAuIEFkZCBjaGVja3MgZm9yIGZhdGFsKCkgb3IgZG9leGl0KCkgY2FsbGVkIGZy b20gc3lzaW5pdCgpOiBja3V1c3guYworIC4gTW92ZSBzb21lIEs5NS1zcGVjaWZpYyBkZWZpbml0 aW9ucyB0byBja29rZXIuaDogY2tjZGViLmgKKyAuIEFkZCBzdXBwb3J0IGZvciBPTl9DRCBtYWNy byBpbiB6Y2hkaXIoKTogY2t1ZmlvLmMKKyAuIEFkZCBhIGNvbW1hbmQgdG8gbGV0IEZUUCBjbGll bnQgYXV0aGVudGljYXRlIHdpdGggU1NMdjI6IGNrY2Z0cC5jCisgLiBGaXggcGFyc2luZyBvZiBG VFAgZmlsZSBmYWN0cyBsaWtlICJVTklYLm1vZGUiOiBja2NmdHAuYworCitPTl9DRCB3aWxsIG5l ZWQgc29tZSBleHBsYWluaW5nICh0byBiZSBkb25lKS4gIEl0J3MgaW1wbGVtZW50ZWQgZm9yIFVu aXgsCitWTVMsIFdJbmRvd3MsIGFuZCBPUy8yLgorCitUaGUgRlRQIGZpbGUgZmFjdHMgZml4IGNh bWUgZnJvbSBmaXJzdCBleHBvc3VyZSB0byB0aGUgbmV3IE9wZW5CU0QgRlRQCitzZXJ2ZXI6IGZ0 cDovL2Z0cDcudXNhLm9wZW5ic2Qub3JnL3B1Yi9vcy9PcGVuQlNELzMuMy9pMzg2LworVGhlIHBl cmlvZCBpbiAiVU5JWC5tb2RlIiBjYXVzZWQgYW4gZXJyb25lb3VzIHdvcmQgYnJlYWssIGFkZGlu ZyBqdW5rIHRvCit0aGUgZmlsZW5hbWUuCisKK0Fib3V0IHRoZSBtYWxsb2MgY2hhbmdlcywgSmVm ZiBzYXlzICJLOTUgaXMgbm90IGJlaGF2aW5nIHdlbGwgaW4gbG93IG1lbW9yeQorZW52aXJvbm1l bnRzLiAgSSdtIG5vdCBzdXJlIHRoYXQgQy1LZXJtaXQgZG9lcyBtdWNoIGJldHRlci4gIFRoZSBw cm9ncmFtIGRvZXMKK25vdCBjcmFzaCBidXQgaXQgY2VydGFpbmx5IGRvZXMgbm90IGJlaGF2ZSB0 aGUgd2F5IHRoZSB1c2VyIGV4cGVjdHMgaXQgdG8uCitJJ20gYmVnaW5uaW5nIHRvIHRoaW5rIHRo YXQgYW55IG1hbGxvYygpIGVycm9yIHNob3VsZCBiZSB0cmVhdGVkIGFzIGZhdGFsLiIKKworTm90 IHZpc2libGUgaW4gdGhlc2UgY2hhbmdlcyBiZWNhdXNlIGl0J3MgaW4gSzk1LXNwZWNpZmljIG1v ZHVsZXM6IEplZmYgbWFkZQorU0VUIEFUVFJJQlVURVMgT0ZGIGFuZCBTRVQgQVRUUklCVVRFUyBE QVRFIE9GRiBhcHBseSB0byBYWVpNT0RFTSB0cmFuc2ZlcnMuCisKK0Zyb20gSmVmZiwgMTEgTWF5 IDIwMDM6CisgLiBBZGQgc3VwcG9ydCBmb3IgU1NIIEtlZXBhbGl2ZSB0byByZWxldmFudCBTRVQg Y29tbWFuZCAoSzk1KTogY2t1dXMzLmMKKyAuIFJlZHVjZSBtYXggb3ZlcmxhcHBlZCBpL28gcmVx dWVzdHMgZnJvbSAzMCB0byA3IChLOTUpOiBja3V1czcuYworIC4gRG9uJ3QgY2FsbCBzeXNpbml0 KCkgaW4gZmF0YWwoKTogY2t1dXN4LmMuCisgLiBTb21lIG5ldyBjb25kaXRpb25hbGl6YXRpb25z IGZvciBTU0wgbW9kdWxlOiBja19zc2wuYworCitUaGUgZG91YmxlcXVvdGUtcGFyc2luZyBmaXhl cyBmcm9tIE1hcmNoIGFuZCBBcHJpbCBicm9rZSB0aGUgU1dJVENIIHN0YXRlbWVudCwKK3doaWNo IGlzIGltcGxlbWVudGVkIGJ5IGludGVybmFsbHkgZGVmaW5pbmcsIHRoZW4gZXhlY3V0aW5nLCBh IG1hY3JvLiAgSWYgSQorZHJvcCBiYWNrIHRvIHRoZSBvbGQgZHVtYiBoYW5kbGluZyBvZiBkb3Vi bGVxdW90ZXMsIGV2ZXJ5dGhpbmcgaXMgZml4ZWQgZXhjZXB0Cit0aGUgcHJvYmxlbSBvZiBNYXJj aCAxN3RoLiAgQnV0IGNhbiB3ZSByZWFsbHkgZXhwZWN0IGdldG5jbSgpIHRvIHByZS1ndWVzcwor d2hhdCB0aGUgcGFyc2VyIGlzIGdvaW5nIHRvIGRvPyAgZ2V0bmNtKCkncyBvbmx5IGpvYiBpcyB0 byBmaW5kIGNvbW1hbmQKK2JvdW5kYXJpZXMsIHdoaWNoIGFyZSByZXByZXNlbnRlZCBieSBjb21t YXMuICBDb21tYXMsIGhvd2V2ZXIsIGlzIG5lZWRlZCBJTgorY29tbWFuZHMgdG9vLiAgV2UgdGFr ZSBhIGNvbW1hIGxpdGVyYWxseSBpZiBpdCBpcyBxdW90ZWQgd2l0aCBcLCBvciBpcyBpbnNpZGUK K2EgbWF0Y2hlZCBwYWlyIG9mIGJyYWNlcywgcGFyZW5zLCBvciBkb3VibGVxdW90ZXMuICBJdCBp cyBub3QgdW5yZWFzb25hYmxlIHRvCityZXF1aXJlIGEgZG91YmxlcXVvdGUgaW4gYSBtYWNybyBk ZWZpbml0aW9uIHRvIGJlIHByZWZpeGVkIGJ5IFwgd2hlbiBpdCBpcyB0bworYmUgdGFrZW4gbGl0 ZXJhbGx5LiAgVGhlIHByb3BlciByZXNwb25zZSB0byBKYXNvbiBIZXNrZXR0J3MgY29tcGxhaW50 IG9mIE1hcmNoCisxN3RoIHNob3VsZCBoYXZlIGJlZW4gdG8gbGVhdmUgdGhlIGNvZGUgYWxvbmUg YW5kIHJlY29tbWFuZCBhbiBhcHByb3ByaWF0ZQorZm9ybSBvZiBxdW90aW5nOgorCisgIGRlZiBU RVNUIHsKKyAgICAgIC5mb28gPSB7WFwifQorICAgICAgc2hvIG1hYyBmb28KKyAgfQorCitBbmQg dGhpcyBpcyB3aGF0IEkgaGF2ZSBkb25lLiAgQW5vdGhlciByZWFzb24gZm9yIHN0aWNraW5nIHdp dGggdGhlIG9sZCBtZXRob2QKK2lzIHRoYXQgaXQncyBleHBsYWluYWJsZS4gIFRoZSAiaW1wcm92 ZWQiIG1ldGhvZCwgZXZlbiBpZiBpdCB3b3JrZWQsIHdvdWxkIGJlCitiZSBpbXBvc3NpYmxlIHRv IGV4cGxhaW4uICBCdHcsIGluIHRlc3RpbmcgdGhpcyBJIG5vdGljZWQgdGhhdCB0aGUgc3dpdGNo LXRlc3QKK3NjcmlwdCBtYWRlIDguMC4yMDEgZHVtcCBjb3JlLiAgVG9kYXkncyB2ZXJzaW9uIGlz IGZpbmUuICBUaGUgcHJvYmxlbSB3aXRoCitxdW90ZWQgc3RyaW5ncyBpbnNpZGUgb2YgSUYgey4u Ln0gY2xhdXNlcyBhbmQgRk9SIGFuZCBXSElMRSBsb29wcyBpcyBmaXhlZAordG9vLiAgUGVyaGFw cyAidW5icm9rZW4iIHdvdWxkIGJlIGEgYmV0dGVyIHdvcmQuICBja3V1czUuYywgMTEgTWF5IDIw MDMuCisKK1ZhY2UgZGlzY292ZXJlZCB0aGF0IEZUUCBNR0VUIC9FWENFUFQ6ey4uLiAod2l0aCBh biB1bnRlcm1pbmF0ZWQgL0VYQ0VQVCBsaXN0KQorY291bGQgY3Jhc2ggS2VybWl0LiAgRml4ZWQg aW4gY2tjZnRwLmMsIDExIE1heSAyMDAzLgorCitDT05USU5VRSBzaG91bGQgbm90IGFmZmVjdCBT VUNDRVNTL0ZBSUxVUkUgc3RhdHVzLiAgY2t1dXNyLmMsIDExIE1heSAyMDAzLgorCitGaXhlZCBh biBvdmVyc2lnaHQgdGhhdCBnb2VzIGJhY2sgMTUgeWVhcnMuICBXaGlsZSBcezEyM30gaXMgYWxs b3dlZCBmb3IKK2RlY2ltYWwgY29kZXMsIFx4ezEyfSBhbmQgXG97MTIzfSB3ZXJlIG5ldmVyIGhh bmRsZWQuICBja3VjbWQuYywgMTEgTWF5IDIwMDMuCisKK0FkZGVkIHN1cHBvcnQgZm9yIFJlZCBI YXQgPGJhdWRib3kuaD4gYW5kIC91c3Ivc2Jpbi9sb2NrZGV2LiAgU3VwcG9zZWRseSB0aGlzCith bGxvd3MgS2VybWl0IHRvIGJlIGluc3RhbGxlZCB3aXRob3V0IHNldHVpZCBvciBzZXRnaWQgYml0 cyBhbmQgc3RpbGwgYmUgYWJsZQordG8gbG9jayBhbmQgdXNlIHRoZSBzZXJpYWwgZGV2aWNlLiAg Q29tcGlsZXMgYW5kIHN0YXJ0cywgYnV0IG5vdCB0ZXN0ZWQuCitja2NkZWIuaCwgbWFrZWZpbGUs IGNrdXRpby5jLCBja3V1czUuYywgMTYgTWF5IDIwMDMuCisKK0Zyb20gSmVmZjogRlRQIEFTQ0lJ IHNlbmQgZGF0YSB0byBob3N0IHdoZW4gRlRQIC9TU0wgd2FzIGluIHVzZSB3YXMgYnJva2VuLgor ZnRwX2RwbCBpcyBzZXQgdG8gQ2xlYXIgd2hlbiBGVFAgL1NTTCBpcyBpbiB1c2UuICBUaGlzIHdh cyBjYXVzaW5nIHRoZSBkYXRhIHRvCitiZSB3cml0dGVuIHRvIHRoZSBzb2NrZXQgd2l0aCBzZW5k KCkgaW5zdGVhZCBvZiB0aGUgT3BlblNTTCByb3V0aW5lcy4KK2NrY2Z0cC5jLCBja3VhdGguYywg MjEgTWF5IDIwMDMuCisKK0Zyb20gSmVmZjogU3R1ZmYgZm9yIEtlcmJlcm9zIDUyNDogY2tjZGVi LmguICBGaXhlcyBmb3IgRlRQOyAiRlRQIEFTQ0lJIHNlbmQKK2RhdGEgZGlkIG5vdCBwcm9wZXJs eSBjb21wdXRlIHRoZSBlbmQgb2YgbGluZSB0cmFuc2xhdGlvbnMuICBPbiBVbml4IChhbmQKK3Np bWlsYXIgcGxhdGZvcm1zKSB0aGUgZW5kIG9mIGxpbmUgd2FzIGNvcnJlY3QgZm9yIG5vIGNoYXJh Y3RlciBzZXRzIGJ1dAoraW5jb3JyZWN0IHdoZW4gY2hhcmFjdGVyIHNldHMgd2VyZSBzcGVjaWZp ZWQuICBPbiBXaW5kb3dzL09TMiwgdGhlIGVuZCBvZiBsaW5lCit3YXMgY29ycmVjdCB3aGVuIGNo YXJhY3RlciBzZXRzIHdlcmUgc3BlY2lmaWVkIGFuZCBpbmNvcnJlY3Qgd2hlbiB0aGV5IHdlcmUK K25vdC4gIE9uIE1BQywgYm90aCB3ZXJlIGJyb2tlbi4gIEFsc28sIEZUUCBTZW5kIEJ5dGUgY291 bnRzIHdlcmUgaW5jb3JyZWN0Cit3aGVuIGNoYXJhY3RlciBzZXRzIHdlcmUgc3BlY2lmaWVkLiIg IGNrY2Z0cC5jLiAgMTcgSnVuIDIwMDMuCisKK0Zyb20gSmVmZjogZml4ZXMgdG8gSFRUUCAvQUdF TlQ6IGFuZCAvVVNFUjogc3dpdGNoIGFjdGlvbjogY2tjbmV0LmMgY2t1dXMzLmMKK2NrX2NycC5j IGNrY2Z0cC5jIGNrdXVzMi5jIGNrdXVzeS5jIGNrdXVzci5jIGNrY25ldC5oLCAyMSBKdW4gMjAw My4KKworRnJvbSBKZWZmOiBGaXggU0VUIERJQUxFUiBCQUNLU1BBQ0Ugc28gaXQgY2FuIG92ZXJy aWRlIGEgcHJldmlvdXMgU0VUIEtFWQorKGUuZy4gZnJvbSBJTkkgZmlsZSk6IGNrdXVzNy5jLiAg U29tZSBTU0wvVExTIHVwZGF0ZXM6IGNrX3NzbC5jLiAgSFRUUCBzdXBwb3J0Citmb3IgVk1TIGFu ZCBvdGhlciBWTVMgaW1wcm92ZW1lbnRzIChlLmcuIGEgd2F5IHRvIG5vdCBoYXZlIHRvIGhhcmR3 aXJlIHRoZQorQy1LZXJtaXQgdmVyc2lvbiBudW1iZXIgaW50byB0aGUgYnVpbGQgc2NyaXB0KSBm cm9tIE1hcnRpbiBWb3JsYWVuZGVyOgorY2tjbmV0LmgsIGNrdXVzW3IzXS5jLCBja2NkZWIuaCwg Y2t2dGlvLmMsIGNrY25ldC5jLCBja3ZrZXIuY29tLiAgQnVpbHQgb24KK1NvbGFyaXMgKGdjYy9h bnNpKSBhbmQgU3VuT1MgKGNjL2smcikuICBUaGUgbmV3IFZNUyBzY3JpcHQgdGVzdHMgdGhlIFZN UwordmVyc2lvbiBhbmQgaW5jbHVkZXMgSFRUUCBzdXBwb3J0IG9ubHkgZm9yIFZNUyA2LjIgb3Ig bGF0ZXIuICAyIEp1bCAyMDAzLgorCitUcmllZCB0byBidWlsZCBvbiBvdXIgbGFzdCBWTVMgc3lz dGVtIGJ1dCBpdCBzZWVtcyB0byBiZSBkZWFkLiAgTG9va3MgbGlrZSBhCitoZWFkIGNyYXNoICht YWtlcyByZWFsbHkgbG91ZCBub2lzZXMsIGJvb3Qgc2F5cyBES0EwIG5vdCByZWNvZ25pemVkKSAo Zm9vZXksIEkKK2p1c3QgcGFpZCBnb29kIG1vbmV5IHRvIHJlbmV3IHRoZSBWTVMgbGljZW5zZSku ICBUcmllZCBidWlsZGluZyBhdCBhbm90aGVyCitzaXRlIHdpdGg6CisKKyAgUHJvY2VzcyBTb2Z0 d2FyZSBNdWx0aU5ldCBWNC4zIFJldiBBLVgsCisgIENvbXBhcSBBbHBoYVNlcnZlciBFUzQwLCBP cGVuVk1TIEFYUCBWNy4zCisgIENvbXBhcSBDIFY2LjQtMDA4IG9uIE9wZW5WTVMgQWxwaGEgVjcu MworCitIYWQgdG8gbWFrZSBhIGZldyBjb3JyZWN0aW9ucyB0byBja3ZrZXIuY29tLiAgQnV0IHN0 aWxsLCBjb21waWxhdGlvbiBvZgorY2tjbmV0LmMgYm9tYnMsIGluZGljYXRpbmcgdGhhdCB0aGUg U0VMRUNUIGRlZmluaXRpb24gc29tZWhvdyBnb3QgbG9zdAorc29tZXdoZXJlIHNpbmNlIHRoZSAy MDkgcmVsZWFzZSAoaS5lLiBubyBTRUxFQ1QgdHlwZSBpcyBkZWZpbmVkIHNvIGl0IGZhbGxzCit0 aHJ1IHRvICJTRUxFQ1QgaXMgcmVxdWlyZWQgZm9yIHRoaXMgY29kZSIpLiAgQnV0IEkgZG9uJ3Qg c2VlIGFueXRoaW5nIGluCitja2NkZWIuaCBvciBja2NuZXQuW2NoXSB0aGF0IHdvdWxkIGV4cGxh aW4gdGhpcy4gIE5vdCBja3ZrZXIuY29tIGVpdGhlcgorKHB1dHRpbmcgdGhlIG9sZCBvbmUgYmFj ayBnaXZlcyB0aGUgc2FtZSByZXN1bHQpLiAgT0ssIEkgZ2l2ZSB1cCwgbWF5YmUgaXQncworanVz dCB0aGF0IEkgaGF2ZW4ndCB0cmllZCBidWlsZGluZyBpdCBvbiBNdWx0aU5ldCByZWNlbnRseS4g IFdoYXQgYWJvdXQgVUNYPworQWhhLCBidWlsZHMgZmluZSB0aGVyZSBleGNlcHQgZm9yIHdhcm5p bmdzIGFib3V0IG1sb29rLCBkb2RvLCBhbmQgcGFyc2VyIGluCitja3ZmaW8uYyAoYmVjYXVzZSBv ZiBPTl9DRCkgLS0gSSBzdXBwb3NlIEkgaGF2ZSAjaW5jbHVkZSA8Y2t1Y21kLmg+Li4uIChkb25l KQorQW55aG93IGl0IGJ1aWxkcyBPSyBhbmQgdGhlIEhUVFAgY29kZSBpcyBhY3RpdmUgYW5kIGFs bW9zdCB3b3JrcyAoSFRUUCBPUEVOCit3b3JrczsgSFRUUCBHRVQgc2VlbXMgdG8gc3VjY2VlZCBi dXQgY3JlYXRlcyBhbiBlbXB0eSBmaWxlIGV2ZXJ5IHRpbWUpLiAgVHJpZWQKK2J1aWxkaW5nIHVu ZGVyIE11bHRpTmV0IGF0IGFub3RoZXIgaW5zdGFsbGF0aW9uOyBzYW1lIGJhZCByZXN1bHQuCisK K09LIHNvIHdoeSB3b24ndCBpdCBidWlsZCBmb3IgTXVsdGlOZXQ/ICBDb21wYXJpbmcgY2tjbmV0 LmMgd2l0aCB0aGUgMjA5Cit2ZXJzaW9uLCBub3QgYSBzaW5nbGUgI2lmZGVmIG9yICNpbmNsdWRl IGlzIGNoYW5nZWQuICBUcmllZCBidWlsZGluZyB3aXRoCitwMz0iTk9IVFRQIiAtLSBidWlsZHMg T0ssIGFoYS4gIFdoZXJlJ3MgdGhlIHByb2JsZW0/ICBOb3QgY2tjbmV0LmguLi4KK05vdCBja2Nk ZWIuaC4uLiAgT0sgSSBnaXZlIHVwLCB3aWxsIHJldmlzaXQgdGhpcyBuZXh0IHRpbWUgSSBnZXQg dGltZSB0bworZG8gYW55dGhpbmcgd2l0aCB0aGUgY29kZS4KKworTGF0ZXIgSmVmZiBzYWlkICJN YXJ0aW4gZGlkIG5vdCBpbXBsZW1lbnQgVk1TIG5ldHdvcmtpbmcgZm9yIHRoZSBIVFRQIGNvZGUu CitBbGwgaGUgZGlkIHdhcyBhY3RpdmF0ZSB0aGUgI2RlZmluZSBIVFRQIHdoaWNoIGhhcHBlbnMg dG8gd29yayBiZWNhdXNlIGhpcworY29ubmVjdGlvbnMgYXJlIHVzaW5nIFNTTC9UTFMgY29ubmVj dGlvbnMuICBodHRwX2luYygpLCBodHRwX3RvbCgpLCBldGMgaGF2ZQorbm8gc3VwcG9ydCBmb3Ig Vk1TIG5ldHdvcmtpbmcgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGlzIFVDWCBvciBNVUxUSU5F VC4KK1RoZSB2YXN0IG1ham9yaXR5IG9mIEhUVFAgY29ubmVjdGlvbnMgYXJlIG5vdCBzZWN1cmVk IGJ5IFNTTC9UTFMuICBJdCBtYWtlcyBubworc2Vuc2UgdG8gc3VwcG9ydCBIVFRQIG9uIFZNUyB1 bnRpbCBzb21lb25lIGlzIHdpbGxpbmcgdG8gZWl0aGVyIGRvIHRoZSB3b3JrIG9yCitwYXkgaGF2 ZSB0aGUgd29yayBkb25lIHRvIGltcGxlbWVudCBWTVMgbmV0d29ya2luZyBpbiB0aGF0IGNvZGUg YmFzZS4iICBTbyB0aGUKK2ZpeCBpcyB0byBub3QgZW5hYmxlIEhUVFAgZm9yIFZNUyBhZnRlciBh bGwuICBSZW1vdmVkIHRoZSBDS0hUVFAgZGVmaW5pdGlvbgorZm9yIFZNUyBmcm9tIGNrY2RlYi5o LCA2IEp1bCAyMDAzLgorCitGaXhlZCBja3ZmaW8uYyB0byAjaW5jbHVkZSA8Y2t1dXNyLmg+IChp bnN0ZWFkIG9mIDxja3VjbWQuaD4pIHRvIHBpY2sgdXAgCittaXNzaW5nIHByb3RvdHlwZXMuICA2 IEp1bCAyMDAzLgorCitGcm9tIEFydGh1ciBNYXJzaDogc29sYXJpczJ4ZytvcGVuc3NsK3psaWIr c3JwK3BhbStzaGFkb3cgYW5kIHRoZSBjb3JyZXNwb25kaW5nCitTb2xhcmlzIDcgdGFyZ2V0LiAg bWFrZWZpbGUsIDYgSnVsIDIwMDMuCisKK1JlbW92ZSBkdXBsaWNhdGUgI2luY2x1ZGVzIGZvciA8 c3lzL3N0YXQuaD4sIDxlcnJuby5oPiwgYW5kIDxjdHlwZS5oPiBmcm9tCitja2NmdHAuYy4gIDYg SnVsIDIwMDMuCisKK0FkZCAtRFVTRV9NRU1DUFkgdG8gTW90b3JvbGEgU1YvNjggdGFyZ2V0cyBi ZWNhdXNlIG9mIHNodWZmbGVkICNpbmNsdWRlcyBpbiAKK2NrY2Z0cC5jLiAgOCBKdWwgMjAwMy4K KworRnJvbSBKZWZmOiBGaXggcHJvYmxlbXMgbWl4aW5nIFNTTCBhbmQgU1JQIHdpdGhvdXQgS2Vy YmVyb3MuICBQbHVzIGEgZmV3IG1pbm9yCisjZGVmaW5lIGNvbW1lbnQgY2hhbmdlcyBhbmQgYSBy ZXNodWZmbGluZyBvZiAjZGVmaW5lcyBpbiBja2NkZWIuaCB0byBhbGxvdyBtZQordG8gYnVpbGQg b24gWDg2IFdpbmRvd3Mgd2l0aG91dCBLZXJiZXJvcy4gIGNrY2RlYi5oLCBja19jcnAuYywgY2t1 YXRoLmMsCisxMCBKdWwgMjAwMy4KKworRnJvbSBKZWZmOiB1cGRhdGVkIGNrdWF0Mi5oIGFuZCBj a3VhdGguYywgMjkgSnVsIDIwMDMuCisKK01hdHMgUGV0ZXJzb24gbm90aWNlZCB0aGF0IGEgdmVy eSBzbWFsbCBMYXRpbi0xIGZpbGUgd291bGQgYmUgaW5jb3JyZWN0bHkKK2lkZW50aWZpZWQgYXMg VUNTLTIgYnkgc2NhbmZpbGUoKS4gIEZpeGVkIGluIGNrdXVzeC5jLCAyOSBKdWwgMjAwMy4KKwor Rml4ZWQgQUNDRVNTIG1hY3JvIGRlZmluaXRpb24gdG8gYWNjb3VudCBmb3IgdGhlIGZhY3QgdGhh dCBGSU5EIGlzIG5vdyBhCitidWlsdC1pbiBjb21tYW5kLiAgY2tlcm1pdC5pbmksIDMwIEp1bCAy MDAzLgorCitGcm9tIEplZmY6IEZpeCBmb3IgdHlwbyBpbiB1cmxwYXJzZSgpIChzdmMvaG9zKTog Y2t1dXN5LmMsIDE4IEF1ZyAyMDAzLgorCitGcm9tIEplZmY6IFJlZGhhdDkgbWFrZWZpbGUgdGFy Z2V0cyAobmVlZGVkIGZvciBmb3IgT3BlblNTTCAwLjkuNyk6CittYWtlZmlsZSwgMTkgQXVnIDIw MDMuCisKK0dSRVAgL05PTElTVCBhbmQgL0NPVU5UIGRpZCB0b28gbXVjaCBtYWdpYywgd2l0aCBz b21lIHVuZGVzaXJhYmxlIGZhbGxvdXQ6CisiR1JFUCAvTk9MSVNUIC9DT1VOVDp4IGFyZ3MiIHBy aW50ZWQgImZpbGU6Y291bnQiIGZvciBlYWNoIGZpbGUuICAiR1JFUAorL0NPVU5UOnggL05PTElT VCBhcmdzIiBkaWQgbm90IHByaW50ICJmaWxlOmNvdW50IiwgYnV0IG5laXRoZXIgZGlkIGl0IHNl dCB0aGUKK2NvdW50IHZhcmlhYmxlLiAgUmVtb3ZlZCB0aGUgbWFnaWMuICBBbHNvIG9uZSBvZiB0 aGUgR1JFUCBzd2l0Y2hlcywKKy9MSU5FTlVNQkVSUywgd2FzIG91dCBvZiBvcmRlci4gIEZpeGVk IGluIGNrdXVzNi5jLCAyMCBBdWcgMjAwMy4KKworRnJvbSBKZWZmOiAiUmVvcmdhbml6aW5nIGNv ZGUgdG8gZW5hYmxlIGJ1aWxkaW5nIHdpdGggZGlmZmVyZW50IHN1YnNldHMgb2YKK29wdGlvbnM7 IGEgZmV3IHR5cG9zIGNvcnJlY3RlZCBhcyB3ZWxsLiIgIGNrY2RlYi5oLCBja3V2ZXIuaCAoZm9y IFJIOSksCitja2NuZXQuYywgY2t1dXM3LmMsIGNrdXVzMy5jOiAyNCBBdWcgMjAwMy4KKworU2Nh bmZpbGUgbWlzaWRlbnRpZmllZCBhIGJpZyBQREYgZmlsZSBhcyB0ZXh0IGJlY2F1c2UgdGhlIGZp cnN0IDgwMEsgb2YgaXQKKyp3YXMqIHRleHQgKG1vc3Qgb3RoZXIgUERGIGZpbGVzIHdlcmUgY29y cmVjdGx5IHRhZ2dlZCBhcyBiaW5hcnkpLiAgRml4ZWQKK2J5IGFkZGluZyBhIGNoZWNrIGZvciB0 aGUgUERGIHNpZ25hdHVyZSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlLgorc2NhbmZpbGUo KTogY2t1dXN4LmMsIDI1IEF1ZyAyMDAzLgorCitEaXR0byBmb3IgUG9zdFNjcmlwdCBmaWxlcywg YnV0IGNvbnNlcnZhdGl2ZWx5LiAgU2lnbmF0dXJlIGF0IGJlZ2lubmluZyBvZgorZmlsZSBtdXN0 IGJlZ2luIHdpdGggIiUhUFMtQWRvIi4gIElmIGl0J3MganVzdCAiJSEiIChvciBzb21ldGhpbmcg bm9uc3RhbmRhcmQKK2xpa2UgIiUlQ3JlYXRvcjogV2luZG93cyBQU0NSSVBUIikgd2UgZG8gYSBy ZWd1bGFyIHNjYW4uICBBbHNvIGFkZGVkICIqLnBzIgordG8gYWxsIGJpbmFyeSBmaWxlbmFtZSBw YXR0ZXJucy4gIGNrdXVzeC5jLCA0IFNlcCAyMDAzLgorCitEaXR0byAoYnV0IHdpdGhpbiAjaWZu ZGVmIE5PUENMU0NBTikgZm9yIFBDTCAoPEVTQz5FKSBhbmQgUEpMICg8RVNDPiUpIGZpbGVzLAor YnV0IG5vIGJpbnBhdHRlcm5zIChub3RlOiAiLlBDTCIgaXMgdGhlIGV4dGVuc2lvbiBmb3IgVE9Q Uy0yMCBFWEVDIHNjcmlwdHMpLgorY2t1dXN4LmMsIDQgU2VwIDIwMDMuCisKK0FkZGVkIGNvbW1l bnRzIGFib3V0IE9wZW5TU0wgMC45LjcgdG8gYWxsIGxpbnV4K29wZW5zc2wgdGFyZ2V0cy4KK21h a2VmaWxlLCA0IFNlcCAyMDAzLgorCitGcm9tIEplZmY6IEFkZGVkIC0gI2RlZmluZSBBTExPV19L UkJfM0RFU19FTkNSWVBULiAgV2hlbiB0aGlzIHN5bWJvbCBpcyBkZWZpbmVkCithdCBjb21waWxh dGlvbiBLZXJtaXQgd2lsbCBhbGxvdyBub24tREVTIHNlc3Npb24ga2V5cyB0byBiZSB1c2VkIGR1 cmluZyBUZWxuZXQKK0F1dGguICBUaGVzZSBzZXNzaW9uIGtleXMgY2FuIHRoZW4gYmUgdXNlZCBm b3IgVGVsbmV0IEVuY3J5cHQuICBUaGUgcmVhc29uCit0aGlzIGlzIG5vdCBjb21waWxlZCBvbiBi eSBkZWZhdWx0IGlzIHRoYXQgdGhlIE1JVCBLZXJiZXJvcyBUZWxuZXQgZG9lcyBub3QKK2ZvbGxv dyB0aGUgUkZDIGZvciBjb25zdHJ1Y3Rpbmcga2V5cyBmb3IgRU5DUllQVCBERVMgd2hlbiB0aGUg a2V5cyBhcmUgbG9uZ2VyCit0aGFuIDggYnl0ZXMgaW4gbGVuZ3RoLiAgY2t1YXRoLmMsIGNrdXVz NS5jLCA0IFNlcCAyMDAzLgorCisiZnRwIG1nZXQgYSBiIGMiIHN1Y2NlZWRlZCBpZiBvbmUgb3Ig bW9yZSBvZiB0aGUgZmlsZXMgZGlkIG5vdCBleGlzdCwgZXZlbgord2l0aCAic2V0IGZ0cCBlcnJv ci1hY3Rpb24gcHJvY2VlZCIuICBUaGlzIGlzIGJlY2F1c2UgdGhlIHNlcnZlcidzIE5MU1QgZmls ZQorbGlzdCBkb2VzIG5vdCBpbmNsdWRlIGFueSBmaWxlcyB0aGF0IGRvbid0IGV4aXN0LCBzbyB0 aGUgY2xpZW50IG5ldmVyIGV2ZW4KK3RyaWVzIHRvIGdldCB0aGVtLiAgRm9ydHVuYXRlbHksIHRo ZSB3YXkgdGhlIGNvZGUgaXMgc3RydWN0dXJlZCwgdGhpcyBvbmUgd2FzCitlYXN5IHRvIGZpeC4g IGNrY2Z0cC5jLCAxNCBTZXAgMjAwMy4KKworRnJvbSBKZWZmOiBDb3JyZWN0ZWQgY29kZSBpbiBj a2NuZXQuYyB0byBlbnN1cmUgdGhhdCBSZXZlcnNlIEROUyBMb29rdXBzIGFyZQorbm90IHBlcmZv cm1lZCBpZiB0Y3BfcmRucyBpcyBPRkYuICBGaXhlZCBja19rcmI1X2dldHJlYWxtKCkgdG8gYWN0 dWFsbHkgcmV0dXJuCit0aGUgcmVhbG0gb2YgdGhlIGNyZWRlbnRpYWxzIGNhY2hlIGFuZCBub3Qg dGhlIGRlZmF1bHQgcmVhbG0gc3BlY2lmaWVkIGluIHRoZQora3JiNS5jb25mIGZpbGUuICBQcmV2 aW91c2x5IGtyYjVfY2NfZ2V0X3ByaW5jaXBhbCgpIHdhcyBub3QgYmVpbmcgY2FsbGVkLgorRml4 ZWQgY2tfa3JiNV9pc190Z3RfdmFsaWQoKSB0byB0ZXN0IHRoZSBUR1QgaW4gdGhlIGN1cnJlbnQg Y2NhY2hlIGFuZCBub3QgdGhlCitUR1QgY29uc3RydWN0ZWQgZnJvbSB0aGUgZGVmYXVsdCByZWFs bS4gIGNrY25ldC5jLCBja3VhdGguYywgMTQgU2VwIDIwMDMuCisKK01hcmNvIEJlcm5hcmRpIG5v dGljZWQgdGhhdCBJRiBESVJFQ1RPUlkgY291bGQgcHJvZHVjZSBhIGZhbHNlIHBvc2l0aXZlIGlm Cit0aGUgYXJndW1lbnQgZGlyZWN0b3J5IGhhZCBwcmV2aW91c2x5IGJlZW4gcmVmZXJlbmNlZCBi dXQgdGhlbiByZW1vdmVkLiAgVGhpcworaXMgYmVjYXVzZSBvZiB0aGUgY2xldmVyIGlzZGlyKCkg Y2FjaGUgdGhhdCB3YXMgYWRkZWQgdG8gc3BlZWQgdXAgcmVjdXJzaW9uCit0aHJvdWdoIGJpZyBk aXJlY3RvcnkgdHJlZXMuICBDaGFuZ2VkIElGIERJUkVDVE9SWSB0byBtYWtlIGEgc2Vjb25kIGNo ZWNrCisoZGVmaW5pdGl2ZSBidXQgbW9yZSBleHBlbnNpdmUpIGlmIGlzZGlyKCkgc3VjY2VlZHMs IGFuZCBjaGFuZ2VkIHRoZQorZGlyZWN0b3J5LWRlbGV0aW5nIHJvdXRpbmUsIGNrbWtkaXIoKSwg dG8gZmx1c2ggdGhlIGRpcmVjdG9yeSBjYWNoZSAoVU5JWAorb25seSAtLSB0aGlzIGFsc28gc2hv dWxkIGJlIGRvbmUgaW4gSzk1IGJ1dCBpdCdzIG5vdCBjcml0aWNhbCkuICBUaGlzIHdhcworZG9u ZSBieSBhZGRpbmcgYSByb3V0aW5lLCBjbHJkaXJjYWNoZSgpIHRvIGNrdWZpby5jLCB3aGljaCBz ZXRzIHByZXZzdGF0Cit0byAtMSBhbmQgcHJldnBhdGhbMF0gdG8gTlVMLiAgY2tjZm4zLmMsIGNr dXVzNi5jLCBja3VmaW8uYywgMTggU2VwIDIwMDMuCisKK01hcmNvIHJlcG9ydGVkIHRoZSBzZWNv bmQgZml4IHN0aWxsIGRpZG4ndCB3b3JrIGZvciBoaW0gKGV2ZW4gdGhvdWdoIGl0IGRpZAorZm9y IG1lKS4gIFJhdGhlciB0aGFuIHRyeSB0byBmaWd1cmUgb3V0IHdoeSwgSSBjb25jbHVkZWQgdGhh dCB0aGUgZGlyZWN0b3J5CitjYWNoZSBpcyBqdXN0IG5vdCBzYWZlOiBhIGRpcmVjdG9yeSBmb3Vu ZCBhIHNlY29uZCBhZ28gbWlnaHQgaGF2ZSBiZWVuIGRlbGV0ZWQKK29yIHJlbmFtZWQgbm90IG9u bHkgYnkgS2VybWl0IGJ1dCBieSBzb21lIG90aGVyIHByb2Nlc3MuICBXaHkgZGlkIEkgYWRkIHRo aXMKK2luIHRoZSBmaXJzdCBwbGFjZT8gIFRoZSBsb2cgc2F5czoKKworICBTb21lIGRlYnVnIGxv Z3Mgc2hvd2VkIHRoYXQgaXNkaXIoKSBpcyBvZnRlbiBjYWxsZWQgdHdpY2UgaW4gYSByb3cgb24g dGhlCisgIHNhbWUgZmlsZS4gIFJhdGhlciB0aGFuIHRyeSB0byBzb3J0IG91dCBjbGllbnRzLCBJ IGFkZGVkIGEgMS1lbGVtZW50IGNhY2hlCisgIHRvIFVuaXggaXNkaXIoKS4gIGNrdWZpby5jLCAy NCBBcHIgMjAwMC4KKworRXhwZXJpbWVudGF0aW9uIHdpdGggRElSIGFuZCBESVIgL1JFQ1VSU0lW RSBkb2VzIG5vdCBzaG93IHRoaXMgaGFwcGVuaW5nIGF0CithbGwuICBTbyBJICNpZmRlZidkIG91 dCB0aGUgZGlyZWN0b3J5IGNhY2hlIChzZWUgI2lmZGVmIElTRElSQ0FDSEUgaW4gY2t1ZmlvLmM7 CitJU0RJUkNBQ0hFIGlzIG5vdCBkZWZpbmVkKSBhbmQgYmFja2VkIG9mZiB0aGUgcHJldmlvdXMg Y2hhbmdlczogY2t1ZmlvLmMsCitja2NmbjMuYywgY2t1dXM2LmMsIDI4IFNlcCAyMDAzLgorCitG cm9tIEplZmY6IFJlcGxhY2UgdGhlIGNvbXBpbGUgdGltZSBBTExPV19LUkJfM0RFU19FTkNSWVBU IHdpdGggYSBydW4tdGltZQorY29tbWFuZCBTRVQgVEVMTkVUIEJVRyBBVVRILUtSQjUtREVTIHdo aWNoIGRlZmF1bHRzIHRvIE9OOiBja2N0ZWwuW2NoXSwKK2NrdXVzWzIzNF0uYywgY2tfY3JwLmMs IGNrdWF0aC5jLiAgNCBPY3QgMjAwMy4KKworQWxsb3cgRElBTCBSRVRSSUVTIHRvIGJlIGFueSBw b3NpdGl2ZSBudW1iZXIsIGFuZCBjYXRjaCBuZWdhdGl2ZSBvbmVzLgorQWxzbyBhZGRlZCBjb2Rl IHRvIGNoZWNrIGZvciBhdG9pKCkgZXJyb3JzIChlLmcuIHRydW5jYXRpb24pLiAgQXQgbGVhc3Qg b24KK3NvbWUgcGxhdGZvcm1zIChlLmcuIFNvbGFyaXMpIGF0b2koKSBpcyBzdXBwb3NlZCB0byBz ZXQgZXJybm8sIGJ1dCBpdAorZG9lc24ndC4gIGNrdXVzMy5jLCBja3VjbWQuYywgNCBPY3QgMjAw My4KKworQWRkZWQgL0RFRkFVTFQ6IHRvIEFTSy1jbGFzcyBjb21tYW5kcyAoQVNLLCBBU0tRLCBH RVRPSyk6CisKKyAuIEZvciBwb3B1cHM6IG5vIHdheSB0byBzZW5kIGRlZmF1bHRzIHRvIHBvcHVw X3JlYWR0ZXh0KCkgb3IgcG9wdXBfcmVhZHBhc3MoKS4KKyAuIEZvciBHVUkgQVNLW1FdLCBwYXNz IGRlZmF1bHQgdG8gZ3VpX3R4dF9kaWFsb2coKS4KKyAuIEZvciBHVUkgR0VUT0ssIGNvbnZlcnQg InllcyIgIm9rIiBvciAibm8iIGRlZmF1bHQgdG8gbnVtYmVyIGZvciB1cV9vaygpLgorIC4gRm9y IFRleHQgR0VUT0ssIGFkZCBkZWZhdWx0IHRvIGNta2V5KCkuCisgLiBGb3IgVGV4dCBBU0tbUV0s IGFkZCBkZWZhdWx0IHRvIGNtdHh0KCkuCisgLiBGb3IgR0VUQywgR0VUS0VZLCBhbmQgUkVBRDog bm8gY2hhbmdlcy4KKworR0VUT0ssIEFTSywgYW5kIEFTS1Egd2l0aCAvVElNRU9VVDogbm8gbG9u Z2VyIGZhaWwgd2hlbiB0aGUgdGltZXIgZ29lcyBvZmYKK2lmIGEgL0RFRkFVTFQgd2FzIHN1cHBs aWVkLiAgVGhlIEdVSSBmdW5jdGlvbnMgKHVxX2JsYWgpIGRvbid0IHNlZW0gdG8KK3N1cHBvcnQg dGltZW91dHMuICBPbmx5IHRoZSB0ZXh0IHZlcnNpb24gaGFzIGJlZW4gdGVzdGVkLiAgY2t1dXNb MjZdLmMsCis0IE9jdCAyMDAzLgorCitGcm9tIEplZmY6IGFkZCAvREVGQVVMVDogZm9yIHBvcHVw cy4gIGNrdXVzNi5jLiA2IE9jdCAyMDAzLgorCitDaGFuZ2UgU0VUIERJQUwgSU5URVJWQUwgdG8g YmUgbGlrZSBTRVQgRElBTCBSRVRSSUVTLiAgY2t1dXNbMzRdLmMsIDYgT2N0IDIwMDMuCisKK0Fk ZGVkIHRhcmdldCBmb3IgSFAtVVggMTAvMTEgKyBPcGVuU1NMIGJ1aWx0IHdpdGggZ2NjLCBmcm9t IENocmlzIENoZW5leS4KK01ha2VmaWxlLCAxMiBPY3QgMjAwMy4KKworRnJvbSBKZWZmLCA2IE5v diAyMDAzOgorIC4gI2lmZGVmIGFkanVzdG1lbnRzOiBja2NmdHAuYywgY2tjZGViLmgKKyAuIEZp eCBzcHVyaW91cyBjb25zdW1wdGlvbiBvZiBmaXJzdCBieXRlKHMpIG9uIFRlbG5ldCBjb25uZWN0 aW9uOiBja2N0ZWwuYworIC4gQW5vdGhlciBIUCBQSkwgdGVzdCBmb3Igc2NhbmZpbGU6IGNrdXVz eC5jLgorIC4gSzk1OiBSZWNvZ25pemUgREc0eHggcHJvdGVjdGVkIGZpZWxkcyBpbiBERzJ4eCBl bXVsYXRpb246IGNrdXVzNy5jLgorIC4gQWRkIFNTTGVheSB2ZXJzaW9uIGRpc3BsYXkgdG8gU0hP VyBBVVRIIGNvbW1hbmQ6IGNrdXVzNy5jCisgLiBJbXByb3ZlZCBTRVQgTU9VU0UgQ0xFQVIgaGVs cCB0ZXh0OiBja3V1czIuYy4KKyAuIEltcHJvdmVkIEt2ZXJicyBoZWxwIHRleHQ6IGNrdXVzMi5j ICgrIG5ldyBJQk0tMzE1MSBLdmVyYnMpLgorIC4gU29tZSBjaGFuZ2VzIHRvIGNrX3NzbC5jLCBj a3VhdGguYy4KKworRnJvbSBQZXRlckUsIDEwIE5vdiAyMDAzOgorIC4gSW1wcm92ZWQgSFAtVVgg MTAvMTEgbWFrZWZpbGUgdGFyZ2V0cyBmb3IgT3BlblNTTC4KKyAuICNpZmRlZiBmaXggZm9yIE9w ZW5TU0wgb24gSFAtVVg6IGNrX3NzbC5jLgorCitBbm90aGVyIG5ldyBtYWtlZmlsZSBmcm9tIFBl dGVyRSB3aXRoIGltcHJvdmVkIGFuZCBpbnRlZ3JhdGVkIEhQLVVYIHRhcmdldHMuCisxMiBOb3Yg MjAwMy4KKworQSBjb3VwbGUgZml4ZXMgdG8gdGhlIHNvbGFyaXM5ZytrcmI1K2tyYjQrb3BlbnNz bCtzaGFkb3crcGFtK3psaWIgdGFyZ2V0Citmcm9tIEplZmYuICBBZGRlZCBhIHNvbGFyaXM5Zytv cGVuc3NsK3NoYWRvdytwYW0remxpYiB0YXJnZXQuICBtYWtlZmlsZSwKKzIxIE5vdiAyMDAzLgor CitGcm9tIEplZmYsIDMwIE5vdiAyMDAzOgorIC4gRml4IFNFTkQgL01PVkUtVE86IGNrdXVzci5j LgorIC4gRml4IEs5NSBTRVQgVElUTEUgdG8gYWxsb3cgcXVvdGVzL2JyYWNlcyBhcm91bmQgdGV4 dDogY2t1dXM3LmMuCisgLiBJbXByb3ZlZCAic2V0IHRlcm0gYXV0b2Rvd25sb2FkID8iIHJlc3Bv bnNlOiBja3V1czUuYy4KKyAuIEZpeCBTSE9XIEZFQVRVUkVTIHRvIHNwZWNpZnkgdGhlIHByb3Rv Y29sIGZvciBlbmNyeXB0aW9uOiBja3V1czUuYworIC4gTWFrZSB7U0VORCwgUkVDRUlWRX0ge01P VkUtVE8sIFJFTkFNRS1UT30gd29yayBmb3IgWFlaTU9ERU0gKEs5NSBvbmx5KS4KKworRnJvbSBK ZWZmOiA3IEphbiAyMDA0OgorIC4gQXQgb25lIHBvaW50IEZyYW5rIHN0YXJ0ZWQgdG8gYWRkIGEg dGltZXIgcGFyYW1ldGVyIHRvIHRoZQorICAgdXFfdHh0KCkgZnVuY3Rpb24gYnV0IGhlIG9ubHkg ZGlkIGl0IGZvciB0aGUgbm9uLUFOU0kKKyAgIGNvbXBpbGVycy4gIEkgYWRkZWQgaXQgZm9yIHRo ZSBBTlNJIGNvbXBpbGVycywgZml4ZWQgdGhlCisgICBwcm90b3R5cGVzIGFuZCBwcm92aWRlZCBh IGRlZmF1bHQgdmFsdWUgZWFzaWx5IGNoYW5nZWQKKyAgIERFRkFVTFRfVVFfVElNRU9VVDogY2tj a2VyLmgsIGNrdXVzWzM2XS5jLCBja19zc2wuYywgY2tjZnRwLmMsIGNrdWF0aC5jLgorIC4gRml4 ZWQgU0VUIFRFUk1JTkFMIERFQlVHIE9OICh0eXBvIGluIHZhcmlhYmxlIG5hbWUpOiBja3V1czcu Yy4KKyAuIEZpeGVkIEJFRVAgSU5GT1JNQVRJT047IHByZXZpb3VzbHkgaXQgbWFkZSBubyBzb3Vu ZCwgbm93IHVzZXMKKyAgIE1CX0lDT05RVUVTVElPTi4gIGNrdXVzeC5jLgorCitGcm9tIElhbiBC ZWNrd2l0aCA8aWFuQG5lc3NpZS5tY2MuYWMudWs+IChEZWJpYW5pemF0aW9uKSwgNyBKYW4gMjAw NDoKKyAuIFNlYXJjaCBkaXIvY2tlcm1pdCBmb3IgZG9jcywgYXMgd2VsbCBhcyBkaXIva2VybWl0 IGluIGNtZGluaSgpOiBja3V1czUuYy4KKyAuIE5ldyBsaW51eCtrcmI1K2tyYjQrb3BlbnNzbCtz aGFkb3crcGFtIHRhcmdldCAoa2l0Y2hlbiBzaW5rIG1pbnVzIFNSUCwKKyAgIHdoaWNoIERlYmlh biBkb2VzIG5vdCBkaXN0cmlidXRlKTogbWFrZWZpbGUuCisgPyBNYW5nbGVzIHRoZSBERVNURElS IHN1cHBvcnQgaW4gbWFrZWZpbGUgdG8gaW5zdGFsbCBpbnRvIGEgc3RhZ2luZyBhcmVhOgorICAg bWFrZWZpbGUgKEkgZGlkbid0IHRha2UgdGhpcyBvbmUgeWV0KS4KKworVXBkYXRlZCBjb3B5cmln aHQgbm90aWNlcyBmb3IgMjAwNCwgYWxsIG1vZHVsZXMuICA3IEphbiAyMDA0LgorCitBZGRlZCBJ TlBVVCAvTk9NQVRDSCwgYWxsb3dpbmcgSU5QVVQgdG8gYmUgdXNlZCBmb3IgYSBmaXhlZCBhbW91 bnQgb2YgdGltZQord2l0aG91dCBhdHRlbXB0aW5nIHRvIG1hdGNoIGFueSB0ZXh0IG9yIHBhdHRl cm5zLCBzbyBpdCdzIG5vIGxvbmdlcgorbmVjZXNzYXJ5IHRvICJpbnB1dCA2MDAgU1RSSU5HX1RI QVRfV0lMTF9ORVZFUl9DT01FIi4gIElmIC9OT01BVENIIGlzCitpbmNsdWRlZCwgSU5QVVQgc3Vj Y2VlZHMgaWYgdGhlIHRpbWVvdXQgZXhwaXJlcywgd2l0aCBcdihpbnN0YXR1cykgPSAxCisobWVh bmluZyAidGltZWQgb3V0Iik7IGZhaWxzIHVwb24gaW50ZXJydXB0aW9uIG9yIGkvbyBlcnJvci4g IGNrdXVzci5oLAorY2t1dXNbcjI0XS5jLCA3IEphbiAyMDA0LgorCitBZGRlZCBTRVQgSU5QVVQg U0NBTEUtRkFDVE9SIDxmbG9hdD4uICBUaGlzIHNjYWxlcyBhbGwgSU5QVVQgdGltZW91dHMgYnkg dGhlCitnaXZlbiBmYWN0b3IsIGFsbG93aW5nIHRpbWUtc2Vuc2l0aXZlIHNjcmlwdHMgdG8gYmUg YWRqdXN0ZWQgdG8gY2hhbmdpbmcKK2NvbmRpdGlvbnMgc3VjaCBhcyBjb25nZXN0ZWQgbmV0d29y a3Mgb3IgZGlmZmVyZW50LXNwZWVkIG1vZGVtcyB3aXRob3V0CitoYXZpbmcgdG8gY2hhbmdlIGVh Y2ggSU5QVVQtY2xhc3MgY29tbWFuZC4gIFRoaXMgYWZmZWN0cyBvbmx5IHRob3NlIHRpbWVvdXRz Cit0aGF0IGFyZSBnaXZlbiBpbiBzZWNvbmRzLCBub3QgYXMgd2FsbC1jbG9jayB0aW1lcy4gIEFs dGhvdWdoIHRoZSBzY2FsZQorZmFjdG9yIGNhbiBoYXZlIGEgZnJhY3Rpb25hbCBwYXJ0LCB0aGUg SU5QVVQgdGltZW91dCBpcyBzdGlsbCBhbiBpbnRlZ2VyLgorQWRkZWQgdGhpcyB0byBTSE9XIElO UFVULCBhbmQgYWRkZWQgYSBcdihpbnNjYWxlKSB2YXJpYWJsZSBmb3IgaXQuCitja3V1c3IuaCwg Y2t1dXNbcjI1N10uYywgNyBKYW4gMjAwNC4KKwordW5kZWYgXCVhLCBcZnZlcmlmeShhYmMsXCVh KSByZXR1cm5zIDAsIHdoaWNoIG1ha2VzIGl0IGxvb2sgYXMgaWYgXCVhIGlzIGEKK3N0cmluZyBj b21wb3NlZCBvZiBhJ3MsIGIncywgYW5kL29yIGMncywgd2hlbiBpbiBmYWN0IGl0IGNvbnRhaW5z IG5vdGhpbmcuCitDaGFuZ2VkIFxmdmVyaWZ5KCkgdG8gcmV0dXJuIC0xIGluIHRoaXMgY2FzZS4g IGNrdXVzNC5jLCAxMiBKYW4gMjAwNC4KKworXGZjb2RlKHh4eCkgcmV0dXJuZWQgYW4gZW1wdHkg c3RyaW5nIGlmIGl0cyBhcmd1bWVudCBzdHJpbmcgd2FzIGVtcHR5LiAgVGhpcworbWFrZXMgaXQg dW5zYWZlIHRvIHVzZSBpbiBhcml0aG1ldGljIG9yIGJvb2xlYW4gZXhwcmVzc2lvbnMuICBDaGFu Z2VkIGl0IHRvCityZXR1cm4gMCBpZiBpdHMgYXJndW1lbnQgd2FzIG1pc3NpbmcsIG51bGwsIG9y IGVtcHR5LiAgY2t1dXM0LmMsIDEyIEphbiAyMDA0LgorCitVcGRhdGVkIFx2ZXJpZnkoKSBhbmQg XGZjb2RlKCkgaGVscCB0ZXh0LiAgY2t1dXMyLmMsIDEyIEphbiAyMDA0LgorCitXaGlsZSBzZXR0 aW5nIHVwIElLU0QsIElhbiBCZWNrd2l0aCBub3RpY2VkIHRoYXQgaW5jbHVkaW5nIHRoZSAtLWlu aXRmaWxlOgorb3B0aW9uIGNhdXNlZCBLZXJtaXQgdG8gc3RhcnQgcGFyc2luZyBpdHMgb3duIENv cHlyaWdodCBzdHJpbmcgYXMgaWYgaXQgd2VyZQordGhlIGNvbW1hbmQgbGluZSwgYW5kIGV2ZW50 dWFsbHkgY3Jhc2guICBJIGNvdWxkbid0IHJlcHJvZHVjZSBvbiBTb2xhcmlzIC8KK1NwYXJjIGJ1 dCBJIGNvdWxkIGluIExpbnV4IC8gaTM4NiAod2hhdCBJYW4gaXMgdXNpbmcpIC0tIGEgY2hhbmdl IGZyb20gSmVmZgorb24gMjggQXByIDIwMDMgc2V0IHRoZSBjb21tYW5kLWxpbmUgYXJnIHBvaW50 ZXIgdG8gYSBsaXRlcmFsIGVtcHR5IHN0cmluZyBpbgorcHJlc2NhbigpIGFib3V0IGxpbmUgMTc0 MCBvZiBvZiBja3V1czQuYzsgdGhlIHBvaW50ZXIgaXMgaW5jcmVtZW50ZWQgbmV4dAordGltZSB0 aHJ1IHRoZSBsb29wLCByZXN1bHRpbmcgaW4gcmFuZG9tIG1lbW9yeSBiZWluZyByZWZlcmVuY2Vk LiAgRml4ZWQgYnkKK3NldHRpbmcgdGhlIHBvaW50ZXIgdG8gTlVMTCBpbnN0ZWFkIG9mICIiLiAg Y2t1dXM0LmMsIDEyIEphbiAyMDA0LgorCitkZWNsYXJlIFwmYVs5OTk5OTk5OTk5OTk5OTldIHdv dWxkIGR1bXAgY29yZSBvbiBzb21lIHBsYXRmb3Jtcy4gIGF0b2koKQorb3Igd2hhdGV2ZXIgd291 bGQgdHJ1bmNhdGUgdGhlIGRpbWVuc2lvbiB0byBtYXhpbnQuICBXaGVuIHdlIGFkZCAxIHRvIHRo ZQorcmVzdWx0LCB3ZSBnZXQgYSBuZWdhdGl2ZSBudW1iZXIsIHdoaWNoIGlzIHVzZWQgYXMgYW4g aW5kZXgsIGxvb3AgdGVzdCwgZXRjLgorRml4ZWQgYm90aCBkb2RjbCgpIGFuZCBkY2xhcnJheSgp IHRvIGNoZWNrIGZvciAobisxIDwgMCkuICBja3V1c1tyNV0uYywKKzEyIEphbiAyMDA0LgorCitV bml4IHpjaGtpKCkgd291bGQgZmFpbCBvbiAvZGV2L3R0eSwgd2hpY2ggaXMgdW5yZWFzb25hYmxl LiAgVGhpcyBwcmV2ZW50ZWQKK0ZPUEVOIC9SRUFEIGZyb20gcmVhZGluZyBmcm9tIHRoZSB0ZXJt aW5hbC4gIHpjaGtpKCkgYWxyZWFkeSBhbGxvd2VkIGZvcgorL2Rldi9udWxsLCBzbyBJIGFkZGVk IC9kZXYvdHR5IHRvIHRoZSBsaXN0IG9mIHNwZWNpYWxzLiAgRGl0dG8gZm9yIEZPUEVOCisvV1JJ VEUgYW5kIHpjaGtvKCkuICBja3VmaW8uYyAxMyBKYW4gMjAwNC4KKworQWRkZWQgdW50YWJpZnko KSByb3V0aW5lIHRvIGNrY2xpYi5bY2hdLCAxMyBKYW4gMjAwNC4KK0FkZGVkIEZSRUFEIC9UUklN IGFuZCAvVU5UQUJJRlkuICBja3V1c1syN10uYywgMTMgSmFuIDIwMDQuCitBZGRlZCBcZnVudGFi aWZ5KCkuICBja3V1c3IuaCwgY2t1dXNbMjRdLmMsIDEzIEphbiAyMDA0LgorCitEYXQgTmd1eWVu IG5vdGljZWQgdGhhdCAoc2V0cSB1ICdwJykgZm9sbG93ZWQgYnkgKHUpIGR1bXBlZCBjb3JlLiAg VGhpcyB3YXMKK2NhdXNlZCBieSBhbiBvdmVyLWNsZXZlciBvcHRpbWl6YXRpb24gdGhhdCBza2lw cGVkIG1hbGxvY3MgZm9yIHNob3J0CitsaXRlcmFscywgYnV0IHRoZW4gd2VudCBvbiBsYXRlciB0 byB0cnkgdG8gZnJlZSBvbmUgdGhhdCBoYWRuJ3QgYmVlbgorbWFsbG9jJ2QuICBGaXhlZCBpbiBk b3NleHAoKTogY2t1dXMzLmMsIDE0IEphbiAyMDA0LgorCitDYXRjaCBhbm90aGVyIGNvcHlyaWdo dCBkYXRlLiAgY2t1dXM1LmMsIDE0IEphbiAyMDA0LgorCitGaXhlZCBTV0lUQ0ggdG8gd29yayBl dmVuIHdoZW4gU0VUIENPTU1BTkQgRE9VQkxFUVVPVEUgT0ZGIChmcm9tIE1hcmsKK1NhcGlybyku ICBja3V1czUuYywgMTUgSmFuIDIwMDQuCisKK0NoYW5nZWQgdmVyc2lvbiB0byA4LjAuMjExIHNv IHNjcmlwdHMgY2FuIHRlc3QgZm9yIHJlY2VudGx5IGFkZGVkIGZlYXR1cmVzLgorY2tjbWFpLmMs IDE1IEphbiAyMDA0LgorCitGaXhlZCBhIGdsaXRjaCBpbiBLOTUgImhlbHAgc2V0IHBvcnQiLiAg Y2t1dXMyLmMsIDIwIEphbiAyMDA0LgorCitGaXggZnJvbSBKZWZmOiBDb25uZWN0aW9ucyB0byBh IFRMUy1hd2FyZSBwcm90b2NvbCB3aGljaCByZXF1aXJlIGEgcmVjb25uZWN0Cit1cG9uIGNlcnRp ZmljYXRlIHZlcmlmaWNhdGlvbiBmYWlsdXJlIGNvdWxkIG5vdCByZWNvbm5lY3QgaWYgdGhlIGNv bm5lY3Rpb24KK3dhcyBpbml0aWF0ZWQgZnJvbSB0aGUgY29tbWFuZCBsaW5lIG9yIHZpYSBhIFVS TC4gIGNrY3RlbC5jIGNrY21haS5jCitja3V1c3IuYyBja3V1czcuYyBja3V1c3kuYywgMjAgSmFu IDIwMDQuCisKK0Zyb20gQWxleCBMZXdpbjogbWFrZWZpbGUgdGFyZ2V0IGFuZCAjaWZkZWYgZm9y IE1hYyBPUyBYIDEwLjMgKFBhbnRoZXIpOgorbWFrZWZpbGUsIGNrY25ldC5jLCA3IEZlYiAyMDA0 LgorCitBZGRlZCBLRkxBR1MgdG8gc2NvMzJ2NTA3IHRhcmdldHMgdG8gbWFrZSBQVFkgYW5kIFNT SCBjb21tYW5kcyB3b3JrLiAgVGhlCitzYW1lIGZsYWdzIGNvdWxkIHByb2JhYmx5IGFsc28gYmUg YWRkZWQgdG8gZWFybGllciBPU1I1IHRhcmdldHMgYnV0IHRoZXkKK2hhdmUgbm90IGJlZW4gdGVz dGVkIHRoZXJlLiAgbWFrZWZpbGUsIDcgRmViIDIwMDQuCisKK0NoZWNrZWQgYSBjb21wbGFpbnQg dGhhdCAiTE9DQUwgJmEiIGRpZCBub3QgbWFrZSBhcnJheSBcJmFbXSBsb2NhbC4gIEluZGVlZAor aXQgZGlkIG5vdCwgYW5kIGNhbiBub3QuICBZb3UgaGF2ZSB0byB1c2UgdGhlIGZ1bGwgc3ludGF4 IGluIHRoZSBMT0NBTAorY29tbWFuZCwgIkxPQ0FMIFwmYVtdIiwgb3IgZWxzZSBpdCBkb2Vzbid0 IGtub3cgaXQncyBub3QgYSBtYWNybyBuYW1lZCAmYS4KKzcgRmViIDIwMDQuCisKK0ZpeGVkIHNv bWUgY29uZnVzaW9uIGluIGNyZWF0aW5nIElLU0QgZGF0YWJhc2UgZmlsZSBhbmQgdGVtcC1maWxl IG5hbWVzLgorSSB3YXMgY2FsbGluZyB6Zm5xZnAoKSB3aXRob3V0IHJlbWVtYmVyaW5nIHRoYXQg dGhlIHBhdGggbWVtYmVyIG9mIHRoZQorcmV0dXJuZWQgc3RydWN0IGluY2x1ZGVkIHRoZSBmaWxl bmFtZSwgc28gdG8gZ2V0IGp1c3QgdGhlIGRpcmVjdG9yeSBuYW1lLAorSSBuZWVkZWQgdG8gc3Ry aXAgdGhlIGZpbGVuYW1lIGZyb20gdGhlIHJpZ2h0LiAgY2t1dXN5LmMsIDIgTWFyIDIwMDQuCisK K05ldyBja3VhdGguYywgY2tfc3NsLmMgZnJvbSBKZWZmLiAgMiBNYXIgMjAwNC4KKworVXBkYXRl ZCBKZWZmJ3MgYWZmaWxpYXRpb24gaW4gVkVSU0lPTiBjb21tYW5kIHRleHQuICBja3V1c3IuYywg MiBNYXIgMjAwNC4KKworRGVzaWduYXRpb24gY2hhbmdlZCBmcm9tIERldi4wMCB0byBCZXRhLjAx LiAgY2tjbWFpLmMsIDIgTWFyIDIwMDQuCisKK0ZpeGVkIHpyZW5hbWUoKSBzeXNsb2dnaW5nIC0t IGl0IGhhZCBzdWNjZXNzIGFuZCBmYWlsdXJlIHJldmVyc2VkLgorQmV0YS4wMjogY2t1ZmlvLmMs IDQgTWFyIDIwMDQuCisKK1Byb2JsZW06IHdoZW4gYWNjZXNzaW5nIElLU0QgdmlhIGEga2VybWl0 Oi8vIG9yIGlrc2Q6Ly8gVVJMLCBhbmQgYSB1c2VyIElECitpcyBnaXZlbiBidXQgbm8gcGFzc3dv cmQsIGRveGFyZygpIHNldCB0aGUgcGFzc3dvcmQgdG8gIiIgaW5zdGVhZCBvZiBsZWF2aW5nCitp dCBOVUxMLCBidXQgYWxsIHRoZSB0ZXN0cyBpbiBkb3VybCgpIGFyZSBmb3IgTlVMTC4gIEZpeGVk IGluIGRveGFyZygpOgorY2t1dXN5LmMsIDUgTWFyIDIwMDQuCisKK1RoZSBsb2dpYyBpbiBkb3Vy bCgpIGFib3V0IHdoaWNoIG1hY3JvIHRvIGNvbnN0cnVjdCAobG9naW4gYW5kIGNvbm5lY3QsCits b2dpbiBhbmQgZ2V0IGRpcmVjdG9yeSBsaXN0aW5nLCBvciBsb2dpbiBhbmQgZmV0Y2ggYSBmaWxl KSB3YXMgYSBiaXQgb2ZmLAorc28gYWxsIHRocmVlIGNhc2VzIHdlcmUgbm90IGhhbmRsZWQuICBj a2NtYWkuYywgNSBNYXIgMjAwNC4KKworVHJpYWwgQmV0YSBidWlsZHM6CisgLiBIUC1VWCBCLjEx LjExIFBBLVJJU0MKKyAuIEhQLVVYIEIuMTEuMjMgSUE2NAorIC4gVHJ1NjQgNC4wRyBBbHBoYQor IC4gVHJ1NjQgNS4xQiBBbHBoYQorIC4gRGViaWFuIDMuMCBpMzg2CisgLiBSZWQgSGF0IEVTIDIu MSBpMzg2CisgLiBTbGFja3dhcmUgOS4xIGkzODYKKyAuIFZNUyA3LjMtMSBBbHBoYSArIFVDWCA1 LjMKKyAuIFZNUyA3LjMtMSBBbHBoYSBubyBUQ1AvSVAKKyAuIFZNUyA3LjMgQWxwaGEgTXVsdGlO ZXQgNC4zIEEtWAorIC4gU0NPIFVuaXhXYXJlIDcuMS40IGkzODYKKyAuIFNDTyBPU1I1LjAuNyBp Mzg2CisgLiBTb2xhcmlzIDkgU3BhcmMKKworRml4ZWQgY29tcGlsZXIgd2FybmluZyBpbiBkb3hh cmcoKSBjYXVzZWQgYnkgdHlwbyAoTlVMTCBpbnN0ZWFkIG9mIE5VTCkgaW4KK3RoZSA1IE1hcmNo IGRveGFyZygpIGVkaXQuICBja3V1c3kuYywgOSBNYXIgMjAwNC4KKworSUtTRCAoa2VybWl0Oi8v KSBjb21tYW5kLWxpbmUgVVJMcyBkaWQgbm90IHdvcmsgcmlnaHQgaWYgdGhlIGNsaWVudCBoYWQK K2FscmVhZHkgcHJlYXV0aGVudGljYXRlZCB3aXRoIEtlcmJlcm9zIG9yIHNvbWVzdWNoIGJlY2F1 c2UgdGhleSB0cmllZCB0byBsb2cKK2luIGFnYWluIHdpdGggUkVNT1RFIExPR0lOLiAgVGhlIG1h Y3JvcyBjb25zdHJ1Y3RlZCBpbiBkb3hhcmcoKSBuZWVkZWQgdG8KK2NoZWNrIFx2KGF1dGhzdGF0 ZSkgYmVmb3JlIGF0dGVtcHRpbmcgUkVNT1RFIExPR0lOLiAgY2tjbWFpLmMsIDEwIE1hciAyMDA0 LgorCitBZGRlZCBja3VrZXIubnIgdG8geC5zaCAoY2tkYWlseSB1cGxvYWQpIGFuZCB1cGRhdGVk IGNrdWtlci5uciB3aXRoIGN1cnJlbnQKK3ZlcnNpb24gbnVtYmVyIGFuZCBkYXRlcy4gIDEwIE1h ciAyMDA0LgorCitSZXBsYWNlZCBoYXJkd2lyZWQgcmVmZXJlbmNlcyB0byAvdXNyL2xvY2FsIGlu IG1ha2VmaWxlIHdpdGggJChwcmVmaXgpCisod2hpY2ggZGVmYXVsdHMgdG8gL3Vzci9sb2NhbCwg YnV0IGNhbiBiZSBvdmVycmlkZGVuIG9uIHRoZSBjb21tYW5kIGxpbmUpLAorc3VnZ2VzdGVkIGJ5 IE5lbHNvbiBCZWViZSBmb3IgdXNlIHdpdGggQ29uZmlndXJlLiAgMTAgTWFyIDIwMDQuCisKK0Zy b20gTmVsc29uIEJlZWJlOiBJbiB0aGUgS2VybWl0IG1ha2VmaWxlIGluIHRoZSBpbnN0YWxsIHRh cmdldCBjb21tYW5kcywKK2xpbmUgOTgxIHJlYWRzOgorCisgICAgICAgIGNwICQoQklOQVJZKSAk KERFU1RESVIpJChCSU5ESVIpL2tlcm1pdCB8fCBleGl0IDE7XAorCitDb3VsZCB5b3UgcGxlYXNl IGFkZCB0aGlzIGxpbmUgYmVmb3JlIGl0OgorCisgICAgICAgIHJtIC1mICQoREVTVERJUikkKEJJ TkRJUikva2VybWl0O1wKKworU29tZSBzaXRlcyAobWluZSBpbmNsdWRlZCkga2VlcCBtdWx0aXBs ZSB2ZXJzaW9ucyBvZiBzb2Z0d2FyZSBhcm91bmQsCit3aXRoIGhhcmQgbGlua3MgYmV0d2VlbiAk KHByZWZpeCkvcHJvZ25hbWUgYW5kICQocHJlZml4KS9wcm9nbmFtZS14Lnkuei4KK0ZhaWx1cmUg dG8gcmVtb3ZlIHRoZSAkKHByZWZpeCkvcHJvZ25hbWUgYXQgIm1ha2UgaW5zdGFsbCIgdGltZSB0 aGVuCityZXBsYWNlcyB0aGUgb2xkICQocHJlZml4KS9wcm9nbmFtZS14LnkueiB3aXRoIHRoZSBu ZXcgb25lLCBkZXN0cm95aW5nCithbiBvbGQgdmVyc2lvbiB0aGF0IHRoZSBzaXRlIHdhbnRlZCB0 byBiZSBwcmVzZXJ2ZWQuICBtYWtlZmlsZSwgMTAgTWFyIDIwMDQuCisKK01pbm9yIHN5bnRheCBh bmQgdHlwbyBmaXhlcyAobW9zdGx5IHByb3RvdHlwZXMpOiBja2NkZWIuaCwgY2tjZm5zLmMsCitj a2NsaWIuYywgY2t1ZmlvLmMsIGNrdXVzci5oLCBja3V1c3guYywgMTAgTWFyIDIwMDQuICAoSSBz dGlsbCBoYXZlIGEgZmV3Cittb3JlIHRvIGRvLikKKworQWRkZWQgQ0M9JChDQykgQ0MyPSQoQ0My KSB0byBtYW55IChidXQgbm90IGFsbCkgbWFrZWZpbGUgdGFyZ2V0cyB0aGF0CityZWZlcmVuY2Ug b3RoZXIgbWFrZWZpbGUgdGFyZ2V0cy4gIE9uIHNvbWUgcGxhdGZvcm1zIChub3RhYmx5IEFJWCwg U29sYXJpcywKK1N1bk9TKSB0aGVyZSBhcmUgc3BlY2lmaWMgdGFyZ2V0cyBmb3IgZGlmZmVyZW50 IGNvbXBpbGVycywgc28gSSBza2lwcGVkCit0aG9zZS4gIG1ha2VmaWxlLCAxMCBNYXIgMjAwNC4K KworQWRkZWQgZXJyb3IgY2hlY2tpbmcgdG8ga2VybWl0Oi8vIFVSTCBtYWNyb3MsIHNvIHRoZXkg ZG9uJ3QgcGxvdyBhaGVhZAorYWZ0ZXIgdGhlIGNvbm5lY3Rpb24gaXMgY2xvc2VkLiAgY2tjbWFp LmMsIDExIE1hciAyMDA0LgorCitBZGRlZCBGcmVlQlNEIDQuOSBhbmQgNS4xIHRhcmdldHMgKG9u bHkgdGhlIGhlcmFsZCBpcyBhZmZlY3RlZCkuCittYWtlZmlsZSwgY2t1dmVyLmgsIDExIE1hciAy MDA0LgorCitBZGRlZCAiTElCUz0tbGNyeXB0IiB0byBic2Q0NCB0YXJnZXRzIHNpbmNlIG5vd2Fk YXlzIGNyeXB0IGlzIGFsbW9zdCBhbHdheXMKK3VuYnVuZGxlZCBmcm9tIGxpYmMuICBBbHNvIGFk ZGVkIGV4cGxhbmF0b3J5IG5vdGVzLiAgbWFrZWZpbGUsIDExIE1hciAyMDA0LgorCitDaGFuZ2Vk IE1BTkRJUiB0byBkZWZhdWx0IHRvICQobWFucm9vdCkvbWFuL21hbjEsIGFuZCBtYW5yb290IHRv IGRlZmF1bHQKK3RvICQocHJlZml4KS4gIE1vcmUgYWRkaW5nIG9mIENDPSQoQ0MpIGNsYXVzZXM6 IHtGcmVlLE5ldCxPcGVufUJTRCwgNC40QlNELgorbWFrZWZpbGUsIDExIE1hciAyMDA0LgorCitN aXNjZWxsYW5lb3VzIGNsZWFudXBzOiBja3V1c3guYywgY2tjbmV0LmMsIGNrdWZpby5jLCAxMSBN YXIgMjAwNC4KKworQ29ycmVjdGVkIHRoZSBjaGVjayBpbiB0aGUgbGludXggdGFyZ2V0IHRvIHNl ZSBpZiAvdXNyL2luY2x1ZGUvY3J5cHQuaAorZXhpc3RzLCBhbmQgaWYgc28gdG8gZGVmaW5lIEhB VkVfQ1JZUFRfSCwgd2hpY2ggaXMgdXNlZCBpbiBja2NkZWIuaCB0bworI2luY2x1ZGUgPGNyeXB0 Lmg+IHRvIGdldCB0aGUgcHJvdG90eXBlIGZvciBjcnlwdCgpIGFuZCBwcmV2ZW50IGJvZ3VzCitj b252ZXJzaW9ucyBvbiBpdHMgcmV0dXJuIHR5cGUgb24gNjQtYml0IHBsYXRmb3JtcyAodGhlIHBy ZXZpb3VzIHRlc3Qgd2Fzbid0CitxdWl0ZSByaWdodCBhbmQgdGhlIHJlc3VsdGluZyBzeW1ib2wg d2Fzbid0IHNwZWxsZWQgcmlnaHQpLiAgbWFrZWZpbGUsCisxMiBNYXIgMjAwNC4KKworRnJvbSBK ZWZmLCAxNCBNYXIgMjAwNDoKKyAuIEluaXRpYWxpemUgbG9jYWx1aWRidWZbXSBpbiB0bl9zbmVu digpOiBja2N0ZWwuYy4KKyAuIFJlbW92ZSByZW1vdGUtbW9kZSBjaGVja3MgaW4gaHVwb2soKSBm b3IgSzk1RyBvbmx5ICh3aHk/KTogY2t1dXMzLmMuCisgLiBBZGQgaGVscCB0ZXh0IGZvciBuZXcg Szk1LW9ubHkgVFlQRSAvR1VJIHN3aXRjaGVzOiBja3V1czIuYy4KKyAuIFRZUEUgL0dVSSBwYXJz aW5nLCAuLi46IGNrdXVzci5jLgorIC4gVFlQRSAvR1VJIGFjdGlvbiwgZG90eXBlKCk6IGNrdXVz Ni5jCisgLiBDaGFuZ2UgSmVmZidzIGFmZmlsaWF0aW9uOiBtb3N0IG1vZHVsZXMuCisKKzIwIE1h ciAyMDA0OiBMb29rZWQgaW50byBhZGRpbmcgbG9uZyBmaWxlIHN1cHBvcnQsIGkuZS4gaGFuZGxp bmcgZmlsZXMgbW9yZQordGhhbiAyR0IgKG9yIDRHQikgbG9uZy4gIERpc2NvdmVyZWQgdmVyeSBx dWlja2x5IHRoaXMgd291bGQgYmUgYSBtYWpvcgorcHJvamVjdC4gIEVhY2ggcGxhdGZvcm0gaGFz IGEgZGlmZmVyZW50IEFQSSwgb3IgZW52aXJvbm1lbnQsIG9yIHRyYW5zaXRpb24KK3BsYW4sIG9y IHdoYXRldmVyIC0tIGEgbmlnaHRtYXJlIHRvIGhhbmRsZSBpbiBwb3J0YWJsZSBjb2RlLiAgQXQg dGhlIHZlcnkKK2xlYXN0IHdlJ2xsIG5lZWQgdG8gY29udmVydCBhIGxvdCBvZiBLZXJtaXQgdmFy aWFibGVzIGZyb20gbG9uZyBvciB1bnNpZ25lZAorbG9uZyB0byBzb21lIG5ldyBLZXJtaXQgdHlw ZSwgd2hpY2ggaW4gdHVybiBpcyAjZGVmaW5lZCBvciB0eXBlZGVmJ2QKK2FwcHJvcHJpYXRlbHkg Zm9yIGVhY2ggcGxhdGZvcm0gKHRvIG9mZl90IG9yIHNpemVfdCBvciB3aGF0ZXZlcikuICBUaGVu IHdlCitoYXZlIHRvIHdvcnJ5IGFib3V0IHRoZSBkZXRhaWxzIG9mIG9wZW4oKSB2cyBmb3Blbigp OyBwcmludGYoKSBmb3JtYXRzICglbGxkCit2cyAlTGQgdnMgJSJQUklkNjQiLi4uKSwgcGxhdGZv cm1zIGxpa2UgSFAtVVggd2hlcmUgeW91IG1pZ2h0IGhhdmUgdG8gdXNlCitkaWZmZXJlbnQgQVBJ cyBmb3IgZGlmZmVyZW50IGZpbGUgc3lzdGVtcyBvbiB0aGUgc2FtZSBjb21wdXRlciwgZXRjLiAg V2UnbGwKK25lZWQgdG8gY29uZnJvbnQgdGhpcyBzb29uLCBidXQgbGV0J3MgZ2V0IGEgZ29vZCBz dGFibGUgOC4wLjIxMSByZWxlYXNlIG91dAorZmlyc3QhICBNZWFud2hpbGUsIGZvciBmdXR1cmUg cmVmZXJlbmNlLCBoZXJlIGFyZSBhIGZldyBhcnRpY2xlczoKKworR2VuZXJhbDogaHR0cDovL2Zy ZXNobWVhdC5uZXQvYXJ0aWNsZXMvdmlldy83MDkvCitMaW51eDogICBodHRwOi8vd3d3LmVjZS51 dGV4YXMuZWR1L35sdW8vbGludXhfbGZzLmh0bWwKK0hQLVVYOiAgIGh0dHA6Ly9kZXZyc3JjMS5l eHRlcm5hbC5ocC5jb20vU1RLL3BhcnRuZXIvbGdfZmlsZXMucGRmCitTb2xhcmlzOiBodHRwOi8v d3d3cy5zdW4uY29tL3NvZnR3YXJlL3doaXRlcGFwZXJzL3dwLWxhcmdlZmlsZXMvbGFyZ2VmaWxl cy5wZGYKKworTG9va2VkIGludG8gRlRQIHRpbWVvdXRzLiAgSXQgYXBwZWFycyBJIGNhbiBqdXN0 IGNhbGwgZW1wdHkoKSAod2hpY2ggaXMKK25vdGhpbmcgbW9yZSB0aGFuIGEgZnJvbnQgZW5kIGZv ciBzZWxlY3QoKSkgd2l0aCB0aGUgZGVzaXJlZCB0aW1lb3V0IGJlZm9yZQorYW55IGtpbmQgb2Yg bmV0d29yayByZWFkLiAgSWYgaXQgcmV0dXJucyA8PSAwLCB3ZSBoYXZlIGEgdGltZW91dC4gIFRo aXMgaXMKK25vdCBxdWl0ZSB0aGUgc2FtZSBhcyB1c2luZyBhbGFybSgpIC8gc2lnbmFsKCkgYXJv dW5kIGEgcmVjdigpICh3aGljaCBjb3VsZAorZ2V0IHN0dWNrKSBidXQgYWxhcm0oKSAvIHNpZ25h bCgpIGFyZSBub3Qgbm90IHVzZWQgaW4gdGhlIEZUUCBtb2R1bGUgYW5kIGFyZQorbm90IG5hdHVy YWxseSBwb3J0YWJsZSB0byBXaW5kb3dzLCBidXQgc2VsZWN0KCkgaXMgYWxyZWFkeSBpbiB1c2Ug aW4gdGhlIEZUUAorbW9kdWxlIGZvciBib3RoIFVuaXggYW5kIFdpbmRvd3MuICBUaGlzIGZvcm0g b2YgdGltZW91dCBjb3VsZCBiZSB1c2VkCitwb3J0YWJseSBmb3IgYm90aCBjb21tYW5kIHJlc3Bv bnNlIGFuZCBkYXRhIHJlYWRzLiAgV2hhdCBhYm91dCB3cml0ZXMgdG8gdGhlCitjb21tYW5kIG9y IGRhdGEgc29ja2V0PyAgVGhleSBjYW4gZ2V0IHN0dWNrIGZvciBob3VycyBhbmQgaG91cnMgd2l0 aG91dAorcmV0dXJuaW5nIHRvbywgYnV0IHRoZSBzZWxlY3QoKSBhcHByb2FjaCB3b24ndCBoZWxw IGhlcmUgLS0gd2UgbmVlZCB0aGUKK2FjdHVhbCBzZW5kKCkgb3IgcmVjdigpIHRvIHRpbWUgb3V0 LCBvciBiZSB3cmFwcGVkIGluIGFuIGFsYXJtKCkvc2lnbmFsKCkKK2tpbmQgb2YgbWVjaGFuaXNt LiAgQnV0IGlmIHdlIGNhbiBkbyB0aGF0IGZvciBzZW5kcywgd2UgY2FuIGFsc28gZG8gaXQgZm9y CityZWNlaXZlcy4gIEJldHRlciBjaGVjayB3aXRoIEplZmYgYmVmb3JlIEkgc3RhcnQgcHJvZ3Jh bW1pbmcgYW55dGhpbmcuCisyMCBNYXIgMjAwNC4KKworTGF0ZXI6IERlY2lkZWQgdG8gcG9zdHBv bmUgdGhlIGFib3ZlIHR3byBwcm9qZWN0cyAoZGl0dG8gSVB2NikgdW50aWwgYWZ0ZXIKKzguMC4y MTEgaXMgcmVsZWFzZWQgYmVjYXVzZSBib3RoIHdpbGwgaGF2ZSBtYWpvciBpbXBhY3RzIG9uIHBv cnRhYmlsaXR5LgorR3J1bWJsZTogYWxsIGkvbyBBUElzIHNob3VsZCBoYXZlIGJlZW4gZGVzaWdu ZWQgZnJvbSB0aGUgYmVnaW5uaW5nIHdpdGggYQordGltZW91dCBwYXJhbWV0ZXIuICBUbyB0aGlz IGRheSwgaGFyZGx5IGFueSBoYXZlIHRoaXMgZmVhdHVyZS4KKworMy00IEFwciAyMDA0OiBNb3Jl IDguMC4yMTEgQmV0YS4wMisgdGVzdCBidWlsZHM6CisKKyAuIEZyZWVCU0QgMy4zCisgLiBGcmVl QlNEIDQuNAorIC4gTGludXggRGViaWFuIDIuMQorIC4gTGludXggUkggNi4xCisgLiBMaW51eCBS SCA3LjEKKyAuIExpbnV4IFJIIDcuMgorIC4gTGludXggUkggOSAod2l0aCA4NCBkaWZmZXJlbnQg Y29tYmluYXRpb25zIG9mIGZlYXR1cmUgc2VsZWN0aW9uKQorIC4gTGludXggU3VTRSA2LjQKKyAu IExpbnV4IFN1U0UgNy4wCisgLiBOZXRCU0QgMS40LjEKKyAuIE5ldEJTRCAxLjUuMgorIC4gT3Bl bkJTRCAyLjUKKyAuIE9wZW5CU0QgMy4wCisgLiBRTlggNC4yNQorIC4gU0NPIFVuaXhXYXJlIDIu MS4zCisgLiBTQ08gVW5peFdhcmUgNy4xLjQKKyAuIFNDTyBPcGVuU2VydmVyIDUuMC43CisgLiBT Q08gWEVOSVggMi4zLjQgKG5vIFRDUCkKKworQ2hhbmdlcyBuZWVkZWQ6IE5vbmUuCisKK1Byb2Js ZW06IFNDTyBYRU5JWCAyLjMuNCBuZXR3b3JrIGJ1aWxkIGZhaWxlZCBpbiB0aGUgRlRQIG1vZHVs ZSB3aXRoCitoZWFkZXItZmlsZSBzeW50YXggYW5kIGNvbmZsaWN0aW5nLWRlZmluaXRpb25zIHRy b3VibGUuICBJJ20gbm90IGdvaW5nIHRvCit0cnkgdG8gZml4IGl0OyA4LjAuMjA5IGJ1aWx0IE9L IHdpdGggRlRQLCBzbyB3ZSdsbCBqdXN0IGtlZXAgdGhhdCBvbmUKK2F2YWlsYWJsZS4KKworR290 IGFjY2VzcyB0byBWTVMgOC4xIG9uIElBNjQuICBCdWlsZGluZyB0aGUgbm9uZXQgdmVyc2lvbiBv ZiBDLUtlcm1pdAorcmVxdWlyZWQgbWlub3IgbW9kaWZpY2F0aW9ucyB0byBja3Z2bXMuaCwgY2t2 W2Z0XWlvLmMsIGFuZCBja3Zjb24uYywgdG8KK2FjY291bnQgZm9yIGEgdGhpcmQgYXJjaGl0ZWN0 dXJlLiAgQWxzbyB0byBTSE9XIEZFQVRVUkVTIGluIGNrdXVzNS5jLiAgT25jZQordGhhdCB3YXMg ZG9uZSwgdGhlIFVDWCA1LjUgdmVyc2lvbiBidWlsdCBPSyB0b28uICBTdGFydHMgT0ssIG1ha2Vz IFRlbG5ldAorY29ubmVjdGlvbiBPSywgc2VuZHMgZmlsZXMuICBIYXMgc29tZSBvYnZpb3VzIGds aXRjaGVzIHRob3VnaCAtLSAic3RhdCIKK2FmdGVyIGEgZmlsZSB0cmFuc2ZlciByZXBvcnRzIDAg ZWxhcHNlZCB0aW1lIChpbiBmYWN0IGl0IHdhcyAwMDowOTo0OCkgYW5kCisxMjE5MTc0NDAwIGNw cyAod2hlbiBpbiBmYWN0IGl0IHdhcyAxMDM2NCkuICBUaGlzIGRvZXNuJ3QgaGFwcGVuIG9uIHRo ZQorQWxwaGEuICBCdHcsIHRoZSBJQTY0IGJpbmFyeSBpcyB0d2ljZSBhcyBiaWcgYXMgdGhlIEFs cGhhIG9uZS4gIENoYW5nZWQKK3RvIEJldGEuMDMuICA1IEFwciAyMDA0LgorCitGaXhlZCB0aGUg Y2tkYWlseSBzY3JpcHQgdG8gaW5jbHVkZSB0aGUgbWFrZWZpbGUgYW5kIG1hbiBwYWdlIGluIHRo ZSBaaXAKK2ZpbGUgKHRoZXkgd2VyZSBub3QgaW5jbHVkZWQgYmVjYXVzZSB0aGUgWmlwIGZpbGUg d2FzIGludGVuZGVkIG1haW5seSBmb3IKK1ZNUyB1c2VycywgYnV0IHNvbWUgVW5peCB1c2VycyBw cmVmZXIgWmlwIHRvIHRhci5neikuICA2IEFwciAyMDA0LgorCitUcmFjZWQgcHJvYmxlbXMgaW4g Vk1TL0lBNjQgc3RhdGlzdGljcyByZXBvcnQgdG8gcmZ0aW1lcigpL2dmdGltZXIoKSBpbgorY2t2 dGlvLmMsIHdoaWNoIHVzZSBzeXMkIGFuZCBsaWIkIGNhbGxzIHRvIGZpZ3VyZSBlbGFwc2VkIHRp bWUuICBUaGVzZSB3b3JrCitvbiBWQVggYW5kIEFscGhhIGJ1dCBub3QgSUE2NC4gIFNlbnQgYSBy ZXBvcnQgdG8gdGhlIGNoaWVmIGVuZ2luZWVyIG9mIHRoZQorSUE2NCBWTVMgcG9ydDsgaGUgc2F5 cyBpdCdzIHByb2JhYmx5IGEgYnVnIGluIFZNUyA4LjEgKHdoaWNoIGlzIG5vdCBhIHJlYWwKK3Jl bGVhc2UpOyBoZSdsbCBtYWtlIHN1cmUgaXQncyBmaXhlZCBpbiA4LjIuICBBcyBhbiBleHBlcmlt ZW50LCB0cmllZAorc3dhcHBpbmcgaW4gdGhlIFVuaXggdmVyc2lvbnMgb2YgdGhlc2Ugcm91dGlu ZXMgKHdoaWNoIGNhbGwgZ2V0dGltZW9mZGF5KCkKK2V0YykuICBUaGV5IHNlZW0gd29yayBqdXN0 IGZpbmUgKGl0IGh1bmcgYSBjb3VwbGUgdGltZXMgYnV0IEkgdGhpbmsgdGhhdCdzCitiZWNhdXNl IHRoZSB1bmRlcmx5aW5nIHN5c3RlbSBodW5nIHRvbzsgdHJ5aW5nIGl0IGxhdGVyIG9uIGEgbmV3 IGNvbm5lY3Rpb24sCitpdCB3YXMgZmluZTsgaG93ZXZlciBJIG5vdGljZWQgYSBCSUcgZGlzY3Jl cGFuY3kgaW4gdGhyb3VnaHB1dCBiZXR3ZWVuCitzZW5kaW5nIGFuZCByZWNlaXZpbmcpLiAgTW92 ZWQgZGVmaW5pdGlvbnMgZm9yIFZNUzY0QklUIGFuZCBWTVNJNjQgdG8KK2NrY2RlYi5oIHNvIGFs bCBtb2R1bGVzIGNhbiB1c2UgdGhlbSBhbmQgYWRkZWQgdGhlbSB0byB0aGUgU0hPVyBGRUFUVVJF UworZGlzcGxheS4gIEFkZGVkIFZNU1Y4MCBkZWZpbml0aW9uIHRvIGJ1aWxkIHByb2NlZHVyZS4g IEJldGEuMDMrLiAgY2tjZGViLmgsCitja2N1dXM1LmMsIGNrY3Z2bXMuaCwgY2t2dGlvLmMsIGNr dmtlci5jb20sIDYgQXByIDIwMDQuCisKK1doaWxlIGRvaW5nIHRoZSBidWlsZC1hbGwsIEkgbm90 aWNlZCB0aGUgVk1TIHZlcnNpb24gZGlkIG5vdCBidWlsZCB3aXRoCitNdWx0aW5ldCBvciBvbGRl ciBVQ1ggdmVyc2lvbnMsIGFsd2F5cyB3aXRoIHRoZSBzYW1lIGVycm9ycyAtLSB1bmRlY2xhcmVk Cit2YXJpYWJsZXMsIHVuZGVmaW5lZCBzeW1ib2xzLCBhbGwgVENQL0lQIHJlbGF0ZWQuICBUaGlz IGRpZG4ndCBoYXBwZW4gYQorY291cGxlIHdlZWtzIGFnby4uLiAgU29tZWhvdyB0aGUgb3JkZXIg b2YgI2luY2x1ZGVzIHdhcyBtZXNzZWQgdXAgLS0KK2NrdXVzci5oIGRlcGVuZGVkIG9uIHN5bWJv bHMgdGhhdCBhcmUgZGVmaW5lZCBpbiBja2NuZXQuaCwgYnV0IGNrY25ldC5oCit3YXMgYmVpbmcg aW5jbHVkZWQgYWZ0ZXIgY2t1dXNyLmguLi4gIHRoaXMgd2FzIGNvbXBvdW5kZWQgYnkgdHdvIG1p c3NpbmcKK2NvbW1hcyBpbiBja3ZrZXIuY29tLiAgMTEgQXByIDIwMDQuCisKK1JlbW92ZWQgQmV0 YSBkZXNpZ25hdGlvbiwgcmVsZWFzZWQgYXMgOC4wLjIxMSwgMTAgQXByIDIwMDQuCisKK0kgaGFk IHNvbWVob3cgbG9zdCB0aGUgZWRpdCB0byBja3V0aW8uYyB0aGF0IGNoYW5nZWQgdGhlIFVVQ1Ag bG9ja2ZpbGUgZm9yCitNYWMgT1MgWCBmcm9tIC92YXIvc3Bvb2wvdXVjcCB0byAvdmFyL3Nwb29s L2xvY2suICBTbyBJIHNsaXBwZWQgaXQgaW4gYW5kCityZS11cGxvYWRlZCB2ZXJzaW9uIDguMC4y MTEuICBZb3UgY2FuIHRlbGwgdGhlIGRpZmZlcmVuY2UgYmVjYXVzZSBTSE9XCitWRVJTSU9OUyBo YXMgMTcgQXByIDIwMDQgZm9yIHRoZSBDb21tdW5pY2F0aW9ucyBJL08gbW9kdWxlLiAgQWxzbyB0 aGUgMTAuMworZXhlY3V0YWJsZSBub3cgaGFzIGEgZGVzaWduZXIgYmFubmVyOiAiTWFjIE9TIFgg MTAuMyIuICBtYWtlZmlsZSwgY2t1dmVyLmgsCitja3V0aW8uYywgY2t1dXNbNDVdLmMsIDE3IEFw ciAyMDA0LgorCistLS04LjAuMjExLS0tCisKK1JlbW92ZWQgIndlcm1pdCIgZnJvbSAibWFrZSBj bGVhbiIgKGhvdyBkaWQgaXQgZ2V0IHRoZXJlPykuICBtYWtlZmlsZS4KKworRnJvbSBKZWZmLCBh cHBsaWVkIDEwIE1heSAyMDA0LgorIC4gUmVhcnJhbmdlICNpZmRlZnMgdGhhdCBkZWZpbmUgT1Mv Mi1vbmx5IGZlYXR1cmVzLiBja2NkZWIuaC4KKyAuIEZpeCB0d28gc3RybmNhdCgpcyB0aGF0IHNo b3VsZCBoYXZlIGJlZW4gY2tzdHJuY2F0KClzLiAgY2t1dXM3LmMuCisgLiBGaXggdHdvIHN0cm5j YXQoKXMgdGhhdCBzaG91bGQgaGF2ZSBiZWVuIGNrc3RybmNhdCgpcy4gIGNrdXVzNC5jLgorIC4g Rml4IG9uZSBzdHJuY2F0KCkuIGNrY2Zucy5jLgorIC4gU0VUIEZUUCBDSEFSIE9OIHVzZWQgYmFj a3dhcmRzIGJ5dGUgb3JkZXIgd2hlbiBvdXRwdXQgdG8gc2NyZWVuLiAgY2tjZm5zLmMuCisgLiBG aXggdHdvIHN0cm5jYXQoKXMuICBja3V1czMuYy4KKyAuIEFkZCBTRVQgTkVUV09SSyBUWVBFIE5B TUVELVBJUEUgZm9yIEs5NS4gIGNrdXVzMy5jLgorIC4gQWRkICJObyBhY3RpdmUgY29ubmVjdGlv bnMiIG1lc3NhZ2UgdG8gaHVwb2soKS4gIGNrdXVzMy5jLgorIC4gRml4IG1hbnkgc3RybmNhdCgp cy4gIGNrY25ldC5jLgorIC4gRml4IHNvbWUgc3RybmNhdCgpcy4gIGNrY2Z0cC5jCisgLiBNYWtl IEZUUCBwb3J0IHVuc2lnbmVkIHNob3J0IGZvciAxNjM4MyA8IHBvcnQgPCA2NTUzNi4gIGNrY2Z0 cC5jLgorIC4gSW1wcm92ZW1lbnRzIHRvIEZUUCBVU0VSIGNvbW1hbmQuICBja2NmdHAuYy4KKyAu IEZpeCBGRUFUIHBhcnNpbmcgdG8gYWxsb3cgZm9yIHZhcmlvdXMgZm9ybXMgb2Ygd2hpdGVzcGFj ZS4gIGNrY2Z0cC5jLgorCitTLUV4cHJlc3Npb24gKEFORCBGT08gQkFSKSB3b3VsZCBub3Qgc2hv cnQtY2lyY3VpdCBpZiBGT08ncyB2YWx1ZSB3YXMgMCwKK2V2ZW4gdGhvdWdoIHNob3J0LWNpcmN1 aXRpbmcgY29kZSBoYXMgYmVlbiB0aGVyZSBzaW5jZSBEYXkgMS4gIFNpbWlsYXJseSBmb3IKKyhP UiBCQVIgRk9PKS4gIFR1cm5zIG91dCB0aGUgZmlyc3Qgb3BlcmFuZCB3YXMgYSBzcGVjaWFsIGNh c2UgdGhhdCBieXBhc3NlZAordGhlIHNob3J0LWNpcmN1aXQgY2hlY2suICBGaXhlZCBpbiBkb3Nl eHAoKTogY2t1dXMzLmMsIDEwIE1heSAyMDA0LgorCitSZWQgSGF0IDcuMyAoYW5kIG1heWJlIG90 aGVycykgPGJhdWRib3kuaD4gcmVmZXJlbmNlZCBvcGVuKCkgd2l0aG91dCBmaXJzdAorZW5zdXJp bmcgaXQgd2FzIGRlY2xhcmVkLiAgVGhlIGRlY2xhcmF0aW9uIGlzIGluIDxmY250bC5oPiwgd2hp Y2ggaXMgYWZ0ZXIKKzxiYXVkYm95Lmg+IGluIGNrdXRpby5jIHNlcmllcyBvZiAjaW5jbHVkZXMu ICBNYWRlIGEgc3BlY2lhbCBjYXNlIGZvciB0aGlzLgorY2t1dGlvLmMgKHNlZSBjb21tZW50cyks IDEwIE1heSAyMDA0LgorCitJZiB0aGUgbG9jYWwgS2VybWl0J3MgcGFyaXR5IGlzIHNldCB0byBT UEFDRSBhbmQgdGhlbiBhIGZpbGUgYXJyaXZlcyB2aWEKK2F1dG9kb3dubG9hZCwgYXV0b21hdGlj IHBhcml0eSBkZXRlY3Rpb24gaW1wcm9wZXJseSBzd2l0Y2hlcyBpdCB0byBOT05FLgorRml4ZWQg aW4gcnBhY2soKSBieSBzd2l0Y2hpbmcgcGFyaXR5IGF1dG9tYXRpY2FsbHkgb25seSBpZiBwYXJj aGsoKSByZXR1cm5zCis+IDAgKHJhdGhlciB0aGFuID4gLTEpLCBzaW5jZSBOT05FIGFuZCBTUEFD RSBhcmUgaW5kaXN0aW5ndWlzaGFibGUuICBBCitiaWdnZXIgcHJvYmxlbSBzdGlsbCByZW1haW5z OiBhdXRvZG93bmxvYWQgZG9lcyBub3Qgd29yayBhdCBhbGwgaWYgdGhlCitzZW5kZXIgaXMgdXNp bmcgYWN0dWFsIHBhcml0eSBiaXRzIChldmVuLCBvZGQsIG9yIG1hcmspIGFuZCB0aGUgcmVjZWl2 ZXIncworcGFyaXR5IGlzIE5PTkUuICBja2NmbjIuYywgMTAgTWF5IDIwMDQuCisKK1doZW4gYSBE SUFMIE1BQ1JPIGlzIGRlZmluZWQgYW5kIHRoZSBwaG9uZSBudW1iZXIgaXMgY29tcHJpc2VkIG9m IG1vcmUgdGhhbgorb25lICJ3b3JkIiAoaS5lLiBjb250YWlucyBzcGFjZXMpLCB0aGUgZGlhbCBt YWNybyBsb3NlcyB0aGUgc2Vjb25kIGFuZAorc3Vic2VxdWVudCB3b3JkcyBhZnRlciB0aGUgZmly c3QgY2FsbC4gRml4ZWQgaW4geGRpYWwoKSBieSBpbnNlcnRpbmcgcXVvdGVzCithcm91bmQgcGhv bmUgbnVtYmVyIGJlZm9yZSBwYXNzaW5nIGl0IHRvIHhkaWFsKCkuIGNrdXVzNi5jLCAxMCBNYXkg MjAwNC4KKworRElBTCBNQUNSTyBmaXggd2FzIG5vdCByaWdodDsgdGhlIHF1b3RlcyB3ZXJlIGtl cHQgYXMgcGFydCBvZiB0aGUgcGhvbmUKK251bWJlciBhbmQgc2VudCB0byB0aGUgbW9kZW0uICBk b2RvKCkgcG9rZXMgaXRzIGFyZ3VtZW50IHRvIHNlcGFyYXRlIHRoZQorbWFjcm8gYXJndW1lbnQg c3RyaW5nIGludG8gaXRzIGNvbXBvbmVudCBhcmd1bWVudHMuICB4ZGlhbCgpIGlzIGNhbGxlZAor cmVwZWF0ZWRseSBvbiB0aGUgc2FtZSBzdHJpbmcsIHNvIGFmdGVyIHRoZSBmaXJzdCB0aW1lLCBh IE5VTCBoYXMgYmVlbgorZGVwb3NpdGVkIGFmdGVyIHRoZSBmaXJzdCB3b3JkIG9mIHRoZSB0ZWxl cGhvbmUgbnVtYmVyLiAgVGhlIGZpeCBpcyB0byBoYXZlCit4ZGlhbCgpIGNyZWF0ZSBhIHBva2Vh YmxlIGNvcHkgb2YgaXRzIGFyZ3VtZW50IHN0cmluZyBiZWZvcmUgY2FsbGluZworZG9kbyhkaWFs LW1hY3JvLGFyZ3MuLi4pLiAgSXQgbWlnaHQgc2VlbSBvZGQgdGhhdCBkb2RvIHBva2VzIGl0cyBh cmd1bWVudCwKK2J1dCBtYWtpbmcgY29waWVzIHdvdWxkIGJlIHdvdWxkIGJlIHByb2hpYml0aXZl IGluIHNwYWNlIGFuZCB0aW1lLgorY2t1dXM2LmMsIDIzIE1heSAyMDA0LgorCitGVFAgQ0QgZGlk IG5vdCBzdHJpcCBicmFjZXMgb3IgcXVvdGVzIGZyb20gYXJvdW5kIGl0cyBhcmd1bWVudC4gIEZp eGVkIGluCitkb2Z0cHJtdCgpOiBja2NmdHAuYywgMjMgTWF5IDIwMDQuCisKK0FkZGVkIGNsaWVu dCBzaWRlIG9mIFJFTU9URSBNRVNTQUdFL1JNRVNTQUdFL1JNU0c6IGNrdXVzW3IyN10uYywgMjMg TWF5IDIwMDQuCisKK1NlcnZlciBzaWRlIG9mIFJFTU9URSBNRVNTQUdFOiBja2Nwcm8udywgMjMg TWF5IDIwMDQuCisKK0Zyb20gRGF2ZSBTbmVkZG9uOiBhbiB1cGRhdGVkIENLVktFUi5DT00gY29u dGFpbmluZyBhIGZpeCB3aGVyZSB0aGUKK0NPTVBBUV9TU0wgc3ltYm9sIHdhcyBub3QgZGVmaW5l ZCBidXQgbGF0ZXIgcmVmZXJlbmNlZCB3aGljaCBnZW5lcmF0ZWQgYW4KK3VuZGVmaW5lZCBzeW1i b2wgZXJyb3IuICBja3ZrZXIuY29tLCA1IEphbiAyMDA1LgorCitGcm9tIEFuZHkgVGFuZW5iYXVt ICgyOCBNYXkgMjAwNSk6CisgLiBGaXggYW4gZXJyYW50IHByb3RvdHlwZSBpbiBja2NrZXIuaCBh bmQgY2t1Y21kLmggLSAoKSBpbnN0ZWFkIG9mICh2b2lkKS4KKyAuIEFkZCBzdXBwb3J0IGZvciBN SU5JWCAzLjAuICBtYWtlZmlsZSwgY2t1dGlvLmMsIGNrdWZpby5jLCBja3V2ZXIuaC4KKworRml4 ZWQgbWVzc2VkLXVwIHNuZGhscCgpIGNhbGwgd2hpY2ggYXBwYXJlbnRseSBoYWQgYmVlbiBqaWdn ZXJlZCB0bworY29tcGVuc2F0ZSBmb3IgdGhlIGJhZCBwcm90b3R5cGUgd2hpY2ggaGFzIG5vdyBi ZWVuIGZpeGVkLCBja2Nwcm8udywKKzEyIEp1biAyMDA1LgorCitGcm9tIEplZmYgKDEyIEp1bmUg MjAwNSk6CisgLiBTZWN1cml0eSB1cGRhdGVzLiAgY2tfc3NsLmMsIGNrX2NycC5jLCBja3VhdGgu Yy4KKyAuIEZpeCBidWcgaW4gSzk1IFNFVCBQUklOVEVSIENIQVJBQ1RFUi1TRVQuIGNrdXVzMy5j LgorIC4gQWRkIHByaW50ZXIgY2hhcmFjdGVyLXNldCB0byBLOTUgU0hPVyBQUklOVEVSIGRpc3Bs YXkuIGNrdXVzNSxjCisgLiBBZGQgU0VUIE1TS0VSTUlUIEZJTEUtUkVOQU1JTkcgdG8gSzk1LiBj a3V1czcuYywgY2t1dXNyLmguCisgLiBBZGQgaGVscCBmb3IgSzk1IFNFVCBNU0tFUk1JVC4gIGNr dXVzMi5jLgorIC4gQWRkIFNFVCBHVUkgQ0xPU0UgdG8gSzk1LiAgY2t1dXNyLmgsIGNrdXVzMi5j LCBja3V1czMuYworIC4gQWRkIGhlbHAgdGV4dCBmb3IgSzk1IFNFVCBHVUkgTUVOVUJBUiBhbmQg VE9PTEJBUi4gIGNrdXVzMi5jLgorIC4gQWRkIC0tbm9jbG9zZSBjb21tYW5kLWxpbmUgb3B0aW9u IGZvciBLOTUuICBja3V1c3kuYworIC4gQWRkIFBBTSBzdXBwb3J0IGZvciBNYWMgT1MgWC4gIGNr dWZpby5jLgorIC4gQWRkIEdTU0FQSSBzdXBwb3J0IGZvciBNYWMgT1MgWC4gIGNrY2Z0cC5jLgor IC4gUGljayB1cCBtb3JlIFVSTCBvcHRpb25zLiAgY2tja2VyLmgsIGNrdXVzeS5jLgorIC4gRml4 IGJ1ZyBpbiBkZWx0YS10aW1lIGNhbGN1bGF0aW9uIGFjcm9zcyB5ZWFyIGJvdW5kYXJ5LiAgY2t1 Y21kLmMuCisgLiBBZGQgU2VjdXJlIEVuZHBvaW50cyB0byBjb3B5cmlnaHQgbm90aWNlcy4gIGNr Y21haS5jLgorIC4gRml4IEZUUCBIRUxQIHRvIG92ZXJyaWRlIHVudmVyYm9zZSBzZXR0aW5nLiAg Y2tjZnRwLmMuCisgLiBGaXggYXNzb3J0ZWQgbWlub3IgdHlwb3MuCisKK0Zyb20gTWF0dGhpYXMg S3VyejogYXV0b21hdGljIGhlcmFsZCBnZW5lcmF0aW9uIGZvciBOZXRCU0QgMi4wIGFuZCBsYXRl ciwKKyJtYWtlIG5ldGJzZDIiLiAgY2t1dmVyLmgsIG1ha2VmaWxlLCAxMiBKdW4gMjAwNS4KKwor QWRkZWQgU0VUIFRFUk1JTkFMIExGLURJU1BMQVksIGxpa2UgQ1ItRElTUExBWSBidXQgZm9yIGxp bmVmZWVkIHJhdGhlciB0aGFuCitjYXJyaWFnZSByZXR1cm4uICBja3V1c3IuaCwgY2t1dXNbMjU3 eF0uYywgMTIgSnVuIDIwMDUuCisKK01hZGUgYSBjb21tYW5kLWxpbmUgb3B0aW9uIC0tdW5idWZm ZXJlZCB0byBkbyB3aGF0IHRoZSAtRE5PTk9TRVRCVUYKK2NvbXBpbGUtdGltZSBvcHRpb24gZG9l cywgaS5lLiBmb3JjZSB1bmJ1ZmZlcmVkIGNvbnNvbGUgaS9vLiAgVW5peCBvbmx5LgorY2t1dXNy LmgsIGNrdXVzeS5jLCBja3V0aW8uYywgMTIgSnVuIDIwMDUuCisKK0ZpeGVkIGdldGlhY3QoKSAo d2hpY2ggZGlzcGxheXMgVEVSTSBJRExFLUFDVElPTiBzZXR0aW5nKSB0byBkaXNwbGF5CitzcGFj ZSBhcyBcezMyfS4gIGNrdXVzNy5jLCAxMiBKdW4gMjAwNS4KKworQWRkZWQgTE1WIGFzIGEgc3lu b255bSBmb3IgTFJFTkFNRSwgd2hpY2ggaXMgaXRzZWxmIGEgc3lub255bSBmb3IgTE9DQUwKK1JF TkFNRS4gIGNrdXVzci5jLCAxMiBKdW4gMjAwNS4KKworUHV0IEhFTFAgU0VUIFRFUk1JTkFMIERH LVVOSVgtTU9ERSB0ZXh0IHdoZXJlIGl0IGJlbG9uZ2VkLiAgY2t1dXMyLmMsCisxMiBKdW4gMjAw NS4KKworQWRkZWQgSUYgTElOSyAoVW5peCBvbmx5KSB0byB0ZXN0IGlmIGEgZmlsZW5hbWUgaXMg YSBzeW1saW5rLiAgVXNlcyB0aGUgbW9zdAorc2ltcGxlbWluZGVkIHBvc3NpYmxlIG1ldGhvZCwg Y2FsbHMgcmVhZGxpbmsoKSB0byBzZWUgaWYgaXQgc3VjY2VlZHMgb3IgZmFpbHMuCitObyBvdGhl ciBtZXRob2QgaXMgZGVwZW5kYWJsZSBhY3Jvc3MgZGlmZmVyZW50IFVuaXhlcy4gIFRoaXMgY29k ZSBzaG91bGQgYmUKK3BvcnRhYmxlIGJlY2F1c2UgSSBhbHJlYWR5IHVzZSByZWFkbGluaygpIGVs c2V3aGVyZSB3aXRoaW4gZXhhY3RseSB0aGUgc2FtZQorI2lmZGVmcy4gIGNrdWZpby5jLCBja3V1 czIuYywgY2t1dXM2LmMsIDEyIEp1biAyMDA1LgorCitGaXhlZCBhIGJ1ZyBpbiB3aGljaCBcZmRp cigpIHdvdWxkbid0IHdvcmsgd2hlbiBpdHMgYXJndW1lbnQgd2FzIHRoZSBub253aWxkCituYW1l IG9mIGEgZGlyZWN0b3J5IGZpbGUuICB6eHBhbmQoKTogY2t1ZmlvLmMsIDEyIEp1biAyMDA1Lgor CitNYWRlIFxmZGlyZWN0b3J5KCkgYSBzeW5vbnltIGZvciBcZmRpcmVjdG9yaWVzKCkuICBNYWRl IFxmZGlyKCkgYW4KK2FjY2VwdGFibGUgYWJicmV2aWF0aW9uIGZvciB0aGVzZSwgZXZlbiB0aG91 Z2ggaXQgY2xhc2hlcyB3aXRoIFxmZGlybmFtZSgpLAord2hpY2ggc3RpbGwgd29ya3MgYXMgYmVm b3JlLiAgY2t1dXM0LmMsIDEyIEp1biAyMDA1LgorCitBZGRlZCB0aGUgbG9uZy1uZWVkZWQgXGZs b3B4KCkgZnVuY3Rpb24sIHRvIHJldHVybiByaWdodG1vc3QgcGllY2VzIG9mCitzdHJpbmdzLCBz dWNoIGFzIGZpbGUgZXh0ZW5zaW9ucy4gIFxmc3RyaXB4KCkgYW5kIFxmbG9weCgpIGFyZSB0aGUK K29ydGhvZ29uYWwgZnVuY3Rpb25zIHdlIG5lZWQgdG8gcGljayBmaWxlbmFtZXMgYXBhcnQgZnJv bSB0aGUgcmlnaHQ6Citcc3RyaXB4KGZvby50YXIuZ3opID0gZm9vLnRhcjsgZmxvcHgoZm9vLnRh ci5neikgPSBnei4gIGNrdXVzci5oLCBja3V1c3IuYywKK2NrdXVzMi5jLCAxMiBKdW4gMjAwNS4K KworUmVtb3ZlZCByZWZlcmVuY2UgdG8gZGVmdW5jdCBmYXggbnVtYmVyLCBja2NtYWkuYywgMTIg SnVuIDIwMDUuCisKK0FkZGVkIC1ESEFWRV9QVE1YIHRvIGxpbnV4K2tyYjUrb3BlbnNzbCt6bGli K3NoYWRvdytwYW0uICBGcm9tIFRpbW90aHkgRm9sa3MuCittYWtlZmlsZSwgMTIgSnVuIDIwMDUu CisKK0J1aWx0IG9uIFNvbGFyaXMgOSBhbmQgTmV0QlNEIDIuMC4KKworRnJvbSBKZWZmOiBOZXcg YnVpbGQgdGFyZ2V0IGZvciBNYWMgT1MgWCAxMC4zIHdpdGggS2VyYmVyb3MgNSBhbmQgU1NMLgor bWFrZWZpbGUsIDE0IEp1biAyMDA1LgorCitGaXhlZCBlcnJvciBpbiBja3V2ZXIuaCBOZXRCU0Qg I2lmZGVmcy4gIDE1IEp1biAyMDA1LgorCitGaXhlZCBTRVQgVEVSTUlOQUwgSURMRS1BQ1RJT04g T1VUUFVUIHRvIHdvcmsgYXMgZG9jdW1lbnRlZCwgbmFtZWx5IGlmIHRoZQorb3V0cHV0IHN0cmlu ZyBpcyBlbXB0eSwgdG8gc2VuZCBhIE5VTC4gIFByZXZpb3VzbHkgdGhlcmUgd2FzIG5vIHdheSB0 byBtYWtlCitpdCBzZW5kIGEgTlVMLiAgY2t1dXM3LmMsIDE1IEp1biAyMDA1LgorCitTdXBwb3Nl IChpbiBVbml4LCBmb3IgZXhhbXBsZSkgYSBmaWxlbmFtZSBjb250YWlucyB3aWxkY2FyZCBjaGFy YWN0ZXJzLCBzdWNoCithcyB7YWJjfS50eHQuICBXaGVuIHJlZmVycmluZyB0byBzdWNoIGEgZmls ZSAoZS5nLiBpbiBhIFNFTkQgY29tbWFuZCksIHRoZXNlCitjaGFyYWN0ZXJzIGNhbiBiZSBxdW90 ZWQsIGUuZy4gXHthYmNcfS50eHQuICBCdXQgaWYgdGhlIGZpbGUgbGlzdCBoYXMgYmVlbgorb2J0 YWluZWQgcHJvZ3JhbW1hdGljYWxseSwgZS5nLiBzdG9yZWQgaW4gYW4gYXJyYXksIHRoZXJlIGlz IG5vIHdheSwgc2hvcnQKK29mIHRlZGlvdXMsIGNvbXBsaWNhdGVkLCBhbmQgZXJyb3ItcHJvbmUg c3RyaW5nIHByb2Nlc3NpbmcsIHRvIHJlZmVyZW5jZSB0aGUKK2ZpbGUuICBGb3IgdGhpcyB3ZSBu ZWVkIGEgd2F5IHRvIGRpc2FibGUgd2lsZGNhcmQgcHJvY2Vzc2luZy4gIEkgYWRkZWQgeyBPTiwK K09GRiB9IGNob2ljZXMgZm9yIHRoZSBTRVQgV0lMRCBhbmQgU0hPVyBGSUxFIGNvbW1hbmRzOiBj a3V1c3IuaCwgY2t1dXNbMjM0XS5jLgoreyBPTiwgT0ZGIH0gdHVybnMgd2lsZGNhcmRpbmcgb2Zm IGFuZCBvbiB3aXRob3V0IGFmZmVjdGluZyB0aGUgeyBLRVJNSVQsCitTSEVMTCB9IGFnZW50IGNo b2ljZTsgaXQgZG9lcyB0aGlzIGJ5IHNldHRpbmcgYSBuZXcgYW5kIHNlcGFyYXRlIGdsb2JhbAor dmFyaWFibGUsIHdpbGRlbmEuICBBZGRlZCBzZW1hbnRpY3MgdG8gY2t1ZmlvLmMuICBDcnVkZSBi dXQgZWZmZWN0aXZlLiAgSXQKK21pZ2h0IGhhdmUgYmVlbiBtb3JlIFVuaXhsaWtlIHRvIGFkZCBZ ZXQgQW5vdGhlciBmb3JtIG9mIHF1b3RpbmcgYnV0IHdlCitoYXZlIGVub3VnaCBvZiB0aGF0IGFs cmVhZHkgKGxhdGVyIG1heWJlIEknbGwgYWRkIGEgXGZ1bmN0aW9uKCkgZm9yIHRoaXMpLgorTmVl ZHMgdG8gYmUgcHJvcGFnYXRlZCB0byBXaW5kb3dzIGFuZCBWTVMuICAxNSBKdW4gMjAwNS4KKwor SW1wcm92ZWQgYW5kIGZpeGVkIHR5cG9zIGluIEhFTFAgV0lMRENBUkQgYW5kIEhFTFAgUEFUVEVS Ti4gIGNrdXVzMi5jLAorMTUgSnVuIDIwMDUuCisKK1RoZSBHUkVQIGNvbW1hbmQsIGFuZCBwcm9i YWJseSBhbnl0aGluZyBlbHNlIHRoYXQgdXNlcyBja21hdGNoKCkgZm9yIHBhdHRlcm4KK21hdGNo aW5nLCBmYWlsZWQgb24gcGF0dGVybnMgbGlrZSAqL1swLTNdKi5odG1sLiAgVGhlIFthLWJdIGhh bmRsZXIsIHdoZW4KK2ZhaWxpbmcgdG8gbWF0Y2ggYXQgdGhlIGN1cnJlbnQgcG9zaXRpb24sIG5l Z2xlY3RlZCB0byBiYWNrIHVwIHRoZSBwYXR0ZXJuCithbmQgdHJ5IGFnYWluIG9uIHRoZSByZW1h aW5kZXIgb2YgdGhlIHN0cmluZy4gIEkgYWxzbyBmaXhlZCBhbm90aGVyIGNhc2UsIGluCit3aGlj aCBtYXRjaGluZyBhIGxpdGVyYWwgc3RyaW5nIGEqYj9jIGFnYWluc3QgdGhlIHBhdHRlcm4gYVsq P10qWz8qXWMgY2F1c2VkCitja21hdGNoKCkgdG8gcmVjdXJzZSB1bnRpbCBpdCBibGV3IHVwLiAg Y2tjbGliLmMsIDE2IEp1biAyMDA1LgorCitBZGRlZCBidWlsZHMgYW5kIGRlc2lnbmVyIGJhbm5l ciBmb3IgU29sYXJpcyAxMC4gIG1ha2VmaWxlLCBja3V2ZXIuaCwKKzI3IEp1biAyMDA1LgorCitE ZWZpbmVkIENLSFRUUCBmb3IgTmV0QlNELCB0aGUgSFRUUCBjb2RlIGJ1aWxkcyBhbmQgd29ya3Mg ZmluZSB0aGVyZS4KK2NrY2RlYi5oLCAyIEp1bCAyMDA1LgorCitBZGRlZCAjaWZuZGVmIE9TRjQw Li4jZW5kaWYgYXJvdW5kIGRlZmluaXRpb24gb2YgaW5ldF9hdG9uKCkgaW4gY2tfc3NsKCkKK3Rv IGFsbG93IGJ1aWxkaW5nIGluIFRydTY0LiAgQWRkZWQgdHJ1NjQtNTFiK29wZW5zc2wgdG8gbWFr ZWZpbGUuCisxNSBKdWwgMjAwNS4KKworSFRUUCBHRVQgd291bGQgZmFpbCBpZiB0aGUgVVJMIGNv bnRhaW5lZCBhbnkgbWV0YWNoYXJhY3RlcnMsIG5vIG1hdHRlciBob3cKK211Y2ggeW91IHF1b3Rl ZCB0aGVtLiAgQWx0aG91Z2ggaXQgdXNlcyBjbWZsZCgpIHRvIHBhcnNlIHRoZSAocGFydGlhbCkg VVJMLAoraXQgdGhlbiB1c2VzIGNtb2ZpKCkgdG8gZ2V0IHRoZSBvdXRwdXQgZmlsZW5hbWUsIHdo aWNoIGJ5IGRlZmF1bHQgaXMgdGhlCisiZmlsZW5hbWUiIGZyb20gdGhlIFVSTCwgd2hpY2ggbWln aHQgYmUgc29tZXRoaW5nIGxpa2UgInJhbmtlbS5hc3A/aWQ9MTYzOSIuCitjbW9maSgpIHJlZnVz ZXMgdG8gYWNjZXB0IHVucXVvdGVkIG1ldGFjaGFyYWN0ZXJzIGluICJmaWxlbmFtZXMiIGFuZCB0 aGF0J3MKK3doYXQgaGFwcGVucyBpbiB0aGlzIGNhc2UgaWYgdGhlIG91dHB1dCBmaWxlbmFtZSBp cyBub3Qgc3BlY2lmaWVkLiAgV29ya2VkCithcm91bmQgdGhpcyBieSBkaXNhYmxpbmcgd2lsZGNh cmQgcHJvY2Vzc2luZyBhcm91bmQgSFRUUCBHRVQgdXNpbmcgdGhlIG5ldworIndpbGRlbmEiIHZh cmlhYmxlIGZyb20gSnVuZSAxNXRoLiAgY2t1dXNyLmMsIDE4IEp1bCAyMDA1LgorCitGaXhlZCB0 aGUgSnVuZSAxNnRoIGZpeCB0byB0aGUgcGF0dGVybiBtYXRjaGVyLiAgSSBmaXhlZCBhIHJlYWwg cHJvYmxlbSwgYnV0CitJIG1hZGUgYW4gdW5yZWxhdGVkIG9wdGltaXphdGlvbiB0aGF0IGludHJv ZHVjZWQgbmV3IG9uZXMuICBja2NsaWIuYywKKzE4IEp1bCAyMDA1LgorCitBZGRlZCBtaXNzaW5n IGhlbHAgdGV4dCBmb3IgXGZiNjRlbmNvZGUoKSBhbmQgXGZiNjRkZWNvZGUoKS4gIGNrdXVzMi5j LAorMTggSnVsIDIwMDUuCisKK0NoYW5nZWQgU0VUIFdJTEQgT0ZGIGhlbHAgdGV4dCB0byB3YXJu IHRoYXQgdGhpcyBzZXR0aW5nIHByZXZlbnRzIHRoZQorY3JlYXRpb24gb2YgYmFja3VwIGZpbGVz IChsYXRlciBJJ2xsIGhhdmUgdG8gc2VlIGlmIHNvbWV0aGluZyBtb3JlIHVzZWZ1bAorY2FuIGJl IGRvbmUgYWJvdXQgdGhpcykuICBja3V1czIuYywgMTggSnVsIDIwMDUuCisKK0J1aWx0IE9LIG9u IE1hYyBPUyBYIDEwLjQuMiB1c2luZyBtYWNvc3gxMDMgdGFyZ2V0IChidXQgd2l0aCBzb21lCisi c2lnbmVkbmVzcyIgd2FybmluZ3MgaW4gY2tjbmV0LmMgYW5kIGNrY2Z0cC5jKS4gIEJ1aWx0IG9u IFVuaXh3YXJlIDcuMS40Cit3aXRoIHV3NyB0YXJnZXQuICAyNy0yOCBKdWwgMjAwNS4gCisKK0Fk ZGVkIC1EQ0tIVFRQIHRvIE1hYyBPUyBYIDEwLjMtLjQgS0ZMQUdTLiAgTWFrZWZpbGUsIDQgQXVn IDIwMDUuCisKK0J1aWx0IG9uIEJTREkgNC4zLjEuICBBZGRlZCAtRENLSFRUUC4gIAorCitDb21w YWN0IHN1YnN0cmluZyBub3RhdGlvbiBleHRlbmRlZCB0byBhY2NlcHQgbm90IG9ubHkgc3RhcnQ6 bGVuZ3RoIGJ1dCBhbHNvCitzdGFydC1lbmQgbm90YXRpb24uICBUaHVzIFxzKGZvb1sxMjoxOF0p IG1lYW5zIHRoZSBzdWJzdHJpbmcgb2YgZm9vIHN0YXJ0aW5nCithdCBwb3NpdGlvbiAxMiBvZiBs ZW5ndGggMTgsIGFuZCB0bmUgbmV3IFxzKGZvb1sxMi0xOF0pIG1lYW5zIHRoZSBzdWJzdHJpbmcK K29mIGZvbyBzdGFydGluZyBhdCBwb3NpdGlvbiAxMiBhbmQgZW5kaW5nIHdpdGggcG9zaXRpb24g MTguICBEaXR0byBmb3IKK1w6KFwlYSksIGV0Yy4gIGNrdXVzNC5jLCA5IEF1ZyAyMDA1LgorCitT ZWUgY29ycmVzcG9uZGVuY2Ugd2l0aCBNYXJrIFNhcGlybywgTm92IDIwMDMgYW5kIFNlcCAyMDA0 LCBhYm91dCBjZXJ0YWluCit2YXJpYXRpb25zIG9uIElGIHN5bnRheCBoYXZpbmcgYmVlbiBicm9r ZW4gYnkgdGhlIGludHJvZHVjdGlvbiBvZiAiaW1tZWRpYXRlCittYWNyb3MiIGNpcmNhIDE5OTku ICBJdCBzZWVtcyB0aGUgcHJvYmxlbSAtLSB2YXJpYWJsZXMgbm90IGJlaW5nIGV4cGFuZGVkIC0t CithbHdheXMgb2NjdXJzIGluIHRoZSBFTFNFIHBhcnQgd2hlbiAoYSkgdGhlIElGIGNvbmRpdGlv biBpcyBmYWxzZTsgKGIpIHRoZQorRUxTRSBjb21tYW5kIGlzICJzdGFuZGFsb25lIiwgaS5lLiBl eHByZXNzZWQgYXMgYSBzZXBhcmF0ZSBjb21tYW5kIGFmdGVyIHRoZQorSUYgY29tbWFuZCAob3Jp Z2luYWwgQy1LZXJtaXQgNUEgc3ludGF4KSwgYW5kIChjKSBpdHMgY29tbWFuZCBsaXN0IGlzIGEg YmxvY2suCitUaGlzIHdvdWxkIHN1Z2dlc3QgdGhlIHByb2JsZW0gaXMgaW4gdGhlIFhYRUxTIHBh cnNlci4KKworR29pbmcgYmFjayB0byAxOTk5LCBJIGZpbmQgdGhpczoKKyAgRml4ZWQgYSBwcm9i bGVtIEppbSBXaGl0Ynkgbm90aWNlZCB3aXRoIHF1b3RpbmcgaW4gRUxTRSBzdGF0ZW1lbnRzLiAg VGhpcworICBwcm9ibGVtIHdhcyBpbnRyb2R1Y2VkIHdoZW4gSSB1bmlmaWVkIElGIGFuZCBYSUYs IGFuZCBvY2N1cnMgb25seSB3aGVuCisgIEVMU0UgYmVnaW5zIG9uIGEgbGluZSwgZm9sbG93ZWQg YnkgYSB7IGNvbW1hbmQgbGlzdCB9IHJhdGhlciB0aGFuIGEgc2luZ2xlCisgIGNvbW1hbmQuICBU aGUgc29sdXRpb24gKGdyb3NzKSB3YXMgdG8gbWFrZSBhIHNwZWNpYWwgdmVyc2lvbiBvZiBwdXNo Y21kKCkKKyAgKGNhbGxlZCBwdXNocWNtZCgpKSBmb3IgdGhpcyBzaXR1YXRpb24sIHdoaWNoIGRv dWJsZXMgYmFja3NsYXNoZXMgd2hpbGUKKyAgY29weWluZywgQlVUIE9OTFkgSUYgaXQncyBhIGNv bW1hbmQgbGlzdCAoaS5lLiBzdGFydHMgd2l0aCAieyIpOyBvdGhlcndpc2UKKyAgd2UgYnJlYWsg bG90cyBvZiBvdGhlciBzdHVmZi4gIFJlc3VsdCBwYXNzZXMgSmltJ3MgdGVzdCBhbmQgc3RpbGwg cGFzc2VzCisgIGNrZWRlbW8ua3NjIGFuZCBpZnRlc3Qua3NjLiAgY2t1Y21kLmMsIGNrdXVzNi5j LCAyNyBTZXAgOTkuCisKK0kgdW5kaWQgdGhpcyBjaGFuZ2UgYW5kIGl0IG1hZGUgbm8gZGlmZmVy ZW5jZSB0byBhbGwgdGhlIG90aGVyIElGCitjb25zdHJ1Y3Rpb25zIChpbiBmYWN0LCBpdCBmaXhl ZCBhbiB1bnJlbGF0ZWQgb25lIHRoYXQgd2FzIGJyb2tlbiwgc28gbm93CitpZnRlc3Qgc2NvcmVz IDU0IG91dCBvZiA1NCwgaW5zdGVhZCBvZiA1MykuICBIb3dldmVyLCBpdCBkb2VzIG5vdCBmaXgg dGhlCitFTFNFIHByb2JsZW07IGluIGZhY3QgaXQgcHVzaGVzIGl0IGFsbCB0aGUgd2F5IGluIHRo ZSBvdGhlciBkaXJlY3Rpb246CisKKyAgVGhlIG9wcG9zaXRlIG9jY3VycyBhbnkgdGltZSB5b3Ug dHJ5IHRvIGV4ZWN1dGUgYW4gaW1tZWRpYXRlIG1hY3JvIGluc2lkZSBhCisgIG1hY3JvIG9yIGFu eSBvdGhlciB7IGJsb2NrIH06IG5vdCBvbmx5IGlzIHRoZSB2YXJpYWJsZSBldmFsdWF0ZWQsIGl0 IGlzCisgIGV2YWx1YXRlZCBpbnRvIG5vdGhpbmcuICBJdCBsb29rcyBsaWtlIHRoaXMgaGFwcGVu cyBvbmx5IGluIGltbWVkaWF0ZQorICBtYWNyb3MsIGkuZS4gKmNvbW1hbmRzKiB0aGF0IHN0YXJ0 IHdpdGggJ3snLiAgU28gbWF5YmUgd2UgcmVhbGx5IGhhdmUgdHdvCisgIGlzb2xhdGVkIHByb2Js ZW1zLCB0aGF0IGNhbiBlYWNoIGJlIGZpeGVkLgorCitUaGUgc2l0dWF0aW9uIGlzIGlsbHVzdHJh dGVkIGJ5IHRoaXMgc2ltcGxlIHNjcmlwdDoKKworICBkZWYgeHggeworICAgICAgaWYgZmFsc2Ug eyBlY2hvIFwlMSwgZWNobyBcJTIgfQorICAgICAgZWxzZSB7IGVjaG8gXCUzLCBlY2hvIFwlNCB9 CisgIH0KKyAgeHggb25lIHR3byB0aHJlZSBmb3VyCisKK1dpdGggcHVzaHFjbWQoKSBpdCBlY2hv ZXMgdGhlIHZhcmlhYmxlIG5hbWVzIGxpdGVyYWxseTsgd2l0aCBwdXNoY21kKCkgaXQgCitlY2hv ZXMgZW1wdHkgbGluZXMuICBTaW5jZSBFTFNFLCB3aGVuIGl0cyBhcmd1bWVudCBpcyBhIGJsb2Nr LCBkaXNwYXRjaGVzCit0byB0aGUgaW1tZWRpYXRlLW1hY3JvIGhhbmRsZXIsIGl0IHNlZW1zIHdl IGhhdmUgdW5pZmllZCB0aGUgdHdvIHByb2JsZW1zLAorc28gZml4aW5nIG9uZSBzaG91bGQgZml4 IHRoZSBvdGhlci4KKworVGhlIHByb2JsZW0gaXMgdGhhdCB3ZSBkZWZpbmUgYSBuZXcgdGVtcG9y YXJ5IG1hY3JvIGFuZCB0aGVuIGNhbGwgZG9kbygpIHRvCitleGVjdXRlIGl0LiAgQnV0IGlmIHRo ZSBkZWZpbml0aW9uIGNvbnRhaW5zIG1hY3JvIGFyZ3VtZW50cywgd2UgaGF2ZSBhZGRlZCBhCitu ZXcgbGV2ZWwgb2YgbWFjcm8gaW52b2NhdGlvbiwgdGh1cyB3aXBpbmcgb3V0IHRoZSBjdXJyZW50 IGxldmVsIG9mIGFyZ3MuCitUaGUgY3VyZSBpcyB0byBleHBhbmQgdGhlIHZhcmlhYmxlcyBpbiB0 aGUgaW1tZWRpYXRlIG1hY3JvIGluIHRoZSBjdXJyZW50Citjb250ZXh0LCBiZWZvcmUgZXhlY3V0 aW5nIGl0LiAgVGhpcyBtZWFucyBzaW1wbHkgY2hhbmdpbmcgdGhlIGNtdHh0KCkgY2FsbAordGhh dCByZWFkcyB0aGUgaW1tZWRpYXRlIG1hY3JvIHRvIHNwZWNpZnkgeHhzdGluZyBhcyBpdHMgcHJv Y2Vzc2luZworZnVuY3Rpb24sIHJhdGhlciB0aGFuIE5VTEwsIHdoaWNoIGlzIHVzZWQgZm9yIHJl YWwgbWFjcm9zIHRvIGRlZmVyIHRoZWlyCithcmd1bWVudCBldmFsdWF0aW9uIHVudGlsIGFmdGVy IHRoZSBtYWNybyBlbnRlcmVkLiAgY2t1dXNyLmMsIDExIEF1ZyAyMDA1LgorCitBZGRlZCBhIG5l dyBtYWtlZmlsZSB0YXJnZXQsIG1hY29zeDEwLjQsIGZvciBNYWMgT1MgWCAxMC40LiAgVGhpcyBv bmUgdXNlcworYW4gdW5kb2N1bWVudGVkIHRyaWNrIHRvIGdldCB0aGUgb3RoZXJ3aXNlIHVuYXZh aWxhYmxlLWV4Y2VwdC1ieS1jbGlja2luZworTWFjIE9TIFggdmVyc2lvbiBudW1iZXIgKGluIHRo aXMgY2FzZSAxMC40LjIpIGFuZCBzdHVmZiBpdCBpbnRvIHRoZSBIRVJBTEQKK3N0cmluZy4gIG1h a2VmaWxlLCAxMSBBdWcgMjAwNS4KKworQnVpbHQgT0sgb24gU29sYXJpcyA5LCBTb2xhcmlzIDEw ICh3aXRoIGEgZmV3IGltcGxpY2l0IGRlY2xhcmF0aW9uIHdhcm5pbmdzCitpbiBja3V1c3guYyks IE1hYyBPUyBYIDEwLjQuMiAod2l0aCBzb21lIHdhcm5pbmdzIGluIGNrY25ldC5jIGFuZCBja2Nm dHAuYyksCitNYWMgT1MgWCAxMC4zLjkgKGFsc28gdXNpbmcgdGhlIG1hY29zMTAuNCBlbnRyeSwg d2hpY2ggZ2V0cyB0aGUgcmlnaHQKK3ZlcnNpb24gbnVtYmVyLCBhbmQgZ2V0cyBubyB3YXJuaW5n cyBhdCBhbGwpLCBSSCBFbnRlcnByaXNlIExpbnV4IEFTNCBvbiBBTUQKK3g4Nl82NCwgVHJ1NjQg VW5peCA0LjBGLCBTQ08gVW5peFdhcmUgNy4xLjQKKworRm9yIGRvY3MgYW5kL29yIHNjcmlwdGxp YjogIFVuaXggQy1LZXJtaXQgY2FuIGJlIGEgc3RkaW4vb3V0IGZpbHRlci4gIFRoZQordHJpY2sg aXMgdG8gdXNlIHRoZSBBU0ssIEFTS1EsIG9yIEdFVEMgY29tbWFuZCBmb3IgaW5wdXQsIHNwZWNp Znlpbmcgbm8KK3Byb21wdCwgYW5kIEVDSE8gb3IgWEVDSE8gZm9yIG91dHB1dCwgZS5nLjoKKwor d2hpbGUgdHJ1ZSB7CisgICAgYXNrIGxpbmUKKyAgICBpZiBmYWlsIGV4aXQgMAorICAgIGVjaG8g XGZyZXZlcnNlKFxtKGxpbmUpKQorfQorZXhpdCAwCisKK0ZPUEVOIGRpZG4ndCBkbyBhbnl0aGlu ZyB3aXRoIHRoZSBjaGFubmVsIG51bWJlciBpZiB0aGUgb3BlbiBmYWlsZWQsIHNvIGFueQorc3Vi c2VxdWVudCBjb21tYW5kIHRoYXQgdHJpZWQgdG8gcmVmZXJlbmNlIGl0IHdvdWxkIGdldCBhIHBh cnNlIGVycm9yIGl0IHdhcwordW5kZWZpbmVkIG9yIG5vbi1udW1lcmljLCBub3QgdmVyeSBoZWxw ZnVsLiAgQ2hhbmdlZCBGT1BFTiB0byBzZXQgdGhlCitjaGFubmVsIG51bWJlciB0byAtMSBpZiB0 aGUgZmlsZSBjYW4ndCBiZSBvcGVuZWQuICBOb3cgc3Vic2VxdWVudCBvcGVyYXRpb25zCitvbiB0 aGUgY2hhbm5lbCBmYWlsIHdpdGggIkNoYW5uZWwgLTE6IEZpbGUgbm90IG9wZW4iLiAgSSBhbHNv IGFkZGVkIHR3bworbWFnaWMgY2hhbm5lbCBudW1iZXJzOiAtOCBtZWFucyB0aGF0IGFueSBGSUxF IGNvbW1hbmQgKGJlc2lkZXMgT1BFTiBhbmQKK1NUQVRVUykgb24gdGhhdCBjaGFubmVsIGlzIGEg bm9vcCB0aGF0IHN1Y2NlZWRzIHNpbGVudGx5OyAtOSBpcyBhIG5vb3AgdGhhdAorZmFpbHMgc2ls ZW50bHkuICBTbyBub3cgaXQncyBwb3NzaWJsZSB0byBzaW1wbHkgc2V0IGEgY2hhbm5lbCBudW1i ZXIgdG8gb25lCitvZiB0aGVzZSB2YWx1ZXMgdG8gZGlzYWJsZSBpL28gdG8gY2VydGFpbiBmaWxl IHdpdGhvdXQgZ2V0dGluZyBsb3RzIG9mIGVycm9yCittZXNzYWdlcy4gIGRvZmlsZSgpOiBja3V1 czcuYywgMTIgQXVnIDIwMDUuCisKK0FkZGVkIGF1dG9tYXRpYyBoZXJhbGQgY29uc3RydWN0aW9u IGZvciBVbml4V2FyZSA3LiAgbWFrZWZpbGUsIDEyIEF1ZyAyMDA1LgorCitVbml4IGlzZGlyKCkg bmV2ZXIgYWxsb3dlZCBmb3IgYXJndW1lbnRzIHRoYXQgc3RhcnRlZCB3aXRoIHRpbGRlLCBzbyBn YXZlCitpbmNvcnJlY3QgcmVzdWx0cyBmb3Igfi90bXAvIG9yIH5mZGMuICBUaGUgcHJvYmxlbSB3 YXMgbWFpbmx5IGludmlzaWJsZQorc2luY2UgbW9zdCBjb21tYW5kcyB0aGF0IHBhcnNlZCBmaWxl IG9yIGRpcmVjdG9yeSBuYW1lcyB1c2VkIGNtaWZpKCksIGNtZGlyKCksCitldGMsIHdoaWNoIGRp ZCB0aGUgY29udmVyc2lvbnMgdGhlbXNlbHZlcy4gIEJ1dCBJRiBESVJFQ1RPUlkgd2FzIGFuIGV4 Y2VwdGlvbiwKK3NpbmNlIGl0cyBvcGVyYW5kIGhhZCB0byBiZSB0cmVhdGVkIGFzIGp1c3QgdGV4 dCwgYW5kIHRoZW4gdGVzdGVkIGFmdGVyIGl0Cit3YXMgcGFyc2VkLiAgY2t1ZmlvLmMsIDEzIEF1 ZyAyMDA1LgorCitGaXhlZCB0aGUgZm9sbG93aW5nOgorImNrdXVzeC5jIiwgbGluZSA4OTU5OiB3 YXJuaW5nOiBpbXBsaWNpdCBmdW5jdGlvbiBkZWNsYXJhdGlvbjogY2tnZXRwZWVyCisiY2t1Zmlv LmMiLCBsaW5lIDE4Njk6IHdhcm5pbmc6IGltcGxpY2l0IGZ1bmN0aW9uIGRlY2xhcmF0aW9uOiB0 dHdhaXQKKyJja3VmaW8uYyIsIGxpbmUgMjk0MTogd2FybmluZzogaW1wbGljaXQgZnVuY3Rpb24g ZGVjbGFyYXRpb246IG1sb29rCisiY2t1ZmlvLmMiLCBsaW5lIDI5NDM6IHdhcm5pbmc6IGltcGxp Y2l0IGZ1bmN0aW9uIGRlY2xhcmF0aW9uOiBkb2RvCisiY2t1ZmlvLmMiLCBsaW5lIDI5NDQ6IHdh cm5pbmc6IGltcGxpY2l0IGZ1bmN0aW9uIGRlY2xhcmF0aW9uOiBwYXJzZXIKKyJja2NmdHAuYyIs IGxpbmUgMjYyNTogd2FybmluZzogaW1wbGljaXQgZnVuY3Rpb24gZGVjbGFyYXRpb246IGRlbHRh MnNlYworImNrY2Z0cC5jIiwgbGluZSA0MDcxOiB3YXJuaW5nOiBubyBleHBsaWNpdCB0eXBlIGdp dmVuIGZvciBwYXJhbWV0ZXI6IHBybQorImNrY2Z0cC5jIiwgbGluZSA4Mzg5OiB3YXJuaW5nOiBu byBleHBsaWNpdCB0eXBlIGdpdmVuIGZvciBwYXJhbWV0ZXI6IGJyaWVmCitja3V1c3guYywgY2t1 ZmlvLmMsIGNrY2Z0cC5jLCBja3VjbWQuaC4gIDEzIEF1ZyAyMDA1LgorCitVbmJ1ZmZlcmVkIHN0 ZG91dCBjb2RlIGhhcyBuZXZlciB3b3JrZWQgYmVjYXVzZSB0aGUgc2V0YnVmKHN0ZG91dCxOVUxM KSBjYWxsCitoYXMgdG8gb2NjdXIgYmVmb3JlIHRoZSBzdGRvdXQgaGFzIGJlZW4gdXNlZC4gIFRo ZSByZWFzb24gaXQncyBuZWVkZWQgaXMKK3RoYXQgc29tZSBLZXJtaXQgY29kZSB3cml0ZXMgdG8g c3RkZXJyICh3aGljaCBpcyB1bmJ1ZmZlcmVkKSBhbmQgb3RoZXIgY29kZQord3JpdGVzIHRvIHN0 ZG91dCwgYW5kIHRoZXJlZm9yZSB0eXBlc2NyaXB0cyBjYW4gY29tZSBvdXQganVtYmxlZC4gIFJv YmVydAorU2ltbW9ucyA8cm9iZXJ0bHNAbm9ydGVsLmNvbT4gcHJvdmlkZWQgdGhlIG5lZWRlZCBj bHVlIHdoZW4gaGUgaW5zaXN0ZWQgaXQKK3dvcmtlZCBvbmx5IHdoZW4gZXhlY3V0ZWQgYXQgdGhl IHZlcnkgYmVnaW5uaW5nIG9mIG1haW4oKS4gIFNvIEkgbW92ZWQgdGhlCitjb2RlIHRvIHRoYXQg c3BvdC4gIEJ1dCBzaW5jZSBub3cgd2UgYWxzbyB3YW50IHRvIG1ha2UgdW5idWZmZXJlZCBhIHJ1 bnRpbWUKKyhjb21tYW5kLWxpbmUpIG9wdGlvbiwgSSBoYWQgdG8gZG8gYSBjbHVua3kgYnktaGFu ZCBwcmUtcHJlc2NhbiBpbmxpbmUgaW4KK21haW4oKSB0byBsb29rIHRocnUgYXJndltdLCBldmVu IGJlZm9yZSBwcmVzY2FuKCkgd2FzIGNhbGxlZC4gIGNrY21haS5jLAorY2t1dGlvLmMsIGNrdXVz eS5jLCAxMyBBdWcgMjAwNS4gIChOb3cgdGhhdCB0aGlzIHdvcmtzLCBpdCBtaWdodCBiZSBhIGdv b2QKK2lkZWEgdG8gcmVtb3ZlIGFsbCB1c2Ugb2Ygc3RkZXJyIGZyb20gS2VybWl0LikKKworTWFu YWdlZCwgYWZ0ZXIgc29tZSBmaW5hZ2xpbmcsIHRvIGJ1aWxkIGEgNjQtYml0IHZlcnNpb24gb24g U29sYXJpcyAxMCBhdAorVXRhaCBNYXRoIHdpdGggU3VuIGNjLiAgKENhbid0IG1ha2UgYW55IGdj YyBidWlsZHMgYXQgYWxsLCAzMi0gb3IgNjQtYml0LAordGhleSBhbGwgYmxvdyB1cCBpbiA8c3lz L3NpZ2luZm8uaD4uKSAgTmV3IHRhcmdldDogc29sYXJpczEwXzY0LiAgbWFrZWZpbGUsCisxNSBB dWcgMjAwNS4KKworVGhlIDY0LWJpdCBTb2xhcmlzIDEwIHZlcnNpb24gY29tcGlsZXMgYW5kIGxp bmtzIE9LIGFuZCB0cmFuc2ZlcnMgZmlsZXMgaW4KK3JlbW90ZSBtb2RlLiAgSXQgY2FuIG1ha2Ug RlRQIGNvbm5lY3Rpb25zIGFuZCB1c2UgdGhlbSwgYnV0IFRlbG5ldCBjb25uZWN0aW9ucworYWx3 YXlzIGZhaWwgd2l0aCAibmV0d29yayB1bnJlYWNoYWJsZSIuICBUaGlzIGlzIHdpdGggYWxsIGRl ZmF1bHQgbGlicyBhbmQKK2luY2x1ZGUgZmlsZXMuICBOZWxzb24gaGFzIGEgc2VwYXJhdGUgc2V0 IGluIC91c3IvbG9jYWwsIHdoaWNoIGhlIHJlZmVyZW5jZXMKK2V4cGxpY2l0bHkgaW4gYWxsIGhp cyA2NC1iaXQgYnVpbGRzLCBidXQgdXNpbmcgdGhlc2UgbWFrZXMgbm8gZGlmZmVyZW5jZS4KK1Nv bWUgZGF0YSB0eXBlIGlzIHdyb25nIGluIGNrY25ldC5jLiAgQnV0IHRlbG5ldCB3b3JrcyBmaW5l IGluIDY0LWJpdCBMaW51eAorYW5kIFRydTY0IGJ1aWxkcy4gIERlYnVnIGxvZ3MgdHJhY2UgdGhl IGRpZmZlcmVuY2UgdG8gbmV0b3BlbigpIChvZiBjb3Vyc2UpLAordGhlIHNwb3Qgd2hlcmUgd2Ug dGVzdCB0aGUgcmVzdWx0cyBvZiBpbmV0X2FkZHIoKSwgd2hpY2ggaXMgYWxyZWFkeSBtYXJrZWQK K3N1c3BpY2lvdXMgZm9yIDY0LWJpdCBidWlsZHMuICBJdCBzZWVtcyB0aGF0IGluZXRfYWRkcigp IGlzIG9mIHR5cGUgaW5fYWRkcl90LAord2hpY2ggaW4gdHVybiBpcyB1X2ludDMyLCBpLmUuIGFu IHVuc2lnbmVkIDMyLWJpdCBpbnQuICBZZXQgdGhlIG1hbiBwYWdlIHNheXMKK3RoYXQgZmFpbHVy ZSBpcyBpbmRpY2F0ZWQgYnkgcmV0dXJuaW5nIC0xLiAgSSBndWVzcyB0aGlzIGRvZXNuJ3QgbWF0 dGVyIGluCiszMi1iaXQgYnVpbGRzLCBidXQgaW4gdGhlIDY0LWJpdCB3b3JsZCwgdGhlIHRlc3Qg Zm9yIGZhaWx1cmUgZGlkbid0IHdvcmsKK3JpZ2h0LiAgSSBtYWRlIGEgU29sYXJpcy1zcGVjaWZp YyB3b3JrYXJvdW5kLCBhbmQgY2hlY2tlZCB0aGF0IGl0IHdvcmtzIGluCitib3RoIDMyLWJpdCBh bmQgNjQtYnVpbGRzLiAgSSByZWFsbHkgaGF0ZSB0eXBlZGVmcy4gIGNrY25ldC5jLCAxNSBBdWcg MjAwNS4KKworQ2hhbmdlZCB0aGUgcGxhaW4tdGV4dCB2ZXJzaW9uIChhcyBvcHBvc2VkIHRvIHRo ZSBwb3B1cCBvciBHVUkgdmVyc2lvbiAtIHRoZQorR1VJIHZlcnNpb24sIGF0IGxlYXN0LCBhbHJl YWR5IGRvZXMgdGhpcykgb2YgQVNLUSB0byBlY2hvIGtleXN0cm9rZXMKK2FzdGVyaXNrcyByYXRo ZXIgdGhhbiBzaW1wbHkgbm90IGVjaG8gYW55dGhpbmcsIHNvIGl0J3MgZWFzaWVyIHRvIHNlZSB3 aGF0Cit5b3UncmUgZG9pbmcsIHRoZSBlZmZlY3RzIG9mIGVkaXRpbmcsIGV0Yy4gIEV4cGVyaW1l bnRhbDsgZm9yIG5vdywgdGhlcmUncworbm8gd2F5IHRvIGRpc2FibGUgdGhpcy4gIE5vdCBzdXJl IGlmIHRoZXJlIG5lZWRzIHRvIGJlLiAgQW55d2F5LCB0byBnZXQgdGhpcword29ya2luZyByZXF1 aXJlZCBhIGZhaXIgYW1vdW50IG9mIGNsZWFuaW5nIHVwIG9mIGd0d29yZCgpLCB3aGljaCB3YXMg ZWNob2luZworZGlmZmVyZW50IHdheXMgaW4gZGlmZmVyZW50IHBsYWNlcy4gIGNrdXVzNi5jLCBj a3VjbWQuYywgMTUgQXVnIDIwMDUuCisKK0FkZGVkIGEgc29sYXJpczlfNjQgdGFyZ2V0IGZvciBi dWlsZGluZyBhIDY0LWJpdCB2ZXJzaW9uIG9uIFNvbGFyaXMgOSB3aXRoCitTdW4gY2MuICBWZXJp ZmllZCwgdXNpbmcgdGhlIERJUiBjb21tYW5kIGFuZCBcZnNpemUoKSBmdW5jdGlvbiBvbiBhIDQu NEdCCitmaWxlLCB0aGF0IHRoZSBTb2xhcmlzIDY0LWJpdCB2ZXJzaW9uIG9mIEtlcm1pdCBnZXRz IHRoZSBzaXplIGNvcnJlY3RseSwgYW5kCit0aGF0IGl0IGNhbiBjb3B5IHN1Y2ggYSBmaWxlICh0 aHVzIGl0cyBmb3Blbi9mcmVhZC9md3JpdGUvZmNsb3NlIGludGVyZmFjZQord29ya3MgcmlnaHQp LiAgSW5pdGlhdGVkIGEgbGFyZ2UtZmlsZSB0cmFuc2ZlciBiZXR3ZWVuIGhlcmUgYW5kIFV0YWgg b3ZlcgorU1NIIGFuZCB2ZXJpZmllZCB0aGF0IGl0IHB1dHMgdGhlIGNvcnJlY3QgZmlsZSBzaXpl IGluIHRoZSBBIHBhY2tldCB3aGVuCitzZW5kaW5nOyB0aGUgcmlnaHQgcXVhbnRpdGllcyBhcmUg c2hvd24gb24gdGhlIGZpbGUgdHJhbnNmZXIgZGlzcGxheSAoZmlsZQorc2l6ZSBDUFMsIHBlcmNl bnQgZG9uZSwgZXRjKS4gIEJ1dCBldmVuIGF0IDVNYi9zZWMsIGl0IHRha2VzIGEgZ29vZCB3aGls ZSB0bwordHJhbnNmZXIgNC40R0IsIG1vcmUgdGhhbiAyIGhvdXJzIChub3Qgc3RyZWFtaW5nOyAz MCB3aW5kb3cgc2xvdHMsIDRLCitwYWNrZXRzLCBtYXliZSBpdCB3b3VsZCBnbyBmYXN0ZXIgd2l0 aCBzdHJlYW1pbmcpLi4uICBBZnRlciBhbiBob3VyIG9yIHNvLAoraXQgZmlsbGVkIHVwIHRoZSBw YXJ0aXRpb24gYW5kIGdhdmUgdXAgKGdyYWNlZnVsbHkpIGJlZm9yZSBpdCByZWFjaGVkIHRoZQor MkdCIGZyb250aWVyIChkcmFpbmVkIGl0cyBwZW5kaW5nIHBhY2tldHMsIGNsb3NlZCB0aGUgcGFy dGlhbCBmaWxlKS4KK1Jlc3RhcnRlZCBhdCAxMjo1NCwgdGhpcyB0aW1lIHdpdGggc3RyZWFtaW5n IGFuZCA4SyBwYWNrZXRzICh0aGUgc3BlZWQKK3dhc24ndCBzaWduaWZpY2FudGx5IGRpZmZlcmVu dCkuICBUaGlzIHRpbWUgaXQgdHJhbnNmZXJyZWQgOTUlIG9mIHRoZSBmaWxlCisoNDE4NzY2MDI4 OCBieXRlcykgYmVmb3JlIGZhaWxpbmcgYmVjYXVzZSB0aGUgZGlzayBmaWxsZWQgdXAuICBXZW50 IHRvIFV0YWgKK2FuZCBzdGFydGVkIGEgdHJhbnNmZXIgYmV0d2VlbiB0d28gU29sYXJpcyAxMC9T cGFyYyBob3N0czsgdGhpcyBnb2VzIGFib3V0IDgKK3RpbWVzIGZhc3Rlci4gIFRoZSB0cmFuc2Zl ciBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IGFmdGVyIDE3bTQxcy4gIEFsbCBmaWVsZHMKK2luIHRo ZSBmLnQuIGRpc3BsYXkgbG9va2VkIHJpZ2h0IHRoZSB3aG9sZSB0aW1lLiAgVGhlbiBJIHZlcmlm aWVkIHZhcmlvdXMKK290aGVyIDY0LWJpdCBjb21iaW5hdGlvbnMgdHJhbnNmZXJyaW5nIHRoZSBz YW1lIDQuNEdCIGZpbGU6CisKKyAgICAgICAgVG8uLi4uLi4uLi4uLi4uLi4uCisgIEZyb20gIFNv bCAgQW1kICBpNjQgIFRydSAgICAgIAorICBTb2wgICBPSyAgIE9LICAgT0sgICBPSyAgICAgIFNv bCA9IFNvbGFyaXMgMTAgLyBTcGFyYworICBBbWQgICBPSyAgICAgICAgICAgICAgICAgICAgIEFt ZCA9IEFNRCB4ODZfNjQgUkggRW50ZXJwcmlzZSBMaW51eCBBUzQKKyAgaTY0ICAgT0sgICAgICAg ICAgICAgICAgICAgICBpNjQgPSBJbnRlbCBJQTY0LCBSSCAyLjFBUworICBUcnUgICAgICAgICAg ICAgICAgICAgICAgICAgIFRydSA9IFRydTY0IFVuaXggNC4wRiBBbHBoYQorCisoVGhlIG90aGVy IGNvbWJpbmF0aW9ucyBhcmUgZGlmZmljdWx0IHRvIHRlc3QgZm9yIGxvZ2lzdGljYWwgcmVhc29u cy4pCisKK1RyaWVkIHNlbmRpbmcgdGhlIHNhbWUgbG9uZyBmaWxlIHdpdGggS2VybWl0J3MgRlRQ IGNsaWVudC4gIEl0IGNodWdnZWQgYWxvbmcKK2ZvciBhIHdoaWxlIHVudGlsIEkgc3RvcHBlZCBp dDsgaXQgd291bGQgaGF2ZSB0YWtlbiBob3VycyB0byBjb21wbGV0ZS4KK1RoZXJlIGlzIG5vIGlu ZGljYXRpb24gdGhhdCBpdCB3b3VsZG4ndCBoYXZlIHdvcmtlZCwgYXNzdW1pbmcgdGhlIEZUUCBz ZXJ2ZXIKK2NvdWxkIGFsc28gaGFuZGxlIGxvbmcgZmlsZXMsIHdoaWNoIHdobyBrbm93cy4gIEFu eXdheSwgS2VybWl0IHNob3dlZCBhbGwKK3RoZSByaWdodCBkYXRhIG9uIHRoZSBkaXNwbGF5IHNj cmVlbi4gIDE3IEF1ZyAyMDA1LgorCitPbiBBTUQgeDg2XzY0IGFuZCBJQTY0IG5hdGl2ZSA2NC1i aXQgTGludXggYnVpbGRzLCB0aGUgcHR5IHJvdXRpbmVzIGRpZCBub3QKK3dvcmsgYXQgYWxsLiAg cHRzbmFtZSgpIGR1bXBlZCBjb3JlLiAgSWYgSSBjb21tZW50ZWQgb3V0IHB0c25hbWUoKSwgdGhl biB0aGUKK25leHQgdGhpbmcgZHVtcGVkIGNvcmUuICBUaGUgc2FtZSBjb2RlIHdvcmtzIG9uIHRo ZSBvdGhlciA2NC1iaXQgYnVpbGRzLgorUG9raW5nIGFyb3VuZCwgSSBzZWUgdGhhdCB0aGlzIHZl cnNpb24gb2YgTGludXggaGFzIGFuIG9wZW5wdHkoKSBmdW5jdGlvbiwKK3doaWNoIEkgY291bGQg dHJ5IHVzaW5nIGluc3RlYWQgb2YgdGhlIGN1cnJlbnQgQVBJIC0tIGdyYW50cHR5KCksIGV0Yy4g IFRoZW4KK0kgc2VlIHRoYXQgb3BlbnB0eSgpIGlzIGFscmVhZHkgY29kZWQgaW50byBLZXJtaXQn cyBwdHkgbW9kdWxlLAorY29uZGl0aW9uYWxpemVkIHVuZGVyIEhBVkVfT1BFTlBUWSwgd2hpY2gg aGFzIG5ldmVyIGJlZm9yZSBiZWVuIGRlZmluZWQgZm9yCithbnkgYnVpbGQuICBJIGFkZGVkIGEg dGVzdCB0byB0aGUgbWFrZWZpbGUgbGludXggdGFyZ2V0IChsb29rIGZvciB0aGUKK29wZW5wdHko KSBwcm90b3R5cGUgaW4gPHB0eS5oPiwgaWYgZm91bmQgZGVmaW5lIEhBVkVfT1BFTlBUWSBhcyBh IENGTEFHIGFuZAorYWxzbyBhZGQgLWx1dGlsIHRvIExOS0ZMQUdTKS4gIFdvcmtzIGZpbmUgb24g dGhlIHByb2JsZW0gYnVpbGRzLCBhbmQgYWxzbworb24gcHJldmlvdXNseSB3b3JraW5nIDMyLWJp dCBidWlsZHMuICBtYWtlZmlsZSwgMTcgQXVnIDIwMDUuCisKK0ZpeGVkIGEgYnVnIGluIHRoZSBB U0tRIGVjaG8gYXN0ZXJpc2tzIGNvZGUsIHdoaWNoIG1hZGUgdGhlIFZNUyB2ZXJzaW9uIG9mCitD LUtlcm1pdCBhbHdheXMgZWNobyBhc3Rlcmlza3MuICBUdXJucyBvdXQgdGhhdCBzb21lIGNvZGUg aW4gdGhlIG1haW4gcGFyc2UKK2xvb3AgdG8gcmVzZXQgY29tbWFuZC1zcGVjaWZpYyBmbGFncyB3 YXMgaW4gdGhlIHdyb25nIHBsYWNlLCB3aGljaCBoYWQgb3RoZXIKK2VmZmVjdHMgdG9vLCBmb3Ig ZXhhbXBsZSBBU0tRIHRlbXBvcmFyaWx5IHR1cm5zIG9mZiBkZWJ1ZyBsb2dnaW5nIGFzIGEKK3Nl Y3VyaXR5IG1lYXN1cmUsIGJ1dCB0aGUgY29kZSB0byB0dXJuIGl0IGJhY2sgb24gd2FzIHNraXBw ZWQgaW4gbW9zdCBjYXNlcy4KK1NvbWUgb3RoZXIgc2lkZSBlZmZlY3RzIHJlbGF0ZWQgdG8gdGhl IERJUkVDVE9SWSBhbmQgQ0QgY29tbWFuZHMgbWlnaHQgaGF2ZQorYmVlbiBwb3NzaWJsZSBidXQg SSBoYXZlbid0IHNlZW4gdGhlbS4gIGNrdXVzWzU2XS5jLCAyMyBBdWcgMjAwNS4KKworUHJvYmxl bSByZXBvcnRlZCB3aGVuIHNlbmRpbmcgYSBmaWxlIHRvIFZNUyB3aGVuIHRoZSBuYW1lIGluIHRo ZSBGIHBhY2tldAorc3RhcnRzIHdpdGggYSBkZXZpY2Ugc3BlY2lmaWNhdGlvbiBhbmQgZG9lcyBu b3QgaW5jbHVkZSBhIGRpcmVjdG9yeSBmaWVsZCwKK2FuZCBQQVRITkFNRVMgYXJlIFJFTEFUSVZF LiAgRXhhbXBsZTogZHNrOmZvby5iYXIgYmVjb21lcyBmX29vLmJhci4gIFRoZQorY29kZSBhc3N1 bWVzIHRoYXQgaWYgdGhlcmUgaXMgYSBkZXZpY2UgZmllbGQsIGl0IGlzIGZvbGxvd2VkIGJ5IGEg ZGlyZWN0b3J5CitmaWVsZCwgYW5kIGl0IGluc2VydHMgYSBkb3QgYWZ0ZXIgdGhlICdbJywgd2hp Y2ggaW4gdGhpcyBjYXNlIGlzIG5vdCB0aGVyZS4KK0xhdGVyIHRoZSBkb3QgYmVjb21lcyAnXycg YmVjYXVzZSBvZiB0aGUgb25seS1vbmUtZG90IHJ1bGUuICBTb2x1dGlvbjogb25seQoraW5zZXJ0 IHRoZSBkb3QgaWYgdGhlcmUgcmVhbGx5IGlzIGFuIG9wZW5pbmcgYnJhY2tldC4gIG56cnRvbCgp OiBja3ZmaW8uYywKKzIzIEF1ZyAyMDA1LgorCitBIHJlcG9ydCBvbiB0aGUgbmV3c2dyb3VwIGNv bXBsYWlucyB0aGF0IEMtS2VybWl0IGFuZCBLOTUgc2VydmVycyB3ZXJlCitzZW5kaW5nIFJFTU9U RSBESVIgbGlzdGluZ3Mgd2l0aCBvbmx5ICNKIGxpbmUgdGVybWluYXRvcnMsIHJhdGhlciB0aGFu ICNNI0ouCitZZXQgYWxsIHRoZSBvdGhlciBSRU1PVEUgeHh4IHJlc3BvbnNlcyBhcnJpdmVkIHdp dGggI00jSi4gIHNuZGRpcigpIHdhcworbmVnbGVjdGluZyB0byBzd2l0Y2ggdG8gdGV4dCBtb2Rl LiAgY2tjZm5zLmMsIDI2IEF1ZyAyMDA1LgorCitCYWNrIHRvIGxvbmcgZmlsZXMuICBXaGF0IGhh cHBlbnMgaWYgMzItYml0IEtlcm1pdCBpcyBzZW50IGEgbG9uZyBmaWxlPworSXQgZ2V0cyBhbiBB LXBhY2tldCB0aGF0IGxvb2tzIGxpa2UgdGhpczoKKworICBeQV8iQS4iVTEiIkI4IzEyMDA1MDgx NSAxODoyODowMyEnNDI5MjA2NDEqNDM5NTA3MzUzNiwjNzc1LSE3QCApQ1AKKworVGhlIDMyLWJp dCByZWNlaXZlciByZWFjdHMgbGlrZSBzbzoKKworICBnYXR0ciBsZW5ndGhbNDM5NTA3MzUzNl09 MTAwMTA2MjQwCisKK3RoZSBmaXJzdCBudW1iZXIgYmVpbmcgdGhlIHN0cmluZyBmcm9tIHRoZSBB LXBhY2tldCwgdGhlIHNlY29uZCBiZWluZyB0aGUKK3ZhbHVlIG9mIHRoZSBsb25nIGludCBpdCB3 YXMgY29udmVydGVkIHRvIGJ5IGF0b2woKS4gIENsZWFybHkgbm90IGVxdWFsIGluCit0aGlzIGNh c2UuICBXaGVuIHRoaXMgaGFwcGVucyBLZXJtaXQgc2hvdWxkIHJlamVjdCB0aGUgZmlsZSBpbnN0 ZWFkIG9mCithY2NlcHRpbmcgaXQgYW5kIHRoZW4gZ2V0dGluZyBhIGhvcnJpYmxlIGVycm9yIGEg bG9uZyB0aW1lIGxhdGVyLiAgQWRkZWQKK2NvZGUgdG8gZ2F0dHIoKSB0byBjb252ZXJ0IHRoZSBy ZXN1bHQgb2YgYXRvbCgpIGJhY2sgdG8gYSBzdHJpbmcgYW5kIGNvbXBhcmUKK2l0IHdpdGggdGhl IG9yaWdpbmFsIHN0cmluZzsgaWYgdGhleSdyZSBub3QgZXF1YWwsIHJlamVjdCB0aGUgZmlsZSBv biB0aGUKK2Fzc3VtcHRpb24gdGhhdCB0aGUgb25seSByZWFzb24gdGhpcyBjb3VsZCBoYXBwZW4g aXMgb3ZlcmZsb3cuICBBbHNvIHNvbWUKK290aGVyIGNvZGUgaW4gY2FzZSB0aGUgc2VuZGVyIHNl bmRzIHRoZSBvbmx5IExFTkdUSEsgYXR0cmlidXRlLiAgTm93IGZpbGVzCit3aG9zZSBsZW5ndGhz IGFyZSB0b28gYmlnIGZvciBhIGxvbmcgaW50IGFyZSByZWplY3RlZCByaWdodCBhd2F5LCBwcm92 aWRlZAordGhlIHNlbmRlciBzZW5kcyB0aGUgbGVuZ3RoIGluIGFuIEEgcGFja2V0IGFoZWFkIG9m IHRoZSBmaWxlIGl0c2VsZi4gIElmCit0aGlzIG5ldyBjb2RlIHNob3VsZCBldmVyIGNhdXNlIGEg cHJvYmxlbSwgaXQgY2FuIGJlIGJ5cGFzc2VkIHdpdGggU0VUCitBVFRSSUJVVEUgTEVOR1RIIE9G Ri4gIGNrY2ZuMy5jLCAyNiBBdWcgMjAwNS4KKworQXMgSSByZWNhbGwgZnJvbSB3aGVuIEkgd2Fz IHRlc3RpbmcgdGhpcyBhIGZldyB3ZWVrcyBhZ28sIHdoZW4gdGhlIHRvby1iaWcKK2xlbmd0aCBp cyBub3QgY2F1Z2h0IGF0IEEtcGFja2V0IHRpbWUsIHRoZSB0cmFuc2ZlciBmYWlscyBtb3JlIG9y IGxlc3MKK2dyYWNlZnVsbHkgd2hlbiB0aGUgZmlyc3QgYXR0ZW1wdCBpcyBtYWRlIHRvIHdyaXRl IHBhc3QgdGhlIGxpbWl0LiAgSSB3ZW50Cit0byBkb3VibGVjaGVjayB0aGlzIGJ5IHNlbmRpbmcg YSBiaWcgZmlsZSBmcm9tIHRoZSA2NC1iaXQgU29sYXJpczEwIHZlcnNpb24KK3RvIGEgMzItYml0 IE1hYyBPUyBYIHZlcnNpb24gdGhhdCBkb2VzIG5vdCBoYXZlIHRvZGF5J3MgY29kZS4gIFRoZSBN YWMKK3RoaW5rcyB0aGUgaW5jb21pbmcgZmlsZSBpcyAyR0IgbG9uZyB3aGVuIGl0J3MgcmVhbGx5 IDRHQisuICBCdXQgaW4gdGhpcworY2FzZSwgc29tZXRoaW5nIG5ldyBoYXBwZW5zISAgQWx0aG91 Z2ggdGhlIHBlcmNlbnQgZG9uZSBhbmQgdHJhbnNmZXIgcmF0ZSBnbworbmVnYXRpdmUsIHRoZSBm aWxlIGtlZXBzIGNvbWluZy4gIEl0IHdvdWxkIHNlZW0gdGhhdCBNYWMgT1MgWCBsZXRzIHVzIGNy ZWF0ZQorbG9uZyBmaWxlcyB3aXRob3V0IHVzaW5nIGFueSBzcGVjaWFsIEFQSXMuICBUaGUgdHJh bnNmZXIgcnVucyB0byBjb21wbGV0aW9uLgorTWFjIE9TIFggS2VybWl0IHNheXMgU1VDQ0VTUyAo YnV0IGdldHMgdGhlIGJ5dGUgY291bnQgYW5kIGNwcyB3cm9uZywgb2YKK2NvdXJzZSkuICBCdXQg dGhlbiBhIFNUQVRVUyBjb21tYW5kIHNheXMgRkFJTFVSRS4gIFRoZSBmaWxlIHdhcywgaG93ZXZl ciwKK3RyYW5zZmVycmVkIHN1Y2Nlc3NmdWxseTsgaXQgaXMgZXhhY3RseSB0aGUgc2FtZSBsZW5n dGggYW5kIGNvbXBhcmVzIGJ5dGUKK2ZvciBieXRlIHdpdGggdGhlIG9yaWdpbmFsLiAgVGhpcyB0 ZWxscyBtZSB0aGF0IGluIHRoZSBNYWMgT1MgWCB2ZXJzaW9uIC0tCithbmQgaG93IG1hbnkgb3Ro ZXJzIGxpa2UgaXQ/Pz8gLS0gdG9kYXkncyByZWplY3Rpb24gY29kZSBzaG91bGQgbm90IGJlCitl bmFibGVkLiAgTWVhbndoaWxlIEkgcHV0IHRvZGF5J3MgbmV3IGNvZGUgaW4gI2lmbmRlZiBOT0NI RUNLT1ZFUkZMT1cuLiNlbmRpZiwKK2FuZCBkZWZpbmVkIHRoaXMgc3ltYm9sIGluIHRoZSBNYWMg T1MgWCAxMC40IHRhcmdldC4gIE92ZXIgdGltZSwgSSdsbCBoYXZlCit0byBmaW5kIG91dCB3aGF0 IG90aGVyIHBsYXRmb3JtcyBoYXZlIHRoaXMgY2hhcmFjdGVyaXN0aWMuICBBbmQgb2YgY291cnNl CitJJ2xsIGFsc28gaGF2ZSB0byBkbyBzb21ldGhpbmcgYWJvdXQgZmlsZS10cmFuc2ZlciBkaXNw bGF5LCBzdGF0aXN0aWNzLCBhbmQKK3N0YXR1cy4gIG1ha2VmaWxlLCBja2NmbjMuYywgMjYgQXVn IDIwMDUuCisKK0Zyb20gbm93IG9uIEknbSBnb2luZyB0byBidW1wIHRoZSBEZXYueHggbnVtYmVy IGVhY2ggdGltZSBJIHVwbG9hZCBhIG5ldworY2tkYWlseS4gIFRoaXMgb25lIHdpbGwgYmUgRGV2 LjAyLiAgY2tja21haS5jLCAyNiBBdWcgMjAwNS4KKworR290IHJpZCBvZiBhbGwgdGhlIGV4dHJh bmVvdXMgRnJlZUJTRCA0IGFuZCA1IGJ1aWxkIHRhcmdldHMuICBOb3cgdGhlcmUncworb25lIChm cmVlYnNkKSBmb3IgYWxsIEZyZWVCU0QgNC4xIGFuZCBsYXRlci4gIG1ha2VmaWxlLCAyNyBBdWcg MjAwNS4KKworTWFjIE9TIFggMTAuNCAoVGlnZXIpIGlzIGEgNjQtYml0IE9TLiAgQnVpbGRpbmcg Qy1LZXJtaXQgMG4gMTAuNC4yIHdpdGhvdXQKK2FueSBzcGVjaWFsIHN3aXRjaGVzIHN0aWxsbCBn aXZlcyBhIDMyLWJpdCBleGVjdXRhYmxlLiAgRGl0dG8gYnVpbGRpbmcgd2l0aAorLW1wb3dlcnBj NjQuICBGdXJ0aGVyIGludmVzdGlnYXRpb24gdHVybmVkIHVwIGEgdGlwIHNoZWV0IG9uIE15U1FM IHRoYXQgc2F5cworeW91IGhhdmUgdG8gaW5jbHVkZSBhbGwgb2YgdGhlc2U6IC1tcG93ZXJwYzY0 IC1tY3B1PUc1IC1tdHVuZT1HNSAtYXJjaAorcHBjNjQuICBUaGF0IGRpZCB0aGUgdHJpY2suICBO ZXcgbWFrZWZpbGUgdGFyZ2V0OiBtYWNvc3gxMC40XzY0LiAgQnV0IHRoZQorMTAuNC4yIHN5c3Rl bSBJIHRyaWVkIGRpZCBub3QgaGF2ZSA2NC1iaXQgW25dY3Vyc2VzIG9yIHJlc29sdiBsaWJzLCBz byB0aGlzCitidWlsZCBoYXMgbm8gLUROT0NVUlNFUyAtRE5PX0ROU19TUlYuICBtYWtlZmlsZSwg MjcgQXVnIDIwMDUuCisKK0NyZWF0ZWQgYSBzeW1ib2wgQ0tfNjRCSVQgdG8gaW5kaWNhdGUgdHJ1 ZSA2NC1iaXQgYnVpbGRzIGF0IGNvbXBpbGUgdGltZS4KK0FkZGVkIDY0LWJpdCBhbm5vdW5jZW1l bnQgdG8gdGhlIHN0YXJ0dXAgaGVyYWxkIGFuZCB0aGUgVkVSU0lPTiB0ZXh0LgorY2tjZGViLmgs IGNrdXVzW3I1XS5jLCAyNyBBdWcgMjAwNS4KKworQWRkZWQgYSBidWlsdC1pbiB2YXJpYWJsZSBc dihiaXRzKSB0byBpbmRpY2F0ZSB0aGUgc2l6ZSBvZiB0aGUgYnVpbGQKKygxNiwgMzIsIDY0LCBv ciB3aGF0ZXZlciBlbHNlIHNpemVvZigpIG1pZ2h0IHJlcG9ydCkuICBja3V1c3IuaCwgY2t1dXM0 LmMsCisyNyBBdWcgMjAwNS4KKworR290IHJpZCBvZiBhbGwgdGhlIHdhcm5pbmdzIGluIDY0LWJp dCBNYWMgT1MgWCBhYm91dCBhcmdzIHRvIGdldHNvY2tvcHQoKSwKK2dldHNvY2tuYW1lKCksIGFu ZCBnZXRwZWVybmFtZSgpLCBhbmQgdGhlIGNvbXBhcmlzb25zIG9uIHRoZSByZXR1cm4gdmFsdWUK K29mIGluZXRfYWRkcigpLiAgY2tjbmV0LltjaF0sIDI3IEF1ZyAyMDA1LgorCitOb3cgdG8gY2hl Y2sgdGhlIGVmZmVjdHMgb24gb3RoZXIgYnVpbGRzLi4uCisgIExpbnV4IG9uIEFNRDY0OiBvay4K KyAgTGludXggb24gSUE2NDogb2suCisgIExpbnV4IG9uIGkzODY6IG9rLgorICBNYWMgT1MgWCAx MC4zLjkgMzItYml0OiBvay4KKyAgU29sYXJpcyAxMCA2NC1iaXQ6IG9rLgorICBTb2xhcmlzIDkg MzItYml0OiBvay4KKyAgVHJ1NjQgNC4wRjogb2suCisgIEZyZWVCU0QgNC4xMTogb2suCisgIEZy ZWVCU0QgNS40IGlhNjQgKDY0LWJpdCk6IG9rLgorICBGcmVlQlNEIDUuNCBpMzg2ICgzMi1iaXQp OiBvay4KKworVGhlIFRydTY0IDUuMUIgYnVpbGQgdG90YWxseSBibGV3IHVwIGJlY2F1c2UgdGhl eSBoYXZlIHRoZWlyIG93biB1bmlxdWUKK3NvY2tvcHQvZXRjIGxlbmd0aC1hcmd1bWVudCBkYXRh IHR5cGUgKGludCEpLCBzbyBJIGhhZCB0byByb2xsIGJhY2sgb24gdXNpbmcKK3NvY2tsZW5fdCBm b3IgdGhpcyBpbiBhbGwgNjQtYml0IGJ1aWxkcy4gIENoZWNrZWQgdG8gbWFrZSBzdXJlIGl0IHN0 aWxsCitidWlsZHMgb24gVHJ1NjQgNC4wRiBhZnRlciB0aGlzIGNoYW5nZSAoaXQgZG9lcykuICBj a2NuZXQuaCwgMjcgQXVnIDIwMDUuCisKK1RoZSBIUC1VWCAxMWkvaWE2NCBidWlsZCBjb21lcyBv dXQgdG8gYmUgMzItYml0IGJ1dCB0aGlua3MgaXQncyA2NC1iaXQuCitDS182NEJJVCBpcyBzZXQg YmVjYXVzZSBfX2lhNjQgaXMgZGVmaW5lZC4gIFNvIGhvdyBkbyBJIGFjdHVhbGx5IG1ha2UgYQor NjQtYml0IEhQLVVYIGJ1aWxkPyAgSSB0cmllZCBhZGRpbmcgK0RENjQgdG8gQ0ZMQUdTLCBhbmQg dGhpcyBnZW5lcmF0ZXMKKzY0LWJpdCBvYmplY3QgZmlsZXMgYnV0IGxpbmtpbmcgZmFpbHMgdG8g ZmluZCB0aGUgbmVlZGVkIDY0LWJpdCBsaWJzCisoZS5nLiAtbG0pLiAgRm9yIG5vdyBJIGFkZGVk IGFuIGV4Y2VwdGlvbiBmb3IgSFBVWCB0byB0aGUgQ0tfNjRCSVQKK2RlZmluaXRpb24gc2VjdGlv bi4gIGNrY2RlYi5oLCAyNyBBdWcgMjAwNS4KKworVG9vayB0aGUgdGltZSB0byB2ZXJpZnkgbXkg cmVjb2xsZWN0aW9uIGFib3V0IHRoZSAiZ3JhY2VmdWwgZmFpbHVyZSIgb24gYQorcmVndWxhciBQ ZW50aXVtIExpbnV4IHN5c3RlbSB3aGVuIHJlY2VpdmluZyBhIHRvby1iaWcgZmlsZS4uLiAgT0ss IGl0J3Mgbm90CitleGFjdGx5IGdyYWNlZnVsLiAgSXQgZ2V0cyBhICJGaWxlIHNpemUgbGltaXQg ZXhjZWVkZWQiIGVycm9yOyB0aGUgbWVzc2FnZQoraXMgcHJpbnRlZCBpbiB0aGUgbWlkZGxlIG9m IHRoZSBmaWxlLXRyYW5zZmVyIGRpc3BsYXksIGFwcGFyZW50bHkgbm90IGJ5CitLZXJtaXQsIGFu ZCBLZXJtaXQgZXhpdHMgaW1tZWRpYXRlbHkuICBMb29rcyBsaWtlIGEgdHJhcC4uLiAgWXVwLiAg IkZpbGUKK3NpemUgbGltaXQgZXhjZWVkZWQiIGlzIFNJR1hGU1ogKDI1KS4gIFdoYXQgaGFwcGVu cyBpZiB3ZSBzZXQgaXQgdG8gU0lHX0lHTj8KK0p1c3QgdGhlIHJpZ2h0IHRoaW5nOiBUaGUgcmVj ZWl2ZXIgZ2V0cyAiRXJyb3Igd3JpdGluZyBkYXRhIiBhdCAyMTQ3NDgzNjQ3CitieXRlcywgc2Vu ZHMgRS1wYWNrZXQgdG8gc2VuZGVyIHdpdGggdGhpcyBtZXNzYWdlLCBhbmQgcmVjb3ZlcnMgd2l0 aCB0b3RhbAorZ3JhY2UgKGRyYWlucyBwYWNrZXQgYnVmZmVycywgcmV0dXJucyB0byBwcm9tcHQp LiAgY2t1dGlvLmMsIDI3IEF1ZyAyMDA1LgorCitCYWNrZWQgb2ZmIGZyb20gcmVqZWN0aW5nIGEg ZmlsZSBiZWNhdXNlIGl0cyBhbm5vdW5jZWQgc2l6ZSBvdmVyZmxvd3MgYQorbG9uZy4gIE5vdyBp bnN0ZWFkLCBJIHNldCB0aGUgZmlsZSBzaXplIHRvIC0yIChhIG5lZ2F0aXZlIHNpemUgbWVhbnMg dGhlCitzaXplIGlzIHVua25vd24sIGJ1dCB3ZSBoYXZlIGFsd2F5cyB1c2VkIC0xIGZvciB0aGlz OyAtMiBtZWFucyAidW5rbm93biBhbmQKK3Byb2JhYmx5IHRvbyBiaWciKS4gIEluIHRoaXMgY2Fz ZSwgdGhlIGYtdCBkaXNwbGF5IHNheXM6CisKKyAgRmlsZSBTaXplOiBQT1NTSUJMWSBFWENFRURT IExPQ0FMIEZJTEUgU0laRSBMSU1JVAorCit0aGVuIHRoZSB1c2VyIGNhbiBpbnRlcnJ1cHQgaXQg d2l0aCBYIG9yIHdoYXRldmVyLCBvciBjYW4gbGV0IGl0IHJ1biBhbmQKK3NlZSBpZiBtYXliZSAo YXMgaW4gdGhlIGNhc2Ugb2YgTWFjIE9TIFgpIGl0IHdpbGwgYmUgYWNjZXB0ZWQgYW55d2F5LiAg VGhpcword2F5LCB3ZSBza2lwIGFsbCB0aGUgYm9ndXMgY2FsY3VsYXRpb25zIG9mIHBlcmNlbnQg ZG9uZSwgdGltZSByZW1haW5pbmcsIGV0Yy4KK2NrY2ZuMy5jLCBja3V1c3guYywgMjcgQXVnIDIw MDUuCisKK0Rpc2NvdmVyZWQgdGhhdCBWTVMgQy1LZXJtaXQgb24gQWxwaGEgYW5kIElBNjQgaXMg YSAzMi1iaXQgYXBwbGljYXRpb247CitzaXplb2YobG9uZykgPT0gc2l6ZW9mKGNoYXIgKikgPT0g NC4gIFRyaWVkIGFkZGluZyAvUE9JTlRFUl9TSVpFPTY0IHRvIFZNUworREVDQyBidWlsZHMgb24g QWxwaGEgYW5kIElBNjQsIGJ1dCB0aGUgcmVzdWx0cyBhcmVuJ3QgZ3JlYXQuICBUb25zIG9mCit3 YXJuaW5ncyBhYm91dCBwb2ludGVyIHNpemUgbWlzbWF0Y2hlcyBiZXR3ZWVuIEtlcm1pdCBwb2lu dGVycyBhbmQgUk1TIG9uZXMsCithbmQgdGhlIGV4ZWN1dGFibGUgZG9lc24ndCBydW4uICBJdCBh cHBlYXJzIHRoYXQgYWNjZXNzIHRvIGxvbmcgZmlsZXMKK3dvdWxkIHJlcXVpcmUgYSBsb3Qgb2Yg aGFja2luZywgc2ltaWxhciB0byB3aGF0J3MgbmVlZGVkIGZvciAzMi1iaXQgTGludXguCisKKy0t LSBEZXYuMDI6IDI3IEF1ZyAyMDA1IC0tLQorCitGcm9tIEplZmYsIDI4IEF1ZyAyMDA1LgorIC4g Rml4IFNTSCBHTE9CQUwtS05PV04tSE9TVFMtRklMRSAvIFVTRVItS05PV04tSE9TVFMtRklMRSBw YXJzaW5nLCBja3V1czMuYy4KKyAuIFBpY2sgdXAgSzk1U1RBUlRGTEFHUyBmcm9tIGVudmlyb25t ZW50LCBja3V1czQuYy4KKyAuIEZpeCBzb21lIHR5cG9zIGluIGNvbW1hbmQtbGluZSBwcm9jZXNz aW5nICgtcSksIGNrdXVzNC5jLgorIC4gQmUgc3VyZSB0byBzdXBwcmVzcyBoZXJhbGQgaWYgc3Rh cnRlZCB3aXRoIC1xLCBja3V1czcuYy4KKyAuIEZpeCBzc2ggY29tbWFuZC1saW5lIHN3aXRjaGVz LCBja3V1c3kuYy4KKworRXJpYyBTbXV0eiBjb21wbGFpbmVkIHRoYXQgSFRUUCBQT1NUIHdhcyBh ZGRpbmcgYW4gZXh0cmFuZW91cyBibGFuayBsaW5lLAord2hpY2ggcHJldmVudGVkIGhpcyBhcHBs aWNhdGlvbiBmcm9tIHN1Y2Nlc3NmdWxseSBwb3N0aW5nLiAgUkZDIDI2MTYgc3RhdGVzCisoaW4g U2VjdGlvbiA0LjEpOgorCisgICBJbiB0aGUgaW50ZXJlc3Qgb2Ygcm9idXN0bmVzcywgc2VydmVy cyBTSE9VTEQgaWdub3JlIGFueSBlbXB0eQorICAgbGluZShzKSByZWNlaXZlZCB3aGVyZSBhIFJl cXVlc3QtTGluZSBpcyBleHBlY3RlZC4gSW4gb3RoZXIgd29yZHMsIGlmCisgICB0aGUgc2VydmVy IGlzIHJlYWRpbmcgdGhlIHByb3RvY29sIHN0cmVhbSBhdCB0aGUgYmVnaW5uaW5nIG9mIGEKKyAg IG1lc3NhZ2UgYW5kIHJlY2VpdmVzIGEgQ1JMRiBmaXJzdCwgaXQgc2hvdWxkIGlnbm9yZSB0aGUg Q1JMRi4KKworICAgQ2VydGFpbiBidWdneSBIVFRQLzEuMCBjbGllbnQgaW1wbGVtZW50YXRpb25z IGdlbmVyYXRlIGV4dHJhIENSTEYncworICAgYWZ0ZXIgYSBQT1NUIHJlcXVlc3QuIFRvIHJlc3Rh dGUgd2hhdCBpcyBleHBsaWNpdGx5IGZvcmJpZGRlbiBieSB0aGUKKyAgIEJORiwgYW4gSFRUUC8x LjEgY2xpZW50IE1VU1QgTk9UIHByZWZhY2Ugb3IgZm9sbG93IGEgcmVxdWVzdCB3aXRoIGFuCisg ICBleHRyYSBDUkxGLgorCitUaGlzIHNlZW1zIHByZXR0eSBjbGVhci4gIE9uZSBzZWN0aW9uIG9m IGNvZGUgaW4gaHR0cF9wb3N0KCkgKGp1c3QgYWJvdmUgdGhlCitwb3N0b3BlbjogbGFiZWwpIHdh cyBhcHBlbmRpbmcgYSBDUkxGIHRvIGEgYnVmZmVyIHdob3NlIGxhc3QgYWxyZWFkeSB3YXMKK3Rl cm1pbmF0ZWQgYnkgQ1JMRiwgYW5kIHRoZW4gYXBwZW5kZWQgYSBzZWNvbmQgQ1JMRjsgdGh1cyB0 d28gZW1wdHkgbGluZXMuCitJIHJlbW92ZWQgdGhlIHNlY29uZCBvbmUuICBja2NuZXQuYywgMjgg QXVnIDIwMDUuCisKK0kgbG9va2VkIGludG8gdGhlIDY0LWJpdG5lc3Mgb2YgTmV0QlNELCBpdCBz ZWVtcyB0byBiZSBsaWtlIExpbnV4IGFuZAorRnJlZUJTRCBvbiA2NC1iaXQgaGFyZHdhcmUsIGku ZS4geW91IGp1c3QgYnVpbGQgaXQgdGhlcmUgYW5kIGl0IHdvcmtzLCBhdAorbGVhc3Qgb24gQWxw aGEgYW5kIEFNRDY0LCBnb2luZyBiYWNrIHRvIE5ldEJTRCAxLjQgb3IgMS41LiAgQnV0IEkgZG9u J3QgaGF2ZQorYWNjZXNzIHRvIGFueSBvZiB0aGVzZSBmb3IgdmVyaWZpY2F0aW9uIGFuZCBkb2N1 bWVudGF0aW9uIG9uIHRoZSBXZWIgaXMKK3NjYW50eS4KKworQ2hlY2tlZCBQZXRlckUncyBjb21w bGFpbnQgYWdhaW4gb2Ygd2FybmluZ3MgaW4gY2t1dGlvLmMgYWJvdXQgcGFyYW1ldGVyCitsaXN0 IG9mIGdldFt1Z11pZCgpIGFuZCBnZXRlW3VnXWlkKCkuICBXaGVuIEkgIm1ha2UgaHB1eDExMDBv IiBvbiBIUC1VWAorMTEuMTEgKFBBLVJJU0MpLCB0aGVyZSBhcmUgZGVmaW5pdGVseSBubyB3YXJu aW5ncy4gIEhlIHNheXMgdGhlIHNhbWUgdGhpbmcKK2hhcHBlbnMgb24gMTAueHgsIGJ1dCBJIGRv bid0IGhhdmUgYWNjZXNzIHRvIHRoYXQgYW55IG1vcmUuICBJIGFsc28gZGlkCisibWFrZSBocHV4 MTEwMG8iIG9uIEhQLVVYIDExLjIzICgxMWkgdjIpIChQQS1SSVNDKSwgYWxzbyBubyB3YXJuaW5n cy4KKyhFeGNlcHQgaW4gYm90aCBjYXNlcywgYSB3YXJuaW5nIGFib3V0IGEgY29tbWVudCB3aXRo aW4gYSBjb21tZW50IGluCisvdXNyL2luY2x1ZGUvc3lzL3B0eWlvLmgpLiAgT24gSFAtVVggMTFp IHYyIG9uIEl0YW5pdW0sIGhvd2V2ZXIsIHRoZXJlIGFyZQorVE9OUyBvZiB3YXJuaW5ncywgbW9z dGx5IG9mIHRoZSAidmFyaWFibGUgc2V0IGJ1dCBuZXZlciB1c2VkIiBraW5kLiAgQWxzbworImRv bGxhciBzaWduIHVzZWQgaW4gaWRlbnRpZmllciIuICBUcmFja2luZyB0aGlzIGxhc3Qgb25lIGRv d24sIEkgc2VlIGl0J3MKK2NvbXBsYWluaW5nIGFib3V0IGNvZGUgdGhhdCdzIGluICNpZmRlZnMg Zm9yIG90aGVyIHBsYXRmb3Jtcywgc3VjaCBhcworQXBvbGxvIEFlZ2lzLiAgSXMgImFlZ2lzIiBk ZWZpbmVkIGluIEhQLVVYIDExaSB2Mi9JQTY0PyAgTm8hICAoSXQgd291bGQgc2hvdwordXAgaW4g U0hPVyBGRUFUVVJFUyBpZiBpdCB3YXMuKSAgU29tZSBwaGFzZSBvZiB0aGUgY29tcGlsZXIgaXMg Y29tcGxhaW5pbmcKK2Fib3V0IGNvZGUgdGhhdCBpdCBzaG91bGQgYmUgc2tpcHBpbmcgKGFuZCB0 aGF0LCBpbiBmYWN0LCBpdCAqaXMqIHNraXBwaW5nCitpdCBiZWNhdXNlIHRoZSBidWlsZCBpcyBz dWNjZXNzZnVsKS4gIEl0J3MgYXMgaWYgY2MgaXMgcnVubmluZyBsaW50IGZvciBtZQorYnV0IG5v dCB0ZWxsaW5nIGxpbnQgd2hpY2ggbWFjcm9zIGFyZSBkZWZpbmVkIGFuZCB3aGljaCBhcmUgbm90 LgorCitWZXJpZmllZCB0aGF0IDY0LWJpdCBsaW5raW5nIGZhaWxzIGluIHRoZSBzYW1lIHdheSBm b3IgSFAtVVggMTFpIHYyIG9uIGJvdGgKK0lBNjQgYW5kIFBBLVJJU0MuICBTZW50IGEgcXVlcnkg dG8gSFAuCisKK0NvbXBpbGluZyBja2NuZXQuYyBhbmQgY2tjZnRwLmMgZ290IHRoZSBmYW1pbGlh ciBzb2Nrb3B0LXJlbGF0ZWQgd2FybmluZ3Mgb24KK0hQLVVYIDExaSB2MjsgdHVybnMgb3V0IGl0 IGlzIGp1c3QgbGlrZSBUcnU2NCBVbml4IGluIHVzaW5nIGFuIGludCBmb3IgdGhlCitsZW5ndGgg YXJndW1lbnQuICBBZGRlZCBhbm90aGVyIHNwZWNpYWwgY2FzZSBhbmQgdGhlIHdhcm5pbmdzIHdl bnQgYXdheS4KK2NrY25ldC5oLCAyOCBBdWcgMjAwNS4KKworQWRkZWQgc29tZSBzdHVmZiB0byBT SE9XIEZFQVRVUkVTIHRvIHNlZSB3aGF0IGtpbmRzIG9mIG1hY3JvcyBhcmUgZXhwb3NlZAorKGUu Zy4gSU5UX01BWCwgTE9OR19NQVgsIExMT05HX01BWCwgZXRjKSBhbmQgYWxzbyBzaG93IHNpemVv Zihsb25nIGxvbmcpIGFuZAorc2l6ZW9mKG9mZl90KS4gIEJ1aWxkaW5nIHRoaXMgY29kZSBhbGwg b3ZlciB0aGUgcGxhY2Ugd2lsbCBnaXZlIG1lIGFuIGlkZWEKK29mIGhvdyB3aWRlc3ByZWFkIHRo ZXNlIGRhdGEgdHlwZXMgYXJlLCBhbmQgdG8gd2hhdCBleHRlbnQgSSBjYW4gdGVsbAord2hldGhl ciB0aGV5IGFyZSBhdmFpbGFibGUgZnJvbSBjbHVlcyBpbiB0aGUgaGVhZGVyIGZpbGVzLiAgKEF0 IGZpcnN0CitnbGFuY2UsIGl0IGFwcGVhcnMgdGhhdCBJJ20gbm90IHBpY2tpbmcgdXAgPGxpbWl0 cy5oPiwgYnV0IGFkZGluZyBhbgorI2luY2x1ZGUgZm9yIGl0IGlzIGp1c3QgYXNraW5nIGZvciB0 cm91YmxlLikgIE5vIGNvbXBsYWludHMgYWJvdXQgbG9uZyBsb25nCitvciBvZmZfdCBmcm9tIFNv bGFyaXMgOSBvciByZWNlbnQgTGludXhlcy4gIGNrdXVzNS5jLCAyOCBBdWcgMjAwNS4KKworRml4 ZWQgYSB3YXJuaW5nIGluIEhQLVVYIDEwIGFuZCAxMSBzdGVtbWluZyBmcm9tIHNvbWUgb2xkLXN0 eWxlIHByb3RvdHlwZXMKK2luIGNrdXRpby5jIGZvciBnZXRbcmVdW2d1XWlkKCkuICBja3V0aW8u YywgMjkgQXVnIDIwMDUuCisKK1VwZGF0ZWQgbWluaXgzIHRhcmdldCBmcm9tIEFuZHkgVGFuZW5i YXVtLiAgbWFrZWZpbGUsIDI5IEF1ZyAyMDA1LgorCitQZXRlckUgY29uZmlybXMgdGhhdCAibG9u ZyBsb25nIiBhbmQgb2ZmX3QgYXJlIGF2YWlsYWJsZSBpbiBhbGwgSFAtVVggMTAgYW5kCisxMSwg YW5kIGluIEhQLVVYIDkgb24gUEEtUklTQyBidXQgbm90IE1vdG9yb2xhLiAgMzAgQXVnIDIwMDUu CisKK0dvdCA2NC1iaXQgYnVpbGRzIHRvIHdvcmsgb24gSFAtVVguICBBY2NvcmRpbmcgdG8gbXkg bm90ZXMsIEpvaG4gQmlnZyBvZiBIUAorc2FpZCAoaW4gMTk5OSkgdGhhdCBIUC1VWCAxMC4zMCBh bmQgbGF0ZXIgcmVxdWlyZSBQQS1SSVNDIDEuMSwgYW5kIGRvIG5vdAord29yayBvbiBQQS1SSVND IDEuMC4gIEJ1dCBpcyBQQSAxLjAgNjQtYml0IG9yIHdoYXQ/ICBUb2RheSwgQWxleCBNY0thbGUg b2YKK0hQIHNhaWQgIlRoZSA2NC1iaXQgYmluYXJpZXMgd2lsbCB3b3JrIG9uIGFsbCBtYWNoaW5l cyB0aGF0IGhhdmUgdGhlIHNhbWUgb3IKK2xhdGVyIHJlbGVhc2Ugb2YgSFAtVVggKGV4Y2x1ZGlu ZyBQQS1SSVNDIDEuMSBtYWNoaW5lcykiLiAgU3RpbGwgbmVlZAorY2xhcmlmaWNhdGlvbi4uLiAg TWF5YmUgaXQncyB0aGF0IGFsbCBJQTY0IGJ1aWxkcyBjYW4gYmUgNjQtYml0IGJ1dCBJIG5lZWQK K2R1YWwgYnVpbGRzIGZvciBQQS1SSVNDLiAgTWVhbndoaWxlIEkgc3RhcnRlZCB0cmFuc2ZlciBv ZiBhIDRHQisgZmlsZSBmcm9tCitTb2xhcmlzIHRvIEhQLVVYIDExaSBidXQgaXQgZXhjZWVkZWQg c29tZSBxdW90YSBvbiB0aGUgSFAgbG9uZyBiZWZvcmUgaXQKK2FwcHJvYWNoZWQgdGhlIDJHIHBv aW50LiAgSXQgZmFpbGVkIGNsZWFubHkgYW5kIHVwIHVudGlsIHRoZW4gaXQgd2FzIHdvcmtpbmcK K2ZpbmUgKG51bWJlcnMsIHN0YXRzLCBldGMpLiAgMzAgQXVnIDIwMDUuCisKK1N1cHBvcnQgb2Yg bGFyZ2UgZmlsZXMgaW4gMzItYml0IGJ1aWxkcyBiZWdhbiBpbiAxMC4yMC4gIDY0LWJpdCBhcHBs aWNhdGlvbgorc3VwcG9ydCBiZWdhbiBpbiAxMS4wMCwgYnV0IG5vdCBhbGwgbWFjaGluZXMgdGhh dCBydW4gMTEuMDAgc3VwcG9ydCA2NCBiaXRzLgorQWJvdXQgbG9uZyBmaWxlcywgc2VlIEhQIC91 c3Ivc2hhcmUvZG9jL2xnX2ZpbGVzLnR4dC4KKworUGV0ZXJFIGZvdW5kIHRoYXQgY2VydGFpbiBw YXR0ZXJucyBjYW4gc3RpbGwgbWFrZSBLZXJtaXQgbG9vcDsgZXhhbXBsZToKKworICBpZiBtYXRj aCBUMDEwMTEtMDA4NTYtMjEtNjMyLTA3MyAqW2FiY10geyBlY2hvIEdPT0QgfSBlbHNlIHsgZWNo byBCQUQgfQorICBpZiBtYXRjaCBUMDEwMTEtMDA4NTYtMjEtNjMyLTA3MyAqW2Etel0geyBlY2hv IEdPT0QgfSBlbHNlIHsgZWNobyBCQUQgfQorCitUaGUgbWluaW11bSBvZmZlbmRpbmcgcGF0dGVy biBpcyAqIGZvbGxvd2VkIGltbWVkaWF0ZWx5IGJ5IGFuIFt4eHhdCitjb25zdHJ1Y3Rpb24sIGZv bGxvd2VkIGJ5IGFueXRoaW5nIGVsc2UsIGluY2x1ZGluZyBub3RoaW5nLiAgUHJldmlvdXMKK3Zl cnNpb25zIG9mIEtlcm1pdCBoYW5kbGVkIHRoaXMgb25lIGNvcnJlY3RseSwgd2l0aG91dCBsb29w aW5nIChidXQgZmFpbGVkCitjZXJ0YWluIG1hdGNoZXMgdGhhdCBzaG91bGQgaGF2ZSBzdWNjZWVk ZWQpLiAgVGhlIG5ldyBzZWN0aW9uIG9mIGNvZGUgSQorYWRkZWQgb24gMTUgSnVuZSwgdXBvbiBm YWlsdXJlIHRvIG1hdGNoLCBhZHZhbmNlcyB0aGUgc3RyaW5nIHBvaW50ZXIgYW5kCitiYWNrcyB1 cCB0aGUgcGF0dGVybiB0byB0aGUgcHJldmlvdXMgcGF0dGVybiwgYW5kIHN0YXJ0cyBhZ2Fpbgor KHJlY3Vyc2l2ZWx5KS4gIEhvd2V2ZXIsIHRoZXJlIG5lZWRlZCB0byBiZSBhIGNvcnJlc3BvbmRp bmcgY2hlY2sgYXQgZW50cnkKK2ZvciBhbiBlbXB0eSB0YXJnZXQgc3RyaW5nLiAgY2ttYXRjaCgp OiBja2NsaWIuYywgMTIgU2VwIDIwMDUuCisKK1BldGVyRSBkaXNjb3ZlcmVkIHRoYXQgImtlcm1p dCAteSBmaWxldGhhdGRvZXNub3RleGl0IiBnaXZlcyBhbiBlcnJvbmVvdXMKK2Vycm9yIG1lc3Nh Z2UgdGhhdCBuYW1lcyB0aGUgdXNlcidzIGN1c3RvbWl6YXRpb24sIHJhdGhlciB0aGFuIHRoZSBu YW1lCitnaXZlbiBvbiB0aGUgY29tbWFuZCBsaW5lLiAgZG9pbml0KCk6IGNrdXVzNS5jLCAxMiBT ZXAgMjAwNS4KKworRlJFQUQgZG9lcyBub3QgZ2V0IGFuIGVycm9yIGlmIGl0IHRyaWVzIHRvIHJl YWQgYSByZWNvcmQgb3IgZmlsZSBvciBwaWVjZSBvZgorZmlsZSB0aGF0IGlzIHRvbyBiaWcgZm9y IGl0cyBidWZmZXIuICBJbiBwYXJ0aWN1bGFyLCBGUkVBRCAvU0laRTp4eHggc2VlbXMKK3RvIHN1 Y2NlZWQgZXZlbiBpZiBsZXNzIHRoYW4geHh4IHdhcyByZWFkLiAgSXQgc2hvdWxkIGZhaWwgdW5s ZXNzLCBwZXJoYXBzLAoraXQgc3VjY2Vzc2Z1bGx5IHJlYWQgdXAgdG8gdGhlIGVuZCBvZiB0aGUg ZmlsZS4gIEZ1cnRoZXJtb3JlLCBpZiB4eHggaXMKK2JpZ2dlciB0aGFuIHRoZSBmaWxlIGJ1ZmZl ciBzaXplLCBpdCBzaG91bGQgY29tcGxhaW4uICBUaGUgYnVmZmVyIGlzCitsaW5lW0xJTkJVRlNJ Wl0sIDMySy4gIFRoZSBsYWNrIG9mIGZhaWx1cmUgd2FzIGR1ZSB0byBjb2RlIGluIGRvZmlsZSgp IHRoYXQKK2FkanVzdGVkIHRoZSBnaXZlbiBzaXplIHNpbGVudGx5IGlmIGl0IHdhcyBncmVhdGVy IHRoYW4gdGhlIGJ1ZmZlciBzaXplLAord2hpY2ggSSByZW1vdmVkLCBhbmQgYWxzbyBhZGRlZCBh IGNoZWNrIHdoZW4gcGFyc2luZyB0aGUgL1NJWkU6IHN3aXRjaC4KK2RvZmlsZSgpOiBja3V1czcu YywgMTIgU2VwIDIwMDUuCisKK1RoYXQgc3RpbGwgZGlkbid0IGhlbHAgd2l0aCBGUkVBRCAvU0la RTpuIHJldHVybmluZyBsZXNzIHRoYW4gbiBieXRlcywgZXZlbgord2hlbiB0aGV5IHdlcmUgYXZh aWxhYmxlLiAgVGhhdCdzIGJlY2F1c2UgdGhlIHVuZGVybHlpbmcgcm91dGluZSwgel9pbigpLAor ZGlkbid0IGNoZWNrIGZyZWFkKCkncyByZXR1cm4gY29kZSwgd2hpY2ggaXMgdGhlIG51bWJlciBv ZiBieXRlcyByZWFkLgorSWYgZnJlYWQoKSBoYXMgc21hbGxlciBidWZmZXJzLCBpdCBuZWVkcyB0 byBiZSBjYWxsZWQgaW4gYSBsb29wLiAgel9pbigpOgorY2t1dXM3LmMsIDEyIFNlcCAyMDA1Lgor CitGbGVuKCkgZmFpbHMgb24gc3RyaW5ncyBvZiBsZW5ndGggODE5MiBvciBtb3JlLiAgVGhlIGxp bWl0YXRpb24gaXMgaW4gdGhlCitjYWxsZXJzIG9mIHp6c3RyaW5nLCB3aGljaCBzZWVtIHRvIGJl IHNwZWNpZnlpbmcgYW4gOEsgYnVmZmVyLCBpbiB0aGlzIGNhc2UKK2ZuZXZhbCgpLiAgVGhlIG9w ZXJhYmxlIHN5bWJvbHMgYXJlIEZOVkFMTCAobWF4IGxlbmd0aCBvZiB2YWx1ZSByZXR1cm5lZCBi eQorYSBmdW5jdGlvbikgYW5kIE1BWEFSR0xFTiAobWF4aW11bSBsZW5ndGggb2YgYW4gYXJndW1l bnQgdG8gYSBmdW5jdGlvbikuICBJCitjaGFuZ2VkIGJvdGggb2YgdGhlc2UgZm9yIEJJR0JVRk9L IGJ1aWxkcyB0byBiZSBDTURCTC4gIEJ1ZmZlcnMgY2FuIG5ldmVyIGJlCitpbmZpbml0ZSwgdGhl cmUgaGFzIHRvIGJlIGEgbGltaXQuICBJdCdzIGltcG9ydGFudCB0byBtYWtlIGV2ZXJ5dGhpbmcg d29yaworY29uc2lzdGVudGx5IHdpdGhpbiB0aGF0IGxpbWl0LCBhbmQgdG8gbWFrZSBzb21ldGhp bmcgdXNlZnVsIGhhcHBlbiB3aGVuIHRoZQorbGltaXQgaXMgZXhjZWVkZWQuICBBdCB0aGlzIHBv aW50LCBJIGNhbiBwcm9iYWJseSBhbHNvIGluY3JlYXNlIHRoZSBsaW1pdHMKK2ZvciBtb2Rlcm4g MzItYml0IHN5c3RlbXMsIGFuZCBjZXJ0YWlubHkgZm9yIDY0LWJpdCBvbmVzLiAgQWxzbyB0aGVy ZSdzIG5vCitwb2ludCBpbiB3b3JyeWluZyBhYm91dCAxNi1iaXQgcGxhdGZvcm1zIGFueSBtb3Jl OyBlYXJsaWVyIEMtS2VybWl0IHZlcnNpb25zCitjYW4gc3RpbGwgYmUgdXNlZCBvbiB0aGVtIGlm IG5lY2Vzc2FyeS4gY2t1dXNyLmgsIDEyIFNlcCAyMDA1LgorCitTcGVjaWFsICNpZmRlZnMgZm9y IGZpbmRpbmcgcmVzb2x2LmggYW5kIG5hbWVzZXIuaCBpbiBNSU5JWDMgZnJvbSBBbmR5CitUYW5l bmJhdW0uICBja2NuZXQuYywgMjAgU2VwIDIwMDUuCisKK1BldGVyRSBub3RpY2VkIHRoYXQgY2tt YXRjaCgpLCBldmVuIHRob3VnaCBpdCB3b3JrcyBwcmV0dHkgd2VsbCBub3csIGRvZXMgYQorbG90 IG9mIGV4dHJhIGFuZCB1bm5lY2Vzc2FyeSByZWN1cnNpb24gYWZ0ZXIgZGV0ZXJtaW5pbmcgdGhl IHN0cmluZyBhbmQKK3BhdHRlcm4gZG8gbm90IG1hdGNoLCBhdCBsZWFzdCB3aGVuIHRoZSBwYXR0 ZXJuIGlzIG9mIHRoZSBmb3JtICpbYWJjXS4KK0FmdGVyIHNldmVyYWwgZmFsc2Ugc3RhcnRzIEkg d2FzIGFibGUgcmVkdWNlIHRoaXMgZWZmZWN0IHRvIGEgbWlub3IgbGV2ZWwKKyhidXQgbm90IGVs aW1pbmF0ZSBpdCBhbGwgdG9nZXRoZXIpIGJ5IGNoYW5naW5nIGEgd2hpbGUgbG9vcCBpbnRvIGEg ZG8gbG9vcC4KK2NrbWF0Y2goKTogY2tjbGliLmMsIDE1IE9jdCAyMDA1LgorCitBZGRlZCAtRE5P TE9OR0xPTkcgdG8gSFAtVVggOC4wMCBhbmQgZWFybGllciBidWlsZHMsIGFuZCB0byBNb3Rvcm9s YS1iYXNlZAorSFAtVVggOS4wMCBidWlsZHMuICBUaGlzIGlzIHNpbXBseSB0byBpbmhpYml0IHRo ZSB0ZXN0IGZvciB3aGV0aGVyICJsb25nCitsb25nIiBpcyBzdXBwb3J0ZWQgYnkgdGhlIGNvbXBp bGVyLCBzaW5jZSB3aGVuIGl0IGlzbid0LCB0aGUgbW9kdWxlCitjb250YWluaW5nIHRoZSB0ZXN0 IHdvbid0IGNvbXBpbGUuICBtYWtlZmlsZSwgY2t1dXM1LmMsIDE2IE9jdCAyMDA1LgorCitNYWtp bmcgQVNLUSBhbHdheXMgZWNobyBhc3Rlcmlza3MgaXMgYSBiYWQgaWRlYSwgYmVjYXVzZSB3aGVu IGl0IGRvZXNuJ3QKK2VjaG8sIGl0J3MgdGhlIHBlcmZlY3Qgd2F5IHRvIHJlYWQgc2lsZW50bHkg ZnJvbSBzdGRpbiwgZS5nLiBpbiBhIENHSSBzY3JpcHQKKyhJTlBVVCBjYW4gYWxzbyBiZSB1c2Vk IGZvciB0aGlzIGJ1dCBpdCdzIG5vdCBhcyBzdHJhaWdodGZvcndhcmQpLiAgU28gSSBwdXQKK3Ro ZSBkZWZhdWx0IGZvciBBU0tRIGJhY2sgdG8gbm8gZWNob2luZywgdGhlbiBnYXZlIEFTS1EgaXRz IG93biBzd2l0Y2gKK3RhYmxlLCB3aGljaCBpcyB0aGUgc2FtZSBhcyBmb3IgQVNLIHdpdGggdGhl IGFkZGl0aW9uIG9mIGFuIC9FQ0hPOnggc3dpdGNoLAord2hpY2ggdGVsbHMgd2hhdCBjaGFyYWN0 ZXIgdG8gZWNoby4gIGNrdWNtZC5jLCBja3V1c1syNl0uYywgMTcgT2N0IDIwMDUuCisKK0ZpeGVk IGEgYnVnIGluIEZUUCBHRVQgL0NPTU1BTkQgZmlsZW5hbWUgY29tbWFuZG5hbWU7IGl0IGFsd2F5 cyBkdW1wZWQgY29yZQorZGVyZWZlcmVuY2luZyBhIG51bGwgc3RyaW5nICh0aGUgbm9uZXhpc3Rl bnQgbG9jYWwgYXNuYW1lKS4gIGNrY2Z0cC5jLAorMTcgT2N0IDIwMDUuCisKK0ZvciBkb2NzOiBp ZiB5b3UgZG9uJ3QgbGlrZSB0aGUgZnVubnkgYnVzaW5lc3MgdGhhdCBoYXBwZW5zIHdoZW4geW91 IHR5cGUKK2FuIElGIGNvbW1hbmQgYXQgdGhlIHByb21wdCwgdXNlIFhJRiBpbnN0ZWFkIGFuZCBp dCB3b24ndCBoYXBwZW4uICBBbHNvIG5vdGUKK3RoYXQgY29tbWFuZHMgbGlrZSAiaWYgeHh4IHsg ZWNobyBibGFoIH0gZWxzZSB7IGVjaG8gYmxhaCBibGFoIH0iIGRvbid0Cit3b3JrIHdoZW4gdHlw ZWQgYXQgdGhlIHByb21wdDsgeW91IGhhdmUgdG8gdXNlIFhJRiBmb3IgdGhpcy4gCisKK0JhY2sg dG8gY2ttYXRjaCgpLi4uICBVbmRlciBjZXJ0YWluIGNvbmRpdGlvbnMgKGUuZy4gcGF0dGVybnMg bGlrZSAqW2FiY10pCitmYWlsdXJlIHRvIG1hdGNoIHdvdWxkIG5vdCBzdG9wIHRoZSByZWN1cnNp b24gYmVjYXVzZSB0aGUgc3RyaW5nIGFuZCBwYXR0ZXJuCithcmd1bWVudHMgYXJlIG9uIHRoZSBz dGFjaywgYXMgdGhleSBtdXN0IGJlLCBzbyB0aGVyZSB3YXMgbm8gd2F5IGZvciBsZXZlbAorbi0x IHRvIGtub3cgdGhhdCBsZXZlbCBuIGhhZCBkZXRlY3RlZCBhIGRlZmluaXRpdmUgbm9ubWF0Y2gg YW5kIHRoYXQgbm8KK2Z1cnRoZXIgYXR0ZW1wdHMgYXQgbWF0Y2hpbmcgd2VyZSByZXF1aXJlZC4g IFRoZSByaWdodCB3YXkgdG8gaGFuZGxlIHRoaXMgaXMKK3RvIHJlY29kZSB0aGUgd2hvbGUgdGhp bmcgYXMgY29yb3V0aW5lcywgdGhlIGNoZWFwIHdheSBvdXQgaXMgd2l0aCBhIGdsb2JhbAorc3Rh dGljIGZsYWcuICBXb3JrcyBwZXJmZWN0bHksIGluIHRoZSBzZW5zZSB0aGF0IHRoZSBtYXRjaC5r c2MgdGVzdCByZXN1bHRzCithcmUgaWRlbnRpY2FsIHRvIHdoYXQgdGhleSB3ZXJlIGJlZm9yZSBh bmQgdGhlIGV4dHJhIGJhY2tpbmcgdXAgYW5kCityZWN1cnNpb24gYXJlIGVsaW1pbmF0ZWQuICAo VGhlIE9jdCAxNXRoIGZpeCB3YXNuJ3QgcmVhbGx5IGEgZml4LCBpdCBicm9rZQorYSBjb3VwbGUg b2YgY2FzZXMuKSAgY2tjbGliLmMsIDIwIE9jdCAyMDA1LgorCitja3V1czcuYygyOTg3KTogd2Fy bmluZyAjMjY3OiB0aGUgZm9ybWF0IHN0cmluZyByZXF1aXJlcyBhZGRpdGlvbmFsIGFyZ3VtZW50 cworKGluIFBVUkdFIGNvbW1hbmQpOyBmaXhlZCAyMCBPY3QgMjAwNS4KKworRnJvbSBBbmR5IFRh bmVuYmF1bSwgZmluYWwgY2hhbmdlcyBmb3IgTUlOSVgzOiAjaWZkZWYgb3V0IHRoZSBpbmxpbmUK K2RlZmluaXRpb25zIGZvciBnZXR0aW1lb2ZkYXkoKSBhbmQgcmVhZGxpbmsoKS4gIGNrdXRpby5j LCAyMyBPY3QgMjAwNS4KKworRnJvbSBKZWZmOiBzdHJ1Y3QgZ3NzX3RyaWFscyBpbml0aWFsaXpl cnMgY2hhbmdlZCBmcm9tIGdzc19tZWNoX2tyYjUgdG8KK2NrX2dzc19tZWNoX2tyYjUuICBja2Nm dHAuYywgMjMgT2N0IDIwMDUuCisKK0Zyb20gSmVmZjogc29tZSBpbXByb3ZlbWVudHMgdG8gSzk1 IEdVSSBTSE9XIFRFUk1JTkFMLiAgY2t1dXM1LmMsIDIzIE9jdCAyMDA1LgorCitGb3VuZCBhbmQg Y29ycmVjdGVkIHNvbWUgbWlzcGxhY2VkICNpZmRlZnMgaW4gc2hvZmVhdCgpLCBja3V1czUuYywg MjMgT2N0IDIwMDUuCisKKy0tLSBEZXYuMDMgLS0tCisKK0ZpeGVkIGEgY29tcGlsZXIgd2Fybmlu ZyBpbiBhIGRlYnVnKCkgc3RhdGVtZW50IGluIHp6c3RyaW5nKCkgYnkgYWRkaW5nCitwYXJlbnMu ICBja3V1czQuYywgMjQgT2N0IDIwMDUuCisKK0FkZGVkIC1ETk9MT05HTE9ORyB0byBzdjY4cjN2 NiB0YXJnZXQsIG1ha2VmaWxlLCAyNSBPY3QgMjAwNS4KKworTmV3IG1ha2VmaWxlIHRhcmdldHMg Zm9yIEhQLVVYIGZyb20gUGV0ZXJFIHRvIGhhbmRsZSB0aGUgJ2xvbmcgbG9uZycKK3NpdHVhdGlv bi4gICAyNiBPY3QgMjAwNS4KKworRnJvbSBKZWZmOiBjaGFuZ2VzIHRvIHN1cHBvcnQgT3BlblNT TCAwLjkuOCwgY2tfc3NsLmguICBja2Nhc2MuaCBoYXMgaGFkCitzaG9ydCBuYW1lcyBkZWZpbmVk IGZvciBBU0NJSSBjb250cm9sIGNoYXJhY3RlcnMgZm9yIDIwLXNvbWUgeWVhcnMgYnV0IG5vdwor dGhleSBhcmUgY2F1c2luZyBjb25mbGljdHMsIHNvIEVNIGJlY29tZXMgWEVNIChhbHNvIGZvciBP cGVuU1NMIDAuOS44KS4KK0NoYW5nZWQgSzk1J3MgZGVmYXVsdCB0ZXJtaW5hbCB0eXBlIGZyb20g VlQzMjAgdG8gVlQyMjAgYmVjYXVzZSBWVDMyMAordGVybWNhcHMvdGVybWluZm9zIGFyZSBkaXNh cHBlYXJpbmcgZnJvbSBVbml4IGhvc3RzOiBja3V1czcuYy4gIFJlb3JnYW5pemUKK3RoZSBkYXRh LXR5cGVzIHNlY3Rpb24gb2YgU0hPVyBGRUFUVVJFUyB0byBhZGQgbW9yZSBtYWNybyB0ZXN0cyBm b3IgaW50ZWdyYWwKK3NpemVzIGFuZCB0byBwcm92aWRlIGZvciB0aGUgcHJvcGVyIHByaW50ZiBm b3JtYXR0aW5nIGluIG9yZGVyIHRvIGFsbG93IHRoZQorc2l6ZXMgdG8gYmUgb3V0cHV0ICgiWW91 IGFyZSBnb2luZyB0byBuZWVkIHRvIGJlIGNhcmVmdWwgYmVjYXVzZSAlbGx4IGlzIG5vdAorc3Vw cG9ydGVkIG9uIGFsbCBwbGF0Zm9ybXMuICBPbiBXaW5kb3dzLCBpdCBpcyB0aGUgc2FtZSBhcyAl bHgsIDMyIGJpdHMiKToKK2NrdXVzNS5jLCAyNiBPY3QgMjAwNS4KKworRGVmaW5lZCBOT0xPTkdM T05HIGNrY2RlYi5oIGZvciB2YXJpb3VzIG9sZCBwbGF0Zm9ybXMgd2hlcmUgd2Uga25vdyB3ZSBh cmUKK25ldmVyIGdvaW5nIHRvIG5lZWQgNjQtYml0IGludHMgKGV2ZW4gaWYgdGhleSBzdXBwb3J0 IGEgbG9uZyBsb25nIGRhdGF0eXBlLAorY2hhbmNlcyBhcmUgcHJldHR5IHNsaW0gdGhleSBzdXBw b3J0ZWQgNjQtYml0IGZpbGUgc2l6ZXMpLiAgY2tjZGViLmgsCisyNiBPY3QgMjAwNS4KKworUGV0 ZXJFIG5vdGljZWQgdGhhdCBHT1RPIHRhcmdldHMgY2FuIG9ubHkgYmUgNTAgY2hhcmFjdGVycyBs b25nLiAgVGhpcyB3YXMKK2J5IGRlc2lnbiwgYSBsb25nIHRpbWUgYWdvLCBvbiB0aGUgYXNzdW1w dGlvbiB0aGF0IG5vYm9keSB3b3VsZCBtYWtlIGxvbmdlcgorbGFiZWxzLiAgQnV0IGluIFNXSVRD SCBzdGF0ZW1lbnRzLCBjYXNlIGxhYmVscyBjYW4gYmUgdmFyaWFibGVzIHRoYXQgZXhwYW5kCit0 byBhbnl0aGluZyBhdCBhbGwuICBJZiB3ZSBjaG9wIHRoZW0gb2ZmIGF0IDUwLCB3ZSBtaWdodCBl eGVjdXRlIHRoZSB3cm9uZworY2FzZS4gIENoYW5nZWQgdGhlIG1heGltdW0gbGFiZWwgc2l6ZSB0 byBiZSA4SywgYW5kIGFkZGVkIGNvZGUgdG8gZG9nb3RvKCkKK3RvIGNoZWNrIHdoZW4gYSBsYWJl bCBvciB0YXJnZXQgaXMgdG9vIGxvbmcgYW5kIGZhaWwsIHRvIHByZXZlbnQgc3B1cmlvdXMKK0dP VE8gb3IgU1dJVENIIHJlc3VsdHMuICBja3V1c3IuaCwgY2t1dXNbcjZdLmMsIDI2IE9jdCAyMDA1 LgorCitUZXN0aW5nIHJldmVhbGVkIHRoZXJlIHdhcyBzdGlsbCBhIHByb2JsZW0gd2l0aCBTV0lU Q0ggY2FzZSBsYWJlbHMgdGhhdCB3ZXJlCit2YXJpYWJsZXMgdGhhdCBleHBhbmRlZCBpbnRvIGxv bmcgc3RyaW5ncy4gIFR1cm5zIG91dCB0aGF0IEkgd2FzIGJlaW5nCit0b28gY2xldmVyIHdoZW4g SSBkZWNpZGVkIHRoYXQsIGlmIHRoZSBTV0lUQ0ggbWFjcm8gd2FzIG4xIGNoYXJhY3RlcnMgbG9u ZworYW5kIHRoZSBjYXNlLWxhYmVsIHNlYXJjaCB0YXJnZXQgd2FzIG4yIGNoYXJhY3RlcnMgbG9u ZywgSSBvbmx5IGhhZCB0bworc2VhcmNoIHRoZSBmaXJzdCBuMS1uMisxIGNoYXJhY3RlcnMgb2Yg dGhlIG1hY3JvIGRlZmluaXRpb24uICBUaGF0IHdhcyB0cnVlCitiZWZvcmUgSSBhbGxvd2VkIGNh c2UgbGFiZWxzIHRvIGJlIHZhcmlhYmxlcywgYnV0IG5vdCBhbnkgbW9yZSEgIEZpeGVkIGluCitk b2dvdG8oKTogY2t1dXM1LmMsIDI2IE9jdCAyMDA1LgorCistLS0gRGV2LjA0IC0tLQorCitEZXYu MDQgZGlkbid0IGFjdHVhbGx5IGNvbnRhaW4gSmVmZidzIGRhdGEtdHlwZSBjaGFuZ2VzIHRvIHNo b2ZlYXQoKSwKK0kgdGhpbmsgSSBzYXZlZCB0aGUgd3JvbmcgYnVmZmVyIGluIEVNQUNTLi4uICBG aXhlZCBub3cuICAyNyBPY3QgMjAwNS4KKworUGV0ZXJFIGNvcnJlY3RlZCBhIHR5cG8gaW4gdGhl IEhQLVVYIDcuMDAgbWFrZWZpbGUgdGFyZ2V0LiAgMjcgT2N0IDIwMDUuCisKK1BldGVyRSBoYWQg YmVlbiByZXBvcnRpbmcgcHJvYmxlbXMgc3RyZXNzLXRlc3RpbmcgdGhlIG5ldyBTV0lUQ0ggY29k ZSwgYnV0Citvbmx5IG9uIEhQLVVYIDksIHByaW1hcmlseSBzdGFjayBvdmVycnVuLiAgVHVybnMg b3V0IHRvIGJlIHRoZSBIUC1VWCA5CitvcHRpbWl6aW5nIGNvbXBpbGVyJ3MgZmF1bHQuICBObyBv cHRpbWl6YXRpb24sIG5vIHByb2JsZW1zLgorCitQZXRlckUgZm91bmQgdGhhdCBldmVuIHdoZW4g ZG9nb3RvKCkgZGV0ZWN0cyBhIHN0cmluZyB0aGF0IGlzIHRvbyBsb25nCithbmQgZmFpbHMsIHRo aXMgZG9lcyBub3Qgc3RvcCBTV0lUQ0ggZnJvbSBwcm9kdWNpbmcgYSByZXN1bHQsIHdoaWNoIGNh biBub3QKK3Bvc3NpYmx5IGJlIHRydXN0ZWQuICBDaGFuZ2VkIHRoZSBwYXJ0IG9mIGRvZ290bygp IHRoYXQgaGFuZGxlcyB0aGlzIHRvCitub3QganVzdCBmYWlsLCBidXQgYWxzbyB0byBleGl0IHRo ZSBzY3JpcHQgaW1tZWRpYXRlbHkgYW5kIHJldHVybiB0byB0b3AKK2xldmVsLiAgY2t1dXM2LmMs IDI4IE9jdCAyMDA1LgorCitBbiBpZGVhIHBvcHBlZCBpbnRvIG15IGhlYWQgYWZ0ZXIgaGF2aW5n IHR5cGVkIHRvbyBtYW55IGNvbW1hbmRzIGxpa2UgImRpcgorY2tbY3V3XSouW2N3aF0iIHRvIGNo ZWNrIHRoZSBsaXN0IG9mIG1hdGNoaW5nIGZpbGVzLCBhbmQgdGhlbiBoYXZpbmcgdG8KK3JldHlw ZSB0aGUgc2FtZSBmaWxlc3BlYyBpbiBhIFNFTkQgY29tbWFuZDogV2h5IG5vdCB1bmxlYXNoIHNv bWUgdW51c2VkCitjb250cm9sIGNoYXJhY3RlciBzdWNoIGFzIEN0cmwtSyB0byBzcGl0IG91dCB0 aGUgbW9zdCByZWNlbnRseSBlbnRlcmVkIGlucHV0CitmaWxlc3BlYz8gIEl0IHdhcyBlYXN5LCBq dXN0IGEgZmV3IGxpbmVzIGluIGNtaWZpMigpIGFuZCBndHdvcmQoKSwgcGx1cyBhCitjb3VwbGUg ZGVjbGFyYXRpb25zLiAgVG8gc2VlIGFsbCB0aGUgY2hhbmdlcywgc2VhcmNoIGZvciAibGFzdGZp bGUiIChhbGwgdGhlCituZXcgY29kZSBpcyBwcm90ZWN0ZWQgYnkgI2lmbmRlZiBOT0xBU1RGSUxF KS4gIGNrdWNtZC5jLCAyOCBPY3QgMjAwNS4KKworSSBhZGRlZCBhIG5ldyB2YXJpYWJsZSBcdihs YXN0ZmlsZXNwZWMpIHRoYXQgZXhwYW5kcyB0byB0aGUgc2FtZSBsYXN0CitmaWxlc3BlYywgZm9y IHVzZSBpbiBzY3JpcHRzLiAgY2t1dXNyLmgsIGNrdXVzNC5jLCAyOCBPY3QgMjAwNS4KKworVGhl IFVuaXggdmVyc2lvbiBvZiBDLUtlcm1pdCBmYWlsZWQgdG8gcHV0IGFueXRoaW5nIGluIHRoZSBz ZXNzaW9uIGxvZyBpZgorU0VUIFRFUk1JTkFMIERFQlVHIE9OLiAgUmVhcnJhbmdlZCB0aGUgcGVy dGluZW50IGNsYXVzZSBzbyBsb2dnaW5nIGhhcHBlbnMKK2luZGVwZW5kZW50IG9mIFRFUk1JTkFM IERFQlVHLiAgRm9yIG5vdywgc2luY2UgdGhlIHVzZXIgd2hvIG5vdGljZWQgdGhpcword2FudGVk IGRlYnVnIGZvcm1hdCB0byBnbyBpbnRvIHRoZSBzZXNzaW9uIGxvZywgdGhhdCdzIHdoYXQgSSBk by4gIFRoZQorYWx0ZXJuYXRpdmUgd291bGQgYmUgdG8ganVzdCBsb2cgdGhlIHJhdyBpbmNvbWlu ZyBzdHJlYW0gYXMgdXN1YWwsIG9yIHRvIGFkZAorWWV0IEFub3RoZXIgU0VUIENvbW1hbmQgdG8g Y2hvb3NlLiAgY2t1Y25zLmMsIDExIE5vdiAyMDA1LgorCitGaXhlZCBIRUxQIElOVFJPIHRleHQu ICBja3V1czIuYywgMTEgTm92IDIwMDUuCisKK0FkZGVkIE5PTE9OR0xPTkcgZm9yIFNWNjguICBj a2NkZWIuaCwgMTEgTm92IDIwMDUuCisKKy0tLSBEZXYuMDUgLS0tCisKK0FkZGVkIGEgZGVidWco KSBzdGF0ZW1lbnQgaW4gRlRQIHNlY3VyZV9nZXRieXRlKCkgdG8gc2VlIHdoYXQncyBnb2luZyBv bgord2l0aCBNdWhhbWFkIFRhdWZpcSBUYWp1ZGRpbidzIDIwNS1ieXRlLXBlci1zZWNvbmQgRlRQ L1NTTCBkb3dubG9hZHMuCisKKy0tLSBEZXYuMDYgLS0tCisKK1Jlc3VsdDogbm90aGluZywgU1NM X2dldF9lcnJvcigpIGRvZXMgbm90IHJlcG9ydCBhbnkgZXJyb3JzLiAgU3VnZ2VzdGVkCit0ZXN0 aW5nIFNTTF9yZWFkKCkncyByZXR1cm4gY29kZSwgaWYgMCBkb24ndCB1cGRhdGUgdGhlIHNjcmVl bi4KKworQ3JlYXRlZCBhIG5ldyBkYXRhIHR5cGUgQ0tfT0ZGX1QgaW4gY2tjZGViLmggdGhhdCB3 aWxsIGV2ZW50dWFsbHkgcmVzb2x2ZQordG8gd2hhdGV2ZXIgZWFjaCBwbGF0Zm9ybSB1c2VzIGZv ciBmaWxlIHNpemVzIGFuZCBvZmZzZXRzLiAgY2tjZGViLmgsCisxNyBOb3YgMjAwNS4KKworTWFk ZSBhIG5ldyBsaWJyYXJ5IHJvdXRpbmUgY2tmc3RvYSgpIHRoYXQgY29udmVydHMgYSBmaWxlIHNp emUgb3Igb2Zmc2V0IHRvCithIHN0cmluZy4gIFRoaXMgaXMgdG8gc29sdmUgdGhlIHByb2JsZW0g d2l0aCBoYXZpbmcgdG8gdXNlIGRpZmZlcmVudAorcHJpbnRmKCkgZm9ybWF0cyBmb3IgZGlmZmVy ZW50IHJlcHJlc2VudGF0aW9ucyBvZiBmaWxlIHNpemUgKGludCwgbG9uZywgbG9uZworbG9uZywg b2ZmX3QsIHNpZ25lZCwgdW5zaWduZWQsIGV0YykuICBSZXBsYWNlZCBhIGZldyBwcmludGYoIiVs IixzaXplKSB3aXRoCitwcmludGYoIiVzIixja2ZzdG9hKHNpemUpKSB3aXRoIHRoZSBleHBlY3Rl ZCByZXN1bHRzLiAgVGhpcyBpcyBqdXN0IGEgc3RhcnQsCit0aGUgZGVmaW5pdGlvbnMgd2lsbCBu ZWVkIGFkanVzdG1lbnQgZm9yIG1hbnkgcGxhdGZvcm1zLCB2YXJpYWJsZXMgbmVlZCB0bworYmUg cmVkZWNsYXJlZCwgYW5kIGFsbCB0aGUgb2ZmZW5kaW5nIHByaW50ZidzIChhbmQgcHJpbnR3J3Mp IHdpbGwgaGF2ZSB0bworaHVudGVkIGRvd24gYW5kIGNvbnZlcnRlZC4gIGNrY2xpYi5bY2hdLCBj a3V1czQuYywgMTcgTm92IDIwMDUuCisKK0J1aWx0IGEgbWluaW1hbCB2ZXJzaW9uIG9uIExpbnV4 IHdpdGg6CittYWtlIGxpbnV4ICJLRkxBR1M9LUROT0xPQ0FMIC1ETk9JQ1AgLUROT0NTRVRTIC1E Tk9ERUJVRyIKK1dvcmtlZCBmaW5lLCByZXN1bHQgd2FzIDI2MEsgb24gaTY4Ni4gIDIxIE5vdiAy MDA1LgorCitEaXNjb3ZlcmVkIHRoYXQgS2VybWl0J3MgZGF0ZSBwYXJzZXIsIGNvbnRyYXJ5IHRv IHRoZSBkb2N1bWVudGF0aW9uLCBmYWlsZWQKK3RvIGhhbmRsZSBzdHJpbmdzIGxpa2UgIldlZCwg MTMgRmViIDIwMDIgMTc6NDM6MDIgLTA4MDAgKFBTVCkiLCB3aGljaCBhcmUKK2NvbW1vbmx5IGZv dW5kIGluIGVtYWlsLiAgVGhpcyB3YXMgYmVjYXVzZSBvZiBhbiBvdmVyemVhbG91cyBhbmQgbWlz Z3VpZGVkCitjaGVjayBpbiB0aGUgY29kZTsgb25jZSByZW1vdmVkLCBhbGwgd2FzIHdlbGwuICBj a3VjbWQuYywgMjYgTm92IDIwMDUuCisKK0FkZGVkIGEgbmV3IGZvcm1hdCBjb2RlIDQgdG8gXGZj dnRkYXRlKCkgdG8gZW1pdCBhc2N0aW1lKCkgZm9ybWF0LCB1c2VkIGluCitCU0QtZm9ybWF0IGVt YWlsIG1lc3NhZ2UgZW52ZWxvcGVzIChpLmUuIHRoZSAiRnJvbSAiIGxpbmUpLiAgc2h1ZmZsZWRh dGUoKSwKK2NrdWNtZC5jLCBja3V1c1syNF0uYywgMjYgTm92IDIwMDUuCisKK0FkZGVkIGEgbmV3 IGZ1bmN0aW9uIFxmZW1haWxhZGRyZXNzKCkuICBHaXZlbiBhIEZyb206IG9yIFNlbmRlcjogaGVh ZGVyIGxpbmUKK2Zyb20gYW4gUkZDMjgyMi1mb3JtYXQgZW1haWwgYWRkcmVzcywgZXh0cmFjdHMg YW5kIHJldHVybnMgdGhlIGFjdHVhbCBlbWFpbAorYWRkcmVzcywgc3VjaCBhcyBrZXJtaXRAY29s dW1iaWEuZWR1LiAgY2t1dXNyLmgsIGNrdXVzWzQyXS5jLCAyNiBOb3YgMjAwNS4KKworVXNpbmcg dGhlIG5ldyBmdW5jdGlvbnMsIEkgd3JvdGUgYSBzY3JpcHQgdG8gZmV0Y2ggbWFpbCBmcm9tIGEg UE9QMyBzZXJ2ZXIKK292ZXIgYSBUTFMgY29ubmVjdGlvbi4gIEJ1dCB0aGUgbGluZS1hdC1hLXRp bWUgaW5wdXQgKG5lZWRlZCBmb3IgY2hhbmdpbmcKK2xpbmUgdGVybWluYXRvcnMgYW5kIGJ5dGUt c3R1ZmZpbmcgdGV4dCBsaW5lcyB0aGF0IHN0YXJ0IHdpdGggIkZyb20gIikgaXMKK3Nsb3csIDE3 IHNlYyB0byByZWFkIDI5IG1lc3NhZ2VzIHRvdGFsaW5nIDE3NUsuCisKK0FkZGVkIElOUFVUIC9D TEVBUiBzbyBJTlBVVCBjYW4gYmUgc3RhcnRlZCB3aXRoIGEgY2xlYW4gYnVmZmVyIHdpdGhvdXQK K3JlcXVpcmluZyBhIHNlcGFyYXRlIENMRUFSIElOUFVUIGNvbW1hbmQuICBja3V1c3IuaCwgY2t1 dXNbcjI0XS5jLAorMjcgTm92IDIwMDUuCisKK09uZSB0aGluZyB0aGF0IElOUFVUIHdhcyBuZXZl ciBhYmxlIHRvIGRvIHdlbGwgd2FzIHJlYWQgYW5kIHNhdmUgdGhlCitjb21wbGV0ZSBpbmNvbWlu ZyBkYXRhIHN0cmVhbS4gIFRoYXQncyBiZWNhdXNlLCB3aGlsZSB3YWl0aW5nIGZvciBpdHMKK3Rh cmdldCwgdGhlIGJ1ZmZlciBtaWdodCBvdmVyZmxvdyB3cmFwIGFyb3VuZC4gIFlldCB0aGVyZSB3 YXMgbmV2ZXIgYSB3YXkgdG8KK3RlbGwgaXQgdG8gc3RvcCB3aGVuIGl0cyBidWZmZXIgZmlsbHMg dXAgYW5kIGxldCBtZSBzYXZlIGl0LiAgSSBhZGRlZCBhCisvTk9XUkFQIHN3aXRjaCB0aGF0IGRv ZXMgdGhpcy4gIElmIHRoZSBidWZmZXIgZmlsbHMgdXAgYmVmb3JlIGFueSBvdGhlcgorY29tcGxl dGlvbiBjcml0ZXJpb24gaXMgbWV0LCBJTlBVVCByZXR1cm5zIGZhaWx1cmUsIGJ1dCB3aXRoIFx2 KGluc3RhdHVzKQorc2V0IHRvIDYgKHRoZSBuZXh0IGF2YWlsYWJsZSBpbnN0YXR1cyB2YWx1ZSku ICBUaHVzIGEgcHJvZ3JhbSB0aGF0IHdhbnRzIHRvCityZWFkIGFuZCBzYXZlIChzYXkpIGFuIGVt YWlsIG1lc3NhZ2UgZnJvbSBhIFBPUCBzZXJ2ZXIsIHdoaWNoIGNvdWxkIGJlIGFueQorbGVuZ3Ro IGF0IGFsbCwgYW5kIHdoaWNoIHRlcm1pbmF0ZXMgd2l0aCA8Q1JMRj4uPENSTEY+IGNvdWxkIGRv IHRoaXM6CisKKyAgc2V0IGZsYWcgb2ZmCisgIHdoaWxlIG9wZW4gY29ubmVjdGlvbiB7CisgICAg ICBpbnB1dCAvbm93cmFwIDEwIFwxM1wxMC5cMTNcMTAgIyBXYWl0IGZvciA8Q1JMRj4uPENSTEY+ CisgICAgICBpZiBzdWNjZXNzIHsKKyAgICAgICAgICBmcndyaXRlIC9zdHJpbmcgXCVvIHtcZnJl cGxhY2UoXHYoaW5wdXQpLFwxM1wxMC5cMTNcMTAsXDEzXDEwKX0KKyAgICAgICAgICBzZXQgZmxh ZyBvbgorICAgICAgICAgIGJyZWFrCisgICAgICB9IGVsc2UgaWYgKCA9PSBcdihpbnN0YXR1cykg NiB8fCA9PSBcdihpbnN0YXR1cykgMSApIHsKKyAgICAgICAgICBmcndyaXRlIC9zdHJpbmcgXCVv IHtcdihpbnB1dCl9CisgICAgICAgICAgY29udGludWUKKyAgICAgIH0KKyAgICAgIGJyZWFrCisg IH0KKyAgaWYgZmxhZyAoaGFuZGxlIHN1Y2Nlc3MpCisKK05vdGUgY2FyZWZ1bGx5IHRoZSBicmFj ZXMgYXJvdW5kIHRoZSBGV1JJVEUgdGV4dDsgd2l0aG91dCB0aGVtLCB0cmFpbGluZworc3BhY2Vz IHdvdWxkIGJlIGxvc3QuCisKK1ByZXZpb3VzbHkgdGhlIG9ubHkgd2F5IHRvIElOUFVUIGFuIGVu dGlyZSBkYXRhIHN0cmVhbSB3aXRob3V0IGxvc2luZworYW55dGhpbmcgKGFzc3VtaW5nIGl0IHdh cyBvcmRpbmFyeSBsaW5lcyBvZiB0ZXh0IHRoYXQgd2VyZSBub3QgInRvbyBsb25nIiksCit3YXMg bGluZS1ieS1saW5lOgorCisgIHdoaWxlIG9wZW4gY29ubmVjdGlvbiB7CisgICAgICBpbnB1dCAv Y2xlYXIgMTAgXDEzXDEwCisgICAgICBpZiBmYWlsIGJyZWFrCisgICAgICBpZiBlcSAiXHYoaW5w dXQpIiAiJCBcMTNcMTAiIGJyZWFrCisgICAgICBmd3JpdGUgL3N0cmluZyBcJW8ge1xmcmVwbGFj ZShcdihpbnB1dCksXDEzXDEwLFwxMCl9CisgIH0KKworVGhlIG5ldyBjb2RlIGlzIDMgdGltZXMg ZmFzdGVyIHVzaW5nIHRoZSBkZWZhdWx0IElOUFVUIGJ1ZmZlciBsZW5ndGggb2YgNEsuCitSYWlz aW5nIGl0IHRvIDE2SyBtYWtlcyBpdCAzLjYgdGltZXMgZmFzdGVyIChub3Qgd29ydGggaXQpLiAg Q2hhbmdpbmcgdGhlCitQT1AzIHNjcmlwdCB0byB1c2UgSU5QVVQgL05PV1JBUCBtYWtlcyBpdCBh Ym91dCB0d2ljZSBhcyBmYXN0IChpdCBkb2VzIG1vcmU7CitpdCBoYXMgdG8gZG8gYWxsIHRoZSBi eXRlLXN0dWZmaW5nIGFuZCB1bnN0dWZmaW5nKS4gIDI3IE5vdiAyMDA1LgorCitDaGFuZ2VkIHNz bF9kaXNwbGF5X3h4eCgpIHRvIGp1c3QgcmV0dXJuIGlmIFNFVCBRVUlFVCBPTi4gIE90aGVyd2lz ZSB0aGVyZQoraXMgbm8gd2F5IHRvIHN1cHByZXNzIHRoZSBtZXNzYWdlcy4gIEFsc28gcHJvdGVj dGVkIGEgcHJldmlvdXNseSB1bnByb3RlY3RlZAorcHJpbnRmKCJbU1NMIC0gT0tdXHJcbiIpOyBi eSBpZiAoIHNzbF92ZXJib3NlX2ZsYWcgKS4gIGNrX3NzbC5jLAorMjggTm92IDIwMDUuCisKK0Rp c2NvdmVyZWQgdGhhdCBGT1BFTiAvQVBQRU5EIGRvZXNuJ3Qgd29yayBpZiB0aGUgZmlsZSBkb2Vz bid0IGV4aXN0LiAgSXQKK3VzZXMgY21pb2ZpKCkgd2hpY2ggaXMgYSBzdXBlci1ob2tleSBmcm9u dCBlbmQgdG8gY21pZmkyKCkuICBJIGhhZCBjb2RlIHRvCitjYWxsIGl0IGJ1dCBmb3Igc29tZSBy ZWFzb24gaXQgd2FzIGNvbW1lbnRlZCBvdXQsIHdpdGggYSBub3RlIHRvIHRoZSBlZmZlY3QKK2l0 IGRpZG4ndCB3b3JrLiAgSSB1bmNvbW1lbnRlZCBpdCBidXQgdGhhdCBkaWRuJ3QgaGVscCBtdWNo LiAgU28gSSB3cm90ZSBhbgorZW50aXJlbHkgbmV3IGNtaW9maSgpIHRoYXQgd29ya3MgZXhhY3Rs eSBhcyBpdCBzaG91bGQsIHVzaW5nIGNoYWluZWQgRkRCcywKK19DTUlGSSB0byBfQ01PRkkgKEkg dGhpbmsgdGhlIG9yaWdpbmFsIGNtaW9maSgpIHByZWRhdGVkIGNoYWluZWQgRkRCcykuCitja3V1 czcuYywgY2t1Y21kLmMsIDI5IE5vdiAyMDA1LgorCitHZXR0aW5nIHJpZCBvZiB0aGUgYXdmdWwg aGFja3MgcmVxdWlyZWQgdG8gY2FsbCBjbWlvZmkoKSBtZWFudCBJIGFsc28gaGFkIHRvCitjaGFu Z2UgdGhlIEVESVQgY29tbWFuZCwgd2hpY2ggaXMgdGhlIG9ubHkgb3RoZXIgcGxhY2Ugd2hlcmUg aXQncyB1c2VkLgorVW5mb3J0dW5hdGVseSBub3cgaXQncyBubyBsb25nZXIgcG9zc2libGUgdG8g Z2l2ZSBFRElUIHdpdGhvdXQgYSBmaWxlbmFtZQorKHRvIGp1c3Qgc3RhcnQgYW4gZW1wdHkgZWRp dG9yKSBidXQgSSBkb3VidCBhbnlvbmUgd2lsbCBub3RpY2UuICBja3V1c3IuYywKKzI5IE5vdiAy MDA1LgorCitJRiBLRVJCQU5HIGRpZG4ndCBhbHdheXMgd29yayByaWdodC4gIElmIGEga2VyYmFu ZyBzY3JpcHQgVEFLRXMgYW5vdGhlcgora2VyYmFuZyBzY3JpcHQsIHRoZSBzZWNvbmQgb25lIHNo b3VsZCBoYXZlIElGIEtFUkJBTkcgZmFsc2UsIGJ1dCBpdCBkaWRuJ3QuCitBZGRlZCBhIGNoZWNr IGZvciBcdihjbWRsZXZlbCkgPT0gMS4gIE5vdyB5b3UgY2FuIHdyaXRlIGEgd3JhcHBlciB0aGF0 IHJ1bnMKK2Ega2VyYmFuZyBzY3JpcHQgaW4gYSBsb29wLCBhbmQgdGhlIGxhdHRlciBjYW4gdXNl IElGIEtFUkJBTkcgdG8ga25vdword2hldGhlciB0byBFWElUIChpZiBjYWxsZWQgYXQgdG9wIGxl dmVsKSBvciBFTkQgKGlmIGNhbGxlZCBieSBhbm90aGVyCitzY3JpcHQsIHRodXMgYWxsb3dpbmcg LS0gaW4gdGhpcyBjYXNlIC0tIHRoZSBsb29wIHRvIGNvbnRpbnVlKS4gIGNrdXVzNi5jLAorMjkg Tm92IDIwMDUuCisKK0NoYW5nZWQgXGZsb3AoKSBhbmQgZmxvcHgoKSBmdW5jdGlvbnMgdG8gdGFr ZSBhIHRoaXJkIGFyZ3VtZW50LCBhIG51bWJlcgorc2lnbmlmeWluZyBhdCB3aGljaCBvY2N1cnJl bmNlIG9mIHRoZSBicmVhayBjaGFyYWN0ZXIgdG8gbG9wLCBzbzoKKworICBcZmxvcHgoc2VzYW1l LmNjLmNvbHVtYmlhLmVkdSkgPSBlZHUKKyAgXGZsb3B4KHNlc2FtZS5jYy5jb2x1bWJpYS5lZHUs LDIpID0gY29sdW1iaWEuZWR1CisKK2NrdXVzWzI0XS5jLCAxIERlYyAyMDA1LgorCitCdWlsdCBP SyBvbiBWTVMgNy4yLTEgd2l0aCBNdWx0aU5ldCA0LjQuICBCdWlsdCB3aXRoIGFuZCB3aXRob3V0 IE9wZW5TU0wgb24KK0xpbnV4IE9LLCBkaXR0byBTb2xhcmlzIDkuICBCdWlsdCBPSyBvbiBSSCBM aW51eCBBUzQgb24gWDg2XzY0ICg2NC1iaXQpOworInNob3cgdmFyIGZzaXplIiAodXNpbmcgbmV3 IGNrZnN0b2EoKSkgd29ya3MgT0sgdGhlcmUuICBBbHNvIE1hYyBPUyBYIDEwLjMuOQorKDMyLWJp dCksIFRydTY0IFVOSVggNC4wRiAoNjQtYml0KSwgSFAtVVggMTFpdjIgKDY0LWJpdCkgKHBpY2t5 IG5ldyBjb21waWxlcgorc3Bld3Mgb3V0IHRvbnMgb2YgdXNlbGVzcyB3YXJuaW5ncyksIEZyZWVC U0QgNi4wIG9uIGlhNjQgKDY0LWJpdCkuCisKKy0tLSBEZXYuMDcgLS0tCisKK0NoYW5nZWQgIm1h a2UgbmV0YnNkIiB0byBiZSBhIHN5bm9ueW0gZm9yICJtYWtlIG5ldGJzZDIiIGJlY2F1c2UgdGhl CitvcmlnaW5hbCBuZXRic2QgdGFyZ2V0IHdhcyBhbmNpZW50LiAgUmVuYW1lZCBpdCB0byBuZXRi c2Qtb2xkLiAgbWFrZWZpbGUsCiszIERlYyAyMDA1LgorCitVcGRhdGVkIElOUFVUIGFuZCBNSU5Q VVQgaGVscCB0ZXh0LiAgY2t1dXMyLmMsIDMgRGVjIDIwMDUuCisKK0Rpc2NvdmVyZWQgdGhhdCBv biBhIFNFVCBQT1JUIC9TU0wgY29ubmVjdGlvbiwgS2VybWl0IHRyZWF0cyBpbmNvbWluZworMHhm ZiBkYXRhIGJ5dGVzIChlLmcuIHNlbnQgZnJvbSB0aGUgUE9QIHNlcnZlcikgYXMgSUFDcyBhbmQg Z29lcyBpbnRvIFRlbG5ldAorbmVnb3RpYXRpb25zLiAgSmVmZiBzYXlzICJZb3Ugd2lsbCBuZWVk IHRvIGltcGxlbWVudCBOUF9TU0xSQVcgYW5kIE5QX1RMU1JBVwordGhhdCBkbyB0aGUgc2FtZSBh cyBOUF9UQ1BSQVcgYnV0IG5lZ290aWF0ZSBTU0wgb3IgVExTIGFzIGFwcHJvcHJpYXRlLiIKK1Ro aXMgd2FzIG5vdCBhcyBlYXN5IGFzIGl0IHNvdW5kZWQsIGJlY2F1c2UgYXBwYXJlbnRseSBhIGxv dCBvZiB0aGUgVGVsbmV0Citjb2RlIGlzIHVzZWQgYnkgU1NMIGFuZCBUTFMgZXZlbiB3aGVuIFRl bG5ldCBwcm90b2NvbCBpcyBub3QgYmVpbmcgZXhlY3V0ZWQuCitJIHdvdW5kIHVwIGRvaW5nIHRo aXMgYXMgZm9sbG93czogSSBhZGRlZCAvU1NMLVJBVyBhbmQgL1RMUy1SQVcgdG8gdGhlCitzd2l0 Y2ggdGFibGUuICBSYXRoZXIgdGhhbiBkaXNhYmxlIFRlbG5ldCwgdGhleSBkbyBleGFjdGx5IHdo YXQgdGhlIC9TU0wgYW5kCisvVExTIHN3aXRjaGVzIGRvLCBidXQgYWxzbyBzZXQgYSBzcGVjaWFs IGZsYWcuICBUaGlzIGZsYWcgaXMgY2hlY2tlZCBpbiBvbmx5Cit0d28gcGxhY2U6IG5ldGNsb3Mo KSAodG8gcHJldmVudCBLZXJtaXQgZnJvbSBzZW5kaW5nIFRFTE5FVCBMT0dPVVQgd2hlbgorY2xv c2luZyB0aGUgY29ubmVjdGlvbiksIGFuZCB0bl9kb29wKCkgKHRvIHByZXZlbnQgS2VybWl0IGZy b20gcmVhY3RpbmcgdG8KK2luY29taW5nIElBQ3M7IGl0IG1ha2VzIHRuX2Rvb3AoKSByZXR1cm4o MyksIHdoaWNoIG1lYW5zICJxdW90ZWQgSUFDIiwgd2hpY2gKK2NhdXNlcyB0aGUgY2FsbGVyIHRv IGtlZXAgdGhlIElBQyBhcyBkYXRhKS4gIGNrY25ldC5oLCBja2N0ZWwuaCwgY2tjdGVsLmMsCitj a3V1czcuYywgNCBEZWMgMjAwNS4KKworVGhlIElOUFVUIGNvbW1hbmQgZGlkIG5vdCBhY2NvdW50 IGZvciB0bl9kb29wKCkgcmV0dXJuaW5nIDMuICBGaXhlZCBpbgorZG9pbnB1dCgpLCBja3V1czQu YywgNCBEZWMgMjAwNS4KKworQWRkZWQgYW5vdGhlciBkZWJ1ZygpIHN0YXRlbWVudCBpbiBGVFAg c2VjdXJlX2dldGJ5dGUoKSB0byBzZWUgd2hhdCdzIGdvaW5nIG9uCit3aXRoIE11aGFtYWQgVGF1 ZmlxIFRhanVkZGluJ3MgMjA1LWJ5dGUtcGVyLXNlY29uZCBGVFAvU1NMIGRvd25sb2FkcywgcGx1 cworbmV3IGNvZGUgdG8gdGVzdCBTU0xfcmVhZCgpJ3MgcmV0dXJuIGNvZGUgKGJ5dGUgY291bnQp OyBpZiAwIGRvbid0IHVwZGF0ZQordGhlIHNjcmVlbi4gIGNrY2Z0cC5jLCA0IERlYyAyMDA1Lgor CistLS0gRGV2LjA4IC0tLQorCitGaXhlZCBhIHR5cG8gaW4gdGhlIG5vbi1BTlNJQyBkZWZpbml0 aW9uIG9mIGNrZnN0b2EoKS4gIGNrY2xpYi5jLCA3IERlYyAyMDA1LgorCitPdXIgQ3RybC1DIHRy YXAgKHRoZSBPTl9DVFJMQyBtYWNybykgd2Fzbid0IHdvcmtpbmcgZm9yIGtlcmJhbmcgZmlsZXMu CitSZWFycmFuZ2VkIHNvbWUgY29kZSB0byBtYWtlIGl0IHdvcmsuICBja2NtYWkuYywgOCBEZWMg MjAwNS4KKworU3RhcnRlZCBjb252ZXJ0aW5nIGNvZGUgdG8gdXNlIENLX09GRl9UIGZvciBmaWxl IHNpemVzIGFuZCBvZmZzZXRzLCBhbmQKK2FsbCBbc11wcmludGYncyB0byByZXBsYWNlICIlbGQi IG9yIHdoYXRldmVyIHdpdGggIiVzIiwgYW5kIHRoZSBzaXplCit2YXJpYWJsZSB3aXRoIGEgY2Fs bCB0byBja2ZzdG9hKCkuICBTaW5jZSBJIGhhdmVuJ3QgYWN0dWFsbHkgY2hhbmdlZCB0aGUKK2Rl ZmluaXRpb24gb2YgQ0tfT0ZGX1QgZnJvbSB3aGF0IGFsbCB0aGUgc2l6ZSB2YXJpYWJsZXMgd2Vy ZSB0byBiZWdpbgord2l0aCAoaS5lLiBsb25nKSwgaXQgc2hvdWxkbid0IGRvIGFueSBoYXJtLiAg U28gZmFyIGp1c3QgY2tjZm4zLmMKKzEwIERlYyAyMDA1LgorCitBbiB1cGRhdGVkIEhQLVVYIDku eHggbWFrZWZpbGUgdGFyZ2V0IGZyb20gUGV0ZXJFIHRvIGZpeCBhIGNvcmUgZHVtcCB0aGF0Cito YXBwZW5zIG9uIHRoYXQgcGxhdGZvcm0gZHVlIHRvIGluc3VmZmljaWVudCByZXNvdXJjZXMuICAx NCBEZWMgMjAwNS4KKworQWRkZWQgZGVidWcoKSBzdGF0ZW1lbnRzIHRvIGh0dHBfYmxhaCgpIHJv dXRpbmVzIHRvIHRlbGwgd2hldGhlciB0aGUKK2Nvbm5lY3Rpb24gaXMgImNodW5rZWQiLiAgVGhl cmUgc2VlbXMgdG8gYmUgYSBiYWQgcGVyZm9ybWFuY2UgcHJvYmxlbS4KK2NrY25ldC5jLCAxNCBE ZWMgMjAwNS4KKworUGV0ZXJFIGNvbXBsYWluZWQgYWJvdXQgdWdseSBESVJFQ1RPUlkgZXJyb3Ig bWVzc2FnZSwgP05vIGZpbGVzIG1hdGNoIC0KKyJ7YmxhaH0iLiAgVGhlIGJyYWNlcyBhcmUgdXNl ZCBpbnRlcm5hbGx5IGluIGNhc2UgdGhlIHVzZXIgdHlwZWQgbW9yZSB0aGFuCitvbmUgZmlsZXNw ZWMuICBJIGNoYW5nZWQgdGhlIGVycm9yIG1lc3NhZ2UgdG8gcmVtb3ZlIHRoZW0uICBEaXR0byBE RUxFVEUuCitja3V1czYuYywgMTUgRGVjIDIwMDUuCisKK1RoZSBwcm9ibGVtIHdpdGggSFRUUCBk b3dubG9hZHMgaXMgdGhhdCBLZXJtaXQgYWx3YXlzIGRvZXMgc2luZ2xlLWNoYXJhY3RlcgorcmVh ZCgpIG9yIHNvY2tldF9yZWFkKCkgY2FsbHMgKG9yIHRoZSBTU0wgZXF1aXZhbGVudCk7IHNlZSBo dHRwX2luYygpLiAgSQorYWRkZWQgYnVmZmVyaW5nIGNvZGUgZm9yIG5vbi1TU0wgY29ubmVjdGlv bnMgb25seSBidXQgaXQncyBncm9zcyBiZWNhdXNlIGl0CitoYXMgdG8gc3dhcCB0dHlmZCBhbmQg aHR0cGZkIGJlZm9yZSBjYWxsaW5nIG5ldHRjaGsoKS4gIEkgdHJpZWQgbWFraW5nIGEKK25ldHRj aGsoKSBjbG9uZSB0aGF0IGFjY2VwdHMgYSBmaWxlIGRlc2NyaXB0b3IgYXMgYW4gYXJndW1lbnQg YnV0IGl0IGRpZG4ndAord29yayBiZWNhdXNlIHRvbyBtYW55IG90aGVyIHJvdXRpbmVzIHRoYXQg YXJlIGludm9rZWQgZGlyZWN0bHkgb3IgaW1wbGljaXRseQorYnkgbmV0dGNoaygpIChzdWNoIGFz IGluX2NoaygpKSBhcmUgc3RpbGwgaGFyZHdpcmVkIHRvIHVzZSB0dHlmZC4gIEhUVFAgR0VUcwor YXJlIG5vdyAyMCB0aW1lcyBmYXN0ZXIgb24gdGhlIGxvY2FsIG5ldHdvcmsgKHRoZSBpbXByb3Zl bWVudCBpcyBsZXNzCitkcmFtYXRpYyBvdmVyIGEgY2xvZ2dlZCBJbnRlcm5ldCkuICBja2NuZXQu W2NoXSwgMTUgRGVjIDIwMDUuCisKKy0tLSBEZXYuMDkgLS0tCisKK0hUVFAgZmlsZS1kZXNjcmlw dG9yIHN3YXBwaW5nIGlzIG5vdCB0aHJlYWQgc2FmZS4gIERvaW5nIGl0IHJpZ2h0LCBvZgorY291 cnNlLCBpcyBhIGJpZyBkZWFsLCBzbyBmb3Igbm93IEkganVzdCBkb24ndCBkZWZpbmUgSFRUUF9C VUZGRVJJTkcgZm9yCitXaW5kb3dzLiAgY2tjbmV0LmMsIDE1IERlYyAyMDA1LgorCitOb3RpY2Vk IHRoYXQgSFRUUCBub3QgaW5jbHVkZWQgaW4gRnJlZUJTRCBhbmQgT3BlbkJTRCBidWlsZHMuICBG aXhlZCBpbgorY2tjZGViLmgsIDIyIERlYyAyMDA1LgorCitGbGVzaGVkIG91dCAzMi82NC1iaXQg ZGF0YSB0eXBlIGRlZmluaXRpb25zIGFuZCBjaGFuZ2VkIHN0cnVjdCB6YXR0cgorKGZpbGUgYXR0 cmlidXRlIHN0cnVjdHVyZSkgbWVtYmVycyBsZW5ndGggYW5kIGxlbmd0aGsgdG8gaGF2ZSB0aGUg bmV3CitDS19PRkZfVCB0eXBlLiAgQ2hhbmdlZCBmaW5hbCBhcmd1bWVudHMgb2YgZGVidWcoKSBh bmQgdGxvZygpIHRvIGJlIHRoZSBuZXcKK0xPTkdMT05HIHR5cGUuICBja2NkZWIuaCwgMjIgRGVj IDIwMDUuCisKK0NoYW5nZWQgY2tmc3RvYSgpIHRvIHJldHVybiBhIHNpZ25lZCBudW1iZXIgaW4g c3RyaW5nIGZvcm0sIHJhdGhlciB0aGFuIGFuCit1bnNpZ25lZCBvbmUuICBUaGF0J3MgYmVjYXVz ZSBvZmZfdCBpcyBzaWduZWQgKHRoYW5rIGdvb2RuZXNzKS4gIEFkZGVkIHRoZQoraW52ZXJzZSBm dW5jdGlvbiwgY2thdG9mcygpIHNvIHdlIGNhbiBjb252ZXJ0IGZpbGUgc2l6ZXMgYW5kIG9mZnNl dHMgYmFjaworYW5kIGZvcnRoIGJldHdlZW4gYmluYXJ5IG51bWJlciBhbmQgc3RyaW5nLiAgY2tj bGliLmMsIDIyIERlYyAyMDA1LgorCitDaGFuZ2VkIEF0dHJpYnV0ZSBQYWNrZXQgcmVhZGVyIHRv IGNvbnZlcnQgaW5jb21pbmcgZmlsZSBzaXplIGF0dHJpYnV0ZQord2l0aCBja2F0b2ZzKCkgcmF0 aGVyIHRoYW4gYXRvbCgpLiAgY2tjZm4zLmMsIDIyIERlYyAyMDA1LgorCitDb252ZXJ0ZWQgZGVi dWcoKSwgdGxvZygpLCBja3NjcmVlbigpLCBldGMsIHRvIGhhbmRsZSBwb3RlbnRpYWxseSAibG9u ZyBsb25nIgorYXJndW1lbnRzIGJ5IG1ha2luZyB0aGVpciAibiIgYXJndW1lbnQgQ0tfT0ZGX1Qu ICBja3V1c3guYywgY2tjZGViLmgsCisyMiBEZWMgMjAwNS4KKworQ29udmVydGVkIHRoZSByZXN0 IG9mIHRoZSBzb3VyY2UgZmlsZXMgdG8gdXNlIENLX09GRl9UIGZvciBhbGwgZmlsZSBzaXplCith bmQgb2Zmc2V0IGFuZCBieXRlLWNvdW50IHJlbGF0ZWQgdmFyaWFibGVzLCBhbmQgY29udmVydGVk IGFsbCByZWZlcmVuY2VzIHRvCit0aGVzZSB2YXJpYWJsZXMgaW4gcHJpbnRmcyB0byBnbyB0aHJv dWdoIGNrZnN0b2EoKS4gIFRoZW4gSSBidWlsdCBpdCBvbgorTGludXgvaTM4NiB3aXRoOgorCisg IG1ha2UgbGludXggIktGTEFHUz0tRF9MQVJHRUZJTEVfU09VUkNFIC1EX0ZJTEVfT0ZGU0VUX0JJ VFM9NjQiCisKK3doaWNoIG1ha2VzIG9mZl90IGJlIDY0IGJpdHMgYW5kIG1hZ2ljYWxseSBtYWtl cyBhbGwgdGhlIHJlZ3VsYXIgZmlsZSBBUElzCit1c2UgNjQtYml0IHNpemVzIGFuZCBvZmZzZXRz IHdpdGhvdXQgY2hhbmdpbmcgdGhlIEFQSSBjYWxscyBpbiB0aGUgc291cmNlCitjb2RlLiAgSXQn cyBnb2luZyB0byBiZSBhIGxvdCBvZiB3b3JrIHRvIGdldCB0aHJvdWdoIGFsbCB0aGUga2lua3Mg YnV0IEkgd2FzCithYmxlIHRvIHNlbmQgYSBsb25nIGZpbGUsIGRvIGRpcmVjdG9yeSBsaXN0aW5n cyBvZiBsb25nIGZpbGVzLCBkbworXGZzaXplKGxvbmdmaWxlKSwgZXRjLiAgV2hlbiBpdCBzZW5k cyBhIGZpbGUsIHRoZSBsZW5ndGggaXMgc2hvd24gY29ycmVjdGx5CitpbiB0aGUgQSBwYWNrZXQu ICBJZiB0aGUgcmVjZWl2ZXIgZG9lcyBub3Qgc3VwcG9ydCBiaWcgbnVtYmVycywgaXQgcmVjZWl2 ZXMKK3RoZSBmaWxlIE9LIGFueXdheSwgd2l0aG91dCBzaG93aW5nIHRoZSBzaXplLCB0aGUgdGhl cm1vbWV0ZXIsIG9yIHBlcmNlbnQKK2RvbmUgKGFuZCB0aGVuIHdpbGwgZ2V0IGFuIGVycm9yIHdo ZW4gdGhlIGZpbGUga2VlcHMgY29taW5nIGFmdGVyIHRoZSAyRworbWFyaykuICBLZXJtaXQgOTUg YWN0dWFsbHkgcmVmdXNlcyBsb25nIGZpbGVzIGZvciAiU2l6ZSIsIGJ1dCBvbmx5IGlmIHRoZQor YW5ub3VuY2VkIGlzIGxlc3MgdGhhbiAyXjYzIGJ5dGVzLiAgV2hlbiB0b2RheSdzIExpbnV4IHZl cnNpb24gcmVjZWl2ZXMgYQorZmlsZSwgaXQgc2hvd3MgdGhlIGxlbmd0aCBjb3JyZWN0bHkgaW4g dGhlIGZpbGUtdHJhbnNmZXIgZGlzcGxheSwgYXMgd2VsbCBhcworcGVyY2VudCBkb25lLCB0aGVy bW9tZXRlciwgZXRjLiAgQWxzbyBidWlsdCB0aGlzIHZlcnNpb24gb24gdHJ1ZSA2NC1iaXQKK0xp bnV4LCBhbmQgaXQgd29ya2VkIGZpbmUuICBNYW55IGZpbGVzIGNoYW5nZWQsIDIyIERlYyAyMDA1 LgorCitGb3IgdGhlIHJlY29yZCwgdGhpcyBBUEkgaXMgc3BlY2lmaWVkIGluIFgvT3BlbidzIFNp bmdsZSBVTklYIFNwZWNpZmljYXRpb24KK1ZlcnNpb24gMiwgd2hpY2ggaXMgYnJhbmRlZCBhcyBV TklYIDk4LiAgSXQgaXMgY2FsbGVkIExhcmdlIEZpbGUgU3VwcG9ydCwgb3IKK0xGUywgYW5kIHdh cyBkZXZlbG9wZWQgYXQgdGhlIExhcmdlIEZpbGUgU3VtbWl0LgorCitJdCBsb29rcyBsaWtlIHRo ZSBvcGVyYXRpdmUgZmVhdHVyZS10ZXN0IG1hY3JvIGluIGdsaWJjIGZvciB0cmFuc2l0aW9uYWwK K2xhcmdlIGZpbGUgc3VwcG9ydCBpcyBfX1VTRV9MQVJHRUZJTEU2NC4gIFNvIGlmIHRoaXMgaXMg ZGVmaW5lZCwgd2UgY2FuIGFsc28KK3N1cHBseSBfTEFSR0VGSUxFX1NPVVJDRSBhbmQgX0ZJTEVf T0ZGU0VUX0JJVFM9NjQgYXV0b21hdGljYWxseSBmb3IgMzItYml0CitMaW51eCBidWlsZHMuICBC dXQgdGhlcmUncyBhIENhdGNoLTIyLCB5b3UgZG9uJ3Qga25vdyBpZiB0aGlzIGlzIGRlZmluZWQK K3VudGlsIHlvdSByZWFkIHRoZSBoZWFkZXIgZmlsZXMsIGJ1dCB5b3UgaGF2ZSB0byBkZWZpbmUg X0xBUkdFRklMRV9TT1VSQ0UKK2FuZCBfRklMRV9PRkZTRVRfQklUUyBiZWZvcmUgeW91IHJlYWQg dGhlIGhlYWRlciBmaWxlcy4gIE1heWJlIGl0J3MgZ29vZAorZW5vdWdoIHRvIGdyZXAgdGhyb3Vn aCA8ZmVhdHVyZXMuaD4gZm9yIF9fVVNFX0xBUkdFRklMRTY0LiAgbWFrZWZpbGUsCisyMyBEZWMg MjAwNS4KKworQ2hlY2tlZCB0aGlzIG9uIHRydWUgNjQtYml0IExpbnV4LiAgVGhlIHNhbWUgc3lt Ym9scyBhcmUgZGVmaW5lZCBpbiBDRkxBR1MsCitidXQgdGhleSBkbyBubyBoYXJtOyBpdCBidWls ZHMgd2l0aG91dCBjb21wbGFpbnQgYW5kIHdvcmtzIGZpbmUuICAyNCBEZWMgMjAwNS4KKworQnVp bHQgaXQgb24gUmVkIEhhdCBMaW51eCA2LjEgZnJvbSAxOTk5LiAgVGhpcyBwaWNrZWQgdXAgdGhl IGxvbmcgZmlsZQorc3VwcG9ydCB0b28uICBHdWVzcyA2LjEgaXNuJ3Qgb2xkIGVub3VnaCB0byBu b3QgaGF2ZSBpdCEgIEtlcm1pdCBzZWVtcyB0bword29yayBPSyBvbiByZWd1bGFyIGZpbGVzIGJ1 dCBJIGRvbid0IGhhdmUgZW5vdWdoIGRpc2sgc3BhY2UgdG8gY3JlYXRlIGEgbG9uZworZmlsZSwg YW5kIG15IGJpZ2ZpbGUuYyBwcm9ncmFtICh3aGljaCBjcmVhdGVzIGEgbG9uZyBmaWxlIGNvbnRh aW5pbmcgb25seSAxCitieXRlKSBkb2Vzbid0IHdvcmsgKCJmc2Vla286IGludmFsaWQgYXJndW1l bnQiKS4gIEl0IGxvb2tzIGxpa2UgcGFydHMgb2YKK3RoaXMgQVBJIHdlcmUgdmlzaWJsZSBpbiBM aW51eCBiZWZvcmUgdGhleSB3ZXJlIGFjdHVhbGx5IHdvcmtpbmcuCisyNCBEZWMgMjAwNS4KKwor Q29udmVydGVkIGFsbCBmc2VlaygpIGFuZCBmdGVsbCgpIHRvIG1hY3JvcyB0aGF0IGV4cGFuZCB0 byBmc2VlaygpIGFuZCBmdGVsbCgpCitvciBmc2Vla28oKSBhbmQgZnRlbGxvKCkgZGVwZW5kaW5n IG9uIHdoZXRoZXIgX0xBUkdFRklMRV9TT1VSQ0UgaXMgZGVmaW5lZC4KK2NrdWZpby5jLCBja3V1 czcuYywgY2t1dXN4LmMsIDI0IERlYyAyMDA1LgorCitNYWRlIGEgQ0tfT0ZGX1QgdmVyc2lvbiBv ZiBjbW51bSgpLiAgSXQgd291bGQgYmUgYSB2ZXJ5IGJpZyBkZWFsIHRvIGp1c3QKK2NoYW5nZSBj bW51bSgpIHRvIHJldHVybiBhIG5ldyB0eXBlLCBzbyBhbm90aGVyIGlkZWEgaXMgdG8gcmVuYW1l IGNtbnVtKCkgdG8KK3NvbWV0aGluZyBlbHNlLCBjbW51bXcoKSwgY2hhbmdlIGl0cyByZXN1bHQg YXJndW1lbnQgdG8gQ0tfT0ZGX1QsIGFuZCB0aGVuCittYWtlIGEgc3R1YiBjbW51bSgpIHRvIGNh bGwgaXQgdG8gZ2V0IGFuIGludCwgdGhlbiBjYWxsIGNtbnVtdygpIGV4cGxpY2l0bHkKK2FueSB0 aW1lIHdlIG5lZWQgYSBiaWcgbnVtYmVyLiAgY2t1Y21kLmMsIDI0IERlYyAyMDA1LgorCitDYWxs aW5nIGNtbnVtdygpIGRpcmVjdGx5IHJlcXVpcmVzIGNoYW5nZXMgdG8gZWFjaCByb3V0aW5lIHRo YXQgdXNlcyBpdC4KK1RoZSBJTkNSRU1FTlQgYW5kIERFQ1JFTUVOVCBjb21tYW5kcywgZm9yIGV4 YW1wbGUsIHJlcXVpcmVkIGNoYW5nZXMgdG8KK2RvaW5jcigpLCB2YXJ2YWwoKSwgYW5kIGluY3Zh cigpLCBhbmQgYWxsIHJlZmVyZW5jZXMgdG8gdGhlbS4gIGNrdXVzci5bY2hdLAorY2t1dXNbNTZd LmMsIDI0IERlYyAyMDA1LgorCitDYWxsaW5nIGNtbnVtdygpIGluIGNoYWluZWQgRkRCcyByZXF1 aXJlZCBkZWZpbmluZyBhIG5ldyBmdW5jdGlvbiBjb2RlLAorX0NNTlVXLCBhZGRpbmcgYSBuZXcg bWVtYmVyIHRvIHRoZSBPRkRCIHN0cnVjdCBmb3IgcmV0dXJuaW5nIHdpZGUgcmVzdWx0cywKK2Fu ZCBhZGRpbmcgYSBuZXcgY2FzZSB0byBjbWZkYigpLiAgY2t1Y21kLltjaF0sIDI0IERlYyAyMDA1 LgorCitDaGFuZ2VkIEZTRUVLIGFuZCBGQ09VTlQgdG8gdXNlIHRoZSBuZXcgY2hhaW5lZCBGREIg aW50ZXJmYWNlLCBub3cgd2UgY2FuCitzZWVrIGFuZCBsb29rIHBhc3QgMkdCLiAgY2t1dXM3LmMs IDI0IERlYyAyMDA1LgorCitOZXh0IGNvbWUgc3dpdGNoZXMsIHdoaWNoIHN0b3JlIHRoZWlyIHJl c3VsdHMgaW4gYSBzdHJ1Y3Qgc3RyaW5naW50LiAgVGhpcworc3RydWN0IHdhcyBkZWZpbmVkIGlu IGVhY2ggbW9kdWxlIHdoZXJlIGl0IHdhcyB1c2VkIChja3V1c1tyMzY3XS5jLCBja2NmdHAuYyku CitJIG1vdmVkIHRoZSBkZWZpbml0aW9uIHRvIGNrdXVzci5oIGFuZCBhZGRlZCBhIHd2YWwgbWVt YmVyLCB3aGljaCBjYW4gYmUKK3JlZmVyZW5jZWQgYnkgYW55IHN3aXRjaC1wYXJzaW5nIGNvZGUg dGhhdCBjYWxscyBjbW51bXcoKS4gIDI0IERlYyAyMDA1LgorCitDaGFuZ2VkIFNFTkQgL0NBTElC UkFURTpuIHRvIGFsbG93IGJpZyB2YWx1ZXMgb2Ygbi4gIFRoaXMgbWFrZXMgaXQgcG9zc2libGUK K3RvIHRlc3QgdGhlIHByb3RvY29sIGFzcGVjdHMgb2YgbG9uZy1maWxlIHRyYW5zZmVyIHdpdGhv dXQgYWN0dWFsbHkgaGF2aW5nIGEKK2xvbmcgZmlsZSBoYW5keS4gIGNrdXVzci5jLCAyNCBEZWMg MjAwNS4KKworU0VORCAvU01BTExFUi1USEFOOm4sIFNFTkQgL0xBUkdFUi1USEFOOm4sIGFuZCBh bmQgU0VORCAvU1RBUlQ6biBhbHNvIG5vdworYWxsb3cgbGFyZ2UgdmFsdWVzIG9mIG4uICBja3V1 c3IuYywgMjQgRGVjIDIwMDUuCisKK0NoYW5nZWQgdGhlIGFsZ2VicmFpYyBleHByZXNzaW9uIGV2 YWx1YXRvciB0byB1c2Ugd2lkZSB2YWx1ZXMuCitja3V1czUuYywgMjQgRGVjIDIwMDUuCisKK0Zp eGVkIGNrZnN0b2EoKSB0byBoYW5kbGUgdGhlIGNhc2Ugd2hlbiBuIGlzIG5lZ2F0aXZlIGFuZCAo MCAtIG4pIGlzIGFsc28KK25lZ2F0aXZlLCB3aGljaCBoYXBwZW5zIGZvciBudW1iZXJzIDJeKG4t MSkgb3IgZ3JlYXRlciwgd2hlcmUgbiBpcyB0aGUKK251bWJlciBvZiBiaXRzIGluIHRoZSB3b3Jk IHNpemUgd2UncmUgZGVhbGluZyB3aXRoLCBlLmcuIDY0LCBpbiB3aGljaCBjYXNlCisyXjYzIGhh cyBpdHMgc2lnbiBiaXQgc2V0IHNvIHNlZW1zIHRvIGJlIG5lZ2F0aXZlLiAgSW4gc3VjaCBjYXNl cywgY2tmc3RvYSgpCityZXR1cm5zICJPVkVSRkxPVyIgaW5zdGVhZCBvZiBhIG51bWVyaWMgc3Ry aW5nLiAgV2UnbGwgaGF2ZSB0byBzZWUgaG93IHRoaXMKK3BsYXlzIG91dCBidXQgSSB0aGluayBp dCdzIGJldHRlciB0byBjYXVzZSBhIHBhcnNlIGVycm9yIGFuZCBzdG9wIHRoaW5ncworZGVhZCB0 aGFuIHRvIHJldHVybiBhIHNwdXJpb3VzIG51bWJlci4gIGNrY2xpYi5jLCAyNCBEZWMgMjAwNS4K KworQ29udmVydGVkIHRoZSBTLUV4cHJlc3Npb24gaGFuZGxlciB0byB1c2Ugd2lkZSBpbnRlZ2Vy cy4gY2t1dXMzLmMsIDI0IERlYyAyMDA1LgorCitUb29rIGFsbCB0aGUgTE9OR0xPTkcgc3R1ZmYg b3V0IG9mIGNrY2RlYi5oLCB3ZSBkb24ndCBuZWVkIGl0LgorCitBbGwgb2YgdGhlc2UgY2hhbmdl cyByZXN1bHQgaW4gNjQtYml0IGFyaXRobWV0aWMgKG1vcmUgb3IgbGVzcykgb24gMzItYml0CitM aW51eCwgYXMgd2VsbCBhcyBvbiB0cnVlIDY0LWJpdCBwbGF0Zm9ybXMuCisKK1JlYnVpbHQgdG9k YXkncyBjb2RlIG9uIFNvbGFyaXMgOSBpbiB0aGUgMzItYml0IGFuZCA2NC1iaXQgd29ybGRzLCBv biBSZWQKK0hhdCA2LjEsIFJlZCBIYXQgQVM0LjIuICBJIGhhdmVuJ3QgYm90aGVyZWQgdHJ5aW5n IGEgMzIvNjQgaHlicmlkIGJ1aWxkIGZvcgorU29sYXJpcywgc2luY2UgSSBjYW4gYnVpbGQgYSBw dXJlIDY0LWJpdCB2ZXJzaW9uIHRoZXJlLiAgUXVpY2sgdGVzdHMgc2hvdwordGhlIGxhcmdlLW51 bWJlciBhcml0aG1ldGljIHdvcmtzIE9LIGluIGFsbCBjYXNlcyBleGNlcHQsIG9mIGNvdXJzZSwg b24gcHVyZQorMzItYml0IGJ1aWxkcyAodW5mb3J0dW5hdGVseSBJIGNhbid0IGZpbmQgYSBydW5u aW5nIExpbnV4IHN5c3RlbSBvbGQgZW5vdWdoCit0byB2ZXJpZnkgdGhpcyBmb3IgTGludXgsIGJ1 dCBpdCdzIHRydWUgZm9yIG90aGVyIDMyLWJpdCBwbGF0Zm9ybXMpLgorMjQgRGVjIDIwMDUuCisK K1RyaWVkIGJ1aWxkaW5nIGEgaHlicmlkIHZlcnNpb24gb24gU29sYXJpcyA5IGFmdGVyIGFsbCBz aW5jZSB0aGUgTEZTIEFQSSBpcworb3N0ZW5zaWJseSB0aGUgc2FtZSBhcyBmb3IgTGludXg6CisK KyBtYWtlIHNvbGFyaXM5ICJLRkxBR1M9LURfTEFSR0VGSUxFX1NPVVJDRSAtRF9GSUxFX09GRlNF VF9CSVRTPTY0IgorCitJdCBidWlsdCBzbW9vdGhseSBhbmQgdGhlIHJlc3VsdGluZyBiaW5hcnkg aXMgMi41TUIgY29tcGFyZWQgdG8gMy40TUIgZm9yCit0aGUgMTAwJSA2NC1iaXQgdmVyc2lvbi4g IExvb2tzIGxpa2UgYSBrZWVwZXIuICBGb3Igbm93LCBhZGRlZCBzb2xhcmlzOWxmcworYW5kIHNv bGFyaXMxMGxmcyBlbnRyaWVzIHRvIHRoZSBtYWtlZmlsZSBidXQgaWYgdGhlc2Ugd29yayBvbiBQ Q3Mgd2UgY2FuCittYWtlIHRoZXNlIHRoZSByZWd1bGFyIGVudHJpZXMgZm9yIFNvbGFyaXMgOSBh bmQgMTAuICAyNyBEZWMgMjAwNS4KKworQnVpbHQgb24gTWFjIE9TIFggMTAuNCB3aXRoIHRoZSBy ZWd1bGFyIHRhcmdldC4gIEl0IHNlZW1zIHRoYXQgaW4gdGhhdCBjYXNlLAorb2ZmX3QgaXMgNjQg Yml0cyBhbnl3YXkuICBOb3RpY2VkIHRoYXQgYSBsb3Qgb2Ygc3R1ZmYgZGlkbid0IHdvcmssIGxp a2UKK2V4cG9uZW50aWF0aW9uIGluIFMtRXhwcmVzc2lvbnMuICBUcmllZCBidWlsZGluZyBpdCBh cyBhYm92ZSwgd2hpY2ggd29ya2VkLAorYW5kIG5vdyBDS19PRkZfVCBpcyA2NCBiaXRzIGluc3Rl YWQgb2YgMzIsIGJ1dCAoXiAyIDMwKSBpcyBzdGlsbCAyLjAuICBJbgorZmFjdCAyLXRvLXRoZS1h bnktcG93ZXIgaXMgMi4wLiAgSXQgc2VlbXMgdGhhdCB0aGUgTWFjIE9TIFggdmVyc2lvbiBkaWQg bm90CitoYXZlIEZORkxPQVQgZGVmaW5lZC4gIEl0IGFsc28gc2VlbXMgdGhhdCBldmVyeSB0ZXN0 IGluIGRvc2V4cCgpIGxpa2U6CisKKyAgaWYgKHJlc3VsdCAhPSBmcHJlc3VsdCkgZnBmbGFnKys7 CisKK3Nob3VsZCBoYXZlIGJlZW4gcHJvdGVjdGVkIGJ5ICNpZmRlZiBGTkZMT0FULi4jZW5kaWYg LyogRk5GTE9BVCAqLyAtLSBhCitkb3VibGUtZW5kZWQgYnJlYWssIGFzIHRoZXkgc2F5IGluIHRo ZSBudWNsZWFyIHBvd2VyIGluZHVzdHJ5LiAgY2t1dXMzLmMsCisyNyBEZWMgMjAwNS4KKworQWRk ZWQgR1JFUCAvRVhDRVBUOnBhdHRlcm4uICBja3V1c1syNl0uYywgMjcgRGVjIDIwMDUuCisKK0Zp eGVkIGEgcHJvYmxlbSB3aXRoIHVuaW5pdGlhbGl6ZWQgcHZbXS53dmFsIChzd2l0Y2gtcGFyc2lu ZyBwYXJhbWV0ZXItdmFsdWUpCittZW1iZXJzIHRoYXQgc2hvd2VkIHVwIG9uIGNlcnRhaW4gcGxh dGZvcm1zIG9yIHdpdGggY2VydGFpbiBjb21waWxlcnMuICBOb3cKK3RoZSBNYWMgT1MgWCAxMC40 IHZlcnNpb24gd29ya3MuICBja3V1c1tyMzY3XS5jLCBja2NmdHAuYywgMjggRGVjIDIwMDUuCisK K0J1aWx0IG9uIFVuaXh3YXJlIDcuMS4xLCBhIHB1cmUgMzItYml0IGJ1aWxkLCBzZWVtcyBmaW5l LiAgUmVidWlsdCBvbiBSZWQKK0hhdCBBUyA0LjIganVzdCB0byBtYWtlIHN1cmUgSSBkaWRuJ3Qg YnJlYWsgYW55dGhpbmcsIGl0J3MgT0suICBObyB0ZXN0aW5nCitvbiBIUC1VWCwgZXRjLCBiZWNh dXNlIEhQIHRlc3Rkcml2ZSBmaWxlIHN5c3RlbSBpcyBmdWxsLCBjYW4ndCB1cGxvYWQKK2FueXRo aW5nLiAgMjkgRGVjIDIwMDUuCisKK0NvbW1lbnRlZCBvdXQgdGhlIFNIT1cgRkVBVFVSRVMgc2Vj dGlvbiB0aGF0IGRpc3BsYXlzIGNvbnN0YW50cyBsaWtlCitJTlRfTUFYLCBDSEFSX01BWCwgZXRj LCBiZWNhdXNlIHByaW50aW5nIGVhY2ggdmFsdWUgaW4gdGhlIGFwcHJvcHJpYXRlCitmb3JtYXQg aXMgdG9vIHRyaWNreSwgYW5kIHdlIGRvbid0IG5lZWQgdGhlbSBhbnl3YXkuICBja3V1czUuYywg MjkgRGVjIDIwMDUuCisKK1VwZGF0ZWQgY2t2ZmlvLmMgdG8gdXNlIENLX09GRl9UIGZvciB0aGUg cmVsZXZhbnQgdmFyaWFibGVzLiAgQnVpbHQgYW5kCit0ZXN0ZWQgb24gVk1TL0FscGhhIDcuMjog ZmlsZSB0cmFuc2ZlciBpbiByZW1vdGUgbW9kZTsgbWFraW5nIGEgVGVsbmV0Citjb25uZWN0aW9u IGFuZCB0aGVuIGxvY2FsLW1vZGUgZmlsZSB0cmFuc2ZlcjsgUy1FeHByZXNzaW9ucywgYWxsIE9L LiAgQWxzbworYnVpbHQgYSBuby1uZXQgdmVyc2lvbiBPSy4gIDI5IERlYyAyMDA1LgorCitCdWls dCBhbmQgdGVzdGVkIG9uIFJlZCBIYXQgQVM0IEFNRCBYODZfNjQsIHVzZWQgaXQgdG8gdXBsb2Fk IG5ldyBzb3VyY2VzIHRvCitGcmVlQlNEIDQuMTEuICBCdWlsdCBvbiBGcmVlQlNEIDQuMTEvaTM4 Ni4gIEhlcmUncyBhbm90aGVyIG9uZSB3aGVyZSBvZmZfdAoraXMgNjQgYml0cywgZXZlbiB0aG91 Z2ggbG9uZyBpcyAzMiBiaXRzLiAgQnV0IGl0IHNlZW1zIHRvIHdvcmsgb2ssIG5vdCBzdXJlCit3 aHksIHdoZW4gQ0tfT0ZGX1QgaXMgMzIgYml0cy4gIFRoZXJlIGlzIG5vIF9MQVJHRUZJTEVfU09V UkNFIHN0dWZmIGluIHRoZQoraGVhZGVyIGZpbGVzLiAgMjkgRGVjIDIwMDUuCisKK0J1aWx0IG9u IE1hYyBPUyBYIDEwLjMuOSB1c2luZyB0aGUgbmV3IG1hY29zeDEwLjQgdGFyZ2V0IHRvIHBpY2sg dXAgTEZTLgorV29ya3MgZmluZS4KKworQnVpbHQgb24gUmVkIEhhdCBMaW51eCA0V1Mgb24gSUE2 NCAoNjQtYml0KS4gIE5vdyB0aGlzIG9uZSBpcyBvZGQsIHN0YXQoKQorZmFpbHMgb24gYmlnIGZp bGVzLiAgSXQgaGFwcGVucyBhbHNvIGlmIEkgdXNlIHRoZSAibGludXhub2xmcyIgdGFyZ2V0LCB3 aGljaAorZG9lcyBub3QgZGVmaW5lIF9VU0VfTEFSR0VGSUxFIG9yIF9GSUxFX09GRlNFVF9CSVRT PTY0LiAgRElSRUNUT1JZIEJJR0ZJTEUKK3Nob3dzIHRoZSBzaXplIGFzIC0xLCBidXQgaWYgImxv ZyBkZWJ1ZyIsIGl0IHNheXMgIm5vIGZpbGVzIG1hdGNoIiwgaS5lLgorZGlmZmVyZW50IGJlaGF2 aW9yLCBvYnNlcnZlciBlZmZlY3QuICBJIGhhdGUgd2hlbiB0aGF0IGhhcHBlbnMuCisKK0xldCdz IHNlZSBpZiB0aGF0J3MgYW4gYW5vbWFseS4uLiAgQnVpbHQgb24gVHJ1NjQgVW5peCA0LjBGICg2 NC1iaXQgQWxwaGEpLgorSXQgc2VlcyBsb25nIGZpbGVzIGp1c3QgZmluZS4gIFJlYnVpbHQgYW5k IGNoZWNrZWQgb24geDg2XzY0IGFnYWluLi4uIGZpbmUuCitPSywgbGV0J3Mgbm90IHdvcnJ5IGFi b3V0IElBNjQgeWV0LgorCitBbm90aGVyIHNtYWxsIGZpeCB0byB0aGUgSFAtVVggOS4wIHRhcmdl dCBmcm9tIFBldGVyRS4gIG1ha2VmaWxlLCAyOSBEZWMgMjAwNS4KKworLS0tRGV2LjEwLS0tCisK K0NvZGUgYWRqdXN0bWVudHMgZnJvbSBKZWZmLCBtYWlubHkgdG8gdGhlIFNTTCBhbmQgVExTIFJh dyBtb2RlIGNvZGUgZnJvbQorc2V2ZXJhbCB3ZWVrcyBhZ28sIHBsdXMgY2hhbmdpbmcgc29tZSBk YXRhIHR5cGVzIGluIHRoZSBzZWN1cml0eSBjb2RlIHRvCitDS19PRkZfVCwgcGx1cyBhIGRpZmZl cmVudCBkYXRhIHR5cGUgZm9yIENLX09GRl9UIGZvciBLOTUgYmVjYXVzZSBXaW5kb3dzCitzaXpl X1QgaXNuJ3Qgc2lnbmVkLiAgVGhpcyBwcmVzdW1hYmx5IHdpbGwgYWxsb3cgbGFyZ2UtbnVtYmVy IGFyaXRobWV0aWMgYnV0CitpdCB3aWxsIG5vdCBnaXZlIGxhcmdlIGZpbGUgYWNjZXNzIGJlY2F1 c2UgdGhhdCB3aWxsIHJlcXVpcmUgcmVwbGFjaW5nIGFsbCBDCitsaWJyYXJ5IGZpbGUgaS9vIGNh bGxzIChlc3AuIGluIGNrb2Zpby5jKSB3aXRoIG5hdGl2ZSBXaW5kb3dzIEFQSXMuICBCdWlsZAor b24gU29sYXJpcyA5IHdpdGggYW5kIHdpdGhvdXQgU1NMIGFuZCBvbiBMaW51eCBSSCBBUzQuMiB3 aXRoIGFuZCB3aXRob3V0CitTU0wuICBja19jcnAuYywgY2tfc3NsLmMsIGNrX3NzbC5oLCBja2Nk ZWIuaCwgY2tjZnRwLmMsIGNrY21haS5jLCBja2NuZXQuYywKK2NrY25ldC5oLCBja2N0ZWwuYywg Y2t1YXQyLmgsIGNrdXVzNC5jLCBja3V1czcuYywgY2t1dXNyLmMsIDMwIERlYyAyMDA1LgorCitJ dCB3YXMgcmVwb3J0ZWQgdGhhdCBXUklURSBTRVNTSU9OIGFsd2F5cyByZXR1cm5lZCBhIGZhaWx1 cmUgc3RhdHVzLCBldmVuCit3aGVuIGl0IHN1Y2NlZWRlZC4gIFRoZSBwcm9ibGVtIHdhcyB0aGF0 IFVuaXggdmVyc2lvbnMgb2YgenNvdXQoKSBhbmQKK3pzb3V0bCgpLCBmb3IgdGhlIHNlc3Npb24g bG9nIG9ubHksIHdlcmUgdXNpbmcgd3JpdGUoKSBhbmQgcmV0dXJuaW5nCit3cml0ZSgpJ3MgcmV0 dXJuIGNvZGUsIHdoaWNoIGlzIGRpZmZlcmVudCBmcm9tIHdoYXQgenNvdXQoKSBhbmQgenNvdXRs KCkgYXJlCitkb2N1bWVudGVkIHRvIHJldHVybi4gIEFsc28gcGx1Z2dlZCBhIGNvdXBsZSBwb3Rl bnRpYWwgaG9sZXMgaW4genNvdXR4KCkKK3RoYXQgSSBub3RpY2VkIHdoaWxlIEkgd2FzIGluIHRo ZSBuZWlnaGJvcmhvb2QuICBja3VmaW8uYywgMzAgRGVjIDIwMDUuCisKK0FkZGVkIEZTRUVLIC9G SU5EOnBhdHRlcm4uICBUaGlzIGZvcm0gb2YgRlNFRUsgYWNjZXB0cyBhbGwgdGhlIG90aGVyCitz d2l0Y2hlcyBhbmQgYXJndW1lbnRzIGFuZCBwZXJmb3JtcyB0aGUgZGVzaXJlZCBzZWVrLiAgVGhl biwgaWYgdGhlIHNlZWsgd2FzCitzdWNjZXNzZnVsLCBpdCBzdGFydHMgZnJvbSB0aGF0IHBvaW50 IGFuZCByZWFkcyB0aHJvdWdoIHRoZSBmaWxlLCBsaW5lIGJ5CitsaW5lLCBzZWFyY2hpbmcgZm9y IHRoZSBmaXJzdCBsaW5lIHRoYXQgY29udGFpbnMgdGhlIGdpdmVuIHN0cmluZyBvciBtYXRjaGVz Cit0aGUgZ2l2ZW4gKHVuYW5jaG9yZWQpIHBhdHRlcm4gYW5kLCBpZiBmb3VuZCwgc2V0cyB0aGUg ZmlsZSBwb2ludGVyIHRvIHRoZQorYmVnaW5uaW5nIG9mIHRoYXQgbGluZS4gIFVzZWZ1bCwgZS5n LiwgZm9yIHZlcnkgbG9uZyB0aW1lc3RhbXBlZCBsb2dzLCB3aGVyZQoreW91IHdhbnQgdG8gc3Rh cnQgcHJvY2Vzc2luZyBhdCBhIGNlcnRhaW4gZGF0ZSBvciB0aW1lOyBzZWFyY2hpbmcgZm9yIGEK K3BhcnRpY3VsYXIgc3RyaW5nIGlzIG11Y2ggZmFzdGVyIHRoYW4gZG9pbmcgZGF0ZSBjb21wYXJp c29ucyBvbiBlYWNoIGxpbmUuCitja3V1c1syN10uYywgMzAgRGVjIDIwMDUuCisKK0l0IHdhcyBh bm5veWluZyBtZSB0aGF0IEZJTEUgU1RBVFVTIChGU1RBVFVTKSByZXF1aXJlZCBhIGNoYW5uZWwg bnVtYmVyIHRvCitiZSBnaXZlbiBldmVuIGlmIG9ubHkgb25lIGZpbGUgd2FzIG9wZW4sIHNvIEkg c3VwcGxpZWQgdGhlIGNvcnJlY3QgZGVmYXVsdAoraW4gdGhhdCBjYXNlLiAgY2t1dXM3LmMsIDMw IERlYyAyMDA1LgorCitJTlBVVCAvTk9XUkFQLCBhZGRlZCByZWNlbnRseSwgaXMgdXNlZCBmb3Ig ZWZmaWNpZW50bHkgY29weWluZyB0aGUgSU5QVVQKK3N0cmVhbSBpbnRhY3QsIGJ1dCBpdCdzIG5v dCBnb29kIGZvciBtYXRjaGluZyBiZWNhdXNlIGlmIHRoZSBJTlBVVCB0YXJnZXQgaXMKK2Jyb2tl biBiZXR3ZWVuIHRoZSBlbmQgb2YgdGhlIHByZXZpb3VzIGJ1ZmZlciBhbmQgdGhlIGJlZ2lubmlu ZyBvZiB0aGUgbmV4dAorb25lLCB0aGUgY29udGV4dCBpcyBsb3N0IGFuZCB0aGUgbWF0Y2ggZG9l cyBub3Qgb2NjdXIuICBJIHRob3VnaHQgb2Ygc2V2ZXJhbAord2F5cyBhcm91bmQgdGhpcywgYnV0 IHRoZXkgYWxsIGludm9sdmUgc2F2aW5nIGEgaHVnZSBhbW91bnQgb2YgY29udGV4dCAtLQorb2xk IGlucHV0IGJ1ZmZlcnMsIHRoZSBhcnJheXMgb2YgdGFyZ2V0IHN0cmluZ3MgYW5kIGNvcnJlc3Bv bmRpbmcgbWF0Y2gKK3Bvc2l0aW9ucywgZXRjLiAgVGhlIGFsdGVybmF0aXZlIGlzIGZhaXJseSBz aW1wbGUgYnV0IGl0J3Mgbm90IHRyYW5zcGFyZW50Cit0byB0aGUgdXNlci4gIEhlcmUncyB3aGF0 IEkgZGlkIGluIGEgUE9QIHNjcmlwdDoKKworICAgIC5lb20gOj0gIlwxM1wxMC5cMTNcMTAiCisg ICAgc2V0IGZsYWcgb2ZmICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBGTEFHIE9OID0gc3Vj Y2VzcworICAgIHdoaWxlICggb3BlbiBjb25uZWN0aW9uICYmIG5vdCBmbGFnICkgeworICAgICAg ICAub2xkaW5wdXQgOj0gXGZyaWdodChcdihpbnB1dCksOCkgICMgU2F2ZSB0YWlsIG9mIHByZXZp b3VzIElOUFVUIGJ1ZmZlcgorICAgICAgICBpbnB1dCAvY2xlYXIgL25vd3JhcCA0IFxtKGVvbSkg ICAgICMgR2V0IG5ldyBJTlBVVCBidWZmZXIKKyAgICAgICAgaWYgc3VjY2VzcyB7ICAgICAgICAg ICAgICAgICAgICAgICAjIElOUFVUIG1hdGNoZWQgLSBnb29kCisgICAgICAgICAgICAucyA6PSB7 XGZyZXBsYWNlKFx2KGlucHV0KSxcbShlb20pLFwxM1wxMCl9CisgICAgICAgICAgICBzZXQgZmxh ZyBvbgorICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICMgTm8gbWF0 Y2gKKyAgICAgICAgICAgIC5zIDo9IFx2KGlucHV0KSAgICAgICAgICAgICAgICAjIENoZWNrIGlm IHRhcmdldCBjcm9zc2VkIHRoZSBib3JkZXIKKyAgICAgICAgICAgIC5vbGRpbnB1dCA6PSBcbShv bGRpbnB1dClcZnN1YnN0cihcdihpbnB1dCksMSw4KQorICAgICAgICAgICAgaWYgXGZpbmRleChc bShlb20pLFxtKG9sZGlucHV0KSkgc2V0IGZsYWcgb24KKyAgICAgICAgfQorICAgICAgICAuLi4K KyAgICB9CisKK0kgdGhpbmsgdGhpcyB3aWxsIGJlIGVhc2llciB0byBleHBsYWluIHRoYW4gYW55 IGRhbmdlcm91cyBhbmQgZ3JvdGVzcXVlCittYWdpYyBJIG1pZ2h0IHB1dCBpbnRvIGRvaW5wdXQo KSBpdHNlbGYuICBGb3Igbm93LCBhZGRlZCBhIGZldyB3b3JkcyBhYm91dAordGhpcyB0byBIRUxQ IElOUFVULiAgY2t1dXMyLmMsIDMwIERlYyAyMDA1LgorCitCYWNrIHRvIHRoZSBwYXR0ZXJuIG1h dGNoZXIuICBOb3RpY2VkIHRoYXQgIklGIE1BVENIIGluZGV4Lmh0bWwgW2EtaGotel0qIgorc3Vj Y2VlZGVkIHdoZW4gaXQgc2hvdWxkIGhhdmUgZmFpbGVkLiAgSW4gY2ttYXRjaCgpLCB0aGUgY2xp c3Qgc2VjdGlvbgorbmVlZGVkIG9uZSBtb3JlIGNsYXVzZTogaXQgY2FuJ3QgZmxvYXQgdGhlIHBh dHRlcm4gaWYgYW4gYXN0ZXJpc2sgZG9lcyBub3QKK29jY3VyIGluIHRoZSBwYXR0ZXJuIGJlZm9y ZSB0aGUgY2xpc3QuICBUaGlzIGNoYW5nZSBmaXhlcyB0aGUgcHJvYmxlbQord2l0aG91dCBicmVh a2luZyBhbnkgb3RoZXIgY2FzZXMgdGhhdCB3ZXJlbid0IGFscmVhZHkgYnJva2VuLCBtb3N0IG9m IHdoaWNoCitpbnZvbHZlIHNsaXN0cywgaS5lLiB7c3RyaW5nLHN0cmluZyxzdHJpbmcsLi4ufS4g IGNrY2xpYi5jLCAzMCBEZWMgMjAwNS4KKworVHJpZWQgRlNFRUsgL0ZJTkQ6IG9uIGEgbGFyZ2lz aCBmaWxlIChvdmVyIDEwMCwwMDAgbGluZXMpLCB1c2luZyBpdCB0byBzZWVrCit0byBhIGxpbmUg bmVhciB0aGUgZW5kLiAgSXQgdG9vayAwLjc1NiBzZWNvbmRzLCBjb21wYXJlZCB3aXRoIFVuaXgg Z3JlcCwKK3doaWNoIGRpZCB0aGUgc2FtZSB0aGluZyBpbiAwLjE1MSBzZWMuICBUaGF0J3MgYmVj YXVzZSBDLUtlcm1pdCBpcyB1c2luZworY2ttYXRjaCgpLiAgQnV0IGlmIHRoZSBzZWFyY2ggdGFy Z2V0IGlzIG5vdCBhIHBhdHRlcm4sIGl0IHNob3VsZCBiZSBhIGJpdAorZmFzdGVyIHRvIHVzZSBj a2luZGV4KCkuICBZdXAsIDAuNTU0IHNlYywgYSAzNiUgaW1wcm92ZW1lbnQuICBDYW4ndCBleHBl Y3QKK3RvIGNvbXBldGUgd2l0aCBncmVwLCB0aG91Z2g7IGl0J3MgaGlnaGx5IHR1bmVkIGZvciBp dHMgc2luZ2xlIHB1cnBvc2UuCitja2NsaWIuW2NoXSwgY2t1dXM3LmMsIDEgSmFuIDIwMDYuCisK K1VwZGF0ZWQgdmlzaWJsZSBjb3B5cmlnaHQgZGF0ZXMgdG8gMjAwNjogY2tjbWFpLmMsIGNrdXVz Mi5jLCBja3V1czUuYywKKzEgSmFuIDIwMDYuCisKK05vdGljZWQgdGhhdCBOZXRCU0QgMi4wLjMg aGFzIDY0LWJpdCBvZmZfdCwgYW5kIHRoYXQgX0xBUkdFRklMRV9TT1VSQ0UgaXMKK21lbnRpb25l ZCBpbiA8c3RkaW8uaD4uICBUcmllZCBidWlsZGluZyBLZXJtaXQgd2l0aCBfTEFSR0VGSUxFX1NP VVJDRSBhZGRlZAordG8gQ0ZMQUdTLCBpdCdzIGdvb2QuICBBZGRlZCBpdCB0byB0aGUgbmV0YnNk IHRhcmdldC4gIG1ha2VmaWxlLCAxIEphbiAyMDA2LgorCitGaXhlZCB0eXBvLCAjaWZkZWYgQ0tf Tk9MT05HTE9ORyBpbiBja3V1czUuYyBzaG91bGQgaGF2ZSBiZWVuICNpZm5kZWYKK0NLX0xPTkdM T05HICh3aGljaCwgaXQgdHVybnMgb3V0LCB3ZSBkb24ndCB1c2UgYW55d2F5KS4gIDIgSmFuIDIw MDUuCisKK09ic2VydmVkIHRoYXQgRnJlZUJTRCA0LnggaGFzIGEgNjQtYml0IG9mZl90LCBidXQg ZG9lcyBub3QgdXNlIHRoZQorX0xBUkdFRklMRV9TT1VSQ0UgY29udmVudGlvbi4gIFJlYXNvbmlu ZyB0aGF0IGFsbCB2ZXJzaW9ucyBvZiBGcmVlQlNEIGhhdmUKK29mZl90IChJIHdhcyBhYmxlIHRv IGNoZWNrIGJhY2sgdG8gRnJlZUJTRCAzLjMpLCBJIHNpbXBseSAjZGVmaW5lIENLX09GRl9UCit0 byBiZSBvZmZfdCBpbiBja2NkZWIuaCB3aXRoaW4gI2lmZGVmIF9fRnJlZUJTRF9fIC4uICNlbmRp Zi4gIEFub3RoZXIgb25lCitkb3duLiAgVGhpcyBjYW4gYmUgZG9uZSBmb3IgYW55IHBsYXRmb3Jt IHRoYXQgaXMgZ3VhcmFudGVlZCB0byBoYXZlIG9mZl90LgorVHVybnMgb3V0IEZyZWVCU0QgMy4z IGhhcyA2NC1iaXQgb2ZmX3QgdG9vLiAgMiBKYW4gMjAwNS4KKworT3BlbkJTRCwgc2FtZSBhcyBG cmVlQlNELiAgQWxzbywgYWRkZWQgT1MtdmVyc2lvbi1nZXR0aW5nIHRoaW5nIHRvIG1ha2VmaWxl Cit0YXJnZXQgZm9yIHRoZSBwcm9ncmFtIGhlcmFsZCwgYXMgaW4gdGhlIG90aGVyIEJTRHMuICBC dWlsdCBvbiBPcGVuQlNEIDIuNQorZnJvbSAxOTk4LCBpdCBoYXMgNjQtYml0IG9mZl90IHRvby4g IGNrY2RlYi5oLCBtYWtlZmlsZSwgMiBKYW4gMjAwNS4KKworRHVtcGluZyB0aGUgY29tbWFuZCBz dGFjayBldmVyeSB0aW1lIHRoZXJlJ3MgYW4gZXJyb3IgaXMgcmVhbGx5IHRvbyBtdWNoLgorSSBh ZGRlZCBTRVQgQ09NTUFORCBFUlJPUi1ESVNQTEFZIHswLDEsMiwzfSB0byBzZXQgdGhlIHZlcmJv c2l0eSBsZXZlbCBvZgorZXJyb3IgbWVzc2FnZXMuICBPbmx5IGxldmVsIDMgZHVtcHMgdGhlIHN0 YWNrLiAgY2t1dXNbMjM1XS5jLCAyIEphbiAyMDA1LgorCitCdWlsdCBvbiBIUC1VWCAxMS4xMSB3 aXRoIF9MQVJHRUZJTEVfU09VUkNFIGFuZCBfRklMRV9PRkZTRVRfQklUUz02NC4gIFRoZQorcmVz dWx0IHdvcmtzIGZpbmUgYXMgZmFyIGFzIEkgY2FuIHRlbGwuICBJdCBzZWVzIGJpZyBmaWxlcywg aXQgY2FuIG9wZW4KK3RoZW0sIHNlZWsgdG8gcG9zaXRpb25zIHBhc3QgdGhlIDJeMzEgYm91bmRh cnkuICBJdCBjYW4gc2VuZCBsYXJnZSBmaWxlcy4KK0l0IGNhbiBkbyBsYXJnZS1udW1iZXIgYXJp dGhtZXRpYyAoXiAyIDYyKS4gIFRoZSBvbmx5IHByb2JsZW0gaXMgdGhhdCBkdXJpbmcKK2NvbXBp bGF0aW9uLCBldmVyeSBzaW5nbGUgbW9kdWxlcyB3YXJuczoKKworICBjYzogIi91c3IvaW5jbHVk ZS9zeXMvc29ja2V0LmgiLCBsaW5lIDUwNDogd2FybmluZyA1NjI6IFJlZGVjbGFyYXRpb24gb2YK KyAgInNlbmRmaWxlIiB3aXRoIGEgZGlmZmVyZW50IHN0b3JhZ2UgY2xhc3Mgc3BlY2lmaWVyOiAi c2VuZGZpbGUiIHdpbGwgaGF2ZQorICBpbnRlcm5hbCBsaW5rYWdlLgorICBjYzogIi91c3IvaW5j bHVkZS9zeXMvc29ja2V0LmgiLCBsaW5lIDUwNTogd2FybmluZyA1NjI6IFJlZGVjbGFyYXRpb24g b2YKKyAgInNlbmRwYXRoIiB3aXRoIGEgZGlmZmVyZW50IHN0b3JhZ2UgY2xhc3Mgc3BlY2lmaWVy OiAic2VuZHBhdGgiIHdpbGwgaGF2ZQorICBpbnRlcm5hbCBsaW5rYWdlLgorCitUaGVzZSB3YXJu aW5ncyBzaG91bGQgYmUgcGVyZmVjdGx5IGhhcm1sZXNzIHNpbmNlIHRoZXkgYXJlIG5vdCBjb21p bmcgZnJvbQorQy1LZXJtaXQgY29kZSwgbm9yIGRvZXMgQy1LZXJtaXQgdXNlIGVpdGhlciBvbmUg b2YgdGhvc2UgZnVuY3Rpb25zLiAgVGhlc2UKK3dhcm5pbmdzIGRvbid0IGNvbWUgb3V0IGluIEhQ LVVYIDExaSB2MiwgYnV0IG9uIHRoYXQgb25lIHdlIGdldCB0b25zIGFuZCB0b25zCitvZiBwaWNr eSBjb21waWxlciB3YXJuaW5ncyAodmFyaWFibGVzIHNldCBidXQgbm90IHVzZWQsIGRlZmluZWQg YnV0IG5vdAorcmVmZXJlbmNlZCwgZXRjKS4gIEEgY291cGxlLCBob3dldmVyLCB0dXJuZWQgb3V0 IHRvIGJlIHZhbGlkOyBvbmUgY2FzZSBvZgorImV4cHJlc3Npb24gaGFzIG5vIGVmZmVjdCIsIGFu ZCB0d28gb2YgInN0cmluZyBmb3JtYXQgaW5jb21wYXRpYmxlIHdpdGgKK2RhdGEgdHlwZSIgKEkg bWlzc2VkIGEgY291cGxlIGZpbGUtc2l6ZSBwcmludGZzKS4KKworVGhlcmUgd2VyZSBhbHNvIG51 bWVyb3VzIHdhcm5pbmdzIGFib3V0IHNpZ25lZG5lc3MgbWlzbWF0Y2ggb3Igc2lnbgorY29udmVy c2lvbiBvZiBjb25zdGFudHMgbGlrZSBJQUMgKDB4ZmYpLiAgRG9lcyB0aGUgSFAtVVggT3B0aW1p emluZyBDb21waWxlcgoraGF2ZSBhIGNvbXBpbGVyIGZsYWcgdG8gbWFrZSBhbGwgY2hhcnMgdW5z aWduZWQ/ICBZZXMsICt1YywgYnV0IHRoZSBtYW4gcGFnZQorc2F5cyAiQmUgY2FyZWZ1bCB3aGVu IHVzaW5nIHRoaXMgb3B0aW9uLiAgWW91ciBhcHBsaWNhdGlvbiBtYXkgaGF2ZSBwcm9ibGVtcwor aW50ZXJmYWNpbmcgd2l0aCBIUC1VWCBzeXN0ZW0gbGlicmFyaWVzIGFuZCBvdGhlciBsaWJyYXJp ZXMgdGhhdCBkbyBub3QgdXNlCit0aGlzIG9wdGlvbiIuICBTaWdoLCBiZXR0ZXIgbm90IHVzZSBp dC4KKworQWZ0ZXIgcmV2aWV3aW5nICJIUC1VWCBMYXJnZSBGaWxlcyBXaGl0ZSBQYXBlciBWZXJz aW9uIDEuNCIgYW5kIEhQJ3MKKyJXcml0aW5nIFBvcnRhYmxlIENvZGUiIGRvY3VtZW50cywgSSBh ZGRlZCAtRF9MQVJHRUZJTEVfU09VUkNFCistRF9GSUxFX09GRlNFVF9CSVRTPTY0IHRvIHRoZSBo cHV4MTAwMCB0YXJnZXQsIHdoaWNoIGlzIHRoZSBiYXNpcyBmb3IgYWxsCitIUC1VWCAxMC4wMCBh bmQgbGF0ZXIgYnVpbGRzLiAgTGFyZ2UgZmlsZXMgYXJlIGF2YWlsYWJsZSBpbiBIUC1VWCAxMC4y MCBhbmQKK2xhdGVyLiAgMTAuMDAgYW5kIDEwLjEwIHdlcmUgbm90IHJlYWwgcmVsZWFzZXMsIGFu ZCBhbnl3YXkgdGhlc2UgZmxhZ3MKK3Nob3VsZCBiZSBoYXJtbGVzcyB0aGVyZSB1bmxlc3MgdGhl IGxhcmdlLWZpbGUgaW1wbGVtZW50YXRpb24gd2FzIG9ubHkKK3BhcnRseSBkb25lLiAgQnVpbHQg T0sgb24gYm90aCBQQS1SSVNDIGFuZCBJQTY0LCBvcHRpbWl6ZWQgYW5kIHBsYWluLgorbWFrZWZp bGUsIDQgSmFuIDIwMDYuCisKK0J1aWx0IG9uIEZyZWVCU0QgNi4wIG9uIElBNjQuICBBbGwgT0sg ZXhjZXB0IEkgZ290IGEgd2FybmluZyBhYm91dCB0aGUKK2FyZ3VtZW50IHBhc3NlZCB0byB0aW1l KCkgaW4gbG9nd3RtcCgpIGluIGNrdWZpby5jLiAgVGhpcyBzZWN0aW9uIGhhZAorYWxyZWFkeSBi ZWVuIHBhcnRpYWxseSBmaXhlZDsgdGh1cyBJIHB1dCB0aGUgaW1wcm92ZWQgdmVyc2lvbiBpbnRv CisjaWZkZWYgQ0tfNjRCSVQsIHdoaWNoIGlzIG91ciBuZXdseSBhdmFpbGFibGUgc3ltYm9sIHRo YXQgc2hvdWxkIGJlCithdXRvbWF0aWNhbGx5IGRlZmluZWQgZm9yIGFueSB0cnVlIDY0LWJpdCBi dWlsZC4gIGNrdWZpby5jLCA0IEphbiAyMDA2LgorCitGaW5hbGx5IGdvdCBhcm91bmQgdG8gdGVz dGluZyBKZWZmJ3MgY2hhbmdlcyB0byBTU0wvVExTIFJBVyBtb2RlIGZyb20KK0RlY2VtYmVyIDMw dGggYWdhaW5zdCBvdXIgUE9QIHNlcnZlci4gIEl0IGRpZG4ndCB3b3JrLCBjb3VsZG4ndCBsb2cg aW4uCitUcmllZCBiYWNraW5nIG9mZiB0aGUgY2tjdGVsLmMgY2hhbmdlcyBmaXJzdDsgdGhhdCBh bGxvd2VkIGxvZ2luIGFuZAorY29tbXVuaWNhdGlvbiwgYnV0IGl0IGRpZCBub3Qgc3VwcHJlc3Mg YWN0aXZhdGlvbiBvZiBUZWxuZXQgcHJvdG9jb2wKK3doZW5ldmVyIGEgMHhmZiBieXRlIGFycml2 ZWQuICBCYWNrZWQgb2ZmIHRoZSByZXN0IG9mIHRoZSBjaGFuZ2VzIGFuZCBub3cKK2FsbCBpcyBP SyBhZ2Fpbi4gIGNrY3RlbC5jLCBja2NuZXQuYywgY2t1dXM3LmMsIDkgSmFuIDIwMDYuCisKK0J1 aWx0IG9uIE5ldEJTRCAxLjQuMSAoMTk5OSksIGZvdW5kIHRoYXQgaXQgZGlkIG5vdCBsaWtlIHRo ZSBsYXJnZSBmaWxlCithc3N1bXB0aW9uIC0tIGZzZWVrbygpIGFuZCBmdGVsbG8oKSBkbyBub3Qg ZXhpc3Q7IGFkZGVkIGEgY2xhdXNlIHRvIHRoZQorbmV0YnNkIHRhcmdldCB0byBjaGVjayBmb3Ig ZnNlZWtvIGFuZCBub3QgZGVmaW5lIF9MQVJHRUZJTEVfU09VUkNFIGlmIG5vdAorZm91bmQuICBP ZGRseSBlbm91Z2gsIG9mZl90IGlzIDY0IGJpdHMgYW55d2F5LCBidXQgaXQgZG9lc24ndCBsb29r IGxpa2UgdGhlCitBUElzIGFyZSBoYWxmLWRvbmUuICBGb3IgZXhhbXBsZSwgc3RhdCgpIHVzZXMg b2ZmX3QgKDY0IGJpdHMpIGZvciB0aGUgZmlsZQorbGVuZ3RoLCBidXQgZnNlZWsoKSB1c2VzIGxv bmcgKDMyIGJpdHMpIGFuZCB0aGVyZSBpcyBubyA2NC1iaXQgYW5hbG9nLgorQW55d2F5IHRoZSBu ZXcgbmV0YnNkIHRhcmdldCB3b3JrcyBvbiBib3RoIDEuNC4xIGFuZCAxLjUuMiAobm8gbGFyZ2Ug ZmlsZXMpCithbmQgb24gMi4wLjMgKGxhcmdlIGZpbGVzKS4gIG1ha2VmaWxlLCA5IEphbiAyMDA2 LgorCitCdWlsdCBvbiBRTlgtMzIgNC4yNSwgd2hpY2ggaGFzIG5vIGxhcmdlIGZpbGUgc3VwcG9y dC4gIEdvdCBhIGZldyBzdHJhbmdlCitjb21waWxlciAoV2F0Q29tKSB3YXJuaW5ncywgYnV0IGl0 IGJ1aWx0IGFuZCBydW5zIE9LLiAgTm90aWNlZCB0aGF0IGZpbGUKK3RyYW5zZmVycyBpbnRvIFFO WCBvdmVyIGEgVGVsbmV0IGNvbm5lY3Rpb24gY2FuJ3QgdXNlIHN0cmVhbWluZywgYnV0IHRoYXQn cworbm90aGluZyBuZXcgdG8gdGhpcyB2ZXJzaW9uOyBzYW1lIHRoaW5nIGhhcHBlbnMgd2l0aCBD LUtlcm1pdCA3LjAuICA5IEphbiAyMDA2LgorCitCdWlsdCBvbiBJUklYIDYuNS4gIEkgZGlkbid0 IGJvdGhlciB3aXRoIGxhcmdlIGZpbGVzIHRoZXJlIGJlY2F1c2UgaXQgZG9lcworbm90IHN1cHBv cnQgdGhlIF9MQVJHRUZJTEVfU09VUkNFIGludGVyZmFjZTsgeW91IGhhdmUgdG8gY2hhbmdlIGFs bCB0aGUgQVBJcworYXQgdGhlIHNvdXJjZSBsZXZlbCBmcm9tIGJsYWgoKSB0byBibGFoNjQoKS4g IFNlZW1zIHRvIHdvcmsgZmluZSBhcyBhIDMyLWJpdAorYXBwIGV2ZW4gdGhvdWdoIGl0cyBvZmZf dCBpcyA2NCBiaXRzLiAgVHJpZWQgYSBwdXJlIDY0LWJpdCBJUklYIDYuNSBidWlsZAorYnV0IGl0 IGRpZXMgaW4gY2tjbmV0LmMgd2hlbiBpdCBoaXRzIFNPQ0tPUFRfVCBhbmQgR1NPQ0tOQU1FX1Qg d2l0aCAiVGhlCitpZGVudGlmaWVyICdzb2NrbGVuX3QnIGlzIHVuZGVmaW5lZCIuCisKK0xvb2tz IGxpa2UgSSBubyBsb25nZXIgaGF2ZSBhY2Nlc3MgdG8gU0NPIE9TUjUuCisKK01hZGUgYSBwdXJl IDMyLWJpdCBidWlsZCBvbiBTQ08gVW5peFdhcmUgNy4xLjQsIGFsbCBPSy4gIEZvdW5kIHRoYXQg dGhpcwordmVyc2lvbiBhbHNvIHN1cHBvcnRzIExGUywgYWRkZWQgaXQgdG8gdGhlIHV3NyB0YXJn ZXQuICBtYWtlZmlsZSwgOSBKYW4gMjAwNi4KKworLS0tIERldi4xMSAtLS0KKworRXZpZGVudGx5 IHRoZSBIUC1VWCBidW5kbGVkIChub24tQU5TSSBub24tb3B0aW1pemluZykgY29tcGlsZXIgZG9l c24ndCBsaWtlCitsb25nIGludGVnZXJzIGluIHN3aXRjaCBleHByZXNzaW9ucy4gIENoYW5nZWQg dGhyZWUgZXhhbXBsZXMgb2YgdGhlc2UgaW4gdGhlCitTLWV4cHJlc3Npb24gY29kZS4gIGNrdXVz My5jLCAxMCBKYW4gMjAwNi4KKworQSBzZWN0aW9uIG9mIHRzdGF0cygpIHdoZXJlIEdGVElNRVIg aXNuJ3QgZGVmaW5lZCAoZS5nLiBvbiBNb3Rvcm9sYQorc3Y2OHIzdjYpIHdhcyBnYXJibGVkLiAg Rml4ZWQgaW4gY2tjZm4yLmMsIDEwIEphbiAyMDA2LgorCitBIGZpeCBmb3Igc2V0dGluZyA5MjE2 MDAgYnBzIG9uIExpbnV4IGZyb20gUGF1bCBGdWxnaHVtLCBNaWNyb2dhdGUgU3lzdGVtcyBMdGQu Cit0dGdzcGQoKTogY2t1dGlvLmMsIDExIEphbiAyMDA2LgorCitOb3RpY2VkIHRoYXQgd2hlbiBJ IGNoYW5nZWQgdGhlIGNvbXBhY3Qgc3Vic3RyaW5nIG5vdGF0aW9uIGNvZGUgYmFjayBvbgorQXVn dXN0IDl0aCwgSSBicm9rZSB0aGUgYWJpbGl0eSB0byB1c2UgYXJpdGhtZXRpYyBleHByZXNzaW9u cyB3aXRoaW4gdGhlCiticmFja2V0cywgd2hpY2ggZXhwbGFpbnMgc29tZSByYXRoZXIgb2RkIGJl aGF2aW9yIEkgc2F3IHdpdGggc29tZSBvZiBteQorc2NyaXB0cy4gIExvb2tpbmcgbW9yZSBkZWVw bHkgaW50byB0aGlzLCBJIGFsc28gc2VlIHRoYXQgYWxsIHRoZSBwYXJzZXJzIEkKK2hhdmUgYmVl biB1c2luZyB1cCB0byBub3cgZm9yIHRoaXMsIGFzIHdlbGwgYXMgZm9yIGFycmF5IGJvdW5kcyBw YWlycywgaGF2ZQorYmVlbiBpbmFkZXF1YXRlIGJlY2F1c2UgdGhleSBuZXZlciBhbGxvd2VkIGZv ciBuZXN0ZWQgY29uc3RydWN0aW9ucywgc3VjaCBhcworYSBtZW1iZXIgb2YgYSBib3VuZHMgcGFp ciB0aGF0IGl0c2VsZiB3YXMgYW4gYXJyYXkgZWxlbWVudCwgcG9zc2libHkgd2l0aAorYW5vdGhl ciBhcnJheSBlbGVtZW50IGFzIGEgc3Vic2NyaXB0LiAgSSB3cm90ZSBhIG5ldyByb3V0aW5lIGZv ciB0aGlzLAorY2FsbGVkIGJvdW5kc3BhaXIoKSwgd2hpY2ggaXMgbGlrZSBhcnJheWJvdW5kcygp IGV4Y2VwdCBpdCBhY2NlcHRzIGFuIGV4dHJhCithcmd1bWVudCwgYW4gYXJyYXkgb2YgY2hhcmFj dGVycyB0aGF0IGNhbiBzZXJ2ZSBhcyBib3VuZHMtcGFpciBkZWxpbWl0ZXJzLAorYW5kIGl0IHJl dHVybnMgdGhlIHBhaXIgc2VwYXJhdG9yIHRoYXQgd2FzIGVuY291bnRlcmVkIGluIGFub3RoZXIg bmV3Cithcmd1bWVudC4gIEZvciB0aGUgYWx0ZXJuYXRpdmUgc3Vic3RyaW5nIG5vdGF0aW9uIGZv ciBbc3RhcnRwb3MtZW5kcG9zXSBJCitoYWQgdG8gY2hhbmdlIHRoZSBkZWxpbWl0ZXIgZnJvbSAn LScgdG8gJ18nIGJlY2F1c2UgJy0nIGNhbiBiZSB1c2VkIGluCithcml0aG1ldGljIGJ1dCAnXycg aXMgbm90IGEgcmVjb2duaXplZCBvcGVyYXRvci4gIFRoaXMgaXMgc28gSSBjYW4gcGFyc2UsCitl LmcuIFthOmJdIG9yIFthX2JdIGluIHRoZSBzYW1lIGNvbnRleHQsIGFuZCB0aGVuIGZpbmQgb3V0 IHdoaWNoIGZvcm0gd2FzCit1c2VkLCBlLmcuIFxzKGxpbmVbOToxMl0pIG9yIFxzKGxpbmVbOV8x Ml0pOyB0aGUgZmlyc3Qgc3RyaW5nIGlzIDQgYnl0ZXMKK2xvbmcsIHRoZSBzZWNvbmQgaXMgMTIu ICBFdmVyeXRoaW5nIHNlZW1zIHRvIGJlIE9LIG5vdy4gIFxzKGxpbmVbMTBdKSBnaXZlcworZXZl cnl0aGluZyBzdGFydGluZyBhdCAxMCwgYnV0IFxzKGxpbmVbMTA6MF0pIGdpdmVzIHRoZSBudWxs IHN0cmluZy4gIEJhZAorc3ludGF4IGluIHRoZSBib3VuZHMgcGFpcnMgcmVzdWx0cyBpbiBhIG51 bGwgc3RyaW5nOyBtaXNzaW5nIHBpZWNlcyBvZiB0aGUKK2JvdW5kcyBwYWlyIHJlc3VsdCBpbiBk ZWZhdWx0cyB0aGF0IHNob3VsZCBiZSBjb21wYXRpYmxlIHdpdGggcHJldmlvdXMKK2JlaGF2aW9y LiAgY2t1dXNbNDVdLmMsIGNrdXVzci5oLCAxMyBKYW4gMjAwNS4KKworQ2hhbmdlZCBhcnJheWJv dW5kcygpIHRvIGNhbGwgYm91bmRzcGFpcigpLiAgVGhpcyB3YXMgYSByYXRoZXIgZHJhc3RpYwor Y2hhbmdlLCBub3Qgc3RyaWN0bHkgbmVjZXNzYXJ5LCBidXQgSSB0aGluayBJIGdvdCBhbGwgdGhl IGtpbmtzIG91dC4KK2NrdXVzNS5jLCAxMyBKYW4gMjAwNS4KKworQ2hhbmdlcyBmcm9tIFBldGVy RSB0byB0aGUgbWFrZWZpbGUgZm9yIEhQLVVYIDYgYW5kIDcsIHRvIGFjY29tbW9kYXRlIGJpZ2dl cgorc3ltYm9sIHRhYmxlcywgZXRjLiAgMTkgSmFuIDIwMDUuCisKK0RldGVybWluZWQgdGhhdCBT Q08gT1NSNS4wLjYgKGFuZCBlYXJsaWVyKSBkbyhlcykgbm90IHN1cHBvcnQgbGFyZ2UgZmlsZXMu CitEb24ndCBrbm93IGFib3V0IDUuMC43LiAgMzAgSmFuIDIwMDUuCisKK0NyZWF0ZWQgYSBuZXcg YnVpbGQgdGFyZ2V0IGZvciBTQ08gT1NSNi4wLjAuICBHZXRzIHRoZSBleGFjdCA2LngueCB2ZXJz aW9uCitkeW5hbWljYWxseS4gIFN1cHBvcnRzIGxhcmdlIGZpbGVzIGFuZCBiaWctbnVtYmVyIGFy aXRobWV0aWMgdmlhIENLX09GRl9ULgorVGhlIHNvY2tvcHQoKSBmYW1pbHkgb2YgZnVuY3Rpb25z IGNoYW5nZWQgdGhlIGRhdGEgdHlwZXMgb2Ygc29tZSBvZiB0aGVpcgorYXJndW1lbnRzIHNpbmNl IE9TUjUuICBJdCB3YXMgYWxyZWFkeSBwb3NzaWJsZSB0byBkZWZpbmUgU09DS09QVF9UIGFuZAor R1NPQ0tOQU1FX1QgZnJvbSB0aGUgY29tbWFuZCBsaW5lIGJ1dCBJIGhhZCB0byBhZGQgY29kZSB0 byBhbHNvIGFsbG93IHRoaXMKK2ZvciBHUEVFUk5BTUVfVCB0b28uICBja2NuZXQuYywgbWFrZWZp bGUsIDMwIEphbiAyMDA1LgorCitBcHBhcmVudGx5LCBldmVyIHNpbmNlIEMtS2VybWl0IDcuMCB3 YXMgcmVsZWFzZWQsIGl0IGhhcyBuZXZlciBiZWVuIHBvc3NpYmxlCit0byB1c2UgYSB2YXJpYWJs ZSBmb3IgdGhlIGFzLW5hbWUgaW4gYSBSRUNFSVZFIGNvbW1hbmQgaW4gS2VybWl0IDk1LiAgVGhp cworaXMgYmVjYXVzZSBldmFsdWF0aW9uIG9mIHRoZSBhcy1uYW1lIGZpZWxkIHdhcyBkZWZlcnJl ZCB1bnRpbCBhZnRlciB3ZSBjb3VsZAorY2hlY2sgd2hldGhlciBpdCBtaWdodCBiZSBhIGRpcmVj dG9yeSBuYW1lICh3aGljaCwgaW4gV2luZG93cywgY291bGQgc3RhcnQKK3dpdGggYSBiYWNrc2xh c2gpLiAgIFRoaXMgbGl0dGxlIGJpdCBvZiBtYWdpYyB3YXMgbm90IGEgZ29vZCBpZGVhLCBtYWdp YworaGFyZGx5IGV2ZXIgaXMuICBJIGNoYW5nZWQgdGhlIGNvZGUgdG8gZXZhbHVhdGUgYm90aCBh cy1uYW1lIGZpZWxkcyBpbiB0aGUKK25vcm1hbCB3YXkuICBJZiB0aGV5IHdhbnQgdG8gcmVjZWl2 ZSB0byBhIGRpcmVjdG9yeSBjYWxsZWQgIlwlMSIsIHRoZXknbGwKK2p1c3QgaGF2ZSB0byBzcGVs bCBpdCBkaWZmZXJlbnRseS4gIFRoZSB3b3JrYXJvdW5kIGlzIHRvIHR1cm4gdGhlIHdob2xlCitj b21tYW5kIGludG8gYSBtYWNybyBhbmQgZXZhbHVhdGUgaXQgYmVmb3JlIGV4ZWN1dGluZyBpdCwg ZS5nLjoKKworICBhc3NpZ24geHggcmVjZWl2ZSAvYXMtbmFtZTpcJTEKKyAgZG8geHgKKworY2t1 dXM2LmMsIDEgRmViIDIwMDYuCisKK0J1aWx0IE9LIG9uIEZyZWVCU0QgNi4xIG9uIEFNRDY0LiAg QWRqdXN0ZWQgc29tZSBjb3B5cmlnaHRzIGFuZCBkYXRlIHN0YW1wcy4KK2NrY21haS5jLCBtYWtl ZmlsZSwgOCBGZWIgMjAwNi4KKworLS0tIERldi4xMiAtLS0KKworRml4ZWQgYSBzaWduZWQvdW5z aWduZWQgY2hhciB3YXJuaW5nIGluIHRoZSBuZXcgYm91bmRzcGFpcigpIGNhbGxpbmcgY29kZQor aW4gdGhlIGNvbXBhY3Qgc3Vic3RyaW5nIG5vdGF0aW9uIGhhbmRsZXIuICBja3V1czQuYywgOSBG ZWIgMjAwNi4KKworUmVtb3ZlZCBhIHNwdXJpb3VzIGV4dHJhIGxpbnV4K29wZW5zc2wgbGFiZWwg ZnJvbSB0aGUgbWFrZWZpbGUsIGFkZGVkCitzb2xhcmlzMTBnXzY0IHN5bm9ueW0uICA5IEZlYiAy MDA2LgorCitTYXRpc2ZpZWQgbXlzZWxmIHRoYXQgTEZTIGlzIE9LIG9uIFNvbGFyaXMgMTAgaTM4 NiwgYW5kIEknbSBnb2luZyB0byBhc3N1bWUKK2l0J3MgYWxzbyBPSyBvbiBTb2xhcmlzIDkuICBN YWRlIExGUyBzdGFuZGFyZCBmb3IgYWxsIFNvbGFyaXMgOSBhbmQgMTAKK2J1aWxkcyAoaW5jbHVk aW5nIHRoZSBzZWN1cmUgb25lcykgZXhjZXB0IHRoZSBleHBsaWNpdGx5IDY0LWJpdCBvbmVzLCBh bmQKK21hZGUgdGhlIHByb3Zpc2lvbmFsIHNvbGFyaXNYWGxmcyB0YXJnZXRzIGludG8gc3lub255 bXMuICBtYWtlZmlsZSwgOSBGZWIgMjAwNi4KKworLS0tIERldi4xMyAtLS0KKworRnVydGhlciBh dHRlbXB0cyBhdCBTU0wvVExTIG1lc3NhZ2Ugc3VwcHJlc3Npb24gd2hlbiBRVUlFVCBpcyBPTi4K K2NrX3NzbC5jLCAxNiBGZWIgMjAwNi4KKworRnJvbSBKLlNjb3R0IEthc3RlbjogKHF1b3RlLi4u KSBJIGp1c3QgdXBsb2FkZWQgYSBwYXRjaCB0byAva2VybWl0L2luY29taW5nLgorVGhlIGZpbGUg bmFtZSBpcyAianNrLXBhdGNoLWZvci1ja3UyMTEuZGlmZiIuICBJIGhhdmUgYWxzbyBpbmNsdWRl ZCB0aGUKK3BhdGNoIGFzIEFTQ0lJIHRleHQgaW4gdGhpcyBlbWFpbCBiZWxvdy4gIFRoaXMgcGF0 Y2ggbWF5IGJlIGFwcGxpZWQgdG8gdGhlCitja3UyMTEudGFyLmd6IHNvdXJjZSBjb2RlIHZpYToK KyAgY2QgY2t1MjExLCBwYXRjaCAtcDEgPC4uL2pzay1wYXRjaC1mb3ItY2t1MjExLmRpZmYKK1Ro ZSBwYXRjaCBhZGRzIDQgbmV3IGJ1aWxkIHRhcmdldHM6CisgIG5ldGJzZHdvYyAtIGEgc3RyaXBw ZWQgbm8gY3Vyc2VzIHRhcmdldCBmb3IgaWtzZCB1c2VkLgorICBuZXRic2RzZSAgLSBzZWN1cml0 eSBlbmhhbmNlZCB0YXJnZXQgd2l0aCBzcnAsIHNzbCwgYW5kIHpsaWIuCisgIGlyaXg2NWdjYyAt IGJ1aWxkIG9uIFNHSSBJcml4IDYuNSBwbGF0Zm9ybSB1c2luZyBnY2MuCisgIGlyaXg2NXNlICAt IHNlY3VyaXR5IGVuaGFuY2VkIHRhcmdldCB3aXRoIHNycCwgc3NsLCBhbmQgemxpYi4KK1RoZSBw YXRjaCBmaXhlcyBvbmUgYnVpbGQgdGFyZ2V0OgorICBpcml4NjRnY2MgLSBUaGUgIi1zIiBvcHRp b24gaXMgbm90IHN1cHBvcnRlZCBieSBnY2MgdW5kZXIgSXJpeC4KK0kgdGhhbmsgYWxsIG9mIHlv dSBpbiB0aGUgS2VybWl0IFByb2plY3QgZm9yIHN1Y2ggYSBmaW5lIHV0aWxpdHkuICBJCityZWNl bnRseSBoYWQgdG8gZ2V0IGEgMTYgTUIgZmlsZSBvdmVyc2VhcyBhY3Jvc3MgYSBzcG90dHkgY29t bXVuaWNhdGlvbnMKK2xpbmsgdG8gcmVwYWlyIGEgY29tcHV0ZXIgcmVtb3RlbHkuICBLZXJtaXQg d2FzIHRoZSBvbmx5IHRoaW5nIHRoYXQgY291bGQgZG8KK3RoZSBqb2IsIHNvIEkgd2FudGVkIHRv IGNvbnRyaWJ1dGUgdGhlc2UgcGF0Y2hlcyBiYWNrIHRvIHRoZSBtYWluc3RyZWFtIHRvCitzYXkg dGhhbmtzLiAgVGhpcyBkaWdpdGFsbHkgc2lnbmVkIGVtYWlsIGlzIGEgYmluZGluZyBjb250cmFj dCB0aGF0CitvZmZpY2lhbGx5IGFzc2lnbnMgdGhlIHJpZ2h0cyB0byB0aGUgc291cmNlIGNvZGUg cGF0Y2ggKHNob3duIGJlbG93KSB0aGF0IEkKK2RldmVsb3BlZCB0byB0aGUgS2VybWl0IFByb2pl Y3QgYXQgQ29sdW1iaWEgVW5pdmVyc2l0eS4gKC4uLmVuZCBxdW90ZSkKK2NrX3NzbC5jLCBtYWtl ZmlsZSwgMjMgRmViIDIwMDYuCisKK0NoYW5nZWQgdGhlIG5ldyBOZXRCU0QgdGFyZ2V0IG5hbWVz IHRvIGJlIGNvbnNpc3RlbnQgd2l0aCB0aGUgY29udmVudGlvbnMKK3VzZWQgaW4gbW9zdCBvdGhl ciB0YXJnZXRzOgorCisgIG5ldGJzZHdvYyAtPiBuZXRic2RuYworICBuZXRic2RzZSAgLT4gbmV0 YnNkK3NzbCtzcnAremxpYgorICBpcml4NjVzZSAgLT4gaXJpeDY1K3NzbCtzcnAremxpYgorCith bmQgcmVtb3ZlZCBvbGQsIG5vdyBzdXBlcmZsdW91cywgTmV0QlNEIHRhcmdldHMgKG9sZC1uZXRi c2QsIG5ldGJzdDE1LAorbmV0YnN0MTYpLCBsZWF2aW5nIHN5bm9ueW0gbGFiZWxzIGluIHRoZWly IHBsYWNlLiAgQWxzbyB1cGRhdGVkIChjcnVkZWx5KQordGhlIExpbnV4IHRhcmdldCB2YXJpYXRp b25zIChjdXJzZXMgaW5zdGVhZCBvZiBub2N1cnNlcywgbm8gY3Vyc2VzIGF0IGFsbCkKK3RvIGJl IChhcHByb3ByaWF0ZWx5IG1vZGlmaWVkKSBjb3BpZXMgb2YgdGhlIGN1cnJlbnQgbGludXggdGFy Z2V0LiAgSXQgd291bGQKK2JlIG5pY2VyIHRvIGNvbWJpbmUgdGhlbSwgYnV0IHRoaXMgZ2V0cyB0 aGUgam9iIGRvbmUuICBtYWtlZmlsZSwgMjMgRmViIDIwMDYuCisKKy0tLSBEZXYuMTQgLS0tCisK K0ZpeGVkIHRoZSBIRUxQIGNvbW1hbmQgd2hlbiB1c2VkIHdpdGggdG9rZW5zIGxpa2UgQCwgXiwg IywgYW5kIDsuICBUaGUgZmlyc3QKK3R3byBoYWQgYmVlbiBvbWl0dGVkIGZyb20gdGhlIHRhYmxl LiAgVGhlIHNlY29uZCB0d28gcmVxdWlyZWQgYSBuZXcgcGF0aAoraW50byB0aGUgZ3V0cyBvZiB0 aGUgcGFyc2VyLCBzaW5jZSBjb21tZW50cyBhcmUgbm9ybWFsbHkgc3RyaXBwZWQgYXQgYSB2ZXJ5 Citsb3cgbGV2ZWwuICBja3V1c1tyMl0uYywgY2t1Y21kLmMsIDI0IEZlYiAyMDA2LgorCitCdWls dCBvbiBBSVggNS4xICgibWFrZSBhaXg1MSIpIHdpdGhvdXQgaW5jaWRlbnQuICBUaGVuIEkgdHJp ZWQ6CisKKyBtYWtlIGFpeDUxICJLRkxBR1M9LURfTEFSR0VGSUxFX1NPVVJDRSAtRF9GSUxFX09G RlNFVF9CSVRTPTY0IgorCitUaGlzIGhhZCBubyBlZmZlY3QuICBJIGZvdW5kIHRoZSByZWxldmFu dCBkb2N1bWVudCBhdGggdGhlIElCTSB3ZWJzaXRlLiAgSXQKK3NheXMgdG8gdXNlIC1EX0xBUkdF X0ZJTEVTIGluc3RlYWQuICBJIGFkZGVkIHRoaXMgdG8gdGhlIEFJWCA0LjIgdGFyZ2V0CitzaW5j ZSAoYSkgSUJNIHNheXMgbGFyZ2UgZmlsZXMgYXJlIHN1cHBvcnRlZCBieSBBSVggNC4yIGFuZCBs YXRlciwgYW5kIChiKQorYWxsIEtlcm1pdCBBSVggdGFyZ2V0cyBwYXN0IDQuMiB1c2UgdGhlIDQu MiBvbmUuICBQbHVzIGEgY2xhdXNlIHRvIG1ha2UKK3N1cmUgQ0tfT0ZGX1QgaXMgZGVmaW5lZCBh cHByb3ByaWF0ZWx5LiAgY2tjZGViLmgsIG1ha2VmaWxlLCA2IE1hciAyMDA2LgorCitBZGRlZCBh IDMyLWJpdCBhaXg1MStvcGVuc3NsIHRhcmdldC4gIEJ1aWxkcyBPSywgd29ya3MgZmluZSAodGVz dGVkIGFnYWluc3QKK291ciBTU0wgUE9QIHNlcnZlcikuICBUcmllZCBJIHRyaWVkIGFkZGluZyAt RF9MQVJHRV9GSUxFUy4gIEl0IHNlZW1zIHRvIHdvcmsKK2ZpbmUsIHNvIHdlJ2xsIGtlZXAgaXQu ICBDbGVhbmVkIHVwIHRoZSBvdGhlciBhaXg1YmxhaCBlbnRyaWVzIGEgYml0IGFsc28uCittYWtl ZmlsZSwgNiBNYXIgMjAwNi4KKworRml4ZXMgZnJvbSBKLiBTY290dCBLYXN0ZW4gdG8gdGhlIElS SVggNi40IGFuZCA2LjUgbWFrZWZpbGUgdGFyZ2V0cy4gIFRoZXkKK3dlcmUgYmFkbHkgd3Jvbmcu ICBtYWtlZmlsZSwgNiBNYXIgMjAwNi4KKworVGhlIHJlYXNvbiBLZXJtaXQgd2FzIGxvb3Bpbmcg b24gZGlyZWN0b3JpZXMgaW4gSVJJWCB3YXMgYSBjbGFzc2ljCisiZG91YmxlLWVuZGVkIGJyZWFr Ii4gIFRoZSBtYWtlZmlsZSB0YXJnZXRzIGZhaWxlZCB0byBkZWZpbmUgRElSRU5UIHNvCitLZXJt aXQgd2FzIG9wZW4vcmVhZCBvbiBkaXJlY3RvcmllcyByYXRoZXIgdGhhbiBvcGVuZGlyKCkvcmVh ZGRpcigpLiAgQnV0Cit0aGVuIGl0IHdhcyBhbHNvIGZhaWxpbmcgdG8gYWNjb3VudCBmb3IgdGhl IGZhY3QgdGhhdCByZWFkKCkgd291bGQgcmV0dXJuIC0xCitvbiBlcnJvci4gIFRoZSBtYWtlZmls ZSBmaXggYWRkcyAtRERJUkVOVCwgYW5kIHRoZSByZWFkKCkgY2FzZSBpbiB0cmF2ZXJzZSgpCitu b3cgcHJvcGVybHkgdGVybWluYXRlcyBpdHMgbG9vcCBvbiBlcnJvci4gIGNrdWZpby5jLCA2IE1h ciAyMDA2LgorCistLS0gRGV2LjE0IC0tLQorCitJbiByZXNwb25zZSB0byBhIGNvbXBsYWludCB0 aGF0IEMtS2VybWl0IHdvdWxkIG5vdCBidWlsZCBvbiBIUC1VWCAxMSB3aXRoCitPcGVuU1NMLCBJ IHRyaWVkIGl0IG15c2VsZiBvbiBib3RoIDExLjExL1BBLVJJU0MgYW5kIDExaSB2Mi9JdGFuaXVt LiAgSXQgYnVpbHQKK09LIG9uIGJvdGggYnV0IEkgaGFkIHRvIGFkZCBhIG5ldyB0YXJnZXQgKGhw dXgxMDAwbytvcGVuc3NsLW5vemxpYikgZm9yIG5vCitabGliIHNpbmNlIHRoZXNlIGJveGVzIGRp ZCBub3QgaGF2ZSBpdCBpbnN0YWxsZWQuICBtYWtlZmlsZSwgOSBNYXIgMjAwNi4KKworQWRkZWQg T3BlblNTTCB2ZXJzaW9uIG51bWJlciBkaXNwbGF5IHRvIFNIT1cgRkVBVFVSRVMuICBja3V1czUu YywgOSBNYXIgMjAwNi4KKworR2F2aW4gR3JhaGFtIG5vdGljZWQgdGhhdCBGVFAgW01dR0VUIC9E RUxFVEUgL01PVkUtVE86IHdhcyByZWplY3RlZCB3aXRoCisiP1NvcnJ5LCAvREVMRVRFIGNvbmZs aWN0cyB3aXRoIC9NT1ZFIG9yIC9SRU5BTUUiLiAgVGhpcyBjaGVjayBiZWxvbmdzIGluIHRoZQor UFVUIGNvZGUgYnV0IG5vdCBpbiB0aGUgR0VUIGNvZGUuICBDb21tZW50ZWQgaXQgb3V0IGFuZCB0 ZXN0ZWQgdGhlIHJlc3VsdC4KK1RoZSBjb21iaW5hdGlvbiBpcyBub3cgYWNjZXB0ZWQgYnV0IHRo ZW4gS2VybWl0IHJlZnVzZXMgdGhlIGluY29taW5nIGZpbGUgYXMKK2lmIGl0IGhhZCBiZWVuIGdp dmVuIGEgL1NNQUxMRVItVEhBTjogb3IgL0xBUkdFUi1USEFOOiBzd2l0Y2gsIHdoaWNoIGl0IGRp ZG4ndAoraGFwcGVuLiAgVHVybnMgb3V0IHRoZXJlIHdhcyBvbmUgbW9yZSBwbGFjZSB3aGVyZSBJ IHdhc24ndCBpbml0aWFsaXppbmcgdGhlCituZXcgIndpZGUgaW50IiBtZW1iZXIgb2YgdGhlIHN3 aXRjaC1wYXJzaW5nIHB2W10gc3RydWN0LiAgT25jZSB0aGlzIHdhcyBmaXhlZCwKK3RoZSAvTU9W RS1UTyBwYXJ0IHN0aWxsIGRpZG4ndCB3b3JrLiAgVHVybmVkIG91dCB0aGUgL0RFTEVURSBjYXNl IHdhcyBwYXJ0IG9mCithIGxvbmcgaWYtZWxzZS1pZi1lbHNlLSBjaGFpbiwgd2hpY2ggZWZmZWN0 aXZlbHkgbWFkZSAvREVMRVRFIGFuZCAvTU9WRS1UTzogb3IKKy9SRU5BTUUtVE86IG11dHVhbGx5 IGV4Y2x1c2l2ZS4gIEZpeGVkIHRoaXMsIG5vdyBpdCB3b3JrcyBmaW5lLiAgY2tjZnRwLmMsCisx MyBNYXIgMjAwNi4KKworR290IGFjY2VzcyB0byBBSVggNS4zLCBidWlsdCB0aGVyZSwgYWxsIE9L LCBpbmNsdWRpbmcgbGFyZ2UgZmlsZXMuIDEzIE1hciAyMDA2LgorCistLS0gRGV2LjE2IC0tLQor CitQYXRjaGVzIGZyb20gTWFyayBTYXBpcm8gdG8gc3VwcHJlc3MgZ2V0c29ja29wdCgpIGFuZCBn ZXRzb2NrbmFtZSgpIHdhcm5pbmdzCitpbiBNYWMgT1MgWC4gIGNrY25ldC5bY2hdLCAxOCBNYXIg MjAwNi4KKworSW4gcmVzcG9uc2UgdG8gYSBjb21wbGFpbnQgZnJvbSBDbGFyZW5jZSBEb2xkLCB0 cmllZCAibWFrZSByZWRoYXQ5IiAod2hpY2gKK2lzIHRoZSByYXRoZXIgZGF0ZWQgdGFyZ2V0IHRo YXQgdHJpZWQgdG8gaW5jbHVkZSBhbGwgZm9ybXMgb2Ygc2VjdXJpdHkpIG9uCitSSCBMaW51eCBB UzQuMywgaXQgZmFpbGVkIG1pc2VyYWJseS4gIEkgbWFkZSBhIG5ldyBtYWtlZmlsZSB0YXJnZXQs IHJlbW92aW5nCitLZXJiZXJvcyBJViBhbmQgZ290IGEgbG90IGZhcnRoZXIuICBCdXQgdGhlbiBp biBja2NmdHAuYywgdGhlIGZvbGxvd2luZworc3RydWN0IGRlZmluaXRpb246CisKKyAgc3RydWN0 IHsKKyAgICAgIENPTlNUIGdzc19PSURfZGVzYyAqIENPTlNUICogbWVjaF90eXBlOworICAgICAg Y2hhciAqc2VydmljZV9uYW1lOworICB9IGdzc190cmlhbHNbXSA9IHsKKyAgICAgIHsgJmNrX2dz c19tZWNoX2tyYjUsICJmdHAiIH0sCisgICAgICB7ICZja19nc3NfbWVjaF9rcmI1LCAiaG9zdCIg fSwKKyAgfTsKKworcmVmZXJzIHRvIGEgdmFyaWFibGUsIGNrX2dzc19tZWNoX2tyYjUsIHRoYXQg aXMgbm90IGRlZmluZWQgYW55d2hlcmUuICBVcAorYWJvdmUsIGhvd2V2ZXIsIGlzIGEgc3RhdGlj IGRlZmluaXRpb24gZm9yIGdzc19tZWNoX2tyYjUsIHNvIEkgY2hhbmdlZCB0aGUKK3N0cnVjdCBk ZWZpbml0aW9uIHRvIG1hdGNoLiAgTmV4dCwgaW4gY2t1YXRoLmMsIHRoZSBjb21waWxlciBjb3Vs ZCBub3QgZmluZAordGhlIGNvbV9lcnIuaCBmaWxlLiAgVHVybnMgb3V0IGluIExpbnV4IHRoaXMg aXMgaW4gYSBzdWJkaXJlY3RvcnksIGV0LCBzbyB3ZQoraGF2ZSB0byBhZGQgYSAtSSBjbGF1c2Ug dG8gdGhlIG1ha2VmaWxlIHRhcmdldCBmb3IgdGhpcy4gIE1hZGUgYSB0YXJnZXQgZm9yCitMaW51 eCtTU0wgb25seS4gIE1hZGUgYSB0YXJnZXQgZm9yIExpbnV4K0tyYjUgb25seTsgdGhpcyByZXF1 aXJlZCBtb3ZpbmcgYW4KKyNpZmRlZiBpbiBja3V1czcuYyB0byBwcmV2ZW50IGFuIHVuZ3VhcmRl ZCByZWZlcmVuY2UgdG8gU1NMRUFZX1ZFUlNJT04uCitOZXcgdGFyZ2V0czogbGludXgra3JiNStz c2wsIGxpbnV4K2tyYjUsIGxpbnV4K2tyYjUuICBja2NmdHAuYywgY2t1dXM3LmMsCittYWtlZmls ZSwgMjcgTWFyIDIwMDYuICAKKworTmV3IHRhcmdldHMgb2YgSFAtVVggMTAvMTEgd2l0aCBPcGVu U1NMIGZyb20gUGV0ZXJFLiAgbWFrZWZpbGUsIDI3IE1hciAyMDA2LgorCitBZGRlZCBsYXJnZSBm aWxlL2ludGVnZXIgc3VwcG9ydCB0byBTSE9XIEZFQVRVUkVTLiAgY2t1dXM1LmMsIDI3IE1hciAy MDA2LgorCitCdWlsdCBPSyBvbiBTb2xhcmlzIDkgYW5kIDEwIHdpdGggZ2NjIChzb21lb25lIHdh cyBjb21wbGFpbmluZyB0aGF0IHRoaXMKK2RpZG4ndCB3b3JrLCBidXQgdGhhdCB3YXMgOC4wLjIx MSkuCisKK1N0YXJ0ZWQgYnVpbGQgb24gYSBTdW4gMy84MCBtYzY4MDMwIHdpdGggTmV0QlNEIDIu MCBhbmQgZ2NjIDMuMy4zLiAgQnV0IGl0CitkaWVkIHdpdGggYW4gYXNzZW1ibGVyIGVycm9yIGlu IGNrY2ZuMi5jIChjb21waWxlciBidWcpLiAgMjcgTWFyIDIwMDYuCisKKy0tLSBEZXYuMTcgLS0t CisKK05lYkJTRCAyLjAgYnVpbGQgY29tcGxldGVkIGJ5IHR1cm5pbmcgb2ZmIG9wdGltaXphdGlv biBvbiBja2NmbjIuYworKCJLRkxBR1M9LU8wIikuICBSZXN1bHQgc3VwcG9ydHMgNjQtYml0IGlu dHMgYW5kLCBwcmVzdW1hYmx5LCBsYXJnZSBmaWxlcy4KK3VuYW1lIC1wID0gIm02OGsiLCAtbSA9 ICJzdW4zIi4gMjkgTWFyIDIwMDYuCisKK0NvcnJlY3RlZCBhbiBvbWlzc2lvbiBpbiBhcHBseWlu ZyBQZXRlckUncyB1cGRhdGVzIHRvIHRoZSBIUC1VWCB0YXJnZXRzLgorbWFrZWZpbGUsIDI4IE1h ciAyMDA2LgorCitzb2xhcmlzMnhnK2tyYjUra3JiNCtvcGVuc3NsK3NoYWRvdzoKKworVHJpZWQg cmVzdXJyZWN0aW5nIHRoZSBzb2xhcmlzMnhnK2tyYjUra3JiNCtvcGVuc3NsK3NoYWRvdyB0YXJn ZXQuICBJdCBhc2tzCit0byBsaW5rIHdpdGggbGliZGVzIGJ1dCB0aGVyZSBpcyBubyBsaWJkZXMu ICBSZW1vdmVkIC1sZGVzIGZyb20gdGhlIHRhcmdldCwKK25vdyBhdCBsZWFzdCBpdCBidWlsZHMg YW5kIHJ1bnMgd2FydC4gIFRoZSBjb21waWxhdGlvbiBibG93cyB1cCBpbiBja2NmdHAuYworZm9y IG1pc3NpbmcgaGVhZGVyIGZpbGVzOgorCisgIGNrY2Z0cC5jOjQ2Mjoga2VyYmVyb3NJVi9rcmIu aDogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQorICBja2NmdHAuYzo1MDA6IGdzc2FwaS9nc3Nh cGlfZ2VuZXJpYy5oOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CisgIGNrY2Z0cC5jOjUwMTog Z3NzYXBpL2dzc2FwaV9rcmI1Lmg6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKKworR290IGEg Yml0IGZhcnRoZXIgYnkgYWRkaW5nIGFwcHJvcHJpYXRlIC1JJ3MgYW5kIC1MJ3MgdG8gS0ZMQUdT IGJ1dCBpdCBzdGlsbAorZGllcyBjb21waWxpbmcgKG9yIGxpbmtpbmc/KSBja2NmdHAuYywgYnV0 IGl0IGRvZXNuJ3Qgc2F5IGV4YWN0bHkgd2h5LiAgT0ssCitkZWZlcnJlZC4KKworQWRkZWQgU0VU IFNFWFBSRVNTSU9OIFRSVU5DQVRFLUFMTC1SRVNVTFRTIHsgT04sIE9GRiB9LiAgVGhpcyBjYW4g YmUgdXNlZAorZm9yIGZvcmNlIGludGVnZXIgYXJpdGhtZXRpYyBpbiBhbnkga2luZCBvZiBjYWxj dWxhdGlvbiB0aGF0IHJlcXVpcmVzIGl0LAorc3VjaCBhcyBkYXRlIGNhbGN1bGF0aW9ucy4gIFRo aXMgaXMgYSBnbG9iYWwgc2V0dGluZywgbm90IG9uIGFueSBraW5kIG9mCitzdGFjay4gIEFsc28s IHVwZGF0ZWQgU0hPVyBTRVhQIGFuZCBhZGRlZCBIRUxQIFNFVCBTRVhQIHdoaWNoIHdhc24ndCB0 aGVyZQorYmVmb3JlLiAgY2t1dXNbMjNdLmMsIDMwIE1hciAyMDA2LgorCitUbyBtYWtlIHRoZSBS RU5BTUUgY29tbWFuZCBhIGJpdCBtb3JlIHVzZWZ1bCwgbmVlZCB0byBhZGQgc29tZSBzd2l0Y2hl cy4KK0J1dCBpdCBzaGFyZXMgYSBzd2l0Y2ggdGFibGUsIHF2c3d0YWJbXSwgd2l0aCBzb21lIG90 aGVyIGNvbW1hbmRzLiAgQnJva2UKK3RoaXMgb2ZmIGludG8gaXRzIG93biBzd2l0Y2ggdGFibGUu ICBja3V1czYuYywgMTcgQXByIDIwMDYuCisKK0FkZGVkIFJFTkFNRSBzd2l0Y2ggdmFsdWVzIHRo YXQgY2FuIGJlIHVzZWQgaW4gdGhlIHNhbWUgdGFibGUgd2l0aCB0aGUgREVMRVRFCitzd2l0Y2gg dmFsdWVzLCB3aGljaCBhcmUgc2hhcmVkIGJ5IG1hbnkgY29tbWFuZHMuICBja3V1c3IuaCwgMTcg QXByIDIwMDYuCisKK0Rpc2NvdmVyZWQgdGhhdCB0aGUgUkVOQU1FIGNvbW1hbmQgY291bGQgYmUg ZW50ZXJlZCB3aXRob3V0IGFueSBhcmd1bWVudHMKK2FuZCBpdCB3b3VsZCBzdGlsbCBzdWNjZWVk LiAgRml4ZWQgaW4gZG9yZW5hbSgpOiBja3V1czYuYywgMTcgQXByIDIwMDYuCisKK0FkZGVkIHBh cnNpbmcgZm9yIFJFTkFNRSAvVVBQRVI6b3B0aW9uICh0byB1cHBlcmNhc2UgdGhlIGZpbGUgbmFt ZShzKSksCisvTE9XRVI6b3B0aW9uICh0byBsb3dlcmNhc2UpLCBhbmQgL1JFUExBQ0U6e3tzMX17 czJ9fSAodG8gZG8gc3RyaW5nCityZXBsYWNlbWVudCBvbiB0aGUgZmlsZW5hbWUocykpLCBidXQg bm90IHRoZSBzZW1hbnRpY3MuICBXaGVuIGFueSBvZiB0aGVzZQorc3dpdGNoZXMgaXMgZ2l2ZW4s IHRoZSB0YXJnZXQgKCJ0byIpIG5hbWUgaXMgbm90IHBhcnNlZDsgdGhleSBhY3Qgb24gdGhlCitz b3VyY2UgbmFtZS4gIFRoZSAvTE9XRVI6IHN3aXRjaCB0YWtlcyBrZXl3b3JkIGFyZ3MgdG8gc3Bl Y2lmeSB3aGV0aGVyIGl0CitzaG91bGQgYWN0IG9ubHkgb25seSBmaWxlcyB0aGF0IGhhdmUgYWxs IFVQUEVSIGNhc2UgbGF0dGVycywgb3Igb24gQUxMIGZpbGVzCisoaS5lLiwgaW5jbHVkaW5nIGZp bGVzIHdpdGggbWl4ZWQtY2FzZSBuYW1lcyk7IHNpbWlsYXJseSBmb3IgdGhlIC9VUFBFUjoKK3N3 aXRjaC4gIFRoZXJlIGlzIHNvbWUgY3JlYXRpdmUgcGFyc2luZyBhbGxvd2luZyB0aGVzZSB0byBi ZSBnaXZlbiB3aXRoIG9yCit3aXRob3V0IGEgY29sb24gYW5kIGtleXdvcmQgYXJndW1lbnQsIHdo aWNoIHdvcmtzIGZpbmUgZXhjZXB0IGlmIHlvdSBpbmNsdWRlCit0aGUgY29sb24gYnV0IG5vIGFy Z3VtZW50LCBleGVjdXRlIHRoZSBjb21tYW5kICh3aGljaCB3b3JrcyBmaW5lKSwgYW5kIHRoZW4K K3JlY2FsbCB0aGUgY29tbWFuZC4gIEkgaGF2ZW4ndCB5ZXQgZGVjaWRlZCBhYm91dCB0aGUgaW50 ZXJhY3Rpb24gYW1vbmcgdGhlc2UKK3N3aXRjaGVzLiAgQ2xlYXJseSBpZiAvVVBQRVIgaXMgZ2l2 ZW4gYWZ0ZXIgL0xPV0VSLCBpdCBvdmVycmlkZXMuICBCdXQgaWYKKy9VUFBFUiAob3IgL0xPV0VS KSBpcyBnaXZlbiB3aXRoIC9SRVBMQUNFLCB3aGF0IHNob3VsZCBoYXBwZW4/ICBja3V1czYuYywK KzE3IEFwciAyMDA2LgorCitGaWxsZWQgaW4gYWN0aW9ucyBmb3IgUkVOQU1FIC9VUFBFUjogYW5k IC9MT1dFUjogZm9yIHRoZSBzaW5nbGUgZmlsZSBjYXNlLAorYW5kIHRlc3RlZCBhbGwgY29tYmlu YXRpb25zIG9mIHN3aXRjaCB2YWx1ZXMgYW5kIGZpbGVuYW1lIGNvbmZpZ3VyYXRpb25zLgorT25j ZSB0aGF0IHdhcyBPSywgbW92ZWQgdGhlIGNvZGUgb3V0IGludG8gYSBzZXBhcmF0ZSByb3V0aW5l LCByZW5hbWVvbmUoKSwKK2FuZCB0aGVuIGNhbGxlZCBpdCBmcm9tIGJvdGggdGhlIHNpbmdsZS1m aWxlIGNhc2UgYW5kIHRoZSBtdWx0aWZpbGUgY2FzZS4KK2NrdXVzNi5jLCAxOSBBcHIgMjAwNi4K KworQWRkZWQgUkVOQU1FIC9TSU1VTEFURS4gIEZpbGxlZCBpbiB0aGUgY29kZSBmb3Igc3RyaW5n IHJlcGxhY2VtZW50LCBuZWVkcwordGVzdGluZy4gIGNrdXVzNi5jLCAyMCBBcHIgMjAwNi4KKwor Q2hhbmdlZCAvUkVQTEFDRSBvcHRpb25zIHRvIGFsbG93IGEgbmVnYXRpdmUgbnVtYmVyIHRvIHNw ZWNpZnkgYW4gb2NjdXJyZW5jZQorZnJvbSB0aGUgcmlnaHQsIHNvIC0xIG1lYW5zIHRoZSBsYXN0 IG9jY3VycmVuY2UsIC0yIG1lYW5zIHRoZSBuZXh0LXRvLWxhc3QsCitldGMuICBja3V1czYuYywg MjQgQXByIDIwMDYuCisKK0FkZGVkIFJFTkFNRSAvQ09MTElTSU9OOntPVkVSV1JJVEUsUFJPQ0VF RCxGQUlMfS4gIFRoaXMgaXMgaW1wbGVtZW50ZWQgYnV0Citub3QgdGVzdGVkLiAgY2t1dXM2LmMs IDI0IEFwciAyMDA2LgorCitXb3JrZWQgb24gUkVOQU1FIC9DT0xMSVNJT046RkFJTC4gIEkgZGVj aWRlZCBpdCB3YXMgbGVzcyB0aGFuIHVzZWZ1bCB0byAuLi4KKworQWRkZWQgU0VUIFJFTkFNRSB7 IENPTExJU0lPTiwgTElTVCB9IHRvIGxldCB1c2VyIGNoYW5nZSBkZWZhdWx0IGNvbGxpc2lvbgor YW5kIGxpc3RpbmcgYWN0aW9ucy4gIGNrdXVzci5bY2hdLCBja3V1c1szNl0uYywgMjUgQXByIDIw MDYuCisKK0V4cGVyaW1lbnRlZCB3aXRoIHBhcnNpbmcgZm9yIC9DT05WRVJUOmNzZXQxOmNzZXQy LiAgVGhlIHByb2JsZW0gaGVyZSBpcwordGhhdCB0aGVyZSBpcyBubyBzdHJhaWdodGZvcndhcmQg d2F5IGZvciBhIHN3aXRjaCB0byBoYXZlIG11bHRpcGxlCithcmd1bWVudHMuICBPciBpcyB0aGVy ZS4uLj8gIElmIEkgcGFyc2UgY3NldDEgd2l0aCBjbXN3aSgpIHJhdGhlciB0aGFuCitjbWtleSgp LCBpdCBhbG1vc3Qgd29ya3M7IHRoZSBvbmx5IHByb2JsZW0gaXMgdGhhdCB0aGUgY2hhcmFjdGVy LXNldAora2V5d29yZHMgZG9uJ3QgaGF2ZSBDTV9BUkcgc2V0LCBzbyB0aGV5IGRvbid0IGtub3cg dG8gc3RvcCBvbiwgYW5kIGlnbm9yZSwgYQorY29sb24uICBJZiBJIG1ha2UgYSBjb3B5IG9mIHRo ZSB0YWJsZSBhbmQgc2V0IENNX0FSRyBpbiB0aGUgZmxhZ3MgZmllbGQgZm9yCitlYWNoIGtleXdv cmQsIGl0IHdvcmtzIGZpbmU6IGlmIEkgVGFiIGluIHRoZSBmaXJzdCBuYW1lLCBpdCBmaWxscyBp dHNlbGYKK291dCwgc3VwcGxpZXMgYSBjb2xvbiwgYW5kIHdhaXRzIGZvciB0aGUgc2Vjb25kIG5h bWUuICBTbyBpbiB0aGUgY29kZSwgdGhlCitmaXJzdCB0aW1lIHRoYXQgUkVOQU1FIC9DT05WRVJU IGlzIGludm9rZWQsIEkgcHV0IGNvZGUgdG8gY29weSBmY3N0YWJbXSBhbmQKK3NldCBDTV9BUkcg aW4gZWFjaCBmbGFncyBmaWVsZC4gIFdvcmtzIGZpbmUsIGFuZCBub3cgd2Uga25vdyBob3cgdG8g bWFrZSBhCitzd2l0Y2ggdGhhdCB0YWtlcyBtdWx0aXBsZSBhcmd1bWVudHMuICBja3V1czYuYywg MjQgQXByIDIwMDYuCisKK0kgdGhvdWdodCBJIGhhZCBhIGZ1bmN0aW9uIHRvIGNvbnZlcnQgdGhl IGNoYXJhY3RlciBzZXQgb2YgYSBzdHJpbmcgYnV0IEkKK2Rvbid0LCBzbyBhY3R1YWxseSBpbXBs ZW1lbnRpbmcgL0NPTlZFUlQ6IHdpbGwgYmUgZGlmZmljdWx0LgorCitBY3R1YWxseSB0aGUgcGFy c2luZyB3YXNuJ3QgdGhhdCBlYXN5IGVpdGhlci4gIEl0IHdvcmtzIE9LIGludGVyYWN0aXZlbHks CitidXQgbm90IGluIGEgVEFLRSBmaWxlLiAgVG8gbWFrZSBhIGxvbmcgc3Rvcnkgc2hvcnQsIEkg aGFkIHRvIGNoYW5nZQorZ3R3b3JkKCkgYW5kIGNta2V5MigpIHRvIG5vdCByZXF1aXJlICIvIiBh dCB0aGUgYmVnaW5uaW5nIG9mIGEgc3dpdGNoLCBhbmQKK3RoZW4gdG8gcGFyc2UgYXJndW1lbnRz LXRoYXQtYXJlLWZvbGxvd2VkLWJ5LW90aGVyLWFyZ3VtZW50cyBhcyBpZiB0aGV5IHdlcmUKK3N3 aXRjaGVzLCBzbyB0aGF0IHRoZXkgY2FuIGVuZCB3aXRoIGNvbG9uIHJhdGhlciB0aGFuIHNwYWNl LiAgVGhpcyBtaWdodAorc2VlbSBkYW5nZXJvdXMsIGJ1dCBzd2l0Y2hlcyBhbHdheXMgaGF2ZSAi LyIgYXQgdGhlIGJlZ2lubmluZywgc28gdGhlIGNoZWNrCitpcyBzdXBlcmZsdW91cy4gIGNrdWNt ZC5jLCAyNiBBcHIgMjAwNi4KKworQmFjayB0byAvQ09OVkVSVC4uLiAgT25jZSBJIHdhcyBhYmxl IHRvIGdldCB0aGUgY29kZSB0byBjYWxsIGN2dHN0cmluZygpIEkKK3dhcyBhYmxlIHRvIGRlYnVn IGl0IChhdCBmaXJzdCBpdCB3YXMgc2tpcHBpbmcgZXZlcnkgc2Vjb25kIGNoYXJhY3RlcikuICBB bmQKK25vdyB3ZSBoYXZlIGEgZ2VuZXJhbC1wdXJwb3NlIHN0cmluZy10cmFuc2xhdGluZyBmdW5j dGlvbiB3ZSBjYW4gY2FsbCBmcm9tCithbnl3aGVyZS4gIFJlcXVpcmVzIHRoYXQgQy1LZXJtaXQg YmUgYnVpbHQgd2l0aCBVbmljb2RlIHN1cHBvcnQuCitja3V1czYuYywgMjYgQXByIDIwMDYuCisK K0FkZGVkIFNIT1cgUkVOQU1FLiAgY2t1dXNyLmgsIGNrdXVzW3I1XS5jLCAyNiBBcHIgMjAwNi4K KworQ29uZGl0aW9uYWxpemVkIHNvbWUgVW5peC9XaW5kb3dzIGFzc3VtcHRpb25zIGluIHJlbmFt ZW9uZSgpIHNvIHRoZSBjb2RlCitjb3VsZCB3b3JrIGluIFZNUy4gIGNrdXVzNi5jLCAyIE1heSAy MDA2LgorCitBZGRlZCBSRU5BTUUgL0ZJWFNQQUNFUyB0byBjaGFuZ2UgYWxsIHNwYWNlcyBpbiB0 aGUgZmlsZW5hbWUocykgdG8KK3VuZGVyc2NvcmUgb3IgYW55IG90aGVyIGNoYXJhY3RlciBvciBz dHJpbmcgdGhhdCBpcyBnaXZlbi4gIFRoaXMgaXMganVzdCBhCitzcGVjaWFsIGNhc2Ugb2YgUkVO QU1FIC9SRVBMQUNFOnt7IH17eH19IHdpdGggZWFzaWVyIHN5bnRheC4KK2NrdXVzci5oLCBja3V1 czYuYywgMiBNYXkgMjAwNi4KKworQWRkZWQgYW4gImFsbC1idXQiIGNvbnRyb2wgdG8gdGhlIC9S RVBMQUNFIG9wdGlvbnM6CisvUkVQTEFDRTp7ey59e199e34xfX0gbWVhbnMgcmVwbGFjZSBhbGwg YnV0IHRoZSBmaXJzdCAodGhpcyBvbmUgd29ya3MpOworL1JFUExBQ0U6e3sufXtffXt+LTF9fSBt ZWFucyByZXBsYWNlIGFsbCBidXQgdGhlIGxhc3QgKHRoaXMgb25lIG5vdCB5ZXQpLgorY2t1dXM2 LmMsIDIgTWF5IDIwMDYuCisKK0ZpbGxlZCBpbiB0aGUgc2Vjb25kIG9uZSAoImFsbCBidXQiIHRo ZSBnaXZlbiBvY2N1cnJlbmNlKS4gIFRoZSBhbGdvcml0aG0gaXMKK3NpbXBseSB0byByZXZlcnNl IHRoZSB0aHJlZSBzdHJpbmdzIGFuZCB0aGVuIHVzZSB0aGUgc2FtZSBjb2RlIGFzIHdlIHVzZSBp bgordGhlIGxlZnQtcmlnaHQtY2FzZSwgYW5kIHRoZW4gdW5yZXZlcnNlIHRoZSByZXN1bHQuICBB dCBmaXJzdCBJIHVzZWQKK3l5c3RyaW5nKCkgZm9yIHRoaXMgYnV0IHlpa2VzLCB3aGF0IGEgYmFk IGRlc2lnbiEgIFNvIEkgbWFkZSBhIGJldHRlcgorc3RyaW5nLXJldmVyc2FsIHJvdXRpbmUsIGdu aXJ0cygpLCBmb3IgdGhpcyAobHVja2lseSB5eXN0cmluZygpIGlzIG9ubHkgdXNlZAoraW4gb25l IHBsYWNlLCBmb3Igd2hpY2ggaXRzIGRlc2lnbiBpcyBhcHByb3ByaWF0ZSkuIGNrdXVzNi5jLCAz LTQgTWF5IDIwMDYuCisKK0FkZGVkIGNvZGUgdG8gaGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRoZSBm aWxlIGJlaW5nIHJlbmFtZWQgaW5jbHVkZXMgYSBwYXRoCitzcGVjaWZpY2F0aW9uLiAgSW4gdGhp cyBjYXNlIHdlIHNlcGFyYXRlIHRoZSBwYXRoLCBhcHBseSB0aGUgcmVuYW1pbmcKK2Z1bmN0aW9u cyB0byB0aGUgZmlsZW5hbWUgb25seSwgYW5kIHRoZW4gYXQgdGhlIGVuZCByZWpvaW4gdGhlIG9y aWdpbmFsCitmaWxlbmFtZSB3aXRoIHRoZSBwYXRoLCBhbmQgam9pbiB0aGUgbmV3IG5hbWUgd2l0 aCBzYW1lIHBhdGggb3IsIGlmIGEKK2Rlc3RpbmF0aW9uIGRpcmVjdG9yeSB3YXMgZ2l2ZW4sIHdp dGggdGhhdC4gIGNrdXVzNi5jLCA0IE1heSAyMDA2LgorCitBZGRlZCBIRUxQIFNFVCBSRU5BTUUg YW5kIHVwZGF0ZWQgSEVMUCBSRU5BTUUuICBja3V1czIuYywgNCBNYXkgMjAwNi4KKworIlRvbSBW aW9saW4iIChUb20gSGFuc2VuKSBub3RpY2VkIHRoYXQgdGhlIGZpcnN0IHRpbWUgeW91IEZPUEVO IGEgZmlsZSwKK0tlcm1pdCdzIG1lbW9yeSBjb25zdW1wdGlvbiBnb2VzIHdheSB1cC4gIEluIGZh Y3QgdGhlcmUncyBhIHdhcm5pbmcgdG8gdGhhdAorZWZmZWN0IGluIHRoZSBjb2RlLCB3aGVyZSwg dXBvbiBmaXJzdCBvcGVuLCBhIHBvdGVudGlhbGx5IGJpZyBhcnJheSBvZgorcG90ZW50aWFsbHkg YmlnIHN0cnVjdHMgaXMgYWxsb2NhdGVkLiAgSSByZXdyb3RlIHRoZSBjb2RlIHRvIGFsbG9jYXRl IGVhY2gKK2FycmF5IG1lbWJlciAoc3RydWN0IGNrel9maWxlKSBhcyBuZWVkZWQsIGkuZS4gd2hl biBhIGZpbGUgaXMgb3BlbmVkLCBhbmQgdG8KK2ZyZWUgaXQgd2hlbiB0aGUgZmlsZSBpcyBjbG9z ZWQgKG9yIHRoZSBvcGVuIGZhaWxzKS4gIFRoaXMgd2FzIGFjdHVhbGx5CitxdWl0ZSBhIGxvdCBv ZiB3b3JrLCB3aGljaCBpcyB3aHkgSSBkaWRuJ3QgZG8gaXQgdGhlIGZpcnN0IHRpbWUgYXJvdW5k OgorZXZlcnkgc2luZ2xlICIuIiAgaGFkIHRvIGJlIGNoYW5nZWQgdG8gIi0+Ii4gIEV2ZXJ5IGNo ZWNrIGZvciBhIHZhbGlkCitjaGFubmVsIGZpcnN0IGhhZCB0byBjaGVjayBpZiB0aGUgY2hhbm5l bCdzIHN0cnVjdCB3YXMgYWxsb2NhdGVkIGFuZCBldmVyeQorb3RoZXIgcmVmZXJlbmNlIHRvIHpf ZmlsZVtpXS0+YW55dGhpbmcgaGFkIHRvIGJlIHByZWNoZWNrZWQgdGhhdCB6X2ZpbGVbaV0KK3dh cyBub3QgYSBOVUxMIHBvaW50ZXIuICBBbHNvIEkgbWFkZSBzb21lIGltcHJvdmVtZW50cyB0byBG SUxFIFNUQVRVUywgYW5kIEkKK2ZpeGVkIEZJTEUgQ0xPU0UgdG8gZGVmYXVsdCB0aGUgY2hhbm5l bCBudW1iZXIgaWYgb25seSBvbmUgY2hhbm5lbCB3YXMgb3BlbiwKK2FzIEkgZGlkIGZvciBGSUxF IFNUQVRVUyBhIHdoaWxlIGJhY2suICBja3V1czcuYywgQ2luY28gZGUgbWF5byAyMDA2LgorCitS YW4gbXkgb2xkIEJVSUxEUyBzY3JpcHQgdGhhdCBidWlsZHMgQy1LZXJtaXQgd2l0aCBhYm91dCAx MDAgZGlmZmVyZW50Citjb21iaW5hdGlvbnMgb2YgZmVhdHVyZS1zZWxlY3Rpb24gc3dpdGNoZXMu ICBGaXhlZCBhIGZldyBzbWFsbCBnbGl0Y2hlcyBzbworbm93IHRoZXkgYWxsIGJ1aWxkIE9LIChl eGNlcHQgY2FuJ3QgZG8gTk9BTlNJIGJ1aWxkcyBhbnkgbW9yZSBvbiByZWNlbnQKK0xpbnV4ZXMg YmVjYXVzZSBvZiB2YXJhcmdzKCkpLiAgY2t1dXMzLmMsIGNrdXVzNS5jLCBja3V1czYuYywgY2t1 dXM3LmMsCitja3VjbWQuYywgY2tjZm5zLmMsIDYgTWF5IDIwMDYuCisKK0ZpeGVkIFJFTkFNRSAv TE9XRVIgYW5kIC9VUFBFUiwgd2hlbiBnaXZlbiB3aXRoIG5vIGNvbG9uIG9yIGFyZ3VtZW50LCB0 bworZGVmYXVsdCB0byBBTEwuICBja3V1czYuYywgMTMgTWF5IDIwMDYuCisKK0J1aWx0IG9uIFZN UyA3LjItMSwgdGVzdGVkIG5ldyBSRU5BTUUgY29tbWFuZCB0aGVyZTsgc2VlbXMgdG8gYmUgT0su CisxMyBNYXkgMjAwNi4KKworLS0tIERldi4xOCAtLS0KKworSSB3YW50ZWQgdG8gdGVzdCBsYXJn ZSBmaWxlcyBhZ2FpbnN0IFJFU0VORCBidXQgSSBkb24ndCBoYXZlIGFjY2VzcyB0byBhbnkKK3N5 c3RlbSB0aGF0IGNhbiBydW4gQy1LZXJtaXQgYW5kIHRoYXQgYWxzbyBoYXMgZW5vdWdoIHNwYWNl IGZvciBhIGxhcmdlCitmaWxlLiAgSSBjcmVhdGVkIGEgImZha2UiIGxhcmdlIGZpbGUgb24gTGlu dXggKDNHIGhvbGUgcGx1cyAxIGJ5dGUpLCBhbmQKK3NlbnQgaXQgb3ZlciBhIGxvY2FsaG9zdCBj b25uZWN0aW9uLCBhbmQgaW50ZXJydXB0ZWQgaXQgcmVwZWF0ZWRseSBhbmQgdGhlbgoraW5pdGlh dGVkIGEgUkVTRU5EIGF0IHRoZSBzZW5kZXIuICBJbiBlYWNoIGNhc2UsIGl0IHBpY2tlZCB1cCB3 aGVyZSBpdCBsZWZ0CitvZmYuICBCdXQgYmVmb3JlIHRoZSAyRyBib3VuZGFyeSB3YXMgY3Jvc3Nl ZCB0aGUgZGlzayBmaWxsZWQgdXAuCitJbmNvbmNsdXNpdmUuICAxNCBNYXkgMjAwNi4KKworUGV0 ZXJFIGdvdCBhIHdhcm5pbmcgaW4gdGhlIG5ldyBGSUxFIE9QRU4gY29kZSB3aGVuIGJ1aWxkaW5n IGluIEhQLVVYIDkuCitJIGFkZGVkIGEgY2FzdCwgYnVpbHQgb24gSFAtVVggMTEsIG5vIG1vcmUg Y29tcGxhaW50LiAgSG93ZXZlciB0aGVyZQorYXJlIHdhcm5pbmdzIGFib3V0IGludGVybmFsIHZz IGV4dGVybmFsIGJpbmRpbmdzIG9mIHNlbmRwYXRoIGFuZCBzZW5kZmlsZQoraW4gZXZlcnkgbW9k dWxlLiAgVG9vIGJhZCwgdGhlc2UgYXJlIG5vdCBLZXJtaXQgdG9rZW5zLCBpdCdzIGEgY29uZmxp Y3QgaW4KK0hQJ3MgaGVhZGVyIGZpbGVzLiAgTWFyYyBTYXBpcm8gZG9lc24ndCBzZWUgdGhlbTsg cHJvYmFibHkgaXQncyBzb21ldGhpbmcKK29uIHRoZSBIUCB0ZXN0ZHJpdmUgc2l0ZS4gIGNrdXVz Ny5jLCAxNyBNYXkgMjAwNi4KKworRml4ZWQgdGhlIHRydTY0LTUxYitvcGVuc3NsIHRhcmdldCAt LSB0aGUgdGVybWluYXRpbmcgZG91YmxlcXVvdGUgb2YgS0ZMQUdTCit3YXMgbWlzc2luZyAtLSBh bmQgYWxzbyB0aGUgb3NmIHRhcmdldCwgd2hpY2ggZmFpbGVkIHRvIGltcG9ydCB0aGUgTElCUwor ZGVmaW5pdGlvbiBmcm9tIHdoYXRldmVyIG90aGVyIHRhcmdldCBpbnZva2VkIGl0LiAgTm93IHRo ZSBTU0wgYnVpbGQgZ29lcyBPSworb24gVHJ1NjQgNS4xQi4gIFJlcGxhY2VkIHgudGFyLnogaW4g dGhlIGRvd25sb2FkIGFyZWFzIHdpdGhvdXQgZGVjbGFyaW5nIGEKK25ldyBEZXYgbnVtYmVyLiAg VGhlIG5ldyBvbmUgaGFzIGEgbWFrZWZpbGUgd2l0aCB0b2RheSdzIGRhdGUuICBTb2Z0d2FyZQor ZW5naW5lZXJpbmcgYXQgaXRzIGJlc3QhICBtYWtlZmlsZSwgMTggTWF5IDIwMDYuCisKK1Njb3R0 IEthc3RlbiBub3RlZCB0aGF0IHRoZSBlc3RpbWF0ZWQtdGltZS1yZW1haW5pbmcgY2FsY3VsYXRp b24gd291bGQgZ28KK2JvbmtlcnMgb24gTEZTIHN5c3RlbXMgd2hlbiBSRVNFTkRpbmcgYSBsYXJn ZSBmaWxlLiAgSXQgbG9va3MgbGlrZSB0aGUKK3Nob2NwcygpIGFuZCBzaG9ldGwoKSBmdW5jdGlv bnMgZXNjYXBlZCB0aGUgQ0tfT0ZGX1QgY29udmVyc2lvbi4gIEkgbWFkZQord2hhdCBzZWVtZWQg dG8gYmUgdGhlIHJpZ2h0IGFkanVzdG1lbnRzLCBhbmQgdGhlbiB3YXMgbHVja3kgZW5vdWdoIHRv IGZpbmQgYQorY29tcHV0ZXIgdGhhdCBoYWQgZW5vdWdoIGZyZWUgZGlzayBzcGFjZSBmb3IgbWUg dG8gc2VuZCBhIGxhcmdlIGZpbGUsCitpbnRlcnJ1cHQgaXQgc2V2ZXJhbCB0aW1lcywgcmVzZW5k IGl0LCBhbGwgc2VlbXMgdG8gYmUgT0suICAyOCBNYXkgMjAwNi4KK0xhdGVyIFNjb3R0IHZlcmlm aWVkIHRoZXNlIGNoYW5nZXMgaW5kZXBlbmRlbnRseSBmb3IgTGludXgsIGJ1dCB0aGUgcHJvYmxl bXMKK2luIElSSVggcmVtYWluLgorCitQYXRjaGVzIGZyb20gU2NvdHQgS2FzdGVuIGZvciBsYXJn ZSBmaWxlcyBvbiBJUklYIDYuNTogY2tjZGViLmgsIG1ha2VmaWxlLAorMTIgSnVuIDIwMDYuCisK Ky0tLSBEZXYuMTkgLS0tCisKK0FkZGVkIGEgbmV3IGZ1bmN0aW9uIGZvciBkZWFsaW5nIHdpdGgg SlBHcyBhbmQgR0lGczoKKworXGZwaWN0dXJlKGZpbGVuYW1lLCZhKQorICByZXR1cm5zIDAgaWYg ZmlsZSBub3QgcmVjb2duaXplZCBvciBjYW4ndCBiZSBvcGVuZWQ7CisgIHJldHVybnMgMSBpZiBs YW5kc2NhcGUsIDIgaWYgcG9ydHJhaXQgb3Igc3F1YXJlLgorICBJZiBhcnJheSBnaXZlbiwgZWxl bWVudCAxIGlzIHdpZHRoLCBlbGVtZW50IDIgaXMgaGVpZ2h0LgorCitja3V1c3IuaCwgY2t1dXM0 LmMsIDE5IEp1biAyMDA2LgorCitTY290dCBLYXN0ZW4gcmVwb3J0cyB0aGF0IHRoZSBGVFAgY2xp ZW50IGNhbiB0cmFuc2ZlciBsYXJnZSBmaWxlcyBPSywgYXQKK2xlYXN0IGluIExpbnV4LCBidXQg aGFzIHRyb3VibGUgd2l0aCByZWNvdmVyeToKKworIC4gS2VybWl0IHRha2VzIGEgdmVyeSBsb25n IHRpbWUgdG8gc3RhcnQgdGhlIHRyYW5zZmVyLCBzb21ldGltZXMgb3ZlcgorICAgMzAgbWludXRl cy4gIFN1c3BlY3QgdGhlIGZ0cCBzZXJ2ZXIgaXMgY291bnRpbmcgdGhlIGJ5dGVzIGluIGEgbG9u ZyBmaWxlPworICAgT3IgbWF5YmUgaXQncyBhIHRleHQtbW9kZSB0cmFuc2ZlciBhbmQgaXQncyBj b3VudGluZyB0aGUgbGluZXM/ICBQcm9iYWJseQorICAgaW4gcmVzcG9uc2UgdG8gS2VybWl0J3Mg U0laRSBjb21tYW5kLgorCisgLiBUaGUgc2l6ZSBzaG93biBpbiB0aGUgRlQgZGlzcGxheSBpcyB3 cm9uZyBieSBhIHJhbmRvbSBhbW91bnQuICBBbmQgb2YKKyAgIGNvdXJzZSBzbyBhcmUgdGhlIHBy b2dyZXNzIGJhciwgcGVyY2VudCBkb25lLCBhbmQgdGltZSByZW1haW5pbmcuCisKKyAuIFRoZSBm aWxlLCBob3dldmVyLCBpcyB0cmFuc2ZlcnJlZCBjb3JyZWN0bHkuICBSRUdFVCB3b3JrcyBjb3Jy ZWN0bHkgdG9vLgorCitJIHRyaWVkIHNldHRpbmcgdXAgYSB0ZXN0IHNjZW5hcmlvIGxvY2FsbHkg YnV0IG91ciBTb2xhcmlzIEZUUCBzZXJ2ZXIgZG9lcworbm90IHN1cHBvcnQgbGFyZ2UgZmlsZXM6 CisKKyAgRlRQIFNFTlQgW1NJWkUgQklHRklMRV0KKyAgRlRQIFJDVkQgWzU1MCBCSUdGSUxFOiBu b3QgYSBwbGFpbiBmaWxlLl0KKyAgRlRQIFNFTlQgW1BBU1ZdCisgIEZUUCBSQ1ZEIFsyMjcgRW50 ZXJpbmcgUGFzc2l2ZSBNb2RlICgxMjgsNTksNDgsMjQsMjQ2LDM3KV0KKyAgRlRQIFNFTlQgW1JF VFIgQklHRklMRV0KKyAgRlRQIFJDVkQgWzU1MCBCSUdGSUxFOiBWYWx1ZSB0b28gbGFyZ2UgZm9y IGRlZmluZWQgZGF0YSB0eXBlLl0KKworQ3JlYXRlZCB0aGUgc2FtZSAzR0Igb24gYSBUcnU2NCBV bml4IHN5c3RlbSB0aGF0IGFsbG93cyBGVFAgYWNjZXNzLiAgTWFkZQordGhlIGNvbm5lY3Rpb24g ZnJvbSBDLUtlcm1pdCBvbiBTb2xhcmlzICgzMi1iaXQgd2l0aCBMRlMpOgorCisgIDE2OjQ2OjEy LjkwOCBGVFAgU0VOVCBbU0laRSBCSUdGSUxFXQorICAxNjo0NjoxMi45NDcgRlRQIFJDVkQgWzIx MyAzMDAwMDAwMDAxXQorCitOb3RlIHRoYXQgaXQgdGFrZXMgbGVzcyB0aGFuIGhhbGYgYSBzZWNv bmQgdG8gZ2V0IHRoZSByZXBseS4gIE5vdyBJIHN0YXJ0Cit0aGUgZG93bmxvYWQgYW5kIHRoZW4g aW50ZXJydXB0IGl0IGF0IGFib3V0IDIlOgorCisgIDE2OjQ2OjEyLjk3OSBGVFAgU0VOVCBbVFlQ RSBJXQorICAxNjo0NjoxMy4xNzQgRlRQIFJDVkQgWzIwMCBUeXBlIHNldCB0byBJLl0KKyAgMTY6 NDY6MTMuMjI2IEZUUCBTRU5UIFtQQVNWXQorICAxNjo0NjoxMy4yNjIgRlRQIFJDVkQgWzIyNyBF bnRlcmluZyBQYXNzaXZlIE1vZGUgKDE1LDE3MCwxNzgsMTcxLDExLDM3KV0KKyAgMTY6NDY6MTMu Mjk5IEZUUCBTRU5UIFtSRVRSIEJJR0ZJTEVdCisgIDE2OjQ2OjEzLjMzNyBGVFAgUkNWRCBbMTUw IE9wZW5pbmcgQklOQVJZIG1vZGUgZGF0YSBjb25uZWN0aW9uIGZvciBCSUdGSUxFLi5dCisgIDE2 OjQ3OjI0Ljg5NSBGVFAgUkNWRCBbNDI2IFRyYW5zZmVyIGFib3J0ZWQuIERhdGEgY29ubmVjdGlv biBjbG9zZWQuXQorICAxNjo0NzoyNC45MzQgRlRQIFJDVkQgWzIyNiBBYm9ydCBzdWNjZXNzZnVs XQorICAxNjo0NzoyNC45OTEgRlRQIFNFTlQgW01EVE0gQklHRklMRV0KKyAgMTY6NDc6MjUuMDI4 IEZUUCBSQ1ZEIFsyMTMgMjAwNjA3MDYyMDQ0NThdCisKK05vdyBJIGRvIGEgUkVHRVQ6CisKKyAg MTY6NTE6NTUuMzIxIEZUUCBTRU5UIFtQQVNWXQorICAxNjo1MTo1NS4zNTcgRlRQIFJDVkQgWzIy NyBFbnRlcmluZyBQYXNzaXZlIE1vZGUgKDE1LDE3MCwxNzgsMTcxLDExLDQzKV0KKyAgMTY6NTE6 NTUuMzk0IEZUUCBTRU5UIFtSRVNUIDEyMjczNjY0MF0KKyAgMTY6NTE6NTUuNDMwIEZUUCBSQ1ZE IFszNTAgUmVzdGFydGluZyBhdCAxMjI3MzY2NDAuIFNlbmQgU1RPUkUgb3IgUkVUUklFVkUuLl0K KyAgMTY6NTE6NTUuNDMxIEZUUCBTRU5UIFtSRVRSIEJJR0ZJTEVdCisgIDE2OjUxOjU1LjQ2OSBG VFAgUkNWRCBbMTUwIE9wZW5pbmcgQklOQVJZIG1vZGUgZGF0YSBjb25uZWN0aW9uIGZvciBCSUdG SUxFLi5dCisKK1RoaXMgd29ya2VkIHBlcmZlY3RseSwgYXMgZmFyIGFzIEkgY2FuIHRlbGw7IHRo ZSBGVCBkaXNwbGF5IHBpY2tlZCB1cCBpbiB0aGUKK3JpZ2h0IHBsYWNlOyB0aGUgdGhlcm1vbWV0 ZXIsIHBlcmNlbnQgZG9uZSwgYW5kIGVzdGltYXRlZCB0aW1lIHJlbWFpbmluZword2VyZSB0aGUg c2FtZSBhcyB3aGVuIHdlIGxlZnQgb2ZmIGxhc3QgdGltZS4gIEkgZGlkIHRoZSBzYW1lIHRoaW5n IHNldmVyYWwKK21vcmUgdGltZXMsIGV2ZXJ5dGhpbmcgd2FzIE9LLiAgSXQgd291bGQgaGF2ZSB0 YWtlbiBhIHJlYWxseSBsb25nIHRpbWUgdG8KK2xldCB0aGlzIHJ1biB0byBjb21wbGV0aW9uLCBi dXQgSSB0aGluayB0aGlzIGRlbW9uc3RyYXRlcyB0aGF0IFNjb3R0J3MKK3N5bXB0b21zIGFyZSBz ZXJ2ZXItZGVwZW5kZW50LiAgTm8gY2hhbmdlcy4gIDYgSnVseSAyMDA2LgorCitDaGVja2VkIGN1 cnJlbnQgY29kZSBvbiBWTVMgOC4yLTEgb24gSUE2NCAvIFVDWCA1LjUsIGJ1aWxkcyBmaW5lLgor Tm8gY2hhbmdlcy4gIFVwZGF0ZWQgbGlzdGluZyBhdCBIUC4gIDYgSnVseSAyMDA2LgorCitDaGVj a2VkIEZUUCBHRVQgb2YgbGFyZ2UgZmlsZSBpbiBBU0NJSSBtb2RlIGFnYWluc3QgVHJ1NjQgRlRQ IHNlcnZlci4gIEl0Cit3YXMgZmluZSwgYW5kIHRoZXJlIHdhcyBubyBkZWxheSBpbiB0aGUgc2Vy dmVyJ3MgcmVzcG9uc2UgdG8gb3VyIFNJWkUgY29tbWFuZAorKGFzIHRoZXJlIHdvdWxkIGJlIGlm IGl0IHdlcmUgc2Nhbm5pbmcgdGhlIGVudGlyZSBmaWxlIHRvIGNvdW50IGhvdyBtYW55CitieXRl cyB3b3VsZCBiZSByZXF1aXJlZCB0byBzZW5kIGl0IGluIHRleHQgbW9kZSkuICA3IEp1bCAyMDA2 LgorCitUZXN0ZWQgRlRQIFBVVCBiaWcgZmlsZSBhZ2FpbnN0IFRydTY0LCBPSy4gIERpdHRvIEZU UCBSRVNFTkQgYmlnIGZpbGU6CisKKyAgQy1LZXJtaXQ+cmVzZW5kIEJJR0ZJTEUKKyAgIFBVVCBC SUdGSUxFIChiaW5hcnkpICgzMDAwMDAwMDAxIGJ5dGVzKS0tLT4gUEFTVgorICAyMjcgRW50ZXJp bmcgUGFzc2l2ZSBNb2RlICgxNSwxNzAsMTc4LDE3MSwxMywxODYpCisgIC0tLT4gU0laRSBCSUdG SUxFCisgIDIxMyAzNDMyMTEyODAKKyAgLS0tPiBNRFRNIEJJR0ZJTEUKKyAgMjEzIDIwMDYwNzA3 MTQxMjQzCisgIC0tLT4gQVBQRSBCSUdGSUxFCisgIDE1MCBPcGVuaW5nIEJJTkFSWSBtb2RlIGRh dGEgY29ubmVjdGlvbiBmb3IgQklHRklMRSAoMTI4LjU5LjU5LjU2LDQ1NDcwKS4KKworTWFkZSBS RVBVVCBhIHN5bm9ueW0gZm9yIFJFU0VORC4gIGNrdXVzci5jLCA3IEp1bCAyMDA2LgorCitBZGRl ZCBGVFAgUkVQVVQgYW5kIEZUUCBSRVNFTkQgc2luY2UgcHJldmlvdXNseSB0aGVyZSB3YXMgbm8g RlRQLXByZWZpeGVkCitjb21tYW5kIGZvciByZWNvdmVyaW5nIHVwbG9hZHMsIG9ubHkgdGhlIHJl Z3VsYXIgUkVTRU5EIGNvbW1hbmQsIHdoaWNoIG1pZ2h0Citub3QgaGF2ZSBiZWVuIG9idmlvdXMg dG8gcGVvcGxlLiAgY2tjZnRwLmMsIDcgSnVsIDIwMDYuCisKK0FkZGVkIGhlbHAgdGV4dCBmb3Ig RlRQIFJFU0VORCBhbmQgUkVQVVQgYW5kIGFtZW5kZWQgUkVTRU5EIGhlbHAgdGV4dC4KK2NrY2Z0 cC5jLCBja3V1czIuYywgNyBKdWwgMjAwNi4KKworQ2hhbmdlZCBuYW1lIG9mIFxmcGljdHVyZSgp IHRvIFxmcGljdHVyZWluZm8oKSBhbmQgYWRkZWQgaGVscCB0ZXh0LiAgQnkgdGhlCit3YXksIElt YWdlTWFnaWNrIGNhbiBkbyB0aGlzIHRvbzogaWRlbnRpZnkgLWZvcm1hdCAiJXcgJWgiIGRzY2Yw NTIwLmpwZy4KK1RoZSBhZHZhbnRhZ2Ugb2YgaGF2aW5nIGl0IGluIEtlcm1pdCBpcyB0aGF0IG5v dCBldmVyeWJvZHkgaGFzIEltYWdlTWFnaWNrLgorY2t1dXNbMjRdLmMsIDcgSnVsIDIwMDYuCisK K0NoYW5nZWQgdGhlIG51bWVyaWMgY29tcGFyaXNvbnMgPSA8ID4gPD0gPj0gIT0gdG8gYWxsb3cg bG9uZyBpbnRlZ2VycyBieQorY2hhbmdpbmcgdGhlIGRhdGEgdHlwZSB0byBDS19PRkZfVCwgZXRj LiAgY2t1dXM2LmMsIDcgSnVsIDIwMDYuCisKK05vdGljZWQgdGhhdCBcZmtleXdvcmR2YWx1ZShm b289dGhpcyBpcyBhIHN0cmluZykgb25seSBrZXB0IHRoZSBmaXJzdCB3b3JkLgorRml4ZWQgaXQg dG8ga2VlcCB0aGUgd2hvbGUgZGVmaW5pdGlvbi4gIEFsc28gYWRkZWQgXGZrd3ZhbHVlKCkgYXMg YSBicmllZmVyCitzeW5vbnltLiAgY2t1dXM0LmMsIDcgSnVsIDIwMDYKKworU29tZXRpbWVzIHdl IHdhbnQgdG8gY2hlY2sgaWYgYSBmaWxlJ3Mgc3RhdHVzIGJlZm9yZSB3ZSd2ZSBGT1BFTidkIGl0 LCBpbgord2hpY2ggY2FzZSB0aGUgY2hhbm5lbCB2YXJpYWJsZSBpcyBsaWtlbHkgdG8gYmUgZW1w dHkgYW5kIFxmX3N0YXR1cyhcJWMpCit3b3VsZCBnZXQgYW4gZXJyb3IuICBNYWtpbmcgdGhlIG9i dmlvdXMgY2hhbmdlIGRpZG4ndCBmaXggdGhpcywgaG93ZXZlci4gIEl0Cit0dXJucyBvdXQgdGhh dCB0aGUgZnVuY3Rpb24gZXZhbHVhdG9yIGZhaWxlZCB0byBhZGp1c3QgYXJnbiAoYXJndW1lbnQg Y291bnQpCit3aGVuIHRyYWlsaW5nIGFyZ3VtZW50cyB3ZXJlIGVtcHR5LCBhbmQgYXJnbiB3YXMg YmVpbmcgdXNlZCBpbiB0aGlzIGNhc2UsCithbmQgcHJvYmFibHkgb3RoZXJzLCB0byB0ZXN0IHdo ZXRoZXIgYW4gYXJndW1lbnQgZXhpc3RlZC4gIEkgYWRkZWQgY29kZSB0bworYWRqdXN0IGFyZ24g dG8gcmVmbGVjdCB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cyB1cCB0byBhbmQgaW5jbHVkaW5nIHRo ZQorcmlnaHRtb3N0IG5vbi1lbXB0eSBvbmUuICBja3V1czQuYywgNyBKdWwgMjAwNi4KKworRml4 ZWQgXGZzdHJpcGIoKSB0byBub3QgZHVtcCBjb3JlIGlmIHNlY29uZCBhcmd1bWVudCBpcyBtaXNz aW5nLgorY2t1dXM0LmMsIDcgSnVsIDIwMDYuCisKK0Rpc2NvdmVyZWQgdGhhdCBpdCB3YXMgbm90 IG9idmlvdXMgd2hhdCBwYXR0ZXJuIHRvIHVzZSB0byBtYXRjaCBzdHJpbmdzCitlbmNsb3NlZCBp biBzcXVhcmUgYnJhY2tldHMuICAiaWYgbWF0Y2ggW2FiY10gXFsqXF0iIGRpZG4ndCB3b3JrLiAg TmVpdGhlcgorZGlkIHZhcmlvdXMgb3RoZXIgdHJpY2tzIGxpa2UgTkNScyBmb3IgdGhlIGJyYWNr ZXRzLiAgSG93ZXZlciwgImlmIG1hdGNoCitbYWJjXSBcXFsqXFxdIiBkb2VzIHdvcmsuICBUcnlp bmcgdG8gZml4IHRoaXMgd291bGQgbm8gZG91YnQgYnJlYWsgMTAwIG90aGVyCit0aGluZ3MsIHNv IGxldCdzIGNhbGwgaXQgYSBmZWF0dXJlLiAgNyBKdWwgMjAwNi4KKworQWRkZWQgXGZnZXRwaWRp bmZvKG4pIHRvIHJldHVybiBpbmZvIGFib3V0IGEgcHJvY2VzcyBJRDsgZm9yIG5vdyBpdCBzaW1w bHkKK3JldHVybnMgMSBpZiB0aGUgcHJvY2VzcyBpcyBhbGl2ZSBhbmQgMCBpZiBub3QgKG9yIC0x IGlmIHRoZSBhcmd1bWVudCBpcworYmFkIG9yIG1pc3Npbmcgb3Igb24gYW55IGtpbmQgb2YgZXJy b3IpLiAgY2t1dXNyLmgsIGNrdXVzWzI0XS5jLCA3IEp1bCAyMDA2LgorCitUaGUgIndoZXJlLWRp ZC1teS1maWxlLWdvIiBtZXNzYWdlIHNlZW1lZCB0byBiZSBlbmRpbmcgd2l0aCBhIExGIHJhdGhl cgordGhhbiBDUkxGLCBwcm9iYWJseSBiZWNhdXNlIHRoZSB0ZXJtaW5hbCBtb2RlcyBoYWQgbm90 IHlldCBiZWVuIHJlc3RvcmVkLAorbGVhdmluZyB0aGUgbmV4dCBwcm9tcHQgaGFuZ2luZyBiZWxv dyBpdCwgcmF0aGVyIHRoYW4gb24gdGhlIGxlZnQgbWFyZ2luLAoraWYgQy1LZXJtaXQgZXhpdGVk IGltbWVkaWF0ZWx5IGFmdGVyIHRoZSB0cmFuc2Zlci4gIEZpeGVkIGJ5IGNoYW5naW5nCithbGwg XG4ncyB0byBcclxuJ3MgaW4gd2hlcmVtc2coKTogY2tjcHJvLncsIDggSnVsIDIwMDYuCisKK0Fk ZGVkIFx2KGxhc3Rrd3ZhbCkgc28gd2UgY2FuIHJldHJpZXZlIHByb2dyYW1tYXRpY2FsbHkgdGhl IGtleXdvcmQgbW9zdAorcmVjZW50bHkgcHJvY2Vzc2VkIGJ5IFxma2V5d29yZHZhbCgpLiAgY2t1 dXNyLmgsIGNrdXVzNC5jLCA5IEp1bCAyMDA2LgorCistLS0gRGV2LjIwIC0tLQorCitBZGRlZCAj aWZkZWYgU1Y2OCwgI2luY2x1ZGUgPHVuaXN0ZC5oPiwgI2VuZGlmIGJlY2F1c2UgVW5peCBTeXN0 ZW0gVi82OCBvbgorTW90b3JvbGEgY2hva2VkIG9uIHRoZSBTRUVLX0NVUiByZWZlcmVuY2Ugd2l0 aG91dCBpdC4gIGNrdXVzNC5jLCAxMCBKdWwgMjAwNi4KKworTWFrZSBcZmtleXdvcmR2YWwoeHh4 KSB1bmRlZmluZSB4eHggKGkuZS4gd2hlbiBhIGtleXdvcmQgaXMgZ2l2ZW4gd2l0aCBubwordmFs dWUpLiAgVGhpcyB3YXkgY29tbWFuZC1saW5lIGtleXdvcmRzIHdpbGwgYWx3YXlzIG92ZXJyaWRl IHByZWV4aXN0aW5nCitkZWZhdWx0IGRlZmluaXRpb25zLCB3aGV0aGVyIHRoZXkgaGF2ZSBhIHZh bHVlIG9yIG5vdCwgd2hpY2ggbWFrZXMgaXQgZWFzaWVyCit0byBwYXJzZSBjb21tYW5kIGxpbmVz IGxpa2UgImZvbz1iYXIgYmxhaCB4eD15eSIuICBja3V1c1syNF0uYywgMTIgSnVsIDIwMDYuCisK K09uIDI5IE5vdiAyMDA1IEkgY2hhbmdlZCBJRiBLRVJCQU5HIHRvIHNvbHZlIGEgcHJvYmxlbSAo c2VlIGVudHJ5IGZvciB0aGF0CitkYXRlKSwgYnV0IGludHJvZHVjZWQgYSBuZXcgb25lOyBuYW1l bHkgdGhhdCB5b3UgY2FuJ3QgaGF2ZSAoZS5nLikgIGEgRkFUQUwKK21hY3JvIHRoYXQgdXNlcyBJ RiBLRVJCQU5HIHRvIGRlY2lkZSB3aGV0aGVyIHRvIEVYSVQgYWxsIHRoZSB3YXkgb3IgU1RPUAor YmFjayB0byB0aGUgcHJvbXB0LiAgQ2hhbmdlZCBpdCBhZ2FpbiwgdGhpcyB0aW1lIHRvIHJlcXVp cmUgbm90IHRoYXQgdGhlCitjb21tYW5kIGxldmVsIGJlIDEsIGJ1dCB0aGF0IHRoZSBjb21tYW5k ICpmaWxlKiBsZXZlbCBiZSAwIChpLmUuIHRoYXQgd2UgYXJlCitpbiB0aGUgdG9wLWxldmVsIGNv bW1hbmQgZmlsZSwgaXJyZXNwZWN0aXZlIG9mIHRoZSBjb21tYW5kIG9yIG1hY3JvIGxldmVsLAor YnV0IG5vdCBpbiBhIHN1YmZpbGUpLiAgY2t1dXM2LmMsIDEyIEp1bCAyMDA2LgorCitJdCBpcyB1 bmhlbHBmdWwgd2hlbiBLZXJtaXQgZ2V0cyBhIHN5bnRheCBlcnJvciBpbiB0aGUgbWlkZGxlIG9m IGEgYmlnCitjb21wb3VuZCBzdGF0ZW1lbnQgYmxvY2sgKGUuZy4gRk9SIG9yIFdISUxFIGxvb3Ap IGFuZCBkdW1wcyBvdXQgdGhlIHdob2xlCit0aGluZyBpbiBhbiBlcnJvciBtZXNzYWdlLiAgSSBj aGFuZ2VkIHRoZSB0d28gcGxhY2VzIHdoZXJlIHRoaXMgY2FuIGhhcHBlbgordG8gY2FsbCBhIG5l dyByb3V0aW5lIHRoYXQsIGluc3RlYWQgb2YgZHVtcGluZyBvdXQgdGhlIGVudGlyZSBjbWRidWYs CitjaGVja3MgaXRzIGxlbmd0aCBmaXJzdCBhbmQgaWYgaXQncyBtb3JlIHRoYW4gYSBsaW5lIGxv bmcsIHRydW5jYXRlcyBpdAorYW5kIGFkZHMgYW4gZWxsaXBzaXMuICBja3V1czYuYywgMTIgSnVs IDIwMDYuCisKK1RoZSBuZXcgUkVOQU1FIGNvbW1hbmQgZGlkbid0IGdpdmUgdmVyeSBnb29kIGVy cm9yIG1lc3NhZ2VzLCBlLmcuIGlmIHRoZQorZmlsZXNwZWMgZGlkbid0IG1hdGNoIGFueSBmaWxl cy4gIEZpeGVkIGluIGRvcmVuYW0oKTogY2t1dXM2LmMsIDEyIEp1bCAyMDA2LgorCitGaXhlZCBE SVIgL1RPUCB0byB3b3JrIGlmIHRoZSAvVE9QOm4gYXJndW1lbnQgd2FzIG9taXR0ZWQsIGRlZmF1 bHRpbmcKK3RvIDEwLiAgZG9teWRpcigpOiBja3V1czYuYywgMTIgSnVsIDIwMDYuCisKK0FkZGVk IERJUiAvQ09VTlQ6diB0byBjb3VudCB0aGUgbnVtYmVyIG9mIGZpbGVzIHRoYXQgbWF0Y2ggdGhl IGdpdmVuCitjcml0ZXJpYSBhbmQgc3RvcmUgcmVzdWx0IGluIHRoZSB2YXJpYWJsZSB2LiAgY2t1 dXNyLmgsIGNrdXVzW3IyNl0uYywKKzI0IEF1ZyAyMDA2LgorCitBZGRlZCBIRElSRUNUT1JZIGFz IGFuIGludmlzaWJsZSBzeW5vbnltIGZvciBESVIgL1NPUlQ6U0laRSAvUkVWRVJTRS4KK0NhbiBi ZSB1c2VkIHdpdGggb3RoZXIgc3dpdGNoZXMsIG9mIGNvdXJzZSwgc28gKGUuZy4pIEhEIC9UT1Ag c2hvd3MgdGhlCit0ZW4gYmlnZ2VzdCBmaWxlcy4gIGNrdXVzci5oLCBja3V1c1tyMjZdLmMsIDI0 IEF1ZyAyMDA2LgorCitESVIgL0ZPTExPV0xJTktTIGFuZCAvTk9GT0xMT1dMSU5LUyBhbHdheXMg ZGlkIHRoZSBzYW1lIHRoaW5nOyB0aGUgc3dpdGNoCit3YXMgaWdub3JlZCwgYSBzeW1saW5rIGlz IGFsd2F5cyBmb2xsb3dlZC4gIEZpeGVkIGluIGNrdXVzNi5jLCAyNCBBdWcgMjAwNi4KKworQWRk ZWQgRElSIC9OT0xJTktTLCB3aGljaCBtZWFucyBkb24ndCBzaG93IG9yIGNvdW50IHN5bWxpbmtz IGF0IGFsbC4KK2NrdXVzci5oLCBja3V1c1tyMjZdLmMsIDI0IEF1ZyAyMDA2LgorCitCdWlsZCBv biBTb2xhcmlzIDkgYW5kIE5ldEJTRCAzLjAsIDI0IEF1ZyAyMDA2LgorCitBZGRlZCBhIG1pc3Np bmcgZGVmaW5pdGlvbiBmb3IgTE9DS19ESVIgaW4gdGhlIExpbnV4IEhBVkVfQkFVREJPWSBjYXNl LAorc3VnZ2VzdGVkIGJ5IEdlcnJ5IEJlbGFuZ2VyLiAgY2t1dGlvLmMsIDYgT2N0IDIwMDYuCisK K1N1Z2dlc3RlZCBieSBKaW0gQ3JhcHVjaGV0dGVzOiBcdihkaWFsbWVzc2FnZSkgaXMgdGhlIHRl eHQgc3RyaW5nCitjb3JyZXNwb25kaW5nIHRvIFx2KGRpYWxzdGF0dXMpLiAgY2t1dXNyLmgsIGNr dXVzNC5jLCA2IE9jdCAyMDA2LgorCitTb2V3b25vIEVmZmVuZGkgc2VudCBjb2RlIGZvciBleGl0 IHNlcXVlbmNlIHRvIGxlYXZlIERUUiBvbjsgdGhpcyBhbW91bnRlZAordG8gdW5zZXR0aW5nIEhQ VUNMIGluIGNfY2ZsYWcuICBJIGRpZCBpdCBhIHNpbXBsZXIgd2F5LCBob3BlZnVsbHkgcG9ydGFi bGUKK3RvIGFsbCBVbml4ZXMsIGJ1dCB3aG8ga25vd3MgYXQgdGhpcyBsYXRlIGRhdGUuICBUaGUg Y29kZSBpcyBpbnNpZGUKKyNpZm5kZWYgQ0tfTk9IVVBDTC4uI2VuZGlmIGluIGNhc2UgaXQgY2F1 c2VzIHRyb3VibGUuICBJdCBpcyBleGVjdXRlZCBpZgorU0VUIEVYSVQgSEFOR1VQIGlzIE9GRiBh bmQgYSBzZXJpYWwgcG9ydCB3YXMgb3BlbiBhdCB0aGUgdGltZSBLZXJtaXQgZXhpdHMKKyhvciBj bG9zZXMgaXQgZXhwbGljaXRseSkuICB0dGNsb3MoKTogY2t1dGlvLmMsIDYgT2N0IDIwMDYuCisK K0J1aWx0IG9uIFNvbGFyaXM5L1NwYXJjOyBGcmVlQlNEIDYuMi9BTUQ2NDsgTmV0QlNEIDMuMC9p Mzg2OyBIUC1VWCAxMWkgdjI7CitTQ08gT1NSNi4wMC4KKworLS0tIERldi4yMSAtLS0KKworQWRk ZWQgbmV0YnNkK29wZW5zc2wgdGFyZ2V0IHRvIG1ha2VmaWxlLiAgQnVpbHQgT0sgKE5ldEJTRCAz LjAsIE9wZW5TU0wKKzAuOS43ZCkgZXhjZXB0IHdpdGggc29tZSB3YXJuaW5ncyBpbiBja19jcnAu Yy4gIENvbm5lY3RzIGFuZCBsb2dzIGluIE9LIHRvIGEKK3NlY3VyZSBzaXRlLiAgMTAgT2N0IDIw MDYuCisKK0FkZGVkIGEgZGVidWcgc3RhdGVtZW50IHRvIGZ0cF9ob29rdXAoKSB0byByZWNvcmQg dGhlIFRDUCBwb3J0IHRoYXQgd2FzIHVzZWQuCitja2NmdHAuYywgMTEgT2N0IDIwMDYuCisKK0J1 aWx0IHdpdGggT3BlblNTTCAwLjkuN2wgb24gU29sYXJpcyA5LiAgQnVpbHQgd2l0aCBPcGVuU1NM IDAuOS44ZCBvbgorU29sYXJpcyA5OyBjb25uZWN0cyBhbmQgbG9ncyBpbiB0byBhIHNlY3VyZSBz aXRlLiAgMTEgT2N0IDIwMDYuCisKK1RoZSBuZXcgUkVOQU1FIGNvbW1hbmQgZGlkbid0IHdvcmsg aWYgYm90aCB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBuYW1lcworaW5jbHVkZWQgZGlyZWN0 b3J5IHNlZ21lbnRzLCBlLmcuICJyZW5hbWUgL3RtcC9mb28gfi9iYXIiIChzZWUgbm90ZXMgb2YK KzQgTWF5IDIwMDYpLiAgVGhpcyB3YXMgZml4ZWQgaW4gcmVuYW1lb25lKCkgYnkgYSBzcGVjaWFs IGNhc2UgaW4gd2hpY2gKK3RoZSBzZWNvbmQgYXJndW1lbnQgaXMgZ2l2ZW4gYnV0IGl0IGlzIGEg ZmlsZW5hbWUsIG5vdCBhIGRpcmVjdG9yeSBuYW1lLgorY2t1dXM2LmMsIDExIE9jdCAyMDA2Lgor CitGaXhlZCB1bmd1YXJkZWQgcmVmZXJlbmNlIHRvIGRpYWxtc2dbXSBmb3IgXGZkaWFsbWVzc2Fn ZSgpLCBub3RpY2VkIGJ5CitHZXJyeSBCZWxhbmdlci4gIGNrdXVzNC5jLCAxMiBPY3QgMjAwNi4K KworQWRkZWQgYSBUT1VDSCBjb21tYW5kIHRoYXQgZG9lcyB3aGF0IFVOSVggdG91Y2ggZG9lczog Y3JlYXRlcyB0aGUgZmlsZSBpZiBpdAorZG9lcyBub3QgZXhpc3QsIHVwZGF0ZXMgdGhlIHRpbWVz dGFtcCBpZiBpdCBkb2VzLiAgSWYgYSB3aWxkY2FyZCBpcyBnaXZlbiwKK2l0IG9wZXJhdGVzIG9u bHkgb24gZXhpc3RpbmcgZmlsZXMuICBJdCBzaGFyZXMgdGhlIERJUkVDVE9SWSBjb21tYW5kIHBh cnNlciwKK3NvIGFsbCB0aGUgc2FtZSBmaWxlIHNlbGVjdGlvbiBzd2l0Y2hlcyBjYW4gYmUgZ2l2 ZW4uICBja3V1c3IuW2NoXSwKK2NrdXVzWzI2XS5jLCAxMiBPY3QgMjAwNi4KKworUGV0ZXJFIG5v dGljZWQgdGhhdCBpZiB5b3UgRk9QRU4gYSBmaWxlLCBkbyBzb21lIHNlZWtzIG9yIHJlYWRzLCB0 aGVuIEZDTE9TRQoraXQsIHRoZW4gRk9QRU4gaXQgYWdhaW4gKG9yIG9wZW4gYSBkaWZmZXJlbnQg b25lKSwgc29tZSBvZiB0aGUgb2xkCitpbmZvcm1hdGlvbiBpcyBzdGlsbCB0aGVyZSAoZS5nLiBj dXJyZW50IGxpbmUgbnVtYmVyKS4gIFRoaXMgaXMgYW4gYXJ0aWZhY3QKK29mIHRoZSBjaGFuZ2Vz IG9mIE1heSA0dGguICBOb3cgdGhlIGZpbGUgY2xvc2luZyBhbmQgb3BlbmluZyByb3V0aW5lcyBh cmUgYQorYml0IG1vcmUgY2FyZWZ1bCBhYm91dCBzY3J1YmJpbmcgYW5kIGluaXRpYWxpemluZyB0 aGUgZmlsZSBpbmZvIHN0cnVjdC4KK2NrdXVzNy5jLCAxMiBPY3QgMjAwNi4KKworLS0tIERldi4y MiAtLS0KKworQnVpbHQgT0sgb24gUmVkIEhhdCBMaW51eCBBUzQgd2l0aCBib3RoICJtYWtlIGxp bnV4IiBhbmQgIm1ha2UgbGludXhuYyIuIAorMTUgT2N0IDIwMDYuCisKK0RJUkVDVE9SWSAvQlJJ RUYgaWdub3JlZCBmaWxlIHNlbGVjdGlvbiBzd2l0Y2hlcyBhbmQgYWx3YXlzIGxpc3RlZCBhbGwK K2ZpbGVzLiAgVGhpcyB3YXMgYmVjYXVzZSBvZiBob3cgSSBjbGV2ZXJseSBjYWxsZWQgZmlsaGVs cCgpICh0aGUgcm91dGluZQordGhhdCBsaXN0cyBtYXRjaGluZyBmaWxlcyB3aGVuID8gaXMgdHlw ZWQgaW4gYSBmaWxlbmFtZSBmaWVsZCkgYW5kLCBvZgorY291cnNlLCBmaWxoZWxwKCkgZG9lc24n dCBrbm93IGFueXRoaW5nIGFib3V0IHRoZSBESVJFQ1RPUlkgY29tbWFuZCdzIGZpbGUKK3NlbGVj dGlvbnMuICBDaGFuZ2VkIGZpbGhlbHAoKSB0byBhY2NlcHQgYWxsIHRoZSBhcmdzIG5lZWRlZCBm b3IgcGFzc2luZworYWxvbmcgdG8gZmlsZXNlbGVjdCgpLCByZW5hbWVkIGl0IHRvIHhmaWxoZWxw KCksIGFuZCBtYWRlIGEgZmlsaGVscCgpIHN0dWIKK3RoYXQgY2hhaW5zIHRvIHhmaWxoZWxwKCkg d2l0aCBudWxsIHNlbGVjdGlvbnMuICBja2NrZXIuaCwgY2t1Y21kLltjaF0sCitja3V1czYuYywg MjkgTm92IDIwMDYuCisKK1NIT1cgQ09OTkVDVElPTiBmb3IgYW4gU1NIIGNvbm5lY3Rpb24gc2Fp ZCB0aGUgY29ubmVjdGlvbiB0eXBlIHdhcyAiTkVUIgorcmF0aGVyIHRoYW4gIlNTSCIuICBGaXhl ZCBpbiBkb2xvZ25ldCgpOiBja3V1czMuYywgMjkgTm92IDIwMDYuCisKK1NIT1cgQ09OTkVDVElP TiBkaWRuJ3Qgc2hvdyB0aGUgVENQIHBvcnQgbnVtYmVyLiAgVGhpcyBjb21tYW5kIHdvcmtzIGJ5 CitwYXJzaW5nIHRoZSBjdXJyZW50IGNvbm5lY3Rpb24gbG9nIGVudHJ5IHN0cmluZywgd2hpY2gg ZG9lc24ndCBoYXZlIGEgZmllbGQKK2ZvciB0aGlzLCBidXQgd2hpY2ggc29tZXRpbWVzIHNob3dz IHRoZSBwb3J0IG51bWJlciBhcyBwYXJ0IG9mIHRoZSBob3N0bmFtZQorKGJ1dCBtb3JlIG9mdGVu IG5vdCkuICBBZGRlZCBjb2RlIHRvIGRvbG9nbmV0KCkgdG8gbG9nIHRoZSBUQ1AgcG9ydCBudW1i ZXIsCitpZiBrbm93bi4gIFRoaXMgaW52b2x2ZWQgYWRkaW5nIGEgZ2V0dGNwcG9ydCgpIGZ1bmN0 aW9uIHRvIGNrY25ldC5jLgorY2tjbmV0LltjaF0sIGNrdXVzMy5jLCAyOSBOb3YgMjAwNi4KKwor VGhpcyB3YXMgaW1wb3NzaWJsZTogZGVmIFwlMSB1cHBlciwgZWNobyBcZlwlMShhYmMpIC0tIGku ZS4gdG8gImNvbXBvc2UiIGEKK2Z1bmN0aW9uIG5hbWUuICBGaXhlZCBpbiB6enN0cmluZygpLiAg QnV0IG5vdGUgdGhhdCBpdCdzIHN0aWxsIG5vdCBwb3NzaWJsZQordG8gZG8gdGhpczogZGVmIFwl MSBcZnVwcGVyLCBlY2hvIFwlMShhYmMpIC0tIGJlY2F1c2UgYXQgdGhlIHBvaW50IHdoZXJlCisi XGZ1cHBlciIgaXMgZW5jb3VudGVyZWQsIHdoaWNoIGlzIGF1dG9tYXRpY2FsbHkgZmVkIHRvIGZu ZXZhbCgpLCB0aGUKK2FyZ3VtZW50IGxpc3QgaGFzbid0IGJlZW4gcmVhZCB5ZXQuICBja3V1czQu YywgMjkgTm92IDIwMDYuCisKK1RoZSBtZWFuaW5nbGVzcyBMaXNwIGNvbW1hbmQgKD0pIHdvdWxk IGNhdXNlIEtlcm1pdCB0byBoYW5nLiAgRHVlIHRvIHNvbWUKK2lkaW9zeW5jcmFjeSBpbiB0aGUg cGFyc2VyLCBpdCB3b3VsZCBzZWUgdGhpcyBhcyAoKD0pIGFuZCB3b3VsZCBnbyBpbnRvCisid2Fp dCBmb3IgdGhlIGNsb3NpbmcgcGFyZW4iIG1vZGUuICBUaGVyZSB3YXMgYWxyZWFkeSBhIGhhY2sg aW4gdGhlIGNvZGUgdG8KK2NvbXBlbnNhdGUgZm9yIHRoaXMsIGJ1dCBpdCBkaWRuJ3Qgd29yay4g IEkgZml4ZWQgdGhlIGhhY2sgYnV0IEkgZG9uJ3QKK3VuZGVyc3RhbmQgdGhlIHJlYWwgcHJvYmxl bS4gIEFueXdheSwgY29tcGFyaW5nIEtlcm1pdCB3aXRoIHJlYWwgKEZyYW56KQorTGlzcCBJIGRp c2NvdmVyZWQgdGhhdCBjb21wYXJpc29uIG9wZXJhdG9ycyBkbyBub3QgcmVxdWlyZSB0d28gYXJn dW1lbnRzLCBhcworS2VybWl0IGhhcyBiZWVuIGRvaW5nLCBhbHRob3VnaCB0aGV5IGRvIHJlcXVp cmUgYXQgbGVhc3Qgb25lLiAgSSBjaGFuZ2VkCitLZXJtaXQgdG8gbm90IHJlcXVpcmUgdHdvLCBz byBub3cgYWxsIHRoZSBjb21wYXJpc29uIHByZWRpY2F0ZXMgYmVoYXZlCitleGFjdGx5IGxpa2Ug RnJhbnogTGlzcCwgaW5jbHVkaW5nIGdldHRpbmcgYW4gZXJyb3IgaWYgdGhlcmUgYXJlIG5vIGFy Z3MpLgorY2t1dXNbcjNdLmMsIDI5IE5vdiAyMDA2LgorCitGcm9tIHRvLWRvIGxpc3Q6IE1ha2Ug YSB3YXkgdG8gaW5oaWJpdCBwYXR0ZXJuIG1hdGNoaW5nIGluIFNXSVRDSCBsYWJlbHMuCitJdCdz IGFscmVhZHkgdGhlcmU7IGp1c3QgcXVvdGUgdGhlIHdpbGRjYXJkIGNoYXJhY3RlcnM7IHRoZSBv bmx5IHRyaWNrIGlzCit0aGF0IGZvciBzb21lIHJlYXNvbiAoc3VjaCBhcyB0aGF0IFNXSVRDSCBp cyByZWFsbHkgYW4gaW50ZXJuYWxseSBkZWZpbmVkCittYWNybyksIGEgZG91YmxlIHF1b3RlIGlz IG5lZWRlZDoKKworICBzd2l0Y2ggXCUxIHsKKyAgICA6YVxcKnosIGVjaG8gbGl0ZXJhbGx5ICJh KnoiLCBicmVhaworICAgIDphYmN4eXosIGVjaG8gbGl0ZXJhbGx5ICJhYmN4eXoiLCBicmVhawor ICAgIDphKnosIGVjaG8gYS4uLnosIGJyZWFrCisgICAgOmRlZmF1bHQsIGVjaG8gTk8gTUFUQ0gK KyAgfQorCitJbiBmaXJzdCBjYXNlLCB0aGUgYXN0ZXJpc2sgaXMgdGFrZW4gbGl0ZXJhbGx5OyBp biB0aGUgdGhpcmQgaXQncyBhCittZXRhY2hhcmFjdGVyIGFuZCB0aGUgbGFiZWwgbWF0Y2hlcyBh bnkgc3RyaW5nIHRoYXQgc3RhcnRzIHdpdGggJ2EnIGFuZAorZW5kcyB3aXRoICd6Jy4KKworQXJy YXkgaW5pdGlhbGl6YXRpb24gd291bGQgcXVpdCBlYXJseSBpZiBhbnkgaW5pdGlhbGl6ZXJzIHdl cmUgdW5kZWZpbmVkLAorZS5nLiAiZGVjbCBcJmFbXSA9IFwlYSBcJWIgXCVjIiB3b3VsZCBzdG9w IGF0IHRoZSBmaXJzdCBlbGVtZW50IGlmIFwlYgord2FzIG5vdCBkZWZpbmVkLCBldmVuIHRob3Vn aCBcJWMgbWlnaHQgYmUgZGVmaW5lZC4gIEZpeGVkIGluIGRvZGNsKCk6Citja3V1c3IuYywgMzAg Tm92IDIwMDYuCisKK0RJUiAvQVJSQVk6YSBmaWxlc3BlYywgd2hlbiB0aGUgZmlsZXNwZWMgZG9l cyBub3QgbWF0Y2ggYW55IGZpbGVzLAordGVybWluYXRlcyB3aXRoIHRoZSBhcnJheSB1bmRlY2xh cmVkLiAgSXQgd291bGQgYmUgYmV0dGVyIHRvIHJldHVybiBhCitkZWNsYXJlZCBidXQgZW1wdHkg YXJyYXkgKFwmYVswXSA9IDApLiAgVGhlIGNvZGUgaXMgYWxyZWFkeSB0aGVyZSB0byBkbwordGhh dCwgYnV0IGlzbid0IHdvcmtpbmcuICBBbmQgeWV0ICJkZWNsYXJlIFwmYVswXSIgZG9lcyBpbmRl ZWQgY3JlYXRlIGEKKzAtZWxlbWVudCBhcnJheSAoInNob3cgYXJyYXkiIHNob3dzIGEgZGltZW5z aW9uIG9mIDApLiAgVHVybnMgb3V0IHRoZXJlIHdlcmUKK3R3byBwcm9ibGVtczsgb25lIHdhcyB0 aGUgY2FyZWxlc3MgcmVjeWNsaW5nIG9mIGEgbG9jYWwgdmFyaWFibGUgKCJhcnJheSIpLAorcmVz dWx0aW5nIGluIGZhaWx1cmUgdG8gY3JlYXRlIFwmYVtdIChidXQgbm90IGFueSBvdGhlciBhcnJh eSkuICBGaXhlZCBpbgorZG9teWRpcigpOiBja3V1czYuYywgMzAgTm92IDIwMDYuCisKK1RoZSBv dGhlciBwcm9ibGVtIHdhcyB0aGF0IGRjbGFycmF5KCksIHdoZW4gY2FsbGVkIHdpdGggYW4gYXJy YXkgbmFtZSBhbmQgYQorZGltZW5zaW9uIG9mIHplcm8sIGRvZXMgdHdvIGRpZmZlcmVudCB0aGlu Z3MgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIGFycmF5CithbHJlYWR5IGV4aXN0ZWQuICBUaGVy ZSBpcyBzdGlsbCBhIGZhaXIgYW1vdW50IG9mIGNvbmZ1c2lvbiBhYm91dCB3aGV0aGVyIGEKK2Rp bWVuc2lvbiBvZiAwIGluZGljYXRlcyBhbiBhcnJheSB3aXRoIDEgZWxlbWVudCAoYXMgaXQgc2hv dWxkKSBvciBhCitub25leGlzdGVudCBhcnJheS4gIFdlIGNhbGwgZGNsYXJyYXkoKSB3aXRoIGEg c2l6ZSBvZiAwIHRvIHVuZGVjbGFyZSBhbgorYXJyYXkgYnV0IHdlIGFsc28gbmVlZCB0byBhYmxl IGFibGUgdG8gZGVjbGFyZSBhbiBhcnJheSB3aXRoIG9ubHkgZWxlbWVudCAwLgorSSBjaGFuZ2Vk IGRjbGFycmF5KCkgdG8gdHJlYXQgYSBuZWdhdGl2ZSBkaW1lbnNpb24gYXMgYSBjb21tYW5kIHRv IGRlc3Ryb3kKK3RoZSBhcnJheSwgYW5kIDAgb3IgcG9zaXRpdmUgYXMgYSBjb21tYW5kIHRvIGNy ZWF0ZSB0aGUgYXJyYXkgd2l0aCB0aGUgZ2l2ZW4KK2RpbWVuc2lvbi4gIGNrdXVzW3I1Nl0uYywg MzAgTm92IDIwMDYuCisKK05leHQgcHJvYmxlbTogd2hlbiBjaGthcnJheSgpIHJldHVybnMgMCwg dGhpcyBzaG91bGQgbm90IGJlIGludGVycHJldGVkIHRvCittZWFuIHRoZSBhcnJheSBkb2VzIG5v dCBleGlzdC4gIExvb2tzIGxpa2UgdGhlIG9ubHkgcGxhY2UgdGhpcyBoYXBwZW5lZCB3YXMKK2lu IFxmY29udGVudHMoKTsgZml4ZWQgaW4gY2t1dXM0LmMsIDMwIE5vdiAyMDA2LgorCitJZiB3ZSBp bmNsdWRlIGZpbGUgc2VsZWN0b3JzIHdpdGggRElSIC9BUlJBWTomYSBhbmQgc29tZSBvZiB0aGUg ZmlsZXMgdGhhdAorbWF0Y2ggdGhlIGdpdmVuIGZpbGVzcGVjIGJ1dCBkb24ndCBmaXQgdGhlIHNl bGVjdG9ycywgdGhlIGFycmF5J3MgZGltZW5zaW9uCitpcyBiaWdnZXIgdGhhbiBpdHMgbnVtYmVy IG9mIGVsZW1lbnRzLiAgQWRkZWQgY29kZSBhdCB0aGUgZW5kIG9mIGRvbXlkaXIoKQordG8gcmVz aXplIHRoZSBhcnJheSBzbyBcZmRpbSgpIHJldHVybnMgdGhlIG51bWJlciBvZiBmaWxlbmFtZXMg aW4gdGhlIGFycmF5LAorYW5kIGFsc28gbWFkZSBzdXJlIHRoYXQgZWxlbWVudCAwIGNvbnRhaW5z IHRoYXQgbnVtYmVyIHRvby4gIGNrdXVzNi5jLAorMzAgTm92IDIwMDYuCisKK1RoaXMgd291bGQg YmUgYSBuaWNlIGVsZWdhbnQgd2F5IHRvIGxvb3Agb3ZlciBhIGJ1bmNoIG9mIGZpbGVzLCBpZiBp dCB3b3JrZWQ6CisKKyAgZm9yIFwlaSAxIFxmZmlsZXMoKikgMSB7IHJlbmFtZSBcZm5leHRmaWxl KCkgeHh4X1xmbHBhZChcJWksMywwKSB9CisKK0J1dCBpbiB0aGlzIGxvb3AsIEtlcm1pdCBza2lw cyBldmVyeSBvdGhlciBmaWxlIChiZWdpbm5pbmcgd2l0aCB0aGUgZmlyc3QpCithbmQgdGhlbiBy dW5zIG91dCBvZiBmaWxlcyBoYWxmd2F5IHRocm91Z2ggdGhlIGxvb3AuICBXaHk/ICBCZWNhdXNl IGluCitjb21tYW5kcyBsaWtlIFJFTkFNRSBhbmQgREVMRVRFLCB0aGUgZmlsZW5hbWUgcGFyc2Vy IGlzIGluIGEgY2hhaW5lZCBGREIKK3dpdGggdGhlIHN3aXRjaCBwYXJzZXIuICBGaXJzdCB0aGUg c3dpdGNoIHBhcnNlciwgY21zd2koKSwgZ2V0cyBpdHMgaGFuZHMgb24KK1xmbmV4dGZpbGUoKSwg cGFzc2luZyBpdCB0aHJvdWdoIHRoZSBldmFsdWF0b3IgYW5kIHRodXMgZ2V0dGluZyB0aGUgZmly c3QKK2ZpbGVuYW1lLCB3aGljaCBpdCB0aGVuIHNlZXMgaXMgbm90IGEgc3dpdGNoLCBzbyBub3cg dGhlIGZpZWxkIGlzIHBhcnNlZCBieQordGhlIG5leHQgcGFyc2VyIGluIHRoZSBjaGFpbiwgY21p ZmkoKSwgd2hpY2ggY2F1c2VzIFxmbmV4dGZpbGUoKSB0byBiZSAKK2V4ZWN1dGVkIGFnYWluLiAg SW4gZmFjdCwgdGhlIEZPUiBsb29wIGhhcyBub3RoaW5nIHRvIGRvIHdpdGg7IHRoZSBzYW1lCit0 aGluZyBoYXBwZW5zIGxpa2UgdGhpczoKKworICB2b2lkIFxmZmlsZXMoKikKKyAgZGVsZXRlIFxm bmV4dGZpbGUoKQorCitUaGlzIGRlbGV0ZXMgbm90IHRoZSBmaXJzdCBmaWxlLCBidXQgdGhlIHNl Y29uZCBvbmUuICBPYnZpb3VzbHkgdXNlcnMgY2FuIGJlCit0b2xkIG5vdCB0byByZWZlciB0byBc Zm5leHRmaWxlKCkgaW4gY2hhaW5lZC1mZGIgZmllbGRzOgorCisgIGZvciBcJWkgMSBcZmZpbGVz KCopIDEgeyAuZiA6PSBcZm5leHRmaWxlKCksIGRlbGV0ZSBcbShmKSB9CisKK2J1dCB0aGlzIGlz IGhhcmRseSBpbnR1aXRpdmUuICBJIGhhZCBzb21lIGNsZXZlciBpZGVhcyBvZiBob3cgdG8gbWFr ZQorXGZuZXh0ZmlsZSgpIHdvcmsgYXMgZXhwZWN0ZWQgaW4gdGhpcyBjb250ZXh0IGJ1dCBpdCdz IHdheSB0b28gbXVjaCBtYWdpYy4KK0JldHRlciB0byBzaW1wbHkgZG9jdW1lbnQgdGhhdCBcZm5l eHRmaWxlKCkgaXMgImRlcHJlY2F0ZWQiIGFuZCB0aGUgYXJyYXkKK2Zvcm1hdCBzaG91bGQgYmUg dXNlZDoKKworICBmb3IgXCVpIDEgXGZmaWxlcygqLCZhKSAxIHsgZGVsZXRlIFwmYVtcJWldIH0K KworVGhlIGRpZmZlcmVuY2UgaXMsIGFuIGFycmF5IGVsZW1lbnQgZG9lc24ndCBjaGFuZ2UgZXZl cnkgdGltZSBpdCdzIHJlZmVycmVkIHRvIQorCitBZGRlZCBhIC9QUkVTRVJWRSBzd2l0Y2ggdG8g dGhlIENPUFkgY29tbWFuZCB0byBwcmVzZXJ2ZSB0aGUgdGltZXN0YW1wIGFuZAorcGVybWlzc2lv bnMgb2YgdGhlIGZpbGUuICBJIGRpZCB0aGlzIHVzaW5nIHRoZSBLZXJtaXQgQVBJcyBzbyBpdCBz aG91bGQgd29yaworZm9yIGFueSB2ZXJzaW9uIG9mIEMtS2VybWl0IG9yIEs5NS4gIGNrdXVzWzI2 XS5jLCAzMCBOb3YgMjAwNi4KKworQWRkZWQgQ09QWSAvT1ZFUldSSVRFOntBTFdBWVMsTkVWRVIs T0xERVIsTkVXRVJ9IHRvIGNvbnRyb2wgbmFtZSBjb2xsaXNpb25zCit3aGVuIGNvcHlpbmcgYWNy b3NzIGRpcmVjdG9yaWVzLiAgY2t1dXNbMjZdLmMsIDEgRGVjIDIwMDYuCisKKy0tLSBEZXYuMjMg LS0tCisKK0ZpeGVkIGEgYnVnIGluIFNFVCBURUxORVQgUFJPTVBULUZPUi1VU0VSSUQsIFNFVCBB VVRIIEtFUkJFUk9TWzQ1XSBQUk9NUFQsCithbmQgU0VUIEFVVEggU1JQIFBST01QVCBpbiB3aGlj aCB0aGUgdXNlcidzIHN0cmluZyB3YXMgY29tcGFyZWQgd2l0aCBhCitsaXRlcmFsIChzID09ICIi KSwgcmVwb3J0ZWQgYnkgUGF2b2wgUnVzbmFrLiAgV29yc2UsIGVtcHR5IHN0cmluZ3MgKGlmIHRo ZQordGVzdCBzdWNjZWVkZWQpIHdlcmUgdHVybmVkIGludG8gbnVsbCBwb2ludGVycywgYW5kIHRo ZW4gZmVkIHRvIHN0cmxlbigpLgorRml4ZWQgaW4gY2t1dXMzLmMsIDUgRGVjIDIwMDYuCisKK0Fk ZGVkIGFuIG9wdGlvbmFsIDR0aCBhcmd1bWVudCB0byBcZmluZGV4KCksIFxmcmluZGV4KCksIFxm c2VhcmNoKCksIGFuZAorXGZyc2VhcmNoKCk6IHRoZSBkZXNpcmVkIG9jY3VycmVuY2UgbnVtYmVy IG9mIHRoZSBzZWFyY2hlZC1mb3Igc3RyaW5nLgorXGZyc2VhcmNoKCkgd2FzIGEgYml0IHRyaWNr eS4gIGNrdXVzWzI0XS5jLCA3IERlYyAyMDA2LgorCitBZGRlZCBcZmNvdW50KHMxLHMyKSB0byB0 ZWxsIHRoZSBudW1iZXIgb2Ygb2NjdXJyZW5jZXMgb2YgczEgaW4gczIuCitja3V1c1syNF0uYywg OCBEZWMgMjAwNi4KKworQWRkZWQgXGZmdW5jdGlvbihzMSkgdG8gdGVsbCBpZiBhIGdpdmVuIGJ1 aWx0LWluIGZ1bmN0aW9uIGlzIGF2YWlsYWJsZS4KK2NrdXVzWzI0XS5jLCA4IERlYyAyMDA2Lgor CitDaGFuZ2VkIFJFTkFNRSAvQ09MTElTSU9OOlBST0NFRUQgdG8gYmUgL0NPTExJU0lPTjpTS0lQ LCB3aGljaCBpcyBjbGVhcmVyLgorY2t1dXNbMjZdLmMsIDggRGVjIDIwMDYuCisKK0ZvciBjb21t dW5pY2F0aW9uIHByb3RvY29sczogSU5QVVQgL0NPVU5UOm4gdG8gcmVhZCBleGFjdGx5IG4gY2hh cmFjdGVycword2l0aG91dCBhbnkgbWF0Y2hpbmcuICBDYW4gYmUgdXNlZCwgZm9yIGV4YW1wbGUs IHdpdGggQ09OVEVOVF9MRU5HVEggaW4gQ0dJCitzY3JpcHRzOyBOVUwgY2hhcmFjdGVycyBhcmUg Y291bnRlZCBidXQgbm90IGNvbGxlY3RlZC4gIGNrdXVzci5bY2hdLAorY2t1dXM0LmMsIDggRGVj IDIwMDYuCisKK1RoZXJlIHdhcyBhIGJhZCBidWcgaW4gdGhlIGRhdGUtcGFyc2luZyByb3V0aW5l czsgaXQncyBiZWVuIHRoZXJlIGZvciB5ZWFycy4KK0lmIGEgZGF0ZSBzdHJpbmcgaW5jbHVkZXMg YSB0aW1lem9uZSwgZS5nLiAiU2F0LCA5IERlYyAyMDA2IDE5OjI2OjIzIEVTVCIsCithbmQgY29u dmVydGluZyB0byBHTVQgY2hhbmdlcyB0aGUgZGF0ZSwgdGhlIHZhcmlhYmxlcyBmb3IgZGF5LCBt b250aCwgYW5kCit5ZWFyICh3aGljaCBhcmUgdXNlZCBsYXRlcikgd2VyZSBub3QgdXBkYXRlZCwg YW5kIHRoZSBmaW5hbCByZXN1bHQgd2FzIGEgZGF5CitvZmYuICBGaXhlZCBpbiBjbWN2dGRhdGUo KTogY2t1Y21kLmMsIDEwIERlYyAyMDA2LgorCitCdWlsdCBPSyB3aXRoIFNTTC9UTFMuICBUZXN0 ZWQgd2l0aCB0aGUgUE9QIHNjcmlwdCwgZm91bmQgdGhhdCBJIGJyb2tlIElOUFVUCit3aGVuIGFk ZGluZyB0aGUgL0NPVU5UIGZlYXR1cmU7IHRoZXJlIHdhcyBhIHBhdGggdGhyb3VnaCB0aGUgY29k ZSB0aGF0IGNvdWxkCitsZWF2ZSB0aGUgImFueWNoYXIiIHZhcmlhYmxlIHVuc2V0IGFuZCB0aGVy ZWZvcmUgcmFuZG9tLiAgRml4ZWQgaW4KK2RvaW5wdXQoKS4gIFRoZSBQT1Agc2NyaXB0LCB3aGlj aCBkb2VzIG5vdCB1c2UgL0NPVU5ULCB3b3JrcyBhZ2FpbiBhbmQgc28KK2RvZXMgYSBuZXcgQ0dJ IHNjcmlwdCwgd2hpY2ggZG9lcyB1c2UgL0NPVU5ULiAgY2t1dXM0LmMsIDEwIERlYyAyMDA2Lgor CitTdXBwbGllZCBhIG1pc3NpbmcgY29tbWEgaW4gdGhlIGhlbHAtdGV4dCBhcnJheSBmb3IgSEVM UCBTRVQgVEVSTUlOQUwsIHdoaWNoCityZXN1bHRlZCBpbiBiYWQgZm9ybWF0dGluZyBpbiBLOTUg YXJvdW5kIFNFVCBTTkktRklSTVdBUkUtVkVSU0lPTlMuCitja3V1czIuYywgMTAgRGVjIDIwMDYu CisKK01hZGUgImhlbHAgbG9jdXMiIGEgc3lub255bSBmb3IgImhlbHAgc2V0IGxvY3VzIi4gIGNr dXVzci5bY2hdLCBja3V1czIuYywKKzExIERlYyAyMDA2LgorCitUaGlzIG1vcm5pbmcgdGhlIENv bHVtYmlhIEZUUCBzZXJ2ZXIgd2FzIG1hbGZ1bmN0aW9uaW5nIGluIGEgcGVyZmVjdCB3YXkKK2Zv ciBtZSB0byBpbXBsZW1lbnQgYW5kIHRlc3QgYW4gRlRQIHRpbWVvdXQgbWVjaGFuaXNtLiAgVGhl IHNlcnZlciB3b3VsZAorY2xvc2UgdGhlIGRhdGEgY29ubmVjdGlvbiBhZnRlciBzZW5kaW5nIHRo ZSBmaWxlLCBidXQgdGhlIGNsaWVudCBuZXZlciBzYXcKK3RoZSBjbG9zZSBhbmQgd2FzIHN0dWNr IGZvcmV2ZXIgaW4gYSByZWN2KCkuICBJIGFkZGVkIGNvZGUgdG8gZG8gYSBzZWxlY3QoKQorb24g dGhlIGRhdGEgY29ubmVjdGlvbiBwcmlvciB0byBlbnRlcmluZyB0aGUgcmVjdigpLCB3aXRoIGEg dGltZW91dCBvbiB0aGUKK3NlbGVjdCgpIHRoYXQgdGhlIHVzZXIgY2FuIGVzdGFibGlzaCB3aXRo IFNFVCBGVFAgVElNRU9VVC4gIEJ1aWx0IGFuZCB0ZXN0ZWQKK29uIFNvbGFyaXMgOSwgY2xlYXIt dGV4dCBGVFAuICBBbHNvIGJ1aWx0IGNsZWFubHkgZm9yIEZUUFMgYW5kIHRlc3RlZAorYWdhaW5z dCBhIHNlcnZlciB0aGF0IGRvZXMgbm90IGhhbmc7IEkgZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8gYW4g RlRQUyBzZXJ2ZXIKK3RoYXQgd291bGQgdGlja2xlIHRoZSB0aW1lb3V0IGNvZGUuICBja2NmdHAu YywgMTEgRGVjIDIwMDYuCisKKy0tLSBEZXYuMjQgLS0tCisKK0ZpeGVkIGEgYnVnIGluIHRoZSBJ TlBVVCAvQ09VTlQ6IHBhcnNlcjogdGhlIGFycmF5IG9mIHNlYXJjaCBzdHJpbmdzIHdhcworbmV2 ZXIgaW5pdGlhbGl6ZWQsIHdoaWNoIGRpZG4ndCBtYXR0ZXIgYmVmb3JlLCBidXQgd2l0aCAvQ09V TlQ6LCBpZiB0aGUKK2ZpcnN0IGVsZW1lbnQgd2FzIG5vdCBhIE5VTEwgcG9pbnRlciwgd2UnZCB0 cmVhdCBpdCBhcyBhIHNlYXJjaCBzdHJpbmcsIGFuZAordGhlbiBpZiBpdCBoYXBwZW5lZCB0byBt YXRjaCBzb21ldGhpbmcgaW4gdGhlIGlucHV0IHN0cmVhbSwgdGhlIG9wZXJhdGlvbgord291bGQg c3RvcCBiZWZvcmUgdGhlIGNvdW50IHdhcyBleGhhdXN0ZWQuICBGaXhlZCBieSAoYSkgaW5pdGlh bGl6aW5nIHRoZQorYXJyYXksIGFuZCAoYikgaWdub3JpbmcgYW55IHNlYXJjaCBzdHJpbmdzIGlm IC9DT1VOVDogd2FzIGdpdmVuLiAgY2t1dXNyLmMsCisxMyBEZWMgMjAwNi4KKworUmVtb3ZlZCBh IGRlYnVnKCkgc3RhdGVtZW50IGZyb20genNhdHRyKCkgdGhhdCBzdWRkZW5seSBzdGFydGVkIG1h a2luZyBzb21lCit2ZXJzaW9uIG9mIGdjYyBjb21wbGFpbiwgcmVwb3J0ZWQgYnkgR2VycnkgQmVs YW5nZXIuICBja3VmaW8uYywgMTMgRGVjIDIwMDYuCisKKy0tLSBEZXYuMjUgLS0tCisKK1NvbWUg Y2FzdHMgZm9yIHRoZSAzIGludGVyaW9yIGFyZ3Mgb2YgdGhlIG5ldyBzZWxlY3QoKSBjYWxsIGlu IGNrY2Z0cC5jCitmb3IgSFAtVVggOS4gIDE0IERlYyAyMDA2LgorCitDaGFuZ2VkIFxma2V5d29y ZHZhbHVlKCkgdG8gYWNjZXB0IGEgc3RyaW5nIHJhdGhlciB0aGFuIGEgc2luZ2xlIHdvcmQKK2Fz IGl0cyBzZWNvbmQgYXJndW1lbnQsIHNvIHRoYXQgbW9yZSB0aGFuIG9uZSBzZXBhcmF0b3IgY291 bGQgYmUgc3BlY2lmaWVkLAorYW5kIHRvIHJldHVybiAtMSBvbiBlcnJvciwgMCBpZiBpdCBmb3Vu ZCBub3RoaW5nLCAxIGlmIGdpdmVuIGEga2V5d29yZCBidXQKK25vIHZhbHVlLCBhbmQgMiBpZiB0 aGVyZSB3YXMgYSBrZXl3b3JkIGFuZCBhIHZhbHVlLiAgZG9rd3ZhbCgpOiBja3V1c1syNF0uYywK KzE0IERlYyAyMDA2LgorCitDaGVja2VkIEZUUCB0aW1lb3V0IG9uIGNvbW1hbmQgY2hhbm5lbCB3 aXRoIEZUUCBESVJFQ1RPUlkgb2YgYSBiaWcgZGlyZWN0b3J5Cit1c2luZyBhIHBhdGggaW50byBv dXIgZnRwIHNlcnZlciB0aGF0IHByZXNlcnZlcyB0aGUgaGFuZ2luZyBiZWhhdmlvci4gIFRoZQor dGltZW91dCB3YXMgYWN0dWFsbHkgd29ya2luZywgYnV0IHRoZSBmYWlsdXJlIGNvbmRpdGlvbiB3 YXNuJ3QgcHJvcGFnYXRpbmcKK2JhY2sgdG8gdGhlIHVzZXIsIGFuZCB0aGVyZSB3YXMgbm8gZXJy b3IgbWVzc2FnZS4gIEZpeGVkIGluIGRvZnRwcmVjdjIoKSBhbmQKK2ZhaWxmdHByZWN2MigpOiBj a2NmdHAuYywgMTUgRGVjIDIwMDYuCisKK0FkZGVkIHRoZSBvYnZpb3VzIHRpbWVvdXQgY2hlY2tz IGZvciBGVFAgdXBsb2FkcywgYnV0IEkgaGF2ZSBubyB3YXkgdG8gdGVzdAordGhlIGNvZGUgc2lu Y2Ugb3VyIG1pc2JlaGF2aW5nIEZUUCBzZXJ2ZXIgZG9lcyBub3QgaGFuZyB3aGVuIHJlY2Vpdmlu ZworZmlsZXMsIG9ubHkgd2hlbiBzZW5kaW5nIHRoZW0uICBCdXQgdXBsb2FkcyB3b3JrIGJvdGgg d2l0aCBhbmQgd2l0aG91dCBhCit0aW1lb3V0IHNldCwgc28gYXQgbGVhc3Qgbm8gaGFybSBpcyBk b25lLiAgY2tjZnRwLmMsIDE3IERlYyAyMDA2LgorCitXaGVuIGRvd25sb2FkaW5nIHdpdGggRklM RSBERVNUSU5BVElPTiBOT1dIRVJFICg9IC9DQUxJQlJBVEUpLCBLZXJtaXQgc3RpbGwKK2NoZWNr ZWQgdGhlIHNpemUgb2YgdGhlIGluY29taW5nIGZpbGUgYW5kIHJlZnVzZWQgaXQgaWYgdGhlcmUg d2Fzbid0IGVub3VnaAorZnJlZSBkaXNrIHNwYWNlLCBvbiBwbGF0Zm9ybXMgKHN1Y2ggYXMgVk1T KSB3aGVyZSB6Y2hrc3BhKCkpIGFjdHVhbGx5IHdvcmtzOworcmVwb3J0ZWQgYnkgQm9iIEdlemVs dGVyLiAgY2tjZm4zLmMsIDE4IERlYyAyMDA2LgorCitCdWlsdCBvbiBNYWMgT1MgWCAxMC40Ljgg YW5kIE5ldEJTRCAzLjFfUkMzLCBhbGwgT0suICAxOSBEZWMgMjAwNi4KKworLS0tIERldi4yNiAt LS0KKworQnVpbHQgb24gVk1TIDcuMy0yL0FscGhhLiAgSGFkIHRvIHNxdWVsY2ggYSBjb3VwbGUg Y29tcGlsZXIgd2FybmluZ3MgYnkKK2NoYW5naW5nIHNvbWUgaW50cyBpbiB0aGUgbmV3IFxmcGlj dHVyZWluZm8oKSBjb2RlIGZyb20gdW5zaWduZWQgdG8gc2lnbmVkLAorYW5kIGZpeCBhIHR5cG8g aW4gdGhlIHByb3RvdHlwZSBmb3IgdGhlIG5ldyBnZXR0Y3Bwb3J0KCkgZnVuY3Rpb24uCitja2Nu ZXQuaCwgY2t1dXM0LmMsIDIyIERlYyAyMDA2LgorCistLS0gRGV2LjI3IC0tLQorCitQYXJhbWV0 ZXJpemVkIHB0eSByb3V0aW5lcyBhbmQgYWxsIHJlZmVyZW5jZXMgdG8gdGhlbSBmb3IgZmlsZSBk ZXNjcmlwdG9yLAorcmF0aGVyIHRoYW4gdG8gdXNlIGdsb2JhbCB0dHlmZCwgdGh1cyBhbGxvd2lu ZyBwdHlzIHRvIGJlIGNyZWF0ZWQgZm9yCitkaWZmZXJlbnQgcHVycG9zZXMuICBUZXN0ZWQgb24g U29sYXJpcyA5IGFuZCBNYWMgT1MgWCAxMC40LjgsIHdpdGggInNldCBob3N0CisvY29ubmVjdCAv cHR5IGVtYWNzIiAoZmluZSBpbiBib3RoIGNhc2VzKSwgYW5kIChtb3JlIHRvIHRoZSBwb2ludCkg InNldCBob3N0CisvY29ubmVjdCAvcHR5IGtlcm1pdCIgLS0gaGVyZSB3ZSBtYWtlIGEgY29ubmVj dGlvbiBmcm9tIG9uZSBLZXJtaXQgcHJvY2VzcwordG8gYW5vdGhlciBhbmQgdHJhbnNmZXIgYSBm aWxlOyB3b3JrcyBmaW5lIGFuZCB3YXNuJ3QgZXNwZWNpYWxseSBzbG93IGVpdGhlcjsKK2EgZ29v ZCBzaWduLiAgY2tjZGViLmgsIGNrdXRpby5jLCBja3VwdHkuYywgMjIgRGVjIDIwMDYuCisKK0Ny ZWF0ZWQgYSBuZXcgdmVyc2lvbiBvZiB0dHJ1bmNtZCgpIGNhbGxlZCB0dHlwdHljbWQoKSwgd2hp Y2ggd29ya3MgYnkKK2NhbGxpbmcgZG9fcHR5KCkgdG8gZ2V0IGEgcHR5IHRvIHJ1biB0aGUgY29t bWFuZCBvbiwgYW5kIHRoZW4gaW4gYSBsb29wLAorcmVhZHMgZnJvbSB0aGUgcHR5IGFuZCB3cml0 ZXMgdG8gdGhlIG5ldCBhbmQgcmVhZHMgZnJvbSB0aGUgbmV0IGFuZCB3cml0ZXMKK3RvIHRoZSBw dHksIHVzaW5nIHNlbGVjdCgpIHRvIHdoaWNoIG9mIHRob3NlIGl0IHNob3VsZCBkbyBvbiBlYWNo IHBhc3MuCitGaXJzdCBjdXQganVzdCB1c2VzIHNpbmdsZS1ieXRlIHJlYWRzIGFuZCB3cml0ZXMu ICBUZXN0ZWQgdXNpbmcgS2VybWl0CitpdHNlbGYgYXMgYW4gZXh0ZXJuYWwgcHJvdG9jb2wuICBX b3JrcyBidXQgc2xvd2x5OiA2MDAwY3BzLiAgWm1vZGVtIGRvZXNuJ3QKK3dvcmsgYXQgYWxsLiAg Y2t1dGlvLmMsIDI0IERlYyAyMDA2LgorCitDaGFuZ2VkIHNpbmdsZS1jaGFyYWN0ZXIgcmVhZCgp IGFuZCB3cml0ZSgpIHRvIGJ1ZmZlcmVkIHJlYWRzIGFuZCB3cml0ZXMsCit3aXRoIHR0eGluKCkg YW5kIHR0b2woKSB1c2VkIGZvciBuZXR3b3JrIGkvby4gIFVzaW5nIEtlcm1pdCBhcyB0aGUgZXh0 ZXJuYWwKK3Byb3RvY29sLCB0aGlzIGdpdmVzIDQ1MEtjcHMgKGFib3V0IDEvMyBub3JtYWwgb24g dGhpcyBjb25uZWN0aW9uKS4gIAorCitCdXQgbm93IHRoZXJlJ3MgYSBwcm9ibGVtOiB0aGUgbG9v cCBkb2Vzbid0IGtub3cgd2hlbiB0byBzdG9wLiAgSG93IGRvZXMgaXQKK2tub3cgd2hlbiB0aGUg cHJvY2VzcyB0aGF0IGlzIHJ1bm5pbmcgb24gdGhlIHB0eSBoYXMgZXhpdGVkPyAgV2l0aCBzaW5n bGUKK2NoYXJhY3RlciByZWFkKCkncyB0aGF0IGFyZSBleGVjdXRlZCB1bmNvbmRpdGlvbmFsbHkg d2hlbiBzZWxlY3QoKSBzYXlzIHRoZQorcHR5IGhhcyBkYXRhIHdhaXRpbmcsIGFzIGluIHRoZSBm aXJzdCBwYXNzLCBJIGdldCBFSU8gaWYgdGhlcmUgYWN0dWFsbHkKK2lzbid0IGFueSwgYW5kIGNh biBleGl0IHRoZSBsb29wLiAgQnV0IG5vdywgdG8gYXZvaWQgYmxvY2tpbmcsIEkgY2FsbAoraW5f Y2hrKCkgdG8gc2VlIGhvdyBtdWNoIGRhdGEgaXMgd2FpdGluZywgYW5kIEkgZG9uJ3QgdHJ5IHRv IHJlYWQgYW55dGhpbmcKK2lmIGl0IHNheXMgbm90aGluZyBpcyB3YWl0aW5nLiAgSWYgdGhlIHBy b2Nlc3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBwdHkgZmlsZQorZGVzY3JpcHRvciBoYXMgdGVybWlu YXRlZCwgaW5fY2hrKCkgd291bGQgcHJlc3VtYWJseSBnZXQgc29tZSBraW5kIG9mIGVycm9yLAor YnV0IGl0IGRvZXNuJ3QuICBJIGNoYW5nZWQgZG9fcHR5IHRvIHJldHVybiB0aGUgcGlkIG9mIHRo ZSBmb3JrIHdoZXJlIGl0CitleGVjcyBpdHMgY29tbWFuZCBzbyB3ZSBjYW4gY2hlY2sgdGhlIHBp ZCB3aXRoIGtpbGwocGlkLDApIHdoZW4gaW5fY2hrKCkgb2YKK3RoZSBwdHkgc2F5cyAwLCBidXQg dGhpcyBkb2Vzbid0IGhlbHAgZWl0aGVyOyBpdCBzZWVtcyBsaWtlIHRoZSBwcm9jZXNzIGlzCitu b3QgZXhpdGluZywgYnV0IG9mIGNvdXJzZSBpdCBpcy4KKworSSBjb3VsZCBub3QgZmluZCBhbnkg bGVnaXRpbWF0ZSB3YXkgdG8gdGVzdCB3aGVuIHRoZSBwdHkgZm9yayB0ZXJtaW5hdGVkLgorU2Vs ZWN0KCkgYWx3YXlzIHNheXMgdGhlIHB0eSBmaWxlIGRlc2NyaXB0b3Igd2FzIHJlYWR5LCBubyBt YXR0ZXIgd2hhdC4KK1NlbGVjdCgpIG5ldmVyIHJlcG9ydHMgYW4gZXhjZXB0aW9uIG9uIHRoZSBw dHkgZmlsZSBkZXNjcmlwdG9yOworaW5fY2hrKHB0eWZkKSByZXR1cm5zIDAgYW5kIG5vdCBhbiBl cnJvci4gIHJlYWQocHR5ZmQsLi4uKSBnZXRzIDAgYnV0IG5vdCBhbgorZXJyb3IuICBmY250bChw dHlmZCwuLi4pIGRvZXNuJ3QgZ2V0IGFuIGVycm9yLiAgRmluYWxseSBJIHRyaWVkCit3cml0ZShw dHlmZCxjLDApIGFuZCB0aGlzIGluZGVlZCBnZXRzIEVJTyAoaS9vIGVycm9yKS4gIFdpdGggdGhp cywgdXNpbmcKK0tlcm1pdCBhcyB0aGUgZXh0ZXJuYWwgcHJvdG9jb2wgd29ya3MgZmluZSBpbiBT b2xhcmlzIGJ1dCBJIHRlbmQgdG8gdGhpbmsKK3RoaXMgdHJpY2sgd2lsbCBub3QgYmUgdmVyeSBw b3J0YWJsZSAoaXQgaXNuJ3QpLiAgMjQgRGVjIDIwMDYuCisKK01hZGUgdHRwdHljbWQoKSB1c2Ug YSBtb3JlIGludGVsbGlnZW50IGJ1ZmZlcmluZyBzY2hlbWUsIGZpeGVkIGEgZmV3IHRoaW5ncwor YWJvdXQgaG93IEkgd2FzIHNldHRpbmcgdXAgdGhlIHNlbGVjdCgpIGNhbGwgdGhhdCBzaG91bGQg YWRkcmVzcyBzb21lIG9mCit5ZXN0ZXJkYXkncyBwcm9ibGVtcy4gIFN0aWxsIGRvZXNuJ3Qgd29y ayBidXQgaXQncyBwcm9ncmVzcy4gIEE6IDI1IERlYyAyMDA2LgorCitEZWJ1Z2dpbmcgeWVzdGVy ZGF5J3MgY29kZS4uLiAgU3RpbGwsIHRoZSBlcnJvciBjb25kaXRpb25zIGFyZSBuZXZlciBzZXQs Cit3ZSBuZXZlciBkZXRlY3Qgd2hlbiB0aGUgcHR5IGNsb3Nlcy4gIEluIFNvbGFyaXMsIGlmIHNl bGVjdCgpIHNheXMgcHR5ZmQgaXMKK3JlYWR5IHRvIHJlYWQgYnV0IGluX2NoaygpIHNheXMgdGhl cmUgYXJlIG5vIGNoYXJhY3RlcnMgdGhlcmUsIHdlIGNhbiB0cmVhdAordGhpcyBhcyBhIGxvb3At ZXhpdCBjb25kaXRpb24uICBCdXQgaW4gTmV0QlNELCBpbl9jaGsoKSBhbHdheXMgc2F5cyAwIHdo ZW4KK3VzZWQgb24gYSBwdHkgKGJ1dCB3b3JrcyBPSyBvbiBhIHNlcmlhbCBvciBuZXQgY29ubmVj dGlvbikuCisKK1JlYWxpemVkIEkgY291bGQgbm90IHVzZSBpbl9jaGsoKSBvbiB0aGUgcHR5IGJl Y2F1c2UgdGhlcmUgaXMgdG9vIG11Y2gKK2JhZ2dhZ2Ugd2l0aCB0aGUgY29tbXVuaWNhdGlvbiBw YXRoIC0tIG15cmVhZCgpLCBldGMgZXRjKSAtLSBzbyBJIHJlcGxhY2VkCit0aGlzIHdpdGggYSBz aW1wbGUgaW9jdGwocHR5ZmQsRklPTlJFQUQsJm4pLiAgVGhpcyB3b3JrcyBmaW5lIGluIFNvbGFy aXMgYnV0CithbHdheXMgcmV0dXJucyAwIGluIE5ldEJTRCwgZGVzcGl0ZSB3aGF0IHRoZSBtYW4g cGFnZSBzYXlzIChpLmUuIHRoYXQgdGhpcworZnVuY3Rpb24gY2FuIGJlIHVzZWQgb24gYW55IGZp bGUgZGVzY3JpcHRvcikuCisKK09LLCBsZXQncyBzZWUuLi4uIHNlbGVjdCgpIGRvZXMgbm90IHJl dHVybiB1c2VmdWwgcmVzdWx0cy4gIEl0IHNheXMKK2NoYXJhY3RlcnMgYXJlIHdhaXRpbmcgb24g cHR5ZmQgd2hlbiB0aGV5IGFyZSBub3QsIGFuZCBpdCBuZXZlciBkZXRlY3RzIHRoZQorY2xvc3Vy ZSBvZiB0aGUgcHR5Li4uLi4gIFdlbGwgb2YgY291cnNlIG5vdCwgYmVjYXVzZSB3ZSBhcmUgdGhl IG9uZXMgd2hvCitoYXZlIHRvIGNsb3NlIGl0LiAgSnVzdCBiZWNhdXNlIHRoZSBwcm9jZXNzIGhh cyBzdG9wcGVkIGRvZXNuJ3QgbWVhbiB0aGUgcHR5CitpcyBjbG9zZWQuICBTbyB3ZSdyZSBiYWNr IHRvIHNxdWFyZSBvbmUsIGhvdyBkbyB3ZSBrbm93IHdoZW4gdG8gY2xvc2UgaXQ/Citja3VwdHku YyBzZWVtcyB0byBrZWVwIHRoZSBwcm9jZXNzIElEIGluIGEgZ2xvYmFsIHZhcmlhYmxlLCBwdHlf Zm9ya19waWQKKyh3aGljaCBpcyBub3QgdGhlIHNhbWUgYXMgdGhlIHBpZCBub3cgcmV0dXJuZWQg YnkgZG9fcHR5KCksIHdoaWNoIGlzCit1c2VsZXNzLCBidXQgSSBkb24ndCB1bmRlcnN0YW5kIHdo eSkuICBCdXQgaXQgZG9lc24ndCBtYXR0ZXIgYmVjYXVzZSB3aGVuIHdlCitraWxsKHB0eV9mb3Jr X3BpZCwwKSwgd2Ugc3RpbGwgZ2V0IG5vIGVycm9yIG9mIGFueSBraW5kLCBldmVuIGFmdGVyIHdl IGtub3cKK3RoZSBwcm9jZXNzIGhhcyBleGl0ZWQuICBJIGFtIGNvbXBsZXRlbHkgZmx1bW1veGVk LiAgc2VsZWN0KCkgbGllcywgYW5kIGV2ZW4KK2lmIGl0IGRpZG4ndCwgdGhlcmUgaXMgc2ltcGx5 IG5vIGNvbXBsZXRpb24gY3JpdGVyaW9uLiAgSW4gdGhlIGxvb3AsCitzZWxlY3QoKSBhbHdheXMg c2F5cyB0aGF0IHRoZSBwdHkgaXMgcmVhZHkgdG8gcmVhZC4gIFRvIGJlIGNvbnRpbnVlZC4KKzI2 IERlYyAyMDA2LgorCitCYWNrIHRvIFNxdWFyZSBPbmUsIHNpbmdsZS1ieXRlIHJlYWRzIGFuZCB3 cml0ZXMuCisKKyAuIFRoaXMgd29ya3MgZm9yIGJvdGggcmlwcGxlIGFuZCBLZXJtaXQuCisgLiBE b2Vzbid0IHdvcmsgZm9yIFptb2RlbSBidXQgd2UnbGwgZGVhbCB3aXRoIHRoYXQgbGF0ZXIuCisg LiBJbiB0aGlzIGNhc2UgRkRfSVNTRVQocHR5ZmQpIGlzIHN0aWxsIHRydWUgYWZ0ZXIgcHR5IGNs b3Nlcy4KKworQnV0IHRoZSBlbnN1aW5nIHJlYWQoKSBnZXRzIEVJTyBzbyB3ZSBrbm93IHRoZSBw dHkgaXMgZ29uZS4gIFRoYXQgbWVhbnMgdGhlCitzYW1lIHRoaW5nIHNob3VsZCBoYXBwZW4gaW4g dGhlIGJ1ZmZlcmVkIHZlcnNpb24sIG5vPyAgWWVzOyBJIHdlbnQgYmFjayB0bwordGhlIGJ1ZmZl cmVkIHZlcnNpb24gYW5kIHJlcGxhY2VkIGFsbCB0aGUgb3RoZXIgbm9ud29ya2luZyB0ZXN0cyBi eSBhCitibG9ja2luZyByZWFkIG9mIDEgYnl0ZSBvbiB0aGUgcHR5IGFuZCB0aGlzIGRldGVjdHMg dGhlIHRlcm1pbmF0aW9uLiAgTm93OgorCisgLiByaXBwbGUgd29ya3MgcGVyZmVjdGx5IChvZiBj b3Vyc2UgaXQncyBvbmx5IG9uZS13YXkpLgorIC4gS2VybWl0IGZhaWxzCisKK0xldCdzIGNhbGwg dGhlIHJlbW90ZSwgZm9ya2VkLCByZWRpcmVjdGVkLCBleHRlcm5hbCBLZXJtaXQgQSBhbmQgaXRz Citsb2NhbCBwYXJ0bmVyIEIuICBBIHNlbmRzIGl0cyBTLXBhY2tldCwgQiByZWNlaXZlcyBpdCBP SyBhbmQgQWNrcy4KK0EgYXBwYXJlbnRseSBkb2VzIG5vdCByZWNlaXZlIHRoZSBBQ0sgaW4gdGlt ZSwgc28gc2VuZHMgdGhlIFMgYWdhaW4sIGJ1dCBPSy4KK2ZvbGxvd2VkIGltbWVkaWF0ZWx5IGJ5 IHRoZSBGLiAgQiBBY2tzIHRoZSBGLiAgQSBzZW5kcyB0aGUgQSwgQiBBY2tzIGl0LgorQnV0IG5v dyBBIHNlbmRzIGEgcGllY2Ugb2YgdGhlIHByZXZpb3VzIEYgcGFja2V0IGFuZCB0aGUgdGhlIGZp cnN0IHBpZWNlCitvZiBhIEQgcGFja2V0LgorCitDbGVhcmx5IHRoZSBidWZmZXJpbmcgaXMgbWVz c2VkIHVwLiAgU3VyZSBlbm91Z2gsIHRoZXJlIHdhcyBhbiBleHRyYW5lb3VzCitzdGF0ZW1lbnQg aW5jcmVtZW50aW5nIGEgcmVhZCBwb2ludGVyIGluIGEgd3JpdGUgc2VjdGlvbi4gIFJlbW92aW5n IHRoYXQKK2NsZWFyZWQgdXAgdGhlIHByb2JsZW1zIHdpdGggS2VybWl0LCBub3cgd2UgY2FuIHNl bmQgYW5kIHJlY2VpdmUgc3Vic3RhbnRpYWwKK2ZpbGVzIGVmZmljaWVudGx5IGluIHJlbW90ZSBt b2RlLiAgWm1vZGVtIHNlZW1zIHRvIHdvcmsgdG9vLCBleGNlcHQgdGhhdCBhdAordGhlIGJlZ2lu bmluZyBhIGJ1bmNoIG9mICIqKkIwODAwMDAwMDAwMDIyZCIncyBhcmUgc3R1ZmZlZCBpbnRvIEtl cm1pdCdzCitjb21tYW5kIGJ1ZmZlciwgc28gYWZ0ZXIgdGhlIHRyYW5zZmVyIHdlIGdldCBzb21l IGVycm9yIG1lc3NhZ2VzLgorCitJbiBsb2NhbCBtb2RlLCBvdmVyIGEgVGVsbmV0IGNvbm5lY3Rp b24sIEtlcm1pdCB3b3JrcyBmaW5lLiAgWm1vZGVtIHdvcmtzCitPSyB0b28gZXhjZXB0IGl0IGRv ZXNuJ3QgZmluaXNoIHJpZ2h0LCBzbyBhdCB0aGUgdmVyeSBlbmQgcnogb24gdGhlIGZhciBlbmQK K2lzIHN0aWxsIHdhaXRpbmcgZm9yIHNvbWV0aGluZzsgaWYgSSBjYW5jZWwgb3V0IG9mIGl0IHdp dGggXlheWF5YXlheWCwgaXQKK2RlbGV0ZXMgdGhlIGZpbGUuICBTbyB0aGVyZSBzdGlsbCBpcyBz b21ldGhpbmcgd3Jvbmcgd2l0aCB0aGUgdGVybWluYXRpb24KK3Rlc3QuCisKK0Fsc28geW91IGRv bid0IHNlZSBhbnl0aGluZyBvbiB5b3VyIHNjcmVlbiB3aGVuIHJ1bm5pbmcgS2VybWl0IG9yIFpt b2RlbQordGhpcyB3YXkuICBUaGF0J3MgdG8gYmUgZXhwZWN0ZWQsIHNpbmNlIHRoZXkgYXJlIHVz aW5nIHN0ZGlvIGZvciB0aGUKK3RyYW5zZmVyLCBzbyB0aGV5IGNhbid0IGFsc28gYmUgZGlzcGxh eWluZyBwcm9ncmVzcyBvciBvdGhlciBtZXNzYWdlcy4KKworQnVpbHQgdGhpcyBvbiBOZXRCU0Qg YWdhaW4uLi4gIFNlZW1zIHRvIHdvcmsgdGhpcyB0aW1lLCBidXQgaGFzIHRyb3VibGUKK2Zpbmlz aGluZywgbGlrZSBabW9kZW0uICBIbW1tLCBvbiBjbG9zZXIgZXhhbWluYXRpb24sIGl0IHR1cm5z IG91dCB0aGF0CitzaW5jZSBpbl9jaGsoKSBhbHdheXMgcmV0dXJucyAwIG9uIHRoZSBwdHlmZCwg d2UgZmFsbCBpbnRvIG91ciBuZXcKK3NpbmdsZS1ieXRlIHJlYWQgY29kZSwgc28gaXQncyByZWFs bHkgc2xvdywgbGlrZSAxMEsgY3BzIG9uIGEgY29ubmVjdGlvbgord2hlcmUgMU0gaXMgdGhlIG5v cm0uICAyNyBEZWMgMjAwNi4KKworU3dpdGNoZWQgdGhlIHB0eSBmcm9tIGJ1ZmZlciBwZWVraW5n IChGSU9OUkVBRCkgYW5kIGJsb2NraW5nIHJlYWRzIHRvIHRvCitub25ibG9ja2luZyByZWFkcyAo T19OT05CTE9DSyAvIE9fTkRFTEFZKS4gIFdvcmtzIGp1c3QgZmluZSBvbiBOZXRCU0QgZXhjZXB0 Citub3cgd2Ugbm8gbG9uZ2VyIGdldCBFSU8gYXQgdGhlIGVuZCB3aGVuIHRyeWluZyB0byByZWFk IGZyb20gdGhlIHB0eSBwcm9jZXNzCit0aGF0IGhhcyBleGl0ZWQuICBJbiBmYWN0LCB3ZSdyZSBi YWNrIHRvIHNxdWFyZSBvbmUgYWdhaW4uICBub3QgaW9jdGwoKSwgbm90CitmY250bCgpLCBub3Qg c2VsZWN0KCksIG5vdCBldmVuIHJlYWQoKSBnZXRzIGFuIGkvbyBlcnJvciBhZnRlciB0aGUgcHR5 Citwcm9jZXNzIGV4aXRzLiAgQnV0IGluIE5ldEJTRCwgd2UgaGF2ZSB0byB1c2Ugbm9uYmxvY2tp bmcgcmVhZHMgYmVjYXVzZSAuLi4KK0htbW1tLCBtYXliZSBzd2l0Y2ggdGhlIGZkIGJldHdlZW4g YmxvY2tpbmcgYW5kIG5vbmJsb2NraW5nIGZvciB0aGUgdGVzdC4uLgorTm9wZSwgTmV0QlNEIHNl ZW1zIHRvIGJlIGhvcGVsZXNzIChsYXRlciwgRWQgUmF2aW4gY29uZmlybWVkIHRoYXQgc2ltaWxh cgorcHJvYmxlbXMgaGF2ZSBiZWVuIG9ic2VydmVkIHdpdGggb3RoZXIgYXBwbGljYXRpb25zIHRo YXQgdHJ5IHRvIGRvIHRoaXMpLgorCitTd2l0Y2hpbmcgdG8gTGludXgsIEkgc2VlIHRoYXQgeWVz dGVyZGF5J3MgU29sYXJpcyBjb2RlIChibG9ja2luZyByZWFkcykKK3dvcmtzIGV4YWN0bHkgdGhl IHNhbWUgd2F5IG9uIExpbnV4LgorCitUcmllZCB0b2RheSdzIE9fTkRFTEFZIG1ldGhvZCBvbiBT b2xhcmlzLiAgSXQgd29ya3MgcGVyZmVjdGx5LiAgQW5kIHRoZW4gSQorbW92ZWQgdGhpcyBvbmUg dG8gTGludXggYW5kIGl0IHdvcmtzIHBlcmZlY3RseSB0aGVyZSB0b28uICBFeGNlcHQgaW4gYm90 aAorY2FzZXMgd2UgaGF2ZSB0aGUgd2VpcmQgdGhpbmcgd2l0aCBabW9kZW0gYXQgdGhlIGVuZCwg YnV0IEkgdGhpbmsgdGhhdCdzCitiZWNhdXNlIHJ6L3N6IGRvbid0IHVzZSBzdGFuZGFyZCBpL28u ICBPbiBOZXRCU0QsIGl0IHN0aWxsIGhhbmdzIGF0IHRoZSBlbmQuCisKK1R1cm5zIG91dCB0aGF0 IHRlc3RpbmcgdGhlIHBpZCB3b3JrcyBpbiBOZXRCU0QsIGV2ZW4gdGhvdWdoIGl0IGRpZG4ndCBp bgorU29sYXJpcy4gIFR1cm5zIG91dCByZWFkKCkgZ2V0cyBhbiBpL28gZXJyb3IgaW4gU29sYXJp cyBhbmQgTGludXggYnV0IG5vdAoraW4gTmV0QlNELiAgU28gY2hlY2tpbmcgdGhlIHJlYWQgcmVz dWx0IGZpcnN0LCBhbmQgdGhlbiBjaGVja2luZyB0aGUgcGlkCitpZiByZWFkKCkgZ290IHplcm8g Ynl0ZXMgY2F0Y2hlcyBhbGwgdGhyZWUuICAyOCBEZWMgMjAwNi4KKworTm93IHRoZSBxdWVzdGlv biBvZiByZXR1cm4gY29kZS4gIEluIHRoZSBvcmlnaW5hbCB0dHJ1bmNtZCgpIGZ1bmN0aW9uLCB3 ZSBkbworYSBmb3JrKCkgYW5kIGEgd2FpdCgpLiAgV2hlbiB0aGUgZXh0ZXJuYWwgcHJvdG9jb2wg cHJvZ3JhbSBmaW5pc2hlcywgd2FpdCgpCitnaXZlcyB1cyBpdHMgcmV0dXJuIGNvZGUgYW5kIHdl IGNhbiBwYXNzIGl0IG9uIHRocm91Z2ggXHYocGV4aXRzdGF0KSBhcyB3ZWxsCit0dHJ1bmNtZCdz IG93biByZXR1cm4gY29kZS4gIEJ1dCB0dHB0eWNtZCgpIGhhcyB0byBpbnRlcmFjdCB3aXRoIHRo ZSBwdHkKK2NvbnRpbnVvdXNseSwgc28gaXQgY2FuJ3QganVzdCBzaXQgYmFjayBhbmQgd2FpdCgp IGZvciBpdC4gIEluc3RlYWQgd2UgaGF2ZQordG8gZGV0ZWN0IHdoZW4gdGhlIHByb2Nlc3MgaGFz IGV4aXRlZCBhbmQgdGhlbiBjYWxsIHdhaXRwaWQoKSBvbiB0aGUgZm9yaworcGlkLCBiZWZvcmUg c2h1dHRpbmcgZG93biB0aGUgcHR5LiAgVGVzdGVkIG9uIFNvbGFyaXMgdXNpbmcgS2VybWl0IGFz IHRoZQorZXh0ZXJuYWwgcHJvdG9jb2wgYW5kIHRoZW4gaW5kdWNpbmcgZmFpbHVyZSwgb3IgbGV0 dGluZyBpdCBydW4gdG8KK2NvbXBsZXRpb24uICBGQUlMVVJFIGFuZCBTVUNDRVNTIHNldCBhcHBy b3ByaWF0ZWx5IGluIGVhY2ggY2FzZS4gIFRlc3RlZAord2l0aCBabW9kZW0gdG9vLCB3b3JrcyBP SyBleGNlcHQgZm9yIHRoZSBhZm9yZW1lbnRpb25lZCBjb3NtZXRpYyBnbGl0Y2ggYXQKK3RoZSBl bmQuICBUZXN0ZWQgb24gTmV0QlNELCBhbGwgT0suCisKK1RvIG1ha2UgSzUgY29ubmVjdGlvbiB0 byBQYW5peCBmcm9tIFNwYW06CisKKyBzZXQgdGVsbmV0IGRlYnVnIG9uCisgYXV0aGVudGljYXRl IEs1IGluaXQgL3JlYWxtOlBBTklYLkNPTSAvcGFzc3dvcmQ6eHh4eHgKKyBzZXQgaG9zdCBzaGVs bC5wYW5peC5jb20gMjMgL2s1bG9naW4KKworR29vZC4uLiAgTm93IEkgdHJ5IHRvIHNlbmQgYSBm aWxlIGZyb20gU3BhbSB0byBQYW5peCBvdmVyIHRoZSBLNSBjb25uZWN0aW9uCit1c2luZyBLZXJt aXQgaXRzZWxmIGFzIHRoZSBleHRlcm5hbCBwcm90b2NvbC4gIEl0IGZhaWxzLiAgSW5zcGVjdGlv biBvZiB0aGUKK2RlYnVnIGxvZyBvbiB0aGUgZmFyIHNpZGUgc2hvd3MgdGhhdCB0aGUgUy1QYWNr ZXQgd2FzIHJlY2VpdmVkIGNvcnJlY3RseSwKK2dvb2QhICBUaGlzIG1lYW5zIHdlIGFyZSByZWFk aW5nIHRoZSBjbGVhci10ZXh0IFMtUGFja2V0IGZyb20gdGhlIGV4dGVybmFsCitLZXJtaXQgcHJv Z3JhbSwgYW5kIHRoYXQgdHRvbCgpIGlzIGVuY3J5cHRpbmcgYXBwcm9wcmlhdGVseS4KKworVGhl IHJlbW90ZSBLZXJtaXQgc2VuZHMgdGhlIEFjayBhbmQgZ29lcyB0byByZWFkIHRoZSBuZXh0IHBh Y2tldDogdHRpbmwoKQorY2FsbHMgbXlmaWxsYnVmKCkgYW5kOgorCisgIFNWT1JQT1NJWCBteWZp bGxidWYgY2FsbGluZyByZWFkKCkKKyAgU1ZPUlBPU0lYIG15ZmlsbGJ1Zj0wICAgICAgICAgICAg ICAgIDwtLSByZWFkIHJldHVybnMgMAorICBTVk9SUE9TSVggbXlmaWxsYnVmIHR0Y2Fycj0yCisg IFNWT1JQT1NJWCBteWZpbGxidWYgZXJybm89MCAgICAgICAgICA8LS0gYW5kIHJlcG9ydHMgbm8g ZXJyb3IKKyAgSEVYRFVNUDogbXlnZXRidWYgcmVhZCAoLTMgYnl0ZXMpCisgIG15Z2V0YnVmIGVy cm5vPTAKKyAgdHRpbmwgbXlyZWFkIGZhaWx1cmUsIG49LTMKKyAgdHRpbmwgbXlyZWFkIGVycm5v PTAKKyAgdHRpbmwgbm9uLUVJTlRSIC0zW2Nsb3NpbmddCisKK1RoaXMgaGFwcGVucyBiZWNhdXNl IG15ZmlsbGJ1ZigpIGRlbGliZXJhdGVseSByZXR1cm5zIC0zIHdoZW4gcmVhZCgpIGdldHMgMAor Ynl0ZXMuICBJIGRvbid0IHVuZGVyc3RhbmQgd2h5IHRoaXMgaGFwcGVucyBidXQgdGhlIHJlYWwg cHJvYmxlbSBpcyB5ZXQgdG8KK2NvbWUuICBUaGUgbG9jYWwgS2VybWl0ICh0aGUgb25lIHRoYXQg aGFzIG1hZGUgdGhlIHNlY3VyZSBjb25uZWN0aW9uIGFuZCBpcworcnVubmluZyB0aGUgZXh0ZXJu YWwgcHJvdG9jb2wgdGhyb3VnaCB0dHB0eWNtZCgpKSBldmVudHVhbGx5IGZpZ3VyZXMgb3V0Cit0 aGF0IHRoZSB0cmFuc2ZlciBmYWlsZWQgYW5kIHdoZW4gd2UgcmVjb25uZWN0LCB3ZSBnZXQgdG90 YWwgZ2FyYmFnZSAtLSB0aGUKK2VuY3J5cHRpb24gZWl0aGVyIHN0b3BwZWQgaGFwcGVuaW5nLCBv ciBnb3Qgb3V0IG9mIHN5bmMuCisKK0xvb2tpbmcgYXQgdGhlIGxvY2FsIGRlYnVnIGxvZywgdHRv bCgpIGlzIGRvaW5nIGl0cyBqb2IsIGNvbnZlcnRpbmcgdGhlCitpbml0aWFsICJrZXJtaXQgLXJc MTMiIGZyb20gcGxhaW50ZXh0IHRvIGN5cGhlcnRleHQsIGFzIHNob3duIGJ5IHRoZQoraGV4ZHVt cHMuICBUaGVuIGl0IGVudGVycyB0dHB0eWNtZCgpLi4uICBIbW1tbSwgd2FpdCwgaG93IGNhbiBp dCBzZW5kIHRoZQorImtlcm1pdCAtciIgYmVmb3JlIGl0IHN0YXJ0cyB0aGUgZXh0ZXJuYWwgcHJv dG9jb2w/ICBOZXZlciBtaW5kLCB3b3JyeSBhYm91dAordGhhdCBsYXRlci4uLiAgQW55d2F5LCB0 dHB0eWNtZCgpIHNheXM6CisKKyAgdHRwdHljbWQgbG9vcCB0b3AgaGF2ZV9wdHk9MQorICB0dHB0 eWNtZCBsb29wIHRvcCBoYXZlX25ldD0xCisgIHR0cHR5Y21kIEZEX1NFVCBwdHlmZCBpbgorICB0 dHB0eWNtZCBGRF9TRVQgdHR5ZmQgaW4KKyAgdHRwdHljbWQgbmZkcz01CisgIHR0cHR5Y21kIHNl bGVjdD0xCisgIHR0cHR5Y21kIEZEX0lTU0VUIHR0eWZkIGluCisgIC4uLgorICB0dHB0eWNtZCBp bl9jaGsodHR5ZmQpIG49MTEKKyAgdHRwdHljbWQgdHR4aW4gbj0xMQorCit0dHhpbigpIGFza3Mg Zm9yIDExIGJ5dGVzLCBteWZpbGxidWYoKSBnZXRzIDExIGJ5dGVzLCBhbmQgaGV4ZHVtcCgpIHNo b3dzCit0aGUgY3lwaGVydGV4dCwgdGhlcmUgZG9lc24ndCBzZWVtIHRvIGJlIGFueSBkZWNyeXB0 aW5nIGdvaW5nIG9uLiAgSG1tbSwgaXQKK2xvb2tzIGxpa2UgdGhlIHJlZ3VsYXIgY29kZSBjYWxs cyB0dGluYygpIGluIGEgbG9vcCwgcmF0aGVyIHRoYW4gdHR4aW4oKS4KK01heWJlIHR0eGluKCkg ZG9lc24ndCBoYXZlIGRlY3J5cHRpb24gaG9va3MuICBObywgdGhhdCdzIG5vdCBpdCwgdGhlIGNv ZGUgaXMKK3RoZXJlLCBidXQgdGhlIEtlcm1pdCBwYWNrZXQgcmVhZGVyIGRvZXMgbm90IHVzZSB0 dHhpbigpLCBpdCB1c2VzIHR0aW5sKCkuCitCdXQgb2YgY291cnNlIHdlIGNhbid0IHVzZSB0aGF0 IGZvciBleHRlcm5hbCBwcm90b2NvbHMgYmVjYXVzZSBpdCdzIGRlc2lnbmVkCitvbmx5IHRvIHJl YWQgS2VybWl0IHBhY2tldHMuICBTdWJzdGl0dXRpbmcgYSBsb29wIG9mIHR0aW5jKClzIGZvciB0 aGUgdHR4aW4oKQorY2FsbCBmaXhlcyB0aGluZ3MgKGFuZCBzdHJhbmdlbHkgZW5vdWdoLCBpdCBz ZWVtcyB0byBiZSBmYXN0ZXIpLiAgQW5kIG5vdyB3ZQoraGF2ZSBvdXIgZmlyc3QgZXh0ZXJuYWwg cHJvdG9jb2wgdHJhbnNmZXIgb3ZlciBhIHNlY3VyZSBjb25uZWN0aW9uIChleHRlcm5hbAorS2Vy bWl0IHByb2dyYW0sIExpbnV4IG92ZXIgS2VyYmVyb3MgNSB0byBOZXRCU0QpLiAgWm1vZGVtIHdv cmtlZCB0b28gZm9yIGEKK3Nob3J0IGZpbGUgYnV0ICJzb21ldGhpbmcgaGFwcGVucyIgd2l0aCBs b25nZXIgb25lcy4gIDI5IERlYyAyMDA2LgorCitOZXcgbWFrZWZpbGUgdGFyZ2V0IGZvciBMaW51 eCB3aXRoIEtlcmJlcm9zIDUsIGxpbnV4K2tyYjUsIHRoYXQgZG9lc24ndAoraW5jbHVkZSBhbnl0 aGluZyBleHRyYSBmcm9tIFNTTCBvciBvdGhlciBzZWN1cml0eSBtZXRob2RzIChidXQgYXBwYXJl bnRseSBpdAoraXMgc3RpbGwgbmVjZXNzYXJ5IHRvIGluY2x1ZGUgLURPUEVOU1NMXzA5NyBpbiBv cmRlciB0byBnZXQgdGhlIHJpZ2h0IG5hbWVzCitmb3IgdGhlIERFUyByb3V0aW5lcz8pLiAgRGl0 dG8gbmV0YnNkK2tyYjUgZm9yIE5ldEJTRCwgZXhjZXB0IGluIHRoaXMgY2FzZQorLURPUEVOU1NM XzA5NyBpcyBub3QgbmVjZXNzYXJ5LiAgbWFrZWZpbGUsIDMwIERlYyAyMDA2LgorCitOb3RlIHRv IG15c2VsZjogT24gUGFuaXg6CisKKyAgZXhwb3J0IExEX0xJQlJBUllfUEFUSD0vdXNyL2xvY2Fs L2tlcmJsaWIKKyAgbWFrZSBuZXRic2Qra3JiNSAiSzVMSUI9LUwvdXNyL2xvY2FsL2tlcmJsaWIi ICJLNUlOQz0tSS91c3IvbG9jYWwvaW5jbHVkZSIKKworQ2FuJ3QgdGVsbmV0LWs1IGZyb20gbmV3 bHkgYnVpbHQgS2VybWl0IG9uIE5ldEJTRDsgcGFydHdheSB0aHJvdWdoIHRoZQorbmVnb3RpYXRp b25zLCBqdXN0IGFmdGVyICJURUxORVQgUkNWRCBTQiBFTkNSWVBUSU9OIFNVUFBPUlQgREVTX0NG QjY0CitERVNfT0ZCNjQgSUFDIFNFIiBpdCBkdW1wcyBjb3JlLiAgVGhlIGxhc3QgdHdvIGxpbmVz IGluIGRlYnVnLmxvZyBhZnRlcgordGhpcyBhcmU6CisKKyAgdG5fc2JbbGVuXT01CisgIGVuY3J5 cHRfc3VwcG9ydFtjbnRdPTIKKworUmVidWlsZGluZyB3aXRoIC1ET1BFTlNTTF8wOTcgZG9lc24n dCBjaGFuZ2UgYW55dGhpbmcuICBFZCBSYXZpbiBzYWlkIHRoZXkKK2hhdmUgdHdvIGRpZmZlcmVu dCBLZXJiZXJvcyBpbnN0YWxsYXRpb25zLCBIZWltZGFsIGFuZCBNSVQ7IG1heWJlIHNvbWUKK21p eHVwIGJldHdlZW4gdGhlIHR3byBleHBsYWlucyB0aGUgcHJvYmxlbSAoSmVmZiBjb25jdXJzKS4g VGhlIGNvcmUgZHVtcAorb2NjdXJzIGluIGNrX2NycDogZW5jcnlwdF9zdXBwb3J0KCk6CisKKyAg IGRlYnVnKEYxMDAsIlhYWCBlcCBub3QgTlVMTCIsIiIsMCk7CisgICB0eXBlID0gZXAtPnN0YXJ0 ID8gKCplcC0+c3RhcnQpKERJUl9FTkNSWVBULCAwKSA6IDA7IDwtLSBIZXJlCisgICBkZWJ1ZyhG MTAxLCJYWFggbmV3IHR5cGUiLCIiLHR5cGUpOworCitBbnl3YXksIEkgY2FuIGxvZyBpbiB3aXRo IEtlcmJlcm9zIDUgdG8gUGFuaXggT0sgZnJvbSBDb2x1bWJpYSAoc2VzYW1lKQordXNpbmcgOC4w LjIwMS4gIFNvIGxldCdzIHRyeSB0byByZXN1cnJlY3QgdGhlIFNvbGFyaXMgdmVyc2lvbiB3aXRo IGV2ZXJ5dGhpbmc6CisKKyAgc29sYXJpczlnK2tyYjUra3JiNCtvcGVuc3NsK3NoYWRvdytwYW0r emxpYgorCitJIGh1bnRlZCBhcm91bmQgdG8gZmluZCB3aGVyZSB0aGUgY3VycmVudCBsaWJyYXJ5 IGFuZCBoZWFkZXIgZmlsZQorZGlyZWN0b3JpZXMgd2VyZS4uLiAgTGFzdCB0aW1lIEkgdHJpZWQg dGhpcyAoTWFyY2ggMjAwNikgaXQgYm9tYmVkLCBub3QKK2ZpbmRpbmcgbGliZGVzLiAgSW5zdGVh ZCB3ZSBoYXZlIC9vcHQva2VyYmVyb3M1MTI1L2xpYi9saWJkZXM0MjUuYS4gIE1hZGUgYQorbmV3 IGN1LXNwZWNpZmljIHRhcmdldCB0aGF0IGluY2x1ZGVzIHRoaXM7IG5vdyB3ZSBnZXQgZmFydGhl cjsgaXQgYmxvd3MgdXAKK2luIGNrY2Z0cC5jIHdpdGggdG9ucyBvZiBlcnJvcnMgYW5kIHdhcm5p bmdzLCB3aGljaCB3ZSBjYW4gd29ycnkgYWJvdXQKK2xhdGVyLiAgQnVpbGRpbmcgYWdhaW4gd2l0 aCAtRE5PRlRQLCBpdCBnZXRzIHRvIGNrdWF0aC5jICh0aGUgZmlyc3Qgc2VjdXJpdHkKK21vZHVs ZSkgYW5kOgorCisgIGNrdWF0aC5jOjE1MToxODogZXJyb3I6IGtyYjUuaDogTm8gc3VjaCBmaWxl IG9yIGRpcmVjdG9yeQorICBja3VhdGguYzoxNTI6MjE6IGVycm9yOiBwcm9maWxlLmg6IE5vIHN1 Y2ggZmlsZSBvciBkaXJlY3RvcnkKKyAgY2t1YXRoLmM6MTUzOjIxOiBlcnJvcjogY29tX2Vyci5o OiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CisgIGNrdWF0aC5jOjE3NjoyODogZXJyb3I6IGtl cmJlcm9zSVYva3JiLmg6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKKyAgSW4gZmlsZSBpbmNs dWRlZCBmcm9tIC9vcHQvb3BlbnNzbC0wLjkuOGQvaW5jbHVkZS9vcGVuc3NsL2Rlcy5oOjEwMSwK KwkJICAgZnJvbSBja3VhdGguYzoyMTk6CisKK0ZvdW5kIGtyYjUuaCBpbiAvb3B0L2tlcmJlcm9z NTEyNS9pbmNsdWRlL2tyYjUuaCwgYWRkZWQgYSAtSSBmb3IgdGhpcworZGlyZWN0b3J5IC4uLiAg Tm93IHdlIGdldCBsb3RzIG9mIHdhcm5pbmdzIGluIGNrdWF0aC5jLCBidXQgaXQgY29tcGxldGVz IE9LLAordGhlbiB3ZSB3aW5kIHVwIGJvbWJpbmcgb3V0IGluIGNrX2NycC5jOyBJIGRvbid0IGtu b3cgd2h5IC0tIHRoZXJlIGFyZSBhbGwKK3RoZSBzYW1lIHdhcm5pbmdzIChyZWxhdGVkIHRvIGFy Z3VtZW50IHBhc3NpbmcgdG8gREVTIGZ1bmN0aW9ucyksIGJ1dCBubworZXJyb3JzLiAgSSBoYXZl IG5vIGNsdWUuCisKK1RyaWVkIHRvIHJlc3VycmVjdCB0aGUgc29sYXJpczJ4K2tyYjQgdGFyZ2V0 OyB0aGlzIHJlcXVpcmVkIGNoYW5naW5nIC1sa3JiCit0byAtbGtyYjQgYW5kIC1sZGVzIHRvIC1s ZGVzNDI1LiAgTG90cyBvZiB3YXJuaW5ncyBpbiBja3V0aW8uYywgY2tjbmV0LmMsCitja2N0ZWwu YywgdGhlbiBpdCBib21icyBvdXQgaW4gY2tjZnRwLmMgYmVjYXVzZSBpdCBjYW4ndCBmaW5kIGty Yi5oLiAgSQorZm91bmQgaXQsIGFkanVzdGVkIHRoZSAtSSBmbGFncywgYnV0IG5vdyBpdCBib21i cyBiZWNhdXNlIGtyYi5oIGl0c2VsZgorI2luY2x1ZGVzIDxrZXJiZXJvc0lWL2Rlcy5oPiwgd2hp Y2ggb2YgY291cnNlIGl0IGNhbid0IGZpbmQgYmVjYXVzZSB0aGUKK2JyYWNrZXRzIG1lYW4gaXQn cyBsb29raW5nIGluIC91c3IvaW5jbHVkZS9rZXJiZXJvc0lWLywgd2hpY2gsIG9mIGNvdXJzZSwK K3RoZSBzeXMgZm9sa3MgaGF2ZSByZW1vdmVkLiAgR2l2aW5nIHVwIG9uIFNvbGFyaXMgYWdhaW4u ICBMYXRlciwgSmVmZiBzYWlkCisiU29sYXJpcyBkb2VzIG5vdCBwdWJsaWNseSBleHBvcnQgdGhl IGtyYjUgbGlicmFyaWVzLiAgWW91IG5lZWQgdG8gYnVpbGQKK3RoZSBNSVQgS2VyYmVyb3MgbGli cmFyaWVzIHNlcGFyYXRlbHkgYW5kIGxpbmsgdG8gdGhlbS4iICAzMCBEZWNlbWJlciAyMDA2Lgor CitDaGFuZ2VkIGNvcHlyaWdodCBkYXRlIHRvIDIwMDcuICBja2NtYWkuYywgMSBKYW4gMjAwNy4K KworV2l0aCBFZCBSYXZpbidzIGhlbHAsIHN1Y2Nlc3NmdWxseSBidWlsdCBDLUtlcm1pdCB3aXRo IEtlcmJlcm9zIDUgYW5kCitPcGVuU1NMIChuZXRic2Qra3JiNStvcGVuc3NsK3psaWIpLCBidXQg aXQgZG9lcyBub3QgbWFrZSBLNSBjb25uZWN0aW9uczsgaXQKK2dldHMgaHVuZyB1cCBpbiB0aGUg VGVsbmV0IG5lZ290aWF0aW9ucy4gIDMgSmFuIDIwMDcuCisKK0Rvd25sb2FkZWQgTUlUIEtlcmJl cm9zIDUgdjEuNC40IHRvIFNvbGFyaXMgOSwgNTRNQiB3b3J0aC4gIFRoaXMgaXMganVzdCBzbwor SSBjYW4gYnVpbGQgYSBLZXJiZXJpemVkIEMtS2VybWl0IGZvciB0ZXN0aW5nIHR0eXB0eWNtZCgp LiAgUmFuIHRoZQorY29uZmlndXJlIHByb2dyYW0sIGdvdCBhIGZldyB3YXJuaW5ncyBidXQgaXQg ZGlkbid0IGZhaWwgKHNob3VsZCBpdD8pICBEaWQKKyJtYWtlIGluc3RhbGwiLCBzcGVjaWZ5aW5n IGEgcHJpdmF0ZSBkaXJlY3RvcnkgYnV0IGl0IGZhaWxlZCBpbW1lZGlhdGVseQord2l0aCAiY2Fu bm90IHN0YXQgbGlia3JiNXN1cHBvcnQuc28uMC4wOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5 Ii4KK09LLCBJIHRyaWVkLiAgMyBKYW4gMjAwNy4KKworTWFkZSBhIG5ldyBtYWtlZmlsZSB0YXJn ZXQgZm9yIE1hYyBPUyBYLCBtYWNvc3gxMC40K2tyYjUrc3NsLCByYW4gaXQgb24gTWFjCitPUyBY IDEwLjQuOC4gIEl0IGJvbWJzIG91dCBpbiBja2NmdHAuYyB3aXRoOiBja2NmdHAuYzo1NTE6IGVy cm9yOiBzdGF0aWMKK2RlY2xhcmF0aW9uIG9mICdnc3NfbWVjaF9rcmI1JyBmb2xsb3dzIG5vbi1z dGF0aWMgZGVjbGFyYXRpb24KKy91c3IvaW5jbHVkZS9nc3NhcGkvZ3NzYXBpX2tyYjUuaDo3Njog ZXJyb3I6IHByZXZpb3VzIGRlY2xhcmF0aW9uIG9mCisnZ3NzX21lY2hfa3JiNScgd2FzIGhlcmUi LiAgRGl0dG8gZm9yIGdzc19tZWNoX2tyYjVfb2xkLCBnc3NfbnRfa3JiNV9uYW1lLAorYW5kIGdz c19udF9rcmI1X3ByaW5jaXBhbC4gIFRyaWVkIGFnYWluIHdpdGggLUROT0ZUUC4gIFdlIGdldCBs b3RzIG9mCit3YXJuaW5ncyBpbiB0aGUgbmV0d29yayBtb2R1bGVzLCBidXQgdGhleSBjb21wbGV0 ZS4gIEJ1dCBja19zc2wuYyBib21iZWQKK3dpdGggYSBjb25mbGljdCBiZXR3ZWVuIGl0cyBvd24g ZGVjbGFyYXRpb25zIG9mIGVuY3J5cHRfb3V0cHV0IGFuZAorZGVjcnlwdF9pbnB1dCBhbmQgdGhl IG9uZXMgaW4gY2t1YXQyLmg7IHJlbW92ZWQgdGhlIHByb3RvdHlwZXMgZnJvbSB0aGUKK2xhdHRl ciAoYXMgSmVmZiBhZHZpc2VkKSBpdCBidWlsdCBPSyBhbmQgaXQgd29ya3MgT0sgdG9vLiAgQnVp bHQgd2l0aCBGVFAKK3RvbywgYnV0IHdpdGggbGluay10aW1lIHdhcm5pbmdzIGFib3V0IHRoZSBh Zm9yZW1lbnRpb25lZCBnc3NfKiBzeW1ib2xzLgorI2lmZGVmJ2QgdGhlbSBvdXQgKGdzc19tZWNo X2tyYjUsIGdzc19tZWNoX2tyYjVfb2xkLCBnc3NfbWVjaF9uYW1lLCBhbmQKK2dzc19tZWNoX3By aW5jaXBhbCkgZm9yIE1BQ09TWCwgd2hlcmUgdGhlc2Ugc3ltYm9scyBhcmUgZXhwb3J0ZWQgYnkg dGhlCitsaWJyYXJ5LiAgTm93IGl0IGFsbCBjb21waWxlcyBhbmQgbGlua3MgT0ssIGFuZCBydW5z IE9LIHRvby4gIDMgSmFuIDIwMDcuCisKK1NwZW50IGEgZGF5IGh1bnRpbmcgYXJvdW5kIGZvciBh IHZlcnNpb24gb2YgWm1vZGVtIHRoYXQgd291bGQgYnVpbGQgYW5kCitleGVjdXRlIG9uIE1hYyBP UyBYLCBmaW5hbGx5IGZvdW5kIG9uZS4gIE5vdyBhdCBsYXN0IEkgY291bGQgdHJ5IGEgWm1vZGVt CitleHRlcm5hbC1wcm90b2NvbCB0cmFuc2ZlciBvdmVyIGEgc2VjdXJlIGNvbm5lY3Rpb24uICBC dXQgcGhvb2V5LCBDLUtlcm1pdCdzCitwdHkgc3VwcG9ydCBkaWRuJ3Qgd29yayBvbiB0aGlzIGJv eC4gIEtlcm1pdCBmaW5kcyBtYXN0ZXIgL2Rldi9wdHlwYSBPSywKK3RoZW4gaW4gcHR5aW50X3Zv aWRfYXNzb2NpYXRpb24oKSB0cmllcyB0byBvcGVuIC9kZXYvdHR5IGJ1dCBnZXRzIEVSUk5PPTYK KyJkZXZpY2Ugbm90IGNvbmZpZ3VyZWQiICh3aGljaCBpcyBhcHBhcmVudGx5IE9LLCBiZWNhdXNl IHRoZSBzYW1lIHRoaW5nCitoYXBwZW5zIG9uIG90aGVyIHBsYXRmb3JtcyB3aGVyZSB0aGlzIHdv cmtzKSwgdGhlbiB0cmllcyB0byBvcGVuIHNsYXZlCisvZGV2L3R0eXBhIGFuZCBnZXRzIEVSUk5P PTEzICJwZXJtaXNzaW9uIGRlbmllZCIgYmVjYXVzZSwgaW5kZWVkLCBJIGRvbid0CitoYXZlIHIv dyBwZXJtaXNzaW9uIG9uIHRoZSBkZXZpY2UuICBMZWZ0IGEgbWVzc2FnZS4gIDQgSmFuIDIwMDcu CisKK0NoYW5nZWQgVFJBTlNNSVQgL0JJTkFSWSBvdXRwdXQgYnVmZmVyIHNpemUgZnJvbSAyNTIg dG8gNTA4IHRvIGF2b2lkCitUQ1AgZnJhZ21lbnRhdGlvbi4gIE5lZWQgdG8gYWRkIGEgU0VUIGNv bW1hbmQgZm9yIHRoaXMgbGF0ZXIuCitja3V1czQuYywgNSBKYW4gMjAwNy4KKworRm91bmQgYW5v dGhlciBNYWMgd2hlcmUgdGhlIHB0eXMgd2VyZW4ndCBwcm90ZWN0ZWQgYWdhaW5zdCBtZSwgbWFr ZSBhIEs1Citjb25uZWN0aW9uIGFuZCB0cmFuc2ZlcnJlZCBhIGxhcmdpc2ggZmlsZSB3aXRoIFpt b2RlbSB3aXRoIHplcm8gZ2xpdGNoZXMsCitleGNlcHQgaXQgd2FzIGtpbmQgb2Ygc2xvdywgODRL IGNwcy4gIFdlbGwsIHdlJ3JlIGRvaW5nIHNpbmdsZS1jaGFyYWN0ZXIKK3JlYWRzIG9uIHRoZSBu ZXQgKHR0aW5jKCkncyBpbnN0ZWFkIG9mIHR0eGluKCkpLiAgSG1tbSwgYnV0IHRoZW4gSSBkaWQg aXQKK2FnYWluIGFuZCBnb3QgMi4yTWNwcy4gIFN1Y2Nlc3Mgd2FzIHJlcG9ydGVkLCBidXQgaXQg YWN0dWFsbHkgZGlkbid0IHdvcms7CitpdCBvbmx5IHNlbnQgdGhlIGZpcnN0IHF1YXJ0ZXIgb2Yg dGhlIGZpbGUuLi4uICBPaCB3ZWxsLCBhdCBsZWFzdCBub3cgd2UKK2hhdmUgYSB0ZXN0YmVkLiAg NSBKYW4gMjAwNy4KKworVHJpZWQgYWdhaW4sIHNhdyB0aGF0IHRoZSBmaWxlIGlzIGFjdHVhbGx5 IHRyYW5zZmVycmVkIGluc3RhbnRseSBidXQgdGhlbgord2UncmUgbm90IHBpY2tpbmcgdXAgdGhl IHByb3RvY29sIGF0IHRoZSBlbmQuICBUaGVvcnk6IGFmdGVyIHRoZSB0cmFuc2ZlcgorZmluaXNo ZXMsIHdlIGNvbWUgYmFjayB0byB0aGUgcHJvbXB0IG9uIHRoZSByZW1vdGUgaG9zdCwgd2hpY2gg bWVhbnMgd2UgaGF2ZQorc29tZXRoaW5nIHRvIHJlYWQgZnJvbSB0aGUgbmV0IGFuZCB3cml0ZSB0 byB0aGUgcHR5LCBidXQgdGhlIHB0eSBoYXMgYWxyZWFkeQorZXhpdGVkLiAgQUZURVIgVEhFIFBU WSBJUyBHT05FLCBXRSBETyBOT1QgV0FOVCBUTyBSRUFEIEZST00gVEhFIE5FVCBBTlkKK01PUkUu ICBBZGRpbmcgdGhpcyB0ZXN0IG1ha2VzIEtlcm1pdCBzdWNjZWVkIHJpZ2h0IGF3YXkgd2hlbiBz ZW5kaW5nIHRoZQorc2FtZSBsYXJnaXNoIGZpbGUsIHdpdGggYSB0cmFuc2ZlciByYXRlIG9mIDRN IGNwcywgdGhhdCdzIGJldHRlci4gIEJ1dCB0aGUKK3J6IHByb2dyYW0gb24gdGhlIGZhciBlbmQg aXMgZXZpZGVudGx5IG5vdCByZWNlaXZpbmcgdGhlIGdvb2RieWUgaGFuZHNoYWtlCitmcm9tIHRo ZSByZWNlaXZlciwgYmVjYXVzZSBpdCBzaXRzIHRoZXJlIGZvcmVldmVyIGluIGl0cyAqQjA5MDAy NDAyMDA5NDE4Cittb2RlIHVudGlsIEkgXlheWF5YXlheWCBvdXQgb2YgaXQsIGF0IHdoaWNoIHBv aW50IGl0IGRlbGV0ZXMgdGhlIGZpbGUgaXQKK2FscmVhZHkgcmVjZWl2ZWQsIG5vdCB2ZXJ5IGhl bHBmdWwuICBJbiB0aGUgY29kZSwgSSByZWFkIGZyb20gdGhlIHB0eSBpZiB0aGUKK3B0eSBpcyBv cGVuIGFuZCB0aGVyZSBpcyByb29tIGluIHRoZSBidWZmZXIuICBUaGlzIG1lYW5zIHRoYXQgd2hl biB3ZSBnZXQgdG8KK3RoZSBlbmQsIGVpdGhlciB0aGVyZSBpcyBubyByb29tIGluIHRoZSBidWZm ZXIgKHVubGlrZWx5KSBvciB0aGUgbGFzdCBiaXQKK3NlbnQgYnkgc3ogYmVmb3JlIGV4aXRpbmcg d2FzIGN1dCBvZmYgd2hlbiB0aGUgZm9yayBjbG9zZWQuICBXaHkgZG8gd2UgZ2V0CitpbiB0aGlz IGZpeCBvbmx5IHdpdGggWm1vZGVtIGFuZCBub3Qgd2l0aCBLZXJtaXQ/CisKK0luIE1hYyBPUyBY LCBhZnRlciBzeiBleGl0cywgd2UgZ2V0IEVSUk5PPTUgaWYgd2UgdHJ5IHRvIHdyaXRlIHRvIHRo ZSBwdHksCitidXQgd2Ugc3RpbGwgZ2V0IG5vIGVycm9ycyBhZnRlciB0aGF0IGlmIHdlIHRyeSB0 byByZWFkIGZyb20gaXQuICBTdGlsbCwKK3ByaW9yIHRvIHRoaXMgd2UgZGlkIG1vcmUgdGhhbiAy MCB1bnByb2R1Y3RpdmUgbm9uYmxvY2tpbmcgcmVhZHMgZnJvbSB0aGUKK3B0eSAobm8gZXJyb3Is IG5vIGJ5dGVzKSB3aXRob3V0IGluY2lkZW50OyB0aGVyZSBkaWQgbm90IHNlZW0gdG8gYmUgYW55 dGhpbmcKK3dhaXRpbmcuICBJbiBmYWN0LCB0aGUgbGFzdCB0aGluZyB3ZSByZWFkIGZyb20gdGhl IHB0eSB3ZXJlIHRoZSB0ZXh0CittZXNzYWdlcyB0aGF0IGFyZSBpc3N1ZWQgYXQgdGhlIGVuZCBv ZiB0aGUgdHJhbnNmZXI6ICJyeiAzLjczIDEtMzAtMDMKK2ZpbmlzaGVkLiIgIEFmdGVyIHdoaWNo IGl0IHBhdXNlcyBhIHNlY29uZCBhbmQgc3BpdHMgb3V0IGEgbWVzc2FnZSBhYm91dAorVU5SRUdJ U1RFUkVEIENPUFkuCisKK0ZpZ3VyZWQgb3V0IGhvdyB0byBidWlsZCBscnpzeiwgaW4gaG9wZXMg dGhhdCB0aGUgcHJldmlvdXMgcHJvYmxlbXMgd2VyZQord2l0aCByenN6IGFuZCBjcnpzeidzIGZp ZGRsaW5nIHdpdGggZmlsZSBkZXNjcmlwdG9ycywgYnV0IEkgZ2V0IHRoZSBzYW1lCitiZWhhdmlv ci4gIFdoaWNoIGlzIGdvb2QsIEkgZ3Vlc3MsIGJlY2F1c2UgaWYgSSBjYW4gZml4IG9uZSwgSSBm aXggdGhlbSBhbGwuCitPciBub3QuLi4gIFRlc3RpbmcgbHJ6IGJ5IGl0c2VsZiAobm90IHVuZGVy IEMtS2VybWl0KSwgSSBzZWUgdGhhdCBpdCBkb2Vzbid0Cit3b3JrIGF0IGFsbCB3aXRoIEtlcm1p dCdzIG93biBabW9kZW0gaW1wbGVtZW50YXRpb24uCisKK09LLCBoZXJlJ3Mgb25lIHByb2JsZW06 IGF0IHRoZSBlbmQgb2YgdGhlIHRyYW5zZmVyLCB0aGUgT21lbiBabW9kZW1zIHByaW50CitzdHVm ZiBsaWtlICJQbGVhc2UgcmVhZCB0aGUgbGljZW5zZSBhZ3JlZW1lbnQiLCBLZXJtaXQgZHV0aWZ1 bGx5IHJlYWRzIHRoaXMKK2Zyb20gdGhlIHB0eSBhbmQgc2VuZHMgaXQgdG8gdGhlIGhvc3QsIHRo ZSBob3N0IHNoZWxsIHNheXMgIlBsZWFzZTogY29tbWFuZAorbm90IGZvdW5kIiwgaXNzdWVzIGl0 cyBwcm9tcHQgYWdhaW4sIHdoaWNoIEtlcm1pdCByZWFkcywgZmVlZHMgdG8gdGhlIHB0eSwKK2Fu ZCBhcHBhcmVudGx5IHRoZSBwdHkgZWNob2VzIGl0LCBzbyB3ZSBzZW5kIGl0IGJhY2sgdG8gdGhl IGhvc3QsIGFuZCB0aGVyZQorZW5zdWVzIGFuIGluZmluaXRlIGxvb3Agb2YgZ2V0dHkgYmFiYmxl IHVudGlsIHRoZSBwdHkgY2xvc2VzLiAgTm93LCB0aGVyZQorb3VnaHQgdG8gYmUgYSB3YXkgdG8g bWFrZSB0aGUgZXh0ZXJuYWwgcHJvdG9jb2wgc2h1dCB1cCwgbGlrZSBLZXJtaXQncworLXEodWll dCkgZmxhZywgYnV0IHRoZXNlIGFyZSB1bnJlZ2lzdGVyZWQgdmVyc2lvbnMgc28geW91IGNhbid0 IHNodXQgdXAgdGhlCittZXNzYWdlcy4gIEluIGZhY3QsIHRoZSB0cmFuc2ZlciB3b3JrcywgYnV0 IHRoZSBnZXR0eSBiYWJibGUgYXQgdGhlIGVuZAorcnVpbnMgdGhlIGV4cGVyaWVuY2UuICBOb3cg SSdtIGJlZ2lubmluZyB0byB3b25kZXIgaG93IGFueSBvZiB0aGVzZSBwcm9ncmFtcworZXZlciB3 b3JrZWQgYXMgZXh0ZXJuYWwgcHJvdG9jb2xzLiAgSG1tbSwgbm93IHRoYXQgSSB0cnkgaXQsIEkg c2VlIHRoZQorc2FtZSB0aGluZyBoYXBwZW5zIHRoZSBvbGQgd2F5LCB3aGVuIHVzaW5nIHR0cnVu Y21kKCkgcmF0aGVyIHRoYW4gdHRwdHljbWQoKS4KKworUmVhZGluZyB0aGUgY3J6c3ogZG9jdW1l bnRhdGlvbiBJIHNlZSBpdCBzYXlzIHRoYXQgbWVzc2FnZXMgY29tZSBvdXQgb24KK3N0ZGVyci4g IE9LLCB0aGF0J3MgcHJvZ3Jlc3MuICBJbiBja3VwdHkuYyBJIHRyeSByZWRpcmVjdGluZyAyIHRv IC9kZXYvbnVsbC4KK1dlbGwgZ29vZCwgdGhpcyBmaWx0ZXJzIG91dCB0aGUgbWVzc2FnZXMgZnJv bSBjc3osIGJ1dCB3ZSBzdGlsbCBnZXQgZ2V0dHkKK2JhYmJsZSBvbiB0aGUgcHJvbXB0LiAgSW4g dGhlIGRlYnVnIGxvZywgd2UgcmVhZCB0aGUgbGFzdCBidW5jaCBvZiBzdHVmZgorZnJvbSBuZXQs IDYxOCBieXRlcyBvZiBabW9kZW0gc3R1ZmYuLi4gICBOb3cgd2hhdCBoYXBwZW5zPworCitabW9k ZW0gb24gdGhlIHJlbW90ZSBleGl0cywgdGhlIGhvc3QgcHJpbnRzIGl0cyBwcm9tcHQuICBLZXJt aXQsIG9mIGNvdXJzZSwKK3JlYWRzIHRoZSBwcm9tcHQgZnJvbSB0aGUgbmV0LCBub3cgY29tZSB0 byB0aGUgYm90dG9tIG9mIHRoZSBsb29wIGFuZCB3ZQoraGF2ZSA3IGJ5dGVzIHRvIHdyaXRlIHRv IHRoZSBwdHksIGFuZCBubyBlcnJvciBjb25kaXRpb24sIHNvIHdlIGNvbnRpbnVlIHRoZQorbG9v cC4gIHNlbGVjdCgpIHNheXMgdGhhdCB0aGUgcHR5IGlzIHJlYWR5IGZvciB3cml0aW5nLiAgV2Ug d3JpdGUgdGhlIDcKK2J5dGVzIGFuZCBhbmQgZ2V0IG5vIGVycm9yLiAgTG9vcCBhZ2FpbiwgdGhp cyB0aW1lIHNlbGVjdCgpIHNheXMgdGhlIHB0eSBoYXMKK2RhdGEgd2FpdGluZy4gIFN1cmUgZW5v dWdoIHdlIGdldCB0aGUgcHJvbXB0IGJhY2ssIGFuZCBzZW5kIGl0IHRvIHRoZSBuZXQsCithbmQg dGh1cyBiZWdpbnMgdGhlIGdldHR5IGJhYmJsZS4gIFRoZXJlIGFyZSB0d28gY2F1c2VzIGZvciB0 aGlzOgorCisgIDEuIGNyenN6IGRvZXMgbm90IGV4aXQgaW1tZWRpYXRlbHk7IGl0IHNsZWVwcyBm b3IgMTAgc2Vjb25kcyBhZnRlcgorICAgICBwcmludGluZyBpdHMgbmFnIG1lc3NhZ2UuCisKKyAg Mi4gRHVyaW5nIHRoaXMgaW50ZXJ2YWwgdGhlIHB0eSBzZWVtcyB0byBiZSBlY2hvaW5nIHdoYXQg aXMgc2VudCB0byBpdC4KKyAgICAgY3N6IGlzIG5vdCBlY2hvaW5nOyBJIGNoZWNrZWQuICBBbnl3 YXksIHJlbW92aW5nIHRoZSBwYXVzZSBkb2Vzbid0CisgICAgIHNlZW0gdG8gbWFrZSBhIGRpZmZl cmVuY2UuCisKK3R0cHR5Y21kKCkgbmVlZHMgdG86CisKKyAuIFRFTEwgdGhlIHB0eSBtb2R1bGUg dG8gcmVkaXJlY3Qgc3RkZXJyIHRvIC9kZXYvbnVsbAorIC4gU0VUIFBUWSBUTyBOT0VDSE8gKG1h c3RlciBvciBzbGF2ZT8pCisKK1RyaWVkIHNldHRpbmcgdGhlIHB0eSB0byBub2VjaG86CisKKyAg dGVybWJ1Zi5jX2xmbGFnICY9IH4oRUNIT3xFQ0hPRXxFQ0hPSyk7CisKK2FuZCB0aGlzIHNlZW1l ZCB0byBzdG9wIHRoZSBnZXR0eSBiYWJibGUuICBBZnRlciB0aGUgZmlsZSB0cmFuc2ZlciwgSSBy ZWFkCitiYWNrIHRoZSBwcm9tcHQgZnJvbSB0aGUgaG9zdCBzaGVsbCwgSSB3cml0ZSB0aGUgcHJv bXB0IGJ5dGVzIHRvIHRoZSBwdHk7Cit0aGVyZSBpcyBubyBlcnJvci4gIEFuZCBub3cgc2VsZWN0 KCkgc2ltcGx5IGhhbmdzIGZvcmV2ZXIgKG9yIHRpbWVzIG91dCBpZgorYSB0aW1lb3V0IGlzIHNl dCkuICBUaGUgcXVlc3Rpb24gaGVyZSBpczogd2h5IGRpZG4ndCB3cml0aW5nIHRvIHRoZSBwdHkK K3Byb2R1Y2UgYW4gZXJyb3I/ICBBbmQsIGJlY2F1c2Ugd2UgbmV2ZXIgZGV0ZWN0IHRoZSBwdHkg aGFzIGV4aXRlZCwgd2UgY2FuJ3QKK3NldCBhIGdvb2QgcmV0dXJuIGNvZGUuICA1IEphbiAyMDA3 LgorCitNb3ZlZCBwdHkgZm9yayB0ZXN0aW5nIHRvIGEgc2VwYXJhdGUgcm91dGluZSwgcHR5X2dl dF9zdGF0dXMoKSwgYW5kIAorYWRkZWQgYSBjYWxsIHRvIGl0IGZyb20gdGhlIHBsYWNlIHdoZXJl IHdlIHRpbWUgb3V0LCBpbiBjYXNlIHRoZSBmb3JrCit0ZXJtaW5hdGVkOyB0aGVuIHdlIGNhbiBn ZXQgYW5kIHJldHVybiBpdHMgc3RhdHVzLiAgNiBKYW4gMjAwNy4KKworQWRkZWQgY2FsbHMgdG8g cHR5X2dldF9zdGF0dXMoKSB0byBldmVyeSBwbGFjZSB3aGVyZSB3ZSBzdXNwZWN0IGEgcHR5IGVy cm9yLAordHJpZWQgYWdhaW4gd2l0aCBscnpzeiwgY3J6c3osIGFuZCByZWd1bGFyIHJ6c3ouICBB bGwgdGhyZWUgd29yaywgYnV0IGluCitlYWNoIGNhc2Ugd2FpdHBpZCgpIGluZGljYXRlcyB0aGF0 IHRoZSBzeiBwcm9ncmFtIGdhdmUgZXhpdCBjb2RlIDEgKGZhaWx1cmUpLgorY2t1dGlvLmMsIDcg SmFuIDIwMDcuCisKK0NoYW5naW5nIHRoZSBzdWJqZWN0Li4uICBPbiBteSB0ZXN0IHN5c3RlbSwg ZXZlcnkgdGltZSBJIGV4ZWN1dGUgdHRwdHljbWQoKSwKK0kgZ2V0ICJwZXJtaXNzaW9uIGRlbmll ZCIgb24gL2Rldi90dHlwMy4gIFRoZW4gSSBydW4gaXQgYWdhaW4gYW5kIGdldCB0bwordHR5cDQg d2hpY2ggaXMgT0suICBJIHdhbnRlZCB0byBza2lwIHBhc3QgYW55IHB0eSBmb3Igd2hpY2ggSSBs YWNrCitwZXJtaXNzaW9uIGFuZCB0cnkgdGhlIG5leHQgd2l0aG91dCByYWlzaW5nIGFuIGVycm9y LiAgQWRkZWQgZGVidWdnaW5nIGNvZGU6CisKKyAgMTY6MjU6MjMuNTI0IHB0eV9nZXRwdHkoKSBw dHkgbWFzdGVyIG9wZW4gZXJyb3JbL2Rldi9wdHlwMF09NQorICAxNjoyNToyMy41MjQgcHR5X2dl dHB0eSgpIHB0eSBtYXN0ZXIgb3BlbiBlcnJvclsvZGV2L3B0eXAxXT01CisgIDE2OjI1OjIzLjUy NCBwdHlfZ2V0cHR5KCkgcHR5IG1hc3RlciBvcGVuIGVycm9yWy9kZXYvcHR5cDJdPTUKKyAgMTY6 MjU6MjMuNTI0IHB0eV9nZXRwdHkoKSBmb3VuZCBwdHkgbWFzdGVyWy9kZXYvcHR5cDNdCisgIDE2 OjI1OjIzLjUyNCBwdHlfZ2V0cHR5KCkgc2xhdmVidWYgWzJdWy9kZXYvdHR5cDNdCisKK1NvIGl0 IGFscmVhZHkgd2FzIHNraXBwaW5nIHBhc3Qgb3BlbiBlcnJvcnM7IHR0eXAzIHdhcyBvcGVuZWQg c3VjY2Vzc2Z1bGx5LgorVGhlIHByb2JsZW0gaXMgdGhhdCBwdHlwMyBpcyBydy1ydy1ydy0sIGJ1 dCB0aGUgY29ycmVzcG9uZGluZyBtYXN0ZXIsCit0dHlwMywgaXMgcnctLXItLS0tLiAgSXQgc2Vl bXMgdGhlIGNvZGUgYXNzdW1lcyB0aGF0IGlmIHRoZSBtYXN0ZXIgY2FuIGJlCitvcGVuZWQsIHRo ZW4gc28gY2FuIHRoZSBjb3JyZXNwb25kaW5nIHNsYXZlLiAgVW5mb3J0dW5hdGVseSwgdGhlIGNv ZGUgaXMKK25vdCBzdHJ1Y3R1cmVkIHRvIGFsbG93IHVzIHRvIHNraXAgYWhlYWQgdG8gdGhlIG5l eHQgbWFzdGVyIGlmIHRoZSBzbGF2ZQorY2FuJ3QgYmUgb3BlbmVkLiAgNyBKYW4gMjAwNy4KKwor U3BlbnQgYSBjb3VwbGUgaG91cnMgdHJ5aW5nIHRvIHJlYXJyYW5nZSB0aGUgY29kZSBpbiB0aGUg cHR5IG1vZHVsZSB0byBza2lwCitwYXN0IGluYWNjZXNzaWJsZSBzbGF2ZXMgYnV0IGl0IHdhcyBh IHJhYmJpdCBob2xlLCBub3Qgd29ydGggaXQsIGJhY2tlZCBvZmYuCis4IEphbiAyMDA4LgorCitU cmllZCBhbiB1cGxvYWQgb3ZlciBhIHNlY3VyZSBjb25uZWN0aW9uIHVzaW5nIGxzei4gIFVuZXhw ZWN0ZWRseSwgdGhpcyB0aW1lCitpdCB3b3JrZWQ7IG5vdCBvbmx5IHdhcyB0aGUgZmlsZSAoYWJv dXQgMC41TUIpIHRyYW5zZmVycmVkIGNvcnJlY3RseSwgYnV0CitLZXJtaXQgZGV0ZWN0ZWQgdGhl IGZvcmsncyB0ZXJtaW5hdGlvbiBhbmQgZ290IHRoZSBwaWQncyBleGl0IHN0YXR1cywgYW5kLAor Zm9yIHRoZSBmaXJzdCB0aW1lLCBjb3JyZWN0bHkgcmVwb3J0ZWQgYSBzdWNjZXNzZnVsIHRyYW5z ZmVyLiAgSSBoYXZlIG5vCitpZGVhIHdoeSB0aGlzIHdvcmtzIHRvZGF5IGFuZCBub3QgeWVzdGVy ZGF5LiAgTW9yZSB0ZXN0czsgaXQgd29ya3MgbW9zdCBvZgordGhlIHRpbWUuICBJdCB3b3JrcyB3 aXRoIGNzeiBhbmQgd2l0aCByZWd1bGFyIHN6IHRvby4KKworKGRheXMgbGF0ZXIuLi4pCisKK2Nr dWNucy5jIHNlZW1zIHRvIGRvIHRoZSByaWdodCB0aGluZzsgaXQgcmVjb2duaXplIHRoZSBaU1RB UlQgc3RyaW5nLAorYWN0aXZhdGVzIHRoZSBabW9kZW0tUmVjZWl2ZSBBUEMsIGFuZCByZXR1cm5z LiAgZG9jb25lY3QoKSBzZWVzIHRoZSBBUEMgYW5kCitiZWdpbnMgdG8gZXhlY3V0ZSBpdC4gIFRo ZSBSRUNFSVZFIGNvbW1hbmQgcmVzdWx0cyBpbiBhIGNhbGwgdG8gdGhlIEdFVAorY29tbWFuZCBw YXJzZXIsIGRveGdldCgpIChJUyBUSEFUIFJJR0hUPyksIHRoZW4gY29tZXMgYSB0dGZsdWkoKSwg d2hpY2gKK3Rocm93cyBhd2F5IGEgYnVuY2ggb2Ygc3R1ZmYuICBGaW5hbGx5IHdlIGdldCB0byB0 dHB0eWNtZCgpLCB3ZSBnZXQgYSBwdHkKK2FuZCBydW4gbHJ6IGluIGl0LCBzZWxlY3QoKSBzYXlz IHN0dWZmIGlzIHdhaXRpbmcgZnJvbSB0aGUgcHR5LCBidXQgcmVhZAorcmV0dXJucyAwLCBlcnJu byAwLiAgU2tpcHBpbmcgdGhlIHR0Zmx1aSgpIGluIGRveGdldCgpIGlmIHRoZSBwcm90b2NvbCB3 YXMKK25vdCBLZXJtaXQgZGlkbid0IHNlZW0gdG8gbWFrZSBkaWZmZXJlbmNlLiAgY2t1dXM2LmMs IDggSmFuIDIwMDcuCisKK1RoZSBwcm9ibGVtIGlzIHRoYXQgaW4gdGhpcyBjYXNlLCByZWFkcyBm cm9tIHRoZSBwdHkgbmV2ZXIgZ2V0IGFueXRoaW5nIChubworZGF0YSwgbm8gZXJyb3IpLCB3cml0 ZSBhbHdheXMgZ2V0cyBhbiBlcnJvci4gIEl0J3MgYXMgaWYgdGhlIHB0eSB3YXMgbm90CitiZWlu ZyBzZXQgdXAgcmlnaHQsIG9yIHdlJ3JlIHVzaW5nIHRoZSB3cm9uZyBmaWxlIGRlc2NyaXB0b3Iu ICBBbmQgaWYgd2UKK3NraXAgdGhlIGF1dG9kb3dubG9hZD8gIFNhbWUgdGhpbmcuCisKK09LLCBw dXR0aW5nIGRvd25sb2FkcyBhc2lkZSBmb3IgYSBtb21lbnQsIGxldCdzIGdldCB1cGxvYWRzIHdv cmtpbmcgYXMgd2VsbAorYXMgcG9zc2libGUuICBBdCB0aGlzIHBvaW50IHdlIGhhdmUgdGhlIG9k ZCBzaXR1YXRpb24gKGF0IGxlYXN0IGluIHRoaXMKK2NvbmZpZ3VyYXRpb24pIHRoYXQgdGhlIHVw bG9hZCBzdWNjZWVkcywgYnV0IG5vdyBmb3Igc29tZSByZWFzb24gd2UgYXJlCit1bmFibGUgdG8g cmVhZCB0aGUgZXhpdCBzdGF0dXMgZnJvbSB0aGUgcHJvY2VzcywgZXZlbiB0aG91Z2ggdGhpcyB3 YXMKK3dvcmtpbmcgYmVmb3JlLCBzbyB0dHB0eWNtZCgpIHJldHVybnMgMCAoZmFpbHVyZSksIHll dCBLZXJtaXQgcmVwb3J0cworc3VjY2Vzcy4KKworV2VsbCwgaXQgdHVybnMgb3V0IHRoYXQga2ls bChwdHlfZm9ya19waWQsMCkgd2FzIGd1bW1pbmcgdXAgdGhlIHdvcmtzLgorSWYgd2UgdXNlIG9u bHkgd2FpdHBpZCgpIGFsbCBpcyB3ZWxsLCBJIHRoaW5rLiAgd2FpdHBpZCgpIHdpdGggV05PSEFO RworcmV0dXJucyAtMSB3aXRoIHN0YXR1cyAtMSBlcnJubyAwIGlmIHRoZSBwaWQgaGFzIG5vdCBl eGl0ZWQsIGFuZCBpdCByZXR1cm5zCit0aGUgcGlkIGFuZCBzdGF0dXMgPiAtMSBpZiB0aGUgcHJv Y2VzcyBoYXMgZXhpdGVkLiAgRml4ZWQgcHR5X2dldF9zdGF0dXMoKQordG8gZG8gaXQgdGhpcyB3 YXkuICBja3V0aW8uYywgNyBKYW4gMjAwNy4KKworTGV0J3MgbW92ZSB0aGlzIGZyb20gTWFjIE9T IHRvIE5ldEJTRCBhbmQgc2VlIGhvdyBpdCB3b3Jrcy4gIFdlbGwsIHRoZSBmaWxlCit0cmFuc2Zl ciB3YXMganVzdCBmaW5lLCBidXQgdGhlbiBJIHVzZWQgc29tZSBzZXhwcyB0byBjYWxjdWxhdGUg dGhlIGVsYXBzZWQKK3RpbWUgYW5kIHRyYW5zZmVyIHJhdGUsIGFuZCBLZXJtaXQgaHVuZyBpbiBk b3NleHAoKS4gIEZpbmUsIGlnbm9yaW5nIHRoYXQuLi4KK1RoZSBkZWJ1ZyBsb2cgc2hvd3MgdGhh dCB0dHB0eWNtZCgpIGdldHMgdGhlIHB0eSBPSywgbWFzdGVyIGFuZCBzbGF2ZSwgdGhlCitpL28g Z29lcyBzbW9vdGhseSwgYW5kIHdhaXRwaWQoKSBkb2VzIGl0cyBqb2IgcGVyZmVjdGx5LiAgU29s YXJpcywgc2FtZQorZGVhbDsgdHRydW5jbWQoKSBnb2VzIHNtb290aGx5LCBidXQgdGhlbiB0aGUg c2V4cHMgYWZ0ZXJ3YXJkIGdldCAiQXJpdGhtZXRpYworZXhjZXB0aW9uIi4gIFR1cm5zIG91dCB0 aGVyZSB3YXMgYSBCQUQgYnVnIGluIGRvc2V4cCgpIHRoYXQgYWxsb3dlZCBhbgoraW50ZWdlciBk aXZpc2lvbiBieSAwIHRvIG9jY3VyIHVuZGVyIGNlcnRhaW4gY2lyY3Vtc3RhbmNlczsgaXQncyBh bHdheXMgYmVlbgordGhlcmUuICBGaXhlZCBpbiBkb3NleHAoKTogY2t1dXMzLmMsIDggSmFuIDIw MDcuCisKK0FmdGVyIG5vdGljaW5nIGEgZmV3IHByb2JsZW1zIHJ1bm5pbmcgdGhlIHBvcC5rc2Mg c2NyaXB0IGluIHByb2R1Y3Rpb24gb3ZlcgordGhlIHBhc3QgeWVhciwgcmV3cm90ZSBcZmVtYWls YWRkcmVzcygpIHRvIGJlIG1vcmUgcmVsaWFibGUgYW5kIGEgbG90CitzaW1wbGVyLiAgY2t1dXM0 LmMsIDkgSmFuIDIwMDcuCisKK0JhY2sgdG8gdHRwdHljbWQoKS4uLiAgV2hlbiB3ZSBsZWZ0IG9m Ziwgd2UgY291bGQgc2VuZCBidXQgbm90IHJlY2VpdmUuICBTZXQKK3VwIGEgdGVzdCBjYXNlIHVz aW5nIEtlcm1pdCBhcyB0aGUgZXh0ZXJuYWwgcHJvdG9jb2wgZm9yIHJlY2VpdmluZyBhIHNob3J0 CitmaWxlLiAgSWYgSSBTRVQgU1RSRUFNSU5HIE9GRiBhbmQgdXNlIHNob3J0IHBhY2tldHMsIGl0 IGFjdHVhbGx5IGRvZXMgd29yaywKK3NvIGl0J3Mgbm90IGEgY29tcGxldGUgZmFpbHVyZSB0byBm dW5jdGlvbiwgYnV0IGFwcGFyZW50bHkgYSBsYWNrIG9mIGZsb3cKK2NvbnRyb2wgZm9yIHRoZSBw dHkuICBCZWdhbiBieSBjb21wbGV0aW5nIHRoZSBwYXJhbWV0ZXJpemF0aW9uIG9mIHRoZSBwdHkK K21vZHVsZSwgc28gaXQgY2FuIGJlIGNhbGxlZCBmb3IgaW50ZXJhY3RpdmUgdXNlIChmYyAwKSBv ciBmb3IgcnVubmluZworcHJvdG9jb2xzICgxKS4gIENvbmZpcm1lZCB0aGF0IGV2ZXJ5dGhpbmcg d29ya3MgYXQgbGVhc3QgYXMgd2VsbCBhcyBiZWZvcmUKKyhlLmcuICJzZXQgaG9zdCAvcHR5IGVt YWNzIiB2cyBleHRlcm5hbCBwcm90b2NvbHMpLiAgY2tjZGViLmgsIGNrdXRpby5jLAorY2t1cHR5 LmMsIDkgSmFuIDIwMDcuCisKK0ZvdW5kIGluIEhQLVVYICJtYW4gNyBwdHkiIGEgZGVzY3JpcHRp b24gb2YgaW9jdGwoZmQsVElPQ1RUWSxmYykgd2hpY2ggaXMKK2V4YWN0bHkgd2hhdCB3ZSB3YW50 OiBmYyAwIHR1cm5zIG9mZiBhbGwgdGVybWlvIHByb2Nlc3NpbmcgYW5kIGd1YXJhbnRlZXMgYW4K K3VuaW50ZXJydXB0ZWQsIHVubW9sZXN0ZWQsIGZsb3ctY29udHJvbGxlZCBzdHJlYW0gb2YgYnl0 ZXMgaW4gYm90aAorZGlyZWN0aW9ucy4gIFRoaXMgZnVuY3Rpb24gYWxzbyBleGlzdHMgaW4gTGlu dXgsIGJ1dCBub3QgaW4gU29sYXJpcywgTmV0QlNELAorb3IgTWFjIE9TIFggKFRJT0NOT1RUWSBp cyBub3Qgd2hhdCB3ZSB3YW50LCBpdCBkb2VzIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5KS4KKwor QW5vdGhlciBwb3NzaWJpbGl0eSBpcyBUSU9DUkVNT1RFLCB3aGljaCAiY2F1c2VzIGlucHV0IHRv IHRoZSBwc2V1ZG90ZXJtaW5hbAordG8gYmUgZmxvdyBjb250cm9sbGVkIGFuZCBub3QgaW5wdXQg ZWRpdGVkLCByZWdhcmRsZXNzIG9mIHRoZSB0ZXJtaW5hbAorbW9kZSIuICBUaGlzIG9uZSBleGlz dHMgaW4gYXQgbGVhc3QgSFBVWCwgTmV0QlNELCBTb2xhcmlzLCBhbmQgTWFjIE9TIFguCisKK1Nv bGFyaXM6IGJ1aWxkcyBPSywgYnV0IGF0IHJ1bnRpbWUgd2UgZ2V0IEVOT1RUWSAoIkluYXBwcm9w cmlhdGUgaW9jdGwgZm9yCitkZXZpY2UiKS4gIEJ5IHRoZSB0aW1lIHRoaXMgaGFwcGVucywgaXQn cyBoYXJkIHRvIHRlbGwgZnJvbSB0aGUgY29kZSB3aGV0aGVyCit0aGUgZmQgd2UncmUgdXNpbmcg aXMgZm9yIHRoZSBtYXN0ZXIgb3IgdGhlIHNsYXZlOyBUSU9DUkVNT1RFIGNhbiBiZSB1c2VkCitv bmx5IG9uIHRoZSBtYXN0ZXIuICBDbG9zZSBpbnNwZWN0aW9uIHNob3dzIHRoYXQgSSBhbSBpbmRl ZWQgZG9pbmcgdGhhdDsKK3B0eWZkIGFzIHNlZW4gYnkgdHRwdHljbWQoKSBpcyB0cnVseSB0aGUg bWFzdGVyLCBpLmUuIHRoZSAvZGV2L3B0eVhYIGRldmljZSwKK25vdCB0aGUgL2Rldi90dHlYWCBk ZXZpY2UgKHRoZSBzbGF2ZSBmZCBjYW4ndCBiZSBzZWVuIGF0IGFsbCwgYXMgaXQgZXhpc3RzCitv bmx5IGluIGEgc2VwYXJhdGUgZm9yaykuICBPSywgc28gbm93IHdlIGtub3cgdGhhdCBUSU9DUkVN T1RFIGNhbid0IGJlIHVzZWQKK29uIFNvbGFyaXMuCisKK05ldEJTRDogU29tZWhvdywgd2hldGhl ciBhcyBhIHJlc3VsdCBvZiB0b2RheSdzIGZpZGRsaW5nIG9yIHRoZSBwaGFzZSBvZiB0aGUKK21v b24sIHRoZSBjb2RlIGluIHB0eV9vcGVuX3NsYXZlKCkgdGhhdCB0cmllcyB0byBvcGVuIC9kZXYv dHR5IHN0YXJ0ZWQKK2ZhaWxpbmcgb24gTmV0QlNEICgiRGV2aWNlIG5vdCBjb25maWd1cmVkIiku ICBDaGFuZ2luZyBpdCB0byBiZSBydW4gb25seSBpZgorZmMgPT0gMCAod2hpY2ggZG9lc24ndCBz ZWVtIHRvIGh1cnQgYW55dGhpbmcpLCBvbmNlIGFnYWluIEkgZ2V0IEVOT1RUWSBvbgordGhlIFRJ T0NSRU1PVEUgaW9jdGwuICBabW9kZW0gd29ya3MgYnV0IEtlcm1pdCB0b3RhbGx5IGZhaWxzICh0 aGUgZm9yayBleGl0cworaW1tZWRpYXRlbHkgd2l0aCBhbiBleGl0IGNvZGUgb2YgMCwgZXZlbiB0 aG91Z2ggaXQgZGlkbid0IGRvIGFueXRoaW5nKS4KKworTWFjIE9TIFg6IEV4YWN0bHkgdGhlIHNh bWUgc2VxdWVuY2UgYW5kIHJlc3VsdHMgYXMgTmV0QlNELgorCitMaW51eDogIEl0IGRpZCBub3Qg ZXhlY3V0ZSB0aGUgbmV3IGlvY3RsIGF0IGFsbDsgYXBwYXJlbnRseSB0aGUgVElPQyBzeW1ib2xz CithcmUgaGlkZGVuIG9yIG5vdCBleHBvcnRlZCBvciBzb21ldGhpbmcuCisKK1doZXJlIHdlIHN0 YW5kOgorIC4gRG93bmxvYWRzIGRvbid0IHdvcmsKKyAuIFVwbG9hZHMgZ290IHNsb3cgYWdhaW4K KyAuIEtlcm1pdCBkb2Vzbid0IHdvcmsgYXQgYWxsIGFzIGFuIGV4dGVybmFsIHByb3RvY29sCisK K0FjdHVhbGx5IGlmIEkgdGFrZSB0aGUgZGVidWdnaW5nIG91dCBpdCBnb2VzIGZhc3QsIGJ1dCBp dCBkb2Vzbid0IGZpbmlzaC4KKworQWxsIHRvZGF5J3Mgd29yayBvbiB0dHB0eWNtZCgpIGxvb2tz IGxpa2UgYSBkZWFkIGVuZC4gIFRvIHJvbGwgYmFjayB0bworeWVzdGVyZGF5OgorCisgIGNwIGNr dXRpby5jLTIwMDcwMTA4IGNrdXRpby5jCisgIGNwIGNrdXB0eS5jLTIwMDcwMTA4IGNrdXB0eS5j CisgIGNwIGNrdXB0eS5oLTIwMDcwMTA4IGNrdXB0eS5oCisKK29yIHRvIGNvbnRpbnVlIHdpdGgg dG9kYXknczoKKworICBjcCBja3V0aW8uYy0yMDA3MDEwOSBja3V0aW8uYworICBjcCBja3VwdHku Yy0yMDA3MDEwOSBja3VwdHkuYworICBjcCBja3VwdHkuaC0yMDA3MDEwOSBja3VwdHkuaAorCitD b21wYXJpbmcgTW9uZGF5J3MgYW5kIFR1ZXNkYXkncyBwdHktcmVsYXRlZCBjb2RlLCB0aGUgZGlm ZmVyZW5jZXMgYXJlOgorIDEuIFBhc3Npbmcgb2YgZnVuY3Rpb24gY29kZSB0byBhbmQgYW1vbmcg cHR5IG1vZHVsZXMuCisgMi4gU2tpcHBpbmcgdGhlIFRJT0NTQ1RUWSBpb2N0bCBhbmQgdGhlIG9w ZW4oIi9kZXYvdHR5IikgdGVzdC4KKyAzLiBBdHRlbXB0aW5nIHRvIHB1dCBwdHkgaW4gVElPQ1RU WSBvciBUSU9DUkVNT1RFIG1vZGUuCisKK0NvbW1lbnRpbmcgb3V0IDIgYW5kIDMgc2hvdWxkIHB1 dCB1cyBiYWNrIHdoZXJlIHdlIHdlcmUgb24gTW9uZGF5IGlmIHRoZQorcGFyYW1ldGVyaXphdGlv biB3YXMgZG9uZSByaWdodC4gIEFuZCB3aXRoIHRoaXMsIG9uIFNvbGFyaXMsIGRvd25sb2FkaW5n Cit3aXRoIEtlcm1pdCBleHRlcm5hbCBwcm90b2NvbCB3b3JrcyBidXQgc2xvd2x5LCA4SyBjcHMs IHdpdGggb3Igd2l0aG91dAorZGVidWdnaW5nLiAgRGVidWcgbG9nIGRvZXMgbm90IHNob3cgYW55 IG9idmlvdXMgYm90dGxlbmVja3M7IHNlbGVjdCgpIHRha2VzCithbnl3aGVyZSBiZXR3ZWVuIG5v IHRpbWUgYXQgYWxsIGFuZCAwLjEgc2Vjb25kcyB0byByZXR1cm4uICBJZiBJIGluY3JlYXNlCit0 aGUgcHR5LW5ldCBidWZmZXIgc2l6ZSBmcm9tIDFLIHRvIDRLLCB0aGUgcmF0ZSBnb2VzIHVwIHRv IDU1SyBjcHMuICBJZiBJCittYWtlIGl0IDhLIEkgZ2V0IDEzNksgY3BzLiAgV2l0aCAxNksgSSBn ZXQgMzQ2SyBjcHMuICAzMks6IDM5NUsgY3BzIC0tIHRoaXMKK2xhc3Qgb25lIGlzbid0IHdvcnRo IHRoZSBkb3VibGluZy4gIEJ1dCBhdCAyNEsgSSBnZXQgNDkwSyBjcHMsIHNvbWV0aW1lcwordHdp Y2UgdGhhdC4gIExldCdzIHN0aWNrIHdpdGggMjRLIGZvciBub3cuICBEb3dubG9hZGluZyB3aXRo IFptb2RlbSAocnpzeikKK3dvcmtzIGF0IHRoZSBzYW1lIHJhdGUsIGJ1dCBub3cgd2UncmUgYmFj ayB0byBzZWVpbmcgdGhlIGdldHR5IGJhYmJsZQorKFNldmVyYWwgIioqQjA4MDAwMDAwMDAwMjJk IikgYXQgdGhlIGVuZC4gMTAgSmFuIDIwMDcuCisKK01vdmluZyB0byBNYWMgT1MgWCwgZXZlcnl0 aGluZyB3b3JrcyB0aGUgc2FtZSBhcyBvbiBTb2xhcmlzLCBleGNlcHQgSSBkb24ndAorZ2V0IHRo ZSBabW9kZW0gZ2V0dHkgYmFiYmxlIHRoZXJlLCBub3QgZXZlbiB3aXRoIE9tZW4gcnpzei4gIFRl c3RlZCBzZW5kcworaW4gYm90aCByZW1vdGUgYW5kIGxvY2FsIG1vZGUsIHRoZSBsYXR0ZXIgb3Zl ciBhIHNlY3VyZSBLZXJiZXJvcyA1IFRlbG5ldAorY29ubmVjdGlvbiwgdXNpbmcgQy1LZXJtaXQs IHJ6c3osIGxyenN6LCBhbmQgY3J6c3osIGFsbCBnb29kLiAgMTAgSmFuIDIwMDcuCisKK05vdyB3 ZSdyZSBiYWNrIHdoZXJlIHdlIHdlcmUgeWVzdGVyZGF5IG1vcm5pbmcsIGJ1dCB3aXRoIGJldHRl ciB0aHJvdWdocHV0LgorVGhlIGJpZyBpc3N1ZSB0aGVuIHdhcyByZWNlaXZpbmcgZmlsZXMuICBC dXQgeWlrZXMsIG5vdyBpdCB3b3JrcyEgIE5vdCBvbmx5Cit0aGF0LCBJIGdvdCBhIHRyYW5zZmVy IHJhdGUgb2YgMi4xTSBjcHMuICBUaGF0J3MgdXNpbmcgS2VybWl0IHByb3RvY29sLAorc3RyZWFt aW5nLCBhbmQgYmlnICg0SykgcGFja2V0cy4gIFdoaWNoIGRpZG4ndCB3b3JrIGJlZm9yZS4gIE5v dCBhIGZsdWtlCitlaXRoZXIsIEkgdXBsb2FkZWQgYmlnZ2VyIGFuZCBiaWdnZXIgZmlsZXMgdXAg dG8gNk1CLCB0aGV5IGFsbCB3ZW50CitzbW9vdGhseSwgYXQgcmF0ZXMgYmV0d2VlbiAxIGFuZCAy IE1CcHMuICAxMCBKYW4gMjAwNy4KKworTm90IHNvIGdyZWF0IGluIFptb2RlbSBsYW5kLCBob3dl dmVyLiAgSWYgSSBzdGFydCB0aGUgZXh0ZXJuYWwtcHJvdG9jb2wKK3JlY2VpdmVyIG9uIHRoZSBm YXIgZW5kLCBlc2NhcGUgYmFjayBhbmQgc3RhcnQgYSBabW9kZW0gc2VuZC4uLiBub3RoaW5nLgor SWYgSSBsZWF2ZSB0aGUgcmVtb3RlIEMtS2VybWl0IGF0IGl0cyBwcm9tcHQgKHdoZXJlIGl0IHN1 cHBvc2VkIHRvIHJlY29nbml6ZQordGhlIFptb2RlbSBzdGFydCBzdHJpbmcpLCBzdGlsbCBub3Ro aW5nLiAgT24gdGhlIG90aGVyIGhhbmQsIGlmIEkgZG8gaXQKK3dpdGggYSBzY3JpcHQgaW5zdGVh ZCBvZiBieSBoYW5kOgorCisgIGRlZiB4eCBvdXRwdXQgdGFrZSBibGFoXDEzLCBzZW5kIC9wcm90 bzp6bW9kZW0gXCUxCisgIAoraXQgd29ya3MsIGF0IGxlYXN0IGludGVybWl0dGVudGx5LiAgQnV0 IHRoYXQncyBpbiByZW1vdGUgbW9kZS4gIFdlIHdvbid0IGJlCit1c2luZyB0aGlzIGluIHJlbW90 ZSBtb2RlLiAgSW4gbG9jYWwgbW9kZSwgd2hlcmUgd2UgaGF2ZSBhIHNlY3VyZSBjb25uZWN0aW9u Cit0byBhbm90aGVyIGNvbXB1dGVyLCBpdCBzZWVtcyB3ZSBjYW4gcmVhZCBmcm9tIHRoZSBwdHkg YW5kIHdyaXRlIHRvIHRoZSBuZXQsCitidXQgd2UgdGltZSBvdXQgd2FpdGluZyB0byByZWFkIGZy b20gdGhlIG5ldDsgbm90aGluZyBhcnJpdmVzLiAgV2VsbCwgd2UKK2tub3cgdGhhdCBpL28gd29y a3MgYm90aCB3YXlzLCBzbyB0aGVyZSBpcyBzb21lIGtpbmQgb2Ygc2NyZXd1cCB3aXRoIHRoZQor Wm1vZGVtIHByb3RvY29sIHN0YXJ0IGl0c2VsZi4gIEluY3JlYXNpbmcgdGhlIChzdGlsbCBoYXJk d2lyZWQgdGltZW91dCkgZnJvbQorNSB0byAyMnNlYyBhbmQgZHJpdmluZyB0aGUgd2hvbGUgcHJv Y2VzcyB3aXRoIGEgc2NyaXB0IHNvIGFzIHRvIGF2b2lkCithdXRvZG93bmxvYWQgYXMgd2VsbCBh cyBtYW51YWwgZGV4dGVyaXR5IGVmZmVjdHMuLi4gIEl0IGp1c3Qgc2l0cyB0aGVyZQorZm9yZXZl ciwgd2F5IGxvbmdlciB0aGFuIDIyIHNlYy4gIF5DJ2luZyBvdXQsIEkgc2VlIHRoYXQgc3ogd2Fz IGluZGVlZAorc3RhcnRlZCBvbiB0aGUgZmFyIGVuZCBhbmQgdGhlIHByb3RvY29sIHdhcyBleGVj dXRpbmcuICBCdXQgaXQgbG9va3MgbGlrZQordGhlIHJlY2VpdmVyICh0aGUgb25lIHJ1bm5pbmcg dW5kZXIgdHRwdHljbWQoKSkgaXMgZ2V0dGluZyB0cmFzaGVkIHBhY2tldHMsCitiZWNhdXNlIChh KSBpdCBzZWVtcyB0byBiZSBzZW5kaW5nIHRoZSBzYW1lIHRoaW5nIG92ZXIgYW5kIG92ZXIgYWdh aW4sIGFuZAorKGIpIHNvbWV0aW1lcyBpdCB3YWl0cyBhcyBsb25nIGFzIDEwIHNlY29uZHMgYmVm b3JlIGFueXRoaW5nIGFycml2ZXMgZnJvbQordGhlIHJlbW90ZS4gIE1heWJlIEkgd2FzIHRvbyBp bXBhdGllbnQ7IEkgaW50ZXJydXB0ZWQgaXQgYWZ0ZXIgNCBtaW51dGVzIGJ1dAoraXQgc2VlbXMg dG8gaGF2ZSBiZWVuIG1ha2luZyBzb21lIHByb2dyZXNzLiAgV2hlbmV2ZXIgdGhlcmUgd2FzIGRh dGEKK2F2YWlsYWJsZSB0byByZWFkIGZyb20gdGhlIG5ldCwgaXQgd2FzIGFsd2F5cyA2NSBieXRl cywgYW5kIGl0IHdhcyBub3QKK2FjdHVhbGx5IHRoZSBzYW1lIGRhdGEgb3ZlciBhbmQgb3Zlci4g IFRoaXMgaXMgdXNpbmcgbHJ6IGFzIHRoZSBleHRlcm5hbAorcHJvdG9jb2wuICBjcnogZ2V0cyBh IGJpdCBmYXJ0aGVyLiAgSW4gdGhpcyBjYXNlIHdlIHJlYWQgdXAgdG8gMjRLIGF0IGEKK2d1bHAs IGJ1dCB0aGUgYW1vdW50IHZhcmllcyBhIGxvdC4gIEl0IGxvb2tzIGxpa2Ugd2UgdG9vayBpbiBh Ym91dCAxLjJNQiBvZgorWm1vZGVtIHByb3RvY29sIGRhdGEsIGJ1dCB3ZXJlIG9ubHkgYWJsZSB0 byBvdXRwdXQgdGhlIGZpcnN0IDIwSyBvZiB0aGUKK2ZpbGUuICBDbGVhcmx5IHRoZXJlIHdlcmUg bG90cyBvZiBlcnJvcnMuICBJbiB0aGUgZW5kLCB0aGUgY3J6IGV4aXRzIHdpdGgKK3N0YXR1cyAx IChmYWlsdXJlKS4KKworQW55d2F5IGl0IGxvb2tzIGxpa2Ugd2UncmUgYmFjayBhdCBuZWVkaW5n IHRvIGZpbmQgYSB3YXkgdG8gYWNjb21wbGlzaAorc29tZXRoaW5nIGxpa2UgVElPQ1JFTU9URSBv biB0aGUgcHR5LCB3aGljaCBpcyB3aGVyZSB3ZSBjYW1lIGluLiAgMTAgSmFuIDIwMDcuCisKK1dp dGhvdXQgYW55IHdheSB0byBtYWtlIHRoZSBwdHkgdHJhbnNwYXJlbnQgYW5kIGZsb3cgY29udHJv bGxlZCwgaXQgd291bGQKK3NlZW0gdG8gbWFrZSBzZW5zZSB0byB3cml0ZSB0byB0aGUgcHR5IGlu IHNtYWxsZXIgY2h1bmtzIHRoYW4gd2UgZG8gdG8gdGhlCituZXQuICBJIGxlZnQgdGhlIHJlYWQt ZnJvbS1wdHktd3JpdGUtdG8tbmV0IGJ1ZmZlciBhdCAyNEsgYW5kIGNoYW5nZWQgdGhlCityZWFk LWZyb20tbmV0LXdyaXRlLXRvLXB0eSBidWZmZXIgdG8gNDggYnl0ZXMuCisKK1VwbG9hZCB1c2lu ZyBsc3ogd29ya2VkIGJ1dCB0b29rIGFib3V0IDMgbWludXRlcy4gIEFjdHVhbGx5IGl0IGRpZG4n dCB3b3JrLgorT24gdGhlIGxvY2FsIGVuZCBpdCBzZWVtZWQgdG8gd29yaywgYnV0IHRoZSBmaWxl IGRpZCBub3QgYXBwZWFyIG9uIHRoZQorcmVtb3RlIGVuZC4gIFRyaWVkIHRoaXMgc2V2ZXJhbCB0 aW1lcywgZWFjaCB0aW1lIHdpdGggZGlmZmVyZW50IHJlc3VsdHMsCithZGRpbmcgbW9yZSBkZWJ1 Z2dpbmcgZWFjaCB0aW1lLiAgVGhlIHByb2JsZW0gdGhpcyB0aW1lIHdhcyB0aGF0IHRoZSBwdHkK K3JlYWQgY291bGQgZ2V0IEVXT1VMREJMT0NLLiAgQ2hhbmdlZCB0aGUgY29kZSB0byBub3QgdHJl YXQgdGhpcyBhcyBhbiBlcnJvciwKK25vdyBabW9kZW0gdXBsb2FkcyBhcmUgc29saWQgYWdhaW4g ZXhjZXB0IEkgbmV2ZXIgZ290IEVXT1VMREJMT0NLIGFnYWluCitlaXRoZXIsIGV2ZW4gdGhvdWdo IEkgcmVwZWF0ZWQgdGhlIHNhbWUgdXBsb2FkIGFib3V0IDEwMDAgdGltZXMgKHdpdGgKK3Rocm91 Z2hwdXQgb2Ygb3ZlciAyTUJwcyBldmVuIHdpdGggZGVidWdnaW5nIG9uKSwgc28gdGhlIHRlc3Qg Zm9yIGl0IGhhcworbm90IGJlZW4gZXhlcmNpc2VkLgorCitPSywgdXBsb2FkcyBzdGlsbCB3b3Jr LiAgQmFjayB0byBkb3dubG9hZGluZy4uLiAgVGhlIHZlcnkgZmlyc3QgcHR5IHJlYWQKK2dldHMg MCBieXRlcywgZm9sbG93ZWQgYnkgdGhlIGZvcmsgdGVzdCB0aGF0IHNob3dzIHRoYXQgaXQgZXhp dGVkIHdpdGgKK2V4aXQgc3RhdHVzIDIuIAorCitOZXh0IHdlIHRyeSBzdGFydGluZyBzeiB3aXRo IHNvbWUgZGlmZmVyZW50IG9wdGlvbnMgb24gdGhlIGZhciBlbmQ6CisKKyAtcTogcXVpZXQgKG5v IG1lc3NhZ2VzKToKKyAgICAgZm9yIHNvbWUgcmVhc29uIHRoaXMgZ2V0cyB0b3RhbGx5IHN0dWNr LgorICAgICBpdCBsb29rcyBhcyBpZiB0aGlzIG9wdGlvbiBpcyBtaXNkb2N1bWVudGVkOworICAg ICBzeiBzZWVtcyB0byBiZSBzZW5kaW5nIHRoZSBsZXR0ZXIgQyAoYXMgaW4gWG1vZGVtIDFLIG9y IHdoYXRldmVyKQorCisgLWU6IGVzY2FwZSAoYWxsIGNvbnRyb2wgY2hhcnMpOgorICAgICBmaXJz dCBhdHRlbXB0IHRvIHJlYWQgcHR5IGZpbmRzIHRoZSBwcm9jZXNzIGdvbmUgd2l0aCBleGl0IHN0 YXR1cyAyLgorCisgLWs6IHNlbmQgMWsgYmxvY2tzOgorICAgICB0aGlzIG9uZSBkaWRuJ3Qgc3Rv cCBpbW1lZGlhdGVseS4gIEl0IHJlYWRzIDQ4IGJ5dGVzIGZyb20gbmV0LCB3cml0ZXMKKyAgICAg NDggdG8gdGhlIHB0eSB3aXRoIG5vIGVycm9yLiAgVGhlbiByZWFkcyAyMSBieXRlcyBmcm9tIHRo ZSBwdHksIHdyaXRlcworICAgICB0aGVtIHRvIHRoZSBuZXQgT0suICBUaGVuIHJlYWRzIDQ4IGJ5 dGVzIGZyb20gbmV0LCB3cml0ZXMgdGhlbSB0byBwdHkgT0ssCisgICAgIHJlYWRzIDIxIGZyb20g cHR5LCB3cml0ZXMgdG8gbmV0IE9LLCBldGMgZXRjLi4uICBJdCBhcHBlYXJzIHRvIGhhdmUKKyAg ICAgd29ya2VkIGJ1dCAoZmluYWwgcmVhZCBmcm9tIHB0eSByZXR1cm5lZCAwLCBmb3JrIHRlc3Qg c2hvd2VkIGxyeiBleGl0ZWQKKyAgICAgd2l0aCBzdGF0dXMgMCksIGJ1dCBvbmx5IDc1NCBieXRl cyB3ZXJlIHJlY2VpdmVkIGZyb20gdGhlIG5ldCB3aGVuIHRoZQorICAgICBmaWxlIGlzIDQyMEsu Li4KKworV2VsbCB0aGlzIG9ubHkgZ29lcyB0byBzaG93IHRoYXQgdGhlIGZhc3RlciB3ZSBzaG92 ZSBzdHVmZiBpbnRvIHRoZSBwdHksIHRoZQord29yc2UgaXQgZ2V0cy4gIFptb2RlbSBkb3dubG9h ZHMgd29uJ3Qgd29yayB1bmxlc3Mgd2UgY2FuIG1ha2UgdGhlIHB0eQordHJhbnNwYXJlbnQgYW5k IGZsb3ctY29udHJvbGxlZC4gIFNvIHRvIHN1bW1hcml6ZSB0b2RheSdzIGRldmVsb3BtZW50czoK KworIC4gc2VwYXJhdGVkIGluL291dCBidWZmZXIgc2l6ZXMKKyAuIGhhbmRsZWQgRVdPVUxEQkxP Q0sKKyAuIGZvdW5kIG91dCB0aGF0IHN6IG9wdGlvbnMgZG9uJ3QgaGVscCBtdWNoCisKKzExIEph biAyMDA3LgorCitOZXh0IGRheS4gIFRoaXMgaGFzIGdvdCB0byBiZSB0aGUgbW9zdCBkZWxpY2F0 ZSBjb2RlIGV2ZXIsIGl0J3MgbGlrZQorV2hhY2stQS1Nb2xlLCBmaXggQSBhbmQgQiBwb3BzIHVw LiAgRXZlbiB3aXRob3V0IHRvdWNoaW5nIGl0LCBzb21ldGhpbmcgdGhhdAord29ya2VkIHBlcmZl Y3RseSBhIDI6MDAgZG9lc24ndCB3b3JrIGF0IGFsbCBhbiBob3VyIGxhdGVyLiAgTWF5YmUgSSBj b3VsZAoraGF2ZSB1c2VkIHBpcGVzIGluc3RlYWQgb2YgcHR5cywgYnV0IHBpcGVzIGhhdmUgcHJv YmxlbXMgb2YgdGhlaXIgb3duLgorVGhlcmUgaGFzIHRvIGJlIGEgd2F5IHRvIGRvIHRoaXMuICBU aGUgdGVsbmV0IHNlcnZlciwgdGhlIFNTSCBzZXJ2ZXIsIGV0YyAtLQordGhleSBhbGwgcnVuIG9u IHB0eXMsIGFuZCB3ZSBjYW4gdXBsb2FkIGZpbGVzIHRvIHRoZW0gd2l0aCBLZXJtaXQuICBXaHk/ CitCZWNhdXNlIEtlcm1pdCBwdXRzIGl0cyB0ZXJtaW5hbCBpbnRvIGFsbCB0aGUgcmlnaHQgbW9k ZXMgdXNpbmcgdGhlCit0aW1lLWhvbm9yZWQgbWV0aG9kcyBvZiB0dHBrdCgpIGFuZCB0dHZ0KCku ICBQZXJoYXBzIGFsbCB3ZSBuZWVkIGlzIGEgY29weQorb2YgdHRwa3QoKSB0aGF0IG9wZXJhdGVz IG9uIHRoZSBwdHkuCisKK09uIHRoYXQgdGhlb3J5LCBsZXQncyBnbyBiYWNrIHRvIEtlcm1pdCBh cyB0aGUgZXh0ZXJuYWwgcHJvdG9jb2wuCitJdCdzIGltcG9ydGFudCB0byBzdXBwcmVzcyBhbGwg bWVzc2FnZXMgYW5kIGRpc3BsYXlzLiAgV2l0aCB0aGF0LAordXBsb2FkcyB3b3JrIGZpbmUsIG5v IGhpdGNoZXMuCisKK0Rvd25sb2FkczogIFdlIGZhaWwgcmlnaHQgYXdheS4gIFRoZSBkZWJ1ZyBs b2cgc2hvd3MgdGhlIEtlcm1pdCBwcm9ncmFtIHRoYXQKK3dlIGFyZSBzdGFydGluZyBpbiB0aGUg cHR5IHNheXM6CisKKyAgIiIgLSBJbnZhbGlkIGNvbW1hbmQtbGluZSBvcHRpb24sIHR5cGUgImtl cm1pdCAtaCIgZm9yIGhlbHAuCisKK0J1dCBvZiBjb3Vyc2Ugd2UgYXJlIG5vdCBnaXZpbmcgaXQg YW4gaW52YWxpZCBjb21tYW5kLWxpbmUgb3B0aW9uLgorU3dpdGNoaW5nIHRvIGdrZXJtaXQgZm9y IHRoZSBleHRlcm5hbCBwcm90b2NvbCwgbm93IHdlIHNlZSB0aGF0IG5vIG1hdHRlcgorY29tbWFu ZC1saW5lIG9wdGlvbnMgd2UgdXNlLCB3ZSByZWFkIDBkIDBkIDBhIGZyb20gdGhlIHB0eSBhbmQg dGhlbiB0aGUKK25leHQgdGltZSB3ZSBnbyB0byByZWFkIGZyb20gdGhlIHB0eSB3ZSBnZXQgMCBi eXRlcyBhbmQgd2FpdHBpZCgpIHNheXMgdGhlCitwcm9ncmFtIGhhcyBleGl0ZWQgd2l0aCBzdGF0 dXMgMS4KKworV2h5IHNob3VsZCBkb3dubG9hZGluZyBiZSBkaWZmZXJlbnQgZnJvbSB1cGxvYWRp bmc/ICB0dHB0eWNtZCBoYXMgbm8gaWRlYSwKK2l0IGRvZXMgZXZlcnl0aGluZyB0aGUgc2FtZS4g IFRoZSBvbmx5IGRpZmZlcmVuY2Ugd291bGQgc2VlbSB0byBiZSB3aGljaAorc2lkZSBzZW5kcyBm aXJzdCwgYnV0IGV2ZW4gdGhhdCB0ZW5kcyB0byBnZXQgd2FzaGVkIG91dCBieSBlYWNoIHByb2dy YW0ncworc3RhcnR1cCBtZXNzYWdlcy4KKworRG93bmxvYWRpbmcgd2l0aCBLZXJtaXQgd29ya2Vk IDIgZGF5cyBhZ28sIHdoYXQncyBkaWZmZXJlbnQgbm93PyAgVGhlIGJ1ZmZlcgorc2l6ZXMuICBQ dXR0aW5nIHRoZSBuZXQtdG8tcHR5IGJhY2sgdXAgdG8gMjRLIChmcm9tIDQ4IGJ5dGVzKS4uLiAg Tm93IGl0Cit3b3JrcyBhZ2Fpbi4KKworQ29uY2x1c2lvbjogS2VybWl0IGNvbmRpdGlvbnMgdGhl IHB0eSBjb3JyZWN0bHksIFptb2RlbSBkb2VzIG5vdC4gIFRoZXJlZm9yZQordHRydW5jbWQoKSBt dXN0IGR1cGxpY2F0ZSB3aGF0IHR0cGt0KCkgZG9lcy4KKworT3Igbm90LiAgQmVjYXVzZSByeiB3 b3JrcyBmaW5lIG9uIHNzaC90ZWxuZXQgcHR5cyB0b28uICBCdXQgbm90IG9uIG91ciBwdHkuCits cnogZXhpdHMgaW1tZWRpYXRlbHkgd2l0aCBzdGF0dXMgY29kZSAyID0gMDEwMDAgYnV0IHRoZXJl IGFyZSBubyBjbHVlcyBpbgordGhlIGxyei5jIHNvdXJjZSBjb2RlLCBJIGRvbid0IGV2ZW4gc2Vl IHRoaXMgZXhpdCBzdGF0dXMgc2V0IGFueXdoZXJlLgorVW5yZWRpcmVjdGluZyBzdGRlcnIsIEkg c2VlIHRoYXQgdGhlIGVycm9yIGlzICJscno6IGdhcmJhZ2Ugb24gY29tbWFuZCBsaW5lIi4KKwor V2h5IGRvIGJvdGggS2VybWl0IGFuZCBabW9kZW0gc29tZXRpbWVzIHRoaW5rIHRoZXkgYXJlIHJl Y2VpdmluZyBhbiBpbnZhbGlkCitjb21tYW5kIGxpbmU/ICBJZiBJIGNvdWxkIGNhcHR1cmUgdGhl IGdhcmJhZ2UuLi4KKworU2lkZSB0cmlwICMxOiAoInB0eS5sb2ciLE9fV1JPTkxZKSBnaXZlcyAi bm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSIuCitDaGFuZ2VkIHRoaXMgdG8gKCJwdHkubG9nIixP X0NSRUFULDA2NDQpIGFuZCBub3cgaXQgZG9lc24ndCBnZXQgYW4gZXJyb3IsCithbmQgaXQgY3Jl YXRlcyB0aGUgZmlsZSwgYnV0IG5vdCB3aXRoIDA2NDQgcGVybWlzc2lvbnMsIGFuZCB3aXRoIG5v dGhpbmcKK3dyaXR0ZW4gaW4gaXQuICBIb3cgY29tZSBub3RoaW5nIHdvcmtzPworCitGaW5lLCB0 aGUgZGVidWcgbG9nIHNob3dzIHRoYXQgdHRwdHljbWQoKSByZWNlaXZlcyB0aGUgY29ycmVjdCBz dHJpbmcKKyhlLmcuICJscnogLXYiKS4gIEl0IHBhc3NlcyBpdCB0byBkb19wdHkoKSBjb3JyZWN0 bHksIGFuZCBkb19wdHkoKSBwYXNzZXMgaXQKK3RvIGV4ZWNfY21kKCksIHdoaWNoIHJ1bnMgY2tz cGxpdCgpIG9uIGl0LCBjb21pbmcgdXAgKGluIHRoaXMgY2FzZSkgd2l0aAorImxyeiIgYW5kICIt diIsIHdoaWNoIGlzIHJpZ2h0LCBhbmQgdGhlbjoKKworICAgIGFyZ3MgPSBxLT5hX2hlYWQgKyAx OworICAgIGV4ZWN2cChhcmdzWzBdLGFyZ3MpOworCitleGVjdnAoKSB3YW50cyB0aGUgYXJncyBh cnJheSB0byBoYXZlIGEgbnVsbCBlbGVtZW50IGF0IHRoZSBlbmQuICBja3NwbGl0KCkKK2RvZXMg aW5kZWVkIGRvIHRoYXQsIG9yIGF0IGxlYXN0IHRoZSBjb2RlIGlzIHRoZXJlLiAgQWRkZWQgY29k ZSB0byBleGVjX2NtZCgpCit0byB2ZXJpZnkgdGhlIGFyZ3VtZW50IGxpc3QgYW5kIHRoYXQgaXQg aXMgbnVsbC10ZXJtaW5hdGVkLiAgU28gZmFyIGl0IGlzLgorCitBbnl3YXksIHdlIGhhdmUgdHJh ZmZpYyBiZXR3ZWVuIHRoZSBabW9kZW0gcGFydG5lcnMsIGJ1dCBubyBqb3kuCitDb21tZW50aW5n IG91dCB0aGUgYml0IHRoYXQgcmVkaXJlY3RzIHN0ZGVyciwgbm93IEkgY2FuIHNlZSBpdCBvbiBt eSBzY3JlZW4KK2luIHJlYWwgdGltZToKKworICBscnogd2FpdGluZyB0byByZWNlaXZlLlJldHJ5 IDA6IEJhZCBDUkMKKyAgUmV0cnkgMDogR290IEVSUk9SCisgIFJldHJ5IDA6IFRJTUVPVVQKKyAg UmV0cnkgMDogVElNRU9VVAorICBSZXRyeSAwOiBUSU1FT1VUCisgIFJldHJ5IDA6IFRJTUVPVVQK KworZXRjIGV0YywgZm9yZXZlci4gIFRyeWluZyBzeiAtZSBvbiB0aGUgZmFyIGVuZCwgSSBnZXQ6 CisKKyAgUmV0cnkgMDogQmFkIENSQworICBSZXRyeSAwOiBHYXJiYWdlIGNvdW50IGV4Y2VlZGVk CisgIFJldHJ5IDA6IEdhcmJhZ2UgY291bnQgZXhjZWVkZWQKKyAgUmV0cnkgMDogR2FyYmFnZSBj b3VudCBleGNlZWRlZAorICBSZXRyeSAwOiBHYXJiYWdlIGNvdW50IGV4Y2VlZGVkCisgIFJldHJ5 IDA6IEdhcmJhZ2UgY291bnQgZXhjZWVkZWQKKyAgUmV0cnkgMDogR2FyYmFnZSBjb3VudCBleGNl ZWRlZAorICBSZXRyeSAwOiBHYXJiYWdlIGNvdW50IGV4Y2VlZGVkCisgIC4uLgorICBSZXRyeSAw OiBHb3QgRVJST1IKKyAgUmV0cnkgMDogQmFkIENSQworICBSZXRyeSAwOiBHb3QgRVJST1IKKyAg UmV0cnkgMDogR290IEVSUk9SCisgIGxyejogeHh1ZmlvLmMgcmVtb3ZlZC4KKworU28gYXBwYXJl bnRseSBpdCdzIG5vdCBhIG1hdHRlciBvZiBlc2NhcGluZy4gIFRyeWluZyBzb21lIG90aGVyIHN0 dWZmLCBJCitjYXVnaHQgdGhlIGNvbW1hbmQtbGluZSBwcm9ibGVtIGluIHRoZSBhY3Q6CisKKyAg bHJ6OiBnYXJiYWdlIG9uIGNvbW1hbmRsaW5lCisgIFRyeSBgbHJ6IC0taGVscCcgZm9yIG1vcmUg aW5mb3JtYXRpb24uCisKK0RlYnVnIGxvZyBzaG93czoKKworICBja3NwbGl0IHJlc3VsdFtscnpd PTEKKyAgY2tzcGxpdCByZXN1bHRbLXZdPTIKKyAgZXhlY19jbWQgYXJnW2xyel09MAorICBleGVj X2NtZCBhcmdbLXZdPTEKKyAgZXhlY19jbWQgYXJnW109MgorCitBbiBlbXB0eSBzdHJpbmcgYXQg dGhlIGVuZCBpbnN0ZWFkIG9mIGEgbnVsbCBwb2ludGVyLiAgSSByZWFsbHkgZG8gbm90IHNlZQor YW55IHdheSB0aGF0IGNvdWxkIGhhcHBlbiwgYnV0IHJhdGhlciB0aGFuIGRpZyBpbnRvIGNrc3Bs aXQoKSBhZ2FpbiBhZnRlcgorYWxsIHRoZXNlIHllYXJzIEkgYWRkZWQgYSB0ZXN0IGZvciB0aGlz IGluIGV4ZWNfY21kKCksIHdoaWNoLCBvZiBjb3Vyc2UKK2FmdGVyIGFkZGluZyBpdCwgbmV2ZXIg ZW5jb3VudGVyZWQgdGhpcyBiZWhhdmlvciBhZ2Fpbi4KKworRmlkZGxlZCB3aXRoIHB0eSBidWZm ZXIgc2l6ZSBhZ2Fpbi4gIE1hZGUgaXQgNTEyIGJ5dGVzIGluc3RlYWQgb2YgMjRLLgorWm1vZGVt IGRvd25sb2FkcyBhcmUgdGhlIHNhbWUgKFJldHkgMDogVElNRU9VVCwgb3ZlciBhbmQgb3Zlciku ICBCdXQgSSBkb24ndAorc2VlIHdoYXQgdGhlIHByb2JsZW0gaXMgLS0gZXZlcnkgdGltZSB3ZSBy ZWNlaXZlIG4gYnl0ZXMgZnJvbSB0aGUgbmV0LCB3ZQord3JpdGUgbiBieXRlcyBzdWNjZXNzZnVs bHkgdG8gdGhlIHB0eSBhbmQgdGhlcmUgYXJlIG5vIGVycm9ycy4gIEJ1dCBpdCBhbHNvCitsb29r cyBsaWtlIHRoZSByZW1vdGUgc2VuZGVyIGlzIHNlbmRpbmcgdGhlIGZpbGUgaGVhZGVyIG92ZXIg YW5kIG92ZXIKK2JlY2F1c2UgaXQncyBub3QgcmVjZWl2aW5nIGFuIGFja25vd2xlZGdtZW50LiAg SWYgd2UncmUgbm90IGxvc2luZyBkYXRhLAordGhlbiBtYXliZSBpdCdzIGEgdHJhbnNwYXJlbmN5 IHByb2JsZW0uCisKK1RyaWVkIHVuY29tbWVudGluZyB0aGUgVElPQ2JsYWggc3R1ZmYgSSBjb21t ZW50ZWQgb3V0IGJlZm9yZS4gIE5vdyBpbnN0ZWFkCitvZiBvbmx5IHRpbWVvdXRzIEkgZ2V0Ogor CisgIGxyeiB3YWl0aW5nIHRvIHJlY2VpdmUuUmV0cnkgMDogQmFkIENSQworICBSZXRyeSAwOiBH b3QgRVJST1IKKyAgUmV0cnkgMDogQmFkIENSQworICBSZXRyeSAwOiBHb3QgRVJST1IKKyAgUmV0 cnkgMDogQmFkIENSQworICBSZXRyeSAwOiBHb3QgRVJST1IKKyAgUmV0cnkgMDogVElNRU9VVAor Cit3aGljaCBpcyBvZGQgYmVjYXVzZSB0aGUgVElPQ1JFTU9URSBpb2N0bCBmYWlsZWQgd2l0aCBl cnJubyAxNCwgRUZBVUxULAorYmFkIGFkZHJlc3MsIHdoaWNoIHNob3VsZCBpbmRpY2F0ZSBpdCBo YWQgbm8gZWZmZWN0LiAgV2UncmUgc3RpbGwgcmVjZWl2aW5nCitkYXRhIGZyb20gdGhlIHJlbW90 ZSBpbiB0aW55IGNodW5rcyAoZnJvbSAxMiB0byA2NSBieXRlcyksIGFwcGFyZW50bHkgdGhlCitz YW1lIHN0dWZmIChmaWxlIGhlYWRlciksIGFuZCB3cml0aW5nIHRoZW0gdG8gdGhlIHB0eSBzdWNj ZXNzZnVsbHkgYnV0Citub3RoaW5nLi4uCisKK0xvb2tlZCBhdCBjbG9uaW5nIHR0cGt0KCkgZm9y IHRoZSBwdHksIGJ1dCB0aGVzZSBzdHVwaWQgcm91dGluZXMgdXNlIGdsb2JhbAordHR5IG1vZGUg c3RydWN0cyBzbyBpdCdzIG5vdCBnb2luZyB0byBiZSBlYXN5LgorCitXZWxsLCB3ZSBnb3QgZXhh Y3RseSBub3doZXJlIHRvZGF5LCBidXQgSSB0aGluayBJJ2xsIGxlYXZlIHN0ZGVyciBhcyBpdCBp cworc28gdXNlcnMgd2lsbCBzZWUgc29tZSBmZWVkYmFjazsgbm8gcmVhc29uIG5vdCB0by4KKwor V0hZIERPIEtFUk1JVCBET1dOTE9BRFMgV09SSyBBTkQgWk1PREVNIE5PVD8KKworSXMgaXQgOC1i aXQgdHJhbnNwYXJlbmN5PyAgVXAgdGlsIG5vdyBJJ3ZlIGJlZW4gdGVzdGluZyB3aXRoIHRleHQg ZmlsZXMuCitJZiBJIHRyeSB0byBkb3dubG9hZCBhIGJpbmFyeSB3aGF0IGhhcHBlbnM/ICBGYWls cyBhZnRlciA5OSBzZWNvbmRzLiAgUGFja2V0Citsb2cgZnJvbSB0aGUgZmFyIGVuZCBzaG93cyB0 aGF0IGFzIHNvb24gYXMgdGhlIGZpcnN0IHBhY2tldCBjb250YWluaW5nIDgtYml0CitkYXRhIGlz IHNlbnQsIGV2ZXJ5dGhpbmcgc3RvcHMuICBBdCBsZWFzdCBJIGdvdCBvbmUgb2YgdGhlc2U6CisK KyAgMTc6MjM6NTYuNDc1IGV4ZWNfY21kIGFyZ1tna2VybWl0XT0wCisgIDE3OjIzOjU2LjQ3NSBl eGVjX2NtZCBhcmdbLXFyXT0xCisgIDE3OjIzOjU2LjQ3NSBleGVjX2NtZCBhcmdbXT0yCisgIDE3 OjIzOjU2LjQ3NSBleGVjX2NtZCBTVUJTVElUVVRJTkcgTlVMTD0yICA8LS0gdGhlIGNvZGUgSSBq dXN0IGFkZGVkCisKK0RvaW5nIHRoaXMgYWdhaW4gc2hvd3MgdGhlIHNhbWUgdGhpbmcgb24gdGhl IG5lYXIgZW5kLiAgQWxsIHRoZSA3LWJpdC1vbmx5CitwYWNrZXRzIGFyZSBzZW50IGFuZCBhY2tu b3dsZWRnZWQgT0suICBUaHJlZSA4LWJpdCBkYXRhIHBhY2tldHMgYXJyaXZlIGFuZAorbm90aGlu ZyBlbHNlIGhhcHBlbnMgYWZ0ZXIgdGhhdC4gIFRoaXMgaXMgd2l0aCBHLUtlcm1pdC4KKworVGhl IHNhbWUgdGhpbmcgaGFwcGVucyB3aXRoIEMtS2VybWl0IHJlY2VpdmluZy4gIEJ1dCBpZiBJIGNo YW5nZSBDLUtlcm1pdCdzCisua2VybXJjIHRvIHR1cm4gb2ZmIHN0cmVhbWluZyBhbmQgdXNlIGEg c2hvcnQgcGFja2V0IGxlbmd0aDoKKworVGhlIHRyYW5zZmVyIHdvcmtzLCBldmVuIHRob3VnaCBp dCdzIHNlbmRpbmcgOC1iaXQgYnl0ZXMuICBTbyB0aGUgcHJvYmxlbSBpcworbm90IDgtYml0IGRh dGEgYWZ0ZXIgYWxsLCBwZXIgc2UuICBGYWN0czoKKworIC4gS2VybWl0IGNhbiByZWNlaXZlIHN0 cmVhbWluZyB0cmFuc2ZlcnMgb2YgNy1iaXQgZmlsZXMuCisgLiBLZXJtaXQgY2FuIG5vdCByZWNl aXZlIHN0cmVhbWluZyB0cmFuc2ZlcnMgb2YgOC1iaXQgZmlsZXMuCisgLiBLZXJtaXQgY2FuIHJl Y2VpdmUgbm9uc3RyZWFtaW5nIHRyYW5zZmVycyBvZiA4LWJpdCBmaWxlcyB3aXRoIHNob3J0IHBh Y2tldHMuCisgLiBLZXJtaXQgY2FuIHJlY2VpdmUgbm9uc3RyZWFtaW5nIHRyYW5zZmVycyBvZiA4 LWJpdCBmaWxlcyB3aXRoIDFLIHBhY2tldHMuCisgLiBLZXJtaXQgY2FuIHJlY2VpdmUgbm9uc3Ry ZWFtaW5nIHRyYW5zZmVycyBvZiA4LWJpdCBmaWxlcyB3aXRoIDRLIHBhY2tldHMuCisKK1NvIGl0 J3MgdGhlIGNvbWJpbmF0aW9uIG9mIHN0cmVhbWluZyBhbmQgOC1iaXQgZGF0YT8gIDEyIEphbiAy MDA3LgorCitBcyBhIHRlc3QgSSBtYWRlIGEgbmV3IHJvdXRpbmUgcHR5X21ha2VfcmF3KCkgdGhh dCBkb2VzIGNmbWFrZXJhdygpIChhCitub25wb3J0YWJsZSAiUE9TSVgtbGlrZSIgZnVuY3Rpb24g a25vd24gdG8gYmUgdXNlZCBvbiBwdHlzIGluIGFwcGxpY2F0aW9ucwordGhhdCBkbyBhcHByb3hp bWF0ZWx5IHdoYXQgd2UncmUgYXR0ZW1wdGluZykuICBSZXN1bHRzOgorCisgU29sYXJpczogZXJy bm8gMjUgLSBpbmFwcHJvcHJpYXRlIGlvY3RsIGZvciBkZXZpY2UuCisKK1RoaXMgaGFwcGVucyBl dmVuIHdoZW4gd2UgdHJ5IHRvIGdldCB0aGUgdGVybWluYWwgbW9kZXMgd2l0aCB0Y2dldGF0dHIo KSwKK3doaWNoIGlzIGNvbXBsZXRlbHkgbnV0cy4gIFdlIHBhc3MgaXQgdGhlIGZpbGUgZGVzY3Jp cHRvciBvZiB0aGUgcHR5IG1hc3RlciwKK3doaWNoIGlzIHN1cHBvc2VkIHRvIHdvcmsuICBCdXQg aW4gTWFjIE9TIFgsIHRoZXJlIGFyZSBubyBlcnJvcnMuICBCdXQKK2Rvd25sb2FkcyBzdGlsbCBk b24ndCB3b3JrOyBsb3RzIG9mIGVycm9ycyBidXQgdGhlIHBhdHRlcm4gaXMgZGlmZmVyZW50Lgor VXNpbmcgYSB2ZXJ5IHNtYWxsIGJ1ZmZlcjoKKworICBSZXRyeSAwOiBCYWQgQ1JDCisgIFJldHJ5 IDA6IEdhcmJhZ2UgY291bnQgZXhjZWVkZWQKKyAgUmV0cnkgMDogR2FyYmFnZSBjb3VudCBleGNl ZWRlZAorICBSZXRyeSAwOiBHb3QgVElNRU9VVAorICBSZXRyeSAwOiBUSU1FT1VUCisgIFJldHJ5 IDA6IEJhZCBDUkMKKyAgUmV0cnkgMDogQmFkIENSQworICBSZXRyeSAwOiBHYXJiYWdlIGNvdW50 IGV4Y2VlZGVkCisgIFJldHJ5IDA6IEdhcmJhZ2UgY291bnQgZXhjZWVkZWQKKyAgUmV0cnkgMDog VElNRU9VVAorICBSZXRyeSAwOiBHb3QgRVJST1IKKyAgUmV0cnkgMDogVElNRU9VVAorICBSZXRy eSAwOiBHYXJiYWdlIGNvdW50IGV4Y2VlZGVkCisgIFJldHJ5IDA6IEdhcmJhZ2UgY291bnQgZXhj ZWVkZWQKKyAgUmV0cnkgMDogQmFkIENSQworCitVc2luZyBhIGJpZ2dlciBidWZmZXI6CisKKyAg UmV0cnkgMDogR2FyYmFnZSBjb3VudCBleGNlZWRlZAorICBSZXRyeSAwOiBHYXJiYWdlIGNvdW50 IGV4Y2VlZGVkCisgIFJldHJ5IDA6IEdhcmJhZ2UgY291bnQgZXhjZWVkZWQKKyAgUmV0cnkgMDog R2FyYmFnZSBjb3VudCBleGNlZWRlZAorICBSZXRyeSAwOiBHYXJiYWdlIGNvdW50IGV4Y2VlZGVk CisgIFJldHJ5IDA6IEdhcmJhZ2UgY291bnQgZXhjZWVkZWQKKyAgKHNldmVyYWwgc2NyZWVuc2Z1 bCkKKworVmFyaW91cyBvdGhlciBjb21iaW5hdGlvbnMuLi4gTm90aGluZyBzZWVtcyB0byB3b3Jr LgorCitJbnNpZ2h0OiB0ZWxuZXRkIGRvZXMgZXhhY3RseSB3aGF0IHdlIHdhbnQgdG8gZG8sIHNv cnQgb2YuCitCdXQgaXQgdXNlcyBUSU9DUEtULCBzbyBldmVyeSB0aW1lIGl0IHJlYWRzIGZyb20g cHR5LCBpdCByZWNlaXZlcworb25lIGNvbnRyb2wgYnl0ZSBhbmQgdGhlbiB0aGUgZGF0YSBieXRl cywgd2hpY2ggd291bGQgY29tcGxpY2F0ZSBvdXIKK2J1ZmZlcmluZyBzY2hlbWUgY29uc2lkZXJh Ymx5LiAgQW55d2F5IHRoZSBUSU9DUEtUIGlvY3RsKCkgZmFpbHMgb24KK01hYyBPUyBYIHdpdGgg MTQgIkJhZCBhZGRyZXNzIi4KKworQWxzbyBzZWU6IHNub29wc2VydmVyLmMgKGZvdW5kIGluIEdv b2dsZSkuICBJdCBzZWVtcyB0byBkbyB0aGluZ3MgaW4gYQorc2xpZ2h0bHkgZGlmZmVyZW50IHdh eSAtLSBpdCBzZXRzIHN0ZG91dCB0byByYXcgYW5kIHRoZW4gZHVwcyBpdCB0byB0aGUKK3NsYXZl IHNpZGUgb2YgdGhlIHB0eT8KKworTWF5YmUgaXQncyBhIG1pc3Rha2UgdG8gdXNlIHRoZSBja3Vw dHkuYyByb3V0aW5lcy4gIFRoZXkgYXJlIGRlc2lnbmVkIGZvcgorY3JlYXRpbmcgYW5kIGFjY2Vz c2luZyBhbiBpbnRlcmFjdGl2ZSBzZXNzaW9uLiAgTWF5YmUganVzdCBjb3B5IG9uZSBvZiB0aGUK K290aGVyIHByb2dyYW1zLgorCisxOCBKYW4gMjAwNy4gIFRyaWVkIGdvaW5nIGJhY2sgdG8gYmxv Y2tpbmcgcmF0aGVyIHRoYW4gbm9uYmxvY2tpbmcgcmVhZHMKK3RvIHNlZSBpZiBpdCB3b3VsZCBt YWtlIGEgZGlmZmVyZW5jZSwgYWZ0ZXIgYWxsIHRoZSBvdGhlciBjaGFuZ2VzLiAgTm9wZS4KK09L LCBsZXQncyBsb29rIGF0IHNvbWUgb2YgdGhlc2Ugb3RoZXIgcHJvZ3JhbXMuLi4KKworc25vb3Bz ZXJ2ZXIuYy4gIEkgZG9uJ3Qga25vdyBleGFjdGx5IHdoYXQgdGhpcyBpcyBvciB3aGVyZSBpdCdz IGZyb20gb3Igd2hhdAorcGxhdGZvcm0gaXQgcnVucyBvbiBhbmQgdGhlcmUgYXJlIG5vIGNvbW1l bnRzIHRvIHNwZWFrIG9mLCBidXQgaXQgZG9lcworYXBwcm94aW1hdGVseSB3aGF0IHR0cHR5Y21k KCkgZG9lcy4gIFRvIGdldCBhIHB0eSBpdCB1c2VzIG9wZW5wdHkoKToKKworICBpZiAob3BlbnB0 eSgmcHR5LCAmdHR5LCBOVUxMLCBOVUxMLCBOVUxMKSA9PSAtMSkKKwordGhlbiBjcmVhdGVzIGEg Zm9yay4gIEluIHRoZSBmb3JrLCBpdCBjbG9zZXMgdGhlIHB0eSAobWFzdGVyKSBhbmQKK21hbmlw dWxhdGVzIHRoZSBtb2RlcyBvZiB0aGUgdHR5IChzbGF2ZSksIGR1cHMgdHR5IHRvIGJlIHN0ZGlv LCBhbmQgdGhlbgorZG9leCBleGVjdigpIG9uIHRoZSBjb21tYW5kLiAgTWVhbndoaWxlIHRoZSB1 cHBlciBmb3JrIGNsb3NlcyB0aGUgdHR5Cisoc2xhdmUpLCBnZXRzIHRoZSBhdHRyaWJ1dGVzIG9m IHN0ZGluLCB1c2luZyBhdGV4aXQoKSB0byBoYXZlIHRoZW0KK2F1dG9tYXRpY2FsbHkgcmVzdG9y ZWQgb24gZXhpdC4gIFRoZW4gaXQgc2V0cyBzdGRpbiB0byByYXcgbW9kZSBhbmQgZW50ZXJzCit0 aGUgc2VsZWN0KCkgbG9vcCBvbiBzdGRpbiwgdGhlIHB0eSBtYXN0ZXIsIGFuZCB0aGUgbmV0LiAg SXQgdXNlcyByZWd1bGFyCitibG9ja2luZyByZWFkcy4gIEl0IGRvZXMgbm90IHVzZSBUSU9DUEtU IG9yIGFueXRoaW5nIGxpa2UgaXQuCisKK29wZW5wdHkoKSBpcyBzdXBwb3J0ZWQgb246IExpbnV4 LCBNYWMgT1MgWCwgTmV0QlNELCBGcmVlQlNELCAuLi4KK29wZW5wdHkoKSBpcyBOT1Qgc3VwcG9y dGVkIG9uOiBTb2xhcmlzLCBIUC1VWCwgLi4uCisKKyAxLiBUcnkgY29weWluZyB0aGUgcHR5IGNv ZGUsIGJ1dCBrZWVwIGV2ZXJ5dGhpbmcgZWxzZSB0aGUgc2FtZS4KKworSSBkaWQgdGhpczsgaXQg Y29tcGlsZXMgYW5kIHN0YXJ0cyBPSywgdXBwZXIgZm9yayAodHRwdHljbWQpIGRlYnVnIGxvZyBz aG93cworbm8gZXJyb3JzLCBidXQgbm90aGluZyBoYXBwZW5zLiAgTG9ncyBzaG93IHRoYXQgdGhl IEtlcm1pdCBwcm9ncmFtIHRoYXQgaXMKK3N0YXJ0ZWQgaW4gdGhlIHN1YmZvcmsgc2VlbXMgdG8g ZGllIGFzIHNvb24gYXMgaXQgcmVhY2hlcyBlb2Ygb24gaXRzIGluaXQKK2ZpbGUuICBUaGUgZ29v ZCBuZXdzLCBhdCBsZWFzdCwgaXMgdGhhdCBzZWxlY3QoKSBkb2Vzbid0IHJlcG9ydCByZXBvcnQg dGhhdAordGhlIHB0eSBpcyByZWFkeSB0byBiZSByZWFkLiAgQ2xlYXJseSB0aGUgZmlsZSBkZXNj cmlwdG9ycyBhcmVuJ3QgYmVpbmcKK2Fzc2lnbmVkIGFzIGV4cGVjdGVkLCBvciBhcyBiZWZvcmUu CisgIAorSW4gY2t1cHR5LmMgZ2V0cHR5c2xhdmUoKSBkdXAyJ3MgdGhlIHNsYXZlIGZkIHRvIDAg YW5kIDEuICBUaGUgbmV3IGNvZGUKK2RvZXMgZXhhY3RseSB0aGUgc2FtZSB0aGluZy4gIERlYnVn IGxvZyBtYWtlcyBpdCBsb29rIGxpa2UgdGhlIGZvcmtlZCBrZXJtaXQKK2lzIG5vdCByZWNlaXZp bmcgaXRzIGNvbW1hbmQgbGluZS4gIEJ1dCBub3cgSSdtIG5vdCBldmVuIHN1cmUgdGhhdCB0aGUK K2ZvcmtlZCBrZXJtaXQgc3RhcnRlZCBhdCBhbGwuICBwcyBmcm9tIGFub3RoZXIgdGVybWluYWwg ZG9lc24ndCBzaG93IGl0LgorCisxOSBKYW4gMjAwNzogTm90aWNlZCB0aGF0IGluIHNub29wc2Vy dmVyLCB0aGUgc2VsZWN0KCkgY2FsbHMgdXNlIHN0YW5kYXJkCitpbnB1dCBhbmQgb3V0cHV0IGZp bGUgZGVzY3JpcHRvcnMsIHJhdGhlciB0aGFuIHRoZSBwdHkgbWFzdGVyLiAgTWFkZSB0aGF0Citj aGFuZ2UuLi4gIEluIGRvaW5nIHRoYXQgSSBoYWQgdG8gbG9vayBhdCBldmVyeSBmaWxlIGRlc2Ny aXB0b3IgaW4gZXZlcnkKK2xpbmUgb2YgY29kZSBhbmQgZGlzY292ZXJlZCBhIGNvdXBsZSBtaXN0 YWtlcywgZml4ZWQgdGhlbSwgcHV0IGJhY2sgdGhlCitvcmlnaW5hbCBjb2RlIGJ1dCB3aXRoIHRo ZSBmaXhlcywgdHJpZWQgaXQsIGJ1dCBubyBjaGFuZ2U7IGNhbiB1cGxvYWQgT0sgYnV0CitzdGls bCBjYW4ndCBkb3dubG9hZCB3aXRoIFptb2RlbSB3aXRob3V0IGxvdHMgb2YgZXJyb3JzIGFuZCB1 bHRpbWF0ZQorZmFpbHVyZS4gIEdvaW5nIGJhY2sgdG8gdGhlIGFsdGVybmF0aXZlIHZlcnNpb24g YW5kIHRyeWluZyB0byBnZXQgdGhlIHRoZQorZmlsZSBkZXNjcmlwdG9ycyBzb3J0ZWQgb3V0LCBu b3cgaXQgYXBwZWFycyB0aGF0IHRoZSBleHRlcm5hbCBLZXJtaXQgcHJvZ3JhbQorbmV2ZXIgZXZl biBzdGFydHMgaW4gdGhlIGxvd2VyIGZvcmsuICBBZnRlciBhIGJpdCBtb3JlIGZpZGRsaW5nIEkg c29ydCB0aGF0CitvdXQsIGJ1dCBub3cgd2hlbiB0aGUgbG93ZXIgS2VybWl0IHByb2dyYW0gZ29l cyB0byBvcGVuICIvZGV2L3R0eSIgaXQgZ2V0cworZXJybm8gNiAiRGV2aWNlIG5vdCBjb25maWd1 cmVkIi4gIEZvcmNpbmcgaXQgdG8gdXNlIHN0ZGlvIHdpdGggIi1sIDAiLCBpdAorZ2V0cyBwYXN0 IHRoaXMgYW5kIGFjdHVhbGx5IHNlbmRzIGl0cyBmaXJzdCBwYWNrZXQuICBCdXQgdGhlIEtlcm1p dCBvbiB0b3AKK3JlYWRzIG5vdGhpbmcgZnJvbSB0aGUgcHR5LgorCitOZXh0LCBJIGNoYW5nZSB0 aGUgcHR5IGZkIGZyb20gU1RESU5fRklMRU5PIGFuZCBTVERPVVRfRklMRU5PIHRvIHNsYXZlZmQu CitObyBkaWZmZXJlbmNlLiAgTmV4dCBJIGNvbW1lbnQgb3V0IHRoZSBkdXAyKCkgY2FsbHMuICBU aGlzIHRpbWUgSSBnZXQgc29tZQorYWN0aW9uLiAgVGhlIHRyYW5zZmVyIHN0YXJ0cywgYnV0IG9u bHkgb25lIHBhY2tldCBjb21lcy4gIExvZyBzaG93cyB0aGF0Cit0aGUgbG93ZXIgS2VybWl0IHNl bmRzIGl0cyBTIHBhY2tldC4gIFRoZSB1cHBlciBLZXJtaXQgcmVjZWl2ZXMgdGhlIEFDSworYnV0 IHRoZSBsb3dlciBLZXJtaXQgbmV2ZXIgZ2V0cyBpdC4gIFRoZSB3cml0ZSB0byB0aGUgcHR5IHN1 Y2NlZWRzLCBubworZXJyb3IuICBEaWZmZXJlbnQgY29tYmluYXRpb25zIGdpdmUgZGlmZmVyZW50 IHJlc3VsdHMuICBJZiB3cml0ZSB0byBtYXN0ZXIKK2FuZCByZWFkIGZyb20gdGhlIHNsYXZlLCBJ IGdldCBwYWNrZXRzIGluIGJvdGggZGlyZWN0aW9ucyBidXQgdG9ucyBvZgorZXJyb3JzLi4uLiAg VGhpcyBoYXBwZW5zIG9ubHkgaWYgSSBjb21tZW50IG91dCB0aGUgZHVwMigpJ3MuCisKKzI1IEph biAyMDA3OiBBZnRlciBsZWF2aW5nIGl0IHNpdCBmb3IgYSB3aGlsZSwgYW5kIHJlYWxpemluZyB0 aGF0IHdoYXQgSSdtCit0cnlpbmcgdG8gZG8gaGFzIHRvIGJlIHBvc3NpYmxlIGJlY2F1c2Ugc28g bXVjaCBvdGhlciBzb2Z0d2FyZSBkb2VzIHRoZSBzYW1lCit0aGluZyAoZS5nLiBUZWxuZXQgc2Vy dmVycyksIEkgcHV0IHRoaW5ncyBiYWNrIHRvIGhvdyB0aGV5IHdlcmUgb3JpZ2luYWxseQorLS0g dGhlIHVwcGVyIGZvcmsgKEtlcm1pdCkgdXNlcyB0aGUgbWFzdGVyIGFuZCB0aGUgbG93ZXIgZm9y ayB0aGUgc2xhdmUuCitUaGUgdXBwZXIgZm9yayBwdXRzIHRoZSBtYXN0ZXIgaW4gcmF3IG1vZGUs IHRoZSBsb3dlciBmb3JrIHB1dHMgdGhlIHNsYXZlIGluCityYXcgbW9kZS4gIFRoZSBsb3dlciBm b3JrIGR1cDIncyB0aGUgc2xhdmUgZmQgdG8gc3RkaW4vb3V0LiAgU2VuZCBmaWxlIGluCityZW1v dGUgbW9kZSB1c2luZyBleHRlcm5hbCBLZXJtaXQ6IHdvcmtzIE9LIGJ1dCBzZWxlY3QoKSB0aW1l cyBvdXQgYXQgdGhlCitlbmQuICBUaGlzIG1lYW5zIHRoYXQgdGhlIHNlbGYtY29udGFpbmVkIHB0 eSBjb2RlIGluIHR0cHR5Y21kKCkgaXMgc29ydGVkCitvdXQgLS0gYWxsIHRoZSBmaWxlIGRlc2Ny aXB0b3JzIGdvIHRvIHRoZSByaWdodCBwbGFjZSwgZXRjLCBhbmQgbm93IHdlIGNhbgordXNlIHRo aXMgcm91dGluZSBhcyBhIHRlc3RiZWQsIHJhdGhlciB0aGFuIHRoZSBvcmlnaW5hbCBja3VwdHku Yy1iYXNlZCBvbmUuCisKK0J1dCBzZW5kIHdpdGggbHN6LCBjc3osIGFuZCByZWd1bGFyIHJ6OiBO b3RoaW5nIGhhcHBlbnMsIHRpbWVzIG91dCBhZnRlciAwCitieXRlcyBvZiBpL28uICBPbmNlIGFn YWluLCBLZXJtaXQgd29ya3MsIFptb2RlbSBkb2Vzbid0LiAgVGhlIHJlYXNvbiBmb3IKK3J1bm5p bmcgWm1vZGVtIGluIGEgcHR5IGlzIHNvIGl0cyBpL28gd2lsbCB3b3JrIGFzIGl0IGRvZXMgb24g YSB0ZXJtaW5hbCwKK25vIG1hdHRlciBob3cgaXQgbWF5IGZpZGRsZSB0aGUgZmlsZSBkZXNjcmlw dG9ycy4gIFNvIHdoeSBkb24ndCB3ZSBzZWUgYQorc2luZ2xlIGJ5dGUgY29tZSBvdXQ/CisKK0Nv bW1lbnRpbmcgb3V0IHB0eV9tYWtlX3JhdygpLCBJIGdldCBhIHN1Y2Nlc3NmdWwgWm1vZGVtIHNl bmQgdXNpbmcgbHN6LgorY3N6IG1hbmFnZXMgdG8gZ2V0IHRoZSBmaWxlbmFtZSBhY3Jvc3MsIGJ1 dCB0aGVuIGdldHMgc3R1Y2suICByZWd1bGFyIHN6LCBvbgordGhlIG90aGVyIGhhbmQsIHdvcmtz IHBlcmZlY3RseS4gIFRlc3RpbmcgY3N6IGJ5IGl0c2VsZiAobm90IHVuZGVyIEtlcm1pdCksCitJ IHNlZSBpdCBmYWlscyBpbiBleGFjdGx5IHRoZSBzYW1lIHdheSAoIkdvdCBwaG9ueSBaRU9GIiwg ZXRjKS4gIE9LLCBmb3JnZXQKK2NyenN6LgorCitPSywgbGV0J3MgbW92ZSB0byBsb2NhbCBtb2Rl IG92ZXIgYSBLZXJiZXJpemVkIFRlbG5ldCBjb25uZWN0aW9uLi4uCitVcGxvYWRpbmcgKHNlbmRp bmcpIHdpdGggZXh0ZXJuYWwgS2VybWl0IHByb3RvY29sLi4uIHdvcmtzLgorRG93bmxvYWRpbmcg KHJlY2VpdmluZykgd2l0aCBleHRlcm5hbCBLZXJtaXQgcHJvdG9jb2wuLi4gd29ya3MuCitVcGxv YWRpbmcgd2l0aCBzei4uLiB3b3Jrcy4KK0Rvd25sb2FkaW5nIHdpdGggbHJ6Li4uICBHZXRzIHRv bnMgb2YgZXJyb3JzIGFuZCBmYWlscy4KKworUnVubmluZyBwdHlfbWFrZV9yYXcoKSBvbiB0aGUg c2xhdmUgYnV0IG5vdCBvbiB0aGUgbWFzdGVyOiBubyBkaWZmZXJlbmNlLgorUnVubmluZyBwdHlf bWFrZV9yYXcoKSBvbiB0aGUgbWFzdGVyIGJ1dCBub3Qgb24gdGhlIHNsYXZlOiBubyBkaWZmZXJl bmNlLgorCitCYWNrIHdoZXJlIHdlIHN0YXJ0ZWQuLi4gIEVpdGhlcjoKKworIC4gWm1vZGVtIGlz IG92ZXJkcml2aW5nIHRoZSBwdHksIG5vIG1hdHRlciB3aGF0IG1vZGVzIHdlIHB1dCBpdCBpbi4g IAorIC4gSXQncyBhIHRyYW5zcGFyZW5jeSBwcm9ibGVtLgorCitUaGVvcmV0aWNhbGx5IHdlIHNo b3VsZCBiZSBhYmxlIHRvIHRlc3QgdGhlc2UgYnkgdXNpbmcgZGlmZmVyZW50IHN6IHN3aXRjaGVz OgorICAtcTogICAgcXVpZXQgKHNob3VsZCBhbHdheXMgdXNlIHRoaXMpCisgIC1lOiAgICBlc2Nh cGUgYWxsIGNvbnRyb2wgY2hhcmFjdGVycworICAtQiBuOiAgQnVmZmVyIG4gYnl0ZXMgKHJhdGhl ciB0aGFuIHdob2xlIGZpbGUpCisgIC1MIG46ICBQYWNrZXQgbGVuZ3RoCisgIC1sIG46ICBGcmFt ZSBsZW5ndGggKD49IHBhY2tldCBsZW5ndGgpCisgIC13IG46ICBXaW5kb3cgc2l6ZQorICAtNDog ICAgNEsgYmxvY2tzaXplIChkb2Vzbid0IGhlbHApCisKKy1xIGJ5IGl0c2VsZiBkb2Vzbid0IGhl bHAuCistcSAtZSwgdGhpcyBvbmUgd29ya2VkIGJ1dCBzdGlsbCBnb3QgYWJvdXQgMTAwIGVycm9y cyBhbmQgd2FzIHZlcnkgc2xvdy4KKy1xIC1lIC1sIDIwMCAtTCAxMDAsIGZhaWxlZCBmYXN0IGFu ZCBiYWQuCistcSAtZSAtdyAxLiAgRmFpbGVkIHF1aWNrbHkuCistcSAtZSAtdyAxIC1CIDEwMC4g IEV2ZW50dWFsbHkgZmFpbGVkLgorLXEgLXcgMSwgRXZlbnR1YWxseSBmYWlsZWQuCistcSAtbCAx MDI0LCB0aGlzIGdldHMgbXVjaCBtb3JlIGVycm9ycywgZGVmaW5pdGVseSBuZWVkIC1lLgorLXEg LWUgLWwgMTAyNCwgZ290IHByZXR0eSBmYXIgYmVmb3JlIGZhaWxpbmcuCistcSAtZSAtdyAxIC1s IDEwMjQsIGFsc28gZ290IHByZXR0eSBmYXIgYmVmb3JlIGZhaWxpbmcuCistcSAtZSwgdGhpcyBv bmUgZ290IGZhcnRoZXN0IG9mIGFsbCwgYWJvdXQgNDhLLCBiZWZvcmUgZ2V0dGluZyBlcnJvcnMu CisKK0luIHRoZSBsYXR0ZXIgY29tYmluYXRpb25zIHRoYXQgd29yayBzb21ld2hhdCBiZXR0ZXIs IHdlIGFsd2F5cyBnZXQgdXAgdG8KKzE2Sywgb3IgMzJLLCBvciA0OEssIGJlZm9yZSB0aGUgZXJy b3JzIHN0YXJ0IGNvbWluZyBvdXQgYW5kIHBpbGluZyB1cC4KK1NvbWV0aW1lcyB0aGUgZXJyb3Jz IGFyZSByZWNvdmVyYWJsZSBhbmQgd2UgcmVjZWl2ZSBhcyBtdWNoIGFzIDMwMEsKK3N1Y2Nlc3Nm dWxseSBiZWZvcmUgZ2l2aW5nIHVwLgorCitOb3cgdGhhdCB3ZSBoYXZlIGRhdGEgZmxvd2luZyBw cmV0dHkgd2VsbCAoYnV0IG5vdCB3ZWxsIGVub3VnaCksIHRyaWVkCityZWluc3RhdGluZyBwdHlf bWFrZV9yYXcoKSwgYnV0IGl0IGh1cnQgbW9yZSB0aGFuIGhlbHBlZC4KKworQXMgYSBzYW5pdHkg Y2hlY2ssIEkgdHJpZWQgdHJhbnNmZXJyaW5nIGZyb20gdGhlIHNhbWUgaG9zdCBvdmVyIHRoZSBz YW1lCitraW5kIG9mIGNvbm5lY3Rpb24gKEtlcmJlcml6ZWQgVGVsbmV0KSBkaXJlY3RseSB0byBL OTUncyBidWlsdC1pbiBabW9kZW0KK3Byb3RvY29sLCBhbmQgdGhhdCB3b3JrZWQgZmluZS4gIFNv IHRoZSBwcm9ibGVtIGlzIGRlZmluaXRlbHkgaW4gdGhlIHB0eS4KK09yIG1vcmUgcHJlY2lzZWx5 LCB3aGVyZSBLZXJtaXQgd3JpdGVzIGluY29taW5nIG5ldCBkYXRhIHRvIHRoZSBwdHkgbWFzdGVy LgorCisyNiBKYW4gMjAwNzogVHJpZWQgY2hhbmdpbmcgdGhlIHNpemUgb2YgdGhlIG5ldC10by1w dHkgYnVmZmVyIGZyb20gMjRLIHRvCisxSy4gIFJlc3VsdDogdG90YWwgZmFpbHVyZS4gIFNldCBi b3RoIGJ1ZmZlcnMgdG8gMUsuICBTdGlsbCB0b3RhbCBmYWlsdXJlLgorU2V0IGJvdGggdG8gNEs6 IG5vdyB3ZSBnZXQgYWJvdXQgNDVLIG9mIGRhdGEsIHRoZW4gZmFpbHVyZS4gIFB1dCB0aGVtIGJv dGgKK2JhY2sgdG8gMjRLLCBzdGlsbCBmYWlscyB0b3RhbGx5IC0tIHRoZSBzYW1lIGNvZGUgdGhh dCB3b3JrZWQgcHJldHR5IHdlbGwKK3llc3RlcmRheS4gIEFjdHVhbGx5LCBubyBkb3dubG9hZHMg d29yaywgbm90IGV2ZW4gS2VybWl0LCBub3QgZXZlbiBvZgordGV4dCBmaWxlcy4KKworMjcgSmFu IDIwMDc6IFNpbmNlIEkgaGF2ZSBub3QgYmVlbiBhYmxlIHRvIGZpbmQgYSB3YXkgdG8gbWFrZSBw dHlzIHdvcmsgZm9yCit0aGlzLCBJIG1hZGUgYSB0aGlyZCBjb3B5IG9mIHRoaXMgcm91dGluZSwg dGhpcyB0aW1lIHVzaW5nIHBpcGVzIGluc3RlYWQgb2YKK3B0eXMuICBUaGUgZGlzYWR2YW50YWdl IGhlcmUgaXMgdGhhdCBpZiB0aGUgZXh0ZXJuYWwgcHJvdG9jb2wgZG9lcyBub3QgdXNlCitzdGRp bywgdGhlIHBpcGVzIHdvbid0IHdvcmssIGJ1dCBvbmUgdGhpbmcgYSB0aW1lLi4uCisKK0luZmVy aW9yIEtlcm1pdCBzdGFydHMgaW4gbG93ZXIgZm9yaywgYnV0IHdoZW4gaXQgdHJpZXMgdG8gc2Vu ZCBpdHMgZmlyc3QKK3BhY2tldCBpdCBnZXRzIGVycm5vPTkgRUJBREYsIEJhZCBGaWxlIERlc2Ny aXB0b3IuICBTdWJzdGl0dXRpbmcgRy1LZXJtaXQgYXMKK3RoZSBleHRlcm5hbCBwcm90b2NvbCwg d2hpY2ggaXMgc2ltcGxlciwgcmV2ZWFscyB0aGF0IHRoZSBwcm9ibGVtIGlzIHRoYXQKK3RoZSBl eHRlcm5hbCBwcm90b2NvbCBnZXRzIGVycm9ycyB3aGVuIGl0IHRyaWVzIHRvIG1hbmlwdWxhdGUg dGhlIGl0cyBzdGRpbworZmlsZSBkZXNjcmlwdG9ycyB3aXRoIGlvY3RscywgZXRjOyB0aGVzZSBh cmUgbm90IHZhbGlkIGZvciBhIHBpcGUuICBUaGUgcGlwZQorbWVjaGFuaXNtIGl0c2VsZiB3b3Jr cy4gIElmIEkgdGFrZSBvdXQgdGhlIHRlc3QgZm9yIHR0cGt0KCkgZmFpbGluZyBpbgorZ2tlcm1p dCwgdGhlIGZpbGUgdHJhbnNmZXIgd29ya3MgT0suICBUcnlpbmcgWm1vZGVtLi4uIFNlbmRpbmcg d29ya3MgT0s7CityZWNlaXZpbmcgd29ya3MgYSBsb3QgYmV0dGVyIHRoYW4gd2l0aCBwdHlzIChp dCBnb3QgMzYwSyBpbnRvIHRoZSBmaWxlCitiZWZvcmUgZmFpbGluZykuICBNYWtpbmcgdGhlIGJ1 ZmZlcnMgc21hbGxlciwgZG9lc24ndCBoZWxwLgorCitJJ20gc3RhcnRpbmcgdG8gd29uZGVyIGlm IHRoZSBwcm9ibGVtIG1pZ2h0IGJlIGluIG15IGJ1ZmZlcmluZyBjb2RlLCByYXRoZXIKK3RoYW4g aW4gdGhlIHB0eSBvciBwaXBlIGludGVyZmFjZS4uLiAgVHJ5IG1ha2luZyBhIHZlcnNpb24gdGhh dCBkb2VzCitzaW5nbGUtY2hhcmFjdGVyIHJlYWRzIGFuZCB3cml0ZXMuCisKK1RoaXMgb25lIHJl YWRzIHRoZSBmaXJzdCBwYWNrZXQgZnJvbSB0aGUgbG93ZXIgS2VybWl0IGFuZCBzZW5kcyBpdC4g IEl0IGlzCityZWNvZ25pemVkIGJ5IHRoZSBvdGhlciBLZXJtaXQsIHdoaWNoIHNlbmRzIGFuIEFD Sy4gIFdlIHNlZSB0aGUgXkEgb2YgdGhlCitBQ0ssIGJ1dCB0aGVuIHNlbGVjdCgpIHRpbWVzIG91 dCBvbiB0aGUgbmV4dCBjaGFyYWN0ZXIgLS0gT0YgQ09VUlNFOiBiZWNhdXNlCithdCBhIGxvd2Vy IGxldmVsLCBpdCBoYXMgYWxyZWFkeSBiZWVuIHJlYWQuICBXZSBoYXZlIHRvIGNoZWNrIHRoZSBt eXJlYWQKK2J1ZmZlciwgYW5kIHRoZW4gY2FsbCBzZWxlY3QoKSBvbmx5IGlmIGl0J3MgZW1wdHku ICBNYWtpbmcgdGhpcyBjaGFuZ2U6CisKKyAuIFNFTkQgd2l0aCBHLUtlcm1pdCB3b3JrcyAoYnV0 IHZlcnkgc2xvd2x5KS4KKyAuIFNFTkQgd2l0aCBsc3ogd29ya3MgYnV0IGdldHMgYSBsb3Qgb2Yg ZXJyb3JzLCBldmVudHVhbGx5IHN1Y2NlZWRzLgorCitMZXQncyB3b3JrIG91ciB3YXkgYmFjay4u LiAgV2l0aCB0aGUgc2FtZSBjaGFuZ2VzIHRvIHRoZSBidWZmZXJlZCBwaXBlIHZlcnNpb246CisK KyAuIFNFTkQgd2l0aCBHLUtlcm1pdC9zdHJlYW1pbmcgd29ya3MgKGZhc3QpLgorIC4gU0VORCB3 aXRoIGxzeiB3b3JrcyB0b28gKGZhc3QpLCBidXQgd2UgZ2V0IGd1YmJpc2ggYXQgdGhlIGVuZC4K KyAuIFJFQ0VJVkUgd2l0aCBLZXJtaXQgZmFpbHMgYmVjYXVzZSAiL2Rldi90dHkgaXMgbm90IGEg dGVybWluYWwgZGV2aWNlIi4KKyAuIFJFQ0VJVkUgd2l0aCByc3ouLi4gbG90cyBvZiBlcnJvcnMg KCJnYXJiYWdlIGNvdW50IGV4Y2VlZGVkIikgYnV0IHN1Y2NlZWRlZC4KKworQnV0IG1heWJlIG5v dyB3ZSdyZSBzZWVpbmcgcGlwZSBhcnRpZmFjdHMsIHNvIGdvaW5nIGJhY2sgb25lIG1vcmUgc3Rl cCB0bwordGhlIHZlcnNpb24gdGhhdCBnZXRzIGl0cyBvd24gcHR5IGFuZCBzdGFydHMgaXRzIG93 biBmb3JrOgorCisgLiBTRU5EIHdpdGggRy1LZXJtaXQvU3RyZWFtaW5nIHdvcmtzIChmYXN0KSBi dXQgc2VsZWN0KCkgdGltZXMgb3V0IGF0IHRoZSBlbmQuCisKK0Fub3RoZXIgYnJlYWt0aHJvdWdo OiBNb3ZlZCB0aGUgd3JpdGUgcGllY2VzIHRvIGJlbG93IHRoZSByZWFkIHBpZWNlcy4gIFRoaXMK K2lzIHdoYXQgd2FzIHByZXZlbnRpbmcgdGhlIGJ1ZmZlciByZXNldCBjb2RlIGZyb20gd29ya2lu ZyAtLSB3aXRoIHRoZSB3cml0ZXMKK2RvbmUgYmVmb3JlIHRoZSByZWFkcywgd2UgbmV2ZXIgY2F0 Y2ggdXAgYW5kIGNhbiBuZXZlciByZXNldCB0aGUgYnVmZmVycy4KKworIC4gU0VORCB3aXRoIEct S2VybWl0L3N0cmVhbWluZyB3b3JrcyAoZmFzdCkgKGJ1dCB0aGVyZSdzIGEgcGF1c2UgYXQgdGhl IGVuZCkKKyAuIFNFTkQgd2l0aCBsc3ogd29ya3MgKGZhc3QpIChidXQgdGhlcmUncyBhIHBhdXNl IGF0IHRoZSBlbmQpCisgLiBSRUNFSVZFIHdpdGggcnN6Li4uIGxvdHMgb2YgZXJyb3JzICgiZ2Fy YmFnZSBjb3VudCBleGNlZWRlZCIpIGFuZCBmYWlscy4KKyAuIFJFQ0VJVkUgd2l0aCBLZXJtaXQg LS0gbm90aGluZyBoYXBwZW5zIChpdCB0aGlua3MgaXQgc3VjY2VlZGVkKSwgdGhlbiB3ZQorICAg ICByZWNvbm5lY3QsIHRlcm1pbmFsIHNlZXMgUyBwYWNrZXQgYW5kIGdvZXMgaW50byBhdXRvZG93 bmxvYWQKKworRnJvbSB0aGUgbG9nIGl0IGxvb2tzIGxpa2UgdHRwa3QoKSBmYWlscyBpbiB0aGUg bG93ZXIgS2VybWl0LiAgU3dpdGNoaW5nCit0aGlzIHdpdGggdGhlIGhhY2tlZCBHLUtlcm1pdC4u LiAgaXQgZ2V0cyAidHJhbnNtaXNzaW9uIGVycm9yIG9uIHJlbGlhYmxlCitsaW5rIi4gIFRyaWVk IGFnYWluIHdpdGggcmVhbCBLZXJtaXQgYmVsb3csIHRoaXMgdGltZSB3aXRoICItbCAwIiBhbmQg bm90CitzdHJlYW1pbmcuICBUaGlzIHdhcyBhY3R1YWxseSB3b3JraW5nLCBidXQgc2xvd2x5LCBJ IGRvbid0IHNlZSBhbnkgTkFLcyBpbgordGhlIHBhY2tldCBsb2csIGJ1dCB0aGVuIHNlbGVjdCgp IHRpbWVkIG91dC4KKworMjggSmFuIDIwMDc6IFJlc3RvcmVkIGJvdGggdGhlIGNhbGxzIHRvIHB0 eV9tYWtlX3JhdygpOgorCisgLiBTRU5EIHdpdGggQy1LZXJtaXQgc3RyZWFtaW5nIHdvcmtzLCBi dXQgc2xvdyAoNTRLY3BzKQorIC4gRGl0dG8sIGJ1dCB3aXRoIGRlYnVnZ2luZyBvZmYgLS0gaGFu Z3MgZm9yZXZlci4KKyAuIERpdHRvLCBidXQgdXNpbmcgRy1LZXJtaXQgaW5zdGVhZCBvZiBDLUtl cm1pdCAtLSBhbHNvIGhhbmdzIGZvcmV2ZXIuCisKK0JhY2tlZCBvZmYgb24gY2FsbGluZyBwdHlf bWFrZV9yYXcoKS4gIFNhbWUgdGhpbmcuCitSZWR1Y2VkIHNpemUgb2YgbmV0LXRvLXB0eSBidWZm ZXIuICBTYW1lIHRoaW5nLgorCisxNSBGZWIgMjAwNy4uLiAgRGVjaWRlZCB0byBnaXZlIHVwIG9u IHRoaXMgYW5kIHB1Ymxpc2ggaXQgYXMgaXMsIGluIGhvcGVzCit0aGF0IHNvbWVib2R5IHdpdGgg bW9yZSBleHBlcmllbmNlIHdpdGggcHR5cyBjYW4gbWFrZSBpdCB3b3JrLCBiZWNhdXNlIEknbQor anVzdCBnb2luZyBpbiBjaXJjbGVzLiAgU28gdG9kYXkgSSBqdXN0IGhhdmUgdG8gZ2V0IHRoZSBj b2RlIGludG8gc2hhcGUgc28KK3Blb3BsZSBjb3VsZCBjaG9vc2UgYW1vbmcgdGhlIHRocmVlIGFs dGVybmF0aXZlIHJvdXRpbmVzLiAgVGhlIHNlY29uZCBvbmUsCit5dHR5cHR5Y21kKCksIGlzIHRo ZSBvbmUgdGhhdCB1c2VzIG9wZW5wdHkoKSwgd2hpY2ggaXMgbm90IHBvcnRhYmxlLCBzbyBpdAor Y2FuIGJlIGVuYWJsZWQgb25seSBmb3IgTWFjIE9TIFgsIE5ldEJTRCwgRnJlZUJTRCwgYW5kIExp bnV4LCBvciBieSBhbHNvCitkZWZpbmluZyBIQVZFX09QRU5QVFkgYXQgY29tcGlsZSB0aW1lLiAg QW55d2F5LCBpZiB5b3UgYnVpbGQgS2VybWl0IGluIHRoZQorbm9ybWFsIHdheSwgeW91IGdldCB0 aGUgcmVndWxhciBiZWhhdmlvciAtLSB0dHJ1bmNtZCgpIGlzIHVzZWQgdG8gZXhlY3V0ZQorZXh0 ZXJuYWwgcHJvdG9jb2xzLiAgSWYgeW91IGJ1aWxkIGl0IHdpdGggLURYVFRQVFlDTUQsIHlvdSBn ZXQgdGhlIGZpcnN0Cit2ZXJzaW9uIG9mIHR0cHR5Y21kKCk7IHdpdGggLURZVFRQVFlDTUQgdGhl IHNlY29uZCwgYW5kIHdpdGggLURaVFRQVFlDTUQgdGhlCit0aGlyZC4KKworKFRoZW4gc29tZSBp bnRlcnJ1cHRpb25zLCB0aGVuLi4uKQorCitGcm9tIEplZmYsIGZpeCBob3N0bmFtZSBjb21wYXJp c29uIGluIFguNTA5IGNlcnRpZmljYXRlIGNoZWNraW5nIHRvIHdvcmsKK3JpZ2h0IGluIHRoZSBj YXNlIG9mIG5hbWVzIHRoYXQgY29udGFpbiBubyBwZXJpb2RzLiAgZE5TTmFtZV9jbXAoKTogY2xf c3NsLmMsCisyMSBGZWIgMjAwNy4KKworSm9obiBEdW5sYXAgbm90aWNlZCBzb21lIHN0cmFuZ2Ug YmVoYXZpb3Igd2hlbiB0cmFuc2ZlcnJpbmcgZmlsZXMgYmV0d2VlbgoraG9tZSBiYXNlIGFuZCB0 aGUgRU0tQVBFWCBvY2Vhbm9ncmFwaGljIGZsb2F0cyB2aWEgc2F0ZWxsaXRlLi4uIGxvbmcgc3Rv cnksCitidXQgZXZlcnkgc28gb2Z0ZW4gdGhlIHRyYW5zZmVyIHdvdWxkIGdldCBzdHVjayBmb3Ig YSBsb25nIHRpbWUsIGFuZCBpdAoraGFwcGVuZWQgb25seSB3aGVuIEMtS2VybWl0IHdhcyBzZW5k aW5nIGEgZmlsZSBhbmQgcmVjZWl2ZWQgdHdvIG9yIG1vcmUKK3BhY2tldHMgKEFjayBvciBOYWsp IGJhY2sgdG8gYmFjayBmcm9tIHRoZSBmbG9hdC4gIFllYXJzIGFnbyBJIGFkZGVkIHNvbWUKK2xv b2thaGVhZCBjb2RlIHRvIHR0aW5sKCkgdG8gY2xlYXIgdGhlIGlucHV0IGJ1ZmZlciBvZiBhbnkg aW50ZXJwYWNrZXQganVuaworc28gdGhhdCwgaW4gdGhlIHdpbmRvd2luZyBjYXNlLCB3ZSB3b3Vs ZG4ndCBiZSB0cmlja2VkIG5leHQgdGltZSBhcm91bmQgaW50bwordGhpbmtpbmcgYSBwYWNrZXQg d2FzIHdhaXRpbmcgdG8gYmUgcmVhZCB3aGVuIHRoZXJlIHdhc24ndC4gIFRoZSBjb2RlLCB3aGlj aAoraGFzIGJlZW4gdGhlcmUgZm9yIGEgd2hpbGUsIHdhcyBhIGJpdCBmcmFjdHVyZWQ7IGx1Y2tp bHksIGl0IHdvdWxkIGJlCitleGVjdXRlZCBvbmx5IHdoZW4gdGhlIGRlYnVnIGxvZyB3YXMgYWN0 aXZlIHNvIGl0IGRpZG4ndCBoYXZlIG11Y2ggZWZmZWN0LgorVGhlIHByb2JsZW0gd2FzIHRoYXQg aWYgdGhlIFNPUCBjYW1lIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBFT1AsIGl0IGNvdWxkIGJlCitt aXNzZWQgYmVjYXVzZSB0aGUgbG9vcCByZWFkIHRoZSBuZXh0IGNoYXJhY3RlciBiZWZvcmUgY2hl Y2tpbmcgdGhlIGN1cnJlbnQKK29uZS4gIEZpeGVkIGJ5IHJlYXJyYW5naW5nIHRoZSBsb29wLiAg QWxzbyBJIGNoYW5nZWQgaXQgc28gaXQgd291bGQgZXhlY3V0ZQoraW4gYWxsIGNhc2VzLCBub3Qg b25seSB3aGVuIHRoZSBkZWJ1ZyBsb2cgd2FzIGFjdGl2ZS4gIEFsc28sIGNsZWFuZWQgdXAgYQor YnVuY2ggb2YgY29uZnVzaW5nICNpZmRlZnMgYW5kIHJlbW92ZWQgc29tZSBjaHVua3MgdGhhdCBo YWQgYmVlbiBjb21tZW50ZWQKK291dCBmb3IgeWVhcnMsIGRlY2FkZXMgbWF5YmUuICB0dGlubCgp OiBja3V0aW8uYywgMjEtMjIgRmViIDIwMDcuCisKK0FkZGVkIE5PVyBrZXl3b3JkIGluZm8gdG8g SEVMUCBEQVRFLCBwbHVzIGEgdGlwIGFib3V0IGhvdyB0byBjb252ZXJ0IHRvIFVUQzsKK3N1Z2dl c3RlZCBieSBBcnRodXIgTWFyc2guICBja3V1czIuYywgMjIgRmViIDIwMDcuCisKK1doZW4gYW4g RlRQIGNsaWVudCBzZW5kcyBOTFNUIHRvIHRoZSBzZXJ2ZXIgYW5kIG5vIG1hdGNoaW5nIGZpbGVz IGFyZSBmb3VuZCwKK3RoZSBzZXJ2ZXIgaXMgc3VwcG9zZWQgdG8gcmVzcG9uZCB3aXRoIGFuIGVy cm9yIG1lc3NhZ2Ugb24gdGhlIGNvbnRyb2wKK2NoYW5uZWwgYW5kIG5vdGhpbmcgb24gdGhlIGRh dGEgY2hhbm5lbC4gIEhvd2V2ZXIgaXQgc2VlbXMgdGhhdCBhdCBsZWFzdCBvbmUKK3NlcnZlciBz ZW5kcyB0aGUgZXJyb3IgbWVzc2FnZSBiYWNrIG9uIHRoZSBkYXRhIGNoYW5uZWwsIGFzIGlmIGl0 IHdlcmUgYQorZmlsZW5hbWUgKCIvYmluL2xzOiBibGFoOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0 b3J5IiksIGFuZCBvbiB0aGUgY29udHJvbAorY2hhbm5lbCB0aGVyZSBpcyBubyBlcnJvciBpbmRp Y2F0aW9uICgiMjI2IEFTQ0lJIFRyYW5zZmVyIGNvbXBsZXRlIikuICBBdAordGhpcyBwb2ludCBy ZW1vdGVfZmlsZXMoKSBoYXMgYSBsaXN0ZmlsZSBhbmQsIGlmIGEgbWF0Y2ggcGF0dGVybiB3YXMg Z2l2ZW4sCitpdCBsb29rcyB0aHJvdWdoIGxpc3QgdG8gc2VlIGlmIGFueSBvZiB0aGUgbGluZXMg bWF0Y2ggdGhlIGdpdmVuIGZpbGVuYW1lLAorZS5nLiAiYmxhaCIuICBUaGlzIG1ha2VzIEZUUCBD SEVDSyBnaXZlIGZhbHNlIHBvc2l0aXZlcy4gIFRoZSBwcm9ibGVtCisoZGlhZ25vc2VkIGJ5IEpl ZmYpIGlzIHRoYXQgdGhlIG1hdGNoIHBhdHRlcm4gd2FzIG5vdCBnaXZlbiBpbiB0aGlzIGNhc2Us IHNvCitpdCB0YWtlcyBzb21lIHJhbmRvbSBkZWZhdWx0IGFjdGlvbiwgcmVzdWx0aW5nIGluIHRo ZSBzcHVyaW91cyBzdWNjZXNzCityZXR1cm4uICBGaXhlZCBieSB1c2luZyB0aGUgdXNlcidzIHN0 cmluZyBhcyB0aGUgcGF0dGVybi4gIE5vdCB0ZXN0ZWQsCitob3dldmVyLCBzaW5jZSBJIGRvbid0 IGhhdmUgYWNjZXNzIHRvIGEgc2VydmVyIHRoYXQgYmVoYXZlcyB0aGlzIHdheS4KK2NrY2Z0cC5j LCAyMiBGZWIgMjAwNy4KKworSWYgYW4gZXh0ZXJuYWwtcHJvdG9jb2wgZmlsZSB0cmFuc2ZlciBm YWlscywgZG9uJ3QgcHJpbnQgS2VybWl0LXNwZWNpZmljCitoaW50cy4gIGNrdXVzNS5jLCAyMiBG ZWIgMjAwNy4KKworT25lIG1vcmUgdGltZSB3aXRoIHR0aW5sKCkuICBHb3QgcmlkIG9mIHRoZSAi Y3NhdmUiIGp1bmssIHdoaWNoIG5ldmVyIGNvdWxkCitoYXZlIHdvcmtlZCAod2hpY2ggaXMgbm8g ZG91YnQgd2h5IGl0IHdhcyBpbiBhIGRlYnVnZ2luZyBzZWN0aW9uKS4gIFRoZQorcHJvYmxlbSB3 YXMgdGhhdCBzYXZpbmcgdGhlIGJlZ2lubmluZyBvZiB0aGUgbmV4dCBwYWNrZXQgbG9jYWxseSBk aWQgbm90CitzeW5jaHJvbml6ZSB3aXRoIHRoZSBidWZmZXIgY2xlYXJpbmcgKHR0Zmx1aSgpKSBk b25lIGF0IGEgaGlnaGVyIGxldmVsLAorYmV0d2VlbiBjYWxscyB0byB0dGlubCgpLiAgU28gbm93 LCB0aGUgbG9va2FoZWFkIGNvZGUsIGlmIGl0IGZpbmRzIHRoZQorYmVnaW5uaW5nIGFuIGFzLXll dCB1bnJlYWQgcGFja2V0LCBwdXRzIGl0IGJhY2sgYXQgdGhlIGhlYWQgb2YgdGhlIGlucHV0Citx dWV1ZS4gIFRoaXMgd2F5LCBpZiB0aGUgcHJvdG9jb2wgZW5naW5lIGNsZWFycyB0aGUgaW5wdXQg YnVmZmVyLCBpdCB3aWxsCitnZXQgdGhlIHdob2xlIHBhY2tldCwgbm90IGp1c3QgdGhlIHBhcnQg YWZ0ZXIgdGhlIFNPSC4gIGNrdXRpby5jLCAyNCBGZWIgMjAwNy4KKworRnJvbSBTdGV2ZW4gTSBT Y2h3ZWRhLCBTYWludCBQYXVsLCBNTjogYWRhcHRhdGlvbiBvZiBsYXJnZSBmaWxlIHN1cHBvcnQg dG8KK1ZNUyAoaXQgd2FzIGFscmVhZHkgcG9zc2libGUgdG8gdHJhbnNmZXIgbGFyZ2UgZmlsZXMg aW4gVk1TIEMtS2VybWl0IGJ1dCB0aGUKK2ZpbGUtdHJhbnNmZXIgZGlzcGxheSBhbmQgc3RhdGlz dGljcyB3ZXJlIHdyb25nKS4gIEFuZCBhIG1pbmltYWwgYWRhcHRhdGlvbgorb2YgdGhlIEZUUCBj bGllbnQgdG8gVk1TIC0tIG5vIFJNUywgbm8gc3BlY2lhbCBWTVMgZmlsZSBzdHVmZiwgU3RyZWFt X0xGIGFuZAorYmluYXJ5IGZpbGVzIG9ubHksIGRldmVsb3BlZCBhbmQgdGVzdGVkIG9ubHkgd2l0 aCBVQ1guICBTU0wvVExTIGlzCitzdXBwb3J0ZWQuICBUaGUgc291cmNlLWNvZGUgY2hhbmdlcyBh cmUgbWluaW1hbDsgbW9zdCBoYXZlIG5vdGhpbmcgdG8gZG8KK3dpdGggVk1TLCBidXQgd2l0aCBo ZWFkZXIgZmlsZXMsIHByb3RvdHlwZXMsIGFuZCBkYXRhIHR5cGVzIChlLmcuIGZ0cF9wb3J0Citp bnQgcmF0aGVyIHRoYW4gc2hvcnQsIHZhcmlvdXMgc2lnbmVkL3Vuc2lnbmVkIGNvbmZsaWN0cykg dG8gc2h1dCB1cAorY29tcGlsZXIgd2FybmluZ3MuICBTb21lIG9mIHRoZXNlIGNvdWxkIGJlIGRh bmdlcm91cyBpbiB0ZXJtcyBvZgorcG9ydGFiaWxpdHk7IEkndmUgbWFya2VkIHRoZW0gd2l0aCAv KiBTTVMgMjAwNy8wMi8xNSAqLy4gIGNrY2Zucy5jLAorY2tjbmV0LmgsIGNrX3NzbC5oLCBja3V1 czMuYywgY2t1dXM0LmMsIGNrdmZpby5jLCBja2NmdHAuYywgY2t2a2VyLm1tcworKHdoaWNoIHdh cyByZXdyaXR0ZW4gdG8gYWN0dWFsbHkgcmVmbGVjdCB0aGUgc291cmNlIG1vZHVsZSBkZXBlbmRl bmNpZXMpLAorY2t2a2VyLmNvbSAoYWxzbyBoZWF2aWx5IG1vZGlmaWVkKS4gIGNrdmtlci5jb20g KHRoZSAibWFrZWZpbGUiIGZvciBWTVMKK0MtS2VybWl0KSBub3cgaW5jbHVkZXMgIkYiIGFuZCAi SSIgb3B0aW9uIGZsYWdzIGZvciB0aGUgbGFyZ2UgRmlsZSBhbmQKK0ludGVybmFsIGZ0cCBmZWF0 dXJlcywgcGx1cyBiZXR0ZXIgaGFuZGxpbmcgb2YgVmF4L0FscGhhL0lBNjQgZGlzdGluY3Rpb24u CisyNiBGZWIgMjAwNy4KKworQ2hhbmdlZCBOZXRCU0QgdGFyZ2V0cyB0byBpbmNsdWRlIC1ESEFW RV9PUEVOUFRZIGFuZCAtbHV0aWwsIHNvIHRoZXkKK2NhbiB1c2Ugb3BlbnB0eSgpLiAgbWFrZWZp bGUsIDI2IEZlYiAyMDA3LgorCitCdWlsdCBvbiBTb2xhcmlzIHdpdGhvdXQgYW5kIHdpdGggU1NM IE9LLgorQnVpbHQgb24gTmV0QlNEIHdpdGggS2VyYmVyb3MgNSwgT0suCitCdWlsdCBvbiBNYWMg T1MgWCAxMC40LCByZWd1bGFyIHZlcnNpb24sIE9LLgorQnVpbHQgb24gTWFjIE9TIFggMTAuNCB3 aXRoIFNTTCBhbmQgS2VyYmVyb3MgNSwgT0suCisKK09uIFZNUyA3LjItMS9BbHBoYSB3aXRoIE11 bHRpTmV0IDQuNEEtWC4uLgorCisnQ0MnICdDQ09QVCcgS1NQOmNrdXVzMworJURDTC1XLVRLTk9W RiwgY29tbWFuZCBlbGVtZW50IGlzIHRvbyBsb25nIC0gc2hvcnRlbgorIFxDS1VVUzQuT0JKICIn Q0MnICdDQ09QVCcgS1NQOmNrdXVzNCIgIktTUDpja3V1czQuYyBLU1A6Y2tjc3ltLmggS1NQOmNr Y2RlYi5oCisgS1NQOmNrY2xpYi5oIiAiS1NQOmNrY2FzYy5oIEtTUDpja2NrZXIuaCBLU1A6Y2tj bmV0LmggS1NQOmNrdmlvYy5oIgorIktTUDpja2N0ZWwuaCBLU1A6Y2t1dXNyLmggS1NQOmNrdWNt ZC5oIEtTUDpja3V2ZXIuaCIgIktTUDpja2N4bGEuaAorIEtTUDpja3V4bGEuaCBLU1A6Y2tjdW5p LmggS1NQOmNrdWF0aC5oIgorCitUaGUgbmV3IHJ1bGUgZm9yIGNrdXVzNC5jIHdhcyB0b28gbG9u Zy4gIEkgcmVtb3ZlZCBvbmUgZmlsZSBmcm9tIHRoZQorZGVwZW5kZW5jeSBsaXN0IChja2N4bGEu aCwgd2hpY2ggd2lsbCBwcm9iYWJseSBuZXZlciBjaGFuZ2UgYWdhaW4pIGFuZCB0aGF0CittYWRl IGl0IE9LLiAgQnVpbHQgTm9uZXQgYW5kIE5ldCB2ZXJzaW9ucyBPSywgYnV0IHRoaXMgaXMgd2l0 aG91dCB0aGUgbmV3CitzdHVmZi4KKworIm1ha2UgZiIgKGxhcmdlLWZpbGUgc3VwcG9ydCkgb24g Vk1TIDcuMi0xLi4uCisnQ0MnICdDQ09QVCcgS1NQOmNrdXVzNAorICAgICAgICAgICAgICAgICAg ICBpZiAoQ0tGU0VFSyhmcCwoQ0tfT0ZGX1QpaixTRUVLX0NVUikgIT0gMCkgeworLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uXgorJUNDLUktSU1QTElDSVRGVU5DLCBJbiB0aGlzIHN0YXRlbWVudCwg dGhlIGlkZW50aWZpZXIgImZzZWVrbyIgaXMgaW1wbGljaXRseQorZGVjbGFyZWQgYXMgYSBmdW5j dGlvbi4KKworRGl0dG8gZm9yIGZ0ZWxsbyBhbmQgZnNlZWtvIGluIHZhcmlvdXMgb3RoZXIgcGxh Y2VzLCBhbmQgdGhlbiBmc2Vla28gYW5kCitmdGVsbG8gY29tZSB1cCB1cCB1bmRlZmluZWQgYXQg bGluayB0aW1lLgorCitUaGUgcnVsZSBmb3IgY2tjZnRwIGluICJtYWtlIGkiIChJbnRlcm5hbCBG VFAgc3VwcG9ydCkgaGFkIHRoZSBzYW1lIHByb2JsZW0uCitJIHJlbW92ZWQgY2tjeGxhLmggZnJv bSBpdHMgZGVwZW5kZW5jeSBsaXN0IHRvbywgYnV0ICJ1dGltZSIgY29tZXMgdXAKK3VuZGVjbGFy ZWQgYXQgY29tcGlsZSB0aW1lIGFuZCB1bmRlZmluZWQgYXQgbGluayB0aW1lLgorCitWZXJkaWN0 OiBuZWl0aGVyIG9uZSBvZiB0aGUgdHdvIG5ldyBmZWF0dXJlcyBjYW4gYmUgdXNlZCBpbiBWTVMg Ny4yIG9yCitlYXJsaWVyLCBidXQgdGhlIGNvZGUgc3RpbGwgYnVpbGRzIE9LIGlmIHlvdSBkb24n dCBhc2sgZm9yIHRoZW0uCisKK1ZNUyA4LjMgb24gSUE2NC4uLiAgQ2FuJ3QgYnVpbGQgYW55dGhp bmc6CislTU1TLUYtQkFEVEFSRywgU3BlY2lmaWVkIHRhcmdldCAoV0VSTUlUKSBkb2VzIG5vdCBl eGlzdCBpbiBkZXNjcmlwdGlvbiBmaWxlCisKKzI3IEZlYiAyMDA3OiBDaGFuZ2VkIENLVktFUi5D T00gdG8ga2VlcCBhbGwgaXRzIGRlcGVuZGVuY2llcyBidXQgdXNlIGEKK3Nob3J0ZXIgbG9naWNh bCBuYW1lIChTdGV2ZW4gTSBTY2h3ZWRhKS4gIFRoZSBwcm9ibGVtIG9uIFZNUyA4LjMgaXMgdGhh dCBNTVMKK25vdyBzdXBwb3J0cyBjYXNlLXNlbnNpdGl2ZSBmaWxlIHN5c3RlbXMsIGFuZCBzbyBp dCBjYW4ndCBmaW5kIGFueXRoaW5nLgorV29ya2Fyb3VuZDogYnlwYXNzIE1NUyAoaW5jbHVkZSAi bSIgaW4gUDEpLiAgV2l0aCB0aGlzLCAiQGNrdmtlci5jb20gaWZtIgorYnVpbGRzIE9LIG9uIEhQ IFRlc3Rkcml2ZSwgYnV0IEkgY2FuJ3QgdGVzdCB0aGUgbmV3IGZlYXR1cmVzIHNpbmNlIG91dGJv dW5kCitjb25uZWN0aW9ucyBhcmUgbm90IGFsbG93ZWQgdGhlcmUuICBBcyBmb3IgZnNlZWtvKCks IGZ0ZWxsbygpLCBhbmQgdXRpbWUoKSwKK3RoZXkgc2ltcGx5IGFyZSBub3QgYXZhaWxhYmxlIHBy aW9yIHRvIFZNUyA3LjMuICBJdCB3b3VsZCBwcm9iYWJseSBiZSBhIGdvb2QKK2lkZWEgdG8gdGVz dCBmb3IgdGhpcyBpbiBDS1ZLRVIuQ09NLCBidXQgYWN0dWFsbHkgaXQgaXMgcG9zc2libGUgdG8g aW5zdGFsbAorbmV3ZXIgQydzIGFuZCBDUlRMcyBvbiBvbGRlciBWTVMgdmVyc2lvbnMsIHNvIGRv bid0IHN0YW5kIGluIHRoZWlyIHdheS4KKworMjggRmViIDIwMDc6IFdpdGggYWRkaXRpb25hbCBj aGFuZ2VzIGZyb20gU01TLCBhbmQgdGhlbiBzb21lIGZ1cnRoZXIKK2FkanVzdG1lbnRzLCBJIHdh cyBhYmxlIHRvIGJ1aWxkIHRoZSBGVFAgdmVyc2lvbiBvbiBWTVMgNy4yLTEuICBGaXJzdCBJCit0 ZXN0ZWQgaXQgd2l0aCBHRVQgb2YgYSBiaW5hcnkgZmlsZSwgYnV0IGl0IHRyYW5zZmVycmVkIGl0 IGluIHRleHQgbW9kZS4KK0FmdGVyIGEgZmV3IG1vcmUgYXR0ZW1wdHMgd2l0aCBQVVQgYW5kIEdF VCwgaXQgY3Jhc2hlZCB3aXRoICJmbG9hdGluZy9kZWNpbWFsCitkaXZpZGUgYnkgemVybyIgaW4g Y2tzY3JlZW4sIGNrdXVzeC5jIGxpbmUgMjc4NTkuICBPZiBjb3Vyc2UsIHRoYXQncyB0aGUKK2xp c3RpbmcgbGluZSwgbm90IHRoZSBzb3VyY2UgbGluZSwgYW5kIEkgZG9uJ3QgaGF2ZSBhIGxpc3Rp bmcuCisKK1RvIGdldCBhIGxpc3RpbmcsIEkgZGVsZXRlZCBDS1VVU1guT0JKIGFuZCB0aGVuIGRp ZDoKKworICAkIG1ha2UgaSAiIiAiIiAiL0xJU1QiCisKK1N1cnByaXNpbmdseSwgaXQgcmVjb21w aWxlZCBldmVyeXRoaW5nLgorCitBbnl3YXksIHRoZSBkaXZpZGUgYnkgemVybyBoYXBwZW5lZCBp biBhIHNlY3Rpb24gb2YgY29kZSB3aGVyZSB0aGUgZGl2aXNvcgord2FzIG5vdCBjaGVja2VkLCBi dXQgaXQgd2FzIGEgc2VjdGlvbiBvZiBjb2RlIHdlIHNob3VsZCBub3QgaGF2ZSBiZWVuCitleGVj dXRpbmcgYXQgYWxsLCBzaW5jZSB0aGUgZmlsZS10cmFuc2ZlciBkaXNwbGF5IHdhcyBmdWxsc2Ny ZWVuLCBhbmQgdGhpcword2FzIGluIHRoZSAiYnJpZWYiIHNlY3Rpb24uICBBbnl3YXksIEkgYWRk ZWQgdGhlIG5lZWRlZCBjaGVjay4gIEFnYWluLCBpdAorcmVjb21waWxlcyBldmVyeXRoaW5nLiAg TWF5YmUgdGhlcmUncyBubyBNTVMgb24gZ3J1bXB5IC0tIHJpZ2h0LCB0aGVyZSBpc24ndC4KKwor QU5ZV0FZLi4uIFRyeSB0byBHRVQgYSBiaW5hcnkgZmlsZSBsaWtlIHRoaXM6CisKKyAgYmluYXJ5 CisgIC0tLT4gVFlQRSBJCisgIDIwMCBUeXBlIHNldCB0byBJLgorICBnZXQgZ2tlcm1pdAorICAt LS0+IFRZUEUgQQorICAyMDAgVHlwZSBzZXQgdG8gQS4KKyAgLS0tPiBTSVpFIGdrZXJtaXQKKyAg NTUwIGdrZXJtaXQ6IGZpbGUgdG9vIGxhcmdlIGZvciBTSVpFLgorICBHRVQgZ2tlcm1pdCAodGV4 dCkgKC0xIGJ5dGVzKS0tLT4gVFlQRSBBCisKK0FueXdheS4uLiAiZ2V0IC9iaW5hcnkgZ2tlcm1p dCIgZG93bmxvYWRzIGl0LCBzZWVtaW5nbHkgY29ycmVjdGx5ICh0aGUgYnl0ZQorY291bnQgaXMg cmlnaHQpLgorCitCdXQgInB1dCAvYmluYXJ5IGdrZXJtaXQuOzEiIHJlc3VsdHMgaW4gYSAwLWxl bmd0aCBHS0VSTUlUIGZpbGUgYmVpbmcgc2VudC4KK0hlcmUncyB0aGUgZGVidWcgbG9nOgorCitG VFAgUFVUIGduZmlsZVtESVNLJE1TQTQ6W0MuRkRDLk5FVF1na2VybWl0LjsxXT0xCitmdHAgcHV0 ZmlsZSBmbGdbRElTSyRNU0E0OltDLkZEQy5ORVRdZ2tlcm1pdC47MV09MAoremx0b3IgZm5jbnZb RElTSyRNU0E0OltDLkZEQy5ORVRdZ2tlcm1pdC47MV09LTEKK0ZUUCBQVVQgbnpsdG9yW0dLRVJN SVRdCit6Zm5xZnAgMVtESVNLJE1TQTQ6W0MuRkRDLk5FVF1na2VybWl0LjsxXT02NzUKK3pmbnFm cCAyW0RJU0skTVNBNDpbQy5GREMuTkVUXUdLRVJNSVQuOzFdPTMxCit6Zm5xZnAgM1tESVNLJE1T QTQ6W0MuRkRDLk5FVF1HS0VSTUlULjsxXT0zMQorenJlbG5hbSByZXN1bHQgMltna2VybWl0Ljsx XQorZnRwIHNlbmRyZXF1ZXN0IHJlc3RhcnRbRElTSyRNU0E0OltDLkZEQy5ORVRdZ2tlcm1pdC47 MV09MAorb3BlbmkgbmFtZVtESVNLJE1TQTQ6W0MuRkRDLk5FVF1na2VybWl0LjsxXQorb3Blbmkg c25kc3JjPS0xCitvcGVuaSBmaWxlIG51bWJlcj0yCit6b3BlbmlbRElTSyRNU0E0OltDLkZEQy5O RVRdZ2tlcm1pdC47MV09Mgorem9wZW5pIGZwPTAKK2Noa2ZuPTIKK2Noa2ZuIHJldHVybj0wCit6 b3BlbmkgZml4ZWQgZmlsZSBmb3JtYXQgLSB1c2luZyBibGsgSS9PCit6b3BlbmkgYmluYXJ5IGZs YWcgYXQgb3Blbj0xCit6b3BlbmkgaWZpbGVfYm1vZGU9MQorem9wZW5pIGJpbmFyeT0xCit6b3Bl bmkgUk1TIG9wZXJhdGlvbnMgY29tcGxldGVkIG9rCitvcGVuaSB6b3BlbmkgMVtESVNLJE1TQTQ6 W0MuRkRDLk5FVF1na2VybWl0LjsxXT0xCitmdHBjbWQgY21kW1BBU1ZdCitGVFAgU0VOVCBbUEFT Vl0KK0ZUUCBSQ1ZEIFsyMjcgRW50ZXJpbmcgUGFzc2l2ZSBNb2RlICgxNjYsODQsMSwyLDIzMywy MTYpXQoraW5pdGNvbm4gY29ubmVjdCBvaworRlRQIFNFTlQgW1NUT1IgR0tFUk1JVF0KK0ZUUCBS Q1ZEIFsxNTAgT3BlbmluZyBCSU5BUlkgbW9kZSBkYXRhIGNvbm5lY3Rpb24gZm9yICdHS0VSTUlU Jy5dCitkb2Z0cHNlbmQyIGZ0cGNvZGVbU1RPUl09MTUwCisKKyAgSGVyZSBpcyB3aGVyZSB0aGUg ZmlsZSBpcyBzdXBwb3NlZCB0byBiZSByZWFkIGFuZCBzZW50IGJ1dCB0aGVyZSBpcyBub3RoaW5n CisgIGluIHRoZSBsb2cgYmV0d2VlbiB0aGUgImRvZnRwc2VuZDIgZnRwY29kZSIgbGluZSBhbmQg dGhlIGZvbGxvd2luZyBsaW5lLgorCityZnRpbWVyIHN0YXR1cz0xCitnZnRpbWVyIHN0YXR1cyAx PTEKK2dmdGltZXIgc3RhdHVzIDI9MTQwOTAyNQorZ2Z0aW1lciBzdGF0dXMgMz0xNDA5MDI1Citn ZnRpbWVyIHNbMC4wMDAwMDBdCit6Y2xvc2Ugbj0yCitjaGtmbj0yCitjaGtmbiByZXR1cm49MQor emNsb3NlIFpJRklMRSBSTVMgb3BlcmF0aW9ucyBjb21wbGV0ZWQgb2sKK2Z0cCBnZXRyZXBseSBs Y3M9MAorZnRwIGdldHJlcGx5IHJjcz0tMQorZnRwIGdldHJlcGx5IGZjPTAKK0ZUUCBSQ1ZEIFsy MjYgVHJhbnNmZXIgY29tcGxldGUuXQorZnRwIGdldHJlcGx5WzIyNiBUcmFuc2ZlciBjb21wbGV0 ZS5dPTIKK2RvZnRwc2VuZDIgb2s9MAorCitFdmVyeXRoaW5nIGlzIE9LIHVwIHVudGlsIHdlIGdv IHRvIHNlbmQgdGhlIGZpbGUsIHRoZW4gaXQgYmVoYXZlcyBhcyBpZiB3ZQorZ290IEVPRiBpbW1l ZGlhdGVseSBhbmQgc28gY2xvc2VzIHRoZSBkYXRhIGNvbm5lY3Rpb24sIGFuZCByZXBvcnRzIHN1 Y2Nlc3M7CithbiBlbXB0eSBjb3B5IG9mIHRoZSBmaWxlIGlzIGxlZnQgb24gdGhlIGZhciBlbmQu CisKK1N0YXJ0aW5nIG92ZXIgd2l0aCBhIHRleHQgZmlsZS4uLi4gIFBVVCBMT0dJTi5DT00gZ2V0 cyBhbm90aGVyIGRpdmlkZSBieQoremVyby4gIEJ1dCBpdCBoYXBwZW5lZCBpbiB0aGUgY29kZSBJ IGp1c3QgZml4ZWQsIHdoaWNoIGlzIGltcG9zc2libGUuICBTd2VsbC4KK0kgcmVjb21waWxlZCBl dmVyeXRoaW5nIGFuZCB0aGlzIHRpbWUgdGhlIHVwbG9hZCB3b3JrZWQsIGFuZCBkb3dubG9hZGlu ZyBpdAorYWdhaW4gd29ya2VkIHRvby4KKworQnV0IGEgYmluYXJ5IGZpbGUgc3RpbGwgY2FuJ3Qg YmUgdXBsb2FkZWQuICBUcnlpbmcgdG8gdXBsb2FkIGEgdGV4dCBmaWxlCithZnRlciBkb2luZyB0 aGlzIHNlZW1zIHRvIHN1Y2NlZWQgKHJlcG9ydHMgdGhlIHJpZ2h0IG51bWJlciBvZiBieXRlcyBz ZW50KQorYnV0IG5vdGhpbmcgYXBwZWFycyBvbiB0aGUgZmFyIHNpZGUuCisKK1NVTU1BUlk6CisK KyAgVG8gZG93bmxvYWQgYSB0ZXh0IGZpbGU6IEdFVCAvQVNDSUkgYmxhaC50eHQgICAgKC9BU0NJ SSBpcyBvcHRpb25hbCkKKyAgVG8gZG93bmxvYWQgYSBiaW5hcnkgZmlsZTogR0VUIC9CSU5BUlkg YmxhaC5iaW4gKC9CSU5BUlkgaXMgcmVxdWlyZWQpCisgIFRvIHVwbG9hZCBhIHRleHQgZmlsZTog UFVUIGJsYWgudHh0ICAgICAgICAgICAgICgvQVNDSUkgc3dpdGNoIG5vdCBuZWVkZWQpCisgIFRv IHVwbG9hZCBhIGJpbmFyeSBmaWxlOiBQVVQgL0JJTkFSWSBibGFoLmJpbiAgIChkb2Vzbid0IHdv cmspCisKK1Byb2JsZW1zOgorICAuIFdoeSBkb2Vzbid0IEJJTkFSWSAic3RpY2siPworICAuIFdo eSBkb24ndCBiaW5hcnkgdXBsb2FkcyB3b3JrPworCitUaGUgY3VscHJpdCBzZWVtcyB0byBiZSB0 aGUgVk1TIHZlcnNpb24gb2YgenhpbigpLiAgSW4gdGhlIEZUUCBtb2R1bGUsCit6eGluKCkgaXMg Y2FsbGVkIG9ubHkgd2hlbiBzZW5kaW5nIGJpbmFyeSBmaWxlcy4gIEluIFZNUywgenhpbigpIGlz IGp1c3QKK2EgZnJvbnQgZW5kIGZvciBDLUxpYnJhcnkgZnJlYWQoKS4gIEl0IHByb2JhYmx5IG5l ZWRzIHRvIGRvIGp1c3QgZG8KK3ptaW5jaGFyKCkgaW4gYSBsb29wLCBsaWtlIGJpbmFyeSBtb2Rl IGRvZXMsIGJ1dCBjYWxsaW5nIHp6b3V0IGluc3RlYWQKK29mIHh4b3V0LiAgT3Igc29tZXRoaW5n IGxpa2UgdGhhdC4gIEZJTklTSCBUSElTIFRPTU9SUk9XIChkZWJ1ZyBvbiBncnVtcHkpLgorCisy IE1hciAyMDA3OiBOZXcgbG9ncyBmcm9tIEpvaG4gRHVubGFwLgorCitlbWEtMTYzNi1sb2ctMDE3 NS5kYmc6IEMtS2VybWl0IHVwbG9hZHMgYSBzaG9ydCBmaWxlLiBJdCByZWNlaXZlcyBhbiBBY2sg Zm9yCit0aGUgWiBwYWNrZXQgaXQganVzdCBzZW50LCB0YWlsZ2F0ZWQgYnkgdGhlIGJlZ2lubmlu ZyBvZiBhIE5hayBmb3IgdGhlIG5leHQKK3BhY2tldC4gIFdoZW4gdGhlIHNlY29uZCBTT0ggaXMg ZW5jb3VudGVyZWQsIGl0IGlzIHB1dCBiYWNrIGluIHRoZSBteXJlYWQKK3F1ZXVlLiAgVGhlbiB0 aGUgcHJvdG9jb2wgZW5naW5lLCB0byB3aGljaCB3ZSByZXR1cm4gdGhlIEFjaywgc2F5cywgIkkg aGF2ZQordGhlIHBhY2tldCBJIHdhbnRlZCBzbyBJJ20gY2xlYXJpbmcgdGhlIGJ1ZmZlciIsIGFu ZCBhd2F5IGdvIHRoZSBmaXJzdCB0d28KK2J5dGVzIG9mIHRoZSBOYWsgZnJvbSB0aGUgbXlyZWFk IGJ1ZmZlci4gIFRoZW4sIGhhdmluZyBqdXN0IHJlY2VpdmVkIHRoZSBBY2sKK29mIG91ciBaIHBh Y2tldCwgd2Ugc2VuZCBvdXIgQiwgYW5kIGdvIHRvIHJlYWQgdGhlIHJlcGx5LiAgaW5fY2hrIGZp bmRzIDAgaW4KK3RoZSBteXJlYWQgYnVmZmVyICh3aGljaCB3ZSBqdXN0IGNsZWFyZWQpIGFuZCA2 IHdhaXRpbmcgdG8gYmUgcmVhZCBmcm9tIHRoZQorY29tbXMgY2hhbm5lbCwgd2hpY2ggaXQgZG9l cywgb2J0YWluaW5nIHRoZSByZW1haW5pbmcgNiBieXRlcyBvZiB0aGUgTmFrLAord2hpY2ggaXQg cHJvcGVybHkgZGlzY2FyZHMuICAoVGhlIHJlYXNvbiB0aGlzIGlzIHByb3BlciBpcyB0aGF0LCBo YXZpbmcKK2FscmVhZHkgcmVjZWl2ZWQgdGhlIEFjayBmb3IgdGhlIGxhc3QgcGFja2V0IGl0IHNl bnQsIG5vIEFjayBvciBOYWsgdGhhdAorYXJyaXZlcyBzdWJzZXF1ZW50bHkgLS0gaW4gdGhlIG5v bi13aW5kb3dpbmcgY2FzZSAtLSBjb3VsZCBwb3NzaWJseSBhZmZlY3QKK3doYXQgaXQgZG9lcyBu ZXh0LikgIFNpbmNlIGl0IGhhc24ndCB5ZXQgZm91bmQgYSBnb29kIHBhY2tldCwgaXQga2VlcHMK K3JlYWRpbmcsIGFuZCBub3cgaXQgZmluZHMgdGhlIEFjayB0byB0aGUgQiwgYXMgc29vbiBhcyBp dCBzaG93ZWQgdXAuICBUaGlzCitpcyBob3cgaXQncyBzdXBwb3NlZCB0byB3b3JrLiAgTm8gdGlt ZSB3YXMgbG9zdCBiZWNhdXNlIG9mIGFueXRoaW5nIHRoYXQKK0MtS2VybWl0IGRpZC4KKworZW1h LTE2MzYtbG9nLTAxNzQuZGJnOiBDLUtlcm1pdCB1cGxvYWRzIGEgc2hvcnQgZmlsZS4gSXQgc2Vu ZHMgRGF0YSBwYWNrZXQKKyMzIGFuZCByZWNlaXZlcyB0aGUgQWNrIGZvbGxvd2VkIGltbWVkaWF0 ZWx5IGJ5IHRoZSBmaXJzdCAzIGJ5dGVzIG9mIGEgTmFrCitmb3IgcGFja2V0IDQuICBXaGVuIGl0 IGdldHMgdG8gdGhlIFNPSCBvZiB0aGUgc2Vjb25kIHBhY2tldCwgaXQgcHVzaGVzIGl0CitiYWNr IGluIHRoZSBxdWV1ZS4gIEFnYWluLCBpbnB1dCgpIGZsdXNoZXMgdGhlIGlucHV0IGJ1ZmZlciAo bXlyZWFkIHF1ZXVlCithbmQgZGV2aWNlIGJ1ZmZlcikuICBDLUtlcm1pdCBkZXRlY3RzIEVPRiBv biB0aGUgZmlsZSBpdCBpcyBzZW5kaW5nLCBhbmQKK3NlbmRzIHRoZSBaIHBhY2tldC4gIFRoZW4g aXQgcmVhZHMgdGhlIHJlbWFpbmluZyBieXRlcyBvZiB0aGUgTmFrLAord2hpY2ggaXQgZGlzY2Fy ZHMsIGFuZCB0aGVuIGl0IGZpbmRzIHRoZSBBY2sgZm9yIFogd2hpY2ggY29tZXMgaW4gMjMgc2Vj b25kcworbGF0ZXIsIHNlbmRzIHRoZSBCLCBnZXRzIGEgTmFrIGZvciB0aGUgQiwgc2VuZHMgdGhl IEIgYWdhaW4sIGdldHMgdGhlIEFjaworZm9yIHRoZSBCIDQgc2Vjb25kcyBsYXRlciwgYW5kIGRv bmUuICBBZ2FpbiwgaXQncyB3b3JraW5nIHJpZ2h0IGFuZCBsb3NpbmcKK25vIHRpbWUuCisKK1Ro ZSBxdWVzdGlvbiByZW1haW5zOiB3aGF0IHdvdWxkIGhhcHBlbiBpZiB0aGUgcHJvdG9jb2wgZW5n aW5lIGRpZCBub3QgY2xlYXIKK3RoZSBidWZmZXI/ICBXb3VsZCB0dGlubCgpIHJldHJpZXZlIGFs bCBwYWNrZXRzIGluIHNlcXVlbmNlIGV2ZW4gd2hlbiB0aGV5Citjb21lIGJhY2sgdG8gYmFjaz8g IFRvIHRlc3QgdGhpcywgSSBoYWQgQy1LZXJtaXQgc2VuZCBhIGZpbGUgdXNpbmcgMzAgd2luZG93 CitzbG90cyBhbmQgb2JzZXJ2ZWQgdGhlIHN0cmVhbSBvZiBBY2tzIGluIHRoZSByZXZlcnNlIGRp cmVjdGlvbjoKKworICBIRVhEVU1QOiBteWdldGJ1ZiByZWFkICgxNiBieXRlcykKKyAgMDEgMjUg MjMgNTkgMmYgNTIgMzkgMGQgfCAwMSAyNSAyNCA1OSAyYiAyNiAzMSAwZCAgLiUjWS9SOS4gLiUk WSsmMS4KKyAgdHRpbmwgbG9va2FoZWFkIG15X2NvdW50PTkKKyAgdHRpbmwgbG9va2FoZWFkIHJl bW92ZWQ9Xk0KKyAgdHRpbmwgbG9va2FoZWFkIHB1c2hiYWNrIFNPUD1eQQorICBIRVhEVU1QOiB0 dGlubCBnb3QgKDcgYnl0ZXMpCisgIDAxIDI1IDIzIDU5IDJmIDUyIDM5ICAgIHwgICAgICAgICAg ICAgICAgICAgICAgICAgIC4lI1kvUjkKKyAgUkVDRUlWRSBCVUZGRVJTOgorICBidWZmZXIgaW51 c2UgYWRkcmVzcyBsZW5ndGggZGF0YSB0eXBlIHNlcSBmbGFnIHJldHJpZXMKKyAgICAgMCAgICAg MSAgICAgMjkyMTIgOTY2NyAgICAgMCAgIFkgICAgMyAgICAgMAorICBbASUjWV0KKyAgLi4uCisg IGluX2NoayBteV9jb3VudD04CisgIC4uLgorICB0dGlubCBsb29rYWhlYWQgbXlfY291bnQ9MQor ICB0dGlubCBsb29rYWhlYWQgcmVtb3ZlZD1eTQorICBIRVhEVU1QOiB0dGlubCBnb3QgKDcgYnl0 ZXMpCisgIDAxIDI1IDI0IDU5IDJiIDI2IDMxICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAg IC4lJFkrJjEKKyAgUkVDRUlWRSBCVUZGRVJTOgorICBidWZmZXIgaW51c2UgYWRkcmVzcyBsZW5n dGggZGF0YSB0eXBlIHNlcSBmbGFnIHJldHJpZXMKKyAgICAgMCAgICAgMSAgICAgMjkyMTIgOTY2 NyAgICAgMCAgIFkgICAgNCAgICAgMAorICBbASUkWV0KKworSGVyZSB3ZSBjYW4gc2VlIHRoYXQg dGhlIHB1c2hlZC1iYWNrIFNPSCB3YXMgcHJvcGVybHkgcmV0cmlldmVkIG5leHQgdGltZQorYXJv dW5kLCBhbmQgdGhlIHRhaWxnYXRpbmcgQWNrIHdhcyBub3QgbG9zdC4gIFRoaXMgc2NlbmFyaW8g cmVwZWF0cyBpdHNlbGYKKzIxMiB0aW1lcyBpbiB0aGUgbG9nLCBhbmQgdGhlcmUgYXJlIG5vIHNj cmV3dXBzLgorCitCYWNrIHRvIFZNUyBGVFAuLi4gIFRoZSBwcm9ibGVtIHdpdGggc2VuZGluZyBi aW5hcnkgZmlsZXMgaXMgdGhhdCB6eGluKCkKK3VzZXMgQy1MaWJyYXJ5IGZvcGVuKCkvZnJlYWQo KSBpbnN0ZWFkIG9mIFJNUywgc28gaXQgY2FuJ3QgYWNjZXNzIHRoZSBpbnB1dAorZmlsZSwgd2hp Y2ggd2FzIG9wZW5lZCBieSB6b3BlbmkoKSwgd2hpY2ggaXMgdG90YWxseSBSTVMtaWZpZWQgaW4g Vk1TCitDLUtlcm1pdC4gIEZvciBWTVMgb25seSwgSSByZXBsYWNlZCB0aGUgenhpbigpIGxvb3Ag YnkgYSB6bWluY2hhcigpIGxvb3AKK2xpa2UgdGhlIG9uZSB1c2VkIGluIHRleHQgbW9kZSwgZXhj ZXB0IHdpdGhvdXQgdGhlIGNoYXJhY3RlciBzZXQgb3IKK3JlY29yZC1mb3JtYXQgY29udmVyc2lv bi4gIFRlc3RlZCBieSBQVVQgL0JJTkFSWSBvZiBzb21lIGJpbmFyeSBmaWxlcywgd2hpY2gKK3dv cmtlZCBmaW5lLiAgY2tjZnRwLmMsIDIgTWFyIDIwMDcuCisKK05leHQgcHJvYmxlbS4uLiAgVk1T IEMtS2VybWl0IGZ0cCBjbGllbnQgc2VuZGluZyBiaW5hcnkgZmlsZXMgaW4gdGV4dCBtb2RlLgor VmFyaWF0aW9uIDE6IFdlIGp1c3Qgc2VuZCB0aGUgZmlsZS4gIHpvcGVuaSgpIGlzIHN1cHBvc2Vk IHRvIGRldGVjdCB0aGF0CitpdCdzIGEgYmluYXJ5IGZpbGUgYW5kIGF1dG9tYXRpY2FsbHkgc2V0 IHRoZSBtb2RlLiAgQW5kIGl0IGRvZXM6CisKKyAgem9wZW5pIGZpeGVkIGZpbGUgZm9ybWF0IC0g dXNpbmcgYmxrIEkvTworICB6b3BlbmkgYmluYXJ5IGZsYWcgYXQgb3Blbj0wCisgIHpvcGVuaSBp ZmlsZV9ibW9kZT0xCisgIHpvcGVuaSBiaW5hcnk9MAorICB6b3BlbmkgYXV0b3N3aXRjaCBmcm9t IFRFWFQgdG8gQklOQVJZCisgIHpvcGVuaSBSTVMgb3BlcmF0aW9ucyBjb21wbGV0ZWQgb2sKKwor YnV0IHRoZW4gaW4gZ25maWxlKCk6CisKKyAgaWYgKCFzZXJ2ZXIgfHwgKHNlcnZlciAmJiAoKHdo YXRydSAmIFdNSV9GTEFHKSA9PSAwKSkpCisgICAgYmluYXJ5ID0gZ25mX2JpbmFyeTsJLyogUmVz dG9yZSBwcmV2YWlsaW5nIHRyYW5zZmVyIG1vZGUgKi8KKworV2VsbCwgc2luY2UgVk1TIHNldHMg dGV4dC9iaW5hcnkgbW9kZSBhdXRvbWF0aWNhbGx5IHdoZW4gc2VuZGluZyBmaWxlcywKK3RoaXMg Y29kZSBjYW4gKGFuZCBzaG91bGQpIGJlIHNraXBwZWQgaW4gVk1TLiAgZ25maWxlKCk6IGNrY2Zu cy5jLCAyIE1hciAyMDA3LgorCitWYXJpYXRpb24gMjogQklOQVJZIG9yIFNFVCBGSUxFIFRZUEUg QklOQVJZIGRvZXNuJ3QgZm9yY2UgYmluYXJ5IG1vZGUuICBCdXQKK1NFVCBGVFAgVFlQRSBCSU5B UlkgZG9lcy4gIEJ1dCBCSU5BUlkgZG9lcyBpbmRlZWQgY2FsbCBkb2Z0cHR5cCgpIHNvIHdoYXQn cwordGhlIHByb2JsZW0/ICBXZSBkbyBpbmRlZWQgc2V0IGZ0cF90eXAgdG8gMSBidXQgaXQgZ2V0 cyByZXNldCBzb21ld2hlcmUKK2JlZm9yZSB3ZSBjYWxsIHpvcGVuaSgpLiAgQnV0IHRoZW4gem9w ZW5pKCkgcHV0cyBpdCBiYWNrIHRvIDEuICBUcmFjaW5nCit0aHJvdWdoIGEgdHJhbnNmZXIsIGl0 IGxvb2tzIGxpa2UgYWxsIG9mIHRoaXMgd29ya3MgcmlnaHQsIGl0J3Mgb25seSB0aGF0Cit0aGUg ZmlsZSB0cmFuc2ZlciBkaXNwbGF5IHNheXMgVEVYVCB3aGVuIHRoZSB0cmFuc2ZlciBpcyByZWFs bHkgaW4gYmluYXJ5Cittb2RlLiAgVGhpcyBpcyBiZWNhdXNlIHNjcmVlbigpIGlzIGNhbGxlZCBi ZWZvcmUgb3BlbmkoKS4gIEkgd29uZGVyIGlmIHdlCitjYW4gY2FsbCBzY3JmdCgpIGZyb20gdGhl IGZ0cCBtb2R1bGUuLi4gIE5vLCB0aGF0IHdvdWxkIGJlIHRvbyBlYXN5LiAgT0ssCitzZW5kcmVx dWVzdCBjYWxscyBvcGVuaSgpIGFuZCBzZXRzIHRoZSBmaWxlIG1vZGU7IHB1dGZpbGUoKSBjYWxs cworc2NyZWVuKFNDUl9GTiksIHdoaWNoIHByaW50cyB0aGUgdHJhbnNmZXIgbW9kZS4gIEJ1dCBw dXRmaWxlIGNhbGxzCitzZW5kcmVxdWVzdCgpIGFmdGVyIGl0IHB1dHMgdXAgdGhlIHNjcmVlbiB0 aGF0IHNheXMgdGhlIGZpbGUgdHlwZS4gIFNvIGl0Citsb29rcyBsaWtlIHNlbmRyZXF1ZXN0KCkg aGFzIHRvIGNhbGwgc2NyZWVuKFNDUl9GTikgYWdhaW4gaWYgaXQgY2hhbmdlcyB0aGUKK2ZpbGUg dHlwZS4gIE9LLCB0aGF0IGRpZCBpdC4gIGNrdXVzeC5jLCBja2NmdHAuYywgMiBNYXIgMjAwNy4K KworVGhlIEJJTkFSWSBhbmQgVEVYVCAoQVNDSUkpIGNvbW1hbmRzIGRvIG5vdCBpbmhpYml0IGF1 dG9tYXRpYyB0eXBlIHN3aXRjaGluZworaW4gVk1TLiAgVGhleSBkb24ndCBpbiBVbml4IGVpdGhl ci4gIFRoZXkgbmV2ZXIgaGF2ZS4gIFNob3VsZCB0aGV5PyAgSSB0aGluaworc28sIG90aGVyd2lz ZSB3aGF0IGdvb2QgYXJlIHRoZXk/ICBQbHVzIHdlIHdhbnQgdGhlIEtlcm1pdCBGVFAgY2xpZW50 IHRvCitiZWhhdmUgbGlrZSB0aGUgb3RoZXJzLiAgSSBhZGRlZCBjb2RlIGZvciB0aGlzIGJ1dCBp dCBkb2Vzbid0IHdvcmssIGR1ZSB0bwordGhlIGxheWVycyBhbmQgbGF5ZXJzIG9mIHRleHQvYmlu YXJ5IGRldGVjdGlvbiBhbmQgc3dpdGNoaW5nIGFuZAoraWYtdGhpcy1idXQtdGhlbi1pZi10aGF0 Li4uICBBbnl3YXksIG5vIGhhcm0gZG9uZS4gIFRoZSBub3JtYWwgcnVsZSBpczoKK3doZW4geW91 IFBVVCBhIGZpbGUsIEtlcm1pdCBmaWd1cmVzIG91dCBvbiBhIHBlci1maWxlIGJhc2lzIHdoZXRo ZXIgdG8gdXNlCit0ZXh0IG9yIGJpbmFyeSBtb2RlIHVubGVzcyB5b3UgaW5jbHVkZSBhIC9URVhU ICgvQVNDSUkpIG9yIC9CSU5BUlkgc3dpdGNoCitpbiB0aGUgUFVUIChvciBNUFVUKSBjb21tYW5k LiAgY2t1dXNbcjNdLmMsIGNrY2Z0cC5jLCAyIE1hciAyMDA3LgorCitXZWQgTWFyIDcgMTY6MjE6 MTMgMjAwNyBXUk9URSBTSE9SVCBURVNUIFBST0dSQU0gZm9yIHR0cnVuY21kICh0aGUgb3BlbnB0 eQordmVyc2lvbikgb24gTWFjIE9TIFguICBPbiBkdWxjZTogfi9rZXJtaXQvdHRwdHkuYyAvIHR0 cHR5LnNoLiAgSXQgc3RhcnRzIHRoZQorZXh0ZXJuYWwgcHJvdG9jb2wgaW4gdGhlIGxvd2VyIGZv cmsuICBUaGUgY29tbWFuZCB0byBydW4gaXMgYSBjb21tYW5kLWxpbmUKK2FyZ3VtZW50LiAgU2Vu ZGluZyBhbmQgcmVjZWl2aW5nIGZpbGVzIHdpdGggS2VybWl0IHdvcmtzIE9LLiAgQnV0IGFnYWlu LCB0aGUKK3N0YW5kYWxvbmUgcHJvZ3JhbSB0b3RhbGx5IGZhaWxzIHdoZW4gSSB1c2Ugc3ogb3Ig bHN6IGFzIHRoZSBleHRlcm5hbAorcHJvdG9jb2wuICBTbyBpdCBsb29rcyBsaWtlIHdlIGNhbiBy dWxlIG91dCBhbnkgZW52aXJvbm1lbnRhbCBlZmZlY3RzIG9mCitydW5uaW5nIHRoZSBjb2RlIGlu c2lkZSBDLUtlcm1pdC4KKworTW9uIE1hciAxMiAxNjo1MjoyMCAyMDA3OiBQdXQgc29tZSBlZmZv cnQgaW50byBtYWtpbmcgdHRwdHkuYyBtb3JlIHVzZWZ1bDsKK2FkZGVkIGEgZGVidWcgbG9nLiAg Rm91bmQgdGhhdCBmb3Igc29tZSByZWFzb24sIGF0IGxlYXN0IG9uIE1hYyBPUyBYLAorc2VsZWN0 KCkgYWx3YXlzIHRpbWVkIG91dCBhdCB0aGUgdGhlIGVuZC4gIEkgYWRkZWQgYSBTSUdDSExEIGFs YXJtIGFuZCB0aGF0CitzZWVtcyB0byBoYW5kbGUgdGhlIGZvcmsgZXhpdCBjb25kaXRpb24gdmVy eSBuaWNlbHkuICBOb3cgd2UgY2FuIHNlbmQgKHNheSkKK2EgM01CIGZpbGUgYXQgZ29vZCBzcGVl ZCBvbiBFdGhlcm5ldCAoMU1jcHMpIGNvbnNpZGVyaW5nIHRoZSBkZWJ1Z2dpbmcsIGV0YywKK2Fu ZCBpdCB0ZXJtaW5hdGVzIGluc3RhbnRseS4gIEJ1dCB3aGVuIHNlbmRpbmcgYSBmaWxlIGludG8g dHRwdHljbWQgKHdpdGgKKyJna2VybWl0IC1yIiksIHRoaW5ncyBnbyB3cm9uZyBhdCB0aGUgZW5k IC0tIHRoZSBaIHBhY2tldCBpcyBuZXZlcgorYWNrbm93bGVkZ2VkLiAgVGhpcyBpcyByZXByb2R1 Y2libGUuICBNYXliZSB0aGlzIGlzIGEgZ29vZCBsZWFkLi4uLiAgVGhlIGxvZworc2hvd3MgdGhh dCBzZWxlY3QoKSB0aW1lZCBvdXQsIGV2ZW4gdGhvdWdoIHRoZSBna2VybWl0IGZvcmsgaGFkIG5v dCB5ZXQKK2V4aXRlZCAob3IgZmluaXNoZWQpLiAgSXQgbG9va3MgbGlrZSBna2VybWl0IHNlbnQg dGhlIEFjaywgdHRwdHkuYyByZWFkIGl0Citmcm9tIHRoZSBwdHkgYW5kIHNlbnQgaXQgb3V0IHRo ZSBuZXQ6CisKKyAgMDAwMzogcmVhZCBwdHk9OCAgICAgICAgICAgICAgICA8LS0gcmVhZCBBY2sg ZnJvbSBwdHkKKyAgMDAwMzogbG9vcCB0b3AgaGF2ZV9wdHk9MQorICAwMDAzOiBsb29wIHRvcCBo YXZlX25ldD0xCisgIDAwMDM6IEZEX1NFVCBwdHlfaW4KKyAgMDAwMzogRkRfU0VUIHR0eWZkIGlu CisgIDAwMDM6IEZEX1NFVCB0dHlmZCBvdXQ9OAorICAwMDAzOiBuZmRzPTUKKyAgMDAwMzogc2Vs ZWN0PTEKKyAgMDAwMzogRkRfSVNTRVQgdHR5ZmQgb3V0CisgIDAwMDM6IHdyaXRlIG5ldD04ICAg ICAgICAgICAgICAgPC0tIHNlbmQgYWNrIHRvIG5ldAorICAwMDAzOiBsb29wIHRvcCBoYXZlX3B0 eT0xCisgIDAwMDM6IGxvb3AgdG9wIGhhdmVfbmV0PTEKKyAgMDAwMzogRkRfU0VUIHB0eV9pbgor ICAwMDAzOiBGRF9TRVQgdHR5ZmQgaW4KKyAgMDAwMzogbmZkcz01CisgIDAwMDk6IHNlbGVjdD0w CisgIDAwMDk6IHNlbGVjdCB0aW1lb3V0IC0gaGF2ZV9wdHk9MQorCitCdXQgQWNrIG5ldmVyIGFy cml2ZWQuICBUaGlzIGlzIGEgc3RyZWFtaW5nIHRyYW5zZmVyLiAgQnV0IG5vcGUsIHN0cmVhbWlu ZworaXMgbm90IHRoZSBwcm9ibGVtLiAgSWYgSSBkaXNhYmxlIHN0cmVhbWluZyAoImdrZXJtaXQg LVNyIiksIHdlIGhhbmcgaW4gaW4KK3RoZSBtaWRkbGUgb2Ygc2VuZGluZyB0aGUgZGF0YS4gIElm IEkgdXNlIHNtYWxsIHBhY2tldHMsIHdlIGRvbid0IGhhbmc6CisxMDAwIGlzIE9LLCAyMDAwIGlz IG5vdC4gIEluIGZhY3QsIHRoZSBjdXRvZmYgaXMgMTAyNC4gIE9LLCBUQkMuLi4KKworV2VkIDE0 IE1hciAyMDA3OiBSZWNlaXZpbmcgYSBmaWxlIHRocnUgdHRwdHkgImdrZXJtaXQgLWUgMTIwMCAt U3JkIgorcHJvZHVjZXMgYSBkZWJ1ZyBsb2cgdGhhdCBzaG93cyB0aGF0IGdrZXJtaXQgZ2V0cyBh IGxvdCBvZiBFQUdBSU4gZXJyb3JzCit3aGVuIGl0IHRyaWVzIHRvIHJlYWQgZnJvbSBpdHMgc3Rk aW4uICBJbiBmYWN0LCBpdCB0YWtlcyA2IHRyaWVzIChyZWFkKCkKK2NhbGxzKSB0byByZWFkIHRo ZSBTIHBhY2tldCAoMjcgYnl0ZXMpLiAgVGhlbiB3aGVuIHRoZSBmaXJzdCBkYXRhIHBhY2tldAor YXJyaXZlcyAoMTIwMCBieXRlcyksIHJlYWQoKSBuZXZlciByZXR1cm5zIGV2ZW4gb25lIHNpbmds ZSBieXRlLiAgVGhlCit0aW1lb3V0IGludGVydmFsIGlzIDE1IHNlY29uZHMgYW5kIGl0IHRpbWVz IG91dCByZXBlYXRlZGx5LiAgQWRkZWQgYQorcHJpbWl0aXZlIGhleCBkdW1wIHRvIHRoZSB0dHB0 eSBkZWJ1ZyBsb2cgZm9yIGVhY2ggcmVhZC93cml0ZSAoc2hvd2luZyBvbmx5Cit0aGUgZmlyc3Qg MjQgY2hhcmFjdGVycyBhbmQgdGhlIGxhc3QgY2hhcmFjdGVyLCBzbyBpdCBmaXRzIG9uIG9uZSBs aW5lKS4KK1RyaWVkIHVwbG9hZGluZyBhIGZpbGUuICBUaGUgUywgRiwgYW5kIEEgcGFja2V0cyAo c2hvcnQpIGFyZSByZWNlaXZlZCBhbmQKK0FjaydkIE9LLCBidXQgdGhlbiB0dHB0eSBzZWxlY3Qo KSB0aW1lcyBvdXQsIG5ldmVyIHJlY2VpdmluZyBldmVuIG9uZSBieXRlCitmcm9tIHRoZSBEIHBh Y2tldC4gIENsZWFybHksIHdoZW4gdGhlIHB0eSBkcml2ZXIgcmVjZWl2ZXMgYSBidXJzdCBvZiA+ IDFLCitieXRlcywgc3RvcHMgd29ya2luZy4gIEFzIGJlZm9yZSwgaWYgSSBsaW1pdCB0aGUgcGFj a2V0cyB0byA8IDFLLCBpdCB3b3JrcworZmluZS4KKworQ2FuIEkgc2VuZCBhbiA4LWJpdCBiaW5h cnkgZmlsZT8gIE5vcGUuICB0dHB0eSByZWFkcyB0aGUgYmluYXJ5IGRhdGEganVzdAorZmluZSBm cm9tIHRoZSBuZXQgYW5kIHdyaXRlcyBpdCBleGFjdGx5IGFzIGl0IHdhcyByZWNlaXZlZCB0byB0 aGUgcHR5LCBidXQKK3RoZSBmaXJzdCB0aW1lIHdlIHdyaXRlIGFuIDgtYml0IGJ5dGUsIHdlIG5l dmVyIGhlYXIgYmFjayBmcm9tIHRoZSBQVFkKK2FnYWluLiAgQnV0IHRoZSBsb2cgc2hvd3MgdGhh dCB3aGVuIHRoZSBpbml0aWFsIDctYml0IHBhY2tldHMgZnJvbSB0aGUgcHR5LAoraXQgbG9va3Mg bGlrZSB0aGUgUFRZIGlzIG5vdCBpbiByYXdtb2RlLCBiZWNhdXNlIHRoZXNlIHBhY2tldHMgZW5k IHdpdGggXkoKK3JhdGhlciB0aGFuIF5NLiAgQ2FsbGluZyBwdHlfbWFrZV9yYXcoKSBvbiB0aGUg bWFzdGVyZmQgYW5kIHNsYXZlZmQKK2V4cGxpY2l0bHksIGhvd2V2ZXIsIGRvZXNuJ3QgY2hhbmdl IGFueXRoaW5nLiAgSXQgZG9lc24ndCBtYXR0ZXIgaWYgSSBkbwordGhpcyBpbiB0aGUgbG93ZXIg Zm9yayBvciB0aGUgdXBwZXIgZm9yay4gIFNvIG1heWJlIGl0J3MgdGhlIGFjdHVhbAorc2VtYW50 aWNzIG9mIHB0eV9tYWtlX3JhdygpIHRoYXQgYXJlIHdyb25nLgorCitUaHUgMTUgTWFyIDIwMDc6 IFdlbnQgdGhydSBhbGwgdGhlIHRlcm1pbmFsIG1vZGUgZmxhZ3MgaW4gTWFjIE9TIFg7IGRpZG4n dAoraGVscC4gIENoYW5nZWQgaGV4IGR1bXAgdG8gc2hvdyB3aG9sZSBwYWNrZXQuICBQdXQgaGV4 IGR1bXAgcm91dGluZSBpbiBhCitwcml2YXRlIGNvcHkgb2YgRy1LZXJtaXQuICBUcmllZCB0byB0 cmFuc2ZlciBhbiA4LWJpdCBmaWxlLCBsb2dnaW5nIGJvdGgKK3R0cHR5IGFuZCBna2VybWl0LiAg Q29tcGFyZWQgd2hhdCB0dHB0eSByZWNlaXZlZCBvbiBzdGRpbiB3aXRoIHdoYXQgaXQgc2VudAor dG8gdGhlIHB0eSAoc2FtZSkgYW5kIHdoYXQgd2FzIHJlY2VpdmVkIGJ5IEctS2VybWl0IChzYW1l KS4gIFRoZW4gSSByZWFsaXplZAordGhhdCBteSBsaXR0bGUgdGVzdCBwcm9ncmFtIHdhcyBub3Qg cHV0dGluZyBpdHMgY29udHJvbGxpbmcgdGVybWluYWwgaW50bworcmF3IG1vZGU7IHdoZW4gSSBk aWQgdGhhdCwgSSBjb3VsZCB1cGxvYWQgYmluYXJ5IGZpbGVzIChzdHJlYW1pbmcsIDJNQi9zZWMp LgorQW5kIHdpdGggWm1vZGVtIHRvbyAod2l0aCByejsgbHJ6IGRvZXNuJ3Qgd29yayBmb3Igc29t ZSByZWFzb24pLiAgTG9va2luZworYmFjayBhdCB0aGUgb3JpZ2luYWwgaW4gY2t1dGlvLmMsIEkg c2VlIHRoYXQgdHRwdHljbWQoKSBuZXZlciBjYWxsZWQKK3R0cGt0KCkuICBNYXliZSB0aGF0IHdh cyB0aGUgdHJvdWJsZSBhbGwgYWxvbmcuICAoWXVwLCBidXQgbWF5YmUgbm90IHRoZQord2hvbGUg dHJvdWJsZS4pCisKK01vdmluZyBiYWNrIHRvIEMtS2VybWl0IGFuZCB0aGUgb3JpZ2luYWwgdHRw dHljbWQoKSByb3V0aW5lLCBhZGRpbmcgdGhlIGNhbGwKK3RvIHR0cGt0KCksIGFuZCBzdHJpcHBp bmcgb3V0IGEgbG90IG9mIGNydWZ0LCBhbmQgbW92aW5nIHRoZSBwdHlfbWFrZV9yYXcoKQorY29k ZSB0byBja3VwdHkuYywgS2VybWl0IHVwbG9hZHMgYW5kIGRvd25sb2FkcyAoc3RyZWFtaW5nKSB3 b3JrIGZpbmUgaW4KK1NvbGFyaXMuICBabW9kZW0gc2VuZHMgYSBmaWxlLCBidXQgdGhlbiB0aGUg dHJhbnNmZXIgaGFuZ3MgYXQgdGhlIHZlcnkgZW5kLAorYXMgaWYgdGhlIHNpZ25vZmYgcHJvdG9j b2wgd2VyZSBsb3N0LiAgVGhpcyBoYXBwZW5zIG9uIFNvbGFyaXMuICBJZiBJIG1vdmUKK2JhY2sg dG8gTWFjIE9TIFgsIGV2ZXJ5dGhpbmcgd29ya3MganVzdCBmaW5lLiAgVGhlbiwgbWFraW5nIGEg S2VyYmVyaXplZAorY29ubmVjdGlvbiBmcm9tIHRoZSBNYWMgdG8gTmV0QlNELCBJIGNhbiBzZW5k IGZpbGVzIGZyb20gdGhlIE1hYyB3aXRoIGJvdGgKK1ptb2RlbSBhbmQgS2VybWl0LiAgUmVjZWl2 aW5nLi4uICBLZXJtaXQgT0suICBabW9kZW0uLi4gIE5vcGUuICAicno6CitQZXJzaXN0ZW50IENS QyBvciBvdGhlciBFUlJPUiIgKGFuZCBjcmVhdGVkIGEgMjY1TUIgZGVidWcubG9nISkKKworRnJp IDE2IE1hciAyMDA3OiB0dHB0eWNtZCgpIHdhcyBmb3Igc2VuZGluZyBmaWxlcyB3aXRoIFptb2Rl bSBhY3Jvc3MKK2VuY3J5cHRlZCBjb25uZWN0aW9ucy4gIEJ1dCBpdCBvY2N1cnJlZCB0byBtZSB0 aGF0IGl0J3MgbmVjZXNzYXJ5IGZvcgorY2xlYXItdGV4dCBjb25uZWN0aW9ucyB0b287IGUuZy4g VGVsbmV0LCB3aGVyZSAweGZmIGhhcyB0byBiZSBkb3VibGVkLiAgT2YKK2NvdXJzZSBabW9kZW0g ZG9lc24ndCBkbyB0aGF0IGl0c2VsZiwgc28gdGhlcmUncyBubyB3YXkgWm1vZGVtIGV4dGVybmFs Citwcm90b2NvbCBjb3VsZCB3b3JrIHdoZW4gZXhlY3V0ZWQgb3ZlciBhIFRlbG5ldCBjb25uZWN0 aW9uLCBhbmQgaW4gZmFjdAoraXQgZG9lc24ndC4gIEkgd29uZGVyIHdoeSBJIGV2ZXIgdGhvdWdo dCBpdCBkaWQuCisKK1dlZCAyMSBNYXIgMjAwNzogQmFjayB0byB3aGVyZSB3ZSBsZWZ0IG9mZiBh IHdlZWsgYWdvLiAgVHJ5aW5nIEMtS2VybWl0J3MKK3R0cHR5Y21kKCkgb24gdGhlIE1hYyBhZ2Fp biwgaW4gcmVtb3RlIG1vZGU6CisKKyAuIEctS2VybWl0IHNlbmQgdHh0IChrc3QpOiBPSyAgODMy S2NwcyAgCisgLiBHLUtlcm1pdCByZWN2IHR4dCAoa3IpOiAgT0sgIDQyNUtjcHMgIAorIC4gRy1L ZXJtaXQgc2VuZCBiaW4gKGtzYik6IE9LIDEwMDBLY3BzICAKKyAuIEctS2VybWl0IHJlY3YgYmlu IChrcik6ICBPSyAgMTg4S2NwcyAgCisKK0FuZCBabW9kZW06CisKKyAuIHN6IHR4dCAoenN0KTog T0sgIDU2M0tjcHMgIAorIC4gc3ogYmluICh6c2IpOiBPSyAgNzE0S2NwcyAgCisgLiByeiB0eHQg KHpyKTogIE9LICA4NjNLY3BzICAKKyAuIHJ6IGJpbiAoenIpOiAgT0sgIDE5OEtjcHMgIAorCitT byBpbiByZW1vdGUgbW9kZSwgZXZlcnl0aGluZyB3b3Jrcy4gIE5vdyBsZXQncyB0cnkgYSBjbGVh ci10ZXh0IFRlbG5ldAorY29ubmVjdGlvbi4uLgorCisgLiBHLUtlcm1pdCBzZW5kIHR4dCAoa3N0 KTogT0sgIDg0MUtjcHMKKyAuIEctS2VybWl0IHJlY3YgdHh0IChrcnQpOiBPSyAgMzkxS2Nwcwor IC4gRy1LZXJtaXQgc2VuZCBiaW4gKGtzYik6IE9LICA4MTFLY3BzCisgLiBHLUtlcm1pdCByZWN2 IGJpbiAoa3JiKTogT0sgIDE3MUtjcHMKKworQW5kIFptb2RlbSBvdmVyIHRoZSBzYW1lIGNsZWFy LXRleHQgdGVsbmV0IGNvbm5lY3Rpb246CisKKyAuIHN6IHR4dCAoenN0KTogT0sgIDkxS2NwcyAo KikKKworS2VybWl0IGlzIHNlbmRpbmcgc3ogbWVzc2FnZXMgbGlrZSAic3ogMy43MyAxLTMwLTAz IGZpbmlzaGVkLiIgdG8gdGhlCitob3N0LCB3aGljaCB0cmllcyB0byBleGVjdXRlIHRoZW0sIGFm dGVyIHRoZSB0cmFuc2ZlciBpcyBmaW5pc2hlZC4KK09mIGNvdXJzZSAic3oiIGlzIGEgY29tbWFu ZCwgYnV0OgorCisgIHN6OiBjYW5ub3Qgb3BlbiAzLjczOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0 b3J5CisgIHN6OiBjYW5ub3Qgb3BlbiAxLTMwLTAzOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5 CisgIHN6OiBjYW5ub3Qgb3BlbiBmaW5pc2hlZC46IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkK KworRGlkIEkgbG9zZSB0aGF0IGNvZGUgdGhhdCBkaXMtcmVkaXJlY3RzIHN0ZGVyciB3aGVuIEkg d2VudCBiYWNrIHRvIHVzaW5nIHRoZQorcHR5IGNvZGUgZnJvbSB0aGUgY2t1cHR5IG1vZHVsZT8g IE5vLCBpdCdzIHRoZXJlIGFuZCBpdCdzIGJlaW5nIGV4ZWN1dGVkLgorQXBwYXJlbnRseSB0aGUg Y29weSBvZiBzeiBJIGhhdmUgaXMgd3JpdGluZyBpdHMgImZpbmlzaGVkIiBtZXNzYWdlIHRvIHN0 ZG91dAorYmVjYXVzZSAic3ogYmxhaCAyPiAvZGV2L251bGwiIGRvZXMgbm90IHN1cHByZXNzIGl0 LiAgU3RhcnRpbmcgYWdhaW4gd2l0aAorbHN6IGluc3RlYWQgb2Ygc3o6CisKKyAuIHN6IHR4dCAo bHpzdCk6IE9LICA0MTNLY3BzCisgLiBzeiBiaW4gKGx6c2IpOiBPSyAgRkFJTEVEICgqKQorIC4g cnogdHh0IChsenJ0KTogT0sgIAorIC4gcnogYmluIChsenJiKTogT0sKKworKCopIFNpZ2guICBV c2luZyBsc3osIHdlIGdldCAiZ2FyYmFnZSBjb3VudCBleGNlZWRlZCIgZXJyb3JzIGFuZCBldmVu dHVhbAorZmFpbHVyZS4gIEJ1dCB1c2luZyByZWd1bGFyIHN6LCB3ZSBnZXQgdGhlIGV4dHJhbmVv dXMgbWVzc2FnZSB0aGF0IHN0YXJ0cworc3ogb24gdGhlIGZhciB0ZW5kLCBhbmQgdGhlIHJlc3Vs dGluZyBnZXR0eSBiYWJibGUuCisKK0J1dCBldmVuIHdpdGhvdXQgY2hhbmdpbmcgdGhlIGNvZGUs IGl0IHdpbGwgd29yayBvbmUgbWludXRlLCBhbmQgdGhlbiBmYWlsCitjb25zaXN0ZW50bHkgdGhl IG5leHQuICBGb3IgZXhhbXBsZSwgSSB3YXMgYWJsZSB0byBzZW5kIGZpbGVzIHdpdGggc3oKK3N1 Y2Nlc3NmdWxseSBvdmVyIGFuZCBvdmVyLCBidXQgd2l0aCB0aGUgZ2V0dHkgYmFiYmxlIGF0IHRo ZSBlbmQuICBUaGVuLAorYWZ0ZXIgdHJ5aW5nIGxzeiBhbmQgdGhlbiBnb2luZyBiYWNrIHRvIHN6 LCBldmVyeSBhdHRlbXB0IGF0IHNlbmRpbmcgYSBmaWxlCitxdWl0cyB3aXRoICJHb3QgWkNBTiIu ICBUaGUgZGlmZmVyZW5jZSBoYXMgdG8gYmUgdGhhdCBLZXJtaXQgYWx3YXlzIGRvZXMgYXQKK2xl YXN0IHNvbWUgbWluaW1hbCBlbmNvZGluZyBvZiBDMC9DMSBjb250cm9sIGNoYXJhY3RlcnMgc3Vj aCBOVUwgYW5kIERFTCBhbmQKK0lBQywgYW5kIEkgZG91YnQgdGhhdCBabW9kZW0gZG9lcy4KKwor aHR0cDovL3pzc2guc291cmNlZm9yZ2UubmV0LyBzYXlzOgorCisgIElmIGZpbGUgdHJhbnNmZXIg aXMgaW5pdGlhdGVkIGJ1dCBuZXZlciBjb21wbGV0ZXMgKGllIGEgbGluZSBsaWtlIDoKKworICAg ICBCeXRlcyBTZW50OiAgICAgIDAvICAgIDUxMyAgIEJQUzowICAgICAgICBFVEEgMDA6MDAgIFJl dHJ5IDA6IEdvdCBaQ0FOCisKKyAgIGNhbiBiZSBzZWVuLCBidXQgdHJhbnNmZXIgbmV2ZXIgY29t cGxldGVzKSwgY2hhbmNlcyBhcmUgdGhlIHB0eS90dHkgb24gb25lCisgICBvZiB0aGUgc3lzdGVt cyBhcmUgbm90IDgtYml0IGNsZWFuLiAgKExpbnV4IGlzIDgtYml0IGNsZWFuLCBOZXRCU0QgaXMg bm90KS4KKyAgIFVzaW5nIHRoZSAtZSAoZXNjYXBlKSBvcHRpb24gb2Ygcnogc2hvdWxkIHNvbHZl IHRoaXMgcHJvYmxlbS4KKworSXQgZG9lc24ndCwgYXQgbGVhc3Qgbm90IHdpdGggbHJ6LiAgQW5k IHllcywgdGhlIHJlY2VpdmluZyBlbmQgaGFwcGVucyB0byBiZQorTmV0QlNELiAgQnV0IGl0IGxv b2tzIGxpa2UgdGhlIHpzc2ggcGVvcGxlIGhhdmUgYmVlbiBkb3duIHRoaXMgcm9hZCB0b28uCisK K0J1dCB3aXRoIHJ6IGFuZCBzeiwgaXQgd29ya2VkLiAgT25jZS4gIFR3aWNlLiAgVGhyZWUgdGlt ZXMuICBCdXQgb2YgY291cnNlLAord2l0aCB0aGUgZ2V0dHkgYmFiYmxlIGF0IHRoZSBlbmQuICBU aGlzIGNhbiBiZSB0YWtlbiBjYXJlIG9mIGJ5IGRvaW5nOgorCisgIHJ6IC1lcSA7IGNhdCA+IGZv bworCit3aGljaCBwdXRzICJzeiAzLjczIDEtMzAtMDMgZmluaXNoZWQiIGFuZCBhbnkgb3RoZXIg bWVzc2FnZXMgaW4gZm9vIChidXQgeW91CitoYXZlIHRvIHR5cGUgXkQgdG8gZmluaXNoIHRoZSBj YXQpLiAgVXNpbmcgdGhpcyBtZXRob2QgSSB3YXMgYWxzbyBhYmxlIHRvCitzZW5kIGFuIDhLIGJp bmFyeSBmaWxlIHRoYXQgY29udGFpbmVkIGEgdGVzdCBwYXR0ZXJuIG9mIGFsbCAyNTYgcG9zc2li bGUgYnl0ZQordmFsdWVzLiAgVGhlbiBJIHRyaWVkIGEgM01CIGJpbmFyeSBleGVjdXRhYmxlLiAg QWxsIE9LLiAgU28gaGVyZSB3ZSBnbyBhZ2FpbjoKKworIC4gc3ogdHh0ICh6c3QpOiBPSworIC4g c3ogYmluICh6c2IpOiBPSworIC4gcnogdHh0ICh6cnQpOiAKKyAuIHJ6IGJpbiAoenJiKTogCisK K0Rvd25sb2FkaW5nIGZhaWxzIGFib3V0IGhhbGZ3YXkgdGhyb3VnaCBhIGZhaXJseSBsYXJnZSBm aWxlLiAgSSB0cmllZCBhbgorZXZlbiBiaWdnZXIgZmlsZSwgZ3VhcmFudGVlZCB0byBiZSAxMDAl IEFTQ0lJOyBzYW1lIHRoaW5nIC0tIGhhbGZ3YXkKK3Rocm91Z2g6ICJyejogUGVyc2lzdGVudCBD UkMgb3Igb3RoZXIgRVJST1IiLiAgQnV0IGl0IHdvcmtlZCB3aXRoIGEgc21hbGxlcgordmVyc2lv biBvZiB0aGUgc2FtZSBmaWxlICg4MksgdmVyc3VzIDJNQikuICBUcmllZCBhZ2FpbiB3aXRoIHRo ZSBiaWdnZXIKK3ZlcnNpb24sIGl0IGZhaWxlZCBpbiBleGFjdGx5IHRoZSBzYW1lIHdheSBhdCBl eGFjdGx5IHRoZSBzYW1lIHNwb3Q6IGJ5dGUKK251bWJlciAxMDQ4MzIwLiAgQnV0IHRoaXMgaXMg anVzdCBBU0NJSSB0ZXh0IHNvIGl0IGNhbid0IGJlIGEgdHJhbnNwYXJlbmN5Citwcm9ibGVtLiAg U3Vic3RpdHV0aW5nIGFub3RoZXIgcGxhaW4gQVNDSUkgZmlsZSBvZiB0aGUgc2FtZSBzaXplIGJ1 dCB0b3RhbGx5CitkaWZmZXJlbnQgY29udGVudHMsIGl0IGRvZXNuJ3QgZmFpbCAoMi4zNk1CKS4g IEJhY2sgdG8gdGhlIHByZXZpb3VzIGZpbGUsIGl0CitmYWlscyBhZ2FpbiwgYnV0IGluIGEgZGlm ZmVyZW50IHNwb3QgKDgzMjk2MCkuICBTbyBpdCdzIG5vdCB0b3RhbGx5CitkZXRlcm1pbmlzdGlj LgorCitUbyByb3VuZCB0aGluZ3Mgb3V0LCBJIHRyaWVkIGRvd25sb2FkaW5nIHRoZSBiaW5hcnkg dGVzdC1wYXR0ZXJuIGZpbGU7IGl0J3MKK29ubHkgOEsuICBUaGlzIGZhaWxlZC4KKworICAtNCwg LS10cnktNGsgICAgICAgICAgICAgICAgZ28gdXAgdG8gNEsgYmxvY2tzaXplCisgIC1CLCAtLWJ1 ZnNpemUgTiAgICAgICAgICAgICBidWZmZXIgTiBieXRlcyAoTj09YXV0bzogYnVmZmVyIHdob2xl IGZpbGUpCisgIC1lLCAtLWVzY2FwZSAgICAgICAgICAgICAgICBlc2NhcGUgYWxsIGNvbnRyb2wg Y2hhcmFjdGVycyAoWikKKyAgLUUsIC0tcmVuYW1lICAgICAgICAgICAgICAgIGZvcmNlIHJlY2Vp dmVyIHRvIHJlbmFtZSBmaWxlcyBpdCBhbHJlYWR5IGhhcworICAtTCwgLS1wYWNrZXRsZW4gTiAg ICAgICAgICAgbGltaXQgc3VicGFja2V0IGxlbmd0aCB0byBOIGJ5dGVzIChaKQorICAtbCwgLS1m cmFtZWxlbiBOICAgICAgICAgICAgbGltaXQgZnJhbWUgbGVuZ3RoIHRvIE4gYnl0ZXMgKGw+PUwp IChaKQorCitUcmllZCBhZ2FpbiB3aXRoICJzeiAtTCAyNTYgLUIgMjU2IC00YWVxIi4gIERvZXNu J3QgY2hhbmdlIGFueXRoaW5nLgorCitOT1RFOiBNYWMgT1MgWCByeiAzLjczIDEtMzAtMDMgZG9l cyBub3Qgc3VwcG9ydCAtZS4KK05ldEJTRCByeiAwLjEyLjIwIGRvZXMgc3VwcG9ydCAtZS4KKwor VGh1IDIyIE1hciAyMDA3OiBJdCBvY2N1cnMgdG8gbWUgdGhhdCB0dHBrdCgpIG1pZ2h0IHN0aWxs IGJlIGEgcHJvYmxlbTsKK21heWJlIGl0J3MgdGhlIG5ldHdvcmsgY29ubmVjdGlvbiBhbmQgbm90 IHRoZSBwdHkgdGhhdCBpcyBub3QgdHJhbnNwYXJlbnQKK2Vub3VnaC4gIFRvIHRlc3QgdGhpcyB0 aGVvcnkgSSBkaWQgInN0dHkgcmF3IDsgc3R0eSAtYSIgYW5kIHRoZW4gY29waWVkIGFsbAorb2Yg dGhlIGZsYWcgdmFsdWVzIGludG8gdHRwa3QgaW4gdGhlIEJTRDQ0T1JQT1NJWCBzZWN0aW9uOgor CisgLiByeiB0eHQgKHpydCk6IE9LICgyLjM2TUIgZmlsZSwgd29ya2VkIDIgb3V0IG9mIDMgdGlt ZXMpCisgLiByeiBiaW4gKHpyYik6ICJyejogUGVyc2lzdGVudCBDUkMgb3Igb3RoZXIgRVJST1Ii CisKK0EgbGl0dGxlIG1vcmUgZmlkZGxpbmcgd2l0aCB0aGUgZmxhZ3MgYW5kIEkgZ290IHRoZSA4 SyBiaW5hcnkgdGVzdCBwYXR0ZXJuCit0byBTRUVNIHRvIGRvd25sb2FkIE9LIChpbiB0aGUgc2Vu c2UgdGhhdCByeiBnYXZlIGEgMCByZXR1cm4gY29kZSkgYnV0IHRoZQorZmlsZSBpdHNlbGYgd2Fz IHRydW5jYXRlZCwgYWx3YXlzIGF0IDIyNC4gIElmIEkgY2hhbmdlZCB0aGUgdGVzdCBwYXR0ZXJu CitmaWxlIHRvIG5vdCBpbmNsdWRlIGFueSBieXRlcyB3aXRoIHZhbHVlIDIyNCAoMHhlMCkgb3Ig MjU1ICgweGZmKSwgdGhlCitkb3dubG9hZCB3b3JrZWQuICBTbyB3ZSBoYXZlIGEgdHJhbnNwYXJl bmN5IHByb2JsZW0gc29tZXdoZXJlLiAgVGhlIGRlYnVnCitsb2cgc2hvd3MgdGhhdCBhbGwgYnl0 ZSB2YWx1ZXMgYXJlIGJlaW5nIHJlY2VpdmVkIGZyb20gdGhlIG5ldHdvcmsgY29ycmVjdGx5Citz byB0aGUgcHJvYmxlbSBoYXMgdG8gb2NjdXIgd2hlbiB3ZSB0cnkgdG8gZmVlZCB0aGVtIHRvIHRo ZSBwdHkuCisKK0J1dCBubyBhbW91bnQgb2YgdHdpZGRsaW5nIHdpdGggdGhlIHRlcm1pb3MgZmxh Z3Mgc2VlbXMgdG8gbGV0IHRoZXNlCitjaGFyYWN0ZXJzIHBhc3MgdGhyb3VnaC4gIE9mIGNvdXJz ZSwgc2luY2UgdGhleSBhcmUgbm90IGluIHRoZSBDMCBvciBDMQorY29udHJvbCByYW5nZSwgInN6 IC1lIiBkb2Vzbid0IHF1b3RlIHRoZW0gKHdoaWNoIGl0IGRvZXMgYnkgcHJlZml4aW5nIHdpdGgK K0N0cmwtWCBhbmQgdGhlbiBhZGRpbmcgMHg0MCB0byB0aGUgYnl0ZSB2YWx1ZSBzbyAoZS5nLikg TlVMIGJlY29tZXMgXlhALgorTm90ZSB0aGF0IDI1NSBkb2VzIG5vdCBjYXVzZSBwcm9ibGVtcyBi ZWNhdXNlIGl0IGNvaW5jaWRlcyB3aXRoIHRoZSBJQUMKK2NoYXJhY3RlcjsgdGhlIHJlbW90ZSBU ZWxuZXQgc2VydmVyIGRvdWJsZXMgb3V0Ym91bmQgSUFDcywgYW5kIEtlcm1pdCdzCit0dGluYygp IHVuZG91YmxlcyB0aGVtIGF1dG9tYXRpY2FsbHkgKGFzIHRoZSBsb2cgc2hvd3MpLgorCitUcnlp bmcgdG8gc2VuZCBhIGRpZmZlcmVudCBmaWxlIChhIEMtS2VybWl0IGJpbmFyeSkgc2hvd3MgdGhh dCAyNTUgaXMgdGhlCityZWFsIGtpbGxlcjsgdGhlIGZpbGUgaXMgdHJ1bmNhdGVkIHdoZXJlIHRo ZSBmaXJzdCBvbmUgYXBwZWFycyAoYXQgYWJvdXQKKzZLKSwgZXZlbiB0aG91Z2ggc29tZSAyMjQn cyBwcmVjZWRlIGl0LiAgR29pbmcgYmFjayB0byB0aGUgcmVtb3RlLW1vZGUgdGVzdCwKK0kgc2Vl IHRoZSBzYW1lIHRoaW5nIGhhcHBlbnMgd2l0aCB0aGUgYmluYXJ5IHRlc3QtcGF0dGVybiBmaWxl LCBpZiBJIHNlbmQgaXQKK2Zyb20gSzk1IGRpcmVjdCB0byByei11bmRlci1DLUtlcm1pdC1pbi1y ZW1vdGUtbW9kZS4gIFNvIGl0IGhhcyBub3RoaW5nIHRvCitkbyB3aXRoIEMtS2VybWl0IGhhdmlu ZyBhIG5ldHdvcmsgY29ubmVjdGlvbi4gIFlldCBpZiBJIHNlbmQgdGhlIHNhbWUgZmlsZQorZGly ZWN0IGZyb20gSzk1IHRvIHJ6LCBpdCBnb2VzIE9LIGFuZCB0aGUgcmVzdWx0IGlzIG5vdCB0cnVu Y2F0ZWQsIHNvIGl0J3MKK25vdCBabW9kZW0gZWl0aGVyLiAgVGhlIGRhdGEgYXJyaXZlcyB0byBD LUtlcm1pdCBpbnRhY3QsIHNvIHRoZSBmYWlsdXJlIGlzCitkZWZpbml0ZWx5IGluIHdyaXRpbmcg aXQgdG8gdGhlIHJ6IHByb2Nlc3MgdGhyb3VnaCB0aGUgc2xhdmUgYW5kIG1hc3RlciBwdHlzLgor CitCVVQgaWYgSSBzZW5kIHRoZSBzYW1lIGZpbGUgZnJvbSBLOTUgdG8gcnotdW5kZXItdHRwdHks IHRoYXQgd29ya3MuICBXaGF0J3MKK3RoZSBkaWZmZXJlbmNlPyAgU3VwcG9zZSBJIGp1c3QgdHJh bnNwbGFudCB0dHB0eSBsaXRlcmFsbHkgaW50byBDLUtlcm1pdC4uLgorSXQgbWFrZXMgbm8gZGlm ZmVyZW5jZS4gIFdoZW4gcmVjZWl2aW5nIHRoZSB0ZXN0LXBhdHRlcm4sIGl0IHRydW5jYXRlcyBp dAoraW4gZXhhY3RseSB0aGUgc2FtZSBwbGFjZS4KKworV2VsbCwgYWxsIHRoaXMgaXMgb24gTWFj IE9TIFguICBXaGF0IGlmIEkgbW92ZSBpdCB0byBhIGRpZmZlcmVudCBwbGF0Zm9ybT8KK09LLCBi dWlsZGluZyBvbiBTb2xhcmlzIGFuZCBmb2xsb3dpbmcgdGhlIGV4YWN0IHNhbWUgcHJvY2VkdXJl LCB0dHB0eWNtZCgpCitkb2Vzbid0IGV2ZW4gdXNlIHRoZSBuZXR3b3JrIGNvbm5lY3Rpb24uICBJ IHRoaW5rIHRoYXQncyBiZWNhdXNlIHJ6c3ogb24KK1NvbGFyaXMgaXMgaGFyZHdpcmVkIHRvIHVz ZSB0aGUgY29udHJvbGxpbmcgdGVybWluYWwgYW5kIGNhbid0IGJlCityZWRpcmVjdGVkLCBldmVu IGluIGEgcHR5PworCitNb3ZlZCB0byBOZXRCU0QuCisKKyAuIHN6IHR4dCAoenN0KTogRmFpbGVk ICgiR290IFpDQU4iKQorIC4gc3ogYmluICh6c2IpOiAKKyAuIHJ6IHR4dCAoenJ0KTogT0sKKyAu IHJ6IGJpbiAoenJiKTogCisKK1dlbGwsIHRoaXMgaXMgYSBiaWcgbWVzcy4gIFNlbmRpbmcgZG9l c24ndCB3b3JrIChvciBzb21ldGltZXMgaXQgZG9lcyBidXQKK3JlcG9ydHMgdGhhdCBpdCBkaWRu J3QpLiAgUmVjZWl2aW5nLi4uICB3ZWxsLCBhY3R1YWxseSBpdCdzIHRoZSBzYW1lIHRoaW5nOwor dGhlIGZpbGUgaXMgY29tcGxldGVseSB0cmFuc2ZlcnJlZCBidXQgdGhlbiB0aGUgZmluYWwgcHJv dG9jb2wgaGFuZHNoYWtlIGlzCitsb3N0LiAgVGhlIGxvY2FsIEMtS2VybWl0IHJldHVybnMgdG8g aXRzIHByb21wdCwgYnV0IHJ6IGlzIHN0aWxsIHJ1bm5pbmc6CisKKyAgUmV0cnkgMDogR290IFRJ TUVPVVQKKyAgUmV0cnkgMDogVElNRU9VVAorICBSZXRyeSAwOiBHb3QgVElNRU9VVAorICBSZXRy eSAwOiBUSU1FT1VUCisgIFJldHJ5IDA6IEdvdCBUSU1FT1VUCisgIFJldHJ5IDA6IFRJTUVPVVQK KyAgUmV0cnkgMDogR290IFRJTUVPVVQKKyAgUmV0cnkgMDogVElNRU9VVAorICBSZXRyeSAwOiBH b3QgVElNRU9VVAorICBSZXRyeSAwOiBUSU1FT1VUCisgIFJldHJ5IDA6IEdvdCBUSU1FT1VUCisK K0kgZG9uJ3Qgc2VlIGhvdyB0aGF0IGlzIGV2ZW4gcG9zc2libGUuICBFdmVuIGFmdGVyIEkgZXhp dCBmcm9tIEtlcm1pdCB0aGUKK21lc3NhZ2VzIGtlZXAgY29taW5nLCBldmVuIHRob3VnaCBwcyBk b2Vzbid0IHNob3cgdGhlIHJ6IHByb2Nlc3MgYW55d2hlcmUuCitMb29raW5nIGF0IHRoZSBjb2Rl LCBJIHNlZSBhIHBsYWNlIHdoZXJlIGVuZF9wdHkoKSB3YXMgc3RpbGwgY29tbWVudGVkIG91dAor ZnJvbSB0aGUgdHRwdHkuYyBlcGlzb2RlLCBJIHVuY29tbWVudGVkIGl0LiAgQnV0IHN0aWxsOgor CisgLiBzeiB0eHQgKHpzdCk6IEZhaWxzICgiR290IFpDQU4iKQorIC4gc3ogYmluICh6c2IpOiBG YWlscyBpbnN0YW50bHkgKGJ1dCB3aXRoIG5vIGRpYWdub3N0aWMpCisgLiByeiB0eHQgKHpydCk6 IE9LCisgLiByeiBiaW4gKHpyYik6IEZhaWxzIHdpdGggdG9ucyBvZiAiQmFkIENSQyIsICJHYXJi YWdlIENvdW50IGV4Y2VlZGVkIgorCitDb25jbHVzaW9uIGZvciB0aGUgZGF5OiBJIHRoaW5rIHRo aXMgaXMgaG9wZWxlc3MuICBFdmVuIGlmIEkgY2FuIGdldCBpdCB0bword29yayBzb21ld2hlcmUs IHRoZSByZXN1bHRzIGRlcGVuZCBvbiB0aGUgZXhhY3QgWm1vZGVtIHNvZnR3YXJlLCBob3cgaXQg dXNlcworc3RkaW4vb3V0IHZzIHN0ZGVyciB2ZXJzdXMgZ2V0dGluZyBpdHMgb3duIG5vbnJlZGly ZWN0YWJsZSBmaWxlIGRlc2NyaXB0b3IsCit2ZXJzdXMgdGhlIFptb2RlbSB2ZXJzaW9uIG9uIHRo ZSBvdGhlciBlbmQgYW5kIHdoaWNoIG9wdGlvbnMgYXJlIGF2YWlsYWJsZQorb24gZWFjaCwgdmVy c3VzIHRoZSBwdHkgYW5kIHNlbGVjdCgpIHF1aXJrcyBvbiBlYWNoIHBsYXRmb3JtLCBhbmQgb24g YW5kIG9uLgorSXQgd2lsbCBiZSBzbyBoYXJkIHRvIGV4cGxhaW4gYW5kIHRvIHNldCB1cCB0aGF0 IG5vYm9keSB3b3VsZCBldmVyIHVzZSBpdC4KK0l0IHdvdWxkIGJlIGJldHRlciB0byBqdXN0IGlt cGxlbWVudCBabW9kZW0gaW50ZXJuYWxseS4KKworRnJpIDIzIE1hciAyMDA3OiBXZW50IGJhY2sg dG8gdGhlIHNtYWxsIHRlc3QgcHJvZ3JhbSwgdHRwdHkuYy4gIFRyaWVkCitzZXR0aW5nIGJvdGgg dGhlIG1hc3RlciBhbmQgdGhlIHNsYXZlIHB0eSB0byByYXdtb2RlLCBldmVuIHRob3VnaCBJIGhh dmUKK25ldmVyIHNlZW4gYW55IG90aGVyIHNvZnR3YXJlIHRoYXQgZGlkIHRoaXMuICBJIGhhZCBp dCByZWNlaXZlIHRoZSBiaW5hcnkKK3Rlc3QgcGF0dGVybiBmaWxlOyBpdCB3b3JrZWQuICBJIG1h ZGUgYSBiaWdnZXIgdGVzdC1wYXR0ZXJuIGZpbGUsIDNNQiwKK2NvbnRhaW5pbmcgc2luZ2xlLCBk b3VibGUsIGFuZCB0cmlwbGUgY29waWVzIG9mIGVhY2ggYnl0ZSBpbiBieXRlIG9yZGVyIGFuZAor aW4gcmFuZG9tIG9yZGVyLCB0aGlzIG9uZSB3YXMgYWNjZXB0ZWQgdG9vLgorCitTbyBpdCB3b3Vs ZCBzZWVtIHRoYXQgdGhlIGNrdXB0eS5jIG1vZHVsZSBpcyBzb21ldGhpbmcgdG8gYXZvaWQgYWZ0 ZXIgYWxsLgorSXQncyBmdWxsIG9mIHN0dWZmIEkgZG9uJ3QgdW5kZXJzdGFuZCBhbmQgcHJvYmFi bHkgc2hvdWxkIG5vdCB1bmRvLiAgU28KK2NoYW5naW5nIEMtS2VybWl0J3MgdHRwdHljbWQoKSB0 byBtYW5hZ2UgaXRzIG93biBwdHkgYWdhaW4sIHVzaW5nIG9wZW5wdHkoKQorKHdoaWNoIGlzIG5v dCBwb3J0YWJsZSksIEkgZ290IGl0IGFsbCB0byB3b3JrIGluIHJlbW90ZSBtb2RlOiBLZXJtaXQK K3RleHQvYmluYXJ5IHVwL2Rvd24gYW5kIFptb2RlbSB0ZXh0L2JpbmFyeSB1cC9kb3duLiAgQnV0 IGluIGxvY2FsIG1vZGUgb24KK3RoZSBjbGllbnQgc2lkZSBvZiBhIFRlbG5ldCBjb25uZWN0aW9u Li4uCisKKyAgenN0OiBPSywgYnV0IHdlIHN0aWxsIGdldCB0aGUgZ2V0dHkgYmFiYmxlIGF0IHRo ZSBlbmQgdGhhdCBzdGFydHMgc3ouCisgIHpzYjogT0ssIGRpdHRvLiAgVGhpcyBpcyB3aXRoIHRo ZSAzTUIgdGVzdC1wYXR0ZXJuIGZpbGUuCisgIHpydDogTm90IE9LIC0tICJQZXJzaXN0ZW50IENS QyBvciBvdGhlciBFUlJPUiIKKyAgenJiOiBOb3QgT0sgLS0gZ290IHRoZSBjdXRvZmYgYXQgMjI0 IGFnYWluICJQZXJzaXN0ZW50IENSQyBvciBvdGhlciBFUlJPUiIKKworSXQncyBjbG9zZS4gIEJ1 dCBhY3R1YWxseSB0aGlzIHdhcyBzdGlsbCB3aXRoIFVTRV9DS1VQVFlfQyBkZWZpbmVkLiAgV2hl biBJCit1bmRlZmluZWQgaXQsIGl0IHdhcyBiYWNrIHRvIGJlaW5nIHRvdGFsbHkgYnJva2VuLiAg U3RhcnQgb3Zlci4gIChDaGVjayB0aGUKK25ldyBjZm1ha2VyYXcoKSBjb2RlLikKKworVHVlIDI3 IE1hciAyMDA3OiBTdGFydGluZyBvdmVyLiAgQmFjayB0byB0dHB0eS5jLiAgTGV0J3MgdmVyaWZ5 LCBWRVJZCitDQVJFRlVMTFksIHRoYXQgaXQgcmVhbGx5IGRvZXMgd29yaywgdXNpbmcgdGhlIG1v c3Qgc3RyZXNzZnVsIG9mIHRoZSBmb3VyCit0ZXN0czogc2VuZGluZyB0aGUgYmlnICgzLjI3NjhN QikgYmluYXJ5IHRlc3QgcGF0dGVybiBmcm9tIEs5NSBpbnRvIHJ6Cit0aHJvdWdoIHR0cHR5LCBs b2dnaW5nIGV2ZXJ5dGhpbmcuICB0dHB0eSBkZWZpbml0ZWx5IHJlY2VpdmVzIHRoZSBiaWcgZmls ZQorc21vb3RobHkgd2l0aCBubyBlcnJvcnMgb3IgaGljY3VwcyB3aGVuIEkgaGF2ZSBpdCBzZXQg dG8gdXNlIHRoZSBtYXN0ZXIgc2lkZQorb2YgdGhlIHB0eSBmb3IgaS9vLiAgVGhlIGFwcGxpY2F0 aW9uIHByb2dyYW0gKFptb2RlbSBpbiB0aGlzIGNhc2UpIHJ1bnMgb24KK3RoZSBzbGF2ZSwgYW5k IHRoZSBuZXR3b3JrIGFuZC9vciBjb250cm9sIHByb2dyYW0gY29tbXVuaWNhdGVzIHdpdGggdGhl CittYXN0ZXIuICBUaGlzIGltcGxpZXMgdGhhdCBabW9kZW0gY29udHJvbHMgdGhlIHRlcm1pbmFs IG1vZGVzIG9mIHRoZSBzbGF2ZSwKK2FuZCB0dHB0eSBzaG91bGQgYmUgY29uY2VybmVkIHdpdGgg dGhvc2Ugb2YgdGhlIG1hc3Rlci4gIERvaW5nIGl0IHRoaXMgd2F5CitpbiB0dHB0eSBjb25maXJt cyB0aGlzLgorCitGaW5lLiAgQnV0IGlmIEkgdGVsbCB0dHB0eSB0byBTRU5EIGEgZmlsZSB3aXRo IHN6LCBub3RoaW5nIGhhcHBlbnMuICBEaXR0bword2l0aCBsc3ouICBTZWxlY3QgdGltZXMgb3V0 IHdhaXRpbmcgZm9yIGlucHV0IGZyb20gdGhlIHB0eS4gIEJ1dCBpZiBJCittYW51YWxseSB0ZWxs IEs5NSB0byBSRUNFSVZFIC9QUk9UT0NPTDpaTU9ERU0gaXQgd29ya3MgT0suICBTb21laG93IHN6 J3MKK2luaXRpYWwgQjAwMDAwMCBzdHJpbmcgaXMgYmVpbmcgc3dhbGxvd2VkIHNvbWV3aGVyZSwg YW5kIGl0J3Mgd2FpdGluZyBmb3IKK2EgcmVwbHkgZnJvbSB0aGUgcmVjZWl2ZXIuICBzaWdoLi4u ICBCdXQgInR0cHR5IGdrZXJtaXQgLXMgZmlsZW5hbWUiIHdvcmtzCitmaW5lLiAgV2hhdCdzIHRo ZSBkaWZmZXJlbmNlPyAgSXQgaGFzIG5vdGhpbmcgdG8gZG8gd2l0aCBzdGRvdXQgdnMgc3RkZXJy Oworc3ogaXMgbm90IHdyaXRpbmcgdG8gc3RkZXJyIGF0IGFsbC4gIElzIGl0IHNvbWUgdGltaW5n IHRoaW5nIGJldHdlZW4gdGhlCitmb3Jrcz8gIEFoYS4gIEl0J3MgdGhhdCBJIGNoYW5nZSB0aGUg bW9kZXMgb2YgdGhlIHB0eSBtYXN0ZXIgaW4gb25lIGZvcmsKK3doaWxlIHN6IGlzIGFscmVhZHkg c3RhcnRpbmcgaW4gdGhlIG90aGVyIGZvcmsuCisKK09LLCBnb29kLCBub3cgZm9yIHRoZSBmaXJz dCB0aW1lIHdlIGhhdmUgS2VybWl0IGFuZCBabW9kZW0gYm90aCBhYmxlIHRvCit1cGxvYWQgYW5k IGRvd25sb2FkIGEgbGFyZ2Ugd29yc3QtY2FzZSBiaW5hcnkgdGVzdC1wYXR0ZXJuIGZpbGUuLi4g aW4KK3JlbW90ZSBtb2RlLiAgTm93IHRha2luZyB0b2RheSdzIGxlc3NvbnMgYW5kIGZpdHRpbmcg dGhlbSBiYWNrIGludG8KK0MtS2VybWl0IHNvIEkgY2FuIHRyeSBpdCBsb2NhbCBtb2RlLi4uCisK K1VzaW5nIEctS2VybWl0IGFzIHRoZSBleHRlcm5hbCBwcm90b2NvbCwgZmlyc3QgaW4gcmVtb3Rl IG1vZGUuLi4gIEFsbCBnb29kOgordGV4dC9iaW5hcnkgdXAvZG93bi4gIFRoZSAiaGFsdGluZyBw cm9ibGVtIiBpcyBzb2x2ZWQgYnkgU0lHQ0hMRCwgd2hpY2gKK2NhdGNoZXMgZm9yayB0ZXJtaW5h dGlvbiBpbnN0YW50bHkgYW5kIGxldHMgdHRwdHljbWQoKSBrbm93IHRoZXJlIGlzIG5vIG1vcmUK K3B0eS4gIFptb2RlbToKKworICB6c3Q6IE9LCisgIHpzYjogT0sKKyAgenJ0OiBPSworICB6cmI6 IE9LCisKK1RoYXQncyBhIGZpcnN0LiAgTmV4dCwgcmVwZWF0IGluIGxvY2FsIG1vZGUsIGluIHdo aWNoIEMtS2VybWl0IGlzIHRoZSBjbGllbnQKK2FuZCBoYXMgbWFkZSBhIFRlbG5ldCBjb25uZWN0 aW9uIHRvIGFub3RoZXIgaG9zdCBvdmVyIGEgc2VjdXJlIChLZXJiZXJvcyBWKQorY29ubmVjdGlv bjoKKworICBrc3Q6IE9LICAgICB6c3Q6IC4uLgorICBrc2I6IE9LCisgIGtydDogT0sgIAorICBr cmI6IE9LCisgIAorSXQgc2VlbXMgd2UgY2FuIG5ldmVyIGVuZCBhIGRheSBvbiBhIGhpZ2ggbm90 ZS4gIFNvbWVob3cgSSBzZWVtIHRvIGhhdmUKK2Jyb2tlbiByZWd1bGFyIGludGVybmFsIEtlcm1p dCBwcm90b2NvbCB0cmFuc2ZlcnMgb3ZlciBlbmNyeXB0ZWQgY29ubmVjdGlvbnMKKy0tIHRoZSBl bi9kZWNyeXB0aW9uIGVuZ2luZSBsb3NlcyBzeW5jLiAgQnV0IHRoZXkgc3RpbGwgd29yayBPSyBv dmVyIGEKK2NsZWFyLXRleHQgVGVsbmV0IGNvbm5lY3Rpb24uCisKK1RvZGF5J3MgY29kZSBpbiB+ LzgwL2R1bGNlLnRhciAoMjcgTWFyIDIwMDcpLgorCitBZGRlZCBtYWtlZmlsZSB0YXJnZXQgc29s YXJpczEwZytvcGVuc3NsLiAgR2F0aGVyZWQgYWxsIHRoZSBzdGFuZGFyZCBDRkxBR1MKK2ZvciBT b2xhcmlzIGludG8gY2RjZGViLmggc28gdGhleSBkb24ndCBoYXZlIHRvIGJlIGluY2x1ZGVkIGlu IGV2ZXJ5IHNpbmdsZQorbWFrZWZpbGUgdGFyZ2V0IGZvciBTb2xhcmlzLiAgT24gbG9jYWwgU29s YXJpcyAxMCBob3N0IE9wZW5TU0wgaXMgaW4KKy9vcHQvb3BlbnNzbC0wLjkuOGUvLiAgVHJpZWQg dGhlIG5ldyBtYWtlZmlsZSB0YXJnZXQsIHdvcmtzIE9LLiAgQWxzbyBtYWRlCitzb2xhcmlzMTAr b3BlbnNzbCBmb3IgU3VuIENDLCBidXQgY291bGRuJ3QgdGVzdCBpdCBiZWNhdXNlIEkgY2FuJ3Qg ZmluZCBhbnkKK1NvbGFyaXMgMTAgaG9zdCB0aGF0IGhhcyBTdW4gQ0MuICBCdWlsdCB3aXRoIGdj YyBhdCBhbm90aGVyIHNpdGUgdGhhdCBoYXMKK09wZW5TU0wgMC45LjhmLWRldiwgYWxsIE9LLiAg Y2tjZGViLmgsIG1ha2VmaWxlLCAyNCBKdW4gMjAwNy4KKworSXQgb2NjdXJzIHRvIG1lIHRoYXQg S2VybWl0IHRyYW5zZmVycyBvbiBzZWN1cmUgY29ubmVjdGlvbnMgbWlnaHQgaGF2ZSBiZWVuCiti cm9rZW4gYnkgdGhlIGNoYW5nZXMgSSBtYWRlIGJhY2sgaW4gRmVicnVhcnkgdG8gdHRpbmwoKSBm b3IgSm9obiBEdW5sYXAuCitIZXJlLCBmb3IgdGhlIGZpcnN0IHRpbWUsIHdlIGludm9rZSBteXVu cmQoKSB0byBwdXNoIGEgYnl0ZSBiYWNrIGludG8gdGhlCitpbnB1dCBxdWV1ZSwgYW5kIHRoZXJl IGlzIGFsc28gc29tZSBmdW5ueSBidXNpbmVzcyB3aXRoICJjc2F2ZSIsIHdoaWNoCitjaGFuZ2Vk LCBhbmQgd2hpY2ggYW4gb2xkIGNvbW1lbnQgbm90ZXMgdGhhdCBpdCBoYXMgdG8gYmUgdHJlYXRl ZCBzcGVjaWFsbHkKK3doZW4gZW5jcnlwdGluZy4gIFNvIGl0IGNvdWxkIGJlIHRoYXQgdGhlIGJy b2tlbiBLZXJtaXQgdHJhbnNmZXIgaGFzIG5vdGhpbmcKK3RvIGRvIHdpdGggdGhlIHdvcmsgb24g ZXh0ZXJuYWwgcHJvdG9jb2xzLCBhbmQgdGhhdCBwdXR0aW5nIGJhY2sgdGhlCitwcmV2aW91cyB0 dGlubCgpIHdpbGwgZml4IGl0LiAgQnV0IG5vdyBJIGNhbid0IHNlZW0gdG8gbWFrZSBhIEtlcmJl cml6ZWQKK2Nvbm5lY3Rpb24gZnJvbSBQYW5peCB0byBQYW5peCwgZXZlbiB0aG91Z2ggSSBjYW4g bWFrZSBvbmUgZnJvbSBDb2x1bWJpYSB0bworUGFuaXguICBUaGlzIG1lYW5zIEkgaGF2ZSB0byBi dWlsZCBhIEtlcmJlcml6ZWQgYmluYXJ5IGZyb20gdGhlIGN1cnJlbnQKK3NvdXJjZSBjb2RlIG9u IGVpdGhlciBTb2xhcmlzIG9yIE1hYyBPUyBYLiAgVHJ5aW5nIFNvbGFyaXMKK2ZpcnN0Li4uIFt+ L3NvbGFyaXM5azUvbWs1LnNoXSBUaGlzIGRpZG4ndCB3b3JrIHRoZSBmaXJzdCB0aW1lIGR1ZSB0 bwordW5kZWZpbmVkIGtyYjVfaW5pdF9ldHMsIHdoaWNoIGlzIHJlZmVyZW5jZWQgaWYgTUlUX0NV UlJFTlQgaXMgbm90IGRlZmluZWQKKyhpdCBzaG91bGQgYmUgZm9yIEtlcmJlcm9zIDUgMS4wNSBh bmQgbGF0ZXIgYW5kIHdlIGhhdmUgMS40MiBoZXJlKSwgdHJpZWQKK2FnYWluIHdpdGggLURNSVRf Q1VSUkVOVD0xLi4uICBOb3BlLCB0aGF0IG9uZSB0b3RhbGx5IGJsZXcgdXAgaW4gY2tfY3JwLmMu CitMYXRlciwgSmVmZiBzYXlzIGtyYjVfaW5pdF9ldHMgaXMgYSBuby1vcCBpbiBLZXJiZXJvcyAx LjQueCBhbmQgbGF0ZXIsCitzbyBJIGFkZGVkIGFuICNpZmRlZiAoTk9fS1JCNV9JTklUX0VUUykg Zm9yIHNraXBwaW5nIGl0OyBub3cgaXQgYnVpbGRzIGFuZAorcnVucyBPSy4gIGNrdWF0aC5jLCBt YWtlZmlsZSwgOSBKdWwgMjAwNy4KKworTWVhbndoaWxlLCB1c2luZyBDLUtlcm1pdCBvbiBNYWMg T1MgWCwgd2hpY2ggbWFrZXMgdGhlIEtlcmJlcml6ZWQgY29ubmVjdGlvbgoranVzdCBmaW5lLCBi dXQgc3RpbGwgaGFzIHRoZSBwcm9ibGVtIHRyYW5zZmVycmluZyBmaWxlcyBvdmVyIGl0LiAgUGFj a2V0IGxvZworc2hvd3M6CisKKyAgcy0wMC0wMS1eQTkgU3ovIEAtI1kzflohIHowX19fRiJVMUBB Xk0gCisgIHItMDAtMDEtXkE5IFl+LyBALSNZM35ePkopMF9fX0oiVTFASQorICBzLTAxLTAxLV5B KCFGeC54KShWXk0KKyAgci14eC0wOC08dGltZW91dD4KKyAgUy0wMS0wOC1eQSghRngueCkoVl5N CisgIHIteHgtMDgtPHRpbWVvdXQ+CisgIFMtMDEtMDgtXkEoIUZ4LngpKFZeTQorICByLXh4LTE2 LTx0aW1lb3V0PgorCitOb3RlIHRoYXQgUyBwYWNrZXQgaXMgc2VudCwgcmVjZWl2ZWQsIGFuZCBB Y2snZCBPSy4gIFRoZSBGIHBhY2tldCBpcyBzZW50IGJ1dAoraXMgbmV2ZXIgQWNrJ2QuICBUcmll ZCB0aGlzIHNldmVyYWwgdGltZXMgYW5kIG5vdGljZWQgdGhhdCBpdCdzIGp1c3QKK3JlY2Vpdmlu ZyB0aGF0IGlzIHNjcmV3ZWQgdXAsIG5vdCBzZW5kaW5nLiAgQWZ0ZXIgXkMnaW5nIG91dCBvZiB0 aGUKK3RyYW5zZmVyLCBJIGNhbiBzdGlsbCB0eXBlIGNvbW1hbmRzLCBhbmQgdGhleSBhcmUgZXhl Y3V0ZWQgb24gdGhlIGZhciBlbmQsCitidXQgdGhlIHJlc3VsdHMgY29taW5nIGJhY2sgYXJlIGdp YmJlcmlzaC4gIE1vbiBKdWwgOSAxNjowODoyMiAyMDA3IChjb21lCitiYWNrIHRvIHRoaXMgbGF0 ZXIuLi4gc3Vic3RpdHV0ZSBEZXYuMjcgdHRpbmwgZm9yIGN1cnJlbnQgb25lIGFuZCBzZWUgaWYK K3RoZSBwcm9ibGVtIGdvZXMgYXdheSwgYW5kIGlmIHNvLCBjb25kaXRpb25hbGl6ZSB0aGUgbmV3 IGNvZGUgZm9yIGNsZWFyLXRleHQKK2Nvbm5lY3Rpb25zKS4KKworQnVpbHQgQy1LZXJtaXQgd2l0 aCBLZXJiZXJvcyA1IG9uIFNvbGFyaXMgd2l0aCBhIHZlcnNpb24gb2YgY2t1dGlvLmMgdGhhdAor dXNlcyB0aGUgb2xkIHR0aW5sKCkgYW5kIHRyYW5zZmVycmVkIGEgZmlsZSBPSyBvdmVyIGEgS2Vy YmVyaXplZCBjb25uZWN0aW9uLgorU28gbm93IGl0J3MganVzdCBhIG1hdHRlciBvZiByZWNvbmNp bGluZyB0aGUgb2xkIGFuZCBuZXcgdHRpbmwuICBUaGUgZWFzaWVzdAord2F5IHRvIGRvIHRoaXMg aXMgdG8gaGF2ZSBuZXcgdHRpbmwoKSBjaGFpbiB0byBvbGQgdHRpbmwoKSBpZiB0aGUgY29ubmVj dGlvbgoraXMgZW5jcnlwdGVkLCB3aGljaCBpcyB3aGF0IEkgZGlkIGFuZCBpdCB3b3JrcyBmaW5l LiAgQXQgc29tZSBwb2ludCB0aGUgdHdvCit2ZXJzaW9ucyBvZiB0dGlubCgpIHNob3VsZCBiZSBy ZWNvbmNpbGVkLiAgY2t1dGlvLmMsIDEyIEF1ZyAyMDA3LgorCitUaGVyZSB3YXMgYSBmdW5jdGlv biwgaXNsaW5rKCksIHVzZWQgaW4gb25seSBvbmUgcGxhY2UgKGNrdXVzNi5jKSB0aGF0IGhhZAor dGhlIHNhbWUgbmFtZSBhcyBhIGNvbW1vbmx5IHVzZWQgc2NhbGFyIHZhcmlhYmxlLCBhbmQgaXQg d2FzIG1pc3NpbmcgYQorcHJvdG90eXBlLiAgQ2hhbmdlZCBpdHMgbmFtZSB0byBpc2FsaW5rKCkg YW5kIGFkZGVkIHRoZSBwcm90b3R5cGUgKFVuaXgKK29ubHkpLCBja3V1czYuYywgY2t1ZmlvLmMs IGNrY2RlYi5oLiAxMiBBdWcgMjAwNy4KKworUmV2aXNpdGluZyB0aGUgQVNDSUkgYW5kIEJJTkFS WSB0b3AtbGV2ZWwgY29tbWFuZHMsIHdoaWNoIGFyZSBzdXBwb3NlZCB0bworYmUgbGlrZSBpbiBv dGhlciBGVFAgY2xpZW50cywgYnV0IGRvbid0IHNlZW0gdG8gaGF2ZSBhbnkgZWZmZWN0LiAgSSBh ZGRlZCBhCituZXcgcm91dGluZSB0byB0aGUgRlRQIG1vZHVsZSwgZG9mdHBnbG9iYWx0eXBlKCks IHRoYXQgc2V0cyB0aGUgZ2xvYmFsLAorc3RpY2t5LCBwZXJtYW5lbnQgdHJhbnNmZXIgbW9kZSAo QVNDSUkgb3IgQklOQVJZKSAoVEVORVggY291bGQgYmUgYWRkZWQgdG8KK2lmIGFueWJvZHkgYXNr cykuICBUaGVzZSBjb21tYW5kcyAobm93IHRoYXQgdGhleSB3b3JrKSBhcmUgZGlmZmVyZW50IGZy b20KK1NFVCBGVFAgVFlQRSB7IEFTQ0lJLCBCSU5BUlkgfSwgd2hpY2ggc2V0IHRoZSAqZGVmYXVs dCogdHJhbnNmZXIgbW9kZSB3aGVuCithdXRvbWF0aWMgc3dpdGNoaW5nIGZhaWxzIGZvciBhIGdp dmVuIGZpbGUuICBja3V1c3IuYywgY2tjZnRwLmMsIDEyIEF1ZyAyMDA3LgorIChub3RpZnk6IE1h dHQgPG1saXN0QGNtY2ZsZXguY29tPikKKworRXZlbiB0aG91Z2ggdGhlIGNvZGUgaGFzbid0IGNo YW5nZWQsIHN1ZGRlbmx5IHdlJ3JlIGdldHRpbmc6CisKKyAgImNrdXVzeC5jIiwgbGluZSA1Njgy OiB3YXJuaW5nOiBpbXBsaWNpdCBmdW5jdGlvbiBkZWNsYXJhdGlvbjogdGdldGVudAorICAiY2t1 dXN4LmMiLCBsaW5lIDYxODM6IHdhcm5pbmc6IGltcGxpY2l0IGZ1bmN0aW9uIGRlY2xhcmF0aW9u OiB0Z2V0c3RyCisgICJja3V1c3guYyIsIGxpbmUgNjI2Mjogd2FybmluZzogaW1wbGljaXQgZnVu Y3Rpb24gZGVjbGFyYXRpb246IHRwdXRzCisgICJja3V1c3guYyIsIGxpbmUgNjI2Njogd2Fybmlu ZzogaW1wbGljaXQgZnVuY3Rpb24gZGVjbGFyYXRpb246IHRnb3RvCisKK2luIGNrdXVzeC5jIG9u IFNvbGFyaXMgOS4gIDxjdXJzZXMuaD4gaXMgc3RpbGwgaW4gL3Vzci9pbmNsdWRlLCBkYXRlZCAy MDAyLgorQSBxdWljayBzZWFyY2ggc2hvd3MgdGhlIG1pc3NpbmcgZnVuY3Rpb25zIGFyZSBoaWRp bmcgaW4gPHRlcm0uaD4sIHdoaWNoCit1bnRpbCBub3cgd2FzIGluY2x1ZGVkIG9ubHkgaW4gTGlu dXguICBBZGRlZCBhIFVTRV9URVJNX0ggY2xhdXNlLiAgTm8sIHRoYXQKK2RvZXNuJ3QgaGVscCwg dGhlIHByb3RvdHlwZXMgYXJlIG5vdCBzZWxlY3RlZCBhdCBjb21waWxlIHRpbWU7IHRoZXJlIGFy ZQorI2lmZGVmcyBpbiB0aGF0IGZpbGUgdGhhdCBza2lwIG92ZXIgdGhlc2UgcHJvdG90eXBlcy4g IEkgaGFkIHRvIHB1dCB0aGVtIGluCit0aGUgY29kZSB1bmRlciAjaWZkZWYgQlVHOTk5Li4jZW5k aWYgKEkgY291bGQgaGF2ZSB1c2VkIGEgbG9uZ2VyIG5hbWUgbGlrZQorI2lmZGVmIEFERF9QUk9U T1RZUEVTX0ZPUl9DVVJTRVNfRlVOQ1RJT05TLCBidXQgdGhhdCB3b3VsZCBub3QgYmUgcG9ydGFi bGUpLgorY2t1dXN4LmMsIDEyIEF1ZyAyMDA3LgorCitBbHNvOgorCisgICJja3V1c3guYyIsIGxp bmUgOTIzMjogd2FybmluZzogaW1wbGljaXQgZnVuY3Rpb24gZGVjbGFyYXRpb246IGNyZWF0CisK K1RoaXMgaXMgY2FsbGVkIGluIHRoZSBJS1NEIGRhdGFiYXNlIGNvZGUsIHVzZWQgZm9yIGdldHRp bmcgYSBsb2NrZmlsZS4KK2NyZWF0KCkgaXMgYSBVbml4aXNtIGluIGNvZGUgdGhhdCBpcyBzdXBw b3NlZCB0byBiZSBwb3J0YWJsZS4gIEJ1dCBJS1NEIG9ubHkKK3J1bnMgb24gVW5peCBhbmQgV2lu ZG93cywgc28gSSBhc3N1bWUgdGhlIFdpbmRvd3MgQyBsaWJyYXJ5IGhhcyBhIGNyZWF0KCkKK2Z1 bmN0aW9uLiAgQW55d2F5LCBzdWRkZW5seSB0aGUgU29sYXJpcyBoZWFkZXIgZmlsZXMgc2VlbSB0 byBoYXZlIGJsb2NrZWQKK3doYXRldmVyIHBhdGggcHJldmlvdXNseSBleGlzdGVkIHRvIHRoZSBj cmVhdCgpIHByb3RvdHlwZSAod2hpY2ggaXMgaW4KKzxmY250bC5oPiksIHNvIEkgYWRkZWQgYW4g I2luY2x1ZGUgaW4gdGhlIGFwcHJvcHJpYXRlIHNwb3QuICBja3V1c3guYywKKzEyIEF1ZyAyMDA3 LgorCitLZXJtaXQgZnVuY3Rpb25zIGZvciBjb252ZXJ0aW5nIHRoZSBudW1iZXIgYmFzZSAtLSBc ZnJhZGl4KCksIFxmaGV4aWZ5KCksCitcdW5maGV4aWZ5KCkgLS0gZGlkIG5vdCB3b3JrIHdpdGgg YmlnIG51bWJlcnM7IGNrcmFkaXgoKSB3YXMgbWlzc2VkIGluIHRoZQorQ0tfT0ZGX1QgY29udmVy c2lvbi4gIEZpeGVkIGluIGNrY2xpYi5jLCAxMiBBdWcgMjAwNy4KKworVXBkYXRlZCB0aGUgaGVs cCB0ZXh0IGZvciBBU0NJSSwgQklOQVJZLCBhbmQgU0VUIEZUUCBUWVBFIHRvIGNsYXJpZnkgdGhl CitzZW1hbnRpY3MuICBja3V1czIuYywgY2tjZnRwLmMsIDEyIEF1ZyAyMDA3LgorCitFcnJvciBt ZXNzYWdlcyB3ZXJlIHByaW50ZWQgdXBvbiBmYWlsdXJlIHRvIG9wZW4gYW55IG9mIHRoZSBmb3Vy IGxvZyBmaWxlLAorZXZlbiB3aXRoIFNFVCBRVUlFVCBPTi4gIEZpeGVkIGluIGNrdXVzNC5jLCAx MiBBdWcgMjAwNy4KKworQnVpbHQgT0sgb24gTmV0QlNEIDEuM19SQzMuICBUcmllZCB0byBidWls ZCBzZWN1cmUgdmVyc2lvbiBidXQgdGhlIGxpYnJhcmllcworaGFkIGRpc2FwcGVhcmVkLiAgMTMg QXVnIDIwMDcuCisKK0J1aWx0IE9LIG9uIE1hYyBPUyBYIDEwLjQuOS4gIFRyaWVkIHRoZSBzZWN1 cmUgdmVyc2lvbiwgbWFjb3N4MTAuNCtrcmI1K3NzbC4KK0hlcmUgd2UgZ2V0IHRoZSB1c3VhbCBw aWxlIG9mICJwb2ludGVyIHRhcmdldHMgaW4gcGFzc2luZyBhcmd1bWVudCAxIG9mCisoZnVuY3Rp b24gbmFtZSkgZGlmZmVyIGluIHNpZ25lZG5lc3MiLCByZWdhcmRpbmcgc2VjdXJpdHkgZnVuY3Rp b25zLCBidXQgaXQKK2J1aWx0IE9LLiAgMTMgQXVnIDIwMDcuCisKK1JlY29uY2lsaW5nIHRoZSB0 d28gdHRpbmwncy4uLiAgT24gZW5jcnlwdGVkIGNvbm5lY3Rpb25zIG15cmVhZCgpIHJldHVybnMK K2VuY3J5cHRlZCBieXRlczsgdHRpbmwoKSBoYXMgdG8gZGVjcnlwdCB0aGVtOyBpdCB3YXNuJ3Qg ZG9pbmcgdGhpcyBpbiB0aGUKK2xvb2thaGVhZCBzZWN0aW9uIHNvIEkgZml4ZWQgaXQuICBUaGUg bmV3IGNvZGUgd29ya3Mgb24gYm90aCBlbmNyeXB0ZWQgYW5kCitjbGVhci10ZXh0IGNvbm5lY3Rp b25zLiAgSSByZW1vdmVkIHRoZSBjaGFpbmluZyB0byBvbGR0dGlubCgpLCBhbmQKK29sZHR0aW5s KCkgaXRzZWxmLiAgY2t1dGlvLmMsIDEzIEF1ZyAyMDA3LgorCisgIChXb3VsZG4ndCBpdCBtYWtl IG1vcmUgc2Vuc2UgYW5kIGJlIG1vcmUgZWZmaWNpZW50IGFuZCBsZXNzIGNvbmZ1c2luZworICBm b3IgbXlmaWxsYnVmKCkgdG8gZG8gdGhlIGRlY3J5cHRpbmc/KQorCitXaGVuIEMtS2VybWl0IHVz ZXMgWm1vZGVtIGFzIGFuIGV4dGVybmFsIHByb3RvY29sLCBpdCBkb2Vzbid0IHNlZW0gdG8gc2Nh bgorZmlsZXMgYmVmb3JlIHNlbmRpbmcgdGhlbSB0byBzZXQgdGV4dCBvciBiaW5hcnkgbW9kZSBh cHByb3ByaWF0ZWx5LiAgSXQncwordGhhdCBleHRlcm5hbCBwcm90b2NvbHMgYnlwYXNzIEtlcm1p dCdzIHdob2xlICJnZXQgbmV4dCBmaWxlIiBtZWNoYW5pc207IHRoZQorKHBvc3NpYmx5IHdpbGQp IGZpbGVzcGVjIGlzIHNpbXBseSBwYXNzZWQgdG8gdGhlIGV4dGVybmFsIHByb3RvY29sIHByb2dy YW0uCitDaGFuZ2luZyB0aGlzIHdvdWxkIGJlIGEgdmVyeSBiaWcgZGVhbC4gIEJ1dCBpZiBvbmx5 IG9uZSBmaWxlIGlzIGJlaW5nIHNlbnQKKyh0aGUgZmlsZXNwZWMgaXMgbm90IHdpbGQpIGl0J3Mg ZWFzeSBlbm91Z2ggdG8gY2hlY2suICBJIGFkZGVkIHRoaXMgdG8gdGhlCitleHRlcm5hbCBwcm90 b2NvbHMgc2VjdGlvbiBvZiB0aGUgcHJvdG9jb2wgbW9kdWxlLiAgSXQgY2FuIGJlIG92ZXJyaWRk ZW4gaW4KK2FueSBvZiB0aGUgcmVndWxhciB3YXlzICgvVEVYVCBvciAvQklOQVJZIHN3aXRjaCBv biBTRU5EIGNvbW1hbmQsIFNFVAorUEFUVEVSTlMgT0ZGLCBTRVQgVFJBTlNGRVIgTU9ERSBNQU5V QUwsIGV0YykuICBja2Nwcm8udywgMTMgQXVnIDIwMDcuCisKK1tGVFAgU0VORCAvUkVDVVJTSVZF XQorUGV0ZXIgQ3Jvd2xleSByZXBvcnRlZCBhIHByb2JsZW0gd2l0aCBGVFAgcmVjdXJzaXZlIHVw bG9hZHMgZ2V0dGluZyB0aGUKK2RpcmVjdG9yeSB0cmVlIHdyb25nIHdoZW4gdGhlIHByZXZpb3Vz IHBhdGhuYW1lIHdhcyBhIGxlZnQgc3Vic3RyaW5nIG9mIHRoZQorbmV3IHBhdGhuYW1lIChlLmcu IGZvby9iYXIvIGFuZCBmb28vYmFyMi8pLiAgVGhlIGxvZ2ljIGRpZCBub3QgaGFuZGxlIHRoaXMK K2Nhc2UgYW5kIGNyZWF0ZWQgdGhlIGJhcjIgZGlyZWN0b3J5IGFzIGEgc3ViZGlyZWN0b3J5IG9m IGJhciwgcmF0aGVyIHRoYW4gYXMKK2EgcGFyYWxsZWwgZGlyZWN0b3J5LiAgRml4ZWQgaW4gc3lu Y2RpcigpIGFuZCB0ZXN0ZWQgd2l0aCB2YXJpb3VzIGVkZ2UgY2FzZXMuCitja2NmdHAuYyAxNCBB dWcgMjAwNy4KKworICBub3RpZnkgPHBldGVyLmNyb3dsZXlAYWx1bW5pLnV0ZXhhcy5uZXQ+CisK K0FkZGVkIENEIG1lc3NhZ2VzIHRvIEZUUCBCUklFRiBkaXNwbGF5IHRvIHRyYWNrIHRoZSB1cHMg YW5kIGRvd25zIG9mCityZWN1cnNpdmUgdXBsb2Fkcy4gIGNrY2Z0cC5jLCAxNCBBdWcgMjAwNy4K KworVGhlIE9VVFBVVCBjb21tYW5kIGdhdmUgYSBtaXNsZWFkaW5nIGVycm9yIG1lc3NhZ2UgKCJD b25uZWN0aW9uIHRvIHh4eCBub3QKK29wZW4iKSB3aGVuIHVzZWQgb24gYSBzZXJpYWwgcG9ydCB0 aGF0IHdhcywgaW5kZWVkLCBvcGVuIGJ1dCB3YXMgbm90CitwcmVzZW50aW5nIHRoZSBDYXJyaWVy IHNpZ25hbCwgd2hlbiBDQVJSSUVSLVdBVENIIHdhcyBub3QgT0ZGLiAgQWRkZWQgYSBuZXcKK21l c3NhZ2UgZm9yIHRoaXMsIGFuZCBzb21lIG90aGVycy4gIGNrdXVzNS5jLCAxNCBBdWcgMjAwNy4K KworU2VuZGluZyBmcm9tIHRoZSBjb21tYW5kIGxpbmUsIGUuZy4ga2VybWl0IC1zIGZvbywgZGlk IG5vdCBnaXZlIGFuCitpbmZvcm1hdGl2ZSBlcnJvciBtZXNzYWdlIGlmIHRoZSBmaWxlIGNvdWxk IG5vdCBiZSBmb3VuZCBvciBvcGVuZWQuICBGaXhlZAoraW4gY2t1dXN5LmMsIDE0IEF1ZyAyMDA3 LgorCitPSywgYmFjayB0byB0dHB0eWNtZC4uLi4gIEl0IHNlZW1zIHRoYXQgYmFjayBvbiBNYXJj aCAyN3RoLCBJIGdvdCBldmVyeXRoaW5nCit3b3JraW5nIGJ1dCBJIHRob3VnaHQgdGhhdCB0aGVy ZSB3YXMgc3RpbGwgc29tZXRoaW5nIHdyb25nIHdpdGggaXQgYmVjYXVzZQorYW4gdW5yZWxhdGVk IHByb2JsZW0gc28gSSBwdXQgaXQgYXNpZGUuICBUaGUgdmVyc2lvbiBvZiB0dHB0eS5jIGZyb20g dGhhdAorZGF0ZSB3b3JrZWQgT0ssIGFuZCBpdCBsb29rcyBsaWtlIEkgdXBkYXRlZCBja3V0aW8u YyBmcm9tIGl0LCBidXQgdGhhdAordmVyc2lvbiBvZiBja3V0aW8uYyB3YXMgcHV0IGFzaWRlLiAg U2luY2UgdGhlbiBJIGhhdmUgYmVlbiB3b3JraW5nIG9uIHRoZQorY2t1dGlvLmMgdmVyc2lvbiB0 aGF0IHdhcyBOT1QgcHV0IGFzaWRlIGFuZCBzbyBub3cgSSBoYXZlIHRvIHJlY29uY2lsZSB0aGUK K3R3bzoKKworICB+LzgwL3R0eXB0eS8yMDA3MDMyNy9ja3V0aW8uYworICB+LzgwL2NrdXRpby5j CisKK0FzIGEgZmlyc3QgY3V0IEkgZGlkIHRoaXMgc2ltcGx5IGJ5IHJlcGxhY2luZyB0aGUgY29u dGVudHMgb2YgdGhlICNpZmRlZgorQ0tfUkVESVIgc2VjdGlvbiBvZiB0aGUgbGF0dGVyIHdpdGgg dGhhdCBvZiB0aGUgZm9ybWVyLiAgT2YgY291cnNlIGluCitTb2xhcmlzIHRoaXMgY29tZXMgdXAg d2l0aCBvcGVucHR5KCkgaW1wbGljaXRseSBkZWNsYXJlZCBhdCBjb21waWxlIHRpbWUgYW5kCit1 bnJlc29sdmVkIGF0IGxpbmsgdGltZS4gIFNvIHRoZSBmaXJzdCB0YXNrIGlzIHRvIGdldCBIQVZF X09QRU5QVFkgZGVmaW5lZAorZm9yIHBsYXRmb3JtcyB0aGF0IGhhdmUgaXQgYW5kIGhhdmUgdGhl IG90aGVycyB1c2UgdGhlIHR0cnVuY21kKCkuICBGb3IKK3N0YXJ0ZXJzIEkgcHV0IGFuICNpZmRl ZiBibG9jayBpbiBja2NkZWIuaCB0aGF0IGRlZmluZXMgSEFWRV9PUEVOUFRZIGZvcgorTGludXgs IEZyZWVCU0QsIE5ldEJTRCwgT3BlbkJTRCwgYW5kIE1hYyBPUyBYLiAgT25lcyB0aGF0IGRvbid0 IGhhdmUKK29wZW5wdHkoKSBpbmNsdWRlIEFJWCwgSFAtVVgsIGFuZCBTb2xhcmlzLiAgT3RoZXJz IGxpa2UgU0NPIEkgZG9uJ3Qga25vdyBidXQKK0kgZG91YnQgaXQuICBUaGUgcmVhbCBzb2x1dGlv biBpcyB0byBnZXQgdGhlIGNrdXB0eS5jIG1vZHVsZSB0byB3b3JrIGJ1dCBvbmUKK3RoaW5nIGF0 IGEgdGltZS4uLiAgVGhpcyB2ZXJzaW9uIGlzIHN1cHBvc2VkIHdvcmsgd2l0aCBzZWN1cmUgYnVp bGRzIG9uIHRoZQorb3BlbnB0eSgpIHBsYXRmb3JtcywgYW5kIG9uIHRoZSBvdGhlcnMgbGlrZSBT b2xhcmlzLCBpZiBhbiBleHRlcm5hbCBwcm90b2NvbAoraXMgYXR0ZW1wdGVkIG9uIGEgc2VjdXJl IChlbmNyeXB0ZWQpIGNvbm5lY3Rpb24sIGFuIGVycm9yIG1lc3NhZ2UgaXMKK3ByaW50ZWQgYW5k IHRoZSBjb21tYW5kIGZhaWxzLiAgY2t1dGlvLmMsIDE0IEF1ZyAyMDA3LgorCitIb3cgdG8gdGVz dD8gIEFwcGFyZW50bHkgSSBkaWQgYWxsIG15IHRlc3Rpbmcgb24gUGFuaXggYmVmb3JlLCBhbmQg dGhhdCdzCit3aGVyZSBhbGwgbXkgWm1vZGVtIGJ1aWxkcyBhcmUsIGJ1dCBub3cgd2hlbiBJIGJ1 aWxkIGEgS2VyYmVyaXplZCB2ZXJzaW9uCisod2hpY2ggd29ya3MgaWYgSSBkbyBpdCBvbiB0aGUg cmlnaHQgcG9vbCBob3N0KSwgaXQgd29uJ3QgbWFrZSBhIGxvY2FsCitjb25uZWN0aW9uLCBhbmQg dGhlcmUgaXMgbm8gb3RoZXIgcGxhY2UgSSBjYW4gY29ubmVjdCB0byB0aGF0IGhhcyBhCitLZXJi ZXJpemVkIFRlbG5ldCBzZXJ2ZXIuICBJIGNhbiwgaG93ZXZlciwgY29ubmVjdCB0byBQYW5peCBm cm9tIGhlcmUsIHVzaW5nCit0aGUgc2FtZSBjb2RlLCBidXQgb24gTWFjIE9TIFguLi4KKworU2xp Z2h0IGRldG91cjogR290IGFjY2VzcyB0byBBSVggYWdhaW4gKDUuMy4wLjApLiAgUGlja3kgY29t cGlsZXIsIHNvbWUKK3RoaW5ncyBuZWVkZWQgZml4aW5nLi4uLiAgQWxzbyBpdCBzYXlzICIxNTA2 LTUwNyAoVykgTm8gbGljZW5zZXMgYXZhaWxhYmxlLgorQ29udGFjdCB5b3VyIHByb2dyYW0gc3Vw cGxpZXIgdG8gYWRkIGFkZGl0aW9uYWwgdXNlcnMuIENvbXBpbGF0aW9uIHdpbGwKK3Byb2NlZWQg c2hvcnRseSIgYW5kIG9mIGNvdXJzZSBpdCBnb2VzIGtpbmQgb2Ygc2xvdy4gIEZvciBzb21lIHJl YXNvbiwgSQorY2FuJ3QgZG8gc3RyZWFtaW5nIHRyYW5zZmVycyBpbnRvIEFJWCBvdmVyIGEgbG9j YWwgbmV0d29yayAodG8gaXRzIFNTSAorc2VydmVyKSwgYnV0IHdpbmRvd2VkIHRyYW5zZmVycyBh cmUgT0suICBBbnl3YXksIG5vdGluZyB0aGF0IHdlJ3ZlIGJlZW4KK3VzaW5nIHRoZSBzYW1lIGJh c2ljIG1ha2VmaWxlIHRhcmdldCBzaW5jZSBBSVggNC4yLCBjaGFuZ2luZyBub3RoaW5nIGJ1dCB0 aGUKK3ZlcnNpb24gaGVyYWxkLCBJIG1hZGUgYSBuZXcgdGFyZ2V0LCBzaW1wbHkgImFpeCIsIHRo YXQgcGlja3MgdXAgdGhlIEFJWAordmVyc2lvbiBhdXRvbWF0aWNhbGx5IGFuZCBzZXRzIHRoZSBo ZXJhbGQgZnJvbSBpdC4gIERpdHRvIGZvciBhaXgrb3BlbnNzbCwKK2J1dCBvbiB0aGlzIGhvc3Qg cmVxdWlyZXMgc2V0dGluZyBTU0xJTkMgYW5kIFNTTExJQiB0byAvb3B0L3NzbC9pbmNsdWRlIGFu ZAorL29wdC9zc2wvbGliLiAgQWxzbyB0aGUgbWFrZSBwcm9ncmFtIGhlcmUgd2FzIGV4dHJlbWVs eSBzZW5zaXRpdmUgdG8gc3BhY2luZworc28gSSBoYWQgdG8gbWFrZSBzb21lIG1pbm9yIGVkaXRz IHRvIGdldCB0aGUgbGluayBzdGVwIHRvIHdvcmsgZm9yIHRoZSBTU0wKK3ZlcnNpb24uICBja3V1 c3kuYywgbWFrZWZpbGUsIDE0LTE1IEF1ZyAyMDA3LgorCitHb3QgcmlkIG9mIHRoZSBzcGVjaWFs IFBhbml4IHNlY3VyZSBOZXRCU0QgdGFyZ2V0LCByZXBsYWNlZCBpdCB3aXRoIGEKK3JlZ3VsYXIg b25lLCB3aGljaCBpcyBpbnZva2VkIGluIHRoZSBub3JtYWwgd2F5IGJ5IGRlZmluaW5nIEs1SU5D IGFuZCBLNUxJQgordG8gcG9pbnQgdG8gdG8gd2hlcmUgdGhlIHN0dWZmIGlzIGhpZGRlbi4gIENs ZWFuZWQgdXAgYW5kIG1vZGVybml6ZWQgdGhlCitjb21tZW50cyBpbiB0aGUgbWFrZWZpbGUgYSBi aXQuICBtYWtlZmlsZSAxNSBBdWcgMjAwNy4KKworQ2hhbmdlZCBzb21lIGRhdGEgdHlwZXMgYW5k IGFkZGVkIHNvbWUgY2FzdHMgdG8gY2tjdGVsLmMgdG8gZG8gYXdheSB3aXRoCit0b25zIG9mICJw b2ludGVyIHRhcmdldHMgaW4gcGFzc2luZyBhcmd1bWVudCAxIG9mICd4eHgnIGRpZmZlciBpbiBz aWduZWRuZXNzIgord2FybmluZ3MuICAxNSBBdWcgMjAwNy4KKworU2V0IHVwIE1hYyBPUyBYIGFz IHRoZSB0ZXN0YmVkIGZvciB0dHB0eWNtZCgpLCB3aXRoIFBhbml4IGFzIHRoZSByZW1vdGUKK3Bh cnRuZXIgb3ZlciBhIEtlcmJlcm9zIDUgY29ubmVjdGlvbi4gIFRoZSBmaXJzdCB0ZXN0IGlzIHRv IHNlbmQgYSAzMDBLCit0ZXh0IGZpbGUgd2l0aCBna2VybWl0IGFzIHRoZSBleHRlcm5hbCBwcm90 b2NvbC4gIEl0IHdvcmtlZCBmaW5lLCBhbmQgdGhlCitkZWJ1ZyBsb2cgc2hvd2VkIGFsbCB0aGUg cmlnaHQgY29tcG9uZW50cyB3ZXJlIGFjdGl2ZSAobmFtZWx5IGVuY3J5cHRpb24gYW5kCit0dHB0 eWNtZCkgW2tlcm1pdC96bW9kZW0gc2VuZC9yZWNlaXZlIHRleHQvYmluYXJ5XToKKworICBLZXJt aXQgICAgWm1vZGVtCisgIGtzdCBPSyAgICB6c3QgT0sKKyAga3NiIE9LICAgIHpzYiBPSworICBr cnQgT0sgICAgenJ0IE9LCisgIGtyYiBPSyAgICB6cmIgRmFpbGVkICJyejogUGVyc2lzdGVudCBD UkMgb3Igb3RoZXIgRVJST1IiCisKK1dlJ3ZlIHNlZW4gdGhpcyBiZWZvcmUuICBUaGUgcHJvYmxl bSBpcyAweGZmLCBUZWxuZXQgSUFDLCBhcyBJIHByb3ZlZCB0bworbXlzZWxmIGJ5IGNvbnN0cnVj dGluZyBhIDNNQiBmaWxlIHRoYXQgY29udGFpbmVkIGV2ZXJ5IGJ5dGUgYnV0IDB4ZmYgaW4gZXZl cnkKK21peHR1cmUgYW5kIG9yZGVyIGFuZCB0cmFuc2ZlcnJpbmcgaXQgc3VjY2Vzc2Z1bGx5IG92 ZXIgdGhlIHNhbWUgY29ubmVjdGlvbi4KK1ByZXN1bWFibHkgdGhlIFRlbG5ldCBzZXJ2ZXIgaXMg ZG91YmxpbmcgSUFDcywgd2hlcmVhcyBvZiBjb3Vyc2UgcnogaXMgbm90Cit1bmRvdWJsaW5nLCB0 aHVzIHRoZSBDUkMgZXJyb3IuICBUaGlzIGlzIHByb2dyZXNzLiAgMTUgQXVnIDIwMDcuCisKK0xv ZyBzaG93cyB0aGF0IGluZGVlZCBldmVyeSBJQUMgaW4gdGhlIHNvdXJjZSBmaWxlIGFycml2ZXMg ZG91YmxlZC4gIEFkZGluZworY29kZSB0byByZW1vdmUgdGhlIGZpcnN0IElBQyBvZiBldmVyeSBh ZGphY2VudCBwYWlyLCBhIHNtYWxsIHRlc3QgZmlsZSB3aXRoCitkaWZmZXJlbnQtbGVuZ3RoIHJ1 bnMgb2YgSUFDcyB0cmFuc2ZlcnMgT0suICBUaGUgM01CIGFsbC5iaW4gZmlsZSBkb2VzIG5vdC4K KworU3RhcnRpbmcgb3Zlci4uLiAgSSBjYW4gcmVjZWl2ZSBhIGJpZyB0ZXh0IGZpbGUgd2l0aCBa bW9kZW0gT0suICBUaGUgMy4yTUIKK2JpbmFyeSB0ZXN0IHBhdHRlcm4gdGhhdCBjb250YWlucyBu byBJQUNzIGZhaWxlZCBhZnRlciAxLjhNQiwgYnV0IHRoZSBwYXJ0Cit0aGF0IGl0IHRyYW5zZmVy cmVkIHdhcyBPSy4gIEEgc2Vjb25kIHRyeSwgYWxtb3N0IHRoZSB3aG9sZSB0aGluZyBhcnJpdmVk LAoraXQgc3RvcHBlZCBqdXN0IDU4NCBieXRlcyBzaG9ydCBvZiB0aGUgZW5kLiAgQ291bGQgYmUg dGhhdCBmaWxlIHNpemUgaXMgYQorc2VwYXJhdGUgcHJvYmxlbS4gIE1ha2luZyBhIG5ldyBjb3B5 IGV4YWN0bHkgMU1CIGxvbmcuLi4gIFdlbGwsIHRoYXQncworaW50ZXJlc3RpbmcsIHRoaXMgb25l IHRvbyBzdG9wcGVkIGp1c3Qgc2hvcnQgb2YgdGhlIGVuZC4gIEFuZCBhZ2FpbiwgdGhlCitzYW1l IHRoaW5nLiAgV2hlbiBjb25uZWN0aW5nIGJhY2sgdG8gdGhlIGhvc3QsIHRoZSBsYXN0IFptb2Rl bSBwYWNrZXQgY2FuCitiZSBzZWVuIG9uIHRoZSBzY3JlZW47IGl0J3MgYXMgaWYgdGhlIGxvY2Fs IFptb2RlbSBleGl0ZWQgYmVmb3JlIHJlYWRpbmcKK3RoZSBsYXN0IHBhY2tldC4uLiAgQnV0IE9L LCBpZiBJIGNoYW5nZSB0aGUgb3B0aW9ucyBvbiB0aGUgcmVtb3RlIHN6CitzZW5kZXIgdG8gdXNl IHNtYWxsIGJsb2NrcywgZXRjLCB0aGVuIGl0IHdvcmtzLgorCitOb3csIGNoYW5naW5nIGZyb20g dGhlIDFNQiBuby1JQUMtYmluYXJ5IHRlc3QgcGF0dGVybiwgdG8gdGhlIDFNQiBhbGwtdmFsdWVz Cit0ZXN0IHBhdHRlcm4sIHdlIGZhaWwgYWZ0ZXIgODFLLiAgQnV0IHRoZSBwYXJ0IHRoYXQgd2Fz IHRyYW5zZmVycmVkIGlzCitjb3JyZWN0LiAgU2Vjb25kIHRyeSwgc2FtZSB0aGluZywgYnV0IDU3 Sy4gIFRoaXJkOiA0MEsuICBFYWNoIHRpbWUsIHVwb24KK2Nvbm5lY3RpbmcgYmFjaywgdGhlIHNl c3Npb24gaXMgY29tcGxldGVseSBkZWFkLgorCitJRiBJIEhBVkUgVE8gdW5kb3VibGUgSUFDcyBm b3IgaW5jb21pbmcgZmlsZXMsIGRvbid0IEkgaGF2ZSB0byBkb3VibGUgdGhlbQorZ29pbmcgb3V0 PyAgVG8gc2VuZCBhIGJsb2NrIHRvIG5ldCB3ZSBqdXN0IGNhbGwgdHRvbCgpLCBidXQgdHRvbCgp IGRvZXNuJ3QKK2RvIGFueSBkb3VibGluZyAoYmVjYXVzZSBLZXJtaXQgcHJvdG9jb2wgYWx3YXlz IHF1b3RlcyAweGZmKS4gIFRvIHNlZSB3aGF0CitoYXBwZW5zLCBJIGNoYW5nZWQgdGhlIHR0b2wo KSBjYWxsIHRvIHR0b2MoKSBpbiBhIGxvb3AgdGhhdCBkb3VibGVzIElBQ3MuICBJCit0ZXN0ZWQg dGhpcyBieSBzZW5kaW5nIHRoZSBmdWxsIDMuMk1CIHRlc3QgcGF0dGVybiwgd2hpY2ggd29ya2Vk IGZpbmUuCisKK0ZvciByZWNlaXZpbmcsIGl0J3Mgc2xvdyBidXQgaXQgd29ya3MgT0sgd2l0aCBm aWxlcyB0aGF0IGRvbid0IGNvbnRhaW4gSUFDcworKG15IGNvbmNlcm4gd2FzIHRoYXQgSUFDcyBt aWdodCBhcHBlYXIgaW4gb3V0Ym91bmQgZmlsZXMgb3IgaW4gWm1vZGVtCitwcm90b2NvbCBtZXNz YWdlcykuICBJdCByZWNlaXZlcyB0aGUgMU1CIG5vLUlBQyB0ZXN0IHBhdHRlcm4sIHNvIHRoZXJl IGFyZQorbm8gcHJvYmxlbXMgd2l0aCBwcm90b2NvbCBvciB0aW1pbmcuICBCdXQgdGhlIGZ1bGwg dGVzdCBwYXR0ZXJuIGFsd2F5cyBnZXRzCitjdXQgb2ZmLCBidXQgYXQgZGlmZmVyZW50IHBvaW50 cywgYXMgYmVmb3JlLCB3aXRoIHRoZSByZW1vdGUgc2Vzc2lvbiBkZWFkLgorQ2hhbmdpbmcgdGhl IFptb2RlbSByZWNlaXZlciBmcm9tIHJ6IHRvIGxyeiBvbiB0aGUgbG9jYWwgZW5kIChzaW5jZSB0 aGUKK3NlbmRlciBvbiB0aGUgcmVtb3RlIGVuZCBpcyBsc3opIGRvZXMgbm90IGNoYW5nZSB0aGUg YmVoYXZpb3IuCisKK0FueXdheSwgSSB3ZW50IGJhY2sgYW5kIHJlcGxhY2VkIHRoZSBieXRlIGxv b3Agd2l0aCBzb21ldGhpbmcgbW9yZQorZWZmaWNpZW50LCBhbmQgaXQgZ29lcyBhYm91dCAyMCB0 aW1lcyBmYXN0ZXIuICBCdXQgdGhpcyBkb2Vzbid0IGhlbHAgZWl0aGVyLAoraXQgb25seSBtYWtl cyBpdCBmYWlsIGZhc3Rlci4gIEJ1dCBhaGEsIHdoYXQgaWYgYSBkb3VibGVkIElBQyBpcyBicm9r ZW4KK2Fjcm9zcyBzdWNjZXNzaXZlIHB0eSByZWFkcyAtLSB3ZSBoYXZlIHRvIG1ha2UgdGhlICJw cmV2aW91cyBjaGFyYWN0ZXIiCittZW1vcnkgcGVyc2lzdGVudC4gIFdlbGwsIHRoYXQgd2FzIGEg Z29vZCBpbnNpZ2h0LCBidXQgaXQgc3RpbGwgZGlkbid0IGZpeAoraXQuICBUaGUgbG9nIHNob3dz IHRoZSBJQUMgaGFuZGxpbmcgY29kZSBpcyB3b3JraW5nIGZpbmUuCisKK1doYXQgZG9lcyBzeiBz YXk/ICBDYXB0dXJpbmcgaXRzIHN0ZGVyciB0byBhIGZpbGUuLi4gIlJldHJ5IDE6IEdvdCBaQ0FO Ii4KK05leHQgdGltZTogIlJldHJ5IDE6IEdvdCBUSU1FT1VUIi4gIE5leHQgdGltZTogR290IFpD QU4uCisKK1RyeWluZyBkaWZmZXJlbnQgWm1vZGVtIG9wdGlvbnMuLi4gIGFwcGFyZW50bHkgSSBk b24ndCBuZWVkIHRvIHVzZSBzaG9ydAorYmxvY2tzLiAgQnV0IEkgZG8gbmVlZCB0byB1c2UgLWUs IHByb2JhYmx5IGJlY2F1c2Ugb2YgVGVsbmV0IE5WVCB0cmVhdG1lbnQKK29mIGNhcnJpYWdlIHJl dHVybjsgd2l0aG91dCAtZSwgdGhlcmUgaXMgYSAicGVyc2lzdGVudCBDUkMgZXJyb3IiLiAgLU8K K2Rpc2FibGVzIHRpbWVvdXRzLCBidXQgdGhpcyBtYWtlcyBubyBkaWZmZXJlbmNlLgorCitPSywg d2Ugc3RpbGwgaGF2ZSB0d28gQmlnIFByb2JsZW1zOgorCisgMS4gV2hlbiBhIGxvbmcgZmlsZSBo YXMgbm8gSUFDcywgdGhlIGZpbmFsIDwgMUsgb2YgdGhlIGZpbGUgaXMgbm90IHJlY2VpdmVkLgor IDIuIFdoZW4gYSBsb25nIGZpbGUgaGFzIElBQ3MsIHRoZSB0cmFuc2ZlciBnZW5lcmFsbHkgc3Rv cHMgdmVyeSBlYXJseS4KKworUHJvYmxlbSAxOiB0aGUgdHJhbnNmZXIgY29uc2lzdGVudGx5IGZh aWxzIGxlc3MgdGhhbiAxSyBmcm9tIHRoZSBlbmQgb2YgdGhlCitmaWxlLiAgVXBvbiBDT05ORUNU IGJhY2sgdG8gdGhlIGhvc3QsIGEgYmlnIFptb2RlbSBwYWNrZXQgaXMgc2l0dGluZyB0aGVyZQor d2FpdGluZyB0byBiZSByZWFkLCB3aGljaCBtZWFucyB0dHB0eWNtZCgpJ3MgY29weSBvZiByeiBp cyB0ZXJtaW5hdGluZworZWFybHkuICBDYW4gd2UgY2F0Y2ggaXQgaW4gdGhlIGRlYnVnIGxvZz8g IERvaW5nIHRoaXMgdGFrZXMgZm9yZXZlciBhbmQKK3dyaXRlcyBhIEdCIHRvIHRoZSBkaXNrLi4u ICBBbmQgdGhlbiB0aGUgcHJvYmxlbSBkb2Vzbid0IGhhcHBlbi4gIEFsc28sIEkKK2NhbiByZWNl aXZlIGEgSFVHRSB0ZXh0IGZpbGUgYWxtb3N0IGluc3RhbnRseSB3aXRoIG5vIGVycm9ycyBhdCBh bGwuCisKK1N3aXRjaGluZyB0byBscnogb24gdGhlIHJlY2VpdmluZyBlbmQsIG5vdyBJIHNlZSB0 aGUgZXJyb3IgbWVzc2FnZXMsIGFib3V0CiszMDAgbGluZXMgbGlrZSB0aGlzOgorCisgIFJldHJ5 IDA6IEdhcmJhZ2UgY291bnQgZXhjZWVkZWQKKyAgQnl0ZXMgcmVjZWl2ZWQ6ICA4NzIzNTIvMTAw MDAwMCAgIEJQUzo4NTQ2NCAgRVRBIDAwOjAxICBSZXRyeSAwOiBCYWQgQ1JDCisgIEJ5dGVzIHJl Y2VpdmVkOiAgODkyNDQ4LzEwMDAwMDAgICBCUFM6ODY2OTAgIEVUQSAwMDowMSAgUmV0cnkgMDog QmFkIENSQworICBSZXRyeSAwOiBHYXJiYWdlIGNvdW50IGV4Y2VlZGVkCisgIFJldHJ5IDA6IEdh cmJhZ2UgY291bnQgZXhjZWVkZWQKKyAgUmV0cnkgMDogR2FyYmFnZSBjb3VudCBleGNlZWRlZAor ICBSZXRyeSAwOiBHYXJiYWdlIGNvdW50IGV4Y2VlZGVkCisgIFJldHJ5IDA6IEdhcmJhZ2UgY291 bnQgZXhjZWVkZWQKKyAgUmV0cnkgMDogR2FyYmFnZSBjb3VudCBleGNlZWRlZAorICBSZXRyeSAw OiBHb3QgRVJST1IKKyAgQnl0ZXMgcmVjZWl2ZWQ6ICA4OTgzMzYvMTAwMDAwMCAgIEJQUzo4NDI5 MyAgRVRBIDAwOjAxICBSZXRyeSAwOiBCYWQgQ1JDCisgIFJldHJ5IDA6IEdhcmJhZ2UgY291bnQg ZXhjZWVkZWQKKyAgUmV0cnkgMDogR2FyYmFnZSBjb3VudCBleGNlZWRlZAorICBCeXRlcyByZWNl aXZlZDogIDkwMDM4NC8xMDAwMDAwICAgQlBTOjgzNzUxICBFVEEgMDA6MDEgIEJhZCBlc2NhcGUg c2VxdWVuY2UKKyAgMmZSZQorICB0cnkgMDogQmFkIGRhdGEgc3VicGFja2V0CisgIEJ5dGVzIHJl Y2VpdmVkOiAgOTQxNDcyLzEwMDAwMDAgICBCUFM6ODYxOTEgIEVUQSAwMDowMCAgUmV0cnkgMDog QmFkIENSQworICBSZXRyeSAwOiBHYXJiYWdlIGNvdW50IGV4Y2VlZGVkCisKK0V2ZW4gd2hlbiBp dCBzdWNjZWVkcywgaXQgZ2V0cyB0aGVzZS4gIEJ1dCBpZiBJIHJlY2VpdmUgYSB0ZXh0IGZpbGUs IG5vCittYXR0ZXIgaG93IGJpZywgbm8gZXJyb3JzIG9yIHJldHJpZXMgb3IgdGltZW91dHMgYXQg YWxsLiAgU28gaXQgYXBwZWFycyB0aGF0Cit0aGVyZSBpcyBvbmx5IG9uZSBwcm9ibGVtOiBhIGJp Zy10aW1lIGxhY2sgb2YgdHJhbnNwYXJlbmN5IHJlZ2FyZGluZyA4LWJpdAorYW5kL29yIGNvbnRy b2wgY2hhcmFjdGVycy4gIFRoZSBvZGQgdGhpbmcgaXMsIGl0J3Mgbm90IHRoYXQgdGhlIGNoYXJh Y3RlcnMKK2Nhbid0IGdldCB0aHJvdWdoIC0tIHRoZXkgYWxsIGNhbiAtLSBidXQgdGhleSBzZWVt IHRvIGNhdXNlIHRyYW5zaXRvcnkKK2Jsb2NrYWdlcy4gIDE2IEF1ZyAyMDA3LgorCitDbGVhbmVk IHVwIHRoZSByZW1haW5pbmcgcG9pbnRlciBzaWduZWRuZXNzIHdhcm5pbmdzIGluIGNrdXRpby5j LCBidXQgdGhpcword2FzIGEgbWlzdGFrZSwgaXQgYnJva2UgS2VyYmVyb3MgY29ubmVjdGlvbnMg Y29tcGxldGVseS4gIFVuZGlkIHRoZSBjaGFuZ2VzLgorY2t1dGlvLmMsIDE3IEF1ZyAyMDA3Lgor CitDaGFuZ2VkIGFsbCByZXR1cm4oKSBpbiB0aGUgZm9yaygpPT0wIHNlY3Rpb24gb2YgdHRwdHlj bWQoKSB0byBleGl0KCkuCitja3V0aW8uYywgMTcgQXVnIDIwMDcuCisKK1RyaWVkIGV4cGxpY2l0 bHkgc2V0dGluZyB0aGUgc2xhdmUgcHR5IHRvIHJhd21vZGUuICBNYWtlcyBubyBkaWZmZXJlbmNl LgorVHJpZWQgdXNpbmcgdGhlIE1hYyBPUyBYIChjdXJzZXMpIHJhdygpIGZ1bmN0aW9uLCBhbmQg YWxzbyBzeXN0ZW0oInN0dHkKK3JhdyIpOyBzdGlsbCBubyBkaWZmZXJlbmNlLiAgVHJpZWQgZG9p bmcgYWxsIG9mIHRoZXNlIGluIGRpZmZlcmVudAorY29tYmluYXRpb25zIGFuZCBvcmRlcnMuICBJ IGZvdW5kIG9uZSBjb21iaW5hdGlvbiB0aGF0IGN1dHMgdGhlIGVycm9ycyBhYm91dAoraW4gaGFs ZiwgYW5kIHRoZSB0cmFuc2ZlciBvZiB0aGUgbm8tSUFDIHRlc3QgcGF0dGVybiBhbG1vc3QgYWx3 YXlzIHN1Y2NlZWRzCisoYnV0IGl0J3Mgc2xvdykuICBBbnl3YXksIGl0IGRvZXNuJ3QgaGVscCBt dWNoIHdpdGggdGhlIHRlc3QgcGF0dGVybiB0aGF0Citjb250YWlucyBJQUNzLiAgV2VsbCwgdGhl IGNvZGUgaXMgbW9yZSBzb2xpZCB0aGFuIGl0IHdhcyBiZWZvcmUgYnV0CitmdW5jdGlvbmFsbHkg d2UgaGF2ZSBub3QgYWR2YW5jZWQgbXVjaCBpZiB3ZSBjYW4ndCBkb3dubG9hZCBhIGJpbmFyeSBm aWxlCit3aXRoIFptb2RlbSEgIE9uIHRoZSBvdGhlciBoYW5kLCB3ZSBjYW4gdXBsb2FkIHRoZW0s IGFuZCB3ZSBjYW4gdHJhbnNmZXIKK3RleHQgZmlsZXMgaW4gYm90aCBkaXJlY3Rpb25zLCB3aGlj aCBpcyBhbiBpbXByb3ZlbWVudCBvdmVyIHRoZSBwcmV2aW91cworc2l0dWF0aW9uLCBpbiB3aGlj aCB0aGUgZW50aXJlIHNlc3Npb24gd291bGQgaGFuZyBkdWUgdG8gbG9zcyBvZgorc3luY2hyb25p emF0aW9uIG9mIHRoZSBlbmNyeXB0aW9uIHN0cmVhbS4KKworVHJpZWQgYWRkaW5nIC1mdW5zaWdu ZWQtY2hhciB0byBDRkxBR1Mgb2YgTWFjIE9TIFggdGFyZ2V0LiAgSXQgZG9lcyBub3QKK21ha2Ug dGhlICJzaWduZWRuZXNzIiB3YXJuaW5ncyBnbyBhd2F5IGFuZCBpdCBkb2Vzbid0IGNoYW5nZSB0 aGUgcnVudGltZQorc3ltcHRvbXMuCisKK0kgdHJpZWQgYSBzaW1wbGVyIHZlcnNpb24gb2YgcHR5 X21ha2VfcmF3KCksIHRoZSBvbmUgZnJvbSBTZXJnIElha292bGV2LCBidXQKK2l0IHdhcyBhIHRv dGFsIGZhaWx1cmUuICBUaGF0J3MgZW5jb3VyYWdpbmcgdGhvdWdoLCBiZWNhdXNlIGl0IGluZGlj YXRlcwordGhhdCBwdHlfbWFrZV9yYXcoKSBpcyB0aGUgcmlnaHQgcGxhY2UgdG8gYmUgd29ya2lu Zy4KKworVGhlbiBJIG1hZGUgcHR5X21ha2VfcmF3KCkgc2V0IG9yIHVuc2V0IGV2ZXJ5IHNpbmds ZSB0ZXJtaW5hbCBmbGFnCitleHBsaWNpdGx5LiAgVGhpcyBtYWRlIG5vIGRpZmZlcmVuY2UsIGJ1 dCBkaWRuJ3QgaHVydCBhbnl0aGluZyBlaXRoZXIuCisKK1RoZW4gSSBtYWRlIHB0eV9tYWtlX3Jh dygpIGV4cGxpY2l0bHkgc2V0IGFsbCB0aGUgY19jY1tdIGNoYXJhY3RlcnMgdG8gMAorKGJ1dCBs ZWZ0IGNfY2NbVk1JTl0gYXMgMSkuICBUaGlzIG1hZGUgbm8gZGlmZmVyZW5jZSBlaXRoZXIuCisK K0kgY2hlY2tlZCBwdHlfbWFrZV9yYXcoKSBhZ2FpbnN0IHR0cGt0KCkgYW5kIHRoZSBvbmx5IGRp ZmZlcmVuY2UgSSBmb3VuZCBpbgordGhlIHRlcm1pbmFsIGZsYWdzIGlzIHRoYXQgdHRwa3QoKSBz ZXRzIElHTlBBUiB0aGlua2luZyBpdCBtZWFucyAiaWdub3JlCitwYXJpdHkgZXJyb3JzIiB3aGVu IHJlYWxseSBpdCBtZWFucyAiZGlzY2FyZCBhbnkgY2hhcmFjdGVyIHRoYXQgaGFzIGEgcGFyaXR5 CitlcnJvciIgKGF0IGxlYXN0IGFjY29yZGluZyB0byBJYWtvdmxldikgLS0gZXhhY3RseSB0aGUg b3Bwb3NpdGUuICBCdXQgSQordHJpZWQgaXQgYm90aCB3YXlzLCBubyBkaWZmZXJlbmNlLiAgMTcg QXVnIDIwMDcuCisKK0kgbm90aWNlZCB0aGF0IGV2ZW4gWm1vZGVtIHRleHQgcmVjZWl2ZXMgY2Fu IGZhaWwuICBUaGV5IGRvbid0IGdldCBhbnkKK2Vycm9ycywgdGhleSBqdXN0IGdldCBjdXQgb2Zm IHNob3J0bHkgYmVmb3JlIHRoZSBlbmQuICAoQnV0IHVzdWFsbHkgdGhleQorc3VjY2VlZCwgYW5k IGZhc3QgdG9vLCBsaWtlIDUwMEsgY3BzKS4KKworV2hhdCBpZiBJIGRvbid0IGNhbGwgcHR5X21h a2VfcmF3KCkgYXQgYWxsIG9uIHRoZSBzbGF2ZSBwdHk/CisKK3pydDogRUVTU1NTU1NTUzogODAl IGdvb2QgKEUgPSBzdG9wcGVkIGp1c3QgYmVmb3JlIGVuZCBidXQgbm8gb3RoZXIgZXJyb3JzKQor Cit6cmIgbm8tSUFDIHRlc3QgcGF0dGVybiwgc2hvcnQgYmxvY2tzOgorIDEuIFMvNSAoc3VjY2Vz cyB3aXRoIDUgc2NyZWVucyBvZiBlcnJvcnMuCisgMi4gUy83CisgMy4gUy83CisgNC4gUy82Cisg NS4gRS83IChmYWlsZWQganVzdCBiZWZvcmUgZW5kKQorIDYuIFMvNworIDcuIFMvNgorIDguIFMv NgorIDkuIFMvNgorMTAuIFMvNAorCitTbywgbG90cyBvZiBlcnJvcnMsIGJ1dCBpdCByZWNvdmVy ZWQgOTAlIG9mIHRoZSB0aW1lLgorTmV4dCwgc2FtZSB0aGluZywgYnV0IHdpdGhvdXQgcmVxdWVz dGluZyBzaG9ydCBibG9ja3M6CisKKyAxLiBFLzUKKyAyLiBTLzUKKyAzLiBFLzQKKyA0LiBTLzUK KyA1LiBTLzUKKyA2LiBTLzUKKyA3LiBYLzAgKGhhcmQgZmFpbHVyZSByaWdodCBhd2F5OiAiR290 IFpDQU4iCisgOC4gUy81CisgOS4gUy81CisxMC4gUy81CisKK1NvIGl0IGRvZXNuJ3QgbG9vayBs aWtlIHNob3J0IGJsb2NrcyBtYWtlIHRoYXQgbXVjaCBkaWZmZXJlbmNlLiAgTm93IHdoYXQgaWYK K0kgdHVybiBvZmYgcHJlZml4aW5nPyAgQmFkIENSQywgZmFpbHMgaW1tZWRpYXRlbHkgZXZlcnkg dGltZS4gIFB1dHRpbmcgYmFjaworcHR5X21ha2VfcmF3KHNsYXZlKSwgaXQgc3RpbGwgZmFpbHMg aGFyZC4KKworVHJpZWQgYSBuZXcgc3RyYXRlZ3kgd2l0aCBwdHlfbWFrZV9yYXcoKTogcmF0aGVy IHRoYW4gbW9kaWZ5IGV4aXN0aW5nIGZsYWdzLAorSSBzZXQgYWxsIGZsYWdzIHRvIDAsIGFuZCB0 aGVuIHR1cm4gb24gb25seSB0aG9zZSBmZXcgdGhhdCB3ZSBuZWVkIGxpa2UgQ1M4LgorTm93IHdl IGdldCBvbmx5IDIuNSBzY3JlZW5zIG9mIGVycm9ycyBpbnN0ZWFkIDQtNyBhbmQgdGhlIHRyYW5z ZmVyIHJhdGUgaXMKK2hpZ2hlciBmb3IgYmluYXJ5IGZpbGVzIChhbGwgb2YgdGhlIHByZXZpb3Vz IG9uZXMgd2VyZSB1bmRlciAxMDBLIENQUywgd2hpbGUKK2ZvciB0ZXh0IGZpbGVzIGl0IHdhcyA0 MDAtNTAwSyBDUFMpOgorCisgMS4gUy8yIDE5NTY2OSBDUFMKKyAyLiBTLzIgMTk0NzIwCisgMy4g RS8zCisgNC4gUy8yIDE5MjU1MAorIDUuIFMvMyAxOTIzMjUKKyA2LiBTLzMgMTQ1MDY2CisgNy4g Uy8yIDIwMDY4OQorIDguIFMvMyAxODg5NDgKKyA5LiBTLzIgMjA5NDYxCisxMC4gUy8zIDE4MTk5 MQorCitJIG5vdGljZWQgdGhhdCB0aGVyZSB3YXMgbm8gVElPQ1NUVFkgaW9jdGwgaW4gdGhlIHB0 eS9mb3JrIHNldHVwIHNlcXVlbmNlLAord2hpY2ggaXMgcmVjb21tZW5kZWQgc29tZXdoZXJlLCBz byBJIHRyaWVkIHRoYXQgYW5kIGl0IHdhcyBhIGRpc2FzdGVyOyB0aGUKK2VudGlyZSBzZXNzaW9u IGh1bmcuICBJIHRvb2sgaXQgYmFjayBvdXQuICAxOCBBdWcgMjAwNy4KKworVHJpZWQgc29tZSB0 cmFuc2ZlcnMgb3ZlciBhIGNsZWFyLXRleHQgKG5vdCBlbmNyeXB0ZWQpIGNvbm5lY3Rpb24gd2l0 aCB0aGUKK3NhbWUgcmVzdWx0czogc21vb3RoLCBmYXN0IHRyYW5zZmVyIG9mIGEgYmlnIHRleHQg ZmlsZSAoNDAwSyBjcHMpOyByb2NreSBidXQKK3N1Y2Nlc3NmdWwgdHJhbnNmZXIgb2YgdGhlIG5v LUlBQyBiaW5hcnkgcGF0dGVybiBmaWxlICgxMzVLIGNwcykuICBTd2l0Y2hpbmcKK2JhY2sgdG8g dHRydW5jbWQoKSwgdGhlIHNhbWUgYmluYXJ5IGZpbGUgaXMgcmVjZWl2ZWQgYXQgMS41TSBjcHMs IGFuZCB0aGUKK25vLUlBQyBiaW5hcnkgZmlsZSB0b3RhbGx5IGZhaWxzIGFmdGVyIHRvbyBtYW55 ICJCYWQgQ1JDInM7IGFuZCB3ZSBhbHJlYWR5Citrbm93IHRoYXQgYW55IGZpbGUgdGhhdCBjb250 YWlucyBJQUNzIHdpbGwgZmFpbC4gIE9uZSBtaWdodCBzYXkgdGhhdAordHRwdHljbWQoKSBpcyBi ZXR0ZXIgaW4gZXZlcnkgcmVzcGVjdCB0aGFuIHR0cnVuY21kKCkgZXhjZXB0IGluIHNwZWVkCiso d2hlbiBpdCB3b3JrcykuCisKK0xldCdzIHNlZSBpZiB0dHlwdHljbWQgc3RpbGwgd29ya3MgaW4g cmVtb3RlIG1vZGUgKHRvIGxvY2FsIEs5NSk6CisgLiBzeiAvIHRleHQgd29ya3MsIGJ1dCBzbG93 bHkuCisgLiBsc3ogLyB0ZXh0IHdvcmtzIGJ1dCBzb21lIHdlaXJkIGVycm9ycyBhcmUgcmVwb3J0 ZWQuCisgLiBsc3ogLyBiaW5hcnkgLyBubyBJQUMgZG9lc24ndCB3b3JrIGF0IGFsbCAoQ1JDLTMy IG1pc21hdGNoIGZvciBhIGhlYWRlcjsKKyAgICAgICAgVW5leHBlY3RlZCBjb250cm9sIGNoYXJh Y3RlciBpZ25vcmVkOiAxMywgZXRjKS4KKyAuIHN6IC8gYmluYXJ5IC8gbm8gSUFDIHdvcmtzIE9L IGJ1dCBzbG93LgorIC4gc3ogLyBiaW5hcnkgLyBmdWxsIHRlc3QgcGF0dGVybiB3aXRoIElBQyB3 b3JrcyBPSyBidXQgc2xvdy4KKyAuIFNlbmRpbmcgdGV4dCBpbnRvIHJ6IGZhaWxzIGNvbXBsZXRl bHkuCisKK1doYXQgYWJvdXQgdHRydW5jbWQoKSBpbiByZW1vdGUgbW9kZT8KKyAuIHNlbmQgL3Rl eHQgd29ya3MsIGZhc3QuCisgLiBzZW5kIC9iaW5hcnkgd29ya3MsIGZhc3QuIAorIC4gcmVjZWl2 ZSAvdGV4dCB3b3Jrcywgbm90IHNvIGZhc3QgYnV0IG5vdCBiYWQuCisgLiByZWNlaXZlIC9iaW5h cnkgd29ya3MsIG5vdCBzbyBmYXN0IGJ1dCBub3QgYmFkLgorCitTbyB3ZSB1c2UgdHRydW5jbWQo KSBmb3IgcmVtb3RlIG1vZGUsIGFuZCB3ZSB1c2UgaXQgZm9yIGxvY2FsIG1vZGUKK3NlcmlhbC1w b3J0IGFuZCBtb2RlbSBjb25uZWN0aW9ucywgYW5kIHdlIHVzZSB0dHB0eWNtZCgpIG9uIG5ldHdv cmsKK2Nvbm5lY3Rpb25zIGJlY2F1c2UgKGEpIHRoZXkgbWlnaHQgYmUgZW5jcnlwdGVkLCBhbmQg KGIpIGV2ZW4gaWYgdGhleSBhcmUKK25vdCwgdGhleSB1c2Ugc29tZSBwcm90b2NvbCB0aGF0IHdl IGhhdmUgdG8gaGFuZGxlLCBlLmcuIFRlbG5ldCwgUmxvZ2luLgorMTkgQXVnIDIwMDcuCisKK0Rp c2NvdmVyZWQgdGhhdCBTZW5kaW5nIGJpbmFyeSBmaWxlcyBubyBsb25nZXIgd29ya3MuICBUZXh0 IGlzIE9LLCBiaW5hcnkKK3RyYW5zZmVycyBkb24ndCBldmVuIHN0YXJ0LiAgVGhpcyBoYXBwZW5z IG9uIGJvdGggZW5jcnlwdGVkIGFuZCBjbGVhci10ZXh0Citjb25uZWN0aW9ucy4gIHR0cHR5Y21k KCkgaXMgYmVpbmcgdXNlZCBpbiBib3RoIGNhc2VzLiAgQnV0IG9kZGx5IGVub3VnaCwKK3JlY2Vp dmluZyBiaW5hcnkgc3RpbGwgd29ya3MgYXMgYmVmb3JlLiAgV2hhdCBkaWQgSSBicmVhaywgYW5k IHdoZW4/CitPaCwgaXQgd2FzIGp1c3QgdGhlIHNjcmlwdCwgd2hlbiBJIGNoYW5nZWQgaXQgZnJv bSB1c2luZyBzeiB0byBsc3ouICBQdXR0aW5nCitpdCBiYWNrIHRvIHN6IG1ha2VzIGl0IHdvcmss IGV2ZW4gd2l0aCB0aGUgZnVsbCAzLjJNQiBiaW5hcnkgcGF0dGVybiB3aXRoCitJQUNzLgorCitJ IGJhY2tlZCBvZmYgdGhlIGNoYW5nZXMgSSBtYWRlIHRvIGNrY3RlbC5jIHRvIHN1cHByZXNzIHNv bWUgd2FybmluZ3MsIGluCit2aWV3IG9mIHRoZSBmYWN0IHRoYXQgc2ltaWxhciBjaGFuZ2VzIHRv IGNrdXRpby5jIGJyb2tlIHRoaW5ncyBzbyBiYWRseS4KKzE5IEF1ZyAyMDA3LgorCitJZiBzeiBp cyBub3QgZ2l2ZW4gdGhlIC1lIGZsYWcsIGl0IHNlbmRzIGNvbnRyb2wgY2hhcmFjdGVycyBiYXJl LCBleGNlcHQgXlAsCiteUSwgXlMsIGFuZCBeWC4gIF5YIGlzIHRoZSBjb250cm9sIHByZWZpeCwg c28gXkEgaXMgc2VudCBeWCBmb2xsb3dlZCBieSBBLgorV2l0aCAtZSwgYWxsIEMwIGNvbnRyb2wg Y2hhcnMgYXJlIHByZWZpeGVkLCBidXQgd2l0aCBeWCwgd2hpY2ggaXMsIG9mCitjb3Vyc2UsIGEg Y29udHJvbCBjaGFyYWN0ZXIuICBJbnRlcmVzdGluZ2x5LCB0aGUgQzEgYW5hbG9ncyBvZiBeUCwg XlEsIF5TCisoYnV0IG5vdCBeWCBhbmQsIHVuZm9ydHVuYXRlbHksIG5vdCBJQUMpIGFyZSBhbHNv IHByZWZpeGVkLiAgLWUgbWFrZXMgbm8KK2RpZmZlcmVuY2UgZm9yIDgtYml0IGNoYXJhY3RlcnMu CisKK0lmIHdlIGhhdmUgYSBUZWxuZXQgY29ubmVjdGlvbiBhbmQgdGhlIHNlcnZlciBpcyBpbiBB U0NJSSAoTlZUKSBtb2RlLCBDUiBpcworYWx3YXlzIGZvbGxvd2VkIGJ5IExGIG9yIE5VTC4gIFdl bGwsIGl0IHNlZW1zIHRoZSBzZXJ2ZXIgaXMgcHV0dGluZyB1cworKEtlcm1pdCkgaW4gYmluYXJ5 IG1vZGUgaW4gdGhpcyBjYXNlLCBidXQgc3RheWluZyBpbiBBU0NJSSBtb2RlIGl0c2VsZi4KK0Fk ZGVkIGNvZGUgdG8gaGFuZGxlIE5WVCBieXRlIHN0dWZmaW5nIGFuZCB1bnN0dWZmaW5nIGluIGVh Y2ggZGlyZWN0aW9uCitpbmRlcGVuZGVudGx5LCBhY2NvcmRpbmcgdG8gdGhlIFRSQU5TTUlUX0JJ TkFSWSBzdGF0ZSBpbiB0aGF0IGRpcmVjdGlvbi4gIEkKK21hZGUgYSBmaWxlIGNvbnRhaW5pbmcg anVzdCB0aGUgYnl0ZXMgMC0zMSBhbmQgMTI3IGFuZCAxMjgtMTU5IGFuZCAyNTUgKDY2CitieXRl cyBhbGwgdG9nZXRoZXIpIGFuZCBzZW5kaW5nIGl0IGZyb20gdGhlIGhvc3QgdG8gQy1LZXJtaXQs IHRoZSBsb2NhbCBsb2cKK3Nob3dzIHRoYXQgZXZlcnkgY29udHJvbCBjaGFyYWN0ZXIgd2FzIHJl Y2VpdmVkIGNvcnJlY3RseSBhbmQgYWxsIFRFTE5FVAorY29udmVyc2lvbnMgd2VyZSBkb25lIHJp Z2h0IC0tIE5VTCByZW1vdmVkIGFmdGVyIENSIChhbmQgb25seSBhZnRlciBDUik7IElBQworcmVt b3ZlZCBhZnRlciBJQUMgKGFuZCBvbmx5IGFmdGVyIGFuIElBQyBtZWFudCBhcyBhIHF1b3RlKS4g IEZvciB0aGUgZmlyc3QKK3RpbWUsIEkgY2FuIHJlY2VpdmUgdGhlIDFNQiBhbGwtdmFsdWVzIHRl c3QgcGF0dGVybiwgYnV0IHRoZXJlIGFyZSBzdGlsbAordG9ucyBvZiAoY29ycmVjdGFibGUpIENS QyBlcnJvcnMsIHNvIHRoZSB0cmFuc2ZlciByYXRlIGlzIHJlYWxseSBhd2Z1bCwgbGlrZQorYWJv dXQgNSUgb2Ygd2hhdCB3ZSBnZXQgd2l0aCBhIHRleHQgZmlsZSAoMjVLY3BzIGluc3RlYWQgb2Yg NTAwKS4KKworRnVydGhlciBleHBlcmltZW50YXRpb24gc2hvd3MgdGhhdCB0aGUgZnVuZGFtZW50 YWwgdHJhbnNwYXJlbmN5IHByb2JsZW0gaXMKK2ZpeGVkOyB3ZSBjYW4gcmVjZWl2ZSBzaG9ydCBm aWxlcyAoc2F5LCAxSyBvciBsZXNzKSBjb250YWluaW5nIGFic29sdXRlbHkKK2FueSBieXRlIHZh bHVlcyBpbiBhbnkgY29tYmluYXRpb24gd2l0aCBubyBlcnJvcnMgYXQgYWxsLiAgQnV0IG9uY2Ug dGhlIGZpbGUKK3NpemUgcmVhY2hlcyAoc2F5KSAxMEssIHdlIGdldCBDUkMgZXJyb3JzLCBsaWtl IG9uZSBldmVyeSAyIG9yIDNLIG9mIGRhdGEuCitUaGVzZSBhcmUgbm90IGRldGVybWluaXN0aWMu ICBJbiBzdWNjZXNzaXZlIHRyYW5zZmVycyBvZiB0aGUgc2FtZSBmaWxlLCB0aGV5Citjb21lIGlu IGRpZmZlcmVudCBzcG90cy4gIEl0J3MgdGVtcHRpbmcgdG8gYmxhbWUgcHR5IGJ1ZmZlciBvdmVy cnVucywgYnV0Cit0aGVuIHRleHQgZmlsZXMgd291bGQgc2hvdyB0aGUgc2FtZSBiZWhhdmlvci4g IFdoZW4gYSBiaW5hcnkgZmlsZSBzaXplCitleGNlZWRzLCBzYXksIDFNQiwgdGhlIGNoYW5jZXMg b2Ygc3VjY2Vzc2Z1bCBjb21wbGV0aW9uIGdvIHdheSBkb3duLAoraW5kZXBlbmRlbnQgb2Ygd2hl dGhlciBteSBleHRlcm5hbCBwcm90b2NvbCBpcyByeiBvciBscnouICBJIGxpa2UgbHJ6IGJldHRl cgorYmVjYXVzZSB0aGUgZXJyb3IgcmVwb3J0cyBjb21lIG91dCBvbiB0aGUgc2NyZWVuIGFzIHRo ZSB0cmFuc2ZlciBpcyBnb2luZworb24uICBUcnlpbmcgdG8gZG93bmxvYWQgYSByZWFsLXdvcmxk IGJpbmFyeSBmaWxlIC0tIGEgMi4yTUIgQy1LZXJtaXQKK2V4ZWN1dGFibGUgLS0gSSBnZXQgNDUw MCBlcnJvciBtZXNzYWdlcyBidXQgdGhlIHRyYW5zZmVyIGV2ZW50dWFsbHkgc3VjY2VlZHMsCit3 aXRoIGFuIGVmZmVjdGl2ZSB0aHJvdWdocHV0IG9mIDIxS2Nwcy4KKworQWN0dWFsbHkgaXQgdHVy bnMgb3V0IHRoYXQgInN6IC1hIHNvbWViaWd0ZXh0ZmlsZSIgKDIuMk1CKSBhbHNvIGdldHMgYSBs b3QKK29mIENSQyBlcnJvcnMuICBUaGUgLWUgZmxhZyAoZXNjYXBlIGFsbCBjb250cm9sIGNoYXJh Y3RlcnMpIG1ha2VzIHRoZSBzYW1lCitiaWcgdGV4dCBmaWxlIHRyYW5zZmVyIHdpdGggZmV3IG9y IG5vIGVycm9ycy4gIEl0J3Mgbm90IHN1cmUtZmlyZS4KK1NvbWV0aW1lcyBubyBlcnJvcnMsIHNv bWV0aW1lcyBvbmUgb3IgdHdvLCBhbmQgc29tZXRpbWVzIGEgZmF0YWwgZXJyb3IgdGhhdAora2ls bHMgdGhlIHRyYW5zZmVyLgorCitXaXRoIGJpbmFyeSBmaWxlcy4uLiBhIDMySyBiaW5hcnkgZmls ZSBzZWVtcyB0byBtYWtlIGl0IGV2ZXJ5IHRpbWUuICA0MEsKK2ZhaWxzIGFib3V0IDUwJSBvZiB0 aGUgdGltZS4gIDQ4SyBmYWlscyA2MCUgYW5kIGV2ZXJ5IHRpbWUgaXQgZmFpbHMsIGl0IGhhcwor Y3JlYXRlZCBhIHBhcnRpYWwgZmlsZSBvZiBleGFjdGx5IDMySyAoMzI3NjggYnl0ZXMpLiAgOTZL IGZhaWxzIDkgb3V0IG9mIDEwCit0aW1lcywgd2hlbiBpdCBmYWlscywgdGhlIHBhcnRpYWwgZmls ZSBpcyBhbHdheXMgMCBieXRlcywgb3IgMzI3NjgsIG9yCis2NTUzNiwgYnV0IHRoYXQganVzdCBt ZWFucyB0aGF0IHJ6J3MgZmlsZSBvdXRwdXQgYnVmZmVyIGlzIDMySy4KKworV2h5LCB0aGVuLCBk byBiaW5hcnkgZmlsZXMgY2F1c2UgdHJvdWJsZSBpZiBpdCBpcyBub3QgYSBzb2xpZCB0cmFuc3Bh cmVuY3kKK3Byb2JsZW0/ICBJZiBhIGNlcnRhaW4gZmlsZSBjYW4gZ2V0IHRocm91Z2ggb25jZSwg d2h5IGNhbid0IGl0IGdldCB0aHJvdWdoCitldmVyeSB0aW1lPyAgV2hlbiBhIGNoYXJhY3RlciBh cnJpdmVzIGF0IHRoZSBwdHksIHRoZSBwdHkgZHJpdmVyIHByb2JhYmx5Cit0YWtlcyBhIGRpZmZl cmVudCBwYXRoIHRocm91Z2ggaXRzIGNvZGUsIGNoZWNraW5nIHRoZSB0ZXJtaW5hbCBmbGFncyB0 aGF0Cit3b3VsZCBhZmZlY3QgdGhhdCBjaGFyYWN0ZXIuICBJIHRyaWVkIG1ha2luZyBLZXJtaXQn cyBuZXR3b3JrIHJlYWQgYnVmZmVycwordmVyeSBzbWFsbCBidXQsIHN1cnByaXNpbmdseSwgdGhp cyBtYWRlIHRoaW5ncyB3b3JzZS4gIEkgYWxzbyB0cmllZCBtYWtpbmcKK3RoZW0gdmVyeSBtdWNo IGJpZ2dlciwgd2hpY2ggZGlkbid0IGhlbHAgZWl0aGVyLiAgMjRLIHN0aWxsIHNlZW1zIHRvIGJl IHRoZQorcmlnaHQgc2l6ZS4KKworU28sIGlzIGl0IHRoYXQgc29tZSBjaGFyYWN0ZXJzIHRha2Ug bG9uZ2VyIHRvIHByb2Nlc3MgdGhhbiBvdGhlcnM/ICBTbyBsb25nCit0aGF0IGRhdGEgaXMgbG9z dCBkdWUgdG8gbGFjayBvZiBmbG93IGNvbnRyb2wgYmV0d2VlbiBUQ1AgYW5kIHRoZSBwdHk/ICBP bmUKK3dheSB0byB0ZXN0IHRoaXMgdGhlb3J5IGlzIHRvIHNsb3cgWm1vZGVtIGRvd24uICBJIHRy aWVkICItbCAzMiIgd2hpY2gsCithY2NvcmRpbmcgdG8gdGhlIG1hbiBwYWdlLCB0ZWxscyBzeiB0 byAid2FpdCBmb3IgdGhlIHJlY2VpdmVyIHRvIGFja25vd2xlZGdlCitjb3JyZWN0IGRhdGEgZXZl cnkgTiAoMzIgPD0gTiA8PSAxMDI0KSBjaGFyYWN0ZXJzLiAgVGhpcyBtYXkgYmUgdXNlZCB0bwor YXZvaWQgbmV0d29yayBvdmVyLXJ1biB3aGVuIFhPRkYgZmxvdyBjb250cm9sIGlzIGxhY2tpbmcu IiAgTWFrZXMgbm8KK2RpZmZlcmVuY2UuICBJIGFsc28gdHJpZWQgdGhlIC13IChXaW5kb3cpIHN3 aXRjaCwgZGl0dG8uICBJbiBmYWN0IHRoZXJlIGFyZQorYWxsIHNvcnRzIG9mIG9wdGlvbnMgdG8g c2V0IHRoZSAid2luZG93IHNpemUiLCAicGFja2V0IGxlbmd0aCIsICJibG9jaworc2l6ZSIsIGFu ZCAiZnJhbWUgbGVuZ3RoIiwgYnV0IHdpdGggbm8gZXhwbGFuYXRpb24gb2Ygd2hhdCB0aGVzZSBt ZWFuIG9yIGhvdwordGhleSBhcmUgcmVsYXRlZC4gIElmIEkgY3JhbmsgZXZlcnl0aGluZyBkb3du IHRvIG1pbmltdW0gdmFsdWU6CisKKyAgbHN6IHEgLUwgMzIgLWwgMzIgLXcgMQorCitJIGdldCA1 MCUgc3VjY2VzcyB3aXRoIHRoZSA5NksgZmlsZSBpbnN0ZWFkIG9mIDEwJS4gIEFkZGluZyAtZSwg b2RkbHkKK2Vub3VnaCwgbWFkZSBpdCB3b3JzZS4gIEkgYWxzbyB0cmllZCBzZXR0aW5nIHRoZSBl bnZpcm9ubWVudCB2YXJpYWJsZQorWk5VTExTIHRvIGRpZmZlcmVudCBudW1iZXJzIGxpa2UgNTEy LCBubyBoZWxwIHRoZXJlIGVpdGhlci4KKworSSB0cmllZCBtYWtpbmcgdGhlIHJlYWQtZnJvbS1u ZXQtd3JpdGUtdG8tcHR5IGJ1ZmZlciBzbWFsbCAoMUspIGJ1dCBsZWF2aW5nCit0aGUgcHR5LXRv LW5ldCBvbmUgYmlnLiAgVGhpcyBpbXByb3ZlcyBjaGFuY2VzIG9mIHN1Y2Nlc3MsIGJ1dCBpdCdz CitpbnRvbGVyYWJseSBzbG93ICgzS2NwcyB3aGVuIHRoZSBjb25uZWN0aW9uIGlzIGNhcGFibGUg b2YgNTAwSykuCisKK0kgYWxzbyBjaGFuZ2VkIHRoZSB3cml0ZS10by1wdHkgb3BlcmF0aW9uIGZy b20gYSBzaW5nbGUgd3JpdGUoKSBjYWxsIG9mCitwb3NzaWJseSBtYW55IEsgY2hhcmFjdGVycyB0 byBhIGJ5dGUgbG9vcCwgb25lIHdyaXRlKCkgcGVyIGJ5dGUuICBTYW1lCityZXN1bHQ6IHN1Y2Nl c3MgKGJ1dCBzdGlsbCBhYm91dCAzMDAgcmVjb3ZlcmFibGUgZXJyb3JzKSwgdGhyb3VnaHB1dCAz S2Nwcy4KKzIwIEF1ZyAyMDA3LgorCitXaXRoIHR0cHR5Y21kKCkgY29uZmlndXJlZCB0byB3cml0 ZSB0byB0aGUgcHR5IGluIGEgYnl0ZSBsb29wLCBpdCBpcworcG9zc2libGUgdG8gZGVsYXkgZWFj aCB3cml0ZS4gIEFkZGluZyBhIDEwbXNlYyBkZWxheSBwZXIgY2hhcmFjdGVyIHJlc3VsdHMKK2lu IGEgdHJhbnNmZXIgdGhhdCBydW5zIGF0IGFib3V0IDIwIGNwcyBhbmQgKGZvciB0aGUgOTZLIHRl c3QgZmlsZSkgd291bGQKK3Rha2UgYWJvdXQgODAgbWludXRlcyB0byBjb21wbGV0ZS4gIEFuZCB5 ZXQgaXQgc3RpbGwgZ2V0cyBqdXN0IGFzIG1hbnkKK2Vycm9ycy4gIFNvIGl0J3Mgbm90IGEgbWF0 dGVyIG9mIHRpbWluZyBlaXRoZXIuICBUaGUgZXJyb3JzIGNvbWUsIG9uCithdmVyYWdlLCBldmVy eSBmaWxlIDM4OCBieXRlcywgYnV0IG5vdCBhdCByZWd1bGFyIGludGVydmFscy4KKworSSB0cmll ZCB0aGUgVElPQ1JFTU9URSBpb2N0bCBvbiB0aGUgcHR5IG1hc3RlciwgYXMgZGlzY3Vzc2VkIHNv bWV3aGF0CitvYmxpcXVlbHkgaW4gdGhlIE1hYyBPUyBYICJtYW4gcHR5IiBwYWdlOyAiVGhpcyBt b2RlIGNhdXNlcyBpbnB1dCB0byB0aGUKK3BzZXVkbyB0ZXJtaW5hbCB0byBiZSBmbG93IGNvbnRy b2xsZWQgYW5kIG5vdCBpbnB1dCBlZGl0ZWQgKHJlZ2FyZGxlc3Mgb2YKK3RoZSB0ZXJtaW5hbCBt b2RlKSIgLS0gc291bmRzIGxpa2UganVzdCB0aGUgdGlja2V0IGJ1dCBpdCBtYWRlIG5vCitkaWZm ZXJlbmNlLiAgQWN0dWFsbHksIGxvb2tpbmcgYXQgYSBtYW4gcGFnZSBvbiBhbm90aGVyIE9TIChT b2xhcmlzKSwgaXQKK3NheXMgdGhpcyBpcyBvbmx5IGZvciBsaW5lcyBvZiB0ZXh0LCBFT0xzIGFy ZSBzdXBwbGllZCwgc28gdGhhdCB3b3VsZCBtZXNzCit1cCB0aGUgcHJvdG9jb2wuICBTbyByZW1l bWJlcjogZG9uJ3QgdXNlIHRoaXMuCisKK1RyaWVkIHdpdGhvdXQgT19OREVMQVk7IHRoZSBiZWhh dmlvciB3YXMgdGhlIHNhbWUgYnV0IHRoZSBzcGVlZCB3YXMgbXVjaAorc2xvd2VyLgorCitUcmll ZCBzd2l0Y2hpbmcgYmFjayB0byB0aGUgY2t1cHR5LmMgcm91dGluZXMgb24gTWFjIE9TIFggYW5k IGZvdW5kIHRoYXQgaXQKK3dvcmtzIG5vdyB0aGUgc2FtZSBhcyB3aXRoIG9wZW5wdHkoKSwgZXhj ZXB0IHRoYXQgSSBzZWVtIHRvIGdldCBtb3JlIGdldHR5CitiYWJibGUgYXQgdGhlIGVuZC4gIEJ1 dCB0aGlzIG1lYW5zIEkgY2FuIHJ1biBzb21lIHRlc3RzIG9uIFNvbGFyaXMuICBJIG1vdmVkCit0 aGUgZW50aXJlIHRlc3QgZW52aXJvbm1lbnQgZnJvbSBNYWMgT1MgWCAxMC40LjkgdG8gU29sYXJp cyA5LiAgQnV0IGl0Citkb2Vzbid0IHdvcmsgYXQgYWxsLgorCitUcnlpbmcgdG8gZmlndXJlIG91 dCB0aGUgY2t1cHR5LmMgbW9kdWxlcyBhZ2Fpbi4KKyAuIGRvX3B0eSgpIGNhbGxzIHB0eV9nZXRw dHkoKSB3aGljaCByZXR1cm5zIGluIGFyZzEgdGhlIGZkIG9mIHRoZSBwdHkgbWFzdGVyLgorIC4g VGhlbiBpdCBjcmVhdGVzIGEgcGlwZSBhcyBhIHdheSB0byB0ZWxsIHdoZW4gdGhlIGNoaWxkIGRp ZXMKKyAuIFRoZW4gaXQgY3JlYXRlcyBhIGZvcms6CisgICAgLSBUaGUgcGFyZW50IGRvZXMgYSBi bG9ja2luZyByZWFkIGZyb20gdGhlIHBpcGUKKyAgICAtIFRoZSBjaGlsZCBjYWxscyBnZXRwdHlz bGF2ZSgpIHRvIGdldCB0aGUgcHR5IHNsYXZlCisgICAgICBhbmQgd3JpdGVzIG9uZSBieXRlIHRv IHRoZSBwaXBlCisgICAgICBhbmQgdGhlbiBleGVjcyB0aGUgY29tbWFuZCBpdCdzIHN1cHBvc2Vk IHRvIHJ1bgorTm90ZSB0aGF0IHRoZSBmaWxlIGRlc2NyaXB0b3Igb2YgdGhlIHNsYXZlIGlzIGtu b3duIG9ubHkgdG8gdGhlIGxvd2VyIGZvcmsuCitUaGVyZWZvcmUgdGhlIGxvd2VyIGZvcmsgaXMg dGhlIG9uZSB0aGF0IGhhcyB0byBzZXQgYWxsIHRoZSB0dHkgbW9kZXMsIGV0Yy4KK0kgdG9vayBj YXJlIG9mIGFsbCB0aGF0IGJ1dCB0aGUgY2t1cHR5LmMgbWV0aG9kIGRvZXNuJ3Qgd29yayBhdCBh bGwgb24KK1NvbGFyaXMuICBCdXQgaXQgd29ya3MgImZpbmUiIG9uIE1hYyBPUyBYICh0aGUgMzJL IGFsbC1ieXRlcyB0ZXN0IGZpbGUKK3RyYW5zZmVycyBpbnN0YW50bHkgd2l0aCBubyBlcnJvcnMs IGJ1dCB0aGUgOTZLIG9uZSBlcnJvcnMgb3V0KS4KKworVGhlIHByb2JsZW0gb24gU29sYXJpcyBp cyB0aGF0IHB0eV9tYWtlX3JhdygpIGZhaWxzIG9uIHRoZSBtYXN0ZXJmZCAoYnV0IG5vdAorb24g dGhlIHNsYXZlZmQpIHdpdGggZXJybm8gMjUgImlvY3RsIGluYXBwcm9wcmlhdGUgZm9yIGRldmlj ZSIuICBJdCBkb2Vzbid0CittYXR0ZXIgd2hldGhlciBJIGRvIGl0IGluIGNrdXB0eS5jIG9yIGNr dXRpby5jLiAgSSBmb3VuZCBhIHdlYiBwYWdlIG9uCitrZGUub3JnIHRoYXQgc2F5cyBTb2xhcmlz IGRvZXMgbm90IGFsbG93IHRjZ2V0L3NldGF0dHIoKSBvbiBhIHB0eSBtYXN0ZXIuCitCdXQgdGhl IFN1biAia25vd2xlZGdlIGJhc2UiIGlzIG5vdCBvcGVuIHRvIHRoZSBwdWJsaWMuICBXZWxsLCBw cmVzdW1hYmx5CitjaGFuZ2VzIG1hZGUgdG8gdGhlIHNsYXZlIGFyZSByZWZsZWN0ZWQgaW4gdGhl IG1hc3RlciAoY29tbWVudHMgaW4gU29sYXJpcwordGVsbmV0ZCBzZWVtIHRvIGNvbmZpcm0gdGhp cy4uLikgIExldCdzIGNvbWUgYmFjayB0byBTb2xhcmlzIGxhdGVyLgorCitNb3ZpbmcgdG8gYSBM aW51eCB3aXRoIGxyenN6IGluc3RhbGxlZC4uLiAgQnVpbHQgYSBLZXJiZXJvcyA1IHZlcnNpb24g d2l0aAorVVNFX0NLVVBUWV9DLiAgTGlrZSBvbiBNYWMgT1MgWCwgaXQgdHJhbnNmZXJzIHNob3J0 IGZpbGVzIE9LIGFuZCBjaG9rZXMgb24KK2xvbmdlciBvbmVzLiAgU3dpdGNoZWQgdG8gb3BlbnB0 eSgpLCBpdCBiZWhhdmVzIHRoZSBzYW1lLiAgU28gdGhlIHByb2JsZW1zCitvbiBNYWMgT1MgWCBh cmUgZXZpZGVudGx5IG5vdCBPUy1zcGVjaWZpYywgd2hpY2ggaXMgZ29vZCBJIGd1ZXNzLCBzaW5j ZSB0aGF0CittZWFucyBmaW5kaW5nIHRoZSB3YXkgYXJvdW5kIHRoZW0gd2lsbCBhcHBseSB0byBt b3JlIHRoYW4gb25lIHBsYXRmb3JtLgorMjEgQXVnIDIwMDcuCisKK0xvb2sgaW50byBUSU9DU0NU VFkgYWdhaW4uICBPbiBTeXN0ZW0gViBiYXNlZCBPUydzLCBvcGVuaW5nIGEgcHR5IGFjcXVpcmVz IGEKK2NvbnRyb2xsaW5nIHRlcm1pbmFsIGF1dG9tYXRpY2FsbHkuICBPbiBCU0QtYmFzZWQgT1Mn cywgbm87IHlvdSBoYXZlIHRvIHVzZQordGhlIFRJT0NTQ1RUWSBvbiB0aGUgc2xhdmUgZmlsZSBk ZXNjcmlwdG9yIHRvIGdpdmUgaXQgb25lLiAgSSdtIG5vdCBzdXJlIHdoeQorYSBjb250cm9sbGlu ZyB0ZXJtaW5hbCB3b3VsZCBiZSBuZWVkZWQsIGV4Y2VwdCB0aGF0IHdpdGhvdXQgb25lLCB0aGUg dmlydHVhbAorZGV2aWNlICIvZGV2L3R0eSIgZG9lcyBub3QgZXhpc3QgZm9yIHRoZSBwcm9jZXNz IHRoYXQgcnVucyBvbiB0aGUgcHR5LCBhbmQKK21heWJlIHRoZSBhcHBsaWNhdGlvbiB0aGF0IHJ1 bnMgdGhlcmUgKGUuZy4gcnpzeikgY2hlY2tzIGZvciBpdC4gIE9uIHRoZQorZG93bnNpZGUsIGhh dmluZyBhIGNvbnRyb2xsaW5nIHRlcm1pbmFsIG9wZW5zIHRoZSBwcm9jZXNzIHVwIHRvIHRlcm1p bmFsCitpbnRlcnJ1cHRzIGxpa2UgU0lHSU5UIGFuZCBTSUdRVUlULiAgVW50aWwgbm93IEkgaGF2 ZSBub3QgYmVlbiB1c2luZyB0aGlzCitpb2N0bCgpLiAgUmVzdWx0cyAoaW4gTGludXgpOgorCisg IFdpdGggVElPQ1NDVFRZOiA5NksgYWxsLWJ5dGVzIHRlc3Q6IDExIHNjcmVlbnMgb2YgZXJyb3Jz LCB0aGVuIHN1Y2Nlc3MKKyAgV2l0aG91dCBUSU9DU0NUVFk6IGV4YWN0bHkgdGhlIHNhbWUuCisK K1RyaWVkIHRoZSBzYW1lIHRoaW5nIHdpdGggVElPQ05PVFRZIGluc3RlYWQgb2YgVElPQ1NDVFRZ LCB3aXRoIGV4YWN0bHkgdGhlCitzYW1lIHJlc3VsdHMgKG5vIGVmZmVjdCB3aGF0c29ldmVyKS4K KworVGhlcmUgaGFzIHRvIGJlIGEgd2F5IHRvIG1ha2UgdGhpcyB3b3JrLCBiZWNhdXNlIFptb2Rl bSB3b3JrcyB0aHJvdWdoCit0ZWxuZXRkLCB3aGljaCBiYXNpY2FsbHkgdGhlIHNhbWUgdGhpbmcg YXMgdHRwdHljbWQoKTogYSByZWxheSBiZXR3ZWVuIHRoZQorbmV0d29yayBhbmQgYSBwdHkuICB0 dHB0eWNtZCgpIGlzIGxpa2UgdGVsbmV0ZCBiYWNrd2FyZHMuICBNb2Rlcm4gdGVsbmV0ZHMKK2Fy ZSBub3QgbXVjaCBoZWxwOyB0aGV5IGRvbid0IGFjY2VzcyBwdHlzIG9yIHRoZSBuZXR3b3JrIGRp cmVjdGx5LCB0aGV5IGdvCit0aHJvdWdoICJtdXgiIGRldmljZXMgc28gSSBjYW4ndCBzZWUgd2hh dCB0aGV5J3JlIGRvaW5nIHRvIGdldCB0cmFuc3BhcmVuY3kKK2FuZCBmbG93IGNvbnRyb2wuICBB biBvbGQgQlNEIHRlbG5ldGQgdXNlcyBwYWNrZXQgbW9kZSBidXQgdGhhdCB3b3VsZCBiZSBhCiti aWcgZGVhbC4uLgorCitJIHRyaWVkIGlnbm9yaW5nIHZhcmlvdXMgc2lnbmFscyBsaWtlIFNJR1RU T1UgYW5kIFNJVFNUUCwgc2luY2Ugc29tZSBUZWxuZXQKK2NsaWVudHMgZG8gdGhpcy4gIE5vIGVm ZmVjdCwgbm8gZGlmZmVyZW5jZS4gIEFueXdheSwgaW4gTGludXggdGhlIHRyYW5zZmVycworYWxt b3N0IGFsd2F5cyBmaW5pc2ggT0sgZGVzcGl0ZSB0aGUgbWFueSBlcnJvcnMuICBUaGVyZSBpcyBq dXN0IHNvbWUgdHJpY2sKK0knbSBtaXNzaW5nIHRvIG1ha2UgdGhlIHB0eSBhY2NlcHQgYSBzdHJl YW0gb2YgYXJiaXRyYXJ5IGJ5dGVzIHdpdGhvdXQKK2hpY2N1cGluZy4KKworV2hhdCBhYm91dCBT b2xhcmlzLCB3aGljaCB1c2VzIGNrdXB0eS5jPyAgSW4gc3RyZWFtcy1iYXNlZCBPUydzLCB3aGVy ZSBsaW5lCitkaXNjaXBsaW5lcyBhbmQgd2hhdG5vdCBhcmUgcHVzaGVkIG9uIHRvcCBvZiB0aGUg cHR5LCBpdCBsb29rcyBsaWtlIHRoZSBwdHkKK21vZHVsZSBzYXZlcyB0aGUgZmlsZSBkZXNjcmlw dG9yIG9mIHRoZSAiYmFyZSIgc2xhdmUgcHR5IChhcyAnc3B0eScpIGJlZm9yZQorcHVzaGluZyB0 aGluZ3Mgb250byBpdCwgYW5kIHRoZW4gbGF0ZXIgdXNlcyBzcHR5IHJhdGhlciB0aGFuIHRoZSBy ZWd1bGFyCitzbGF2ZSBwdHkgZmlsZSBkZXNjcmlwdG9yIHdoZW4gZ2V0dGluZy9zZXR0aW5nIHRl cm1pbmFsIG1vZGVzLiAgSSdtIG5vdCBzdXJlCit3aGF0IHRoaXMgaXMgYWxsIGFib3V0IGJ1dCBp dCdzIGRlZmluaXRlbHkgU3lzVmlzaC4uLiAgSXQgaGFwcGVucyBpZgorU1RSRUFNU1BUWSBpcyBk ZWZpbmVkLCBidXQgSSBub3RpY2VkIHRoYXQgU1RSRUFNU1BUWSBpcyBuZXZlciBkZWZpbmVkCith bnl3aGVyZS4gIEkgdHJpZWQgZGVmaW5pbmcgaXQgc28gd2UgdGFrZSBhbiBlbnRpcmVseSBkaWZm ZXJlbnQgcGF0aCB0aHJvdWdoCit0aGUgY29kZS4gIEl0IG1hZGUgYWJzb2x1dGVseSBubyBkaWZm ZXJlbmNlLgorCitUaGVuIEkgbm90aWNlZCB0aGF0IEhBVkVfU1RSRUFNUyBpcyBub3QgZGVmaW5l ZCBmb3IgU29sYXJpcyBlaXRoZXIuICBUcmllZAorZGVmaW5pbmcgaXQsIGJ1dCB0aGUgc2Vzc2lv biBkaWRuJ3Qgd29yayBhdCBhbGwsIG5vIGkvby4gIFJlbW92aW5nIHRoZQorSEFWRV9TVFJFQU1T IGRlZmluaXRpb24gYnV0IGtlZXBpbmcgdGhlIFNUUkVBTVNQVFkgZGVmaW5lZCwgSSByZWJ1aWx0 IGFuZAordHJpZWQgInNldCBob3N0IC9jb25uZWN0IC9wdHkgZW1hY3MiLiAgSSBnb3QgYW4gRU1B Q1Mgc2NyZWVuIGJ1dCBjb3VsZCBub3QKK3R5cGUgYW55dGhpbmcgaW50byBpdCwgd2hpY2ggbWVh bnMgdGhhdCBTVFJFQU1TUFRZIHNob3VsZCBub3QgYmUgZGVmaW5lZAorZWl0aGVyLiAgUmVtb3Zl ZCB0aGUgZGVmaW5pdGlvbiBhbmQgInNldCBob3N0IC9wdHkiIHdvcmtzIGFnYWluLiAgU28gd2hh dCdzCit0aGUgcHJvYmxlbSB3aXRoIHR0cHR5Y21kKCk/CisKK0luIGZhY3QsIHR0cHR5Y21kKCkg d29ya3Mgb24gU29sYXJpcyB3aXRoIEtlcm1pdCBhcyB0aGUgZXh0ZXJuYWwgcHJvdG9jb2wsCiti dXQgbm90IHdpdGggWm1vZGVtLCBub3QgZXZlbiB3aXRoIHRleHQgZmlsZXMuICBTbyBhZ2Fpbiwg dGhlcmUgaXMgbm8KK2Z1bmRhbWVudGFsIHByb2JsZW0gd2l0aCB0aGUgY29kZSBvciB0aGUgbG9n aWMsIGl0J3MgSnVzdCBBIE1hdHRlciBPZgorVHJhbnNwYXJlbmN5IHRvIGNvbnRyb2wgYW5kL29y IDgtYml0IGNoYXJhY3RlcnMgLS0gc29tZSB0cmljayBJIGRvbid0IGtub3cKK2Fib3V0LgorCitM b29raW5nIGF0IHRoZSBTb2xhcmlzIGRlYnVnIGxvZy4uLiAgSSBzZWUgdGhhdCBja3VwdHkuYyBp cyBjYWxsaW5nCitpbml0X3Rlcm1idWYoKSB0byBzZXQgdGhlIHR0eSBtb2RlcyBvZiB0aGUgbWFz dGVyLCBub3QgdGhlIHNsYXZlLCBhbmQKK3NldF90ZXJtYnVmKCkgdG8gc2V0IHRoZW0sIGJ1dCB5 b3UgY2FuJ3QgZG8gdGhhdCBpbiBTb2xhcmlzLCBlcnJvciAyNS4gIFRoaXMKK2lzIGluIGdldHB0 eXNsYXZlKCkuICBTaG91bGRuJ3QgZ2V0cHR5c2xhdmUoKSBiZSBzZXR0aW5nIHRoZSB0dHkgbW9k ZXMgb2YKK3RoZSBzbGF2ZSwgbm90IHRoZSBtYXN0ZXI/ICBJIGNoYW5nZWQgaXQgdG8gZG8gdGhp cywgYnV0IGxpa2UgYWxsIG90aGVyCitjaGFuZ2VzLCBpdCBtYWRlIG5vIGRpZmZlcmVuY2UuICBJ IGNoZWNrZWQgdG8gbWFrZSBzdXJlIHRoYXQgYWZ0ZXIgdGhlIGNoYW5nZSwKKyJzZXQgaG9zdCAv cHR5IC9jb25uZWN0IGVtYWNzIiBzdGlsbCB3b3JrZWQgYW5kIGl0IGRpZC4KKworQW5kIHRoZW4g d2hhdC4uLiAgSSBoYWQgc29tZSBjb2RlIHRvIHJlZGlyZWN0IHN0ZGVyciBpbiBja3VwdHkuYyB0 aGF0IHdhcworbm90IGJlaW5nIGV4ZWN1dGluZyBkdWUgdG8gYSB0eXBvLiAgV2hlbiBJIGZpeGVk IHRoZSB0eXBvLCBwb29mLCBabW9kZW0KK2JpbmFyeSB0cmFuc2ZlcnMgc3RhcnRlZCB3b3JraW5n LCBvciB3b3JraW5nIGFzIHdlbGwgYXMgdGhleSB3b3JrIGluIExpbnV4CithbmQgTWFjIE9TIFgu ICBJdCB0dXJucyBvdXQgdGhhdCBpZiBJIGRvbid0IHJlZGlyZWN0IHN0ZGVyciwgc3ogYW5kIHJ6 CitqdXN0IGRvbid0IHdvcmsuICBCdXQgbHN6IGFuZCBscnogZG8uICBCdXQgaWYgSSBkbyByZWRp cmVjdCBpdCwgSSBkb24ndCBzZWUKK3RoZSBwcm9ncmVzcyBtZXNzYWdlcyBmcm9tIGxzei9scnou ICAyMiBBdWcgMjAwNy4KKworQnVpbHQgb24gSFAtVVggMTFpIHYzIChCLjExLjMxIFUgaWE2NCkg d2l0aCBvcHRpbWl6aW5nIGNvbXBpbGVyLCBnb3QgdG9ucyBvZgorcGlja3kgd2FybmluZ3MsIGJ1 dCBpdCBmaW5pc2hlZCBhbmQgbGlua2VkIGFuZCBydW5zIE9LLiAgTWFueSBvZiB0aGUKK3dhcm5p bmdzIHdlcmUgbGlrZSB0aGlzOgorCisgICJja3VjbnMuYyIsIGxpbmUgMTYwNjogd2FybmluZyAj MjA2OC1EOiBpbnRlZ2VyIGNvbnZlcnNpb24gcmVzdWx0ZWQgaW4gYQorICBjaGFuZ2Ugb2Ygc2ln bjogICB0bm9wdFswXSA9IChDSEFSKSBJQUM7CisKK0lBQyBpcyBkZWZpbmVkIGFzIDI1NSBpbiBj a2N0ZWwuaC4gIElmIEkgZGVmaW5lIGl0IGFzIDB4ZmYsIEkgZG9uJ3QgZ2V0IHRoZQord2Fybmlu Z3MuICBJIGNoYW5nZWQgdGhlIGRlZmluaXRpb25zIG9mIGFsbCB0aGUgVGVsbmV0IGNvbW1hbmRz IHRvIGJlIGluIGhleAorbm90YXRpb24gcmF0aGVyIHRoYW4gZGVjaW1hbC4gIElmIGN1dHMgd2F5 IGRvd24gb24gdGhlIEhQLVVYIHdhcm5pbmdzIGFuZAorZG9lc24ndCBzZWVtIHRvIGNhdXNlIHBy b2JsZW1zIGVsc2V3aGVyZS4gIGNrY3RlbC5oLCAyMyBBdWcgMjAwNy4KKworTm93IGl0IGxvb2tz IGxpa2UgU29sYXJpcyBpcyB3b3JraW5nIGJ1dCB0aGVuIGl0IGhhbmdzIGF0IHRoZSBlbmQuICBJ dAorYXBwZWFycyBhcyBpZiB0aGUgY2t1cHR5LmMgbW9kdWxlIGlzIGJsb2NraW5nIFNJR0NITEQu ICBEZWJ1ZyBsb2cgc2hvd3MgdGhhdAord2hlbiB0aGUgdHJhbnNmZXIgaXMgY29tcGxldGUsIHdl IHJlY2VpdmVkIElBQyBETSAoVGVsbmV0IERhdGEgTWFyaykgYWZ0ZXIKK3N6J3MgbGFzdCBnYXNw IGFuZCBiZWZvcmUgdGhlIHNoZWxsIHByb21wdCBpcyBwcmludGVkLiAgQnV0IGNhbGxpbmcKK3Ru X2Rvb3AoKSBpbiB0aGlzIGNhc2UgaXMgYSBtaXN0YWtlIGJlY2F1c2Ugd2UgYXJlIHJlYWRpbmcg dGhlIG51bWJlciBvZgorYnl0ZXMgdGhhdCB3ZSBrbm93IGFyZSBhdmFpbGFibGUgaW4gYSBjb3Vu dGVkIGxvb3AsIGJ1dCB0bl9kb29wKCkgd291bGQKK2NvbnN1bWUgYW4gdW5rbm93biBudW1iZXIg b2YgYnl0ZXMgYW5kIHdlIHdvdWxkIG5ldmVyIGtub3cgd2hlbiB0byBleGl0IHRoZQorbG9vcC4g IEFueXdheSwgQy1LZXJtaXQgZG9lc24ndCBkbyBhbnl0aGluZyB3aXRoIERNLiAgU2tpcHBpbmcg b3ZlcgordG5fZG9vcCgpIChhbmQgbm90IHdyaXRpbmcgb3V0IHRoZSBUZWxuZXQgY29tbWFuZCBi eXRlcykgZml4ZXMgdGhlIGhhbmdpbmcKK2NvbmRpdGlvbiBhdCB0aGUgZW5kLCBldmVuIHRob3Vn aCBTSUdDSExEIGlzIG5ldmVyIHJhaXNlZC4gIGNrdXRpby5jLAorMjMgQXVnIDIwMDcuCisKK1Nv bWUgdGVzdHMsIFNvbGFyaXMgdG8gTmV0QlNEIG92ZXIgSzUuCit6c3Qgc2VuZHMgYXNjaWkudHh0 LCBhIDIuMzZNQiBhc2NpaSB0ZXh0IGZpbGUgKEtjcHMgLyBFcnJvcnMpLgorenJ0IHJlY2VpdmVz IHRoZSBzYW1lIGZpbGU6CisKKyAgenN0IDU4Ny8wIDUyNi8wIDU0Mi8wIDQzNC8wIDQyMy8wCisg IHpydCA4MjcvMCA4MDAvMCA4NDcvMCBGQUlMICA2MTAvMAorCitTbyB0ZXh0IGlzIGdvb2QuICBC aW5hcnkgbm90IHNvIGdvb2QuICBIZXJlIHdlIHRyYW5zZmVyIHRoZSAxTUIgYWxsLWJ5dGVzCitw YXR0ZXJuIGZpbGUuICB6cmIgcmVjZWl2ZXMgaXQgc3VjY2Vzc2Z1bGx5LCBidXQgd2l0aCAxMjQ4 IGVycm9ycywgYXQgb25seQorMTVLY3BzLiAgU2VuZGluZyB0aGUgc2FtZSBmaWxlIG91dCBhbHdh eXMgZmFpbHM6CisKKyAgQmVnaW4gMjAwNzA4MjMgMTY6MzI6MDc6IFNFTkQgQklOQVJZIGFsbDIu YmluIFtzel0KKyAgU2VuZGluZzogYWxsMi5iaW4KKyAgQnl0ZXMgU2VudDogICA1NjAwLzEwMDAw MDAgICBCUFM6MTI0NDYgICAgRVRBIDAxOjE5ICAgRkFJTFVSRQorICBFbmQgMjAwNzA4MjMgMTY6 MzI6MTMKKyAgRWxhcHNlZCB0aW1lOiA2LjYxNzk5Mjk5OTk5OTg0MgorICBjcHMgPSAxNTExMDMu MjEyMTA2NzU1NgorICBsc3o6IGNhdWdodCBzaWduYWwgMTsgZXhpdGluZworCitEZWNpZGVkIHRv IG1vdmUgdG8gTGludXggYnV0IGZvdW5kIHRoYXQgc29tZXRoaW5nIGlzIHNjcmV3ZWQgdXAgaW4g TGludXgKK0MtS2VybWl0IHdpdGggdGlsZGUgZXhwYW5zaW9uOgorCisgIHNlbmQgfi90ZXN0Zmls ZXMvYWxsLmJpbgorCitkb2Vzbid0IGV4cGFuZCBhdCBhbGwgKGJ1dCBpdCBkaWQgeWVzdGVyZGF5 ISkuICBUaGUgcHJvYmxlbSB3YXMgaW4gdGhlCithbmNpZW50LCBhbmNpZW50IHJlYWx1aWQvc2V0 dWlkIGhhbmRsaW5nIGNvZGU7IHJlYWxfdWlkKCkgbm8gbG9uZ2VyIHdvcmtzIGluCitMaW51eC4g IEkgd29ya2VkIGFyb3VuZCB0aGlzIGluIHdob2FtaSgpIGJ5IHNldHRpbmcgcnVpZCB0byBnZXR1 aWQoKSBpZgorcmVhbF91aWQoKSByZXR1cm5lZCBhIG5lZ2F0aXZlIG51bWJlci4gIE1heWJlIGRh bmdlcm91cywgd29ycnkgYWJvdXQgaXQKK2xhdGVyLiAgY2t1ZmlvLmMsIDIzIEF1ZyAyMDA3Lgor CitBTllXQVkuLi4gYWZ0ZXIgZml4aW5nIHRoYXQsIEkgdGVzdGVkIHpzYiBvbiBMaW51eCwgYW5k IGl0J3MgYnJva2VuIHRoZXJlCit0b28sIHVzaW5nIG9wZW5wdHkoKSwgc28gaXQncyBub3RoaW5n IHRvIGRvIHdpdGggY2t1cHR5LmMuICBBZnRlciBzZW5kaW5nCit0aGUgZmlyc3QgWm1vZGVtIGRh dGEgcGFja2V0LCBpdCBqdXN0IGhhbmdzLCBub3RoaW5nIGNvbWVzIGJhY2suICBJbiB0ZXh0Citt b2RlIGl0IGdldHMgZmFydGhlciwgYnV0IHRoZW4gdGhlIHNhbWUgdGhpbmcgaGFwcGVucy4gIENh cHR1cmVkIHN0ZGVyciBmcm9tCityeiBvbiB0aGUgZmFyIGVuZDoKKworICBCeXRlcyByZWNlaXZl ZDogICAgIDYwOC8xMDAwMDAwICAgQlBTOjIxMTM3ICBFVEEgMDA6NDcgIFJldHJ5IDA6IEJhZCBD UkMKKyAgQnl0ZXMgcmVjZWl2ZWQ6ICAgICA4NjQvMTAwMDAwMCAgIEJQUzoyMzU0MCAgRVRBIDAw OjQyICBSZXRyeSAwOiBCYWQgQ1JDCisgIEJ5dGVzIHJlY2VpdmVkOiAgICAxMTIwLzEwMDAwMDAg ICBCUFM6MjUwMDMgIEVUQSAwMDozOSAgUmV0cnkgMDogQmFkIENSQworICBCeXRlcyByZWNlaXZl ZDogICAgNTY5Ni8xMDAwMDAwICAgQlBTOjU2OTg4ICBFVEEgMDA6MTcgIFJldHJ5IDA6IEJhZCBD UkMKKyAgQnl0ZXMgcmVjZWl2ZWQ6ICAgIDkxMjAvMTAwMDAwMCAgIEJQUzo2MjIyNyAgRVRBIDAw OjE1ICBSZXRyeSAwOiBCYWQgQ1JDCisgIEJ5dGVzIHJlY2VpdmVkOiAgICA5Mzc2LzEwMDAwMDAg ICBCUFM6NjA3NjYgIEVUQSAwMDoxNiAgUmV0cnkgMDogQmFkIENSQworICBCeXRlcyByZWNlaXZl ZDogICAgOTYzMi8xMDAwMDAwICAgQlBTOjYwMzYxICBFVEEgMDA6MTYgIFJldHJ5IDA6IEdvdCBU SU1FT1VUCisgIFJldHJ5IDA6IFNlbmRlciBDYW5jZWxlZAorICBSZXRyeSAwOiBHb3QgWkNBTgor CitUaGUgbG9jYWwgc3osIGhvd2V2ZXIsIGRvZXNuJ3QgZ2l2ZSBhbnkgZXJyb3IgbWVzc2FnZS4g IFpDQU4gbWVhbnM6ICJvdGhlcgorZW5kIGNhbmNlbGVkIHNlc3Npb24gYnkgc2VuZGluZyA1IF5Y J3MiIChvciB1c2VyIHR5cGVkIHRoZW0pLiAgV2hhdCBhY3R1YWxseQoraGFwcGVucyBpcyB0aGF0 IHR0cHR5Y21kKCkncyBzZWxlY3QoKSB0aW1lcyBvdXQgd2FpdGluZyBmb3Igc29tZXRoaW5nIGZy b20KK3RoZSBabW9kZW0gcGFydG5lciBhbmQgdHRwdHljbWQoKSBpdHNlbGYga2lsbHMgdGhlIHN6 IGZvcmsgd2l0aCBTSUdIVVAuCitXaGVuIGxzeiByZWNlaXZlcyBTSUdIVVAgaXQgc2VuZHMgdGhl IFpDQU4uICBTbyB0aGUgcmVhbCBwcm9ibGVtIGlzIHRoYXQKK2FmdGVyIHNvbWUgcG9pbnQgd2Un cmUgbm90IHJlY2VpdmluZyBhbnl0aGluZy4KKworSSBjaGFuZ2VkIHRoZSB0aW1lb3V0IGZyb20g NCBzZWNvbmRzIHRvIDMwIHNlY29uZHMgYW5kIG5vdyBJIHNlZSBpdCBqdXN0CitzdG9wcyBmb3Ig bG9uZyBwZXJpb2RzIG9mIHRpbWUgYW5kIHRoZW4gcmVzdW1lcy4gIFRoZSBscnogbG9nIG9uIHRo ZQorcmVjZWl2aW5nIGVuZCBzaG93cyB0b25zIG9mIHRpbW91dHMsIENSQyBlcnJvcnMsIGFuZCBv dGhlciBlcnJvcnMuICBUaGUKK2xvY2FsIGxvZyBzaG93cyB0aGF0IGxzeiB3b3VuZCB1cCBzZW5k aW5nIFpDQU4gKDIgeCAoMTAgeCBeSCwgMTAgeCBeWCkpLgorCitNb3Zpbmcgb24gdG8gYW5vdGhl ciBwcm9ibGVtLi4uICBUdXJucyBvdXQgQ3RybC1DIChTSUdJTlQpIGlzIHdvcmtpbmcgcmlnaHQK K2FmdGVyIGFsbC4gIFNpbmNlIEknbSB1c2luZyBteSB0ZXN0IHNjcmlwdHMgbGlrZSBrZXJiYW5n IHNjcmlwdHMsIEN0cmwtQworZXhpdHMgdGhyb3VnaCB0cmFwKCksIGFzIGl0IHNob3VsZCwgY2xv c2luZyB0aGUgY29ubmVjdGlvbiBhbmQgY2xlYW5pbmcgdXAuCitJZiBJIHN0YXJ0IEtlcm1pdCBh bmQgdGVsbCBpdCB0byBUQUtFIHRoZSBzY3JpcHQsIHRoZW4gQ3RybC1DIGJyaW5ncyBtZSBiYWNr Cit0byB0aGUgcHJvbXB0IHdpdGggdGhlIGNvbm5lY3Rpb24gc3RpbGwgb3BlbiAoYXMgaXQgc2hv dWxkKS4gIEhvd2V2ZXIsIHVudGlsCitub3cgSSBoYXZlbid0IGRvbmUgYW55dGhpbmcgYWJvdXQg dGhlIGZvcmsgb3IgdGhlIHB0eXMuICBBZGRlZCBjb2RlIHRvCit0cmFwKCkgdG8ga2lsbCB0aGUg Zm9yayBhbmQgY2xvc2UgdGhlIG1hc3RlciBwdHkuICBja3V1c3guYywgMjQgQXVnIDIwMDcuCisK K0FkZGVkIGNvZGUgdG8gdHJ5IHRvIGJyZWFrIHRoZSBkZWFkbG9jay4gIElmIHNlbGVjdCgpIHRp bWVzIG91dCwgYnV0IHdlIGhhdmUKK3N0dWZmIHRvIHdyaXRlIGVpdGhlciB0byB0aGUgcHR5IG9y IHRoZSBuZXQsIHRyeSB0byBkbyBpdCBhbnl3YXksIGV2ZW4KK3Rob3VnaCBzZWxlY3QoKSBkaWQg bm90IHNheSB3ZSBjb3VsZC4gIEJ1dCB0aGlzIGRvZXNuJ3QgaGVscCBiZWNhdXNlIHdoZW4KK3Nl bGVjdCgpIHRpbWVzIG91dCB3ZSBkb24ndCBoYXZlIGFueXRoaW5nIHRvIHdyaXRlLiAgVGhlIHBy b2JsZW0gaXMgdGhhdAorYWZ0ZXIgcmVjZWl2aW5nIHRoYXQgbGFzdCBwYWNrZXQgZnJvbSB0aGUg cmVtb3RlIHJ6LCB0aGUgbG9jYWwgbHN6IGRvZXNuJ3QKK3NlZW0gdG8gZG8gYW55dGhpbmcsIGFz IGlmIHRoZSBsb3dlciBmb3JrIHdhc24ndCBydW5uaW5nIChhbmQgdG8gY29uZmlybQordGhpcyBo eXBvdGhlc2lzLCBzb21ldGltZXMgSSBub3RpY2VkIHRoYXQgd2hlbiBJIEN0cmwtQydkIG91dCBv ZiB0aGlzLCB0aGUKK3RyYW5zZmVyIHdvdWxkIHRha2Ugb2ZmIGFnYWluKS4KKworQmFja2luZyB1 cCBhbmQgdGVzdGluZyB3aXRoIGdrZXJtaXQgcmF0aGVyIHRoYW4gem1vZGVtOgorCisga3N0IHJp cHBsZS50eHQgWzgyNEtdIE9LCisga3N0IGFzY2lpLnR4dCBbMTM1OUtdIE9LCisga3J0IHJpcHBs ZS50eHQgLS0gRkFJTEVECisKK0l0IHNlZW1zIHRoYXQgd2UgY2FuJ3QgaGFuZGxlIHN0cmVhbWlu Zy4gIElmIEkgc2V0IHVwIGtydCB0byBkaXNhYmxlCitzdHJlYW1pbmcgb24gcmVjZWlwdCwgaXQg d29ya3MgT0suCisKKyBrcnQgcmlwcGxlLnR4dCBbODI0S10gT0sKKyBrcmIgYWxsMi5iaW4gIFsx MDAwS10gT0sKKworU28gaGVyZSB3ZSBoYXZlIG5vIHRyb3VibGUgc2VuZGluZyBidXQgYmlnIHRy b3VibGUgcmVjZWl2aW5nIHVubGVzcyB3ZQorZGlzYWJsZSBzdHJlYW1pbmcuICBXaGVyZWFzIHdp dGggWm1vZGVtIHdlIGhhdmUgdHJvdWJsZSByZWNlaXZpbmcuCisKK0J1dCB0aGlzIHdhc24ndCBo YXBwZW5pbmcgYmVmb3JlLCB3aGF0IGNoYW5nZWQ/ICBVc2luZyBDLUtlcm1pdCBvbiB0aGUgZmFy CitlbmQgdG8gcmVjZWl2ZSB0aGUgZmlsZSB3aXRoIGRlYnVnIGxvZyBvbiwgSSBzZWUgdGhhdCBp dCBpcyBzZW5kaW5nIDRLIGRhdGEKK3BhY2tldCBhZnRlciA0SyBkYXRhIHBhY2tldCwgd2l0aCB0 aGUgbG9jYWwgZ2tlcm1pdCBzaWxlbnQsIGFzIGV4cGVjdGVkLgorQWJvdXQgbWlkd2F5IHRocm91 Z2ggdGhlIHRyYW5zZmVyLCB0aGUgbG9jYWwgS2VybWl0IHNlbmRzIGFuIGVycm9yIHBhY2tldAor IlRyYW5zbWlzc2lvbiBlcnJvciBvbiByZWxpYWJsZSBsaW5rIi4gIExvb2tpbmcgYXQgRy1LZXJt aXQncyBkZWJ1ZyBsb2cuLi4KK0l0IHJlY2VpdmVzIHRoZSBmaXJzdCBmaXZlIDRLIGRhdGEgcGFj a2V0cyBPSywgYnV0IGdldHMgYSBDUkMgZXJyb3Igb24gdGhlCitmaWZ0aCBvbmUsIGFuZCBzZW5k cyB0aGUgRXJyb3IgcGFja2V0LiAgU28gaXQgaGFzIHJlY2VpdmVkIGEgc3RyZWFtIG9mCisyMC1z b21lIHRob3VzYW5kIGJ5dGVzIE9LIGFuZCB0aGVuIG1lc3NlcyB1cC4gIFRoYXQgbnVtYmVyIHNv dW5kcyBhIGxvdCBsaWtlCit0dHB0eWNtZCgpJ3MgYnVmZmVyIHNpemUuICBJIGNoYW5nZWQgdGhl IGJ1ZmZlciBzaXplcyB0byBiZSBkaWZmZXJlbnQ6CisKKyAgUmVhZCBmcm9tIHB0eSBhbmQgd3Jp dGUgdG8gbmV0OiA0SyAgCisgIFJlYWQgZnJvbSBuZXQgYW5kIHdyaXRlIHRvIHB0eTogMUsKKwor VGhpcyB0aW1lIGl0IHJlY2VpdmVkIHRoZSBmaXJzdCA0SyBwYWNrZXQgYW5kIGZhaWxlZCBvbiB0 aGUgc2Vjb25kIG9uZS4KK1RoZW4gSSBpbmNyZWFzZWQgdGhlIGJ1ZmZlcnMgdG8gOThLIGVhY2gs IGV4cGVjdGluZyB0byByZWNlaXZlIGxvdHMgbW9yZQorcGFja2V0cyBzdWNjZXNzZnVsbHkgYnV0 IGl0IGJvbWJlZCBvdXQgb24gdGhlIDV0aCBvbmUuICBCdXQgdGhhdCdzIGdvb2QsIGl0Citjb25m aXJtcyB0aGVyZSdzIG5vIGxvZ2ljIGVycm9yIGluIHRoZSBidWZmZXIgbWFuYWdlbWVudC4gIEp1 c3QgdG8gbWFrZQorc3VyZSwgdGhvdWdoLCBsZXQncyBzZXQgdGhlIGJ1ZmZlciBzaXplIHNtYWxs ZXIgdGhhbiB0aGUgcGFja2V0IHNpemUgYW5kCitkaXNhYmxlIHN0cmVhbWluZy4gIEluIHRoaXMg Y2FzZSB3ZSBnZXQgNCBnb29kIGRhdGEgcGFja2V0cyBhbmQgYSBDUkMgZXJyb3IKK29uIHRoZSA1 dGggb25lIGFuZCBzbyB3ZSByZXF1ZXN0IHJldHJhbnNtaXNzaW9uLCBhbmQgdGhlIG5leHQgOCB0 aW1lcyBpdAorYXJyaXZlcyBpdCBnZXRzIGEgZGlmZmVyZW50IENSQyBlcnJvciwgYnV0IHRoZSA5 dGggY29weSBpcyBPSy4gIFRoZW4gdGhlCituZXh0IHBhY2tldCBjb21lcyBhbmQgaXQgZ2V0cyBh IENSQyBlcnJvciBldmVyeSB0aW1lLiAgQW5kIHRoaXMgaXMgbm90aGluZworYnV0IHBsYWluIEFT Q0lJIHRleHQuCisKK1N3aXRjaGluZyB0byByZW1vdGUgbW9kZToKKworICBSRU1PVEU9MSBrayBr c3QKKworKGFmdGVyIHRyaWNraW5nIG15c2VsZiBiZWNhdXNlIGl0IHdhcyB1c2luZyB0dHJ1bmNt ZCgpIGZvciB0aGlzLi4uKSBJIHNlZQordGhhdCBub3RoaW5nIHdvcmtzIGF0IGFsbC4gIFdoYXQg ZGlkIEkgYnJlYWs/ICAyNCBBdWcgMjAwNy4KKworRml4ZWQgdHRwdHljbWQoKSB0byByZXN0b3Jl IGNvbnNvbGUgbW9kZXMgYWZ0ZXIgYSByZW1vdGUtbW9kZSB0cmFuc2Zlci4KK2NrdXRpby5jLCAy NSBBdWcgMjAwNy4KKworTm90aWNlZCB0aGF0IGVycm9yIGNvZGVzIGxpa2UgRVNSQ0ggYXJlIG5v dCBhdmFpbGFibGUgaW4gYWxsIG1vZHVsZXMuCitUaGF0J3MgYmVjYXVzZSBvZiBzb21lIGNvbXBs aWNhdGVkIGluICNpZmRlZnMgaW4gY2tjZGViLmggdGhhdCB3aW5kIHVwIG5vdAorYWx3YXlzICNp bmNsdWRpbmcgPGVycm5vLmg+LiAgQnV0IEkgbm90aWNlIHRoYXQgY2t1dGlvLmMgaW5jbHVkZXMg aXQKK3VuY29uZGl0aW9uYWxseSB3aXRoIG5vIGlsbCBlZmZlY3RzLCBhbmQgc28gZG9lcyBja3Zm aW8uYy4gIERvZXMgYW55IHZlcnNpb24KK29mIFVuaXggYXQgYWxsIG5vdCBoYXZlIDxlcnJuby5o Pj8gIEFkZGVkIGEgY2F0Y2gtYWxsIGNsYXVzZSB0byBja2NkZWIuaCB0bworI2luY2x1ZGUgPGVy cm5vLmg+IChpbiBVTklYIG9ubHkpIGlmLCBhZnRlciB0aGUgb3RoZXIgY2xhdXNlcywgRVNSQ0gg d2FzCitzdGlsbCBub3QgZGVmaW5lZC4gIGNrY2RlYi5oLCAyNSBBdWcgMjAwNy4KKworTm93IGJh Y2sgdG8gZGVidWdnaW5nIHR0cHR5Y21kKCkuLi4gIFJlbW90ZS1tb2RlIHRyYW5zZmVycyB3aXRo IHR0cHR5Y21kKCkKK3dlcmUgYnJva2VuIGluIHR3byBwbGFjZXMsIG1heWJlIGFzIGxvbmcgYXMg MiB3ZWVrcyBhZ28gKHRoaXMgd291bGQgaGF2ZQorYWZmZWN0ZWQgbm9uLW5ldHdvcmsgdHJhbnNm ZXJzIHRvbywgd2hpY2ggSSBjYW4ndCB0ZXN0IGFueSBtb3JlKS4KK1RoZSBsb2dpYyB3YXMgbWlz c2luZyBpbiBhIGNvdXBsZSBwbGFjZXMgZm9yIHRoZSBub24tbmV0d29yayBhbmQvb3IKK25vbi1U ZWxuZXQgYW5kL29yIG5vbi1lbmNyeXB0aW5nIGNvbm5lY3Rpb25zIChpZiBzdGF0ZW1lbnRzIHdp dGggbm8gZWxzZQorcGFydHMpLiAgRml4ZWQgaW4gY2t1dGlvLmMsIDI1IEF1ZyAyMDA3LgorCitU ZXN0aW5nIHJlbW90ZSBtb2RlOgorCisga3N0IE9LICAgenN0IE9LCisga3NiIE9LICAgenNiIE9L Cisga3J0IE9LICAgenJ0IE9LCisga3JiIE9LICAgenJiIE9LCisKK0Z1bmN0aW9uYWxseSBpdCBh bGwgd29ya3MgYnV0IHRoZXJlIGFyZSBoaXRjaGVzIHdpdGggWm1vZGVtIGFzIGFsd2F5cy4KK1do ZW4gc2VuZGluZyB0byBLOTU6CisKKyAuIElmIEkgc2VuZCB3aXRoIGxzeiwgdGhlcmUgYXJlIGh1 bmRyZWRzIG9mICJTdWJwYWNrZXQgdG9vIGxvbmciIGVycm9ycywKKyAgIGFuZCB0aGUgdHJhbnNm ZXIgaXMgdmVyeSBzbG93LCBidXQgaXQgc3VjY2VlZHMuCisKKyAuIElmIEkgc2VuZCB3aXRoIHRo ZSAxOTk0IE9tZW4gdmVyc2lvbiBvZiBzeiwgdHJhbnNtaXNzaW9uIGlzIGluc3RhbnRhbmVvdXMK KyAgIGFuZCB3aXRob3V0IGVycm9ycywgYnV0IHRoZW4gaXQgaGFuZ3MgYXQgdGhlIGVuZC4KKwor IC4gSWYgSSBieXBhc3MgQy1LZXJtaXQgYW5kIHNlbmQgZGlyZWN0IGZyb20gbHN6IG9yIHN6LCBi b3RoIHdvcmsgZmluZS4KKworU28gY2xlYXJseSB0aGUgcHR5cyBhcmUgZ2V0dGluZyBpbiB0aGUg d2F5LiAgVGhlIGhhbmdpbmcgYXQgdGhlIGVuZCB3b3VsZCBiZQorY2F1c2VkIGJ5IHRoZSBzeiBw cm9jZXNzIGNsb3NpbmcgYmVmb3JlIGl0cyBsYXN0IG91dHB1dCByZWFjaGVkIHRoZSBtYXN0ZXIK K3B0eS4gIEl0IHdvdWxkIG5lZWQgdG8gZG8gc29tZSBmb3JtIG9mIGZsdXNoaW5nIGFuZC9vciBw YXVzaW5nIGF0IHRoZSBlbmQKK2J1dCB0aGVyZSdzIG5vdGhpbmcgSSBjYW4gZG8gYWJvdXQgdGhh dDsgdGhlc2UgcHJvZ3JhbXMgd2VyZSBub3QgZGVzaWduZWQgdG8KK2JlIHVzZWQgaW4gdGhpcyB3 YXkuICBBbnl3YXksIGl0IG9ubHkgc2VlbXMgdG8gaGFwcGVuIHdpdGggZmlsZXMgbG9uZ2VyIHRo YW4KKzEwMEsuCisKK0ZvciBsb2NhbCBtb2RlLCB0ZXN0aW5nIGluIFNvbGFyaXMgb3ZlciBvdXIg S2VyYmVyb3MgNSBjb25uZWN0aW9uIGFnYWluOgorCisgZ2tlcm1pdCAgbHJ6c3oKKyBrc3QgT0sg ICB6c3QgRkFJTAorIGtzYiBPSyAgIHpzYiBGQUlMCisga3J0IE9LICAgenJ0IE9LIGJ1dCB3aXRo IGVycm9ycworIGtyYiBPSyAgIHpyYiBGQUlMCisKK0lmIEkgdXNlIE9tZW4gcnpzeiBhcyB0aGUg ZXh0ZXJuYWwgcHJvdG9jb2wgKGUuZy4gd2l0aCB6c3QpLCBpdCBibG9ja3MKK3JlZGlyZWN0aW9u IGFuZCBpdCBzZW5kcyB0aGUgZmlsZSB0byBteSB0ZXJtaW5hbCwgcmF0aGVyIHRoYW4gb3ZlciB0 aGUKK2Nvbm5lY3Rpb24uICBUaGlzIHdvdWxkIHByb2JhYmx5IGJlIGJlY2F1c2UgaXQgZmluZHMg b3V0IHRoZSBkZXZpY2UgbmFtZSBvZgordGhlIGpvYidzIGNvbnRyb2xsaW5nIHRlcm1pbmFsIGFu ZCBvcGVucyBpdCwgdG8gcHJldmVudCByZWRpcmVjdGlvbi4gIFRoaXMKK2lzIGhhcmQgdG8gcHJl dmVudCBpbiBTb2xhcmlzIGJlY2F1c2UgdGhlcmUgaXMgbm8gVElPQ1NUVFkgaW9jdGwoKS4KK1N1 cHBvc2VkbHkgdGhlIHNhbWUgdGhpbmcgaXMgYWNjb21wbGlzaGVkIGJ5IGNsb3NpbmcgYW5kIHJl b3BlbmluZyB0aGUgc2xhdmUKK3B0eSBhZnRlciBkb2luZyBzZXRzaWQoKS4gIEkgYWRkZWQgY29k ZSB0byBkbyB0aGlzLCBidXQgaXQgbWFkZSBubworZGlmZmVyZW5jZS4gIChJZiBJIHVzZSBsc3og aW5zdGVhZCBvZiBzeiwgaXQgaXMgaW5kZWVkIHJlZGlyZWN0ZWQsIGJ1dCBqYW1zCit1cCBhZnRl ciBhYm91dCAxNUsuKSAgY2t1cHR5LmMsIDI3IEF1ZyAyMDA3LgorCitPbiBNYWMgT1MgWCB3aXRo IHN6IDMuNzMgMS0zMC0wMywgaG93ZXZlciwgdGhlIHJlZGlyZWN0aW9uIHdvcmtzLCBzbyBJCith c3N1bWUgaXQgd291bGQgYWxzbyB3b3JrIGluIExpbnV4LCBGcmVlQlNELCBOZXRCU0QsIGV0Yywg dG9vLiAgRG9pbmcgdGhlCitmdWxsIHRlc3Qgc3VpdGUgb24gTWFjIE9TIFg6CisKKyBna2VybWl0 ICAgbHJ6c3ogICAgICAgICAgcnpzegorICBrc3QgT0sgICB6c3QgRkFJTCAoMSkgICAgT0sKKyAg a3NiIE9LICAgenNiIEZBSUwgKDIpICAgIE9LCisgIGtydCBPSyAgIHpydCBPSyAgICgzKSAgICBP SyBmb3IgMTAwSyBmaWxlLCBmYWlscyBmb3IgbG9uZ2VyLgorICBrcmIgT0sgICB6cmIgRkFJTCAo NCkgICAgT0sgKDFNQiBhbGwtYnl0ZXMgdGVzdCBwYXR0ZXJuKQorCisoMSkgNjRLIGZpbGUgT0sg ZXZlcnkgdGltZTsgMTAwSyBmaWxlIGZhaWxzIGV2ZXJ5IHRpbWUuCisoMikgMTBLIGZpbGUgZmFp bHMgZXZlcnkgdGltZS4KKygzKSBTdWNjZWVkcyB3aXRoIDgwMEsgZmlsZSBidXQgZ2V0cyBhIGZl dyByZWNvdmVyYWJsZSBlcnJvcnMuCisoNCkgU3VjY2VlZHMgd2l0aCA0OEsgYmluYXJ5IGZpbGUg d2l0aCBzb21lIGVycm9ycywgZmFpbHMgd2l0aCBsb25nZXIgb25lcy4KKworU28gYWN0dWFsbHkg aXQgbG9va3MgcHJldHR5IGdvb2QsIGl0J3MganVzdCB0aGF0IGxyenN6IG1lc3NlcyB1cC4gIFdo ZW4KK3NlbmRpbmcgd2l0aCBsc3ogaWYgSSBpbmNsdWRlIC1MIDUxMiBpdCBzZW5kcyB0aGUgMTAw SyB0ZXN0IGZpbGUgd2l0aCBubworZXJyb3JzLCBidXQgc3RpbGwgY2hva2VzIG9uIGxvbmdlciBv bmVzLgorCitUZXN0aW5nIG9uIE1hYyBPUyBYIGFnYWluLCBidXQgdGhpcyB0aW1lIG92ZXIgYSBj bGVhci10ZXh0IFRlbG5ldCBjb25uZWN0aW9uOgorCisgZ2tlcm1pdCAgICAgICAgbHJ6c3ogICAg cnpzegorICBrc3QgT0sgICB6c3QgIEZBSUwoMSkgICBPSworICBrc2IgT0sgICB6c2IgIEZBSUwo MikgICBPSworICBrcnQgT0sgICB6cnQgIE9LKDMpICAgICBPSworICBrcmIgT0sgICB6cmIgIEZB SUwoNCkgICBPSyAKKworKDEpIEFsbW9zdCB3b3JrZWQsIGZpbmlzaGVkIDc3N0sgb3V0IG9mIDgy NEsgd2l0aG91dCBlcnJvcnMuCisoMikgR290IHRvbnMgb2YgZXJyb3JzLCBmYWlsZWQgaW4gZmly c3QgMzBLIG91dCBvZiAxMDAwSy4KKygzKSBPSyBmb3IgMTAwSyBmaWxlIGJ1dCBmYWlscyBmb3Ig bGFyZ2VyLgorKDQpIE9LIGZvciA0OEsgYmluYXJ5IGZhaWwgYnV0IGZhaWxzIGZvciBsYXJnZXIu CisKK01heWJlIHNlZSBpZiB3ZSBjYW4gZG8gd2l0aG91dCB0aGUgT1BFTlBUWSBwYXJ0LgorCitU T01PUlJPVyAtLSBqdXN0IGNsZWFuIHVwIHRoZSBjb2RlLCBhZGQgc29tZSBTRVQgLyBTSE9XIC8g SEVMUCBjb21tYW5kcywKK2RvY3VtZW50IGl0LCBhbmQgbW92ZSBvbi4KKworTm90ZTogSW4gSzk1 LCBTRVQgV0lORE9XIHNldHMgdGhlIFptb2RlbSBwYWNrZXQgbGVuZ3RoLCAzMiAtIDEwMjQsIG11 bHRpcGxlCitvZiA2NC4KKworU0VFIH4vODAvZXh0ZXJuYWwudHh0CisKK0NoYW5nZWQgZnRwIHBv cnQgZnJvbSBpbnQgdG8gdW5zaWduZWQgaW50LiAgY2tjZnRwLmMsIDMwIEF1ZyAyMDA3LgorCitU cmllZCBhZ2FpbiB0byBidWlsZCBLUkI0L0tSQjUvU1NML1RMUyB2ZXJzaW9uIGZvciBTb2xhcmlz IDkuICBIYWQgdG8gdXBkYXRlCit0aGUgYnVpbGQgcHJvY2VkdXJlIGFnYWluLCBvZiBjb3Vyc2Us IGJlY2F1c2Ugb2YgbmV3IGZpbGUgYW5kIGRpcmVjdG9yeQorbmFtZXMsIGJ1dCByYW4gaW50byBw cm9ibGVtcyBhbnl3YXkgYmVjYXVzZSB0aGUKK2N1LXNvbGFyaXM5ZytrcmI1K2tyYjQrb3BlbnNz bCtzaGFkb3crcGFtK3psaWIgdGFyZ2V0IHdhcyBjYWxsaW5nIGFub3RoZXIKK3RhcmdldCB0aGF0 IGRpZCBub3Qga25vdyBhYm91dCB0aGUgaGFyZHdpcmVkIHBhdGhuYW1lcy4gIEludGVncmF0ZWQg dGhlIHR3bwordGFyZ2V0cyBhbmQgdHJpZWQgYnVpbGRpbmcgYWdhaW4uICBJdCBhY3R1YWxseSBj b21waWxlZCBvayAoYnV0IHdpdGggbG90cyBvZgord2FybmluZ3MgZnJvbSB0aGUgc2VjdXJpdHkg bW9kdWxlcyksIGJ1dCBmYWlsZWQgYXQgbGluayB0aW1lIHdpdGgKK2tyYjVfaW5pdF9ldHMgbm90 IGZvdW5kOyBmaXhlZCB0aGF0IHdpdGggYW4gI2lmZGVmIE5PX0tSQjVfSU5JVF9FVFMsIG5vdyBp dAorYnVpbGRzIE9LIGJ1dCB3aXRob3V0IHRoZSBmdHAgY2xpZW50LiAgVHJpZWQgYnVpbGRpbmcg aXQgV0lUSCB0aGUgRlRQIGFuZAordGhhdCB3YXMgT0sgdG9vLCBubyBjaGFuZ2VzIG5lZWRlZCBl eGNlcHQgdG8gdGhlIGJ1aWxkIHByb2NlZHVyZS4gIDEyIEZlYgorMjAwOCwgdGhhdCBpczogQy1L ZXJtaXQgOC4wLjIxMiA6IDIwMDgwMjEyLgorCitUcmllZCB0byBidWlsZCB3aXRoIC1EQ0tfU1JQ IGFuZCAtbHNycCBidXQ6CisKKyAgaGFzaF9zdXBwb3J0ZWQgICAgICAgICAgICAgICAgICAgICAg Y2tjZnRwLm8KKyAgaGFzaF9nZXRkZXNjYnluYW1lICAgICAgICAgICAgICAgICAgY2tjZnRwLm8K KyAgaGFzaF9nZXRkZXNjYnlpZCAgICAgICAgICAgICAgICAgICAgY2tjZnRwLm8KKyAgY2lwaGVy X2dldGRlc2NieW5hbWUgICAgICAgICAgICAgICAgY2tjZnRwLm8KKyAga3J5cHRvX2RlbGV0ZSAg ICAgICAgICAgICAgICAgICAgICAgY2tjZnRwLm8KKyAga3J5cHRvX25ldyAgICAgICAgICAgICAg ICAgICAgICAgICAgY2tjZnRwLm8KKyAgY2lwaGVyX3N1cHBvcnRlZCAgICAgICAgICAgICAgICAg ICAgY2tjZnRwLm8KKyAga3J5cHRvX21zZ19wcml2ICAgICAgICAgICAgICAgICAgICAgY2tjZnRw Lm8KKyAga3J5cHRvX21zZ19zYWZlICAgICAgICAgICAgICAgICAgICAgY2tjZnRwLm8KKyAgaGFz aF9nZXRsaXN0ICAgICAgICAgICAgICAgICAgICAgICAgY2tjZnRwLm8KKyAgY2lwaGVyX2dldGxp c3QgICAgICAgICAgICAgICAgICAgICAgY2tjZnRwLm8KKyAgY2lwaGVyX2dldGRlc2NieWlkICAg ICAgICAgICAgICAgICAgY2tjZnRwLm8KKworU2VudCBtYWlsIHRvIFRvbSBXdSBhbmQgYmFja2Vk IG9mZiBmb3Igbm93LiAgbWFrZWZpbGUsIDE0IEZlYiAyMDA4LgorKFRvbSBXdSBuZXZlciBhbnN3 ZXJlZDsgc2VlbXMgbGlrZSBTUlAgaXMgZGVmdW5jdC4pCisKK1RoZSAiLmJsYWggPSB4eHgiIGZv cm0gb2YgdmFyaWFibGUgYXNzaWdubWVudCBvbmx5IHdvcmtlZCBmb3IgdmFyaWFibGVzCituYW1l cyBvZiBsZW5ndGggMjIgb3IgbGVzcywgbm90aWNlZCBhbmQgZml4ZWQgYnkgV29sZnJhbSBTYW5n LiAgY2t1Y21kLmMsCis1IE1hciAyMDA4LgorCitJbiAic2V0IGhvc3QgL3B0eSBzc2ggLi4uIiBj b25uZWN0aW9ucywgdGhlIElOUFVUIGNvbW1hbmQgc3VkZGVubHkgc3RvcHBlZAord29ya2luZy4g IFRoaXMgaXMgaW4gU29sYXJpcyA5LiAgSXQgaGFwcGVucyB3aXRoIGFsbCA4LjAuKiB2ZXJzaW9u cyBvZgorQy1LZXJtaXQsIHNvIGl0J3Mgbm90aGluZyB0byBkbyB3aXRoIHR0cHR5Y21kKCkuICBB ZGRlZCBzb21lIGRlYnVnKCkKK3N0YXRlbWVudHMgYnV0IHRoZXkgZG9uJ3Qgc2hvdyBhbnl0aGlu Zy4gIFR1cm5zIG91dCB0aGVyZSB3YXNuJ3QgYSBwcm9ibGVtCithZnRlciBhbGwuICBXZWQgTWFy IDI2IDE2OjA0OjUzIDIwMDgKKworQ2hhbmdlZCBjbWlmaSgpIHRvIG5vdCBwcmludCAiP05vIGZp bGVzIG1hdGNoIiAob3Igd2hhdGV2ZXIpIGlmIFNFVCBRVUlFVCBPTi4KK2NrdWNtZC5jLCAyNiBN YXIgMjAwOC4KKworQWRkZWQgXHYocmVtb3RlaXApIGZvciB0aGUgSVAgYWRkcmVzcyBvZiB0aGUg aG9zdCB3ZSdyZSBjb25uZWN0ZWQgdG8sCithbmQgXHYoaW5tZXNzYWdlKSBmb3IgSU5QVVQgc3Rh dHVzIG1lc3NhZ2VzIGNvcnJlc3BvbmRpbmcgdG8gXHYoaW5zdGF0dXMpLgorY2t1dXNyLmgsIGNr Y21haS5jLCBja3V1c1syNF0uYywgMjYgTWFyIDIwMDguCisKK01hZGUgXGZrZXl3b3JkdmFsKCkg c3RyaXAgYnJhY2VzL3F1b3RlcyBmcm9tIHRoZSByaWdodC1oYW5kIHNpZGUgc28gd2UgY2FuCito YW5kbGUgdGhpbmdzIGxpa2U6CisKKyAgcGFzc3dvcmQ9InN0cmluZ3dpdGhzcGFjZWF0ZW5kICIK KworY2t1dXM0LmMsIDYgQXVnIDIwMDguCisKK0FkZGVkIGludmlzaWJsZSBQVVRFTlYgY29tbWFu ZCBmb3IgVU5JWCBvbmx5LiAgVmFsdWUgc2hvdWxkIG5vdCBiZSBlbmNsb3NlZAoraW4gZG91Ymxl cXVvdGVzLiAgUmVxdWlyZXMgbGdlIFx2KGJ1aWxkaWQpIDIwMDgwODI2LiAgY2t1dXNyLltjaF0s IDI2IEF1ZyAyMDA4LgorCitBZGRlZCBTRVQgVkFSSUFCTEUtRVZBTFVBVElPTiB7IFJFQ1VSU0lW RSwgU0lNUExFIH0uICBUaGlzIGlzIGhpZ2hseQorZXhwZXJpbWVudGFsLCBidXQgYWxzbyBoaWdo bHkgZGVzaXJhYmxlIGlmIGl0IHdvcmtzIG91dC4gIFNJTVBMRSBpbmhpYml0cwordGhlIGRlZmF1 bHQgcmVjdXJzaXZlIG1ldGhvZCBvZiBldmFsdWF0aW5nIFwleCBhbmQgXCZ4W10gdmFyaWFibGVz LCB3aGljaAoraXMsIHF1aXRlIGZyYW5rbHksIG51dHMgYW5kIG1ha2VzIHByb2dyYW1taW5nIGlu IEtlcm1pdCBhdCBiZXN0Citjb3VudGVyaW50dWl0aXZlLiAgSSBtYWRlIGFuIGV4Y2VwdGlvbiBp biB0aGUgY2FzZSBvZiBhcnJheSBzdWJzY3JpcHRzLAorYmVjYXVzZSBjaGFuZ2luZyBob3cgdGhl eSBhcmUgZXZhbHVhdGVkIGNvdWxkIGJyZWFrIGEgbG90IG9mIHNjcmlwdHMsIGFuZAorYW55d2F5 IHRoZXJlIHNob3VsZCBuZXZlciBiZSBhbnkgaGFybSBpbiBldmFsdWF0aW5nIHRoZW0gcmVjdXJz aXZlbHkgYmVjYXVzZQordGhlaXIgZmluYWwgdmFsdWUgaXMgYWx3YXlzIChvciBzaG91bGQgYmUp IG51bWVyaWMsIG5vdCBzb21lIHN0cmluZyB0aGF0CittaWdodCBjb250YWluIGJhY2tzbGFzaGVz LiAgVGhlIFNFVCBWQVIgc2V0dGluZyBpcyBvbiB0aGUgc3RhY2ssIGp1c3QgbGlrZQorU0VUIFFV SUVUIChpdCBmb2xsb3dzIHRoZSBxdWlldC94cXVpZXQgY29kZSBpbiBja3V1c1szNTZdLmMpLCBz byBtYWNyb3Mgb3IKK2NvbW1hbmQgZmlsZXMgdGhhdCBjaGFuZ2UgaXQgY2FuJ3QgYnJlYWsgdGhl IHNjcmlwdCB0aGF0IGludm9rZXMgdGhlbS4KK0FkZGVkIFxmcmVjdXJzZSgpIHRvIGZvcmNlIHJl Y3Vyc2l2ZSBldmFsdWF0aW9uIG9mIGEgXCV4IG9yIFwmeFtdIHZhcmlhYmxlCityZWdhcmRsZXNz IG9mIHRoZSBWQVJJQUJMRS1FVkFMVUFUSU9OIHNldHRpbmcuICBBZGRlZCBcdih2YXJldmFsKSB0 byBhbGxvdworcHJvZ3JhbW1hdGljIHNldHRpbmcgdG8gY3VycmVudCBzZXR0aW5nLiAgVGVzdGVk IG9uIFNvbGFyaXMgOSBidXQgc2hvdWxkIGJlCit0b3RhbGx5IHBvcnRhYmxlLiAgY2t1dXNyLltj aF0sIGNrdXVzWzM1Nl0uYywgMTEgU2VwIDIwMDguCisKK0Zyb20gR++/vW50ZXIgS25hdWY6IDY0 LWJpdCBidWlsZHMgd2VyZSBmYWlsaW5nIG9uIFN1U0UgTGludXggYmVjYXVzZQorbGlicmVzb2x2 IGFuZCBsaWJjcnlwdCB3ZXJlIGluIGxpYjY0IHJhdGhlciB0aGFuIGxpYjsgdXBkYXRlZCB0aGUg dGVzdHMgaW4KK3RoZSBsaW51eCBtYWtlZmlsZSB0YXJnZXQgdG8gZmluZCB0aGVtLiAgbWFrZWZp bGUsIDEyIEphbiAyMDA5LgorCitUcmllZCBidWlsZGluZyBvbiBSZWQgSGF0IEVudGVycHJpc2Ug TGludXggU2VydmVyIHJlbGVhc2UgNS4zIDY0LWJpdC4KK1RoZXJlIGlzIG5vIGN1cnNlcyBvciBu Y3Vyc2VzLiAgIm1ha2UgbGludXhuYyIgY29tcGlsZWQgT0sgYnV0IGNvbGxhcHNlZCBhdAorbGlu ayB0aW1lIGxvb2tpbmcgZm9yIGNyeXB0KCksIHJlc19zZWFyY2goKSwgYW5kIGRuX2V4cGFuZCgp LiAgVHVybmVkIG91dAordGhlIGxpbnV4bmMgKGFuZCBsaW51eGMpIHRhcmdldHMgbmVlZGVkIHRo ZSBzYW1lIHRyZWF0bWVudCBhcyB0aGUgTGludXggb25lCitmb3IgNjQtYml0IExpbnV4ZXMuICBt YWtlZmlsZSwgMyBNYXIgMjAwOS4KKworQ29uc29saWRhdGVkIHRoZSBsaW51eCB0YXJnZXRzIHNv IHdlIG5vIGxvbmdlciBuZWVkIHRocmVlIHNlcGFyYXRlIG9uZXMgZm9yCitjdXJzZXMsIG5jdXJz ZXMsIGFuZCBubyBjdXJzZXMuICAibWFrZSBsaW51eCIgd29ya3Mgb2sgb24gY29tcHV0ZXJzIHdp dGggYW5kCit3aXRob3V0IChuKWN1cnNlcy4gICJtYWtlIGxpbnV4K3NzbCIsIGRpdHRvLiAgImxp bnV4K2tyYjUrc3NsIGJ1aWxkcyBPSyBidXQKK25lZWRzIC1ETk9fS1JCNV9JTklUX0VUUyIuICBN YWtlZmlsZSwgMyBNYXIgMjAwOS4KKworRml4ZWQgY29weXJpZ2h0IGRhdGUgYW5ub3VuY2VkIGlu IGhlcmFsZCwgY2t1dXM1LmMsIDMgTWFyIDIwMDkuCisKK1BhdGNoIGZyb20gU2V0aCBUaGVyaWF1 bHQgdG8gYXZvaWQgZGVwcmVjYXRpb24gd2FybmluZyBmb3IgdXRtcCByZWZlcmVuY2VzCitpbiBj a3VmaW8uYyBpbiBNYWMgT1MgWCAxMC41IChsYXRlciwgdGhpcyBiZWNhbWUgYSBjb25zb2xpZGF0 ZWQgbWFrZWZpbGUKK3RhcmdldCB0aGF0IHdvcmtzIGF1dG9tYXRpY2FsbHkgZm9yIGF0IGxlYXN0 IE1hYyBPUyBYIDEwLjMuOSB0aHJvdWdoCisxMC41LjYpLiAgbWFrZWZpbGUsIGNrdWZpby5jLCAy OCBBcHJpbCAyMDA5LgorCit6c2hjbWQoKSAodGhlIGZ1bmN0aW9uIHVzZWQgYnkgUlVOIGFuZCAh IHRvIHJ1biBleHRlcm5hbCBjb21tYW5kcykgd2FzIG5vdAorZmFsbGluZyBiYWNrIGFzIGV4cGVj dGVkIGluIExpbnV4IFJIRUw0LzUgaWYgU0hFTEwgd2FzIG5vdCBkZWZpbmVkIGluIHRoZQorZW52 aXJvbm1lbnQuICBBbHNvIGluIGFsbCBVbml4IHZlcnNpb25zLCB0aGVyZSB3YXMgbm8gaW5kaWNh dGlvbiBpZiBhIFJVTi8hCitjb21tYW5kIGZhaWxlZCAob3RoZXIgdGhhbiB0aGUgcmV0dXJuIGNv ZGUpIGJlY2F1c2UgdGhlIHNwZWNpZmllZCBzaGVsbAorZGlkbid0IGV4aXN0IG9yIHdhcyBub3Qg ZXhlY3V0YWJsZSAoZS5nLiB0aGUgU0hFTEwgZW52aXJvbm1lbnQgdmFyaWFibGUgd2FzCittaXNk ZWZpbmVkKS4gIE5vdyBpdCBwcmludHMgdGhlIG5hbWUgb2YgdGhlIG9mZmVuZGluZyBzaGVsbCBh bmQgdGhlIHJlYXNvbgoraXQgY291bGRuJ3QgYmUgZXhlY3V0ZWQgKE5vdCBmb3VuZCwgUGVybWlz c2lvbiBkZW5pZWQsIGV0YykuICBja3VmaW8uYywKKzI4IEFwcmlsIDIwMDkuCisKK1RoZXJlIGlz IG5vIGVhc3kgd2F5IHRvIGdldCB0aGUgbGFzdCBmaWVsZCBvZiBzdHJpbmc7IGZvciBleGFtcGxl LCB0aGUKK2V4dGVuc2lvbiBmcm9tIGEgZmlsZW5hbWUsIHdoaWNoIG1pZ2h0IGhhdmUgYW55IG51 bWJlciBvZiBmaWVsZHMuICBJbgorZ2VuZXJhbCB3ZSB3YW50IHRvIGJlIGFibGUgdG8gZ2V0ICJ3 b3JkIG51bWJlciBuIiBjb3VudGluZyBmcm9tIHRoZSByaWdodDsKK1xmd29yZCgpIGxhY2tzIHRo aXMgYWJpbGl0eS4gIE5vdyBpZiB5b3UgZ2l2ZSBpdCBhIG5lZ2F0aXZlIHdvcmQgbnVtYmVyLAor dGhhdCBzYXlzIHRvIGNvdW50IGZyb20gdGhlIHJpZ2h0OyBmb3IgZXhhbXBsZSBcZndvcmQob25l IHR3byB0aHJlZSBmb3VyCitmaXZlLCAtMikgcmV0dXJucyAiZm91ciIuICBja2NsaWIuYywgY2t1 dXNyLmMsIDE0IE1heSAyMDA5LgorCitGaXhlZCBhIHR5cG8gaW4gdGhlIGFpeDUxK29wZW5zc2wg KFNTTExJQlMgc2hvdWxkIGhhdmUgYmVlbiBTU0xMSUIpLgorRnJvbSBKYXNvbiBMZWhyLiAgbWFr ZWZpbGUsIDI3IE1heSAyMDA5LgorCitVcGRhdGVkIHRoZSBsaW51eCtvcGVuc3NsK3psaWIrc2hh ZG93K3BhbSB0YXJnZXQgdG8gY2hhaW4gdG8gdGhlIG5ldyBtYWluCitMaW51eCB0YXJnZXQuICBB IGJ1bmNoIG9mIG90aGVyIG9uZXMgcmVtYWluIHVuLXVwZGF0ZWQuIG1ha2VmaWxlLCAxMiBKdW4g MjAwOS4KKworVXBkYXRlcyB0byB0aGUgbmV3IE1hYyBPUyBYIDEwLjUgdGFyZ2V0IGZyb20gU2V0 aCBUaGVyaWF1bHQgKHdoaWNoIGlzCitzdXBwb3NlZCB0byB3b3JrIG9uIGFsbCBNYWMgT1MgMTAt cG9pbnQtYW55dGhpbmcpIHRvIGF2b2lkIHdhcm5pbmdzCit0aGF0IGNhbWUgdXAgb24gb24gTWFj IE9TIDEwLjQuMTEvSW50ZWwuICBPbmNlIHRoaXMgb25lIGlzIHByb3ZlbiB3ZSBzaG91bGQKK2Jl IGFibGUgdG8gcmVtb3ZlL2NvbnNvbGlkYXRlIGxvdHMgb2Ygb3RoZXIgb25lcy4gIG1ha2VmaWxl LCAxMiBKdW4gMjAwOS4KKworQy1LZXJtaXQgZGlzYWJsZXMgU1NMIHdpdGggdGhlIG1lc3NhZ2Ug Ij9PcGVuU1NMIGxpYnJhcmllcyBkbyBub3QgbWF0Y2gKK3JlcXVpcmVkIHZlcnNpb24uIiBpZiB0 aGUgdmVyc2lvbiBvZiBPcGVuU1NMIHRoYXQgS2VybWl0IHdhcyBidWlsdCB3aXRoIGlzCitub3Qg ZXhhY3RseSB0aGUgc2FtZSBhcyB0aGUgdmVyc2lvbiB0aGF0IGlzIGxvYWRlZCBkeW5hbWljYWxs eSBhdCBydW50aW1lLgorVGhpcyBpcyBhY3R1YWxseSB0aGUgcHJvcGVyIGJlaGF2aW9yLCBzaW5j ZSBBUElzIGFyZSBub3QgZ3VhcmFudGVlZCBub3QgdG8KK2NoYW5nZSBiZXR3ZWVuIE9wZW5TU0wg dmVyc2lvbnMgcHJpb3IgdG8gMS4wLjAuICBNYWRlIHRoZSBlcnJvciBtZXNzYWdlIG1vcmUKK2lu Zm9ybWF0aXZlLiAgY2tfc3NsLmMsIDI2IEF1ZyAyMDA5LCBhbmQgYWdhaW4gMjggQXVnIDIwMDku CisKK0FJWCA2LjEgaXMgb3V0LCBpdCBpcyByZWFsbHkganVzdCBhIG5ldyBuYW1lIGZvciBBSVgg NS40LiAgQWRkZWQgbWFrZWZpbGUKK3RhcmdldHMsIHBsdXMgZm9yIHRoZSBmaXJzdCBJIG1hZGUg QUlYIDQuMiBhbmQgbGF0ZXIgZmlndXJlIG91dCBpdHMgdmVyc2lvbgorbnVtYmVyIGluIHRoZSBt YWtlZmlsZSB0YXJnZXQgc28gd2UgZG9uJ3QgaGF2ZSB0byBrZWVwIGFkZGluZyBuZXcgLURBSVhu bgorc2VjdGlvbnMgdG8gdGhlIGNvZGUsIGFuZCBhbHNvIGdldCBpdHMgaGFyZHdhcmUgbmFtZSAo ZS5nLiAicG93ZXJwYyIpIGZyb20KK3VuYW1lIGF0IG1ha2UgdGltZSwgcmF0aGVyIHRoYW4gaGFy ZHdpcmluZyAicnM2MDAwIiBhcyBJIGRpZCBiZWZvcmUuCitDb25zb2xpZGF0ZWQgYWxsIEFJWCA0 LjIgYW5kIGxhdGVyIHRhcmdldHMgc28gbm93IGp1c3QgIm1ha2UgYWl4IiBvciAibWFrZQorYWl4 K3NzbCIgY2FuIGJlIHVzZWQuICBFeGNlcHQgbm90IHRoZSBnY2Mgb25lcyBhcyB0aGV5IGhhdmUg c29tZSBxdWlya3Mgc28KK0knZCByYXRoZXIgbm90IGRpc3R1cmIgdGhlbS4gIFRlc3RlZCB0aGlz IG9uIEFJWCA1LjMuCittYWtlZmlsZSwgMjggQXVnIDIwMDkuCisKK0Zyb20gS2luamFsIFNoYWgs IGEgY29ycmVjdGlvbiB0byB0aGUgTGludXggbWFrZWZpbGUgZW50cnkgdGhhdCBhbGxvd3MgaXQK K2ZpbmQgdGhlIDY0LWJpdCBjdXJzZXMgb3IgbmN1cnNlcyBsaWJyYXJ5LiAgbWFrZWZpbGUsIDI5 IEF1ZyAyMDA5LgorCitSZW5hbWVkIGFpeDRbMjNdOiB0byBvbGRhaXg0WzIzXTogaW4gbWFrZWZp bGUgdG8gZml4IHRoZSB3YXJuaW5nIG1lc3NhZ2VzCitJIGRpZG4ndCBub3RpY2UgYmVmb3JlLiAg SSBkaWRuJ3Qgd2FudCB0byByZW1vdmUgdGhlbSBiZWNhdXNlIHRoZXkgaGF2ZQorc29tZSBzcGVj aWFsIHRoaW5ncyB0aGF0IG1pZ2h0IHN0aWxsIGJlIG5lZWRlZCwgaWYgYW55Ym9keSBzdGlsbCBo YXMgdGhlc2UgCitBSVggdmVyc2lvbnMuICBtYWtlZmlsZSwgMjkgQXVnIDIwMDkuCisKK0J1aWx0 IG9uIFJIRUwgNS4zIDY0LWJpdCwgcmVndWxhciBhbmQgd2l0aCBPcGVuU1NMIDAuOS44ZS4gIDMx IEF1ZyAyMDA5LgorCitCdWlsdCBvbiBOZXRCU0QgNS4wLjEvaTM4NiwgcmVndWxhciBhbmQgd2l0 aCBPcGVuU1NMIDAuOS45LWRldiwgMSBTZXAgMjAwOS4KKworQ2hhbmdlZCBTU0wgbWVzc2FnZSB0 byBtZW50aW9uIExEX0xJQlJBUllfUEFUSCAoU29sYXJpcyksIFNITElCX1BBVEggKEhQLVVYKSwK K0xJQlBBVEggKEFJWCksIG9yIExEX0xJQlJBUllfUEFUSCAoTGludXgpLiAgY2tfc3NsLmMsIDMg U2VwIDIwMDkKKworTm90aWNlZCB0aGF0ICJtYWtlIGxpbnV4K29wZW5zc2wiIGZhaWxzIHRvIGlu Y2x1ZGUgLWx1dGlsIGEgbGluayB0aW1lLCB3aGljaAoraXQgbmVlZHMgZm9yIG9wZW5wdHkoKS4g IFRoYXQncyBiZWNhdXNlIHRoaXMgdGFyZ2V0IGlzIG9ic29sZXRlLiAgSSByZW5hbWVkCitpdCB0 byBiZSBvbGRsaW51eCtvcGVuc3NsIGFuZCBhZGRlZCBsaW51eCtvcGVuc3NsIGFzIGEgc3lub255 bSBmb3IKK2xpbnV4K3NzbC4gIG1ha2VmaWxlLCAzIFNlcCAyMDA5LgorCitUZXN0ZWQgbGludXgr b3BlbnNzbCt6bGliK3NoYWRvdytwYW0sIGl0J3MgT0suICBBbHNvIGxpbnV4K2tyYjUuICBBbHNv CitsaW51eCtrcmI1K3NzbC4gIG1ha2VmaWxlLCAzIFNlcCAyMDA5LgorCitUcmllZCBidWlsZGlu ZyBvbiBTb2xhcmlzIDkgd2l0aCBPcGVuU1NMIDAuOS44ayB3aXRoCitzb2xhcmlzOWcrb3BlbnNz bCtzaGFkb3crcGFtK3psaWIsIGl0IGZhaWxlZCBsaWtlIHNvOgorCisgIGNrX3NzbC5jOjI4NzU6 IGVycm9yOiBjb25mbGljdGluZyB0eXBlcyBmb3IgJ2luZXRfYXRvbicKKyAgL3Vzci9pbmNsdWRl L2FycGEvaW5ldC5oOjUyOiBwcmV2aW91cyBkZWNsYXJhdGlvbiBvZiAnaW5ldF9hdG9uJyB3YXMg aGVyZQorICBtYWtlWzJdOiBbY2tfc3NsLm9dIEVycm9yIDEKKyAgbWFrZVsyXTogTGVhdmluZyBk aXJlY3RvcnkgaG10L3Npcml1czEvcHJ2MC9rZC9mZGMvc29sYXJpczlzc2wnCisgIG1ha2VbMV06 IFtzb2xhcmlzMnhnK29wZW5zc2wremxpYitwYW0rc2hhZG93XSBFcnJvciAyCisgIG1ha2VbMV06 IExlYXZpbmcgZGlyZWN0b3J5IGhtdC9zaXJpdXMxL3BydjAva2QvZmRjL3NvbGFyaXM5c3NsJwor ICBtYWtlOiBbc29sYXJpczlnK29wZW5zc2wrc2hhZG93K3BhbSt6bGliXSBFcnJvciAyCisKK1Ro ZSBwcm9ibGVtIHdhcyBjYXVzZWQgYnkgaW5jbHVkaW5nIGFuIGluZXRfYXRvbigpIGZ1bmN0aW9u IGNrX3NzbC5jIGZvcgordGhlIGJlbmVmaXQgb2YgcGxhdGZvcm1zIHRoYXQgZG9uJ3QgaGF2ZSBv bmUgaW4gdGhlaXIgbGlicmFyaWVzLiAgVGhpcyBpcworZGVmZWF0ZWQgYnkgaW5jbHVkaW5nIE5P X0RDTF9JTkVUX0FUT04gaW4gS0ZMQUdTLiAgSSBhZGRlZCB0aGlzLCBidXQgdGhlbgorSSB0aG91 Z2h0IGl0IHdvdWxkIGJlIGEgZ29vZCBpZGVhIHRvIGF1dG9tYXRpY2FsbHkgc2Vuc2UgdGhlIE9w ZW5TU0wKK3ZlcnNpb24gc28gd2UgY2FuIGF1dG9tYXRpY2FsbHkgc2V0IE9QRU5TU0xfMDk3IG9y IE9QRU5TU0xfMDk4IHJhdGhlciB0aGFuCitib21iaW5nIG91dCwgc28gSSBhZGRlZCBjb2RlIHRv IGRvIHRoYXQgdG9vLCBhbmQgYWxzbyB0byBzZXQgdGhlIFNvbGFyaXMKK3ZlcnNpb24gbnVtYmVy OiA5LCAxMCwgb3IgMTEuICBUaGUgbmV3IGVudHJ5IGlzIHNvbGFyaXM5ZytvcGVuc3NsLgorY2tj ZGViLmgsIG1ha2VmaWxlLCAzIFNlcCAyMDA5LgorCitGaXhlZCBhIGNvbXBsYWludCBpbiBja3Vm aW8uYyBhYm91dCBpbXBsaWNpdCBkZWNsYXJhdGlvbiBvZiBpbml0Z3JvdXBzLgorY2t1ZmlvLmMs IDQgU2VwIDIwMDkuCisKK0J1aWx0IG9uIFNvbGFyaXMgMTAgd2l0aCBnY2MgYW5kIFN1biBDQyB1 c2luZyBuZXcgc29sYXJpc3s5LDEwLDExfSB0YXJnZXQKK3RoYXQgaXMgbGlrZSB0aGUgbmV3IHNv bGFyaXN7OSwxMCwxMX1nIG9uZSBidXQgd2l0aG91dCB0aGUgZ2NjaXNtcy4KK21ha2VmaWxlLCA0 IFNlcCAyMDA5LgorCitDaGFuZ2VkIHNvbGFyaXN7OSwxMCwxMX1nK3NzbCB0YXJnZXQgdG8gc2V0 IG9ubHkgdGhlIFNTTC1zcGVjaWZpYyB0aGluZ3MgYW5kCit0aGVuIGNoYWluIHRvIHRoZSBtYWlu IHNvbGFyaXN7OSwxMCwxMX1nIHRhcmdldC4gIFRlc3RlZCBPSyBvbiBTb2xhcmlzIDkgYW5kCisx MC4gIG1ha2VmaWxlLCA0IFNlcCAyMDA5LgorCitDcmVhdGVkIHNvbGFyaXN7OSwxMCwxMX0rc3Ns IHRhcmdldCB0aGF0IGlzIGV4YWN0bHkgbGlrZSB0aGUKK3NvbGFyaXN7OSwxMCwxMX1nK3NzbCBl eGNlcHQgaXQgY2hhaW5zIHRvIHRoZSBzb2xhcmlzezksMTAsMTF9IHRhcmdldAoraW5zdGVhZCBv ZiB0aGUgc29sYXJpc3s5LDEwLDExfWcgb25lLiAgVGhhdCBpcywgaXQgYnVpbGRzIGFuIFNTTCB2 ZXJzaW9uIG9mCitDLUtlcm1pdCB1c2luZyBTdW4gQ0MgcmF0aGVyIHRoYW4gZ2NjLiAgbWFrZWZp bGUsIDQgU2VwIDIwMDkuCisKK1RyaWVkIGJ1aWxkaW5nIG9uIEhQLVVYIDEwLjIwLCBidW5kbGVk IChub24tQU5TSSkgY29tcGlsZXIgKCJtYWtlCitocHV4MTAwMCIpLiAgVGhpcyBmYWlsZWQgdW50 aWwgSToKKworIC4gTW92ZWQgYSBzdHJ1Y3QgaW5pdGlhbGl6YXRpb24gb3V0IG9mIHNldGV4dGVy bigpLCBja3V1czMuYy4KKyAuIFJlbW92ZWQgYW4gQU5TSWlzbSBmcm9tIHRoZSBkZWNsYXJhdGlv biBvZiBzaWdjaGxkX2hhbmRsZXIoKSBpbiBja3V0aW8uYworIC4gQWRkZWQgYSBjYXN0IHRvIHN0 cmNtcCgpIGluIHp2dXNlcigpLCBja3VmaW8uYy4KKworQnVpbGRzIE9LIG5vdy4gIEJ1aWx0IE9L IHdpdGggImhwdXgxMDAwbyIgKHRoZSBBTlNJIGNvbXBpbGVyKSB0b28uCitBbmQgd2l0aCAiaHB1 eDEwMDBnY2MiLiAgQ291bGRuJ3QgdGVzdCAiaHB1eDEwMDBvK29wZW5zc2wiLiAgMjEgU2VwIDIw MDkuCisKK1RoZSBTb255IFBsYXlzdGF0aW9uIDIgYW5kIDMgYXJlIDY0LWJpdCBQb3dlclBDIHBs YXRmb3JtcyB0aGF0IGNhbiBydW4gTGludXgKK2lmIGl0IGlzIGluc3RhbGxlZCBhcyBhbiAib3Ro ZXIgT1MiIG9uIGl0cyBoYXJkIGRpc2s7IGFuZCB0aGUgTGludXgga2VybmVsCitzaW5jZSAyLjYu MjEgc3VwcG9ydHMgdGhlIFBTMyB3aXRob3V0IGFueSBwYXRjaGluZyByZXF1aXJlZC4gIFBhd2Vs IFJvZ29jegorcmVwb3J0ZWQgdGhhdCAibWFrZSBsaW51eHBwYyIgKG9uZSBvZiB0aGUgb2xkIHRh cmdldHMgdGhhdCBoYXMgbm90IHlldCBiZWVuCitpbnRlZ3JhdGVkIGludG8gdGhlIG1haW4gImxp bnV4IiB0YXJnZXQpIGNvbXBpbGVzIE9LIG9uIDIuNi4yOS15ZGw2MS4zCisoWWVsbG93IERvZyBM aW51eCByZWxlYXNlIDYuMiAnUHl4aXMnKSwgYnV0IGZhaWxzIGF0IGxpbmsgdGltZSBiZWNhdXNl Cisnb3BlbnB0eScgaXNuJ3QgZm91bmQsIGJlY2F1c2UgLWx1dGlsIHdhcyBub3QgaW5jbHVkZWQs IGJlY2F1c2UgdGhhdCBwYXJ0Cit3YXMgYWRkZWQgb25seSB0byB0aGUgbWFpbiBsaW51eCB0YXJn ZXQuICBJIGFza2VkIGhpbSB0byB0cnkgIm1ha2UgbGludXgiCithbmQgaGUgc2VudCBiYWNrIGEg dHJhbnNjcmlwdCBpbiB3aGljaCB0aGVyZSB3ZXJlIHRob3VzYW5kcyBvZiBlcnJvcnMgZnJvbQor dGhlIGN1cnNlcyBjb2RlIGNrdXVzeC5jLiAgTGF0ZXIgSSB0cmllZCBpdCBteXNlbGYgYW5kIGl0 IGJ1aWx0IHdpdGhvdXQgYQoraGl0Y2guICBNeSB0aGVvcnkgaXMgdGhhdCBiZXR3ZWVuIHRoZW4g YW5kIG5vdywgYSBtaXNzaW5nIHBpZWNlIG9mIHRoZQorbmN1cnNlcyBsaWJyYXJ5ICgvdXNyL2lu Y2x1ZGUvbmN1cnNlc3cpIHdhcyBpbnN0YWxsZWQuICAyMSBTZXAgMjAwOS4KKworSFAtVVggOS4w NSBvbiBQQS1SSVNDIDkwMDAvNzEyIGJ1aWxkaW5nIHdpdGggaHB1eDA5MDAgKGJ1bmRsZWQgY29t cGlsZXIpOgorIC4gY2t1dGlvLmMgY29tcGlsYXRpb24gZmFpbGVkIHdpdGggUEVORElOIGFuZCBG TFVTSE8gbm90IGRlZmluZWQgaW4KKyAgIHB0eV9tYWtlX3JhdygpLiAgSSBkdW1taWVkIGRlZmlu aXRpb25zIGZvciB0aGVtIHRvIGhhbmRsZSB0aGlzIHNpdHVhdGlvbgorICAgb24gdGhpcyBvciBh bnkgb3RoZXIgcGxhdGZvcm0gd2hlcmUgaXQgbWlnaHQgY3JvcCB1cC4KKyAgIGNrdXRpby5jLCAy NCBTZXAgMjAwOS4KKyAuIERpdHRvIGZvciB0aGUgUFRZIG1vZHVsZSwgKyBJTUFYQkVMLiAgY2t1 cHR5LmMsIDI0IFNlcCAyMDA5LgorIC4gUmVmZXJlbmNlcyB0byBlbmR1c2Vyc2hlbGwoKSB3ZXJl IGZhdGFsIGluIHRoZSBidW5kbGVkIGNvbXBpbGVyLiAgQ2hhbmdlZAorICAgdGhlIGhwdXgwOTAw IHRhcmdldCB0byBkZWZpbmUgTk9EQ0xFTkRVU0VSU0hFTEwsIGFuZCBwdXQgYSBzcGVjaWFsIGNh c2UKKyAgIGluIGNrdWZpby5jIHRvIG5vdCBwdXQgYSBjYXN0IGluIGZyb250IG9mIHRoZSBjYWxs IGlmIE5PRENMRU5EVVNFUlNIRUxMCisgICBpcyBkZWZpbmVkLiAgTm93IGl0IGJ1aWxkcyBhbmQg bGlua3MgT0suICBtYWtlZmlsZSwgY2t1ZmlvLmMsIDI0IFNlcCAyMDA5LgorCitIUC1VWCA5LjA1 IG9uIFBBLVJJU0MgOTAwMC83MTIgYnVpbGRpbmcgd2l0aCBocHV4MDkwMG8gKG9wdGltaXppbmcg Y29tcGlsZXIpOgorIC4gV2FybmluZ3MgaW4gY2t1dGlvLmMgYXQgbGluZSAxNDg2MCBhYm91dCBh cmd1bWVudHMgdG8gc2VsZWN0IChwb2ludGVycworICAgYXJlIG5vdCBhc3NpZ25tZW50LWNvbXBh dGlibGUpLiAgIm1hbiBzZWxlY3QiIHNheXMgYXJndW1lbnRzIGFyZSBpbnRzLgorICAgRGVmaW5p bmcgSU5UU0VMRUNUIGZpeGVzIHRoZXNlIHdhcm5pbmdzIGJ1dCByZXN1bHRzIGluIGZhdGFsIGVy cm9ycyBsYXRlcgorICAgYXJvdW5kIGxpbmUgMTQ4ODEgYW5kIG90aGVycyBpbiB0aGUgYXJlYSBp bnZvbHZpbmcgRkRfU0VULiAgVGhpcyB3YXMgdG9vCisgICBpbnZvbHZlZCBzbyBJIHB1dCBpdCBi YWNrIGFzIGl0IHdhcy4gIDI0IFNlcCAyMDA5LgorCitCdWlsdCBPSyBvbiBTb2xhcmlzIDEwIHdp dGggU3VuIENDLiAgQSBjb3VwbGUgd2FybmluZ3MgYWJvdXQgaW1wbGljaXQKK2Z1bmN0aW9uIGRl Y2xhcmF0aW9ucyBmb3IgY3Vyc2VzIHJvdXRpbmVzIGJlY2F1c2UgYXBwYXJlbnRseSB0aGV5IGFy ZW4ndAorZGVjbGFyZWQgaW4gY3Vyc2VzLmguICBUdWZmLiAgMjUgU2VwIDIwMDkuCisKK1RyaWVk IGJ1aWxkaW5nIG9uIFNvbGFyaXMgMTAgd2l0aCBTdW4gQ0MgYW5kIE9wZW5TU0wgMC45LjhrLCBh bmQgdGhpcwordW5jb3ZlcmVkIHZhcmlvdXMgbG9vc2UgZW5kcyBpbiB0aGUgc29sYXJpczkrb3Bl bnNzbCB0YXJnZXQsIHdoaWNoIEkgZml4ZWQuCittYWtlZmlsZSwgMjUgU2VwIDIwMDUuCisKK0Zp eGVkIGZvdXIgdHlwb3MgaW4gcHJpbnRmcyBpbiBja19zc2wuYywgXCUgaW5zdGVhZCBvZiBqdXN0 ICUuICAyNSBTZXAgMjAwOS4KKworU3F1ZWxjaGVkIDIwLXNvbWUgY29tcGxhaW50cyBhYm91dCBh IGNoYXJhY3RlciBhcnJheSBiZWluZyByZWZlcnJlZCB0bworZGlyZWN0bHkgaW5zdGVhZCBvZiBi eSBhIHBvaW50ZXIsIHBsdXMgc2V2ZXJhbCBvdGhlciBzaW1pbGFyIG5pdHMgdG8gZ2V0IHJpZAor b2YgYWxsIHRoZSBjb21waWxhdGlvbiB3YXJuaW5ncyBvbiBTb2xhcmlzIDEwIHdpdGggU3VuIEMg NS44IFBhdGNoIDEyMTAxNS0wNgorMjAwNy8xMC8wMy4gIGNrY3RlbC5jLCBja2N0ZWwuaCwgMjUg U2VwIDIwMDkuCisKK0J1aWx0IHRoZSByZXN1bHQgb24gdGhlIHNhbWUgU29sYXJpcyAxMCBzeXN0 ZW0gd2l0aCBnY2MgNC4yLjQgdXNpbmcgdGhlCituZXcgc29sYXJpMTBnK29wZW5zc2wgdGFyZ2V0 LCB3b3JraW5nIG91dCBhIGZldyBraW5rcyBoZXJlIHRvby4KK21ha2VmaWxlLCAyNSBTZXAgMjAw OS4KKworTWFkZSBjb25zb2xpZGF0ZWQgU29sYXJpcyA5LzEwLzExIDY0LWJpdCB0YXJnZXRzIGZv ciBnY2MsIHNvbGFyaXM5ZzY0LAorc29sYXJpczEwZzY0LCBzb2xhcmlzMTFnNjQsIHRlc3RlZCBv biBTb2xhcmlzIDEwIFNwYXJjLiBtYWtlZmlsZSwgMjUgU2VwIDIwMDkuCisKK01hZGUgY29uc29s aWRhdGVkIFNvbGFyaXMgOS8xMC8xMSA2NC1iaXQgdGFyZ2V0cyBmb3IgU3VuIGNjOiBzb2xhcmlz OV82NCwKK3NvbGFyaXMxMF82NCwgc29sYXJpczExXzY0LiAgVGhlc2Ugc2ltcGx5IHNldCBhIGNv dXBsZSBmbGFncyBhbmQgY2hhaW4gdG8KK3RoZSBtYWluIHNvbGFyaXM5IHRhcmdldC4gIG1ha2Vm aWxlLCAyNSBTZXAgMjAwOS4KKworUmVtb3ZlZCBhIGJ1bmNoIG9mIG9sZCBzdXBlcmZsdW91cyBT b2xhcmlzIDkgYW5kIDEwIHRhcmdldHM6IG9sZHNvbGFyaXM5LAorb2xkc29sYXJpczlsZnMsIHNv bGFyaXM5ZzY0IHNvbGFyaXM5Z182NCwgb2xkc29sYXJpczEwIG9sZCBzb2xhcmlzMTBsZnMsCitv bGRzb2xhcmlzMTArb3BlbnNzbCwgb2xkc29sYXJpczEwZytvcGVuc3NsLCBzb2xhcmlzMTBfNjQs IG9sZHNvbGFyaXMxMGcsCitzb2xhcmlzMTBnXzY0LCBzb2xhcmlzMTBnNjQuICBUaGVyZSBhcmUg c3RpbGwgcGxlbnR5IG1vcmUgdG8gcHJ1bmUgYnV0IGl0J3MKK2Egc3RhcnQuICBtYWtlZmlsZSwg MjUgU2VwIDIwMDkuCisKK0FkZGVkIG9yIGZpeGVkIHNvbWUgbWlzc2luZyBwcm90b3R5cGVzIGlu IGNrY3RlbC5oOgorZndkeF9zZW5kX3hhdXRoX3RvX3hzZXJ2ZXIoKSwgZndkeF9wYXJzZV9kaXNw bGF5bmFtZS4gIDI1IFNlcCAyMDA5LgorCitJbXByb3ZlZCB0aGUgaW5zdHJ1Y3Rpb25zIGZvciBi dWlsZGluZyBzZWN1cmUgdmVyc2lvbnMgaW4gdGhlIG1ha2VmaWxlLAordXNpbmcgdGhpcyBleGFt cGxlOgorCisgIG1ha2Ugc29sYXJpczkrb3BlbnNzbCAiU1NMSU5DPS1JL29wdC9vcGVuc3NsLTAu OS44ay9pbmNsdWRlIiBcCisgICAiU1NMTElCPS1ML29wdC9vcGVuc3NsLTAuOS44ay9saWIiCisK K21ha2VmaWxlLCBodHRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9zZWN1cml0eS5odG1sLCAyNSBT ZXAgMjAwOS4KKworQnVpbHQgb24gSFAtVVggMTEuMTEsIDI2IFNlcCAyMDA5OgorIC4gbWFrZSBo cHV4MTEwMCAob2spCisgLiBtYWtlIGhwdXgxMTAwZ2NjIChvaykKKyAuIG1ha2UgaHB1eDExMDBv IChnZXRzIGEgbG90IG9mIHdhcm5pbmdzIGFib3V0IHNlbmRwYXRoIGFuZCBzZW5kZmlsZSwKKyAg ICBiZWNhdXNlIHRoZXkgYXJlIGFsc28gZGVjbGFyZWQgaW4gPHN5cy9zb2NrZXQuaD4sIGJ1dCBi dWlsZHMgT0spCisgLiBtYWtlIGhwdXgxMDAwZ2NjK29wZW5zc2wgXAorICAgIFNTTElOQz0tSS9v cHQvb3BlbnNzbC9pbmNsdWRlIFNTTExJQj0tTC9vcHQvb3BlbnNzbC9saWIKKworTm90ZTogc2Vu ZHBhdGggYW5kIHNlbmRmaWxlIGFyZSBub3QgS2VybWl0IHN5bWJvbHMuICBUaGUgd2FybmluZ3Mg YXJlIGNvbWluZworZnJvbSBzb2NrZXQuaDogJ1JlZGVjbGFyYXRpb24gb2YgInNlbmRmaWxlIiB3 aXRoIGEgZGlmZmVyZW50IHN0b3JhZ2UgY2xhc3MKK3NwZWNpZmllcicuICBUaGlzIGlzIG5vdGhp bmcgbmV3OyBzZWUgbm90ZXMgb2YgMi00IEphbiAyMDA1LgorCitGcm9tIFBldGVyIEVpY2hob3Ju OgorIC4gVXBkYXRlIHRvIG1ha2VmaWxlIHRvIG1ha2UgY3VycmVudCBjb2RlIGJ1aWxkIE9LIG9u IEhQLVVYIDguMDAuCisgLiBDaGFuZ2VzIHRvIGZvcm1hdCBvZiBzb21lIGhpbnRzIHRvIG1ha2Ug dGhlbSBtb3JlIGNvcHktYW5kLXBhc3RhYmxlLgorbWFrZWZpbGUsIGNrdXU1LmMsIDI4IFNlcCAy MDA5LgorCitGcm9tIFBldGVyIEVpY2hob3JuOiBDaGFuZ2VzIHRvIEhQLVVYIDcuMCB0YXJnZXQg dG8gaW5jcmVhc2UgdGhlIHN3aXRjaCB0YWJsZQorc3RhY2sgc2l6ZSwgd2hpY2ggd2FzIG92ZXJm bG93aW5nLiAgbWFrZWZpbGUsIDMwIFNlcCAyMDA5CisKK0hQLVVYIDYuNSAoMTk4OSksICJtYWtl IGhwdXgwNjUwdGNwYyIuLi4gKDg6MTkuLi4pICBOZWVkZWQgdG8gbm90IGluY2x1ZGUKK2FycGEv aW5ldC5oICh3aGljaCBkb2Vzbid0IGV4aXN0KSBhbmQgbm90IHVzZSBob3N0IGFkZHJlc3MgbGlz dHMgKGFkZAorLUROT0hBRERSTElTVCksIHdoaWNoIGdldHMgdXMgcGFzdCBja2NuZXQuYywgYnV0 IGluIGNrY2Z0cC5jIHdlIGJvbWIgb3V0IG9uCitGRF9TRVRTSVpFIHVuZGVmaW5lZC4gIFNvbWVo b3cgd2Ugd29ya2VkIGFyb3VuZCB0aGlzIGluIGNrY25ldC5jLiAgUGF0Y2hlZAoraW4gYSBkZWZp bml0aW9uIGluIGNrY2Z0cC5jLCBhbmQgYWxzbyBhZGRlZCAtRElOVFNFTEVDVCB0byBjb21waWxl ciBmbGFncy4KK0NvbXBpbGVzIG9rLCBib21icyBhdCBsaW5rIHRpbWUgb24gYmNvcHksIGJ6ZXJv LCBGRF9aRVJPLCBGRF9TRVQsIEZEX0lTU0VULgorTm93IGl0IGNvbXBpbGVzIGFuZCBsaW5rcyBP SyBidXQgZHVtcHMgY29yZSB3aGVuIHN0YXJ0ZWQuICBBZGRlZAorLUROT0NLR0VURlFIT1NULCBy ZWJ1aWx0IGZyb20gc2NyYXRjaCAodGFrZXMgMzUgbWludXRlcykuICBJdCBzdGFydHMgT0ssIGJ1 dAoraXQgZHVtcHMgY29yZSB3aGVuIGdpdmVuIGEgInRlbG5ldCB4eHgiIGNvbW1hbmQsIHdoZXJl IHh4eCBpcyBhIGhvc3RuYW1lLgorSG93ZXZlciwgaXQgd29ya3MgT0sgaWYgYW4gSVAgYWRkcmVz cyBpcyB1c2VkOiAidGVsbmV0IDEyMy40NS42Ljc4Ii4gIEl0Cit0b29rIGFsbCBkYXkgdG8gdHJh Y2sgdGhpcyBkb3duLCBidXQgbm93IGl0J3MgZml4ZWQgKHNlZSB0aGUgI2lmZGVmIEhQVVg2Citz ZWN0aW9ucyBvZiBja2NuZXQuYykuICBTbyBub3cgKGZvciB0aGUgZmlyc3QgdGltZSwgSSB0aGlu aykgd2UgaGF2ZSBib3RoCit0ZWxuZXQgYW5kIGZ0cCBpbiBIUC1VWCA2LngsIGlmIGFueW9uZSBj YXJlcy4gIGNrY25ldC5bY2hdLCBja2NmdHAuYywKK21ha2VmaWxlLCAyIE9jdCAyMDA5LgorCitD aGFuZ2VkIGRlZmF1bHQgU0VUIFRFUk1JTkFMIFRZUEUgdHlwZSBmb3IgSzk1IGZyb20gdnQzMjAg dG8gdnQyMjAuICBUaGlzIGlzCitiZWNhdXNlIFVuaXggT1MncyBzdWNoIGFzIFNvbGFyaXMgaGF2 ZSBkcm9wcGVkIHZ0MzIwIGFzIGEgdGVybWluYWwgdHlwZS4KK3NldHRybXR5cCgpLCBja3V1czcu YywgNSBPY3QgMjAwOS4KKworSSBtb3ZlZCB0aGUgUFVURU5WIGNvbW1hbmQgY29kZSwgd2hpY2gg d2FzIGlubGluZSwgdG8gYSBmdW5jdGlvbiwgZG9wdXRlbnYoKS4KK2NrdXVzW3I3XS5jLCBja3V1 c3IuaCwgNSBPY3QgMjAwOS4KKworQ2hhbmdlZCB0aGUgVU5JWCB2ZXJzaW9uIG9mIFNFVCBURVJN SU5BTCBUWVBFIHRvIHRha2UgYSB2YWx1ZSBhbmQgdGhlbiBkbwordGhlIGVxdWl2YWxlbnQgb2Yg ImV4cG9ydCBURVJNPXZhbHVlIiBieSBjYWxsaW5nIGRvcHV0ZW52KCkuICBUaGlzIHNldHMKK1wk KFRFUk0pIGNvcnJlY3RseSBhbmQgcGFzc2VzIGl0cyB2YWx1ZSBhbG9uZyB0byBpbmZlcmlvciBw cm9jZXNzZXMuCitIb3dldmVyLCB0byBtYWtlIHRoaXMgdGFrZSBlZmZlY3Qgd2l0aGluIEtlcm1p dCBpdHNlbGYgKGZvciB0aGUgZnVsbHNjcmVlbgorZmlsZSB0cmFuc2ZlciBkaXNwbGF5IGFuZCBm b3IgdGhlIFNDUkVFTiBjb21tYW5kLCBDdHJsLUwsIGV0YykgSSBhbHNvIGhhZCB0bworcmVpbml0 aWFsaXplIHRoZSBjdXJzZXMgZGF0YWJhc2UsIHdoaWNoIGlzIHRyaWNreSBiZWNhdXNlIG5vcm1h bGx5IGlmIHlvdQorZmVlZCBpdCBhbiB1bmtub3duIHRlcm1pbmFsIG5hbWUsIGl0IGp1c3QgZXhp dHMuICBja3V1czcuYywgNSBPY3QgMjAwOS4KKworQ2hhbmdlZCB0aGUgbGl0dGxlLWtub3duIGFu ZCBsaXR0bGUtdXNlZCBSRVNFVCBjb21tYW5kICh3aGljaCBjbG9zZXMgYWxsCitvcGVuIGZpbGVz KSB0byBhbHNvIHB1dCBjb21tYW5kIGVjaG9pbmcgYmFjayB0byBub3JtYWwgaW4gY2FzZSBpdCBn b3QKK21lc3NlZCB1cCBzb21laG93IChhcyBpbiBIUC1VWCA2LjUsIHVwb24gcmV0dXJuaW5nIGZy b20gUFVTSCkuCitja3V1c3guYywgNSBPY3QgMjAwOS4KKworRm9yIFVuaXgsIGluY3JlYXNlZCBz dHJpbmcgYnVmZmVyIHNpemVzIGZvciB3aWxkY2FyZCBleHBhbnNpb24gZm9yIGFsbAorcGxhdGZv cm1zIHRoYXQgaGF2ZSBCSUdCVUZPSyBkZWZpbmVkIGZyb20gNTAwMDAwICgwLjVNKSB0byAxMDAw MDAwMCAoMTBNKQorYnl0ZXMsIGFuZCBmb3IgNjQtYml0IGJ1aWxkcyB0byAyMDAwMDAwMDAwICgy RykgYnl0ZXMuICBObyBwb2ludCBtYWtpbmcKK2l0IGJpZ2dlciB0aGFuIHRoYXQgYmVjYXVzZSBt YWxsb2MncyBhcmd1bWVudCBpcyBhIHNpemVfdCwgd2hpY2ggaXMgYW4gaW50LgorY2t1ZmlvLmMs IDUgT2N0IDIwMDkuCisKK0J1aWx0IG9uIE1hYyBPUyBYIDEwLjQuMTEsIHJlcXVpcmVkIG9uZSBt aW5vciBhZGp1c3RtZW50IHRvIHRoZSBtYWtlZmlsZQorKC1ETk9EQ0xJTklUR1JPVVBTKS4gIFRo aXMgd2FzIHVzaW5nIHRoZSBtYWNvc3gxMC41IHRhcmdldCwgd2hpY2ggaXMKK3N1cHBvc2VkIHRv IGJlIHVuaXZlcnNhbCBsaWtlIHRoZSBsaW51eCBhbmQgbmV0YnNkIHRhcmdldHMsIGJ1dCBub3Qg eWV0Citwcm92ZW4uICBBbHNvIGJ1aWx0IGEgNjQtYml0IHZlcnNpb24gKC1tcG93ZXJwYzY0IC1t Y3B1PUc1IC1tdHVuZT1HNQorLWFyY2ggcHBjNjQpOyBpdCBjb21waWxlcyBhbmQgbGlua3MgT0sg YnV0IHdvbid0IHN0YXJ0OiAiQmFkIENQVSBUeXBlCitpbiBleGVjdXRhYmxlIi4gIEZpeCBsYXRl ci4uLiAgbWFrZWZpbGUsIDUgT2N0IDIwMDkuCisKK0NoYW5nZXMgZnJvbSBTZXRoIFRoZXJpYXVs dCB0byBzdXBwcmVzcyBzaWduZWQgdnMgdW5zaWduZWQgY2hhciB3YXJuaW5ncyBpbgorTWFjIE9T IDEwLjUuOCBmcm9tIGdjYzQsIGFuZCBhIG5ldyBtYWtlZmlsZSB0YXJnZXQgZm9yIE1hYyBPUyBY IChwcmVzdW1hYmx5CisxMC4zLjkgb3IgbGF0ZXIpICsgS2VyYmVyb3MgNSBhbmQgT3BlblNTTC4g IGNrdXRpby5jLCBja3VhdGguYywgY2tjdGVsLmMsCitja2NuZXQuYywgY2tjZnRwLmMsIGNrX2Ny cC5jLCBtYWtlZmlsZSwgNiBPY3QgMjAwOS4KKworICBMYXRlciBJIGhhZCB0byBiYWNrIG91dCBv ZiB0aGVzZSwgYmVjYXVzZSBhbHRob3VnaCBpdCBtYWRlIGZvciBhCisgIGNsZWFuIGJ1aWxkLCBp biB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgU1NMIGNvbm5lY3Rpb25zIGRpZG4ndCB3b3JrLgor CitUdWUgT2N0ICA2IDE3OjIzOjI3IDIwMDkKK0ZUUCBhZGRyZXNzIHJlc29sdXRpb24gaXMgYnJv a2VuLCBidXQgZnRwX2hvb2t1cCgpIGhhc24ndCBjaGFuZ2VkLgorU28uLi4gKHNlZSB0aGUgI2lm ZGVmIEhQVVg2IHNlY3Rpb25zIG9mIGNrY25ldC5jKSAgKEkgZGlkLCBhbmQgSSByb2xsZWQKK2Jh Y2sgc29tZSBvZiB0aGUgY2hhbmdlcyBmcm9tIHRoZSBvdGhlciBkYXksIGJ1dCBpdCBtYWRlIG5v IGRpZmZlcmVuY2UuKQorUHV0dGluZyBiYWNrIHRoZSBja2NmdHAuYyBmcm9tIGEgZmV3IHdlZWtz IGFnbyBtYWtlcyBubyBkaWZmZXJlbmNlLgorUHV0dGluZyBiYWNrIHRoZSBja2NuZXQuYyBmcm9t IGEgZmV3IHdlZWtzIGFnbyBtYWtlcyBubyBkaWZmZXJlbmNlLgorCitBZGRlZCBwYXRjaGVzIGZy b20gU2V0aCBUaGVyaWF1bHQgc28gbWFjb3N4MTAuNStrcmI1K29wZW5zc2wgd291bGQgYnVpbGQK K29uIE1hYyBPUyBYIDEwLjMuOS4gIG1ha2VmaWxlLCBja2NmdHAuYywgNyBPY3QgMjAwOS4KKwor QnVpbHQgdG9kYXkncyBjb2RlIG9uIExpbnV4IFJIRUw0LCBOZXRCU0QgNS4wLjEsIFNvbGFyaXMg OSwgYW5kIE1hYyBPUyBYCisxMC40LjExLCBib3RoIHdpdGggYW5kIHdpdGhvdXQgU1NMLiAgVGhl IE5ldEJTRCBzeXN0ZW0gaGFzIE9wZW5TU0wgMC45LjktZGV2LgorNyBPY3QgMjAwOS4KKworSW4g TWFjIE9TIFggMTAuNiwgdGhlIGZvbGxvd2luZyBzeW1ib2xzIGFyZSB1bnJlc29sdmVkIGF0IGxp bmsgdGltZToKK19kZXNfa2V5X3NjaGVkLCBfZGVzX25ld19yYW5kb21fa2V5LCBfZGVzX2VjYl9l bmNyeXB0LAorX2Rlc19pbml0X3JhbmRvbV9udW1iZXJfZ2VuZXJhdG9yLCBfZGVzX2ZpeHVwX2tl eV9wYXJpdHkuICBUaGlzIGlzCit3aXRoIE9wZW5TU0wgMC45LjhrLiAgQnV0IGl0IGRvZXNuJ3Qg aGFwcGVuIG9uIG90aGVyIHBsYXRmb3JtcyB0aGF0CitoYXZlIDAuOS44ay4KKworQWRkZWQgU0VU IFNFU1NJT04tTE9HIE5VTEwtVEVSTUlOQVRFRC1URVhULiAgVGhpcyBpcyBmb3IgdGhlIGJlbmVm aXQgb2YgYQorc3BlZWNoIHN5bnRoZXNpemVyIHRoYXQgd2lsbCBzcGVhayBhIGxpbmUgb2YgdGV4 dCBvbmx5IGFmdGVyIHJlY2VpdmluZyBhCitOVUwgY2hhcmFjdGVyLiAgQSBtb3JlIGdlbmVyYWwg c29sdXRpb24gd291bGQgYmUgdG8gZGVmaW5lIGEgZmlsdGVyIG9yCit3aGF0ZXZlciwgYnV0IHdo byBoYXMgdGltZS4gIGNrdXVzWzIzeF0uYywgNyBPY3QgMjAwOS4KKworQ29uc29saWRhdGVkIE1h YyBPUyBYIHRhcmdldHMsIGFuZCByZW1vdmVkIGV4cGVyaW1lbnRhbCA2NC1iaXQgb25lcywgYmVj YXVzZQordGhleSBuZXZlciBjb3VsZCB3b3JrIGluIDEwLjUgYW5kIGVhcmxpZXIgYmVjYXVzZSA2 NC1iaXQgbGlicyBhcmUgbWlzc2luZywKK2FuZCAxMC42IGFuZCBsYXRlciBhcmUgNjQtYml0IGF1 dG9tYXRpY2FsbHkuICBtYWtlZmlsZSwgOCBPY3QgMjAwOS4KKworQnVpbHQgb24gTWFjIE9TIFgg MTAuNi4xLiAgSXQgY2FtZSBvdXQgYXV0b21hdGljYWxseSBhcyBhIDY0LWJpdCBidWlsZAorYmVj YXVzZSBfX0xQNjRfXyBpcyBkZWZpbmVkIHNvbWV3aGVyZSB0aGF0IEkgY2FuJ3QgZmluZC4gIEJ1 dCB0aGlzIGV4cGxhaW5zCit3aHkgdGhlIDAuOS44ayBvbiAxMC42IGNvbWVzIHVwIHdpdGggbWlz c2luZyBzeW1ib2xzIHdoZW4gdGhlIDAuOS44ayBsaWIKKzEwLjUgKG9yIG9uIFNvbGFyaXMgb3Ig b24gTGludXgpIGRvZXMgbm90OiBpdCdzIGEgZGlmZmVyZW50IGxpYnJhcnk6ICJNYWNoLU8KKzY0 LWJpdCBkeW5hbWljYWxseSBsaW5rZWQgc2hhcmVkIGxpYnJhcnkgeDg2XzY0IiwgcmF0aGVyIHRo YW4gIk1hY2gtTworZHluYW1pY2FsbHkgbGlua2VkIHNoYXJlZCBsaWJyYXJ5IHBwYyIuICBQcm9i YWJseSB0aGUgNjQtYml0IHZlcnNpb24gaGFzCitzb21lIHRoaW5ncyAjaWZkZWYnZCBvdXQuICBB ZGRlZCAtbTMyIHRvIHRoZSBDRkxBR1MgYW5kIExOS0ZMQUdTIGZvciB0aGUKK21hY29zeCtrcmI1 K29wZW5zc2wgdGFyZ2V0cywgYW5kIGl0IGJ1aWx0IE9LIG9uZSB0aW1lLiAgQnV0IHRoZW4gdGhl IGVycm9ycworY2FtZSBiYWNrLiAgbWFrZWZpbGUsIDggT2N0IDIwMDkuCisKK1VwZGF0ZWQgQy1L ZXJtaXQgaW5zdGFsbGF0aW9uIGZvciBNYWMgT1MgWCBpbiBja3V3ci5odG1sIG9uIHRoZSB3ZWJz aXRlLgorOCBPY3QgMjAwOS4KKworVHJpZWQgc29tZSB0aGluZ3MgdG8gZ2V0IGFyb3VuZCB0aGUg cHJvYmxlbSB3aXRoIE9wZW5TU0wgaW4gTWFjIE9TIFggMTAuNiwKK3RvIG5vIGF2YWlsLiAgQXNr ZWQgSmVmZi4gIEhlIHNhaWQsICJNYWNPUyBYIG5vIGxvbmdlciBpbmNsdWRlcyBERVMgYW55d2hl cmUKK29uIHRoZSBzeXN0ZW0uICBOb3QgZm9yIFNTTCwgbm90IGZvciBLZXJiZXJvcywgbm90IGZv ciBhbnl0aGluZy4gIFRoaXMgd2lsbAoraW5jcmVhc2luZ2x5IGJlY29tZSB0aGUgc2l0dWF0aW9u IG9uIG5ldyBvcGVyYXRpbmcgc3lzdGVtcy4gIFdpbmRvd3MgNyBhbmQKKzIwMDggUjIgd2lsbCBh bHNvIHNoaXAgd2l0aCBubyBERVMuIiAgU3VyZSBlbm91Z2gsIHRoZSBNYWMgT1MgWCBTZXJ2ZXIK K1VwZ3JhZGluZyBhbmQgTWlncmF0aW5nIGRvY3VtZW50IGZvciAxMC42IHNheXMsICJNYWMgT1Mg WCBTZXJ2ZXIgdjEwLjYgZG9lcworbm90IHN1cHBvcnQgc2luZ2xlIERFUyBlbmNyeXB0aW9uLiBJ dCBzdXBwb3J0cyBBRVMgMTI4IGFuZCAyNTYgZW5jcnlwdGlvbgordHlwZXMuIEhvd2V2ZXIsIGR1 cmluZyBhIG1pZ3JhdGlvbiBvciB1cGdyYWRlIGZyb20gdjEwLjQgdG8gdjEwLjYsIHNlcnZlcnMK K3RoYXQgd2VyZSBLZXJiZXJpemVkIGJ5IHRoZSB2MTAuNSBPcGVuIERpcmVjdG9yeSBzZXJ2ZXIg d2lsbCBub3QgdXNlIHRoZSBBRVMKKzEyOCBvciAyNTYgZW5jcnlwdGlvbiB0eXBlcy4gVG8gdXNl IHRoZSBBRVMgMTI4IG9yIDI1NiBlbmNyeXB0aW9uIHR5cGVzIHlvdQorbXVzdCByZS1LZXJiZXJp emUgYWxsIHNlcnZlcnMuIiAgMTIgT2N0IDIwMDkuCisKK0RFUyBhbmQgM0RFUyBlbmNyeXB0aW9u IGNhbiBiZSBleGNsdWRpbmcgcmVtb3ZpbmcgdGhlIC1EQ0tfREVTIGZsYWcuICBJCityZW1vdmVk IHRoaXMgb25lIGFuZCAtRExJQkRFUyAoYW5kIC1tMzIpIGFuZCB0aGlzIG1ha2VzIGEgd29ya2lu ZyA2NC1iaXQKK3ZlcnNpb24uICBUaGVuIEkgYWRkZWQgY29kZSB0byB0aGUgbWFjb3N4K2tyYjUr b3BlbnNzbCB0YXJnZXQgdG8gdXNlIHRoZXNlCitmbGFncyBpZiB0aGUgTWFjIE9TIFggdmVyc2lv biB3YXMgMTAuNSBvciBsZXNzIGFuZCBsZWF2ZSB0aGVtIG91dCBmb3IgMTAuNgorb3IgbGF0ZXIu ICBUZXN0ZWQgb24gMTAuNC4xMSBhbmQgMTAuNi4xLiAgQSBiZXR0ZXIgd2F5IHRvIGRvIGl0IG1p Z2h0IGhhdmUKK2JlZW4gIm5tIC1naiBsaWJzc2wuZHlsaWIgfCBncmVwIGRlc18iLCBidXQgdGhh dCBnaXZlcyB0aGUgc2FtZSByZXN1bHRzIG9uCisxMC40IGFuZCAxMC42LiAgQWxzbywgMTAuNiBz dGlsbCBoYXMgL3Vzci9pbmNsdWRlL3NzbC9kZXMuaC4KK21ha2VmaWxlLCAxMyBPY3QgMjAwOS4K KworTmV4dCBpc3N1ZToKKyAgSW4gZmlsZSBpbmNsdWRlZCBmcm9tIGNrdXRpby5jOjE1Njc0Ogor ICAvdXNyL2xpYi9nY2MvaTM4Ni1yZWRoYXQtbGludXgvMy40LjYvaW5jbHVkZS92YXJhcmdzLmg6 NDoyOiAjZXJyb3IgIkdDQyBubworICBsb25nZXIgaW1wbGVtZW50cyA8dmFyYXJncy5oPi4iCisg IC91c3IvbGliL2djYy9pMzg2LXJlZGhhdC1saW51eC8zLjQuNi9pbmNsdWRlL3ZhcmFyZ3MuaDo1 OjI6ICNlcnJvciAiUmV2aXNlCisgIHlvdXIgY29kZSB0byB1c2UgPHN0ZGFyZy5oPi4iCisKK1Ro ZSBwcm9ibGVtIG9jY3VycyB3aGVuIHRyeWluZyB0byBmb3JjZSBhIG5vbi1BTlNJQyBidWlsZCB3 aXRoIEdDQy4KK0NoYW5naW5nIHRoZSBzb3VyY2UgZmlsZSB0byBpbmNsdWRlIDxzdGRhcmcuaD4g aW5zdGVhZCBvZiA8dmFyYXJncy5oPgorZG9lc24ndCBoZWxwIGJlY2F1c2UgZXZpZGVudGx5IDxz dGRhcmcuaD4gcmVxdWlyZXMgYW4gQU5TSSBDIGNvbXBpbGVyLgorTm90aGluZyBjYW4gYmUgZG9u ZSBhYm91dCB0aGlzLiAgMTMgT2N0IDIwMDkuCisKK05leHQgaXNzdWU6IENhbid0IGNvbXBpbGUg Y2tjZnRwLmMgd2l0aCAtRE5PQ1NFVFMgb3IgLUROT1NQTDsgc29tZQorI2lmZGVmLyNlbmRpZiBk b2Vzbid0IG1hdGNoIHVwLiAgU2lnaCwgdGhpcyBpcyB0aGUgaGFyZGVzdCBraW5kIG9mIHRoaW5n IHRvCitkZWJ1Zy4gIFRoZXJlJ3MgMTcsNjIyIGxpbmVzIG9mIGNvZGUgaW4gdGhpcyBtb2R1bGUg YW5kIG5vIHRvb2wgdGhhdCBJIGtub3cKK29mLi4uLiBXYWl0LCBJIHdyb3RlIG9uZS4gIEJ1dCBp dCBzaG93cyBhbGwgdGhlICNpZi8jaWZkZWYvI2lmbmRlZidzIGFuZAorI2VuZGlmcyBtYXRjaGlu ZyB1cCBqdXN0IGZpbmUuICBCYWNraW5nIG9mZiB0byBja2NmdHAuYyBvZiBhIGZldyBkYXlzIGFn bworKGJlZm9yZSBjaGFyIC8gdW5zaWduZWQgY2hhciBjYXN0cyB3ZXJlIGFkZGVkKSwgSSBzZWUg dGhhdCBpdCBidWlsZHMgT0ssIHNvCitJIGJhY2tlZCBvZmYgdG8gdGhhdCBvbmUsIGJ1dCBwdXQg YmFjayB0aGUgc3BlY2lhbCBjYXNlICNpZmRlZiBmb3IgTUFDT1NYMTAzCitkZWNsYXJpbmcgQ09O U1QgZ3NzX09JRF9kZXNjLCBhbmQgaXQgYnVpbGRzIE9LICh0aGUgb3RoZXIgc3R1ZmYgd2FzIHB1 cmVseQorY29zbWV0aWMsIHdoZW4gd2lsbCBJIGxlYXJuPykuICBja2NmdHAuYywgMTMgT2N0IDIw MDkuCisKK1Byb3RlY3RlZCBjdnRzdHJpbmcoKSBhbmQgcmVsYXRlZCBmdW5jdGlvbnMgd2l0aCAj aWZkZWYgTk9DU0VUUy4uI2VuZGlmLAorYW5kIGRpdHRvIGZvciB0aGUgY2hhcmFjdGVyLXNldCBj b252ZXJzaW9uIGNvZGUgaW4gZG9yZW5hbWUoKS4KK2NrdXVzNi5jLCAxMyBPY3QgMjAwOS4KKwor Rml4ZWQgYW4gI2VuZGlmIC8qIFROQ09ERSAqLyB0aGF0IHdhcyBhIGxpbmUgdG9vIGxvdyBpbiB0 dHB0eWNtZCgpLAorY2F1c2luZyAtRE5PTkVUIGJ1aWxkcyB0byBmYWlsLiAgY2t1dGlvLmMsIDEz IE9jdCAyMDA5LgorCitUaGVyZSB3YXMgYSByZWZlcmVuY2UgdG8gZG9wdXRlbnYoKSB0aGF0IHdh c24ndCBndWFyZGVkIGJ5ICNpZm5kZWYgTk9QVVRFTlYsCitmaXhlZCBpbiBja3V1czcuYywgMTMg T2N0IDIwMDkuCisKK01vdmVkIGRvcHV0ZW52KCkgYW5kIHNldHRlcm10eXAoKSBvdXQgb2YgYW4g I2lmZGVmIE5PTE9DQUwgc2VjdGlvbiBiZWNhdXNlCit0aGVzZSBhcmUgdXNlZnVsIGV2ZW4gd2hl biBub3QgbWFraW5nIGNvbm5lY3Rpb25zLiAgY2t1dXM3LmMsIDEzIE9jdCAyMDA5LgorCitNb3Zl ZCBoYXZlbGZzIGRlY2xhcmF0aW9uIG91dHNpZGUgb2YgI2lmZGVmIE5PWEZFUiBiZWNhdXNlIGl0 IHdhcyBhbHNvIHVzZWQKK2ZvciBvdGhlciB0aGluZ3MuICBja2NtYWkuYywgMTMgT2N0IDIwMDku CisKK0NPUFkgL1BSRVNFUlZFIGRlcGVuZGVkIG9uIGNvZGUgZnJvbSB0aGUgS2VybWl0IHByb3Rv Y29sIG1vZHVsZSwgd2hpY2gKK2lzIG9taXR0ZWQgaW4gLUROT1hGRVIgYnVpbGRzLiAgRGlzYWJs ZWQgQ09QWSAvUFJFU0VSVkUgaW4gLUROT1hGRVIKK2J1aWxkcy4gIGNrdXVzNi5jLCAxNCBPY3Qg MjAwOS4KKworU0hPVyBQUk9UT0NPTCBjb2RlIGZvciBleHRlcm5hbCBwcm90b2NvbHMgaGFkIHRv IGJlICNpZmRlZidkIG91dCBmb3IKKy1ETk9QVVNIIGJ1aWxkcy4gIGNrdXVzNC5jLCAxNCBPY3Qg MjAwOS4KKworVGhlcmUgd2FzIHNvbWUgY29uZnVzaW9uIGJldHdlZW4gIk5vIFhZWk1PREVNIiBh bmQgIk5vIGV4dGVybmFsIHByb3RvY29scyI7CitjbGVhcmVkIHVwIGluIGNrdXVzMy5jLCAxNCBP Y3QgMjAwOS4KKworQWZ0ZXIgYWxsIHRoYXQsIDg2IGRpZmZlcmVudCBjb21iaW5hdGlvbnMgb2Yg ZmVhdHVyZSBzZWxlY3Rpb25zIGJ1aWx0IE9LIG9uCitMaW51eC4gIEFuZCB0aGUgS2VyYmVyaXpl ZCB2ZXJzaW9uIChLNSkgd29ya3MgT0sgb24gTGludXggZm9yIFRlbG5ldCBhbmQgRlRQLgorMTQg T2N0IDIwMDkuCisKK0NoYW5nZWQgdmVyc2lvbiBudW1iZXIgdG8gOS4wLiAgQWxsIG1vZHVsZXMs IDE2IE9jdCAyMDA5LgorCitOZWVkIHRvIG1ha2UgTE9HIFNFU1NJT04gbG9nIHRvIGEgdHR5LiAg UmlnaHQgbm93ICJsb2cgc2Vzc2lvbgorL2Rldi90dHlLZXlTZXJpYWwxIiBzYXlzICJXcml0ZSBw ZXJtaXNzaW9uIGRlbmllZCIgZXZlbiB0aG91Z2ggdGhlIGRldmljZSBpcworY3J3LXJ3LXJ3LS4g IFRoaXMgaGFwcGVucyBpbiB6Y2hrbygpLCB3aGljaCBpcyBjYWxsZWQgYnkgY21vZmkoKS4gIFRo ZQorcHJvYmxlbSBpcyB0aGF0IC9kZXYvIGlzIG5vdCB3cml0ZWFibGUuICBJIGFkZGVkIGEgVW5p eC1vbmx5IGNsYXVzZSB0aGF0CithdHRlbXB0cyB0byBvcGVuIHRoZSBmaWxlIGZvciB3cml0ZSBh Y2Nlc3MgdXNpbmcgb3BlbigpLCBpbiBvcmRlciB0byBnZXQgYQorZmlsZSBkZXNjcmlwdG9yLCB3 aGljaCB0aGVuIGNhbiBiZSBwYXNzZWQgdG8gaXNhdHR5KCkgdG8gY2hlY2sgaWYgaXQncyBhCit0 dHksIGFuZCBpZiBzbywgdG8gYWxsb3cgYWNjZXNzLiAgQW5kIHRoZW4gY2xvc2UgaXQuICBJIHRl c3RlZCB0aGlzIG9uIE1hYworT1MgWCBhcyBmb2xsb3dzOgorCisgIGxvZyBzZXNzaW9uIC9kZXYv dHR5S2V5U2VyaWFsMQorICB0ZWxuZXQgc29tZWhvc3QKKworVGhlIE1hYydzIHNlcmlhbCBwb3J0 IHdhcyBjb25uZWN0ZWQgdG8gdGhlIHNlcmlhbCBwb3J0IG9mIGFub3RoZXIgY29tcHV0ZXIKK3do ZXJlIEtlcm1pdCBkaXNwbGF5ZWQgdGhlIGluY29taW5nIGNoYXJhY3RlcnMgaW4gQ09OTkVDVCBt b2RlLiAgR2xpdGNoZXM6CisKKyAxLiBUaGUgcG9ydCBoYXMgdG8gYmUgc2V0IHVwIGFzIGRlc2ly ZWQgaW4gYWR2YW5jZSwgb3V0c2lkZSBvZiBLZXJtaXQuCisgMi4gbG9nIHNlc3Npb24gL2Rldi90 dHlLZXlTZXJpYWwxIHdpbGwgaGFuZyBpZiBhbnkgcmVxdWlyZWQgbW9kZW0gc2lnbmFscworICAg IGFyZSBub3QgcHJlc2VudCB3aGVuIHRoZSBwb3J0IGlzIG9wZW5lZC4KKyAzLiBCeXBhc3NlcyBs b2NrZmlsZSBtZWNoYW5pc20gLSBzbyB3ZSBkbyB0aGlzIG9ubHkgaWYgLUROT1VVQ1AuCisKK0Zv ciAoMiksIEkgdHJpZWQgc2V0dGluZyBPX05ERUxBWSAvIE9fTk9OQkxPQ0ssIGFuZCB0aGlzIGFs bG93ZWQgemNoa28oKSB0bworY29udGludWUsIGJ1dCB0aGVuIGl0IGZyZWV6ZXMgaW4gdGhlIHN1 YnNlcXVlbnQgZm9wZW4oKS4gIFNvIEkgY2hhbmdlZAorem9wZW5vKCkgdG8gYWxzbyBjaGVjayBp ZiB0aGUgZGV2aWNlIGlzIGEgc2VyaWFsIHBvcnQsIGFuZCBpZiBzbywgdG8gb3BlbigpCitpdCB3 aXRoIE9fTkRFTEFZIC8gT19OT05CTE9DSywgYW5kIHRoZW4gY29udmVydCB0aGUgZmlsZSBkZXNj cmlwdG9yIGludG8gYQorZmlsZSBwb2ludGVyIHdpdGggZmRvcGVuKCkuCisKK05vdyBmb3IgdGhl IHNwZWFraW5nIGRldmljZSB0aGF0IG5lZWRzIGxpbmVzIHRvIGJlIHRlcm1pbmF0ZWQgYnkgTlVM Li4uCisKKyAgc2V0IHNlc3Npb24tbG9nIGJpbmFyeSAgICAgICA8LS0gbmVlZCB0byBwdXQgdGhl c2UgaW4gU0hPVyBMT0cKKyAgc2V0IHNlc3Npb24tbG9nIG51bGwtcGFkZGVkICAgICAgKGFuZCBp biBIRUxQIFNFVCBMT0cpCisgIHNldCBsaW5lIC9kZXYvdHR5S2V5U2VyaWFsMQorCitUaGlzIHBh cnQgd29ya3MuCisKK1RoaXMgZmVhdHVyZSBpcyBlbmFibGVkIG9ubHkgZm9yIC1ETk9VVUNQIGJ1 aWxkcyBiZWNhdXNlIHNlcmlhbCBwb3J0cyBhcmVuJ3QKK2xpa2Ugb3RoZXIgVW5peCBmaWxlczsg d2Ugd291bGQgaGF2ZSB0byBjcmVhdGUgYSBsb2NrZmlsZSwgYnV0IHdlIGNhbid0IGRvCit0aGF0 Li4uICBhY3R1YWxseSwgdHRsb2NrKCkgdGFrZXMgYSBuYW1lIGFzIGFuIGFyZ3VtZW50LCBidXQg dHR1bmxjaygpIGRvZXMKK25vdCwgc28gdGhlcmUgd291bGQgYmUgbm8gd2F5IHRvIHJlbW92ZSB0 aGUgbG9jay4gIEFueXdheSwgdGhlcmUgaXMgb25seSBvbmUKK0FQSSBmb3IgY29uZmlndXJpbmcg dGhlIHBvcnQgKHNwZWVkLCBmbG93IGNvbnRyb2wsIGV0YykgYW5kIGl0IG9ubHkgd29ya3MKK3dp dGggdGhlIFNFVCBMSU5FIGRldmljZSwgbm90IGFueSByYW5kb20gZmlsZS4gIFRvIGZpeCB0aGlz IHdvdWxkIHJlcXVpcmUKK21hc3NpdmUgcmVkZXNpZ24gYW5kIGNoYW5nZXMuICBja3V1c1syM10u YywgY2t1ZmlvLmMsIDE5LTIwIE9jdCAyMDA5LgorCitJIG1hZGUgLUROT1VVQ1AgdGhlIGRlZmF1 bHQgZm9yIE1hYyBPUyBYLCBzaW5jZSBldmVyeWJvZHkgd2luZHMgdXAgYnVpbGRpbmcKK2l0IHRo YXQgd2F5IGFueWhvdy4gIFRvIHVuZG8gdGhpcywgZG8gIm1ha2UgbWFjb3N4IEtGTEFHUz0tVU5P VVVDUCIuCittYWtlZmlsZSwgMjEgT2N0IDIwMDkuCisKK0NoYW5nZWQgU0VUIFNFU1NJT04tTE9H IFRFWFQgdG8gc3RyaXAgb3V0IEFOU0kgZXNjYXBlIHNlcXVlbmNlczsgCitwcmV2aW91c2x5IHRo ZXJlIHdhc24ndCB0aGF0IG11Y2ggZGlmZmVyZW5jZSBiZXR3ZWVuIFRFWFQgYW5kIEJJTkFSWSBs b2dzLgorSXQncyBzdGlsbCBub3QgcGVyZmVjdDsgZm9yIGV4YW1wbGUgaXQgZG9lc24ndCBkZWxl dGUgY2hhcmFjdGVycyB0aGF0IHRoZQordXNlciBlcmFzZWQuICAoTWFkZSBzdXJlIHRoaXMgc3Rp bGwgYnVpbGRzIHdpdGggLUROT0VTQ1NFUS4pCitja3VjbnMuYywgMjIgT2N0IDIwMDkuCisKK0No YW5nZWQgU0hPVyBMT0cgdG8gc2hvdyB0aGUgU0VUIFNFU1NJT04tTE9HIHNldHRpbmdzLCBhcyB3 ZWxsIGFzCitTRVQgREVCVUcsIHdoaWNoIHdhcyBub3Qgc2hvd24gYmVmb3JlLiAgY2t1dXM1LmMs IDIyIE9jdCAyMDA5LgorCitJZiBhIHNlcmllcyBvZiBQVVRFTlYgY29tbWFuZHMgaXMgZ2l2ZW4s IGVhY2ggbmV3IG9uZSB1bmRvZXMgdGhlIHByZXZpb3VzCitvbmUsIHNvIG9ubHkgdGhlIGxhc3Qg ZGVmaW5pdGlvbiBpcyBzZWVuIGJ5IHRoZSBuZXcgZm9yayAob3IgYnkgS2VybWl0CitpdHNlbGYp LiAgVHVybnMgb3V0IHlvdSBjYW4ndCBmZWVkIGF1dG9tYXRpYyB2YXJpYWJsZXMgdG8gcHV0ZW52 KCk7IHRoZXkKK2hhdmUgdG8gYmUgc3RhdGljLCBzbyB0byBhbGxvdyBmb3IgbXVsdGlwbGUgUFVU RU5WIGNvbW1hbmRzIEtlcm1pdCBoYXMgdG8KK21haW50YWluIGFuIGFycmF5IG9mIHN0YXRpYyBz dHJpbmdzLiAgY2t1dXM3LmMsIDYgTm92IDIwMDkuCisKK0Zyb20gU2V0aCBUaGVyaWF1bHQsIGEg YmV0dGVyIHdheSBmb3IgdGhlIG1ha2VmaWxlIHRvIGRldGVybWluZSB0aGUKK01hYyBPUyBYIHZl cnNpb24gbnVtYmVyOyB0aGVyZSdzIGEgcHJvZ3JhbSBmb3IgdGhpcywgc3dfdmVyLiAgbWFrZWZp bGUsCis2IE5vdiAyMDA5LgorCitQZXRlciBFaWNoaG9ybiByZXBvcnRlZCB0aGF0IGZpbGUtdHJh bnNmZXIgZmFpbHVyZSBoaW50cyB3ZXJlIG5vdCBjb21pbmcKK291dCBzaW5jZSBEZXYuMjcuICBU aGUgb25seSBjaGFuZ2UgSSBtYWRlIHNpbmNlIHRoZW4gd2FzIHRvIHNraXAgdGhlbSBpZgordGhl IGZpbGUtdHJhbnNmZXIgcHJvdG9jb2wgd2FzIG5vdCBLZXJtaXQuICBJIHdhcyB1c2luZyB0aGUg d3JvbmcgdmFyaWFibGUKK2luIHRoZSB0ZXN0cywgJ3Byb3RvJyBpbnN0ZWFkIG9mICdwcm90b2Nv bCcuICBja3V1czUuYywgNiBOb3YgMjAwOS4KKworQ2hhbmdlZCBNYWMgT1MgWCB0YXJnZXRzIHRv IGNvcnJlY3RseSBleHRyYWN0IHRoZSBNYWMgT1MgbWFqb3IgdmVyc2lvbgorZnJvbSB1bmFtZSAt ciBpbiBvcmRlciB0byBjaG9vc2UgY29ycmVjdGx5IGJldHdlZW4gdXRtcCBhbmQgdXRtcHg7IHRo aXMKK3dhc24ndCB3b3JraW5nIGluIDEwLjYuMS4gIG1ha2VmaWxlLCA2IE5vdiAyMDA5LgorCitG aXggZnJvbSBTZXRoIFQuIGZvciBhbiBvdmVyc2lnaHQgaW4gdGhlIHByZXZpb3VzIGVkaXQuICBB bHNvIGFkZAorTUFDT1NYMTAzIHRvICJzaG93IGZlYXR1cmVzIiBkaXNwbGF5LiAgbWFrZWZpbGUs IGNrdXVzNS5jLCAxMCBOb3YgMjAwOS4KKworQWRkZWQgUkVKRUNUIGFzIGEgc3lub255bSBmb3Ig RElTQ0FSRCBpbiBTRVQgRklMRSBDT0xMSVNJT047IGl0J3MgbW9yZQoraW50dWl0aXZlIGFuZCBt b3JlIGFjY3VyYXRlLiAgY2t1dXNbMjddLmMsIDE1IE5vdiAyMDA5LgorCitcZnNwbGl0KCkgYW5k IFxmd29yZCgpIGFsd2F5cyBicmVhayBvbiA4LWJpdCBjaGFyYWN0ZXJzIHVubGVzcyB5b3UgZXhw bGljaXRseQorcHV0IGV2ZXJ5IHNpbmdsZSA4LWJpdCB2YWx1ZSBpbnRvIHRoZSBpbmNsdWRlIHNl dCwgZS5nLiAoZm9yIGEgVFNWIGZpbGUpOgorCisgIHVuZGVmIGluY2x1ZGUKKyAgZm9yIFwlaSAx MjggMjU1IDEgeworICAgICAgaWYgPT0gXCVpIDkgY29udGludWUKKyAgICAgIC5pbmNsdWRlIDo9 IFxtKGluY2x1ZGUpXGZjaGFyKFwlaSkKKyAgfQorICAuXCVuIDo9IFxmc3BsaXQoXG0obGluZSks JmEsXDksXG0oaW5jbHVkZSkpCisKK0kgY2hhbmdlZCBja3NwbGl0KCkgdG8gdHJlYXQgYWxsIDgt Yml0IGJ5dGVzIDEyOC0yNTUgYXMgbm9uLWJyZWFrIGNoYXJhY3RlcnMKK2J5IGRlZmF1bHQuICBJ dCBtaWdodCBoYXZlIG1hZGUgbW9yZSBzZW5zZSB0byBkbyB0aGlzIGZvciAxNjAtMjU1IChzaW5j ZQorMTI4LTE1OSBhcmUgdHJhZGl0aW9uYWxseSBDMSBjb250cm9sIGNoYXJhY3RlcnMpIGJ1dCB0 aGFua3MgdG8gTWljcm9zb2Z0Cit0cmFkaXRpb24gaXMgb3V0IHRoZSB3aW5kb3cuICBUbyB0cmVh dCBvbmUgb3IgbW9yZSA4LWJpdCBjaGFyYWN0ZXJzIGFzIGJyZWFrCitjaGFyYWN0ZXJzLCBwdXQg dGhlbSBpbiB0aGUgYnJlYWsgc2V0LiAgVGhpcyBtaWdodCBicmVhayBzb21lIHNjcmlwdHMsIGJ1 dCBJCitkb3VidCBpdCBiZWNhdXNlIHRoaXMgZmxhdyB3YXMgc28gYXdmdWwgdGhhdCBpZiBhbnlv bmUgaGFkIGNvbWUgdXAgYWdhaW5zdAordGhleSB3b3VsZCBoYXZlIGxldCBtZSBrbm93LiAgY2tj bGliLmMsIDE2IE5vdiAyMDA5LgorCitDaGFuZ2VkIHRoZSBuZXRic2QgdGFyZ2V0IHRvIHNldCAt ZnVuc2lnbmVkLWNoYXIsIHNpbmNlIGNjIG9uIE5ldEJTRCBpcworYWN0dWFsbHkgZ2NjLiAgbWFr ZWZpbGUsIDE2IE5vdiAyMDA5LgorCitDaGFuZ2VkIG1hY29zeCB0YXJnZXRzIHRvIGdldCB0aGUg Q1BVIHR5cGUgZnJvbSB0aGUgSE9TVFRZUEUgZW52aXJvbm1lbnQKK3ZhcmlhYmxlLiAgQWxzbyBh ZGRlZCBnZXRlbnYoIkhPU1RUWVBFIikgYXMgYSBsYXN0LXJlc29ydCBtZXRob2QgdG8gc2V0IHRo ZQorXHYoY3B1KSB2YXJpYWJsZSBhdCBydW50aW1lIChtYXliZSBpdCBzaG91bGQgYmUgdGhlIGZp cnN0IHJlc29ydD8pLi4uCitja3V1czQuYywgbWFrZWZpbGUsIDE2IE5vdiAyMDA5LgorCitNYWRl IHN1cmUgdGhlIHNvbGFyaXM5XzY0IGFuZCBzb2xhcmlzMTAgdGFyZ2V0cyBzdGlsbCB3b3JrLiAg MTYgTm92IDIwMDkuCisKK01hZGUgc3VyZSB0aGUgY3VycmVudCBzb3VyY2UgcGFja2FnZSBidWls ZHMgT0sgb24gSFAtVVggMTAuMjAuLi4gIEdvdCBhIGxvdAorb2YgIndhcm5pbmcgNjA2MjogT3B0 ZHJpdmVyOiBFeGNlZWRpbmcgY29tcGlsZXIgcmVzb3VyY2UgbGltaXRzIGluIHh4eDsgc29tZQor b3B0aW1pemF0aW9ucyBza2lwcGVkLiBVc2UgK09ub2xpbWl0IGlmIG92ZXJyaWRlIGRlc2lyZWQi IGJ1dCBpdCBidWlsZHMgT0suCitUZXN0ZWQgbG9uZyBmaWxlIHRyYW5zZmVyOyB3b3JrcyBPSy4g IDE3IE5vdiAyMDA5LgorCitCdWlsdCBvbiBGcmVlQlNEIDcuMiB3aXRoIGFuZCB3aXRob3V0IE9w ZW5TU0wsIGFsbCBPSy4gIDE3IE5vdiAyMDA5LgorCitCdWlsdCBvbiBOZXRCU0QgNS4wLjEgd2l0 aCBhbmQgd2l0aG91dCBPcGVuU1NMLCBhbGwgT0ssIGJ1dCBuZXRic2Qra3JiNQorZmFpbHMgd2l0 aCAiY2FuJ3QgZmluZCAtbGdzc2FwaV9rcmI1Ijsgd29ya2VkIGFyb3VuZCB0aGlzIHdpdGgKKyJL NUxJQj0tTC91c3IvbG9jYWwva2VyYmxpYiIgKHdoZXJlIHRoZSBsaWIgYWN0dWFsbHkgaXMgb24g dGhpcyBob3N0KSBidXQKK3RoZW4gaXQgZmFpbGVkIHdpdGggImNrY2Z0cC5jOjEzODY4OiBlcnJv cjogJ2dzc19udF9zZXJ2aWNlX25hbWUnIHVuZGVjbGFyZWQiLgorMTcgTm92IDIwMDkuCisKK0kg Zm91bmQgYSBWTVMgNi4yIHN5c3RlbS4uLiBUYWtlcyBhIGxvb29vbmcgdGltZSB0byBidWlsZCB0 aGVyZS4gIEluCitja3V1c3kuYywgREVDIEMgZGlkbid0IGxpa2UgdGhlIHByb3RvdHlwZXMgYW5k IGRlY2xhcmF0aW9ucyBvZiBkb3JsZ2FyZygpCithbmQgZG90bmFyZygpIGFzIHN0YXRpYyBzbyBJ IG1hZGUgdGhlbSBub3Qgc3RhdGljLiAgQnV0IHRoYXQgZGlkbid0IGhlbHAsCitub3cgaXQgZmFp bHMgYXQgdGhlIHZlcnkgZW5kLCBzYXlpbmcgdGhlIGZpbmFsICNpZmRlZiBpcyBhbiBpbnZhbGlk CitzdGF0ZW1lbnQuICBJdCBsb29rcyBsaWtlIGFuICNpZmRlZiBtaXNtYXRjaCB0aGF0IGFmZmVj dHMgb25seSBWTVMuICBJIHJhbgorbXkgI2lmZGVmIG1hdGNoZXIsIGl0IHR1cm5lZCB1cCBub3Ro aW5nLiAgSSBzdWJzdGl0dXRlZCBhIGNvcHkgb2YgY2t1dXN5LmMKK2Zyb20gMjAwNywgaXQgY29t ZXMgdXAgd2l0aCB0aGUgc2FtZSBlcnJvcnMuICBUaGVuIEkgc3Vic3RpdHV0ZWQgdGhlIGNvcHkK K2Zyb20gOC4wLjIxMSBmcm9tIDIwMDQsIGFuZCB0aGlzIG9uZSBjb21waWxlZCBPSyBhbmQsIG1p cmFjdWxvdXNseSwgdGhlCit3aG9sZSBtZXNzIGV2ZW4gbGlua2VkIE9LIGFuZCBydW5zIE9LLiAg VGhlIEFscGhhIGJpbmFyeSBpcyAyLjg0TUIuICBOb3cgSQoraGF2ZSA0NTAwIGxpbmVzIG9mIGNv ZGUgdG8gY29tcGFyZS4uLi4gIEkgd2VudCB0aHJvdWdoIHRoZSB0d28gZmlsZXMgbGluZSBieQor bGluZSBhbmQgSSBjYW4ndCBzZWUgYSBzaW5nbGUgdGhpbmcgd3JvbmcuICBJIGdhdmUgdXAgYW5k IHRyaWVkIGJ1aWxkaW5nIHRoZQorVENQL0lQIHZlcnNpb24uICBJdCBidWlsZHMgZmluZSBleGNl cHQgZm9yIGNrdXVzeS5jLCB3aXRoIHRoZSB1dHRlcmx5Cit1c2VsZXNzIGVycm9yIG1lc3NhZ2U6 CisKKyAgI2VuZGlmIC8qIE5PQ01ETCAqLworICAuLi4uLi4uLi4uLi4uLi4uLi4uXgorICAlQ0Mt RS1CQURTVE1ULCBJbnZhbGlkIHN0YXRlbWVudC4KKworSW5kaWNhdGluZyB0aGUgbGFzdCBsaW5l IGluIHRoZSBmaWxlLiAgSnVzdCBmb3IgdGhlIGhlY2sgb2YgaXQsIEkgcHV0Cithbm90aGVyIGxp bmUgYWZ0ZXIgdGhhdCBvbmU6CisKKyAgLyogVGhpcyBpcyBhIHRlc3QgKi8KKworYW5kIGdvdDoK KworICAvKiBUaGlzIGlzIGEgdGVzdCAqLworICAuLi4uLi4uLi4uLi4uLi4uLi4uLl4KKyAgJUND LUUtQkFEU1RNVCwgSW52YWxpZCBzdGF0ZW1lbnQuCisKK1NvIGl0IGlzIG5vdCBvYmplY3Rpbmcg dG8gYW55dGhpbmcgaW4gdGhlIGZpbGUuICBUcnlpbmcgdGhlIG9sZCBMSVNQIHRyaWNrLAorSSBw dXQgYW4gZXh0cmFuZW91cyBjbG9zaW5nIGJyYWNrZXQgYWZ0ZXIgdGhhdC4gIFN1Y2Nlc3MhICBI b25lc3RseSwgSSBkb24ndAorc2VlIGFueXRoaW5nIHdyb25nIHdpdGggZmlsZS4gIEl0J3MgREVD IEMgVjUuMy0wMDYuICBJIHN1c3BlY3QgYSBDIGJ1Zy4KK0knbGwgbGVhdmUgaXQgbGlrZSB0aGlz IGZvciBub3cgdW50aWwgSSBnZXQgYWNjZXNzIHRvIHNvbWUgb3RoZXIgVk1TCit2ZXJzaW9ucy4g IEFub3RoZXIgY2x1ZSBpcyB0aGF0IHdoZW4gYnVpbGRpbmcgdGhlIG5ldHdvcmsgdmVyc2lvbiBJ IGdldCBhCitob3JyaWJsZSB3YXJuaW5nIEkgbmV2ZXIgc2F3IGJlZm9yZSBmcm9tIGEgbW9kdWxl IHRoYXQgaGFzbid0IGJlZW4gdG91Y2hlZAoraW4gYSB2ZXJ5IGxvbmcgdGltZSAoY2t2cnRsLmMp LiAgQWxzbywgaW4gdGhlIG5ldHdvcmsgdmVyc2lvbiwgSSBub3RlIHRoYXQKK3RoZSBGVFAgY29k ZSBpcyBub3QgY29tcGlsZWQgaW4uICBXZSBoYXZlIHRvIHRyeSB0aGlzIGFnYWluIHdpdGggc29t ZQorY29tbWFuZC1saW5lIHN3aXRjaGVzLCBidXQgaXQnbGwgZG8gZm9yIG5vdy4gIGNrdXVzeS5j LCAxOCBOb3YgMjAwOS4KKworLS0tQy1LZXJtaXQgOS4wIEFscGhhLjAxLS0tCisKK0Zyb20gU3Rl dmVuIFNjaHdlZGEgKFNNUyksIHRoZSByZWFsIHNvbHV0aW9uIGZvciB0aGUgVk1TIGNsb3Npbmcg YnJhY2UKK3Byb2JsZW0sIGl0IHdhc24ndCBhIERFQ0MgYnVnLCBpdCB3YXMgYSBtZSBidWcuICBj a3V1c3kuYywgMjAgTm92IDIwMDkuCisKK1JlZGlzY292ZXJlZCB0aGUgbmV3IFZNUyBidWlsZCBv cHRpb25zOiBmIGZvciBMb25nIEZpbGVzLCBpIGZvciBJbnRlcm5hbAorRlRQLiAgIm1ha2UgbW5m IiBkb2Vzbid0IHdvcmsgb24gVk1TIDYuMiwgaXQgbG9va3MgbGlrZSB0aGUgVk1TIGRlZmluaXRp b24KK2ZvciBDS19PRkZfVCBnb3QgbG9zdC4gIFNhbWUgdGhpbmcgd2l0aCAibWFrZSBtZmkiLiAg Q29tZSBiYWNrIHRvIHRoaXMgbGF0ZXIuCisKK0Zyb20gR2VycnkgQmVsYW5nZXIsIGEgZml4IHRv IElOUFVUIC9DT1VOVDpuLiAgY2t1dXM0LmMsIDI2IE5vdiAyMDA5LgorCitBZGRlZCBcZnNxdWVl emUocyksIHJldHVybnMgc3RyaW5nIHMgd2l0aCBsZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNw YWNlCityZW1vdmVkLCBUYWJzIGNvbnZlcnRlZCB0byBTcGFjZXMsIGFuZCBtdWx0aXBsZSBzcGFj ZXMgY29udmVydGVkIHRvIHNpbmdsZQorc3BhY2VzLiAgRm9yIG5vdywgQVNDSUkgb25seSwgbm8g b3B0aW9ucy4gIGNrdXVzci5oLCBja3V1c1syNF0uYywgMjcgTm92IDIwMDkuCisKK0kgd3JvdGUg YSBLZXJtaXQgc2NyaXB0IHRvIHJlYWQgYSBiaWcgZmlsZSBvZiBhZGRyZXNzZXMgb24gU29sYXJp cyA5LAorXGZzcXVlZXplKClpbmcgZWFjaCBsaW5lLiAgQWZ0ZXIgYWJvdXQgMTQwMDAgbGluZXMs IHRoZXJlIHdhcyBhIG1hbGxvYworZmFpbHVyZSBpbiBnZXRuY3QoKSAodGhlIGNvbW1hbmQtZmls ZSByZWFkZXIpLiAgVGhlcmUncyBub3RoaW5nIHdyb25nIHdpdGgKK1xmc3F1ZWV6ZSgpLCB0aGUg ZmFpbHVyZSBpcyBvbiBhIGRlZXBlciBsZXZlbCwgYmVjYXVzZSB0aGUgc2FtZSB0aGluZworaGFw cGVucyBpZiBJIHVzZSBcZnVwcGVyKCkgKHdoaWNoIGlzIHN0cnVjdHVyYWxseSBpZGVudGljYWwg dG8gXGZzcXVlZXplKCkpCitpbiB0aGUgc2FtZSBzY3JpcHQuICBUaGUgcHJvYmxlbSBpcyBub3Qg aW4gZ2V0bmN0KCkgZWl0aGVyLCBiZWNhdXNlIGV2ZXJ5CittYWxsb2MoKSBpcyBmcmVlZCAoSSBj aGVja2VkKS4gIE9uIHRoZSBvdGhlciBoYW5kLCB0aGUgc2FtZSBzY3JpcHQgKHdpdGgKK1xmdXBw ZXIoKSBpbnN0ZWFkIG9mIFxmc3F1ZWV6ZSgpIGNvbXBsZXRlcyBPSyBpbiBDLUtlcm1pdCA4LjAu MjAxLiAgSWYgSQorcmVtb3ZlIHRoZSBmdW5jdGlvbiBjYWxsIChcZnNxdWVlemUoKSBvciBcZnVw cGVyKCkpIGZyb20gdGhlIHNjcmlwdCwgaXQgYWxzbworcnVucyBPSyBpbiA5LjAuICBUaGlzIHNl ZW1zIHRvIHBvaW50IHRoZSBmaW5nZXIgYXQgZm5ldmVsKCksIHdoaWNoIGNvbnRhaW5zCitjb3Vu dGxlc3MgbWFsbG9jJ3MgYW5kIGZyZWUncy4gIEJ1dCBjb21wYXJpbmcgZm5ldmFsKCkgYmV0d2Vl biA4LjAuMjExIGFuZAorOS4wLCBJIGRvbid0IHNlZSBhbnkgZGlmZmVyZW5jZSB0aGF0IHdvdWxk IGV4cGxhaW4gdGhpcyBiZWhhdmlvciAtLSBub3RoaW5nCithdCBhbGwgdGhhdCBpbnZvbHZlcyBt YWxsb2MoKSwgbWFrc3RyKCksIG9yIGZyZWUoKS4gIE5vciBhbnkgcGVydGluZW50CitjaGFuZ2Ug aW4gdGhlIGNhbGxlciAoenpzdHJpbmcpIG9mIGZuZXZhbCgpLiAgMjcgTm92IDMwMDkuCisKK0Fu b3RoZXIgcHJvYmxlbSBpcyB0aGF0IHdoZW4gdGhpcyBoYXBwZW5zLCB0aGUgZXJyb3IgaXMgbm90 IGNhdWdodCAoZS5nLiBieQordGhlIElGIEZBSUwgc3RhdGVtZW50IGFmdGVyIHRoZSBjb21tYW5k IHRoYXQgY29udGFpbnMgdGhlIGZ1bmN0aW9uIGNhbGwpOworaW5zdGVhZCwgQy1LZXJtaXQgcmV0 dXJucyBpbW1lZGlhdGVseSB0byBpdHMgcHJvbXB0LiAgMjcgTm92IDIwMDkuCisKK0l0IGNvdWxk IHNpbXBseSBiZSB0aGF0IHNvbWUgb2YgdGhlIGJ1ZmZlcnMgd2UgYWxsb2NhdGUgYXJlIG11Y2gg YmlnZ2VyIG5vdy4KK0J1dCBhZ2FpbiwgSSBkb24ndCBzZWUgbXVjaCBkaWZmZXJlbmNlIGJldHdl ZW4gOC4wLjIxMSBhbmQgOS4wOyB3ZSB3ZXJlCithbHJlYWR5IGFsbG9jYXRpbmcgMzJLIGNvbW1h bmQtcmVsYXRlZCBidWZmZXJzIChtYWxsb2MoKSB0YWtlcyBhIHNpemVfdCwgYW5kCitzaXplX3Qg aXMgYW4gaW50IGFsbW9zdCBldmVyeXdoZXJlKS4gIEkgYnVpbHQgdGhlIHNhbWUgc291cmNlIG9u IE5ldEJTRCBhbmQKK3JhbiB0aGUgc2FtZSBzY3JpcHQgKHdpdGggXGZxdWVlemUoKSksIGFuZCBp dCB3b3JrZWQgZmluZS4gIExldCdzIHdvcnJ5CithYm91dCB0aGlzIGxhdGVyLCBpZiBpdCBjb21l cyB1cC4gIDI3IE5vdiAyMDA5LgorCitCdWlsdCBPSyBvbiBTaWxpY29uIEdyYXBoaWNzIElSSVgg Ni41IFIxMDAwMDsgcmVndWxhciBidWlsZCBPSywgU1NMIGFuZAorS2VyYmVyb3MgYnVpbGRzIGZh aWxlZC4gIDMwIE5vdiAzMDA5LgorCitUcmllZCB0byBidWlsZCBvbiBEaWdpdGFsIFVuaXggNC4w RiBidXQgaXQgYmxldyB1cCBpbiBja3V0aW8uYywgYXBwYXJlbnRseQorbm90IHJlY29nbml6aW5n IGFueSBvZiB0aGUgdGVybWluYWwgc3RydWN0IHN5bWJvbHMgZnJvbSB0ZXJtaW9zLmguICBUcmll ZAorYWdhaW4gd2l0aCBnY2MsIHNhbWUgdGhpbmcuICBUcmllZCBleHBsaWNpdGx5ICNpbmNsdWRp bmcgPHN5cy90ZXJtaW9zLmg+Cit3aXRoaW4gI2lmZGVmIFRSVTY0LCBzYW1lIHRoaW5nLiAgV2hh dCBjb3VsZCBoYXZlIGNoYW5nZWQ/ICAzMCBOb3YgMjAwOS4KKworQnVpbHQgT0sgb24gTGludXgg UkhFTDUuNC9JdGFuaXVtLTIsIG1ha2UgbGludXguICBUaGUgc2VjdXJlIGJ1aWxkCityZXF1aXJl ZCAiRkxBR1M9LUROT19LUkI1X0lOSVRfRVRTIiBhbmQgYnVpbHQgT0suICAzMCBOb3YgMjAwOS4K KworQnVpbHQgT0sgb24gRGlnaXRhbCBVbml4IDQuMEYgdXNpbmcgIm1ha2Ugb3NmIiBpbnN0ZWFk IG9mICJtYWtlIHRydTY0LTQwZiIuCitJIGRvbid0IGtub3cgd2h5IHRoZSBzcGVjaWZpYyB0YXJn ZXQgZG9lc24ndCB3b3JrLCBidXQgaXQncyBub3Qgd29ydGgKK2NoYXNpbmcgZG93bi4gIDIgRGVj IDIwMDkuCisKK0J1aWx0IE9LIG9uIE1pckJTRCAxMCwgZGVzcGl0ZSBhIGxvdCBvZiBncmF0dWl0 b3VzIGNvbXBpbGVyIHdhcm5pbmdzLiAgQnVpbHQKK09LIG9uIE1pckJTRCAxMCwgT3BlbkJTRCA0 LjUsIGFuZCBGZWRvcmEgMTAuICAzIERlYyAyMDA5LgorCisoVmFyaW91cyBvdGhlciBzdWNjZXNz ZnVsIFVuaXggYnVpbGRzIGluIHRoZXNlIHdlZWtzLi4uKQorCitCdWlsdCBvbiBWTVMgNy4yIGFu ZCA4LjMgd2l0aCBhbmQgd2l0aG91dCBUQ1AvSVAsIG5vIHByb2JsZW1zLiAgMTEgSmFuIDIwMTAu CisKK0J1aWx0IG9uIFZNUyA4LjMgd2l0aCAibWFrZSBmaSIgdG8gaW5jbHVkZSB0aGUgRlRQIGNs aWVudCBhbmQgbG9uZy1maWxlCitzdXBwb3J0IChtaWQgSmFuIDIwMTApLgorCitCdWlsdCBvbiBW TVMgOC4zIHdpdGggVVhDIDUuNiBhbmQgSFAgU1NMIDEuMywgd2hpY2ggaXMgT3BlblNTTCAwLjku N2UuCitJdCBjb21waWxlZCBhbmQgbGlua2VkIE9LIGJ1dCB3aGVuIEkgdHJpZWQgdG8gbWFrZSBh biBGVFAgU1NMIGNvbm5lY3Rpb24KK2l0IGNyYXNoZWQgaW4gU1NMJExJQlNTTF9TSFIsIHdoaWNo IGlzIGNhbGxlZCBmcm9tIHNzbF9hdXRoKCksIGFmdGVyIGhhdmluZworaGFkIFRMUyBhY2NlcHRl ZCBhcyBhbiBhdXRoZW50aWNhdGlvbiB0eXBlLCBidXQgYmVmb3JlIGFjdHVhbGx5CithdXRoZW50 aWNhdGluZy4gIEluIFVuaXg6CisKKyAxOS4gZnRwIG9wZW4gZnRwLnNvbWVjb21wYW55LmNvbSAv dXNlcjpwZ2UuY29tL3Rlc3RfcXVvdGEgL3Bhc3N3b3JkOnh4eHh4eAorQ29ubmVjdGVkIHRvIGZ0 cC5zb21lY29tcGFueS5jb20uCisyMjAtU29tZWNvbXBhbnkgRlRQIHY2LjAgZm9yIFdpblNvY2sg cmVhZHkuLi4KKzIyMCBXZWxjb21lIHRvIHRoZSBvbmxpbmUgc3RvcmFnZSBGVFAgc2VydmVyLiAg UGxlYXNlIGNoZWNrIHRoZSBtYWluIHdlYgorc2l0ZSBmb3Igc3lzdGVtIGFubm91bmNlbWVudHMg YW5kIEFVUC4gKE8pCistLS0+IEFVVEggVExTCisyMzQgQVVUSCBjb21tYW5kIE9LLiBJbml0aWFs aXppbmcgU1NMIGNvbm5lY3Rpb24uCitUTFMgYWNjZXB0ZWQgYXMgYXV0aGVudGljYXRpb24gdHlw ZQorU1NMIERFQlVHIEFDVElWRQorPT5TVEFSVCBTU0wvVExTIGNvbm5lY3Qgb24gQ09NTUFORAor CitJbiBWTVM6CisKKyAxOS4gZnRwIG9wZW4gZnRwLnNvbWVjb21wYW55LmNvbSAvdXNlcjpwZ2Uu Y29tL3Rlc3RfcXVvdGEgL3Bhc3N3b3JkOnh4eHh4eAorQ29ubmVjdGVkIHRvIGZ0cC5zb21lY29t cGFueS5jb20uCisyMjAgU29tZWNvbXBhbnkgRlRQIHY2LjAgZm9yIFdpblNvY2sgcmVhZHkuLi4K Ky0tLT4gQVVUSCBUTFMKKzIzNCBBVVRIIGNvbW1hbmQgT0suIEluaXRpYWxpemluZyBTU0wgY29u bmVjdGlvbi4KK1RMUyBhY2NlcHRlZCBhcyBhdXRoZW50aWNhdGlvbiB0eXBlCitTU0wgREVCVUcg QUNUSVZFCislU1lTVEVNLUYtQUNDVklPLCBhY2Nlc3MgdmlvbGF0aW9uLCByZWFzb24gbWFzaz0w NCwgdmlydHVhbAorYWRkcmVzcz1GRkZGRkZGRjgwMDFBMTIwLCBQQz0wMDAwMDAwMDAwNjhCMTE4 LCBQUz0wMDAwMDAxQgorCitOb3RlOiBUaGUgVW5peCB2ZXJzaW9uIHJlY2VpdmVkIHRoZSBzZWNv bmQgMjIwIHJlc3BvbnNlLCB0aGUgVk1TIHZlcnNpb24gZGlkCitub3QuICBUaGF0J3Mgb2RkLCBp dCdzIHRoZSBzYW1lIGNvZGUuLi4gIDI1IEphbiAyMDEwLgorCitBZGRlZCBzb21lIGVzc2VudGlh bCBkZXRhaWxzIHRvIHRoZSBIRUxQIEZTRUVLIHRleHQuICBja3V1czIuYywgMjUgSmFuIDIwMTAu CisKK0Rpc2NvdmVyZWQgdGhhdCB0aGUgcmVzdWx0IHJldHVybmVkIGJ5IFxmc2VhcmNoKCkgaXMg dG90YWxseSB1bnJlbGlhYmxlLgorVGhpcyBpcyBwcm9iYWJseSB0b28gaGFyZCB0byBmaXguCisK K0ZTRUVLIGRpZCBub3QgcGF5IGF0dGVudGlvbiB0byBTRVQgQ0FTRSwgc2VhcmNoZXMgd2VyZSBh bHdheXMgY2FzZSBzZW5zaXRpdmUuCitGaXhlZCBpbiBja3V1czcuYywgMjYgSmFuIDIwMTAuCisK K0ZTRUVLIGZhaWxlZCB0byBmaW5kIGFueXRoaW5nIGlmIHRoZSBzZWFyY2ggcGF0dGVybiB3YXMg bWF0Y2hlZCBpbiB0aGUgZmlyc3QKK2xpbmUgb2YgdGhlIGZpbGUuICBGaXhlZCBpbiBja3V1czcu YywgMjYgSmFuIDIwMTAuCisKK1xmd29yZCgpIGFuZCBcZnNwbGl0KCkuLi4uICBBbm90aGVyIGNo YW5nZSwgYnV0IG5vdCBiYWNrd2FyZHMtaW5jb21wYXRpYmxlLgorT25lIG1heSBub3cgcHV0IHRo ZSB3b3JkIEFMTCAoanVzdCBsaWtlIHRoYXQsIGFsbCB1cHBlcmNhc2UpIGFzIHRoZSBpbmNsdWRl CitzZXQgKDR0aCBhcmd1bWVudCkgdG8gaW5kaWNhdGUgdGhhdCB0aGVyZSB3aWxsIGJlIG5vIGJy ZWFrIGNoYXJhY3RlcnMgb3RoZXIKK3RoYW4gdGhvc2UgZXhwbGljaXRseSBnaXZlbiBpbiB0aGUg YnJlYWsgc2V0LCBlLmcuIFxmc3BsaXQoXG0oeHgpLCZhLDosQUxMKQorYnJlYWtzIGEgbGluZSBv bmx5IG9uIGEgY29sb24gKDopLCBub3RoaW5nIGVsc2UuICBUaGUgb3JpZ2luYWwgcnVsZXMgZm9y Citja3NwbGl0KCkgd2VyZSBtb3JlIHRoYW4gYSBsaXR0bGUgY291bnRlcmludHVpdGl2ZTogdGhl IGRlZmF1bHQgYnJlYWsgc2V0IGlzCithbGwgbm9uIGFscGhhbnVtcywgYW5kIHRoZSBkZWZhdWx0 IGluY2x1ZGUgc2V0IGlzIGFsbCBhbHBoYW51bXMsIHNvIGlmIHlvdQord2FudGVkIHRvIHBhcnNl IChzYXkpIGEgQ1NWIGZpbGUsIGJyZWFraW5nIG9ubHkgb24gY29tbWEsIHlvdSBoYWQgdG8gdGhp bmsKK29mIGFsbCB0aGUgY2hhcmFjdGVycyB5b3Ugd2FudGVkIHRvIGtlZXAuICBUaGlzIHdheSB5 b3UganVzdCBzYXkgQUxMLgorY2tjbGliLmMsIDI2IEphbiAyMDEwLgorCitTcGVha2luZyBvZiBD U1YgZmlsZXMuLi4gSG93IGNhbiB5b3UgcHV0IGNvbW1hIGFzIGEgZnVuY3Rpb24gYXJndW1lbnQg d2hlbgorY29tbWEgaXMgdGhlIGZ1bmN0aW9uLWFyZ3VtZW50IHNlcGFyYXRvcj8gIFVzZSBvbmUg b2YgdGhlc2UgZm9ybXM6CisKKyBcZnNwbGl0KFxtKHh4KSwmYSwiLCIsQUxMKQorIFxmc3BsaXQo XG0oeHgpLCZhLHssfSxBTEwpCisgXGZzcGxpdChcbSh4eCksJmEsXDQ0LEFMTCkKKyBcZnNwbGl0 KFxtKHh4KSwmYSxcZmNoYXIoNDQpLEFMTCkKKworRnJvbSBKb2huIER1bmxhcCwgVS4gb2YgV2Fz aGluZ3RvbiBBcHBsaWVkIFBoeXNpY3MgTGFiOiAnV2hlbiAic3R0eSAtYSA8CisvZGV2L3R0eVMw IHwgZ3JlcCBjcnRzY3RzIiBzaG93cyAiY3J0c2N0cyIgKG5vdCAiLWNydHNjdHMiKSBhbmQgd2hl biB1c2luZyBhCit0aHJlZSB3aXJlIHNlcmlhbCBpbnRlcmZhY2UgYW5kIHdoZW4gYXNraW5nIGtl cm1pdCB0byBub3QgdXNlIGZsb3cgY29udHJvbAorKHNldCBmbG93IG5vbmUpIHRoZW4gImNrdXRp by5jMSIgKHNlZSBhdHRhY2htZW50cykgZmFpbHMgd2hpbGUgImNrdXRpby5jIgord29ya3MuICBU aGUgcmVzdWx0IG9mICJkaWZmIC11IGNrdXRpby5jMSBja3V0aW8uYyIgaXMgYXR0YWNoZWQgYXMg ImRpZmZzIicuCitja3V0aW8uYywgMjYgSmFuIDIwMTAuCisKK0NoYW5nZWQgdGhlIHllYXIgZnJv bSAyMDA5IHRvIDIwMTAgaW4gdGhlIG1vZHVsZXMgSSB3b3JrZWQgb24gdG9kYXkgYW5kIGluCit0 aGUgaGVyYWxkcywgZXRjLiAgY2tja21haS5jLCBja3V1czUuYywgY2t1dGlvLmMsIGNrY2xpYi5j LCBja3V1czcuYywKKzI2IEphbiAyMDEwLgorCitCdWlsdCBvbiBMaW51eCBGZWRvcmEgQ29yZSAz LCByZWd1bGFyIGFuZCB3aXRoIE9wZW5TU0wgMC45LjdhLiAgQnVpbHQgb24KK1VidW50dSA5LjQg T0ssIGJ1dCBTU0wgYW5kIEtlcmJlcm9zIGJ1aWxkcyBmYWlsZWQgZHVlIHRvIG5vdCBmaW5kaW5n IGxpYnMKK2FuZC9vciBoZWFkZXIgZmlsZXMuICBJJ20gc3VyZSB0aGlzIGNvdWxkIGJlIGZpeGVk Li4uICAyNyBKYW4gMjAxMC4KKworQWRkZWQgU1NMLCBLUkI0LCBhbmQgS1JCNSB0byB0aGUgc3Rh cnR1cCBoZXJhbGQgZm9yIHZlcnNpb25zIHRoYXQgd2VyZQorYnVpbHQgd2l0aCBTU0wsIEtlcmJl cm9zIDQsIG9yIEtlcmJlcm9zIDUuICBCdWlsdCBPSyBvbiBGZWRvcmEgMyB3aXRoCitsaW51eCtr cmI1K3NzbCBhbmQgbmV3IGJhbm5lciBzaG93cyBjb3JyZWN0bHkuICBja3V1czUuYywgMjcgSmFu IDIwMTAuCisKK1NldCBOT19LUkI1X0lOSVRfRVRTIGJ5IGRlZmF1bHQgaW4gY2t1YXRoLmggc2lu Y2Uga3JiNV9pbml0X2V0cygpIGlzIGEgbm8tb3AKK2luIEtlcmJlcm9zIDEuNC54IGFuZCBsYXRl ciBhbmQgaW4gc29tZSBpbnN0YWxsYXRpb25zIGl0IGNhbid0IGJlIGZvdW5kLAord2hpY2ggY2xv YmJlcnMgdGhlIGJ1aWxkLiAgY2t1YXRoLmgsIDI3IEphbiAyMDEwLgorCitBZGFwdGVkIHRvIE1J TklYIDMgMS41LCB0aGUgZmlyc3QgdmVyc2lvbiB0aGF0IGhhcyB2aXJ0dWFsIG1lbW9yeSBhY2Nv cmRpbmcKK3RvIEFuZHkgVCwgd2hvIHNob3VsZCBrbm93LiAgT24gZWFybGllciB2ZXJzaW9ucyAo ZS5nLiBNSU5JWCAzIDEuMikgYW55CithdHRlbXB0IHRvIGJ1aWxkIEMtS2VybWl0IGNhdXNlcyB0 aGUgY29tcGlsZXIgdG8gY3Jhc2guICBOb3cgdGhlIGNvbXBpbGVyCitkb2Vzbid0IGNyYXNoIGJ1 dCBpdCBzcGV3cyBvdXQgY291bnRsZXNzIHdhcm5pbmdzIGFib3V0IG9sZC1mYXNoaW9uZWQKK2Z1 bmN0aW9uIGRlY2xhcmF0aW9ucyB0aGF0IEkgZG9uJ3QgZ2V0IGFueXdoZXJlIGVsc2UuICBUaGUg cmVhbCBwcm9ibGVtcworY2FtZSBpbiBja3V0aW8uYyB3aGVyZSBudW1lcm91cyBzeW1ib2xzIHdl cmUgdW5kZWZpbmVkIGF0IGNvbXBpbGUgdGltZSBhbmQKK3RoZSBQT1NJWCBmdW5jdGlvbiB0Y2dl dHBncnAoKSB3YXMgbm90IGZvdW5kIGF0IGxpbmsgdGltZSwgZXZlbiB0aG91Z2ggdGhlcmUKK2lz IGEgcHJvdG90eXBlIGZvciBpdCBpbiB0aGUgTUlOSVggaGVhZGVyIGZpbGVzLCBhbmQgdGhlcmUg aXMgbm8gYWx0ZXJuYXRpdmUKKyhzaW5jZSBQT1NJWCBkb2Vzbid0IGxldCB1cyB1c2UgaW9jdGwo KSkuICBBbHNvIG5vdGUgdGhhdCB0aGVyZSBpcyBzb21lCitjb25mdXNpb24gb3ZlciB0aGUgY29t cGlsZS10aW1lIHN5bWJvbHMgTUlOSVgsIE1JTklYMiwgTUlOSVgzLCBhbmQgTUlOSVgzMTUuCitZ b3Ugd291bGQgZXhwZWN0IE1JTklYIHRvIG1lYW4gImFueSB2ZXJzaW9uIG9mIE1JTklYIiBidXQg aW4gc29tZSBwYXJ0cyBvZgorY2t1dGlvLmMgaXQgbWVhbnMgTUlOSVggMS4wLiAgSSBzaW5jZXJl bHkgZG91YnQgdGhhdCBDLUtlcm1pdCA5LjAgY2FuIGJlCitidWlsdCBvbiBhbnkgdmVyc2lvbiBv ZiBNaW5peCBiZWZvcmUgMy4xLjUgc28gSSByZW1vdmVkIHRoZSBjb25mdXNpb24gYW5kCittYWRl IE1JTklYIG1lYW4gImFueSBNaW5peCIuICBJdCBidWlsZHMgb24gMy4xLjUgT0sgbm93LCBleGNl cHQgZm9yIHRoZSBGVFAKK2NsaWVudC4gIFRoaXMgY2FuIHByb2JhYmx5IGJlIGZpeGVkIGJ1dC4u LiAgTW9kdWxlcyBjaGFuZ2VkOiBja2NkZWIuaCwKK2NrdXZlci5oLCBja2NtYWkuYywgY2t1dXM1 LmMsIGNrdXRpby5jLCAxIEZlYiAyMDEwLgorCitMYXRlci4uIEFuZHkgc2F5cyBNSU5JWCBkb2Vz IG5vdCBzdXBwb3J0IGpvYiBjb250cm9sLCBzbyBubyBwcm9ncmFtIGlzIGV2ZXIKK2luIHRoZSBi YWNrZ3JvdW5kLiAgVGhhdCBzZXR0bGVzIHRoYXQhICAxIEZlYiAyMDEwLgorCitCdWlsdCBPSyBv biBNaW5peCwgTGludXgsIE1hYyBPUyBYLCBTb2xhcmlzIDksIE5ldEJTRCA1LjAuMS4uLiAgMSBG ZWIgMjAxMC4KKworLS0tQy1LZXJtaXQgOS4wIEFscGhhLjAyLS0tCisKK0Zyb20gQ2hyaXN0aWFu IENvcnRpIGF0IFVuaS1TdHV0dGdhcnQuZGU6IGZpeGVzIHRvIGFsbG93IGJ1aWxkaW5nIG9uIFN1 bk9TCis0LjEsIHdoaWNoIG9uY2Ugd2FzIG15IG1haW4gZGV2ZWxvcG1lbnQgcGxhdGZvcm0gYnV0 IHdoaWNoIGlzIGxvbmctZ29uZSBmcm9tCitoZXJlLiAgY2t1cHR5LmMsIGNrdXRpby5jLCA5IEZl YiAyMDEwLiAgKEhlIHNheXMgaXQgaXMgYWxzbyBuZWNlc3NhcnkgdG8KK2NvbW1lbnQgb3V0IHRo ZSAic3RydWN0IHdpbnNpemUiIGFuZCAic3RydWN0IHR0eXNpemUiIGluIHN5cy9pb2N0bC5oOwor b3RoZXJ3aXNlIHRoZXJlIHdpbGwgYmUgYSBjb25mbGljdCB3aXRoIHN5cy90dHljb20uaCAoaW5j bHVkZWQgYnkgdGVybWlvcy5oKQord2hpY2ggYWxzbyBkZWNsYXJlcyB0aGVzZSBzdHJ1Y3RzLiBC dXQgeW91IG5lZWQgYm90aCBpbmNsdWRlcy4nKQorCitGcm9tIEpvaG4gRHVubGFwLCBhIGZpeCBm b3IgS2VybWl0IHByb3RvY29sIGZpeGVkIHBhY2tldC10aW1lb3V0IGludGVydmFsCitnb2luZyB0 byBhIHVuZXhwZWN0ZWQgdmFsdWUgKG1pc3NpbmcgZWxzZSBjbGF1c2UgaW4gdHdvIHBsYWNlcyku Citja2NmbjIuYywgOSBGZWIgMjAxMC4KKworQWRkZWQgYW4gYWl4ZyB0YXJnZXQgdG8gYnVpbGQg b24gQUlYIHdpdGggZ2NjIHdoZW4gZ2NjIGlzIG5vdCBpbnN0YWxsZWQgYXMKK2NjLCBhbmQgYWxz byBhZGRlZCBDQz0kKENDKSBDQzI9JChDQykgY2xhdXNlcyB0byB0aGUgYWl4IGFuZCBhaXgrc3Ns Cit0YXJnZXRzLiAgV293LCBBSVggcmVhbGx5IGxvc2VzIGJpZ3RpbWUgd2hlbiByZWNlaXZpbmcg ZmlsZXMgdGhyb3VnaCBpdHMgc3NoCitzZXJ2ZXIuICBTdHJlYW1pbmcgY2FuJ3QgYmUgdXNlZCwg c2xpZGluZyB3aW5kb3dzIHJlY292ZXIgZnJvbSBlcnJvcnMgYnV0Cit0aGVyZSBhcmUgdG9ucyBv ZiB0aGVtIHVzaW5nIHRoZSBkZWZhdWx0IDRLIHBhY2tldHM7IDUwMCB3b3JrcyBtdWNoIGJldHRl ci4KK0J1aWx0IHdpdGggSUJNIGNjIGFuZCBnY2MsIGFuZCBhbHNvIHRlc3RlZCAoc3VjY2Vzc2Z1 bGx5KSB0aGUgbmV3IGFpeCtpYm1zc2wKK3RhcmdldCwgaW4gd2hpY2ggdGhlIE9wZW5TU0wgaGVh ZGVycyBhbmQgbGlicyBhcmUgaW4gYSBzdGFuZGFyZCBwbGFjZS4KK21ha2VmaWxlLCA5IEZlYiAy MDEwLgorCitJbiBja3VwdHkuaCwgbWFrZSB0aGUgI2luY2x1ZGUgPHN5cy9pb2N0bC5oPiBiZSAj aWZuZGVmIFNVTk9TNDEuCitGcm9tIENocmlzdGlhbiBDb3J0aS4gIDEwIEZlYiAyMDEwLgorCitC dWlsdCBvbiBWTVMgRTguNC4gIDEyIEZlYiAyMDEwLgorCitUcmllZCB0byBidWlsZCBvbiBhIHJl YWwgVkFYLTExLzc4NSBidXQgdGhlIG1hY2hpbmUgc2VlbXMgdG8gYmUgc2VyaW91c2x5Cit3ZWRn ZWQuICAxMi0xNSBGZWIgMjAxMC4KKworQWRkZWQgbm90ZSB0byBDS1ZLRVIuQ09NIHRvIHRoZSBl ZmZlY3QgdGhlIHRoZSAnZicgb3B0aW9uIGhhcyBubyBlZmZlY3QKK29uIFZBWCBhcmNoaXRlY3R1 cmUuICAxNSBGZWIgMjAxMC4KKworTW92ZWQgdGhlICNpbmNsdWRlICJja3ZydGwuaCIgaW4gdGhl IEZUUCBtb2R1bGUgdG8gYmVsb3cgdGhlIGluY2x1ZGUgZm9yCit1dGltZS5oLCBiZWNhdXNlIGJ1 aWxkaW5nIHRoZSBWTVMgdmVyc2lvbiB3aXRoIHRoZSAnaScgb3B0aW9uIChtZWFuaW5nCisiaW5j bHVkZSBpbnRlcm5hbCBmdHAgY2xpZW50IikgcmVzdWx0cyBpbiAic3RydWN0IHV0aW1idWYgdHAi IGVycm9yaW5nIG91dAorYmVjYXVzZSBzdHJ1Y3QgdXRpbWJ1ZiBpcyBub3QgZGVmaW5lZCB5ZXQg KGF0IGxlYXN0IGluIHNvbWUgdmVyc2lvbiBvZiBWTVMKK3dpdGggc29tZSB2ZXJzaW9uIG9mIEMp LiAgRnJvbSBSb2IgQnJvd24sIGNrY2Z0cC5jLCAyMCBGZWIgMjAxMC4KKworRnJvbSBNYXJ0aW4g Vm9ybGFlbmRlcjogbmV3IGNvZGUgaW4gVk1TIEMtS2VybWl0IGJ1aWxkIHByb2NlZHVyZSB0byBk ZXRlY3QKK09wZW5TU0wgdmVyc2lvbiBhdXRvbWF0aWNhbGx5LiAgY2t2a2VyLmNvbSwgMjIgRmVi IDIwMTAuCisKK0FkZGVkIGNvZGUgdG8gSU5QVVQgY29tbWFuZCB0byBzdHJpcCBBTlNJIGVzY2Fw ZSBzZXF1ZW5jZXMuICBJdCdzIGFjdGl2YXRlZAorYnkgU0VUIFNFU1NJT04tTE9HIFRFWFQuICBj a3V1c3IuaDogYWRkZWQgcHJvdG90eXBlIGZvciBjaGthZXMoKTsKK2NrdWNvbi5jLCBja3VjbnMu YzogbWFkZSBpbmVzY1tdIGFuZCBvbGRlc2NbXSBnbG9iYWwgaW5zdGVhZCBvZiBzdGF0aWM7IAor Y2t1dXM0LmM6IGRvaW5wdXQoKSBjb2RlIGZvciBza2lwcGluZyBlc2NhcGUgc2VxdWVuY2VzLiAg MSBNYXIgMjAxMC4KKworUGV0ZXIgRWljaGhvcm4gY29tcGxhaW5lZCB0aGF0IGlmIHlvdSBtYWtl IGFuIHNzaCBjb25uZWN0aW9uIHdpdGggS2VybWl0LAordGhlbiBsb2cgb3V0IGZyb20gdGhlIHNz aCBob3N0LCBhbmQgdGhlbiB1c2UgYSAiY29ubmVjdCIgY29tbWFuZCB0bworbWFrZSBhIG5ldyBj b25uZWN0aW9uIHRvIHRoZSBzYW1lIGhvc3QgKHdoaWNoIHlvdSBjYW4gZG8gd2l0aCBUZWxuZXQp LAorS2VybWl0IHNheXMgKGUuZy4pOgorCisgRE5TIExvb2t1cC4uLiBDYW4ndCBnZXQgYWRkcmVz cyBmb3Igc3NoIC1lIG5vbmUgc29tZWhvc3RuYW1lCisgU29ycnksIGNhbid0IG9wZW4gc3NoIC1l IG5vbmUgc29tZWhvc3RuYW1lOiBFcnJvciAwCisKK0kgYWRkZWQgY29kZSB0byBkZXRlY3QgYW5k IGhhbmRsZSB0aGlzIGNhc2UgYW5kIGl0IHNlZW1zIHRvIHdvcmsgT0ssIGV2ZW4KK3Rob3VnaCBp dCdzIGtpbmQgb2YgYSBoYWNrLiAgY2t1dXNyLltjaF0sIGNrdXVzNy5jLCAxIE1hciAyMDEwLgor CitUaGVyZSBoYXMgbmV2ZXIgYmVlbiBhIGNsZWFuIHdheSB0byBwdXQgZGVidWdnaW5nIG1lc3Nh Z2VzIChFQ0hPIGNvbW1hbmRzKQoraW4gYSBzY3JpcHQgd2hpY2ggYXJlIGV4ZWN1dGVkIG9ubHkg aWYgZGVidWdnaW5nIGlzIGRlc2lyZWQgYW5kIGlnbm9yZWQKK290aGVyd2lzZS4gIFlvdSdkIGhh dmUgdG8gc2V0IGEgcmFuZG9tIHZhcmlhYmxlIGFuZCB0ZXN0IGl0LCBvciBkZWZpbmUgYQorbWFj cm8gb3Igd2hhdGV2ZXIuICBUbyBtYWtlIHRoaXMgbW9yZSBzdHJhaWdodGZvcndhcmQsIEkgYWRk ZWQgU0VUIERFQlVHCitNRVNTQUdFIE9OL09GRi9TVERFUlIsIGFuZCBhZGRlZCBhIG5ldyBNRVNT QUdFIChzeW46IE1TRykgY29tbWFuZCBmb3IgcHJpbnRpbmcKK2RlYnVnZ2luZyBtZXNzYWdlcyB0 byBzdGRvdXQgaWYgU0VUIERFQlVHIE1FU1NBR0UgaXMgT04gb3IgdG8gc3RkZXJyIGlmIFNFVAor REVCVUcgTUVTU0FHRSBpcyBTVERFUlIuICBja2NtYWkuYywgY2t1dXNbcjIzXS5jLCAxMiBNYXIg MjAxMC4KKworQWxzbyBmb3IgZGVidWdnaW5nIGFuZCBlcnJvciBtZXNzYWdlcywgSSBhZGRlZCBc dihsYXN0Y29tbW1hbmQpIHNvIHRoYXQKK3RoZSBjb21tYW5kIHRoYXQgZmFpbGVkIGNhbiBiZSBp bmNsdWRlZCBpbiBhbiBJRiBGQUlMIG9yIERFQlVHIGVycm9yIG1lc3NhZ2UuCitUaGlzIHdvcmtz IGV2ZW4gZm9yIGNvbW1hbmRzIHRoYXQgaGF2ZSBzeW50YXggZXJyb3JzLgorY2t1dXNyLmgsIGNr dXVzNS5jLCBja3VjbWQuYywgMTIgTWFyIDIwMTAuCisKK0Zyb20gU01TIGZvciBWTVM6ICdBZGRl ZC9kb2N1bWVudGVkIFAzIG9wdGlvbnMgSU5UU0VMRUNULCBPTERGSUIsIE9MRElQLgorRGlzYWJs ZWQgKGNvbW1lbnRlZCBvdXQpIGF1dG9tYXRpYyBkZWZpbml0aW9uIG9mIE5PU0VUVElNRSBmb3Ig Vk1TIGJlZm9yZQorVjcuMiAodm1zX3ZlciAubHRzLiAiVk1TX1Y3MiIpLicgIGNrY2RlYi5oLCBj a2NmdHAuYywgY2tjbmV0LmMsIGNrdXVzWzI1NjddLmMsCitja3ZmaW8uYywgY2t2a2VyLmNvbSwg Y2t2cnRsLltjaF0sIDE1IE1hciAyMDEwLgorCitFeHBvc2VkIGluZXNjW10gYW5kIG9sZGVzY1td IGZvciBWTVMsIHNvIG5ldyBJTlBVVCBjb21tYW5kIGVzY2FwZS1zZXF1ZW5jZQorc3RyaXBwaW5n IGNhbiB3b3JrIChyZWFsbHksIGNoa2FlcygpIGFuZCByZWxhdGVkIGdsb2JhbCB2YXJpYWJsZXMg c2hvdWxkIGJlCittb3ZlZCBvdXQgb2YgY2tbdXZkXWNvbi5jL2NrdWNucy5jIGFuZCBpbnRvIGEg Y29tbW9uIG1vZHVsZTsgZG8gdGhhdCBsYXRlcikuCitja3V1c3IuaCwgY2t2Y29uLmMsIDE1IE1h ciAyMDEwLgorCitCdWlsdCBPSyBvbiBTb2xhcmlzOSwgTWFjIE9TIFggMTAuNC4xMSwgUkhFTDQg KDMyLWJpdCksIFJIRUw1ICg2NC1iaXQpLAorQUlYIDUuMywgU0NPIE9wZW5TZXJ2ciA2LjAuMC4u LiAgMTUgTWFyIDIwMTAuCisKK05vdCBzbyBnb29kIG9uIFZNUywgdHVybnMgb3V0IEkgbWFkZSBh IHR5cG8gaW4gb25lIG9mIHRoZSBWTVMgdXBkYXRlcworKCNpZm5kZWYgT0xESVAgaW5zdGVhZCBv ZiAjaWZkZWYuLi4pLiAgY2tjbmV0LmMsIDE2IE1hciAyMDEwLgorCitNb3JlIGZyb20gU01TIGZv ciBWTVMsIDE2IE1hciAyMDEwOgorIC4gU2V0IE1BWFBBVEggY29ycmVjdGx5IGZvciBWTVMsIGNr Y2RlYi5oLgorIC4gTkFNIC0+IE5BTUwsIFFJTyByZXBsYWNlcyBzeXN0ZW0oICJTRVQgUFJPVEVD VElPTiIpLCBidWdmaXhlcyBpbgorICAgY3Z0ZGlyKCkgYW5kIG56bHRvcigpLCAuLi4gIChTZWUg Y29tbWVudHMpOiBja3ZmaW8uYywgbmV3IGNrdnJtcy5oLgorICAgKFRoZSBSTVMgY29kZSBpbiBj a3ZmaW8uYyB3YXMgYWxtb3N0IHRvdGFsbHkgcmV3cml0dGVuKQorIC4gTW92ZWQgIk5BTVgkKiIg KGFuZCByZWxhdGVkKSBtYWNyb3MgdG8gY2t2cm1zLmgsIGFuZCByZW5hbWVkIHRvCisgICAiTkFN WF8qIiAoYW5kIHNpbWlsYXIgIiQiIC0+ICJfIiksIG1vdmVkICJGSUJfKiIgbWFjcm9zIGZyb20g Y2t2cnRsLmMuCisKK1RoZXNlIGNoYW5nZXMgYXJlIG1haW5seSB0byBhY2NvbW1vZGF0ZSB0aGUg T0RTNSBmaWxlIHN5c3RlbSwgd2hpY2ggaGFzCitsb25nZXIgYW5kIG1peGVkLWNhc2UgZmlsZW5h bWVzLCBhbmQgYWxzbyB0byBleGVjdXRlIGNlcnRhaW4gY29tbWFuZHMKKyhlLmcuIGZvciBzZXR0 aW5nIGZpbGUgcHJvdGVjdGlvbiwgZGVsZXRpbmcgZGlyZWN0b3JpZXMpIGRpcmVjdGx5IGluc3Rl YWQKK29mIHVzaW5nIGEgc3lzdGVtKCkgY29tbWFuZC4KKworQnVpbHQgT0sgb24gVk1TIDguMyAo d2l0aCBhbmQgd2l0aG91dCBuZXR3b3JrIHN1cHBvcnQpLiAgMTYgTWFyIDIwMTAuCisKK0ZhaWxl ZCB0byBidWlsZCBvbiBWTVMgNi4yLiAgMTYgTWFyIDIwMTAuCisKK0ZyZWVCU0QgOC4wIDxsaWJ1 dGlsLmg+IGhhcyBhIGhleGR1bXAoKSBwcm90b3R5cGUgdGhhdCBjb25mbGljdHMgd2l0aCB0aGUK K2hleGR1bXAgbWFjcm8gZGVmaW5lZCBpbiBja2NkZWIuaC4gIFNpbmNlIHRoZSBzYW1lIHRoaW5n IGlzIGxpa2VseSB0byBoYXBwZW4KK2Vsc2V3aGVyZSwgSSBjaGFuZ2VkIHRoZSBLZXJtaXQgbWFj cm8gdG8gY2toZXhkdW1wIGFzIHdlbGwgYWxsIHJlZmVyZW5jZXMgdG8KK2l0OiBja2NkZWIuaCwg Y2tjZnRwLmMsIGNrY25ldC5jLCBja2N0ZWwuYywgY2t1YXRoLmMsIGNrdXRpby5jLCAxNiBNYXIg MjAxMC4KKworQnVpbHQgT0sgb24gRGlnaXRhbCBVbml4IFRydS02NCA0LjBFIHVzaW5nICJtYWtl IG9zZiIsIDE2IE1hciAyMDEwLgorCitUcmllZCBhZ2FpbiB0byBidWlsZCBEaWdpdGFsIFVuaXgg VHJ1NjQgNC4wRSB1c2luZyAibWFrZSB0cnU2NC00MGUiLCBidXQKK3NvbWV0aGluZyBwcmV2ZW50 cyBpdCBmcm9tIHBpY2tpbmcgdXAgdGhlIHRlcm1pb3Mgc3ltYm9scyBhbmQgaXQgYmxvd3MgdXAg aW4KK2NrdXRpby5jLCB3aGVyZWFzIHRoaXMgdXNlZCB0byB3b3JrIGluIGVhcmxpZXIgQy1LZXJt aXQgdmVyc2lvbnMuICBUaGlzIGlzCit0aGUgb25seSBUcnU2NCBzeXN0ZW0gSSBzdGlsbCBoYXZl IGFjY2VzcyB0bywgc28gSSBjYW4ndCB0ZWxsIGlmIGl0J3MgYQorbG9jYWwgcGVjdWxpYXJpdHkg b3Igd2hhdC4gIE5vdGUgdGhhdCBQT1NJWCBpcyBub3QgZGVmaW5lZCBmb3IgdGhpcyBidWlsZC4K K0J1dCBpZiBJIGRlZmluZSBpdCwgSSBnZXQgaW50byB0cm91YmxlIHdpdGggInN0cnVjdCB0aW1l dmFsIi4gIFRyaWVkIGFnYWluCit3aXRoICJLRkxBR1M9LURQT1NJWCAtRE5PVElNRVZBTCIgYnV0 IHRoYXQgZG9lc24ndCBoZWxwLiAgVHJpZWQgIm1ha2UKK2RlYy1vc2YiIGFuZCB0aGF0IHdvcmtl ZCBPSyBidXQgb2RkbHkgZW5vdWdoIGl0IG1ha2VzIGEgS2VybWl0IHdpdGggbGVzcworZmVhdHVy ZXMgdGhhbiAibWFrZSBvc2YiLiAgMTYgTWFyIDIwMTAuCisKK1RvIGdvIHdpdGggTUVTU0FHRSBh bmQgU0VUIERFQlVHIE1FU1NBR0UsIEkgYWRkZWQgSUYgREVCVUcsIHdoaWNoIGlzIHRydWUKK2lm IFNFVCBERUJVRyBNRVNTQUdFIGlzIG5vdCBPRkYgYW5kIGZhbHNlIG90aGVyd2lzZS4gIGNrdXVz ci5oLCBja3V1czYuYywKKzE2IE1hciAyMDEwLgorCitGcm9tIFNNUzogQ29ycmVjdGlvbnMgdG8g bXkgbWVyZ2luZyBvZiBTTVMncyBjaGFuZ2VzLCBja2NmdHAuYywgY2t2cnRsLmguCitCdWlsZHMg T0sgb24gVk1TIDYuMiBub3cuICBBbHNvIGRpZCBhbiBTU0wgYnVpbGQgb24gVk1TIDguMyB3aXRo IE9wZW5TU0wKK20wLjkuN2UgYW5kICJPUEVOU1NMX0RJU0FCTEVfT0xEX0RFU19TVVBQT1JUIiB3 YXMgaW5jbHVkZWQgaW4gUDMKK2F1dG9tYXRpY2FsbHkgYnkgTWFydGluIFYncyBhZGRpdGlvbiB0 byBja3ZrZXIuY29tLiAgMTcgTWFyIDIwMTAuCisKK0Zyb20gU01TOiAjaW5jbHVkZSA8dHlwZXMu aD4gZWFybGllciBmb3IgVk1TIGluIGNrY2RlYi5oIHRvIHBpY2sgdXAgb2ZmX3QKK2JlZm9yZSBp dCBpcyByZWZlcmVuY2VkLiAgVGhpcyBhbGxvd3MgQy1LZXJtaXQgdG8gY29tcGlsZSBvbiBWTVMv QWxwaGEgNi4yCitidXQgbGlua2luZyBmYWlscyBvbiBmc2Vla28oKSBhbmQgZnRlbGxvKCkgKGFu ZCB5ZXQsIGEgZnVuY3Rpb25hbCBleGVjdXRhYmxlCitpcyBjcmVhdGVkLCBhbmQgRlNFRUsgd29y a3MgcmlnaHQpLiAgQnVpbGRzIHRoZSBzYW1lIHdheSB3aXRoIG5vIHByb2JsZW1zIGF0CithbGwg b24gVk1TIDguMyAvIEFscGhhLiAgSW4gdGhpcyBjYXNlIHdlIGdldCB0aGUgZnVsbCA2NC1iaXQg YXJpdGhtZXRpYy4uLgorV2VsbCwgNjIgYml0czoKKworICBBVExBUzo6Qy1LZXJtaXQ+KCBeIDIg NjMpCisgICA5MjIzMzcyMDM2ODU0Nzc1MDAwLjAKKyAgQVRMQVM6OkMtS2VybWl0PiggXiAyIDYy KQorICAgNDYxMTY4NjAxODQyNzM4NzkwNAorCit3aGVyZWFzIG9uIFZNUyA2LjIgd2UgZ2V0IGlu dGVnZXJzIG9ubHkgdXAgdG8gKF4gMiAzMCkuICAxNyBNYXIgMjAxMC4KKworQ2hhbmdlZCB0aGUg Vk1TIGJ1aWxkIHByb2NlZHVyZSB0byBlbmFibGUgbGFyZ2UgZmlsZSBzdXBwb3J0IGF1dG9tYXRp Y2FsbHkKK2ZvciBub24tVkFYIGFuZCBWTVMgNy4zIG9yIGdyZWF0ZXIuICBObyByZWFzb24gbm90 IHRvIGluY2x1ZGUgdGhpcyBmZWF0dXJlLgorQ2hhbmdlZCB0aGUgc2Vuc2Ugb2YgdGhlIEYgb3B0 aW9uIHRvIERJU0FCTEUgbGFyZ2UgZmlsZSBzdXBwb3J0IGluIHRoZQordW5saWtlbHkgY2FzZSB0 aGF0IEMtS2VybWl0IGlzIGJlaW5nIGJ1aWx0IG9uIGEgc3VpdGFibGUgcGxhdGZvcm0gYnV0IHRo ZQorQyBsaWJyYXJ5IGlzIG9sZGVyIHRoYW4gVk1TNzNfQUNSVEwtVjAyMDAsIGluIHdoaWNoIGNh c2UgZnNlZWtvKCkgYW5kCitmdGVsbG8oKSB3aWxsIGNvbWUgdXAgbWlzc2luZyBhdCBsaW5rIHRp bWUuICBja3ZrZXIuY29tLCAxOCBNYXIgMjAxMC4KKworQ2hhbmdlZCBWTVMgYnVpbGQgcHJvY2Vk dXJlIHRvIGluY2x1ZGUgdGhlIEZUUCBjbGllbnQgaW4gYW55IG5ldHdvcmsgYnVpbGQKK2J5IGRl ZmF1bHQuICBDaGFuZ2VkIHRoZSBzZW5zZSBvZiB0aGUgSSBvcHRpb24gdG8gZXhjbHVkZSB0aGUg RlRQIGNsaWVudCwKK2luIGNhc2UgYW55Ym9keSB3b3VsZCB3YW50IHRvIGRvIHRoYXQuICBja3Zr ZXIuY29tLCAxOCBNYXIgMjAxMC4KKworRnJvbSBTTVM6IHVwZGF0ZWQgZGVwZW5kZW5jaWVzIGlu IENLVktFUi5DT00sIGZpeCB0aGUgImRvbid0IHJlaW5jbHVkZSBtZSIKK2NsYXVzZSBpbiBDS1ZS VEwuSC4gIDE5IE1hciAyMDEwLgorCitCdWlsdCBPSyBvbiBWTVMgNi4yIGFuZCA4LjMgd2l0aCBh bmQgd2l0aG91dCBuZXR3b3JraW5nLiAgTGFyZ2UgZmlsZSBzdXBwb3J0CitpbmNsdWRlZCBhdXRv bWF0aWNhbGx5IGluIFZNUyA4LjMgIEZUUCBjbGllbnQgaW5jbHVkZWQgYXV0b21hdGljYWxseSBp biBib3RoCituZXR3b3JrIGJ1aWxkcy4gIDE5IE1hciAyMDEwLgorCitDaGFuZ2VkIGhleGR1bXAo KSB0byBja2hleGR1bXAoKSBpbiBja19jcnAuYywgd2hpY2ggSSBtaXNzZWQgYmVmb3JlLgorMTkg TWFyIDIwMTAuCisKKy0tLUMtS2VybWl0IDkuMCBBbHBoYS4wMy0tLQorCitJbiBIUC1VWCB3aXRo IHRoZSBidW5kbGVkLW5vbiBBTlNJIGNvbXBpbGVyLCB3ZSBnZXQgd2FybmluZ3MgYWJvdXQgZnVu Y3Rpb25zCitzdWNoIGFzIGVuZHVzZXJzaGVsbCgpLCB3aGljaCBhcmUgZGVjbGFyZWQgdm9pZCBp biB0aGUgaGVhZGVyIGZpbGVzLiAgQnV0IGluCitub24tQU5TSSBidWlsZHMgd2UgZGVmaW5kIFZP SUQgdG8gYmUgaW50IHJhdGhlciB0aGFuIHZvaWQsIHNvIG91ciBwcm90b3R5cGVzCithcmUgd3Jv bmcuICBJIGNoZWNrZWQgdGhhdCBIUC1VWCA5LCAxMCwgYW5kIDExIGFsbCBoYXZlIHZvaWQgZGF0 YXR5cGUgYW5kCitjaGFuZ2VkIHRoZSBkZWZpbml0aW9uIG9mIFZPSUQgdG8gdm9pZCBpbiB0aG9z ZSBjYXNlcy4gIGNrY2RlYi5oLCAyOSBNYXIgMjAxMC4KKworRml4ZWQgYSB0eXBvIGluIGEgZGVi dWcoKSBzdGF0ZW1lbnQgaW4gY2tzcGxpdCgpIHRoYXQgd2FzIGNhdXNpbmcgc29tZQord2Fybmlu Z3MuICBja2NsaWIuYywgMjkgTWFyIDIwMTAuCisKK0RpdHRvIGluIHRsc19sb2FkX2NlcnRzKCku ICBja19zc2wuYywgMjkgTWFyIDIwMTAuCisKKyJtYWtlIGhwdXgxMDAwbytzc2wiIGZpbGVzIHdp dGg6CisvdXNyL2Njcy9iaW4vbGQ6IFVuc2F0aXNmaWVkIHN5bWJvbHM6CisgICBfX3Vtb2RkaTMg KGNvZGUpCisgICBfX3VkaXZkaTMgKGNvZGUpCisgICBfX2VwcmludGYgKGNvZGUpCisKK0l0IGFw cGVhcnMgdGhhdCBPcGVuU1NMICgwLjkuN2MgaW4gdGhpcyBjYXNlKSByZXF1aXJlcyAtbGdjYy4K K0FuZCBpbmRlZWQgaHB1eDEwMDBnY2Mrc3NsIGJ1aWxkcyBmaW5lLiAgMjkgTWFyIDIwMTAuCisK K1RoZXJlIGFyZSB2YXJpb3VzIHdhcm5pbmdzIGluIHRoZSBTU0wgY29kZSBpbiBja3V0aW8uYywg Y2tjZnRwLmMsIGFuZAorY2tjbmV0LmMgYWJvdXQgcG9pbnRlcnMgbm90IGJlaW5nIGFzc2lnbm1l bnQgY29tcGF0aWJsZSwgYnV0IEkgaGF2ZSBsZWFybmVkCitmcm9tIGV4cGVyaWVuY2Ugbm90IHRv IHRyeSB0byBmaXggdGhlc2UgKHNlZSBub3RlcyBmcm9tIDYgT2N0IDIwMDkpLgorMjkgTWFyIDIw MTAuCisKK2Nvbm5lY3QocywgKHN0cnVjdCBzb2NrYWRkciAqKSZoaXNjdGxhZGRyLCBzaXplb2Yg KGhpc2N0bGFkZHIpKTogSW4gRlRQLAordGhpcyBkb2Vzbid0IHdvcmsgb24gUkhFTDUgLyBNYWMg T1ggWCA2LjEvMiA2NC1iaXQuICBCdXQgdGhlIGNvbm5lY3QoKSBpbgorVGVsbmV0IHdvcmtzLiAg T24gTWFjIE9TIFggNi4yIEkgdHJpZWQgY2hhbmdpbmcgdGhlIHNvY2tldCgpIGNhbGwgdG8gYmUg bGlrZQordGhlIG9uZSBpbiBja2NuZXQuYyBmb3IgVGVsbmV0LCBidXQgaXQgbWFkZSBubyBkaWZm ZXJlbmNlLiAgT24gYSBSSEVMNS40CitzeXN0ZW0gb24gaTM4NiwgRlRQIHdvcmtzIGZpbmUsIHNv IGl0J3Mgbm90IHRoZSBSZWQgSGF0IHZlcnNpb24uICBPbiBEaWdpdGFsCitVbml4IDQuMEUgNjQt Yml0LCBzYW1lIHRoaW5nOgorCisgIDExOjIzOjEwLjcyMiBmdHBfaG9va3VwW2tlcm1pdC5jb2x1 bWJpYS5lZHVdPTIxCisgIDExOjIzOjEwLjcyMiBmdHAgaG9va3VwIEFba2VybWl0LmNvbHVtYmlh LmVkdV0KKyAgMTE6MjM6MTAuNzIyIGZ0cCBob29rdXAgQ1trZXJtaXQuY29sdW1iaWEuZWR1XQor ICAxMToyMzoxMC43MjIgZnRwIGhvb2t1cCBzb2NrZXQ9NAorICAxMToyMzoxMC43MjIgZnRwIGhv b2t1cCBIQUREUkxJU1QKKyAgMTE6MjM6MTAuNzIzIGZ0cCBob29rdXAgY29ubmVjdCBmYWlsZWQ9 MTMKKyAgMTE6MjM6MTAuNzIzIGZ0cCBob29rdXAgYmFkCisKKzEzID0gUGVybWlzc2lvbiBkZW5p ZWQ6CisKKyAgW0VBQ0NFU1NdIFNlYXJjaCBwZXJtaXNzaW9uIGlzIGRlbmllZCBmb3IgYSBjb21w b25lbnQgb2YgdGhlIHBhdGggcHJlZml4OworICAgIG9yIHdyaXRlIGFjY2VzcyB0byB0aGUgbmFt ZWQgc29ja2V0IGlzIGRlbmllZC4KKworT24gR2VudG9vIExpbnV4LCBhbHNvIG9uIEFscGhhLCB0 aGUgZXJybm8gaXMgNTE6IE5ldHdvcmsgaXMgdW5yZWFjaGFibGUuCitDbGVhcmx5IHNvbWUgZGF0 YSB0eXBlIGluIHRoZSBzb2NrZXRzIHN0cnVjdHMgaXMgb3V0IG9mIHdoYWNrLgorCitUaGUgdGhp cmQgY29ubmVjdCgpIGFyZ3VtZW50IGlzICJhZGRyZXNzIGxlbmd0aCIuICBUaGUgYWRkcmVzcyBp cyBhCitzdHJ1Y3Qgc29ja2FkZHIuICBBYm91dCB0aGUgdGhpcmQgYXJndW1lbnQsIFJIRUw1ICJt YW4gY29ubmVjdCIgc2F5czoKKworICBUaGUgdGhpcmQgYXJndW1lbnQgb2YgY29ubmVjdCgpIGlz IGluIHJlYWxpdHkgYW4gaW50IChhbmQgdGhpcyBpcyB3aGF0IAorICA0LnggQlNEIGFuZCBsaWJj NCBhbmQgbGliYzUgaGF2ZSkuICBTb21lIFBPU0lYIGNvbmZ1c2lvbiByZXN1bHRlZCBpbiAKKyAg dGhlIHByZXNlbnQgc29ja2xlbl90LCBhbHNvIHVzZWQgYnkgZ2xpYmMuICBTZWUgYWxzbyBhY2Nl cHQoMikuCisKK0J1aWxkaW5nIG9uIFJIRUw1IG9uIHg4Nl82NCwgd2hlcmUgc2l6ZV90IGlzIDgg YW5kIHNvY2tsZW5fdCBpcyA0LCBJIGdldCBhCit3YXJuaW5nOgorCisgIGNrY2Z0cC5jOiBJbiBm dW5jdGlvbiAnZnRwX2hvb2t1cCc6CisgIGNrY2Z0cC5jOjE0NjY3OiB3YXJuaW5nOgorICAgY29t cGFyaXNvbiBpcyBhbHdheXMgdHJ1ZSBkdWUgdG8gbGltaXRlZCByYW5nZSBvZiBkYXRhCisKK1Jl ZmVycmluZyB0bzoKKworICBpZiAoaGlzY3RsYWRkci5zaW5fYWRkci5zX2FkZHIgIT0gKHVuc2ln bmVkIGxvbmcpIC0xKQorCitUaGlzIHNlZW1zIHRvIGJlIHRoZSBwcm9ibGVtOyBpZiBJIHJlbW92 ZSB0aGUgKHVuc2lnbmVkIGxvbmcpIGNhc3QgKGluIHR3bworcGxhY2VzKSwgdGhlIHByb2JsZW0g Z29lcyBhd2F5LiAgQWN0dWFsbHkgd2hhdCBJIHNob3VsZCBiZSBjb21wYXJpbmcgaXQgd2l0aAor aXMgSU5BRERSX05PTkUsIHdoaWNoIGlzIGRlZmluZWQgYXBwcm9wcmlhdGVseSBpbiBzb21lIGhl YWRlciBmaWxlLCBlLmcuIGFzCisweGZmZmZmZmZmLiAgQWxzbyBJIGRlZmluZSBpdCBleHBsaWNp dGx5IGFzIC0xIGlmIGl0IGlzIG5vdCBkZWZpbmVkIGluIGFueQoraGVhZGVyIGZpbGUgKGFzIGlz IHRoZSBjYXNlIGluIFNvbGFyaXMgOSkuICBUZXN0ZWQgT0sgb24gNjQtYml0IFJIRUw1LAorMzIt Yml0IFJIRUw1LCBEaWdpdGFsIFVuaXggNC4wRSA2NC1iaXQsIFNvbGFyaXMgOSAzMi1iaXQsIE1h YyBPUyBYIDEwLjQuMTEKKzMyLWJpdCwgTWFjIE9TIFggMTAuNi4zIDY0LWJpdCwgQUlYIDUuMywg R2VudG9vIExpbnV4IDIuNi4zMSBvbiBBbHBoYQorNjQtYml0LCBOZXRCU0QgNS4wLjEgMzItYml0 Li4uLiAgY2tjZnRwLmMsIDI5IE1hciAyMDEwLgorCistLS1DLUtlcm1pdCA5LjAgQWxwaGEuMDQt LS0KKworWWVzdGVyZGF5J3MgVk9JRCByZWRlZmluaXRpb24gY2F1c2VkIHByb2JsZW1zIGZvciBI UC1VWCBpbiBja3V1c3guYywgaW4gdGhlCitjdXJzZXMgc2VjdGlvbiB3aGVyZSBWT0lEIGlzIHVu ZGVmJ2QgYW5kIG5vdCB1c2VkIHRvIGF2b2lkIGEgY29uZmxpY3Qgd2l0aAorY3Vyc2VzLmguICBB cyBhIHdvcmthcm91bmQgSSBkZWZpbmVkIGEgbmV3IG1hY3JvIENLVk9JRCB3aXRoIHRoZSBzYW1l CitkZWZpbml0aW9uIGFzIFZPSUQgYW5kIHVzZWQgaXQgaW4gdGhlIG9mZmVuZGluZyBzZWN0aW9u IG9mIGNrdXVzeC4gIFRoZSByZWFsCitzb2x1dGlvbiBpcyB0byByZXBsYWNlIGFsbCByZWZlcmVu Y2VzIHRvIFZPSUQgd2l0aCBDS1ZPSUQgKHNpbmNlIFZPSUQgaXMKK2luY3JlYXNpbmdseSBsaWtl bHkgdG8gY2F1c2UgY29uZmxpY3RzKSwgYnV0IGEgbWFzcyBzZWFyY2ggYW5kIHJlcGxhY2UgaXMK K25vdCB3aXRob3V0IHJpc2tzLiAgY2tjZGViLmgsIGNrdXVzeC5jLCAzMCBNYXIgMjAxMC4KKwor Q2hhbmdlZCBWT0lEIGFuZCBDS1ZPSUQgZGVmaW5pdGlvbiB0byBiZSAndm9pZCcgZm9yIGFsbCBI UC1VWCAodmVyaWZpZWQgYnkKK1BldGVyRSBiYWNrIHRvIEhQLVVYIDYuNSwgMTk4OSkuICBTdGls bCBuZWVkIHRvIGNoZWNrIHRoaXMgb24gSFAtVVggNS4yMTsKK2lmIHRoYXQncyBhbiBleGNlcHRp b24gaXQgY2FuIGJlIGRvbmUgaW4gdGhlIG1ha2VmaWxlLiAgY2tjZGViLmgsIDMwIE1hciAyMDEw LgorCitUaGUgY2hhbmdlIEkgbWFkZSB0byBhbGxvdyBDT05ORUNUIHRvIHJlZXN0YWJsaXNoIGEg cHJldmlvdXMgU1NIIGNvbm5lY3Rpb24KK3ByZXZlbnRlZCBhIG5ldyBTU0ggY29ubmVjdGlvbiB0 byBhIGRpZmZlcmVudCBob3N0IHRvIGJlIG1hZGUuICBGaXhlZCBpbgorY2t1dXM3LmMsIDMwIE1h ciAyMDEwLgorCitGaXhlZCBtaXN0YWtlbiBleHRlcm4gZGVjbGFyYXRpb25zIG9mIGtyYjRfZXJy bm8gYW5kIGtyYjVfZXJybm8gYXMgc3RyaW5ncworaW4gbnZsb29rKCk7IHRoZXkgYXJlIGludHMu IEJ1aWx0IE9LIG9uIE1hYyBPUyBYIDEwLjYuMy4gY2t1dXM0LmMsIDMwIE1hciAyMDEwLgorCitB IGZpeCB0byBUcnVzdGVkIEhQLVVYIG1ha2VmaWxlIHRhcmdldCBmcm9tIFBldGVyRSwgdG8gYWNj b3VudCBmb3IgdGhlCitlcXVpdmFsZW5jZSBvZiArb3BlbnNzbCBhbmQgK3NzbCBhcyB0YXJnZXQg c3VmZml4ZXMuICAzMCBNYXIgMjAxMC4KKworQWRkZWQgYSBuZXcgZnVuY3Rpb24gXGZjdnRjc2V0 cyhzdHJpbmcsY3NldDEsY3NldDEpIHRoYXQgY29udmVydHMgYSBzdHJpbmcKK2Zyb20gb25lIGNo YXJhY3RlciBzZXQgdG8gYW5vdGhlci4gIFRoZSBjc2V0cyBhcmUgRmlsZSBDaGFyYWN0ZXItU2V0 IG5hbWVzLgorY2t1dXM0LmMsIDMxIE1hciAyMDEwLgorCitBZGRlZCBhIG5ldyBmdW5jdGlvbiBc ZmRlY29kZWhleChzdHJpbmcscHJlZml4KSB0aGF0IGRlY29kZXMgYSBzdHJpbmcKK2NvbnRhaW5p bmcgcHJlZml4ZWQgaGV4IGJ5dGVzLiAgRGVmYXVsdCBwcmVmaXggaXMgJSUsIGJ1dCBhbnkgcHJl Zml4IG9mCitvbmUgb2YgdHdvIGNoYXJzIChzdWNoIGFzICUgb3IgMHgpIGNhbiBiZSBzcGVjaWZp ZWQuICBja3V1c3IuaCwgY2tjbGliLmgsCitja2NsaWIuYywgY2t1dXNyLmMsIDMxIE1hciAyMDEw LgorCitSaWNoYXJkIE5vbGRlIHJlcG9ydHMgdGhhdCBLZXJtaXQgY2FuJ3QgZmluZCAtbHBhbSBv biBGZWRvcmEgMTIgYmVjYXVzZSBpdCdzCitpbiAvbGliIHJhdGhlciB0aGFuIC91c3IvbGliLiAg UkhFTDUgaGFzIHN5bWxpbmtzLCBGQzEyIHNob3VsZCB0b28uICBBZGRlZCBhCitub3RlIHRvIHRo ZSBtYWtlZmlsZS4gIDEgQXByIDIwMTAuCisKK0J1aWxkIG9uIFNvbGFyaXMgMTEgZm9yIHRoZSBm aXJzdCB0aW1lLiAgSGFkIHRvIGFkanVzdCBja3V2ZXIuaCB0byBnZXQgdGhlCit2ZXJzaW9uIGhl cmFsZCByaWdodC4gIFRoaXMgd2FzIG9uIGEgYm94IHRoYXQgcmVwb3J0ZWQgaXRzIGFyY2hpdGVj dHVyZSBhcworaTg2cGMuICAxIEFwciAyMDEwLgorCitBZGRlZCBNSU1FIGNoYXJhY3Rlci1zZXQg bmFtZXMgYXMgaW52aXNpYmxlIHN5bm9ueW1zIGluIHRoZSBmaWxlIGFuZAordGVybWluYWwgY2hh cmFjdGVyLXNldCB0YWJsZXMsIGZjc3RhYltdIGFuZCB0Y3N0YWJbXS4gIE5vdGUgdGhhdCBub3Qg YWxsIHRoZQorY2hhcmFjdGVyIHNldHMga25vd24gdG8gS2VybWl0IGFyZSByZWdpc3RlcmVkIGlu IE1JTUUuICBCdXQgYXQgbGVhc3Qgbm93CitNSU1FLXJlZ2lzdGVyZWQgY2hhcmFjdGVyIHNldHMg Y2FuIGJlIHJlZmVycmVkIHRvIGJ5IHRoZWlyIE1JTUUgbmFtZXMsIGUuZy4KK0lTTy04ODU5LTEs IElTTzY0Ni1FUywgSUJNNDM3LCBXSU5ET1dTLTEyNTIuICBUaGVzZSBhcmUgbm90IGxpc3RlZCBp ZiB5b3UKK3R5cGUgPyBpbiBhIGZpZWxkIHRoYXQgaXMgcGFyc2luZyB0aGVtLCB1bmxlc3MgeW91 IHR5cGUgYSBsZXR0ZXIgZmlyc3QsCitlLmcuICJpPyIgbGlzdHMgSVNPLSBhbmQgSUJNIHNldCBu YW1lcy4gIExhdGVyIG1heWJlIEknbGwgbWFrZSBwYXJhbGxlbAordGFibGVzLCBvciBrZXl3b3Jk IGF0dHJpYnV0ZSBiaXQgdGhhdCBzYXlzIHdoZXRoZXIgYSBuYW1lIGlzIE1JTUUgb3Igbm90Lgor VGhlIHJlYWwgYmVuZWZpdCBvZiB0aGlzIGNoYW5nZSBpcyB0aGF0IG5vdyBLZXJtaXQgY2FuIHRh a2UgaXRzCitjaGFyYWN0ZXItc2V0IG5hbWVzIGZyb20gZXh0ZXJuYWwgc291cmNlcyBsaWtlIGVt YWlsIGhlYWRlcnMgb3Igd2ViIGxvZ3MuCitja3V4bGEuYywgMSBBcHIgMjAxMC4KKworQ2hhbmdl ZCB0aGUgSUYgY29tbWFuZCB0byBhY2NlcHQgYSBiYXJlIG1hY3JvIG5hbWUgaXRzIGNvbmRpdGlv bi4gIFRoaXMgd2lsbAorcGFyc2UgYW5kIGV4ZWN1dGUgY29ycmVjdGx5IGlmIHRoZSBtYWNybyBp cyBkZWZpbmVkIGFuZCBpZiBpdCBoYXMgYSBudW1lcmljCit2YWx1ZSwgb3IgaWYgaXQgaXMgbm90 IGRlZmluZWQsIGluIHdoaWNoIGNhc2UgaXQgZXZhbHVhdGVzIHRvIDAgKEZBTFNFKS4gIElmCitp dCBpcyBkZWZpbmVkIGJ1dCBoYXMgYSBub24tbnVtZXJpYyB2YWx1ZSwgYSBwYXJzZSBlcnJvciBv Y2N1cnMuICBja3V1czYuYywKKzIgQXByIDIwMTAuCisKK0FkZGVkIFxmc3RyaW5ndHlwZSgpIGZ1 bmN0aW9uLiAgR2l2ZW4gYSBzdHJpbmcgYXJndW1lbnQsIGl0IHRlbGxzIHdoZXRoZXIKK3RoZSBz dHJpbmcgaXMgN2JpdCwgOGJpdCwgdXRmOCwgYmluYXJ5LCBldGMuICBja3V1c3IuaCwgY2t1dXNb NHhdLmMsCisyIEFwciAyMDEwLgorCitEaWQgYSBmZXcgYnVpbGRzIHRvIG1ha2Ugc3VyZSB0aGVy ZSB3ZXJlIG5vIGJvb2Jvb3MuICBTb2xhcmlzIDksIE5ldEJTRAorNS4wMSwgTGludXggUkhFTDQs IEhQLVVYIDEwLjIwIChub24tQU5TSSBjb21waWxlciBhbmQgQU5TSSBvcHRpbWl6aW5nCitjb21w aWxlciksIE1hYyBPUyBYIDEwLjQuMTEsIFNDTyBPU1IgNi4wMC4gIDUgQXByIDIwMTAuCisKKy0t LUMtS2VybWl0IDkuMCBBbHBoYS4wNS0tLQorCitJbmNyZWFzZWQgbWF4aW11bSB2YXJpYWJsZSBu YW1lIGxlbmd0aCBmcm9tIDRLIHRvIDE2Sy4gVmVyaWZpZWQgdGhhdAordG9vLWxvbmcgbmFtZXMg YXJlIGNhdWdodCBhbmQgcmVjb3ZlcmVkIGZyb20gY29ycmVjdGx5LiAgY2t1dXNyLmgsIDYgQXBy IDIwMTAuCisKK0ltcGxlbWVudGVkIGEgbmV3IFxmc3BsaXQoKSBvcHRpb24gZm9yIHBhcnNpbmcg Q1NWIGZpbGVzLCB3aGljaCB0dXJucyBvdXQgdG8KK2JlIGEgbGl0dGxlIGNvbXBsaWNhdGVkLCBi ZWNhdXNlIHRoZSBzZXBhcmF0b3IgaXMgbm90IGp1c3QgYSBjb21tYSwgYnV0IGEKK2NvbW1hIGFu ZCBhbGwgaXRzIHN1cnJvdW5kaW5nIHNwYWNlcy4gIEFsc28gdGhlcmUgYXJlIHNwZWNpYWwgcXVv dGluZyBydWxlcworZm9yIGZpZWxkcyB3aXRoIGVtYmVkZGVkIGNvbW1hcyBhbmQgZmllbGRzIHdp dGggZW1iZWRkZWQgcXVvdGVzLiAgY2tjbGliLmMsCis3IEFwciAyMDEwLgorCistLS1DLUtlcm1p dCA5LjAgQWxwaGEuMDYtLS0KKworVk1TIGNoYW5nZXMgZnJvbSBTTVMuICBUaGV5IGJ1aWxkIE9L LCBLZXJtaXQgZmlsZSB0cmFuc2ZlcnMgYXJlIHN0aWxsIE9LLAorYnV0IEZUUCB0ZXh0LW1vZGUg R0VUcyBhbHdheXMgaGFuZyBvbiB0aGUgMTB0aCA4SyBuZXR3b3JrIHJlYWQuICBDb3VsZG4ndAor Z2V0IGEgZGVidWcgbG9nIHRoaXMgdGltZS4gIGNrY21haS5jLCBja3ZmaW8uYywgY2t2cm1zLmgs IGNrdmtlci5jb20uCis4IEFwciAyMDEwLgorCitDaGFuZ2luZyBWTkFNTCBmcm9tIDRLIHRvIDE2 SyBicm9rZSB0aGUgYnVpbGQgb24gSFAtVVggOS4gIFB1dCBpdCBiYWNrIHRvCis0Sy4gIDkgQXBy IDIwMTAuCisKK0pvaG4gRHVubGFwLCBydW5uaW5nIGRheXMtbG9uZyBzdHJlc3MgdGVzdHMgYmV0 d2VlbiBFLUtlcm1pdCBhbmQgQy1LZXJtaXQsCitmb3VuZCBhIGJ1ZyBpbiB0aGUgcGFja2V0LXJl YWRpbmcgYW5kIC1kZWNvZGluZyBjb2RlOiBJZiBhIE5BSyBwYWNrZXQKK2Fycml2ZXMgd2l0aCBp dHMgbGVuZ3RoIGZpZWxkIGNvcnJ1cHRlZCB0byBpbmRpY2F0ZSBhIGJpZ2dlciBzaXplLCBhbmQg dGhlcmUKK2FyZSBlbm91Z2ggYnl0ZXMgZm9sbG93aW5nIGluIHRoZSBwaXBlbGluZSwgdHRpbmwo KSB3aWxsIHJldHVybiBhIHRvby1sb25nCitwYWNrZXQgKGlmIHRoZXJlIGFyZSBub3QgZW5vdWdo IGJ5dGVzIHdhaXRpbmcgdG8gYmUgcmVhZCwgdGhlbiB0dGlubCgpIHdpbGwKK3Byb3Blcmx5IHRp bWUgb3V0KS4gIEluIHRoZSBiYWQgY2FzZSBycGFjaygpIHRydXN0cyB0aGUgcGFja2V0IGxlbmd0 aCwgdXNlcworaXQgYXMgdGhlIGJhc2lzIGZvciBjb21wdXRhdGlvbiBvZiB0aGUgYmxvY2stY2hl Y2sgbGVuZ3RoLCB3aGljaCBpcyB0aGVuCit1c2VkIHRvIGFjY2VzcyBtZW1vcnkgdGhhdCBtaWdo dCBub3QgYmUgdGhlcmUsIGNhdXNpbmcgKGF0IGxlYXN0IG9uIEpvaG4ncworTGludXggc3lzdGVt KSBhIHNlZ21lbnRhdGlvbiBmYXVsdC4gIEpvaG4gYWRkZWQgdGhlIG5vcm1hbCBjbGF1c2UgdG8g Y2hlY2sKK3RoZSByZXN1bHQgb2YgdGhlIGJsb2NrLWNoZWNrIGNhbGN1bGF0aW9uLCBhbmQgSSBj aGFuZ2VkIHR0aW5sKCkgdG8gYWx3YXlzCiticmVhayBvbiB0aGUgZW9sIGNoYXJhY3RlciAobm9y bWFsbHkgY2FycmlhZ2UgcmV0dXJuKSwgc2luY2UgdGhpcyBjYW4gbmV2ZXIKK2FwcGVhciBpbiBh IHBhY2tldCwgZXZlbiBpZiB3ZSAic2V0IGNvbnRyb2wgdW5wcmVmaXggYWxsIi4gIEFsc28gYWRk ZWQgYQorY2hlY2sgdG8gdHRpbmwoKSB0byBwcm90ZWN0IGFnYWluc3QgbGVuZ3RoIGZpZWxkcyBj b3JydXB0ZWQgaW50byBpbGxlZ2FsCit2YWx1ZXMuICBja2NmbjIuYywgY2t1dGlvLmMsIDEzIEFw ciAyMDEwLgorCitGcm9tIExld2lzIE1jQ2FydGh5OgorICBCYXNlZCBvbiBjb2RlIGluc3BlY3Rp b24sIEMtS2VybWl0IGFwcGVhcnMgdG8gaGF2ZSBhbiBTU0wtcmVsYXRlZCBzZWN1cml0eQorICB2 dWxuZXJhYmlsaXR5IGFuYWxvZ291cyB0byB0aGF0IGlkZW50aWZpZWQgYXMgQ1ZFLTIwMDktMzc2 NyAoc2VlIGUuZy4KKyAgaHR0cDovL2N2ZS5taXRyZS5vcmcvY2dpLWJpbi9jdmVuYW1lLmNnaT9u YW1lPUNWRS0yMDA5LTM3NjcpLgorCisgIEknbSBhdHRhY2hpbmcgYSBwYXRjaCBmb3IgdGhpcyBp c3N1ZSByZWxhdGl2ZSB0byB0aGUgcmV2aXNpb24gb2YgY2tfc3NsLmMKKyAgb2J0YWluZWQgZnJv bSBhIGNvcHkgb2YgaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Z0cC90ZXN0L3Rhci94 LnppcAorICBkb3dubG9hZGVkIG9uIDIwMTAvMDcvMzAsIHdoaWNoIEkgYmVsaWV2ZSBpcyB0aGUg bGF0ZXN0LgorCisgIFdoZW4gdGhpcyBmbGF3IHdhcyBmaXJzdCB3aWRlbHkgcHVibGljaXplZCBh dCBsYXN0IHllYXIncyBCbGFjayBIYXQKKyAgY29uZmVyZW5jZSwgaXQgd2FzIGNsYWltZWQgdGhh dCBzb21lIHB1YmxpYyBjZXJ0aWZpY2F0ZSBhdXRob3JpdGllcyBoYWQKKyAgaW5kZWVkIGlzc3Vl ZCBjZXJ0aWZpY2F0ZXMgdGhhdCBjb3VsZCBiZSB1c2VkIHRvIGV4cGxvaXQgdGhpcyBjbGFzcyBv ZgorICB2dWxuZXJhYmlsaXR5LiBBcyBmYXIgYXMgSSBrbm93IHRoZXkgaGF2ZSBub3QgcmV2ZWFs ZWQgc3BlY2lmaWNhbGx5IHdoaWNoCisgIHB1YmxpYyBDQShzKSBoYWQgYmVlbiBmb3VuZCBpc3N1 aW5nIHN1Y2ggY2VydGlmaWNhdGVzLgorICBTb21lIHJlZmVyZW5jZXM6IGh0dHA6Ly93d3cubXNl Y2xhYi5jb20vP3A9MTgwCisgIGh0dHA6Ly93d3cudGhlcmVnaXN0ZXIuY28udWsvMjAwOS8wNy8z MC91bml2ZXJzYWxfc3NsX2NlcnRpZmljYXRlLworCitQYXRjaGVzIGFkZGVkIHRvIGNrX3NzbC5j LCA0IEF1ZyAyMDEwLgorCitQZXRlciBFaWNoaG9ybiByZXBvcnRlZCB0aGF0ICJSRU5BTUUgLi4v eCAuIiBkaWRuJ3Qgd29yay4gIFRoaXMgaXMgYSBzaWRlCitlZmZlY3Qgb2YgdGhlIGNoYW5nZXMg b2YgMjAwNiB0byB0aGUgUkVOQU1FIGNvbW1hbmQsIHRoZXJlIHdhcyBhIGxpdHRsZQorY29uZnVz aW9uIGluIHRoZSByZW5hbWVvbmUoKSByb3V0aW5lOyBmaXhlZCBpbiBja3V1czYuYywgNCBBdWcg MjAxMC4KKworSWYgb25seSBvbmUgZmlsZSBpcyBGT1BFTidkLCBGQ0xPU0UgZ2l2ZW4gd2l0aCBu byBhcmd1bWVudHMgd291bGQgY2xvc2UgaXQuCitUdXJucyBvdXQgdG8gYmUgYSBiYWQgaWRlYS4g RXhhbXBsZTogcHJvZ3JhbSB3aXRoIGFuIGlucHV0IGFuZCBvdXRwdXQgZmlsZSwKK3RyeSB0byBj bG9zZSB0aGUgb3V0cHV0IGZpbGUgYmVmb3JlIGl0IGlzIG9wZW5lZCBieSBqdXN0IHR5cGluZyBG Q0xPU0U7IHRoaXMKK2NhbiBtZXNzIHVwIHRoZSBpbnB1dCBmaWxlLiAgIEZvciBzYWZldHkgRkNM T1NFIGhhcyB0byByZXF1aXJlIGEgY2hhbm5lbAorbnVtYmVyIG9yIEFMTC4gIGNrdXVzNy5jLCA0 IEF1ZyAyMDEwLgorCitBZGRlZCBcZnN0cmNtcChzMSxzMixjYXNlLHN0YXJ0LGxlbmd0aCksIHdo aWNoIGhhcyB0aGUgYWR2YW50YWdlIG92ZXIgSUYKK0VRVSxMR1QsTExUIHRoYXQgY2FzZSBzZW5z aXRpdml0eSBjYW4gYmUgc3BlY2lmaWVkIGFzIGEgZnVuY3Rpb24gYXJnLCBhbmQKK2Fsc28gc3Vi c3RyaW5ncyBjYW4gYmUgc3BlY2lmaWVkLiAgY2t1dXNyLmgsIGNrdXVzWzI0XS5jLCA1IEF1ZyAy MDEwLgorCitUaGUgQ1NWIGZlYXR1cmUgb2YgQWxwaGEuMDYgaGFkIGEgc3VidGxlIGZsYXcsIG5h bWVseSB0aGF0IGlmIHRoZSBsYXN0IGl0ZW0KK2luIGEgY29tbWEgc2VwYXJhdGVkIGxpc3Qgd2Fz IGVuY2xvc2VkIHdpdGhpbiBkb3VibGVxdW90ZXMgd2l0aCBhIHRyYWlsaW5nCitzcGFjZSBhZnRl ciB0aGUgY2xvc2luZyBkb3VibGVxdW90ZSwgYSBzcHVyaW91cyBlbXB0eSBmaW5hbCBlbGVtZW50 IHdvdWxkIGJlCitjcmVhdGVkIGluIHRoZSByZXN1bHQgYXJyYXkuICBGaXhlZCBpbiBja3NwbGl0 KCksIGNrY2xpYi5jLCA1IEF1ZyAyMDEwLgorCistLS1BbHBoYS4wNy0tLQorCitUaGUgQ1NWIGZl YXR1cmUgb2YgXGZzcGxpdCgpIHNwbGl0cyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IGludG8gYW4g YXJyYXkuCitUbyB0dXJuIHRoZSBhcnJheSBiYWNrIGludG8gYSBjb21tYSBzZXBhcmF0ZWQgbGlz dCwgXGZqb2luKCZhLFw0NCwxKSBhbG1vc3QKK3dvcmtzLCBleGNlcHQgZm9yIGVsZW1lbnRzIGNv bnRhaW4gbGl0ZXJhbCBkb3VibGVxdW90ZXMsIHN1Y2ggYXM6CisKKyAgTW9oYW1tYWQgIlRoZSBH cmVhdGVzdCIgQWxpCisKK1RoaXMgY2FsbHMgZm9yIG1ha2luZyBhIHN5bWJvbGljIENTViBhcmd1 bWVudCBmb3IgXGZqb2luKCkgbGlrZSB0aGUgb25lIHRoYXQKK3dhcyBtYWRlIGZvciBcZnNwbGl0 KCk6IFxmam9pbigmYSxDU1YpLiAgQWxzbyBcZmpvaW4oJmEsVFNWKSBmb3IKK1RhYi1zZXBhcmF0 ZWQgbGlzdC4gIFRodXMgaWYgS2VybWl0IHJlYWRzIGEgcmVjb3JkIGluIENTViBmb3JtYXQsIHNw bGl0cyBpdAoraW50byBhbiBhcnJheSwgYW5kIHRoZW4gam9pbnMgdGhlIGFycmF5IGJhY2sgaW50 byBhIENTViByZWNvcmQsIHRoZSByZXN1bHQKK3dpbGwgYmUgZXF1aXZhbGVudCB0byB0aGUgb3Jp Z2luYWwsIGFjY29yZGluZyB0byB0aGUgQ1NWIGRlZmluaXRpb24uICBJdAorbWlnaHQgbm90IGJl IGlkZW50aWNhbCwgYmVjYXVzZSBpZiB0aGUgcmVzdWx0IGhhZCBleHRyYW5lb3VzIHNwYWNlcyBi ZWZvcmUKK29yIGFmdGVyIHRoZSBzZXBhcmF0aW5nIGNvbW1hcywgdGhlc2UgYXJlIGRpc2NhcmRl ZCwgYnV0IHRoYXQgZG9lcyBub3QKK2FmZmVjdCB0aGUgZWxlbWVudHMgdGhlbXNlbHZlcy4gIEZ1 cnRoZXJtb3JlIGl0IGlzIG5vdyBwb3NzaWJsZSB0byBjb252ZXJ0CithIGNvbW1hLXNlcGFyYXRl ZCBsaXN0IGludG8gYSB0YWItc2VwYXJhdGVkIGxpc3QsIGFuZCB2aWNlIHZlcnNhICh3aGljaCBp cworbm90IGEgc2ltcGxlIG1hdHRlciBvZiBjaGFuZ2luZyBjb21tYXMgdG8gdGFicyBvciB2aWNl IHZlcnNhKS4gIGNrdXVzNC5jLAorMTIgQXVnIDIwMTAuCisKK0Zyb20gSm9vcCBCb29uZW4gMjYg SnVsaSAyMDEwOiAiQWRkZWQgSEFWRV9MT0NLREVWIGFzIG9wZW5TdVNFID49IDExLjMgdXNlcwor bG9ja2RldiBidXQgbm90IGJhdWRib3kuICBUaGV5IHVzZSB0dHlsb2NrIGRpcmVjdGx5LiAgVGhl IHByb2dyYW0gY29kZSBoYXMKK2JlZW4gYWRkZWQgc28gdGhlIHRoZSBwcm9ncmFtIHdvcmtzIHdp dGhvdXQgYSBwcm9ibGVtLiIgIG1ha2VmaWxlLCBja2NkZWIuaCwKK2NrdXRpby5jLCBja3V1czUu YywgMjMgQXVnIDIwMTAuCisKKy0tLUFscGhhLjA4LS0tCisKK0Zyb20gR2FyeSBNaWxscyBhdCB0 aGUgVSBvZiBNYW5pdG9iYTogY29udmVydCBTb2xhcmlzIHZlcnNpb24gZnJvbSBCU0QgcHR5cwor dG8gc3RyZWFtcyBwdHlzIGJlY2F1c2UgdGhlcmUgYXJlIG9ubHkgNDggQlNELXN0eWxlIHB0eXMg YW5kIGhlIHdhcyBydW5uaW5nCitvdXQuICBObyBjb2RlIGNoYW5nZXMgbmVlZGVkLCB0aGUgb25s eSBjaGFuZ2UgbmVjZXNzYXJ5IHdhcyB0byBhZGQgdGhlCitmb2xsb3dpbmcgZmxhZ3MgdG8gdGhl IG1ha2VmaWxlIHRhcmdldDoKKworICAtREhBVkVfU1RSRUFNUyAtREhBVkVfR1JBTlRQVCAtREhB VkVfUFRTTkFNRQorICAtRFBVU0hfUFRFTSAtRFBVU0hfTERURVJNIC1EUFVTSF9UVENPTVBBVAor CittYWtlZmlsZSwgY2tjbWFpLmMsIDIxIFNlcCAyMDEwLgorCitUZXN0aW5nIHRoaXMgaW4gU29s YXJpcyA5IEkgc2VlIHRoYXQgdGhlIERFUyBsaWJyYXJ5IGRpc2FwcGVhcmVkLiAgQWRkZWQKK2Nv ZGUgdG8gdGhlIHNvbGFyaXM5IHRhcmdldHMgKGFsc28gdXNlZCBieSBTb2xhcmlzIDEwIGFuZCAx MSkgdG8gY2hlY2sgZm9yCit0aGlzLiAgbWFrZWZpbGUsIDIxIFNlcCAyMDEwLgorCitUaGUgU29s YXJpcyB0YXJnZXQgY2hlY2tlZCB0aGUgT3BlblNTTCB2ZXJzaW9uIGF1dG9tYXRpY2FsbHkgdG8g c2V0IHRoZQorcmlnaHQgZmxhZywgdGhlIExpbnV4IHRhcmdldCBkaWRuJ3QuICBQdXQgdGhlIE9w ZW5TU0wtdmVyc2lvbiB0ZXN0aW5nIGNvZGUKK2luIHRoZSBMaW51eCB0YXJnZXQgdG9vLiAgbWFr ZWZpbGUsIDIxIFNlcCAyMDEwLgorCitBIGNvdXBsZSBtaW5vciBjaGFuZ2VzIHRvIHRoZSB0cnU2 NC01MWIgbWFrZWZpbGUgdGFyZ2V0cyBmcm9tIFN0ZXZlbiBTY2h3ZWRhCitidXQgdGhlcmUgc3Rp bGwgYXJlIHNvbWUgcHJvYmxlbXMgd2l0aCB0aGUgVHJ1NjQgVW5peCBidWlsZHMuCittYWtlZmls ZSwgMjEgU2VwIDIwMTAuCisKKy0tLUFscGhhLjA5LS0tCisKK1xmY29udGVudHMoXCZhWzNdKSBn b3QgYW4gZXJyb3IgaWYgdGhlIGFycmF5IHdhcyBkZWNsYXJlZCBidXQgaXRzIGRpbWVuc2lvbgor d2FzIGxlc3MgdGhhbiAzLCB3aGljaCBpcyBiYWQgd2hlbiBkZWFsaW5nIHdpdGggKHNheSkgYW4g YXJyYXkgY3JlYXRlZAorZHluYW1pY2FsbHkgYnkgXGZzcGxpdCgpLCB3aGljaCBtaWdodCBvciBt aWdodCBub3QgaGF2ZSBhIHRoaXJkIGVsZW1lbnQuCitJbiBjYXNlIGl0IGRvZXNuJ3QgLS0gaS5l LiBpbiBjYXNlIHdlIGFyZSByZWZlcnJpbmcgdG8gYW4gb3V0IG9mIHJhbmdlCitlbGVtZW50IG9m IGFueSBhcnJheSB0aGF0IGlzIGRlY2xhcmVkIC0tIHdlIHNob3VsZCBqdXN0IHJldHVybiBhIG51 bGwKK3N0cmluZywgYXMgd2UgZG8gd2l0aCBvdGhlciB0eXBlcyBvZiB2YXJpYWJsZXMgdGhhdCBh cmUgbm90IGRlZmluZWQuCitGb3IgdGhhdCBtYXR0ZXIsIGRpdHRvIGV2ZW4gaWYgdGhlIGFycmF5 IGlzIG5vdCBkZWNsYXJlZDsgd2hhdCB1c2VmdWwKK3B1cnBvc2UgaXMgc2VydmVkIGJ5IHRocm93 aW5nIGFuIGVycm9yIGluIHRoaXMgY2FzZT8KK2NrdXVzNC5jLCAzMCBEZWMgMjAxMC4KKworY2tz cGxpdCgpIHRyZWF0cyBcIGFzIGEgcXVvdGluZyBjaGFyYWN0ZXIuICBJZiB0aGUgc291cmNlIHN0 cmluZyBjb250YWlucworYmFja3NsYXNoZXMsIHRoZXkgYXJlIHN3YWxsb3dlZCAob3IsIGlmIGRv dWJsZWQsIG9uZSBpcyBrZXB0KS4gIFRoYXQncyBub3QKK2dvb2QgZm9yIHBhcnNpbmcgZXh0ZXJu YWwgZGF0YSwgc3VjaCBhcyBsaW5lcyByZWFkIGZyb20gZmlsZXMsIHdoZXJlIHRoZXJlCithcmUg bm8gcXVvdGluZyBydWxlcy4gIFRoaXMgY2FtZSB1cCB3aGVuIHBhcnNpbmcgQ1NWIGZpbGVzOyBh cyBhIHdvcmthcm91bmQsCitJIG1hZGUgXGZzcGxpdCgpIHRyZWF0IGJhY2tzbGFzaCBhcyBhbiBv cmRpbmFyeSBjaGFyYWN0ZXIgZm9yIENTViBhbmQgVFNWCitzcGxpdHRpbmcgKGEgYmV0dGVyIHNv bHV0aW9uIG1pZ2h0IGJlIHlldCBhbm90aGVyIGFyZ3VtZW50IHRoYXQgc3BlY2lmaWVzCithIHF1 b3RlIGNoYXJhY3RlcikuICBja2NsaWIuYywgMzAgRGVjIDIwMTAuCisKK0JlZ2FuIGNvbnZlcnRp bmcgQy1LZXJtaXQgdG8gT3BlbiBTb3VyY2Ugd2l0aCB0aGUgU2ltcGxpZmllZCAzLUNsYXVzZSBC U0QKK2xpY2Vuc2UuICBVcGRhdGVkIHRoZSB0ZXh0IGZvciB0aGUgSU5UUk8sIExJQ0VOU0UsIE5F V1MsIGFuZCBTVVBQT1JUCitjb21tYW5kcy4gIEZpeGVkIHRoaW5ncyBzbyB0aGUgY29weXJpZ2h0 IHllYXIgdG8gYmUgZGlzcGxheWVkIGlzIGRlZmluZWQgaW4KK29uZSBwbGFjZSAoY2tfY3J5ZWFy IGluIGNrY21haS5jKSwgcmF0aGVyIHRoYW4gaGFyZHdpcmVkIGludG8gdGV4dCBzdHJpbmdzCith bGwgb3ZlciB0aGUgcGxhY2UuICBDT1BZSU5HLlRYVCwgY2tjbWFpLmMsIGNrdXVzWzI1Nl0uYywg MiBKdW4gMjAxMS4KKworV2hlbiBJIGFkZGVkIE1JTUUgc3lub255bXMgZm9yIEtlcm1pdCBjaGFy YWN0ZXItc2V0IG5hbWVzLCBJIGxlZnQgYSBib2d1cworZW50cnkgaW4gdGhlIHRhYmxlcyAoIndp bmRvd3MtMTI1MSIpIHRoYXQgd2FzIGluIHRoZSB3cm9uZyBwbGFjZQorYWxwaGFiZXRpY2FsbHks IHRodXMgcHJldmVudGluZyBtb3N0IHJlZmVyZW5jZXMgdG8gZmlsZSBjaGFyYWN0ZXItc2V0IG5h bWVzCitmcm9tIHdvcmtpbmcgcmlnaHQuICBSZW1vdmVkIHRoZSBib2d1cyBlbnRyeS4gIGNrdXhs YS5jLCAyIEp1biAyMDExLgorCitNb3N0IGNvbWJpbmF0aW9ucyB3b3JrIE9LLCBidXQgbm90IHRy YW5zbGF0aW5nIEN5cmlsbGljIHRleHQgZnJvbSBVVEYtOAordG8gTGF0aW4vQ3lyaWxsaWMsIGFu ZCBwcm9iYWJseSB0aGUgc2FtZSB3b3VsZCBiZSB0cnVlIGZvciBhbnkgY2FzZSBvZgorY29udmVy dGluZyBmcm9tIFVURi04IG9yIFVDUy0yIHRvIGFueXRoaW5nIGVsc2UuICBUaGUgcHJvYmxlbSB3 YXMgaW4KK3hnbmJ5dGUoKSwgd2hpY2ggY29udmVydHMgdGhlIGlucHV0IHN0cmVhbSBmcm9tIHRo ZSBzcGVjaWZpZWQgY2hhcmFjdGVyIHRvCitVQ1MyOyBpdCBuZWVkZWQgdG8gbWFrZSBhIHNwZWNp YWwgY2FzZSBmb3Igd2hlbiB0aGUgaW5wdXQgZmlsZSB3YXMgYWxyZWFkeQorVW5pY29kZS4gIEJl bGlldmUgaXQgb3Igbm90LCB0aGlzIHByb2JsZW0gb2NjdXJyZWQgYXQgbGVhc3QgYXMgZmFyIGJh Y2sgYXMKKzguMC4yMDEgKDkuNSB5ZWFycyBhZ28pIGFuZCBub2JvZHkgbm90aWNlZC4gIFNvIGlm IHRoZSBmaXggaXNuJ3QgcGVyZmVjdAorcHJvYmFibHkgbm9ib2R5IHdpbGwgbm90aWNlIHRoYXQg ZWl0aGVyLiAgY2tjZm5zLmMsIDMgSnVuIDIwMTEuCisKK1RoZSBTRVQgQkxPQ0sgQ0hFQ0sgY29t bWFuZCBkaWQgbm90IHBhcnNlIGFsbCB0aGUgaXRlbXMgaW4gaXRzIGtleXdvcmQKK2xpc3QuICBG aXhlZCBpbiBja3V1czMuYywgMyBKdW4gMjAxMS4KKworRm9yIEVNLUFQRVggb2NlYW4gZmxvYXRz IHByb2plY3QsIHdoZXJlIGJ1b3lzIGluIHN0b3JteSB3YXRlcnMgaGF2ZSB0bwordHJhbnNtaXQg ZGF0YSB0aHJvdWdoIGFuIGVhcnRoIHNhdGVsbGl0ZSB1c2luZyBub24tZXJyb3ItY29ycmVjdGlu ZyBtb2RlbXMsCitKb2huIER1bmxhcCByYW4gZXhoYXVzdGl2ZSBzdHJlc3MgdGVzdHMgb2YgS2Vy bWl0IHByb3RvY29sIHRyYW5zZmVycyB0aHJvdWdoCithIHNpbXVsYXRlZCBjb25uZWN0aW9uIHRo YXQgaW5qZWN0ZWQgZXJyb3JzIGFuZCBkZWxheXMgYW5kIGlkZW50aWZpZWQgYQord2Vha25lc3Mg aW4gS2VybWl0IHByb3RvY29sIHdoZW4gaXQgaXMgdXNlZCB1bmRlciBleHRyZW1lbHkgYmFkIGNv bmRpdGlvbnM6CitJZiBhIGRhdGEgYnl0ZSBvZiB0aGUgUyBwYWNrZXQgKG9yIGl0cyBBY2spIGlz IGNvcnJ1cHRlZCBhbmQgdGhlIDEtYnl0ZQorY2hlY2tzdW0gaXMgYWxzbyBjb3JydXB0ZWQgaW4g c3VjaCBhIHdheSB0aGF0IHRoYXQgdGhlIGNoZWNrc3VtIG1hdGNoZXMgdGhlCitjb3JydXB0ZWQg ZGF0YSwgdGhlIHR3byBLZXJtaXQgcHJvZ3JhbXMgd2lsbCBkaXNhZ3JlZSBhcyB0byB0aGUgbmVn b3RpYXRlZAorcGFyYW1ldGVycy4gIEZvciBleGFtcGxlLCBpZiBmaWxlIFNlbmRlcidzIFJQVCBm aWVsZCBpcyBjaGFuZ2VkIGZyb20gJ34nIHRvCisnXicsIHRoZSByZWNlaXZlciB3aWxsIGRlY29k ZSB0aGUgcGFja2V0IGluY29ycmVjdGx5LiAgRGl0dG8gZm9yIG1vc3Qgb2YgdGhlCitvdGhlciBw YXJhbWV0ZXJzLiAgVGhlIHJlc3VsdCBpcyB0aGF0IGEgY29ycnVwdGVkIGZpbGUgaXMgcmVjZWl2 ZWQgYnV0CityZXBvcnRlZCBjb3JyZWN0LiAgSm9obiBzdWdnZXN0ZWQgYSBuZXcgbW9kZSBvZiBv cGVyYXRpb24gaW4gd2hpY2ggdGhlIFR5cGUKKzMgYmxvY2sgY2hlY2sgaXMgdXNlZCBmb3IgYWxs IHBhY2tldHMuICBTdWNoIGEgbW9kZSBjYW4gbm90IGJlIG5lZ290aWF0ZWQKK2JlY2F1c2UgdGhl IG5lZ290aWF0aW9uIHBhY2tldCBpdHNlbGYgaXMgYXNzdW1lZCBieSBhbGwgS2VybWl0IHByb2dy YW1zIHRvCitoYXZlIGEgMS1ieXRlIGNoZWNrc3VtLiAgQWRkZWQgU0VUIEJMT0NLLUNIRUNLIDUg dG8gdGhlIHBhcnNlciAod2l0aAoraW52aXNpYmxlIHN5bm9ueW0gRk9SQ0UtMyIuICBja3V1czMu YywgMyBKdW4gMjAxMS4KKworQWRkZWQgc3VwcG9ydGluZyBjb2RlIGZvciBTRVQgQkxPQ0sgNTog Y2tjZm5bMjNdLmMsIGNrY3Byby53LCBja2NtYWkuYywKK2NrdXVzMy5jLCAzIEp1biAyMDExLgor CitBZGRlZCBjb2RlIHRvIHNraXAgdGhlIGhldXJpc3RpYyB0aGF0IFMgYW5kIEkgcGFja2V0cyBh bHdheXMgaGF2ZSBibG9jaworY2hlY2sgdHlwZSAxLiAgRmlsZSB0cmFuc2ZlciBPSyBiZXR3ZWVu IHR3byBDLUtlcm1pdHMgd2l0aCBTRVQgQkxPQ0sgNS4KK3JwYWNrKCk6IGNrY2ZuMi5jLCA1IEp1 biAyMDExLgorCitNYWRlIHRoZSBmaWxlIHJlY2VpdmVyIHB1dCAiNSIgaW4gdGhlIGJsb2NrLWNo ZWNrLXR5cGUgaW4gaXRzIEFDSyB0byB0aGUKK1MtUGFja2V0LiAgc3BhcigpOiBja2NmbnMuYywg NSBKdW4gMjAxMS4KKworTm93IHRoZSBxdWVzdGlvbiBpczogQ2FuIHdlIG1ha2UgdGhlIGZpbGUg cmVjZWl2ZXIgYXV0b21hdGljYWxseSBhbmQgc2FmZWx5CityZWNvZ25pemUgYSB0aHJlZS1ieXRl IGJsb2NrIGNoZWNrIG9uIGFuIGluY29taW5nIFMgb3IgSSBwYWNrZXQ/ICBJdCdzCit0cmlja3kg YmVjYXVzZSB0aGUgYmxvY2sgY2hlY2sgZmllbGQgaXMgbm90IHNlbGYtaWRlbnRpZmllZCwgaXQn cyBqdXN0IHRoZQorbGFzdCAibiIgY2hhcmFjdGVycyBvZiBzdHJpbmcgaW5kaWNhdGVkIGJ5IHRo ZSBsZW5ndGggZmllbGQsIHNvIGNvcnJlY3QKK2RlY29kaW5nIG9mIHRoZSBwYWNrZXQgZGVwZW5k cyBvbiBzdGF0ZWZ1bCBrbm93bGVkZ2Ugb2YgIm4iLiAgSG93IGFib3V0IHRoaXM6CitycGFjaygp IGFscmVhZHkga25vd3Mgd2hhdCB0eXBlIG9mIHBhY2tldCBpdCBpcywgc28gaWYgaXQncyBhbiBT IG9yIEkgcGFja2V0CithbmQgdGhlIDh0aCBieXRlIG9mIHRoZSBkYXRhIGZpZWxkIGlzICI1IiBh bmQgbGFzdCAzIGJ5dGVzLCB3aGVuIGludGVycHJldGVkCithcyB0aGUgQ1JDLCBtYXRjaCB0aGUg cGFja2V0IGNvbnRlbnRzLCB0aGVuIHdlIGFjY2VwdCB0aGUgcGFja2V0IGFuZCBzd2l0Y2gKK3Rv IEJMT0NLIDUgbW9kZS4gIAorCitPbiB0aGUgb3RoZXIgaGFuZCwgaWYgdGhlICI1IiB3YXMgcHV0 IHRoZXJlIGJ5IGNvcnJ1cHRpb24sIHRoZSBDUkMgc2hvdWxkCitjYXRjaCB0aGUgZXJyb3IuICBJ biB0aGF0IGNhc2Ugd2UgTkFLIHRoZSBwYWNrZXQgYW5kIHByZXN1bWFibHkgZ2V0IGEKK2RpZmZl cmVudCB2ZXJzaW9uIGJhY2suICBUaGVyZSB3b3VsZCBiZSBubyByZWFzb24gdG8gdHJ5IHRvIHJl LXJlYWQgdGhlIHNhbWUKK3BhY2tldCB3aXRoIGEgZGlmZmVyZW50IGJsb2NrIGNoZWNrLCBiZWNh dXNlIHRoZSAiNSIgY291bGQgbm90IHBvc3NpYmx5IGJlCit0aGVyZSBsZWdpdGltYXRlbHkgdW5s ZXNzIGl0IGhhZCBhIDMtYnl0ZSBDUkMuICBUbyBiZSBjbGVhciwgdGhpcyBpcworY2hlYXRpbmcu ICBXZSByZWFkIHRoZSBwYWNrZXQgY29udGVudHMgYmVmb3JlIHdlIGtub3cgdGhlIHBhY2tldCBp cyBjb3JyZWN0LAordGhlbiB3ZSBjaGVjayB0aGF0IGl0ICppcyogY29ycmVjdC4gIEkgbWFkZSB0 aGUgNC1saW5lIGNoYW5nZSB0byBycGFjaygpCithbmQgaXQgd29ya3MgT0sgaW4gdGhlIGFic2Vu Y2Ugb2YgdHJhbnNtaXNzaW9uIGVycm9ycy4gIGNrY2ZuMi5jLCAzIEp1biAyMDExLgorCitTbyB0 aGUgdmFyaW91cyBjb21iaW5hdGlvbnMgc2hvdWxkIHdvcmsgYXMgZGVzaXJlZDoKKworIC4gU2Vu ZGVyIGFuZCByZWNlaXZlciBib3RoIHN1cHBvcnQgYW5kIGFyZSB0b2xkIHRvIFNFVCBCTE9DSyA1 ICgiU0I1IikuCisgLiBTZW5kZXIgU0I1LCBidXQgcmVjZWl2ZXIgZG9lc24ndCBzdXBwb3J0IGl0 IChlcnJvcnMgb3V0KS4KKyAuIFNlbmRlciBTQjUsIHJlY2VpdmVyIHN1cHBvcnRzIGl0IGJ1dCB3 YXNuJ3QgdG9sZCAoYXV0by1yZWNvZ25pemVzIGl0KS4KKyAuIFJlY2VpdmVyIFNCNSBidXQgc2Vu ZGVyIG5vIChlcnJvcnMgb3V0KS4KKworTm90ZSBpbiB0aGUgbGFzdCBjYXNlLCB0aGUgcmVjZWl2 ZXIgc2hvdWxkIE5PVCBhdXRvbWF0aWNhbGx5IGZhbGwgYmFjayB0bworc3RhbmRhcmQgYmVoYXZp b3IgYmVjYXVzZSBpZiB0aGUgdXNlciBzYWlkIFNFVCBCTE9DSyA1IHRoYXQgbWVhbnMgZXZlcnkK K3BhY2tldCBNVVNUIGJlIHByb3RlY3RlZCBieSBDUkMgdG8gcHJldmVudCB0aGUgSS9TIHBhY2tl dHMgZnJvbSBiZWluZworY29ycnVwdGVkLgorCitJbnN0YWxsZWQgbmV3IEhFTFAgU0VUIEJMT0NL LUNIRUNLIHRleHQuICBja3V1czIuYywgNSBKdW4gMjAxMS4KKworQXV0b2Rvd25sb2FkIGRpZG4n dCB3b3JrIHdoZW4gdGhlIFMgb3IgSSBwYWNrZXQgaGFkIGEgMy1ieXRlIGJsb2NrIGNoZWNrCiti ZWNhdXNlIGtzdGFydCgpIGNoZWNrZWQgaXQgZm9yIGEgMS1ieXRlIGNoZWNrc3VtLiAgRml4ZWQg aW4ga3N0YXJ0KCksCitja2NmbjIuYywgNiBKdW4gMjAxMS4gIEhvd2V2ZXIsIG9sZGVyIEtlcm1p dCB2ZXJzaW9ucyBhbmQgcHJvZ3JhbXMgdGhhdAorY2xhaW0gdG8gZG8gImF1dG9kb3dubG9hZCIg d2lsbCBuZXZlciByZWNvZ25pemUgdGhpcyB0eXBlIG9mIHBhY2tldC4gIE5vCitiaWcgZGVhbCBz aW5jZSBldmVuIGlmIHRoZXkgZGlkLCB0aGUgdHJhbnNmZXIgd291bGQgZmFpbCBhbnl3YXkuCisK K0FkZGVkICdGT1JDRSAzJyB0byBFLUtlcm1pdCwgY2FsbGVkIGl0IEVLIDEuNy4gIFRoZSBvcHRp b24gaXMgIi1iIDUiLiAgV29ya3MKK09LIGZvciBzZW5kaW5nIGFuZCByZWNlaXZpbmcsIGJvdGgg d2l0aCBhbmQgd2l0aG91dCB0aGUgbmV3IG9wdGlvbi4gIEFsc28KK3dvcmtzIHdpdGggIi1iIDUi IGlmIHlvdSBzZW5kIGFuIFMgcGFja2V0IHRvIGl0IHdpdGggJzUnIGluIHRoZSBCQ1QgZmllbGQu CitDaGFuZ2VzIHdlcmUgbWluaW1hbCwgSSBoYXZlIHRoZW0gYWxsIGluIGVrMTcuZGlmZi4KKwor SSBjb3VsZCBwcm9iYWJseSBhbHNvIG1ha2UgYSBuZXcgRy1LZXJtaXQgaW4gYWJvdXQgMTAgbWlu dXRlcywgYnV0IHdobyBjYXJlcworYWJvdXQgRy1LZXJtaXQuLi4gIFdlIGFscmVhZHkgaGF2ZSB0 d28gdXNlZnVsIEtlcm1pdCBwcm9ncmFtcyB0aGF0CitpbnRlcm9wZXJhdGUgd2l0aCB0aGUgbmV3 IHByb3RvY29sLiAgNiBKdW4gMjAxMS4KKworUmVwbGFjZWQgdGhlIHZlcnkgaW5hZGVxdWF0ZSBo ZWxwIHRleHRzIGZvciBmdW5jdGlvbnMgXGZ3b3JkKCkgYW5kCitcZnNwbGl0KCkgd2l0aCBuZXcg b25lcy4gIGNrdXVzMi5jLCA2IEp1biAyMDExLgorCitUaGVyZSB3ZXJlIGEgY291cGxlIHJlcG9y dHMgb2YgZmlsZSBjb3JydXB0aW9uIHRoYXQgSSB3YXMgc2F2aW5nIGZvciBsYXRlci4KK05vdyB0 aGF0IG5vdyBpcyBsYXRlciBJIGR1ZyB1cCB0aGUgbWVzc2FnZXMsIGZpbGVzLCBhbmQgbG9ncyBh bmQgaXQgdHVybnMKK291dCB0aGF0IG5vYm9keSBoYWQgcmVwb3J0ZWQgYSByZXByb2R1Y2libGUg Y2FzZSBvZiBLZXJtaXQgY29ycnVwdGluZyBhCitmaWxlLiAgVGhlcmUgaGF2ZSBiZWVuIG5vbi1y ZXByb2R1Y2libGUgY2FzZXMgdGhvdWdoLCBhbG1vc3QgY2VydGFpbmx5IGR1ZQordG8gY29ycnVw dGlvbiBvZiB0aGUgUyBvciBJIHBhY2tldCBvciBpdHMgQUNLLCB3aGljaCBpcyB3aHkgd2Ugbm93 IGhhdmUgU0VUCitCTE9DSyA1LiAgRXZlbiB3aXRoIEJMT0NLIENIRUNLIDUsIHRoZXJlIGlzIG5v IGd1YXJhbnRlZSB0aGF0IHRoZSBzYW1lIHRoaW5nCit3b24ndCBoYXBwZW4sIGl0IGlzIGp1c3Qg ZmFyIGxlc3MgbGlrZWx5LiAgRXZlbiBpZiB3ZSBhZGRlZCBhIDMyLWJpdCBDUkMgb3IKK2V2ZW4g NjQtYml0IG9uZSwgdGhlcmUgd291bGQgc3RpbGwgYmUgYSBzbWFsbCBjaGFuY2UgaXQgY291bGQg aGFwcGVuLgorCis3IEp1biAyMDExOgorCitDb3JyZWN0ZWQgdmFyaW91cyAjaWZkZWZzIChvciBs YWNrIG9mIHRoZW0pIHdoZW4gYnVpbGRpbmcgQy1LZXJtaXQgd2l0aAorZGlmZmVyZW50IGNvbWJp bmF0aW9ucyBvZiBmZWF0dXJlLXNlbGVjdGlvbiBvcHRpb25zIHN1Y2ggYXMgTk9DU0VUUywgTk9J Q1AsCitOT0xPQ0FMLCBOT1NQTCwgTk9VTklDT0RFLCBldGMuICBja2NmbnMuYyBja2NtYWkuYyBj a2N4bGEuaCBja3V1czIuYworY2t1dXM0LmMgY2t1dXM1LmMgY2t1dXM2LmMgY2t1dXNyLmMsIDcg SnVuIDIwMTEuICBBZnRlciBydW5uaW5nIHRoZSBzY3JpcHQKK3RoYXQgZG9lcyBhbGwgdGhlc2Ug YnVpbGRzICg4NCBvZiB0aGVtKSBJIHJhbiBpdCBhZ2FpbiB0byBtYWtlIHN1cmUgdGhhdAorbm9u ZSBvZiB0aGUgY2hhbmdlcyBicm9rZSBidWlsZHMgdGhhdCBzdWNjZWVkZWQgYmVmb3JlIHRoZSBj aGFuZ2VzIHdlcmUgbWFkZS4KKworQnVpbHQgT0sgb24gU29sYXJpczkgKCJtYWtlIHNvbGFyaXM5 IikKK0RpdHRvIHdpdGggS3JiNSBhbmQgT3BlblNTTCAwLjkuOHEgICgibWFrZSBzb2xhcmlzOWcr b3BlbnNzbCtzaGFkb3crcGFtK3psaWIiKQorCitCdWlsdCBPSyBvbiBNYWMgT1MgWCAxMC40LjEx ICgibWFrZSBtYWNvc3giKS4KK0Fsc28gIm1ha2UgbWFjb3N4K2tyYjUrb3BlbnNzbC4KKworQnVp bHQgT0sgb24gTGludXggUkhFTDQgKCJtYWtlIGxpbnV4IikuCitCdWlsdCBPSyBvbiBMaW51eCBS SEVMNCB3aXRoIE9wZW5TU0wgMC45LjdhICgibWFrZSBsaW51eCtzc2wiKS4KK0J1aWx0IE9LIG9u IExpbnV4IFJIRUw1ICgibWFrZSBsaW51eCIpLgorCisibWFrZSBsaW51eCtzc2wiIGZhaWxzIG9u IFJIRUw1IGJlY2F1c2Ugb2YgREVTLCBldmVuIHRob3VnaCB0aGUgdGFyZ2V0Cit0ZXN0cyBmb3Ig dGhlIHByZXNlbmNlIG9yIGFic2VuY2Ugb2YgdGhlIERFUyBsaWJyYXJpZXMuICBJbiB0aGlzIGNh c2UgdGhlCitsaWJyYXJpZXMgYXJlIHRoZXJlIGJ1dCB0aGV5IGxhY2sgdGhlIGZ1bmN0aW9ucyBk ZXNfZWNiM19lbmNyeXB0LAorZGVzX3JhbmRvbV9zZWVkLCBhbmQgZGVzX3NldF9vZGRfcGFyaXR5 LiAgVGhlIGJ1aWxkIHN1Y2NlZWRzIGFzOgorCisgIG1ha2UgbGludXgrc3NsIEtGTEFHUz0tVUNL X1NTTAorCitTaW5jZSBERVMgaXMgbm93IGNvbnNpZGVyZWQgaGFybWZ1bCwgSmVmZiBBbHRtYW4g c3VnZ2VzdHMgdGhhdCBhbGwgT3BlblNTTAorYnVpbGRzLCBldmVuIGZvciBvbGQgdmVyc2lvbnMs IHNob3VsZCBvbWl0IGl0ICgiSWYgeW91IGFyZSBidWlsZGluZyB3aXRoCitvcGVuc3NsIGFuZCBu byBrZXJiZXJvcyBvciBzcnAsIGp1c3QgZGlzYWJsZSBERVMuICBEaXNhYmxpbmcgREVTIHdpbGwg aW1wYWN0Cit0ZWxuZXQgYW5kIHJsb2dpbiBidXQgaXQgd29uJ3QgbWF0dGVyIGlmIHlvdSBoYXZl IG5vIGFiaWxpdHkgdG8gbmVnb3RpYXRlIGEKK3Nlc3Npb24ga2V5IikuCisKK0Zyb20gSWFuIEJl Y2t3aXRoLCBwYXRjaGVzIGZvciBEZWJpYW4gTGludXg6CisgLiBDaGFuZ2UgYWxsICctJyB0byAn XChoeScgaW4gbWFuIHBhZ2UgKG5ldyBwZWRhbnRyeSk6IGNrdWtlci5uci4KKyAuIE1ha2UgSUtT RCBhdXRoZW50aWNhdGlvbiAodXNpbmcgUEFNKSBhc2sgZm9yIGEgcGFzc3dvcmQgd2hlbiBhbiBp bnZhbGlkCisgICB1c2VybmFtZSBoYXMgYmVlbiBnaXZlbiwgdG8gYXZvaWQgZGlzY2xvc2luZyB3 aGljaCBhY2NvdW50IG5hbWVzIGFyZSB2YWxpZDoKKyAgIGNrdWZpby5jLCBja3V1czcuYy4KKyAu IEZpeCBzcGVsbGluZyBlcnJvcnM6IGNrY2Z0cC5jLCBja3V1czIuYywgY2t1a2VyLm5yLCBja2Nw cm8udywgY2t1dXNyLmguCisgLiBQYXRjaCBtYWtlZmlsZSB0byBzdXBwb3J0IGluc3RhbGwgdG8g YSBzdGFnaW5nIGFyZWEgd2l0aCBERVNURElSLgorIC4gU29tZSBvdGhlciBwYXRjaGVzIChtYWlu bHkgZm9yIHR5cG9zKSB3ZXJlIGZvciBwbGFpbi10ZXh0IGRvY3VtZW50YXRpb24KKyAgIGZpbGVz IHRoYXQgd2VyZSBnZW5lcmF0ZWQgZnJvbSBXZWIgcGFnZXM7IEkgdXBkYXRlZCB0aGUgd2ViIHBh Z2VzLgorCitBIGJpZyBjb3Jwb3JhdGUgQy1LZXJtaXQgdXNlciBoYXMgYW4gYXBwbGljYXRpb24g d2hlcmUgYSBsb2NhbCBDLUtlcm1pdAorbWFrZXMgYSBjb25uZWN0aW9uIHRvIGEgcmVtb3RlIG9u ZSwgdXBsb2FkcyBzb21lIGZpbGVzLCBhbmQgdGhlbiBpZiB0aGUKK3NlcnZlciBoYXMgYW55IG5l dyBwYXRjaCBmaWxlcyBmb3IgdGhlIGxvY2FsLCBpdCBzZW5kcyB0aGUgcGF0Y2hlcyBhbmQKK2Rv ZXMgYSBSRU1PVEUgSE9TVCBjb21tYW5kIHRvIHJ1biB0aGUgcGF0Y2ggcHJvZ3JhbS4gIFRoaXMg c3RvcHBlZCB3b3JraW5nCitpbiBDLUtlcm1pdCA2LjAgb3IgNy4wIHdoZW4gSSBwdXQgYSBjaGVj ayB0byBwcmV2ZW50IGl0LCBiZWNhdXNlICJpdCBtYWtlcworbm8gc2Vuc2UgdG8gc2VuZCBSRU1P VEUgY29tbWFuZHMgdG8gdGhlIGxvY2FsIGVuZCwgYmVjYXVzZSB0aGUgcmVzdWx0cyBhcmUKK3Nl bnQgYmFjayB0byB0aGUgcmVtb3RlIHRvIGJlIGRpc3BsYXllZCBvbiBpdHMgc2NyZWVuIGJ1dCBp dCBoYXMgbm8gc2NyZWVuIi4KK1RoYXQgbWF5IGJlIHRydWUsIGJ1dCBpZiB0aGUgdXNlciBuZWVk cyB0byBjb250cm9sIHRoZSBsb2NhbCBmcm9tIHRoZQorcmVtb3RlLCB0aGV5IHNob3VsZCBiZSBh YmxlIHRvLiAgSSByZW1vdmVkIHRoZSBjaGVja3MuICBUaGlzIGRvZXNuJ3Qgc29sdmUKK3RoZSBw cm9ibGVtIG9mIHdoZXJlIHRoZSBvdXRwdXQgZ29lczsgaWRlYWxseSBpdCB3b3VsZCBnbyB0byB0 aGUgbG9jYWwKK3NjcmVlbiBidXQgSSBkb24ndCBzZWUgYW55IGVsZWdhbnQgYW5kIHNpbXBsZSB3 YXkgdG8gbWFrZSB0aGF0IGNoYW5nZS4KK0hvd2V2ZXIgdGhlIG91dHB1dCByZWRpcmVjdG9ycyBj YW4gc3RpbGwgYmUgdXNlZCB3aXRoIHRoZSBSRU1PVEUgY29tbWFuZAorc28gdGhlIHJlc3VsdHMg Y2FuIGJlIGNhcHR1cmVkIHRvIGEgcmVtb3RlIGZpbGUsIHdoaWNoIGNvdWxkIHRoZW4gYmUgc2Vu dC4KK2NrdXVzNy5jLCA3IEp1biAyMDExLgorCitDaGFuZ2VkIFNFVCBWQVJJQUJMRS1FVkFMVUFU SU9OIHRvIFNFVCBDT01NQU5EIFZBUklBQkxFLUVWQUxVQVRJT04sIGJ1dCBsZWZ0Cit0aGUgZm9y bWVyIHZlcnNpb24gYXZhaWxhYmxlLiAgY2t1dXNyLmMsIDkgSnVuIDIwMTEuCisKK0RvY3VtZW50 ZWQgdGhlIFNFVCBDT01NQU5EIFZBUklBQkxFLUVWQUxVQVRJT04gY29tbWFuZCwgd2hpY2ggSSBh ZGRlZCBpbgorMjAwOC4gIGNrOTAuaHRtbCwgOSBKdW4gMjAxMS4KKworUmVuYW1lZCBhbGwgb2xk IE1hYyBPUyBYIG1ha2VmaWxlIHRhcmdldHMgdG8gaGF2ZSB0aGUgcHJlZml4ICJvbGQiIHRvIGF2 b2lkCitjb25mdXNpbmcgdGhlbSB3aXRoIHRoZSBjdXJyZW50IHRhcmdldHMsIGFuZCBtYWRlIG1h Y29zeDEwIGEgc3lub255bSBmb3IKK21hY29zeCwgc28gdGhvc2Ugd2hvIHVzZWQgcHJldmlvdXMg bWFrZWZpbGVzIHdpbGwgZ2V0IGEgY3VycmVudCB0YXJnZXQKK3dpdGhvdXQgaGF2aW5nIHRvIGtu b3cgdGhlIG5ldyBuYW1lLiAgbWFrZWZpbGUsIDkgSnVuIDIwMTEuCisKK0FkZGVkIFhNRVNTQUdF LCB3aGljaCBpcyB0byBNRVNTQUdFIGFzIFhFQ0hPIGlzIEVDSE86IHByaW50cyB0aGUgdGV4dAor d2l0aG91dCBhIGxpbmUgdGVybWluYXRvciwgc28gaXQgY2FuIGJlIGNvbnRpbnVlZCBieSBzdWJz ZXF1ZW50IFtYXU1FU1NBR0UKK2NvbW1hbmRzLiAgY2t1dXNyLltjaF0sIDkgSnVuIDIwMTEuCisK K0JhY2sgdG8gIm1ha2UgbGludXgrc3NsIiBvbiBSSEVMNS4uLiAgSSB0b29rIHRoZSBjb3dhcmQn cyB3YXkgb3V0IGFuZCBhZGRlZAorY29kZSB0byB0aGUgbWFrZWZpbGUgdGFyZ2V0IHRvIGNoZWNr IHdoZXRoZXIgdGhlIGJ1aWxkIHdvcmtlZCAoc29tZWJvZHkgbGV0CittZSBrbm93IGlmIHRoZXJl IGlzIGEgYmV0dGVyIHdheSB0byBjaGVjayksIGFuZCBpZiBub3QgdG8gZ2l2ZSBhIG1lc3NhZ2UK K3N1Z2dlc3RpbmcgdGhleSAibWFrZSBjbGVhbiA7IG1ha2UgbGludXgrc3NsIEtGTEFHUz0tVUNL X0RFUyIuICBtYWtlZmlsZSwKKzkgSnVuIDIwMTEuCisKK05vdGljZWQgdGhhdCBcZnJlY3Vyc2Uo KSB3b3VsZCBkdW1wIGNvcmUgaWYgY2FsbGVkIHdpdGggbm8gYXJndW1lbnRzLgorRml4ZWQgaW4g Y2t1dXM0LmMsIDkgSnVuIDIwMTEuCisKK0FkZGVkIFxxKCkgYXMgYW4gYWx0ZXJuYXRpdmUgdG8g dGhlIG1vcmUgdmVyYm9zZSBcZmxpdGVyYWwoKSBmb3IgcXVvdGluZworc3RyaW5ncyB0aGF0IGNv bnRhaW4gY2hhcmFjdGVycyAobGlrZSBcKSB0aGF0IHdvdWxkIG90aGVyd2lzZSBiZSBzaWduaWZp Y2FudAordG8gS2VybWl0LiAgSXQncyBtb3JlIGVmZmljaWVudCBiZWNhdXNlIGl0IGlzbid0IGEg ZnVuY3Rpb24gY2FsbCwgYW5kICdxJworaXMgYW4gaW50dWl0aXZlIGxldHRlciB0byBtZWFuICdx dW90ZScuICBJdCBhbHNvIHdvcmtzIGJldHRlciB0aGFuCitcZmxpdGVyYWwoKSBiZWNhdXNlIGZ1 bmN0aW9ucyB0cmVhdCBjb21tYXMgYW5kIGJyYWNlcyBzcGVjaWFsbHkuICBja3V1czQuYywKKzEw IEp1biAyMDExLgorCitCdWlsdCBPSyBvbiBWTVMgOC4zIG9uIEFscGhhLCBubyBuZXQuICBERUMg QyBjYXVnaHQgYSBjb3VwbGUgZ2xpdGNoZXMgaW4gdGhlCituZXcgY29kZSB0aGF0IGdjYyBkaWRu J3QgY2F0Y2gsIHdoaWNoIEkgZml4ZWQuICBja3V1c1syNV0uYywgMTAgSnVuIDIwMTEuCisKK0J1 aWx0IE9LIG9uIFZNUyA4LjMgb24gQWxwaGEgd2l0aCBNdWx0aW5ldCA1LjMuICBUaGUgU1NMIGJ1 aWxkIGZhaWxlZCBidXQKK0knbSBub3QgZ29pbmcgdG8gd29ycnkgYWJvdXQgaXQuICAxMCBKdW4g MjAxMS4KKworQnVpbHQgT0sgb24gTmV0QlNEIDUuMS4gIDEwIEp1biAyMDExLgorCitUcmllZCB0 byByZXN1cnJlY3QgbXkgb2xkICJidWlsZC1hbGwiIG1hY2hpbmUsIGFuIElCTSBOZXRmaW5pdHkg MzUwMCBmcm9tCisxOTk3IHdpdGggMjAtc29tZSBtb3VudGFibGUgYm9vdGFibGUgaGFyZCBkaXNr cyB3aXRoIGxvdHMgb2YgMTk5MHMgT1MncyBvbgordGhlbS4gIE5vIGRpY2UuICBJIGNhbiBzZWUg dGhlIEJJT1MgYnV0IG5vdCB0aGUgaGFyZCBkaXNrcy4gIFRoZQorY29uZmlndXJhdGlvbiBpcyBz dGlsbCBjb3JyZWN0IGJlY2F1c2UgaXQgdHJpZXMgdG8gYm9vdCBmcm9tIHRoZSBtb3VudGFibGUK K2hhcmQgZGlzaywgYnV0IGl0IGZhaWxzIChJIHRyaWVkIHNpeCBkaWZmZXJlbnQgb25lcykuCisK K1RyaWVkIHRvIHJlc3VycmVjdCBteSBvbGQgU2llbWVucyBOaXhkb3JmIFJNIDIwMCBNSVBTIG1h Y2hpbmUuICBCb290ZWQgT0ssCitoZWFkbGVzcyBldmVuLCBidXQgbWFrZXMgYSBoZWxsaXNoIGhp Z2gtcGl0Y2hlZCB3aGluZSwgbGlrZSBhIGRlbnRpc3QgZHJpbGwuCitJdCdzIHByZXR0eSBzbG93 IHRvby4gICJtYWtlIHNpbml4NTQyIiAoZm9yIFNJTklYIDUuNC4yKSBib21iZWQgYXQgbGluawor dGltZSBvbiBubyByZGNoaygpLiAgRml4ZWQgYnkgI2luY2x1ZGluZyA8c3lzL2ZpbGlvLmg+LiAg Y2t1dGlvLmMsIDEwIEp1biAyMDExLgorCitUcmllZCB0byByZXN1cnJlY3QgbXkgb2xkIFNDTyBY ZW5peCAyLjMuNCBtYWNoaW5lLCBhbHNvIGhlYWRsZXNzLiAgQW1hemluZ2x5CitpdCBzdGlsbCB3 b3JrczsgaXQgY2FuJ3QgdXNlIGEgbW9uaXRvciBidXQgSSBjYW4gVGVsbmV0IHRvIGl0LiAgSGFk IHRvIHR3ZWFrCitzb21lICNpZmRlZnMgYnV0IEkgZ290IGEgbm8tbmV0IHZlcnNpb24gYnVpbHQg c3VjY2Vzc2Z1bGx5LiAgQWNjb3JkaW5nIHRvIG15Citub3RlcywgaXQgaGFzbid0IGJlZW4gcG9z c2libGUgdG8gYnVpbGQgd2l0aCBUQ1AvSVAgc2luY2UgQy1LZXJtaXQgOC4wLAorYnV0IGhvdyBt YW55IHBlb3BsZSBldmVyIGhhZCBTQ08gWGVuaXggMi4zLjQgd2l0aCBUQ1AvSVAgYW55d2F5PyAg QW55d2F5IHdlCitzdGlsbCBoYXZlIHRoZSBiaW5hcmllcyBmb3IgQy1LZXJtaXQgNy4wLiAgY2t1 dXM0LmMsIDEwIEp1biAyMDExLgorCitCdWlsdCBPSyBvbiBBSVggNS4zLiAgQnVpbHQgT0sgb24g U29sYXJpcyAxMC4gIDExIEp1biAyMDExLgorCitUcmllZCBoYXJkZXIgdG8gcmV2aXZlIHRoZSBi dWlsZC1hbGwgbWFjaGluZSwgbm93IGl0IHNvcnQgb2Ygd29ya3MsIGJ1dCBub3QKK2FsbCBvZiB0 aGUgYm9vdGFibGUgT1MncyB3b3JrLiAgQnVpbHQgQy1LZXJtaXQgOS4wIE9LIG9uIE9wZW5CU0Qg My4wLiAgQnVpbHQKK09LIG9uIFFOWCA0LjI1IGJ1dCBoYWQgdG8gI2lmZGVmIHJlZmVyZW5jZXMg dG8gSVhBTlkgaW4gY2t1dGlvLmMgYW5kIGNrdXB0eS4KK0J1aWx0IE9LIG9uIE5ldEJTRCAxLjUu MSAoMjAwMCkuICBUcmllZCAibWFrZSBuZXRic2Qrc3NsIiBvbiB0aGlzIG9uZSwgaXQncworT3Bl blNTTCAwLjkuNWEgMSBBcHIgMjAwMCwgYnV0IGl0IGJvbWJzIG91dCBpbiBja3VhdGguYywgbm8g YmlnIGRlYWwuCitBbm90aGVyIHByb2JsZW0gaW4gTmV0QlNEIDEuNS4yIGlzIHRoYXQgZXZlbiB0 aG91Z2ggb2ZmX3QgaXMgOCwgQ0tfT0ZGX1QKK2lzIDQuICBXb3J0aCBub3RpbmcgYnV0IG5vdCB3 b3J0aCBmaXhpbmcgdW5sZXNzIHNvbWVvbmUgZWxzZSBub3RpY2VzLgorMTMgSnVuIDIwMTEuCisK K1N1U0UgNy4wLi4uIGJvb3RzIE9LIGJ1dCB0ZWxuZXQgc2VydmVyIGRvZXNuJ3Qgd29yay4gIENh biB0ZWxuZXQgb3V0IGJ1dAoraXQncyB0b28gZmxha3ksIGNvbm5lY3Rpb24gZHJvcHMgaWYgSSB0 cnkgdG8gdHJhbnNmZXIgYSBmaWxlLgorCitPcGVuQlNEIDIuNSBbMTk5OV0gT0suICBSZWQgSGF0 IDcuMSBPSy4gIFJlZCBIYXQgNy4xIHdpdGggT3BlblNTTCAwLjkuNgorbm90IE9LLCBzYW1lIGVy cm9yIGFzIHdpdGggMC45LjVhOgorCitja3VhdGguYworSW4gZmlsZSBpbmNsdWRlZCBmcm9tIGNr X3NzbC5oOjQ4LAorICAgICAgICAgICAgICAgICBmcm9tIGNrdWF0aC5jOjIyNToKKy91c3IvaW5j bHVkZS9vcGVuc3NsL2Rlcy5oOjc3OiB3YXJuaW5nOiByZWRlZmluaXRpb24gb2YgYEJsb2NrJwor Y2t1YXQyLmg6ODY6IHdhcm5pbmc6IGBCbG9jaycgcHJldmlvdXNseSBkZWNsYXJlZCBoZXJlCisv dXNyL2luY2x1ZGUvb3BlbnNzbC9kZXMuaDo4MzogcmVkZWZpbml0aW9uIG9mIGBzdHJ1Y3QgZGVz X2tzX3N0cnVjdCcKKy91c3IvaW5jbHVkZS9vcGVuc3NsL2Rlcy5oOjkxOiB3YXJuaW5nOiByZWRl ZmluaXRpb24gb2YgYFNjaGVkdWxlJworY2t1YXQyLmg6OTA6IHdhcm5pbmc6IGBTY2hlZHVsZScg cHJldmlvdXNseSBkZWNsYXJlZCBoZXJlCisKK1NvIGl0IGFwcGVhcnMgdGhhdCBPcGVuU1NMIHN1 cHBvcnQgaXMgYnJva2VuIGZvciBwcmUtMC45LjcuICBUcmllZAorYnVpbGRpbmcgaXQgYWdhaW4g d2l0aCAtVUNLX1NTTCAoc2luY2UgdGhlIGVycm9ycyBhcmUgb3JpZ2luYXRpbmcgZnJvbQorZnJv bSBkZXMuaCkuLi4gIEJ1dCBpdCBzdGlsbCBmYWlsZWQgZXhhY3RseSB0aGUgc2FtZSB3YXkuICBJ IGZvdW5kCisjaW5jbHVkZXMgZm9yIGRlcy5oIGluIGNrdWF0aC5jIGFuZCBhbmQgY2tfc3NsLmgg YW5kICNpZmRlZidkIHRoZW0gb3V0LAorYnV0IGl0IHN0aWxsIGZhaWxzOgorCitJbiBmaWxlIGlu Y2x1ZGVkIGZyb20gL3Vzci9pbmNsdWRlL29wZW5zc2wvZXZwLmg6ODksCisgICAgICAgICAgICAg ICAgIGZyb20gL3Vzci9pbmNsdWRlL29wZW5zc2wveDUwOS5oOjY3LAorICAgICAgICAgICAgICAg ICBmcm9tIC91c3IvaW5jbHVkZS9vcGVuc3NsL3NzbC5oOjY5LAorICAgICAgICAgICAgICAgICBm cm9tIGNrX3NzbC5oOjUxLAorICAgICAgICAgICAgICAgICBmcm9tIGNrdWF0aC5jOjIyNzoKKy91 c3IvaW5jbHVkZS9vcGVuc3NsL2Rlcy5oOjc3OiB3YXJuaW5nOiByZWRlZmluaXRpb24gb2YgYEJs b2NrJworY2t1YXQyLmg6ODY6IHdhcm5pbmc6IGBCbG9jaycgcHJldmlvdXNseSBkZWNsYXJlZCBo ZXJlCisvdXNyL2luY2x1ZGUvb3BlbnNzbC9kZXMuaDo4MzogcmVkZWZpbml0aW9uIG9mIGBzdHJ1 Y3QgZGVzX2tzX3N0cnVjdCcKKy91c3IvaW5jbHVkZS9vcGVuc3NsL2Rlcy5oOjkxOiB3YXJuaW5n OiByZWRlZmluaXRpb24gb2YgYFNjaGVkdWxlJworY2t1YXQyLmg6OTA6IHdhcm5pbmc6IGBTY2hl ZHVsZScgcHJldmlvdXNseSBkZWNsYXJlZCBoZXJlCisKK0J1aWx0IE9LIG9uIERlYmlhbiAyLjEu ICAxMyBKdW4gMjAxMS4KKworT24gRnJlZUJTRCA0LjQsIGl0IGJsb3dzIHVwIHdpdGg6Citja3Vm aW8uYzogSW4gZnVuY3Rpb24gdnBhc3MnOgorY2t1ZmlvLmM6ODIwMTogY29uZmxpY3RpbmcgdHlw ZXMgZm9yICdpbml0Z3JvdXBzJworL3Vzci9pbmNsdWRlL3VuaXN0ZC5oOjE1NDogcHJldmlvdXMg ZGVjbGFyYXRpb24gb2YgJ2luaXRncm91cHMnCitja3VmaW8uYzo4MjAxOiB3YXJuaW5nOiBleHRl cm4gZGVjbGFyYXRpb24gb2YgJ2luaXRncm91cHMnIGRvZXNuJ3QgbWF0Y2ggZ2xvYmFsCitvbmUu ICBGaXhlZCBieSBkZWZpbmluZyBOT0RDTElOSVRHUk9VUFMgZm9yIEZyZWVCU0QgaW4gY2t1Zmlv LmMuIEl0IG1pZ2h0IG5vdCAKK2JlIHRoZSByaWdodCBmaXgsIGJ1dCBJIGRvbid0IGhhdmUgYSBs b3Qgb2Ygb3RoZXIgRnJlZUJTRCB2ZXJzaW9ucyB0bworY29tcGFyZSB3aXRoLiAgQW55d2F5IG5v dyBpdCBidWlsZHMgT0sgb24gNC40LCBhbmQgYWxzbyBvbiBGcmVlQlNEIDMuMy4KK2NrdWZpby5j LCAxMyBKdW4gMjAxMS4KKworVHJpZWQgdG8gYnVpbGQgb24gU0NPIE9wZW4gU2VydmVyIDUuMC43 IGJ1dCBpdCBmYWlscyBhdCBsaW5rIHRpbWUgYmVjYXVzZQoraXQgY2FuJ3QgZmluZCByZGNoaygp LiAgQnV0IGl0J3Mgc3VwcG9zZWQgdG8gYmUgdGhlcmUhICBDb21lIGJhY2sgdG8gdGhpcworbGF0 ZXIuLi4KKworUmVkIEhhdCA2LjEgICAgICAgICAgICAgaTM4NiAgIDMyLzY0ICAgbGludXggICAg ICAgICAgMjMzMjU0NQorUmVkIEhhdCA3LjEgICAgICAgICAgICAgaTM4NiAgIDMyLzY0ICAgbGlu dXggICAgICAgICAgMjM2ODUyOAorUmVkIEhhdCBFTDQgICAgICAgICAgICAgaTM4NiAgIDMyLzc0 ICAgbGludXggICAgICAgICAgMjM2MzA2NworUmVkIEhhdCBFTDUuNiAgICAgICAgICAgaTM4NiAg ICA2NCAgICAgbGludXggICAgICAgICAgMjM3MTI3OQorU29sYXJpczkgICAgICAgICAgICAgICAg c3BhcmMgIDMyLzY0ICAgc29sYXJpczkgICAgICAgMjg0OTg5NgorU29sYXJpczkrc3NsICAgICAg ICAgICAgc3BhcmMgIDMyLzY0ICAgc29sYXJpczkgICAgICAgNTAyMTc2NAorU29sYXJpczEwICAg ICAgICAgICAgICAgc3BhcmMgIDMyLzY0ICAgc29sYXJpczEwICAgICAgMjg1NTc3NgorUU5YICAg ICAgICAgICAgICAgICAgICAgaTM4NiAgICAzMiAgICAgcW54MzIgICAgICAgICAgMjAxMjMyMyAK K05ldEJTRCAxLjUuMSAgICAgICAgICAgIGkzODYgICAzMi82NCAgIG5ldGJzZCAgICAgICAgIDIx OTgwNTUKK05ldEJTRCA1LjEgICAgICAgICAgICAgIGkzODYgICAzMi82NCAgIG5ldGJzZCAgICAg ICAgIDIxNTk4NjMKK09wZW5CU0QgMi41ICAgICAgICAgICAgIGkzODYgICAzMi82NCAgIG9wZW5i c2QgICAgICAgIDIyMzYwMzYKK01hYyBPUyBYIDEwLjYuNyAgICAgICAgIHg4Nl82NCAgNjQgICAg IG1hY29zeCAgICAgICAgIDIuN00KK01hYyBPUyBYIDEwLjQuMTEgICAgICAgIHBwYyAgICAzMi82 NCAgIG1hY29zeCAgICAgICAgIDI0OTYzMDQKK0RlYmlhbiAyLjEgICAgICAgICAgICAgIGkzODYg ICAzMi82NCAgIGxpbnV4ICAgICAgICAgIDIyMTMyMjEKK0ZyZWVCU0QgNC40ICAgICAgICAgICAg IGkzODYgICAzMi82NCAgIGZyZWVic2QgICAgICAgIDIyOTEzMzMKK0ZyZWVCU0QgMy4zICAgICAg ICAgICAgIGkzODYgICAzMi82NCAgIGZyZWVic2QgICAgICAgIDIxNDczNzAKK1NJTklYIDUuNDIg ICAgICAgICAgICAgIG1pcHMgICAgMzIgICAgIHNpbml4NTQyICAgICAgIDMzMTkzMjUgKDE5OTUp CitTQ08gVW5peHdhcmUgMi4xLjMgICAgICBpMzg2ICAgIDMyICAgICB1dzIxMyAgICAgICAgICAy MjQyMTc2CitTQ08gT1NSNi4wLjAgICAgICAgICAgICBpMzg2ICAgMzIvNjQgICBzY29fb3NyNjAw ICAgICAyMzY4MzAwCisKK01vcmUgYnVpbGRzLCAxNCBKdW5lIDIwMTE6CisKK1ZNUyA2LjIgICAg ICAgICAgICAgICAgIGFscGhhICAgMzIgICAgIG1ha2UgbW4gICAgICAgIDI1NTY5MjggTm8gVENQ L0lQCitWTVMgNi4yICAgICAgICAgICAgICAgICBhbHBoYSAgIDMyICAgICBtYWtlIG0gICAgICAg ICAzMTEyOTYwIFVDWCA0LjAKK1NvbGFyaXMgMTEgICAgICAgICAgICAgIGkzODYgICAzMi82NCAg IHNvbGFyaXMxMSAgICAgIDI4MjM4NjAKK1NvbGFyaXMgMTEgICAgICAgICAgICAgIGkzODYgICAz Mi82NCAgIHNvbGFyaXMxMStzc2wgIDI5OTM2NjAgT3BlblNTTCAwLjkuOGwKK05ldEJTRCA1LjEg ICAgICAgICAgICAgIGkzODYgICAzMi82NCAgIG5ldGJzZCtrcmI1ICAgIDIzMDc4NTUgS2VyYmVy b3MgNQorTGludXggU2xhY2t3YXJlIDEyLjEuMCAgaTM4NiAgIDMyLzY1ICAgbGludXggICAgICAg ICAgMjE3NTc1NAorTGludXggRmVkb3JhIDE0ICAgICAgICAgaTM4NiAgIDMyLzY0ICAgbGludXgg ICAgICAgICAgMjI1NjUxNAorTGludXggRmVkb3JhIDE0ICAgICAgICAgaTM4NiAgIDMyLzY0ICAg bGludXgrc3NsICAgICAgLi4uLi4uLiBPcGVuU1NMIDEuMC4wZAorTGludXggRmVkb3JhIDE0ICAg ICAgICAgaTM4NiAgIDMyLzY0ICAgbGludXgra3JiICAgICAgMjQ0OTYxNCAoKikKKworKCopIG1h a2UgbGludXgra3JiNSAiTElCUz0kTElCUyAvbGliL2xpYms1Y3J5cHRvLnNvLjMgL2xpYi9saWJj b21fZXJyLnNvLjIiCisKK05vdGljZWQgdGhhdCBuZXRic2Qrc3NsIGJ1aWxkIG9uIE5ldEJTRCA1 LjEgc2FpZCAiTmV0QlNEIDEuNSIgaW4gaXRzIGJhbm5lci4KK0ZpeGVkIGJ5IHJlcGxhY2luZyB0 aGUgb2xkIGhhcmR3aXJlZCB0YXJnZXQgd2l0aCB0aGUgbmV3ICJzdWJyb3V0aW5pemVkIgordGFy Z2V0IGEnbGEgbGludXgrc3NsIGFuZCBhZGFwdGluZyBpdCB0byBOZXRCU0QuICBtYWtlZmlsZSwg MTUgSnVuIDIwMTEuCisKK1NhbWUgZGVhbCBmb3IgS2VyYmVyb3MgNSwgbWFrZSBhIG5ldyBuZXRi c2Qra3JiNSB0YXJnZXQgYW5kIGl0IGJ1aWxkcyBvaywKK2F0IGxlYXN0IG9uY2Ugb25lIGZpZ3Vy ZXMgb3V0IHdoZXJlIHRoZSBLZXJiZXJvcyBoZWFkZXJzIGFuZCBsaWJzIGFyZS4KK21ha2VmaWxl LCAxNSBKdW4gMjAxMS4KKworU2FtZSBkZWFsIGZvciB0aGUgbmV0YnNkbmMgdGFyZ2V0LCBub3cg aXQgc2ltcGx5IGRlZmluZWQgTk9DVVJTRVMgYW5kCitjaGFpbnMgdG8gdGhlIG1haW4gbmV0YnNk IHRhcmdldC4gIG1ha2VmaWxlLCAxNSBKdW4gMjAxMS4KKworVHJpZWQgdG8gYnVpbGQgd2l0aCBL ZXJiZXJvcyA1IG9uIFNvbGFyaXMsIGZhaWxzIGJlY2F1c2UgdGhlIERFUyBsaWJyYXJ5CitubyBs b25nZXIgZXhpc3RzLiAgVGhpcyBvbmUgaXMgYmV5b25kIG1lLCBzb3JyeS4KKworTWFkZSBuZXcg dGFyZ2V0cyBmb3IgTWlyQlNELCBtaXJic2QgYW5kIG1pcmJzZCtzc2wsIG1ha2VmaWxlIDE1IEp1 biAyMDExLgorCitJbiBPcGVuU1VTRSAxMS4yIHdpdGggT3BlblNTTCAwLjkuOHIgd2UgYm9tYiBv biB1bmRlZmluZWQgcmVmZXJlbmNlcyBmcm9tCit2YXJpb3VzIERFUyBsaWJyYXJ5IHJvdXRpbmVz LiAgQnVpbGRzIE9LIHdpdGhvdXQgREVTLgorCitWYXJpb3VzIGxpbnV4K2tyYjUgYnVpbGRzIGZh aWwgYmVjYXVzZSBjYW4ndCBmaW5kIC1sZ3NzYXBpX2tyYjUKKworU1NMIGJ1aWxkcyB3aXRoIE9w ZW5TU0wgPCAwLjkuNyBmYWlsIGV2ZW4gdGhvdWdoIHRoZXJlIGlzIGNvZGUgdG8gc3VwcG9ydAor dGhlIG9sZGVyIFNTTC4KKworRml4ZWQgc29tZSBwcmludGYgJWxkIHZzIGludCBpbnN0YW5jZXMg aW4gdGhlIHNpemVvZnMgc2VjdGlvbiBvZiBTSE9XIEZFQVRVUkVTLgorY2t1dXM1LmMsIDE1IEp1 biAyMDExLgorCitGaXhlZCB0aGUgbmV3IGxpbnV4K3NzbCB0YXJnZXQgdG8gYWN0dWFsbHkgdXNl IHRoZSBTU0xJTkMgYW5kIFNTTExJQlMKK2RlZmluaXRpb25zLCBvb3BzLiAgbWFrZWZpbGUsIDE1 IEp1biAyMDExLgorCisxNSBKdW5lIDIwMTEgYnVpbGRzIChCZXRhLjAxKToKKworQUlYIDUuMyAg ICAgICAgICAgICAgICAgcHBjICAgIDMyLzY0ICAgYWl4K3NzbCAgICAgICAgMzI4Mzg0NiBPcGVu U1NMIDAuOS44bQorTmV0QlNEIDUuMSAgICAgICAgICAgICAgaTM4NiAgIDMyLzY0ICAgbmV0YnNk ICAgICAgICAgMjE1OTg2MworTmV0QlNEIDUuMSAgICAgICAgICAgICAgaTM4NiAgIDMyLzY0ICAg bmV0YnNkK3NzbCAgICAgMjM1MDI3NCBPcGVuU1NMIDAuOS45LWRldgorTmV0QlNEIDUuMSAgICAg ICAgICAgICAgaTM4NiAgIDMyLzY0ICAgbmV0YnNkK2tyYjUgICAgMjM0OTYyNyBNSVQgS3JiNSAx LjYuMworRnJlZUJTRCA4LjIgICAgICAgICAgICAgaTM4NiAgIDMyLzY0ICAgZnJlZWJzZCAgICAg ICAgMjI5ODQxNAorRnJlZUJTRCA4LjIgICAgICAgICAgICAgaTM4NiAgIDMyLzY0ICAgZnJlZWJz ZCtzc2wgICAgMjQ0ODk2MSBPcGVuU1NMIDAuOS44cQorT3BlbkJTRCA0LjcgICAgICAgICAgICAg aTM4NiAgIDMyLzY0ICAgb3BlbmJzZCAgICAgICAgMjI2NjEzMgorT3BlbkJTRCA0LjcgICAgICAg ICAgICAgaTM4NiAgIDMyLzY0ICAgb3BlbmJzZCtzc2wgICAgMjQwOTI2MyBPcGVuU1NMIDAuOS44 aworTWlyQlNEIDEwICAgICAgICAgICAgICAgaTM4NiAgIDMyLzY0ICAgbWlyYnNkICAgICAgICAg MjIxNjYwMQorTWlyQlNEIDEwICAgICAgICAgICAgICAgaTM4NiAgIDMyLzY0ICAgbWlyYnNkK3Nz bCAgICAgMjM1ODMxOCBPcGVuU1NMIDAuOS44cgorT3BlblN1c2UgMTEuMiAgICAgICAgICAgeDg2 XzY0ICA2NCAgICAgbGludXggICAgICAgICAgMjM0ODQ2OAorT3BlblN1c2UgMTEuMiAgICAgICAg ICAgeDg2XzY0ICA2NCAgICAgbGludXgrc3NsICgqKSAgMjU0NjU0MCBPcGVuU1NMIDAuOS44cgor UkhFTCA1LjYgICAgICAgICAgICAgICAgaWE2NCAgICA2NCAgICAgbGludXggICAgICAgICAgNDM5 MDY4NworUkhFTCA1LjYgICAgICAgICAgICAgICAgaWE2NCAgICA2NCAgICAgbGludXgrc3NsICgq KSAgNDc3NTAwNyBPcGVuU1NMIDAuOS44ZQorVWJ1bnR1IDkuMTAgICAgICAgICAgICAgaTM4NiAg IDMyLzY0ICAgbGludXggICAgICAgICAgMjI3NTUyMworVWJ1bnR1IDkuMTAgICAgICAgICAgICAg aTM4NiAgIDMyLzY0ICAgbGludXgrc3NsICAgICAgMjQ2NjcwOCBPcGVuU1NMIDAuOS44cgorR2Vu dG9vIDEuMTIuMTMgICAgICAgICAgcHBjICAgIDMyLzY0ICAgbGludXggICAgICAgICAgMjM4NjU5 NworR2VudG9vIDEuMTIuMTMgICAgICAgICAgcHBjNjQgICA2NCAgICAgbGludXggICAgICAgICAg Mjc0OTAxNQorR2VudG9vIDEuMTIuMTMgICAgICAgICAgcHBjNjQgICA2NCAgICAgbGludXgrc3Ns ICAgICAgMzAwMjE1MCBPcGVuU1NMIDAuOS44cgorR2VudG9vIDEuMTIuMTMgICAgICAgICAgc3Bh cmMgIDMyLzY0ICAgbGludXggICAgICAgICAgMjQ3ODM4MgorR2VudG9vIDEuMTIuMTMgICAgICAg ICAgc3BhcmMgIDMyLzY0ICAgbGludXgrc3NsICAgICAgMjY5MDQ5OSBPcGVuU1NMIDAuOS44cgor U29sYXJpcyA5ICAgICAgICAgICAgICAgc3BhcmMgIDMyLzY0ICAgc29sYXJpczkgICAgICAgMjg0 OTg5NgorU29sYXJpcyAxMCAgICAgICAgICAgICAgaTM4NiAgIDMyLzY0ICAgc29sYXJpczEwICAg ICAgMjgzNzYyMAorSVJJWCA2LjUgICAgICAgICAgICAgICAgUjEwMDAwIDMyLzY0ICAgaXJpeDY1 ICAgICAgICAgMjg2OTcwNAorCisqIGFuZCBLRkxBR1M9LVVDS19ERVMKKworVHJpZWQgYnVpbGRp bmcgb24gTmV0QlNEIDUuMSB3aXRoIEhlaW1kYWwgS2VyYmVyb3MgdXNpbmc6CisKK21ha2UgbmV0 YnNkK2tyYjUgXAorICJLRkxBR1M9LURIRUlNREFMIiBcCisgIks1SU5DPS1JL3Vzci9pbmNsdWRl IiBcCisgIks1TElCPS1ML3Vzci9saWIiCisKK0l0IGZvdW5kIGFsbCBpdHMgaGVhZGVycyBPSywg YnV0IGl0IGJsZXcgdXAgaW4gY2t1YXRoLmMuICBTbWFsbCB3b25kZXIsCitja2NjZmcuaHRtbCBz YXlzOgorCitIRUlNREFMCisgICAgU2hvdWxkIGJlIGRlZmluZWQgaWYgS2VyYmVyb3MgViBzdXBw b3J0IGlzIHByb3ZpZGVkIGJ5IEhFSU1EQUwuIFN1cHBvcnQKKyAgICBmb3IgdGhpcyBvcHRpb24g aXMgbm90IGNvbXBsZXRlIGluIEMtS2VybWl0IDguMC4gQW55b25lIGludGVyZXN0ZWQgaW4KKyAg ICB3b3JraW5nIG9uIHRoaXMgc2hvdWxkIGNvbnRhY3Qga2VybWl0LXN1cHBvcnQuIAorCisna3Ji NS1jb25maWcgLS12ZXJzaW9uJyBnaXZlcyB0aGUgTUlUIEtlcmJlcm9zIDUgdmVyc2lvbiBudW1i ZXIuCisKK01ha2UgYSBuZXcgbmV0YnNkK2tyYjUrc3NsIHRhcmdldCBiYXNlZCBvbiB0aGUgY29t YmluYXRpb24gb2YgdGhlIG5ldworbmV0YnNkK3NzbCBhbmQgbmV0YnNkK2tyYjUgdGFyZ2V0cy4g IFRoZXJlIHdlcmUgbG90cyBvZiB3YXJuaW5ncyBpbiB0aGUKK2NvbXBpbGF0aW9uIGJ1dCBubyBl cnJvcnMsIGJ1dCBpdCBwcm9kdWNlZCBhbiBleGVjdXRhYmxlIHRoYXQgc3RhcnRzIGFuZAorZG9l cyBub3JtYWwgdGhpbmdzIGJ1dCBJIGhhdmUgbm8gaWRlYSBpZiB0aGUgU1NMIG9yIEtlcmJlcm9z IGZ1bmN0aW9ucyB3b3JrLgorbWFrZWZpbGUsIDE2IEp1biAyMDExLgorCitDaGFuZ2VkIHRoZSBj dS1zb2xhcmlzOS1rcmI1IHRhcmdldCB0byB0ZXN0IGZvciB0aGUgcHJlc2VuY2Ugb2YgREVTIGJl Y2F1c2UKK0RFUyBpc24ndCB0aGVyZSwgdG8gc2VlIGlmIHRoaXMgd291bGQgYWxsb3cgYSBLZXJi ZXJvcyBidWlsZCB0byBwcm9jZWVkLgorQW5kIGl0IHdvcmtlZCwgYW1hemluZy4gIEF0IGxlYXN0 IHRoZSBidWlsZCBjb21wbGV0ZWQsIEkgaGF2ZSBubyB3YXkgdG8gdGVzdAordGhlIEtlcmJlcm9z IHBhcnQuICBtYWtlZmlsZSwgMTYgSnVuIDIwMTEuCisKK1VwZGF0ZWQgdGhlIHNvbGFyaXM5K3Nz bCB0YXJnZXQgdG8gZG8gdGhlIERFUyB0ZXN0aW5nLiAgbWFrZWZpbGUsIDE2IEp1biAyMDExLgor CitVcGRhdGVkIGN1LXNvbGFyaXMra3JiNSB0YXJnZXQgdG8gdGVzdCB3aGV0aGVyIHRoZSBHU1NB UEkgbGlicmFyeSBpcyBjYWxsZWQKK2xpYmdhc3NhcGkgb3IgbGliZ2Fzc2FwaV9rcmI1LiAgbWFr ZWZpbGUsIDE2IEp1biAyMDExLgorCitBZGRlZCBsb3RzIG9mIHRlc3RzIHRvIHRoZSBMaW51eCBL ZXJiZXJvcyA1IGVudHJpZXMsIGxpbnV4K2tyYjUgYW5kCitsaW51eCtrcmI1K3NzbCwgYmVjYXVz ZSBzb21lIGhhdmUgbGliazVjcnlwdG8gYW5kIHNvbWUgZG9uJ3Q7IHNvbWUgaGF2ZQorbGliY29t X2VyciBhbmQgc29tZSBkb24ndDsgYW5kIHNvbWUgaGF2ZSBsaWJnc3NhcGlfa3JiNSAoZS5nLiBS SEVMNSwKK09wZW5TdXNlIDExLjIpIHdoZXJlYXMgb3RoZXJzIGhhdmUgbGliZ3NzYXBpIChHZW50 b28pLgorCisxNiBKdW5lIDIwMTEgYnVpbGRzIChCZXRhLjAxKToKKworTmV0QlNEIDUuMSBpMzg2 ICAgMzIvNjQgIG5ldGJzZCtrcmI1K3NzbCAgIDI0NTE3NTcgT3BlblNTTCAwLjkuOSBNSVQgS3Ji NSAxLjYuMworU29sYXJpcyA5ICBzcGFyYyAgMzIvNjQgIHNvbGFyaXM5K2tyYjUgICAgIDI1NDMw MzYgTUlUIEtlcmJlcm9zIDUgMS43LjEKK1NvbGFyaXMgOSAgc3BhcmMgIDMyLzY0ICBzb2xhcmlz OStzc2wgICAgICA1MDIxNTQ0IE9wZW5TU0wgMC45LjhxIChnY2MpCitHZW50b28uLi4gIHBwYyAg ICAzMi82NCAgbGludXggICAgICAgICAgICAgMjM4NjU5NworR2VudG9vLi4uICBwcGMgICAgMzIv NjQgIGxpbnV4K3NzbCAgICAgICAgIDI1OTM1NjEgT3BlblNTTCAwLjkuOHIgCitHZW50b28uLi4g IHBwYzY0ICAgNjQgICAgbGludXggICAgICAgICAgICAgMjc0OTAxNQorR2VudG9vLi4uICBwcGM2 NCAgIDY0ICAgIGxpbnV4K3NzbCAgICAgICAgIDMwMDIxNTAgT3BlblNTTCAwLjkuOHIgCitSSEVM NSAgICAgIHg4Nl82NCAgNjQgICAgbGludXgra3JiNSAoKikgICAgMjU2Mzg3OCBNSVQgS2VyYmVy b3MgNSAxLjYuMQorUkhFTDUgICAgICB4ODZfNjQgIDY0ICAgIGxpbnV4K2tyYjUrc3NsKCopIDI1 NjM4NzggTUlUIEtlcmJlcm9zIDUgMS42LjEKK0ZlZG9yYSAxNCAgaTM4NiAgIDMyLzY0ICBsaW51 eCtrcmI1K3NzbCAgICAyNTM5ODkxIE1JVCBLcmI1ICsgT3BlblNTTCAwLjkuOHIKKworKiBLRkxB R1M9LVVDS19ERVMKKworLS0tIEMtS2VybWl0IDkuMC4yOTkgQmV0YS4wMSAtLS0KKworc2l6ZW9m KCkgY2FuIHJldHVybiBhIGxvbmcgb3IgYW4gaW50LCBzbyBuZWl0aGVyIHByaW50ZigiJWQiLHNp emVvZihibGFoKSk7CitvciBwcmludGYoIiVsZCIsc2l6ZW9mKGJsYWgpKTsgY2FuIGJlIHVzZWQg ZXZlcnl3aGVyZS4gIENoYW5nZWQgdGhlCisic2l6ZW9mcyIgc2VjdGlvbiBvZiBTSE9XIEZFQVRV UkVTIGluIHRoZSBkdW1iZXN0IChhbmQgdGhlcmVmb3JlIG1vc3QKK3BvcnRhYmxlKSB3YXkgdG8g c3F1ZWxjaCB0aGUgd2FybmluZ3MuICBja3V1czUuYywgMTcgSnVuIDIwMTEuCisKK0Zyb20gSm9o biBEdW5sYXA6ICJXYXRjaGluZyB0aGUgc2VydmVyIHNjcmVlbiBsZWQgbWUgdG8gb2ZmZXIgYSBj b3NtZXRpYworcGF0Y2ggZm9yIGNrdXVzeC5jLiAgSSBub3RpY2VkIHRoYXQgdGhlIHNlcnZlciBz Y3JlZW4gc2FpZCBpdCB3YXMKKyJSRVNFTkRJTkciIHdoZW4gaXQgcmVhbGx5IHdhc24ndC4gIFRo ZSBhdHRhY2hlZCBwYXRjaCBlbWl0cyBibGFua3MgdG8KK2luc3VyZSB0aGF0IG9sZCBsYWJlbHMg YXJlIGNvbXBsZXRlbHkgZXJhc2VkLiIgIGNrdXVzeC5jLCAxNyBKdW4gMjAxMS4KKworTmVsc29u IEJlZWJlIGZvdW5kIHR3byBwbGFjZXMgd2hlcmUgSSBoYWQgU1NMTElCUyBpbiB0aGUgbWFrZWZp bGUgaW5zdGVhZCBvZgorU1NMTElCLiAgbWFrZWZpbGUsIDE4IEp1biAyMDExLgorCitNb3JlIGlt cG9ydGFudCBoZSBrbmV3IGhvdyB0byBmb3JjZSBnY2MgdG8gbG9hZCB0aGUgcmlnaHQgaGVhZGVy IGZpbGVzIGZvcgorT3BlblNTTCAxLjAuMGQgKGJ5IHVzaW5nICctaXN5c3RlbScgcmF0aGVyIHRo YW4gJy1JJykuICBQcmV2aW91c2x5IGl0IHdhcwordXNpbmcgdGhlIDAuOS44ciBoZWFkZXIgZmls ZXMgYnV0IGxpbmtpbmcgd2l0aCB0aGUgMS4wLjBkIGxpYnJhcmllcy4gIFRoaXMKK2lzIG5vdCBp biB0aGUgc291cmNlcyBvciBtYWtlZmlsZTsgaXQncyBkb25lIHdoZW4gZ2l2aW5nIHRoZSAnbWFr ZScgY29tbWFuZDoKKworICBleHBvcnQgUEFUSD0vdXNyL2JpbjokUEFUSAorICBleHBvcnQgU1NM SU5DPS1pc3lzdGVtL3Vzci9pbmNsdWRlCisgIGV4cG9ydCAiU1NMTElCPS1ML3Vzci9saWIgLVds LC1ycGF0aCwvdXNyL2xpYiIKKyAgbWFrZSBsaW51eCtzc2wKKworRm9sZGVkIHRoZSBwcmV2aW91 cyBsaW51eCtvcGVuc3NsK3psaWIrc2hhZG93K3BhbSBhbmQgbGludXgrb3BlbnNzbCtzaGFkb3cK K3RhcmdldHMgaW50byBsaW51eCtzc2wuICBDaGVja2VkIHRoZSBsaW51eHNvIChzY3JpcHRpbmcg b25seSkgdGFyZ2V0LCBidWlsZHMKK09LLCA2MDBLLiAgTWFkZSBuZXcgc3Vicm91dGluaXplZCBs aW51eCtrcmI1K2tyYjQgdGFyZ2V0IGJ1dCBjYW4ndCBmaW5kCithbnlwbGFjZSB0byB0ZXN0IGl0 LiAgIE1hZGUgbmV3IHN1YnJvdXRpbml6ZWQgbGludXgrc2hhZG93K3BhbSB0YXJnZXQsIHdvcmtz CitmaW5lIG9uIFJIRUw0LiAgUmV2aXNlZCBjb21tZW50cyBhbmQgbGlzdHMgYWdhaW4uICBtYWtl ZmlsZSwgMTggSnVuIDIwMTEuCisKK0ZvciB0aGUgcGx1Z2dhYmxlLWRpc2sgT1MncyB0aGF0IGJv b3QgT0sgYnV0IGxhY2sgYSB3b3JraW5nIG5ldHdvcmssIEkKK3JpZ2dlZCB1cCBhIHNlcmlhbCBj b25uZWN0aW9uIHVzaW5nIGEgREI5LUZGIG51bGwgbW9kZW0gY2FibGUsIGFuZCB0aGVuIGEKK0RC OS1NRiBtb2RlbSBjYWJsZSB0byBtYWtlIGl0IHJlYWNoLiAgSSBkb24ndCBzZWUgYW55IG1vZGVt IHNpZ25hbHMgb24KK2VpdGhlciBlbmQsIGJ1dCB0aGUgZGF0YSBnb2VzIHRocm91Z2ggT0suICBD T00xIG9uIHRoZSBkZXNrdG9wIFBDLAorL2Rldi90dHlTMSBvciB3aGF0ZXZlciBvbiBMYWIuICBT aW5jZSB0aGVyZSBhcmUgbm8gbW9kZW0gc2lnbmFscywgY2FuJ3QgdXNlCitSVFMvQ1RTLiAgQXQg NTc2MDBicHMgd2l0aCBYb24vWG9mZiwgNTAwLWJ5dGUgcGFja2V0cyBhbmQgc2xpZGluZyB3aW5k b3dzLAordHJhbnNmZXJzIHdvcmsgT0sgYXQgYWJvdXQgNTAwMGNwcyB1c2luZyA1IHdpbmRvdyBz bG90czsgdGFrZXMgOCBtaW51dGVzIHRvCit0cmFuc2ZlciB0aGUgZ3ppcHBlZCBDLUtlcm1pdCB0 YXJiYWxsLiAgS2VybWl0IHRvIHRoZSByZXNjdWUuICAxOSBKdW4gMjAxMS4KKworVHJhbnNmZXJy ZWQgdGhlIHRhcmJhbGwgb3ZlciBzZXJpYWwgcG9ydHMgdG8gU0NPIE9TUjUuMC41IGF0IDM4LjRL YnBzLCB0aGUKK2hpZ2hlc3Qgc3BlZWQgc3VwcG9ydGVkLCAxMiBtaW51dGVzLCBubyBlcnJvcnMs IDMzMDBjcHMuICBVbnBhY2ssIG1ha2UKK3NjbzMydjUwNXVkaywgT0suICBBbHNvIGJ1aWx0IHRo ZSBUQ1AvSVAgdmVyc2lvbiBhbmQgaXQgYWxtb3N0IG1hZGUgYW4KK291dGJvdW5kIGNvbm5lY3Rp b24sIGJ1dCBvbmx5IG9uY2UgKG5vdCBhIEtlcm1pdCBwcm9ibGVtIGJ1dCBzb21ldGhpbmcgd2l0 aAordGhlIFRDUC9JUCBzdGFjaykuICAxOSBKdW4gMjAxMS4KKworRGl0dG8gZm9yIFNvbGFyaXMg Mi42L2kzODYsIGV4Y2VwdCA1Ny42S2JwcywgNEstYnl0ZSBwYWNrZXRzLCBubyBwcm9ibGVtLgor U29sYXJpcyA4L2kzODYsIGRpdHRvLiAgMTkgSnVuIDIwMTEuCisKK1NDTyBPcGVuU2VydmVyIDUu MC41ICBpMzg2ICAgMzIgICBzY28zMnY1MDV1ZGsgICAgIDE5NDA5NjQgIE5vIFRDUC9JUAorU0NP IE9wZW5TZXJ2ZXIgNS4wLjUgIGkzODYgICAzMiAgIHNjbzMydjUwNXVka25ldCAgMjMxNDY2OCAg V2l0aCBUQ1AvSVAKK1N1biBTb2xhcmlzIDIuNiAgICAgICBpMzg2ICAgMzIgICBzb2xhcmlzMjZn ICAgICAgIDQ2NjEzNjgKK1N1biBTb2xhcmlzIDggICAgICAgICBpMzg2ICAgMzIgICBzb2xhcmlz OGcgICAgICAgIDQ2NzU0MzIKKworV2hlbiB1c2luZyBjb21wYWN0IHN1YnN0cmluZyBub3RhdGlv biwgXHMoeHhbNF0pIHJldHVybnMgdGhlIHdob2xlIHN0cmluZworeHggc3RhcnRpbmcgYXQgcG9z aXRpb24gNCwgYnV0IFxzKHh4WzQ6XSkgcmV0dXJucyBhbiBlbXB0eSBzdHJpbmcuICBGaXhlZAor dGhlIGxhdHRlciB0byBiZSBsaWtlIHRoZSBmb3JtZXIuICBja3V1czUuYywgMjAgSnVuIDIwMTAu CisKK1JlYWxseSBpdCB3b3VsZCBoYXZlIGJlZW4gbmljZXIgaWYgXHMoeHhbNF0pIHJldHVybmVk IGEgc2luZ2xlIGNoYXJhY3RlciwKK3RoZSA0dGggY2hhcmFjdGVyIG9mIHh4LCBidXQgaXQncyB0 b28gbGF0ZSBub3cuICBBZGRlZCBhbm90aGVyICJzZXBhcmF0b3IiCitjaGFyYWN0ZXIgJy4nIChw ZXJpb2QpIGZvciB0aGF0OiBccyh4eFs0Ll0pIGlzIHRoZSA0dGggY2hhcmFjdGVyIG9mIHh4Lgor Y2t1dXM0LmMsIDIwIEp1biAyMDEwLgorCitCYWNrIHRvIFNDTyBPU1I1LjAuNy4uLiBUaGlzIGZh aWxlZCBiZWZvcmUgYmVjYXVzZSAncmRjaGsnIGNhbWUgdXAgdW5rbm93bgorYXQgbGluayB0aW1l LCB1bmxpa2UgYWxsIHByZXZpb3VzIE9TUjUncywgdGhhdCB1c2VkIHJkY2hrKCkgaW4gcGxhY2Ug b2YgdGhlCitGSU9OUkVBRCBpb2N0bC4gIEFkZGVkICNpZmRlZnMgdG8gbWFrZSBhIHNwZWNpYWwg Y2FzZSBmb3IgNS4wLjcuICBJJ20gbm90CitzdXJlIHRoaXMgaXMgdGhlIGJlc3Qgd2F5LCBidXQg dGhpcyBpcyB0aGUgbWluaW1hbCBjaGFuZ2UgdG8gZ2V0IGl0IHRvIHdvcmsuCitJZiBhbnlib2R5 IGNhcmVzLCBtYXliZSB0aGUgc2FtZSBjYW4gYmUgZG9uZSBmb3IgcHJldmlvdXMgT1NSNSByZWxl YXNlcy4KK2NrdXRpby5jLCAyMCBKdW4gMjAxMCAoc2VhcmNoIGZvciBTQ09fT1NSNTA3KS4KKwor U0NPIE9wZW5TZXJ2ZXIgNS4wLjcgIGkzODYgICAzMiAgIHNjbzMydjUwNyAgICAgICAgMTg5NTcy NCAgTm8gVENQL0lQCitTQ08gT3BlblNlcnZlciA1LjAuNyAgaTM4NiAgIDMyICAgc2NvMzJ2NTA3 bmV0ICAgICAyMjQ2NzkyICBXaXRoIFRDUC9JUAorCitDaGVja2VkIGN1cnJlbnQgY29kZSBvbiBS SEVMNCwgZm91bmQgdGhhdCBteSBHU1NBUEktbGliIGZpbmRpbmcgbWFrZWZpbGUKK3RhcmdldCBk aWRuJ3QgbG9vayBpbiBlbm91Z2ggcGxhY2VzOyBhZGRlZCBzb21lIG1vcmUuICBtYWtlZmlsZSwg MjEgSnVuIDIwMTEuCisKK0dvdCByZXBvcnRzIGJhY2sgb24gSFBVWCBmcm9tIFBldGVyIEVpY2ho b3JuLCBhbG1vc3QgYWxsIGdvb2Qgb24gSFAtVVggNywgOCwKKzksIDEwLCBhbmQgMTEuICAyMS0y MiBKdW4gMjAxMS4KKworR290IGFjY2VzcyB0byBEZWJpYW4gNS4wIGFuZCA3LXRvLWJlICgiV2hl ZXp5L1NpZCIpLiAgUmVndWxhciAnbWFrZSBsaW51eCcgaXMKK09LIGluIERlYmlhbiA1LCBidXQg aW4gNyBjYW4ndCBmaW5kIGNyeXB0LCByZXNfc2VhcmNoLCBvciBkbl9leHBhbmQ7IGhhZAordG8g YWRkIG1vcmUgbGlicmFyeSBzZWFyY2ggY2xhdXNlcyB0byAnbWFrZSBsaW51eCcuICBtYWtlZmls ZSwgMjEgSnVuIDIwMTEuCisKK0luIERlYmlhbiA3LjAsIGxpYms1Y3J5cHRvIGNvdWxkIG5vdCBi ZSBmb3VuZCB3aXRob3V0IGFkZGluZyBhbm90aGVyIGNsYXVzZQordG8gJ21ha2UgbGludXgra3Ji NScuICBUaGF0IGRvbmUsIHRoZSBTU0wgYnVpbGQgKDEuMC4wZCkgd2FzIE9LLCBhcyB3ZWxsIGFz Cit0aGUga3JiNStzc2wgb25lLiAgbWFrZWZpbGUsIDIxIEp1biAyMDExLgorCitJIGZvdW5kIGEg TGludXggYm94IHRoYXQgaGFkIGJvdGggS2VyYmVyb3MgNCBhbmQgNSBpbnN0YWxsZWQgYW5kIHRy aWVkICdtYWtlCitsaW51eCtrcmI1K2tyYjQnLCB3aGljaCBmYWlsZWQgYmVjYXVzZSBvZiBtaXNz aW5nIERFUyBmdW5jdGlvbnMuICBUcmllZAorJ21ha2UgbGludXgra3JiNStrcmI0IEtGTEFHUz0t VUNLX0RFUycsIGJ1dCB0aGF0IGZhaWxzIHRvbywgZXZlbiB0aG91Z2ggaXQKK2RvZXNuJ3QgZmFp bCBmb3IgS2VyYmVyb3MgNSBhbG9uZSwgc28gcHJvYmFibHkgc29tZSBLcmI0IGNvZGUgaXMgbWFr aW5nCit1bmd1YXJkZWQgY2FsbHMgdG8gdGhlIERFUyByb3V0aW5lcy4gIFdoYXQgaXMgcmVhbGx5 IG5lZWRlZCBpcyBhIHdheSB0bworY29tcGxldGVseSBzdHJpcCBhbGwgREVTIHJlZmVyZW5jZXMg ZnJvbSBhbnkgZ2l2ZW4gYnVpbGQsIGNvZGUgYW5kIG1ha2VmaWxlLAorYSBiaWcgZGVhbC4gIDIx IEp1biAyMDExLgorCitGaXhlZCBzb21lIHR5cG9zIGluIENPUFlJTkcuVFhUIChub3RpY2VkIGJ5 IElhbiBCZWNrd2l0aCkuICAyNCBKdW4gMjAxMS4KKworR290IGFjY2VzcyB0byBwZXJoYXBzIHRo ZSBsYXN0IGxpdmluZyA0LjNCU0QgVkFYIHN5c3RlbS4gIEl0IGRvZXNuJ3QgaGF2ZQorU0VFS19D VVIgc28gSSBoYWQgdG8gI2lmZGVmIG91dCB0aGUgXGZwaWN0dXJlKCkgZnVuY3Rpb24uICBBc2lk ZSBmcm9tIHRoYXQsCitubyBwcm9ibGVtcy4gIGNrdXVzNC5jLCAyNCBKdW4gMjAxMS4KKworSSBo YWQgYmVlbiB3YW50aW5nIHRoZSBTLUV4cHJlc3Npb24gKFJPVU5EIHgpIHRvIGFsbG93IGEgc2Vj b25kIGFyZ3VtZW50IG4sCit3aGljaCwgaWYgZ2l2ZW4sIHRlbGxzIHdoZXJlIHRoZSByb3VuZGlu ZyBzaG91bGQgb2NjdXIuICBJZiBuIGlzIHBvc2l0aXZlLAordGhlIG51bWJlciBpcyByb3VuZGVk IHRvIG4gZGVjaW1hbCBwbGFjZXMuICBJZiB6ZXJvLCBpdCBpcyByb3VuZGVkIHRvIHRoZQorbmVh cmVzdCBpbnRlZ2V0LiAgSWYgcG9zaXRpdmUsIHRoZSBudW1iZXIgaXMgcm91bmRlZCB0byB0aGUg bmVhcmVzdCBwb3dlciBvZgorMTA7IGUuZy4gLTIgbWVhbnMgInRvIHRoZSBuZWFyZXN0IGh1bmRy ZWQiLiAgSWYgUk9VTkQgaXMgdXNlZCBhcyBiZWZvcmUsCit3aXRoIG9uZSBhcmd1bWVudCwgaXQg d29ya3MgYXMgYmVmb3JlLiAgY2tjbGliLmMsIGNrdXVzMy5jLCAyNSBKdW4gMjAxMS4KKworRnJv bSBBcnRodXIgTWFyc2gsIGEgZmV3IG1vcmUgZGlyZWN0b3JpZXMgdG8gdGVzdCBmb3IgbGlicmVz b2x2IGluIExpbnV4LgorbWFrZWZpbGUsIDI2IEp1biAyMDExLgorCitGcm9tIE1hcnRpbiBWb3Js YWVuZGVyLCBhIGZpeCBmb3IgdGhlIFZNUyBmaWxlLXRyYW5zZmVyIGRpc3BsYXkgYW5kCitzdGF0 aXN0aWNzLCBhIHBsYWNlIHdoZXJlIGEgZmlsZSBsZW5ndGggd2Fzbid0IGJlaW5nIGNhc3QgdG8g Q0tfT0ZGX1QKK2luIHpjaGtpKCkuICBja3ZmaW8uYywgMjggSnVuIDIwMTEuCisKK1VwZGF0ZWQg dmVyc2lvbiB0byA5LjAuMzAwIGFuZCByZW1vdmVkIHRoZSBCZXRhIGRlc2lnbmF0aW9uLgorY2tj bWFpLmMsIG1ha2VmaWxlLCAyOCBKdW4gMjAxMS4KKworUmVtb3ZlZCBzb2xhcmlzOV82NCB0YXJn ZXQgZnJvbSBtYWtlZmlsZS4gIEl0IGJ1aWxkcyBidXQgaXQgZG9lc24ndCB3b3JrCithdCBhbGwu ICAzMCBKdW4gMjAxMS4KKworLS0tIEMtS2VybWl0IDkuMC4zMDAgLS0tCisKK09uIFNvbGFyaXMg MTAgYW5kIDExLCBETlMgbG9va3VwcyBkb24ndCB3b3JrLiAgSXQgc2VlbXMgdGhlc2UgU29sYXJp cwordmVyc2lvbnMgaGF2ZSBJTkFERFJYIGFuZCBJTkFERFJYX05PTkUgZGVmaW5lZCwgdGh1cyB0 cmlnZ2VyaW5nIHRoZSBjb2RlIGluCitja2NuZXQuYywgY2t1Y25zLmMsIGFuZCBja2NmdHAuYyAj aWZkZWYnZCBvbiB0aGVzZSBzeW1ib2xzLCBidXQgdGhhdCBjb2RlCitkb2Vzbid0IHdvcmsgaW4g dGhpcyBjYXNlLiAgVGhpcyBoYXBwZW5zIGJ1aWxkaW5nIHdpdGggZ2NjIGFzIHdlbGwgYXMgd2l0 aAorU3VuIGNjLiAgUHV0ICNpZmRlZnMgaW4gY2tjbmV0LmggdG8gdW5kZWZpbmUgdGhlc2Ugc3lt Ym9scyAoaWYgdGhleSBhcmUKK2RlZmluZWQgYWZ0ZXIgaW5jbHVkaW5nIGFsbCB0aGUgaGVhZGVy IGZpbGVzKSBmb3IgU29sYXJpcy4gIEkgZGlkbid0IGJvdGhlcgordHJ5aW5nIHRvIGRpZmZlcmVu dGlhdGUgdGhlIFNvbGFyaXMgdmVyc2lvbnMgYmVjYXVzZSB0aGUgc3ltYm9scyBhcmUgbm90Citk ZWZpbmVkIGluIFNvbGFyaXMgOSBvciBlYXJsaWVyLCBhbmQgdGhleSBzaG91bGQgbm90IGJlIHVz ZWQgaW4gU29sYXJpcyAxMAorb3IgMTEuICBja2NuZXQuaCwgNiBKdWx5IDIwMTEuCisKK0Zyb20g U01TOiAgVG8gYXZvaWQgdGhlICVDQy1XLVBUUk1JU01BVENIMSBjb21wbGFpbnRzIGZyb20gY2tf c3NsLmMsIGFkZAordHdvIChoYXJtbGVzcykgdHlwZSBjYXN0cyBhdCBsaW5lcyAyNDYwIGFuZCAy NzczLCA2IEp1bHkgMjAxMS4KKworQnVpbHQgYW5kIHRlc3RlZCBvbiBTb2xhcmlzIDksIFNvbGFy aXMgMTAsIGFuZCBSSEVMNS4gIDYgSnVseSAyMDExLgorCistLS0gQy1LZXJtaXQgOS4wLjMwMSBC ZXRhLjAxIC0tLQorCitVcGRhdGVkIHZlcnNpb24gdGV4dCBhbmQgZGF0ZS4gIGNrY21haS5jLCBt YWtlZmlsZSwgMTEgSnVseSAyMDExLgorCistLS0gQy1LZXJtaXQgOS4wLjMwMSAtLS0KKworQWZ0 ZXIgdGhlIGluaXRpYWwgcmVsZWFzZSBJIG1hZGUgc29tZSBzbWFsbCBjaGFuZ2VzIHRoYXQgYWZm ZWN0IG9ubHkgSFAtVVgKKzUueDogYWRkZWQgLURWT0lEPXZvaWQgYW5kIC1EQ0tWT0lEPXZvaWQg dG8gdGhlIGhwdXgwNTAwIG1ha2VmaWxlIHRhcmdldHMsCithbmQgcHV0ICNpZmRlZnMgYXJvdW5k ICNpbmNsdWRlIDxlcnJuby5oPiwgd2hpY2ggKGluIHRoZSBXaW5UQ1AgY2FzZSkgZGlkbid0Citw cm90ZWN0IGl0c2VsZiBhZ2FpbnN0IG11bHRpcGxlIGluY2x1c2lvbiAod2hpY2ggaXMgaGFwcGVu aW5nIGluIG90aGVyCitoZWFkZXIgZmlsZXMsIG5vdCBpbiBLZXJtaXQpLiAgbWFrZWZpbGUsIGNr dWNtZC5jLCBja3Vjb24uYywgY2t1dGlvLmMsCitja3VmaW8uYywgY2tjbmV0LmMsIGNrY2Z0cC5j LCAxNCBKdWx5IDIwMTEuCisKK0luIHRoZSBuZXcgY29weXJpZ2h0IG5vdGljZSwgY29waWVkIGZy b20gdGhlIEJTRCBsaWNlbnNlIHRlbXBsYXRlLAorb25lIGluc3RhbmNlIG9mICJ0aGUgPE9SR0FO SVpBVElPTj4iIHdhcyBub3QgcmVwbGFjZWQgYnkgIkNvbHVtYmlhCitVbml2ZXJzaXR5Ii4gIEZp eGVkIGluIGNrY21haS5jLCAxOSBKdWx5IDIwMTEuCisKK0FkZGVkIGFub3RoZXIgc2VhcmNoIHRl cm0gZm9yIGxrNWNyeXB0byBpbiB0aGUgbGludXgra3JiNSB0YXJnZXRzLgorbWFrZWZpbGUsIDIw IEp1bHkgMjAxMS4KKworQWRkZWQgYW5kIHN1Y2Nlc3NmdWxseSB1c2VkIGEgbmV3IHNvbGFyaXM5 K2tyYjUrc3NsIHRhcmdldC4KK21ha2VmaWxlLCA4IEF1ZyAyMDExLgorCitGcmVlQlNEIDkgc3dp dGNoZWQgZnJvbSB1dG1wIHRvIHV0bXB4LCB3aGljaCBicm9rZSBjb21waWxhdGlvbiBvZiBLZXJt aXQgb24KK3RoYXQgdmVyc2lvbi4gIEZ1cnRoZXJtb3JlLCB0aGUgVVVDUCBsb2NrZmlsZSBjb252 ZW5zaW9ucyBjaGFuZ2VkIGluIEZyZWVCU0QKKzgsIHdoaWNoIGRpZCBub3QgcHJldmVudCBDLUtl cm1pdCBmcm9tIGNvbXBpbGluZywgYnV0IGFueSBhdHRlbXB0IHRvIGxvY2sgYQordGVybWluYWwg b3IgcHR5IGRldmljZSB3b3VsZCBmYWlsLiAgVGhhbmtzIHRvIEFsZXhleSBEb2t1Y2hhZXYgImRh bmZlIiBmb3IKK2ZpbmRpbmcgYW5kIHBhdGNoaW5nIHRoZSBwcm9ibGVtcy4gIEkgdW5kaWQgdGhl IHBhdGNoZXMgYW5kIGZpeGVkIHRoZSBjb2RlCitzbyBpdCBkaWRuJ3QgbmVlZCB0byBiZSBwYXRj aGVkLCBleGNlcHQgZm9yIHNvbWUgZGVjbGFyYXRpb25zIGluIHRoZQorY2tfY3JwLmMgbW9kdWxl LCB3aGljaCBJIGZlbHQgaGFkIGJldHRlciBub3QgYmUgY2hhbmdlZCB3aXRob3V0IHRob3JvdWdo bHkKK3Rlc3RpbmcgdGhlIGNoYW5nZXMgb24gZG96ZW5zIG9mIGRpZmZlcmVudCBwbGF0Zm9ybXMs IHdoaWNoIEkgZG9uJ3QgaGF2ZQordGltZSB0byBkbyAoaW4gYW55IGNhc2UsIGl0IGJ1aWxkcyBP SyBvbiBGcmVlQlNEIDkgd2l0aG91dCB0aGUgcGF0Y2gpLiAgSW4KK3BhcnRpY3VsYXIgSSBtYWRl IGNvbXBsZXRlbHkgbmV3IG1ha2VmaWxlIHRhcmdldHMgZm9yIEZyZWVCU0QgNC4wIGFuZCBsYXRl ciwKK3doaWNoIGF1dG9tYXRpY2FsbHkgZGV0ZWN0IEZyZWVCU0QgOCBhbmQgRnJlZUJTRCA5IHRv IGVuYWJsZSB0aGUgYXBwcm9wcmlhdGUKK2ZlYXR1cmUgdGVzdHMgaW4gdGhlIGNvZGUsIGZvciBh IHJlZ3VsYXIgYnVpbGQgYW5kIGEgYnVpbGQgd2l0aCBPcGVuU1NMLgorVGhlc2UgY2hhbmdlcyBz aG91bGQgYWZmZWN0IG9ubHkgRnJlZUJTRC4gIGNrdXRpby5jLCBja3VmaW8uYywgY2tfY3JwLmMs Citja3V1czUuYywgbWFrZWZpbGUsIDIwIEF1ZyAyMDExLgorCitDaGFuZ2VkIHRoZSB2ZXJzaW9u IHRvIDkuMC4zMDIsIGNrY21haS5jLCAyMCBBdWcgMjAxMS4KKworRml4ZWQgZnJlZWJzZCtzc2wg YW5kIG5ldGJzZCtzc2wsIG5ldGJzZCtrcmI1LCBhbmQgbmV0YnNkK2tyYjUrc3NsIHRhcmdldHMK K3RvIGhhdmUgQ0M9JChDQykgaW5zdGVhZCBvZiBDQz1nY2M7IGRpdHRvIGZvciBDQzIsIGFuZCBh ZGp1c3RlZCBsaW5lIGJyZWFrcworaW4gZnJlZWJzZCBhbmQgZnJlZWJzZCtzc2wgdGFyZ2V0cy4g IG1ha2VmaWxlLCAyMSBBdWcgMjAxMS4KKworLS0tIDkuMC4zMDIgLS0tCisKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKioqKioqKioqKioqKioqKioqKioqKioqKioqCgpkaWZm IC0tZ2l0IGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2Nhc2MuaCBi L2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2tjYXNjLmgKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhjZDJmNwotLS0gL2Rldi9udWxsCisrKyBiL2Nr ZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2tjYXNjLmgKQEAgLTAsMCArMSw2 OSBAQAorLyoKKyAgRmlsZSBDS0NBU0MuSAorICBNbmVtb25pY3MgZm9yIEFTQ0lJIGNvbnRyb2wg Y2hhcmFjdGVycyAoYW5kIFNwYWNlKSBmb3IgdXNlIHdpdGggQy1LZXJtaXQuCisqLworLyoKKyAg QXV0aG9yOiBGcmFuayBkYSBDcnV6IChmZGNAY29sdW1iaWEuZWR1KS4KKyAgQ29sdW1iaWEgVW5p dmVyc2l0eSBBY2FkZW1pYyBJbmZvcm1hdGlvbiBTeXN0ZW1zLCBOZXcgWW9yayBDaXR5LgorCisg IENvcHlyaWdodCAoQykgMTk4NSwgMjAwOSwKKyAgICBUcnVzdGVlcyBvZiBDb2x1bWJpYSBVbml2 ZXJzaXR5IGluIHRoZSBDaXR5IG9mIE5ldyBZb3JrLgorICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQu ICBTZWUgdGhlIEMtS2VybWl0IENPUFlJTkcuVFhUIGZpbGUgb3IgdGhlCisgICAgY29weXJpZ2h0 IHRleHQgaW4gdGhlIGNrY21haS5jIG1vZHVsZSBmb3IgZGlzY2xhaW1lciBhbmQgcGVybWlzc2lv bnMuCisqLworI2lmbmRlZiBDS0NBU0NfSAorI2RlZmluZSBDS0NBU0NfSAorCisjZGVmaW5lIE5V TCAgJ1wwJyAgICAgICAvKiBOdWxsIEN0cmwtQCovCisjZGVmaW5lIFNPSCAgICAxICAgICAgICAv KiBTdGFydCBvZiBoZWFkZXIgQ3RybC1BICovCisjZGVmaW5lIFNUWCAgICAyICAgICAgICAvKiBD dHJsLUIgKi8KKyNkZWZpbmUgRVRYICAgIDMgICAgICAgIC8qIEN0cmwtQyAqLworI2RlZmluZSBF T1QgICAgNCAgICAgICAgLyogQ3RybC1EICovCisjZGVmaW5lIEVOUSAgICA1ICAgICAgICAvKiBF TlEgQ3RybC1FICovCisjZGVmaW5lIEFDSyAgICA2ICAgICAgICAvKiBDdHJsLUYgKi8KKyNkZWZp bmUgQkVMICAgIDcgICAgICAgIC8qIEJlbGwgKEJlZXApIEN0cmwtRyAqLworI2RlZmluZSBCUyAg ICAgOCAgICAgICAgLyogQmFja3NwYWNlIEN0cmwtSCAqLworI2RlZmluZSBIVCAgICAgOSAgICAg ICAgLyogSG9yaXpvbnRhbCBUYWIgQ3RybC1JICovCisjZGVmaW5lIExGICAgIDEwICAgICAgICAv KiBMaW5lZmVlZCBDdHJsLUogKi8KKyNkZWZpbmUgVlQgICAgMTEgICAgICAgIC8qIFZlcnRpY2Fs IFRhYiBDdHJsLUsgKi8KKyNkZWZpbmUgTkwgICAnXG4nICAgICAgIC8qIE5ld2xpbmUgKi8KKyNk ZWZpbmUgRkYgICAgMTIgICAgICAgIC8qIEZvcm1mZWVkIEN0cmwtTCAqLworI2RlZmluZSBDUiAg ICAxMyAgICAgICAgLyogQ2FycmlhZ2UgUmV0dXJuIEN0cmwtTSAqLworI2RlZmluZSBTTyAgICAx NCAgICAgICAgLyogU2hpZnQgT3V0IEN0cmwtTiAqLworI2RlZmluZSBTSSAgICAxNSAgICAgICAg LyogU2hpZnQgSW4gQ3RybC1PICovCisjZGVmaW5lIERMRSAgIDE2ICAgICAgICAvKiBEYXRhbGlu ayBFc2NhcGUgQ3RybC1QICovCisjZGVmaW5lIFhPTiAgIDE3ICAgICAgICAvKiBYT04gQ3RybC1R ICovCisjZGVmaW5lIERDMSAgIDE3CisjZGVmaW5lIERDMiAgIDE4ICAgICAgICAvKiBDdHJsLVIg Ki8KKyNkZWZpbmUgWE9GRiAgMTkgICAgICAgIC8qIFhPRkYgQ3RybC1TICovCisjZGVmaW5lIERD MyAgIDE5CisjZGVmaW5lIERDNCAgIDIwICAgICAgICAvKiBDdHJsLVQgKi8KKyNkZWZpbmUgTkFL ICAgMjEgICAgICAgIC8qIEN0cmwtVSAqLworI2RlZmluZSBTWU4gICAyMiAgICAgICAgLyogU1lO LCBDdHJsLVYgKi8KKyNkZWZpbmUgRVRCICAgMjMgICAgICAgIC8qIEN0cmwtVyAqLworI2RlZmlu ZSBDQU4gICAyNCAgICAgICAgLyogQ0FOLCBDdHJsLVggKi8KKyNkZWZpbmUgWEVNICAgMjUgICAg ICAgIC8qIEN0cmwtWSAod2FzIEVNIGJ1dCBjb25mbGljdHMgd2l0aCBPcGVuU1NMKSAqLworI2Rl ZmluZSBTVUIgICAyNiAgICAgICAgLyogU1VCIEN0cmwtWiAqLworI2RlZmluZSBFU0MgICAyNyAg ICAgICAgLyogRXNjYXBlIEN0cmwtWyAqLworI2RlZmluZSBYRlMgICAyOCAgICAgICAgLyogRmll bGQgU2VwYXJhdG9yLCAgQ3RybC1CYWNrc2xhc2ggKi8KKyNkZWZpbmUgWEdTICAgMjkgICAgICAg IC8qIEdyb3VwIFNlcGFyYXRvciwgIEN0cmwtUmlnaHRicmFja2V0ICovCisjZGVmaW5lIFhSUyAg IDMwICAgICAgICAvKiBSZWNvcmQgU2VwYXJhdG9yLCBDdHJsLUNpcmN1bWZsZXggKi8KKyNkZWZp bmUgVVMgICAgMzEgICAgICAgIC8qIFVuaXQgU2VwYXJhdG9yLCAgIEN0cmwtVW5kZXJzY29yZSAq LworI2RlZmluZSBTUCAgICAzMiAgICAgICAgLyogU3BhY2UgKi8KKyNkZWZpbmUgREVMICAxMjcg ICAgICAgIC8qIERlbGV0ZSAoUnVib3V0KSAqLworI2RlZmluZSBSVUIgIDEyNyAgICAgICAgLyog RGVsZXRlIChSdWJvdXQpICovCisKKyNpZmRlZiBPUzIKKy8qCisgIFRoZXNlIGFyZSBuZWVkZWQg aW4gT1MvMiwgc28gbGV0J3Mgbm90IGNhdXNlIGFueSB1bm5lY2Vzc2FyeSBjb25mbGljdHMuCisq LworI2RlZmluZSBfQ1NJICAwMjMzICAgICAgLyogOC1iaXQgQ29udHJvbCBTZXF1ZW5jZSBJbnRy b2R1Y2VyICovCisjZGVmaW5lIF9TUzIgIDAyMTYgICAgICAvKiA4LWJpdCBTaW5nbGUgU2hpZnQg MiAqLworI2RlZmluZSBfU1MzICAwMjE3ICAgICAgLyogOC1iaXQgU2luZ2xlIFNoaWZ0IDMgKi8K KyNkZWZpbmUgX0RDUyAgMDIyMCAgICAgIC8qIDgtYml0IERldmljZSBDb250cm9sIFN0cmluZyBJ bnRyb2R1Y2VyICovCisjZGVmaW5lIF9TVDggIDAyMzQgICAgICAvKiA4LWJpdCBTdHJpbmcgVGVy bWluYXRvciAqLworI2RlZmluZSBfT1NDICAwMjM1ICAgICAgLyogOC1iaXQgT3BlcmF0aW5nIFN5 c3RlbSBDb21tYW5kICovCisjZGVmaW5lIF9QTTggIDAyMzYgICAgICAvKiA4LWJpdCBQcml2YWN5 IE1lc3NhZ2UgKi8KKyNkZWZpbmUgX0FQQyAgMDIzNyAgICAgIC8qIDgtYml0IEFwcGxpY2F0aW9u IFByb2dyYW0gQ29tbWFuZCAqLworI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIENLQ0FTQ19I ICovCgpkaWZmIC0tZ2l0IGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9j a2Nid3IudHh0IGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2Nid3Iu dHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzM2M5NDYKLS0tIC9kZXYv bnVsbAorKysgYi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrY2J3ci50 eHQKQEAgLTAsMCArMSwxNTE0IEBACisKKyAgIFsxXVRoZSBDb2x1bWJpYSBDcm93biBUaGUgS2Vy bWl0IFByb2plY3QgfCBDb2x1bWJpYSBVbml2ZXJzaXR5CisgICA2MTIgV2VzdCAxMTV0aCBTdHJl ZXQsIE5ldyBZb3JrIE5ZIDEwMDI1IFVTQSBvIFsyXWtlcm1pdEBjb2x1bWJpYS5lZHUKKyAgIC4u LnNpbmNlIDE5ODEKKyAgIFszXUhvbWUgWzRdS2VybWl0IDk1IFs1XUMtS2VybWl0IFs2XVNjcmlw dHMgWzddQ3VycmVudCBbOF1OZXcgWzldRkFRCisgICBbMTBdU3VwcG9ydAorCisgICBBcyBvZjog Qy1LZXJtaXQgOS4wLjMwMCwgMzAgSnVuZSAyMDExCisgICBUaGlzIHBhZ2UgbGFzdCB1cGRhdGVk OiBUdWUgSnVuIDI4IDA4OjU0OjMwIDIwMTEgKE5ldyBZb3JrIFVTQSBUaW1lKQorCisgICAgIElG IFlPVSBBUkUgUkVBRElORyBBIFBMQUlOLVRFWFQgdmVyc2lvbiBvZiB0aGlzIGRvY3VtZW50LCBp dCBpcyBhCisgICAgIHBsYWluLXRleHQgZHVtcCBvZiBhIFdlYiBwYWdlLiBZb3UgY2FuIHZpc2l0 IHRoZSBvcmlnaW5hbCAoYW5kCisgICAgIHBvc3NpYmx5IG1vcmUgdXAtdG8tZGF0ZSkgV2ViIHBh Z2UgaGVyZToKKworICBbMTFdaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2J3ci5o dG1sCisKKyAgIFRoaXMgZG9jdW1lbnQgY29udGFpbnMgcGxhdGZvcm0taW5kZXBlbmRlbnQgQy1L ZXJtaXQgaGludHMgYW5kIHRpcHMuCisgICBBbHNvIHNlZSB0aGUgcGxhdGZvcm0tc3BlY2lmaWMg Qy1LZXJtaXQgaGludHMgYW5kIHRpcHMgZG9jdW1lbnQgZm9yCisgICB5b3VyIHBsYXRmb3JtLCBm b3IgZXhhbXBsZToKKworICBbMTJdaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3 ci5odG1sCisKKyAgIGZvciBVbml4LiBUaGlzIGRvY3VtZW50IGFsc28gYXBwbGllcyB0byBbMTNd S2VybWl0IDk1IGZvciBXaW5kb3dzLAorICAgd2hpY2ggaXMgYmFzZWQgb24gQy1LZXJtaXQuCisK KyAgIFsgWzE0XUMtS2VybWl0IF0gWyBbMTVdVFVUT1JJQUwgXQorCitDT05URU5UUworCisgICAw LiBbMTZdUEFUQ0hFUworICAgMS4gWzE3XUlOQ09NUEFUSUJMRSBDSEFOR0VTCisgICAyLiBbMThd VEhFIEMtS0VSTUlUIENPTU1BTkQgUEFSU0VSCisgICAzLiBbMTldTVVMVElQTEUgU0VTU0lPTlMK KyAgIDQuIFsyMF1ORVRXT1JLIENPTk5FQ1RJT05TCisgICA1LiBbMjFdTU9ERU1TIEFORCBESUFM SU5HCisgICA2LiBbMjJdRElBTElORyBISU5UUyBBTkQgVElQUworICAgNy4gWzIzXVRFUk1JTkFM IFNFUlZFUlMKKyAgIDguIFsyNF1URVJNSU5BTCBFTVVMQVRJT04KKyAgIDkuIFsyNV1LRVkgTUFQ UElORworICAxMC4gWzI2XUZJTEUgVFJBTlNGRVIKKyAgMTEuIFsyN11TQ1JJUFQgUFJPR1JBTU1J TkcKKworMC4gUEFUQ0hFUworCisgICBbIFsyOF1Ub3AgXSBbIFsyOV1Db250ZW50cyBdIFsgWzMw XU5leHQgXQorCisgICBTb3VyY2UtbGV2ZWwgcGF0Y2hlcyBmb3IgQy1LZXJtaXQgOC4wLjIxMToK KworICAgICAoTm9uZSkKKworMS4gSU5DT01QQVRJQkxFIENIQU5HRVMKKworICAgWyBbMzFdVG9w IF0gWyBbMzJdQ29udGVudHMgXSBbIFszM11OZXh0IF0KKworICAgVGhlc2UgYXJlIG5vdCBuZWNl c3NhcmlseSBleGhhdXN0aXZlIGxpc3RzLgorCisxLjEuIEMtS2VybWl0IDYuMAorCisgICBDLUtl cm1pdCA2LjAgd2FzIHJlbGVhc2VkIDYgU2VwdGVtYmVyIDE5OTYgYW5kIGlzIGNvbXBsZXRlbHkg ZG9jdW1lbnRlZAorICAgaW4gWzM0XVVzaW5nIEMtS2VybWl0LCAybmQgRWRpdGlvbi4gVGhlIGZv bGxvd2luZyBpbmNvbXBhdGlibGUgY2hhbmdlcworICAgd2VyZSBtYWRlIGluIEMtS2VybWl0IDYu MDoKKworICAgICAqIFVubGVzcyB5b3UgdGVsbCBDLUtlcm1pdCBvdGhlcndpc2UsIGlmIGEgc2Vy aWFsIG9yIG5ldHdvcmsKKyAgICAgICBjb25uZWN0aW9uIHNlZW1zIHRvIGJlIG9wZW4sIGFuZCB5 b3UgYXR0ZW1wdCB0byBFWElUIG9yIHRvIG9wZW4gYQorICAgICAgIG5ldyBjb25uZWN0aW9uLCBD LUtlcm1pdCB3YXJucyB5b3UgdGhhdCBhbiBhY3RpdmUgY29ubmVjdGlvbgorICAgICAgIGFwcGVh cnMgdG8gYmUgb3BlbiBhbmQgYXNrcyB5b3UgaWYgeW91IHJlYWxseSB3YW50IHRvIGNsb3NlIGl0 LiBJZgorICAgICAgIHlvdSBkbyBub3Qgd2FudCB0aGVzZSB3YXJuaW5ncywgYWRkIFNFVCBFWElU IFdBUk5JTkcgT0ZGIHRvIHlvdXIKKyAgICAgICBjdXN0b21pemF0aW9uIGZpbGUgb3Igc2NyaXB0 LCBvciBnaXZlIHRoaXMgY29tbWFuZCBhdCB0aGUgcHJvbXB0LgorICAgICAqIFRoZSBkZWZhdWx0 IGZvciBTRVQgeyBTRU5ELCBSRUNFSVZFIH0gUEFUSE5BTUVTIHdhcyBjaGFuZ2VkIGZyb20gT04K KyAgICAgICB0byBPRkYsIHRvIHByZXZlbnQgdW5leHBlY3RlZCBjcmVhdGlvbiBvZiBkaXJlY3Rv cmllcyBhbmQKKyAgICAgICBkZXBvc2l0aW5nIG9mIGluY29taW5nIGZpbGVzIGluIHBsYWNlcyB5 b3UgbWlnaHQgbm90IGtub3cgdG8gbG9vay4KKyAgICAgKiBUaGUgZGVmYXVsdCBmb3IgU0VUIEZJ TEUgSU5DT01QTEVURSB3YXMgY2hhbmdlZCBmcm9tIERJU0NBUkQgdG8KKyAgICAgICBLRUVQIHRv IGFsbG93IGZvciBmaWxlIHRyYW5zZmVyIHJlY292ZXJ5LgorICAgICAqIFRoZSBkZWZhdWx0IGZp bGUtdHJhbnNmZXIgYmxvY2stY2hlY2sgaXMgbm93IDMsIHJhdGhlciB0aGFuIDEuIElmCisgICAg ICAgdGhlIG90aGVyIEtlcm1pdCBkb2VzIG5vdCBzdXBwb3J0IHRoaXMsIHRoZSB0d28gd2lsbCBk cm9wIGJhY2sgdG8KKyAgICAgICB0eXBlIDEgYXV0b21hdGljYWxseSB1bmxlc3MgdGhlIG90aGVy IEtlcm1pdCBmYWlscyB0byBmb2xsb3cgdGhlCisgICAgICAgcHJvdG9jb2wgc3BlY2lmaWNhdGlv bi4KKyAgICAgKiBUaGUgZGVmYXVsdCBmbG93LWNvbnRyb2wgaXMgbm93ICJhdXRvIiAoImRvIHRo ZSByaWdodCB0aGluZyBmb3IKKyAgICAgICBlYWNoIHR5cGUgb2YgY29ubmVjdGlvbiIpLCBub3Qg WG9uL1hvZmYuCisgICAgICogQmFja3NsYXNoIChcKSBpcyBubyBsb25nZXIgYSBjb21tYW5kIGNv bnRpbnVhdGlvbiBjaGFyYWN0ZXIuIE9ubHkgLQorICAgICAgIChoeXBoZW4sIGRhc2gpIG1heSBi ZSB1c2VkIGZvciB0aGlzIGluIEMtS2VybWl0IDYuMCBhbmQgbGF0ZXIuCisgICAgICogTmVnYXRp dmUgSU5QVVQgdGltZW91dCBub3cgcmVzdWx0cyBpbiBpbmZpbml0ZSB3YWl0LCByYXRoZXIgdGhh biAxCisgICAgICAgc2Vjb25kLgorCisxLjIuIEMtS2VybWl0IDcuMAorCisgICBDLUtlcm1pdCA3 LjAgd2FzIHJlbGVhc2VkIDEgSmFudWFyeSAyMDAwLiBJdHMgbmV3IGZlYXR1cmVzIGFyZQorICAg ZG9jdW1lbnRlZCBpbiB0aGUgQy1LZXJtaXQgNy4wIFN1cHBsZW1lbnQsCisgICBbMzVdaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQyLmh0bWwuIFRoZSBmb2xsb3dpbmcKKyAg IGluY29tcGF0aWJsZSBjaGFuZ2VzIHdlcmUgbWFkZSBpbiBDLUtlcm1pdCA3LjA6CisgICAgICog VGhlICJtdWx0aWxpbmUgR0VUIiBjb21tYW5kIGlzIGdvbmUuIE5vdyB1c2UgZWl0aGVyIG9mIHRo ZQorICAgICAgIGZvbGxvd2luZyBmb3JtcyBpbnN0ZWFkOgorICBnZXQgcmVtb3RlLW5hbWUgbG9j YWwtbmFtZQorICBnZXQgL2FzLW5hbWU6bG9jYWwtbmFtZSByZW1vdGUtbmFtZQorCisgICAgICAg SWYgZWl0aGVyIG5hbWUgY29udGFpbnMgc3BhY2VzLCBlbmNsb3NlIGl0IGluIGJyYWNlcyAob3Is IGluCisgICAgICAgQy1LZXJtaXQgOC4wLCBkb3VibGVxdW90ZXMpLgorICAgICAqIFRvIGluY2x1 ZGUgbXVsdGlwbGUgZmlsZSBzcGVjaWZpY2F0aW9ucyBpbiBhIEdFVCBjb21tYW5kLCB5b3UgbXVz dAorICAgICAgIG5vdyB1c2UgTUdFVCByYXRoZXIgdGhhbiBHRVQ6CisgIG1nZXQgZmlsZTEgZmls ZTIgZmlsZTMgLi4uCisKKyAgICAgKiBDLUtlcm1pdCA3LjAgYW5kIGxhdGVyIHVzZSBGQVNUIEtl cm1pdCBwcm90b2NvbCBzZXR0aW5ncyBieQorICAgICAgIGRlZmF1bHQuIFRoaXMgaW5jbHVkZXMg InVucHJlZml4aW5nIiBvZiBjZXJ0YWluIGNvbnRyb2wgY2hhcmFjdGVycy4KKyAgICAgICBCZWNh dXNlIG9mIHRoaXMsIGZpbGUgdHJhbnNmZXJzIHRoYXQgd29ya2VkIHdpdGggcHJldmlvdXMgcmVs ZWFzZXMKKyAgICAgICBtaWdodCBub3Qgd29yayBpbiB0aGUgbmV3IHJlbGVhc2UgZXNwZWNpYWxs eSBhZ2FpbnN0IGEKKyAgICAgICBub24tS2VybWl0LVByb2plY3QgS2VybWl0IHByb3RvY29sIGlt cGxlbWVudGF0aW9uIChidXQgaXQgaXMgbW9yZQorICAgICAgIGxpa2VseSB0aGF0IHRoZXkgd2ls bCB3b3JrLCBhbmQgbXVjaCBmYXN0ZXIpLiBJZiBhIHRyYW5zZmVyIGZhaWxzLAorICAgICAgIHlv dSdsbCBnZXQgYSBjb250ZXh0LXNlbnNpdGl2ZSBoaW50IHN1Z2dlc3RpbmcgcG9zc2libGUgY2F1 c2VzIGFuZAorICAgICAgIGN1cmVzLiBVc3VhbGx5IFNFVCBQUkVGSVhJTkcgQUxMIGRvZXMgdGhl IHRyaWNrLgorICAgICAqIEJ5IGRlZmF1bHQgQy1LZXJtaXQgNy4wIGFuZCBsYXRlciBzZW5kIGZp bGVzIGluIHRleHQgb3IgYmluYXJ5IG1vZGUKKyAgICAgICBieSBsb29raW5nIGF0IGVhY2ggZmls ZSB0byBzZWUgd2hpY2ggaXMgdGhlIGFwcHJvcHJpYXRlIG1vZGUuIFRvCisgICAgICAgcmVzdG9y ZSB0aGUgcHJldmlvdXMgYmVoYXZpb3IsIHB1dCBTRVQgVFJBTlNGRVIgTU9ERSBNQU5VQUwgYW5k IHRoZQorICAgICAgIGRlc2lyZWQgU0VUIEZJTEUgVFlQRSAoVEVYVCBvciBCSU5BUlkpIGluIHlv dXIgQy1LZXJtaXQKKyAgICAgICBpbml0aWFsaXphdGlvbiBmaWxlLgorICAgICAqIFRoZSBSRVNF TkQgYW5kIFJFR0VUIGNvbW1hbmRzIGF1dG9tYXRpY2FsbHkgc3dpdGNoIHRvIGJpbmFyeSBtb2Rl OworICAgICAgIHByZXZpb3VzbHkgaWYgUkVTRU5EIG9yIFJFR0VUIHdlcmUgYXR0ZW1wdGVkIHdo ZW4gRklMRSBUWVBFIHdhcworICAgICAgIFRFWFQsIHRoZXNlIGNvbW1hbmRzIHdvdWxkIGZhaWwg aW1tZWRpYXRlbHksIHdpdGggYSBtZXNzYWdlIHRlbGxpbmcKKyAgICAgICB5b3UgdGhleSB3b3Jr IG9ubHkgd2hlbiB0aGUgRklMRSBUWVBFIGlzIEJJTkFSWS4gTm93IHRoZXkgc2ltcGx5IGRvCisg ICAgICAgdGhpcyBmb3IgeW91LgorICAgICAqIFNFVCBQUkVGSVhJTkcgQ0FVVElPVVMgYW5kIE1J TklNQUwgbm93IGJvdGggcHJlZml4IGxpbmVmZWVkICgxMCBhbmQKKyAgICAgICAxMzgpIGluIGNh c2UgcmxvZ2luLCBzc2gsIG9yIGN1IGFyZSAiaW4gdGhlIG1pZGRsZSIsIHNpbmNlCisgICAgICAg b3RoZXJ3aXNlIDxMRj5+IG1pZ2h0IGFwcGVhciBpbiBLZXJtaXQgcGFja2V0cywgYW5kIHRoaXMg d291bGQKKyAgICAgICBjYXVzZSBybG9naW4sIHNzaCwgb3IgY3UgdG8gZGlzY29ubmVjdCwgc3Vz cGVuZCxlc2NhcGUgYmFjaywgb3IKKyAgICAgICBvdGhlcndpc2Ugd3JlY2sgdGhlIGZpbGUgdHJh bnNmZXIuIFhvbiBhbmQgWG9mZiBhcmUgbm93IGFsd2F5cworICAgICAgIHByZWZpeGVkIHRvbywg ZXZlbiB3aGVuIFhvbi9Yb2ZmIGZsb3cgY29udHJvbCBpcyBub3QgaW4gZWZmZWN0LAorICAgICAg IHNpbmNlIHVucHJlZml4aW5nIHRoZW0gaGFzIHByb3ZlbiBkYW5nZXJvdXMgb24gVENQL0lQIGNv bm5lY3Rpb25zLgorICAgICAqIEluIFVOSVgsIFZNUywgV2luZG93cywgYW5kIE9TLzIsIHRoZSBE SVJFQ1RPUlkgY29tbWFuZCBpcyBidWlsdAorICAgICAgIGludG8gQy1LZXJtaXQgaXRzZWxmIHJh dGhlciB0aGFuIGltcGxlbWVudGVkIGJ5IHJ1bm5pbmcgYW4gZXh0ZXJuYWwKKyAgICAgICBjb21t YW5kIG9yIHByb2dyYW0uIFRoZSBidWlsdC1pbiBjb21tYW5kIG1pZ2h0IG5vdCBiZWhhdmUgdGhl IHdheQorICAgICAgIHRoZSBwbGF0Zm9ybS1zcGVjaWZpYyBleHRlcm5hbCBvbmUgZGlkLCBidXQg bWFueSBvcHRpb25zIGFyZQorICAgICAgIGF2YWlsYWJsZSBmb3IgY3VzdG9taXphdGlvbi4gT2Yg Y291cnNlIHRoZSB1bmRlcmx5aW5nCisgICAgICAgcGxhdGZvcm0tc3BlY2lmaWMgY29tbWFuZCBj YW4gc3RpbGwgYmUgYWNjZXNzZWQgd2l0aCAiISIsICJAIiwgb3IKKyAgICAgICAiUlVOIiB3aGVy ZXZlciB0aGUgaW5zdGFsbGF0aW9uIGRvZXMgbm90IGZvcmJpZC4gSW4gVU5JWCwgdGhlICJscyIK KyAgICAgICBjb21tYW5kIGNhbiBiZSBhY2Nlc3NlZCBkaXJlY3RseSBhcyAibHMiIGluIEMtS2Vy bWl0LgorICAgICAqIFNFTkQgPyBwcmludHMgYSBsaXN0IG9mIHN3aXRjaGVzIHJhdGhlciB0aGFu IGEgbGlzdCBvZiBmaWxlbmFtZXMuCisgICAgICAgSWYgeW91IHdhbnQgdG8gc2VlIGEgbGlzdCBv ZiBmaWxlbmFtZXMsIHVzZSBhIChzeXN0ZW0tZGVwZW5kZW50KQorICAgICAgIGNvbnN0cnVjdGlv biBzdWNoIGFzIFNFTkQgLi8/IChmb3IgVU5JWCwgV2luZG93cywgb3IgT1MvMiksIFNFTkQKKyAg ICAgICBbXT8gKFZNUyksIGV0Yy4KKyAgICAgKiBJbiBVTklYLCBPUy05LCBhbmQgS2VybWl0IDk1 LCB0aGUgd2lsZGNhcmQgY2hhcmFjdGVycyBpbiBwcmV2aW91cworICAgICAgIHZlcnNpb25zIHdl cmUgKiBhbmQgPy4gSW4gQy1LZXJtaXQgNy4wIHRoZXkgYXJlICosID8sIFssIF0sIHssIGFuZAor ICAgICAgIH0sIHdpdGggZGFzaCB1c2VkIGluc2lkZSBbXSdzIHRvIGRlbm90ZSByYW5nZXMgYW5k IGNvbW1hIHVzZWQKKyAgICAgICBpbnNpZGUge30gdG8gc2VwYXJhdGUgbGlzdCBlbGVtZW50cy4g SWYgeW91IG5lZWQgdG8gaW5jbHVkZSBhbnkgb2YKKyAgICAgICB0aGVzZSBjaGFyYWN0ZXJzIGxp dGVyYWxseSBpbiBhIGZpbGVuYW1lLCBwcmVjZWRlIGVhY2ggb25lIHdpdGgKKyAgICAgICBiYWNr c2xhc2ggKFwpLgorICAgICAqIFNFVCBRVUlFVCB7IE9OLCBPRkYgfSBpcyBub3cgb24gdGhlIGNv bW1hbmQgc3RhY2ssIGp1c3QgbGlrZSBTRVQKKyAgICAgICBJTlBVVCBDQVNFLCBTRVQgQ09VTlQs IFNFVCBNQUNSTyBFUlJPUiwgZXRjLCBhcyBkZXNjcmliZWQgb24gcC40NTgKKyAgICAgICBvZiBb MzZdVXNpbmcgQy1LZXJtaXQsIDJuZCBFZGl0aW9uLiBUaGlzIGFsbG93cyBhbnkgbWFjcm8gb3IK KyAgICAgICBjb21tYW5kIGZpbGUgdG8gU0VUIFFVSUVUIE9OIG9yIE9GRiB3aXRob3V0IHdvcnJ5 aW5nIGFib3V0IHNhdmluZworICAgICAgIGFuZCByZXN0b3JpbmcgdGhlIGdsb2JhbCBRVUlFVCB2 YWx1ZS4gRm9yIGV4YW1wbGUsIHRoaXMgbGV0cyB5b3UKKyAgICAgICB3cml0ZSBhIHNjcmlwdCB0 aGF0IHRyaWVzIFNFVCBMSU5FIG9uIGxvdHMgb2YgZGV2aWNlcyB1bnRpbCBpdAorICAgICAgIGZp bmRzIG9uZSBmcmVlIHdpdGhvdXQgc3Bld2luZyBvdXQgbG9hZHMgb2YgZXJyb3IgbWVzc2FnZXMs IGFuZAorICAgICAgIGFsc28gd2l0aG91dCBkaXN0dXJiaW5nIHRoZSBnbG9iYWwgUVVJRVQgc2V0 dGluZywgd2hhdGV2ZXIgaXQgd2FzLgorICAgICAqIEJlY2F1c2Ugb2YgdGhlIG5ldyAiLiIgb3Bl cmF0b3IgKHdoaWNoIGludHJvZHVjZXMgYXNzaWdubWVudHMpLAorICAgICAgIG1hY3JvcyB3aG9z ZSBuYW1lcyBiZWdpbiB3aXRoICIuIiBjYW4gbm90IGJlIGludm9rZWQgImJ5IG5hbWUiLgorICAg ICAgIEhvd2V2ZXIsIHRoZXkgc3RpbGwgY2FuIGJlIGludm9rZWQgd2l0aCBETyBvciBcZmV4ZWN1 dGUoKS4KKyAgICAgKiBUaGUgc3ludGF4IG9mIHRoZSBFVkFMVUFURSBjb21tYW5kIGhhcyBjaGFu Z2VkLiBUbyByZXN0b3JlIHRoZQorICAgICAgIHByZXZpb3VzIHN5bnRheCwgdXNlIFNFVCBFVkFM VUFURSBPTEQuCisgICAgICogVGhlIFx2KGRpcmVjdG9yeSkgdmFyaWFibGUgbm93IGluY2x1ZGVz IHRoZSB0cmFpbGluZyBkaXJlY3RvcnkKKyAgICAgICBzZXBhcmF0b3I7IGluIHByZXZpb3VzIHJl bGVhc2VzIGl0IGRpZCBub3QuIFRoaXMgaXMgdG8gYWxsb3cKKyAgICAgICBjb25zdHJ1Y3Rpb25z IHN1Y2ggYXM6CisgIGNkIFx2KGRpcilkYXRhLnRtcAorCisgICAgICAgdG8gd29yayBhY3Jvc3Mg cGxhdGZvcm1zIHRoYXQgbWlnaHQgaGF2ZSBkaWZmZXJlbnQgZGlyZWN0b3J5CisgICAgICAgbm90 YXRpb24sIHN1Y2ggYXMgVU5JWCwgV2luZG93cywgYW5kIFZNUy4KKyAgICAgKiBQcmlvciB0byBD LUtlcm1pdCA3LjAsIHRoZSBGTE9XLUNPTlRST0wgc2V0dGluZyB3YXMgZ2xvYmFsIGFuZAorICAg ICAgIHN0aWNreS4gSW4gQy1LZXJtaXQgNy4wLCB0aGVyZSBpcyBhbiBhcnJheSBvZiBkZWZhdWx0 IGZsb3ctY29udHJvbAorICAgICAgIHZhbHVlcyBmb3IgZWFjaCBraW5kIG9mIGNvbm5lY3Rpb24s IHRoYXQgYXJlIGFwcGxpZWQgYXV0b21hdGljYWxseQorICAgICAgIGF0IFNFVCBMSU5FL1BPUlQv SE9TVCB0aW1lLiBUaHVzIGEgU0VUIEZMT1cgY29tbWFuZCBnaXZlbiBiZWZvcmUKKyAgICAgICBT RVQgTElORS9QT1JUL0hPU1QgaXMgbGlrZWx5IHRvIGJlIHVuZG9uZS4gVGhlcmVmb3JlIFNFVCBG TE9XIGNhbgorICAgICAgIGJlIGd1YXJhbnRlZWQgdG8gaGF2ZSB0aGUgZGVzaXJlZCBlZmZlY3Qg b25seSBpZiBnaXZlbiBhZnRlciB0aGUKKyAgICAgICBTRVQgTElORS9QT1JUL0hPU1QgY29tbWFu ZC4KKyAgICAgKiBDaGFyYWN0ZXItc2V0IHRyYW5zbGF0aW9uIHdvcmtzIGRpZmZlcmVudGx5IGlu IHRoZSBUUkFOU01JVCBjb21tYW5kCisgICAgICAgd2hlbiAoYSkgdGhlIGZpbGUgY2hhcmFjdGVy LXNldCBpcyBub3QgdGhlIHNhbWUgYXMgdGhlIGxvY2FsIGVuZCBvZgorICAgICAgIHRoZSB0ZXJt aW5hbCBjaGFyYWN0ZXItc2V0LCBvciAoYikgd2hlbiB0aGUgdGVybWluYWwgY2hhcmFjdGVyLXNl dAorICAgICAgIGlzIFRSQU5TUEFSRU5ULgorCisxLjMuIEMtS2VybWl0IDguMAorCisgICBUaGUg Zm9sbG93aW5nIGluY29tcGF0aWJsZSBjaGFuZ2VzIHdlcmUgbWFkZSBpbiBDLUtlcm1pdCA4LjA6 CisgICAgICogQy1LZXJtaXQgbm93IGFjY2VwdHMgZG91YmxlcXVvdGVzIGluIG1vc3QgY29udGV4 dHMgd2hlcmUgeW91CisgICAgICAgcHJldmlvdXNseSBoYWQgdG8gdXNlIGJyYWNlcyB0byBncm91 cCBtdWx0aXBsZSB3b3JkcyBpbnRvIGEgc2luZ2xlCisgICAgICAgZmllbGQsIG9yIHRvIGZvcmNl IGluY2x1c2lvbiBvZiBsZWFkaW5nIG9yIHRyYWlsaW5nIGJsYW5rcy4gVGhpcworICAgICAgIG1p Z2h0IGNhdXNlIHByb2JsZW1zIGluIGNvbnRleHRzIHdoZXJlIHlvdSB3YW50ZWQgdGhlIGRvdWJs ZXF1b3RlCisgICAgICAgY2hhcmFjdGVycyB0byBiZSB0YWtlbiBsaXRlcmFsbHkuIENvbnN1bHQg WzM3XVNlY3Rpb24gNSBvZiB0aGUKKyAgICAgICBbMzhdQy1LZXJtaXQgOC4wIFVwZGF0ZSBOb3Rl cyBmb3IgZnVydGhlciBpbmZvcm1hdGlvbi4KKyAgICAgKiBVc2luZyB0aGUgU0VUIEhPU1QgY29t bWFuZCB0byBtYWtlIEhUVFAgY29ubmVjdGlvbnMgaXMgbm8gbG9uZ2VyCisgICAgICAgc3VwcG9y dGVkLiBJbnN0ZWFkLCB1c2UgdGhlIG5ldyBbMzldSFRUUCBPUEVOIGNvbW1hbmQuCisKKzEuNC4g Qy1LZXJtaXQgOS4wCisKKyAgIFRoZSBbNDBdXGZzcGxpdCgpIGZ1bmN0aW9uIGlzIGluY3JlZGli bHkgaGFuZHksIGl0IGNhbiBkbyBhbG1vc3QKKyAgIGFueXRoaW5nLCB1cCB0byBhbmQgaW5jbHVk aW5nIHBhcnNpbmcgYSBMSVNQIHByb2dyYW0gKHRoZSB1bmRlcmx5aW5nCisgICBjb2RlIGlzIHRo ZSBiYXNpcyBvZiB0aGUgWzQxXVMtRXhwcmVzc2lvbiBpbnRlcnByZXRlcikuIEJ1dCBkaWQgeW91 CisgICBldmVyIHRyeSB0byB1c2UgaXQgdG8gcGFyc2UgKHNheSkgYSBUYWItU2VwYXJhdGVkLUxp c3QgKFRTViBmaWxlKSBvcgorICAgQ29tbWEtU2VwYXJhdGVkLUxpc3QgKENTVik/IEl0IHdvcmtz IGFzIGV4cGVjdGVkIGFzIGxvbmcgYXMgdGhlIGRhdGEKKyAgIGNvbnRhaW5zIG9ubHkgNy1iaXQg Y2hhcmFjdGVycy4gQnV0IGlmIHlvdXIgZGF0YSBjb250YWlucyAoc2F5KSBTcGFuaXNoCisgICBv ciBHZXJtYW4gb3IgUnVzc2lhbiB0ZXh0IHdyaXR0ZW4gaW4gYW4gOC1iaXQgY2hhcmFjdGVyIHNl dCBzdWNoIGFzIElTTworICAgODg1OS0xLCBldmVyeSA4LWJpdCBjaGFyYWN0ZXIgKGFueSB2YWx1 ZSAxMjgtMjU1KSBpcyB0cmVhdGVkIGFzIGEgYnJlYWsKKyAgIGNoYXJhY3Rlci4gVGhpcyBpcyBm aXhlZCBpbiBDLUtlcm1pdCA5LjAgYnkgdHJlYXRpbmcgYWxsIDgtYml0IGJ5dGVzIGFzCisgICAi aW5jbHVkZSIgY2hhcmFjdGVycyByYXRoZXIgdGhhbiBicmVhayBjaGFyYWN0ZXJzLCBhIHRvdGFs IHJldmVyc2FsIG9mCisgICBwYXN0IGJlaGF2aW9yLiBJIGRvbid0IHRoaW5rIGl0IHdpbGwgYWZm ZWN0IGFueW9uZSB0aG91Z2gsIGJlY2F1c2UgaWYKKyAgIHRoaXMgaGFkIGhhcHBlbmVkIHRvIGFu eW9uZSwgSSB3b3VsZCBoYXZlIGhlYXJkIGFib3V0IGl0IQorCisgICBTaW5jZSBtb3N0IHN0YW5k YXJkIDgtYml0IGNoYXJhY3RlciBzZXRzIGhhdmUgY29udHJvbCBjaGFyYWN0ZXJzIGluCisgICBw b3NpdGlvbnMgMTI4LTE2MCwgaXQgbWlnaHQgaGF2ZSBtYWRlIHNlbnNlIHRvIGtlZXAgMTI4LTE2 MCBpbiB0aGUKKyAgIGJyZWFrIHNldCwgYnV0IHdpdGggdGhlIHByb2xpZmVyYXRpb24gb2YgTWlj cm9zb2Z0IFdpbmRvd3MgY29kZSBwYWdlcywKKyAgIHRoZXJlIGlzIG5vIHRlbGxpbmcgd2hpY2gg OC1iaXQgY2hhcmFjdGVyIGlzIGxpa2VseSB0byBiZSBzb21lIGtpbmQgb2YKKyAgIHRleHQsIGUu Zy4gInNtYXJ0IHF1b3RlcyIgb3IgRWFzdCBFdXJvcGVhbiBvciBUdXJraXNoIGFjY2VudGVkIGxl dHRlcnMuCisKKzIuIFRIRSBDLUtFUk1JVCBDT01NQU5EIFBBUlNFUgorCisgICBbIFs0Ml1Ub3Ag XSBbIFs0M11Db250ZW50cyBdIFsgWzQ0XU5leHQgXSBbIFs0NV1QcmV2aW91cyBdCisKKyAgIFZh cmlvdXMgY29tbWFuZC1yZWxhdGVkIGxpbWl0cyBhcmUgc2hvd24gaW4gdGhlIGZvbGxvd2luZyB0 YWJsZSwgaW4KKyAgIHdoaWNoIHRoZSBzYW1wbGUgdmFsdWVzIGFyZSBmb3IgYSAibGFyZ2UgbWVt b3J5IG1vZGVsIiBidWlsZCBvZgorICAgQy1LZXJtaXQsIHR5cGljYWwgZm9yIG1vZGVybiBwbGF0 Zm9ybXMgKExpbnV4LCBTb2xhcmlzLCBBSVgsIFZNUywgZXRjKS4KKyAgIFlvdSBjYW4gc2VlIHRo ZSB2YWx1ZXMgZm9yIHlvdXIgdmVyc2lvbiBvZiBLZXJtaXQgYnkgZ2l2aW5nIHRoZSBTSE9XCisg ICBGRUFUVVJFUyBjb21tYW5kLiBUaGUgbWF4aW11bSBsZW5ndGggZm9yIGEgS2VybWl0IGNvbW1h bmQgKENNREJMKSBhbHNvCisgICBkZXRlcm1pbmVzIHRoZSBtYXhpbXVtIGxlbmd0aCBmb3IgYSBt YWNybyBkZWZpbml0aW9uLCBzaW5jZSBERUZJTkUgaXMKKyAgIGl0c2VsZiBhIGNvbW1hbmQuIFRo ZSBtYXhpbXVtIGxlbmd0aCBmb3IgYSB2YXJpYWJsZSBuYW1lIGlzIGJldHdlZW4gMjU2CisgICBh bmQgNDA5NiBjaGFyYWN0ZXJzLCBkZXBlbmRpbmcgb24gdGhlIHBsYXRmb3JtOyBmb3IgYXJyYXkg ZGVjbGFyYXRpb25zCisgICBhbmQgcmVmZXJlbmNlcywgdGhhdCBpbmNsdWRlcyB0aGUgc3Vic2Ny aXB0LgorCisgICBJdGVtIFN5bWJvbCBTYW1wbGUKKyAgIFZhbHVlIERlZmluaXRpb24KKyAgIE51 bWJlciBvZiBjaGFyYWN0ZXJzIGluIGEgY29tbWFuZCBDTURCTCAzMjc2MyBja3VjbWQuaAorICAg TnVtYmVyIG9mIGNoYXJzIGluIGEgZmllbGQgb2YgYSBjb21tYW5kICAgIEFUTUJMIDEwMjM4IGNr dWNtZC5oCisgICBOZXN0aW5nIGxldmVsIGZvciBjb21tYW5kIGZpbGVzIE1BWFRBS0UgNTQgICBj a3V1c3IuaAorICAgTmVzdGluZyBsZXZlbCBmb3IgbWFjcm9zIE1BQ0xFVkVMIDEyOCBja3V1c3Iu aAorICAgTmVzdGluZyBsZXZlbCBmb3IgRk9SIC8gV0hJTEUgbG9vcHMgRk9SREVQVEggMzIgY2t1 dXNyLmgKKyAgIE51bWJlciBvZiBtYWNyb3MgTUFDX01BWCAxNjM4NCBja3V1c3IuaAorICAgU2l6 ZSBvZiBJTlBVVCBidWZmZXIgSU5QQlVGU0laIDQwOTYgY2t1dXNyLmgKKyAgIE1heGltdW0gZmls ZXMgdG8gbWF0Y2ggYSB3aWxkY2FyZCBNQVhXTEQgICAgMTAyNDAwIGNrY2RlYi5oCisgICBGaWxl c3BlY3MgaW4gTVNFTkQgY29tbWFuZCBNU0VORE1BWCAxMDI0IGNrdXVzci5oCisgICBMZW5ndGgg Zm9yIEdPVE8gdGFyZ2V0IGxhYmVsIExCTFNJWiA1MCBja3V1c3IuaAorICAgXGZleGVjdXRlKCkg cmVjdXJzaW9uIGRlcHRoIGxpbWl0IENNRERFUCA2NCBja3VjbWQuaAorCisgICBJZiB5b3UgbmVl ZCB0byBkZWZpbmUgYSBtYWNybyB0aGF0IGlzIGxvbmdlciB0aGFuIENNREJMLCB5b3UgY2FuIGJy ZWFrCisgICB0aGUgbWFjcm8gdXAgaW50byBzdWItbWFjcm9zIG9yIHJld3JpdGUgdGhlIG1hY3Jv IGFzIGEgY29tbWFuZCBmaWxlLiBJbgorICAgYSBwaW5jaCB5b3UgY2FuIGFsc28gcmVkZWZpbmUg Q01EQkwgYW5kIHJlY29tcGlsZSBDLUtlcm1pdC4gQWxsIG9mCisgICB0aGVzZSBudW1iZXJzIHJl cHJlc2VudCB0cmFkZW9mZnM6IHRoZSBiaWdnZXIgdGhlIG51bWJlciwgdGhlIG1vcmUKKyAgICJw b3dlcmZ1bCIgS2VybWl0IGluIHRoZSBjb3JyZXNwb25kaW5nIGFyZWEsIGJ1dCBhbHNvIHRoZSBi aWdnZXIgdGhlCisgICBwcm9ncmFtIGltYWdlIGFuZCBwb3NzaWJseSBkaXNrIGZvb3RwcmludCwg YW5kIHRoZSBsb25nZXIgaXQgdGFrZXMgdG8KKyAgIGxvYWQgYW5kIGluaXRpYWxpemUuCisKKyAg IEluIHRoZSBpbnRlcmFjdGl2ZSBjb21tYW5kIHBhcnNlcjoKKworICAgICAqIEVNQUNTLSBvciBW SS1zdHlsZSBjb21tYW5kIGxpbmUgZWRpdGluZyBpcyBub3Qgc3VwcG9ydGVkLgorICAgICAqIEVk aXRpbmcga2V5cyBhcmUgaGFyZHdpcmVkIChDdHJsLVUsIEN0cmwtVywgZXRjKS4KKworICAgSWYg eW91IGludGVycnVwdCBDLUtlcm1pdCBiZWZvcmUgaXQgaGFzIGlzc3VlZCBpdHMgZmlyc3QgcHJv bXB0LCBpdAorICAgd2lsbCBleGl0LiBUaGlzIG1lYW5zIHRoYXQgeW91IGNhbm5vdCBpbnRlcnJ1 cHQgZXhlY3V0aW9uIG9mIHRoZQorICAgaW5pdGlhbGl6YXRpb24gZmlsZSwgb3Igb2YgYW4gImFw cGxpY2F0aW9uIGZpbGUiIChmaWxlIHdob3NlIG5hbWUgaXMKKyAgIGdpdmVuIGFzIHRoZSBmaXJz dCBjb21tYW5kLWxpbmUgYXJndW1lbnQpLCBvciBvZiBhbiBhbHRlcm5hdGl2ZQorICAgaW5pdGlh bGl6YXRpb24gZmlsZSAoIi15IGZpbGVuYW1lIiksIGFuZCBnZXQgdG8gdGhlIHByb21wdC4gVGhl cmUgaXMsCisgICBob3dldmVyLCBvbmUgZXhjZXB0aW9uIHRvIHRoaXMgcnVsZTogeW91ICpjYW4q IGludGVycnVwdCBjb21tYW5kcyAtLQorICAgaW5jbHVkaW5nIFRBS0UgY29tbWFuZHMgLS0gZ2l2 ZW4gaW4gdGhlICctQyAiY29tbWFuZCBsaXN0IicKKyAgIGNvbW1hbmQtbGluZSBhcmd1bWVudCBh bmQgLS0gaWYgdGhlcmUgd2VyZSBubyBhY3Rpb24gY29tbWFuZHMgYW1vbmcgdGhlCisgICBjb21t YW5kLWxpbmUgYXJndW1lbnRzIC0tIHlvdSB3aWxsIGJlIHJldHVybmVkIHRvIHRoZSBDLUtlcm1p dCBwcm9tcHQuCisgICBTbywgZm9yIGV4YW1wbGUsIGlmIHlvdSB3YW50IHRvIHN0YXJ0IEMtS2Vy bWl0IGluIHN1Y2ggYSB3YXkgdGhhdCBpdAorICAgZXhlY3V0ZXMgYSBjb21tYW5kIGZpbGUgYmVm b3JlIGlzc3VpbmcgaXRzIGZpcnN0IHByb21wdCwgYW5kIHlvdSBhbHNvCisgICB3YW50IHRvIGJl IGFibGUgdG8gaW50ZXJydXB0IHRoZSBjb21tYW5kIGZpbGUgYW5kIGdldCB0byB0aGUgcHJvbXB0 LAorICAgaW5jbHVkZSBhIFRBS0UgY29tbWFuZCBmb3IgdGhlIGRlc2lyZWQgY29tbWFuZCBpbiB0 aGUgLUMgYXJndW1lbnQsIGZvcgorICAgZXhhbXBsZToKKworICBrZXJtaXQgLUMgInRha2UgZGlh bC5zY3IiCisKKyAgIEF0IHRoZSBjb21tYW5kIHByb21wdCwgaWYgeW91IHVzZSB0aGUgYmFja3Ns YXNoIChcKSBwcmVmaXggdG8gZW50ZXIgYQorICAgY29udHJvbCBjaGFyYWN0ZXIsIHNwYWNlLCBv ciBxdWVzdGlvbiBtYXJrIGludG8gYSBjb21tYW5kIGxpdGVyYWxseSwKKyAgIHRoZSBiYWNrc2xh c2ggZGlzYXBwZWFycyBhbmQgaXMgcmVwbGFjZWQgYnkgdGhlIHF1b3RlZCBjaGFyYWN0ZXIuIElm IGl0CisgICB3YXMgYSBjb250cm9sIGNoYXJhY3RlciwgaXQgaXMgc2hvd24gYXMgYSBjaXJjdW1m bGV4ICheKS4gVGhpcyBhbGxvd3MKKyAgIGVkaXRpbmcgKGJhY2tzcGFjZSwgZGVsZXRlLCBDdHJs LVcpIHRvIHdvcmsgY29ycmVjdGx5IGV2ZW4gZm9yIGNvbnRyb2wKKyAgIGNoYXJhY3RlcnMuCisK KyAgIFByaW90IHRvIEMtS2VybWl0IDguMCwgdGhlIG9ubHkgd2F5IHRvIGluY2x1ZGUgYSBjb21t YSBsaXRlcmFsbHkgaW4gYQorICAgbWFjcm8gZGVmaW5pdGlvbiAtLSBhcyBvcHBvc2VkIHRvIGhh dmluZyBpdCBzZXBhcmF0ZSBjb21tYW5kcyB3aXRoaW4KKyAgIHRoZSBkZWZpbml0aW9uIC0tIGlz IHRvIGVudGVyIGl0cyBBU0NJSSB2YWx1ZSAoNDQpIGluIGJhY2tzbGFzaAorICAgbm90YXRpb24s IGUuZy46CisKKyAgREVGSU5FIFJPV1MgUlVOIE1PREUgQ084MFx7NDR9XCUxCisKKyAgIEluIEMt S2VybWl0IDguMCB5b3UgY2FuIHVzZSBjb25zdHJ1Y3Rpb25zIGxpa2UgdGhpczoKKworICBERUZJ TkUgUk9XUyBSVU4gTU9ERSAiQ084MCxcJTEiCisKKyAgIElmIHlvdSBxdW90ZSBzcGVjaWFsIGNo YXJhY3RlcnMgaW4gYSBmaWxlbmFtZSAoZS5nLiBpbiB0aGUgU0VORAorICAgY29tbWFuZCksIGZp bGVuYW1lIGNvbXBsZXRpb24gbWF5IHNlZW0gdG8gd29yayBpbmNvcnJlY3RseS4gRm9yCisgICBl eGFtcGxlLCBpZiB5b3UgaGF2ZSBhIGZpbGUgd2hvc2UgbmFtZSBpcyBhKmIgKHRoZSBuYW1lIHJl YWxseSBjb250YWlucworICAgYW4gYXN0ZXJpc2spLCBhbmQgeW91IHR5cGUgInNlbmQgYVxcKjxF U0M+IiwgdGhlICJiIiBkb2VzIG5vdCBhcHBlYXIsCisgICBub3Igd2lsbCBDdHJsLVIgcmVkaXNw bGF5IHRoZSBjb21wbGV0ZWQgbmFtZSBjb3JyZWN0bHkuIEJ1dCBpbnRlcm5hbGx5CisgICB0aGUg ZmlsZSBuYW1lIGlzIHJlY29nbml6ZWQgYW55d2F5LgorCisgICBRdWVzdGlvbi1tYXJrIGhlbHAg ZG9lcyBub3Qgd29yayBkdXJpbmcgZXhlY3V0aW9uIG9mIGFuIEFTS1EgY29tbWFuZC4KKyAgIFRo ZSBxdWVzdGlvbiBtYXJrcyBhcmUgc2ltcGx5IGFjY2VwdGVkIGFzIHRleHQuCisKKyAgIEluIE9V VFBVVCBjb21tYW5kcyBvbmx5LCBcQiBzZW5kcyBhIEJSRUFLIHNpZ25hbCwgXEwgc2VuZHMgYSBM b25nIEJSRUFLCisgICBzaWduYWwsIGFuZCBcTiBzZW5kcyBhIE5VTCAoQVNDSUkgMCkuIEJSRUFL IGFuZCBMb25nIEJSRUFLIGFyZSBzcGVjaWFsCisgICBzaWduYWxzLCBub3QgY2hhcmFjdGVycywg YW5kIE5VTCBpcyBhIGNoYXJhY3RlciB0aGF0IG5vcm1hbGx5IGNhbm5vdCBiZQorICAgaW5jbHVk ZWQgaW4gYSBDIHN0cmluZywgc2luY2UgaXQgaXMgdGhlIEMgc3RyaW5nIHRlcm1pbmF0b3IuIElm IHlvdQorICAgcmVhbGx5IHdhbnQgdG8gb3V0cHV0IGEgYmFja3NsYXNoIGZvbGxvd2VkIGJ5IGEg QiwgYW4gTCwgb3IgYW4gTiAoYXMgaXMKKyAgIG5lZWRlZCB0byBjb25maWd1cmUgY2VydGFpbiBt b2RlbXMsIGV0YyksIGRvdWJsZSB0aGUgYmFja3NsYXNoLCBlLmcuCisgICAib3V0cHV0IFxcQiIu IEluIEMtS2VybWl0IDcuMCBvciBsYXRlciwgeW91IGNhbiBkaXNhcm0gYW5kIHJlLWFybSB0aGUK KyAgIHNwZWNpYWwgT1VUUFVULWNvbW1hbmQgZXNjYXBlcyAoXEIsIFxMLCBhbmQgXE4pIHdpdGgg U0VUIE9VVFBVVAorICAgU1BFQ0lBTC1FU0NBUEVTIHsgT0ZGLCBPTiB9LgorCisgICBXaGVuIHVz aW5nIHRoZSBjb21tYW5kLWxpbmUgcHJvY2Vzc29yICgia2VybWl0IC1sIC9kZXYvdHR5MDAgLWIg MTkyMDAiLAorICAgZXRjKSwgbm90ZSB0aGF0IGluIHNvbWUgY2FzZXMgdGhlIG9yZGVyIG9mIHRo ZSBjb21tYW5kLWxpbmUgb3B0aW9ucworICAgbWFrZXMgYSBkaWZmZXJlbmNlLCBjb250cmFyeSB0 byB0aGUgZXhwZWN0YXRpb24gdGhhdCBvcmRlciBvZgorICAgY29tbWFuZC1saW5lIG9wdGlvbnMg c2hvdWxkIG5vdCBtYXR0ZXIuIEZvciBleGFtcGxlLCB0aGUgLWIgb3B0aW9uIG11c3QKKyAgIGJl IGdpdmVuIGFmdGVyIHRoZSAtbCBvcHRpb24gaWYgaXQgaXMgdG8gYWZmZWN0IHRoZSBkZXZpY2Ug c3BlY2lmaWVkIGluCisgICB0aGUgLWwgb3B0aW9uLgorCiszLiBNVUxUSVBMRSBTRVNTSU9OUwor CisgICBbIFs0Nl1Ub3AgXSBbIFs0N11Db250ZW50cyBdIFsgWzQ4XU5leHQgXSBbIFs0OV1QcmV2 aW91cyBdCisKKyAgIEMtS2VybWl0IDcuMCBhbmQgZWFybGllciBkbyBub3Qgc3VwcG9ydCBtdWx0 aXBsZSBzZXNzaW9ucy4gV2hlbiB5b3UgU0VUCisgICBMSU5FIChvciBTRVQgUE9SVCwgc2FtZSB0 aGluZykgdG8gYSBuZXcgZGV2aWNlLCBvciBTRVQgSE9TVCB0byBhIG5ldworICAgaG9zdCwgdGhl IHByZXZpb3VzIFNFVCBMSU5FIGRldmljZSBvciBuZXR3b3JrIGhvc3QgY29ubmVjdGlvbiBpcwor ICAgY2xvc2VkLCByZXN1bHRpbmcgaW4gaGFuZ3VwIG9mIHRoZSBtb2RlbSBvciB0ZXJtaW5hdGlv biBvZiB0aGUgbmV0d29yaworICAgY29ubmVjdGlvbi4gSW4gd2luZG93aW5nIGVudmlyb25tZW50 cyBsaWtlIEhQLVZVRSwgTmVYVFNURVAsIFdpbmRvd3MsCisgICBPUy8yLCBldGMsIHlvdSBjYW4g cnVuIHNlcGFyYXRlIGNvcGllcyBvZiBLZXJtaXQgaW4gZGlmZmVyZW50IHdpbmRvd3MKKyAgIHRv IGFjaGlldmUgbXVsdGlwbGUgc2Vzc2lvbnMuCisKKyAgIFRvIGFjaGlldmUgbXVsdGlwbGUgc2Vz c2lvbnMgdGhyb3VnaCBhIHNpbmdsZSBzZXJpYWwgcG9ydCAoZS5nLiB3aGVuCisgICBkaWFsaW5n IHVwKSwgeW91IGNhbiBpbnN0YWxsIFNMSVAgb3IgUFBQIG9uIHlvdXIgY29tcHV0ZXIgYW5kIHRo ZW4gdXNlCisgICBDLUtlcm1pdCdzIFRDUC9JUCBzdXBwb3J0IG92ZXIgdGhlIFNMSVAgb3IgUFBQ IGNvbm5lY3Rpb24sIGFzc3VtaW5nIHlvdQorICAgYWxzbyBoYXZlIFRDUC9JUCBuZXR3b3JraW5n IGluc3RhbGxlZCBvbiB5b3VyIGNvbXB1dGVyLgorCisgICBDLUtlcm1pdCA4LjAgaGFzIHRoZSBz YW1lIHJlc3RyaWN0aW9uIG9uIFNFVCBMSU5FIGFuZCBTRVQgSE9TVAorICAgc2Vzc2lvbnM6IG9u bHkgb25lIHJlZ3VsYXIgc2Vzc2lvbiAoZGlhbG91dCwgVGVsbmV0LCBldGMpIGNhbiBiZSBvcGVu CisgICBhdCBhIHRpbWUuIEhvd2V2ZXIsIHZlcnNpb24gOC4wIGFkZHMgdHdvIG5ldyBraW5kcyBv ZiBzZXNzaW9uczogRlRQIGFuZAorICAgSFRUUDsgb25lIG9yIGJvdGggb2YgdGhlc2UgY2FuIGJl IG9wZW4gYXQgdGhlIHNhbWUgYXMgYSByZWd1bGFyCisgICBzZXNzaW9uLgorCis0LiBORVRXT1JL IENPTk5FQ1RJT05TCisKKyAgIFsgWzUwXVRvcCBdIFsgWzUxXUNvbnRlbnRzIF0gWyBbNTJdTmV4 dCBdIFsgWzUzXVByZXZpb3VzIF0KKworRlRQIENsaWVudCBCdWdzCisKKyAgIFRoZSBVbml4IEMt S2VybWl0IDguMC4yMDYgRlRQIGNsaWVudCBoYWQgdGhlIGZvbGxvd2luZyBidWdzIGF0IHRoZSB0 aW1lCisgICBtb3N0IG9mIHRoZSA4LjAuMjA2IGJpbmFyaWVzIHdlcmUgYnVpbHQgZm9yIHRoZSBD LUtlcm1pdCA4LjAgQ0RST006CisKKyAgICAxLiBGVFAgTUdFVCBmYWlscyB3aGVuIGRpcmVjdG9y eSBzZWdtZW50cyBjb250YWluIHdpbGRjYXJkcywgYXMgaW4KKyAgICAgICAiZnRwIG1nZXQgKi9k YXRhLyouZGF0Ii4gV29yayBhcm91bmQgYnkgZG9pbmcgYSBzZXBhcmF0ZSBNR0VUIGZvcgorICAg ICAgIGVhY2ggc291cmNlIGRpcmVjdG9yeS4KKyAgICAyLiBGVFAgTUdFVCBjYW4gZmFpbCBvciBw cm9kdWNlIHJhbmRvbSBzaWRlIGVmZmVjdHMgaWYgeW91IGhhdmUgYQorICAgICAgIFRNUERJUiBv ciBDS19UTVAgZW52aXJvbm1lbnQgdmFyaWFibGUgZGVmaW5pdGlvbiBpbiBlZmZlY3QsIG9yIGEK KyAgICAgICBTRVQgVEVNUC1ESVJFQ1RPUlkgdmFsdWUsIGxvbmdlciB0aGFuIDcgY2hhcmFjdGVy cy4gV29yayBhcm91bmQgYnkKKyAgICAgICBnaXZpbmcgYSBTRVQgVEVNUC1ESVJFQ1RPUlkgY29t bWFuZCB3aXRoIGEgc2hvcnQgdmFsdWUsIHN1Y2ggYXMKKyAgICAgICAiL3RtcCIuCisKKyAgIFRo ZXNlIHR3byBidWdzIGFyZSBmaXhlZCBpbiB0aGUgc291cmNlIGNvZGUgdGhhdCBpcyBpbmNsdWRl ZCBvbiB0aGUKKyAgIENEUk9NLCBhbmQgYWxzbyBpbiBLZXJtaXQgOTUgMi4xLjEuIFlvdSBjYW4g dGVsbCBpZiBhIEMtS2VybWl0IDguMC4yMDYKKyAgIGJpbmFyeSBoYXMgdGhlc2UgZml4ZXMgYnkg dHlwaW5nIFNIT1cgVkVSU0lPTjsgaWYgaXQgc2F5cyAiRlRQIENsaWVudCwKKyAgIDguMC4yMDAs IDI0IE9jdCAyMDAyIiBpdCBoYXMgdGhlIGZpeGVzOyBpZiB0aGUgZWRpdCBudW1iZXIgaXMgbGVz cyB0aGF0CisgICAyMDAsIGl0IGRvZXNuJ3QsIGluIHdoaWNoIGNhc2UgY2FuIGJ1aWxkIGEgbmV3 IGJpbmFyeSBmcm9tIHRoZSBzb3VyY2UKKyAgIGNvZGUgKG9yIGNvbnRhY3QgdXMgYW5kIHdlJ2xs IHRyeSB0byBnZXQgZ2V0IG9uZSBmb3IgeW91KS4KKworTWFraW5nIFRDUC9JUCBDb25uZWN0aW9u cyBDYW4gVGFrZSBhIExvbmcgVGltZQorCisgICBUaGUgbW9zdCBmcmVxdWVudGx5IGFza2VkIHF1 ZXN0aW9uIGluIG1hbnkgbmV3c2dyb3VwcyBpcyAiV2h5IGRvZXMgaXQKKyAgIHRha2Ugc3VjaCBh IGxvbmcgdGltZSB0byBtYWtlIGEgVGVsbmV0IGNvbm5lY3Rpb24gdG8gKG9yIGZyb20pIG15Cisg ICAoZS5nLikgTGludXggUEM/IiAodGhpcyBhcHBsaWVzIHRvIEtlcm1pdCBhcyB3ZWxsIGFzIHRv IHJlZ3VsYXIgVGVsbmV0CisgICBjbGllbnRzKToKKworICAgIDEuIE1vc3QgVGVsbmV0IHNlcnZl cnMgcGVyZm9ybSByZXZlcnNlIEROUyBsb29rdXBzIG9uIHRoZSBjbGllbnQgZm9yCisgICAgICAg c2VjdXJpdHkgYW5kL29yIGxvZ2dpbmcgcmVhc29ucy4gSWYgdGhlIFRlbG5ldCBjbGllbnQncyBo b3N0IGNhbm5vdAorICAgICAgIGJlIGZvdW5kIGJ5IHRoZSBzZXJ2ZXIncyBsb2NhbCBETlMgc2Vy dmVyLCB0aGUgRE5TIHJlcXVlc3QgZ29lcyBvdXQKKyAgICAgICB0byB0aGUgSW50ZXJuZXQgYXQg bGFyZ2UsIGFuZCB0aGlzIGNhbiB0YWtlIHF1aXRlIHNvbWUgdGltZS4gVGhlCisgICAgICAgc29s dXRpb24gdG8gdGhpcyBwcm9ibGVtIGlzIHRvIG1ha2Ugc3VyZSB0aGF0IGJvdGggY2xpZW50IGFu ZCBob3N0CisgICAgICAgYXJlIHJlZ2lzdGVyZWQgaW4gRE5TLgorICAgIDIuIEMtS2VybWl0IGl0 c2VsZiBwZXJmb3JtcyByZXZlcnNlIEROUyBsb29rdXBzIHVubGVzcyB5b3UgdGVsbCBpdCBub3QK KyAgICAgICB0by4gVGhpcyBpcyB0byBhbGxvdyBDLUtlcm1pdCB0byBsZXQgeW91IGtub3cgd2hp Y2ggaG9zdCBpdCBpcworICAgICAgIGFjdHVhbGx5IGNvbm5lY3RlZCB0byBpbiBjYXNlIHlvdSBo YXZlIG1hZGUgYSBjb25uZWN0aW9uIHRvIGEgImhvc3QKKyAgICAgICBwb29sIiAobXVsdGlob21l ZCBob3N0KS4gWW91IGNhbiBkaXNhYmxlIEMtS2VybWl0J3MgcmV2ZXJzZSBETlMKKyAgICAgICBs b29rdXAgd2l0aCBTRVQgVENQIFJFVkVSU0UtRE5TLUxPT0tVUCBPRkYuCisgICAgMy4gQy1LZXJt aXQgNy4wIGFuZCBsYXRlciBzdHJpY3RseSBlbmZvcmNlIFRlbG5ldCBwcm90b2NvbCBydWxlcy4g T25lCisgICAgICAgc3VjaCBydWxlIGlzIHRoYXQgY2VydGFpbiBuZWdvdGlhdGlvbnMgbXVzdCBi ZSByZXNwb25kZWQgdG8uIElmCisgICAgICAgQy1LZXJtaXQgc2VuZHMgYSBzdWNoIGEgbmVnb3Rp YXRpb24gYW5kIHRoZSBob3N0IGRvZXMgbm90IHJlc3BvbmQsCisgICAgICAgQy1LZXJtaXQgd2Fp dHMgYSBsb25nIHRpbWUgZm9yIHRoZSByZXBseSAoaW4gY2FzZSB0aGUgbmV0d29yayBpcworICAg ICAgIGNvbmdlc3RlZCBvciB0aGUgaG9zdCBpcyBzbG93KSwgYnV0IGV2ZW50dWFsbHkgd2lsbCB0 aW1lIG91dC4gVG8KKyAgICAgICBlbGltaW5hdGUgdGhlIHdhaXRzIChhbmQgdGhlcmVmb3JlIHJp c2sgcG9zc2libGUgcHJvdG9jb2wKKyAgICAgICBtaXNtYXRjaGVzIC0tIG9yIHdvcnNlIC0tIGJl dHdlZW4gVGVsbmV0IGNsaWVudCBhbmQgc2VydmVyKSwgdGVsbAorICAgICAgIEMtS2VybWl0IHRv IFNFVCBURUxORVQgV0FJVCBPRkYgKG9yIGluY2x1ZGUgdGhlIC9OT1dBSVQgc3dpdGNoIHdpdGgK KyAgICAgICB0aGUgVEVMTkVUIGNvbW1hbmQpLgorCitUaGUgUmxvZ2luIENsaWVudAorCisgICBJ biBtdWx0aXVzZXIgb3BlcmF0aW5nIHN5c3RlbXMgc3VjaCBhcyBVTklYIGFuZCBWTVMsIFRDUC9J UCBSbG9naW4KKyAgIGNvbm5lY3Rpb25zIGFyZSBhdmFpbGFibGUgb25seSB0byBwcml2aWxlZ2Vk IHVzZXJzLCBzaW5jZSAibG9naW4iIGlzIGEKKyAgIHByaXZpbGVnZWQgc29ja2V0LiBBc3N1bWlu ZyB5b3UgYXJlIGFsbG93ZWQgdG8gdXNlIGl0IGluIHRoZSBmaXJzdAorICAgcGxhY2UsIGl0IGlz IGxpa2VseSB0byBiZWhhdmUgZGlmZmVyZW50bHkgZGVwZW5kaW5nIG9uIHdoYXQgdHlwZSBvZgor ICAgaG9zdCB5b3UgYXJlIHJsb2dnaW5nIGluIHRvLCBkdWUgdG8gdGVjaG5pY2FsIHJlYXNvbnMg aGF2aW5nIHRvIGRvIHdpdGgKKyAgIGNvbmZsaWN0aW5nIGludGVycHJldGF0aW9ucyBvZiBSRkM3 OTMgKE91dC1PZi1CYW5kIERhdGEpIGFuZCBSbG9naW4KKyAgIChSRkMxMTIyKS4uLiAiU3BlY2lm aWNhbGx5LCB0aGUgVENQIHVyZ2VudCBwb2ludGVyIGluIEJTRCBwb2ludHMgdG8gdGhlCisgICBi eXRlIGFmdGVyIHRoZSB1cmdlbnQgZGF0YSBieXRlLCBhbmQgYW4gUkZDLWNvbXBsaWFudCBUQ1Ag dXJnZW50CisgICBwb2ludGVyIHBvaW50cyB0byB0aGUgdXJnZW50IGRhdGEgYnl0ZS4gQXMgYSBy ZXN1bHQsIGlmIGFuIGFwcGxpY2F0aW9uCisgICBzZW5kcyB1cmdlbnQgZGF0YSBmcm9tIGEgQlNE LWNvbXBhdGlibGUgaW1wbGVtZW50YXRpb24gdG8gYW4KKyAgIFs1NF1SRkMtMTEyMiBjb21wYXRp YmxlIGltcGxlbWVudGF0aW9uIHRoZW4gdGhlIHJlY2VpdmVyIHdpbGwgcmVhZCB0aGUKKyAgIHdy b25nIHVyZ2VudCBkYXRhIGJ5dGUgKGl0IHdpbGwgcmVhZCB0aGUgYnl0ZSBsb2NhdGVkIGFmdGVy IHRoZSBjb3JyZWN0CisgICBieXRlIGluIHRoZSBkYXRhIHN0cmVhbSBhcyB0aGUgdXJnZW50IGRh dGEgYnl0ZSkuIiBSbG9naW4gcmVxdWlyZXMgdGhlCisgICB1c2Ugb2YgT09CIGRhdGEgd2hpbGUg VGVsbmV0IGRvZXMgbm90LiBUaGVyZWZvcmUsIGl0IGlzIHBvc3NpYmxlIGZvcgorICAgVGVsbmV0 IHRvIHdvcmsgYmV0d2VlbiBhbGwgc3lzdGVtcyB3aGlsZSBCU0QgYW5kIFN5c3RlbSBWIFRDUC9J UAorICAgaW1wbGVtZW50YXRpb25zIGFyZSBhbG1vc3QgYWx3YXlzIGEgYmFkIG1peC4KKworVGhl IFRlbG5ldCBDbGllbnQKKworICAgT24gYSBUQ1AvSVAgVEVMTkVUIGNvbm5lY3Rpb24sIHlvdSBz aG91bGQgbm9ybWFsbHkgaGF2ZSBQQVJJVFkgc2V0IHRvCisgICBOT05FIGFuZCAoZXhjZXB0IGlu IFZNUyBDLUtlcm1pdCkgRkxPVy1DT05UUk9MIGFsc28gc2V0IHRvIE5PTkUuIElmCisgICBmaWxl IHRyYW5zZmVyIGRvZXMgbm90IHdvcmsgd2l0aCB0aGVzZSBzZXR0aW5ncyAoZm9yIGV4YW1wbGUs IGJlY2F1c2UKKyAgIHRoZSByZW1vdGUgVEVMTkVUIHNlcnZlciBvbmx5IGdpdmVzIGEgNy1iaXQg ZGF0YSBwYXRoKSwgdXNlIFNFVCBQQVJJVFkKKyAgIFNQQUNFLiBEbyBub3QgdXNlIFNFVCBQQVJJ VFkgTUFSSywgRVZFTiwgb3IgT0REIG9uIGEgVEVMTkVUIGNvbm5lY3Rpb24KKyAgIC0tIGl0IGlu dGVyZmVyZXMgd2l0aCBURUxORVQgcHJvdG9jb2wuCisKKyAgIElmIGVjaG9pbmcgZG9lcyBub3Qg d29yayByaWdodCBhZnRlciBjb25uZWN0aW5nIHRvIGEgbmV0d29yayBob3N0IG9yCisgICBhZnRl ciBkaWFsaW5nIHRocm91Z2ggYSBUQ1AvSVAgbW9kZW0gc2VydmVyLCBpdCBwcm9iYWJseSBtZWFu cyB0aGF0IHRoZQorICAgVEVMTkVUIHNlcnZlciBvbiB0aGUgZmFyIGVuZCBvZiB0aGUgY29ubmVj dGlvbiBpcyBleGVjdXRpbmcgdGhlIFRFTE5FVAorICAgcHJvdG9jb2wgaW5jb3JyZWN0bHkuIEFm dGVyIGluaXRpYWxseSBjb25uZWN0aW5nIGFuZCBkaXNjb3ZlcmluZworICAgaW5jb3JyZWN0IGVj aG9pbmcgKGNoYXJhY3RlcnMgYXJlIGVjaG9lZCB0d2ljZSwgb3Igbm90IGF0IGFsbCksIGVzY2Fw ZQorICAgYmFjaywgZ2l2ZSB0aGUgYXBwcm9wcmlhdGUgU0VUIERVUExFWCBjb21tYW5kIChGVUxM IG9yIEhBTEYpLCBhbmQgdGhlbgorICAgQ09OTkVDVCBhZ2Fpbi4gRm9yIGEgY29uc2lzdGVudGx5 IG1pc2JlaGF2aW5nIGNvbm5lY3Rpb24sIHlvdSBjYW4KKyAgIGF1dG9tYXRlIHRoaXMgcHJvY2Vz cyBpbiBhIG1hY3JvIG9yIFRBS0UgZmlsZS4KKworICAgVEVMTkVUIHNlc3Npb25zIGFyZSB0cmVh dGVkIGp1c3QgbGlrZSBzZXJpYWwgY29tbXVuaWNhdGlvbnMgc2Vzc2lvbnMgYXMKKyAgIGZhciBh cyAidGVybWluYWwgYnl0ZXNpemUiIGFuZCAiY29tbWFuZCBieXRlc2l6ZSIgYXJlIGNvbmNlcm5l ZC4gSWYgeW91CisgICBuZWVkIHRvIHZpZXcgYW5kL29yIGVudGVyIDgtYml0IGNoYXJhY3RlcnMg ZHVyaW5nIGEgVEVMTkVUIHNlc3Npb24sIHlvdQorICAgbXVzdCB0ZWxsIEMtS2VybWl0IHRvIFNF VCBURVJNSU5BTCBCWVRFU0laRSA4LCBTRVQgQ09NTUFORCBCWVRFU0laRSA4LAorICAgYW5kIFNF VCBQQVJJVFkgTk9ORS4KKworICAgSWYgeW91IFNFVCBURUxORVQgREVCVUcgT04gcHJpb3IgdG8g bWFraW5nIGEgY29ubmVjdGlvbiwgcHJvdG9jb2wKKyAgIG5lZ290aWF0aW9ucyB3aWxsIGJlIGRp c3BsYXllZCBvbiB5b3VyIHNjcmVlbi4gWW91IGNhbiBhbHNvIGNhcHR1cmUKKyAgIHRoZW0gaW4g dGhlIGRlYnVnIGxvZyAoYWxvbmcgd2l0aCBldmVyeXRoaW5nIGVsc2UpIGFuZCB0aGVuIGV4dHJh Y3QKKyAgIHRoZW0gZWFzaWx5LCBzaW5jZSBhbGwgVGVsbmV0IG5lZ290aWF0aW9ucyBsaW5lcyBi ZWdpbiB3aXRoICh1cHBlcmNhc2UpCisgICAiVEVMTkVUIi4KKworVGhlIFNTSCBDbGllbnQKKwor ICAgQy1LZXJtaXQgZG9lcyBub3QgaGF2ZSBpdHMgb3duIGJ1aWx0LWluIFNTSCBjbGllbnQ7IGlu c3RlYWQsIGluIHRoZQorICAgVW5peCB0cmFkaXRpb24sIHVzZXMgdGhlIGV4dGVybmFsIFNTSCBj bGllbnQgdG8gZG8gdGhlIFNTSCBwYXJ0LCBhbmQKKyAgIEtlcm1pdCBkb2VzIGl0cyB0aGluZyBv biB0b3AgLS0gZmlsZSB0cmFuc2Zlciwgc2NyaXB0aW5nLCBldGMuIFVuZGVyCisgICBjZXJ0YWlu IGNpcmN1bXN0YW5jZXMgdGhhdCBoYXZlIG5vdCB5ZXQgYmVlbiBpZGVudGlmaWVkLCBpdCBzb21l dGltZXMKKyAgIGhhcHBlbnMgdGhhdCBhZnRlciBtYWtpbmcgYW4gU1NIIGNvbm5lY3Rpb24gZnJv bSBDLUtlcm1pdCwgbG9nZ2luZyBvdXQKKyAgIGZyb20gdGhlIHJlbW90ZSBob3N0LCBhbmQgcG9w cGluZyBiYWNrIHRvIHRoZSBsb2NhbCBDLUtlcm1pdCBwcm9ncmFtLAorICAgc3Vic2VxdWVudCBT U0ggY29tbWFuZHMgZmlsZSB3aXRoIGEgbWVzc2FnZSBsaWtlICJOZXR3b3JrIHR5cGUgbm90Cisg ICBzdXBwb3J0ZWQiLiBTdGFydGluZyBhIG5ldyBjb3B5IG9mIEMtS2VybWl0IGlzIHRoZSB3b3Jr YXJvdW5kLgorCis1LiBNT0RFTVMgQU5EIERJQUxJTkcKKworICAgWyBbNTVdVG9wIF0gWyBbNTZd Q29udGVudHMgXSBbIFs1N11OZXh0IF0gWyBbNThdUHJldmlvdXMgXQorCisgICBFeHRlcm5hbCBt b2RlbXMgYXJlIHJlY29tbWVuZGVkIGJlY2F1c2U6CisKKyAgICAgKiBUaGV5IGRvbid0IG5lZWQg YW55IHNwZWNpYWwgZHJpdmVycy4KKyAgICAgKiBUaGV5IGFyZSBsZXNzIGxpa2VseSB0byBpbnRl cmZlcmUgd2l0aCBub3JtYWwgb3BlcmF0aW9uIG9mIHlvdXIKKyAgICAgICBjb21wdXRlci4KKyAg ICAgKiBZb3UgY2FuIHVzZSB0aGUgbGlnaHRzIGFuZCBzcGVha2VyIHRvIHRyb3VibGVzaG9vdCBk aWFsaW5nLgorICAgICAqIFlvdSBjYW4gc2hhcmUgdGhlbSBhbW9uZyBhbGwgdHlwZXMgb2YgY29t cHV0ZXJzLgorICAgICAqIFlvdSBjYW4gZWFzaWx5IHR1cm4gdGhlbSBvZmYgYW5kIG9uIHdoZW4g cG93ZXItY3ljbGluZyBzZWVtcworICAgICAgIHdhcnJhbnRlZC4KKyAgICAgKiBUaGV5IGFyZSBt b3JlIGxpa2VseSB0byBoYXZlIG1hbnVhbHMuCisKKyAgIE1vZGVtcyBjYW4gYmUgdXNlZCBieSBD LUtlcm1pdCBvbmx5IHdoZW4gdGhleSBhcmUgdmlzaWJsZSBhcyBvciB0aHJvdWdoCisgICBhIHJl Z3VsYXIgc2VyaWFsIHBvcnQgZGV2aWNlLiBDZXJ0YWluIG1vZGVtcyBjYW4gbm90IGJlIHVzZWQg aW4gdGhpcworICAgbm9ybWFsIHdheSBvbiBtYW55IGtpbmRzIG9mIGNvbXB1dGVyczogV2lubW9k ZW1zLCBSUEkgbW9kZW1zLAorICAgQ29udHJvbGxlcmxlc3MgbW9kZW1zLCB0aGUgSUJNIE13YXZl LCBldGM7IGFsbCBvZiB0aGVzZSByZXF1aXJlIHNwZWNpYWwKKyAgIGRyaXZlcnMgdGhhdCBwZXJm b3JtIHNvbWUsIG1vc3QsIG9yIGFsbCBvZiB0aGUgbW9kZW0ncyBmdW5jdGlvbnMgaW4KKyAgIHNv ZnR3YXJlLiBTdWNoIGRyaXZlcnMgYXJlIGdlbmVyYWxseSBOT1QgYXZhaWxhYmxlIGluIFVOSVgg b3Igb3RoZXIKKyAgIG5vbi1XaW5kb3dzIChvciBub24tT1MvMiwgaW4gdGhlIGNhc2Ugb2YgdGhl IE13YXZlKSBwbGF0Zm9ybXMuCisKKyAgIEluIG9yZGVyIHRvIGRpYWwgYSBtb2RlbSwgQy1LZXJt aXQgbXVzdCBrbm93IHRoZSBtb2RlbSdzIHJlcGVydG9pcmUgb2YKKyAgIGNvbW1hbmRzIGFuZCBy ZXNwb25zZXMuIEVhY2ggbW9kZW0gbWFrZSBhbmQgbW9kZWwgaXMgbGlrZWx5IHRvIGhhdmUgYQor ICAgZGlmZmVyZW50IHJlcGVydG9pcmUuIFNpbmNlIEtlcm1pdCBoYXMgbm8gd2F5IG9mIGtub3dp bmcgd2hpY2gga2luZCBvZgorICAgbW9kZW0gd2lsbCBiZSBkaWFsZWQsIG5vcm1hbGx5IHlvdSBo YXZlIHRvIHRlbGwgaXQgd2l0aCBhIFNFVCBNT0RFTQorICAgVFlQRSBjb21tYW5kLCBlLmcuOgor CisgIHNldCBtb2RlbSB0eXBlIHVzcm9ib3RpY3MKKyAgc2V0IGxpbmUgL2Rldi9jdWEwCisgIHNl dCBzcGVlZCA1NzYwMAorICBkaWFsIDc2NTQzMjEKKworICAgSW4gdGhlIGVhcmx5IGRheXMsIHRo ZXJlIHdhcyBhIHdpZGUgdmFyaWV0eSBvZiBtb2RlbXMgYW5kIGNvbW1hbmQKKyAgIGxhbmd1YWdl cy4gTm93YWRheXMsIGFsbW9zdCBldmVyeSBtb2RlbSB1c2VzIHRoZSBIYXllcyBBVCBjb21tYW5k IHNldAorICAgKGJ1dCB3aXRoIHNvbWUgZGlmZmVyZW5jZXMgaW4gdGhlIGRldGFpbHMpIGFuZCBp dHMgc3RhcnR1cAorICAgY29uZmlndXJhdGlvbiBpbmNsdWRlcyBlcnJvciBjb3JyZWN0aW9uLCBk YXRhIGNvbXByZXNzaW9uLCBhbmQgaGFyZHdhcmUKKyAgIChSVFMvQ1RTKSBmbG93IGNvbnRyb2wu IEFzIGxvbmcgYXMgQy1LZXJtaXQgaXMgY2FwYWJsZSBvZiBoYXJkd2FyZSBmbG93CisgICBjb250 cm9sIChhcyBpdCBpcyBvbiBtYW55LCBidXQgbm90IGFsbCwgdGhlIHBsYXRmb3JtcyB3aGVyZSBp dCBydW5zLAorICAgc2luY2Ugc29tZSBvcGVyYXRpbmcgc3lzdGVtcyBkb24ndCBzdXBwb3J0IGl0 KSwgdGhlIG1vZGVtIGNhbiBiZSBkaWFsZWQKKyAgIGltbWVkaWF0ZWx5LCB3aXRob3V0IGxlbmd0 aHkgY29uZmlndXJhdGlvbiBkaWFsb2dzLCBhbmQgaW4gZmFjdCB0aGlzIGlzCisgICB3aGF0IFNF VCBNT0RFTSBUWVBFIEdFTkVSSUMtSElHSC1TUEVFRCBkb2VzLiBJbiBDLUtlcm1pdCA4LjAsCisg ICBHRU5FUklDLUhJR0gtU1BFRUQgaGFzIGJlY29tZSB0aGUgZGVmYXVsdCBtb2RlbSB0eXBlLCBz byBub3cgaXQgaXMKKyAgIHVzdWFsbHkgcG9zc2libGUgdG8gU0VUIExJTkUsIFNFVCBTUEVFRCwg YW5kIERJQUwgd2l0aG91dCBoYXZpbmcgdG8KKyAgIGlkZW50aWZ5IHlvdXIgbW9kZW0uIElmIHRo aXMgZG9lc24ndCB3b3JrLCBvZiBjb3Vyc2UsIHRoZW4geW91IG1pZ2h0CisgICBoYXZlIHRvIGZh bGwgYmFjayB0byB0aGUgdHJhZGl0aW9uYWwgbWV0aG9kOiBHaXZlIGEgU0VUIE1PREVNIFRZUEUg Zm9yCisgICBhIHNwZWNpZmljIG1vZGVtIGZpcnN0LCB0aGVuIFNFVCBMSU5FLCBTRVQgU1BFRUQs IGFuZCBESUFMLgorCisgICBBbiBpbXBvcnRhbnQgY2hhbmdlIGluIEMtS2VybWl0IDYuMCBpcyB0 aGF0IHdoZW4geW91IGdpdmUgYSBTRVQgTU9ERU0KKyAgIFRZUEUgY29tbWFuZCB0byB0ZWxsIEtl cm1pdCB3aGF0IGtpbmQgb2YgbW9kZW0geW91IGhhdmUsIEtlcm1pdCBhbHNvCisgICBzZXRzIGEg bnVtYmVyIG9mIG90aGVyIG1vZGVtLXJlbGF0ZWQgcGFyYW1ldGVycyBhdXRvbWF0aWNhbGx5IGZy b20gaXRzCisgICBpbnRlcm5hbCBtb2RlbSBkYXRhYmFzZS4gVGh1cywgdGhlIG9yZGVyIGluIHdo aWNoIHlvdSBnaXZlCisgICBtb2RlbS1yZWxhdGVkIGNvbW1hbmRzIGlzIHNpZ25pZmljYW50LCB3 aGVyZWFzIGluIHByaW9yIHJlbGVhc2VzIHRoZXkKKyAgIGNvdWxkIGJlIGdpdmVuIGluIGFueSBv cmRlci4KKworICAgSW4gcGFydGljdWxhciwgTU9ERU0gU1BFRUQtTUFUQ0hJTkcgaXMgc2V0IGFj Y29yZGluZyB0byB3aGV0aGVyIHRoZQorICAgbW9kZW0gaXMga25vd24gdG8gYmUgY2FwYWJsZSBv ZiBzcGVlZCBidWZmZXJpbmcuIFNFVCBNT0RFTSBUWVBFCisgICBIQVlFUy0yNDAwIGF1dG9tYXRp Y2FsbHkgdHVybnMgU1BFRUQtTUFUQ0hJTkcgT04sIGJlY2F1c2Ugd2hlbiB0aGUKKyAgIEhheWVz IDI0MDAgcmVwb3J0cyBhIHBhcnRpY3VsYXIgc3BlZWQgaW4gaXRzIENPTk5FQ1QgbWVzc2FnZSwg dGhhdAorICAgbWVhbnMgaXRzIGludGVyZmFjZSBzcGVlZCBoYXMgY2hhbmdlZCB0byB0aGF0IHNw ZWVkLCBhbmQgQy1LZXJtaXQncworICAgbXVzdCBjaGFuZ2UgYWNjb3JkaW5nbHkgaWYgaXQgaXMg dG8gY29udGludWUgY29tbXVuaWNhdGluZy4gVGhpcyBtaWdodAorICAgY2F1c2Ugc29tZSBjb25m dXNpb24gaWYgeW91IHVzZSAic2V0IG1vZGVtIHR5cGUgaGF5ZXMiIGZvciBkaWFsaW5nIGEKKyAg IG1vcmUgYWR2YW5jZWQgdHlwZSBvZiBtb2RlbS4KKworICAgVGhlIG5ldyBkZWZhdWx0IGZvciBm bG93IGNvbnRyb2wgaXMgImF1dG8iLCBtZWFuaW5nICJkbyB0aGUgcmlnaHQgdGhpbmcKKyAgIGZv ciBlYWNoIHR5cGUgb2YgY29ubmVjdGlvbiIuIFNvIChmb3IgZXhhbXBsZSkgaWYgeW91ciB2ZXJz aW9uIG9mCisgICBDLUtlcm1pdCBzdXBwb3J0cyBTRVQgRkxPVyBSVFMvQ1RTIGFuZCB5b3VyIG1v ZGVtIGFsc28gc3VwcG9ydHMKKyAgIFJUUy9DVFMsIHRoZW4gS2VybWl0IGF1dG9tYXRpY2FsbHkg c2V0cyBpdHMgZmxvdyBjb250cm9sIHRvIFJUUy9DVFMgYW5kCisgICBzZXQgbW9kZW0ncyBmbG93 IGNvbnRyb2wgdG8gUlRTL0NUUyB0b28gYmVmb3JlIGF0dGVtcHRpbmcgdG8gdXNlIHRoZQorICAg bW9kZW0uCisKKyAgIEZvciB0aGVzZSByZWFzb25zLCBkb24ndCBhc3N1bWUgdGhhdCAic2V0IG1v ZGVtIHR5cGUgaGF5ZXMiIHNob3VsZCBiZQorICAgdXNlZCBmb3IgYWxsIG1vZGVtcyB0aGF0IHVz ZXMgdGhlIEhheWVzIEFUIGNvbW1hbmQgc2V0LiAic2V0IG1vZGVtIHR5cGUKKyAgIGhheWVzIiBy ZWFsbHkgZG9lcyBtZWFuIEhheWVzIDEyMDAgb3IgMjQwMCwgd2hpY2ggaW4gdHVybiBtZWFucyBu bworICAgaGFyZHdhcmUgZmxvdyBjb250cm9sLCBhbmQgbm8gc3BlZWQgYnVmZmVyaW5nLiBUaGlz IGNob2ljZSB3aWxsIHJhcmVseQorICAgd29yayB3aXRoIGEgbW9kZXJuIGhpZ2gtc3BlZWQgbW9k ZW0uCisKKzYuIERJQUxJTkcgSElOVFMgQU5EIFRJUFMKKworICAgWyBbNTldVG9wIF0gWyBbNjBd Q29udGVudHMgXSBbIFs2MV1OZXh0IF0gWyBbNjJdUHJldmlvdXMgXQorCisgICBJZiB5b3UgaGF2 ZSBhIGhpZ2gtc3BlZWQsIGVycm9yLWNvcnJlY3RpbmcsIGRhdGEtY29tcHJlc3NpbmcsCisgICBz cGVlZC1idWZmZXJpbmcgbW9kZW0sIHlvdSBzaG91bGQgZml4IHRoZSBtb2RlbSdzIGludGVyZmFj ZSBzcGVlZCBhcworICAgaGlnaCBhcyBwb3NzaWJsZSwgcHJlZmVyYWJseSAoYXQgbGVhc3QpIGZv dXIgdGltZXMgaGlnaGVyIHRoYW4gaXRzCisgICBtYXhpbXVtIGNvbm5lY3Rpb24gKG1vZHVsYXRp b24pIHNwZWVkIHRvIGFsbG93IGNvbXByZXNzaW9uIHRvIHdvcmsgYXQKKyAgIGZ1bGwgYWR2YW50 YWdlLiBJbiB0aGlzIHR5cGUgb2Ygc2V0dXAsIHlvdSBtdXN0IGFsc28gaGF2ZSBhbiBlZmZlY3Rp dmUKKyAgIG1lYW5zIG9mIGZsb3cgY29udHJvbCBlbmFibGVkIGJldHdlZW4gQy1LZXJtaXQgYW5k IHRoZSBtb2RlbSwKKyAgIHByZWZlcmFibHkgaGFyZHdhcmUgKFJUUy9DVFMpIGZsb3cgY29udHJv bC4gT24gcGxhdGZvcm1zIHRoYXQgZG8gbm90CisgICBzdXBwb3J0IGhhcmR3YXJlIGZsb3cgY29u dHJvbCwgaXQgaXMgdXN1YWxseSBwb3NzaWJsZSB0byBzZWxlY3QKKyAgIHNvZnR3YXJlIGZsb3cg Y29udHJvbCAoWG9uL1hvZmYpLCBhbmQgQy1LZXJtaXQgd2lsbCBkbyBpdHMgYmVzdCB0byBzZXQK KyAgIHRoZSBtb2RlbSBmb3IgbG9jYWwgWG9uL1hvZmYgZmxvdyBjb250cm9sIHRvbyAoYnV0IHRo ZW4sIG9mIGNvdXJzZSwKKyAgIEN0cmwtUyBhbmQgQ3RybC1RIGNoYXJhY3RlcnMgY2FuIG5vdCBi ZSB0cmFuc21pdHRlZCBvbiB0aGUgY29ubmVjdGlvbikuCisKKyAgIElmIHlvdSBhcmUgaGF2aW5n IHRyb3VibGUgZGlhbGluZyB5b3VyIG1vZGVtLCBTRVQgRElBTCBESVNQTEFZIE9OIHRvCisgICB3 YXRjaCB0aGUgZGlhbGluZyBpbnRlcmFjdGlvbnMgYmV0d2VlbiBDLUtlcm1pdCBhbmQgeW91ciBt b2RlbS4gQ29uc3VsdAorICAgQ2hhcHRlcnMgMy00IG9mIFs2M11Vc2luZyBDLUtlcm1pdCAoMm5k IEVkKSBmb3IgbW9kZW0tZGlhbGluZworICAgdHJvdWJsZXNob290aW5nIGluc3RydWN0aW9ucy4g VGhlIGZvbGxvd2luZyBzZWN0aW9ucyBvZmZlciBzb21lCisgICBhZGRpdGlvbmFsIGhpbnRzIGFu ZCB0aXBzLgorCis2LjEuIFN5bnRheAorCisgICBJZiB5b3Ugd2FudCB0byBkaWFsIGEgbnVtYmVy IHRoYXQgc3RhcnRzIHdpdGggIywgeW91J2xsIG5lZWQgdG8gcXVvdGUKKyAgIHRoZSAiIyIgY2hh cmFjdGVyIChhcyBcIyBvciBcezM1fSksIHNpbmNlIGl0IGlzIGFsc28gYSBjb21tZW50CisgICBp bnRyb2R1Y2VyOgorCisgIEMtS2VybWl0PmRpYWwgIzk4NzY1NDIxLTEtMjEyLTU1NTEyMTIgICA7 IExvb2tzIGxpa2UgYSBjb21tZW50CisgID9Zb3UgbXVzdCBzcGVjaWZ5IGEgbnVtYmVyIHRvIGRp YWwKKyAgQy1LZXJtaXQ+ZGlhbCBcIzk4NzY1NDIxLTEtMjEyLTU1NTEyMTIgIDsgV29ya3MgT0sK KyAgQy1LZXJtaXQ+ZGlhbCA9Izk4NzY1NDIxLTEtMjEyLTU1NTEyMTIgIDsgVGhpcyB3b3JrcyB0 b28KKworICAgV2hlbiB1c2luZyBhIGRpYWxpbmcgZGlyZWN0b3J5LCByZW1lbWJlciB3aGF0IGhh cHBlbnMgaWYgYSBuYW1lIGlzIG5vdAorICAgZm91bmQ6CisKKyAgQy1LZXJtaXQ+ZGlhbCB4eXpj b3JwCisgIExvb2t1cDogInh5emNvcnAiIC0gbm90IGZvdW5kIC0gZGlhbGluZyBhcyBnaXZlbgor CisgICBUaGlzIG5vcm1hbGx5IGRvZXMgbm8gaGFybSwgYnV0IHNvbWUgbW9kZW1zIG1pZ2h0IGJl aGF2ZSBzdHJhbmdlbHkgd2hlbgorICAgZ2l2ZW4gZGlhbCBzdHJpbmdzIHRoYXQgY29udGFpbiBj ZXJ0YWluIGxldHRlcnMuIEZvciBleGFtcGxlLCBhIGNlcnRhaW4KKyAgIEdlcm1hbiBtb2RlbSB0 cmVhdHMgYW55IGRpYWwgc3RyaW5nIHRoYXQgY29udGFpbnMgdGhlIGxldHRlciAicyIgYXMgYQor ICAgY29tbWFuZCB0byBmZXRjaCBhIG51bWJlciBmcm9tIGl0cyBpbnRlcm5hbCBsaXN0LCBhbmQg cmVwbGllcyBPSyB0byB0aGUKKyAgIEFURCBjb21tYW5kLCB3aGljaCBpcyBub3JtYWxseSBub3Qg YSB2YWxpZCByZXNwb25zZSBleGNlcHQgZm9yIHBhcnRpYWwKKyAgIGRpYWxpbmcuIFRvIGF2b2lk IHRoaXMgc2l0dWF0aW9uLCB1c2U6CisKKyAgbG9va3VwIHh5emNvcnAKKyAgaWYgc3VjY2VzcyBk aWFsCisKKzYuMi4gVGhlIENhcnJpZXIgU2lnbmFsCisKKyAgIFJlbWVtYmVyOiBJbiBtYW55IEMt S2VybWl0IGltcGxlbWVudGF0aW9ucyAoZGVwZW5kaW5nIG9uIHRoZSB1bmRlcmx5aW5nCisgICBv cGVyYXRpbmcgc3lzdGVtIC0tIG1vc3RseSBXaW5kb3dzLCBPUy8yLCBhbmQgU3lzdGVtLVYtYmFz ZWQgVU5JWAorICAgdmVyc2lvbnMsIGFuZCBpbiBDLUtlcm1pdCA3LjAsIGFsc28gVk1TKSwgeW91 IGNhbid0IENPTk5FQ1QgdG8gYSBtb2RlbQorICAgYW5kIHR5cGUgdGhlIG1vZGVtJ3MgZGlhbGlu ZyBjb21tYW5kIChsaWtlICJBVERUNzY1NDMyMSIpIG1hbnVhbGx5LAorICAgdW5sZXNzIHlvdSBm aXJzdCB0ZWxsIEMtS2VybWl0IHRvOgorCisgIFNFVCBDQVJSSUVSLVdBVENIIE9GRgorCisgICBU aGlzIGlzIGJlY2F1c2UgKGluIHRoZXNlIGltcGxlbWVudGF0aW9ucyksIHRoZSBDT05ORUNUIGNv bW1hbmQKKyAgIHJlcXVpcmVzIHRoZSBtb2RlbSdzIENhcnJpZXIgRGV0ZWN0IChDRCkgc2lnbmFs IHRvIGJlIG9uLCBidXQgdGhlIENECisgICBzaWduYWwgZG9lc24ndCBjb21lIG9uIHVudGlsIGFm dGVyIGRpYWxpbmcgaXMgY29tcGxldGUuIFRoaXMKKyAgIHJlcXVpcmVtZW50IGlzIHdoYXQgYWxs b3dzIEMtS2VybWl0IHRvIHBvcCBiYWNrIHRvIGl0cyBwcm9tcHQKKyAgIGF1dG9tYXRpY2FsbHkg d2hlbiB0aGUgY29ubmVjdGlvbiBpcyBodW5nIHVwLiBTZWUgdGhlIGRlc2NyaXB0aW9uIG9mCisg ICBTRVQgQ0FSUklFUi1XQVRDSCBpbiAiVXNpbmcgQy1LZXJtaXQiLgorCisgICBTaW1pbGFybHks IGlmIHlvdXIgZGlhbGVkIGNvbm5lY3Rpb24gZHJvcHMgd2hlbiBDQVJSSUVSLVdBVENIIGlzIHNl dCB0bworICAgQVVUTyBvciBPTiwgeW91IGNhbid0IENPTk5FQ1QgYmFjayB0byB0aGUgKG5vdyBk aXNjb25uZWN0ZWQpIHNjcmVlbiB0bworICAgc2VlIHdoYXQgbWlnaHQgaGF2ZSBoYXBwZW5lZCB1 bmxlc3MgeW91IGZpcnN0IFNFVCBDQVJSSUVSLVdBVENIIE9GRi4KKyAgIEJ1dCBzb21ldGltZXMg bm90IGV2ZW4gU0VUIENBUlJJRVItV0FUQ0ggT0ZGIHdpbGwgaGVscCBpbiB0aGlzCisgICBzaXR1 YXRpb246IGNlcnRhaW4gcGxhdGZvcm1zIChmb3IgZXhhbXBsZSBVbml4d2FyZSAyLjEpLCBvbmNl IGNhcnJpZXIKKyAgIGRyb3BzLCB3b24ndCBsZXQgdGhlIGFwcGxpY2F0aW9uIGRvIGkvbyB3aXRo IHRoZSBkZXZpY2UgYW55IG1vcmUuIEluCisgICB0aGF0IGNhc2UsIGlmIHlvdSB3YW50IHRvIHVz ZSB0aGUgZGV2aWNlIGFnYWluLCB5b3UgaGF2ZSB0byBDTE9TRSBpdAorICAgYW5kIE9QRU4gaXQg YWdhaW4uIE9yIHlvdSBjYW4gaGF2ZSBLZXJtaXQgZG8gdGhpcyBmb3IgeW91IGF1dG9tYXRpY2Fs bHkKKyAgIGJ5IHRlbGxpbmcgaXQgdG8gU0VUIENMT1NFLU9OLURJU0NPTk5FQ1QgT04uCisKKzYu My4gRGlhbGluZyBhbmQgRmxvdyBDb250cm9sCisKKyAgIERvbid0IFNFVCBGTE9XIFJUUy9DVFMg aWYgeW91ciBtb2RlbSBpcyB0dXJuZWQgb2ZmLCBvciBpZiBpdCBpcyBub3QKKyAgIHByZXNlbnRp bmcgdGhlIENUUyBzaWduYWwuIE90aGVyd2lzZSwgdGhlIHNlcmlhbCBkZXZpY2UgZHJpdmVyIGNh biBnZXQKKyAgIHN0dWNrIHdhaXRpbmcgZm9yIHRoaXMgc2lnbmFsIHRvIGFwcGVhci4KKworICAg TW9zdCBtb2Rlcm4gbW9kZW1zIHN1cHBvcnQgUlRTL0NUUyAoaWYgdGhleSBzdXBwb3J0IGFueSBo YXJkd2FyZSBmbG93CisgICBjb250cm9sIGF0IGFsbCksIGJ1dCBzb21lIGNvbXB1dGVycyB1c2Ug ZGlmZmVyZW50IFJTLTIzMiBjaXJjdWl0cyBmb3IKKyAgIHRoZSBzYW1lIHB1cnBvc2VzLCBlLmcu IERUUiBhbmQgQ0QsIG9yIERUUiBhbmQgQ1RTLiBJbiBzdWNoIGNhc2VzLCB5b3UKKyAgIG1pZ2h0 IGJlIGFibGUgdG8gbWFrZSB5b3VyIGNvbXB1dGVyIHdvcmsgd2l0aCB5b3VyIG1vZGVtIGJ5Cisg ICBhcHByb3ByaWF0ZWx5IGNyb3NzLXdpcmluZyB0aGUgY2lyY3VpdHMgaW4gdGhlIGNhYmxlIGNv bm5lY3RvciwgZm9yCisgICBleGFtcGxlIHRoZSBjb21wdXRlcidzIERUUiB0byB0aGUgbW9kZW0n cyBSVFMsIGFuZCBtb2RlbSdzIENEIHRvIHRoZQorICAgY29tcHV0ZXIncyBDVFMuIEhPV0VWRVIs IEMtS2VybWl0IGRvZXMgbm90IGtub3cgeW91IGhhdmUgZG9uZSB0aGlzLiBTbworICAgaWYgeW91 IGhhdmUgKHNheSkgU0VUIEZMT1cgRFRSL0NELCBDLUtlcm1pdCB3aWxsIG1ha2Ugbm8gYXR0ZW1w dCB0bworICAgdGVsbCB0aGUgbW9kZW0gdG8gdXNlIFJUUy9DVFMuIFlvdSBwcm9iYWJseSBkaWQg dGhpcyB5b3Vyc2VsZiB3aGVuIHlvdQorICAgY29uZmlndXJlZCB0aGUgbW9kZW0uCisKKzYuNC4g VGhlIERpYWwgVGltZW91dAorCisgICBJZiBpdCB0YWtlcyB5b3VyIGNhbGwgbG9uZ2VyIHRvIGJl IGNvbXBsZXRlZCB0aGFuIHRoZSB0aW1lb3V0IGludGVydmFsCisgICB0aGF0IEMtS2VybWl0IGNh bGN1bGF0ZXMsIHlvdSBjYW4gdXNlIHRoZSBTRVQgRElBTCBUSU1FT1VUIGNvbW1hbmQgdG8KKyAg IG92ZXJyaWRlIEMtS2VybWl0J3MgdmFsdWUuIEJ1dCBiZXdhcmU6IHRoZSBtb2RlbSBoYXMgaXRz IG93biB0aW1lb3V0CisgICBmb3IgY29tcGxldGluZyB0aGUgY2FsbC4gSWYgaXQgaXMgYSBIYXll cy1saWtlIG1vZGVtLCBDLUtlcm1pdCBhZGp1c3RzCisgICB0aGUgbW9kZW0ncyB2YWx1ZSB0b28g Ynkgc2V0dGluZyByZWdpc3RlciBTNy4gQnV0IHRoZSBtYXhpbXVtIHZhbHVlIGZvcgorICAgUzcg bWlnaHQgYmUgc21hbGxlciB0aGFuIHRoZSB0aW1lIHlvdSBuZWVkISBJbiB0aGF0IGNhc2UsIEMt S2VybWl0IHNldHMKKyAgIFM3IHRvIDAsIDI1NSwgb3Igb3RoZXIgKG1vZGVtLXNwZWNpZmljKSB2 YWx1ZSB0byBzaWduaWZ5ICJubyB0aW1lb3V0Ii4KKyAgIElmIEtlcm1pdCBhdHRlbXB0cyB0byBz ZXQgcmVnaXN0ZXIgUzcgdG8gYSB2YWx1ZSBoaWdoZXIgdGhhbiB5b3VyCisgICBtb2RlbSdzIG1h eGltdW0sIHRoZSBtb2RlbSB3aWxsIHNheSAiRVJST1IiIGFuZCB5b3Ugd2lsbCBnZXQgYSAiRmFp bHVyZQorICAgdG8gaW5pdGlhbGl6ZSBtb2RlbSIgZXJyb3IuIEluIHRoYXQgY2FzZSwgdXNlIFNF VCBESUFMIFRJTUVPVVQgdG8KKyAgIG92ZXJyaWRlIEMtS2VybWl0J3MgY2FsY3VsYXRpb24gb2Yg dGhlIHRpbWVvdXQgdmFsdWUgd2l0aCB0aGUgaGlnaGVzdAorICAgdmFsdWUgdGhhdCBpcyBsZWdh bCBmb3IgeW91ciBtb2RlbSwgZS5nLiA2MC4KKworNi41LiBFc2NhcGUgU2VxdWVuY2UgR3VhcmQg VGltZQorCisgICBBICJUSUVTIiAoVGltZS1JbmRlcGVuZGVudCBFc2NhcGUgU2VxdWVuY2UpIG1v ZGVtIGRvZXMgbm90IHJlcXVpcmUgYW55CisgICBndWFyZCB0aW1lIGFyb3VuZCBpdHMgZXNjYXBl IHNlcXVlbmNlLiBUaGUgZm9sbG93aW5nIHRleHQ6CisKKyAgKysrQVRIMAorCisgICBpZiBzZW50 IHRocm91Z2ggYSBUSUVTIG1vZGVtLCBmb3IgZXhhbXBsZSBiZWNhdXNlIHlvdSB3ZXJlIHVwbG9h ZGluZworICAgdGhpcyBmaWxlIHRocm91Z2ggaXQsIGNvdWxkIHBvcCB0aGUgbW9kZW0gYmFjayBp bnRvIGNvbW1hbmQgbW9kZSBhbmQKKyAgIG1ha2UgaXQgaGFuZyB1cCB0aGUgY29ubmVjdGlvbi4g TGF0ZXIgdmVyc2lvbnMgb2YgdGhlIFRlbGViaXQgVDE2MDAgYW5kCisgICBUMzAwMCAodmVyc2lv biBMQTMuMDFFIGZpcm13YXJlIGFuZCBsYXRlciksIGFuZCBhbGwgV29ybGRCbGF6ZXJzLCB1c2UK KyAgIFRJRVMuCisKKyAgIEFsdGhvdWdoIHRoZSBwcm9iYWJpbGl0eSBvZiAiKysrIiBhcHBlYXJp bmcgaW4gYSBLZXJtaXQgcGFja2V0IGlzCisgICBtYXJrZWRseSBsb3dlciB0aGFuIHdpdGggbW9z dCBvdGhlciBwcm90b2NvbHMgKHNlZSB0aGUgWzY0XUZpbGUKKyAgIFRyYW5zZmVyIHNlY3Rpb24g YmVsb3cpLCBpdCBjYW4gc3RpbGwgaGFwcGVuIHVuZGVyIGNlcnRhaW4KKyAgIGNpcmN1bXN0YW5j ZXMuIEl0IGNhbiBhbHNvIGhhcHBlbiB3aGVuIHVzaW5nIEMtS2VybWl0J3MgVFJBTlNNSVQKKyAg IGNvbW1hbmQuIElmIHlvdSBhcmUgdXNpbmcgYSBUZWxlYml0IFRJRVMgbW9kZW0sIHlvdSBjYW4g Y2hhbmdlIHRoZQorICAgbW9kZW0ncyBlc2NhcGUgc2VxdWVuY2UgdG8gYW4gb3RoZXJ3aXNlIGxp dHRsZS11c2VkIGNvbnRyb2wgY2hhcmFjdGVyCisgICBzdWNoIGFzIEN0cmwtXyAoQ29udHJvbC1V bmRlcnNjb3JlKToKKworICBBVCBTMj0zMQorCisgICBBIHNlcXVlbmNlIG9mIHRocmVlIGNvbnNl Y3V0aXZlIEN0cmwtXyBjaGFyYWN0ZXJzIHdpbGwgbm90IGFwcGVhciBpbiBhCisgICBLZXJtaXQg cGFja2V0IHVubGVzcyB5b3UgZ28gdG8gZXh0cmFvcmRpbmFyeSBsZW5ndGhzIHRvIGRlZmVhdCBt b3JlCisgICB0aGFuIGEgZmV3IG9mIEtlcm1pdCdzIGJ1aWx0LWluIHNhZmV0eSBtZWNoYW5pc21z LiBBbmQgaWYgeW91IGRvIHRoaXMsCisgICB0aGVuIHlvdSBzaG91bGQgYWxzbyB0dXJuIG9mZiB0 aGUgbW9kZW0ncyBlc2NhcGUtc2VxdWVuY2UgcmVjb2duaXRpb24KKyAgIGFsdG9nZXRoZXI6CisK KyAgQVQgUzQ4PTAgUzI9MjU1CisKKyAgIEJ1dCB3aGVuIGVzY2FwZSBzZXF1ZW5jZSByZWNvZ25p dGlvbiBpcyB0dXJuZWQgb2ZmLCAibW9kZW0gaGFuZ3VwIgorICAgKDxwYXVzZT4rKys8cGF1c2U+ QVRIMDxDUj4pIHdpbGwgbm90IHdvcmssIHNvIHlvdSBzaG91bGQgYWxzbyBTRVQgTU9ERU0KKyAg IEhBTkdVUCBSUzIzMi1TSUdOQUwgKHJhdGhlciB0aGVuIE1PREVNLUNPTU1BTkQpLgorCis2LjYu IEFkYXB0aXZlIERpYWxpbmcKKworICAgU29tZSBtb2RlbXMgaGF2ZSBhIGZlYXR1cmUgY2FsbGVk IGFkYXB0aXZlIGRpYWxpbmcuIFdoZW4gdGhleSBhcmUgdG9sZAorICAgdG8gZGlhbCBhIG51bWJl ciB1c2luZyBUb25lIGRpYWxpbmcsIHRoZXkgY2hlY2sgdG8gbWFrZSBzdXJlIHRoYXQKKyAgIGRp YWx0b25lIGhhcyBnb25lIGF3YXkgYWZ0ZXIgZGlhbGluZyB0aGUgZmlyc3QgZGlnaXQuIElmIGl0 IGhhcyBub3QsCisgICB0aGUgbW9kZW0gYXNzdW1lcyB0aGUgcGhvbmUgbGluZSBkb2VzIG5vdCBh Y2NlcHQgVG9uZSBkaWFsaW5nIGFuZCBzbworICAgc3dpdGNoZXMgdG8gUHVsc2UuIFdoZW4gZGlh bGluZyBvdXQgZnJvbSBhIFBCWCwgdGhlcmUgaXMgYWxtb3N0IGFsd2F5cworICAgYSBzZWNvbmRh cnkgZGlhbHRvbmUuIFR5cGljYWxseSB5b3UgdGFrZSB0aGUgcGhvbmUgb2ZmLWhvb2ssIGdldCB0 aGUKKyAgIFBCWCBkaWFsdG9uZSwgZGlhbCAiOSIgdG8gZ2V0IGFuIG91dHNpZGUgbGluZSwgYW5k IHRoZW4gZ2V0IHRoZSBwaG9uZQorICAgY29tcGFueSdzIGRpYWx0b25lLiBJbiBhIHNpdHVhdGlv biBsaWtlIHRoaXMsIHlvdSBuZWVkIHRvIHRlbGwgdGhlCisgICBtb2RlbSB0byBleHBlY3QgdGhl IHNlY29uZGFyeSBkaWFsdG9uZS4gT24gSGF5ZXMgYW5kIGNvbXBhdGlibGUgbW9kZW1zLAorICAg dGhpcyBpcyBkb25lIGJ5IHB1dHRpbmcgYSAiVyIgaW4gdGhlIGRpYWwgc3RyaW5nIGF0IHRoZSBh cHByb3ByaWF0ZQorICAgcGxhY2UuIEZvciBleGFtcGxlLCB0byBkaWFsIDkgZm9yIGFuIG91dHNp ZGUgbGluZSwgYW5kIHRoZW4gNzY1NDMyMSwKKyAgIHVzZSBBVERUOVc3NjU0MzIxOgorCisgIFNF VCBQQlgtT1VUU0lERS1QUkVGSVggOVcKKworICAgKHJlcGxhY2UgIjkiIHdpdGggd2hhdGV2ZXIg eW91ciBQQlgncyBvdXRzaWRlLWxpbmUgcHJlZml4IGlzKS4KKworNi43LiBUaGUgQnVzeSBTaWdu YWwKKworICAgU29tZSBwaG9uZSBjb21wYW5pZXMgYXJlIGVsaW1pbmF0aW5nIHRoZSBidXN5IHNp Z25hbC4gSW5zdGVhZCwgdGhleQorICAgaXNzdWUgYSB2b2ljZSBtZXNzYWdlIHN1Y2ggYXMgInBy ZXNzIDEgdG8gYXV0b21hdGljYWxseSByZWRpYWwgdW50aWwKKyAgIHRoZSBudW1iZXIgYW5zd2Vy cywgb3IuLi4iLiBPYnZpb3VzbHkgdGhpcyBpcyBhIGRpc2FzdGVyIGZvciBtb2RlbQorICAgY2Fs bHMuIElmIHlvdXIgc2VydmljZSBoYXMgdGhpcyBmZWF0dXJlLCB0aGVyZSdzIG5vdGhpbmcgS2Vy bWl0IGNhbiBkbworICAgYWJvdXQgaXQuIFlvdXIgbW9kZW0gd2lsbCByZXNwb25kIHdpdGggTk8g Q0FSUklFUiAoYWZ0ZXIgYSBsb25nIHRpbWUpCisgICByYXRoZXIgdGhhbiBCVVNZIChpbW1lZGlh dGVseSksIGFuZCBLZXJtaXQgd2lsbCBkZWNsYXJlIHRoZSBjYWxsIGEKKyAgIGZhaWx1cmUsIHJh dGhlciB0aGFuIHRyeWluZyB0byByZWRpYWwgdGhlIHNhbWUgbnVtYmVyLgorCis2LjguIEhhbmdp bmcgVXAKKworICAgVGhlcmUgYXJlIHR3byB3YXlzIHRvIGhhbmcgdXAgYSBtb2RlbTogYnkgdHVy bmluZyBvZmYgdGhlIHNlcmlhbCBwb3J0J3MKKyAgIERUUiBzaWduYWwgKFNFVCBNT0RFTSBIQU5H VVAtTUVUSE9EIFJTMjMyLVNJR05BTCkgb3Igc2VuZGluZyB0aGUgbW9kZW0KKyAgIGl0cyBlc2Nh cGUgc2VxdWVuY2UgZm9sbG93ZWQgYnkgaXRzIGhhbmd1cCBjb21tYW5kIChTRVQgTU9ERU0KKyAg IEhBTkdVUC1NRVRIT0QgTU9ERU0tQ09NTUFORCkuIElmIG9uZSBkb2Vzbid0IHdvcmssIHRyeSB0 aGUgb3RoZXIuIElmCisgICB0aGUgYXV0b21hdGljIGhhbmd1cCBwZXJmb3JtZWQgYXQgdGhlIGJl Z2lubmluZyBvZiBhIERJQUwgY29tbWFuZAorICAgY2F1c2VzIHRyb3VibGUsIHRoZW4gU0VUIERJ QUwgSEFOR1VQIE9GRi4KKworICAgVGhlIEhBTkdVUCBjb21tYW5kIGhhcyBubyBlZmZlY3Qgd2hl biBDLUtlcm1pdCBpcyBpbiByZW1vdGUgbW9kZS4gVGhpcworICAgaXMgb24gcHVycG9zZS4gSWYg Qy1LZXJtaXQgY291bGQgaGFuZyB1cCBpdHMgb3duIGNvbnRyb2xsaW5nIHRlcm1pbmFsLAorICAg dGhpcyB3b3VsZCAoYSkgbW9zdCBsaWtlbHkgbGVhdmUgYmVoaW5kIHpvbWJpZSBwcm9jZXNzZXMs IGFuZCAoYikgcG9zZQorICAgYSBzZWN1cml0eSByaXNrLgorCisgICBJZiB5b3UgRElBTCBhIG1v ZGVtLCBkaXNjb25uZWN0LCB0aGVuIFNFVCBIT1NUIG9yIFRFTE5FVCwgYW5kIHRoZW4KKyAgIEhB TkdVUCwgS2VybWl0IHNlbmRzIHRoZSBtb2RlbSdzIGhhbmd1cCBjb21tYW5kLCBzdWNoIGFzICIr KytBVEhPIi4KKyAgIFRoZXJlIGlzIG5vIGdvb2Qgd2F5IHRvIGF2b2lkIHRoaXMsIGJlY2F1c2Ug dGhpcyBjYXNlIGNhbid0IHJlbGlhYmx5IGJlCisgICBkaXN0aW5ndWlzaGVkIGZyb20gdGhlIGNh c2UgaW4gd2hpY2ggdGhlIHVzZXIgZG9lcyBTRVQgSE9TVAorICAgdGVybWluYWwtc2VydmVyLCBT RVQgTU9ERU0gVFlQRSBuYW1lLCBESUFMLiBJbiBib3RoIGNhc2VzIHdlIGhhdmUgYQorICAgdmFs aWQgbW9kZW0gdHlwZSBzZWxlY3RlZCBhbmQgd2UgaGF2ZSBhIG5ldHdvcmsgY29ubmVjdGlvbi4g SWYgeW91IHdhbnQKKyAgIHRvIERJQUwgYW5kIHRoZW4gbGF0ZXIgbWFrZSBhIHJlZ3VsYXIgbmV0 d29yayBjb25uZWN0aW9uLCB5b3Ugd2lsbCBoYXZlCisgICB0byBTRVQgTU9ERU0gVFlQRSBOT05F IG9yIFNFVCBESUFMIEhBTkdVUCBPRkYgdG8gYXZvaWQgdGhpcyBwaGVub21lbm9uLgorCis3LiBU RVJNSU5BTCBTRVJWRVJTCisKKyAgIFsgWzY1XVRvcCBdIFsgWzY2XUNvbnRlbnRzIF0gWyBbNjdd TmV4dCBdIFsgWzY4XVByZXZpb3VzIF0KKworICAgV2F0Y2ggb3V0IGZvciB0ZXJtaW5hbCBzZXJ2 ZXIncyBlc2NhcGUgY2hhcmFjdGVyIC0tIHVzdWFsbHkgYSBjb250cm9sCisgICBjaGFyYWN0ZXIg c3VjaCBhcyBDdHJsLUNpcmN1bWZsZXggKEN0cmwtXikuIERvbid0IHVucHJlZml4IGl0IGluCisg ICBLZXJtaXQhCisKKyAgIENpc2NvcyAtLSBtdXN0IG9mdGVuIGJlIHRvbGQgdG8gInRlcm1pbmFs IGRvd25sb2FkIi4uLiBDaXNjbyBBU00gbW9kZWxzCisgICBkb24ndCBoYXZlIGhhcmR3YXJlIGZs b3cgY29udHJvbCBpbiBib3RoIGRpcmVjdGlvbnMuCisKKyAgIE1hbnkgdGVybWluYWwgc2VydmVy cyBvbmx5IGdpdmUgeW91IGEgNy1iaXQgY29ubmVjdGlvbiwgc28gaWYgeW91IGNhbid0CisgICBt YWtlIGl0IDgtYml0LCB0ZWxsIEtlcm1pdCB0byAic2V0IHBhcml0eSBzcGFjZSIuCisKKyAgIFRo ZSBmb2xsb3dpbmcgc3RvcnksIHJlZ2FyZGluZyB0cm91YmxlIHRyYW5zZmVycmluZyA4LWJpdCBm aWxlcyB0aHJvdWdoCisgICBhIHJldmVyc2UgdGVybWluYWwgc2VydmVyLCB3YXMgY29udHJpYnV0 ZWQgYnkgYW4gQW5uZXggdGVybWluYWwgc2VydmVyCisgICB1c2VyOgorCisgICAgIFVzaW5nIEMt S2VybWl0IG9uIGFuIEhQIDkwMDAgNzEyLzgwIHJ1bm5pbmcgdGhlIEhQLVVYIDEwLjAwCisgICAg IG9wZXJhdGluZyBzeXN0ZW0uIFRoZSBIUCB3YXMgY29ubmVjdGVkIHRvIGEgWHlsb2dpY3MgQW5u ZXgKKyAgICAgTUlDUk8tRUxTLVVYIFI3LjEgOCBwb3J0IHRlcm1pbmFsIHNlcnZlciB2aWEgZXRo ZXJuZXQuIE9uIHRoZSBzZWNvbmQKKyAgICAgcG9ydCBvZiB0aGUgdGVybWluYWwgc2VydmVyIGlz IGFuIEFUJlQgUGFyYWR5bmUgMzgxMCBtb2RlbSwgd2hpY2ggaXMKKyAgICAgY29ubmVjdGVkIHRv IGEgdGVsZXBob25lIGxpbmUuIFRoZXJlIGlzIGEgcHJvZ3JhbSB3aGljaCBydW5zIG9uIHRoZQor ICAgICBIUCB0byBlc3RhYmxpc2ggYSBUZWxuZXQgY29ubmVjdGlvbiBiZXR3ZWVuIGEgc2VyaWFs IGxpbmUgb24gdGhlCisgICAgIEFubmV4IGFuZCBhIGNoYXJhY3RlciBzcGVjaWFsIGZpbGUgb24g dGhlIEhQICgvZGV2IGZpbGUpLiBUaGlzIGlzIGFuCisgICAgIEFubmV4IHNwZWNpZmljIHByb2dy YW0gY2FsbGVkIHJ0ZWxuZXQgKHJldmVyc2UgdGVsbmV0KSBhbmQgaXMKKyAgICAgcHJvdmlkZWQg d2l0aCB0aGUgdGVybWluYWwgc2VydmVyIHNvZnR3YXJlLiBUaGUgcnRlbG5ldCB1dGlsaXR5IHJ1 bnMKKyAgICAgb24gdG9wIG9mIHRoZSBwc2V1ZG8tdGVybWluYWwgZmFjaWxpdHkgcHJvdmlkZWQg YnkgVU5JWC4gSXQgY3JlYXRlcworICAgICBob3N0LW9yaWdpbmF0ZWQgY29ubmVjdGlvbnMgdG8g ZGV2aWNlcyBhdHRhY2hlZCBvdCBBbm5leCBzZXJpYWwKKyAgICAgcG9ydHMuIFRoZXJlIGFyZSBz ZXZlcmFsIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgdG8gYmUgc3BlY2lmaWVkIHdpdGgKKyAgICAg dGhpcyBwcm9ncmFtOiB0aGUgSVAgYWRkcmVzcyBvZiB0aGUgdGVybWluYWwgc2VydmVyLCB0aGUg bnVtYmVyIG9mCisgICAgIHRoZSBwb3J0IHRvIGF0dGFjaCB0bywgYW5kIHRoZSBuYW1lIG9mIHRo ZSBwc2V1ZG8tZGV2aWNlIHRvIGNyZWF0ZS4KKyAgICAgSW4gYWRkaXRpb24gdG8gdGhlc2UgdGhl cmUgYXJlIG9wdGlvbnMgdG8gdGVsbCBydGVsbmV0IGhvdyB0bworICAgICBvcGVyYXRlIG9uIHRo ZSBjb25uZWN0OiAtYiByZXF1ZXN0cyBuZWdvdGlhdGlvbiBmb3IgVGVsbmV0IGJpbmFyeQorICAg ICBtb2RlLCAtZCB0dXJucyBvbiBzb2NrZXQtbGV2ZSBkZWJ1Z2dpbmcsIC1mIGVuYWJsZXMgImNv bm5lY3Qgb24gdGhlCisgICAgIGZseSIgbW9kZSwgLXIgcmVtb3ZlcyB0aGUgZGV2aWNlLW5hbWUg aWYgaXQgYWxyZWFkeSBleGlzdHMsIGV0Yy4gVGhlCisgICAgIG1vc3QgaW1wb3J0YW50IG9mIHRo ZXNlIHRvIGJlIHNwZWNpZmllZCB3aGVuIHVzaW5nIDggZGF0YSBiaXRzIGFuZAorICAgICBubyBw YXJpdHksIGFzIHdlIGZvdW5kIG91dCwgd2FzIHRoZSAtdCBvcHRpb24uIFRoaXMgY3JlYXRlcyBh CisgICAgIHRyYW5zcGFyZW50IFRDUCBjb25uZWN0aW9uIHRvIHRoZSB0ZXJtaW5hbCBzZXJ2ZXIu IEFnYWluLCB3aGF0IHdlCisgICAgIGFzc3VtZWQgdG8gYmUgaGFwcGVuaW5nIHdhcyB0aGF0IHRo ZSBydGVsbmV0IHByb2dyYW0gZW5jb3VudGVyZWQgYQorICAgICBjaGFyYWN0ZXIgc2VxdWVuY2Ug c3BlY2lhbCB0byBpdHNlbGYgYW5kIHRoZW4gImVhdGluZyIgdGhvc2Uga2VybWl0CisgICAgIHBh Y2tldHMuIEkgdGhpbmsgdGhpcyBpcyBhbGwgb2YgdGhlIGluZm9ybWF0aW9uIEkgY2FuIGdpdmUg eW91IG9uCisgICAgIHRoZSBjb25maWd1cmF0aW9uLCBzaG9ydCBvZiB0aGUgdmFsdWVzIGFzc29j aWF0ZWQgd2l0aCB0aGUgcG9ydCBvbgorICAgICB0aGUgdGVybWluYWwgc2VydmVyLgorCisgICBI b3cgdG8gRElBTCBmcm9tIGEgVENQL0lQIHJldmVyc2UgdGVybWluYWwgc2VydmVyIChtb2RlbSBz ZXJ2ZXIpOgorCisgICAgMS4gKG9ubHkgaWYgbmVjZXNzYXJ5KSBTRVQgVEVMTkVUIEVDSE8gUkVN T1RFCisgICAgMi4gU0VUIEhPU1QgdGVybWluYWwtc2VydmVyLWlwLW5hbWUtb3ItYWRkcmVzcyBb IHBvcnQgXQorICAgIDMuIFNFVCBNT0RFTSBUWVBFIG1vZGVtLXR5cGUKKyAgICA0LiAob25seSBp ZiBuZWNlc3NhcnkpIFNFVCBESUFMIEhBTkdVUCBPRkYKKyAgICA1LiAoZm9yIHRyb3VibGVzaG9v dGluZykgU0VUIERJQUwgRElTUExBWSBPTgorICAgIDYuIERJQUwgcGhvbmUtbnVtYmVyCisKKyAg IFRoZSBvcmRlciBpcyBpbXBvcnRhbnQ6IFNFVCBIT1NUIGJlZm9yZSBTRVQgTU9ERU0gVFlQRS4g U2luY2UgdGhpcyBpcyBhCisgICBUZWxuZXQgY29ubmVjdGlvbiwgc2VyaWFsLXBvcnQgcmVsYXRl ZCBjb21tYW5kcyBzdWNoIGFzIFNFVCBTUEVFRCwgU0VUCisgICBTVE9QLUJJVFMsIEhBTkdVUCAo d2hlbiBNT0RFTSBIQU5HVVAtTUVUSE9EIGlzIFJTMjMyKSwgZXRjLCBoYXZlIG5vCisgICBlZmZl Y3QuIEhvd2V2ZXIsIGluIEMtS2VybWl0IDguMCwgaWYgdGhlIG1vZGVtIHNlcnZlciBzdXBwb3J0 cworICAgWzY5XVJGQy0yMjE3IFRlbG5ldCBDb20tUG9ydCBDb250cm9sIHByb3RvY29sLCB0aGVz ZSBjb21tYW5kcyBkbyBpbmRlZWQKKyAgIHRha2UgZWZmZWN0IGF0IHRoZSBzZXJ2ZXIncyBzZXJp YWwgcG9ydC4KKworOC4gVEVSTUlOQUwgRU1VTEFUSU9OCisKKyAgIFsgWzcwXVRvcCBdIFsgWzcx XUNvbnRlbnRzIF0gWyBbNzJdTmV4dCBdIFsgWzczXVByZXZpb3VzIF0KKworICAgRXhjZXB0IGZv ciB0aGUgV2luZG93cywgT1MvMiwgYW5kIE1hY2ludG9zaCB2ZXJzaW9ucywgQy1LZXJtaXQgZG9l cyBub3QKKyAgIGVtdWxhdGUgYW55IGtpbmQgb2YgdGVybWluYWwuIFJhdGhlciwgaXQgYWN0cyBh cyBhICJzZW1pdHJhbnNwYXJlbnQKKyAgIHBpcGUiLCBwYXNzaW5nIHRoZSBjaGFyYWN0ZXJzIHlv dSB0eXBlIGR1cmluZyBhIENPTk5FQ1Qgc2Vzc2lvbiB0byB0aGUKKyAgIHJlbW90ZSBob3N0LCBh bmQgc2VuZGluZyB0aGUgY2hhcmFjdGVycyByZWNlaXZlZCBmcm9tIHRoZSByZW1vdGUgaG9zdAor ICAgdG8geW91ciBzY3JlZW4uIFdoYXRldmVyIGlzIGNvbnRyb2xsaW5nIHlvdXIga2V5Ym9hcmQg YW5kIHNjcmVlbgorICAgcHJvdmlkZXMgdGhlIHNwZWNpZmljIHRlcm1pbmFsIGVtdWxhdGlvbjog YSByZWFsIHRlcm1pbmFsLCBhIFBDIHJ1bm5pbmcKKyAgIGEgdGVybWluYWwgZW11bGF0b3IsIGV0 Yywgb3IgKGluIHRoZSBjYXNlIG9mIGEgc2VsZi1jb250YWluZWQKKyAgIHdvcmtzdGF0aW9uKSB5 b3VyIGNvbnNvbGUgZHJpdmVyLCBhIHRlcm1pbmFsIHdpbmRvdywgeHRlcm0sIGV0Yy4KKworICAg S2VybWl0IGlzIHNlbWl0cmFuc3BhcmVudCByYXRoZXIgdGhhbiBmdWxseSB0cmFuc3BhcmVudCBp biB0aGUKKyAgIGZvbGxvd2luZyB3YXlzOgorCisgICAgICogRHVyaW5nIGEgVEVMTkVUICgic2V0 IGhvc3QiKSBzZXNzaW9uLCBDLUtlcm1pdCBpdHNlbGYgZXhlY3V0ZXMgdGhlCisgICAgICAgVEVM TkVUIHByb3RvY29sIGFuZCBwZXJmb3JtcyBURUxORVQgbmVnb3RpYXRpb25zLiAoQnV0IGl0IGRv ZXMgbm90CisgICAgICAgcGVyZm9ybSBUTjMyNzAgcHJvdG9jb2wgb3IgYW55IG90aGVyIHR5cGUg b2YgMzI3MCB0ZXJtaW5hbAorICAgICAgIGVtdWxhdGlvbi4pCisgICAgICogSWYgeW91IGhhdmUg Y2hhbmdlZCB5b3VyIGtleWJvYXJkIG1hcHBpbmcgdXNpbmcgU0VUIEtFWSwgQy1LZXJtaXQKKyAg ICAgICByZXBsYWNlcyB0aGUgY2hhcmFjdGVycyB5b3UgdHlwZSB3aXRoIHRoZSBjaGFyYWN0ZXJz IG9yIHN0cmluZ3MKKyAgICAgICB0aGV5IGFyZSBtYXBwZWQgdG8uCisgICAgICogSWYgeW91IFNF VCB5b3VyIFRFUk1JTkFMIENIQVJBQ1RFUi1TRVQgdG8gYW55dGhpbmcgYnV0IFRSQU5TUEFSRU5U LAorICAgICAgIEMtS2VybWl0IHRyYW5zbGF0ZXMgeW91ciBrZXlzdHJva2VzIChhZnRlciBhcHBs eWluZyBhbnkgU0VUIEtFWQorICAgICAgIGRlZmluaXRpb25zKSBiZWZvcmUgdHJhbnNtaXR0aW5n IHRoZW0sIGFuZCB0cmFuc2xhdGVzIHJlY2VpdmVkCisgICAgICAgY2hhcmFjdGVycyBiZWZvcmUg c2hvd2luZyB0aGVtIG9uIHlvdXIgc2NyZWVuLgorICAgICAqIElmIHlvdXIgcmVtb3RlIGFuZC9v ciBsb2NhbCBURVJNSU5BTCBDSEFSQUNURVItU0VUIGlzIGFuIElTTyA2NDYKKyAgICAgICA3LWJp dCBuYXRpb25hbCBjaGFyYWN0ZXIgc2V0LCBzdWNoIGFzIEdlcm1hbiwgRnJlbmNoLCBJdGFsaWFu LAorICAgICAgIFN3ZWRpc2gsIGV0Yywgb3IgU2hvcnQgS09JIHVzZWQgZm9yIEN5cmlsbGljLCBD LUtlcm1pdCdzIENPTk5FQ1QKKyAgICAgICBjb21tYW5kIGF1dG9tYXRpY2FsbHkgc2tpcHMgb3Zl ciBBTlNJIGVzY2FwZSBzZXF1ZW5jZXMgdG8gYXZvaWQKKyAgICAgICB0cmFuc2xhdGluZyB0aGVp ciBjaGFyYWN0ZXJzLiBPbmx5IEFOU0kvSVNPIHN0YW5kYXJkCisgICAgICAgKFZUMTAwLzIwMC8z MDAtbGlrZSkgNy1iaXQgZXNjYXBlIHNlcXVlbmNlIGZvcm1hdHMgYXJlIHN1cHBvcnRlZAorICAg ICAgIGZvciB0aGlzIHB1cnBvc2UsIG5vIHByb3ByaWV0YXJ5IHNjaGVtZXMgbGlrZSBILVAsIFRl bGV2aWRlbywKKyAgICAgICBUZWt0cm9uaXgsIGV0Yy4KKyAgICAgKiBJZiB5b3VyIHZlcnNpb24g b2YgQy1LZXJtaXQgaW5jbHVkZXMgU0VUIFRFUk1JTkFMIEFQQyBjb21tYW5kLCB0aGVuCisgICAg ICAgQy1LZXJtaXQncyBDT05ORUNUIGNvbW1hbmQgd2lsbCBoYW5kbGUgQVBDIGVzY2FwZSBzZXF1 ZW5jZXMgaWYKKyAgICAgICBURVJNSU5BTCBBUEMgaXMgbm90IHNldCB0byBPRkYgKHdoaWNoIGlz IHRoZSBkZWZhdWx0KS4KKworICAgWW91IGNhbiBtYWtlIEMtS2VybWl0IGZ1bGx5IHRyYW5zcGFy ZW50IGJ5IHN0YXJ0aW5nIGl0IHdpdGggdGhlIC0wCisgICAoZGFzaCB6ZXJvKSBjb21tYW5kLWxp bmUgb3B0aW9uLgorCisgICBJZiB5b3UgYXJlIHJ1bm5pbmcgQy1LZXJtaXQgdW5kZXIgYSBjb25z b2xlIGRyaXZlciwgb3IgaW4gYSB0ZXJtaW5hbAorICAgd2luZG93LCB0aGF0IGVtdWxhdGVzIHRo ZSBWVDEwMCwgYW5kIHVzZSBDLUtlcm1pdCB0byBsb2cgaW4gdG8gYSBWTVMKKyAgIHN5c3RlbSwg dGhlIGNvbnNvbGUgZHJpdmVyIG9yIHRlcm1pbmFsIHdpbmRvdyAobm90IEtlcm1pdCkgaXMgc3Vw cG9zZWQKKyAgIHRvIHJlcGx5IHRvIHRoZSAid2hhdCBhcmUgeW91PyIgcXVlcnkgKEVTQyBaKSBm cm9tIHRoZSBWQVguIElmIGl0CisgICBkb2Vzbid0LCBhbmQgeW91IGNhbid0IG1ha2UgaXQgZG8g c28sIHRoZW4geW91IGNhbiAoYSkgbGl2ZSB3aXRoIHRoZQorICAgInVua25vd24gdGVybWluYWwi IHByb2JsZW07IChiKSB0ZWxsIFZNUyB0byBTRVQgVEVSTUlOQUwvREVWSUNFPVZUMTAwOworICAg KGMpIHByb2dyYW0gYSBrZXkgdXNpbmcgU0VUIEtFWSB0byBzZW5kIHRoZSBhcHByb3ByaWF0ZSBz ZXF1ZW5jZSBhbmQKKyAgIHRoZW4gcHVuY2ggdGhlIGtleSBhdCB0aGUgcmlnaHQgdGltZTsgb3Ig KGQpIHVzZSB0aGUgVk1TTE9HSU4gbWFjcm8KKyAgIHRoYXQgaXMgZGVmaW5lZCBpbiBDS0VSTUlU LklOSSB0byBkbyB0aGlzIGZvciB5b3UgYXV0b21hdGljYWxseS4KKworICAgU0VUIFNFU1NJT04t TE9HIHsgVEVYVCwgQklOQVJZIH0sIHdoaWNoIGlzIGVmZmVjdGl2ZSBpbiBVTklYIGFuZCBBT1Mv VlMKKyAgIGJ1dCBub3Qgb3RoZXIgQy1LZXJtaXQgdmVyc2lvbnMsIHJlbW92ZXMgQ1IsIERFTCwg TlVMLCBYT04sIGFuZCBYT0ZGCisgICBjaGFyYWN0ZXJzIChVc2luZyBDLUtlcm1pdCBuZWdsZWN0 cyB0byBtZW50aW9uIHRoYXQgWE9OIGFuZCBYT0ZGIGFyZQorICAgcmVtb3ZlZCkuIFRoZSBURVhU LW1vZGUgc2V0dGluZyBpcyBpbmVmZmVjdGl2ZSBkdXJpbmcgU0NSSVBUIGNvbW1hbmQKKyAgIGV4 ZWN1dGlvbiwgYXMgd2VsbCBhcyBvbiBYLjI1IGNvbm5lY3Rpb25zLgorCis5LiBLRVkgTUFQUElO RworCisgICBbIFs3NF1Ub3AgXSBbIFs3NV1Db250ZW50cyBdIFsgWzc2XU5leHQgXSBbIFs3N11Q cmV2aW91cyBdCisKKyAgIEV4Y2VwdCBpbiB0aGUgdGVybWluYWwtZW11bGF0aW5nIHZlcnNpb25z LCBDLUtlcm1pdCdzIGtleSBtYXBwaW5nCisgICBmYWNpbGl0aWVzIGFyZSBsaW1pdGVkIHRvIG5v cm1hbCAiQVNDSUkiIGtleXMsIGFuZCBjYW5ub3QgYmUgdXNlZCB3aXRoCisgICBmdW5jdGlvbiBr ZXlzLCBhcnJvdyBrZXlzLCBhcmNhbmUga2V5IGNvbWJpbmF0aW9ucywgZXRjLiBTaW5jZSBDLUtl cm1pdAorICAgcnVucyBvbiBzdWNoIGEgd2lkZSB2YXJpZXR5IG9mIGhhcmR3YXJlIHBsYXRmb3Jt cyAoaW5jbHVkaW5nLCBmb3IKKyAgIGV4YW1wbGUsIG1vcmUgdGhhbiAzNjAgZGlmZmVyZW50IFVO SVggcGxhdGZvcm1zKSwgaXQgaXMgbm90IHBvc3NpYmxlCisgICBmb3IgQy1LZXJtaXQgdG8gc3Vw cG9ydCBldmVyeSBjb25jZWl2YWJsZSBrZXlib2FyZCB1bmRlciBldmVyeSByZWxlYXNlCisgICBv ZiBldmVyeSBVTklYIChvciBWTVMsIG9yIC4uLikgcHJvZHVjdCBvbiBldmVyeSBkaWZmZXJlbnQg a2luZCBvZgorICAgY29tcHV0ZXIgcG9zc2libHkgdW5kZXIgYWxsIG1hbm5lciBvZiBkaWZmZXJl bnQgY29uc29sZSBkcml2ZXJzLCBldmVuCisgICBpZiBpdCBoYWQgdGhlIG1lYW5zIHRvIGRvIHNv LgorCisgICBJbiB0ZWNobmljYWwgdGVybXMsIEMtS2VybWl0IHVzZXMgdGhlIHJlYWQoKSBmdW5j dGlvbiB0byByZWFkCisgICBrZXlzdHJva2VzLCBhbmQgcmVhZCgpIHJldHVybnMgYSBzaW5nbGUg Ynl0ZSAodmFsdWUgMCB0aHJvdWdoIDI1NSkuCisgICBDLUtlcm1pdCdzIFNFVCBLRVkgZnVuY3Rp b24gYXBwbGllcyB0byB0aGVzZSBzaW5nbGUtYnl0ZSBjb2Rlcy4KKyAgICJFeHRlbmRlZCBmdW5j dGlvbiIga2V5cywgc3VjaCBhcyBGLWtleXMsIGFycm93IGtleXMsIGV0YywgdXN1YWxseQorICAg cmV0dXJuIGVpdGhlciBhIDItYnl0ZSAic2NhbiBjb2RlIiBvciBlbHNlIGEgY2hhcmFjdGVyIHN0 cmluZyAoc3VjaCBhcworICAgYW4gZXNjYXBlIHNlcXVlbmNlIGxpa2UgIjxFU0M+IE8gcCIpLiBJ biBib3RoIGNhc2VzLCBDLUtlcm1pdCBoYXMgbm8KKyAgIHdheSB0byB0ZWxsIHRoZSBkaWZmZXJl bmNlIGJldHdlZW4gc3VjaCBtdWx0aWJ5dGUga2V5IHZhbHVlcywgYW5kIHRoZQorICAgY29ycmVz cG9uZGluZyBzZXJpZXMgb2Ygc2luZ2xlLWJ5dGUga2V5IHZhbHVlcy4gVGhpcyBjb3VsZCBvbmx5 IGJlIGRvbmUKKyAgIGJ5IGFjY2Vzc2luZyB0aGUga2V5Ym9hcmQgYXQgYSBtdWNoIGxvd2VyIGxl dmVsIGluIGEgaGlnaGx5CisgICBwbGF0Zm9ybS1kZXBlbmRlbnQgbWFubmVyLCBwcm9iYWJseSBy ZXF1aXJpbmcgdGVucyBvZiB0aG91c2FuZHMgb2YKKyAgIGxpbmVzIG9mIGNvZGUgdG8gc3VwcG9y dCBldmVuIGEgc2FtcGxpbmcgb2YgdGhlIG1vc3QgcG9wdWxhcgorICAgd29ya3N0YXRpb24gLyBP UyBjb21iaW5hdGlvbnMuCisKKyAgIEhvd2V2ZXIsIG1vc3Qgd29ya3N0YXRpb24gY29uc29sZSBk cml2ZXJzICh0ZXJtaW5hbCBlbXVsYXRpb24gd2luZG93cywKKyAgIGV0YykgaW5jbHVkZSB0aGVp ciBvd24ga2V5LW1hcHBpbmcgZmFjaWxpdHkuIEZvciBleGFtcGxlIGluIEFJWCwgdGhlCisgICBB SVh0ZXJtIHByb2dyYW0gKGluIHdob3NlIHdpbmRvdyB5b3Ugd291bGQgcnVuIEMtS2VybWl0KSBh bGxvd3MKKyAgIHJlYmluZGluZyBvZiB0aGUgRjEtRjEyIGtleXMgdG8gYXJiaXRyYXJ5IHN0cmlu Z3MuIFRoZSBzYW1lIGlzIHRydWUgb2YKKyAgIFh0ZXJtIGFuZCBERUN0ZXJtIHdpbmRvd3MsIGV0 Yy4gQ29uc3VsdCB0aGUgdGVjaG5pY2FsIGRvY3VtZW50YXRpb24gZm9yCisgICB5b3VyIHdvcmtz dGF0aW9uIG9yIGVtdWxhdG9yLiBTZWUgc2FtcGxlIFh0ZXJtIChYbW9kbWFwKSBtYXBwaW5ncyBp bgorICAgdGhlIFs3OF1Vbml4IEMtS2VybWl0IEhpbnRzIGFuZCBUaXBzIGRvY3VtZW50LgorCisg ICBUaGUgU0VUIEtFWSBjb21tYW5kIChleGNlcHQgaW4gS2VybWl0IDk1KSBkb2VzIG5vdCBhbGxv dyBhIGtleQorICAgZGVmaW5pdGlvbiB0byBiZSAob3IgY29udGFpbikgdGhlIE5VTCAoXDApIGNo YXJhY3Rlci4KKworMTAuIEZJTEUgVFJBTlNGRVIKKworICAgWyBbNzldVG9wIF0gWyBbODBdQ29u dGVudHMgXSBbIFs4MV1OZXh0IF0gWyBbODJdUHJldmlvdXMgXQorCisgICBDLUtlcm1pdCA3LjAg aXMgdGhlIGZpcnN0IHJlbGVhc2Ugb2YgQy1LZXJtaXQgdG8gdXNlIGZhc3QgKHJhdGhlciB0aGFu CisgICByb2J1c3QgYW5kIHRoZXJlZm9yZSBzbG93KSBwcm90b2NvbCBkZWZhdWx0czogbG9uZyBw YWNrZXRzLCBzbGlkaW5nCisgICB3aW5kb3dzLCBjb250cm9sLWNoYXJhY3RlciB1bnByZWZpeGlu ZywgYW5kIHN0cmVhbWluZyB3aGVyZSBwb3NzaWJsZS4KKyAgIFRoaXMgbWFrZXMgbW9zdCB0cmFu c2ZlcnMgKHBhcnRuZXIgd2lsbGluZykgZHJhbWF0aWNhbGx5IGZhc3RlciAib3V0IG9mCisgICB0 aGUgYm94IiBidXQgbWlnaHQgYnJlYWsgc29tZSBjb21iaW5hdGlvbnMgdGhhdCB3b3JrZWQgYmVm b3JlLiBJZgorICAgdHJhbnNmZXJzIHdpdGggQy1LZXJtaXQgNy4wIG9yIGxhdGVyIGZhaWwgd2hl cmUgdHJhbnNmZXJzIHdvcmtlZCB3aXRoCisgICBlYXJsaWVyIEMtS2VybWl0IHZlcnNpb25zLCB0 cnkgdGhlIGZvbGxvd2luZyAob25lIGF0IGEgdGltZSwgaW4gdGhpcworICAgb3JkZXIpOgorCisg ICAgMS4gU0VUIFBSRUZJWElORyBBTEw6IERpc2FibGVzIGNvbnRyb2wtY2hhcmFjdGVyIHVucHJl Zml4aW5nLgorICAgIDIuIFNFVCBTVFJFQU1JTkcgT0ZGOiBEaXNhYmxlcyBzdHJlYW1pbmcuCisg ICAgMy4gQ0FVVElPVVM6IFNlbGVjdHMgbWVkaXVtIGJ1dCBjYXV0aW91cyBwcm90b2NvbCBzZXR0 aW5ncy4KKyAgICA0LiBST0JVU1Q6IHRoaXMgY29tbWFuZCByZXZlcnRzIHRvIHRoZSBtb3N0IGNv bnNlcnZhdGl2ZSBwcm90b2NvbAorICAgICAgIHNldHRpbmdzLgorCisgICBFeGVjdXRpb24gb2Yg bXVsdGlwbGUgZmlsZSB0cmFuc2ZlcnMgYnkgQy1LZXJtaXQgZnJvbSBhIGNvbW1hbmQgZmlsZQor ICAgd2hlbiBpbiByZW1vdGUgbW9kZSBtaWdodCBleGhpYml0IGxvbmcgZGVsYXlzIGJldHdlZW4g ZWFjaCB0cmFuc2Zlci4gVG8KKyAgIGF2b2lkIHRoaXMsIGp1c3QgaW5jbHVkZSB0aGUgY29tbWFu ZCAiU0VUIERFTEFZIDAiIGluIHlvdXIgY29tbWFuZCBmaWxlCisgICBiZWZvcmUgYW55IG9mIHRo ZSBmaWxlLXRyYW5zZmVyIGNvbW1hbmRzLgorCisgICBGaWxlIHRyYW5zZmVyIGZhaWx1cmVzIGNh biBvY2N1ciBmb3IgYWxsIHNvcnRzIG9mIHJlYXNvbnMsIG1vc3Qgb2YgdGhlbQorICAgbGlzdGVk IGluIENoYXB0ZXIgMTAgb2YgWzgzXVVzaW5nIEMtS2VybWl0LiBUaGUgZm9sbG93aW5nIHNlY3Rp b25zCisgICB0b3VjaCBvbiBzb21lIHRoYXQgYXJlbid0LgorCisgICBUaGUgWzg0XUMtS2VybWl0 IDcuMCBSZWxlYXNlIE5vdGVzIGRvY3VtZW50IFNFTkQgL0NPTU1BTkQgYXMgdGFraW5nIGFuCisg ICBhcmd1bWVudCwgYnV0IGl0IGRvZXNuJ3QuIEluc3RlYWQgb2YgU0VORCAvQ09NTUFORDp7c29t ZSBjb21tYW5kfSwgdXNlOgorCitTRU5EIC9DT01NQU5EIFsgb3RoZXIgc3dpdGNoZXMgc3VjaCBh cyAvQVMtTkFNRTogXSBjb21tYW5kIFsgYXJndW1lbnRzLi4uIF0KKworMTAuMS4gTGFwdG9wcwor CisgICBXYXRjaCBvdXQgZm9yIGxhcHRvcHMgYW5kIHRoZWlyIGFzc29ydGVkIHBvd2VyLXNhdmVy IGZlYXR1cmVzOyBmb3IKKyAgIGV4YW1wbGUsIGEgYnVpbHQtaW4gbW9kZW0ncyAiYXV0byB0aW1l b3V0IGRlbGF5IiBoYW5naW5nIHVwIHRoZQorICAgY29ubmVjdGlvbiBpbiB0aGUgbWlkZGxlIG9m IGEgZmlsZSB0cmFuc2Zlci4gTW9zdCBtb2RlbXMsIGV2ZW4gaWYgdGhleQorICAgaGF2ZSB0aGlz IGZlYXR1cmUsIGRvIG5vdCBoYXZlIGl0IGVuYWJsZWQgYnkgZGVmYXVsdC4gQnV0IGlmIHlvdQor ICAgZXhwZXJpZW5jZSBvdGhlcndpc2UgaW5leHBsaWNhYmxlIGRpc2Nvbm5lY3Rpb25zIGluIHRo ZSBtaWRzdCBvZiB5b3VyCisgICBLZXJtaXQgc2Vzc2lvbnMsIGNoZWNrIHRoZSBtb2RlbSBtYW51 YWwgZm9yIHN1Y2ggdGhpbmdzIGFzICJpZGxlCisgICB0aW1lb3V0IiwgImF1dG8gdGltZW91dCIs IGV0YywgYW5kIGFkZCB0aGUgY29tbWFuZCB0byBkaXNhYmxlIHRoaXMKKyAgIGZlYXR1cmUgdG8g S2VybWl0J3MgaW5pdCBzdHJpbmcgZm9yIHRoaXMgbW9kZW0uCisKKzEwLjIuIE5GUworCisgICBJ ZiB1cGxvYWRpbmcgYSBsYXJnZSBmaWxlIHRvIGFuIE5GUy1tb3VudGVkIGRpc2sgZmFpbHMgKG9y IGlzIHBhaW5mdWxseQorICAgc2xvdyksIHRyeSB1cGxvYWRpbmcgaXQgdG8gYSBsb2NhbCBkaXNr IChlLmcuIC90bXAgb24gVW5peCkgYW5kIHRoZW4KKyAgIGNvcHlpbmcgdG8gdGhlIE5GUyBkaXNr IGxhdGVyLgorCisxMC4zLiBNb2RlbXMKKworICAgSWYgeW91IGFyZSBkaWFsaW5nIG91dCBhbmQg ZmluZCB0aGF0IGRvd25sb2FkcyB3b3JrIGJ1dCB1cGxvYWRzIGRvbid0LAorICAgdHJ5IGFnYWlu IHdpdGggYSBsb3dlciBzZXJpYWwtcG9ydCBzcGVlZC4gQ2FzZSBpbiBwb2ludDogZGlhbGluZyBv dXQgb24KKyAgIGEgY2VydGFpbiBQQyBmcm9tIExpbnV4IGF0IDExNTIwMCBicHMgdXNpbmcgYSBV U1IgQ291cmllciA1NksKKyAgICJWLkV2ZXJ5dGhpbmciIGV4dGVybmFsIG1vZGVtIGFuZCBSVFMv Q1RTIGZsb3cgY29udHJvbC4gRG93bmxvYWRzCisgICB3b3JrZWQgZmxhd2xlc3NseSwgdXBsb2Fk cyBzdG9wcGVkIGRlYWQgYWZ0ZXIgdGhlIGZpcnN0IGZldyBwYWNrZXRzCisgICB3ZXJlIHNlbnQu IFRoZSBtb2RlbSBsaWdodHMgc2hvd2VkIGNvbnN0YW50IHJldHJhaW5pbmcgKEFSUSBsaWdodAor ICAgYmxpbmtzIHNsb3dseSksIGFuZCB0aGUgQ1RTIGxpZ2h0IHdhcyBvZmYgOTUlIG9mIHRoZSB0 aW1lLCBhbGxvd2luZworICAgbm90aGluZyB0byBnZXQgdGhyb3VnaC4gUmVkdWNpbmcgdGhlIHNl cmlhbCBwb3J0IHNwZWVkIHRvIDU3NjAwIGJwcworICAgbWFkZSB0aGUgcHJvYmxlbXMgZ28gYXdh eS4gRXZpZGVudGx5IHRoZSBQQyBpbiBxdWVzdGlvbiBoYXMgYSB2ZXJ5IGZhc3QKKyAgIHNlcmlh bCBwb3J0LCBzaW5jZSBkaWFsaW5nIHRoZSBzYW1lIG1vZGVtIHdpdGggYSBkaWZmZXJlbnQgUEMg YXQgMTE1MjAwCisgICBicHMgd29ya3Mgd2l0aG91dCBpbmNpZGVudC4KKworMTAuNC4gVENQL0lQ IENvbm5lY3Rpb25zCisKKyAgIElmIHlvdSBoYXZlIHRyb3VibGUgdHJhbnNmZXJyaW5nIGZpbGVz IG92ZXIgYSBUQ1AvSVAgY29ubmVjdGlvbiwgdGVsbAorICAgS2VybWl0IHRvIFNFVCBQQVJJVFkg U1BBQ0UgYW5kIHRyeSBhZ2Fpbi4gSWYgdGhhdCBkb2Vzbid0IHdvcmssIGFsc28KKyAgIHRyeSBh IHNob3J0ZXIgcGFja2V0IGxlbmd0aCBvciBzbWFsbGVyIHdpbmRvdyBzaXplICh0byBjb21wZW5z YXRlIGZvcgorICAgY2VydGFpbiB3ZWxsLWtub3duIGJyb2tlbiBUZWxuZXQgc2VydmVycyksIGFu ZC9vciBTRVQgUkVMSUFCTEUgT0ZGLgorCisxMC41LiBNdWx0aWhvcCBDb25uZWN0aW9ucworCisg ICBJZiB5b3UgaGF2ZSBhIG11bHRpaG9wIGNvbm5lY3Rpb24sIHdpdGggdGhlIGludGVyaW9yIG5v ZGVzIGluIENPTk5FQ1QKKyAgIG1vZGUgKEtlcm1pdCwgVGVsbmV0LCBSbG9naW4sIG9yIGFueSBv dGhlciksIHlvdSBjYW4gZXhwZWN0IChhKSBmaWxlCisgICB0cmFuc2ZlciB0byBiZSBzbG93ZXIs IGFuZCAoYikgdGhlIGNvbm5lY3Rpb24gdG8gYmUgbGVzcyB0cmFuc3BhcmVudAorICAgKHRvIGNv bnRyb2wgY2hhcmFjdGVycywgcGVyaGFwcyB0byB0aGUgOHRoIGJpdCkgdGhhbiBhIG1vcmUgZGly ZWN0CisgICBjb25uZWN0aW9uLiBDLUtlcm1pdCA3LjAgYW5kIGxhdGVyIGhhdmUgYSAiLTAiIChk YXNoLXplcm8pIGNvbW1hbmQtbGluZQorICAgb3B0aW9uIHRvIG1ha2UgaXQgMTAwJSB0cmFuc3Bh cmVudCBpbiBjYXNlcyB3aGVyZSBpdCBpcyB0byBiZSB1c2VkIGluCisgICB0aGUgbWlkZGxlLgor CisxMC42LiBSZWNvdmVyeQorCisgICBUaGUgcmVjb3ZlcnkgZmVhdHVyZSAoUkVTRU5EIGNvbW1h bmQpIHRoYXQgd2FzIGFkZGVkIGluIHZlcnNpb24gNUEoMTkwKQorICAgd29ya3Mgb25seSBmb3Ig YmluYXJ5LW1vZGUgdHJhbnNmZXJzLiBJbiBvcmRlciBmb3IgdGhpcyBmZWF0dXJlIHRvIGJlCisg ICB1c2VmdWwgYXQgYWxsLCB0aGUgZGVmYXVsdCBmb3IgU0VUIEZJTEUgSU5DT01QTEVURSB3YXMg Y2hhbmdlZCBmcm9tCisgICBESVNDQVJEIHRvIEtFRVAuIE90aGVyd2lzZSBhbiBpbnRlcnJ1cHRl ZCB0cmFuc2ZlciB3b3VsZCBsZWF2ZSBubworICAgcGFydGlhbCBmaWxlIGJlaGluZCB1bmxlc3Mg eW91IGhhZCByZW1lbWJlcmVkIHRvIGNoYW5nZSB0aGUgZGVmYXVsdC4KKyAgIEJ1dCBub3cgeW91 IGhhdmUgdG8gcGF5IGNsb3NlciBhdHRlbnRpb24gdG8gS2VybWl0J3MgbWVzc2FnZXMgdG8ga25v dworICAgd2hldGhlciBhIHRyYW5zZmVyIHN1Y2NlZWRlZCBvciBmYWlsZWQgLS0gcHJldmlvdXNs eSwgaWYgaXQgZmFpbGVkLCB0aGUKKyAgIGZpbGUgd291bGQgbm90IHNob3cgdXAgb24gdGhlIHJl Y2VpdmluZyBlbmQgYXQgYWxsOyBpbiA1QSgxOTApIGFuZAorICAgbGF0ZXIsIHlvdSdsbCBnZXQg YSBwYXJ0aWFsIGZpbGUgd2hpY2ggY291bGQgZWFzaWx5IGJlIG1pc3Rha2VuIGZvciB0aGUKKyAg IGNvbXBsZXRlIGZpbGUgdW5sZXNzIHlvdSBjaGFuZ2UgdGhlIGRlZmF1bHQgYmFjayB0byBESVND QVJEIG9yIHJlYWQgdGhlCisgICBzY3JlZW4gbWVzc2FnZXMsIG9yIGtlZXAgYSB0cmFuc2FjdGlv biBsb2cuCisKKzEwLjcuIEZpbGVuYW1lIENvbGxpc2lvbnMKKworICAgU0VUIEZJTEUgQ09MTElT SU9OIEJBQ0tVUCBpcyB0aGUgZGVmYXVsdC4gVGhpcyBtZWFuczoKKworICAgICAqIElmIHlvdSBz ZW5kIHRoZSBzYW1lIGZpbGUgbG90cyBvZiB0aW1lcywgdGhlcmUgd2lsbCBiZSBtYW55IGJhY2t1 cAorICAgICAgIGZpbGVzLiBUaGVyZSBpcyBubyBhdXRvbWF0aWMgbWVjaGFuaXNtIHdpdGhpbiBL ZXJtaXQgdG8gZGVsZXRlCisgICAgICAgdGhlbSwgbm8gbm90aW9uIG9mIGEgInZlcnNpb24gcmV0 ZW50aW9uIGNvdW50IiwgZXRjLCBidXQgeW91IGNhbgorICAgICAgIHVzZSB0aGUgUFVSR0UgY29t bWFuZCB0byBjbGVhbiB0aGVtIHVwLgorICAgICAqIElmIGEgZmlsZSBhcnJpdmVzIHRoYXQgaGFz IHRoZSBzYW1lIG5hbWUgYXMgYSBkaXJlY3RvcnksIHRoZSBmaWxlCisgICAgICAgdHJhbnNmZXIg ZmFpbHMgYmVjYXVzZSBLZXJtaXQgd2lsbCBub3QgcmVuYW1lIGEgZGlyZWN0b3J5LiBTZW5kIHRo ZQorICAgICAgIGZpbGUgd2l0aCBhbm90aGVyIG5hbWUsIG9yIHVzZSBTRVQgRklMRSBDT0xMSVNJ T04gUkVOQU1FLgorICAgICAqIElmIHRoZSBkaXJlY3RvcnkgbGFja3Mgd3JpdGUgcGVybWlzc2lv biwgdGhlIGZpbGUgdHJhbnNmZXIgZmFpbHMKKyAgICAgICBldmVuIGlmIHlvdSBoYXZlIHdyaXRl IGFjY2VzcyB0byB0aGUgZmlsZSB0aGF0IGlzIGJlaW5nIGJhY2tlZCB1cDsKKyAgICAgICBpbiB0 aGF0IGNhc2UsIHN3aXRjaCB0byBTRVQgRklMRSBDT0xMSVNJT04gT1ZFUldSSVRFIG9yIEFQUEVO RCwgb3IKKyAgICAgICBzZW5kIHRvIGEgZGlmZmVyZW50IGRpcmVjdG9yeS4KKworICAgU0VUIEZJ TEUgQ09MTElTSU9OIFVQREFURSBkZXBlbmRzIG9uIHRoZSBkYXRlL3RpbWUgc3RhbXAgaW4gdGhl CisgICBhdHRyaWJ1dGUgcGFja2V0LiBIb3dldmVyLCB0aGlzIGlzIHJlY29yZGVkIGluIGxvY2Fs IHRpbWUsIG5vdAorICAgVW5pdmVyc2FsIFRpbWUgKEdNVCksIGFuZCB0aGVyZSBpcyBubyBpbmRp Y2F0aW9uIG9mIHRpbWUgem9uZS4gVGhlIHRpbWUKKyAgIGlzIGV4cHJlc3NlZCB0byB0aGUgcHJl Y2lzaW9uIG9mIDEgc2Vjb25kLCBidXQgc29tZSBmaWxlIHN5c3RlbXMgZG8gbm90CisgICByZWNv cmQgd2l0aCB0aGlzIHByZWNpc2lvbiAtLSBmb3IgZXhhbXBsZSwgTVMtRE9TIHJlY29yZHMgdGhl IGZpbGUKKyAgIGRhdGUvdGltZSBvbmx5IHRvIHRoZSBuZWFyZXN0IDIgc2Vjb25kcy4gVGhpcyBt aWdodCBjYXVzZSB1cGRhdGUKKyAgIG9wZXJhdGlvbnMgdG8gc2VuZCBtb3JlIGZpbGVzIHRoYW4g bmVjZXNzYXJ5LgorCisgICAoVGhpcyBwYXJhZ3JhcGggZG9lcyBOT1QgYXBwbHkgdG8gVU5JWCwg d2hlcmUsIGFzIG9mIEMtS2VybWl0IDcuMCwKKyAgIEMtS2VybWl0IHBpcGVzIGluY29taW5nIG1h aWwgYW5kIHByaW50IG1hdGVyaWFsIGRpcmVjdGx5IHRoZSBtYWlsIG9yCisgICBwcmludCBwcm9n cmFtKTogV2hlbiBDLUtlcm1pdCBpcyByZWNlaXZpbmcgZmlsZXMgZnJvbSBhbm90aGVyIEtlcm1p dAorICAgcHJvZ3JhbSB0aGF0IGhhcyBiZWVuIGdpdmVuIHRoZSBNQUlMIG9yIFJFTU9URSBQUklO VCBjb21tYW5kLCBDLUtlcm1pdAorICAgZm9sbG93cyB0aGUgY3VycmVudCBmaWxlbmFtZSBjb2xs aXNpb24gYWN0aW9uLiBUaGlzIGNhbiBiZQorICAgZGlzY29uY2VydGluZyBpZiB0aGUgYWN0aW9u IHdhcyAoZm9yIGV4YW1wbGUpIEJBQ0tVUCwgYmVjYXVzZSB0aGUKKyAgIGV4aXN0aW5nIGZpbGUg d2lsbCBiZSByZW5hbWVkLCBhbmQgdGhlIG5ldyBmaWxlIHdpbGwgYmUgbWFpbGVkIChvcgorICAg cHJpbnRlZCkgYW5kIHRoZW4gZGVsZXRlZC4gS2VybWl0IGNhbm5vdCB0ZW1wb3JhcmlseSBjaGFu Z2UgdG8gUkVOQU1FCisgICBiZWNhdXNlIHRoZSBmaWxlIGNvbGxpc2lvbiBhY3Rpb24gb2NjdXJz IHdoZW4gdGhlIGZpbGVuYW1lIHBhY2tldCBpcworICAgcmVjZWl2ZWQsIGFuZCB0aGUgUFJJTlQg b3IgTUFJTCBkaXNwb3NpdGlvbiBvbmx5IGNvbWVzIGxhdGVyLCBpbiB0aGUKKyAgIEF0dHJpYnV0 ZSBwYWNrZXQuCisKKyAgIFdhdGNoIG91dCBmb3IgU0VUIEZJTEUgQ09MTElTSU9OIFJFTkFNRSwg ZXNwZWNpYWxseSB3aGVuIHVzZWQgaW4KKyAgIGNvbmp1bmN0aW9uIHdpdGggcmVjb3ZlcnkuIFJl Y2FsbCB0aGF0IHRoaXMgb3B0aW9uICh3aGljaCBpcyBOT1QgdGhlCisgICBkZWZhdWx0KSByZW5h bWVzIHRoZSBpbmNvbWluZyBmaWxlIGlmIGEgZmlsZSBhbHJlYWR5IGV4aXN0cyB3aXRoIHRoZQor ICAgc2FtZSBuYW1lICh0aGUgZGVmYXVsdCBpcyB0byByZW5hbWUgdGhlIHByZXZpb3VzbHkgZXhp c3RpbmcgZmlsZSwgYW5kCisgICBzdG9yZSB0aGUgaW5jb21pbmcgZmlsZSB3aXRoIGl0cyBvd24g bmFtZSkuIEl0IGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkCisgICB0aGF0IHlvdSBkbyBub3QgdXNl IFNFVCBGSUxFIENPTExJU0lPTiBSRU5BTUUgaWYgeW91IGV2ZXIgaW50ZW5kIHRvIHVzZQorICAg dGhlIHJlY292ZXJ5IGZlYXR1cmU6CisKKyAgICAgKiBXaGVuIHRoZSBmaWxlIGlzIGZpcnN0IHJl Y2VpdmVkIGJ5IEMtS2VybWl0LCBpdHMgbmFtZSBpcyBjaGFuZ2VkIGlmCisgICAgICAgYW5vdGhl ciBmaWxlIGFscmVhZHkgaGFzIHRoZSBzYW1lIG5hbWUuIFdoZW4geW91IFJFU0VORCB0aGUgc2Ft ZQorICAgICAgIGZpbGUgYWZ0ZXIgYSBmYWlsdXJlLCBDLUtlcm1pdCB3aWxsIHByb2JhYmx5IHRy eSB0byBhcHBlbmQgdGhlCisgICAgICAgcmUtc2VudCBwb3J0aW9uIHRvIHRoZSB3cm9uZyBmaWxl LgorICAgICAqIEFzc3VtaW5nIHRoYXQgeW91IGdldCBSRVNFTkQgdG8gd29yayB3aXRoIEZJTEUg Q09MTElTSU9OIFJFTkFNRSwKKyAgICAgICBDLUtlcm1pdCwgd2hlbiByZWNlaXZpbmcgdGhlIHJl bWFpbmRlciBvZiB0aGUgZmlsZSBkdXJpbmcgYSBSRVNFTkQKKyAgICAgICBvcGVyYXRpb24sIHdp bGwgcmVwb3J0IGJhY2sgdGhlIHdyb25nIG5hbWUuIE5vdGhpbmcgY2FuIGJlIGRvbmUKKyAgICAg ICBhYm91dCB0aGlzIGJlY2F1c2UgdGhlIG5hbWUgaXMgcmVwb3J0ZWQgYmFjayBiZWZvcmUgdGhl IHJlY2VpdmluZworICAgICAgIEtlcm1pdCBwcm9ncmFtIGZpbmRzIG91dCB0aGF0IGl0IGlzIGEg cmVjb3Zlcnkgb3BlcmF0aW9uLgorCisgICBBbHNvIHdhdGNoIG91dCBmb3IgRElTQUJMRSBERUxF VEUsIHNpbmNlIHRoaXMgaW1wbGljaXRseSBzZXRzIEZJTEUKKyAgIENPTExJU0lPTiB0byBSRU5B TUUuIEFuZCBub3RlIHRodCBERUxFVEUgaXMgRElTQUJMRWQgYXV0b21hdGljYWxseSBhbnkKKyAg IHRpbWUgeW91IEtlcm1pdCBpcyBpbiBsb2NhbCBtb2RlIChpLmUuIGl0IG1ha2VzIGEgY29ubmVj dGlvbikuIEFsc28KKyAgIG5vdGUgdGhhdCBmb3IgcHVycG9zZXMgb2YgRElTQUJMRSBhbmQgRU5B QkxFLCAic2V0IGhvc3QgKiIgY29ubmVjdGlvbnMKKyAgIGRvIG5vdCBjb3VudCBhcyBsb2NhbCBt b2RlIGV2ZW4gdGhvdWdoLCBzdHJpY3RseSBzcGVha2luZywgdGhleSBhcmUuCisKKzEwLjguIERP UyBQYXRobmFtZXMKKworICAgV2hlbiByZWZlcnJpbmcgdG8gZm9yZWlnbiBNUy1ET1MsIFdpbmRv d3MsIEF0YXJpIFNULCBPUy8yLCBvciBvdGhlcgorICAgZmlsZSBzcGVjaWZpY2F0aW9ucyB0aGF0 IGNvbnRhaW4gYmFja3NsYXNoIGNoYXJhY3RlcnMgaW4gYSBDLUtlcm1pdAorICAgY29tbWFuZCwg eW91IG1pZ2h0IGhhdmUgdG8gZG91YmxlIGVhY2ggYmFja3NsYXNoLCBmb3IgZXhhbXBsZToKKwor ICBDLUtlcm1pdD5nZXQgYzpcXGRpcmVjdG9yeVxcZm9vLnR4dAorCisgICBUaGlzIGlzIGJlY2F1 c2UgYmFja3NsYXNoIGlzIHVzZWQgaW4gQy1LZXJtaXQgY29tbWFuZHMgZm9yIGludHJvZHVjaW5n CisgICBzcGVjaWFsIGNoYXJhY3RlciBjb2RlcywgdmFyaWFibGVzLCBmdW5jdGlvbnMsIGV0Yy4K KworMTAuOS4gQ2FuY2VsbGF0aW9uCisKKyAgIElmIGF0dGVtcHRpbmcgdG8gY2FuY2VsIGxvY2Fs LW1vZGUgZmlsZSByZWNlcHRpb24gYXQgYSB2ZXJ5IGVhcmx5IHN0YWdlCisgICAoaS5lLiBiZWZv cmUgZGF0YSBwYWNrZXRzIGFyZSBleGNoYW5nZWQpIHdpdGggWCBvciBaIGRvZXMgbm90IHdvcmss IHVzZQorICAgRSBvciBDdHJsLUMgaW5zdGVhZCwgb3Igd2FpdCB1bnRpbCB0aGUgZmlyc3QgZGF0 YSBwYWNrZXRzIGFyZSBzZW50LgorCisgICBJZiB5b3UgY2FuY2VsIGEgdHJhbnNmZXIgdGhhdCBp cyB1bmRlcndheSB1c2luZyBYIG9yIFosIGFuZCBhIGxvdCBvZgorICAgd2luZG93IHNsb3RzIGFy ZSBpbiB1c2UsIGl0IG1pZ2h0IHRha2UgYSB3aGlsZSBmb3IgdGhlIGNhbmNlbGxhdGlvbiB0bwor ICAgdGFrZSBlZmZlY3QsIGVzcGVjaWFsbHkgaWYgeW91IGRvIHRoaXMgb24gdGhlIHJlY2Vpdmlu ZyBlbmQ7IHRoYXQncworICAgYmVjYXVzZSBhIGxvdCBvZiBwYWNrZXRzIG1pZ2h0IGFscmVhZHkg YmUgb24gdGhlaXIgd2F5IHRvIHlvdS4gSW4gdGhhdAorICAgY2FzZSwganVzdCBiZSBwYXRpZW50 IGFuZCBsZXQgS2VybWl0ICJkcmFpbiIgdGhlbS4KKworICAgSWYgQy1LZXJtaXQgaXMgc2VuZGlu ZyBhIGZpbGUsIHJlbW90ZS1tb2RlIHBhY2tldC1tb2RlIGJyZWFrb3V0ICh0aHJlZQorICAgY29u c2VjdXRpdmUgQ3RybC1DJ3MgYnkgZGVmYXVsdCkgaXMgbm90IGVmZmVjdGl2ZSB1bnRpbCBhZnRl ciBDLUtlcm1pdAorICAgc2VuZHMgaXRzIGZpcnN0IHBhY2tldC4gSWYgQy1LZXJtaXQgaXMgcmVj ZWl2aW5nIGEgZmlsZSBvciBpcyBpbiBzZXJ2ZXIKKyAgIG1vZGUsIGl0IGlzIGVmZmVjdGl2ZSBy aWdodCBhd2F5LiBJbiB0aGUgZm9ybWVyIGNhc2UsIHRoZSBTRVQgREVMQVkKKyAgIHZhbHVlIGRl dGVybWluZXMgdGhlIGVhcmxpZXN0IHRpbWUgYXQgd2hpY2ggeW91IGNhbiBicmVhayBvdXQgb2Yg cGFja2V0CisgICBtb2RlLgorCisxMC4xMC4gUGFydG5lciBQZWN1bGlhcml0aWVzCisKKyAgIFdo ZW4gb25lIG9yIGJvdGggcGFydG5lcnMgaXMgb24gYW4gU0NPIG9wZXJhdGluZyBzeXN0ZW0gc3Vj aCBhcyBPU1I1LAorICAgeW91IG1pZ2h0IGlzc3VlIHRoZSBjb21tYW5kOgorCittYXBjaGFuIC1u CisKKyAgIHRvIGRpc2FibGUgY2hhcmFjdGVyLXNldCBjb252ZXJzaW9uIGJ5IHRoZSB0ZXJtaW5h bCBkcml2ZXIuIFNpbWlsYXJseQorICAgZm9yIEFJWDoKKworc2V0bWFwcyAtdCBOT01BUAorCisg ICBXaGVuIHVzaW5nIEMtS2VybWl0IHRvIHRyYW5zZmVyIGZpbGVzIHdpdGggdGhlIEhQNDhTWCBj YWxjdWxhdG9yLCB5b3UKKyAgIG11c3QgU0VUIEZMT1cgTk9ORS4gVGhlIEhQNDhTWCBkb2VzIG5v dCBzdXBwb3J0IGZsb3cgY29udHJvbCwgYW5kCisgICBldmlkZW50bHkgYWxzbyBiZWNvbWVzIGNv bmZ1c2VkIGlmIHlvdSBhdHRlbXB0IHRvIHVzZSBpdC4gWW91IG1pZ2h0CisgICBhbHNvIG5lZWQg dG8gdXNlIFNFVCBTRU5EIFBBVVNFIDEwMCAob3Igb3RoZXIgbnVtYmVyKS4gRm9yIGdyZWF0ZXIK KyAgIGRldGFpbCBhYm91dCB0cmFuc2ZlcnJpbmcgZmlsZXMgdGhlIEhQLTQ4LCBzZWU6CisKKyAg Wzg1XWh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ocDQ4Lmh0bWwKKworICAgU29tZSBj b21tdW5pY2F0aW9uIHByb2dyYW1zIGhhdmUgZXJyb3JzIGluIHRoZWlyIGltcGxlbWVudGF0aW9u IG9mCisgICBLZXJtaXQgYXR0cmlidXRlIHBhY2tldHMuIElmIHlvdSBnZXQgYW4gZXJyb3IgbWVz c2FnZSBmcm9tIHlvdXIKKyAgIGNvbW11bmljYXRpb24gcHJvZ3JhbSBsaWtlICJBdHRyaWJ1dGUg ZXJyb3IiLCB0ZWxsIEMtS2VybWl0IHRvIFNFVAorICAgQVRUUklCVVRFUyBPRkYuIEJldHRlciB5 ZXQsIHN3aXRjaCB0byBhIHJlYWwgS2VybWl0IHByb2dyYW0uCisKKyAgIFNvbWUgY29tbXVuaWNh dGlvbiBzb2Z0d2FyZSBjbGFpbXMgdG8gaW1wbGVtZW50IEtlcm1pdCBzbGlkaW5nIHdpbmRvd3Ms CisgICBidXQgZG9lcyBzbyBpbmNvcnJlY3RseS4gSWYgc2xpZGluZyB3aW5kb3cgdHJhbnNmZXJz IGZhaWwsIHNldAorICAgQy1LZXJtaXQncyB3aW5kb3cgc2l6ZSB0byB0aGUgc21hbGxlc3Qgb25l IHRoYXQgd29ya3MsIGZvciBleGFtcGxlLCBTRVQKKyAgIFdJTkRPVyAxLgorCisgICBGb3IgbG90 cyBtb3JlIGRldGFpbCBhYm91dCBob3cgdG8gY29wZSB3aXRoIGRlZmVjdGl2ZSBLZXJtaXQgcGFy dG5lcnMsCisgICBzZWU6CisKKyAgICAgKiBbODZdQ29waW5nIHdpdGggRmF1bHR5IEtlcm1pdCBJ bXBsZW1lbnRhdGlvbnMgKEMtS2VybWl0IDcuMCBhbmQKKyAgICAgICBsYXRlcikuCisgICAgICog Wzg3XUNvcGluZyB3aXRoIEJyb2tlbiBLZXJtaXQgUGFydG5lcnMgKEMtS2VybWl0IDguMCBhbmQg bGF0ZXIpLgorCisgICBUaGUgVU5JWCB2ZXJzaW9uIG9mIEMtS2VybWl0IGRpc2NhcmRzIGNhcnJp YWdlIHJldHVybnMgd2hlbiByZWNlaXZpbmcKKyAgIGZpbGVzIGluIHRleHQgbW9kZS4gVGh1cywg ImJhcmUiIGNhcnJpYWdlIHJldHVybnMgKHNvbWV0aW1lcyB1c2VkIHRvCisgICBhY2hpZXZlIG92 ZXJzdHJpa2luZykgYXJlIGxvc3QuCisKKzExLiBTQ1JJUFQgUFJPR1JBTU1JTkcKKworICAgWyBb ODhdVG9wIF0gWyBbODldQ29udGVudHMgXSBbIFs5MF1QcmV2aW91cyBdCisKKzExLjEuIENvbW1l bnRzIFZlcnN1cyB0aGUgU0NSSVBUIENvbW1hbmQKKworICAgUmVtZW1iZXIgdGhhdCAiOyIgYW5k ICIjIiBpbnRyb2R1Y2UgY29tbWVudHMgd2hlbiAoYSkgdGhleSBhcmUgdGhlCisgICBmaXJzdCBj aGFyYWN0ZXIgb24gdGhlIGxpbmUsIG9yIChiKSB0aGV5IGFyZSBwcmVjZWRlZCBieSBhdCBsZWFz dCBvbmUKKyAgIGJsYW5rIG9yIHRhYiB3aXRoaW4gYSBsaW5lLiBUaHVzIGNvbnN0cnVjdGlvbnMg bGlrZToKKworICBJTlBVVCA1IDsKKyAgU0NSSVBUIH4wICMtLSMtLSMKKworICAgbXVzdCBiZSBj b2RlZCB1c2luZyBiYWNrc2xhc2ggbm90YXRpb24gdG8ga2VlcCB0aGUgZGF0YSBmcm9tIGJlaW5n CisgICBpZ25vcmVkOgorCisgIElOUFVUIDUgXDU5ICAgICAgICAgICAgICAgICAgIDsgNTkgaXMg dGhlIGRlY2ltYWwgQVNDSUkgY29kZSBmb3IgIjsiCisgIFNDUklQVCB+MCBcMzUtLSMtLSMgICAg ICAgICAgIDsgNDMgaXMgdGhlIGRlY2ltYWwgQVNDSUkgY29kZSBmb3IgIiMiCisKKyAgIG9yLCBt b3JlIHNpbXBseToKKworICBJTlBVVCA1IFw7ICAgICAgICAgICAgICAgICAgICA7IEp1c3QgcXVv dGUgdGhlIHNlbWljb2xvbgorICBTQ1JJUFQgfjAgXCMtLSMtLSMgICAgICAgICAgICA7IEp1c3Qg cXVvdGUgdGhlICIjIgorCisxMS4yLiBBbHBoYWJldGljIENhc2UgYW5kIHRoZSBJTlBVVCBDb21t YW5kCisKKyAgIElOUFVUIGFuZCBNSU5QVVQgY2FzZWxlc3Mgc3RyaW5nIGNvbXBhcmlzb25zIGRv IG5vdCB3b3JrIGZvciBub24tQVNDSUkKKyAgIChpbnRlcm5hdGlvbmFsKSBjaGFyYWN0ZXJzLiBX b3JrYXJvdW5kOiBTRVQgSU5QVVQgQ0FTRSBPQlNFUlZFLiBFdmVuCisgICB0aGVuLCB0aGUgImxl eGljYWxseSBsZXNzIHRoYW4iIGFuZCAibGV4aWNhbGx5IGdyZWF0ZXIgdGhhbiIgb3BlcmF0aW9u cworICAgKElGIExMVCwgSUYgTEdUKSBwcm9iYWJseSB3b24ndCB3b3JrIGFzIGV4cGVjdGVkLiBU aGUgc2FtZSBpcyB0cnVlIGZvcgorICAgdGhlIGNhc2UtY29udmVyc2lvbiBmdW5jdGlvbnMgXEZs b3dlcigpIGFuZCBcRnVwcGVyKCkuIEMtS2VybWl0IGRvZXMKKyAgIG5vdCBrbm93IHRoZSBjb2xs YXRpbmcgc2VxdWVuY2UgZm9yIGRpZmZlcmVudCBjaGFyYWN0ZXIgc2V0cyBhbmQKKyAgIGxhbmd1 YWdlcy4gKE9uIHRoZSBvdGhlciBoYW5kLCBpdCBtaWdodCB3b3JrIGRlcGVuZGluZyBvbiBzdWNo IGl0ZW1zIGFzCisgICBob3cgS2VybWl0IHdhcyBsaW5rZWQsIHdoZXRoZXIgeW91ciBvcGVyYXRp bmcgc3VwcG9ydHMgImxvY2FsZXMiLCBldGMpCisKKzExLjMuIE5VTCAoMCkgQ2hhcmFjdGVycyBp biBDLUtlcm1pdCBDb21tYW5kcworCisgICBZb3UgY2FuJ3QgaW5jbHVkZSBhIE5VTCBjaGFyYWN0 ZXIgKFwwKSBpbiBDLUtlcm1pdCBjb21tYW5kIHRleHQgd2l0aG91dAorICAgdGVybWluYXRpbmcg dGhlIGNoYXJhY3RlciBzdHJpbmcgaW4gd2hpY2ggaXQgYXBwZWFycy4gRm9yIGV4YW1wbGU6CisK KyAgZWNobyBJbiB0aGVzZSBicmFja2V0cyBbXDBdIGlzIGEgTlVMCisKKyAgIHdpbGwgZWNobyAi SW4gdGhlc2UgYnJhY2tldHMgWyIuIFRoaXMgYXBwbGllcyB0byBFQ0hPLCBJTlBVVCwgT1VUUFVU LAorICAgYW5kIGFsbCBvdGhlciBjb21tYW5kcyAoYnV0IHlvdSBjYW4gcmVwcmVzZW50IE5VTCBi eSAiXE4iIGluIGFuIE9VVFBVVAorICAgc3RyaW5nKS4gVGhpcyBpcyBiZWNhdXNlIEMtbGFuZ3Vh Z2Ugc3RyaW5ncyBhcmUgdGVybWluYXRlZCBpbnRlcm5hbGx5CisgICBieSB0aGUgTlVMIGNoYXJh Y3RlciwgYW5kIGl0IGFsbG93cyBhbGwgb2YgQy1LZXJtaXQncyBzdHJpbmcgY29tcGFyaXNvbgor ICAgYW5kIG1hbmlwdWxhdGlvbiBmdW5jdGlvbnMgdG8gd29yayBpbiB0aGUgbm9ybWFsICJDIiB3 YXkuCisKKyAgIFRvIGlsbHVzdHJhdGU6CisKKyAgSU5QVVQgNSBcMAorCisgICBpcyBlcXVpdmFs ZW50IHRvOgorCisgIElOUFVUIDUKKworICAgYW5kOgorCisgIElOUFVUIDUgQUJDXDBERUYKKwor ICAgaXMgZXF1aXZhbGVudCB0bzoKKworICBJTlBVVCA1IEFCQworCisgICBJTlBVVCBvcGVyYXRp b25zIGRpc2NhcmQgYW5kIGlnbm9yZSBOVUwgY2hhcmFjdGVycyB0aGF0IGFycml2ZSBmcm9tIHRo ZQorICAgY29tbXVuaWNhdGlvbiBkZXZpY2UsIG1lYW5pbmcgdGhhdCB0aGV5IGRvIG5vdCBmaWd1 cmUgaW50byBtYXRjaGluZworICAgb3BlcmF0aW9ucyAoZS5nLiBBPE5VTD5CIG1hdGNoZXMgQUIp OyB0aGV5IGFyZSBub3QgZGVwb3NpdGVkIGluIHRoZQorICAgSU5QVVQgYnVmZmVyIChcdihpbnB1 dCkpOyBhbmQgdGhleSBhcmUgbm90IGNvdW50ZWQgaW4gXHYoaW5jb3VudCksIHdpdGgKKyAgIHR3 byBleGNlcHRpb25zOgorCisgICAgMS4gQW4gYXJyaXZpbmcgTlVMIGNoYXJhY3RlciByZXN0YXJ0 cyB0aGUgSU5QVVQgU0lMRU5DRSB0aW1lci4KKyAgICAyLiBBbiBhcnJpdmluZyBOVUwgY2hhcmFj dGVyIHRlcm1pbmF0ZXMgdGhlIElOUFVUIGNvbW1hbmQgd2l0aCB0aGUKKyAgICAgICBTVUNDRVNT IGNvbmRpdGlvbiBpZiB0aGUgSU5QVVQgY29tbWFuZCB3YXMgZ2l2ZW4gYW4gZW1wdHkgc2VhcmNo CisgICAgICAgc3RyaW5nLiBJbiB0aGlzIGNhc2UgXHYoaW5jb3VudCkgaXMgc2V0IHRvIDEuCisK KyAgIEFsc28sIHRoZSBcdihpbmNoYXIpIHZhcmlhYmxlIGlzIG51bGwgKGNvbXBsZXRlbHkgZW1w dHkpIGlmIHRoZSBsYXN0CisgICBJTlBVVCBjaGFyYWN0ZXIgd2FzIE5VTC4gVGhhdCBpcywgdGhl cmUgaXMgbm8gd2F5IHRvIHRlbGwgb25seSBieQorICAgbG9va2luZyBhdCBcdihpbmNoYXIpIHRo ZSBkaWZmZXJlbmNlIGJldHdlZW4gYSBOVUwgdGhhdCB3YXMgSU5QVVQgYW5kCisgICBubyBJTlBV VCBhdCBhbGwuIElmIHRoZSBJTlBVVCBjb21tYW5kIHN1Y2NlZWRlZCBidXQgXHYoaW5jaGFyKSBp cworICAgZW1wdHksIHRoZW4gYSBOVUwgY2hhcmFjdGVyIHdhcyBpbnB1dC4gQWxzbywgXHYoaW5j b3VudCkgd2lsbCBiZSBzZXQgdG8KKyAgIDEuCisKKyAgIEhlcmUncyBhIHNhbXBsZSBzY3JpcHQg ZnJhZ21lbnQgdG8gcmVhZCBjaGFyYWN0ZXJzLCBwb3NzaWJseSBpbmNsdWRpbmcKKyAgIE5VTCwg ZnJvbSB0aGUgY29tbXVuaWNhdGlvbiBjb25uZWN0aW9uIGFuZCB3cml0ZSB0aGVtIHRvIGEgZmls ZToKKworICB3aGlsZSB0cnVlIHsKKyAgICAgIGlucHV0IDEgICAgICAgICAgICAgICAgICAgICAg OyByZWFkIG9uZSBieXRlCisgICAgICBpZiBmYWlsIGJyZWFrICAgICAgICAgICAgICAgIDsgdGlt ZWQgb3V0IG9yIGNvbm5lY3Rpb24gY2xvc2VkCisgICAgICBmd3JpdGUgL2NoYXIgXCVjIFx2KGlu Y2hhcikgIDsgcmVjb3JkIHRoZSBieXRlCisgIH0KKworICAgVGhpcyB3b3JrcyBiZWNhdXNlIHdo ZW4gXHYoaW5jaGFyKSBpcyBOVUwsIHRoYXQncyBlcXVpdmFsZW50IHRvIEZXUklURQorICAgL0NI QVIgaGF2aW5nIG5vIHRleHQgYXJndW1lbnQgYXQgYWxsLCBpbiB3aGljaCBjYXNlIGl0IHdyaXRl cyBhIE5VTAorICAgY2hhcmFjdGVyLgorCisgICBcdihpbmNvdW50KSBhbmQgXHYoaW5jaGFyKSBh cmUgTk9UIGFmZmVjdGVkIGJ5IHRoZSBDTEVBUiBjb21tYW5kLgorCisxMS40LiBcZmZpbGVzKCkg YW5kIFxmbmV4dGZpbGUoKSBQZWN1bGlhcml0aWVzCisKKyAgIFRoZSBmb2xsb3dpbmcgc2NyaXB0 IHByb2dyYW06CisKKyAgZm9yIFwlaSAxIFxmZmlsZXMob29mYS4qKSAxIHsKKyAgICAgIHNlbmQg XGZuZXh0ZmlsZSgpCisgIH0KKworICAgZGlkIG5vdCB3b3JrIGFzIGV4cGVjdGVkIGluIEMtS2Vy bWl0IDYuMCBhbmQgZWFybGllciBidXQgZG9lcyB3b3JrIGluCisgICBDLUtlcm1pdCA3LjAgYW5k IGxhdGVyLgorCisxMS41LiBDb21tYW5kcyBUaGF0IEhhdmUgT25seSBMb2NhbCBFZmZlY3QKKwor ICAgQ2VydGFpbiBzZXR0aW5ncyBhcmUgbG9jYWwgdG8gZWFjaCBjb21tYW5kIGxldmVsLCBtZWFu aW5nIHRoYXQKKyAgIHN1Ym9yZGluYXRlIGNvbW1hbmQgbGV2ZWxzIChtYWNyb3Mgb3IgY29tbWFu ZCBmaWxlcykgY2FuIGNoYW5nZSB0aGVtCisgICB3aXRob3V0IGFmZmVjdGluZyB0aGVpciB2YWx1 ZXMgYXQgaGlnaGVyIGNvbW1hbmQgbGV2ZWxzLiBXaGVuIGEgbmV3CisgICBjb21tYW5kIGxldmVs IGlzIGludm9rZWQsIHRoZSB2YWx1ZSBpcyBpbmhlcml0ZWQgZnJvbSB0aGUgcHJldmlvdXMKKyAg IGxldmVsLiBUaGVzZSBzZXR0aW5ncyBhcmU6CisKKyAgQ0FTRQorICBDT1VOVCBhbmQgXHYoY291 bnQpCisgIElOUFVUIENBU0UKKyAgSU5QVVQgVElNRU9VVAorICBNQUNSTyBFUlJPUgorICBRVUlF VAorICBUQUtFIEVSUk9SCisKKyAgIFRoaXMgYXJyYW5nZW1lbnQgYWxsb3dzIENBU0UsIFRJTUVP VVQsIGFuZCBFUlJPUiBzZXR0aW5ncywgd2hpY2ggYXJlCisgICB1c2VkIHRvIGNvbnRyb2wgYXV0 b21hdGljIGV4aXQgZnJvbSBhIGNvbW1hbmQgZmlsZSBvciBtYWNybyB1cG9uIGVycm9yLAorICAg dG8gYmUgYXV0b21hdGljYWxseSByZXN0b3JlZCB3aGVuIHRoZSBjb21tYW5kIGZpbGUgb3IgbWFj cm8gZXhpdHMuCisKKyAgIFRoZSBDT1VOVCB2YXJpYWJsZSBmb2xsb3dzIHRoaXMgcnVsZSB0b28s IHdoaWNoIHBlcm1pdHMgbmVzdGVkIFNFVAorICAgQ09VTlQgLyBJRiBDT1VOVCBsb29wcywgYXMg aW4gdGhpcyBleGFtcGxlIGluIHdoaWNoIHRoZSBpbm5lciBsb29wCisgICBjb3VudHMgZG93biBm cm9tIHRoZSBjdXJyZW50IENPVU5UIHZhbHVlIG9mIHRoZSBvdXRlciBsb29wICh0cnkgaXQpOgor CisgIERFRklORSBJTk5FUiBXSElMRSBDT1VOVCB7IFdSSVRFIFNDUkVFTiB7ICAgSW5uZXI6fSwg U0hPVyBDT1VOVCB9CisgIFNFVCBDT1VOVCA1CisgIFdISUxFIENPVU5UIHsgV1JJVEUgU0NSRUVO IE91dGVyOiwgU0hPVyBDT1VOVCwgRE8gSU5ORVIgfQorCisgICBLZWVwIGluIG1pbmQgdGhhdCBh biBpbmZlcmlvciBjb21tYW5kIGxldmVsIGNhbm5vdCBtYW5pcHVsYXRlIHRoZSBDT1VOVAorICAg dmFsdWUgaGVsZCBieSBhIGhpZ2hlciBsZXZlbC4gRm9yIGV4YW1wbGU6CisKKyAgREVGSU5FIE9P RkEgU0hPVyBDT1VOVCwgSUYgQ09VTlQgR09UTyBMT09QCisgIFNFVCBDT1VOVCA1CisgIDpMT09Q CisgIE9PRkEKKyAgRUNITyBEb25lCisKKyAgIHJlc3VsdHMgaW4gYW4gaW5maW5pdGUgbG9vcDsg dGhlIENPVU5UIHZhbHVlIHJlbWFpbnMgYXQgNSBiZWNhdXNlIGl0IGlzCisgICBuZXZlciBkZWNy ZW1lbnRlZCBhdCB0aGUgc2FtZSBsZXZlbCBhdCB3aGljaCBpdCB3YXMgc2V0LgorCisxMS42LiBM aXRlcmFsIEJyYWNlcyBpbiBGdW5jdGlvbiBDYWxscworCisgICBTaW5jZSBicmFjZXMgYXJlIHVz ZWQgaW4gZnVuY3Rpb24gY2FsbHMgdG8gaW5kaWNhdGUgZ3JvdXBpbmcsIHRoZXJlIGlzCisgICBu byB3YXkgdG8gcGFzcyBsaXRlcmFsIGJyYWNlcyB0byB0aGUgZnVuY3Rpb24gaXRzZWxmLiBTb2x1 dGlvbjogRGVmaW5lCisgICBhIHZhcmlhYmxlIGNvbnRhaW5pbmcgdGhlIHN0cmluZyB0aGF0IGhh cyBicmFjZXMuIEV4YW1wbGU6CisKKyAgZGVmaW5lIFwlYSBhYntjZAorICBlY2hvIFxmc3Vic3Ry aW5nKFwlYSkKKyAgYWJ7Y2QKKworICAgSWYgdGhlIHN0cmluZyBpcyB0byBzdGFydCB3aXRoIGEg bGVhZGluZyBicmFjZSBhbmQgZW5kIHdpdGggYSBjbG9zaW5nCisgICBicmFjZSwgdGhlbiBkb3Vi bGUgYnJhY2VzIG11c3QgYXBwZWFyIGFyb3VuZCB0aGUgc3RyaW5nICh3aGljaCBpdHNlbGYKKyAg IGlzIGVuY2xvc2VkIGluIGJyYWNlcyk6CisKKyAgZGVmaW5lIFwlYSB7e3tmb299fX0KKyAgZWNo byBcZnN1YnN0cmluZyhcJWEpCisgIHtmb299CisKKyAgIFRoaXMgYWxzbyB3b3JrcyBmb3IgYW55 IG90aGVyIGtpbmQgb2Ygc3RyaW5nOgorCisgIGRlZmluZSBcJWEge3thYntjZH19CisgIGVjaG8g XGZzdWJzdHJpbmcoXCVhKQorICBhYntjZAorCisxMS43LiBEZWZpbmluZyBWYXJpYWJsZXMgb24g dGhlIEMtS2VybWl0IENvbW1hbmQgTGluZQorCisgICBUbyBkZWZpbmUgdmFyaWFibGVzIG9uIHRo ZSBDLUtlcm1pdCBjb21tYW5kIGxpbmUsIHVzZSB0aGUgLUMKKyAgIGNvbW1hbmQtbGluZSBvcHRp b24gd2l0aCBvbmUgb3IgbW9yZSBERUZJTkUgb3IgQVNTSUdOIGNvbW1hbmRzLiBOb3RlCisgICB0 aGF0IHRoZSBDLUtlcm1pdCBjb21tYW5kIGxpbmUgbXVzdCBjb3BlIHdpdGggdGhlIHF1b3Rpbmcg cnVsZXMgb2YgeW91cgorICAgc2hlbGwuIEV4YW1wbGVzOgorCisgIGtlcm1pdCAtQyAiZGVmaW5l IFxcJWEgZm9vLCBkZWZpbmUgcGhvbmVudW1iZXIgNzY1NDMyMSIKKworICAgSW4gdGhpcyBjYXNl IHdlIGZvbGxvdyBVTklYIHF1b3RpbmcgcnVsZXMgYnkgZG91YmxpbmcgdGhlIGJhY2tzbGFzaC4K KyAgIE9uY2UgQy1LZXJtaXQgc3RhcnRzLCB0aGUgXCVhIGFuZCBcbShwaG9uZW51bWJlcikgdmFy aWFibGVzIGFyZSBkZWZpbmVkCisgICBhcyBpbmRpY2F0ZWQgYW5kIGNhbiBiZSB1c2VkIGluIHRo ZSBub3JtYWwgd2F5LgorCisgICBJbiBET1Mgb3IgV2luZG93cyBvciBPUy8yIHRoZSBjb21tYW5k IHdvdWxkIGJlOgorCisgIGtlcm1pdCAtQyAiZGVmaW5lIFwlJWEgZm9vLCBkZWZpbmUgcGhvbmVu dW1iZXIgNzY1NDMyMSIKKworICAgSGVyZSB3ZSBuZWVkIHRvIGRvdWJsZSB0aGUgcGVyY2VudCBz aWduIHJhdGhlciB0aGFuIHRoZSBiYWNrc2xhc2gKKyAgIGJlY2F1c2Ugb2YgRE9TIHNoZWxsIHF1 b3RpbmcgcnVsZXMuCisKKzExLjguIFBlci1DaGFyYWN0ZXIgRWNobyBDaGVjayB3aXRoIHRoZSBP VVRQVVQgQ29tbWFuZAorCisgICBTb21ldGltZXMgdGhlIE9VVFBVVCBjb21tYW5kIG11c3QgYmUg dXNlZCB0byBzZW5kIGNvbW1hbmRzIG9yIGRhdGEgdG8gYQorICAgZGV2aWNlIGluICJlY2hvcGxl eCIgbW9kZSwgbWVhbmluZyB0aGF0IGNoYXJhY3RlcnMgbXVzdCBiZSBzZW50IG9uZSBhdAorICAg YSB0aW1lLCBhbmQgdGhlIG5leHQgY2hhcmFjdGVyIGNhbiBub3QgYmUgc2VudCB1bnRpbCB0aGUg ZWNobyBmcm9tIHRoZQorICAgcHJldmlvdXMgb25lIGhhcyBiZWVuIHJlY2VpdmVkLiBGb3IgZXhh bXBsZSwgYSBjZXJ0YWluIFBCWCBtaWdodCBoYXZlCisgICB0aGlzIGNoYXJhY3RlcmlzdGljLiBM ZXQncyBzYXkgYSBLZXJtaXQgc2NyaXB0IGlzIHVzZWQgdG8gcHJvZ3JhbSB0aGUKKyAgIFBCWC4g SWYgY2hhcmFjdGVycyBhcmUgc2VudCB0b28gZmFzdCwgdGhleSBjYW4gYmUgbG9zdC4gSXQgd291 bGQgc2VlbQorICAgdGhhdCB0aGUgY29tbWFuZDoKKworICBTRVQgT1VUUFVUIFBBQ0lORyBtaWxs aXNlY29uZHMKKworICAgY291bGQgYmUgdXNlZCB0byB0YWtlIGNhcmUgb2YgdGhpcywgYnV0IHRo ZSBwYWNpbmcgaW50ZXJ2YWwgaXMgY29uc3RhbnQKKyAgIGFuZCBtdXN0IGJlIHNldCBsYXJnZSBl bm91Z2ggdG8gYWxsb3cgZXZlbiB0aGUgc2xvd2VzdCBlY2hvIHRvIGZpbmlzaC4KKyAgIElmIHRo ZSBzY3JpcHQgaXMgbGFyZ2UgKGFuIGFjdHVhbCBleGFtcGxlIGlzIDE0LDAwMCBsaW5lcyBsb25n KSwgdGhpcworICAgY2FuIGNhdXNlIGl0IHRvIHRha2UgaG91cnMgbG9uZ2VyIHRoYW4gaXQgbmVl ZHMgdG8uCisKKyAgIEhlcmUgaXMgYSBtYWNybyB5b3UgY2FuIHVzZSB0byBPVVRQVVQgYSBzdHJp bmcgaW4gYW4gRWNob3BsZXgKKyAgIGVudmlyb25tZW50OgorCisgIGRlZmluZSBYT1VUUFVUIHsK KyAgICAgIGxvY2FsIFwlYyBcJWkKKyAgICAgIHNldCBvdXRwdXQgcGFjaW5nIDAKKyAgICAgIGZv ciBcJWkgMSBcZmxlbihcJSopIDEgeworICAgICAgICAgIGFzZyBcJWMgXGZzdWJzdHIoXCUqLFwl aSwxKQorICAgICAgICAgIG91dHB1dCBcJWMKKyAgICAgICAgICBpbnB1dCAyIFwlYworICAgICAg fQorICB9CisKKyAgIEMtS2VybWl0IDcuMCBvciBsYXRlciBpcyByZXF1aXJlZC4KKworICAgSXQg c2VuZHMgb25lIGNoYXJhY3RlciBhdCBhIHRpbWUgYW5kIHRoZW4gd2FpdHMgdXAgdG8gMiBzZWNv bmRzIGZvciB0aGUKKyAgIGNoYXJhY3RlciB0byBiZSBlY2hvZWQgYmFjaywgYnV0IGNvbnRpbnVl cyB0byB0aGUgbmV4dCBjaGFyYWN0ZXIgYXMKKyAgIHNvb24gYXMgdGhlIGVjaG8gYXBwZWFycywg c28gbm8gdGltZSBpcyB3YXN0ZWQuIFlvdSBjYW4gYWRkIGFuIElGIEZBSUwKKyAgIGNsYXVzZSBh ZnRlciB0aGUgSU5QVVQgaW4gY2FzZSB5b3Ugd2FudCB0byBkbyBzb21ldGhpbmcgc3BlY2lhbCBh Ym91dAorICAgZmFpbHVyZSB0byBkZXRlY3QgYW4gZWNobyB3aXRoaW4gdGhlIHRpbWVvdXQgcGVy aW9kLiBPYnZpb3VzbHkgeW91IGNhbgorICAgYWxzbyBjaGFuZ2UgdGhlIDItc2Vjb25kIGxpbWl0 LCBhbmQgYWRqdXN0IHRoZSBzY3JpcHQgaW4gYW55IG90aGVyCisgICBkZXNpcmVkIHdheS4KKwor MTEuOS4gU2NyaXB0ZWQgRmlsZSBUcmFuc2ZlcgorCisgICBTb21ldGltZXMgYSB1c2VyIGNvbXBs YWlucyB0aGF0IHdoZW4gc2hlIG1ha2VzIGEgY29ubmVjdGlvbiBieSBoYW5kLAorICAgbG9ncyBp biwgYW5kIHRyYW5zZmVycyBhIGZpbGUsIHRoZXJlIGFyZSBubyBwcm9ibGVtcywgYnV0IHdoZW4g c2hlCisgICBzY3JpcHRzIHRoZSB0aGUgZXhhY3Qgc2FtZSBzZXF1ZW5jZSwgdGhlIGZpbGUgdHJh bnNmZXIgYWx3YXlzIGZhaWxzCisgICBhZnRlciBhIGZldyBwYWNrZXRzLiBIZXJlJ3MgYSBzY2Vu YXJpbyB3aGVyZSB0aGlzIGNhbiBoYXBwZW46CisKKyAgICAxLiBVcG9uIGxvZ2dpbmcgaW4gdG8g dGhlIHJlbW90ZSBjb21wdXRlciwgaXQgc2VuZHMgYSAiV2hhdCBBcmUgWW91PyIKKyAgICAgICBl c2NhcGUgc2VxdWVuY2UuCisgICAgMi4gV2hlbiB5b3UgbG9nIGluIGludGVyYWN0aXZlbHksIHlv dXIgdGVybWluYWwgZW11bGF0b3Igc2VuZHMgdGhlCisgICAgICAgcmVzcG9uc2UuIFRoaXMgaXMg aW52aXNpYmxlIHRvIHlvdTsgeW91IGRvbid0IGtub3cgaXQncyBoYXBwZW5pbmcuCisgICAgMy4g V2hlbiB5b3Ugc2NyaXB0IHRoZSBsb2dpbiwgYW5kIGJlZ2luIGEgZmlsZSB0cmFuc2ZlciBpbW1l ZGlhdGVseQorICAgICAgIHVwb24gbG9nZ2luZyBpbiwgdGhlIGhvc3Qgc3RpbGwgc2VuZHMgdGhl ICJXaGF0IEFyZSBZb3U/IiBzZXF1ZW5jZS4KKyAgICAgICBLZXJtaXQncyBJTlBVVCBFQ0hPIHNl dHRpbmcgaXMgT04gYnkgZGVmYXVsdCwgc28gdGhlIGVzY2FwZQorICAgICAgIHNlcXVlbmNlIHBh c3NlcyB0aHJvdWdoIHRvIHRoZSB0ZXJtaW5hbCwgYW5kIHRoZSB0ZXJtaW5hbCBzZW5kcyBpdHMK KyAgICAgICByZXNwb25zZS4gQnV0IGJ5IHRoaXMgdGltZSBLZXJtaXQgaGFzIGFscmVhZHkgc3Rh cnRlZCB0aGUgZmlsZQorICAgICAgIHRyYW5zZmVyLgorICAgIDQuIEJ5IGRlZmF1bHQsIHRoZSBs b2NhbCBLZXJtaXQgcHJvZ3JhbSBleGFtaW5lcyB0aGUga2V5Ym9hcmQgZm9yCisgICAgICAgaW50 ZXJydXB0aW9uIGNoYXJhY3RlcnMgYmV0d2VlbiBldmVyeSBwYWNrZXQuIFRoZSAiV2hhdCBBcmUg WW91IgorICAgICAgIHJlc3BvbnNlIGlzIHNpdHRpbmcgaW4gdGhlIGtleWJvYXJkIGJ1ZmZlci4g RXZlbnR1YWxseSBLZXJtaXQgd2lsbAorICAgICAgIHJlYWQgYSBjaGFyYWN0ZXIgc3VjaCBhcyAi YyIgdGhhdCBpcyBhIHZhbGlkIGludGVycnVwdGlvbgorICAgICAgIGNoYXJhY3RlciwgYW5kIHRo ZSBmaWxlIHRyYW5zZmVyIHN0b3BzIHdpdGggIlVzZXIgY2FuY2VsZWQiLgorCisgICBUaGUgcmln aHQgd2F5IHRvIGhhbmRsZSB0aGlzIHNpdHVhdGlvbiBpcyB0byBoYXZlIHlvdXIgbG9vayBmb3Ig dGhlCisgICAiV2hhdCBBcmUgWW91PyIgc2VxdWVuY2UgYW5kIHNlbmQgdGhlIHJlc3BvbnNlIGl0 c2VsZiwgYXMgZGVzY3JpYmVkIGluCisgICBVc2luZyBDLUtlcm1pdCwgcHAuNDI5LTQzMS4gT3Ig eW91IGNhbiB3b3JrIGFyb3VuZCBpdCBieSB0ZWxsaW5nIHRoZQorICAgbG9jYWwgS2VybWl0IHRv ICJzZXQgaW5wdXQgZWNobyBvZmYiIGFuZC9vciAic2V0IHRyYW5zZmVyIGludGVycnVwdGlvbgor ICAgb2ZmIi4KKworMTEuMTAuIEhleGFkZWNpbWFsIGFyaXRobWV0aWMuLi4KKworICAgQy1LZXJt aXQgY2FuIGRvIGJvdGggaW50ZWdlciBhbmQgZmxvYXRpbmctcG9pbnQgYXJpdGhtZXRpYywgaW4g Ym90aAorICAgb3JkaW5hcnkgYWxnZWJyYWljIG5vdGF0aW9uIGFuZCBpbiBMaXNwIFMtRXhwcmVz c2lvbiBub3RhdGlvbi4gQWxsCisgICBhcml0aG1ldGljIG9wZXJhdG9ycyBhbmQgZnVuY3Rpb25z IG9wZXJhdGUgb25seSBvbiBkZWNpbWFsIG51bWJlcnMuIEl0CisgICBpcyBwb3NzaWJsZSwgaG93 ZXZlciwgdG8gd3JpdGUgc2NyaXB0cyB0aGF0IG9wZXJhdGUgb24gaGV4YWRlY2ltYWwKKyAgIG51 bWJlcnMuIFRoaXMgaXMgZG9uZSBieSBjb252ZXJ0aW5nIHRoZW0gdG8gZGVjaW1hbCBwcmlvciB0 byBhbnkKKyAgIGFyaXRobWV0aWMgb3BlcmF0aW9ucywgYW5kIHRoZW4gY29udmVydGluZyB0aGVt IGJhY2sgdG8gaGV4YWRlY2ltYWwgZm9yCisgICBkaXNwbGF5LiBFeGFtcGxlOgorCis7IEVWQUxV QVRFIGlzIGEgY29tbWFuZCB0aGF0IGV2YWx1YXRlcyBhbiBhcml0aG1ldGljIGV4cHJlc3Npb24u Cis7IFNlZSBIRUxQIEVWQUxVQVRFIGZvciBkZXRhaWxzLiAgVGhpcyBpcyBqdXN0IGZvciBkZW1v bnN0cmF0aW9uLgorOyBBcml0aG1ldGljIGV4cHJlc3Npb25zIGNhbiBiZSB1c2VkIGluIGFueSBj b250ZXh0IHdoZXJlIGEgbnVtYmVyCis7IGNhbiBiZSB1c2VkLiAgQWxzbywgdGhlIHNwZWNpYWwg bm90YXRpb246Cis7Cis7IC5cJWEgOjo9IGV4cHJlc3Npb24KKzsKKzsgZXZhbHVhdGlvbnMgdGhl IGV4cHJlc3Npb24gYW5kIGFzc2lnbnMgdGhlIHJlc3VsdCB0byB0aGUgdmFyaWFibGUuCis7Cisu XCVhIDo9IGZmZmUgICAgICAgICAgICAgICAgOyBTZXQgdmFyaWFibGUgdG8gaGV4IHZhbHVlCitz ZXQgZXZhbCBvbGQgICAgICAgICAgICAgICAgOyBTZWUgSEVMUCBFVkFMCitldmFsIFxmaGV4Mm4o XCVhKSAgICAgICAgICAgOyBTaG93IHZhbHVlIG9mIHZhcmlhYmxlCitldmFsIFxmaGV4Mm4oXCVh KSArIDEgICAgICAgOyBTaG93IHZhbHVlIG9mIGV4cHJlc3Npb24KK2V2YWwgXGZoZXgybihcJWEp ICsgMiAgICAgICA7IFNob3cgdmFsdWUgb2YgZXhwcmVzc2lvbgorLlwleCA6Oj0gXGZoZXgybihc JWEpICsgMSAgIDsgQXNzaWduIHZhbHVlIG9mIGV4cHJlc3Npb24gdG8gdmFyaWFibGUKK2VjaG8g XGZuMmhleChcJXgpICAgICAgICAgICA7IERpc3BsYXkgdmFyaWFibGUncyB2YWx1ZSBpbiBoZXgK Ky5cJXggOjo9IFxmaGV4Mm4oXCVhKSArIDIgICA6IERpdHRvCitlY2hvIFxmbjJoZXgoXCV4KQor LlwleCA6Oj0gXGZoZXgybihcJWEpIHwgXGZoZXgybihmZmZmKSAgOyBTaW1pbGFybHkgZm9yIGxv Z2ljYWwgT1IKK2VjaG8gXGZuMmhleChcJXgpCisuXCV4IDo6PSBcZmhleDJuKFwlYSkgJiBcZmhl eDJuKGZmZmYpICA7IGFuZCBsb2dpY2FsIEFORAorZWNobyBcZm4yaGV4KFwleCkKKworICAgQnkg dGhlIHdheSwgeW91IG1pZ2h0IGJlIHRlbXB0ZWQgdG8gdXNlIEtlcm1pdCdzIFx4bm4gbm90YXRp b24gdG8gcGx1ZworICAgaGV4IG51bWJlcnMgaW50byBhcml0aG1ldGljIGV4cHJlc3Npb25zIGJ1 dCB0aGlzIGRvZXNuJ3Qgd29yay4gVGhhdAorICAgbm90YXRpb24gaXMgc3RyaWN0bHkgZm9yIGJ5 dGVzIChoZXggcmVwcmVzZW50YXRpb24gb2YgY2hhcmFjdGVyCisgICB2YWx1ZXMpLCBub3QgZm9y IG51bWJlcnMuCisKKzExLjExLiBPdGhlci4uLgorCisgICBFc2NhcGUgc2VxdWVuY2VzIChvciBh bnkgc3RyaW5ncyB0aGF0IGNvbnRhaW4gY29udHJvbCBjaGFyYWN0ZXJzKSBjYW4ndAorICAgYmUg dXNlZCBhcyBsYWJlbHMsIEdPVE8gdGFyZ2V0cywgb3IgU1dJVENIIGNhc2VzLgorCisgICBbIFs5 MV1Ub3AgXSBbIFs5Ml1Db250ZW50cyBdIFsgWzkzXUMtS2VybWl0IEhvbWUgXSBbIFs5NF1DLUtl cm1pdCA4LjAKKyAgIE92ZXJ2aWV3IF0gWyBbOTVdS2VybWl0IEhvbWUgXQorICAgICBfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KKworICAgQy1LZXJtaXQgOC4wIFVuaXggSGludHMgYW5kIFRpcHMgLyBbOTZdVGhlIEtlcm1p dCBQcm9qZWN0IC8KKyAgIFs5N11rZXJtaXRAY29sdW1iaWEuZWR1IC8gMzAgSnVuZSAyMDExCisK K1JlZmVyZW5jZXMKKworICAgMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUvCisgICAyLiBtYWls dG86a2VybWl0QGNvbHVtYmlhLmVkdQorICAgMy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2luZGV4Lmh0bWwKKyAgIDQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9rOTUu aHRtbAorICAgNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAor ICAgNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nrc2NyaXB0cy5odG1sCisgICA3 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY3VycmVudC5odG1sCisgICA4LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvd2hhdHNuZXcuaHRtbAorICAgOS4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2ZhcS5odG1sCisgIDEwLiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvc3VwcG9ydC5odG1sCisgIDExLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tjYndyLmh0bWwKKyAgMTIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a3Vid3IuaHRtbAorICAxMy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2s5NS5odG1s CisgIDE0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCisgIDE1 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbAorICAxNi4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2J3ci5odG1sI3gwCisgIDE3LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjYndyLmh0bWwjeDEKKyAgMTguIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2Nid3IuaHRtbCN4MgorICAxOS4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrY2J3ci5odG1sI3gzCisgIDIwLiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tjYndyLmh0bWwjeDQKKyAgMjEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2Nid3IuaHRtbCN4NQorICAyMi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrY2J3ci5odG1sI3g2CisgIDIzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tjYndyLmh0bWwjeDcKKyAgMjQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Ni d3IuaHRtbCN4OAorICAyNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2J3ci5o dG1sI3g5CisgIDI2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjYndyLmh0bWwj eDEwCisgIDI3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjYndyLmh0bWwjeDEx CisgIDI4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjYndyLmh0bWwjdG9wCisg IDI5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjYndyLmh0bWwjY29udGVudHMK KyAgMzAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Nid3IuaHRtbCN4MgorICAz MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2J3ci5odG1sI3RvcAorICAzMi4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2J3ci5odG1sI2NvbnRlbnRzCisgIDMz LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjYndyLmh0bWwjeDIKKyAgMzQuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9jazYwbWFudWFsLmh0bWwKKyAgMzUuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Mi5odG1sCisgIDM2LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2s2MG1hbnVhbC5odG1sCisgIDM3LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDUKKyAgMzguIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbAorICAzOS4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gyLjIKKyAgNDAuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4OC43LjIKKyAgNDEuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4OQorICA0Mi4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrY2J3ci5odG1sI3RvcAorICA0My4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrY2J3ci5odG1sI2NvbnRlbnRzCisgIDQ0LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tjYndyLmh0bWwjeDMKKyAgNDUuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2Nid3IuaHRtbCN4MQorICA0Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrY2J3ci5odG1sI3RvcAorICA0Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrY2J3ci5odG1sI2NvbnRlbnRzCisgIDQ4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tjYndyLmh0bWwjeDQKKyAgNDkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2Nid3IuaHRtbCN4MgorICA1MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr Y2J3ci5odG1sI3RvcAorICA1MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2J3 ci5odG1sI2NvbnRlbnRzCisgIDUyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tj YndyLmh0bWwjeDUKKyAgNTMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Nid3Iu aHRtbCN4MworICA1NC4gZnRwOi8vZnRwLmlzaS5lZHUvaW4tbm90ZXMvcmZjMTEyMi50eHQKKyAg NTUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Nid3IuaHRtbCN0b3AKKyAgNTYu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Nid3IuaHRtbCNjb250ZW50cworICA1 Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2J3ci5odG1sI3g2CisgIDU4LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjYndyLmh0bWwjeDQKKyAgNTkuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Nid3IuaHRtbCN0b3AKKyAgNjAuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Nid3IuaHRtbCNjb250ZW50cworICA2MS4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2J3ci5odG1sI3g3CisgIDYyLiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjYndyLmh0bWwjeDUKKyAgNjMuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9jazYwbWFudWFsLmh0bWwKKyAgNjQuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2Nid3IuaHRtbCN4MTAKKyAgNjUuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2Nid3IuaHRtbCN0b3AKKyAgNjYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2Nid3IuaHRtbCNjb250ZW50cworICA2Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrY2J3ci5odG1sI3g4CisgIDY4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tjYndyLmh0bWwjeDYKKyAgNjkuIGZ0cDovL2Z0cC5pc2kuZWR1L2luLW5vdGVzL3Jm YzIyMTcudHh0CisgIDcwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjYndyLmh0 bWwjdG9wCisgIDcxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjYndyLmh0bWwj Y29udGVudHMKKyAgNzIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Nid3IuaHRt bCN4OQorICA3My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2J3ci5odG1sI3g3 CisgIDc0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjYndyLmh0bWwjdG9wCisg IDc1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjYndyLmh0bWwjY29udGVudHMK KyAgNzYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Nid3IuaHRtbCN4MTAKKyAg NzcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Nid3IuaHRtbCN4OAorICA3OC4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sCisgIDc5LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjYndyLmh0bWwjdG9wCisgIDgwLiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjYndyLmh0bWwjY29udGVudHMKKyAgODEuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Nid3IuaHRtbCN4MTEKKyAgODIuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2Nid3IuaHRtbCN4OQorICA4My4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrNjBtYW51YWwuaHRtbAorICA4NC4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaTcwLmh0bQorICA4NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2hwNDguaHRtbAorICA4Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQ3MC5odG1sI3g0LjIyCisgIDg3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tlcm1pdDgwLmh0bWwjeDE1CisgIDg4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tjYndyLmh0bWwjdG9wCisgIDg5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tj YndyLmh0bWwjY29udGVudHMKKyAgOTAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2Nid3IuaHRtbCN4MTAKKyAgOTEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Ni d3IuaHRtbCN0b3AKKyAgOTIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Nid3Iu aHRtbCNjb250ZW50cworICA5My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQuaHRtbAorICA5NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrODAuaHRtbAor ICA5NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0bWwKKyAgOTYuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5odG1sCisgIDk3LiBtYWlsdG86a2Vy bWl0QGNvbHVtYmlhLmVkdQoKZGlmZiAtLWdpdCBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2Vy bWl0LTkuMC4zMDIvY2tjY2ZnLnR4dCBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTku MC4zMDIvY2tjY2ZnLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTg1 YzNkCi0tLSAvZGV2L251bGwKKysrIGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4w LjMwMi9ja2NjZmcudHh0CkBAIC0wLDAgKzEsMTczOCBAQAorCisgICBbMV1UaGUgQ29sdW1iaWEg Q3Jvd24gVGhlIEtlcm1pdCBQcm9qZWN0IHwgQ29sdW1iaWEgVW5pdmVyc2l0eQorICAgNjEyIFdl c3QgMTE1dGggU3RyZWV0LCBOZXcgWW9yayBOWSAxMDAyNSBVU0EgbyBbMl1rZXJtaXRAY29sdW1i aWEuZWR1CisgICAuLi5zaW5jZSAxOTgxCisgICBbM11Ib21lIFs0XUtlcm1pdCA5NSBbNV1DLUtl cm1pdCBbNl1TY3JpcHRzIFs3XUN1cnJlbnQgWzhdTmV3IFs5XUZBUQorICAgWzEwXVN1cHBvcnQK KworQy1LZXJtaXQgQ29uZmlndXJhdGlvbiBPcHRpb25zCisKKyAgIEFzIG9mOiBDLUtlcm1pdCA5 LjAuMzAwLCAzMCBKdW5lIDIwMTEKKyAgIFRoaXMgcGFnZSBsYXN0IHVwZGF0ZWQ6IEZyaSBKdWwg MSAxNTo0ODoyMSAyMDExIChOZXcgWW9yayBVU0EgVGltZSkKKworICAgICBJRiBZT1UgQVJFIFJF QURJTkcgQSBQTEFJTi1URVhUIHZlcnNpb24gb2YgdGhpcyBkb2N1bWVudCwgbm90ZSB0aGF0Cisg ICAgIHRoaXMgZmlsZSBpcyBhIHBsYWluLXRleHQgZHVtcCBvZiBhIFdlYiBwYWdlLiBZb3UgY2Fu IHZpc2l0IHRoZQorICAgICBvcmlnaW5hbCAoYW5kIHBvc3NpYmx5IG1vcmUgdXAtdG8tZGF0ZSkg V2ViIHBhZ2UgaGVyZToKKworICBbMTFdaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr Y2NmZy5odG1sCisKKyAgIFsgWzEyXUMtS2VybWl0IEhvbWUgXSBbIFsxM11LZXJtaXQgSG9tZSBd CisKKyAgQ09OVEVOVFMKKworICAxLiBbMTRdRklMRSBUUkFOU0ZFUgorICAyLiBbMTVdU0VSSUFM IENPTU1VTklDQVRJT04gU1BFRURTCisgIDMuIFsxNl1GVUxMU0NSRUVOIEZJTEUgVFJBTlNGRVIg RElTUExBWQorICA0LiBbMTddQ0hBUkFDVEVSIFNFVFMKKyAgNS4gWzE4XUFQQyBFWEVDVVRJT04K KyAgNi4gWzE5XVBST0dSQU0gU0laRQorICA3LiBbMjBdTU9ERU0gRElBTElORworICA4LiBbMjFd TkVUV09SSyBTVVBQT1JUCisgIDkuIFsyMl1FWENFUFRJT04gSEFORExJTkcKKyAxMC4gWzIzXVNF Q1VSSVRZIEZFQVRVUkVTCisgMTEuIFsyNF1FTkFCTElORyBTRUxFQ1QoKQorIDEyLiBbMjVdSS9P IFJFRElSRUNUSU9OCisgMTMuIFsyNl1GTE9BVElORy1QT0lOVCBOVU1CRVJTLCBUSU1FUlMsIEFO RCBBUklUSE1FVElDCisgMTQuIFsyN11TUEVDSUFMIENPTkZJR1VSQVRJT05TCisgIEkuIFsyOF1T VU1NQVJZIE9GIENPTVBJTEUtVElNRSBPUFRJT05TCisKKyAgT1ZFUlZJRVcKKworICAgVGhpcyBk b2N1bWVudCBkZXNjcmliZXMgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBDLUtlcm1pdCAoNUEg YW5kCisgICBsYXRlcikuIFRoZSBtYWpvciB0b3BpY3MgY292ZXJlZCBpbmNsdWRlIHByb2dyYW0g c2l6ZSAoYW5kIGhvdyB0bworICAgcmVkdWNlIGl0KSwgaG93IHRvIGluY2x1ZGUgb3IgZXhjbHVk ZSBwYXJ0aWN1bGFyIGZlYXR1cmVzLCBub3RlcyBvbgorICAgc2VyaWFsLXBvcnQsIG1vZGVtLCBh bmQgbmV0d29yayBzdXBwb3J0LCBhbmQgYSBsaXN0IG9mIEMtS2VybWl0J3MKKyAgIGNvbXBpbGUt dGltZSBvcHRpb25zLgorCisgICBGb3IgZGV0YWlscyBhYm91dCB5b3VyIHBhcnRpY3VsYXIgb3Bl cmF0aW5nIHN5c3RlbSwgYWxzbyBzZWUgdGhlCisgICBzeXN0ZW0tc3BlY2lmaWMgaW5zdGFsbGF0 aW9uIGluc3RydWN0aW9ucyBmaWxlLCBzdWNoIGFzIHRoZQorICAgWzI5XUMtS2VybWl0IEluc3Rh bGxhdGlvbiBJbnN0cnVjdGlvbnMgZm9yIFVuaXguCisKKyAgIFsgWzMwXUMtS2VybWl0IEhvbWUg XSBbIFszMV1LZXJtaXQgSG9tZSBdCisKKyAgMS4gRklMRSBUUkFOU0ZFUgorCisgICBbIFszMl1U b3AgXSBbIFszM11Db250ZW50cyBdIFsgWzM0XU5leHQgXSBbIFszNV1QcmV2aW91cyBdCisKKyAg IFByaW9yIHRvIHZlcnNpb24gNy4wLCBDLUtlcm1pdCB3YXMgYWx3YXlzIGJ1aWx0IHdpdGggdGhl IG1vc3QKKyAgIGNvbnNlcnZhdGl2ZSBLZXJtaXQgZmlsZS10cmFuc2ZlciBwcm90b2NvbCBkZWZh dWx0cyBvbiBldmVyeSBwbGF0Zm9ybToKKyAgIG5vIGNvbnRyb2wtY2hhcmFjdGVyIHByZWZpeGlu ZywgOTQtYnl0ZSBwYWNrZXRzLCBhbmQgYSB3aW5kb3cgc2l6ZSBvZgorICAgMS4KKworICAgU3Rh cnRpbmcgaW4gdmVyc2lvbiA3LjAsIGZhc3Qgc2V0dGluZ3MgYXJlIHRoZSBkZWZhdWx0LiBUbyBv dmVycmlkZQorICAgdGhlc2UgYXQgY29tcGlsZSB0aW1lLCBpbmNsdWRlOgorCisgIC1ETk9GQVNU CisKKyAgIGluIHRoZSBDIGNvbXBpbGVyIENGTEFHUy4gRXZlbiB3aXRoIHRoZSBmYXN0IGRlZmF1 bHRzLCBDLUtlcm1pdAorICAgYXV0b21hdGljYWxseSBkcm9wcyBkb3duIHRvIHdoYXRldmVyIHdp bmRvdyBhbmQgcGFja2V0IHNpemVzIHJlcXVlc3RlZAorICAgYnkgdGhlIG90aGVyIEtlcm1pdCwg aWYgdGhlc2UgYXJlIHNtYWxsZXIsIHdoZW4gc2VuZGluZyBmaWxlcyAoZXhjZXB0CisgICBmb3Ig Y29udHJvbC1jaGFyYWN0ZXIgdW5wcmVmaXhpbmcsIHdoaWNoIGlzIG5vdCBuZWdvdGlhdGVkLCBh bmQgd2hpY2gKKyAgIGlzIG5vdyBzZXQgdG8gQ0FVVElPVVMgcmF0aGVyIHRoYW4gTk9ORSBhdCBz dGFydHVwKS4gQy1LZXJtaXQncworICAgc2V0dGluZ3MgcHJldmFpbCB3aGVuIGl0IGlzIHJlY2Vp dmluZy4KKworICAgWyBbMzZdQy1LZXJtaXQgSG9tZSBdIFsgWzM3XUtlcm1pdCBIb21lIF0KKwor ICAyLiBTRVJJQUwgQ09NTVVOSUNBVElPTiBTUEVFRFMKKworICAgWyBbMzhdVG9wIF0gWyBbMzld Q29udGVudHMgXSBbIFs0MF1OZXh0IF0gWyBbNDFdUHJldmlvdXMgXQorCisgICBBcyBvZiA2IFNl cHRlbWJlciAxOTk3LCBhIG5ldyBzaW1wbGlmaWVkIG1lY2hhbmlzbSBmb3Igb2J0YWluaW5nIHRo ZQorICAgbGlzdCBvZiBsZWdhbCBzZXJpYWwgaW50ZXJmYWNlIHNwZWVkcyBpcyBpbiBwbGFjZToK KworICAgICAqIElmIHRoZSBzeW1ib2wgVFRTUERMSVNUIGlzIGRlZmluZWQsIHRoZSBzeXN0ZW0t ZGVwZW5kZW50IHJvdXRpbmUKKyAgICAgICB0dHNwZGxpc3QoKSBpcyBjYWxsZWQgYXQgcHJvZ3Jh bSBpbml0aWFsaXphdGlvbiB0byBvYnRhaW4gdGhlIGxpc3QuCisgICAgICogVGhpcyBzeW1ib2wg c2hvdWxkIGJlIGRlZmluZWQgb25seSBmb3IgQy1LZXJtaXQgaW1wbGVtZW50YXRpb25zCisgICAg ICAgdGhhdCBoYXZlIGltcGxlbWVudGVkIHRoZSB0dHNwZGxpc3QoKSBmdW5jdGlvbiwgdHlwaWNh bGx5IGluIHRoZQorICAgICAgIGNrP3Rpby5jIG1vZHVsZS4gU2VlIFs0Ml1ja3V0aW8uYyBmb3Ig YW4gZXhhbXBsZS4KKyAgICAgKiBUVFNQRExJU1QgaXMgYXV0b21hdGljYWxseSBkZWZpbmVkIGlu IFs0M11ja2NkZWIuaCBmb3IgVU5JWC4gQWRkCisgICAgICAgdGhlIGFwcHJvcHJpYXRlICNpZmRl ZnMgZm9yIG90aGVyIHBsYXRmb3JtcyB3aGVuIHRoZSBjb3JyZXNwb25kaW5nCisgICAgICAgdHRz cGRsaXN0KCkgZnVuY3Rpb25zIGFyZSBmaWxsZWQgaW4uCisgICAgICogSWYgVFRTUERMSVNUIGlz IChvciBub3JtYWxseSB3b3VsZCBiZSkgZGVmaW5lZCwgdGhlIG9sZCBjb2RlCisgICAgICAgKGRl c2NyaWJlZCBiZWxvdykgY2FuIHN0aWxsIGJlIHNlbGVjdGVkIGJ5IGRlZmluaW5nIE5PVFRTUERM SVNULgorCisgICBUaGUgdHRzcGRsaXN0KCkgZnVuY3Rpb24gY2FuIG9idGFpbiB0aGUgc3BlZWRz IGluIGFueSB3YXkgdGhhdCB3b3Jrcy4KKyAgIEZvciBleGFtcGxlLCBiYXNlZCBzaW1wbHkgb24g I2lmZGVmIEJubm5uLi4jZW5kaWYgKGluIFVOSVgpLiBBbHRob3VnaAorICAgaXQgbWlnaHQgYmUg YmV0dGVyIHRvIGFjdHVhbGx5IGNoZWNrIGVhY2ggc3BlZWQgYWdhaW5zdCB0aGUgY3VycmVudGx5 CisgICBzZWxlY3RlZCBoYXJkd2FyZSBpbnRlcmZhY2UgYmVmb3JlIGFsbG93aW5nIGl0IGluIHRo ZSBhcnJheSwgdGhlcmUgaXMKKyAgIHVzdWFsbHkgbm8gcGFzc2l2ZSBhbmQvb3IgcmVsaWFibGUg YW5kIHNhZmUgd2F5IHRvIGRvIHRoaXMsIGFuZCBzbyBpdCdzCisgICBiZXR0ZXIgdG8gbGV0IHNv bWUgc3BlZWRzIGludG8gdGhlIGFycmF5IHRoYXQgbWlnaHQgbm90IHdvcmssIHRoYW4gaXQKKyAg IGlzIHRvIGVycm9uZW91c2x5IGV4Y2x1ZGUgb3RoZXJzLiBTcGVlZHMgdGhhdCBkb24ndCB3b3Jr IGFyZSBjYXVnaHQKKyAgIHdoZW4gdGhlIFNFVCBTUEVFRCBjb21tYW5kIGlzIGFjdHVhbGx5IGdp dmVuLgorCisgICBOb3RlIHRoYXQgdGhpcyBzY2hlbWUgZG9lcyBub3QgbmVjZXNzYXJpbHkgcnVs ZSBvdXQgc3BsaXQgc3BlZWQKKyAgIG9wZXJhdGlvbiwgYnV0IGVmZmVjdGl2ZWx5IGl0IGRvZXMg aW4gQy1LZXJtaXQgYXMgcHJlc2VudGx5IGNvbnN0aXR1dGVkCisgICBzaW5jZSB0aGVyZSBhcmUg bm8gY29tbWFuZHMgdG8gc2V0IGlucHV0IGFuZCBvdXRwdXQgc3BlZWQgc2VwYXJhdGVseQorICAg KGV4Y2VwdCB0aGUgc3BlY2lhbCBjYXNlICJzZXQgc3BlZWQgNzUvMTIwMCIpLgorCisgICBOb3Rl IHRoYXQgc29tZSBwbGF0Zm9ybXMsIG5vdGFibHkgQUlYIDQuMiBhbmQgNC4zLCBpbXBsZW1lbnQg aGlnaAorICAgc2VyaWFsIHNwZWVkcyB0cmFuc3BhcmVudGx5IHRvIHRoZSBhcHBsaWNhdGlvbiwg ZS5nLiBieSBtYXBwaW5nIDUwIGJwcworICAgdG8gNTc2MDAgYnBzLCBhbmQgc28gb24uCisKKyAg IFRoYXQncyB0aGUgd2hvbGUgZGVhbC4gV2hlbiBUVFNQRExJU1QgaXMgbm90IGRlZmluZWQsIHRo ZSBmb2xsb3dpbmcKKyAgIGFwcGxpZXM6CisKKyAgIFNwZWVkcyBhcmUgZGVmaW5lZCBpbiB0d28g cGxhY2VzOiB0aGUgU0VUIFNQRUVEIGtleXdvcmQgbGlzdCBpbiB0aGUKKyAgIGNvbW1hbmQgcGFy c2VyIChhcyBvZiB0aGlzIHdyaXRpbmcsIGluIHRoZSBbNDRdY2t1dXMzLmMgc291cmNlIGZpbGUp LAorICAgYW5kIGluIHRoZSBzeXN0ZW0tIGRlcGVuZGVudCBjb21tdW5pY2F0aW9ucyBpL28gbW9k dWxlLCBjaz90aW8uYywKKyAgIGZ1bmN0aW9ucyB0dHNzcGQoKSAoc2V0IHNwZWVkKSBhbmQgdHRn c3BkKCkgKGdldCBzcGVlZCkuIFRoZSBmb2xsb3dpbmcKKyAgIHNwZWVkcyBhcmUgYXNzdW1lZCB0 byBiZSBhdmFpbGFibGUgaW4gYWxsIHZlcnNpb25zOgorCisgIDAsIDExMCwgMzAwLCA2MDAsIDEy MDAsIDI0MDAsIDQ4MDAsIDk2MDAKKworICAgSWYgb25lIG9yIG1vcmUgb2YgdGhlc2Ugc3BlZWRz IGlzIG5vdCBzdXBwb3J0ZWQgYnkgeW91ciBzeXN0ZW0sIHlvdSdsbAorICAgbmVlZCB0byBjaGFu Z2UgdGhlIHNvdXJjZSBjb2RlICh0aGlzIGhhcyBuZXZlciBoYXBwZW5lZCBzbyBmYXIpLiBPdGhl cgorICAgc3BlZWRzIHRoYXQgYXJlIG5vdCBjb21tb24gdG8gYWxsIHN5c3RlbXMgaGF2ZSBLZXJt aXQtc3BlY2lmaWMgc3ltYm9sczoKKworICAgICAgICAgICAgICAgU3ltYm9sICAgICAgIFN5bWJv bAorICBTcGVlZCAoYnBzKSAgdG8gZW5hYmxlICAgIHRvIGRpc2FibGUKKyAgICAgICA1MCAgICAg ICBCUFNfNTAgICAgICAgTk9CXzUwCisgICAgICAgNzUgICAgICAgQlBTXzc1ICAgICAgIE5PQl83 NQorICAgICAgIDc1LzEyMDAgIEJQU183NTEyICAgICBOT0JfNzUxMgorICAgICAgMTM0LjUgICAg IEJQU18xMzQgICAgICBOT0JfMTM0CisgICAgICAxNTAgICAgICAgQlBTXzE1MCAgICAgIE5PQl8x NTAKKyAgICAgIDIwMCAgICAgICBCUFNfMjAwICAgICAgTk9CXzIwMAorICAgICAxODAwICAgICAg IEJQU18xODAwICAgICBOT0JfMTgwMAorICAgICAzNjAwICAgICAgIEJQU18zNjAwICAgICBOT0Jf MzYwMAorICAgICA3MjAwICAgICAgIEJQU183MjAwICAgICBOT0JfNzIwMAorICAgIDE0NDAwICAg ICAgIEJQU18xNEsgICAgICBOT0JfMTRLCisgICAgMTkyMDAgICAgICAgQlBTXzE5SyAgICAgIE5P Ql8xOUsKKyAgICAyODgwMCAgICAgICBCUFNfMjhLICAgICAgTk9CXzI4SworICAgIDM4NDAwICAg ICAgIEJQU18zOEsgICAgICBOT0JfMzhLCisgICAgNTc2MDAgICAgICAgQlBTXzU3SyAgICAgIE5P Ql81N0sKKyAgICA3NjgwMCAgICAgICBCUFNfNzZLICAgICAgTk9CXzc2SworICAgMTE1MjAwICAg ICAgIEJQU18xMTVLICAgICBOT0JfMTU1SworICAgMjMwNDAwICAgICAgIEJQU18yMzBLICAgICBO T0JfMjMwSworICAgNDYwODAwICAgICAgIEJQU180NjBLICAgICBOT0JfNDYwSworICAgOTIxNjAw ICAgICAgIEJQU185MjFLICAgICBOT0JfOTIxSworCisgICBUaGUgWzQ1XWNrY2RlYi5oIGhlYWRl ciBmaWxlIGNvbnRhaW5zIGRlZmF1bHQgc3BlZWQgY29uZmlndXJhdGlvbnMgZm9yCisgICB0aGUg bWFueSBzeXN0ZW1zIHRoYXQgQy1LZXJtaXQgc3VwcG9ydHMuIFlvdSBjYW4gb3ZlcnJpZGUgdGhl c2UKKyAgIGRlZmF1bHRzIGJ5IChhKSBlZGl0aW5nIGNrY2RlYi5oLCBvciAoYikgZGVmaW5pbmcg dGhlIGFwcHJvcHJpYXRlCisgICBlbmFibGluZyBhbmQvb3IgZGlzYWJsaW5nIHN5bWJvbHMgb24g dGhlIENDIGNvbW1hbmQgbGluZSwgZm9yIGV4YW1wbGU6CisKKyAgLURCUFNfMTQ0MDAgLUROT0Jf MTE1MjAwCisKKyAgIG9yIHRoZSAibWFrZSIgY29tbWFuZCBsaW5lLCBlLmcuOgorCisgIG1ha2Ug YmxhaCAiS0ZMQUdTPS1EQlBTXzE0NDAwIC1ETk9CXzExNTIwMCIKKworICAgTm90ZTogc29tZSBz cGVlZHMgaGF2ZSBubyBzeW1ib2xzIGRlZmluZWQgZm9yIHRoZW0sIGJlY2F1c2UgdGhleSBoYXZl CisgICBuZXZlciBiZWVuIG5lZWRlZDogMTIuNWJwcywgNDUuNWJwcywgMjAwMDBicHMsIGV0Yy4g VGhlc2UgY2FuIGVhc2lseSBiZQorICAgYWRkZWQgaWYgcmVxdWlyZWQgKGJ1dCB0aGV5IHdpbGwg d29yayBvbmx5IGlmIHRoZSBPUyBzdXBwb3J0cyB0aGVtKS4KKworICAgSU1QT1JUQU5UOiBBZGRp bmcgb25lIG9mIHRoZXNlIGZsYWdzIGF0IGNvbXBpbGUgdGltZSBkb2VzIG5vdAorICAgbmVjZXNz YXJpbHkgbWVhbiB0aGF0IHlvdSB3aWxsIGJlIGFibGUgdG8gdXNlIHRoYXQgc3BlZWQuIEEgcGFy dGljdWxhcgorICAgc3BlZWQgaXMgdXNhYmxlIG9ubHkgaWYgeW91ciB1bmRlcmx5aW5nIG9wZXJh dGluZyBzeXN0ZW0gc3VwcG9ydHMgaXQuCisgICBJbiBwYXJ0aWN1bGFyLCBpdCBuZWVkcyB0byBi ZSBkZWZpbmVkIGluIHRoZSBhcHByb3ByaWF0ZSBzeXN0ZW0gaGVhZGVyCisgICBmaWxlIChlLmcu IGluIFVOSVgsIGNkIHRvIC91c3IvaW5jbHVkZSBhbmQgZ3JlcCBmb3IgQjk2MDAgaW4gKi5oIGFu ZAorICAgc3lzLyouaCB0byBmaW5kIHRoZSBoZWFkZXIgZmlsZSB0aGF0IGNvbnRhaW5zIHRoZSBk ZWZpbml0aW9ucyBmb3IgdGhlCisgICBzdXBwb3J0ZWQgc3BlZWRzKSwgYW5kIHN1cHBvcnRlZCBi eSB0aGUgc2VyaWFsIGRldmljZSBkcml2ZXIsIGFuZCBvZgorICAgY291cnNlIGJ5IHRoZSBwaHlz aWNhbCBkZXZpY2UgaXRzZWxmLgorCisgICBBTFNPIElNUE9SVEFOVDogVGhlIGxpc3Qgb2YgYXZh aWxhYmxlIHNwZWVkcyBpcyBpbmRlcGVuZGVudCBvZiBob3cgdGhleQorICAgYXJlIHNldC4gVGhl IG1hbnkgVU5JWGVzLCBmb3IgZXhhbXBsZSwgb2ZmZXIgYSB3aWRlIHZhcmlldHkgb2YgQVBJcwor ICAgdGhhdCBhcmUgQlNELWJhc2VkLCBTWVNWLWJhc2VkLCBQT1NJWC1iYXNlZCwgYW5kIHB1cmVs eSBtYWRlIHVwLiBTZWUKKyAgIHRoZSB0dHNzcGQoKSwgdHRnc3BkKCksIGFuZCB0dHNwZGxpc3Qo KSByb3V0aW5lcyBpbiBbNDZdY2t1dGlvLmMgZm9yCisgICBpbGx1c3RyYXRpb25zLgorCisgICBU aGUgbGF0ZXN0IGVudHJpZXMgaW4gdGhpcyBob3JzZXJhY2UgYXJlIHRoZSB0Y2dldHNwZWVkKCkg YW5kCisgICB0dHNldHNwZWVkKCkgcm91dGluZXMgZm91bmQgaW4gVW5peFdhcmUgNy4gVW5saWtl IG90aGVyIG1ldGhvZHMsIHRoZXkKKyAgIGFjY2VwdCB0aGUgZW50aXJlIHJhbmdlIG9mIGludGVn ZXJzIChsb25ncyByZWFsbHkpIGFzIHNwZWVkIHZhbHVlcywKKyAgIHJhdGhlciB0aGFuIGNlcnRh aW4gY29kZXMsIGFuZCByZXR1cm4gYW4gZXJyb3IgaWYgdGhlIG51bWJlciBpcyBub3QsIGluCisg ICBmYWN0LCBhIGxlZ2FsIHNwZWVkIGZvciB0aGUgZGV2aWNlL2RyaXZlciBpbiBxdWVzdGlvbi4g SW4gdGhpcyBjYXNlLAorICAgdGhlcmUgaXMgbm8gd2F5IHRvIGJ1aWxkIGEgbGlzdCBvZiBsZWdh bCBzcGVlZHMgYXQgY29tcGlsZSB0aW1lLCBzaW5jZQorICAgbm8gQm5ubm4gc3ltYm9scyBhcmUg ZGVmaW5lZCAoZXhjZXB0IGZvciAiZGVwcmVjYXRlZCwgbGVnYWN5IgorICAgaW50ZXJmYWNlcyBs aWtlIGlvY3RsKCkpIGFuZCBzbyB0aGUgbGVnYWwgc3BlZWQgbGlzdCBtdXN0IGJlIGVudW1lcmF0 ZWQKKyAgIGluIHRoZSBjb2RlIC0tIHNlZSB0dHNwZGxpc3QoKSBpbiBbNDddY2t1dGlvLmMuCisK KyAgIFsgWzQ4XUMtS2VybWl0IEhvbWUgXSBbIFs0OV1LZXJtaXQgSG9tZSBdCisKKyAgMy4gRlVM TFNDUkVFTiBGSUxFIFRSQU5TRkVSIERJU1BMQVkKKworICAgWyBbNTBdVG9wIF0gWyBbNTFdQ29u dGVudHMgXSBbIFs1Ml1OZXh0IF0gWyBbNTNdUHJldmlvdXMgXQorCisgICBOZXcgdG8gZWRpdCAx ODAgaXMgc3VwcG9ydCBmb3IgYW4gTVMtRE9TLUtlcm1pdC1saWtlIGxvY2FsLW1vZGUgZnVsbAor ICAgc2NyZWVuIGZpbGUgdHJhbnNmZXIgZGlzcGxheSwgYWNjb21wbGlzaGVkIHVzaW5nIHRoZSBj dXJzZXMgbGlicmFyeSwgb3IKKyAgIHNvbWV0aGluZyBlcXVpdmFsZW50IChmb3IgZXhhbXBsZSwg dGhlIFNjcmVlbiBNYW5hZ2VyIG9uIERFQyBWTVMpLiBUbworICAgZW5hYmxlIHRoaXMgZmVhdHVy ZSwgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGluIHlvdXIgQ0ZMQUdTOgorCisgIC1EQ0tfQ1VSU0VT CisKKyAgIGFuZCB0aGVuIGNoYW5nZSB5b3VyIGJ1aWxkIHByb2NlZHVyZSAoaWYgbmVjZXNzYXJ5 KSB0byBpbmNsdWRlIHRoZQorICAgbmVjZXNzYXJ5IGxpYnJhcmllcy4gRm9yIGV4YW1wbGUsIGlu IFVuaXggdGhlc2UgYXJlIHVzdWFsbHkgImN1cnNlcyIgb3IKKyAgICJuY3Vyc2VzIiAoYW5kIG1v cmUgcmVjZW50bHksICJuY3Vyc2VzdyIgYW5kICJzbGFuZyIpLCBwZXJoYXBzIGFsc28KKyAgICJ0 ZXJtY2FwIiwgInRlcm1saWIiLCBvciAidGluZm8iOgorCisgICJMSUJTPSAtbGN1cnNlcyAtbHRl cm1jYXAiCisgICJMSUJTPSAtbGN1cnNlcyAtbHRlcm1saWIiCisgICJMSUJTPSAtbG5jdXJzZXMi CisgICJMSUJTPSAtbHRlcm1saWIiCisgICJMSUJTPSAtbHRpbmZvIgorCisgICAibWFuIGN1cnNl cyIgZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24sIGFuZCBzZWFyY2ggdGhyb3VnaCB0aGUgVW5peAor ICAgWzU0XW1ha2VmaWxlIGZvciAiQ0tfQ1VSU0VTIiB0byBzZWUgbWFueSBleGFtcGxlcywgYW5k IGFsc28gc2VlIHRoZQorICAgcmVsZXZhbnQgc2VjdGlvbnMgb2YgdGhlIFs1NV1Vbml4IEMtS2Vy bWl0IEluc3RhbGxhdGlvbiBJbnN0cnVjdGlvbnMsCisgICBwYXJ0aWN1bGFybHkgU2VjdGlvbnMg WzU2XTQgYW5kIFs1N105LjIuCisKKyAgIFRoZXJlIG1pZ2h0IHN0aWxsIGJlIGEgY29tcGxpY2F0 aW9uLiBTb21lIGltcGxlbWVudGF0aW9ucyBvZiBjdXJzZXMKKyAgIHJlc2VydmUgdGhlIHJpZ2h0 IHRvIGFsdGVyIHRoZSBidWZmZXJpbmcgb24gdGhlIG91dHB1dCBmaWxlIHdpdGhvdXQKKyAgIHJl c3RvcmluZyBpdCBhZnRlcndhcmRzLCB3aGljaCBjYW4gbGVhdmUgS2VybWl0J3MgY29tbWFuZCBw cm9jZXNzaW5nIGluCisgICBhIG1lc3Mgd2hlbiB0aGUgcHJvbXB0IGNvbWVzIGJhY2sgYWZ0ZXIg YSBmdWxsc2NyZWVuIGZpbGUgdHJhbnNmZXIKKyAgIGRpc3BsYXkuIFRoZSB0eXBpY2FsIHN5bXB0 b20gaXMgdGhhdCBjaGFyYWN0ZXJzIHlvdSB0eXBlIGF0IHRoZSBwcm9tcHQKKyAgIGFmdGVyIGEg bG9jYWwtbW9kZSBmaWxlIHRyYW5zZmVyIChpLmUuIGFmdGVyIHNlZWluZyB0aGUgY3Vyc2VzCisg ICBmaWxlLXRyYW5zZmVyIGRpc3BsYXkpIGRvIG5vdCBlY2hvIHVudGlsIHlvdSBwcmVzcyB0aGUg UmV0dXJuIChFbnRlcikKKyAgIGtleS4gSWYgdGhpcyBoYXBwZW5zIHRvIHlvdSwgdHJ5IGFkZGlu ZworCisgIC1EQ0tfTkVXVEVSTQorCisgICB0byB5b3VyIG1ha2VmaWxlIHRhcmdldCAoc2VlIGNv bW1lbnRzIGluIHNjcmVlbmMoKSBpbiBbNThdY2t1dXN4LmMgZm9yCisgICBhbiBleHBsYW5hdGlv bikuCisKKyAgIElmIHRoYXQgZG9lc24ndCBmaXggdGhlIHByb2JsZW0sIHRoZW4gdXNlIGEgYmln Z2VyIGhhbW1lciBhbmQgcmVwbGFjZQorICAgLURDS19ORVdURVJNIHdpdGg6CisKKyAgLUROT05P U0VUQlVGCisKKyAgIHdoaWNoIHRlbGxzIEtlcm1pdCB0byBmb3JjZSBzdGRvdXQgdG8gYmUgdW5i dWZmZXJlZCBzbyBDQlJFQUsgbW9kZSBjYW4KKyAgIHdvcmsuCisKKyAgIEluIFNDTyBYZW5peCBh bmQgU0NPIFVOSVgsIHRoZXJlIGFyZSB0d28gc2VwYXJhdGUgY3Vyc2VzIGxpYnJhcmllcywgb25l CisgICBiYXNlZCBvbiB0ZXJtY2FwIGFuZCB0aGUgb3RoZXIgYmFzZWQgb24gdGVybWluZm8uIFRo ZSBkZWZhdWx0IGxpYnJhcnksCisgICB1c3VhbGx5IHRlcm1pbmZvLCBpcyBlc3RhYmxpc2hlZCB3 aGVuIHRoZSBkZXZlbG9wbWVudCBzeXN0ZW0gaXMKKyAgIGluc3RhbGxlZC4gVG8gbWFudWFsbHkg c2VsZWN0IHRlcm1pbmZvIChhdCBjb21waWxlIHRpbWUpOgorCisgIGNvbXBpbGUgLURNX1RFUk1J TkZPIGFuZCBsaW5rIC1sdGluZm8KKworICAgYW5kIHRvIG1hbnVhbGx5IHNlbGVjdCB0ZXJtY2Fw OgorCisgIGNvbXBpbGUgLURNX1RFUk1DQVAgYW5kIGxpbmsgLWx0Y2FwIC1sdGVybWxpYgorCisg ICA8Y3Vyc2VzLmg+IGxvb2tzIGF0IE1fVEVSTUlORk8gYW5kIE1fVEVSTUNBUCB0byBkZWNpZGUg d2hpY2ggaGVhZGVyCisgICBmaWxlcyB0byB1c2UuIC91c3IvbGliL2xpYmN1cnNlcy5hIGlzIGEg bGluayB0byBlaXRoZXIgbGlidGluZm8uYSBvcgorICAgbGlidGNhcC5hLiBUaGUgQy1LZXJtaXQg Y29tcGlsYXRpb24gb3B0aW9ucyBtdXN0IGFncmVlIHdpdGggdGhlIHZlcnNpb24KKyAgIG9mIHRo ZSBjdXJzZXMgbGlicmFyeSB0aGF0IGlzIGFjdHVhbGx5IGluc3RhbGxlZC4KKworICAgTk9URTog SWYgeW91IGFyZSBkb2luZyBhbiBBTlNJLUMgY29tcGlsYXRpb24gYW5kIHlvdSBnZXQgY29tcGls ZSB0aW1lCisgICB3YXJuaW5ncyBsaWtlIHRoZSBmb2xsb3dpbmc6CisKKyAgV2FybmluZzogZnVu Y3Rpb24gbm90IGRlY2xhcmVkIGluIGNrdXVzeC5jOiB3bW92ZSwgcHJpbnR3LCB3Y2xydG9lb2ws CisgIHdjbGVhciwgd3JlZnJlc2gsIGVuZHdpbiwgZXRjLi4uCisKKyAgIGl0IG1lYW5zIHRoYXQg eW91ciA8Y3Vyc2VzLmg+IGZpbGUgZG9lcyBub3QgY29udGFpbiBwcm90b3R5cGVzIGZvcgorICAg dGhlc2UgZnVuY3Rpb25zLiBUaGUgd2FybmluZ3Mgc2hvdWxkIGJlIGhhcm1sZXNzLgorCisgICBO ZXcgdG8gZWRpdCAxOTAgaXMgdGhlIGFiaWxpdHkgdG8gcmVmcmVzaCBhIG1lc3NlZC11cCBmdWxs LXNjcmVlbgorICAgZGlzcGxheSwgZS5nLiBhZnRlciByZWNlaXZpbmcgYSBicm9hZGNhc3QgbWVz c2FnZS4gVGhpcyBkZXBlbmRzIG9uIHRoZQorICAgY3Vyc2VzIHBhY2thZ2UgaW5jbHVkaW5nIHRo ZSB3cmVmcmVzaCgpIGFuZCBjbGVhcm9rKCkgZnVuY3Rpb25zIGFuZCB0aGUKKyAgIGN1cnNjciB2 YXJpYWJsZS4gSWYgeW91ciB2ZXJzaW9uIGhhcyB0aGVzZSwgb3IgaGFzIGNvZGUgdG8gc2ltdWxh dGUKKyAgIHRoZW0sIHRoZW4gYWRkOgorCisgIC1EQ0tfV1JFRlJFU0gKKworICAgVGhlIGN1cnNl cyBhbmQgdGVybWNhcCBsaWJyYXJpZXMgYWRkIGNvbnNpZGVyYWJsZSBzaXplIHRvIHRoZSBwcm9n cmFtCisgICBpbWFnZSAoZS5nLiBhYm91dCAyMEsgb24gYSBTVU4tNCwgNDBLIG9uIGEgMzg2KS4g T24gc29tZSBzbWFsbCBzeXN0ZW1zLAorICAgc3VjaCBhcyB0aGUgQVQmVCA2MzAwIFBMVVMsIGN1 cnNlcyBjYW4gcHVzaCBLZXJtaXQgb3ZlciB0aGUgZWRnZS4uLgorICAgZXZlbiB0aG91Z2ggaXQg Y29tcGlsZXMsIGxvYWRzLCBhbmQgcnVucyBjb3JyZWN0bHksIGl0cyBpbmNyZWFzZWQgc2l6ZQor ICAgYXBwYXJlbnRseSBtYWtlcyBpdCBzd2FwIGNvbnN0YW50bHksIHNsb3dpbmcgaXQgZG93biB0 byBhIGNyYXdsLCBldmVuCisgICB3aGVuIHRoZSBjdXJzZXMgZGlzcGxheSBpcyBub3QgaW4gdXNl LiBTb21lIG5ldyBtYWtlZmlsZSB0YXJnZXRzIGhhdmUKKyAgIGJlZW4gYWRkZWQgdG8gdGFrZSBj YXJlIG9mIHRoaXMgKGUuZy4gc3lzM3VwY3NoY2MpLCBidXQgc2ltaWxhciB0cmlja3MKKyAgIG1p Z2h0IGJlIG5lY2Vzc2FyeSBpbiBvdGhlciBjYXNlcyB0b28uCisKKyAgIE9uIHRoZSBjdXJzZXMg ZmlsZS10cmFuc2ZlciBkaXNwbGF5LCBqdXN0IGJlbG93IHRoZSAidGhlcm1vbWV0ZXIiLCBpcyBh CisgICBydW5uaW5nIGRpc3BsYXkgb2YgdGhlIHRyYW5zZmVyIHJhdGUsIGFzIGEgZmxhdCBxdW90 aWVudCBvZiBmaWxlCisgICBjaGFyYWN0ZXJzIHBlciBlbGFwc2VkIHNlY29uZHMgc28gZmFyLiBZ b3UgY2FuIGNoYW5nZSB0aGlzIHRvIGFuCisgICBhdmVyYWdlIHRoYXQgZ2l2ZXMgZ3JlYXRlciB3 ZWlnaHQgdG8gcmVjZW50IGhpc3RvcnkgKDAuMjUgKgorICAgaW5zdGFudGFuZW91cyBjcHMgKyAw Ljc1ICogaGlzdG9yaWNhbCBjcHMpIGJ5IGFkZGluZyAtRENQU19XRUlHSFRFRCB0bworICAgeW91 ciBDRkxBR1MgKHNvcnJ5IGZvbGtzLCB0aGlzIG9uZSBpcyBub3Qgd29ydGggYSBTRVQgY29tbWFu ZCkuIFlvdSBjYW4KKyAgIGNob29zZSBhIHNlY29uZCB0eXBlIG9mIHdlaWdodGVkIGF2ZXJhZ2Ug aW4gd2hpY2ggdGhlIHdlaWdodGluZyBzbW9vdGhzCisgICBvdXQgcHJvZ3Jlc3NpdmVseSBhcyB0 aGUgdHJhbnNmZXIgcHJvZ3Jlc3NlcyBieSBhZGRpbmcgLURDUFNfVklOQ0UgdG8KKyAgIC1EQ1BT X1dFSUdIVEVELgorCisgICBBbiBhbHRlcm5hdGl2ZSB0byBjdXJzZXMgaXMgYWxzbyBhdmFpbGFi bGUgYXQgY29tcGlsZSB0aW1lLCBidXQgc2hvdWxkCisgICBiZSBzZWxlY3RlZCBpZiB5b3VyIHZl cnNpb24gb2YgS2VybWl0IGlzIHRvIGJlIHJ1biBpbiBsb2NhbCBtb2RlIG9ubHkKKyAgIGluIGFu IEFOU0kgdGVybWluYWwgZW52aXJvbm1lbnQsIGZvciBleGFtcGxlIG9uIGEgZGVza3RvcCB3b3Jr c3RhdGlvbgorICAgdGhhdCBoYXMgYW4gQU5TSSBjb25zb2xlIGRyaXZlci4gVG8gc2VsZWN0IHRo aXMgb3B0aW9uIGluIHBsYWNlIG9mCisgICBjdXJzZXMsIGRlZmluZSB0aGUgc3ltYm9sIE1ZQ1VS U0VTOgorCisgIC1ETVlDVVJTRVMKKworICAgaW5zdGVhZCBvZiBDS19DVVJTRVMuIFRoZSBNWUNV UlNFUyBvcHRpb24gdXNlcyBidWlsdC1pbiBBTlNJIChWVDEwMCkKKyAgIGVzY2FwZSBzZXF1ZW5j ZXMsIGFuZCBkZXBlbmRzIHVwb24geW91ciB0ZXJtaW5hbCBvciBjb25zb2xlIGRyaXZlciB0bwor ICAgaW50ZXJwcmV0IHRoZW0gY29ycmVjdGx5LgorCisgICBJbiBzb21lIEMtS2VybWl0IGJ1aWxk cywgd2UgcmVwbGFjZSBwcmludGYoKSB2aWEgI2RlZmluZSBwcmludGYuLi4KKyAgIEhvd2V2ZXIs IHRoaXMgY2FuIGNhdXNlIGNvbmZsaWN0cyB3aXRoIHRoZSBbbl1jdXJzZXMgaGVhZGVyIGZpbGVz LgorICAgVmFyaW91cyBoYWNrcyBhcmUgcmVxdWlyZWQgdG8gZ2V0IGFyb3VuZCB0aGlzIC0tIHNl ZSBbNTldY2t1dGlvLmMsCisgICBbNjBdY2t1ZmlvLmMsIFs2MV1ja3V1c3guYywgWzYyXWNrdWNt ZC5jLCBldGMuCisKKyAgIFsgWzYzXUMtS2VybWl0IEhvbWUgXSBbIFs2NF1LZXJtaXQgSG9tZSBd CisKKyAgNC4gQ0hBUkFDVEVSIFNFVFMKKworICAgWyBbNjVdVG9wIF0gWyBbNjZdQ29udGVudHMg XSBbIFs2N11OZXh0IF0gWyBbNjhdUHJldmlvdXMgXQorCisgICBTaW5jZSB2ZXJzaW9uIDVBLCBD LUtlcm1pdCBoYXMgaW5jbHVkZWQgc3VwcG9ydCBmb3IgY29udmVyc2lvbiBvZgorICAgY2hhcmFj dGVyIHNldHMgZm9yIFdlc3Rlcm4gRXVyb3BlYW4gbGFuZ3VhZ2VzIChpLmUuIGxhbmd1YWdlcyB0 aGF0CisgICBvcmlnaW5hdGVkIGluIFdlc3Rlcm4gRXVyb3BlLCBidXQgYXJlIG5vdyBhbHNvIHNw b2tlbiBpbiB0aGUgV2VzdGVybgorICAgSGVtaXNwaGVyZSBhbmQgb3RoZXIgcGFydHMgb2YgdGhl IHdvcmxkKSwgdmlhIElTTyA4ODU5LTEgTGF0aW4gQWxwaGFiZXQKKyAgIDEsIGZvciBFYXN0ZXJu IEV1cm9wZWFuIGxhbmd1YWdlcyAoSVNPIExhdGluLTIpLCBIZWJyZXcgKGFuZCBZaWRkaXNoKSwK KyAgIEdyZWVrLCBhbmQgQ3lyaWxsaWMtYWxwaGFiZXQgbGFuZ3VhZ2VzIChJU08gTGF0aW4vQ3ly aWxsaWMpLiBNYW55IGZpbGUKKyAgIChsb2NhbCkgY2hhcmFjdGVyIHNldHMgYXJlIHN1cHBvcnRl ZDogSVNPIDY0NiA3LWJpdCBuYXRpb25hbCBzZXRzLCBJQk0KKyAgIGNvZGUgcGFnZXMsIEFwcGxl LCBERUMsIERHLCBOZVhULCBldGMuCisKKyAgIFRvIGJ1aWxkIEtlcm1pdCB3aXRoIG5vIGNoYXJh Y3Rlci1zZXQgdHJhbnNsYXRpb24gYXQgYWxsLCBpbmNsdWRlCisgICAtRE5PQ1NFVFMgaW4gdGhl IENGTEFHUy4gVG8gYnVpbGQgd2l0aCBubyBMYXRpbi0yLCBhZGQgLUROT0xBVElOMi4gVG8KKyAg IGJ1aWxkIHdpdGggbm8gQ3lyaWxsaWMsIGFkZCAtRE5PQ1lSSUwuIFRvIG9taXQgSGVicmV3LCBh ZGQgLUROT0hFQlJFVy4KKyAgIElmIC1ETk9DU0VUUyBpcyAqbm90KiBpbmNsdWRlZCwgeW91J2xs IGFsd2F5cyBnZXQgTEFUSU4xLiBUbyBidWlsZCB3aXRoCisgICBubyBLQU5KSSBpbmNsdWRlIC1E Tk9LQU5KSS4gVGhlcmUgaXMgcHJlc2VudGx5IG5vIHdheSB0byBpbmNsdWRlCisgICBMYXRpbi0y LCBDeXJpbGxpYywgSGVicmV3LCBvciBLYW5qaSB3aXRob3V0IGFsc28gaW5jbHVkaW5nIExhdGlu LTEuCisKKyAgIFs2OV1Vbmljb2RlIHN1cHBvcnQgd2FzIGFkZGVkIGluIEMtS2VybWl0IDcuMCwg YW5kIGl0IGFkZHMgYSBmYWlyCisgICBhbW91bnQgb2YgdGFibGVzIGFuZCBjb2RlIChhbmQgdGhp cyBpcyBvbmx5IGEgIkxldmVsIDEiIGltcGxlbWVudGF0aW9uCisgICAtLSBhIGhpZ2hlciBsZXZl bCB3b3VsZCBhbHNvIHJlcXVpcmUgYnVpbGRpbmcgaW4gdGhlIGVudGlyZSBVbmljb2RlCisgICBk YXRhYmFzZSkuIE9uIGEgUEMgd2l0aCBSSCA1LjIgTGludXgsIGJ1aWxkaW5nIEMtS2VybWl0IDcu MCwgd2UgZ2V0IHRoZQorICAgZm9sbG93aW5nIHNpemVzOgorCisgIE5PQ1NFVFMgTk9VTklDT0RF IE5PS0FOSkkgICBCZWZvcmUgICAgQWZ0ZXIKKyAgIFsgICBdICAgIFsgICBdICAgIFsgICBdICAg IDEzMjkwMTQgICAoRnVsbCkKKyAgIFsgICBdICAgIFsgICBdICAgIFsgWCBdICAgIDEzMjU2ODYg ICAoVW5pY29kZSBidXQgbm8gS2FuamkpCisgICBbICAgXSAgICBbIFggXSAgICBbICAgXSAgICAx MTU4ODM3ICAgKEFsbCBjaGFyc2V0cyBleGNlcHQgVW5pY29kZSkKKyAgIFsgWCBdICAgIFsgeCBd ICAgIFsgeCBdICAgIDEwOTA4NDUgICAoTk9DU0VUUyBpbXBsaWVzIHRoZSBvdGhlciB0d28pCisK KyAgIE5vdGUsIGJ5IHRoZSB3YXksIHRoYXQgTk9LQU5KSSB3aXRob3V0IE5PVU5JQ09ERSBvbmx5 IHJlbW92ZXMgdGhlCisgICBub24tVW5pY29kZSBLYW5qaSBzZXRzIChTaGlmdC1KSVMsIEVVQy1K UCwgSklTLTcsIGV0YykuIEthbmppIGlzIHN0aWxsCisgICByZXByZXNlbnRhYmxlIGluIFVDUy0y IGFuZCBVVEYtOC4KKworICAgWyBbNzBdQy1LZXJtaXQgSG9tZSBdIFsgWzcxXUtlcm1pdCBIb21l IF0KKworICA1LiBBUEMgRVhFQ1VUSU9OCisKKyAgIFsgWzcyXVRvcCBdIFsgWzczXUNvbnRlbnRz IF0gWyBbNzRdTmV4dCBdIFsgWzc1XVByZXZpb3VzIF0KKworICAgVGhlIEtlcm1pdCBDT05ORUNU IGFuZCBJTlBVVCBjb21tYW5kcyBhcmUgY29kZWQgdG8gZXhlY3V0ZSBBcHBsaWNhdGlvbgorICAg UHJvZ3JhbSBDb21tYW5kIGVzY2FwZSBzZXF1ZW5jZXMgZnJvbSB0aGUgaG9zdDoKKworICA8RVND Pl88dGV4dD48RVNDPlwKKworICAgd2hlcmUgPHRleHQ+IGlzIGEgQy1LZXJtaXQgY29tbWFuZCwg b3IgYSBsaXN0IG9mIEMtS2VybWl0IGNvbW1hbmRzCisgICBzZXBhcmF0ZWQgYnkgY29tbWFzLCB1 cCB0byBhYm91dCAxSyBpbiBsZW5ndGguCisKKyAgIFRvIGRhdGUsIHRoaXMgZmVhdHVyZSBoYXMg YmVlbiBpbmNsdWRlZCBpbiB0aGUgT1MvMiwgV2luZG93cywgVk1TLAorICAgT1MtOSwgYW5kIFVu aXggdmVyc2lvbnMsIGZvciB3aGljaCB0aGUgc3ltYm9sOgorCisgIENLX0FQQworCisgICBpcyBk ZWZpbmVkIGF1dG9tYXRpY2FsbHkgaW4gWzc2XWNrdXVzci5oLiBGb3IgT1MvMiwgQVBDIGlzIGVu YWJsZWQgYXQKKyAgIHJ1bnRpbWUgYnkgZGVmYXVsdCwgZm9yIFVOSVggaXQgaXMgZGlzYWJsZWQu IEl0IGlzIGNvbnRyb2xsZWQgYnkgdGhlCisgICBTRVQgVEVSTUlOQUwgQVBDIGNvbW1hbmQuIENv bmZpZ3VyaW5nIEFQQyBjYXBhYmlsaXR5IGludG8gYSB2ZXJzaW9uCisgICB0aGF0IGdldHMgaXQg YnkgZGVmYXVsdCAoYmVjYXVzZSBDS19BUEMgaXMgZGVmaW5lZCBpbiBbNzddY2t1dXNyLmgpIGNh bgorICAgYmUgb3ZlcnJpZGRlbiBieSBpbmNsdWRpbmc6CisKKyAgLUROT0FQQworCisgICBvbiB0 aGUgQ0MgY29tbWFuZCBsaW5lLgorCisgICBDLUtlcm1pdCdzIGF1dG9kb3dubG9hZCBmZWF0dXJl IGRlcGVuZHMgb24gdGhlIEFQQyBmZWF0dXJlLCBzbworICAgZGVjb25maWd1cmluZyBBUEMgYWxz byBkaXNhYmxlcyBhdXRvZG93bmxvYWQgKGl0IGRvZXNuJ3QgdXNlIEFQQyBlc2NhcGUKKyAgIHNl cXVlbmNlcywgYnV0IHVzZXMgdGhlIEFQQyBzd2l0Y2hpbmcgbWVjaGFuaXNtIGludGVybmFsbHkp LgorCisgICBbIFs3OF1DLUtlcm1pdCBIb21lIF0gWyBbNzldS2VybWl0IEhvbWUgXQorCisgIDYu IFBST0dSQU0gU0laRQorCisgICBbIFs4MF1Ub3AgXSBbIFs4MV1Db250ZW50cyBdIFsgWzgyXU5l eHQgXSBbIFs4M11QcmV2aW91cyBdCisKKyAgIFNFQ1RJT04gQ09OVEVOVFMKKworICA2LjEuIFs4 NF1GZWF0dXJlIFNlbGVjdGlvbgorICA2LjIuIFs4NV1DaGFuZ2luZyBCdWZmZXIgU2l6ZXMKKyAg Ni4zLiBbODZdT3RoZXIgU2l6ZS1SZWxhdGVkIEl0ZW1zCisgIDYuNC4gWzg3XVNwYWNlL1RpbWUg VHJhZGVvZmZzCisKKyAgIChBbHNvIHNlZSBbODhdU2VjdGlvbiA0KQorCisgICBFYWNoIHJlbGVh c2Ugb2YgQy1LZXJtaXQgaXMgbGFyZ2VyIHRoYW4gdGhlIGxhc3QuIE9uIHNvbWUgY29tcHV0ZXJz CisgICAodXN1YWxseSBvbGQgb25lcykgdGhlIHNpemUgb2YgdGhlIHByb2dyYW0gcHJldmVudHMg aXQgZnJvbSBiZWluZworICAgc3VjY2Vzc2Z1bGx5IGxpbmtlZCBhbmQgbG9hZGVkLiBPbiBzb21l IG90aGVycyAoYWxzbyB1c3VhbGx5IG9sZCBvbmVzKSwKKyAgIGl0IG9jY3VwaWVzIHNvIG11Y2gg bWVtb3J5IHRoYXQgaXQgaXMgY29uc3RhbnRseSBzd2FwcGluZyBvciBwYWdpbmcuIEluCisgICBz dWNoIGNhc2VzLCB5b3UgY2FuIHJlZHVjZSBDLUtlcm1pdCdzIHNpemUgaW4gdmFyaW91cyB3YXlz LCBvdXRsaW5lZCBpbgorICAgdGhpcyBzZWN0aW9uLiBUaGUgZm9sbG93aW5nIG9wdGlvbnMgY2Fu IGN1dCBkb3duIG9uIHRoZSBwcm9ncmFtJ3Mgc2l6ZQorICAgYXQgY29tcGlsZSB0aW1lIGJ5IHJl bW92aW5nIGZlYXR1cmVzIG9yIGNoYW5naW5nIHRoZSBzaXplIG9mIHN0b3JhZ2UKKyAgIGFyZWFz LgorCisgICBJZiB5b3UgYXJlIHJlYWRpbmcgdGhpcyBzZWN0aW9uIGJlY2F1c2UgYWxsIHlvdSB3 YW50IGlzIGEgc21hbGwsIGZhc3QsCisgICBxdWljay10by1sb2FkIEtlcm1pdCBmaWxlLXRyYW5z ZmVyIGFwcGxpY2F0aW9uIGZvciB0aGUgcmVtb3RlIGVuZCBvZgorICAgeW91ciBjb25uZWN0aW9u LCBhbmQgdGhlIHJlbW90ZSBlbmQgaXMgVW5peCBiYXNlZCwgdGFrZSBhIGxvb2sgYXQKKyAgIEct S2VybWl0OgorCisgIFs4OV1odHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvZ2tlcm1pdC5o dG1sCisKKyAgNi4xLiBGZWF0dXJlIFNlbGVjdGlvbgorCisgICBGZWF0dXJlcyBjYW4gYmUgYWRk ZWQgb3IgcmVtb3ZlZCBieSBkZWZpbmluZyBzeW1ib2xzIG9uIHRoZSBDQyAoQworICAgY29tcGls ZXIpIGNvbW1hbmQgbGluZS4gIi1EIiBpcyB0aGUgbm9ybWFsIENDIGRpcmVjdGl2ZSB0byBkZWZp bmUgYQorICAgc3ltYm9sIHNvLCBmb3IgZXhhbXBsZSwgIi1ETk9ERUJVRyIgZGVmaW5lcyB0aGUg c3ltYm9sIE5PREVCVUcuIFNvbWUgQworICAgY29tcGlsZXJzIG1pZ2h0IHVzZSBkaWZmZXJlbnQg c3ludGF4LCBlLmcuICItZCBOT0RFQlVHIiBvcgorICAgIi9ERUZJTkU9Tk9ERUJVRyIuIEZvciBD IGNvbXBpbGVycyB0aGF0IGRvIG5vdCBhY2NlcHQgY29tbWFuZC1saW5lCisgICBkZWZpbml0aW9u cywgeW91IGNhbiBwdXQgdGhlIGNvcnJlc3BvbmRpbmcgI2RlZmluZSBzdGF0ZW1lbnRzIGluIHRo ZQorICAgZmlsZSBja2NzeW0uaCwgZm9yIGV4YW1wbGU6CisKKyAgI2RlZmluZSBOT0RFQlVHCisK KyAgIFRoZSBmb2xsb3dpbmcgdGFibGUgc2hvd3MgdGhlIHNhdmluZ3MgYWNoaWV2ZWQgd2hlbiBi dWlsZGluZyBDLUtlcm1pdAorICAgOC4wIChCZXRhLjA0KSB3aXRoIHNlbGVjdGVkIGZlYXR1cmUt ZGVzZWxlY3Rpb24gc3dpdGNoZXMgb24gYW4KKyAgIEludGVsLWJhc2VkIFBDIHdpdGggUmVkIEhh dCBMaW51eCA3LjAgYW5kIGdjYyAyLjk2LiBUaGUgc2l6ZXMgYXJlIGZvcgorICAgbm9uLXNlY3Vy aXR5IGJ1aWxkcy4gVGhlIGZ1bGx5IGNvbmZpZ3VyZWQgbm9uLXNlY3VyaXR5IGJ1aWxkIGlzIDIx Mjc0MDgKKyAgIGJ5dGVzLgorCisgICBPcHRpb24gICAgICBTaXplICAgIFNhdmluZ3MgRWZmZWN0 CisgICBOT0lDUCAgICAgICAgNTQ1MzMwICAgNzQuNCUgTm8gSW50ZXJhY3RpdmUgQ29tbWFuZCBQ YXJzZXIgKGNvbW1hbmQtbGluZSBvbmx5KQorICAgTk9MT0NBTCAgICAgMTUzOTk5NCAgIDI3LjYl IE5vIG1ha2luZyBjb25uZWN0aW9ucy4KKyAgIE5PWEZFUiAgICAgIDE1NTExMDggICAyNy4xJSBO byBmaWxlIHRyYW5zZmVyLgorICAgSUtTRE9OTFkgICAgMTU2NjYwOCAgIDI2LjQlIEludGVybmV0 IEtlcm1pdCBTZXJ2ZXIgb25seS4KKyAgIE5PQ1NFVFMgICAgIDE3NTAwOTcgICAxNy43JSBObyBj aGFyYWN0ZXItc2V0IGNvbnZlcnNpb24uCisgICBOT1NQTCAgICAgICAxODAwMjkzICAgMTUuNCUg Tm8gU2NyaXB0IFByb2dyYW1taW5nIExhbmd1YWdlLgorICAgTk9ORVQgICAgICAgMTgwODU3NSAg IDE1LjAlIE5vIG1ha2luZyBuZXR3b3JrIGNvbm5lY3Rpb25zLgorICAgTk9VTklDT0RFICAgMTgz NDQyNiAgIDEzLjglIE5vIFVuaWNvZGUgY2hhcmFjdGVyLXNldCBjb252ZXJzaW9uLgorICAgTk9I RUxQICAgICAgMTgzNzg3NyAgIDEzLjYlIE5vIGJ1aWx0LWluIGhlbHAgdGV4dC4KKyAgIE5PREVC VUcgICAgIDE4OTE2NjkgICAxMS4xJSBObyBkZWJ1ZyBsb2cuCisgICBOT0ZSSUxMUyAgICAxOTE4 OTY2ICAgIDkuOCUgTm8gImZyaWxscyIuCisgICBOT0ZUUCAgICAgICAxOTcyNDk2ICAgIDcuMyUg Tm8gRlRQIGNsaWVudC4KKyAgIE5PRElBTCAgICAgIDE5ODQ0ODggICAgNi43JSBObyBhdXRvbWF0 aWMgbW9kZW0gZGlhbGluZy4KKyAgIE5PUFVTSCAgICAgIDIwNzAxODQgICAgMi43JSBObyBzaGVs bCBhY2Nlc3MsIHJ1bm5pbmcgZXh0ZXJuYWwgcHJvZ3JhbXMsIGV0Yy4KKyAgIE5PSUtTRCAgICAg IDIwNzQxMjkgICAgMi41JSBObyBJbnRlcm5ldCBLZXJtaXQgU2VydmVyIGNhcGFiaWxpdHkuCisg ICBOT0hUVFAgICAgICAyMDgyNjEwICAgIDIuMSUgTm8gSFRUUCBjbGllbnQuCisgICBOT0ZMT0FU ICAgICAyMDkxMzMyICAgIDEuNyUgTm8gZmxvYXRpbmctcG9pbnQgYXJpdGhtZXRpYy4KKyAgIE5P Q0hBTk5FTElPIDIwOTU5NzggICAgMS41JSBObyBGT1BFTi9GUkVBRC9GV1JJVEUvRkNMT1NFLCBl dGMuCisgICBNSU5JRElBTCAgICAyMDk4MDM1ICAgIDEuNCUgTm8gYnVpbHQtaW4gc3VwcG9ydCBm b3IgbWFueSBraW5kcyBvZiBtb2RlbXMuCisgICBOT1NFUlZFUiAgICAyMDk4OTg3ICAgIDEuMyUg Tm8gc2VydmVyIG1vZGUuCisgICBOT1NFWFAgICAgICAyMTA1ODk4ICAgIDEuMCUgTm8gUy1FeHBy ZXNzaW9ucy4KKyAgIE5PUFRZICAgICAgIDIxMTc3NDMgICAgMC41JSBObyBwc2V1ZG90ZXJtaW5h bCBzdXBwb3J0LgorICAgTk9STE9HSU4gICAgMjEyMTA4OSAgICAwLjMlIE5vIFJMT0dJTiBjb25u ZWN0aW9ucy4KKyAgIE5PT0xETU9ERU1TIDIxMjQwMzggICAgMC4yJSBObyBidWlsdC1pbiBzdXBw b3J0IGZvciBvbGQga2luZHMgb2YgbW9kZW1zLgorICAgTk9TU0ggICAgICAgMjEyNTY5NiAgICAw LjElIE5vIFNTSCBjb21tYW5kLgorCisgICBBbmQgaGVyZSBhcmUgYSBmZXcgY29tYmluYXRpb25z CisKKyAgIE9wdGlvbnMgU2l6ZSBTYXZpbmdzIEVmZmVjdAorICAgTk9ERUJVRyBOT0lDUCBOT0NT RVRTIE5PTE9DQUwgMjgxNjQxIDg2LjclIE5vIGRlYnVnIGxvZywgcGFyc2VyLAorICAgY2hhcmFj dGVyIHNldHMsIG9yIG1ha2luZyBjb25uZWN0aW9ucy4KKyAgIE5PSUNQIE5PQ1NFVFMgTk9MT0NB TCAzNzY0NjggODIuMyUgTm8gcGFyc2VyLCBjaGFyYWN0ZXIgc2V0cywgb3IgbWFraW5nCisgICBj b25uZWN0aW9ucy4KKyAgIE5PSUNQIE5PQ1NFVFMgTk9ORVQgNDI3NTEwIDc5LjklIE5vIHBhcnNl ciwgY2hhcmFjdGVyIHNldHMsIG9yIG5ldHdvcmsKKyAgIGNvbm5lY3Rpb25zLgorICAgTk9TUEwg Tk9DU0VUUyAxNDIzNzg0IDMzLjElIE5vIHNjcmlwdCBsYW5ndWFnZSwgb3IgY2hhcmFjdGVyIHNl dHMuCisKKyAgIC1ETk9GUklMTFMgcmVtb3ZlcyB2YXJpb3VzIGNvbW1hbmQgc3lub255bXM7IHRo ZSBmb2xsb3dpbmcgdG9wLWxldmVsCisgICBjb21tYW5kczogQ0xFQVIsIERFTEVURSwgRElTQUJM RSwgRU5BQkxFLCBHRVRPSywgTUFJTCwgUkVOQU1FLCBUWVBFLAorICAgV0hPOyBhbmQgdGhlIGZv bGxvd2luZyBSRU1PVEUgY29tbWFuZHM6IEtFUk1JVCwgTE9HSU4sIExPR09VVCwgUFJJTlQsCisg ICBUWVBFLCBXSE8uCisKKyAgNi4yLiBDaGFuZ2luZyBCdWZmZXIgU2l6ZXMKKworICAgTW9zdCBt b2Rlcm4gY29tcHV0ZXJzIGhhdmUgc28gbXVjaCBtZW1vcnkgdGhhdCAoYSkgdGhlcmUgaXMgbm8g bmVlZCB0bworICAgc2NyaW1wIGFuZCBzYXZlLCBhbmQgKGIpIEMtS2VybWl0LCBldmVuIHdoZW4g ZnVsbHkgY29uZmlndXJlZCwgaXMKKyAgIHJlbGF0aXZlbHkgc21hbGwgYnkgdG9kYXkncyBzdGFu ZGFyZHMuCisKKyAgIFR3byBtYWpvciBmYWN0b3JzIGFmZmVjdCBLZXJtaXQncyBzaXplOiBmZWF0 dXJlIHNlbGVjdGlvbiBhbmQgYnVmZmVyCisgICBzaXplcy4gQnVmZmVyIHNpemVzIGFmZmVjdCBz dWNoIHRoaW5ncyBhcyB0aGUgbWF4aW11bSBsZW5ndGggZm9yIGEKKyAgIEtlcm1pdCBwYWNrZXQs IHRoZSBtYXhpbXVtIGxlbmd0aCBmb3IgYSBjb21tYW5kLCBmb3IgYSBtYWNybywgZm9yIHRoZQor ICAgbmFtZSBvZiBhIG1hY3JvLCBldGMuIEJpZyBidWZmZXIgc2l6ZXMgYXJlIHVzZWQgd2hlbiB0 aGUgZm9sbG93aW5nCisgICBzeW1ib2wgaXMgZGVmaW5lZDoKKworICBCSUdCVUZPSworCisgICBh cyBpdCBpcyBieSBkZWZhdWx0IGZvciBtb3N0IG1vZGVybiBwbGF0Zm9ybXMgKExpbnV4LCBBSVgg NCBhbmQgNSwKKyAgIEhQLVVYIDEwIGFuZCAxMSwgU29sYXJpcywgZXRjKSBpbiBbOTBdY2t1dXNy LmguIElmIHlvdXIgYnVpbGQgZG9lcyBub3QKKyAgIGdldCBiaWcgYnVmZmVycyBhdXRvbWF0aWNh bGx5IChTSE9XIEZFQVRVUkVTIHRlbGxzIHlvdSksIHlvdSBjYW4KKyAgIGluY2x1ZGUgdGhlbSBi eSByZWJ1aWxkaW5nIHdpdGggQklHQlVGT0sgZGVmaW5lZDsgZS5nLiBpbiBVbml4OgorCisgIG1h a2UgeHh4eCBLRkxBR1M9LURCSUdCVUZPSworCisgICB3aGVyZSB4eHh4IGlzIHRoZSBtYWtlZmls ZSB0YXJnZXQuIE9uIHRoZSBvdGhlciBoYW5kLCBpZiB5b3Ugd2FudCB0bworICAgYnVpbGQgd2l0 aG91dCBiaWcgYnVmZmVycyB3aGVuIHRoZXkgbm9ybWFsbHkgd291bGQgYmUgc2VsZWN0ZWQsIHVz ZToKKworICBtYWtlIHh4eHggS0ZMQUdTPS1ETk9CSUdCVUYKKworICAgVGhlcmUgYXJlIG9wdGlv bnMgdG8gY29udHJvbCBLZXJtaXQncyBwYWNrZXQgYnVmZmVyIGFsbG9jYXRpb25zLiBUaGUKKyAg IGZvbGxvd2luZyBzeW1ib2xzIGFyZSBkZWZpbmVkIGluIFs5MV1ja2NrZXIuaCBpbiBzdWNoIGEg d2F5IHRoYXQgeW91CisgICBjYW4gb3ZlcnJpZGUgdGhlbSBieSByZWRlZmluaW5nIHRoZW0gaW4g Q0ZMQUdTOgorCisgIC1ETUFYU1A9eHh4eCAtIE1heGltdW0gc2VuZC1wYWNrZXQgbGVuZ3RoLgor ICAtRE1BWFJQPXh4eHggLSBNYXhpbXVtIHJlY2VpdmUtcGFja2V0IGxlbmd0aC4KKyAgLURTQlNJ Wj14eHh4IC0gVG90YWwgYWxsb2NhdGlvbiBmb3Igc2VuZC1wYWNrZXQgYnVmZmVycy4KKyAgLURS QlNJWj14eHh4IC0gVG90YWwgYWxsb2NhdGlvbiBmb3IgcmVjZWl2ZS1wYWNrZXQgYnVmZmVycy4K KworICAgVGhlIGRlZmF1bHRzIGRlcGVuZCBvbiB0aGUgcGxhdGZvcm0uCisKKyAgIFVzaW5nIGR5 bmFtaWMgYWxsb2NhdGlvbiAoLUREWU5BTUlDKSByZWR1Y2VzIHN0b3JhZ2UgcmVxdWlyZW1lbnRz IGZvcgorICAgdGhlIGV4ZWN1dGFibGUgcHJvZ3JhbSBvbiBkaXNrLCBhbmQgYWxsb3dzIG1vcmUg YW5kIGJpZ2dlciBwYWNrZXRzIGF0CisgICBydW50aW1lLiBUaGlzIGhhcyBwcm92ZW4gc2FmZSBv dmVyIHRoZSB5ZWFycywgYW5kIG5vdyBtb3N0IGJ1aWxkcyAoZS5nLgorICAgYWxsIFVuaXgsIFZN UywgV2luZG93cywgYW5kIE9TLzIgb25lcykgdXNlIGR5bmFtaWMgbWVtb3J5IGFsbG9jYXRpb24g YnkKKyAgIGRlZmF1bHQuIElmIGl0IGNhdXNlcyB0cm91YmxlLCBob3dldmVyLCB0aGVuIG9taXQg dGhlIC1ERFlOQU1JQyBvcHRpb24KKyAgIGZyb20gQ0ZMQUdTLCBvciBhZGQgLUROT0RZTkFNSUMu CisKKyAgNi4zLiBPdGhlciBTaXplLVJlbGF0ZWQgSXRlbXMKKworICAgVG8gbWFrZSBLZXJtaXQg Y29tcGlsZSBhbmQgbG9hZCBzdWNjZXNzZnVsbHksIHlvdSBtaWdodCBoYXZlIHRvIGNoYW5nZQor ICAgeW91ciBidWlsZCBwcm9jZWR1cmUgdG86CisKKyAgICBhLiBSZXF1ZXN0IGEgbGFyZ2VyICgi bGFyZ2UiIG9yICJodWdlIikgY29tcGlsYXRpb24gLyBjb2RlLWdlbmVyYXRpb24KKyAgICAgICBt b2RlbC4gVGhpcyBpcyBuZWVkZWQgZm9yIDE2LWJpdCBQQy1iYXNlZCBVTklYIHZlcnNpb25zICht b3N0IG9yCisgICAgICAgYWxsIG9mIHdoaWNoIGZhaWwgdG8gYnVpbGQgQy1LZXJtaXQgNy4wIGFu ZCBsYXRlciBhbnl3YXkpLiBUaGlzIGlzCisgICAgICAgdHlwaWNhbGx5IGRvbmUgd2l0aCBhIC1N IGFuZC9vciAtRiBzd2l0Y2ggKHNlZSB5b3VyIGNjIG1hbnVhbCBvcgorICAgICAgIG1hbiBwYWdl IGZvciBkZXRhaWxzKS4KKyAgICBiLiBTb21lIGRldmVsb3BtZW50IHN5c3RlbXMgc3VwcG9ydCBv dmVybGF5cy4gSWYgdGhlIHByb2dyYW0gaXMgdG9vCisgICAgICAgYmlnIHRvIGJlIGJ1aWx0IGFz IGlzLCBjaGVjayB5b3VyIGxvYWRlciBtYW51YWwgKCJtYW4gbGQiKSB0byBzZWUKKyAgICAgICBp ZiBhbiBvdmVybGF5IGZlYXR1cmUgaXMgYXZhaWxhYmxlLiBTZWUgdGhlIDIuMTAvMi4xMSBCU0Qg ZXhhbXBsZQorICAgICAgIGluIHRoZSBVTklYIG1ha2VmaWxlLiAoQWN0dWFsbHksIGFzIG9mIHZl cnNpb24gNy4wLCBDLUtlcm1pdCBpcyB0b28KKyAgICAgICBiaWcgdG8gYnVpbGQsIHBlcmlvZCwg ZXZlbiB3aXRoIG92ZXJsYXlzLCBvbiAyLnh4IEJTRCkuCisgICAgYy4gU2ltaWxhcmx5LCBzb21l IHNtYWxsIGFuZC9vciBzZWdtZW50LWJhc2VkIGFyY2hpdGVjdHVyZXMgc3VwcG9ydAorICAgICAg ICJjb2RlIG1hcHBpbmciLCB3aGljaCBpcyBzaW1pbGFyIHRvIG92ZXJsYXlzIChQRFAxMS1iYXNl ZCBWRU5JWAorICAgICAgIDEuMCwgY2lyY2EgMTk4NCwgd2FzIGFuIGV4YW1wbGUpLiBTZWUgdGhl IGxpbmtlciBkb2N1bWVudGF0aW9uIG9uCisgICAgICAgdGhlIGFmZmVjdGVkIHBsYXRmb3JtLgor CisgICBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIHJlZHVjZSB0aGUgc2l6ZSBvZiB0aGUgZXhlY3V0 YWJsZSBwcm9ncmFtIGZpbGUKKyAgIGluIHNldmVyYWwgb3RoZXIgd2F5czoKKworICAgIGEuIElu Y2x1ZGUgdGhlIC1PIChvcHRpbWl6ZSkgY29tcGlsZXIgc3dpdGNoIGlmIGl0IGlzbid0IGFscmVh ZHkKKyAgICAgICBpbmNsdWRlZCBpbiB5b3VyICJtYWtlIiBlbnRyeSAoYW5kIGlmIGl0IHdvcmtz ISkuIElmIHlvdXIgY29tcGlsZXIKKyAgICAgICBzdXBwb3J0cyBoaWdoZXIgbGV2ZWxzIG9mIG9w dGltaXphdGlvbiAoZS5nLiAtTzIgb3IgaGlnaGVyIG51bWJlciwKKyAgICAgICAtT25vbGltaXQg KEhQLVVYKSwgZXRjKSwgdHJ5IHRoZW07IHRoZSBncmVhdGVyIHRoZSBsZXZlbCBvZgorICAgICAg IG9wdGltaXphdGlvbiwgdGhlIGxvbmdlciB0aGUgY29tcGlsYXRpb24gYW5kIG1vcmUgbGlrZWx5 IHRoZQorICAgICAgIGNvbXBpbGVyIHdpbGwgcnVuIG91dCBvZiBtZW1vcnkuIFRoZSBsYXR0ZXIg ZXZlbnR1YWxpdHksIHNvbWUKKyAgICAgICBjb21waWxlcnMgYWxzbyBwcm92aWRlIGNvbW1hbmQt bGluZSBvcHRpb25zIHRvIGFsbG9jYXRlIG1vcmUgbWVtb3J5CisgICAgICAgZm9yIHRoZSBvcHRp bWl6ZXIsIGxpa2UgIi1PbGltaXQgbnVtYmVyIiBpbiBVbHRyaXguCisgICAgYi4gSWYgeW91ciBw bGF0Zm9ybSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzLCBjaGFuZ2UgdGhlIG1ha2UgZW50cnkK KyAgICAgICB0byB0YWtlIGFkdmFudGFnZSBvZiB0aGlzIGZlYXR1cmUuIFRoZSB3YXkgdG8gZG8g dGhpcyBpcywgb2YKKyAgICAgICBjb3Vyc2UsIHBsYXRmb3JtIGRlcGVuZGVudDsgc2VlIHRoZSBO ZVhUIG1ha2VmaWxlIHRhcmdldCBmb3IgYW4KKyAgICAgICBleGFtcGxlLiBzb21lIHBsYXRmb3Jt cyAobGlrZSBTb2xhcmlzKSBkbyBpdCBhdXRvbWF0aWNhbGx5IGFuZCBnaXZlCisgICAgICAgeW91 IG5vIGNob2ljZS4gQnV0IHdhdGNoIG91dDogZXhlY3V0YWJsZXMgbGlua2VkIHdpdGggc2hhcmVk CisgICAgICAgbGlicmFyaWVzIGFyZSBsZXNzIHBvcnRhYmxlIHRoYW4gc3RhdGljYWxseSBsaW5r ZWQgZXhlY3V0YWJsZXMuCisgICAgYy4gU3RyaXAgdGhlIHByb2dyYW0gaW1hZ2UgYWZ0ZXIgYnVp bGRpbmcgKCJtYW4gc3RyaXAiIGZvciBmdXJ0aGVyCisgICAgICAgaW5mbyksIG9yIGFkZCAtcyB0 byB0aGUgTE5LRkxBR1MgKFVOSVggb25seSkuIFRoaXMgc3RyaXBzIHRoZQorICAgICAgIHByb2dy YW0gb2YgaXRzIHN5bWJvbCB0YWJsZSBhbmQgcmVsb2NhdGlvbiBpbmZvcm1hdGlvbi4KKyAgICBk LiBNb3ZlIGNoYXJhY3RlciBzdHJpbmdzIGludG8gYSBzZXBhcmF0ZSBmaWxlLiBTZWUgdGhlIDIu MTEgQlNECisgICAgICAgdGFyZ2V0IGZvciBhbiBleGFtcGxlLgorCisgIDYuNC4gU3BhY2UvVGlt ZSBUcmFkZW9mZnMKKworICAgVGhlcmUgYXJlIG1vcmUgdGhhbiA2MDAwIGRlYnVnKCkgc3RhdGVt ZW50cyBpbiB0aGUgcHJvZ3JhbS4gSWYgeW91IHdhbnQKKyAgIHRvIHNhdmUgYm90aCBzcGFjZSAo cHJvZ3JhbSBzaXplKSBhbmQgdGltZSAocHJvZ3JhbSBleGVjdXRpb24gdGltZSksCisgICBpbmNs dWRlIC1ETk9ERUJVRyBpbiB0aGUgY29tcGlsYXRpb24uIElmIHlvdSB3YW50IHRvIGluY2x1ZGUg ZGVidWdnaW5nCisgICBmb3IgdHJhY2tpbmcgZG93biBwcm9ibGVtcywgb21pdCAtRE5PREVCVUcg ZnJvbSB0aGUgbWFrZSBlbnRyeS4gQnV0CisgICB3aGVuIHlvdSBpbmNsdWRlIGRlYnVnZ2luZywg eW91IGhhdmUgdHdvIGNob2ljZXMgZm9yIGhvdyBpdCdzIGRvbmUuIE9uZQorICAgZGVmaW5pdGlv biBkZWZpbmVzIGRlYnVnKCkgdG8gYmUgYSBmdW5jdGlvbiBjYWxsOyB0aGlzIGlzIGNoZWFwIGlu CisgICBzcGFjZSBidXQgZXhwZW5zaXZlIGluIGV4ZWN1dGlvbi4gVGhlIG90aGVyIGRlZmluZXMg ZGVidWcgYXMgImlmCisgICAoZGVibG9nKSIgYW5kIHRoZW4gdGhlIGZ1bmN0aW9uIGNhbGwsIHRv IG9taXQgdGhlIGZ1bmN0aW9uIGNhbGwKKyAgIG92ZXJoZWFkIHdoZW4gdGhlIGRlYnVnIGxvZyBp cyBub3QgYWN0aXZlLiBCdXQgdGhpcyBhZGRzIGEgbG90IG9mIHNwYWNlCisgICB0byB0aGUgcHJv Z3JhbS4gQm90aCBtZXRob2RzIHdvcmssIHRha2UgeW91ciBjaG9pY2U7IElGREVCVUcgaXMKKyAg IHByZWZlcnJlZCBpZiBtZW1vcnkgaXMgbm90IGEgY29uc3RyYWludCBidXQgdGhlIGNvbXB1dGVy IGlzIGxpa2VseSB0bworICAgYmUgc2xvdy4gVGhlIGZpcnN0IG1ldGhvZCBpcyB0aGUgZGVmYXVs dCwgaS5lLiBpZiBub3RoaW5nIGlzIGRvbmUgdG8KKyAgIHRoZSBDRkxBR1Mgb3IgaW4gWzkyXWNr Y2RlYi5oIChidXQgaW4gc29tZSBjYXNlcywgZS5nLiBWTVMsIGl0IGlzKS4gVG8KKyAgIHNlbGVj dCB0aGUgc2Vjb25kIG1ldGhvZCwgaW5jbHVkZSAtRElGREVCVUcgaW4gdGhlIGNvbXBpbGF0aW9u IChhbmQKKyAgIGRvbid0IGluY2x1ZGUgLUROT0RFQlVHKS4KKworICAgWyBbOTNdQy1LZXJtaXQg SG9tZSBdIFsgWzk0XUtlcm1pdCBIb21lIF0KKworICA3LiBNT0RFTSBESUFMSU5HCisKKyAgIFsg Wzk1XVRvcCBdIFsgWzk2XUNvbnRlbnRzIF0gWyBbOTddTmV4dCBdIFsgWzk4XVByZXZpb3VzIF0K KworICAgLUROT0RJQUwgcmVtb3ZlcyBhdXRvbWF0aWMgbW9kZW0gZGlhbGluZyBjb21wbGV0ZWx5 LCBpbmNsdWRpbmcgdGhlCisgICBlbnRpcmUgWzk5XWNrdWRpYS5jIG1vZHVsZSwgcGx1cyBhbGwg Y29tbWFuZHMgdGhhdCByZWZlciB0byBkaWFsaW5nIGluCisgICB0aGUgdmFyaW91cyBja3V1cyou YyBtb2R1bGVzLgorCisgICAtRE1JTklESUFMIGxlYXZlcyB0aGUgRElBTCBhbmQgcmVsYXRlZCBj b21tYW5kcyAoU0VUL1NIT1cgTU9ERU0sCisgICBTRVQvU0hPVyBESUFMKSBpbnRhY3QsIGJ1dCBy ZW1vdmVzIHN1cHBvcnQgZm9yIGFsbCB0eXBlcyBvZiBtb2RlbXMKKyAgIGV4Y2VwdCBDQ0lUVCwg SGF5ZXMsIFVua25vd24sIFVzZXItZGVmaW5lZCwgR2VuZXJpYy1oaWdoLXNwZWVkLCBhbmQKKyAg IE5vbmUgKD0gRGlyZWN0KS4gVGhlIE1JTklESUFMIG9wdGlvbiBjdXRzIHRoZSBzaXplIG9mIHRo ZSBkaWFsIG1vZHVsZQorICAgYXBwcm94aW1hdGVseSBpbiBoYWxmLiBVc2UgdGhpcyBvcHRpb24g aWYgeW91IGhhdmUgb25seSBIYXllcyBvciBDQ0lUVAorICAgbW9kZW1zIGFuZCBkb24ndCB3YW50 IHRvIGNhcnJ5IHRoZSBiYWdnYWdlIGZvciB0aGUgb3RoZXIgdHlwZXMuCisKKyAgIEEgY29tcHJv bWlzZSBiZXR3ZWVuIGZ1bGwgZGlhbGVyIHN1cHBvcnQgYW5kIE1JTklESUFMIGlzIG9idGFpbmVk IGJ5CisgICByZW1vdmluZyBzdXBwb3J0IGZvciAib2xkIiBtb2RlbXMgLS0gYWxsIHRoZSBzdHJh bmdlIG5vbi1IYXllcworICAgY29tcGF0aWJsZSAxMjAwIGFuZCAyNDAwIGJwcyBtb2RlbXMgdGhh dCBDLUtlcm1pdCBoYXMgYmVlbiBjYXJyeWluZworICAgYXJvdW5kIHNpbmNlIDE5ODUgb3Igc28u IFRvIHJlbW92ZSBzdXBwb3J0IGZvciB0aGVzZSBtb2RlbXMsIGFkZAorICAgLUROT09MRE1PREVN UyB0byBDRkxBR1MgYXQgY29tcGlsYXRpb24gdGltZS4KKworICAgRmluYWxseSwgaWYgeW91IGtl ZXAgc3VwcG9ydCBmb3Igb2xkIG1vZGVtcywgeW91IHdpbGwgbm90aWNlIHRoYXQgdGhlaXIKKyAg IG5hbWVzIGFwcGVhciBvbiB0aGUgInNldCBtb2RlbSA/IiBtZW51LiBUaGF0J3MgYmVjYXVzZSB0 aGVpciBuYW1lcyBhcmUsCisgICBieSBkZWZhdWx0LCAidmlzaWJsZSIuIEJ1dCB0aGUgbGlzdCBp cyBjb25mdXNpbmcgdG8gdGhlIHlvdW5nZXIKKyAgIGdlbmVyYXRpb24sIHdobyBoYXZlIG9ubHkg aGVhcmQgb2YgbW9kZW1zIGZyb20gdGhlIFYuMzJiaXMtYW5kLWxhdGVyCisgICBlcmEuIElmIHlv dSB3YW50IHRvIGJlIGFibGUgdG8gdXNlIG9sZCBtb2RlbXMsIGJ1dCBkb24ndCB3YW50IHRoZWly CisgICBuYW1lcyBjbHV0dGVyaW5nIHVwIG1lbnVzLCBhZGQgdGhpcyB0byBDRkxBR1M6CisKKyAg LURNX09MRD0xCisKKyAgIFsgWzEwMF1DLUtlcm1pdCBIb21lIF0gWyBbMTAxXUtlcm1pdCBIb21l IF0KKworICA4LiBORVRXT1JLIFNVUFBPUlQKKworICAgWyBbMTAyXVRvcCBdIFsgWzEwM11Db250 ZW50cyBdIFsgWzEwNF1OZXh0IF0gWyBbMTA1XVByZXZpb3VzIF0KKworICAgU0VDVElPTiBDT05U RU5UUworCisgIDguMS4gWzEwNl1UQ1AvSVAKKyAgOC4yLiBbMTA3XVguMjUKKyAgOC4zLiBbMTA4 XU90aGVyIE5ldHdvcmtzCisKKyAgIEMtS2VybWl0IHN1cHBvcnRzIG5vdCBvbmx5IHNlcmlhbC1w b3J0IGFuZCBtb2RlbSBjb25uZWN0aW9ucywgYnV0IGFsc28KKyAgIFRDUC9JUCBhbmQgWC4yNSBu ZXR3b3JrIGNvbm5lY3Rpb25zLiBTb21lIHZlcnNpb25zIHN1cHBvcnQgb3RoZXIKKyAgIG5ldHdv cmsgdHlwZXMgdG9vIGxpa2UgREVDbmV0LCBMQVQsIE5FVEJJT1MsIGV0Yy4gSWYgeW91IGRlZmlu ZSB0aGUKKyAgIGZvbGxvd2luZyBzeW1ib2w6CisKKyAgTk9ORVQKKworICAgdGhlbiBhbGwgbmV0 d29yayBzdXBwb3J0IGlzIGNvbXBpbGVkIGF3YXkuCisKKyAgOC4xLiBUQ1AvSVAKKworICAgU1VC U0VDVElPTiBDT05URU5UUworCisgIDguMS4xLiBbMTA5XUZpcmV3YWxscworICA4LjEuMi4gWzEx MF1Db21waWxhdGlvbiBhbmQgTGlua2luZyBQcm9ibGVtcworICA4LjEuMy4gWzExMV1FbmFibGlu ZyBIb3N0IEFkZHJlc3MgTGlzdHMKKyAgOC4xLjQuIFsxMTJdRW5hYmxpbmcgVGVsbmV0IE5BV1MK KyAgOC4xLjUuIFsxMTNdRW5hYmxpbmcgSW5jb21pbmcgVENQL0lQIENvbm5lY3Rpb25zCisgIDgu MS42LiBbMTE0XURpc2FibGluZyBTRVQgVENQIE9wdGlvbnMKKworICAgQy1LZXJtaXQncyBUQ1Av SVAgZmVhdHVyZXMgcmVxdWlyZSB0aGUgQmVya2VsZXkgc29ja2V0cyBsaWJyYXJ5IG9yCisgICBl cXVpdmFsZW50LCBnZW5lcmFsbHkgYXZhaWxhYmxlIG9uIGFueSBVbml4IHN5c3RlbSwgYXMgd2Vs bCBhcyBpbgorICAgV2luZG93cyA5eC9OVCwgT1MvMiwgVk1TLCBBT1MvVlMsIFZPUywgZXRjLiBU aGUgVENQL0lQIHN1cHBvcnQgaW5jbHVkZXMKKyAgIGJ1aWx0LWluIFRFTE5FVCwgRlRQLCBhbmQg SFRUUCBwcm90b2NvbC4gVG8gc2VsZWN0IFRDUC9JUCBzdXBwb3J0LAorICAgaW5jbHVkZSAtRFRD UFNPQ0tFVCBpbiB5b3VyIG1ha2VmaWxlIHRhcmdldCdzIENGTEFHUywgb3IgKGluIFZNUykgdGhl CisgICBhcHByb3ByaWF0ZSB2YXJpYW50IChlLmcuIC1EV09MTE9OR09ORywgLURNVUxUSU5FVCwg LURFWENFTEFOLAorICAgLURXSU5UQ1AsIGV0YykuCisKKyAgIFRoZSBWTVMgYW5kL29yIGVhcmx5 IFVuaXggdGhpcmQtcGFydHkgVENQL0lQIHByb2R1Y3RzIGFyZSBvZnRlbgorICAgaW5jb21wYXRp YmxlIHdpdGggZWFjaCBvdGhlciwgYW5kIHNvbWV0aW1lcyB3aXRoIGRpZmZlcmVudCB2ZXJzaW9u cyBvZgorICAgdGhlbXNlbHZlcy4gRm9yIGV4YW1wbGUsIFdvbGxvbmdvbmcgcmVwb3J0ZWRseSBw dXQgaGVhZGVyIGZpbGVzIGluCisgICBkaWZmZXJlbnQgZGlyZWN0b3JpZXMgZm9yIGRpZmZlcmVu dCBVTklYIHZlcnNpb25zOgorCisgICAgICogaW4uaCBjYW4gYmUgaW4gZWl0aGVyIC91c3IvaW5j bHVkZS9zeXMgb3IgL3VzZXIvaW5jbHVkZS9uZXRpbmV0LgorICAgICAqIHRlbG5ldC5oIGNhbiBi ZSBpbiBlaXRoZXIgL3Vzci9pbmNsdWRlL2FycGEgb3IKKyAgICAgICAvdXNlci9pbmNsdWRlL25l dGluZXQuCisgICAgICogaW5ldC5oIGNhbiBiZSBpbiBlaXRoZXIgL3Vzci9pbmNsdWRlL2FycGEg b3IgL3VzZXIvaW5jbHVkZS9zeXMuCisKKyAgIEluIGNhc2VzIGxpa2UgdGhpcywgdXNlIHRoZSAt SSBjYyBjb21tYW5kLWxpbmUgb3B0aW9uIHdoZW4gcG9zc2libGU7CisgICBvdGhlcndpc2UgaXQn cyBiZXR0ZXIgdG8gbWFrZSBsaW5rcyBpbiB0aGUgZmlsZSBzeXN0ZW0gdGhhbiBpdCBpcyB0bwor ICAgaGFjayB1cCB0aGUgQy1LZXJtaXQgc291cmNlIGNvZGUuIFN1cHBvc2UsIGZvciBleGFtcGxl LCBLZXJtaXQgaXMKKyAgIGxvb2tpbmcgZm9yIHRlbG5ldC5oIGluIC91c3IvaW5jbHVkZS9hcnBh LCBidXQgb24geW91ciBjb21wdXRlciBpdCBpcworICAgaW4gL3Vzci9pbmNsdWRlL25ldGluZXQu IERvIHRoaXMgKGFzIHJvb3QsIG9yIGdldCB0aGUgc3lzdGVtCisgICBhZG1pbmlzdHJhdG9yIHRv IGRvIGl0KToKKworICBjZCAvdXNyL2luY2x1ZGUvYXJwYQorICBsbiAvdXNyL2luY2x1ZGUvbmV0 aW5ldC90ZWxuZXQuaCB0ZWxuZXQuaAorCisgICAoIm1hbiBsbiIgZm9yIGRldGFpbHMgYWJvdXQg bGlua3MuKQorCisgICBUaGUgbmV0d29yayBzdXBwb3J0IGZvciBUQ1AvSVAgYW5kIFguMjUgaXMg aW4gdGhlIHNvdXJjZSBmaWxlcworICAgWzExNV1ja2NuZXQuaCwgWzExNl1ja2N0ZWwuYywgWzEx N11ja2N0ZWwuYywgWzExOF1ja2N0ZWwuaCwKKyAgIFsxMTldY2tjZnRwLmMsIHdpdGggbWlzY2Vs bGFuZW91cyBTSE9XIGNvbW1hbmRzLCBldGMsIGluIHRoZSB2YXJpb3VzCisgICBja3V1cyouYyBt b2R1bGVzLCBwbHVzIGNvZGUgaW4gdGhlIGNrKmNvbi5jIG9yIGNrdWNucy5jIChDT05ORUNUCisg ICBjb21tYW5kKSBhbmQgc2V2ZXJhbCBvdGhlciBtb2R1bGVzIHRvIGRldGVjdCBURUxORVQgbmVn b3RpYXRpb25zLCBldGMuCisKKyAgIFdpdGhpbiB0aGUgVENQU09DS0VUIGNvZGUsIHNvbWUgc29j a2V0LWxldmVsIGNvbnRyb2xzIGFyZSBpbmNsdWRlZCBpZgorICAgVENQU09DS0VUIGlzIGRlZmlu ZWQgaW4gdGhlIEMtS2VybWl0IENGTEFHUyBhbmQgU09MX1NPQ0tFVCBpcyBkZWZpbmVkCisgICBp biBpbiB0aGUgc3lzdGVtJ3MgVENQLXJlbGF0ZWQgaGVhZGVyIGZpbGVzLCBzdWNoIGFzIDxzeXMv c29ja2V0Lmg+LgorICAgVGhlc2UgYXJlOgorCisgIFNFVCBUQ1AgS0VFUEFMSVZFCisgIFNFVCBU Q1AgTElOR0VSCisgIFNFVCBUQ1AgUkVDVkJVRgorICBTRVQgVENQIFNFTkRCVUYKKworICAgSW4g YWRkaXRpb24sIGlmIFRDUF9OT0RFTEFZIGlzIGRlZmluZWQsIHRoZSBmb2xsb3dpbmcgY29tbWFu ZCBpcyBhbHNvCisgICBlbmFibGVkOgorCisgIFNFVCBUQ1AgTk9ERUxBWSAoTmFnbGUgYWxnb3Jp dGhtKQorCisgICBTZWUgdGhlIFsxMjBdQy1LZXJtaXQgdXNlciBkb2N1bWVudGF0aW9uIGZvciBk ZXNjcmlwdGlvbnMgb2YgdGhlc2UKKyAgIGNvbW1hbmRzLgorCisgIDguMS4xLiBGaXJld2FsbHMK KworICAgVGhlcmUgZXhpc3QgdmFyaW91cyB0eXBlcyBvZiBmaXJld2FsbHMsIHNldCB1cCB0byBz ZXBhcmF0ZSB1c2VycyBvZiBhbgorICAgaW50ZXJuYWwgVENQL0lQIG5ldHdvcmsgKCJJbnRyYW5l dCIpIGZyb20gdGhlIGdyZWF0IHdpZGUgSW50ZXJuZXQsIGJ1dAorICAgdGhlbiB0byBsZXQgc2Vs ZWN0ZWQgdXNlcnMgb3Igc2VydmljZXMgZ2V0IHRocm91Z2ggYWZ0ZXIgYWxsLgorCisgICBPbmUg ZmlyZXdhbGwgbWV0aG9kIGlzIGNhbGxlZCBTT0NLUywgaW4gd2hpY2ggYSBwcm94eSBzZXJ2ZXIg YWxsb3dzCisgICB1c2VycyBpbnNpZGUgYSBmaXJld2FsbCB0byBhY2Nlc3MgdGhlIG91dHNpZGUg d29ybGQsIGJhc2VkIG9uIGEKKyAgIHBlcm1pc3Npb24gbGlzdCBnZW5lcmFsbHkgc3RvcmVkIGlu IGEgZmlsZS4gU09DS1MgaXMgZW5hYmxlZCBpbiBvbmUgb2YKKyAgIHR3byB3YXlzLiBGaXJzdCwg dGhlIHN0YW5kYXJkIHNvY2tldHMgbGlicmFyeSBpcyBtb2RpZmllZCB0byBoYW5kbGUgdGhlCisg ICBmaXJld2FsbCwgYW5kIHRoZW4gYWxsIHRoZSBjbGllbnQgYXBwbGljYXRpb25zIGFyZSByZWxp bmtlZCAoaWYKKyAgIG5lY2Vzc2FyeSwgaS5lLiBpZiB0aGUgbGlicmFyaWVzIGFyZSBub3QgZHlu YW1pY2FsbHkgbG9hZGVkKSB3aXRoIHRoZQorICAgbW9kaWZpZWQgc29ja2V0cyBsaWJyYXJ5LiBU aGUgQVBJcyBhcmUgYWxsIHRoZSBzYW1lLCBzbyB0aGUKKyAgIGFwcGxpY2F0aW9ucyBkbyBub3Qg bmVlZCB0byBiZSByZWNvZGVkIG9yIHJlY29tcGlsZWQuCisKKyAgIEluIHRoZSBvdGhlciBtZXRo b2QsIHRoZSBhcHBsaWNhdGlvbnMgbXVzdCBiZSBtb2RpZmllZCB0byBjYWxsCisgICByZXBsYWNl bWVudCByb3V0aW5lcywgc3VjaCBhcyBSYWNjZXB0KCkgaW5zdGVhZCBvZiBhY2NlcHQoKSwgUmJp bmQoKQorICAgaW5zdGVhZCBvZiBiaW5kKCksIGV0YywgYW5kIHRoZW4gbGlua2VkIHdpdGggYSBz ZXBhcmF0ZSBTT0NLUyBsaWJyYXJ5LgorICAgVGhpcyBzZWNvbmQgbWV0aG9kIGlzIGFjY29tcGxp c2hlZCAoZm9yIFNPQ0tTNCkgaW4gQy1LZXJtaXQgYnkKKyAgIGluY2x1ZGluZyAtRENLX1NPQ0tT IGluIHlvdXIgQ0ZMQUdTLCBhbmQgYWxzbyBhZGRpbmc6CisKKyAgLWxzb2NrcworCisgICB0byBM SUJTLCBvciByZXBsYWNpbmcgLWxzb2NrZXRzIHdpdGggLWxzb2NrcyAoZGVwZW5kaW5nIG9uIHdo ZXRoZXIgdGhlCisgICBzb2NrcyBsaWJyYXJ5IGFsc28gaW5jbHVkZXMgYWxsIHRoZSBzb2NrZXRz IGVudHJ5IHBvaW50cykuCisKKyAgIEZvciBTT0NLUzUsIHVzZSAtRENLX1NPQ0tTNS4KKworICAg RXhwbGljaXQgZmlyZXdhbGwgc3VwcG9ydCBjYW4sIGluIGdlbmVyYWwsIG5vdCBiZSBhIHN0YW5k YXJkIGZlYXR1cmUgb3IKKyAgIGEgZmVhdHVyZSB0aGF0IGlzIHNlbGVjdGVkIGF0IHJ1bnRpbWUs IGJlY2F1c2UgdGhlIFNPQ0tTIGxpYnJhcnkgdGVuZHMKKyAgIHRvIGJlIGRpZmZlcmVudCBhdCBl YWNoIHNpdGUgLS0gbG9jYWwgbW9kaWZpY2F0aW9ucyBhYm91bmQuCisKKyAgIFRoZSBpZGVhbCBz aXR1YXRpb24gb2NjdXJzIHdoZW4gZmlyZXdhbGxzIGFyZSBzdXBwb3J0ZWQgYnkgdGhlIGZpcnN0 CisgICBtZXRob2QsIHVzaW5nIGR5bmFtaWNhbGx5IGxpbmtlZCBzb2NrZXRzLXJlcGxhY2VtZW50 IGxpYnJhcmllczsgaW4gdGhpcworICAgY2FzZSwgYWxsIHlvdXIgVENQL0lQIGNsaWVudCBhcHBs aWNhdGlvbnMgbmVnb3RpYXRlIHRoZSBmaXJld2FsbAorICAgdHJhbnNwYXJlbnRseS4KKworICA4 LjEuMi4gQ29tcGlsYXRpb24gYW5kIExpbmtpbmcgUHJvYmxlbXMKKworICAgSWYgeW91IGdldCBh IGNvbXBpbGF0aW9uIGVycm9yIGluIFsxMjFdY2tjbmV0LmMsIHdpdGggYSBjb21wbGFpbnQgbGlr ZQorICAgImluY29tcGF0aWJsZSB0eXBlcyBpbiBhc3NpZ25tZW50IiwgaXQgcHJvYmFibHkgaGFz IHNvbWV0aGluZyB0byBkbworICAgd2l0aCB0aGUgZGF0YSB0eXBlIHlvdXIgc3lzdGVtIHVzZXMg Zm9yIHRoZSBpbmV0X2FkZHIoKSBmdW5jdGlvbiwgd2hpY2gKKyAgIGlzIGRlY2xhcmVkICh1c3Vh bGx5KSBpbiA8YXJwYS9pbmV0Lmg+LiBLZXJtaXQgdXNlcyAidW5zaWduZWQgbG9uZyIKKyAgIHVu bGVzcyB0aGUgc3ltYm9sIElOQUREUlggaXMgZGVmaW5lZCwgaW4gd2hpY2ggY2FzZSAic3RydWN0 IGluYWRkciIgaXMKKyAgIHVzZWQgaW5zdGVhZC4gVHJ5IGFkZGluZyAtRElOQUREUlggdG8gQ0ZM QUdTIGluIHlvdXIgbWFrZSBlbnRyeSwgYW5kIGlmCisgICB0aGF0IGZpeGVzIHRoZSBwcm9ibGVt LCBwbGVhc2Ugc2VuZCBhIHJlcG9ydCB0byBrZXJtaXRAY29sdW1iaWEuZWR1LgorCisgICBDb21w aWxhdGlvbiBlcnJvcnMgbWlnaHQgYWxzbyBoYXZlIHRvIGRvIHdpdGggdGhlIGRhdGEgdHlwZSB1 c2VkIGZvcgorICAgZ2V0c29ja29wdCgpIGFuZCBzZXRzb2Nrb3B0KCkgb3B0aW9uLWxlbmd0aCBm aWVsZC4gVGhpcyBpcyBub3JtYWxseSBhbgorICAgaW50LCBidXQgc29tZXRpbWVzIGl0J3MgYSBz aG9ydCwgYSBsb25nLCBvciBhbiB1bnNpZ25lZCBhbnkgb2YgdGhvc2UsCisgICBvciBhIHNpemVf dC4gVG8gZml4IHRoZSBjb21waWxhdGlvbiBwcm9ibGVtLCBhZGQgLURTT0NLT1BUX1Q9eHh4IHRv IHRoZQorICAgQ0ZMQUdTIGluIHlvdXIgbWFrZWZpbGUgdGFyZ2V0LCB3aGVyZSB4eHggaXMgdGhl IGFwcHJvcHJpYXRlIHR5cGUgKHVzZQorICAgIm1hbiBnZXRzb2Nrb3B0IiBvciBncmVwIHRocm91 Z2ggeW91ciBzeXN0ZW0vbmV0d29yayBoZWFkZXIgZmlsZXMgdG8KKyAgIGZpbmQgdGhlIG5lZWRl ZCB0eXBlKS4KKworICA4LjEuMy4gRW5hYmxpbmcgSG9zdCBBZGRyZXNzIExpc3RzCisKKyAgIFdo ZW4geW91IGdpdmUgS2VybWl0IGFuIElQIGhvc3QgbmFtZSwgaXQgY2FsbHMgdGhlIHNvY2tldCBy b3V0aW5lCisgICBnZXRob3N0YnluYW1lKCkgdG8gcmVzb2x2ZSBpdC4gZ2V0aG9zdGJ5bmFtZSgp IHJldHVybnMgYSBob3N0ZW50CisgICBzdHJ1Y3QsIHdoaWNoIG1pZ2h0IG9yIG1pZ2h0IG5vdCBu b3QgaW5jbHVkZSBhIGxpc3Qgb2YgYWRkcmVzc2VzOyBpZiBpdAorICAgZG9lcywgdGhlbiBpZiB0 aGUgZmlyc3Qgb25lIGZhaWxzLCBLZXJtaXQgY2FuIHRyeSB0aGUgc2Vjb25kIG9uZSwgYW5kCisg ICBzbyBvbi4gSG93ZXZlciwgdGhpcyB3aWxsIG9ubHkgd29yayBpZiB0aGUgc3ltYm9sICJoX2Fk ZHIiIGlzIGEgbWFjcm8KKyAgIGRlZmluZWQgYXMgImhfYWRkcl9saXN0WzBdIiwgdXN1YWxseSBp biBuZXRkYi5oLiBJZiBpdCBpcywgdGhlbiB5b3UgY2FuCisgICBhY3RpdmF0ZSB0aGlzIGZlYXR1 cmUgYnkgZGVmaW5pbmcgdGhlIGZvbGxvd2luZyBzeW1ib2wgaW4gQ0ZMQUdTOgorCisgIEhBRERS TElTVAorCisgIDguMS40LiBFbmFibGluZyBUZWxuZXQgTkFXUworCisgICBUaGUgVGVsbmV0IE5l Z290aWF0aW9uIEFib3V0IFdpbmRvdyBTaXplIChOQVdTKSBvcHRpb24gcmVxdWlyZXMgdGhlCisg ICBhYmlsaXR5IHRvIGZpbmQgb3V0IHRoZSB0ZXJtaW5hbCBzY3JlZW4ncyBkaW1lbnNpb25zLiBF LmcuIGluIFVuaXgsIHdlCisgICBuZWVkIHNvbWV0aGluZyBsaWtlIGlvY3RsKDAsIFRJT0NHV0lO U1osIC4uLikuIElmIHlvdXIgdmVyc2lvbiBvZgorICAgS2VybWl0IHdhcyBidWlsdCB3aXRoIE5B V1MgY2FwYWJpbGl0eSwgU0hPVyBWRVJTSU9OUyBpbmNsdWRlcyBDS19OQVdTCisgICBhbW9uZyB0 aGUgY29tcGlsZXIgb3B0aW9ucy4gSWYgaXQgZG9lc24ndCwgeW91IGNhbiBhZGQgaXQgYnkgZGVm aW5pbmcKKyAgIENLX05BV1MgYXQgY29tcGlsZSB0aW1lLiBUaGVuLCBpZiB0aGUgY29tcGlsZXIg b3IgbGlua2VyIGNvbXBsYWluIGFib3V0CisgICB1bmRlZmluZWQgb3IgbWlzc2luZyBzeW1ib2xz LCBvciB0aGVyZSBpcyBubyBjb21wbGFpbnQgYnV0IFNIT1cKKyAgIFRFUk1JTkFMIGZhaWxzIHRv IHNob3cgcmVhc29uYWJsZSAiUm93cyA9LCBDb2x1bW5zID0iIHZhbHVlcywgdGhlbiB0YWtlCisg ICBhIGxvb2sgYXQgKG9yIHdyaXRlKSB0aGUgYXBwcm9wcmlhdGUgdHRnd3NpeigpIHJvdXRpbmUu IE9uIHRoZSBvdGhlcgorICAgaGFuZCwgaWYgQ0tfTkFXUyBpcyBkZWZpbmVkIGJ5IGRlZmF1bHQg Zm9yIHlvdXIgc3lzdGVtIChpbgorICAgWzEyMl1ja2NuZXQuaCksIGJ1dCBjYXVzZXMgdHJvdWJs ZSwgeW91IGNhbiBvdmVycmlkZSB0aGlzIGRlZmluaXRpb24gYnkKKyAgIGluY2x1ZGluZyB0aGUg LUROT05BV1Mgc3dpdGNoIG9uIHlvdXIgQ0MgY29tbWFuZCBsaW5lLCB0aHVzIGRpc2FibGluZwor ICAgdGhlIE5BV1MgZmVhdHVyZS4KKworICAgVGhpcyBhcHBlYXJzIHRvIGJlIG5lZWRlZCBhdCBs ZWFzdCBvbiB0aGUgQVQmVCAzQjIsIHdoZXJlIGluCisgICBbMTIzXWNrdXRpby5jLCB0aGUgcm91 dGluZSB0dGd3c2l6KCkgZmluZHMgdGhhdCB0aGUgVElPQ0dXSU5TWiBzeW1ib2wKKyAgIGlzIGRl ZmluZWQgYnV0IGxhY2tzIGRlZmluaXRpb25zIGZvciB0aGUgY29ycmVzcG9uZGluZyB3aW5zaXpl IHN0cnVjdAorICAgYW5kIGl0cyBtZW1iZXJzIHdzX2NvbCBhbmQgd3Nfcm93LgorCisgICBUaGUg VU5JWCB2ZXJzaW9uIG9mIEMtS2VybWl0IGFsc28gdHJhcHMgU0lHV0lOQ0gsIHNvIGl0IGNhbiBz ZW5kIGEgTkFXUworICAgdG8gdGhlIFRlbG5ldCBzZXJ2ZXIgYW55IHRpbWUgdGhlIGxvY2FsIGNv bnNvbGUgdGVybWluYWwgd2luZG93IHNpemUKKyAgIGNoYW5nZXMsIGUuZy4gd2hlbiB5b3Ugc3Ry ZXRjaCBpdCB3aXRoIGEgbW91c2UuIFRoZSBTSUdXSU5DSC10cmFwcGluZworICAgY29kZSBpcyBl bmFibGVkIGlmIFNJR1dJTkNIIGlzIGRlZmluZWQgKGkuZS4gaW4gc2lnbmFsLmgpLiBJZiB0aGlz IGNvZGUKKyAgIHNob3VsZCBjYXVzZSBwcm9ibGVtcywgeW91IGNhbiBkaXNhYmxlIGl0IHdpdGhv dXQgZGlzYWJsaW5nIHRoZSBOQVdTCisgICBmZWF0dXJlIGFsdG9nZXRoZXIsIGJ5IGRlZmluaW5n IE5PU0lHV0lOQ0ggYXQgY29tcGlsZSB0aW1lLgorCisgIDguMS41LiBFbmFibGluZyBJbmNvbWlu ZyBUQ1AvSVAgQ29ubmVjdGlvbnMKKworICAgVGhpcyBmZWF0dXJlIGxldHMgeW91ICJzZXQgaG9z dCAqIHBvcnQiIGFuZCB3YWl0IGZvciBhbiBpbmNvbWluZworICAgY29ubmVjdGlvbiBvbiB0aGUg Z2l2ZW4gcG9ydC4gVGhpcyBmZWF0dXJlIGlzIGVuYWJsZWQgYXV0b21hdGljYWxseSBhdAorICAg Y29tcGlsZSBpZiBUQ1BTT0NLRVQgaXMgZGVmaW5lZCBhbmQgU0VMRUNUIGlzIGFsc28gZGVmaW5l ZC4gQnV0IHdhdGNoCisgICBvdXQsIHNpbXBseSBkZWZpbmluZyBTRUxFQ1Qgb24gdGhlIGNjIGNv bW1hbmQgbGluZSBkb2VzIG5vdCBndWFyYW50ZWUKKyAgIHN1Y2Nlc3NmdWwgY29tcGlsYXRpb24g b3IgbGlua2luZyAoc2VlIFsxMjRdU2VjdGlvbiAxMSkuCisKKyAgIElmIHlvdSB3YW50IHRvIGRp c2FibGUgaW5jb21pbmcgVENQL0lQIGNvbm5lY3Rpb25zLCB0aGVuIGJ1aWxkIEMtS2VybWl0Cisg ICB3aXRoOgorCisgIC1ETk9MSVNURU4KKworICA4LjEuNi4gRGlzYWJsaW5nIFNFVCBUQ1AgT3B0 aW9ucworCisgICBUaGUgbWFpbiByZWFzb24gZm9yIHRoaXMgaXMgYmVjYXVzZSBvZiBoZWFkZXIg ZmlsZSAvIHByb3RvdHlwZQorICAgY29uZmxpY3RzIGF0IGNvbXBpbGUgdGltZSByZWdhcmRpbmcg Z2V0LSAvIHNldHNvY2tvcHQoKS4gSWYgeW91IGNhbid0CisgICBmaXggdGhlbSAod2l0aG91dCBi cmVha2luZyBvdGhlciBidWlsZHMpLCBhZGQgdGhlIGZvbGxvd2luZyBpbiBDRkxBR1M6CisKKyAg LUROT1RDUE9QVFMKKworICA4LjIuIFguMjUKKworICAgWC4yNSBzdXBwb3J0IHJlcXVpcmVzIChh KSBhIFN1biwgKGIpIHRoZSBTdW5MaW5rIHByb2R1Y3QgKGxpYnJhcmllcyBhbmQKKyAgIGhlYWRl ciBmaWxlcyksIGFuZCAoYykgYW4gWC4yNSBjb25uZWN0aW9uIGludG8geW91ciBTdW4uIFNpbWls YXJseSAoaW4KKyAgIEMtS2VybWl0IDcuMCBvciBsYXRlcikgU3RyYXR1cyBWT1MgYW5kIElCTSBB SVguCisKKyAgIEluIFVOSVgsIHNwZWNpYWwgbWFrZWZpbGUgdGFyZ2V0cyBzdW5vczR4MjUgYW5k IHN1bm9zNDF4MjUgKGZvciBTVU5PUworICAgNC4wIGFuZCA0LjEsIHJlc3BlY3RpdmVseSksIG9y IGFpeDQxeDI1LCBhcmUgcHJvdmlkZWQgdG8gYnVpbGQgaW4gdGhpcworICAgZmVhdHVyZSwgYnV0 IHRoZXkgb25seSB3b3JrIGlmIGNvbmRpdGlvbnMgKGEpLShjKSBhcmUgbWV0LiBUbyByZXF1ZXN0 CisgICB0aGlzIGZlYXR1cmUsIGluY2x1ZGUgLURTVU5YMjUgKG9yIC1ESUJNWDI1KSBpbiBDRkxB R1MuCisKKyAgIFNVTlgyNSAob3IgLURJQk1YMjUpIGFuZCBUQ1BTT0NLRVQgY2FuIGJlIGZyZWVs eSBtaXhlZCBhbmQgbWF0Y2hlZCwgYW5kCisgICBzZWxlY3RlZCBieSB0aGUgdXNlciBhdCBydW50 aW1lIHdpdGggdGhlIFNFVCBORVRXT1JLIFRZUEUgY29tbWFuZCBvcgorICAgU0VUIEhPU1Qgc3dp dGNoZXMuCisKKyAgOC4zLiBPdGhlciBOZXR3b3JrcworCisgICBTdXBwb3J0IGZvciBvdGhlciBu ZXR3b3JraW5nIG1ldGhvZHMgLS0gTkVUQklPUywgTEFULCBOYW1lZCBQaXBlcywgZXRjCisgICAt LSBpcyBpbmNsdWRlZCBpbiBjaypuZXQuaCBhbmQgY2sqbmV0LmMgZm9yIGltcGxlbWVudGF0aW9u cyAoc3VjaCBhcworICAgV2luZG93cyBvciBPUy8yKSB3aGVyZSB0aGVzZSBtZXRob2RzIGFyZSBz dXBwb3J0ZWQuCisKKyAgIFByb3Zpc2lvbiBpcyBtYWRlIGluIHRoZSBvcmdhbml6YXRpb24gb2Yg dGhlIG1vZHVsZXMsIGhlYWRlciBmaWxlcywKKyAgIGNvbW1hbmRzLCBldGMsIGZvciBhZGRpdGlv biBvZiBuZXcgbmV0d29yayB0eXBlcyBzdWNoIGFzIERFQ25ldCwgWC4yNQorICAgZm9yIG90aGVy IHN5c3RlbXMgKEhQLVVYLCBWTVMsIGV0YyksIGFuZCBzbyBvbi4gU2VuZCBlbWFpbCB0bworICAg WzEyNV1rZXJtaXRAY29sdW1iaWEuZWR1IGlmIHlvdSBhcmUgd2lsbGluZyBhbmQgYWJsZSB0byB3 b3JrIG9uIHN1Y2ggYQorICAgcHJvamVjdC4KKworICAgWyBbMTI2XUMtS2VybWl0IEhvbWUgXSBb IFsxMjddS2VybWl0IEhvbWUgXQorCisgIDkuIEVYQ0VQVElPTiBIQU5ETElORworCisgICBbIFsx MjhdVG9wIF0gWyBbMTI5XUNvbnRlbnRzIF0gWyBbMTMwXU5leHQgXSBbIFsxMzFdUHJldmlvdXMg XQorCisgICBUaGUgQyBsYW5ndWFnZSBzZXRqbXAvbG9uZ2ptcCBtZWNoYW5pc20gaXMgdXNlZCBm b3IgaGFuZGxpbmcKKyAgIGV4Y2VwdGlvbnMuIFRoZSBqdW1wIGJ1ZmZlciBpcyBvZiB0eXBlIGpt cF9idWYsIHdoaWNoIGFsbW9zdCBldmVyeXdoZXJlCisgICBpcyB0eXBlZGVmJ2QgYXMgYW4gYXJy YXksIGluIHdoaWNoIGNhc2UgeW91IHNob3VsZCBoYXZlIG5vIHRyb3VibGUKKyAgIGNvbXBpbGlu ZyB0aGUgZXhjZXB0aW9uLWhhbmRsaW5nIGNvZGUuIEhvd2V2ZXIsIGlmIHlvdSBhcmUgYnVpbGRp bmcKKyAgIEMtS2VybWl0IGluL2ZvciBhbiBlbnZpcm9ubWVudCB3aGVyZSBqbXBfYnVmIGlzIHNv bWV0aGluZyBvdGhlciB0aGFuIGFuCisgICBhcnJheSAoZS5nLiBhIHN0cnVjdCksIHRoZW4geW91 J2xsIGhhdmUgdG8gZGVmaW5lIHRoZSBmb2xsb3dpbmcgc3ltYm9sOgorCisgIEpCTk9UQVJSQVkK KworICAgWyBbMTMyXUMtS2VybWl0IEhvbWUgXSBbIFsxMzNdS2VybWl0IEhvbWUgXQorCisgIDEw LiBTRUNVUklUWSBGRUFUVVJFUworCisgICBbIFsxMzRdVG9wIF0gWyBbMTM1XUNvbnRlbnRzIF0g WyBbMTM2XU5leHQgXSBbIFsxMzddUHJldmlvdXMgXQorCisgICBTZWN1cml0eSwgaW4gdGhlIHNl bnNlIG9mIHNlY3VyZSBhdXRoZW50aWNhdGlvbiBhbmQgc3Ryb25nIGVuY3J5cHRpb24sCisgICBj YW4gYmUgYnVpbHQgaW50byB2ZXJzaW9uZiBvZiBDLUtlcm1pdCBmb3Igd2hpY2ggdGhlIGFwcHJv cHJpYXRlCisgICBsaWJyYXJpZXMgYW5kIGhlYWRlciBmaWxlcyBhcmUgYXZhaWxhYmxlIChLZXJi ZXJvcyBJViwgS2VyYmVyb3MgViwKKyAgIE9wZW5TU0wsIFNSUCksIGFzIGV4cGxhaW5lZCBpbiBn cmVhdCBkZXRhaWwgaW4gdGhlIEtlcm1pdCBTZWN1cml0eQorICAgUmVmZXJlbmNlCisgICAuIFRo ZSBmb2xsb3dpbmcgc3ltYm9scyBnb3Zlcm4gQy1LZXJtaXQncyBzZWN1cml0eSBmZWF0dXJlcyBh dCBidWlsZAorICAgdGltZToKKworICAgTk9fQVVUSEVOVElDQVRJT04KKyAgICAgICAgICBNZWFu cyBkbyBub3QgY29uZmlndXJlIGFueSBURUxORVQgQVVUSEVOVElDQVRJT04gc3VwcG9ydC4gSXQK KyAgICAgICAgICBpbXBsaWVzIE5PX0VOQ1JZUFRJT04gYW5kIHVuZGVmaW5lcyBhbnkgb2YgdGhl IGF1dGggYW5kIGVuY3J5cHQKKyAgICAgICAgICB0eXBlcy4gSXQgZG9lcyBub3QgdW5kZWZpbmUg Q0tfU1NMIGV2ZW4gdGhvdWdoIGJ1aWxkcyB3aXRoCisgICAgICAgICAgQ0tfU1NMIGNhbm5vdCBz dWNjZWVkIHdpdGhvdXQgQ0tfQVVUSEVOVElDQVRJT04uIChUaGlzIHdpbGwgYmUKKyAgICAgICAg ICBzdXBwb3J0ZWQgaW4gYSBmdXR1cmUgcmVsZWFzZS4gSXQgd2lsbCBiZSBuZWVkZWQgdG8gYWxs b3cKKyAgICAgICAgICBDLUtlcm1pdCB0byBiZSBidWlsdCBvbmx5IGFzIGFuIEZUUCBjbGllbnQu KQorCisgICBOT19LRVJCRVJPUworICAgICAgICAgIE1lYW5zIGRvIG5vdCBjb21waWxlIGluIGFu eSBLRVJCRVJPUyBzdXBwb3J0IHdoZW4KKyAgICAgICAgICBDS19BVVRIRU5USUNBVElPTiBoYXMg YmVlbiBkZWZpbmVkLgorCisgICBOT19TUlAKKyAgICAgICAgICBEbyBub3QgY29tcGlsZSBpbiBh bnkgU1JQIHN1cHBvcnQgd2hlbiBDS19BVVRIRU5USUNBVElPTiBoYXMKKyAgICAgICAgICBiZWVu IGRlZmluZWQuCisKKyAgIE5PX1NTTAorICAgICAgICAgIERvIG5vdCBjb21waWxlIGluIGFueSBT U0wvVExTIHN1cHBvcnQKKworICAgTk9fRU5DUllQVElPTgorICAgICAgICAgIERvIG5vdCBjb21w aWxlIGluIGFueSBUZWxuZXQgZW5jcnlwdGlvbiBzdXBwb3J0LiBJdCBkb2VzIG5vdAorICAgICAg ICAgIGFmZmVjdCB0aGUgdXNlIG9mIFNTTC9UTFMKKworICAgTk9TU0gKKyAgICAgICAgICBEbyBu b3QgY29tcGlsZSBpbiBhbnkgU1NIIHN1cHBvcnQgd2hldGhlciBpbnRlcm5hbCBvciBleHRlcm5h bAorCisgICBDS19BVVRIRU5USUNBVElPTgorICAgICAgICAgIFRlbG5ldCBBVVRIRU5USUNBVElP TiBzdXBwb3J0LiAoQWxzbywgcmVxdWlyZWQgaWYgU1NML1RMUworICAgICAgICAgIHN1cHBvcnQg aXMgZGVzaXJlZC4pIE9uIG1vc3QgcGxhdGZvcm1zIHRoaXMgZG9lcyBub3QgYXV0b2RlZmluZQor ICAgICAgICAgIGFueSBhdXRoZW50aWNhdGlvbiBtZWNoYW5pc21zIHN1Y2ggYXMgS2VyYmVyb3Mg ViwgS2VyYmVyb3MgSVYsCisgICAgICAgICAgU1JQLCAuLi4gVGhvc2UgbmVlZCB0byBiZSBkZWZp bmVkIHNlcGFyYXRlbHkuCisKKyAgIENLX0tFUkJFUk9TCisgICAgICAgICAgRGVmaW5lZCBhdXRv bWF0aWNhbGx5IHdoZW4gS1JCNCwgS1JCNSwgb3IgS1JCNTI0IGFyZSBkZWZpbmVkLgorICAgICAg ICAgIEltcGxpZXMgdGhhdCBzb21lIHZlcnNpb24gb2YgS2VyYmVyb3MgaXMgaW4gdXNlLgorCisg ICBLUkI0CisgICAgICAgICAgU2hvdWxkIGJlIGRlZmluZWQgd2hlbiBLZXJiZXJvcyBJViBzdXBw b3J0IGlzIGRlc2lyZWQuCisKKyAgIEtSQjUKKyAgICAgICAgICBTaG91bGQgYmUgZGVmaW5lZCB3 aGVuIEtlcmJlcm9zIFYgc3VwcG9ydCBpcyBkZXNpcmVkLgorCisgICBLUkI1MjQKKyAgICAgICAg ICBTaG91bGQgYmUgZGVmaW5lZCBpZiBib3RoIEtlcmJlcm9zIFYgYW5kIEtlcmJlcm9zIElWIGFy ZSB1c2VkCisgICAgICAgICAgYW5kIHRoZSBLZXJiZXJvcyBJViBzdXBwb3J0IGlzIHByb3ZpZGVk IGJ5IHRoZSBNSVQgS2VyYmVyb3MgSVYKKyAgICAgICAgICBjb21wYXRpYmlsaXR5IGxpYnJhcnkg aW4gdGhlIGN1cnJlbnQgS2VyYmVyb3MgNSBkaXN0cmlidXRpb24uCisKKyAgIEtSQjVfVTJVCisg ICAgICAgICAgU2hvdWxkIGJlIGRlZmluZWQgaWYgS1JCNSBpcyBkZWZpbmVkIGFuZCBLZXJiZXJv cyA1IFVzZXIgdG8gVXNlcgorICAgICAgICAgIG1vZGUgaXMgZGVzaXJlZC4KKworICAgSEVJTURB TAorICAgICAgICAgIFNob3VsZCBiZSBkZWZpbmVkIGlmIEtlcmJlcm9zIFYgc3VwcG9ydCBpcyBw cm92aWRlZCBieSBIRUlNREFMLgorICAgICAgICAgIFN1cHBvcnQgZm9yIHRoaXMgb3B0aW9uIGlz IG5vdCBjb21wbGV0ZSBpbiBDLUtlcm1pdCA4LjAuIEFueW9uZQorICAgICAgICAgIGludGVyZXN0 ZWQgaW4gd29ya2luZyBvbiB0aGlzIHNob3VsZCBjb250YWN0IGtlcm1pdC1zdXBwb3J0LgorCisg ICBDS19TUlAKKyAgICAgICAgICBTaG91bGQgYmUgZGVmaW5lZCBpZiBTUlAgc3VwcG9ydCBpcyBk ZXNpcmVkLgorCisgICBDS19FTkNSWVBUSU9OCisgICAgICAgICAgU2hvdWxkIGJlIGRlZmluZWQg aWYgVEVMTkVUIEVOQ1JZUFRJT04gb3B0aW9uIHN1cHBvcnQgaXMKKyAgICAgICAgICBkZXNpcmVk LiBUaGlzIG9wdGlvbiBkb2VzIG5vdCBkZWZpbmUgYW55IHBhcnRpY3VsYXIgZW5jcnlwdGlvbgor ICAgICAgICAgIHR5cGVzLiBUaGF0IHNob3VsZCBiZSBkb25lIGJ5IGRlZmluaW5nIENLX0RFUyBv ciBDS19DQVNULgorCisgICBDS19ERVMKKyAgICAgICAgICBTaG91bGQgYmUgZGVmaW5lZCBpZiBl aXRoZXIgREVTIG9yIDNERVMgVGVsbmV0IEVuY3J5cHRpb24gb3B0aW9uCisgICAgICAgICAgc3Vw cG9ydCBpcyBkZXNpcmVkLgorCisgICBMSUJERVMKKyAgICAgICAgICBJZiBDS19ERVMgaXMgZGVm aW5lZCBhbmQgREVTIHN1cHBvcnQgaXMgYmVpbmcgcHJvdmlkZWQgYnkgZWl0aGVyCisgICAgICAg ICAgRXJpYyBZb3VuZydzIGxpYmRlcy5hIG9yIE9wZW5TU0wgMC45LjZ4IG9yIGVhcmxpZXIsIHRo aXMgb3B0aW9uCisgICAgICAgICAgbXVzdCBiZSBkZWZpbmVkLiBJZiBpdCBpcyBub3QgZGVmaW5l ZCwgaXQgd2lsbCBiZSBhc3N1bWVkIHRoYXQKKyAgICAgICAgICBERVMgc3VwcG9ydCBpcyBwcm92 aWRlZCBieSB0aGUgTUlUIEtlcmJlcm9zIElWIGxpYnJhcmllcy4KKworICAgQ0tfQ0FTVAorICAg ICAgICAgIFNob3VsZCBiZSBkZWZpbmVkIGlmIENBU1QgVGVsbmV0IEVuY3J5cHRpb24gb3B0aW9u IHN1cHBvcnQgaXMKKyAgICAgICAgICBkZXNpcmVkCisKKyAgIENLX1NTTAorICAgICAgICAgIFNo b3VsZCBiZSBkZWZpbmVkIGlmIFNTTC9UTFMgc3VwcG9ydCAoT3BlblNTTCkgaXMgZGVzaXJlZC4K KworICAgU1NMX0tSQjUKKyAgICAgICAgICBJZiBLUkI1IGlzIGRlZmluZWQsIGFuZCBPcGVuU1NM IGlzIGJ1aWx0IHRvIHN1cHBvcnQgdGhlIEtlcmJlcm9zCisgICAgICAgICAgNSBjaXBoZXJzLCB0 aGVuIHlvdSBzaG91bGQgZGVmaW5lIFNTTF9LUkI1CisKKyAgIE5PU1NMS1JCNQorICAgICAgICAg IElmIHlvdSBhcmUgdXNpbmcgT3BlblNTTCAwLjkuNyBvciBoaWdoZXIgYW5kIGRvIG5vdCB3aXNo IHRvCisgICAgICAgICAgYnVpbGQgd2l0aCBzdXBwb3J0IGZvciBLZXJiZXJvcyA1IFRMUyBjaXBo ZXJzLCB0aGlzIG9wdGlvbiBtdXN0CisgICAgICAgICAgYmUgZGVmaW5lZC4KKworICAgWkxJQgor ICAgICAgICAgIElmIHlvdSBhcmUgdXNpbmcgT3BlblNTTCAwLjkuNiBvciBoaWdoZXIgYW5kIGl0 IGhhcyBiZWVuCisgICAgICAgICAgY29tcGlsZWQgd2l0aCBzdXBwb3J0IGZvciBaTElCIGNvbXBy ZXNzaW9uLCB0aGlzIG9wdGlvbiBzaG91bGQKKyAgICAgICAgICBiZSBkZWZpbmVkIHRvIGVuYWJs ZSBLZXJtaXQgdG8gcHJvcGVybHkgZW5hYmxlIHRoZSB1c2Ugb2YKKyAgICAgICAgICBjb21wcmVz c2lvbi4KKworICAgU1NIQ01ECisgICAgICAgICAgRGVmaW5lZCBmb3IgQy1LZXJtaXQgdG8gZW5h YmxlIHRoZSB1c2Ugb2YgZXh0ZXJuYWwgU1NIIGNsaWVudHMKKyAgICAgICAgICBmcm9tIHRoZSBL ZXJtaXQgY29tbWFuZCBsYW5ndWFnZQorCisgICBTU0hCVUlMVElOCisgICAgICAgICAgRGVmaW5l ZCBmb3IgS2VybWl0IGltcGxlbWVudGF0aW9ucyB0aGF0IGhhdmUgaW50ZWdyYXRlZCBTU0gKKyAg ICAgICAgICBzdXBwb3J0LiBDdXJyZW50bHkgb25seSBXaW5kb3dzLgorCisgICBBTllTU0gKKyAg ICAgICAgICBEZWZpbmVkIGlmIGVpdGhlciBTU0hDTUQgb3IgU1NIQlVJTFRJTiBhcmUgZGVmaW5l ZC4KKworICAgQ0tfU05ETE9DCisgICAgICAgICAgVGVsbmV0IFNlbmQgTG9jYXRpb24gc3VwcG9y dC4KKworICAgTk9TTkRMT0MKKyAgICAgICAgICBEbyBub3QgaW5jbHVkZSBUZWxuZXQgU2VuZCBM b2NhdGlvbiBzdXBwb3J0LgorCisgICBDS19YRElTUExPQworICAgICAgICAgIFRlbG5ldCBYLURp c3BsYXkgTG9jYXRpb24gc3VwcG9ydC4gRGV0ZXJtaW5lcyBpZiB0aGUgWC1EaXNwbGF5CisgICAg ICAgICAgbG9jYXRpb24gaW5mb3JtYXRpb24gaXMgc2VudCB0byB0aGUgVGVsbmV0IHNlcnZlciBl aXRoZXIgdmlhCisgICAgICAgICAgVGVsbmV0IFhESVNQTE9DIG9yIE5FVy1FTlYgb3B0aW9ucy4K KworICAgTk9YRElTUExPQworICAgICAgICAgIERvIG5vdCBpbmNsdWRlIFRlbG5ldCBYLURpc3Bs YXkgTG9jYXRpb24gc3VwcG9ydC4KKworICAgQ0tfRk9SV0FSRF9YCisgICAgICAgICAgVGVsbmV0 IEZvcndhcmQgWCBXaW5kb3dzIFNlc3Npb24gRGF0YSBvcHRpb24uIFVzZWQgdG8gcHJvdGVjdAor ICAgICAgICAgIHRoZSBwcml2YWN5IGFuZCBpbnRlZ3JpdHkgb2YgWCBXaW5kb3dzIFNlc3Npb25z IHdoZW4gc2VjdXJlCisgICAgICAgICAgdGVsbmV0IHNlc3Npb25zIGFyZSBpbiB1c2UuCisKKyAg IE5PRk9SV0FSRFgKKyAgICAgICAgICBEbyBub3QgaW5jbHVkZSBUZWxuZXQgRm9yd2FyZCBYIFdp bmRvd3MgU2Vzc2lvbiBEYXRhIG9wdGlvbi4KKworICAgQmVzaWRlcyB0aGUgc3Ryb25nIGZvcm1z IG9mIHNlY3VyaXR5IGxpc3RlZCBhYm92ZSwgQy1LZXJtaXQgYWxzbworICAgZW1ib2RpZXMgdmFy aW91cyBpbnRlcm5hbCBzZWN1cml0eSBmZWF0dXJlcywgaW5jbHVkaW5nOgorCisgICBOT1BVU0gK KyAgICAgICAgICBDb21waWxpbmcgd2l0aCB0aGUgTk9QVVNIIHN5bWJvbCBkZWZpbmVkIHJlbW92 ZXMgYWxsIHRoZSAic2hlbGwKKyAgICAgICAgICBlc2NhcGUiIGZlYXR1cmVzIGZyb20gdGhlIHBy b2dyYW0sIGluY2x1ZGluZyB0aGUgUFVTSCwgUlVOLCBhbmQKKyAgICAgICAgICBTUEFXTiBjb21t YW5kcywgdGhlICIhIiBhbmQgIkAiIGNvbW1hbmQgcHJlZml4ZXMsIE9QRU4gIVJFQUQsCisgICAg ICAgICAgT1BFTiAhV1JJVEUsIGpvYiBjb250cm9sIChpbmNsdWRpbmcgdGhlIFNVU1BFTkQgY29t bWFuZCksIHRoZQorICAgICAgICAgIFJFRElSRUNUIGNvbW1hbmQsIHNoZWxsL0RDTCBlc2NhcGUg ZnJvbSBDT05ORUNUIG1vZGUsIGFzIHdlbGwgYXMKKyAgICAgICAgICB0aGUgc2VydmVyJ3MgZXhl Y3V0aW9uIG9mIFJFTU9URSBIT1NUIGNvbW1hbmRzIChhbmQsIG9mIGNvdXJzZSwKKyAgICAgICAg ICB0aGUgRU5BQkxFIEhPU1QgY29tbWFuZCkuIEFkZCBOT0RJU1BPIHRvIGFsc28gcHJldmVudCBh Y2NlcHRhbmNlCisgICAgICAgICAgb2YgaW5jb21pbmcgTUFJTCBvciBSRU1PVEUgUFJJTlQgZmls ZXMuIEZvciBVTklYLCBhbHNvIGJlIHN1cmUKKyAgICAgICAgICB0byByZWFkIFsxMzhdU2VjdGlv biAxMSBvZiB0aGUgWzEzOV1Vbml4IEMtS2VybWl0IEluc3RhbGxhdGlvbgorICAgICAgICAgIElu c3RydWN0aW9ucy4gYWJvdXQgc2V0W3VnXWlkIGNvbmZpZ3VyYXRpb24uIEFkZGl0aW9uYWwKKyAg ICAgICAgICByZXN0cmljdGlvbnMgY2FuIGJlIGVuZm9yY2VkIHdoZW4gaW4gc2VydmVyIG1vZGU7 IHJlYWQgYWJvdXQgdGhlCisgICAgICAgICAgRElTQUJMRSBjb21tYW5kIGluIHRoZSB1c2VyIG1h bnVhbC4KKworICAgTk9DQ1RSQVAKKyAgICAgICAgICBDb21waWxpbmcgd2l0aCBOT0NDVFJBUCBw cmV2ZW50cyB0aGUgdHJhcHBpbmcgb2YgU0lHSU5UIGJ5CisgICAgICAgICAgS2VybWl0LiBUaHVz IGlmIHRoZSB1c2VyIGdlbmVyYXRlcyBhIFNJR0lOVCBzaWduYWwgKGUuZy4gYnkKKyAgICAgICAg ICB0eXBpbmcgdGhlIHN5c3RlbSdzIGludGVycnVwdCBjaGFyYWN0ZXIpLCBLZXJtaXQgd2lsbCBl eGl0CisgICAgICAgICAgaW1tZWRpYXRlbHksIHJhdGhlciB0aGFuIHJldHVybmluZyB0byBpdHMg cHJvbXB0LgorCisgICBOT1BVU0ggYW5kIE5PQ0NUUkFQIHRvZ2V0aGVyIGFsbG93IEtlcm1pdCB0 byBiZSBydW4gZnJvbSByZXN0cmljdGVkCisgICBzaGVsbHMsIHByZXZlbnRpbmcgYWNjZXNzIHRv IHN5c3RlbSBmdW5jdGlvbnMuCisKKyAgIFsgWzE0MF1DLUtlcm1pdCBIb21lIF0gWyBbMTQxXUtl cm1pdCBIb21lIF0KKworICAxMS4gRU5BQkxJTkcgU0VMRUNUKCkKKworICAgWyBbMTQyXVRvcCBd IFsgWzE0M11Db250ZW50cyBdIFsgWzE0NF1OZXh0IF0gWyBbMTQ1XVByZXZpb3VzIF0KKworICAg S2VybWl0IHdvcmtzIGJlc3QgaWYgaXQgY2FuIGRvIG5vbmJsb2NraW5nIHJlYWRzLCBub25kZXN0 cnVjdGl2ZSBpbnB1dAorICAgYnVmZmVyIGNoZWNraW5nLCBhbmQgbWlsbGlzZWNvbmQgc2xlZXBz LiBBbGwgb2YgdGhlc2UgZnVuY3Rpb25zIGNhbiBiZQorICAgYWNjb21wbGlzaGVkIGJ5IHRoZSBz ZWxlY3QoKSBmdW5jdGlvbiwgd2hpY2gsIHVuZm9ydHVuYXRlbHksIGlzIG5vdAorICAgdW5pdmVy c2FsbHkgYXZhaWxhYmxlLiBGdXJ0aGVybW9yZSwgc2VsZWN0KCkgaXMgcmVxdWlyZWQgaWYgaW5j b21pbmcKKyAgIFRDUC9JUCBjb25uZWN0aW9ucyBhcmUgdG8gYmUgc3VwcG9ydGVkLgorCisgICBz ZWxlY3QoKSB3YXMgaW50cm9kdWNlZCB3aXRoIEJlcmtlbGV5IFVOSVgsIHJlamVjdGVkIGJ5IEFU JlQgZm9yIFN5c3RlbQorICAgViwgYnV0IGlzIGdyYWR1YWxseSBjcmVlcGluZyBpbiB0byBhbGwg VU5JWCB2ZXJzaW9ucyAoYW5kIG90aGVyCisgICBvcGVyYXRpbmcgc3lzdGVtcyB0b28pIGJ5IHZp cnR1ZSBvZiBpdHMgcHJlc2VuY2UgaW4gdGhlIHNvY2tldHMKKyAgIGxpYnJhcnksIHdoaWNoIGlz IG5lZWRlZCBmb3IgVENQL0lQLiBBVCZUIFNWSUQgZm9yIFN5c3RlbSBWIFI0IGluY2x1ZGVzCisg ICBzZWxlY3QoKSwgYnV0IHRoYXQgZG9lcyBub3QgbWVhbiB0aGF0IGFsbCBTVlI0IGltcGxlbWVu dGF0aW9ucyBoYXZlIGl0LgorCisgICBGdXJ0aGVybW9yZSwgZXZlbiB3aGVuIHNlbGVjdCgpIGlz IGF2YWlsYWJsZSwgaXQgbWlnaHQgd29yayBvbmx5IG9uCisgICBzb2NrZXQgZmlsZSBkZXNjcmlw dG9ycywgYnV0IG5vdCBvbiBvdGhlcnMgbGlrZSBzZXJpYWwgcG9ydHMsIHBpcGVzLAorICAgZXRj LiBGb3IgZXhhbXBsZSwgaW4gQU9TL1ZTIGFuZCBCZU9TLCBpdCB3b3JrcyBvbmx5IHdpdGggZmls ZQorICAgZGVzY3JpcHRvcnMgdGhhdCB3ZXJlIGNyZWF0ZWQgYnkgc29ja2V0KCkgYW5kIG9wZW5l ZCBieSBjb25uZWN0KCkgb3IKKyAgIGFjY2VwdCgpLgorCisgICBPdGhlciBhbHRlcm5hdGl2ZXMg aW5jbHVkZSBwb2xsKCkgYW5kIHJkY2hrKCkuIE9ubHkgb25lIG9mIHRoZXNlIHRocmVlCisgICBm dW5jdGlvbnMgc2hvdWxkIGJlIGluY2x1ZGVkLiBUaGUgZm9sbG93aW5nIHN5bWJvbHMgZ292ZXJu IHRoaXM6CisKKyAgICAgU0VMRUNUICBVc2Ugc2VsZWN0KCkgKEJTRCwgb3Igc3lzdGVtcyB3aXRo IHNvY2tldHMgbGlicmFyaWVzKQorICAgICBDS19QT0xMIFVzZSBwb2xsKCkgICAoU3lzdGVtIFYp CisgICAgIFJEQ0hLICAgVXNlIHJkY2hrKCkgIChTQ08gWEVOSVggYW5kIFVOSVgpCisKKyAgIElm IHlvdXIgc3lzdGVtIHN1cHBvcnRzIHRoZSBzZWxlY3QoKSBmdW5jdGlvbiwgYnV0IHlvdXIgdmVy c2lvbiBvZgorICAgQy1LZXJtaXQgZG9lcyBub3QsIHRyeSBhZGRpbmc6CisKKyAgLURTRUxFQ1QK KworICAgdG8gdGhlIENGTEFHUywgYW5kIHJlbW92aW5nIC1EUkRDSEsgb3IgLURDS19QT0xMIGlm IGl0IGlzIHRoZXJlLiBJZiB5b3UKKyAgIGdldCBjb21waWxhdGlvbiBlcnJvcnMsIHNvbWUgYWRq dXN0bWVudHMgdG8gY2sqdGlvLmMgYW5kL29yIGNrKm5ldC5jCisgICBtaWdodCBiZSBuZWVkZWQ7 IHNlYXJjaCBmb3IgU0VMRUNUICh1cHBlcmNhc2UpIGluIHRoZXNlIGZpbGVzIChub3RlCisgICB0 aGF0IHRoZXJlIGFyZSBzZXZlcmFsIHZhcmlhdGlvbnMgb24gdGhlIGNhbGxpbmcgY29udmVudGlv bnMgZm9yCisgICBzZWxlY3QoKSkuCisKKyAgIFZhcmlvdXMgbWFjcm9zIGFuZCBkYXRhIHR5cGVz IG5lZWQgdG8gYmUgZGVmaW5lZCBpbiBvcmRlciB0byB1c2UKKyAgIHNlbGVjdCgpLiBVc3VhbGx5 IHRoZXNlIGFyZSBwaWNrZWQgdXAgZnJvbSA8dHlwZXMuaD4gb3IgPHN5cy90eXBlcy5oPi4KKyAg IEJ1dCBvbiBzb21lIHN5c3RlbXMsIHRoZXkgYXJlIGluIDxzeXMvc2VsZWN0Lmg+LiBJbiB0aGF0 IGNhc2UsIGFkZCB0aGUKKyAgIGZvbGxvd2luZzoKKworICAtRFNFTEVDVF9ICisKKyAgIHRvIHRo ZSBDRkxBR1MgdG8gdGVsbCBDLUtlcm1pdCB0byAjaW5jbHVkZSA8c3lzL3NlbGVjdC5oPi4gQSBn b29kCisgICBpbmRpY2F0aW9uIHRoYXQgeW91IG5lZWQgdG8gZG8gdGhpcyB3b3VsZCBiZSBpZiB5 b3UgZ2V0IGNvbXBpbGUtdGltZQorICAgY29tcGxhaW50cyBhYm91dCAiZmRfc2V0IiBvciAiRkRf U0VUIiBub3QgYmVpbmcgZGVjbGFyZWQgb3IgZGVmaW5lZC4KKworICAgSW4gVU5JWCwgdGhlIHVz ZSBvZiBzZWxlY3QoKSB2cyBmb3JrKCkgaW4gdGhlIENPTk5FQ1QgY29tbWFuZCBpcworICAgaW5k ZXBlbmRlbnQgb2YgdGhlIGFib3ZlIGNvbnNpZGVyYXRpb25zLCBhbmQgaXMgZ292ZXJuZWQgYnkg Y2hvb3NpbmcgYQorICAgcGFydGljdWxhciBtYWtlZmlsZSB0YXJnZXQuCisKKyAgIEFzIG9mIEMt S2VybWl0IDcuMCwgc2VsZWN0KCkgaXMgYWxzbyB0aGUgcHJlZmVycmVkIGNvbnRyb2wgbWVjaGFu aXNtCisgICBmb3IgdGhlIENPTk5FQ1QgY29tbWFuZC4gVW5mb3J0dW5hdGVseSwgdGhlIHN0cnVj dHVyZXMgdXNlZCBieSB0aGUKKyAgIG9yaWdpbmFsIFVOSVggQ09OTkVDVCBjb21tYW5kLCBiYXNl ZCBvbiBmb3JrKCksIGFuZCB0aG9zZSB1c2VkIGJ5CisgICBzZWxlY3QoKSwgYXJlIHNvIGRpZmZl cmVudCwgaXQgd2FzIG5vdCBwcmFjdGljYWwgdG8gaW1wbGVtZW50IHRoZW0gYm90aAorICAgaW4g b25lIG1vZHVsZS4gU28gdGhlIHNlbGVjdCgpLWJhc2VkIENPTk5FQ1QgY29tbWFuZCBtb2R1bGUg Zm9yIFVOSVggaXMKKyAgIFsxNDZdY2t1Y25zLmMsIGFuZCB0aGUgZm9yay1iYXNlZCBvbmUgcmVt YWlucyBbMTQ3XWNrdWNvbi5jLiBUbyBjaG9vc2UKKyAgIHRoZSBmb3JrLWJhc2VkIG9uZSwgd2hp Y2ggaXMgbW9yZSBwb3J0YWJsZSAoYnV0IHNsb3dlciBhbmQgbW9yZQorICAgZnJhZ2lsZSksIHVz ZSAid2VybWl0IiBhcyB0aGUgbWFrZSB0YXJnZXQuIFRvIGNob29zZSB0aGUgc2VsZWN0LWJhc2Vk CisgICBvbmUsIHVzZSAieGVybWl0Ii4gT25seSBkbyB0aGlzIGlmIHlvdSBjYW4gdmVyaWZ5IHRo YXQgdGhlIENPTk5FQ1QKKyAgIGNvbW1hbmQgd29ya3Mgb24gc2VyaWFsIGNvbm5lY3Rpb25zIGFu ZCBQSVBFIGNvbm5lY3Rpb25zIGFzIHdlbGwgYXMgVENQCisgICBjb25uZWN0aW9ucy4KKworICAg ICBUaGUgc2VsZWN0KCktYmFzZWQgVW5peCBDT05ORUNUIG1vZHVsZSwgY2t1Y25zLmMsIG11c3Qg YmUgdXNlZCBpZgorICAgICBlbmNyeXB0aW9uIGlzIHRvIGJlIGRvbmUsIHNpbmNlIHRoZSBmb3Jr KCkgdmVyc2lvbiAoY2t1Y29uLmMpIGxvc2VzCisgICAgIGl0cyBhYmlsaXR5IHRvIHNoYXJlIHZp dGFsIHN0YXRlIGluZm9ybWF0aW9uIGJldHdlZW4gdGhlIHR3byBmb3Jrcy4KKyAgICAgQWxzbyBu b3RlIHRoYXQgdGhlIHNlbGVjdCgpIHZlcnNpb24gaXMgc3VwZXJpb3IgaW4gbWFueSBvdGhlciB3 YXlzCisgICAgIHRvby4gRm9yIGV4YW1wbGUsIGl0IHJlY292ZXJzIGJldHRlciBmcm9tIGV4dGVy aW9yIGtpbGxpbmcsIGZvcmNlZAorICAgICBkaXNjb25uZWN0aW9ucywgZXRjLCBwbHVzIGl0IGdv ZXMgZmFzdGVyLgorCisgICBTSE9XIFZFUlNJT05TIHRlbGxzIHdoZXRoZXIgdGhlIENPTk5FQ1Qg bW9kdWxlIHVzZXMgZm9yaygpIG9yIHNlbGVjdCgpLgorCisgICBDLUtlcm1pdCA4LjAgYWRkcyBs ZWFybmVkIHNjcmlwdCBjYXBhYmlsaXR5LCB3aGljaCBkZXBlbmRzIG9uIHNlbGVjdCgpLgorICAg QWxsIHRoZSAid2VybWl0IiBiYXNlZCB0YXJnZXRzIChhcyBvcHBvc2VkIHRvICJ4ZXJtaXQiKSBo YWQgTk9MRUFSTgorICAgYWRkZWQgdG8gdGhlbS4gV2hlbmV2ZXIgY2hhbmdpbmcgYSB0YXJnZXQg b3ZlciBmcm9tIHdlcm1pdCB0byB4ZXJtaXQsCisgICBhbHNvIHJlbWVtYmVyIHRvIHJlbW92ZSBO T0xFQVJOLgorCisgICBbIFsxNDhdQy1LZXJtaXQgSG9tZSBdIFsgWzE0OV1LZXJtaXQgSG9tZSBd CisKKyAgMTIuIEkvTyBSRURJUkVDVElPTgorCisgICBbIFsxNTBdVG9wIF0gWyBbMTUxXUNvbnRl bnRzIF0gWyBbMTUyXU5leHQgXSBbIFsxNTNdUHJldmlvdXMgXQorCisgICBUaGUgUkVESVJFQ1Qg Y29tbWFuZCBhbGxvd3MgYSBsb2NhbCBwcm9ncmFtIHRvIGJlIHJ1biB3aXRoIGl0cyBpL28KKyAg IHJlZGlyZWN0ZWQgb3ZlciB0aGUgY29tbXVuaWNhdGlvbnMgY29ubmVjdGlvbi4gWW91ciB2ZXJz aW9uIG9mIEMtS2VybWl0CisgICBoYXMgYSBSRURJUkVDVCBjb21tYW5kIGlmIGl0IHdhcyBidWls dCB3aXRoIHRoZSBmb2xsb3dpbmcgQ0ZMQUc6CisKKyAgLURDS19SRURJUgorCisgICBUaGlzLCBp biB0dXJuLCBpcyBwb3NzaWJsZSBvbmx5IGlmIHRoZSB1bmRlcmx5aW5nIEFQSSBpcyB0aGVyZS4g SW4gdGhlCisgICBjYXNlIG9mIFVOSVggdGhpcyBpcyBqdXN0IHRoZSB3YWl0KCkgc3lzdGVtIGNh bGwsIHNvIGFsbCBVTklYIHZlcnNpb25zCisgICBnZXQgdGhpcyBmZWF0dXJlIGFzIG9mIDYuMC4x OTIgKGVhcmxpZXIgdmVyc2lvbnMgbmVlZGVkIGEgPHN5cy93YWl0Lmg+CisgICBoZWFkZXIgZmls ZSBkZWZpbmluZyB0aGUgc3ltYm9scyBXSUZFWElURUQgYW5kIFdFWElUU1RBVFVTKS4KKworICAg QXMgb2YgdmVyc2lvbiA3LjAsIGZpbGUgdHJhbnNmZXIgY2FuIGJlIGRvbmUgdXNpbmcgcGlwZXMg YW5kIGZpbHRlcnMuCisgICBUbyBlbmFibGUgdGhpcyBmZWF0dXJlLCAjZGVmaW5lIFBJUEVTRU5E IChhbmQgZmlsbCBpbiB0aGUgY29kZSkuIFRvCisgICBkaXNhYmxlIG9uIHN5c3RlbXMgd2hlcmUg aXQgaXMgbm9ybWFsbHkgZW5hYmxlZCwgZGVmaW5lIE5PUElQRVNFTkQuCisgICBUaGlzIGZlYXR1 cmUgaXMsIG9mIGNvdXJzZSwgYWxzbyBkaXNhYmxlZCBieSBidWlsZGluZyB3aXRoIE5PUFVTSCAo b3IKKyAgIGdpdmluZyB0aGUgIm5vcHVzaCIgY29tbWFuZCBhdCBydW50aW1lKS4KKworICAgQy1L ZXJtaXQgNy4wIGFsc28gYWRkcyB0aGUgUElQRSBhbmQgU0VUIEhPU1QgL0NPTU1BTkQgY29tbWFu ZHMsIHdoaWNoCisgICBwcm92aWRlIGFub3RoZXIgZm9ybSBvZiByZWRpcmVjdGlvbi4gVGhpcyBm ZWF0dXJlIGlzIHNlbGVjdGVkIHdpdGgKKyAgIC1ETkVUQ01ELiBDS19SRElSIG11c3QgYWxzbyBi ZSBkZWZpbmVkLCBzaW5jZSB0aGUgc2FtZSBtZWNoYW5pc21zIGFyZQorICAgdXNlZCBpbnRlcm5h bGx5LgorCisgICBbIFsxNTRdQy1LZXJtaXQgSG9tZSBdIFsgWzE1NV1LZXJtaXQgSG9tZSBdCisK KyAgMTMuIEZMT0FUSU5HLVBPSU5UIE5VTUJFUlMsIFRJTUVSUywgQU5EIEFSSVRITUVUSUMKKwor ICAgWyBbMTU2XVRvcCBdIFsgWzE1N11Db250ZW50cyBdIFsgWzE1OF1OZXh0IF0gWyBbMTU5XVBy ZXZpb3VzIF0KKworICAgRmxvYXRpbmctcG9pbnQgc3VwcG9ydCB3YXMgYWRkZWQgaW4gQy1LZXJt aXQgNy4wLgorCisgICBGbG9hdGluZy1wb2ludCBudW1iZXJzIGFyZSBlbmFibGVkIGludGVybmFs bHksIGF0IGxlYXN0IGZvciB1c2UgaW4KKyAgIGhpZ2gtcHJlY2lzaW9uIGZpbGUtdHJhbnNmZXIg dGltZXJzIGFuZCBzdGF0aXN0aWNzLCB1bmxlc3MgdGhlCisgICBmb2xsb3dpbmcgc3ltYm9sIGlz IGRlZmluZWQgYXQgY29tcGlsZSB0aW1lOgorCisgIC1ETk9GTE9BVAorCisgICBUaGlzIG1pZ2h0 IGJlIG5lY2Vzc2FyeSBvbiBvbGQgUENzIHRoYXQgZG8gbm90IGhhdmUgYnVpbHQtaW4KKyAgIGZs b2F0aW5nLXBvaW50IGhhcmR3YXJlLgorCisgICBXaGVuIE5PRkxPQVQgaXMgbm90IGRlZmluZWQs IHRoZSBmb2xsb3dpbmcgc3ltYm9sIHRlbGxzIHdoaWNoCisgICBmbG9hdGluZy1wb2ludCB0eXBl IHRvIHVzZToKKworICAtRENLRkxPQVQ9eHh4eAorCisgICBUaGUgdmFsdWUgaXMgZWl0aGVyICJk b3VibGUiIChub3JtYWwgZm9yIDMyLSBhbmQgMTYtYml0IGFyY2hpdGVjdHVyZXMpCisgICBvciAi ZmxvYXQiIChub3JtYWwgZm9yIDY0LWJpdCBhcmNoaXRlY3R1cmVzKS4KKworICAgQy1LZXJtaXQg Y2FuIGJlIGNvbmZpZ3VyZWQgdG8gdXNlIGhpZ2gtcHJlY2lzaW9uIGZpbGUtdHJhbnNmZXIgdGlt ZXJzCisgICBmb3IgbW9yZSBhY2N1cmF0ZSBzdGF0aXN0aWNzLiBUaGlzIGZlYXR1cmUgaXMgZW5h YmxlZCB3aXRoOgorCisgIC1ER0ZUSU1FUgorCisgICBhbmQgZGlzYWJsZWQgd2l0aDoKKworICAt RE5PR0ZUSU1FUgorCisgICBJZiB5b3UgdHJ5IHRvIGJ1aWxkIHdpdGggLURHRlRJTUVSIGJ1dCB5 b3UgZ2V0IGNvbXBpbGF0aW9uIGVycm9ycywKKyAgIGVpdGhlciBmaXggdGhlbSAoYW5kIHNlbmQg ZW1haWwgdG8ga2VybWl0QGNvbHVtYmlhLmVkdSB0ZWxsaW5nIHdoYXQgeW91CisgICBkaWQpLCBv ciBlbHNlIGdpdmUgdXAgYW5kIHVzZSAtRE5PR0ZUSU1FUiAob3IgLUROT0ZMT0FUKSBpbnN0ZWFk LiBIaW50OgorICAgZGVwZW5kaW5nIG9uIHlvdXIgbWFjaGluZSBhcmNoaXRlY3R1cmUsIHlvdSBt aWdodCBoYXZlIGJldHRlciBsdWNrCisgICB1c2luZyBkb3VibGUgdGhhbiBmbG9hdCBhcyB0aGUg ZGF0YSB0eXBlIGZvciBmbG9hdGluZy1wb2ludCBudW1iZXJzLCBvcgorICAgdmljZSB2ZXJzYS4g TG9vayBpbiBbMTYwXWNrY2RlYi5oIGZvciB0aGUgQ0tGTE9BVCBkZWZpbml0aW9uLgorCisgICBG bG9hdGluZy1wb2ludCBhcml0aG1ldGljIGlzIGFsc28gc3VwcG9ydGVkIGluIHRoZSBzY3JpcHQg cHJvZ3JhbW1pbmcKKyAgIGxhbmd1YWdlLiBGaXJzdCB2aWEgdGhlIFxmcHAuLi4oKSBmdW5jdGlv bnMsIHN1Y2ggYXMgXGZwcGFkZCgpLCB3aGljaAorICAgYWRkcyB0d28gZmxvYXRpbmctcG9pbnQg bnVtYmVycywgc2Vjb25kIGluIFMtRXhwcmVzc2lvbnMuIEFkZGl0aW9uLAorICAgc3VidHJhY3Rp b24sIG11bHRpcGxpY2F0aW9uLCBhbmQgZGl2aXNpb24gYXJlIGFsd2F5cyBhdmFpbGFibGUuIEJ1 dAorICAgb3RoZXIgZnVuY3Rpb25zIHN1Y2ggYXMgbG9ncywgcmFpc2luZyB0byBwb3dlcnMsIHNp bmVzIGFuZCBjb3NpbmVzLAorICAgZXRjLCByZXF1aXJlIHRoZSBDIE1hdGggbGlicmFyeS4gVG8g aW5jbHVkZSB1c2VyLWxldmVsIGZsb2F0aW5nLXBvaW50CisgICBtYXRoIHlvdSBtdXN0IHB1dDoK KworICAtREZORkxPQVQKKworICAgYW5kIGluIFVuaXggeW91IG11c3QgbGluayB3aXRoIHRoZSBN YXRoIGxpYnJhcnk6CisKKyAgTElCUz0iLi4uLiAtbG0iCisKKyAgIEluIEs5NSBhbmQgVk1TLCBG TkZMT0FUIGlzIGRlZmluZWQgYXV0b21hdGljYWxseSBpZiBDS0ZMT0FUIGlzIGRlZmluZWQuCisg ICBJbiBVbml4LCBob3dldmVyLCBGTkZMT0FUIG11c3QgYmUgYWRkZWQgdG8gZWFjaCBtYWtlZmls ZSB0YXJnZXQKKyAgIGluZGl2aWR1YWxseSwgYmVjYXVzZSBvZiB0aGUgc3BlY2lhbCBsaW5raW5n IGluc3RydWN0aW9ucyB0aGF0IG11c3QKKyAgIGFsc28gYmUgYWRkZWQgdG8gZWFjaCB0YXJnZXQu CisKKyAgIE5vdGU6IFMtRXhwcmVzc2lvbnMgcmVxdWlyZSBGTkZMT0FULgorCisgICBbIFsxNjFd Qy1LZXJtaXQgSG9tZSBdIFsgWzE2Ml1LZXJtaXQgSG9tZSBdCisKKyAgMTQuIFNQRUNJQUwgQ09O RklHVVJBVElPTlMKKworICAgWyBbMTYzXVRvcCBdIFsgWzE2NF1Db250ZW50cyBdIFsgWzE2NV1Q cmV2aW91cyBdCisKKyAgIEFzIG9mIEMtS2VybWl0IDcuMCwgaWYgeW91IGJ1aWxkIEMtS2VybWl0 IG5vcm1hbGx5LCBidXQgd2l0aCAtRE5PSUNQCisgICAoTm8gSW50ZXJhY3RpdmUgQ29tbWFuZCBQ YXJzZXIpLCB5b3UgZ2V0IGEgcHJvZ3JhbSBjYXBhYmxlIG9mIG1ha2luZworICAgc2VyaWFsIGNv bm5lY3Rpb25zIChidXQgbm90IGRpYWxpbmcpIGFuZCBuZXR3b3JrIGNvbm5lY3Rpb25zIChpZgor ICAgVENQU09DS0VUIG9yIG90aGVyIG5ldHdvcmsgb3B0aW9uIGluY2x1ZGVkKSwgYW5kIGNhbiBh bHNvIHRyYW5zZmVyCisgICBmaWxlcyB1c2luZyBLZXJtaXQgcHJvdG9jb2wsIGJ1dCBvbmx5IHZp YSBhdXRvZG93bmxvYWQvdXBsb2FkLgorICAgRnVydGhlcm1vcmUsIGlmIHlvdSBjYWxsIHRoZSBl eGVjdXRhYmxlICJ0ZWxuZXQiLCBpdCB3aWxsIGFjdCBsaWtlCisgICBUZWxuZXQgLS0gdXNpbmcg dGhlIGNvbW1hbmQtbGluZSBvcHRpb25zLiBIb3dldmVyLCBpbiB0aGlzIGNhc2UgdGhlcmUKKyAg IGlzIG5vdGhpbmcgdG8gZXNjYXBlIGJhY2sgdG8sIHNvIGlmIHlvdSB0eXBlIEN0cmwtXGMsIGl0 IGp1c3QgcHJpbnRzIGEKKyAgIG1lc3NhZ2UgdG8gdGhpcyBlZmZlY3QuCisKKyAgIFlvdSBjYW4g YWxzbyBidWlsZCBDLUtlcm1pdCB3aXRoIC1ETk9YRkVSLCBtZWFuaW5nIG9taXQgYWxsIHRoZQor ICAgZmlsZS10cmFuc2ZlciBmZWF0dXJlcy4gVGhpcyBsZWF2ZXMgeW91IHdpdGggYSBzY3JpcHRh YmxlCisgICBjb21tdW5pY2F0aW9ucyBwcm9ncmFtIHRoYXQgaXMgY29uc2lkZXJhYmx5IHNtYWxs ZXIgdGhhbiB0aGUgZnVsbAorICAgQy1LZXJtaXQuCisKKyAgIFsgWzE2Nl1DLUtlcm1pdCBIb21l IF0gWyBbMTY3XUtlcm1pdCBIb21lIF0KKworICBBUFBFTkRJWCBJOiBTVU1NQVJZIE9GIENPTVBJ TEUtVElNRSBPUFRJT05TCisKKyAgIFsgWzE2OF1Ub3AgXSBbIFsxNjldQ29udGVudHMgXQorCisg ICBUaGVzZSBhcmUgdGhlIHN5bWJvbHMgdGhhdCBjYW4gYmUgc3BlY2lmaWVkIG9uIHRoZSBjYyBj b21tYW5kIGxpbmUsCisgICBsaXN0ZWQgYWxwaGFiZXRpY2FsbHkuIE90aGVycyBhcmUgdXNlZCBp bnRlcm5hbGx5LCBpbmNsdWRpbmcgdGhvc2UKKyAgIHRha2VuIGZyb20gaGVhZGVyIGZpbGVzLCB0 aG9zZSBkZWZpbmVkIGJ5IHRoZSBjb21waWxlciBpdHNlbGYsIGFuZAorICAgdGhvc2UgaW5mZXJy ZWQgZnJvbSB0aGUgb25lcyBnaXZlbiBiZWxvdy4gS2VybWl0J3MgU0hPVyBWRVJTSU9OUworICAg Y29tbWFuZCBhdHRlbXB0cyB0byBkaXNwbGF5IG1vc3Qgb2YgdGhlc2UuIFNlZSBbMTcwXWNrY2Rl Yi5oIGFuZAorICAgWzE3MV1ja2NuZXQuaCBmb3IgaW5mZXJlbmNlIHJ1bGVzLiBGb3IgZXhhbXBs ZSBTVlIzIGltcGxpZXMgQVRUU1YsCisgICBNVUxUSU5FVCBpbXBsaWVzIFRDUFNPQ0tFVCwgYW5k IHNvIG9uLgorCisgICBIZXJlIGlzIHRoZSBjb21wbGV0ZSBsaXN0IG9mIHRoZSBLZXJtaXQtc3Bl Y2lmaWMgY29tcGlsZS10aW1lIHN3aXRjaGVzOgorCisgICBBQ1VDTlRSTCBTZWxlY3QgQlNEIDQu My1zdHlsZSBhY3VjbnRybCgpIGJpZGlyZWN0aW9uYWwgdHR5IGNvbnRyb2wuCisgICBhZWdpcyBC dWlsZCBmb3IgQXBvbGxvIEFlZ2lzIChwcmVkZWZpbmVkIG9uIEFwb2xsbyBzeXN0ZW1zKS4KKyAg IEFJWDM3MCBCdWlsZCBmb3IgSUJNIEFJWC8zNzAgZm9yIElCTSBtYWluZnJhbWVzLgorICAgQUlY RVNBIEJ1aWxkIGZvciBJQk0gQUlYL0VTQSBmb3IgSUJNIG1haW5mcmFtZXMuCisgICBBSVhQUzIg QnVpbGQgZm9yIElCTSBBSVggMy4wIGZvciBQUy8yIHNlcmllcyAobmV2ZXIgZm9ybWFsbHkgcmVs ZWFzZWQpLgorICAgQUlYUlMgQnVpbGQgZm9yIElCTSBBSVggMy54IG9uIFJTLzYwMDAuCisgICBB SVg0MSBCdWlsZCBmb3IgSUJNIEFJWCA0Lnggb24gUlMvNjAwMC4KKyAgIEFNSUdBIEJ1aWxkIGZv ciBDb21tb2RvcmUgQW1pZ2Egd2l0aCBJbnR1aXRpb24gT1MuCisgICBBVFQ2MzAwIEJ1aWxkIGZv ciBBVCZUIDYzMDAgUExVUy4KKyAgIEFUVDczMDAgQnVpbGQgZm9yIEFUJlQgNzMwMCBVTklYIFBD ICgzQjEpLgorICAgQVRUU1YgQnVpbGQgZm9yIEFUJlQgU3lzdGVtIElJSSBvciBWIFVOSVguCisg ICBBVVggQnVpbGQgZm9yIEFwcGxlIEEvVVggZm9yIHRoZSBNYWNpbnRvc2guCisgICBCSUdCVUZP SyBPSyB0byB1c2UgYmlnIGJ1ZmZlcnMgLSAibWVtb3J5IGlzIG5vdCBhIHByb2JsZW0iCisgICBC UFNfeHh4eCBFbmFibGUgU0VUIFNQRUVEIHh4eHgKKyAgIEJTRDI5IEJ1aWxkIGZvciBCU0QgMi45 IG9yIDIuMTAuCisgICBCU0Q0IEJ1aWxkIGZvciBCU0QgNC4yLgorICAgQlNENDEgQnVpbGQgZm9y IEJTRCA0LjEuCisgICBCU0Q0MyBCdWlsZCBmb3IgQlNEIDQuMy4KKyAgIEJTRDQ0IEJ1aWxkIGZv ciBCU0QgNC40LgorICAgQzcwIEJ1aWxkIGZvciBCQk4gQy83MC4KKyAgIENJRSBCdWlsZCBmb3Ig Q0lFIFN5c3RlbXMgNjgwLzIwLgorICAgQ0tDT05JTlRCNENCIFdvcmsgYXJvdW5kIHByb21wdC1k aXNhcHBlYXJzIGFmdGVyIGVzY2FwZSBiYWNrIGZyb20KKyAgIENPTk5FQ1QuCisgICBDS0xFQVJO IEJ1aWxkIHdpdGggc3VwcG9ydCBmb3IgbGVhcm5lZCBzY3JpcHRzLgorICAgQ0tMT0dESUFMIEVu YWJsZSBjb25uZWN0aW9uIGxvZy4KKyAgIENLTUFYUEFUSCBNYXhpbXVtIGxlbmd0aCBmb3IgYSBm dWxseSBxdWFsaWZpZWQgZmlsZW5hbWUuCisgICBDS1JFR0VYIChtaXNub21lcikgSW5jbHVkZSBb Li4uXSBvciB7eHh4LHh4eCx4eHh9IG1hdGNoaW5nIGluCisgICBja21hdGNoKCkuCisgICBDS1NZ U0xPRyBFbmFibGUgc3lzbG9nZ2luZy4KKyAgIENLX0FOU0lDIEVuYWJsZSBBTlNJIEMgY29uc3Ry dWN0cyAtIHByb3RvdHlwZXMsIGV0Yy4KKyAgIENLX0FOU0lMSUJTIFVzZSBoZWFkZXIgZmlsZXMg Zm9yIEFOU0kgQyBsaWJyYXJpZXMuCisgICBDS19BUEMgRW5hYmxlIEFQQyBleGVjdXRpb24gYnkg Q09OTkVDVCBtb2R1bGUuCisgICBDS19DVVJTRVMgRW5hYmxlIGZ1bGxzY3JlZW4gZmlsZSB0cmFu c2ZlciBkaXNwbGF5LgorICAgQ0tfRFNZU0lOSSBVc2Ugc3lzdGVtLXdpZGUgaW5pdCBmaWxlLCB3 aXRoIG5hbWUgc3VwcGxpZWQgYnkgS2VybWl0LgorICAgQ0tfRFRSQ0QgRFRSL0NEIGZsb3cgY29u dHJvbCBpcyBhdmFpbGFibGUuCisgICBDS19GQVNUIEJ1aWxkIHdpdGggZmFzdCBLZXJtaXQgcHJv dG9jb2wgZGVmYXVsdHMuCisgICBDS19GT1JLX1NJRyBVTklYIG9ubHk6IHNpZ25hbCgpIG51bWJl ciBmb3IgQ09OTkVDVCBtb2R1bGUgZm9ya3MuCisgICBDS19JRlJPIElGIFJFTU9URSBjb21tYW5k IGlzIGF2YWlsYWJsZSAoYW5kIGNhbiBydW4gaW4gcmVtb3RlIG1vZGUpLgorICAgQ0tfSU5JX0Eg U3lzdGVtLXdpZGUgaW5pdCBmaWxlIHRha2VzIHByZWNlZGVuY2Ugb3ZlciB1c2VyJ3MuCisgICBD S19JTklfQiBVc2VyJ3MgaW5pdCBmaWxlIHRha2VzIHByZWNlZGVuY2Ugb3ZlciB0aGUgc3lzdGVt LXdpZGUgb25lLgorICAgQ0tfTEFCRUxFRCBJbmNsdWRlIHN1cHBvcnQgZm9yIFNFVCBGSUxFIFRZ UEUgTEFCRUxFRC4KKyAgIENLX0xCUksgVGhpcyB2ZXJzaW9uIGNhbiBzZW5kIExvbmcgQlJFQUsu CisgICBDS19MSU5HRVIgQWRkIGNvZGUgdG8gdHVybiBvZiBUQ1Agc29ja2V0ICJsaW5nZXIiIHBh cmFtZXRlci4KKyAgIENLX01LRElSIFRoaXMgdmVyc2lvbiBoYXMgYSB6bWtkaXIoKSBjb21tYW5k IHRvIGNyZWF0ZSBkaXJlY3Rvcmllcy4KKyAgIENLX05BV1MgSW5jbHVkZSBURUxORVQgTmVnb3Rp YXRlIEFib3V0IFdpbmRvdyBTaXplIHN1cHBvcnQuCisgICBDS19ORVdURVJNIFVzZSBuZXd0ZXJt KCkgcmF0aGVyIHRoYW4gaW5pdHNjcigpIHRvIGluaXRpYWxpemUgY3Vyc2VzLgorICAgQ0tfUEFN IEluY2x1ZGUgUEFNIGF1dGhlbnRpY2F0aW9uIChtaWdodCBhbHNvIHJlcXVpcmUgLWxwYW0pLgor ICAgQ0tfUENUX0JBUiBGdWxsc2NyZWVuIGZpbGUgdHJhbnNmZXIgZGlzcGxheSBzaG91bGQgaW5j bHVkZQorICAgInRoZXJtb21ldGVyIi4KKyAgIENLX1BPTEwgU3lzdGVtLVYgb3IgUE9TSVggYmFz ZWQgVU5JWCBoYXMgcG9sbCgpIGZ1bmN0aW9uLgorICAgQ0tfUE9TSVhfU0lHIFVzZSBQT1NJWCBz aWduYWwgaGFuZGluZzogc2lnam1wX2J1Ziwgc2lnc2V0am1wLAorICAgc2lnbG9uZ2ptcC4KKyAg IENLX1JFQUQwIHJlYWQoZmQsJngsMCkgY2FuIGJlIHVzZWQgdG8gdGVzdCBUQ1AvSVAgY29ubmVj dGlvbnMuCisgICBDS19SRURJUiBFbmFibGUgdGhlIFJFRElSRUNUIGNvbW1hbmQuCisgICBDS19S RVNFTkQgSW5jbHVkZSB0aGUgUkVTRU5EIGNvbW1hbmQgKG5lZWRzIHpmc2VlaygpICsgYXBwZW5k KS4KKyAgIENLX1JUU0NUUyBSVFMvQ1RTIGZsb3cgY29udHJvbCBpcyBhdmFpbGFibGUuCisgICBD S19TSEFET1cgSW5jbHVkZSBzdXBwb3J0IGZvciBzaGFkb3cgcGFzc3dvcmRzIChlLmcuIGZvciBJ S1NECisgICBhdXRoZW50aWNhdGlvbikuCisgICBDS19TT0NLQlVGIEVuYWJsZSBUQ1Agc29ja2V0 LWJ1ZmZlci1zaXplLWluY3JlYXNpbmcgY29kZS4KKyAgIENLX1NPQ0tTIFVOSVggb25seTogQnVp bGQgd2l0aCBzb2NrcyBsaWJyYXJ5IHJhdGhlciB0aGFuIHJlZ3VsYXIKKyAgIHNvY2tldHMKKyAg IENLX1NPQ0tTNSBVTklYIG9ubHk6IEJ1aWxkIHdpdGggc29ja3MgNSBsaWIgcmF0aGVyIHRoYW4g cmVndWxhciBzb2NrZXRzCisgICBDS19TUEVFRCBFbmFibGUgY29udHJvbC1jaGFyYWN0ZXIgdW5w cmVmaXhpbmcuCisgICBDS19TWVNJTkk9Inh4eHh4IiBRdW90ZWQgc3RyaW5nIHRvIGJlIHVzZWQg YXMgc3lzdGVtLXdpZGUgaW5pdCBmaWxlCisgICBuYW1lLgorICAgQ0tfVElNRVJTIEJ1aWxkIHdp dGggc3VwcG9ydCBmb3IgZHluYW1pY2FsbHkgY2FsY3VsYXRlZCBwYWNrZXQKKyAgIHRpbWVvdXRz LgorICAgQ0tfVE1QRElSIFRoaXMgdmVyc2lvbiBvZiBLZXJtaXQgaGFzIGFuIGlzZGlyKCkgZnVu Y3Rpb24uCisgICBDS19UVFlGRCBEZWZpbmVkIG9uIHN5c3RlbXMgd2hlcmUgdGhlIGNvbW11bmlj YXRpb25zIGNvbm5lY3Rpb24gZmlsZQorICAgZGVzY3JpcHRvciAodHR5ZmQpIGNhbiBiZSBwYXNz ZWQgdG8gb3RoZXIgcHJvY2Vzc2VzIGFzIGEgY29tbWFuZC1saW5lCisgICBhcmd1bWVudCB2aWEg XHYodHR5ZmQpLgorICAgQ0tfVVJMIFBhcnNlIFVSTHMgYXMgd2VsbCBhcyBob3N0bmFtZXMsIGV0 Yy4KKyAgIENLX1hPTlhPRkYgWG9uL1hvZmYgZmxvdyBjb250cm9sIGF2YWlsYWJsZS4KKyAgIENL X1hZWiBJbmNsdWRlIHN1cHBvcnQgZm9yIFhZWk1PREVNIHByb3RvY29scy4KKyAgIENLX1dSRUZS RVNIIEN1cnNlcyBwYWNrYWdlIGluY2x1ZGVzIHdyZWZyZXNoKCksY2xlYXJvaygpIGZvciBzY3Jl ZW4KKyAgIHJlZnJlc2guCisgICBDS0ZMT0FUPXR5cGUgRmxvYXRpbmctcG9pbnQgZGF0YSB0eXBl LCAiZG91YmxlIiBvciAiZmxvYXQiLgorICAgQ0tUWVBfSD14eHggRm9yY2UgaW5jbHVkZSBvZiB4 eHggYXMgPHR5cGVzLmg+IGZpbGUuCisgICBDTFNPUE4gV2hlbiBoYW5naW5nIHVwIGEgdHR5IGRl dmljZSwgYWxzbyBjbG9zZSBhbmQgcmVvcGVuIGl0LgorICAgQ01EREVQIE1heGltdW0gcmVjdXJz aW9uIGRlcHRoIGZvciBzZWxmLXJlZmVyZW50aWFsIHVzZXItZGVmaW5lZCBmbidzLgorICAgQ09I RVJFTlQgQnVpbGQgZm9yIE1hcmsgV2lsbGlhbXMgQ29oZXJlbnQgVU5JWAorICAgQ09OR1NQRCBE ZWZpbmUgaWYgdGhpcyB2ZXJzaW9uIGhhcyBjb25nc3BkKCkgcm91dGluZSBpbiBjaz90aW8uYwor ICAgZGF0YWdlbmVyYWwgQnVpbGQgZm9yIERhdGEgR2VuZXJhbCBBT1MvVlMgb3IgQU9TL1ZTIElJ CisgICBEQ0xQT1BFTiBwb3BlbigpIGlzIGF2YWlsYWJsZSBidXQgbmVlZHMgdG8gYmUgZGVjbGFy ZWQKKyAgIERFQ19UQ1BJUCBCdWlsZCB3aXRoIHN1cHBvcnQgZm9yIERFQyBUQ1AvSVAgKFVDWCkg Zm9yIChPcGVuKVZNUworICAgREdVWDQzMCBCdWlsZCBmb3IgREcvVVggNC4zMAorICAgREdVWDU0 MCBCdWlsZCBmb3IgREcvVVggNS40MAorICAgREVGUEFSPXggRGVmYXVsdCBwYXJpdHksIDAsICdl JywgJ28nLCAnbScsIG9yICdzJy4KKyAgIERGVFRZPXh4eCBEZWZhdWx0IGNvbW11bmljYXRpb25z IGRldmljZSBuYW1lLgorICAgRElSRU5UIFVOSVggZGlyZWN0b3J5IHN0cnVjdHVyZSB0byBiZSB0 YWtlbiBmcm9tIDxkaXJlbnQuaD4uCisgICBESVJQV0RSUCBQcm9tcHQgZm9yIHBhc3N3b3JkIGlu IFJFTU9URSBDV0QgY29tbWFuZC4KKyAgIERUSUxERSBJbmNsdWRlIFVOSVggfiBub3RhdGlvbiBm b3IgdXNlcm5hbWUvaG9tZS1kaXJlY3RvcnkKKyAgIERZTkFNSUMgQWxsb2NhdGUgZmlsZSB0cmFu c2ZlciBwYWNrZXQgYnVmZmVycyBkeW5hbWljYWxseSB3aXRoIG1hbGxvYy4KKyAgIEVOQ09SRSBC dWlsZCBmb3IgRW5jb3JlIE11bHRpbWF4IGNvbXB1dGVycy4KKyAgIEVYQ0VMQU4gQnVpbGQgd2l0 aCBleGNlbGFuIFRDUC9JUC4KKyAgIEZORkxPQVQgSW5jbHVkZSBmbG9hdGluZy1wb2ludCBtYXRo IGZ1bmN0aW9ucyAobG9ncywgc2luLCBjb3MsIGV4cCwKKyAgIGV0YykKKyAgIEZUMTggQnVpbGQg Zm9yIEZvcnR1bmUgRm9yOlBybyAxLjguCisgICBGVDIxIEJ1aWxkIGZvciBGb3J0dW5lIEZvcjpQ cm8gMi4xLgorICAgR0VNRE9TIEJ1aWxkIGZvciBBdGFyaSBTVCBHRU1ET1MuCisgICBHRlRJTUVS IFVzZSBoaWdoLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCBmaWxlLXRyYW5zZmVyIHRpbWVycy4K KyAgIEdJRF9UPXh4eCBHcm91cCBJRHMgYXJlIG9mIHR5cGUgeHh4ICh1c3VhbGx5IGludCwgc2hv cnQsIG9yIGdpZF90KS4KKyAgIEhBRERSTElTVCBJZiBnZXRob3N0YnluYW1lKCkgaG9zdGVudCBz dHJ1Y3QgY29udGFpbnMgYSBsaXN0IG9mCisgICBhZGRyZXNzZXMuCisgICBIREJVVUNQIEJ1aWxk IHdpdGggc3VwcG9ydCBmb3IgSG9uZXkgRGFuQmVyIFVVQ1AuCisgICBIUFVYIEJ1aWxkIGZvciBI ZXdsZXR0IFBhY2thcmQgSFAtVVguCisgICBIUFVYOSBCdWlsZCBmb3IgSGV3bGV0dCBQYWNrYXJk IEhQLVVYIDkueC4KKyAgIEhQVVgxMCBCdWlsZCBmb3IgSGV3bGV0dCBQYWNrYXJkIEhQLVVYIDEw LnguCisgICBIV1BBUklUWSBEZWZpbmUgaWYgdGhpcyB2ZXJzaW9uIGNhbiBTRVQgUEFSSVRZIEhB UkRXQVJFIHsgRVZFTiwgT0RELi4ufQorICAgSTM4NklYIEJ1aWxkIGZvciBJbnRlcmFjdGl2ZSBT eXN0ZW0gViBSMy4KKyAgIElGREVCVUcgQWRkIElGIHN0bXRzICJpZiAoZGVibG9nKSIgYmVmb3Jl ICJkZWJ1ZygpIiBjYWxscy4KKyAgIElOQUREUlggVENQL0lQIGluZXRfYWRkcigpIHR5cGUgaXMg c3RydWN0IGluYWRkciwgbm90IHVuc2lnbmVkIGxvbmcuCisgICBJTlRFUkxBTiBCdWlsZCB3aXRo IHN1cHBvcnQgZm9yIFJhY2FsL0ludGVybGFuIFRDUC9JUC4KKyAgIElTRElSQlVHIFN5c3RlbSBk ZWZzIG9mIFNfSVNESVIgYW5kIFNfSVNSRUcgaGF2ZSBidWcsIGRlZmluZSBvdXJzZWx2ZXMuCisg ICBJU0lJSSBCdWlsZCBmb3IgSW50ZXJhY3RpdmUgU3lzdGVtIElJSS4KKyAgIElYMzcwIEJ1aWxk IGZvciBJQk0gSVgvMzcwLgorICAgS0FOSkkgQnVpbGQgd2l0aCBLYW5qaSBjaGFyYWN0ZXItc2V0 IHRyYW5zbGF0aW9uIHN1cHBvcnQuCisgICBMQ0tESVIgVVVDUCBsb2NrIGRpcmVjdG9yeSBpcyAv dXNyL3Nwb29sL3V1Y3AvTENLLy4KKyAgIExGREVWTk8gVVVDUCBsb2NrZmlsZSBuYW1lIHVzZXMg ZGV2aWNlIG51bWJlcnMsIGFzIGluIFNWUjQuCisgICBMSU5VWEZTU1RORCBGb3IgTGludXgsIHVz ZSBGU1NUTkQgVVVDUCBsb2NrZmlsZSBjb252ZW50aW9ucyAoZGVmYXVsdCkuCisgICBMT0NLX0RJ Uj14eHggVVVDUCBsb2NrIGRpcmVjdG9yeSBpcyB4eHggKHF1b3RlZCBzdHJpbmcpLgorICAgTE9D S0YgVXNlIGxvY2tmKCkgKGluIGFkZGl0aW9uIHRvIGxvY2tmaWxlcykgb24gc2VyaWFsIGxpbmVz CisgICBMT05HRk4gQlNEIGxvbmcgZmlsZW5hbWVzIHN1cHBvcnRlZCB1c2luZyA8ZGlyLmg+IGFu ZCBvcGVuZGlyKCkuCisgICBMWU5YT1MgQnVpbGQgZm9yIEx5bnggT1MgMi4yIG9yIGxhdGVyIChQ T1NJWC1iYXNlZCkuCisgICBNQUMgQnVpbGQgZm9yIEFwcGxlIE1hY2ludG9zaCB3aXRoIE1hYyBP Uy4KKyAgIE1BVENIRE9UIE1ha2Ugd2lsZGNhcmRzIG1hdGNoIGZpbGVuYW1lcyB0aGF0IHN0YXJ0 IHdpdGggcGVyaW9kICguKQorICAgTUFYUlA9bnVtYmVyIE1heGltdW0gcmVjZWl2ZS1wYWNrZXQg bGVuZ3RoLgorICAgTUFYU1A9bnVtYmVyIE1heGltdW0gc2VuZC1wYWNrZXQgbGVuZ3RoLgorICAg TURFQlVHIE1hbGxvYy1kZWJ1Z2dpbmcgcmVxdWVzdGVkLgorICAgTUlOSURJQUwgTWluaW11bSBt b2RlbSBkaWFsZXIgc3VwcG9ydDogQ0NJVFQsIEhheWVzLCBVbmtub3duLCBhbmQgTm9uZS4KKyAg IE1JTklYIEJ1aWxkIGZvciBNSU5JWC4KKyAgIE1JUFMgQnVpbGQgZm9yIE1JUFMgd29ya3N0YXRp b24uCisgICBNVUxUSU5FVCBCdWlsZCB3aXRoIHN1cHBvcnQgZm9yIFRHViBNdWx0aU5ldCBUQ1Av SVAgKFZBWC9WTVMpLgorICAgTV9VTklYIERlZmluZWQgYnkgU0NPLgorICAgTkFQIFRoZSBuYXAo KSBpcyBhdmFpbGFibGUgKGNvbmZsaWN0cyB3aXRoIFNFTEVDVCBhbmQgVVNMRUVQKQorICAgTkFQ SEFDSyBUaGUgbmFwKCkgY2FsbCBpcyBhdmFpbGFibGUgYnV0IG9ubHkgYXMgc3lzY2FsbCgzMTEy LC4uLikKKyAgIE5ESVIgQlNEIGxvbmcgZmlsZW5hbWVzIHN1cHBvcnRlZCB1c2luZyA8bmRpci5o PiBhbmQgb3BlbmRpcigpLgorICAgTkRHUFdOQU0gRG9uJ3QgZGVjbGFyZSBnZXRwd25hbSgpLgor ICAgTkRTWVNFUlJMSVNUIERvbid0IGRlY2xhcmUgc3lzX2Vycmxpc3RbXS4KKyAgIE5FRURTRUxF Q1RERUZTIHNlbGVjdCgpIGlzIGF2YWlsYWJsZSBidXQgd2UgbmVlZCB0byBkZWZpbmUgRkRfYmxh aAorICAgb3Vyc2VsdmVzLgorICAgTkVUQ01EIEJ1aWxkIHdpdGggc3VwcG9ydCBmb3IgU0VUIEhP U1QgL0NPTU1BTkQgYW5kIFBJUEUgY29tbWFuZHMuCisgICBORVhUIEJ1aWxkIGZvciBOZVhUIE1h Y2ggMS54IG9yIDIueCBvciAzLjAsIDMuMSwgb3IgMy4yLgorICAgTkVYVDMzIEJ1aWxkIGZvciBO ZVhUIE1hY2ggMy4zLgorICAgTk9BTlNJIERpc2FibGUgQU5TSSBDIGZ1bmN0aW9uIHByb3RvdHlw aW5nLgorICAgTk9BUEMgRG8gbm90IGluY2x1ZGUgQ0tfQVBDIGNvZGUuCisgICBOT0FSUk9XS0VZ UyBFeGNsdWRlIGNvZGUgdG8gcGFyc2UgQU5TSSBhcnJvdy1rZXkgc2VxdWVuY2VzLgorICAgTk9C X3h4eHggRGlzYWJsZSBTRVQgU1BFRUQgeHh4eAorICAgTk9CSUdCVUYgT3ZlcnJpZGUgQklHQlVG T0sgd2hlbiBpdCBpcyB0aGUgZGVmYXVsdAorICAgTk9CUktDIERvbid0IHRyeSB0byByZWZlciB0 byB0X2Jya2Mgb3IgdF9lb2YgdGNoYXJzIHN0cnVjdHVyZSBtZW1iZXJzLgorICAgTk9DS0ZRSE9T VE5BTUUgRXhjbHVkZSBjb2RlIHRvIGdldCBmdWxseSBxdWFsaWZpZWQgaG9zdG5hbWUgaW4gY2Fz ZSBpdAorICAgY2F1c2VzIGNvcmUgZHVtcHMuCisgICBOT0NDVFJBUCBEaXNhYmxlIENvbnRyb2wt QyAoU0lHSU5UKSB0cmFwcGluZy4KKyAgIE5PQ0tTUEVFRCBEaXNhYmxlIGNvbnRyb2wtcHJlZml4 IHJlbW92YWwgZmVhdHVyZSAoU0VUIENPTlRST0wpLgorICAgTk9DS1RJTUVSUyBCdWlsZCB3aXRo b3V0IHN1cHBvcnQgZm9yIGR5bmFtaWMgdGltZXJzLgorICAgTk9DS1hZWiBPdmVycmlkZXMgQ0tf WFlaLgorICAgTk9DS1JFR0VYIERvIG5vdCBpbmNsdWRlIFsuLi5dIG9yIHt4eHgseHh4LHh4eH0g bWF0Y2hpbmcgaW4gY2ttYXRjaCgpLgorICAgTk9DTURMIEJ1aWxkIHdpdGggbm8gY29tbWFuZC1s aW5lIG9wdGlvbiBwcm9jZXNzaW5nLgorICAgTk9DT1RGTUMgTm8gQ2xvc2UoT3BlbigpKSBUbyBG b3JjZSBNb2RlIENoYW5nZSAoVU5JWCB2ZXJzaW9uKS4KKyAgIE5PQ1NFVFMgQnVpbGQgd2l0aCBu byBzdXBwb3J0IGZvciBjaGFyYWN0ZXIgc2V0IHRyYW5zbGF0aW9uLgorICAgTk9DWVJJTCBCdWls ZCB3aXRoIG5vIHN1cHBvcnQgZm9yIEN5cmlsbGljIGNoYXJhY3RlciBzZXQgdHJhbnNsYXRpb24u CisgICBOT0NZUklMTElDIERpdHRvLgorICAgTk9ERUJVRyBCdWlsZCB3aXRoIG5vIGRlYnVnIGxv Z2dpbmcgY2FwYWJpbGl0eS4KKyAgIE5PRElBTCBCdWlsZCB3aXRoIG5vIERJQUwgb3IgU0VUIERJ QUwgY29tbWFuZHMuCisgICBOT0RJU1BPIEJ1aWxkIHRvIGFsd2F5cyByZWZ1c2UgaW5jb21pbmcg TUFJTCBvciBSRU1PVEUgUFJJTlQgZmlsZXMuCisgICBETk9ESVNQTEFZIEJ1aWxkIHdpdGggbm8g ZmlsZS10cmFuc2ZlciBkaXNwbGF5LgorICAgTk9FU0NTRVEgQnVpbGQgd2l0aCBubyBzdXBwb3J0 IGZvciBBTlNJIGVzY2FwZSBzZXF1ZW5jZSByZWNvZ25pdGlvbi4KKyAgIE5PRkFTVCBEbyBub3Qg bWFrZSBGQVNUIEtlcm1pdCBwcm90b2NvbCBzZXR0aW5ncyB0aGUgZGVmYXVsdC4KKyAgIE5PRkRa RVJPIERvIG5vdCB1c2UgZmlsZSBkZXNjcmlwdG9yIDAgZm9yIHJlbW90ZS1tb2RlIGZpbGUgdHJh bnNmZXIuCisgICBOT0ZJTEVIIERvIG5vdCAjaW5jbHVkZSA8c3lzL2ZpbGUuaD4uCisgICBOT0ZM T0FUIERvbid0IGluY2x1ZGUgYW55IGZsb2F0aW5nLXBvaW50IGRhdGEgdHlwZXMgb3Igb3BlcmF0 aW9ucy4KKyAgIE5PRlJJTExTIEJ1aWxkIHdpdGggIm5vIGZyaWxscyIgKHRoaXMgc2hvdWxkIGJl IHBoYXNlZCBvdXQuLi4pCisgICBOT0ZUUlVOQ0FURSBJbmNsdWRlIHRoaXMgb24gVU5JWGVzIHRo YXQgZG9uJ3QgaGF2ZSBmdHJ1bmNhdGUoKS4KKyAgIE5PR0VUVVNFUlNIRUxMIEluY2x1ZGUgdGhp cyBvbiBVTklYZXMgdGhhdCBkb24ndCBoYXZlIGdldHVzZXJzaGVsbCgpLgorICAgTk9HRlRJTUVS IERvbid0IHVzZSBoaWdoLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCBmaWxlLXRyYW5zZmVyIHRp bWVycy4KKyAgIE5PSEVCUkVXIEJ1aWxkIHdpdGggbm8gc3VwcG9ydCBmb3IgSGVicmV3IGNoYXJh Y3RlciBzZXRzLgorICAgTk9IRUxQIEJ1aWxkIHdpdGggbm8gYnVpbHQtaW4gaGVscC4KKyAgIE5P SUtTRCBCdWlsZCB3aXRoIElLU0Qgc3VwcG9ydCBleGNsdWRlZC4KKyAgIE5PSU5JVEdST1VQUyBJ bmNsdWRlIHRoaXMgb24gVU5JWGVzIHRoYXQgZG9uJ3QgaGF2ZSBpbml0Z3JvdXBzKCkuCisgICBO T0lDUCBCdWlsZCB3aXRoIG5vIGludGVyYWN0aXZlIGNvbW1hbmQgcGFyc2VyLgorICAgTk9KQyBC dWlsZCB3aXRoIG5vIHN1cHBvcnQgZm9yIGpvYiBjb250cm9sIChzdXNwZW5kKS4KKyAgIE5PS0FO SkkgQnVpbGQgd2l0aCBubyBzdXBwb3J0IGZvciBKYXBhbmVzZSBLYW5qaSBjaGFyYWN0ZXIgc2V0 cy4KKyAgIE5PS1ZFUkJTIEJ1aWxkIHdpdGggbm8gc3VwcG9ydCBmb3Iga2V5Ym9hcmQgdmVyYnMg KFxLdmVyYnMpLgorICAgTk9MQVRJTjIgQnVpbGQgd2l0aCBubyBJU08gTGF0aW4tMiBjaGFyYWN0 ZXItc2V0IHRyYW5zbGF0aW9uIHN1cHBvcnQuCisgICBOT0xFQVJOIEJ1aWxkIHdpdGggbm8gc3Vw cG9ydCBmb3IgbGVhcm5lZCBzY3JpcHRzLgorICAgTk9MSU5LQklUUyBVc2Ugb2YgU19JU0xOSyBh bmQgX0lGTE5LIHVudHJ1c3R3b3J0aHk7IHVzZSByZWFkbGluaygpCisgICBpbnN0ZWFkLgorICAg Tk9MT0NBTCBCdWlsZCB3aXRob3V0IGFueSBsb2NhbC1tb2RlIGZlYXR1cmVzOiBObyBNYWtpbmcg Q29ubmVjdGlvbnMuCisgICBOT0xPR0RJQUwgRGlzYWJsZSBjb25uZWN0aW9uIGxvZy4KKyAgIE5P TE9HSU4gQnVpbGQgd2l0aG91dCBJS1NEIChuZXR3b3JrIGxvZ2luKSBzdXBwb3J0LgorICAgTk9M U1RBVCBOb3QgT0sgdG8gdXNlIGxzdGF0KCkuCisgICBOT01ETUhVUCBCdWlsZCB3aXRob3V0ICJt b2RlbS1zcGVjaWZpYyBoYW5ndXAiIChlLmcuIEFUSDApIGZlYXR1cmUuCisgICBOT01ISE9TVCBF eGNsdWRlIHRoZSBtdWx0aWhvbWVkLWhvc3QgVENQL0lQIGNvZGUgKGlmIGNvbXBpbGF0aW9uCisg ICBlcnJvcnMpCisgICBOT01JTlBVVCBCdWlsZCB3aXRob3V0IE1JTlBVVCBjb21tYW5kLgorICAg Tk9NU0VORCBCdWlsZCB3aXRoIG5vIE1TRU5EIGNvbW1hbmQuCisgICBOT05BV1MgRG8gbm90IGlu Y2x1ZGUgVEVMTkVUIE5lZ290aWF0ZSBBYm91dCBXaW5kb3cgU2l6ZSBzdXBwb3J0LgorICAgTk9O RVQgRG8gbm90IGluY2x1ZGUgYW55IG5ldHdvcmsgc3VwcG9ydC4KKyAgIE5PTk9TRVRCVUYgKFNl ZSBOT1NFVEJVRikKKyAgIE5PUEFSU0VOIEJ1aWxkIHdpdGhvdXQgYXV0b21hdGljIHBhcml0eSBk ZXRlY3Rpb24uCisgICBOT1BJUEVTRU5EIERpc2FibGUgZmlsZSB0cmFuc2ZlciB1c2luZyBwaXBl cyBhbmQgZmlsdGVycy4KKyAgIE5PUE9MTCBPdmVycmlkZSBDS19QT0xMIGRlZmluaXRpb24uCisg ICBOT1BPUEVOIFRoZSBwb3BlbigpIGxpYnJhcnkgY2FsbCBpcyBub3QgYXZhaWxhYmxlLgorICAg Tk9QVVJHRSBCdWlsZCB3aXRoIG5vIFBVUkdFIGNvbW1hbmQuCisgICBOT1BVU0ggQnVpbGQgd2l0 aCBubyBlc2NhcGVzIHRvIG9wZXJhdGluZyBzeXN0ZW0uCisgICBOT1JFQUxQQVRIIEluIFVOSVgs IHJlYWxwYXRoKCkgZnVuY3Rpb24gaXMgbm90IGF2YWlsYWJsZS4KKyAgIE5PUkVDQUxMIERpc2Fi bGUgdGhlIGNvbW1hbmQtcmVjYWxsIGZlYXR1cmUuCisgICBOT1JFRElSRUNUIERpc2FibGUgUkVE SVJFQ1QgY29tbWFuZC4KKyAgIE5PUkVOQU1FIERvbid0IHVzZSByZW5hbWUoKSBzeXN0ZW0gY2Fs bCwgdXNlIGxpbmsoKS91bmxpbmsoKSAoVU5JWCkuCisgICBOT1JFU0VORCBCdWlsZCB3aXRoIG5v IFJFU0VORCBjb21tYW5kLgorICAgTk9SRVRSWSBCdWlsZCB3aXRoIG5vIGNvbW1hbmQtcmV0cnkg ZmVhdHVyZS4KKyAgIE5PU0NSSVBUIEJ1aWxkIHdpdGggbm8gU0NSSVBUIGNvbW1hbmQuCisgICBO T1NFTEVDVCBEb24ndCB0cnkgdG8gdXNlIHNlbGVjdCgpLgorICAgTk9TRVJWRVIgQnVpbGQgd2l0 aCBubyBTRVJWRVIgbW9kZSBhbmQgbm8gc2VydmVyLXJlbGF0ZWQgY29tbWFuZHMuCisgICBOT1NF VEJVRiBEb24ndCBtYWtlIGNvbnNvbGUgd3JpdGVzIHVuYnVmZmVyZWQuCisgICBOT05PU0VUQlVG IERPIG1ha2UgY29uc29sZSB3cml0ZXMgdW5idWZmZXJlZC4KKyAgIE5PU0VUUkVVIHNldHJldWlk KCkgYW5kL29yIHNldHJlZ2lkKCkgbm90IGF2YWlsYWJsZS4KKyAgIE5PU0hPVyBCdWlsZCB3aXRo IG5vIFNIT1cgY29tbWFuZCAobm90IHJlY29tbWVuZGVkISkuCisgICBOT1NJR1dJTkNIIERpc2Fi bGUgU0lHV0lOQ0ggc2lnbmFsIHRyYXBwaW5nLgorICAgTk9TUEwgQnVpbGQgd2l0aCBubyBzY3Jp cHQgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UuCisgICBOT1NUQVQgRG9uJ3QgY2FsbCBzdGF0KCkgZnJv bSBtYWlubGluZSBjb2RlLgorICAgTk9TWU1MSU5LIEluY2x1ZGUgdGhpcyBmb3IgVU5JWGVzIHRo YXQgZG9uJ3QgaGF2ZSByZWFkbGluaygpLgorICAgTk9TWVNJT0NUTEggRG8gbm90ICNpbmNsdWRl IDxzeXMvaW9jdGwuaD4uCisgICBOT1NZU1RJTUVIIENvIG5vdCBpbmNsdWRlIDxzeXMvdGltZS5o Pi4KKyAgIE5PU1lTTE9HIERpc2FibGUgc3lzbG9nZ2luZyBjb2RlLgorICAgTk9UQ1BPUFRTIEJ1 aWxkIHdpdGggbm8gU0VUIFRDUCBvcHRpb25zIG9yIHVuZGVybHlpbmcgc3VwcG9ydC4KKyAgIE5P VExPRyBCdWlsZCB3aXRoIG5vIHN1cHBvcnQgZm9yIHRyYW5zYWN0aW9uIGxvZ2dpbmcuCisgICBO T1RNX0lTRFNUIFN0cnVjdCB0bSBoYXMgbm8gdG1faXNkc3QgbWVtYmVyLgorICAgTk9VTklDT0RF IEJ1aWxkIHdpdGggbm8gc3VwcG9ydCBmb3IgVW5pY29kZSBjaGFyYWN0ZXItc2V0IHRyYW5zbGF0 aW9uLgorICAgTk9VUkwgRG9uJ3QgcGFyc2UgVVJMcworICAgTk9VVUNQIEJ1aWxkIHdpdGggbm8g VVVDUCBsb2NrZmlsZSBzdXBwb3J0IChkYW5nZXJvdXMhKS4KKyAgIE5PV0FSTiBNYWtlIEVYSVQg V0FSTklORyBiZSBPRkYgYnkgZGVmYXVsdCAob3RoZXJ3aXNlIGl0J3MgT04pLgorICAgTk9XUkVG UkVTSCBPdmVycmlkZSBidWlsdC1pbiBkZWZpbml0aW9uIG9mIENLX1dSRUZSRVNIIChxLnYuKS4K KyAgIE5PWEZFUiBCdWlsZCB3aXRoIG5vIEtlcm1pdCBvciBvdGhlciBmaWxlLXRyYW5zZmVyIHBy b3RvY29scy4KKyAgIE5PWE1JVCBCdWlsZCB3aXRoIG5vIFRSQU5TTUlUIGNvbW1hbmQuCisgICBO T1hQUklOVCBEaXNhYmxlcyB0cmFuc3BhcmVudCBwcmludCBjb2RlLgorICAgT0xETVNHIFVzZSBv bGQgImVudGVyaW5nIHNlcnZlciBtb2RlIiBtZXNzYWdlIChzZWUgWzE3Ml1ja2NtYWkuYykuCisg ICBPTElOVVhISVNQRUVEIEJ1aWxkIGluIG9sZCBMaW51eCBoaS1zZXJpYWwtc3BlZWQgY29kZSAo Zm9yIExpbnV4IDw9CisgICAxLjApLgorICAgT1BFTkJTRCBCdWlsZCBmb3IgT3BlbkJTRC4KKyAg IE9TMiBCdWlsZCBmb3IgT1MvMi4KKyAgIE9TRiBCdWlsZCBmb3IgT1NGLzEuCisgICBPU0ZQQyBC dWlsZCBmb3IgT1NGLzEgb24gYSBQQy4KKyAgIE9TRjMyIERpZ2l0YWwgVU5JWCAzLjIgb3IgbGF0 ZXIuCisgICBPU0Y0MCBCdWlsZCBmb3IgRGlnaXRhbCBVTklYIDQuMC4KKyAgIE9TRjUwIEJ1aWxk IGZvciBEaWdpdGFsIFVOSVggNS4wLgorICAgT1NLIEJ1aWxkIGZvciBPUy05LgorICAgT1hPUyBC dWlsZCBmb3IgT2xpdmV0dGkgWC9PUyAyLjMuCisgICBQQ0lYIEJ1aWxkIGZvciBQQy9JWAorICAg UElEX1Q9eHh4IFR5cGUgZm9yIHBpZHMgaXMgeHh4IChub3JtYWxseSBpbnQgb3IgcGlkX3QpLgor ICAgUE9TSVggQnVpbGQgZm9yIFBPU0lYOiB1c2UgUE9TSVggaGVhZGVyIGZpbGVzLCBmdW5jdGlv bnMsIGV0Yy4KKyAgIF9QT1NJWF9TT1VSQ0UgRGlzYWJsZSBub24tUE9TSVggZmVhdHVyZXMuCisg ICBQUk9WWDEgQnVpbGQgZm9yIFZlbml4IDEuMCBvbiBERUMgUHJvZmVzc2lvbmFsIDN4eC4KKyAg IFBUWCBCdWlsZCBmb3IgRHluaXgvUFRYCisgICBQV0lEX1Q9eHh4IGdldHB3aWQoKSB0eXBlIGlz IHh4eC4KKyAgIFJCU0laPXh4eCBEZWZpbmUgb3ZlcmFsbCBzaXplIG9mIHJlY2VpdmUtcGFja2V0 IGJ1ZmZlciAod2l0aCBEWU5BTUlDKS4KKyAgIFJEQ0hLIHJkY2hrKCkgc3lzdGVtIGNhbGwgaXMg YXZhaWxhYmxlLgorICAgUkVOQU1FIHJlbmFtZSgpIHN5c3RlbSBjYWxsIGlzIGF2YWlsYWJsZSAo VU5JWCkuCisgICBSVEFJWCBCdWlsZCBmb3IgQUlYIDIuMi4xIG9uIElCTSBSVCBQQy4KKyAgIFJU VSBCdWlsZCBmb3IgTWFzc2NvbXAgLyBDb25jdXJyZW50IFJUVS4KKyAgIFNBVkVEVUlEIEJTRCBv ciBvdGhlciBub24tQVQmVCBVTklYIGhhcyBzYXZlZC1zZXR1aWQgZmVhdHVyZS4KKyAgIFNCU0la PXh4eCBEZWZpbmUgb3ZlcmFsbCBzaXplIG9mIHNlbmQtcGFja2V0IGJ1ZmZlciAodXNlIHdpdGgg RFlOQU1JQykuCisgICBTRElSRU5UIERpcmVjdG9yeSBzdHJ1Y3R1cmUgc3BlY2lmaWVkIGluIDxz eXMvZGlyZW50Lmg+LgorICAgU0VMRUNUIHNlbGVjdCgpIGZ1bmN0aW9uIGF2YWlsYWJsZSAoY29u ZmxpY3RzIHdpdGggUkRDSEsgYW5kIENLX1BPTEwpCisgICBTRUxFQ1RfSCBJbmNsdWRlIDxzeXMv c2VsZWN0Lmg+IGZvciBzZWxlY3QoKS1yZWxhdGVkIGRlZmluaXRpb25zLgorICAgU0VURVVJRCBC U0QgNC40LXN0eWxlIHNldGVYaWQoKSBmdW5jdGlvbnMgYXZhaWxhYmxlLgorICAgU0lHX1YgVHlw ZSBmb3Igc2lnbmFsKCkgaXMgdm9pZC4gVXNlZCB0byBvdmVycmlkZSBub3JtYWwgYXNzdW1wdGlv bi4KKyAgIFNJR19JIFR5cGUgZm9yIHNpZ25hbCgpIGlzIGludC4gVXNlZCB0byBvdmVycmlkZSBu b3JtYWwgYXNzdW1wdGlvbi4KKyAgIFNPQ0tPUFRfVCBPdmVycmlkZSBkZWZhdWx0IGRhdGEgdHlw ZSBmb3IgZ2V0L3NldHNvY2tvcHQoKSBvcHRpb24KKyAgIGxlbmd0aC4KKyAgIFNPTEFSSVMgQnVp bGQgZm9yIFNvbGFyaXMuCisgICBTT0xBUklTMjUgQnVpbGQgZm9yIFNvbGFyaXMgMi41IG9yIGxh dGVyLgorICAgU09OWU5FV1MgQnVpbGQgZm9yIFNvbnkgTkVXUy1PUy4KKyAgIFNURVJNSU9YIDxz eXMvdGVybWlveC5oPiBpcyBhdmFpbGFibGUuCisgICBTVFJBVFVTIEJ1aWxkIGZvciBTdHJhdHVz IFZPUy4KKyAgIFNUUkFUVVNYMjUgSW5jbHVkZSBTdHJhdHVzIFZPUyBYLjI1IHN1cHBvcnQuCisg ICBTVU40UzUgQnVpbGQgZm9yIFNVTk9TIDQueCBpbiB0aGUgU3lzdGVtIFYgUjMgZW52aXJvbm1l bnQuCisgICBTVU5PUzQgQnVpbGQgZm9yIFNVTk9TIDQuMCBpbiB0aGUgQlNEIGVudmlyb25tZW50 LgorICAgU1VOT1M0MSBCdWlsZCBmb3IgU1VOT1MgNC4xIGluIHRoZSBCU0QgZW52aXJvbm1lbnQu CisgICBTVU5YMjUgQnVpbGQgd2l0aCBzdXBwb3J0IGZvciBTdW5MaW5rIFguMjUuCisgICBTVlIz IEJ1aWxkIGZvciBBVCZUIFN5c3RlbSBWIFJlbGVhc2UgMy4KKyAgIFNWUjNKQyBBbGxvdyBqb2Ig Y29udHJvbCBzdXBwb3J0IG9uIFN5c3RlbSBWIFJlbGVhc2UgMyBVTklYIHZlcnNpb25zLgorICAg U1ZSNCBCdWlsZCBmb3IgQVQmVCBTeXN0ZW0gViBSZWxlYXNlIDQuCisgICBTV19BQ0NfSUQgVU5J WCBvbmx5IC0tIHN3YXAgcmVhbCAmIGVmZmVjdGl2ZSBpZHMgYXJvdW5kIGFjY2VzcygpIGNhbGxz LgorICAgc3hhRTUwIEJ1aWxkIGZvciBQRlUgQ29tcGFjdCBBIFNlcmllcyBTWC9BIFRJU1AuCisg ICBTWVNMT0dMRVZFTD1uIEZvcmNlIHN5c2xvZ2dpbmcgYXQgZ2l2ZW4gbGV2ZWwuCisgICBTWVNU SU1FSCBJbmNsdWRlIDxzeXMvdGltZS5oPi4KKyAgIFNZU1VUSU1FSCBJbmNsdWRlIDxzeXMvdXRp bWUuaD4gZm9yIHNldHRpbmcgZmlsZSBkYXRlcyAoODhPUEVOKQorICAgVENQU09DS0VUIEJ1aWxk IHdpdGggc3VwcG9ydCBmb3IgVENQL0lQIHZpYSBCZXJrZWxleSBzb2NrZXRzIGxpYnJhcnkuCisg ICBURVJNSU9YIDx0ZXJtaW94Lmg+IGhlYWRlciBmaWxlIGlzIGF2YWlsYWJsZSAobW9zdGx5IFNW UjQpLgorICAgVE5DT0RFIEluY2x1ZGUgVEVMTkVULXNwZWNpZmljIGNvZGUuCisgICBUT1dFUjEg QnVpbGQgZm9yIE5DUiBUb3dlciAxNjMyIHdpdGggT1MgMS4wMi4KKyAgIFRSUzE2IEJ1aWxkIGZv ciBUYW5keSAxNi82MDAwLgorICAgVUlEX1Q9eHh4IFR5cGUgZm9yIHVpZHMgaXMgeHh4IChub3Jt YWxseSBpbnQgb3IgdWlkX3QpLgorICAgVU5JWCBNdXN0IGJlIGRlZmluZWQgZm9yIGFsbCBVTklY IHZlcnNpb25zLgorICAgVU5JWDM1MU0gQVQmVCBVTklYIDMuNTFtIG9uIHRoZSBBVCZUIDczMDAg VU5JWCBQQy4KKyAgIFVTRV9BUlJPV0tFWVMgSW5jbHVkZSBjb2RlIHRvIHBhcnNlIEFOU0kgYXJy b3cta2V5IHNlcXVlbmNlcy4KKyAgIFVTRV9MU1RBVCBPSyB0byB1c2UgbHN0YXQoKS4KKyAgIFVT RV9NRU1DUFkgRGVmaW5lIHRoaXMgaWYgbWVtY3B5KCkvbWVtc2V0KCkvbWVtbW92ZSgpIGF2YWls YWJsZS4KKyAgIFVTRV9TVFJFUlJPUiBEZWZpbmUgdGhpcyBpZiBzdHJlcnJvcigpIGlzIGF2YWls YWJsZS4KKyAgIFVTTEVFUCB1c2xlZXAoKSBzeXN0ZW0gY2FsbCBhdmFpbGFibGUgKGNvbmZsaWN0 cyB3aXRoIE5BUCAmIFNFTEVDVCkuCisgICBVVEVLIEJ1aWxkIGZvciBUZWt0cm9uaXggd29ya3N0 YXRpb25zIHdpdGggVVRFSyBPUy4KKyAgIFVUSU1FSCBJbmNsdWRlIDx1dGltZS5oPiBmb3Igc2V0 dGluZyBmaWxlIGRhdGVzIChTVlI0LCBQT1NJWCkKKyAgIFVUUzI0IEJ1aWxkIGZvciBBbWRhaGwg VVRTIDIuNC4KKyAgIFY3IEJ1aWxkIGZvciBWZXJzaW9uIDcgVU5JWC4KKyAgIFZNUyBCdWlsZCBm b3IgVkFYL1ZNUy4KKyAgIFZPSUQ9eHh4IFZPSUQgdHlwZSBmb3IgZnVuY3Rpb25zIChpbnQgb3Ig dm9pZCkuCisgICBWWFZFIEJ1aWxkIGZvciBDREMgVlgvVkUgNS4yLjEuCisgICBXQUlUX1Q9eHh4 IFR5cGUgb2YgYXJndW1lbnQgcGFzc2VkIHRvIHdhaXQoKS4KKyAgIFdJTlRDUCBCdWlsZCB3aXRo IFdvbGxvbmdvbmcgVkFYL1ZNUyBUQ1AvSVAgKGltcGxpZXMgVENQU09DS0VUKQorICAgV09MTE9O R09ORyBCdWlsZCB3aXRoIFdvbGxvbmdvbmcgVU5JWCBUQ1AvSVAgKGltcGxpZXMgVENQU09DS0VU KQorICAgWEVOSVggQnVpbGQgZm9yIFhlbml4IChTQ08sIFRhbmR5LCBvdGhlcnMpLgorICAgWE5E SVIgU3VwcG9ydCBmb3IgQlNEIGxvbmcgZmlsZW5hbWVzIHZpYSA8c3lzL25kaXIuaD4uCisgICBY WVpfSU5URVJOQUwgU3VwcG9ydCBmb3IgWFlaTU9ERU0gcHJvdG9jb2xzIGlzIGludGVybmFsLCBu b3QgZXh0ZXJuYWwuCisgICBaRkNEQVQgRGVmaW5lIHRoaXMgaWYgemZjZGF0KCkgZnVuY3Rpb24g aXMgYXZhaWxhYmxlIGluIEtlcm1pdC4KKyAgIFpJTE9HIEJ1aWxkIGZvciBaaWxvZyBaRVVTLgor ICAgWkpEQVRFIEhhcyB6amRhdGUoKSBmdW5jdGlvbiB0aGF0IGNvbnZlcnRzIGRhdGUgdG8gSnVs aWFuIGZvcm1hdC4KKyAgIFhQUklOVCBUcmFuc3BhcmVudCBwcmludCBjb2RlIGluY2x1ZGVkIGlu IENPTk5FQ1QgbW9kdWxlLgorCisgICBbIFsxNzNdVG9wIF0gWyBbMTc0XUNvbnRlbnRzIF0gWyBb MTc1XUMtS2VybWl0IEhvbWUgXSBbIFsxNzZdS2VybWl0CisgICBIb21lIF0KKyAgICAgX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCisKKworICAgIEMtS2VybWl0IENvbmZpZ3VyYXRpb24gT3B0aW9ucyAvIFsxNzddVGhlIEtl cm1pdCBQcm9qZWN0IC8KKyAgICBbMTc4XWtlcm1pdEBjb2x1bWJpYS5lZHUgLyAzMCBKdW5lIDIw MTEKKworUmVmZXJlbmNlcworCisgICAxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS8KKyAgIDIu IG1haWx0bzprZXJtaXRAY29sdW1iaWEuZWR1CisgICAzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvaW5kZXguaHRtbAorICAgNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2s5NS5odG1sCisgICA1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5o dG1sCisgICA2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tzY3JpcHRzLmh0bWwK KyAgIDcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9jdXJyZW50Lmh0bWwKKyAgIDgu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC93aGF0c25ldy5odG1sCisgICA5LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvZmFxLmh0bWwKKyAgMTAuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9zdXBwb3J0Lmh0bWwKKyAgMTEuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2NjZmcuaHRtbAorICAxMi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZXJtaXQuaHRtbAorICAxMy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2lu ZGV4Lmh0bWwKKyAgMTQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NjZmcuaHRt bCN4MQorICAxNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5odG1sI3gy CisgIDE2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwjeDMKKyAg MTcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NjZmcuaHRtbCN4NAorICAxOC4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5odG1sI3g1CisgIDE5LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwjeDYKKyAgMjAuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NjZmcuaHRtbCN4NworICAyMS4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5odG1sI3g4CisgIDIyLiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwjeDkKKyAgMjMuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2NjZmcuaHRtbCN4MTAKKyAgMjQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2NjZmcuaHRtbCN4MTEKKyAgMjUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2NjZmcuaHRtbCN4MTIKKyAgMjYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2NjZmcuaHRtbCN4MTMKKyAgMjcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2NjZmcuaHRtbCN4MTQKKyAgMjguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Nj ZmcuaHRtbCN4YTEKKyAgMjkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMu aHRtbAorICAzMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAor ICAzMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0bWwKKyAgMzIuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NjZmcuaHRtbCN0b3AKKyAgMzMuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NjZmcuaHRtbCNjb250ZW50cworICAzNC4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5odG1sI3gyCisgIDM1LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwjeDAKKyAgMzYuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKKyAgMzcuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9pbmRleC5odG1sCisgIDM4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tjY2ZnLmh0bWwjdG9wCisgIDM5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tjY2ZnLmh0bWwjY29udGVudHMKKyAgNDAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2NjZmcuaHRtbCN4MworICA0MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrY2NmZy5odG1sI3gxCisgIDQyLiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9j LWtlcm1pdC9ja3V0aW8uYworICA0My4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQv Yy1rZXJtaXQvY2tjZGViLmgKKyAgNDQuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0 L2Mta2VybWl0L2NrdXVzMy5jCisgIDQ1LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1p dC9jLWtlcm1pdC9ja2NkZWIuaAorICA0Ni4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJt aXQvYy1rZXJtaXQvY2t1dGlvLmMKKyAgNDcuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2Vy bWl0L2Mta2VybWl0L2NrdXRpby5jCisgIDQ4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tlcm1pdC5odG1sCisgIDQ5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5k ZXguaHRtbAorICA1MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5odG1s I3RvcAorICA1MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5odG1sI2Nv bnRlbnRzCisgIDUyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwj eDQKKyAgNTMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NjZmcuaHRtbCN4Mgor ICA1NC4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvbWFrZWZpbGUK KyAgNTUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbAorICA1Ni4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g0CisgIDU3LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDkuMgorICA1OC4gZnRwOi8v a2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2t1dXN4LmMKKyAgNTkuIGZ0cDov L2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrdXRpby5jCisgIDYwLiBmdHA6 Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja3VmaW8uYworICA2MS4gZnRw Oi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2t1dXN4LmMKKyAgNjIuIGZ0 cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrdWNtZC5jCisgIDYzLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCisgIDY0LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRtbAorICA2NS4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrY2NmZy5odG1sI3RvcAorICA2Ni4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrY2NmZy5odG1sI2NvbnRlbnRzCisgIDY3LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwjeDUKKyAgNjguIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2NjZmcuaHRtbCN4MworICA2OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L3VuaWNvZGUuaHRtbAorICA3MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQuaHRtbAorICA3MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4 Lmh0bWwKKyAgNzIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NjZmcuaHRtbCN0 b3AKKyAgNzMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NjZmcuaHRtbCNjb250 ZW50cworICA3NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5odG1sI3g2 CisgIDc1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwjeDQKKyAg NzYuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrdXVzci5oCisg IDc3LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja3V1c3IuaAor ICA3OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAorICA3OS4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0bWwKKyAgODAuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NjZmcuaHRtbCN0b3AKKyAgODEuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2NjZmcuaHRtbCNjb250ZW50cworICA4Mi4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5odG1sI3g3CisgIDgzLiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwjeDUKKyAgODQuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2NjZmcuaHRtbCN4Ni4xCisgIDg1LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwjeDYuMgorICA4Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrY2NmZy5odG1sI3g2LjMKKyAgODcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2NjZmcuaHRtbCN4Ni40CisgIDg4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tjY2ZnLmh0bWwjeDQKKyAgODkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9na2VybWl0Lmh0bWwKKyAgOTAuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mt a2VybWl0L2NrdXVzci5oCisgIDkxLiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9j LWtlcm1pdC9ja2NrZXIuaAorICA5Mi4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQv Yy1rZXJtaXQvY2tjZGViLmgKKyAgOTMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2VybWl0Lmh0bWwKKyAgOTQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5o dG1sCisgIDk1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwjdG9w CisgIDk2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwjY29udGVu dHMKKyAgOTcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NjZmcuaHRtbCN4OAor ICA5OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5odG1sI3g2CisgIDk5 LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja3VkaWEuYworIDEw MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAorIDEwMS4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0bWwKKyAxMDIuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2NjZmcuaHRtbCN0b3AKKyAxMDMuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2NjZmcuaHRtbCNjb250ZW50cworIDEwNC4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5odG1sI3g5CisgMTA1LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwjeDcKKyAxMDYuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2NjZmcuaHRtbCN4OC4xCisgMTA3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tjY2ZnLmh0bWwjeDguMgorIDEwOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrY2NmZy5odG1sI3g4LjMKKyAxMDkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2NjZmcuaHRtbCN4OC4xLjEKKyAxMTAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2NjZmcuaHRtbCN4OC4xLjIKKyAxMTEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2NjZmcuaHRtbCN4OC4xLjMKKyAxMTIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2NjZmcuaHRtbCN4OC4xLjQKKyAxMTMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2NjZmcuaHRtbCN4OC4xLjUKKyAxMTQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2NjZmcuaHRtbCN4OC4xLjYKKyAxMTUuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUv a2VybWl0L2Mta2VybWl0L2NrY25ldC5oCisgMTE2LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1 L2tlcm1pdC9jLWtlcm1pdC9ja2N0ZWwuYworIDExNy4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVk dS9rZXJtaXQvYy1rZXJtaXQvY2tjdGVsLmMKKyAxMTguIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5l ZHUva2VybWl0L2Mta2VybWl0L2NrY3RlbC5oCisgMTE5LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEu ZWR1L2tlcm1pdC9jLWtlcm1pdC9ja2NmdHAuYworIDEyMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaXQuaHRtbAorIDEyMS4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9r ZXJtaXQvYy1rZXJtaXQvY2tjbmV0LmMKKyAxMjIuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUv a2VybWl0L2Mta2VybWl0L2NrY25ldC5oCisgMTIzLiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1 L2tlcm1pdC9jLWtlcm1pdC9ja3V0aW8uYworIDEyNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrY2NmZy5odG1sI3gxMQorIDEyNS4gbWFpbHRvOmtlcm1pdEBjb2x1bWJpYS5lZHUK KyAxMjYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKKyAxMjcu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5odG1sCisgMTI4LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwjdG9wCisgMTI5LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwjY29udGVudHMKKyAxMzAuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NjZmcuaHRtbCN4MTAKKyAxMzEuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2NjZmcuaHRtbCN4OAorIDEzMi4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAorIDEzMy4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2luZGV4Lmh0bWwKKyAxMzQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2NjZmcuaHRtbCN0b3AKKyAxMzUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2NjZmcuaHRtbCNjb250ZW50cworIDEzNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrY2NmZy5odG1sI3gxMQorIDEzNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr Y2NmZy5odG1sI3g5CisgMTM4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5z Lmh0bWwjeDExCisgMTM5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0 bWwKKyAxNDAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKKyAx NDEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5odG1sCisgMTQyLiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwjdG9wCisgMTQzLiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwjY29udGVudHMKKyAxNDQuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NjZmcuaHRtbCN4MTIKKyAxNDUuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NjZmcuaHRtbCN4MTAKKyAxNDYuIGZ0cDovL2tlcm1p dC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrdWNucy5jCisgMTQ3LiBmdHA6Ly9rZXJt aXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja3Vjb24uYworIDE0OC4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAorIDE0OS4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0bWwKKyAxNTAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2NjZmcuaHRtbCN0b3AKKyAxNTEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2NjZmcuaHRtbCNjb250ZW50cworIDE1Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrY2NmZy5odG1sI3gxMworIDE1My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrY2NmZy5odG1sI3gxMQorIDE1NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQuaHRtbAorIDE1NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4 Lmh0bWwKKyAxNTYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NjZmcuaHRtbCN0 b3AKKyAxNTcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NjZmcuaHRtbCNjb250 ZW50cworIDE1OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5odG1sI3gx NAorIDE1OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5odG1sI3gxMgor IDE2MC4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2tjZGViLmgK KyAxNjEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKKyAxNjIu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5odG1sCisgMTYzLiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwjdG9wCisgMTY0LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwjY29udGVudHMKKyAxNjUuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NjZmcuaHRtbCN4MTMKKyAxNjYuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKKyAxNjcuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9pbmRleC5odG1sCisgMTY4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tjY2ZnLmh0bWwjdG9wCisgMTY5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tjY2ZnLmh0bWwjY29udGVudHMKKyAxNzAuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUv a2VybWl0L2Mta2VybWl0L2NrY2RlYi5oCisgMTcxLiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1 L2tlcm1pdC9jLWtlcm1pdC9ja2NuZXQuaAorIDE3Mi4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVk dS9rZXJtaXQvYy1rZXJtaXQvY2tjbWFpLmMKKyAxNzMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2NjZmcuaHRtbCN0b3AKKyAxNzQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2NjZmcuaHRtbCNjb250ZW50cworIDE3NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrZXJtaXQuaHRtbAorIDE3Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2luZGV4Lmh0bWwKKyAxNzcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5o dG1sCisgMTc4LiBtYWlsdG86a2VybWl0QGNvbHVtYmlhLmVkdQoKZGlmZiAtLWdpdCBhL2NrZXJt aXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2tjZGViLmggYi9ja2VybWl0LTkuMC4z MDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrY2RlYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLjM0ZmYwMDgKLS0tIC9kZXYvbnVsbAorKysgYi9ja2VybWl0LTkuMC4zMDIt YnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrY2RlYi5oCkBAIC0wLDAgKzEsNjYwNyBAQAorLyogIEMg SyBDIEQgRSBCIC4gSCAgKi8KKworLyoKK01vbiBBdWcgMjMgMDk6MjI6MDUgMjAxMAorCisgIE5P VEUgVE8gQ09OVFJJQlVUT1JTOiBUaGlzIGZpbGUsIGFuZCBhbGwgdGhlIG90aGVyIEMtS2VybWl0 IGZpbGVzLCBtdXN0IGJlCisgIGNvbXBhdGlibGUgd2l0aCBDIHByZXByb2Nlc3NvcnMgdGhhdCBz dXBwb3J0IG9ubHkgI2lmZGVmLCAjZWxzZSwgI2VuZGlmLAorICAjZGVmaW5lLCBhbmQgI3VuZGVm LiAgUGxlYXNlIGRvIG5vdCB1c2UgI2lmLCBsb2dpY2FsIG9wZXJhdG9ycywgb3Igb3RoZXIKKyAg bGF0ZXItbW9kZWwgcHJlcHJvY2Vzc29yIGZlYXR1cmVzIGluIGFueSBvZiB0aGUgcG9ydGFibGUg Qy1LZXJtaXQgbW9kdWxlcy4KKyAgWW91IGNhbiwgb2YgY291cnNlLCB1c2UgdGhlc2UgY29uc3Ry dWN0aW9ucyBpbiBwbGF0Zm9ybS1zcGVjaWZpYyBtb2R1bGVzCisgIHdoZW4geW91IGtub3cgdGhl eSBhcmUgc3VwcG9ydGVkLgorKi8KKworLyoKKyAgVGhpcyBmaWxlIGlzIGluY2x1ZGVkIGJ5IGFs bCBDLUtlcm1pdCBtb2R1bGVzLCBpbmNsdWRpbmcgdGhlIG1vZHVsZXMKKyAgdGhhdCBhcmVuJ3Qg c3BlY2lmaWMgdG8gS2VybWl0IChsaWtlIHRoZSBjb21tYW5kIHBhcnNlciBhbmQgdGhlIGNrP3Rp byBhbmQKKyAgY2s/ZmlvIG1vZHVsZXMpLiAgSXQgc2hvdWxkIGJlIGluY2x1ZGVkIEJFRk9SRSBh bnkgb3RoZXIgQy1LZXJtaXQgaGVhZGVyCisgIGZpbGVzLiAgSXQgc3BlY2lmaWVzIGZvcm1hdCBj b2RlcyBmb3IgZGVidWcoKSwgdGxvZygpLCBhbmQgc2ltaWxhcgorICBmdW5jdGlvbnMsIGFuZCBp bmNsdWRlcyBhbnkgbmVjZXNzYXJ5IGRlZmluaXRpb25zIHRvIGJlIHVzZWQgYnkgYWxsIEMtS2Vy bWl0CisgIG1vZHVsZXMsIGFuZCBhbHNvIGluY2x1ZGVzIHNvbWUgZmVhdHVyZSBzZWxlY3Rpb24g Y29tcGlsZS10aW1lIHN3aXRjaGVzLCBhbmQKKyAgYWxzbyBzeXN0ZW0tIG9yIGNvbXBpbGVyLWRl cGVuZGVudCBkZWZpbml0aW9ucywgcGx1cyAjaW5jbHVkZXMgYW5kIHByb3RvdHlwZXMKKyAgcmVx dWlyZWQgYnkgYWxsIEMtS2VybWl0IG1vZHVsZXMuCisqLworCisvKgorICBBdXRob3I6IEZyYW5r IGRhIENydXogPGZkY0Bjb2x1bWJpYS5lZHU+LAorICBDb2x1bWJpYSBVbml2ZXJzaXR5IEFjYWRl bWljIEluZm9ybWF0aW9uIFN5c3RlbXMsIE5ldyBZb3JrIENpdHkuCisKKyAgQ29weXJpZ2h0IChD KSAxOTg1LCAyMDEwLAorICAgIFRydXN0ZWVzIG9mIENvbHVtYmlhIFVuaXZlcnNpdHkgaW4gdGhl IENpdHkgb2YgTmV3IFlvcmsuCisgICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFNlZSB0aGUgQy1L ZXJtaXQgQ09QWUlORy5UWFQgZmlsZSBvciB0aGUKKyAgICBjb3B5cmlnaHQgdGV4dCBpbiB0aGUg Y2tjbWFpLmMgbW9kdWxlIGZvciBkaXNjbGFpbWVyIGFuZCBwZXJtaXNzaW9ucy4KKyovCisKKy8q CisgIEV0eW1vbG9neTogVGhlIG5hbWUgb2YgdGhpcyBmaWxlIG1lYW5zICJDLUtlcm1pdCBDb21t b24tQy1MYW5ndWFnZSBEZWJ1Z2dpbmcKKyAgSGVhZGVyIiwgYmVjYXVzZSBvcmlnaW5hbGx5IGl0 IGNvbnRhaW5lZCBvbmx5IHRoZSBmb3JtYXRzIChGMDAwLUYxMTEpIGZvcgorICB0aGUgZGVidWco KSBhbmQgdGxvZygpIGZ1bmN0aW9ucy4gIFNpbmNlIHRoZW4gaXQgaGFzIGdyb3duIHRvIGluY2x1 ZGUgYWxsCisgIG1hdGVyaWFsIHJlcXVpcmVkIGJ5IGFsbCBvdGhlciBDLUtlcm1pdCBtb2R1bGVz LCBpbmNsdWRpbmcgdGhlIG5vbi1LZXJtaXQKKyAgc3BlY2lmaWMgb25lcy4gIEluIG90aGVyIHdv cmRzLCB0aGlzIGlzIHRoZSBvbmUgaGVhZGVyIGZpbGUgdGhhdCBpcworICBndWFyYW50ZWVkIHRv IGJlIGluY2x1ZGVkIGJ5IGFsbCBDLUtlcm1pdCBzb3VyY2UgbW9kdWxlcy4KKyovCisKKyNpZm5k ZWYgQ0tDREVCX0gJCQkvKiBEb24ndCBpbmNsdWRlIG1lIG1vcmUgdGhhbiBvbmNlLiAqLworI2Rl ZmluZSBDS0NERUJfSAorCisjaWZkZWYgT1MyCisjaW5jbHVkZSAiY2tva2VyLmgiCisjZWxzZSAv KiBPUzIgKi8KKy8qIFVuc2lnbmVkIG51bWJlcnMgKi8KKworI2lmbmRlZiBVU0hPUlQKKyNkZWZp bmUgVVNIT1JUIHVuc2lnbmVkIHNob3J0CisjZW5kaWYgLyogVVNIT1JUICovCisKKyNpZm5kZWYg VUlOVAorI2RlZmluZSBVSU5UIHVuc2lnbmVkIGludAorI2VuZGlmIC8qIFVJTlQgKi8KKworI2lm bmRlZiBVTE9ORworI2RlZmluZSBVTE9ORyB1bnNpZ25lZCBsb25nCisjZW5kaWYgLyogVUxPTkcg Ki8KKyNlbmRpZiAvKiBPUzIgKi8KKworI2lmZGVmIE1BQ09TWDEwCQkJCS8qIE1hYyBPUyBYIDEu MCAqLworI2lmbmRlZiBNQUNPU1gJCQkJLyogaW1wbGllcyBNYWMgT1MgWCAqLworI2RlZmluZSBN QUNPU1gKKyNlbmRpZiAvKiBNQUNPU1ggKi8KKyNlbmRpZiAvKiBNQUNPU1gxMCAqLworCisjaWZk ZWYgTUFDT1NYCQkJCS8qIE1hYyBPUyBYICovCisjaWZuZGVmIEJTRDQ0CQkJCS8qIGltcGxpZXMg NC40IEJTRCAqLworI2RlZmluZSBCU0Q0NAorI2VuZGlmIC8qIEJTRDQ0ICovCisjZW5kaWYgLyog TUFDT1NYICovCisKKyNpZmRlZiBTQ09fT1NSNTA1CQkJLyogU0NPIDMuMnY1LjAuNSAqLworI2lm bmRlZiBTQ09fT1NSNTA0CQkJLyogaW1wbGllcyBTQ08gMy4ydjUuMC40ICovCisjZGVmaW5lIFND T19PU1I1MDQKKyNlbmRpZiAvKiBTQ09fT1NSNTA0ICovCisjZW5kaWYgLyogU0NPX09TUjUwNSAq LworCisjaWZkZWYgU0NPX09TUjUwNAkJCS8qIFNDTyAzLjJ2NS4wLjQgKi8KKyNpZm5kZWYgQ0tf U0NPVjUJCQkvKiBpbXBsaWVzIFNDTyAzLjJ2NS4wICovCisjZGVmaW5lIENLX1NDT1Y1CisjZW5k aWYgLyogQ0tfU0NPVjUgKi8KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4JCQkvKiBUbyBzaWRlc3Rl cCBoZWFkZXItZmlsZSBtZXNzICovCisjZW5kaWYgLyogU0NPX09TUjUwNCAqLworCisjaWZkZWYg Q0tfU0NPVjUKKyNpZm5kZWYgQU5ZU0NPCisjZGVmaW5lIEFOWVNDTworI2VuZGlmIC8qIEFOWVND TyAqLworI2VuZGlmIC8qIENLX1NDT1Y1ICovCisKKyNpZmRlZiBVTklYV0FSRQorI2lmbmRlZiBB TllTQ08KKyNkZWZpbmUgQU5ZU0NPCisjZW5kaWYgLyogQU5ZU0NPICovCisjZW5kaWYgLyogVU5J WFdBUkUgKi8KKworI2lmbmRlZiBNSU5JWAkJCQkvKiBNaW5peCB2ZXJzaW9ucyAqLworI2lmZGVm IE1JTklYMzE1CisjZGVmaW5lIE1JTklYCisjZWxzZQorI2lmZGVmIE1JTklYMworI2RlZmluZSBN SU5JWAorI2Vsc2UKKyNpZmRlZiBNSU5JWDIKKyNkZWZpbmUgTUlOSVgKKyNlbmRpZgkvKiBNSU5J WDIgKi8KKyNlbmRpZgkvKiBNSU5JWDMgKi8KKyNlbmRpZgkvKiBNSU5JWDMxNSAqLworI2VuZGlm CS8qIE1JTklYICovCisKKyNpZmRlZiBDS19TQ08zMlY0CQkJLyogU0NPIDMuMnY0ICovCisjaWZu ZGVmIEFOWVNDTworI2RlZmluZSBBTllTQ08KKyNlbmRpZiAvKiBBTllTQ08gKi8KKyNpZm5kZWYg WEVOSVgKKyNkZWZpbmUgWEVOSVgKKyNlbmRpZiAvKiBYRU5JWCAqLworI2lmbmRlZiBTVlIzCisj ZGVmaW5lIFNWUjMKKyNlbmRpZiAvKiBTVlIzICovCisjaWZuZGVmIERJUkVOVAorI2RlZmluZSBE SVJFTlQKKyNlbmRpZiAvKiBESVJFTlQgKi8KKyNpZm5kZWYgUkVOQU1FCisjZGVmaW5lIFJFTkFN RQorI2VuZGlmIC8qIFJFTkFNRSAqLworI2lmbmRlZiBTVlIzSkMKKyNkZWZpbmUgU1ZSM0pDCisj ZW5kaWYgLyogU1ZSM0pDICovCisjaWZuZGVmIENLX1JUU0NUUworI2RlZmluZSBDS19SVFNDVFMK KyNlbmRpZiAvKiBDS19SVFNDVFMgKi8KKyNpZm5kZWYgUElEX1QKKyNkZWZpbmUgUElEX1QgcGlk X3QKKyNlbmRpZiAvKiBQSURfVCAqLworI2lmbmRlZiBQV0lEX1QKKyNkZWZpbmUgUFdJRF9UIGlu dAorI2VuZGlmIC8qIFBXSURfVCAqLworI2VuZGlmIC8qIENLX1NDTzMyVjQgKi8KKworI2lmZGVm IE5PSUNQCQkJCS8qIElmIG5vIGNvbW1hbmQgcGFyc2VyICovCisjaWZuZGVmIE5PU1BMCQkJCS8q IFRoZW4gbm8gc2NyaXB0IGxhbmd1YWdlIGVpdGhlciAqLworI2RlZmluZSBOT1NQTAorI2VuZGlm IC8qIE5PU1BMICovCisjaWZuZGVmIE5PQ1NFVFMJCQkJLyogT3IgY2hhcmFjZXIgc2V0cyAqLwor I2RlZmluZSBOT0NTRVRTCisjZW5kaWYgLyogTk9DU0VUUyAqLworI2lmbmRlZiBOT0ZUUAkJCQkv KiBPciBGVFAgY2xpZW50ICovCisjZGVmaW5lIE5PRlRQCisjZW5kaWYgLyogTk9GVFAgKi8KKyNl bmRpZiAvKiBOT0lDUCAqLworCisvKiBCdWlsdC1pbiBtYWtlZmlsZSBlbnRyaWVzICovCisKKyNp ZmRlZiBTT0xBUklTMTEJCQkvKiBTb2xhcmlzIDExIGltcGxpZXMgMTAgKi8KKyNpZm5kZWYgU09M QVJJUzEwCisjZGVmaW5lIFNPTEFSSVMxMAorI2VuZGlmIC8qIFNPTEFSSVMxMCAqLworI2VuZGlm IC8qIFNPTEFSSVMxMSAqLworCisjaWZkZWYgU09MQVJJUzEwCQkJLyogU29sYXJpcyAxMCBpbXBs aWVzIDkgKi8KKyNpZm5kZWYgU09MQVJJUzkKKyNkZWZpbmUgU09MQVJJUzkKKyNlbmRpZiAvKiBT T0xBUklTOSAqLworI2VuZGlmIC8qIFNPTEFSSVMxMCAqLworCisjaWZkZWYgU09MQVJJUzkJCQkJ LyogU29sYXJpcyA5IGltcGxpZXMgOCAqLworI2lmbmRlZiBTT0xBUklTOAorI2RlZmluZSBTT0xB UklTOAorI2VuZGlmIC8qIFNPTEFSSVM4ICovCisjZW5kaWYgLyogU09MQVJJUzkgKi8KKworI2lm ZGVmIFNPTEFSSVM4CQkJCS8qIFNvbGFyaXMgOCBpbXBsaWVzIDcgKi8KKyNpZm5kZWYgU09MQVJJ UzcKKyNkZWZpbmUgU09MQVJJUzcKKyNlbmRpZiAvKiBTT0xBUklTNyAqLworI2VuZGlmIC8qIFNP TEFSSVM4ICovCisKKyNpZmRlZiBTT0xBUklTNwkJCQkvKiBTb2xhcmlzIDcgaW1wbGllcyAyLjYg Ki8KKyNpZm5kZWYgU09MQVJJUzI2CisjZGVmaW5lIFNPTEFSSVMyNgorI2VuZGlmIC8qIFNPTEFS SVMyNiAqLworI2VuZGlmIC8qIFNPTEFSSVM3ICovCisKKyNpZmRlZiBTT0xBUklTMjYJCQkvKiBT b2xhcmlzIDIuNiBpbXBsaWVzIDIuNSAqLworI2lmbmRlZiBTT0xBUklTMjUKKyNkZWZpbmUgU09M QVJJUzI1CisjZW5kaWYgLyogU09MQVJJUzI1ICovCisjZW5kaWYgLyogU09MQVJJUzI2ICovCisK KyNpZmRlZiBTT0xBUklTMjUJCQkvKiBTb2xhcmlzIDIuNSBpbXBsaWVzIFNvbGFyaXMgKi8KKyNp Zm5kZWYgU09MQVJJUworI2RlZmluZSBTT0xBUklTCisjZW5kaWYgLyogU09MQVJJUyAqLworI2lm bmRlZiBQT1NJWAkJCQkvKiBBbmQgUE9TSVggKi8KKyNkZWZpbmUgUE9TSVgKKyNlbmRpZiAvKiBQ T1NJWCAqLworI2lmbmRlZiBDS19XUkVGUkVTSAkJCS8qIEFuZCB0aGlzIChjdXJzZXMpICovCisj ZGVmaW5lIENLX1dSRUZSRVNICisjZW5kaWYgLyogQ0tfV1JFRlJFU0ggKi8KKyNlbmRpZiAvKiBT T0xBUklTMjUgKi8KKworI2lmZGVmIFNPTEFSSVMyNAkJCS8qIFNvbGFyaXMgMi40IGltcGxpZXMg U29sYXJpcyAqLworI2lmbmRlZiBTT0xBUklTCisjZGVmaW5lIFNPTEFSSVMKKyNlbmRpZiAvKiBT T0xBUklTICovCisjZW5kaWYgLyogU09MQVJJUzI0ICovCisKKyNpZmRlZiBTT0xBUklTCQkJCS8q IFNvbGFyaXMgZ2V0cyAiUE9TSVgiIFJUUy9DVFMgQVBJICovCisjaWZkZWYgUE9TSVgKKyNpZm5k ZWYgUE9TSVhfQ1JUU0NUUworI2RlZmluZSBQT1NJWF9DUlRTQ1RTCisjZW5kaWYgLyogUE9TSVhf Q1JUU0NUUyAqLworI2VuZGlmIC8qIFBPU0lYICovCisjaWZuZGVmIFNWUjQKKyNkZWZpbmUgU1ZS NAorI2VuZGlmCS8qIFNWUjQgKi8KKyNpZm5kZWYgU1RFUk1JT1gKKyNkZWZpbmUgU1RFUk1JT1gK KyNlbmRpZgkvKiBTVEVSTUlPWCAqLworI2lmbmRlZiBTRUxFQ1QKKyNkZWZpbmUgU0VMRUNUCisj ZW5kaWYJLyogU0VMRUNUICovCisjaWZuZGVmIEZORkxPQVQKKyNkZWZpbmUgRk5GTE9BVAorI2Vu ZGlmCS8qIEZORkxPQVQgKi8KKyNpZm5kZWYgRElSRU5UCisjZGVmaW5lIERJUkVOVAorI2VuZGlm CS8qIERJUkVOVCAqLworI2lmbmRlZiBCSUdCVUZPSworI2RlZmluZSBCSUdCVUZPSworI2VuZGlm CS8qIEJJR0JVRk9LICovCisjaWZuZGVmIENLX05FV1RFUk0KKyNkZWZpbmUgQ0tfTkVXVEVSTQor I2VuZGlmCS8qIENLX05FV1RFUk0gKi8KKyNlbmRpZiAvKiBTT0xBUklTICovCisKKyNpZmRlZiBT VU40UzUJCQkJLyogU3VuLTQgU3lzdGVtIFYgZW52aXJvbm1lbnQgKi8KKyNpZm5kZWYgU1ZSMwkJ CQkvKiBpbXBsaWVzIFN5c3RlbSBWIFIzIG9yIGxhdGVyICovCisjZGVmaW5lIFNWUjMKKyNlbmRp ZiAvKiBTVlIzICovCisjZW5kaWYgLyogU1VONFM1ICovCisjaWZkZWYgU1VOT1M0MQkJCQkvKiBT VU5PUzQxIGltcGxpZXMgU1VOT1M0ICovCisjaWZuZGVmIFNVTk9TNAorI2RlZmluZSBTVU5PUzQK KyNlbmRpZiAvKiBTVU5PUzQgKi8KKyNlbmRpZiAvKiBTVU5PUzQxICovCisKKyNpZmRlZiBTVU40 UzUJCQkJLyogU3VuLTQgU3lzdGVtIFYgZW52aXJvbm1lbnQgKi8KKyNpZm5kZWYgU1ZSMwkJCQkv KiBpbXBsaWVzIFN5c3RlbSBWIFIzIG9yIGxhdGVyICovCisjZGVmaW5lIFNWUjMKKyNlbmRpZiAv KiBTVlIzICovCisjZW5kaWYgLyogU1VONFM1ICovCisKKyNpZmRlZiBTVU5PUzQxCQkJCS8qIFNV Tk9TNDEgaW1wbGllcyBTVU5PUzQgKi8KKyNpZm5kZWYgU1VOT1M0CisjZGVmaW5lIFNVTk9TNAor I2VuZGlmIC8qIFNVTk9TNCAqLworI2VuZGlmIC8qIFNVTk9TNDEgKi8KKworI2lmZGVmIFNVTk9T NAkJCQkvKiBCdWlsdC1pbiBTVU5PUzQgbWFrZWZpbGUgZW50cnkgKi8KKyNpZm5kZWYgVU5JWAor I2RlZmluZSBVTklYCisjZW5kaWYgLyogVU5JWCAqLworI2lmbmRlZiBCU0Q0CisjZGVmaW5lIEJT RDQKKyNlbmRpZiAvKiBCU0Q0ICovCisjaWZuZGVmIE5PU0VUQlVGCisjZGVmaW5lIE5PU0VUQlVG CisjZW5kaWYgLyogTk9TRVRCVUYgKi8KKyNpZm5kZWYgRElSRU5UCisjZGVmaW5lIERJUkVOVAor I2VuZGlmIC8qIERJUkVOVCAqLworI2lmbmRlZiBOT05FVAorI2lmbmRlZiBUQ1BTT0NLRVQKKyNk ZWZpbmUgVENQU09DS0VUCisjZW5kaWYgLyogVENQU09DS0VUICovCisjZW5kaWYgLyogTk9ORVQg Ki8KKyNpZm5kZWYgU0FWRURVSUQKKyNkZWZpbmUgU0FWRURVSUQKKyNlbmRpZiAvKiBTQVZFRFVJ RCAqLworI2lmbmRlZiBEWU5BTUlDCisjZGVmaW5lIERZTkFNSUMKKyNlbmRpZiAvKiBEWU5BTUlD ICovCisjZW5kaWYgLyogU1VOT1M0ICovCisKKyNpZmRlZiBTT0xBUklTCQkJCS8qIEJ1aWx0IGlu IG1ha2VmaWxlIGVudHJ5ICovCisjaWZuZGVmIE5PU0VUQlVGCQkJLyogZm9yIFNvbGFyaXMgMi54 ICovCisjZGVmaW5lIE5PU0VUQlVGCisjZW5kaWYgLyogTk9TRVRCVUYgKi8KKyNpZm5kZWYgTk9D VVJTRVMKKyNpZm5kZWYgQ0tfQ1VSU0VTCisjZGVmaW5lIENLX0NVUlNFUworI2VuZGlmIC8qIENL X0NVUlNFUyAqLworI2VuZGlmIC8qIE5PQ1VSU0VTICovCisjaWZuZGVmIENLX05FV1RFUk0KKyNk ZWZpbmUgQ0tfTkVXVEVSTQorI2VuZGlmIC8qIENLX05FV1RFUk0gKi8KKyNpZm5kZWYgRElSRU5U CisjZGVmaW5lIERJUkVOVAorI2VuZGlmIC8qIERJUkVOVCAqLworI2lmbmRlZiBOT05FVAorI2lm bmRlZiBUQ1BTT0NLRVQKKyNkZWZpbmUgVENQU09DS0VUCisjZW5kaWYgLyogVENQU09DS0VUICov CisjZW5kaWYgLyogTk9ORVQgKi8KKyNpZm5kZWYgVU5JWAorI2RlZmluZSBVTklYCisjZW5kaWYg LyogVU5JWCAqLworI2lmbmRlZiBTVlI0CisjZGVmaW5lIFNWUjQKKyNlbmRpZiAvKiBTVlI0ICov CisjaWZuZGVmIEhBRERSTElTVAorI2RlZmluZSBIQUREUkxJU1QKKyNlbmRpZiAvKiBIQUREUkxJ U1QgKi8KKyNpZm5kZWYgU1RFUk1JT1gKKyNkZWZpbmUgU1RFUk1JT1gKKyNlbmRpZiAvKiBTVEVS TUlPWCAqLworI2lmbmRlZiBTRUxFQ1QKKyNkZWZpbmUgU0VMRUNUCisjZW5kaWYgLyogU0VMRUNU ICovCisjaWZuZGVmIERZTkFNSUMKKyNkZWZpbmUgRFlOQU1JQworI2VuZGlmIC8qIERZTkFNSUMg Ki8KKyNpZm5kZWYgTk9VVUNQCisjaWZuZGVmIEhEQlVVQ1AKKyNkZWZpbmUgSERCVVVDUAorI2Vu ZGlmIC8qIEhEQlVVQ1AgKi8KKyNlbmRpZiAvKiBOT1VVQ1AgKi8KKyNlbmRpZiAvKiBTT0xBUklT ICovCisKKy8qIEZlYXR1cmVzIHRoYXQgY2FuIGJlIGVsaW1pbmF0ZWQgZnJvbSBhIG5vLWZpbGUt dHJhbnNmZXIgdmVyc2lvbiAqLworCisjaWZkZWYgTk9YRkVSCisjaWZuZGVmIE5PRlRQCisjZGVm aW5lIE5PRlRQCisjZW5kaWYgLyogTk9GVFAgKi8KKyNpZm5kZWYgT1MyCisjaWZuZGVmIE5PQ1VS U0VTCQkJLyogRnVsbHNjcmVlbiBmaWxlLXRyYW5zZmVyIGRpc3BsYXkgKi8KKyNkZWZpbmUgTk9D VVJTRVMKKyNlbmRpZiAvKiBOT0NVUlNFUyAqLworI2VuZGlmIC8qIE9TMiAqLworI2lmbmRlZiBO T0NLWFlaCQkJCS8qIFhZWk1PREVNIHN1cHBvcnQgKi8KKyNkZWZpbmUgTk9DS1hZWgorI2VuZGlm IC8qIE5PQ0tYWVogKi8KKyNpZm5kZWYgTk9DS1NQRUVECQkJLyogQ3RybC1jaGFyIHVucHJlZml4 aW5nICovCisjZGVmaW5lIE5PQ0tTUEVFRAorI2VuZGlmIC8qIE5PQ0tTUEVFRCAqLworI2lmbmRl ZiBOT1NFUlZFUgkJCS8qIFNlcnZlciBtb2RlICovCisjZGVmaW5lIE5PU0VSVkVSCisjZW5kaWYg LyogTk9TRVJWRVIgKi8KKyNpZm5kZWYgTk9DS1RJTUVSUwkJCS8qIER5bmFtaWMgcGFja2V0IHRp bWVycyAqLworI2RlZmluZSBOT0NLVElNRVJTCisjZW5kaWYgLyogTk9DS1RJTUVSUyAqLworI2lm bmRlZiBOT1BBVFRFUk5TCQkJLyogRmlsZS10eXBlIHBhdHRlcm5zICovCisjZGVmaW5lIE5PUEFU VEVSTlMKKyNlbmRpZiAvKiBOT1BBVFRFUk5TICovCisjaWZuZGVmIE5PU1RSRUFNSU5HCQkJLyog U3RyZWFtaW5nICovCisjZGVmaW5lIE5PU1RSRUFNSU5HCisjZW5kaWYgLyogTk9TVFJFQU1JTkcg Ki8KKyNpZm5kZWYgTk9JS1NECQkJCS8qIEludGVybmV0IEtlcm1pdCBTZXJ2aWNlICovCisjZGVm aW5lIE5PSUtTRAorI2VuZGlmIC8qIE5PSUtTRCAqLworI2lmbmRlZiBOT1BJUEVTRU5ECQkJLyog U2VuZGluZyBmcm9tIHBpcGVzICovCisjZGVmaW5lIE5PUElQRVNFTkQKKyNlbmRpZiAvKiBOT1BJ UEVTRU5EICovCisjaWZuZGVmIE5PQVVUT0RMCQkJLyogQXV0b2Rvd25sb2FkICovCisjZGVmaW5l IE5PQVVUT0RMCisjZW5kaWYgLyogTk9BVVRPREwgKi8KKyNpZm5kZWYgTk9NU0VORAkJCQkvKiBN U0VORCAqLworI2RlZmluZSBOT01TRU5ECisjZW5kaWYgLyogTk9NU0VORCAqLworI2lmbmRlZiBO T1RMT0cJCQkJLyogVHJhbnNhY3Rpb24gbG9nZ2luZyAqLworI2RlZmluZSBOT1RMT0cKKyNlbmRp ZiAvKiBOT1RMT0cgKi8KKyNpZm5kZWYgTk9DS1hYQ0hBUgkJCS8qIFBhY2tldCBjaGFyYWN0ZXIg ZG91YmxpbmcgKi8KKyNkZWZpbmUgTk9DS1hYQ0hBUgorI2VuZGlmIC8qIE5PQ0tYWENIQVIgKi8K KyNlbmRpZiAvKiBOT1hGRVIgKi8KKworI2lmZGVmIE5PSUNQCQkJCS8qIE5vIEludGVyYWN0aXZl IENvbW1hbmQgUGFyc2VyICovCisjaWZuZGVmIE5PRElBTAkJCQkvKiBJbXBsaWVzIE5vIERJQUwg Y29tbWFuZCAqLworI2RlZmluZSBOT0RJQUwKKyNlbmRpZiAvKiBOT0RJQUwgKi8KKyNpZm5kZWYg Tk9DS1hZWgkJCQkvKiBhbmQgbm8gZXh0ZXJuYWwgcHJvdG9jb2xzICovCisjZGVmaW5lIE5PQ0tY WVoKKyNlbmRpZiAvKiBOT0NLWFlaICovCisjZW5kaWYgLyogTk9JQ1AgKi8KKworI2lmbmRlZiBO T0lLU0QKKyNpZmRlZiBJS1NET05MWQorI2lmbmRlZiBJS1NECisjZGVmaW5lIElLU0QKKyNlbmRp ZiAvKiBJS1NEICovCisjaWZuZGVmIE5PTE9DQUwKKyNkZWZpbmUgTk9MT0NBTAorI2VuZGlmIC8q IE5PTE9DQUwgKi8KKyNpZm5kZWYgTk9QVVNICisjZGVmaW5lIE5PUFVTSAorI2VuZGlmIC8qIE5P UFVTSCAqLworI2lmbmRlZiBUTkNPREUKKyNkZWZpbmUgVE5DT0RFCisjZW5kaWYgLyogVE5DT0RF ICovCisjaWZuZGVmIFRDUFNPQ0tFVAorI2RlZmluZSBUQ1BTT0NLRVQKKyNlbmRpZiAvKiBUQ1BT T0NLRVQgKi8KKyNpZm5kZWYgTkVUQ09OTgorI2RlZmluZSBORVRDT05OCisjZW5kaWYgLyogTkVU Q09OTiAqLworI2lmZGVmIFNVTlgyNQorI3VuZGVmIFNVTlgyNQorI2VuZGlmIC8qIFNVTlgyNSAq LworI2lmZGVmIElCTVgyNQorI3VuZGVmIElCTVgyNQorI2VuZGlmIC8qIElCTVgyNSAqLworI2lm ZGVmIFNUUkFUVVNYMjUKKyN1bmRlZiBTVFJBVFVTWDI1CisjZW5kaWYgLyogU1RSQVRVU1gyNSAq LworI2lmZGVmIENLX05FVEJJT1MKKyN1bmRlZiBDS19ORVRCSU9TCisjZW5kaWYgLyogQ0tfTkVU QklPUyAqLworI2lmZGVmIFNVUEVSTEFUCisjdW5kZWYgU1VQRVJMQVQKKyNlbmRpZiAvKiBTVVBF UkxBVCAqLworI2lmZGVmIE5QSVBFCisjdW5kZWYgTlBJUEUKKyNlbmRpZiAvKiBOUElQRSAqLwor I2lmZGVmIE5FVEZJTEUKKyN1bmRlZiBORVRGSUxFCisjZW5kaWYgLyogTkVURklMRSAqLworI2lm ZGVmIE5FVENNRAorI3VuZGVmIE5FVENNRAorI2VuZGlmIC8qIE5FVENNRCAqLworI2lmZGVmIE5F VFBUWQorI3VuZGVmIE5FVFBUWQorI2VuZGlmIC8qIE5FVFBUWSAqLworI2lmZGVmIFJMT0dDT0RF CisjdW5kZWYgUkxPR0NPREUKKyNlbmRpZiAvKiBSTE9HQ09ERSAqLworI2lmZGVmIE5FVERMTAor I3VuZGVmIE5FVERMTAorI2VuZGlmIC8qIE5FVERMTCAqLworI2lmbmRlZiBOT1NTSAorI3VuZGVm IE5PU1NICisjZW5kaWYgLyogTk9TU0ggKi8KKyNpZm5kZWYgTk9GT1JXQVJEWAorI2RlZmluZSBO T0ZPUldBUkRYCisjZW5kaWYgLyogTk9GT1JXQVJEWCAqLworI2lmbmRlZiBOT0JST1dTRVIKKyNk ZWZpbmUgTk9CUk9XU0VSCisjZW5kaWYgLyogTk9CUk9XU0VSICovCisjaWZuZGVmIE5PSFRUUAor I2RlZmluZSBOT0hUVFAKKyNlbmRpZiAvKiBOT0hUVFAgKi8KKyNpZm5kZWYgTk9GVFAKKyNkZWZp bmUgTk9GVFAKKyNlbmRpZiAvKiBOT0ZUUCAqLworI2lmbmRlZiBOT19DT01QT1JUCisjZGVmaW5l IE5PX0NPTVBPUlQKKyNlbmRpZiAvKiBOT19DT01QT1JUICovCisjZW5kaWYgLyogSUtTRE9OTFkg Ki8KKyNlbmRpZiAvKiBOT0lLU0QgKi8KKworLyogRmVhdHVyZXMgdGhhdCBjYW4gYmUgZWxpbWlu YXRlZCBmcm9tIGEgcmVtb3RlLW9ubHkgdmVyc2lvbiAqLworCisjaWZkZWYgTk9MT0NBTAorI2lm bmRlZiBOT0ZUUAorI2RlZmluZSBOT0ZUUAorI2VuZGlmIC8qIE5PRlRQICovCisjaWZuZGVmIE5P SFRUUAorI2RlZmluZSBOT0hUVFAKKyNlbmRpZiAvKiBOT0hUVFAgKi8KKyNpZm5kZWYgTk9TU0gK KyNkZWZpbmUgTk9TU0gKKyNlbmRpZiAvKiBOT1NTSCAqLworI2lmbmRlZiBOT1RFUk0KKyNkZWZp bmUgTk9URVJNCisjZW5kaWYgLyogTk9URVJNICovCisjaWZuZGVmIE5PQ1VSU0VTCQkJLyogRnVs bHNjcmVlbiBmaWxlLXRyYW5zZmVyIGRpc3BsYXkgKi8KKyNkZWZpbmUgTk9DVVJTRVMKKyNlbmRp ZiAvKiBOT0NVUlNFUyAqLworI2lmbmRlZiBOT0RJQUwKKyNkZWZpbmUgTk9ESUFMCisjZW5kaWYg LyogTk9ESUFMICovCisjaWZuZGVmIE5PU0NSSVBUCisjZGVmaW5lIE5PU0NSSVBUCisjZW5kaWYg LyogTk9TQ1JJUFQgKi8KKyNpZm5kZWYgTk9TRVRLRVkKKyNkZWZpbmUgTk9TRVRLRVkKKyNlbmRp ZiAvKiBOT1NFVEtFWSAqLworI2lmbmRlZiBOT0tWRVJCUworI2RlZmluZSBOT0tWRVJCUworI2Vu ZGlmIC8qIE5PS1ZFUkJTICovCisjaWZuZGVmIE5PWE1JVAorI2RlZmluZSBOT1hNSVQKKyNlbmRp ZiAvKiBOT1hNSVQgKi8KKyNpZmRlZiBDS19DVVJTRVMKKyN1bmRlZiBDS19DVVJTRVMKKyNlbmRp ZiAvKiBDS19DVVJTRVMgKi8KKyNpZm5kZWYgSUtTRE9OTFkKKyNpZm5kZWYgTk9BUEMKKyNkZWZp bmUgTk9BUEMKKyNlbmRpZiAvKiBOT0FQQyAqLworI2lmbmRlZiBOT05FVAorI2RlZmluZSBOT05F VAorI2VuZGlmIC8qIE5PTkVUICovCisjZW5kaWYgLyogSUtTRE9OTFkgKi8KKyNlbmRpZiAvKiBO T0xPQ0FMICovCisKKyNpZmRlZiBOT05FVAorI2lmZGVmIE5FVENPTk4KKyN1bmRlZiBORVRDT05O CisjZW5kaWYgLyogTkVUQ09OTiAqLworI2lmZGVmIFRDUFNPQ0tFVAorI3VuZGVmIFRDUFNPQ0tF VAorI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLworI2lmbmRlZiBOT1RDUE9QVFMKKyNkZWZpbmUgTk9U Q1BPUFRTCisjZW5kaWYgLyogTk9UQ1BPUFRTICovCisjaWZkZWYgU1VOWDI1CisjdW5kZWYgU1VO WDI1CisjZW5kaWYgLyogU1VOWDI1ICovCisjaWZkZWYgSUJNWDI1CisjdW5kZWYgSUJNWDI1Cisj ZW5kaWYgLyogSUJNWDI1ICovCisjaWZkZWYgU1RSQVRVU1gyNQorI3VuZGVmIFNUUkFUVVNYMjUK KyNlbmRpZiAvKiBTVFJBVFVTWDI1ICovCisjaWZkZWYgQ0tfTkVUQklPUworI3VuZGVmIENLX05F VEJJT1MKKyNlbmRpZiAvKiBDS19ORVRCSU9TICovCisjaWZkZWYgU1VQRVJMQVQKKyN1bmRlZiBT VVBFUkxBVAorI2VuZGlmIC8qIFNVUEVSTEFUICovCisjaWZkZWYgTlBJUEUKKyN1bmRlZiBOUElQ RQorI2VuZGlmIC8qIE5QSVBFICovCisjaWZkZWYgTkVURklMRQorI3VuZGVmIE5FVEZJTEUKKyNl bmRpZiAvKiBORVRGSUxFICovCisjaWZkZWYgTkVUQ01ECisjdW5kZWYgTkVUQ01ECisjZW5kaWYg LyogTkVUQ01EICovCisjaWZkZWYgTkVUUFRZCisjdW5kZWYgTkVUUFRZCisjZW5kaWYgLyogTkVU UFRZICovCisjaWZkZWYgUkxPR0NPREUKKyN1bmRlZiBSTE9HQ09ERQorI2VuZGlmIC8qIFJMT0dD T0RFICovCisjaWZkZWYgTkVURExMCisjdW5kZWYgTkVURExMCisjZW5kaWYgLyogTkVURExMICov CisjaWZuZGVmIE5PU1NICisjZGVmaW5lIE5PU1NICisjZW5kaWYgLyogTk9TU0ggKi8KKyNpZm5k ZWYgTk9GVFAKKyNkZWZpbmUgTk9GVFAKKyNlbmRpZiAvKiBOT0ZUUCAqLworI2lmbmRlZiBOT0hU VFAKKyNkZWZpbmUgTk9IVFRQCisjZW5kaWYgLyogTk9IVFRQICovCisjaWZuZGVmIE5PQlJPV1NF UgorI2RlZmluZSBOT0JST1dTRVIKKyNlbmRpZiAvKiBOT0JST1dTRVIgKi8KKyNpZm5kZWYgTk9G T1JXQVJEWAorI2RlZmluZSBOT0ZPUldBUkRYCisjZW5kaWYgLyogTk9GT1JXQVJEWCAqLworI2Vu ZGlmIC8qIE5PTkVUICovCisKKyNpZmRlZiBJS1NET05MWQorI2lmZGVmIFNVTlgyNQorI3VuZGVm IFNVTlgyNQorI2VuZGlmIC8qIFNVTlgyNSAqLworI2lmZGVmIElCTVgyNQorI3VuZGVmIElCTVgy NQorI2VuZGlmIC8qIElCTVgyNSAqLworI2lmZGVmIFNUUkFUVVNYMjUKKyN1bmRlZiBTVFJBVFVT WDI1CisjZW5kaWYgLyogU1RSQVRVU1gyNSAqLworI2lmZGVmIENLX05FVEJJT1MKKyN1bmRlZiBD S19ORVRCSU9TCisjZW5kaWYgLyogQ0tfTkVUQklPUyAqLworI2lmZGVmIFNVUEVSTEFUCisjdW5k ZWYgU1VQRVJMQVQKKyNlbmRpZiAvKiBTVVBFUkxBVCAqLworI2lmZGVmIE5QSVBFCisjdW5kZWYg TlBJUEUKKyNlbmRpZiAvKiBOUElQRSAqLworI2lmZGVmIE5FVEZJTEUKKyN1bmRlZiBORVRGSUxF CisjZW5kaWYgLyogTkVURklMRSAqLworI2lmZGVmIE5FVENNRAorI3VuZGVmIE5FVENNRAorI2Vu ZGlmIC8qIE5FVENNRCAqLworI2lmZGVmIE5FVFBUWQorI3VuZGVmIE5FVFBUWQorI2VuZGlmIC8q IE5FVFBUWSAqLworI2lmZGVmIFJMT0dDT0RFCisjdW5kZWYgUkxPR0NPREUKKyNlbmRpZiAvKiBS TE9HQ09ERSAqLworI2lmZGVmIE5FVERMTAorI3VuZGVmIE5FVERMTAorI2VuZGlmIC8qIE5FVERM TCAqLworI2lmbmRlZiBOT1NTSAorI2RlZmluZSBOT1NTSAorI2VuZGlmIC8qIE5PU1NIICovCisj aWZuZGVmIE5PSFRUUAorI2RlZmluZSBOT0hUVFAKKyNlbmRpZiAvKiBOT0hUVFAgKi8KKyNpZm5k ZWYgTk9CUk9XU0VSCisjZGVmaW5lIE5PQlJPV1NFUgorI2VuZGlmIC8qIE5PQlJPV1NFUiAqLwor I2VuZGlmIC8qIElLU0RPTkxZICovCisvKgorICBOb3RlIHRoYXQgbm9uZSBvZiB0aGUgYWJvdmUg cHJlY2x1ZGVzIFROQ09ERSwgd2hpY2ggY2FuIGJlIGRlZmluZWQgaW4KKyAgdGhlIGFic2VuY2Ug b2YgVENQU09DS0VULCBldGMsIHRvIGVuYWJsZSBzZXJ2ZXItc2lkZSBUZWxuZXQgbmVnb3RhdGlv bi4KKyovCisjaWZuZGVmIFROQ09ERQkJCQkvKiBUaGlzIGlzIGZvciB0aGUgYmVuZWZpdCBvZiAq LworI2lmZGVmIFRDUFNPQ0tFVAkJCS8qIG1vZHVsZXMgdGhhdCBtaWdodCBuZWVkIFROQ09ERSAq LworI2RlZmluZSBUTkNPREUJCQkJLyogbm90IGFsbCBvZiBja2NuZXQuaC4uLiAqLworI2VuZGlm IC8qIFRDUFNPQ0tFVCAqLworI2VuZGlmIC8qIFROQ09ERSAqLworCisjaWZuZGVmIE5FVENPTk4K KyNpZmRlZiBUQ1BTT0NLRVQKKyNkZWZpbmUgTkVUQ09OTgorI2VuZGlmIC8qIFRDUFNPQ0tFVCAq LworI2VuZGlmIC8qIE5FVENPTk4gKi8KKworI2lmbmRlZiBERUZQQVIJCQkJLyogRGVmYXVsdCBw YXJpdHkgKi8KKyNkZWZpbmUgREVGUEFSIDAJCQkvKiBNdXN0IGJlIGhlcmUgYmVjYXVzZSBpdCBp cyB1c2VkICovCisjZW5kaWYgLyogREVGUEFSICovCQkJLyogYnkgYWxsIGNsYXNzZXMgb2YgbW9k dWxlcyAqLworCisjaWZkZWYgTlQKKyNpZm5kZWYgT1MyT1JXSU4zMgorI2RlZmluZSBPUzJPUldJ TjMyCisjZW5kaWYgLyogT1MyT1JXSU4zMiAqLworI2lmbmRlZiBPUzIKKyNkZWZpbmUgV0lOMzJP TkxZCisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogTlQgKi8KKworI2lmZGVmIE9TMgkJCQkv KiBGb3IgT1MvMiBkZWJ1Z2dpbmcgKi8KKyNpZm5kZWYgT1MyT1JXSU4zMgorI2RlZmluZSBPUzJP UldJTjMyCisjZW5kaWYgLyogT1MyT1JXSU4zMiAqLworI2lmZGVmIE5UCisjZGVmaW5lIE5PQ1JZ UFQKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjZGVmaW5lIE5UU0lHCisjZWxzZSAvKiBOVCAqLwor I2RlZmluZSBPUzJPTkxZCisjaW5jbHVkZSA8b3MyZGVmLmg+CisjZW5kaWYgLyogTlQgKi8KKyNp Zm5kZWYgT1MyT1JVTklYCisjZGVmaW5lIE9TMk9SVU5JWAorI2VuZGlmIC8qIE9TMk9SVU5JWCAq LworI2lmbmRlZiBPUzJPUlZNUworI2RlZmluZSBPUzJPUlZNUworI2VuZGlmIC8qIE9TMk9SVk1T ICovCisjZW5kaWYgLyogT1MyICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgkJCS8qIEJlZ2luIGJ5 IGluY2x1ZGluZyB0aGlzLiAqLworI2luY2x1ZGUgPGN0eXBlLmg+CQkJLyogYW5kIHRoaXMuICov CisKKyNpZmRlZiBWTVMKKyNpbmNsdWRlIDx0eXBlcy5oPgkJCS8qIEVuc3VyZSBvZmZfdC4gKi8K KyNpbmNsdWRlICJja3ZybXMuaCIJCQkvKiBHZXQgTkFNREVGIE5BTVhfQ19NQVhSU1MuICovCisj ZW5kaWYgLyogZGVmIFZNUyAqLworCisvKiBTeXN0ZW0tdHlwZSBjb21waWxhdGlvbiBzd2l0Y2hl cyAqLworCisjaWZkZWYgRlQyMQkJCQkvKiBGb3J0dW5lIEZvcjpQcm8gMi4xIGltcGxpZXMgMS44 ICovCisjaWZuZGVmIEZUMTgKKyNkZWZpbmUgRlQxOAorI2VuZGlmIC8qIEZUMTggKi8KKyNlbmRp ZiAvKiBGVDIxICovCisKKyNpZmRlZiBfX2JzZGlfXworI2lmbmRlZiBCU0RJCisjZGVmaW5lIEJT REkKKyNlbmRpZiAvKiBCU0RJICovCisjZW5kaWYgLyogX19ic2RpX18gKi8KKworI2lmZGVmIEFJ WFBTMgkJCQkvKiBBSVhQUzIgaW1wbGllcyBBSVgzNzAgKi8KKyNpZm5kZWYgQUlYMzcwCisjZGVm aW5lIEFJWDM3MAorI2VuZGlmIC8qIEFJWDM3MCAqLworI2VuZGlmIC8qIEFJWFBTMiAqLworCisj aWZkZWYgQUlYMzcwCQkJCS8qIEFJWCBQUy8yIG9yIDM3MCBpbXBsaWVzIEJTRDQgKi8KKyNpZm5k ZWYgQlNENAorI2RlZmluZSBCU0Q0CisjZW5kaWYgLyogQlNENCAqLworI2VuZGlmIC8qIEFJWDM3 MCAqLworCisjaWZkZWYgQUlYRVNBCQkJCS8qIEFJWC9FU0EgaW1wbGllcyBCU0Q0LjQgKi8KKyNp Zm5kZWYgQlNENDQKKyNkZWZpbmUgQlNENDQKKyNlbmRpZiAvKiBCU0Q0NCAqLworI2VuZGlmIC8q IEFJWEVTQSAqLworCisjaWZkZWYgQUlYNTMJCQkJLyogQUlYNTMgaW1wbGllcyBBSVg1MiAqLwor I2lmbmRlZiBBSVg1MgorI2RlZmluZSBBSVg1MgorI2VuZGlmIC8qIEFJWDUyICovCisjZW5kaWYg LyogQUlYNTMgKi8KKworI2lmZGVmIEFJWDUyCQkJCS8qIEFJWDUyIGltcGxpZXMgQUlYNTEgKi8K KyNpZm5kZWYgQUlYNTEKKyNkZWZpbmUgQUlYNTEKKyNlbmRpZiAvKiBBSVg1MSAqLworI2VuZGlm IC8qIEFJWDUyICovCisKKyNpZmRlZiBBSVg1MQkJCQkvKiBBSVg1MSBpbXBsaWVzIEFJWDUwICov CisjaWZuZGVmIEFJWDUwCisjZGVmaW5lIEFJWDUwCisjZW5kaWYgLyogQUlYNTAgKi8KKyNlbmRp ZiAvKiBBSVg1MSAqLworCisjaWZkZWYgQUlYNTAJCQkJLyogQUlYNTAgaW1wbGllcyBBSVg0NSAq LworI2lmbmRlZiBBSVg0NQorI2RlZmluZSBBSVg0NQorI2VuZGlmIC8qIEFJWDQ1ICovCisjZW5k aWYgLyogQUlYNTAgKi8KKworI2lmZGVmIEFJWDQ1CQkJCS8qIEFJWDQ1IGltcGxpZXMgQUlYNDQg Ki8KKyNpZm5kZWYgQUlYNDQKKyNkZWZpbmUgQUlYNDQKKyNlbmRpZiAvKiBBSVg0NCAqLworI2Vu ZGlmIC8qIEFJWDQ1ICovCisKKyNpZmRlZiBBSVg0NAkJCQkvKiBBSVg0NCBpbXBsaWVzIEFJWDQz ICovCisjaWZuZGVmIEFJWDQzCisjZGVmaW5lIEFJWDQzCisjZW5kaWYgLyogQUlYNDMgKi8KKyNl bmRpZiAvKiBBSVg0NCAqLworCisjaWZkZWYgQUlYNDMJCQkJLyogQUlYNDMgaW1wbGllcyBBSVg0 MiAqLworI2lmbmRlZiBBSVg0MgorI2RlZmluZSBBSVg0MgorI2VuZGlmIC8qIEFJWDQyICovCisj ZW5kaWYgLyogQUlYNDMgKi8KKworI2lmZGVmIEFJWDQyCQkJCS8qIEFJWDQyIGltcGxpZXMgQUlY NDEgKi8KKyNpZm5kZWYgQUlYNDEKKyNkZWZpbmUgQUlYNDEKKyNlbmRpZiAvKiBBSVg0MSAqLwor I2VuZGlmIC8qIEFJWDQyICovCisKKyNpZmRlZiBTVjY4UjNWNgkJCQkvKiBTeXN0ZW0gVi82OCBS MzJWNiBpbXBsaWVzIFNWUjMgKi8KKyNpZm5kZWYgU1ZSMworI2RlZmluZSBTVlIzCisjZW5kaWYg LyogU1ZSMyAqLworI2VuZGlmIC8qIFNWNjhSM1Y2ICovCisKKyNpZmRlZiBTVjg4UjMyCQkJCS8q IFN5c3RlbSBWLzg4IFIzMiBpbXBsaWVzIFNWUjMgKi8KKyNpZm5kZWYgU1ZSMworI2RlZmluZSBT VlIzCisjZW5kaWYgLyogU1ZSMyAqLworI2VuZGlmIC8qIFNWODhSMzIgKi8KKworI2lmZGVmIERH VVg1NDAJCQkJLyogREcgVVggNS40MCBpbXBsaWVzIFN5cyBWIFIgNCAqLworI2lmbmRlZiBTVlI0 CisjZGVmaW5lIFNWUjQKKyNlbmRpZiAvKiBTVlI0ICovCisjZW5kaWYgLyogREdVWDU0MCAqLwor CisjaWZuZGVmIERHVVgKKyNpZmRlZiBER1VYNTQwCQkJCS8qIERHL1VYIDUuNDAgaW1wbGllcyBE R1VYICovCisjZGVmaW5lIERHVVgKKyNlbHNlCisjaWZkZWYgREdVWDQzMAkJCQkvKiBTbyBkb2Vz IERHL1VYIDQuMzAgKi8KKyNkZWZpbmUgREdVWAorI2VuZGlmIC8qIERHVVg0MzAgKi8KKyNlbmRp ZiAvKiBER1VYNTQwICovCisjZW5kaWYgLyogREdVWCAqLworCisjaWZkZWYgSVJJWDY1CQkJCS8q IElSSVggNi41IGltcGxpZXMgSVJJWCA2LjQgKi8KKyNpZm5kZWYgSVJJWDY0CisjZGVmaW5lIElS SVg2NAorI2VuZGlmIC8qIElSSVg2NCAqLworI2VuZGlmIC8qIElSSVg2NSAqLworCisjaWZkZWYg SVJJWDY0CQkJCS8qIElSSVggNi40IGltcGxpZXMgSVJJWCA2LjIgKi8KKyNpZm5kZWYgQlNENDRP UlBPU0lYCisjZGVmaW5lIEJTRDQ0T1JQT1NJWAkJCS8qIGZvciBja3V0aW8ncyBiZW5lZml0ICov CisjZW5kaWYgLyogQlNENDRPUlBPU0lYICovCisjaWZuZGVmIElSSVg2MgorI2RlZmluZSBJUklY NjIKKyNlbmRpZiAvKiBJUklYNjIgKi8KKyNlbmRpZiAvKiBJUklYNjQgKi8KKworI2lmZGVmIElS SVg2MgkJCQkvKiBJUklYIDYuMiBpbXBsaWVzIElSSVggNi4wICovCisjaWZuZGVmIElSSVg2MAor I2RlZmluZSBJUklYNjAKKyNlbmRpZiAvKiBJUklYNjAgKi8KKyNlbmRpZiAvKiBJUklYNjIgKi8K KworI2lmZGVmIElSSVg2MAkJCQkvKiBJUklYIDYuMCBpbXBsaWVzIElSSVggNS4xICovCisjaWZu ZGVmIElSSVg1MQorI2RlZmluZSBJUklYNTEKKyNlbmRpZiAvKiBJUklYNTEgKi8KKyNpZm5kZWYg SVJJWDUyCQkJCS8qIEFuZCBJUklYIDUuMiAoZm9yIGh3ZmMpICovCisjZGVmaW5lIElSSVg1Mgor I2VuZGlmIC8qIElSSVg1MiAqLworI2VuZGlmIC8qIElSSVg2MCAqLworCisjaWZuZGVmIElSSVgJ CQkJLyogSVJJWCA0LjAgb3IgZ3JlYXRlciBpbXBsaWVzIElSSVggKi8KKyNpZmRlZiBJUklYNjQK KyNkZWZpbmUgSVJJWAorI2Vsc2UKKyNpZmRlZiBJUklYNjIKKyNkZWZpbmUgSVJJWAorI2Vsc2UK KyNpZmRlZiBJUklYNjAKKyNkZWZpbmUgSVJJWAorI2Vsc2UKKyNpZmRlZiBJUklYNTEKKyNkZWZp bmUgSVJJWAorI2Vsc2UKKyNpZmRlZiBJUklYNDAKKyNkZWZpbmUgSVJJWAorI2VuZGlmIC8qIElS SVg0MCAqLworI2VuZGlmIC8qIElSSVg1MSAqLworI2VuZGlmIC8qIElSSVg2MCAqLworI2VuZGlm IC8qIElSSVg2MiAqLworI2VuZGlmIC8qIElSSVg2NCAqLworI2VuZGlmIC8qIElSSVggKi8KKwor I2lmZGVmIE1JUFMJCQkJLyogTUlQUyBTeXN0ZW0gViBlbnZpcm9ubWVudCAqLworI2lmbmRlZiBT VlIzCQkJCS8qIGltcGxpZXMgU3lzdGVtIFYgUjMgb3IgbGF0ZXIgKi8KKyNkZWZpbmUgU1ZSMwor I2VuZGlmIC8qIFNWUjMgKi8KKyNlbmRpZiAvKiBNSVBTICovCisKKyNpZmRlZiBIUFVYOQkJCQkv KiBIUC1VWCA5LnggKi8KKyNpZm5kZWYgU1ZSMworI2RlZmluZSBTVlIzCisjZW5kaWYgLyogU1ZS MyAqLworI2lmbmRlZiBIUFVYCisjZGVmaW5lIEhQVVgKKyNlbmRpZiAvKiBIUFVYICovCisjaWZu ZGVmIEhQVVg5UExVUworI2RlZmluZSBIUFVYOVBMVVMKKyNlbmRpZiAvKiBIUFVYOVBMVVMgKi8K KyNlbmRpZiAvKiBIUFVYOSAqLworCisjaWZkZWYgSFBVWDEwCQkJCS8qIEhQLVVYIDEwLnggKi8K KyNpZm5kZWYgSFBVWDEwMTAJCQkvKiBJZiBhbnl0aGluZyBoaWdoZXIgaXMgZGVmaW5lZCAqLwor I2lmZGVmIEhQVVgxMDIwCQkJCS8qIGRlZmluZSBIUFVYMTAxMCB0b28uICovCisjZGVmaW5lIEhQ VVgxMDEwCisjZW5kaWYgLyogSFBVWDEwMjAgKi8KKyNpZmRlZiBIUFVYMTAzMAorI2RlZmluZSBI UFVYMTAxMAorI2VuZGlmIC8qIEhQVVgxMDMwICovCisjZW5kaWYgLyogSFBVWDEwMTAgKi8KKwor I2lmZGVmIEhQVVgxMTAwCQkJCS8qIEhQLVVYIDExLjAwIGltcGxpZXMgMTAuMTAgKi8KKyNpZm5k ZWYgSFBVWDEwMTAKKyNkZWZpbmUgSFBVWDEwMTAKKyNlbmRpZiAvKiBIUFVYMTAxMCAqLworI2Vu ZGlmIC8qIEhQVVgxMTAwICovCisKKyNpZm5kZWYgU1ZSNAorI2RlZmluZSBTVlI0CisjZW5kaWYg LyogU1ZSNCAqLworI2lmbmRlZiBIUFVYCisjZGVmaW5lIEhQVVgKKyNlbmRpZiAvKiBIUFVYICov CisjaWZuZGVmIEhQVVg5UExVUworI2RlZmluZSBIUFVYOVBMVVMKKyNlbmRpZiAvKiBIUFVYOVBM VVMgKi8KKyNlbmRpZiAvKiBIUFVYMTAgKi8KKworI2lmZGVmIFFOWAkJCQkvKiBRTlggU29mdHdh cmUgU3lzdGVtcyBJbmMgKi8KKyNpZm5kZWYgUE9TSVgJCQkJLyogUU5YIDQuMCBvciBsYXRlciBp cyBQT1NJWCAqLworI2RlZmluZSBQT1NJWAorI2VuZGlmIC8qIFBPU0lYICovCisjaWZuZGVmIF9f Mzg2X18JCQkJLyogQ29tZXMgaW4gMTYtYml0IGFuZCAzMi1iaXQgKi8KKyNkZWZpbmUgX18xNkJJ VF9fCisjZGVmaW5lIENLX1FOWDE2CisjZWxzZQorI2RlZmluZSBfXzMyQklUX18KKyNkZWZpbmUg Q0tfUU5YMzIKKyNlbmRpZiAvKiBfXzM4Nl9fICovCisjZW5kaWYgLyogUU5YICovCisKKy8qCisg IDQuNEJTRCBpcyBhIG1peHR1cmUgb2YgU3lzdGVtIFYgUjQsIFBPU0lYLCBhbmQgNC4zQlNELgor Ki8KKyNpZmRlZiBCU0Q0NAkJCQkvKiA0LjQgQlNEICovCisjaWZuZGVmIFNWUjQJCQkJLyogQlNE NDQgaW1wbGllcyBTVlI0ICovCisjZGVmaW5lIFNWUjQKKyNlbmRpZiAvKiBTVlI0ICovCisjaWZu ZGVmIE5PU0VUQlVGCQkJLyogTk9TRVRCVUYgaXMgc2FmZSAqLworI2RlZmluZSBOT1NFVEJVRgor I2VuZGlmIC8qIE5PU0VUQlVGICovCisjaWZuZGVmIERJUkVOVAkJCQkvKiBVc2VzIDxkaXJlbnQu aD4gKi8KKyNkZWZpbmUgRElSRU5UCisjZW5kaWYgLyogRElSRU5UICovCisjZW5kaWYgLyogQlNE NDQgKi8KKworI2lmZGVmIE9QRU5CU0QJCQkJLyogT3BlbkJTRCBtaWdodCBvciBtaWdodCBub3Qg Ki8KKyNpZm5kZWYgX19PcGVuQlNEX18JCQkvKiBoYXZlIHRoaXMgZGVmaW5lZC4uLiAqLworI2Rl ZmluZSBfX09wZW5CU0RfXworI2VuZGlmIC8qIF9fT3BlbkJTRF9fICovCisjZW5kaWYgLyogT1BF TkJTRCAqLworCisjaWZkZWYgU1ZSMwkJCQkvKiBTVlIzIGltcGxpZXMgQVRUU1YgKi8KKyNpZm5k ZWYgQVRUU1YKKyNkZWZpbmUgQVRUU1YKKyNlbmRpZiAvKiBBVFRTViAqLworI2VuZGlmIC8qIFNW UjMgKi8KKworI2lmZGVmIFNWUjQJCQkJLyogU1ZSNCBpbXBsaWVzIEFUVFNWICovCisjaWZuZGVm IEFUVFNWCisjZGVmaW5lIEFUVFNWCisjZW5kaWYgLyogQVRUU1YgKi8KKyNpZm5kZWYgU1ZSMwkJ CQkvKiAuLi5hcyB3ZWxsIGFzIFNWUjMgKi8KKyNkZWZpbmUgU1ZSMworI2VuZGlmIC8qIFNWUjMg Ki8KKyNlbmRpZiAvKiBTVlI0ICovCisKKyNpZmRlZiBPWE9TCisjaWZuZGVmIEFUVFNWCisjZGVm aW5lIEFUVFNWCQkJCS8qIE9YT1MgaW1wbGllcyBBVFRTViAqLworI2VuZGlmIC8qICEgQVRUU1Yg Ki8KKyNkZWZpbmUgU1dfQUNDX0lECQkJLyogYWNjZXNzKCkgd2FudHMgcHJpdnMgb24gKi8KKyNk ZWZpbmUga2lsbCBwcml2X2tpbGwJCQkvKiBraWxsKCkgd2FudHMgcHJpdnMgb24gKi8KKyNpZm5k ZWYgTk9TRVRCVUYKKyNkZWZpbmUgTk9TRVRCVUYJCQkvKiBOT1NFVEJVRiBpcyBzYWZlICovCisj ZW5kaWYgLyogISBOT1NFVEJVRiAqLworI2VuZGlmIC8qIE9YT1MgKi8KKworI2lmZGVmIFVUU1YJ CQkJLyogVVRTViBpbXBsaWVzIEFUVFNWICovCisjaWZuZGVmIEFUVFNWCisjZGVmaW5lIEFUVFNW CisjZW5kaWYgLyogQVRUU1YgKi8KKyNlbmRpZiAvKiBVVFNWICovCisKKyNpZmRlZiBYRU5JWAkJ CQkvKiBYRU5JWCBpbXBsaWVzIEFUVFNWICovCisjaWZuZGVmIEFUVFNWCisjZGVmaW5lIEFUVFNW CisjZW5kaWYgLyogQVRUU1YgKi8KKyNlbmRpZiAvKiBYRU5JWCAqLworCisjaWZkZWYgQVVYCQkJ CS8qIEFVWCBpbXBsaWVzIEFUVFNWICovCisjaWZuZGVmIEFUVFNWCisjZGVmaW5lIEFUVFNWCisj ZW5kaWYgLyogQVRUU1YgKi8KKyNlbmRpZiAvKiBBVVggKi8KKworI2lmZGVmIEFUVDczMDAJCQkJ LyogQVRUNzMwMCBpbXBsaWVzIEFUVFNWICovCisjaWZuZGVmIEFUVFNWCisjZGVmaW5lIEFUVFNW CisjZW5kaWYgLyogQVRUU1YgKi8KKyNlbmRpZiAvKiBBVFQ3MzAwICovCisKKyNpZmRlZiBBVFQ2 MzAwCQkJCS8qIEFUVDYzMDAgaW1wbGllcyBBVFRTViAqLworI2lmbmRlZiBBVFRTVgorI2RlZmlu ZSBBVFRTVgorI2VuZGlmIC8qIEFUVFNWICovCisjZW5kaWYgLyogQVRUNjMwMCAqLworCisjaWZk ZWYgSFBVWAkJCQkvKiBIUFVYIGltcGxpZXMgQVRUU1YgKi8KKyNpZm5kZWYgQVRUU1YKKyNkZWZp bmUgQVRUU1YKKyNlbmRpZiAvKiBBVFRTViAqLworI2VuZGlmIC8qIEhQVVggKi8KKworI2lmZGVm IElTSUlJCQkJCS8qIElTSUlJIGltcGxpZXMgQVRUU1YgKi8KKyNpZm5kZWYgQVRUU1YKKyNkZWZp bmUgQVRUU1YKKyNlbmRpZiAvKiBBVFRTViAqLworI2VuZGlmIC8qIElTSUlJICovCisKKyNpZmRl ZiBORVhUMzMJCQkJLyogTkVYVDMzIGltcGxpZXMgTkVYVCAqLworI2lmbmRlZiBORVhUCisjZGVm aW5lIE5FWFQKKyNlbmRpZiAvKiBORVhUICovCisjZW5kaWYgLyogTkVYVDMzICovCisKKyNpZmRl ZiBORVhUCQkJCS8qIE5FWFQgaW1wbGllcyBCU0Q0ICovCisjaWZuZGVmIEJTRDQKKyNkZWZpbmUg QlNENAorI2VuZGlmIC8qIEJTRDQgKi8KKyNlbmRpZiAvKiBORVhUICovCisKKyNpZmRlZiBCU0Q0 MQkJCQkvKiBCU0Q0MSBpbXBsaWVzIEJTRDQgKi8KKyNpZm5kZWYgQlNENAorI2RlZmluZSBCU0Q0 CisjZW5kaWYgLyogQlNENCAqLworI2VuZGlmIC8qIEJTRDQxICovCisKKyNpZmRlZiBCU0Q0MwkJ CQkvKiBCU0Q0MyBpbXBsaWVzIEJTRDQgKi8KKyNpZm5kZWYgQlNENAorI2RlZmluZSBCU0Q0Cisj ZW5kaWYgLyogQlNENCAqLworI2VuZGlmIC8qIEJTRDQzICovCisKKyNpZmRlZiBCU0Q0CQkJCS8q IEJTRDQgaW1wbGllcyBBTllCU0QgKi8KKyNpZm5kZWYgQU5ZQlNECisjZGVmaW5lIEFOWUJTRAor I2VuZGlmIC8qIEFOWUJTRCAqLworI2VuZGlmIC8qIEJTRDQgKi8KKworI2lmZGVmIEJTRDI5CQkJ CS8qIEJTRDI5IGltcGxpZXMgQU5ZQlNEICovCisjaWZuZGVmIEFOWUJTRAorI2RlZmluZSBBTllC U0QKKyNlbmRpZiAvKiBBTllCU0QgKi8KKyNlbmRpZiAvKiBCU0QyOSAqLworCisjaWZkZWYgQVRU U1YJCQkJLyogQVRUU1YgaW1wbGllcyBVTklYICovCisjaWZuZGVmIFVOSVgKKyNkZWZpbmUgVU5J WAorI2VuZGlmIC8qIFVOSVggKi8KKyNlbmRpZiAvKiBBVFRTViAqLworCisjaWZkZWYgQU5ZQlNE CQkJCS8qIEFOWUJTRCBpbXBsaWVzIFVOSVggKi8KKyNpZm5kZWYgVU5JWAorI2RlZmluZSBVTklY CisjZW5kaWYgLyogVU5JWCAqLworI2VuZGlmIC8qIEFOWUJTRCAqLworCisjaWZkZWYgUE9TSVgJ CQkJLyogUE9TSVggaW1wbGllcyBVTklYICovCisjaWZuZGVmIFVOSVgKKyNkZWZpbmUgVU5JWAor I2VuZGlmIC8qIFVOSVggKi8KKyNpZm5kZWYgRElSRU5UCQkJCS8qIGFuZCBESVJFTlQsIGkuZS4g PGRpcmVudC5oPiAqLworI2lmbmRlZiBTRElSRU5UCisjZGVmaW5lIERJUkVOVAorI2VuZGlmIC8q IFNESVJFTlQgKi8KKyNlbmRpZiAvKiBESVJFTlQgKi8KKyNpZm5kZWYgTk9GSUxFSAkJCQkvKiBQ T1NJWCBkb2Vzbid0IHVzZSA8c3lzL2ZpbGUuaD4gKi8KKyNkZWZpbmUgTk9GSUxFSAorI2VuZGlm IC8qIE5PRklMRUggKi8KKyNlbmRpZiAvKiBQT1NJWCAqLworCisjaWZkZWYgVjcKKyNpZm5kZWYg VU5JWAorI2RlZmluZSBVTklYCisjZW5kaWYgLyogVU5JWCAqLworI2VuZGlmIC8qIFY3ICovCisK KyNpZmRlZiBDT0hFUkVOVAorI2lmbmRlZiBVTklYCisjZGVmaW5lIFVOSVgKKyNlbmRpZiAvKiBV TklYICovCisjaWZkZWYgQ09NTUVOVAorI2lmbmRlZiBOT0NVUlNFUworI2RlZmluZSBOT0NVUlNF UworI2VuZGlmIC8qIE5PQ1VSU0VTICovCisjZW5kaWYgLyogQ09NTUVOVCAqLworI2VuZGlmIC8q IENPSEVSRU5UICovCisKKyNpZmRlZiBNSU5JWAorI2lmbmRlZiBVTklYCisjZGVmaW5lIFVOSVgK KyNlbmRpZiAvKiBVTklYICovCisjZW5kaWYgLyogTUlOSVggKi8KKy8qCisgIFRoZSBzeW1ib2wg U1ZPUlBPU0lYIGlzIGRlZmluZWQgZm9yIGJvdGggQVQmVCBhbmQgUE9TSVggY29tcGlsYXRpb25z CisgIHRvIG1ha2UgaXQgZWFzaWVyIHRvIHNlbGVjdCBpdGVtcyB0aGF0IFN5c3RlbSBWIGFuZCBQ T1NJWCBoYXZlIGluIGNvbW1vbiwKKyAgYnV0IHdoaWNoIEJTRCwgVjcsIGV0YywgZG8gbm90IGhh dmUuCisqLworI2lmZGVmIEFUVFNWCisjaWZuZGVmIFNWT1JQT1NJWAorI2RlZmluZSBTVk9SUE9T SVgKKyNlbmRpZiAvKiBTVk9SUE9TSVggKi8KKyNlbmRpZiAvKiBBVFRTViAqLworCisjaWZkZWYg UE9TSVgKKyNpZm5kZWYgU1ZPUlBPU0lYCisjZGVmaW5lIFNWT1JQT1NJWAorI2VuZGlmIC8qIFNW T1JQT1NJWCAqLworI2VuZGlmIC8qIFBPU0lYICovCisKKy8qCisgIFRoZSBzeW1ib2wgU1ZSNE9S UE9TSVggaXMgZGVmaW5lZCBmb3IgYm90aCBBVCZUIFN5c3RlbSBWIFI0IGFuZCBQT1NJWAorICBj b21waWxhdGlvbnMgdG8gbWFrZSBpdCBlYXNpZXIgdG8gc2VsZWN0IGl0ZW1zIHRoYXQgU3lzdGVt IFYgUjQgYW5kIFBPU0lYCisgIGhhdmUgaW4gY29tbW9uLCBidXQgd2hpY2ggQlNELCBWNywgYW5k IFN5c3RlbSBWIFIzIGFuZCBlYXJsaWVyLCBldGMsIGRvCisgIG5vdCBoYXZlLgorKi8KKyNpZmRl ZiBQT1NJWAorI2lmbmRlZiBTVlI0T1JQT1NJWAorI2RlZmluZSBTVlI0T1JQT1NJWAorI2VuZGlm IC8qIFNWUjRPUlBPU0lYICovCisjZW5kaWYgLyogUE9TSVggKi8KKyNpZmRlZiBTVlI0CisjaWZu ZGVmIFNWUjRPUlBPU0lYCisjZGVmaW5lIFNWUjRPUlBPU0lYCisjZW5kaWYgLyogU1ZSNE9SUE9T SVggKi8KKyNlbmRpZiAvKiBTVlI0ICovCisKKy8qCisgIFRoZSBzeW1ib2wgQlNENDRPUlBPU0lY IGlzIGRlZmluZWQgZm9yIGJvdGggNC40QlNEIGFuZCBQT1NJWCBjb21waWxhdGlvbnMKKyAgdG8g bWFrZSBpdCBlYXNpZXIgdG8gc2VsZWN0IGl0ZW1zIHRoYXQgNC40QlNEIGFuZCBQT1NJWCBoYXZl IGluIGNvbW1vbiwKKyAgYnV0IHdoaWNoIFN5c3RlbSBWLCBCU0QsIFY3LCBldGMsIGRvIG5vdCBo YXZlLgorKi8KKyNpZmRlZiBCU0Q0NAorI2lmbmRlZiBCU0Q0NE9SUE9TSVgKKyNkZWZpbmUgQlNE NDRPUlBPU0lYCisjZW5kaWYgLyogQlNENDRPUlBPU0lYICovCisjZW5kaWYgLyogQlNENDQgKi8K KworI2lmZGVmIFBPU0lYCisjaWZuZGVmIEJTRDQ0T1JQT1NJWAorI2RlZmluZSBCU0Q0NE9SUE9T SVgKKyNlbmRpZiAvKiBCU0Q0NE9SUE9TSVggKi8KKyNlbmRpZiAvKiBQT1NJWCAqLworCisjaWZk ZWYgVU5JWAkJCQkvKiBGb3IgaXRlbXMgY29tbW9uIHRvIE9TLzIgYW5kIFVOSVggKi8KKyNpZm5k ZWYgT1MyT1JVTklYCisjZGVmaW5lIE9TMk9SVU5JWAorI2VuZGlmIC8qIE9TMk9SVU5JWCAqLwor I2VuZGlmIC8qIFVOSVggKi8KKworI2lmZGVmIFVOSVgJCQkJLyogRm9yIGl0ZW1zIGNvbW1vbiB0 byBWTVMgYW5kIFVOSVggKi8KKyNkZWZpbmUgVk1TT1JVTklYCisjZWxzZQorI2lmZGVmIFZNUwor I2RlZmluZSBWTVNPUlVOSVgKKyNpZm5kZWYgT1MyT1JWTVMKKyNkZWZpbmUgT1MyT1JWTVMKKyNl bmRpZiAvKiBPUzJPUlZNUyAqLworI2VuZGlmIC8qIFZNUyAqLworI2VuZGlmIC8qIFVOSVggKi8K KworI2lmbmRlZiBVTklYT1JPU0sJCQkvKiBVTklYIG9yIE9TLTkgKG9yIE9TLTkwMDApICovCisj aWZkZWYgVU5JWAorI2RlZmluZSBVTklYT1JPU0sKKyNlbHNlCisjaWZkZWYgT1NLCisjZGVmaW5l IFVOSVhPUk9TSworI2VuZGlmIC8qIE9TSyAqLworI2VuZGlmIC8qIFVOSVggKi8KKyNlbmRpZiAv KiBVTklYT1JPU0sgKi8KKworI2lmbmRlZiBPU0tPUlVOSVgKKyNpZmRlZiBVTklYT1JPU0sKKyNk ZWZpbmUgT1NLT1JVTklYCisjZW5kaWYgLyogVU5JWE9ST1NLICovCisjZW5kaWYgLyogT1NLT1JV TklYICovCisKKyNpZmRlZiBPUzIKKyNkZWZpbmUgQ0tfQU5TSUMJCSAvKiBPUy8yIHN1cHBvcnRz IEFOU0lDIGFuZCBtb3JlIGV4dGVuc2lvbnMgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKworI2lmZGVm IE9TRjUwCQkJICAgLyogTmV3ZXIgT1NGLzEgdmVyc2lvbnMgaW1wbHkgb2xkZXIgb25lcyAqLwor I2lmbmRlZiBPU0Y0MAorI2RlZmluZSBPU0Y0MAorI2VuZGlmIC8qIE9TRjQwICovCisjZW5kaWYg LyogT1NGNTAgKi8KKworI2lmZGVmIE9TRjQwCisjaWZuZGVmIE9TRjMyCisjZGVmaW5lIE9TRjMy CisjZW5kaWYgLyogT1NGMzIgKi8KKyNlbmRpZiAvKiBPU0Y0MCAqLworCisjaWZkZWYgT1NGMzIK KyNpZm5kZWYgT1NGMzAKKyNkZWZpbmUgT1NGMzAKKyNlbmRpZiAvKiBPU0YzMCAqLworI2VuZGlm IC8qIE9TRjMyICovCisKKyNpZmRlZiBPU0YzMAorI2lmbmRlZiBPU0YyMAorI2RlZmluZSBPU0Yy MAorI2VuZGlmIC8qIE9TRjIwICovCisjZW5kaWYgLyogT1NGMzAgKi8KKworI2lmZGVmIE9TRjIw CisjaWZuZGVmIE9TRjEwCisjZGVmaW5lIE9TRjEwCisjZW5kaWYgLyogT1NGMTAgKi8KKyNlbmRp ZiAvKiBPU0YyMCAqLworCisjaWZkZWYgX19ERUNDCQkJCS8qIEZvciBERUMgQWxwaGEgVk1TIG9y IE9TRi8xICovCisjaWZuZGVmIENLX0FOU0lDCisjZGVmaW5lIENLX0FOU0lDCQkJLyogRXZlbiB3 aXRoIC9zdGFuZD12YXhjLCBuZWVkIGFuc2kgKi8KKyNlbmRpZiAvKiBDS0FOU0lDICovCisjaWZu ZGVmIFNJR19WCisjZGVmaW5lIFNJR19WCQkJCS8qIGFuZCBzaWduYWwgdHlwZSBpcyBWT0lEICov CisjZW5kaWYgLyogU0lHX1YgKi8KKyNpZm5kZWYgQ0tfQU5TSUxJQlMKKyNkZWZpbmUgQ0tfQU5T SUxJQlMJCQkvKiAoTWFydGluIFppbnNlciwgRmViIDE5OTUpICovCisjZW5kaWYgLyogQ0tfQU5T SUxJQlMgKi8KKyNpZm5kZWYgX1BPU0lYX0NfU09VUkNFCisjZGVmaW5lIF9QT1NJWF9DX1NPVVJD RSAxCisjZW5kaWYgLyogX1BPU0lYX0NfU09VUkNFICovCisjZW5kaWYJLyogX19ERUNDICovCisK KyNpZmRlZiBWTVMKKyNpZmRlZiBfX2lhNjQJCQkJLyogVk1TIG9uIEl0YW5pdW0gKi8KKyNpZm5k ZWYgVk1TSTY0CisjZGVmaW5lIFZNU0k2NAorI2VuZGlmCS8qIFZNU0k2NCAqLworI2VuZGlmCS8q IF9faWE2NCAqLworI2lmbmRlZiBWTVM2NEJJVAkJCS8qIDY0LWJpdCBWTVMgb24gSXRhbml1bSBv ciBBbHBoYSAqLworI2lmZGVmIF9faWE2NAorI2RlZmluZSBWTVM2NEJJVAorI2Vsc2UKKyNpZmRl ZiBfX0FMUEhBCisjZGVmaW5lIFZNUzY0QklUCisjZW5kaWYJLyogX19pYTY0ICovCisjZW5kaWYJ LyogX19BTFBIQSAqLworI2VuZGlmCS8qIFZNUzY0QklUICovCisjZW5kaWYJLyogVk1TICovCisK KyNpZmRlZiBhcG9sbG8JCQkJLyogTWF5IGJlIEFOU0ktQywgY2hlY2sgZnVydGhlciAqLworI2lm ZGVmIF9fU1REQ1BQX18KKyNkZWZpbmUgQ0tfQU5TSUMJCQkvKiBZZXMsIHRoaXMgaXMgcmVhbCBB TlNJLUMgKi8KKyNkZWZpbmUgU0lHX1YKKyNlbHNlCisjZGVmaW5lIE5PQU5TSQkJCQkvKiBOb3Bl LCBub3QgQU5TSSAqLworI3VuZGVmIF9fU1REQ19fCQkJCS8qIEV2ZW4gdGhvdWdoIGl0IHNheSBp dCBpcyEgKi8KKyNkZWZpbmUgU0lHX0kKKyNlbmRpZiAvKiBfX1NURENQUF9fICovCisjZW5kaWYg LyogYXBvbGxvICovCisKKyNpZmRlZiBQT1NJWAkJCQkvKiAtRFBPU0lYIG9uIGNjIGNvbW1hbmQg bGluZSAqLworI2lmbmRlZiBfUE9TSVhfU09VUkNFCQkJLyogSW1wbGllcyBfUE9TSVhfU09VUkNF ICovCisjZGVmaW5lIF9QT1NJWF9TT1VSQ0UKKyNlbmRpZiAvKiBfUE9TSVhfU09VUkNFICovCisj ZW5kaWYgLyogUE9TSVggKi8KKworLyoKKyAgQU5TSSBDPyAgVGhhdCBpcywgZG8gd2UgaGF2ZSBm dW5jdGlvbiBwcm90b3R5cGVzLCBuZXctc3R5bGUKKyAgZnVuY3Rpb24gZGVjbGFyYXRpb25zLCBh bmQgcGFyYW1ldGVyIHR5cGUgY2hlY2tpbmcgYW5kIGNvZXJjaW9uPworKi8KKyNpZmRlZiBNQUMJ CQkJLyogTVBXIEMgaXMgQU5TSSAqLworI2lmbmRlZiBOT0FOU0kKKyNpZm5kZWYgQ0tfQU5TSUMK KyNkZWZpbmUgQ0tfQU5TSUMKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworI2VuZGlmIC8qIE5PQU5T SSAqLworI2VuZGlmIC8qIE1BQyAqLworCisjaWZkZWYgU1RSQVRVUwkJCQkvKiBTdHJhdHVzIFZP UyAqLworI2lmbmRlZiBDS19BTlNJQworI2RlZmluZSBDS19BTlNJQworI2VuZGlmIC8qIENLX0FO U0lDICovCisjaWZuZGVmIE5PU1RBVAorI2RlZmluZSBOT1NUQVQKKyNlbmRpZiAvKiBOT1NUQVQg Ki8KKyNlbmRpZiAvKiBTVFJBVFVTICovCisKKyNpZm5kZWYgTk9BTlNJCisjaWZkZWYgX19TVERD X18JCQkJLyogX19TVERDX18gbWVhbnMgQU5TSSBDICovCisjaWZuZGVmIENLX0FOU0lDCisjZGVm aW5lIENLX0FOU0lDCisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKyNlbmRpZiAvKiBfX1NURENfXyAq LworI2VuZGlmIC8qIE5PQU5TSSAqLworLyoKKyAgX1BST1RPVFlQKCkgaXMgdXNlZCBmb3IgZm9y d2FyZCBkZWNsYXJhdGlvbnMgb2YgZnVuY3Rpb25zIHNvIHdlIGNhbiBoYXZlCisgIHBhcmFtZXRl ciBhbmQgcmV0dXJuIHZhbHVlIHR5cGUgY2hlY2tpbmcgaWYgdGhlIGNvbXBpbGVyIG9mZmVycyBp dC4KKyAgX19TVERDX18gc2hvdWxkIGJlIGRlZmluZWQgYnkgdGhlIGNvbXBpbGVyIG9ubHkgaWYg ZnVuY3Rpb24gcHJvdG90eXBlcyBhcmUKKyAgYWxsb3dlZC4gIE90aGVyd2lzZSwgd2UgZ2V0IG9s ZC1zdHlsZSBmb3J3YXJkIGRlY2xhcmF0aW9ucy4gIE91ciBvd24gcHJpdmF0ZQorICBDS19BTlNJ QyBzeW1ib2wgdGVsbHMgd2hldGhlciB3ZSB1c2UgQU5TSSBDIHByb3RvdHlwZXMuICBUbyBmb3Jj ZSB1c2Ugb2YKKyAgQU5TSSBwcm90b3R5cGVzLCBpbmNsdWRlIC1EQ0tfQU5TSUMgb24gdGhlIGNj IGNvbW1hbmQgbGluZS4gIFRvIGRpc2FibGUgdGhlCisgIHVzZSBvZiBBTlNJIHByb3RvdHlwZXMs IGluY2x1ZGUgLUROT0FOU0kuCisqLworI2lmZGVmIENLX0FOU0lDCisjZGVmaW5lIF9QUk9UT1RZ UCggZnVuYywgcGFybXMgKSBmdW5jIHBhcm1zCisjZWxzZSAvKiBOb3QgQU5TSSBDICovCisjZGVm aW5lIF9QUk9UT1RZUCggZnVuYywgcGFybXMgKSBmdW5jKCkKKyNlbmRpZiAvKiBDS19BTlNJQyAq LworCisjaWZuZGVmIE9TMgorI2lmZGVmIE5PTE9HSU4JCQkJLyogTk9MT0dJTiBpbXBsaWVzIE5P SUtTRCAqLworI2lmbmRlZiBOT0lLU0QKKyNkZWZpbmUgTk9JS1NECisjZW5kaWYgLyogTk9JS1NE ICovCisjZW5kaWYgLyogTk9MT0dJTiAqLworI2VuZGlmIC8qIE9TMiAqLworCisjaWZkZWYgTk9J S1NECQkJCS8qIEludGVybmV0IEtlcm1pdCBTZXJ2aWNlIERhZW1vbiAqLworI2lmbmRlZiBPUzIK KyNpZm5kZWYgTk9QUklOVEZTVUJTVAorI2RlZmluZSBOT1BSSU5URlNVQlNUCisjZW5kaWYgLyog Tk9QUklOVEZTVUJTVCAqLworI2VuZGlmIC8qIE9TMiAqLworI2lmbmRlZiBOT0xPR0lOCisjZGVm aW5lIE5PTE9HSU4KKyNlbmRpZiAvKiBOT0xPR0lOICovCisjaWZuZGVmIE5PU1lTTE9HCisjZGVm aW5lIE5PU1lTTE9HCisjZW5kaWYgLyogTk9TWVNMT0cgKi8KKyNpZm5kZWYgTk9XVE1QCisjZGVm aW5lIE5PV1RNUAorI2VuZGlmIC8qIE5PV1RNUCAqLworI2Vsc2UKKyNpZm5kZWYgSUtTRAorI2lm ZGVmIE9TMk9SVU5JWAkJCS8qIFBsYXRmb3JtcyB3aGVyZSBJS1NEIGlzIHN1cHBvcnRlZCAqLwor I2RlZmluZSBJS1NECisjZW5kaWYgLyogT1MyT1JVTklYICovCisjZW5kaWYgLyogSUtTRCAqLwor I2VuZGlmIC8qIE5PSUtTRCAqLworCisjaWZkZWYgSUtTRAkJCQkvKiBJS1NEIG9wdGlvbnMuLi4g Ki8KKyNpZm5kZWYgSUtTRENPTkYJCQkvKiBJS1NEIGNvbmZpZ3VyYXRpb24gZmlsZSAqLworI2lm ZGVmIFVOSVgKKyNkZWZpbmUgSUtTRENPTkYgIi9ldGMvaWtzZC5jb25mIgorI2Vsc2UKKyNpZmRl ZiBPUzIKKyNkZWZpbmUgSUtTRENPTkYgImlrc2Qua3NjIgorI2VuZGlmIC8qIE9TMiAqLworI2Vu ZGlmIC8qIFVOSVggKi8KKyNlbmRpZiAvKiBJS1NEQ09ORiAqLworI2lmbmRlZiBOT0lLU0RCCisj aWZuZGVmIElLU0RCCQkJCS8qIElLU0QgZGF0YWJhc2UgKi8KKyNpZmRlZiBVTklYCisjZGVmaW5l IElLU0RCCisjZGVmaW5lIElLX0xDS1RSSUVTIDE2CQkJLyogSG93IG1hbnkgdGltZXMgdG8gdHJ5 IHRvIGdldCBsb2NrICovCisjZGVmaW5lIElLX0xDS1NMRUVQIDEJCQkvKiBIb3cgbG9uZyB0byBz bGVlcCBiZXR3ZWVuIHRyaWVzICovCisjZGVmaW5lIElLX0xPQ0tGSUxFICJpa3NkLmxjayIJCS8q IERhdGFiYXNlIGxvY2tmaWxlbmFtZSAqLworI2RlZmluZSBJS19EQkFTRURJUiAiL3Zhci9sb2cv IgkJLyogRGF0YWJhc2UgZGlyZWN0b3J5ICovCisjZGVmaW5lIElLX0RCQVNFRklMICJpa3NkLmRi IgkJLyogRGF0YWJhc2UgZmlsZW5hbWUgKi8KKyNlbHNlIC8qIFVOSVggKi8KKyNpZmRlZiBPUzIK KyNkZWZpbmUgSUtTREIKKyNpZm5kZWYgTk9GVFJVTkNBVEUJCQkvKiBmdHJ1bmNhdGUoKSBub3Qg YXZhaWxhYmxlICovCisjZGVmaW5lIE5PRlRSVU5DQVRFCisjZW5kaWYgLyogTk9GVFJVTkNBVEUg Ki8KKyNkZWZpbmUgSUtfTENLVFJJRVMgMTYJCQkvKiBIb3cgbWFueSB0aW1lcyB0byB0cnkgdG8g Z2V0IGxvY2sgKi8KKyNkZWZpbmUgSUtfTENLU0xFRVAgMQkJCS8qIEhvdyBsb25nIHRvIHNsZWVw IGJldHdlZW4gdHJpZXMgKi8KKyNkZWZpbmUgSUtfTE9DS0ZJTEUgImlrc2QubGNrIgkJLyogREIg bG9ja2ZpbGVuYW1lIChpbiBzeXN0ZW1yb290KSAqLworI2RlZmluZSBJS19EQkFTRUZJTCAiaWtz ZC5kYiIJCS8qIERhdGFiYXNlIGZpbGVuYW1lICovCisjZW5kaWYgLyogT1MyICovCisjZW5kaWYg LyogVU5JWCAqLworI2VuZGlmIC8qIElLU0RCICovCisjZW5kaWYgLyogTk9JS1NEQiAqLworI2Vu ZGlmIC8qIElLU0QgKi8KKy8qCisgIFN1YnN0aXR1dGVzIGZvciBwcmludGYoKSBhbmQgZnJpZW5k cyB1c2VkIGluIElLUyB0byBjb21wZW5zYXRlIGZvcgorICBsYWNrIG9mIGEgdGVybWluYWwgZHJp dmVyLCBtYWlubHkgdG8gc3VwcGx5IENSIGFmdGVyIExGLgorKi8KKyNpZm5kZWYgTk9QUklOVEZT VUJTVAorI2lmZGVmIE1BQworLyoKKyAqIFRoZSBNQUMgZG9lc24ndCB1c2Ugc3RhbmRhcmQgc3Rk aW8gcm91dGluZXMuCisgKi8KKyN1bmRlZiBnZXRjaGFyCisjZGVmaW5lIGdldGNoYXIoKSAgIG1h Y19nZXRjaGFyKCkKKyN1bmRlZiBwdXRjaGFyCisjZGVmaW5lIHB1dGNoYXIoYykJbWFjX3B1dGNo YXIoYykKKyNkZWZpbmUgcHJpbnRmCQltYWNfcHJpbnRmCisjZGVmaW5lIHBlcnJvcgkJbWFjX3Bl cnJvcgorI2RlZmluZSBwdXRzCQltYWNfcHV0cworZXh0ZXJuIGludCBtYWNfcHV0Y2hhciAoaW50 IGMpOworZXh0ZXJuIGludCBtYWNfcHV0cyAoY29uc3QgY2hhciAqc3RyaW5nKTsKK2V4dGVybiBp bnQgbWFjX3ByaW50Zihjb25zdCBjaGFyICosIC4uLik7CitleHRlcm4gaW50IG1hY19nZXRjaGFy ICh2b2lkKTsKKyNlbmRpZiAvKiBNQUMgKi8KKworI2lmZGVmIE9TMgorI2RlZmluZSBwcmludGYg VnNjcm5wcmludGYKKyNkZWZpbmUgZnByaW50ZiBWc2NybmZwcmludGYKK2V4dGVybiBpbnQgVnNj cm5wcmludGYoY29uc3QgY2hhciAqLCAuLi4pOworZXh0ZXJuIGludCBWc2NybnByaW50dyhjb25z dCBjaGFyICosIC4uLik7CitleHRlcm4gaW50IFZzY3JuZnByaW50ZihGSUxFICosIGNvbnN0IGNo YXIgKiwgLi4uKTsKKyNpZmRlZiBwdXRjaGFyCisjdW5kZWYgcHV0Y2hhcgorI2VuZGlmIC8qIHB1 dGNoYXIgKi8KKyNkZWZpbmUgcHV0Y2hhcih4KSBWc2NybnByaW50ZigiJWMiLHgpCisjZGVmaW5l IHBlcnJvcih4KSAgVnNjcm5wZXJyb3IoeCkKKyNlbmRpZiAvKiBPUzIgKi8KKworI2lmbmRlZiBD S1dBUlRfQworI2lmZGVmIFVOSVgKKyNpZm5kZWYgcGRwMTEKKyNpZm5kZWYgQ0tYUFJJTlRGCisj ZGVmaW5lIENLWFBSSU5URgorI2VuZGlmIC8qIENLWFBSSU5URiAqLworI2VuZGlmIC8qIHBkcDEx ICovCisjZW5kaWYgLyogVU5JWCAqLworI2VuZGlmIC8qIENLV0FSVF9DICovCisjZW5kaWYgLyog Tk9QUklOVEZTVUJTVCAqLworCisjaWZkZWYgQ0tYUFJJTlRGCisjZGVmaW5lIHByaW50ZiBja3hw cmludGYKKyNkZWZpbmUgZnByaW50ZiBja3hmcHJpbnRmCisjaWZkZWYgQ0tfQU5TSUMKK19QUk9U T1RZUChpbnQgY2t4cHJpbnRmLChjb25zdCBjaGFyICosIC4uLikpOworI2lmZGVmIE5FWFQKK19Q Uk9UT1RZUCh2b2lkIGNreHBlcnJvciwoY29uc3QgY2hhciAqKSk7CisjZWxzZQorI2lmZGVmIENL X1NDT1Y1CitfUFJPVE9UWVAodm9pZCBja3hwZXJyb3IsKGNvbnN0IGNoYXIgKikpOworI2Vsc2UK K19QUk9UT1RZUChpbnQgY2t4cGVycm9yLChjb25zdCBjaGFyICopKTsKKyNlbmRpZiAvKiBDS19T Q09WNSAqLworI2VuZGlmIC8qIE5FWFQgKi8KK19QUk9UT1RZUChpbnQgY2t4ZnByaW50ZiwoRklM RSAqLCBjb25zdCBjaGFyICosIC4uLikpOworI2VuZGlmIC8qIENLX0FOU0lDICovCisjaWZkZWYg cHV0Y2hhcgorI3VuZGVmIHB1dGNoYXIKKyNlbmRpZiAvKiBwdXRjaGFyICovCisjZGVmaW5lIHB1 dGNoYXIoeCkgY2t4cHJpbnRmKCIlYyIseCkKKyNpZmRlZiBwdXRjCisjdW5kZWYgcHV0YworI2Vu ZGlmIC8qIHB1dGMgKi8KKyNkZWZpbmUgcHV0YyhhLGIpIGNreGZwcmludGYoYiwiJWMiLGEpCisj ZGVmaW5lIHBlcnJvcih4KSAgY2t4cGVycm9yKHgpCisjZW5kaWYgLyogQ0tYUFJJTlRGICovCisK Ky8qCisgIEFsdG9zLXNwZWNpZmljIGl0ZW1zOiA0ODYsIDU4NiwgOTg2IG1vZGVscy4uLgorKi8K KyNpZmRlZiBBOTg2CisjZGVmaW5lIE1fVk9JRAorI2RlZmluZSB2b2lkIGludAorI2RlZmluZSBD SEFSIGNoYXIKKyNkZWZpbmUgU0lHX0kKKyNlbmRpZiAvKiBBOTg2ICovCisKKy8qIFNpZ25hbCBo YW5kbGluZyAqLworCisjaWZkZWYgUU5YCisjaWZuZGVmIENLX1BPU0lYX1NJRworI2RlZmluZSBD S19QT1NJWF9TSUcKKyNlbmRpZiAvKiBDS19QT1NJWF9TSUcgKi8KKyNlbmRpZiAvKiBRTlggKi8K KworLyogCisgIHZvaWQgdHlwZSwgbm9ybWFsbHkgYXZhaWxhYmxlIG9ubHkgaW4gQU5TSSBjb21w aWxlcnMuCisgIFRoZSBIUC1VWCBleGNlcHRpb24gKGZvciBpdHMgImJ1bmRsZWQiIG5vbi1BTlNJ IEMgY29tcGlsZXIpCisgIGlzIGtub3duIHRvIGJlIHZhbGlkIGJhY2sgdG8gSFAtVVggNi41Lgor ICBBZGp1c3RtZW50cyBtaWdodCBiZSBuZWVkZWQgZm9yIGVhcmxpZXIgSFAtVVggdmVyc2lvbnMu CisqLworI2lmbmRlZiBWT0lECQkJCS8qIFVzZWQgdGhyb3VnaG91dCBhbGwgQy1LZXJtaXQgKi8K KyNpZmRlZiBDS19BTlNJQwkJCQkvKiBtb2R1bGVzLi4uICovCisjZGVmaW5lIFZPSUQgdm9pZAor I2Vsc2UKKyNpZmRlZiBIUFVYCisjZGVmaW5lIFZPSUQgdm9pZAorI2Vsc2UKKyNkZWZpbmUgVk9J RCBpbnQKKyNlbmRpZiAvKiBIUFVYICovCisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKyNlbmRpZiAv KiBWT0lEICovCisvKgorICBFeGFjdGx5IHRoZSBzYW1lIGFzIFZPSUQgYnV0IGZvciB1c2UgaW4g Y29udGV4dHMgd2hlcmUgdGhlIFZPSUQgc3ltYm9sCisgIGNvbmZsaWN0cyBzb21lIGhlYWRlci1m aWxlIGRlZmluaXRpb24uICBUaGlzIGlzIG5lZWRlZCBmb3IgdGhlIHNlY3Rpb24KKyAgb2YgY2t1 dXN4LmMgdGhhdCBwcm92aWRlcyBDLUtlcm1pdCdzIGN1cnNlcyBpbnRlcmZhY2UsIHJvdWdobHkg dGhlCisgIHNlY29uZCBoYWxmIG9mIGNrdXVzeC5jLgorKi8KKyNpZm5kZWYgQ0tWT0lECisjaWZk ZWYgQ0tfQU5TSUMKKyNkZWZpbmUgQ0tWT0lEIHZvaWQKKyNlbHNlCisjaWZkZWYgSFBVWAorI2Rl ZmluZSBDS1ZPSUQgdm9pZAorI2Vsc2UKKyNkZWZpbmUgQ0tWT0lEIGludAorI2VuZGlmIC8qIEhQ VVggKi8KKyNlbmRpZiAvKiBDS19BTlNJQyAqLworI2VuZGlmIC8qIENLVk9JRCAqLworCisvKiBD b25zdCB0eXBlICovCisKKyNpZm5kZWYgQ09OU1QKKyNpZmRlZiBPU0sKKyNpZmRlZiBfVUNDCisj ZGVmaW5lIENPTlNUIGNvbnN0CisjZWxzZQorI2RlZmluZSBDT05TVAorI2VuZGlmIC8qIF9VQ0Mg Ki8KKyNlbHNlICAvKiAhT1NLICovCisjaWZkZWYgQ0tfU0NPMzJWNAorI2RlZmluZSBDT05TVAor I2Vsc2UKKyNpZmRlZiBDS19BTlNJQworI2RlZmluZSBDT05TVCBjb25zdAorI2Vsc2UKKyNkZWZp bmUgQ09OU1QKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworI2VuZGlmIC8qIENLX1NDTzMyVjQgKi8K KyNlbmRpZiAvKiBPU0sgKi8KKyNlbmRpZiAvKiBDT05TVCAqLworCisvKiBTaWduYWwgdHlwZSAq LworCisjaWZuZGVmIFNJR19WCQkJCS8qIHNpZ25hbCgpIHR5cGUsIGlmIG5vdCBkZWYnZCB5ZXQg Ki8KKyNpZm5kZWYgU0lHX0kKKyNpZmRlZiBPUzIKKyNkZWZpbmUgU0lHX1YKKyNlbHNlCisjaWZk ZWYgUE9TSVgKKyNkZWZpbmUgU0lHX1YKKyNlbHNlCisjaWZkZWYgU1ZSMwkJCQkvKiBTeXN0ZW0g ViBSMyBhbmQgbGF0ZXIgKi8KKyNkZWZpbmUgU0lHX1YKKyNlbHNlCisjaWZkZWYgU1VOT1M0CQkJ CS8qIFNVTk9TIFYgNC4wIGFuZCBsYXRlciAqLworI2lmbmRlZiBzdW4zODYKKyNkZWZpbmUgU0lH X1YKKyNlbHNlCisjZGVmaW5lIFNJR19JCisjZW5kaWYgLyogc3VuMzg2ICovCisjZWxzZQorI2lm ZGVmIE5FWFQJCQkJLyogTmVYVCAqLworI2RlZmluZSBTSUdfVgorI2Vsc2UKKyNpZmRlZiBBSVgz NzAKKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNkZWZpbmUgU0lHX1YKKyNkZWZpbmUgU0lHVFlQIF9f U0lHVk9JRAkJLyogQUlYMzcwICovCisjZWxzZQorI2lmZGVmIFNUUkFUVVMJCQkJLyogU3RyYXR1 cyBWT1MgKi8KKyNkZWZpbmUgU0lHX1YKKyNlbHNlCisjaWZkZWYgTUFDCisjZGVmaW5lIFNJR1RZ UCBsb25nCisjZGVmaW5lIFNJR19JCisjaWZuZGVmIE1QVzMzCisjZGVmaW5lIFNJR19JR04gMAor I2VuZGlmIC8qIE1QVzMzICovCisjZGVmaW5lIFNJR0FMUk0gMQorI2lmbmRlZiBNUFczMworI2Rl ZmluZSBTSUdJTlQgIDIKKyNlbmRpZiAvKiBNUFczMyAqLworI2Vsc2UgLyogRXZlcnl0aGluZyBl bHNlICovCisjZGVmaW5lIFNJR19JCisjZW5kaWYgLyogTUFDICovCisjZW5kaWYgLyogU1RSQVRV UyAqLworI2VuZGlmIC8qIEFJWDM3MCAqLworI2VuZGlmIC8qIE5FWFQgKi8KKyNlbmRpZiAvKiBT VU5PUzQgKi8KKyNlbmRpZiAvKiBTVlIzICovCisjZW5kaWYgLyogUE9TSVggKi8KKyNlbmRpZiAv KiBPUzIgKi8KKyNlbmRpZiAvKiBTSUdfSSAqLworI2VuZGlmIC8qIFNJR19WICovCisKKyNpZmRl ZiBTSUdfSQorI2RlZmluZSBTSUdSRVRVUk4gcmV0dXJuKDApCisjaWZuZGVmIFNJR1RZUAorI2Rl ZmluZSBTSUdUWVAgaW50CisjZW5kaWYgLyogU0lHVFlQICovCisjZW5kaWYgLyogU0lHX0kgKi8K KworI2lmZGVmIFNJR19WCisjZGVmaW5lIFNJR1JFVFVSTiByZXR1cm4KKyNpZm5kZWYgU0lHVFlQ CisjZGVmaW5lIFNJR1RZUCB2b2lkCisjZW5kaWYgLyogU0lHVFlQICovCisjZW5kaWYgLyogU0lH X1YgKi8KKworI2lmZGVmIE5UCisjaWZuZGVmIFNJR1RZUAorI2RlZmluZSBTSUdUWVAgdm9pZAor I2VuZGlmIC8qIFNJR1RZUCAqLworI2VuZGlmIC8qIE5UICovCisKKyNpZm5kZWYgU0lHVFlQCisj ZGVmaW5lIFNJR1RZUCBpbnQKKyNlbmRpZiAvKiBTSUdUWVAgKi8KKworI2lmbmRlZiBTSUdSRVRV Uk4KKyNkZWZpbmUgU0lHUkVUVVJOIHJldHVybigwKQorI2VuZGlmIC8qIFNJR1JFVFVSTiAqLwor CisjaWZkZWYgQ0tOVFNJRworLyogVGhpcyBkb2VzIG5vdCB3b3JrLCBzbyBkb24ndCB1c2UgaXQu ICovCisjZGVmaW5lIHNpZ25hbCBja250c2lnbmFsCitTSUdUWVAgKCpja250c2lnbmFsKGludCB0 eXBlLCBTSUdUWVAgKCopKGludCkpKShpbnQpOworI2VuZGlmIC8qIENLTlRTSUcgKi8KKworLyog V2Ugd2FudCBhbGwgY2hhcmFjdGVycyB0byBiZSB1bnNpZ25lZCBpZiB0aGUgY29tcGlsZXIgc3Vw cG9ydHMgaXQgKi8KKworI2lmZGVmIEtVSQorI2lmZGVmIENIQVIKKyN1bmRlZiBDSEFSCisjZW5k aWYgLyogQ0hBUiAqLworI2RlZmluZSBDSEFSIHVuc2lnbmVkIGNoYXIKKyNlbHNlCisjaWZkZWYg UFJPVlgxCit0eXBlZGVmIGNoYXIgQ0hBUjsKKy8qIHR5cGVkZWYgbG9uZyBMT05HOyAqLwordHlw ZWRlZiBpbnQgdm9pZDsKKyNlbHNlCisjaWZkZWYgTUlOSVgKK3R5cGVkZWYgdW5zaWduZWQgY2hh ciBDSEFSOworI2Vsc2UKKyNpZmRlZiBWNwordHlwZWRlZiBjaGFyIENIQVI7CisjZWxzZQorI2lm ZGVmIEM3MAordHlwZWRlZiBjaGFyIENIQVI7CisvKiB0eXBlZGVmIGxvbmcgTE9ORzsgKi8KKyNl bHNlCisjaWZkZWYgQlNEMjkKK3R5cGVkZWYgY2hhciBDSEFSOworLyogdHlwZWRlZiBsb25nIExP Tkc7ICovCisjZWxzZQorI2lmZGVmIGRhdGFnZW5lcmFsCisjZGVmaW5lIENIQVIgdW5zaWduZWQg Y2hhcgkJCS8qIDMuMjIgY29tcGlsZXIgKi8KKyNlbHNlCisjaWZkZWYgSFBVWAorI2RlZmluZSBD SEFSIHVuc2lnbmVkIGNoYXIKKyNlbHNlCisjaWZkZWYgT1MyCisjaWZkZWYgTlQKKyNkZWZpbmUg Q0hBUiB1bnNpZ25lZCBjaGFyCisjZWxzZSAvKiBOVCAqLworI2lmZGVmIENIQVIKKyN1bmRlZiBD SEFSCisjZW5kaWYgLyogQ0hBUiAqLwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIENIQVI7CisjZW5k aWYgLyogTlQgKi8KKyNlbHNlIC8qIE9TMiAqLworI2lmZGVmIFZNUwordHlwZWRlZiB1bnNpZ25l ZCBjaGFyIENIQVI7CisjZWxzZQorI2lmZGVmIENIQVIKKyN1bmRlZiBDSEFSCisjZW5kaWYgLyog Q0hBUiAqLwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIENIQVI7CisjZW5kaWYgLyogVk1TICovCisj ZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogSFBVWCAqLworI2VuZGlmIC8qIGRhdGFnZW5lcmFs ICovCisjZW5kaWYgLyogQlNEMjkgKi8KKyNlbmRpZiAvKiBDNzAgKi8KKyNlbmRpZiAvKiBWNyAq LworI2VuZGlmIC8qIE1JTklYICovCisjZW5kaWYgLyogUFJPVlgxICovCisjZW5kaWYgLyogS1VJ ICovCisKK3VuaW9uIGNrX3Nob3J0IHsJCQkvKiBNYWlubHkgZm9yIFVuaWNvZGUgKi8KKyAgICBV U0hPUlQgeF9zaG9ydDsKKyAgICBDSEFSIHhfY2hhclsyXTsKK307CisKKyNpZmRlZiBNQUMJCQkJ LyogTWFjaW50b3NoIGZpbGUgcm91dGluZXMgKi8KKyNpZm5kZWYgQ0tXQVJUX0MJCQkvKiBCdXQg bm90IGluICJ3YXJ0Ii4uLiAqLworI2lmZGVmIGZlb2YKKyN1bmRlZiBmZW9mCisjZW5kaWYgLyog ZmVvZiAqLworI2RlZmluZSBmZW9mIG1hY19mZW9mCisjZGVmaW5lIHJld2luZCBtYWNfcmV3aW5k CisjZGVmaW5lIGZnZXRzIG1hY19mZ2V0cworI2RlZmluZSBmb3BlbiBtYWNfZm9wZW4KKyNkZWZp bmUgZmNsb3NlIG1hY19mY2xvc2UKK2ludCBtYWNfZmVvZigpOwordm9pZCBtYWNfcmV3aW5kKCk7 CitjaGFyICptYWNfZmdldHMoKTsKK0ZJTEUgKm1hY19mb3BlbigpOworaW50IG1hY19mY2xvc2Uo KTsKKyNlbmRpZiAvKiBDS0NQUk9fVyAqLworI2VuZGlmIC8qIE1BQyAqLworLyoKKyAgIFN5c3Rl bXMgd2hvc2UgbWFpbmxpbmUgbW9kdWxlcyBoYXZlIGFjY2VzcyB0byB0aGUgY29tbXVuaWNhdGlv bi1saW5lCisgICBmaWxlIGRlc2NyaXB0b3IsIHR0eWZkLgorKi8KKyNpZm5kZWYgQ0tfVFRZRkQK KyNpZmRlZiBVTklYCisjZGVmaW5lIENLX1RUWUZECisjZWxzZQorI2lmZGVmIE9TMgorI2RlZmlu ZSBDS19UVFlGRAorI2Vsc2UKKyNpZmRlZiBWTVMKKyNkZWZpbmUgQ0tfVFRZRkQKKyNlbmRpZiAv KiBWTVMgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBVTklYICovCisjZW5kaWYgLyog Q0tfVFRZRkQgKi8KKworLyogU3lzdGVtcyB3aGVyZSB3ZSBjYW4gZ2V0IG91ciBvd24gcHJvY2Vz cyBJRCAqLworCisjaWZuZGVmIENLX1BJRAorI2lmZGVmIFVOSVgKKyNkZWZpbmUgQ0tfUElECisj ZW5kaWYgLyogVU5JWCAqLworI2lmZGVmIE9TMgorI2RlZmluZSBDS19QSUQKKyNlbmRpZiAvKiBP UzIgKi8KKyNpZmRlZiBWTVMKKyNkZWZpbmUgQ0tfUElECisjZW5kaWYgLyogVk1TICovCisjZW5k aWYgLyogQ0tfUElEICovCisKKy8qIFN5c3RlbXMgdGhhdCBzdXBwb3J0IHRoZSBNaWNyb3NvZnQg VGVsZXBob255IEFQSSAoVEFQSSkgKi8KKworI2lmbmRlZiBOT0RJQUwKKyNpZm5kZWYgQ0tfVEFQ SQorI2lmZGVmIE5UCisjZGVmaW5lIENLX1RBUEkKKyNlbmRpZiAvKiBOVCAqLworI2VuZGlmIC8q IENLX1RBUEkgKi8KKyNlbmRpZiAvKiBOT0RJQUwgKi8KKworI2lmbmRlZiBOT05aWFBBTkQKKyNp Zm5kZWYgTlpYUEFORAorI2lmZGVmIE9TMk9SVU5JWAorI2RlZmluZSBOWlhQQU5ECisjZWxzZQor I2lmZGVmIFZNUworI2RlZmluZSBOWlhQQU5ECisjZWxzZQorI2lmZGVmIGRhdGFnZW5lcmFsCisj ZGVmaW5lIE5aWFBBTkQKKyNlbHNlCisjaWZkZWYgT1NLCisjZGVmaW5lIE5aWFBBTkQKKyNlbmRp ZiAvKiBPU0sgKi8KKyNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLworI2VuZGlmIC8qIFZNUyAqLwor I2VuZGlmIC8qIE9TMk9SVU5JWCAqLworI2VuZGlmIC8qIE5aWFBBTkQgKi8KKyNlbHNlCisjaWZk ZWYgTlpYUEFORAorI3VuZGVmIE5aWFBBTkQKKyNlbmRpZiAvKiBOWlhQQU5EICovCisjZW5kaWYg LyogTk9OWlhQQU5EICovCisKKy8qIG56eHBhbmQoKSBvcHRpb24gZmxhZ3MgKi8KKworI2RlZmlu ZSBaWF9GSUxPTkxZICAgMQkJCS8qIE1hdGNoIG9ubHkgcmVndWxhciBmaWxlcyAqLworI2RlZmlu ZSBaWF9ESVJPTkxZICAgMgkJCS8qIE1hdGNoIG9ubHkgZGlyZWN0b3JpZXMgKi8KKyNkZWZpbmUg WlhfUkVDVVJTRSAgIDQJCQkvKiBEZXNjZW5kIHRocm91Z2ggZGlyZWN0b3J5IHRyZWUgKi8KKyNk ZWZpbmUgWlhfTUFUQ0hET1QgIDgJCQkvKiBNYXRjaCAiZG90IGZpbGVzIiAqLworI2RlZmluZSBa WF9OT0JBQ0tVUCAxNgkJCS8qIERvbid0IG1hdGNoICJiYWNrdXAgZmlsZXMiICovCisjZGVmaW5l IFpYX05PTElOS1MgIDMyCQkJLyogRG9uJ3QgZm9sbG93IHN5bWxpbmtzICovCisKKyNpZm5kZWYg TlpYUEFORAorI2RlZmluZSBuenhwYW5kKGEsYikgenhwYW5kKGEpCisjZW5kaWYgLyogTlpYUEFO RCAqLworCisjaWZuZGVmIE5PWlhSRVdJTkQKKyNpZm5kZWYgWlhSRVdJTkQJCQkvKiBQbGF0Zm9y bXMgdGhhdCBoYXZlIHp4cmV3aW5kKCkgKi8KKyNpZmRlZiBPUzJPUlVOSVgKKyNkZWZpbmUgWlhS RVdJTkQKKyNlbHNlCisjaWZkZWYgVk1TCisjZGVmaW5lIFpYUkVXSU5ECisjZWxzZQorI2lmZGVm IGRhdGFnZW5lcmFsCisjZGVmaW5lIFpYUkVXSU5ECisjZWxzZQorI2lmZGVmIE9TSworI2RlZmlu ZSBaWFJFV0lORAorI2Vsc2UKKyNpZmRlZiBTVFJBVFVTCisjZGVmaW5lIFpYUkVXSU5ECisjZW5k aWYgLyogU1RSQVRVUyAqLworI2VuZGlmIC8qIE9TSyAqLworI2VuZGlmIC8qIGRhdGFnZW5lcmFs ICovCisjZW5kaWYgLyogVk1TICovCisjZW5kaWYgLyogT1MyT1JVTklYICovCisjZW5kaWYgLyog WlhSRVdJTkQgKi8KKyNlbHNlCisjaWZkZWYgWlhSRVdJTkQKKyN1bmRlZiBaWFJFV0lORAorI2Vu ZGlmIC8qIFpYUkVXSU5EICovCisjZW5kaWYgLyogTk9aWFJFV0lORCAqLworCisvKiBUZW1wb3Jh cnktZGlyZWN0b3J5LWZvci1SRUNFSVZFIGZlYXR1cmUgLi4uICovCisvKiBUaGlzIHNheXMgd2hl dGhlciB3ZSBoYXZlIHRoZSBpc2RpcigpIGZ1bmN0aW9uIGRlZmluZWQuICovCisKKyNpZmRlZiBV TklYCQkJCS8qIFVOSVggaGFzIGl0ICovCisjaWZuZGVmIENLX1RNUERJUgorI2lmbmRlZiBwZHAx MQorI2RlZmluZSBDS19UTVBESVIKKyNkZWZpbmUgVE1QRElSTEVOIDI1NgorI2VuZGlmIC8qIHBk cDExICovCisjZW5kaWYgLyogQ0tfVE1QRElSICovCisjZW5kaWYgLyogVU5JWCAqLworCisjaWZk ZWYgVk1TCQkJCS8qIFZNUyB0b28gKi8KKyNpZm5kZWYgQ0tfVE1QRElSCisjZGVmaW5lIENLX1RN UERJUgorI2RlZmluZSBUTVBESVJMRU4gMjU2CisjZW5kaWYgLyogQ0tfVE1QRElSICovCisjZW5k aWYgLyogVk1TICovCisKKyNpZmRlZiBPUzIJCQkJLyogT1MgdHdvIHRvbyAqLworI2lmbmRlZiBD S19UTVBESVIKKyNkZWZpbmUgQ0tfVE1QRElSCisjZGVmaW5lIFRNUERJUkxFTiAxMjkKKyNlbmRp ZiAvKiBDS19UTVBESVIgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKworI2lmZGVmIFNUUkFUVVMJCQkJ LyogU3RyYXR1cyBWT1MgdG9vLiAqLworI2lmbmRlZiBDS19UTVBESVIKKyNkZWZpbmUgQ0tfVE1Q RElSCisjZGVmaW5lIFRNUERJUkxFTiAyNTYKKyNlbmRpZiAvKiBDS19UTVBESVIgKi8KKyNlbmRp ZiAvKiBTVFJBVFVTICovCisKKyNpZmRlZiBPU0sJCQkJLyogT1MtOSB0b28gKi8KKyNpZm5kZWYg Q0tfVE1QRElSCisjZGVmaW5lIENLX1RNUERJUgorI2RlZmluZSBUTVBESVJMRU4gMjU2CisjZW5k aWYgLyogQ0tfVE1QRElSICovCisjZW5kaWYgLyogT1NLICovCisKKyNpZmRlZiBkYXRhZ2VuZXJh bAkJCS8qIEFPUy9WUyB0b28gKi8KKyNpZm5kZWYgQ0tfVE1QRElSCisjZGVmaW5lIENLX1RNUERJ UgorI2RlZmluZSBUTVBESVJMRU4gMjU2CisjZW5kaWYgLyogQ0tfVE1QRElSICovCisjZW5kaWYg LyogZGF0YWdlbmVyYWwgKi8KKworI2lmZGVmIENLX1RNUERJUgkJCS8qIE5lZWRzIGNvbW1hbmQg cGFyc2VyICovCisjaWZkZWYgTk9JQ1AKKyN1bmRlZiBDS19UTVBESVIKKyNlbmRpZiAvKiBOT0lD UCAqLworI2VuZGlmIC8qIENLX1RNUERJUiAqLworCisvKiBXaGV0aGVyIHRvIGluY2x1ZGUgPHN5 cy90aW1lLmg+ICovCisKKyNpZm5kZWYgTk9USU1FSAkJCQkvKiA8dGltZS5oPiAqLworI2lmbmRl ZiBUSU1FSAorI2RlZmluZSBUSU1FSAorI2VuZGlmIC8qIFRJTUVIICovCisjZW5kaWYgLyogTk9U SU1FSCAqLworCisjaWZuZGVmIE5PU1lTVElNRUgJCQkvKiA8c3lzL3RpbWUuaD4gKi8KKyNpZm5k ZWYgU1lTVElNRUgKKyNpZmRlZiBVTklYCQkJCS8qIFVOSVggKi8KKyNpZmRlZiBTVk9SUE9TSVgJ CQkvKiBTeXN0ZW0gViBvciBQT1NJWC4uLiAqLworI2lmZGVmIE1fVU5JWAorI2RlZmluZSBTWVNU SU1FSAorI2Vsc2UKKyNpZmRlZiBTQ09fMzJWNAorI2RlZmluZSBTWVNUSU1FSAorI2Vsc2UKKyNp ZmRlZiBPWE9TCisjZGVmaW5lIFNZU1RJTUVICisjZWxzZQorI2lmZGVmIEJTRDQ0CisjZGVmaW5l IFNZU1RJTUVICisjZWxzZQorI2lmZGVmIF9fbGludXhfXworI2RlZmluZSBTWVNUSU1FSAorI2Vs c2UKKyNpZmRlZiBBSVhSUworI2lmbmRlZiBBSVg0MQorI2RlZmluZSBTWVNUSU1FSAorI2VuZGlm IC8qIEFJWDQxICovCisjZWxzZQorI2lmZGVmIElSSVg2MAorI2RlZmluZSBTWVNUSU1FSAorI2Vs c2UKKyNpZmRlZiBJMzg2SVgKKyNkZWZpbmUgU1lTVElNRUgKKyNlbHNlCisjaWZkZWYgU1Y2OFIz VjYKKyNkZWZpbmUgU1lTVElNRUgKKyNlbmRpZiAvKiBTVjY4UjNWNiAqLworI2VuZGlmIC8qIEkz ODZJWCAqLworI2VuZGlmIC8qIElSSVg2MCAqLworI2VuZGlmIC8qIEFJWFJTICovCisjZW5kaWYg LyogX19saW51eF9fICovCisjZW5kaWYgLyogQlNENDQgKi8KKyNlbmRpZiAvKiBPWE9TICovCisj ZW5kaWYgLyogU0NPXzMyVjQgKi8KKyNlbmRpZiAvKiBNX1VOSVggKi8KKworI2Vsc2UgIC8qIE5v dCBTVk9SUE9TSVggKi8KKworI2lmbmRlZiBCRUxMVjEwCQkJCS8qIEFsbCBidXQgdGhlc2UuLi4g Ki8KKyNpZm5kZWYgUFJPVlgxCisjaWZuZGVmIFY3CisjaWZuZGVmIEJTRDQxCisjaWZuZGVmIENP SEVSRU5UCisjZGVmaW5lIFNZU1RJTUVICisjZW5kaWYgLyogQ09IRVJFTlQgKi8KKyNlbmRpZiAv KiBCU0Q0MSAqLworI2VuZGlmIC8qIFY3ICovCisjZW5kaWYgLyogUFJPVlgxICovCisjZW5kaWYg LyogQkVMTFYxMCAqLworI2VuZGlmIC8qIFNWT1JQT1NJWCAqLworI2VuZGlmIC8qIFVOSVggKi8K KyNlbmRpZiAvKiBTWVNUSU1FSCAqLworI2VuZGlmIC8qIE5PU1lTVElNRUggKi8KKworI2lmbmRl ZiBOT1NZU1RJTUVCSAkJCS8qIDxzeXMvdGltZWIuaD4gKi8KKyNpZm5kZWYgU1lTVElNRUJICisj aWZkZWYgT1NGCisjZGVmaW5lIFNZU1RJTUVCSAorI2Vsc2UKKyNpZmRlZiBDT0hFUkVOVAorI2Rl ZmluZSBTWVNUSU1FQkgKKyNlbHNlCisjaWZkZWYgQlNENDEKKyNkZWZpbmUgU1lTVElNRUJICisj ZWxzZQorI2lmZGVmIEJTRDI5CisjZGVmaW5lIFNZU1RJTUVCSAorI2Vsc2UKKyNpZmRlZiBUT1dF UjEKKyNkZWZpbmUgU1lTVElNRUJICisjZWxzZQorI2lmZGVmIEZUMjEKKyNkZWZpbmUgU1lTVElN RUJICisjZWxzZQorI2lmZGVmIEJFTExWMTAKKyNkZWZpbmUgU1lTVElNRUJICisjZW5kaWYgLyog QkVMTFYxMCAqLworI2VuZGlmIC8qIEZUMjEgKi8KKyNlbmRpZiAvKiBUT1dFUjEgKi8KKyNlbmRp ZiAvKiBCU0QyOSAqLworI2VuZGlmIC8qIEJTRDQxICovCisjZW5kaWYgLyogQ09IRVJFTlQgKi8K KyNlbmRpZiAvKiBPU0YgKi8KKyNlbmRpZiAvKiBTWVNUSU1FQkggKi8KKyNlbmRpZiAvKiBOT1NZ U1RJTUVCSCAqLworCisvKgorIERlYnVnIGFuZCB0cmFuc2FjdGlvbiBsb2dnaW5nIGlzIGluY2x1 ZGVkIGF1dG9tYXRpY2FsbHkgdW5sZXNzIHlvdSBkZWZpbmUKKyBOT0RFQlVHIG9yIE5PVExPRy4g IERvIHRoaXMgaWYgeW91IHdhbnQgdG8gc2F2ZSB0aGUgc3BhY2UgYW5kIG92ZXJoZWFkLgorIChO b3RlLCBpbiB2ZXJzaW9uIDRGIHRoZXNlIGRlZmluaXRpb25zIGNoYW5nZWQgZnJvbSAie30iIHRv IHRoZSBudWxsIHN0cmluZworIHRvIGF2b2lkIHByb2JsZW1zIHdpdGggc2VtaWNvbG9ucyBhZnRl ciBicmFjZXMsIGFzIGluOiAiaWYgKHgpIHRsb2codGhpcyk7CisgZWxzZSB0bG9nKHRoYXQpOyIK KyovCisjaWZuZGVmIE5PREVCVUcKKyNpZm5kZWYgREVCVUcKKyNkZWZpbmUgREVCVUcKKyNlbmRp ZiAvKiBERUJVRyAqLworI2Vsc2UKKyNpZmRlZiBERUJVRworI3VuZGVmIERFQlVHCisjZW5kaWYg LyogREVCVUcgKi8KKyNlbmRpZiAvKiBOT0RFQlVHICovCisKKyNpZmRlZiBOT1RMT0cKKyNpZmRl ZiBUTE9HCisjdW5kZWYgVExPRworI2VuZGlmIC8qIFRMT0cgKi8KKyNlbHNlICAvKiBOT1RMT0cg Ki8KKyNpZm5kZWYgVExPRworI2RlZmluZSBUTE9HCisjZW5kaWYgLyogVExPRyAqLworI2VuZGlm IC8qIE5PVExPRyAqLworCisvKiBkZWJ1ZygpIG1hY3JvIHN0eWxlIHNlbGVjdGlvbi4gKi8KKwor I2lmZGVmIFZNUworI2lmbmRlZiBJRkRFQlVHCisjZGVmaW5lIElGREVCVUcKKyNlbmRpZiAvKiBJ RkRFQlVHICovCisjZW5kaWYgLyogVk1TICovCisKKyNpZmRlZiBNQUMKKyNpZm5kZWYgSUZERUJV RworI2RlZmluZSBJRkRFQlVHCisjZW5kaWYgLyogSUZERUJVRyAqLworI2VuZGlmIC8qIE1BQyAq LworCisjaWZkZWYgT1MyCisjaWZuZGVmIElGREVCVUcKKyNkZWZpbmUgSUZERUJVRworI2VuZGlm IC8qIElGREVCVUcgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKworI2lmZGVmIE9YT1MJCQkJLyogdHN0 IGlzIGZhc3RlciB0aGFuIGpzciAqLworI2lmbmRlZiBJRkRFQlVHCisjZGVmaW5lIElGREVCVUcK KyNlbmRpZiAvKiBJRkRFQlVHICovCisjZW5kaWYgLyogT1hPUyAqLworCisjaWZuZGVmIENLQ01B SQorZXh0ZXJuIGludCBkZWJsb2c7CitleHRlcm4gaW50IGRlYm9rOworZXh0ZXJuIGludCBkZWJ4 bGVuOworZXh0ZXJuIGludCBtYXRjaGRvdDsKK2V4dGVybiBpbnQgdHRfYmVsbDsKKyNlbmRpZiAv KiBDS0NNQUkgKi8KKworI2lmZGVmIE9TMgorX1BST1RPVFlQKCB2b2lkIGJsZWVwLCAoc2hvcnQp ICk7CisjZWxzZSAvKiBPUzIgKi8KKyNkZWZpbmUgYmxlZXAoeCkgaWYodHRfYmVsbClwdXRjaGFy KCdcMDcnKQorI2VuZGlmIC8qIE9TMiAqLworCisjaWZuZGVmIEJFT1NPUkJFQk9YCisjaWZkZWYg QkVCT1gJCQkJLyogVGhpcyB3YXMgdXNlZCBvbmx5IGZvciBEUjcgKi8KKyNkZWZpbmUgQkVPU09S QkVCT1gKKyNlbHNlCisjaWZkZWYgQkVPUwkJCQkvKiBUaGlzIGlzIHVzZWQgZm9yIEJlT1MgNC54 ICovCisjZGVmaW5lIEJFT1NPUkJFQk9YCisjZW5kaWYgLyogQkVPUyAqLworI2VuZGlmIC8qIEJF Qk9YICovCisjZW5kaWYgLyogQkVPU09SQkVCT1ggKi8KKworI2lmZGVmIE5PSUNQCisjaWZkZWYg VExPRworI3VuZGVmIFRMT0cKKyNlbmRpZiAvKiBUTE9HICovCisjZW5kaWYgLyogTk9JQ1AgKi8K KworLyogRm9ybWF0cyBmb3IgZGVidWcoKSBhbmQgdGxvZygpICovCisKKyNkZWZpbmUgRjAwMCAw CisjZGVmaW5lIEYwMDEgMQorI2RlZmluZSBGMDEwIDIKKyNkZWZpbmUgRjAxMSAzCisjZGVmaW5l IEYxMDAgNAorI2RlZmluZSBGMTAxIDUKKyNkZWZpbmUgRjExMCA2CisjZGVmaW5lIEYxMTEgNwor CisjaWZkZWYgX19saW51eF9fCisjaWZuZGVmIExJTlVYCisjZGVmaW5lIExJTlVYCisjZW5kaWYg LyogTElOVVggKi8KKyNlbmRpZiAvKiBfX2xpbnV4X18gKi8KKworLyogUGxhdGZvcm1zIHdoZXJl IHNtYWxsIHNpemUgaXMgbmVlZGVkICovCisKKyNpZmRlZiBwZHAxMQorI2RlZmluZSBDS19TTUFM TAorI2VuZGlmIC8qIHBkcDExICovCisKKy8qIENhbiB3ZSB1c2UgcmVhbHBhdGgoKT8gKi8KKwor I2lmbmRlZiBOT1JFQUxQQVRICisjaWZkZWYgcGRwMTEKKyNkZWZpbmUgTk9SRUFMUEFUSAorI2Vu ZGlmIC8qIHBkcDExICovCisjZW5kaWYgLyogTk9SRUFMUEFUSCAqLworCisjaWZuZGVmIE5PUkVB TFBBVEgKKyNpZmRlZiBVTklYCisjaWZkZWYgSFBVWDUKKyNkZWZpbmUgTk9SRUFMUEFUSAorI2Vs c2UKKyNpZmRlZiBIUFVYNgorI2RlZmluZSBOT1JFQUxQQVRICisjZWxzZQorI2lmZGVmIEhQVVg3 CisjZGVmaW5lIE5PUkVBTFBBVEgKKyNlbHNlCisjaWZkZWYgSFBVWDgKKyNkZWZpbmUgTk9SRUFM UEFUSAorI2Vsc2UKKyNpZmRlZiBTVjY4UjNWNgorI2RlZmluZSBOT1JFQUxQQVRICisjZWxzZQor I2lmZGVmIFhFTklYCisjZGVmaW5lIE5PUkVBTFBBVEgKKyNlbHNlCisjaWZkZWYgQ0tfU0NPMzJW NAorI2RlZmluZSBOT1JFQUxQQVRICisjZWxzZQorI2lmZGVmIENLX1NDT1Y1CisjZGVmaW5lIE5P UkVBTFBBVEgKKyNlbHNlCisjaWZkZWYgT1NGMzIKKyNkZWZpbmUgTk9SRUFMUEFUSAorI2Vsc2UK KyNpZmRlZiBPU0YzMAorI2RlZmluZSBOT1JFQUxQQVRICisjZWxzZQorI2lmZGVmIHVsdHJpeAor I2RlZmluZSBOT1JFQUxQQVRICisjZWxzZQorI2lmZGVmIENPSEVSRU5UCisjZGVmaW5lIE5PUkVB TFBBVEgKKyNlbmRpZiAvKiBDT0hFUkVOVCAqLworI2VuZGlmIC8qIHVsdHJpeCAqLworI2VuZGlm IC8qIE9TRjMwICovCisjZW5kaWYgLyogT1NGMzIgKi8KKyNlbmRpZiAvKiBDS19TQ09WNSAqLwor I2VuZGlmIC8qIENLX1NDTzMyVjQgKi8KKyNlbmRpZiAvKiBYRU5JWCAqLworI2VuZGlmIC8qIFNW NjhSM1Y2ICovCisjZW5kaWYgLyogSFBVWDggKi8KKyNlbmRpZiAvKiBIUFVYNyAqLworI2VuZGlm IC8qIEhQVVg2ICovCisjZW5kaWYgLyogSFBVWDUgKi8KKyNlbmRpZiAvKiBOT1JFQUxQQVRIICov CisKKyNpZm5kZWYgTk9SRUFMUEFUSAorI2lmbmRlZiBDS1JFQUxQQVRICisjZGVmaW5lIENLUkVB TFBBVEgKKyNlbmRpZiAvKiBOT1JFQUxQQVRIICovCisjZW5kaWYgLyogQ0tSRUFMUEFUSCAqLwor I2VuZGlmIC8qIFVOSVggKi8KKworI2lmZGVmIENLUkVBTFBBVEgKKyNpZmRlZiBPUzJPUlVOSVgK KyNpZm5kZWYgQ0tST09UCisjZGVmaW5lIENLUk9PVAorI2VuZGlmIC8qIENLUk9PVCAqLworI2Vu ZGlmIC8qIE9TMk9SVU5JWCAqLworI2VuZGlmIC8qIENLUkVBTFBBVEggKi8KKworLyogQ0tTWU1M SU5LIHNob3VsZCBiZSBzZXQgb25seSBpZiB3ZSBjYW4gdXNlIHJlYWRsaW5rKCkgKi8KKworI2lm ZGVmIFVOSVgKKyNpZm5kZWYgTk9TWU1MSU5LCisjaWZuZGVmIENLU1lNTElOSworI2RlZmluZSBD S1NZTUxJTksKKyNlbmRpZiAvKiBOT1NZTUxJTksgKi8KKyNlbmRpZiAvKiBDS1NZTUxJTksgKi8K KyNlbmRpZiAvKiBVTklYICovCisKKy8qIFBsYXRmb3JtcyB3aGVyZSB3ZSBjYW4gdXNlIGxzdGF0 KCkgaW5zdGVhZCBvZiBzdGF0KCkgKGZvciBzeW1saW5rcykgKi8KKy8qIFRoaXMgc2hvdWxkIGJl IHNldCBvbmx5IGlmIGJvdGggbHN0YXQoKSBhbmQgcmVhZGxpbmsoKSBhcmUgYXZhaWxhYmxlICov CisKKyNpZm5kZWYgTk9MU1RBVAorI2lmbmRlZiBOT1NZTUxJTksKKyNpZm5kZWYgVVNFX0xTVEFU CisjaWZkZWYgVU5JWAorI2lmZGVmIENLU1lNTElOSworI2lmZGVmIFNWUjQJCQkJLyogU1ZSNCBo YXMgbHN0YXQoKSAqLworI2RlZmluZSBVU0VfTFNUQVQKKyNlbHNlCisjaWZkZWYgQlNENDIJCQkJ LyogNC4yQlNEIGFuZCA0LjNCU0QgaGF2ZSBpdCAqLworI2RlZmluZSBVU0VfTFNUQVQJCQkvKiBU aGlzIHNob3VsZCBpbmNsdWRlIG9sZCBIUFVYcyAqLworI2Vsc2UKKyNpZmRlZiBCU0Q0NAkJCQkv KiA0LjRCU0QgaGFzIGl0ICovCisjZGVmaW5lIFVTRV9MU1RBVAorI2Vsc2UKKyNpZmRlZiBMSU5V WAkJCQkvKiBMSU5VWCBoYXMgaXQgKi8KKyNkZWZpbmUgVVNFX0xTVEFUCisjZWxzZQorI2lmZGVm IFNVTk9TNAkJCQkvKiBTdW5PUyBoYXMgaXQgKi8KKyNkZWZpbmUgVVNFX0xTVEFUCisjZW5kaWYg LyogU1VOT1M0ICovCisjZW5kaWYgLyogTElOVVggKi8KKyNlbmRpZiAvKiBCU0Q0NCAqLworI2Vu ZGlmIC8qIEJTRDQyICovCisjZW5kaWYgLyogU1ZSNCAqLworI2VuZGlmIC8qIENLU1lNTElOSyAq LworI2VuZGlmIC8qIFVOSVggKi8KKyNlbmRpZiAvKiBVU0VfTFNUQVQgKi8KKyNlbmRpZiAvKiBO T1NZTUxJTksgKi8KKyNlbmRpZiAvKiBOT0xTVEFUICovCisKKyNpZmRlZiBOT0xTVEFUCisjaWZk ZWYgVVNFX0xTVEFUCisjdW5kZWYgVVNFX0xTVEFUCisjZW5kaWYgLyogVVNFX0xTVEFUICovCisj ZW5kaWYgLyogTk9MU1RBVCAqLworCisjaWZuZGVmIE5PVFRZTE9DSwkJCS8qIFVOSVggc3lzdGVt cyB0aGF0IGhhdmUgdHR5bG9jaygpICovCisjaWZuZGVmIFVTRVRUWUxPQ0sKKyNpZmRlZiBBSVhS UwkJCQkvKiBBSVggMy4xIGFuZCBsYXRlciAqLworI2RlZmluZSBVU0VUVFlMT0NLCisjZWxzZQor I2lmZGVmIFVTRV9VVV9MT0NLCQkJLyogRnJlZUJTRCBvciBvdGhlciB3aXRoIHV1X2xvY2soKSAq LworI2RlZmluZSBVU0VUVFlMT0NLCisjZWxzZQorLyoKKyAgUHJpb3IgdG8gOC4wLjI5OSBBbHBo YS4wOCB0aGlzIHdhcyBIQVZFX0JBVURCT1kgd2hpY2ggd2FzIGFkZGVkIGZvcgorICBSZWQgSGF0 IDcuMiBpbiBNYXkgMjAwMyBidXQgd2hpY2ggaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCBpbiBEZWJp YW4gYW5kCisgIE9wZW5TdXNlIChhdCBsZWFzdCkuCisqLworI2lmZGVmIEhBVkVfTE9DS0RFVgor I2RlZmluZSBVU0VUVFlMT0NLCisjZW5kaWYgLyogSEFWRV9MT0NLREVWICovCisjZW5kaWYgLyog VVNFX1VVX0xPQ0sgKi8KKyNlbmRpZiAvKiBBSVhSUyAqLworI2VuZGlmIC8qIFVTRVRUWUxPQ0sg Ki8KKyNlbmRpZiAvKiBOT1RUWUxPQ0sgKi8KKworI2lmbmRlZiBOT19PUEVOUFRZCQkJLyogQ2Fu IHVzZSBvcGVucHR5KCkgKi8KKyNpZm5kZWYgSEFWRV9PUEVOUFRZCisjaWZkZWYgX19saW51eF9f CisjZGVmaW5lIEhBVkVfT1BFTlBUWQorI2Vsc2UKKyNpZmRlZiBfX0ZyZWVCU0RfXworI2RlZmlu ZSBIQVZFX09QRU5QVFkKKyNlbHNlCisjaWZkZWYgX19PcGVuQlNEX18KKyNkZWZpbmUgSEFWRV9P UEVOUFRZCisjZWxzZQorI2lmZGVmIF9fTmV0QlNEX18KKyNkZWZpbmUgSEFWRV9PUEVOUFRZCisj ZWxzZQorI2lmZGVmIE1BQ09TWDEwCisjZGVmaW5lIEhBVkVfT1BFTlBUWQorI2VuZGlmCS8qIE1B Q09TWDEwICovCisjZW5kaWYJLyogX19OZXRCU0RfXyAqLworI2VuZGlmCS8qIF9fT3BlbkJTRF9f ICovCisjZW5kaWYJLyogX19GcmVlQlNEX18gKi8KKyNlbmRpZgkvKiBfX2xpbnV4X18gKi8KKyNl bmRpZgkvKiBIQVZFX09QRU5QVFkgKi8KKyNlbmRpZgkvKiBOT19PUEVOUFRZICovCisKKy8qIEtl cm1pdCBmZWF0dXJlIHNlbGVjdGlvbiAqLworCisjaWZuZGVmIE5PU1BMCisjaWZuZGVmIE5PQ0hB Tk5FTElPCQkJLyogQ2hhbm5lbC1iYXNlZCBmaWxlIGkvbyBwYWNrYWdlICovCisjaWZuZGVmIENL Q0hBTk5FTElPCisjaWZkZWYgVU5JWAorI2RlZmluZSBDS0NIQU5ORUxJTworI2Vsc2UKKyNpZmRl ZiBPUzIKKyNkZWZpbmUgQ0tDSEFOTkVMSU8KKyNlbHNlCisjaWZkZWYgVk1TCisjZGVmaW5lIENL Q0hBTk5FTElPCisjZWxzZQorI2lmZGVmIFNUUkFUVVMKKyNkZWZpbmUgQ0tDSEFOTkVMSU8KKyNl bmRpZiAvKiBTVFJBVFVTICovCisjZW5kaWYgLyogVk1TICovCisjZW5kaWYgLyogT1MyICovCisj ZW5kaWYgLyogVU5JWCAqLworI2VuZGlmIC8qIENLQ0hBTk5FTElPICovCisjZW5kaWYgLyogTk9D SEFOTkVMSU8gKi8KKyNlbmRpZiAvKiBOT1NQTCAqLworCisjaWZuZGVmIE5PQ0tFWEVDCQkJLyog RVhFQyBjb21tYW5kICovCisjaWZuZGVmIE5PUFVTSAorI2lmbmRlZiBDS0VYRUMKKyNpZmRlZiBV TklYCQkJCS8qIFVOSVggY2FuIGRvIGl0ICovCisjZGVmaW5lIENLRVhFQworI2VuZGlmIC8qIFVO SVggKi8KKyNlbmRpZiAvKiBDS0VYRUMgKi8KKyNlbmRpZiAvKiBOT1BVU0ggKi8KKyNlbmRpZiAv KiBOT0NLRVhFQyAqLworCisjaWZuZGVmIE5PRkFTVAkJCQkvKiBGYXN0IEtlcm1pdCBwcm90b2Nv bCBieSBkZWZhdWx0ICovCisjaWZuZGVmIENLX0ZBU1QKKyNpZmRlZiBVTklYCisjZGVmaW5lIENL X0ZBU1QKKyNlbHNlCisjaWZkZWYgVk1TCisjZGVmaW5lIENLX0ZBU1QKKyNlbHNlCisjaWZkZWYg T1MyCisjZGVmaW5lIENLX0ZBU1QKKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBWTVMgKi8K KyNlbmRpZiAvKiBVTklYICovCisjZW5kaWYgLyogQ0tfRkFTVCAqLworI2VuZGlmIC8qIE5PRkFT VCAqLworCisjaWZkZWYgVU5JWAkJCQkvKiBUcmFuc3BhcmVudCBwcmludCAqLworI2lmbmRlZiBO T1hQUklOVAorI2lmbmRlZiBYUFJJTlQKKyNkZWZpbmUgWFBSSU5UCisjZW5kaWYgLyogWFBSSU5U ICovCisjZW5kaWYgLyogTk9YUFJJTlQgKi8KKyNlbmRpZiAvKiBVTklYICovCisKKyNpZm5kZWYg Tk9IV1BBUklUWQkJCS8qIEhhcmR3YXJlIHBhcml0eSAqLworI2lmbmRlZiBIV1BBUklUWQorI2lm ZGVmIFNWT1JQT1NJWAkJCS8qIFN5c3RlbSBWIG9yIFBPU0lYIGNhbiBoYXZlIGl0ICovCisjZGVm aW5lIEhXUEFSSVRZCisjZWxzZQorI2lmZGVmIFNVTk9TNDEJCQkJLyogU3VuT1MgNC4xIGNhbiBo YXZlIGl0ICovCisjZGVmaW5lIEhXUEFSSVRZCisjZWxzZQorI2lmZGVmIE9TMgkJCQkvKiBLOTUg Y2FuIGhhdmUgaXQgKi8KKyNkZWZpbmUgSFdQQVJJVFkKKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRp ZiAvKiBTVU5PUzQxICovCisjZW5kaWYgLyogU1ZPUlBPU0lYICovCisjZW5kaWYgLyogSFdQQVJJ VFkgKi8KKyNlbmRpZiAvKiBOT0hXUEFSSVRZICovCisKKyNpZm5kZWYgTk9TVE9QQklUUwkJCS8q IFN0b3AtYml0IHNlbGVjdGlvbiAqLworI2lmbmRlZiBTVE9QQklUUworI2lmZGVmIE9TMk9SVU5J WAorLyogSW4gVW5peCByZWFsbHkgdGhpcyBzaG91bGQgb25seSBiZSBpZiBDU1RPUEIgaXMgZGVm aW5lZC4gKi8KKy8qIEJ1dCB3ZSBkb24ndCBrbm93IHRoYXQgeWV0LiAqLworI2RlZmluZSBTVE9Q QklUUworI2Vsc2UKKyNpZmRlZiBUTl9DT01QT1JUCisjZGVmaW5lIFNUT1BCSVRTCisjZW5kaWYg LyogVE5fQ09NUE9SVCAqLworI2VuZGlmIC8qIE9TMk9SVU5JWCAqLworI2VuZGlmIC8qIFNUT1BC SVRTICovCisjZW5kaWYgLyogTk9TVE9QQklUUyAqLworCisjaWZkZWYgVU5JWAorI2lmbmRlZiBO RVRDTUQJCQkJLyogQ2FuIFNFVCBORVRXT1JLIFRZUEUgQ09NTUFORCAqLworI2RlZmluZSBORVRD TUQKKyNlbmRpZiAvKiBORVRDTUQgKi8KKyNlbmRpZiAvKiBVTklYICovCisKKy8qIFB0eSBzdXBw b3J0LCBub25wb3J0YWJsZSwgYXZhaWxhYmxlIG9uIGEgY2FzZS1ieS1jYXNlIGJhc2lzICovCisK KyNpZm5kZWYgTk9QVFkKKyNpZmRlZiBORVhUCQkJCS8qIE5lWFRTVEVQICh0ZXN0ZWQgb24gMy4x KSovCisjZGVmaW5lIE5FVFBUWQorI2Vsc2UKKyNpZmRlZiBDS19TQ09WNQkJCQkvKiBTQ08gT1NS NSAodGVzdGVkIG9uIDUuMC41KSovCisjZGVmaW5lIE5FVFBUWQorI2Vsc2UKKyNpZmRlZiBRTlgJ CQkJLyogUU5YICh0ZXN0ZWQgb24gNC4yNSkgKi8KKyNkZWZpbmUgTkVUUFRZCisjZWxzZQorI2lm ZGVmIFNJTklYICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNpbml4ICh0ZXN0ZWQgb24g NS40MikgKi8KKyNkZWZpbmUgTkVUUFRZCisjZWxzZQorI2lmZGVmIERHVVg1NDAJCQkJLyogREcv VVggNS40KysgKHRlc3RlZCBvbiA1LjRSNC4xMSkgKi8KKyNkZWZpbmUgTkVUUFRZCisjZWxzZQor I2lmZGVmIE9TRjMyCQkJCS8qIERpZ2l0YWwgVW5peCAzLjIgKi8KKyNkZWZpbmUgTkVUUFRZCisj ZWxzZQorI2lmZGVmIE9TRjQwCQkJCS8qIERpZ2l0YWwgVW5peCA0LjAgLyBUcnU2NCAqLworI2Rl ZmluZSBORVRQVFkKKyNlbHNlCisjaWZkZWYgSVJJWDYwCQkJCS8qIElSSVggNi4wIChub3QgZWFy bGllcikgKi8KKyNkZWZpbmUgTkVUUFRZCisjZWxzZQorI2lmZGVmIEhQVVgxMAkJCQkvKiBIUFVY IDEwLjAwIG9yIGxhdGVyICovCisjZGVmaW5lIE5FVFBUWQorI2lmbmRlZiBIQVZFX1BUWVRSQVAK KyNkZWZpbmUgSEFWRV9QVFlUUkFQCisjZW5kaWYgLyogSEFWRV9QVFlUUkFQICovCisjZWxzZQor I2lmZGVmIEhQVVg5CQkJCS8qIEhQVVggOS4wMCAobm90IGVhcmxpZXIpICovCisjZGVmaW5lIE5F VFBUWQorI2lmbmRlZiBIQVZFX1BUWVRSQVAKKyNkZWZpbmUgSEFWRV9QVFlUUkFQCisjZW5kaWYg LyogSEFWRV9QVFlUUkFQICovCisjZWxzZQorI2lmZGVmIEJTRDQ0CQkJCS8qIEJTRDQ0LCB7TmV0 LEZyZWUsT3Blbn1CU0QgKi8KKyNkZWZpbmUgTkVUUFRZCisjZWxzZQorI2lmZGVmIEJTREkJCQkJ LyogQlNESS9PUyAodGVzdGVkIGluIDQpICovCisjZGVmaW5lIE5FVFBUWQorI2Vsc2UKKyNpZmRl ZiBTT0xBUklTCQkJCS8qIFNvbGFyaXMgKHRlc3RlZCBpbiAyLjUpICovCisjZGVmaW5lIE5FVFBU WQorI2Vsc2UKKyNpZmRlZiBVVzcJCQkJLyogVW5peHdhcmUgNyAqLworI2RlZmluZSBORVRQVFkK KyNlbHNlCisjaWZkZWYgU1VOT1M0MQkJCQkvKiBTdW5PUyAodGVzdGVkIGluIDQuMS4zKSAqLwor I2RlZmluZSBORVRQVFkKKyNlbHNlCisjaWZkZWYgQUlYNDEJCQkJLyogQUlYIDQuMSBhbmQgbGF0 ZXIgKi8KKyNkZWZpbmUgTkVUUFRZCisjZWxzZQorI2lmZGVmIExJTlVYCQkJCS8qIExpbnV4ICov CisjZGVmaW5lIE5FVFBUWQorI2VuZGlmIC8qIExJTlVYICovCisjZW5kaWYgLyogQUlYNDEgKi8K KyNlbmRpZiAvKiBTVU5PUzQxICovCisjZW5kaWYgLyogVVc3ICovCisjZW5kaWYgLyogU09MQVJJ UyAqLworI2VuZGlmIC8qIEJTREkgKi8KKyNlbmRpZiAvKiBCU0Q0NCAqLworI2VuZGlmIC8qIEhQ VVg5ICovCisjZW5kaWYgLyogSFBVWDEwICovCisjZW5kaWYgLyogSVJJWDYwICovCisjZW5kaWYg LyogT1NGNDAgKi8KKyNlbmRpZiAvKiBPU0YzMiAqLworI2VuZGlmIC8qIERHVVg1NDAgKi8KKyNl bmRpZiAvKiBTSU5JWCAqLworI2VuZGlmIC8qIFFOWCAqLworI2VuZGlmIC8qIENLX1NDT1Y1ICov CisjZW5kaWYgLyogTkVYVCAqLworCisjZWxzZSAvKiBOT1BUWSAqLworCisjaWZkZWYgTkVUUFRZ CisjdW5kZWYgTkVUUFRZCisjZW5kaWYgLyogTkVUUFRZICovCisjZW5kaWYgLyogTk9QVFkgKi8K KworI2lmZGVmIE5FVFBUWSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5FVENNRCByZXF1 aXJlZCBmb3IgTkVUUFRZICovCisjaWZuZGVmIE5FVENNRAorI2RlZmluZSBORVRDTUQKKyNlbmRp ZiAvKiBORVRDTUQgKi8KKyNlbmRpZiAvKiBORVRQVFkgKi8KKworI2lmbmRlZiBDS19VVFNOQU1F CQkJLyogQ2FuIHdlIGNhbGwgdW5hbWUoKT8gKi8KKyNpZmRlZiBWTVMKKyNkZWZpbmUgQ0tfVVRT TkFNRQorI2Vsc2UKKyNpZmRlZiBPUzIKKyNkZWZpbmUgQ0tfVVRTTkFNRQorI2Vsc2UKKyNpZmRl ZiBQT1NJWAkJCQkvKiBJdCdzIGluIFBPU0lYLjEgKi8KKyNkZWZpbmUgQ0tfVVRTTkFNRQorI2Vs c2UKKyNpZmRlZiBTVU5PUzQxCQkJCS8qIEl0J3MgaW4gU3VuT1MgNC4xICovCisjZGVmaW5lIENL X1VUU05BTUUKKyNlbHNlCisjaWZkZWYgQUlYUlMJCQkJLyogSXQncyBpbiBBSVggKi8KKyNkZWZp bmUgQ0tfVVRTTkFNRQorI2Vsc2UKKyNpZmRlZiBTVlI0CQkJCS8qIEl0J3MgaW4gU1ZSNCAoYnV0 IG5vdCBTVlIzKSAqLworI2RlZmluZSBDS19VVFNOQU1FCisjZWxzZQorI2lmZGVmIEhQVVgJCQkJ LyogSXQncyBpbiBIUC1VWCA1LjAwIGFuZCBsYXRlciAqLworI2RlZmluZSBDS19VVFNOQU1FCisj ZWxzZQorI2lmZGVmIE9TRgkJCQkvKiBJdCdzIGluIE9TRi8xIC8gRGlnaXRhbCBVTklYICovCisj ZGVmaW5lIENLX1VUU05BTUUKKyNlbHNlCisjaWZkZWYgQ0tfU0NPVjUKKyNkZWZpbmUgQ0tfVVRT TkFNRQorI2VuZGlmIC8qIENLX1NDT1Y1ICovCisjZW5kaWYgLyogT1NGICovCisjZW5kaWYgLyog SFBVWCAqLworI2VuZGlmIC8qIFNWUjQgKi8KKyNlbmRpZiAvKiBBSVhSUyAqLworI2VuZGlmIC8q IFNVTk9TNDEgKi8KKyNlbmRpZiAvKiBQT1NJWCAqLworI2VuZGlmIC8qIE9TMiAqLworI2VuZGlm IC8qIFZNUyAqLworI2VuZGlmIC8qIENLX1VUU05BTUUgKi8KKworLyogVGhpcyBzZWN0aW9uIGZv ciBhbnl0aGluZyB0aGF0IG1pZ2h0IHVzZSBmbG9hdGluZy1wb2ludCAqLworCisvKiBJZiB0aGUg Zm9sbG93aW5nIGNhdXNlcyB0cm91YmxlIHVzZSAtREZMT0FUPWZsb2F0IG9uIHRoZSBjb21tYW5k IGxpbmUgKi8KKworI2lmZGVmIE5PU1BMCisjaWZkZWYgRk5GTE9BVAorI3VuZGVmIEZORkxPQVQK KyNlbmRpZiAvKiBGTkZMT0FUICovCisjaWZkZWYgQ0tGTE9BVAorI3VuZGVmIENLRkxPQVQKKyNl bmRpZiAvKiBDS0ZMT0FUICovCisjZW5kaWYgLyogTk9TUEwgKi8KKworI2lmbmRlZiBOT0ZMT0FU CisKKyNpZm5kZWYgQ0tGTE9BVAorI2lmZGVmIF9fYWxwaGEKKy8qIERvbid0IHVzZSBkb3VibGUg b24gNjQtYml0IHBsYXRmb3JtcyAtLSBiYWQgdGhpbmdzIGhhcHBlbiAqLworI2RlZmluZSBDS0ZM T0FUIGZsb2F0CisjZGVmaW5lIENLRkxPQVRfUyAiZmxvYXQiCisjZWxzZQorI2RlZmluZSBDS0ZM T0FUIGRvdWJsZQorI2RlZmluZSBDS0ZMT0FUX1MgImRvdWJsZSIKKyNlbmRpZiAvKiBfX2FscGhh ICovCisjZW5kaWYgLyogQ0tGTE9BVCAqLworCisjaWZuZGVmIE5PR0ZUSU1FUgkJCS8qIEZsb2F0 aW5nLXBvaW50IHRpbWVycyAqLworI2lmbmRlZiBHRlRJTUVSCisjaWZkZWYgVU5JWAkJCQkvKiBG b3IgVU5JWCAqLworI2RlZmluZSBHRlRJTUVSCisjZW5kaWYgLyogVU5JWCAqLworI2lmZGVmIFZN UwkJCQkvKiBWTVMgKi8KKyNpZm5kZWYgT0xEX1ZNUwkJCQkvKiA1LjAgYW5kIGxhdGVyICovCisj ZGVmaW5lIEdGVElNRVIKKyNlbmRpZiAvKiBPTERfVk1TICovCisjZW5kaWYgLyogVk1TICovCisj aWZkZWYgT1MyCQkJCS8qIEFuZCBLOTUgKi8KKyNkZWZpbmUgR0ZUSU1FUgorI2VuZGlmIC8qIE9T MiAqLworI2lmZGVmIFNUUkFUVVMJCQkJLyogQW5kIFN0cmF0dXMgVk9TICovCisjZGVmaW5lIEdG VElNRVIKKyNlbmRpZiAvKiBTVFJBVFVTICovCisjZW5kaWYgLyogR0ZUSU1FUiAqLworI2VuZGlm IC8qIE5PR0ZUSU1FUiAqLworCisjaWZuZGVmIE5PU1BMCisjaWZuZGVmIEZORkxPQVQJCQkJLyog RmxvYXRpbmctcG9pbnQgbWF0aCBmdW5jdGlvbnMgKi8KKyNpZmRlZiBWTVMJCQkJLyogZGVmaW5l ZCBieSBkZWZhdWx0IGluIFZNUyAqLworI2RlZmluZSBGTkZMT0FUCisjZWxzZQorI2lmZGVmIE9T MgkJCQkvKiBhbmQgSzk1ICovCisjZGVmaW5lIEZORkxPQVQKKyNlbmRpZiAvKiBPUzIgKi8KKyNl bmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBGTkZMT0FUICovCisjZW5kaWYgLyogTk9TUEwgKi8K KworI2Vsc2UgIC8qIE5PRkxPQVQgaXMgZGVmaW5lZCAqLworCisjaWZkZWYgQ0tGTE9BVAorI3Vu ZGVmIENLRkxPQVQKKyNlbmRpZiAvKiBDS0ZMT0FUICovCisKKyNpZmRlZiBHRlRJTUVSCisjdW5k ZWYgR0ZUSU1FUgorI2VuZGlmIC8qIEdGVElNRVIgKi8KKworI2lmZGVmIEZORkxPQVQKKyN1bmRl ZiBGTkZMT0FUCisjZW5kaWYgLyogRk5GTE9BVCAqLworCisjZW5kaWYgLyogTk9GTE9BVCAqLwor CisjaWZkZWYgR0ZUSU1FUgkJCQkvKiBGcmFjdGlvbiBvZiBzZWNvbmQgdG8gdXNlIHdoZW4gKi8K KyNpZm5kZWYgR0ZNSU5USU1FCQkJLyogZWxhcHNlZCB0aW1lIGlzIDw9IDAgKi8KKyNkZWZpbmUg R0ZNSU5USU1FIDAuMDA1CisjZW5kaWYgLyogR0ZNSU5USU1FICovCisjZW5kaWYgLyogR0ZUSU1F UiAqLworCisjaWZuZGVmIENLQ01BSQorZXh0ZXJuIGxvbmcgenRtc2VjLCB6dHVzZWM7CQkvKiBG cmFjdGlvbiBvZiBzZWMgb2YgY3VycmVudCB0aW1lICovCisjZW5kaWYgLyogQ0tDTUFJICovCisK KyNpZm5kZWYgTk9VTlBSRUZJWFpFUk8JCQkvKiBBbGxvdyB1bnByZWZpeGluZyBvZiBOVUwgKDAp ICovCisjaWZuZGVmIFVOUFJFRklYWkVSTwkJCS8qIGluIGZpbGUtdHJhbnNmZXIgcGFja2V0cyAq LworI2RlZmluZSBVTlBSRUZJWFpFUk8KKyNlbmRpZiAvKiBVTlBSRUZJWFpFUk8gKi8KKyNlbmRp ZiAvKiBOT1VOUFJFRklYWkVSTyAqLworCisjaWZkZWYgQ0tfU01BTEwKKyNkZWZpbmUgTk9DQUwJ CQkJLyogQ2FsaWJyYXRlICovCisjZW5kaWYgLyogQ0tfU01BTEwgKi8KKworI2lmbmRlZiBOT1BB VFRFUk5TCQkJLyogRmlsZXR5cGUgbWF0Y2hpbmcgcGF0dGVybnMgKi8KKyNpZm5kZWYgUEFUVEVS TlMKKyNpZm5kZWYgVk1TCisjaWZuZGVmIENLX1NNQUxMCisjZGVmaW5lIFBBVFRFUk5TCisjZW5k aWYgLyogQ0tfU01BTEwgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBQQVRURVJOUyAq LworI2VuZGlmIC8qIE5PUEFUVEVSTlMgKi8KKworI2lmbmRlZiBOT0NBTAorI2lmbmRlZiBDQUxJ QlJBVEUKKyNkZWZpbmUgQ0FMSUJSQVRFCisjZW5kaWYgLyogQ0FMSUJSQVRFICovCisjZWxzZQor I2lmZGVmIENBTElCUkFURQorI3VuZGVmIENBTElCUkFURQorI2VuZGlmIC8qIENBTElCUkFURSAq LworI2VuZGlmIC8qIE5PQ0FMICovCisKKyNpZm5kZWYgTk9SRUNVUlNFCQkJLyogUmVjdXJzaXZl IGRpcmVjdG9yeSB0cmF2ZXJzYWwgKi8KKyNpZm5kZWYgUkVDVVJTSVZFCisjaWZkZWYgVk1TCisj ZGVmaW5lIFJFQ1VSU0lWRQorI2Vsc2UKKyNpZmRlZiBPUzJPUlVOSVgKKyNpZm5kZWYgQ0tfU01B TEwKKyNkZWZpbmUgUkVDVVJTSVZFCisjZW5kaWYgLyogQ0tfU01BTEwgKi8KKyNlbHNlCisjaWZk ZWYgU1RSQVRVUworI2RlZmluZSBSRUNVUlNJVkUKKyNlbHNlCisjaWZkZWYgT1NLCisjZGVmaW5l IFJFQ1VSU0lWRQorI2VuZGlmIC8qIE9TSyAqLworI2VuZGlmIC8qIFNUUkFUVVMgKi8KKyNlbmRp ZiAvKiBPUzJPUlVOSVggKi8KKyNlbmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBSRUNVUlNJVkUg Ki8KKyNlbmRpZiAvKiBOT1JFQ1VSU0UgKi8KKworI2lmbmRlZiBDS19TTUFMTAkJCS8qIEVuYWJs ZSBmaWxlLXRyYW5zZmVyIHR1bmluZyBjb2RlICovCisjaWZuZGVmIENLVFVOSU5HCQkJLyogaW4g d2hpY2ggbW9yZSBjb2RlIGlzIGFkZGVkICovCisjaWZuZGVmIE5PVFVOSU5HCQkJLyogdG8gYXZv aWQgZnVuY3Rpb24gY2FsbHMsIGV0YyAqLworI2RlZmluZSBDS1RVTklORworI2VuZGlmIC8qIE5P VFVOSU5HICovCisjZW5kaWYgLyogQ0tUVU5JTkcgKi8KKyNlbmRpZiAvKiBDS19TTUFMTCAqLwor CisjaWZuZGVmIE5PVVJMCQkJCS8qIFBhcnNlIFVSTHMgaW4gU0VUIEhPU1QsIGV0YyAqLworI2Rl ZmluZSBDS19VUkwKKyNkZWZpbmUgTk9fRlRQX0FVVEggICAgICAgICAgICAgICAgICAgICAvKiBO byBhdXRoICJmdHAiIC8gImFub255bW91cyIgKi8KKyNlbmRpZiAvKiBOT1VSTCAqLworCisjaWZu ZGVmIE5PVFJJR0dFUgorI2lmbmRlZiBDS19UUklHR0VSCQkJLyogVHJpZ2dlciBzdHJpbmcgdG8g ZXhpdCBDT05ORUNUICovCisjaWZkZWYgT1MyT1JVTklYCQkJLyogT0sgZm9yIFVOSVggYW5kIEs5 NSAqLworI2RlZmluZSBDS19UUklHR0VSCisjZWxzZQorI2lmZGVmIFZNUwkJCQkvKiBhbmQgVk1T ICovCisjZGVmaW5lIENLX1RSSUdHRVIKKyNlbHNlCisjaWZkZWYgZGF0YWdlbmVyYWwJCQkvKiBh bmQgQU9TL1ZTICovCisjZGVmaW5lIENLX1RSSUdHRVIKKyNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAq LworI2VuZGlmIC8qIE9TMk9SVU5JWCAqLworI2VuZGlmIC8qIFZNUyAqLworI2VuZGlmIC8qIENL X1RSSUdHRVIgKi8KKyNlbmRpZiAvKiBOT1RSSUdHRVIgKi8KKworI2lmZGVmIENLX1RSSUdHRVIK KyNkZWZpbmUgVFJJR0dFUlMgOAkJCS8qIEhvdyBtYW55IHRyaWdnZXJzIGFsbG93ZWQgKi8KKyNl bmRpZiAvKiBDS19UUklHR0VSICovCisKKyNpZm5kZWYgWExJTUlUUwkJCQkvKiBDT05ORUNUIGxp bWl0cyAqLworI2lmZGVmIE9TMgorI2RlZmluZSBYTElNSVRTCisjZW5kaWYgLyogT1MyICovCisj ZW5kaWYgLyogWExJTUlUUyAqLworCisjaWZkZWYgTk9GUklMTFMKKyNpZm5kZWYgTk9CUk9XU0VS CisjZGVmaW5lIE5PQlJPV1NFUgorI2VuZGlmIC8qIE5PQlJPV1NFUiAqLworI2lmbmRlZiBOT0ZU UAorI2RlZmluZSBOT0ZUUAorI2VuZGlmIC8qIE5PRlRQICovCisjZW5kaWYgLyogTk9GUklMTFMg Ki8KKworI2lmbmRlZiBOT0hUVFAJCQkJLyogSFRUUCBmZWF0dXJlcyBuZWVkLi4uICovCisjaWZk ZWYgTk9JQ1AJCQkJLyogYW4gaW50ZXJhY3RpdmUgY29tbWFuZCBwYXJzZXIgKi8KKyNkZWZpbmUg Tk9IVFRQCisjZW5kaWYgLyogTk9JQ1AgKi8KKyNpZm5kZWYgVk1TCisjaWZuZGVmIE9TMk9SVU5J WAkJCS8qIEs5NSBvciBVTklYIChiZWNhdXNlIG9mICovCisjZGVmaW5lIE5PSFRUUAkJCQkvKiB0 aW1lIGZ1bmN0aW9ucywgdGltZV90LCBldGMpICovCisjZW5kaWYgLyogT1MyT1JVTklYICovCisj ZW5kaWYgLyogVk1TICovCisjZW5kaWYgLyogTk9IVFRQICovCisKKworI2lmbmRlZiBOT05FVAor I2lmZGVmIFRDUFNPQ0tFVAorCisvKiBUaGUgSFRUUCBjb2RlIGlzIG5vdCB2ZXJ5IHBvcnRhYmxl LCBzbyBpdCBtdXN0IGJlIGFza2VkIGZvciB3aXRoIC1EQ0tIVFRQICovCisKKyNpZm5kZWYgTk9I VFRQCisjaWZuZGVmIENLSFRUUAorI2lmZGVmIFNVTk9TNAkJCQkvKiBXZSBjYW4gdXNlIGl0IGlu IFN1bk9TICovCisjZGVmaW5lIENLSFRUUAorI2VuZGlmIC8qIFNVTk9TNCAqLworI2lmZGVmIFNP TEFSSVMJCQkJLyogQW5kIGluIFNvbGFyaXMgKi8KKyNkZWZpbmUgQ0tIVFRQCisjZW5kaWYgLyog U09MQVJJUyAqLworI2lmZGVmIExJTlVYCQkJCS8qIEFuZCBMaW51eCAqLworI2RlZmluZSBDS0hU VFAKKyNlbmRpZiAvKiBMSU5VWCAqLworI2lmZGVmIEhQVVgxMAkJCQkvKiBBbmQgSFAtVVggMTAg YW5kIGFib3ZlICovCisjZGVmaW5lIENLSFRUUAorI2VuZGlmIC8qIEhQVVgxMCAqLworI2lmZGVm IE9TMgkJCQkvKiBBbmQgaW4gSy05NSAqLworI2RlZmluZSBDS0hUVFAKKyNlbmRpZiAvKiBPUzIg Ki8KKyNpZmRlZiBBSVg0MQkJCQkvKiBJbiBBSVggNC4xIGFuZCBoaWdoZXIgKi8KKyNkZWZpbmUg Q0tIVFRQCisjZW5kaWYgLyogQUlYNDEgKi8KKyNpZmRlZiBVTklYV0FSRQkJCQkvKiBJbiBVbml4 d2FyZSAyLjEgYW5kIGhpZ2hlciAqLworI2RlZmluZSBDS0hUVFAJCQkJLyogYW5kIHByb2JhYmx5 IGFsc28gaW4gMS54IGFuZCAyLjAgKi8KKyNlbmRpZiAvKiBVTklYV0FSRSAqLworI2lmZGVmIENL X1NDT1Y1CisjZGVmaW5lIENLSFRUUAorI2VuZGlmIC8qIENLX1NDT1Y1ICovCisjaWZkZWYgT1NG ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQW5kIGluIE9TRiBEaWdpdGFsIFVOSVgv VHJ1ZSA2NCAqLworI2RlZmluZSBDS0hUVFAKKyNlbmRpZiAvKiBPU0YgKi8KKyNpZmRlZiB1bHRy aXggICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBbmQgaW4gVWx0cml4IE1pcHMgKi8KKyNp ZmRlZiBtaXBzCisjZGVmaW5lIENLSFRUUAorI2VuZGlmIC8qIG1pcHMgKi8KKyNlbmRpZiAvKiB1 bHRyaXggKi8KKyNpZmRlZiBfX05ldEJTRF9fCQkJLyogTmV0QlNEICovCisjZGVmaW5lIENLSFRU UAorI2VuZGlmCS8qIF9fTmV0QlNEX18gKi8KKyNpZmRlZiBfX0ZyZWVCU0RfXworI2RlZmluZSBD S0hUVFAKKyNlbmRpZgkvKiBfX0ZyZWVCU0RfXyAqLworI2lmZGVmIF9fT3BlbkJTRF9fCisjZGVm aW5lIENLSFRUUAorI2VuZGlmCS8qIF9fT3BlbkJTRF9fICovCisvKiBBZGQgbW9yZSBoZXJlLi4u ICovCisjZW5kaWYgLyogQ0tIVFRQICovCisjaWZuZGVmIENLSFRUUAkJCQkvKiBJZiBDS0hUVFAg bm90IGRlZmluZWQgeWV0ICovCisjZGVmaW5lIE5PSFRUUAkJCQkvKiB0aGVuIGRlZmluZSBOT0hU VFAgKi8KKyNlbmRpZiAvKiBDS0hUVFAgKi8KKyNlbmRpZiAvKiBOT0hUVFAgKi8KKworI2lmZGVm IE5FVENPTk4JCQkJLyogU3BlY2lhbCAibmV0d29yayIgdHlwZXMuLi4gKi8KKyNpZm5kZWYgTk9M T0NBTAorI2lmZGVmIE9TMgorI2lmbmRlZiBORVRGSUxFCisjZGVmaW5lIE5FVEZJTEUKKyNlbmRp ZiAvKiBORVRGSUxFICovCisjaWZuZGVmIE5PUFVTSAorI2lmbmRlZiBORVRDTUQKKyNkZWZpbmUg TkVUQ01ECisjZW5kaWYgLyogTkVUQ01EICovCisjZW5kaWYgLyogTk9QVVNIICovCisjaWZkZWYg TlQKKyNpZm5kZWYgTkVURExMCisjZGVmaW5lIE5FVERMTAorI2VuZGlmIC8qIE5FVERMTCAqLwor I2VuZGlmIC8qIE5UICovCisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogTk9MT0NBTCAqLwor I2VuZGlmIC8qIE5FVENPTk4gKi8KKworI2lmbmRlZiBOT0ZUUAorI2lmbmRlZiBTWVNGVFAKKyNp Zm5kZWYgTkVXRlRQCisjaWZkZWYgT1MyT1JVTklYCisjZGVmaW5lIE5FV0ZUUAorI2VuZGlmIC8q IE9TMk9SVU5JWCAqLworI2VuZGlmIC8qIE5FV0ZUUCAqLworI2VuZGlmIC8qIFNZU0ZUUCAqLwor I2VuZGlmIC8qIE5PRlRQICovCisKKyNpZm5kZWYgTk9GVFAKKyNpZmRlZiBORVdGVFAKKyNpZmRl ZiBTWVNGVFAKKyN1bmRlZiBTWVNGVFAKKyNlbmRpZiAvKiBTWVNGVFAgKi8KKyNlbHNlIC8qIE5F V0ZUUCAqLworI2lmbmRlZiBTWVNGVFAKKyNkZWZpbmUgU1lTRlRQCisjZW5kaWYgLyogU1lTRlRQ ICovCisjZW5kaWYgLyogTkVXRlRQICovCisjZWxzZSAvKiBOT0ZUUCAqLworI2lmZGVmIE5FV0ZU UAorI3VuZGVmIE5FV0ZUUAorI2VuZGlmIC8qIE5FV0ZUUCAqLworI2lmZGVmIFNZU0ZUUAorI3Vu ZGVmIFNZU0ZUUAorI2VuZGlmIC8qIFNZU0ZUUCAqLworI2VuZGlmIC8qIE5PRlRQICovCisKKyNp Zm5kZWYgTk9CUk9XU0VSCisjaWZkZWYgVU5JWAorI2lmbmRlZiBCUk9XU0VSCisjaWZuZGVmIE5P UFVTSAorI2RlZmluZSBCUk9XU0VSCisjZW5kaWYgLyogTk9QVVNIICovCisjZW5kaWYgLyogQlJP V1NFUiAqLworI2VuZGlmIC8qIFVOSVggKi8KKyNpZmRlZiBPUzIKKyNpZm5kZWYgQlJPV1NFUgor I2lmbmRlZiBOT1BVU0gKKyNkZWZpbmUgQlJPV1NFUgorI2VuZGlmIC8qIE5PUFVTSCAqLworI2Vu ZGlmIC8qIEJST1dTRVIgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyNlbHNlCisjaWZkZWYgQlJPV1NF UgorI3VuZGVmIEJST1dTRVIKKyNlbmRpZiAvKiBCUk9XU0VSICovCisjZW5kaWYgLyogTk9CUk9X U0VSICovCisKKyNlbHNlIC8qIFRDUFNPQ0tFVCAqLworI2lmbmRlZiBOT0hUVFAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIEhUVFAgcmVxdWlyZXMgVENQU09DS0VUICovCisjZGVmaW5lIE5P SFRUUAorI2VuZGlmIC8qIE5PSFRUUCAqLworI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLworI2VuZGlm IC8qIE5PTkVUICovCisKKyNpZmRlZiBUQ1BTT0NLRVQKKyNpZm5kZWYgTk9DS0dFVEZRSE9TVAor I2lmZGVmIF9faWE2NF9fCisjZGVmaW5lIE5PQ0tHRVRGUUhPU1QKKyNlbHNlICAvKiBfX2lhNjRf XyAqLworI2lmZGVmIFNWNjgKKyNkZWZpbmUgTk9DS0dFVEZRSE9TVAorI2Vsc2UKKyNpZmRlZiBI UFVYUFJFNjUKKyNkZWZpbmUgTk9DS0dFVEZRSE9TVAorI2VuZGlmIC8qIEhQVVhQUkU2NSAqLwor I2VuZGlmIC8qIFNWNjggKi8KKyNlbmRpZiAvKiBfX2lhNjQgKi8KKyNlbmRpZiAvKiBOT0NLR0VU RlFIT1NUICovCisvKgorICBSZWdhcmRpbmcgU3lzdGVtIFYvNjggKFNWNjgpIChmcm9tIEdlcnJ5 IEJlbGFuZ2VyLCBPY3QgMjAwMik6CisKKyAgICAxKSBUaGUgZ2V0aG9zdGJ5bmFtZSgpIGFwcGVh cnMgdG8gcmV0dXJuIHRoZSBhY3R1YWwgaG9zdCBJUAorICAgICAgIGFkZHJlc3MgaW4gdGhlIGhv c3RlbnQgc3RydWN0LCBpbnN0ZWFkIG9mIHRoZSBleHBlY3RlZCBwb2ludGVyCisgICAgICAgdG8g dGhlIGFkZHJlc3MuIEhlbmNlIHRoZSBib2d1cyBhZGRyZXNzIGluIHRoZSBiY29weS9tZW1jb3B5 LgorICAgICAgIFRoaXMgaXMgZGVzcGl0ZSB0aGUgaGVhZGVyIGFncmVlaW5nIHdpdGggb3VyIGV4 cGVjdGF0aW9ucy4KKworICAgIDIpIHRoZSBleHBlY3RlZCBhcmd1bWVudCBzd2FwIGJldHdlZW4g YmNvcHkgYW5kIG1lbWNvcHkKKyAgICAgICBkaWQgbm90IGhhcHBlbi4gIFdoYXQgZ3JpZWYgdGhp cyBtaWdodCBjYXVzZSwgSSBrbm93IG5vdC4KKyovCisjZW5kaWYgLyogVENQU09DS0VUICovCisK KyNpZmRlZiBUQ1BTT0NLRVQKKyNpZmRlZiBPUzJPTkxZCisjaWZuZGVmIE5PU09DS1MKKyNkZWZp bmUgTk9TT0NLUworI2VuZGlmIC8qIE5PU09DS1MgKi8KKyNlbmRpZiAvKiBPUzJPTkxZICovCisj aWZkZWYgTk9TT0NLUworI2lmZGVmIENLX1NPQ0tTCisjdW5kZWYgQ0tfU09DS1MKKyNlbmRpZiAv KiBDS19TT0NLUyAqLworI2lmZGVmIENLX1NPQ0tTNQorI3VuZGVmIENLX1NPQ0tTNQorI2VuZGlm IC8qIENLX1NPQ0tTNSAqLworI2Vsc2UgLyogTk9TT0NLUyAqLworI2lmZGVmIE5UCisjaWZuZGVm IENLX1NPQ0tTCisjZGVmaW5lIENLX1NPQ0tTCisjZW5kaWYgLyogQ0tfU09DS1MgKi8KKyNlbmRp ZiAvKiBOVCAqLworI2lmZGVmIENLX1NPQ0tTNQkJCS8qIENLX1NPQ0tTNSBpbXBsaWVzIENLX1NP Q0tTICovCisjaWZuZGVmIENLX1NPQ0tTCisjZGVmaW5lIENLX1NPQ0tTCisjZW5kaWYgLyogQ0tf U09DS1MgKi8KKyNlbmRpZiAvKiBDS19TT0NLUzUgKi8KKyNlbmRpZiAvKiBOT1NPQ0tTICovCisj ZW5kaWYgLyogVENQU09DS0VUICovCisKKyNpZmRlZiBUTkNPREUKKyNpZm5kZWYgQ0tfQVVUSEVO VElDQVRJT04KKyNpZmRlZiBPUzIKKyNpZmRlZiBfTV9QUEMKKyNkZWZpbmUgTk9fS0VSQkVST1MK KyNkZWZpbmUgTk9fU1JQCisjZWxzZSAvKiBfTV9QUEMgKi8KKyNpZm5kZWYgTk9fU1NMCisjZGVm aW5lIENLX1NTTAorI2RlZmluZSBTU0xETEwKKyNlbmRpZiAvKiBOT19TU0wgKi8KKyNlbmRpZiAv KiBfTV9QUEMgKi8KKyNpZm5kZWYgTk9fS0VSQkVST1MKKyNkZWZpbmUgQ0tfS0VSQkVST1MKKyNk ZWZpbmUgS1JCNAorI2RlZmluZSBLUkI1CisjZGVmaW5lIEtSQjUyNAorI2RlZmluZSBLUkI1MjRf Q09OVgorI2lmZGVmIE5UCisjaWZuZGVmIF9NX1BQQworI2lmbmRlZiBfTV9BTFBIQQorI2lmbmRl ZiBOT19TU0xfS1JCNQorI2RlZmluZSBTU0xfS1JCNQorI2VuZGlmIC8qIE5PX1NTTF9LUkI1ICov CisjZW5kaWYgLyogX01fQUxQSEEgKi8KKyNlbmRpZiAvKiBfTV9QUEMgKi8KKyNlbmRpZiAvKiBO VCAqLworI2VuZGlmIC8qIE5PX0tFUkJFUk9TICovCisjaWZuZGVmIE5PX1NSUAorI2RlZmluZSBD S19TUlAKKyNlbmRpZiAvKiBOT19TUlAgKi8KKyNkZWZpbmUgQ0tfQVVUSEVOVElDQVRJT04KKyNl bmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBDS19BVVRIRU5USUNBVElPTiAqLworCisjaWZkZWYg Q0tfQVVUSEVOVElDQVRJT04JCS8qIEVuY3J5cHRpb24gbXVzdCBoYXZlIEF1dGggKi8KKyNpZm5k ZWYgQ0tfRU5DUllQVElPTgorI2lmbmRlZiBOT19FTkNSWVBUSU9OCisjaWZkZWYgT1MyCisjZGVm aW5lIENLX0VOQ1JZUFRJT04KKyNkZWZpbmUgQ0tfREVTCisjZGVmaW5lIENLX0NBU1QKKyNlbmRp ZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBOT19FTkNSWVBUSU9OICovCisjZW5kaWYgLyogQ0tfRU5D UllQVElPTiAqLworI2VuZGlmIC8qIENLX0FVVEhFTlRJQ0FUSU9OICovCisKKyNpZmRlZiBOT19B VVRIRU5USUNBVElPTiAgICAgICAgICAgICAgICAvKiBBbGxvdyBhdXRoZW50aWNhdGlvbiB0byBi ZSAqLworI2lmZGVmIENLX0FVVEhFTlRJQ0FUSU9OICAgICAgICAgICAgICAgIC8qIGRpc2FibGVk IGluIE5UIGFuZCBPUy8yICAgICovCisjdW5kZWYgQ0tfQVVUSEVOVElDQVRJT04KKyNlbmRpZiAv KiBDS19BVVRIRU5USUNBVElPTiAqLworI2lmZGVmIENLX0tFUkJFUk9TCisjdW5kZWYgQ0tfS0VS QkVST1MKKyNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLworI2lmZGVmIENLX1NSUAorI3VuZGVmIENL X1NSUAorI2VuZGlmIC8qIENLX1NSUCAqLworI2lmZGVmIENLX0VOQ1JZUFRJT04KKyN1bmRlZiBD S19FTkNSWVBUSU9OCisjZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLworI2VuZGlmIC8qIE5PX0FV VEhFTlRJQ0FUSU9OICovCisKKyNpZmRlZiBOT19FTkNSWVBUSU9OICAgICAgICAgICAgICAgICAg ICAvKiBBbGxvdyBlbmNyeXB0aW9uIHRvIGJlICovCisjaWZkZWYgQ0tfRU5DUllQVElPTiAgICAg ICAgICAgICAgICAgICAgLyogZGlzYWJsZWQgaW4gTlQgYW5kIE9TLzIgKi8KKyN1bmRlZiBDS19F TkNSWVBUSU9OCisjZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLworI2VuZGlmIC8qIE5PX0VOQ1JZ UFRJT04gKi8KKworI2lmZGVmIENLX0tFUkJFUk9TICAgICAgLyogRGlzYWJsZSBmdW5jcyBub3Qg eWV0IHN1cHBvcnRlZCB3aXRoIEhlaW1kYWwgKi8KKyNpZmRlZiBLUkI1CisjaWZuZGVmIEhFSU1E QUwKKyNkZWZpbmUgS1JCNV9VMlUKKyNlbmRpZiAvKiBIRUlNREFMICovCisjZW5kaWYgLyogS1JC NSAqLworI2VuZGlmIC8qIENLX0tFUkJFUk9TICovCisKKy8qCisgIFNTSCBzZWN0aW9uLiAgTk9T U0ggZGlzYWJsZXMgYW55IGZvcm0gb2YgU1NIIHN1cHBvcnQuCisgIElmIE5PU1NIIGlzIG5vdCBk ZWZpbmVkIChvciBpbXBsaWVkIGJ5IE5PTkVULCBOT0xPQ0FMLCBldGMpCisgIHRoZW4gU1NIQlVJ TFRJTiBpcyBkZWZpbmVkIGZvciBLOTUgYW5kIFNTSENNRCBpcyBkZWZpbmVkIGZvciBVTklYLgor ICBUaGVuLCBpZiBlaXRoZXIgU1NIQlVJTFRJTiBvciBTU0hDTUQgaXMgZGVmaW5lZCwgQU5ZU1NI IGlzIGFsc28gZGVmaW5lZC4KKyovCisKKyNpZm5kZWYgTk9TU0gKKyNpZm5kZWYgTk9fU1NMCisj aWZkZWYgT1MyT05MWQorI2RlZmluZSBOT1NTSAorI2VuZGlmIC8qIE9TMk9OTFkgKi8KKyNpZmRl ZiBOVAorI2lmbmRlZiBDS19TU0wKKyNkZWZpbmUgTk9TU0gKKyNlbmRpZiAvKiBDS19TU0wgKi8K KyNlbmRpZiAvKiBOVCAqLworI2Vsc2UgLyogTk9fU1NMICovCisjZGVmaW5lIE5PU1NICisjZW5k aWYgLyogTk9fU1NMICovCisjZW5kaWYgLyogTk9TU0ggKi8KKworI2lmZGVmIE5PU1NICQkJCS8q IE5PU1NIICovCisjaWZkZWYgU1NIQlVJTFRJTgkJCS8qIHVuZGVmaW5lcyBhbnkgU1NIIHNlbGN0 b3JzICovCisjdW5kZWYgU1NIQlVJTFRJTgorI2VuZGlmIC8qIFNTSEJVSUxUSU4gKi8KKyNpZmRl ZiBTRlRQX0JVSUxUSU4KKyN1bmRlZiBTRlRQX0JVSUxUSU4KKyNlbmRpZiAvKiBTRlRQX0JVSUxU SU4gKi8KKyNpZmRlZiBTU0hDTUQKKyN1bmRlZiBTU0hDTUQKKyNlbmRpZiAvKiBTU0hDTUQgKi8K KyNpZmRlZiBBTllTU0gKKyN1bmRlZiBBTllTU0gKKyNlbmRpZiAvKiBBTllTU0ggKi8KKyNlbHNl ICAvKiBOb3QgTk9TU0ggKi8KKyNpZm5kZWYgTk9MT0NBTAorI2lmZGVmIE9TMgorI2lmbmRlZiBT U0hCVUlMVElOCisjZGVmaW5lIFNTSEJVSUxUSU4KKyNlbmRpZiAvKiBTU0hCVUlMVElOICovCisj ZWxzZSAgLyogTm90IE9TMiAqLworI2lmZGVmIFVOSVgKKyNpZm5kZWYgU1NIQ01ECisjaWZkZWYg TkVUUFRZCisjaWZuZGVmIE5PUFVTSAorI2RlZmluZSBTU0hDTUQKKyNlbmRpZiAvKiBOT1BVU0gg Ki8KKyNlbmRpZiAvKiBORVRQVFkgKi8KKyNlbmRpZiAvKiBTU0hDTUQgKi8KKyNlbmRpZiAvKiBV TklYICovCisjZW5kaWYgLyogT1MyICovCisjaWZuZGVmIEFOWVNTSAorI2lmZGVmIFNTSEJVSUxU SU4KKyNkZWZpbmUgQU5ZU1NICisjaWZkZWYgU1NIQ01ECisjdW5kZWYgU1NIQ01ECisjZW5kaWYg LyogU1NIQ01EICovCisjZWxzZSAgLyogU1NIQlVJTFRJTiAqLworI2lmZGVmIFNTSENNRAorI2Rl ZmluZSBBTllTU0gKKyNlbmRpZiAvKiBTU0hDTUQgKi8KKyNlbmRpZiAvKiBTU0hCVUlMVElOICov CisjZW5kaWYgLyogQU5ZU1NIICovCisjZW5kaWYgLyogTk9MT0NBTCAqLworI2VuZGlmIC8qIE5P U1NIICovCisKKy8qIFRoaXMgaXMgaW4gY2FzZSAjaWZkZWYgU1NIIGlzIHVzZWQgYW55d2hlcmUg aW4gdGhlIEs5NSBtb2R1bGVzICovCisKKyNpZmRlZiBPUzIKKyNpZmRlZiBTU0hCVUlMVElOCisj aWZuZGVmIFNTSAorI2RlZmluZSBTU0gKKyNlbmRpZiAvKiBTU0ggKi8KKyNlbmRpZiAvKiBTU0hC VUlMVElOICovCisjZW5kaWYgLyogT1MyICovCisKKyNpZmRlZiBDS19BVVRIRU5USUNBVElPTgor I2RlZmluZSBDS19TRUNVUklUWQorI2Vsc2UKKyNpZmRlZiBDS19TU0wKKyNkZWZpbmUgQ0tfQVVU SEVOVElDQVRJT04KKyNkZWZpbmUgQ0tfU0VDVVJJVFkKKyNlbmRpZiAvKiBDS19TU0wgKi8KKyNl bmRpZiAvKiBDS19BVVRIRU5USUNBVElPTiAqLworCisvKiBFbnZpcm9ubWVudCBzdHVmZiAqLwor CisjaWZuZGVmIE9TMk9SVU5JWAorI2lmbmRlZiBOT1BVVEVOVgorI2RlZmluZSBOT1BVVEVOVgor I2VuZGlmIC8qIE5PUFVURU5WICovCisjZW5kaWYgLyogT1MyT1JVTklYICovCisKKyNpZm5kZWYg Q0tfRU5WSVJPTk1FTlQKKyNpZmRlZiBPUzIKKyNkZWZpbmUgQ0tfRU5WSVJPTk1FTlQKKyNlbHNl CisjaWZkZWYgVU5JWAorI2RlZmluZSBDS19FTlZJUk9OTUVOVAorI2Vsc2UKKyNpZmRlZiBTVFJB VFVTCisjZGVmaW5lIENLX0VOVklST05NRU5UCisjZWxzZQorI2lmZGVmIFZNUworI2RlZmluZSBD S19FTlZJUk9OTUVOVAorI2VuZGlmIC8qIFZNUyAqLworI2VuZGlmIC8qIFNUUkFUVVMgKi8KKyNl bmRpZiAvKiBVTklYICovCisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogQ0tfRU5WSVJPTk1F TlQgKi8KKyNpZm5kZWYgTk9TTkRMT0MJCQkvKiBSRkMgNzc5IFNFTkQgTE9DQVRJT04gKi8KKyNp Zm5kZWYgQ0tfU05ETE9DCisjZGVmaW5lIENLX1NORExPQworI2VuZGlmIC8qIENLX1NORExPQyAq LworI2VuZGlmIC8qIE5PU05ETE9DICovCisjaWZuZGVmIE5PWERJU1BMT0MJCQkvKiBSRkMgMTA5 NiBYRElTUExPQyAqLworI2lmbmRlZiBDS19YRElTUExPQworI2RlZmluZSBDS19YRElTUExPQwor I2VuZGlmIC8qIENLX1hESVNQTE9DICovCisjZW5kaWYgLyogTk9YRElTUExPQyAqLworI2lmbmRl ZiBOT0ZPUldBUkRYCisjaWZuZGVmIE5PUFVURU5WCisjaWZuZGVmIE5PU0VMRUNUCisjaWZuZGVm IENLX0ZPUldBUkRfWAorI2lmZGVmIENLX0FVVEhFTlRJQ0FUSU9OCisjaWZuZGVmIE9TMk9OTFkK KyNkZWZpbmUgQ0tfRk9SV0FSRF9YCisjZW5kaWYgLyogT1MyT05MWSAqLworI2VuZGlmIC8qIENL X0FVVEhFTlRJQ0FUSU9OICovCisjZW5kaWYgLyogQ0tfRk9SV0FSRF9YICovCisjZW5kaWYgLyog Tk9TRUxFQ1QgKi8KKyNlbmRpZiAvKiBOT1BVVEVOViAqLworI2VuZGlmIC8qIE5PRk9SV0FSRFgg Ki8KKyNpZm5kZWYgTk9fQ09NUE9SVAorI2lmZGVmIFRDUFNPQ0tFVAorI2lmbmRlZiBUTl9DT01Q T1JUCisjZGVmaW5lIFROX0NPTVBPUlQKKyNlbmRpZiAvKiBUTl9DT01QT1JUICovCisjZW5kaWYg LyogVENQU09DS0VUICovCisjZW5kaWYgLyogTk9fQ09NUE9SVCAqLworI2VuZGlmIC8qIFROQ09E RSAqLworCisjaWZuZGVmIE5PWEZFUgorI2lmbmRlZiBOT0NUUkxaCQkJCS8qIEFsbG93IFNFVCBG SUxFIEVPRiBDVFJMLVogKi8KKyNpZm5kZWYgQ0tfQ1RSTFoKKyNpZmRlZiBPUzJPUlVOSVgKKyNk ZWZpbmUgQ0tfQ1RSTFoKKyNlbmRpZiAvKiBPUzJPUlVOSVggKi8KKyNlbmRpZiAvKiBDS19DVFJM WiAqLworI2VuZGlmIC8qIE5PQ1RSTFogKi8KKyNlbmRpZiAvKiBOT1hGRVIgKi8KKworI2lmbmRl ZiBOT1BFUk1TCQkJCS8qIEZpbGUgcGVybWlzc2lvbnMgaW4gQSBwYWNrZXRzICovCisjaWZuZGVm IENLX1BFUk1TCisjaWZkZWYgVU5JWAorI2RlZmluZSBDS19QRVJNUworI2Vsc2UKKyNpZmRlZiBW TVMKKyNkZWZpbmUgQ0tfUEVSTVMKKyNlbmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBVTklYICov CisjZW5kaWYgLyogQ0tfUEVSTVMgKi8KKyNlbmRpZiAvKiBOT1BFUk1TICovCisjaWZkZWYgQ0tf UEVSTVMKKyNkZWZpbmUgQ0tfUEVSTUxFTiAyNAkJCS8qIE1heCBsZW5ndGggb2Ygc3lzLWRlcGVu ZGVudCBwZXJtcyAqLworI2VuZGlmIC8qIENLX1BFUk1TICovCisKKyNpZmRlZiBVTklYCQkJCS8q IE5PU0VUQlVGIGZvciBldmVyeWJvZHkgKi8KKyNpZm5kZWYgTk9TRVRCVUYKKyNpZm5kZWYgVVNF X1NFVEJVRgkJCS8qIFRoaXMgaXMgdGhlIGVzY2FwZSBjbGF1c2UgKi8KKyNkZWZpbmUgTk9TRVRC VUYKKyNlbmRpZiAvKiBVU0VfU0VUQlVGICovCisjZW5kaWYgLyogTk9TRVRCVUYgKi8KKyNlbmRp ZiAvKiBVTklYICovCisKKyNpZm5kZWYgVVNFX1NUUkVSUk9SCQkJLyogV2hldGhlciB0byB1c2Ug c3RyZXJyb3IoKSAqLworI2lmZGVmIHBkcDExCisjZGVmaW5lIFVTRV9TVFJFUlJPUgorI2VuZGlm IC8qIHBkcDExICovCisjZW5kaWYgLyogVVNFX1NUUkVSUk9SICovCisKKyNpZmRlZiBWTVMJCQkJ LyogRmVhdHVyZXMgZm9yIGFsbCBWTVMgYnVpbGRzICovCisjaWZuZGVmIE5PSkMKKyNkZWZpbmUg Tk9KQworI2VuZGlmIC8qIE5PSkMgKi8KKyNpZm5kZWYgTk9TRVRCVUYKKyNkZWZpbmUgTk9TRVRC VUYKKyNlbmRpZiAvKiBOT1NFVEJVRiAqLworI2lmbmRlZiBEWU5BTUlDCisjZGVmaW5lIERZTkFN SUMKKyNlbmRpZiAvKiBEWU5BTUlDICovCisjaWZuZGVmIE5PQ1VSU0VTCisjaWZuZGVmIENLX0NV UlNFUworI2RlZmluZSBDS19DVVJTRVMKKyNlbmRpZiAvKiBDS19DVVJTRVMgKi8KKyNlbmRpZiAv KiBOT0NVUlNFUyAqLworI2VuZGlmIC8qIFZNUyAqLworCisjaWZuZGVmIE5PQ0tUSU1FUlMJCQkv KiBEeW5hbWljIHRpbWVvdXRzICovCisjaWZuZGVmIENLX1RJTUVSUworI2RlZmluZSBDS19USU1F UlMKKyNlbmRpZiAvKiBDS19USU1FUlMgKi8KKyNlbmRpZiAvKiBOT0NLVElNRVJTICovCisKKyNk ZWZpbmUgQ0tfU1BFRUQJCQkvKiBDb250cm9sLXByZWZpeCByZW1vdmFsICovCisjaWZkZWYgTk9D S1NQRUVECisjdW5kZWYgQ0tfU1BFRUQKKyNlbmRpZiAvKiBOT0NLU1BFRUQgKi8KKworI2lmbmRl ZiBOT0NLWFhDSEFSCisjaWZuZGVmIENLWFhDSEFSCisjaWZkZWYgVU5JWAorI2RlZmluZSBDS1hY Q0hBUgorI2Vsc2UKKyNpZmRlZiBPUzIKKyNkZWZpbmUgQ0tYWENIQVIKKyNlbmRpZiAvKiBPUzIg Ki8KKyNlbmRpZiAvKiBVTklYICovCisjZW5kaWYgLyogQ0tYWENIQVIgKi8KKyNlbmRpZiAvKiBO T0NLWFhDSEFSICovCisKKyNpZmRlZiBNQUMJCQkJLyogRm9yIE1hY2ludG9zaCwgbm8gZXNjYXBl ICovCisjZGVmaW5lIE5PUFVTSAkJCQkvKiB0byBvcGVyYXRpbmcgc3lzdGVtICovCisjZW5kaWYg LyogTUFDICovCisKKy8qIFN5c3RlbXMgd2hlcmUgd2UgY2FuIGNhbGwgem1rZGlyKCkgdG8gY3Jl YXRlIGRpcmVjdG9yaWVzLiAqLworCisjaWZuZGVmIENLX01LRElSCisjaWZuZGVmIE5PTUtESVIK KworI2lmZGVmIFVOSVgKKyNpZm5kZWYgcGRwMTEKKyNkZWZpbmUgQ0tfTUtESVIKKyNlbmRpZiAv KiBwZHAxMSAqLworI2VuZGlmIC8qIFVOSVggKi8KKworI2lmZGVmIE9TMgorI2RlZmluZSBDS19N S0RJUgorI2VuZGlmIC8qIE9TMiAqLworCisjaWZkZWYgVk1TCisjZGVmaW5lIENLX01LRElSCisj ZW5kaWYgLyogVk1TICovCisKKyNpZmRlZiBTVFJBVFVTCisjZGVmaW5lIENLX01LRElSCisjZW5k aWYgLyogU1RSQVRVUyAqLworCisjaWZkZWYgT1NLCisjZGVmaW5lIENLX01LRElSCisjZW5kaWYg LyogT1NLICovCisKKyNpZmRlZiBkYXRhZ2VuZXJhbAorI2RlZmluZSBDS19NS0RJUgorI2VuZGlm IC8qIGRhdGFnZW5lcmFsICovCisKKyNlbmRpZiAvKiBDS19NS0RJUiAqLworI2VuZGlmIC8qIE5P TUtESVIgKi8KKworI2lmZGVmIE5PTUtESVIJCQkJLyogQWxsb3cgZm9yIGNvbW1hbmQtbGluZSBv dmVycmlkZSAqLworI2lmZGVmIENLX01LRElSCisjdW5kZWYgQ0tfTUtESVIKKyNlbmRpZiAvKiBD S19NS0RJUiAqLworI2VuZGlmIC8qIE5PTUtESVIgKi8KKworLyogU3lzdGVtcyBmb3Igd2hpY2gg d2UgY2FuIGVuYWJsZSB0aGUgUkVESVJFQ1QgY29tbWFuZCBhdXRvbWF0aWNhbGx5ICovCisvKiAg IEFzIG9mIDYuMC4xOTMsIGl0IHNob3VsZCB3b3JrIGZvciBhbGwgVU5JWC4uLiAqLworCisjaWZu ZGVmIE5PUkVESVJFQ1QKKyNpZm5kZWYgQ0tfUkVESVIKKyNpZmRlZiBVTklYCisjZGVmaW5lIENL X1JFRElSCisjZW5kaWYgLyogVU5JWCAqLworI2lmZGVmIE9TMgkJCQkvKiBBcyB3ZWxsIGFzIE9T LzIgYW5kIGZyaWVuZHMuLi4gKi8KKyNkZWZpbmUgQ0tfUkVESVIKKyNlbmRpZiAvKiBPUzIgKi8K KyNlbmRpZiAvKiBDS19SRURJUiAqLworI2VuZGlmIC8qIE5PUkVESVJFQ1QgKi8KKworI2lmZGVm IE5PUFVTSAkJCQkvKiBCdXQuLi4gUkVESVJFQ1QgY29tbWFuZCBpcyBub3QgKi8KKyNpZmRlZiBD S19SRURJUgkJCQkvKiAgYWxsb3dlZCBpZiBOT1BVU0ggaXMgZGVmaW5lZC4gKi8KKyN1bmRlZiBD S19SRURJUgorI2VuZGlmIC8qIENLX1JFRElSICovCisjaWZkZWYgTkVUQ01ECQkJCS8qIE5vciBp cyBTRVQgTkVUIENPTU1BTkQgKi8KKyN1bmRlZiBORVRDTUQKKyNlbmRpZiAvKiBORVRDTUQgKi8K KyNpZmRlZiBORVRQVFkKKyN1bmRlZiBORVRQVFkKKyNlbmRpZiAvKiBORVRQVFkgKi8KKyNlbmRp ZiAvKiBOT1BVU0ggKi8KKworI2lmbmRlZiBQRVhJVFNUQVQJCQkvKiBcdihwZXhpdHN0YXQpIHZh cmlhYmxlIGRlZmluZWQgKi8KKyNpZmRlZiBPUzJPUlVOSVgKKyNkZWZpbmUgUEVYSVRTVEFUCisj ZWxzZQorI2lmZGVmIFZNUworI2RlZmluZSBQRVhJVFNUQVQKKyNlbmRpZiAvKiBWTVMgKi8KKyNl bmRpZiAvKiBPUzJPUlVOSVggKi8KKyNlbmRpZiAvKiBQRVhJVFNUQVQgKi8KKworLyogVGhlIGZv bGxvd2luZyBhbGxvd3MgYXV0b21hdGljIGVuYWJsaW5nIG9mIFJFRElSRUNUIHRvIGJlIG92ZXJy aWRkZW4uLi4gKi8KKworI2lmZGVmIE5PUkVESVJFQ1QKKyNpZmRlZiBORVRDTUQKKyN1bmRlZiBO RVRDTUQKKyNlbmRpZiAvKiBORVRDTUQgKi8KKyNpZmRlZiBORVRQVFkKKyN1bmRlZiBORVRQVFkK KyNlbmRpZiAvKiBORVRQVFkgKi8KKyNpZmRlZiBDS19SRURJUgorI3VuZGVmIENLX1JFRElSCisj ZW5kaWYgLyogQ0tfUkVESVIgKi8KKyNlbmRpZiAvKiBOT1JFRElSRUNUICovCisKKyNpZmRlZiBO T05FVENNRAorI2lmZGVmIE5FVENNRAorI3VuZGVmIE5FVENNRAorI2VuZGlmIC8qIE5FVENNRCAq LworI2lmZGVmIE5FVFBUWQorI3VuZGVmIE5FVFBUWQorI2VuZGlmIC8qIE5FVFBUWSAqLworI2Vu ZGlmIC8qIE5PTkVUQ01EICovCisKKyNpZmRlZiBDS19SRURJUgorX1BST1RPVFlQKCBpbnQgdHRy dW5jbWQsIChjaGFyICopICk7CisjZW5kaWYgLyogQ0tfUkVESVIgKi8KKworLyogVXNlIGJ1aWx0 LWluIERJUkVDVE9SWSBjb21tYW5kICovCisKKyNpZm5kZWYgTk9NWURJUgorI2lmbmRlZiBET01Z RElSCisjaWZkZWYgVU5JWE9ST1NLCisjZGVmaW5lIERPTVlESVIKKyNlbHNlCisjaWZkZWYgT1My CisjZGVmaW5lIERPTVlESVIKKyNlbHNlCisjaWZkZWYgVk1TCisjZGVmaW5lIERPTVlESVIKKyNl bmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBVTklYT1JPU0sgKi8K KyNlbmRpZiAvKiBET01ZRElSICovCisjZW5kaWYgLyogTk9NWURJUiAqLworCisvKiBTZW5kaW5n IGZyb20gYW5kIHJlY2VpdmluZyB0byBjb21tYW5kcy9waXBlcyAqLworCisjaWZuZGVmIFBJUEVT RU5ECisjaWZkZWYgVU5JWAorI2RlZmluZSBQSVBFU0VORAorI2VuZGlmIC8qIFVOSVggKi8KKyNp ZmRlZiBPUzIKKyNkZWZpbmUgUElQRVNFTkQKKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBQ SVBFU0VORCAqLworCisjaWZkZWYgUElQRVNFTkQKKyNpZmRlZiBOT1BJUEVTRU5ECisjdW5kZWYg UElQRVNFTkQKKyNlbmRpZiAvKiBOT1BJUEVTRU5EICovCisjaWZkZWYgTk9QVVNICisjdW5kZWYg UElQRVNFTkQKKyNlbmRpZiAvKiBOT1BVU0ggKi8KKyNlbmRpZiAvKiBQSVBFU0VORCAqLworCisj aWZkZWYgTk9QVVNICisjaWZkZWYgQlJPV1NFUgorI3VuZGVmIEJST1dTRVIKKyNlbmRpZiAvKiBC Uk9XU0VSICovCisjZW5kaWYgLyogTk9QVVNIICovCisKKy8qIFZlcnNpb25zIHdoZXJlIHdlIHN1 cHBvcnQgdGhlIFJFU0VORCBjb21tYW5kICovCisKKyNpZm5kZWYgTk9YRkVSCisjaWZuZGVmIE5P UkVTRU5ECisjaWZuZGVmIENLX1JFU0VORAorI2lmZGVmIFVOSVgKKyNpZm5kZWYgcGRwMTEKKyNk ZWZpbmUgQ0tfUkVTRU5ECisjZW5kaWYgLyogcGRwMTEgKi8KKyNlbmRpZiAvKiBVTklYICovCisK KyNpZmRlZiBWTVMKKyNkZWZpbmUgQ0tfUkVTRU5ECisjZW5kaWYgLyogVk1TICovCisKKyNpZmRl ZiBPUzIKKyNkZWZpbmUgQ0tfUkVTRU5ECisjZW5kaWYgLyogT1MyICovCisKKyNpZmRlZiBBTUlH QQorI2RlZmluZSBDS19SRVNFTkQKKyNlbmRpZiAvKiBBTUlHQSAqLworCisjaWZkZWYgZGF0YWdl bmVyYWwKKyNkZWZpbmUgQ0tfUkVTRU5ECisjZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KKworI2lm ZGVmIFNUUkFUVVMKKyNkZWZpbmUgQ0tfUkVTRU5ECisjZW5kaWYgLyogU1RSQVRVUyAqLworCisj aWZkZWYgT1NLCisjZGVmaW5lIENLX1JFU0VORAorI2VuZGlmIC8qIE9TSyAqLworCisjZW5kaWYg LyogQ0tfUkVTRU5EICovCisjZW5kaWYgLyogTk9SRVNFTkQgKi8KKyNlbmRpZiAvKiBOT1hGRVIg Ki8KKworLyogU3lzdGVtcyBpbXBsZW1lbnRpbmcgIkRvb21zZGF5IEtlcm1pdCIgcHJvdG9jb2wg Li4uICovCisKKyNpZm5kZWYgRE9PTVNEQVkKKyNpZmRlZiBVTklYCisjZGVmaW5lIERPT01TREFZ CisjZWxzZQorI2lmZGVmIFZNUworI2RlZmluZSBET09NU0RBWQorI2Vsc2UKKyNpZmRlZiBPUzIK KyNkZWZpbmUgRE9PTVNEQVkKKyNlbHNlCisjaWZkZWYgU1RSQVRVUworI2RlZmluZSBET09NU0RB WQorI2VuZGlmIC8qIFNUUkFUVVMgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBWTVMg Ki8KKyNlbmRpZiAvKiBVTklYICovCisjZW5kaWYgLyogRE9PTVNEQVkgKi8KKworLyogU3lzdGVt cyB3aGVyZSB3ZSB3YW50IHRoZSBUaGVybW9tZXRlciB0byBiZSB1c2VkIGZvciBmdWxsc2NyZWVu ICovCisKKyNpZmRlZiBPUzIKKyNpZm5kZWYgQ0tfUENUX0JBUgorI2RlZmluZSBDS19QQ1RfQkFS CisjZW5kaWYgLyogQ0tfUENUX0JBUiAqLworI2VuZGlmIC8qIE9TMiAqLworCisvKiBTeXN0ZW1z IHdoZXJlIHdlIGhhdmUgYSBSRVhYIGNvbW1hbmQgKi8KKworI2lmZGVmIE9TMgorI2lmZGVmIF9f MzJCSVRfXworI2lmbmRlZiBOT1JFWFgKKyNkZWZpbmUgQ0tfUkVYWAorI2VuZGlmIC8qIE5PUkVY WCAqLworI2VuZGlmIC8qIF9fMzJCSVRfXyAqLworI2VuZGlmIC8qIE9TMiAqLworCisvKiBQbGF0 Zm9ybXMgdGhhdCBoYXZlIGEgWkNIS1BJRCBmdW5jdGlvbiAqLworCisjaWZkZWYgT1MyT1JVTklY CisjZGVmaW5lIFpDSEtQSUQKKyNlbmRpZiAvKiBPUzJPUlVOSVggKi8KKworI2lmbmRlZiBaQ0hL UElECisvKiBJZiB3ZSBjYW4ndCBjaGVjayBwaWRzIHRoZW4gd2UgaGF2ZSB0cmVhdCBhbGwgcGlk cyBhcyBhY3RpdmUgJiB2YWxpZC4gKi8KKyNkZWZpbmUgemNoa3BpZCh4KSAxCisjZW5kaWYgLyog WkNIS1BJRCAqLworCisvKiBTeXN0ZW1zIHRoYXQgaGF2ZSBhIFpSRU5BTUUgZnVuY3Rpb24gKi8K KworI2RlZmluZSBaUkVOQU1FCQkJCS8qIFRoZXkgYWxsIGRvICovCisKKy8qIFN5c3RlbXMgdGhh dCBoYXZlIGEgWkNPUFkgZnVuY3Rpb24gKi8KKworI2lmbmRlZiBaQ09QWQorI2lmZGVmIFZNUwor I2RlZmluZSBaQ09QWQorI2Vsc2UKKyNpZmRlZiBPUzIKKyNkZWZpbmUgWkNPUFkKKyNlbHNlCisj aWZkZWYgVU5JWAorI2RlZmluZSBaQ09QWQorI2Vsc2UKKyNpZmRlZiBTVFJBVFVTCisjZGVmaW5l IFpDT1BZCisjZW5kaWYgLyogU1RSQVRVUyAqLworI2VuZGlmIC8qIFVOSVggKi8KKyNlbmRpZiAv KiBPUzIgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBaQ09QWSAqLworCisvKiBTeXN0 ZW1zIHRoYXQgaGF2ZSB0dGd3c2l6KCkgKHRoZXkgYWxsIHNob3VsZCBidXQgdGhleSBkb24ndCkg Ki8KKworI2lmbmRlZiBOT1RUR1dTSVoKKyNpZm5kZWYgQ0tfVFRHV1NJWgorI2lmZGVmIFVOSVgK KyNkZWZpbmUgQ0tfVFRHV1NJWgorI2Vsc2UKKyNpZmRlZiBWTVMKKyNkZWZpbmUgQ0tfVFRHV1NJ WgorI2Vsc2UKKyNpZmRlZiBPUzIKKyNkZWZpbmUgQ0tfVFRHV1NJWgorI2Vsc2UKKyNpZmRlZiBP U0sKKyNkZWZpbmUgQ0tfVFRHV1NJWgorI2VuZGlmIC8qIE9TSyAqLworI2VuZGlmIC8qIE9TMiAq LworI2VuZGlmIC8qIFZNUyAqLworI2VuZGlmIC8qIFVOSVggKi8KKyNlbmRpZiAvKiBDS19UVEdX U0laICovCisjZW5kaWYgLyogTk9UVEdXU0laICovCisKKyNpZmRlZiBOT1RUR1dTSVoKKyNpZmRl ZiBDS19UVEdXU0laCisjdW5kZWYgQ0tfVFRHV1NJWgorI2VuZGlmIC8qIENLX1RUR1dTSVogKi8K KyNlbmRpZiAvKiBOT1RUR1dTSVogKi8KKworI2lmZGVmIE9TMgorLyogT1MvMiBDLUtlcm1pdCBm ZWF0dXJlcyBub3QgYXZhaWxhYmxlIGluIDE2LWJpdCB2ZXJzaW9uLi4uICovCisKKyNpZmRlZiBP UzJPTkxZCisjaWZuZGVmIF9fMzJCSVRfXworI2lmbmRlZiBOT0xPQ0FMCisjaWZkZWYgUENGT05U UwkJCQkvKiBQQyBGb250IHN1cHBvcnQgKi8KKyN1bmRlZiBQQ0ZPTlRTCisjZW5kaWYgLyogUENG T05UUyAqLworI2lmZGVmIE5QSVBFCQkJCS8qIE5hbWVkIFBpcGVzIGNvbW11bmljYXRpb24gKi8K KyN1bmRlZiBOUElQRQorI2VuZGlmIC8qIE5QSVBFICovCisjaWZkZWYgQ0tfTkVUQklPUwkJCS8q IE5FVEJJT1MgY29tbXVuaWNhdGlvbiAqLworI3VuZGVmIENLX05FVEJJT1MKKyNlbmRpZiAvKiBD S19ORVRCSU9TICovCisjaWZkZWYgT1MyTU9VU0UJCQkJLyogTW91c2UgKi8KKyN1bmRlZiBPUzJN T1VTRQorI2VuZGlmIC8qIE9TMk1PVVNFICovCisjaWZkZWYgT1MyUE0JCQkJLyogUHJlc2VudGF0 aW9uIE1hbmFnZXIgKi8KKyN1bmRlZiBPUzJQTQorI2VuZGlmIC8qIE9TMlBNICovCisjZW5kaWYg LyogTk9MT0NBTCAqLworI2lmZGVmIENLX1JFWFgJCQkJLyogUmV4eCAqLworI3VuZGVmIENLX1JF WFgKKyNlbmRpZiAvKiBDS19SRVhYICovCisjZW5kaWYgLyogX18zMkJJVF9fICovCisjZW5kaWYg LyogT1MyT05MWSAqLworCisvKiBPUy8yIEMtS2VybWl0IGZlYXR1cmVzIG5vdCBhdmFpbGFibGUg aW4gV2luZG93cyBOVCB2ZXJzaW9uLi4uICovCisKKyNpZmRlZiBOVAorI2lmZGVmIFBDRk9OVFMJ CQkJLyogUEMgRm9udCBzdXBwb3J0ICovCisjdW5kZWYgUENGT05UUworI2VuZGlmIC8qIFBDRk9O VFMgKi8KKyNpZmRlZiBPUzJQTQkJCQkvKiBQcmVzZW50YXRpb24gTWFuYWdlciAqLworI3VuZGVm IE9TMlBNCisjZW5kaWYgLyogT1MyUE0gKi8KKyNpZmRlZiBDS19SRVhYCQkJCS8qIFJleHggKi8K KyN1bmRlZiBDS19SRVhYCisjZW5kaWYgLyogQ0tfUkVYWCAqLworI2VuZGlmIC8qIE5UICovCisj ZW5kaWYgLyogT1MyICovCisKKy8qCisgIFN5c3RlbXMgdGhhdCBoYXZlIHNlbGVjdCgpLgorICBU aGlzIGlzIHVzZWQgZm9yIGJvdGggbXNsZWVwKCkgYW5kIGZvciByZWFkLWJ1ZmZlciBjaGVja2lu ZyBpbiBpbl9jaGsoKS4KKyovCisjZGVmaW5lIENLX1NMRUVQSU5UIDI1MCAvKiBtaWxsaXNlY29u ZHMgLSBzZXQgdGhpcyB0byBzb21ldGhpbmcgdGhhdAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgZGl2aWRlcyBldmVubHkgaW50byAxMDAwICovCisjaWZuZGVmIFNFTEVDVAorI2lmbmRlZiBO T1NFTEVDVAorI2lmZGVmIF9fbGludXhfXworI2RlZmluZSBTRUxFQ1QKKyNlbHNlCisjaWZkZWYg U1VOT1M0CisjZGVmaW5lIFNFTEVDVAorI2Vsc2UKKyNpZmRlZiBORVhUCisjZGVmaW5lIFNFTEVD VAorI2Vsc2UKKyNpZmRlZiBSVEFJWAorI2RlZmluZSBTRUxFQ1QKKyNlbHNlCisjaWZkZWYgSFBV WAorLyoKKyAgTm90IHJlYWxseS4gIEkgdGhpbmsgaXQncyBvbmx5IGluIEhQLVVYIDcuMCBhbmQg bGF0ZXIsIGV4Y2VwdCBpdCdzIGFsc28KKyAgaW4gZWFybGllciB2ZXJzaW9ucyB0aGF0IGhhdmUg VENQL0lQIGluc3RhbGxlZC4gIE92ZXJyaWRlIHRoaXMgZGVmYXVsdAorICBpbiBwYXJ0aWN1bGFy IEhQLVVYIG1ha2VmaWxlIGVudHJpZXMgYnkgYWRkaW5nIC1ETk9TRUxFQ1QsIGFzIGluIChlLmcu KQorICB0aGUgSFAtVVggNi41IG9uZXMuCisqLworI2RlZmluZSBTRUxFQ1QKKyNlbHNlCisjaWZk ZWYgQUlYUlMKKyNkZWZpbmUgU0VMRUNUCisjZWxzZQorI2lmZGVmIEJTRDQ0CisjZGVmaW5lIFNF TEVDVAorI2Vsc2UKKyNpZmRlZiBCU0Q0CisjZGVmaW5lIFNFTEVDVAorI2Vsc2UKKyNpZmRlZiBP WE9TCisjZGVmaW5lIFNFTEVDVAorI2Vsc2UKKyNpZmRlZiBPUzIKKyNkZWZpbmUgU0VMRUNUCisj ZWxzZQorI2lmZGVmIEJFQk9YCisjZGVmaW5lIFNFTEVDVAorI2VuZGlmIC8qIEJFQk9YICovCisj ZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogT1hPUyAqLworI2VuZGlmIC8qIEJTRDQgKi8KKyNl bmRpZiAvKiBCU0Q0NCAqLworI2VuZGlmIC8qIEFJWFJTICovCisjZW5kaWYgLyogSFBVWCAqLwor I2VuZGlmIC8qIFJUQUlYICovCisjZW5kaWYgLyogTkVYVCAqLworI2VuZGlmIC8qIF9fbGludXhf XyAqLworI2VuZGlmIC8qIFNVTk9TNCAqLworI2VuZGlmIC8qIE5PU0VMRUNUICovCisjZW5kaWYg LyogU0VMRUNUICovCisKKy8qCisgIFRoZSBmb2xsb3dpbmcgc2VjdGlvbiBtb3ZlZCBoZXJlIGZy b20gY2tjbmV0LmggaW4gNi4xIGJlY2F1c2Ugc2VsZWN0KCkKKyAgaXMgbm93IHVzZWQgZm9yIG5v bi1uZXR3b3JraW5nIHB1cnBvc2VzLgorKi8KKworLyogT24gSFAtOTAwMC81MDAgSFAtVVggNS4y MSB0aGlzIHN0dWZmIGlzIG5vdCBkZWZpbmVkIGluIGFueSBoZWFkZXIgZmlsZSAqLworCisjaWZk ZWYgaHA5MDAwczUwMAorI2lmbmRlZiBORUVEU0VMRUNUREVGUworI2RlZmluZSBORUVEU0VMRUNU REVGUworI2VuZGlmIC8qIE5FRURTRUxFQ1RERUZTICovCisjZW5kaWYgLyogaHA5MDAwczUwMCAq LworCisjaWZkZWYgTkVFRFNFTEVDVERFRlMKK3R5cGVkZWYgbG9uZyBmZF9tYXNrOworI2lmbmRl ZiBOQkJZCisjZGVmaW5lIE5CQlkgOAorI2VuZGlmIC8qIE5CQlkgKi8KKyNpZm5kZWYgRkRfU0VU U0laRQorI2RlZmluZSBGRF9TRVRTSVpFIDMyCisjZW5kaWYgLyogRkRfU0VUU0laRSAqLworI2lm bmRlZiBORkRCSVRTCisjZGVmaW5lIE5GREJJVFMgKHNpemVvZihmZF9tYXNrKSAqIE5CQlkpCisj ZW5kaWYgLyogTkZEQklUUyAqLworI2lmbmRlZiBob3dtYW55CisjZGVmaW5lIGhvd21hbnkoeCx5 KSAoKCh4KSsoKHkpLTEpKS8oeSkpCisjZW5kaWYgLyogaG93bWFueSAqLwordHlwZWRlZiBzdHJ1 Y3QgZmRfc2V0IHsKKyAgICBmZF9tYXNrIGZkc19iaXRzW2hvd21hbnkoRkRfU0VUU0laRSwgTkZE QklUUyldOworfSBmZF9zZXQ7CisjaWZuZGVmIEZEX1NFVAorI2RlZmluZSBGRF9TRVQobixwKSAo KHApLT5mZHNfYml0c1sobikvTkZEQklUU10gfD0gKDEgPDwgKChuKSAlIE5GREJJVFMpKSkKKyNl bmRpZiAvKiBGRF9TRVQgKi8KKyNpZm5kZWYgRkRfQ0xSCisjZGVmaW5lIEZEX0NMUihuLHApICgo cCktPmZkc19iaXRzWyhuKS9ORkRCSVRTXSAmPSB+KDEgPDwgKChuKSAlIE5GREJJVFMpKSkKKyNl bmRpZiAvKiBGRF9DTFIgKi8KKyNpZm5kZWYgRkRfSVNTRVQKKyNkZWZpbmUgRkRfSVNTRVQobixw KSAoKHApLT5mZHNfYml0c1sobikvTkZEQklUU10gJiAoMSA8PCAoKG4pICUgTkZEQklUUykpKQor I2VuZGlmIC8qIEZEX0lTU0VUICovCisjaWZuZGVmIEZEX0NPUFkKKyNkZWZpbmUgRkRfQ09QWShm LHQpIChiY29weShmLHQsc2l6ZW9mKCooZikpKQorI2VuZGlmIC8qIEZEX0NPUFkgKi8KKyNpZm5k ZWYgRkRfWkVSTworI2RlZmluZSBGRF9aRVJPKHApIGJ6ZXJvKChjaGFyICopKHApLHNpemVvZigq KHApKSkKKyNlbmRpZiAvKiBGRF9aRVJPICovCisjZW5kaWYgLyogTkVFRFNFTEVDVERFRlMgKi8K KworLyoKKyAgQ0tfTkVFRF9TSUcgaXMgZGVmaW5lZCBpZiB0aGUgc3lzdGVtIGNhbm5vdCBjaGVj ayB0aGUgY29uc29sZSB0bworICB0byBzZWUgaWYgY2hhcmFjdGVycyBhcmUgd2FpdGluZy4gIFRo aXMgaXMgdXNlZCBkdXJpbmcgbG9jYWwtbW9kZSBmaWxlCisgIHRyYW5zZmVyIHRvIGludGVycnVw dCB0aGUgdHJhbnNmZXIsIHJlZnJlc2ggdGhlIHNjcmVlbiBkaXNwbGF5LCBldGMuCisgIElmIENL X05FRURfU0lHIGlzIGRlZmluZWQsIHRoZW4gZmlsZS10cmFuc2ZlciBpbnRlcnJ1cHRpb24gY2hh cmFjdGVycworICBoYXZlIHRvIGJlIHByZWNlZGVkIGEgc3BlY2lhbCBjaGFyYWN0ZXIsIGUuZy4g dGhlIFNJR1FVSVQgY2hhcmFjdGVyLgorICBDS19ORUVEX1NJRyBzaG91bGQgYmUgZGVmaW5lZCBp ZiB0aGUgY29uY2hrKCkgZnVuY3Rpb24gaXMgbm90IG9wZXJhdGlvbmFsLgorKi8KKyNpZmRlZiBO T1BPTEwJCQkJLyogRm9yIG92ZXJyaWRpbmcgQ0tfUE9MTCBkZWZpbml0aW9uICovCisjaWZkZWYg Q0tfUE9MTAorI3VuZGVmIENLX1BPTEwKKyNlbmRpZiAvKiBDS19QT0xMICovCisjZW5kaWYgLyog Tk9QT0xMICovCisKKyNpZm5kZWYgQ0tfUE9MTAkJCQkvKiBJZiB3ZSBkb24ndCBoYXZlIHBvbGwo KSAqLworI2lmbmRlZiBSRENISwkJCQkvKiBBbmQgd2UgZG9uJ3QgaGF2ZSByZGNoaygpICovCisj aWZuZGVmIFNFTEVDVAkJCQkvKiBBbmQgd2UgZG9uJ3QgaGF2ZSBzZWxlY3QoKSAqLworI2lmZGVm IEFUVFNWCisjaWZuZGVmIGFlZ2lzCisjaWZuZGVmIGRhdGFnZW5lcmFsCisjaWZuZGVmIE9YT1MK KyNkZWZpbmUgQ0tfTkVFRF9TSUcKKyNlbmRpZiAvKiBPWE9TICovCisjZW5kaWYgLyogZGF0YWdl bmVyYWwgKi8KKyNlbmRpZiAvKiBhZWdpcyAqLworI2VuZGlmIC8qIEFUVFNWICovCisjaWZkZWYg UE9TSVgKKyNpZm5kZWYgQ0tfTkVFRF9TSUcKKyNkZWZpbmUgQ0tfTkVFRF9TSUcKKyNlbmRpZiAv KiBDS19ORUVEX1NJRyAqLworI2VuZGlmIC8qIFBPU0lYICovCisjZW5kaWYgLyogU0VMRUNUICov CisjZW5kaWYgLyogUkRDSEsgKi8KKyNlbmRpZiAvKiBDS19QT0xMICovCisKKyNpZmRlZiBIUFVY CQkJCS8qIEhQLVVYIGhhcyBzZWxlY3QoKSAqLworI2lmZGVmIENLX05FRURfU0lHCisjdW5kZWYg Q0tfTkVFRF9TSUcKKyNlbmRpZiAvKiBDS19ORUVEX1NJRyAqLworI2VuZGlmIC8qIEhQVVggKi8K KworI2lmZGVmIEFJWFJTCQkJCS8qIEFJWCBoYXMgc2VsZWN0KCkgKi8KKyNpZmRlZiBDS19ORUVE X1NJRworI3VuZGVmIENLX05FRURfU0lHCisjZW5kaWYgLyogQ0tfTkVFRF9TSUcgKi8KKyNlbmRp ZiAvKiBBSVhSUyAqLworCisjaWZkZWYgQlNENDQJCQkJLyogNC40QlNEIGhhcyBGSU9OUkVBRCAq LworI2lmZGVmIENLX05FRURfU0lHCisjdW5kZWYgQ0tfTkVFRF9TSUcKKyNlbmRpZiAvKiBDS19O RUVEX1NJRyAqLworI2VuZGlmIC8qIEJTRDQ0ICovCisKKyNpZmRlZiBRTlgJCQkJLyogUU5YIGhh cyBGSU9OUkVBRCBhbmQgc2VsZWN0KCkgKi8KKyNpZmRlZiBDS19ORUVEX1NJRworI3VuZGVmIENL X05FRURfU0lHCisjZW5kaWYgLyogQ0tfTkVFRF9TSUcgKi8KKyNlbmRpZiAvKiBRTlggKi8KKwor I2lmZGVmIENPSEVSRU5UCisjaWZuZGVmIE5PVElNRVpPTkUKKyNkZWZpbmUgTk9USU1FWk9ORQor I2VuZGlmIC8qIE5PVElNRVpPTkUgKi8KKyNlbmRpZiAvKiBDT0hFUkVOVCAqLworCisjaWZkZWYg VU5JWAorI2lmbmRlZiBIQVZFX1RaCQkJCS8qIENhbiB3ZSB1c2Ugc3RydWN0IHRpbWV6b25lPyAq LworI2lmbmRlZiBOT1RJTUVaT05FCisjaWZkZWYgUFRYCisjZGVmaW5lIE5PVElNRVpPTkUKKyNl bHNlCisjaWZuZGVmIFNFTEVDVAorI2lmZGVmIENPSEVSRU5UCisjZGVmaW5lIE5PVElNRVpPTkUK KyNlbHNlCisjaWZkZWYgQkVMTFYxMAorI2RlZmluZSBOT1RJTUVaT05FCisjZW5kaWYgLyogQkVM TFYxMCAqLworI2VuZGlmIC8qIENPSEVSRU5UICovCisjZW5kaWYgLyogU0VMRUNUICovCisjZW5k aWYgLyogUFRYICovCisjZW5kaWYgLyogTk9USU1FWk9ORSAqLworI2VuZGlmIC8qIEhBVkVfVFog Ki8KKyNpZm5kZWYgTk9USU1FVkFMCQkJLyogQ2FuIHdlIHVzZSBzdHJ1Y3QgdGltZXZhbD8gKi8K KyNpZm5kZWYgSEFWRV9UVgorI2RlZmluZSBIQVZFX1RWCisjZW5kaWYgLyogSEFWRV9UViAqLwor I2VuZGlmIC8qIE5PVElNRVZBTCAqLworI2lmbmRlZiBOT1RJTUVaT05FCisjaWZuZGVmIEhBVkVf VFoKKyNkZWZpbmUgSEFWRV9UWgorI2VuZGlmIC8qIEhBVkVfVFogKi8KKyNlbmRpZiAvKiBOT1RJ TUVaT05FICovCisjZW5kaWYgLyogVU5JWCAqLworCisjaWZkZWYgU0NPMzIKKyNpZmRlZiBIQVZF X1RWCisjdW5kZWYgSEFWRV9UVgorI2VuZGlmIC8qIEhBVkVfVFYgKi8KKyNpZmRlZiBIQVZFX1Ra CisjdW5kZWYgSEFWRV9UWgorI2VuZGlmIC8qIEhBVkVfVFogKi8KKyNpZm5kZWYgTk9USU1FVkFM CisjZGVmaW5lIE5PVElNRVZBTAorI2VuZGlmIC8qIE5PVElNRVZBTCAqLworI2lmbmRlZiBOT1RJ TUVaT05FCisjZGVmaW5lIE5PVElNRVpPTkUKKyNlbmRpZiAvKiBOT1RJTUVaT05FICovCisjZW5k aWYgLyogU0NPMzIgKi8KKworI2lmZGVmIEFUVDczMDAKKyNpZmRlZiBIQVZFX1RWCisjdW5kZWYg SEFWRV9UVgorI2VuZGlmIC8qIEhBVkVfVFYgKi8KKyNpZmRlZiBIQVZFX1RaCisjdW5kZWYgSEFW RV9UWgorI2VuZGlmIC8qIEhBVkVfVFogKi8KKyNpZm5kZWYgTk9USU1FVkFMCisjZGVmaW5lIE5P VElNRVZBTAorI2VuZGlmIC8qIE5PVElNRVZBTCAqLworI2lmbmRlZiBOT1RJTUVaT05FCisjZGVm aW5lIE5PVElNRVpPTkUKKyNlbmRpZiAvKiBOT1RJTUVaT05FICovCisjZW5kaWYgLyogQVRUNzMw MCAqLworCisvKgorICBBdXRvbWF0aWMgcGFyaXR5IGRldGVjdGlvbi4KKyAgVGhpcyBhY3R1YWxs eSBpbXBsaWVzIGEgbG90IG1vcmUgbm93OiBsZW5ndGgtZHJpdmVuIHBhY2tldCByZWFkaW5nLAor ICAiRG9vbXNkYXkgS2VybWl0IiBJQk0gTWFpbmZyYW1lIGZpbGUgdHJhbnNmZXIgdGhyb3VnaCAz MjcwIGRhdGEgc3RyZWFtcywgZXRjLgorKi8KKyNpZmRlZiBVTklYCQkJCS8qIEZvciBVbml4ICov CisjaWZuZGVmIE5PUEFSU0VOCisjZGVmaW5lIFBBUlNFTlNFCisjZW5kaWYgLyogTk9QQVJTRU4g Ki8KKyNlbmRpZiAvKiBVTklYICovCisKKyNpZmRlZiBWTVMJCQkJLyogLi4uIGFuZCBWTVMgKi8K KyNpZm5kZWYgTk9QQVJTRU4KKyNkZWZpbmUgUEFSU0VOU0UKKyNlbmRpZiAvKiBOT1BBUlNFTiAq LworI2lmZGVmIF9fR05VQ19fCisjZGVmaW5lIFZNU0dDQworI2VuZGlmIC8qIF9fR05VQ19fICov CisjZW5kaWYgLyogVk1TICovCisKKyNpZmRlZiBNQUMJCQkJLyogYW5kIE1hY2ludG9zaCAqLwor I2lmbmRlZiBOT1BBUlNFTgorI2RlZmluZSBQQVJTRU5TRQorI2VuZGlmIC8qIE5PUEFSU0VOICov CisjZW5kaWYgLyogTUFDICovCisKKyNpZmRlZiBTVFJBVFVTCQkJCS8qIGFuZCBTdHJhdHVzIFZP UyAqLworI2lmbmRlZiBOT1BBUlNFTgorI2RlZmluZSBQQVJTRU5TRQorI2VuZGlmIC8qIE5PUEFS U0VOICovCisjZW5kaWYgLyogU1RSQVRVUyAqLworCisjaWZkZWYgT1MyCQkJCS8qIGFuZCBPUy8y LCBmaW5hbGx5ICovCisjaWZuZGVmIE5PUEFSU0VOCisjZGVmaW5lIFBBUlNFTlNFCisjZW5kaWYg LyogTk9QQVJTRU4gKi8KKyNlbmRpZiAvKiBPUzIgKi8KKworI2lmbmRlZiBOT0RZTkFNSUMJCQkv KiBEWU5BTUlDIGlzIGRlZmF1bHQgZm9yIFVOSVggKi8KKyNpZm5kZWYgRFlOQU1JQwkJCQkvKiBh cyBvZiBDLUtlcm1pdCA3LjAgKi8KKyNpZmRlZiBVTklYCisjZGVmaW5lIERZTkFNSUMKKyNlbmRp ZiAvKiBVTklYICovCisjZW5kaWYgLyogRFlOQU1JQyAqLworI2VuZGlmIC8qIE5PRFlOQU1JQyAq LworCisjaWZkZWYgRFlOQU1JQwkJCQkvKiBJZiBEWU5BTUlDIGlzIGRlZmluZWQgKi8KKyNkZWZp bmUgRENNREJVRgkJCQkvKiB0aGVuIGFsc28gZGVmaW5lIHRoaXMuICovCisjZW5kaWYgLyogRFlO QU1JQyAqLworCisjaWZuZGVmIENLX0xCUksJCQkJLyogQ2FuIHNlbmQgTG9uZyBCUkVBSyAqLwor CisjaWZkZWYgVU5JWAkJCQkvKiAoZXZlcnlib2R5IGJ1dCBPUy05KSAqLworI2RlZmluZSBDS19M QlJLCisjZW5kaWYgLyogVU5JWCAqLworI2lmZGVmIFZNUworI2RlZmluZSBDS19MQlJLCisjZW5k aWYgLyogVk1TICovCisjaWZkZWYgZGF0YWdlbmVyYWwKKyNkZWZpbmUgQ0tfTEJSSworI2VuZGlm IC8qIGRhdGFnZW5lcmFsICovCisjaWZkZWYgR0VNRE9TCisjZGVmaW5lIENLX0xCUksKKyNlbmRp ZiAvKiBHRU1ET1MgKi8KKyNpZmRlZiBPUzIKKyNkZWZpbmUgQ0tfTEJSSworI2VuZGlmIC8qIE9T MiAqLworI2lmZGVmIEFNSUdBCisjZGVmaW5lIENLX0xCUksKKyNlbmRpZiAvKiBBTUlHQSAqLwor I2lmZGVmIFNUUkFUVVMKKyNkZWZpbmUgQ0tfTEJSSworI2VuZGlmIC8qIFNUUkFUVVMgKi8KKwor I2VuZGlmIC8qIENLX0xCUksgKi8KKworLyogQ2FycmllciB0cmVhdG1lbnQgKi8KKy8qIFRoZXNl IGFyZSBkZWZpbmVkIGhlcmUgYmVjYXVzZSB0aGV5IGFyZSBzaGFyZWQgYnkgdGhlIHN5c3RlbSBk ZXBlbmRlbnQgKi8KKy8qIGFuZCB0aGUgc3lzdGVtIGluZGVwZW5kZW50IG1vZHVsZXMuICovCisK KyNkZWZpbmUgIENBUl9PRkYgMAkvKiBPZmY6IGlnbm9yZSBjYXJyaWVyIGFsd2F5cy4gKi8KKyNk ZWZpbmUgIENBUl9PTiAgMSAgICAgIC8qIE9uOiBoZWVkIGNhcnJpZXIgYWx3YXlzLCBleGNlcHQg ZHVyaW5nIERJQUwuICovCisjZGVmaW5lICBDQVJfQVVUIDIgICAgICAvKiBBdXRvOiBoZWVkIGNh cnJpZXIsIGJ1dCBvbmx5IGlmIGxpbmUgaXMgZGVjbGFyZWQgKi8KKwkJCS8qIHRvIGJlIGEgbW9k ZW0gbGluZSwgYW5kIG9ubHkgZHVyaW5nIENPTk5FQ1QuICovCisKKy8qIEFuZCBtb3JlIGdlbmVy aWNhbGx5IChmb3IgdXNlIHdpdGggYW55IE9OL09GRi9BVVRPIGZlYXR1cmUpICovCisjZGVmaW5l ICBDS19PRkYgIDAKKyNkZWZpbmUgIENLX09OICAgMQorI2RlZmluZSAgQ0tfQVVUTyAyCisKKyNp Zm5kZWYgTk9MT0NBTAorLyoKKyAgU2VyaWFsIGludGVyZmFjZSBzcGVlZHMgYXZhaWxhYmxlLgor CisgIEFzIG9mIEMtS2VybWl0IDYuMSB0aGVyZSBpcyBhIG5ldyBtZXRob2QgdG8gZ2V0IHRoZSBz dXBwb3J0ZWQKKyAgc3BlZWRzLCB3aGljaCBvYnZpYXRlcyB0aGUgbmVlZCBmb3IgYWxsIHRoZSBj cmF6aW5lc3MgYmVsb3cuICBBdCBydW50aW1lLAorICBqdXN0IGNhbGwgdGhlIG5ldyB0dHNwZGxp c3QoKSByb3V0aW5lIHRvIGdldCBhIGxpc3Qgb2Ygc3VwcG9ydGVkIHNwZWVkcy4KKyAgVGhlbiB0 aGUgdXNlciBpbnRlcmZhY2UgbW9kdWxlIGNhbiBidWlsZCBhIGtleXdvcmQgdGFibGUgb3IgbWVu dSBmcm9tIGl0LgorKi8KKyNpZm5kZWYgVFRTUERMSVNUCisjaWZkZWYgVU5JWAkJCQkvKiBGb3Ig bm93LCBvbmx5IGZvciBVTklYICovCisjaWZuZGVmIE9MSU5VWEhJU1BFRUQJCQkvKiBCdXQgbm90 IHN5c3RlbXMgd2l0aCBoYWNrcyBmb3IgKi8KKyNpZm5kZWYgTUlOSVgJCQkJLyogaGlnaCBzcGVl ZHMsIGxpa2UgMTEwID0gMTE1MjAwICovCisjZGVmaW5lIFRUU1BETElTVAorI2VuZGlmIC8qIE1J TklYICovCisjZW5kaWYgLyogT0xJTlVYSElTUEVFRCAqLworI2Vsc2UKKyNpZmRlZiBWTVMKKyNk ZWZpbmUgVFRTUERMSVNUCQkJLyogVk1TIGdldHMgaXQgdG9vICovCisjZW5kaWYgLyogVk1TICov CisjZW5kaWYgLyogVU5JWCAqLworI2VuZGlmIC8qIFRUU1BETElTVCAqLworCisjaWZuZGVmIE5P RElBTAkJCQkvKiBIYW5ndXAgYnkgbW9kZW0gY29tbWFuZCAqLworI2lmbmRlZiBOT01ETUhVUAor I2lmbmRlZiBNRE1IVVAKKyNkZWZpbmUgTURNSFVQCisjZW5kaWYgLyogTURNSFVQICovCisjZW5k aWYgLyogTk9NRE1IVVAgKi8KKyNlbmRpZiAvKiBOT0RJQUwgKi8KKworI2lmZGVmIE5PU1BMCisj aWZuZGVmIE5PTE9HRElBTAkJCS8qIENvbm5lY3Rpb24gbG9nIG5lZWRzIG1qZCgpLCBldGMuICov CisjZGVmaW5lIE5PTE9HRElBTAorI2VuZGlmIC8qIE5PTE9HRElBTCAqLworI2VuZGlmIC8qIE5P U1BMICovCisKKyNpZmRlZiBwZHAxMQorI2RlZmluZSBOT0xPR0RJQUwKKyNlbmRpZiAvKiBwZHAx MSAqLworCisjaWZuZGVmIE5PTE9HRElBTAkJCS8qIENvbm5lY3Rpb24gbG9nICovCisjaWZuZGVm IENYTE9HRklMRQorI2RlZmluZSBDWExPR0ZJTEUgIkNYLkxPRyIJCS8qIERlZmF1bHQgY29ubmVj dGlvbiBsb2cgZmlsZSBuYW1lICovCisjZW5kaWYgLyogQ1hMT0dGSUxFICovCisjaWZuZGVmIENL TE9HRElBTAorI2lmbmRlZiBDS19TTUFMTAorI2RlZmluZSBDS0xPR0RJQUwKKyNkZWZpbmUgQ1hM T0dCVUZMIDEwMjQJCQkvKiBDb25uZWN0aW9uIGxvZyByZWNvcmQgYnVmZmVyIHNpemUgKi8KKyNl bmRpZiAvKiBDS19TTUFMTCAqLworI2VuZGlmIC8qIE5PTE9HRElBTCAqLworI2VuZGlmIC8qIENL TE9HRElBTCAqLworCisjZW5kaWYgLyogTk9MT0NBTCAqLworCisjaWZkZWYgTk9UVFNQRExJU1QJ CQkvKiBFeGNlcHQgaWYgTk9UVFNQRExJU1QgaXMgZGVmaW5lZCAqLworI2lmZGVmIFRUU1BETElT VAorI3VuZGVmIFRUU1BETElTVAorI2VuZGlmIC8qIFRUU1BETElTVCAqLworI2VuZGlmIC8qIE5P VFRTUERMSVNUICovCisKKyNpZmRlZiBUVFNQRExJU1QKKworX1BST1RPVFlQKCBsb25nICogdHRz cGRsaXN0LCAodm9pZCkgKTsKKworI2Vsc2UgLyogVFRTUERMSVNUIG5vdCBkZWZpbmVkICovCisv KgorICBXZSBtdXN0IHVzZSBhIGxvbmcgYW5kIGNvbnZvbHV0ZWQgc2VyaWVzIG9mICNpZmRlZnMg dGhhdCBoYXZlIHRvIGJlIGtlcHQgaW4KKyAgc3luYyB3aXRoIHRoZSBjb2RlIGluIHRoZSBjaz90 aW8uYyBtb2R1bGUuCisKKyAgV2UgYXNzdW1lIHRoYXQgZXZlcnlib2R5IHN1cHBvcnRzOiAwLCAx MTAsIDMwMCwgNjAwLCAxMjAwLCAyNDAwLCA0ODAwLCBhbmQKKyAgOTYwMCBicHMuICBTeW1ib2xz IGZvciBvdGhlciBzcGVlZHMgYXJlIGRlZmluZWQgaGVyZS4gIFlvdSBjYW4gYWxzbyBhZGQKKyAg ZGVmaW5pdGlvbnMgb24gdGhlIENDIGNvbW1hbmQgbGluZXMuICBUaGVzZSBkZWZpbml0aW9ucyBh ZmZlY3QgdGhlIFNFVCBTUEVFRAorICBrZXl3b3JkIHRhYmxlLCBhbmQgYXJlIG5vdCBuZWNlc3Nh cmlseSB1c2FibGUgaW4gdGhlIHN5c3RlbS1kZXBlbmRlbnQKKyAgc3BlZWQtc2V0dGluZyBjb2Rl IGluIHRoZSBjaz90aW8uYyBtb2R1bGVzLCB3aGljaCBkZXBlbmRzIG9uIHN5c3RlbS1zcGVjaWZp YworICBzeW1ib2xzIGxpa2UgKGluIFVOSVgpIEIxOTIwMC4gIEluIG90aGVyIHdvcmRzLCBqdXN0 IGRlZmluaW5nIGl0IGRvZXNuJ3QKKyAgbWVhbiBpdCdsbCB3b3JrIC0tIHlvdSBhbHNvIGhhdmUg dG8gc3VwcGx5IHRoZSBzdXBwb3J0aW5nIGNvZGUgaW4gdHRzc3BkKCkKKyAgYW5kIHR0Z3NwZCgp IGluIGNrP3Rpby5jLgorCisgIFRoZSBzeW1ib2xzIGhhdmUgdGhlIGZvcm0gQlBTX3h4eHgsIHdo ZXJlIHh4eHggaXMgdGhlIHNwZWVkIGluIGJpdHMgcGVyCisgIHNlY29uZCwgb3IgKGZvciBicHMg dmFsdWVzIGxhcmdlciB0aGFuIDk5OTkpIHRob3VzYW5kcyBvZiBicHMgZm9sbG93ZWQgYnkgSy4K KyAgVGhlIHRvdGFsIHN5bWJvbCBsZW5ndGggc2hvdWxkIGJlIDggY2hhcmFjdGVycyBvciBsZXNz LiAgU29tZSB2YWx1ZXMgYXJlCisgIGVuYWJsZWQgYXV0b21hdGljYWxseSBiZWxvdy4gIFlvdSBj YW4gZGlzYWJsZSBhIHBhcnRpY3VsYXIgdmFsdWUgYnkgZGVmaW5pbmcKKyAgTk9CX3h4eHggb24g dGhlIENDIGNvbW1hbmQgbGluZS4KKworKi8KKworI2lmbmRlZiBOT0JfNTAKKyNkZWZpbmUgQlBT XzUwCQkJCS8qIDUwIGJwcyAqLworI2VuZGlmCisKKyNpZm5kZWYgTk9CXzc1CisjZGVmaW5lIEJQ U183NQkJCQkvKiA3NSBicHMgKi8KKyNlbmRpZgorCisjaWZuZGVmIE5PQjc1MTIKKyNpZmRlZiBB TllCU0QKKyNkZWZpbmUgQlBTXzc1MTIJCQkvKiA3NS8xMjAwIFNwbGl0IFNwZWVkICovCisjZW5k aWYgLyogQU5ZQlNEICovCisjZW5kaWYgLyogTk9CNzUxMiAqLworCisjaWZuZGVmIE5PQjEzNAor I2lmZGVmIFNPTEFSSVMyNQorI2RlZmluZSBCUFNfMTM0CisjZWxzZQorI3VuZGVmIEJQU18xMzQJ CQkJLyogMTM0LjUgYnBzIChJQk0gMjc0MSkgKi8KKyNlbmRpZiAvKiBCUFNfMTM0ICovCisjZW5k aWYgLyogTk9CMTM0ICovCisKKyNpZm5kZWYgTk9CXzE1MAorI2RlZmluZSBCUFNfMTUwCQkJCS8q IDE1MCBicHMgKi8KKyNlbmRpZgorCisjaWZuZGVmIE5PQl8yMDAKKyNkZWZpbmUgQlBTXzIwMAkJ CQkvKiAyMDAgYnBzICovCisjZW5kaWYKKworI2lmbmRlZiBOT0JfMTgwMAorI2lmZGVmIE1BQwor I2RlZmluZSBCUFNfMTgwMAkJCS8qIDE4MDAgYnBzICovCisjZWxzZQorI2lmZGVmIFNPTEFSSVMy NQorI2RlZmluZSBCUFNfMTgwMAorI2VuZGlmCisjZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIE5P Ql8zNjAwCisjaWZuZGVmIFNPTEFSSVMyNQorI2RlZmluZSBCUFNfMzYwMAkJCS8qIDM2MDAgYnBz ICovCisjZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIE5PQl83MjAwCisjaWZuZGVmIFNPTEFSSVMy NQorI2RlZmluZSBCUFNfNzIwMAkJCS8qIDcyMDAgYnBzICovCisjZW5kaWYgLyogU09MQVJJUzI1 ICovCisjZW5kaWYKKworI2lmbmRlZiBOT0JfMTRLCisjaWZkZWYgQlNENDQKKyNkZWZpbmUgQlBT XzE0SwkJCQkvKiAxNDQwMCBicHMgKi8KKyNlbHNlCisjaWZkZWYgT1MyCisjZGVmaW5lIEJQU18x NEsKKyNlbHNlCisjaWZkZWYgTkVYVAorI2RlZmluZSBCUFNfMTRLCisjZWxzZQorI2lmZGVmIE1B QworI2RlZmluZSBCUFNfMTRLCisjZWxzZQorI2lmZGVmIEFNSUdBCisjZGVmaW5lIEJQU18xNEsK KyNlbmRpZiAvKiBBTUlHQSAqLworI2VuZGlmIC8qIE1BQyAqLworI2VuZGlmIC8qIE5FWFQgKi8K KyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBCU0Q0NCAqLworI2VuZGlmIC8qIE5PQl8xNEsg Ki8KKworI2lmbmRlZiBOT0JfMTlLCisjZGVmaW5lIEJQU18xOUsJCQkJLyogMTkyMDAgYnBzICov CisjZW5kaWYKKworI2lmbmRlZiBOT0JfMjhLCisjaWZkZWYgQlNENDQKKyNkZWZpbmUgQlBTXzI4 SworI2Vsc2UKKyNpZmRlZiBPUzIKKyNkZWZpbmUgQlBTXzI4SworI2Vsc2UKKyNpZmRlZiBORVhU CisjZGVmaW5lIEJQU18yOEsJCQkJLyogMjg4MDAgYnBzICovCisjZWxzZQorI2lmZGVmIE1BQwor I2RlZmluZSBCUFNfMjhLCQkJCS8qIDI4ODAwIGJwcyAqLworI2VuZGlmIC8qIE1BQyAqLworI2Vu ZGlmIC8qIE5FWFQgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBCU0Q0NCAqLworI2Vu ZGlmIC8qIE5PQl8yOEsgKi8KKworI2lmbmRlZiBOT0JfMzhLCisjZGVmaW5lIEJQU18zOEsJCQkJ LyogMzg0MDAgYnBzICovCisjZW5kaWYKKworI2lmbmRlZiBOT0JfNTdLCisjaWZkZWYgUGxhbjkK KyNkZWZpbmUgQlBTXzU3SworI2Vsc2UKKyNpZmRlZiBTT0xBUklTMjUKKyNkZWZpbmUgQlBTXzU3 SworI2Vsc2UKKyNpZmRlZiBWTVMKKyNkZWZpbmUgQlBTXzU3SwkJCQkvKiA1NzYwMCBicHMgKi8K KyNlbHNlCisjaWZkZWYgT1MyCisjZGVmaW5lIEJQU181N0sKKyNlbHNlCisjaWZkZWYgX19saW51 eF9fCisjZGVmaW5lIEJQU181N0sKKyNlbHNlCisjaWZkZWYgSFBVWAorI2RlZmluZSBCUFNfNTdL CisjZWxzZQorI2lmZGVmIE5FWFQKKyNkZWZpbmUgQlBTXzU3SworI2Vsc2UKKyNpZmRlZiBfXzM4 NkJTRF9fCisjZGVmaW5lIEJQU181N0sKKyNlbHNlCisjaWZkZWYgX19GcmVlQlNEX18KKyNkZWZp bmUgQlBTXzU3SworI2Vsc2UKKyNpZmRlZiBfX05ldEJTRF9fCisjZGVmaW5lIEJQU181N0sKKyNl bHNlCisjaWZkZWYgTUFDCisjZGVmaW5lIEJQU181N0sKKyNlbHNlCisjaWZkZWYgUU5YCisjZGVm aW5lIEJQU181N0sKKyNlbHNlCisjaWZkZWYgQkVPU09SQkVCT1gKKyNkZWZpbmUgQlBTXzU3Swor I2Vsc2UKKyNpZmRlZiBJUklYNjIKKyNkZWZpbmUgQlBTXzU3SworI2Vsc2UKKyNpZmRlZiBTQ09f T1NSNTA0CisjZGVmaW5lIEJQU181N0sKKyNlbHNlCisjaWZkZWYgQlNESTIKKyNkZWZpbmUgQlBT XzU3SworI2VuZGlmIC8qIEJTREkyICovCisjZW5kaWYgLyogU0NPX09TUjUwNCAqLworI2VuZGlm IC8qIElSSVg2MiAqLworI2VuZGlmIC8qIEJFT1NPUkJFQk9YICovCisjZW5kaWYgLyogUU5YICov CisjZW5kaWYgLyogTUFDICovCisjZW5kaWYgLyogX19OZXRCU0RfXyAqLworI2VuZGlmIC8qIF9f RnJlZUJTRF9fICovCisjZW5kaWYgLyogX18zODZCU0RfXyAqLworI2VuZGlmIC8qIE5FWFQgKi8K KyNlbmRpZiAvKiBIUFVYICovCisjZW5kaWYgLyogX19saW51eF9fICovCisjZW5kaWYgLyogT1My ICovCisjZW5kaWYgLyogVk1TICovCisjZW5kaWYgLyogU09MQVJJUzI1ICovCisjZW5kaWYgLyog UGxhbjkgKi8KKyNlbmRpZiAvKiBOT0JfNTdLICovCisKKyNpZm5kZWYgTk9CXzc2SworI2lmZGVm IEJTREkyCisjZGVmaW5lIEJQU183NksKKyNlbmRpZiAvKiBCU0RJMiAqLworI2lmZGVmIFBsYW45 CisjZGVmaW5lIEJQU183NksKKyNlbmRpZiAvKiBQbGFuOSAqLworI2lmZGVmIFNPTEFSSVMyNQor I2RlZmluZSBCUFNfNzZLCisjZW5kaWYgLyogU09MQVJJUzI1ICovCisjaWZkZWYgVk1TCisjZGVm aW5lIEJQU183NksJCQkJLyogNzY4MDAgYnBzICovCisjZW5kaWYgLyogVk1TICovCisjaWZkZWYg T1MyCisjaWZkZWYgX18zMkJJVF9fCisjZGVmaW5lIEJQU183NksKKyNlbmRpZiAvKiBfXzMyQklU X18gKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyNpZmRlZiBRTlgKKyNkZWZpbmUgQlBTXzc2SworI2Vu ZGlmIC8qIFFOWCAqLworI2lmZGVmIElSSVg2MgorI2RlZmluZSBCUFNfNzZLCisjZW5kaWYgLyog SVJJWDYyICovCisjaWZkZWYgU0NPX09TUjUwNAorI2RlZmluZSBCUFNfNzZLCisjZW5kaWYgLyog U0NPX09TUjUwNCAqLworI2VuZGlmIC8qIE5PQl83NksgKi8KKworI2lmbmRlZiBOT0JfMTE1Swor I2lmZGVmIEJTREkyCisjZGVmaW5lIEJQU18xMTVLCisjZW5kaWYgLyogQlNESTIgKi8KKyNpZmRl ZiBQbGFuOQorI2RlZmluZSBCUFNfMTE1SworI2VuZGlmIC8qIFBsYW45ICovCisjaWZkZWYgU09M QVJJUzI1CisjZGVmaW5lIEJQU18xMTVLCisjZW5kaWYgLyogU09MQVJJUzI1ICovCisjaWZkZWYg Vk1TCisjZGVmaW5lIEJQU18xMTVLCQkJLyogMTE1MjAwIGJwcyAqLworI2Vsc2UKKyNpZmRlZiBR TlgKKyNkZWZpbmUgQlBTXzExNUsKKyNlbHNlCisjaWZkZWYgSFBVWAorI2RlZmluZSBCUFNfMTE1 SworI2Vsc2UKKyNpZmRlZiBfX2xpbnV4X18KKyNkZWZpbmUgQlBTXzExNUsKKyNlbHNlCisjaWZk ZWYgX18zODZCU0RfXworI2RlZmluZSBCUFNfMTE1SworI2Vsc2UKKyNpZmRlZiBfX0ZyZWVCU0Rf XworI2RlZmluZSBCUFNfMTE1SworI2Vsc2UKKyNpZmRlZiBfX05ldEJTRF9fCisjZGVmaW5lIEJQ U18xMTVLCisjZWxzZQorI2lmZGVmIE9TMgorI2lmZGVmIF9fMzJCSVRfXworI2RlZmluZSBCUFNf MTE1SworI2VuZGlmIC8qIF9fMzJCSVRfXyAqLworI2Vsc2UKKyNpZmRlZiBCRU9TT1JCRUJPWAor I2RlZmluZSBCUFNfMTE1SworI2Vsc2UKKyNpZmRlZiBJUklYNjIKKyNkZWZpbmUgQlBTXzExNUsK KyNlbHNlCisjaWZkZWYgU0NPX09TUjUwNAorI2RlZmluZSBCUFNfMTE1SworI2VuZGlmIC8qIFND T19PU1I1MDQgKi8KKyNlbmRpZiAvKiBJUklYNjIgKi8KKyNlbmRpZiAvKiBCRU9TT1JCRUJPWCAq LworI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIF9fTmV0QlNEX18gKi8KKyNlbmRpZiAvKiBf X0ZyZWVCU0RfXyAqLworI2VuZGlmIC8qIF9fMzg2QlNEX18gKi8KKyNlbmRpZiAvKiBfX2xpbnV4 X18gKi8KKyNlbmRpZiAvKiBIUFVYICovCisjZW5kaWYgLyogUU5YICovCisjZW5kaWYgLyogVk1T ICovCisjZW5kaWYgLyogTk9CXzExNUsgKi8KKworI2lmbmRlZiBOT0JfMjMwSwkJCS8qIDIzMDQw MCBicHMgKi8KKyNpZmRlZiBCU0RJMgorI2RlZmluZSBCUFNfMjMwSworI2Vsc2UKKyNpZmRlZiBT Q09fT1NSNTA0CisjZGVmaW5lIEJQU18yMzBLCisjZWxzZQorI2lmZGVmIF9fbGludXhfXworI2Rl ZmluZSBCUFNfMjMwSworI2Vsc2UKKyNpZmRlZiBTT0xBUklTMjUKKyNkZWZpbmUgQlBTXzIzMEsK KyNlbHNlCisjaWZkZWYgT1MyCisjaWZkZWYgX18zMkJJVF9fCisjZGVmaW5lIEJQU18yMzBLCisj ZW5kaWYgLyogX18zMkJJVF9fICovCisjZWxzZQorI3VuZGVmIEJQU18yMzBLCisjZW5kaWYgLyog T1MyICovCisjZW5kaWYgLyogU09MQVJJUzI1ICovCisjZW5kaWYgLyogX19saW51eF9fICovCisj ZW5kaWYgLyogU0NPX09TUjUwNCAqLworI2VuZGlmIC8qIEJTREkyICovCisjZW5kaWYgLyogTk9C XzIzMEsgKi8KKworI2lmbmRlZiBOT0JfNDYwSwkJCS8qIDQ2MDgwMCBicHMgKi8KKyNpZmRlZiBT Q09fT1NSNTA0CisjZGVmaW5lIEJQU180NjBLCisjZWxzZQorI2lmZGVmIF9fbGludXhfXworI2Rl ZmluZSBCUFNfNDYwSworI2Vsc2UKKyNpZmRlZiBPUzIKKyNpZmRlZiBfXzMyQklUX18KKyNkZWZp bmUgQlBTXzQ2MEsKKyNlbmRpZiAvKiBfXzMyQklUX18gKi8KKyNlbHNlCisjdW5kZWYgQlBTXzQ2 MEsKKyNlbmRpZiAvKiBfX2xpbnV4X18gKi8KKyNlbmRpZiAvKiBTQ09fT1NSNTA0ICovCisjZW5k aWYgLyogT1MyICovCisjZW5kaWYgLyogTk9CXzQ2MEsgKi8KKworI2lmbmRlZiBOT0JfOTIxSwkJ CS8qIDkyMTYwMCBicHMgKi8KKyNpZmRlZiBTQ09fT1NSNTA0CisjZGVmaW5lIEJQU185MjFLCisj ZW5kaWYgLyogU0NPX09TUjUwNCAqLworI2VuZGlmIC8qIE5PQl85MjFLICovCisKKyNpZmRlZiBC UFNfOTIxSwkJCQkvKiBNYXhpbXVtIHNwZWVkIGRlZmluZWQgKi8KKyNkZWZpbmUgTUFYX1NQRCA5 MjE2MDBMCisjZWxzZQorI2lmZGVmIEJQU180NjBLCisjZGVmaW5lIE1BWF9TUEQgNDYwODAwTAor I2Vsc2UKKyNpZmRlZiBCUFNfMjMwSworI2RlZmluZSBNQVhfU1BEIDIzMDQwMEwKKyNlbHNlCisj aWZkZWYgQlBTXzExNUsKKyNkZWZpbmUgTUFYX1NQRCAxMTUyMDBMCisjZWxzZQorI2lmZGVmIEJQ U183NksKKyNkZWZpbmUgTUFYX1NQRCA3NjgwMEwKKyNlbHNlCisjaWZkZWYgQlBTXzU3SworI2Rl ZmluZSBNQVhfU1BEIDU3NjAwTAorI2Vsc2UKKyNpZmRlZiBCUFNfMzhLCisjZGVmaW5lIE1BWF9T UEQgMzg0MDBMCisjZWxzZQorI2lmZGVmIEJQU18yOEsKKyNkZWZpbmUgTUFYX1NQRCAyODgwMEwK KyNlbHNlCisjaWZkZWYgQlBTXzE5SworI2RlZmluZSBNQVhfU1BEIDE5MjAwTAorI2Vsc2UKKyNp ZmRlZiBCUFNfMTRLCisjZGVmaW5lIE1BWF9TUEQgMTQ0MDBMCisjZWxzZQorI2RlZmluZSBNQVhf U1BEIDk2MDBMCisjZW5kaWYKKyNlbmRpZgorI2VuZGlmCisjZW5kaWYKKyNlbmRpZgorI2VuZGlm CisjZW5kaWYKKyNlbmRpZgorI2VuZGlmCisjZW5kaWYKKyNlbmRpZiAvKiBUVFNQRExJU1QgKi8K KworI2lmbmRlZiBDT05HU1BECQkJCS8qIFN5c3RlbXMgdGhhdCBjYW4gY2FsbCBjb25nc3BkKCkg Ki8KKyNpZmRlZiBVTklYCisjZGVmaW5lIENPTkdTUEQKKyNlbmRpZiAvKiBVTklYICovCisjaWZk ZWYgVk1TCisjZGVmaW5lIENPTkdTUEQKKyNlbmRpZiAvKiBWTVMgKi8KKyNpZmRlZiBTVFJBVFVT CisjZGVmaW5lIENPTkdTUEQKKyNlbmRpZiAvKiBTVFJBVFVTICovCisjZW5kaWYgLyogQ09OR1NQ RCAqLworCisvKiBUeXBlcyBvZiBmbG93IGNvbnRyb2wgYXZhaWxhYmxlICovCisKKyNkZWZpbmUg Q0tfWE9OWE9GRgkJCS8qIEV2ZXJ5Ym9keSBjYW4gZG8gdGhpcywgcmlnaHQ/ICovCisKKyNpZmRl ZiBBTUlHQQkJCQkvKiBDb21tb2RvcmUgQW1pZ2EgKi8KKyNkZWZpbmUgQ0tfUlRTQ1RTCQkJLyog aGFzIFJUUy9DVFMgKi8KKyNlbmRpZiAvKiBBTUlHQSAqLworCisjaWZkZWYgU1VONFM1CQkJCS8q IFN1bk9TIGluIFN5c3RlbSBWIGVudmlyb25tZW50ICovCisjZGVmaW5lIENLX1JUU0NUUworI2Vs c2UJCQkJCS8qIFN1bk9TIDQuMC80LjEgaW4gQlNEIGVudmlyb25tZW50ICovCisjaWZkZWYgU1VO T1M0CQkJCS8qIFN1bk9TIDQuMCtsYXRlciBzdXBwb3J0cyBSVFMvQ1RTICovCisjaWZkZWYgU1VO T1M0MQkJCQkvKiBFYXN5IGluIDQuMSBhbmQgbGF0ZXIgKi8KKyNkZWZpbmUgQ0tfUlRTQ1RTCisj ZWxzZQkJCQkJLyogSGFyZGVyIGluIDQuMCAqLworI2lmbmRlZiBfX0dOVUNfXwkJCS8qIChzZWUg dHRoZmxvdygpIGluIGNrdXRpby5jKSAqLworI2lmbmRlZiBHTlVDCisjZGVmaW5lIENLX1JUU0NU UwkJCS8qIE9ubHkgaWYgbm90IHVzaW5nIEdOVSBnY2MgKi8KKyNlbmRpZiAvKiBfX0dOVUNfXyAq LworI2VuZGlmIC8qIEdOVUMgKi8KKyNlbmRpZiAvKiBTVU5PUzQxICovCisjZW5kaWYgLyogU1VO T1M0ICovCisjZW5kaWYgLyogU1VONFM1ICovCisKKyNpZmRlZiBCU0Q0NAkJCQkvKiBBbmQgaW4g NC40IEJTRCwgaW5jbHVkaW5nIEJTREkgKi8KKyNkZWZpbmUgQ0tfUlRTQ1RTCisjZW5kaWYgLyog QlNENDQgKi8KKworI2lmZGVmIFRFUk1JT1gJCQkJLyogU3lzIFYgUjQgPHRlcm1pb3guaD4gKi8K KyNpZm5kZWYgQ0tfUlRTQ1RTCisjZGVmaW5lIENLX1JUU0NUUworI2VuZGlmIC8qIENLX1JUU0NU UyAqLworI2lmbmRlZiBDS19EVFJDRAorI2RlZmluZSBDS19EVFJDRAorI2VuZGlmIC8qIENLX0RU UkNEICovCisjZWxzZQorI2lmZGVmIFNURVJNSU9YCQkJCS8qIFN5cyBWIFI0IDxzeXMvdGVybWlv eC5oPiAqLworI2lmbmRlZiBDS19SVFNDVFMKKyNkZWZpbmUgQ0tfUlRTQ1RTCisjZW5kaWYgLyog Q0tfUlRTQ1RTICovCisjaWZuZGVmIENLX0RUUkNECisjZGVmaW5lIENLX0RUUkNECisjZW5kaWYg LyogQ0tfRFRSQ0QgKi8KKyNlbmRpZiAvKiBTVEVSTUlPWCAqLworI2VuZGlmIC8qIFRFUk1JT1gg Ki8KKworI2lmZGVmIE9YT1MJCQkJLyogT2xpdmV0dGkgWC9PUyBSMiBzdHJ1Y3QgdGVybWlvcyAq LworI2RlZmluZSBDS19SVFNDVFMJCQkvKiBEaXR0by4gKi8KKyNkZWZpbmUgQ0tfRFRSQ0QKKyNl bmRpZiAvKiBPWE9TICovCisKKyNpZmRlZiBBSVhSUwkJCQkvKiBSUy82MDAwIHdpdGggQUlYIDMu eCAqLworI2RlZmluZSBDS19SVFNDVFMJCQkvKiBIYXMgaXRzIG93biBwZWN1bGlhciBtZXRob2Qu Li4gKi8KKyNlbmRpZiAvKiBBSVhSUyAqLworCisjaWZkZWYgX19saW51eF9fCQkJLyogTGludXgg Ki8KKyNkZWZpbmUgQ0tfUlRTQ1RTCisjZW5kaWYgLyogX19saW51eF9fICovCisvKgorICBIYXJk d2FyZSBmbG93IGNvbnRyb2wgaXMgbm90IGRlZmluZWQgaW4gUE9TSVguMS4gIE5ldmVydGhlbGVz cywgYSBjZXJ0YWluCisgIHN0eWxlIEFQSSBmb3IgaGFyZHdhcmUgZmxvdyBjb250cm9sLCB1c2lu ZyB0Y3NldGF0dHIoKSBhbmQgdGhlIENSVFNDVFMKKyAgYml0KHMpLCBzZWVtcyB0byBiZSBnYWlu aW5nIGN1cnJlbmN5IG9uIFBPU0lYLWJhc2VkIFVOSVggc3lzdGVtcy4gIFRoZQorICBmb2xsb3dp bmcgY29kZSBkZWZpbmVzIHRoZSBzeW1ib2wgUE9TSVhfQ1JUU0NUUyBmb3Igc3VjaCBzeXN0ZW1z LgorKi8KKyNpZmRlZiBDS19SVFNDVFMKKyNpZmRlZiBfX2JzZGlfXwkJCQkvKiBCU0RJLCBhLmsu YS4gQlNELzM4NiAqLworI2RlZmluZSBQT1NJWF9DUlRTQ1RTCisjZW5kaWYgLyogX19ic2RpX18g Ki8KKyNpZmRlZiBfX2xpbnV4X18JCQkvKiBMaW51eCAqLworI2RlZmluZSBQT1NJWF9DUlRTQ1RT CisjZW5kaWYgLyogX19saW51eF9fICovCisjaWZkZWYgX19OZXRCU0RfXwkJCS8qIE5ldEJTRCAq LworI2RlZmluZSBQT1NJWF9DUlRTQ1RTCisjZW5kaWYgLyogX19OZXRCU0RfXyAqLworI2lmZGVm IF9fT3BlbkJTRF9fCisjZGVmaW5lIFBPU0lYX0NSVFNDVFMKKyNlbmRpZiAvKiBfX09wZW5CU0Rf XyAqLworI2lmZGVmIEJFT1NPUkJFQk9YCQkJLyogQmVCT1ggKi8KKyNkZWZpbmUgUE9TSVhfQ1JU U0NUUworLyogQkVCT1ggZGVmaW5lcyBDUlRTRkwgYXMgKENUU0ZMT1cgJiBSVFNGTE9XKSAqLwor I2RlZmluZSBDUlRTQ1RTIENSVFNGTAorI2VuZGlmIC8qIEJFT1NPUkJFQk9YICovCisjaWZkZWYg SVJJWDUyCQkJCS8qIElSSVggNS4yIGFuZCBsYXRlciAqLworI2RlZmluZSBQT1NJWF9DUlRTQ1RT CisjZGVmaW5lIENSVFNDVFMgQ05FV19SVFNDVFMJCS8qIFNlZSA8c3lzL3Rlcm1pb3MuaD4gKi8K KyNlbmRpZiAvKiBJUklYNTIgKi8KKyNlbmRpZiAvKiBDS19SVFNDVFMgKi8KKworLyogSW1wbGVt ZW50YXRpb25zIHRoYXQgaGF2ZSBpbXBsZW1lbnRlZCB0aGUgdHRzZXRmbG93KCkgZnVuY3Rpb24u ICovCisKKyNpZm5kZWYgQ0tfVFRTRVRGTE9XCisjaWZkZWYgVU5JWAorI2RlZmluZSBDS19UVFNF VEZMT1cKKyNlbmRpZiAvKiBVTklYICovCisjaWZkZWYgT1MyCisjZGVmaW5lIENLX1RUU0VURkxP VworI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIENLX1RUU0VURkxPVyAqLworCisjaWZkZWYg Q0tfVFRTRVRGTE9XCitfUFJPVE9UWVAoIGludCB0dHNldGZsb3csIChpbnQpICk7CisjZW5kaWYg LyogQ0tfVFRTRVRGTE9XICovCisvKgorIFN5c3RlbXMgd2hlcmUgd2UgY2FuIGV4cGFuZCB0aWxk ZSBhdCB0aGUgYmVnaW5uaW5nIG9mIGZpbGUgb3IgZGlyZWN0b3J5IG5hbWVzCisqLworI2lmZGVm IFBPU0lYCisjaWZuZGVmIERUSUxERQorI2RlZmluZSBEVElMREUKKyNlbmRpZiAvKiBEVElMREUg Ki8KKyNlbmRpZiAvKiBQT1NJWCAqLworI2lmZGVmIEJTRDQKKyNpZm5kZWYgRFRJTERFCisjZGVm aW5lIERUSUxERQorI2VuZGlmIC8qIERUSUxERSAqLworI2VuZGlmIC8qIEJTRDQgKi8KKyNpZmRl ZiBBVFRTVgorI2lmbmRlZiBEVElMREUKKyNkZWZpbmUgRFRJTERFCisjZW5kaWYgLyogRFRJTERF ICovCisjZW5kaWYgLyogQVRUU1YgKi8KKyNpZmRlZiBPU0sKKyNpZm5kZWYgRFRJTERFCisjZGVm aW5lIERUSUxERQorI2VuZGlmIC8qIERUSUxERSAqLworI2VuZGlmIC8qIE9TSyAqLworI2lmZGVm IEhQVVgJCQkJLyogSSBkb24ndCBrbm93IHdoeSB0aGlzIGlzICovCisjaWZuZGVmIERUSUxERQkJ CQkvKiBuZWNlc3NhcnksIHNpbmNlIC1ESFBVWCAqLworI2RlZmluZSBEVElMREUJCQkJLyogYXV0 b21hdGljYWxseSBkZWZpbmVzIEFUVFNWICovCisjZW5kaWYgLyogRFRJTERFICovCQkJLyogKHNl ZSBhYm92ZSkgLi4uICovCisjZW5kaWYgLyogSFBVWCAqLworCisvKgorICBUaGlzIGlzIG1haW5s eSBmb3IgdGhlIGJlbmVmaXQgb2YgY2t1ZmlvLmMgKFVOSVggYW5kIE9TLzIgZmlsZSBzdXBwb3J0 KS4KKyAgU3lzdGVtcyB0aGF0IGhhdmUgYW4gYXRvbWljIHJlbmFtZSgpIGZ1bmN0aW9uLCBzbyB3 ZSBkb24ndCBoYXZlIHRvIHVzZQorICBsaW5rKCkgYW5kIHVubGluaygpLgorKi8KKyNpZmRlZiBQ T1NJWAorI2lmbmRlZiBSRU5BTUUKKyNkZWZpbmUgUkVOQU1FCisjZW5kaWYgLyogUkVOQU1FICov CisjZW5kaWYgLyogUE9TSVggKi8KKworI2lmZGVmIE9TMgorI2lmbmRlZiBSRU5BTUUKKyNkZWZp bmUgUkVOQU1FCisjZW5kaWYgLyogUkVOQU1FICovCisjZW5kaWYgLyogT1MyICovCisKKyNpZmRl ZiBTVU5PUzQxCisjaWZuZGVmIFJFTkFNRQorI2RlZmluZSBSRU5BTUUKKyNlbmRpZiAvKiBSRU5B TUUgKi8KKyNlbmRpZiAvKiBTVU5PUzQxICovCisKKyNpZmRlZiBTVlI0CisjaWZuZGVmIFJFTkFN RQorI2RlZmluZSBSRU5BTUUKKyNlbmRpZiAvKiBSRU5BTUUgKi8KKyNlbmRpZiAvKiBTVlI0ICov CisKKyNpZmRlZiBBSVhSUworI2lmbmRlZiBSRU5BTUUKKyNkZWZpbmUgUkVOQU1FCisjZW5kaWYg LyogUkVOQU1FICovCisjZW5kaWYgLyogQUlYUlMgKi8KKworI2lmZGVmIEJTRDQ0CisjaWZuZGVm IFJFTkFNRQorI2RlZmluZSBSRU5BTUUKKyNlbmRpZiAvKiBSRU5BTUUgKi8KKyNlbmRpZiAvKiBC U0Q0NCAqLworCisjaWZkZWYgTk9SRU5BTUUJCQkJLyogQWxsb3cgZm9yIGNvbXBpbGUtdGltZSBv dmVycmlkZSAqLworI2lmZGVmIFJFTkFNRQorI3VuZGVmIFJFTkFNRQorI2VuZGlmIC8qIFJFTkFN RSAqLworI2VuZGlmIC8qIE5PUkVOQU1FICovCisKKyNpZmRlZiBTVFJBVFVTCQkJCS8qIFN0cmF0 dXMgVk9TICovCisjaWZuZGVmIFJFTkFNRQorI2RlZmluZSBSRU5BTUUKKyNlbmRpZiAvKiBSRU5B TUUgKi8KKyNlbmRpZiAvKiBTVFJBVFVTICovCisKKy8qIExpbmUgZGVsaW1pdGVyIGZvciB0ZXh0 IGZpbGVzICovCisKKy8qCisgSWYgdGhlIHN5c3RlbSB1c2VzIGEgc2luZ2xlIGNoYXJhY3RlciBm b3IgdGV4dCBmaWxlIGxpbmUgZGVsaW1pdGF0aW9uLAorIGRlZmluZSBOTENIQVIgdG8gdGhlIHZh bHVlIG9mIHRoYXQgY2hhcmFjdGVyLiAgRm9yIHRleHQgZmlsZXMsIHRoYXQKKyBjaGFyYWN0ZXIg d2lsbCBiZSBjb252ZXJ0ZWQgdG8gQ1JMRiB1cG9uIG91dHB1dCwgYW5kIENSTEYgd2lsbCBiZSBj b252ZXJ0ZWQKKyB0byB0aGF0IGNoYXJhY3RlciBvbiBpbnB1dCBkdXJpbmcgdGV4dC1tb2RlIChk ZWZhdWx0KSBwYWNrZXQgb3BlcmF0aW9ucy4KKyovCisjaWZkZWYgTUFDICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogTWFjaW50b3NoICovCisjZGVmaW5lIE5MQ0hBUiAwMTUKKyNlbHNl CisjaWZkZWYgT1NLCQkJCS8qIE9TLTkvNjhLICovCisjZGVmaW5lIE5MQ0hBUiAwMTUKKyNlbHNl ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBbGwgVW5peC1saWtlIHN5c3Rl bXMgKi8KKyNkZWZpbmUgTkxDSEFSIDAxMgorI2VuZGlmIC8qIE9TSyAqLworI2VuZGlmIC8qIE1B QyAqLworCisvKgorIEF0IHRoaXMgcG9pbnQsIGlmIHRoZXJlJ3MgYSBzeXN0ZW0gdGhhdCB1c2Vz IG9yZGluYXJ5IENSTEYgbGluZQorIGRlbGltaXRhdGlvbiBBTkQgdGhlIEMgY29tcGlsZXIgYWN0 dWFsbHkgcmV0dXJucyBib3RoIHRoZSBDUiBhbmQKKyB0aGUgTEYgd2hlbiBkb2luZyBpbnB1dCBm cm9tIGEgZmlsZSwgdGhlbiAjdW5kZWYgTkxDSEFSLgorKi8KKyNpZmRlZiBPUzIJCQkJLyogT1Mv MiAqLworI3VuZGVmIE5MQ0hBUgorI2VuZGlmIC8qIE9TMiAqLworCisjaWZkZWYgR0VNRE9TCQkJ CS8qIEF0YXJpIFNUICovCisjdW5kZWYgTkxDSEFSCisjZW5kaWYgLyogR0VNRE9TICovCisKKy8q CisgIFZNUyBmaWxlIGZvcm1hdHMgYXJlIHNvIGNvbXBsaWNhdGVkIHdlIG5lZWQgdG8gZG8gYWxs IHRoZSBjb252ZXJzaW9uCisgIHdvcmsgaW4gdGhlIENLVkZJTyBtb2R1bGUsIHNvIHdlIHRlbGwg dGhlIHJlc3Qgb2YgQy1LZXJtaXQgbm90IHRvIGZpZGRsZQorICB3aXRoIHRoZSBieXRlcy4KKyov CisKKyNpZmRlZiB2bXMKKyN1bmRlZiBOTENIQVIKKyNlbmRpZiAvKiB2bXMgKi8KKworLyogVGhl IGRldmljZSBuYW1lIG9mIGEgam9iJ3MgY29udHJvbGxpbmcgdGVybWluYWwgKi8KKy8qIFNwZWNp YWwgZm9yIFZNUywgc2FtZSBmb3IgYWxsIFVuaXhlcyAoPyksIG5vdCB1c2VkIGJ5IE1hY2ludG9z aCAqLworCisjaWZkZWYgQkVPUworI2RlZmluZSBDVFROQU0gZGZ0dHkKKyNlbHNlCisjaWZkZWYg dm1zCisjZGVmaW5lIENUVE5BTSAiU1lTJElOUFVUOiIJCS8qICg0IEphbiAyMDAyKSBXYXMgVFQ6 ICovCisjZWxzZQorI2lmZGVmIGRhdGFnZW5lcmFsCisjZGVmaW5lIENUVE5BTSAiQG91dHB1dCIK KyNlbHNlCisjaWZkZWYgT1NLCitleHRlcm4gY2hhciBteXR0eXN0cltdOworI2RlZmluZSBDVFRO QU0gbXl0dHlzdHIKKyNlbHNlCisjaWZkZWYgT1MyCisjZGVmaW5lIENUVE5BTSAiY29uIgorI2Vs c2UKKyNpZmRlZiBVTklYCisjZGVmaW5lIENUVE5BTSAiL2Rldi90dHkiCisjZWxzZQorI2lmZGVm IEdFTURPUworI2RlZmluZSBDVFROQU0gImF1eDoiCisjZWxzZQorI2lmZGVmIFNUUkFUVVMKK2V4 dGVybiBjaGFyIG15dHR5c3RyW107CisjZGVmaW5lIENUVE5BTSBteXR0eXN0cgorI2Vsc2UgLyog QW55b25lIGVsc2UuLi4gKi8KKyNkZWZpbmUgQ1RUTkFNICJzdGRvdXQiCQkJLyogVGhpcyBpcyBh IGtsdWRnZSB1c2VkIGJ5IE1hYyAqLworI2VuZGlmIC8qIFNUUkFUVVMgKi8KKyNlbmRpZiAvKiBH RU1ET1MgKi8KKyNlbmRpZiAvKiBVTklYICovCisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyog T1NLICovCisjZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KKyNlbmRpZiAvKiB2bXMgKi8KKyNlbmRp ZiAvKiBCRU9TICovCisKKyNpZm5kZWYgSEFWRUNUVE5BTQorI2lmZGVmIFVOSVgKKyNkZWZpbmUg SEFWRUNUVE5BTQorI2Vsc2UKKyNpZmRlZiBWTVMKKyNkZWZpbmUgSEFWRUNUVE5BTQorI2VuZGlm IC8qIFZNUyAqLworI2VuZGlmIC8qIFVOSVggKi8KKyNlbmRpZiAvKiBIQVZFQ1RUTkFNICovCisK KyNpZm5kZWYgWkZDREFUCQkJCS8qIHpmY2RhdCgpIGZ1bmN0aW9uIGF2YWlsYWJsZT8gKi8KKyNp ZmRlZiBVTklYCisjZGVmaW5lICBaRkNEQVQKKyNlbHNlCisjaWZkZWYgU1RSQVRVUworI2RlZmlu ZSAgWkZDREFUCisjZWxzZQorI2lmZGVmIEdFTURPUworI2RlZmluZSAgWkZDREFUCisjZWxzZQor I2lmZGVmIEFNSUdBCisjZGVmaW5lICBaRkNEQVQKKyNlbHNlCisjaWZkZWYgT1MyCisjZGVmaW5l ICBaRkNEQVQKKyNlbHNlCisjaWZkZWYgZGF0YWdlbmVyYWwKKyNkZWZpbmUgIFpGQ0RBVAorI2Vs c2UKKyNpZmRlZiBWTVMKKyNkZWZpbmUgIFpGQ0RBVAorI2VuZGlmIC8qIFZNUyAqLworI2VuZGlm IC8qIGRhdGFnZW5lcmFsICovCisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogQU1JR0EgKi8K KyNlbmRpZiAvKiBHRU1ET1MgKi8KKyNlbmRpZiAvKiBTVFJBVFVTICovCisjZW5kaWYgLyogVU5J WCAqLworI2VuZGlmIC8qIFpGQ0RBVCAqLworCisjaWZkZWYgU1VOUzRTNQorI2RlZmluZSB0b2xv d2VyIF90b2xvd2VyCisjZGVmaW5lIHRvdXBwZXIgX3RvdXBwZXIKKyNlbmRpZiAvKiBTVU5TNFM1 ICovCisKKy8qIEVycm9yIG51bWJlciAqLworCisjaWZkZWYgX0NSQVkKKyNpZmRlZiBfQ1JBWUNP TQkJCQkvKiBDcmF5IENvbXB1dGVyIENvcnAuICovCitleHRlcm4gaW50IGVycm5vOworI2Vsc2Ug LyogX0NSQVlDT00gKi8KKyNpbmNsdWRlIDxlcnJuby5oPgkJCS8qIENyYXkgUmVzZWFyY2ggVU5J Q09TIGRlZmluZXMgKi8KKwkJCQkJLyogZXJybm8gYXMgYSBmdW5jdGlvbi4gKi8KKyNlbmRpZiAv KiBfQ1JBWUNPTSAqLwkJCS8qIE9LIGZvciBVTklDT1MgNi4xIGFuZCA3LjAuICovCisjZWxzZSAv KiBfQ1JBWSAqLworI2lmZGVmIFNUUkFUVVMJCQkJLyogU3RyYXR1cyBWT1MgKi8KKyNpbmNsdWRl IDxlcnJuby5oPgorI2Vsc2UgLyogbm90IFNUUkFUVVMgKi8KKyNpZm5kZWYgVk1TCisjaWZuZGVm IE9TMgorI2lmZGVmIF9fR0xJQkNfXworLyoKKyAgImdsaWJjIHVzZXMgdGhyZWFkcywga2VybWl0 IHVzZXMgZ2xpYmM7IGVycm5vIGFjY2VzcyBpcyBpbiBUaHJlYWQgTG9jYWwKKyAgU3RvcmFnZSAo VExTKSBmcm9tIGdsaWJjLTMuMi4yLiAgLi4uYSB0aHJlYWQgc3BlY2lmaWMgZXJybm8gaXMgYmVp bmcgcnVuIGluCisgIHRocmVhZCBsb2NhbCBzdG9yYWdlIHJlbGF0aXZlIHRvIHRoZSAlZ3Mgc2Vn bWVudCByZWdpc3Rlciwgc28gc29tZSBtZWFucyB0bworICByZXZlY3RvciBnZXRzL3B1dHMgbmVl ZHMgdG8gYmUgZG9uZS4iIC0gSmVmZiBKb2huc29uLCBSZWQgSGF0LCBGZWIgMjAwMy4KKyovCisj aW5jbHVkZSA8ZXJybm8uaD4KKyNlbHNlCisvKgorICBUaGUgZm9sbG93aW5nIGRlY2xhcmF0aW9u IHdvdWxkIGNhdXNlIHByb2JsZW1zIGZvciBWTVMgYW5kIE9TLzIsIGluIHdoaWNoCisgIGVycm5v IGlzIGFuICJleHRlcm4gdm9sYXRpbGUgaW50IG5vc2hhcmUiLi4uICBOT1RFOiBieSBub3cgKDIw MDcpIHRoZQorICBmb2xsb3dpbmcgaXMgYW4gYW5hY2hyb25pc20gYW5kIHNob3VsZCBiZSB0aGUg ZXhlY3B0aW9uIHJhdGhlciB0aGFuIHRoZQorICBydWxlLgorKi8KK2V4dGVybiBpbnQgZXJybm87 CisjZW5kaWYgLyogX19HTElCQ19fICovCisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogVk1T ICovCisjZW5kaWYgLyogU1RSQVRVUyAqLworI2VuZGlmIC8qIF9DUkFZICovCisKKyNpZmRlZiBV TklYCQkJCS8qIENhdGNoLWFsbCBzbyB3ZSBjYW4gaGF2ZSAqLworI2lmbmRlZiBFU1JDSAkJCQkv KiBhY2Nlc3MgdG8gZXJyb3IgbW5lbW9uaWNzICovCisjaW5jbHVkZSA8ZXJybm8uaD4JCQkvKiBp biBhbGwgbW9kdWxlcyAtIDIwMDcvMDgvMjUgKi8KKyNlbmRpZgkvKiBFU1JDSCAqLworI2VuZGlm CS8qIFVOSVggKi8KKworI2lmZGVmIHBkcDExCQkJCS8qIFRyeSB0byBtYWtlIHNvbWUgc3BhY2Ug b24gUERQLTExICovCisjaWZuZGVmIE5PRElBTAorI2RlZmluZSBOT0RJQUwKKyNlbmRpZiAvKiBO T0RJQUwgKi8KKyNpZm5kZWYgTk9DVVJTRVMKKyNkZWZpbmUgTk9DVVJTRVMKKyNlbmRpZiAvKiBO T0NVUlNFUyAqLworI2lmbmRlZiBOT0JJR0JVRgorI2RlZmluZSBOT0JJR0JVRgorI2VuZGlmIC8q IE5PQklHQlVGICovCisjZW5kaWYgLyogcGRwMTEgKi8KKworI2lmbmRlZiBOT0JJR0JVRgorI2lm bmRlZiBCSUdCVUZPSwkJCS8qIFBsYXRmb3JtcyB3aXRoIGxvdHMgb2YgbWVtb3J5ICovCisKKyNp ZmRlZiBRTlgJCQkJLyogUU5YICovCisjaWZuZGVmIFFOWDE2CQkJCS8qIEJ1dCBub3QgMTYtYml0 IHZlcnNpb25zICovCisjZGVmaW5lIEJJR0JVRk9LCisjZW5kaWYgLyogUU5YMTYgKi8KKyNlbmRp ZiAvKiBRTlggKi8KKworI2lmZGVmIEJTRDQ0CisjZGVmaW5lIEJJR0JVRk9LCisjZW5kaWYgLyog QlNENDQgKi8KKworI2lmZGVmIFNUUkFUVVMJCQkJLyogU3RyYXR1cyBWT1MgKi8KKyNkZWZpbmUg QklHQlVGT0sKKyNlbmRpZiAvKiBTVFJBVFVTICovCisKKyNpZmRlZiBzcGFyYwkJCQkvKiBTUEFS QyBwcm9jZXNzb3JzICovCisjZGVmaW5lIEJJR0JVRk9LCisjZW5kaWYgLyogc3BhcmMgKi8KKwor I2lmZGVmIG1pcHMJCQkJLyogTUlQUyBwcm9jZXNzb3JzICovCisjZGVmaW5lIEJJR0JVRk9LCisj ZW5kaWYgLyogbWlwcyAqLworCisjaWZkZWYgSFBVWDkJCQkJLyogSFAtVVggOS54ICovCisjZGVm aW5lIEJJR0JVRk9LCisjZW5kaWYgLyogSFBVWDkgKi8KKworI2lmZGVmIEhQVVgxMAkJCQkvKiBI UC1VWCAxMC4wIFBBLVJJU0MgKi8KKyNkZWZpbmUgQklHQlVGT0sKKyNlbmRpZiAvKiBIUFVYMTAg Ki8KKworI2lmZGVmIE5FWFQJCQkJLyogTmVYVFNURVAgKi8KKyNpZmRlZiBtYzY4MDAwCQkJCS8q IG9uIE5FWFQgcGxhdGZvcm1zLi4uICovCisjZGVmaW5lIEJJR0JVRk9LCisjZW5kaWYgLyogbWM2 ODAwMCAqLworI2VuZGlmIC8qIE5FWFQgKi8KKworI2lmZGVmIExJTlVYCQkJCS8qIExpbnV4IGlu IDE5OTggc2hvdWxkIGJlIE9LICovCisjaWZuZGVmIEJJR0JVRk9LCisjZGVmaW5lIEJJR0JVRk9L CisjZW5kaWYgLyogQklHQlVGT0sgKi8KKyNlbmRpZiAvKiBMSU5VWCAqLworCisjaWZkZWYgT1My CQkJCS8qIDMyLWJpdCBPUy8yIDIueCBhbmQgYWJvdmUgKi8KKyNpZmRlZiBfXzMyQklUX18KKyNk ZWZpbmUgQklHQlVGT0sKKyNlbmRpZiAvKiBfXzMyQklUX18gKi8KKyNpZmRlZiBOVAorI2RlZmlu ZSBCSUdCVUZPSworI2VuZGlmIC8qIE5UICovCisjZW5kaWYgLyogT1MyICovCisKKyNpZmRlZiBQ bGFuOQkJCQkvKiBQbGFuIDkgaXMgT0sgKi8KKyNkZWZpbmUgQklHQlVGT0sKKyNlbmRpZiAvKiBQ bGFuOSAqLworCisjaWZkZWYgVk1TCQkJCS8qIEFueSBWTVMgaXMgT0sgKi8KKyNpZm5kZWYgQklH QlVGT0sKKyNkZWZpbmUgQklHQlVGT0sKKyNlbmRpZiAvKiBCSUdCVUZPSyAqLworI2VuZGlmIC8q IFZNUyAqLworCisjaWZkZWYgX19hbHBoYQkJCQkvKiBERUMgNjQtYml0IEFscGhhLCBlLmcuIE9T Ri8xICovCisjaWZuZGVmIEJJR0JVRk9LCQkJLyogTWlnaHQgYWxyZWFkeSBiZSBkZWZpbmVkIGZv ciBWTVMgKi8KKyNkZWZpbmUgQklHQlVGT0sKKyNlbmRpZiAvKiBCSUdCVUZPSyAqLworI2VuZGlm IC8qIF9fYWxwaGEgKi8KKworI2lmZGVmIHNnaQkJCQkvKiBTR0kgd2l0aCBJUklYIDQuMCBvciBs YXRlciAqLworI2lmbmRlZiBCSUdCVUZPSworI2RlZmluZSBCSUdCVUZPSworI2VuZGlmIC8qIEJJ R0JVRk9LICovCisjZW5kaWYgLyogc2dpICovCisKKyNpZmRlZiBBSVhSUwkJCQkvKiBBSVggb24g UklTQyAqLworI2RlZmluZSBCSUdCVUZPSworI2VuZGlmIC8qIEFJWFJTICovCisKKyNpZmRlZiBD S19TQ09WNQkJCQkvKiBTQ08gT1NSNSAqLworI2lmbmRlZiBCSUdCVUZPSworI2RlZmluZSBCSUdC VUZPSworI2VuZGlmIC8qIEJJR0JVRk9LICovCisjZW5kaWYgLyogQ0tfU0NPVjUgKi8KKworI2lm ZGVmIFNPTEFSSVMJCQkJLyogU29sYXJpcyB4ODYgKi8KKyNpZm5kZWYgQklHQlVGT0sKKyNkZWZp bmUgQklHQlVGT0sKKyNlbmRpZiAvKiBCSUdCVUZPSyAqLworI2VuZGlmIC8qIFNPTEFSSVMgKi8K KworI2VuZGlmIC8qIEJJR0JVRk9LICovCisjZW5kaWYgLyogTk9CSUdCVUYgKi8KKworI2lmZGVm IENLX1NNQUxMCisjaWZkZWYgQklHQlVGT0sKKyN1bmRlZiBCSUdCVUZPSworI2VuZGlmIC8qIEJJ R0JVRk9LICovCisjZW5kaWYgLyogQ0tfU01BTEwgKi8KKworLyogSWYgIm1lbW9yeSBpcyBubyBw cm9ibGVtIiB0aGVuIHRoaXMgaW1wcm92ZXMgcGVyZm9ybWFuY2UgKi8KKworI2lmZGVmIERFQlVH CisjaWZkZWYgQklHQlVGT0sKKyNpZm5kZWYgSUZERUJVRworI2RlZmluZSBJRkRFQlVHCisjZW5k aWYgLyogSUZERUJVRyAqLworI2VuZGlmIC8qIEJJR0JVRk9LICovCisjZW5kaWYgLyogREVCVUcg Ki8KKworLyogRmlsZSBTeXN0ZW0gRGVmYXVsdHMgKi8KKworI2lmbmRlZiBVSURCVUZMRU4JCQkv KiBMZW5ndGggb2YgVXNlciBJRCAqLworI2lmZGVmIE9TMgorI2RlZmluZSBVSURCVUZMRU4gMjU2 CisjZWxzZSAvKiBPUzIgKi8KKyNpZmRlZiBCSUdCVUZPSworI2RlZmluZSBVSURCVUZMRU4gMjU2 CisjZWxzZQorI2RlZmluZSBVSURCVUZMRU4gNjQKKyNlbmRpZiAvKiBCSUdCVUZPSyAqLworI2Vu ZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIFVJREJVRkxFTiAqLworCisjaWZkZWYgVU5JWAorI2lm ZGVmIFBST1ZYMQorI2RlZmluZSBNQVhXTEQgNTAKKyNlbHNlCisjaWZkZWYgcGRwMTEKKyNkZWZp bmUgTUFYV0xEIDUwCisjZWxzZQorI2lmZGVmIEJJR0JVRk9LCisjZGVmaW5lIE1BWFdMRCAxMDI0 MDAKKyNlbHNlCisjZGVmaW5lIE1BWFdMRCAxMDI0CisjZW5kaWYgLyogQklHQlVGT0sgKi8KKyNl bmRpZiAvKiBwZHAxMSAqLworI2VuZGlmIC8qIFBST1ZYMSAqLworI2Vsc2UKKyNpZmRlZiBWTVMK KyNkZWZpbmUgTUFYV0xEIDEwMjQwMAkJCS8qIE1heGltdW0gd2lsZGNhcmQgZmlsZW5hbWVzICov CisjZWxzZQorI2lmZGVmIGRhdGFnZW5lcmFsCisjZGVmaW5lIE1BWFdMRCA1MDAKKyNlbHNlCisj aWZkZWYgU1RSQVRVUworI2RlZmluZSBNQVhXTEQgNTAwMAorI2VuZGlmIC8qIFNUUkFUVVMgKi8K KyNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLworI2VuZGlmIC8qIFZNUyAqLworI2VuZGlmIC8qIFVO SVggKi8KKworI2lmZGVmIFZNUworI2RlZmluZSBEQkxLU0laIDUxMgorI2RlZmluZSBETFJFQ0wg NTEyCisjZWxzZQorI2RlZmluZSBEQkxLU0laIDAKKyNkZWZpbmUgRExSRUNMIDAKKyNlbmRpZiAv KiBWTVMgKi8KKworLyogQ29tbXVuaWNhdGlvbiBkZXZpY2UgLyBuZXR3b3JrIGhvc3QgbmFtZSBs ZW5ndGggKi8KKworI2lmZGVmIEJJR0JVRk9LCisjZGVmaW5lIFRUTkFNTEVOIDUxMgorI2Vsc2UK KyNpZmRlZiBNQUMKKyNkZWZpbmUgVFROQU1MRU4gMjU2CisjZWxzZQorI2lmbmRlZiBDS19TTUFM TAorI2RlZmluZSBUVE5BTUxFTiAxMjgKKyNlbHNlCisjZGVmaW5lIFRUTkFNTEVOIDgwCisjZW5k aWYgLyogQ0tfU01BTEwgKi8KKyNlbmRpZiAvKiBNQUMgKi8KKyNlbmRpZiAvKiBCSUdCVUZPSyAq LworCisvKiBQcm9ncmFtIHJldHVybiBjb2RlcyBmb3IgREVDVVMgQyBhbmQgVU5JWCAoVk1TIHVz ZXMgVU5JWCBjb2RlcykgKi8KKworI2lmZGVmIGRlY3VzCisjZGVmaW5lIEdPT0RfRVhJVCAgIElP X05PUk1BTAorI2RlZmluZSBCQURfRVhJVCAgICBJT19FUlJPUgorI2Vsc2UKKyNkZWZpbmUgR09P RF9FWElUICAgMAorI2RlZmluZSBCQURfRVhJVCAgICAxCisjZW5kaWYgLyogZGVjdXMgKi8KKwor LyogU3BlY2lhbCBoYWNrIGZvciBGb3J0dW5lLCB3aGljaCBkb2Vzbid0IGhhdmUgPHN5cy9maWxl Lmg+Li4uICovCisKKyNpZmRlZiBGVDE4CisjZGVmaW5lIEZSRUFEIDB4MDEKKyNkZWZpbmUgRldS SVRFIDB4MTAKKyNlbmRpZiAvKiBGVDE4ICovCisKKy8qIFNwZWNpYWwgaGFjayBmb3IgT1MtOS82 OGsgKi8KKyNpZmRlZiBPU0sKKyNpZm5kZWYgX1VDQworI2RlZmluZSBTSUdBTFJNIDMwCQkJLyog TWF5IGFsd2F5cyBjYW5jZWwgSS9PICovCisjZW5kaWYgLyogX1VDQyAqLworI2RlZmluZSBTSUdB UkIJMTIzNAkJCS8qIEFyYml0cmFyeSBmb3IgSS9PICovCitTSUdUWVAgKCpzaWduYWwoKSkoKTsK KyNlbmRpZiAvKiBPU0sgKi8KKworI2lmZGVmIE1JTklYCisjaWZkZWYgcHV0Y2hhcgorI3VuZGVm IHB1dGNoYXIKKyNlbmRpZiAvKiBwdXRjaGFyICovCisjZGVmaW5lIHB1dGNoYXIoYykgKHB1dGMo YyxzdGRvdXQpIT1FT0YpJiZmZmx1c2goc3Rkb3V0KQorI2VuZGlmIC8qIE1JTklYICovCisKKyNp ZmRlZiBkYXRhZ2VuZXJhbAkJCS8qIERhdGEgR2VuZXJhbCBBT1MvVlMgKi8KKyNpZmRlZiBwdXRj aGFyCisjdW5kZWYgcHV0Y2hhcgorI2VuZGlmIC8qIHB1dGNoYXIgKi8KKyNkZWZpbmUgcHV0Y2hh cihjKSBjb25vYyhjKQorI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCisKKy8qIEVzY2FwZS9xdW90 ZSBjaGFyYWN0ZXIgdXNlZCBieSB0aGUgY29tbWFuZCBwYXJzZXIgKi8KKworI2RlZmluZSBDTURR ICdcXCcKKworLyogU3ltYm9scyBmb3IgUlMtMjMyIG1vZGVtIHNpZ25hbHMgKi8KKworI2RlZmlu ZSBLTV9GRyAgICAxCQkJLyogRnJhbWUgZ3JvdW5kICovCisjZGVmaW5lIEtNX1RYRCAgIDIJCQkv KiBUcmFuc21pdCAqLworI2RlZmluZSBLTV9SWEQgICAzCQkJLyogUmVjZWl2ZSAqLworI2RlZmlu ZSBLTV9SVFMgICA0CQkJLyogUmVxdWVzdCB0byBTZW5kICovCisjZGVmaW5lIEtNX0NUUyAgIDUJ CQkvKiBDbGVhciB0byBTZW5kICovCisjZGVmaW5lIEtNX0RTUiAgIDYJCQkvKiBEYXRhIFNldCBS ZWFkeSAqLworI2RlZmluZSBLTV9TRyAgICA3CQkJLyogU2lnbmFsIGdyb3VuZCAqLworI2RlZmlu ZSBLTV9EQ0QgICA4CQkJLyogQ2FycmllciBEZXRlY3QgKi8KKyNkZWZpbmUgS01fRFRSICAyMAkJ CS8qIERhdGEgVGVybWluYWwgUmVhZHkgKi8KKyNkZWZpbmUgS01fUkkgICAyMgkJCS8qIFJpbmcg SW5kaWNhdGlvbiAqLworCisvKiBCaXQgbWFzayB2YWx1ZXMgZm9yIG1vZGVtIHNpZ25hbHMgKi8K KworI2RlZmluZSBCTV9DVFMgICAwMDAxCQkJLyogQ2xlYXIgdG8gc2VuZCAgICAgICAoRnJvbSBE Q0UpICovCisjZGVmaW5lIEJNX0RTUiAgIDAwMDIJCQkvKiBEYXRhc2V0IHJlYWR5ICAgICAgIChG cm9tIERDRSkgKi8KKyNkZWZpbmUgQk1fRENEICAgMDAwNAkJCS8qIENhcnJpZXIgICAgICAgICAg ICAgKEZyb20gRENFKSAqLworI2RlZmluZSBCTV9STkcgICAwMDEwCQkJLyogUmluZyBJbmRpY2F0 b3IgICAgICAoRnJvbSBEQ0UpICovCisjZGVmaW5lIEJNX0RUUiAgIDAwMjAJCQkvKiBEYXRhIFRl cm1pbmFsIFJlYWR5IChGcm9tIERURSkgKi8KKyNkZWZpbmUgQk1fUlRTICAgMDA0MAkJCS8qIFJl cXVlc3QgdG8gU2VuZCAgICAgKEZyb20gRFRFKSAqLworCisvKiBDb2RlcyBmb3IgZnVsbCBkdXBs ZXggZmxvdyBjb250cm9sICovCisKKyNkZWZpbmUgRkxPX05PTkUgMAkJCS8qIE5vbmUgKi8KKyNk ZWZpbmUgRkxPX1hPTlggMQkJCS8qIFhvbi9Yb2ZmIChzb2Z0KSAqLworI2RlZmluZSBGTE9fUlRT QyAyCQkJLyogUlRTL0NUUyAoaGFyZCkgKi8KKyNkZWZpbmUgRkxPX0RUUkMgMwkJCS8qIERUUi9D RCAoaGFyZCkgKi8KKyNkZWZpbmUgRkxPX0VUWEEgNAkJCS8qIEVUWC9BQ0sgKHNvZnQpICovCisj ZGVmaW5lIEZMT19TVFJHIDUJCQkvKiBTdHJpbmctYmFzZWQgKHNvZnQpICovCisjZGVmaW5lIEZM T19ESUFMIDYJCQkvKiBESUFMaW5nIGtsdWRnZSAqLworI2RlZmluZSBGTE9fRElBWCA3CQkJLyog Q2FuY2VsIGRpYWxpbmcga2x1ZGdlICovCisjZGVmaW5lIEZMT19EVFJUIDgJCQkvKiBEVFIvQ1RT IChoYXJkKSAqLworI2RlZmluZSBGTE9fS0VFUCA5CQkJLyogS2VlcCwgaS5lLiBkb24ndCB0b3Vj aCBvciBjaGFuZ2UgKi8KKyNkZWZpbmUgRkxPX0FVVE8gMTAJCQkvKiBGaWd1cmUgb3V0IGF1dG9t YXRpY2FsbHkgKi8KKworLyogVHlwZXMgb2YgY29ubmVjdGlvbnMgKi8KKworI2RlZmluZSBDWFRf UkVNT1RFICAwCQkJLyogUmVtb3RlIG1vZGUgLSBubyBjb25uZWN0aW9uICovCisjZGVmaW5lIENY VF9ESVJFQ1QgIDEJCQkvKiBEaXJlY3Qgc2VyaWFsIGNvbm5lY3Rpb24gKi8KKyNkZWZpbmUgQ1hU X01PREVNICAgMgkJCS8qIE1vZGVtIGRpYWxvdXQgKi8KKyNkZWZpbmUgQ1hUX1RDUElQICAgMwkJ CS8qIFRDUC9JUCAtIFRlbG5ldCwgUmxvZ2luLCBldGMgKi8KKyNkZWZpbmUgQ1hUX1gyNSAgICAg NAkJCS8qIFguMjUgcGVlci10by1wZWVyICovCisjZGVmaW5lIENYVF9ERUNORVQgIDUJCQkvKiBE RUNuZXQgKENURVJNLCBldGMpICovCisjZGVmaW5lIENYVF9MQVQgICAgIDYJCQkvKiBMQVQgKi8K KyNkZWZpbmUgQ1hUX05FVEJJT1MgNwkJCS8qIE5FVEJJT1MgKi8KKyNkZWZpbmUgQ1hUX05QSVBF ICAgOAkJCS8qIE5hbWVkIFBpcGUgKi8KKyNkZWZpbmUgQ1hUX1BJUEUgICAgOQkJCS8qIFBpcGUs IENvbW1hbmQsIFBUWSwgRExMLCBldGMgKi8KKyNkZWZpbmUgQ1hUX1NTSCAgICAgMTAgICAgICAg ICAgICAgICAgICAvKiBTU0ggKi8KKyNkZWZpbmUgQ1hUX01BWCAgICAgMTAJCQkvKiBIaWdoZXN0 IGNvbm5lY3Rpb24gdHlwZSAqLworCisvKiBBdXRvZG93bmxvYWQgRGV0ZWN0aW9uIE9wdGlvbnMg Ki8KKworI2RlZmluZSBBRExfUEFDSyAwCQkJLyogQXV0by1Eb3dubG9hZCBkZXRlY3QgcGFja2V0 ICovCisjZGVmaW5lIEFETF9TVFIgIDEJCQkvKiBBdXRvLURvd25sb2FkIGRldGVjdCBzdHJpbmcg Ki8KKworLyogQW5kIGZpbmFsbHkuLi4gKi8KKworI2lmZGVmIENPTU1FTlQJCQkJLyogTWFrZSBz dXJlIHRoaXMgaXMgTk9UIGRlZmluZWQhICovCisjdW5kZWYgQ09NTUVOVAorI2VuZGlmIC8qIENP TU1FTlQgKi8KKworLyogenN0ciB6YXR0ciBmaWxpbmZvIHdlcmUgaGVyZSAobW92ZWQgdG8gdG9w IGZvciBERUNDIDUgSnVuIDIwMDApICovCisKKyNpZm5kZWYgWkZOUUZQCQkJCS8qIFZlcnNpb25z IHRoYXQgaGF2ZSB6Zm5xZnAoKSAqLworI2lmZGVmIFVOSVgKKyNkZWZpbmUgWkZOUUZQCisjZWxz ZQorI2lmZGVmIFZNUworI2RlZmluZSBaRk5RRlAKKyNlbHNlCisjaWZkZWYgT1MyCisjZGVmaW5l IFpGTlFGUAorI2Vsc2UKKyNpZmRlZiBkYXRhZ2VuZXJhbAorI2RlZmluZSBaRk5RRlAKKyNlbHNl CisjaWZkZWYgU1RSQVRVUworI2RlZmluZSBaRk5RRlAKKyNlbmRpZiAvKiBTVFJBVFVTICovCisj ZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBWTVMg Ki8KKyNlbmRpZiAvKiBVTklYICovCitzdHJ1Y3QgemZuZnAgeworICAgaW50IGxlbjsJCQkJLyog TGVuZ3RoIG9mIGZ1bGwgcGF0aG5hbWUgKi8KKyAgIGNoYXIgKiBmcGF0aDsJCQkvKiBQb2ludGVy IHRvIGZ1bGwgcGF0aG5hbWUgKi8KKyAgIGNoYXIgKiBmbmFtZTsJCQkvKiBQb2ludGVyIHRvIG5h bWUgcGFydCAqLworfTsKKyNlbmRpZiAvKiBaRk5RRlAgKi8KKworLyogU3lzdGVtcyB0aGF0IHN1 cHBvcnQgRklMRSBUWVBFIExBQkVMRUQgKi8KKworI2lmZGVmIFZNUworI2RlZmluZSBDS19MQUJF TEVECisjZWxzZQorI2lmZGVmIE9TMgorI2lmZGVmIF9fMzJCSVRfXworI2lmbmRlZiBOVAorI2Rl ZmluZSBDS19MQUJFTEVECisjZW5kaWYgLyogTlQgKi8KKyNlbmRpZiAvKiBfXzMyQklUX18gKi8K KyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKworLyogTEFCRUxFRCBGSUxFIG9w dGlvbnMgYml0bWFzayAqLworCisjaWZkZWYgVk1TCQkJCS8qIEZvciBWTVMgKi8KKyNkZWZpbmUg TEJMX05BTSAgMQkJCS8qIElnbm9yZSBpbmNvbWluZyBuYW1lIGlmIHNldCAqLworI2RlZmluZSBM QkxfUFRIICAyCQkJLyogVXNlIGNvbXBsZXRlIHBhdGggaWYgc2V0ICovCisjZGVmaW5lIExCTF9B Q0wgIDQJCQkvKiBQcmVzZXJ2ZSBBQ0xzIGlmIHNldCAqLworI2RlZmluZSBMQkxfQkNLICA4CQkJ LyogUHJlc2VydmUgYmFja3VwIGRhdGUgaWYgc2V0ICovCisjZGVmaW5lIExCTF9PV04gMTYJCQkv KiBQcmVzZXJ2ZSBvd25lcnNoaXAgaWYgc2V0ICovCisKKyNlbHNlCisKKyNpZmRlZiBPUzIJCQkJ LyogRGl0dG8gZm9yIE9TLzIgKi8KKyNkZWZpbmUgTEJMX05PUiAgMHgwMDAwCQkJLyogTm9ybWFs IGZpbGUgKi8KKyNkZWZpbmUgTEJMX0FSQyAgMHgwMDIwCQkJLyogQXJjaGl2ZSAqLworI2RlZmlu ZSBMQkxfRElSICAweDAwMTAJCQkvKiBEaXJlY3RvcnkgKi8KKyNkZWZpbmUgTEJMX0hJRCAgMHgw MDAyCQkJLyogSGlkZGVuIGZpbGUgKi8KKyNkZWZpbmUgTEJMX1JPICAgMHgwMDAxCQkJLyogUmVh ZCBvbmx5IGZpbGUgKi8KKyNkZWZpbmUgTEJMX1NZUyAgMHgwMDA0CQkJLyogU3lzdGVtIGZpbGUg Ki8KKyNkZWZpbmUgTEJMX0VYVCAgMHgwMDQwCQkJLyogRXh0ZW5kZWQgKi8KKyNlbmRpZiAvKiBP UzIgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKworLyoKKyAgRGF0YSB0eXBlcy4gIEZpcnN0IHRoZSBo ZWFkZXIgZmlsZSBmb3IgZGF0YSB0eXBlcyBzbyB3ZSBjYW4gcGljayB1cCB0aGUKKyAgdHlwZXMg dXNlZCBmb3IgcGlkcywgdWlkcywgYW5kIGdpZHMuICBPdmVycmlkZSB0aGlzIHNlY3Rpb24gYnkg cHV0dGluZworICAtRENLVFlQX0g9eHh4IG9uIHRoZSBjb21tYW5kIGxpbmUgdG8gc3BlY2lmeSB0 aGUgaGVhZGVyIGZpbGUgd2hlcmUgeW91cgorICBzeXN0ZW0gZGVmaW5lcyB0aGVzZSB0eXBlcy4K KyovCisjaWZuZGVmIFNUUkFUVVMKKyNpZmRlZiBfX0FMUEhBCisjaWZkZWYgTVVMVElORVQKKyNk ZWZpbmUgQ0tfVEdWX0FYUAorI2VuZGlmIC8qIE1VTFRJTkVUICovCisjZW5kaWYgLyogX19BTFBI QSAqLworCisjaWZkZWYgQ0tfVEdWX0FYUAkJCS8qIEFscGhhLCBWTVMsIE11bHRpTmV0ICovCisv KgorICBTdGFydGluZyBpbiBERUNDIDUuMCwgPHN0ZGxpYi5oPiBubyBsb25nZXIgaW5jbHVkZXMg PHR5cGVzLmg+LgorICBCdXQgYmVmb3JlIHRoYXQgYW4gZWxhYm9yYXRlIHdvcmthcm91bmQgaXMg cmVxdWlyZWQsIHdoaWNoIHJlc3VsdHMgaW4KKyAgaW5jbHVkaW5nIDx0eXBlcy5oPiBzb21ldGlt ZXMgYnV0IG5vdCBvdGhlcnMsIGV2aWRlbnRseSBkZXBlbmRpbmcgb24gd2hldGhlcgorICA8dHlw ZXMuaD4gcHJvdGVjdHMgaXRzZWxmIGFnYWluc3QgbXVsdGlwbGUgaW5jbHVzaW9uLCB3aGljaCBp biB0dXJuIHByb2JhYmx5CisgIGRpZmZlcmVudGlhdGVzIGJldHdlZW4gREVDQyA8dHlwZXMuaD4g YW5kIFRHViA8dHlwZXMuaD4uICBVbmZvcnR1bmF0ZWx5IEkKKyAgZG9uJ3QgcmVtZW1iZXIgdGhl IGRldGFpbHMuICAoZmRjLCAyNSBPY3QgOTYpCisqLworI2lmZGVmIENPTU1FTlQKKy8qCisgIFBy ZXZpb3VzbHkgdGhlIHRlc3QgaGVyZSB3YXMgZm9yIERFQyB2ZXJzaW9uIHByaW9yIHRvIDQuMCwg YnV0IHNpbmNlIHRoZQorICB0ZXN0IGludm9sdmVkIGFuICIjaWYiIHN0YXRlbWVudCwgaXQgd2Fz IG5vdCBwb3J0YWJsZSBhbmQgYnJva2Ugc29tZSBub24tVk1TCisgIGJ1aWxkcy4gIEluIGFueSBj YXNlLCBjb25kaXRpb24gd2FzIG5ldmVyIHNhdGlzZmllZCwgc28gdGhlIHJlc3VsdCBvZgorICBj b21tZW50aW5nIHRoaXMgc2VjdGlvbiBvdXQgaXMgdGhlIHNhbWUgYXMgdGhlIHByZXZpb3VzICIj aWYiIGNvbmRpdGlvbi4KKyovCisjaWZuZGVmIF9fVFlQRVNfTE9BREVECisjZGVmaW5lIF9fVFlQ RVNfTE9BREVECQkJLyogV29yayBhcm91bmQgYnVnIGluIC5oIGZpbGVzICovCisjZW5kaWYgLyog X19UWVBFU19MT0FERUQgKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisjaW5jbHVkZSA8c3lzL3R5 cGVzLmg+CisjaWZkZWYgSUZfRE9UX0gKKyNpZm5kZWYgTVVMVElORVQKKyNpbmNsdWRlIDxpZi5o PgkJCQkvKiBOZWVkZWQgdG8gcHV0IHVwIHVfaW50IHR5cGVkZWYgKi8KKyNlbmRpZiAvKiBNVUxU SU5FVCAqLworI2Vsc2UgLyogSUZfRE9UX0ggKi8KKyNpZmRlZiBORUVEVUlOVAordHlwZWRlZiB1 bnNpZ25lZCBpbnQgdV9pbnQ7CisjZW5kaWYgLyogTkVFRFVJTlQgKi8KKyNlbmRpZiAvKiBJRl9E T1RfSCAqLworI2Vsc2UJCQkJCS8qICFDS19UR1ZfQVhQICovCisjaWZkZWYgT1NLCQkJCS8qIE9T LTkgKi8KKyNpbmNsdWRlIDx0eXBlcy5oPgorI2Vsc2UJCQkJCS8qIEdlbmVyYWwgY2FzZSwgbm90 IE9TLTkgKi8KKyNpZm5kZWYgQ0tUWVBfSAorI2lmbmRlZiBWTVMKKyNpZm5kZWYgTUFDCisjaWZu ZGVmIEFNSUdBCisjZGVmaW5lIENLVFlQX0ggPHN5cy90eXBlcy5oPgorI2VuZGlmIC8qIEFNSUdB ICovCisjZW5kaWYgLyogTUFDICovCisjZW5kaWYgLyogVk1TICovCisjZW5kaWYgLyogQ0tUWVBf SCAqLworCisjaWZkZWYgR0VNRE9TCisjdW5kZWYgQ0tUWVBfSAorI2luY2x1ZGUgPHR5cGVzLmg+ CisjZW5kaWYgLyogR0VNRE9TICovCisKKyNpZmRlZiBPUzIKKyN1bmRlZiBDS1RZUF9ICisjaW5j bHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYgLyogT1MyICovCisKKyNpZmRlZiBDS1RZUF9ICQkJ CS8qIEluY2x1ZGUgaXQuICovCisjaWZkZWYgQ09IRVJFTlQJCQkJLyogRXhjZXB0IGZvciBDT0hF UkVOVCAqLworI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2Vs c2UKKyNpZmRlZiBkYXRhZ2VuZXJhbAkJCS8qIEFPUy9WUyAqLworI2luY2x1ZGUgPHN5cy90eXBl cy5oPgorI2Vsc2UgIC8qIEFsbCBvdGhlcnMgKi8KKyNpZmRlZiBfX2JzZGlfXwkJCQkvKiBCU0RJ ICovCisjaWZkZWYgUE9TSVgKKyN1bmRlZiBfUE9TSVhfU09VUkNFCisjZW5kaWYgLyogUE9TSVgg Ki8KKyNlbmRpZiAvKiBfX2JzZGlfXyAqLworI2luY2x1ZGUgQ0tUWVBfSAorI2lmZGVmIF9fYnNk aV9fCisjaWZkZWYgUE9TSVgKKyNkZWZpbmUgX1BPU0lYX1NPVVJDRQorI2VuZGlmIC8qIFBPU0lY ICovCisjZW5kaWYgLyogX19ic2RpX18gKi8KKyNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLworI2Vu ZGlmIC8qIENPSEVSRU5UICovCisjZW5kaWYgLyogQ0tUWVBfSCAqLworCisjZW5kaWYgLyogT1NL ICovCisjZW5kaWYgLyogQ0tfVEdWX0FYUCAqLworI2VuZGlmIC8qIFNUUkFUVVMgKi8JCQkvKiBF bmQgb2YgdHlwZXMuaCBzZWN0aW9uICovCisKKy8qCisgIEZpbGUgbGVuZ3RocyBhbmQgb2Zmc2V0 cy4gIFRoaXMgc2VjdGlvbiBpcyBleHBlY3RlZCB0byBncm93IGFzIHdlCisgIHN1cHBvcnQgbG9u ZyBmaWxlcyBvbiAzMi1iaXQgcGxhdGZvcm1zLiAgV2Ugd2FudCB0aGlzIGRhdGEgdHlwZSB0byBi ZQorICBzaWduZWQgYmVjYXVzZSBzbyBtYW55IGZ1bmN0aW9ucyByZXR1cm4gZWl0aGVyIGEgZmls ZSBzaXplIG9yIGEgbmVnYXRpdmUKKyAgdmFsdWUgdG8gaW5kaWNhdGUgYW4gZXJyb3IuCisqLwor I2lmbmRlZiBDS19PRkZfVAorI2lmZGVmIE9TMgorI2lmZGVmIE5UCisjZGVmaW5lIENLX09GRl9U IF9faW50NjQKKyNlbHNlCisjZGVmaW5lIENLX09GRl9UIGxvbmcKKyNlbmRpZiAgLyogTlQgKi8K KyNlbmRpZgkvKiBPUzIgKi8KKyNlbmRpZgkvKiBDS19PRkZfVCAqLworCisvKiBGcmVlQlNEIGFu ZCBPcGVuQlNEIHNldCBvZmZfdCB0byB0aGUgYXBwcm9wcmlhdGUgc2l6ZSB1bmNvbmRpdGlvbmFs bHkgKi8KKworI2lmbmRlZiBDS19PRkZfVAorI2lmZGVmIF9fRnJlZUJTRF9fCisjZGVmaW5lIENL X09GRl9UIG9mZl90CisjZWxzZQorI2lmZGVmIF9fT3BlbkJTRF9fCisjZGVmaW5lIENLX09GRl9U IG9mZl90CisjZW5kaWYJLyogX19PcGVuQlNEX18gKi8KKyNlbmRpZgkvKiBfX0ZyZWVCU0RfXyAq LworI2VuZGlmCS8qIENLX09GRl9UICovCisKKy8qIDMyLWJpdCBwbGF0Zm9ybXMgdGhhdCBzdXBw b3J0IGxvbmcgZmlsZXMgdGhydSAidHJhbnNpdGlvbmFsIGludGVyZmFjZSIgKi8KKy8qIFRoZXNl IGluY2x1ZGUgTGludXgsIFNvbGFyaXMsIE5ldEJTRC4uLiAqLworCisjaWZkZWYgQUlYUlMKKyNp ZmRlZiBfTEFSR0VfRklMRVMKKyNpZm5kZWYgQ0tfT0ZGX1QKKyNkZWZpbmUgQ0tfT0ZGX1Qgb2Zm X3QKKyNlbmRpZgkvKiBDS19PRkZfVCAqLworI2VuZGlmCS8qIF9MQVJHRV9GSUxFUyAqLworI2Vu ZGlmCS8qIEFJWFJTICovCisKKyNpZmRlZiBfTEFSR0VGSUxFX1NPVVJDRQorI2lmbmRlZiBDS19P RkZfVAorI2RlZmluZSBDS19PRkZfVCBvZmZfdAorI2VuZGlmCS8qIENLX09GRl9UICovCisjaWZk ZWYgSVJJWAorI2RlZmluZSBDS0ZTRUVLKGEsYixjKSBmc2VlazY0KGEsYixjKQorI2RlZmluZSBD S0ZURUxMKGEpIGZ0ZWxsNjQoYSkKKyNlbHNlIC8qIElSSVggKi8KKyNkZWZpbmUgQ0tGU0VFSyhh LGIsYykgZnNlZWtvKGEsYixjKQorI2RlZmluZSBDS0ZURUxMKGEpIGZ0ZWxsbyhhKQorI2VuZGlm CS8qIElSSVggKi8KKyNlbHNlICAvKiBOb3QgIF9MQVJHRUZJTEVfU09VUkNFICovCisjZGVmaW5l IENLRlNFRUsoYSxiLGMpIGZzZWVrKGEsYixjKQorI2RlZmluZSBDS0ZURUxMKGEpIGZ0ZWxsKGEp CisvKiBTZWUgYmVsb3cgdGhlIG5leHQgc2VjdGlvbiBmb3IgdGhlIGNhdGNoLWFsbCBjYXNlICov CisjZW5kaWYJLyogX0xBUkdFRklMRV9TT1VSQ0UgKi8KKworLyogMzItYml0IG9yIDY0LWJpdCBw bGF0Zm9ybXMgKi8KKworLyogQ0tfNjRCSVQgaXMgYSBjb21waWxlLXRpbWUgc3ltYm9sIGluZGlj YXRpbmcgYSB0cnVlIDY0LWJpdCBidWlsZCAqLworLyogbWVhbmluZyB0aGF0IGxvbmdzIGFuZCBw b2ludGVycyBhcmUgNjQgYml0cyAqLworCisjaWZuZGVmIFZNUwkJCQkvKiBWTVMgQWxwaGEgYW5k IElBNjQgYXJlIDMyLWJpdCEgKi8KKyNpZm5kZWYgQ0tfNjRCSVQKKyNpZmRlZiBfTFA2NAkJCQkv KiBTb2xhcmlzICovCisjZGVmaW5lIENLXzY0QklUCisjZWxzZQorI2lmZGVmIF9fTFA2NF9fCQkJ CS8qIE1hY09TIFggMTAuNCAob3IgX0xQNjQsX19wcGM2NF9fKSAqLworI2RlZmluZSBDS182NEJJ VAorI2Vsc2UKKyNpZmRlZiBfX2FyY2g2NF9fCQkJLyogZ2NjIGFscGhhLCBzcGFyYyAqLworI2Rl ZmluZSBDS182NEJJVAorI2Vsc2UKKyNpZmRlZiBfX2FscGhhCQkJCS8qIEFscGhhIGRlY2MgKG9y IF9fQUxQSEEpICovCisjZGVmaW5lIENLXzY0QklUCisjZWxzZQorI2lmZGVmIF9fYW1kNjQJCQkJ LyogQU1EIHg4Nl82NCAob3IgX194ODZfNjQpICovCisjZGVmaW5lIENLXzY0QklUCisjZWxzZQor I2lmZGVmIF9faWE2NAkJCQkvKiBJbnRlbCBJQTY0ICovCisjaWZuZGVmIEhQVVgKKyNkZWZpbmUg Q0tfNjRCSVQKKyNlbmRpZgkvKiBIUFVYICovCisjZW5kaWYJLyogX19pYTY0ICovCisjZW5kaWYJ LyogX19hbWQ2NCAqLworI2VuZGlmCS8qIF9fYWxwaGEgKi8KKyNlbmRpZgkvKiBfX2FyY2g2NF9f ICovCisjZW5kaWYJLyogX19MUDY0X18gKi8KKyNlbmRpZgkvKiBfTFA2NCAqLworI2VuZGlmCS8q IENLXzY0QklUICovCisjZW5kaWYJLyogVk1TICovCisKKyNpZm5kZWYgQ0tfT0ZGX1QKKyNpZmRl ZiBDS182NEJJVAorI2RlZmluZSBDS19PRkZfVCBvZmZfdAkJCS8qIFRoaXMgaGFzIHRvIGJlIHNp Z25lZCAqLworI2Vsc2UgIC8qIENLXzY0QklUICovCisjZGVmaW5lIENLX09GRl9UIGxvbmcJCQkv KiBTaWduZWQgKi8KKyNlbmRpZgkvKiBDS182NEJJVCAqLworI2VuZGlmCS8qIENLX09GRl9UICov CisKKyNpZm5kZWYgVExPRworI2RlZmluZSB0bG9nKGEsYixjLGQpCisjZWxzZQorI2lmbmRlZiBD S0NNQUkKKy8qIERlYnVnZ2luZyBpbmNsdWRlZC4gIERlY2xhcmUgZGVidWcgbG9nIGZsYWcgaW4g bWFpbiBwcm9ncmFtIG9ubHkuICovCitleHRlcm4gaW50IHRyYWxvZywgdGxvZ2ZtdDsKKyNlbmRp ZiAvKiBDS0NNQUkgKi8KK19QUk9UT1RZUChWT0lEIGRvdGxvZywoaW50LCBjaGFyICosIGNoYXIg KiwgQ0tfT0ZGX1QpKTsKKyNkZWZpbmUgdGxvZyhhLGIsYyxkKSBpZiAodHJhbG9nICYmIHRsb2dm bXQpIGRvdGxvZyhhLGIsYywoQ0tfT0ZGX1QpZCkKK19QUk9UT1RZUChWT0lEIGRveGxvZywoaW50 LCBjaGFyICosIENLX09GRl9ULCBpbnQsIGludCwgY2hhciAqKSk7CisjZW5kaWYgLyogVExPRyAq LworCisjaWZuZGVmIERFQlVHCisvKiBDb21waWxlIGFsbCB0aGUgZGVidWcoKSBzdGF0ZW1lbnRz IGF3YXkuICBTYXZlcyBhIGxvdCBvZiBzcGFjZSBhbmQgdGltZS4gKi8KKyNkZWZpbmUgZGVidWco YSxiLGMsZCkKKyNkZWZpbmUgY2toZXhkdW1wKGEsYixjKQorLyogTm93IGRlZmluZSB0aGUgZGVi dWcoKSBtYWNyby4gKi8KKyNlbHNlIC8qIERFQlVHICovCitfUFJPVE9UWVAoaW50IGRvZGVidWcs KGludCxjaGFyICosY2hhciAqLENLX09GRl9UKSk7CitfUFJPVE9UWVAoaW50IGRvaGV4ZHVtcCwo Q0hBUiAqLENIQVIgKixpbnQpKTsKKyNpZmRlZiBJRkRFQlVHCisvKiBVc2UgdGhpcyBmb3JtIHRv IGF2b2lkIGZ1bmN0aW9uIGNhbGxzOiAqLworI2lmZGVmIENPTU1FTlQKKyNkZWZpbmUgZGVidWco YSxiLGMsZCkgaWYgKGRlYmxvZykgZG9kZWJ1ZyhhLGIsKGNoYXIgKikoYyksKENLX09GRl9UKShk KSkKKyNkZWZpbmUgY2toZXhkdW1wKGEsYixjKSBpZiAoZGVibG9nKSBkb2hleGR1bXAoKENIQVIg KikoYSksKENIQVIgKikoYiksYykKKyNlbHNlCisjaWZkZWYgQ0tfQU5TSUMKKyNkZWZpbmUgZGVi dWcoYSxiLGMsZCkgXAorKCh2b2lkKShkZWJsb2c/ZG9kZWJ1ZyhhLGIsKGNoYXIgKikoYyksKENL X09GRl9UKShkKSk6MCkpCisjZGVmaW5lIGNraGV4ZHVtcChhLGIsYykgXAorKCh2b2lkKShkZWJs b2c/ZG9oZXhkdW1wKChDSEFSICopKGEpLChDSEFSICopKGIpLGMpOjApKQorI2Vsc2UKKyNkZWZp bmUgZGVidWcoYSxiLGMsZCkgKGRlYmxvZz9kb2RlYnVnKGEsYiwoY2hhciAqKShjKSwoQ0tfT0ZG X1QpKGQpKTowKQorI2RlZmluZSBja2hleGR1bXAoYSxiLGMpIChkZWJsb2c/ZG9oZXhkdW1wKChD SEFSICopKGEpLChDSEFSICopKGIpLGMpOjApCisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKyNlbmRp ZiAvKiBDT01NRU5UICovCisjZWxzZSAvKiBJRkRFQlVHICovCisvKiBVc2UgdGhpcyBmb3JtIHRv IHNhdmUgc3BhY2U6ICovCisjZGVmaW5lIGRlYnVnKGEsYixjLGQpIGRvZGVidWcoYSxiLChjaGFy ICopKGMpLChDS19PRkZfVCkoZCkpCisjZGVmaW5lIGNraGV4ZHVtcChhLGIsYykgZG9oZXhkdW1w KChDSEFSICopKGEpLChDSEFSICopKGIpLGMpCisjZW5kaWYgLyogSUZERUJVRyAqLworI2VuZGlm IC8qIERFQlVHICovCisKKworLyogU3RydWN0dXJlIGRlZmluaXRpb25zIGZvciBLZXJtaXQgZmls ZSBhdHRyaWJ1dGVzICovCisvKiBBbGwgc3RyaW5ncyBjb21lIGFzIHBvaW50ZXIgYW5kIGxlbmd0 aCBjb21iaW5hdGlvbnMgKi8KKy8qIEVtcHR5IHN0cmluZyAob3IgZm9yIG51bWVyaWMgdmFyaWFi bGVzLCAtMSkgPSB1bnVzZWQgYXR0cmlidXRlLiAqLworCitzdHJ1Y3QgenN0ciB7ICAgICAgICAg ICAgIC8qIHN0cmluZyBmb3JtYXQgKi8KKyAgICBpbnQgbGVuOwkgICAgICAgICAgLyogbGVuZ3Ro ICovCisgICAgY2hhciAqdmFsOyAgICAgICAgICAgIC8qIHZhbHVlICovCit9OworCitzdHJ1Y3Qg emF0dHIgeyAgICAgICAgICAgIC8qIEtlcm1pdCBGaWxlIEF0dHJpYnV0ZSBzdHJ1Y3R1cmUgKi8K KyAgICBDS19PRkZfVCBsZW5ndGhrOwkgIC8qICghKSBmaWxlIGxlbmd0aCBpbiBLICovCisgICAg c3RydWN0IHpzdHIgdHlwZTsgICAgIC8qICgiKSBmaWxlIHR5cGUgKHRleHQgb3IgYmluYXJ5KSAq LworICAgIHN0cnVjdCB6c3RyIGRhdGU7ICAgICAvKiAoIykgZmlsZSBjcmVhdGlvbiBkYXRlIHl5 eXltbWRkWyBoaDptbVs6c3NdXSAqLworICAgIHN0cnVjdCB6c3RyIGNyZWF0b3I7ICAvKiAoJCkg ZmlsZSBjcmVhdG9yIGlkICovCisgICAgc3RydWN0IHpzdHIgYWNjb3VudDsgIC8qICglKSBmaWxl IGFjY291bnQgKi8KKyAgICBzdHJ1Y3QgenN0ciBhcmVhOyAgICAgLyogKCYpIGFyZWEgKGUuZy4g ZGlyZWN0b3J5KSBmb3IgZmlsZSAqLworICAgIHN0cnVjdCB6c3RyIHBhc3N3b3JkOyAvKiAoJykg cGFzc3dvcmQgZm9yIGFyZWEgKi8KKyAgICBsb25nIGJsa3NpemU7ICAgICAgICAgLyogKCgpIGZp bGUgYmxvY2tzaXplICovCisgICAgc3RydWN0IHpzdHIgeGFjY2VzczsgIC8qICgpKSBmaWxlIGFj Y2VzczogbmV3LCBzdXBlcnNlZGUsIGFwcGVuZCwgd2FybiAqLworICAgIHN0cnVjdCB6c3RyIGVu Y29kaW5nOyAvKiAoKikgZW5jb2RpbmcgKHRyYW5zZmVyIHN5bnRheCkgKi8KKyAgICBzdHJ1Y3Qg enN0ciBkaXNwOyAgICAgLyogKCspIGRpc3Bvc2l0aW9uIChtYWlsLCBtZXNzYWdlLCBwcmludCwg ZXRjKSAqLworICAgIHN0cnVjdCB6c3RyIGxwcm90ZWN0OyAvKiAoLCkgcHJvdGVjdGlvbiAobG9j YWwgc3ludGF4KSAqLworICAgIHN0cnVjdCB6c3RyIGdwcm90ZWN0OyAvKiAoLSkgcHJvdGVjdGlv biAoZ2VuZXJpYyBzeW50YXgpICovCisgICAgc3RydWN0IHpzdHIgc3lzdGVtaWQ7IC8qICguKSBJ RCBmb3Igc3lzdGVtIG9mIG9yaWdpbiAqLworICAgIHN0cnVjdCB6c3RyIHJlY2ZtOyAgICAvKiAo LykgcmVjb3JkIGZvcm1hdCAqLworICAgIHN0cnVjdCB6c3RyIHN5c3BhcmFtOyAvKiAoMCkgc3lz dGVtLWRlcGVuZGVudCBwYXJhbWV0ZXIgc3RyaW5nICovCisgICAgQ0tfT0ZGX1QgbGVuZ3RoOyAg ICAgIC8qICgxKSBleGFjdCBsZW5ndGggb24gc3lzdGVtIG9mIG9yaWdpbiAqLworICAgIHN0cnVj dCB6c3RyIGNoYXJzZXQ7ICAvKiAoMikgdHJhbnNmZXIgc3ludGF4IGNoYXJhY3RlciBzZXQgKi8K KyNpZmRlZiBPUzIKKyAgICBzdHJ1Y3QgenN0ciBsb25nbmFtZTsgLyogT1MvMiBsb25nbmFtZSBp ZiBhcHBsaWNhYmxlICovCisjZW5kaWYgLyogT1MyICovCisgICAgc3RydWN0IHpzdHIgcmVwbHk7 ICAgIC8qIFRoaXMgZ29lcyBsYXN0LCB1c2VkIGZvciBhdHRyaWJ1dGUgcmVwbHkgKi8KK307CisK Ky8qIEtlcm1pdCBmaWxlIGluZm9ybWF0aW9uIHN0cnVjdHVyZSAqLworCitzdHJ1Y3QgZmlsaW5m byB7CisgIGludCBiczsJCQkJLyogQmxvY2tzaXplICovCisgIGludCBjczsJCQkJLyogQ2hhcmFj dGVyIHNldCAqLworICBsb25nIHJsOwkJCQkvKiBSZWNvcmQgbGVuZ3RoICovCisgIGludCBvcmc7 CQkJCS8qIE9yZ2FuaXphdGlvbiAqLworICBpbnQgZm10OwkJCQkvKiBSZWNvcmQgZm9ybWF0ICov CisgIGludCBjYzsJCQkJLyogQ2FycmlhZ2UgY29udHJvbCAqLworICBpbnQgdHlwOwkJCQkvKiBU eXBlICh0ZXh0L2JpbmFyeSkgKi8KKyAgaW50IGRzcDsJCQkJLyogRGlzcG9zaXRpb24gKi8KKyAg Y2hhciAqb3Nfc3BlY2lmaWM7CQkJLyogT1Mtc3BlY2lmaWMgYXR0cmlidXRlcyAqLworI2lmZGVm IE9TMgorICB1bnNpZ25lZCBsb25nIGludCBsYmxvcHRzOwkJLyogTEFCRUxFRCBGSUxFIG9wdGlv bnMgYml0bWFzayAqLworI2Vsc2UKKyAgaW50IGxibG9wdHM7CisjZW5kaWYgLyogT1MyICovCit9 OworCisKKy8qCisgIERhdGEgdHlwZSBmb3IgcGlkcy4gIElmIHlvdXIgc3lzdGVtIHVzZXMgYSBk aWZmZXJlbnQgdHlwZSwgcHV0IHNvbWV0aGluZworICBsaWtlIC1EUElEX1Q9cGlkX3Qgb24gY29t bWFuZCBsaW5lLCBvciBvdmVycmlkZSBoZXJlLgorKi8KKyNpZm5kZWYgUElEX1QKKyNkZWZpbmUg UElEX1QgaW50CisjZW5kaWYgLyogUElEX1QgKi8KKy8qCisgIERhdGEgdHlwZXMgZm9yIHVpZHMg YW5kIGdpZHMuICBTYW1lIGRlYWwgYXMgZm9yIHBpZHMuCisgIFdvdWxkbid0IGJlIG5pY2UgaWYg dGhlcmUgd2FzIGEgcHJlcHJvY2Vzc29yIHRlc3QgdG8gZmluZCBvdXQgaWYgYQorICB0eXBlZGVm IGV4aXN0ZWQ/CisqLworI2lmZGVmIFZNUworLyogTm90IHVzZWQgaW4gVk1TIHNvIHdobyBjYXJl cyAqLworI2RlZmluZSBVSURfVCBpbnQKKyNkZWZpbmUgR0lEX1QgaW50CisjZW5kaWYgLyogVk1T ICovCisKKyNpZmRlZiBQT1NJWAorLyogT3Igd291bGQgaXQgYmUgYmV0dGVyIChvciB3b3JzZT8p IHRvIHVzZSBfUE9TSVhfU09VUkNFIGhlcmU/ICovCisjaWZuZGVmIFVJRF9UCisjZGVmaW5lIFVJ RF9UIHVpZF90CisjZW5kaWYgLyogVUlEX1QgKi8KKyNpZm5kZWYgR0lEX1QKKyNkZWZpbmUgR0lE X1QgZ2lkX3QKKyNlbmRpZiAvKiBHSURfVCAqLworI2Vsc2UgLyogTm90IFBPU0lYICovCisjaWZk ZWYgU1ZSNAorLyogU1ZSNCBhbmQgbGF0ZXIgaGF2ZSB1aWRfdCBhbmQgZ2lkX3QuICovCisvKiBT VlIzIGFuZCBlYXJsaWVyIHVzZSBpbnQsIG9yIHVuc2lnbmVkIHNob3J0LCBvci4uLi4gKi8KKyNp Zm5kZWYgVUlEX1QKKyNkZWZpbmUgVUlEX1QgdWlkX3QKKyNlbmRpZiAvKiBVSURfVCAqLworI2lm bmRlZiBHSURfVAorI2RlZmluZSBHSURfVCBnaWRfdAorI2VuZGlmIC8qIEdJRF9UICovCisjZWxz ZSAvKiBOb3QgU1ZSNCAqLworI2lmZGVmIEJTRDQzCisjaWZuZGVmIFVJRF9UCisjZGVmaW5lIFVJ RF9UIHVpZF90CisjZW5kaWYgLyogVUlEX1QgKi8KKyNpZm5kZWYgR0lEX1QKKyNkZWZpbmUgR0lE X1QgZ2lkX3QKKyNlbmRpZiAvKiBHSURfVCAqLworI2Vsc2UgLyogTm90IEJTRDQzICovCisvKiBE ZWZhdWx0IHRoZXNlIHRvIGludCBmb3Igb2xkZXIgVU5JWCB2ZXJzaW9ucyAqLworI2lmbmRlZiBV SURfVAorI2RlZmluZSBVSURfVCBpbnQKKyNlbmRpZiAvKiBVSURfVCAqLworI2lmbmRlZiBHSURf VAorI2RlZmluZSBHSURfVCBpbnQKKyNlbmRpZiAvKiBHSURfVCAqLworI2VuZGlmIC8qIEJTRDQz ICovCisjZW5kaWYgLyogU1ZSNCAgKi8KKyNlbmRpZiAvKiBQT1NJWCAqLworCisvKgorICBnZXRw d3VpZCgpIGFyZyB0eXBlLCB3aGljaCBpcyBub3QgbmVjZXNzYXJpbHkgdGhlIHNhbWUgYXMgVUlE X1QsCisgIGUuZy4gaW4gU0NPIFVOSVggU1ZSMywgaXQncyBpbnQuCisqLworI2lmbmRlZiBQV0lE X1QKKyNkZWZpbmUgUFdJRF9UIFVJRF9UCisjZW5kaWYgLyogUFdJRF9UICovCisKKyNpZmRlZiBD S19SRURJUgorI2lmZGVmIE5FWFQKKyNkZWZpbmUgTUFDSFdBSVQKKyNlbHNlCisjaWZkZWYgTUFD SAorI2RlZmluZSBNQUNIV0FJVAorI2VuZGlmIC8qIE1BQ0ggKi8KKyNlbmRpZiAvKiBORVhUICov CisKKyNpZmRlZiBNQUNIV0FJVAkJCQkvKiBXQUlUX1QgYXJndW1lbnQgZm9yIHdhaXQoKSAqLwor I2luY2x1ZGUgPHN5cy93YWl0Lmg+CisjZGVmaW5lIENLX1dBSVRfSAordHlwZWRlZiB1bmlvbiB3 YWl0IFdBSVRfVDsKKyNlbHNlCisjaWZkZWYgUE9TSVgKKyNpZmRlZiBPU0YKKy8qIE9TRiB3YWl0 LmggZGVmaW5lcyBCU0Qgd2FpdCBpZiBfQlNEIGlzIGRlZmluZWQgc28gIGhpZGUgX0JTRCBmcm9t IHdhaXQuaCAqLworI2lmZGVmIF9CU0QKKyNkZWZpbmUgQ0tfT1NGX0JTRAorI3VuZGVmICBfQlNE CisjZW5kaWYgLyogX0JTRCAqLworI2VuZGlmIC8qIE9TRiAqLworI2luY2x1ZGUgPHN5cy93YWl0 Lmg+CisjZGVmaW5lIENLX1dBSVRfSAorI2lmbmRlZiBXQUlUX1QKK3R5cGVkZWYgaW50IFdBSVRf VDsKKyNlbmRpZiAvKiBXQUlUX1QgKi8KKyNpZmRlZiBDS19PU0ZfQlNECQkJLyogT1NGLzE6IFJl c3RvcmUgIF9CU0QgZGVmaW5pdGlvbiAqLworI2RlZmluZSBfQlNECisjdW5kZWYgQ0tfT1NGX0JT RAorI2VuZGlmIC8qIENLX09TRl9CU0QgKi8KKyNlbHNlIC8qICFQT1NJWCAqLwordHlwZWRlZiBp bnQgV0FJVF9UOworI2VuZGlmIC8qIFBPU0lYICovCisjZW5kaWYgLyogTUFDSFdBSVQgKi8KKyNl bHNlCit0eXBlZGVmIGludCBXQUlUX1Q7CisjZW5kaWYgLyogQ0tfUkVESVIgKi8KKworLyogQXNz b3J0ZWQgb3RoZXIgYmxhaF90J3MgaGFuZGxlZCBoZXJlLi4uICovCisKKyNpZm5kZWYgU0laRV9U CisjZGVmaW5lIFNJWkVfVCBzaXplX3QKKyNlbmRpZiAvKiBTSVpFX1QgKi8KKworLyogRm9yd2Fy ZCBkZWNsYXJhdGlvbnMgb2Ygc3lzdGVtLWRlcGVuZGVudCBmdW5jdGlvbnMgY2FsbGFibGUgZnJv bSBhbGwgKi8KKy8qIEMtS2VybWl0IG1vZHVsZXMuICovCisKKy8qIEZpbGUtcmVsYXRlZCBmdW5j dGlvbnMgZnJvbSBzeXN0ZW0tZGVwZW5kZW50IGZpbGUgaS9vIG1vZHVsZSAqLworCisjaWZuZGVm IENLVkZJT19DCisvKiBGb3Igc29tZSByZWFzb24sIHRoaXMgZG9lcyBub3QgYWdyZWUgd2l0aCBE RUMgQyAqLworX1BST1RPVFlQKCBpbnQgemtzZWxmLCAodm9pZCkgKTsKKyNlbmRpZiAvKiBDS1ZG SU9fQyAqLworX1BST1RPVFlQKCBpbnQgem9wZW5pLCAoaW50LCBjaGFyICopICk7CitfUFJPVE9U WVAoIGludCB6b3Blbm8sIChpbnQsIGNoYXIgKiwgc3RydWN0IHphdHRyICosIHN0cnVjdCBmaWxp bmZvICopICk7CitfUFJPVE9UWVAoIGludCB6Y2xvc2UsIChpbnQpICk7CisjaWZuZGVmIE1BQwor X1BST1RPVFlQKCBpbnQgemNoaW4sIChpbnQsIGludCAqKSApOworI2VuZGlmIC8qIE1BQyAqLwor X1BST1RPVFlQKCBpbnQgenhpbiwgKGludCwgY2hhciAqLCBpbnQpICk7CitfUFJPVE9UWVAoIGlu dCB6c2lubCwgKGludCwgY2hhciAqLCBpbnQpICk7CitfUFJPVE9UWVAoIGludCB6aW5maWxsLCAo dm9pZCkgKTsKK19QUk9UT1RZUCggaW50IHpzb3V0LCAoaW50LCBjaGFyKikgKTsKK19QUk9UT1RZ UCggaW50IHpzb3V0bCwgKGludCwgY2hhciopICk7CitfUFJPVE9UWVAoIGludCB6c291dHgsIChp bnQsIGNoYXIqLCBpbnQpICk7CitfUFJPVE9UWVAoIGludCB6Y2hvdXQsIChpbnQsIGNoYXIpICk7 CitfUFJPVE9UWVAoIGludCB6b3V0ZHVtcCwgKHZvaWQpICk7CitfUFJPVE9UWVAoIGludCB6c3lz Y21kLCAoY2hhciAqKSApOworX1BST1RPVFlQKCBpbnQgenNoY21kLCAoY2hhciAqKSApOworI2lm ZGVmIFVOSVgKK19QUk9UT1RZUCggaW50IHpzZXRmaWwsIChpbnQsIGludCkgKTsKK19QUk9UT1RZ UCggaW50IHpjaGtwaWQsICh1bnNpZ25lZCBsb25nKSApOworI2VuZGlmCS8qIFVOSVggKi8KKyNp ZmRlZiBDS0VYRUMKK19QUk9UT1RZUCggVk9JRCB6X2V4ZWMsIChjaGFyICosIGNoYXIgKiosIGlu dCkgKTsKKyNlbmRpZiAvKiBDS0VYRUMgKi8KK19QUk9UT1RZUCggaW50IGNoa2ZuLCAoaW50KSAp OworX1BST1RPVFlQKCBDS19PRkZfVCB6Y2hraSwgKGNoYXIgKikgKTsKKyNpZmRlZiBWTVNPUlVO SVgKK19QUk9UT1RZUCggQ0tfT0ZGX1QgemdldGZzLCAoY2hhciAqKSApOworI2Vsc2UKKyNpZmRl ZiBPUzIKK19QUk9UT1RZUCggQ0tfT0ZGX1QgemdldGZzLCAoY2hhciAqKSApOworI2Vsc2UKKyNk ZWZpbmUgemdldGZzKGEpIHpjaGtpKGEpCisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogVk1T T1JVTklYICovCitfUFJPVE9UWVAoIGludCBpc3dpbGQsIChjaGFyICopICk7CitfUFJPVE9UWVAo IGludCBpc2RpciwgKGNoYXIgKikgKTsKK19QUk9UT1RZUCggaW50IHpjaGtvLCAoY2hhciAqKSAp OworX1BST1RPVFlQKCBpbnQgemRlbGV0LCAoY2hhciAqKSApOworX1BST1RPVFlQKCBWT0lEIHpy dG9sLCAoY2hhciAqLGNoYXIgKikgKTsKK19QUk9UT1RZUCggVk9JRCB6bHRvciwgKGNoYXIgKixj aGFyICopICk7CitfUFJPVE9UWVAoIFZPSUQgenN0cmlwLCAoY2hhciAqLGNoYXIgKiopICk7Cisj aWZkZWYgVk1TCitfUFJPVE9UWVAoIGNoYXIgKiB6cmVsbmFtZSwgKGNoYXIgKiwgY2hhciAqKSAp OworI2VuZGlmIC8qIFZNUyAqLworX1BST1RPVFlQKCBpbnQgemNoZGlyLCAoY2hhciAqKSApOwor X1BST1RPVFlQKCBjaGFyICogemhvbWUsICh2b2lkKSApOworX1BST1RPVFlQKCBjaGFyICogemd0 ZGlyLCAodm9pZCkgKTsKK19QUk9UT1RZUCggaW50IHp4Y21kLCAoaW50LCBjaGFyICopICk7Cisj aWZuZGVmIE1BQworX1BST1RPVFlQKCBpbnQgemNsb3NmLCAoaW50KSApOworI2VuZGlmIC8qIE1B QyAqLworI2lmZGVmIE5aWFBBTkQKK19QUk9UT1RZUCggaW50IG56eHBhbmQsIChjaGFyICosIGlu dCkgKTsKKyNlbHNlIC8qIE5aWFBBTkQgKi8KK19QUk9UT1RZUCggaW50IHp4cGFuZCwgKGNoYXIg KikgKTsKKyNlbmRpZiAvKiBOWlhQQU5EICovCitfUFJPVE9UWVAoIGludCB6bmV4dCwgKGNoYXIg KikgKTsKKyNpZmRlZiBaWFJFV0lORAorX1BST1RPVFlQKCBpbnQgenhyZXdpbmQsICh2b2lkKSAp OworI2VuZGlmIC8qIFpYUkVXSU5EICovCitfUFJPVE9UWVAoIGludCB6Y2hrc3BhLCAoY2hhciAq LCBDS19PRkZfVCkgKTsKK19QUk9UT1RZUCggVk9JRCB6bmV3biwgKGNoYXIgKiwgY2hhciAqKikg KTsKK19QUk9UT1RZUCggaW50IHpyZW5hbWUsIChjaGFyICosIGNoYXIgKikgKTsKK19QUk9UT1RZ UCggaW50IHpjb3B5LCAoY2hhciAqLCBjaGFyICopICk7CitfUFJPVE9UWVAoIGludCB6c2F0dHIs IChzdHJ1Y3QgemF0dHIgKikgKTsKK19QUk9UT1RZUCggaW50IHpmcmVlLCAoY2hhciAqKSApOwor X1BST1RPVFlQKCBjaGFyICogemZjZGF0LCAoY2hhciAqKSApOworX1BST1RPVFlQKCBpbnQgenN0 aW1lLCAoY2hhciAqLCBzdHJ1Y3QgemF0dHIgKiwgaW50KSApOworI2lmZGVmIENLX1BFUk1TCitf UFJPVE9UWVAoIGNoYXIgKiB6Z3Blcm0sIChjaGFyICopICk7CitfUFJPVE9UWVAoIGNoYXIgKiB6 aXBlcm0sIChjaGFyICopICk7CisjZW5kaWYgLyogQ0tfUEVSTVMgKi8KK19QUk9UT1RZUCggaW50 IHptYWlsLCAoY2hhciAqLCBjaGFyICopICk7CitfUFJPVE9UWVAoIGludCB6cHJpbnQsIChjaGFy ICosIGNoYXIgKikgKTsKK19QUk9UT1RZUCggY2hhciAqIHRpbGRlX2V4cGFuZCwgKGNoYXIgKikg KTsKK19QUk9UT1RZUCggaW50IHpta2RpciwgKGNoYXIgKikgKSA7CitfUFJPVE9UWVAoIGludCB6 ZnNlZWssIChDS19PRkZfVCkgKSA7CisjaWZkZWYgWkZOUUZQCitfUFJPVE9UWVAoIHN0cnVjdCB6 Zm5mcCAqIHpmbnFmcCwgKGNoYXIgKiwgaW50LCBjaGFyICogKSApIDsKKyNlbHNlCisjZGVmaW5l IHpmbnFmcChhLGIsYykgY2tzdHJuY3B5KGMsYSxiKQorI2VuZGlmIC8qIFpGTlFGUCAqLworX1BS T1RPVFlQKCBpbnQgenZ1c2VyLCAoY2hhciAqKSApIDsKK19QUk9UT1RZUCggaW50IHp2cGFzcywg KGNoYXIgKikgKSA7CitfUFJPVE9UWVAoIFZPSUQgenZsb2dvdXQsICh2b2lkKSApIDsKKyNpZmRl ZiBPUzIKK19QUk9UT1RZUCggaW50IG9zMnNldGxvbmduYW1lLCAoIGNoYXIgKiBmbiwgY2hhciAq IGxuICkgKSA7CitfUFJPVE9UWVAoIGludCBvczJnZXRsb25nbmFtZSwgKCBjaGFyICogZm4sIGNo YXIgKiogbG4gKSApIDsKK19QUk9UT1RZUCggaW50IG9zMnJleHgsICggY2hhciAqLCBjaGFyICos IGludCApICkgOworX1BST1RPVFlQKCBpbnQgb3MycmV4eGZpbGUsICggY2hhciAqLCBjaGFyICos IGNoYXIgKiwgaW50KSApIDsKK19QUk9UT1RZUCggaW50IG9zMmdldGVhcywgKGNoYXIgKikgKSA7 CitfUFJPVE9UWVAoIGludCBvczJzZXRlYXMsIChjaGFyICopICkgOworX1BST1RPVFlQKCBjaGFy ICogZ2V0X29zMl92ZXJzLCAodm9pZCkgKSA7CitfUFJPVE9UWVAoIGludCBkb19sYWJlbF9zZW5k LCAoY2hhciAqKSApIDsKK19QUk9UT1RZUCggaW50IGRvX2xhYmVsX3JlY3YsICh2b2lkKSApIDsK KyNpZmRlZiBPUzJNT1VTRQorX1BST1RPVFlQKCB1bnNpZ25lZCBsb25nIG9zMl9tb3VzZW9uLCAo dm9pZCkgKTsKK19QUk9UT1RZUCggdW5zaWduZWQgbG9uZyBvczJfbW91c2VoaWRlLCAodm9pZCkg KTsKK19QUk9UT1RZUCggdW5zaWduZWQgbG9uZyBvczJfbW91c2VzaG93LCAodm9pZCkgKTsKK19Q Uk9UT1RZUCggdW5zaWduZWQgbG9uZyBvczJfbW91c2VvZmYsICh2b2lkKSApOworX1BST1RPVFlQ KCB2b2lkIG9zMl9tb3VzZWV2dCwgKHZvaWQgKikgKTsKK19QUk9UT1RZUCggaW50IG1vdXNlYnV0 dG9uY291bnQsICh2b2lkKSk7CisjZW5kaWYgLyogT1MyTU9VU0UgKi8KKyNlbmRpZiAvKiBPUzIg Ki8KKworLyogRnVuY3Rpb25zIGZyb20gc3lzdGVtLWRlcGVuZGVudCB0ZXJtaW5hbCBpL28gbW9k dWxlICovCisKK19QUk9UT1RZUCggaW50IHR0b3BlbiwgKGNoYXIgKiwgaW50ICosIGludCwgaW50 KSApOyAgLyogdHR5IGZ1bmN0aW9ucyAqLworI2lmbmRlZiBNQUMKK19QUk9UT1RZUCggaW50IHR0 Y2xvcywgKGludCkgKTsKKyNlbmRpZiAvKiBNQUMgKi8KK19QUk9UT1RZUCggaW50IHR0aGFuZywg KHZvaWQpICk7CitfUFJPVE9UWVAoIGludCB0dHJlcywgKHZvaWQpICk7CitfUFJPVE9UWVAoIGlu dCB0dHBrdCwgKGxvbmcsIGludCwgaW50KSApOworI2lmbmRlZiBNQUMKK19QUk9UT1RZUCggaW50 IHR0dnQsIChsb25nLCBpbnQpICk7CisjZW5kaWYgLyogTUFDICovCitfUFJPVE9UWVAoIGludCB0 dHNzcGQsIChpbnQpICk7CitfUFJPVE9UWVAoIGxvbmcgdHRnc3BkLCAodm9pZCkgKTsKK19QUk9U T1RZUCggaW50IHR0Zmx1aSwgKHZvaWQpICk7CitfUFJPVE9UWVAoIGludCB0dGZsdW8sICh2b2lk KSApOworX1BST1RPVFlQKCBpbnQgdHRwdXNoYmFjaywgKENIQVIgKiwgaW50KSApOworX1BST1RP VFlQKCBpbnQgdHRwZWVrLCAodm9pZCkgKTsKK19QUk9UT1RZUCggaW50IHR0Z3dzaXosICh2b2lk KSApOworX1BST1RPVFlQKCBpbnQgdHRjaGssICh2b2lkKSApOworX1BST1RPVFlQKCBpbnQgdHR4 aW4sIChpbnQsIENIQVIgKikgKTsKK19QUk9UT1RZUCggaW50IHR0eG91dCwgKENIQVIgKiwgaW50 KSApOworX1BST1RPVFlQKCBpbnQgdHRvbCwgKENIQVIgKiwgaW50KSApOworX1BST1RPVFlQKCBp bnQgdHRvYywgKGNoYXIpICk7CitfUFJPVE9UWVAoIGludCB0dGluYywgKGludCkgKTsKK19QUk9U T1RZUCggaW50IHR0c2NhcnIsIChpbnQpICk7CitfUFJPVE9UWVAoIGludCB0dGdtZG0sICh2b2lk KSApOworX1BST1RPVFlQKCBpbnQgdHRzbmRiLCAodm9pZCkgKTsKK19QUk9UT1RZUCggaW50IHR0 c25kbGIsICh2b2lkKSApOworI2lmZGVmIFVOSVgKK19QUk9UT1RZUCggY2hhciAqIHR0Z2xja2Rp ciwgKHZvaWQpICk7CisjZW5kaWYgLyogVU5JWCAqLworI2lmZGVmIFBBUlNFTlNFCisjaWZkZWYg VU5JWAorX1BST1RPVFlQKCBpbnQgdHRpbmwsIChDSEFSICosIGludCwgaW50LCBDSEFSLCBDSEFS LCBpbnQpICk7CisjZWxzZQorI2lmZGVmIFZNUworX1BST1RPVFlQKCBpbnQgdHRpbmwsIChDSEFS ICosIGludCwgaW50LCBDSEFSLCBDSEFSLCBpbnQpICk7CisjZWxzZQorI2lmZGVmIFNUUkFUVVMK K19QUk9UT1RZUCggaW50IHR0aW5sLCAoQ0hBUiAqLCBpbnQsIGludCwgQ0hBUiwgQ0hBUiwgaW50 KSApOworI2Vsc2UKKyNpZmRlZiBPUzIKK19QUk9UT1RZUCggaW50IHR0aW5sLCAoQ0hBUiAqLCBp bnQsIGludCwgQ0hBUiwgQ0hBUiwgaW50KSApOworI2Vsc2UKKyNpZmRlZiBPU0sKK19QUk9UT1RZ UCggaW50IHR0aW5sLCAoQ0hBUiAqLCBpbnQsIGludCwgQ0hBUiwgQ0hBUiwgaW50KSApOworI2Vs c2UKK19QUk9UT1RZUCggaW50IHR0aW5sLCAoQ0hBUiAqLCBpbnQsIGludCwgQ0hBUiwgQ0hBUikg KTsKKyNlbmRpZiAvKiBPU0sgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBTVFJBVFVT ICovCisjZW5kaWYgLyogVk1TICovCisjZW5kaWYgLyogVU5JWCAqLworI2Vsc2UgLyogISBQQVJT RU5TRSAqLworX1BST1RPVFlQKCBpbnQgdHRpbmwsIChDSEFSICosIGludCwgaW50LCBDSEFSKSAp OworI2VuZGlmIC8qIFBBUlNFTlNFICovCisKKy8qIFhZWk1PREVNIHN1cHBvcnQgKi8KKworLyoK KyAgQ0tfWFlaIGVuYWJsZXMgdGhlIHZhcmlvdXMgY29tbWFuZHMgYW5kIGRhdGEgc3RydWN0dXJl cy4KKyAgWFlaX0lOVEVSTkFMIG1lYW5zIHRoZXNlIHByb3RvY29scyBhcmUgYnVpbHQtaW47IGlm IG5vdCBkZWZpbmVkLAorICB0aGVuIHRoZXkgYXJlIGV4dGVybmFsLiAgWFlaX0RMTCBpcyB1c2Vk IHRvIGluZGljYXRlIGEgc2VwYXJhdGUKKyAgbG9hZGFibGUgbGlicmFyeSBjb250YWluaW5nIHRo ZSBYWVptb2RlbSBwcm90b2NvbCBjb2RlLgorKi8KKyNpZmRlZiBwZHAxMQkJCQkvKiBObyByb29t IGZvciB0aGlzIGluIFBEUC0xMSAqLworI2RlZmluZSBOT0NLWFlaCisjZW5kaWYgLyogcGRwMTEg Ki8KKworI2lmbmRlZiBOT0NLWFlaCQkJCS8qIEFsdGVybmF0aXZlIHByb3RvY29scyAqLworI2lm bmRlZiBDS19YWVoKKyNpZmRlZiBVTklYCisjZGVmaW5lIENLX1hZWgorI2Vsc2UKKyNpZmRlZiBP UzIKKyNkZWZpbmUgQ0tfWFlaCisjaWZuZGVmIE5PWFlaRExMCisjZGVmaW5lIFhZWl9JTlRFUk5B TAkJCS8qIEludGVybmFsIGFuZCBETEwgKi8KKyNkZWZpbmUgWFlaX0RMTAorI2VuZGlmIC8qIE5P WFlaRExMICovCisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogVU5JWCAqLworI2VuZGlmIC8q IENLX1hZWiAqLworI2VuZGlmIC8qIE5PQ0tYWVogKi8KKworI2lmZGVmIFhZWl9JTlRFUk5BTAkJ CS8qIFRoaXMgZW5zdXJlcyB0aGF0IFhZWl9JTlRFUk5BTCAqLworI2lmbmRlZiBDS19YWVoJCQkJ LyogaXMgZGVmaW5lZCBvbmx5IGlmIENLX1hZWiBpcyB0b28gKi8KKyN1bmRlZiBYWVpfSU5URVJO QUwKKyNlbmRpZiAvKiBDS19YWVogKi8KKyNlbmRpZiAvKiBYWVpfSU5URVJOQUwgKi8KKyNpZmRl ZiBYWVpfRExMCQkJCS8qIFRoaXMgZW5zdXJlcyBYWVpfRExMIGlzIGRlZmluZWQgKi8KKyNpZm5k ZWYgWFlaX0lOVEVSTkFMCQkJLyogb25seSBpZiBYWVpfSU5URVJOQUwgaXMgdG9vICovCisjdW5k ZWYgWFlaX0RMTAorI2VuZGlmIC8qIFhZWl9JTlRFUk5BTCAqLworI2VuZGlmIC8qIFhZWl9ETEwg Ki8KKworLyogQ29uc29sZSBmdW5jdGlvbnMgKi8KKworX1BST1RPVFlQKCBpbnQgY29uZ20sICh2 b2lkKSApOworI2lmZGVmIENPTU1FTlQKK19QUk9UT1RZUCggVk9JRCBjb25pbnQsIChTSUdUWVAg KCopKGludCwgaW50KSwgU0lHVFlQICgqKShpbnQsIGludCkpICk7CisjZWxzZQorX1BST1RPVFlQ KCBWT0lEIGNvbmludCwgKFNJR1RZUCAoKikoaW50KSwgU0lHVFlQICgqKShpbnQpKSApOworI2Vu ZGlmIC8qIENPTU1FTlQgKi8KK19QUk9UT1RZUCggVk9JRCBjb25ub2ksICh2b2lkKSApOworX1BS T1RPVFlQKCBpbnQgY29uY2IsIChjaGFyKSApOworI2lmZGVmIENPTkdTUEQKK19QUk9UT1RZUCgg bG9uZyBjb25nc3BkLCAodm9pZCkgKTsKKyNlbmRpZiAvKiBDT05HU1BEICovCitfUFJPVE9UWVAo IGludCBjb25iaW4sIChjaGFyKSApOworX1BST1RPVFlQKCBpbnQgY29ucmVzLCAodm9pZCkgKTsK K19QUk9UT1RZUCggaW50IGNvbm9jLCAoY2hhcikgKTsKK19QUk9UT1RZUCggaW50IGNvbnhvLCAo aW50LCBjaGFyICopICk7CitfUFJPVE9UWVAoIGludCBjb25vbCwgKGNoYXIgKikgKTsKK19QUk9U T1RZUCggaW50IGNvbm9sYSwgKGNoYXIgKltdKSApOworX1BST1RPVFlQKCBpbnQgY29ub2xsLCAo Y2hhciAqKSApOworX1BST1RPVFlQKCBpbnQgY29uY2hrLCAodm9pZCkgKTsKK19QUk9UT1RZUCgg aW50IGNvbmluYywgKGludCkgKTsKK19QUk9UT1RZUCggY2hhciAqIGNvbmtiZywgKHZvaWQpICk7 CitfUFJPVE9UWVAoIGludCBwc3VzcGVuZCwgKGludCkgKTsKK19QUk9UT1RZUCggaW50IHByaXZf aW5pLCAodm9pZCkgKTsKK19QUk9UT1RZUCggaW50IHByaXZfb24sICh2b2lkKSApOworX1BST1RP VFlQKCBpbnQgcHJpdl9vZmYsICh2b2lkKSApOworX1BST1RPVFlQKCBpbnQgcHJpdl9jYW4sICh2 b2lkKSApOworX1BST1RPVFlQKCBpbnQgcHJpdl9jaGssICh2b2lkKSApOworX1BST1RPVFlQKCBp bnQgcHJpdl9vcG4sIChjaGFyICosIGludCkgKTsKKworX1BST1RPVFlQKCBpbnQgc3lzaW5pdCwg KHZvaWQpICk7CS8qIE1pc2MgS2VybWl0IGZ1bmN0aW9ucyAqLworX1BST1RPVFlQKCBpbnQgc3lz Y2xlYW51cCwgKHZvaWQpICk7CitfUFJPVE9UWVAoIGludCBtc2xlZXAsIChpbnQpICk7CitfUFJP VE9UWVAoIFZPSUQgcnRpbWVyLCAodm9pZCkgKTsKK19QUk9UT1RZUCggaW50IGd0aW1lciwgKHZv aWQpICk7CisjaWZkZWYgR0ZUSU1FUgorX1BST1RPVFlQKCBWT0lEIHJmdGltZXIsICh2b2lkKSAp OworX1BST1RPVFlQKCBDS0ZMT0FUIGdmdGltZXIsICh2b2lkKSApOworI2VuZGlmIC8qIEdGVElN RVIgKi8KK19QUk9UT1RZUCggVk9JRCB0dGltb2ZmLCAodm9pZCkgKTsKK19QUk9UT1RZUCggVk9J RCB6dGltZSwgKGNoYXIgKiopICk7CitfUFJPVE9UWVAoIGludCBwYXJjaGssIChDSEFSICosIENI QVIsIGludCkgKTsKK19QUk9UT1RZUCggVk9JRCBkb2V4aXQsIChpbnQsIGludCkgKTsKK19QUk9U T1RZUCggaW50IGFza21vcmUsICh2b2lkKSApOworX1BST1RPVFlQKCBWT0lEIGZhdGFsLCAoY2hh ciAqKSApOworX1BST1RPVFlQKCBWT0lEIGZhdGFsMiwgKGNoYXIgKiwgY2hhciAqKSApOworI2lm ZGVmIFZNUworX1BST1RPVFlQKCBpbnQgY2tfY2FuY2lvLCAodm9pZCkgKTsKKyNlbmRpZiAvKiBW TVMgKi8KKworLyogS2V5IG1hcHBpbmcgc3VwcG9ydCAqLworCisjaWZkZWYgTk9JQ1AKKyNpZm5k ZWYgTk9TRVRLRVkKKyNkZWZpbmUgTk9TRVRLRVkKKyNlbmRpZiAvKiBOT1NFVEtFWSAqLworI2Vu ZGlmIC8qIE5PSUNQICovCisKKyNpZmRlZiBNQUMKKyNpZm5kZWYgTk9TRVRLRVkKKyNkZWZpbmUg Tk9TRVRLRVkKKyNlbmRpZiAvKiBOT1NFVEtFWSAqLworI2VuZGlmIC8qIE1BQyAqLworCitfUFJP VE9UWVAoIGludCBjb25na3MsIChpbnQpICk7CisjaWZkZWYgT1MyCisvKiBPUzIgcmVxdWlyZXMg dGhlc2UgZGVmaW5pdGlvbnMgZXZlbiBpZiBTRVQgS0VZIGlzIG5vdCBiZWluZyBzdXBwb3J0ZWQg Ki8KKyNkZWZpbmUgS01TSVpFIDg5MTYKK3R5cGVkZWYgVUxPTkcgS0VZOwordHlwZWRlZiBDSEFS ICpNQUNSTzsKK2V4dGVybiBpbnQgd2lkZXJlc3VsdDsKKyNlbHNlIC8qIE5vdCBPUzIgKi8KKyNp Zm5kZWYgTk9TRVRLRVkKKy8qCisgIENhdGNoLWFsbCBmb3Igc3lzdGVtcyB3aGVyZSB3ZSBkb24n dCBrbm93IGhvdyB0byByZWFkIGtleWJvYXJkIHNjYW4KKyAgY29kZXMgPiAyNTUuCisqLworI2Rl ZmluZSBLTVNJWkUgMjU2CisvKiBOb3RlOiBDSEFSIChpLmUuIHVuc2lnbmVkIGNoYXIpIGlzIHZl cnkgaW1wb3J0YW50IGhlcmUuICovCit0eXBlZGVmIENIQVIgS0VZOwordHlwZWRlZiBDSEFSICog TUFDUk87CisjZGVmaW5lIGNvbmdrcyBjb25pbmMKKyNlbmRpZiAvKiBOT1NFVEtFWSAqLworI2Vu ZGlmIC8qIE9TMiAqLworCisjaWZuZGVmIE9TMgorI2lmbmRlZiBOT0tWRVJCUwkJCS8qIE5vIFxL dmVyYnMgdW5sZXNzLi4uICovCisjZGVmaW5lIE5PS1ZFUkJTCisjZW5kaWYgLyogTk9LVkVSQlMg Ki8KKyNlbmRpZiAvKiBPUzIgKi8KKworI2lmbmRlZiBOT0tWRVJCUworI2lmZGVmIE9TMgorLyoK KyAgTm90ZTogdGhpcyB2YWx1ZSBjaG9zZW4gdG8gYmUgYmlnZ2VyIHRoYW4gUEMgQklPUyBrZXkg bW9kaWZpZXIgYml0cywKKyAgYnV0IHN0aWxsIGZpdCBpbiAxNiBiaXRzIHdpdGhvdXQgYWZmZWN0 aW5nIHNpZ24uCisKKyAgQXMgb2YgSzk1IDEuMS41LCB0aGlzIG5vIGxvbmdlciBmaXRzIGluIDE2 IGJpdHMsIGdvb2QgdGhpbmcgd2UgYXJlIDMyIGJpdC4KKyovCisjZGVmaW5lIEZfTUFDUk8gMHgy MDAwICAgICAgICAgIC8qIEJpdCBpbmRpY2F0aW5nIGEgbWFjcm8gaW5kaWNlICovCisjZGVmaW5l IElTX01BQ1JPKHgpICh4ICYgRl9NQUNSTykKKyNkZWZpbmUgRl9LVkVSQiAweDQwMDAJCQkvKiBC aXQgaW5kaWNhdGluZyBhIGtleWJvYXJkIHZlcmIgKi8KKyNkZWZpbmUgSVNfS1ZFUkIoeCkgKHgg JiBGX0tWRVJCKQkvKiBUZXN0IHRoaXMgYml0ICovCisjZW5kaWYgLyogT1MyICovCisjZW5kaWYg LyogTk9LVkVSQlMgKi8KKworI2RlZmluZSBGX0VTQyAgIDB4ODAwMAkJLyogQml0IGluZGljYXRp bmcgRVNDIGNoYXIgY29tYmluYXRpb24gKi8KKyNkZWZpbmUgSVNfRVNDKHgpICh4ICYgRl9FU0Mp CisjZGVmaW5lIEZfQ1NJICAgMHgxMDAwMAkJLyogQml0IGluZGljYXRpbmcgQ1NJIGNoYXIgY29t YmluYXRpb24gKi8KKyNkZWZpbmUgSVNfQ1NJKHgpICh4ICYgRl9DU0kpCisKKyNpZmRlZiBOT1NQ TAkJCQkvKiBUaGlzIG1pZ2h0IGJlIG92ZXJraWxsLi4gKi8KKyNpZm5kZWYgTk9LVkVSQlMJCQkv KiBOb3QgYWxsIFxLdmVyYnMgcmVxdWlyZSAqLworI2RlZmluZSBOT0tWRVJCUwkJCS8qIHRoZSBz Y3JpcHQgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UuICovCisjZW5kaWYgLyogTk9LVkVSQlMgKi8KKyNp Zm5kZWYgTk9UQUtFQVJHUworI2RlZmluZSBOT1RBS0VBUkdTCisjZW5kaWYgLyogTk9UQUtFQVJH UyAqLworI2VuZGlmIC8qIE5PU1BMICovCisKKy8qCisgIEZ1bmN0aW9uIHByb3RvdHlwZXMgZm9y IHN5c3RlbSBhbmQgbGlicmFyeSBmdW5jdGlvbnMuCisqLworI2lmZGVmIF9QT1NJWF9TT1VSQ0UK KyNpZm5kZWYgVk1TCisjaWZuZGVmIE1BQworI2RlZmluZSBDS19BTlNJTElCUworI2VuZGlmIC8q IE1BQyAqLworI2VuZGlmIC8qIFZNUyAqLworI2VuZGlmIC8qIF9QT1NJWF9TT1VSQ0UgKi8KKwor I2lmZGVmIE5FWFQKKyNkZWZpbmUgQ0tfQU5TSUxJQlMKKyNlbmRpZiAvKiBORVhUICovCisKKyNp ZmRlZiBTVlI0CisjZGVmaW5lIENLX0FOU0lMSUJTCisjZW5kaWYgLyogU1ZSNCAqLworCisjaWZk ZWYgU1RSQVRVUwkJCQkvKiBTdHJhdHVzIFZPUyB1c2VzIEFOU0kgbGlicmFyaWVzICovCisjZGVm aW5lIENLX0FOU0lMSUJTCisjZW5kaWYgLyogU1RSQVRVUyAqLworCisjaWZkZWYgT1MyCisjZGVm aW5lIENLX0FOU0lMSUJTCisjaWZuZGVmIE5PQ1VSU0VTCisjZGVmaW5lIE1ZQ1VSU0VTCisjZW5k aWYgLyogTk9DVVJTRVMgKi8KKyNkZWZpbmUgQ0tfUlRTQ1RTCisjaWZkZWYgX19JQk1DX18KKyNk ZWZpbmUgU19JRk1UIDB4RjAwMAorI2RlZmluZSB0aW1lem9uZSBfdGltZXpvbmUKKyNlbmRpZiAv KiBfX0lCTUNfXyAqLworI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8aW8uaD4KKyNpZmRl ZiBfX0VNWF9fCisjaWZuZGVmIF9fMzJCSVRfXworI2RlZmluZSBfXzMyQklUX18KKyNlbmRpZiAv KiBfXzMyQklUX18gKi8KKyNpbmNsdWRlIDxzeXMvdGltZWIuaD4KKyNlbHNlIC8qIF9fRU1YX18g Ki8KKyNpbmNsdWRlIDxkaXJlY3QuaD4KKyN1bmRlZiBTSUdBTFJNCisjaWZuZGVmIFNJR1VTUjEK KyNkZWZpbmUgU0lHVVNSMSA3CisjZW5kaWYgLyogU0lHVVNSMSAqLworI2RlZmluZSBTSUdBTFJN IFNJR1VTUjEKK19QUk9UT1RZUCggdW5zaWduZWQgYWxhcm0sICh1bnNpZ25lZCkgKTsKK19QUk9U T1RZUCggdW5zaWduZWQgc2xlZXAsICh1bnNpZ25lZCkgKTsKKyNlbmRpZiAvKiBfX0VNWF9fICov CitfUFJPVE9UWVAoIHVuc2lnbmVkIGxvbmcgemRza3NwYWNlLCAoaW50KSApOworX1BST1RPVFlQ KCBpbnQgemNoZHNrLCAoaW50KSApOworX1BST1RPVFlQKCBpbnQgY29uaW5jcmF3LCAoaW50KSAp OworX1BST1RPVFlQKCBpbnQgdHRpc2NvbSwgKGludCBmKSApOworX1BST1RPVFlQKCBpbnQgSXNG aWxlTmFtZVZhbGlkLCAoY2hhciAqKSApOworX1BST1RPVFlQKCB2b2lkIENoYW5nZU5hbWVGb3JG QVQsIChjaGFyICopICk7CitfUFJPVE9UWVAoIGNoYXIgKkdldExvYWRQYXRoLCAodm9pZCkgKTsK KyNlbmRpZiAvKiBPUzIgKi8KKworLyogRnVsbHNjcmVlbiBmaWxlIHRyYW5zZmVyIGRpc3BsYXkg aXRlbXMuLi4gKi8KKworI2lmbmRlZiBOT0NVUlNFUworI2lmZGVmIENLX05DVVJTRVMJCQkvKiBD S19OQ1VSU0VTIGltcGxpZXMgQ0tfQ1VSU0VTICovCisjaWZuZGVmIENLX0NVUlNFUworI2RlZmlu ZSBDS19DVVJTRVMKKyNlbmRpZiAvKiBDS19DVVJTRVMgKi8KKyNlbmRpZiAvKiBDS19OQ1VSU0VT ICovCisKKyNpZmRlZiBNWUNVUlNFUwkJCQkvKiBNWUNVUlNFUyBpbXBsaWVzIENLX0NVUlNFUyAq LworI2lmbmRlZiBDS19DVVJTRVMKKyNkZWZpbmUgQ0tfQ1VSU0VTCisjZW5kaWYgLyogQ0tfQ1VS U0VTICovCisjZW5kaWYgLyogTVlDVVJTRVMgKi8KKyNlbmRpZiAvKiBOT0NVUlNFUyAqLworCisj aWZkZWYgTk9DVVJTRVMKKyNpZmRlZiBDS19DVVJTRVMKKyN1bmRlZiBDS19DVVJTRVMKKyNlbmRp ZiAvKiBDS19DVVJTRVMgKi8KKyNpZm5kZWYgTk9ESVNQTEFZCisjZGVmaW5lIE5PRElTUExBWQor I2VuZGlmIC8qIE5PRElTUExBWSAqLworI2VuZGlmIC8qIE5PQ1VSU0VTICovCisKKyNpZmRlZiBD S19DVVJTRVMKKy8qCisgIFRoZSBDS19XUkVGUkVTSCBzeW1ib2wgaXMgZGVmaW5lZCBpZiB0aGUg Y3Vyc2VzIGxpYnJhcnkgcHJvdmlkZXMKKyAgY2xlYXJvaygpIGFuZCB3cmVmcmVzaCgpIGZ1bmN0 aW9ucywgd2hpY2ggYXJlIHVzZWQgaW4gcmVwYWludGluZworICB0aGUgc2NyZWVuLgorKi8KKyNp ZmRlZiBOT1dSRUZSRVNICQkJLyogT3ZlcnJpZGUgQ0tfV1JFRlJFU0ggKi8KKworI2lmZGVmIENL X1dSRUZSRVNICQkJLyogSWYgdGhpcyBpcyBkZWZpbmVkLCAqLworI3VuZGVmIENLX1dSRUZSRVNI CQkJLyogdW5kZWZpbmUgaXQuICovCisjZW5kaWYgLyogQ0tfV1JFRlJFU0ggKi8KKworI2Vsc2Ug LyogIU5PV1JFRlJFU0ggKi8JCQkvKiBObyBvdmVycmlkZS4uLiAqLworCisjaWZuZGVmIENLX1dS RUZSRVNICQkJLyogSWYgQ0tfV1JFRlJFU0ggbm90IGRlZmluZWQgKi8KKy8qCisgIEF1dG9tYXRp Y2FsbHkgZGVmaW5lIGl0IGZvciBzeXN0ZW1zIGtub3duIHRvIGhhdmUgaXQgLi4uCisqLworI2lm ZGVmIFZNUwkJCQkvKiBERUMgKE9wZW4pVk1TIGhhcyBpdCAqLworI2RlZmluZSBDS19XUkVGUkVT SAorI2Vsc2UKKyNpZmRlZiB1bHRyaXgJCQkJLyogREVDIFVMVFJJWCBoYXMgaXQgKi8KKyNlbHNl CisjaWZkZWYgU1ZSMwkJCQkvKiBTeXN0ZW0gViBoYXMgaXQgKi8KKyNkZWZpbmUgQ0tfV1JFRlJF U0gKKyNlbHNlCisjaWZkZWYgQlNENDQJCQkJLyogNC40IEJTRCBoYXMgaXQgKi8KKyNkZWZpbmUg Q0tfV1JFRlJFU0gKKyNlbHNlCisjaWZkZWYgTkVYVAkJCQkvKiBEZWZpbmUgaXQgZm9yIE5lWFRT VEVQICovCisjZGVmaW5lIENLX1dSRUZSRVNICisjZWxzZQorI2lmZGVmIFNVTk9TNAkJCQkvKiBT dW5PUyA0LnguLi4gKi8KKyNkZWZpbmUgQ0tfV1JFRlJFU0gKKyNlbHNlCisjaWZkZWYgU09MQVJJ UzI1CQkJLyogU29sYXJpcyAyLjUgYW5kIGxhdGVyICovCisjZGVmaW5lIENLX1dSRUZSRVNICisj ZWxzZQorI2lmZGVmIEFJWFJTCQkJCS8qIFJTLzYwMDAgQUlYIC4uLiAqLworI2RlZmluZSBDS19X UkVGUkVTSAorI2Vsc2UKKyNpZmRlZiBSVEFJWAkJCQkvKiBSVCBQQyBBSVggLi4uICovCisjZGVm aW5lIENLX1dSRUZSRVNICisjZWxzZQorI2lmZGVmIE9TRgkJCQkvKiBERUMgT1NGLzEgLi4uICov CisjZGVmaW5lIENLX1dSRUZSRVNICisKKy8qIEFkZCBtb3JlIGhlcmUsIG9yIGp1c3QgZGVmaW5l IENLX1dSRUZSRVNIIG9uIHRoZSBDQyBjb21tYW5kIGxpbmUuLi4gKi8KKworI2VuZGlmIC8qIE9T RiAqLworI2VuZGlmIC8qIFJUQUlYICovCisjZW5kaWYgLyogQUlYUlMgKi8KKyNlbmRpZiAvKiBT T0xBUklTMjUgKi8KKyNlbmRpZiAvKiBTVU5PUzQgKi8KKyNlbmRpZiAvKiBORVhUICovCisjZW5k aWYgLyogQlNENDQgKi8KKyNlbmRpZiAvKiBTVlIzICovCisjZW5kaWYgLyogdWx0cml4ICovCisj ZW5kaWYgLyogVk1TICovCisKKyNlbHNlIC8qIENLX1dSRUZSRVNIIGlzIGRlZmluZWQgKi8KKwor LyogVGhpcyBpcyB3aXRoaW4gYW4gaWZkZWYgQ0tfQ1VSU0VTIGJsb2NrLiAgVGhlIGZvbGxvd2lu ZyBpcyBub3QgbmVlZGVkICovCisKKyNpZm5kZWYgQ0tfQ1VSU0VTCQkJLyogQ0tfV1JFRlJFU0gg aW1wbGllcyBDS19DVVJTRVMgKi8KKyNkZWZpbmUgQ0tfQ1VSU0VTCisjZW5kaWYgLyogQ0tfQ1VS U0VTICovCisKKyNlbmRpZiAvKiBDS19XUkVGUkVTSCAqLworI2VuZGlmIC8qIE5PV1JFRlJFU0gg Ki8KKworI2lmbmRlZiBUUk1CVUZMCisjaWZkZWYgQklHQlVGT0sKKyNkZWZpbmUgVFJNQlVGTCAx NjM4NAorI2Vsc2UKKyNpZmRlZiBEWU5BTUlDCisjZGVmaW5lIFRSTUJVRkwgODE5MgorI2Vsc2UK KyNkZWZpbmUgVFJNQlVGTCAxMDI0CisjZW5kaWYgLyogQklHQlVGT0sgKi8KKyNlbmRpZiAvKiBE WU5BTUlDICovCisjZW5kaWYgLyogVFJNQlVGTCAqLworI2VuZGlmIC8qIENLX0NVUlNFUyAqLwor CisvKgorICBXaGV0aGVyIHRvIHVzZSBja21hdGNoKCkgaW4gYWxsIGl0cyBnbG9yeSBmb3IgQy1T aGVsbC1saWtlIHBhdHRlcm5zLgorICBJZiBDS1JFR0VYIGlzIE5PVCBkZWZpbmVkLCBhbGwgYnV0 ICogYW5kID8gbWF0Y2hpbmcgYXJlIHJlbW92ZWQgZnJvbQorICBja21hdGNoKCkuICBOT1RFOiBE ZWZpbmluZyBDS1JFR0VYIGRvZXMgbm90IG5lY2Vzc2FyaWx5IG1lYW4gdGhhdCBja21hdGNoKCkK KyAgcmVnZXhlcyBhcmUgdXNlZCBmb3IgZmlsZW5hbWUgbWF0Y2hpbmcuICBUaGF0IGRlcGVuZHMg b24gd2hldGhlciB6eHBhbmQoKQorICBpbiBjaz9maW8uYyBjYWxscyBja21hdGNoKCkuICBOT1RF IDI6IFJFR0VYIGlzIGEgbWlzbm9tZXIgLS0gdGhlc2UgYXJlIG5vdAorICByZWd1bGFyIGV4cHJl c3Npb25zIGluIHRoZSBjb21wdXRlci1zY2llbmNlIHNlbnNlIChpbiB3aGljaCwgZS5nLiAiYSpi IgorICBtYXRjaGVzIDAgb3IgbW9yZSAnYScgY2hhcmFjdGVycyBmb2xsb3dlZCBieSAnYicpIGJ1 dCBwYXR0ZXJucyAoaW4gd2hpY2gKKyAgImEqYiIgbWF0Y2hlcyAnYScgZm9sbG93ZWQgYnkgMCBv ciBtb3JlIG5vbi1iIGNoYXJhY3RlcnMsIGZvbGxvd2VkIGJ5IGIpLgorKi8KKyNpZm5kZWYgTk9D S1JFR0VYCisjaWZuZGVmIENLUkVHRVgKKyNkZWZpbmUgQ0tSRUdFWAorI2VuZGlmIC8qIENLUkVH RVggKi8KKyNlbmRpZiAvKiBOT0NLUkVHRVggKi8KKworLyogTGVhcm5lZC1zY3JpcHQgZmVhdHVy ZSAqLworCisjaWZuZGVmIE5PTEVBUk4KKyNpZmRlZiBOT1NQTAorI2RlZmluZSBOT0xFQVJOCisj ZWxzZQorI2lmZGVmIE5PTE9DQUwKKyNkZWZpbmUgTk9MRUFSTgorI2VuZGlmIC8qIE5PTE9DQUwg Ki8KKyNlbmRpZiAvKiBOT1NQTCAqLworI2VuZGlmIC8qIE5PTEVBUk4gKi8KKworI2lmZGVmIE5P TEVBUk4KKyNpZmRlZiBDS0xFQVJOCisjdW5kZWYgQ0tMRUFSTgorI2VuZGlmIC8qIENLTEVBUk4g Ki8KKyNlbHNlICAvKiAhTk9MRUFSTiAqLworI2lmbmRlZiBDS0xFQVJOCisjaWZkZWYgT1MyT1JV TklYCisvKiBJbiBVTklYIHRoaXMgY2FuIHdvcmsgb25seSB3aXRoIGNrdWNucy5jIGJ1aWxkcyAq LworI2RlZmluZSBDS0xFQVJOCisjZWxzZQorI2lmZGVmIFZNUworI2RlZmluZSBDS0xFQVJOCisj ZW5kaWYgLyogVk1TICovCisjZW5kaWYgLyogT1MyT1JVTklYICovCisjZW5kaWYgLyogQ0tMRUFS TiAqLworI2VuZGlmIC8qIE5PTEVBUk4gKi8KKworI2lmZGVmIENLTEVBUk4KKyNpZm5kZWYgTEVB Uk5CVUZTSVoKKyNkZWZpbmUgTEVBUk5CVUZTSVogMTI4CisjZW5kaWYgLyogTEVBUk5CVUZTSVog Ki8KKyNlbmRpZiAvKiBDS0xFQVJOICovCisKKyNpZm5kZWYgSUtTRE9OTFkKKyNpZm5kZWYgQ0tU SURMRQkJCQkvKiBQc2V1ZG8ta2VlcGFsaXZlIGluIENPTk5FQ1QgKi8KKyNpZmRlZiBPUzIJCQkJ LyogSW4gSzk1ICovCisjZGVmaW5lIENLVElETEUKKyNlbHNlCisjaWZkZWYgVU5JWAkJCQkvKiBJ biBVTklYIGJ1dCBvbmx5IGNrdWNucyB2ZXJzaW9ucyAqLworI2lmbmRlZiBOT0xFQVJOCisjaWZu ZGVmIE5PU0VMRUNUCisjZGVmaW5lIENLVElETEUKKyNlbmRpZiAvKiBOT1NFTEVDVCAqLworI2Vu ZGlmIC8qIE5PTEVBUk4gKi8KKyNlbmRpZiAvKiBVTklYICovCisjZW5kaWYgLyogT1MyICovCisj ZW5kaWYgLyogQ0tUSURMRSAqLworI2VuZGlmIC8qIElLU0RPTkxZICovCisKKyNpZmRlZiBDS19B TlNJTElCUworLyoKKyAgU3RyaW5nIGxpYnJhcnkgZnVuY3Rpb25zLgorICBGb3IgQU5TSSBDLCBn ZXQgcHJvdG90eXBlcyBmcm9tIDxzdHJpbmcuaD4uCisgIE90aGVyd2lzZSwgc2tpcCB0aGUgcHJv dG90eXBlcy4KKyovCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKy8qCisgIFByb3RvdHlwZXMgZm9y IG90aGVyIGNvbW1vbmx5IHVzZWQgbGlicmFyeSBmdW5jdGlvbnMsIHN1Y2ggYXMKKyAgbWFsbG9j LCBmcmVlLCBnZXRlbnYsIGF0b2wsIGF0b2ksIGFuZCBleGl0LiAgT3RoZXJ3aXNlLCBubyBwcm90 b3R5cGVzLgorKi8KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpZmRlZiBESUFCIC8qIERJQUIgRFM5 MCAqLworLyogI2luY2x1ZGUgPGNvbW1vbkMuaD4gICovCisjaW5jbHVkZSA8c3lzL3dhaXQuaD4K KyNkZWZpbmUgQ0tfV0FJVF9ICisjaWZkZWYgQ09NTUVOVAorZXh0ZXJuIHZvaWQgZXhpdChpbnQg c3RhdHVzKTsKK2V4dGVybiB2b2lkIF9leGl0KGludCBzdGF0dXMpOworZXh0ZXJuIGludCB1bmFt ZShzdHJ1Y3QgdXRzbmFtZSAqbmFtZSk7CisjZW5kaWYgLyogQ09NTUVOVCAqLworZXh0ZXJuIGlu dCBjaG1vZChjaGFyICpwYXRoLCBpbnQgbW9kZSk7CitleHRlcm4gaW50IGlvY3RsKGludCBmaWxk ZXMsIGludCByZXF1ZXN0LCAuLi4pOworZXh0ZXJuIGludCByZGNoayhpbnQgdHR5ZmQpOworZXh0 ZXJuIGludCBuYXAoaW50IG0pOworI2lmZGVmIENPTU1FTlQKK2V4dGVybiBpbnQgZ2V0cHBpZCh2 b2lkKTsKKyNlbmRpZiAvKiBDT01NRU5UICovCitleHRlcm4gaW50IF9maWxidWYoRklMRSAqc3Ry ZWFtKTsKK2V4dGVybiBpbnQgX2Zsc2J1ZihjaGFyIGMsRklMRSAqc3RyZWFtKTsKKyNlbmRpZiAv KiBESUFCICovCisKKy8qCisgIFByb3RvdHlwZXMgZm9yIFVOSVggZnVuY3Rpb25zIGxpa2UgYWNj ZXNzLCBhbGFybSwgY2hkaXIsIHNsZWVwLCBmb3JrLAorICBhbmQgcGF1c2UuICBPdGhlcndpc2Us IG5vIHByb3RvdHlwZXMuCisqLworI2lmZGVmIFZNUworI2luY2x1ZGUgPHNpZ25hbC5oPiAgLyog U01TOiBzbGVlcCgpIGZvciBvbGQgKFY0LjAtMDAwKSBERUMgQy4gKi8KKyNpbmNsdWRlIDx1bml4 aW8uaD4KKyNpbmNsdWRlIDx1bml4bGliLmg+IC8qIFNNUzogZ2V0cGlkKCkgZm9yIG9sZCAoVjQu MC0wMDApIERFQyBDLiAqLworI2VuZGlmIC8qIFZNUyAqLworCisjaWZkZWYgTkVYVAorI2lmbmRl ZiBORVhUMzMKKyNpbmNsdWRlIDxsaWJjLmg+CisjZW5kaWYgLyogTkVYVDMzICovCisjZWxzZSAg LyogTm9UIE5lWFQgKi8KKyNpZm5kZWYgQU1JR0EKKyNpZm5kZWYgT1MyCisjaWZkZWYgU1RSQVRV UworI2luY2x1ZGUgPGNfdXRpbGl0aWVzLmg+CisjZWxzZSAvKiAhU1RSQVRVUyAqLworI2lmbmRl ZiBPU0tYWEMKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZiAvKiBPU0tYWEMgKi8KKyNpZmRl ZiBIQVZFX0NSWVBUX0gKKyNpbmNsdWRlIDxjcnlwdC5oPgorI2VuZGlmIC8qIEhBVkVfQ1JZUFRf SCAqLworI2VuZGlmIC8qIFNUUkFUVVMgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBB TUlHQSAqLworI2VuZGlmIC8qIE5FWFQgKi8KKworI2Vsc2UgLyogTm90IEFOU0kgbGlicy4uLiAq LworCisjaWZkZWYgTUFDCisjaW5jbHVkZSA8U3RyaW5nLmg+CisjaW5jbHVkZSA8U3RkTGliLmg+ CisjZW5kaWYgLyogTUFDICovCisKKyNpZmRlZiBIUFVYCisjaWZuZGVmIEhQVVhQUkU2NQorI2lu Y2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmIC8qIEhQVVhQUkU2NSAqLworI2VuZGlmIC8qIEhQVVgg Ki8KKworI2lmZGVmIFNVTk9TNDEKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRs aWIuaD4KKyNlbHNlCisjaWZuZGVmIE1BQworLyoKKyAgSXQgaXMgZXNzZW50aWFsIHRoYXQgdGhl c2UgYXJlIGRlY2xhcmVkIGNvcnJlY3RseSEKKyAgV2hpY2ggaXMgbm90IGFsd2F5cyBlYXN5LiAg VGFrZSBtYWxsb2MoKSBmb3IgaW5zdGFuY2UgLi4uCisqLworI2lmZGVmIFBZUkFNSUQKKyNpZmRl ZiBTVlI0CisjaWZkZWYgX19TVERDX18KKyNkZWZpbmUgU0laRV9UX01BTExPQworI2VuZGlmIC8q IF9fU1REQ19fICovCisjZW5kaWYgLyogU1ZSNCAqLworI2VuZGlmIC8qIFBZUkFNSUQgKi8KKy8q CisgIE1heWJlIHNvbWUgb3RoZXIgZW52aXJvbm1lbnRzIG5lZWQgdGhlIHNhbWUgdHJlYXRtZW50 IGZvciBtYWxsb2MuCisgIElmIHNvLCBkZWZpbmUgU0laRV9UX01BTExPQyBmb3IgdGhlbSBoZXJl IG9yIGluIGNvbXBpbGVyIENGTEFHUy4KKyovCisjaWZkZWYgU0laRV9UX01BTExPQworX1BST1RP VFlQKCB2b2lkICogbWFsbG9jLCAoc2l6ZV90KSApOworI2Vsc2UKK19QUk9UT1RZUCggY2hhciAq IG1hbGxvYywgKHVuc2lnbmVkIGludCkgKTsKKyNlbmRpZiAvKiBTSVpFX1RfTUFMTE9DICovCisK K19QUk9UT1RZUCggY2hhciAqIGdldGVudiwgKGNoYXIgKikgKTsKK19QUk9UT1RZUCggbG9uZyBh dG9sLCAoY2hhciAqKSApOworI2VuZGlmIC8qICFNQUMgKi8KKyNlbmRpZiAvKiBTVU5PUzQxICov CisjZW5kaWYgLyogQ0tfQU5TSUxJQlMgKi8KKworLyoKKyAgPHN5cy9wYXJhbS5oPiBnZW5lcmFs bHkgcGlja3MgdXAgTlVMTCwgTUFYUEFUSExFTiwgYW5kIE1BWE5BTUxFTgorICBhbmQgc2VlbXMg dG8gcHJlc2VudCBvbiBhbGwgVW5peGVzIGdvaW5nIGJhY2sgYXQgbGVhc3QgdG8gU0NPIFhlbml4 CisgIHdpdGggdGhlIGV4Y2VwdGlvbihzKSBub3RlZC4KKyovCisjaWZuZGVmIE5PX1BBUkFNX0gJ CQkvKiAyMDAxLTExLTAzICovCisjaWZuZGVmIFVOSVgJCQkJLyogTm9uLVVuaXhlcyBkb24ndCBo YXZlIGl0ICovCisjZGVmaW5lIE5PX1BBUkFNX0gKKyNlbHNlCisjaWZkZWYgVFJTMTYJCQkJLyog VGFuZHkgWGVuaXggZG9lc24ndCBoYXZlIGl0ICovCisjZGVmaW5lIE5PX1BBUkFNX0gKKyNlbmRp ZiAvKiBUUlMxNiAqLworI2VuZGlmIC8qIFVOSVggKi8KKyNlbmRpZiAvKiBOT19QQVJBTV9IICov CisKKyNpZm5kZWYgTk9fUEFSQU1fSAorI2lmbmRlZiBJTkNMX1BBUkFNX0gKKyNkZWZpbmUgSU5D TF9QQVJBTV9ICisjZW5kaWYgLyogSU5DTF9QQVJBTV9IICovCisjaW5jbHVkZSA8c3lzL3BhcmFt Lmg+CisjZW5kaWYgLyogTk9fUEFSQU1fSCAqLworCisjaWZuZGVmIE5VTEwJCQkJLyogSW4gY2Fz ZSBOVUxMIGlzIHN0aWxsIG5vdCBkZWZpbmVkICovCisjZGVmaW5lIE5VTEwgMEwKKy8qIG9yICNk ZWZpbmUgTlVMTCAwICovCisvKiBvciAjZGVmaW5lIE5VTEwgKChjaGFyICopIDApICovCisvKiBv ciAjZGVmaW5lIE5VTEwgKCh2b2lkICopIDApICovCisjZW5kaWYgLyogTlVMTCAqLworCisvKiBN YWNybyB0byBkaWZmZXJlbnRpYXRlICIiIGZyb20gTlVMTCAodG8gYXZvaWQgY29tcGFyaXNvbnMg d2l0aCBsaXRlcmFscykgKi8KKworI2lmbmRlZiBpc2VtcHR5c3RyaW5nCisjZGVmaW5lIGlzZW1w dHlzdHJpbmcocykgKChzPygqcz8wOjEpOjApKQorI2VuZGlmCS8qIGlzZW1wdHlzdHJpbmcgKi8K KworLyogTWF4aW11bSBsZW5ndGggZm9yIGEgZnVsbHkgcXVhbGlmaWVkIGZpbGVuYW1lLCBub3Qg Y291bnRpbmcgXDAgYXQgZW5kLiAqLworLyoKKyAgVGhpcyBpcyBhIHJvdWdoIGN1dCwgYW5kIGVy cnMgb24gdGhlIHNpZGUgb2YgYmVpbmcgdG9vIGJpZy4gIFdlIGRvbid0CisgIHdhbnQgdG8gcHVs bCBpbiBodW5kcmVkcyBvZiBoZWFkZXIgZmlsZXMgbG9va2luZyBmb3IgbWFueSBhbmQgdmFyaWVk CisgIHN5bWJvbHMsIGZvciBmZWFyIG9mIGludHJvZHVjaW5nIHVubmVjZXNzYXJ5IGNvbmZsaWN0 cy4KKyovCisjaWZuZGVmIENLTUFYUEFUSAorI2lmZGVmIFZNUwkJCQkvKiBWTVMgbWF5IGhhdmUg YmFkIChzbWFsbCwgT0RTMikgKi8KKyNkZWZpbmUgQ0tNQVhQQVRIIE5BTVhfQ19NQVhSU1MJCS8q IFBBVEhfTUFYLCBzbyB1c2UgTkFNWF9DX01BWFJTUy4gKi8KKyNlbHNlIC8qIGRlZiBWTVMgKi8K KyNpZmRlZiBNQVhQQVRITEVOCQkJLyogKGl0IHByb2JhYmx5IGlzbid0KSAqLworI2RlZmluZSBD S01BWFBBVEggTUFYUEFUSExFTgorI2Vsc2UKKyNpZmRlZiBQQVRIX01BWAkJCQkvKiBQT1NJWCAq LworI2RlZmluZSBDS01BWFBBVEggUEFUSF9NQVgKKyNlbHNlIC8qIGRlZiBQQVRIX01BWCAqLwor I2lmZGVmIE1BQworI2RlZmluZSBDS01BWFBBVEggNjMKKyNlbHNlIC8qIGRlZiBNQUMgKi8KKyNp ZmRlZiBwZHAxMQorI2RlZmluZSBDS01BWFBBVEggMjU1CisjZWxzZSAvKiBkZWYgcGRwMTEgKi8K KyNpZmRlZiBVTklYCQkJCS8qIEV2ZW4gdGhvdWdoIHNvbWUgYXJlIHdheSBsZXNzLi4uICovCisj ZGVmaW5lIENLTUFYUEFUSCAxMDI0CisjZWxzZSAvKiBkZWYgVU5JWCAqLworI2lmZGVmIFNUUkFU VVMKKyNkZWZpbmUgQ0tNQVhQQVRIIDI1NgkJCS8qID09ICRNWFBMIGZyb20gUEFSVS5IICovCisj ZWxzZSAvKiBkZWYgU1RSQVRVUyAqLworI2lmZGVmIGRhdGFnZW5lcmFsCisjZGVmaW5lIENLTUFY UEFUSCAyNTYJCQkvKiA9PSAkTVhQTCBmcm9tIFBBUlUuSCAqLworI2Vsc2UgLyogZGVmIGRhdGFn ZW5lcmFsICovCisjZGVmaW5lIENLTUFYUEFUSCAyNTUKKyNlbmRpZiAvKiBkZWYgU1RSQVRVUyBb ZWxzZV0gKi8KKyNlbmRpZiAvKiBkZWYgZGF0YWdlbmVyYWwgW2Vsc2VdICovCisjZW5kaWYgLyog ZGVmIFVOSVggW2Vsc2VdICovCisjZW5kaWYgLyogZGVmIHBkcDExIFtlbHNlXSAqLworI2VuZGlm IC8qIGRlZiBNQUMgW2Vsc2VdICovCisjZW5kaWYgLyogZGVmIFBBVEhfTUFYIFtlbHNlXSAqLwor I2VuZGlmIC8qIGRlZiBNQVhQQVRITEVOIFtlbHNlXSAqLworI2VuZGlmIC8qIGRlZiBWTVMgW2Vs c2VdICovCisjZW5kaWYgLyogbmRlZiBDS01BWFBBVEggKi8KKworLyogTWF4aW11bSBsZW5ndGgg Zm9yIHRoZSBuYW1lIG9mIGEgdHR5IGRldmljZSAqLworCisjaWZuZGVmIERFVk5BTUxFTgorI2Rl ZmluZSBERVZOQU1MRU4gQ0tNQVhQQVRICisjZW5kaWYgLyogREVWTkFNTEVOICovCisKKy8qIERp cmVjdG9yeSAocGF0aCBzZWdtZW50KSBzZXBhcmF0b3IgKi8KKy8qIE5vdCBmdWxseSBnZW5lcmFs IC0gVHJpY2t5IGZvciBWTVMsIEFtaWdhLCAuLi4gKi8KKworI2lmbmRlZiBESVJTRVAKKyNpZmRl ZiBVTklYCisjZGVmaW5lIERJUlNFUCAnLycKKyNkZWZpbmUgSVNESVJTRVAoYykgKChjKT09Jy8n KQorI2Vsc2UKKyNpZmRlZiBPUzIKKyNkZWZpbmUgRElSU0VQICcvJworI2RlZmluZSBJU0RJUlNF UChjKSAoKGMpPT0nLyd8fChjKT09J1xcJykKKyNlbHNlCisjaWZkZWYgZGF0YWdlbmVyYWwKKyNk ZWZpbmUgRElSU0VQICc6JworI2RlZmluZSBJU0RJUlNFUChjKSAoKChjKT09JzonKXx8KChjKT09 J14nKXx8KChjKT09Jz0nKSkKKyNlbHNlCisjaWZkZWYgU1RSQVRVUworI2RlZmluZSBESVJTRVAg Jz4nCisjZGVmaW5lIElTRElSU0VQKGMpICgoYyk9PSc+JykKKyNlbHNlCisjaWZkZWYgVk1TCisj ZGVmaW5lIERJUlNFUCAnXScJCQkvKiAobm90IHJlYWxseSkgKi8KKyNkZWZpbmUgSVNESVJTRVAo YykgKChjKT09J10nfHwoYyk9PSc6JykKKyNlbHNlCisjaWZkZWYgTUFDCisjZGVmaW5lIERJUlNF UCAnOicKKyNkZWZpbmUgSVNESVJTRVAoYykgKChjKT09JzonKQorI2Vsc2UKKyNpZmRlZiBBTUlH QQorI2RlZmluZSBESVJTRVAgJy8nCisjZGVmaW5lIElTRElSU0VQKGMpICgoYyk9PScvJ3x8KGMp PT0nOicpCisjZWxzZQorI2lmZGVmIEdFTURPUworI2RlZmluZSBESVJTRVAgJ1xcJworI2RlZmlu ZSBJU0RJUlNFUChjKSAoKGMpPT0nXFwnfHwoYyk9PSc6JykKKyNlbHNlCisjZGVmaW5lIERJUlNF UCAnLycKKyNkZWZpbmUgSVNESVJTRVAoYykgKChjKT09Jy8nKQorI2VuZGlmIC8qIEdFTURPUyAq LworI2VuZGlmIC8qIEFNSUdBICovCisjZW5kaWYgLyogTUFDICovCisjZW5kaWYgLyogVk1TICov CisjZW5kaWYgLyogU1RSQVRVUyAqLworI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCisjZW5kaWYg LyogT1MyICovCisjZW5kaWYgLyogVU5JWCAqLworI2VuZGlmIC8qIERJUlNFUCAqLworCisvKiBG SUxFIHBhY2thZ2UgcGFyYW1ldGVycyAqLworCisjaWZkZWYgcGRwMTEKKyNkZWZpbmUgTk9DSEFO TkVMSU8KKyNlbHNlCisKKyNpZm5kZWYgQ0tNQVhPUEVOCisjaWZkZWYgUU5YCisjZGVmaW5lIENL TUFYT1BFTiAzOTAKKyNlbHNlCisjaWZkZWYgVk1TCisjZGVmaW5lIENLTUFYT1BFTiA2NAorI2Vs c2UKKyNpZmRlZiBPUEVOX01BWAorI2RlZmluZSBDS01BWE9QRU4gT1BFTl9NQVgKKyNlbHNlCisj aWZkZWYgRk9QRU5fTUFYCisjZGVmaW5lIENLTUFYT1BFTiBGT1BFTl9NQVgKKyNlbHNlCisjZGVm aW5lIENLTUFYT1BFTiA2NAorI2VuZGlmIC8qIEZPUEVOX01BWCAqLworI2VuZGlmIC8qIE9QRU5f TUFYICovCisjZW5kaWYgLyogVk1TICovCisjZW5kaWYgLyogUU5YICovCisjZW5kaWYgLyogQ0tN QVhPUEVOICovCisKKy8qIE1heGltdW0gY2hhbm5lbHMgZm9yIEZPUEVOID0gQ0tNQVhPUEVOIG1p bnVzIGxvZ3MsIHN0ZGlvLCBldGMgKi8KKworI2lmbmRlZiBaX01JTkNIQU4KKyNkZWZpbmUgWl9N SU5DSEFOIDE2CisjZW5kaWYgLyogWl9NSU5DSEFOICovCisKKyNpZm5kZWYgWl9NQVhDSEFOCisj ZGVmaW5lIFpfTUFYQ0hBTiAoQ0tNQVhPUEVOLVpORklMUy01KQorI2VuZGlmIC8qIFpfTUFYQ0hB TiAqLworI2VuZGlmIC8qIHBkcDExICovCisKKy8qIE5ldy1mb3JtYXQgbnpsdG9yKCkgYW5kIG56 cnRvbCgpIGZ1bmN0aW9ucyB0aGF0IGhhbmRsZSBwYXRobmFtZXMgKi8KKworI2lmbmRlZiBOWkxU T1IKKyNpZmRlZiBVTklYCisjZGVmaW5lIE5aTFRPUgorI2Vsc2UKKyNpZmRlZiBWTVMKKyNkZWZp bmUgTlpMVE9SCisjZWxzZQorI2lmZGVmIE9TMgorI2RlZmluZSBOWkxUT1IKKyNlbHNlCisjaWZk ZWYgU1RSQVRVUworI2RlZmluZSBOWkxUT1IKKyNlbmRpZiAvKiBTVFJBVFVTICovCisjZW5kaWYg LyogT1MyICovCisjZW5kaWYgLyogVk1TICovCisjZW5kaWYgLyogVU5JWCAqLworI2VuZGlmIC8q IE5aTFRPUiAqLworCisjaWZkZWYgTlpMVE9SCitfUFJPVE9UWVAoIFZPSUQgbnpsdG9yLCAoY2hh ciAqLCBjaGFyICosIGludCwgaW50LCBpbnQpICk7CitfUFJPVE9UWVAoIFZPSUQgbnpydG9sLCAo Y2hhciAqLCBjaGFyICosIGludCwgaW50LCBpbnQpICk7CisjZW5kaWYgLyogTlpMVE9SICovCisK Ky8qIEltcGxlbWVudGF0aW9ucyB3aXRoIGEgenJtZGlyKCkgZnVuY3Rpb24gKi8KKworI2lmbmRl ZiBaUk1ESVIKKyNpZmRlZiBPUzIKKyNkZWZpbmUgWlJNRElSCisjZWxzZSAvKiBPUzIgKi8KKyNp ZmRlZiBVTklYCisjZGVmaW5lIFpSTURJUgorI2Vsc2UKKyNpZmRlZiBWTVMKKyNkZWZpbmUgWlJN RElSCisjZWxzZSAvKiBWTVMgKi8KKyNpZmRlZiBTVFJBVFVTCisjZGVmaW5lIFpSTURJUgorI2Vu ZGlmIC8qIFNUUkFUVVMgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBVTklYICovCisj ZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogWlJNRElSICovCisKKyNpZmRlZiBaUk1ESVIKK19Q Uk9UT1RZUCggaW50IHpybWRpciwgKGNoYXIgKikgKTsKKyNlbmRpZiAvKiBaUk1ESVIgKi8KKwor I2lmbmRlZiBGSUxFQ0FTRQorI2lmZGVmIFVOSVhPUk9TSworI2RlZmluZSBGSUxFQ0FTRSAxCisj ZWxzZQorI2RlZmluZSBGSUxFQ0FTRSAwCisjZW5kaWYgLyogVU5JWE9ST1NLICovCisjaWZuZGVm IENLQ01BSQorZXh0ZXJuIGludCBmaWxlY2FzZTsKKyNlbmRpZiAvKiBDS0NNQUkgKi8KKyNlbmRp ZiAvKiBGSUxFQ0FTRSAqLworCisvKiBGdW5ueSBuYW1lcyBmb3IgbGlicmFyeSBmdW5jdGlvbnMg ZGVwYXJ0bWVudC4uLiAqLworCisjaWZkZWYgWklMT0cKKyNkZWZpbmUgc2V0am1wIHNldHJldAor I2RlZmluZSBsb25nam1wIGxvbmdyZXQKKyNkZWZpbmUgam1wX2J1ZiByZXRfYnVmCisjZGVmaW5l IGdldGN3ZCBjdXJkaXIKKyNlbmRpZiAvKiBaSUxPRyAqLworCisjaWZkZWYgU1RSQVRVUworLyog VGhlIEMtcnVudGltZSBjb25mbGljdHMgd2l0aCB0aGluZ3Mgd2UgZG8gaW4gU3RyYXR1cyBWT1Mg Y2tsdGlvLmMgLi4uICovCisjZGVmaW5lIHByaW50ZiB2b3NwcnRmCitfUFJPVE9UWVAoIGludCB2 b3NwcnRmLCAoY2hhciAqZm10LCAuLi4pICk7CisjZGVmaW5lIHBlcnJvcih0eHQpIHByaW50Zigi JXNcbiIsIHR4dCkKKy8qIGNoYXJfdmFyeWluZyBpcyBhIHN0cmluZyB0eXBlIGZyb20gUEwvSSB0 aGF0IFZPUyB1c2VzIGV4dGVuc2l2ZWx5ICovCisjZGVmaW5lIENWIGNoYXJfdmFyeWluZworI2Vu ZGlmIC8qIFNUUkFUVVMgKi8KKworI2lmZGVmIE5UCitleHRlcm4gaW50IE9TVmVyOworI2RlZmlu ZSBpc1dpbjk1KCkgKE9TVmVyPT1WRVJfUExBVEZPUk1fV0lOMzJfV0lORE9XUykKKyNlbHNlCisj ZGVmaW5lIGlzV2luOTUoKSAoMCkKKyNlbmRpZiAvKiBOVCAqLworCisjaWZuZGVmIEJQUklOVAor I2lmZGVmIE9TMgorI2RlZmluZSBCUFJJTlQKKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBC UFJJTlQgKi8KKworI2lmbmRlZiBTRVNMSU1JVAorI2lmZGVmIE9TMgorI2RlZmluZSBTRVNMSU1J VAorI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIFNFU0xJTUlUICovCisKKyNpZm5kZWYgTk9U RVJNCisjaWZuZGVmIFBDVEVSTQorI2lmZGVmIE5UCisjZGVmaW5lIFBDVEVSTQorI2VuZGlmIC8q IE5UICovCisjZW5kaWYgLyogUENURVJNICovCisjZW5kaWYgLyogTk9URVJNICovCisKKyNpZmRl ZiBCRU9TT1JCRUJPWAorI2RlZmluZSBxdWVyeSBja3F1ZXJ5CisjZW5kaWYgLyogQkVPU09SQkVC T1ggKi8KKworI2lmbmRlZiBQVFlPUlBJUEUJCQkvKiBORVRDTUQgYW5kL29yIE5FVFBUWSBkZWZp bmVkICovCisjaWZkZWYgTkVUQ01ECisjZGVmaW5lIFBUWU9SUElQRQorI2Vsc2UKKyNpZmRlZiBO RVRQVFkKKyNkZWZpbmUgUFRZT1JQSVBFCisjZW5kaWYgLyogTkVUUFRZICovCisjZW5kaWYgLyog TkVUQ01EICovCisjZW5kaWYgLyogUFRZT1JQSVBFICovCisKKy8qIG1rdGVtcCgpIGFuZCBta3N0 ZW1wKCkgKi8KKworI2lmbmRlZiBOT01LVEVNUAorI2lmbmRlZiBNS1RFTVAKKyNpZmRlZiBPUzJP UlVOSVgKKyNkZWZpbmUgTUtURU1QCisjZW5kaWYgLyogT1MyT1JVTklYICovCisjZW5kaWYgLyog TUtURU1QICovCisKKyNpZmRlZiBNS1RFTVAKKyNpZm5kZWYgTk9NS1NURU1QCisjaWZuZGVmIE1L U1RFTVAKKyNpZmRlZiBCU0Q0NAorI2RlZmluZSBNS1NURU1QCisjZWxzZQorI2lmZGVmIF9fbGlu dXhfXworI2RlZmluZSBNS1NURU1QCisjZW5kaWYgLyogX19saW51eF9fICovCisjZW5kaWYgLyog QlNENDQgKi8KKyNlbmRpZiAvKiBNS1NURU1QICovCisjZW5kaWYgLyogTk9NS1NURU1QICovCisj ZW5kaWYgLyogTUtURU1QICovCisjZW5kaWYgLyogTk9NS1RFTVAgKi8KKworLyogUGxhdGZvcm1z IHRoYXQgaGF2ZSBtZW1jcHkoKSAtLSBvbmx5IGFmdGVyIGFsbCBoZWFkZXJzIGluY2x1ZGVkICov CisKKyNpZm5kZWYgVVNFX01FTUNQWQorI2lmZGVmIFZNUworI2RlZmluZSBVU0VfTUVNQ1BZCisj ZWxzZQorI2lmZGVmIE5FWFQKKyNkZWZpbmUgVVNFX01FTUNQWQorI2Vsc2UKKyNpZmRlZiBPUzIK KyNkZWZpbmUgVVNFX01FTUNQWQorI2Vsc2UKKyNpZmRlZiBfX2xpbnV4X18KKyNkZWZpbmUgVVNF X01FTUNQWQorI2Vsc2UKKyNpZmRlZiBTT0xBUklTCisjZGVmaW5lIFVTRV9NRU1DUFkKKyNlbHNl CisjaWZkZWYgU1VOT1M0CisjZGVmaW5lIFVTRV9NRU1DUFkKKyNlbHNlCisjaWZkZWYgQUlYUlMK KyNkZWZpbmUgVVNFX01FTUNQWQorI2Vsc2UKKyNpZmRlZiBIUFVYCisjZGVmaW5lIFVTRV9NRU1D UFkKKyNlbHNlCisjaWZkZWYgUE9TSVgKKyNkZWZpbmUgVVNFX01FTUNQWQorI2Vsc2UKKyNpZmRl ZiBTVlI0CisjZGVmaW5lIFVTRV9NRU1DUFkKKyNlbHNlCisjaWZkZWYgT1NGCisjZGVmaW5lIFVT RV9NRU1DUFkKKyNlbHNlCisjaWZkZWYgZGF0YWdlbmVyYWwKKyNkZWZpbmUgVVNFX01FTUNQWQor I2Vsc2UKKyNpZmRlZiBTVFJBVFVTCisjZGVmaW5lIFVTRV9NRU1DUFkKKyNlbmRpZiAvKiBTVFJB VFVTICovCisjZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KKyNlbmRpZiAvKiBPU0YgKi8KKyNlbmRp ZiAvKiBTVlI0ICovCisjZW5kaWYgLyogUE9TSVggKi8KKyNlbmRpZiAvKiBIUFVYICovCisjZW5k aWYgLyogQUlYUlMgKi8KKyNlbmRpZiAvKiBTVU5PUzQgKi8KKyNlbmRpZiAvKiBTT0xBUklTICov CisjZW5kaWYgLyogX19saW51eF9fICovCisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogTkVY VCAqLworI2VuZGlmIC8qIFZNUyAqLworI2VuZGlmIC8qIFVTRV9NRU1DUFkgKi8KKworI2lmbmRl ZiBVU0VfTUVNQ1BZCisjZGVmaW5lIG1lbWNweShhLGIsYykgY2ttZW1jcHkoKGEpLChiKSwoYykp CisjZWxzZQorI2lmZGVmIENLX1NDTzMyVjQKKy8qIEJlY2F1c2UgdGhlIHByb3RvdHlwZSBpc24n dCBwaWNrZWQgdXAgaW4gdGhlIG5vcm1hbCBoZWFkZXIgZmlsZXMgKi8KK19QUk9UT1RZUCggdm9p ZCAqbWVtY3B5LCAodm9pZCAqLCBjb25zdCB2b2lkICosIHNpemVfdCkpOworI2VuZGlmIC8qIENL X1NDTzMyVjQgKi8KKyNlbmRpZiAvKiBVU0VfTUVNQ1BZICovCisKKy8qIFVzZXIgYXV0aGVudGlj YXRpb24gZm9yIElLUyAtLSBTbyBmYXIgSzk1IGFuZCBVTklYIG9ubHkgKi8KKworI2lmZGVmIE5P SUNQCisjaWZuZGVmIE5PTE9HSU4KKyNkZWZpbmUgTk9MT0dJTgorI2VuZGlmIC8qIE5PTE9HSU4g Ki8KKyNlbmRpZiAvKiBOT0lDUCAqLworCisjaWZuZGVmIE5PTE9HSU4KKyNpZmRlZiBPUzJPUlVO SVgKKyNpZm5kZWYgQ0tfTE9HSU4KKyNkZWZpbmUgQ0tfTE9HSU4KKyNpZm5kZWYgTk9TSEFET1cK KyNpZmRlZiBDS19TQ09WNQorI2RlZmluZSBDS19TSEFET1cKKyNlbmRpZiAvKiBDS19TQ09WNSAq LworI2VuZGlmIC8qIE5PU0hBRE9XICovCisjZW5kaWYgLyogQ0tfTE9HSU4gKi8KKyNpZmRlZiBO VAorI2RlZmluZSBOVENSRUFURVRPS0VOCisjZW5kaWYgLyogTlQgKi8KKyNlbmRpZiAvKiBPUzJP UlVOSVggKi8KKyNlbHNlIC8qIE5PTE9HSU4gKi8KKyNpZmRlZiBDS19MT0dJTgorI3VuZGVmIENL X0xPR0lOCisjZW5kaWYgLyogQ0tfTE9HSU4gKi8KKyNlbmRpZiAvKiBOT0xPR0lOICovCisKKyNp ZmRlZiBPUzIKKyNkZWZpbmUgQ0tTUElOTkVSCisjZW5kaWYgLyogT1MyICovCisKKyNpZmRlZiBD S19MT0dJTgkJCQkvKiBUZWxuZXQgcHJvdG9jb2wgcmVxdWlyZWQgKi8KKyNpZm5kZWYgVE5DT0RF CQkJCS8qIGZvciBsb2dpbiB0byBJS1NELiAqLworI2RlZmluZSBUTkNPREUKKyNlbmRpZiAvKiBU TkNPREUgKi8KKyNlbmRpZiAvKiBDS19MT0dJTiAqLworCisjaWZkZWYgQ0tfQVVUSEVOVElDQVRJ T04KKyNpZmRlZiBOT1NFTkRVSUQKKyN1bmRlZiBOT1NFTkRVSUQKKyNlbmRpZiAvKiBOT1NFTkRV SUQgKi8KKyNlbmRpZiAvKiBDS19BVVRIRU5USUNBVElPTiAqLworCisjaWZkZWYgVE5DT0RFCQkJ CS8qIFNob3VsZCBURUxORVQgc2VuZCB1c2VyIElEPyAqLworI2lmbmRlZiBOT1NFTkRVSUQKKyNp Zm5kZWYgQ0tTRU5EVUlECisjZGVmaW5lIENLU0VORFVJRAorI2VuZGlmIC8qIENLU0VORFVJRCAq LworI2VuZGlmIC8qIE5PU0VORFVJRCAqLworI2VuZGlmIC8qIFROQ09ERSAqLworCisvKiBVTklY IHBsYXRmb3JtcyB0aGF0IGRvbid0IGhhdmUgZ2V0dXNlcnNoZWxsKCkgKi8KKworI2lmZGVmIFVO SVgKKyNpZm5kZWYgTk9HRVRVU0VSU0hFTEwKKyNpZmRlZiBJUklYCisjZGVmaW5lIE5PR0VUVVNF UlNIRUxMCisjZWxzZQorI2lmZGVmIFBUWAorI2RlZmluZSBOT0dFVFVTRVJTSEVMTAorI2Vsc2UK KyNpZmRlZiBBSVhSUworI2RlZmluZSBOT0dFVFVTRVJTSEVMTAorI2Vsc2UKKyNpZmRlZiBTSU5J WAorI2RlZmluZSBOT0dFVFVTRVJTSEVMTAorI2Vsc2UKKyNpZmRlZiBVTklYV0FSRQorI2RlZmlu ZSBOT0dFVFVTRVJTSEVMTAorI2Vsc2UKKyNpZmRlZiBDT0hFUkVOVAorI2RlZmluZSBOT0dFVFVT RVJTSEVMTAorI2VuZGlmIC8qIENPSEVSRU5UICovCisjZW5kaWYgLyogVU5JWFdBUkUgKi8KKyNl bmRpZiAvKiBTSU5JWCAqLworI2VuZGlmIC8qIEFJWFJTICovCisjZW5kaWYgLyogUFRYICovCisj ZW5kaWYgLyogSVJJWCAqLworI2VuZGlmIC8qIE5PR0VUVVNFUlNIRUxMICovCisjZW5kaWYgLyog VU5JWCAqLworCisjaWZkZWYgQ0tfTE9HSU4KKyNpZmRlZiBOVAorI2lmbmRlZiBOT1NZU0xPRwor I2lmbmRlZiBDS1NZU0xPRworI2RlZmluZSBDS1NZU0xPRworI2VuZGlmIC8qIENLU1lTTE9HICov CisjZW5kaWYgLyogTk9TWVNMT0cgKi8KKyNlbmRpZiAvKiBOVCAqLworI2lmZGVmIFVOSVgKKyNp Zm5kZWYgTk9TWVNMT0cKKyNpZm5kZWYgQ0tTWVNMT0cKKyNkZWZpbmUgQ0tTWVNMT0cKKyNlbmRp ZiAvKiBDS1NZU0xPRyAqLworI2VuZGlmIC8qIE5PU1lTTE9HICovCisjaWZuZGVmIE5PV1RNUAor I2lmbmRlZiBDS1dUTVAKKyNkZWZpbmUgQ0tXVE1QCisjZW5kaWYgLyogQ0tXVE1QICovCisjZW5k aWYgLyogTk9XVE1QICovCisjaWZuZGVmIE5PR0VUVVNFUlNIRUxMCisjaWZuZGVmIEdFVFVTRVJT SEVMTAorI2RlZmluZSBHRVRVU0VSU0hFTEwKKyNlbmRpZiAvKiBHRVRVU0VSU0hFTEwgKi8KKyNl bmRpZiAvKiBOT0dFVFVTRVJTSEVMTCAqLworI2VuZGlmIC8qIFVOSVggKi8KK19QUk9UT1RZUCgg aW50IGNreGxvZ2luLCAoQ0hBUiAqLCBDSEFSICosIENIQVIgKiwgaW50KSk7CitfUFJPVE9UWVAo IGludCBja3hsb2dvdXQsIChWT0lEKSk7CisjZW5kaWYgLyogQ0tfTE9HSU4gKi8KKworI2lmbmRl ZiBOT1pMT0NBTFRJTUUJCQkvKiB6bG9jYWx0aW1lKCkgYXZhaWxhYmxlLiAqLworI2lmZGVmIE9T Mk9SVU5JWAorI2RlZmluZSBaTE9DQUxUSU1FCitfUFJPVE9UWVAoIGNoYXIgKiB6bG9jYWx0aW1l LCAoY2hhciAqKSApOworI2VuZGlmIC8qIE9TMk9SVU5JWCAqLworI2VuZGlmIC8qIE5PWkxPQ0FM VElNRSAqLworCisjaWZkZWYgQ0tTWVNMT0cJCQkJLyogU3lzbG9nZ2luZyBsZXZlbHMgKi8KKyNk ZWZpbmUgU1lTTEdfTk8gMAkJCS8qIE5vIGxvZ2dpbmcgKi8KKyNkZWZpbmUgU1lTTEdfTEkgMQkJ CS8qIExvZ2luL291dCAqLworI2RlZmluZSBTWVNMR19ESSAyCQkJLyogRGlhbGluZyBvdXQgKi8K KyNkZWZpbmUgU1lTTEdfQUMgMwkJCS8qIE1ha2luZyBhbnkga2luZCBvZiBjb25uZWN0aW9uICov CisjZGVmaW5lIFNZU0xHX1BSIDQgICAgICAgICAgICAgICAgICAgICAgLyogUHJvdG9jb2wgT3Bl cmF0aW9ucyAqLworI2RlZmluZSBTWVNMR19GQyA1CQkJLyogRmlsZSBjcmVhdGlvbiAqLworI2Rl ZmluZSBTWVNMR19GQSA2CQkJLyogRmlsZSByZWFkaW5nICovCisjZGVmaW5lIFNZU0xHX0NNIDcJ CQkvKiBUb3AtbGV2ZWwgY29tbWFuZHMgKi8KKyNkZWZpbmUgU1lTTEdfQ1ggOAkJCS8qIEFsbCBj b21tYW5kcyAqLworI2RlZmluZSBTWVNMR19EQiA5CQkJLyogRGVidWcgKi8KKyNkZWZpbmUgU1lT TEdNQVggOQkJCS8qIEhpZ2hlc3QgbGV2ZWwgKi8KKyNkZWZpbmUgU1lTTEdfREYgU1lTTEdfRkEJ CS8qIERlZmF1bHQgbGV2ZWwgKi8KKy8qIExvZ2dpbmcgZnVuY3Rpb24gKi8KK19QUk9UT1RZUChW T0lEIGNrc3lzbG9nLChpbnQsIGludCwgY2hhciAqLCBjaGFyICosIGNoYXIgKikpOworI2VuZGlm IC8qIENLU1lTTE9HICovCisjaWZuZGVmIENLQ01BSQorZXh0ZXJuIGludCBja3hsb2dnaW5nLCBj a3hzeXNsb2csIGlrZGJvcGVuOworI2VuZGlmIC8qIENLQ01BSSAqLworCisjaWZuZGVmIENLX0tF WVRBQgorI2RlZmluZSBDS19LRVlUQUIKKy8qIEtleXdvcmQgVGFibGUgVGVtcGxhdGUgKi8KKwor LyogTm90ZTogZm9ybWVybHkgZGVmaW5lZCBpbiBja3VjbWQuaCBidXQgbm93IG1vcmUgd2lkZWx5 IHVzZWQgKi8KKworc3RydWN0IGtleXRhYiB7CQkJCS8qIEtleXdvcmQgdGFibGUgKi8KKyAgICBj aGFyICprd2Q7CQkJCS8qIFBvaW50ZXIgdG8ga2V5d29yZCBzdHJpbmcgKi8KKyAgICBpbnQga3d2 YWw7CQkJCS8qIEFzc29jaWF0ZWQgdmFsdWUgKi8KKyAgICBpbnQgZmxnczsJCQkJLyogRmxhZ3Mg KGFzIGRlZmluZWQgYWJvdmUpICovCit9OworI2VuZGlmIC8qIENLX0tFWVRBQiAqLworCisjaWZk ZWYgVU5JWAorX1BST1RPVFlQKCBpbnQgaXNhbGluaywgKGNoYXIgKikpOworI2VuZGlmCS8qIFVO SVggKi8KKworI2lmZGVmIE5FVFBUWQorX1BST1RPVFlQKCBpbnQgZG9fcHR5LCAoaW50ICosIGNo YXIgKiwgaW50KSk7CitfUFJPVE9UWVAoIFZPSUQgZW5kX3B0eSwgKHZvaWQpKTsKKyNlbmRpZiAv KiBORVRQVFkgKi8KKworI2lmZGVmIENLUk9PVAorX1BST1RPVFlQKCBpbnQgenNldHJvb3QsIChj aGFyICopICk7CitfUFJPVE9UWVAoIGNoYXIgKiB6Z2V0cm9vdCwgKHZvaWQpICk7CitfUFJPVE9U WVAoIGludCB6aW5yb290LCAoY2hhciAqKSApOworI2VuZGlmIC8qIENLUk9PVCAqLworCisvKiBM b2NhbCBFY2hvIEJ1ZmZlciBwcm90b3R5cGVzICovCitfUFJPVE9UWVAoIFZPSUQgbGVfaW5pdCwg KHZvaWQpICk7CitfUFJPVE9UWVAoIFZPSUQgbGVfY2xlYW4sICh2b2lkKSk7CitfUFJPVE9UWVAo IGludCBsZV9pbmJ1ZiwgKHZvaWQpKTsKK19QUk9UT1RZUCggaW50IGxlX3B1dHN0ciwgKENIQVIg KikpOworX1BST1RPVFlQKCBpbnQgbGVfcHV0cywgKENIQVIgKiwgaW50KSk7CitfUFJPVE9UWVAo IGludCBsZV9wdXRjaGFyLCAoQ0hBUikpOworX1BST1RPVFlQKCBpbnQgbGVfZ2V0Y2hhciwgKENI QVIgKikpOworCisvKiAjaWZuZGVmIE5PSFRUUCAqLworI2lmbmRlZiBOT0NNREFURTJUTQorI2lm bmRlZiBDTURBVEUyVE0KKyNpZmRlZiBPUzJPUlVOSVgKKyNkZWZpbmUgQ01EQVRFMlRNCisjZW5k aWYgLyogT1MyT1JVTklYICovCisjaWZkZWYgVk1TCisjZGVmaW5lIENNREFURTJUTQorI2VuZGlm IC8qIFZNUyAqLworI2VuZGlmIC8qIENNREFURTJUTSAqLworI2VuZGlmIC8qIE5PQ01EQVRFMlRN ICovCisKKyNpZmRlZiBDTURBVEUyVE0KK19QUk9UT1RZUCggc3RydWN0IHRtICogY21kYXRlMnRt LCAoY2hhciAqLGludCkpOworI2VuZGlmIC8qIENNREFURTJUTSAqLworLyogI2VuZGlmICovIC8q IE5PSFRUUCAqLworCisjaWZuZGVmIE5PU0VUVElNRQkJCS8qIFRoaXMgd291bGQgYmUgc2V0IGlu IENGTEFHUyAqLworI2lmZGVmIFNWUjRPUlBPU0lYCQkJLyogRGVmaW5lZCBpbiBJRUVFIDEwMDMu MS0xOTk2ICovCisjaWZuZGVmIFVUSU1FSAkJCQkvKiBhbmQgaW4gU1ZJRCBmb3IgU1ZSNCAqLwor I2RlZmluZSBVVElNRUgKKyNlbmRpZiAvKiBVVElNRUggKi8KKyNlbHNlICAvKiBTVlI0T1JQT1NJ WCAqLworI2lmZGVmIE9TRgkJCQkvKiBWZXJpZmllZCBieSBMdWNhcyBIYXJ0ICovCisjaWZuZGVm IFVUSU1FSAorI2RlZmluZSBVVElNRUgKKyNlbmRpZiAvKiBVVElNRUggKi8KKyNlbHNlICAvKiBP U0YgKi8KKyNpZmRlZiBTVU5PUzQxCQkJCS8qIFZlcmlmaWVkIGJ5IEx1Y2FzIEhhcnQgKi8KKyNp Zm5kZWYgVVRJTUVICisjZGVmaW5lIFVUSU1FSAorI2VuZGlmIC8qIFVUSU1FSCAqLworI2Vsc2Ug IC8qIFNVTk9TNDEgKi8KKyNpZmRlZiBPUzIKKyNpZm5kZWYgU1lTVVRJTUVICisjZGVmaW5lIFNZ U1VUSU1FSAorI2VuZGlmIC8qIFNZU1VUSU1FSCAqLworI2Vsc2UgLyogT1MyICovCisjaWZkZWYg Vk1TCisjaWZuZGVmIFVUSU1FSAorI2RlZmluZSBVVElNRUgKKyNlbmRpZiAvKiBVVElNRUggKi8K KyNlbmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBTVU5PUzQxICov CisjZW5kaWYgLyogT1NGICovCisjZW5kaWYgLyogU1ZSNE9SUE9TSVggKi8KKyNlbmRpZiAvKiBO T1NFVFRJTUUgKi8KKworI2lmZGVmIE5FV0ZUUAorX1BST1RPVFlQKCBpbnQgZnRwaXNjb25uZWN0 ZWQsICh2b2lkKSk7CitfUFJPVE9UWVAoIGludCBmdHBpc2xvZ2dlZGluLCAodm9pZCkpOworX1BS T1RPVFlQKCBpbnQgZnRwaXNzZWN1cmUsICh2b2lkKSk7CisjZW5kaWYgLyogTkVXRlRQICovCisK K19QUk9UT1RZUCggaW50IHJlYWRwYXNzLCAoY2hhciAqLCBjaGFyICosIGludCkpOworX1BST1RP VFlQKCBpbnQgcmVhZHRleHQsIChjaGFyICosIGNoYXIgKiwgaW50KSk7CisKKyNpZmRlZiBPUzIK K19QUk9UT1RZUChpbnQgY2tfYXV0aF9sb2FkZGxsLCAoVk9JRCkpOworX1BST1RPVFlQKGludCBj a19hdXRoX3VubG9hZGRsbCwgKFZPSUQpKTsKKyNlbmRpZiAvKiBPUzIgKi8KKworI2lmZGVmIE5U CitfUFJPVE9UWVAoRFdPUkQgY2tHZXRMb25nUGF0aG5hbWUsKExQQ1NUUiBscEZpbGVOYW1lLCAK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBTVFIgbHBCdWZmZXIsIERXT1JE IGNjaEJ1ZmZlcikpOworI2VuZGlmIC8qIE5UICovCisKKworI2luY2x1ZGUgImNrY2xpYi5oIgor CisvKiBFbmQgb2YgY2tjZGViLmggKi8KKyNlbmRpZiAvKiBDS0NERUJfSCAqLwoKZGlmZiAtLWdp dCBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2tjZm4yLmMgYi9ja2Vy bWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrY2ZuMi5jCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmYTA1MDcKLS0tIC9kZXYvbnVsbAorKysgYi9ja2VybWl0 LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrY2ZuMi5jCkBAIC0wLDAgKzEsMzM1MCBA QAorLyogIEMgSyBDIEYgTiAyICAtLSAgU3lzdGVtLWluZGVwZW5kZW50IEtlcm1pdCBwcm90b2Nv bCBzdXBwb3J0IGZ1bmN0aW9ucy4uLiAqLworCisvKiAgLi4uUGFydCAyIChjb250aW51ZWQgZnJv bSBja2NmbnMuYykgICovCisKKy8qCisgIEF1dGhvcjogRnJhbmsgZGEgQ3J1eiA8ZmRjQGNvbHVt YmlhLmVkdT4sCisgIENvbHVtYmlhIFVuaXZlcnNpdHkgQWNhZGVtaWMgSW5mb3JtYXRpb24gU3lz dGVtcywgTmV3IFlvcmsgQ2l0eS4KKworICBDb3B5cmlnaHQgKEMpIDE5ODUsIDIwMTEsCisgICAg VHJ1c3RlZXMgb2YgQ29sdW1iaWEgVW5pdmVyc2l0eSBpbiB0aGUgQ2l0eSBvZiBOZXcgWW9yay4K KyAgICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgU2VlIHRoZSBDLUtlcm1pdCBDT1BZSU5HLlRYVCBm aWxlIG9yIHRoZQorICAgIGNvcHlyaWdodCB0ZXh0IGluIHRoZSBja2NtYWkuYyBtb2R1bGUgZm9y IGRpc2NsYWltZXIgYW5kIHBlcm1pc3Npb25zLgorKi8KKy8qCisgTm90ZSAtLSBpZiB5b3UgY2hh bmdlIHRoaXMgZmlsZSwgcGxlYXNlIGFtZW5kIHRoZSB2ZXJzaW9uIG51bWJlciBhbmQgZGF0ZSBh dAorIHRoZSB0b3Agb2YgY2tjZm5zLmMgYWNjb3JkaW5nbHkuCisqLworCisjaW5jbHVkZSAiY2tj c3ltLmgiCQkJLyogQ29tcGlsYXRpb24gb3B0aW9ucyAqLworI2luY2x1ZGUgImNrY2RlYi5oIgkJ CS8qIERlYnVnZ2luZyBhbmQgb3RoZXIgc3ltYm9scyAqLworI2luY2x1ZGUgImNrY2FzYy5oIgkJ CS8qIEFTQ0lJIHN5bWJvbHMgKi8KKyNpbmNsdWRlICJja2NrZXIuaCIJCQkvKiBLZXJtaXQgc3lt Ym9scyAqLworI2luY2x1ZGUgImNrY3hsYS5oIgkJCS8qIFRyYW5zbGF0aW9uICovCisjaW5jbHVk ZSAiY2tjbmV0LmgiCQkJLyogSUtTIGFuZCBWTVMgI2RlZmluZSBUQ1BTT0NLRVQgKi8KKyNpZmRl ZiBUQ1BTT0NLRVQJCQkvKiBGb3IgVEVMTkVUIGJ1c2luZXNzIGluIHNwYWNrKCkgKi8KK2V4dGVy biBpbnQgdG5fbmxtLCB0dG5wcm90bywgdG5fYl9ubG07CisjZW5kaWYgLyogVENQU09DS0VUICov CisKK2V4dGVybiBpbnQgcGFyaXR5LCBuZXR3b3JrLCBsb2NhbCwgaW50ZXJydXB0ZWQsIGZhdGFs aW8sIHdhc2Nsb3NlZDsKKworaW50IGtzdGFydGFjdGl2ZSA9IDA7CQkJLyogRmxhZyBmb3Iga3N0 YXJ0KCkgaW4gYSBwYWNrZXQgKi8KKworc3RhdGljIENIQVIgcF90YmxbXSA9IHsJCQkvKiBFdmVu IHBhcml0eSB0YWJsZSBmb3IgZG9wYXIoKS4gKi8KKyAgICAoQ0hBUikgJ1wwMDAnLAkJCS8qIEFO U0kgQyBjYXN0cyAnXG9vbycgY29uc3RhbnRzICAqLworICAgIChDSEFSKSAnXDIwMScsCQkJLyog dG8gc2lnbmVkIGNoYXIsIHNvIHdlIGhhdmUgdG8gICovCisgICAgKENIQVIpICdcMjAyJywJCQkv KiBjYXN0IGJhY2sgdG8gdW5zaWduZWQgY2hhci4uLiAgKi8KKyAgICAoQ0hBUikgJ1wwMDMnLAor ICAgIChDSEFSKSAnXDIwNCcsCisgICAgKENIQVIpICdcMDA1JywKKyAgICAoQ0hBUikgJ1wwMDYn LAorICAgIChDSEFSKSAnXDIwNycsCisgICAgKENIQVIpICdcMjEwJywKKyAgICAoQ0hBUikgJ1ww MTEnLAorICAgIChDSEFSKSAnXDAxMicsCisgICAgKENIQVIpICdcMjEzJywKKyAgICAoQ0hBUikg J1wwMTQnLAorICAgIChDSEFSKSAnXDIxNScsCisgICAgKENIQVIpICdcMjE2JywKKyAgICAoQ0hB UikgJ1wwMTcnLAorICAgIChDSEFSKSAnXDIyMCcsCisgICAgKENIQVIpICdcMDIxJywKKyAgICAo Q0hBUikgJ1wwMjInLAorICAgIChDSEFSKSAnXDIyMycsCisgICAgKENIQVIpICdcMDI0JywKKyAg ICAoQ0hBUikgJ1wyMjUnLAorICAgIChDSEFSKSAnXDIyNicsCisgICAgKENIQVIpICdcMDI3JywK KyAgICAoQ0hBUikgJ1wwMzAnLAorICAgIChDSEFSKSAnXDIzMScsCisgICAgKENIQVIpICdcMjMy JywKKyAgICAoQ0hBUikgJ1wwMzMnLAorICAgIChDSEFSKSAnXDIzNCcsCisgICAgKENIQVIpICdc MDM1JywKKyAgICAoQ0hBUikgJ1wwMzYnLAorICAgIChDSEFSKSAnXDIzNycsCisgICAgKENIQVIp ICdcMjQwJywKKyAgICAoQ0hBUikgJ1wwNDEnLAorICAgIChDSEFSKSAnXDA0MicsCisgICAgKENI QVIpICdcMjQzJywKKyAgICAoQ0hBUikgJ1wwNDQnLAorICAgIChDSEFSKSAnXDI0NScsCisgICAg KENIQVIpICdcMjQ2JywKKyAgICAoQ0hBUikgJ1wwNDcnLAorICAgIChDSEFSKSAnXDA1MCcsCisg ICAgKENIQVIpICdcMjUxJywKKyAgICAoQ0hBUikgJ1wyNTInLAorICAgIChDSEFSKSAnXDA1Mycs CisgICAgKENIQVIpICdcMjU0JywKKyAgICAoQ0hBUikgJ1wwNTUnLAorICAgIChDSEFSKSAnXDA1 NicsCisgICAgKENIQVIpICdcMjU3JywKKyAgICAoQ0hBUikgJ1wwNjAnLAorICAgIChDSEFSKSAn XDI2MScsCisgICAgKENIQVIpICdcMjYyJywKKyAgICAoQ0hBUikgJ1wwNjMnLAorICAgIChDSEFS KSAnXDI2NCcsCisgICAgKENIQVIpICdcMDY1JywKKyAgICAoQ0hBUikgJ1wwNjYnLAorICAgIChD SEFSKSAnXDI2NycsCisgICAgKENIQVIpICdcMjcwJywKKyAgICAoQ0hBUikgJ1wwNzEnLAorICAg IChDSEFSKSAnXDA3MicsCisgICAgKENIQVIpICdcMjczJywKKyAgICAoQ0hBUikgJ1wwNzQnLAor ICAgIChDSEFSKSAnXDI3NScsCisgICAgKENIQVIpICdcMjc2JywKKyAgICAoQ0hBUikgJ1wwNzcn LAorICAgIChDSEFSKSAnXDMwMCcsCisgICAgKENIQVIpICdcMTAxJywKKyAgICAoQ0hBUikgJ1wx MDInLAorICAgIChDSEFSKSAnXDMwMycsCisgICAgKENIQVIpICdcMTA0JywKKyAgICAoQ0hBUikg J1wzMDUnLAorICAgIChDSEFSKSAnXDMwNicsCisgICAgKENIQVIpICdcMTA3JywKKyAgICAoQ0hB UikgJ1wxMTAnLAorICAgIChDSEFSKSAnXDMxMScsCisgICAgKENIQVIpICdcMzEyJywKKyAgICAo Q0hBUikgJ1wxMTMnLAorICAgIChDSEFSKSAnXDMxNCcsCisgICAgKENIQVIpICdcMTE1JywKKyAg ICAoQ0hBUikgJ1wxMTYnLAorICAgIChDSEFSKSAnXDMxNycsCisgICAgKENIQVIpICdcMTIwJywK KyAgICAoQ0hBUikgJ1wzMjEnLAorICAgIChDSEFSKSAnXDMyMicsCisgICAgKENIQVIpICdcMTIz JywKKyAgICAoQ0hBUikgJ1wzMjQnLAorICAgIChDSEFSKSAnXDEyNScsCisgICAgKENIQVIpICdc MTI2JywKKyAgICAoQ0hBUikgJ1wzMjcnLAorICAgIChDSEFSKSAnXDMzMCcsCisgICAgKENIQVIp ICdcMTMxJywKKyAgICAoQ0hBUikgJ1wxMzInLAorICAgIChDSEFSKSAnXDMzMycsCisgICAgKENI QVIpICdcMTM0JywKKyAgICAoQ0hBUikgJ1wzMzUnLAorICAgIChDSEFSKSAnXDMzNicsCisgICAg KENIQVIpICdcMTM3JywKKyAgICAoQ0hBUikgJ1wxNDAnLAorICAgIChDSEFSKSAnXDM0MScsCisg ICAgKENIQVIpICdcMzQyJywKKyAgICAoQ0hBUikgJ1wxNDMnLAorICAgIChDSEFSKSAnXDM0NCcs CisgICAgKENIQVIpICdcMTQ1JywKKyAgICAoQ0hBUikgJ1wxNDYnLAorICAgIChDSEFSKSAnXDM0 NycsCisgICAgKENIQVIpICdcMzUwJywKKyAgICAoQ0hBUikgJ1wxNTEnLAorICAgIChDSEFSKSAn XDE1MicsCisgICAgKENIQVIpICdcMzUzJywKKyAgICAoQ0hBUikgJ1wxNTQnLAorICAgIChDSEFS KSAnXDM1NScsCisgICAgKENIQVIpICdcMzU2JywKKyAgICAoQ0hBUikgJ1wxNTcnLAorICAgIChD SEFSKSAnXDM2MCcsCisgICAgKENIQVIpICdcMTYxJywKKyAgICAoQ0hBUikgJ1wxNjInLAorICAg IChDSEFSKSAnXDM2MycsCisgICAgKENIQVIpICdcMTY0JywKKyAgICAoQ0hBUikgJ1wzNjUnLAor ICAgIChDSEFSKSAnXDM2NicsCisgICAgKENIQVIpICdcMTY3JywKKyAgICAoQ0hBUikgJ1wxNzAn LAorICAgIChDSEFSKSAnXDM3MScsCisgICAgKENIQVIpICdcMzcyJywKKyAgICAoQ0hBUikgJ1wx NzMnLAorICAgIChDSEFSKSAnXDM3NCcsCisgICAgKENIQVIpICdcMTc1JywKKyAgICAoQ0hBUikg J1wxNzYnLAorICAgIChDSEFSKSAnXDM3NycKK307CisKKy8qICBEIE8gUCBBIFIgIC0tICBBZGQg YW4gYXBwcm9wcmlhdGUgcGFyaXR5IGJpdCB0byBhIGNoYXJhY3RlciAgKi8KKworQ0hBUgorI2lm ZGVmIENLX0FOU0lDCitkb3BhcihyZWdpc3RlciBDSEFSIGNoKQorI2Vsc2UKK2RvcGFyKGNoKSBy ZWdpc3RlciBDSEFSIGNoOworI2VuZGlmIC8qIENLX0FOU0lDICovCisgICAgeworICAgIHJlZ2lz dGVyIHVuc2lnbmVkIGludCBhOworICAgIGlmICghcGFyaXR5CisjaWZkZWYgVENQU09DS0VUCisg ICAgICAgIHx8IChuZXR3b3JrICYmICh0dG5wcm90byA9PSBOUF9URUxORVQpICYmIChURUxPUFRf TUUoVEVMT1BUX0JJTkFSWSkpKQorI2lmbmRlZiBOT1hGRVIKKwl8fCAoIWxvY2FsICYmIHNzdGVs bmV0KQkJLyogVEVMTkVUIEJJTkFSWSBNT0RFICovCisjZW5kaWYgLyogTk9YRkVSICovCisjZW5k aWYgLyogVENQU09DS0VUICovCisgICAgICAgICkgcmV0dXJuKChDSEFSKSAoY2ggJiAyNTUpKTsg ZWxzZSBhID0gY2ggJiAxMjc7CisgICAgc3dpdGNoIChwYXJpdHkpIHsKKwljYXNlICdlJzogIHJl dHVybihwX3RibFthXSk7CSAgICAgICAgICAgICAvKiBFdmVuICovCisJY2FzZSAnbSc6ICByZXR1 cm4oKENIQVIpIChhIHwgMTI4KSk7ICAgICAgICAgLyogTWFyayAqLworCWNhc2UgJ28nOiAgcmV0 dXJuKChDSEFSKSAocF90YmxbYV0gXiAxMjgpKTsgIC8qIE9kZCAqLworCWNhc2UgJ3MnOiAgcmV0 dXJuKChDSEFSKSBhKTsJICAgICAgICAgICAgIC8qIFNwYWNlICovCisJZGVmYXVsdDogICByZXR1 cm4oKENIQVIpIGEpOyAgICAgICAgICAgICAgICAgLyogU29tZXRoaW5nIGlsbGVnYWwgKi8KKyAg ICB9Cit9CisKKyNpZm5kZWYgTk9YRkVSCQkJCS8qIFJlc3Qgb2YgdGhpcyBmaWxlLi4uICovCisK KyNkZWZpbmUgTkVXRFBMCQkJCS8qIE5ldyBkeW5hbWljIHBhY2tldCBsZW5ndGggbWV0aG9kICov CisKKyNpZmRlZiBWTVMKK2V4dGVybiBpbnQgYmF0Y2g7CisjZWxzZQorZXh0ZXJuIGludCBiYWNr Z3JkOworI2VuZGlmIC8qIFZNUyAqLworCisjaWZkZWYgRFlOQU1JQworZXh0ZXJuIHN0cnVjdCBw a3RpbmZvICpzX3BrdDsJCS8qIGFycmF5IG9mIHBrdGluZm8gc3RydWN0dXJlcyAqLworZXh0ZXJu IHN0cnVjdCBwa3RpbmZvICpyX3BrdDsJCS8qIGFycmF5IG9mIHBrdGluZm8gc3RydWN0dXJlcyAq LworI2Vsc2UKK2V4dGVybiBzdHJ1Y3QgcGt0aW5mbyBzX3BrdFtdOwkJLyogYXJyYXkgb2YgcGt0 aW5mbyBzdHJ1Y3R1cmVzICovCitleHRlcm4gc3RydWN0IHBrdGluZm8gcl9wa3RbXTsJCS8qIGFy cmF5IG9mIHBrdGluZm8gc3RydWN0dXJlcyAqLworI2VuZGlmIC8qIERZTkFNSUMgKi8KKworZXh0 ZXJuIGludCBzc2VxdGJsW10sIHJzZXF0YmxbXSwgc2J1ZnVzZVtdLCBzYWNrdGJsW10sIHdzbG90 cywgd2lubG8sIHdzbG90biwKKyAgc2J1Zm51bSwgcmJ1Zm51bSwgcGt0cGF1cywgcmVsaWFibGU7 CisKKyNpZmRlZiBTVFJFQU1JTkcKK3N0YXRpYyBpbnQgZG9udHNlbmQgPSAwOworZXh0ZXJuIGlu dCBzdHJlYW1pbmc7CisjZW5kaWYgLyogU1RSRUFNSU5HICovCisKK2V4dGVybiBpbnQgdHRwcnR5 OwkJCS8qIGZyb20gY2sqdGlvLmMgKi8KK2V4dGVybiBpbnQgYXV0b3BhcjsKKworZXh0ZXJuIGlu dCBzcHNpeiwgc3BtYXgsIHJwc2l6LCB0aW1pbnQsIHRpbWVmLCBucGFkLCBiZXN0bGVuLCBtYXhz ZW5kOworZXh0ZXJuIGludCBycHQsIHJwdHEsIHJwdGZsZywgY2FwYXMsIHNwc2l6ZiwgZW5fZmlu LCB0c2VjcywgZmxvdzsKK2V4dGVybiBpbnQgcGt0bnVtLCBzbmR0eXAsIHJjdnR5cCwgYmN0ciwg YmN0dSwgYmN0ZiwgYmN0bCwgcnNuLCBybG4sIG1heHRyeTsKK2V4dGVybiBpbnQgc2l6ZSwgb3Np emUsIG1heHNpemUsIHNwa3RsLCBycGt0bCwgbmZpbHMsIHN0ZG91ZiwgZnNlY3M7CitleHRlcm4g aW50IHR1cm4sIHR1cm5jaCwgZGlzcGxhLCBwa3Rsb2csIHNlc2xvZywgeGZsZywgbXlwYWRuOwor ZXh0ZXJuIGludCBoY2ZsZywgc2VydmVyLCBjeHNlZW4sIGN6c2VlbiwgZGlzY2FyZCwgc2xvc3Rh cnQ7CitleHRlcm4gaW50IG5ha3N0YXRlLCBxdWlldCwgc3VjY2VzcywgeGl0c3RhLCB3aGF0LCBm aWxlc3RhdHVzOworZXh0ZXJuIGludCBzcGFja2V0cywgcnBhY2tldHMsIHRpbWVvdXRzLCByZXRy YW5zLCBjcnVuY2hlZCwgdXJwc2l6OworZXh0ZXJuIGludCBjYXJyaWVyLCBmZGlzcGxhLCBzcnZp ZGw7CisKKyNpZmRlZiBHRlRJTUVSCitleHRlcm4gQ0tGTE9BVCBmcHRzZWNzLCBmcGZzZWNzLCBm cHhmc2VjczsKKyNlbmRpZiAvKiBHRlRJTUVSICovCisKK2V4dGVybiBsb25nIGZpbGNudCwgZmls cmVqLCBzcGVlZCwgZmlsY3BzLCB0ZmNwczsKK2V4dGVybiBDS19PRkZfVCBmZmMsIGZsY2ksIGZs Y28sIHRsY2ksIHRsY28sIHRmYzsKKworZXh0ZXJuIGNoYXIgKmNtYXJnLCBmaWxuYW1bXTsKKwor ZXh0ZXJuIENIQVIgcGFkY2gsIG15cGFkYywgZW9sLCBzZW9sLCBjdGxxLCBzc3RhdGU7CitleHRl cm4gQ0hBUiAqcmVjcGt0LCAqZGF0YSwgbXlpbml0W107CitleHRlcm4gQ0hBUiAqc3J2cHRyLCBz dGNociwgbXlzdGNoLCAqcmRhdGFwOworZXh0ZXJuIENIQVIgcGFkYnVmW107CitleHRlcm4gQ0hB UiAqIGVwa3Rtc2c7CitleHRlcm4gaW50IGVwa3RyY3ZkLCBlcGt0c2VudDsKKworI2lmZGVmIE9T MgkJCQkvKiBBVVRPRE9XTkxPQUQgcGFyYW1ldGVycyAqLworZXh0ZXJuIGludCBhZGxfa21vZGUs IGFkbF96bW9kZTsJLyogTWF0Y2ggUGFja2V0IHRvIHNpZ25hbCBkb3dubG9hZCAqLworZXh0ZXJu IGNoYXIgKiBhZGxfa3N0cjsJCQkvKiBLRVJNSVQgRG93bmxvYWQgU3RyaW5nICovCitleHRlcm4g Y2hhciAqIGFkbF96c3RyOwkJCS8qIFpNT0RFTSBEb3dubG9hZCBTdHJpbmcgKi8KKyNlbmRpZiAv KiBPUzIgKi8KKworI2lmZGVmIENLX0FVVE9ETAorQ0hBUiBrc2J1Zls5Nl0gPSB7IE5VTCwgTlVM IH07CQkvKiBBdXRvZG93bmxvYWQgIktlcm1pdCBTdGFydCIgYnVmICovCisjZW5kaWYgLyogQ0tf QVVUT0RMICovCisKK2ludCBudW1lcnJzID0gMDsJCQkvKiBOdW1iZXIgb2YgcGFja2V0IGVycm9y cyBzbyBmYXIgKi8KK2ludCByY3Z0aW1vID0gMDsJCQkvKiBUaW1lb3V0IGZvciByZWNlaXZpbmcg YSBwYWNrZXQgKi8KK2ludCBpZGxldG1vID0gMDsJCQkvKiBGbGFnIGZvciBpZGxlIHRpbWVvdXQg Ki8KKworbG9uZyBmaWxjcHMgPSAwTDsJCQkvKiBDUFMgbW9zdCByZWNlbnQgZmlsZSB0cmFuc2Zl cnJlZCAqLworbG9uZyB0ZmNwcyAgPSAwTDsJCQkvKiBDUFMgbW9zdCByZWNlbnQgdHJhbnNhY3Rp b24gKi8KK2xvbmcgeGZzZWNzID0gMEw7CQkJLyogRWxhcHNlZCB0aW1lIGZvciBtb3N0IHJlY2Vu dCBmaWxlICovCisjaWZkZWYgR0ZUSU1FUgorQ0tGTE9BVCBmcHhmc2VjcyA9IDAuMDsJCQkvKiBE aXR0bywgYnV0IGZsb2F0aW5nIHBvaW50ICovCisjZW5kaWYgLyogR0ZUSU1FUiAqLworCisjaWZk ZWYgQ0tfVElNRVJTCitpbnQgcnJ0dGJsWzY0XSwgc3J0dGJsWzY0XTsJCS8qIFBhY2tldCB0aW1l c3RhbXAgdGFibGVzICovCitleHRlcm4gaW50IHJ0dGZsZzsKKyNkZWZpbmUgUlRUX1NDQUxFIDEw MDAKK2xvbmcKKyAgcnR0c2FtcGxlcywJCQkJLyogUm91bmQgdHJpcCB0aW1lIHNhbXBsZXMgKi8K KyAgcnR0ZGVsYXksCQkJCS8qIFJUVCBkZWxheSAqLworICBwa3RpbnR2bCwJCQkJLyogSW50ZXJw YWNrZXQgYXJyaXZhbCB0aW1lICovCisgIHJ0dHZhcmlhbmNlLAkJCQkvKiBSVFQgdmFyaWFuY2Ug Ki8KKyAgcnR0c3RkZGV2OwkJCQkvKiBSVFQgc3RhbmRhcmQgZGV2aWF0aW9uICovCisjZW5kaWYg LyogQ0tfVElNRVJTICovCisKKy8qIENSQyBnZW5lcmF0aW9uIHRhYmxlcyAqLworCitsb25nIGNy Y3RhWzE2XSA9IHsgMEwsIDAxMDIwMUwsIDAyMDQwMkwsIDAzMDYwM0wsIDA0MTAwNEwsCisgIDA1 MTIwNUwsIDA2MTQwNkwsIDA3MTYwN0wsIDAxMDIwMTBMLCAwMTEyMjExTCwgMDEyMjQxMkwsIDAx MzI2MTNMLCAwMTQzMDE0TCwKKyAgMDE1MzIxNUwsIDAxNjM0MTZMLCAwMTczNjE3TAorfTsKKwor bG9uZyBjcmN0YlsxNl0gPSB7IDBMLCAwMTA2MTFMLCAwMjE0MjJMLCAwMzEyMzNMLCAwNDMwNDRM LAorICAwNTM2NTVMLCAwNjI0NjZMLCAwNzIyNzdMLCAwMTA2MTEwTCwgMDExNjcwMUwsIDAxMjc1 MzJMLCAwMTM3MzIzTCwgMDE0NTE1NEwsCisgIDAxNTU3NDVMLCAwMTY0NTc2TCwgMDE3NDM2N0wK K307CisKKyNpZmRlZiBDS19USU1FUlMKKy8qCisgIFJvdW5kLXRyaXAgdGltZXIgY2FsY3VsYXRp b25zIGFkYXB0ZWQgZnJvbSBUaW0gS2llbnR6bGUncyBhcnRpY2xlLAorICAiSW1wcm92aW5nIEtl cm1pdCBQZXJmb3JtYW5jZSIsIERyIERvYmIncyBKb3VybmFsLCBGZWJydWFyeSAxOTk2LgorKi8K KworCisvKiAgUiBUIFQgSSBOIEkgVCAgLS0gIEluaXRpYWxpemUgdGltZXJzIGF0IHN0YXJ0IG9m IHRyYW5zYWN0aW9uICAqLworCitWT0lECitydHRpbml0KCkgewkJCQkvKiBJbml0aWFsaXplIHJv dW5kLXRyaXAgdGltaW5nICovCisgICAgaW50IGk7CisKKyAgICBpZiAodGltaW50ID09IDApCisg ICAgICByZXR1cm47CisKKyAgICBydHRzYW1wbGVzICA9IDBMOwkJCS8qIFNhbXBsZXMgKHBhY2tl dHMpICovCisgICAgcnR0dmFyaWFuY2UgPSAwTDsJCQkvKiBWYXJpYW5jZSBpbiBkZWxheSAqLwor ICAgIHJ0dGRlbGF5ICAgID0gKGxvbmcpIHRpbWludCAqIFJUVF9TQ0FMRTsgLyogRGVsYXkgKi8K KyAgICBwa3RpbnR2bCAgICA9IChsb25nKSB0aW1pbnQgKiBSVFRfU0NBTEU7IC8qIERlbGF5ICov CisgICAgcnR0c3RkZGV2ICAgPSAobG9uZykgdGltaW50ICogUlRUX1NDQUxFOyAvKiBTdGFuZGFy ZCBkZXZpYXRpb24gb2YgZGVsYXkgKi8KKworICAgIC8qIFRhYmxlcyBvZiB0aW1lc3RhbXBzIGlu ZGV4ZWQgYnkgcGFja2V0IHNlcXVlbmNlIG51bWJlciAqLworCisgICAgZm9yIChpID0gMDsgaSA8 IDY0OyBpKyspIHsKKwlycnR0YmxbaV0gPSAtMTsJCQkvKiBUaW1lIGVhY2ggcGFja2V0IHdhcyBy ZWNlaXZlZCAqLworCXNydHRibFtpXSA9IC0xOwkJCS8qIFRpbWUgZWFjaCBwYWNrZXQgd2FzIHNl bnQgKi8KKyAgICB9CisgICAgcmN2dGltbyA9IHRpbWludDsJCQkvKiBJbml0aWFsIHRpbWVvdXQg aXMgd2hhdCB1c2VyIHNhaWQgKi8KK30KKworLyogIEcgRSBUIFIgVCBUICAtLSAgR2V0IHBhY2tl dCByb3VuZCB0cmlwIHRpbWUgICovCisvKgorICBDYWxsIHdpdGggbmFrc3RhdGUgPT0gMCBpZiBm aWxlIHNlbmRlciwgbm9uemVybyBpZiByZWNlaXZlciwKKyAgYW5kIG4gPT0gcGFja2V0IHNlcXVl bmNlIG51bWJlciBvZiB0aGUgcGFja2V0IHdlIGp1c3QgcmVjZWl2ZWQuCisKKyAgUmV0dXJuczoK KyAgLTEgb24gZmFpbHVyZSB3aXRoIHJjdnRpbW8gc2V0IHRvIHRpbWludCAod2hhdCB0aGUgdXNl ciBzYWlkKSwgb3I6CisgICAwIG9uIHN1Y2Nlc3Mgd2l0aCByY3Z0aW1vIHNldCB0byBkeW5hbWlj YWxseSBjYWxjdWxhdGVkIHZhbHVlOgorICAgICAxIDw9IHJjdnRpbW8gPD0gdGltaW50ICogMy4K KyovCitpbnQKK2dldHJ0dChuYWtzdGF0ZSwgbikgaW50IG5ha3N0YXRlLCBuOyB7CisgICAgZXh0 ZXJuIGludCBtaW50aW1lLCBtYXh0aW1lOworICAgIHN0YXRpYyBpbnQgcHJldnogPSAwLCBwcmV2 ciA9IDA7CisgICAgaW50IHgsIHksIHl5LCB6ID0gMCwgenogPSAwOwkvKiBIb3cgbG9uZyBkaWQg aXQgdGFrZSB0byBnZXQgaGVyZT8gKi8KKworICAgIHJjdnRpbW8gPSB0aW1pbnQ7CQkJLyogRGVm YXVsdCB0aW1lb3V0IGlzIHdoYXQgdXNlciBzYWlkICovCisKKyAgICBpZiAodGltaW50ID09IDAp CQkJLyogV2UncmUgbm90IHRpbWluZyBvdXQuICovCisgICAgICByZXR1cm4oMCk7CisKKyAgICBp ZiAoIXJ0dGZsZykJCQkvKiBOb3Qgc3VwcG9zZWQgdG8gYmUgZG9pbmcgdGhpcz8gKi8KKyAgICAg IHJldHVybigtMSk7CQkJLyogIFNvIGRvbid0ICovCisKKyAgICBpZiAoIVJUVF9TQ0FMRSkJCQkv KiBQYXJhbm9pYS4uLiAqLworICAgICAgcmV0dXJuKC0xKTsKKworICAgIC8qIHJ0aW1lcigpIChy ZXNldCB0aW1lcikgaXMgbm90IGNhbGxlZCB1bnRpbCAxc3QgZGF0YSBwYWNrZXQgKi8KKyNpZmRl ZiBHRlRJTUVSCisgICAgLyogcmZ0aW1lcigpOyAqLworI2VuZGlmIC8qIEdGVElNRVIgKi8KKyAg ICAvKiBTIChGIFsgQSBdIEQqIFopKiBCICovCisKKyAgICAvKiBOT1RFOiB3ZSBjYWxjdWxhdGUg Ym90aCB0aGUgcm91bmQtdHJpcCB0aW1lIEFORCB0aGUgcGFja2V0ICovCisgICAgLyogYXJyaXZh bCByYXRlLiAgV2UgZG9uJ3QgdXNlIHRoZSBSVFQgZm9yIGFueXRoaW5nLCB3ZSBqdXN0IGRpc3Bs YXkgaXQuICovCisgICAgLyogVGltZW91dHMgYXJlIGJhc2VkIG9uIHRoZSBwYWNrZXQgYXJyaXZh bCByYXRlLiAqLworCisgICAgaWYgKHNwYWNrZXRzID4gMykgewkJCS8qIERvbid0IHN0YXJ0IHRp bGwgNHRoIHBhY2tldCAqLworCWlmIChuYWtzdGF0ZSkgewkJCS8qIEZpbGUgcmVjZWl2ZXIgKi8K KwkgICAgeCA9IHJydHRibFtuXTsJCSAgICAgLyogVGltZSB3aGVuIEkgZ290IHBhY2tldCBuICov CisJICAgIHkgPSBycnR0YmxbbiA+IDAgPyBuIC0gMSA6IDYzXTsgIC8qIFRpbWUgd2hlbiBJIGdv dCBwYWNrZXQgbi0xICovCisJICAgIHl5ID0gc3J0dGJsW24gPiAwID8gbiAtIDEgOiA2M107IC8q IFRpbWUgd2hlbiBJIHNlbnQgQUNLKG4tMSkgKi8KKwkgICAgaWYgKHggPiAtMSAmJiB5ID4gLTEp IHsJLyogQmUgY2FyZWZ1bCAqLworCQl6ID0geCAtIHk7CQkvKiBQYWNrZXQgcmF0ZSAqLworCQl6 eiA9IHggLSB5eTsJCS8qIFJvdW5kIHRyaXAgdGltZSAqLworCQl6Kys7CQkJLyogU28gc2VuZGVy ICYgcmVjZWl2ZXIgZGlmZmVyICovCisJCWRlYnVnKEYxMDEsIlJUVCBSRUNWIiwiIix6KTsKKwkg ICAgfSBlbHNlIHsJCQkvKiBUaGlzIHNob3VsZG4ndCBoYXBwZW4gKi8KKwkJZGVidWcoRjEwMSwi UlRUIFJFQ1YgRVJST1Igc3BhY2tldHMiLCIiLHNwYWNrZXRzKTsKKwkJZGVidWcoRjEwMSwiUlRU IFJFQ1YgRVJST1Igc2VxdWVuY2UiLCIiLG4pOworCQlyZXR1cm4oLTEpOworCSAgICB9CisJfSBl bHNlIHsJCQkvKiBGaWxlIHNlbmRlciAqLworCSAgICB4ID0gcnJ0dGJsW25dOwkJLyogVGltZSB3 aGVuIEkgZ290IEFDSyhuKSAqLworCSAgICB5ID0gcnJ0dGJsW24gPiAwID8gbiAtIDEgOiA2M107 IC8qIFRpbWUgd2hlbiBJIGdvdCBwYWNrZXQgbi0xICovCisJICAgIHl5ID0gc3J0dGJsW25dOwkJ LyogVGltZSB3aGVuIEkgc2VudCBuICovCisJICAgIGlmICh4ID4gLTEgJiYgeSA+IC0xKSB7CisJ CXogPSB4IC0geTsJCS8qIFBhY2tldCByYXRlICovCisJCXp6ID0geCAtIHl5OwkJLyogUm91bmQg dHJpcCB0aW1lICovCisJCWRlYnVnKEYxMDEsIlJUVCBTRU5EIiwiIix6KTsKKwkgICAgfSBlbHNl IHsKKwkJZGVidWcoRjEwMCwiUlRUIFNFTkQgRVJST1IiLCIiLDApOworCQlyZXR1cm4oLTEpOwor CSAgICB9CisJfQorCWlmICh6IDwgMSkJCQkvKiBGb3IgZmFzdCBjb25uZWN0aW9ucyAqLworCSAg eiA9IFJUVF9TQ0FMRSAvIDI7CQkvKiBDb252ZXJ0IHRvIHNjYWxlLi4uICovCisJZWxzZQorCSAg eiAqPSBSVFRfU0NBTEU7CisJZGVidWcoRjEwMSwiUlRUIHogc2NhbGVkIiwiIix6KTsKKworCWlm ICh6eiA8IDEpCQkJLyogRm9yIGZhc3QgY29ubmVjdGlvbnMgKi8KKwkgIHp6ID0gUlRUX1NDQUxF IC8gMjsJCS8qIENvbnZlcnQgdG8gc2NhbGUuLi4gKi8KKwllbHNlCisJICB6eiAqPSBSVFRfU0NB TEU7CisKKwlydHRkZWxheSA9IHp6OwkJCS8qIFJvdW5kIHRyaXAgdGltZSBvZiB0aGlzIHBhY2tl dCAqLworI2lmZGVmIENPTU1FTlQKKy8qCisgIFRoaXMgd2FzIHVzZWQgaW4gQy1LZXJtaXQgNy4w IChhbmQgNi4wPykgYnV0IG5vdCBvbmx5IGlzIGl0IG92ZXJraWxsLAorICBpdCBhbHNvIGNhbiBw cm9kdWNlIHJpZGljdWxvdXNseSBsb25nIHRpbWVvdXRzIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9u cy4KKyAgUmVwbGFjZWQgaW4gOC4wIGJ5IGEgZmFyIHNpbXBsZXIgYW5kIG1vcmUgYWdncmVzc2l2 ZSBzdHJhdGVneS4KKyovCisJaWYgKHJ0dHNhbXBsZXMrKyA9PSAwTCkgewkvKiBGaXJzdCBzYW1w bGUgKi8KKwkgICAgcGt0aW50dmwgPSB6OworCX0gZWxzZSB7CQkJLyogU3Vic2VxdWVudCBzYW1w bGVzICovCisJICAgIGxvbmcgb2xkYXZnID0gcGt0aW50dmw7CisJICAgIGxvbmcgcnR0ZGlmZnNx OworCisJICAgIGlmIChydHRzYW1wbGVzID4gMzApCS8qIFVzZSByZWFsIGF2ZXJhZ2UgZm9yIGZp cnN0IDMwICovCisJICAgICAgcnR0c2FtcGxlcyA9IDMwOwkJLyogIHRoZW4gZGVjYXlpbmcgYXZl cmFnZS4gKi8KKworCSAgICAvKiBBdmVyYWdlIGRlbGF5LCBkaWZmZXJlbmNlIHNxdWFyZWQsIHZh cmlhbmNlLCBzdGQgZGV2aWF0aW9uICovCisKKwkgICAgcGt0aW50dmwgKz0gKHogLSBwa3RpbnR2 bCkgLyBydHRzYW1wbGVzOworCSAgICBydHRkaWZmc3EgPSAoeiAtIG9sZGF2ZykgKiAoeiAtIG9s ZGF2Zyk7CisJICAgIHJ0dHZhcmlhbmNlICs9IChydHRkaWZmc3EgLSBydHR2YXJpYW5jZSkgLyBy dHRzYW1wbGVzOworCSAgICBkZWJ1ZyhGMTAxLCJSVFQgc3RkZGV2MSIsIiIscnR0c3RkZGV2KTsK KwkgICAgaWYgKHJ0dHN0ZGRldiA8IDFMKQkJLyogSXQgY2FuIGJlIHplcm8sIGluIHdoaWNoIGNh c2UgKi8KKwkgICAgICBydHRzdGRkZXYgPSBSVFRfU0NBTEUgLyAzOyAvKiBzZXQgaXQgdG8gc29t ZXRoaW5nIHNtYWxsLi4uICovCisJICAgIHJ0dHN0ZGRldiA9IChydHRzdGRkZXYgKyBydHR2YXJp YW5jZSAvIHJ0dHN0ZGRldikgLyAyOworCX0KKwlkZWJ1ZyhGMTAxLCJSVFQgc3RkZGV2MiIsIiIs cnR0c3RkZGV2KTsKKwlkZWJ1ZyhGMTAxLCJSVFQgZGVsYXkgICIsIiIscGt0aW50dmwpOworCXJj dnRpbW8gPSAocGt0aW50dmwgKyAoM0wgKiBydHRzdGRkZXYpKSAvIFJUVF9TQ0FMRSArIDE7CisJ aWYgKHJwYWNrZXRzIDwgMzIpCQkvKiBBbGxvdyBmb3Igc2xvdyBzdGFydCAqLworCSAgcmN2dGlt byArPSByY3Z0aW1vICsgMjsKKwllbHNlIGlmIChycGFja2V0cyA8IDY0KQorCSAgcmN2dGltbyAr PSByY3Z0aW1vIC8gMiArIDE7CisgICAgICAgIC8qIE9uIGEgcmVsaWFibGUgbGluaywgZG9uJ3Qg dHJ5IHRvbyBoYXJkIHRvIHRpbWUgb3V0LiAqLworCS8qIEVzcGVjaWFsbHkgb24gZmFzdCBsb2Nh bCBuZXR3b3JrIGNvbm5lY3Rpb25zLiAqLworICAgICAgICBpZiAoc2VydmVyICYmIHdoYXQgPT0g V19OT1RISU5HKSAvKiBTZXJ2ZXIgY29tbWFuZCB3YWl0ICovCisJICByY3Z0aW1vID0gcmN2dGlt bzsJCS8qID09IHNydnRpbSAqLworICAgICAgICBlbHNlIGlmIChyZWxpYWJsZSA9PSBTRVRfT04g JiYgcmN2dGltbyA+IDApIC8qIFJlbGlhYmxlICovCisJICByY3Z0aW1vID0gcmN2dGltbyArMTU7 CS8qIGFuZCBub3Qgc2VydmVyIGNvbW1hbmQgd2FpdCAqLworICAgICAgICBlbHNlICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIE5vdCByZWxpYWJsZSBvciBzZXJ2ZXIgY21kIHdhaXQgKi8K KwkgIHJjdnRpbW8gPSByY3Z0aW1vOworCWlmIChyY3Z0aW1vIDwgbWludGltZSkJCS8qIExvd2Vy IGJvdW5kICovCisJICByY3Z0aW1vID0gbWludGltZTsKKwlpZiAobWF4dGltZSA+IDApIHsJCS8q IFVzZXIgc3BlY2lmaWVkIGFuIHVwcGVyIGJvdW5kICovCisJICAgIGlmIChyY3Z0aW1vID4gbWF4 dGltZSkKKwkgICAgICByY3Z0aW1vID0gbWF4dGltZTsKKwl9IGVsc2UgaWYgKG1heHRpbWUgPT0g MCkgewkvKiBVc2VyIGRpZG4ndCBzcGVjaWZ5ICovCisJICAgIGlmIChyY3Z0aW1vID4gdGltaW50 ICogNikKKwkgICAgICByY3Z0aW1vID0gdGltaW50ICogNjsKKwl9CisjZWxzZSAgLyogQ09NTUVO VCAqLworI2lmZGVmIENLRkxPQVQKKwl7CisJICAgIENLRkxPQVQgeDsKKwkgICAgeCA9IChDS0ZM T0FUKShwcmV2eiArIHogKyB6KSAvIDMuMDsKKwkgICAgcmN2dGltbyA9IChpbnQpKCgoKENLRkxP QVQpeCAqIDIuNjYpIC8gUlRUX1NDQUxFKSArIDAuNSk7CisJICAgIGRlYnVnKEYxMDEsIlJUVCBy Y3Z0aW1vIChmbG9hdCkiLCIiLHJjdnRpbW8pOworCX0KKyNlbHNlCisJcmN2dGltbyA9IChwcmV2 eiArIHogKyB6KSAvIFJUVF9TQ0FMRTsKKwlkZWJ1ZyhGMTAxLCJSVFQgcmN2dGltbyAoaW50KSIs IiIscmN2dGltbyk7CisjZW5kaWYgLyogQ0tGTE9BVCAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8K KworCXp6ID0gKHJ0dGRlbGF5ICsgNTAwKSAvIDEwMDA7CisJaWYgKHJjdnRpbW8gPiAoenogKiAz KSkKKwkgIHJjdnRpbW8gPSB6eiAqIDM7CisKKwlpZiAocmN2dGltbyA8IDEpCisJICByY3Z0aW1v ID0gMTsKKwlpZiAobWludGltZSA+IDApIHsKKwkgICAgaWYgKHJjdnRpbW8gPCBtaW50aW1lKQkv KiBMb3dlciBib3VuZCAqLworCSAgICAgIHJjdnRpbW8gPSBtaW50aW1lOworCX0KKwlpZiAobWF4 dGltZSA+IDApIHsJCS8qIFVwcGVyIGJvdW5kICovCisJICAgIGlmIChyY3Z0aW1vID4gbWF4dGlt ZSkKKwkgICAgICByY3Z0aW1vID0gbWF4dGltZTsKKwl9CisJaWYgKHJjdnRpbW8gPT0gKHByZXZy IC0gMSkpCisJICByY3Z0aW1vKys7CisKKwlkZWJ1ZyhGMTAxLCJSVFQgZmluYWwgcmN2dGltbyIs IiIscmN2dGltbyk7CisgICAgfQorICAgIHByZXZ6ID0gejsKKyAgICBwcmV2ciA9IHJjdnRpbW87 CisgICAgcmV0dXJuKDApOworfQorI2VuZGlmIC8qIENLX1RJTUVSUyAqLworCisvKiAgSSBOIFAg VSBUICAtLSAgQXR0ZW1wdCB0byByZWFkIHBhY2tldCBudW1iZXIgJ3BrdG51bScuICAqLworCisv KgorIFRoaXMgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgZmVlZHMgaW5wdXQgdG8gS2VybWl0J3MgZmlu aXRlIHN0YXRlIG1hY2hpbmUsCisgaW4gdGhlIGZvcm0gb2YgYSBjaGFyYWN0ZXIgaW4gdGhlIHJh bmdlIDMyLTEyNiwgbm9ybWFsbHkgYSBwYWNrZXQgdHlwZQorICh1cHBlcmNhc2UgbGV0dGVyKSBv ciBwc2V1ZG8tcGFja2V0LXR5cGUgKGxvd2VyY2FzZSBsZXR0ZXIpLgorCisgSWYgYSBzcGVjaWFs IHN0YXJ0IHN0YXRlIGlzIGluIGVmZmVjdCwgdGhhdCBzdGF0ZSBpcyByZXR1cm5lZCBhcyBpZiBp dCB3ZXJlCisgdGhlIHR5cGUgb2YgYW4gaW5jb21pbmcgcGFja2V0LgorKi8KK2ludAoraW5wdXQo KSB7CisgICAgaW50IHR5cGUgPSAwLCBhY2t0eXBlOwkJLyogUmVjZWl2ZWQgcGFja2V0IHR5cGUg Ki8KKyAgICBpbnQgeCwgeSwgazsJCQkvKiBXb3JrZXJzICovCisgICAgaW50IHosIHBpLCBuZjsJ CQkvKiBXb3JrZXIsIHBhY2tldCBpbmRleCwgTkFLIGZsYWcgKi8KKyAgICBpbnQgbmFrMmFjayA9 IDA7CisKKyAgICBkZWJ1ZyhGMDAwLCJpbnB1dCBzc3RhdGUiLCIiLHNzdGF0ZSk7CisgICAgZGVi dWcoRjEwMSwiaW5wdXQgbmFrc3RhdGUiLCIiLG5ha3N0YXRlKTsKKyAgICBkZWJ1ZyhGMDAwLCJp bnB1dCBzbmR0eXAiLCIiLHNuZHR5cCk7CisgICAgZGVidWcoRjEwMSwiaW5wdXQgeGl0c3RhIiwi Iix4aXRzdGEpOworICAgIGRlYnVnKEYxMDEsImlucHV0IHdoYXQiLCIiLHdoYXQpOworCisgICAg d2hpbGUgKDEpIHsJCQkJLyogQmlnIGxvb3AuLi4gKi8KKy8qCisgIEl0IGlzIHR0Y2hrKCkncyBy ZXNwb25zaWJpbGl0eSB0byB0ZWxsIHVzIGlmIHRoZSBjb25uZWN0aW9uIGlzIGJyb2tlbiwKKyAg YW5kIHRvIGRvIHNvIGluc3RhbnRseSBhbmQgbm9uZGVzdHJ1Y3RpdmVseSAtLSBubyBibG9ja2lu ZywgZXRjLCB0aGF0IHdvdWxkCisgIHNsb3cgZG93biBmaWxlIHRyYW5zZmVyLgorKi8KKwlpZiAo dHRjaGsoKSA8IDApIHsKKwkgICAgZGVidWcoRjEwMCwiaW5wdXQgQ09OTkVDVElPTiBCUk9LRU4i LCIiLDApOworCSAgICBmYXRhbGlvID0gMTsKKwkgICAgcmV0dXJuKCdxJyk7CisJfQorCWlmIChz c3RhdGUgIT0gMCkgewkJLyogSWYgYSBzdGFydCBzdGF0ZSBpcyBpbiBlZmZlY3QsICovCisJICAg IHR5cGUgPSBzc3RhdGU7CQkvKiByZXR1cm4gaXQgbGlrZSBhIHBhY2tldCB0eXBlLCAqLworCSAg ICBzc3RhdGUgPSAwOwkJCS8qIGFuZCB0aGVuIG51bGxpZnkgaXQuICovCisJICAgIG51bWVycnMg PSAwOwkJLyogKFBXUCkgbm8gZXJyb3JzIHNvIGZhciAqLworCSAgICByZXR1cm4odHlwZSk7CisJ fQorCWlmIChuYWtzdGF0ZSkgewkJCS8qIFRoaXMgc2VjdGlvbiBmb3IgZmlsZSByZWNlaXZlci4g Ki8KKwkgICAgaWYgKHdzbG90cyA+IDEpIHsJCS8qIElmIHdlJ3JlIGRvaW5nIHdpbmRvd3MsICov CisJCXggPSByc2VxdGJsW3dpbmxvXTsJLyogc2VlIGlmIGRlc2lyZWQgcGFja2V0IGFscmVhZHkg aW4uICovCisJCWRlYnVnKEYxMDEsImlucHV0IHdpbmxvIiwiIix3aW5sbyk7CisJCWRlYnVnKEYx MDEsImlucHV0IHJzZXF0Ymxbd2lubG9dIiwiIixyc2VxdGJsW3dpbmxvXSk7CisJCWlmICh4ID4g LTEpIHsJCS8qIEFscmVhZHkgdGhlcmU/ICovCisJCSAgICBpZiAocl9wa3RbeF0ucGtfc2VxID09 IHdpbmxvKSB7IC8qIChkb3VibGUgY2hlY2spICovCisJCQlyc24gPSB3aW5sbzsJICAgICAgICAg ICAgLyogWWVzLCByZXR1cm4gaXRzIGluZm8gKi8KKwkJCWRlYnVnKEYxMDEsImlucHV0IHJldHVy biBwcmUtc3Rhc2hlZCBwYWNrZXQiLCIiLHJzbik7CisJCQlkdW1wcmJ1ZigpOworCQkJcmRhdGFw ID0gcl9wa3RbeF0ucGtfYWRyOyAgIC8qIGxpa2UgcnBhY2sgd291bGQgZG8uICovCisJCQlybG4g PSAoaW50KXN0cmxlbigoY2hhciAqKSByZGF0YXApOworCQkJdHlwZSA9IHJfcGt0W3hdLnBrX3R5 cDsKKwkJCWJyZWFrOworCQkgICAgfQorCQl9CisJICAgIH0KKwkgICAgdHlwZSA9IHJwYWNrKCk7 CSAgICAgICAgLyogVHJ5IHRvIHJlYWQgYSBwYWNrZXQuICovCisJICAgIGRlYnVnKEYxMDEsImlu cHV0IHJwYWNrIiwiIix0eXBlKTsKKworCSAgICB3aGlsZSAodHlwZSA9PSAnZScpIHsJLyogSGFu ZGxlIGVjaG9lcyAqLworCQlkZWJ1ZyhGMTAxLCJpbnB1dCBlY2hvIGRpc2NhcmRlZCIsIiIsdHlw ZSk7CisJCXR5cGUgPSBycGFjaygpOworCSAgICB9CisjaWZkZWYgREVCVUcKKwkgICAgaWYgKGRl YmxvZykgeworCQlpZiAodHlwZSA9PSAnRCcpCisJCSAgZGVidWcoRjAxMSwiaW5wdXQgdHlwZSBE PSIsKGNoYXIgKilyZGF0YXAsMzkpOworCQllbHNlCisJCSAgZGVidWcoRjAwMCwiaW5wdXQgdHlw ZSIsKGNoYXIgKilyZGF0YXAsdHlwZSk7CisJICAgIH0KKyNlbmRpZiAvKiBERUJVRyAqLworI2lm bmRlZiBPTERDSEtJTlQKKwkgICAgaWYgKHR5cGUgPT0gJ3onKSB7CisJCWVwa3RyY3ZkID0gMTsK KwkJZXJycGt0KChDSEFSICopIlVzZXIgY2FuY2VsbGVkLiIpOworCQl0eXBlID0gJ0UnOworCQli cmVhazsKKwkgICAgfQorI2VuZGlmIC8qIE9MRENIS0lOVCAqLworCSAgICBpZiAodHlwZSA8IC0x KSB7CisJCWNoYXIgKiBzOworCQlzID0gKHR5cGUgPT0gLTIpID8KKwkJICAiRkFJTEVEIC0gSW50 ZXJydXB0ZWQiIDoKKwkJICAgICJGQUlMRUQgLSBDb25uZWN0aW9uIGxvc3QiOworCisJCXh4c2Ny ZWVuKFNDUl9QVCwncScsMEwscyk7CisJCWRvbG9nZW5kKCk7CisJCXJldHVybigncScpOwkJLyog Q3RybC1DIG9yIGNvbm5lY3Rpb24gbG9zdCAqLworCSAgICB9CisJICAgIGlmICh0eXBlIDwgMCkg ewkJLyogUmVjZWl2ZSB3aW5kb3cgZnVsbCAqLworCQkvKiBBbm90aGVyIHRoaW5nIHRvIGRvIGhl cmUgd291bGQgYmUgdG8gZGVsZXRlICovCisJCS8qIHRoZSBoaWdoZXN0IHBhY2tldCBhbmQgTkFL IHdpbmxvLiAgQnV0IHRoYXQgKi8KKwkJLyogc2hvdWxkbid0IGJlIG5lY2Vzc2FyeSBzaW5jZSB0 aGUgb3RoZXIgS2VybWl0ICovCisJCS8qIHNob3VsZCBub3QgaGF2ZSBzZW50IGEgcGFja2V0IG91 dHNpZGUgdGhlIHdpbmRvdy4gKi8KKyNpZmRlZiBDT01NRU5UCisgICAgICAgICAgICAgICAgY2hh ciBmb29bMjU2XTsKKyAgICAgICAgICAgICAgICBja21ha3htc2coZm9vLDI1NiwiUmVjZWl2ZSB3 aW5kb3cgZnVsbCAocnBhY2spOiB3c2xvdHM9IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg Y2tpdG9hKHdzbG90cyksIiB3aW5sbz0iLGNraXRvYSh3aW5sbyksIiBwa3RudW09IiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgY2tpdG9hKHBrdG51bSksIE5VTEwsTlVMTCxOVUxMLE5VTEws TlVMTCxOVUxMKTsKKwkJZXJycGt0KChDSEFSICopZm9vKTsKKyAgICAgICAgICAgICAgICBkZWJ1 ZyhGMTAwLGZvbywiIiwwKTsKKyNlbHNlCisJCWVycnBrdCgoQ0hBUiAqKSJSZWNlaXZlIHdpbmRv dyBmdWxsIik7CisJCWRlYnVnKEYxMDEsInJwYWNrIHJlY2VpdmUgd2luZG93IGZ1bGwiLCIiLDAp OworICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsIiB3c2xvdHMiLCIiLHdzbG90cyk7CisgICAg ICAgICAgICAgICAgZGVidWcoRjEwMSwiIHdpbmxvIiwiIix3aW5sbyk7CisJCWRlYnVnKEYxMDEs IiBwa3RudW0iLCIiLHBrdG51bSk7CisjZW5kaWYKKwkJZHVtcHJidWYoKTsKKwkJdHlwZSA9ICdF JzsKKwkJYnJlYWs7CisJICAgIH0KKwkgICAgZHVtcHJidWYoKTsKKworI2lmZGVmIE9MRENIS0lO VAorCSAgICBpZiAoY2hraW50KCkgPCAwKSB7CQkvKiBDaGVjayBmb3IgY29uc29sZSBpbnRlcnJ1 cHRzLiAqLworCQllcnJwa3QoKENIQVIgKikiVXNlciBjYW5jZWxsZWQuIik7IC8qIChvbGQgd2F5 KSAqLworCQl0eXBlID0gJ0UnOworCQlicmVhazsKKwkgICAgfQorI2VuZGlmIC8qIE9MRENIS0lO VCAqLworCisjaWZkZWYgU1RSRUFNSU5HCisJICAgIGlmIChzdHJlYW1pbmcpIHsJCS8qIFN0cmVh bWluZyAqLworCQlpZiAodHlwZSA9PSAnUScgfHwgdHlwZSA9PSAnVCcpIHsgLyogRXJyb3JzIGFy ZSBmYXRhbC4gKi8KKwkJICAgIGNydW5jaGVkKys7CQkvKiBGb3Igc3RhdGlzdGljcyAqLworCQkg ICAgZXJycGt0KChDSEFSICopIlRyYW5zbWlzc2lvbiBlcnJvciBvbiByZWxpYWJsZSBsaW5rLiIp OworCQkgICAgdHlwZSA9ICdFJzsKKwkJfQorCSAgICB9CisjZW5kaWYgLyogU1RSRUFNSU5HICov CisJICAgIGlmICh0eXBlID09ICdFJykgeworCQlkZWJ1ZyhGMTAxLCJpbnB1dCBnb3QgRSwgbmFr c3RhdGUiLCIiLG5ha3N0YXRlKTsKKwkJYnJlYWs7CQkJLyogRXJyb3IgcGFja2V0ICovCisJICAg IH0KKwkgICAgaWYgKHR5cGUgPT0gJ1EnKSB7CQkvKiBDcnVuY2hlZCBwYWNrZXQuICovCisJCWNy dW5jaGVkKys7CisJCW51bWVycnMrKzsKKy8qCisgIFBhY2tldCBhcnJpdmVkIGRhbWFnZWQuICBJ dCB3YXMgbW9zdCBsaWtlbHkgdGhlIHBhY2tldCB3ZSB3ZXJlIGV4cGVjdGluZworICBuZXh0LCBz byB3ZSBzZW5kIGEgTkFLIGZvciB0aGF0IHBhY2tldC4gIFByaW9yIHRvIDVBKDE4OSksIHdlIGFs d2F5cworICBOQUsnZCB3aW5sbyBoZXJlLCBidXQgdGhhdCB3YXMgYmFkIGJlY2F1c2UgaWYgdHdv IChvciBtb3JlKSBkaWZmZXJlbnQKKyAgcGFja2V0cyB3ZXJlIGRhbWFnZWQsIHdlIHdvdWxkIGtl ZXAgTkFLaW5nIHRoZSBmaXJzdCBvbmUgYW5kIG5ldmVyIE5BSyB0aGUKKyAgb3RoZXIgb25lcywg d2hpY2ggY291bGQgcmVzdWx0IGluIGEgbGVuZ3RoeSBzZXJpZXMgb2YgdGltZW91dHMuICBOb3cg d2UKKyAgTkFLIHRoZSBvbGRlc3QgYXMteWV0LXVuTkFLJ2QgbWlzc2luZyBwYWNrZXQuCisqLwor I2lmZGVmIENLX1RJTUVSUworCQlyY3Z0aW1vKys7CQkvKiBTdHJldGNoIHRoZSB0aW1lb3V0IGEg bGl0dGxlICovCisjZW5kaWYgLyogQ0tfVElNRVJTICovCisJCXogPSAod2lubG8gKyB3c2xvdHMp ICUgNjQ7ICAvKiBTZWFyY2ggZnJvbSB3aW5sbyB0byB6ICovCisJCWRlYnVnKEYxMDEsIlpaWiBj cnVuY2hlZCB6IiwiIix6KTsKKwkJbmYgPSAwOwkJCSAgICAvKiBOQUsgZmxhZyBub3Qgc2V0IHll dCAqLworCQlmb3IgKHggPSB3aW5sbzsgeCAhPSB6OyB4ID0gKHggKyAxKSAlIDY0KSB7CisJCSAg ICBkZWJ1ZyhGMTAxLCJaWlogeCIsIiIseCk7CisJCSAgICBpZiAocnNlcXRibFt4XSA+IC0xKSAv KiBIYXZlIEkgcmVjZWl2ZWQgcGFja2V0IHg/ICovCisJCSAgICAgIGNvbnRpbnVlOwkJIC8qIFll cywgZ28gb24uICovCisJCSAgICBkZWJ1ZyhGMTAxLCJaWlogeCBub3QgcmVjZCB5ZXQiLCIiLHgp OworCQkgICAgcGkgPSBzc2VxdGJsW3hdOwkgLyogTm8sIGhhdmUgSSBOQUsnZCBpdCB5ZXQ/ICov CisJCSAgICBpZiAocGkgPCAwIHx8IHNfcGt0W3BpXS5wa19ydHIgPT0gMCkgeworCQkJZGVidWco RjEwMSwiWlpaIHggbm90IE5BSydkIHlldCIsIiIseCk7CisJCQluYWNrKHgpOwkgLyogTm8sIE5B SyBpdCBub3cuICovCisJCQluZiA9IDE7CQkgLyogRmxhZyB0aGF0IEkgZGlkLiAqLworCQkJYnJl YWs7CisJCSAgICB9CisJCX0KKwkJaWYgKCFuZikgewkJLyogSWYgd2UgZGlkbid0IE5BSyBhbnl0 aGluZyBhYm92ZSwgKi8KKwkJICAgIGRlYnVnKEYxMDEsIlpaWiBOQUtpbmcgd2lubG8iLCIiLHdp bmxvKTsKKwkJICAgIGlmIChuYWNrKHdpbmxvKSA8IDApIHsgLyogd2UgaGF2ZSB0byBOQUsgd2lu bG8gKGFnYWluKSAqLworCQkJZXJycGt0KChDSEFSICopIlRvbyBtYW55IHJldHJpZXMuIik7IC8q IFRvbyBtYW55ICovCisJCQl0eXBlID0gJ0UnOworCQkJYnJlYWs7CisJCSAgICB9CisJCX0KKwkJ Y29udGludWU7CisJICAgIH0KKworCSAgICBpZiAodHlwZSA9PSAnVCcpIHsJCS8qIFRpbWVvdXQg Ki8KKyNpZm5kZWYgT1MyCisJCS8qIEs5NSBkb2VzIHRoaXMgaXRzIG93biB3YXkgKi8KKwkJaWYg KHNlcnZlciAmJiBzcnZpZGwpIHsKKwkJICAgIGlkbGV0bW8gPSAxOworCQkgICAgZGVidWcoRjEw MSwiU0VSVkVSIElETEUgVElNRU9VVCIsIiIsc3J2aWRsKTsKKwkJICAgIHJldHVybigncScpOwor CQl9CisjZW5kaWYgLyogT1MyICovCisjaWZkZWYgQ0tfVElNRVJTCisJCXJjdnRpbW8rKzsJCS8q IFN0cmV0Y2ggdGhlIHRpbWVvdXQgYSBsaXR0bGUgKi8KKyNlbmRpZiAvKiBDS19USU1FUlMgKi8K KwkJdGltZW91dHMrKzsKKwkJZGVidWcoRjEwMSwiaW5wdXQgcmVjZWl2ZS1zdGF0ZSB0aW1lb3V0 LCB3aW5sbyIsIiIsd2lubG8pOworCQkvKiBOQUsgb25seSB0aGUgcGFja2V0IGF0IHdpbmRvdy1s b3cgKi8KKwkJZGVidWcoRjEwMSwiaW5wdXQgc2VuZGluZyBOQUsgZm9yIHdpbmxvIiwiIix3aW5s byk7CisJCXggPSB0dGNoaygpOworCQlpZiAoeCA+IDApCQkvKiBEb24ndCBnaXZlIHVwIGlmIHRo ZXJlIGlzIHN0aWxsICovCisJCSAgY29udGludWU7CQkvKiBzb21ldGhpbmcgdG8gcmVhZC4gKi8K KwkJZWxzZSBpZiAoeCA8IDApIHsKKwkJICAgIGRvbG9nZW5kKCk7CisJCSAgICBmYXRhbGlvID0g MTsKKwkJICAgIHJldHVybigncScpOwkvKiBDb25uZWN0aW9uIExvc3QgKi8KKwkJfQorCQlpZiAo bmFjayh3aW5sbykgPCAwKSB7CisJCSAgICBkZWJ1ZyhGMTAxLCJpbnB1dCBzZW50IHRvbyBtYW55 IG5ha3MiLCIiLHdpbmxvKTsKKwkJICAgIGVycnBrdCgoQ0hBUiAqKSJUb28gbWFueSByZXRyaWVz LiIpOworCQkgICAgdHlwZSA9ICdFJzsKKwkJICAgIGJyZWFrOworCQl9IGVsc2UgY29udGludWU7 CisJICAgIH0KKwkgICAgaWYgKHJzbiA9PSB3aW5sbykgewkJLyogR290IHRoZSBwYWNrZXQgd2Ug d2FudCwgZG9uZS4gKi8KKyNpZmRlZiBDS19USU1FUlMKKwkJaWYgKHJ0dGZsZyAmJiB0aW1pbnQp CS8qIER5bmFtaWMgcm91bmQgdHJpcCB0aW1lcnM/ICovCisJCSAgZ2V0cnR0KG5ha3N0YXRlLCBy c24pOyAvKiB5ZXMsIGRvIGl0LiAqLworICAgICAgICAgICAgICAgIGVsc2UgICAgICAgICAgICAg ICAgICAgICAvKiBKSEQgMjAxMDAyMDggKi8KKyAgICAgICAgICAgICAgICAgIHJjdnRpbW8gPSB0 aW1pbnQ7ICAgICAgLyogSkhEIDIwMTAwMjA4ICovCisjZW5kaWYgLyogQ0tfVElNRVJTICovCisJ CWRlYnVnKEYxMDEsImlucHV0IHJzbj13aW5sbyIsIiIscnNuKTsKKwkJYnJlYWs7CisJICAgIH0K KworCSAgICAvKiBHb3QgYSBwYWNrZXQgb3V0IG9mIG9yZGVyLiAqLworCisJICAgIGRlYnVnKEYx MDEsImlucHV0IG91dCBvZiBzZXF1ZW5jZSwgcnNuIiwiIixyc24pOworCSAgICBrID0gcnNlcXRi bFtyc25dOwkJLyogR2V0IHdpbmRvdyBzbG90IG9mIHRoaXMgcGFja2V0LiAqLworCSAgICBkZWJ1 ZyhGMTAxLCJpbnB1dCByc2VxdGJsW3Jzbl0iLCIiLGspOworCSAgICBpZiAoayA8IDApIHsKKwkJ ZGVidWcoRjEwMSwiaW5wdXQgcmVjdiBjYW4ndCBmaW5kIGluZGV4IGZvciByY3ZkIHBrdCIsIiIs cnNuKTsKKwkJLyogV2FzICJJbnRlcm5hbCBlcnJvciAyMSIgKi8KKwkJLyogVGhpcyBzaG91bGQg bm90IGhhcHBlbiAgKi8KKwkJZXJycGt0KChDSEFSICopIlNsaWRpbmcgd2luZG93cyBwcm90b2Nv bCBlcnJvci4iKTsKKwkJdHlwZSA9ICdFJzsKKwkJYnJlYWs7CisJICAgIH0KKwkgICAgeSA9IGNo a3dpbihyc24sd2lubG8sd3Nsb3RzKTsgLyogU2VlIHdoYXQgd2luZG93IGl0J3MgaW4uICovCisJ ICAgIGRlYnVnKEYxMDEsImlucHV0IHJlY3YgY2hrd2luIiwiIix5KTsKKwkgICAgaWYgKHkgPT0g MSkgewkJLyogRnJvbSBwcmV2aW91cyB3aW5kb3cuICovCisjaWZkZWYgU1RSRUFNSU5HCisJCWlm ICghc3RyZWFtaW5nKQkJLyogTk8gUkVTRU5EIElGIFNUUkVBTUlORyEgKi8KKyNlbmRpZiAvKiBT VFJFQU1JTkcgKi8KKwkJICByZXNlbmQocnNuKTsJCS8qIFJlc2VuZCB0aGUgQUNLIChtaWdodCBo YXZlIGRhdGEpICovCisJCWZyZWVycGt0KHJzbik7CQkvKiBHZXQgcmlkIG9mIHJlY2VpdmVkIHBh Y2tldCAqLworCQljb250aW51ZTsJCS8qIEJhY2sgdG8gd2FpdCBmb3IgYW5vdGhlciBwYWNrZXQg Ki8KKwkgICAgfSBlbHNlIHsJCQkvKiBJbiB0aGlzIHdpbmRvdyBvciBvdXQgb2YgcmFuZ2UgKi8K KwkJaWYgKHkgPCAwKQkJLyogSWYgb3V0IG9mIHJhbmdlIGVudGlyZWx5LCAqLworCQkgIGZyZWVy cGt0KHJzbik7CS8qIHJlbGVhc2UgaXRzIGJ1ZmZlciAqLworCisjaWZkZWYgU1RSRUFNSU5HCisJ CWlmIChzdHJlYW1pbmcpIHsJLyogU3RyZWFtaW5nICh0aGlzIHNob3VsZG4ndCBoYXBwZW4pICov CisJCSAgICBlcnJwa3QoKENIQVIgKikiU2VxdWVuY2UgZXJyb3Igb24gcmVsaWFibGUgbGluay4i KTsKKwkJICAgIHR5cGUgPSAnRSc7CisJCSAgICBicmVhazsKKwkJfQorI2VuZGlmIC8qIFNUUkVB TUlORyAqLworCisvKiBJZiBvdXIgcmVjZWl2ZSB3aW5kb3cgaXMgZnVsbCwgTkFLIHdpbmRvdy1s b3cgKi8KKworCQlpZiAocmJ1Zm51bSA8IDEpIHsJLyogUmVjZWl2ZSB3aW5kb3cgZnVsbD8gKi8K KwkJICAgIGlmIChuYWNrKHdpbmxvKSA8IDApIHsgICAgLyogTm8gY2hvaWNlLCBtdXN0IE5BSyB3 aW5sby4gKi8KKwkJCWVycnBrdCgoQ0hBUiAqKSJUb28gbWFueSByZXRyaWVzLiIpOyAvKiBUb28g bWFueSAqLworCQkJdHlwZSA9ICdFJzsKKwkJCWJyZWFrOworCQkgICAgfSBlbHNlIGNvbnRpbnVl OworCQl9CisvKgorICBSZWNlaXZlIHdpbmRvdyBub3QgZnVsbC4gIFRoaXMgaXMgYSBwYWNrZXQg aW4gdGhlIGN1cnJlbnQgd2luZG93IGJ1dCBpdCBpcworICBub3QgdGhlIGRlc2lyZWQgcGFja2V0 IGF0IHdpbmxvLiAgU28gdGhlcmVmb3JlIHRoZXJlIGFyZSBnYXBzIGJlZm9yZSB0aGlzCisgIHBh Y2tldC4gIFNvIHdlIGZpbmQgdGhlICJsb3dlc3QiIHVuTkFLJ2QgbWlzc2luZyBwYWNrZXQsIGlm IGFueSwgYmV0d2VlbgorICB3aW5sbyBhbmQgdGhpcyBvbmUsIGFuZCBOQUsgaXQuICBJZiB0aGVy ZSBhcmUgbm8gYXMteWV0LXVuTkFLJ2QgbWlzc2luZworICBwYWNrZXRzIGluIHRoZSB3aW5kb3cs IHRoZW4gd2Ugc2VuZCBub3RoaW5nIGFuZCBnbyB3YWl0IGZvciBhbm90aGVyIHBhY2tldC4KKyAg SW4gdGhlb3J5LCB0aGlzIGNvdWxkIHJlc3VsdCBpbiBhIHRpbWVvdXQsIGJ1dCBpbiBwcmFjdGlj ZSBpdCBpcyBsaWtlbHkgdGhhdAorICB0aGUgYWxyZWFkeS1OQUsnZCBtaXNzaW5nIHBhY2tldHMg YXJlIGFscmVhZHkgb24gdGhlaXIgd2F5LiAgTm90ZSwgd2UgZG8gbm90CisgIE5BSyBhaGVhZCBv ZiBvdXJzZWx2ZXMsIGFzIHRoYXQgb25seSBjcmVhdGVzIHVubmVjZXNzYXJ5IHJldHJhbnNtaXNz aW9ucy4KKyovCisJCWZvciAoeCA9IHdpbmxvOyB4ICE9IHJzbjsgeCA9ICh4ICsgMSkgJSA2NCkg eworCQkgICAgaWYgKHJzZXF0YmxbeF0gPiAtMSkgLyogSGF2ZSBJIHJlY2VpdmVkIHBhY2tldCB4 PyAqLworCQkgICAgICBjb250aW51ZTsJCSAvKiBZZXMsIGNoZWNrIG5leHQgc2VxdWVuY2UgbnVt YmVyLiAqLworCQkgICAgcGkgPSBzc2VxdGJsW3hdOwkgLyogTm8sIGhhdmUgSSBOQUsnZCBpdCB5 ZXQ/ICovCisJCSAgICBpZiAocGkgPCAwIHx8IHNfcGt0W3BpXS5wa19ydHIgPT0gMCkgeworCQkJ bmFjayh4KTsJIC8qIE5vLCBOQUsgaXQgbm93LiAqLworCQkJYnJlYWs7CisJCSAgICB9CisJCX0K KwkgICAgfQorLyohISEqLworCX0gZWxzZSB7CQkJLyogT3RoZXJ3aXNlIGZpbGUgc2VuZGVyLi4u ICovCisKKyNpZmRlZiBTVFJFQU1JTkcKKwkgICAgaWYgKHN0cmVhbWluZyAmJiBzbmR0eXAgPT0g J0QnKSB7CisJCWRlYnVnKEYxMDEsIlNUUkVBTUlORyBpbnB1dCBzdHJlYW1pbmciLCIiLHN0cmVh bWluZyk7CisJCWRlYnVnKEYwMDAsIlNUUkVBTUlORyBpbnB1dCBzbmR0eXAiLCIiLHNuZHR5cCk7 CisJCXJzbiA9IHdpbmxvOworCQl0eXBlID0gJ1knOwkJLyogUHJldGVuZCB3ZSBnb3QgYW4gQUNL ICovCisJICAgIH0KKyNlbmRpZiAvKiBTVFJFQU1JTkcgKi8KKwkgICAgaWYgKCFuYWsyYWNrKSB7 CQkvKiBOQUsobisxKSA9IEFDSyhuKSAqLworCQlpZiAod3Nsb3RzID4gMSkgewkvKiBQYWNrZXQg YXQgd2lubG8gYWxyZWFkeSBBQ0snZD8gKi8KKwkJICAgIGlmIChzYWNrdGJsW3dpbmxvXSkgeyAv KiBJZiBzbywgICovCisJCQlzYWNrdGJsW3dpbmxvXSA9IDA7IC8qIFR1cm4gb2ZmIHRoZSBBQ0sn ZCBmbGFnICovCisJCQl3aW5sbyA9ICh3aW5sbyArIDEpICUgNjQ7IC8qIFJvdGF0ZSB0aGUgd2lu ZG93ICovCisJCQl0eXBlID0gJ1knOwkvKiBBbmQgcmV0dXJuIEFDSyAqLworCQkJZGVidWcoRjEw MSwKKwkJCSAgICAgICJpbnB1dCBzZW5kIHJldHVybmluZyBwcmUtc3Rhc2hlZCBBQ0siLCIiLAor CQkJICAgICAgd2lubG8tMSk7CisJCQlicmVhazsKKwkJICAgIH0KKwkJfQorI2lmZGVmIFNUUkVB TUlORworCQlpZiAoIShzdHJlYW1pbmcgJiYgc25kdHlwID09ICdEJykpIHsgLyogTm90IHN0cmVh bWluZyB8IGRhdGEgKi8KKwkJICAgIHR5cGUgPSBycGFjaygpOwkvKiBUcnkgdG8gcmVhZCBhbiBh Y2tub3dsZWRnZW1lbnQgKi8KKwkJfSBlbHNlIHsJCS8qIFN0cmVhbWluZyBhbmQgaW4gRGF0YSBw aGFzZSAqLworCQkgICAgdHlwZSA9ICdZJzsJCS8qIEFzc3VtZSBhbGwgaXMgbm9ybWFsICovCisJ CSAgICBpZiAoY2hraW50KCkgPCAwKQkvKiBDaGVjayBmb3IgY29uc29sZSBpbnRlcnJ1cHRzLiAq LworCQkgICAgICB0eXBlID0gJ3onOworCQkgICAgZWxzZSBpZiAodHRjaGsoKSA+IDQgKyBiY3R1 KSAvKiBDaGVjayBmb3IgcmV0dXJuIHRyYWZmaWMgKi8KKwkJICAgICAgdHlwZSA9IHJwYWNrKCk7 CisJCSAgICBkZWJ1ZyhGMDAwLCJpbnB1dCBzdHJlYW1pbmcgdHlwZSIsIiIsdHlwZSk7CisJCX0K KyNlbmRpZiAvKiBTVFJFQU1JTkcgKi8KKwkJZGVidWcoRjExMSwiaW5wdXQgc2VuZCIsKGNoYXIg KikgcmRhdGFwLChpbnQpIHR5cGUpOworCQl3aGlsZSAodHlwZSA9PSAnZScpIHsJLyogSGFuZGxl IGVjaG9lcyAqLworCQkgICAgZGVidWcoRjAwMCwiZWNobyBkaXNjYXJkZWQiLCIiLHR5cGUpOwor CQkgICAgdHlwZSA9IHJwYWNrKCk7CisJCX0KKyNpZm5kZWYgT0xEQ0hLSU5UCisJCWlmICh0eXBl ID09ICd6JykgeworCQkgICAgZXBrdHJjdmQgPSAxOworCQkgICAgZXJycGt0KChDSEFSICopIlVz ZXIgY2FuY2VsbGVkLiIpOworCQkgICAgdHlwZSA9ICdFJzsKKwkJICAgIGJyZWFrOworCQl9Cisj ZW5kaWYgLyogT0xEQ0hLSU5UICovCisJCWlmICh0eXBlIDwgLTEpIHsKKwkJICAgIHh4c2NyZWVu KFNDUl9QVCwncScsMEwsCisJCQkgICAoKGNoYXIgKikoKHR5cGUgPT0gLTIpID8KKwkJCSAgICJJ bnRlcnJ1cHRlZCIgOgorCQkJICAgIkNvbm5lY3Rpb24gbG9zdCIpKQorCQkJICAgKTsKKwkJICAg IGlmICh0eXBlICE9IC0yKQorCQkgICAgICBkb2xvZ2VuZCgpOworCQkgICAgcmV0dXJuKCdxJyk7 CS8qIEN0cmwtQyBvciBjb25uZWN0aW9uIGxvc3QgKi8KKwkJfQorCQlpZiAodHlwZSA9PSAtMSkg eworI2lmZGVmIENPTU1FTlQKKyAgICAgICAgICAgICAgICAgICAgY2hhciBmb29bMjU2XTsKKyAg ICAgICAgICAgICAgICAgICAgY2ttYWt4bXNnKGZvbywyNTYsCisJCQkgICAgICAiUmVjZWl2ZSB3 aW5kb3cgZnVsbCAoZXJyb3IgMTgpOiB3c2xvdHM9IiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNraXRvYSh3c2xvdHMpLAorCQkJICAgICAgIiB3aW5sbz0iLGNraXRvYSh3aW5sbyks IiBwa3RudW09IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNraXRvYShwa3RudW0p LCBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCk7CisJCSAgICBlcnJwa3QoKENIQVIgKilm b28pOworICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAwLGZvbywiIiwwKTsKKyNlbHNlCisJ CSAgICBlcnJwa3QoKENIQVIgKikiUmVjZWl2ZSB3aW5kb3cgZnVsbCIpOyAvKiB3YXMgImludGVy bmFsICovCisgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsIiB3c2xvdHMiLCIiLHdzbG90 cyk7IC8qIGVycm9yIDE4IiAqLworICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCIgd2lu bG8iLCIiLHdpbmxvKTsKKwkJICAgIGRlYnVnKEYxMDEsIiBwa3RudW0iLCIiLHBrdG51bSk7Cisj ZW5kaWYgLyogQ09NTUVOVCAqLworCQkgICAgZHVtcHJidWYoKTsKKwkJICAgIHR5cGUgPSAnRSc7 CisJCSAgICBicmVhazsKKwkJfQorCQlkdW1wcmJ1ZigpOwkJLyogRGVidWdnaW5nICovCisKKyNp ZmRlZiBPTERDSEtJTlQKKwkJaWYgKGNoa2ludCgpIDwgMCkgewkvKiBDaGVjayBmb3IgY29uc29s ZSBpbnRlcnJ1cHRzLiAqLworCQkgICAgZXJycGt0KChDSEFSICopIlVzZXIgY2FuY2VsbGVkLiIp OworCQkgICAgcmV0dXJuKHR5cGUgPSAnRScpOworCQl9CisjZW5kaWYgLyogT0xEQ0hLSU5UICov CisKKwkJLyogR290IGEgcGFja2V0ICovCisKKyNpZmRlZiBTVFJFQU1JTkcKKwkJaWYgKHN0cmVh bWluZykgewkJLyogU3RyZWFtaW5nICovCisJCSAgICBpZiAodHlwZSA9PSAnUScgfHwgdHlwZSA9 PSAnVCcpIHsgLyogRXJyb3JzIGFyZSBmYXRhbC4gKi8KKwkJCWNydW5jaGVkKys7CS8qIEZvciBz dGF0aXN0aWNzICovCisJCQllcnJwa3QoKENIQVIgKikiVHJhbnNtaXNzaW9uIGVycm9yIG9uIHJl bGlhYmxlIGxpbmsuIik7CisJCQl0eXBlID0gJ0UnOworCQkgICAgfQorCQl9CisjZW5kaWYgLyog U1RSRUFNSU5HICovCisJCWlmICh0eXBlID09ICdFJykgeworCQkgICAgZGVidWcoRjEwMSwiaW5w dXQgc2VuZCBnb3QgRSwgbmFrc3RhdGUiLCIiLG5ha3N0YXRlKTsKKwkJICAgIGJyZWFrOwkJLyog RXJyb3IgcGFja2V0ICovCisJCX0KKwkJaWYgKHR5cGUgPT0gJ1EnKSB7CS8qIENydW5jaGVkIHBh Y2tldCAqLworCQkgICAgY3J1bmNoZWQrKzsJCS8qIEZvciBzdGF0aXN0aWNzICovCisJCSAgICBu dW1lcnJzKys7CQkvKiBGb3IgcGFja2V0IHJlc2l6aW5nICovCisJCSAgICB4ID0gcmVzZW5kKHdp bmxvKTsJLyogUmVzZW5kIHdpbmRvdy1sb3cgKi8KKwkJICAgIGlmICh4IDwgMCkgeworCQkJdHlw ZSA9ICdFJzsKKwkJCWVycnBrdCgoQ0hBUiAqKSJUb28gbWFueSByZXRyaWVzIik7CisJCQlicmVh azsKKwkJICAgIH0KKwkJICAgIGNvbnRpbnVlOworCQl9CisJCWlmICh0eXBlID09ICdUJykgewkv KiBUaW1lb3V0IHdhaXRpbmcgZm9yIEFDS3MuICovCisJCSAgICB0aW1lb3V0cysrOwkJLyogQ291 bnQgaXQgKi8KKwkJICAgIG51bWVycnMrKzsJCS8qIENvdW50IGFuIGVycm9yIHRvbyAqLworCQkg ICAgZGVidWcoRjEwMSwiaW5wdXQgc2VuZCBzdGF0ZSB0aW1lb3V0LCB3aW5sbyIsIiIsd2lubG8p OworCisJCSAgICAvKiBSZXRyYW5zbWl0IHRoZSBvbGRlc3QgdW4tQUNLJ2QgcGFja2V0LiAqLwor CisJCSAgICBkZWJ1ZyhGMTAxLCJpbnB1dCBzZW5kIHJlc2VuZGluZyB3aW5sbyIsIiIsd2lubG8p OworCQkgICAgaWYgKHJlc2VuZCh3aW5sbykgPCAwKSB7IC8qIENoZWNrIHJldHJpZXMgKi8KKwkJ CWRlYnVnKEYxMDEsImlucHV0IHNlbmQgdG9vIG1hbnkgcmVzZW5kcyIsIiIsbWF4dHJ5KTsKKwkJ CWVycnBrdCgoQ0hBUiAqKSJUb28gbWFueSByZXRyaWVzIik7CisJCQlyZXR1cm4odHlwZSA9ICdF Jyk7CisJCSAgICB9CisjaWZkZWYgTkVXRFBMCisJCSAgICAvKiBSZWR1Y2UgcHJldmFpbGluZyBw YWNrZXQgbGVuZ3RoICovCisJCSAgICB4ID0gc3NlcXRibFt3aW5sb107CS8qIEdldCBsZW5ndGgg b2YgcGFja2V0IHdlIHdhbnQgQUNLZCAqLworCQkgICAgaWYgKHggPiAtMSkgewkvKiBPbmx5IGlm IHdlIGhhdmUgYSB2YWxpZCBpbmRleCAqLworCQkJaWYgKHNfcGt0W3hdLnBrX3R5cCA9PSAnRCcp IHsgLyogb25seSBmb3IgRCBwYWNrZXRzICovCisJCQkgICAgc3BzaXogPSAoc19wa3RbeF0ucGtf bGVuICsgOCkgPj4gMTsgLyogaGFsdmUgaXQgKi8KKwkJCSAgICBpZiAoc3BzaXogPCAyMCkgc3Bz aXogPSAyMDsgLyogd2l0aGluIHJlYXNvbiAqLworCQkJICAgIGRlYnVnKEYxMDEsImlucHV0IFQg Y3V0IHBhY2tldCBsZW5ndGgiLCIiLHNwc2l6KTsKKwkJCX0KKwkJICAgIH0KKyNlbmRpZiAvKiBO RVdEUEwgKi8KKwkJICAgIGNvbnRpbnVlOworCQl9CisJICAgIH0KKwkgICAgLyogR290IGFuIGFj dHVhbCBub3JtYWwgcGFja2V0ICovCisKKwkgICAgbmFrMmFjayA9IDA7CQkvKiBVbnNldCB0aGlz IGZsYWcuICovCisJICAgIHkgPSBjaGt3aW4ocnNuLHdpbmxvLHdzbG90cyk7IC8qIElzIGl0IGlu IHRoZSB3aW5kb3c/ICovCisJICAgIGRlYnVnKEYxMDEsImlucHV0IHNlbmQgcnNuIiwiIixyc24p OworCSAgICBkZWJ1ZyhGMTAxLCJpbnB1dCBzZW5kIHdpbmxvIiwiIix3aW5sbyk7CisJICAgIGRl YnVnKEYxMDEsImlucHV0IHNlbmQgY2hrd2luIiwiIix5KTsKKworCSAgICBpZiAodHlwZSA9PSAn WScpIHsJCS8qIEdvdCBhbiBBQ0sgKi8KKwkJaWYgKHkgPT0gMCkgewkJLyogSW4gY3VycmVudCB3 aW5kb3cgKi8KKwkJICAgIGlmIChzcGFja2V0cyA8IDQpCS8qIEVycm9yIGNvdW50ZXIgZG9lc24n dCBjb3VudCAqLworCQkgICAgICBudW1lcnJzID0gMDsJLyogdW50aWwgZGF0YSBwaGFzZS4gKi8K KwkJICAgIHNhY2t0YmxbcnNuXSsrOwkvKiBNYXJrIHRoZSBwYWNrZXQgYXMgQUNLJ2QgKi8KKwkJ ICAgIHggPSBzc2VxdGJsW3Jzbl07CS8qIEdldCBBQ0snZCBwYWNrZXQncyBidWZmZXIgaW5kZXgg Ki8KKwkJICAgIGRlYnVnKEYxMDEsImJlc3RsZW4gYWNrIHgiLCIiLHgpOworI2lmZGVmIE5FV0RQ TAorCQkgICAgaWYgKHggPiAtMSkgeworCQkJYWNrdHlwZSA9IHNfcGt0W3hdLnBrX3R5cDsgLyog R2V0IHR5cGUgKi8KKwkJCWRlYnVnKEYwMDAsImJlc3RsZW4gYWNrIHR5cGUiLCIiLGFja3R5cGUp OworCisJCQlpZiAoYWNrdHlwZSA9PSAnRCcpIHsgLyogQWRqdXN0IGRhdGEgcGFja2V0IGxlbmd0 aCAqLworCQkJICAgIGlmIChzcHNpeiA+IGJlc3RsZW4pIHsKKwkJCQliZXN0bGVuID0gc3BzaXo7 CisJCQkJZGVidWcoRjEwMSwiYmVzdGxlbiBCIiwiIixiZXN0bGVuKTsKKwkJCSAgICB9CisjaWZk ZWYgREVCVUcKKwkJCSAgICBpZiAoZGVibG9nKSB7CisJCQkJZGVidWcoRjEwMSwiYmVzdGxlbiBy ZXRyeSIsIiIsc19wa3RbeF0ucGtfcnRyKTsKKwkJCQlkZWJ1ZyhGMTAxLCJiZXN0bGVuIGxlbiIs IiIsc19wa3RbeF0ucGtfbGVuKTsKKwkJCQlkZWJ1ZyhGMTAxLCJiZXN0bGVuIHNwYWNrZXRzIiwi IixzcGFja2V0cyk7CisJCQkgICAgfQorI2VuZGlmIC8qIERFQlVHICovCisJCQkgICAgLyogU2V0 IG5ldyBiZXN0IGxlbmd0aCAqLworCQkJICAgIGlmIChzX3BrdFt4XS5wa19ydHIgPT0gMCAmJgor CQkJCXNfcGt0W3hdLnBrX2xlbiArIDggPiBiZXN0bGVuKSB7CisJCQkJYmVzdGxlbiA9IHNfcGt0 W3hdLnBrX2xlbiArIDg7CisJCQkJaWYgKGJlc3RsZW4gPiBzcG1heCkKKwkJCQkgIGJlc3RsZW4g PSBzcG1heDsKKwkJCQlkZWJ1ZyhGMTAxLCJiZXN0bGVuIEEiLCIiLGJlc3RsZW4pOworCQkJICAg IH0KKyNpZmRlZiBERUJVRworCQkJICAgIGlmIChkZWJsb2cpIHsKKwkJCQlkZWJ1ZyhGMTAxLCJi ZXN0bGVuIHdzbG90cyIsIiIsd3Nsb3RzKTsKKwkJCQlkZWJ1ZyhGMTAxLCJiZXN0bGVuIG1heHNl bmQiLCIiLG1heHNlbmQpOworCQkJICAgIH0KKyNlbmRpZiAvKiBERUJVRyAqLworCQkJICAgIC8q IFNsb3cgc3RhcnQgKi8KKwkJCSAgICBpZiAoc2xvc3RhcnQgJiYKKwkJCQkobWF4c2VuZCA8PSBz cG1heCkgJiYKKwkJCQkocnBhY2tldHMgPCAxMSkgJiYKKwkJCQkobnVtZXJycyA9PSAwKSkgewor CQkJCXNwc2l6ID0gc3BzaXogPDwgMTsKKwkJCQlkZWJ1ZyhGMTAxLCJiZXN0bGVuIHNwc2l6IEEi LCIiLHNwc2l6KTsKKworCQkJICAgIC8qIENyZWVwIHVwIHRvIGJlc3QgbGVuZ3RoICovCisJCQkg ICAgfSBlbHNlIGlmICgoc3BhY2tldHMgPiA1KSAmJgorCQkJCSAgICAgICAoc3BzaXogPCBiZXN0 bGVuIC0gOCkpIHsKKwkJCQlzcHNpeiArPSAoYmVzdGxlbiAtIHNwc2l6KSAvIDM7CisJCQkJZGVi dWcoRjEwMSwiYmVzdGxlbiBzcHNpeiBCIiwiIixzcHNpeik7CisKKwkJCSAgICAvKiBQdXNoIHRo ZSBlbnZlbG9wZSAqLworCQkJICAgIH0gZWxzZSBpZiAoKHNwYWNrZXRzICUgKHdzbG90cyArIDEp ID09IDApICYmCisJCQkJICAgICAgIChzcGFja2V0cyA+IDYpICYmCisJCQkJICAgICAgIChiZXN0 bGVuIDwgc3BtYXggLSA4KSAmJgorCQkJCSAgICAgICAoc3BzaXogPCBzcG1heCkpIHsKKwkJCQlz cHNpeiArPSAoc3BtYXggLSBiZXN0bGVuKSAvIDM7CisJCQkJZGVidWcoRjEwMSwiYmVzdGxlbiBz cHNpeiBDIiwiIixzcHNpeik7CisJCQkgICAgfQorCQkJICAgIC8qIEJ1dCBub3QgdG9vIGZhciAq LworCQkJICAgIGlmIChzcHNpeiA+IHNwbWF4KSB7CisJCQkJc3BzaXogPSBzcG1heDsKKwkJCQlk ZWJ1ZyhGMTAxLCJiZXN0bGVuIHNwc2l6IEQiLCIiLHNwc2l6KTsKKwkJCSAgICB9CisJCQl9CisJ CSAgICB9CisjZW5kaWYgLyogTkVXRFBMICovCisKKyNpZmRlZiBDS19USU1FUlMKKwkJICAgIGlm IChydHRmbGcgJiYgdGltaW50KSAvKiBJZiBkb2luZyBkeW5hbWljIHRpbWVycyAqLworCQkgICAg ICBnZXRydHQobmFrc3RhdGUsIHJzbik7IC8qIGNhbGwgcm91dGluZSB0byBzZXQgaXQuICovCisJ CSAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgLyogSkhEIDIwMTAwMjA4ICovCisJCSAgICAg IHJjdnRpbW8gPSB0aW1pbnQ7CSAgICAgLyogSkhEIDIwMTAwMjA4ICovCisjZW5kaWYgLyogQ0tf VElNRVJTICovCisvKgorICBOT1RFOiBUaGUgZm9sbG93aW5nIHN0YXRlbWVudCBmcmVlcyB0aGUg YnVmZmVyIG9mIHRoZSBBQ0sgd2UganVzdCBnb3QuCisgIEJ1dCB0aGUgdXBwZXIgbGF5ZXJzIHN0 aWxsIG5lZWQgdGhlIGRhdGEsIGxpa2UgaWYgaXQncyB0aGUgQUNLIHRvIGFuIEksCisgIFMsIEYs IEQsIFosIG9yIGp1c3QgYWJvdXQgYW55IGtpbmQgb2YgcGFja2V0LiAgU28gZm9yIG5vdywgZnJl ZXJidWYoKQorICBkZWFsbG9jYXRlcyB0aGUgYnVmZmVyLCBidXQgZG9lcyBub3QgZXJhc2UgdGhl IGRhdGEgb3IgZGVzdHJveSB0aGUgcG9pbnRlcgorICB0byBpdC4gIFRoZXJlJ3Mgbm8gb3RoZXIg c2luZ2xlIHBsYWNlIHdoZXJlIHRoZXNlIHJlY2VpdmUgYnVmZmVycyBjYW4gYmUKKyAgY29ycmVj dGx5IGZyZWVkICg/KSAuLi4KKyovCisJCSAgICBmcmVlcnBrdChyc24pOwkvKiBGcmVlIHRoZSBB Q0sncyBidWZmZXIgKi8KKwkJICAgIGZyZWVzYnVmKHJzbik7CS8qICoqKiBGcmVlIHRoZSBzZW50 IHBhY2tldCdzIGJ1ZmZlciAqLworCQkgICAgaWYgKHJzbiA9PSB3aW5sbykgewkvKiBHb3QgdGhl IG9uZSB3ZSB3YW50ICovCisJCQlzYWNrdGJsW3dpbmxvXSA9IDA7CisJCQl3aW5sbyA9ICh3aW5s byArIDEpICUgNjQ7CisJCQlkZWJ1ZyhGMTAxLCJpbnB1dCBzZW5kIHJvdGF0ZWQgc2VuZCB3aW5k b3ciLCIiLHdpbmxvKTsKKwkJCWJyZWFrOwkJLyogUmV0dXJuIHRoZSBBQ0sgKi8KKwkJICAgIH0g ZWxzZSB7CisJCQlkZWJ1ZyhGMTAxLCJpbnB1dCBzZW5kIG1hcmsgcGt0IiwiIixyc24pOworCQkJ Y29udGludWU7CS8qIE90aGVyd2lzZSBnbyByZWFkIGFub3RoZXIgcGFja2V0ICovCisJCSAgICB9 CisJCX0gZWxzZSBpZiAoeSA9PSAxICYmIHdzbG90cyA8IDIpIHsgLyogKDE5MCkgQUNLIGZvciBw cmV2aW91cyAqLworCQkgICAgbnVtZXJycysrOwkJLyogPT0gTkFLIGZvciBjdXJyZW50LCBjb3Vu dCBlcnJvciAqLworCQkgICAgZGVidWcoRjEwMSwiaW5wdXQgc2VuZCBBQ0sgZm9yIHByZXZpb3Vz IiwiIixyc24pOworCQkgICAgZnJlZXJwa3QocnNuKTsJLyogRnJlZSBOQUsncyBidWZmZXIgKi8K KwkJICAgIHggPSByZXNlbmQod2lubG8pOwkvKiBSZXNlbmQgY3VycmVudCBwYWNrZXQgKi8KKwkJ ICAgIGlmICh4IDwgMCkgeworCQkJdHlwZSA9ICdFJzsKKwkJCWVycnBrdCgoQ0hBUiAqKSJUb28g bWFueSByZXRyaWVzIik7CisJCQlicmVhazsKKwkJICAgIH0gZWxzZSBjb250aW51ZTsJLyogUmVz ZW5kIG9rLCBnbyByZWFkIGFub3RoZXIgcGFja2V0ICovCisJCX0gZWxzZSB7CQkvKiBPdGhlciBj YXNlcywganVzdCBpZ25vcmUgKi8KKwkJICAgIGRlYnVnKEYxMDEsImlucHV0IHNlbmQgQUNLIG91 dCBvZiB3aW5kb3ciLCIiLHJzbik7CisJCSAgICBmcmVlcnBrdChyc24pOworCQkgICAgY29udGlu dWU7CisJCX0KKwkgICAgfQorCSAgICBpZiAodHlwZSA9PSAnTicpIHsJCS8qIE5BSyAqLworCQlu dW1lcnJzKys7CQkvKiBDb3VudCBhbiBlcnJvciAqLworI2lmZGVmIFNUUkVBTUlORworCQlpZiAo c3RyZWFtaW5nKSB7CQkvKiBTdHJlYW1pbmcgKi8KKwkJICAgIGVycnBrdCgoQ0hBUiAqKSJOQUsg cmVjZWl2ZWQgb24gcmVsaWFibGUgbGluay4iKTsKKwkJICAgIHR5cGUgPSAnRSc7CisJCSAgICBi cmVhazsKKwkJfQorI2VuZGlmIC8qIFNUUkVBTUlORyAqLworCisJCWRlYnVnKEYxMDEsImlucHV0 IHNlbmQgTkFLIiwiIixyc24pOworI2lmZGVmIE5FV0RQTAorCQkvKiBSZWR1Y2UgcHJldmFpbGlu ZyBwYWNrZXQgbGVuZ3RoICovCisJCXggPSBzc2VxdGJsW3Jzbl07CS8qIExlbmd0aCBvZiBwYWNr ZXQgdGhhdCB3YXMgTkFLJ2QgKi8KKwkJaWYgKHggPiAtMSkgewkJLyogSWYgaXQncyBhIERhdGEg cGFja2V0IHdlJ3ZlIHNlbnQgKi8KKwkJICAgIGlmIChzX3BrdFt4XS5wa190eXAgPT0gJ0QnKSB7 CisJCQlzcHNpeiA9IChzX3BrdFt4XS5wa19sZW4gKyA4KSA+PiAxOyAvKiBIYWx2ZSBsZW5ndGgg Ki8KKyNpZmRlZiBDT01NRU5UCisJCQkvKiBUaGlzIG1pZ2h0IGJlIGEgZ29vZCBpZGVhIC0tIGhh dmVuJ3QgdHJpZWQgaXQgLi4uICovCisJCQlpZiAoYmVzdGxlbiA+IDAgJiYgc3BzaXogPiBiZXN0 bGVuKQorCQkJICBzcHNpeiA9IGJlc3RsZW47CisjZW5kaWYgLyogQ09NTUVOVCAqLworCQkJaWYg KHNwc2l6IDwgMjApIHNwc2l6ID0gMjA7CisJCQlkZWJ1ZyhGMTAxLCJpbnB1dCBOIGN1dCBwYWNr ZXQgbGVuZ3RoIiwiIixzcHNpeik7CisJCSAgICB9CisJCX0KKyNlbmRpZiAvKiBORVdEUEwgKi8K KwkJZnJlZXJwa3QocnNuKTsJCS8qIEZyZWUgYnVmZmVyIHdoZXJlIE5BSyBsaWVzLiAqLworCQlp ZiAoeSA9PSAwKSB7CQkvKiBJbiBjdXJyZW50IHdpbmRvdyAqLworCQkgICAgZGVidWcoRjEwMCwi IGluIHdpbmRvdyIsIiIsMCk7CisJCSAgICBrID0gc3NlcXRibFtyc25dOwkvKiBHZXQgcG9pbnRl ciB0byBOQUsnZCBwYWNrZXQuICovCisJCSAgICBpZiAoayA8IDAgfHwgKGsgPiAtMSAmJiBzX3Br dFtrXS5wa190eXAgPT0gJyAnKSkgeworCQkJeCA9IHJlc2VuZCh3aW5sbyk7IC8qIFBhY2tldCB3 ZSBoYXZlbid0IHNlbnQgeWV0LiAqLworCQkgICAgfSBlbHNlIHsKKwkJCXggPSByZXNlbmQocnNu KTsgLyogUmVzZW5kIHJlcXVlc3RlZCBwYWNrZXQuICovCisJCSAgICB9CisJCSAgICBpZiAoeCA8 IDApIHsJLyogUmVzZW5kIGVycm9yIGlzIGZhdGFsLiAgKi8KKwkJCXR5cGUgPSAnRSc7CisJCQll cnJwa3QoKENIQVIgKikiVG9vIG1hbnkgcmV0cmllcyIpOworCQkJYnJlYWs7CisJCSAgICB9IGVs c2UgY29udGludWU7CS8qIFJlc2VuZCBvaywgZ28gcmVhZCBhbm90aGVyIHBhY2tldCAqLworCQl9 IGVsc2UgaWYgKChyc24gPT0gKHBrdG51bSArIDEpICUgNjQpKSB7IC8qIE5BSyBmb3IgbmV4dCBw a3QgKi8KKwkJICAgIGlmICh3c2xvdHMgPiAxKSB7CisJCQlkZWJ1ZyggRjEwMSwiTkFLIGZvciBu ZXh0IHBhY2tldCwgd2luZG93aW5nIiwiIixyc24pOworCQkJeCA9IHJlc2VuZCh3aW5sbyk7IC8q IFJlc2VuZCB3aW5kb3ctbG93ICovCisJCQlpZiAoeCA8IDApIHsKKwkJCSAgICB0eXBlID0gJ0Un OworCQkJICAgIGVycnBrdCgoQ0hBUiAqKSJUb28gbWFueSByZXRyaWVzIik7CisJCQkgICAgYnJl YWs7CisJCQl9CisJCQljb250aW51ZTsJLyogR28gYmFjayBhbmQgcmVhZCBhbm90aGVyIHBrdCAq LworCQkgICAgfQorCQkgICAgZGVidWcoRjEwMSwiTkFLIGZvciBuZXh0IHBhY2tldCwgbm8gd2lu ZG93aW5nIiwiIixyc24pOworCQkgICAgeCA9IChyc24gPT0gMCkgPyA2MyA6IHJzbiAtIDE7CisJ CSAgICBpZiAoeCA9PSAwICYmIChzbmR0eXAgPT0gJ1MnIHx8IHNuZHR5cCA9PSAnSScpKSB7CisJ CQlyZXNlbmQoMCk7CS8qIEFDSyBmb3IgUyBvciBJIHBhY2tldCBtaXNzaW5nICovCisJCQljb250 aW51ZTsJLyogc28gcmVzZW5kIHRoZSBTIG9yIEkgKi8KKwkJICAgIH0KKwkJICAgIHJzbiA9IHg7 CQkvKiBFbHNlLCB0cmVhdCBOQUsobisxKSBhcyBBQ0sobikgKi8KKwkJICAgIG5hazJhY2sgPSAx OwkvKiBHbyBiYWNrIGFuZCBwcm9jZXNzIHRoZSBBQ0sgKi8KKwkJICAgIGNvbnRpbnVlOworCQl9 IGVsc2UgaWYgKHkgPiAwKSB7CS8qIE5BSyBmb3IgcGt0IHdlIGNhbid0IHJlc2VuZCAqLworCQkg ICAgZGVidWcoRjEwMSwiIE5BSyBvdXQgb2Ygd2luZG93IiwiIixyc24pOyAvKiBiYWQuLi4gKi8K KwkJICAgIHR5cGUgPSAnRSc7CisJCSAgICBlcnJwa3QoKENIQVIgKikiTkFLIG91dCBvZiB3aW5k b3ciKTsKKwkJICAgIGJyZWFrOworCQl9IGVsc2UgY29udGludWU7CS8qIElnbm9yZSBvdGhlciBO QUtzICovCisJICAgIH0JCQkJLyogRW5kIG9mIGZpbGUtc2VuZGVyIE5BSyBoYW5kbGVyICovCisK KyAgICAgICAgICAgIGlmIChyc24gPT0gd2lubG8pIHsJCS8qIE5vdCBBQ0ssIE5BSywgdGltZW91 dCwgZXRjLiAqLworCQlkZWJ1ZyhGMDAwLCJpbnB1dCBzZW5kIHVuZXhwZWN0ZWQgdHlwZSIsIiIs dHlwZSk7CisJCWJyZWFrOworCSAgICB9CisJfQkJCQkvKiBFbmQgb2YgZmlsZS1zZW5kZXIgc2Vj dGlvbiAqLworICAgIH0JCQkJCS8qIEVuZCBvZiBpbnB1dCgpIHdoaWxlKCkgbG9vcCAqLworLyoK KyAgV2hlbiB0aGUgd2luZG93IHNpemUgaXMgMSBhbmQgd2UgaGF2ZSB0aGUgcGFja2V0IHdlIHdh bnQsIHRoZXJlIGNhbiBub3QKKyAgcG9zc2libHkgYmUgYW55dGhpbmcgd2FpdGluZyBmb3IgdXMg b24gdGhlIGNvbm5lY3Rpb24gdGhhdCBpcyB1c2VmdWwgdG8gdXMuCisgIEhvd2V2ZXIsIHRoZXJl IG1pZ2h0IGJlIHJlZHVuZGFudCBjb3BpZXMgb2YgYSBwYWNrZXQgd2UgYWxyZWFkeSBnb3QsIHdo aWNoCisgIHdvdWxkIGNhdXNlIG5lZWRsZXNzIGN5Y2xlcyBvZiByZXBlYXRlZCBwYWNrZXRzLiAg VGhlcmVmb3JlIHdlIGZsdXNoIHRoZQorICBjb21tdW5pY2F0aW9ucyBpbnB1dCBidWZmZXIgbm93 IHRvIHRyeSB0byBnZXQgcmlkIG9mIHVuZGVzaXJlZCBhbmQgdW5uZWVkZWQKKyAgcGFja2V0cyB0 aGF0IHdlIGhhdmUgbm90IHJlYWQgeWV0LgorCisgIEFjdHVhbGx5LCB0aGUgZmlyc3Qgc2VudGVu Y2UgYWJvdmUgaXMgbm90IGVudGlyZWx5IHRydWU6IHRoZXJlIGNvdWxkIGJlIGFuCisgIEVycm9y IHBhY2tldCB3YWl0aW5nIHRvIGJlIHJlYWQuICBGbHVzaGluZyBhbiBFIHBhY2tldCBpcyBiYWQg YmVjYXVzZSBpdAorICB3aWxsIG5vdCBiZSByZXNlbnQsIGFuZCB3ZSdsbCBnbyBpbnRvIGEgY3lj bGUgb2YgdGltaW5nIG91dCBhbmQKKyAgcmV0cmFuc21pdHRpbmcgdXAgdG8gdGhlIHJldHJ5IGxp bWl0LiAgLSBmZGMgMjAwNy8wMy8wMgorKi8KKyAgICBpZiAod3Nsb3RuID09IDEJCQkvKiAobm90 IHdzbG90cyEpICovCisjaWZkZWYgU1RSRUFNSU5HCisJJiYgIXN0cmVhbWluZwkJCS8qIEJ1dCBu b3Qgd2hlbiBzdHJlYW1pbmcgKi8KKyNlbmRpZiAvKiBTVFJFQU1JTkcgKi8KKwkpIHsKKwlkZWJ1 ZyhGMTAwLCJpbnB1dCBhYm91dCB0byBmbHVzaCIsIiIsMCk7CisJdHRmbHVpKCk7CQkvKiBHb3Qg d2hhdCB3ZSB3YW50LCBjbGVhciBpbnB1dCBidWZmZXIuICovCisgICAgfQorI2lmbmRlZiBORVdE UEwKKyAgICBpZiAoIW5ha3N0YXRlKQkJCS8qIFdoZW4gc2VuZGluZyAqLworICAgICAgcmNhbGNw c3ooKTsJCQkvKiByZWNhbGN1bGF0ZSBzaXplIGV2ZXJ5IHBhY2tldCAqLworI2VuZGlmIC8qIE5F V0RQTCAqLworICAgIGlmICh0eXBlID09ICdFJykKKyAgICAgIHhpdHN0YSB8PSAod2hhdCA/IHdo YXQgOiAxKTsJLyogUmVtZW1iZXIgd2hhdCBmYWlsZWQuICovCisgICAgZGVidWcoRjEwMSwiaW5w dXQgd2lubG8iLCIiLHdpbmxvKTsKKyAgICBkZWJ1ZyhGMTAxLCJpbnB1dCByc24iLCIiLHJzbik7 CisgICAgZGVidWcoRjAwMCwiaW5wdXQgcmV0dXJuaW5nIHR5cGUiLCIiLHR5cGUpOworICAgIHJl dHVybihyY3Z0eXAgPSB0eXBlKTsJCS8qIFN1Y2Nlc3MsIHJldHVybiBwYWNrZXQgdHlwZS4gKi8K K30KKworI2lmZGVmIFBBUlNFTlNFCisvKiAgUCBBIFIgQyBIIEsgIC0tICBDaGVjayBpZiBLZXJt aXQgcGFja2V0IGhhcyBwYXJpdHkgICovCisKKy8qCisgIENhbGwgd2l0aCBzID0gcG9pbnRlciB0 byBwYWNrZXQsIHN0YXJ0ID0gcGFja2V0IHN0YXJ0IGNoYXJhY3RlciwgbiA9IGxlbmd0aC4KKyAg UmV0dXJucyAwIGlmIHBhY2tldCBoYXMgbm8gcGFyaXR5LCAtMSBvbiBlcnJvciwgb3IsIGlmIHBh Y2tldCBoYXMgcGFyaXR5OgorICAgICdlJyBmb3IgZXZlbiwgJ28nIGZvciBvZGQsICdtJyBmb3Ig bWFyay4gIFNwYWNlIHBhcml0eSBjYW5ub3QgYmUgc2Vuc2VkLgorICBTbyBhIHJldHVybiB2YWx1 ZSBvZiAwIHJlYWxseSBtZWFucyBlaXRoZXIgc3BhY2Ugb3Igbm9uZS4KKyAgUmV0dXJucyAtMiBp ZiBwYXJpdHkgaGFzIGFscmVhZHkgYmVlbiBjaGVja2VkIGR1cmluZyB0aGlzIHByb3RvY29sIG9w ZXJhdGlvbi4KKyovCitpbnQKKyNpZmRlZiBDS19BTlNJQworcGFyY2hrKENIQVIgKnMsIENIQVIg c3RhcnQsIGludCBuKQorI2Vsc2UKK3BhcmNoayhzLHN0YXJ0LG4pIENIQVIgKnMsIHN0YXJ0OyBp bnQgbjsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogcGFyY2hrICovIHsKKyAgICBDSEFSIHMw LCBzMSwgczIsIHMzOworCisgICAgZGVidWcoRjEwMSwicGFyY2hrIG4iLCIiLG4pOworICAgIGRl YnVnKEYxMDEsInBhcmNoayBzdGFydCIsIiIsc3RhcnQpOworCisgICAgczAgPSBzWzBdICYgMHg3 ZjsJCQkvKiBNYXJrIGZpZWxkICh1c3VhbGx5IEN0cmwtQSkgKi8KKworICAgIGlmIChzMCAhPSBz dGFydCB8fCBuIDwgNSkgcmV0dXJuKC0xKTsgLyogTm90IGEgdmFsaWQgcGFja2V0ICovCisKKy8q IExvb2sgYXQgcGFja2V0IGNvbnRyb2wgZmllbGRzLCB3aGljaCBuZXZlciBoYXZlIDh0aCBiaXQg c2V0ICovCisvKiBGaXJzdCBjaGVjayBmb3Igbm8gcGFyaXR5LCBtb3N0IGNvbW1vbiBjYXNlLiAq LworCisgICAgaWYgKCgoc1swXSB8IHNbMV0gfCBzWzJdIHwgc1szXSkgJiAweDgwKSA9PSAwKQor ICAgICAgcmV0dXJuKDApOwkJCS8qIE5vIHBhcml0eSBvciBzcGFjZSBwYXJpdHkgKi8KKworLyog Q2hlY2sgZm9yIG1hcmsgcGFyaXR5ICovCisKKyAgICBpZiAoKChzWzBdICYgc1sxXSAmIHNbMl0g JiBzWzNdKSAmIDB4ODApID09IDB4ODApCisgICAgICByZXR1cm4oJ20nKTsJCQkvKiBNYXJrIHBh cml0eSAqLworCisvKiBQYWNrZXQgaGFzIHNvbWUga2luZCBvZiBwYXJpdHkgKi8KKy8qIE1ha2Ug Ny1iaXQgY29waWVzIG9mIGNvbnRyb2wgZmllbGRzICovCisKKyAgICBzMSA9IHNbMV0gJiAweDdm OwkJCS8qIExFTiAqLworICAgIHMyID0gc1syXSAmIDB4N2Y7CQkJLyogU0VRICovCisgICAgczMg PSBzWzNdICYgMHg3ZjsJCQkvKiBUWVBFICovCisKKy8qIENoZWNrIGZvciBldmVuIHBhcml0eSAq LworCisgICAgaWYgKChzWzBdID09IHBfdGJsW3MwXSkgJiYKKyAgICAgICAgKHNbMV0gPT0gcF90 YmxbczFdKSAmJgorICAgICAgICAoc1syXSA9PSBwX3RibFtzMl0pICYmCisJKHNbM10gPT0gcF90 YmxbczNdKSkKKyAgICAgIHJldHVybignZScpOworCisvKiBDaGVjayBmb3Igb2RkIHBhcml0eSAq LworCisgICAgaWYgKChzWzBdICE9IHBfdGJsW3MwXSkgJiYKKyAgICAgICAgKHNbMV0gIT0gcF90 YmxbczFdKSAmJgorICAgICAgICAoc1syXSAhPSBwX3RibFtzMl0pICYmCisJKHNbM10gIT0gcF90 YmxbczNdKSkKKyAgICAgIHJldHVybignbycpOworCisvKiBPdGhlcndpc2UgaXQncyBwcm9iYWJs eSBsaW5lIG5vaXNlLiAgTGV0IGNoZWNrc3VtIGNhbGN1bGF0aW9uIGNhdGNoIGl0LiAqLworCisg ICAgcmV0dXJuKC0xKTsKK30KKyNlbmRpZiAvKiBQQVJTRU5TRSAqLworDAorLyoKKyAgQ2hlY2sg dG8gbWFrZSBzdXJlIHRpbWVvdXQgaW50ZXJ2YWxzIGFyZSBsb25nIGVub3VnaCB0byBhbGxvdyBt YXhpbXVtCisgIGxlbmd0aCBwYWNrZXRzIHRvIGdldCB0aHJvdWdoIGJlZm9yZSB0aGUgdGltZXIg Z29lcyBvZmYuICBJZiBub3QsIHRoZQorICB0aW1lb3V0IGludGVydmFsIGlzIGFkanVzdGVkIHVw d2FyZHMuCisKKyAgVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGEg dHJhbnNhY3Rpb24sIGJlZm9yZSB3ZQorICBrbm93IGFueXRoaW5nIGFib3V0IHRoZSBkZWxheSBj aGFyYWN0ZXJpc3RpY3Mgb2YgdGhlIGxpbmUuICBJdCB3b3JrcworICBvbmx5IGZvciBzZXJpYWwg Y29tbXVuaWNhdGlvbiBkZXZpY2VzOyBpdCB0cnVzdHMgdGhlIHNwZWVkIHJlcG9ydGVkIGJ5Cisg IHRoZSBvcGVyYXRpbmcgc3lzdGVtLgorCisgIENhbGwgd2l0aCBhIHRpbW91dCBpbnRlcnZhbC4g IFJldHVybnMgaXQsIGFkanVzdGVkIGlmIG5lY2Vzc2FyeS4KKyovCitpbnQKK2Noa3RpbW8odGlt byxmbGFnKSBpbnQgdGltbywgZmxhZzsgeworICAgIGxvbmcgY3BzLCB6OyBpbnQgeCwgeTsKKyNp ZmRlZiBTVFJFQU1JTkcKKyAgICBkZWJ1ZyhGMTAxLCJjaGt0aW1vIHN0cmVhbWluZyIsIiIsc3Ry ZWFtaW5nKTsKKyAgICBpZiAoc3RyZWFtaW5nKQorICAgICAgcmV0dXJuKDApOworI2VuZGlmIC8q IFNUUkVBTUlORyAqLworCisgICAgZGVidWcoRjEwMSwiY2hrdGltbyB0aW1vIiwiIix0aW1vKTsg LyogVGltZW91dCBiZWZvcmUgYWRqdXN0bWVudCAqLworICAgIGRlYnVnKEYxMDEsImNoa3RpbW8g ZmxhZyIsIiIsZmxhZyk7CisKKyAgICBpZiAoZmxhZykJCQkJLyogRG9uJ3QgY2hhbmdlIHRpbWVv dXQgaWYgdXNlciAqLworICAgICAgcmV0dXJuKHRpbW8pOwkJCS8qIGdhdmUgU0VUIFNFTkQgVElN RU9VVCBjb21tYW5kLiAqLworICAgIGRlYnVnKEYxMDEsImNoa3RpbW8gc3BtYXgiLCIiLHNwbWF4 KTsKKyAgICBkZWJ1ZyhGMTAxLCJjaGt0aW1vIHVycHNpeiIsIiIsdXJwc2l6KTsKKworICAgIGlm ICghbmV0d29yaykgewkJCS8qIE9uIHNlcmlhbCBjb25uZWN0aW9ucy4uLiAqLworCXNwZWVkID0g dHRnc3BkKCk7CQkvKiBHZXQgY3VycmVudCBzcGVlZC4gKi8KKwlpZiAoc3BlZWQgPiAwTCkgewor CSAgICBjcHMgPSBzcGVlZCAvIDEwTDsJCS8qIENvbnZlcnQgdG8gY2hhcnMgcGVyIHNlY29uZCAq LworCSAgICBpZiAoY3BzID4gMEwpIHsKKwkJbG9uZyBwbGVuOwkJLyogTWF4aW11bSBvZiBzZW5k IGFuZCByY3YgcGt0IHNpemUgKi8KKwkJeiA9IGNwcyAqIChsb25nKSB0aW1vOwkvKiBDaGFycyBw ZXIgdGltZW91dCBpbnRlcnZhbCAqLworCQl6IC09IHogLyAxMEw7CQkvKiBMZXNzIDEwIHBlcmNl bnQgKi8KKwkJcGxlbiA9IHNwbWF4OworCQlpZiAodXJwc2l6ID4gc3BtYXgpIHBsZW4gPSB1cnBz aXo7CisJCWRlYnVnKEYxMDEsImNoa3RpbW8gcGxlbiIsIiIscGxlbik7CisJCWlmICh6IDwgcGxl bikgewkJLyogQ29tcGFyZSB3aXRoIHBhY2tldCBzaXplICovCisJCSAgICB4ID0gKGludCkgKChs b25nKSBwbGVuIC8gY3BzKTsgLyogQWRqdXN0IGlmIG5lY2Vzc2FyeSAqLworCQkgICAgeSA9IHgg LyAxMDsJCS8qIEFkZCAxMCBwZXJjZW50IGZvciBzYWZldHkgKi8KKwkJICAgIGlmICh5IDwgMikg eSA9IDI7CS8qIE9yIDIgc2Vjb25kcywgd2hpY2hldmVyIGlzIG1vcmUgKi8KKwkJICAgIHggKz0g eTsKKwkJICAgIGlmICh4ID4gdGltbykJLyogSWYgdGhpcyBpcyBncmVhdGVyIHRoYW4gY3VycmVu dCAqLworCQkgICAgICB0aW1vID0geDsJCS8qIHRpbWVvdXQsIGNoYW5nZSB0aGUgdGltZW91dCAq LworCQkgICAgZGVidWcoRjEwMSwiY2hrdGltbyBuZXcgdGltbyIsIiIsdGltbyk7CisJCX0KKwkg ICAgfQorCX0KKyAgICB9CisgICAgcmV0dXJuKHRpbW8pOworfQorDAorLyogIFMgUCBBIEMgSyAg LS0gIENvbnN0cnVjdCBhbmQgc2VuZCBhIHBhY2tldCAgKi8KKworLyoKKyAgc3BhY2soKSBzZW5k cyBhIHBhY2tldCBvZiB0aGUgZ2l2ZW4gdHlwZSwgc2VxdWVuY2UgbnVtYmVyIG4sIHdpdGggbGVu IGRhdGEKKyAgY2hhcmFjdGVycyBwb2ludGVkIHRvIGJ5IGQsIGluIGVpdGhlciBhIHJlZ3VsYXIg b3IgZXh0ZW5kZWQtIGxlbmd0aCBwYWNrZXQsCisgIGRlcGVuZGluZyBvbiBsZW4uICBSZXR1cm5z IHRoZSBudW1iZXIgb2YgYnl0ZXMgYWN0dWFsbHkgc2VudCwgb3IgZWxzZSAtMQorICB1cG9uIGZh aWx1cmUuICBVc2VzIGdsb2JhbCBucGFkLCBwYWRjaCwgbXlzdGNoLCBiY3R1LCBkYXRhLiAgTGVh dmVzIHBhY2tldAorICBmdWxseSBidWlsdCBhbmQgbnVsbC10ZXJtaW5hdGVkIGZvciBsYXRlciBy ZXRyYW5zbWlzc2lvbiBieSByZXNlbmQoKS4KKyAgVXBkYXRlcyBnbG9iYWwgc25kcGt0bCAoc2Vu ZC1wYWNrZXQgbGVuZ3RoKS4KKworICBOT1RFOiBUaGUgZ2xvYmFsIHBvaW50ZXIgImRhdGEiIGlz IGFzc3VtZWQgdG8gcG9pbnQgaW50byB0aGUgN3RoIHBvc2l0aW9uCisgIG9mIGEgY2hhcmFjdGVy IGFycmF5IChwcmVzdW1hYmx5IGluIHBhY2tldCBidWZmZXIgZm9yIHRoZSBjdXJyZW50IHBhY2tl dCkuCisgIEl0IHdhcyB1c2VkIGJ5IGdldHBrdCgpIHRvIGJ1aWxkIHRoZSBwYWNrZXQgZGF0YSBm aWVsZC4gIHNwYWNrKCkgZmlsbHMgaW4KKyAgdGhlIGhlYWRlciB0byB0aGUgbGVmdCBvZiB0aGUg ZGF0YSBwb2ludGVyICh0aGUgZGF0YSBwb2ludGVyIGlzIGRlZmluZWQKKyAgaW4gZ2V0c2J1Zigp IGluIGNrY2ZuMy5jKS4gIElmIHRoZSBhZGRyZXNzICJkIiBpcyB0aGUgc2FtZSBhcyAiZGF0YSIs IHRoZW4KKyAgdGhlIHBhY2tldCdzIGRhdGEgZmllbGQgaGFzIGJlZW4gYnVpbHQgImluIHBsYWNl IiBhbmQgbmVlZCBub3QgYmUgY29waWVkLgorKi8KK2ludAorI2lmZGVmIENLX0FOU0lDCitzcGFj ayhjaGFyIHBrdHR5cCwgaW50IG4sIGludCBsZW4sIENIQVIgKmQpCisjZWxzZQorc3BhY2socGt0 dHlwLG4sbGVuLGQpIGNoYXIgcGt0dHlwOyBpbnQgbiwgbGVuOyBDSEFSICpkOworI2VuZGlmIC8q IENLX0FOU0lDICovCisvKiBzcGFjayAqLyB7CisgICAgcmVnaXN0ZXIgaW50IGk7CisgICAgaW50 IGl4LCBqLCBrLCB4LCBscCwgbG9uZ3BrdCwgY29weSwgbG9nbGVuOworCisjaWZkZWYgR0ZUSU1F UgorICAgIENLRkxPQVQgdDEgPSAwLjAsIHQyID0gMC4wOworI2VuZGlmIC8qIEdGVElNRVIgKi8K KworICAgIHJlZ2lzdGVyIENIQVIgKmNwLCAqbXlkYXRhOworICAgIHVuc2lnbmVkIGNyYzsKKwor ICAgIGNvcHkgPSAoZCAhPSBkYXRhKTsJCQkvKiBGbGFnIHdoZXRoZXIgZGF0YSBtdXN0IGJlIGNv cGllZCAgKi8KKworI2lmZGVmIERFQlVHCisgICAgaWYgKGRlYmxvZykgewkJCS8qIFNhdmUgbG90 cyBvZiBmdW5jdGlvbiBjYWxscyEgKi8KKwlkZWJ1ZyhGMTAxLCJzcGFjayBuIiwiIixuKTsKKyNp ZmRlZiBDT01NRU5UCisJaWYgKHBrdHR5cCAhPSAnRCcpIHsJCS8qIERhdGEgcGFja2V0cyB3b3Vs ZCBiZSB0b28gbG9uZyAqLworCSAgICBkZWJ1ZyhGMTExLCJzcGFjayBkYXRhIixkYXRhLGRhdGEp OworCSAgICBkZWJ1ZyhGMTExLCJzcGFjayBkIixkLGQpOworCX0KKyNlbmRpZgkvKiBDT01NRU5U ICovCisJZGVidWcoRjEwMSwic3BhY2sgbGVuIiwiIixsZW4pOworCWRlYnVnKEYxMDEsInNwYWNr IGNvcHkiLCIiLGNvcHkpOworICAgIH0KKyNlbmRpZiAvKiBERUJVRyAqLworCisgICAgbG9uZ3Br dCA9IChsZW4gKyBiY3RsICsgMikgPiA5NDsJLyogRGVjaWRlIHdoZXRoZXIgaXQncyBhIGxvbmcg cGFja2V0ICovCisgICAgbXlkYXRhID0gZGF0YSAtIDcgKyAobG9uZ3BrdCA/IDAgOiAzKTsgLyog U3RhcnRpbmcgcG9zaXRpb24gb2YgaGVhZGVyICovCisgICAgayA9IHNzZXF0Ymxbbl07CQkJLyog UGFja2V0IHN0cnVjdHVyZSBpbmZvIGZvciBwa3QgbiAqLworI2lmZGVmIENPTU1FTlQKKyNpZmRl ZiBERUJVRworICAgIGlmIChkZWJsb2cpIHsJCQkvKiBTYXZlIDIgbW9yZSBmdW5jdGlvbiBjYWxs cy4uLiAqLworCWRlYnVnKEYxMDEsInNwYWNrIG15ZGF0YSIsIiIsbXlkYXRhKTsKKwlkZWJ1ZyhG MTAxLCJzcGFjayBzc2VxdGJsW25dIiwiIixrKTsKKwlpZiAoayA8IDApIHsKKyNpZmRlZiBTVFJF QU1JTkcKKwkgICAgaWYgKCFzdHJlYW1pbmcpCisjZW5kaWYgLyogU1RSRUFNSU5HICovCisJICAg ICAgZGVidWcoRjEwMSwic3BhY2sgc2VuZGluZyBwYWNrZXQgb3V0IG9mIHdpbmRvdyIsIiIsbik7 CisJfQorICAgIH0KKyNlbmRpZiAvKiBERUJVRyAqLworI2VuZGlmCS8qIENPTU1FTlQgKi8KKyAg ICBpZiAoayA+IC0xKSB7CisJc19wa3Rba10ucGtfYWRyID0gbXlkYXRhOwkvKiBSZW1lbWJlciBh ZGRyZXNzIG9mIHBhY2tldC4gKi8KKwlzX3BrdFtrXS5wa19zZXEgPSBuOwkJLyogUmVjb3JkIHNl cXVlbmNlIG51bWJlciAqLworCXNfcGt0W2tdLnBrX3R5cCA9IHBrdHR5cDsJLyogUmVjb3JkIHBh Y2tldCB0eXBlICovCisgICAgfQorICAgIHNwa3RsID0gMDsJCQkJLyogSW5pdGlhbGl6ZSBsZW5n dGggb2YgdGhpcyBwYWNrZXQgKi8KKyAgICBpID0gMDsJCQkJLyogYW5kIHBvc2l0aW9uIGluIHBh Y2tldC4gKi8KKworLyogTm93IGZpbGwgdGhlIHBhY2tldCAqLworCisgICAgbXlkYXRhW2krK10g PSBteXN0Y2g7CQkvKiBNQVJLICovCisgICAgbHAgPSBpKys7CQkJCS8qIFBvc2l0aW9uIG9mIExF TiwgZmlsbCBpbiBsYXRlciAqLworCisgICAgbXlkYXRhW2krK10gPSB0b2NoYXIobik7CQkvKiBT RVEgZmllbGQgKi8KKyAgICBteWRhdGFbaSsrXSA9IHBrdHR5cDsJCS8qIFRZUEUgZmllbGQgKi8K KyAgICBqID0gbGVuICsgYmN0bDsJCQkvKiBMZW5ndGggb2YgZGF0YSArIGJsb2NrIGNoZWNrICov CisgICAgaWYgKGxvbmdwa3QpIHsJCQkvKiBMb25nIHBhY2tldD8gKi8KKwlpbnQgeDsJCQkJLyog WWVzLCB3b3JrIGFyb3VuZCBTQ08gWGVuaXgvMjg2ICovCisjaWZkZWYgQ0tUVU5JTkcKKwl1bnNp Z25lZCBpbnQgY2hrOworI2VuZGlmIC8qIENLVFVOSU5HICovCisJeCA9IGogLyA5NTsJCQkvKiBj b21waWxlciBidWcuLi4gKi8KKyAgICAgICAgbXlkYXRhW2xwXSA9IHRvY2hhcigwKTsJCS8qIFNl dCBMRU4gdG8gemVybyAqLworICAgICAgICBteWRhdGFbaSsrXSA9IHRvY2hhcih4KTsJLyogRXh0 ZW5kZWQgbGVuZ3RoLCBoaWdoIGJ5dGUgKi8KKyAgICAgICAgbXlkYXRhW2krK10gPSB0b2NoYXIo aiAlIDk1KTsJLyogRXh0ZW5kZWQgbGVuZ3RoLCBsb3cgYnl0ZSAqLworI2lmZGVmIENLVFVOSU5H CisgICAgICAgIC8qIEhlYWRlciBjaGVja3N1bSAtIHNraXAgdGhlIGZ1bmN0aW9uIGNhbGxzIGFu ZCBsb29wcyAqLworCSAgY2hrID0gKHVuc2lnbmVkKSBteWRhdGFbbHBdICAgKworCSAgICAgICAg KHVuc2lnbmVkKSBteWRhdGFbbHArMV0gKworCSAgICAgICAgKHVuc2lnbmVkKSBteWRhdGFbbHAr Ml0gKworCQkodW5zaWduZWQpIG15ZGF0YVtscCszXSArCisJCSh1bnNpZ25lZCkgbXlkYXRhW2xw KzRdIDsKKwlteWRhdGFbaSsrXSA9IHRvY2hhcigoQ0hBUikgKCgoKGNoayAmIDAzMDApID4+IDYp ICsgY2hrKSAmIDA3NykpOworI2Vsc2UKKyAgICAgICAgbXlkYXRhW2ldID0gJ1wwJzsJCS8qIFRl cm1pbmF0ZSBmb3IgaGVhZGVyIGNoZWNrc3VtICovCisgICAgICAgIG15ZGF0YVtpKytdID0gdG9j aGFyKGNoazEobXlkYXRhK2xwLDUpKTsKKyNlbmRpZiAvKiBDS1RVTklORyAqLworICAgIH0gZWxz ZSBteWRhdGFbbHBdID0gdG9jaGFyKGorMik7CS8qIE5vcm1hbCBMRU4gKi8KKy8qCisgIFdoZW4g c2VuZGluZyBhIGZpbGUsIHRoZSBkYXRhIGlzIGFscmVhZHkgaW4gdGhlIHJpZ2h0IHBsYWNlLiAg SWYgaXQgd2VyZW4ndCwKKyAgaXQgbWlnaHQgbWFrZSBzZW5zZSB0byBvcHRpbWl6ZSB0aGlzIHNl Y3Rpb24gYnkgdXNpbmcgbWVtY3B5IG9yIGJjb3B5CisgIChuZWl0aGVyIG9mIHdoaWNoIGFyZSBw b3J0YWJsZSksIGJ1dCBvbmx5IGlmIG91ciBwYWNrZXRzIHdlcmUgcmF0aGVyIGxvbmcuCisgIFdo ZW4gcmVjZWl2aW5nLCB3ZSdyZSBvbmx5IHNlbmRpbmcgQUNLcyBzbyBpdCBkb2Vzbid0IG1hdHRl ci4gIFNvIGNvdW50IHRoZQorICBmb2xsb3dpbmcgbG9vcCBhcyBhIHNsZWVwaW5nIGRvZy4KKyov CisgICAgaWYgKGNvcHkpCQkJCS8qIERhdGEgZmllbGQgYnVpbHQgaW4gcGxhY2U/ICovCisgICAg ICBmb3IgKCA7IGxlbi0tOyBpKyspIG15ZGF0YVtpXSA9ICpkKys7IC8qIE5vLCBtdXN0IGNvcHku ICovCisgICAgZWxzZQkJCQkvKiBPdGhlcndpc2UsICovCisgICAgICBpICs9IGxlbjsJCQkJLyog SnVzdCBza2lwIHBhc3QgZGF0YSBmaWVsZC4gKi8KKyAgICBteWRhdGFbaV0gPSAnXDAnOwkJCS8q IE51bGwtdGVybWluYXRlIGZvciBjaGVja3N1bSBjYWxjLiAqLworCisgICAgc3dpdGNoIChiY3R1 KSB7CQkJLyogQmxvY2sgY2hlY2sgKi8KKyAgICAgICAgY2FzZSAxOgkJCQkvKiAxID0gNi1iaXQg Y2hrc3VtICovCisJICAgIGl4ID0gaSAtIGxwOwkJLyogQXZvaWQgIm9yZGVyIG9mIG9wZXJhdGlv biIgZXJyb3IgKi8KKwkgICAgbXlkYXRhW2krK10gPSB0b2NoYXIoY2hrMShteWRhdGErbHAsaXgp KTsKKwkgICAgYnJlYWs7CisJY2FzZSAyOgkJCQkvKiAyID0gMTItYml0IGNoa3N1bSAqLworCSAg ICBqID0gY2hrMihteWRhdGErbHAsaS1scCk7CisJICAgIG15ZGF0YVtpKytdID0gKHVuc2lnbmVk KXRvY2hhcigoaiA+PiA2KSAmIDA3Nyk7CisgICAJICAgIG15ZGF0YVtpKytdID0gKHVuc2lnbmVk KXRvY2hhcihqICYgMDc3KTsKKwkgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMzoJCQkJLyogMyA9 IDE2LWJpdCBDUkMgKi8KKwkgICAgY3JjID0gY2hrMyhteWRhdGErbHAsaS1scCk7CisJICAgIG15 ZGF0YVtpKytdID0gKHVuc2lnbmVkKXRvY2hhcigoKGNyYyAmIDAxNzAwMDApKSA+PiAxMik7CisJ ICAgIG15ZGF0YVtpKytdID0gKHVuc2lnbmVkKXRvY2hhcigoY3JjID4+IDYpICYgMDc3KTsKKwkg ICAgbXlkYXRhW2krK10gPSAodW5zaWduZWQpdG9jaGFyKGNyYyAmIDA3Nyk7CisJICAgIGJyZWFr OworCWNhc2UgNDoJCQkJLyogMiA9IDEyLWJpdCBjaGtzdW0sIGJsYW5rLWZyZWUgKi8KKwkgICAg aiA9IGNoazIobXlkYXRhK2xwLGktbHApOworCSAgICBteWRhdGFbaSsrXSA9CisJICAgICAgKHVu c2lnbmVkKSh0b2NoYXIoKHVuc2lnbmVkKSgoKGogPj4gNikgJiAwNzcpICsgMSkpKTsKKyAgIAkg ICAgbXlkYXRhW2krK10gPSAodW5zaWduZWQpKHRvY2hhcigodW5zaWduZWQpKChqICYgMDc3KSAr IDEpKSk7CisJICAgIGJyZWFrOworICAgIH0KKyAgICBsb2dsZW4gPSBpOworICAgIG15ZGF0YVtp KytdID0gc2VvbDsJCQkvKiBFbmQgb2YgbGluZSAocGFja2V0IHRlcm1pbmF0b3IpICovCisjaWZk ZWYgVENQU09DS0VUCisvKgorICBJZiBURUxORVQgY29ubmVjdGlvbiBhbmQgcGFja2V0IHRlcm1p bmF0b3IgaXMgY2FycmlhZ2UgcmV0dXJuLAorICB3ZSBtdXN0IHN0dWZmIGVpdGhlciBMRiBvciBO VUwsIGFjY29yZGluZyB0byBTRVQgVEVMTkVUIE5FV0xJTkUtTU9ERQorICAodG5fbmxtKSwgdG8g bWVldCB0aGUgVEVMTkVUIE5WVCBzcGVjaWZpY2F0aW9uLCB1bmxlc3MgdXNlciBzYWlkIFJBVy4K KworICBJZiBORVdMSU5FLU1PREUgaXMgc2V0IHRvIExGIGluc3RlYWQgb2YgQ1IsIHdlIHN0aWxs IHNlbmQgQ1ItTlVMCisgIG9uIGEgTlZUIGNvbm5lY3Rpb24gYW5kIENSIG9uIGEgYmluYXJ5IGNv bm5lY3Rpb24uCisqLworICAgIGlmICgKKyNpZmRlZiBTVFJFQU1JTkcKKwkhZG9udHNlbmQgJiYK KyNlbmRpZiAvKiBTVFJFQU1JTkcgKi8KKwkoKG5ldHdvcmsgJiYgdHRucHJvdG8gPT0gTlBfVEVM TkVUKSB8fCAoIWxvY2FsICYmIHNzdGVsbmV0KSkKKwkmJiBzZW9sID09IENSKSB7CisgICAgICAg IHN3aXRjaCAoVEVMT1BUX01FKFRFTE9QVF9CSU5BUlkpID8gdG5fYl9ubG0gOiB0bl9ubG0pIHsK KwkgIGNhc2UgVE5MX0NSOgkJCS8qIE5WVCBvciBCSU5BUlkgKi8KKwkgICAgYnJlYWs7CisJICBj YXNlIFROTF9DUk5VTDoKKwkgICAgbXlkYXRhW2krK10gPSBOVUw7CisJICAgIGJyZWFrOworCSAg Y2FzZSBUTkxfQ1JMRjoKKwkgICAgbXlkYXRhW2krK10gPSBMRjsKKwkgICAgYnJlYWs7CisJfQor ICAgIH0KKyNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KKyAgICBteWRhdGFbaV0gPSAnXDAnOwkJCS8q IFRlcm1pbmF0ZSBzdHJpbmcgKi8KKyAgICBpZiAoCisjaWZkZWYgU1RSRUFNSU5HCisJIWRvbnRz ZW5kICYmCisjZW5kaWYgLyogU1RSRUFNSU5HICovCisJcGt0bG9nCisJKQkJCQkvKiBTYXZlIGEg ZnVuY3Rpb24gY2FsbCEgKi8KKyAgICAgIGxvZ3BrdCgncycsbixteWRhdGEsbG9nbGVuKTsJLyog TG9nIHRoZSBwYWNrZXQgKi8KKworICAgIC8qIChQV1ApIGFkZCB0aGUgcGFyaXR5IHF1aWNrbHkg YXQgdGhlIGVuZCAqLworICAgIGlmIChwYXJpdHkpIHsKKwlzd2l0Y2ggKHBhcml0eSkgeworCSAg Y2FzZSAnZSc6CQkJLyogRXZlbiAqLworCSAgICBmb3IgKGNwID0gJm15ZGF0YVtpLTFdOyBjcCA+ PSBteWRhdGE7IGNwLS0pCisJICAgICAgKmNwID0gcF90YmxbKmNwXTsKKwkgICAgYnJlYWs7CisJ ICBjYXNlICdtJzoJCQkvKiBNYXJrICovCisJICAgIGZvciAoY3AgPSAmbXlkYXRhW2ktMV07IGNw ID49IG15ZGF0YTsgY3AtLSkKKwkgICAgICAqY3AgfD0gMTI4OworCSAgICBicmVhazsKKwkgIGNh c2UgJ28nOgkJCS8qIE9kZCAqLworCSAgICBmb3IgKGNwID0gJm15ZGF0YVtpLTFdOyBjcCA+PSBt eWRhdGE7IGNwLS0pCisJICAgICAgKmNwID0gcF90YmxbKmNwXSBeIDEyODsKKwkgICAgYnJlYWs7 CisJICBjYXNlICdzJzoJCQkvKiBTcGFjZSAqLworCSAgICBmb3IgKGNwID0gJm15ZGF0YVtpLTFd OyBjcCA+PSBteWRhdGE7IGNwLS0pCisJICAgICAgKmNwICY9IDEyNzsKKwkgICAgYnJlYWs7CisJ fQorICAgIH0KKyAgICBpZiAocGt0cGF1cykgbXNsZWVwKHBrdHBhdXMpOwkvKiBQYXVzZSBpZiBy ZXF1ZXN0ZWQgKi8KKyAgICB4ID0gMDsKKworICAgIGlmIChucGFkKSB7CisjaWZkZWYgU1RSRUFN SU5HCisJaWYgKGRvbnRzZW5kKQorCSAgeCA9IDA7CisJZWxzZQorI2VuZGlmIC8qIFNUUkVBTUlO RyAqLworCSAgeCA9IHR0b2wocGFkYnVmLG5wYWQpOwkvKiBTZW5kIGFueSBwYWRkaW5nICovCisg ICAgfQorICAgIGlmICh4ID4gLTEpIHsKKyNpZmRlZiBDS19USU1FUlMKKwlpZiAodGltaW50ID4g MCkgeworCSAgICBpZiAocGt0dHlwID09ICdOJykKKwkgICAgICBzcnR0YmxbbiA+IDAgPyBuLTEg OiA2M10gPSBndGltZXIoKTsKKwkgICAgZWxzZQorCSAgICAgIHNydHRibFtuXSA9IGd0aW1lcigp OworCX0KKyNlbmRpZiAvKiBDS19USU1FUlMgKi8KKwlzcGt0bCA9IGk7CQkJLyogUmVtZW1iZXIg cGFja2V0IGxlbmd0aCAqLworCWlmIChrID4gLTEpCisJICBzX3BrdFtrXS5wa19sZW4gPSBzcGt0 bDsJLyogYWxzbyBpbiBwYWNrZXQgaW5mbyBzdHJ1Y3R1cmUgKi8KKworI2lmZGVmIERFQlVHCisj aWZkZWYgR0ZUSU1FUgorLyoKKyAgVGhpcyBjb2RlIHNob3dzIChpbiB0aGUgZGVidWcgbG9nKSBo b3cgbG9uZyBpdCB0YWtlcyB3cml0ZSgpIHRvIGV4ZWN1dGUuCisgIFNvbWV0aW1lcyBvbiBhIGNv bmdlc3RlZCBUQ1AgY29ubmVjdGlvbiwgaXQgY2FuIHN1cnByaXNlIHlvdSAtLSA5MCBzZWNvbmRz CisgIG9yIG1vcmUuLi4KKyovCisJaWYgKAorI2lmZGVmIFNUUkVBTUlORworCSAgICAhZG9udHNl bmQgJiYKKyNlbmRpZiAvKiBTVFJFQU1JTkcgKi8KKwkgICAgZGVibG9nCisJICAgICkKKwkgIHQx ID0gZ2Z0aW1lcigpOworI2VuZGlmIC8qIEdGVElNRVIgKi8KKyNlbmRpZiAvKiBERUJVRyAqLwor CisjaWZkZWYgU1RSRUFNSU5HCisJaWYgKGRvbnRzZW5kKSB7CisJICAgIGRlYnVnKEYwMDAsIlNU UkVBTUlORyBzcGFjayBza2lwcGluZyIsIiIscGt0dHlwKTsKKwkgICAgeCA9IDA7CisJfSBlbHNl CisjZW5kaWYgLyogU1RSRUFNSU5HICovCisJeCA9IHR0b2wobXlkYXRhLHNwa3RsKTsJCS8qIFNl bmQgdGhlIHBhY2tldCAqLworICAgIH0KKyNpZmRlZiBTVFJFQU1JTkcKKyAgICBpZiAoIWRvbnRz ZW5kKSB7CisjZW5kaWYgLyogU1RSRUFNSU5HICovCisJZGVidWcoRjEwMSwic3BhY2sgc3BrdGwi LCIiLHNwa3RsKTsKKwlkZWJ1ZyhGMTAxLCJzcGFjayB0dG9sIHJldHVybnMiLCIiLHgpOworCWlm ICh4IDwgMCkgewkJCS8qIEZhaWxlZC4gKi8KKwkgICAgaWYgKGxvY2FsICYmIHggPCAtMSkgewor CQl4eHNjcmVlbihTQ1JfU1QsU1RfRVJSLDBMLCJGQUlMRUQ6IENvbm5lY3Rpb24gbG9zdCIpOwor CQkvKiBXZSBjYW4ndCBzZW5kIGFuIEUgcGFja2V0IGJlY2F1c2UgdGhlIGNvbm5lY3Rpb24gaXMg bG9zdC4gKi8KKwkJZXBrdHNlbnQgPSAxOwkJLyogU28gcHJldGVuZCB3ZSBzZW50IG9uZS4gKi8K KwkJZmF0YWxpbyA9IDE7CQkvKiBSZW1lbWJlciB3ZSBnb3QgYSBmYXRhbCBpL28gZXJyb3IgKi8K KwkJZG9sb2dlbmQoKTsKKwkJY2tzdHJuY3B5KChjaGFyICopZXBrdG1zZywiQ29ubmVjdGlvbiBs b3N0IixQS1RNU0dMRU4pOworCSAgICB9CisJICAgIHJldHVybih4KTsKKwl9CisJaWYgKHNwa3Rs ID4gbWF4c2VuZCkJCS8qIEtlZXAgdHJhY2sgb2YgbG9uZ2VzdCBwYWNrZXQgc2VudCAqLworCSAg bWF4c2VuZCA9IHNwa3RsOworI2lmZGVmIERFQlVHCisjaWZkZWYgR0ZUSU1FUgorCWlmIChkZWJs b2cpICB7CQkJLyogTG9nIGVsYXBzZWQgdGltZSBmb3Igd3JpdGUoKSAqLworCSAgICB0MiA9IGdm dGltZXIoKTsKKwkgICAgZGVidWcoRjEwMSwic3BhY2sgdHRvbCBtc2VjIiwiIiwobG9uZykoKHQy LXQxKSoxMDAwLjApKTsKKwl9CisjZW5kaWYgLyogR0ZUSU1FUiAqLworI2VuZGlmIC8qIERFQlVH ICovCisjaWZkZWYgU1RSRUFNSU5HCisgICAgfQorI2VuZGlmIC8qIFNUUkVBTUlORyAqLworCisg ICAgc25kdHlwID0gcGt0dHlwOwkJCS8qIFJlbWVtYmVyIHBhY2tldCB0eXBlIGZvciBlY2hvcyAq LworI2lmZGVmIFNUUkVBTUlORworICAgIGlmICghZG9udHNlbmQpIHsJCQkvKiBJZiByZWFsbHkg c2VudCwgKi8KKwlzcGFja2V0cysrOwkJCS8qIGNvdW50IGl0LiAqLworCWZsY28gKz0gc3BrdGw7 CQkJLyogQ291bnQgdGhlIGNoYXJhY3RlcnMgKi8KKwl0bGNvICs9IHNwa3RsOwkJCS8qIGZvciBz dGF0aXN0aWNzLi4uICovCisjaWZkZWYgREVCVUcKKwlpZiAoZGVibG9nKSB7CQkJLyogU2F2ZSB0 d28gZnVuY3Rpb24gY2FsbHMhICovCisJICAgIGR1bXBzYnVmKCk7CQkJLyogRHVtcCBzZW5kIGJ1 ZmZlcnMgdG8gZGVidWcgbG9nICovCisJICAgIGRlYnVnKEYxMTEsInNwYWNrIGNhbGxpbmcgc2Ny ZWVuLCBteWRhdGE9IixteWRhdGEsbik7CisJfQorI2VuZGlmIC8qIERFQlVHICovCisgICAgfQor I2VuZGlmIC8qIFNUUkVBTUlORyAqLworICAgIGlmIChsb2NhbCkgeworCWludCB4ID0gMDsKKwlp ZiAoZmRpc3BsYSAhPSBYWUZEX04pIHggPSAxOworCWlmICgoZmRpc3BsYSA9PSBYWUZEX0IpICYm IChwa3R0eXAgPT0gJ0QnIHx8IHBrdHR5cCA9PSAnWScpKSB4ID0gMDsKKwlpZiAoeCkKKwkgIHh4 c2NyZWVuKFNDUl9QVCxwa3R0eXAsKGxvbmcpbiwoY2hhciAqKW15ZGF0YSk7IC8qIFVwZGF0ZSBz Y3JlZW4gKi8KKyAgICB9CisgICAgcmV0dXJuKHNwa3RsKTsJCQkvKiBSZXR1cm4gbGVuZ3RoICov Cit9CisKKy8qICBDIEggSyAxICAtLSAgQ29tcHV0ZSBhIHR5cGUtMSBLZXJtaXQgNi1iaXQgY2hl Y2tzdW0uICAqLworCitpbnQKK2NoazEocGt0LGxlbikgcmVnaXN0ZXIgQ0hBUiAqcGt0OyByZWdp c3RlciBpbnQgbGVuOyB7CisgICAgcmVnaXN0ZXIgdW5zaWduZWQgaW50IGNoazsKKyNpZmRlZiBD S1RVTklORworI2lmZGVmIENPTU1FTlQKKyAgICByZWdpc3RlciB1bnNpZ25lZCBpbnQgbTsJCS8q IEF2b2lkIGZ1bmN0aW9uIGNhbGwgKi8KKyAgICBtID0gKHBhcml0eSkgPyAwMTc3IDogMDM3NzsK KyAgICBmb3IgKGNoayA9IDA7IGxlbi0tID4gMDsgcGt0KyspCisgICAgICBjaGsgKz0gKnBrdCAm IG07CisjZWxzZQorICAgIGNoayA9IDA7CisgICAgd2hpbGUgKGxlbi0tID4gMCkgY2hrICs9ICh1 bnNpZ25lZCkgKnBrdCsrOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyNlbHNlCisgICAgY2hrID0g Y2hrMihwa3QsbGVuKTsKKyNlbmRpZiAvKiBDS1RVTklORyAqLworICAgIGNoayA9ICgoKGNoayAm IDAzMDApID4+IDYpICsgY2hrKSAmIDA3NzsKKyAgICBkZWJ1ZyhGMTAxLCJjaGsxIiwiIixjaGsp OworICAgIHJldHVybigoaW50KSBjaGspOworfQorCisvKiAgQyBIIEsgMiAgLS0gIENvbXB1dGUg dGhlIG51bWVyaWMgc3VtIG9mIGFsbCB0aGUgYnl0ZXMgaW4gdGhlIHBhY2tldC4gICovCisKK3Vu c2lnbmVkIGludAorY2hrMihwa3QsbGVuKSByZWdpc3RlciBDSEFSICpwa3Q7IHJlZ2lzdGVyIGlu dCBsZW47IHsKKyAgICByZWdpc3RlciBsb25nIGNoazsKKyNpZmRlZiBDT01NRU5UCisgICAgcmVn aXN0ZXIgdW5zaWduZWQgaW50IG07CisgICAgbSA9IChwYXJpdHkpID8gMDE3NyA6IDAzNzc7Cisg ICAgZm9yIChjaGsgPSAwOyBsZW4tLSA+IDA7IHBrdCsrKQorICAgICAgY2hrICs9ICpwa3QgJiBt OworI2Vsc2UKKyAgICAvKiBQYXJpdHkgaGFzIGFscmVhZHkgYmVlbiBzdHJpcHBlZCAqLworICAg IGNoayA9IDBMOworICAgIHdoaWxlIChsZW4tLSA+IDApIGNoayArPSAodW5zaWduZWQpICpwa3Qr KzsKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgZGVidWcoRjEwMSwiY2hrMiIsIiIsKHVuc2ln bmVkIGludCkgKGNoayAmIDA3Nzc3KSk7CisgICAgcmV0dXJuKCh1bnNpZ25lZCBpbnQpIChjaGsg JiAwNzc3NykpOworfQorCisvKiAgQyBIIEsgMyAgLS0gIENvbXB1dGUgYSB0eXBlLTMgS2VybWl0 IGJsb2NrIGNoZWNrLiAgKi8KKy8qCisgQ2FsY3VsYXRlIHRoZSAxNi1iaXQgQ1JDLUNDSVRUIG9m IGEgbnVsbC10ZXJtaW5hdGVkIHN0cmluZyB1c2luZyBhIGxvb2t1cAorIHRhYmxlLiAgQXNzdW1l cyB0aGUgYXJndW1lbnQgc3RyaW5nIGNvbnRhaW5zIG5vIGVtYmVkZGVkIG51bGxzLgorKi8KKyNp ZmRlZiBDT01NRU5UCit1bnNpZ25lZCBpbnQKK2NoazMocGt0LHBhcml0eSxsZW4pIHJlZ2lzdGVy IENIQVIgKnBrdDsgaW50IHBhcml0eTsgcmVnaXN0ZXIgaW50IGxlbjsgeworICAgIHJlZ2lzdGVy IGxvbmcgYywgY3JjOworICAgIHJlZ2lzdGVyIHVuc2lnbmVkIGludCBtOworICAgIG0gPSAocGFy aXR5KSA/IDAxNzcgOiAwMzc3OworICAgIGZvciAoY3JjID0gMDsgbGVuLS0gPiAwOyBwa3QrKykg eworCWMgPSBjcmMgXiAobG9uZykoKnBrdCAmIG0pOworCWNyYyA9IChjcmMgPj4gOCkgXiAoY3Jj dGFbKGMgJiAweEYwKSA+PiA0XSBeIGNyY3RiW2MgJiAweDBGXSk7CisgICAgfQorICAgIHJldHVy bigodW5zaWduZWQgaW50KSAoY3JjICYgMHhGRkZGKSk7Cit9CisjZWxzZQordW5zaWduZWQgaW50 CitjaGszKHBrdCxsZW4pIHJlZ2lzdGVyIENIQVIgKnBrdDsgcmVnaXN0ZXIgaW50IGxlbjsgewor ICAgIHJlZ2lzdGVyIGxvbmcgYywgY3JjOworICAgIGZvciAoY3JjID0gMDsgbGVuLS0gPiAwOyBw a3QrKykgeworCWMgPSBjcmMgXiAobG9uZykoKnBrdCk7CisJY3JjID0gKGNyYyA+PiA4KSBeIChj cmN0YVsoYyAmIDB4RjApID4+IDRdIF4gY3JjdGJbYyAmIDB4MEZdKTsKKyAgICB9CisgICAgZGVi dWcoRjEwMSwiY2hrMyIsIiIsKHVuc2lnbmVkIGludCkgKGNyYyAmIDB4RkZGRikpOworICAgIHJl dHVybigodW5zaWduZWQgaW50KSAoY3JjICYgMHhGRkZGKSk7Cit9CisjZW5kaWYgLyogQ09NTUVO VCAqLworCisvKiAgTiBYIFQgUCBLIFQgIC0tICBOZXh0IFBhY2tldCAgKi8KKy8qCisgIEdldCBw YWNrZXQgbnVtYmVyIG9mIG5leHQgcGFja2V0IHRvIHNlbmQgYW5kIGFsbG9jYXRlIGEgYnVmZmVy IGZvciBpdC4KKyAgUmV0dXJuczoKKyAgICAwIG9uIHN1Y2Nlc3MsIHdpdGggZ2xvYmFsIHBrdG51 bSBzZXQgdG8gdGhlIHBhY2tldCBudW1iZXI7CisgICAtMSBvbiBmYWlsdXJlIHRvIGFsbG9jYXRl IGJ1ZmZlciAoZmF0YWwpOworICAgLTIgaWYgcmVzdWx0aW5nIHBhY2tldCBudW1iZXIgaXMgb3V0 c2lkZSB0aGUgY3VycmVudCB3aW5kb3cuCisqLworaW50CitueHRwa3QoKSB7CQkJCS8qIENhbGxl ZCBieSBmaWxlIHNlbmRlciAqLworICAgIGludCBqLCBuLCB4OworCisgICAgZGVidWcoRjEwMSwi bnh0cGt0IHBrdG51bSIsIiIscGt0bnVtKTsKKyAgICBkZWJ1ZyhGMTAxLCJueHRwa3Qgd2lubG8g IiwiIix3aW5sbyk7CisgICAgbiA9IChwa3RudW0gKyAxKSAlIDY0OwkJLyogSW5jcmVtZW50IHBh Y2tldCBudW1iZXIgbW9kIDY0ICovCisgICAgZGVidWcoRjEwMSwibnh0cGt0IG4iLCIiLG4pOwor I2lmZGVmIFNUUkVBTUlORworICAgIGlmICghc3RyZWFtaW5nKSB7CisJeCA9IGNoa3dpbihuLHdp bmxvLHdzbG90cyk7CS8qIERvbid0IGV4Y2VlZCB3aW5kb3cgYm91bmRhcnkgKi8KKwlkZWJ1ZyhG MTAxLCJueHRwa3QgY2hrd2luIiwiIix4KTsKKwlpZiAoeCkKKwkgIHJldHVybigtMik7CisJaiA9 IGdldHNidWYobik7CQkJLyogR2V0IGEgYnVmZmVyIGZvciBwYWNrZXQgbiAqLworCWlmIChqIDwg MCkgeworCSAgICBkZWJ1ZyhGMTAxLCJueHRwa3QgZ2V0c2J1ZiBmYWlsdXJlIiwiIixqKTsKKwkg ICAgcmV0dXJuKC0xKTsKKwl9CisgICAgfQorI2VuZGlmIC8qIFNUUkVBTUlORyAqLworICAgIHBr dG51bSA9IG47CisgICAgcmV0dXJuKDApOworfQorCisvKiBGdW5jdGlvbnMgZm9yIHNlbmRpbmcg QUNLcyBhbmQgTkFLcyAqLworCisvKiBOb3RlLCB3ZSBzaG91bGQgb25seSBBQ0sgdGhlIHBhY2tl dCBhdCB3aW5kb3ctbG93ICh3aW5sbykgKi8KKy8qIEhvd2V2ZXIsIGlmIGFuIG9sZCBwYWNrZXQg YXJyaXZlcyBhZ2FpbiAoZS5nLiBiZWNhdXNlIHRoZSBBQ0sgd2Ugc2VudCAqLworLyogZWFybGll ciB3YXMgbG9zdCksIHdlIEFDSyBpdCBhZ2Fpbi4gKi8KKworaW50CithY2soKSB7CQkJCQkvKiBB Y2tub3dsZWRnZSB0aGUgY3VycmVudCBwYWNrZXQuICovCisgICAgcmV0dXJuKGFja25zKHdpbmxv LChDSEFSICopIiIpKTsKK30KKworI2lmZGVmIFNUUkVBTUlORworaW50CitmYXN0YWNrKCkgewkJ CQkvKiBBY2tub3dsZWRnZSBwYWNrZXQgbiAqLworICAgIGludCBqLCBrLCBuLCB4OworICAgIG4g PSB3aW5sbzsKKworICAgIGsgPSByc2VxdGJsW25dOwkJCS8qIEZpcnN0IGZpbmQgcmVjZWl2ZWQg cGFja2V0IG4uICovCisgICAgZGVidWcoRjEwMSwiU1RSRUFNSU5HIGZhc3RhY2sgayIsIiIsayk7 CisgICAgZnJlZXNidWYobik7CQkJLyogRnJlZSBjdXJyZW50IHNlbmQtYnVmZmVyLCBpZiBhbnkg Ki8KKyAgICBpZiAoKGogPSBnZXRzYnVmKG4pKSA8IDApIHsKKwkvKiBUaGlzIGNhbiBoYXBwZW4g aWYgd2UgaGF2ZSB0byByZS1BQ0sgYW4gb2xkIHBhY2tldCB0aGF0IGhhcyAqLworICAgICAgICAv KiBhbHJlYWR5IGxlZnQgdGhlIHdpbmRvdy4gIEl0IGRvZXMgbm8gaGFybS4gKi8KKwlkZWJ1ZyhG MTAxLCJTVFJFQU1JTkcgZmFzdGFjayBjYW4ndCBnZXRzYnVmIiwiIixuKTsKKyAgICB9CisgICAg ZG9udHNlbmQgPSAxOworICAgIHggPSBzcGFjaygnWScsbiwwLChDSEFSICopIiIpOwkvKiBOb3cg c2VuZCBpdCAoYnV0IG5vdCByZWFsbHkpICovCisgICAgZG9udHNlbmQgPSAwOworICAgIGlmICh4 IDwgMCkgcmV0dXJuKHgpOworICAgIGRlYnVnKEYxMDEsIlNUUkVBTUlORyBmYXN0YWNrIHgiLCIi LHgpOworICAgIGlmIChrID4gLTEpCisgICAgICBmcmVlcmJ1ZihrKTsJCQkvKiBkb24ndCBuZWVk IGl0IGFueSBtb3JlICovCisgICAgaWYgKGogPiAtMSkKKyAgICAgIGZyZWVzYnVmKGopOwkJCS8q IGFuZCBkb24ndCBuZWVkIHRvIGtlZXAgQUNLIGVpdGhlciAqLworICAgIHdpbmxvID0gKHdpbmxv ICsgMSkgJSA2NDsKKyAgICByZXR1cm4oMCk7Cit9CisjZW5kaWYgLyogU1RSRUFNSU5HICovCisK K2ludAorYWNrbnMobixzKSBpbnQgbjsgQ0hBUiAqczsgewkJLyogQWNrbm93bGVkZ2UgcGFja2V0 IG4gKi8KKyAgICBpbnQgaiwgaywgeDsKKyAgICBkZWJ1ZyhGMTExLCJhY2tucyIscyxuKTsKKwor ICAgIGsgPSByc2VxdGJsW25dOwkJCS8qIEZpcnN0IGZpbmQgcmVjZWl2ZWQgcGFja2V0IG4uICov CisgICAgZGVidWcoRjEwMSwiYWNrbnMgayIsIiIsayk7CisgICAgZnJlZXNidWYobik7CQkJLyog RnJlZSBjdXJyZW50IHNlbmQtYnVmZmVyLCBpZiBhbnkgKi8KKyAgICBpZiAoKGogPSBnZXRzYnVm KG4pKSA8IDApIHsKKwkvKiBUaGlzIGNhbiBoYXBwZW4gaWYgd2UgaGF2ZSB0byByZS1BQ0sgYW4g b2xkIHBhY2tldCB0aGF0IGhhcyAqLworICAgICAgICAvKiBhbHJlYWR5IGxlZnQgdGhlIHdpbmRv dy4gIEl0IGRvZXMgbm8gaGFybS4gKi8KKwlkZWJ1ZyhGMTAxLCJhY2tucyBjYW4ndCBnZXRzYnVm IiwiIixuKTsKKyAgICB9CisgICAgeCA9IHNwYWNrKCdZJyxuLChpbnQpc3RybGVuKChjaGFyICop cykscyk7IC8qIE5vdyBzZW5kIGl0LiAqLworICAgIGlmICh4IDwgMCkgcmV0dXJuKHgpOworICAg IGRlYnVnKEYxMDEsImFja25zIHdpbmxvIiwiIix3aW5sbyk7CisgICAgZGVidWcoRjEwMSwiYWNr bnMgbiIsIiIsbik7CisgICAgaWYgKG4gPT0gd2lubG8pIHsJCQkvKiBJZiB3ZSdyZSBhY2tpbmcg d2lubG8gKi8KKwlpZiAoayA+IC0xKQorCSAgZnJlZXJidWYoayk7CQkJLyogZG9uJ3QgbmVlZCBp dCBhbnkgbW9yZSAqLworCWlmIChqID4gLTEpCisJICBmcmVlc2J1ZihqKTsJCQkvKiBhbmQgZG9u J3QgbmVlZCB0byBrZWVwIEFDSyBlaXRoZXIgKi8KKwl3aW5sbyA9ICh3aW5sbyArIDEpICUgNjQ7 CisgICAgfQorICAgIHJldHVybigwKTsKK30KKworaW50CithY2tuKG4pIGludCBuOyB7CQkJLyog U2VuZCBBQ0sgZm9yIHBhY2tldCBudW1iZXIgbiAqLworICAgIHJldHVybihhY2tucyhuLChDSEFS ICopIiIpKTsKK30KKworaW50CithY2sxKHMpIENIQVIgKnM7IHsJCQkvKiBTZW5kIGFuIEFDSyB3 aXRoIGRhdGEuICovCisgICAgaWYgKCFzKSBzID0gKENIQVIgKikiIjsKKyAgICBkZWJ1ZyhGMTEw LCJhY2sxIiwoY2hhciAqKXMsMCk7CisgICAgcmV0dXJuKGFja25zKHdpbmxvLHMpKTsKK30KKwor LyogTiBBIEMgSyAgLS0gICBTZW5kIGEgTmVnYXRpdmUgQUNLbm93bGVkZ21lbnQuICovCisvKgor IENhbGwgd2l0aCB0aGUgcGFja2V0IG51bWJlciwgbiwgdG8gYmUgTkFLJ2QuCisgUmV0dXJucyAt MSBpZiB0aGF0IHBhY2tldCBoYXMgYmVlbiBOQUsnZCB0b28gbWFueSB0aW1lcywgb3RoZXJ3aXNl IDAuCisgQnR3LCBpdCBpcyBub3QgcmlnaHQgdG8gcmV0dXJuIDAgdW5kZXIgZXJyb3IgY29uZGl0 aW9ucy4gIFRoaXMgaXMKKyBkb25lIGJlY2F1c2UgdGhlIC0xIGNvZGUgaXMgdXNlZCBmb3IgY2Fu Y2VsbGluZyB0aGUgZmlsZSB0cmFuc2Zlci4KKyBNb3JlIHdvcmsgaXMgbmVlZGVkIGhlcmUuCisq LworaW50CituYWNrKG4pIGludCBuOyB7CisgICAgaW50IGksIHg7CisKKyAgICBpZiAobiA8IDAg fHwgbiA+IDYzKSB7CisJZGVidWcoRjEwMSwibmFjayBiYWQgcGt0IG51bSIsIiIsbik7CisJcmV0 dXJuKDApOworICAgIH0gZWxzZSBkZWJ1ZyhGMTAxLCJuYWNrIiwiIixuKTsKKyAgICBpZiAoKGkg PSBzc2VxdGJsW25dKSA8IDApIHsJCS8qIElmIG5lY2Vzc2FyeSAqLworCWlmIChnZXRzYnVmKG4p IDwgMCkgewkJLyogZ2V0IGEgYnVmZmVyIGZvciB0aGlzIE5BSyAqLworCSAgICBkZWJ1ZyhGMTAx LCJuYWNrIGNhbid0IGdldHNidWYiLCIiLG4pOworCSAgICByZXR1cm4oMCk7CisJfSBlbHNlIGkg PSBzc2VxdGJsW25dOwkJLyogTmV3IHNsb3QgbnVtYmVyICovCisgICAgfQorICAgIGlmIChtYXh0 cnkgPiAwICYmIHNfcGt0W2ldLnBrX3J0cisrID4gbWF4dHJ5KSAvKiBIb3cgbWFueT8gKi8KKyAg ICAgIHJldHVybigtMSk7CQkJLyogVG9vIG1hbnkuLi4gKi8KKworLyogTm90ZSwgZG9uJ3QgZnJl ZSB0aGlzIGJ1ZmZlci4gIEV2ZW50dWFsbHkgYW4gQUNLIHdpbGwgY29tZSwgYW5kIHRoYXQgKi8K Ky8qIHdpbGwgc2V0IGl0IGZyZWUuICBJZiBub3QsIHdlbGwsIGl0J3MgYmFjayB0byBncm91bmQg emVybyBhbnl3YXkuLi4gICovCisKKyAgICB4ID0gc3BhY2soJ04nLG4sMCwoQ0hBUiAqKSAiIik7 CS8qIE5BS3MgbmV2ZXIgaGF2ZSBkYXRhLiAqLworICAgIHJldHVybih4KTsKK30KKworI2lmbmRl ZiBORVdEUEwJCQkJLyogVGhpcyByb3V0aW5lIG5vIGxvbmdlciB1c2VkICovCisvKgorICogKFBX UCkgcmVjYWxjdWxhdGUgdGhlIG9wdGltYWwgcGFja2V0IGxlbmd0aCBpbiB0aGUgZmFjZSBvZiBl cnJvcnMuCisgKiBUaGlzIGlzIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgYWxnb3JpdGhtIGJ5 IEpvaG4gQ2hhbmRsZXIgaW4gS2VybWl0LzM3MCwKKyAqIHNlZSAiRHluYW1pYyBQYWNrZXQgU2l6 ZSBDb250cm9sIiwgS2VybWl0IE5ld3MsIFYyICMxLCBKdW5lIDE5ODguCisgKgorICogVGhpcyBp bXBsZW1lbnRhdGlvbiBtaW5pbWl6ZXMgdGhlIHRvdGFsIG92ZXJoZWFkIGVxdWF0aW9uLCB3aGlj aCBpcworICoKKyAqICAgVG90YWwgY2hhcnMgPSBmaWxlX2NoYXJzICsgKGhlYWRlcl9sZW4gKiBu dW1fcGFja3MpCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICArIChlcnJvcnMgKiAoaGVh ZGVyX2xlbiArIHBhY2tldF9sZW4pKQorICoKKyAqIERpZmZlcmVudGlhdGUgd2l0aCByZXNwZWN0 IHRvIG51bWJlciBvZiBjaGFycywgc29sdmUgZm9yIHBhY2tldF9sZW4sIGdldDoKKyAqCisgKiAg IHBhY2tldF9sZW4gPSBzcXJ0IChmaWxlX2NoYXJzICogaGVhZGVyX2xlbiAvIGVycm9ycykKKyAq LworCisvKgorIChGREMpIE5ldyBzdXBlci1zaW1wbGUgYWxnb3JpdGhtLiAgSWYgdGhlcmUgd2Fz IGFuIGVycm9yIGluIHRoZSBtb3N0IHJlY2VudAorIHBhY2tldCBleGNoYW5nZSwgY3V0IHRoZSBz ZW5kLXBhY2tldCBzaXplIGluIGhhbGYsIGRvd24gdG8gYSBtaW5pbXVtIG9mIDIwLgorIElmIHRo ZXJlIHdhcyBubyBlcnJvciwgaW5jcmVhc2UgdGhlIHNpemUgYnkgNS80LCB1cCB0byB0aGUgbWF4 aW11bSBuZWdvdGlhdGVkCisgbGVuZ3RoLiAgU2VlbXMgdG8gYmUgbXVjaCBtb3JlIHJlc3BvbnNp dmUgdGhhbiBwcmV2aW91cyBhbGdvcml0aG0sIHdoaWNoIHRvb2sKKyBmb3JldmVyIHRvIHJlY292 ZXIgdGhlIG9yaWdpbmFsIHBhY2tldCBsZW5ndGgsIGFuZCBpdCBhbHNvIHdlbnQgY3JhenkgdW5k ZXIKKyBjZXJ0YWluIGNvbmRpdGlvbnMuCisKKyBIZXJlJ3MgYW5vdGhlciBpZGVhIGZvciBwYWNr ZXQgbGVuZ3RoIHJlc2l6aW5nIHRoYXQga2VlcHMgYSBoaXN0b3J5IG9mIHRoZQorIGxhc3QgbiBw YWNrZXRzLiAgUHVzaCBhIDEgaW50byB0aGUgbGVmdCBlbmQgb2YgYW4gbi1iaXQgc2hpZnQgcmVn aXN0ZXIgaWYgdGhlCisgY3VycmVudCBwYWNrZXQgaXMgZ29vZCwgb3RoZXJ3aXNlIHB1c2ggYSB6 ZXJvLiAgVGhlIGN1cnJlbnQgbi1iaXQgdmFsdWUsIHcsIG9mCisgdGhpcyByZWdpc3RlciBpcyBh IHdlaWdodGVkIHN1bSBvZiB0aGUgbm9pc2UgaGl0cyBmb3IgdGhlIGxhc3QgbiBwYWNrZXRzLCB3 aXRoCisgdGhlIG1vc3QgcmVjZW50IHdlaWdoaW5nIHRoZSBtb3N0LiAgVGhlIGN1cnJlbnQgcGFj a2V0IGxlbmd0aCBpcyBzb21lIGZ1bmN0aW9uCisgb2YgdyBhbmQgdGhlIG5lZ290aWF0ZWQgcGFj a2V0IGxlbmd0aCwgbGlrZToKKworICAgKDJebiAtIHcpIC8gKDJebikgKiAobmVnb3RpYXRlZCBs ZW5ndGgpCisKKyBJZiB0aGUgcHJlc2VudCByZXNpemluZyBtZXRob2QgY2F1c2VzIHByb2JsZW1z LCB0aGluayBhYm91dCB0aGlzIG9uZSBhIGxpdHRsZQorIG1vcmUuCisqLworVk9JRAorcmNhbGNw c3ooKSB7CisKKyNpZmRlZiBDT01NRU5UCisvKiBPbGQgd2F5ICovCisgICAgcmVnaXN0ZXIgbG9u ZyB4LCBxOworICAgIGlmIChudW1lcnJzID09IDApIHJldHVybjsJCS8qIGJvdW5kcyBjaGVjayBq dXN0IGluIGNhc2UgKi8KKworICAgIC8qIG92ZXJoZWFkIG9uIGEgZGF0YSBwYWNrZXQgaXMgbnBh ZCs1K2JjdHIsIHBsdXMgMyBpZiBleHRlbmRlZCBwYWNrZXQgKi8KKyAgICAvKiBhbiBBQ0sgaXMg NStiY3RyICovCisKKyAgICAvKiBmaXJzdCBzZXQgeCA9IHBlciBwYWNrZXQgb3ZlcmhlYWQgKi8K KyAgICBpZiAod3Nsb3RzID4gMSkJCQkvKiBTbGlkaW5nIHdpbmRvd3MgKi8KKyAgICAgIHggPSAo bG9uZykgKG5wYWQrNStiY3RyKTsJCS8qIHBhY2tldCBvbmx5LCBkb24ndCBjb3VudCBhY2sgKi8K KyAgICBlbHNlCQkJCS8qIFN0b3Atbi13YWl0ICovCisgICAgICB4ID0gKGxvbmcpIChucGFkKzUr MytiY3RyKzUrYmN0cik7IC8qIGNvdW50IHBhY2tldCBhbmQgYWNrLiAqLworCisgICAgLyogdGhl biBzZXQgeCA9IHBhY2tldCBsZW5ndGggKiogMiAqLworICAgIHggPSB4ICogKCBmZmMgLyAoQ0tf T0ZGX1QpIG51bWVycnMpOyAvKiBjYXJlZnVsIG9mIG92ZXJmbG93ICovCisKKyAgICAvKiBjYWxj dWxhdGUgdGhlIGxvbmcgaW50ZWdlciBzcXJ0KHgpIHF1aWNrbHkgKi8KKyAgICBxID0gNTAwOwor ICAgIHEgPSAocSArIHgvcSkgPj4gMTsKKyAgICBxID0gKHEgKyB4L3EpID4+IDE7CisgICAgcSA9 IChxICsgeC9xKSA+PiAxOworICAgIHEgPSAocSArIHgvcSkgPj4gMTsJCS8qIHNob3VsZCBjb252 ZXJnZSBpbiBhYm91dCA0IHN0ZXBzICovCisgICAgaWYgKChxID4gOTQpICYmIChxIDwgMTMwKSkJ LyogYnJlYWstZXZlbiBwb2ludCBmb3IgbG9uZyBwYWNrZXRzICovCisgICAgICBxID0gOTQ7Cisg ICAgaWYgKHEgPiBzcG1heCkgcSA9IHNwbWF4OwkvKiBtYXhpbXVtIGJvdW5kcyAqLworICAgIGlm IChxIDwgMTApIHEgPSAxMDsJCS8qIG1pbmltdW0gYm91bmRzICovCisgICAgc3BzaXogPSBxOwkJ CS8qIHNldCBuZXcgc2VuZCBwYWNrZXQgc2l6ZSAqLworICAgIGRlYnVnKEYxMDEsInJjYWxjcHNp eiIsIiIscSk7CisjZWxzZQorLyogTmV3IHdheSAqLworICAgIGRlYnVnKEYxMDEsInJjYWxjcHNp eiBudW1lcnJzIiwiIixudW1lcnJzKTsKKyAgICBkZWJ1ZyhGMTAxLCJyY2FsY3BzaXogc3BzaXoi LCIiLHNwc2l6KTsKKyAgICBpZiAoc3BhY2tldHMgPCAzKSB7CisJbnVtZXJycyA9IDA7CisJcmV0 dXJuOworICAgIH0KKyAgICBpZiAobnVtZXJycykKKyAgICAgIHNwc2l6ID0gc3BzaXogLyAyOwor ICAgIGVsc2UKKyAgICAgIHNwc2l6ID0gKHNwc2l6IC8gNCkgKiA1OworICAgIGlmIChzcHNpeiA8 IDIwKSBzcHNpeiA9IDIwOworICAgIGlmIChzcHNpeiA+IHNwbWF4KSBzcHNpeiA9IHNwbWF4Owor ICAgIGRlYnVnKEYxMDEsInJjYWxjcHNpeiBuZXcgc3BzaXoiLCIiLHNwc2l6KTsKKyAgICBudW1l cnJzID0gMDsKKyNlbmRpZiAvKiBDT01NRU5UICovCit9CisjZW5kaWYgLyogTkVXRFBMICovCisK Ky8qICBSIEUgUyBFIE4gRCAgLS0gIFJldHJhbnNtaXQgcGFja2V0IG4uICAqLworCisvKgorICBS ZXR1cm5zIDAgb3IgcG9zaXRpdmUgb24gc3VjY2VzcyAodGhlIG51bWJlciBvZiByZXRyaWVzIGZv ciBwYWNrZXQgbikuCisgIE9uIGZhaWx1cmUsIHJldHVybnMgYSBuZWdhdGl2ZSBudW1iZXIsIGFu ZCBhbiBlcnJvciBtZXNzYWdlIGlzIHBsYWNlZAorICBpbiByZWNwa3QuCisqLworaW50CityZXNl bmQobikgaW50IG47IHsJCQkvKiBTZW5kIHBhY2tldCBuIGFnYWluLiAqLworICAgIGludCBqLCBr LCB4OworI2lmZGVmIEdGVElNRVIKKyAgICBDS0ZMT0FUIHQxID0gMC4wLCB0MiA9IDAuMDsKKyNl bmRpZiAvKiBHRlRJTUVSICovCisKKyAgICBkZWJ1ZyhGMTAxLCJyZXNlbmQgc2VxIiwiIixuKTsK KworICAgIGsgPSBjaGt3aW4obix3aW5sbyx3c2xvdHMpOwkJLyogU2VlIGlmIHBhY2tldCBpbiBj dXJyZW50IHdpbmRvdyAqLworICAgIGogPSAtMTsJCQkJLyogQXNzdW1lIGl0J3MgbG9zdCAqLwor ICAgIGlmIChrID09IDApIGogPSBzc2VxdGJsW25dOwkJLyogU2VlIGlmIHdlIHN0aWxsIGhhdmUg YSBjb3B5IG9mIGl0ICovCisgICAgaWYgKGsgIT0gMCB8fCBqIDwgMCkgewkJLyogSWYgbm90Li4u LiAqLworCWlmIChuYWtzdGF0ZSAmJiBrID09IDEpIHsKKy8qCisgIFBhY2tldCBuIGlzIGluIHRo ZSBwcmV2aW91cyB3aW5kb3cgYW5kIHdlIGFyZSB0aGUgZmlsZSByZWNlaXZlci4KKyAgV2UgYWxy ZWFkeSBzZW50IHRoZSBBQ0sgYW5kIGRlYWxsb2NhdGVkIGl0cyBidWZmZXIgc28gd2UgY2FuJ3Qg anVzdAorICByZXRyYW5zbWl0IHRoZSBBQ0suICBSYXRoZXIgdGhhbiBnaXZlIHVwLCB3ZSB0cnkg c29tZSB0cmlja3MuLi4KKyovCisJICAgIGlmIChuID09IDAgJiYgc3BhY2tldHMgPCA2MyAmJiBt eWluaXRbMF0pIHsgLyogQUNLIHRvIFNlbmQtSW5pdCAqLworLyoKKyAgSWYgdGhlIHBhY2tldCBu dW1iZXIgaXMgMCwgYW5kIHdlJ3JlIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBwcm90b2NvbAorICBv cGVyYXRpb24gKHNwYWNrZXRzIDwgNjMpLCB0aGVuIHdlIGhhdmUgdG8gcmVzZW5kIHRoZSBBQ0sg dG8gYW4gSSBvciBTCisgIHBhY2tldCwgY29tcGxldGUgd2l0aCBwYXJhbWV0ZXJzIGluIHRoZSBk YXRhIGZpZWxkLiAgU28gd2UgdGFrZSBhIGNoYW5jZSBhbmQKKyAgc2VuZCBhIGNvcHkgb2YgdGhl IHBhcmFtZXRlcnMgaW4gYW4gQUNLIHBhY2tldCB3aXRoIGJsb2NrIGNoZWNrIHR5cGUgMS4KKyAg KE9yIDMgaWYgU0VUIEJMT0NLIDUuKQorKi8KKwkJaWYgKGJjdGYpIHsJCS8qIEZvcmNlIFR5cGUg MyBvbiBhbGwgcGFja2V0cz8gKi8KKwkJICAgeCA9IHNwYWNrKCdZJywwLChpbnQpc3RybGVuKChj aGFyICopbXlpbml0KSwoQ0hBUiAqKW15aW5pdCk7CisJCSAgICBpZiAoeCA8IDApIHJldHVybih4 KTsKKwkJICAgIGxvZ3BrdCgnIycsbiwoQ0hBUiAqKSI8cmVjb25zdHJ1Y3RlZD4iLDApOyAvKiBM b2cgaXQgKi8KKwkJfSBlbHNlIHsJCS8qIFJlZ3VsYXIgS2VybWl0IHByb3RvY29sICovCisJCSAg ICBpbnQgYmN0bHNhdjsJLyogVGVtcG9yYXJ5IHN0b3JhZ2UgKi8KKwkJICAgIGludCBiY3R1c2F2 OworCQkgICAgYmN0bHNhdiA9IGJjdGw7CS8qIFNhdmUgY3VycmVudCBibG9jayBjaGVjayBsZW5n dGggKi8KKwkJICAgIGJjdHVzYXYgPSBiY3R1OwkvKiBhbmQgdHlwZSAqLworCQkgICAgYmN0dSA9 IGJjdGwgPSAxOwkvKiBTZXQgYmxvY2sgY2hlY2sgdG8gMSAqLworCQkgICB4ID0gc3BhY2soJ1kn LDAsKGludClzdHJsZW4oKGNoYXIgKilteWluaXQpLChDSEFSICopbXlpbml0KTsKKwkJICAgIGlm ICh4IDwgMCkgcmV0dXJuKHgpOworCQkgICAgbG9ncGt0KCcjJyxuLChDSEFSICopIjxyZWNvbnN0 cnVjdGVkPiIsMCk7IC8qIExvZyBpdCAqLworCQkgICAgYmN0dSA9IGJjdHVzYXY7CS8qIFJlc3Rv cmUgYmxvY2sgY2hlY2sgdHlwZSAqLworCQkgICAgYmN0bCA9IGJjdGxzYXY7CS8qIGFuZCBsZW5n dGggKi8KKwkJfQorCSAgICB9IGVsc2UgewkJCS8qIE5vdCB0aGUgZmlyc3QgcGFja2V0ICovCisv KgorICBJdCdzIG5vdCB0aGUgZmlyc3QgcGFja2V0IG9mIHRoZSBwcm90b2NvbCBvcGVyYXRpb24u ICBJdCdzIHNvbWUgb3RoZXIgcGFja2V0CisgIHRoYXQgd2UgaGF2ZSBhbHJlYWR5IEFDSydkIGFu ZCBmb3Jnb3R0ZW4gYWJvdXQuICBTbyB3ZSB0YWtlIGEgY2hhbmNlIGFuZAorICBzZW5kIGFuIGVt cHR5IEFDSyB1c2luZyB0aGUgY3VycmVudCBibG9jay1jaGVjayB0eXBlLiAgVXN1YWxseSB0aGlz IHdpbGwKKyAgd29yayBvdXQgT0sgKGxpa2Ugd2hlbiBhY2tpbmcgRGF0YSBwYWNrZXRzKSwgYW5k IG5vIGdyZWF0IGhhcm0gd2lsbCBiZSBkb25lCisgIGlmIGl0IHdhcyBzb21lIG90aGVyIGtpbmQg b2YgcGFja2V0IChGLCBldGMpLiAgSWYgd2UgYXJlIHJlcXVlc3RpbmcgYW4KKyAgaW50ZXJydXB0 aW9uIG9mIHRoZSBmaWxlIHRyYW5zZmVyLCB0aGUgZmxhZ3MgYXJlIHN0aWxsIHNldCwgc28gd2Un bGwgY2F0Y2gKKyAgdXAgb24gdGhlIG5leHQgcGFja2V0LgorKi8KKwkJeCA9IHNwYWNrKCdZJyxu LDAsKENIQVIgKikgIiIpOworCQlpZiAoeCA8IDApIHJldHVybih4KTsKKwkgICAgfQorCSAgICBy ZXRyYW5zKys7CisJICAgIHh4c2NyZWVuKFNDUl9QVCwnJScsKGxvbmcpcGt0bnVtLCJSZXRyYW5z bWlzc2lvbiIpOworCSAgICByZXR1cm4oMCk7CisJfSBlbHNlIHsKKy8qCisgIFBhY2tldCBudW1i ZXIgaXMgbm90IGluIGN1cnJlbnQgb3IgcHJldmlvdXMgd2luZG93LiAgV2Ugc2VlbSB0byBoaXQg dGhpcworICBjb2RlIG9jY2FzaW9uYWxseSBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgdHJhbnNhY3Rp b24sIGZvciBhcHBhcmVudGx5IG5vIGdvb2QKKyAgcmVhc29uLiAgTGV0J3MganVzdCBsb2cgaXQg Zm9yIGRlYnVnZ2luZywgc2VuZCBub3RoaW5nLCBhbmQgdHJ5IHRvIHByb2NlZWQKKyAgd2l0aCB0 aGUgcHJvdG9jb2wgcmF0aGVyIHRoYW4ga2lsbGluZyBpdC4KKyovCisJICAgIGRlYnVnKEYxMDEs InJlc2VuZCBQS1QgTk9UIElOIFdJTkRPVyIsIiIsbik7CisJICAgIGRlYnVnKEYxMDEsInJlc2Vu ZCBrIiwiIixrKTsKKwkgICAgcmV0dXJuKDApOworCX0KKyAgICB9CisKKy8qIE9LLCBpdCdzIGlu IHRoZSB3aW5kb3cgYW5kIGl0J3Mgbm90IGxvc3QuICovCisKKyAgICBkZWJ1ZyhGMTAxLCJyZXNl bmQgcGt0aW5mbyBpbmRleCIsIiIsayk7CisKKyAgICBpZiAobWF4dHJ5ID4gMCAmJiBzX3BrdFtq XS5wa19ydHIrKyA+IG1heHRyeSkgeyAvKiBPdmVyIHJldHJ5IGxpbWl0ICovCisJeGl0c3RhIHw9 IHdoYXQ7CisJcmV0dXJuKC0xKTsKKyAgICB9CisgICAgZGVidWcoRjEwMSwicmVzZW5kIHJldHJ5 IiwiIixzX3BrdFtqXS5wa19ydHIpOyAvKiBPSyBzbyBmYXIgKi8KKyAgICBkdW1wc2J1ZigpOwkJ CQkvKiAoZGVidWdnaW5nKSAqLworICAgIGlmIChzX3BrdFtqXS5wa190eXAgPT0gJyAnKSB7CS8q IEluY29tcGxldGVseSBmb3JtZWQgcGFja2V0ICovCisJaWYgKG5ha3N0YXRlKSB7CQkJLyogKFRo aXMgc2hvdWxkbid0IGhhcHBlbiBhbnkgbW9yZSkgKi8KKwkgICAgbmFjayhuKTsKKwkgICAgcmV0 cmFucysrOworCSAgICB4eHNjcmVlbihTQ1JfUFQsJyUnLChsb25nKXBrdG51bSwiKHJlc2VuZCki KTsKKwkgICAgcmV0dXJuKHNfcGt0W2pdLnBrX3J0cik7CisJfSBlbHNlIHsJCQkvKiBObyBwYWNr ZXQgdG8gcmVzZW5kISAqLworI2lmZGVmIENPTU1FTlQKKy8qCisgIFRoaXMgaGFwcGVuZWQgKG9u Y2UpIHdoaWxlIHNlbmRpbmcgYSBmaWxlIHdpdGggMiB3aW5kb3cgc2xvdHMgYW5kIHR5cGluZwor ICBYIHRvIHRoZSBzZW5kZXIgdG8gY2FuY2VsIHRoZSBmaWxlLiAgQnV0IHNpbmNlIHdlJ3JlIGNh bmNlbGxpbmcgYW55d2F5LAorICB0aGVyZSdzIG5vIG5lZWQgdG8gZ2l2ZSBhIHNjYXJ5IG1lc3Nh Z2UuCisqLworCSAgICBzcHJpbnRmKChjaGFyICopZXBrdG1zZywKKwkJICAgICJyZXNlbmQgbG9n aWMgZXJyb3I6IE5QUywgbj0lZCwgaj0lZC4iLG4saik7CisJICAgIHJldHVybigtMik7CisjZWxz ZQorLyogSnVzdCBpZ25vcmUgaXQuICovCisJICAgIHJldHVybigwKTsKKyNlbmRpZiAvKiBDT01N RU5UICovCisJfQorICAgIH0KKyNpZmRlZiBERUJVRworI2lmZGVmIEdGVElNRVIKKyAgICBpZiAo ZGVibG9nKSB0MSA9IGdmdGltZXIoKTsKKyNlbmRpZiAvKiBHRlRJTUVSICovCisjZW5kaWYgLyog REVCVUcgKi8KKworICAgIC8qIEV2ZXJ5dGhpbmcgb2ssIHNlbmQgdGhlIHBhY2tldCAqLworI2lm ZGVmIENLX1RJTUVSUworICAgIGlmICh0aW1pbnQgPiAwKQorICAgICAgc3J0dGJsW25dID0gZ3Rp bWVyKCk7CQkvKiBVcGRhdGUgdGhlIHRpbWVyICovCisjZW5kaWYgLyogQ0tfVElNRVJTICovCisg ICAgeCA9IHR0b2woc19wa3Rbal0ucGtfYWRyLHNfcGt0W2pdLnBrX2xlbik7CisKKyNpZmRlZiBE RUJVRworI2lmZGVmIEdGVElNRVIKKyAgICBpZiAoZGVibG9nKSAgeworCXQyID0gZ2Z0aW1lcigp OworCWRlYnVnKEYxMDEsInJlc2VuZCB0dG9sIG1zZWMiLCIiLChsb25nKSgodDItdDEpKjEwMDAu MCkpOworICAgIH0KKyNlbmRpZiAvKiBHRlRJTUVSICovCisjZW5kaWYgLyogREVCVUcgKi8KKyAg ICBkZWJ1ZyhGMTAxLCJyZXNlbmQgdHRvbCByZXR1cm5zIiwiIix4KTsKKworICAgIHJldHJhbnMr KzsJCQkJLyogQ291bnQgYSByZXRyYW5zbWlzc2lvbiAqLworICAgIHh4c2NyZWVuKFNDUl9QVCwn JScsKGxvbmcpcGt0bnVtLCIocmVzZW5kKSIpOyAvKiBUZWxsIHVzZXIgYWJvdXQgcmVzZW5kICov CisgICAgbG9ncGt0KCdTJyxuLHNfcGt0W2pdLnBrX2Fkciwgc19wa3Rbal0ucGtfbGVuKTsgLyog TG9nIHRoZSByZXNlbnQgcGFja2V0ICovCisgICAgcmV0dXJuKHNfcGt0W2pdLnBrX3J0cik7CQkv KiBSZXR1cm4gdGhlIG51bWJlciBvZiByZXRyaWVzLiAqLworfQorCisvKiAgRSBSIFIgUCBLIFQg IC0tICBTZW5kIGFuIEVycm9yIFBhY2tldCAgKi8KKworaW50CitlcnJwa3QocmVhc29uKSBDSEFS ICpyZWFzb247IHsJCS8qIC4uLmNvbnRhaW5pbmcgdGhlIHJlYXNvbiBnaXZlbiAqLworICAgIGV4 dGVybiBpbnQgcnRpbW8sIHN0YXRlLCBqdXN0b25lOworICAgIGludCB4LCB5OworICAgIGN6c2Vl biA9IDE7CQkJCS8qIEFsc28gY2FuY2VscyBiYXRjaCAqLworICAgIHN0YXRlID0gMDsJCQkJLyog UmVzZXQgcHJvdG9jb2wgc3RhdGUgKi8KKyAgICBkZWJ1ZyhGMTEwLCJlcnJwa3QiLHJlYXNvbiww KTsKKyAgICB0bG9nKEYxMTAsIlByb3RvY29sIEVycm9yOiIsKGNoYXIgKilyZWFzb24sMEwpOwor ICAgIHh4c2NyZWVuKFNDUl9FTSwwLDBMLHJlYXNvbik7CisgICAgZW5jc3RyKHJlYXNvbik7Cisg ICAgeCA9IHNwYWNrKCdFJyxwa3RudW0sc2l6ZSxkYXRhKTsKKyAgICBja3N0cm5jcHkoKGNoYXIg KillcGt0bXNnLChjaGFyICopcmVhc29uLFBLVE1TR0xFTik7CisgICAgeSA9IHF1aWV0OyBxdWll dCA9IDE7IGVwa3RzZW50ID0gMTsJLyogQ2xvc2UgZmlsZXMgc2lsZW50bHkuICovCisgICAgY2xz aWYoKTsgY2xzb2YoMSk7CisgICAgcXVpZXQgPSB5OworLyoKKyAgSSBqdXN0IHNlbnQgYW4gRS1w YWNrZXQuICBJJ20gaW4gbG9jYWwgbW9kZSwgSSB3YXMgcmVjZWl2aW5nIGEgZmlsZSwKKyAgSSdt IG5vdCBhIHNlcnZlciwgYW5kIHNsaWRpbmcgd2luZG93cyBhcmUgaW4gdXNlLiAgVGhlcmVmb3Jl LCB0aGVyZSBhcmUKKyAgbGlrZWx5IHRvIGJlIGEgYnVuY2ggb2YgcGFja2V0cyBhbHJlYWR5ICJp biB0aGUgcGlwZSIgb24gdGhlaXIgd2F5IHRvIG1lCisgIGJ5IHRoZSB0aW1lIHRoZSByZW1vdGUg c2VuZGVyIGdldHMgdGhlIEUtcGFja2V0LiAgU28gdGhlIG5leHQgdGltZSBJCisgIENPTk5FQ1Qg b3IgdHJ5IHRvIHN0YXJ0IGFub3RoZXIgcHJvdG9jb2wgb3BlcmF0aW9uLCBJIGFtIGxpa2VseSB0 byBiZWNvbWUKKyAgdGVycmlibHkgY29uZnVzZWQgYnkgdG9ycmVudHMgb2YgaW5jb21pbmcgbWF0 ZXJpYWwuICBUbyBwcmV2ZW50IHRoaXMsCisgIHRoZSBmb2xsb3dpbmcgY29kZSBzb2FrcyB1cCBw YWNrZXRzIGZyb20gdGhlIGNvbm5lY3Rpb24gdW50aWwgdGhlcmUgaXMgYW4KKyAgZXJyb3Igb3Ig dGltZW91dCwgd2l0aG91dCB3YXN0aW5nIHRvbyBtdWNoIHRpbWUgd2FpdGluZy4KKworICBFeGFj dGx5IHRoZSBzYW1lIHByb2JsZW0gb2NjdXJzIHdoZW4gSSBhbSBpbiByZW1vdGUgbW9kZSBvciBp ZiBJIGFtCisgIGluIHNlcnZlciBtb2RlIHdpdGggdGhlIGp1c3RvbmUgZmxhZyBzZXQuICBJbiBy ZW1vdGUgbW9kZSBub3Qgb25seQorICBkb2VzIHRoZSBwYWNrZXQgZGF0YSBwb3RlbnRpYWxseSBn ZXQgZWNobydkIGJhY2sgdG8gdGhlIHNlbmRlciB3aGljaAorICBpcyBjb25mdXNpbmcgdG8gdGhl IHVzZXIgaW4gQ09OTkVDVCBtb2RlLCBidXQgaXQgYWxzbyBtYXkgcmVzdWx0IGluIHRoZQorICBo b3N0IHBlcmZvcm1pbmcgYml6YXJyZSBhY3Rpb25zIHN1Y2ggYXMgc3VzcGVuZGluZyB0aGUgcHJv Y2VzcyBpZiBeWiBpcworICB1bnByZWZpeGVkLCBldGMuCisKKyAgRnVydGhlcm1vcmUsIHRob3Vz YW5kcyBvZiBwYWNrZXRzIGJ5dGVzIGluIHRoZSBkYXRhIHN0cmVhbSBwcmV2ZW50IHRoZQorICBj bGllbnQgZnJvbSBiZWluZyBhYmxlIHRvIHByb2Nlc3MgVGVsbmV0IEtlcm1pdCBPcHRpb24gbmVn b3RpYXRpb25zCisgIHByb3Blcmx5LgorKi8KKyNpZmRlZiBTVFJFQU1JTkcKKyAgICAvKiBCZWNh dXNlIHN0cmVhbWluZyBzZXRzIHRoZSB0aW1lb3V0IHRvIDAuLi4gKi8KKyAgICBpZiAoc3RyZWFt aW5nKSB7CisJdGltaW50ID0gcmN2dGltbyA9IHJ0aW1vOworCXN0cmVhbWluZyA9IDA7CisgICAg fQorI2VuZGlmIC8qIFNUUkVBTUlORyAqLworICAgIGlmICh3aGF0ICYgV19SRUNWICYmCisgICAg ICAgICghc2VydmVyIHx8IChzZXJ2ZXIgJiYganVzdG9uZSkpICYmCisgICAgICAgICh3c2xvdHMg PiAxCisjaWZkZWYgU1RSRUFNSU5HCisJIHx8IHN0cmVhbWluZworI2VuZGlmIC8qIFNUUkVBTUlO RyAqLworCSApKSB7CisjaWZkZWYgR0ZUSU1FUgorCUNLRkxPQVQgb2xkc2VjLCBzZWMgPSAoQ0tG TE9BVCkgMC4wOworI2Vsc2UKKwlpbnQgb2xkc2VjLCBzZWMgPSAwOworI2VuZGlmIC8qIEdGVElN RVIgKi8KKwlkZWJ1ZyhGMTAxLCJlcnJwa3QgZHJhaW5pbmciLCIiLHdzbG90cyk7CisJeHhzY3Jl ZW4oU0NSX1NULFNUX01TRywwbCwiRHJhaW5pbmcgaW5jb21pbmcgcGFja2V0cywgd2FpdC4uLiIp OworCXdoaWxlICh4ID4gLTEpIHsJCS8qIERvbid0IGJvdGhlciBpZiBubyBjb25uZWN0aW9uICov CisJICAgIG9sZHNlYyA9IHNlYzsKKyNpZmRlZiBHRlRJTUVSCisJICAgIHNlYyA9IGdmdGltZXIo KTsKKwkgICAgaWYgKG9sZHNlYyAhPSAoQ0tGTE9BVCkgMC4wKQorCSAgICAgIHRpbWludCA9IHJj dnRpbW8gPSAoaW50KSAoc2VjIC0gb2xkc2VjICsgMC41KTsKKyNlbHNlCisJICAgIHNlYyA9IGd0 aW1lcigpOworCSAgICBpZiAob2xkc2VjICE9IDApCisJICAgICAgdGltaW50ID0gcmN2dGltbyA9 IHNlYyAtIG9sZHNlYyArIDE7CisjZW5kaWYgLyogR0ZUSU1FUiAqLworCSAgICBpZiAodGltaW50 IDwgMSkKKwkgICAgICB0aW1pbnQgPSByY3Z0aW1vID0gMTsKKwkgICAgbXNsZWVwKDUwKTsJCQkv KiBBbGxvdyBhIGJpdCBvZiBzbG9wICovCisJICAgIHggPSBycGFjaygpOwkJLyogUmVhZCBhIHBh Y2tldCAqLworCSAgICBpZiAoeCA9PSAnVCcgfHwgeCA9PSAneicpCS8qIFRpbWVkIG91dCBtZWFu cyB3ZSdyZSBkb25lICovCisJICAgICAgYnJlYWs7CisJICAgIHh4c2NyZWVuKFNDUl9QVCx4LHJz biwiIik7CS8qIExldCB1c2VyIGtub3cgKi8KKwl9CisJeHhzY3JlZW4oU0NSX1NULFNUX01TRyww bCwiRHJhaW4gY29tcGxldGUuIik7CisgICAgfQorICAgIGlmICgoeCA9ICh3aGF0ICYgV19LRVJN SVQpKSkKKyAgICAgIHhpdHN0YSB8PSB4OwkJCS8qIFJlbWVtYmVyIHdoYXQgZmFpbGVkLiAqLwor ICAgIHN1Y2Nlc3MgPSAwOworICAgIHJldHVybih5KTsKK30KKworLyogc2NtZCgpICAtLSAgU2Vu ZCBhIHBhY2tldCBvZiB0aGUgZ2l2ZW4gdHlwZSAqLworCitpbnQKKyNpZmRlZiBDS19BTlNJQwor c2NtZChjaGFyIHQsIENIQVIgKmRhdCkKKyNlbHNlCitzY21kKHQsZGF0KSBjaGFyIHQ7IENIQVIg KmRhdDsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogc2NtZCAqLyB7CisgICAgaW50IHg7Cisg ICAgZXh0ZXJuIGNoYXIgKiBzcmltc2c7CisgICAgZGVidWcoRjAwMCwic2NtZCIsZGF0LHQpOwor ICAgIGlmIChlbmNzdHIoZGF0KSA8IDApIHsJCS8qIEVuY29kZSB0aGUgY29tbWFuZCBzdHJpbmcg Ki8KKwlzcmltc2cgPSAiU3RyaW5nIHRvbyBsb25nIjsKKwlyZXR1cm4oLTEpOworICAgIH0KKyAg ICB4ID0gc3BhY2sodCxwa3RudW0sc2l6ZSxkYXRhKTsKKyAgICBkZWJ1ZyhGMTAxLCJzY21kIHNw YWNrIiwiIix4KTsKKyAgICByZXR1cm4oeCk7Cit9CisKKy8qIENvbXBvc2UgYW5kIFNlbmQgR0VU IHBhY2tldCAqLworCitzdHJ1Y3Qgb3BrdHBhcm0gewkJCS8qIE8tUGFja2V0IGl0ZW0gbGlzdCAq LworICAgIENIQVIgKiBvcGt0aXRlbTsKKyAgICBzdHJ1Y3Qgb3BrdHBhcm0gKiBvcGt0bmV4dDsK K307CisKK3N0cnVjdCBvcGt0cGFybSAqIG9wa3RoZWFkID0gTlVMTDsJLyogTGlua2VkIGxpc3Qg b2YgTy1wYWNrZXQgZmllbGRzICovCitpbnQgb3BrdGNudCA9IDA7CQkJLyogTy1QYWNrZXQgY291 bnRlciAqLworY2hhciAqIHNyaW1zZyA9IE5VTEw7CQkJLyogR0VULVBhY2tldCBlcnJvciBtZXNz YWdlICovCisKKy8qIFMgTyBQIEsgVCAgLS0gIFNlbmQgTy1QYWNrZXQgKi8KKy8qCisgIFNlbmRz IG9uZSBPLVBhY2tldCBlYWNoIHRpbWUgY2FsbGVkLCB1c2luZyBmaXJzdC1maXQgbWV0aG9kIG9m IGZpbGxpbmcKKyAgdGhlIHBhY2tldCBmcm9tIGxpbmtlZCBsaXN0IG9mIHBhcmFtZXRlcnMgcG9p bnRlZCB0byBieSBvcGt0aGVhZC4KKyAgVG8gYmUgY2FsbGVkIHJlcGVhdGVkbHkgdW50aWwgbGlz dCBpcyBlbXB0eSBvciB0aGVyZSBpcyBhbiBlcnJvci4KKyAgUmV0dXJuczoKKyAgIC0xIG9uIGZh aWx1cmUuCisgICAgMCBvbiBzdWNjZXNzIGFuZCBubyBtb3JlIGZpZWxkcyBsZWZ0IHRvIHNlbmQu CisgICAgMSBvbiBzdWNjZXNzIGJ1dCB3aXRoIG1vcmUgZmllbGRzIGxlZnQgdG8gYmUgc2VudC4K KyovCisKK2ludAorc29wa3QoKSB7CisgICAgaW50IG4gPSAwOwkJCQkvKiBGaWVsZCBudW1iZXIg aW4gdGhpcyBwYWNrZXQgKi8KKyAgICBpbnQgcmMgPSAwOwkJCQkvKiBSZXR1cm4gY29kZSAqLwor ICAgIGludCBsZW4gPSAwOwkJCS8qIERhdGEgZmllbGQgbGVuZ3RoICovCisgICAgY2hhciBjID0g TlVMOworICAgIHN0cnVjdCBvcGt0cGFybSAqIG8gPSBOVUxMOworICAgIHN0cnVjdCBvcGt0cGFy bSAqIHQgPSBOVUxMOworICAgIHN0cnVjdCBvcGt0cGFybSAqIHByZXYgPSBOVUxMOworICAgIENI QVIgKiBkc2F2ZSA9IGRhdGE7CisgICAgaW50IHgsIHNzYXZlID0gc3BzaXo7CisKKyAgICBzcmlt c2cgPSBOVUxMOwkJCS8qIEVycm9yIG1lc3NhZ2UgKi8KKyAgICBvID0gb3BrdGhlYWQ7CQkJLyog UG9pbnQgdG8gaGVhZCBvZiBsaXN0ICovCisgICAgaWYgKCFvKSB7CQkJCS8qIE9vcHMsIG5vIGxp c3QuLi4gKi8KKwlzcmltc2cgPSAiR0VUIFBhY2tldCBJbnRlcm5hbCBFcnJvciAxIjsKKwlkZWJ1 ZyhGMTAwLCJzb3BrdCBOVUxMIGxpc3QiLCIiLDApOworCXJldHVybigtMSk7CisgICAgfQorICAg IHdoaWxlIChvKSB7CQkJCS8qIEdvIHRocnUgbGlua2VkIGxpc3QuLi4gKi8KKwljID0gKihvLT5v cGt0aXRlbSk7CQkvKiBQYXJhbWV0ZXIgY29kZSAqLworCWRlYnVnKEYwMDAsInNvcGt0IixvLT5v cGt0aXRlbSxjKTsKKwl4ID0gZW5jc3RyKChDSEFSICopby0+b3BrdGl0ZW0pOworCWRlYnVnKEYx MTEsInNvcGt0IGVuY3N0ciIsZHNhdmUseCk7CisJaWYgKHggPCAwKSB7CQkJLyogRW5jb2RlIHRo aXMgaXRlbSAqLworCSAgICBpZiAobiA9PSAwKSB7CQkvKiBGYWlsdXJlLCBmaXJzdCBmaWVsZCBp biBwYWNrZXQgKi8KKwkJZGVidWcoRjEwMCwic29wa3Qgb3ZlcmZsb3ciLCIiLDApOworCQlzcHNp eiA9IHNzYXZlOwkJLyogUmVzdG9yZSB0aGVzZSAqLworCQlkYXRhID0gZHNhdmU7CisJCW8gPSBv cGt0aGVhZDsJCS8qIEZyZWUgbGlua2VkIGxpc3QgKi8KKwkJd2hpbGUgKG8pIHsKKwkJICAgIGlm IChvLT5vcGt0aXRlbSkgZnJlZShvLT5vcGt0aXRlbSk7CisJCSAgICB0ID0gby0+b3BrdG5leHQ7 CisJCSAgICBmcmVlKChjaGFyICopbyk7CisJCSAgICBvID0gdDsKKwkJfQorCQlvcGt0aGVhZCA9 IE5VTEw7CisJCXNyaW1zZyA9ICJHRVQgUGFja2V0IFRvbyBMb25nIGZvciBTZXJ2ZXIiOworCQly ZXR1cm4oLTEpOwkJLyogRmFpbCAqLworCSAgICB9IGVsc2UgewkJCS8qIE5vdCBmaXJzdCBmaWVs ZCBpbiBwYWNrZXQgKi8KKwkJZGVidWcoRjExMCwic29wa3QgbGVmdG92ZXIiLG8tPm9wa3RpdGVt LDApOworCQlwcmV2ID0gbzsJCS8qIE1ha2UgdGhpcyBvbmUgdGhlIG5ldyBwcmV2aW91cyAqLwor CQlvID0gby0+b3BrdG5leHQ7CS8qIEdldCBuZXh0ICovCisJCWMgPSBOVUw7CQkvKiBTbyB3ZSBr bm93IHdlJ3JlIG5vdCBkb25lICovCisJCSpkYXRhID0gTlVMOwkJLyogRXJhc2UgYW55IHBhcnRp YWwgZW5jb2RpbmcgKi8KKwkJY29udGludWU7CQkvKiBXZSBjYW4gdHJ5IHRoaXMgb25lIGFnYWlu IGxhdGVyICovCisJICAgIH0KKwl9CisJbisrOwkJCQkvKiBFbmNvZGluZyB3YXMgc3VjY2Vzc2Z1 bCAqLworCWRlYnVnKEYxMTEsInNvcGt0IGZpZWxkIixkYXRhLHgpOworCWxlbiArPSB4OwkJCS8q IFRvdGFsIGRhdGEgZmllbGQgbGVuZ3RoICovCisJZGF0YSArPSB4OwkJCS8qIFNldCB1cCBmb3Ig bmV4dCBmaWVsZC4uLiAqLworCXNwc2l6IC09IHg7CisJZnJlZShvLT5vcGt0aXRlbSk7CQkvKiBG cmVlIGl0ZW0ganVzdCBlbmNvZGVkICovCisJaWYgKG8gPT0gb3BrdGhlYWQpIHsJCS8qIElmIGhl YWQgKi8KKwkgICAgb3BrdGhlYWQgPSBvLT5vcGt0bmV4dDsJLyogTW92ZSBoZWFkIHRvIG5leHQg Ki8KKwkgICAgZnJlZSgoY2hhciAqKW8pOwkJLyogRnJlZSB0aGlzIGxpc3Qgbm9kZSAqLworCSAg ICBvID0gb3BrdGhlYWQ7CisJfSBlbHNlIHsJCQkvKiBJZiBub3QgaGVhZCAqLworCSAgICBvID0g by0+b3BrdG5leHQ7CQkvKiBHZXQgbmV4dCAqLworCSAgICBwcmV2LT5vcGt0bmV4dCA9IG87CQkv KiBMaW5rIHByZXZpb3VzIHRvIG5leHQgKi8KKwl9CisJaWYgKGMgPT0gJ0AnKQkJCS8qIExvb3Ag ZXhpdCAqLworCSAgYnJlYWs7CisJaWYgKCFvICYmICFvcGt0aGVhZCkgewkJLyogU2V0IHVwIEVu ZCBPZiBQYXJhbWV0ZXJzIEZpZWxkICovCisJICAgIG8gPSAoc3RydWN0IG9wa3RwYXJtICopbWFs bG9jKHNpemVvZihzdHJ1Y3Qgb3BrdHBhcm0pKTsKKwkgICAgaWYgKG8pIHsKKwkJb3BrdGhlYWQg PSBvOworCQlpZiAoIShvLT5vcGt0aXRlbSA9IChDSEFSICopbWFsbG9jKDMpKSkgeworCQkgICAg ZnJlZSgoY2hhciAqKW8pOworCQkgICAgc3JpbXNnID0gIkdFVCBQYWNrZXQgSW50ZXJuYWwgRXJy b3IgOCI7CisJCSAgICByZXR1cm4oLTEpOworCQl9CisJCWNrc3RybmNweSgoY2hhciAqKShvLT5v cGt0aXRlbSksICJAICIsIDMpOworCQlkZWJ1ZyhGMTExLCJzb3BrdCBvLT5vcGt0aXRlbSIsby0+ b3BrdGl0ZW0sCisJCSAgICAgIHN0cmxlbigoY2hhciAqKShvLT5vcGt0aXRlbSkpKTsKKwkJby0+ b3BrdG5leHQgPSBOVUxMOworCSAgICB9CisJfQorICAgIH0KKyAgICBkYXRhID0gZHNhdmU7CQkJ LyogUmVzdG9yZSBnbG9iYWxzICovCisgICAgc3BzaXogPSBzc2F2ZTsKKyAgICBkZWJ1ZyhGMTEw LCJzb3BrdCBkYXRhIixkYXRhLDApOworICAgIGRlYnVnKEYxMDEsInNvcGt0IG9wa3RjbnQiLCIi LG9wa3RjbnQpOworICAgIGlmIChvcGt0Y250KysgPiAwKSB7CisJaWYgKG54dHBrdCgpIDwgMCkg ewkJLyogR2V0IG5leHQgcGFja2V0IG51bWJlciBhbmQgYnVmZmVyICovCisJICAgIHNyaW1zZyA9 ICJHRVQgUGFja2V0IEludGVybmFsIEVycm9yIDkiOworCSAgICByZXR1cm4oLTEpOworCX0KKyAg ICB9CisgICAgZGVidWcoRjEwMSwic29wa3QgcGt0bnVtIiwiIixwa3RudW0pOworICAgIHJjID0g c3BhY2soKGNoYXIpJ08nLHBrdG51bSxsZW4sZGF0YSk7IC8qIFNlbmQgTy1QYWNrZXQgKi8KKyAg ICBkZWJ1ZyhGMTAxLCJzb3BrdCBzcGFjayIsIiIscmMpOworICAgIGlmIChyYyA8IDApCQkJCS8q IEZhaWxlZCAqLworICAgICAgc3JpbXNnID0gIlNlbmQgUGFja2V0IEZhaWx1cmUiOwkvKiBTZXQg bWVzc2FnZSAqLworICAgIGVsc2UJCQkJLyogU3VjY2VlZGVkICovCisgICAgICByYyA9IChjID09 ICdAJykgPyAwIDogMTsJCS8qIDEgPSBjb21lIGJhY2sgZm9yIG1vcmUsIDAgPSBkb25lICovCisg ICAgZGVidWcoRjEwMSwic29wa3QgcmMiLCIiLHJjKTsKKyAgICByZXR1cm4ocmMpOworfQorCisv KiBTIFIgSSBOIEkgVCAgLS0gIFNlbmQgR0VUIHBhY2tldCAgKi8KKy8qCisgIFNlbmRzIHRoZSBh cHByb3ByaWF0ZSBHRVQtQ2xhc3MgcGFja2V0LgorICBSZXR1cm5zOgorICAtMSBvbiBlcnJvcgor ICAgMCBpZiBwYWNrZXQgc2VudCBzdWNjZXNzZnVsbHkgYW5kIHdlIGNhbiBtb3ZlIG9uIHRvIHRo ZSBuZXh0IHN0YXRlCisgICAxIGlmIGFuIE8tcGFja2V0IHdhcyBzZW50IE9LIGJ1dCBtb3JlIE8g cGFja2V0cyBzdGlsbCBuZWVkIHRvIGJlIHNlbnQuCisqLworaW50CitzcmluaXQocmVnZXQsIHJl dHJpZXZlLCBvcGt0KSBpbnQgcmVnZXQsIHJldHJpZXZlLCBvcGt0OyB7CisgICAgaW50IHggPSAw LCBsZWZ0ID0gMDsKKyAgICBleHRlcm4gaW50IG9vcHRzLCBvbW9kZTsKKyAgICBDSEFSICogcCA9 IE5VTEw7CisjaWZkZWYgUkVDVVJTSVZFCisgICAgZXh0ZXJuIGludCByZWN1cnNpdmU7CisgICAg ZGVidWcoRjEwMSwic3Jpbml0IHJlY3Vyc2l2ZSIsIiIscmVjdXJzaXZlKTsKKyNlbmRpZiAvKiBS RUNVUlNJVkUgKi8KKyAgICBkZWJ1ZyhGMTAxLCJzcmluaXQgcmVnZXQiLCIiLHJlZ2V0KTsKKyAg ICBkZWJ1ZyhGMTAxLCJzcmluaXQgcmV0cmlldmUiLCIiLHJldHJpZXZlKTsKKyAgICBkZWJ1ZyhG MTAxLCJzcmluaXQgb3BrdCIsIiIsb3BrdCk7CisgICAgZGVidWcoRjEwMSwic3Jpbml0IG9vcHRz IiwiIixvb3B0cyk7CisgICAgZGVidWcoRjEwMSwic3Jpbml0IG9tb2RlIiwiIixvbW9kZSk7Cisg ICAgZGVidWcoRjExMCwic3Jpbml0IGNtYXJnIixjbWFyZywwKTsKKyAgICBzcmltc2cgPSBOVUxM OworCisgICAgb3BrdGNudCA9IDA7CisgICAgaWYgKCFjbWFyZykgY21hcmcgPSAiIjsKKyAgICBp ZiAoISpjbWFyZykgeworCXNyaW1zZyA9ICJHRVQgd2l0aCBubyBmaWxlbmFtZSI7CisJZGVidWco RjEwMCwic3Jpbml0IG51bGwgY21hcmciLCIiLDApOworCXJldHVybigtMSk7CisgICAgfQorICAg IGlmIChvcGt0KSB7CQkJCS8qIEV4dGVuZGVkIEdFVCBpcyB0b3RhbGx5IGRpZmZlcmVudCAqLwor CWNoYXIgYnVmWzE2XTsKKwlzdHJ1Y3Qgb3BrdHBhcm0gKiBvID0gTlVMTDsKKwlzdHJ1Y3Qgb3Br dHBhcm0gKiBwcmV2ID0gTlVMTDsKKworICAgICAgICBidWZbMF0gPSBOVUw7CisKKwkvKiBCdWls ZCBPLVBhY2tldCBmaWVsZHMgYW5kIHNlbmQgKHBlcmhhcHMgZmlyc3QpIE8tUGFja2V0ICovCisK KwlpZiAob29wdHMgPiAtMSkgewkJLyogV3JpdGUgT3B0aW9uIGZsYWdzICovCisJICAgIG8gPSAo c3RydWN0IG9wa3RwYXJtICopbWFsbG9jKHNpemVvZihzdHJ1Y3Qgb3BrdHBhcm0pKTsKKwkgICAg aWYgKCFvKSB7CisJCXNyaW1zZyA9ICJHRVQgUGFja2V0IEludGVybmFsIEVycm9yIDIiOworCQlk ZWJ1ZyhGMTAwLCJzcmluaXQgbWFsbG9jIGZhaWwgTzEiLCIiLDApOworCQlyZXR1cm4oLTEpOwor CSAgICB9CisJICAgIHNwcmludGYoYnVmLCJPeCVkIixvb3B0cyk7CS8qIHNhZmUgKi8KKwkgICAg eCA9IChpbnQpIHN0cmxlbihidWYrMik7CisJICAgIGJ1ZlsxXSA9IHRvY2hhcih4KTsKKwkgICAg by0+b3BrdGl0ZW0gPSAoQ0hBUiAqKW1hbGxvYyh4ICsgMyk7CisJICAgIGlmICghby0+b3BrdGl0 ZW0pIHsKKwkJc3JpbXNnID0gIkdFVCBQYWNrZXQgSW50ZXJuYWwgRXJyb3IgMyI7CisJCWRlYnVn KEYxMDAsInNyaW5pdCBtYWxsb2MgZmFpbCBPMiIsIiIsMCk7CisJCXJldHVybigtMSk7CisJICAg IH0KKwkgICAgY2tzdHJuY3B5KChjaGFyICopKG8tPm9wa3RpdGVtKSxidWYseCszKTsKKwkgICAg by0+b3BrdG5leHQgPSBOVUxMOworCSAgICBpZiAoIW9wa3RoZWFkKQorCSAgICAgIG9wa3RoZWFk ID0gbzsKKwkgICAgcHJldiA9IG87CisJfQorCWlmIChvbW9kZSA+IC0xKSB7CQkvKiBJZiBYZmVy IE1vZGUgc3BlY2lmaWVkLCB3cml0ZSBpdCAqLworCSAgICBvID0gKHN0cnVjdCBvcGt0cGFybSAq KW1hbGxvYyhzaXplb2Yoc3RydWN0IG9wa3RwYXJtKSk7CisJICAgIGlmICghbykgeworCQlzcmlt c2cgPSAiR0VUIFBhY2tldCBJbnRlcm5hbCBFcnJvciA0IjsKKwkJZGVidWcoRjEwMCwic3Jpbml0 IG1hbGxvYyBmYWlsIE0xIiwiIiwwKTsKKwkJcmV0dXJuKC0xKTsKKwkgICAgfQorCSAgICBzcHJp bnRmKGJ1ZiwiTXglZCIsb21vZGUpOwkvKiBzYWZlICovCisJICAgIHggPSAoaW50KSBzdHJsZW4o YnVmKzIpOworCSAgICBidWZbMV0gPSB0b2NoYXIoeCk7CisJICAgIG8tPm9wa3RpdGVtID0gKENI QVIgKiltYWxsb2MoeCArIDMpOworCSAgICBpZiAoIW8tPm9wa3RpdGVtKSB7CisJCXNyaW1zZyA9 ICJHRVQgUGFja2V0IEludGVybmFsIEVycm9yIDUiOworCQlkZWJ1ZyhGMTAwLCJzcmluaXQgbWFs bG9jIGZhaWwgTzIiLCIiLDApOworCQlyZXR1cm4oLTEpOworCSAgICB9CisJICAgIGNrc3RybmNw eSgoY2hhciAqKShvLT5vcGt0aXRlbSksYnVmLHgrMyk7CisJICAgIG8tPm9wa3RuZXh0ID0gTlVM TDsKKwkgICAgaWYgKCFvcGt0aGVhZCkKKwkgICAgICBvcGt0aGVhZCA9IG87CisJICAgIGVsc2UK KwkgICAgICBwcmV2LT5vcGt0bmV4dCA9IG87CisJICAgIHByZXYgPSBvOworCX0KKworCS8qIFNh bWUgZGVhbCBmb3Igb25hbWUgYW5kIG9wYXRoIGV2ZW50dWFsbHkgYnV0IG5vdCBuZWVkZWQgbm93 Li4uICovCisKKwl4ID0gc3RybGVuKGNtYXJnKTsJCS8qIE5vdyBkbyBmaWxlbmFtZSAqLworCWlm ICh4ID4gc3BzaXogLSA0KSB7CisJICAgIHNyaW1zZyA9ICJHRVQgUGFja2V0IFRvbyBMb25nIGZv ciBTZXJ2ZXIiOworCSAgICByZXR1cm4oLTEpOworCX0KKwlvID0gKHN0cnVjdCBvcGt0cGFybSAq KW1hbGxvYyhzaXplb2Yoc3RydWN0IG9wa3RwYXJtKSk7CisJaWYgKCFvKSB7CisJICAgIHNyaW1z ZyA9ICJHRVQgUGFja2V0IEludGVybmFsIEVycm9yIDYiOworCSAgICBkZWJ1ZyhGMTAwLCJzcmlu aXQgbWFsbG9jIGZhaWwgRjEiLCIiLDApOworCSAgICByZXR1cm4oLTEpOworCX0KKwlsZWZ0ID0g eCArIDY7CisJby0+b3BrdGl0ZW0gPSAoQ0hBUiAqKW1hbGxvYyhsZWZ0ICsgMSk7CisJaWYgKCFv LT5vcGt0aXRlbSkgeworCSAgICBzcmltc2cgPSAiR0VUIFBhY2tldCBJbnRlcm5hbCBFcnJvciA3 IjsKKwkgICAgZGVidWcoRjEwMCwic3Jpbml0IG1hbGxvYyBmYWlsIEYyIiwiIiwwKTsKKwkgICAg cmV0dXJuKC0xKTsKKwl9CisJcCA9IG8tPm9wa3RpdGVtOworCSpwKysgPSAnRic7CisJbGVmdC0t OworCWlmICh4ID4gOTQpIHsJCQkvKiBUb28gbG9uZyBmb3Igbm9ybWFsIGxlbmd0aCAqLworCSAg ICAqcCsrID0gU1lOOwkJCS8qIEVzY2FwZSBsZW5ndGggd2l0aCBDdHJsLVYgKi8KKwkgICAgKnAr KyA9IHRvY2hhcih4IC8gOTUpOworCSAgICAqcCsrID0gdG9jaGFyKHggJSA5NSk7CisJICAgIGxl ZnQgLT0gMzsKKwl9IGVsc2UgewkJCS8qIE5vcm1hbCBlbmNvZGluZyBmb3IgOTQgb3IgbGVzcyAq LworCSAgICAqcCsrID0gdG9jaGFyKHgpOworCSAgICBsZWZ0LS07CisJfQorCWNrc3RybmNweSgo Y2hhciAqKXAsY21hcmcsbGVmdCk7IC8qIENvcHkgdGhlIGZpbGVuYW1lICovCisJby0+b3BrdG5l eHQgPSBOVUxMOworCWlmICghb3BrdGhlYWQpCisJICBvcGt0aGVhZCA9IG87CisJZWxzZQorCSAg cHJldi0+b3BrdG5leHQgPSBvOworCXByZXYgPSBvOworCisJLyogRW5kIG9mIFBhcmFtZXRlcnMg Ki8KKworCXByZXYtPm9wa3RuZXh0ID0gTlVMTDsJCS8qIEVuZCBvZiBsaXN0LiAqLworCXJldHVy bihzb3BrdCgpKTsKKyAgICB9CisKKyAgICAvKiBOb3QgRXh0ZW5kZWQgR0VUICovCisKKyAgICBp ZiAoZW5jc3RyKChDSEFSICopY21hcmcpIDwgMCkgewkvKiBFbmNvZGUgdGhlIGZpbGVuYW1lLiAq LworCXNyaW1zZyA9ICJHRVQgUGFja2V0IFRvbyBMb25nIGZvciBTZXJ2ZXIiOworCXJldHVybigt MSk7CisgICAgfQorICAgIGlmIChyZXRyaWV2ZSkgewkJCS8qIFNlbmQgdGhlIHBhY2tldC4gKi8K KyNpZmRlZiBSRUNVUlNJVkUKKwlpZiAocmVjdXJzaXZlKQorCSAgeCA9IHNwYWNrKChjaGFyKSdX Jyxwa3RudW0sc2l6ZSxkYXRhKTsgLyogR0VUIC9ERUxFVEUgL1JFQ1VSU0lWRSAqLworCWVsc2UK KyNlbmRpZiAvKiBSRUNVUlNJVkUgKi8KKwkgIHggPSBzcGFjaygoY2hhciknSCcscGt0bnVtLHNp emUsZGF0YSk7IC8qIEdFVCAvREVMRVRFICovCisgICAgfQorI2lmZGVmIFJFQ1VSU0lWRQorICAg IGVsc2UgaWYgKHJlY3Vyc2l2ZSkKKyAgICAgIHggPSBzcGFjaygoY2hhciknVicscGt0bnVtLHNp emUsZGF0YSk7IC8qIEdFVCAvUkVDVVJTSVZFICovCisjZW5kaWYgLyogUkVDVVJTSVZFICovCisg ICAgZWxzZQorICAgICAgeCA9IHNwYWNrKChjaGFyKShyZWdldCA/ICdKJyA6ICdSJykscGt0bnVt LHNpemUsZGF0YSk7IC8qIEdFVCAqLworICAgIGlmICh4IDwgMCkKKyAgICAgIHNyaW1zZyA9ICJT ZW5kIFBhY2tldCBGYWlsdXJlIjsKKyAgICByZXR1cm4oeCA8IDAgPyB4IDogMCk7Cit9CisKKwor LyogIEsgUyBUIEEgUiBUICAtLSAgQ2hlY2tzIGZvciBhIEtlcm1pdCBwYWNrZXQgd2hpbGUgaW4g dGVybWluYWwgbW9kZS4gICovCisKKy8qICAob3IgY29tbWFuZCBtb2RlLi4uKSAgKi8KKworI2lm ZGVmIENLX0FVVE9ETAoraW50CisjaWZkZWYgQ0tfQU5TSUMKK2tzdGFydChDSEFSIGNoKQorI2Vs c2UKK2tzdGFydChjaCkgQ0hBUiBjaDsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyoga3N0YXJ0 ICovIHsKKyAgICBzdGF0aWMgQ0hBUiAqIHAgPSBOVUxMOworCisjaWZkZWYgT1MyCisgICAgc3Rh dGljIENIQVIgKiBwayA9IE5VTEw7CisjZW5kaWYgLyogT1MyICovCisgICAgY2ggJj0gMDE3NzsJ CQkJLyogU3RyaXAgOHRoIGJpdCAqLworCisgICAgLyogQmVjYXVzZSB3ZSdyZSBpbiBjb29rZWQg bW9kZSBhdCB0aGUgY29tbWFuZCBwcm9tcHQuLi4gKi8KKworICAgIGlmIChjaCA9PSBMRikgewor CWRlYnVnKEYxMTAsImtzdGFydCIsImNoID09IExGIiwwKTsKKwlpZiAoKHdoYXQgPT0gV19DT01N QU5EIHx8IHdoYXQgPT0gV19JTklUIHx8IHdoYXQgPT0gV19OT1RISU5HKSkgeworCSAgICBpZiAo ZW9sID09IENSKSB7CisJCWNoID0gZW9sOworCQlkZWJ1ZyhGMTEwLCJrc3RhcnQiLCJjaCA9IENS IiwwKTsKKwkgICAgfQorCX0KKyAgICB9CisKKyNpZmRlZiBPUzIKKyAgICBpZiAoYWRsX2ttb2Rl ID09IEFETF9TVFIpIHsKKwlpZiAoIWNoKQorCSAgcmV0dXJuKDApOworCWlmICghcGspCisJICBw ayA9IGFkbF9rc3RyOworCisJaWYgKGNoID09ICpwaykgeworCSAgICBwaysrOworCSAgICBpZiAo KnBrID09ICdcMCcpIHsKKwkJcGsgPSBhZGxfa3N0cjsKKwkJZGVidWcoRjEwMCwgImtzdGFydCBL ZXJtaXQgU3RhcnQgU3RyaW5nIiwiIiwwKTsKKwkJcmV0dXJuKFBST1RPX0sgKyAxKTsKKwkgICAg fQorCX0gZWxzZQorCSAgcGsgPSBhZGxfa3N0cjsKKyAgICB9CisjZW5kaWYgLyogT1MyICovCisK KyAgICBpZiAoY2ggPT0gc3RjaHIpIHsJCQkvKiBTdGFydCBvZiBwYWNrZXQgKi8KKwlrc3RhcnRh Y3RpdmUgPSAxOworCXAgPSBrc2J1ZjsKKwkqcCA9IGNoOworCWRlYnVnKEYxMDEsImtzdGFydCBT T1AiLCIiLGNoKTsKKyAgICB9IGVsc2UgaWYgKGNoID09IGVvbCkgewkJLyogRW5kIG9mIHBhY2tl dCAqLworCWtzdGFydGFjdGl2ZSA9IDA7CisJaWYgKHApIHsKKwkgICAgZGVidWcoRjEwMSwia3N0 YXJ0IEVPTCIsIiIsY2gpOworCSAgICBwKys7CisJICAgIGlmIChwIC0ga3NidWYgPCA5NCApIHsK KwkJaW50IHJjID0gMDsKKwkJKnArKyA9IGNoOworCQkqcCA9IE5VTDsKKwkJcmMgPSBjaGtzcGt0 KChjaGFyICopa3NidWYpOworCQlkZWJ1ZyhGMTExLCJrc3RhcnQgRU9QIGNoa3Nwa3QiLCBrc2J1 ZiwgcmMpOworCQlwID0gTlVMTDsKKwkJaWYgKCFyYykgcmV0dXJuKDApOworCQlpZiAocmMgPT0g MikgcmMgPSAtMTsKKwkJZGVidWcoRjExMSwia3N0YXJ0IGtzYnVmIixrc2J1ZixyYyk7CisJCXJl dHVybihyYyk7CisJICAgIH0gZWxzZSB7CisJCWRlYnVnKEYxMTAsImtzdGFydCIsInAgLSBrc2J1 ZiA+PSA5NCIsMCk7CisJCXAgPSBOVUxMOworCSAgICB9CisJfQorICAgIH0gZWxzZSBpZiAocCkg eworCWlmIChjaCA8IFNQKQorCSAga3N0YXJ0YWN0aXZlID0gMDsKKwlwKys7CisJaWYgKHAgLSBr c2J1ZiA8IDk0KSB7CisJICAgICpwID0gY2g7CisJfSBlbHNlIHsKKwkgICAgcCA9IE5VTEw7CisJ ICAgIGRlYnVnKEYxMTAsImtzdGFydCIsInAgLSBrc2J1ZiA+PSA5NCIsMCk7CisJfQorICAgIH0K KyAgICByZXR1cm4oMCk7Cit9CisKKyNpZmRlZiBDS19YWVoKKworLyogIFogUyBUIEEgUiBUICAt LSAgQ2hlY2tzIGZvciBhIFpNT0RFTSBwYWNrZXQgd2hpbGUgaW4gdGVybWluYWwgbW9kZS4gICov CisKK2ludAorI2lmZGVmIENLX0FOU0lDCit6c3RhcnQoQ0hBUiBjaCkKKyNlbHNlCit6c3RhcnQo Y2gpIENIQVIgY2g7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIHpzdGFydCAqLyB7CisgICAg c3RhdGljIENIQVIgKiBtYXRjaHN0ciA9IChDSEFSICopICJcMDMwQjAwIjsKKyAgICAvKiAicnpc cioqXDAzMEIwMDAwMDAwMDAwMDAwMFxyXDAzM0pcMDIxIjsgKi8KKyAgICBzdGF0aWMgQ0hBUiAq IHAgPSBOVUxMOworICAgIGV4dGVybiBpbnQgaW5zZXJ2ZXI7CisKKyAgICBpZiAoaW5zZXJ2ZXIp CisgICAgICByZXR1cm4oMCk7CisKKyAgICBpZiAoIWNoKQorICAgICAgcmV0dXJuKDApOworICAg IGlmICghcCkgeworI2lmZGVmIE9TMgorCXAgPSBhZGxfem1vZGUgPT0gQURMX1BBQ0sgPyBtYXRj aHN0ciA6IGFkbF96c3RyOworI2Vsc2UKKwlwID0gbWF0Y2hzdHI7CisjZW5kaWYgLyogT1MyICov CisgICAgfQorICAgIGlmIChjaCA9PSAqcCkgeworCXArKzsKKwlpZiAoKnAgPT0gJ1wwJykgewor I2lmZGVmIE9TMgorCSAgICBpZiAoYWRsX3ptb2RlID09IEFETF9QQUNLKSB7CisJCXAgPSBtYXRj aHN0cjsKKwkJZGVidWcoRjEwMCwgInpzdGFydCBabW9kZW0gU09QIiwiIiwwKTsKKwkgICAgfSBl bHNlIHsKKwkJcCA9IGFkbF96c3RyOworCQlkZWJ1ZyhGMTAwLCAienN0YXJ0IFptb2RlbSBTdGFy dCBTdHJpbmciLCIiLDApOworCSAgICB9CisjZWxzZQorCSAgICBwID0gbWF0Y2hzdHI7CisJICAg IGRlYnVnKEYxMDAsICJ6c3RhcnQgWm1vZGVtIFNPUCIsIiIsMCk7CisjZW5kaWYgLyogT1MyICov CisJICAgIHJldHVybihQUk9UT19aICsgMSk7CisJfQorICAgIH0gZWxzZSB7CisjaWZkZWYgT1My CisJcCA9IGFkbF96bW9kZSA9PSBBRExfUEFDSyA/IG1hdGNoc3RyIDogYWRsX3pzdHI7CisjZWxz ZQorCXAgPSBtYXRjaHN0cjsKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICB9CisgICAgcmV0dXJuKDAp OworfQorI2VuZGlmIC8qIENLX1hZWiAqLworCisjaWZuZGVmIE5PSUNQCisjaWZkZWYgQ0tfQVBD CisvKiAgQSBVIFQgTyBEIE8gVyBOICAqLworCisjaWZkZWYgQ0tfQU5TSUMKK1ZPSUQKK2F1dG9k b3duKGludCBjaCkKKyNlbHNlCitWT0lECithdXRvZG93bihjaCkgaW50IGNoOworI2VuZGlmIC8q IENLX0FOU0lDICovCisvKiBhdXRvZG93biAqLyB7CisKKy8qIFRoZSBLZXJtaXQgYW5kIFptb2Rl bSBBdXRvLWRvd25sb2FkIGNhbGxzIGdvIGhlcmUgKi8KKworICAgIGV4dGVybiBpbnQganVzdG9u ZTsJCQkvKiBGcm9tIHByb3RvY29sIG1vZHVsZSAqLworICAgIGV4dGVybiBpbnQgZGVic2VzLCBw cm90b2NvbCwgYXBjYWN0aXZlLCBhdXRvZGwsIGluYXV0b2RsOworI2lmZGVmIERDTURCVUYKKyAg ICBleHRlcm4gY2hhciAqYXBjYnVmOworI2Vsc2UKKyAgICBleHRlcm4gY2hhciBhcGNidWZbXTsK KyNlbmRpZiAvKiBEQ01EQlVGICovCisjaWZkZWYgT1MyCisgICAgZXh0ZXJuIGludCBhcGNsZW5n dGgsIHRlcm1faW87CisjZW5kaWYgLyogT1MyICovCisgICAgaW50IGsgPSAwOworCisgICAgaWYg KChhdXRvZGwgfHwgaW5hdXRvZGwKKyNpZmRlZiBJS1NfT1BUSU9OCisJIHx8IFRFTE9QVF9TQihU RUxPUFRfS0VSTUlUKS5rZXJtaXQubWVfc3RhcnQKKyNlbmRpZiAvKiBJS1NfT1BUSU9OICovCisJ ICkgJiYgIWRlYnNlcykgeworI2lmZGVmIENLX1hZWgorI2lmZGVmIFhZWl9JTlRFUk5BTAorCWV4 dGVybiBpbnQgcF9hdmFpbDsKKyNlbHNlCisJaW50IHBfYXZhaWwgPSAxOworI2VuZGlmIC8qIFhZ Wl9JTlRFUk5BTCAqLworCWlmIChwX2F2YWlsICYmIHpzdGFydCgoQ0hBUikgY2gpKSB7CisJICAg IGRlYnVnKEYxMDAsICJabW9kZW0gZG93bmxvYWQiLCIiLDApOworI2lmZGVmIE9TMgorI2lmbmRl ZiBOT1RFUk0KKyAgICAgICAgICAgIGFwY19jb21tYW5kKEFQQ19MT0NBTCwicmVjZWl2ZSAvcHJv dG9jb2w6em1vZGVtIik7CisjZW5kaWYgLyogTk9URVJNICovCisjZWxzZSAvKiBPUzIgKi8KKyAg ICAgICAgICAgIGNrc3RybmNweShhcGNidWYsInJlY2VpdmUgL3Byb3RvY29sOnptb2RlbSIsQVBD QlVGTEVOKTsKKwkgICAgYXBjYWN0aXZlID0gQVBDX0xPQ0FMOworI2VuZGlmIC8qIE9TMiAqLwor CSAgICByZXR1cm47CisJfQorI2VuZGlmIC8qIENLX1hZWiAqLworCisJLyogRmlyc3QgdHJ5Li4u ICovCisJayA9IGtzdGFydCgoQ0hBUikgY2gpOworCWlmICgKKyNpZmRlZiBOT1NFUlZFUgorCSAg ICBrID4gMAorI2Vsc2UgLyogTk9TRVJWRVIgKi8KKwkgICAgaworI2VuZGlmIC8qIE5PU0VSVkVS ICovCisJICAgICkgewkJCQkvKiBXZSBzYXcgYSB2YWxpZCBTIG9yIEkgcGFja2V0ICovCisJICAg IGlmIChrIDwgMCkgewkJLyogU3R1ZmYgUkVDRUlWRSBpbnRvIEFQQyBidWZmZXIgKi8KKwkJanVz dG9uZSA9IDE7CisJCXN3aXRjaCAocHJvdG9jb2wpIHsKKyNpZmRlZiBDS19YWVoKKwkJICBjYXNl IFBST1RPX0c6CisJCSAgICBja3N0cm5jcHkoYXBjYnVmLAorCQkJICAgICAgInNldCBwcm90byBr ZXJtaXQsIHNlcnZlciwgc2V0IHByb3RvY29sIGciLAorCQkJICAgICAgQVBDQlVGTEVOCisJCQkg ICAgICApOworCQkgICAgYnJlYWs7CisJCSAgY2FzZSBQUk9UT19YOgorCQkgICAgY2tzdHJuY3B5 KGFwY2J1ZiwKKwkJCSAgICAgICJzZXQgcHJvdG8ga2VybWl0LHNlcnZlcixzZXQgcHJvdG8geG1v ZGVtIiwKKwkJCSAgICAgIEFQQ0JVRkxFTgorCQkJICAgICAgKTsKKwkJICAgIGJyZWFrOworICAg ICAgICAgICAgICAgICAgY2FzZSBQUk9UT19YQzoKKwkJICAgIGNrc3RybmNweShhcGNidWYsCisJ CQkgICAic2V0IHByb3RvIGtlcm1pdCxzZXJ2ZXIsc2V0IHByb3RvIHhtb2RlbS1jcmMiLAorCQkJ ICAgICAgQVBDQlVGTEVOCisJCQkgICAgICApOworICAgICAgICAgICAgICAgICAgICAgIGJyZWFr OworCQkgIGNhc2UgUFJPVE9fWToKKwkJICAgIGNrc3RybmNweShhcGNidWYsCisJCQkgICAgICAi c2V0IHByb3RvIGtlcm1pdCxzZXJ2ZXIsIHNldCBwcm90b2NvbCB5IiwKKwkJCSAgICAgIEFQQ0JV RkxFTgorCQkJICAgICAgKTsKKwkJICAgIGJyZWFrOworCQkgIGNhc2UgUFJPVE9fWjoKKwkJICAg IGNrc3RybmNweShhcGNidWYsCisJCQkgICAgICAic2V0IHByb3RvIGtlcm1pdCxzZXJ2ZXIsc2V0 IHByb3RvIHptb2RlbSIsCisJCQkgICAgICBBUENCVUZMRU4KKwkJCSAgICAgICk7CisJCSAgICBi cmVhazsKKyNlbmRpZiAvKiBDS19YWVogKi8KKwkJICBjYXNlIFBST1RPX0s6CisJCSAgICBja3N0 cm5jcHkoYXBjYnVmLCJzZXJ2ZXIiLEFQQ0JVRkxFTik7CisJCSAgICBicmVhazsKKwkJfQorCSAg ICB9IGVsc2UgeworCQlqdXN0b25lID0gMDsKKyAgICAgICAgICAgICAgICBja3N0cm5jcHkoYXBj YnVmLCJyZWNlaXZlIC9wcm90b2NvbDprZXJtaXQiLEFQQ0JVRkxFTik7CisJICAgIH0KKyNpZmRl ZiBPUzIKKyNpZm5kZWYgTk9URVJNCisgICAgICAgICAgICBhcGNfY29tbWFuZChBUENfTE9DQUws YXBjYnVmKTsKKyNlbmRpZiAvKiBOT1RFUk0gKi8KKyNlbHNlIC8qIE9TMiAqLworICAgICAgICAg ICAgY2tzdHJuY3B5KGFwY2J1ZiwicmVjZWl2ZSAvcHJvdG9jb2w6em1vZGVtIixBUENCVUZMRU4p OworCSAgICBhcGNhY3RpdmUgPSBBUENfTE9DQUw7CisjZW5kaWYgLyogT1MyICovCisJICAgIHJl dHVybjsKKwl9CisgICAgfQorfQorI2VuZGlmIC8qIENLX0FQQyAqLworI2VuZGlmIC8qIE5PSUNQ ICovCisKKy8qICBDIEggSyBTIFAgSyBUICAtLSAgQ2hlY2sgaWYgYnVmIGNvbnRhaW5zIGEgdmFs aWQgUyBvciBJIHBhY2tldCAgKi8KKworaW50CitjaGtzcGt0KHBhY2tldCkgY2hhciAqcGFja2V0 OyB7CisgICAgaW50IGk7CisgICAgaW50IGJ1ZmxlbjsKKyAgICBpbnQgbGVuID0gLTE7CisgICAg Q0hBUiBjaGs7CisgICAgY2hhciB0eXBlID0gMDsKKyAgICBjaGFyICpzID0gTlVMTDsKKyAgICBj aGFyICpidWYgPSBOVUxMOworICAgIGNoYXIgdG1wYnVmWzEwMF07CQkJLyogTG9uZ2VzdCBTL0kg cGFja2V0IGlzIGFib3V0IDMwICovCisKKyAgICBpZiAoIXBhY2tldCkgcmV0dXJuKDApOworICAg IGJ1ZmxlbiA9IGNrc3RybmNweSh0bXBidWYscGFja2V0LDEwMCk7IC8qIE1ha2UgYSBwb2tlYWJs ZSBjb3B5ICovCisgICAgaWYgKGJ1ZmxlbiA8IDUpIHJldHVybigwKTsJCS8qIFRvbyBzaG9ydCAq LworICAgIGlmIChidWZsZW4gPiAxMDApIHJldHVybigwKTsgCS8qIFRvbyBsb25nIHRvIGJlIGFu IFMgb3IgSSBwYWNrZXQgKi8KKyAgICBzID0gYnVmID0gdG1wYnVmOwkJCS8qIFBvaW50IHRvIGJl Z2lubmluZyBvZiBjb3B5ICovCisKKyAgICBpZiAoKnMrKyAhPSBzdGNocikgcmV0dXJuKDApOwkv KiBTT0ggKi8KKyAgICBsZW4gPSB4dW5jaGFyKCpzKyspOwkJLyogTGVuZ3RoICovCisgICAgaWYg KGxlbiA8IDApIHJldHVybigwKTsKKyAgICBpZiAoKnMrKyAhPSBTUCkgcmV0dXJuKDApOwkJLyog U2VxdWVuY2UgbnVtYmVyICovCisgICAgdHlwZSA9ICpzKys7CQkJLyogVHlwZSAqLworICAgIGlm ICh0eXBlICE9ICdTJyAmJiB0eXBlICE9ICdJJykKKyAgICAgIHJldHVybigwKTsKKyAgICBpZiAo YnVmbGVuIDwgbGVuICsgMikgcmV0dXJuKDApOworICAgIHMgKz0gKGxlbiAtIDMpOwkJCS8qIFBv c2l0aW9uIG9mIGNoZWNrc3VtICovCisgICAgY2hrID0gKENIQVIpICgqcyk7CQkJLyogQ2hlY2tz dW0gKi8KKyAgICAqcyA9IE5VTDsJCQkgICAvKiBUZW1wb3JhcmlseSBudWxsLXRlcm1pbmF0ZSBk YXRhIGZpZWxkICovCisgICAgaWYgKHh1bmNoYXIoY2hrKSAhPSBjaGsxKChDSEFSICopKGJ1Zisx KSxidWZsZW4tMikpIHsgLyogQ2hlY2sgaXQgKi8KKwkvKgorCSAgSW4gQy1LZXJtaXQgOS4wIGFu ZCBsYXRlciwgYW4gUyBvciBJIHBhY2tldCBjYW4gaGF2ZSBhIAorCSAgVHlwZSAzIEJsb2NrIGNo ZWNrICgiaGVscCBzZXQgYmxvY2stY2hlY2siIGZvciBkZXRhaWxzKS4KKwkqLworCXVuc2lnbmVk IGNyYzsJCQkvKiBGYWlsZWQuLi4gVHJ5IFR5cGUgMyBibG9jayBjaGVjayAqLworCSpzID0gY2hr OwkJCS8qIFJlcGxhY2UgbGFzdCBieXRlICovCisJcyAtPSAyOwkJCQkvKiBCYWNrIHVwIHR3byBi eXRlcyAqLworCWNyYyA9ICh4dW5jaGFyKHNbMF0pIDw8IDEyKQkvKiBDb252ZXJ0IDMgYnl0ZXMg dG8gbnVtZXJpYyBDUkMgKi8KKwkgICAgfCAoeHVuY2hhcihzWzFdKSA8PCA2KQorCSAgICB8ICh4 dW5jaGFyKHNbMl0pKTsKKwljaGsgPSAoQ0hBUikoKnMpOwkJLyogQ29weSAxc3QgYnl0ZSBvZiAz LWJ5dGUgQ1JDICovCisJKnMgPSBOVUw7CQkJLyogTnVsbC10ZXJtaW5hdGUgZGF0YSBmaWVsZCAq LworCWlmIChjcmMgIT0gY2hrMygoQ0hBUiAqKShidWYrMSksc3RybGVuKGJ1ZisxKSkpCisJICBy ZXR1cm4oMCk7CisgICAgfQorICAgIHJldHVybih0eXBlID09ICdTJyA/IDEgOiAyKTsKK30KKyNl bmRpZiAvKiBDS19BVVRPREwgKi8KKworLyogUiBQIEEgQyBLICAtLSAgUmVhZCBhIFBhY2tldCAq LworCisvKgorICBycGFjayByZWFkcyBhIHBhY2tldCBhbmQgcmV0dXJucyB0aGUgcGFja2V0IHR5 cGUsIG9yIGVsc2UgUSBpZiB0aGUKKyAgcGFja2V0IHdhcyBpbnZhbGlkLCBvciBUIGlmIGEgdGlt ZW91dCBvY2N1cnJlZC4gIFVwb24gc3VjY2Vzc2Z1bCByZXR1cm4sCisgIHNldHMgdGhlIHZhbHVl cyBvZiBnbG9iYWwgcnNuIChyZWNlaXZlZCBzZXF1ZW5jZSBudW1iZXIpLCAgcmxuIChyZWNlaXZl ZAorICBkYXRhIGxlbmd0aCksIGFuZCByZGF0YXAgKHBvaW50ZXIgdG8gbnVsbC10ZXJtaW5hdGVk IGRhdGEgZmllbGQpLCBhbmQKKyAgcmV0dXJucyB0aGUgcGFja2V0IHR5cGUuICBOT1RFOiBUaGlz IGlzIGFuIGlubmVyLWxvb3AgZnVuY3Rpb24gc28gbXVzdCBiZQorICBlZmZpY2llbnQuICBQcm90 ZWN0IGZ1bmN0aW9uIGNhbGxzIGJ5IGlmLXRlc3RzIHdoZXJlIHBvc3NpYmxlLCBlLmcuCisgICJp ZiAocGt0bG9nKSBsb2dwa3QoLi4uKTsiLgorKi8KK2ludAorcnBhY2soKSB7CisgICAgcmVnaXN0 ZXIgaW50IGksIGosIHgsIGxwOwkJLyogTG9jYWwgdmFyaWFibGVzICovCisjaWZkZWYgQ0tUVU5J TkcKKyAgICB1bnNpZ25lZCBpbnQgY2hrOworI2VuZGlmIC8qIENLVFVOSU5HICovCisgICAgaW50 IGssIHR5cGUsIGNoa2xlbjsKKyAgICB1bnNpZ25lZCBjcmM7CisgICAgQ0hBUiBwYmNbNV07CQkJ LyogUGFja2V0IGJsb2NrIGNoZWNrICovCisgICAgQ0hBUiAqc29ocDsJCQkJLyogUG9pbnRlciB0 byBTT0ggKi8KKyAgICBDSEFSIGU7CQkJCS8qIFBhY2tldCBlbmQgY2hhcmFjdGVyICovCisKKyNp ZmRlZiBHRlRJTUVSCisgICAgQ0tGTE9BVCB0MSA9IDAuMCwgdDIgPSAwLjA7CisjZW5kaWYgLyog R0ZUSU1FUiAqLworCisgICAgZGVidWcoRjEwMSwicnBhY2sgcGt0bnVtIiwiIixwa3RudW0pOwor CisjaWZuZGVmIE9MRENIS0lOVAorICAgIGlmIChjaGtpbnQoKSA8IDApCQkJLyogQ2hlY2sgZm9y IGNvbnNvbGUgaW50ZXJydXB0cy4gKi8KKyAgICAgIHJldHVybigneicpOworI2VuZGlmIC8qIE9M RENIS0lOVCAqLworCisgICAgayA9IGdldHJidWYoKTsJCQkvKiBHZXQgYSBuZXcgcGFja2V0IGlu cHV0IGJ1ZmZlci4gKi8KKyAgICBkZWJ1ZyhGMTAxLCJycGFjayBnZXRyYnVmIiwiIixrKTsKKyAg ICBpZiAoayA8IDApIHsJCQkvKiBSZXR1cm4gbGlrZSB0aGlzIGlmIG5vbmUgZnJlZS4gKi8KKwly ZXR1cm4oLTEpOworICAgIH0KKyAgICByZWNwa3QgPSByX3BrdFtrXS5iZl9hZHI7CisgICAgKnJl Y3BrdCA9ICdcMCc7CQkJLyogQ2xlYXIgcmVjZWl2ZSBidWZmZXIuICovCisgICAgc29ocCA9IHJl Y3BrdDsJCQkvKiBJbml0aWFsaXplIHBvaW50ZXJzIHRvIGl0LiAqLworICAgIHJkYXRhcCA9IHJl Y3BrdDsKKyAgICByc24gPSBybG4gPSAtMTsJCQkvKiBJbiBjYXNlIG9mIGZhaWx1cmUuICovCisg ICAgZSA9ICh0dXJuKSA/IHR1cm5jaCA6IGVvbDsJCS8qIFVzZSBhbnkgaGFuZHNoYWtlIGNoYXIg Zm9yIGVvbCAqLworCisvKiBUcnkgdG8gZ2V0IGEgImxpbmUiLiAqLworCisjaWZkZWYgQ0tfQVVU T0RMCisgICAgZGVidWcoRjExMCwicnBhY2sga3NidWYiLGtzYnVmLDApOworICAgIGlmIChrc2J1 ZlswXSkgewkJCS8qIEtlcm1pdCBwYWNrZXQgYWxyZWFkeSAqLworCWludCB4OwkJCQkvKiBjb2xs ZWN0ZWQgZm9yIHVzIGluIENPTk5FQ1QgbW9kZSAqLworCUNIQVIgKnMxID0gcmVjcGt0LCAqczIg PSBrc2J1ZjsKKwlqID0gMDsKKwl3aGlsZSAoKnMyKSB7CQkJLyogQ29weSBhbmQgZ2V0IGxlbmd0 aCAqLworCSAgICAqczErKyA9ICpzMisrOwkJLyogTm8gcG9pbnQgb3B0aW1pemluZyB0aGlzIHNp bmNlICovCisJICAgIGorKzsJCQkvKiBpdCdzIG5ldmVyIG1vcmUgdGhhbiB+MjAgY2hhcnMgKi8K Kwl9CisJKnMxID0gTlVMOworI2lmZGVmIFBBUlNFTlNFCisJeCA9IHBhcmNoayhyZWNwa3QsIHN0 Y2hyLCBqKTsJLyogQ2hlY2sgcGFyaXR5ICovCisJZGVidWcoRjAwMCwiYXV0b2Rvd25sb2FkIHBh cml0eSIsIiIscGFyaXR5KTsKKwlkZWJ1ZyhGMDAwLCJhdXRvZG93bmxvYWQgcGFyY2hrIiwiIix4 KTsKKwlpZiAoeCA+IDAgJiYgcGFyaXR5ICE9IHgpIHsKKwkgICAgYXV0b3BhciA9IDE7CisJICAg IHBhcml0eSA9IHg7CisJfQorI2VuZGlmIC8qIFBBUlNFTlNFICovCisJa3NidWZbMF0gPSBOVUw7 CQkJLyogRG9uJ3QgZG8gdGhpcyBuZXh0IHRpbWUhICovCisKKyAgICB9IGVsc2UgewkJCQkvKiBO b3JtYWxseSBnbyByZWFkIGEgcGFja2V0ICovCisjZW5kaWYgLyogQ0tfQVVUT0RMICovCisKKyNp ZmRlZiBERUJVRworCWlmIChkZWJsb2cpIHsKKwkgICAgZGVidWcoRjEwMSwicnBhY2sgdGltaW50 IiwiIix0aW1pbnQpOworCSAgICBkZWJ1ZyhGMTAxLCJycGFjayByY3Z0aW1vIiwiIixyY3Z0aW1v KTsKKyNpZmRlZiBTVFJFQU1JTkcKKwkgICAgZGVidWcoRjEwMSwicnBhY2sgc3RyZWFtaW5nIiwi IixzdHJlYW1pbmcpOworI2VuZGlmIC8qIFNUUkVBTUlORyAqLworI2lmZGVmIEdGVElNRVIKKwkg ICAgLyogTWVhc3VyZSBob3cgbG9uZyBpdCB0YWtlcyB0byByZWFkIGEgcGFja2V0ICovCisJICAg IHQxID0gZ2Z0aW1lcigpOworI2VuZGlmIC8qIEdGVElNRVIgKi8KKwl9CisjZW5kaWYgLyogREVC VUcgKi8KKworLyogSlVTVCBJTiBDQVNFIChvdGhlcndpc2UgdGhpcyBjb3VsZCBjbG9iYmVyIHN0 cmVhbWluZykgKi8KKworCWlmICgodGltaW50ID09IDAKKyNpZmRlZiBTVFJFQU1JTkcKKwkgICAg IHx8IHN0cmVhbWluZworI2VuZGlmIC8qIFNUUkVBTUlORyAqLworCSAgICAgKSAmJiAocmN2dGlt byAhPSAwKSkgeworCSAgICBkZWJ1ZyhGMTAxLCJycGFjayB0aW1pbnQgMCB8fCBzdHJlYW1pbmcg YnV0IHJjdnRpbW8iLCIiLHJjdnRpbW8pOworCSAgICByY3Z0aW1vID0gMDsKKwl9CisKKyNpZmRl ZiBQQVJTRU5TRQorI2lmZGVmIFVOSVgKKy8qCisgIFNvIGZhciB0aGUgZmluYWwgdHVybiBhcmd1 bWVudCBpcyBvbmx5IGZvciBja1t1dmRsXXRpby5jLiAgU2hvdWxkIGJlIGFkZGVkCisgIHRvIHRo ZSBvdGhlcnMgdG9vLiAgKHR1cm4gPT0gaGFuZHNoYWtlIGNoYXJhY3Rlci4pCisqLworCWogPSB0 dGlubChyZWNwa3Qscl9wa3Rba10uYmZfbGVuIC0gMSxyY3Z0aW1vLGUsc3RjaHIsdHVybik7Cisj ZWxzZQorI2lmZGVmIFZNUworCWogPSB0dGlubChyZWNwa3Qscl9wa3Rba10uYmZfbGVuIC0gMSxy Y3Z0aW1vLGUsc3RjaHIsdHVybik7CisjZWxzZQorI2lmZGVmIGRhdGFnZW5lcmFsCisJaiA9IHR0 aW5sKHJlY3BrdCxyX3BrdFtrXS5iZl9sZW4gLSAxLHJjdnRpbW8sZSxzdGNocix0dXJuKTsKKyNl bHNlCisjaWZkZWYgU1RSQVRVUworCWogPSB0dGlubChyZWNwa3Qscl9wa3Rba10uYmZfbGVuIC0g MSxyY3Z0aW1vLGUsc3RjaHIsdHVybik7CisjZWxzZQorI2lmZGVmIE9TMgorCWogPSB0dGlubChy ZWNwa3Qscl9wa3Rba10uYmZfbGVuIC0gMSxyY3Z0aW1vLGUsc3RjaHIsdHVybik7CisjZWxzZQor I2lmZGVmIE9TSworCWogPSB0dGlubChyZWNwa3Qscl9wa3Rba10uYmZfbGVuIC0gMSxyY3Z0aW1v LGUsc3RjaHIsdHVybik7CisjZWxzZQorCWogPSB0dGlubChyZWNwa3Qscl9wa3Rba10uYmZfbGVu IC0gMSxyY3Z0aW1vLGUsc3RjaHIpOworI2VuZGlmIC8qIE9TSyAqLworI2VuZGlmIC8qIE9TMiAq LworI2VuZGlmIC8qIFNUUkFUVVMgKi8KKyNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLworI2VuZGlm IC8qIFZNUyAqLworI2VuZGlmIC8qIFVOSVggKi8KKwlpZiAocGFyaXR5ICE9IDAgJiYgcGFyaXR5 ICE9ICdzJyAmJiB0dHBydHkgIT0gMCkgeworCSAgICBpZiAocGFyaXR5ICE9IHR0cHJ0eSkgYXV0 b3BhciA9IDE7CisJICAgIHBhcml0eSA9IHR0cHJ0eTsKKwl9CisjZWxzZSAvKiAhUEFSU0VOU0Ug Ki8KKwlqID0gdHRpbmwocmVjcGt0LHJfcGt0W2tdLmJmX2xlbiAtIDEscmN2dGltbyxlKTsKKyNl bmRpZiAvKiBQQVJTRU5TRSAqLworCisjaWZkZWYgREVCVUcKKwlpZiAoZGVibG9nKSAgeworCSAg ICBkZWJ1ZyhGMTAxLCJycGFjayB0dGlubCBsZW4iLCIiLGopOworI2lmZGVmIEdGVElNRVIKKwkg ICAgdDIgPSBnZnRpbWVyKCk7CisJICAgIGRlYnVnKEYxMDEsInJwYWNrIHR0aW5sIG1zZWMiLCIi LChsb25nKSgodDItdDEpKjEwMDAuMCkpOworI2VuZGlmIC8qIEdGVElNRVIgKi8KKwl9CisjZW5k aWYgLyogREVCVUcgKi8KKworI2lmZGVmIFNUUkVBTUlORworICAgIGlmIChzdHJlYW1pbmcgJiYg c25kdHlwID09ICdEJyAmJiBqID09IDApCisgICAgICAgIHJldHVybignWScpOworI2VuZGlmIC8q IFNUUkVBTUlORyAqLworCisJaWYgKGogPCAwKSB7CisJICAgIC8qIC0xID09IHRpbWVvdXQsIC0y ID09IF5DLCAtMyA9PSBjb25uZWN0aW9uIGxvc3Qgb3IgZmF0YWwgaS9vICovCisJICAgIGRlYnVn KEYxMDEsInJwYWNrOiB0dGlubCBmYWlscyIsIiIsaik7IC8qIE90aGVyd2lzZSwgKi8KKwkgICAg ZnJlZXJidWYoayk7CQkvKiBGcmVlIHRoaXMgYnVmZmVyICovCisJICAgIGlmIChqIDwgLTEpIHsJ CS8qIEJhaWwgb3V0IGlmIF5DXkMgdHlwZWQuICovCisJCWlmIChqID09IC0yKSB7CisJCSAgICBp bnRlcnJ1cHRlZCA9IDE7CisJCSAgICBkZWJ1ZyhGMTAxLCJycGFjayBeQyBzZXJ2ZXIiLCIiLHNl cnZlcik7CisJCSAgICBkZWJ1ZyhGMTAxLCJycGFjayBeQyBlbl9maW4iLCIiLGVuX2Zpbik7CisJ CX0gZWxzZSBpZiAoaiA9PSAtMykgeworCQkgICAgZmF0YWxpbyA9IDE7CisJCSAgICBkZWJ1ZyhG MTAxLCJycGFjayBmYXRhbGlvIiwiIixlbl9maW4pOworCQl9CisJCXJldHVybihqKTsKKwkgICAg fQorCSAgICBpZiAobmFrc3RhdGUpCQkvKiBqID09IC0xIGlzIGEgcmVhZCB0aW1lb3V0ICovCisJ ICAgICAgeHhzY3JlZW4oU0NSX1BULCdUJywobG9uZyl3aW5sbywiIik7CisJICAgIGVsc2UKKwkg ICAgICB4eHNjcmVlbihTQ1JfUFQsJ1QnLChsb25nKXBrdG51bSwiIik7CisJICAgIGxvZ3BrdCgn cicsLTEsKENIQVIgKikiPHRpbWVvdXQ+IiwwKTsKKwkgICAgaWYgKGZsb3cgPT0gMSkgdHRvYyhY T04pOwkvKiBJbiBjYXNlIG9mIFhvZmYgYmxvY2thZ2UuICovCisJICAgIHJldHVybignVCcpOwor CX0KKyNpZmRlZiBDS19BVVRPREwKKyAgICB9CisjZW5kaWYgLyogQ0tfQVVUT0RMICovCisKKyAg ICBycGt0bCA9IGo7CisgICAgdGxjaSArPSBqOwkJCQkvKiBBbGwgT0ssIENvdW50IHRoZSBjaGFy YWN0ZXJzLiAqLworICAgIGZsY2kgKz0gajsKKworLyogRmluZCBzdGFydCBvZiBwYWNrZXQgKi8K KworI2lmbmRlZiBQQVJTRU5TRQorICAgIGZvciAoaSA9IDA7IChyZWNwa3RbaV0gIT0gc3RjaHIp ICYmIChpIDwgaik7IGkrKykKKyAgICAgIHNvaHArKzsJCQkJLyogRmluZCBtYXJrICovCisgICAg aWYgKGkrKyA+PSBqKSB7CQkJLyogRGlkbid0IGZpbmQgaXQuICovCisJbG9ncGt0KCdyJywtMSwi PHRpbWVvdXQ+IiwwKTsKKwlmcmVlcmJ1ZihrKTsKKwlyZXR1cm4oJ1QnKTsKKyAgICB9CisjZWxz ZQorICAgIGkgPSAxOwkJCQkvKiB0dGlubCBkb2VzIHRoaXMgZm9yIHVzICovCisjZW5kaWYgLyog UEFSU0VOU0UgKi8KKworICAgIHJwYWNrZXRzKys7CQkJCS8qIENvdW50IHJlY2VpdmVkIHBhY2tl dC4gKi8KKyAgICBscCA9IGk7CQkJCS8qIFJlbWVtYmVyIExFTiBwb3NpdGlvbi4gKi8KKyAgICBp ZiAoKGogPSB4dW5jaGFyKHJlY3BrdFtpKytdKSkgPT0gMCkgeyAvKiBHZXQgcGFja2V0IGxlbmd0 aC4gICovCisgICAgICAgIGlmICgoaiA9IGxwKzUpID4gTUFYUlApIHsJLyogTG9uZyBwYWNrZXQg Ki8KKwkgICAgcmV0dXJuKCdRJyk7CQkvKiBUb28gbG9uZyAqLworCX0KKworI2lmZGVmIENLVFVO SU5HCisJLyogU2F2ZSBzb21lIGZ1bmN0aW9uLWNhbGwgYW5kIGxvb3Agb3ZlcmhlYWQuLi4gKi8K KyNpZmRlZiBDT01NRU5UCisJLyogdHRpbmwoKSBhbHJlYWR5IHJlbW92ZWQgcGFyaXR5ICovCisJ aWYgKHBhcml0eSkKKyNlbmRpZiAvKiBDT01NRU5UICovCisJICBjaGsgPSAodW5zaWduZWQpICgo dW5zaWduZWQpIHJlY3BrdFtpLTFdICsKKwkJCSAgICAodW5zaWduZWQpIHJlY3BrdFtpXSAgICsK KwkJCSAgICAodW5zaWduZWQpIHJlY3BrdFtpKzFdICsKKwkJCSAgICAodW5zaWduZWQpIHJlY3Br dFtpKzJdICsKKwkJCSAgICAodW5zaWduZWQpIHJlY3BrdFtpKzNdCisJCQkgICAgKTsKKyNpZmRl ZiBDT01NRU5UCisJZWxzZQorCSAgY2hrID0gKHVuc2lnbmVkKSAoKHVuc2lnbmVkKSAocmVjcGt0 W2ktMV0gJiAwNzcpICsKKwkJCSAgICAodW5zaWduZWQpIChyZWNwa3RbaV0gICAmIDA3NykgKwor CQkJICAgICh1bnNpZ25lZCkgKHJlY3BrdFtpKzFdICYgMDc3KSArCisJCQkgICAgKHVuc2lnbmVk KSAocmVjcGt0W2krMl0gJiAwNzcpICsKKwkJCSAgICAodW5zaWduZWQpIChyZWNwa3RbaSszXSAm IDA3NykKKwkJCSAgICApOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKwlpZiAoeHVuY2hhcihyZWNw a3Rbal0pICE9ICgoKChjaGsgJiAwMzAwKSA+PiA2KSArIGNoaykgJiAwNzcpKQorI2Vsc2UKKwl4 ID0gcmVjcGt0W2pdOwkJCS8qIEhlYWRlciBjaGVja3N1bS4gKi8KKwlyZWNwa3Rbal0gPSAnXDAn OwkJLyogQ2FsY3VsYXRlICYgY29tcGFyZS4gKi8KKwlpZiAoeHVuY2hhcih4KSAhPSBjaGsxKHJl Y3BrdCtscCw1KSkKKyNlbmRpZiAvKiBDS1RVTklORyAqLworCSAgeworCSAgICAgIGZyZWVyYnVm KGspOworCSAgICAgIGxvZ3BrdCgncicsLTEsKENIQVIgKikiPGNydW5jaGVkOmhkcj4iLDApOwor CSAgICAgIHh4c2NyZWVuKFNDUl9QVCwnJScsKGxvbmcpcGt0bnVtLCJCYWQgcGFja2V0IGhlYWRl ciIpOworCSAgICAgIHJldHVybignUScpOworCSAgfQorI2lmbmRlZiBDS1RVTklORworCXJlY3Br dFtqXSA9IHg7CQkJLyogQ2hlY2tzdW0gb2ssIHB1dCBpdCBiYWNrLiAqLworI2VuZGlmIC8qIENL VFVOSU5HICovCisJcmxuID0geHVuY2hhcihyZWNwa3Rbai0yXSkgKiA5NSArIHh1bmNoYXIocmVj cGt0W2otMV0pIC0gYmN0bDsKKwlqID0gMzsJCQkJLyogRGF0YSBvZmZzZXQuICovCisgICAgfSBl bHNlIGlmIChqIDwgMykgeworCWRlYnVnKEYxMDEsInJwYWNrIHBhY2tldCBsZW5ndGggbGVzcyB0 aGFuIDMiLCIiLGopOworCWZyZWVyYnVmKGspOworCWxvZ3BrdCgncicsLTEsKENIQVIgKikiPGNy dW5jaGVkOmxlbj4iLDApOworCXh4c2NyZWVuKFNDUl9QVCwnJScsKGxvbmcpcGt0bnVtLCJCYWQg cGFja2V0IGxlbmd0aCIpOworCXJldHVybignUScpOworICAgIH0gZWxzZSB7CisJcmxuID0gaiAt IGJjdGwgLSAyOwkJLyogUmVndWxhciBwYWNrZXQgKi8KKwlqID0gMDsJCQkJLyogTm8gZXh0ZW5k ZWQgaGVhZGVyICovCisgICAgfQorICAgIHJzbiA9IHh1bmNoYXIocmVjcGt0W2krK10pOwkJLyog U2VxdWVuY2UgbnVtYmVyICovCisgICAgaWYgKHBrdGxvZykJCQkJLyogU2F2ZSBhIGZ1bmN0aW9u IGNhbGwhICovCisgICAgICBsb2dwa3QoJ3InLHJzbixzb2hwLHJsbitiY3RsK2orNCk7CisgICAg aWYgKHJzbiA8IDAgfHwgcnNuID4gNjMpIHsKKwlkZWJ1ZyhGMTAxLCJycGFjayBiYWQgc2VxdWVu Y2UgbnVtYmVyIiwiIixyc24pOworCWZyZWVyYnVmKGspOworCWlmIChwa3Rsb2cpCisJICBsb2dw a3QoJ3InLHJzbiwoQ0hBUiAqKSI8Y3J1bmNoZWQ6c2VxPiIsMCk7CisJeHhzY3JlZW4oU0NSX1BU LCclJywobG9uZylwa3RudW0sIkJhZCBzZXF1ZW5jZSBudW1iZXIiKTsKKwlyZXR1cm4oJ1EnKTsK KyAgICB9CisvKgorICBJZiB0aGlzIHBhY2tldCBoYXMgdGhlIHNhbWUgdHlwZSBhcyB0aGUgcGFj a2V0IGp1c3Qgc2VudCwgYXNzdW1lIGl0IGlzCisgIGFuIGVjaG8gYW5kIGlnbm9yZSBpdC4gIERv bid0IGV2ZW4gYm90aGVyIHdpdGggdGhlIGJsb2NrIGNoZWNrIGNhbGN1bGF0aW9uOgorICBldmVu IGlmIHRoZSBwYWNrZXQgaXMgY29ycnVwdGVkLCB3ZSBkb24ndCB3YW50IHRvIE5BSyBhbiBlY2hv ZWQgcGFja2V0LgorICBOb3IgbXVzdCB3ZSBOQUsgYW4gQUNLIG9yIE5BSy4KKyovCisgICAgdHlw ZSA9IHJlY3BrdFtpKytdOwkJCS8qIEdldCBwYWNrZXQncyBUWVBFIGZpZWxkICovCisgICAgaWYg KHR5cGUgPT0gc25kdHlwIHx8IChuYWtzdGF0ZSAmJiAodHlwZSA9PSAnTicgLyogfHwgdHlwZSA9 PSAnWScgKi8gKSkpIHsKKwlkZWJ1ZyhGMDAwLCJycGFjayBlY2hvIiwiIix0eXBlKTsgLyogSWYg aXQncyBhbiBlY2hvICovCisJZnJlZXJidWYoayk7CQkJLyogRnJlZSB0aGlzIGJ1ZmZlciAqLwor CWxvZ3BrdCgnIycscnNuLChDSEFSICopIjxlY2hvOmlnbm9yZWQ+IiwwKTsKKwlyZXR1cm4oJ2Un KTsJCQkvKiBSZXR1cm4gc3BlY2lhbCAobG93ZXJjYXNlKSBjb2RlICovCisgICAgfQorLyoKKyAg U2VwYXJhdGUgdGhlIGRhdGEgZnJvbSB0aGUgYmxvY2sgY2hlY2ssIGFjY291bnRpbmcgZm9yIHRo ZSBjYXNlIHdoZXJlCisgIGEgcGFja2V0IHdhcyByZXRyYW5zbWl0dGVkIGFmdGVyIHRoZSBibG9j ayBjaGVjayBzd2l0Y2hlZC4gIFRoZSAiVHlwZSAzCisgIEZvcmNlZCIgYnVzaW5lc3MgaXMgbmV3 IHRvIEMtS2VybWl0IDkuMC4KKyovCisgICAgaWYgKGJjdGYpIHsgCQkJLyogVHlwZSAzIGZvcmNl ZCBvbiBhbGwgcGFja2V0cyAqLworCWJjdGwgPSBjaGtsZW4gPSAzOworICAgIH0gZWxzZSBpZiAo KHR5cGUgPT0gJ0knIHx8IHR5cGUgPT0gJ1MnKSkgeyAvKiBPdGhlcndpc2UuLi4gKi8KKwlpZiAo cmVjcGt0WzExXSA9PSAnNScpIHsJLyogU2VuZGVyIGlzIGZvcmNpbmcgVHlwZSAzICovCisJICAg IGJjdGYgPSAxOwkJCS8qIFNvIHdlIHdpbGwgdG9vICovCisJICAgIGJjdGwgPSBjaGtsZW4gPSAz OworCSAgICBkZWJ1ZyhGMTAwLCJSRUNPR05JWkUgQkxPQ0sgQ0hFQ0sgVFlQRSA1IiwiIiwwKTsK Kwl9IGVsc2UgewkJCS8qIE5vcm1hbCBjYXNlICovCisJICAgIC8qIEkgJiBTIHBhY2tldHMgYWx3 YXlzIGhhdmUgdHlwZSAxICovCisJICAgIGNoa2xlbiA9IDE7CisJICAgIHJsbiA9IHJsbiArIGJj dGwgLSAxOworCX0KKyAgICB9IGVsc2UgaWYgKHR5cGUgPT0gJ04nKSB7CQkvKiBBIE5BSyBwYWNr ZXQgbmV2ZXIgaGFzIGRhdGEgKi8KKwljaGtsZW4gPSB4dW5jaGFyKHJlY3BrdFtscF0pIC0gMjsK KwlpZiAoY2hrbGVuIDwgMSB8fCBjaGtsZW4gPiAzKSB7CS8qIEpIRCAxMyBBcHIgMjAxMCAqLwor CSAgICBkZWJ1ZyhGMTAxLCJycGFjayBiYWQgbmFrIGNoa2xlbiIsIiIsY2hrbGVuKTsKKwkgICAg ZnJlZXJidWYoayk7CisJICAgIGxvZ3BrdCgncicsLTEsKENIQVIgKikiPGNydW5jaGVkOmNoa2xl bj4iLDApOworCSAgICB4eHNjcmVlbihTQ1JfUFQsJyUnLChsb25nKXBrdG51bSwiKGJhZCBuYWsp Iik7CisJICAgIHJldHVybignUScpOworCX0KKwlybG4gPSBybG4gKyBiY3RsIC0gY2hrbGVuOwor ICAgIH0gZWxzZSBjaGtsZW4gPSBiY3RsOworI2lmZGVmIERFQlVHCisgICAgaWYgKGRlYmxvZykg ewkJCS8qIFNhdmUgMiBmdW5jdGlvbiBjYWxscyAqLworCWRlYnVnKEYxMDEsInJwYWNrIGJjdGwi LCIiLGJjdGwpOworCWRlYnVnKEYxMDEsInJwYWNrIGNoa2xlbiIsIiIsY2hrbGVuKTsKKyAgICB9 CisjZW5kaWYgLyogREVCVUcgKi8KKyAgICBpICs9IGo7CQkJCS8qIEJ1ZmZlciBpbmRleCBvZiBE QVRBIGZpZWxkICovCisgICAgcmRhdGFwID0gcmVjcGt0K2k7CQkJLyogUG9pbnRlciB0byBEQVRB IGZpZWxkICovCisgICAgaWYgKChqID0gcmxuICsgaSkgPiByX3BrdFtrXS5iZl9sZW4pIHsgLyog TWFrZSBzdXJlIGl0IGZpdHMgKi8KKwlkZWJ1ZyhGMTAxLCJwYWNrZXQgdG9vIGxvbmciLCIiLGop OworCWZyZWVyYnVmKGspOworCWxvZ3BrdCgncicscnNuLChDSEFSICopIjxvdmVyZmxvdz4iLDAp OworCXJldHVybignUScpOworICAgIH0KKyAgICBmb3IgKHggPSAwOyB4IDwgY2hrbGVuOyB4Kysp CS8qIENvcHkgdGhlIGJsb2NrIGNoZWNrICovCisgICAgICBwYmNbeF0gPSByZWNwa3Rbait4XTsJ CS8qIDMgYnl0ZXMgYXQgbW9zdC4gKi8KKyAgICBwYmNbeF0gPSAnXDAnOwkJCS8qIE51bGwtdGVy bWluYXRlIGJsb2NrIGNoZWNrIHN0cmluZyAqLworICAgIHJlY3BrdFtqXSA9ICdcMCc7CQkJLyog YW5kIHRoZSBwYWNrZXQgRGF0YSBmaWVsZC4gKi8KKworICAgIGlmIChjaGtsZW4gPT0gMiAmJiBi Y3R1ID09IDQpIHsJLyogQWRqdXN0IGZvciBCbGFuay1GcmVlLTIgKi8KKwljaGtsZW4gPSA0OwkJ CS8qIChjaGtsZW4gaXMgbm93IGEgbWlzbm9tZXIuLi4pICovCisJZGVidWcoRjEwMCwicnBhY2sg YmxvY2sgY2hlY2sgQiIsIiIsMCk7CisgICAgfQorICAgIHN3aXRjaCAoY2hrbGVuKSB7CQkJLyog Q2hlY2sgdGhlIGJsb2NrIGNoZWNrICovCisgICAgICBjYXNlIDE6CQkJCS8qIFR5cGUgMSwgNi1i aXQgY2hlY2tzdW0gKi8KKwlpZiAoeHVuY2hhcigqcGJjKSAhPSBjaGsxKHJlY3BrdCtscCxqLWxw KSkgeworI2lmZGVmIERFQlVHCisJICAgIGlmIChkZWJsb2cpIHsKKwkJZGVidWcoRjExMCwiY2hl Y2tlZCBjaGFycyIscmVjcGt0K2xwLDApOworCQlkZWJ1ZyhGMTAxLCJibG9jayBjaGVjayAoMSki LCIiLChpbnQpIHh1bmNoYXIoKnBiYykpOworCQlkZWJ1ZyhGMTAxLCJzaG91bGQgYmUgKDEpIiwi IixjaGsxKHJlY3BrdCtscCxqLWxwKSk7CisJICAgIH0KKyNlbmRpZiAvKiBERUJVRyAqLworCSAg ICBmcmVlcmJ1ZihrKTsKKwkgICAgbG9ncGt0KCdyJywtMSwoQ0hBUiAqKSI8Y3J1bmNoZWQ6Y2hr MT4iLDApOworCSAgICB4eHNjcmVlbihTQ1JfUFQsJyUnLChsb25nKXBrdG51bSwiQ2hlY2tzdW0g ZXJyb3IiKTsKKwkgICAgcmV0dXJuKCdRJyk7CisJfQorCWJyZWFrOworICAgICAgY2FzZSAyOgkJ CQkvKiBUeXBlIDIsIDEyLWJpdCBjaGVja3N1bSAqLworCXggPSB4dW5jaGFyKCpwYmMpIDw8IDYg fCB4dW5jaGFyKHBiY1sxXSk7CisJaWYgKHggIT0gY2hrMihyZWNwa3QrbHAsai1scCkpIHsgLyog Tm8gbWF0Y2ggKi8KKwkgICAgaWYgKHR5cGUgPT0gJ0UnKSB7CQkvKiBBbGxvdyBFIHBhY2tldHMg dG8gaGF2ZSB0eXBlIDEgKi8KKwkJcmVjcGt0W2orK10gPSBwYmNbMF07CisJCXJlY3BrdFtqXSA9 ICdcMCc7CisJCWlmICh4dW5jaGFyKHBiY1sxXSkgPT0gY2hrMShyZWNwa3QrbHAsai1scCkpCisJ CSAgYnJlYWs7CisJCWVsc2UKKwkJICByZWNwa3RbLS1qXSA9ICdcMCc7CisJICAgIH0KKyNpZmRl ZiBERUJVRworCSAgICBpZiAoZGVibG9nKSB7CisJCWRlYnVnKEYxMTAsImNoZWNrZWQgY2hhcnMi LHJlY3BrdCtscCwwKTsKKwkJZGVidWcoRjEwMSwiYmxvY2sgY2hlY2sgKDIpIiwiIiwgeCk7CisJ CWRlYnVnKEYxMDEsInNob3VsZCBiZSAoMikiLCIiLCAoaW50KSBjaGsyKHJlY3BrdCtscCxqLWxw KSk7CisJICAgIH0KKyNlbmRpZiAvKiBERUJVRyAqLworCSAgICBmcmVlcmJ1ZihrKTsKKwkgICAg bG9ncGt0KCdyJywtMSwoQ0hBUiAqKSI8Y3J1bmNoZWQ6Y2hrMj4iLDApOworCSAgICB4eHNjcmVl bihTQ1JfUFQsJyUnLChsb25nKXBrdG51bSwiQ2hlY2tzdW0gZXJyb3IiKTsKKwkgICAgcmV0dXJu KCdRJyk7CisJfQorCWJyZWFrOworICAgICAgY2FzZSAzOgkJCQkvKiBUeXBlIDMsIDE2LWJpdCBD UkMgKi8KKwljcmMgPSAoeHVuY2hhcihwYmNbMF0pIDw8IDEyKQorCSAgICB8ICh4dW5jaGFyKHBi Y1sxXSkgPDwgNikKKwkgICAgfCAoeHVuY2hhcihwYmNbMl0pKTsKKwlpZiAoY3JjICE9IGNoazMo cmVjcGt0K2xwLGotbHApKSB7CisJICAgIGlmICh0eXBlID09ICdFJykgewkJLyogQWxsb3cgRSBw YWNrZXRzIHRvIGhhdmUgdHlwZSAxICovCisJCXJlY3BrdFtqKytdID0gcGJjWzBdOworCQlyZWNw a3RbaisrXSA9IHBiY1sxXTsKKwkJcmVjcGt0W2pdID0gJ1wwJzsKKwkJaWYgKHh1bmNoYXIocGJj WzJdKSA9PSBjaGsxKHJlY3BrdCtscCxqLWxwKSkKKwkJICBicmVhazsKKwkJZWxzZSB7IGogLT0y OyByZWNwa3Rbal0gPSAnXDAnOyB9CisJICAgIH0KKyNpZmRlZiBERUJVRworCSAgICBpZiAoZGVi bG9nKSB7CisJCWRlYnVnKEYxMTAsImNoZWNrZWQgY2hhcnMiLHJlY3BrdCtscCwwKTsKKwkJZGVi dWcoRjEwMSwiYmxvY2sgY2hlY2sgKDMpIiwiIixjcmMpOworCQlkZWJ1ZyhGMTAxLCJzaG91bGQg YmUgKDMpIiwiIiwoaW50KSBjaGszKHJlY3BrdCtscCxqLWxwKSk7CisJICAgIH0KKyNlbmRpZiAv KiBERUJVRyAqLworCSAgICBmcmVlcmJ1ZihrKTsKKwkgICAgbG9ncGt0KCdyJywtMSwoQ0hBUiAq KSI8Y3J1bmNoZWQ6Y2hrMz4iLDApOworCSAgICB4eHNjcmVlbihTQ1JfUFQsJyUnLChsb25nKXBr dG51bSwiQ1JDIGVycm9yIik7CisJICAgIHJldHVybignUScpOworCX0KKwlicmVhazsKKyAgICAg IGNhc2UgNDoJCQkJLyogVHlwZSA0ID0gVHlwZSAyLCBubyBibGFua3MuICovCisJeCA9ICh1bnNp Z25lZCkoKHh1bmNoYXIoKnBiYykgLSAxKSA8PCA2KSB8CisJICAodW5zaWduZWQpKHh1bmNoYXIo cGJjWzFdKSAtIDEpOworCWlmICh4ICE9IGNoazIocmVjcGt0K2xwLGotbHApKSB7CisJICAgIGlm ICh0eXBlID09ICdFJykgewkvKiBBbGxvdyBFIHBhY2tldHMgdG8gaGF2ZSB0eXBlIDEgKi8KKwkJ cmVjcGt0W2orK10gPSBwYmNbMF07CisJCXJlY3BrdFtqXSA9ICdcMCc7CisJCWlmICh4dW5jaGFy KHBiY1sxXSkgPT0gY2hrMShyZWNwa3QrbHAsai1scCkpCisJCSAgYnJlYWs7CisJCWVsc2UKKwkJ ICByZWNwa3RbLS1qXSA9ICdcMCc7CisJICAgIH0KKwkgICAgZGVidWcoRjEwMSwiYmFkIHR5cGUg QiBibG9jayBjaGVjayIsIiIseCk7CisJICAgIGZyZWVyYnVmKGspOworCSAgICBsb2dwa3QoJ3In LC0xLChDSEFSICopIjxjcnVuY2hlZDpjaGtiPiIsMCk7CisJICAgIHh4c2NyZWVuKFNDUl9QVCwn JScsKGxvbmcpcGt0bnVtLCJDaGVja3N1bSBlcnJvciIpOworCSAgICByZXR1cm4oJ1EnKTsKKwl9 CisJYnJlYWs7CisgICAgICBkZWZhdWx0OgkJCS8qIFNob3VsZG4ndCBoYXBwZW4uLi4gKi8KKwlm cmVlcmJ1ZihrKTsKKwlsb2dwa3QoJ3InLC0xLChDSEFSICopIjxjcnVuY2hlZDpjaGt4PiIsMCk7 CisJeHhzY3JlZW4oU0NSX1BULCclJywobG9uZylwa3RudW0sIihjcnVuY2hlZCkiKTsKKwlyZXR1 cm4oJ1EnKTsKKyAgICB9CisgICAgZGVidWcoRjEwMSwicnBhY2sgYmxvY2sgY2hlY2sgT0siLCIi LHJzbik7CisKKy8qIE5vdyB3ZSBjYW4gYmVsaWV2ZSB0aGUgc2VxdWVuY2UgbnVtYmVyLCBhbmQg b3RoZXIgZmllbGRzLiAqLworLyogSGVyZSB3ZSB2aW9sYXRlIHN0cmljdCBwcmluY2lwbGVzIG9m IGxheWVyaW5nLCBldGMsIGFuZCBsb29rIGF0IHRoZSAgKi8KKy8qIHBhY2tldCBzZXF1ZW5jZSBu dW1iZXIuICBJZiB0aGVyZSdzIGFscmVhZHkgYSBwYWNrZXQgd2l0aCB0aGUgc2FtZSAgICovCisv KiBudW1iZXIgaW4gdGhlIHdpbmRvdywgd2UgcmVtb3ZlIHRoaXMgb25lIHNvIHRoYXQgdGhlIHdp bmRvdyB3aWxsIG5vdCAqLworLyogZmlsbCB1cC4gKi8KKworICAgIGlmICgoeCA9IHJzZXF0Ymxb cnNuXSkgIT0gLTEpIHsJLyogQWxyZWFkeSBhIHBhY2tldCB3aXRoIHRoaXMgbnVtYmVyICovCisJ cmV0cmFucysrOwkJCS8qIENvdW50IGl0IGZvciBzdGF0aXN0aWNzICovCisJZGVidWcoRjEwMSwi cnBhY2sgZ290IGR1cCIsIiIscnNuKTsKKwlsb2dwa3QoJ3InLHJzbiwoQ0hBUiAqKSI8ZHVwbGlj YXRlPiIsMCk7CisJZnJlZXJidWYoeCk7CQkJLyogRnJlZSBvbGQgYnVmZmVyLCBrZWVwIG5ldyBw YWNrZXQuICovCisJcl9wa3Rba10ucGtfcnRyKys7CQkvKiBDb3VudCB0aGlzIGFzIGEgcmV0cmFu c21pc3Npb24uICovCisgICAgfQorCisvKiBOZXcgcGFja2V0LCBub3Qgc2VlbiBiZWZvcmUsIGVu dGVyIGl0IGludG8gdGhlIHJlY2VpdmUgd2luZG93LiAqLworCisjaWZkZWYgQ0tfVElNRVJTCisg ICAgaWYgKHRpbWludCA+IDApCisgICAgICBycnR0YmxbcnNuXSA9IGd0aW1lcigpOwkJLyogVGlt ZXN0YW1wICovCisjZW5kaWYgLyogQ0tfVElNRVJTICovCisKKyAgICByc2VxdGJsW3Jzbl0gPSBr OwkJCS8qIE1ha2UgYmFjayBwb2ludGVyICovCisgICAgcl9wa3Rba10ucGtfc2VxID0gcnNuOwkJ LyogUmVjb3JkIGluIHBhY2tldCBpbmZvIHN0cnVjdHVyZSAqLworICAgIHJfcGt0W2tdLnBrX3R5 cCA9IHR5cGU7CQkvKiBTZXF1ZW5jZSwgdHlwZSwuLi4gKi8KKyAgICByX3BrdFtrXS5wa19hZHIg PSByZGF0YXA7CQkvKiBwb2ludGVyIHRvIGRhdGEgYnVmZmVyICovCisgICAgaWYgKGxvY2FsKSB7 CQkJLyogU2F2ZSBhIGZ1bmN0aW9uIGNhbGwhICovCisJaW50IHggPSAwOworCWlmIChmZGlzcGxh ICE9IFhZRkRfTikgeCA9IDE7CisJaWYgKGZkaXNwbGEgPT0gWFlGRF9CICYmICh0eXBlID09ICdE JyB8fCBzbmR0eXAgPT0gJ0QnKSkgeCA9IDA7CisJaWYgKHgpCQkJCS8qIFVwZGF0ZSBzY3JlZW4g Ki8KKwkgIHh4c2NyZWVuKFNDUl9QVCwoY2hhcil0eXBlLChsb25nKXJzbiwoY2hhciAqKXNvaHAp OworICAgIH0KKyAgICByZXR1cm4odHlwZSk7CQkJLyogUmV0dXJuIHBhY2tldCB0eXBlICovCit9 CisKKy8qICBMIE8gRyBQIEsgVCAgLS0gIExvZyBwYWNrZXQgbnVtYmVyIG4sIHBvaW50ZWQgdG8g Ynkgcy4gICovCisKKy8qIGMgPSAncycgKHNlbmQpIG9yICdyJyAocmVjZWl2ZSkgKi8KKworVk9J RAorI2lmZGVmIENLX0FOU0lDCitsb2dwa3QoY2hhciBjLGludCBuLCBDSEFSICpzLCBpbnQgbGVu KQorI2Vsc2UKK2xvZ3BrdChjLG4scyxsZW4pIGNoYXIgYzsgaW50IG47IENIQVIgKnM7IGludCBs ZW47CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIGxvZ3BrdCAqLyB7CisgICAgY2hhciBwbG9n WzIwXTsKKyAgICBpZiAoIXMpIHMgPSAoQ0hBUiAqKSIiOworICAgIGlmIChwa3Rsb2cpIGlmIChj aGtmbihaUEZJTEUpID4gMCkgeworCWlmIChuIDwgMCkJCQkvKiBDb25zdHJ1Y3QgZW50cnkgaGVh ZGVyICovCisJICBzcHJpbnRmKHBsb2csIiVjLXh4LSUwMmQtIixjLChndGltZXIoKSU2MCkpOyAv KiBzYWZlICovCisJZWxzZQorCSAgc3ByaW50ZihwbG9nLCIlYy0lMDJkLSUwMmQtIixjLG4sKGd0 aW1lcigpJTYwKSk7IC8qIHNhZmUgKi8KKwlpZiAoenNvdXR4KFpQRklMRSxwbG9nLChpbnQpc3Ry bGVuKHBsb2cpKSA8IDApIHsKKwkgICAgcGt0bG9nID0gMDsKKwkgICAgcmV0dXJuOworCX0gZWxz ZSB7CisJICAgIGlmIChsZW4gPT0gMCkKKwkgICAgICBsZW4gPSBzdHJsZW4oKGNoYXIgKilzKTsK KwkgICAgaWYgKGxlbiA+IDApIHsKKwkJY2hhciAqIHA7CQkvKiBNYWtlIFNPUCBwcmludGFibGUg Ki8KKwkJaW50IHg7CQkJLyogc28gd2UgY2FuIGxvb2sgYXQgbG9ncyB3aXRob3V0ICovCisJCXAg PSBkYmNocigqcyk7CQkvKiB0cmlnZ2VyaW5nIGF1dG9kb3dubG9hZC4gKi8KKwkJeCA9IHN0cmxl bihkYmNocigqcykpOworCQlpZiAoKnMgPCAzMiB8fCAoKnMgPiAxMjcgJiYgKnMgPCAxNjApKSB7 CisJCSAgICBpZiAoenNvdXR4KFpQRklMRSxwLHgpIDwgMCkgeworCQkJcGt0bG9nID0gMDsKKwkJ CXJldHVybjsKKwkJICAgIH0gZWxzZSB7CisJCQlsZW4tLTsKKwkJCXMrKzsKKwkJICAgIH0KKwkJ fQorCSAgICB9CisJICAgIGlmICh6c291dHgoWlBGSUxFLChjaGFyICopcyxsZW4pIDwgMCkgewor CQlwa3Rsb2cgPSAwOworCQlyZXR1cm47CisJICAgIH0gZWxzZSBpZiAoenNvdXR4KFpQRklMRSwK KyNpZmRlZiBVTklYCisJCQkgICAgICAiXG4iLCAxCisjZWxzZQorI2lmZGVmIGRhdGFnZW5lcmFs CisJCQkgICAgICAiXG4iLCAxCisjZWxzZQorI2lmZGVmIE9TSworCQkJICAgICAgIlxyIiwgMQor I2Vsc2UKKyNpZmRlZiBNQUMKKwkJCSAgICAgICJcciIsIDEKKyNlbHNlCisJCQkgICAgICAiXDAx NVwwMTIiLCAyCisjZW5kaWYgLyogTUFDICovCisjZW5kaWYgLyogT1NLICovCisjZW5kaWYgLyog ZGF0YWdlbmVyYWwgKi8KKyNlbmRpZiAvKiBVTklYICovCisJCQkgICAgICApIDwgMCkgeworCQlw a3Rsb2cgPSAwOworCSAgICB9CisJfQorICAgIH0KK30KKworLyogIFQgUyBUIEEgVCBTICAtLSAg UmVjb3JkIHN0YXRpc3RpY3MgaW4gdHJhbnNhY3Rpb24gbG9nICAqLworCitWT0lECit0c3RhdHMo KSB7CisgICAgY2hhciAqdHAgPSBOVUxMOworI2lmZGVmIEdGVElNRVIKKyAgICBDS0ZMT0FUIHh4 OwkJCQkvKiBFbGFwc2VkIHRpbWUgZGl2aXNvciAqLworI2VuZGlmIC8qIEdGVElNRVIgKi8KKwor ICAgIGRlYnVnKEYxMDEsInRzdGF0cyB4ZnNlY3MiLCIiLHhmc2Vjcyk7CisgICAgZGVidWcoRjEw MSwidHN0YXRzIGZpbGNudCIsIiIsZmlsY250KTsKKyAgICBpZiAoZmlsY250ID09IDEpIHsJCQkv KiBHZXQgdGltaW5nIGZvciBzdGF0aXN0aWNzICovCisJdHNlY3MgPSB4ZnNlY3M7CQkJLyogU2lu Z2xlIGZpbGUsIHdlIGFscmVhZHkgaGF2ZSBpdCAqLworI2lmZGVmIEdGVElNRVIKKwlkZWJ1ZyhG MTAxLCJ0c3RhdHMgZnB4ZnNlY3MiLCIiLChpbnQpZnB4ZnNlY3MpOworCWZwdHNlY3MgPSBmcHhm c2VjczsKKyNlbmRpZiAvKiBHRlRJTUVSICovCisgICAgfSBlbHNlIHsJCQkJLyogTXVsdGlwbGUg ZmlsZXMgKi8KKwl0c2VjcyA9IGd0aW1lcigpOwkJLyogR2V0IGN1cnJlbnQgdGltZSAqLworI2lm ZGVmIEdGVElNRVIKKwlmcHRzZWNzID0gZ2Z0aW1lcigpOworI2VuZGlmIC8qIEdGVElNRVIgKi8K KyAgICB9CisjaWZkZWYgR0ZUSU1FUgorICAgIGlmIChmcHRzZWNzIDw9IEdGTUlOVElNRSkJCS8q IENhbGN1bGF0ZSBDUFMgKi8KKyAgICAgIGZwdHNlY3MgPSAoQ0tGTE9BVCkgR0ZNSU5USU1FOwor ICAgIGRlYnVnKEYxMDEsInRzdGF0cyBmcHRzZWNzIiwiIiwoaW50KWZwdHNlY3MpOworICAgIHh4 ID0gKENLRkxPQVQpIHRmYyAvIGZwdHNlY3M7CisgICAgaWYgKHNpemVvZihsb25nKSA8PSA0KSB7 CQkvKiBkb2Vzbid0IGFjY291bnQgZm9yIDE2LWJpdCBsb25ncyAqLworCWlmICh4eCAgPiAyMTQ3 NDgzNjQ3LjApCisJICB0ZmNwcyA9IDIxNDc0ODM2NDdMOwkgICAgICAgIC8qIDMxIGJpdHMgKi8K KwllbHNlCisJICB0ZmNwcyA9IChsb25nKSB4eDsKKyAgICB9IGVsc2UKKyAgICAgIHRmY3BzID0g KGxvbmcpIHh4OworI2Vsc2UKKyAgICBpZiAodHNlY3MgPCAyTCkKKyAgICAgIHRzZWNzID0gMUw7 CisgICAgZGVidWcoRjEwMSwidHN0YXRzIHRzZWNzIiwiIix0c2Vjcyk7CisgICAgdGZjcHMgPSB0 ZmMgLyB0c2VjczsKKyNlbmRpZiAvKiBHRlRJTUVSICovCisKKyAgICB6dGltZSgmdHApOwkJCQkv KiBHZXQgdGltZSBzdGFtcCAqLworICAgIHRsb2coRjEwMCwiIiwiIiwwTCk7CQkvKiBMZWF2ZSBh IGJsYW5rIGxpbmUgKi8KKyAgICB0bG9nKEYxMTAsIlRyYW5zYWN0aW9uIGNvbXBsZXRlIix0cCww TCk7ICAvKiBSZWNvcmQgaXQgKi8KKworICAgIGlmIChmaWxjbnQgPCAxKSByZXR1cm47CQkvKiBJ ZiBubyBmaWxlcywgZG9uZS4gKi8KKworLyogSWYgbXVsdGlwbGUgZmlsZXMsIHJlY29yZCBjaGFy YWN0ZXIgdG90YWxzIGZvciBhbGwgZmlsZXMgKi8KKworICAgIGlmIChmaWxjbnQgPiAxKSB7CisJ dGxvZyhGMTAxLCIgZmlsZXMgdHJhbnNmZXJyZWQgICAgICAgIiwiIixmaWxjbnQgLSBmaWxyZWop OworCXRsb2coRjEwMSwiIHRvdGFsIGZpbGUgY2hhcmFjdGVycyAgICIsIiIsdGZjKTsKKwl0bG9n KEYxMDEsIiBjb21tdW5pY2F0aW9uIGxpbmUgaW4gICAiLCIiLHRsY2kpOworCXRsb2coRjEwMSwi IGNvbW11bmljYXRpb24gbGluZSBvdXQgICIsIiIsdGxjbyk7CisgICAgfQorCisvKiBSZWNvcmQg dGltaW5nIGluZm8gZm9yIG9uZSBvciBtb3JlIGZpbGVzICovCisKKyNpZmRlZiBHRlRJTUVSCisg ICAgaWYgKGZpbGNudCAtIGZpbHJlaiA9PSAxKSB7CisJdGxvZyhGMTAxLCIgZWxhcHNlZCB0aW1l IChzZWNvbmRzKSAgIiwiIiwobG9uZykgZnB4ZnNlY3MpOworCXRsb2coRjEwMSwiIGVmZmVjdGl2 ZSBkYXRhIHJhdGUgICAgICIsIiIsZmlsY3BzKTsKKyAgICB9IGVsc2UgeworCXRsb2coRjEwMSwi IGVsYXBzZWQgdGltZSAoc2Vjb25kcykgICIsIiIsKGxvbmcpIGZwdHNlY3MpOworCXRsb2coRjEw MSwiIGVmZmVjdGl2ZSBkYXRhIHJhdGUgICAgICIsIiIsKGxvbmcpIHh4KTsKKyAgICB9CisjZWxz ZQorICAgIHRsb2coRjEwMSwiIGVsYXBzZWQgdGltZSAoc2Vjb25kcykgICIsIiIsdHNlY3MpOwor ICAgIGlmICh0c2VjcyA+IDApCisgICAgICB0bG9nKEYxMDEsIiBlZmZlY3RpdmUgZGF0YSByYXRl ICAgICAiLCIiLCh0ZmMgLyB0c2VjcykpOworI2VuZGlmIC8qIEdGVElNRVIgKi8KKworICAgIHRs b2coRjEwMCwiIiwiIiwwTCk7CQkvKiBMZWF2ZSBhIGJsYW5rIGxpbmUgKi8KK30KKworLyogIEYg UyBUIEEgVCBTICAtLSAgUmVjb3JkIGZpbGUgc3RhdGlzdGljcyBpbiB0cmFuc2FjdGlvbiBsb2cg ICovCisKK1ZPSUQKK2ZjcHMoKSB7CisjaWZkZWYgR0ZUSU1FUgorICAgIGRvdWJsZSB4eDsKKyAg ICBmcHhmc2VjcyA9IGdmdGltZXIoKSAtIGZwZnNlY3M7CisgICAgaWYgKGZweGZzZWNzIDw9IEdG TUlOVElNRSkKKyAgICAgIGZweGZzZWNzID0gKENLRkxPQVQpIEdGTUlOVElNRTsKKyAgICB4eCA9 IChDS0ZMT0FUKSBmZmMgLyBmcHhmc2VjczsKKyAgICBpZiAoc2l6ZW9mKGxvbmcpIDw9IDQpIHsK KwlpZiAoeHggID4gMjE0NzQ4MzY0Ny4wKQorCSAgdGZjcHMgPSAyMTQ3NDgzNjQ3TDsJCS8qIDMx IGJpdHMgKi8KKwllbHNlCisJICBmaWxjcHMgPSAobG9uZykgeHg7CisgICAgfSBlbHNlCisgICAg ICBmaWxjcHMgPSAobG9uZykgeHg7CisgICAgaWYgKHNpemVvZihpbnQpID49IDQpCisgICAgICB4 ZnNlY3MgPSAoaW50KSBmcHhmc2VjczsKKyAgICBlbHNlIGlmIChmcHhmc2VjcyA8IDMyNzY4LjAp CisgICAgICB4ZnNlY3MgPSAoaW50KSBmcHhmc2VjczsKKyAgICBlbHNlCisgICAgICB4ZnNlY3Mg PSAzMjc2NzsKKyNlbHNlIC8qIEdGVElNRVIgKi8KKyAgICB4ZnNlY3MgPSBndGltZXIoKSAtIGZz ZWNzOworICAgIGlmICh4ZnNlY3MgPCAxTCkgeGZzZWNzID0gMUw7CisgICAgZmlsY3BzID0gZmZj IC8geGZzZWNzOworI2VuZGlmIC8qIEdGVElNRVIgKi8KK30KKworVk9JRAorZnN0YXRzKCkgewor ICAgIHRmYyArPSBmZmM7CisjaWZkZWYgREVCVUcKKyAgICBpZiAoZGVibG9nKSB7CisJZGVidWco RjEwMSwiZnN0YXRzIHRmYyIsIiIsdGZjKTsKKwlkZWJ1ZyhGMTAxLCJmc3RhdHMgd2hhdCIsIiIs d2hhdCk7CisJZGVidWcoRjExMCwiZnN0YXRzIGVwa3Rtc2ciLGVwa3Rtc2csMCk7CisgICAgfQor I2VuZGlmIC8qIERFQlVHICovCisjaWZkZWYgVExPRworICAgIGlmICghZGlzY2FyZCAmJiAhY3hz ZWVuICYmICFjenNlZW4gJiYgd2hhdCAhPSBXX05PVEhJTkcgJiYgISplcGt0bXNnKQorICAgICAg dGxvZyhGMTAxLCIgY29tcGxldGUsIHNpemUiLCIiLGZmYyk7CisjZW5kaWYgLyogVExPRyAqLwor fQorCisjZW5kaWYgLyogTk9YRkVSICovCgpkaWZmIC0tZ2l0IGEvY2tlcm1pdC05LjAuMzAyLWJ1 aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2NmbjMuYyBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2Vy bWl0LTkuMC4zMDIvY2tjZm4zLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u MmQ1OGE1NgotLS0gL2Rldi9udWxsCisrKyBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0 LTkuMC4zMDIvY2tjZm4zLmMKQEAgLTAsMCArMSwyNjA2IEBACisvKiAgQyBLIEMgRiBOIDMgIC0t ICBQYWNrZXQgYnVmZmVyIG1hbmFnZW1lbnQgZm9yIEMtS2VybWl0ICAqLworCisvKiAocGx1cyBh c3NvcnRlZCBmdW5jdGlvbnMgdGFja2VkIG9uIGF0IHRoZSBlbmQpICovCisKKy8qCisgIEF1dGhv cjogRnJhbmsgZGEgQ3J1eiA8ZmRjQGNvbHVtYmlhLmVkdT4sCisgIENvbHVtYmlhIFVuaXZlcnNp dHkgQWNhZGVtaWMgSW5mb3JtYXRpb24gU3lzdGVtcywgTmV3IFlvcmsgQ2l0eS4KKworICBDb3B5 cmlnaHQgKEMpIDE5ODUsIDIwMTAsCisgICAgVHJ1c3RlZXMgb2YgQ29sdW1iaWEgVW5pdmVyc2l0 eSBpbiB0aGUgQ2l0eSBvZiBOZXcgWW9yay4KKyAgICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgU2Vl IHRoZSBDLUtlcm1pdCBDT1BZSU5HLlRYVCBmaWxlIG9yIHRoZQorICAgIGNvcHlyaWdodCB0ZXh0 IGluIHRoZSBja2NtYWkuYyBtb2R1bGUgZm9yIGRpc2NsYWltZXIgYW5kIHBlcm1pc3Npb25zLgor Ki8KKy8qCisgTm90ZSAtLSBpZiB5b3UgY2hhbmdlIHRoaXMgZmlsZSwgcGxlYXNlIGFtZW5kIHRo ZSB2ZXJzaW9uIG51bWJlciBhbmQgZGF0ZSBhdAorIHRoZSB0b3Agb2YgY2tjZm5zLmMgYWNjb3Jk aW5nbHkuCisqLworCisjaW5jbHVkZSAiY2tjc3ltLmgiCisjaW5jbHVkZSAiY2tjZGViLmgiCisj aW5jbHVkZSAiY2tjYXNjLmgiCisjaW5jbHVkZSAiY2tja2VyLmgiCisjaW5jbHVkZSAiY2tjeGxh LmgiCisKKy8qICBDIEsgTSBLIEQgSSBSICAtLSAgQ3JlYXRlIGEgZGlyZWN0b3J5ICAqLworLyoK KyAgQ2FsbCB3aXRoOgorICAgIGludCBmYyAgICA9IDAgdG8gY3JlYXRlLCBub256ZXJvIHRvIHJl bW92ZSwgYSBkaXJlY3RvcnkuCisgICAgY2hhciAqIHMgID0gcG9pbnRlciB0byBuYW1lIG9mIGRp cmVjdG9yeSB0byBjcmVhdGUgb3IgcmVtb3ZlLgorICAgIGNoYXIgKiogciA9IGFkZHJlc3Mgb2Yg cG9pbnRlciB0byByZXR1cm4gbmFtZSBvciBtZXNzYWdlLgorICAgIGludCBtICAgICA9IDEgdG8g cHJpbnQgZXJyb3IgbWVzc2FnZXMsIDAgdG8gYmUgc2lsZW50LgorICAgIGludCBjdnQgICA9IDEg bWVhbnMgY29udmVydCBzIGZyb20gc3RhbmRhcmQgZm9ybWF0IHRvIGxvY2FsIGZvcm1hdDsKKyAg ICAgICAgICAgICAgICAwIG1lYW5zIHVzZSBzIGFzIGlzLgorICBSZXR1cm5zOgorICAgIDAgb24g c3VjY2VzcyAoZGlyZWN0b3J5IHdhcyBjcmVhdGVkIG9yIHJlbW92ZWQpLgorICAgLTEgd2hlbiBh dHRlbXB0IHRvIGNyZWF0ZSB0aGUgZGlyZWN0b3J5IGZhaWxlZC4KKyAgIC0yIG9uIGludGVybmFs IGVycm9yIChlLmcuIG5vIGNvZGUgZm9yIGNyZWF0aW5nIGRpcmVjdG9yaWVzKS4KKyAgT24gc3Vj Y2VzcywgdGhlIG5hbWUgaXMgcG9pbnRlZCB0byBieSBwLgorICBPbiBmYWlsdXJlLCB0aGUgcmVh c29uIGlzIHBvaW50ZWQgdG8gYnkgcC4KKyovCisjaWZkZWYgQ0tfTUtESVIKK3N0YXRpYyBjaGFy IGNrbWtkYnVmW0NLTUFYUEFUSCsxXTsKKyNlbHNlCisjaWZkZWYgZGF0YWdlbmVyYWwKK3N0YXRp YyBjaGFyIGNrbWtkYnVmW0NLTUFYUEFUSCsxXTsKKyNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLwor I2VuZGlmIC8qIENLX01LRElSICovCisKKyNpZmRlZiBDS19NS0RJUgoraW50Citja21rZGlyKGZj LHMscixtLGN2dCkgaW50IGZjOyBjaGFyICogczsgY2hhciAqKiByOyBpbnQgbTsgaW50IGN2dDsg eworICAgIGludCB4LCByYyA9IC0yOworICAgIGNoYXIgdG1wYnVmW0NLTUFYUEFUSCsxXTsKKyAg ICBjaGFyIGJ1ZjJbQ0tNQVhQQVRIKzFdOworICAgIGlmICghcykgcyA9ICIiOworICAgIGRlYnVn KEYxMTAsImNrbWtkaXIgMSBmYyIscyxmYyk7CisgICAgaWYgKCEqcykgeworCWNrbWFrbXNnKGNr bWtkYnVmLAorCQkgQ0tNQVhQQVRIKzEsCisJCSAoZmMgPT0gMCkgPyAibWtkaXIiIDogInJtZGly IiwKKwkJICI6IG5vIG5hbWUgZ2l2ZW4iLAorCQkgTlVMTCwKKwkJIE5VTEwKKwkJICk7CisJKnIg PSBja21rZGJ1ZjsKKwlyZXR1cm4oLTIpOworICAgIH0KKyNpZmRlZiBkYXRhZ2VuZXJhbAorLyog Q29tZSBiYWNrIGFuZCBtYWtlIHRoaXMgbmljZXIgbGF0ZXIgaWYgYW55Ym9keSBub3RpY2VzICov CisgICAgaWYgKGZjID09IDApIHsJCQkvKiBta2RpciAqLworCXJjID0gY3JlYXRlZGlyKHMsMCk7 CisgICAgfSBlbHNlIHsJCQkJLyogcm1kaXIgKi8KKwkvKiBBT1MvVlMgcm1kaXIoKSBpcyBhIG5v LW9wLiAqLworCWNrbWFrbXNnKHRtcGJ1ZixDS01BWFBBVEgrMSwiZGVsZXRlICIscyxOVUxMLE5V TEwpOworCWRlYnVnKEYxMTAsImNrbWtkaXIgMiIsdG1wYnVmLDApOworCXJjID0gc3lzdGVtKHRt cGJ1Zik7CisgICAgfQorICAgICpyID0gTlVMTDsKKyNlbHNlIC8qIG5vdCBkYXRhZ2VuZXJhbCAq LworCisvKiBGaXJzdCBtYWtlIHN1cmUgdGhlIG5hbWUgaGFzIGFuIGFjY2VwdGFibGUgZGlyZWN0 b3J5LW5hbWUgZm9ybWF0ICovCisKKyNpZmRlZiBWTVMKKyAgICB7CisJY2hhciAqcCA9IHM7CisJ aW50IGxiID0gMCwgcmIgPSAwLCBzbCA9IDA7CisJd2hpbGUgKCpwKSB7CisJICAgIGlmICAgICAg KCpwID09ICdbJyB8fCAqcCA9PSAnPCcpIGxiKys7ICAgLyogQ291bnQgYnJhY2tldHMgKi8KKwkg ICAgZWxzZSBpZiAoKnAgPT0gJ10nIHx8ICpwID09ICc+JykgcmIrKzsKKwkgICAgZWxzZSBpZiAo KnAgPT0gJy8nKSAJICAgICBzbCsrOwkvKiBhbmQgc2xhc2hlcyAqLworCSAgICBwKys7CisJfQor CWlmIChsYiAhPSAxICYmIHJiICE9IDEgJiYgc2wgPT0gMCAmJiBwID4gcyAmJiAqKHAtMSkgIT0g JzonKSB7CisJICAgIC8qIFByb2JhYmx5IGp1c3QgYSB3b3JkIC0gY29udmVydCB0byBWTVMgZm9y bWF0ICovCisJICAgIGNrbWFrbXNnKGJ1ZjIsCisJCSAgICAgQ0tNQVhQQVRIKzEsCisJCSAgICAg IlsiLAorCQkgICAgICgqcyA9PSAnLicpID8gIiIgOiAiLiIsCisJCSAgICAgcywKKwkJICAgICAi XSIKKwkJICAgICApOworCSAgICBzID0gYnVmMjsKKwl9IGVsc2UgaWYgKGxiID09IDAgJiYgcmIg PT0gMCAmJiBzbCAhPSAwICYmIHAgPiBzICYmICoocC0xKSAhPSAnOicpIHsKKwkgICAgaW50IGZs YWcgPSAwOworCSAgICAvKiBTZWVtcyB0byBiZSBpbiBVTklYIGZvcm1hdCAqLworCSAgICB4ID0g c3RybGVuKHMpOworCSAgICBpZiAoeCA+IDAgJiYgc1t4LTFdICE9ICcvJykKKwkgICAgICBmbGFn ID0gMTsKKwkgICAgY2ttYWttc2coYnVmMixDS01BWFBBVEgrMSxzLGZsYWcgPyAiLyIgOiAiIixO VUxMLE5VTEwpOworCSAgICBzID0gYnVmMjsKKwl9CisJaWYgKHMgPT0gYnVmMikgeworCSAgICBj a3N0cm5jcHkodG1wYnVmLHMsQ0tNQVhQQVRIKzEpOworCSAgICBzID0gdG1wYnVmOworCX0KKwlk ZWJ1ZyhGMTEwLCJja21rZGlyIDIrVk1TIixzLDApOworICAgIH0KKyNlbHNlCisjaWZkZWYgVU5J WE9ST1NLCisjaWZkZWYgRFRJTERFCisgICAgcyA9IHRpbGRlX2V4cGFuZChzKTsKKyNlbmRpZiAv KiBEVElMREUgKi8KKyAgICBja3N0cm5jcHkodG1wYnVmLHMsQ0tNQVhQQVRIKzEpOworICAgIHMg PSB0bXBidWY7CisgICAgeCA9IHN0cmxlbihzKTsKKyAgICBpZiAoeCA+IDAgJiYgc1t4LTFdICE9 ICcvJykgewkvKiBNdXN0IGVuZCBpbiAiLyIgZm9yIHpta2RpcigpICovCisJc1t4XSA9ICcvJzsK KwlzW3grMV0gPSBOVUw7CisJZGVidWcoRjExMCwiY2tta2RpciAyK1VOSVhPUk9TSyIscywwKTsK KyAgICB9CisjZWxzZSAvKiBVTklYT1JPU0sgKi8KKyNpZmRlZiBPUzIKKyAgICBja3N0cm5jcHko dG1wYnVmLHMsQ0tNQVhQQVRIKzEpOworICAgIHMgPSB0bXBidWY7CisgICAgeCA9IHN0cmxlbihz KTsKKyAgICBpZiAoZmMgPT0gMCAmJiB4ID4gMCAmJiBzW3gtMV0gIT0gJy8nKSB7IC8qIE11c3Qg ZW5kIGluICIvIiBmb3Igem1rZGlyKCkgKi8KKwlzW3hdID0gJy8nOworCXNbeCsxXSA9IE5VTDsK KwlkZWJ1ZyhGMTEwLCJja21rZGlyIDIrT1MyIixzLDApOworICAgIH0KKyNlbmRpZiAvKiBPUzIg Ki8KKyNlbmRpZiAvKiBVTklYT1JPU0sgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKyNpZmRlZiBOWkxU T1IKKyAgICAvKiBTZXJ2ZXIgaXMgY2FsbGluZyB1cywgc28gY29udmVydCB0byBsb2NhbCBmb3Jt YXQgaWYgbmVjZXNzYXJ5ICovCisgICAgaWYgKGN2dCkgeworCW56cnRvbChzLChjaGFyICopYnVm MiwxLFBBVEhfQUJTLENLTUFYUEFUSCk7CisJcyA9IGJ1ZjI7CisJZGVidWcoRjExMCwiY2tta2Rp ciAzIixzLDApOworICAgIH0KKyNlbmRpZiAvKiBOWkxUT1IgKi8KKyAgICBkZWJ1ZyhGMTEwLCJj a21rZGlyIDQiLHMsMCk7CisgICAgaWYgKGZjID09IDApIHsJCQkvKiBNYWtpbmcgKi8KKyNpZmRl ZiBDS19NS0RJUgorCXJjID0gem1rZGlyKHMpOworI2Vsc2UKKyNpZmRlZiBOVAorCXJjID0gX21r ZGlyKHMpOworI2Vsc2UKKwlyYyA9IG1rZGlyKHMsMDc3Nyk7CisjZW5kaWYgLyogTlQgKi8KKyNl bmRpZiAvKiBDS19NS0RJUiAqLworICAgIH0gZWxzZSB7CQkJCS8qIFJlbW92aW5nICovCisjaWZk ZWYgWlJNRElSCisJcmMgPSB6cm1kaXIocyk7CisjZWxzZQorI2lmZGVmIE5UCisJcmMgPSBfcm1k aXIocyk7CisjZWxzZQorI2lmZGVmIE9TSworCXJjID0gLTI7CisjZWxzZQorCXJjID0gcm1kaXIo cyk7CisjZW5kaWYgLyogT1NLICovCisjZW5kaWYgLyogTlQgKi8KKyNlbmRpZiAvKiBaUk1ESVIg Ki8KKyAgICB9CisjZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KKyAgICBkZWJ1ZyhGMTAxLCJja21r ZGlyIHJjIiwiIixyYyk7CisgICAgaWYgKHJjID09IC0yKSB7CisJY2ttYWttc2coY2tta2RidWYs CisJCSBDS01BWFBBVEgsCisJCSAiRGlyZWN0b3J5ICIsCisJCSAoZmMgPT0gMCkgPyAiY3JlYXRp b24iIDogInJlbW92YWwiLAorCQkgIm5vdCBpbXBsZW1lbnRlZCBpbiB0aGlzIHZlcnNpb24gb2Yg Qy1LZXJtaXQiLAorCQkgTlVMTAorCQkgKTsKKwkqciA9IGNrbWtkYnVmOworCWlmIChtKSBwcmlu dGYoIiVzXG4iLCpyKTsKKyAgICB9IGVsc2UgaWYgKHJjIDwgMCkgeworCWlmIChtKSBwZXJyb3Io cyk7CisJY2ttYWttc2coY2tta2RidWYsQ0tNQVhQQVRILHMsIjogIixja19lcnJzdHIoKSxOVUxM KTsKKwkqciA9IGNrbWtkYnVmOworICAgIH0gZWxzZSBpZiAoZmMgPT0gMCAmJiB6Zm5xZnAocyxD S01BWFBBVEgsY2tta2RidWYpKSB7CisJKnIgPSBja21rZGJ1ZjsKKyAgICB9IGVsc2UgaWYgKGZj ICE9IDApIHsKKwlja21ha21zZyhja21rZGJ1ZixDS01BWFBBVEgscywiOiByZW1vdmVkIixOVUxM LE5VTEwpOworCSpyID0gY2tta2RidWY7CisgICAgfQorICAgIHJldHVybihyYyk7Cit9CisjZW5k aWYgLyogQ0tfTUtESVIgKi8KKworI2lmbmRlZiBOT1hGRVIJCQkJLyogUmVzdCBvZiB0aGlzIGZp bGUuLi4gKi8KKworI2lmbmRlZiBOT0RJU1BPCisjaWZkZWYgcGRwMTEKKyNkZWZpbmUgTk9ESVNQ TworI2VuZGlmIC8qIHBkcGQxMSAqLworI2VuZGlmIC8qIE5PRElTUE8gKi8KKworZXh0ZXJuIGlu dCBwaXBlc2VuZDsKKyNpZmRlZiBQSVBFU0VORAorZXh0ZXJuIGNoYXIgKiogc25kZmlsdGVyOwor I2VuZGlmIC8qIFBJUEVTRU5EICovCisKK2V4dGVybiBpbnQgdW5rY3MsIHdtYXgsIHdjdXIsIGRp c2NhcmQsIGJjdHUsIGJjdGwsIGxvY2FsLCBmZGlzcGxhLCB3aGF0LAorICAgIHNlbmRtb2RlLCBv cG5lcnIsIGRlc3QsIGVwa3RyY3ZkLCBlcGt0c2VudCwgZmlsZXN0YXR1cywgZW9mbWV0aG9kLCBk aXNwb3MsCisgICAgZm5jbnYsIGZucnBhdGg7CisKK2V4dGVybiBjaGFyICogb2ZuMjsKK2V4dGVy biBjaGFyICogcmZzcGVjLCAqIHNmc3BlYywgKiBwcmZzcGVjLCAqIHBzZnNwZWMsICogcnJmc3Bl YywgKiBwcnJmc3BlYzsKK2V4dGVybiBjaGFyIG9mbjFbXTsKK2V4dGVybiBpbnQgb2ZuMXg7Citl eHRlcm4gY2hhciAqIG9mcGVybXM7CisKKyNpZmRlZiBWTVMKK2V4dGVybiBpbnQgYmF0Y2g7Cisj ZWxzZQorZXh0ZXJuIGludCBiYWNrZ3JkOworI2VuZGlmIC8qIFZNUyAqLworCitleHRlcm4gaW50 IHhmbGcsIHJlbWZpbGUsIHJlbWFwcGQ7CitleHRlcm4gQ0hBUiAqZGF0YTsKK2V4dGVybiBjaGFy IGZpbG5hbVtdOworI2lmbmRlZiBOT0ZSSUxMUworZXh0ZXJuIGludCBycHJpbnRmLCBybWFpbGY7 CQkvKiBSRU1PVEUgTUFJTCwgUFJJTlQgKi8KK2NoYXIgb3B0YnVmW09QVEJVRkxFTl07CQkJLyog T3B0aW9ucyBmb3IgTUFJTCBvciBSRU1PVEUgUFJJTlQgKi8KKyNlbmRpZiAvKiBOT0ZSSUxMUyAq LworZXh0ZXJuIGludCB3c2xvdHM7CitleHRlcm4gaW50IGZibGtzaXosIGZyZWNsLCBmb3JnLCBm cmVjZm0sIGZuY2FjdCwgZm5jc2F2LCBmY2N0cmwsIGxmX29wdHM7CitleHRlcm4gQ0hBUiAqIHNy dmNtZDsKK2V4dGVybiBpbnQgc3J2Y21kbGVuOworCitleHRlcm4gaW50IGJpbmFyeSwgc3BzaXo7 CitleHRlcm4gaW50IHBrdG51bSwgY3hzZWVuLCBjenNlZW4sIG5maWxzLCBzdGRpbmY7CitleHRl cm4gaW50IG1lbXN0ciwgc3Rkb3VmLCBrZWVwLCBzbmRzcmMsIGhjZmxnOworZXh0ZXJuIGludCBz ZXJ2ZXIsIGVuX2N3ZCwgZW5fbWFpLCBlbl9wcmk7CisKKy8qIEF0dHJpYnV0ZXMgaW4vb3V0IGVu YWJsZWQgZmxhZ3MgKi8KKworZXh0ZXJuIGludAorICBhdGVuY2ksIGF0ZW5jbywgYXRkYXRpLCBh dGRhdG8sIGF0bGVuaSwgYXRsZW5vLCBhdGJsa2ksIGF0YmxrbywKKyAgYXR0eXBpLCBhdHR5cG8s IGF0c2lkaSwgYXRzaWRvLCBhdHN5c2ksIGF0c3lzbywgYXRkaXNpLCBhdGRpc287CisKKyNpZmRl ZiBDS19QRVJNUworZXh0ZXJuIGludCBhdGxwcmksIGF0bHBybywgYXRncHJpLCBhdGdwcm87Cisj ZW5kaWYgLyogQ0tfUEVSTVMgKi8KKworI2lmZGVmIFNUUkFUVVMKK2V4dGVybiBpbnQgYXRmcm1p LCBhdGZybW8sIGF0Y3JlaSwgYXRjcmVvLCBhdGFjdGksIGF0YWN0bzsKKyNlbmRpZiAvKiBTVFJB VFVTICovCisKKyNpZmRlZiBkYXRhZ2VuZXJhbAorZXh0ZXJuIGludCBxdWlldDsKKyNlbmRpZiAv KiBkYXRhZ2VuZXJhbCAqLworCitleHRlcm4gbG9uZyBmaWxjbnQ7CitleHRlcm4gQ0tfT0ZGX1Qg ZnNpemUsIGZmYywgdGZjLCBzZW5kc3RhcnQsIGNhbGlicmF0ZTsKK0NLX09GRl9UIHJzX2xlbjsK KworI2lmbmRlZiBOT0NTRVRTCitfUFJPVE9UWVAgKFZPSUQgc2V0eGxhdGUsICh2b2lkKSk7Citl eHRlcm4gaW50IHRjaGFyc2V0LCBmY2hhcnNldDsKK2V4dGVybiBpbnQgbnRjc2V0cywgeGxhdHlw ZSwgeGZyeGxhOworZXh0ZXJuIHN0cnVjdCBjc2luZm8gdGNzaW5mb1tdLCBmY3NpbmZvW107Cisj ZW5kaWYgLyogTk9DU0VUUyAqLworCisvKiBWYXJpYWJsZXMgZ2xvYmFsIHRvIEtlcm1pdCB0aGF0 IGFyZSBkZWZpbmVkIGluIHRoaXMgbW9kdWxlICovCisKKyNpZmRlZiBDS1hYQ0hBUgkJCQkvKiBE T1VCTEUgLyBJR05PUkUgY2hhciB0YWJsZSAqLworaW50IGRibGZsYWcgPSAwOworaW50IGlnbmZs YWcgPSAwOworc2hvcnQgZGJsdFsyNTZdID0geworICAgIDAsMCwwLDAsMCwwLDAsMCwwLDAsMCww LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwKKyAgICAwLDAsMCwwLDAs MCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsCisg ICAgMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAs MCwwLDAsMCwwLAorICAgIDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCww LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwKKyAgICAwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAs MCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsCisgICAgMCwwLDAsMCwwLDAsMCww LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLAorICAgIDAs MCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCww LDAsMCwKKyAgICAwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAs MCwwLDAsMCwwLDAsMCwwLDAKK307CisjZW5kaWYgLyogQ0tYWENIQVIgKi8KKworaW50IHdpbmxv OwkJCQkvKiBwYWNrZXQgbnVtYmVyIGF0IGxvdyB3aW5kb3cgZWRnZSAgKi8KKworaW50IHNidWZu dW07CQkJCS8qIG51bWJlciBvZiBmcmVlIGJ1ZmZlcnMgKi8KK2ludCBkdW0wMDEgPSAxMjM0OwkJ CS8qIHByb3RlY3Rpb24uLi4gKi8KK2ludCBzYnVmdXNlW01BWFdTXTsJCQkvKiBidWZmZXIgaW4t dXNlIGZsYWcgKi8KK2ludCBkdW0wMDMgPSAxMTExOworaW50IHJidWZudW07CQkJCS8qIG51bWJl ciBvZiBmcmVlIGJ1ZmZlcnMgKi8KK2ludCBkdW0wMDIgPSA0MzIxOwkJCS8qIG1vcmUgcHJvdGVj dGlvbiAqLworaW50IHJidWZ1c2VbTUFYV1NdOwkJCS8qIGJ1ZmZlciBpbi11c2UgZmxhZyAqLwor aW50IHNzZXF0YmxbNjRdOwkJCS8qIHNlcXVlbmNlICMgdG8gYnVmZmVyICMgdGFibGUgKi8KK2lu dCByc2VxdGJsWzY0XTsJCQkvKiBzZXF1ZW5jZSAjIHRvIGJ1ZmZlciAjIHRhYmxlICovCitpbnQg c2Fja3RibFs2NF07CQkJLyogc2VxdWVuY2UgIyBhY2sgdGFibGUgKi8KKworaW50IG9faXNvcGVu ID0gMCwgaV9pc29wZW4gPSAwOwkJLyogSW5wdXQgJiBvdXRwdXQgZmlsZXMgYXJlIG9wZW4gKi8K KworI2lmZGVmIERZTkFNSUMKK3N0cnVjdCBwa3RpbmZvICpzX3BrdCA9IE5VTEw7CQkvKiBhcnJh eSBvZiBwa3RpbmZvIHN0cnVjdHVyZXMgKi8KK3N0cnVjdCBwa3RpbmZvICpyX3BrdCA9IE5VTEw7 CQkvKiBhcnJheSBvZiBwa3RpbmZvIHN0cnVjdHVyZXMgKi8KKyNlbHNlCitzdHJ1Y3QgcGt0aW5m byBzX3BrdFtNQVhXU107CQkvKiBhcnJheSBvZiBwa3RpbmZvIHN0cnVjdHVyZXMgKi8KK3N0cnVj dCBwa3RpbmZvIHJfcGt0W01BWFdTXTsJCS8qIGFycmF5IG9mIHBrdGluZm8gc3RydWN0dXJlcyAq LworI2VuZGlmIC8qIERZTkFNSUMgKi8KKworI2lmZGVmIERFQlVHCitjaGFyIHhidWZbMjAwXTsJ CQkJLyogRm9yIGRlYnVnIGxvZ2dpbmcgKi8KKyNlbmRpZiAvKiBERUJVRyAqLworCisjaWZkZWYg RFlOQU1JQworQ0hBUiAqYmlnc2J1ZiA9IE5VTEwsICpiaWdyYnVmID0gTlVMTDsKKyNlbHNlCitj aGFyIGJpZ3NidFs4XTsJCQkJLyogUHJvdGVjdGlvbiAoc2hvdWxkbid0IG5lZWQgdGhpcykuICov CisJCQkJCS8qIEJVVCBET04nVCBSRU1PVkUgSVQhICovCitDSEFSIGJpZ3NidWZbU0JTSVogKyA1 XTsJCS8qIFNlbmQtcGFja2V0IGJ1ZmZlciBhcmVhICovCitjaGFyIGJpZ3JidFs4XTsJCQkJLyog U2FmZXR5IHBhZGRpbmcgKi8KK0NIQVIgYmlncmJ1ZltSQlNJWiArIDVdOwkJLyogUmVjZWl2ZS1w YWNrZXQgYXJlYSAqLworI2VuZGlmCitpbnQgYmlnc2JzaXogPSBTQlNJWjsJCQkvKiBTaXplcyBv ZiBiaWcgc2VuZCAmIHJjdiBidWZmZXJzLiAqLworaW50IGJpZ3Jic2l6ID0gUkJTSVo7CisKKyNp ZmRlZiBWTVMKK2ludCB6Y2hrcGF0aChjaGFyICpzKTsKKyNlbmRpZiAvKiBWTVMgKi8KKworLyog RlVOQ1RJT05TICovCisKK1ZPSUQKK2RvZmFzdCgpIHsKKyAgICBsb25nIG1heGJ1ZnNpeiA9IFJC U0laOwkJLyogQ29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzICovCisgICAgaW50IG1heHBrdHNpeiA9 IE1BWFNQOworICAgIGV4dGVybiBpbnQgc3BzaXpmLAkJCS8qIEZvciBidWcgaW4gSVJJWCBUZWxu ZXQgc2VydmVyICovCisgICAgICBycHNpeiwgdXJwc2l6LCBzcHNpenIsIHNwbWF4LCB3c2xvdHI7 CisgICAgZXh0ZXJuIHN0cnVjdCBja19wIHB0YWJbXTsKKworICAgIGlmIChtYXhwa3RzaXogPCA0 MCkJCQkvKiBMb25nIHBhY2tldCBsZW5ndGggKi8KKyAgICAgIG1heHBrdHNpeiA9IDQwOworICAg IGVsc2UgaWYgKG1heHBrdHNpeiA+IDQwMDApCisgICAgICBtYXhwa3RzaXogPSA0MDAwOworICAg IHdzbG90ciA9IG1heGJ1ZnNpeiAvIG1heHBrdHNpejsKKyAgICBpZiAod3Nsb3RyID4gTUFYV1Mp CQkJLyogV2luZG93IHNsb3RzICovCisgICAgICB3c2xvdHIgPSBNQVhXUzsKKyAgICBpZiAod3Ns b3RyID4gMzApCisgICAgICB3c2xvdHIgPSAzMDsKKyAgICBlbHNlIGlmICh3c2xvdHIgPCAxKQor ICAgICAgd3Nsb3RyID0gMTsKKyAgICB1cnBzaXogPSBhZGpwa2wobWF4cGt0c2l6LHdzbG90cixt YXhidWZzaXopOworICAgIHB0YWJbUFJPVE9fS10ucnBrdGxlbiA9IHVycHNpejsKKyAgICBycHNp eiA9ICh1cnBzaXogPiA5NCkgPyA5NCA6IHVycHNpejsgLyogTWF4IG5vbi1sb25nIHBhY2tldCBs ZW5ndGggKi8KKyAgICBkZWJ1ZyhGMTExLCJkb2Zhc3QiLCJ1cHJzaXoiLHVycHNpeik7CisjaWZk ZWYgSVJJWAorI2lmbmRlZiBJUklYNjUKKyAgICAvKiBJUklYIFRlbG5ldCBzZXJ2ZXIgY2hvcHMg b2ZmIHdyaXRlcyBsb25nZXIgdGhhbiA0SyAqLworICAgIHNwc2l6ID0gc3BtYXggPSBzcHNpenIg PSB1cnBzaXo7CisgICAgZGVidWcoRjEwMSwiZG9hcmcgUSBJUklYIHNwc2l6IiwiIixzcHNpeik7 CisgICAgc3BzaXpmID0gMTsKKyNlbmRpZiAvKiBJUklYNjUgKi8KKyNlbmRpZiAvKiBJUklYICov CisjaWZkZWYgQ0tfU1BFRUQKKyAgICBzZXRwcmVmaXgoUFhfQ0FVKTsJCQkvKiBDYXV0aW91cyB1 bnByZWZpeGluZyAqLworI2VuZGlmIC8qIENLX1NQRUVEICovCit9CisKKworLyogRm9yIHNhbml0 eSwgdXNlICJpIiBmb3IgYnVmZmVyIHNsb3RzLCAibiIgZm9yIHBhY2tldCBudW1iZXJzLiAqLwor CisvKiBJIE4gSSBCIFUgRiBTICovCisKKy8qCisgIEFsbG9jYXRlcyB0aGUgYmlnIHNlbmQgYW5k IHJlY2VpdmUgYnVmZmVycy4KKyAgQ2FsbCB3aXRoIHNpemUgZm9yIGJpZyBzZW5kIGJ1ZmZlciAo cykgYW5kIHJlY2VpdmUgYnVmZmVyIChyKS4KKyAgVGhlc2Ugc2l6ZXMgY2FuIGJlIGRpZmZlcmVu dC4KKyAgQXR0ZW1wdHMgdG8gYWxsb2NhdGUgYnVmZmVycyBvZiB0aGUgcmVxdWVzdGVkIHNpemUs IGJ1dCBpZiBpdCBjYW4ndCwKKyAgaXQgd2lsbCBhbGxvY2F0ZSBzbWFsbGVyIG9uZXMuCisgIFNl dHMgZ2xvYmFsIHZhcmlhYmxlcyBiaWdzYnNpeiBhbmQgYmlncmJzaXogdG8gdGhlIGFjdHVhbCBz aXplcywKKyAgYW5kIGJpZ3NidWYgYW5kIGJpZ3JidWYgcG9pbnRpbmcgdG8gdGhlIGFjdHVhbCBi dWZmZXJzLgorICBEZXNpZ25lZCB0byBiZSBjYWxsZWQgbW9yZSB0aGFuIG9uY2UuCisgIFJldHVy bnMgMCBvbiBzdWNjZXNzLCAtMSBvbiBmYWlsdXJlLgorKi8KKworQ0hBUiAqYmlnYnVmcCA9IE5V TEw7CisKK2ludAoraW5pYnVmcyhzLHIpIGludCBzLCByOyB7CisjaWZkZWYgRFlOQU1JQworICAg IHVuc2lnbmVkCisgICAgICBpbnQgc2l6ZTsKKyNpZmRlZiBPUzIKKyAgICB1bnNpZ25lZAkJLyog RG9uJ3QgeW91IHdpc2ggZXZlcnlib2R5IGhhZCB1bnNpZ25lZCBsb25nLi4uICovCisjZW5kaWYg LyogT1MyICovCisgICAgICBsb25nIHo7CisgICAgaW50IHg7CisKKyAgICBkZWJ1ZyhGMTAxLCJp bmlidWZzIHMiLCIiLHMpOworICAgIGRlYnVnKEYxMDEsImluaWJ1ZnMgciIsIiIscik7CisKKyAg ICBpZiAocyA8IDgwIHx8IHIgPCA4MCkgcmV0dXJuKC0xKTsJLyogVmFsaWRhdGUgYXJndW1lbnRz LiAqLworCisgICAgaWYgKCFzX3BrdCkgewkJCS8qIEFsbG9jYXRlIHBhY2tldCBpbmZvIHN0cnVj dHVyZXMgKi8KKwlpZiAoIShzX3BrdCA9IChzdHJ1Y3QgcGt0aW5mbyAqKSBtYWxsb2Moc2l6ZW9m KHN0cnVjdCBwa3RpbmZvKSpNQVhXUykpKQorCSAgZmF0YWwoImluaV9wa3RzOiBubyBtZW1vcnkg Zm9yIHNfcGt0Iik7CisgICAgfQorICAgIGZvciAoeCA9IDA7IHggPCBNQVhXUzsgeCsrKQorICAg ICAgc19wa3RbeF0ucGtfYWRyID0gTlVMTDsJCS8qIEluaXRpYWxpemUgYWRkcmVzc2VzICovCisK KyAgICBpZiAoIXJfcGt0KSB7CisJaWYgKCEocl9wa3QgPSAoc3RydWN0IHBrdGluZm8gKikgbWFs bG9jKHNpemVvZihzdHJ1Y3QgcGt0aW5mbykqTUFYV1MpKSkKKwkgIGZhdGFsKCJpbmlfcGt0czog bm8gbWVtb3J5IGZvciBzX3BrdCIpOworICAgIH0KKyAgICBmb3IgKHggPSAwOyB4IDwgTUFYV1M7 IHgrKykKKyAgICAgIHJfcGt0W3hdLnBrX2FkciA9IE5VTEw7CQkvKiBJbml0aWFsaXplIGFkZHJl c3NlcyAqLworCisgICAgaWYgKCFzcnZjbWQpIHsJCQkvKiBBbGxvY2F0ZSBzcnZjbWQgYnVmZmVy ICovCisJc3J2Y21kID0gKENIQVIgKikgbWFsbG9jKHIgKyAxMDApOworCWlmICghc3J2Y21kKSBy ZXR1cm4oLTEpOworCXNydmNtZGxlbiA9IHIgKyA5OTsKKwkqc3J2Y21kID0gTlVMOworICAgIH0K KyAgICBpZiAoYmlnYnVmcCkgewkJCS8qIEZyZWUgcHJldmlvdXMgYnVmZmVycywgaWYgYW55LiAq LworCWZyZWUoYmlnYnVmcCk7CisJYmlnYnVmcCA9IE5VTEw7CisgICAgfQorICAgIHNpemUgPSBz ICsgciArIDQwOwkJCS8qIENvbWJpbmVkIHJlcXVlc3RlZCBzaXplICsgcGFkZGluZyAqLworICAg IHogID0gKHVuc2lnbmVkKSBzICsgKHVuc2lnbmVkKSByICsgNDA7CisgICAgZGVidWcoRjEwMSwi aW5pYnVmcyBzaXplIDEiLCIiLHNpemUpOworICAgIGRlYnVnKEYxMDEsImluaWJ1ZnMgc2l6ZSB6 IiwiIix6KTsKKyAgICBpZiAoKGxvbmcpIHNpemUgIT0geikgeworCWRlYnVnKEYxMDAsImluaWJ1 ZnMgb3ZlcmZsb3ciLCIiLDApOworCXNpemUgPSA2NTUzNTsKKyAgICB9CisKKyAgICAvKiBUcnkg dG8gZ2V0IHRoZSBzcGFjZS4gIElmIG1hbGxvYyBmYWlscywgdHJ5IHRvIGdldCBhIGxpdHRsZSBs ZXNzLiAqLworICAgIC8qIChPYnZpb3VzbHksIHRoaXMgYWxnb3JpdGhtIGNhbiBiZSByZWZpbmVk LikgKi8KKworICAgIHdoaWxlICghKGJpZ2J1ZnAgPSAoQ0hBUiAqKSBtYWxsb2Moc2l6ZSkpKSB7 CisJZGVidWcoRjEwMSwiaW5pYnVmcyBiaWdidWYgbWFsbG9jIGZhaWxlZCIsIiIsc2l6ZSk7CisJ c2l6ZSA9IChzaXplICogMikgLyAzOwkJLyogRmFpbGVkLCBjdXQgc2l6ZSBieSAxLzMuICovCisJ aWYgKHNpemUgPCAyMDApCQkJLyogVHJ5IGFnYWluIHVudGlsIHRvbyBzbWFsbC4gKi8KKwkgIHJl dHVybigtMSk7CisgICAgfQorICAgIGRlYnVnKEYxMDEsImluaWJ1ZnMgc2l6ZSAyIiwiIixzaXpl KTsgLyogT0ssIHdlIGdvdCBzb21lIHNwYWNlLiAqLworCisvKgorICBOb3cgZGl2aWRlIHRoZSBh bGxvY2F0ZWQgc3BhY2UgYmV0d2VlbiB0aGUgc2VuZCBhbmQgcmVjZWl2ZSBidWZmZXJzIGluIHRo ZQorICByZXF1ZXN0ZWQgcHJvcG9ydGlvbi4gIFRoZSBuYXR1cmFsIGZvcm11bGEgd291bGQgYmUg KHMgLyAocyArIHIpKSAqIHNpemUKKyAgKGZvciB0aGUgc2VuZCBidWZmZXIpLCBidXQgdGhhdCBk b2Vzbid0IHdvcmsgd2l0aCBpbnRlZ2VyIGFyaXRobWV0aWMgYW5kIHdlCisgIGNhbid0IHVzZSBm bG9hdGluZyBwb2ludCBiZWNhdXNlIHNvbWUgbWFjaGluZXMgZG9uJ3QgaGF2ZSBpdC4gIFRoaXMg Y2FuIGJlCisgIHJlYXJyYW5nZWQgYXMgKHMgKiBzaXplKSAvIChzICsgcikuICBCdXQgKHMgKiBz aXplKSBjYW4gYmUgVkVSWSBsYXJnZSwgdG9vCisgIGxhcmdlIGZvciAzMiBiaXRzLiAgU28gbGV0 J3MgZG8gaXQgdGhpcyB3YXkuICBUaGlzIGFyaXRobWV0aWMgd29ya3MgZm9yCisgIGJ1ZmZlciBz aXplcyB1cCB0byBhYm91dCA1LDAwMCwwMDAuCisqLworI2RlZmluZSBGQUNUT1IgMjBMCisgICAg eiA9ICggKGxvbmcpIHMgKiBGQUNUT1IgKSAvICggKGxvbmcpIHMgKyAobG9uZykgciApOworICAg IHggPSAoIHogKiAoIChsb25nKSBzaXplIC8gRkFDVE9SICkgKTsKKyAgICBpZiAoeCA8IDApIHJl dHVybigtMSk7CQkvKiBDYXRjaCBvdmVyZmxvdyAqLworCisgICAgYmlnc2JzaXogPSB4IC0gNTsJ CQkvKiBTaXplIG9mIHNlbmQgYnVmZmVyICovCisgICAgYmlnc2J1ZiA9IGJpZ2J1ZnA7CQkJLyog QWRkcmVzcyBvZiBzZW5kIGJ1ZmZlciAqLworICAgIGRlYnVnKEYxMDEsImluaWJ1ZnMgYmlnc2Jz aXoiLCIiLGJpZ3Nic2l6KTsKKworICAgIGJpZ3Jic2l6ID0gc2l6ZSAtIHggLSA1OwkJLyogU2l6 ZSBvZiByZWNlaXZlIGJ1ZmZlciAqLworICAgIGJpZ3JidWYgPSBiaWdidWZwICsgeDsJCS8qIEFk ZHJlc3NzIG9mIHJlY2VpdmUgYnVmZmVyICovCisgICAgZGVidWcoRjEwMSwiaW5pYnVmcyBiaWdy YnNpeiIsIiIsYmlncmJzaXopOworCisgICAgcmV0dXJuKDApOwkJCQkvKiBTdWNjZXNzICovCisj ZWxzZQkJCQkJLyogTm8gZHluYW1pYyBhbGxvY2F0aW9uICovCisgICAgYmlnc2JzaXogPSBTQlNJ WjsJCQkvKiBKdXN0IHVzZSB0aGUgc3ltYm9scyAqLworICAgIGJpZ3Jic2l6ID0gUkJTSVo7CQkJ LyogLi4uICovCisgICAgcmV0dXJuKDApOwkJCQkvKiBTdWNjZXNzLiAqLworI2VuZGlmIC8qIERZ TkFNSUMgKi8KK30KKworCisvKiBNIEEgSyBFIEIgVSBGICAtLSAgTWFrZXMgYW5kIGNsZWFycyBh IG5ldyBidWZmZXJzLiAgKi8KKworLyogQ2FsbCB3aXRoOiAqLworLyogIHNsb3RzOiAgbnVtYmVy IG9mIGJ1ZmZlciBzbG90cyB0byBtYWtlLCAxIHRvIDMyICovCisvKiAgYnVmc2l6OiBzaXplIG9m IHRoZSBiaWcgYnVmZmVyICovCisvKiAgYnVmOiAgICBhZGRyZXNzIG9mIHRoZSBiaWcgYnVmZmVy ICovCisvKiAgeHg6ICAgICBwb2ludGVyIHRvIGFycmF5IG9mIHBrdGluZm8gc3RydWN0dXJlcyBm b3IgdGhlc2UgYnVmZmVycyAqLworCisvKiBTdWJkaXZpZGVzIHRoZSBiaWcgYnVmZmVyIGludG8g InNsb3RzIiBidWZmZXJzLiAqLworCisvKiBSZXR1cm5zOiAqLworLyogIC0xIGlmIHRvbyBtYW55 IG9yIHRvbyBmZXcgc2xvdHMgcmVxdWVzdGVkLCAgICAgKi8KKy8qICAtMiBpZiBzbG90cyB3b3Vs ZCBiZSB0b28gc21hbGwuICAgICAgKi8KKy8qICAgbiAocG9zaXRpdmUpIG9uIHN1Y2Nlc3MgPSBz aXplIG9mIG9uZSBidWZmZXIuICovCisvKiAgIHdpdGggcGt0aW5mbyBzdHJ1Y3R1cmUgaW5pdGlh bGl6ZWQgZm9yIHRoaXMgc2V0IG9mIGJ1ZmZlcnMuICovCisKK2ludAorbWFrZWJ1ZihzbG90cyxi dWZzaXosYnVmLHh4KQorLyogbWFrZWJ1ZiAqLyBpbnQgc2xvdHMsIGJ1ZnNpejsgQ0hBUiBidWZb XTsgc3RydWN0IHBrdGluZm8gKnh4OyB7CisKKyAgICBDSEFSICphOworICAgIGludCBpLCBzaXpl OworCisgICAgZGVidWcoRjEwMSwibWFrZWJ1ZiIsIiIsc2xvdHMpOworICAgIGRlYnVnKEYxMDEs Im1ha2VidWYgYnVmc2l6IiwiIixidWZzaXopOworICAgIGRlYnVnKEYxMDEsIm1ha2VidWYgTUFY V1MiLCIiLE1BWFdTKTsKKworICAgIGlmIChzbG90cyA+IE1BWFdTIHx8IHNsb3RzIDwgMSkgcmV0 dXJuKC0xKTsKKyAgICBpZiAoYnVmc2l6IDwgc2xvdHMgKiAxMCApIHJldHVybigtMik7CisKKyAg ICBzaXplID0gYnVmc2l6IC8gc2xvdHM7CQkvKiBEaXZpZGUgdXAgdGhlIGJpZyBidWZmZXIuICov CisgICAgYSA9IGJ1ZjsJCQkJLyogQWRkcmVzcyBvZiBmaXJzdCBwaWVjZS4gKi8KKworICAgIGZv ciAoaSA9IDA7IGkgPCBzbG90czsgaSsrKSB7CisJc3RydWN0IHBrdGluZm8gKnggPSAmeHhbaV07 CisJeC0+YmZfYWRyID0gYTsJCQkvKiBBZGRyZXNzIG9mIHRoaXMgYnVmZmVyICovCisJeC0+YmZf bGVuID0gc2l6ZTsJCS8qIExlbmd0aCBvZiB0aGlzIGJ1ZmZlciAqLworCXgtPnBrX2xlbiA9IDA7 CQkJLyogTGVuZ3RoIG9mIGRhdGEgZmllbGQgKi8KKyAgICAgICAgeC0+cGtfdHlwID0gJyAnOwkJ LyogcGFja2V0IHR5cGUgKi8KKwl4LT5wa19zZXEgPSAtMTsJCQkvKiBwYWNrZXQgc2VxdWVuY2Ug bnVtYmVyICovCisgICAgICAgIHgtPnBrX3J0ciA9IDA7CQkJLyogcmV0cmFuc21pc3Npb25zICov CisJKmEgPSAnXDAnOwkJCS8qIENsZWFyIHRoZSBidWZmZXIgKi8KKwlhICs9IHNpemU7CQkJLyog UG9zaXRpb24gdG8gbmV4dCBidWZmZXIgc2xvdCAqLworICAgIH0KKyAgICByZXR1cm4oc2l6ZSk7 Cit9CisKKy8qICBNIEEgSyBTIEIgVSBGICAtLSAgTWFrZXMgdGhlIHNlbmQtcGFja2V0IGJ1ZmZl ciAgKi8KKworaW50Citta3NidWYoc2xvdHMpIGludCBzbG90czsgeworICAgIGludCBpLCB4Owor ICAgIHNidWZudW0gPSAwOworICAgIGlmICgoeCA9IG1ha2VidWYoc2xvdHMsYmlnc2JzaXosYmln c2J1ZixzX3BrdCkpIDwgMCkgeworCWRlYnVnKEYxMDEsIm1rc2J1ZiBtYWtlYnVmIHJldHVybiIs IiIseCk7CisJcmV0dXJuKHgpOworICAgIH0KKyAgICBkZWJ1ZyhGMTAxLCJta3NidWYgbWFrZWJ1 ZiByZXR1cm4iLCIiLHgpOworICAgIGZvciAoaSA9IDA7IGkgPCA2NDsgaSsrKSB7CQkvKiBJbml0 aWFsaXplIHNlcXVlbmNlLW51bWJlci0gKi8KKwlzc2VxdGJsW2ldID0gLTE7CQkvKiB0by1idWZm ZXItbnVtYmVyIHRhYmxlLiAqLworICAgICAgICBzYWNrdGJsW2ldID0gMDsKKyAgICB9CisgICAg Zm9yIChpID0gMDsgaSA8IE1BWFdTOyBpKyspCisgICAgICBzYnVmdXNlW2ldID0gMDsJCQkvKiBN YXJrIGVhY2ggYnVmZmVyIGFzIGZyZWUgKi8KKyAgICBzYnVmbnVtID0gc2xvdHM7CisgICAgd2N1 ciA9IDA7CisgICAgcmV0dXJuKHgpOworfQorCisvKiAgTSBBIEsgUiBCIFUgRiAgLS0gIE1ha2Vz IHRoZSByZWNlaXZlLXBhY2tldCBidWZmZXIgICovCisKK2ludAorbWtyYnVmKHNsb3RzKSBpbnQg c2xvdHM7IHsKKyAgICBpbnQgaSwgeDsKKyAgICByYnVmbnVtID0gMDsKKyAgICBpZiAoKHggPSBt YWtlYnVmKHNsb3RzLGJpZ3Jic2l6LGJpZ3JidWYscl9wa3QpKSA8IDApIHsKKwlkZWJ1ZyhGMTAx LCJta3JidWYgbWFrZWJ1ZiByZXR1cm4iLCIiLHgpOworCXJldHVybih4KTsKKyAgICB9CisgICAg ZGVidWcoRjEwMSwibWtyYnVmIG1ha2VidWYgcmV0dXJuIiwiIix4KTsKKyAgICBmb3IgKGkgPSAw OyBpIDwgNjQ7IGkrKykgewkJLyogSW5pdGlhbGl6ZSBzZXF1ZW5jZS1udW1iZXItICovCisJcnNl cXRibFtpXSA9IC0xOwkJLyogdG8tYnVmZmVyLW51bWJlciB0YWJsZS4gKi8KKyAgICB9CisgICAg Zm9yIChpID0gMDsgaSA8IE1BWFdTOyBpKyspCisgICAgICByYnVmdXNlW2ldID0gMDsJCQkvKiBN YXJrIGVhY2ggYnVmZmVyIGFzIGZyZWUgKi8KKyAgICByYnVmbnVtID0gc2xvdHM7CisgICAgd2N1 ciA9IDA7CisgICAgcmV0dXJuKHgpOworfQorCisvKiAgVyBJIE4gRCBPIFcgIC0tICBSZXNpemUg dGhlIHdpbmRvdyB0byBuICAqLworCitpbnQKK3dpbmRvdyhuKSBpbnQgbjsgeworICAgIGRlYnVn KEYxMDEsIndpbmRvdyIsIiIsbik7CisgICAgaWYgKG4gPCAxIHx8IG4gPiBNQVhXUykgcmV0dXJu KC0xKTsKKyAgICBpZiAobWtzYnVmKG4pIDwgMCkgcmV0dXJuKC0xKTsKKyAgICBpZiAobWtyYnVm KG4pIDwgMCkgcmV0dXJuKC0xKTsKKyAgICB3c2xvdHMgPSBuOworI2lmZGVmIERFQlVHCisgICAg aWYgKGRlYmxvZykgZHVtcHNidWYoKTsKKyAgICBpZiAoZGVibG9nKSBkdW1wcmJ1ZigpOworI2Vu ZGlmIC8qIERFQlVHICovCisgICAgcmV0dXJuKDApOworfQorCisvKiAgRyBFIFQgUyBCIFUgRiAg LS0gIEFsbG9jYXRlIGEgc2VuZC1idWZmZXIuICAqLworCisvKiAgQ2FsbCB3aXRoIHBhY2tldCBz ZXF1ZW5jZSBudW1iZXIgdG8gYWxsb2NhdGUgYnVmZmVyIGZvci4gKi8KKy8qICBSZXR1cm5zOiAq LworLyogICAtNCBpZiBhcmd1bWVudCBpcyBpbnZhbGlkIChuZWdhdGl2ZSwgb3IgZ3JlYXRlciB0 aGFuIDYzKSAqLworLyogICAtMyBpZiBidWZmZXJzIHdlcmUgdGhvdWdodCB0byBiZSBhdmFpbGFi bGUgYnV0IHJlYWxseSB3ZXJlbid0IChidWchKSAqLworLyogICAtMiBpZiB0aGUgbnVtYmVyIG9m IGZyZWUgYnVmZmVycyBpcyBuZWdhdGl2ZSAoYnVnISkgKi8KKy8qICAgLTEgaWYgbm8gZnJlZSBi dWZmZXJzLiAqLworLyogICAwIG9yIHBvc2l0aXZlLCBwYWNrZXQgc2VxdWVuY2UgbnVtYmVyLCB3 aXRoIGJ1ZmZlciBhbGxvY2F0ZWQgZm9yIGl0LiAqLworCitpbnQKK2dldHNidWYobikgaW50IG47 IHsJCQkvKiBBbGxvY2F0ZSBhIHNlbmQtYnVmZmVyICovCisgICAgaW50IGk7CisgICAgQ0hBUiAq IHAgPSBOVUxMOworICAgIGlmIChuIDwgMCB8fCBuID4gNjMpIHsKKwlkZWJ1ZyhGMTAxLCJnZXRz YnVmIGJhZCBhcmciLCIiLG4pOworCXJldHVybigtNCk7CS8qIEJhZCBhcmd1bWVudCAqLworICAg IH0KKyAgICBkZWJ1ZyhGMTAxLCJnZXRzYnVmIHBhY2tldCIsIiIsbik7CisgICAgLyogZGVidWco RjEwMSwiZ2V0c2J1Ziwgc2J1Zm51bSIsIiIsc2J1Zm51bSk7ICovCisgICAgaWYgKHNidWZudW0g PT0gMCkgcmV0dXJuKC0xKTsJLyogTm8gZnJlZSBidWZmZXJzLiAqLworICAgIGlmIChzYnVmbnVt IDwgMCkgcmV0dXJuKC0yKTsJLyogU2hvdWxkbid0IGhhcHBlbi4gKi8KKyAgICBmb3IgKGkgPSAw OyBpIDwgd3Nsb3RzOyBpKyspCS8qIEZpbmQgdGhlIGZpcnN0IG9uZSBub3QgaW4gdXNlLiAqLwor ICAgICAgaWYgKHNidWZ1c2VbaV0gPT0gMCkgewkJLyogR290IG9uZT8gKi8KKwkgIHNidWZ1c2Vb aV0gPSAxOwkJLyogTWFyayBpdCBhcyBpbiB1c2UuICovCisJICBzYnVmbnVtLS07CQkJLyogT25l IGxlc3MgZnJlZSBidWZmZXIuICovCisJICAqc19wa3RbaV0uYmZfYWRyID0gJ1wwJzsJLyogWmVy byB0aGUgYnVmZmVyIGRhdGEgZmllbGQgKi8KKwkgIHNfcGt0W2ldLnBrX3NlcSA9IG47CQkvKiBQ dXQgaW4gdGhlIHNlcXVlbmNlIG51bWJlciAqLworICAgICAgICAgIHNzZXF0Ymxbbl0gPSBpOwkJ LyogQmFjayBwb2ludGVyIGZyb20gc2VxdWVuY2UgbnVtYmVyICovCisgICAgICAgICAgc2Fja3Ri bFtuXSA9IDA7CQkvKiBBQ0sgZmxhZyAqLworCSAgc19wa3RbaV0ucGtfbGVuID0gMDsJCS8qIERh dGEgZmllbGQgbGVuZ3RoIG5vdyB6ZXJvLiAqLworCSAgc19wa3RbaV0ucGtfdHlwID0gJyAnOwkv KiBCbGFuayB0aGUgcGFja2V0IHR5cGUgdG9vLiAqLworCSAgc19wa3RbaV0ucGtfcnRyID0gMDsJ CS8qIFplcm8gdGhlIHJldHJhbnNtaXNzaW9uIGNvdW50ICovCisJICBwID0gc19wa3RbaV0uYmZf YWRyICsgNzsJLyogU2V0IGdsb2JhbCAiZGF0YSIgYWRkcmVzcy4gKi8KKwkgIGRlYnVnKEYxMDEs ImdldHNidWYgcCIsIiIsMCk7CisJICBkYXRhID0gcDsKKwkgIGlmICghZGF0YSkgeworCSAgICAg IGRlYnVnKEYxMDAsImdldHNidWYgZGF0YSA9PSBOVUxMIiwiIiwwKTsKKyAgICAgICAgICAgICAg cmV0dXJuKC0zKTsKKyAgICAgICAgICB9CisJICBpZiAoKHdoYXQgJiAoV19TRU5EfFdfUkVNTykp ICYmICgrK3djdXIgPiB3bWF4KSkKKwkgICAgd21heCA9IHdjdXI7CQkvKiBGb3Igc3RhdGlzdGlj cy4gKi8KKwkgIC8qIGRlYnVnKEYxMDEsImdldHNidWYgd2N1ciIsIiIsd2N1cik7ICovCisJICBy ZXR1cm4obik7CQkJLyogUmV0dXJuIGl0cyBpbmRleC4gKi8KKyAgICAgIH0KKyAgICBzYnVmbnVt ID0gMDsJCQkvKiBEaWRuJ3QgZmluZCBvbmUuICovCisgICAgcmV0dXJuKC0zKTsJCQkJLyogU2hv dWxkbid0IGhhcHBlbiEgKi8KK30KKworaW50CitnZXRyYnVmKCkgewkJCQkvKiBBbGxvY2F0ZSBh IHJlY2VpdmUgYnVmZmVyICovCisgICAgaW50IGk7CisjaWZkZWYgQ09NTUVOVAorICAgIC8qIFRo aXMgY29kZSBpcyBwcmV0dHkgc3RhYmxlIGJ5IG5vdy4uLiAqLworICAgIC8qIExvb2tzIGxpa2Ug d2UgbWlnaHQgbmVlZCB0aGlzIGFmdGVyIGFsbCAqLworICAgIGRlYnVnKEYxMDEsImdldHJidWYg cmJ1Zm51bSIsIiIscmJ1Zm51bSk7CisgICAgZGVidWcoRjEwMSwiZ2V0cmJ1ZiB3c2xvdHMiLCIi LHdzbG90cyk7CisgICAgZGVidWcoRjEwMSwiZ2V0cmJ1ZiBkdW0wMDIiLCIiLGR1bTAwMik7Cisg ICAgZGVidWcoRjEwMSwiZ2V0cmJ1ZiBkdW0wMDMiLCIiLGR1bTAwMyk7CisjZW5kaWYgLyogQ09N TUVOVCAqLworICAgIGlmIChyYnVmbnVtID09IDApIHJldHVybigtMSk7CS8qIE5vIGZyZWUgYnVm ZmVycy4gKi8KKyAgICBpZiAocmJ1Zm51bSA8IDApIHJldHVybigtMik7CS8qIFNob3VsZG4ndCBo YXBwZW4uICovCisgICAgZm9yIChpID0gMDsgaSA8IHdzbG90czsgaSsrKQkvKiBGaW5kIHRoZSBm aXJzdCBvbmUgbm90IGluIHVzZS4gKi8KKyAgICAgIGlmIChyYnVmdXNlW2ldID09IDApIHsJCS8q IEdvdCBvbmU/ICovCisJICByYnVmdXNlW2ldID0gMTsJCS8qIE1hcmsgaXQgYXMgaW4gdXNlLiAq LworCSAgKnJfcGt0W2ldLmJmX2FkciA9ICdcMCc7CS8qIFplcm8gdGhlIGJ1ZmZlciBkYXRhIGZp ZWxkICovCisJICByYnVmbnVtLS07CQkJLyogT25lIGxlc3MgZnJlZSBidWZmZXIuICovCisJICBk ZWJ1ZyhGMTAxLCJnZXRyYnVmIG5ldyByYnVmbnVtIiwiIixyYnVmbnVtKTsKKwkgIGlmICgod2hh dCAmIFdfUkVDVikgJiYgKCsrd2N1ciA+IHdtYXgpKQorCSAgICB3bWF4ID0gd2N1cjsJCS8qIEZv ciBzdGF0aXN0aWNzLiAqLworCSAgLyogZGVidWcoRjEwMSwiZ2V0cmJ1ZiB3Y3VyIiwiIix3Y3Vy KTsgKi8KKwkgIHJldHVybihpKTsJCQkvKiBSZXR1cm4gaXRzIGluZGV4LiAqLworICAgICAgfQor ICAgIC8qIGRlYnVnKEYxMDEsImdldHJidWYgZm91bHVwIiwiIixpKTsgKi8KKyAgICByYnVmbnVt ID0gMDsJCQkvKiBEaWRuJ3QgZmluZCBvbmUuICovCisgICAgcmV0dXJuKC0zKTsJCQkJLyogU2hv dWxkbid0IGhhcHBlbiEgKi8KK30KKworLyogIEYgUiBFIEUgUyBCIFUgRiAgLS0gIEZyZWUgc2Vu ZC1idWZmZXIgZm9yIGdpdmVuIHBhY2tldCBzZXF1ZW5jZSBudW1iZXIgKi8KKworLyogIFJldHVy bnM6ICAqLworLyogICAxIHVwb24gc3VjY2VzcyAgKi8KKy8qICAtMSBpZiBzcGVjaWZpZWQgYnVm ZmVyIGRvZXMgbm90IGV4aXN0ICovCisKK2ludAorZnJlZXNidWYobikgaW50IG47IHsJCQkvKiBS ZWxlYXNlIHNlbmQtYnVmZmVyIGZvciBwYWNrZXQgbi4gKi8KKyAgICBpbnQgaTsKKworICAgIGRl YnVnKEYxMDEsImZyZWVzYnVmIiwiIixuKTsKKyAgICBpZiAobiA8IDAgfHwgbiA+IDYzKQkJLyog Tm8gc3VjaCBwYWNrZXQuICovCisgICAgICByZXR1cm4oLTEpOworICAgIGkgPSBzc2VxdGJsW25d OwkJCS8qIEdldCB0aGUgd2luZG93IHNsb3QgbnVtYmVyLiAqLworICAgIGlmIChpID4gLTEgJiYg aSA8PSB3c2xvdHMpIHsKKwlzc2VxdGJsW25dID0gLTE7CQkvKiBJZiB2YWxpZCwgcmVtb3ZlIGZy b20gc2VxdGJsICovCisgCXNidWZudW0rKzsJCQkvKiBhbmQgY291bnQgb25lIG1vcmUgZnJlZSBi dWZmZXIgKi8KKwlzYnVmdXNlW2ldID0gMDsJCQkvKiBhbmQgbWFyayBpdCBhcyBmcmVlLCAqLwor CWlmICh3aGF0ICYgKFdfU0VORHxXX1JFTU8pKQkvKiBkZWNyZW1lbnQgYWN0aXZlIHNsb3RzICov CisJICB3Y3VyLS07CQkJLyogZm9yIHN0YXRpc3RpY3MgYW5kIGRpc3BsYXkuICovCisgICAgfSBl bHNlIHsKKwlkZWJ1ZyhGMTAxLCIgc3NlcXRibFtuXSIsIiIsc3NlcXRibFtuXSk7CisJcmV0dXJu KC0xKTsKKyAgICB9CisKKy8qIFRoZSBmb2xsb3dpbmcgaXMgZG9uZSBvbmx5IHNvIGR1bXBlZCBi dWZmZXJzIHdpbGwgbG9vayByaWdodC4gKi8KKworICAgIGlmICgxKSB7CisJKnNfcGt0W2ldLmJm X2FkciA9ICdcMCc7CS8qIFplcm8gdGhlIGJ1ZmZlciBkYXRhIGZpZWxkICovCisJc19wa3RbaV0u cGtfc2VxID0gLTE7CQkvKiBJbnZhbGlkYXRlIHRoZSBzZXF1ZW5jZSBudW1iZXIgKi8KKwlzX3Br dFtpXS5wa19sZW4gPSAwOwkJLyogRGF0YSBmaWVsZCBsZW5ndGggbm93IHplcm8uICovCisJc19w a3RbaV0ucGtfdHlwID0gJyAnOwkJLyogQmxhbmsgdGhlIHBhY2tldCB0eXBlIHRvby4gKi8KKwlz X3BrdFtpXS5wa19ydHIgPSAwOwkJLyogQW5kIHRoZSByZXRyaWVzIGZpZWxkLiAqLworICAgIH0K KyAgICByZXR1cm4oMSk7Cit9CisKK2ludAorZnJlZXJidWYoaSkgaW50IGk7IHsJCQkvKiBSZWxl YXNlIHJlY2VpdmUtYnVmZmVyIHNsb3QgImkiLiAqLworICAgIGludCBuOworCisvKiBOT1RFICEh IEN1cnJlbnRseSwgdGhpcyBmdW5jdGlvbiBmcmVlcyB0aGUgaW5kaWNhdGVkIGJ1ZmZlciwgYnV0 ICovCisvKiBkb2VzIE5PVCBlcmFzZSB0aGUgZGF0YS4gIFRoZSBwcm9ncmFtIGNvdW50cyBvbiB0 aGlzLiAgV2lsbCBmaW5kIGEgKi8KKy8qIGJldHRlciB3YXkgbGF0ZXIuLi4uICovCisKKyAgICAv KiBkZWJ1ZyhGMTAxLCJmcmVlcmJ1Ziwgc2xvdCIsIiIsaSk7ICovCisgICAgaWYgKGkgPCAwIHx8 IGkgPj0gd3Nsb3RzKSB7CQkvKiBObyBzdWNoIHNsb3QuICovCisJZGVidWcoRjEwMSwiZnJlZXJi dWYgbm8gc3VjaCBzbG90IiwiIixpKTsKKwlyZXR1cm4oLTEpOworICAgIH0KKyAgICBuID0gcl9w a3RbaV0ucGtfc2VxOwkJLyogR2V0IHRoZSBwYWNrZXQgc2VxdWVuY2UgbnVtYmVyICovCisgICAg ZGVidWcoRjEwMSwiZnJlZXJidWYgcGFja2V0IiwiIixuKTsKKyAgICBpZiAobiA+IC0xICYmIG4g PCA2NCkJCS8qIElmIHZhbGlkLCByZW1vdmUgZnJvbSBzZXF0YmwgKi8KKyAgICAgIHJzZXF0Ymxb bl0gPSAtMTsKKyAgICBpZiAocmJ1ZnVzZVtpXSAhPSAwKSB7CQkvKiBJZiByZWFsbHkgYWxsb2Nh dGVkLCAqLworCXJidWZ1c2VbaV0gPSAwOwkJCS8qIG1hcmsgaXQgYXMgZnJlZSwgKi8KKwlyYnVm bnVtKys7CQkJLyogYW5kIGNvdW50IG9uZSBtb3JlIGZyZWUgYnVmZmVyLiAqLworCWlmICh3aGF0 ICYgV19SRUNWKQkJLyogS2VlcCB0cmFjayBvZiBjdXJyZW50IHNsb3RzICovCisJICB3Y3VyLS07 CQkJLyogIGZvciBzdGF0aXN0aWNzIGFuZCBkaXNwbGF5ICovCisJZGVidWcoRjEwMSwiZnJlZXJi dWYgcmJ1Zm51bSIsIiIscmJ1Zm51bSk7CisgICAgfQorCisvKiBUaGUgZm9sbG93aW5nIGlzIGRv bmUgb25seSBzbyBkdW1wZWQgYnVmZmVycyB3aWxsIGxvb2sgcmlnaHQuICovCisKKyAgICBpZiAo MSkgeworICAgICAvKiAqcl9wa3RbaV0uYmZfYWRyID0gJ1wwJzsgKi8JLyogWmVybyB0aGUgYnVm ZmVyIGRhdGEgZmllbGQgKi8KKwlyX3BrdFtpXS5wa19zZXEgPSAtMTsJCS8qIEFuZCBmcm9tIHBh Y2tldCBsaXN0ICovCisJcl9wa3RbaV0ucGtfbGVuID0gMDsJCS8qIERhdGEgZmllbGQgbGVuZ3Ro IG5vdyB6ZXJvLiAqLworCXJfcGt0W2ldLnBrX3R5cCA9ICcgJzsJCS8qIEJsYW5rIHRoZSBwYWNr ZXQgdHlwZSB0b28uICovCisJcl9wa3RbaV0ucGtfcnRyID0gMDsJCS8qIEFuZCB0aGUgcmV0cmll cyBmaWVsZC4gKi8KKyAgICB9CisgICAgcmV0dXJuKDEpOworfQorCisvKiBUaGlzIGlzIGxpa2Ug ZnJlZXJidWYsIGV4Y2VwdCBpdCdzIGNhbGxlZCB3aXRoIGEgcGFja2V0IHNlcXVlbmNlIG51bWJl ciAqLworLyogcmF0aGVyIHRoYW4gYSBwYWNrZXQgYnVmZmVyIGluZGV4LiAqLworCitWT0lECitm cmVlcnBrdChzZXEpIGludCBzZXE7IHsKKyAgICBpbnQgazsKKyAgICBkZWJ1ZyhGMTAxLCJmcmVl cnBrdCBzZXEiLCIiLHNlcSk7CisgICAgayA9IHJzZXF0Ymxbc2VxXTsKKyAgICAvKiBkZWJ1ZyhG MTAxLCJmcmVlcnBrdCBrIiwiIixrKTsgKi8KKyAgICBpZiAoayA+IC0xKSB7CisJayA9IGZyZWVy YnVmKGspOworCS8qIGRlYnVnKEYxMDEsImZyZWVycGt0IGZyZWVyYnVmIiwiIixrKTsgKi8KKyAg ICB9Cit9CisKKworLyogIEMgSCBLIFcgSSBOICAtLSAgQ2hlY2sgaWYgcGFja2V0IG4gaXMgaW4g d2luZG93LiAqLworCisvKiAgUmV0dXJuczogKi8KKy8qICAgIDAgaWYgaXQgaXMgaW4gdGhlIGN1 cnJlbnQgd2luZG93LCAgKi8KKy8qICAgKzEgaWYgaXQgd291bGQgaGF2ZSBiZWVuIGluIHByZXZp b3VzIHdpbmRvdyAoZS5nLiBpZiBhY2sgd2FzIGxvc3QpLCAqLworLyogICAtMSBpZiBpdCBpcyBv dXRzaWRlIGFueSB3aW5kb3cgKHByb3RvY29sIGVycm9yKSwgICAqLworLyogICAtMiBpZiBlaXRo ZXIgb2YgdGhlIGFyZ3VtZW50IHBhY2tldCBudW1iZXJzIGlzIG91dCBvZiByYW5nZS4gICovCisK Ky8qIENhbGwgd2l0aCBwYWNrZXQgbnVtYmVyIHRvIGNoZWNrIChuKSwgbG93ZXN0IHBhY2tldCBu dW1iZXIgaW4gd2luZG93ICovCisvKiAoYm90dG9tKSwgYW5kIG51bWJlciBvZiBzbG90cyBpbiB3 aW5kb3cgKHNsb3RzKS4gICovCisKK2ludAorY2hrd2luKG4sYm90dG9tLHNsb3RzKSBpbnQgbiwg Ym90dG9tLCBzbG90czsgeworICAgIGludCB0b3AsIHByZXY7CisKKyAgICBkZWJ1ZyhGMTAxLCJj aGt3aW4gcGFja2V0IiwiIixuKTsKKyAgICBkZWJ1ZyhGMTAxLCJjaGt3aW4gd2lubG8iLCIiLGJv dHRvbSk7CisgICAgZGVidWcoRjEwMSwiY2hrd2luIHNsb3RzIiwiIixzbG90cyk7CisKKy8qIEZp cnN0IGRvIHRoZSBlYXN5IGFuZCBjb21tb24gY2FzZXMsIHdoZXJlIHRoZSB3aW5kb3dzIGFyZSBu b3Qgc3BsaXQuICovCisKKyAgICBpZiAobiA8IDAgfHwgbiA+IDYzIHx8IGJvdHRvbSA8IDAgfHwg Ym90dG9tID4gNjMpCisgICAgICByZXR1cm4oLTIpOworCisgICAgaWYgKG4gPT0gYm90dG9tKSBy ZXR1cm4oMCk7CQkvKiBJbiBhIHBlcmZlY3Qgd29ybGQuLi4gKi8KKworICAgIHRvcCA9IGJvdHRv bSArIHNsb3RzOwkJLyogQ2FsY3VsYXRlIHdpbmRvdyB0b3AuICovCisgICAgaWYgKHRvcCA8IDY0 ICYmIG4gPCB0b3AgJiYgbiA+PSBib3R0b20pCisgICAgICByZXR1cm4oMCk7CQkJLyogSW4gY3Vy cmVudCB3aW5kb3cuICovCisKKyAgICBwcmV2ID0gYm90dG9tIC0gc2xvdHM7CQkvKiBCb3R0b20g b2YgcHJldmlvdXMgd2luZG93LiAqLworICAgIGlmIChwcmV2ID4gLTEgJiYgbiA8IGJvdHRvbSAm JiBuID4gcHJldikKKyAgICAgIHJldHVybigxKTsJCQkvKiBJbiBwcmV2aW91cy4gKi8KKworLyog Tm93IGNvbnNpZGVyIHRoZSBjYXNlIHdoZXJlIHRoZSBjdXJyZW50IHdpbmRvdyBpcyBzcGxpdC4g Ki8KKworICAgIGlmICh0b3AgPiA2MykgewkJCS8qIFdyYXBhcm91bmQuLi4gKi8KKwl0b3AgLT0g NjQ7CQkJLyogR2V0IG1vZHVsby02NCBzZXF1ZW5jZSBudW1iZXIgKi8KKwlpZiAobiA8IHRvcCB8 fCBuID49IGJvdHRvbSkgeworCSAgICByZXR1cm4oMCk7CQkJLyogSW4gY3VycmVudCB3aW5kb3cu ICovCisJfSBlbHNlIHsJCQkvKiBOb3QgaW4gY3VycmVudCB3aW5kb3cuICovCisJICAgIGlmIChu IDwgYm90dG9tICYmIG4gPj0gcHJldikgLyogUHJldmlvdXMgd2luZG93IGNhbid0IGJlIHNwbGl0 LiAqLworCSAgICAgIHJldHVybigxKTsJCS8qIEluIHByZXZpb3VzIHdpbmRvdy4gKi8KKwkgICAg ZWxzZQorCSAgICAgIHJldHVybigtMSk7CQkvKiBOb3QgaW4gcHJldmlvdXMgd2luZG93LiAqLwor CX0KKyAgICB9CisKKy8qIE5vdyB0aGUgY2FzZSB3aGVyZSBjdXJyZW50IHdpbmRvdyBub3Qgc3Bs aXQsIGJ1dCBwcmV2aW91cyB3aW5kb3cgaXMuICovCisKKyAgICBpZiAocHJldiA8IDApIHsJCQkv KiBJcyBwcmV2aW91cyB3aW5kb3cgc3BsaXQ/ICovCisJcHJldiArPSA2NDsJCQkvKiBZZXMuICov CisJaWYgKG4gPCBib3R0b20gfHwgbiA+PSBwcmV2KQorCSAgcmV0dXJuKDEpOwkJCS8qIEluIHBy ZXZpb3VzIHdpbmRvdy4gKi8KKyAgICB9IGVsc2UgewkJCQkvKiBQcmV2aW91cyB3aW5kb3cgbm90 IHNwbGl0LiAqLworCWlmIChuIDwgYm90dG9tICYmIG4gPj0gcHJldikKKwkgIHJldHVybigxKTsJ CQkvKiBJbiBwcmV2aW91cyB3aW5kb3cuICovCisgICAgfQorCisvKiBJdCdzIG5vdCBpbiB0aGUg Y3VycmVudCB3aW5kb3csIGFuZCBub3QgaW4gdGhlIHByZXZpb3VzIHdpbmRvdy4uLiAqLworCisg ICAgcmV0dXJuKC0xKTsJCQkJLyogU28gaXQncyBub3QgaW4gYW55IHdpbmRvdy4gKi8KK30KKwor aW50CitkdW1wc2J1ZigpIHsJCQkJLyogRHVtcCBzZW5kLWJ1ZmZlcnMgKi8KKyNpZmRlZiBERUJV RworICAgIGludCBqLCB4LCB6OwkJCS8qIHRvIGRlYnVnIGxvZy4gKi8KKworICAgIGlmICghIGRl YmxvZykgcmV0dXJuKDApOworICAgIHggPSB6c291dGwoWkRGSUxFLCJTRU5EIEJVRkZFUlM6Iik7 CisgICAgaWYgKHggPCAwKSB7CisJZGVibG9nID0gMDsKKwlyZXR1cm4oMCk7CisgICAgfQorICAg IHg9enNvdXRsKFpERklMRSwiYnVmZmVyIGludXNlIGFkZHJlc3MgbGVuZ3RoIGRhdGEgdHlwZSBz ZXEgZmxhZyByZXRyaWVzIik7CisgICAgaWYgKHggPCAwKSB7CisJZGVibG9nID0gMDsKKwlyZXR1 cm4oMCk7CisgICAgfQorICAgIGZvciAoaiA9IDA7IGogPCB3c2xvdHM7IGorKykgeworCWlmICgh c2J1ZnVzZVtqXSkKKwkgIGNvbnRpbnVlOworCXogPSAoKHVuc2lnbmVkIGxvbmcpKHNfcGt0W2pd LmJmX2FkcikpICYgMHhmZmZmOworCisJc3ByaW50Zih4YnVmLAkJCS8qIHNhZmUgKDIwMCkgKi8K KwkJIiU0ZCU2ZCUxMGQlNWQlNmQlNGMlNWQlNmRcbiIsCisJCWosCisJCXNidWZ1c2Vbal0sCisJ CS8qIEF2b2lkIHdhcm5pbmdzIHdoZW4gYWRkcmVzc2VzIGFyZSBiaWdnZXIgdGhhbiBpbnRzICov CisJCXosCisJCXNfcGt0W2pdLmJmX2xlbiwKKwkJc19wa3Rbal0ucGtfbGVuLAorCQlzX3BrdFtq XS5wa190eXAsCisJCXNfcGt0W2pdLnBrX3NlcSwKKwkJc19wa3Rbal0ucGtfcnRyCisJCSk7CisJ aWYgKHpzb3V0KFpERklMRSx4YnVmKSA8IDApICB7CisJICAgIGRlYmxvZyA9IDA7CisJICAgIHJl dHVybigwKTsKKwl9CisJaWYgKHNfcGt0W2pdLnBrX2FkcikgeworCSAgICB4ID0gKGludClzdHJs ZW4oKGNoYXIgKikgc19wa3Rbal0ucGtfYWRyKTsKKwkgICAgaWYgKHgpCisJICAgICAgc3ByaW50 Zih4YnVmLAkJLyogc2FmZSAoY2hlY2tlZCkgKi8KKwkJICAgICAgIlslLjcycyVzXVxuIixzX3Br dFtqXS5wa19hZHIsIHggPiA3MiA/ICIuLi4iIDogIiIpOworCSAgICBlbHNlCisJICAgICAgc3By aW50Zih4YnVmLCJbKGVtcHR5IHN0cmluZyldXG4iKTsgLyogc2FmZSAoMjAwKSAqLworCX0gZWxz ZSB7CisJICAgIHNwcmludGYoeGJ1ZiwiWyhudWxsIHBvaW50ZXIpXVxuIik7CS8qIHNhZmUgKDIw MCkgKi8KKwl9CisJaWYgKHpzb3V0KFpERklMRSx4YnVmKSA8IDApIHsKKwkgICAgZGVibG9nID0g MDsKKwkgICAgcmV0dXJuKDApOworCX0KKyAgICB9CisgICAgc3ByaW50Zih4YnVmLCJmcmVlOiAl ZCwgd2lubG86ICVkXG4iLCBzYnVmbnVtLCB3aW5sbyk7IC8qIHNhZmUgKDIwMCkgKi8KKyAgICBp ZiAoenNvdXQoWkRGSUxFLHhidWYpIDwgMCkgeworCWRlYmxvZyA9IDA7CisJcmV0dXJuKDApOwor ICAgIH0KKyNlbmRpZiAvKiBERUJVRyAqLworICAgIHJldHVybigwKTsKK30KK2ludAorZHVtcHJi dWYoKSB7CQkJCS8qIER1bXAgcmVjZWl2ZS1idWZmZXJzICovCisjaWZkZWYgREVCVUcKKyAgICBp bnQgaiwgeCwgejsKKyAgICBpZiAoISBkZWJsb2cpIHJldHVybigwKTsKKyAgICBpZiAoenNvdXRs KFpERklMRSwiUkVDRUlWRSBCVUZGRVJTOiIpIDwgMCkgeworCWRlYmxvZyA9IDA7CisJcmV0dXJu KDApOworICAgIH0KKyAgICB4PXpzb3V0bChaREZJTEUsImJ1ZmZlciBpbnVzZSBhZGRyZXNzIGxl bmd0aCBkYXRhIHR5cGUgc2VxIGZsYWcgcmV0cmllcyIpOworICAgIGlmICh4IDwgMCkgeworCWRl YmxvZyA9IDA7CisJcmV0dXJuKDApOworICAgIH0KKyAgICBmb3IgKCBqID0gMDsgaiA8IHdzbG90 czsgaisrICkgeworCWlmICghcmJ1ZnVzZVtqXSkKKwkgIGNvbnRpbnVlOworCXogPSAoKHVuc2ln bmVkIGxvbmcpKHJfcGt0W2pdLmJmX2FkcikpICYgMHhmZmZmOworCXNwcmludGYoeGJ1ZiwJCQkv KiAyMDAsIHNhZmUgKi8KKwkJIiU0ZCU2ZCUxMGQlNWQlNmQlNGMlNWQlNmRcbiIsCisJCWosCisJ CXJidWZ1c2Vbal0sCisJCS8qIEF2b2lkIHdhcm5pbmdzIHdoZW4gYWRkcmVzc2VzIGFyZSBiaWdn ZXIgdGhhbiBpbnRzICovCisJCXosCisJCXJfcGt0W2pdLmJmX2xlbiwKKwkJcl9wa3Rbal0ucGtf bGVuLAorCQlyX3BrdFtqXS5wa190eXAsCisJCXJfcGt0W2pdLnBrX3NlcSwKKwkJcl9wa3Rbal0u cGtfcnRyCisJCSk7CisJaWYgKHpzb3V0KFpERklMRSx4YnVmKSA8IDApIHsKKwkgICAgZGVibG9n ID0gMDsKKwkgICAgcmV0dXJuKDApOworCX0KKwl4ID0gKGludClzdHJsZW4oKGNoYXIgKilyX3Br dFtqXS5iZl9hZHIpOworCXNwcmludGYoeGJ1ZiwJCQkvKiBzYWZlIChjaGVja2VkKSAqLworCQki WyUuNzJzJXNdXG4iLHJfcGt0W2pdLmJmX2FkciwgeCA+IDcyID8gIi4uLiIgOiAiIik7CisJaWYg KHpzb3V0KFpERklMRSx4YnVmKSA8IDApICB7CisJICAgIGRlYmxvZyA9IDA7CisJICAgIHJldHVy bigwKTsKKwl9CisgICAgfQorICAgIHNwcmludGYoeGJ1ZiwiZnJlZTogJWQsIHdpbmxvOiAlZFxu IiwgcmJ1Zm51bSwgd2lubG8pOyAvKiBzYWZlICgyMDApICovCisgICAgaWYgKHpzb3V0KFpERklM RSx4YnVmKSA8IDApICB7CisJZGVibG9nID0gMDsKKwlyZXR1cm4oMCk7CisgICAgfQorI2VuZGlm IC8qIERFQlVHICovCisgICAgcmV0dXJuKDApOworfQorCisvKiAgUyBBIFQgVCBSICAtLSAgU2Vu ZCBhbiBBdHRyaWJ1dGUgUGFja2V0ICAqLworCisvKgorICBTZW5kcyBhdHRyaWJ1dGUgcGFja2V0 KHMpIGZvciB0aGUgY3VycmVudCBmaWxlLiAgSWYgdGhlIGluZm8gd2lsbCBub3QKKyAgZml0IGlu dG8gb25lIHBhY2tldCwgaXQgY2FuIGJlIGNhbGxlZCByZXBlYXRlZGx5IHVudGlsIGFsbCB0aGUg ZmllbGRzCisgIHRoYXQgd2lsbCBmaXQgYXJlIHNlbnQuCisKKyAgQ2FsbCB3aXRoOgorICAgIHhw ID09IDAgaWYgd2UncmUgc2VuZGluZyBhIHJlYWwgZmlsZSAoRiBwYWNrZXQpLCBvcjoKKyAgICB4 cCAhPSAwIGZvciBzY3JlZW4gZGF0YSAoWCBwYWNrZXQpLgorICBBbmQ6CisgICAgZmxhZyA9PSAx IGZvciBmaXJzdCBBIHBhY2tldAorICAgIGZsYWcgPT0gMCBmb3Igc3Vic2VxdWVudCBBIHBhY2tl dHMuCisgIFJldHVybnM6CisgICAgMSBvciBncmVhdGVyIGlmIGFuIEEgcGFja2V0IHdhcyBzZW50 LCBvcjoKKyAgICAwIGlmIGFuIFMtcGFja2V0IHdhcyBub3Qgc2VudCBiZWNhdXNlIHRoZXJlIHdh cyBubyBkYXRhIHRvIHNlbmQgb3IKKyAgICAgIHRoZXJlIHdhcyBubyBkYXRhIGxlZnQgdGhhdCB3 YXMgc2hvcnQgZW5vdWdoIHRvIHNlbmQsIG9yOgorICAgLTEgb24gYW55IGtpbmQgb2YgZXJyb3Iu CisqLworCisvKiAoZG9uJ3QpICNkZWZpbmUgVFNPRk9STUFUICovCisvKiB3aGljaCB3YXMgb25s eSBmb3IgbWFraW5nIEMtS2VybWl0IHNlbmQgVFNPLUtlcm1pdC1saWtlIEEgcGFja2V0cyAqLwor LyogdG8gdHJ5IHRvIHRyYWNrIGRvd24gYSBwcm9ibGVtIHNvbWVib2R5IHJlcG9ydGVkLi4uICov CisKK2ludAorc2F0dHIoeHAsIGZsYWcpIGludCB4cCwgZmxhZzsgewkJLyogU2VuZCBBdHRyaWJ1 dGVzICovCisKKyAgICBzdGF0aWMgaW50IG1heDsJCQkvKiBNYXhpbXVtIGxlbmd0aCBmb3IgQXR0 cmlidXRlcyAqLworICAgIHN0YXRpYyBzaG9ydCBkb25lWzk1XTsJCS8qIEZpZWxkLWNvbXBsZXRl IGFycmF5ICovCisgICAgc3RhdGljIHN0cnVjdCB6YXR0ciB4OwkJLyogRmlsZSBhdHRyaWJ1dGUg c3RydWN0ICovCisgICAgc3RhdGljIGNoYXIgeGRhdGVbMjRdOworCisgICAgZXh0ZXJuIGNoYXIg KiBja3N5c2lkOworCisgICAgLyogU29tZSBleHRyYSBmbGFncyBhcmUgdXNlZCBiZWNhdXNlIHRo ZSAiZG9uZSIgYXJyYXkgaXMgc3BhcnNlICovCisKKyAgICBpbnQgaSwgaiwgcmMsIGFsbiwgbGVm dCA9IDAsIG51bXNldCA9IDAsIHhiaW4gPSAwOyAvKiBXb3JrZXJzICovCisgICAgaW50IG5vdGFm aWxlID0gMDsKKyAgICBjaGFyICp0cCwgYzsKKworICAgIG5vdGFmaWxlID0gc25kYXJyYXkgfHwg cGlwZXNlbmQgfHwKKyNpZmRlZiBQSVBFU0VORAorICAgICAgc25kZmlsdGVyIHx8CisjZW5kaWYg LyogUElQRVNFTkQgKi8KKwljYWxpYnJhdGU7CisKKyAgICBkZWJ1ZyhGMTAxLCJzYXR0ciBmbGFn IiwiIixmbGFnKTsKKyAgICBpZiAoIWZsYWcpCQkJCS8qIE5vIG1vcmUgYXR0cmlidXRlcyB0byBz ZW5kICovCisgICAgICBpZiAoZG9uZVt4dW5jaGFyKCdAJyldKQorCXJldHVybigwKTsKKworICAg IC8qIEluaXRpYWxpemUgQXR0cmlidXRlIG1lY2hhbmlzbSAqLworCisgICAgaWYgKGZsYWcpIHsJ CQkJLyogRmlyc3QgdGltZSBoZXJlIGZvciB0aGlzIGZpbGU/ICovCisJaW5pdGF0dHIoJngpOwkJ CS8qIEJsYW5rIG91dCBhbGwgdGhlIGZpZWxkcy4gKi8KKwlmb3IgKGogPSAwOyBqIDwgOTU7IGor KykJLyogSW5pdCBhcnJheSBvZiBjb21wbGV0ZWQgZmllbGRzICovCisJICBkb25lW2pdID0gMDsK KwltYXggPSBtYXhkYXRhKCk7CQkvKiBHZXQgbWF4aW11bSBkYXRhIGZpZWxkIGxlbmd0aCAqLwor CWlmIChub3RhZmlsZSB8fCB4cCA9PSAxKSB7CS8qIElzIGl0IG5vdCBhIHJlYWwgZmlsZT8gKi8K KwkgICAgZXh0ZXJuIGNoYXIgKiB6em5kYXRlKCk7CisJICAgIGNoYXIgKiBwOworCSAgICBpbnQg aTsKKyNpZmRlZiBDQUxJQlJBVEUKKwkgICAgaWYgKGNhbGlicmF0ZSkgewkJLyogQ2FsaWJyYXRp b24gcnVuLi4uICovCisJCXgubGVuZ3RoayA9IGNhbGlicmF0ZSAvIDEwMjRMOyAvKiBXZSBrbm93 IHRoZSBsZW5ndGggKi8KKwkJeC5sZW5ndGggPSBjYWxpYnJhdGU7CisJICAgIH0KKyNlbmRpZiAv KiBDQUxJQlJBVEUgKi8KKwkgICAgeC5zeXN0ZW1pZC52YWwgPSBja3N5c2lkOwkvKiBTeXN0ZW0g SUQgKi8KKwkgICAgeC5zeXN0ZW1pZC5sZW4gPSAoaW50KXN0cmxlbihja3N5c2lkKTsKKwkgICAg Y2tzdHJuY3B5KHhkYXRlLHp6bmRhdGUoKSwyNCk7CisJICAgIHhkYXRlWzhdID0gU1A7CisJICAg IHp0aW1lKCZwKTsKKwkgICAgZm9yIChpID0gMTE7IGkgPCAxOTsgaSsrKQkvKiBjb3B5IGhoOm1t OnNzICovCisJICAgICAgeGRhdGVbaSAtIDJdID0gcFtpXTsJLyogdG8geGRhdGUgKi8KKwkgICAg eGRhdGVbMTddID0gTlVMOwkJLyogdGVybWluYXRlICovCisJICAgIHguZGF0ZS52YWwgPSB4ZGF0 ZTsKKwkgICAgeC5kYXRlLmxlbiA9IDE3OworCSAgICBkZWJ1ZyhGMTExLCJzYXR0ciBub3RhZmls ZSBkYXRlIix4LmRhdGUudmFsLHguZGF0ZS5sZW4pOworCX0gZWxzZSB7CQkJLyogUmVhbCBmaWxl ICovCisJICAgIHJjID0genNhdHRyKCZ4KTsJCS8qIEdldCBhdHRyaWJ1dGVzIGZvciB0aGlzIGZp bGUgICovCisJICAgIGRlYnVnKEYxMDEsInNhdHRyIHpzYXR0ciIsIiIscmMpOworCSAgICBpZiAo cmMgPCAwKQkJCS8qIENhbid0IGdldCAnZW0gc28gZG9uJ3Qgc2VuZCAnZW0gKi8KKwkgICAgICBy ZXR1cm4oMCk7CisJICAgIGRlYnVnKEYxMDEsInNhdHRyIGluaXQgbWF4IiwiIixtYXgpOworCX0K KyAgICB9CisgICAgaWYgKG54dHBrdCgpIDwgMCkJCQkvKiBHb3QgJ2VtLCBnZXQgbmV4dCBwYWNr ZXQgbnVtYmVyICovCisgICAgICByZXR1cm4oLTEpOwkJCS8qIEJhZCBuZXdzIGlmIHdlIGNhbid0 ICovCisKKyAgICBpID0gMDsJCQkJLyogSW5pdCBkYXRhIGZpZWxkIGNoYXJhY3RlciBudW1iZXIg Ki8KKworICAgIC8qIERvIGVhY2ggYXR0cmlidXRlIHVzaW5nIGZpcnN0LWZpdCBtZXRob2QsIG1h cmtpbmcgYXMgd2UgZ28gKi8KKyAgICAvKiBUaGlzIGlzIHJhdGhlciBsb25nIGFuZCByZXBpdGl0 aW91cyAtIGNvdWxkIGJlIGRvbmUgbW9yZSBjbGV2ZXJseSAqLworCisgICAgaWYgKGF0c2lkbyAm JiAhZG9uZVt4dW5jaGFyKGMgPSAnLicpXSkgeyAvKiBTeXN0ZW0gdHlwZSAqLworCWlmIChtYXgg LSBpID49IHguc3lzdGVtaWQubGVuICsgMikgeyAvKiBFbm91Z2ggc3BhY2UgPyAqLworCSAgICBk YXRhW2krK10gPSBjOwkJICAgICAvKiBZZXMsIGFkZCBwYXJhbWV0ZXIgKi8KKwkgICAgZGF0YVtp KytdID0gdG9jaGFyKHguc3lzdGVtaWQubGVuKTsJIC8qIEFkZCBsZW5ndGggKi8KKwkgICAgZm9y IChqID0gMDsgaiA8IHguc3lzdGVtaWQubGVuOyBqKyspIC8qIEFkZCBkYXRhICovCisJICAgICAg ZGF0YVtpKytdID0geC5zeXN0ZW1pZC52YWxbal07CisJICAgIG51bXNldCsrOwkJCS8qIENvdW50 IHRoYXQgd2UgZGlkIGF0IGxlYXN0IG9uZSAqLworCSAgICBkb25lW3h1bmNoYXIoYyldID0gMTsJ LyogTWFyayB0aGlzIGF0dHJpYnV0ZSBhcyBkb25lICovCisJfSBlbHNlCQkJCS8qIE5vICovCisJ ICBsZWZ0Kys7CQkJLyogc28gbWFyayB0aGlzIG9uZSBsZWZ0IHRvIGRvICovCisgICAgfQorI2lm ZGVmIFNUUkFUVVMKKyAgICBpZiAoYXRjcmVvICYmICFkb25lW3h1bmNoYXIoYyA9ICckJyldKSB7 IC8qIENyZWF0b3IgKi8KKwlpZiAobWF4IC0gaSA+PSB4LmNyZWF0b3IubGVuICsgMikgeyAvKiBF bm91Z2ggc3BhY2UgPyAqLworCSAgICBkYXRhW2krK10gPSBjOworCSAgICBkYXRhW2krK10gPSB0 b2NoYXIoeC5jcmVhdG9yLmxlbik7CisJICAgIGZvciAoaiA9IDA7IGogPCB4LmNyZWF0b3IubGVu OyBqKyspCisJICAgICAgZGF0YVtpKytdID0geC5jcmVhdG9yLnZhbFtqXTsKKwkgICAgbnVtc2V0 Kys7CisJICAgIGRvbmVbeHVuY2hhcihjKV0gPSAxOworCX0gZWxzZQorCSAgbGVmdCsrOworICAg IH0KKyAgICBpZiAoYXRhY3RvICYmICFkb25lW3h1bmNoYXIoYyA9ICclJyldKSB7IC8qIEZpbGUg YWNjb3VudCAqLworCWlmIChtYXggLSBpID49IHguYWNjb3VudC5sZW4gKyAyKSB7CisJICAgIGRh dGFbaSsrXSA9IGM7CisJICAgIGRhdGFbaSsrXSA9IHRvY2hhcih4LmFjY291bnQubGVuKTsKKwkg ICAgZm9yIChqID0gMDsgaiA8IHguYWNjb3VudC5sZW47IGorKykKKwkgICAgICBkYXRhW2krK10g PSB4LmFjY291bnQudmFsW2pdOworCSAgICBudW1zZXQrKzsKKwkgICAgZG9uZVt4dW5jaGFyKGMp XSA9IDE7CisJfSBlbHNlCisJICBsZWZ0Kys7CisgICAgfQorICAgIGlmIChhdGZybW8gJiYgIWRv bmVbeHVuY2hhcihjID0gJy8nKV0pIHsgLyogUGFja2V0IGRhdGEgZm9ybWF0ICovCisJaWYgKG1h eCAtIGkgPj0geC5yZWNmbS5sZW4gKyAyKSB7CisJICAgIGRhdGFbaSsrXSA9IGM7CisJICAgIGRh dGFbaSsrXSA9IHRvY2hhcih4LnJlY2ZtLmxlbik7IC8qICBDb3B5IGZyb20gYXR0ciBzdHJ1Y3R1 cmUgKi8KKwkgICAgZm9yIChqID0gMDsgaiA8IHgucmVjZm0ubGVuOyBqKyspCisJICAgICAgZGF0 YVtpKytdID0geC5yZWNmbS52YWxbal07CisJICAgIG51bXNldCsrOworCSAgICBkb25lW3h1bmNo YXIoYyldID0gMTsKKwl9IGVsc2UKKwkgIGxlZnQrKzsKKyAgICB9CisjZW5kaWYgLyogU1RSQVRV UyAqLworCisgICAgeGJpbiA9CQkJCS8qIElzIHRoZSB0cmFuc2ZlciBpbiBiaW5hcnkgbW9kZT8g Ki8KKyNpZmRlZiBWTVMKKyAgICAgIGJpbmFyeSA9PSBYWUZUX0kgfHwgYmluYXJ5ID09IFhZRlRf TCB8fCAvKiBJTUFHRSBvciBMQUJFTEVEICovCisJIXN0cm5jbXAoeC5yZWNmbS52YWwsIkYiLDEp CS8qIG9yIFJFQ0ZNPUZ4eHh4eHggKi8KKyNlbHNlCisgICAgICBiaW5hcnkJCQkJLyogVXNlciBz YWlkIFNFVCBGSUxFIFRZUEUgQklOQVJZICAqLworI2VuZGlmIC8qIFZNUyAqLworCTsKKworICAg IGlmIChhdHR5cG8gJiYgIWRvbmVbeHVuY2hhcihjID0gJyInKV0pIHsgLyogRmlsZSB0eXBlICov CisJaWYgKG1heCAtIGkgPj0gNSkgewkJLyogTWF4IGxlbmd0aCBmb3IgdGhpcyBmaWVsZCAqLwor CSAgICBkYXRhW2krK10gPSBjOworCSAgICBpZiAoeGJpbikgewkJCS8qIEJpbmFyeSAqLworCQlk YXRhW2krK10gPSB0b2NoYXIoMik7CS8qICBUd28gY2hhcmFjdGVycyAqLworCQlkYXRhW2krK10g PSAnQic7CS8qICBCIGZvciBCaW5hcnkgKi8KKwkJZGF0YVtpKytdID0gJzgnOwkvKiAgOC1iaXQg Ynl0ZXMgKG5vdGUgYXNzdW1wdGlvbi4uLikgKi8KKyNpZmRlZiBDS19MQUJFTEVECisJCWlmIChi aW5hcnkgIT0gWFlGVF9MCisjaWZkZWYgVk1TCisJCSAgICAmJiBiaW5hcnkgIT0gWFlGVF9JCisj ZW5kaWYgLyogVk1TICovCisJCSAgICApCisJCSAgYmluYXJ5ID0gWFlGVF9COworI2VuZGlmIC8q IENLX0xBQkVMRUQgKi8KKwkgICAgfSBlbHNlIHsJCQkvKiBUZXh0ICovCisjaWZkZWYgVFNPRk9S TUFUCisJCWRhdGFbaSsrXSA9IHRvY2hhcigxKTsJLyogIE9uZSBjaGFyYWN0ZXIgKi8KKwkJZGF0 YVtpKytdID0gJ0EnOwkvKiAgQSA9IChleHRlbmRlZCkgQVNDSUkgd2l0aCBDUkxGcyAqLworI2Vs c2UKKwkJZGF0YVtpKytdID0gdG9jaGFyKDMpOwkvKiAgVGhyZWUgY2hhcmFjdGVycyAqLworCQlk YXRhW2krK10gPSAnQSc7CS8qICBBID0gKGV4dGVuZGVkKSBBU0NJSSB3aXRoIENSTEZzICovCisJ CWRhdGFbaSsrXSA9ICdNJzsJLyogIE0gZm9yIGNhcnJpYWdlIHJldHVybiAqLworCQlkYXRhW2kr K10gPSAnSic7CS8qICBKIGZvciBsaW5lZmVlZCAqLworI2VuZGlmIC8qIFRTT0ZPUk1BVCAqLwor CisjaWZkZWYgVk1TCisJCWJpbmFyeSA9IFhZRlRfVDsJLyogV2UgYXV0b21hdGljYWxseSBkZXRl Y3RlZCB0ZXh0ICovCisjZW5kaWYgLyogVk1TICovCisJICAgIH0KKwkgICAgbnVtc2V0Kys7CisJ ICAgIGRvbmVbeHVuY2hhcihjKV0gPSAxOworCX0gZWxzZQorCSAgbGVmdCsrOworICAgIH0KKwor I2lmZGVmIFRTT0ZPUk1BVAorICAgIGlmIChhdHR5cG8gJiYgIXhiaW4gJiYgIWRvbmVbeHVuY2hh cihjID0gJy8nKV0pIHsgLyogUmVjb3JkIGZvcm1hdCAqLworCWlmIChtYXggLSBpID49IDUpIHsK KwkgICAgZGF0YVtpKytdID0gYzsKKwkgICAgZGF0YVtpKytdID0gdG9jaGFyKDMpOwkvKiAgVGhy ZWUgY2hhcmFjdGVycyAqLworCSAgICBkYXRhW2krK10gPSAnQSc7CQkvKiAgQSA9IHZhcmlhYmxl IHdpdGggQ1JMRnMgKi8KKwkgICAgZGF0YVtpKytdID0gJ00nOwkJLyogIE0gZm9yIGNhcnJpYWdl IHJldHVybiAqLworCSAgICBkYXRhW2krK10gPSAnSic7CQkvKiAgSiBmb3IgbGluZWZlZWQgKi8K Kwl9CisgICAgfQorI2VuZGlmIC8qIFRTT0ZPUk1BVCAqLworCisgICAgaWYgKGF0dHlwbyAmJiAh eGJpbiAmJiAhZG9uZVt4dW5jaGFyKGMgPSAnKicpXSkgeyAvKiBUZXh0IGVuY29kaW5nICovCisj aWZkZWYgTk9DU0VUUworCWlmIChtYXggLSBpID49IDMpIHsKKwkgICAgZGF0YVtpKytdID0gYzsK KwkgICAgZGF0YVtpKytdID0gdG9jaGFyKDEpOwkvKiBMZW5ndGggb2YgdmFsdWUgaXMgMSAqLwor CSAgICBkYXRhW2krK10gPSAnQSc7CQkvKiBBIGZvciBBU0NJSSAqLworCSAgICBudW1zZXQrKzsK KwkgICAgZG9uZVt4dW5jaGFyKGMpXSA9IDE7CisJfSBlbHNlCisJICBsZWZ0Kys7CisjZWxzZQor CWlmICh0Y2hhcnNldCA9PSBUQ19UUkFOU1AgfHwgIXhmcnhsYSkgewkvKiBUcmFuc2ZlciBjaGFy YWN0ZXIgc2V0ICovCisJICAgIGlmIChtYXggLSBpID49IDMpIHsKKwkJZGF0YVtpKytdID0gYzsJ CS8qIEVuY29kaW5nICovCisJCWRhdGFbaSsrXSA9IHRvY2hhcigxKTsJLyogTGVuZ3RoIG9mIHZh bHVlIGlzIDEgKi8KKwkJZGF0YVtpKytdID0gJ0EnOwkvKiBBIGZvciBBU0NJSSAoaS5lLiB0ZXh0 KSAqLworCQludW1zZXQrKzsKKwkJZG9uZVt4dW5jaGFyKGMpXSA9IDE7CisJICAgIH0gZWxzZQor CSAgICAgIGxlZnQrKzsKKwl9IGVsc2UgeworCSAgICB0cCA9IHRjc2luZm9bdGNoYXJzZXRdLmRl c2lnbmF0b3I7CisJICAgIGlmICghdHApIHRwID0gIiI7CisJICAgIGFsbiA9IHN0cmxlbih0cCk7 CisJICAgIGlmIChhbG4gPiAwKSB7CisJCWlmIChtYXggLSBpID49IGFsbiArIDIpIHsKKwkJICAg IGRhdGFbaSsrXSA9IGM7CS8qIEVuY29kaW5nICovCisJCSAgICBkYXRhW2krK10gPSB0b2NoYXIo YWxuKzEpOyAvKiBMZW5ndGggb2YgZGVzaWduYXRvci4gKi8KKwkJICAgIGRhdGFbaSsrXSA9ICdD JzsgLyogVGV4dCBpbiBzcGVjaWZpZWQgY2hhcnNldC4gKi8KKwkJICAgIGZvciAoaiA9IDA7IGog PCBhbG47IGorKykgLyogQ29weSBkZXNpZ25hdG9yICovCisJCSAgICAgIGRhdGFbaSsrXSA9ICp0 cCsrOyAvKiAgRXhhbXBsZTogKiZJNi8xMDAgKi8KKwkJICAgIG51bXNldCsrOworCQkgICAgZG9u ZVt4dW5jaGFyKGMpXSA9IDE7CisJCX0gZWxzZQorCQkgIGxlZnQrKzsKKwkgICAgfSBlbHNlCisJ ICAgICAgZG9uZVt4dW5jaGFyKGMpXSA9IDE7CisJfQorI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKyAg ICB9CisgICAgaWYgKGF0ZGF0byAmJiAhZG9uZVt4dW5jaGFyKGMgPSAnIycpXSAmJiAvKiBDcmVh dGlvbiBkYXRlLCBpZiBhbnkgKi8KKwkoYWxuID0geC5kYXRlLmxlbikgPiAwKSB7CisJaWYgKG1h eCAtIGkgPj0gYWxuICsgMikgeworCSAgICBkYXRhW2krK10gPSBjOworCSAgICBkYXRhW2krK10g PSB0b2NoYXIoYWxuKTsKKwkgICAgZm9yIChqID0gMDsgaiA8IGFsbjsgaisrKQorCSAgICAgIGRh dGFbaSsrXSA9IHguZGF0ZS52YWxbal07CisJICAgIG51bXNldCsrOworCSAgICBkb25lW3h1bmNo YXIoYyldID0gMTsKKwl9IGVsc2UKKwkgIGxlZnQrKzsKKyAgICB9CisgICAgLyogRmlsZSBsZW5n dGggaW4gSyAqLworICAgIGlmIChhdGxlbm8gJiYgIWRvbmVbeHVuY2hhcihjID0gJyEnKV0gJiYg eC5sZW5ndGhrID4gKENLX09GRl9UKS0xKSB7CisjaWZkZWYgQ09NTUVOVAorCXNwcmludGYoKGNo YXIgKikgJmRhdGFbaSsyXSwiJWxkIix4Lmxlbmd0aGspOyAvKiBzYWZlICovCisjZWxzZQorCWNr c3RybmNweSgoY2hhciAqKSZkYXRhW2krMl0sY2tmc3RvYSh4Lmxlbmd0aGspLDMyKTsKKyNlbmRp ZgkvKiBDT01NRU5UICovCisJYWxuID0gKGludClzdHJsZW4oKGNoYXIgKikoZGF0YStpKzIpKTsK KwlpZiAobWF4IC0gaSA+PSBhbG4gKyAyKSB7CisJICAgIGRhdGFbaV0gPSBjOworCSAgICBkYXRh W2krMV0gPSB0b2NoYXIoYWxuKTsKKwkgICAgaSArPSBhbG4gKyAyOworCSAgICBudW1zZXQrKzsK KwkgICAgZG9uZVt4dW5jaGFyKGMpXSA9IDE7CisJfSBlbHNlIHsKKwkgICAgZGF0YVtpXSA9IE5V TDsKKwkgICAgbGVmdCsrOworCX0KKyAgICB9CisgICAgLyogRmlsZSBsZW5ndGggaW4gYnl0ZXMg Ki8KKyAgICBpZiAoYXRsZW5vICYmICFkb25lW3h1bmNoYXIoYyA9ICcxJyldICYmIHgubGVuZ3Ro ID4gKENLX09GRl9UKS0xKSB7CisjaWZkZWYgQ09NTUVOVAorCXNwcmludGYoKGNoYXIgKikgJmRh dGFbaSsyXSwiJWxkIix4Lmxlbmd0aCk7IC8qIHNhZmUgKi8KKyNlbHNlCisJY2tzdHJuY3B5KChj aGFyICopJmRhdGFbaSsyXSxja2ZzdG9hKHgubGVuZ3RoKSwzMik7CisjZW5kaWYJLyogQ09NTUVO VCAqLworCWFsbiA9IChpbnQpc3RybGVuKChjaGFyICopKGRhdGEraSsyKSk7CisJaWYgKG1heCAt IGkgPj0gYWxuICsgMikgeworCSAgICBkYXRhW2ldID0gYzsKKwkgICAgZGF0YVtpKzFdID0gdG9j aGFyKGFsbik7CisJICAgIGkgKz0gYWxuICsgMjsKKwkgICAgbnVtc2V0Kys7CisJICAgIGRvbmVb eHVuY2hhcihjKV0gPSAxOworCX0gZWxzZSB7CisJICAgIGRhdGFbaV0gPSBOVUw7CisJICAgIGxl ZnQrKzsKKwl9CisgICAgfQorI2lmZGVmIENLX1BFUk1TCisgICAgaWYgKGF0bHBybyAmJiAhZG9u ZVt4dW5jaGFyKGMgPSAnLCcpXSAmJiAvKiBMb2NhbCBwcm90ZWN0aW9uICovCisJKGFsbiA9IHgu bHByb3RlY3QubGVuKSA+IDAgJiYgIW5vdGFmaWxlICYmIHhwID09IDApIHsKKwlpZiAobWF4IC0g aSA+PSBhbG4gKyAyKSB7CisJICAgIGRhdGFbaSsrXSA9IGM7CisJICAgIGRhdGFbaSsrXSA9IHRv Y2hhcihhbG4pOworCSAgICBmb3IgKGogPSAwOyBqIDwgYWxuOyBqKyspCisJICAgICAgZGF0YVtp KytdID0geC5scHJvdGVjdC52YWxbal07CisJICAgIG51bXNldCsrOworCSAgICBkb25lW3h1bmNo YXIoYyldID0gMTsKKwl9IGVsc2UKKwkgIGxlZnQrKzsKKyAgICB9CisgICAgaWYgKGF0Z3BybyAm JiAhZG9uZVt4dW5jaGFyKGMgPSAnLScpXSAmJiAvKiBHZW5lcmljIHByb3RlY3Rpb24gKi8KKwko YWxuID0geC5ncHJvdGVjdC5sZW4pID4gMCAmJiAhbm90YWZpbGUgJiYgeHAgPT0gMCkgeworCWlm IChtYXggLSBpID49IGFsbiArIDIpIHsKKwkgICAgZGF0YVtpKytdID0gYzsKKwkgICAgZGF0YVtp KytdID0gdG9jaGFyKGFsbik7CisJICAgIGZvciAoaiA9IDA7IGogPCBhbG47IGorKykKKwkgICAg ICBkYXRhW2krK10gPSB4Lmdwcm90ZWN0LnZhbFtqXTsKKwkgICAgbnVtc2V0Kys7CisJICAgIGRv bmVbeHVuY2hhcihjKV0gPSAxOworCX0gZWxzZQorCSAgbGVmdCsrOworICAgIH0KKyNlbmRpZiAv KiBDS19QRVJNUyAqLworICAgIGlmIChhdGJsa28gJiYgZmJsa3NpeiAmJiAhZG9uZVt4dW5jaGFy KGMgPSAnKCcpXSAmJgorCSFub3RhZmlsZSAmJiB4cCA9PSAwKSB7CS8qIEJsb2Nrc2l6ZSAqLwor CXNwcmludGYoKGNoYXIgKikgJmRhdGFbaSsyXSwiJWQiLGZibGtzaXopOyAvKiBzYWZlICovCisJ YWxuID0gKGludClzdHJsZW4oKGNoYXIgKikoZGF0YStpKzIpKTsKKwlpZiAobWF4IC0gaSA+PSBh bG4gKyAyKSB7CisJICAgIGRhdGFbaV0gPSBjOworCSAgICBkYXRhW2krMV0gPSB0b2NoYXIoYWxu KTsKKwkgICAgaSArPSBhbG4gKyAyOworCSAgICBudW1zZXQrKzsKKwkgICAgZG9uZVt4dW5jaGFy KGMpXSA9IDE7CisJfSBlbHNlIHsKKwkgICAgZGF0YVtpXSA9IE5VTDsKKwkgICAgbGVmdCsrOwor CX0KKyAgICB9CisjaWZuZGVmIE5PRlJJTExTCisgICAgaWYgKChycHJpbnRmIHx8IHJtYWlsZikg JiYgYXRkaXNvICYmIC8qIE1BSUwsIG9yIFJFTU9URSBQUklOVD8gICovCisJIWRvbmVbeHVuY2hh cihjID0gJysnKV0pIHsKKwlhbG4gPSAoaW50KSBzdHJsZW4ob3B0YnVmKSArIDE7CS8qIE9wdGlv bnMsIGlmIGFueSAqLworCWlmIChtYXggLSBpID49IGFsbiArIDIpIHsKKwkgICAgZGF0YVtpKytd ID0gYzsJCS8qIERpc3Bvc2l0aW9uICovCisJICAgIGRhdGFbaSsrXSA9IHRvY2hhcihhbG4pOwkv KiBPcHRpb25zLCBpZiBhbnkgKi8KKwkgICAgaWYgKHJwcmludGYpCisJICAgICAgZGF0YVtpKytd ID0gJ1AnOwkJLyogUCBmb3IgUHJpbnQgKi8KKwkgICAgZWxzZQorCSAgICAgIGRhdGFbaSsrXSA9 ICdNJzsJCS8qIE0gZm9yIE1haWwgKi8KKwkgICAgZm9yIChqID0gMDsgb3B0YnVmW2pdOyBqKysp CS8qIENvcHkgYW55IG9wdGlvbnMgKi8KKwkgICAgICBkYXRhW2krK10gPSBvcHRidWZbal07CisJ ICAgIG51bXNldCsrOworCSAgICBkb25lW3h1bmNoYXIoYyldID0gMTsKKwl9IGVsc2UgeworCSAg ICBkYXRhW2ldID0gTlVMOworCSAgICBsZWZ0Kys7CisJfQorICAgIH0KKyNlbmRpZiAvKiBOT0ZS SUxMUyAqLworI2lmZGVmIENLX1JFU0VORAorICAgIGlmIChzZW5kbW9kZSA9PSBTTV9SRVNFTkQg JiYgIWRvbmVbeHVuY2hhcihjID0gJysnKV0pIHsKKwlpZiAobWF4IC0gaSA+PSAzKSB7CisJICAg IGRhdGFbaSsrXSA9IGM7CQkvKiBEaXNwb3NpdGlvbiAqLworCSAgICBkYXRhW2krK10gPSB0b2No YXIoMSk7CisJICAgIGRhdGFbaSsrXSA9ICdSJzsJCS8qIGlzIFJFU0VORCAqLworCSAgICBudW1z ZXQrKzsKKwkgICAgZG9uZVt4dW5jaGFyKGMpXSA9IDE7CisJfSBlbHNlCisJICBsZWZ0Kys7Cisg ICAgfQorI2VuZGlmIC8qIENLX1JFU0VORCAqLworCisgICAgLyogRW5kIG9mIEF0dHJpYnV0ZXMg LS0gdG8gYmUgc2VudCBvbmx5IGFmdGVyIHNlbmRpbmcgYWxsIG90aGVycyAqLworCisgICAgZGVi dWcoRjExMSwic2F0dHIiLCJAIixpKTsKKyAgICBkZWJ1ZyhGMTAxLCJzYXR0ciBudW1zZXQiLCIi LG51bXNldCk7CisgICAgZGVidWcoRjEwMSwic2F0dHIgbGVmdCIsIiIsbGVmdCk7CisKKyAgICBp ZiAoKGxlZnQgPT0gMCB8fCBudW1zZXQgPT0gMCkgJiYgIWRvbmVbeHVuY2hhcihjID0gJ0AnKV0p IHsKKwlpZiAobWF4IC0gaSA+PSAzKSB7CisJICAgIGRhdGFbaSsrXSA9IGM7CQkvKiBFbmQgb2Yg QXR0cmlidXRlcyAqLworCSAgICBkYXRhW2krK10gPSBTUDsJCS8qIExlbmd0aCAwICovCisJICAg IGRhdGFbaV0gPSBOVUw7CQkvKiBNYWtlIHN1cmUgaXQncyBudWxsLXRlcm1pbmF0ZWQgKi8KKwkg ICAgbnVtc2V0Kys7CisJICAgIGRvbmVbeHVuY2hhcihjKV0gPSAxOworCX0KKyAgICB9CisKKyAg ICAvKiBGaW5pc2hlZCAtIHNlbmQgdGhlIHBhY2tldCBvZmYgaWYgd2UgaGF2ZSBhbnl0aGluZyBp biBpdCAqLworCisgICAgaWYgKG51bXNldCkgeworCWRhdGFbaV0gPSBOVUw7CQkJLyogVGVybWlu YXRlIGxhc3QgZ29vZCBmaWVsZCAqLworCWRlYnVnKEYxMTEsInNhdHRyIHNlbmRpbmciLGRhdGEs bGVmdCk7CisJYWxuID0gKGludClzdHJsZW4oKGNoYXIgKilkYXRhKTsgLyogR2V0IG92ZXJhbGwg bGVuZ3RoIG9mIGF0dHJpYnV0ZXMgKi8KKwlyZXR1cm4oc3BhY2soJ0EnLHBrdG51bSxhbG4sZGF0 YSkpOyAvKiBTZW5kIGl0ICovCisgICAgfSBlbHNlCisgICAgICByZXR1cm4oMCk7Cit9CisKK3N0 YXRpYyBjaGFyICpyZWZ1c2VkID0gIiI7CisKK3N0YXRpYyBjaGFyICpyZWFzb25bXSA9IHsKKyAg ICAic2l6ZSIsICJ0eXBlIiwgImRhdGUiLCAiY3JlYXRvciIsICJhY2NvdW50IiwgImFyZWEiLCAi cGFzc3dvcmQiLAorICAgICJibG9ja3NpemUiLCAiYWNjZXNzIiwgImVuY29kaW5nIiwgImRpc3Bv c2l0aW9uIiwgInByb3RlY3Rpb24iLAorICAgICJwcm90ZWN0aW9uIiwgIm9yaWdpbiIsICJmb3Jt YXQiLAorICAgICJzeXMtZGVwZW5kZW50IiwJCQkvKiAwICovCisgICAgInNpemUiLAkJCQkvKiAx ICovCisgICAgIjIiLAkJCQkvKiAyICovCisgICAgIjMiLAkJCQkvKiAzICovCisgICAgIjQiLAkJ CQkvKiA0ICovCisgICAgIjUiLAkJCQkvKiA1ICovCisgICAgIjYiLAkJCQkvKiA2ICovCisgICAg IjciLAkJCQkvKiA3ICovCisgICAgIjgiLAkJCQkvKiA4ICovCisgICAgIjkiLAkJCQkvKiA5ICov CisgICAgIjoiLAkJCQkvKiA6ICovCisgICAgIjsiLAkJCQkvKiA7ICovCisgICAgIjwiLAkJCQkv KiA8ICovCisgICAgIj0iLAkJCQkvKiA9ICovCisgICAgIj4iLAkJCQkvKiA+ICovCisgICAgIm5h bWUiLAkJCQkvKiA/ICovCisgICAgIkAiCit9Oworc3RhdGljIGludCBucmVhc29uID0gc2l6ZW9m KHJlYXNvbikgLyBzaXplb2YoY2hhciAqKTsKK2ludCByZWplY3Rpb24gPSAtMTsKKworY2hhciAq CitnZXRyZWFzb24ocykgY2hhciAqczsgewkJCS8qIERlY29kZSBhdHRyaWJ1dGUgcmVmdXNhbCBy ZWFzb24gKi8KKyAgICBjaGFyIGMsICpwOworICAgIGlmIChyZWplY3Rpb24gPT0gMSkJCQkvKiBL bHVkZ2UgZm9yIFNFVCBGSUwgQ09MTCBESVNDQVJEICovCisgICAgICByZXR1cm4oIm5hbWUiKTsJ CQkvKiB3aGVuIG90aGVyIEtlcm1pdCBkb2Vzbid0Li4uICovCisgICAgcCA9IHM7CisgICAgaWYg KCpwKysgIT0gJ04nKSByZXR1cm4oIiIpOwkvKiBTaG91bGQgc3RhcnQgd2l0aCBOICovCisgICAg ZWxzZSBpZiAoKGMgPSAqcCkgPiBTUCkgewkJLyogZ2V0IHJlYXNvbiwgKi8KKwlyZWplY3Rpb24g PSBjOwkJCS8qIHJlbWVtYmVyIGl0LCAqLworCWMgLT0gJyEnOwkJCS8qIGdldCBvZmZzZXQgKi8K KwlwID0gKCh1bnNpZ25lZCBpbnQpICgoQ0hBUikgYykgPD0gKHVuc2lnbmVkIGludCkgbnJlYXNv bikgPworCSAgcmVhc29uW2NdIDoKKwkgICAgInVua25vd24iOworICAgIH0KKyAgICByZXR1cm4o cCk7Cit9CisKK2ludAorcnNhdHRyKHMpIENIQVIgKnM7IHsJCQkvKiBSZWFkIHJlc3BvbnNlIHRv IGF0dHJpYnV0ZSBwYWNrZXQgKi8KKyAgICBkZWJ1ZyhGMTExLCJyc2F0dHIiLHMsKnMpOworICAg IGlmICgqcyA9PSAnTicpIHsJCQkvKiBJZiBpdCdzICdOJyBmb2xsb3dlZCBieSBhbnl0aGluZywg Ki8KKwlyZWZ1c2VkID0gZ2V0cmVhc29uKChjaGFyICopcyk7CS8qIHRoZXkgYXJlIHJlZnVzaW5n LCBnZXQgcmVhc29uLiAqLworCWRlYnVnKEYxMTAsInJzYXR0ciByZWZ1c2VkIixyZWZ1c2VkLDAp OworCXRsb2coRjExMCwiIHJlZnVzZWQ6IixyZWZ1c2VkLDBMKTsKKwlyZXR1cm4oLTEpOworICAg IH0KKyNpZmRlZiBDS19SRVNFTkQKKyAgICBpZiAoc2VuZG1vZGUgPT0gU01fUkVTRU5EICYmICpz ID09ICcxJykgeyAvKiBSRVNFTkQgbGVuZ3RoICovCisJaW50IG47IENLX09GRl9UIHo7IENIQVIg KnA7CisJcCA9IHMgKyAxOworCW4gPSB4dW5jaGFyKCpwKyspOworCWRlYnVnKEYxMDEsInJzYXR0 ciBSRVNFTkQgbiIsIiIsbik7CisJeiA9IChDS19PRkZfVCkwOworCXdoaWxlIChuLS0gPiAwKQkJ CS8qIFdlIGFzc3VtZSB0aGUgZm9ybWF0IGlzIGdvb2QuICovCisJICB6ID0gKENLX09GRl9UKTEw ICogeiArIChDS19PRkZfVCkoKnArKyAtICcwJyk7CisJZGVidWcoRjEwMSwicnNhdHRyIFJFU0VO RCB6IiwiIix6KTsKKwlpZiAoeiA+IChDS19PRkZfVCkwKSBzZW5kc3RhcnQgPSB6OworCWRlYnVn KEYxMDEsInJzYXR0ciBSRVNFTkQgc2VuZHN0YXJ0IiwiIixzZW5kc3RhcnQpOworCWlmIChzZW5k c3RhcnQgPiAoQ0tfT0ZGX1QpMCkKKwkgIGlmICh6ZnNlZWsoc2VuZHN0YXJ0KSA8IDApCS8qIElu cHV0IGZpbGUgaXMgYWxyZWFkeSBvcGVuLiAqLworCSAgICByZXR1cm4oMCk7CisjaWZkZWYgQ0tf Q1VSU0VTCisJaWYgKGZkaXNwbGEgPT0gWFlGRF9DKQorCSAgeHhzY3JlZW4oU0NSX0ZTLDAsZnNp emUsIiIpOwkvKiBSZWZyZXNoIGZpbGUgdHJhbnNmZXIgZGlzcGxheSAqLworI2VuZGlmIC8qIENL X0NVUlNFUyAqLworICAgIH0KKyNlbmRpZiAvKiBDS19SRVNFTkQgKi8KKyAgICByZWZ1c2VkID0g IiI7CisgICAgcmV0dXJuKDApOworfQorCisvKgorICBHZXQgYXR0cmlidXRlcyBmcm9tIGluY29t aW5nIEEgcGFja2V0LiAgUmV0dXJuczoKKyAgIDAgb24gc3VjY2VzcywgZmlsZSBpcyB0byBiZSBh Y2NlcHRlZAorICAtMSBvbiBmYWlsdXJlLCBmaWxlIGlzIHRvIGJlIHJlZnVzZWQKKyovCitpbnQK K2dhdHRyKHMsIHl5KSBDSEFSICpzOyBzdHJ1Y3QgemF0dHIgKnl5OyB7IC8qIFJlYWQgaW5jb21p bmcgYXR0cmlidXRlIHBhY2tldCAqLworICAgIGNoYXIgYywgZDsKKyAgICBjaGFyICpmZjsKKyAg ICBpbnQgYWxuLCBpLCBvdmVyZmxvdyA9IDA7CisKKyNpZm5kZWYgTk9DU0VUUworICAgIGV4dGVy biBpbnQgcl9jc2V0LCBheGNzZXRbXTsKKyNlbmRpZiAvKiBOT0NTRVRTICovCisKKyNkZWZpbmUg QUJVRkwgNDAJCQkvKiBUZW1wb3JhcnkgYnVmZmVyIGZvciBjb252ZXJzaW9ucyAqLworICAgIGNo YXIgYWJ1ZltBQlVGTCsxXTsKKyNkZWZpbmUgUkZCVUZMIDEwCQkJLyogUmVjb3JkLWZvcm1hdCBi dWZmZXIgKi8KKyAgICBzdGF0aWMgY2hhciByZmJ1ZltSRkJVRkwrMV07CisjZGVmaW5lIEZUQlVG TCAxMAkJCS8qIEZpbGUgdHlwZSBidWZmZXIgKi8KKyAgICBzdGF0aWMgY2hhciBmdGJ1ZltGVEJV RkwrMV07CisjZGVmaW5lIERUQlVGTCA0MAkJCS8qIEZpbGUgY3JlYXRpb24gZGF0ZSAqLworICAg IHN0YXRpYyBjaGFyIGR0YnVmW0RUQlVGTCsxXTsKKyNkZWZpbmUgVFNCVUZMIDEwCQkJLyogVHJh bnNmZXIgc3ludGF4ICovCisgICAgc3RhdGljIGNoYXIgdHNidWZbVFNCVUZMKzFdOworI2RlZmlu ZSBJREJVRkwgMTAJCQkvKiBTeXN0ZW0gSUQgKi8KKyAgICBzdGF0aWMgY2hhciBpZGJ1ZltJREJV RkwrMV07CisjaWZuZGVmIERZTkFNSUMKKyNkZWZpbmUgRFNCVUZMIDEwMAkJCS8qIERpc3Bvc2l0 aW9uICovCisgICAgc3RhdGljIGNoYXIgZHNidWZbRFNCVUZMKzFdOworI2RlZmluZSBTUEJVRkwg NTEyCQkJLyogU3lzdGVtLWRlcGVuZGVudCBwYXJhbWV0ZXJzICovCisgICAgc3RhdGljIGNoYXIg c3BidWZbU1BCVUZMKzFdOworI2Vsc2UKKyNkZWZpbmUgRFNCVUZMIDEwMAkJCS8qIERpc3Bvc2l0 aW9uICovCisgICAgc3RhdGljIGNoYXIgKmRzYnVmID0gTlVMTDsKKyNkZWZpbmUgU1BCVUZMIDUx MgkJCS8qIFN5c3RlbS1kZXBlbmRlbnQgcGFyYW1ldGVycyAqLworICAgIHN0YXRpYyBjaGFyICpz cGJ1ZiA9IE5VTEw7CisjZW5kaWYgLyogRFlOQU1JQyAqLworI2RlZmluZSBSUEJVRkwgMjAJCQkv KiBBdHRyaWJ1dGUgcmVwbHkgKi8KKyAgICBzdGF0aWMgY2hhciBycGJ1ZltSUEJVRkwrMV07CisK KyNpZmRlZiBDS19QRVJNUworICAgIHN0YXRpYyBjaGFyIGxwcm1idWZbQ0tfUEVSTUxFTisxXTsK KyAgICBzdGF0aWMgY2hhciBncHJtYnVmWzJdOworI2VuZGlmIC8qIENLX1BFUk1TICovCisKKyAg ICBjaGFyICpycDsJCQkJLyogUG9pbnRlciB0byByZXBseSBidWZmZXIgKi8KKyAgICBpbnQgcmV0 Y29kZTsJCQkvKiBSZXR1cm4gY29kZSAqLworCisgICAgZCA9IFNQOwkJCQkvKiBJbml0aWFsaXpl IGRpc3Bvc2l0aW9uICovCisgICAgZmYgPSBmaWxuYW07CQkJLyogRmlsZW5hbWUgcmV0dXJuZWQg YnkgcmN2ZmlsICovCisgICAgaWYgKGZuY2FjdCA9PSBYWUZYX1IgJiYgb2ZuMXggJiYgb2ZuMVsw XSkgLyogQnV0IHdhdGNoIG91dCBmb3IgRkM9UkVOQU1FICovCisgICAgICBmZiA9IG9mbjE7CQkJ LyogYmVjYXVzZSB3ZSBoYXZlbid0IHJlbmFtZWQgaXQgeWV0ICovCisKKy8qIEZpbGwgaW4gdGhl IGF0dHJpYnV0ZXMgd2UgaGF2ZSByZWNlaXZlZCAqLworCisgICAgcnAgPSBycGJ1ZjsJCQkJLyog SW5pdGlhbGl6ZSByZXBseSBidWZmZXIgKi8KKyAgICAqcnArKyA9ICdOJzsJCQkvKiBmb3IgbmVn YXRpdmUgcmVwbHkuICovCisgICAgKnJwID0gTlVMOworICAgIHJldGNvZGUgPSAwOwkJCS8qIElu aXRpYWxpemUgcmV0dXJuIGNvZGUuICovCisKKyAgICBpZiAoZGVzdCA9PSBERVNUX1ApIHsJCS8q IFNFVCBERVNUSU5BVElPTiBQUklOVEVSICovCisjaWZkZWYgRFlOQU1JQworCWlmICghZHNidWYp CisJICBpZiAoKGRzYnVmID0gbWFsbG9jKERTQlVGTCsxKSkgPT0gTlVMTCkKKwkgICAgZmF0YWwo Imd0YXR0cjogbm8gbWVtb3J5IGZvciBkc2J1ZiIpOworI2VuZGlmIC8qIERZTkFNSUMgKi8KKwlk c2J1ZlswXSA9ICdQJzsKKwlkc2J1ZlsxXSA9ICdcMCc7CisJeXktPmRpc3AudmFsID0gZHNidWY7 CisJeXktPmRpc3AubGVuID0gMTsKKyAgICB9CisgICAgd2hpbGUgKGMgPSAqcysrKSB7CQkJLyog R2V0IGF0dHJpYnV0ZSB0YWcgKi8KKwlhbG4gPSB4dW5jaGFyKCpzKyspOwkJLyogTGVuZ3RoIG9m IGF0dHJpYnV0ZSBzdHJpbmcgKi8KKwlzd2l0Y2ggKGMpIHsKKyNpZmRlZiBDT01NRU5UCQkJCS8q IFRoaXMgY2FzZSBjb21iaW5lZCB3aXRoICcxJyBiZWxvdyAqLworCSAgY2FzZSAnISc6CQkJLyog RmlsZSBsZW5ndGggaW4gSyAqLworCSAgICBmb3IgKGkgPSAwOyAoaSA8IGFsbikgJiYgKGkgPCBB QlVGTCk7IGkrKykgLyogQ29weSBpdCAqLworCSAgICAgIGFidWZbaV0gPSAqcysrOworCSAgICBh YnVmW2ldID0gJ1wwJzsJCS8qIFRlcm1pbmF0ZSB3aXRoIG51bGwgKi8KKwkgICAgaWYgKGkgPCBh bG4pIHMgKz0gKGFsbiAtIGkpOyAvKiBJZiBmaWVsZCB3YXMgdG9vIGxvbmcgZm9yIGJ1ZmZlciAq LworCSAgICB5eS0+bGVuZ3RoayA9IGNrYXRvZnMoYWJ1Zik7IC8qIENvbnZlcnQgdG8gbnVtYmVy ICovCisJICAgIGJyZWFrOworI2VuZGlmCS8qIENPTU1FTlQgKi8KKworCSAgY2FzZSAnLyc6CQkJ LyogUmVjb3JkIGZvcm1hdCAqLworCSAgICByZmJ1ZlsxXSA9IE5VTDsKKwkgICAgcmZidWZbMl0g PSBOVUw7CisJICAgIGZvciAoaSA9IDA7IChpIDwgYWxuKSAmJiAoaSA8IFJGQlVGTCk7IGkrKykg LyogQ29weSBpdCAqLworCSAgICAgIHJmYnVmW2ldID0gKnMrKzsKKwkgICAgcmZidWZbaV0gPSBO VUw7CQkvKiBUZXJtaW5hdGUgd2l0aCBudWxsICovCisJICAgIHl5LT5yZWNmbS52YWwgPSByZmJ1 ZjsJLyogUG9pbnRlciB0byBzdHJpbmcgKi8KKwkgICAgeXktPnJlY2ZtLmxlbiA9IGk7CQkvKiBM ZW5ndGggb2Ygc3RyaW5nICovCisJICAgIGlmICgocmZidWZbMF0gIT0gJ0EnKSB8fAorCQkocmZi dWZbMV0gJiYgcmZidWZbMV0gIT0gJ00nKSB8fAorCQkocmZidWZbMl0gJiYgcmZidWZbMl0gIT0g J0onKSkgeworCQlkZWJ1ZyhGMTEwLCJnYXR0ciBiYWQgcmVjZm0iLHJmYnVmLDApOworCQkqcnAr KyA9IGM7CisJCXJldGNvZGUgPSAtMTsKKwkgICAgfQorCSAgICBicmVhazsKKworCSAgY2FzZSAn Iic6CQkJLyogRmlsZSB0eXBlICh0ZXh0LCBiaW5hcnksIC4uLikgKi8KKwkgICAgZm9yIChpID0g MDsgKGkgPCBhbG4pICYmIChpIDwgRlRCVUZMKTsgaSsrKQorCSAgICAgIGZ0YnVmW2ldID0gKnMr KzsJCS8qIENvcHkgaXQgaW50byBhIHN0YXRpYyBzdHJpbmcgKi8KKwkgICAgZnRidWZbaV0gPSAn XDAnOworCSAgICBpZiAoaSA8IGFsbikgcyArPSAoYWxuIC0gaSk7CisJICAgIC8qIFRZUEUgYXR0 cmlidXRlIGlzIGVuYWJsZWQ/ICovCisJICAgIGlmIChhdHR5cGkpIHsKKwkJeXktPnR5cGUudmFs ID0gZnRidWY7CS8qIFBvaW50ZXIgdG8gc3RyaW5nICovCisJCXl5LT50eXBlLmxlbiA9IGk7CS8q IExlbmd0aCBvZiBzdHJpbmcgKi8KKwkJZGVidWcoRjExMSwiZ2F0dHIgZmlsZSB0eXBlIiwgZnRi dWYsIGkpOworCQlkZWJ1ZyhGMTAxLCJnYXR0ciBiaW5hcnkgMSIsIiIsYmluYXJ5KTsKKwkJLyog VW5rbm93biB0eXBlPyAqLworCQlpZiAoKCpmdGJ1ZiAhPSAnQScgJiYgKmZ0YnVmICE9ICdCJyAm JiAqZnRidWYgIT0gJ0knKQorI2lmZGVmIENLX0xBQkVMRUQKKy8qIC4uLiBPciBvdXIgRklMRSBU WVBFIGlzIExBQkVMRUQgYW5kIHRoZSBpbmNvbWluZyBmaWxlIGlzIHRleHQuLi4gKi8KKwkJICAg IHx8IChiaW5hcnkgPT0gWFlGVF9MICYmICpmdGJ1ZiA9PSAnQScgJiYgIXhmbGcpCisjZW5kaWYg LyogQ0tfTEFCRUxFRCAqLworCQkgICAgKSB7CisJCSAgICByZXRjb2RlID0gLTE7CS8qIFJlamVj dCB0aGUgZmlsZSAqLworCQkgICAgKnJwKysgPSBjOworCQkgICAgaWYgKCFvcG5lcnIpIHRsb2co RjEwMCwiIHJlZnVzZWQ6IHR5cGUiLCIiLDApOworCQkgICAgYnJlYWs7CisJCX0KKy8qCisgIFRo ZSBmb2xsb3dpbmcgY29kZSBtb3ZlZCBoZXJlIGZyb20gb3BlbmEoKSBzbyB3ZSBzZXQgYmluYXJ5 IG1vZGUKKyAgYXMgc29vbiBhcyByZXF1ZXN0ZWQgYnkgdGhlIGF0dHJpYnV0ZSBwYWNrZXQuICBU aGF0IHdheSB3aGVuIHRoZSBmaXJzdAorICBkYXRhIHBhY2tldCBjb21lcywgdGhlIG1vZGUgb2Yg dHJhbnNmZXIgY2FuIGJlIGRpc3BsYXllZCBjb3JyZWN0bHkKKyAgYmVmb3JlIG9wZW5hKCkgaXMg Y2FsbGVkLgorKi8KKwkJaWYgKHl5LT50eXBlLnZhbFswXSA9PSAnQScpIHsgLyogQ2hlY2sgcmVj ZWl2ZWQgYXR0cmlidXRlcy4gKi8KKyNpZmRlZiBWTVMKKwkJICAgIGlmIChiaW5hcnkgIT0gWFlG VF9JKSAvKiBWTVMgSU1BR0Ugb3ZlcnJpZGVzIHRoaXMgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKwkJ ICAgICAgYmluYXJ5ID0gWFlGVF9UOwkvKiBTZXQgY3VycmVudCB0eXBlIHRvIFRleHQuICovCisJ CSAgICBkZWJ1ZyhGMTAxLCJnYXR0ciBiaW5hcnkgMiIsIiIsYmluYXJ5KTsKKwkJfSBlbHNlIGlm ICh5eS0+dHlwZS52YWxbMF0gPT0gJ0InKSB7CisjaWZkZWYgQ0tfTEFCRUxFRAorCQkgICAgaWYg KGJpbmFyeSAhPSBYWUZUX0wKKyNpZmRlZiBWTVMKKwkJCSYmIGJpbmFyeSAhPSBYWUZUX1UgLyog Vk1TIHNwZWNpYWwgY2FzZSAqLworI2VuZGlmIC8qIFZNUyAqLworCQkJKQorI2VuZGlmIC8qIENL X0xBQkVMRUQgKi8KKyNpZmRlZiBNQUMKKwkJICAgIGlmIChiaW5hcnkgIT0gWFlGVF9NKSAvKiBJ ZiBub3QgTWFjQmluYXJ5Li4uICovCisjZW5kaWYgLyogTUFDICovCisJCSAgICAgIGJpbmFyeSA9 IFhZRlRfQjsKKwkJICAgIGRlYnVnKEYxMDEsImdhdHRyIGJpbmFyeSAzIiwiIixiaW5hcnkpOwor CQl9CisJICAgIH0KKwkgICAgYnJlYWs7CisKKwkgIGNhc2UgJyMnOgkJCS8qIEZpbGUgY3JlYXRp b24gZGF0ZSAqLworCSAgICBmb3IgKGkgPSAwOyAoaSA8IGFsbikgJiYgKGkgPCBEVEJVRkwpOyBp KyspCisJICAgICAgZHRidWZbaV0gPSAqcysrOwkJLyogQ29weSBpdCBpbnRvIGEgc3RhdGljIHN0 cmluZyAqLworCSAgICBpZiAoaSA8IGFsbikgcyArPSAoYWxuIC0gaSk7CisJICAgIGR0YnVmW2ld ID0gJ1wwJzsKKwkgICAgaWYgKGF0ZGF0aSAmJiAheGZsZykgewkvKiBSZWFsIGZpbGUgYW5kIGRh dGVzIGVuYWJsZWQgKi8KKwkJeXktPmRhdGUudmFsID0gZHRidWY7CS8qIFBvaW50ZXIgdG8gc3Ry aW5nICovCisJCXl5LT5kYXRlLmxlbiA9IGk7CS8qIExlbmd0aCBvZiBzdHJpbmcgKi8KKwkJaWYg KGZuY2FjdCA9PSBYWUZYX1UpIHsJLyogUmVjZWl2aW5nIGluIHVwZGF0ZSBtb2RlPyAqLworCQkg ICAgaWYgKHpzdGltZShmZix5eSwxKSA+IDApIHsgLyogQ29tcGFyZSBkYXRlcyAqLworCQkJKnJw KysgPSBjOwkvKiBEaXNjYXJkIGlmIG9sZGVyLCByZWFzb24gPSBkYXRlLiAqLworCQkJaWYgKCFv cG5lcnIpIHRsb2coRjEwMCwiIHJlZnVzZWQ6IGRhdGUiLCIiLDApOworCQkJcmV0Y29kZSA9IC0x OwkvKiBSZWplY3Rpb24gbm90aWNlLiAqLworCQkgICAgfQorCQl9CisJICAgIH0KKwkgICAgYnJl YWs7CisKKwkgIGNhc2UgJygnOgkJCS8qIEZpbGUgQmxvY2sgU2l6ZSAqLworCSAgICBmb3IgKGkg PSAwOyAoaSA8IGFsbikgJiYgKGkgPCBBQlVGTCk7IGkrKykgLyogQ29weSBpdCAqLworCSAgICAg IGFidWZbaV0gPSAqcysrOworCSAgICBhYnVmW2ldID0gJ1wwJzsJCS8qIFRlcm1pbmF0ZSB3aXRo IG51bGwgKi8KKwkgICAgaWYgKGkgPCBhbG4pIHMgKz0gKGFsbiAtIGkpOworCSAgICBpZiAoYXRi bGtpKQorCSAgICAgIHl5LT5ibGtzaXplID0gYXRvbChhYnVmKTsgLyogQ29udmVydCB0byBudW1i ZXIgKi8KKwkgICAgYnJlYWs7CisKKwkgIGNhc2UgJyonOgkJCS8qIEVuY29kaW5nICh0cmFuc2Zl ciBzeW50YXgpICovCisJICAgIGZvciAoaSA9IDA7IChpIDwgYWxuKSAmJiAoaSA8IFRTQlVGTCk7 IGkrKykKKwkgICAgICB0c2J1ZltpXSA9ICpzKys7CQkvKiBDb3B5IGl0IGludG8gYSBzdGF0aWMg c3RyaW5nICovCisJICAgIGlmIChpIDwgYWxuKSBzICs9IChhbG4gLSBpKTsKKwkgICAgdHNidWZb aV0gPSAnXDAnOworI2lmbmRlZiBOT0NTRVRTCisJICAgIHhsYXR5cGUgPSBYTEFfTk9ORTsJCS8q IEFzc3VtZSBubyB0cmFuc2xhdGlvbiAqLworI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKwkgICAgaWYg KGF0ZW5jaSkgeworCQljaGFyICogc3M7CisJCXl5LT5lbmNvZGluZy52YWwgPSB0c2J1ZjsgLyog UG9pbnRlciB0byBzdHJpbmcgKi8KKwkJeXktPmVuY29kaW5nLmxlbiA9IGk7CS8qIExlbmd0aCBv ZiBzdHJpbmcgKi8KKwkJZGVidWcoRjEwMSwiZ2F0dHIgZW5jb2RpbmciLHRzYnVmLGkpOworCQlz cyA9IHRzYnVmKzE7CisJCXN3aXRjaCAoKnRzYnVmKSB7CisjaWZuZGVmIE5PQ1NFVFMKKwkJICBj YXNlICdBJzoJCSAgLyogTm9ybWFsLCBub3RoaW5nIHNwZWNpYWwgKi8KKwkJICAgIHRjaGFyc2V0 ID0gVENfVFJBTlNQOyAvKiBUcmFuc3BhcmVudCBjaGFycyB1bnRyYW5zbGF0ZWQgKi8KKwkJICAg IGRlYnVnKEYxMTAsImdhdHRyIHNldHMgdGNoYXJzZXQgVENfVFJBTlNQIiwiQSIsMCk7CisJCSAg ICBicmVhazsKKwkJICBjYXNlICdDJzoJCSAgLyogU3BlY2lmaWVkIGNoYXJhY3RlciBzZXQgKi8K KwkJICAgIGlmICgheGZyeGxhKSB7CSAgLyogQnV0IHRyYW5zbGF0aW9uIGRpc2FibGVkICovCisJ CQl0Y2hhcnNldCA9IFRDX1RSQU5TUDsKKwkJCWRlYnVnKEYxMTAsImdhdHRyIHNldHMgdGNoYXJz ZXQgVENfVFJBTlNQIiwiQyIsMCk7CisJCQlicmVhazsKKwkJICAgIH0KKyNpZmRlZiBVTklDT0RF CisJCSAgICBpZiAoIXN0cmNtcCgiSTE5NiIsc3MpKSAvKiBUcmVhdCBJMTk2IChVVEYtOCBubyBs ZXZlbCkgKi8KKwkJICAgICAgc3MgPSAiSTE5MCI7CSAgICAvKiBhcyBJMTkwIChVVEYtOCBMZXZl bCAxKSAqLworI2VuZGlmIC8qIFVOSUNPREUgKi8KKwkJICAgIGlmICghc3RyY21wKCJJNi8yMDQi LHNzKSkgLyogVHJlYXQgIkxhdGluLTEgKyBFdXJvIiAqLworCQkgICAgICBzcyA9ICJJNi8xMDAi OwkgICAgICAvKiBhcyBJNi8xMDAgKHJlZ3VsYXIgTGF0aW4tMSkgKi8KKwkJICAgIGZvciAoaSA9 IDA7IGkgPCBudGNzZXRzOyBpKyspIHsKKwkJCWlmICghc3RyY21wKHRjc2luZm9baV0uZGVzaWdu YXRvcixzcykpCisJCQkgIGJyZWFrOworCQkgICAgfQorCQkgICAgZGVidWcoRjEwMSwiZ2F0dHIg eGZlciBjaGFyc2V0IGxvb2t1cCIsIiIsaSk7CisJCSAgICBpZiAoaSA9PSBudGNzZXRzKSB7CS8q IElmIHVua25vd24gY2hhcmFjdGVyIHNldCwgKi8KKwkJCWRlYnVnKEYxMTAsImdhdHRyOiB4ZmVy IGNoYXJzZXQgdW5rbm93biIsc3MsMCk7CisJCQlpZiAoIXVua2NzKSB7CS8qIGFuZCBTRVQgVU5L Tk9XTiBESVNDQVJELCAqLworCQkJICAgIHJldGNvZGUgPSAtMTsgLyogcmVqZWN0IHRoZSBmaWxl LiAqLworCQkJICAgICpycCsrID0gYzsKKwkJCSAgICBpZiAoIW9wbmVycikKKwkJCSAgICAgIHRs b2coRjEwMCwiIHJlZnVzZWQ6IGNoYXJhY3RlciBzZXQiLCIiLDApOworCQkJfQorCQkgICAgfSBl bHNlIHsKKwkJCXRjaGFyc2V0ID0gdGNzaW5mb1tpXS5jb2RlOyAvKiBpdCdzIGtub3duLCB1c2Ug aXQgKi8KKwkJCWRlYnVnKEYxMDEsImdhdHRyIHN3aXRjaCB0Y2hhcnNldCIsIiIsdGNoYXJzZXQp OworCQkJZGVidWcoRjEwMSwiZ2F0dHIgZmNoYXJzZXQiLCIiLGZjaGFyc2V0KTsKKwkJCWlmIChy X2NzZXQgPT0gWE1PREVfQSkgeyAvKiBBdXRvbWF0aWMgc3dpdGNoaW5nPyAqLworCQkJICAgIGlm ICh0Y2hhcnNldCA+IC0xICYmIHRjaGFyc2V0IDw9IE1BWFRDU0VUUykgeworCQkJCWludCB4Owor CQkJCXggPSBheGNzZXRbdGNoYXJzZXRdOworCQkJCWlmICh4ID4gMCAmJiB4IDw9IE1BWEZDU0VU UykgeworCQkJCSAgICBmY2hhcnNldCA9IHg7CisJCQkJICAgIGRlYnVnKEYxMDEsImdhdHRyIHN3 aXRjaCBmY2hhcnNldCIsIiIseCk7CisJCQkJfQorCQkJICAgIH0KKwkJCX0KKwkJCS8qIFNldCB1 cCB0cmFuc2xhdGlvbiB0eXBlIGFuZCBmdW5jdGlvbiAqLworCQkJc2V0eGxhdHlwZSh0Y2hhcnNl dCxmY2hhcnNldCk7CisJCSAgICB9CisJCWJyZWFrOworI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKwkg ICAgICBkZWZhdWx0OgkJCS8qIFNvbWV0aGluZyBlbHNlLiAqLworCQlkZWJ1ZyhGMTEwLCJnYXR0 ciB1bmsgZW5jb2RpbmcgYXR0cmlidXRlIix0c2J1ZiwwKTsKKwkJaWYgKCF1bmtjcykgewkJLyog SWYgU0VUIFVOSyBESVNDICovCisJCSAgICByZXRjb2RlID0gLTE7CisJCSAgICAqcnArKyA9IGM7 CisJCSAgICBpZiAoIW9wbmVycikgdGxvZyhGMTAwLCIgcmVmdXNlZDogZW5jb2RpbmciLCIiLDAp OworCQl9CisJCWJyZWFrOworCQl9CisJICAgIH0KKwkgICAgYnJlYWs7CisKKwkgIGNhc2UgJysn OgkJCS8qIERpc3Bvc2l0aW9uICovCisjaWZkZWYgRFlOQU1JQworCSAgICBpZiAoIWRzYnVmKQor CSAgICAgIGlmICgoZHNidWYgPSBtYWxsb2MoRFNCVUZMKzEpKSA9PSBOVUxMKQorCQlmYXRhbCgi Z3RhdHRyOiBubyBtZW1vcnkgZm9yIGRzYnVmIik7CisjZW5kaWYgLyogRFlOQU1JQyAqLworCSAg ICBmb3IgKGkgPSAwOyAoaSA8IGFsbikgJiYgKGkgPCBEU0JVRkwpOyBpKyspCisJICAgICAgZHNi dWZbaV0gPSAqcysrOwkJLyogQ29weSBpdCBpbnRvIGEgc2VwYXJhdGUgc3RyaW5nICovCisJICAg IGRzYnVmW2ldID0gJ1wwJzsKKwkgICAgaWYgKGkgPCBhbG4pIHMgKz0gKGFsbiAtIGkpOworCSAg ICByc19sZW4gPSAoQ0tfT0ZGX1QpMDsKKwkgICAgaWYgKGF0ZGlzaSkgewkJLyogV2UgYXJlIGRv aW5nIHRoaXMgYXR0cmlidXRlICovCisJCS8qIENvcHkgaXQgaW50byB0aGUgYXR0cmlidXRlIHN0 cnVjdHVyZSAqLworCQl5eS0+ZGlzcC52YWwgPSBkc2J1ZjsJLyogUG9pbnRlciB0byBzdHJpbmcg Ki8KKwkJeXktPmRpc3AubGVuID0gaTsJLyogTGVuZ3RoIG9mIHN0cmluZyAqLworCQlkID0gKmRz YnVmOworI2lmbmRlZiBOT0RJU1BPCisvKgorICBEZWZpbmUgTk9ESVNQTyB0byBkaXNhYmxlIHJl Y2VpcHQgb2YgbWFpbCBvciBwcmludCBmaWxlcyBhbmQgb2YgUkVTRU5ELgorKi8KKwkJaWYgKAor I2lmbmRlZiBkYXRhZ2VuZXJhbAkJCS8qIE1BSUwgc3VwcG9ydGVkIG9ubHkgZm9yICovCisjaWZu ZGVmIE9TMgkJCQkvKiBVTklYLCBWTVMsIGFuZCBPUy05ICovCisjaWZuZGVmIE1BQworI2lmbmRl ZiBHRU1ET1MKKyNpZm5kZWYgQU1JR0EKKwkJICAgIGQgIT0gJ00nICYmCQkvKiBNQUlMICovCisj ZW5kaWYgLyogQU1JR0EgKi8KKyNlbmRpZiAvKiBHRU1ET1MgKi8KKyNlbmRpZiAvKiBNQUMgKi8K KyNlbmRpZiAvKiBPUy8yICovCisjZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KKyNpZmRlZiBDS19S RVNFTkQKKwkJICAgIGQgIT0gJ1InICYmCQkvKiBSRVNFTkQgKi8KKyNlbmRpZiAvKiBDS19SRVNF TkQgKi8KKwkJICAgIGQgIT0gJ1AnKSB7CQkvKiBQUklOVCAqLworCQkgICAgcmV0Y29kZSA9IC0x OwkvKiBVbmtub3duL3Vuc3VwcG9ydGVkIGRpc3Bvc2l0aW9uICovCisJCSAgICAqcnArKyA9IGM7 CisJCSAgICBpZiAoIW9wbmVycikgdGxvZyhGMTAxLCIgcmVmdXNlZDogYmFkIGRpc3Bvc2l0aW9u IiwiIixkKTsKKwkJfQorCQlkaXNwb3MgPSBkOworCQlkZWJ1ZyhGMDAwLCJnYXR0ciBkaXNwb3Mi LCIiLGRpc3Bvcyk7CisJCXN3aXRjaCAoZCkgeworI2lmbmRlZiBOT0ZSSUxMUworCQkgIGNhc2Ug J00nOgorCQkgICAgaWYgKCFlbl9tYWkpIHsKKwkJCXJldGNvZGUgPSAtMTsKKwkJCSpycCsrID0g YzsKKwkJCWlmICghb3BuZXJyKSB0bG9nKEYxMDAsIiByZWZ1c2VkOiBtYWlsIGRpc2FibGVkIiwi IiwwKTsKKwkJCWRpc3BvcyA9IDA7CisJCSAgICB9CisJCSAgICBicmVhazsKKyNlbmRpZiAvKiBO T0ZSSUxMUyAqLworCQkgIGNhc2UgJ1AnOgorCQkgICAgaWYgKCFlbl9wcmkpIHsKKwkJCXJldGNv ZGUgPSAtMTsKKwkJCSpycCsrID0gYzsKKwkJCWlmICghb3BuZXJyKQorCQkJICB0bG9nKEYxMDAs IiByZWZ1c2VkOiBwcmludCBkaXNhYmxlZCIsIiIsMCk7CisJCQlkaXNwb3MgPSAwOworCQkgICAg fQorCQkgICAgYnJlYWs7CisKKwkJICBjYXNlICdSJzoKKwkJICAgIGRpc3BvcyA9IDA7CisjaWZk ZWYgQ0tfUkVTRU5ECisJCSAgICByc19sZW4gPSB6Z2V0ZnMoZmYpOyAvKiBHZXQgbGVuZ3RoIG9m IGZpbGUgKi8KKwkJICAgIGRlYnVnKEYxMTEsImdhdHRyIFJFU0VORCIsZmYscnNfbGVuKTsKKyNp ZmRlZiBWTVMKKwkJICAgIHJzX2xlbiAmPSAobG9uZykgLTUxMjsgLyogRW5zdXJlIGJsb2NrIGJv dW5kYXJ5IGlmIFZNUyAqLworCQkgICAgcnNfbGVuIC09IDUxMjsJICAvKiBJbiBjYXNlIGxhc3Qg YmxvY2sgbm90IGNvbXBsZXRlICovCisJCSAgICBkZWJ1ZyhGMTExLCJnYXR0ciByc19sZW4iLGZm LHJzX2xlbik7CisjZW5kaWYgLyogVk1TICovCisjaWZkZWYgQ09NTUVOVAorCQkgICAgaWYgKHJz X2xlbiA8IDBMKQkvKiBMb2NhbCBmaWxlIGRvZXNuJ3QgZXhpc3QgKi8KKwkJICAgICAgcnNfbGVu ID0gMEw7CisjZW5kaWYgLyogQ09NTUVOVCAqLworLyoKKyAgQW5vdGhlciBwb3NzaWJpbGl0eSBo ZXJlIChvciBsYXRlciwgcmVhbGx5KSB3b3VsZCBiZSB0byBjaGVjayBpZiB0aGUgdHdvCisgIGZp bGUgbGVuZ3RocyBhcmUgdGhlIHNhbWUsIGFuZCBpZiBzbywga2VlcCB0aGUgcHJldmFpbGluZyBj b2xsaXNpb24gYWN0aW9uCisgIGFzIGlzIChub3RlOiByc19sZW4gPT0gbGVuZ3RoIG9mIGV4aXN0 aW5nIGZpbGU7IHl5LT5sZW5ndGggPT0gZnNpemUgPT0KKyAgbGVuZ3RoIG9mIGluY29taW5nIGZp bGUpLiAgVGhpcyBjb3VsZCBiZSBjb21wbGljYXRlZCwgdGhvdWdoLCBzaW5jZQorICAoYSkgd2Ug bWlnaHQgbm90IGhhdmUgcmVjZWl2ZWQgdGhlIGxlbmd0aCBhdHRyaWJ1dGUgeWV0LCBhbmQgaW4g ZmFjdCBpdAorICBtaWdodCBldmVuIGJlIGluIGEgc3Vic2VxdWVudCBBLXBhY2tldCwgeWV0IChi KSB3ZSBoYXZlIHRvIGFjY2VwdCBvciByZWplY3QKKyAgdGhlIFJlY292ZXIgYXR0cmlidXRlIG5v dy4gIFNvIGJldHRlciB0byBsZWF2ZSBhcy1pcy4gIEFueXdheSwgaXQncyBwcm9iYWJseQorICBt b3JlIHVzZWZ1bCB0aGlzIHdheS4KKyovCisJCSAgICBpZiAocnNfbGVuID4gKENLX09GRl9UKTAp IHsKKwkJCWZuY3NhdiA9IGZuY2FjdDsgLyogU2F2ZSBjb2xsaXNpb24gYWN0aW9uICovCisJCQlm bmNhY3QgPSBYWUZYX0E7IC8qIFN3aXRjaCB0byBBUFBFTkQgKi8KKwkJICAgIH0KKyNlbHNlCisJ CSAgICByZXRjb2RlID0gLTE7CS8qIFRoaXMgc2hvdWxkbid0IGhhcHBlbiAqLworCQkgICAgKnJw KysgPSBjOwkJLyogJ2NhdXNlIGl0IHdhc24ndCBuZWdvdGlhdGVkLiAqLworCQkgICAgaWYgKCFv cG5lcnIpIHRsb2coRjEwMCwiIHJlZnVzZWQ6IHJlc2VuZCIsIiIsMCk7CisjZW5kaWYgLyogQ0tf UkVTRU5EICovCisJCX0KKyNlbHNlICAvKiBOT0RJU1BPICovCisJCXJldGNvZGUgPSAtMTsKKwkJ KnJwKysgPSBjOworCQlpZiAoIW9wbmVycikgdGxvZyhGMTAwLCIgcmVmdXNlZDogTk9ESVNQTyIs IiIsMCk7CisjZW5kaWYgLyogTk9ESVNQTyAqLworCSAgICB9CisJICAgIGJyZWFrOworCisJICBj YXNlICcuJzoJCQkvKiBTZW5kZXIncyBzeXN0ZW0gSUQgKi8KKwkgICAgZm9yIChpID0gMDsgKGkg PCBhbG4pICYmIChpIDwgSURCVUZMKTsgaSsrKQorCSAgICAgIGlkYnVmW2ldID0gKnMrKzsJCS8q IENvcHkgaXQgaW50byBhIHN0YXRpYyBzdHJpbmcgKi8KKwkgICAgaWRidWZbaV0gPSAnXDAnOwor CSAgICBpZiAoaSA8IGFsbikgcyArPSAoYWxuIC0gaSk7CisJICAgIGlmIChhdHNpZGkpIHsKKwkJ eXktPnN5c3RlbWlkLnZhbCA9IGlkYnVmOyAvKiBQb2ludGVyIHRvIHN0cmluZyAqLworCQl5eS0+ c3lzdGVtaWQubGVuID0gaTsJLyogTGVuZ3RoIG9mIHN0cmluZyAqLworCSAgICB9CisJICAgIGJy ZWFrOworCisJICBjYXNlICcwJzoJCQkvKiBTeXN0ZW0tZGVwZW5kZW50IHBhcmFtZXRlcnMgKi8K KyNpZmRlZiBEWU5BTUlDCisJICAgIGlmICghc3BidWYgJiYgIShzcGJ1ZiA9IG1hbGxvYyhTUEJV RkwpKSkKKwkJZmF0YWwoImdhdHRyOiBubyBtZW1vcnkgZm9yIHNwYnVmIik7CisjZW5kaWYgLyog RFlOQU1JQyAqLworCSAgICBmb3IgKGkgPSAwOyAoaSA8IGFsbikgJiYgKGkgPCBTUEJVRkwpOyBp KyspCisJICAgICAgc3BidWZbaV0gPSAqcysrOwkJLyogQ29weSBpdCBpbnRvIGEgc3RhdGljIHN0 cmluZyAqLworCSAgICBzcGJ1ZltpXSA9ICdcMCc7CisJICAgIGlmIChpIDwgYWxuKSBzICs9IChh bG4gLSBpKTsKKwkgICAgaWYgKGF0c3lzaSkgeworCQl5eS0+c3lzcGFyYW0udmFsID0gc3BidWY7 IC8qIFBvaW50ZXIgdG8gc3RyaW5nICovCisJCXl5LT5zeXNwYXJhbS5sZW4gPSBpOwkvKiBMZW5n dGggb2Ygc3RyaW5nICovCisJICAgIH0KKwkgICAgYnJlYWs7CisKKwkgIGNhc2UgJyEnOgkJCS8q IEZpbGUgbGVuZ3RoIGluIEsgKi8KKwkgIGNhc2UgJzEnOiB7CQkJLyogRmlsZSBsZW5ndGggaW4g Ynl0ZXMgKi8KKwkgICAgICBjaGFyICogbDI7CisJICAgICAgQ0tfT0ZGX1QgeGxlbjsKKwkgICAg ICBmb3IgKGkgPSAwOyAoaSA8IGFsbikgJiYgKGkgPCBBQlVGTCk7IGkrKykgLyogQ29weSBpdCAq LworCQlhYnVmW2ldID0gKnMrKzsKKwkgICAgICBhYnVmW2ldID0gJ1wwJzsJCS8qIFRlcm1pbmF0 ZSB3aXRoIG51bGwgKi8KKwkgICAgICBpZiAoaSA8IGFsbikgcyArPSAoYWxuIC0gaSk7CisJICAg ICAgaWYgKHJkaWdpdHMoYWJ1ZikpIHsJLyogTWFrZSBzdXJlIHN0cmluZyBpcyBhbGwgZGlnaXRz ICovCisJCSAgeGxlbiA9IGNrYXRvZnMoYWJ1Zik7CS8qIENvbnZlcnQgdG8gbnVtYmVyICovCisJ CSAgbDIgPSBja2ZzdG9hKHhsZW4pOwkvKiBDb252ZXJ0IG51bWJlciBiYWNrIHRvIHN0cmluZyAq LworCQkgIGlmIChjID09ICcxJykKKwkJICAgIGRlYnVnKEYxMTEsImdhdHRyIGxlbmd0aCIsYWJ1 Zix4bGVuKTsKKwkJICBlbHNlCisJCSAgICBkZWJ1ZyhGMTExLCJnYXR0ciBsZW5ndGhrIixhYnVm LHhsZW4pOworCQkgIGlmIChja3N0cmNtcChhYnVmLGwyLC0xLDEpKSB7IC8qIFRoaXMgaXMgaG93 IHdlIGNoZWNrLi4uICovCisJCSAgICAgIHhsZW4gPSAoQ0tfT0ZGX1QpLTI7IC8qIC0yID0gdW5r LCBwb3NzaWJseSB0b28gbG9uZyAqLworCQkgICAgICBvdmVyZmxvdysrOworCQkgICAgICBkZWJ1 ZyhGMTExLCJnYXR0ciBvdmVyZmxvdyIsCisJCQkgICAgKGMgPT0gJzEnKSA/ICJsZW5ndGgiIDog Imxlbmd0aGsiLAorCQkJICAgIHhsZW4pOworCQkgIH0KKwkJICBpZiAoYyA9PSAnMScpIHsKKwkJ ICAgICAgeXktPmxlbmd0aCA9IHhsZW47CisJCSAgICAgIGRlYnVnKEYxMDEsImdhdHRyIGxlbmd0 aCIsIiIseGxlbik7CisJCSAgfSBlbHNlIHsKKwkJICAgICAgeXktPmxlbmd0aGsgPSB4bGVuOwor CQkgICAgICBkZWJ1ZyhGMTAxLCJnYXR0ciBsZW5ndGhrIiwiIix4bGVuKTsKKwkJICB9CisJICAg ICAgfQorCSAgICAgIC8qIElmIHRoZSBsZW5ndGggZmllbGQgaXMgbm90IG51bWVyaWMgYWNjZXB0 IHRoZSBmaWxlICovCisJICAgICAgLyogYW55d2F5IGJ1dCB3aXRoIGFuIHVua25vd24gbGVuZ3Ro ICovCisJICAgICAgYnJlYWs7CisJICB9CisKKyNpZmRlZiBDS19QRVJNUworCSAgY2FzZSAnLCc6 CQkJLyogU3lzdGVtLWRlcGVuZGVudCBwcm90ZWN0aW9uIGNvZGUgKi8KKwkgICAgZm9yIChpID0g MDsgKGkgPCBhbG4pICYmIChpIDwgQ0tfUEVSTUxFTik7IGkrKykKKwkgICAgICBscHJtYnVmW2ld ID0gKnMrKzsJLyogSnVzdCBjb3B5IGl0IC0gZGVjb2RlIGxhdGVyICovCisJICAgIGxwcm1idWZb aV0gPSAnXDAnOwkJLyogVGVybWluYXRlIHdpdGggbnVsbCAqLworCSAgICBpZiAoaSA8IGFsbikg cyArPSAoYWxuIC0gaSk7CisJICAgIGlmIChhdGxwcmkpIHsKKwkJeXktPmxwcm90ZWN0LnZhbCA9 IChjaGFyICopbHBybWJ1ZjsKKwkJeXktPmxwcm90ZWN0LmxlbiA9IGk7CisJICAgIH0gZWxzZQor CSAgICAgIGxwcm1idWZbMF0gPSBOVUw7CisJICAgIGJyZWFrOworCisJICBjYXNlICctJzoJCQkv KiBHZW5lcmljICJ3b3JsZCIgcHJvdGVjdGlvbiBjb2RlICovCisJICAgIGdwcm1idWZbMF0gPSBO VUw7CQkvKiBKdXN0IDEgYnl0ZSBieSBkZWZpbml0aW9uICovCisJICAgIGZvciAoaSA9IDA7IGkg PCBhbG47IGkrKykJLyogQnV0IGFsbG93IGZvciBtb3JlLi4uICovCisJICAgICAgaWYgKGkgPT0g MCkgZ3BybWJ1ZlswXSA9ICpzKys7CisJICAgIGdwcm1idWZbMV0gPSBOVUw7CisJICAgIGlmIChh dGdwcmkpIHsKKwkJeXktPmdwcm90ZWN0LnZhbCA9IChjaGFyICopZ3BybWJ1ZjsKKwkJeXktPmdw cm90ZWN0LmxlbiA9IGdwcm1idWZbMF0gPyAxIDogMDsKKwkgICAgfSBlbHNlCisJICAgICAgZ3By bWJ1ZlswXSA9IE5VTDsKKwkgICAgYnJlYWs7CisjZW5kaWYgLyogQ0tfUEVSTVMgKi8KKworCSAg ZGVmYXVsdDoJCQkvKiBVbmtub3duIGF0dHJpYnV0ZSAqLworCSAgICBzICs9IGFsbjsJCQkvKiBK dXN0IHNraXAgcGFzdCBpdCAqLworCSAgICBicmVhazsKKwl9CisgICAgfQorCisgICAgLyogQ2hl Y2sgc3BhY2Ugbm93LCBiZWNhdXNlIHdlIGFsc28gbmVlZCB0byBrbm93IHRoZSBmaWxlIHR5cGUg Ki8KKyAgICAvKiBpbiBjYXNlIHpjaGtzcGEoKSBkaWZmZXJlbnRpYXRlcyB0ZXh0IGFuZCBiaW5h cnkgKFZNUyB2ZXJzaW9uIGRvZXMpICovCisKKyAgICBpZiAoYXRsZW5pICYmICFjYWxpYnJhdGUp IHsJCS8qIExlbmd0aCBhdHRyaWJ1dGUgZW5hYmxlZD8gKi8KKwlpZiAoeXktPmxlbmd0aCA+IChD S19PRkZfVCktMSkgeyAvKiBMZW5ndGgtaW4tYnl0ZXMgYXR0cmlidXRlIHJlYydkPyAqLworCSAg ICBpZiAoIXpjaGtzcGEoZmYsKHl5LT5sZW5ndGgpKSkgeyAvKiBDaGVjayBzcGFjZSAqLworCQly ZXRjb2RlID0gLTE7CQkgICAgIC8qIE5vdCBlbnVmICovCisJCSpycCsrID0gJzEnOworCQlpZiAo IW9wbmVycikgdGxvZyhGMTAwLCIgcmVmdXNlZDogbGVuZ3RoIGJ5dGVzIiwiIiwwKTsKKwkgICAg fQorCX0gZWxzZSBpZiAoeXktPmxlbmd0aGsgPiAoQ0tfT0ZGX1QpLTEpIHsgLyogTGVuZ3RoIGlu IEsgcmVjZWl2ZWQ/ICovCisJICAgIGxvbmcgeGxlbjsKKwkgICAgeGxlbiA9IHl5LT5sZW5ndGhr ICogMTAyNDsKKwkgICAgaWYgKCF6Y2hrc3BhKGZmLHhsZW4pKSB7CisJCXJldGNvZGUgPSAtMTsJ CS8qIENoZWNrIHNwYWNlICovCisJCSpycCsrID0gJyEnOworCQlpZiAoIW9wbmVycikgdGxvZyhG MTAwLCIgcmVmdXNlZDogbGVuZ3RoIEsiLCIiLDApOworCSAgICB9CisJfQorICAgIH0KKyAgICBp ZiAocmV0Y29kZSA+IC0xTCkgewkJLyogUmVtZW1iZXIgdGhlIGZpbGUgc2l6ZSAqLworCWlmICh5 eS0+bGVuZ3RoID4gKENLX09GRl9UKS0xKSB7CisJICAgIGZzaXplID0geXktPmxlbmd0aDsKKwl9 IGVsc2UgaWYgKHl5LT5sZW5ndGhrID4gKENLX09GRl9UKS0xICYmICFvdmVyZmxvdykgeworCSAg ICBmc2l6ZSA9IHl5LT5sZW5ndGhrICogMTAyNEw7CisJfSBlbHNlIGZzaXplID0geXktPmxlbmd0 aDsJLyogKGUuZy4gLTJMKSAqLworICAgIH0KKworI2lmZGVmIERFQlVHCisgICAgaWYgKGRlYmxv ZykgeworI2lmZGVmIENPTU1FTlQKKwlzcHJpbnRmKGFidWYsIiVsZCIsZnNpemUpOwkvKiBzYWZl ICovCisjZWxzZQorCWNrc3RybmNweShhYnVmLGNrZnN0b2EoZnNpemUpLEFCVUZMKTsKKyNlbmRp ZgkvKiBDT01NRU5UICovCitkZWJ1ZyhGMTEwLCJnYXR0ciBmc2l6ZSIsYWJ1ZiwwKTsKKyAgICB9 CisjZW5kaWYgLyogREVCVUcgKi8KKworICAgIGlmIChyZXRjb2RlID09IDApIHJwID0gcnBidWY7 CS8qIE51bGwgcmVwbHkgc3RyaW5nIGlmIGFjY2VwdGVkICovCisgICAgKnJwID0gJ1wwJzsJCQkJ LyogRW5kIG9mIHJlcGx5IHN0cmluZyAqLworCisjaWZkZWYgQ0tfUkVTRU5ECisgICAgaWYgKGQg PT0gJ1InKSB7CQkJLyogUmVjZWl2aW5nIGEgUkVTRU5EPyAqLworCWRlYnVnKEYxMDEsImdhdHRy IFJFU0VORCIsIiIscmV0Y29kZSk7CisJLyogV2UgaWdub3JlIHJldGNvZGVzIGJlY2F1c2UgdGhp cyBvdmVycmlkZXMgKi8KKwlpZiAoYmluYXJ5ICE9IFhZRlRfQikgewkJLyogUmVqZWN0IGlmIG5v dCBiaW5hcnkgKi8KKwkgICAgcmV0Y29kZSA9IC0xOwkJLyogaW4gY2FzZSB0eXBlIGZpZWxkIGNh bWUgKi8KKwkgICAgY2tzdHJuY3B5KHJwYnVmLCJOKyIsUlBCVUZMKTsgLyogYWZ0ZXIgdGhlIGRp c3Bvc2l0aW9uIGZpZWxkICovCisJICAgIGRlYnVnKEYxMTEsImdhdHRyIFJFU0VORCBub3QgYmlu YXJ5IixycGJ1ZixiaW5hcnkpOworCX0gZWxzZSB7CQkJLyogQmluYXJ5IG1vZGUgKi8KKwkgICAg cmV0Y29kZSA9IDA7CQkvKiBBY2NlcHQgdGhlIGZpbGUgKi8KKwkgICAgZGlzY2FyZCA9IDA7CQkv KiBJZiBTRVQgRklMRSBDT0xMSVNJT04gRElTQ0FSRCAqLworI2lmZGVmIENPTU1FTlQKKwkgICAg c3ByaW50ZihycGJ1ZisyLCIlbGQiLHJzX2xlbik7IC8qIFJlcGx5IHdpdGggbGVuZ3RoIG9mIGZp bGUgKi8KKyNlbHNlCisJICAgIGNrc3RybmNweShycGJ1ZisyLGNrZnN0b2EocnNfbGVuKSxSUEJV RkwtMik7CisjZW5kaWYJLyogQ09NTUVOVCAqLworCSAgICBycGJ1ZlswXSA9ICcxJzsJCS8qICcx JyBtZWFucyBMZW5ndGggaW4gQnl0ZXMgKi8KKwkgICAgcnBidWZbMV0gPSB0b2NoYXIoKGludClz dHJsZW4ocnBidWYrMikpOyAvKiBMZW5ndGggb2YgbGVuZ3RoICovCisJICAgIGRlYnVnKEYxMTEs ImdhdHRyIFJFU0VORCBPSyIscnBidWYscmV0Y29kZSk7CisJfQorICAgIH0KKyNlbmRpZiAvKiBD S19SRVNFTkQgKi8KKyAgICBpZiAocmV0Y29kZSA9PSAwICYmIGRpc2NhcmQgIT0gMCkgewkvKiBE byB3ZSBzdGlsbCBoYXZlIGEgZGlzY2FyZCBmbGFnPyAqLworCWNrc3RybmNweShycGJ1ZiwiTj8i LFJQQlVGTCk7CS8qIFllcywgbXVzdCBiZSBmaWxlbmFtZSBjb2xsaXNpb24gKi8KKwlyZXRjb2Rl ID0gLTE7CQkJLyogIj8iID0gbmFtZSAocmVwbHktb25seSBjb2RlKSAqLworICAgIH0KKyAgICB5 eS0+cmVwbHkudmFsID0gcnBidWY7CQkvKiBBZGQgaXQgdG8gYXR0cmlidXRlIHN0cnVjdHVyZSAq LworICAgIHl5LT5yZXBseS5sZW4gPSAoaW50KXN0cmxlbihycGJ1Zik7CisgICAgaWYgKHJldGNv ZGUgPCAwKSB7CQkJLyogSWYgd2UgYXJlIHJlamVjdGluZyAqLworCWRpc2NhcmQgPSAxOwkJCS8q IHJlbWVtYmVyIHRvIGRpc2NhcmQgdGhlIGZpbGUgKi8KKwlyZWplY3Rpb24gPSBycGJ1ZlsxXTsJ CS8qIGFuZCB1c2UgdGhlIGZpcnN0IHJlYXNvbiBnaXZlbi4gKi8KKwlpZiAoZm5jc2F2ICE9IC0x KSB7CisJICAgIGZuY2FjdCA9IGZuY3NhdjsKKwkgICAgZm5jc2F2ID0gLTE7CisJfQorICAgIH0K KyAgICBkZWJ1ZyhGMTExLCJnYXR0ciByZXR1cm4iLHJwYnVmLHJldGNvZGUpOworICAgIHJldHVy bihyZXRjb2RlKTsKK30KKworLyogIEkgTiBJIFQgQSBUIFQgUiAgLS0gIEluaXRpYWxpemUgZmls ZSBhdHRyaWJ1dGUgc3RydWN0dXJlICAqLworCitpbnQKK2luaXRhdHRyKHl5KSBzdHJ1Y3QgemF0 dHIgKnl5OyB7CisgICAgeXktPmxlbmd0aGsgPSB5eS0+bGVuZ3RoID0gKENLX09GRl9UKS0xOwor ICAgIHl5LT50eXBlLnZhbCA9ICIiOworICAgIHl5LT50eXBlLmxlbiA9IDA7CisgICAgeXktPmRh dGUudmFsID0gIiI7CisgICAgeXktPmRhdGUubGVuID0gMDsKKyAgICB5eS0+ZW5jb2RpbmcudmFs ID0gIiI7CisgICAgeXktPmVuY29kaW5nLmxlbiA9IDA7CisgICAgeXktPmRpc3AudmFsID0gIiI7 CisgICAgeXktPmRpc3AubGVuID0gMDsKKyAgICB5eS0+c3lzdGVtaWQudmFsID0gIiI7CisgICAg eXktPnN5c3RlbWlkLmxlbiA9IDA7CisgICAgeXktPnN5c3BhcmFtLnZhbCA9ICIiOworICAgIHl5 LT5zeXNwYXJhbS5sZW4gPSAwOworICAgIHl5LT5jcmVhdG9yLnZhbCA9ICIiOworICAgIHl5LT5j cmVhdG9yLmxlbiA9IDA7CisgICAgeXktPmFjY291bnQudmFsID0gIiI7CisgICAgeXktPmFjY291 bnQubGVuID0gMDsKKyAgICB5eS0+YXJlYS52YWwgPSAiIjsKKyAgICB5eS0+YXJlYS5sZW4gPSAw OworICAgIHl5LT5wYXNzd29yZC52YWwgPSAiIjsKKyAgICB5eS0+cGFzc3dvcmQubGVuID0gMDsK KyAgICB5eS0+Ymxrc2l6ZSA9IC0xTDsKKyAgICB5eS0+eGFjY2Vzcy52YWwgPSAiIjsKKyAgICB5 eS0+eGFjY2Vzcy5sZW4gPSAwOworI2lmZGVmIENLX1BFUk1TCisgICAgaWYgKCFvZnBlcm1zKSBv ZnBlcm1zID0gIiI7CisgICAgZGVidWcoRjExMCwiaW5pdGF0dHIgb2ZwZXJtcyIsb2ZwZXJtcyww KTsKKyAgICB5eS0+bHByb3RlY3QudmFsID0gb2ZwZXJtczsKKyAgICB5eS0+bHByb3RlY3QubGVu ID0gMCAtIHN0cmxlbihvZnBlcm1zKTsgLyogPC0tIE5PVEUhICovCisgICAgLyoKKyAgICAgIEEg bmVnYXRpdmUgbGVuZ3RoIGluZGljYXRlcyB0aGF0IHdlIGhhdmUgYSBwZXJtaXNzaW9ucyBzdHJp bmcgYnV0IGl0IGhhcworICAgICAgYmVlbiBpbmhlcml0ZWQgZnJvbSBhIHByZXZpb3VzbHkgZXhp c3RpbmcgZmlsZSByYXRoZXIgdGhhbiBwaWNrZWQgdXAKKyAgICAgIGZyb20gYW4gaW5jb21pbmcg QS1wYWNrZXQuCisgICAgKi8KKyNlbHNlCisgICAgeXktPmxwcm90ZWN0LnZhbCA9ICIiOworICAg IHl5LT5scHJvdGVjdC5sZW4gPSAwOworI2VuZGlmIC8qIENLX1BFUk1TICovCisgICAgeXktPmdw cm90ZWN0LnZhbCA9ICIiOworICAgIHl5LT5ncHJvdGVjdC5sZW4gPSAwOworICAgIHl5LT5yZWNm bS52YWwgPSAiIjsKKyAgICB5eS0+cmVjZm0ubGVuID0gMDsKKyAgICB5eS0+cmVwbHkudmFsID0g IiI7CisgICAgeXktPnJlcGx5LmxlbiA9IDA7CisjaWZkZWYgT1MyCisgICAgeXktPmxvbmduYW1l LmxlbiA9IDAgOworICAgIHl5LT5sb25nbmFtZS52YWwgPSAiIiA7CisjZW5kaWYgLyogT1MyICov CisgICAgcmV0dXJuKDApOworfQorCisvKiAgQSBEIEUgQiBVIC0tIFdyaXRlIGF0dHJpYnV0ZSBw YWNrZXQgaW5mbyB0byBkZWJ1ZyBsb2cgICovCisKK2ludAorYWRlYnUoZix6eikgY2hhciAqZjsg c3RydWN0IHphdHRyICp6ejsgeworI2lmZGVmIERFQlVHCisgICAgaWYgKGRlYmxvZyA9PSAwKSBy ZXR1cm4oMCk7CisgICAgZGVidWcoRjExMCwiQXR0cmlidXRlcyBmb3IgaW5jb21pbmcgZmlsZSAi LGYsMCk7CisgICAgZGVidWcoRjEwMSwiIGxlbmd0aCBpbiBLIiwiIiwoaW50KSB6ei0+bGVuZ3Ro ayk7CisgICAgZGVidWcoRjExMSwiIGZpbGUgdHlwZSIsenotPnR5cGUudmFsLHp6LT50eXBlLmxl bik7CisgICAgZGVidWcoRjExMSwiIGNyZWF0aW9uIGRhdGUiLHp6LT5kYXRlLnZhbCx6ei0+ZGF0 ZS5sZW4pOworICAgIGRlYnVnKEYxMTEsIiBjcmVhdG9yIix6ei0+Y3JlYXRvci52YWwsenotPmNy ZWF0b3IubGVuKTsKKyAgICBkZWJ1ZyhGMTExLCIgYWNjb3VudCIsenotPmFjY291bnQudmFsLHp6 LT5hY2NvdW50Lmxlbik7CisgICAgZGVidWcoRjExMSwiIGFyZWEiLHp6LT5hcmVhLnZhbCx6ei0+ YXJlYS5sZW4pOworICAgIGRlYnVnKEYxMTEsIiBwYXNzd29yZCIsenotPnBhc3N3b3JkLnZhbCx6 ei0+cGFzc3dvcmQubGVuKTsKKyAgICBkZWJ1ZyhGMTAxLCIgYmxrc2l6ZSIsIiIsKGludCkgenot PmJsa3NpemUpOworICAgIGRlYnVnKEYxMTEsIiBhY2Nlc3MiLHp6LT54YWNjZXNzLnZhbCx6ei0+ eGFjY2Vzcy5sZW4pOworICAgIGRlYnVnKEYxMTEsIiBlbmNvZGluZyIsenotPmVuY29kaW5nLnZh bCx6ei0+ZW5jb2RpbmcubGVuKTsKKyAgICBkZWJ1ZyhGMTExLCIgZGlzcG9zaXRpb24iLHp6LT5k aXNwLnZhbCx6ei0+ZGlzcC5sZW4pOworICAgIGRlYnVnKEYxMTEsIiBscHJvdGVjdGlvbiIsenot Pmxwcm90ZWN0LnZhbCx6ei0+bHByb3RlY3QubGVuKTsKKyAgICBkZWJ1ZyhGMTExLCIgZ3Byb3Rl Y3Rpb24iLHp6LT5ncHJvdGVjdC52YWwsenotPmdwcm90ZWN0Lmxlbik7CisgICAgZGVidWcoRjEx MSwiIHN5c3RlbWlkIix6ei0+c3lzdGVtaWQudmFsLHp6LT5zeXN0ZW1pZC5sZW4pOworICAgIGRl YnVnKEYxMTEsIiByZWNmbSIsenotPnJlY2ZtLnZhbCx6ei0+cmVjZm0ubGVuKTsKKyAgICBkZWJ1 ZyhGMTExLCIgc3lzcGFyYW0iLHp6LT5zeXNwYXJhbS52YWwsenotPnN5c3BhcmFtLmxlbik7Cisg ICAgZGVidWcoRjEwMSwiIGxlbmd0aCIsIiIsKGludCkgenotPmxlbmd0aCk7CisgICAgZGVidWco RjExMCwiIHJlcGx5Iix6ei0+cmVwbHkudmFsLDApOworI2VuZGlmIC8qIERFQlVHICovCisgICAg cmV0dXJuKDApOworfQorCisvKiAgTyBQIEUgTiBBIC0tIE9wZW4gYSBmaWxlLCB3aXRoIGF0dHJp YnV0ZXMuICAqLworLyoKKyAgVGhpcyBmdW5jdGlvbiB0cmllcyB0byBvcGVuIGEgbmV3IGZpbGUg dG8gcHV0IHRoZSBhcnJpdmluZyBkYXRhIGluLiAgVGhlCisgIGZpbGVuYW1lIGlzIHRoZSBvbmUg aW4gdGhlIHNydmNtZCBidWZmZXIuICBGaWxlIGNvbGxpc2lvbiBhY3Rpb25zIGFyZToKKyAgT1ZF UldSSVRFICh0aGUgZXhpc3RpbmcgZmlsZSBpcyBvdmVyd3JpdHRlbiksIFJFTkFNRSAodGhlIG5l dyBmaWxlIGlzCisgIHJlbmFtZWQpLCBCQUNLVVAgKHRoZSBleGlzdGluZyBmaWxlIGlzIHJlbmFt ZWQpLCBESVNDQVJEICh0aGUgbmV3IGZpbGUgaXMKKyAgcmVmdXNlZCksIFVQREFURSAodGhlIGlu Y29taW5nIGZpbGUgcmVwbGFjZXMgdGhlIGV4aXN0aW5nIGZpbGUgb25seSBpZiB0aGUKKyAgaW5j b21pbmcgZmlsZSBoYXMgYSBuZXdlciBjcmVhdGlvbiBkYXRlKS4KKworICBSZXR1cm5zIDAgb24g ZmFpbHVyZSwgbm9uemVybyBvbiBzdWNjZXNzLgorKi8KK2V4dGVybiBjaGFyICpyZl9lcnI7CisK K2ludAorb3BlbmEoZix6eikgY2hhciAqZjsgc3RydWN0IHphdHRyICp6ejsgeworICAgIGludCB4 LCBkaXNwb3MgPSAwOworICAgIHN0YXRpYyBzdHJ1Y3QgZmlsaW5mbyBmY2I7CQkvKiBNdXN0IGJl IHN0YXRpYyEgKi8KKworICAgIGRlYnVnKEYxMTAsIm9wZW5hIGYiLGYsMCk7CisgICAgZGVidWco RjEwMSwib3BlbmEgZGlzY2FyZCIsIiIsZGlzY2FyZCk7CisKKyAgICBhZGVidShmLHp6KTsJCQkv KiBXcml0ZSBhdHRyaWJ1dGVzIHRvIGRlYnVnIGxvZyAqLworCisgICAgZmZjID0gKENLX09GRl9U KTA7CQkJLyogSW5pdCBmaWxlLWNoYXJhY3RlciBjb3VudGVyICovCisKKyNpZmRlZiBQSVBFU0VO RAorICAgIGlmIChwaXBlc2VuZCkJCQkvKiBSZWNlaXZpbmcgdG8gYSBwaXBlIC0gZWFzeS4gKi8K KyAgICAgIHJldHVybihvcGVubyhmLHp6LCZmY2IpKTsJCS8qIEp1c3Qgb3BlbiB0aGUgcGlwZS4g Ki8KKyNlbmRpZiAvKiBQSVBFU0VORCAqLworCisgICAgLyogUmVjZWl2aW5nIHRvIGEgZmlsZSAt IHNldCB1cCBmaWxlIGNvbnRyb2wgc3RydWN0dXJlICovCisKKyAgICBmY2IuYnMgPSBmYmxrc2l6 OwkJCS8qIEJsb2Nrc2l6ZSAqLworI2lmbmRlZiBOT0NTRVRTCisgICAgZmNiLmNzID0gZmNoYXJz ZXQ7CQkJLyogQ2hhcmFjdGVyIHNldCAqLworI2Vsc2UKKyAgICBmY2IuY3MgPSAwOwkJCQkvKiBD aGFyYWN0ZXIgc2V0ICovCisjZW5kaWYgLyogTk9DU0VUUyAqLworICAgIGZjYi5ybCA9IGZyZWNs OwkJCS8qIFJlY29yZCBMZW5ndGggKi8KKyAgICBmY2IuZm10ID0gZnJlY2ZtOwkJCS8qIFJlY29y ZCBGb3JtYXQgKi8KKyAgICBmY2Iub3JnID0gZm9yZzsJCQkvKiBPcmdhbml6YXRpb24gKi8KKyAg ICBmY2IuY2MgPSBmY2N0cmw7CQkJLyogQ2FycmlhZ2UgY29udHJvbCAqLworICAgIGZjYi50eXAg PSBiaW5hcnk7CQkJLyogVHlwZSAqLworICAgIGRlYnVnKEYxMDEsIm9wZW5hIHhmbGciLCIiLHhm bGcpOworICAgIGRlYnVnKEYxMDEsIm9wZW5hIHJlbWZpbGUiLCIiLHJlbWZpbGUpOworICAgIGRl YnVnKEYxMDEsIm9wZW5hIHJlbWFwcGQiLCIiLHJlbWFwcGQpOworICAgIGlmICh4ZmxnICYmIHJl bWZpbGUgJiYgcmVtYXBwZCkJLyogUkVNT1RFIG91dHB1dCByZWRpcmVjdGVkIHdpdGggPj4gKi8K KyAgICAgIGZjYi5kc3AgPSBYWUZaX0E7CisgICAgZWxzZQorICAgICAgZmNiLmRzcCA9IChmbmNh Y3QgPT0gWFlGWF9BKSA/IFhZRlpfQSA6IFhZRlpfTjsgLyogRGlzcG9zaXRpb24gKi8KKyAgICBk ZWJ1ZyhGMTAxLCJvcGVuYSBkaXNwIiwiIixmY2IuZHNwKTsKKyAgICBmY2Iub3Nfc3BlY2lmaWMg PSAiIjsJCS8qIE9TLXNwZWNpZmljIGluZm8gKi8KKyNpZmRlZiBDS19MQUJFTEVECisgICAgZmNi LmxibG9wdHMgPSBsZl9vcHRzOwkJLyogTGFiZWxlZCBmaWxlIG9wdGlvbnMgKi8KKyNlbHNlCisg ICAgZmNiLmxibG9wdHMgPSAwOworI2VuZGlmIC8qIENLX0xBQkVMRUQgKi8KKworICAgIGlmICh6 ei0+ZGlzcC5sZW4gPiAwKSB7CQkvKiBJbmNvbWluZyBmaWxlIGhhcyBhIGRpc3Bvc2l0aW9uPyAq LworCWRlYnVnKEYxMTEsIm9wZW4gZGlzcG9zaXRpb24iLHp6LT5kaXNwLnZhbCx6ei0+ZGlzcC5s ZW4pOworCWRpc3BvcyA9IChpbnQpICgqKHp6LT5kaXNwLnZhbCkpOworICAgIH0KKyAgICBpZiAo IWRpc3BvcyAmJiB4ZmxnICYmIHJlbWZpbGUgJiYgcmVtYXBwZCkgLyogUkVNT1RFIHJlZGlyZWN0 IGFwcGVuZCA/ICovCisgICAgICBkaXNwb3MgPSBmY2IuZHNwOworCisgICAgZGVidWcoRjEwMSwi b3BlbmEgZGlzcG9zIiwiIixkaXNwb3MpOworCisgICAgaWYgKCFkaXNwb3MpIHsJCQkgICAgICAg ICAvKiBObyBzcGVjaWFsIGRpc3Bvc2l0aW9uPyAqLworCWlmIChmbmNhY3QgPT0gWFlGWF9CICYm IG9mbjF4ICYmIG9mbjIpIHsgLyogRmlsZSBjb2xsaXNpb24gPSBCQUNLVVA/ICovCisJICAgIGlm ICh6cmVuYW1lKG9mbjEsb2ZuMikgPCAwKSB7ICAgICAgICAvKiBSZW5hbWUgZXhpc3RpbmcgZmls ZS4gKi8KKwkJZGVidWcoRjExMCwib3BlbmEgcmVuYW1lIGZhaWxzIixvZm4xLDApOworCQlyZl9l cnIgPSAiQ2FuJ3QgY3JlYXRlIGJhY2t1cCBmaWxlIjsKKwkJcmV0dXJuKDApOworCSAgICB9IGVs c2UgZGVidWcoRjExMCwib3BlbmEgcmVuYW1lIG9rIixvZm4yLDApOworCX0KKyAgICB9IGVsc2Ug aWYgKGRpc3BvcyA9PSAnUicpIHsJCS8qIFJlY2VpdmluZyBhIFJFU0VORCAqLworCWRlYnVnKEYx MDEsIm9wZW5hIHJlbW90ZSBsZW4iLCIiLHp6LT5sZW5ndGgpOworCWRlYnVnKEYxMDEsIm9wZW5h IGxvY2FsIGxlbiIsIiIscnNfbGVuKTsKKyNpZmRlZiBDT01NRU5UCisgICAgICAgIGlmIChmbmNh Y3QgPT0gWFlGWF9SKQkJLyogYW5kIGZpbGUgY29sbGlzaW9uID0gUkVOQU1FICovCisJICBpZiAo b2ZuMXgpCisjZW5kaWYgLyogQ09NTUVOVCAqLworCWlmIChvZm4xWzBdKQorCSAgZiA9IG9mbjE7 CQkJLyogdXNlIG9yaWdpbmFsIG5hbWUuICovCisgICAgICAgIGlmIChmbmNhY3QgPT0gWFlGWF9S KQkJLyogaWYgZmlsZSBjb2xsaXNpb24gaXMgUkVOQU1FICovCisgICAgICAgICAgY2tzdHJuY3B5 KGZpbG5hbSxvZm4xLENLTUFYUEFUSCsxKTsgLyogcmVzdG9yZSB0aGUgcmVhbCBuYW1lICovCisg ICAgICAgIHh4c2NyZWVuKFNDUl9BTiwwLDBMLGYpOwkvKiB1cGRhdGUgbmFtZSBvbiBzY3JlZW4g Ki8KKwlpZiAoenotPmxlbmd0aCA9PSByc19sZW4pCS8qIExvY2FsIGFuZCByZW1vdGUgbGVuZ3Ro cyBlcXVhbD8gKi8KKwkgIHJldHVybigtMTcpOwkJCS8qIFNlY3JldCBjb2RlICovCisgICAgfQor ICAgIGRlYnVnKEYxMTEsIm9wZW5hIFtmaWxlXT1tb2RlOiAiLGYsZmNiLmRzcCk7CisgICAgaWYg KHggPSBvcGVubyhmLHp6LCZmY2IpKSB7CQkvKiBUcnkgdG8gb3BlbiB0aGUgZmlsZS4gKi8KKyNp ZmRlZiBwZHAxMQorCXRsb2coRjExMCwiIGxvY2FsIG5hbWU6IixmLDBMKTsJLyogT0ssIG9wZW4s IHJlY29yZCBsb2NhbCBuYW1lLiAqLworCW1ha2VzdHIoJnByZnNwZWMsZik7CQkvKiBOZXcgcHJl bGltaW5hcnkgbmFtZSAqLworI2Vsc2UKKyNpZm5kZWYgWkZOUUZQCisJdGxvZyhGMTEwLCIgbG9j YWwgbmFtZToiLGYsMEwpOworCW1ha2VzdHIoJnByZnNwZWMsZik7CisjZWxzZQorCXsJCQkJLyog TG9nIGZ1bGwgbG9jYWwgcGF0aG5hbWUgKi8KKwkgICAgY2hhciAqcCA9IE5VTEwsICpxID0gZjsK KwkgICAgaWYgKChwID0gbWFsbG9jKENLTUFYUEFUSCsxKSkpCisJICAgICAgaWYgKHpmbnFmcChm aWxuYW0sIENLTUFYUEFUSCwgcCkpCisJCXEgPSBwOworCSAgICB0bG9nKEYxMTAsIiBsb2NhbCBu YW1lOiIscSwwTCk7CisJICAgIG1ha2VzdHIoJnByZnNwZWMscSk7CisJICAgIGlmIChwKSBmcmVl KHApOworCX0KKyNlbmRpZiAvKiBaRk5RRlAgKi8KKyNlbmRpZiAvKiBwZHAxMSAqLworCisJaWYg KGJpbmFyeSkgewkJCS8qIExvZyBmaWxlIG1vZGUgaW4gdHJhbnNhY3Rpb24gbG9nICovCisJICAg IHRsb2coRjEwMSwiIG1vZGU6IGJpbmFyeSIsIiIsKGxvbmcpIGJpbmFyeSk7CisJfSBlbHNlIHsJ CQkvKiBJZiB0ZXh0IG1vZGUsIGNoZWNrIGNoYXJhY3RlciBzZXQgKi8KKwkgICAgdGxvZyhGMTAw LCIgbW9kZTogdGV4dCIsIiIsMEwpOworI2lmbmRlZiBOT0NTRVRTCisJICAgIGlmICh4ZnJ4bGEp IHsKKwkJaWYgKGZjaGFyc2V0ID4gLTEgJiYgZmNoYXJzZXQgPD0gTUFYRkNTRVRTKQorCQkgIHRs b2coRjExMCwiIGZpbGUgY2hhcmFjdGVyLXNldDoiLGZjc2luZm9bZmNoYXJzZXRdLm5hbWUsMEwp OworCQlpZiAodGNoYXJzZXQgPiAtMSAmJiB0Y2hhcnNldCA8PSBNQVhUQ1NFVFMpCisJCSAgdGxv ZyhGMTEwLCIgeGZlciBjaGFyYWN0ZXItc2V0OiIsdGNzaW5mb1t0Y2hhcnNldF0ubmFtZSwwTCk7 CisJICAgIH0gZWxzZSB7CisJCSAgdGxvZyhGMTEwLCIgY2hhcmFjdGVyLXNldDoiLCJ0cmFuc3Bh cmVudCIsMEwpOworCSAgICB9CisjZW5kaWYgLyogTk9DU0VUUyAqLworCSAgICBkZWJ1ZyhGMTEx LCJvcGVuYSBjaGFyc2V0Iix6ei0+ZW5jb2RpbmcudmFsLHp6LT5lbmNvZGluZy5sZW4pOworCX0K KwlkZWJ1ZyhGMTAxLCJvcGVuYSBiaW5hcnkiLCIiLGJpbmFyeSk7CisKKyNpZmRlZiBDT01NRU5U CisJaWYgKGZzaXplID49IDApCisjZW5kaWYgLyogQ09NTUVOVCAqLworCSAgeHhzY3JlZW4oU0NS X0ZTLDAsZnNpemUsIiIpOworCisjaWZkZWYgZGF0YWdlbmVyYWwKKy8qCisgIE5lZWQgdG8gdHVy biBvbiBtdWx0aS10YXNraW5nIGNvbnNvbGUgaW50ZXJydXB0IHRhc2sgaGVyZSwgc2luY2UgbXVs dGlwbGUKKyAgZmlsZXMgbWF5IGJlIHJlY2VpdmVkIChodWg/KSAuLi4KKyovCisgICAgICAgIGlm ICgobG9jYWwpICYmICghcXVpZXQpKSAgICAgICAgLyogT25seSBkbyB0aGlzIGlmIGxvY2FsICYg bm90IHF1aWV0ICovCisJICBjb25zdGFfbXQoKTsJCQkvKiBTdGFydCB0aGUgYXN5bmMgcmVhZCB0 YXNrICovCisjZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KKworICAgIH0gZWxzZSB7CQkJCS8qIERp ZCBub3Qgb3BlbiBmaWxlIE9LLiAqLworCisJcmZfZXJyID0gY2tfZXJyc3RyKCk7CQkvKiBHZXQg c3lzdGVtIGVycm9yIG1lc3NhZ2UgKi8KKwlpZiAoKnJmX2VycikKKwkgIHh4c2NyZWVuKFNDUl9F TSwwLDBsLHJmX2Vycik7CisJZWxzZQorCSAgeHhzY3JlZW4oU0NSX0VNLDAsMGwsIkNhbid0IG9w ZW4gb3V0cHV0IGZpbGUiKTsKKyAgICAgICAgdGxvZyhGMTEwLCJGYWlsdXJlIHRvIG9wZW4iLGYs MEwpOworICAgICAgICB0bG9nKEYxMTAsIkVycm9yOiIscmZfZXJyLDBMKTsKKwlkZWJ1ZyhGMTEw LCJvcGVuYSBlcnJvciIscmZfZXJyLDApOworICAgIH0KKyAgICByZXR1cm4oeCk7CQkJCS8qIFBh c3Mgb24gcmV0dXJuIGNvZGUgZnJvbSBvcGVubyAqLworfQorCisvKiAgTyBQIEUgTiBDICAtLSAg T3BlbiBhIGNvbW1hbmQgKGluIHBsYWNlIG9mIGEgZmlsZSkgZm9yIG91dHB1dCAqLworCitpbnQK K29wZW5jKG4scykgaW50IG47IGNoYXIgKiBzOyB7CisgICAgaW50IHg7CisjaWZuZGVmIE5PUFVT SAorICAgIHggPSB6eGNtZChuLHMpOworI2Vsc2UKKyAgICB4ID0gMDsKKyNlbmRpZiAvKiBOT1BV U0ggKi8KKyAgICBkZWJ1ZyhGMTExLCJvcGVuYyB6eGNtZCIscyx4KTsKKyAgICBvX2lzb3BlbiA9 ICh4ID4gMCkgPyAxIDogMDsKKyAgICByZXR1cm4oeCk7Cit9CisKKy8qICBDIEEgTiBOIEUgRCAg LS0gIENoZWNrIGlmIGN1cnJlbnQgZmlsZSB0cmFuc2ZlciBjYW5jZWxsZWQgKi8KKworaW50Citj YW5uZWQoYnVmKSBDSEFSICpidWY7IHsKKyAgICBleHRlcm4gaW50IGludGVycnVwdGVkOworICAg IGlmICgqYnVmID09ICdYJykgY3hzZWVuID0gMTsKKyAgICBpZiAoKmJ1ZiA9PSAnWicpIGN6c2Vl biA9IDE7CisgICAgaWYgKGN6c2VlbiB8fCBjeHNlZW4pCisgICAgICBpbnRlcnJ1cHRlZCA9IDE7 CisgICAgZGVidWcoRjEwMSwiY2FubmVkOiBjeHNlZW4iLCIiLGN4c2Vlbik7CisgICAgZGVidWco RjEwMSwiIGN6c2VlbiIsIiIsY3pzZWVuKTsKKyAgICByZXR1cm4oKGN6c2VlbiB8fCBjeHNlZW4p ID8gMSA6IDApOworfQorCisKKy8qICBPIFAgRSBOIEkgIC0tICBPcGVuIGFuIGV4aXN0aW5nIGZp bGUgZm9yIGlucHV0ICAqLworCitpbnQKK29wZW5pKG5hbWUpIGNoYXIgKm5hbWU7IHsKKyNpZm5k ZWYgTk9TRVJWRVIKKyAgICBleHRlcm4gaW50IGZyb21nZXRwYXRoOworI2VuZGlmIC8qIE5PU0VS VkVSICovCisgICAgaW50IHgsIGZpbG5vOworICAgIGNoYXIgKm5hbWUyOworICAgIGV4dGVybiBD SEFSICplcGt0bXNnOworCisgICAgZXBrdG1zZ1swXSA9IE5VTDsJCQkvKiBJbml0aWFsaXplIGVy cm9yIG1lc3NhZ2UgKi8KKyAgICBpZiAobWVtc3RyIHx8IHNuZGFycmF5KSB7CQkvKiBKdXN0IHJl dHVybiBpZiAiZmlsZSIgaXMgbWVtb3J5LiAqLworCWlfaXNvcGVuID0gMTsKKwlyZXR1cm4oMSk7 CisgICAgfQorICAgIGRlYnVnKEYxMTAsIm9wZW5pIG5hbWUiLG5hbWUsMCk7CisgICAgZGVidWco RjEwMSwib3Blbmkgc25kc3JjIiwiIixzbmRzcmMpOworCisgICAgZmlsbm8gPSAoc25kc3JjID09 IDApID8gWlNURElPIDogWklGSUxFOyAgICAvKiAuLi4gKi8KKyAgICBkZWJ1ZyhGMTAxLCJvcGVu aSBmaWxlIG51bWJlciIsIiIsZmlsbm8pOworCisjaWZuZGVmIE5PU0VSVkVSCisgICAgLyogSWYg SSdtIGEgc2VydmVyIGFuZCBDV0QgaXMgZGlzYWJsZWQgYW5kIG5hbWUgaXMgbm90IGZyb20gR0VU LVBBVEguLi4gKi8KKworICAgIGlmIChzZXJ2ZXIgJiYgIWVuX2N3ZCAmJiAhZnJvbWdldHBhdGgp IHsKKwl6c3RyaXAobmFtZSwmbmFtZTIpOworCWlmICgJCQkJLyogLi4uIGNoZWNrIGlmIHBhdGhu YW1lIGluY2x1ZGVkLiAqLworI2lmZGVmIFZNUworCSAgICB6Y2hrcGF0aChuYW1lKQorI2Vsc2UK KwkgICAgc3RyY21wKG5hbWUsbmFtZTIpCisjZW5kaWYgLyogVk1TICovCisJICAgICkgeworCSAg ICB0bG9nKEYxMTAsbmFtZSwiYWNjZXNzIGRlbmllZCIsMEwpOworCSAgICBkZWJ1ZyhGMTEwLCJv cGVuaSBDRCBkaXNhYmxlZCIsbmFtZSwwKTsKKwkgICAgY2tzdHJuY3B5KChjaGFyICopZXBrdG1z ZywiQWNjZXNzIGRlbmllZCIsUEtUTVNHTEVOKTsKKwkgICAgcmV0dXJuKDApOworCX0gZWxzZSBu YW1lID0gbmFtZTI7CisgICAgfQorI2VuZGlmIC8qIE5PU0VSVkVSICovCisKKyNpZmRlZiBQSVBF U0VORAorICAgIGRlYnVnKEYxMDEsIm9wZW5pIHBpcGVzZW5kIiwiIixwaXBlc2VuZCk7CisgICAg aWYgKHBpcGVzZW5kKSB7CisJaW50IHg7CisjaWZuZGVmIE5PUFVTSAorCXggPSB6eGNtZChaSUZJ TEUsbmFtZSk7CisjZWxzZQorCXggPSAwOworI2VuZGlmIC8qIE5PUFVTSCAqLworCWlfaXNvcGVu ID0gKHggPiAwKSA/IDEgOiAwOworCWlmICghaV9pc29wZW4pCisJICBja3N0cm5jcHkoKGNoYXIg KillcGt0bXNnLCJDb21tYW5kIG9yIHBpcGUgZmFpbHVyZSIsUEtUTVNHTEVOKTsKKwlkZWJ1ZyhG MTExLCJvcGVuaSBwaXBlc2VuZCB6eGNtZCIsbmFtZSx4KTsKKwlyZXR1cm4oaV9pc29wZW4pOwor ICAgIH0KKyNlbmRpZiAvKiBQSVBFU0VORCAqLworCisjaWZkZWYgQ0FMSUJSQVRFCisgICAgaWYg KGNhbGlicmF0ZSkgeworCWlfaXNvcGVuID0gMTsKKyAgICAJcmV0dXJuKDEpOworICAgIH0KKyNl bmRpZiAvKiBDQUxJQlJBVEUgKi8KKworICAgIHggPSB6b3BlbmkoZmlsbm8sbmFtZSk7CQkvKiBP dGhlcndpc2UsIHRyeSB0byBvcGVuIGl0LiAqLworICAgIGRlYnVnKEYxMTEsIm9wZW5pIHpvcGVu aSAxIixuYW1lLHgpOworICAgIGlmICh4KSB7CisJaV9pc29wZW4gPSAxOworICAgIAlyZXR1cm4o MSk7CisgICAgfSBlbHNlIHsJCQkJLyogSWYgbm90IGZvdW5kLCAqLworCWNoYXIgeG5hbWVbQ0tN QVhQQVRIXTsJCS8qIGNvbnZlcnQgdGhlIG5hbWUgKi8KKyNpZmRlZiBOWkxUT1IKKwluenJ0b2wo bmFtZSx4bmFtZSxmbmNudixmbnJwYXRoLENLTUFYUEFUSCk7CisjZWxzZQorCXpydG9sKG5hbWUs eG5hbWUpOwkJLyogdG8gbG9jYWwgZm9ybSBhbmQgdGhlbiAqLworI2VuZGlmIC8qICBOWkxUT1Ig Ki8KKwl4ID0gem9wZW5pKGZpbG5vLHhuYW1lKTsJLyogdHJ5IG9wZW5pbmcgaXQgYWdhaW4uICov CisJZGVidWcoRjExMSwib3Blbmkgem9wZW5pIDIiLHhuYW1lLHgpOworCWlmICh4KSB7CisJICAg IGlfaXNvcGVuID0gMTsKKwkgICAgcmV0dXJuKDEpOwkJCS8qIEl0IHdvcmtlZC4gKi8KKyAgICAg ICAgfSBlbHNlIHsKKwkgICAgY2hhciAqIHM7CisJICAgIHMgPSBja19lcnJzdHIoKTsKKwkgICAg aWYgKHMpIGlmICghcykgcyA9IE5VTEw7CisJICAgIGlmICghcykgcyA9ICJDYW4ndCBvcGVuIGZp bGUiOworCSAgICBja3N0cm5jcHkoKGNoYXIgKillcGt0bXNnLHMsUEtUTVNHTEVOKTsKKwkgICAg dGxvZyhGMTEwLHhuYW1lLHMsMEwpOworCSAgICBkZWJ1ZyhGMTEwLCJvcGVuaSBmYWlsZWQiLHhu YW1lLDApOworCSAgICBkZWJ1ZyhGMTEwLCJvcGVuaSBtZXNzYWdlIixzLDApOworCSAgICBpX2lz b3BlbiA9IDA7CisJICAgIHJldHVybigwKTsKKyAgICAgICAgfQorICAgIH0KK30KKworLyogIE8g UCBFIE4gTyAgLS0gIE9wZW4gYSBuZXcgZmlsZSBmb3Igb3V0cHV0LiAgKi8KKworaW50CitvcGVu byhuYW1lLHp6LGZjYikgY2hhciAqbmFtZTsgc3RydWN0IHphdHRyICp6ejsgc3RydWN0IGZpbGlu Zm8gKmZjYjsgeworICAgIGNoYXIgKm5hbWUyOworI2lmZGVmIERUSUxERQorICAgIGNoYXIgKmRp cnA7CisjZW5kaWYgLyogRFRJTERFICovCisKKyAgICBpbnQgY2hhbm5lbCwgeDsKKworICAgIGlm IChzdGRvdWYpIHsJCQkJLyogUmVjZWl2aW5nIHRvIHN0ZG91dD8gKi8KKwl4ID0gem9wZW5vKFpT VERJTywiIix6eixOVUxMKTsKKwlvX2lzb3BlbiA9ICh4ID4gMCk7CisJZGVidWcoRjEwMSwib3Bl bm8gc3Rkb3VmIHpvcGVubyIsIiIseCk7CisJcmV0dXJuKHgpOworICAgIH0KKyAgICBkZWJ1ZyhG MTEwLCJvcGVubzogbmFtZSIsbmFtZSwwKTsKKworICAgIGlmIChjeHNlZW4gfHwgY3pzZWVuIHx8 IGRpc2NhcmQpIHsJLyogSWYgaW50ZXJydXB0ZWQsIGdldCBvdXQgYmVmb3JlICovCisJZGVidWco RjEwMCwiIG9wZW4gY2FuY2VsbGVkIiwiIiwwKTsgLyogZGVzdHJveWluZyBleGlzdGluZyBmaWxl LiAqLworCXJldHVybigxKTsJCQkvKiBQcmV0ZW5kIHRvIHN1Y2NlZWQuICovCisgICAgfQorICAg IGNoYW5uZWwgPSBaT0ZJTEU7CQkJLyogU0VUIERFU1RJTkFUSU9OIERJU0sgb3IgUFJJTlRFUiAq LworCisjaWZkZWYgUElQRVNFTkQKKyAgICBkZWJ1ZyhGMTAxLCJvcGVubyBwaXBlc2VuZCIsIiIs cGlwZXNlbmQpOworICAgIGlmIChwaXBlc2VuZCkgeworCWludCB4OworI2lmbmRlZiBOT1BVU0gK Kwl4ID0genhjbWQoWk9GSUxFLChjaGFyICopc3J2Y21kKTsKKyNlbHNlCisJeCA9IDA7CisjZW5k aWYgLyogTk9QVVNIICovCisJb19pc29wZW4gPSB4ID4gMDsKKwlkZWJ1ZyhGMTAxLCJvcGVubyB6 eGNtZCIsIiIseCk7CisJcmV0dXJuKHgpOworICAgIH0KKyNlbmRpZiAvKiBQSVBFU0VORCAqLwor CisgICAgaWYgKGRlc3QgPT0gREVTVF9TKSB7CQkvKiBTRVQgREVTVCBTQ1JFRU4uLi4gKi8KKwlj aGFubmVsID0gWkNURVJNOworCWZjYiA9IE5VTEw7CisgICAgfQorI2lmZGVmIERUSUxERQorICAg IGlmICgqbmFtZSA9PSAnficpIHsKKwlkaXJwID0gdGlsZGVfZXhwYW5kKG5hbWUpOworCWlmICgq ZGlycCkgY2tzdHJuY3B5KG5hbWUsZGlycCxDS01BWFBBVEgrMSk7CisgICAgfQorI2VuZGlmIC8q IERUSUxERSAqLworICAgIGlmIChzZXJ2ZXIgJiYgIWVuX2N3ZCkgewkJLyogSWYgcnVubmluZyBh cyBzZXJ2ZXIgKi8KKwl6c3RyaXAobmFtZSwmbmFtZTIpOwkJLyogYW5kIENXRCBpcyBkaXNhYmxl ZCwgKi8KKwlpZiAoc3RyY21wKG5hbWUsbmFtZTIpKSB7CS8qIGNoZWNrIGlmIHBhdGhuYW1lIHdh cyBpbmNsdWRlZC4gKi8KKwkgICAgdGxvZyhGMTEwLG5hbWUsImF1dGhvcml6YXRpb24gZmFpbHVy ZSIsMEwpOworCSAgICBkZWJ1ZyhGMTEwLCJvcGVubyBDRCBkaXNhYmxlZCIsbmFtZSwwKTsKKwkg ICAgcmV0dXJuKDApOworCX0gZWxzZSBuYW1lID0gbmFtZTI7CisgICAgfQorICAgIGlmICh6b3Bl bm8oY2hhbm5lbCxuYW1lLHp6LGZjYikgPD0gMCkgeyAvKiBUcnkgdG8gb3BlbiB0aGUgZmlsZSAq LworCW9faXNvcGVuID0gMDsKKwlkZWJ1ZyhGMTEwLCJvcGVubyBmYWlsZWQiLG5hbWUsMCk7CisJ LyogdGxvZyhGMTEwLCJGYWlsdXJlIHRvIG9wZW4iLG5hbWUsMEwpOyAqLworCXJldHVybigwKTsK KyAgICB9IGVsc2UgeworCW9faXNvcGVuID0gMTsKKwlkZWJ1ZyhGMTEwLCJvcGVubyBvaywgbmFt ZSIsbmFtZSwwKTsKKwlyZXR1cm4oMSk7CisgICAgfQorfQorCisvKiAgTyBQIEUgTiBUICAtLSAg T3BlbiB0aGUgdGVybWluYWwgZm9yIG91dHB1dCwgaW4gcGxhY2Ugb2YgYSBmaWxlICAqLworCitp bnQKK29wZW50KHp6KSBzdHJ1Y3QgemF0dHIgKnp6OyB7CisgICAgaW50IHg7CisgICAgZmZjID0g dGZjID0gKENLX09GRl9UKTA7CisgICAgeCA9IHpvcGVubyhaQ1RFUk0sIiIsenosTlVMTCk7Cisg ICAgZGVidWcoRjEwMSwib3BlbnQgem9wZW5vIiwiIix4KTsKKyAgICBpZiAoeCA+PSAwKSB7CisJ b19pc29wZW4gPSAxOworCWJpbmFyeSA9IFhZRlRfVDsKKyAgICB9IGVsc2UKKyAgICAgIHJldHVy bigwKTsKKyAgICByZXR1cm4oeCk7Cit9CisKKy8qICBPIFAgRSBOIFggIC0tICBPcGVuIG5vdGhp bmcgKGluY29taW5nIGZpbGUgdG8gYmUgYWNjZXB0ZWQgYnV0IGlnbm9yZWQpICAqLworCitpbnQK K2Nrb3BlbngoenopIHN0cnVjdCB6YXR0ciAqeno7IHsKKyAgICBmZmMgPSB0ZmMgPSAoQ0tfT0ZG X1QpMDsJCS8qIFJlc2V0IGNvdW50ZXJzICovCisgICAgb19pc29wZW4gPSAxOworICAgIGRlYnVn KEYxMDEsImNrb3BlbnggZnNpemUiLCIiLGZzaXplKTsKKyAgICB4eHNjcmVlbihTQ1JfRlMsMCxm c2l6ZSwiIik7CS8qIExldCBzY3JlZW4gZGlzcGxheSBrbm93IHRoZSBzaXplICovCisgICAgcmV0 dXJuKDEpOworfQorCisvKiAgQyBMIFMgSSBGICAtLSAgQ2xvc2UgdGhlIGN1cnJlbnQgaW5wdXQg ZmlsZS4gKi8KKworaW50CitjbHNpZigpIHsKKyAgICBleHRlcm4gaW50IHhmZXJzdGF0LCBzdWNj ZXNzOworICAgIGludCB4ID0gMDsKKworICAgIGZjcHMoKTsJCQkvKiBDYWxjdWxhdGUgQ1BTIHF1 aWNrbHkgKi8KKworI2lmZGVmIGRhdGFnZW5lcmFsCisgICAgaWYgKChsb2NhbCkgJiYgKCFxdWll dCkpICAgIC8qIE9ubHkgZG8gdGhpcyBpZiBsb2NhbCAmIG5vdCBxdWlldCAqLworICAgICAgaWYg KG5maWxzIDwgMSkJCS8qIE1vcmUgZmlsZXMgdG8gc2VuZCAuLi4gbGVhdmUgaXQgb24hICovCisJ Y29ubm9pX210KCk7CisjZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KKworICAgIGRlYnVnKEYxMDEs ImNsc2lmIGlfaXNvcGVuIiwiIixpX2lzb3Blbik7CisgICAgaWYgKGlfaXNvcGVuKSB7CQkJLyog SWYgaW5wdXQgZmlsZSBpcyBvcGVuLi4uICovCisJaWYgKG1lbXN0cikgewkJCS8qIElmIGlucHV0 IHdhcyBtZW1vcnkgc3RyaW5nLCAqLworCSAgICBtZW1zdHIgPSAwOwkJCS8qIGluZGljYXRlIG5v IG1vcmUuICovCisJfSBlbHNlIHsKKwkgICAgeCA9IHpjbG9zZShaSUZJTEUpOwkJLyogZWxzZSBj bG9zZSBpbnB1dCBmaWxlLiAqLworCX0KKyNpZmRlZiBERUJVRworCWlmIChkZWJsb2cpIHsKKwkg ICAgZGVidWcoRjEwMSwiY2xzaWYgemNsb3NlIiwiIix4KTsKKwkgICAgZGVidWcoRjEwMSwiY2xz aWYgc3VjY2VzcyIsIiIsc3VjY2Vzcyk7CisJICAgIGRlYnVnKEYxMDEsImNsc2lmIHhmZXJzdGF0 IiwiIix4ZmVyc3RhdCk7CisJICAgIGRlYnVnKEYxMDEsImNsc2lmIGZzaXplIiwiIixmc2l6ZSk7 CisJICAgIGRlYnVnKEYxMDEsImNsc2lmIGZmYyIsIiIsZmZjKTsKKwkgICAgZGVidWcoRjEwMSwi Y2xzaWYgY3hzZWVuIiwiIixjeHNlZW4pOworCSAgICBkZWJ1ZyhGMTAxLCJjbHNpZiBjenNlZW4i LCIiLGN6c2Vlbik7CisJICAgIGRlYnVnKEYxMDEsImNsc2lmIGRpc2NhcmQiLCIiLGN6c2Vlbik7 CisJfQorI2VuZGlmIC8qIERFQlVHICovCisJaWYgKChjeHNlZW4gfHwgY3pzZWVuKSAmJiAhZXBr dHNlbnQpIHsgLyogSWYgaW50ZXJydXB0ZWQgKi8KKwkgICAgeHhzY3JlZW4oU0NSX1NULFNUX0lO VCwwbCwiIik7IC8qIHNheSBzbyAqLworI2lmZGVmIFRMT0cKKwkgICAgaWYgKHRyYWxvZyAmJiAh dGxvZ2ZtdCkKKwkgICAgICBkb3hsb2cod2hhdCxwc2ZzcGVjLGZzaXplLGJpbmFyeSwxLCJJbnRl cnJ1cHRlZCIpOworI2VuZGlmIC8qIFRMT0cgKi8KKwl9IGVsc2UgaWYgKGRpc2NhcmQgJiYgIWVw a3RzZW50KSB7IC8qIElmIEknbSByZWZ1c2luZyAqLworCSAgICB4eHNjcmVlbihTQ1JfU1QsU1Rf UkVGVSwwbCxyZWZ1c2VkKTsgLyogc2F5IHdoeSAqLworI2lmZGVmIFRMT0cKKwkgICAgaWYgKHRy YWxvZyAmJiAhdGxvZ2ZtdCkgeworCQljaGFyIGJ1ZlsxMjhdOworCQlja21ha21zZyhidWYsMTI4 LCJSZWZ1c2VkOiAiLHJlZnVzZWQsTlVMTCxOVUxMKTsKKwkJZG94bG9nKHdoYXQscHNmc3BlYyxm c2l6ZSxiaW5hcnksMSxidWYpOworCSAgICB9CisjZW5kaWYgLyogVExPRyAqLworCX0gZWxzZSBp ZiAoIWVwa3RyY3ZkICYmICFlcGt0c2VudCAmJiAhY3hzZWVuICYmICFjenNlZW4pIHsKKwkgICAg Q0tfT0ZGX1Qgeno7CisJICAgIHp6ID0gZmZjOworI2lmZGVmIENLX1JFU0VORAorCSAgICBpZiAo c2VuZG1vZGUgPT0gU01fUkVTRU5EIHx8IHNlbmRtb2RlID09IFNNX1BTRU5EKQorCSAgICAgIHp6 ICs9IHNlbmRzdGFydDsKKyNlbmRpZiAvKiBDS19SRVNFTkQgKi8KKwkgICAgZGVidWcoRjEwMSwi Y2xzaWYgZnN0YXRzIiwiIix6eik7CisJICAgIGZzdGF0cygpOwkJCS8qIFVwZGF0ZSBzdGF0aXN0 aWNzICovCisJICAgIGlmICgJCQkvKiBXYXMgdGhlIHdob2xlIGZpbGUgc2VudD8gKi8KKyNpZmRl ZiBWTVMKKwkJMAkJCS8qIE5vdCBhIHJlbGlhYmxlIGNoZWNrIGluIFZNUyAqLworI2Vsc2UKKyNp ZmRlZiBTVFJBVFVTCisJCTAJCQkvKiBQcm9iYWJseSBub3QgZm9yIFZPUyBlaXRoZXIgKi8KKyNl bHNlCisJCXp6IDwgZnNpemUKKyNpZmRlZiBDS19DVFJMWgorCQkmJiAoKGVvZm1ldGhvZCAhPSBY WUVPRl9aICYmICFiaW5hcnkpIHx8IGJpbmFyeSkKKyNlbmRpZiAvKiBDS19DVFJMWiAqLworI2Vu ZGlmIC8qIFNUUkFUVVMgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKwkJKSB7CisJCXh4c2NyZWVuKFND Ul9TVCxTVF9JTlQsMGwsIiIpOworI2lmZGVmIFRMT0cKKwkJaWYgKHRyYWxvZyAmJiAhdGxvZ2Zt dCkKKwkJICBkb3hsb2cod2hhdCxwc2ZzcGVjLGZzaXplLGJpbmFyeSwxLCJJbmNvbXBsZXRlIik7 CisjZW5kaWYgLyogVExPRyAqLworCSAgICB9IGVsc2UgeworI2lmZGVmIENPTU1FTlQKKwkJLyog Tm90IHlldCAtLSB3ZSBkb24ndCBoYXZlIGNvbmZpcm1hdGlvbiBmcm9tIHRoZSByZWNlaXZlciAq LworCQl4eHNjcmVlbihTQ1JfU1QsU1RfT0ssMGwsIiIpOworI2VuZGlmIC8qIENPTU1FTlQgKi8K KyNpZmRlZiBUTE9HCisJCWlmICh0cmFsb2cgJiYgIXRsb2dmbXQpCisJCSAgZG94bG9nKHdoYXQs cHNmc3BlYyxmc2l6ZSxiaW5hcnksMCwiIik7CisjZW5kaWYgLyogVExPRyAqLworCSAgICB9CisJ fQorICAgIH0KKyAgICBpX2lzb3BlbiA9IDA7CisgICAgaGNmbGcgPSAwOwkJCQkvKiBSZXNldCBm bGFncyAqLworICAgIHNlbmRzdGFydCA9IChDS19PRkZfVCkwOwkJLyogRG9uJ3QgZG8gdGhpcyBh Z2FpbiEgKi8KKyNpZmRlZiBDT01NRU5UCisvKgorICBUaGlzIHByZXZlbnRzIGEgc3Vic2VxdWVu dCBjYWxsIHRvIGNsc29mKCkgZnJvbSBkZWxldGluZyB0aGUgZmlsZQorICB3aGVuIGdpdmVuIHRo ZSBkaXNjYXJkIGZsYWcuCisqLworICAgICpmaWxuYW0gPSAnXDAnOwkJCS8qIGFuZCBjdXJyZW50 IGZpbGUgbmFtZSAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICByZXR1cm4oeCk7Cit9CisK KworLyogIEMgTCBTIE8gRiAgLS0gIENsb3NlIGFuIG91dHB1dCBmaWxlLiAgKi8KKworLyogIENh bGwgd2l0aCBkaXNwICE9IDAgaWYgZmlsZSBpcyB0byBiZSBkaXNjYXJkZWQuICAqLworLyogIFJl dHVybnMgLTEgdXBvbiBmYWlsdXJlIHRvIGNsb3NlLCAwIG9yIGdyZWF0ZXIgb24gc3VjY2Vzcy4g Ki8KKworaW50CitjbHNvZihkaXNwKSBpbnQgZGlzcDsgeworICAgIGludCB4ID0gMDsKKyAgICBl eHRlcm4gaW50IHN1Y2Nlc3M7CisKKyAgICBmY3BzKCk7CQkJCS8qIENhbGN1bGF0ZSBDUFMgcXVp Y2tseSAqLworCisgICAgZGVidWcoRjEwMSwiY2xzb2YgZGlzcCIsIiIsZGlzcCk7CisgICAgZGVi dWcoRjEwMSwiY2xzb2YgY3hzZWVuIiwiIixjeHNlZW4pOworICAgIGRlYnVnKEYxMDEsImNsc29m IHN1Y2Nlc3MiLCIiLHN1Y2Nlc3MpOworCisgICAgZGVidWcoRjEwMSwiY2xzb2Ygb19pc29wZW4i LCIiLG9faXNvcGVuKTsKKyAgICBpZiAoZm5jc2F2ICE9IC0xKSB7CQkJLyogU2F2ZWQgZmlsZSBj b2xsaXNpb24gYWN0aW9uLi4uICovCisJZm5jYWN0ID0gZm5jc2F2OwkJLyogUmVzdG9yZSBpdC4g Ki8KKwlmbmNzYXYgPSAtMTsJCQkvKiBVbnNhdmUgaXQuICovCisgICAgfQorI2lmZGVmIGRhdGFn ZW5lcmFsCisgICAgaWYgKChsb2NhbCkgJiYgKCFxdWlldCkpCQkvKiBPbmx5IGRvIHRoaXMgaWYg bG9jYWwgJiBub3QgcXVpZXQgKi8KKyAgICAgIGNvbm5vaV9tdCgpOworI2VuZGlmIC8qIGRhdGFn ZW5lcmFsICovCisgICAgaWYgKG9faXNvcGVuICYmICFjYWxpYnJhdGUpIHsKKwlpZiAoKHggPSB6 Y2xvc2UoWk9GSUxFKSkgPCAwKSB7IC8qIFRyeSB0byBjbG9zZSB0aGUgZmlsZSAqLworCSAgICB0 bG9nKEYxMDAsIkZhaWx1cmUgdG8gY2xvc2UiLGZpbG5hbSwwTCk7CisJICAgIHh4c2NyZWVuKFND Ul9TVCxTVF9FUlIsMGwsIkNhbid0IGNsb3NlIGZpbGUiKTsKKyNpZmRlZiBUTE9HCisJICAgIGlm ICh0cmFsb2cgJiYgIXRsb2dmbXQpCisJICAgICAgZG94bG9nKHdoYXQscHJmc3BlYyxmc2l6ZSxi aW5hcnksMSwiQ2FuJ3QgY2xvc2UgZmlsZSIpOworI2VuZGlmIC8qIFRMT0cgKi8KKwl9IGVsc2Ug aWYgKGRpc3ApIHsJCS8qIEludGVycnVwdGVkIG9yIHJlZnVzZWQgKi8KKwkgICAgaWYgKGtlZXAg PT0gMCB8fAkJLyogSWYgbm90IGtlZXBpbmcgaW5jb21wbGV0ZSBmaWxlcyAqLworCQkoa2VlcCA9 PSBTRVRfQVVUTyAmJiBiaW5hcnkgPT0gWFlGVF9UKQorCQkpIHsKKwkJaWYgKCpmaWxuYW0gJiYg KHdoYXQgJiBXX1JFQ1YpKSAvKiBBTkQgd2UncmUgcmVjZWl2aW5nICovCisJCSAgemRlbGV0KGZp bG5hbSk7CS8qIE9OTFkgVEhFTiwgZGVsZXRlIGl0ICovCisJCWlmICh3aGF0ICYgV19LRVJNSVQp IHsKKwkJICAgIGRlYnVnKEYxMDAsImNsc29mIGluY29tcGxldGUgZGlzY2FyZGVkIiwiIiwwKTsK KwkJICAgIHRsb2coRjEwMCwiIGluY29tcGxldGU6IGRpc2NhcmRlZCIsIiIsMEwpOworCQkgICAg aWYgKCFlcGt0cmN2ZCAmJiAhZXBrdHNlbnQpIHsKKwkJCXh4c2NyZWVuKFNDUl9TVCxTVF9ESVND LDBsLCIiKTsKKyNpZmRlZiBUTE9HCisJCQlpZiAodHJhbG9nICYmICF0bG9nZm10KQorCQkJICBk b3hsb2cod2hhdCxwcmZzcGVjLGZzaXplLGJpbmFyeSwxLCJEaXNjYXJkZWQiKTsKKyNlbmRpZiAv KiBUTE9HICovCisJCSAgICB9CisJCX0KKwkgICAgfSBlbHNlIHsJCQkvKiBLZWVwIGluY29tcGxl dGUgY29weSAqLworCQlkZWJ1ZyhGMTAwLCJjbHNvZiBmc3RhdHMgMSIsIiIsMCk7CisJCWZzdGF0 cygpOworCQlpZiAoIWRpc2NhcmQpIHsJIC8qIFVubGVzcyBkaXNjYXJkaW5nIGZvciBvdGhlciBy ZWFzb24uLi4gKi8KKwkJICAgIGlmICh3aGF0ICYgV19LRVJNSVQpIHsKKwkJCWRlYnVnKEYxMDAs ImNsb3NmIGluY29tcGxldGUga2VwdCIsIiIsMCk7CisJCQl0bG9nKEYxMDAsIiBpbmNvbXBsZXRl OiBrZXB0IiwiIiwwTCk7CisJCSAgICB9CisJCX0KKwkJaWYgKHdoYXQgJiBXX0tFUk1JVCkgewor CQkgICAgaWYgKCFlcGt0cmN2ZCAmJiAhZXBrdHNlbnQpIHsKKwkJCXh4c2NyZWVuKFNDUl9TVCxT VF9JTkMsMGwsIiIpOworI2lmZGVmIFRMT0cKKwkJCWlmICh0cmFsb2cgJiYgIXRsb2dmbXQpCisJ CQkgIGRveGxvZyh3aGF0LHByZnNwZWMsZnNpemUsYmluYXJ5LDEsIkluY29tcGxldGUiKTsKKyNl bmRpZiAvKiBUTE9HICovCisJCSAgICB9CisJCX0KKwkgICAgfQorCX0KKyAgICB9CisgICAgaWYg KG9faXNvcGVuICYmIHggPiAtMSAmJiAhZGlzcCkgeworCWRlYnVnKEYxMTAsImNsc29mIE9LIixy ZnNwZWMsMCk7CisJbWFrZXN0cigmcmZzcGVjLHByZnNwZWMpOworCW1ha2VzdHIoJnJyZnNwZWMs cHJyZnNwZWMpOworCWZzdGF0cygpOworCWlmICghZXBrdHJjdmQgJiYgIWVwa3RzZW50ICYmICFj eHNlZW4gJiYgIWN6c2VlbikgeworCSAgICB4eHNjcmVlbihTQ1JfU1QsU1RfT0ssMEwsIiIpOwor I2lmZGVmIFRMT0cKKwkgICAgaWYgKHRyYWxvZyAmJiAhdGxvZ2ZtdCkKKwkgICAgICBkb3hsb2co d2hhdCxyZnNwZWMsZnNpemUsYmluYXJ5LDAsIiIpOworI2VuZGlmIC8qIFRMT0cgKi8KKwl9Cisg ICAgfQorICAgIHJzX2xlbiA9IChDS19PRkZfVCkwOworICAgIG9faXNvcGVuID0gMDsJCQkvKiBU aGUgZmlsZSBpcyBub3Qgb3BlbiBhbnkgbW9yZS4gKi8KKyAgICBjeHNlZW4gPSAwOwkJCQkvKiBS ZXNldCBwZXItZmlsZSBpbnRlcnJ1cHRpb24gZmxhZyAqLworICAgIHJldHVybih4KTsJCQkJLyog U2VuZCBiYWNrIHpjbG9zZSgpIHJldHVybiBjb2RlLiAqLworfQorCisjaWZkZWYgU1VOT1M0UzUK K3RvbG93ZXIoYykgY2hhciBjOyB7IHJldHVybigoYyktJ0EnKydhJyk7IH0KK3RvdXBwZXIoYykg Y2hhciBjOyB7IHJldHVybigoYyktJ2EnKydBJyk7IH0KKyNlbmRpZiAvKiBTVU5PUzRTNSAqLwor I2VuZGlmIC8qIE5PWEZFUiAqLwoKZGlmZiAtLWdpdCBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9j a2VybWl0LTkuMC4zMDIvY2tjZm5zLmMgYi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05 LjAuMzAyL2NrY2Zucy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmMmJk ODYKLS0tIC9kZXYvbnVsbAorKysgYi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAu MzAyL2NrY2Zucy5jCkBAIC0wLDAgKzEsNzE2NSBAQAorY2hhciAqZm5zdiA9ICJDLUtlcm1pdCBm dW5jdGlvbnMsIDkuMC4yMzMsIDMgSnVuIDIwMTEiOworCitjaGFyICpubVtdID0gIHsgIkRpc2Fi bGVkIiwgIkxvY2FsIG9ubHkiLCAiUmVtb3RlIG9ubHkiLCAiRW5hYmxlZCIgfTsKKworLyogIEMg SyBDIEYgTiBTICAtLSAgU3lzdGVtLWluZGVwZW5kZW50IEtlcm1pdCBwcm90b2NvbCBzdXBwb3J0 IGZ1bmN0aW9ucy4gICovCisKKy8qICAuLi5QYXJ0IDEgKG90aGVycyBtb3ZlZCB0byBja2NmbjIs MyB0byBtYWtlIHRoaXMgbW9kdWxlIHNtYWxsZXIpICovCisKKy8qCisgIEF1dGhvcjogRnJhbmsg ZGEgQ3J1eiA8ZmRjQGNvbHVtYmlhLmVkdT4sCisgIENvbHVtYmlhIFVuaXZlcnNpdHkgQWNhZGVt aWMgSW5mb3JtYXRpb24gU3lzdGVtcywgTmV3IFlvcmsgQ2l0eS4KKworICBDb3B5cmlnaHQgKEMp IDE5ODUsIDIwMTEsCisgICAgVHJ1c3RlZXMgb2YgQ29sdW1iaWEgVW5pdmVyc2l0eSBpbiB0aGUg Q2l0eSBvZiBOZXcgWW9yay4KKyAgICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgU2VlIHRoZSBDLUtl cm1pdCBDT1BZSU5HLlRYVCBmaWxlIG9yIHRoZQorICAgIGNvcHlyaWdodCB0ZXh0IGluIHRoZSBj a2NtYWkuYyBtb2R1bGUgZm9yIGRpc2NsYWltZXIgYW5kIHBlcm1pc3Npb25zLgorKi8KKy8qCisg U3lzdGVtLWRlcGVuZGVudCBwcmltaXRpdmVzIGRlZmluZWQgaW46CisKKyAgIGNrP3Rpby5jIC0t IHRlcm1pbmFsIChjb21tdW5pY2F0aW9ucykgaS9vCisgICBjeD9maW8uYyAtLSBmaWxlIGkvbywg ZGlyZWN0b3J5IHN0cnVjdHVyZQorKi8KKyNpbmNsdWRlICJja2NzeW0uaCIJCQkvKiBOZWVkZWQg Zm9yIFN0cmF0dXMgVk9TICovCisjaW5jbHVkZSAiY2tjYXNjLmgiCQkJLyogQVNDSUkgc3ltYm9s cyAqLworI2luY2x1ZGUgImNrY2RlYi5oIgkJCS8qIERlYnVnIGZvcm1hdHMsIHR5cGVkZWZzLCBl dGMuICovCisjaW5jbHVkZSAiY2tja2VyLmgiCQkJLyogU3ltYm9sIGRlZmluaXRpb25zIGZvciBL ZXJtaXQgKi8KKyNpbmNsdWRlICJja2N4bGEuaCIJCQkvKiBDaGFyYWN0ZXIgc2V0IHN5bWJvbHMg Ki8KKyNpbmNsdWRlICJja2NuZXQuaCIgICAgICAgICAgICAgICAgICAgICAvKiBWTVMgZGVmaW5p dGlvbiBvZiBUQ1BTT0NLRVQgKi8KKyNpZmRlZiBPUzIKKyNpZmRlZiBPUzJPTkxZCisjaW5jbHVk ZSA8b3MyLmg+CisjZW5kaWYgLyogT1MyT05MWSAqLworI2luY2x1ZGUgImNrb2Nvbi5oIgorI2Vu ZGlmIC8qIE9TMiAqLworCitpbnQgZG9jcmMgID0gMDsJCQkJLyogQWNjdW11bGF0ZSBDUkMgZm9y IFx2KGNyYzE2KSAqLworbG9uZyBjcmMxNiA9IDBMOwkJCS8qIEZpbGUgQ1JDID0gXHYoY3JjMTYp ICovCitpbnQgZ25mZXJyb3IgPSAwOwkJCS8qIGduZmlsZSgpIGZhaWx1cmUgcmVhc29uICovCisK K2V4dGVybiBDSEFSIGZlb2w7CitleHRlcm4gaW50IGJ5dGVvcmRlciwgeGZsZywgd2hhdCwgZm1h c2ssIGN4c2VlbiwgY3pzZWVuLCBuc2NhbmZpbGUsIHN5c2luZGV4OworZXh0ZXJuIGludCB4Y21k c3JjLCBkaXNwb3MsIG1hdGNoZmlmbzsKK2V4dGVybiBpbnQgaW5zZXJ2ZXI7CisKK2V4dGVybiBp bnQgbm9saW5rczsKKyNpZmRlZiBWTVNPUlVOSVgKK2V4dGVybiBpbnQgemdmc19kaXI7CisjaWZk ZWYgQ0tTWU1MSU5LCitleHRlcm4gaW50IHpnZnNfbGluazsKKyNlbmRpZiAvKiBDS1NZTUxJTksg Ki8KKyNlbmRpZiAvKiBWTVNPUlVOSVggKi8KKworI2lmbmRlZiBOT1hGRVIKKworI2lmbmRlZiBO T0lDUAorI2lmbmRlZiBOT1NQTAorZXh0ZXJuIGNoYXIgKiBjbGNtZHM7CitleHRlcm4gaW50IGhh dmV1cmw7CisjaWZkZWYgQ0tfQVBDCitleHRlcm4gaW50IGFwY2FjdGl2ZSwgYWRsX2FzazsKKyNl bmRpZiAvKiBDS19BUEMgKi8KKyNlbmRpZiAvKiBOT1NQTCAqLworI2VuZGlmIC8qIE5PSUNQICov CisKK2V4dGVybiBpbnQgcmVtZmlsZTsKKworLyogKG1vdmUgdGhlc2UgcHJvdG90eXBlcyB0byB0 aGUgYXBwcm9wcmlhdGUgLmggZmlsZXMuLi4pICovCisKKyNpZmRlZiBDT01NRU5UCisvKiBOb3Qg dXNlZCAqLworI2lmZGVmIFZNUworX1BST1RPVFlQKCBpbnQgZ2V0dm51bSwgKGNoYXIgKikgKTsK KyNlbmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisKK19QUk9UT1RZUCggc3Rh dGljIGludCBiZ2V0cGt0LCAoaW50KSApOworI2lmbmRlZiBOT0NTRVRTCitfUFJPVE9UWVAoIGlu dCBsb29rdXAsIChzdHJ1Y3Qga2V5dGFiW10sIGNoYXIgKiwgaW50LCBpbnQgKikgKTsKKyNlbmRp ZiAvKiBOT0NTRVRTICovCisjaWZuZGVmIE5PU1BMCitfUFJPVE9UWVAoIGludCB6enN0cmluZywg KGNoYXIgKiwgY2hhciAqKiwgaW50ICopICk7CisjZW5kaWYgLyogTk9TUEwgKi8KKworI2lmZGVm IE9TMgorI2luY2x1ZGUgPGlvLmg+CisjaWZkZWYgT1MyT05MWQorI2luY2x1ZGUgPG9zMi5oPgor I2VuZGlmIC8qIE9TMk9OTFkgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKworI2lmZGVmIFZNUworI2lu Y2x1ZGUgPGVycm5vLmg+CisjZW5kaWYgLyogVk1TICovCisKKy8qIEV4dGVybmFscyBmcm9tIGNr Y21haS5jICovCisKK2V4dGVybiBpbnQgc3J2Y2Rtc2csIHNydmlkbCwgaWRsZXRtbzsKK2V4dGVy biBjaGFyICogY2Rtc2dmaWxlW107CitleHRlcm4gaW50IHNwc2l6LCBzcG1heCwgcnBzaXosIHRp bWludCwgc3J2dGltLCBydGltbywgbnBhZCwgZWJxLCBlYnFmbGcsCisgcnB0LCBycHRxLCBycHRm bGcsIGNhcGFzLCBrZWVwLCBmbmNhY3QsIHBrdHRpbSwgYXV0b3Bhciwgc3BzaXpyLCB4aXRzdGE7 CitleHRlcm4gaW50IHBrdG51bSwgYmN0ciwgYmN0dSwgYmN0ZiwgYmN0bCwgY2xmaWxzLCBzYnVm bnVtLCBwcm90b2NvbCwKKyBzaXplLCBvc2l6ZSwgc3BrdGwsIG5maWxzLCBja3dhcm4sIHRpbWVm LCBzcHNpemYsIHNuZHR5cCwgcmN2dHlwLCBzdWNjZXNzOworZXh0ZXJuIGludCBwYXJpdHksIHR1 cm4sIG5ldHdvcmssIHdoYXRydSwgZnNlY3MsIGp1c3RvbmUsIHNsb3N0YXJ0LAorIGNrZGVsYXks IGRpc3BsYSwgbXlwYWRuLCBtb3ZpbmcsIHJlY3Vyc2l2ZSwgbmV0dHlwZTsKK2V4dGVybiBsb25n IGZpbGNudDsKK2V4dGVybiBDS19PRkZfVAorIHRmYywgZnNpemUsIHNlbmRzdGFydCwgcnNfbGVu LCBmbGNpLCBmbGNvLCB0bGNpLCB0bGNvLCBjYWxpYnJhdGU7CitleHRlcm4gbG9uZyBmaWxyZWos IG9sZGNwcywgY3BzLCBwZWFrY3BzLCBjY3UsIGNjcCwgZmlsZXN0YXR1czsKK2V4dGVybiBpbnQg ZmJsa3NpeiwgZnJlY2wsIGZyZWNmbSwgZm9yZywgZmNjdHJsLCBmZGlzcGxhLCBza2lwYnVwOwor ZXh0ZXJuIGludCBzcGFja2V0cywgcnBhY2tldHMsIHRpbWVvdXRzLCByZXRyYW5zLCBjcnVuY2hl ZCwgd21heCwgd2N1cjsKK2V4dGVybiBpbnQgaGNmbGcsIGJpbmFyeSwgZm5jbnYsIGJfc2F2ZSwg Zl9zYXZlLCBzZXJ2ZXI7CitleHRlcm4gaW50IG5ha3N0YXRlLCBkaXNjYXJkLCByZWplY3Rpb24s IGxvY2FsLCB4ZmVybW9kZSwgaW50ZXJydXB0ZWQ7CitleHRlcm4gaW50IHJxLCBycWYsIHNxLCB3 c2xvdHMsIHdzbG90biwgd3Nsb3RyLCB3aW5sbywgdXJwc2l6LCBybG47CitleHRlcm4gaW50IGZu c3BhdGgsIGZucnBhdGgsIGVvZm1ldGhvZCwgZGlyYWN0aXZlLCB3aGF0cnUyLCB3ZWFyZWFsaWtl OworZXh0ZXJuIGludCBhdGNhcHIsIGF0Y2FwYiwgYXRjYXB1OworZXh0ZXJuIGludCBscGNhcHIs IGxwY2FwYiwgbHBjYXB1OworZXh0ZXJuIGludCBzd2NhcHIsIHN3Y2FwYiwgc3djYXB1OworZXh0 ZXJuIGludCBsc2NhcHIsIGxzY2FwYiwgbHNjYXB1OworZXh0ZXJuIGludCByc2NhcHIsIHJzY2Fw YiwgcnNjYXB1OworZXh0ZXJuIGludCBycHRlbmEsIHJwdG1pbjsKK2V4dGVybiBpbnQgc3NlcXRi bFtdOworZXh0ZXJuIGludCBudW1lcnJzLCBuenhvcHRzOworZXh0ZXJuIGxvbmcgcnB0bjsKK2V4 dGVybiBpbnQgbWF4dHJ5OworZXh0ZXJuIGludCBzdGRvdWY7CitleHRlcm4gaW50IHNlbmRtb2Rl OworZXh0ZXJuIGludCBjYXJyaWVyLCB0dHBydHk7CitleHRlcm4gaW50IGdfZm5ycGF0aDsKKyNp ZmRlZiBUQ1BTT0NLRVQKK2V4dGVybiBpbnQgdHRucHJvdG87CisjZW5kaWYgLyogVENQU09DS0VU ICovCisKKyNpZm5kZWYgTk9TUEwKK2V4dGVybiBpbnQgc25keGluLCBzbmR4aGksIHNuZHhsbzsK KyNlbmRpZiAvKiBOT1NQTCAqLworCitleHRlcm4gaW50IGdfYmluYXJ5LCBnX2ZuY252OworCisj aWZkZWYgR0ZUSU1FUgorZXh0ZXJuIENLRkxPQVQgZnBmc2VjczsKKyNlbmRpZiAvKiBHRlRJTUVS ICovCisKKyNpZmRlZiBPUzIKK2V4dGVybiBzdHJ1Y3QgemF0dHIgaWF0dHI7CisjZW5kaWYgLyog T1MyICovCisKKyNpZmRlZiBQSVBFU0VORAorZXh0ZXJuIGludCB1c2VwaXBlczsKKyNlbmRpZiAv KiBQSVBFU0VORCAqLworZXh0ZXJuIGludCBwaXBlc2VuZDsKKworI2lmZGVmIFNUUkVBTUlORwor ZXh0ZXJuIGludCBzdHJlYW1ycSwgc3RyZWFtaW5nLCBzdHJlYW1lZCwgc3RyZWFtb2s7CisjZW5k aWYgLyogU1RSRUFNSU5HICovCitleHRlcm4gaW50IHJlbGlhYmxlLCBjbGVhcnJxLCBjbGVhcmVk LCB1cmNsZWFyOworCitleHRlcm4gaW50CisgIGF0ZW5jaSwgYXRlbmNvLCBhdGRhdGksIGF0ZGF0 bywgYXRsZW5pLCBhdGxlbm8sIGF0YmxraSwgYXRibGtvLAorICBhdHR5cGksIGF0dHlwbywgYXRz aWRpLCBhdHNpZG8sIGF0c3lzaSwgYXRzeXNvLCBhdGRpc2ksIGF0ZGlzbzsKKworZXh0ZXJuIGlu dCBiaWdzYnNpeiwgYmlncmJzaXo7CitleHRlcm4gY2hhciAqdmVyc2lvOworZXh0ZXJuIGNoYXIg KmZpbGVmaWxlOworZXh0ZXJuIGNoYXIgd2hvYXJldVtdLCAqIGNrc3lzaWQ7CisKKyNpZm5kZWYg Tk9TRVJWRVIKK2V4dGVybiBpbnQgbmdldHBhdGg7CitleHRlcm4gY2hhciAqIGdldHBhdGhbXTsK K2V4dGVybiBpbnQgZnJvbWdldHBhdGg7CisjZW5kaWYgLyogTk9TRVJWRVIgKi8KKworI2lmZGVm IENLX0xPR0lOCitleHRlcm4gaW50IGlzZ3Vlc3Q7CisjZW5kaWYgLyogQ0tfTE9HSU4gKi8KKwor ZXh0ZXJuIGludCBzcnZjbWRsZW47CitleHRlcm4gQ0hBUiAqc3J2Y21kLCAqIGVwa3Rtc2c7Citl eHRlcm4gQ0hBUiBwYWRjaCwgbXlwYWRjLCBlb2wsIHNlb2wsIGN0bHEsIG15Y3RscSwgc3N0YXRl LCBteXJwdHE7CitleHRlcm4gQ0hBUiAqZGF0YSwgcGFkYnVmW10sIHN0Y2hyLCBteXN0Y2g7Citl eHRlcm4gQ0hBUiAqc3J2cHRyOworZXh0ZXJuIENIQVIgKnJkYXRhcDsKK2V4dGVybiBjaGFyICpj bWFyZywgKmNtYXJnMiwgKipjbWxpc3QsIGZpbG5hbVtdLCBvZmlsbmFtW107CitleHRlcm4gY2hh ciAqcmZzcGVjLCAqcHJmc3BlYywgKnJyZnNwZWMsICpwcnJmc3BlYywgKnNmc3BlYywgKnBzZnNw ZWMsICpyZnNwZWM7CitleHRlcm4gY2hhciBmc3BlY1tdOworZXh0ZXJuIGludCBmc3BlY2xlbjsK KworI2lmbmRlZiBOT01TRU5ECitleHRlcm4gc3RydWN0IGZpbGVsaXN0ICogZmlsZWhlYWQsICog ZmlsZW5leHQ7CitleHRlcm4gaW50IGFkZGxpc3Q7CisjZW5kaWYgLyogTk9NU0VORCAqLworCitf UFJPVE9UWVAoIGludCBsc2xvb2ssICh1bnNpZ25lZCBpbnQgYikgKTsgLyogTG9ja2luZyBTaGlm dCBMb29rYWhlYWQgKi8KK19QUk9UT1RZUCggaW50IHN6ZW9mLCAoQ0hBUiAqcykgKTsKK19QUk9U T1RZUCggVk9JRCBmbmxpc3QsICh2b2lkKSApOworI2VuZGlmIC8qIE5PWEZFUiAqLworCitleHRl cm4gQ0tfT0ZGX1QgZmZjOworCisvKiBDaGFyYWN0ZXIgc2V0IFRyYW5zbGF0aW9uICovCisKKyNp Zm5kZWYgTk9DU0VUUworZXh0ZXJuIGludCB0Y2hhcnNldCwgZmNoYXJzZXQsIGRjc2V0NywgZGNz ZXQ4OworZXh0ZXJuIGludCBmY3Nfc2F2ZSwgdGNzX3NhdmU7CitleHRlcm4gaW50IG50Y3NldHMs IHhsYXR5cGUsIGNzZXF0YWJbXTsKK2V4dGVybiBzdHJ1Y3QgY3NpbmZvIHRjc2luZm9bXSwgZmNz aW5mb1tdOworZXh0ZXJuIGludCByX2NzZXQsIHNfY3NldCwgYWZjc2V0W107CisjaWZkZWYgVU5J Q09ERQorZXh0ZXJuIGludCB1Y3NvcmRlciwgZmlsZW9yZGVyOworI2VuZGlmIC8qIFVOSUNPREUg Ki8KKworX1BST1RPVFlQKCBDSEFSIGlkZW50LCAoQ0hBUikgKTsJLyogSWRlbnRpdHkgdHJhbnNs YXRpb24gZnVuY3Rpb24gKi8KKworLyogQXJyYXlzIG9mIGFuZCBwb2ludGVycyB0byBjaGFyYWN0 ZXIgdHJhbnNsYXRpb24gZnVuY3Rpb25zICovCisKKyNpZmRlZiBDS19BTlNJQworZXh0ZXJuIENI QVIgKCpyeCkoQ0hBUik7IC8qIFBvaW50ZXIgdG8gaW5wdXQgY2hhcmFjdGVyIHRyYW5zbGF0aW9u IGZ1bmN0aW9uICovCitleHRlcm4gQ0hBUiAoKnN4KShDSEFSKTsgLyogUG9pbnRlciB0byBvdXRw dXQgY2hhcmFjdGVyIHRyYW5zbGF0aW9uIGZ1bmN0aW9uICovCitleHRlcm4gQ0hBUiAoKnhsc1tN QVhUQ1NFVFMrMV1bTUFYRkNTRVRTKzFdKShDSEFSKTsgLyogQnl0ZS10by1CeXRlIFNlbmQgKi8K K2V4dGVybiBDSEFSICgqeGxyW01BWFRDU0VUUysxXVtNQVhGQ1NFVFMrMV0pKENIQVIpOyAvKiBC eXRlLXRvLUJ5dGUgUmVjdiAqLworI2lmZGVmIFVOSUNPREUKK2V4dGVybiBpbnQgKCp4dXQpKFVT SE9SVCk7CS8qIFRyYW5zbGF0aW9uIGZ1bmN0aW9uIFVDUyB0byBUQ1MgKi8KK2V4dGVybiBpbnQg KCp4dWYpKFVTSE9SVCk7CS8qIFRyYW5zbGF0aW9uIGZ1bmN0aW9uIFVDUyB0byBGQ1MgKi8KK2V4 dGVybiBVU0hPUlQgKCp4dHUpKENIQVIpOwkvKiBUcmFuc2xhdGlvbiBmdW5jdGlvbiBUQ1MgdG8g VUNTICovCitleHRlcm4gVVNIT1JUICgqeGZ1KShDSEFSKTsJLyogVHJhbnNsYXRpb24gZnVuY3Rp b24gRkNTIHRvIFVDUyAqLworI2VuZGlmIC8qIFVOSUNPREUgKi8KKworI2Vsc2UgLyogVGhlIHNh bWUgZGVjbGFyYXRpb25zIGFnYWluIGZvciBub24tQU5TSSBjb21pbGVycy4uLiAqLworCitleHRl cm4gQ0hBUiAoKnJ4KSgpOworZXh0ZXJuIENIQVIgKCpzeCkoKTsKK2V4dGVybiBDSEFSICgqeGxz W01BWFRDU0VUUysxXVtNQVhGQ1NFVFMrMV0pKCk7CitleHRlcm4gQ0hBUiAoKnhscltNQVhUQ1NF VFMrMV1bTUFYRkNTRVRTKzFdKSgpOworI2lmZGVmIFVOSUNPREUKK2V4dGVybiBpbnQgKCp4dXQp KCk7CitleHRlcm4gaW50ICgqeHVmKSgpOworZXh0ZXJuIFVTSE9SVCAoKnh0dSkoKTsKK2V4dGVy biBVU0hPUlQgKCp4ZnUpKCk7CisjZW5kaWYgLyogVU5JQ09ERSAqLworI2VuZGlmIC8qIENLX0FO U0lDICovCisjZW5kaWYgLyogTk9DU0VUUyAqLworCisvKiAoUFdQKSBleHRlcm5hbCBkZWYuIG9m IHRoaW5ncyB1c2VkIGluIGJ1ZmZlcmVkIGZpbGUgaW5wdXQgYW5kIG91dHB1dCAqLworCisjaWZk ZWYgRFlOQU1JQworZXh0ZXJuIGNoYXIgKnppbmJ1ZmZlciwgKnpvdXRidWZmZXI7CisjZWxzZQor ZXh0ZXJuIGNoYXIgemluYnVmZmVyW10sIHpvdXRidWZmZXJbXTsKKyNlbmRpZiAvKiBEWU5BTUlD ICovCitleHRlcm4gY2hhciAqemlucHRyLCAqem91dHB0cjsKK2V4dGVybiBpbnQgemluY250LCB6 b3V0Y250LCB6b2J1ZnNpemUsIHhmcnhsYTsKKworZXh0ZXJuIGxvbmcgY3JjdGFbXSwgY3JjdGJb XTsJCS8qIENSQy0xNiBnZW5lcmF0aW9uIHRhYmxlcyAqLworZXh0ZXJuIGludCByc2VxdGJsW107 CQkJLyogUmVjJ2QtcGFja2V0IHNlcXVlbmNlICMgdGFibGUgKi8KKworI2lmbmRlZiBOT1hGRVIK KworLyogQ3JpdGVyaWEgdXNlZCBieSBnbmZpbGUoKS4uLiAqLworCitjaGFyIHNuZGFmdGVyWzE5 XSAgID0geyBOVUwsIE5VTCB9OworY2hhciBzbmRiZWZvcmVbMTldICA9IHsgTlVMLCBOVUwgfTsK K2NoYXIgc25kbmFmdGVyWzE5XSAgPSB7IE5VTCwgTlVMIH07CitjaGFyIHNuZG5iZWZvcmVbMTld ID0geyBOVUwsIE5VTCB9OworY2hhciAqc25kZXhjZXB0W05TTkRFWENFUFRdICA9IHsgTlVMTCwg TlVMTCB9OworY2hhciAqcmN2ZXhjZXB0W05TTkRFWENFUFRdICA9IHsgTlVMTCwgTlVMTCB9Owor Q0tfT0ZGX1Qgc25kc21hbGxlciA9IChDS19PRkZfVCktMTsKK0NLX09GRl9UIHNuZGxhcmdlciAg PSAoQ0tfT0ZGX1QpLTE7CisKKy8qIFZhcmlhYmxlcyBkZWZpbmVkIGluIHRoaXMgbW9kdWxlIGJ1 dCBzaGFyZWQgYnkgb3RoZXIgbW9kdWxlcy4gKi8KKworaW50IHhmcmJlbCA9IDE7CitjaGFyICog b2ZwZXJtcyA9ICIiOwkJCS8qIE91dHB1dCBmaWxlIHBlcm1pc3Npb25zICovCitpbnQgYXV0b3Bh dGggPSAwOwkJCS8qIFNFVCBSRUNFSVZFIFBBVEhOQU1FUyBBVVRPIGZsYWcgKi8KKworI2lmZGVm IENBTElCUkFURQorI2RlZmluZSBDQUxfTyAzCisjZGVmaW5lIENBTF9NIDI1MworCitpbnQgY2Fs X2ogPSAwOworCitDSEFSCitjYWxfYVtdID0geworIDE2LCA0NSwgOTgsICAzLCA1MiwgNDEsIDE0 LCAgNywgNzYsMTY1LDEyMiwgMTEsMTA0LCA3NywxNjYsIDE1LAorMTYwLCA5MywgMTgsIDE5LDEx MiwgODUsIDU0LCAyMywyMzIsMjEzLCA5MCwgMjcsIDEyLCA4MSwxMjYsIDMxLAorICA0LDIwNSwg MzQsIDM1LDE0NCwgNzMsMTEwLCAzOSwgMjgsMTMzLDIxOCwgNDMsMTU2LCA2NSwxMDIsIDQ3LAor IDg0LCA2MSwgNTAsIDUxLDIwOCwxMTcsIDg2LCA1NSwgIDgsMjQ1LCA3NCwgNTksIDQ0LDEyNSwy MjIsIDYzLAorIDgwLCAgMSwxNjIsIDY3LDExNiwxMDUsMjA2LCA3MSwxMjAsICA5LDI1MCwgNzUs IDg4LCA5NywgIDYsIDc5LAorMTAwLDIyMSwgODIsIDgzLCAzNiwgODksIDk0LCA4NywgNDAsIDIx LDEwNiwgOTEsMjM2LDE0NSwxNTAsIDk1LAorMjI4LCAzMywxMzAsIDk5LDE0OCwxMzcsMTk4LDEw MywxMDgsMTY5LCA0MiwxMDcsMTg0LDEyOSwgNzgsMTExLAorICAwLCA0OSwxMTQsMTE1LCAzMiwx MjEsMjU0LDExOSwxNzIsIDU3LDEzOCwxMjMsMTUyLDE3NywgMjIsMTI3LAorMjQwLDE5MywgIDIs MTMxLDE3NiwgIDUsIDM4LDEzNSwyMDQsMjI5LCAxMCwxMzksMjAwLDE2MSwxNzQsMTQzLAorMTI4 LCAxNywxNDYsMTQ3LCA2OCwxNTMsIDMwLDE1MSwgNzIsMjE3LDE3MCwxNTUsIDI0LDIwOSwgNjIs MTU5LAorIDY0LDIyNSwxOTQsMTYzLDI0NCwyMDEsIDcwLDE2NywyMTYsMTk3LDIzNCwxNzEsMTg4 LDEwOSwyMzAsMTc1LAorMjEyLDExMywxNzgsMTc5LDEzMiwxODUsMTkwLDE4MywxMzYsMjQ5LDIw MiwxODcsIDkyLDI0MSwxMTgsMTkxLAorIDQ4LDIzNywgNjYsMTk1LCA5NiwyMzMsMTQyLDE5OSwy NDgsIDM3LCA1OCwyMDMsIDYwLCAxMywxMzQsMjA3LAorIDIwLCAyOSwyMTAsMjExLDE2NCwxNDks MTgyLDIxNSwyMjAsIDI1LCAyNiwyMTksMTI0LDE1NywyNDYsMjIzLAorMTgwLDE0MSwyMjYsMjI3 LDE5MiwxMDEsMjM4LDIzMSwgNTYsIDY5LDE1NCwyMzUsMjUyLDE3MywgNDYsMjM5LAorMjI0LDI1 MywyNDIsMjQzLDE5NiwgNTMsMjE0LDI0NywxNjgsMTgxLDE4NiwyNTEsMTQwLDE4OSwxNTgsMjU1 Cit9OworI2VuZGlmIC8qIENBTElCUkFURSAqLworCitjaGFyICogcmZfZXJyID0gIkVycm9yIHJl Y2VpdmluZyBmaWxlIjsJLyogcmN2ZmlsKCkgZXJyb3IgbWVzc2FnZSAqLworCisjaWZkZWYgQ0tf U1BFRUQKK3Nob3J0IGN0bHBbMjU2XSA9IHsJCS8qIENvbnRyb2wtUHJlZml4IHRhYmxlICovCisg IDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEs MSwxLDEsMSwgLyogQzAgICovCisgIDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCww LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwgLyogRzAgICovCisgIDAsMCwwLDAsMCwwLDAs MCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwKKyAgMCww LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAs MCwxLCAvKiBERUwgKi8KKyAgMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwx LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLCAvKiBDMSAgKi8KKyAgMCwwLDAsMCwwLDAsMCwwLDAs MCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLCAvKiBHMSAgKi8K KyAgMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAs MCwwLDAsMCwwLAorICAwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCww LDAsMCwwLDAsMCwwLDAsMCwwLDEgIC8qIDI1NSAqLworfTsKKyNlbmRpZiAvKiBDS19TUEVFRCAq LworCitpbnQgc25kc3JjOwkJLyogRmxhZyBmb3Igd2hlcmUgdG8gZ2V0IG5hbWVzIG9mIGZpbGVz IHRvIHNlbmQ6ICovCisJCQkJCS8qIC0xOiB6bmV4dCgpIGZ1bmN0aW9uICovCisJCQkJCS8qICAw OiBzdGRpbiAqLworCQkJCQkvKiA+MDogbGlzdCBpbiBjbWxpc3Qgb3Igb3RoZXIgbGlzdCAqLwor CQkJCQkvKiAtOTogY2FsaWJyYXRlICovCisKK2ludCAgbWVtc3RyOwkJCQkvKiBGbGFnIGZvciBp bnB1dCBmcm9tIG1lbW9yeSBzdHJpbmcgKi8KK2ludCAgZnVuY3N0cjsJCQkJLyogRmxhZyBmb3Ig aW5wdXQgZnJvbSBmdW5jdGlvbiAqLworaW50ICBiZXN0bGVuID0gMDsKK2ludCAgbWF4c2VuZCA9 IDA7CisKK2ludCBnbmZfYmluYXJ5ID0gMDsJCQkvKiBQcmV2YWlsaW5nIHhmZXIgbW9kZSBmb3Ig Z25maWxlICovCisKKyNpZmRlZiBwZHAxMQorI2RlZmluZSBNWUlOSVRMRU4gMzIKKyNlbHNlCisj ZGVmaW5lIE1ZSU5JVExFTiAxMDAKKyNlbmRpZiAvKiBwZHAxMSAqLworQ0hBUiBteWluaXRbTVlJ TklUTEVOXTsJCQkvKiBDb3B5IG9mIG15IFNlbmQtSW5pdCBkYXRhICovCisKKy8qIFZhcmlhYmxl cyBsb2NhbCB0byB0aGlzIG1vZHVsZSAqLworCisjaWZkZWYgVExPRworI2lmbmRlZiBYWVpfSU5U RVJOQUwKK3N0YXRpYworI2VuZGlmIC8qIFhZWl9JTlRFUk5BTCAqLworY2hhciAqZm5jbmFtW10g PSB7CisgICJyZW5hbWUiLCAicmVwbGFjZSIsICJiYWNrdXAiLCAiYXBwZW5kIiwgImRpc2NhcmQi LCAiYXNrIiwKKyAgInVwZGF0ZSIsICJkYXRlcy1kaWZmZXIiLCAiIgorfTsKKyNlbmRpZiAvKiBU TE9HICovCisKK3N0YXRpYyBjaGFyICptZW1wdHI7CQkJLyogUG9pbnRlciBmb3IgbWVtb3J5IHN0 cmluZ3MgKi8KKworI2lmZGVmIFZNUworZXh0ZXJuIGludCBiYXRjaDsKKyNlbHNlCitleHRlcm4g aW50IGJhY2tncmQ7CisjZW5kaWYgLyogVk1TICovCisKKyNpZmRlZiBDS19DVFJMWgorc3RhdGlj IGludCBsYXN0Y2hhciA9IDA7CisjZW5kaWYgLyogQ0tfQ1RSTFogKi8KKworI2lmZGVmIENLX0FO U0lDCitzdGF0aWMgaW50ICgqZnVuY3B0cikodm9pZCk7CQkvKiBQb2ludGVyIGZvciBmdW5jdGlv biBzdHJpbmdzICovCisjZWxzZQorc3RhdGljIGludCAoKmZ1bmNwdHIpKCk7CisjZW5kaWYgLyog Q0tfQU5TSUMgKi8KKworI2lmZGVmIHBkcDExCisjZGVmaW5lIENNRFNUUkwgNTAKK3N0YXRpYyBj aGFyIGNtZHN0cls1MF07CQkJLyogU3lzdGVtIGNvbW1hbmQgc3RyaW5nLiAqLworI2Vsc2UKKyNp ZmRlZiBCSUdCVUZPSworI2RlZmluZSBDTURTVFJMIDEwMjQKKyNlbHNlCisjZGVmaW5lIENNRFNU UkwgMjU2CisjZW5kaWYgLyogQklHQlVGT0sgKi8KK3N0YXRpYyBjaGFyIGNtZHN0cltDTURTVFJM KzFdOworI2VuZGlmIC8qIHBkcDExICovCisKK3N0YXRpYyBpbnQgZHJhaW47CQkJLyogRm9yIGRy YWluaW5nIHN0YWNrZWQtdXAgQUNLcy4gKi8KKworc3RhdGljIGludCBmaXJzdDsJCQkvKiBGbGFn IGZvciBmaXJzdCBjaGFyIGZyb20gaW5wdXQgKi8KK3N0YXRpYyBDSEFSIHQ7CQkJCS8qIEN1cnJl bnQgY2hhcmFjdGVyICovCisjaWZkZWYgQ09NTUVOVAorc3RhdGljIENIQVIgbmV4dDsJCQkvKiBO ZXh0IGNoYXJhY3RlciAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKworc3RhdGljIGludCBlYnFz ZW50ID0gMDsJCQkvKiA4dGgtYml0IHByZWZpeCBiaWQgdGhhdCBJIHNlbnQgKi8KK3N0YXRpYyBp bnQgbHNzdGF0ZSA9IDA7CQkJLyogTG9ja2luZyBzaGlmdCBzdGF0ZSAqLworc3RhdGljIGludCBs c3F1b3RlID0gMDsJCQkvKiBMb2NraW5nIHNoaWZ0IHF1b3RlICovCisKK2V4dGVybiBpbnQgcXVp ZXQ7CisKKy8qICBFIE4gQyBTIFQgUiAgLS0gIEVuY29kZSBhIHN0cmluZyBmcm9tIG1lbW9yeS4g Ki8KKworLyoKKyAgQ2FsbCB0aGlzIGluc3RlYWQgb2YgZ2V0cGt0KCkgaWYgc291cmNlIGlzIGEg c3RyaW5nLCByYXRoZXIgdGhhbiBhIGZpbGUuCisgIE5vdGU6IENoYXJhY3RlciBzZXQgdHJhbnNs YXRpb24gaXMgbmV2ZXIgZG9uZSBpbiB0aGlzIGNhc2UuCisqLworCisjaWZkZWYgQ09NTUVOVAor I2RlZmluZSBFTkNCVUZMIDIwMAorI2lmbmRlZiBwZHAxMQorQ0hBUiBlbmNidWZbRU5DQlVGTF07 CisjZWxzZQorLyogVGhpcyBpcyBncm9zcywgYnV0IHRoZSBwZHAxMSByb290IHNlZ21lbnQgaXMg b3V0IG9mIHNwYWNlICovCisvKiBXaWxsIGFsbG9jYXRlIGl0IGluIGNrdXVzci5jLiAqLworZXh0 ZXJuIENIQVIgZW5jYnVmW107CisjZW5kaWYgLyogcGRwMTEgKi8KKyNlbmRpZiAvKiBDT01NRU5U ICovCisKKy8qCisgIEVuY29kZSBwYWNrZXQgZGF0YSBmcm9tIGEgc3RyaW5nIGluIG1lbW9yeSBy YXRoZXIgdGhhbiBmcm9tIGEgZmlsZS4KKyAgUmV0dXJucyB0aGUgbGVuZ3RoIG9mIHRoZSBlbmNv ZGVkIHN0cmluZyBvbiBzdWNjZXNzLCAtMSBpZiB0aGUgc3RyaW5nCisgIGNvdWxkIG5vdCBiZSBj b21wbGV0ZWx5IGVuY29kZWQgaW50byB0aGUgY3VycmVudGx5IG5lZ290aWF0ZWQgZGF0YQorICBm aWVsZCBsZW5ndGguCisqLworaW50CisjaWZkZWYgQ0tfQU5TSUMKK2VuY3N0cihDSEFSICpzKQor I2Vsc2UgLyogQ0tfQU5TSUMgKi8KK2VuY3N0cihzKSBDSEFSKiBzOworI2VuZGlmIC8qIENLX0FO U0lDICovCit7CisvKgorICBSZWNvZGVkIDMwIEp1bCA5NCB0byB1c2UgdGhlIHJlZ3VsYXIgZGF0 YSBidWZmZXIgYW5kIHRoZSBuZWdvdGlhdGVkCisgIG1heGltdW0gcGFja2V0IHNpemUuICBQcmV2 aW91c2x5IHdlIHdlcmUgbGltaXRlZCB0byB0aGUgbGVuZ3RoIG9mIGVuY2J1ZltdLgorICBBbHNv LCB0byByZXR1cm4gYSBmYWlsdXJlIGNvZGUgaWYgdGhlIGVudGlyZSBlbmNvZGVkIHN0cmluZyB3 b3VsZCBub3QgZml0LgorICBNb2RpZmllZCAxNCBKdWwgOTggdG8gcmV0dXJuIGxlbmd0aCBvZiBl bmNvZGVkIHN0cmluZy4KKyovCisgICAgaW50IG0sIHJjLCBzbGVuOyBjaGFyICpwOworICAgIGlm ICghZGF0YSkgewkJCS8qIFdhdGNoIG91dCBmb3IgbnVsbCBwb2ludGVycy4gKi8KKwlkZWJ1ZyhG MTAwLCJTRVJJT1VTIEVSUk9SOiBlbmNzdHIgZGF0YSA9PSBOVUxMIiwiIiwwKTsKKwlyZXR1cm4o LTEpOworICAgIH0KKyAgICBpZiAoIXMpIHMgPSAoQ0hBUiAqKSIiOwkJLyogRGl0dG8uICovCisg ICAgc2xlbiA9IHN0cmxlbigoY2hhciAqKXMpOwkJLyogTGVuZ3RoIG9mIHNvdXJjZSBzdHJpbmcu ICovCisgICAgZGVidWcoRjExMSwiZW5jc3RyIixzLHNsZW4pOworICAgIHJjID0gMDsJCQkJLyog UmV0dXJuIGNvZGUuICovCisgICAgbSA9IG1lbXN0cjsgcCA9IG1lbXB0cjsJCS8qIFNhdmUgdGhl c2UuICovCisgICAgbWVtcHRyID0gKGNoYXIgKilzOwkJCS8qIFBvaW50IHRvIHRoZSBzdHJpbmcu ICovCisgICAgLyogZGVidWcoRjEwMSwiZW5jc3RyIG1lbXB0ciAxIiwiIixtZW1wdHIpOyAqLwor ICAgIG1lbXN0ciA9IDE7CQkJCS8qIEZsYWcgbWVtb3J5IHN0cmluZyBhcyBzb3VyY2UuICovCisg ICAgZmlyc3QgPSAxOwkJCQkvKiBJbml0aWFsaXplIGNoYXJhY3RlciBsb29rYWhlYWQuICovCisg ICAgKmRhdGEgPSBOVUw7CQkJLyogSW4gY2FzZSBzIGlzIGVtcHR5ICovCisgICAgZGVidWcoRjEw MSwiZW5jc3RyIHNwc2l6IiwiIixzcHNpeik7CisgICAgcmMgPSBnZXRwa3Qoc3BzaXosMCk7CQkv KiBGaWxsIGEgcGFja2V0IGZyb20gdGhlIHN0cmluZy4gKi8KKyAgICBkZWJ1ZyhGMTAxLCJlbmNz dHIgZ2V0cGt0IHJjIiwiIixyYyk7CisgICAgaWYgKHJjID4gLTEgJiYgbWVtcHRyIDwgKGNoYXIg KikocyArIHNsZW4pKSB7IC8qIE1lYW5zIHdlIGRpZG4ndCBlbmNvZGUgKi8KKwlyYyA9IC0xOwkJ CS8qIHRoZSB3aG9sZSBzdHJpbmcuICovCisJZGVidWcoRjEwMSwiZW5jc3RyIHN0cmluZyB0b28g YmlnIiwiIixzaXplKTsKKyAgICB9CisgICAgZGVidWcoRjEwMSwiZW5jc3RyIGdldHBrdCByYyIs IiIscmMpOworICAgIG1lbXN0ciA9IG07CQkJCS8qIFJlc3RvcmUgbWVtb3J5IHN0cmluZyBmbGFn ICovCisgICAgbWVtcHRyID0gcDsJCQkJLyogYW5kIHBvaW50ZXIgKi8KKyAgICBmaXJzdCA9IDE7 CQkJCS8qIFB1dCB0aGlzIGJhY2sgYXMgd2UgZm91bmQgaXQuICovCisgICAgcmV0dXJuKHJjKTsK K30KKworLyogIE91dHB1dCBmdW5jdGlvbnMgcGFzc2VkIHRvICdkZWNvZGUnOiAgKi8KKworaW50 CQkJICAgICAgIC8qICBQdXQgY2hhcmFjdGVyIGluIHNlcnZlciBjb21tYW5kIGJ1ZmZlciAgKi8K KyNpZmRlZiBDS19BTlNJQworcHV0c3J2KGNoYXIgYykKKyNlbHNlCitwdXRzcnYoYykgcmVnaXN0 ZXIgY2hhciBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCisvKiBwdXRzcnYgKi8geworICAgICpz cnZwdHIrKyA9IGM7CisgICAgKnNydnB0ciA9ICdcMCc7CQkvKiBNYWtlIHN1cmUgYnVmZmVyIGlz IG51bGwtdGVybWluYXRlZCAqLworICAgIHJldHVybigwKTsKK30KKworaW50CQkJCQkvKiAgT3V0 cHV0IGNoYXJhY3RlciB0byBjb25zb2xlLiAgKi8KKyNpZmRlZiBDS19BTlNJQworcHV0dHJtKGNo YXIgYykKKyNlbHNlCitwdXR0cm0oYykgcmVnaXN0ZXIgY2hhciBjOworI2VuZGlmIC8qIENLX0FO U0lDICovCisvKiBwdXR0cm0gKi8geworICAgIGV4dGVybiBpbnQgcmNkYWN0aXZlOworI2lmbmRl ZiBOT1NQTAorICAgIGV4dGVybiBjaGFyICogcWJ1ZnA7CQkvKiBJZiBSRU1PVEUgUVVFUlkgYWN0 aXZlLCAqLworICAgIGV4dGVybiBpbnQgcXVlcnksIHFidWZuOwkJLyogYWxzbyBzdG9yZSByZXNw b25zZSBpbiAqLworICAgIGlmIChxdWVyeSAmJiBxYnVmbisrIDwgMTAyNCkgewkvKiBxdWVyeSBi dWZmZXIuICovCisJKnFidWZwKysgPSBjOworCSpxYnVmcCA9IE5VTDsKKyAgICB9CisgICAgaWYg KCFxdWVyeSB8fCAheGNtZHNyYykKKyNlbmRpZiAvKiBOT1NQTCAqLworLyoKKyAgVGhpcyByb3V0 aW5lIGlzIHVzZWQgKGFtb25nIG90aGVyIHRoaW5ncykgZm9yIHByaW50aW5nIHRoZSBzZXJ2ZXIn cyBhbnN3ZXIKKyAgdG8gYSBSRU1PVEUgY29tbWFuZC4gIEJ1dCBSRU1PVEUgQ0QgaXMgc3BlY2lh bCBiZWNhdXNlIGl0IGlzbid0IHJlYWxseSAKKyAgYXNraW5nIGZvciBhbiBhbnN3ZXIgZnJvbSB0 aGUgc2VydmVyLiAgVGh1cyBzb21lIHBlb3BsZSB3YW50IHRvIHN1cHByZXNzCisgIHRoZSBjb25m aXJtYXRpb24gbWVzc2FnZSAoZS5nLiB3aGVuIHRoZSBzZXJ2ZXIgc2VuZHMgYmFjayB0aGUgYWN0 dWFsIHBhdGgKKyAgb2YgdGhlIGRpcmVjdG9yeSBDRCdkIHRvKSwgYW5kIGV4cGVjdCB0byBiZSBh YmxlIHRvIGRvIHRoaXMgd2l0aCBTRVQgUVVJRVQKKyAgT04uICBCdXQgdGhleSB3b3VsZCBub3Qg d2FudCBTRVQgUVVJRVQgT04gdG8gc3VwcHJlc3MgdGhlIG90aGVyIHNlcnZlcgorICByZXBsaWVz LCB3aGljaCBhcmUgcG9pbnRsZXNzIHdpdGhvdXQgdGhlaXIgYW5zd2Vycy4gIFRodXMgdGhlICJy Y2RhY3RpdmUiCisgIGZsYWcgKFJFTU9URSBDRCBjb21tYW5kIGlzIGFjdGl2ZSkuICBUaHUgT2N0 IDEwIDE2OjM4OjIxIDIwMDIKKyovCisgICAgICBpZiAoIShxdWlldCAmJiByY2RhY3RpdmUpKQkv KiBncm9zcywgeXVrICovCisJY29ub2MoYyk7CisgICAgcmV0dXJuKDApOworfQorI2VuZGlmIC8q IE5PWEZFUiAqLworCitpbnQJCQkJCS8qICBPdXRwdXQgY2hhciB0byBmaWxlLiAqLworI2lmZGVm IENLX0FOU0lDCitwdXRtZmlsKGNoYXIgYykJCQkJLyogSnVzdCBsaWtlIHB1dGZpbCBidXQgdG8g Wk1GSUxFICovCisjZWxzZQkJCQkJLyogcmF0aGVyIHRoYW4gWk9GSUxFLi4uICovCitwdXRtZmls KGMpIHJlZ2lzdGVyIGNoYXIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogcHV0bWZpbCAq LyB7CisgICAgZGVidWcoRjAwMCwicHV0ZmlsIiwiIixjKTsKKyAgICBpZiAoemNob3V0KFpNRklM RSwgKGNoYXIpIChjICYgZm1hc2spKSA8IDApIHsKKwljenNlZW4gPSAxOworCWRlYnVnKEYxMDEs InB1dGZpbCB6Y2hvdXQgd3JpdGUgZXJyb3IsIHNldHRpbmcgY3pzZWVuIiwiIiwxKTsKKwlyZXR1 cm4oLTEpOworICAgIH0KKyAgICByZXR1cm4oMCk7Cit9CisKK2ludAkJCQkJLyogIE91dHB1dCBj aGFyIHRvIG5vd2hlcmUuICovCisjaWZkZWYgQ0tfQU5TSUMKK3B1dG5vd2hlcmUoY2hhciBjKQor I2Vsc2UKK3B1dG5vd2hlcmUoYykgcmVnaXN0ZXIgY2hhciBjOworI2VuZGlmIC8qIENLX0FOU0lD ICovCisvKiBwdXRub3doZXJlICovIHsKKyAgICByZXR1cm4oMCk7Cit9CisKKworaW50CQkJCQkv KiAgT3V0cHV0IGNoYXIgdG8gZmlsZS4gKi8KKyNpZmRlZiBDS19BTlNJQworcHV0ZmlsKGNoYXIg YykKKyNlbHNlCitwdXRmaWwoYykgcmVnaXN0ZXIgY2hhciBjOworI2VuZGlmIC8qIENLX0FOU0lD ICovCisvKiBwdXRmaWwgKi8geworICAgIGRlYnVnKEYwMDAsInB1dGZpbCIsIiIsYyk7CisgICAg aWYgKHpjaG91dChaT0ZJTEUsIChjaGFyKSAoYyAmIGZtYXNrKSkgPCAwKSB7CisJY3pzZWVuID0g MTsgICAJCQkvKiBJZiB3cml0ZSBlcnJvci4uLiAqLworCWRlYnVnKEYxMDEsInB1dGZpbCB6Y2hv dXQgd3JpdGUgZXJyb3IsIHNldHRpbmcgY3pzZWVuIiwiIiwxKTsKKwlyZXR1cm4oLTEpOworICAg IH0KKyAgICByZXR1cm4oMCk7Cit9CisKKy8qCisgIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gaXMg YSB3cmFwcGVyIGZvciBwdXRmaWwoKS4gIFRoZSBvbmx5IHJlYXNvbiBmb3IgaXRzCisgIGV4aXN0 ZW5jZSBpcyB0byBiZSBwYXNzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyIHRvIGRlY29kZSgpLCB3 aGljaCB0cmVhdHMKKyAgcHV0ZmlsKCkgaXRzZWxmIHNwZWNpYWxseSAtLSBieXBhc3NpbmcgaXQg YW5kIHVzaW5nIGFuIGludGVybmFsIG1hY3JvCisgIGluc3RlYWQgdG8gc3BlZWQgdGhpbmdzIHVw LiAgVXNlIHpwdXRmaWwoKSBpbnN0ZWFkIG9mIHB1dGZpbCgpIGluIGNhc2VzIHdoZXJlCisgIHdl IGRvIG5vdCB3YW50IHRoaXMgdG8gaGFwcGVuLCBlLmcuIHdoZW4gd2UgbmVlZCB0byBzZW5kIG91 dHB1dCB0byB0aGUgZmlsZQorICB3aXRoIGEgbWl4dHVyZSBvZiB6Y2hvdXQoKSBhbmQgenNvdXQo KS96c291dGwoKSBjYWxscyAoYXMgaXMgdGhlIGNhc2Ugd2l0aAorICBpbmNvbWluZyBzaG9ydC1m b3JtIFJFTU9URSBjb21tYW5kIHJlcGxpZXMgcmVkaXJlY3RlZCB0byBhIGZpbGUpLCB3aGljaCB3 b3VsZAorICBvdGhlcndpc2UgcmVzdWx0IGluIGRhdGEgd3JpdHRlbiB0byB0aGUgZmlsZSBvdXQg b2Ygb3JkZXIuCisqLworaW50CisjaWZkZWYgQ0tfQU5TSUMKK3pwdXRmaWwoY2hhciBjKQorI2Vs c2UKK3pwdXRmaWwoYykgcmVnaXN0ZXIgY2hhciBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCisv KiB6cHV0ZmlsICovIHsKKyAgICByZXR1cm4ocHV0ZmlsKGMpKTsKK30KKworI2lmbmRlZiBOT1hG RVIKKworLyogRCBFIEMgTyBEIEUgIC0tICBLZXJtaXQgcGFja2V0IGRlY29kaW5nIHByb2NlZHVy ZSAqLworCisvKgorIENhbGwgd2l0aCBzdHJpbmcgdG8gYmUgZGVjb2RlZCBhbmQgYW4gb3V0cHV0 IGZ1bmN0aW9uLgorIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtMSBvbiBmYWlsdXJlIChlLmcuIGRp c2sgZnVsbCkuCisKKyBUaGlzIGlzIHRoZSAiaW5uZXIgbG9vcCIgd2hlbiByZWNlaXZpbmcgZmls ZXMsIGFuZCBtdXN0IGJlIGNvZGVkIGFzCisgZWZmaWNpZW50bHkgYXMgcG9zc2libGUuICBOb3Rl IHNvbWUgcG90ZW50aWFsIHByb2JsZW1zOiAgaWYgYSBwYWNrZXQKKyBpcyBiYWRseSBmb3JtZWQs IGhhdmluZyBhIHByZWZpeGVkIHNlcXVlbmNlIGVuZGluZyBwcmVtYXR1cmVseSwgdGhpcworIGZ1 bmN0aW9uLCBhcyBjb2RlZCwgY291bGQgcmVhZCBwYXN0IHRoZSBlbmQgb2YgdGhlIHBhY2tldC4g IFRoaXMgaGFzCisgbmV2ZXIgaGFwcGVuZWQsIHRodXMgdGhlIGFkZGl0aW9uYWwgKHRpbWUtY29u c3VtaW5nKSB0ZXN0cyBoYXZlIG5vdAorIGJlZW4gYWRkZWQuCisqLworCitzdGF0aWMgQ0hBUiAq eGRidWY7CS8qIEdsb2JhbCB2ZXJzaW9uIG9mIGRlY29kZSgpJ3MgYnVmZmVyIHBvaW50ZXIgKi8K KyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZvciB1c2UgYnkgdHJhbnNsYXRpb24gZnVuY3Rp b25zLiAqLworCisvKiBGdW5jdGlvbiBmb3IgcHVzaGluZyBhIGNoYXJhY3RlciBvbnRvIGRlY29k ZSgpJ3MgaW5wdXQgc3RyZWFtLiAqLworCitWT0lECisjaWZkZWYgQ0tfQU5TSUMKK3pkc3R1ZmYo Q0hBUiBjKQorI2Vsc2UKK3pkc3R1ZmYoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICov CisvKiB6ZHN0dWZmICovIHsKKyAgICB4ZGJ1Zi0tOwkJCQkvKiBCYWNrIHVwIHRoZSBwb2ludGVy LiAqLworICAgICp4ZGJ1ZiA9IGM7CQkJCS8qIFN0dWZmIHRoZSBjaGFyYWN0ZXIuICovCit9CisK KyNpZmRlZiBDS1RVTklORworLyoKKyAgVHJpbW1lZC1kb3duIHBhY2tldCBkZWNvZGVyIGZvciBi aW5hcnktbW9kZSBuby1wYXJpdHkgdHJhbnNmZXJzLgorICBkZWNvZGUoKSBpcyB0aGUgZnVsbCB2 ZXJzaW9uLgorKi8KK2ludAorI2lmZGVmIENLX0FOU0lDCitiZGVjb2RlKENIQVIgKmJ1ZiwgaW50 ICgqZm4pKGNoYXIpKQorI2Vsc2UKK2JkZWNvZGUoYnVmLGZuKSByZWdpc3RlciBDSEFSICpidWY7 IHJlZ2lzdGVyIGludCAoKmZuKSgpOworI2VuZGlmIC8qIENLX0FOU0lDICovCisvKiBiZGVjb2Rl ICovIHsKKyAgICByZWdpc3RlciB1bnNpZ25lZCBpbnQgYSwgYTc7CS8qIFZhcmlvdXMgY29waWVz IG9mIGN1cnJlbnQgY2hhciAqLworICAgIGludCBjY3BmbGc7CQkJCS8qIEZvciBDdHJsLXVucHJl Zml4aW5nIHN0YXRzICovCisgICAgaW50IHQ7CQkJCS8qIEludCB2ZXJzaW9uIG9mIGNoYXJhY3Rl ciAqLworICAgIGludCBsZW47CisgICAgbG9uZyB6OwkJCQkvKiBGb3IgQ1JDIGNhbGN1bGF0aW9u ICovCisgICAgQ0hBUiBjOwkJCQkvKiBDdXJyZW50IGNoYXJhY3RlciAqLworCisgICAgaWYgKCFi aW5hcnkgfHwgcGFyaXR5IHx8IGZuICE9IHB1dGZpbCkgLyogSlVTVCBJTiBDQVNFICovCisgICAg ICByZXR1cm4oZGVjb2RlKGJ1ZixmbiwxKSk7CisgICAgZGVidWcoRjEwMCwiQkRFQ09ERSIsIiIs MCk7CisKKyAgICB4ZGJ1ZiA9IGJ1ZjsJCQkvKiBHbG9iYWwgY29weSBvZiBzb3VyY2UgcG9pbnRl ci4gKi8KKworICAgIGxlbiA9IHJsbjsJCQkJLyogTnVtYmVyIG9mIGJ5dGVzIGluIGRhdGEgZmll bGQgKi8KKyAgICB3aGlsZSAobGVuID4gMCkgeworICAgICAgICBhID0gKnhkYnVmKysgJiAweGZm OwkJLyogR2V0IG5leHQgY2hhcmFjdGVyICovCisJbGVuLS07CisJcnB0ID0gMDsJCQkvKiBJbml0 aWFsaXplIHJlcGVhdCBjb3VudC4gKi8KKwlpZiAoYSA9PSBycHRxICYmIHJwdGZsZykgewkvKiBH b3QgYSByZXBlYXQgcHJlZml4PyAqLworCSAgICBycHQgPSB4dW5jaGFyKCp4ZGJ1ZisrICYgMHhG Rik7IC8qIFllcywgZ2V0IHRoZSByZXBlYXQgY291bnQsICovCisJICAgIHJwdG4gKz0gcnB0Owor CSAgICBhID0gKnhkYnVmKysgJiAweEZGOwkvKiBhbmQgZ2V0IHRoZSBwcmVmaXhlZCBjaGFyYWN0 ZXIuICovCisJICAgIGxlbiAtPSAyOworCX0KKwljY3BmbGcgPSAwOwkJCS8qIENvbnRyb2wgcHJl Zml4IGZsYWcuICovCisJaWYgKGEgPT0gY3RscSkgewkJLyogSWYgY29udHJvbCBwcmVmaXgsICov CisJICAgIGEgID0gKnhkYnVmKysgJiAweEZGOwkvKiBnZXQgaXRzIG9wZXJhbmQgKi8KKwkgICAg bGVuLS07CisJICAgIGE3ID0gYSAmIDB4N0Y7CQkvKiBhbmQgaXRzIGxvdyA3IGJpdHMuICovCisJ ICAgIGlmICgoYTcgPj0gMDEwMCAmJiBhNyA8PSAwMTM3KSB8fCBhNyA9PSAnPycpIHsgLyogQ29u dHJvbGxpZnkgKi8KKwkJYSA9IGN0bChhKTsJCS8qIGlmIGluIGNvbnRyb2wgcmFuZ2UuICovCisJ CWE3ID0gYSAmIDB4N0Y7CisJCWNjcGZsZyA9IDE7CQkvKiBOb3RlIHRoYXQgd2UgZGlkIHRoaXMg Ki8KKwkJY2NwKys7CQkJLyogQ291bnQgZm9yIHN0YXRzICovCisJICAgIH0KKwl9IGVsc2UgYTcg PSBhICYgMHg3ZjsJCS8qIE5vdCBjb250cm9sIHF1b3RlICovCisJaWYgKGE3IDwgMzIgfHwgYTcg PT0gMTI3KQkvKiBBIGJhcmUgY29udHJvbCBjaGFyYWN0ZXI/ICovCisJICBpZiAoIWNjcGZsZykg Y2N1Kys7CQkvKiBDb3VudCBpdCAqLworCWlmICghcnB0KSBycHQgPSAxOworCWZvciAoOyBycHQg PiAwOyBycHQtLSkgewkvKiBPdXRwdXQgdGhlIGNoYXIgUlBUIHRpbWVzICovCisjaWZkZWYgQ0FM SUJSQVRFCisJICAgIGlmIChjYWxpYnJhdGUpIHsKKwkJZmZjKys7CisJCWNvbnRpbnVlOworCSAg ICB9CisjZW5kaWYgLyogQ0FMSUJSQVRFICovCisjaWZkZWYgT1MyCisgICAgICAgICAgICBpZiAo eGZsZyAmJiAhcmVtZmlsZSkgewkJLyogV3JpdGUgdG8gdmlydHVhbCBzY3JlZW4gKi8KKyAgICAg ICAgICAgICAgICBjaGFyIF9hOworICAgICAgICAgICAgICAgIF9hID0gYSAmIGZtYXNrOworICAg ICAgICAgICAgICAgIHQgPSBjb25vYyhfYSk7CisgICAgICAgICAgICAgICAgaWYgKHQgPCAxKQor ICAgICAgICAgICAgICAgICAgICB0ID0gLTE7CisgICAgICAgICAgICB9IGVsc2UKKyNlbmRpZiAv KiBPUzIgKi8KKwkgICAgICB0ID0gem1jaG91dChhICYgZm1hc2spOwkvKiB6bWNob3V0IGlzIGEg bWFjcm8gKi8KKwkgICAgaWYgKHQgPCAwKSB7CisJCWRlYnVnKEYxMDEsImJkZWNvZGUgd3JpdGUg ZXJyb3IgLSBlcnJubyIsIiIsZXJybm8pOworCQlyZXR1cm4oLTEpOworCSAgICB9CisJICAgIGZm YysrOwkJCS8qIENvdW50IHRoZSBjaGFyYWN0ZXIgKi8KKwkgICAgaWYgKGRvY3JjICYmICFyZW1m aWxlKSB7CS8qIFVwZGF0ZSBmaWxlIENSQyAqLworCQljID0gYTsJCQkvKiBGb3JjZSBjb252ZXJz aW9uIHRvIHVuc2lnbmVkIGNoYXIgKi8KKwkJeiA9IGNyYzE2IF4gKGxvbmcpYzsKKwkJY3JjMTYg PSAoY3JjMTYgPj4gOCkgXgorCQkgIChjcmN0YVsoeiAmIDB4RjApID4+IDRdIF4gY3JjdGJbeiAm IDB4MEZdKTsKKwkgICAgfQorCX0KKyNpZmRlZiBDS19DVFJMWgorCWxhc3RjaGFyID0gYTsKKyNl bmRpZiAvKiBDS19DVFJMWiAqLworICAgIH0KKyAgICByZXR1cm4oMCk7Cit9CisjZW5kaWYgLyog Q0tUVU5JTkcgKi8KKyNlbmRpZiAvKiBOT1hGRVIgKi8KKworLyogIFAgTiBCIFkgVCBFICAtLSAg T3V0cHV0IG5leHQgYnl0ZSB0byBmaWxlIG9yIG90aGVyIGRlc3RpbmF0aW9uICAqLworCitzdGF0 aWMgQ0tfT0ZGX1Qgb2ZmYyA9IDBMOworCitzdGF0aWMgaW50CisjaWZkZWYgQ0tfQU5TSUMKK3Bu Ynl0ZShDSEFSIGMsIGludCAoKmZuKShjaGFyKSkKKyNlbHNlCitwbmJ5dGUoYyxmbikgQ0hBUiBj OyBpbnQgKCpmbikoKTsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogcG5ieXRlICovIHsKKyAg ICBpbnQgcmM7CisgICAgbG9uZyB6OworCisjaWZkZWYgT1MyCisjaWZuZGVmIE5PWEZFUgorICAg IGlmICh4ZmxnICYmICFyZW1maWxlKSB7CQkvKiBXcml0ZSB0byB2aXJ0dWFsIHNjcmVlbiAqLwor CWNoYXIgX2E7CisJX2EgPSBjICYgZm1hc2s7CisJcmMgPSBjb25vYyhfYSk7CisJaWYgKHJjIDwg MSkKKwkgIHJldHVybigtMSk7CisgICAgfSBlbHNlCisjZW5kaWYgLyogTk9YRkVSICovCisjZW5k aWYgLyogT1MyICovCisgICAgeworCWlmIChmbiA9PSBwdXRmaWwpIHsJCS8qIEV4ZWN1dGUgb3V0 cHV0IGZ1bmN0aW9uICovCisJICAgIHJjID0gem1jaG91dChjKTsJCS8qIHRvLWZpbGUgbWFjcm8g KGZhc3QpICovCisJfSBlbHNlIGlmICghZm4pIHsKKwkgICAgcmMgPSBwdXRjaGFyKGMpOwkJLyog dG8tc2NyZWVuIG1hY3JvIChmYXN0KSAqLworICAgICAgICB9IGVsc2UgeworCSAgICByYyA9ICgq Zm4pKGMpOwkJLyogZnVuY3Rpb24gY2FsbCAobm90IGFzIGZhc3QpICovCisJfQorCWlmIChyYyA8 IDApCisJICByZXR1cm4ocmMpOworICAgIH0KKy8qCisgIEJvdGggeGduYnl0ZSgpIGFuZCB4cG5i eXRlKCkgaW5jcmVtZW50IGZmYyAodGhlIGZpbGUgYnl0ZSBjb3VudGVyKS4KKyAgRHVyaW5nIGZp bGUgdHJhbnNmZXIsIG9ubHkgb25lIG9mIHRoZXNlIGZ1bmN0aW9ucyBpcyBjYWxsZWQuICBIb3dl dmVyLAorICB0aGUgVFJBTlNMQVRFIGNvbW1hbmQgaXMgbGlrZWx5IHRvIGNhbGwgdGhlbSBib3Ro LiAgb2ZmYywgdGhlcmVmb3JlLAorICBjb250YWlucyB0aGUgb3V0cHV0IGJ5dGUgY291bnQsIG5l Y2Vzc2FyeSBmb3IgaGFuZGxpbmcgdGhlIFVDUy0yIEJPTS4KKyAgTk9URTogSXQgbWlnaHQgYmUg c2FmZSB0byBqdXN0IHRlc3QgZm9yIFdfU0VORCwgRlRQIG9yIG5vdC4KKyovCisgICAgaWYgKCh3 aGF0ICYgKFdfRlRQfFdfU0VORCkpICE9IChXX0ZUUHxXX1NFTkQpKSB7CisJb2ZmYysrOwkJCQkv KiBDb3VudCB0aGUgYnl0ZSAqLworCWZmYysrOwkJCQkvKiBDb3VudCB0aGUgYnl0ZSAqLworICAg IH0KKyNpZm5kZWYgTk9YRkVSCisgICAgaWYgKGRvY3JjICYmICF4ZmxnICYmICFyZW1maWxlKSB7 CS8qIFVwZGF0ZSBmaWxlIENSQyAqLworCXogPSBjcmMxNiBeIChsb25nKWM7CisJY3JjMTYgPSAo Y3JjMTYgPj4gOCkgXgorCSAgKGNyY3RhWyh6ICYgMHhGMCkgPj4gNF0gXiBjcmN0Ylt6ICYgMHgw Rl0pOworICAgIH0KKyNlbmRpZiAvKiBOT1hGRVIgKi8KKyAgICByZXR1cm4oMSk7Cit9CisKKy8q CisgIFggUCBOIEIgWSBUIEUgIC0tICBUcmFuc2xhdGUgYW5kIHB1dCBuZXh0IGJ5dGUgdG8gZmls ZS4KKworICBPbmx5IGZvciBVbmljb2RlLiAgQ2FsbCB3aXRoIG5leHQgdW50cmFuc2xhdGVkIGJ5 dGUgZnJvbSBpbmNvbWluZworICBieXRlIHN0cmVhbSwgd2hpY2ggY2FuIGJlIGluIGFueSBUcmFu c2ZlciBDaGFyYWN0ZXIgU2V0OiBVQ1MtMiwgVVRGLTgsCisgIExhdGluLTEsIExhdGluLUhlYnJl dywgZXRjLiAgVHJhbnNsYXRlcyB0byB0aGUgZmlsZSBjaGFyYWN0ZXIgc2V0IGFuZAorICB3cml0 ZXMgYnl0ZXMgdG8gdGhlIG91dHB1dCBmaWxlLiAgQ2FsbCB3aXRoIGNoYXJhY3RlciB0byB0cmFu c2xhdGUKKyAgYXMgYW4gaW50LCBwbHVzIHRoZSB0cmFuc2ZlciBjaGFyYWN0ZXIgc2V0ICh0byB0 cmFuc2xhdGUgZnJvbSkgYW5kIHRoZQorICBmaWxlIGNoYXJhY3RlciBzZXQgKHRvIHRyYW5zbGF0 ZSB0byksIG9yIC0xLDAsMCB0byByZXNldCB0aGUgVUNTLTIgYnl0ZQorICBudW1iZXIgKHdoaWNo IHNob3VsZCBiZSBkb25lIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBmaWxlKS4gIElmIHRoZSB0cmFu c2ZlcgorICAoc291cmNlKSBjaGFyYWN0ZXItc2V0IGlzIFVDUy0yLCBieXRlcyBNVVNUIGFycml2 ZSBpbiBCaWctRW5kaWFuIG9yZGVyLgorICBSZXR1cm5zOgorICAgLTE6IE9uIGVycm9yCisgICAg MDogTm90aGluZyB0byB3cml0ZSAobWlkLXNlcXVlbmNlKQorICAgPjA6IE51bWJlciBvZiBieXRl cyB3cml0dGVuLgorKi8KKyNpZmRlZiBLQU5KSQorc3RhdGljIGludCBqc3RhdGUgPSAwLCBqeCA9 IDA7CQkvKiBGb3Igb3V0cHV0dGluZyBKSVMtNyAqLworc3RhdGljIGNoYXIgamJ1ZlsxNl0gPSB7 IE5VTCwgTlVMIH07CisjZW5kaWYgLyogS0FOSkkgKi8KKworaW50CisjaWZkZWYgQ0tfQU5TSUMK K3hwbmJ5dGUoaW50IGEsIGludCB0Y3MsIGludCBmY3MsIGludCAoKmZuKShjaGFyKSkKKyNlbHNl Cit4cG5ieXRlKGEsdGNzLGZjcyxmbikgaW50IGEsIHRjcywgZmNzOyBpbnQgKCpmbikoKTsKKyNl bmRpZiAvKiBDS19BTlNJQyAqLworLyogeHBuYnl0ZSAqLyB7CisjaWZkZWYgVU5JQ09ERQorICAg IGV4dGVybiBpbnQgdWNzYm9tOwkJCS8qIEJ5dGUgb3JkZXIgKi8KKyNlbmRpZiAvKiBVTklDT0RF ICovCisgICAgLyogQ0hBUiBjOyAqLwkJCS8qIFVuc2lnbmVkIGNoYXIgd29ya2VyICovCisgICAg c3RhdGljIHVuaW9uIGNrX3Nob3J0IHVjLCBldSwgc2o7CS8qIFVDUy0yLCBFVUMsIGFuZCBTaGlm dC1KSVMgd29ya2VycyAqLworICAgIFVTSE9SVCBjaDsJCQkJLyogZGl0dG8uLi4gKi8KKyAgICBV U0hPUlQgKiB1cyA9IE5VTEw7CQkJLyogZGl0dG8uLi4gKi8KKyAgICBpbnQgYzcsIHJjLCBoYXZl dWMgPSAwOwkJLyogUmV0dXJuIGNvZGUgYW5kIFVDUy0yIGZsYWcgKi8KKyAgICBpbnQgdXRmZXJy b3IgPSAwOwkJCS8qIFVURi04IGVycm9yICovCisgICAgc3RhdGljIGludCBibiA9IDA7CQkJLyog VUNTLTIgYnl0ZSBudW1iZXIgKi8KKyAgICBpbnQgc3dhcHBpbmcgPSAwOwkJCS8qIFN3YXBwaW5n IFVDUyBieXRlcyB0byBvdXRwdXQ/ICovCisJCQkJCS8qIHN3YXBwaW5nIG11c3QgYmUgMCBvciAx ICovCisgICAgaWYgKGEgPT0gLTEgJiYgKHRjcyB8IGZjcykgPT0gMCkgewkvKiBSZXNldCBpbiBj YXNlIHByZXZpb3VzIHJ1biAqLworCWJuID0gMDsJCQkJLyogbGVmdCBibiBhdCAxLi4uICovCisJ b2ZmYyA9IChDS19PRkZfVCkwOworCWRlYnVnKEYxMDEsInhwbmJ5dGUgUkVTRVQiLCIiLGJuKTsK KwlyZXR1cm4oMCk7CisgICAgfQorICAgIGRlYnVnKEYwMDEsInhwbmJ5dGUgYSIsIiIsYSk7CisK KyNpZmRlZiBVTklDT0RFCisKKy8qCisgIGJ5dGVvcmRlciA9IGhhcmR3YXJlIGJ5dGUgb3JkZXIg b2YgdGhpcyBtYWNoaW5lLgorICB1Y3NvcmRlciAgPSBvdmVycmlkZSBieSBTRVQgRklMRSBVQ1Mg QllURS1PUkRFUiBjb21tYW5kLgorICBmaWxlb3JkZXIgPSBieXRlIG9yZGVyIG9mIFVDUy0yIGlu cHV0IGZpbGUgZGV0ZWN0ZWQgZnJvbSBCT00uCisgIHN3YXBwaW5nIGFwcGxpZXMgb25seSB3aGVu IG91dHB1dCBjaGFyc2V0IGlzIFVDUy0yLgorKi8KKyAgICBpZiAodWNzb3JkZXIgIT0gMSAmJiB1 Y3NvcmRlciAhPSAwKQkvKiBBbHNvIGp1c3QgaW4gY2FzZS4uLiAqLworICAgICAgdWNzb3JkZXIg PSBieXRlb3JkZXI7CisgICAgaWYgKChieXRlb3JkZXIgJiYgIXVjc29yZGVyKSB8fCAoIWJ5dGVv cmRlciAmJiBmaWxlb3JkZXIpKQorICAgICAgc3dhcHBpbmcgPSAxOwkJCS8qIFN3YXBwaW5nIGJ5 dGVzIHRvIG91dHB1dCAqLworCisjaWZkZWYgQ09NTUVOVAorICAgIGRlYnVnKEYxMDEsInhwbmJ5 dGUgdWNzb3JkZXIiLCIiLHVjc29yZGVyKTsKKyAgICBkZWJ1ZyhGMTAxLCJ4cG5ieXRlIHN3YXBw aW5nIiwiIixzd2FwcGluZyk7CisjZW5kaWYgLyogQ09NTUVOVCAqLworCisgICAgaWYgKHRjcyA9 PSBUQ19VVEY4KSB7CQkvKiAnYScgaXMgZnJvbSBhIFVURi04IHN0cmVhbSAqLworCWNoID0gYTsK KwlpZiAoZmNzID09IFRDX1VURjgpCQkvKiBPdXRwdXQgaXMgVVRGLTggdG9vICovCisJICByZXR1 cm4ocG5ieXRlKGNoLGZuKSk7CS8qIHNvIGp1c3QgY29weS4gKi8KKwlyYyA9IHV0ZjhfdG9fdWNz MihjaCwmdXMpOwkvKiBPdGhlcndpc2UgY29udmVydCB0byBVQ1MtMiAqLworCWlmIChyYyA9PSAw KSB7CQkJLyogRG9uZSB3aXRoIHRoaXMgc2VxdWVuY2UgKi8KKwkgICAgdWMueF9zaG9ydCA9ICp1 czsJCS8qIFdlIGhhdmUgYSBVbmljb2RlICovCisJICAgIGhhdmV1YyA9IDE7CisJfSBlbHNlIGlm IChyYyA8IDApIHsJCS8qIEVycm9yICovCisJICAgIGRlYnVnKEYxMDEsInhwbmJ5dGUgVVRGLTgg Y29udmVyc2lvbiBlcnJvciIsIiIscmMpOworCSAgICBoYXZldWMgPSAxOwkJCS8qIFJlcGxhY2Ug YnkgVStGRkZEICovCisJICAgIHVjLnhfc2hvcnQgPSAqdXM7CisJICAgIHV0ZmVycm9yID0gMTsK Kwl9IGVsc2UJCQkJLyogU2VxdWVuY2UgaW5jb21wbGV0ZSAqLworCSAgcmV0dXJuKDApOworICAg IH0gZWxzZSBpZiAodGNzID09IFRDX1VDUzIpIHsJLyogJ2EnIGlzIFVDUy0yICovCisJLyogSGVy ZSB3ZSBoYXZlIGluY29taW5nIFVDUy0yIGluIGd1YXJhbnRlZWQgQmlnIEVuZGlhbiBvcmRlciAq LworCS8qIHNvIHdlIG11c3QgZXhjaGFuZ2UgYnl0ZXMgaWYgbG9jYWwgbWFjaGluZSBpcyBMaXR0 bGUgRW5kaWFuLiAqLworCXN3aXRjaCAoYm4pIHsJCQkvKiBXaGljaCBieXRlPyAqLworCSAgY2Fz ZSAwOgkJCS8qIEhpZ2guLi4gKi8KKwkgICAgdWMueF9jaGFyW2J5dGVvcmRlcl0gPSAodW5zaWdu ZWQpYSAmIDB4ZmY7CisJICAgIGJuKys7CisJICAgIHJldHVybigwKTsJCQkvKiBXYWl0IGZvciBu ZXh0ICovCisJICBjYXNlIDE6CQkJLyogTG93Li4uICovCisJICAgIHVjLnhfY2hhclsxLWJ5dGVv cmRlcl0gPSAodW5zaWduZWQpYSAmIDB4ZmY7CisJICAgIGJuID0gMDsJCQkvKiBEb25lIHdpdGgg c2VxdWVuY2UgKi8KKwkgICAgaGF2ZXVjID0gMTsJCQkvKiBIYXZlIGEgVW5pY29kZSAqLworCX0K KyAgICB9IGVsc2UKKyNlbmRpZiAvKiBVTklDT0RFICovCisKKyNpZmRlZiBLQU5KSQkJCQkvKiBX aGV0aGVyIFVOSUNPREUgaXMgZGVmaW5lZCBvciBub3QgKi8KKyAgICAgIGlmICh0Y3MgPT0gVENf SkVVQykgewkJLyogSW5jb21pbmcgSmFwYW5lc2UgRVVDICovCisJaW50IGJhZCA9IDA7CisJc3Rh dGljIGludCBrYW5qaSA9IDA7CQkvKiBGbGFncyBzZXQgaW4gY2FzZSAwIGZvciBjYXNlIDEgKi8K KwlzdGF0aWMgaW50IGthbmEgPSAwOworCXN3aXRjaCAoYm4pIHsJCQkvKiBCeXRlIG51bWJlciAq LworCSAgY2FzZSAwOgkJCS8qIEJ5dGUgMCAqLworCSAgICBldS54X3Nob3J0ID0gMDsKKwkgICAg aWYgKChhICYgMHg4MCkgPT0gMCkgeworCQlzai54X3Nob3J0ID0gKHVuc2lnbmVkKWEgJiAweGZm OyAvKiBTaW5nbGUgYnl0ZSAqLworCQlrYW5qaSA9IGthbmEgPSAwOworCSAgICB9IGVsc2UgewkJ CS8qIERvdWJsZSBieXRlICovCisJCWM3ID0gYSAmIDB4N2Y7CisJCWlmIChjNyA+IDB4MjAgJiYg YzcgPCAweDdmKSB7IC8qIEthbmppICovCisJCSAgICBldS54X2NoYXJbYnl0ZW9yZGVyXSA9IChD SEFSKSBhOyAgLyogU3RvcmUgZmlyc3QgYnl0ZSAqLworCQkgICAgYm4rKzsJCSAgICAgIC8qIFNl dCB1cCBmb3Igc2Vjb25kIGJ5dGUgKi8KKwkJICAgIGthbmppID0gMTsKKwkJICAgIGthbmEgPSAw OworCQkgICAgcmV0dXJuKDApOworCQl9IGVsc2UgaWYgKGEgPT0gMHg4ZSkgewkvKiBTUzIgLS0g S2F0YWthbmEgcHJlZml4ICovCisJCSAgICBldS54X2NoYXJbYnl0ZW9yZGVyXSA9IChDSEFSKSBh OyAvKiBTYXZlIGl0ICovCisJCSAgICBibisrOworCQkgICAga2FuYSA9IDE7CisJCSAgICBrYW5q aSA9IDA7CisJCSAgICByZXR1cm4oMCk7CisJCX0gZWxzZSB7CisJCSAgICBiYWQrKzsKKwkJfQor CSAgICB9CisJICAgIGJyZWFrOworCSAgY2FzZSAxOgkJCS8qIEJ5dGUgMSAqLworCSAgICBibiA9 IDA7CisJICAgIGlmIChrYW5qaSkgeworCQlldS54X2NoYXJbMS1ieXRlb3JkZXJdID0gKENIQVIp IGE7CisJCXNqLnhfc2hvcnQgPSBldV90b19zaihldS54X3Nob3J0KTsKKwkJYnJlYWs7CisJICAg IH0gZWxzZSBpZiAoa2FuYSkgeworCQlzai54X3Nob3J0ID0gKENIQVIpIChhIHwgMHg4MCk7CisJ CWJyZWFrOworCSAgICB9IGVsc2UgewkJCS8qIChzaG91bGRuJ3QgaGFwcGVuKSAqLworCQliYWQr KzsKKwkgICAgfQorCX0KKwkvKiBDb21lIGhlcmUgd2l0aCBvbmUgU2hpZnQtSklTIGNoYXJhY3Rl ciAqLworCisjaWZkZWYgVU5JQ09ERQorCWlmIChiYWQpIHsKKwkgICAgdWMueF9zaG9ydCA9IDB4 ZmZmZDsKKwl9IGVsc2UgeworCSAgICB1Yy54X3Nob3J0ID0gc2pfdG9fdW4oc2oueF9zaG9ydCk7 IC8qIENvbnZlcnQgdG8gVW5pY29kZSAqLworCX0KKwloYXZldWMgPSAxOworI2VuZGlmIC8qIFVO SUNPREUgKi8KKyAgICB9IGVsc2UKKyNlbmRpZiAvKiBLQU5KSSAqLworCisjaWZkZWYgVU5JQ09E RQorCXVjLnhfc2hvcnQgPSAodW5zaWduZWQpYSAmIDB4ZmY7IC8qIExhdGluLTEgb3Igd2hhdGV2 ZXIuLi4gKi8KKworICAgIC8qIENvbWUgaGVyZSB3aXRoIHVjID0gdGhlIGNoYXJhY3RlciB0byBi ZSB0cmFuc2xhdGVkLiAqLworICAgIC8qIElmIChoYXZldWMpIGl0J3MgVUNTLTIgaW4gbmF0aXZl IG9yZGVyLCBvdGhlcndpc2UgaXQncyBhIGJ5dGUuICovCisKKyAgICBkZWJ1ZyhGMTAxLCJ4cG5i eXRlIGhhdmV1YyIsIiIsaGF2ZXVjKTsKKworICAgIGlmIChoYXZldWMpIHsJCQkvKiBJZiB3ZSBo YXZlIGEgVW5pY29kZS4uLiAqLworCWRlYnVnKEYwMDEsInhwbmJ5dGUgdWMueF9zaG9ydCIsIltB XSIsdWMueF9zaG9ydCk7CisJZGVidWcoRjEwMSwieHBuYnl0ZSBmZW9sIiwiIixmZW9sKTsKKwlp ZiAod2hhdCAmIFdfWEZFUikgewkJLyogSWYgdHJhbnNmZXJyaW5nIGEgZmlsZSAqLworCSAgICBp ZiAoZmVvbCAmJiB1Yy54X3Nob3J0ID09IENSKSB7IC8qIGhhbmRsZSBlb2wgY29udmVyc2lvbi4g Ki8KKwkJcmV0dXJuKDApOworCSAgICB9IGVsc2UgaWYgKGZlb2wgJiYgdWMueF9zaG9ydCA9PSBM RikgeworCQl1Yy54X3Nob3J0ID0gZmVvbDsKKwkgICAgfQorCX0KKwlkZWJ1ZyhGMDAxLCJ4cG5i eXRlIHVjLnhfc2hvcnQiLCJbQl0iLHVjLnhfc2hvcnQpOworCWlmIChmY3MgPT0gRkNfVUNTMikg ewkJLyogQW5kIEZDUyBpcyBVQ1MtMiAqLworCSAgICAvKiBXcml0ZSBvdXQgdGhlIGJ5dGVzIGlu IHRoZSBhcHByb3ByaWF0ZSBieXRlIG9yZGVyICovCisJICAgIGludCBjb3VudCA9IDA7CisjaWZu ZGVmIElLU0RPTkxZCisjaWZkZWYgT1MyCisgICAgICAgICAgICBleHRlcm4gaW50IGs5NXN0ZG91 dCx3aGVyZXhbXSx3aGVyZXlbXTsKKwkJCWV4dGVybiB1bnNpZ25lZCBjaGFyIGNvbG9yY21kOwor ICAgICAgICAgICAgdW5pb24geworICAgICAgICAgICAgICAgIFVTSE9SVCB1Y3MyOworICAgICAg ICAgICAgICAgIFVDSEFSICBieXRlc1syXTsKKyAgICAgICAgICAgIH0gb3V0cHV0OworI2VuZGlm IC8qIE9TMiAqLworI2VuZGlmIC8qIElLU0RPTkxZICovCisJICAgIGlmICghb2ZmYyAmJiB1Y3Ni b20pIHsJLyogQmVnaW5uaW5nIG9mIGZpbGU/ICovCisKKyNpZm5kZWYgSUtTRE9OTFkKKyNpZmRl ZiBPUzIKKyAgICAgICAgICAgICAgICBpZiAoZm4gPT0gTlVMTCAmJiAhazk1c3Rkb3V0ICYmICFp bnNlcnZlcikgeworCQkgICAgb2ZmYysrOworI2lmZGVmIENPTU1FTlQKKwkJICAgIC8qIERvbid0 IHByaW50IHRoZSBCT00gdG8gdGhlIGRpc3BsYXkgKi8KKyAgICAgICAgICAgICAgICAgICAgb3V0 cHV0LmJ5dGVzWzBdID0gKCF1Y3NvcmRlciA/IDB4ZmYgOiAweGZlKTsKKyAgICAgICAgICAgICAg ICAgICAgb3V0cHV0LmJ5dGVzWzFdID0gKCF1Y3NvcmRlciA/IDB4ZmUgOiAweGZmKTsKKworICAg ICAgICAgICAgICAgICAgICBWc2NybldydFVDUzJTdHJBdHQoVkNNRCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICZvdXRwdXQudWNzMiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB3aGVyZXlbVkNNRF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB3aGVyZXhbVkNNRF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAmY29sb3JjbWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Cisj ZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAgICAgICAgICAgIH0gZWxzZSAKKyNlbmRpZiAvKiBP UzIgKi8KKyNlbmRpZiAvKiBJS1NET05MWSAqLworICAgICAgICAgICAgICAgIHsKKwkJICAgIGlm ICgocmMgPSBwbmJ5dGUoKHVjc29yZGVyID8gMHhmZiA6IDB4ZmUpLGZuKSkgPCAwKQorCQkgICAg ICByZXR1cm4ocmMpOwkvKiBCT00gKi8KKwkJICAgIGlmICgocmMgPSBwbmJ5dGUoKHVjc29yZGVy ID8gMHhmZSA6IDB4ZmYpLGZuKSkgPCAwKQorCQkgICAgICByZXR1cm4ocmMpOworCQl9CisJCWNv dW50ICs9IDI7CisJICAgIH0KKwkgICAgaWYgKHV0ZmVycm9yKSB7CisjaWZuZGVmIElLU0RPTkxZ CisjaWZkZWYgT1MyCisgICAgICAgICAgICAgICAgaWYgKGZuID09IE5VTEwgJiYgIWs5NXN0ZG91 dCAmJiAhaW5zZXJ2ZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgb2ZmYysrOworICAgICAgICAg ICAgICAgICAgICBvdXRwdXQuYnl0ZXNbMF0gPSAoIXVjc29yZGVyID8gMHhmZCA6IDB4ZmYpOwor ICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYnl0ZXNbMV0gPSAoIXVjc29yZGVyID8gMHhmZiA6 IDB4ZmQpOworCisgICAgICAgICAgICAgICAgICAgIFZzY3JuV3J0VUNTMlN0ckF0dChWQ01ELAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm91dHB1dC51Y3MyLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHdoZXJleVtWQ01EXSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHdoZXJleFtWQ01EXSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICZjb2xvcmNtZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgCisjZW5kaWYgLyogT1MyICovCisj ZW5kaWYgLyogSUtTRE9OTFkgKi8KKwkJeworCQkgICAgaWYgKChyYyA9IHBuYnl0ZSgodWNzb3Jk ZXIgPyAweGZkIDogMHhmZiksZm4pKSA8IDApCisJCSAgICAgIHJldHVybihyYyk7CisJCSAgICBp ZiAoKHJjID0gcG5ieXRlKCh1Y3NvcmRlciA/IDB4ZmYgOiAweGZkKSxmbikpIDwgMCkKKwkJICAg ICAgcmV0dXJuKHJjKTsKKwkJfQorCQljb3VudCArPSAyOworCSAgICB9CisjaWZuZGVmIElLU0RP TkxZCisjaWZkZWYgT1MyCisgICAgICAgICAgICBpZiAoZm4gPT0gTlVMTCAmJiAhazk1c3Rkb3V0 ICYmICFpbnNlcnZlcikgeworICAgICAgICAgICAgICAgIG9mZmMrKzsKKyAgICAgICAgICAgICAg ICBvdXRwdXQuYnl0ZXNbMF0gPSB1Yy54X2NoYXJbc3dhcHBpbmddOworICAgICAgICAgICAgICAg IG91dHB1dC5ieXRlc1sxXSA9IHVjLnhfY2hhclsxLXN3YXBwaW5nXTsKKworICAgICAgICAgICAg ICAgIFZzY3JuV3J0VUNTMlN0ckF0dChWQ01ELAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAmb3V0cHV0LnVjczIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJleVtWQ01EXSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmV4W1ZDTURdLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAmY29sb3JjbWQKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIH0gZWxzZSAKKyNlbmRpZiAvKiBPUzIgKi8K KyNlbmRpZiAvKiBJS1NET05MWSAqLworICAgICAgICAgICAgeworCQlpZiAoKHJjID0gcG5ieXRl KHVjLnhfY2hhcltzd2FwcGluZ10sZm4pKSA8IDApCisJCSAgcmV0dXJuKHJjKTsKKwkJaWYgKChy YyA9IHBuYnl0ZSh1Yy54X2NoYXJbMS1zd2FwcGluZ10sZm4pKSA8IDApCisJCSAgcmV0dXJuKHJj KTsKKwkgICAgfQorCSAgICBjb3VudCArPSAyOworCSAgICByZXR1cm4oY291bnQpOworCX0gZWxz ZSBpZiAoZmNzID09IEZDX1VURjgpIHsJLyogQ29udmVydCB0byBVVEYtOCAqLworCSAgICBDSEFS ICogYnVmID0gTlVMTDsKKwkgICAgaW50IGksIGNvdW50OworCSAgICBpZiAodXRmZXJyb3IpIHsK KwkJaWYgKChyYyA9IHBuYnl0ZSgodWNzb3JkZXIgPyAweGJkIDogMHhmZiksZm4pKSA8IDApCisJ CSAgcmV0dXJuKHJjKTsKKwkJaWYgKChyYyA9IHBuYnl0ZSgodWNzb3JkZXIgPyAweGZmIDogMHhi ZCksZm4pKSA8IDApCisJCSAgcmV0dXJuKHJjKTsKKwkgICAgfQorCSAgICBpZiAoKGNvdW50ID0g dWNzMl90b191dGY4KHVjLnhfc2hvcnQsJmJ1ZikpIDwgMSkKKwkgICAgICByZXR1cm4oLTEpOwor CSAgICBkZWJ1ZyhGMDExLCJ4cG5ieXRlIGJ1ZiIsYnVmLGNvdW50KTsKKwkgICAgZm9yIChpID0g MDsgaSA8IGNvdW50OyBpKyspCisJICAgICAgaWYgKChyYyA9IHBuYnl0ZShidWZbaV0sZm4pKSA8 IDApCisJCXJldHVybihyYyk7CisJICAgIGlmICh1dGZlcnJvcikKKwkgICAgICBjb3VudCArPSAy OworCSAgICByZXR1cm4oY291bnQpOworCX0gZWxzZSB7CQkJLyogVHJhbnNsYXRlIFVDUy0yIHRv IGJ5dGUgKi8KKwkgICAgaWYgKHVjLnhfc2hvcnQgPT0gMHgyMDI4IHx8IHVjLnhfc2hvcnQgPT0g MHgyMDI5KSB7CisJCWlmICh1dGZlcnJvcikKKwkJICBwbmJ5dGUoVU5LLGZuKTsKKwkJaWYgKGZl b2wpCisJCSAgcmV0dXJuKHBuYnl0ZSgoQ0hBUilmZW9sLGZuKSk7CisJCWlmICgocmMgPSBwbmJ5 dGUoKENIQVIpQ1IsZm4pKSA8IDApCisJCSAgcmV0dXJuKHJjKTsKKwkJaWYgKChyYyA9IHBuYnl0 ZSgoQ0hBUilMRixmbikpIDwgMCkKKwkJICByZXR1cm4ocmMpOworCQllbHNlCisJCSAgcmV0dXJu KHV0ZmVycm9yID8gMyA6IDIpOworCSAgICB9IGVsc2UgaWYgKHh1ZikgewkJLyogVUNTLXRvLUZD UyBmdW5jdGlvbiAqLworCQlpbnQgeCA9IDA7CisJCWlmICh1dGZlcnJvcikKKwkJICBwbmJ5dGUo VU5LLGZuKTsKKwkJaWYgKChyYyA9ICgqeHVmKSh1Yy54X3Nob3J0KSkgPCAwKSAvKiBUaGVzZSBj YW4gZmFpbC4uLiAqLworCQkgIGNoID0gVU5LOworCQllbHNlCisJCSAgY2ggPSAodW5zaWduZWQp KCh1bnNpZ25lZClyYyAmIDB4ZmZmZik7CisJCXggPSBwbmJ5dGUoY2gsZm4pOworCQlpZiAoeCA8 IDApCisJCSAgcmV0dXJuKHgpOworCQllbHNlIGlmICh1dGZlcnJvcikKKwkJICB4Kys7CisJCXJl dHVybih4KTsKKyNpZmRlZiBLQU5KSQorCisvKiAgQWxzbyBzZWUgdGhlIG5vbi1Vbmljb2RlIEth bmppIHNlY3Rpb24gZnVydGhlciBkb3duIGluIHRoaXMgZnVuY3Rpb24uICovCisKKwkgICAgfSBl bHNlIGlmIChmY3NpbmZvW2Zjc10uYWxwaGFiZXQgPT0gQUxfSkFQQU4pIHsKKworCQkvKiBUcmFu c2xhdGUgVUNTLTIgdG8gSmFwYW5lc2Ugc2V0ICovCisJCWRlYnVnKEYwMDEsInhwbmJ5dGUgdWMi LCIiLHVjLnhfc2hvcnQpOworCQlzai54X3Nob3J0ID0gdW5fdG9fc2oodWMueF9zaG9ydCk7IC8q IEZpcnN0IHRvIFNoaWZ0LUpJUyAqLworCQlkZWJ1ZyhGMDAxLCJ4cG5ieXRlIHNqIiwiIixzai54 X3Nob3J0KTsKKworCQlzd2l0Y2ggKGZjcykgewkJLyogRmlsZSBjaGFyYWN0ZXIgc2V0ICovCisJ CSAgY2FzZSBGQ19TSEpJUzoJLyogU2hpZnQtSklTIC0tIGp1c3Qgb3V0cHV0IGl0ICovCisJCSAg ICBpZiAoc2oueF9jaGFyW2J5dGVvcmRlcl0pIC8qIEJ1dCBub3QgaGlnaCBieXRlIGlmIHplcm8g Ki8KKwkJICAgICAgaWYgKChyYyA9IHBuYnl0ZSgoQ0hBUilzai54X2NoYXJbYnl0ZW9yZGVyXSxm bikpIDwgMCkKKwkJCXJldHVybihyYyk7CisJCSAgICBpZiAoKHJjID0gcG5ieXRlKChDSEFSKXNq LnhfY2hhclsxLWJ5dGVvcmRlcl0sZm4pKSA8IDApCisJCSAgICAgIHJldHVybihyYyk7CisJCSAg ICByZXR1cm4oMik7CisJCSAgY2FzZSBGQ19KRVVDOgkJLyogRVVDLUpQICovCisJCSAgICBldS54 X3Nob3J0ID0gc2pfdG9fZXUoc2oueF9zaG9ydCk7IC8qIFNoaWZ0LUpJUyB0byBFVUMgKi8KKwkJ ICAgIGRlYnVnKEYwMDEsInhwbmJ5dGUgZXUiLCIiLGV1Lnhfc2hvcnQpOworCQkgICAgaWYgKGV1 Lnhfc2hvcnQgPT0gMHhmZmZmKSB7IC8qIEJhZCAqLworCQkJaWYgKChyYyA9IHBuYnl0ZShVTkss Zm4pKSA8IDApCisJCQkgIHJldHVybihyYyk7CisJCQlyZXR1cm4oMSk7CisJCSAgICB9IGVsc2Ug ewkJLyogR29vZCAqLworCQkJaW50IGNvdW50ID0gMDsJLyogV3JpdGUgaGlnaCBieXRlIGlmIG5v dCB6ZXJvICovCisJCQlpZiAoZXUueF9jaGFyW2J5dGVvcmRlcl0pIHsKKwkJCSAgICBpZiAoKHJj PXBuYnl0ZSgoQ0hBUilldS54X2NoYXJbYnl0ZW9yZGVyXSxmbikpIDwgMCkKKwkJCSAgICAgIHJl dHVybihyYyk7CisJCQkgICAgY291bnQrKzsKKwkJCX0KKwkJCS8qIEFsd2F5cyB3cml0ZSBsb3cg Ynl0ZSAqLworCQkJaWYgKChyYyA9IHBuYnl0ZSgoQ0hBUilldS54X2NoYXJbMS1ieXRlb3JkZXJd LGZuKSkgPCAwKQorCQkJICByZXR1cm4ocmMpOworCQkJY291bnQrKzsKKwkJCXJldHVybihjb3Vu dCk7CisJCSAgICB9CisJCSAgICBicmVhazsKKworCQkgIGNhc2UgRkNfSklTNzoJCS8qIEpJUy03 ICovCisJCSAgY2FzZSBGQ19KREVDOgkJLyogREVDIEthbmppICovCisJCSAgICBldS54X3Nob3J0 ID0gc2pfdG9fZXUoc2oueF9zaG9ydCk7IC8qIFNoaWZ0LUpJUyB0byBFVUMgKi8KKwkJICAgIGlm IChldS54X3Nob3J0ID09IDB4ZmZmZikgeyAvKiBCYWQgKi8KKwkJCWRlYnVnKEYwMDEsInhwbmJ5 dGUgYmFkIGV1IiwiIixldS54X3Nob3J0KTsKKwkJCWlmICgocmMgPSBwbmJ5dGUoVU5LLGZuKSkg PCAwKQorCQkJICByZXR1cm4ocmMpOworCQkJcmV0dXJuKDEpOworCQkgICAgfSBlbHNlIHsJCS8q IEdvb2QgKi8KKwkJCWludCBpOworCQkJLyogVXNlIGFub3RoZXIgbmFtZSAtICdhJyBoaWRlcyBw YXJhbWV0ZXIgKi8KKwkJCS8qIEl0J3MgT0sgYXMgaXMgYnV0IGNhdXNlcyBjb21waWxlciB3YXJu aW5ncyAqLworCQkJY2hhciBhID0gZXUueF9jaGFyWzEtYnl0ZW9yZGVyXTsgLyogTG93IGJ5dGUg Ki8KKwkJCWRlYnVnKEYwMDEsInhwbmJ5dGUgZXUiLCIiLGV1Lnhfc2hvcnQpOworCQkJaWYgKGV1 LnhfY2hhcltieXRlb3JkZXJdID09IDApIHsgLyogUm9tYW4gKi8KKwkJCSAgICBzd2l0Y2ggKGpz dGF0ZSkgeworCQkJICAgICAgY2FzZSAxOgkvKiBDdXJyZW50IHN0YXRlIGlzIEthdGFrYW5hICov CisJCQkJamJ1ZlswXSA9IDB4MGY7CS8qIFNJICovCisJCQkJamJ1ZlsxXSA9IGE7CisJCQkJangg PSAyOworCQkJCWJyZWFrOworCQkJICAgICAgY2FzZSAyOgkvKiBDdXJyZW50IHN0YXRlIGlzIEth bmppICovCisJCQkJamJ1ZlswXSA9IDB4MWI7CS8qIEVTQyAqLworCQkJCWpidWZbMV0gPSAweDI4 OwkvKiAoICovCisJCQkJamJ1ZlsyXSA9IDB4NGE7CS8qIEogKi8KKwkJCQlqYnVmWzNdID0gYTsK KwkJCQlqeCA9IDQ7CisJCQkJYnJlYWs7CisJCQkgICAgICBkZWZhdWx0OgkvKiBDdXJyZW50IHN0 YXRlIGlzIFJvbWFuICovCisJCQkJamJ1ZlswXSA9IGE7CisJCQkJanggPSAxOworCQkJCWJyZWFr OworCQkJICAgIH0KKwkJCSAgICBqc3RhdGUgPSAwOwkvKiBOZXcgc3RhdGUgaXMgUm9tYW4gKi8K KwkJCX0gZWxzZSBpZiAoZXUueF9jaGFyW2J5dGVvcmRlcl0gPT0gMHg4ZSkgeyAvKiBLYW5hICov CisJCQkgICAganggPSAwOworCQkJICAgIHN3aXRjaCAoanN0YXRlKSB7CisJCQkgICAgICBjYXNl IDI6CQkgICAvKiBmcm9tIEthbmppICovCisJCQkJamJ1ZltqeCsrXSA9IDB4MWI7IC8qIEVTQyAq LworCQkJCWpidWZbangrK10gPSAweDI4OyAvKiAoICovCisJCQkJamJ1ZltqeCsrXSA9IDB4NGE7 IC8qIEogKi8KKwkJCSAgICAgIGNhc2UgMDoJCSAgIC8qIGZyb20gUm9tYW4gKi8KKwkJCQlqYnVm W2p4KytdID0gMHgwZTsgLyogU08gKi8KKwkJCSAgICAgIGRlZmF1bHQ6CQkgICAvKiBTdGF0ZSBp cyBhbHJlYWR5IEthbmEqLworCQkJCWpidWZbangrK10gPSAoYSAmIDB4N2YpOyAvKiBhbmQgdGhl IGNoYXIgKi8KKwkJCQlicmVhazsKKwkJCSAgICB9CisJCQkgICAganN0YXRlID0gMTsJLyogTmV3 IHN0YXRlIGlzIEthdGFrYW5hICovCisJCQl9IGVsc2UgewkvKiBLYW5qaSAqLworCQkJICAgIGp4 ID0gMDsKKwkJCSAgICBzd2l0Y2ggKGpzdGF0ZSkgeworCQkJICAgICAgY2FzZSAxOgkvKiBDdXJy ZW50IHN0YXRlIGlzIEthdGFrYW5hICovCisJCQkJamJ1ZltqeCsrXSA9IDB4MGY7IC8qIFNJICAq LworCQkJICAgICAgY2FzZSAwOgkvKiBDdXJyZW50IHN0YXRlIGlzIFJvbWFuICovCisJCQkJamJ1 ZltqeCsrXSA9IDB4MWI7IC8qIEVTQyAqLworCQkJCWpidWZbangrK10gPSAweDI0OyAvKiAkICAg Ki8KKwkJCQlqYnVmW2p4KytdID0gMHg0MjsgLyogQiAgICovCisJCQkgICAgICBkZWZhdWx0Ogkv KiBDdXJyZW50IHN0YXRlIGlzIGFscmVhZHkgS2FuamkgKi8KKwkJCQlqYnVmW2p4KytdID0gZXUu eF9jaGFyW2J5dGVvcmRlcl0gJiAweDdmOworCQkJCWpidWZbangrK10gPSBldS54X2NoYXJbMS1i eXRlb3JkZXJdICYgMHg3ZjsKKwkJCQlicmVhazsKKwkJCSAgICB9CisJCQkgICAganN0YXRlID0g MjsJLyogU2V0IHN0YXRlIHRvIEthbmppICovCisJCQl9CisJCQlmb3IgKGkgPSAwOyBpIDwgang7 IGkrKykgLyogT3V0cHV0IHRoZSByZXN1bHQgKi8KKwkJCSAgaWYgKChyYyA9IHBuYnl0ZShqYnVm W2ldLGZuKSkgPCAwKQorCQkJICAgIHJldHVybihyYyk7CisJCQlyZXR1cm4oangpOwkvKiBSZXR1 cm4gaXRzIGxlbmd0aCAqLworCQkgICAgfQorCQl9CisjZW5kaWYgLyogS0FOSkkgKi8KKwkgICAg fSBlbHNlIHsJCQkvKiBObyB0cmFuc2xhdGlvbiBmdW5jdGlvbiAqLworCQlpbnQgY291bnQgPSAw OworCQlpZiAodXRmZXJyb3IpIHsKKwkJICAgIGlmICgocmMgPSBwbmJ5dGUoKHVjc29yZGVyID8g MHhmZCA6IDB4ZmYpLGZuKSkgPCAwKQorCQkgICAgICByZXR1cm4ocmMpOworCQkgICAgaWYgKChy YyA9IHBuYnl0ZSgodWNzb3JkZXIgPyAweGZmIDogMHhmZCksZm4pKSA8IDApCisJCSAgICAgIHJl dHVybihyYyk7CisJCSAgICBjb3VudCArPSAyOworCQl9CisJCWlmICgocmMgPSBwbmJ5dGUodWMu eF9jaGFyW3N3YXBwaW5nXSxmbikpIDwgMCkKKwkJICByZXR1cm4ocmMpOworCQlpZiAoKHJjID0g cG5ieXRlKHVjLnhfY2hhclsxLXN3YXBwaW5nXSxmbikpIDwgMCkKKwkJICByZXR1cm4ocmMpOwor CQljb3VudCArPSAyOworCQlyZXR1cm4oY291bnQpOworCSAgICB9CisJfQorICAgIH0gZWxzZSB7 CQkJCS8qIEJ5dGUgdG8gVW5pY29kZSAqLworCWlmICh4dHUpIHsJCQkvKiBUQ1MtdG8tVUNTIGZ1 bmN0aW9uICovCisJICAgIGlmICgoKHRjc2luZm9bdGNzXS5zaXplID4gMTI4KSAmJiAodWMueF9z aG9ydCAmIDB4ODApKSB8fAorCQl0Y3NpbmZvW3Rjc10uc2l6ZSA8PSAxMjgpCisJICAgICAgdWMu eF9zaG9ydCA9ICgqeHR1KSh1Yy54X3Nob3J0KTsKKwl9CisJaWYgKGZjcyA9PSBGQ19VQ1MyKSB7 CQkvKiBBbmQgRkNTIGlzIFVDUy0yICovCisJICAgIC8qIFdyaXRlIG91dCB0aGUgYnl0ZXMgaW4g dGhlIGFwcHJvcHJpYXRlIGJ5dGUgb3JkZXIgKi8KKwkgICAgaWYgKCFvZmZjICYmIHVjc2JvbSkg ewkvKiBCZWdpbm5pbmcgb2YgZmlsZT8gKi8KKwkJaWYgKChyYyA9IHBuYnl0ZSgodWNzb3JkZXIg PyAweGZmIDogMHhmZSksZm4pKSA8IDApIC8qIEJPTSAqLworCQkgIHJldHVybihyYyk7CisJCWlm ICgocmMgPSBwbmJ5dGUoKHVjc29yZGVyID8gMHhmZSA6IDB4ZmYpLGZuKSkgPCAwKQorCQkgIHJl dHVybihyYyk7CisJICAgIH0KKwkgICAgaWYgKChyYyA9IHBuYnl0ZSh1Yy54X2NoYXJbc3dhcHBp bmddLGZuKSkgPCAwKQorCSAgICAgIHJldHVybihyYyk7CisJICAgIGlmICgocmMgPSBwbmJ5dGUo dWMueF9jaGFyWzEtc3dhcHBpbmddLGZuKSkgPCAwKQorCSAgICAgIHJldHVybihyYyk7CisJICAg IHJldHVybigyKTsKKwl9IGVsc2UgaWYgKGZjcyA9PSBGQ19VVEY4KSB7CS8qIENvbnZlcnQgdG8g VVRGLTggKi8KKwkgICAgQ0hBUiAqIGJ1ZiA9IE5VTEw7CisJICAgIGludCBpLCBjb3VudDsKKwkg ICAgaWYgKChjb3VudCA9IHVjczJfdG9fdXRmOCh1Yy54X3Nob3J0LCZidWYpKSA8IDEpCisJICAg ICAgcmV0dXJuKC0xKTsKKwkgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspCisJICAgICAg aWYgKChyYyA9IHBuYnl0ZShidWZbaV0sZm4pKSA8IDApCisJCXJldHVybihyYyk7CisJICAgIHJl dHVybihjb3VudCk7CisJfSBlbHNlIHsKKwkgICAgZGVidWcoRjEwMCwieHBuYnl0ZSBpbXBvc3Np YmxlIGNvbWJpbmF0aW9uIiwiIiwwKTsKKwkgICAgcmV0dXJuKC0xKTsKKwl9CisgICAgfQorI2Vs c2UKKyNpZmRlZiBLQU5KSQorLyoKKyAgVGhpcyBhbG1vc3QsIGJ1dCBub3QgcXVpdGUsIGR1cGxp Y2F0ZXMgdGhlIEthbmppIHNlY3Rpb24gYWJvdmUuCisgIFRoZXJlIGlzIG5vIGRvdWJ0IGEgd2F5 IHRvIGNvbWJpbmUgdGhlIHNlY3Rpb25zIG1vcmUgZWxlZ2FudGx5LAorICBidXQgcHJvYmFibHkg b25seSBhdCB0aGUgZXhwZW5zZSBvZiBhZGRpdGlvbmFsIGV4ZWN1dGlvbiBvdmVyaGVhZC4KKyAg QXMgbWF0dGVycyBzdGFuZCwgYmUgY2FyZWZ1bCB0byByZWZsZWN0IGFueSBjaGFuZ2VzIGluIHRo aXMgc2VjdGlvbgorICB0byB0aGUgb3RoZXIgS2Fuamkgc2VjdGlvbiBhYm92ZS4KKyovCisgICAg aWYgKHRjcyA9PSBUQ19KRVVDKSB7CQkvKiBJbmNvbWluZyBKYXBhbmVzZSBFVUMgKi8KKwlpbnQg Y291bnQgPSAwOworCXN3aXRjaCAoZmNzKSB7CQkJLyogRmlsZSBjaGFyYWN0ZXIgc2V0ICovCisJ ICBjYXNlIEZDX1NISklTOgkJLyogU2hpZnQtSklTIC0tIGp1c3Qgb3V0cHV0IGl0ICovCisJICAg IGlmIChzai54X2NoYXJbYnl0ZW9yZGVyXSkJLyogQnV0IG5vdCBoaWdoIGJ5dGUgaWYgemVybyAq LworCSAgICAgIGlmICgocmMgPSBwbmJ5dGUoKENIQVIpc2oueF9jaGFyW2J5dGVvcmRlcl0sZm4p KSA8IDApCisJCXJldHVybihyYyk7CisJICAgIGNvdW50Kys7CisJICAgIGlmICgocmMgPSBwbmJ5 dGUoKENIQVIpc2oueF9jaGFyWzEtYnl0ZW9yZGVyXSxmbikpIDwgMCkKKwkgICAgICByZXR1cm4o cmMpOworCSAgICBjb3VudCsrOworCSAgICByZXR1cm4oY291bnQpOworCSAgY2FzZSBGQ19KRVVD OgkJCS8qIEVVQy1KUCAqLworCSAgICBldS54X3Nob3J0ID0gc2pfdG9fZXUoc2oueF9zaG9ydCk7 IC8qIFNoaWZ0LUpJUyB0byBFVUMgKi8KKwkgICAgZGVidWcoRjAwMSwieHBuYnl0ZSBGQ19KRVVD IGV1IiwiIixldS54X3Nob3J0KTsKKwkgICAgaWYgKGV1Lnhfc2hvcnQgPT0gMHhmZmZmKSB7IC8q IEJhZCAqLworCQlpZiAoKHJjID0gcG5ieXRlKFVOSyxmbikpIDwgMCkKKwkJICByZXR1cm4ocmMp OworCQlyZXR1cm4oMSk7CisJICAgIH0gZWxzZSB7CQkJLyogR29vZCAqLworCQlpbnQgY291bnQg PSAwOwkJLyogV3JpdGUgaGlnaCBieXRlIGlmIG5vdCB6ZXJvICovCisJCWlmIChldS54X2NoYXJb Ynl0ZW9yZGVyXSkgeworCQkgICAgaWYgKChyYyA9IHBuYnl0ZSgoQ0hBUilldS54X2NoYXJbYnl0 ZW9yZGVyXSxmbikpIDwgMCkKKwkJICAgICAgcmV0dXJuKHJjKTsKKwkJICAgIGNvdW50Kys7CisJ CX0KKwkJLyogQWx3YXlzIHdyaXRlIGxvdyBieXRlICovCisJCWlmICgocmMgPSBwbmJ5dGUoKENI QVIpZXUueF9jaGFyWzEtYnl0ZW9yZGVyXSxmbikpIDwgMCkKKwkJICByZXR1cm4ocmMpOworCQlj b3VudCsrOworCQlyZXR1cm4oY291bnQpOworCSAgICB9CisJICAgIGJyZWFrOworCisJICBjYXNl IEZDX0pJUzc6CQkJLyogSklTLTcgKi8KKwkgIGNhc2UgRkNfSkRFQzoJCQkvKiBERUMgS2Fuamkg Ki8KKwkgICAgZXUueF9zaG9ydCA9IHNqX3RvX2V1KHNqLnhfc2hvcnQpOyAvKiBTaGlmdC1KSVMg dG8gRVVDICovCisJICAgIGlmIChldS54X3Nob3J0ID09IDB4ZmZmZikgeyAvKiBCYWQgKi8KKwkJ ZGVidWcoRjAwMSwieHBuYnl0ZSBGQ19KSVM3IGJhZCBldSIsIiIsZXUueF9zaG9ydCk7CisJCWlm ICgocmMgPSBwbmJ5dGUoVU5LLGZuKSkgPCAwKQorCQkgIHJldHVybihyYyk7CisJCXJldHVybigx KTsKKwkgICAgfSBlbHNlIHsJCQkvKiBHb29kICovCisJCWludCBpOworCQljaGFyIGEgPSBldS54 X2NoYXJbMS1ieXRlb3JkZXJdOyAvKiBMb3cgYnl0ZSAqLworCQlkZWJ1ZyhGMDAxLCJ4cG5ieXRl IEZDX0pJUzcgZXUiLCIiLGV1Lnhfc2hvcnQpOworCQlpZiAoZXUueF9jaGFyW2J5dGVvcmRlcl0g PT0gMCkgeyAvKiBSb21hbiAqLworCQkgICAgc3dpdGNoIChqc3RhdGUpIHsKKwkJICAgICAgY2Fz ZSAxOgkJLyogQ3VycmVudCBzdGF0ZSBpcyBLYXRha2FuYSAqLworCQkJamJ1ZlswXSA9IDB4MGY7 CS8qIFNJICovCisJCQlqYnVmWzFdID0gYTsKKwkJCWp4ID0gMjsKKwkJCWJyZWFrOworCQkgICAg ICBjYXNlIDI6CQkvKiBDdXJyZW50IHN0YXRlIGlzIEthbmppICovCisJCQlqYnVmWzBdID0gMHgx YjsJLyogRVNDICovCisJCQlqYnVmWzFdID0gMHgyODsJLyogKCAqLworCQkJamJ1ZlsyXSA9IDB4 NGE7CS8qIEogKi8KKwkJCWpidWZbM10gPSBhOworCQkJanggPSA0OworCQkJYnJlYWs7CisJCSAg ICAgIGRlZmF1bHQ6CQkvKiBDdXJyZW50IHN0YXRlIGlzIFJvbWFuICovCisJCQlqYnVmWzBdID0g YTsKKwkJCWp4ID0gMTsKKwkJCWJyZWFrOworCQkgICAgfQorCQkgICAganN0YXRlID0gMDsJCS8q IE5ldyBzdGF0ZSBpcyBSb21hbiAqLworCQl9IGVsc2UgaWYgKGV1LnhfY2hhcltieXRlb3JkZXJd ID09IDB4OGUpIHsgLyogS2FuYSAqLworCQkgICAganggPSAwOworCQkgICAgc3dpdGNoIChqc3Rh dGUpIHsKKwkJICAgICAgY2FzZSAyOgkJICAgLyogZnJvbSBLYW5qaSAqLworCQkJamJ1ZltqeCsr XSA9IDB4MWI7IC8qIEVTQyAqLworCQkJamJ1ZltqeCsrXSA9IDB4Mjg7IC8qICggKi8KKwkJCWpi dWZbangrK10gPSAweDRhOyAvKiBKICovCisJCSAgICAgIGNhc2UgMDoJCSAgIC8qIGZyb20gUm9t YW4gKi8KKwkJCWpidWZbangrK10gPSAweDBlOyAvKiBTTyAqLworCQkgICAgICBkZWZhdWx0OgkJ ICAgLyogU3RhdGUgaXMgYWxyZWFkeSBLYW5hKi8KKwkJCWpidWZbangrK10gPSAoYSAmIDB4N2Yp OyAvKiBhbmQgdGhlIGNoYXIgKi8KKwkJCWJyZWFrOworCQkgICAgfQorCQkgICAganN0YXRlID0g MTsJCS8qIE5ldyBzdGF0ZSBpcyBLYXRha2FuYSAqLworCQl9IGVsc2UgewkJLyogS2FuamkgKi8K KwkJICAgIGp4ID0gMDsKKwkJICAgIHN3aXRjaCAoanN0YXRlKSB7CisJCSAgICAgIGNhc2UgMToJ CS8qIEN1cnJlbnQgc3RhdGUgaXMgS2F0YWthbmEgKi8KKwkJCWpidWZbangrK10gPSAweDBmOyAv KiBTSSAgKi8KKwkJICAgICAgY2FzZSAwOgkJLyogQ3VycmVudCBzdGF0ZSBpcyBSb21hbiAqLwor CQkJamJ1ZltqeCsrXSA9IDB4MWI7IC8qIEVTQyAqLworCQkJamJ1ZltqeCsrXSA9IDB4MjQ7IC8q ICQgICAqLworCQkJamJ1ZltqeCsrXSA9IDB4NDI7IC8qIEIgICAqLworCQkgICAgICBkZWZhdWx0 OgkJLyogQ3VycmVudCBzdGF0ZSBpcyBhbHJlYWR5IEthbmppICovCisJCQlqYnVmW2p4KytdID0g ZXUueF9jaGFyW2J5dGVvcmRlcl0gJiAweDdmOworCQkJamJ1ZltqeCsrXSA9IGV1LnhfY2hhclsx LWJ5dGVvcmRlcl0gJiAweDdmOworCQkJYnJlYWs7CisJCSAgICB9CisJCSAgICBqc3RhdGUgPSAy OwkJLyogU2V0IHN0YXRlIHRvIEthbmppICovCisJCX0KKwkJZm9yIChpID0gMDsgaSA8IGp4OyBp KyspIC8qIE91dHB1dCB0aGUgcmVzdWx0ICovCisJCSAgaWYgKChyYyA9IHBuYnl0ZShqYnVmW2ld LGZuKSkgPCAwKQorCQkgICAgcmV0dXJuKHJjKTsKKwkJcmV0dXJuKGp4KTsJCS8qIFJldHVybiBp dHMgbGVuZ3RoICovCisJICAgIH0KKwkgIGRlZmF1bHQ6CisJICAgIGlmIChzai54X3Nob3J0IDwg MHg4MCkKKwkgICAgICByZXR1cm4oc2oueF9zaG9ydCk7CisJICAgIGVsc2UKKwkgICAgICByZXR1 cm4oJz8nKTsKKwl9CisgICAgfQorI2VuZGlmIC8qIEtBTkpJICovCisjZW5kaWYgLyogVU5JQ09E RSAqLworICAgIGRlYnVnKEYxMDAsInhwbmJ5dGUgQkFEIEZBTExUSFJVIiwiIiwwKTsKKyAgICBy ZXR1cm4oLTEpOworfQorCisjaWZuZGVmIE5PWEZFUgorCisvKiAgRCBFIEMgTyBEIEUgIC0tICBL ZXJtaXQgRGF0YS1wYWNrZXQgZGVjb2RlciAgKi8KKworaW50CisjaWZkZWYgQ0tfQU5TSUMKK2Rl Y29kZShDSEFSICpidWYsIGludCAoKmZuKShjaGFyKSwgaW50IHhsYXRlKQorI2Vsc2UKK2RlY29k ZShidWYsZm4seGxhdGUpIHJlZ2lzdGVyIENIQVIgKmJ1ZjsgcmVnaXN0ZXIgaW50ICgqZm4pKCk7 IGludCB4bGF0ZTsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogZGVjb2RlICovIHsKKyAgICBy ZWdpc3RlciB1bnNpZ25lZCBpbnQgYSwgYTcsIGE4LCBiODsgLyogVmFyaW91cyBjb3BpZXMgb2Yg Y3VycmVudCBjaGFyICovCisgICAgaW50IHQ7CQkJCS8qIEludCB2ZXJzaW9uIG9mIGNoYXJhY3Rl ciAqLworICAgIGludCBzc2ZsZzsJCQkJLyogQ2hhcmFjdGVyIHdhcyBzaW5nbGUtc2hpZnRlZCAq LworICAgIGludCBjY3BmbGc7CQkJCS8qIEZvciBDdHJsLXVucHJlZml4aW5nIHN0YXRzICovCisg ICAgaW50IGxlbjsKKyAgICBsb25nIHo7CisgICAgQ0hBUiBjOworLyoKKyAgQ2F0Y2ggdGhlIGNh c2UgaW4gd2hpY2ggd2UgYXJlIGFza2VkIHRvIGRlY29kZSBpbnRvIGEgZmlsZSB0aGF0IGlzIG5v dCBvcGVuLAorICBmb3IgZXhhbXBsZSwgaWYgdGhlIHVzZXIgaW50ZXJydXB0ZWQgdGhlIHRyYW5z ZmVyLCBidXQgdGhlIG90aGVyIEtlcm1pdAorICBrZWVwcyBzZW5kaW5nLgorKi8KKyAgICBpZiAo KGN4c2VlbiB8fCBjenNlZW4gfHwgZGlzY2FyZCkgJiYgKGZuID09IHB1dGZpbCkpCisgICAgICBy ZXR1cm4oMCk7CisKKyNpZmRlZiBDT01NRU5UCisjaWZkZWYgQ0tUVU5JTkcKKyAgICBpZiAoYmlu YXJ5ICYmICFwYXJpdHkpCisgICAgICByZXR1cm4oYmRlY29kZShidWYsZm4pKTsKKyNlbmRpZiAv KiBDS1RVTklORyAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICBkZWJ1ZyhGMTAwLCJERUNP REUiLCIiLDApOworCisgICAgeGRidWYgPSBidWY7CQkJLyogTWFrZSBnbG9iYWwgY29weSBvZiBw b2ludGVyLiAqLworICAgIHJwdCA9IDA7CQkJCS8qIEluaXRpYWxpemUgcmVwZWF0IGNvdW50LiAq LworCisgICAgbGVuID0gcmxuOwkJCQkvKiBOdW1iZXIgb2YgYnl0ZXMgaW4gZGF0YSBmaWVsZCAq LworICAgIHdoaWxlIChsZW4gPiAwKSB7CQkJLyogTG9vcCBmb3IgZWFjaCBieXRlICovCisgICAg ICAgIGEgPSAqeGRidWYrKyAmIDB4ZmY7CQkvKiBHZXQgbmV4dCBjaGFyYWN0ZXIgKi8KKwlsZW4t LTsKKwlpZiAoYSA9PSBycHRxICYmIHJwdGZsZykgewkvKiBHb3QgYSByZXBlYXQgcHJlZml4PyAq LworCSAgICBycHQgPSB4dW5jaGFyKCp4ZGJ1ZisrICYgMHhGRik7IC8qIFllcywgZ2V0IHRoZSBy ZXBlYXQgY291bnQsICovCisJICAgIHJwdG4gKz0gcnB0OworCSAgICBhID0gKnhkYnVmKysgJiAw eEZGOwkvKiBhbmQgZ2V0IHRoZSBwcmVmaXhlZCBjaGFyYWN0ZXIuICovCisJICAgIGxlbiAtPSAy OworCX0KKwliOCA9IGxzc3RhdGUgPyAwMjAwIDogMDsJLyogOHRoLWJpdCB2YWx1ZSBmcm9tIFNI SUZULVNUQVRFICovCisJaWYgKGVicWZsZyAmJiBhID09IGVicSkgewkvKiBIYXZlIDh0aC1iaXQg cHJlZml4PyAqLworCSAgICBiOCBePSAwMjAwOwkJCS8qIFllcywgaW52ZXJ0IHRoZSA4dGggYml0 J3MgdmFsdWUsICovCisJICAgIHNzZmxnID0gMTsJCQkvKiByZW1lbWJlciB3ZSBkaWQgdGhpcywg Ki8KKwkgICAgYSA9ICp4ZGJ1ZisrICYgMHhGRjsJLyogYW5kIGdldCB0aGUgcHJlZml4ZWQgY2hh cmFjdGVyLiAqLworCSAgICBsZW4tLTsKKwl9IGVsc2Ugc3NmbGcgPSAwOworCWNjcGZsZyA9IDA7 CisJaWYgKGEgPT0gY3RscSkgewkJLyogSWYgY29udHJvbCBwcmVmaXgsICovCisJICAgIGEgID0g KnhkYnVmKysgJiAweEZGOwkvKiBnZXQgaXRzIG9wZXJhbmQgKi8KKwkgICAgbGVuLS07CisJICAg IGE3ID0gYSAmIDB4N0Y7CQkvKiBhbmQgaXRzIGxvdyA3IGJpdHMuICovCisJICAgIGlmICgoYTcg Pj0gMDEwMCAmJiBhNyA8PSAwMTM3KSB8fCBhNyA9PSAnPycpIHsgLyogQ29udHJvbGxpZnkgKi8K KwkJYSA9IGN0bChhKTsJCS8qIGlmIGluIGNvbnRyb2wgcmFuZ2UuICovCisJCWE3ID0gYSAmIDB4 N0Y7CisJCWNjcGZsZyA9IDE7CQkvKiBOb3RlIHRoYXQgd2UgZGlkIHRoaXMgKi8KKwkJY2NwKys7 CQkJLyogQ291bnQgZm9yIHN0YXRzICovCisJICAgIH0KKwl9IGVsc2UgYTcgPSBhICYgMHg3ZjsJ CS8qIE5vdCBjb250cm9sIHF1b3RlICovCisJaWYgKGE3IDwgMzIgfHwgYTcgPT0gMTI3KSB7CS8q IENvbnRyb2wgY2hhcmFjdGVyPyAqLworCSAgICBpZiAoIWNjcGZsZykgY2N1Kys7CQkvKiBBIGJh cmUgb25lLCBjb3VudCBpdCAqLworCSAgICBpZiAobHNjYXB1KSB7CQkvKiBJZiBkb2luZyBsb2Nr aW5nIHNoaWZ0cy4uLiAqLworCQlpZiAobHNzdGF0ZSkJCS8qIElmIFNISUZURUQgKi8KKwkJICBh OCA9IChhICYgfmI4KSAmIDB4RkY7IC8qIEludmVydCBtZWFuaW5nIG9mIDh0aCBiaXQgKi8KKwkJ ZWxzZQkJCS8qIG90aGVyd2lzZSAqLworCQkgIGE4ID0gYSB8IGI4OwkJLyogT1IgaW4gOHRoIGJp dCAqLworCQkvKiBJZiB3ZSdyZSBub3QgaW4gYSBxdW90ZWQgc2VxdWVuY2UgKi8KKwkJaWYgKCFs c3F1b3RlICYmICghbHNzdGF0ZSB8fCAhc3NmbGcpKSB7CisJCSAgICBpZiAoYTggPT0gRExFKSB7 CS8qIENoZWNrIGZvciBETEUgcXVvdGUgKi8KKwkJCWxzcXVvdGUgPSAxOwkvKiBwcmVmaXhlZCBi eSBzaW5nbGUgc2hpZnQhICovCisJCQljb250aW51ZTsKKwkJICAgIH0gZWxzZSBpZiAoYTggPT0g U08pIHsgLyogQ2hlY2sgZm9yIFNoaWZ0LU91dCAqLworCQkJbHNzdGF0ZSA9IDE7CS8qIFNISUZU LVNUQVRFID0gU0hJRlRFRCAqLworCQkJY29udGludWU7CisJCSAgICB9IGVsc2UgaWYgKGE4ID09 IFNJKSB7IC8qIG9yIFNoaWZ0LUluICovCisJCQlsc3N0YXRlID0gMDsJLyogU0hJRlQtU1RBVEUg PSBVTlNISUZURUQgKi8KKwkJCWNvbnRpbnVlOworCQkgICAgfQorCQl9IGVsc2UgbHNxdW90ZSA9 IDA7CisJICAgIH0KKwl9CisJYSB8PSBiODsJCQkvKiBPUiBpbiB0aGUgOHRoIGJpdCAqLworCWlm IChycHQgPT0gMCkgcnB0ID0gMTsJCS8qIElmIG5vIHJlcGVhdHMsIHRoZW4gb25lICovCisjaWZu ZGVmIE5PQ1NFVFMKKwlpZiAoIWJpbmFyeSkgewkJCS8qIElmIGluIHRleHQgbW9kZSwgKi8KKwkg ICAgaWYgKHRjaGFyc2V0ICE9IFRDX1VDUzIpIHsKKwkJaWYgKGZlb2wgJiYgYSA9PSBDUikJLyog Q29udmVydCBDUkxGIHRvIG5ld2xpbmUgY2hhciAqLworCQkgIGNvbnRpbnVlOworCQlpZiAoZmVv bCAmJiBhID09IExGKQorCQkgIGEgPSBmZW9sOworCSAgICB9CisJICAgIGlmICh4bGF0eXBlID09 IFhMQV9CWVRFKQkvKiBCeXRlLWZvci1ieXRlIC0gZG8gaXQgbm93ICovCisJICAgICAgaWYgKHhs YXRlICYmIHJ4KSBhID0gKCpyeCkoKENIQVIpIGEpOworICAgIAl9CisjZW5kaWYgLyogTk9DU0VU UyAqLworCS8qIChQV1ApIERlY29kaW5nIHNwZWVkdXAgdmlhIGJ1ZmZlcmVkIG91dHB1dCBhbmQg YSBtYWNyby4uLiAqLworCWlmIChmbiA9PSBwdXRmaWwpIHsKKwkgICAgZm9yICg7IHJwdCA+IDA7 IHJwdC0tKSB7CS8qIE91dHB1dCB0aGUgY2hhciBSUFQgdGltZXMgKi8KKyNpZmRlZiBDQUxJQlJB VEUKKwkJaWYgKGNhbGlicmF0ZSkgeworCQkgICAgZmZjKys7CisJCSAgICBjb250aW51ZTsKKwkJ fQorI2VuZGlmIC8qIENBTElCUkFURSAqLworCisvKiBOb3RlOiBUaGUgVW5pY29kZSBhbmQgS2Fu amkgc2VjdGlvbnMgY2FuIHByb2JhYmx5IGJlIGNvbWJpbmVkIG5vdzsgKi8KKy8qIHRoZSBVbmlj b2RlIG1ldGhvZCAoeHBuYnl0ZSgpKSBjb3ZlcnMgS2FuamkgdG9vLiAqLworCisjaWZkZWYgVU5J Q09ERQorCQlpZiAoIWJpbmFyeSAmJiB4bGF0eXBlID09IFhMQV9VTklDT0RFKQorCQkgIHQgPSB4 cG5ieXRlKCh1bnNpZ25lZCkoKHVuc2lnbmVkKWEgJiAweGZmKSwKKwkJCSAgICAgIHRjaGFyc2V0 LAorCQkJICAgICAgZmNoYXJzZXQsCisJCQkgICAgICBmbgorCQkJICAgICAgKTsKKwkJZWxzZQor I2VuZGlmIC8qIFVOSUNPREUgKi8KKyNpZmRlZiBLQU5KSQorCQlpZiAoIWJpbmFyeSAmJiB0Y2hh cnNldCA9PSBUQ19KRVVDICYmCisJCSAgICBmY2hhcnNldCAhPSBGQ19KRVVDKSB7IC8qIFRyYW5z bGF0aW5nIGZyb20gSi1FVUMgKi8KKwkJICAgIGlmICghZmZjKSB4a2FuamYoKTsKKwkJICAgIGlm ICh4a2FuamkoYSxmbikgPCAwKSAgLyogdG8gc29tZXRoaW5nIGVsc2U/ICovCisJCSAgICAgIHJl dHVybigtMSk7CisJCSAgICBlbHNlIHQgPSAxOworCQl9IGVsc2UKKyNlbmRpZiAvKiBLQU5KSSAq LworCQl7CisjaWZkZWYgT1MyCisJCSAgICAgIGlmICh4ZmxnICYmICFyZW1maWxlKSB7IC8qIFdy aXRlIHRvIHZpcnR1YWwgc2NyZWVuICovCisJCQkgIGNoYXIgX2E7CisJCQkgIF9hID0gYSAmIGZt YXNrOworCQkJICB0ID0gY29ub2MoX2EpOworCQkJICBpZiAodCA8IDEpCisJCQkgICAgdCA9IC0x OworCQkgICAgICB9IGVsc2UKKyNlbmRpZiAvKiBPUzIgKi8KKwkJCXQgPSB6bWNob3V0KGEgJiBm bWFzayk7IC8qIHptY2hvdXQgaXMgYSBtYWNybyAqLworCQl9CisJCWlmICh0IDwgMCkgeworCQkg ICAgZGVidWcoRjEwMSwiZGVjb2RlIHdyaXRlIGVycm5vIiwiIixlcnJubyk7CisJCSAgICByZXR1 cm4oLTEpOworCQl9CisjaWZkZWYgVU5JQ09ERQorCQlpZiAoeGxhdHlwZSAhPSBYTEFfVU5JQ09E RSB8fCBiaW5hcnkpIHsKKwkJICAgIGZmYysrOwkJLyogQ291bnQgdGhlIGNoYXJhY3RlciAqLwor CQkgICAgaWYgKGRvY3JjICYmICF4ZmxnICYmICFyZW1maWxlKSB7IC8qIFVwZGF0ZSBmaWxlIENS QyAqLworCQkJYyA9IGE7CQkvKiBGb3JjZSBjb252ZXJzaW9uIHRvIHVuc2lnbmVkIGNoYXIgKi8K KwkJCXogPSBjcmMxNiBeIChsb25nKWM7CisJCQljcmMxNiA9IChjcmMxNiA+PiA4KSBeCisJCQkg IChjcmN0YVsoeiAmIDB4RjApID4+IDRdIF4gY3JjdGJbeiAmIDB4MEZdKTsKKwkJICAgIH0KKwkJ fQorI2VuZGlmIC8qIFVOSUNPREUgKi8KKwkgICAgfQorCX0gZWxzZSB7CQkJLyogT3V0cHV0IHRv IHNvbWV0aGluZyBlbHNlLiAqLworCSAgICBhICY9IGZtYXNrOwkJCS8qIEFwcGx5IGZpbGUgbWFz ayAqLworCSAgICBmb3IgKDsgcnB0ID4gMDsgcnB0LS0pIHsJLyogT3V0cHV0IHRoZSBjaGFyIFJQ VCB0aW1lcyAqLworI2lmZGVmIENBTElCUkFURQorCQlpZiAoY2FsaWJyYXRlKSB7CisJCSAgICBm ZmMrKzsKKwkJICAgIGNvbnRpbnVlOworCQl9CisjZW5kaWYgLyogQ0FMSUJSQVRFICovCisJCWlm ICgoKmZuKSgoY2hhcikgYSkgPCAwKSByZXR1cm4oLTEpOyAvKiBTZW5kIHRvIG91dHB1dCBmdW5j LiAqLworCSAgICB9CisJfQorI2lmZGVmIENLX0NUUkxaCisJbGFzdGNoYXIgPSBhOworI2VuZGlm IC8qIENLX0NUUkxaICovCisgICAgfQorICAgIHJldHVybigwKTsKK30KKworLyogIEcgRSBUIFAg SyBUIC0tIEZpbGwgYSBwYWNrZXQgZGF0YSBmaWVsZCAgKi8KKworLyoKKyAgR2V0cyBjaGFyYWN0 ZXJzIGZyb20gdGhlIGN1cnJlbnQgc291cmNlIC0tIGZpbGUgb3IgbWVtb3J5IHN0cmluZy4KKyAg RW5jb2RlcyB0aGUgZGF0YSBpbnRvIHRoZSBwYWNrZXQsIGZpbGxpbmcgdGhlIHBhY2tldCBvcHRp bWFsbHkuCisgIFNldCBmaXJzdCA9IDEgd2hlbiBjYWxsaW5nIGZvciB0aGUgZmlyc3QgdGltZSBv biBhIGdpdmVuIGlucHV0IHN0cmVhbQorICAoc3RyaW5nIG9yIGZpbGUpLgorCisgIENhbGwgd2l0 aDoKKyAgICBidWZtYXggLS0gY3VycmVudCBzZW5kLXBhY2tldCBzaXplCisgICAgeGxhdGUgIC0t IGZsYWc6IDAgdG8gc2tpcCBjaGFyYWN0ZXItc2V0IHRyYW5zbGF0aW9uLCAxIHRvIHRyYW5zbGF0 ZQorCisgIFVzZXMgZ2xvYmFsIHZhcmlhYmxlczoKKyAgICB0ICAgICAtLSBjdXJyZW50IGNoYXJh Y3Rlci4KKyAgICBmaXJzdCAtLSBmbGFnOiAxIHRvIHN0YXJ0IHVwLCAwIGZvciBpbnB1dCBpbiBw cm9ncmVzcywgLTEgZm9yIEVPRi4KKyAgICBuZXh0ICAtLSBuZXh0IGNoYXJhY3RlciAobm90IHVz ZWQgYW55IG1vcmUpLgorICAgIGRhdGEgIC0tIHBvaW50ZXIgdG8gdGhlIHBhY2tldCBkYXRhIGJ1 ZmZlci4KKyAgICBzaXplICAtLSBudW1iZXIgb2YgY2hhcmFjdGVycyBpbiB0aGUgZGF0YSBidWZm ZXIuCisgICAgbWVtc3RyIC0gZmxhZyB0aGF0IGlucHV0IGlzIGNvbWluZyBmcm9tIGEgbWVtb3J5 IHN0cmluZyBpbnN0ZWFkIG9mIGEgZmlsZS4KKyAgICBtZW1wdHIgLSBwb2ludGVyIHRvIHN0cmlu ZyBpbiBtZW1vcnkuCisgICAgKCpzeCkoKSAgY2hhcmFjdGVyIHNldCB0cmFuc2xhdGlvbiBmdW5j dGlvbgorCisgIFJldHVybnM6CisgICAgVGhlIHNpemUgYXMgdmFsdWUgb2YgdGhlIGZ1bmN0aW9u LCBhbmQgYWxzbyBzZXRzIGdsb2JhbCAic2l6ZSIsCisgICAgYW5kIGZpbGxzIChhbmQgbnVsbC10 ZXJtaW5hdGVzKSB0aGUgZ2xvYmFsIGRhdGEgYXJyYXkuCisgICAgUmV0dXJuczoKKyAgICAgIDAg b24gRU9GLgorICAgICAtMSBvbiBmYXRhbCAoaW50ZXJuYWwpIGVycm9yLgorICAgICAtMyBvbiB0 aW1lb3V0IChlLmcuIHdoZW4gcmVhZGluZyBkYXRhIGZyb20gYSBwaXBlKS4KKworICBSZXdyaXR0 ZW4gYnkgUGF1bCBXLiBQbGFjZXdheSAoUFdQKSBvZiBPaGlvIFN0YXRlIFVuaXZlcnNpdHksIE1h cmNoIDE5ODkuCisgIEluY29ycG9yYXRlcyBvbGQgZ2V0Y2h4KCkgYW5kIGVuY29kZSgpIGlubGlu ZSB0byByZWR1Y2UgZnVuY3Rpb24gY2FsbHMsCisgIHVzZXMgYnVmZmVyZWQgaW5wdXQgZm9yIG11 Y2gtaW1wcm92ZWQgZWZmaWNpZW5jeSwgYW5kIGNsZWFycyB1cCBzb21lCisgIGNvbmZ1c2lvbiB3 aXRoIGxpbmUgdGVybWluYXRpb24gKENSTEYgdnMgTEYgdnMgQ1IpLgorCisgIFJld3JpdHRlbiBh Z2FpbiBieSBGcmFuayBkYSBDcnV6IHRvIGluY29ycG9yYXRlIGxvY2tpbmcgc2hpZnQgbWVjaGFu aXNtLAorICBNYXkgMTk5MS4gIEFuZCBhZ2FpbiBpbiAxOTk4IGZvciBlZmZpY2llbmN5LCBldGMs IHdpdGggYSBzZXBhcmF0ZQorICBiZ2V0cGt0KCkgc3BsaXQgb3V0IGZvciBiaW5hcnktbW9kZSBu by1wYXJpdHkgdHJhbnNmZXJzLgorKi8KKworLyoKKyAgTm90ZTogU2VwYXJhdGUgS2Fuamkgc3Vw cG9ydCBkYXRlcyBmcm9tIGNpcmNhIDE5OTEgYW5kIG5vdyAoMTk5OSkgY2FuIG1vc3QKKyAgbGlr ZWx5IGJlIGNvbWJpbmVkIHdpdGggdGhlIHRoZSBVbmljb2RlIHN1cHBvcnQ6IHRoZSB4Z25ieXRl KCkveHBuYnl0ZSgpCisgIG1lY2hhbmlzbSB3b3JrcyBmb3IgYm90aCBVbmljb2RlIGFuZCBLYW5q aS4KKyovCisjaWZkZWYgS0FOSkkKK2ludAora2dldGYoCisjaWZkZWYgQ0tfQU5TSUMKKyAgICAg IFZPSUQKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworICAgICAgKSB7CisgICAgaWYgKGZ1bmNzdHIp CisgICAgICByZXR1cm4oKCpmdW5jcHRyKSgpKTsKKyAgICBlbHNlCisgICAgICByZXR1cm4oem1p bmNoYXIoKSk7Cit9CisKK2ludAora2dldG0oCisjaWZkZWYgQ0tfQU5TSUMKKyAgICAgIFZPSUQK KyNlbmRpZiAvKiBDS19BTlNJQyAqLworICAgICAgKSB7CisgICAgaW50IHg7CisgICAgaWYgKCh4 ID0gKm1lbXB0cisrKSkgcmV0dXJuKHgpOworICAgIGVsc2UgcmV0dXJuKC0xKTsKK30KKyNlbmRp ZiAvKiBLQU5KSSAqLworCisvKgorICBMb29rYWhlYWQgZnVuY3Rpb24gdG8gZGVjaWRlIHdoZXRo ZXIgbG9ja2luZyBzaGlmdCBpcyB3b3J0aCBpdC4gIExvb2tzIGF0CisgIHRoZSBuZXh0IGZvdXIg aW5wdXQgY2hhcmFjdGVycyB0byBzZWUgaWYgYWxsIG9mIHRoZWlyIDh0aCBiaXRzIG1hdGNoIHRo ZQorICBhcmd1bWVudC4gIENhbGwgd2l0aCAwIG9yIDAyMDAuICBSZXR1cm5zIDEgb24gbWF0Y2gs IDAgaWYgdGhleSBkb24ndCBtYXRjaC4KKyAgSWYgd2UgZG9uJ3QgaGFwcGVuIHRvIGhhdmUgYXQg bGVhc3QgNCBtb3JlIGNoYXJhY3RlcnMgd2FpdGluZyBpbiB0aGUgaW5wdXQKKyAgYnVmZmVyLCBy ZXR1cm5zIDEuICBOb3RlIHRoYXQgemlucHRyIHBvaW50cyB0d28gY2hhcmFjdGVycyBhaGVhZCBv ZiB0aGUKKyAgY3VycmVudCBjaGFyYWN0ZXIgYmVjYXVzZSBvZiByZXBlYXQtY291bnQgbG9va2Fo ZWFkLgorKi8KK2ludAorbHNsb29rKGIpIHVuc2lnbmVkIGludCBiOyB7CQkvKiBMb2NraW5nIFNo aWZ0IExvb2thaGVhZCAqLworICAgIGludCBpOworICAgIGlmICh6aW5jbnQgPCAzKQkJCS8qIElm IG5vdCBlbm91Z2ggY2hhcnMgaW4gYnVmZmVyLCAqLworICAgICAgcmV0dXJuKDEpOwkJCS8qIGZv cmNlIHNoaWZ0LXN0YXRlIHN3aXRjaC4gKi8KKyAgICBiICY9IDAyMDA7CQkJCS8qIEZvcmNlIGFy Z3VtZW50IHRvIHByb3BlciBmb3JtLiAqLworICAgIGZvciAoaSA9IC0xOyBpIDwgMzsgaSsrKQkJ LyogTG9vayBhdCBuZXh0IDUgY2hhcmFjdGVycyB0byAqLworICAgICAgaWYgKCgoKih6aW5wdHIr aSkpICYgMDIwMCkgIT0gYikJLyogc2VlIGlmIGFsbCB0aGVpciA4dGggYml0cyBtYXRjaC4gICov CisJcmV0dXJuKDApOwkJCS8qIFRoZXkgZG9uJ3QuICovCisgICAgcmV0dXJuKDEpOwkJCQkvKiBU aGV5IGRvLiAqLworfQorCisvKiBSb3V0aW5lIHRvIGNvbXB1dGUgbWF4aW11bSBkYXRhIGxlbmd0 aCBmb3IgcGFja2V0IHRvIGJlIGZpbGxlZCAqLworCitpbnQKK21heGRhdGEoKSB7CQkJCS8qIEdl dCBtYXhpbXVtIGRhdGEgbGVuZ3RoICovCisgICAgaW50IG4sIGxlbjsKKyAgICBkZWJ1ZyhGMTAx LCJtYXhkYXRhIHNwc2l6IDEiLCIiLHNwc2l6KTsKKyAgICBpZiAoc3BzaXogPCAwKQkJCS8qIEhv dyBjb3VsZCB0aGlzIGhhcHBlbj8gKi8KKyAgICAgIHNwc2l6ID0gRFNQU0laOworICAgIGRlYnVn KEYxMDEsIm1heGRhdGEgc3BzaXogMiIsIiIsc3BzaXopOworICAgIG4gPSBzcHNpeiAtIDU7CQkJ LyogU3BhY2UgZm9yIERhdGEgYW5kIENoZWNrc3VtICovCisgICAgaWYgKG4gPiA5MiAmJiBuIDwg OTYpIG4gPSA5MjsJLyogIlNob3J0IiBMb25nIHBhY2tldHMgZG9uJ3QgcGF5ICovCisgICAgaWYg KG4gPiA5MiAmJiBscGNhcHUgPT0gMCkJCS8qIElmIGxvbmcgcGFja2V0cyBuZWVkZWQsICovCisg ICAgICBuID0gOTI7CQkJCS8qIG1ha2Ugc3VyZSB0aGV5J3ZlIGJlZW4gbmVnb3RpYXRlZCAqLwor ICAgIGxlbiA9IG4gLSBiY3RsOwkJCS8qIFNwYWNlIGZvciBkYXRhICovCisgICAgaWYgKG4gPiA5 MikgbGVuIC09IDM7CQkvKiBMb25nIHBhY2tldCBuZWVkcyBoZWFkZXIgY2hrc3VtICovCisgICAg ZGVidWcoRjEwMSwibWF4ZGF0YSBsZW4gMSIsIiIsbGVuKTsKKyAgICBpZiAobGVuIDwgMCkgbGVu ID0gMTA7CisgICAgZGVidWcoRjEwMSwibWF4ZGF0YSBsZW4gMiIsIiIsbGVuKTsKKyAgICByZXR1 cm4obGVuKTsKK30KKworc3RhdGljIENIQVIgbGVmdG92ZXJbOV0gPSB7ICdcMCcsJ1wwJywnXDAn LCdcMCcsJ1wwJywnXDAnLCdcMCcsJ1wwJywnXDAnIH07CitzdGF0aWMgaW50IG5sZWZ0ID0gMDsK KworI2lmZGVmIENLVFVOSU5HCisvKgorICBXaGVuIENLVFVOSU5HIGlzIGRlZmluZWQgd2UgdXNl IHRoaXMgc3BlY2lhbCB0cmltbWVkLWRvd24gdmVyc2lvbiBvZiBnZXRwa3QKKyAgdG8gc3BlZWQg dXAgYmluYXJ5LW1vZGUgbm8tcGFyaXR5IHRyYW5zZmVycy4gIFdoZW4gQ0tUVU5JTkcgaXMgbm90 IGRlZmluZWQsCisgIG9yIGZvciB0ZXh0LW1vZGUgb3IgcGFyaXR5IHRyYW5zZmVycywgd2UgdXNl IHRoZSByZWd1bGFyIGdldHBrdCgpIGZ1bmN0aW9uLgorICBDYWxsIGp1c3QgbGlrZSBnZXRwa3Qo KSBidXQgdGVzdCBmaXJzdCBmb3IgdHJhbnNmZXIgbW9kZSBhbmQgcGFyaXR5LiAgTk9URToKKyAg VGhpcyByb3V0aW5lIGlzIG9ubHkgdG8gYmUgY2FsbGVkIHdoZW4gc2VuZGluZyBhIHJlYWwgZmls ZSAtLSBub3QgZm9yCisgIGZpbGVuYW1lcywgc2VydmVyIHJlc3BvbnNlcywgZXRjLCBiZWNhdXNl IGl0IG9ubHkgcmVhZHMgZnJvbSB0aGUgaW5wdXQgZmlsZS4KKyAgU2VlIGdldHBrdCgpIGZvciBt b3JlIGRldGFpbGVkIGNvbW1lbnRhcnkuCisqLworc3RhdGljIGludAorYmdldHBrdChidWZtYXgp IGludCBidWZtYXg7IHsKKyAgICByZWdpc3RlciBDSEFSIHJ0ID0gdCwgcm5leHQ7CisgICAgcmVn aXN0ZXIgQ0hBUiAqZHAsICpvZHAsICpwMSwgKnAyOworICAgIHJlZ2lzdGVyIGludCB4ID0gMCwg YTc7CisKKyAgICBDSEFSIHh4cmMsIHh4Y3E7CQkJLyogUGllY2VzIG9mIHByZWZpeGVkIHNlcXVl bmNlICovCisKKyAgICBsb25nIHo7CQkJCS8qIEEgbG9uZyB3b3JrZXIgKGZvciBDUkMpICovCisK KyAgICBpZiAoIWJpbmFyeSB8fCBwYXJpdHkgfHwgbWVtc3RyKQkvKiBKVVNUIElOIENBU0UgY2Fs bGVyIGRpZG4ndCB0ZXN0ICovCisgICAgICByZXR1cm4oZ2V0cGt0KGJ1Zm1heCwhYmluYXJ5KSk7 CisKKyAgICBpZiAoIWRhdGEpIHsKKwlkZWJ1ZyhGMTAwLCJTRVJJT1VTIEVSUk9SOiBiZ2V0cGt0 IGRhdGEgPT0gTlVMTCIsIiIsMCk7CisJcmV0dXJuKC0xKTsKKyAgICB9CisgICAgZHAgPSBkYXRh OwkJCQkvKiBQb2ludCB0byBwYWNrZXQgZGF0YSBidWZmZXIgKi8KKyAgICBzaXplID0gMDsJCQkJ LyogQW5kIGluaXRpYWxpemUgaXRzIHNpemUgKi8KKyAgICBidWZtYXggPSBtYXhkYXRhKCk7CQkJ LyogR2V0IG1heGltdW0gZGF0YSBsZW5ndGggKi8KKworI2lmZGVmIERFQlVHCisgICAgaWYgKGRl YmxvZykKKyAgICAgIGRlYnVnKEYxMDEsImJnZXRwa3QgYnVmbWF4IiwiIixidWZtYXgpOworI2Vu ZGlmIC8qIERFQlVHICovCisKKyAgICBpZiAoZmlyc3QgPT0gMSkgewkJCS8qIElmIGZpcnN0IGNo YXJhY3RlciBvZiB0aGlzIGZpbGUuLiAqLworCWZmYyA9IChDS19PRkZfVCkwOwkJLyogcmVzZXQg ZmlsZSBjaGFyYWN0ZXIgY291bnRlciAqLworI2lmZGVmIENPTU1FTlQKKy8qIE1vdmVkIHRvIGJl bG93ICovCisJZmlyc3QgPSAwOwkJCS8qIE5leHQgY2hhcmFjdGVyIHdvbid0IGJlIGZpcnN0ICov CisjZW5kaWYgLyogQ09NTUVOVCAqLworCSpsZWZ0b3ZlciA9ICdcMCc7CQkvKiBEaXNjYXJkIGFu eSBpbnRlcnJ1cHRlZCBsZWZ0b3ZlcnMgKi8KKwlubGVmdCA9IDA7CisKKwkvKiBHZXQgZmlyc3Qg Y2hhcmFjdGVyIG9mIGZpbGUgaW50byBydCwgd2F0Y2hpbmcgb3V0IGZvciBudWxsIGZpbGUgKi8K KworI2lmZGVmIENBTElCUkFURQorCWlmIChjYWxpYnJhdGUpIHsKKyNpZmRlZiBOT1JBTkRPTQor CSAgICBydCA9IDE3OworI2Vsc2UKKwkgICAgcnQgPSBjYWxfYVtyYW5kKCkgJiAweGZmXTsKKyNl bmRpZiAvKiBOT1JBTkRPTSAqLworCSAgICBmaXJzdCA9IDA7CisJfSBlbHNlCisjZW5kaWYgLyog Q0FMSUJSQVRFICovCisKKwlpZiAoKHggPSB6bWluY2hhcigpKSA8IDApIHsJLyogRU9GIG9yIGVy cm9yICovCisJICAgIGlmICh4ID09IC0zKSB7CQkvKiBUaW1lb3V0LiAqLworCQlzaXplID0gKGRw IC0gZGF0YSk7CisJCWRlYnVnKEYxMDEsImJnZXRwa3QgdGltZW91dCBzaXplIiwiIixzaXplKTsK KwkJcmV0dXJuKChzaXplID09IDApID8geCA6IHNpemUpOworCSAgICB9CisJICAgIGZpcnN0ID0g LTE7CisJICAgIHNpemUgPSAwOworCSAgICBpZiAoeCA9PSAtMikgewkJLyogRXJyb3IgKi8KKwkJ ZGVidWcoRjEwMCwiYmdldHBrdDogaW5wdXQgZXJyb3IiLCIiLDApOworCQljeHNlZW4gPSAxOwkJ LyogSW50ZXJydXB0IHRoZSBmaWxlIHRyYW5zZmVyICovCisJICAgIH0gZWxzZSB7CisJCWRlYnVn KEYxMDAsImJnZXRwa3QgZW1wdHkgZmlsZSIsIiIsMCk7CisJICAgIH0KKwkgICAgcmV0dXJuKDAp OworCX0KKwlmaXJzdCA9IDA7CQkJLyogTmV4dCBjaGFyIHdpbGwgbm90IGJlIHRoZSBmaXJzdCAq LworCWZmYysrOwkJCQkvKiBDb3VudCBhIGZpbGUgY2hhcmFjdGVyICovCisJcnQgPSAoQ0hBUikg eDsJCQkvKiBDb252ZXJ0IGludCB0byBjaGFyICovCisJaWYgKGRvY3JjICYmICh3aGF0ICYgV19T RU5EKSkgewkvKiBBY2N1bXVsYXRlIGZpbGUgY3JjICovCisJICAgIHogPSBjcmMxNiBeIChsb25n KXJ0OworCSAgICBjcmMxNiA9IChjcmMxNiA+PiA4KSBeCisJICAgICAgKGNyY3RhWyh6ICYgMHhG MCkgPj4gNF0gXiBjcmN0Ylt6ICYgMHgwRl0pOworCX0KKwlydCAmPSBmbWFzazsJCQkvKiBBcHBs eSBTRVQgRklMRSBCWVRFU0laRSBtYXNrICovCisKKyAgICB9IGVsc2UgaWYgKGZpcnN0ID09IC0x ICYmIG5sZWZ0ID09IDApIHsgLyogRU9GIGZyb20gbGFzdCB0aW1lICovCisKKyAgICAgICAgcmV0 dXJuKHNpemUgPSAwKTsKKyAgICB9CisvKgorICBIZXJlIHdlIGhhbmRsZSBjaGFyYWN0ZXJzIHRo YXQgd2VyZSBlbmNvZGVkIGZvciB0aGUgbGFzdCBwYWNrZXQgYnV0CisgIGRpZCBub3QgZml0LCBh bmQgc28gd2VyZSBzYXZlZCBpbiB0aGUgImxlZnRvdmVyIiBhcnJheS4KKyovCisgICAgaWYgKG5s ZWZ0KSB7CisJZm9yIChwMSA9IGxlZnRvdmVyOyBubGVmdCA+IDA7IG5sZWZ0LS0pIC8qIENvcHkg bGVmdG92ZXJzICovCisJICAqZHArKyA9ICpwMSsrOworCSpsZWZ0b3ZlciA9ICdcMCc7CQkvKiBE ZWxldGUgbGVmdG92ZXJzICovCisJbmxlZnQgPSAwOworICAgIH0KKyAgICBpZiAoZmlyc3QgPT0g LTEpCQkJLyogSGFuZGxlIEVPRiAqLworICAgICAgcmV0dXJuKHNpemUgPSAoZHAgLSBkYXRhKSk7 CisKKy8qIE5vdyBmaWxsIHVwIHRoZSByZXN0IG9mIHRoZSBwYWNrZXQuICovCisKKyAgICBycHQg PSAwOwkJCQkvKiBJbml0aWFsaXplIGNoYXJhY3RlciByZXBlYXQgY291bnQgKi8KKworICAgIHdo aWxlIChmaXJzdCA+IC0xKSB7CQkvKiBVbnRpbCBFT0YuLi4gKi8KKyNpZmRlZiBDQUxJQlJBVEUK KwlpZiAoY2FsaWJyYXRlKSB7CQkvKiBXZSBnZW5lcmF0ZSBvdXIgb3duICJmaWxlIiAqLworCSAg ICBpZiAoZmZjID49IGNhbGlicmF0ZSkgewkvKiBFT0YgKi8KKwkJZmlyc3QgPSAtMTsKKwkJZmZj LS07CisJICAgIH0gZWxzZSB7CQkJLyogR2VuZXJhdGUgbmV4dCBjaGFyYWN0ZXIgKi8KKwkJaWYg KGNhbF9qID4gQ0FMX00gKiBmZmMpCisJCSAgY2FsX2ogPSBjYWxfYVtmZmMgJiAweGZmXTsKKwkJ eCA9ICh1bnNpZ25lZCljYWxfYVsoY2FsX2ogJiAweGZmKV07CisJCWlmICh4ID09IHJ0KSB4IF49 IDI7CisJICAgIH0KKwkgICAgZmZjKys7CisJICAgIGNhbF9qICs9ICh1bnNpZ25lZCBpbnQpKGZm YyArIENBTF9PKTsKKwl9IGVsc2UKKyNlbmRpZiAvKiBDQUxJQlJBVEUgKi8KKwlpZiAoKHggPSB6 bWluY2hhcigpKSA8IDApIHsJLyogQ2hlY2sgZm9yIEVPRiAqLworCSAgICBpZiAoeCA9PSAtMykg ewkJLyogVGltZW91dC4gKi8KKwkJdCA9IHJ0OworCQlzaXplID0gKGRwLWRhdGEpOworCQlkZWJ1 ZyhGMTAxLCJiZ2V0cGt0IHRpbWVvdXQgc2l6ZSIsIiIsc2l6ZSk7CisJCXJldHVybigoc2l6ZSA9 PSAwKSA/IHggOiBzaXplKTsKKwkgICAgfQorCSAgICBmaXJzdCA9IC0xOwkJCS8qIEZsYWcgZW9m IGZvciBuZXh0IHRpbWUuICovCisJICAgIGlmICh4ID09IC0yKSBjeHNlZW4gPSAxOwkvKiBJZiBl cnJvciwgY2FuY2VsIHRoaXMgZmlsZS4gKi8KKwl9IGVsc2UgeworCSAgICBmZmMrKzsJCQkvKiBD b3VudCB0aGUgY2hhcmFjdGVyICovCisJICAgIGlmIChkb2NyYyAmJiAod2hhdCAmIFdfU0VORCkp IHsgLyogQWNjdW11bGF0ZSBmaWxlIGNyYyAqLworCQl6ID0gY3JjMTYgXiAobG9uZykoKENIQVIp eCAmIDB4ZmYpOworCQljcmMxNiA9IChjcmMxNiA+PiA4KSBeCisJCSAgKGNyY3RhWyh6ICYgMHhG MCkgPj4gNF0gXiBjcmN0Ylt6ICYgMHgwRl0pOworCSAgICB9CisJfQorCXJuZXh0ID0gKENIQVIp ICh4ICYgZm1hc2spOwkvKiBBcHBseSBmaWxlIG1hc2sgKi8KKy8qCisgIEF0IHRoaXMgcG9pbnQs IHRoZSBjaGFyYWN0ZXIgd2UganVzdCByZWFkIGlzIGluIHJuZXh0LAorICBhbmQgdGhlIGNoYXJh Y3RlciB3ZSBhcmUgYWJvdXQgdG8gZW5jb2RlIGludG8gdGhlIHBhY2tldCBpcyBpbiBydC4KKyov CisJb2RwID0gZHA7CQkJLyogUmVtZW1iZXIgd2hlcmUgd2Ugc3RhcnRlZC4gKi8KKwl4eHJjID0g eHhjcSA9IE5VTDsJCS8qIENsZWFyIHRoZXNlLiAqLworLyoKKyAgTm93IGVuY29kZSB0aGUgY2hh cmFjdGVyIGFjY29yZGluZyB0byB0aGUgb3B0aW9ucyB0aGF0IGFyZSBpbiBlZmZlY3Q6CisgICAg Y3RscFtdOiB3aGV0aGVyIHRoaXMgY29udHJvbCBjaGFyYWN0ZXIgbmVlZHMgcHJlZml4aW5nLgor ICAgIHJwdGZsZzogcmVwZWF0IGNvdW50cyBlbmFibGVkLgorICAgIE90aGVyIG9wdGlvbnMgZG9u J3QgYXBwbHkgaW4gdGhpcyByb3V0aW5lLgorKi8KKwlpZiAocnB0ZmxnICYmIChydCA9PSBybmV4 dCkgJiYgKGZpcnN0ID09IDApKSB7IC8qIEdvdCBhIHJ1bi4uLiAqLworCSAgICBpZiAoKytycHQg PCA5NCkgewkJLyogQmVsb3cgbWF4LCBqdXN0IGNvdW50ICovCisJCWNvbnRpbnVlOwkJLyogZ28g YmFjayBhbmQgZ2V0IGFub3RoZXIgKi8KKwkgICAgfSBlbHNlIGlmIChycHQgPT0gOTQpIHsJLyog UmVhY2hlZCBtYXgsIG11c3QgZHVtcCAqLworCQl4eHJjID0gKENIQVIpIHRvY2hhcihycHQpOyAv KiBQdXQgdGhlIHJlcGVhdCBjb3VudCBoZXJlICovCisJCXJwdG4gKz0gcnB0OwkJLyogQWNjdW11 bGF0ZSBpdCBmb3Igc3RhdGlzdGljcyAqLworCQlycHQgPSAwOwkJLyogQW5kIHJlc2V0IGl0ICov CisJICAgIH0KKwl9IGVsc2UgaWYgKHJwdCA+IDApIHsJCS8qIEVuZCBvZiBydW4gKi8KKwkgICAg eHhyYyA9IChDSEFSKXRvY2hhcigrK3JwdCk7IC8qIFRoZSBjb3VudCAqLworCSAgICBycHRuICs9 IHJwdDsJCS8qIEZvciBzdGF0cyAqLworCSAgICBycHQgPSAwOwkJCS8qIFJlc2V0IHJlcGVhdCBj b3VudCAqLworCX0KKwlhNyA9IHJ0ICYgMDE3NzsJCQkvKiBHZXQgbG93IDcgYml0cyBvZiBjaGFy YWN0ZXIgKi8KKwlpZiAoCisjaWZkZWYgQ0tfU1BFRUQKKwkgICAgY3RscFsodW5zaWduZWQpKHJ0 ICYgMHhmZildCS8qIExvcCBvZmYgYW55ICJzaWduIiBleHRlbnNpb24gKi8KKyNlbHNlCisJICAg IChhNyA8IFNQKSB8fCAoYTcgPT0gREVMKQorI2VuZGlmIC8qIENLX1NQRUVEICovCisJICAgICkg ewkJCQkvKiBEbyBjb250cm9sIHByZWZpeGluZyBpZiBuZWNlc3NhcnkgKi8KKwkgICAgeHhjcSA9 IG15Y3RscTsJCS8qIFRoZSBwcmVmaXggKi8KKwkgICAgY2NwKys7CQkJLyogQ291bnQgaXQgKi8K KwkgICAgcnQgPSAoQ0hBUikgY3RsKHJ0KTsJLyogVW5jb250cm9sbGlmeSB0aGUgY2hhcmFjdGVy ICovCisJfQorI2lmZGVmIENLX1NQRUVECisJZWxzZSBpZiAoKGE3IDwgU1ApIHx8IChhNyA9PSBE RUwpKSAvKiBDb3VudCBhbiB1bnByZWZpeGVkIG9uZSAqLworCSAgY2N1Kys7CisjZW5kaWYgLyog Q0tfU1BFRUQgKi8KKworCWlmIChhNyA9PSBteWN0bHEpCQkvKiBBbHdheXMgcHJlZml4IHRoZSBj b250cm9sIHByZWZpeCAqLworCSAgeHhjcSA9IG15Y3RscTsKKworCWlmICgocnB0ZmxnKSAmJiAo YTcgPT0gcnB0cSkpCS8qIElmIGl0J3MgdGhlIHJlcGVhdCBwcmVmaXgsICovCisJICB4eGNxID0g bXljdGxxOwkJLyogcHJlZml4IGl0IGlmIGRvaW5nIHJlcGVhdCBjb3VudHMgKi8KKworLyogTm93 IGNvbnN0cnVjdCB0aGUgcHJlZml4ZWQgc2VxdWVuY2UgKi8KKworCWlmICh4eHJjKSB7CQkJLyog UmVwZWF0IGNvdW50ICovCisjaWZkZWYgQ09NTUVOVAorCSAgICBpZiAoeHhyYyA9PSAoQ0hBUikg JyInICYmICF4eGNxKSB7IC8qIDIgaW4gYSByb3cgJiBub3QgcHJlZml4ZWQgKi8KKwkJKmRwKysg PSBydDsJCS8qIFNvIGp1c3QgZG8gdGhpcyAqLworCSAgICB9IGVsc2UgewkJCS8qIE1vcmUgdGhh biB0d28gb3IgcHJlZml4ZWQgKi8KKwkJKmRwKysgPSAoQ0hBUikgcnB0cTsgKmRwKysgPSB4eHJj OyAvKiBFbWl0IHJlcGVhdCBzZXF1ZW5jZSAqLworCSAgICB9CisjZWxzZQkJCQkJLyogQ0hFQ0sg VEhJUyAqLworCSAgICBpZiAoeHhyYyA9PSAoQ0hBUikgJyInICYmICF4eGNxKSB7IC8qIDIgaW4g YSByb3cgJiBub3QgcHJlZml4ZWQgKi8KKyAgICAgICAgICAgICAgICBpZiAoZHAgPT0gZGF0YSkg eworICAgICAgICAgICAgICAgICAgICAqZHArKyA9IHJ0OwkJLyogU28ganVzdCBkbyB0aGlzICov CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgqKGRwLTEpID09IHJ0KSB7CisgICAgICAgICAg ICAgICAgICAgICpkcCsrID0gKENIQVIpIHJwdHE7CisJCSAgICAqZHArKyA9IHh4cmM7CS8qIEVt aXQgcmVwZWF0IHNlcXVlbmNlICovCisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg ICAgICAgICAgICAgKmRwKysgPSBydDsJCS8qIFNvIGp1c3QgZG8gdGhpcyAqLworICAgICAgICAg ICAgICAgIH0KKwkgICAgfSBlbHNlIHsJCQkvKiBNb3JlIHRoYW4gdHdvIG9yIHByZWZpeGVkICov CisJCSpkcCsrID0gKENIQVIpIHJwdHE7CisJCSpkcCsrID0geHhyYzsJCS8qIEVtaXQgcmVwZWF0 IHNlcXVlbmNlICovCisJICAgIH0KKyNlbmRpZiAvKiBDT01NRU5UICovCisJfQorCWlmICh4eGNx KSB7ICpkcCsrID0gbXljdGxxOyB9CS8qIENvbnRyb2wgcHJlZml4ICovCisJKmRwKysgPSBydDsJ CQkvKiBGaW5hbGx5LCB0aGUgY2hhcmFjdGVyIGl0c2VsZiAqLworCXJ0ID0gcm5leHQ7CQkJLyog TmV4dCBjaGFyYWN0ZXIgaXMgbm93IGN1cnJlbnQuICovCisKKy8qIERvbmUgZW5jb2RpbmcgdGhl IGNoYXJhY3Rlci4gIE5vdyB0YWtlIGNhcmUgb2YgcGFja2V0IGJ1ZmZlciBvdmVyZmxvdy4gKi8K KworCXNpemUgPSBkcCAtIGRhdGE7CQkvKiBIb3cgbWFueSBieXRlcyB3ZSBwdXQgaW4gYnVmZmVy LiAqLworCWlmIChzaXplID49IGJ1Zm1heCkgewkJLyogSWYgdG9vIGJpZywgc2F2ZSBzb21lIGZv ciBuZXh0LiAqLworCSAgICAqZHAgPSAnXDAnOwkJCS8qIE1hcmsgdGhlIGVuZC4gKi8KKwkgICAg aWYgKHNpemUgPiBidWZtYXgpIHsJLyogaWYgcGFja2V0IGlzIG92ZXJmdWxsICovCisJCS8qIENv cHkgdGhlIHBhcnQgdGhhdCBkb2Vzbid0IGZpdCBpbnRvIHRoZSBsZWZ0b3ZlciBidWZmZXIsICov CisJCS8qIHRha2luZyBjYXJlIG5vdCB0byBzcGxpdCBhIHByZWZpeGVkIHNlcXVlbmNlLiAqLwor CQlpbnQgaTsKKwkJbmxlZnQgPSBkcCAtIG9kcDsKKwkJcDEgPSBsZWZ0b3ZlcjsKKwkJcDIgPSBv ZHA7CisJCWZvciAoaSA9IDA7IGkgPCBubGVmdDsgaSsrKQorCQkgICpwMSsrID0gKnAyKys7CisJ CXNpemUgPSBvZHAgLSBkYXRhOwkvKiBSZXR1cm4gdHJ1bmNhdGVkIHBhY2tldC4gKi8KKwkJKm9k cCA9ICdcMCc7CQkvKiBNYXJrIHRoZSBuZXcgZW5kICovCisJICAgIH0KKwkgICAgdCA9IHJ0OwkJ CS8qIFNhdmUgZm9yIG5leHQgdGltZSAqLworCSAgICByZXR1cm4oc2l6ZSk7CisJfQorICAgIH0J CQkJCS8qIE90aGVyd2lzZSwga2VlcCBmaWxsaW5nLiAqLworICAgIHNpemUgPSBkcCAtIGRhdGE7 CQkJLyogRW5kIG9mIGZpbGUgKi8KKyAgICAqZHAgPSAnXDAnOwkJCQkvKiBNYXJrIHRoZSBlbmQg b2YgdGhlIGRhdGEuICovCisgICAgcmV0dXJuKHNpemUpOwkJICAgICAvKiBSZXR1cm4gcGFydGlh bGx5IGZpbGxlZCBsYXN0IHBhY2tldC4gKi8KK30KKyNlbmRpZiAvKiBDS1RVTklORyAqLworCitW T0lECitkb2ZpbGNyYyhjKSBpbnQgYzsgewkJCS8qIEFjY3VtdWxhdGUgZmlsZSBjcmMgKi8KKyAg ICBsb25nIHo7CisgICAgeiA9IGNyYzE2IF4gKGxvbmcpYzsKKyAgICBjcmMxNiA9IChjcmMxNiA+ PiA4KSBeCisgICAgICAoY3JjdGFbKHogJiAweEYwKSA+PiA0XSBeIGNyY3RiW3ogJiAweDBGXSk7 Cit9CisKKy8qIEZvciBTRU5EaW5nIGZyb20gYW4gYXJyYXkuLi4gKi8KKworaW50CithZ25ieXRl KCkgewkJCQkvKiBHZXQgbmV4dCBieXRlIGZyb20gYXJyYXkgKi8KKyNpZm5kZWYgTk9TUEwKKyAg ICBjaGFyIGM7CisgICAgc3RhdGljIGludCBzYXZlID0gMDsJCS8qIEZvciBDUkxGICovCisgICAg c3RhdGljIGNoYXIgKiogYXAgPSBOVUxMOwkJLyogQXJyYXkgcG9pbnRlciAqLworICAgIHN0YXRp YyBjaGFyICogcCA9IE5VTEw7CQkvKiBDaGFyYWN0ZXIgcG9pbnRlciAqLworICAgIHN0YXRpYyBp bnQgaSA9IDAsIG4gPSAwOwkJLyogQXJyYXkgaW5kZXggYW5kIGxpbWl0ICovCisgICAgZXh0ZXJu IGludCBhX2RpbVtdOwkJCS8qIEFycmF5IGRpbWVuc2lvbiAqLworCisgICAgaWYgKCFhcCkgewkJ CQkvKiBGaXJzdCB0aW1lIHRocnUgKi8KKwlhcCA9IHNuZGFycmF5OwkJCS8qIFNldCB1cCBhcnJh eSBwb2ludGVycyAqLworCWlmICghYXAgfHwgKGkgPSBzbmR4bG8pID4gYV9kaW1bc25keGluXSkg eworCSAgICBzbmRhcnJheSA9IE5VTEw7CisJICAgIGFwID0gTlVMTDsKKwkgICAgcmV0dXJuKC0x KTsKKwl9CisJcCA9IGFwW2ldOwkJCS8qIFBvaW50IHRvIGZpcnN0IGVsZW1lbnQgaW4gcmFuZ2Ug Ki8KKwluID0gc25keGhpOwkJCS8qIEluZGV4IG9mIGxhc3QgZWxlbWVudCBpbiByYW5nZSAqLwor CWlmIChzbmR4aGkgPiBhX2RpbVtzbmR4aW5dKQkvKiBBZGp1c3QgaWYgbmVjZXNzYXJ5ICovCisJ ICBuID0gYV9kaW1bc25keGluXTsKKyAgICB9CisgICAgaWYgKHNhdmUpIHsJCQkJLyogSWYgYW55 dGhpbmcgc2F2ZWQgKi8KKwljID0gc2F2ZTsJCQkvKiB1bnNhdmUgaXQgKi8KKwlzYXZlID0gMDsJ CQkvKiBhbmQgcmV0dXJuIGl0ICovCisJcmV0dXJuKGMgJiAweGZmKTsKKyAgICB9CisgICAgaWYg KGkgPiBuKSB7CQkJLyogTm8gbW9yZSBlbGVtZW50cyAqLworCXNuZGFycmF5ID0gTlVMTDsKKwlh cCA9IE5VTEw7CisJcmV0dXJuKC0xKTsKKyAgICB9CisgICAgaWYgKCFwKQkJCQkvKiBTb3VyY2Ug cG9pbnRlciBpcyBOVUxMICovCisgICAgICBjID0gTlVMOwkJCQkvKiB0aGlzIG1lYW5zIGFuIGVt cHR5IGxpbmUgKi8KKyAgICBlbHNlCQkJCS8qIFNvdXJjZSBwb2ludGVyIG5vdCBOVUxMICovCisg ICAgICBjID0gKnArKzsJCQkJLyogTmV4dCBjaGFyICovCisgICAgaWYgKCFjKSB7CQkJCS8qIENo YXIgaXMgZW1wdHk/ICovCisJaWYgKCFiaW5hcnkpIHsJCQkvKiBUZXh0OiBlbmQgb2YgbGluZS4g Ki8KKwkgICAgaWYgKGZlb2wpIHsJCQkvKiBTdXBwbHkgTkwgKi8KKwkJYyA9IGZlb2w7CisJICAg IH0gZWxzZSB7CQkJLyogb3IgQ1JMRiAqLworCQlzYXZlID0gTEY7CisJCWMgPSBDUjsKKwkgICAg fQorCSAgICBwID0gYXBbKytpXTsKKwkgICAgcmV0dXJuKGMgJiAweGZmKTsKKwl9CisJd2hpbGUg KGkrKyA8IG4pIHsJCS8qIEJpbmFyeSAtIGdldCBuZXh0IGVsZW1lbnQgKi8KKwkgICAgcCA9IGFw W2ldOworCSAgICBpZiAoIXApCQkJLyogRW1wdHkgbGluZT8gKi8KKwkgICAgICBjb250aW51ZTsJ CQkvKiBJZ25vcmUgaXQgYW5kIGdldCBhbm90aGVyICovCisJICAgIGMgPSAqcCsrOwkJCS8qIEdl dCBuZXh0IGNoYXIgKi8KKwkgICAgaWYgKCFjKQkJCS8qIEVtdHB5IGNoYXI/ICovCisJICAgICAg Y29udGludWU7CQkJLyogSWdub3JlIGl0IGFuZCBnZXQgYW5vdGhlciAqLworCSAgICByZXR1cm4o YyAmIDB4ZmYpOwkJLyogTm90IGVtcHR5IC0gcmV0dXJuIGl0ICovCisJfQorCXNuZGFycmF5ID0g TlVMTDsKKwlhcCA9IE5VTEw7CisJcmV0dXJuKC0xKTsJCQkvKiBEb25lICovCisgICAgfQorICAg IHJldHVybihjICYgMHhmZik7CQkJLyogQ2hhciBpcyBub3QgZW1wdHkgKi8KKyNlbHNlCisgICAg c25kYXJyYXkgPSBOVUxMOworICAgIHJldHVybigtMSk7CisjZW5kaWYgLyogTk9TUEwgKi8KK30K KyNlbmRpZiAvKiBOT1hGRVIgKi8KKworI2lmbmRlZiBOT0NTRVRTCitzdGF0aWMgQ0hBUiB4bGFi dWZbMzJdID0geyAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH07CitzdGF0aWMgaW50IHhsYWNvdW50 ID0gMDsKK3N0YXRpYyBpbnQgeGxhcHRyID0gMDsKKy8qIHN0YXRpYyBVU0hPUlQgbGFzdHVjczIg PSAwOyAqLworCisvKgorICBYIEcgTiBCIFkgVCBFIC0tICBHZXQgbmV4dCB0cmFuc2xhdGVkIGJ5 dGUgZnJvbSB0aGUgaW5wdXQgZmlsZS4KKworICBSZXR1cm5zIHRoZSBuZXh0IGJ5dGUgdGhhdCBp cyB0byBiZSBwdXQgaW50byB0aGUgcGFja2V0LCBhbHJlYWR5IHRyYW5zbGF0ZWQuCisgIFRoaXMg aXNvbGF0ZXMgZ2V0cGt0KCkgZnJvbSBoYXZpbmcgdG8ga25vdyBhbnl0aGluZyBhYm91dCB0cmFu c2xhdGlvbiwKKyAgc2luZ2xlLSB2cyBtdWx0aWJ5dGUgY2hhcmFjdGVyIHNldHMsIG9uZS10by1t YW55IHZzIG1hbnktdG8tb25lLCBldGMsIGJ1dCBpdAorICBoYXMgcmF0aGVyIGhpZ2ggb3Zlcmhl YWQsIHNvIGRvbid0IGNhbGwgaXQgdW5sZXNzIHlvdSBrbm93IHRyYW5zbGF0aW9uIGlzCisgIG5l ZWRlZCB0byBvciBmcm9tIFVuaWNvZGUsIEphcGFuZXNlLCBvciBvdGhlciBtdWx0aWJ5dGUgY2hh cmFjdGVyIHNldC4KKworICBDYWxsIHdpdGg6CisgICAgZmNzOiAgRmlsZSBjaGFyYWN0ZXIgc2V0 IChzb3VyY2UsIGZpbGUgd2UgYXJlIHJlYWRpbmcgZnJvbSkKKyAgICB0Y3M6ICBUYXJnZXQgY2hh cmFjdGVyIHNldCAodXNlIGFuIEZDX3h4eCBjb2RlLCBub3QgYSBUQ194eHggY29kZSkKKyAgUmV0 dXJuczoKKyAgICA+PSAwOiBBIHRyYW5zbGF0ZWQgYnl0ZSBzdWl0YWJsZSBmb3Igd3JpdGluZy4K KyAgICA8ICAwOiBGYXRhbCBlcnJvciAoc3VjaCBhcyBFT0Ygb24gaW5wdXQgc291cmNlKS4KKyAg QXMgb2YgU2F0IFNlcCAgNyAxODozNzo0MSAyMDAyOiAgCisgICAgV2hlbiB0aGUgb3V0cHV0IGNo YXJhY3Rlci1zZXQgaXMgVUNTLTIsIGJ5dGVzIGFyZSBBTFdBWVMgcmV0dXJuZWQgaW4KKyAgICBi aWctZW5kaWFuIG9yZGVyIChwcmV2aW91c2x5IHRoZXkgY291bGQgYWxzbyBiZSByZXR1cm5lZCBp biBMRSBvcmRlcgorICAgIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucywgd2hpY2ggd2FzIGp1c3Qg d2F5IHRvbyBjb25mdXNpbmcpLgorKi8KK2ludAorI2lmZGVmIENLX0FOU0lDCit4Z25ieXRlKGlu dCB0Y3MsIGludCBmY3MsIGludCAoKmZuKSh2b2lkKSkKKyNlbHNlIC8qIENLX0FOU0lDICovCit4 Z25ieXRlKHRjcyxmY3MsZm4pIGludCB0Y3MsIGZjcywgKCpmbikoKTsKKyNlbmRpZiAvKiBDS19B TlNJQyAqLworLyogeGduYnl0ZSAqLyB7CisgICAgX1BST1RPVFlQKCBpbnQgKCp4eCksIChVU0hP UlQpICkgPSBOVUxMOworICAgIGludCBoYXZldWMgPSAwOwkJCS8qIEZsYWcgZm9yIGhhdmUgVW5p Y29kZSBjaGFyYWN0ZXIgKi8KKyNpZmRlZiBLQU5KSQorICAgIGludCBoYXZlc2ogPSAwOwkJCS8q IEhhdmUgU2hpZnQtSklTIGNoYXJhY3RlciAqLworICAgIGludCBoYXZlZXUgPSAwOwkJCS8qIEhh dmUgRVVDLUpQIGNoYXJhY3RlciAqLworI2VuZGlmIC8qIEtBTkpJICovCisgICAgaW50IHJjID0g LTEsIHggPSAwLCBmbGFnID0gMDsKKyAgICBpbnQgdXRmZXJyb3IgPSAwOworICAgIGludCBlb2xm bGFnID0gMDsKKyAgICB1bnNpZ25lZCBpbnQgeGMsIHRoaXNjaGFyOworICAgIHN0YXRpYyBpbnQg c3dhcHBpbmcgPSAwOworICAgIENIQVIgcnQ7CisgICAgLyogVVNIT1JUIGNoOyAqLworI2lmZGVm IFVOSUNPREUKKyAgICB1bmlvbiBja19zaG9ydCB1YzsKKyNlbmRpZiAvKiBVTklDT0RFICovCisj aWZkZWYgS0FOSkkKKyAgICB1bmlvbiBja19zaG9ydCBzaiwgZXU7CQkvKiBTaGlmdC1KSVMgY2hh cmFjdGVyICovCisjZW5kaWYgLyogS0FOSkkgKi8KKworI2lmZGVmIEtBTkpJCisgICAgc2oueF9z aG9ydCA9IDA7CisjZW5kaWYgLyogS0FOSkkgKi8KKworI2lmZGVmIERFQlVHCisgICAgaWYgKGRl YmxvZyAmJiAhZmZjKSB7CisJZGVidWcoRjEwMSwieGduYnl0ZSBpbml0aWFsIHN3YXAiLCIiLHN3 YXBwaW5nKTsKKyAgICB9CisjZW5kaWYgLyogREVCVUcgKi8KKworICAgIGlmICh4bGFjb3VudC0t ID4gMCkgewkJLyogV2UgYWxyZWFkeSBoYXZlIHNvbWUgKi8KKwl4ID0geGxhYnVmW3hsYXB0cisr XTsKKwlkZWJ1ZyhGMDAxLCJ4Z25ieXRlIGZyb20gYnVmIiwiIix4KTsKKwlyZXR1cm4oeCk7Cisg ICAgfQorICAgIGlmICh4bGF0eXBlICE9IFhMQV9OT05FKSB7CQkvKiBOb3Qgbm90IHRyYW5zbGF0 aW5nLi4uICovCisJaGF2ZXVjID0gMDsKKyNpZmRlZiBVTklDT0RFCisJaWYgKGZjcyA9PSBGQ19V Q1MyKSB7CQkvKiBVQ1MtMjogUmVhZCB0d28gYnl0ZXMgKi8KKwkgICAgaWYgKCFmZmMpCQkJLyog QmVnaW5uaW5nIG9mIGZpbGU/ICovCisJICAgICAgc3dhcHBpbmcgPSAwOwkJLyogUmVzZXQgYnl0 ZS1zd2FwcGluZyBmbGFnICovCisJICAgIHVjLnhfc2hvcnQgPSAwOworCSAgYm9tc2tpcDoKKwkg ICAgeCA9IGZuID8gKCpmbikoKSA6IHptaW5jaGFyKCk7IC8qIEdldCBmaXJzdCBieXRlICovCisJ ICAgIGRlYnVnKEYwMDEsInptaW5jaGFyIHN3YXBwaW5nIiwiIixzd2FwcGluZyk7CisJICAgIGRl YnVnKEYwMDEsInptaW5jaGFyIEMwIiwiIix4KTsKKwkgICAgZmxhZyA9IDE7CQkJLyogUmVtZW1i ZXIgd2UgY2FsbGVkIHptaW5jaGFyKCkgKi8KKwkgICAgaWYgKHggPiAtMSkgewkJLyogRGlkbid0 IGZhaWwgKi8KKwkJZmZjKys7CQkJLyogQ291bnQgYSBmaWxlIGJ5dGUgKi8KKwkJdWMueF9jaGFy W3N3YXBwaW5nXSA9IHggJiAweGZmOworI2lmbmRlZiBOT1hGRVIKKwkJaWYgKGRvY3JjICYmICh3 aGF0ICYgV19TRU5EKSkKKwkJICBkb2ZpbGNyYyh4KTsKKyNlbmRpZiAvKiBOT1hGRVIgKi8KKwkJ eCA9IGZuID8gKCpmbikoKSA6IHptaW5jaGFyKCk7IC8qIEdldCBzZWNvbmQgYnl0ZSAqLworCQlp ZiAoeCA+IC0xKSB7CQkvKiBJZiBkaWRuJ3QgZmFpbCAqLworCQkgICAgZGVidWcoRjAwMSwiem1p bmNoYXIgQzEiLCIiLHgpOworCQkgICAgZmZjKys7CQkvKiBjb3VudCBhbm90aGVyIGZpbGUgYnl0 ZSAqLworCQkgICAgdWMueF9jaGFyWzEtc3dhcHBpbmddID0geCAmIDB4ZmY7CisJCSAgICBoYXZl dWMgPSAxOwkJLyogQW5kIHJlbWVtYmVyIHdlIGhhdmUgVW5pY29kZSAqLworI2lmbmRlZiBOT1hG RVIKKwkJICAgIGlmIChkb2NyYyAmJiAod2hhdCAmIFdfU0VORCkpCisJCSAgICAgIGRvZmlsY3Jj KHgpOworI2VuZGlmIC8qIE5PWEZFUiAqLworCQkgICAgaWYgKGZmYyA9PSAoQ0tfT0ZGX1QpMikg eyAvKiBTZWNvbmQgY2hhciBvZiBmaWxlICovCisJCQlkZWJ1ZyhGMDAxLCJ4Z25ieXRlIDFzdCBV Q1MyIiwiIix1Yy54X3Nob3J0KTsKKwkJCWRlYnVnKEYxMTEsInhnbmJ5dGUgZmlsZW9yZGVyIiwi QSIsZmlsZW9yZGVyKTsKKwkJCWlmIChmaWxlb3JkZXIgPCAwKSAvKiBCeXRlIG9yZGVyIG9mIHRo aXMgZmlsZSAqLworCQkJICBmaWxlb3JkZXIgPSB1Y3NvcmRlcjsJLyogRGVmYXVsdCBpcyB1Y3Nv cmRlciAqLworCQkJaWYgKGZpbGVvcmRlciA+IDEpCisJCQkgIGZpbGVvcmRlciA9IDE7CisJCQlk ZWJ1ZyhGMTExLCJ4Z25ieXRlIGZpbGVvcmRlciIsIkIiLGZpbGVvcmRlcik7CisJCQlpZiAodWMu eF9zaG9ydCA9PSAoVVNIT1JUKTB4ZmVmZikgeworCQkJICAgIHN3YXBwaW5nID0gMDsKKwkJCSAg ICBkZWJ1ZyhGMTAxLAorCQkJCSAgInhnbmJ5dGUgVUNTMiBnb29kYm9tIHN3YXAiLCIiLHN3YXBw aW5nKTsKKwkJCSAgICBmaWxlb3JkZXIgPSBieXRlb3JkZXI7IC8qIE5vdGU6IE5PVCAwICovCisJ CQkgICAgZ290byBib21za2lwOworCQkJfSBlbHNlIGlmICh1Yy54X3Nob3J0ID09IChVU0hPUlQp MHhmZmZlKSB7CisJCQkgICAgc3dhcHBpbmcgPSAxOworCQkJICAgIGRlYnVnKEYxMDEsCisJCQkJ ICAieGduYnl0ZSBVQ1MyIGJhZGJvbSBzd2FwIiwiIixzd2FwcGluZyk7CisJCQkgICAgZmlsZW9y ZGVyID0gKDEgLSBieXRlb3JkZXIpOyAvKiBOb3RlOiBOT1QgMSAqLworCQkJICAgIGdvdG8gYm9t c2tpcDsKKwkJCX0gZWxzZSBpZiAoKGJ5dGVvcmRlciAmJiAhZmlsZW9yZGVyKSB8fCAvKiBObyBC T00gKi8KKwkJCQkgICAoIWJ5dGVvcmRlciAmJiBmaWxlb3JkZXIgPiAwKSkgeworCQkJICAgIC8q IGZpbGVvcmRlciBtaWdodCBoYXZlIGJlZW4gc2V0IGJ5IHNjYW5maWxlKCkgKi8KKwkJCSAgICBD SEFSIGM7CisJCQkgICAgYyA9IHVjLnhfY2hhclswXTsKKwkJCSAgICB1Yy54X2NoYXJbMF0gPSB1 Yy54X2NoYXJbMV07CisJCQkgICAgdWMueF9jaGFyWzFdID0gYzsKKwkJCSAgICBzd2FwcGluZyA9 IDE7CisJCQkgICAgZGVidWcoRjExMSwieGduYnl0ZSBVQ1MyIG5vQk9NIHN3YXAiLCJBIixzd2Fw cGluZyk7CisJCQl9IGVsc2UgeworCQkJICAgIHN3YXBwaW5nID0gMDsKKwkJCSAgICBkZWJ1ZyhG MTExLCJ4Z25ieXRlIFVDUzIgbm9CT00gc3dhcCIsIkIiLHN3YXBwaW5nKTsKKwkJCX0KKwkJCWRl YnVnKEYxMTEsInhnbmJ5dGUgZmlsZW9yZGVyIiwiQyIsZmlsZW9yZGVyKTsKKwkJICAgIH0KKwkJ fSBlbHNlCisJCSAgcmV0dXJuKHgpOworCSAgICB9IGVsc2UKKwkgICAgICByZXR1cm4oeCk7CisJ ICAgIGRlYnVnKEYwMDEsInhnbmJ5dGUgVUNTMiIsIiIsdWMueF9zaG9ydCk7CisKKwl9IGVsc2Ug aWYgKGZjcyA9PSBGQ19VVEY4KSB7CS8qIEZpbGUgaXMgVVRGLTggKi8KKwkgICAgQ0hBUiBjaCA9 IDA7CQkvKiBEYXRhIHR5cGVzIG5lZWRlZCBmb3IgQVBJLi4uICovCisJICAgIFVTSE9SVCAqIHVz ID0gTlVMTDsKKwkgICAgdWMueF9zaG9ydCA9IDA7CisJICAgIGZsYWcgPSAxOwkJCS8qIFdlICh3 aWxsKSBoYXZlIGNhbGxlZCB6bWluY2hhcigpICovCisJICAgIC8qIFJlYWQgc291cmNlIGJ5dGVz ICovCisJICAgIHdoaWxlICgoeCA9IGZuID8gKCpmbikoKSA6IHptaW5jaGFyKCkpID4gLTEpIHsK KwkJZmZjKys7CQkJLyogR290IGEgYnl0ZSAtIGNvdW50IGl0ICovCisjaWZuZGVmIE5PWEZFUgor CQlpZiAoZG9jcmMgJiYgKHdoYXQgJiBXX1NFTkQpKQorCQkgIGRvZmlsY3JjKHgpOworI2VuZGlm IC8qIE5PWEZFUiAqLworCQljaCA9IHg7CisJCXJjID0gdXRmOF90b191Y3MyKGNoLCZ1cyk7IC8q IENvbnZlcnQgdG8gVUNTLTIgKi8KKwkJaWYgKHJjID09IDApIHsJCS8qIERvbmUgKi8KKwkJICAg IHVjLnhfc2hvcnQgPSAqdXM7CisJCSAgICBoYXZldWMgPSAxOworCQkgICAgYnJlYWs7CisJCX0g ZWxzZSBpZiAocmMgPCAwKSB7CS8qIEVycm9yICovCisJCSAgICB1dGZlcnJvciA9IDE7CisJCSAg ICBkZWJ1ZyhGMTAxLCJ4Z25ieXRlIFVURi04IGlucHV0IGVycm9yIiwiIixyYyk7CisJCSAgICBo YXZldWMgPSAxOworCQkgICAgdWMueF9zaG9ydCA9ICp1czsKKwkJICAgIGJyZWFrOworCQl9CisJ ICAgIH0KKwkgICAgaWYgKHggPCAwKQorCSAgICAgIHJldHVybih4KTsKKwkgICAgZGVidWcoRjAw MSwieGduYnl0ZSBVVEY4LT5VQ1MyIiwiIix1Yy54X3Nob3J0KTsKKwl9CisjZW5kaWYgLyogVU5J Q09ERSAqLworCisjaWZkZWYgS0FOSkkKKyNpZmRlZiBVTklDT0RFCisJZWxzZQorI2VuZGlmIC8q IFVOSUNPREUgKi8KKwkgIGlmIChmY3NpbmZvW2Zjc10uYWxwaGFiZXQgPT0gQUxfSkFQQU4pIHsg LyogSmFwYW5lc2Ugc291cmNlIGZpbGUgKi8KKwkgICAgaW50IGM3LCB4LCB5OworCSAgICBpZiAo ZmNzID09IEZDX0pJUzcpIHsJLyogSWYgZmlsZSBjaGFyc2V0IGlzIEpJUy03ICovCisJCWlmICgh ZmZjKQkJLyogSWYgZmlyc3QgYnl0ZSBvZiBmaWxlICovCisJCSAgajdpbml0KCk7CQkvKiBJbml0 aWFsaXplIEpJUy03IHBhcnNlciAqLworCQl4ID0gZ2V0ajcoKTsJCS8qIEdldCBhIEpJUy03IGJ5 dGUgKi8KKwkgICAgfSBlbHNlCQkJLyogT3RoZXJ3aXNlICovCisJICAgICAgeCA9IGZuID8gKCpm bikoKSA6IHptaW5jaGFyKCk7IC8qIEp1c3QgZ2V0IGJ5dGUgKi8KKwkgICAgaWYgKHggPCAwKSB7 CQkvKiBQcm9wb2dhdGUgRU9GIG9yIGVycm9yICovCisJCWRlYnVnKEYxMDAsIlhHTkJZVEUgRU9G IiwiIiwwKTsKKwkJcmV0dXJuKHgpOworCSAgICB9CisJICAgIGRlYnVnKEYwMDEsIlhHTkJZVEUg eCIsIiIseCk7CisJICAgIGZmYysrOwkJCS8qIENvdW50ICovCisjaWZuZGVmIE5PWEZFUgorCSAg ICBpZiAoZG9jcmMgJiYgKHdoYXQgJiBXX1NFTkQpKSBkb2ZpbGNyYyh4KTsgLyogRG8gQ1JDICov CisjZW5kaWYgLyogTk9YRkVSICovCisJICAgIHN3aXRjaCAoZmNzKSB7CQkvKiBXaGF0IG5leHQg ZGVwZW5kcyBvbiBjaGFyc2V0ICovCisJICAgICAgY2FzZSBGQ19TSEpJUzoJCS8qIFNoaWZ0LUpJ UyAqLworCQlpZiAoKHggPD0gMHg4MCkgfHwJLyogQW55IDctYml0IGNoYXIuLi4gKi8KKwkJICAg ICh4ID49IDB4YTAgJiYgeCA8PSAweGRmKSkgeyAvKiBvciBoYWxmd2lkdGggS2F0YWthbmEgKi8K KwkJICAgIHNqLnhfc2hvcnQgPSAoVVNIT1JUKSB4OyAgICAvKiB3ZSByZWFkIG9uZSBieXRlLiAq LworCQl9IGVsc2UgewkJLyogQW55dGhpbmcgZWxzZSAqLworCQkgICAgaWYgKCh5ID0gZm4gPyAo KmZuKSgpIDogem1pbmNoYXIoKSkgPCAwKSAvKiBnZXQgYW5vdGhlciAqLworCQkgICAgICByZXR1 cm4oeSk7CisjaWZuZGVmIE5PWEZFUgorCQkgICAgaWYgKGRvY3JjICYmICh3aGF0ICYgV19TRU5E KSkgZG9maWxjcmMoeSk7CisjZW5kaWYgLyogTk9YRkVSICovCisJCSAgICBmZmMrKzsKKwkJICAg IHNqLnhfY2hhcltieXRlb3JkZXJdID0gKENIQVIpIHg7CisJCSAgICBzai54X2NoYXJbMS1ieXRl b3JkZXJdID0gKENIQVIpIHk7CisJCX0KKwkJYnJlYWs7CisKKwkgICAgICBjYXNlIEZDX0pJUzc6 CQkvKiBKSVMtNyAqLworCSAgICAgIGNhc2UgRkNfSkRFQzoJCS8qIERFQyBLYW5qaSAqLworCSAg ICAgIGNhc2UgRkNfSkVVQzoJCS8qIEVVQy1KUCAqLworCQlpZiAoKHggJiAweDgwKSA9PSAwKSB7 CS8qIENvbnZlcnQgdG8gU2hpZnQtSklTICovCisJCSAgICBzai54X3Nob3J0ID0gKFVTSE9SVCkg eDsgLyogQzAgb3IgRzA6IG9uZSBieXRlICovCisJCSAgICBldS54X3Nob3J0ID0gKFVTSE9SVCkg eDsKKwkJICAgIGhhdmVldSA9IDE7CisJCX0gZWxzZSB7CisJCSAgICBjNyA9IHggJiAweDdmOwor CQkgICAgaWYgKGM3ID4gMHgyMCAmJiBjNyA8IDB4N2YpIHsgLyogS2Fuamk6IHR3byBieXRlcyAq LworCQkJaWYgKCh5ID0gKGZjcyA9PSBGQ19KRVVDKSA/CisJCQkgICAgIChmbiA/ICgqZm4pKCkg OiB6bWluY2hhcigpKSA6CisJCQkgICAgIGdldGo3KCkJLyogXl5eICovCisJCQkgICAgICkgPCAw KQorCQkJICByZXR1cm4oeSk7CisJCQlmZmMrKzsKKyNpZm5kZWYgTk9YRkVSCisJCQlpZiAoZG9j cmMgJiYgKHdoYXQgJiBXX1NFTkQpKSBkb2ZpbGNyYyh5KTsKKyNlbmRpZiAvKiBOT1hGRVIgKi8K KwkJCWV1LnhfY2hhcltieXRlb3JkZXJdID0gKENIQVIpIHg7CisJCQlldS54X2NoYXJbMS1ieXRl b3JkZXJdID0gKENIQVIpIHk7CisJCQlzai54X3Nob3J0ID0gZXVfdG9fc2ooZXUueF9zaG9ydCk7 CisJCQloYXZlZXUgPSAxOworCQkgICAgfSBlbHNlIGlmICh4ID09IDB4OGUpIHsgLyogU1MyIEth dGFrYW5hIHByZWZpeDogMiBieXRlcyAqLworCQkJaWYgKCh5ID0gKGZjcyA9PSBGQ19KSVM3KSA/ CisJCQkgICAgIGdldGo3KCkgOgkvKiBeXl4gKi8KKwkJCSAgICAgKGZuID8gKCpmbikoKSA6IHpt aW5jaGFyKCkpCisJCQkgICAgICkgPCAwKQorCQkJICByZXR1cm4oeSk7CisJCQlmZmMrKzsKKyNp Zm5kZWYgTk9YRkVSCisJCQlpZiAoZG9jcmMgJiYgKHdoYXQgJiBXX1NFTkQpKSBkb2ZpbGNyYyh5 KTsKKyNlbmRpZiAvKiBOT1hGRVIgKi8KKwkJCXNqLnhfc2hvcnQgPSB5IHwgMHg4MDsKKwkJCWRl YnVnKEYwMDEsIlhHTkJZVEUgS0FOQSBTSiIsIiIsc2oueF9zaG9ydCk7CisJCSAgICB9IGVsc2Ug eworCQkJLyogU29tZXRoaW5nIHRoYXQgdHJhbnNsYXRlcyB0byBVK0ZGRkQgKi8KKwkJCXNqLnhf c2hvcnQgPSBVTktTSklTOworCQkgICAgfQorCQl9CisJCWJyZWFrOworCSAgICB9CisJICAgIGhh dmVzaiA9IDE7CQkJLyogSGF2ZSBTaGlmdC1KSVMgKi8KKyNpZmRlZiBVTklDT0RFCisJICAgIHVj Lnhfc2hvcnQgPSBzal90b191bihzai54X3Nob3J0KTsgLyogVHJhbnNsYXRlIHRvIFVDUy0yICov CisJICAgIGhhdmV1YyA9IDE7CQkJLyogSGF2ZSBVbmljb2RlICovCisjZW5kaWYgLyogVU5JQ09E RSAqLworCSAgICBmbGFnID0gMTsJCQkvKiBIYXZlIGEgY2hhciAqLworCX0KKyNlbmRpZiAvKiBL QU5KSSAqLworICAgIH0KKyAgICBpZiAoIWZsYWcpIHsJCQkvKiBJZiBubyBjaGFyYWN0ZXIgd2Fz IHJlYWQgeWV0Li4uICovCisJaWYgKCh4ID0gKGZuID8gKCpmbikoKSA6IHptaW5jaGFyKCkpKSA+ IC0xKQkvKiByZWFkIG9uZSBub3cgKi8KKwkgIGZmYysrOworCWRlYnVnKEYxMDEsInhnbmJ5dGUg em1pbmNoYXIgMSIsIiIseCk7CisJaWYgKHggPCAwKQorCSAgcmV0dXJuKHgpOworCWhhdmV1YyA9 IDA7CisgICAgfQorI2lmZGVmIFVOSUNPREUKKyAgICBpZiAoaGF2ZXVjKSB7CisJdGhpc2NoYXIg PSB1Yy54X3Nob3J0OworCS8qIGxhc3R1Y3MyID0gdWMueF9zaG9ydDsgKi8KKyAgICB9IGVsc2UK KyNlbmRpZiAvKiBVTklDT0RFICovCisgICAgICB0aGlzY2hhciA9IHg7CisgICAgZGVidWcoRjAw MSwieGduYnl0ZSB0aGlzY2hhciIsaGF2ZXVjID8gIltVTklDT0RFXSIgOiAiW290aGVyXSIsdGhp c2NoYXIpOworCisjaWZkZWYgQ0tfQ1RSTFoJCQkJLyogU0VUIEVPRiBDVFJMWiAqLworICAgIGlm IChlb2ZtZXRob2QgPT0gWFlFT0ZfWiAmJiAhYmluYXJ5ICYmIHRoaXNjaGFyID09IDI2KSB7CisJ ZGVidWcoRjEwMCwieGduYnl0ZSBFT0Ygb24gQ3RybC1aIDEiLCIiLDApOworCXJldHVybigtMSk7 CisgICAgfQorI2VuZGlmIC8qIENLX0NUUkxaICovCisKKyNpZmRlZiBVTklDT0RFCisgICAgaWYg KCFoYXZldWMpCQkJLyogSWYgbm90IFVuaWNvZGUuLi4gKi8KKyNlbmRpZiAvKiBVTklDT0RFICov CisgICAgICB4ICY9IGZtYXNrOwkJCS8qIEFwcGx5IFNFVCBGSUxFIEJZVEVTSVpFIG1hc2sgKi8K KworICAgIHN3aXRjaCAoeGxhdHlwZSkgewkJCS8qIFRyYW5zbGF0aW9uIHR5cGUuLi4gKi8KKyNp ZmRlZiBVTklDT0RFCisgICAgICBjYXNlIFhMQV9VTklDT0RFOiB7CQkvKiBVbmljb2RlIGlzIGlu dm9sdmVkICovCisJICB4YyA9IDA7CisvKgorICBIZXJlIHdlIG11c3QgY2hvb3NlIHRoZSBhcHBy b3ByaWF0ZSB0cmFuc2xhdGlvbiBmdW5jdGlvbi4gIElmIHdlIGFyZSBiZWluZworICBjYWxsZWQg YnkgZ2V0cGt0KCkgKGkuZS4gd2hlbiB0cmFuc2ZlcnJpbmcgYSBmaWxlKSwgd2UgYXJlIHRyYW5z bGF0aW5nIGZyb20KKyAgVW5pY29kZSB0byB0aGUgVHJhbnNmZXIgQ2hhcmFjdGVyIFNldCBhbmQg dGhlcmVmb3JlIG11c3QgdXNlIHRoZSBmdW5jdGlvbgorICBwb2ludGVkIHRvIGJ5IHh1dC4gIE90 aGVyd2lzZSwgZS5nLiBkdXJpbmcgVFJBTlNMQVRFLCBDT05ORUNULCBUUkFOU01JVCwgZXRjLAor ICB3ZSBhcmUgdHJhbnNsYXRpbmcgZnJvbSBVbmljb2RlIHRvIHRoZSBGaWxlIENoYXJhY3RlciBT ZXQgYW5kIHNvIG11c3QgY2FsbAorICB0aGUgZnVuY3Rpb24gcG9pbnRlZCB0byBieSB4dWYuICBU aGVyZSBtaWdodCBiZSBhIGNsZWFuZXIgd2F5IHRvIHNldCB0aGlzCisgIHVwIGJ1dCBJIGRvbid0 IHRoaW5rIHNvLiAgRm9yIGV4YW1wbGUsIHNldHhsYXR5cGUoKSBtaWdodCBoYXZlIGJlZW4gY2Fs bGVkCisgIHRvbyBzb29uIGFuZCBzbyBtaWdodCBub3QgaGF2ZSBrbm93biB3aGV0aGVyIGl0IHdh cyBhIGZpbGUgdHJhbnNmZXIgb3IgYQorICBsb2NhbCBvcGVyYXRpb24uCisqLworLyoKKyAgKE1h bnkgeWVhcnMgbGF0ZXIuLi4pIEluIHRlc3RpbmcgdGhpcyBjb2RlIEkgbm90aWNlZCB0aGF0IFRS QU5TTEFURSdpbmcKKyAgUnVzc2lhbiB0ZXh0IGZyb20gVVRGLTggdG8gSVNPIExhdGluL0N5cmls bGljIHByb2R1Y2VkIGFsbCBxdWVzdGlvbiBtYXJrcy4KKyAgUmVyZWFkaW5nIHRoZSBwcmV2aW91 cyBwYXJhZ3JhcGggaXQgc2VlbXMgdG8gbWUgd2UgYXJlIChJIGFtKSBvdmVybG9hZGluZworICB0 aGlzIGZ1bmN0aW9uIHdpdGggcmVzcG9uc2liaWxpdGVzLCBzYXRpc2Z5aW5nIHRoZSBuZWVkcyBv ZiBmaWxlIHRyYW5zZmVyCisgIChsb2NhbCBmaWxlIGNoYXJzZXQgLT4gdHJhbnNmZXIgY2hhcnNl dCBmb3Igb3V0Ym91bmQgcGFja2V0KSBhbmQgbG9jYWwgZmlsZQorICBjb252ZXJzaW9uLiAgSW4g dGhlIGNhc2Ugb2YgVFJBTlNMQVRFLCB3ZSBjYWxsICh4Z25ieXRlKCksIHhwbmJ5dGUoKSkgaW4g YQorICBsb29wLCBleHBlY3RpbmcgdGhlIHhnbmJ5dGUoKSB3aWxsIGZlZWQgVUNTMiB0byB4cG5i eXRlKCkuICBCdXQgdGhlCisgIGZvbGxvd2luZyBjb2RlIGRvZXMgd2hhdCB4cG5ieXRlKCkgaXMg Z29pbmcgdG8gZG8sIHJldHVybmluZyAoaW4gdGhpcyBjYXNlKQorICBhbiBJU08gTGF0aW4vQ3ly aWxsaWMgYnl0ZSBzdHJlYW0sIHdoaWNoIHhwbmJ5dGUoKSBiZWxpZXZlcyB0byBiZSBVQ1MyLCBh bmQKKyAgY29tZXMgdXAgd2l0aCBub25zZW5zZS4gIE5vdCB3YW50aW5nIHRvIHJpcCB0aGUgd2hv bGUgdGhpbmcgYXBhcnQgYW5kIHN0YXJ0CisgIG92ZXIsIEkgbWFkZSB0aGUgZm9sbG93aW5nIGNo YW5nZSB0aGF0IHNob3VsZCBkbyBubyBoYXJtLCB1cG9uIG9ic2VydmluZworICB0aGF0IGlmIHRo ZSBpbnB1dCBjaGFyYWN0ZXIgc2V0IGlzIFVURi04IG9yIFVDUy0yLCB0aGVuIHdoZW4gd2UgZ2V0 IGhlcmUgaXQKKyAgaGFzIGFscmVhZHkgYmVlbiBjb252ZXJ0ZWQgdG8gVUNTMiwgc28gaWYgd2Ug YXJlIG5vdCB0cmFuc2ZlcnJpbmcgYSBmaWxlLCB3ZQorICBkb24ndCBuZWVkIHRvIGRvIGFueXRo aW5nIGVsc2UgZXhjZXB0IHB1dCB0aGUgYnl0ZXMgaW4gdGhlIHJpZ2h0IHBsYWNlIHRvIGJlCisg IHJldHVybmVkLCB3aGljaCBpcyBkb25lIGZ1cnRoZXIgYWxvbmcuCisqLworI2lmZGVmIENPTU1F TlQKKwkgIC8qIFByZXZpb3VzIGNvZGUgKi8KKwkgIHh4ID0gKHdoYXQgJiBXX1NFTkQpID8geHV0 IDogeHVmOworI2Vsc2UKKwkgIC8qIE5ldyBjb2RlIDIwMTEtMDYtMDMgKi8KKwkgIGlmICh3aGF0 ICYgV19TRU5EKSB7CisJICAgICAgeHggPSB4dXQ7CisJICB9IGVsc2UgeworCSAgICAgIGlmIChm Y3MgPT0gRkNfVUNTMiB8fCBmY3MgPT0gRkNfVVRGOCkKKwkJeHggPSBOVUxMOworCSAgICAgIGVs c2UKKwkJeHggPSB4dWY7CisJICB9CisjZW5kaWYJLyogQ09NTUVOVCAqLworCisJICBlb2xmbGFn ID0gMDsKKwkgIGlmIChoYXZldWMpIHsJCQkvKiBGaWxlIGlzIFVuaWNvZGUgKi8KKwkgICAgICAv KiBTZWUgVW5pY29kZSBUUjEzLCAiQ29udmVydGluZyB0byBPdGhlciBDaGFyYWN0ZXIgU2V0cyIg Ki8KKwkgICAgICBpZiAodWMueF9zaG9ydCA9PSAweDIwMjggfHwgLyogTGluZSBTZXBhcmF0b3I/ ICovCisJCSAgdWMueF9zaG9ydCA9PSAweDIwMjkgfHwgLyogUGFyYWdyYXBoIFNlcGFyYXRvciAq LworCQkgIChmZW9sICYmICh1Yy54X3Nob3J0ID09IChVU0hPUlQpZmVvbCkpCisJCSAgKSB7CisJ CSAgZGVidWcoRjAwMSwieGduYnl0ZSB1YyBlb2wiLCIiLHVjLnhfc2hvcnQpOworCQkgIHJjID0g MDsKKwkJICBlb2xmbGFnID0gMTsJCS8qIERvbid0IHRyYW5zbGF0ZSBhbmQgaGFuZGxlIGxhdGVy ICovCisJICAgICAgfQorCSAgICAgIGlmICh4eCAmJiAhZW9sZmxhZykgewkvKiBVQ1MtdG8tVENT IGZ1bmN0aW9uIChVQ1MtPmJ5dGUpICovCisJCSAgcmMgPSAoKnh4KSh1Yy54X3Nob3J0KTsgLyog VGhlc2UgY2FuIGZhaWwuLi4gKi8KKwkJICBkZWJ1ZyhGMTAxLCJ4Z25ieXRlIHh4IHJjIiwiIixy Yyk7CisJCSAgaWYgKHJjIDwgMCkJCS8qIElmIGl0IGNhbid0IGJlIHRyYW5zbGF0ZWQgKi8KKwkJ ICAgIHVjLnhfc2hvcnQgPSBVTks7CS8qIFB1dCB1bmtub3duLWNoYXJhY3RlciBzeW1ib2wgKi8K KwkJICBlbHNlCisJCSAgICB1Yy54X3Nob3J0ID0gKHVuc2lnbmVkKSgodW5zaWduZWQpcmMgJiAw eGZmZmYpOworCQkgIGRlYnVnKEYxMDEsInhnbmJ5dGUgeHggdWMiLCIiLHVjLnhfc2hvcnQpOwor CSAgICAgIH0KKyNpZmRlZiBLQU5KSQorCSAgICAgIGlmICh0Y3MgPT0gRkNfSkVVQykgewkvKiBU cmFuc2xhdGluZyB0byBFVUMtSlAgKi8KKwkJICBVU0hPUlQgc2ogPSAwOworCQkgIHVuaW9uIGNr X3Nob3J0IGV1OworCQkgIGRlYnVnKEYwMDEsInhnbmJ5dGUgVUNTLT5FVUMgVUNTIiwiIix1Yy54 X3Nob3J0KTsKKwkJICBpZiAoIWhhdmVzaikJCS8qIElmIHdlIGRvbid0IGFscmVhZHkgaGF2ZSBp dCAqLworCQkgICAgc2ogPSB1bl90b19zaih1Yy54X3Nob3J0KTsgLyogY29udmVydCB0byBTaGlm dC1KSVMgKi8KKwkJICBldS54X3Nob3J0ID0gc2pfdG9fZXUoc2opOworCQkgIGRlYnVnKEYwMDEs InhnbmJ5dGUgVUNTLT5FVUMgRVVDIiwiIixldS54X3Nob3J0KTsKKwkJICB4bGFwdHIgPSAwOwor CQkgIHhsYWNvdW50ID0gMDsKKwkJICBpZiAoZW9sZmxhZykgeworCQkgICAgICBpZiAod2hhdCAm IFdfU0VORCkgeworCQkJICB4bGFidWZbeGxhY291bnQrK10gPSBMRjsKKwkJCSAgcmV0dXJuKENS KTsKKwkJICAgICAgfSBlbHNlIHsKKwkJCSAgcmV0dXJuKGZlb2wpOworCQkgICAgICB9CisJCSAg fQorCQkgIGlmIChldS54X2NoYXJbYnl0ZW9yZGVyXSkgewkvKiBUd28gYnl0ZXMgKi8KKwkJICAg ICAgcmMgPSBldS54X2NoYXJbYnl0ZW9yZGVyXTsKKwkJICAgICAgeGxhYnVmW3hsYWNvdW50Kytd ID0gZXUueF9jaGFyWzEtYnl0ZW9yZGVyXTsKKwkJICAgICAgZGVidWcoRjAwMSwieGduYnl0ZSBV Q1MtPkVVQyB4bGFidWZbMF0iLCIiLHhsYWJ1ZlswXSk7CisJCSAgfSBlbHNlIHsJCS8qIE9uZSBi eXRlICovCisJCSAgICAgIHJjID0gZXUueF9jaGFyWzEtYnl0ZW9yZGVyXTsKKwkJICB9CisJCSAg ZGVidWcoRjEwMSwieGduYnl0ZSBVQ1MtPkVVQyB4bGFjb3VudCIsIiIseGxhY291bnQpOworCQkg IGRlYnVnKEYwMDEsInhnbmJ5dGUgVUNTLT5FVUMgcmMiLCIiLHJjKTsKKwkJICByZXR1cm4ocmMp OworCSAgICAgIH0gZWxzZQorI2VuZGlmIC8qIEtBTkpJICovCisJICAgICAgaWYgKHRjcyAhPSBG Q19VQ1MyICYmIHRjcyAhPSBGQ19VVEY4KSB7CisJCSAgaWYgKHVjLnhfc2hvcnQgJiAweGZmMDAp IHsJLyogRGVjb2RpbmcgZXJyb3IgKi8KKwkJICAgICAgZGVidWcoRjAwMSwieGduYnl0ZSBkZWNv ZGluZyBlcnJvciIsIiIsdWMueF9zaG9ydCk7CisJCSAgICAgIHJldHVybigtMik7CisJCSAgfSBl bHNlCisJCSAgICByZXR1cm4oKHVuc2lnbmVkIGludCkodWMueF9zaG9ydCAmIDB4ZmYpKTsKKwkg ICAgICB9CisJICAgICAgeGMgPSB1Yy54X3Nob3J0OworCisJICB9IGVsc2UgewkJCS8qIEZpbGUg aXMgbm90IFVuaWNvZGUgKi8KKwkgICAgICBVU0hPUlQgY2g7CisJICAgICAgLyogVHJhbnNsYXRl IGZyb20gc2luZ2xlIEZDUyBieXRlIHRvIFVDUy0yICovCisvKgorICBUaGlzIGlzIGEgYml0IG5v bm9idmlvdXMuLi4gIFRoZSBibGFoX3UoKSAoQmxhaC10by1Vbmljb2RlKSByb3V0aW5lcyBhcmUK KyAgY2FsbGVkIG9ubHkgd2l0aCBwaWVjZXMgb2YgY2hhcmFjdGVyIHNldHMsIGluIHRoZSBJU08g MjAyMiBzZW5zZS4gIFNvLAorICBmb3IgZXhhbXBsZSwgaWYgY2ggaXMgYSBMYXRpbi0xIGNoYXJh Y3Rlciwgd2UgY2FsbCB0aGUgdHJhbnNsYXRpb24KKyAgcm91dGluZSBvbmx5IGlmIGl0IGlzIGlu IHRoZSByaWdodCBoYWxmOyBpZiBpdCdzIGluIHRoZSBsZWZ0IGhhbGYsIGl0CisgIGlzbid0IHRy YW5zbGF0ZWQsIGFuZCBpbiBmYWN0IHdpbGwgZ2l2ZSB0aGUgd3JvbmcgcmVzdWx0IGlmIHNlbnQg dG8gdGhlCisgIHRyYW5zbGF0aW9uIGZ1bmN0aW9uLiAgVGhhdCdzIGJlY2F1c2UgdGhvc2UgZnVu Y3Rpb25zIHdlcmUgZGVzaWduZWQgZm9yCisgIHVzZSB3aXRoIHRoZSBJU08gMjAyMiBHMC4uRzMg c2V0cywgbm90IGZvciBmaWxlIHRyYW5zZmVyLiAgT24gdGhlIG90aGVyCisgIGhhbmQsIGlmIGl0 J3MgYSA3LWJpdCBjaGFyYWN0ZXIgc2V0LCB3ZSAqZG8qIGNhbGwgdGhlIHRyYW5zbGF0aW9uCisg IGZ1bmN0aW9uLiAgKFRvIHB1dCBpdCBhbm90aGVyIHdheSwgdGhlIGxlZnQgaGFsZiBvZiBhbnkg OC1iaXQgY2hhcmFjdGVyCisgIHNldCBpcyBBU0NJSSBhbmQgdGhlcmVmb3JlIGRvZXNuJ3QgbmVl ZCB0byBiZSB0cmFuc2xhdGVkIGJ1dCA3LWJpdCBzZXRzCisgIHN1Y2ggYXMgSVNPIDY0NiBHZXJt YW4gZG8gbmVlZCB0cmFuc2xhdGlvbikuCisqLworCSAgICAgIGNoID0gKHVuc2lnbmVkKSh0aGlz Y2hhciAmIDB4ZmYpOworCSAgICAgIGlmICgoKGZjc2luZm9bZmNzXS5zaXplID4gMTI4KSAmJiAo Y2ggJiAweDgwKSkgfHwKKwkJICBmY3NpbmZvW2Zjc10uc2l6ZSA8PSAxMjgpIHsKKwkJICBpZiAo eGZ1KSB7CQkgLyogRkNTLXRvLVVDUyBmdW5jdGlvbiAqLworCQkgICAgICBjaCA9ICgqeGZ1KShj aCk7CisJCSAgfQorCSAgICAgIH0KKwkgICAgICB4YyA9IGNoOworCSAgfQorCSAgLyogQXQgdGhp cyBwb2ludCB3ZSBoYXZlIGEgVUNTLTIgY2hhcmFjdGVyIGluIG5hdGl2ZSBmb3JtYXQgKi8KKwkg IC8qIChCaWcgRW5kaWFuIG9yIExpdHRsZSBFbmRpYW4pIGluIHhjLCB3aGljaCBpcyBhbiB1bnNp Z25lZCBpbnQuICovCisKKwkgIGRlYnVnKEYwMDEsInhnbmJ5dGUgeGMiLCIiLHhjKTsKKworCSAg aWYgKHRjcyA9PSBGQ19VVEY4KSB7CQkvKiBOb3cgY29udmVydCB0byBVVEYtOCAqLworCSAgICAg IFVTSE9SVCBjOwkJCS8qIE5PVEU6IHRoaXMgaXMgRkNfVVRGOCBvbiBwdXJwb3NlISAqLworCSAg ICAgIENIQVIgKiBidWYgPSBOVUxMOworCSAgICAgIGludCBpLCBrID0gMCwgeDsKKworCSAgICAg IHhsYXB0ciA9IDA7CisJICAgICAgaWYgKHV0ZmVycm9yKSB7CisJCSAgeGxhYnVmW2srK10gPSAw eGZmOworCQkgIHhsYWJ1ZltrKytdID0gMHhiZDsKKwkgICAgICB9CisJICAgICAgaWYgKGVvbGZs YWcpIHsJCS8qIFdlIGRldGVjdGVkIEVPTCBpbiBzb3VyY2UgZmlsZSAqLworCQkgIGlmICh3aGF0 ICYgV19TRU5EKSB7CS8qIENvbnZlcnQgdG8gQ1JMRiAqLworCQkgICAgICB4bGFidWZbaysrXSA9 IExGOworCQkgICAgICB4bGFjb3VudCA9IGs7CisJCSAgICAgIHJldHVybigodW5zaWduZWQgaW50 KUNSKTsKKyNpZmRlZiBDT01NRU5UCisJCSAgfSBlbHNlIHsJCS8qIE9yIHRvIGxvY2FsIGxpbmUt ZW5kICovCisJCSAgICAgIHhsYWNvdW50ID0gazsKKwkJICAgICAgcmV0dXJuKCh1bnNpZ25lZCBp bnQpZmVvbCk7CisjZW5kaWYgLyogQ09NTUVOVCAqLworCQkgIH0KKwkgICAgICB9CisJICAgICAg YyA9IHhjOworCSAgICAgIGlmICgoeCA9IHVjczJfdG9fdXRmOChjLCZidWYpKSA8IDEpIHsKKwkJ ICBkZWJ1ZyhGMTAxLCJ4Z25ieXRlIHVjczJfdG9fdXRmOCBlcnJvciIsIiIsYyk7CisJCSAgcmV0 dXJuKC0yKTsKKwkgICAgICB9CisJICAgICAgZGVidWcoRjEwMSwieGduYnl0ZSBVVEY4IGJ1Zlsw XSIsIiIsYnVmWzBdKTsKKwkgICAgICBmb3IgKGkgPSAxOyBpIDwgeDsgaSsrKSB7CisJCSAgeGxh YnVmW2sraS0xXSA9IGJ1ZltpXTsKKwkJICBkZWJ1ZyhGMTExLCJ4Z25ieXRlIFVURjggeGxhYnVm Iixja2l0b2EoaS0xKSxidWZbaV0pOworCSAgICAgIH0KKwkgICAgICB4bGFwdHIgPSAwOworCSAg ICAgIHhsYWNvdW50ID0geCAtIDE7CisJICAgICAgZGVidWcoRjEwMSwieGduYnl0ZSBVVEY4IHhs YWNvdW50IiwiIix4bGFjb3VudCk7CisJICAgICAgcmV0dXJuKCh1bnNpZ25lZCBpbnQpYnVmWzBd KTsKKwkgIH0gZWxzZSB7CQkJLyogT3Iga2VlcCBpdCBhcyBVQ1MtMiAqLworCSAgICAgIGludCBr ID0gMDsKKwkgICAgICBDSEFSIGM7CisJICAgICAgeGxhcHRyID0gMDsKKwkgICAgICBpZiAodXRm ZXJyb3IpIHsKKwkJICB4bGFidWZbaysrXSA9IDB4ZmY7CisJCSAgeGxhYnVmW2srK10gPSAweGZk OworCQkgIGRlYnVnKEYxMDEsInhnbmJ5dGUgZXJyb3IiLCIiLGspOworCSAgICAgIH0KKwkgICAg ICBpZiAoZW9sZmxhZykgewkJLyogV2UgZGV0ZWN0ZWQgRU9MIGluIHNvdXJjZSBmaWxlICovCisJ CSAgaWYgKHdoYXQgJiBXX1NFTkQpIHsJLyogQ29udmVydCB0byBDUkxGICovCisJCSAgICAgIHhs YWJ1ZltrKytdID0gQ1I7CisJCSAgICAgIHhsYWJ1ZltrKytdID0gTlVMOworCQkgICAgICB4bGFi dWZbaysrXSA9IExGOworCQkgICAgICB4bGFjb3VudCA9IGs7CisJCSAgICAgIGRlYnVnKEYxMDEs InhnbmJ5dGUgc2VuZCBDUkxGIiwiIixrKTsKKwkJICAgICAgcmV0dXJuKDApOwkvKiBSZXR1cm4g TlVMICovCisJCSAgfSBlbHNlIHsJCS8qIE9yIHRvIGxvY2FsIGxpbmUtZW5kICovCisjaWZkZWYg Q09NTUVOVAorCQkgICAgICAvKiBUaGlzIGJ5cGFzc2VzIGJ5dGUgc3dhcHBpbmcgdGhhdCB3ZSBt aWdodCBuZWVkICovCisJCSAgICAgIHhsYWJ1ZltrKytdID0gKENIQVIpZmVvbDsKKwkJICAgICAg eGxhY291bnQgPSBrOworCQkgICAgICBkZWJ1ZyhGMTAxLCJ4Z25ieXRlIHNlbmQgZmVvbCIsIiIs ayk7CisJCSAgICAgIHJldHVybigwKTsJLyogUmV0dXJuIE5VTCAqLworI2Vsc2UKKwkJICAgICAg eGMgPSAoQ0hBUilmZW9sOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKwkJICB9CisJICAgICAgfQor CSAgICAgIC8qIEluIHdoaWNoIG9yZGVyIHNob3VsZCB3ZSByZXR1cm4gdGhlIGJ5dGVzPyAqLwor I2lmZGVmIENPTU1FTlQKKwkgICAgICBpZiAoICh3aGF0ICYgV19TRU5EKSB8fCAod2hhdCAmIFdf RlRQKSB8fCAoZmlsZW9yZGVyID09IDApKSB7CisjZW5kaWYgLyogQ09NTUVOVCAqLworCQkgIC8q IEFMV0FZUyBSRVRVUk4gSU4gQklHIEVORElBTiBPUkRFUi4uLiA3IFNlcCAyMDAyICAgKi8KKwkJ ICAvKiB4Z25ieXRlKCkgaXMgYWxtb3N0IGFsd2F5cyB1c2VkIHRvIGZlZWQgeHBuYnl0ZSgpICov CisJCSAgLyogd2hpY2ggcmVxdWlyZXMgYnl0ZXMgaW4gQkUgb3JkZXIuIEluIGNhc2VzIHdoZXJl ICAqLworCQkgIC8qIHhnbmJ5dGUgaXMgdXNlZCBpbiBpc29sYXRpb24sIHRoZSBjYWxsZXIgY2Fu IHN3YXAgKi8KKwkJICAvKiBieXRlcyBpdHNlbGYgYWZ0ZXJ3YXJkcy4gKi8KKwkJICB4bGFidWZb aysrXSA9ICh4YyA+PiA4KSAmIDB4ZmY7IC8qIEJpZyBFbmRpYW4gKi8KKwkJICB4bGFidWZbaysr XSA9IHhjICYgMHhmZjsKKwkJICBkZWJ1ZyhGMDAxLCJ4Z25ieXRlLT5VQ1MyQkUiLAorCQkJY2tp dG94KChpbnQpeGxhYnVmWzBdKSx4bGFidWZbMV0pOworI2lmZGVmIENPTU1FTlQKKwkgICAgICB9 IGVsc2UgewkJCS8qIExpdHRsZSBFbmRpYW4gKi8KKwkJICB4bGFidWZbaysrXSA9IHhjICYgMHhm ZjsKKwkJICB4bGFidWZbaysrXSA9ICh4YyA+PiA4KSAmIDB4ZmY7CisJCSAgZGVidWcoRjAwMSwi eGduYnl0ZS0+VUNTMkxFIiwKKwkJCWNraXRveCgoaW50KXhsYWJ1ZlswXSkseGxhYnVmWzFdKTsK KwkgICAgICB9CisjZW5kaWYgLyogQ09NTUVOVCAqLworCSAgICAgIGMgPSB4bGFidWZbMF07CisJ ICAgICAgeGxhcHRyID0gMTsKKwkgICAgICB4bGFjb3VudCA9IGstMTsKKwkgICAgICBkZWJ1ZyhG MTAxLCJ4Z25ieXRlIGMiLCIiLGMpOworCSAgICAgIGRlYnVnKEYxMDEsInhnbmJ5dGUgeGxhcHRy IiwiIix4bGFwdHIpOworCSAgICAgIGRlYnVnKEYwMTEsInhnbmJ5dGUgeGxhYnVmIix4bGFidWYs eGxhY291bnQpOworCSAgICAgIHJldHVybigodW5zaWduZWQgaW50KWMpOworCSAgfQorICAgICAg fQorI2VuZGlmIC8qIFVOSUNPREUgKi8KKyAgICAgIGNhc2UgWExBX05PTkU6CisJcmV0dXJuKChm biA/ICgqZm4pKCkgOiB6bWluY2hhcigpKSk7CisgICAgICBjYXNlIFhMQV9CWVRFOgkJCS8qIEJ5 dGUtZm9yLUJ5dGUgdHJhbnNsYXRpb24gKi8KKwlydCA9IHg7CisJaWYgKHN4KQorCSAgcnQgPSAo KnN4KShydCk7CisjaWZkZWYgVU5JQ09ERQorCWlmICh1dGZlcnJvcikgeworCSAgICB4bGFwdHIg PSAwOworCSAgICB4bGFjb3VudCA9IDE7CisJICAgIHhsYWJ1ZlswXSA9IHJ0OworCSAgICByZXR1 cm4oVU5LKTsKKwl9IGVsc2UKKyNlbmRpZiAvKiBVTklDT0RFICovCisJICByZXR1cm4oKHVuc2ln bmVkIGludClydCk7CisKKyNpZmRlZiBLQU5KSQorICAgICAgY2FzZSBYTEFfSkFQQU46CQkJLyog Q29tZSBoZXJlIHdpdGggU2hpZnQtSklTICovCisJaWYgKHRjcyA9PSBGQ19KRVVDKSB7CQkvKiBJ dCBiZXR0ZXIgYmUuLi4gKi8KKwkgICAgeGxhcHRyID0gMDsKKwkgICAgeGxhY291bnQgPSAwOwor CSAgICBpZiAoIWhhdmVzaikgeworCQlwcmludGYoIkJBRCBCQURcbiIpOworCQlyZXR1cm4oLTIp OworCSAgICB9CisJICAgIGlmICghaGF2ZWV1KQkJLyogV2UgbWlnaHQgYWxyZWFkeSBoYXZlIEVV QyB0b28gKi8KKwkgICAgICBldS54X3Nob3J0ID0gc2pfdG9fZXUoc2oueF9zaG9ydCk7CisJICAg IGlmIChldS54X2NoYXJbYnl0ZW9yZGVyXSkgeworCQl4bGFidWZbeGxhY291bnQrK10gPSBldS54 X2NoYXJbMS1ieXRlb3JkZXJdOworCQlyZXR1cm4oZXUueF9jaGFyW2J5dGVvcmRlcl0pOworCSAg ICB9IGVsc2UgeworCQlyZXR1cm4oZXUueF9jaGFyWzEtYnl0ZW9yZGVyXSk7CisJICAgIH0KKwkg ICAgYnJlYWs7CisJfQorI2VuZGlmIC8qIEtBTkpJICovCisKKyAgICAgIGRlZmF1bHQ6CisJZGVi dWcoRjEwMSwieGduYnl0ZSBiYWQgeGxhdHlwZSIsIiIseGxhdHlwZSk7CisJcmV0dXJuKC0yKTsK KyAgICB9CisjaWZkZWYgQ09NTUVOVAorLyogICAgCisgIElmIHRoZXJlIGlzIGEgcmV0dXJuKCkg c3RhdGVtZW50IGhlcmUsIHNvbWUgY29tcGlsZXJzIGNvbXBsYWluCisgIGFib3V0ICJzdGF0ZW1l bnQgbm90IHJlYWNoZWQiLiAgSWYgdGhlcmUgaXMgbm8gcmV0dXJuKCkgc3RhdGVtZW50LAorICBv dGhlciBjb21waWxlcnMgY29tcGxhaW4gdGhhdCAiTm9uLXZvaWQgZnVuY3Rpb24gc2hvdWxkIHJl dHVybiBhIHZhbHVlIi4KKyAgVGhlcmUgaXMgbm8gcGF0aCB0aHJvdWdoIHRoaXMgZnVuY3Rpb24g dGhhdCBmYWxscyB0aHJvdWdoIHRvIGhlcmUuCisqLworICAgIGRlYnVnKEYxMDAsInhnbmJ5dGUg c3dpdGNoIGZhaWx1cmUiLCIiLDApOworICAgIHJldHVybigtMik7CisjZW5kaWYgLyogQ09NTUVO VCAqLworfQorI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKworI2lmbmRlZiBOT1hGRVIKKworLyogIEcg RSBUIFAgSyBUICAtLSAgRmlsbCBhIHBhY2tldCBkYXRhIGZpZWxkIGZyb20gdGhlIGluZGljYXRl ZCBzb3VyY2UuICAqLworCisvKgorICBQYXJhbWV0ZXJzOgorICAgIGJ1Zm1heDogTWF4aW11bSBs ZW5ndGggb2YgZW50aXJlIHBhY2tldC4KKyAgICB4bGF0ZTogIEZsYWcgZm9yIHdoZXRoZXIgdG8g dHJhbnNsYXRlIGNoYXJzZXRzIHdoZW4gaW4gdGV4dCBtb2RlLgorICBSZXR1cm5zOiAgTnVtYmVy IG9mIGNoYXJhY3RlcnMgd3JpdHRlbiB0byBwYWNrZXQgZGF0YSBmaWVsZCwgMCBvciBtb3JlLAor ICAgICAgICAgICAgT3IgLTEgb24gZmFpbHVyZSAoaW50ZXJuYWwgZXJyb3IpLAorICAgICAgICAg ICAgb3IgLTMgb24gdGltZW91dCAoZS5nLiB3aGVuIHJlYWRpbmcgZnJvbSBhIHBpcGUpLgorCisg IFRoaXMgaXMgdGhlIGZ1bGwgdmVyc2lvbiBhbGxvd2luZyBmb3IgcGFyaXR5IGFuZCB0ZXh0LW1v ZGUgY29udmVyc2lvbnM7CisgIGkuZS4gaXQgd29ya3MgaW4gYWxsIGNhc2VzLiAgIEFsc28gc2Vl IGJnZXRwa3QoKSwgYSBzcGVjaWFsIGxlYW4vbWVhbi9mYXN0CisgIHBhY2tldCBlbmNvZGVyIHRo YXQgd29ya3Mgb25seSBmb3IgYmluYXJ5LW1vZGUgbm8tcGFyaXR5IHRyYW5zZmVycy4KKyovCitz dGF0aWMgaW50IHVmbGFnID0gMDsKKworaW50CitnZXRwa3QoYnVmbWF4LHhsYXRlKSBpbnQgYnVm bWF4LCB4bGF0ZTsgeyAvKiBGaWxsIG9uZSBwYWNrZXQgYnVmZmVyICovCisgICAgcmVnaXN0ZXIg Q0hBUiBydCA9IHQsIHJuZXh0ID0gTlVMOwkgIC8qIFJlZ2lzdGVyIHNoYWRvd3Mgb2YgdGhlIGds b2JhbHMgKi8KKyAgICByZWdpc3RlciBDSEFSICpkcCwgKm9kcCwgKm9kcDIsICpwMSwgKnAyOyAv KiBwb2ludGVycy4uLiAqLworICAgIHJlZ2lzdGVyIGludCB4OwkJCS8qIExvb3AgaW5kZXguICov CisgICAgcmVnaXN0ZXIgaW50IGE3OwkJCS8qIExvdyA3IGJpdHMgb2YgY2hhcmFjdGVyICovCisK KyAgICBDSEFSIHh4bHMsIHh4ZGwsIHh4cmMsIHh4c3MsIHh4Y3E7CS8qIFBpZWNlcyBvZiBwcmVm aXhlZCBzZXF1ZW5jZSAqLworCisgICAgaWYgKGJpbmFyeSkgeGxhdGUgPSAwOwkJLyogV2UgZG9u J3QgdHJhbnNsYXRlIGlmIGJpbmFyeSAqLworCisgICAgaWYgKCFkYXRhKSB7CisJZGVidWcoRjEw MCwiU0VSSU9VUyBFUlJPUjogZ2V0cGt0IGRhdGEgPT0gTlVMTCIsIiIsMCk7CisJcmV0dXJuKC0x KTsKKyAgICB9CisgICAgZHAgPSBkYXRhOwkJCQkvKiBQb2ludCB0byBwYWNrZXQgZGF0YSBidWZm ZXIgKi8KKyAgICBzaXplID0gMDsJCQkJLyogQW5kIGluaXRpYWxpemUgaXRzIHNpemUgKi8KKy8q CisgIEFzc3VtZSBidWZtYXggaXMgdGhlIHJlY2VpdmVyJ3MgdG90YWwgcmVjZWl2ZS1wYWNrZXQg YnVmZmVyIGxlbmd0aC4KKyAgT3VyIHdob2xlIHBhY2tldCBoYXMgdG8gZml0IGludG8gaXQsIHNv IHdlIGFkanVzdCB0aGUgZGF0YSBmaWVsZCBsZW5ndGguCisgIFdlIGFsc28gZGVjaWRlIG9wdGlt YWxseSB3aGV0aGVyIGl0IGlzIGJldHRlciB0byB1c2UgYSBzaG9ydC1mb3JtYXQgb3IKKyAgbG9u Zy1mb3JtYXQgcGFja2V0IHdoZW4gd2UncmUgbmVhciB0aGUgYm9yZGVybGluZS4KKyovCisgICAg YnVmbWF4ID0gbWF4ZGF0YSgpOwkJCS8qIEdldCBtYXhpbXVtIGRhdGEgbGVuZ3RoICovCisKKyAg ICBpZiAoZmlyc3QgPT0gMSkgewkJCS8qIElmIGZpcnN0IGNoYXJhY3RlciBvZiB0aGlzIGZpbGUu LiAqLworI2lmZGVmIFVOSUNPREUKKwkvKiBTcGVjaWFsIGVuZC1vZi1saW5lIGhhbmRsaW5nIGZv ciBVbmljb2RlICovCisJaWYgKHRjaGFyc2V0ID09IFRDX1VDUzIgfHwgdGNoYXJzZXQgPT0gVENf VVRGOCkKKwkgIHVmbGFnID0gMTsKKyNlbmRpZiAvKiBVTklDT0RFICovCisJZGVidWcoRjEwMSwi Z2V0cGt0IGZpcnN0IHVmbGFnIiwiIix1ZmxhZyk7CisJZGVidWcoRjEwMSwiZ2V0cGt0IGZpcnN0 IHJ0IiwiIixydCk7CisJaWYgKCFtZW1zdHIgJiYgIWZ1bmNzdHIpCS8qIGFuZCByZWFsIGZpbGUu Li4gKi8KKwkgIGZmYyA9IChDS19PRkZfVCkwOwkJLyogcmVzZXQgZmlsZSBjaGFyYWN0ZXIgY291 bnRlciAqLworI2lmZGVmIENPTU1FTlQKKwkvKiBNb3ZlZCB0byBiZWxvdy4uLiAqLworCWZpcnN0 ID0gMDsJCQkvKiBOZXh0IGNoYXJhY3RlciB3b24ndCBiZSBmaXJzdCAqLworI2VuZGlmIC8qIENP TU1FTlQgKi8KKwkqbGVmdG92ZXIgPSAnXDAnOwkJLyogRGlzY2FyZCBhbnkgaW50ZXJydXB0ZWQg bGVmdG92ZXJzICovCisJbmxlZnQgPSAwOworI2lmbmRlZiBOT0NTRVRTCisJc2V0eGxhdHlwZSh0 Y2hhcnNldCxmY2hhcnNldCk7CS8qIFNldCB1cCBjaGFyc2V0IHRyYW5zbGF0aW9ucyAqLworI2Vu ZGlmIC8qIE5PQ1NFVFMgKi8KKworCS8qIEdldCBmaXJzdCBjaGFyYWN0ZXIgb2YgZmlsZSBpbnRv IHJ0LCB3YXRjaGluZyBvdXQgZm9yIG51bGwgZmlsZSAqLworCisjaWZkZWYgQ0FMSUJSQVRFCisJ aWYgKGNhbGlicmF0ZSAmJiAhbWVtc3RyKSB7CisjaWZkZWYgTk9SQU5ET00KKwkgICAgeCA9IHJ0 ID0gNTM7CisjZWxzZQorCSAgICB4ID0gcnQgPSBjYWxfYVtyYW5kKCkgJiAweGZmXTsKKyNlbmRp ZiAvKiBOT1JBTkRPTSAqLworCSAgICBmaXJzdCA9IDA7CisJICAgIGZmYysrOworCX0gZWxzZQor I2VuZGlmIC8qIENBTElCUkFURSAqLworI2lmZGVmIEtBTkpJCisJaWYgKHhsYXRlICYmIHRjaGFy c2V0ID09IFRDX0pFVUMpIHsgLyogS2FuamkgdGV4dCAqLworCSAgICB4ID0gemthbmpmKCk7CisJ ICAgIGlmICgoeCA9IHprYW5qaShtZW1zdHIgPyBrZ2V0bSA6IGtnZXRmKSkgPCAwKSB7CisJICAg ICAgICBmaXJzdCA9IC0xOworCSAgICAgICAgc2l6ZSA9IDA7CisJICAgICAgICBpZiAoeCA9PSAt MikgeworCSAgICAgICAgICAgIGRlYnVnKEYxMDAsImdldHBrdCB6a2Fuamk6IGlucHV0IGVycm9y IiwiIiwwKTsKKwkgICAgICAgICAgICBjeHNlZW4gPSAxOworCSAgICAgICAgfSBlbHNlIGRlYnVn KEYxMDAsImdldHBrdCB6a2Fuamk6IGVtcHR5IHN0cmluZy9maWxlIiwiIiwwKTsKKwkgICAgICAg IHJldHVybigwKTsKKwkgICAgfQorCSAgICBydCA9IHg7CisJICAgIGZpcnN0ID0gMDsKKwkgICAg aWYgKCFtZW1zdHIpIHsKKwkJZmZjKys7CisJCWlmIChkb2NyYyAmJiAod2hhdCAmIFdfU0VORCkp IC8qIEFjY3VtdWxhdGUgZmlsZSBjcmMgKi8KKwkJICBkb2ZpbGNyYygoaW50KXJ0KTsKKwkgICAg fQorCX0gZWxzZSB7CQkJLyogTm90IEthbmppIHRleHQgKi8KKyNlbmRpZiAvKiBLQU5KSSAqLwor CSAgICBpZiAobWVtc3RyKSB7CQkvKiBSZWFkaW5nIGRhdGEgZnJvbSBtZW1vcnkgc3RyaW5nICov CisJCS8qIFRoaXMgd2lsbCBub3QgYmUgVW5pY29kZSAqLworCQlpZiAoKHJ0ID0gKm1lbXB0cisr KSA9PSAnXDAnKSB7IC8qIGVuZCBvZiBzdHJpbmcgPT0+IEVPRiAqLworCQkgICAgZmlyc3QgPSAt MTsKKwkJICAgIHNpemUgPSAwOworCQkgICAgZGVidWcoRjEwMCwiZ2V0cGt0OiBlbXB0eSBzdHJp bmciLCIiLDApOworCQkgICAgcmV0dXJuKDApOworCQl9CisJCWZpcnN0ID0gMDsKKwkgICAgfSBl bHNlIGlmIChmdW5jc3RyKSB7CS8qIFJlYWRpbmcgZGF0YSBmcm9tIGEgZnVuY3Rpb24gKi8KKwkJ LyogVGhpcyB3aWxsIG5vdCBiZSBVbmljb2RlICovCisJCWlmICgoeCA9ICgqZnVuY3B0cikoKSkg PCAwKSB7IC8qIEVuZCBvZiBpbnB1dCAgKi8KKwkJICAgIGZpcnN0ID0gLTE7CisJCSAgICBzaXpl ID0gMDsJCS8qIEVtcHR5ICovCisJCSAgICByZXR1cm4oMCk7CisJCX0KKwkJZmZjKys7CQkJLyog Q291bnQgYSBmaWxlIGNoYXJhY3RlciAqLworCQlydCA9IChDSEFSKSB4OwkJLyogQ29udmVydCBp bnQgdG8gY2hhciAqLworCQlmaXJzdCA9IDA7CisJCWRlYnVnKEYwMDAsImdldHBrdCBmdW5jc3Ry IiwiIixydCk7CisKKwkgICAgfSBlbHNlIHsJCQkvKiBSZWFkaW5nIGRhdGEgZnJvbSBhIGZpbGUg Ki8KKyNpZm5kZWYgTk9DU0VUUworCQlpZiAoeGxhdGUgJiYgIWJpbmFyeSkgewkvKiBDb3VsZCBi ZSBVbmljb2RlICovCisJCSAgICBpZiAoeGxhdHlwZSA9PSBYTEFfVU5JQ09ERSkgeworCQkJLyog R2V0IG5leHQgdHJhbnNsYXRlZCBieXRlICovCisJCQl4ID0geGduYnl0ZShjc2VxdGFiW3RjaGFy c2V0XSxmY2hhcnNldCxOVUxMKTsKKwkJCWRlYnVnKEYxMDEsImdldHBrdCB4Z25ieXRlIiwiIix4 KTsKKwkJICAgIH0gZWxzZSB7CQkvKiBOb3QgVW5pY29kZSAqLworCQkJeCA9IHptaW5jaGFyKCk7 CS8qIEdldCBuZXh0IGJ5dGUsIHRyYW5zbGF0ZSBiZWxvdyAqLworCQkJZGVidWcoRjEwMSwiZ2V0 cGt0IHptaW5jaGFyIEEiLCIiLHgpOworCQkgICAgfQorCQl9IGVsc2UgewkJLyogSnVzdCBnZXQg bmV4dCBieXRlICovCisjZW5kaWYgLyogTk9DU0VUUyAqLworCQkgICAgeCA9IHptaW5jaGFyKCk7 CisJCSAgICBkZWJ1ZyhGMTAxLCJnZXRwa3Qgem1pbmNoYXIgQiIsIiIseCk7CisjaWZuZGVmIE5P Q1NFVFMKKwkJfQorI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKwkJaWYgKHggPCAwKSB7CQkvKiBFbmQg b2YgZmlsZSBvciBpbnB1dCBlcnJvciAqLworCQkgICAgaWYgKHggPT0gLTMpIHsJLyogVGltZW91 dC4gKi8KKwkJCXNpemUgPSAoZHAtZGF0YSk7CisJCQlkZWJ1ZyhGMTAxLCJnZXRwa3QgdGltZW91 dCBzaXplIiwiIixzaXplKTsKKwkJCXJldHVybigoc2l6ZSA9PSAwKSA/IHggOiBzaXplKTsKKwkJ ICAgIH0KKwkJICAgIGZpcnN0ID0gLTE7CisJCSAgICBzaXplID0gMDsKKwkJICAgIGlmICh4ID09 IC0yKSB7CS8qIEVycm9yICovCisJCQlkZWJ1ZyhGMTAwLCJnZXRwa3Q6IGlucHV0IGVycm9yIiwi IiwwKTsKKwkJCWN4c2VlbiA9IDE7CS8qIEludGVycnVwdCB0aGUgZmlsZSB0cmFuc2ZlciAqLwor CQkgICAgfSBlbHNlIHsKKwkJCWRlYnVnKEYxMDAsImdldHBrdCBlbXB0eSBmaWxlIiwiIiwwKTsK KwkJICAgIH0KKwkJICAgIHJldHVybigwKTsKKwkJfQorCQlmaXJzdCA9IDA7CQkvKiBOZXh0IGNo YXJhY3RlciB3b24ndCBiZSBmaXJzdCAqLworCQlydCA9IChDSEFSKSB4OwkJLyogQ29udmVydCBp bnQgdG8gY2hhciAqLworI2lmbmRlZiBOT0NTRVRTCisJCWlmICh4bGF0eXBlICE9IFhMQV9VTklD T0RFIHx8IGJpbmFyeSkgeworCQkgICAgZmZjKys7CisJCSAgICBpZiAoc3gpCisJCSAgICAgIHJ0 ID0gKCpzeCkocnQpOworCQkgICAgaWYgKGRvY3JjICYmICh3aGF0ICYgV19TRU5EKSkKKwkJICAg ICAgZG9maWxjcmMoeCk7CisJCX0KKyNlbmRpZiAvKiBOT0NTRVRTICovCisjaWZkZWYgREVCVUcK KwkJaWYgKGRlYmxvZykKKwkJICBkZWJ1ZyhGMTAxLCJnZXRwa3QgMXN0IGNoYXIiLCIiLHJ0KTsK KyNlbmRpZiAvKiBERUJVRyAqLworCQlpZiAoLyogIWhhdmV1YyAmJiAqLyBkb2NyYyAmJiAod2hh dCAmIFdfU0VORCkpIC8qIEZpbGUgQ1JDICovCisJCSAgZG9maWxjcmMoeCk7CisJICAgIH0KKyNp ZmRlZiBLQU5KSQorCX0KKyNlbmRpZiAvKiBLQU5KSSAqLworCS8qIFBXUDogaGFuZGxpbmcgb2Yg ZmVvbCBpcyBkb25lIGxhdGVyIChpbiB0aGUgd2hpbGUgbG9vcCkuLi4gKi8KKworICAgIH0gZWxz ZSBpZiAoKGZpcnN0ID09IC0xKSAmJiAobmxlZnQgPT0gMCkpIHsgLyogRU9GIGZyb20gbGFzdCB0 aW1lICovCisjaWZkZWYgREVCVUcKKwlpZiAoZGVibG9nKSB7CisJICAgIGRlYnVnKEYxMDEsImdl dHBrdCBlb2YgY3JjMTYiLCIiLGNyYzE2KTsKKwkgICAgZGVidWcoRjEwMSwiZ2V0cGt0IGVvZiBm ZmMiLCIiLGZmYyk7CisJfQorI2VuZGlmIC8qIERFQlVHICovCisgICAgICAgIHJldHVybihzaXpl ID0gMCk7CisgICAgfQorLyoKKyAgSGVyZSB3ZSBoYW5kbGUgY2hhcmFjdGVycyB0aGF0IHdlcmUg ZW5jb2RlZCBmb3IgdGhlIGxhc3QgcGFja2V0IGJ1dAorICBkaWQgbm90IGZpdCwgYW5kIHNvIHdl cmUgc2F2ZWQgaW4gdGhlICJsZWZ0b3ZlciIgYXJyYXkuCisqLworICAgIGRlYnVnKEYxMDEsImdl dHBrdCBubGVmdCIsIiIsbmxlZnQpOworICAgIGlmIChubGVmdCkgeworCWZvciAocDEgPSBsZWZ0 b3ZlcjsgbmxlZnQgPiAwOyBubGVmdC0tKSAvKiBDb3B5IGxlZnRvdmVycyAqLworCSAgKmRwKysg PSAqcDErKzsKKwkqbGVmdG92ZXIgPSAnXDAnOwkJCS8qIERlbGV0ZSBsZWZ0b3ZlcnMgKi8KKwlu bGVmdCA9IDA7CisgICAgfQorICAgIGlmIChmaXJzdCA9PSAtMSkJCQkvKiBIYW5kbGUgRU9GICov CisgICAgICByZXR1cm4oc2l6ZSA9IChkcCAtIGRhdGEpKTsKKworLyogTm93IGZpbGwgdXAgdGhl IHJlc3Qgb2YgdGhlIHBhY2tldC4gKi8KKworICAgIHJwdCA9IDA7CQkJCS8qIEluaXRpYWxpemUg Y2hhcmFjdGVyIHJlcGVhdCBjb3VudCAqLworCisgICAgd2hpbGUgKGZpcnN0ID4gLTEpIHsJCS8q IFVudGlsIEVPRi4uLiAqLworI2lmZGVmIENBTElCUkFURQorCWlmIChjYWxpYnJhdGUgJiYgIW1l bXN0cikgewkvKiBXZSBnZW5lcmF0ZSBvdXIgb3duICJmaWxlIiAqLworCSAgICBpZiAoZmZjID49 IGNhbGlicmF0ZSkgewkvKiBFT0YgKi8KKwkJZmlyc3QgPSAtMTsKKwkJZmZjLS07CisJICAgIH0g ZWxzZSB7CQkJLyogR2VuZXJhdGUgbmV4dCBjaGFyYWN0ZXIgKi8KKwkJaWYgKGNhbF9qID4gQ0FM X00gKiBmZmMpCisJCSAgY2FsX2ogPSBjYWxfYVtmZmMgJiAweGZmXTsKKwkJeCA9ICh1bnNpZ25l ZCljYWxfYVsoY2FsX2ogJiAweGZmKV07CisJCWlmICh4ID09IHJ0KSB4IF49IDI7CisJICAgIH0K KwkgICAgY2FsX2ogKz0gKHVuc2lnbmVkIGludCkoZmZjICsgQ0FMX08pOworCSAgICBmZmMrKzsK Kwl9IGVsc2UKKyNlbmRpZiAvKiBDQUxJQlJBVEUgKi8KKyNpZmRlZiBLQU5KSQorCSAgaWYgKHhs YXRlICYmIHRjaGFyc2V0ID09IFRDX0pFVUMpIHsKKwkgICAgICBpZiAoKHggPSB6a2FuamkobWVt c3RyID8ga2dldG0gOiBrZ2V0ZikpIDwgMCkgeworCQkgIGZpcnN0ID0gLTE7CisJCSAgaWYgKHgg PT0gLTIpIGN4c2VlbiA9IDE7CisJICAgICAgfSBlbHNlIGlmICghbWVtc3RyKSBmZmMrKzsKKwkg ICAgICBybmV4dCA9IChDSEFSKSAoeCAmIGZtYXNrKTsKKwkgIH0gZWxzZSB7CisjZW5kaWYgLyog S0FOSkkgKi8KKwkgICAgaWYgKG1lbXN0cikgewkJLyogR2V0IG5leHQgY2hhciBmcm9tIG1lbW9y eSBzdHJpbmcgKi8KKwkJaWYgKCh4ID0gKm1lbXB0cisrKSA9PSAnXDAnKSAvKiBFbmQgb2Ygc3Ry aW5nIG1lYW5zIEVPRiAqLworCQkgIGZpcnN0ID0gLTE7CQkvKiBGbGFnIEVPRiBmb3IgbmV4dCB0 aW1lLiAqLworCQlybmV4dCA9IChDSEFSKSAoeCAmIGZtYXNrKTsgLyogQXBwbHkgZmlsZSBtYXNr ICovCisJICAgIH0gZWxzZSBpZiAoZnVuY3N0cikgewkvKiBHZXQgbmV4dCBjaGFyIGZyb20gZnVu Y3Rpb24gKi8KKwkJaWYgKCh4ID0gKCpmdW5jcHRyKSgpKSA8IDApIC8qIEVuZCBvZiBzdHJpbmcg bWVhbnMgRU9GICovCisJCSAgZmlyc3QgPSAtMTsJCS8qIEZsYWcgRU9GIGZvciBuZXh0IHRpbWUu ICovCisJCXJuZXh0ID0gKENIQVIpICh4ICYgZm1hc2spOyAvKiBBcHBseSBmaWxlIG1hc2sgKi8K KwkgICAgfSBlbHNlIHsJCQkvKiBGcm9tIGZpbGUuLi4gKi8KKyNpZm5kZWYgTk9DU0VUUworCQlp ZiAoeGxhdGUgJiYgIWJpbmFyeSkgewkvKiBDb3VsZCBiZSBVbmljb2RlICovCisJCSAgICBpZiAo eGxhdHlwZSA9PSBYTEFfVU5JQ09ERSkgeworCQkJLyogR2V0IG5leHQgdHJhbnNsYXRlZCBieXRl ICovCisJCQl4ID0geGduYnl0ZShjc2VxdGFiW3RjaGFyc2V0XSxmY2hhcnNldCxOVUxMKTsKKwkJ ICAgIH0gZWxzZSB7CQkvKiBOb3QgVW5pY29kZSAqLworCQkJeCA9IHptaW5jaGFyKCk7IC8qIEdl dCBuZXh0IGJ5dGUsIHRyYW5zbGF0ZSBiZWxvdyAqLworCQkJLyogZGVidWcoRjEwMSwieGduYnl0 ZSBCIHptaW5jaGFyIiwiIix4KTsgKi8KKwkJICAgIH0KKwkJfSBlbHNlIHsJCS8qIEp1c3QgZ2V0 IG5leHQgYnl0ZSAqLworI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKwkJICAgIHggPSB6bWluY2hhcigp OworCQkgICAgLyogZGVidWcoRjEwMSwieGduYnl0ZSBDIHptaW5jaGFyIiwiIix4KTsgKi8KKyNp Zm5kZWYgTk9DU0VUUworCQl9CisjZW5kaWYgLyogTk9DU0VUUyAqLworCQlpZiAoeCA8IDApIHsJ CS8qIENoZWNrIGZvciBFT0YgKi8KKwkJICAgIGlmICh4ID09IC0zKSB7CS8qIFRpbWVvdXQgcmVh ZGluZyBmcm9tIHBpcGUgKi8KKwkJCXQgPSBydDsKKwkJCXNpemUgPSAoZHAtZGF0YSk7CisJCQlk ZWJ1ZyhGMTAxLCJnZXRwa3QgdGltZW91dCBzaXplIiwiIixzaXplKTsKKwkJCXJldHVybigoc2l6 ZSA9PSAwKSA/IHggOiBzaXplKTsKKwkJICAgIH0KKwkJICAgIGZpcnN0ID0gLTE7CQkvKiBGbGFn IGVvZiBmb3IgbmV4dCB0aW1lLiAqLworCQkgICAgaWYgKHggPT0gLTIpIGN4c2VlbiA9IDE7IC8q IElmIGVycm9yLCBjYW5jZWwgdGhpcyBmaWxlLiAqLworCQl9CisJCXJuZXh0ID0gKENIQVIpICh4 ICYgZm1hc2spOyAvKiBBcHBseSBmaWxlIG1hc2sgKi8KKyNpZm5kZWYgTk9DU0VUUworCQlpZiAo eGxhdHlwZSAhPSBYTEFfVU5JQ09ERSkgeworI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKwkJICAgIGZm YysrOworI2lmbmRlZiBOT0NTRVRTCisJCSAgICBpZiAoc3gpCisJCSAgICAgIHJ0ID0gKCpzeCko cnQpOworI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKwkJICAgIGlmIChkb2NyYyAmJiAod2hhdCAmIFdf U0VORCkpCisJCSAgICAgIGRvZmlsY3JjKHgpOworCisjaWZuZGVmIE5PQ1NFVFMKKwkJfQorI2Vu ZGlmIC8qIE5PQ1NFVFMgKi8KKwkgICAgfQorI2lmZGVmIEtBTkpJCisJfQorI2VuZGlmIC8qIEtB TkpJICovCisvKgorICBBdCB0aGlzIHBvaW50LCB0aGUgY2hhcmFjdGVyIHdlIGp1c3QgcmVhZCBp cyBpbiBybmV4dCwKKyAgYW5kIHRoZSBjaGFyYWN0ZXIgd2UgYXJlIGFib3V0IHRvIGVuY29kZSBp bnRvIHRoZSBwYWNrZXQgaXMgaW4gcnQuCisqLworCW9kcCA9IGRwOwkJCS8qIFJlbWVtYmVyIHdo ZXJlIHdlIHN0YXJ0ZWQuICovCisgCXh4bHMgPSB4eGRsID0geHhyYyA9IHh4c3MgPSB4eGNxID0g TlVMOwkvKiBDbGVhciB0aGVzZS4gKi8KKy8qCisgIE5vdyBlbmNvZGUgdGhlIGNoYXJhY3RlciBh Y2NvcmRpbmcgdG8gdGhlIG9wdGlvbnMgdGhhdCBhcmUgaW4gZWZmZWN0OgorICAgIGN0bHBbXTog d2hldGhlciB0aGlzIGNvbnRyb2wgY2hhcmFjdGVyIG5lZWRzIHByZWZpeGluZy4KKyAgICBiaW5h cnk6IHRleHQgb3IgYmluYXJ5IG1vZGUuCisgICAgcnB0ZmxnOiByZXBlYXQgY291bnRzIGVuYWJs ZWQuCisgICAgZWJxZmxnOiA4dGgtYml0IHByZWZpeGluZyBlbmFibGVkLgorICAgIGxzY2FwdTog bG9ja2luZyBzaGlmdHMgZW5hYmxlZC4KKyovCisJaWYgKHJwdGZsZykgewkJCS8qIFJlcGVhdCBw cm9jZXNzaW5nIGlzIG9uPyAqLworCSAgICBpZiAoIXVmbGFnICYmCisJCS8qCisJCSAqIElmIHRo ZSBuZXh0IGNoYXIgaXMgcmVhbGx5IENSTEYsIHRoZW4gd2UgY2Fubm90CisJCSAqIGJlIGRvaW5n IGEgcmVwZWF0ICh1bmxlc3MgQ1IsQ1IsTEYgd2hpY2ggYmVjb21lcworCQkgKiAifiA8bi0xPiBD UiBDUiBMRiIsIHdoaWNoIGlzIE9LIGJ1dCBub3QgbW9zdCBlZmZpY2llbnQpLgorCQkgKiBJIGp1 c3QgcGxhaW4gZG9uJ3Qgd29ycnkgYWJvdXQgdGhpcyBjYXNlLiAgVGhlIGFjdHVhbAorCQkgKiBj b252ZXJzaW9uIGZyb20gTkwgdG8gQ1JMRiBpcyBkb25lIGFmdGVyIHRoZSBycHRmbGcgaWYuLi4K KwkJICovCisJCSghZmVvbCB8fCBiaW5hcnkgfHwgKGZlb2wgJiYgKHJuZXh0ICE9IGZlb2wpKSkg JiYKKwkJKHJ0ID09IHJuZXh0KSAmJiAoZmlyc3QgPT0gMCkpIHsgLyogR290IGEgcnVuLi4uICov CisJCWlmICgrK3JwdCA8IDk0KSB7CS8qIEJlbG93IG1heCwganVzdCBjb3VudCAqLworCQkgICAg Y29udGludWU7CQkvKiBnbyBiYWNrIGFuZCBnZXQgYW5vdGhlciAqLworCQl9IGVsc2UgaWYgKHJw dCA9PSA5NCkgewkvKiBSZWFjaGVkIG1heCwgbXVzdCBkdW1wICovCisJCSAgICB4eHJjID0gKENI QVIpIHRvY2hhcihycHQpOyAvKiBQdXQgdGhlIHJlcGVhdCBjb3VudCBoZXJlICovCisJCSAgICBy cHRuICs9IHJwdDsJLyogQWNjdW11bGF0ZSBpdCBmb3Igc3RhdGlzdGljcyAqLworCQkgICAgcnB0 ID0gMDsJCS8qIEFuZCByZXNldCBpdCAqLworCQl9CisJICAgIH0gZWxzZSBpZiAocnB0ID4gMSkg ewkvKiBNb3JlIHRoYW4gdHdvICovCisJCXh4cmMgPSAoQ0hBUikgdG9jaGFyKCsrcnB0KTsgLyog YW5kIGNvdW50LiAqLworCQlycHRuICs9IHJwdDsKKwkJcnB0ID0gMDsJCS8qIFJlc2V0IHJlcGVh dCBjb3VudGVyLiAqLworCSAgICB9CisJICAgIC8qCisJICAgICAgSWYgKHJwdCA9PSAxKSB3ZSBt dXN0IGVuY29kZSBleGFjdGx5IHR3byBjaGFyYWN0ZXJzLgorCSAgICAgIFRoaXMgaXMgZG9uZSBs YXRlciwgYWZ0ZXIgdGhlIGZpcnN0IGNoYXJhY3RlciBpcyBlbmNvZGVkLgorCSAgICAqLworCX0K KwkvKiBJZiBpdCdzIHRoZSBuZXdsaW5lIGNoYXJhY3Rlci4uLiAqLworCWlmICghdWZsYWcgJiYg IWJpbmFyeSAmJiBmZW9sICYmIChydCA9PSBmZW9sKSkgeworCSAgICBpZiAobHNjYXB1ICYmIGxz c3RhdGUpIHsJLyogSWYgU0hJRlQtU1RBVEUgaXMgU0hJRlRFRCAqLworCQlpZiAoZWJxZmxnKSB7 CQkvKiBJZiBzaW5nbGUgc2hpZnRzIGVuYWJsZWQsICovCisJCSAgICAqZHArKyA9IChDSEFSKSBl YnE7CS8qIGluc2VydCBhIHNpbmdsZSBzaGlmdC4gKi8KKwkJfSBlbHNlIHsJCS8qIE90aGVyd2lz ZSBtdXN0IHNoaWZ0IGluLiAqLworCQkgICAgKmRwKysgPSBteWN0bHE7CS8qIEluc2VydCBzaGlm dC1vdXQgY29kZSAqLworCQkgICAgKmRwKysgPSAnTyc7CisJCSAgICBsc3N0YXRlID0gMDsJLyog Q2hhbmdlIHNoaWZ0IHN0YXRlICovCisJCX0KKwkgICAgfQorI2lmZGVmIENLX1NQRUVECisJICAg IGlmIChjdGxwW0NSXSkgeworCQkqZHArKyA9IG15Y3RscTsJCS8qIEluc2VydCBjYXJyaWFnZSBy ZXR1cm4gZGlyZWN0bHkgKi8KKwkJKmRwKysgPSAnTSc7CisJCWNjcCsrOworCSAgICB9IGVsc2Ug eworCQkqZHArKyA9IENSOwkJLyogUGVyaGFwcyBsaXRlcmFsbHkgKi8KKwkJY2N1Kys7CisJICAg IH0KKyNlbHNlIC8qICFDS19TUEVFRCAqLworCSAgICAqZHArKyA9IG15Y3RscTsJCS8qIEluc2Vy dCBjYXJyaWFnZSByZXR1cm4gZGlyZWN0bHkgKi8KKwkgICAgKmRwKysgPSAnTSc7CisJICAgIGNj cCsrOworI2VuZGlmIC8qIENLX1NQRUVEICovCisJICAgIHJ0ID0gTEY7CQkJLyogTm93IG1ha2Ug bmV4dCBjaGFyIGJlIGxpbmVmZWVkLiAqLworCX0KKy8qCisgIE5vdyBoYW5kbGUgdGhlIDh0aCBi aXQgb2YgdGhlIGZpbGUgY2hhcmFjdGVyLiAgSWYgd2UgaGF2ZSBhbiA4LWJpdAorICBjb25uZWN0 aW9uLCB3ZSBwcmVzZXJ2ZSB0aGUgOHRoIGJpdC4gIElmIHdlIGhhdmUgYSA3LWJpdCBjb25uZWN0 aW9uLAorICB3ZSBlbXBsb3kgZWl0aGVyIHNpbmdsZSBvciBsb2NraW5nIHNoaWZ0cyAoaWYgdGhl eSBhcmUgZW5hYmxlZCkuCisqLworCWE3ID0gcnQgJiAwMTc3OwkJCS8qIEdldCBsb3cgNyBiaXRz IG9mIGNoYXJhY3RlciAqLworCWlmIChydCAmIDAyMDApIHsJCS8qIDgtYml0IGNoYXJhY3Rlcj8g Ki8KKwkgICAgaWYgKGxzY2FwdSkgewkJLyogTG9ja2luZyBzaGlmdHMgZW5hYmxlZD8gKi8KKwkJ aWYgKCFsc3N0YXRlKSB7CQkvKiBOb3QgY3VycmVudGx5IHNoaWZ0ZWQ/ICovCisJCSAgICB4ID0g bHNsb29rKDAyMDApOwkvKiBMb29rIGFoZWFkICovCisJCSAgICBpZiAoeCAhPSAwIHx8IGVicWZs ZyA9PSAwKSB7IC8qIExvY2tpbmcgc2hpZnQgZGVjaXNpb24gKi8KKwkJCXh4bHMgPSAnTic7CSAg IC8qIE5lZWQgbG9ja2luZyBzaGlmdC1vdXQgKi8KKwkJCWxzc3RhdGUgPSAxOwkgICAvKiBhbmQg Y2hhbmdlIHRvIHNoaWZ0ZWQgc3RhdGUgKi8KKwkJICAgIH0gZWxzZSBpZiAoZWJxZmxnKSB7ICAg LyogTm90IHdvcnRoIGl0ICovCisJCQl4eHNzID0gKENIQVIpIGVicTsgLyogVXNlIHNpbmdsZSBz aGlmdCAqLworCQkgICAgfQorCQl9CisJCXJ0ID0gKENIQVIpIGE3OwkJLyogUmVwbGFjZSBjaGFy YWN0ZXIgYnkgNy1iaXQgdmFsdWUgKi8KKwkgICAgfSBlbHNlIGlmIChlYnFmbGcpIHsJLyogOHRo IGJpdCBwcmVmaXhpbmcgaXMgb24/ICovCisJCXh4c3MgPSAoQ0hBUikgZWJxOwkvKiBJbnNlcnQg c2luZ2xlIHNoaWZ0ICovCisJCXJ0ID0gKENIQVIpIGE3OwkJLyogUmVwbGFjZSBjaGFyYWN0ZXIg YnkgNy1iaXQgdmFsdWUgKi8KKwkgICAgfQorLyoKKyAgSW4gY2FzZSB3ZSBoYXZlIGEgNy1iaXQg Y29ubmVjdGlvbiBhbmQgdGhpcyBpcyBhbiA4LWJpdCBjaGFyYWN0ZXIsIEFORAorICBuZWl0aGVy IGxvY2tpbmcgc2hpZnRzIG5vciBzaW5nbGUgc2hpZnRzIGFyZSBlbmFibGVkLCB0aGVuIHRoZSBj aGFyYWN0ZXIncworICA4dGggYml0IHdpbGwgYmUgZGVzdHJveWVkIGluIHRyYW5zbWlzc2lvbiwg YW5kIGEgYmxvY2sgY2hlY2sgZXJyb3Igd2lsbAorICBvY2N1ci4KKyovCisJfSBlbHNlIGlmIChs c2NhcHUpIHsJCS8qIDctYml0IGNoYXJhY3RlciAqLworCisJICAgIGlmIChsc3N0YXRlKSB7CQkv KiBDb21lcyB3aGlsZSBzaGlmdGVkIG91dD8gKi8KKwkJeCA9IGxzbG9vaygwKTsJCS8qIFllcywg bG9vayBhaGVhZCAqLworCQlpZiAoeCB8fCBlYnFmbGcgPT0gMCkgewkvKiBUaW1lIHRvIHNoaWZ0 IGluLiAqLworCQkgICAgeHhscyA9ICdPJzsJCS8qIFNldCBzaGlmdC1pbiBjb2RlICovCisJCSAg ICBsc3N0YXRlID0gMDsJLyogRXhpdCBzaGlmdGVkIHN0YXRlICovCisJCX0gZWxzZSBpZiAoZWJx ZmxnKSB7CS8qIE5vdCB3b3J0aCBpdCwgc3RheSBzaGlmdGVkIG91dCAqLworCQkgICAgeHhzcyA9 IChDSEFSKSBlYnE7CS8qIEluc2VydCBzaW5nbGUgc2hpZnQgKi8KKwkJfQorCSAgICB9CisJfQor CS8qIElmIGRhdGEgY2hhcmFjdGVyIGlzIHNpZ25pZmljYW50IHRvIGxvY2tpbmcgc2hpZnQgcHJv dG9jb2wuLi4gKi8KKwlpZiAobHNjYXB1ICYmIChhNyA9PSBTTyB8fCBhNyA9PSBTSSB8fCBhNyA9 PSBETEUpKQorCSAgeHhkbCA9ICdQJzsJCQkvKiBJbnNlcnQgZGF0YWxpbmsgZXNjYXBlICovCisK KwlpZiAoCisjaWZkZWYgQ0tfU1BFRUQKKwkgICAgLyoKKwkgICAgICBUaHdhcnQgWUVUIEFOT1RI RVIgdW53YW50ZWQsIHVubmVlZGVkLCBhbmQgdW5sb3ZlZCBzaWduCisJICAgICAgZXh0ZW5zaW9u LiAgVGhpcyBvbmUgd2FzIHBhcnRpY3VsYXJseSBuYXN0eSBiZWNhdXNlIGl0IHByZXZlbnRlZAor CSAgICAgIDI1NSAoVGVsbmV0IElBQykgZnJvbSBiZWluZyBwcmVmaXhlZCBvbiBzb21lIHBsYXRm b3JtcyAtLSBlLmcuCisJICAgICAgVk1TIHdpdGggVkFYIEMgLS0gYnV0IG5vdCBvdGhlcnMsIHRo dXMgY2F1c2luZyBmaWxlIHRyYW5zZmVycyB0bworCSAgICAgIGZhaWwgb24gVGVsbmV0IGNvbm5l Y3Rpb25zIGJ5IHNlbmRpbmcgYmFyZSBJQUNzLiAgTm90IHRvIG1lbnRpb24KKwkgICAgICB0aGUg c3RyYXkgbWVtb3J5IHJlZmVyZW5jZS4gIFNpZ25lZCBjaGFycyBhcmUgYSBCQUQgaWRlYS4KKwkg ICAgKi8KKwkgICAgY3RscFsodW5zaWduZWQpKHJ0ICYgMHhmZildCS8qIExvcCBvZmYgYW55ICJz aWduIiBleHRlbnNpb24gKi8KKyNlbHNlCisJICAgIChhNyA8IFNQKSB8fCAoYTcgPT0gREVMKQor I2VuZGlmIC8qIENLX1NQRUVEICovCisJICAgICkgewkJCQkvKiBEbyBjb250cm9sIHByZWZpeGlu ZyBpZiBuZWNlc3NhcnkgKi8KKwkgICAgeHhjcSA9IG15Y3RscTsJCS8qIFRoZSBwcmVmaXggKi8K KwkgICAgY2NwKys7CQkJLyogQ291bnQgaXQgKi8KKwkgICAgcnQgPSAoQ0hBUikgY3RsKHJ0KTsJ LyogVW5jb250cm9sbGlmeSB0aGUgY2hhcmFjdGVyICovCisJfQorI2lmZGVmIENLX1NQRUVECisJ ZWxzZSBpZiAoKGE3IDwgU1ApIHx8IChhNyA9PSBERUwpKSAvKiBDb3VudCBhbiB1bnByZWZpeGVk IG9uZSAqLworCSAgY2N1Kys7CisjZW5kaWYgLyogQ0tfU1BFRUQgKi8KKworCWlmIChhNyA9PSBt eWN0bHEpCQkvKiBBbHdheXMgcHJlZml4IHRoZSBjb250cm9sIHByZWZpeCAqLworCSAgeHhjcSA9 IG15Y3RscTsKKworCWlmICgocnB0ZmxnKSAmJiAoYTcgPT0gcnB0cSkpCS8qIElmIGl0J3MgdGhl IHJlcGVhdCBwcmVmaXgsICovCisJICB4eGNxID0gbXljdGxxOwkJLyogcHJlZml4IGl0IGlmIGRv aW5nIHJlcGVhdCBjb3VudHMgKi8KKworCWlmICgoZWJxZmxnKSAmJiAoYTcgPT0gZWJxKSkJLyog UHJlZml4IHRoZSA4dGgtYml0IHByZWZpeCAqLworCSAgeHhjcSA9IG15Y3RscTsJCS8qIGlmIGRv aW5nIDh0aC1iaXQgcHJlZml4ZXMgKi8KKworLyogTm93IGNvbnN0cnVjdCB0aGUgZW50aXJlIHNl cXVlbmNlICovCisKKwlpZiAoeHhscykgeyAqZHArKyA9IG15Y3RscTsgKmRwKysgPSB4eGxzOyB9 IC8qIExvY2tpbmcgc2hpZnQgKi8KKwlvZHAyID0gZHA7CQkJCSAgICAvKiAoU2F2ZSB0aGlzIHBs YWNlKSAqLworCWlmICh4eGRsKSB7ICpkcCsrID0gbXljdGxxOyAqZHArKyA9IHh4ZGw7IH0gLyog RGF0YWxpbmsgZXNjYXBlICovCisJaWYgKHh4cmMpIHsgKmRwKysgPSAoQ0hBUikgcnB0cTsgKmRw KysgPSB4eHJjOyB9IC8qIFJlcGVhdCBjb3VudCAqLworCWlmICh4eHNzKSB7ICpkcCsrID0gKENI QVIpIGVicTsgfSAgICAgICAgICAgLyogU2luZ2xlIHNoaWZ0ICovCisJaWYgKHh4Y3EpIHsgKmRw KysgPSBteWN0bHE7IH0JICAgIAkgICAgLyogQ29udHJvbCBwcmVmaXggKi8KKwkqZHArKyA9IHJ0 OwkJCS8qIEZpbmFsbHksIHRoZSBjaGFyYWN0ZXIgaXRzZWxmICovCisKKwlpZiAocnB0ID09IDEp IHsJCQkvKiBFeGFjdGx5IHR3byBjb3BpZXM/ICovCisJICAgIHJwdCA9IDA7CisJICAgIHAyID0g ZHA7CQkJLyogU2F2ZSBwbGFjZSB0ZW1wb3JhcmlseSAqLworCSAgICBmb3IgKHAxID0gb2RwMjsg cDEgPCBwMjsgcDErKykgLyogQ29weSB0aGUgb2xkIGNoYXJzIG92ZXIgYWdhaW4gKi8KKwkgICAg ICAqZHArKyA9ICpwMTsKKwkgICAgaWYgKChwMi1kYXRhKSA8PSBidWZtYXgpIG9kcCA9IHAyOyAv KiBDaGVjayBwYWNrZXQgYm91bmRzICovCisJICAgIGlmICgocDItZGF0YSkgPCBidWZtYXgpIG9k cCA9IHAyOyAvKiBDaGVjayBwYWNrZXQgYm91bmRzICovCisJfQorCXJ0ID0gcm5leHQ7CQkJLyog TmV4dCBjaGFyYWN0ZXIgaXMgbm93IGN1cnJlbnQuICovCisKKy8qIERvbmUgZW5jb2RpbmcgdGhl IGNoYXJhY3Rlci4gIE5vdyB0YWtlIGNhcmUgb2YgcGFja2V0IGJ1ZmZlciBvdmVyZmxvdy4gKi8K KworCWlmICgoZHAtZGF0YSkgPj0gYnVmbWF4KSB7CS8qIElmIHRvbyBiaWcsIHNhdmUgc29tZSBm b3IgbmV4dC4gKi8KKworCSAgICBkZWJ1ZyhGMDAwLCJnZXRwa3QgRU9QIiwiIixydCk7CisKKwkg ICAgc2l6ZSA9IChkcC1kYXRhKTsJCS8qIENhbGN1bGF0ZSB0aGUgc2l6ZS4gKi8KKwkgICAgKmRw ID0gJ1wwJzsJCQkvKiBNYXJrIHRoZSBlbmQuICovCisJICAgIGlmIChtZW1zdHIpIHsJCS8qIE5v IGxlZnRvdmVycyBmb3IgbWVtb3J5IHN0cmluZ3MgKi8KKwkJaWYgKHJ0KQkJCS8qIENoYXIgd2Ug ZGlkbid0IGVuY29kZSB5ZXQgKi8KKwkJICBtZW1wdHItLTsJCS8qIChmb3IgZW5jc3RyKCkpICov CisJCXJldHVybihzaXplKTsKKwkgICAgfQorCSAgICBpZiAoKGRwLWRhdGEpID4gYnVmbWF4KSB7 CS8qIGlmIHBhY2tldCBpcyBvdmVyZnVsbCAqLworCQkvKiBjb3B5IHRoZSBwYXJ0IHRoYXQgZG9l c24ndCBmaXQgaW50byB0aGUgbGVmdG92ZXIgYnVmZmVyLCAqLworCQkvKiB0YWtpbmcgY2FyZSBu b3QgdG8gc3BsaXQgYSBwcmVmaXhlZCBzZXF1ZW5jZS4gKi8KKwkJaW50IGk7CisJCW5sZWZ0ID0g ZHAgLSBvZHA7CisJCWZvciAoaSA9IDAsIHAxID0gbGVmdG92ZXIsIHAyID0gb2RwOyBpIDwgbmxl ZnQ7IGkrKykgeworCQkgICAgKnAxKysgPSAqcDIrKzsKKwkJICAgIGlmIChtZW1zdHIpIG1lbXB0 ci0tOyAvKiAoZm9yIGVuY3N0cikgKi8KKwkJfQorCQlkZWJ1ZyhGMTExLCJnZXRwa3QgbGVmdG92 ZXIiLGxlZnRvdmVyLHNpemUpOworCQlkZWJ1ZyhGMTAxLCJnZXRwa3Qgb3NpemUiLCIiLChvZHAt ZGF0YSkpOworCQlzaXplID0gKG9kcC1kYXRhKTsJLyogUmV0dXJuIHRydW5jYXRlZCBwYWNrZXQu ICovCisJCSpvZHAgPSAnXDAnOwkJLyogTWFyayB0aGUgbmV3IGVuZCAqLworCSAgICB9CisJICAg IHQgPSBydDsJCQkvKiBTYXZlIGZvciBuZXh0IHRpbWUgKi8KKwkgICAgcmV0dXJuKHNpemUpOwor CX0KKyAgICB9CQkJCQkvKiBPdGhlcndpc2UsIGtlZXAgZmlsbGluZy4gKi8KKyAgICBzaXplID0g KGRwLWRhdGEpOwkJCS8qIEVuZCBvZiBmaWxlICovCisgICAgKmRwID0gJ1wwJzsJCQkJLyogTWFy ayB0aGUgZW5kIG9mIHRoZSBkYXRhLiAqLworICAgIGRlYnVnKEYxMTEsImdldHBrdCBlb2YvZW90 IixkYXRhLHNpemUpOyAvKiBGZWxsIHRocnUgYmVmb3JlIHBhY2tldCBmdWxsLCAqLworICAgIHJl dHVybihzaXplKTsJCSAgICAgLyogcmV0dXJuIHBhcnRpYWxseSBmaWxsZWQgbGFzdCBwYWNrZXQu ICovCit9CisKKy8qICBUIEkgTiBJIFQgIC0tICBJbml0aWFsaXplIGEgdHJhbnNhY3Rpb24gICov CisKK2ludCBlcGt0cmN2ZCA9IDAsIGVwa3RzZW50ID0gMDsKKworLyoKKyAgQ2FsbCB3aXRoIDEg dG8gcmVzZXQgZXZlcnl0aGluZyBiZWZvcmUgUy9JL1kgbmVnb3RpYXRpb24sIG9yIDAgdG8KKyAg cmVzZXQgb25seSB0aGUgdGhpbmdzIHRoYXQgYXJlIG5vdCBzZXQgaW4gdGhlIFMvSS9ZIG5lZ290 aWF0aW9uLgorICBSZXR1cm5zIC0xIG9uIGZhaWx1cmUgKGUuZy4gdG8gY3JlYXRlIHBhY2tldCBi dWZmZXJzKSwgMCBvbiBzdWNjZXNzLgorKi8KK2ludAordGluaXQoZmxhZykgaW50IGZsYWc7IHsK KyAgICBpbnQgeDsKKyNpZmRlZiBDS19USU1FUlMKKyAgICBleHRlcm4gaW50IHJ0dGZsZzsKKyNl bmRpZiAvKiBDS19USU1FUlMgKi8KKyAgICBleHRlcm4gaW50IHJjdnRpbW87CisgICAgZXh0ZXJu IGludCBmYXRhbGlvOworCisgICAgZGVidWcoRjEwMSwidGluaXQgZmxhZyIsIiIsZmxhZyk7CisK KyAgICAqZXBrdG1zZyA9IE5VTDsKKyAgICBlcGt0cmN2ZCA9IDA7CisgICAgZXBrdHNlbnQgPSAw OworICAgIG9mcGVybXMgPSAiIjsKKyAgICBkaXJhY3RpdmUgPSAwOwkJCS8qIERJUiAvIFJFTU9U RSBESVIgbm90IGFjdGl2ZSAqLworICAgIGludGVycnVwdGVkID0gMDsJCQkvKiBOb3QgaW50ZXJy dXB0ZWQgKi8KKyAgICBmYXRhbGlvID0gMDsJCQkvKiBObyBmYXRhbCBpL28gZXJyb3IgKi8KKyAg ICBpZiAoc2VydmVyKSB7CisJbW92aW5nICA9IDA7CisJcGlwZXNlbmQgPSAwOyAvKiBUaGlzIHRh a2VzIGNhcmUgb2YgbXVsdGlwbGUgR0VUcyBzZW50IHRvIGEgc2VydmVyLiAqLworICAgIH0KKyAg ICBiZXN0bGVuID0gMDsJCQkvKiBGb3IgcGFja2V0IGxlbmd0aCBvcHRpbWl6YXRpb24gKi8KKyAg ICBtYXhzZW5kID0gMDsJCQkvKiBCaWdnZXN0IGRhdGEgZmllbGQgd2UgY2FuIHNlbmQgKi8KKyNp ZmRlZiBTVFJFQU1JTkcKKyAgICBzdHJlYW1vayA9IDA7CQkJLyogU3RyZWFtaW5nIG5lZ290aWF0 ZWQgKi8KKyAgICBzdHJlYW1pbmcgPSAwOwkJCS8qIFN0cmVhbWluZyBiZWluZyBkb25lIG5vdyAq LworI2VuZGlmIC8qIFNUUkVBTUlORyAqLworCisgICAgYmluYXJ5ID0gYl9zYXZlOwkJCS8qIC4u LiAqLworICAgIGduZl9iaW5hcnkgPSBiaW5hcnk7CQkvKiBQZXItZmlsZSB0cmFuc2ZlciBtb2Rl ICovCisgICAgcmV0cmFucyA9IDA7CQkJLyogUGFja2V0IHJldHJhbnNtaXNzaW9uIGNvdW50ICov CisgICAgc25kdHlwID0gMDsJCQkJLyogTm8gcHJldmlvdXMgcGFja2V0ICovCisgICAgeGZsZyA9 IDA7CQkJCS8qIFJlc2V0IHgtcGFja2V0IGZsYWcgKi8KKyAgICBtZW1zdHIgPSAwOwkJCQkvKiBS ZXNldCBtZW1vcnktc3RyaW5nIGZsYWcgKi8KKyAgICBtZW1wdHIgPSBOVUxMOwkJCS8qICBhbmQg YnVmZmVyIHBvaW50ZXIgKi8KKyAgICBmdW5jc3RyID0gMDsJCQkvKiBSZXNldCAicmVhZCBmcm9t IGZ1bmN0aW9uIiBmbGFnICovCisgICAgZnVuY3B0ciA9IE5VTEw7CQkJLyogIGFuZCBmdW5jdGlv biBwb2ludGVyICovCisgICAgYXV0b3BhciA9IDA7CQkJLyogQXV0b21hdGljIHBhcml0eSBkZXRl Y3Rpb24gZmxhZyAqLworCisgICAgLyogVGhpcyBzdHVmZiBpcyBvbmx5IGZvciBCRUZPUkUgUy9J L1kgbmVnb3RpYXRpb24sIG5vdCBhZnRlciAqLworCisgICAgaWYgKGZsYWcpIHsKKwlpZiAoYmN0 ZikgewkJICAgICAgLyogRm9yY2UgQmxvY2sgQ2hlY2sgMyBvbiBhbGwgcGFja2V0cyAqLworCSAg ICBiY3R1ID0gYmN0bCA9IDM7CQkvKiBTZXQgYmxvY2sgY2hlY2sgdHlwZSB0byAzICovCisJfSBl bHNlIHsKKwkgICAgYmN0dSA9IGJjdGwgPSAxOwkJLyogUmVzZXQgYmxvY2sgY2hlY2sgdHlwZSB0 byAxICovCisJfQorCW15aW5pdFswXSA9ICdcMCc7CQkvKiBIYXZlbid0IHNlbnQgaW5pdCBzdHJp bmcgeWV0ICovCisJcnFmID0gLTE7CQkJLyogUmVzZXQgOHRoLWJpdC1xdW90ZSByZXF1ZXN0IGZs YWcgKi8KKwllYnEgPSBNWUVCUTsJCQkvKiBSZXNldCA4dGgtYml0IHF1b3Rpbmcgc3R1ZmYgKi8K KwllYnFmbGcgPSAwOwkJCS8qIDh0aCBiaXQgcXVvdGluZyBub3QgZW5hYmxlZCAqLworCWVicXNl bnQgPSAwOwkJCS8qIE5vIDh0aC1iaXQgcHJlZml4IGJpZCBzZW50IHlldCAqLworCXNxID0gJ1kn OwkJCS8qIDh0aC1iaXQgcHJlZml4IGJpZCBJIHVzdWFsbHkgc2VuZCAqLworCXNwc2l6ID0gc3Bz aXpyOwkJCS8qIEluaXRpYWwgc2VuZC1wYWNrZXQgc2l6ZSAqLworCWRlYnVnKEYxMDEsInRpbml0 IHNwc2l6IiwiIixzcHNpeik7CisJd3Nsb3RzID0gMTsJCQkvKiBPbmUgd2luZG93IHNsb3QgKi8K Kwl3c2xvdG4gPSAxOwkJCS8qIE5vIHdpbmRvdyBuZWdvdGlhdGVkIHlldCAqLworCWp1c3RvbmUg PSAwOwkJCS8qIChzaG91bGQgdGhpcyBiZSB6ZXJvJ2QgaGVyZT8pICovCisJd2hvYXJldVswXSA9 IE5VTDsJCS8qIFBhcnRuZXIncyBzeXN0ZW0gdHlwZSAqLworCXN5c2luZGV4ID0gLTE7CisJd2Vh cmVhbGlrZSA9IDA7CisJd2hhdCA9IFdfSU5JVDsJCQkvKiBEb2luZyBub3RoaW5nIHNvIGZhci4u LiAqLworICAgIH0KKyAgICBmbmNudiA9IGZfc2F2ZTsJCQkvKiBCYWNrIHRvIHdoYXQgdXNlciBs YXN0IHNhaWQgKi8KKyAgICBwa3RudW0gPSAwOwkJCQkvKiBJbml0aWFsIHBhY2tldCBudW1iZXIg dG8gc2VuZCAqLworICAgIGN4c2VlbiA9IGN6c2VlbiA9IGRpc2NhcmQgPSAwOwkvKiBSZXNldCBp bnRlcnJ1cHQgZmxhZ3MgKi8KKyAgICAqZmlsbmFtID0gJ1wwJzsJCQkvKiBDbGVhciBmaWxlIG5h bWUgKi8KKyAgICBzcGt0bCA9IDA7CQkJCS8qIEFuZCBpdHMgbGVuZ3RoICovCisgICAgbmFrc3Rh dGUgPSAwOwkJCS8qIEFzc3VtZSB3ZSdyZSBub3QgaW4gYSBOQUsgc3RhdGUgKi8KKyAgICBudW1l cnJzID0gMDsJCQkvKiBUcmFuc21pc3Npb24gZXJyb3IgY291bnRlciAqLworICAgIGlkbGV0bW8g PSAwOwkJCS8qIE5vIGlkbGUgdGltZW91dCB5ZXQgKi8KKyAgICBpZiAoc2VydmVyKSB7IAkJCS8q IElmIGFjdGluZyBhcyBzZXJ2ZXIsICovCisJaWYgKHNydmlkbCA+IDApCQkJLyogSWYgYW4gaWRs ZSB0aW1lb3V0IGlzIGdpdmVuICovCisJICB0aW1pbnQgPSBzcnZpZGw7CisJZWxzZQorCSAgdGlt aW50ID0gc3J2dGltOwkJLyogdXNlIHNlcnZlciB0aW1lb3V0IGludGVydmFsLiAqLworICAgIH0g ZWxzZSB7CQkJCS8qIE90aGVyd2lzZSAqLworCXRpbWludCA9IGNoa3RpbW8ocnRpbW8sdGltZWYp OwkvKiBhbmQgdXNlIGxvY2FsIHRpbWVvdXQgdmFsdWUgKi8KKyAgICB9CisgICAgZGVidWcoRjEw MSwidGluaXQgdGltaW50IiwiIix0aW1pbnQpOworCisjaWZkZWYgQ0tfVElNRVJTCisgICAgaWYg KHJ0dGZsZyAmJiB0aW1pbnQgPiAwKQkJLyogVXNpbmcgcm91bmQtdHJpcCB0aW1lcnM/ICovCisg ICAgICBydHRpbml0KCk7CisgICAgZWxzZQorI2VuZGlmIC8qIENLX1RJTUVSUyAqLworICAgICAg cmN2dGltbyA9IHRpbWludDsKKworICAgIHdpbmxvID0gMDsJCQkJLyogUGFja2V0IDAgaXMgYXQg d2luZG93LWxvdyAqLworICAgIGRlYnVnKEYxMDEsInRpbml0IHdpbmxvIiwiIix3aW5sbyk7Cisg ICAgeCA9IG1rc2J1ZigxKTsJCQkvKiBNYWtlIGEgMS1zbG90IHNlbmQtcGFja2V0IGJ1ZmZlciAq LworICAgIGlmICh4IDwgMCkgcmV0dXJuKHgpOworICAgIHggPSBnZXRzYnVmKDApOwkJCS8qIEFs bG9jYXRlIGZpcnN0IHNlbmQtYnVmZmVyLiAqLworICAgIGRlYnVnKEYxMDEsInRpbml0IGdldHNi dWYiLCIiLHgpOworICAgIGlmICh4IDwgMCkgcmV0dXJuKHgpOworICAgIGR1bXBzYnVmKCk7Cisg ICAgeCA9IG1rcmJ1Zih3c2xvdHMpOwkJCS8qICYgYSAxLXNsb3QgcmVjZWl2ZS1wYWNrZXQgYnVm ZmVyLiAqLworICAgIGlmICh4IDwgMCkgcmV0dXJuKHgpOworICAgIGxzc3RhdGUgPSAwOwkJCS8q IEluaXRpYWxpemUgbG9ja2luZyBzaGlmdCBzdGF0ZSAqLworICAgIGlmIChhdXRvcGF0aCkgewkJ CS8qIFNFVCBSRUNFSVZFIFBBVEhOQU1FUyBBVVRPIGZpeHVwICovCisJZm5ycGF0aCA9IFBBVEhf QVVUTzsKKwlhdXRvcGF0aCA9IDA7CisgICAgfQorICAgIHJldHVybigwKTsKK30KKworVk9JRAor cGt0aW5pdCgpIHsJCQkJLyogSW5pdGlhbGl6ZSBwYWNrZXQgc2VxdWVuY2UgKi8KKyAgICBwa3Ru dW0gPSAwOwkJCQkvKiBudW1iZXIgJiB3aW5kb3cgbG93LiAqLworICAgIHdpbmxvID0gMDsKKyAg ICBkZWJ1ZyhGMTAxLCJwa3Rpbml0IHdpbmxvIiwiIix3aW5sbyk7Cit9CisKKy8qICBSIEkgTiBJ IFQgIC0tICBSZXNwb25kIHRvIFMgb3IgSSBwYWNrZXQgICovCisKK1ZPSUQKK3Jpbml0KGQpIENI QVIgKmQ7IHsKKyAgICBjaGFyICp0cCA9IE5VTEw7CisgICAgenRpbWUoJnRwKTsKKyAgICB0bG9n KEYxMTAsIlRyYW5zYWN0aW9uIGJlZ2lucyIsdHAsMEwpOyAvKiBNYWtlIHRyYW5zYWN0aW9uIGxv ZyBlbnRyeSAqLworICAgIHRsb2coRjExMCwiR2xvYmFsIGZpbGUgbW9kZToiLCBiaW5hcnkgPyAi YmluYXJ5IiA6ICJ0ZXh0IiwgMEwpOworICAgIHRsb2coRjExMCwiQ29sbGlzaW9uIGFjdGlvbjoi LCBmbmNuYW1bZm5jYWN0XSwwKTsKKyAgICB0bG9nKEYxMDAsIiIsIiIsMCk7CisgICAgZGVidWco RjEwMSwicmluaXQgZm5jYWN0IiwiIixmbmNhY3QpOworICAgIGZpbGNudCA9IGZpbHJlaiA9IDA7 CQkvKiBJbml0IGZpbGUgY291bnRlcnMgKi8KKyAgICBzcGFyKGQpOworICAgIGFjazEocnBhcigp KTsKKyNpZmRlZiBkYXRhZ2VuZXJhbAorICAgIGlmICgobG9jYWwpICYmICghcXVpZXQpKSAgICAg ICAgICAgIC8qIE9ubHkgZG8gdGhpcyBpZiBsb2NhbCAmIG5vdCBxdWlldCAqLworICAgICAgICBj b25zdGFfbXQoKTsgICAgICAgICAgICAgICAgICAgIC8qIFN0YXJ0IHRoZSBhc3luY2ggcmVhZCB0 YXNrICovCisjZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KK30KKworCisvKiAgUiBFIFMgRSBUIEMg IC0tICBSZXNldCBwZXItdHJhbnNhY3Rpb24gY2hhcmFjdGVyIGNvdW50ZXJzICovCisKK1ZPSUQK K3Jlc2V0YygpIHsKKyAgICBycHRuID0gMDsJCQkJLyogUmVwZWF0IGNvdW50cyAqLworICAgIGZz ZWNzID0gZmxjaSA9IGZsY28gPSAoQ0tfT0ZGX1QpMDsJLyogRmlsZSBjaGFycyBpbiBhbmQgb3V0 ICovCisjaWZkZWYgR0ZUSU1FUgorICAgIGZwZnNlY3MgPSAwLjA7CisjZW5kaWYgLyogR0ZUSU1F UiAqLworICAgIHRmYyA9IHRsY2kgPSB0bGNvID0gKENLX09GRl9UKTA7CS8qIFRvdGFsIGZpbGUs IGxpbmUgY2hhcnMgaW4gJiBvdXQgKi8KKyAgICBjY3UgPSBjY3AgPSAwTDsJCQkvKiBDb250cm9s LWNoYXIgc3RhdGlzdGljcyAqLworI2lmZGVmIENPTU1FTlQKKyAgICBmc2l6ZSA9IChDS19PRkZf VCktMTsJCS8qIEZpbGUgc2l6ZSAqLworI2Vsc2UKKyAgICBpZiAoISh3aGF0ICYgV19TRU5EKSkK KyAgICAgIGZzaXplID0gKENLX09GRl9UKS0xOworICAgIGRlYnVnKEYxMDEsInJlc2V0YyBmc2l6 ZSIsIiIsZnNpemUpOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICB0aW1lb3V0cyA9IHJldHJh bnMgPSAwOwkJLyogVGltZW91dHMsIHJldHJhbnNtaXNzaW9ucyAqLworICAgIHNwYWNrZXRzID0g cnBhY2tldHMgPSAwOwkJLyogUGFja2V0IGNvdW50cyBvdXQgJiBpbiAqLworICAgIGNydW5jaGVk ID0gMDsJCQkvKiBDcnVuY2hlZCBwYWNrZXRzICovCisgICAgd2N1ciA9IDA7CQkJCS8qIEN1cnJl bnQgd2luZG93IHNpemUgKi8KKyAgICB3bWF4ID0gMDsJCQkJLyogTWF4aW11bSB3aW5kb3cgc2l6 ZSB1c2VkICovCisgICAgcGVha2NwcyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgLyogUGVh ayBjaGFycyBwZXIgc2Vjb25kICovCit9CisKKy8qICBTIEkgTiBJIFQgIC0tICBHZXQgJiB2ZXJp ZnkgZmlyc3QgZmlsZSBuYW1lLCB0aGVuIHNlbmQgU2VuZC1Jbml0IHBhY2tldCAqLworLyoKKyBS ZXR1cm5zOgorICAgMSBpZiBzZW5kIG9wZXJhdGlvbiBiZWdpbnMgc3VjY2Vzc2Z1bGx5CisgICAw IGlmIHNlbmQgb3BlcmF0aW9uIGZhaWxzCisqLworI2lmZGVmIERZTkFNSUMKK2NoYXIgKmNtYXJn YnVmID0gTlVMTDsKKyNlbHNlCitjaGFyIGNtYXJnYnVmW0NLTUFYUEFUSCsxXTsKKyNlbmRpZiAv KiBEWU5BTUlDICovCitjaGFyICpjbWFyZ3BbMl07CisKK1ZPSUQKK2ZubGlzdCgpIHsKKyAgICBp ZiAoIWNhbGlicmF0ZSkKKyAgICAgIHNuZHNyYyA9IChuZmlscyA8IDApID8gLTEgOiBuZmlsczsg LyogU291cmNlIGZvciBmaWxlbmFtZXMgKi8KKyNpZmRlZiBEWU5BTUlDCisgICAgaWYgKCFjbWFy Z2J1ZiAmJiAhKGNtYXJnYnVmID0gbWFsbG9jKENLTUFYUEFUSCsxKSkpCisgICAgICBmYXRhbCgi Zm5saXN0OiBubyBtZW1vcnkgZm9yIGNtYXJnYnVmIik7CisjZW5kaWYgLyogRFlOQU1JQyAqLwor ICAgIGNtYXJnYnVmWzBdID0gTlVMOwkJCS8qIEluaXRpYWxpemUgbmFtZSBidWZmZXIgKi8KKwor ICAgIGRlYnVnKEYxMDEsImZubGlzdCBuZmlscyIsIiIsbmZpbHMpOworICAgIGRlYnVnKEYxMTAs ImZubGlzdCBjbWFyZyIsY21hcmcsMCk7CisgICAgZGVidWcoRjExMCwiZm5saXN0IGNtYXJnMiIs Y21hcmcyLDApOworICAgIGlmICghY21hcmcyKSBjbWFyZzIgPSAiIjsKKyAgICBpZiAobmZpbHMg PT0gMCkgewkJCS8qIFNlbmRpbmcgZnJvbSBzdGRpbiBvciBtZW1vcnkuICovCisJaWYgKChjbWFy ZzIgIT0gTlVMTCkgJiYgKCpjbWFyZzIpKSB7CisJICAgIGNtYXJnID0gY21hcmcyOwkJLyogSWYg RiBwYWNrZXQsICJhcy1uYW1lIiBpcyB1c2VkICovCisJICAgIGNtYXJnMiA9ICIiOwkJLyogaWYg cHJvdmlkZWQgKi8KKwl9IGVsc2UKKwkgIGNtYXJnID0gInN0ZGluIjsJCS8qIG90aGVyd2lzZSBq dXN0IHVzZSAic3RkaW4iICovCisJY2tzdHJuY3B5KGNtYXJnYnVmLGNtYXJnLENLTUFYUEFUSCsx KTsKKwljbWFyZ3BbMF0gPSBjbWFyZ2J1ZjsKKwljbWFyZ3BbMV0gPSAiIjsKKwljbWxpc3QgPSBj bWFyZ3A7CisJbmZpbHMgPSAxOworICAgIH0KK30KKworaW50CitzaW5pdCgpIHsKKyAgICBpbnQg eDsJCQkJLyogV29ya2VyIGludCAqLworICAgIGNoYXIgKnRwLCAqeHAsICptOwkJCS8qIFdvcmtl ciBzdHJpbmcgcG9pbnRlcnMgKi8KKworICAgIGZpbGNudCA9IGZpbHJlaiA9IDA7CQkvKiBJbml0 aWFsaXplIGZpbGUgY291bnRlcnMgKi8KKworICAgIGZubGlzdCgpOworCisgICAgeHAgPSAiIjsK KyAgICBpZiAobmZpbHMgPCAwKSB7CisjaWZkZWYgUElQRVNFTkQKKwlpZiAodXNlcGlwZXMgJiYg cHJvdG9jb2wgPT0gUFJPVE9fSyAmJiAqY21hcmcgPT0gJyEnKSB7CisJICAgIHBpcGVzZW5kID0g MTsKKwkgICAgY21hcmcrKzsKKwl9CisjZW5kaWYgLyogUElQRVNFTkQgKi8KKwl4cCA9IGNtYXJn OworICAgIH0gZWxzZSB7CisjaWZuZGVmIE5PTVNFTkQKKwlpZiAoYWRkbGlzdCkKKwkgIHhwID0g ZmlsZWhlYWQtPmZsX25hbWU7CisJZWxzZQorI2VuZGlmIC8qIE5PTVNFTkQgKi8KKwkgIGlmIChm aWxlZmlsZSkKKwkgICAgeHAgPSBmaWxlZmlsZTsKKwkgIGVsc2UgaWYgKGNhbGlicmF0ZSkKKwkg ICAgeHAgPSAiQ2FsaWJyYXRpb24iOworCSAgZWxzZQorCSAgICB4cCA9ICpjbWxpc3Q7CisgICAg fQorICAgIGRlYnVnKEYxMTAsInNpbml0IHhwIix4cCwwKTsKKyAgICB4ID0gZ25maWxlKCk7CQkJ LyogR2V0IGZpcnN0IGZpbGVuYW1lLiAqLworICAgIGRlYnVnKEYxMTEsInNpbml0IGduZmlsZSIs Y2tpdG9hKGduZmVycm9yKSx4KTsKKyAgICBpZiAoeCA9PSAwKSB4ID0gZ25mZXJyb3I7CQkvKiBJ ZiBub25lLCBnZXQgZXJyb3IgcmVhc29uICovCisgICAgbSA9IE5VTEw7CQkJCS8qIEVycm9yIG1l c3NhZ2UgcG9pbnRlciAqLworICAgIGRlYnVnKEYxMDEsInNpbml0IGduZmlsIiwiIix4KTsKKyAg ICBzd2l0Y2ggKHgpIHsKKyAgICAgIGNhc2UgLTY6IG0gPSAiTm8gZmlsZXMgbWVldCBzZWxlY3Rp b24gY3JpdGVyaWEiOyBicmVhazsKKyAgICAgIGNhc2UgLTU6IG0gPSAiVG9vIG1hbnkgZmlsZXMg bWF0Y2ggd2lsZGNhcmQiOyBicmVhazsKKyAgICAgIGNhc2UgLTQ6IG0gPSAiQ2FuY2VsbGVkIjsg YnJlYWs7CisgICAgICBjYXNlIC0zOiBtID0gIlJlYWQgYWNjZXNzIGRlbmllZCI7IGJyZWFrOwor ICAgICAgY2FzZSAtMjogbSA9ICJGaWxlIGlzIG5vdCByZWFkYWJsZSI7IGJyZWFrOworI2lmZGVm IENPTU1FTlQKKyAgICAgIGNhc2UgLTE6IG0gPSBpc3dpbGQoZmlsbmFtKSA/ICJObyBmaWxlcyBt YXRjaCIgOiAiRmlsZSBub3QgZm91bmQiOworCWJyZWFrOworICAgICAgY2FzZSAgMDogbSA9ICJO byBmaWxlc3BlYyBnaXZlbiEiOyBicmVhazsKKyNlbHNlCisgICAgICBjYXNlICAwOgorICAgICAg Y2FzZSAtMTogbSA9IGlzd2lsZChmaWxuYW0pID8gIk5vIGZpbGVzIG1hdGNoIiA6ICJGaWxlIG5v dCBmb3VuZCI7CisJYnJlYWs7CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAgZGVmYXVsdDoK KwlicmVhazsKKyAgICB9CisgICAgZGVidWcoRjEwMSwic2luaXQgbmZpbHMiLCIiLG5maWxzKTsK KyAgICBkZWJ1ZyhGMTEwLCJzaW5pdCBmaWxuYW0iLGZpbG5hbSwwKTsKKyAgICBpZiAoeCA8IDEp IHsJCQkvKiBEaWRuJ3QgZ2V0IGEgZmlsZS4gKi8KKwlkZWJ1ZyhGMTExLCJzaW5pdCBtc2ciLG0s eCk7CisJaWYgKHNlcnZlcikgewkJCS8qIERvaW5nIEdFVCBjb21tYW5kICovCisJICAgIGVycnBr dCgoQ0hBUiAqKW0pOwkJLyogc28gc2VuZCBFcnJvciBwYWNrZXQuICovCisJfSBlbHNlIGlmICgh bG9jYWwpIHsgCQkvKiBEb2luZyBTRU5EIGNvbW1hbmQgKi8KKwkgICAgaW50ZXJydXB0ZWQgPSAx OwkJLyogKFRvIHN1cHByZXNzIGhpbnQpICovCisJICAgIHByaW50ZigiPyVzXHJcbiIsbSk7CisJ fSBlbHNlIHsKKwkgICAgeHhzY3JlZW4oU0NSX0VNLDAsMGwsbSk7CS8qIHNvIHByaW50IG1lc3Nh Z2UuICovCisJfQorCXRsb2coRjExMCx4cCxtLDBMKTsJCS8qIE1ha2UgdHJhbnNhY3Rpb24gbG9n IGVudHJ5LiAqLworCWZyZWVyYnVmKHJzZXF0YmxbMF0pOwkJLyogRnJlZSB0aGUgYnVmZmVyIHRo ZSBHRVQgY2FtZSBpbi4gKi8KKwlyZXR1cm4oMCk7CQkJLyogUmV0dXJuIGZhaWx1cmUgY29kZSAq LworICAgIH0KKyAgICBpZiAoIWxvY2FsICYmICFzZXJ2ZXIgJiYgY2tkZWxheSA+IDApIC8qIE9T LTkgc2xlZXAoMCkgPT0gaW5maW5pdGUgKi8KKyAgICAgIHNsZWVwKGNrZGVsYXkpOwkJCS8qIERl bGF5IGlmIHJlcXVlc3RlZCAqLworI2lmZGVmIGRhdGFnZW5lcmFsCisgICAgaWYgKChsb2NhbCkg JiYgKCFxdWlldCkpICAgICAgICAgICAgLyogT25seSBkbyB0aGlzIGlmIGxvY2FsICYgbm90IHF1 aWV0ICovCisgICAgICBjb25zdGFfbXQoKTsJCQkvKiBTdGFydCB0aGUgYXN5bmMgcmVhZCB0YXNr ICovCisjZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KKyAgICBmcmVlcmJ1Zihyc2VxdGJsWzBdKTsJ CS8qIEZyZWUgdGhlIGJ1ZmZlciB0aGUgR0VUIGNhbWUgaW4uICovCisgICAgc2lwa3QoJ1MnKTsJ CQkJLyogU2VuZCB0aGUgU2VuZC1Jbml0IHBhY2tldC4gKi8KKyAgICB6dGltZSgmdHApOwkJCQkv KiBHZXQgY3VycmVudCBkYXRlL3RpbWUgKi8KKyAgICB0bG9nKEYxMTAsIlRyYW5zYWN0aW9uIGJl Z2lucyIsdHAsMEwpOyAvKiBNYWtlIHRyYW5zYWN0aW9uIGxvZyBlbnRyeSAqLworICAgIHRsb2co RjExMCwiR2xvYmFsIGZpbGUgbW9kZToiLCBiaW5hcnkgPyAiYmluYXJ5IiA6ICJ0ZXh0IiwgMEwp OworICAgIHRsb2coRjEwMCwiIiwiIiwwKTsKKyAgICBkZWJ1ZyhGMTExLCJzaW5pdCBvayIsZmls bmFtLDApOworICAgIHJldHVybigxKTsKK30KKworaW50CisjaWZkZWYgQ0tfQU5TSUMKK3NpcGt0 KGNoYXIgYykJCQkJLyogU2VuZCBTIG9yIEkgcGFja2V0LiAqLworI2Vsc2UKK3NpcGt0KGMpIGNo YXIgYzsKKyNlbmRpZgorLyogc2lwa3QgKi8geworICAgIENIQVIgKnJwOyBpbnQgaywgeDsKKyAg ICBleHRlcm4gaW50IHNlbmRpcGt0czsKKyAgICBkZWJ1ZyhGMTAxLCJzaXBrdCBwa3RudW0iLCIi LHBrdG51bSk7IC8qIChiZXR0ZXIgYmUgMC4uLikgKi8KKyAgICB0dGZsdWkoKTsJCQkJLyogRmx1 c2ggcGVuZGluZyBpbnB1dC4gKi8KKyAgICAvKgorICAgICAgSWYgdGhpcyBpcyBhbiBJIHBhY2tl dCBhbmQgU0VUIFNFTkQgSS1QQUNLRVRTIGlzIE9GRiwgZG9uJ3Qgc2VuZCBpdDsKKyAgICAgIHNl dCBzc3RhdGUgdG8gJ1knIHdoaWNoIG1ha2VzIHRoZSBuZXh0IGlucHV0KCkgY2FsbCByZXR1cm4g J1knIGFzIGlmIHdlCisgICAgICBoYWQgcmVjZWl2ZWQgYW4gQUNLIHRvIHRoZSBJIHBhY2tldCB3 ZSBkaWRuJ3Qgc2VuZC4gIFRoaXMgaXMgdG8gd29yaworICAgICAgYXJvdW5kIGJ1Z2d5IEtlcm1p dCBzZXJ2ZXJzIHRoYXQgY2FuJ3QgaGFuZGxlIEkgcGFja2V0cy4KKyAgICAqLworICAgIGlmICgo c2VuZGlwa3RzID09IDApICYmIChjID09ICdJJykpIHsgLyogSSBwYWNrZXQgYnV0IGRvbid0IHNl bmQgSSBwa3RzPyAqLworCXNzdGF0ZSA9ICdZJzsJCQkgIC8qIFlpa2VzISAqLworCXJldHVybigw KTsJCQkgIC8qIChzZWUgaW5wdXQoKS4uKSovCisgICAgfQorICAgIGsgPSBzc2VxdGJsW3BrdG51 bV07CQkvKiBGaW5kIHNsb3QgZm9yIHRoaXMgcGFja2V0ICovCisgICAgaWYgKGsgPCAwKSB7CQkJ LyogTm8gc2xvdD8gKi8KKwlrID0gZ2V0c2J1Zih3aW5sbyA9IHBrdG51bSk7CS8qIE1ha2Ugb25l LiAqLworCWRlYnVnKEYxMDEsInNpcGt0IGdldHNidWYiLCIiLGspOworICAgIH0KKyAgICBycCA9 IHJwYXIoKTsJCQkvKiBHZXQgcHJvdG9jb2wgcGFyYW1ldGVycy4gKi8KKyAgICBpZiAoIXJwKSBy cCA9IChDSEFSICopIiI7CisgICAgeCA9IHNwYWNrKGMscGt0bnVtLChpbnQpc3RybGVuKChjaGFy ICopcnApLHJwKTsgLyogU2VuZCB0aGVtLiAqLworICAgIHJldHVybih4KTsKK30KKworLyogIFgg UyBJIE4gSSBUICAtLSAgUmV0cmFuc21pdCBTLXBhY2tldCAgKi8KKy8qCisgIEZvciB1c2UgaW4g dGhlIEdFVC1TRU5EIHNlcXVlbmNlLCB3aGVuIHdlIHN0YXJ0IHRvIHNlbmQsIGJ1dCByZWNlaXZl IGFub3RoZXIKKyAgY29weSBvZiB0aGUgR0VUIGNvbW1hbmQgYmVjYXVzZSB0aGUgcmVjZWl2ZXIg ZGlkbid0IGdldCBvdXIgUyBwYWNrZXQuCisgIFRoaXMgcmV0cmFuc21pdHMgdGhlIFMgcGFja2V0 IGFuZCBmcmVlcyB0aGUgcmVjZWl2ZSBidWZmZXIgZm9yIHRoZSBBQ0suCisgIFRoaXMgc3BlY2lh bCBjYXNlIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHBhY2tldCBudW1iZXIgemVybyBpcyBiZWluZyBy ZS11c2VkLgorKi8KK1ZPSUQKK3hzaW5pdCgpIHsKKyAgICBpbnQgazsKKyAgICBrID0gcnNlcXRi bFswXTsKKyAgICBkZWJ1ZyhGMTAxLCJ4c2luaXQgayIsIiIsayk7CisgICAgaWYgKGsgPiAtMSkK KyAgICBmcmVlcmJ1ZihrKTsKKyAgICByZXNlbmQoMCk7Cit9CisKKy8qICBSIEMgViBGIEkgTCAt LSBSZWNlaXZlIGEgZmlsZSAgKi8KKworLyoKKyAgSW5jb21pbmcgZmlsZW5hbWUgaXMgaW4gZGF0 YSBmaWVsZCBvZiBGIHBhY2tldC4KKyAgVGhpcyBmdW5jdGlvbiBkZWNvZGVzIGl0IGludG8gdGhl IHNydmNtZCBidWZmZXIsIHN1YnN0aXR1dGluZyBhbgorICBhbHRlcm5hdGUgImFzLW5hbWUiLCBp ZiBvbmUgd2FzIGdpdmVuLgorICBUaGVuIGl0IGRvZXMgYW55IHJlcXVlc3RlZCB0cmFuc2Zvcm1h dGlvbnMgKGxpa2UgY29udmVydGluZyB0bworICBsb3dlcmNhc2UpLCBhbmQgZmluYWxseSBpZiBh IGZpbGUgb2YgdGhlIHNhbWUgbmFtZSBhbHJlYWR5IGV4aXN0cywKKyAgdGFrZXMgdGhlIGRlc2ly ZWQgY29sbGlzaW9uIGFjdGlvbi4KKyAgUmV0dXJuczoKKyAgICAxIG9uIHN1Y2Nlc3MuCisgICAg MCBvbiBmYWlsdXJlLgorKi8KK2NoYXIgb2ZuMVtDS01BWFBBVEgrNF07CQkJLyogQnVmZmVyIGZv ciBvdXRwdXQgZmlsZSBuYW1lICovCitjaGFyICogb2ZuMjsJCQkJLyogUG9pbnRlciB0byBiYWNr dXAgZmlsZSBuYW1lICovCitpbnQgb2ZuMXg7CQkJCS8qIEZsYWcgb3V0cHV0IGZpbGUgYWxyZWFk eSBleGlzdHMgKi8KK0NLX09GRl9UIG9mbjFsZW4gPSAoQ0tfT0ZGX1QpMDsKK2ludCBvcG5lcnI7 CQkJCS8qIEZsYWcgZm9yIG9wZW4gZXJyb3IgKi8KKworaW50CQkJCQkvKiBSZXR1cm5zIHN1Y2Nl c3MgPyAxIDogMCAqLworcmN2ZmlsKG4pIGNoYXIgKm47IHsKKyAgICBleHRlcm4gaW50IGVuX2N3 ZDsKKyAgICBpbnQgaSwgc2tpcHRoaXM7CisgICAgY2hhciAqIG4yOworICAgIGNoYXIgKiBkaXNw bzsKKyNpZmRlZiBPUzJPTkxZCisgICAgY2hhciAqenMsICpsb25nbmFtZSwgKm5ld2xvbmduYW1l LCAqcG47IC8qIE9TLzIgbG9uZyBuYW1lIGl0ZW1zICovCisjZW5kaWYgLyogT1MyT05MWSAqLwor I2lmZGVmIERUSUxERQorICAgIGNoYXIgKmRpcnA7CisjZW5kaWYgLyogRFRJTERFICovCisgICAg aW50IGRpcmZsZywgeCwgeTsKKyNpZmRlZiBQSVBFU0VORAorICAgIGV4dGVybiBjaGFyICogcmN2 ZmlsdGVyOworI2VuZGlmIC8qIFBJUEVTRU5EICovCisjaWZkZWYgQ0FMSUJSQVRFCisgICAgZXh0 ZXJuIGludCBkZXN0OworICAgIENLX09GRl9UIGNzYXZlOworICAgIGNzYXZlID0gY2FsaWJyYXRl OwkJCS8qIFNvIHdlIGNhbiBkZWNvZGUgZmlsZW5hbWUgKi8KKyAgICBjYWxpYnJhdGUgPSAoQ0tf T0ZGX1QpMDsKKyNlbmRpZiAvKiBDQUxJQlJBVEUgKi8KKworICAgIG9mcGVybXMgPSAiIjsJCQkv KiBSZXNldCBvbGQtZmlsZSBwZXJtaXNzaW9ucyAqLworICAgIG9wbmVyciA9IDA7CQkJCS8qIE5v IG9wZW4gZXJyb3IgKHlldCkgKi8KKyAgICBvZm4yID0gTlVMTDsJCQkvKiBObyBuZXcgbmFtZSAo eWV0KSAqLworICAgIGxzc3RhdGUgPSAwOwkJCS8qIENhbmNlbCBsb2NraW5nLXNoaWZ0IHN0YXRl ICovCisgICAgc3J2cHRyID0gc3J2Y21kOwkJCS8qIERlY29kZSBmaWxlIG5hbWUgZnJvbSBwYWNr ZXQuICovCisKKyNpZmRlZiBVTklDT0RFCisgICAgeHBuYnl0ZSgtMSwwLDAsTlVMTCk7CQkvKiBS ZXNldCBVQ1MtMiBieXRlIGNvdW50ZXIuICovCisjZW5kaWYgLyogVU5JQ09ERSAqLworCisgICAg ZGVidWcoRjExMCwicmN2ZmlsIHJkYXRhcCIscmRhdGFwLDApOworICAgIGRlY29kZShyZGF0YXAs cHV0c3J2LDApOwkJLyogRG9uJ3QgeGxhdGUgY2hhcnNldHMuICovCisjaWZkZWYgQ0FMSUJSQVRF CisgICAgY2FsaWJyYXRlID0gY3NhdmU7CisgICAgaWYgKGRlc3QgPT0gREVTVF9OKSB7CisJY2Fs aWJyYXRlID0gMTsKKwljbWFyZzIgPSAiQ0FMSUJSQVRFIjsKKyAgICB9CisjZW5kaWYgLyogQ0FM SUJSQVRFICovCisgICAgaWYgKCpzcnZjbWQgPT0gJ1wwJykJCS8qIFdhdGNoIG91dCBmb3IgbnVs bCBGIHBhY2tldC4gKi8KKyAgICAgIGNrc3RybmNweSgoY2hhciAqKXNydmNtZCwiTk9OQU1FIixz cnZjbWRsZW4pOworICAgIG1ha2VzdHIoJnBycmZzcGVjLChjaGFyICopc3J2Y21kKTsJLyogTmV3 IHByZWxpbWluYXJ5IGZpbGVuYW1lICovCisjaWZkZWYgRFRJTERFCisgICAgaWYgKCpzcnZjbWQg PT0gJ34nKSB7CisJZGlycCA9IHRpbGRlX2V4cGFuZCgoY2hhciAqKXNydmNtZCk7IC8qIEV4cGFu ZCB0aWxkZSwgaWYgYW55LiAqLworCWlmICgqZGlycCAhPSAnXDAnKQorCSAgY2tzdHJuY3B5KChj aGFyICopc3J2Y21kLGRpcnAsc3J2Y21kbGVuKTsKKyAgICB9CisjZWxzZQorI2lmZGVmIE9TMgor ICAgIGlmIChpc2FscGhhKCpzcnZjbWQpICYmIHNydmNtZFsxXSA9PSAnOicgJiYgc3J2Y21kWzJd ID09ICdcMCcpCisgICAgICBja3N0cm5jYXQoKGNoYXIgKilzcnZjbWQsIk5PTkFNRSIsc3J2Y21k bGVuKTsKKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBEVElMREUgKi8KKworI2lmbmRlZiBO T0lDUAorI2lmbmRlZiBOT1NQTAorLyogRmlsZSBkaWFsb2cgd2hlbiBkb3dubG9hZGluZy4uLiAg Ki8KKyAgICBpZiAoCisjaWZkZWYgQ0tfQVBDCisJKGFwY2FjdGl2ZSA9PSBBUENfTE9DQUwgJiYg YWRsX2FzaykgfHwgLyogQXV0b2Rvd25sb2FkIHdpdGggQVNLICovCisjZW5kaWYgLyogQ0tfQVBD ICovCisJKGNsY21kcyAmJiBoYXZldXJsKQkJLyogT3IgImtlcm1pdDoiIG9yICJpa3NkOiIgVVJM ICovCisJKSB7CisJaW50IHg7CisJY2hhciBmbmJ1ZltDS01BWFBBVEgrMV07CS8qIFJlc3VsdCBi dWZmZXIgKi8KKwljaGFyICogcHJlZmFjZTsKKworCWlmIChjbGNtZHMgJiYgaGF2ZXVybCkKKwkg IHByZWZhY2UgPSAiXHJcbkluY29taW5nIGZpbGUgZnJvbSBLZXJtaXQgc2VydmVyLi4uXHJcblwK K1BsZWFzZSBjb25maXJtIG91dHB1dCBmaWxlIHNwZWNpZmljYXRpb24gb3Igc3VwcGx5IGFuIGFs dGVybmF0aXZlOiI7CisJZWxzZQorCSAgcHJlZmFjZSA9ICJcclxuSW5jb21pbmcgZmlsZSBmcm9t IHJlbW90ZSBLZXJtaXQuLi5cclxuXAorUGxlYXNlIGNvbmZpcm0gb3V0cHV0IGZpbGUgc3BlY2lm aWNhdGlvbiBvciBzdXBwbHkgYW4gYWx0ZXJuYXRpdmU6IjsKKworCXggPSB1cV9maWxlKHByZWZh Y2UsCQkvKiBQcmVmYWNlICovCisJCSAgICBOVUxMLAkJLyogUHJvbXB0IChsZXQgdXFfZmlsZSgp IGJ1aWx0IGl0KSAqLworCQkgICAgMywJCQkvKiBPdXRwdXQgZmlsZSAqLworCQkgICAgTlVMTCwJ CS8qIEhlbHAgdGV4dCAqLworCQkgICAgKGNoYXIgKilzcnZjbWQsCS8qIERlZmF1bHQgKi8KKwkJ ICAgIGZuYnVmLAkJLyogUmVzdWx0IGJ1ZmZlciAqLworCQkgICAgQ0tNQVhQQVRIKzEJCS8qIFNp emUgb2YgcmVzdWx0IGJ1ZmZlciAqLworCQkgICAgKTsKKwlpZiAoeCA8IDEpIHsJCQkvKiBSZWZ1 c2VkICovCisJICAgIHJmX2VyciA9ICJSZWZ1c2VkIGJ5IHVzZXIiOworCSAgICByZXR1cm4oMCk7 CisJfQorCWNrc3RybmNweSgoY2hhciAqKXNydmNtZCxmbmJ1ZixDS01BWFBBVEgrMSk7CisJaWYg KGlzYWJzb2x1dGUoKGNoYXIgKilzcnZjbWQpKSB7IC8qIFVzZXIgZ2F2ZSBhbiBhYnNvbHV0ZSBw YXRoICovCisJICAgIGdfZm5ycGF0aCA9IGZucnBhdGg7CS8qIFNhdmUgY3VycmVudCBSRUNFSVZF IFBBVEhOQU1FUyAqLworCSAgICBmbnJwYXRoID0gUEFUSF9BQlM7CQkvKiBzd2l0Y2ggdG8gQUJT T0xVVEUgKi8KKwl9CisgICAgfQorI2VuZGlmIC8qIE5PU1BMICovCisjZW5kaWYgLyogTk9JQ1Ag Ki8KKworICAgIGlmICghRU5BQkxFRChlbl9jd2QpKSB7CQkvKiBDRCBpcyBkaXNhYmxlZCAqLwor CXpzdHJpcCgoY2hhciAqKShzcnZjbWQrMiksJm4yKTsgLyogYW5kIHRoZXkgaW5jbHVkZWQgYSBw YXRobmFtZSwgKi8KKwlpZiAoc3RyY21wKChjaGFyICopKHNydmNtZCsyKSxuMikpIHsgLyogc28g cmVmdXNlLiAqLworCSAgICByZl9lcnIgPSAiQWNjZXNzIGRlbmllZCI7CisJICAgIHJldHVybigw KTsKKwl9CisgICAgfQorI2lmZGVmIENPTU1FTlQKKyAgICAvKiBXcm9uZyBwbGFjZSBmb3IgdGhp cyAtLSBoYW5kbGUgY21hcmcyIGZpcnN0IC0tIHNlZSBiZWxvdy4uLiAgKi8KKworICAgIGlmICh6 Y2hrbygoY2hhciAqKXNydmNtZCkgPCAwKSB7CS8qIFByZWNoZWNrIGZvciB3cml0ZSBhY2Nlc3Mg Ki8KKwlkZWJ1ZyhGMTEwLCJyY3ZmaWwgYWNjZXNzIGRlbmllZCIsc3J2Y21kLDApOworCXJmX2Vy ciA9ICJXcml0ZSBhY2Nlc3MgZGVuaWVkIjsKKwlkaXNjYXJkID0gb3BuZXJyID0gMTsKKwlyZXR1 cm4oMCk7CisgICAgfQorICAgIHh4c2NyZWVuKFNDUl9GTiwwLDBsLChjaGFyICopc3J2Y21kKTsg LyogUHV0IGl0IG9uIHNjcmVlbiBpZiBsb2NhbCAqLworICAgIGRlYnVnKEYxMTAsInJjdmZpbCBz cnZjbWQgMSIsc3J2Y21kLDApOworICAgIHRsb2coRjExMCwiUmVjZWl2aW5nIiwoY2hhciAqKXNy dmNtZCwwTCk7IC8qIFRyYW5zYWN0aW9uIGxvZyBlbnRyeSAqLworI2VuZGlmIC8qIENPTU1FTlQg Ki8KKworICAgIHNraXB0aGlzID0gMDsJCQkvKiBUaGlzIGZpbGUgaW4gb3VyIGV4Y2VwdGlvbiBs aXN0PyAqLworICAgIGZvciAoaSA9IDA7IGkgPCBOU05ERVhDRVBUOyBpKyspIHsKKwlpZiAoIXJj dmV4Y2VwdFtpXSkgeworCSAgICBicmVhazsKKwl9CisJaWYgKGNrbWF0Y2gocmN2ZXhjZXB0W2ld LChjaGFyICopc3J2Y21kLGZpbGVjYXNlLDEpKSB7CisJICAgIHNraXB0aGlzID0gMTsKKwkgICAg YnJlYWs7CisJfQorICAgIH0KKworI2lmZGVmIERFQlVHCisgICAgaWYgKGRlYmxvZyAmJiBza2lw dGhpcykgeworCWRlYnVnKEYxMTEsInJjdmZpbCByY3ZleGNlcHQiLHJjdmV4Y2VwdFtpXSxpKTsK KwlkZWJ1ZyhGMTEwLCJyY3ZmaWwgc2tpcHBpbmciLHNydmNtZCwwKTsKKyAgICB9CisjZW5kaWYg LyogREVCVUcgKi8KKworICAgIGlmIChza2lwdGhpcykgewkJCS8qIFNraXBwaW5nIHRoaXMgZmls ZSAqLworCWRpc2NhcmQgPSAxOworCXJlamVjdGlvbiA9IDE7CisJcmZfZXJyID0gIkV4Y2VwdGlv biBsaXN0IjsKKwlkZWJ1ZyhGMTAxLCJyY3ZmaWwgZGlzY2FyZCIsIiIsZGlzY2FyZCk7CisJdGxv ZyhGMTAwLCIgcmVmdXNlZDogZXhjZXB0aW9uIGxpc3QiLCIiLDApOworCXJldHVybigxKTsKKyAg ICB9CisKKyAgICAvKiBGaWxlIGlzIG5vdCBpbiBleGNlcHRpb24gbGlzdCAqLworCisgICAgaWYg KCFjbWFyZzIpCQkJLyogTm8gY29yZSBkdW1wcyBwbGVhc2UgKi8KKyAgICAgIGNtYXJnMiA9ICIi OworICAgIGRlYnVnKEYxMTAsInJjdmZpbCBjbWFyZzIiLGNtYXJnMiwwKTsKKworICAgIGlmICgq Y21hcmcyKSB7CQkJLyogQ2hlY2sgZm9yIGFsdGVybmF0ZSBuYW1lICovCisjaWZuZGVmIE5PU1BM CisJaW50IHk7IGNoYXIgKnM7CQkJLyogUGFzcyBpdCB0aHJ1IHRoZSBldmFsdWF0b3IgKi8KKwll eHRlcm4gaW50IGNtZF9xdW90aW5nOworCWlmIChjbWRfcXVvdGluZykgeworCSAgICB5ID0gTUFY UlA7CisJICAgIGNrc3RybmNweShvZm4xLChjaGFyICopc3J2Y21kLENLTUFYUEFUSCsxKTsgLyog Zm9yIFx2KGZpbGVuYW1lKSAqLworCSAgICBzID0gKGNoYXIgKilzcnZjbWQ7CisJICAgIHp6c3Ry aW5nKGNtYXJnMiwmcywmeSk7CisJfSBlbHNlCisJICAqc3J2Y21kID0gTlVMOworCWlmICghKnNy dmNtZCkJCQkvKiBJZiB3ZSBnb3Qgc29tZXRoaW5nICovCisjZW5kaWYgLyogTk9TUEwgKi8KKwkg IGNrc3RybmNweSgoY2hhciAqKXNydmNtZCxjbWFyZzIsc3J2Y21kbGVuKTsKKyAgICB9CisgICAg ZGVidWcoRjExMCwicmN2ZmlsIHNydmNtZCAyIixzcnZjbWQsMCk7CisKKyNpZmRlZiBQSVBFU0VO RAorICAgIC8qIElmIGl0IHN0YXJ0cyB3aXRoICJiYW5nIiwgaXQncyBhIHBpcGUsIG5vdCBhIGZp bGUuICovCisgICAgaWYgKHVzZXBpcGVzICYmIHByb3RvY29sID09IFBST1RPX0sgJiYgKnNydmNt ZCA9PSAnIScgJiYgIXJjdmZpbHRlcikgeworCUNIQVIgKnM7CisJcyA9IHNydmNtZCsxOwkJCS8q IHNydmNtZFtdIGlzIG5vdCBhIHBvaW50ZXIuICovCisJd2hpbGUgKCpzKSB7CQkJLyogU28gd2Ug aGF2ZSB0byBzbGlkZSB0aGUgY29udGVudHMgKi8KKwkgICAgKihzLTEpID0gKnM7CQkvKiBvdmVy IDEgc3BhY2UgdG8gdGhlIGxlZnQuICovCisJICAgIHMrKzsKKwl9CisJKihzLTEpID0gTlVMOwor CXBpcGVzZW5kID0gMTsKKyAgICB9CisjZW5kaWYgLyogUElQRVNFTkQgKi8KKworI2lmZGVmIENP TU1FTlQKKy8qCisgIFRoaXMgaXMgY29tbWVudGVkIG91dCBiZWNhdXNlIHdlIG5lZWQgdG8ga25v dyB3aGV0aGVyIHRoZSBuYW1lIHdlIGFyZQorICB1c2luZyB3YXMgc3BlY2lmaWVkIGJ5IHRoZSBs b2NhbCB1c2VyIGFzIGFuIG92ZXJyaWRlLCBvciBjYW1lIGZyb20gdGhlCisgIGluY29taW5nIHBh Y2tldC4gIEluIHRoZSBmb3JtZXIgY2FzZSwgd2UgZG9uJ3QgZG8gc3R1ZmYgdG8gaXQgKGxpa2UK KyAgc3RyaXAgdGhlIHBhdGhuYW1lKSB0aGF0IHdlIG1pZ2h0IGRvIHRvIGl0IGluIHRoZSBsYXR0 ZXIuCisqLworICAgIGNtYXJnMiA9ICIiOwkJCS8qIERvbmUgd2l0aCBhbHRlcm5hdGUgbmFtZSAq LworI2VuZGlmIC8qIENPTU1FTlQgKi8KKworICAgIGlmICgoaW50KXN0cmxlbigoY2hhciAqKXNy dmNtZCkgPiBDS01BWFBBVEgpIC8qIFdhdGNoIG91dCBmb3Igb3ZlcmZsb3cgKi8KKyAgICAgICoo c3J2Y21kICsgQ0tNQVhQQVRIIC0gMSkgPSBOVUw7CisKKyAgICAvKiBBdCB0aGlzIHBvaW50LCBz cnZjbWRbXSBjb250YWlucyB0aGUgaW5jb21pbmcgZmlsZW5hbWUgb3IgYXMtbmFtZS4gKi8KKyAg ICAvKiBTbyBOT1cgd2UgY2hlY2sgZm9yIHdyaXRlIGFjY2Vzcy4gKi8KKworICAgIGlmICh6Y2hr bygoY2hhciAqKXNydmNtZCkgPCAwKSB7CS8qIFByZWNoZWNrIGZvciB3cml0ZSBhY2Nlc3MgKi8K KwlkZWJ1ZyhGMTEwLCJyY3ZmaWwgYWNjZXNzIGRlbmllZCIsc3J2Y21kLDApOworCXJmX2VyciA9 ICJXcml0ZSBhY2Nlc3MgZGVuaWVkIjsKKwlkaXNjYXJkID0gb3BuZXJyID0gMTsKKwlyZXR1cm4o MCk7CisgICAgfQorICAgIHh4c2NyZWVuKFNDUl9GTiwwLDBsLChjaGFyICopc3J2Y21kKTsgLyog UHV0IGl0IG9uIHNjcmVlbiBpZiBsb2NhbCAqLworICAgIGRlYnVnKEYxMTAsInJjdmZpbCBzcnZj bWQgMSIsc3J2Y21kLDApOworICAgIHRsb2coRjExMCwiUmVjZWl2aW5nIiwoY2hhciAqKXNydmNt ZCwwTCk7IC8qIFRyYW5zYWN0aW9uIGxvZyBlbnRyeSAqLworCisjaWZkZWYgQ0tfTEFCRUxFRAor I2lmZGVmIFZNUworLyoKKyAgSWYgd2UgaGF2ZSBhbiBhcy1uYW1lLCB0aGlzIG92ZXJyaWRlcyB0 aGUgaW50ZXJuYWwgbmFtZSBpZiB3ZSBhcmUgZG9pbmcKKyAgYSBsYWJlbGVkLW1vZGUgdHJhbnNm ZXIuCisqLworICAgIGlmICgqY21hcmcyKSB7CisJZXh0ZXJuIGludCBsZl9vcHRzOworCWxmX29w dHMgJj0gfkxCTF9OQU07CisgICAgfQorI2VuZGlmIC8qIFZNUyAqLworI2VuZGlmIC8qIENLX0xB QkVMRUQgKi8KKworICAgIGRlYnVnKEYxMTEsInJjdmZpbCBwaXBlc2VuZCIsc3J2Y21kLHBpcGVz ZW5kKTsKKworI2lmZGVmIFBJUEVTRU5ECisgICAgLyogU2tpcCBhbGwgdGhlIGZpbGVuYW1lIG1h bmlwdWxhdGlvbiBhbmQgY29sbGlzaW9uIGFjdGlvbnMgKi8KKyAgICBpZiAocGlwZXNlbmQpIHsK KwlkaXJmbGcgPSAwOworCW9mbjFbMF0gPSAnISc7CisJY2tzdHJuY3B5KCZvZm4xWzFdLChjaGFy ICopc3J2Y21kLENLTUFYUEFUSCsxKTsKKwlja3N0cm5jcHkobixvZm4xLENLTUFYUEFUSCsxKTsK Kwlja3N0cm5jcHkoZnNwZWMsb2ZuMSxDS01BWFBBVEgrMSk7CisJbWFrZXN0cigmcHJmc3BlYyxm c3BlYyk7CS8qIE5ldyBwcmVsaW1pbmFyeSBmaWxlbmFtZSAqLworCWRlYnVnKEYxMTAsInJjdmZp bCBwaXBlc2VuZCIsb2ZuMSwwKTsKKwlnb3RvIHJjdmZpbHg7CisgICAgfQorI2VuZGlmIC8qIFBJ UEVTRU5EICovCisvKgorICBUaGlzIGlzIHRvIGF2b2lkIHBhc3NpbmcgZW1haWwgc3ViamVjdHMg dGhyb3VnaCBuenJ0b2woKS4KKyAgV2UgaGF2ZW4ndCB5ZXQgcmVjZWl2ZWQgdGhlIEEgcGFja2V0 IHNvIHdlIGRvbid0IHlldCBrbm93IGl0J3MgZS1tYWlsLAorICBzbyBpbiBmYWN0IHdlIGdvIGFo ZWFkIGFuZCBjb252ZXJ0IGl0IGFueXdheSwgYnV0IGxhdGVyIHdlIGdldCB0aGUKKyAgb3JpZ2lu YWwgYmFjayBmcm9tIG9maWxuYW1bXS4KKyovICAKKyAgICBkaXNwb3MgPSAwOworICAgIGNrc3Ry bmNweShvZmlsbmFtLChjaGFyICopc3J2Y21kLENLTUFYUEFUSCsxKTsKKworI2lmZGVmIE5aTFRP UgorICAgIGlmICgqY21hcmcyKQorICAgICAgY2tzdHJuY3B5KChjaGFyICopb2ZuMSwoY2hhciAq KXNydmNtZCxDS01BWFBBVEgrMSk7CisgICAgZWxzZQorICAgICAgbnpydG9sKChjaGFyICopc3J2 Y21kLAkJLyogRmlsZW5hbWUgZnJvbSBwYWNrZXQgKi8KKwkgICAgIChjaGFyICopb2ZuMSwJCS8q IFdoZXJlIHRvIHB1dCByZXN1bHQgKi8KKwkgICAgIGZuY252LAkJCS8qIEZpbGVuYW1lIGNvbnZl cnNpb24gKi8KKwkgICAgIGZucnBhdGgsCQkJLyogUGF0aG5hbWUgaGFuZGxpbmcgKi8KKwkgICAg IENLTUFYUEFUSAkJCS8qIFNpemUgb2YgcmVzdWx0IGJ1ZmZlciAqLworCSAgICAgKTsKKyNlbHNl CisgICAgZGVidWcoRjEwMSwicmN2ZmlsIGZucnBhdGgiLCIiLGZucnBhdGgpOyAvKiBIYW5kbGUg cGF0aG5hbWVzICovCisgICAgaWYgKGZucnBhdGggPT0gUEFUSF9PRkYgJiYgISpjbWFyZzIpIHsg LyogUkVDRUlWRSBQQVRITkFNRVMgT0ZGPyAqLworCWNoYXIgKnQ7CQkJLyogWWVzLiAqLworCXpz dHJpcCgoY2hhciAqKXNydmNtZCwmdCk7CS8qIElmIHRoZXJlIGlzIGEgcGF0aG5hbWUsIHN0cmlw IGl0ICovCisJZGVidWcoRjExMCwicmN2ZmlsIFBBVEhfT0ZGIHpzdHJpcCIsdCwwKTsKKwlpZiAo IXQpCQkJCS8qIEJlIHN1cmUgd2UgZGlkbid0IHN0cmlwIHRvbyBtdWNoICovCisJICBzcHJpbnRm KG9mbjEsIkZJTEUlMDJsZCIsZmlsY250KTsKKwllbHNlIGlmICgqdCA9PSAnXDAnKQorCSAgc3By aW50ZihvZm4xLCJGSUxFJTAybGQiLGZpbGNudCk7CisJZWxzZQorCSAgY2tzdHJuY3B5KG9mbjEs dCxDS01BWFBBVEgrMSk7CisJY2tzdHJuY3B5KChjaGFyICopc3J2Y21kLG9mbjEsc3J2Y21kbGVu KTsgLyogTm93IGNvcHkgaXQgYmFjay4gKi8KKyAgICB9CisvKgorICBTRVQgUkVDRUlWRSBQQVRI TkFNRVMgUkVMQVRJVkUuLi4KKyAgVGhlIGZvbGxvd2luZyBkb2Vzbid0IGJlbG9uZyBoZXJlIGJ1 dCBkb2luZyBpdCByaWdodCB3b3VsZCByZXF1aXJlCisgIGRlZmluaW5nIGFuZCBpbXBsZW1lbnRp bmcgYSBuZXcgZmlsZSByb3V0aW5lIGZvciBhbGwgY2s/ZmlvLmMgbW9kdWxlcy4KKyAgU28gZm9y IG5vdy4uLgorKi8KKyNpZmRlZiBVTklYT1JPU0sKKyAgICBlbHNlIGlmIChmbnJwYXRoID09IFBB VEhfUkVMICYmICEqY21hcmcyKSB7CisJaWYgKGlzYWJzb2x1dGUoKGNoYXIgKilzcnZjbWQpKSB7 CisJICAgIG9mbjFbMF0gPSAnLic7CisJICAgIGNrc3RybmNweSgmb2YxblsxXSwoY2hhciAqKXNy dmNtZCxDS01BWFBBVEgrMSk7CisJICAgIGNrc3RybmNweSgoY2hhciAqKXNydmNtZCxvZm4xLHNy dmNtZGxlbik7CisJICAgIGRlYnVnKEYxMTAsInJjdmZpbCBQQVRIX1JFTCIsb2ZuMSwwKTsKKwl9 CisgICAgfQorI2Vsc2UKKyNpZmRlZiBPUzIKKyAgICBlbHNlIGlmIChmbnJwYXRoID09IFBBVEhf UkVMICYmICEqY21hcmcyKSB7CisJaWYgKGlzYWJzb2x1dGUoKGNoYXIgKilzcnZjbWQpKSB7CisJ ICAgIGNoYXIgKnAgPSAoY2hhciAqKXNydmNtZDsKKwkgICAgaWYgKGlzYWxwaGEoKnApICYmICoo cCsxKSA9PSAnOicpCisJICAgICAgcCArPSAyOworCSAgICBpZiAoKnAgPT0gJ1xcJyB8fCAqcCA9 PSAnLycpCisJICAgICAgcCsrOworCSAgICBja3N0cm5jcHkob2ZuMSxwLENLTUFYUEFUSCsxKTsK KwkgICAgY2tzdHJuY3B5KChjaGFyICopc3J2Y21kLG9mbjEsc3J2Y21kbGVuKTsKKwkgICAgZGVi dWcoRjExMCwicmN2ZmlsIE9TMiBQQVRIX1JFTCIsb2ZuMSwwKTsKKwl9CisgICAgfQorI2VuZGlm IC8qIE9TMiAqLworI2VuZGlmIC8qIFVOSVhPUk9TSyAqLworCisgICAgLyogTm93IHNydmNtZCBj b250YWlucyBpbmNvbWluZyBmaWxlbmFtZSB3aXRoIHBhdGggcG9zc2libHkgc3RyaXBwZWQgKi8K KworICAgIGlmIChmbmNudikJCQkJLyogRklMRSBOQU1FUyBDT05WRVJURUQ/ICovCisgICAgICB6 cnRvbCgoY2hhciAqKXNydmNtZCwoY2hhciAqKW9mbjEpOyAvKiBZZXMsIGNvbnZlcnQgdG8gbG9j YWwgZm9ybSAqLworICAgIGVsc2UKKyAgICAgIGNrc3RybmNweShvZm4xLChjaGFyICopc3J2Y21k LENLTUFYUEFUSCsxKTsgLyogTm8sIGNvcHkgbGl0ZXJhbGx5LiAqLworI2VuZGlmIC8qIE5aTFRP UiAqLworCisjaWZkZWYgUElQRVNFTkQKKyAgICBpZiAocmN2ZmlsdGVyKSB7CisJY2hhciAqIHAg PSBOVUxMLCAqIHE7CisJaW50IG5uID0gTUFYUlA7CisJcGlwZXNlbmQgPSAxOworCWRlYnVnKEYx MTAsInJjdmZpbCByY3ZmaWx0ZXIgIixyY3ZmaWx0ZXIsMCk7CisjaWZuZGVmIE5PU1BMCisJaWYg KChwID0gKGNoYXIgKikgbWFsbG9jKG5uICsgMSkpKSB7CisJICAgIHEgPSBwOworI2lmZGVmIENP TU1FTlQKKyAgICAgICAgICAgIC8qIFdlIGhhdmUgYWxyZWFkeSBwcm9jZXNzZWQgc3J2Y21kIGFu ZCBwbGFjZWQgaXQgaW50byBvZm4xICovCisgICAgICAgICAgICBja3N0cm5jcHkob2ZuMSwoY2hh ciAqKXNydmNtZCxDS01BWFBBVEgrMSk7IC8qIEZvciBcdihmaWxlbmFtZSkgKi8KKyNlbmRpZiAv KiBDT01NRU5UICovCisJICAgIGRlYnVnKEYxMTAsInJjdmZpbGUgcGlwZXNlbmQgZmlsdGVyIixy Y3ZmaWx0ZXIsMCk7CisJICAgIHp6c3RyaW5nKHJjdmZpbHRlciwmcCwmbm4pOworCSAgICBkZWJ1 ZyhGMTExLCJyY3ZmaWwgcGlwZW5hbWUiLHEsbm4pOworCSAgICBpZiAobm4gPD0gMCkgeworCQlw cmludGYoCisJCSAgICAgICAiP1NvcnJ5LCByZWNlaXZlIGZpbHRlciArIGZpbGVuYW1lIHRvbyBs b25nLCAlZCBtYXguXG4iLAorCQkgICAgICAgQ0tNQVhQQVRICisJCSAgICAgICApOworCQlyZl9l cnIgPSAiTmFtZSB0b28gbG9uZyI7CisJCWZyZWUocSk7CisJCXJldHVybigwKTsKKwkgICAgfQor CSAgICBja3N0cm5jcHkoKGNoYXIgKilzcnZjbWQscSxNQVhSUCk7CisJICAgIGZyZWUocSk7CisJ fQorI2VuZGlmIC8qIE5PU1BMICovCisgICAgfQorI2VuZGlmIC8qIFBJUEVTRU5EICovCisKKyAg ICAvKiBOb3cgdGhlIGluY29taW5nIGZpbGVuYW1lLCBwb3NzaWJseSBjb252ZXJ0ZWQsIGlzIGlu IG9mbjFbXS4gKi8KKworI2lmZGVmIE9TMgorICAgIC8qIERvbid0IHJlZnVzZSB0aGUgZmlsZSBq dXN0IGJlY2F1c2UgdGhlIG5hbWUgaXMgaWxsZWdhbC4gKi8KKyAgICBpZiAoIUlzRmlsZU5hbWVW YWxpZChvZm4xKSkgewkvKiBOYW1lIGlzIE9LIGZvciBPUy8yPyAqLworI2lmZGVmIE9TMk9OTFkK KwljaGFyICp6cyA9IE5VTEw7CisJenN0cmlwKG9mbjEsICZ6cyk7CQkvKiBOb3QgdmFsaWQsIHN0 cmlwIHVuY29uZGl0aW9uYWxseSAqLworCWlmICh6cykgeworCSAgICBpZiAoaWF0dHIubG9uZ25h bWUubGVuICYmCS8qIEZyZWUgcHJldmlvdXMgbG9uZ25hbWUsIGlmIGFueSAqLworCQlpYXR0ci5s b25nbmFtZS52YWwpCisJICAgICAgZnJlZShpYXR0ci5sb25nbmFtZS52YWwpOworCSAgICBpYXR0 ci5sb25nbmFtZS5sZW4gPSBzdHJsZW4oenMpOyAvKiBTdG9yZSBpbiBhdHRyaWJ1dGUgc3RydWN0 dXJlICovCisJICAgIGlhdHRyLmxvbmduYW1lLnZhbCA9IChjaGFyICopIG1hbGxvYyhpYXR0ci5s b25nbmFtZS5sZW4gKyAxKTsKKwkgICAgaWYgKGlhdHRyLmxvbmduYW1lLnZhbCkJLyogUmVtZW1i ZXIgdGhpcyAoaWxsZWdhbCkgbmFtZSAqLworCSAgICAgIHN0cmNweShpYXR0ci5sb25nbmFtZS52 YWwsIHpzKTsgLyogc2FmZSAqLworCX0KKyNlbmRpZiAvKiBPUzJPTkxZICovCisJZGVidWcoRjEx MCwicmN2ZmlsOiBpbnZhbGlkIGZpbGUgbmFtZSIsb2ZuMSwwKTsKKwlDaGFuZ2VOYW1lRm9yRkFU KG9mbjEpOwkvKiBDaGFuZ2UgdG8gYW4gYWNjZXB0YWJsZSBuYW1lICovCisJZGVidWcoRjExMCwi cmN2ZmlsOiBGQVQgZmlsZSBuYW1lIixvZm4xLDApOworCisgICAgfSBlbHNlIHsJCQkJLyogTmFt ZSBpcyBPSy4gKi8KKworCWRlYnVnKEYxMTAsInJjdmZpbDogdmFsaWQgZmlsZSBuYW1lIixvZm4x LDApOworI2lmZGVmIE9TMk9OTFkKKwlpZiAoaWF0dHIubG9uZ25hbWUubGVuICYmCisJICAgICBp YXR0ci5sb25nbmFtZS52YWwpCS8qIEZyZWUgcHJldmlvdXMgbG9uZ25hbWUsIGlmIGFueSAqLwor CSAgZnJlZShpYXR0ci5sb25nbmFtZS52YWwpOworCWlhdHRyLmxvbmduYW1lLmxlbiA9IDA7CisJ aWF0dHIubG9uZ25hbWUudmFsID0gTlVMTDsJLyogVGhpcyBmaWxlIGRvZXNuJ3QgbmVlZCBhIGxv bmduYW1lICovCisjZW5kaWYgLyogT1MyT05MWSAqLworICAgIH0KKyNlbmRpZiAvKiBPUzIgKi8K KyAgICBkZWJ1ZyhGMTEwLCJyY3ZmaWwgYXMiLG9mbjEsMCk7CisKKy8qIEZpbGVuYW1lIGNvbGxp c2lvbiBhY3Rpb24gc2VjdGlvbi4gKi8KKworICAgIGRpcmZsZyA9CQkJCS8qIElzIGl0IGEgZGly ZWN0b3J5IG5hbWU/ICovCisjaWZkZWYgQ0tfVE1QRElSCisgICAgICAgIGlzZGlyKG9mbjEpCisj ZWxzZQorCTAKKyNlbmRpZiAvKiBDS19UTVBESVIgKi8KKwkgIDsKKyAgICBkZWJ1ZyhGMTAxLCJy Y3ZmaWwgZGlyZmxnIiwiIixkaXJmbGcpOworICAgIG9mbjFsZW4gPSB6Y2hraShvZm4xKTsJCS8q IEZpbGUgYWxyZWFkeSBleGlzdHM/ICovCisgICAgZGVidWcoRjExMSwicmN2ZmlsIG9mbjFsZW4i LG9mbjEsb2ZuMWxlbik7CisgICAgb2ZuMXggPSAob2ZuMWxlbiAhPSAoQ0tfT0ZGX1QpLTEpOwor CisgICAgaWYgKCAoCisjaWZkZWYgVU5JWAorCXN0cmNtcChvZm4xLCIvZGV2L251bGwiKSAmJgkv KiBJdCdzIG5vdCB0aGUgbnVsbCBkZXZpY2U/ICovCisjZWxzZQorI2lmZGVmIE9TSworCXN0cmNt cChvZm4xLCIvbmlsIikgJiYKKyNlbmRpZiAvKiBPU0sgKi8KKyNlbmRpZiAvKiBVTklYICovCisJ IXN0ZG91ZiApICYmCQkJLyogTm90IGNvcHlpbmcgdG8gc3RhbmRhcmQgb3V0cHV0PyAqLworCW9m bjF4IHx8CQkJLyogRmlsZSBvZiBzYW1lIG5hbWUgZXhpc3RzPyAqLworCWRpcmZsZyApIHsJCQkv KiBPciBmaWxlIGlzIGEgZGlyZWN0b3J5PyAqLworICAgICAgICBkZWJ1ZyhGMTExLCJyY3ZmaWwg ZXhpc3RzIixvZm4xLGZuY2FjdCk7CisjaWZkZWYgQ0tfUEVSTVMKKwlvZnBlcm1zID0gemdwZXJt KChjaGFyICopb2ZuMSk7CS8qIEdldCBvbGQgZmlsZSdzIHBlcm1pc3Npb25zICovCisJZGVidWco RjExMCwicmN2ZmlsIHBlcm1zIixvZnBlcm1zLDApOworI2VuZGlmIC8qIENLX1BFUk1TICovCisK KwlkZWJ1ZyhGMTAxLCJyY3ZmaWwgZm5jYWN0IiwiIixmbmNhY3QpOworCXN3aXRjaCAoZm5jYWN0 KSB7CQkvKiBZZXMsIGRvIHdoYXQgdXNlciBzYWlkLiAqLworCSAgY2FzZSBYWUZYX0E6CQkJLyog QXBwZW5kICovCisJICAgIG9mcGVybXMgPSAiIjsKKwkgICAgZGVidWcoRjEwMCwicmN2ZmlsIGFw cGVuZCIsIiIsMCk7CisJICAgIGlmIChkaXJmbGcpIHsKKwkJcmZfZXJyID0gIkNhbid0IGFwcGVu ZCB0byBhIGRpcmVjdG9yeSI7CisJCXRsb2coRjEwMCwiIGVycm9yIC0gY2FuJ3QgYXBwZW5kIHRv IGRpcmVjdG9yeSIsIiIsMCk7CisJCWRpc2NhcmQgPSBvcG5lcnIgPSAxOworCQlyZXR1cm4oMCk7 CisJICAgIH0KKwkgICAgdGxvZyhGMTEwLCIgYXBwZW5kaW5nIHRvIixvZm4xLDApOworCSAgICBi cmVhazsKKyNpZmRlZiBDT01NRU5UCisJICBjYXNlIFhZRlhfUToJCQkvKiBRdWVyeSAoQXNrKSAq LworCSAgICBicmVhazsJCQkvKiBub3QgaW1wbGVtZW50ZWQgKi8KKyNlbmRpZiAvKiBDT01NRU5U ICovCisJICBjYXNlIFhZRlhfQjoJCQkvKiBCYWNrdXAgKHJlbmFtZSBvbGQgZmlsZSkgKi8KKwkg ICAgaWYgKGRpcmZsZykgeworCQlyZl9lcnIgPSAiQ2FuJ3QgcmVuYW1lIGV4aXN0aW5nIGRpcmVj dG9yeSI7CisJCXRsb2coRjEwMCwiIGVycm9yIC0gY2FuJ3QgcmVuYW1lIGRpcmVjdG9yeSIsIiIs MCk7CisJCWRpc2NhcmQgPSBvcG5lcnIgPSAxOworCQlyZXR1cm4oMCk7CisJICAgIH0KKwkgICAg em5ld24ob2ZuMSwmb2ZuMik7CQkvKiBHZXQgbmV3IHVuaXF1ZSBuYW1lICovCisJICAgIHRsb2co RjExMCwiIGJhY2t1cDoiLG9mbjIsMCk7CisJICAgIGRlYnVnKEYxMTAsInJjdmZpbCBiYWNrdXAg b2ZuMSIsb2ZuMSwwKTsKKwkgICAgZGVidWcoRjExMCwicmN2ZmlsIGJhY2t1cCBvZm4yIixvZm4y LDApOworI2lmZGVmIENLX0xBQkVMRUQKKyNpZmRlZiBPUzJPTkxZCisvKgorICBJbiBjYXNlIHRo aXMgaXMgYSBGQVQgZmlsZSBzeXN0ZW0sIHdlIGNhbid0IGNoYW5nZSBvbmx5IHRoZSBGQVQgbmFt ZSwgd2UKKyAgYWxzbyBoYXZlIHRvIGNoYW5nZSB0aGUgbG9uZ25hbWUgZnJvbSB0aGUgZXh0ZW5k ZWQgYXR0cmlidXRlcyBibG9jay4KKyAgT3RoZXJ3aXNlLCB3ZSdsbCBoYXZlIG1hbnkgZmlsZXMg d2l0aCB0aGUgc2FtZSBsb25nbmFtZSBhbmQgaWYgd2UgY29weSB0aGVtCisgIHRvIGFuIEhQRlMg dm9sdW1lLCBvbmx5IG9uZSB3aWxsIHN1cnZpdmUuCisqLworCSAgICBpZiAob3MyZ2V0bG9uZ25h bWUob2ZuMSwgJmxvbmduYW1lKSA+IC0xKSB7CisJCWlmIChzdHJsZW4obG9uZ25hbWUpKSB7CisJ CSAgICBjaGFyIHRtcFsxMF07CisJCSAgICBleHRlcm4gaW50IGNrX3puZXduOworCQkgICAgc3By aW50Zih0bXAsIi5+JWR+Iixja196bmV3bik7CisJCSAgICBuZXdsb25nbmFtZSA9CisJCSAgICAg IChjaGFyICopIG1hbGxvYyhzdHJsZW4obG9uZ25hbWUpICsgc3RybGVuKHRtcCkgKyAxKTsKKwkJ ICAgIGlmIChuZXdsb25nbmFtZSkgeworCQkJc3RyY3B5KG5ld2xvbmduYW1lLCBsb25nbmFtZSk7 IC8qIHNhZmUgKHByZWNoZWNrZWQpICovCisJCQlzdHJjYXQobmV3bG9uZ25hbWUsIHRtcCk7IC8q IHNhZmUgKHByZWNoZWNrZWQpICovCisJCQlvczJzZXRsb25nbmFtZShvZm4xLCBuZXdsb25nbmFt ZSk7CisJCQlmcmVlKG5ld2xvbmduYW1lKTsKKwkJCW5ld2xvbmduYW1lID0gTlVMTDsKKwkJICAg IH0KKwkJfQorCSAgICB9IGVsc2UgZGVidWcoRjEwMCwicmN2ZmlsIG9zMmdldGxvbmduYW1lIGZh aWxlZCIsIiIsMCk7CisjZW5kaWYgLyogT1MyT05MWSAqLworI2VuZGlmIC8qIENLX0xBQkVMRUQg Ki8KKworI2lmZGVmIENPTU1FTlQKKwkgICAgLyogRG8gdGhpcyBsYXRlciwgaW4gb3BlbmEoKS4u LiAqLworCSAgICBpZiAoenJlbmFtZShvZm4xLG9mbjIpIDwgMCkgeworCQlyZl9lcnIgPSAiQ2Fu J3QgdHJhbnNmb3JtIGZpbGVuYW1lIjsKKwkJZGVidWcoRjExMCwicmN2ZmlsIHJlbmFtZSBmYWls cyIsb2ZuMSwwKTsKKwkJZGlzY2FyZCA9IG9wbmVyciA9IDE7CisJCXJldHVybigwKTsKKwkgICAg fQorI2VuZGlmIC8qIENPTU1FTlQgKi8KKwkgICAgYnJlYWs7CisKKwkgIGNhc2UgWFlGWF9EOgkJ CS8qIERpc2NhcmQgKHJlZnVzZSBuZXcgZmlsZSkgKi8KKwkgICAgb2ZwZXJtcyA9ICIiOworCSAg ICBkaXNjYXJkID0gMTsKKwkgICAgcmVqZWN0aW9uID0gMTsJCS8qIEhvcnJpYmxlIGhhY2s6IHJl YXNvbiA9IG5hbWUgKi8KKwkgICAgZGVidWcoRjEwMSwicmN2ZmlsIGRpc2NhcmQiLCIiLGRpc2Nh cmQpOworCSAgICB0bG9nKEYxMDAsIiByZWZ1c2VkOiBuYW1lIiwiIiwwKTsKKwkgICAgYnJlYWs7 CisKKwkgIGNhc2UgWFlGWF9SOgkJCS8qIFJlbmFtZSBpbmNvbWluZyBmaWxlICovCisJICAgIHpu ZXduKG9mbjEsJm9mbjIpOwkJLyogTWFrZSBuZXcgbmFtZSBmb3IgaXQgKi8KKyNpZmRlZiBPUzJP TkxZCisJICAgIGlmIChpYXR0ci5sb25nbmFtZS5sZW4pIHsKKwkJY2hhciB0bXBbMTBdOworCQll eHRlcm4gaW50IGNrX3puZXduOworCQlzcHJpbnRmKHRtcCwiLn4lZH4iLGNrX3puZXduKTsKKwkJ bmV3bG9uZ25hbWUgPQorCQkgIChjaGFyICopIG1hbGxvYyhpYXR0ci5sb25nbmFtZS5sZW4gKyBz dHJsZW4odG1wKSArIDEpOworCQlpZiAobmV3bG9uZ25hbWUpIHsKKwkJICAgIHN0cmNweShuZXds b25nbmFtZSwgaWF0dHIubG9uZ25hbWUudmFsKTsgLyogc2FmZSAqLworCQkgICAgc3RyY2F0KG5l d2xvbmduYW1lLCB0bXApOyAvKiBzYWZlICovCisJCSAgICBkZWJ1ZyhGMTEwLAorCQkJICAiUmVu YW1lIEluY29taW5nOiBuZXdsb25nbmFtZSIsbmV3bG9uZ25hbWUsMCk7CisJCSAgICBpZiAoaWF0 dHIubG9uZ25hbWUubGVuICYmCisJCQlpYXR0ci5sb25nbmFtZS52YWwpCisJCSAgICAgIGZyZWUo aWF0dHIubG9uZ25hbWUudmFsKTsKKwkJICAgIGlhdHRyLmxvbmduYW1lLmxlbiA9IHN0cmxlbihu ZXdsb25nbmFtZSk7CisJCSAgICBpYXR0ci5sb25nbmFtZS52YWwgPSBuZXdsb25nbmFtZTsKKwkJ ICAgIC8qIGZyZWUobmV3bG9uZ25hbWUpIGhlcmUgPyAqLworCQl9CisJICAgIH0KKyNlbmRpZiAv KiBPUzJPTkxZICovCisJICAgIGJyZWFrOworCSAgY2FzZSBYWUZYX1g6CQkJLyogUmVwbGFjZSBv bGQgZmlsZSAqLworCSAgICBkZWJ1ZyhGMTAwLCJyY3ZmaWwgb3ZlcndyaXRlIiwiIiwwKTsKKwkg ICAgaWYgKGRpcmZsZykgeworCQlyZl9lcnIgPSAiQ2FuJ3Qgb3ZlcndyaXRlIGV4aXN0aW5nIGRp cmVjdG9yeSI7CisJCXRsb2coRjEwMCwiIGVycm9yIC0gY2FuJ3Qgb3ZlcndyaXRlIGRpcmVjdG9y eSIsIiIsMCk7CisJCWRpc2NhcmQgPSBvcG5lcnIgPSAxOworI2lmZGVmIENPTU1FTlQKKwkJcmV0 dXJuKDApOworI2Vsc2UKKwkJYnJlYWs7CisjZW5kaWYgLyogQ09NTUVOVCAqLworCSAgICB9CisJ ICAgIHRsb2coRjExMCwib3ZlcndyaXRpbmciLG9mbjEsMCk7CisJICAgIGJyZWFrOworCSAgY2Fz ZSBYWUZYX1U6CQkJLyogUmVmdXNlIGlmIG9sZGVyICovCisJICAgIGRlYnVnKEYxMTAsInJjdmZp bCB1cGRhdGUiLG9mbjEsMCk7CisJICAgIGlmIChkaXJmbGcpIHsKKwkJcmZfZXJyID0gIkZpbGUg aGFzIHNhbWUgbmFtZSBhcyBleGlzdGluZyBkaXJlY3RvcnkiOworCQl0bG9nKEYxMTAsIiBlcnJv ciAtIGRpcmVjdG9yeSBleGlzdHM6IixvZm4xLDApOworCQlkaXNjYXJkID0gb3BuZXJyID0gMTsK KyNpZmRlZiBDT01NRU5UCisJCS8qIERvbid0IHNlbmQgYW4gZXJyb3IgcGFja2V0LCBqdXN0IHJl ZnVzZSB0aGUgZmlsZSAqLworCQlyZXR1cm4oMCk7CisjZW5kaWYgLyogQ09NTUVOVCAqLworCSAg ICB9CisJICAgIGJyZWFrOwkJCS8qIE5vdCBoZXJlLCB3ZSBkb24ndCBoYXZlICovCisJCQkJCS8q IHRoZSBhdHRyaWJ1dGUgcGFja2V0IHlldC4gKi8KKwkgIGRlZmF1bHQ6CisJICAgIG9mcGVybXMg PSAiIjsKKwkgICAgZGVidWcoRjEwMSwicmN2ZmlsIGJhZCBjb2xsaXNpb24gYWN0aW9uIiwiIixm bmNhY3QpOworCSAgICBicmVhazsKKwl9CisgICAgfQorICAgIGRlYnVnKEYxMTAsInJjdmZpbCBv Zm4xIixvZm4xLDApOworICAgIGRlYnVnKEYxMTAsInJjdmZpbCBvZm4yIixvZm4yLDApOworICAg IGRlYnVnKEYxMTAsInJjdmZpbCBvZnBlcm1zIixvZnBlcm1zLDApOworICAgIGlmIChmbmNhY3Qg PT0gWFlGWF9SICYmIG9mbjF4ICYmIG9mbjIpIHsgLyogUmVuYW1pbmcgaW5jb21pbmcgZmlsZT8g Ki8KKwl4eHNjcmVlbihTQ1JfQU4sMCwwbCxvZm4yKTsJLyogRGlzcGxheSByZW5hbWVkIG5hbWUg Ki8KKwlja3N0cm5jcHkobiwgb2ZuMiwgQ0tNQVhQQVRIKzEpOyAvKiBSZXR1cm4gaXQgKi8KKyAg ICB9IGVsc2UgewkJCQkvKiBObyAqLworCXh4c2NyZWVuKFNDUl9BTiwwLDBsLG9mbjEpOwkvKiBE aXNwbGF5IHJlZ3VsYXIgbmFtZSAqLworCWNrc3RybmNweShuLCBvZm4xLCBDS01BWFBBVEgrMSk7 IC8qIGFuZCByZXR1cm4gaXQuICovCisgICAgfQorCisjaWZkZWYgQ0tfTUtESVIKKy8qICBDcmVh dGUgZGlyZWN0b3J5KHMpIGlmIG5lY2Vzc2FyeS4gICovCisgICAgaWYgKCFkaXNjYXJkICYmIGZu cnBhdGggIT0gUEFUSF9PRkYpIHsgLyogUkVDRUlWRSBQQVRIQU1FUyBPTj8gKi8KKwlpbnQgeDsK KwlkZWJ1ZyhGMTEwLCJyY3ZmaWwgY2FsbGluZyB6bWtkaXIiLG9mbjEsMCk7IC8qIFllcyAqLwor CWlmICgoeCA9IHpta2RpcihvZm4xKSkgPCAwKSB7CisJICAgIGRlYnVnKEYxMDAsInpta2RpciBm YWlscyIsIiIsMCk7CisJICAgIHRsb2coRjExMCwiIGVycm9yIC0gZGlyZWN0b3J5IGNyZWF0aW9u IGZhaWx1cmU6IixvZm4xLDApOworCSAgICByZl9lcnIgPSAiRGlyZWN0b3J5IGNyZWF0aW9uIGZh aWx1cmUuIjsKKwkgICAgZGlzY2FyZCA9IDE7CisJICAgIHJldHVybigwKTsKKwl9CisjaWZkZWYg VExPRworCWVsc2UgaWYgKHggPiAwKQorCSAgdGxvZyhGMTEwLCIgcGF0aCBjcmVhdGVkOiIsb2Zu MSwwKTsKKyNlbmRpZiAvKiBUTE9HICovCisgICAgfQorI2Vsc2UKKyAgICBkZWJ1ZyhGMTEwLCJy Y3ZmaWwgQ0tfTUtESVIgbm90IGRlZmluZWQiLG9mbjEsMCk7CisjZW5kaWYgLyogQ0tfTUtESVIg Ki8KKworICAgIGlmIChjYWxpYnJhdGUpCisgICAgICBja3N0cm5jcHkoZnNwZWMsb2ZuMSxDS01B WFBBVEgrMSk7CisgICAgZWxzZQorICAgICAgemZucWZwKG9mbjEsZnNwZWNsZW4sZnNwZWMpOwor ICAgIGRlYnVnKEYxMTAsInJjdmZpbCBmc3BlYyIsZnNwZWMsMCk7CisKKyNpZmRlZiBDT01NRU5U CisgICAgLyogU2VlIGNvbW1lbnRzIHdpdGggVk1TIHpmbnFmcCgpLi4uICovCisjaWZkZWYgVk1T CisgICAgLyogemZucWZwKCkgZG9lcyBub3QgcmV0dXJuIHRoZSB2ZXJzaW9uIG51bWJlciAqLwor ICAgIGlmICghY2FsaWJyYXRlKSB7CisJaW50IHgsIHY7CisJeCA9IHN0cmxlbihvZm4xKTsKKwlp ZiAoeCA+IDApIHsKKwkgICAgaWYgKG9mbjFbeC0xXSA9PSAnOycpIHsKKwkJdiA9IGdldHZudW0o b2ZuMSk7CisJCWNrc3RybmNweSgmb2ZuMVt4XSxja2l0b2EodiksQ0tNQVhQQVRILXgpOworCSAg ICB9CisJfQorICAgIH0KKyNlbmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisg ICAgZnNwZWNbZnNwZWNsZW5dID0gTlVMOworICAgIG1ha2VzdHIoJnByZnNwZWMsZnNwZWMpOwkJ LyogTmV3IHByZWxpbWluYXJ5IGZpbGVuYW1lICovCisKKyNpZmRlZiBQSVBFU0VORAorICByY3Zm aWx4OgorI2VuZGlmIC8qIFBJUEVTRU5EICovCisKKyAgICBkZWJ1ZyhGMTEwLCJyY3ZmaWx4OiBu IixuLDApOworICAgIGRlYnVnKEYxMTAsInJjdmZpbHg6IG9mbjEiLG9mbjEsMCk7CisgICAgZmZj ID0gKENLX09GRl9UKTA7CQkJLyogSW5pdCBwZXItZmlsZSBjb3VudGVycyAqLworICAgIGNwcyA9 IG9sZGNwcyA9IDBMOworICAgIHJzX2xlbiA9IChDS19PRkZfVCkwOworICAgIHJlamVjdGlvbiA9 IC0xOworICAgIGZzZWNzID0gZ3RpbWVyKCk7CQkJLyogVGltZSB0aGlzIGZpbGUgc3RhcnRlZCAq LworI2lmZGVmIEdGVElNRVIKKyAgICBmcGZzZWNzID0gZ2Z0aW1lcigpOworICAgIGRlYnVnKEYx MDEsInJjdmZpbCBmcGZzZWNzIiwiIixmcGZzZWNzKTsKKyNlbmRpZiAvKiBHRlRJTUVSICovCisg ICAgZmlsY250Kys7CisgICAgaW50bXNnKGZpbGNudCk7CisgICAgcmV0dXJuKDEpOwkJCQkvKiBT dWNjZXNzZnVsIHJldHVybiAqLworfQorCisKKy8qICBSIEUgTyBGICAtLSAgUmVjZWl2ZSBFbmQg T2YgRmlsZSBwYWNrZXQgZm9yIGluY29taW5nIGZpbGUgKi8KKworLyoKKyAgQ2xvc2VzIHRoZSBy ZWNlaXZlZCBmaWxlLgorICBSZXR1cm5zOgorICAgIDAgb24gc3VjY2Vzcy4KKyAgIC0xIGlmIGZp bGUgY291bGQgbm90IGJlIGNsb3NlZC4KKyAgICAyIGlmIGRpc3Bvc2l0aW9uIHdhcyBtYWlsLCBt YWlsIHdhcyBzZW50LCBidXQgdGVtcCBmaWxlIG5vdCBkZWxldGVkLgorICAgIDMgaWYgZGlzcG9z aXRpb24gd2FzIHByaW50LCBmaWxlIHdhcyBwcmludGVkLCBidXQgbm90IGRlbGV0ZWQuCisgICAt MiBpZiBkaXNwb3NpdGlvbiB3YXMgbWFpbCBhbmQgbWFpbCBjb3VsZCBub3QgYmUgc2VudAorICAg LTMgaWYgZGlzcG9zaXRpb24gd2FzIHByaW50IGFuZCBmaWxlIGNvdWxkIG5vdCBiZSBwcmludGVk CisgICAtNCBpZiBNT1ZFLVRPOiBmYWlsZWQKKyAgIC01IGlmIFJFTkFNRS1UTzogZmFpbGVkCisq LworaW50CityZW9mKGYseXkpIGNoYXIgKmY7IHN0cnVjdCB6YXR0ciAqeXk7IHsKKyAgICBleHRl cm4gY2hhciAqIHJjdl9tb3ZlLCAqIHJjdl9yZW5hbWU7CisgICAgZXh0ZXJuIGludCBvX2lzb3Bl bjsKKyAgICBpbnQgcmMgPSAwOwkJCQkvKiBSZXR1cm4gY29kZSAqLworICAgIGNoYXIgKnA7Cisg ICAgY2hhciBjOworCisgICAgZGVidWcoRjExMSwicmVvZiBmbmNhY3QiLGYsZm5jYWN0KTsKKyAg ICBkZWJ1ZyhGMTAxLCJyZW9mIGRpc2NhcmQiLCIiLGRpc2NhcmQpOworICAgIHN1Y2Nlc3MgPSAx OwkJCS8qIEFzc3VtZSBzdGF0dXMgaXMgT0sgKi8KKyAgICBsc3N0YXRlID0gMDsJCQkvKiBDYW5j ZWwgbG9ja2luZy1zaGlmdCBzdGF0ZSAqLworICAgIGlmIChkaXNjYXJkKSB7CQkJLyogSGFuZGxl IGF0dHJpYnV0ZSByZWZ1c2FscywgZXRjLiAqLworCWRlYnVnKEYxMDEsInJlb2YgZGlzY2FyZGlu ZyIsIiIsMCk7CisJc3VjY2VzcyA9IDA7CQkJLyogU3RhdHVzID0gZmFpbGVkLiAqLworCWlmIChy ZWplY3Rpb24gPT0gJyMnIHx8CQkvKiBVbmxlc3MgcmVqZWN0aW9uIHJlYXNvbiBpcyAqLworCSAg ICByZWplY3Rpb24gPT0gIDEgIHx8CQkvKiBkYXRlIG9yIG5hbWUgKFNFVCBGSUxFIENPTExJU0lP TiAqLworCSAgICByZWplY3Rpb24gPT0gJz8nKQkJLyogVVBEQVRFIG9yIERJU0NBUkQpICovCisJ ICBzdWNjZXNzID0gMTsKKwlkZWJ1ZyhGMTAxLCJyZW9mIHN1Y2Nlc3MiLCIiLHN1Y2Nlc3MpOwor CWZpbHJlaisrOwkJCS8qIENvdW50IHRoaXMgcmVqZWN0aW9uLiAqLworCWRpc2NhcmQgPSAwOwkJ CS8qIFdlIG5ldmVyIG9wZW5lZCB0aGUgZmlsZSwgKi8KKwlyZXR1cm4oMCk7CQkJLyogc28gd2Ug ZG9uJ3QgY2xvc2UgaXQuICovCisgICAgfQorI2lmZGVmIERFQlVHCisgICAgaWYgKGRlYmxvZykg eworCWRlYnVnKEYxMDEsInJlb2YgY3hzZWVuIiwiIixjeHNlZW4pOworCWRlYnVnKEYxMDEsInJl b2YgY3pzZWVuIiwiIixjenNlZW4pOworCWRlYnVnKEYxMTAsInJlb2YgcmRhdGFwIixyZGF0YXAs MCk7CisgICAgfQorI2VuZGlmIC8qIERFQlVHICovCisKKyAgICBpZiAoY3hzZWVuID09IDApCQkJ LyogR290IGNhbmNlbCBkaXJlY3RpdmU/ICovCisgICAgICBjeHNlZW4gPSAoKnJkYXRhcCA9PSAn RCcpOworICAgIGlmIChjeHNlZW4gfHwgY3pzZWVuKQkJLyogKGZvciBoaW50cykgKi8KKyAgICAg IGludGVycnVwdGVkID0gMTsKKyAgICBzdWNjZXNzID0gKGN4c2VlbiB8fCBjenNlZW4pID8gMCA6 IDE7IC8qIFNldCBTVUNDRVNTIGZsYWcgYXBwcm9wcmlhdGVseSAqLworICAgIGlmICghc3VjY2Vz cykJCQkgIC8qICJVbmNvdW50IiB0aGlzIGZpbGUgKi8KKyAgICAgIGZpbHJlaisrOworICAgIGRl YnVnKEYxMDEsInJlb2Ygb19pc29wZW4iLCIiLG9faXNvcGVuKTsKKworICAgIGlmIChvX2lzb3Bl bikgewkJCS8qIElmIGFuIG91dHB1dCBmaWxlIHdhcyBvcGVuLi4uICovCisKKyNpZmRlZiBDS19D VFJMWgorCWlmIChzdWNjZXNzKSB7CisJICAgIGRlYnVnKEYxMDEsInJlb2YgbGFzdGNoYXIiLCIi LGxhc3RjaGFyKTsKKwkgICAgaWYgKCFiaW5hcnkgJiYgZW9mbWV0aG9kID09IFhZRU9GX1ogJiYg bGFzdGNoYXIgIT0gMjYgJiYKKwkJKCF4ZmxnIHx8ICh4ZmxnICYmIHJlbWZpbGUpKSkKKwkgICAg ICBwbmJ5dGUoKGNoYXIpMjYscHV0ZmlsKTsKKwl9CisjZW5kaWYgLyogQ0tfQ1RSTFogKi8KKwor CXJjID0gY2xzb2YoY3hzZWVuIHx8IGN6c2Vlbik7CS8qIENsb3NlIHRoZSBmaWxlIChyZXNldHMg Y3hzZWVuKSAqLworCWRlYnVnKEYxMDEsInJlb2YgY2xvc2YiLCIiLHJjKTsKKwlpZiAocmMgPCAw KSB7CQkJLyogSWYgZmFpbHVyZSB0byBjbG9zZSwgRkFJTCAqLworCSAgICBpZiAoc3VjY2Vzcykg ZmlscmVqKys7CisJICAgIHN1Y2Nlc3MgPSAwOworCX0KKwlpZiAoIWNhbGlicmF0ZSkgeworCSAg ICAvKiBTZXQgZmlsZSBtb2RpZmljYXRpb24gZGF0ZSBhbmQvb3IgcGVybWlzc2lvbnMgKi8KKwkg ICAgaWYgKHN1Y2Nlc3MpCisJICAgICAgenN0aW1lKGYseXksMCk7CisjaWZkZWYgT1MyT05MWQor I2lmZGVmIENLX0xBQkVMRUQKKwkgICAgaWYgKHN1Y2Nlc3MgJiYgeXktPmxvbmduYW1lLmxlbikK KwkgICAgICBvczJzZXRsb25nbmFtZShmLCB5eS0+bG9uZ25hbWUudmFsKTsKKyNlbmRpZiAvKiBD S19MQUJFTEVEICovCisjZW5kaWYgLyogT1MyT05MWSAqLworCX0KKwlpZiAoc3VjY2VzcyA9PSAw KSB7CQkvKiBBbmQgcHJvZ3JhbSByZXR1cm4gY29kZSAqLworCSAgICB4aXRzdGEgfD0gV19SRUNW OworCX0gZWxzZSBpZiAoc3VjY2VzcyA9PSAxKSB7CS8qIEZpbGUgcmVjJ2Qgc3VjY2Vzc2Z1bGx5 ICovCisJICAgIG1ha2VzdHIoJnJyZnNwZWMscHJyZnNwZWMpOwkvKiBSZWNvcmQgaXQgZm9yIHdo ZXJlbXNnICovCisJICAgIG1ha2VzdHIoJnJmc3BlYyxwcmZzcGVjKTsKKwl9CisKKy8qIEhhbmRs ZSBkaXNwb3NpdGlvbnMgZnJvbSBhdHRyaWJ1dGUgcGFja2V0Li4uICovCisKKwljID0gTlVMOwor I2lmbmRlZiBOT0ZSSUxMUworCWlmICghY2FsaWJyYXRlICYmIHl5LT5kaXNwLmxlbiAhPSAwKSB7 CisJICAgIHAgPSB5eS0+ZGlzcC52YWw7CisJICAgIGMgPSAqcCsrOworI2lmbmRlZiBVTklYCisv KgorICBTZWUgY2tjcHJvLncuICBJbiBVTklYIHdlIGRvbid0IHVzZSB0ZW1wIGZpbGVzIGFueSBt b3JlIC0tIHdlIHBpcGUgdGhlCisgIHN0dWZmIHJpZ2h0IGludG8gbWFpbCBvciBscHIuCisqLwor CSAgICBpZiAoYyA9PSAnTScpIHsJCS8qIE1haWwgdG8gdXNlci4gKi8KKwkJcmMgPSB6bWFpbChw LGZpbG5hbSk7CS8qIERvIHRoZSBzeXN0ZW0ncyBtYWlsIGNvbW1hbmQgKi8KKwkJaWYgKHJjIDwg MCkgc3VjY2VzcyA9IDA7CS8qIFJlbWVtYmVyIHN0YXR1cyAqLworCQl0bG9nKEYxMTAsIm1haWxl ZCIsZmlsbmFtLDBMKTsKKwkJdGxvZyhGMTEwLCIgdG8iLHAsMEwpOworCQl6ZGVsZXQoZmlsbmFt KTsJCS8qIERlbGV0ZSB0aGUgZmlsZSAqLworCSAgICB9IGVsc2UgaWYgKGMgPT0gJ1AnKSB7CS8q IFByaW50IHRoZSBmaWxlLiAqLworCQlyYyA9IHpwcmludChwLGZpbG5hbSk7CS8qIERvIHRoZSBz eXN0ZW0ncyBwcmludCBjb21tYW5kICovCisJCWlmIChyYyA8IDApIHN1Y2Nlc3MgPSAwOyAvKiBS ZW1lbWJlciBzdGF0dXMgKi8KKwkJdGxvZyhGMTEwLCJwcmludGVkIixmaWxuYW0sMEwpOworCQl0 bG9nKEYxMTAsIiB3aXRoIG9wdGlvbnMiLHAsMEwpOworI2lmbmRlZiBWTVMKKyNpZm5kZWYgU1RS QVRVUworCQkvKiBzcG9vbGVyIGRlbGV0ZXMgZmlsZSBhZnRlciBwcmludCBjb21wbGV0ZSBpbiBW T1MgJiBWTVMgKi8KKwkJaWYgKHpkZWxldChmaWxuYW0pICYmIHJjID09IDApIHJjID0gMzsgLyog RGVsZXRlIHRoZSBmaWxlICovCisjZW5kaWYgLyogU1RSQVRVUyAqLworI2VuZGlmIC8qIFZNUyAq LworCSAgICB9CisjZW5kaWYgLyogVU5JWCAqLworCX0KKyNlbmRpZiAvKiBOT0ZSSUxMUyAqLwor CisJaWYgKHN1Y2Nlc3MgJiYKKwkgICAgIXBpcGVzZW5kICYmCisJICAgICFjYWxpYnJhdGUgJiYg YyAhPSAnTScgJiYgYyAhPSAnUCcpIHsKKwkgICAgaWYgKHJjdl9tb3ZlKSB7CQkvKiBJZiAvTU9W RS1UTyB3YXMgZ2l2ZW4uLi4gKi8KKwkJY2hhciAqIHAgPSByY3ZfbW92ZTsKKyNpZmRlZiBDT01N RU5UCisvKiBObyBuZWVkIGZvciB0aGlzIC0gaXQncyBhIGRpcmVjdG9yeSBuYW1lICovCisJCWNo YXIgdG1wYnVmW0NLTUFYUEFUSCsxXTsKKwkJZXh0ZXJuIGludCBjbWRfcXVvdGluZzsJLyogZm9y IFx2KGZpbGVuYW1lKSAqLworCQlpZiAoY21kX3F1b3RpbmcpIHsJLyogQnV0IG9ubHkgaWYgY21k X3F1b3RpbmcgaXMgb24gKi8KKwkJICAgIGludCBuOworCQkgICAgbiA9IENLTUFYUEFUSDsKKwkJ ICAgIHAgPSB0bXBidWY7CisJCSAgICBkZWJ1ZyhGMTExLCJyZW9mIC9tb3ZlLXRvIixyY3ZfbW92 ZSwwKTsKKwkJICAgIHp6c3RyaW5nKHJjdl9tb3ZlLCZwLCZuKTsKKwkJICAgIHAgPSB0bXBidWY7 CisJCX0KKyNlbmRpZiAvKiBDT01NRU5UICovCisvKgorICBIZXJlIHdlIGNvdWxkIGNyZWF0ZSB0 aGUgZGlyZWN0b3J5IGlmIGl0IGRpZG4ndCBleGlzdCAoYW5kIGl0IHdhcyByZWxhdGl2ZSkKKyAg YnV0IHRoZXJlIHdvdWxkIGhhdmUgdG8gYmUgYSB1c2VyLXNldHRhYmxlIG9wdGlvbiB0byBzYXkg d2hldGhlciB0byBkbyB0aGlzLgorKi8KKwkJcmMgPSB6cmVuYW1lKGZpbG5hbSxwKTsKKwkJZGVi dWcoRjExMSwicmVvZiBNT1ZFIHpyZW5hbWUiLHJjdl9tb3ZlLHJjKTsKKwkJaWYgKHJjID4gLTEp IHsKKwkJICAgIHRsb2coRjExMCwiIG1vdmluZyByZWNlaXZlZCBmaWxlIHRvIixyY3ZfbW92ZSww KTsKKwkJfSBlbHNlIHsKKwkJICAgIHJjID0gLTQ7CisJCSAgICB0bG9nKEYxMTAsIiBGQUlMRUQg dG8gbW92ZSByZWNlaXZlZCBmaWxlIHRvIixyY3ZfbW92ZSwwKTsKKwkJfQorCSAgICB9IGVsc2Ug aWYgKHJjdl9yZW5hbWUpIHsJLyogT3IgL1JFTkFNRS1UTzogKi8KKwkJY2hhciAqcyA9IHJjdl9y ZW5hbWU7CS8qIFRoaXMgaXMgdGhlIHJlbmFtaW5nIHN0cmluZyAqLworI2lmbmRlZiBOT1NQTAor CQljaGFyIHRtcG5hbVtDS01BWFBBVEgrMTZdOworCQlleHRlcm4gaW50IGNtZF9xdW90aW5nOwkv KiBmb3IgXHYoZmlsZW5hbWUpICovCisJCWlmIChjbWRfcXVvdGluZykgewkvKiBCdXQgb25seSBp ZiBjbWRfcXVvdGluZyBpcyBvbiAqLworCQkgICAgaW50IG47CQkvKiBQYXNzIGl0IHRocnUgdGhl IGV2YWx1YXRvciAqLworCQkgICAgbiA9IENLTUFYUEFUSDsKKwkJICAgIHMgPSAoY2hhciAqKXRt cG5hbTsKKwkJICAgIHp6c3RyaW5nKHJjdl9yZW5hbWUsJnMsJm4pOworCQkgICAgcyA9IChjaGFy ICopdG1wbmFtOworCQl9CisjZW5kaWYgLyogTk9TUEwgKi8KKwkJaWYgKHMpIGlmICgqcykgewor CQkgICAgcmMgPSB6cmVuYW1lKGZpbG5hbSxzKTsKKwkJICAgIGRlYnVnKEYxMTEsInJlb2YgUkVO QU1FIHpyZW5hbWUiLHMscmMpOworCQkgICAgaWYgKHJjID4gLTEpIHsKKwkJCXRsb2coRjExMCwi IHJlbmFtaW5nIHJlY2VpdmVkIGZpbGUgdG8iLHMsMCk7CisJCSAgICB9IGVsc2UgeworCQkJcmMg PSAtNTsKKwkJCXRsb2coRjExMCwiIEZBSUxFRCB0byByZW5hbWUgcmVjZWl2ZWQgZmlsZSB0byIs cywwKTsKKwkJICAgIH0KKwkJfQorCSAgICB9CisJfQorICAgIH0KKyAgICBkZWJ1ZyhGMTAxLCJy ZW9mIHN1Y2Nlc3MiLCIiLHN1Y2Nlc3MpOworICAgIGRlYnVnKEYxMDEsInJlb2YgcmV0dXJucyIs IiIscmMpOworCisgICAgZmlsbmFtWzBdID0gTlVMOwkJCS8qIEVyYXNlIHRoZSBmaWxlbmFtZSAq LworICAgIHJldHVybihyYyk7Cit9CisKKy8qICBSIEUgTyBUICAtLSAgUmVjZWl2ZSBFbmQgT2Yg VHJhbnNhY3Rpb24gICovCisKK1ZPSUQKK3Jlb3QoKSB7CisgICAgY3hzZWVuID0gY3pzZWVuID0g ZGlzY2FyZCA9IDA7CS8qIFJlc2V0IGludGVycnVwdGlvbiBmbGFncyAqLworICAgIHRzdGF0cygp OwkJCQkvKiBGaW5hbGl6ZSB0cmFuc2ZlciBzdGF0aXN0aWNzICovCit9CisKKy8qICBTIEYgSSBM IEUgLS0gU2VuZCBGaWxlIGhlYWRlciBvciB0ZVh0IGhlYWRlciBwYWNrZXQgICovCisKKy8qCisg IENhbGwgd2l0aCB4IG5vbnplcm8gZm9yIFggcGFja2V0LCB6ZXJvIGZvciBGIHBhY2tldC4KKyAg SWYgWCA9PSAwLCBmaWxlbmFtZSB0byBzZW5kIGlzIGluIGZpbG5hbVtdLCBhbmQgaWYgY21hcmcy IGlzIG5vdCBudWxsCisgIG9yIGVtcHR5LCB0aGUgZmlsZSBzaG91bGQgYmUgc2VudCB1bmRlciB0 aGlzIG5hbWUgcmF0aGVyIHRoYW4gZmlsbmFtW10uCisgIElmIHNuZGZpbHRlciBub3QgTlVMTCwg aXQgaXMgdGhlIG5hbWUgb2YgYSBzZW5kIGZpbHRlci4KKyAgUmV0dXJucyAxIG9uIHN1Y2Nlc3Ms IDAgb24gZmFpbHVyZS4KKyovCitpbnQKK3NmaWxlKHgpIGludCB4OyB7CisjaWZkZWYgcGRwMTEK KyNkZWZpbmUgUEtUTkwgNjQKKyNlbHNlCisjZGVmaW5lIFBLVE5MIDI1NgorI2VuZGlmIC8qIHBk cDExICovCisgICAgY2hhciBwa3RuYW1bUEtUTkwrMV07CQkvKiBMb2NhbCBjb3B5IG9mIG5hbWUg Ki8KKyAgICBjaGFyICpzOworICAgIGludCByYzsKKyAgICBpbnQgbm90YWZpbGUgPSAwOworICAg IGV4dGVybiBpbnQgZmlsZXBlZWs7CisjaWZkZWYgUElQRVNFTkQKKyAgICBleHRlcm4gY2hhciAq IHNuZGZpbHRlcjsKKworICAgIGlmIChzbmRmaWx0ZXIpIHsKKwlwaXBlc2VuZCA9IDE7CisJZGVi dWcoRjExMCwic2ZpbGUgc2VuZCBmaWx0ZXIgIixzbmRmaWx0ZXIsMCk7CisgICAgfQorI2VuZGlm IC8qIFBJUEVTRU5EICovCisKKyAgICBub3RhZmlsZSA9IGNhbGlicmF0ZSB8fCBzbmRhcnJheSB8 fCBwaXBlc2VuZCB8fCB4OworICAgIGRlYnVnKEYxMDEsInNmaWxlIHgiLCIiLHgpOworICAgIGRl YnVnKEYxMDEsInNmaWxlIG5vdGFmaWxlIiwiIixub3RhZmlsZSk7CisKKyNpZm5kZWYgTk9DU0VU UworICAgIGlmICh0Y3Nfc2F2ZSA+IC0xKSB7ICAgICAgICAgICAgICAgIC8qIENoYXJhY3RlciBz ZXRzICovCisgICAgICAgIHRjaGFyc2V0ID0gdGNzX3NhdmU7CisgICAgICAgIHRjc19zYXZlID0g LTE7CisJZGVidWcoRjEwMSwic2ZpbGUgcmVzdG9yZWQgdGNoYXJzZXQiLCIiLHRjaGFyc2V0KTsK KyAgICB9CisgICAgaWYgKGZjc19zYXZlID4gLTEpIHsKKyAgICAgICAgZmNoYXJzZXQgPSBmY3Nf c2F2ZTsKKyAgICAgICAgZmNzX3NhdmUgPSAtMTsKKwlkZWJ1ZyhGMTAxLCJzZmlsZSByZXN0b3Jl ZCBmY2hhcnNldCIsIiIsZmNoYXJzZXQpOworICAgIH0KKyAgICBzZXR4bGF0eXBlKHRjaGFyc2V0 LGZjaGFyc2V0KTsgICAgICAvKiBUcmFuc2xhdGlvbiB0eXBlICovCisjZW5kaWYgLyogTk9DU0VU UyAqLworCisgICAgLyogY21hcmcyIG9yIGZpbG5hbSAod2l0aCB0aGF0IHByZWNlZGVuY2UpIGhh dmUgdGhlIGZpbGUncyBuYW1lICovCisKKyAgICBsc3N0YXRlID0gMDsJCQkvKiBDYW5jZWwgbG9j a2luZy1zaGlmdCBzdGF0ZSAqLworI2lmZGVmIENPTU1FTlQKKyAgICAvKiBEbyB0aGlzIGFmdGVy IG1ha2luZyBzdXJlIHdlIGNhbiBvcGVuIHRoZSBmaWxlICovCisgICAgaWYgKG54dHBrdCgpIDwg MCkgcmV0dXJuKDApOwkvKiBCdW1wIHBhY2tldCBudW1iZXIsIGdldCBidWZmZXIgKi8KKyNlbmRp ZiAvKiBDT01NRU5UICovCisgICAgcGt0bmFtWzBdID0gTlVMOwkJCS8qIEJ1ZmZlciBmb3IgbmFt ZSB3ZSB3aWxsIHNlbmQgKi8KKyAgICBpZiAoeCA9PSAwKSB7CQkJLyogRi1QYWNrZXQgc2V0dXAg Ki8KKwlpZiAoIWNtYXJnMikgY21hcmcyID0gIiI7CisjaWZkZWYgREVCVUcKKwlpZiAoZGVibG9n KSB7CisJICAgIC8qIGRlYnVnKEYxMTEsInNmaWxlIGNtYXJnMiIsY21hcmcyLGNtYXJnMik7ICov CisJICAgIGRlYnVnKEYxMDEsInNmaWxlIGJpbmFyeSAxIiwiIixiaW5hcnkpOworCSAgICBkZWJ1 ZyhGMTAxLCJzZmlsZSB3ZWFyZWFsaWtlIiwiIix3ZWFyZWFsaWtlKTsKKwkgICAgZGVidWcoRjEw MSwic2ZpbGUgeGZlcm1vZGUiLCIiLHhmZXJtb2RlKTsKKwkgICAgZGVidWcoRjEwMSwic2ZpbGUg ZmlsZXBlZWsiLCIiLGZpbGVwZWVrKTsKKyNpZm5kZWYgTk9DU0VUUworCSAgICBkZWJ1ZyhGMTAx LCJzZmlsZSBzX2NzZXQiLCIiLHNfY3NldCk7CisJICAgIGRlYnVnKEYxMDEsInNmaWxlIHRjaGFy c2V0IiwiIix0Y2hhcnNldCk7CisJICAgIGRlYnVnKEYxMDEsInNmaWxlIHhmcnhsYSIsIiIseGZy eGxhKTsKKyNlbmRpZiAvKiBOT0NTRVRTICovCisJfQorI2VuZGlmIC8qIERFQlVHICovCisJaWYg KHhmZXJtb2RlID09IFhNT0RFX0EJCS8qIFRSQU5TRkVSIE1PREUgQVVUT01BVElDICovCisjaWZu ZGVmIE5PTVNFTkQKKwkgICAgJiYgIWFkZGxpc3QJCQkvKiBBbmQgbm90IHdvcmtpbmcgZnJvbSBh IFNFTkQtTElTVCAqLworI2VuZGlmIC8qIE5PTVNFTkQgKi8KKwkgICAgKSB7CisJICAgIC8qIE90 aGVyIEtlcm1pdCBpcyBvbiBhIGxpa2Ugc3lzdGVtIGFuZCBubyBjaGFyc2V0IHRyYW5zbGF0aW9u ICovCisJICAgIGlmICh3ZWFyZWFsaWtlCisjaWZuZGVmIE5PQ1NFVFMKKwkJJiYgKHRjaGFyc2V0 ID09IFRDX1RSQU5TUCB8fCB4ZnJ4bGEgPT0gMCkKKyNlbmRpZiAvKiBOT0NTRVRTICovCisJCSkg eworI2lmZGVmIFZNUworCQlpZiAoYmluYXJ5ICE9IFhZRlRfSSkKKyNlbmRpZiAvKiBWTVMgKi8K KyNpZmRlZiBDS19MQUJFTEVECisJCSAgaWYgKGJpbmFyeSAhPSBYWUZUX0wpCisjZW5kaWYgLyog Q0tfTEFCRUxFRCAqLworCQkgICAgYmluYXJ5ID0gWFlGVF9COwkvKiBTZW5kIGFsbCBmaWxlcyBp biBiaW5hcnkgbW9kZSAqLworCSAgICB9CisKKwkgICAgLyogT3RoZXJ3aXNlIHNlbGVjdCB0cmFu c2ZlciBtb2RlIGJhc2VkIG9uIGZpbGUgaW5mbyAqLworCisJICAgIGVsc2UgaWYgKCFub3RhZmls ZQkJLyogYnV0IG5vdCBpZiBzZW5kaW5nIGZyb20gcGlwZSAqLworI2lmZGVmIENLX0xBQkVMRUQK KwkJICAgICAmJiBiaW5hcnkgIT0gWFlGVF9MIC8qIGFuZCBub3QgaWYgRklMRSBUWVBFIExBQkVM RUQgKi8KKyNlbmRpZiAvKiBDS19MQUJFTEVEICovCisjaWZkZWYgVk1TCisJCSAgICAgJiYgYmlu YXJ5ICE9IFhZRlRfSSAvKiBvciBGSUxFIFRZUEUgSU1BR0UgKi8KKyNlbmRpZiAvKiBWTVMgKi8K KwkJICAgICApIHsKKyNpZmRlZiBVTklDT0RFCisJCWZpbGVvcmRlciA9IC0xOwkJLyogRmlsZSBi eXRlIG9yZGVyICovCisjZW5kaWYgLyogVU5JQ09ERSAqLworCQlpZiAoZmlsZXBlZWsgJiYgIW5v dGFmaWxlKSB7IC8qIFJlYWwgZmlsZSwgRklMRSBTQ0FOIGlzIE9OICovCisJCSAgICBpbnQgaywg eDsKKwkJICAgIGsgPSBzY2FuZmlsZShmaWxuYW0sJngsbnNjYW5maWxlKTsgLyogU2NhbiB0aGUg ZmlsZSAqLworCQkgICAgZGVidWcoRjEwMSwic2ZpbGUgc2NhbmZpbGUiLCIiLGspOworCQkgICAg c3dpdGNoIChrKSB7CisJCSAgICAgIGNhc2UgRlRfVEVYVDoJLyogVW5zcGVjaWZpZWQgdGV4dCAq LworCQkJZGVidWcoRjEwMCwic2ZpbGUgc2NhbmZpbGUgdGV4dCIsIiIsMCk7CisJCQliaW5hcnkg PSBYWUZUX1Q7IC8qIFNFVCBGSUxFIFRZUEUgVEVYVCAqLworCQkJYnJlYWs7CisjaWZuZGVmIE5P Q1NFVFMKKwkJICAgICAgY2FzZSBGVF83QklUOgkJLyogNy1iaXQgdGV4dCAqLworCQkJYmluYXJ5 ID0gWFlGVF9UOwkvKiBTRVQgRklMRSBUWVBFIFRFWFQgKi8KKwkJCS8qIElmIFNFTkQgQ0hBUlNF VC1TRUxFQ1RJT04gQVVUTyAgKi8KKwkJCS8qIGFuZCBTRVQgVFJBTlNGRVIgVFJBTlNMQVRJT04g aXMgT04gKi8KKwkJCWRlYnVnKEYxMDAsInNmaWxlIHNjYW5maWxlIHRleHQ3IiwiIiwwKTsKKwkJ CWlmIChzX2NzZXQgPT0gWE1PREVfQSAmJiB4ZnJ4bGEpIHsKKwkJCSAgICBpZiAoZmNzaW5mb1tm Y2hhcnNldF0uc2l6ZSAhPSAxMjgpIHsKKwkJCQlmY3Nfc2F2ZSA9IGZjaGFyc2V0OyAvKiBDdXJy ZW50IEZDUyBub3QgN2JpdCAqLworCQkJCWZjaGFyc2V0ID0gZGNzZXQ3OyAgIC8qIFVzZSBkZWZh dWx0IDdiaXQgc2V0ICovCisJCQkJZGVidWcoRjEwMSwic2ZpbGUgc2NhbmZpbGUgNyBmY2hhcnNl dCIsCisJCQkJICAgICAgIiIsZmNoYXJzZXQpOworCQkJICAgIH0KKwkJCSAgICAvKiBBbmQgYWxz byBzd2l0Y2ggdG8gYXBwcm9wcmlhdGUgVENTICovCisJCQkgICAgaWYgKGFmY3NldFtmY2hhcnNl dF0gPiAtMSAmJgorCQkJCWFmY3NldFtmY2hhcnNldF0gPD0gTUFYVENTRVRTKSB7CisJCQkJdGNz X3NhdmUgPSB0Y2hhcnNldDsKKwkJCQl0Y2hhcnNldCA9IGFmY3NldFtmY2hhcnNldF07CisJCQkJ ZGVidWcoRjEwMSwic2ZpbGUgc2NhbmZpbGUgNyB0Y2hhcnNldCIsIiIsCisJCQkJICAgICAgdGNo YXJzZXQpOworCQkJICAgIH0KKwkJCSAgICBzZXR4bGF0eXBlKHRjaGFyc2V0LGZjaGFyc2V0KTsK KwkJCX0KKwkJCWJyZWFrOworCisJCSAgICAgIGNhc2UgRlRfOEJJVDoJLyogOC1iaXQgdGV4dCAq LworCQkJYmluYXJ5ID0gWFlGVF9UOyAvKiBTRVQgRklMRSBUWVBFIFRFWFQgKi8KKwkJCS8qIElm IFNFTkQgQ0hBUlNFVC1TRUxFQyBBVVRPICAqLworCQkJLyogYW5kIFNFVCBUUkFOU0ZFUiBUUkFO U0xBVElPTiBpcyBPTiAqLworCQkJZGVidWcoRjEwMCwic2ZpbGUgc2NhbmZpbGUgdGV4dDgiLCIi LDApOworCQkJaWYgKHNfY3NldCA9PSBYTU9ERV9BICYmIHhmcnhsYSkgeworCQkJICAgIGlmIChm Y3NpbmZvW2ZjaGFyc2V0XS5zaXplICE9IDI1NikgeworCQkJCWZjc19zYXZlID0gZmNoYXJzZXQ7 IC8qIEN1cnJlbnQgRkNTIG5vdCA4Yml0ICovCisJCQkJZmNoYXJzZXQgPSBkY3NldDg7IC8qIFVz ZSBkZWZhdWx0IDhiaXQgc2V0ICovCisJCQkJZGVidWcoRjEwMSwic2ZpbGUgc2NhbmZpbGUgOCBm Y2hhcnNldCIsCisJCQkJICAgICAgIiIsZmNoYXJzZXQpOworCQkJICAgIH0KKwkJCSAgICAvKiBT d2l0Y2ggdG8gY29ycmVzcG9uZGluZyB0cmFuc2ZlciBjaGFyc2V0ICovCisJCQkgICAgaWYgKGFm Y3NldFtmY2hhcnNldF0gPiAtMSAmJgorCQkJCWFmY3NldFtmY2hhcnNldF0gPD0gTUFYVENTRVRT KSB7CisJCQkJdGNzX3NhdmUgPSB0Y2hhcnNldDsKKwkJCQl0Y2hhcnNldCA9IGFmY3NldFtmY2hh cnNldF07CisJCQkJZGVidWcoRjEwMSwic2ZpbGUgc2NhbmZpbGUgOCB0Y2hhcnNldCIsIiIsCisJ CQkJICAgICAgdGNoYXJzZXQpOworCQkJICAgIH0KKwkJCSAgICBzZXR4bGF0eXBlKHRjaGFyc2V0 LGZjaGFyc2V0KTsKKwkJCX0KKwkJCWJyZWFrOworI2lmZGVmIFVOSUNPREUKKwkJICAgICAgY2Fz ZSBGVF9VVEY4OgkvKiBVVEYtOCB0ZXh0ICovCisJCSAgICAgIGNhc2UgRlRfVUNTMjoJLyogVUNT LTIgdGV4dCAqLworCQkJZGVidWcoRjEwMSwic2ZpbGUgc2NhbmZpbGUgVW5pY29kZSIsIiIsayk7 CisJCQliaW5hcnkgPSBYWUZUX1Q7CisJCQkvKiBJZiBTRU5EIENIQVJTRVQtU0VMRUMgQVVUTyAg Ki8KKwkJCS8qIGFuZCBTRVQgVFJBTlNGRVIgVFJBTlNMQVRJT04gaXMgT04gKi8KKwkJCWlmIChz X2NzZXQgPT0gWE1PREVfQSAmJiB4ZnJ4bGEpIHsKKwkJCSAgICBmY3Nfc2F2ZSA9IGZjaGFyc2V0 OworCQkJICAgIHRjc19zYXZlID0gdGNoYXJzZXQ7CisJCQkgICAgZmNoYXJzZXQgPSAoayA9PSBG VF9VQ1MyKSA/IEZDX1VDUzIgOiBGQ19VVEY4OworCQkJICAgIGlmIChrID09IEZUX1VDUzIgJiYg eCA+IC0xKQorCQkJICAgICAgZmlsZW9yZGVyID0geDsKKwkJCX0KKwkJCS8qIFN3aXRjaCB0byBh c3NvY2lhdGVkIHRyYW5zZmVyIGNoYXJzZXQgaWYgYW55ICovCisJCQlpZiAoYWZjc2V0W2ZjaGFy c2V0XSA+IC0xICYmCisJCQkgICAgYWZjc2V0W2ZjaGFyc2V0XSA8PSBNQVhUQ1NFVFMpCisJCQkg IHRjaGFyc2V0ID0gYWZjc2V0W2ZjaGFyc2V0XTsKKwkJCWlmICh0Y2hhcnNldCA9PSBUQ19UUkFO U1ApIC8qIElmIG5vbmUgKi8KKwkJCSAgdGNoYXJzZXQgPSBUQ19VVEY4OyAgICAgIC8qIHVzZSBV VEYtOCAqLworCQkJc2V0eGxhdHlwZSh0Y2hhcnNldCxmY2hhcnNldCk7CisJCQlkZWJ1ZyhGMTAx LCJzZmlsZSBVbmljb2RlIHRjaGFyc2V0IiwiIix0Y2hhcnNldCk7CisJCQlicmVhazsKKyNlbmRp ZiAvKiBVTklDT0RFICovCisjZW5kaWYgLyogTk9DU0VUUyAqLworCQkgICAgICBjYXNlIEZUX0JJ TjoKKwkJCWRlYnVnKEYxMDEsInNmaWxlIHNjYW5maWxlIGJpbmFyeSIsIiIsayk7CisJCQliaW5h cnkgPSBYWUZUX0I7CisJCQlicmVhazsKKwkJICAgIC8qIERlZmF1bHQ6IERvbid0IGNoYW5nZSBh bnl0aGluZyAqLworCQkgICAgfQorCQl9CisJICAgIH0KKwkgICAgZGVidWcoRjEwMSwic2ZpbGUg YmluYXJ5IDIiLCIiLGJpbmFyeSk7CisJICAgIGRlYnVnKEYxMDEsInNmaWxlIHNlbmRtb2RlIiwi IixzZW5kbW9kZSk7CisJfQorICAgIAlpZiAoKmNtYXJnMikgewkJCS8qIElmIHdlIGhhdmUgYSBz ZW5kLWFzIG5hbWUuLi4gKi8KKwkgICAgaW50IHk7IGNoYXIgKnM7CisjaWZuZGVmIE5PU1BMCQkJ CS8qIGFuZCBhIHNjcmlwdCBwcm9ncmFtbWluZyBsYW5ndWFnZSAqLworCSAgICBleHRlcm4gaW50 IGNtZF9xdW90aW5nOworCSAgICBpZiAoY21kX3F1b3RpbmcpIHsJCS8qIGFuZCBpdCdzIG5vdCB0 dXJuZWQgb2ZmICovCisJCXkgPSBQS1ROTDsJCS8qIHBhc3MgYXMtbmFtZSB0aHJ1IHRoZSBldmFs dWF0b3IgKi8KKwkJcyA9IHBrdG5hbTsKKwkJenpzdHJpbmcoY21hcmcyLCZzLCZ5KTsKKyNpZmRl ZiBDT01NRU5UCisvKiBUaGlzIHJ1aW5zIG1hY3JvcyBsaWtlIEJTRU5EICovCisJCWlmICghcGt0 bmFtWzBdKQkJLyogYW5kIG1ha2Ugc3VyZSByZXN1bHQgaXMgbm90IGVtcHR5ICovCisJCSAgc3By aW50Zihwa3RuYW0sIkZJTEUlMDJsZCIsZmlsY250KTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisJ ICAgIH0gZWxzZQorI2VuZGlmIC8qIE5PU1BMICovCisJICAgICAgY2tzdHJuY3B5KHBrdG5hbSxj bWFyZzIsUEtUTkwpOyAvKiBjb3B5IGl0IGxpdGVyYWxseSwgKi8KKworCSAgICBkZWJ1ZyhGMTEw LCJzZmlsZSBwa3RuYW0iLHBrdG5hbSwwKTsKKyNpZmRlZiBDT01NRU5UCisvKiBXZSBkb24ndCBk byB0aGlzIGFueSBtb3JlIGJlY2F1c2Ugbm93IHdlIGhhdmUgZmlsZW5hbWUgdGVtcGxhdGVzICov CisJICAgIGNtYXJnMiA9ICIiOwkJLyogYW5kIGJsYW5rIGl0IG91dCBmb3IgbmV4dCB0aW1lLiAq LworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAJfQorCWlmICghKnBrdG5hbSkgewkJCS8qIE5v IGFzLW5hbWUuLi4gKi8KKyNpZmRlZiBOWkxUT1IKKwkgICAgaW50IHhmbmNudiwgeHBhdGg7CisJ ICAgIGRlYnVnKEYxMDEsInNmaWxlIGZuc3BhdGgiLCIiLGZuc3BhdGgpOworCSAgICBkZWJ1ZyhG MTAxLCJzZmlsZSBmbmNudiIsIiIsZm5jbnYpOworCSAgICB4Zm5jbnYgPSBmbmNudjsKKwkgICAg eHBhdGggPSBmbnNwYXRoOworCSAgICBpZiAobm90YWZpbGUpIHsJCS8qIElmIG5vdCBhbiBhY3R1 YWwgZmlsZSAqLworCQl4Zm5jbnYgPSAwOwkJLyogRG9uJ3QgY29udmVydCBuYW1lICovCisJCXhw YXRoID0gUEFUSF9PRkY7CS8qIExlYXZlIHBhdGggb2ZmICovCisJICAgIH0gZWxzZSBpZiAoeGZu Y252ICYmCisJCSAgICAgICAoIXN0cmNtcCh3aG9hcmV1LCJVMSIpIHx8ICFzdHJjbXAod2hvYXJl dSwiVU4iKSkKKwkJICAgICAgICkgeworCQkvKiBMZXNzLXN0cmljdCBjb252ZXJzaW9uIGlmIHBh cnRuZXIgaXMgVU5JWCBvciBXaW4zMiAqLworCQl4Zm5jbnYgPSAtMTsKKwkgICAgfQorCSAgICBk ZWJ1ZyhGMTAxLCJzZmlsZSB4cGF0aCIsIiIseHBhdGgpOworCSAgICBkZWJ1ZyhGMTAxLCJzZmls ZSB4Zm5jbnYiLCIiLHhmbmNudik7CisJICAgIG56bHRvcihmaWxuYW0scGt0bmFtLHhmbmNudix4 cGF0aCxQS1ROTCk7CisKKyNlbHNlICAvKiBOb3QgTlpMVE9SICovCisKKwkgICAgZGVidWcoRjEw MSwic2ZpbGUgZm5zcGF0aCIsIiIsZm5zcGF0aCk7CisJICAgIGlmIChmbnNwYXRoID09IFBBVEhf T0ZGCS8qIFN0cmlwcGluZyBwYXRoIG5hbWVzPyAqLworCQkmJiAoIW5vdGFmaWxlKQkJLyogKG9m IGFjdHVhbCBmaWxlcykgKi8KKwkJKSB7CisJCWNoYXIgKnQ7CQkvKiBZZXMuICovCisJCXpzdHJp cChmaWxuYW0sJnQpOwkvKiBTdHJpcCBvZmYgdGhlIHBhdGguICovCisJCWRlYnVnKEYxMTAsInNm aWxlIHpzdHJpcCIsdCwwKTsKKwkJaWYgKCF0KSB0ID0gIlVOS05PV04iOwkvKiBCZSBjYXV0aW91 cy4uLiAqLworCQllbHNlIGlmICgqdCA9PSAnXDAnKQorCQkgIHQgPSAiVU5LTk9XTiI7CisJCWNr c3RybmNweShwa3RuYW0sdCxQS1ROTCk7IC8qIENvcHkgc3RyaXBwZWQgbmFtZSBsaXRlcmFsbHku ICovCisJICAgIH0gZWxzZSBpZiAoZm5zcGF0aCA9PSBQQVRIX0FCUyAmJiAhbm90YWZpbGUpIHsK KwkJLyogQ29udmVydGluZyB0byBhYnNvbHV0ZSBmb3JtICovCisJCXpmbnFmcChmaWxuYW0sUEtU TkwscGt0bmFtKTsKKwkgICAgfSBlbHNlCisJCWNrc3RybmNweShwa3RuYW0sZmlsbmFtLFBLVE5M KTsKKworCSAgICAvKiBwa3RuYW1bXSBoYXMgdGhlIHBhY2tldCBuYW1lLCBmaWxuYW1bXSBoYXMg dGhlIG9yaWdpbmFsIG5hbWUuICovCisJICAgIC8qIEJ1dCB3ZSBzdGlsbCBuZWVkIHRvIGNvbnZl cnQgcGt0bmFtIGlmIEZJTEUgTkFNRVMgQ09OVkVSVEVELiAgKi8KKworCSAgICBkZWJ1ZyhGMTAx LCJzZmlsZSBmbmNudiIsIiIsZm5jbnYpOworCSAgICBpZiAoZm5jbnYgJiYgIW5vdGFmaWxlKSB7 CS8qIElmIGNvbnZlcnRpbmcgbmFtZXMgb2YgZmlsZXMgKi8KKwkJemx0b3IocGt0bmFtLChjaGFy ICopc3J2Y21kKTsgLyogY29udmVydCBpdCB0byBjb21tb24gZm9ybSwgKi8KKwkJY2tzdHJuY3B5 KHBrdG5hbSwoY2hhciAqKXNydmNtZCxQS1ROTCk7CisJCSpzcnZjbWQgPSBOVUw7CisJICAgIH0K KyNlbmRpZiAvKiBOWkxUT1IgKi8KKyAgICAJfQorCWlmICghKnBrdG5hbSkJCQkvKiBGYWlsc2Fm ZS4uLiAqLworCSAgc3ByaW50Zihwa3RuYW0sIkZJTEUlMDJsZCIsZmlsY250KTsKKwlkZWJ1ZyhG MTEwLCJzZmlsZSBmaWxuYW0gMSIsZmlsbmFtLDApOworCWRlYnVnKEYxMTAsInNmaWxlIHBrdG5h bSAxIixwa3RuYW0sMCk7CisjaWZkZWYgUElQRVNFTkQKKy8qIElmIHdlIGhhdmUgYSBzZW5kIGZp bHRlciwgc3Vic3RpdHV0ZSB0aGUgY3VycmVudCBmaWxlbmFtZSBpbnRvIGl0ICovCisKKwlpZiAo c25kZmlsdGVyKSB7CisJICAgIGNoYXIgKiBwID0gTlVMTCwgKiBxOworCSAgICBpbnQgbiA9IENL TUFYUEFUSDsKKyNpZm5kZWYgTk9TUEwKKwkgICAgaWYgKChwID0gKGNoYXIgKikgbWFsbG9jKG4g KyAxKSkpIHsKKwkJcSA9IHA7CisJCWRlYnVnKEYxMTAsInNmaWxlIHBpcGVzZW5kIGZpbHRlciIs c25kZmlsdGVyLDApOworCQl6enN0cmluZyhzbmRmaWx0ZXIsJnAsJm4pOworCQlkZWJ1ZyhGMTEx LCJzZmlsZSBwaXBlbmFtZSIscSxuKTsKKwkJaWYgKG4gPD0gMCkgeworCQkgICAgcHJpbnRmKAor CQkJICAiP1NvcnJ5LCBzZW5kIGZpbHRlciArIGZpbGVuYW1lIHRvbyBsb25nLCAlZCBtYXguXG4i LAorCQkJICAgQ0tNQVhQQVRICisJCQkgICApOworCQkgICAgZnJlZShxKTsKKwkJICAgIHJldHVy bigwKTsKKwkJfQorCQlja3N0cm5jcHkoZmlsbmFtLHEsQ0tNQVhQQVRIKzEpOworCQlmcmVlKHEp OworCSAgICB9CisjZW5kaWYgLyogTk9TUEwgKi8KKwl9CisjZW5kaWYgLyogUElQRVNFTkQgKi8K KworICAgIAlkZWJ1ZyhGMTEwLCJzZmlsZSBmaWxuYW0gMiIsZmlsbmFtLDApOyAvKiBMb2cgZGVi dWdnaW5nIGluZm8gKi8KKyAgICAJZGVidWcoRjExMCwic2ZpbGUgcGt0bmFtIDIiLHBrdG5hbSww KTsKKyAgICAJaWYgKG9wZW5pKGZpbG5hbSkgPT0gMCkgCS8qIFRyeSB0byBvcGVuIHRoZSBpbnB1 dCBmaWxlICovCisJICByZXR1cm4oMCk7CisKKyNpZmRlZiBDS19SRVNFTkQKKy8qCisgIFRoZSBm b2xsb3dpbmcgY2hlY2sgaXMgZG9uZSBhZnRlciBvcGVuaSgpIGlzIGNhbGxlZCwgc2luY2Ugb3Bl bmkoKSBpdHNlbGYKKyAgY2FuIGNoYW5nZSB0aGUgdHJhbnNmZXIgbW9kZSAoYXMgaW4gVk1TKS4K KyovCisgICAgICAgIGlmICgoYmluYXJ5ID09IFhZRlRfVAorI2lmZGVmIFZNUworCSAgICAgfHwg YmluYXJ5ID09IFhZRlRfTAorI2VuZGlmIC8qIFZNUyAqLworCSAgICAgKSAmJiBzZW5kbW9kZSA9 PSBTTV9SRVNFTkQpIHsKKyAgICAgICAgICAgIC8qIFRyeWluZyB0byBSRVNFTkQvUkVHRVQgYSBm aWxlIGZpcnN0IHNlbnQgaW4gVEVYVCBtb2RlLiAqLworCSAgICBkZWJ1ZyhGMTExLCJzZmlsZSBl cnJvciAtIFJlY292ZXIgdnMgVGV4dCIsZmlsbmFtLGJpbmFyeSk7CisgICAgICAgICAgICAvKiBT ZXQgYXBwcm9wcmlhdGUgZXJyb3IgbWVzc2FnZXMgYW5kIG1ha2UgbG9nIGVudHJpZXMgaGVyZSAq LworI2lmZGVmIFZNUworCSAgICBpZiAoYmluYXJ5ID09IFhZRlRfTCkKKwkgICAgICBja21ha21z ZygoY2hhciAqKWVwa3Rtc2csCisJCSAgICAgICBQS1RNU0dMRU4sCisJCSAgICAgICAiUmVjb3Zl cnkgYXR0ZW1wdGVkIGluIExBQkVMRUQgbW9kZTogIiwKKwkJICAgICAgIGZpbG5hbSwKKwkJICAg ICAgIE5VTEwsCisJCSAgICAgICBOVUxMCisJCSAgICAgICApOworCSAgICBlbHNlCisjZW5kaWYg LyogVk1TICovCisJICAgICAgY2ttYWttc2coKGNoYXIgKillcGt0bXNnLAorCQkgICAgICAgUEtU TVNHTEVOLAorCQkgICAgICAgIlJlY292ZXJ5IGF0dGVtcHRlZCBpbiBURVhUIG1vZGU6ICIsCisJ CSAgICAgICBmaWxuYW0sCisJCSAgICAgICBOVUxMLAorCQkgICAgICAgTlVMTAorCQkgICAgICAg KTsKKyAgICAgICAgICAgIHJldHVybigwKTsKKyAgICAgICAgfQorCWlmIChzZW5kbW9kZSA9PSBT TV9QU0VORCkJLyogUFNFTkRpbmc/ICovCisJICBpZiAoc2VuZHN0YXJ0ID4gKENLX09GRl9UKTAp CS8qIFN0YXJ0aW5nIHBvc2l0aW9uICovCisJICAgIGlmICh6ZnNlZWsoc2VuZHN0YXJ0KSA8IDAp CS8qIHNlZWsgdG8gaXQuLi4gKi8KKwkgICAgICByZXR1cm4oMCk7CisjZW5kaWYgLyogQ0tfUkVT RU5EICovCisgICAgCXMgPSBwa3RuYW07CQkJLyogTmFtZSBmb3IgcGFja2V0IGRhdGEgZmllbGQg Ki8KKyNpZmRlZiBPUzIKKwkvKiBOZXZlciBzZW5kIGEgZGlzayBsZXR0ZXIuICovCisJaWYgKGlz YWxwaGEoKnMpICYmICgqKHMrMSkgPT0gJzonKSkKKwkgIHMgKz0gMjsKKyNlbmRpZiAvKiBPUzIg Ki8KKworICAgIH0gZWxzZSB7CQkJCS8qIFgtcGFja2V0IHNldHVwLCBub3QgRi1wYWNrZXQuICov CisJYmluYXJ5ID0gWFlGVF9UOwkJLyogVGV4dCBhbHdheXMgKi8KKyAgICAJZGVidWcoRjExMCwi c2ZpbGUgWCBwYWNrZXQiLGNtZHN0ciwwKTsgLyogTG9nIGRlYnVnZ2luZyBpbmZvICovCisgICAg CXMgPSBjbWRzdHI7CQkJLyogTmFtZSBmb3IgZGF0YSBmaWVsZCAqLworICAgIH0KKworICAgIC8q IE5vdyBzIHBvaW50cyB0byB0aGUgc3RyaW5nIHRoYXQgZ29lcyBpbiB0aGUgcGFja2V0IGRhdGEg ZmllbGQuICovCisKKyAgICBkZWJ1ZyhGMTAxLCJzZmlsZSBiaW5hcnkiLCIiLGJpbmFyeSk7IC8q IExvZyBkZWJ1Z2dpbmcgaW5mbyAqLworICAgIGVuY3N0cigoQ0hBUiAqKXMpOwkJCS8qIEVuY29k ZSB0aGUgbmFtZS4gKi8KKwkJCQkJLyogU2VuZCB0aGUgRiBvciBYIHBhY2tldCAqLworICAgIC8q IElmIHRoZSBlbmNvZGVkIHN0cmluZyBkaWQgbm90IGZpdCBpbnRvIHRoZSBwYWNrZXQsIGl0IHdh cyB0cnVuY2F0ZWQuICovCisKKyAgICBpZiAobnh0cGt0KCkgPCAwKSByZXR1cm4oMCk7CS8qIEJ1 bXAgcGFja2V0IG51bWJlciwgZ2V0IGJ1ZmZlciAqLworCisgICAgcmMgPSBzcGFjaygoY2hhcikg KHggPyAnWCcgOiAnRicpLCBwa3RudW0sIHNpemUsIGRhdGEpOworICAgIGlmIChyYyA8IDApCisg ICAgICByZXR1cm4ocmMpOworCisjaWZuZGVmIE5PQ1NFVFMKKyAgICBzZXR4bGF0eXBlKHRjaGFy c2V0LGZjaGFyc2V0KTsJLyogU2V0IHVwIGNoYXJzZXQgdHJhbnNsYXRpb25zICovCisjZW5kaWYg LyogTk9DU0VUUyAqLworCisgICAgaWYgKHggPT0gMCkgewkJCS8qIERpc3BsYXkgZm9yIEYgcGFj a2V0ICovCisgICAgCWlmIChkaXNwbGEpIHsJCQkvKiBTY3JlZW4gKi8KKwkgICAgeHhzY3JlZW4o U0NSX0ZOLCdGJywobG9uZylwa3RudW0sZmlsbmFtKTsKKwkgICAgeHhzY3JlZW4oU0NSX0FOLDAs MEwscGt0bmFtKTsKKwkgICAgeHhzY3JlZW4oU0NSX0ZTLDAsY2FsaWJyYXRlID8gY2FsaWJyYXRl IDogZnNpemUsIiIpOworICAgIAl9CisjaWZkZWYgcGRwMTEKKyAgICAJdGxvZyhGMTEwLCJTZW5k aW5nIixmaWxuYW0sMEwpOyAvKiBUcmFuc2FjdGlvbiBsb2cgZW50cnkgKi8KKwltYWtlc3RyKCZw c2ZzcGVjLGZpbG5hbSk7CS8qIE5ldyBmaWxlbmFtZSAqLworI2Vsc2UKKyNpZm5kZWYgWkZOUUZQ CisgICAgCXRsb2coRjExMCwiU2VuZGluZyIsZmlsbmFtLDBMKTsKKwltYWtlc3RyKCZwc2ZzcGVj LGZpbG5hbSk7CS8qIE5ldyBmaWxlbmFtZSAqLworI2Vsc2UKKwlpZiAobm90YWZpbGUpIHsJCQkv KiBJZiBub3QgYSBmaWxlIGxvZyBzaW1wbGUgbmFtZSAqLworCSAgICB0bG9nKEYxMTAsIlNlbmRp bmciLCBmaWxuYW0sIDBMKTsKKwl9IGVsc2UgewkJCS8qIExvZyBmdWxseSBxdWFsaWZpZWQgZmls ZW5hbWUgKi8KKyNpZmRlZiBDT01NRU5UCisJICAgIC8qIFRoaXMgc2VjdGlvbiBnZW5lcmF0ZXMg YmFkIGNvZGUgaW4gU0NPIDMuMnY1LjAuNSdzIGNjICovCisJICAgIGNoYXIgKnAgPSBOVUxMLCAq cSA9IGZpbG5hbTsKKwkgICAgZGVidWcoRjEwMSwic2ZpbGUgQ0tNQVhQQVRIIiwiIixDS01BWFBB VEgpOworCSAgICBpZiAoKHAgPSBtYWxsb2MoQ0tNQVhQQVRIKzEpKSkgeworCQlkZWJ1ZyhGMTEx LCJzZmlsZSBjYWxsaW5nIHpmbnFmcCIsZmlsbmFtLHN0cmxlbihmaWxuYW0pKTsKKwkJaWYgKHpm bnFmcChmaWxuYW0sIENLTUFYUEFUSCwgcCkpIHsKKwkJICAgIGRlYnVnKEYxMTEsInNmaWxlIHpm bnFmcCBvayIscCxzdHJsZW4ocCkpOworCQkgICAgcSA9IHA7CisJCX0KKwkgICAgfQorI2Vsc2UK KwkgICAgY2hhciB0bXBidWZbQ0tNQVhQQVRIKzFdOworCSAgICBjaGFyICpwID0gdG1wYnVmLCAq cSA9IGZpbG5hbTsKKwkgICAgaWYgKHpmbnFmcChmaWxuYW0sIENLTUFYUEFUSCwgcCkpCisJICAg ICAgcSA9IHA7CisjZW5kaWYgLyogQ09NTUVOVCAqLworCSAgICBkZWJ1ZyhGMTExLCJzZmlsZSBx IixxLHN0cmxlbihxKSk7CisJICAgIHRsb2coRjExMCwiU2VuZGluZyIscSwwTCk7CisJICAgIG1h a2VzdHIoJnBzZnNwZWMscSk7CS8qIE5ldyBwcmVsaW1pbmFyeSBmaWxlbmFtZSAqLworI2lmZGVm IENPTU1FTlQKKwkgICAgaWYgKHApIGZyZWUocCk7CisjZW5kaWYgLyogQ09NTUVOVCAqLworCX0K KyNlbmRpZiAvKiBaRk5RRlAgKi8KKyNlbmRpZiAvKiBwZHAxMSAqLworICAgIAl0bG9nKEYxMTAs IiBhcyIscGt0bmFtLDBMKTsKKwlpZiAoYmluYXJ5KSB7CQkJLyogTG9nIGZpbGUgbW9kZSBpbiB0 cmFuc2FjdGlvbiBsb2cgKi8KKwkgICAgdGxvZyhGMTAxLCIgbW9kZTogYmluYXJ5IiwiIiwobG9u ZykgYmluYXJ5KTsKKwl9IGVsc2UgewkJCS8qIElmIHRleHQgbW9kZSwgY2hlY2sgY2hhcmFjdGVy IHNldCAqLworCSAgICB0bG9nKEYxMDAsIiBtb2RlOiB0ZXh0IiwiIiwwTCk7CisjaWZuZGVmIE5P Q1NFVFMKKwkgICAgaWYgKHRjaGFyc2V0ID09IFRDX1RSQU5TUCB8fCB4ZnJ4bGEgPT0gMCkgewor CQl0bG9nKEYxMTAsIiBjaGFyYWN0ZXIgc2V0IiwidHJhbnNwYXJlbnQiLDBMKTsKKwkgICAgfSBl bHNlIHsKKwkJdGxvZyhGMTEwLCIgeGZlciBjaGFyYWN0ZXIgc2V0Iix0Y3NpbmZvW3RjaGFyc2V0 XS5uYW1lLDBMKTsKKwkJdGxvZyhGMTEwLCIgZmlsZSBjaGFyYWN0ZXIgc2V0IixmY3NpbmZvW2Zj aGFyc2V0XS5uYW1lLDBMKTsKKwkgICAgfQorI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKwl9CisgICAg fSBlbHNlIHsJCQkJLyogRGlzcGxheSBmb3IgWC1wYWNrZXQgKi8KKworICAgIAl4eHNjcmVlbihT Q1JfWEQsJ1gnLChsb25nKXBrdG51bSxjbWRzdHIpOyAvKiBTY3JlZW4gKi8KKyAgICAJdGxvZyhG MTEwLCJTZW5kaW5nIGZyb206IixjbWRzdHIsMEwpOwkvKiBUcmFuc2FjdGlvbiBsb2cgKi8KKyAg ICB9CisgICAgaW50bXNnKCsrZmlsY250KTsJCQkvKiBDb3VudCBmaWxlLCBnaXZlIGludGVycnVw dCBtc2cgKi8KKyAgICBmaXJzdCA9IDE7CQkJCS8qIEluaXQgZmlsZSBjaGFyYWN0ZXIgbG9va2Fo ZWFkLiAqLworICAgIGZmYyA9IChDS19PRkZfVCkwOwkJCS8qIEluaXQgZmlsZSBjaGFyYWN0ZXIg Y291bnRlci4gKi8KKyAgICBjcHMgPSBvbGRjcHMgPSAwTDsJCQkvKiBJbml0IGNwcyBzdGF0aXN0 aWNzICovCisgICAgcmVqZWN0aW9uID0gLTE7CisgICAgZnNlY3MgPSBndGltZXIoKTsJCQkvKiBU aW1lIHRoaXMgZmlsZSBzdGFydGVkICovCisjaWZkZWYgR0ZUSU1FUgorICAgIGZwZnNlY3MgPSBn ZnRpbWVyKCk7CisgICAgZGVidWcoRjEwMSwiU0ZJTEUgZnBmc2VjcyIsIiIsZnBmc2Vjcyk7Cisj ZW5kaWYgLyogR0ZUSU1FUiAqLworICAgIGRlYnVnKEYxMDEsIlNGSUxFIGZzZWNzIiwiIixmc2Vj cyk7CisgICAgcmV0dXJuKDEpOworfQorCisvKiAgUyBEIEEgVCBBIC0tIFNlbmQgYSBkYXRhIHBh Y2tldCAqLworCisvKgorICBSZXR1cm5zIC0xIGlmIG5vIGRhdGEgdG8gc2VuZCAoZW5kIG9mIGZp bGUpLCAtMiBpZiBjb25uZWN0aW9uIGlzIGJyb2tlbi4KKyAgSWYgdGhlcmUgaXMgZGF0YSwgYSBk YXRhIHBhY2tldCBpcyBzZW50LCBhbmQgc2RhdGEoKSByZXR1cm5zIDEuCisKKyAgSW4gdGhlIHN0 cmVhbWluZyBjYXNlLCB0aGUgd2luZG93IGlzIHJlZ2FyZGVkIGFzIGluZmluaXRlIGFuZCB3ZSBr ZWVwCisgIHNlbmRpbmcgZGF0YSBwYWNrZXRzIHVudGlsIEVPRiBvciB0aGVyZSBhcHBlYXJzIHRv IGJlIGEgS2VybWl0IHBhY2tldCBvbiB0aGUKKyAgcmV2ZXJzZSBjaGFubmVsLiAgV2hlbiBub3Qg c3RyZWFtaW5nIGFuZCB0aGUgd2luZG93IHNpemUgaXMgZ3JlYXRlciB0aGFuIDEsCisgIHdlIGtl ZXAgc2VuZGluZyBkYXRhIHBhY2tldHMgdW50aWwgd2luZG93IGlzIGZ1bGwgb3IgY2hhcmFjdGVy cyBzdGFydCB0bworICBhcHBlYXIgZnJvbSB0aGUgb3RoZXIgS2VybWl0LgorCisgIEluIHRoZSB3 aW5kb3dpbmcgb3Igc3RyZWFtaW5nIGNhc2UsIHdoZW4gdGhlcmUgaXMgbm8gbW9yZSBkYXRhIGxl ZnQgdG8gc2VuZAorICAob3Igd2hlbiBzZW5kaW5nIGhhcyBiZWVuIGludGVycnVwdGVkKSwgc2Rh dGEoKSBkb2VzIG5vdGhpbmcgYW5kIHJldHVybnMgMAorICBlYWNoIHRpbWUgaXQgaXMgY2FsbGVk IHVudGlsIHRoZSBhY2tub3dsZWRnZW1lbnQgc2VxdWVuY2UgbnVtYmVyIGNhdGNoZXMgdXAKKyAg dG8gdGhlIGxhc3QgZGF0YSBwYWNrZXQgdGhhdCB3YXMgc2VudC4KKyovCitpbnQKK3NkYXRhKCkg eworICAgIGludCBpLCB4LCBsZW47CisgICAgY2hhciAqIHM7CisKKyAgICBkZWJ1ZyhGMTAxLCJz ZGF0YSBlbnRyeSwgZmlyc3QiLCIiLGZpcnN0KTsKKyAgICBkZWJ1ZyhGMTAxLCJzZGF0YSBkcmFp biIsIiIsZHJhaW4pOworLyoKKyAgVGhlICJkcmFpbiIgZmxhZyBpcyB1c2VkIHdpdGggd2luZG93 IHNpemUgPiAxLiAgSXQgbWVhbnMgd2UgaGF2ZSBzZW50CisgIG91ciBsYXN0IGRhdGEgcGFja2V0 LiAgSWYgY2FsbGVkIGFuZCBkcmFpbiBpcyBub3QgemVybywgdGhlbiB3ZSByZXR1cm4KKyAgMCBh cyBpZiB3ZSBoYWQgc2VudCBhbiBlbXB0eSBkYXRhIHBhY2tldCwgdW50aWwgYWxsIGRhdGEgcGFj a2V0cyBoYXZlCisgIGJlZW4gQUNLJ2QsIHRoZW4gdGhlbiB3ZSBjYW4gZmluYWxseSByZXR1cm4g LTEgaW5kaWNhdGluZyBFT0YsIHNvIHRoYXQKKyAgdGhlIHByb3RvY29sIGNhbiBzd2l0Y2ggdG8g c2VvZiBzdGF0ZS4gIFRoaXMgaXMgYSBrbHVkZ2UsIGJ1dCBhdCBsZWFzdAorICBpdCdzIGxvY2Fs aXplZC4uLgorKi8KKyAgICBpZiAoZmlyc3QgPT0gMSkgZHJhaW4gPSAwOwkJLyogU3RhcnQgb2Yg ZmlsZSwgaW5pdCBkcmFpbiBmbGFnLiAqLworCisgICAgaWYgKGRyYWluKSB7CQkJLyogSWYgZHJh aW5pbmcuLi4gKi8KKwlkZWJ1ZyhGMTAxLCJzZGF0YSBkcmFpbmluZywgd2lubG8iLCIiLHdpbmxv KTsKKwlpZiAod2lubG8gPT0gcGt0bnVtKQkJLyogSWYgYWxsIGRhdGEgcGFja2V0cyBhcmUgQUNL J2QgKi8KKwkgIHJldHVybigtMSk7CQkJLyogcmV0dXJuIEVPRiBpbmRpY2F0aW9uICovCisJZWxz ZQkJCQkvKiBvdGhlcndpc2UgKi8KKwkgIHJldHVybigwKTsJCQkvKiBwcmV0ZW5kIHdlIHNlbnQg YSBkYXRhIHBhY2tldC4gKi8KKyAgICB9CisgICAgZGVidWcoRjEwMSwic2RhdGEgc2J1Zm51bSIs IiIsc2J1Zm51bSk7CisgICAgZm9yIChpID0gc2J1Zm51bTsKKwkgaSA+IDAKKyNpZmRlZiBTVFJF QU1JTkcKKwkgfHwgc3RyZWFtaW5nCisjZW5kaWYgLyogU1RSRUFNSU5HICovCisJIDsKKwkgaS0t KSB7CisJaWYgKGkgPCAwKQorCSAgYnJlYWs7CisgICAgICAgIGRlYnVnKEYxMDEsInNkYXRhIGNv dW50ZG93biIsIiIsaSk7CisjaWZkZWYgU1RSRUFNSU5HCisJaWYgKHN0cmVhbWluZykgeworCSAg ICBwa3RudW0gPSAocGt0bnVtICsgMSkgJSA2NDsKKwkgICAgd2lubG8gPSBwa3RudW07CisJICAg IGRlYnVnKEYxMDEsInNkYXRhIHN0cmVhbWluZyBwa3RudW0iLCIiLHBrdG51bSk7CisJfSBlbHNl IHsKKyNlbmRpZiAvKiBTVFJFQU1JTkcgKi8KKwkgICAgeCA9IG54dHBrdCgpOwkJLyogR2V0IG5l eHQgcGt0IG51bWJlciBhbmQgYnVmZmVyICovCisJICAgIGRlYnVnKEYxMDEsInNkYXRhIG54dHBr dCBwa3RudW0iLCIiLHBrdG51bSk7CisJICAgIGlmICh4IDwgMCkgcmV0dXJuKDApOworI2lmZGVm IFNUUkVBTUlORworCX0KKyNlbmRpZiAvKiBTVFJFQU1JTkcgKi8KKwlkZWJ1ZyhGMTAxLCJzZGF0 YSBwYWNrZXQiLCIiLHBrdG51bSk7CisJaWYgKGNoa2ludCgpIDwgMCkJCS8qIEVzcGVjaWFsbHkg aW1wb3J0YW50IGlmIHN0cmVhbWluZyAqLworCSAgcmV0dXJuKC05KTsKKwlpZiAoY3hzZWVuIHx8 IGN6c2VlbikgewkJLyogSWYgaW50ZXJydXB0ZWQsIGRvbmUuICovCisJICAgIGlmICh3c2xvdHMg PiAxKSB7CisJCWRyYWluID0gMTsKKwkJZGVidWcoRjEwMCwic2RhdGEgY3gvenNlZW4gd2luZG93 aW5nIiwiIiwwKTsKKwkJcmV0dXJuKDApOworCSAgICB9IGVsc2UgeworCQlkZWJ1ZyhGMTAwLCJz ZGF0YSBjeC96c2VlbiBub253aW5kb3dpbmciLCIiLDApOworCQlyZXR1cm4oLTEpOworCSAgICB9 CisJfQorI2lmZGVmIERFQlVHCisJaWYgKGRlYmxvZykgeworCSAgICBkZWJ1ZyhGMTAxLCJzZGF0 YSBzcHNpeiIsIiIsc3BzaXopOworCSAgICBkZWJ1ZyhGMTAxLCJzZGF0YSBiaW5hcnkiLCIiLGJp bmFyeSk7CisJICAgIGRlYnVnKEYxMDEsInNkYXRhIHBhcml0eSIsIiIscGFyaXR5KTsKKwl9Cisj ZW5kaWYgLyogREVCVUcgKi8KKyNpZmRlZiBDS1RVTklORworCWlmIChiaW5hcnkgJiYgIXBhcml0 eSAmJiAhbWVtc3RyICYmICFmdW5jc3RyKQorCSAgbGVuID0gYmdldHBrdChzcHNpeik7CisJZWxz ZQorCSAgbGVuID0gZ2V0cGt0KHNwc2l6LDEpOworI2Vsc2UKKwlsZW4gPSBnZXRwa3Qoc3BzaXos MSk7CisjZW5kaWYgLyogQ0tUVU5JTkcgKi8KKwlzID0gKGNoYXIgKilkYXRhOworCWlmIChsZW4g PT0gLTMpIHsJCS8qIFRpbWVkIG91dCAoZS5nLnJlYWRpbmcgZnJvbSBwaXBlKSAqLworCSAgICBz ID0gIiI7CQkJLyogU2VuZCBhbiBlbXB0eSBkYXRhIHBhY2tldC4gKi8KKwkgICAgbGVuID0gMDsK Kwl9IGVsc2UgaWYgKGxlbiA9PSAwKSB7CQkvKiBEb25lIGlmIG5vIGRhdGEuICovCisJICAgIGlm IChwa3RudW0gPT0gd2lubG8pCisJICAgICAgcmV0dXJuKC0xKTsKKwkgICAgZHJhaW4gPSAxOwkJ CS8qIEJ1dCBjYW4ndCByZXR1cm4gLTEgdW50aWwgYWxsICovCisJICAgIGRlYnVnKEYxMDEsInNk YXRhIGVvZiwgZHJhaW4iLCIiLGRyYWluKTsKKwkgICAgcmV0dXJuKDApOwkJCS8qIEFDS3MgYXJl IGRyYWluZWQuICovCisJfQorCWRlYnVnKEYxMDEsInNkYXRhIHBrdG51bSIsIiIscGt0bnVtKTsK KwlkZWJ1ZyhGMTAxLCJzZGF0YSBsZW4iLCIiLGxlbik7CisJZGVidWcoRjAxMSwic2RhdGEgZGF0 YSIsZGF0YSw1Mik7CisKKwl4ID0gc3BhY2soJ0QnLHBrdG51bSxsZW4sKENIQVIgKilzKTsgLyog U2VuZCB0aGUgZGF0YSBwYWNrZXQuICovCisJZGVidWcoRjEwMSwic2RhdGEgc3BhY2siLCIiLHgp OworCWlmICh4IDwgMCkgewkJCS8qIEVycm9yICovCisJICAgIHR0Y2hrKCk7CQkJLyogU2VlIGlm IGNvbm5lY3Rpb24gaXMgc3RpbGwgdGhlcmUgKi8KKwkgICAgcmV0dXJuKC0yKTsKKwl9CisjaWZk ZWYgU1RSRUFNSU5HCisJaWYgKHN0cmVhbWluZykJCQkvKiBXaGF0IGFuIEFDSyB3b3VsZCBkby4g Ki8KKwkgIHdpbmxvID0gcGt0bnVtOworI2VuZGlmIC8qIFNUUkVBTUlORyAqLworCXggPSB0dGNo aygpOwkJCS8qIFBlZWsgYXQgaW5wdXQgYnVmZmVyLiAqLworCWRlYnVnKEYxMDEsInNkYXRhIHR0 Y2hrIiwiIix4KTsJLyogQUNLcyB3YWl0aW5nLCBtYXliZT8gICovCisJaWYgKHggPCAwKQkJCS8q IE9yIGNvbm5lY3Rpb24gYnJva2VuPyAqLworCSAgcmV0dXJuKC0yKTsKKy8qCisgIEhlcmUgd2Ug Y2hlY2sgdG8gc2VlIGlmIGFueSBBQ0tzIG9yIE5BS3MgaGF2ZSBhcnJpdmVkLCBpbiB3aGljaCBj YXNlIHdlCisgIGJyZWFrIG91dCBvZiB0aGUgRC1wYWNrZXQtc2VuZGluZyBsb29wIGFuZCByZXR1 cm4gdG8gdGhlIHN0YXRlIHN3aXRjaGVyCisgIHRvIHByb2Nlc3MgdGhlbS4gIFRoaXMgaXMgd2hh dCBtYWtlcyBvdXIgd2luZG93cyBzbGlkZSBpbnN0ZWFkIG9mIGx1cmNoLgorKi8KKwlpZiAoCisj aWZkZWYgR0VNRE9TCisvKgorICBJbiB0aGUgQXRhcmkgU1QgdmVyc2lvbiwgdHRjaGsoKSBjYW4g b25seSByZXR1cm4gMCBvciAxLiAgQnV0IG5vdGU6IHggd2lsbAorICBwcm9iYWJseSBhbHdheXMg YmUgPiAwLCBzaW5jZSB0aGUgYXMteWV0LXVucmVhZCBwYWNrZXQgdGVybWluYXRvciBmcm9tIHRo ZQorICBsYXN0IHBhY2tldCBpcyBwcm9iYWJseSBzdGlsbCBpbiB0aGUgYnVmZmVyLCBzbyBzbGlk aW5nIHdpbmRvd3Mgd2lsbAorICBwcm9iYWJseSBuZXZlciBoYXBwZW4gd2hlbiB0aGUgQXRhcmkg U1QgaXMgdGhlIGZpbGUgc2VuZGVyLiAgVGhlIGFsdGVybmF0aXZlCisgIGlzIHRvIHNheSAiaWYg KDApIiwgaW4gd2hpY2ggY2FzZSB0aGUgU1Qgd2lsbCBhbHdheXMgc2VuZCBhIHdpbmRvdyBmdWxs IG9mCisgIHBhY2tldHMgYmVmb3JlIHJlYWRpbmcgYW55IEFDS3Mgb3IgTkFLcy4KKyovCisJICAg IHggPiAwCisKKyNlbHNlIC8qICFHRU1ET1MgKi8KKy8qCisgIEluIG1vc3Qgb3RoZXIgdmVyc2lv bnMsIHR0Y2hrKCkgcmV0dXJucyB0aGUgYWN0dWFsIGNvdW50LgorICBJdCBjYW4ndCBiZSBhIEtl cm1pdCBwYWNrZXQgaWYgaXQncyBsZXNzIHRoYW4gZml2ZSBieXRlcyBsb25nLgorKi8KKwkgICAg eCA+IDQgKyBiY3R1CisKKyNlbmRpZiAvKiBHRU1ET1MgKi8KKwkgICAgKQorCSAgcmV0dXJuKDEp OwkJCS8qIFllcywgc3RvcCBzZW5kaW5nIGRhdGEgcGFja2V0cyAqLworICAgIH0JCQkJCS8qIGFu ZCBnbyB0cnkgdG8gcmVhZCB0aGUgQUNLcy4gKi8KKyAgICByZXR1cm4oMSk7Cit9CisKKworLyog IFMgRSBPIEYgLS0gU2VuZCBhbiBFbmQtT2YtRmlsZSBwYWNrZXQgKi8KKworLyogIENhbGwgd2l0 aCBhIHN0cmluZyBwb2ludGVyIHRvIGNoYXJhY3RlciB0byBwdXQgaW4gdGhlIGRhdGEgZmllbGQs ICovCisvKiAgb3IgZWxzZSBhIG51bGwgcG9pbnRlciBvciAiIiBmb3Igbm8gZGF0YS4gICovCisK Ky8qCisgIFRoZXJlIGFyZSB0d28gInNlbmQtZW9mIiBmdW5jdGlvbnMuICBzZW9mKCkgaXMgdXNl ZCB0byBzZW5kIHRoZSBub3JtYWwgZW9mCisgIHBhY2tldCBhdCB0aGUgZW5kIG9mIGEgZmlsZSdz IGRhdGEgKGV2ZW4gaWYgdGhlIGZpbGUgaGFzIG5vIGRhdGEpLCBvciB3aGVuCisgIGEgZmlsZSB0 cmFuc2ZlciBpcyBpbnRlcnJ1cHRlZC4gIHN4ZW9mKCkgaXMgdXNlZCB0byBzZW5kIGFuIEVPRiBw YWNrZXQgdGhhdAorICBvY2N1cnMgYmVjYXVzZSBvZiBhdHRyaWJ1dGUgcmVmdXNhbCBvciBpbnRl cnJ1cHRpb24gcHJpb3IgdG8gZW50ZXJpbmcgZGF0YQorICBzdGF0ZS4gIFRoZSBkaWZmZXJlbmNl IGlzIHB1cmVseSBhIG1hdHRlciBvZiBidWZmZXIgYWxsb2NhdGlvbiBhbmQgcGFja2V0CisgIHNl cXVlbmNlIG51bWJlciBtYW5hZ2VtZW50LiAgQm90aCBmdW5jdGlvbnMgYWN0IGFzICJmcm9udCBl bmRzIiB0byB0aGUKKyAgY29tbW9uIHNlbmQtZW9mIGZ1bmN0aW9uLCBzemVvZigpLgorKi8KKwor LyogQ29kZSBjb21tb24gdG8gYm90aCBzZW9mKCkgYW5kIHN4ZW9mKCkgKi8KKworaW50CitzemVv ZihzKSBDSEFSICpzOyB7CisgICAgaW50IHg7CisgICAgbHNzdGF0ZSA9IDA7CQkJLyogQ2FuY2Vs IGxvY2tpbmctc2hpZnQgc3RhdGUgKi8KKyAgICBpZiAoIXMpIHMgPSAoQ0hBUiAqKSIiOworICAg IGRlYnVnKEYxMTEsInN6ZW9mIixzLHBrdG51bSk7CisgICAgaWYgKCpzKSB7CisJeCA9IHNwYWNr KCdaJyxwa3RudW0sMSxzKTsKKwl4aXRzdGEgfD0gV19TRU5EOworI2lmZGVmIENPTU1FTlQKKwl0 bG9nKEYxMDAsIiAqKiogaW50ZXJydXB0ZWQsIHNlbmRpbmcgZGlzY2FyZCByZXF1ZXN0IiwiIiww TCk7CisjZW5kaWYgLyogQ09NTUVOVCAqLworCWZpbHJlaisrOworICAgIH0gZWxzZSB7CisJeCA9 IHNwYWNrKCdaJyxwa3RudW0sMCwoQ0hBUiAqKSIiKTsKKyAgICB9CisgICAgaWYgKHggPCAwKQor ICAgICAgcmV0dXJuKHgpOworCisjaWZkZWYgQ09NTUVOVAorICAgIC8qIE5vLCB0b28gc29vbiAq LworICAgIGRpc2NhcmQgPSAwOwkJCS8qIFR1cm4gb2ZmIHBlci1maWxlIGRpc2NhcmQgZmxhZyAq LworI2VuZGlmIC8qIENPTU1FTlQgKi8KKworLyogSWYgd2Ugd2VyZSBzZW5kaW5nIGZyb20gYSBw aXBlLCB3ZSdyZSBub3QgYW55IG1vcmUuLi4gKi8KKyAgICBwaXBlc2VuZCA9IDA7CisgICAgcmV0 dXJuKDApOworfQorCitpbnQKK3Nlb2YoeCkgaW50IHg7IHsKKyAgICBjaGFyICogczsKKy8qCisg IGNrY3Byby53LCBiZWZvcmUgY2FsbGluZyBzZW9mKCksIHNldHMgd2luZG93IHNpemUgYmFjayB0 byAxIGFuZCB0aGVuIGNhbGxzCisgIHdpbmRvdygpLCB3aGljaCBjbGVhcnMgb3V0IHRoZSBvbGQg YnVmZmVycy4gIFRoaXMgaXMgT0sgYmVjYXVzZSB0aGUgZmluYWwKKyAgZGF0YSBwYWNrZXQgZm9y IHRoZSBmaWxlIGhhcyBiZWVuIEFDSydkLiAgSG93ZXZlciwgc2RhdGEoKSBoYXMgYWxyZWFkeQor ICBjYWxsZWQgbnh0cGt0KCksIHdoaWNoIHNldCB0aGUgbmV3IHZhbHVlIG9mIHBrdG51bSB3aGlj aCBzZW9mKCkgd2lsbCB1c2UuCisgIFNvIGFsbCB3ZSBuZWVkIHRvIGRvIGhlcmUgaXMgaXMgYWxs b2NhdGUgYSBuZXcgc2VuZC1idWZmZXIuCisqLworICAgIHMgPSB4ID8gIkQiIDogIiI7CisgICAg ZGVidWcoRjExMSwic2VvZiIscyxwa3RudW0pOworICAgIGlmIChnZXRzYnVmKHBrdG51bSkgPCAw KSB7CS8qIEdldCBhIGJ1ZmZlciBmb3IgcGFja2V0IG4gKi8KKwlkZWJ1ZyhGMTAxLCJzZW9mIGNh bid0IGdldCBzLWJ1ZmZlciIsIiIscGt0bnVtKTsKKwlyZXR1cm4oLTEpOworICAgIH0KKyAgICBy ZXR1cm4oc3plb2YoKENIQVIgKilzKSk7Cit9CisKKy8qCisgIFZlcnNpb24gb2Ygc2VvZigpIHRv IGJlIGNhbGxlZCB3aGVuIHNkYXRhKCkgaGFzIG5vdCBiZWVuIGNhbGxlZCBiZWZvcmUuICBUaGUK KyAgZGlmZmVyZW5jZSBpcyB0aGF0IHRoaXMgdmVyc2lvbiBjYWxscyBueHRwa3QoKSB0byBhbGxv Y2F0ZSBhIHNlbmQtYnVmZmVyIGFuZAorICBnZXQgdGhlIG5leHQgcGFja2V0IG51bWJlci4KKyov CitpbnQKK3N4ZW9mKHgpIGludCB4OyB7CisgICAgY2hhciAqIHM7CisgICAgcyA9IHggPyAiRCIg OiAiIjsKKyAgICBpZiAobnh0cGt0KCkgPCAwKQkJCS8qIEdldCBuZXh0IHBrdCBudW1iZXIgYW5k IGJ1ZmZlciAqLworICAgICAgZGVidWcoRjEwMSwic3hlb2Ygbnh0cGt0IGZhaWxzIiwiIixwa3Ru dW0pOworICAgIGVsc2UKKyAgICAgIGRlYnVnKEYxMDEsInN4ZW9mIHBhY2tldCIsIiIscGt0bnVt KTsKKyAgICByZXR1cm4oc3plb2YoKENIQVIgKilzKSk7Cit9CisKKy8qICBTIEUgTyBUIC0tIFNl bmQgYW4gRW5kLU9mLVRyYW5zYWN0aW9uIHBhY2tldCAqLworCitpbnQKK3Nlb3QoKSB7CisgICAg aW50IHg7CisgICAgeCA9IG54dHBrdCgpOworICAgIGRlYnVnKEYxMDEsInNlb3Qgbnh0cGt0Iiwi Iix4KTsKKyAgICBpZiAoeCA8IDApIHJldHVybigtMSk7CQkvKiBCdW1wIHBhY2tldCBudW1iZXIs IGdldCBidWZmZXIgKi8KKyAgICB4ID0gc3BhY2soJ0InLHBrdG51bSwwLChDSEFSICopIiIpOwkv KiBTZW5kIHRoZSBFT1QgcGFja2V0ICovCisgICAgaWYgKHggPCAwKQorICAgICAgcmV0dXJuKHgp OworICAgIGN4c2VlbiA9IGN6c2VlbiA9IGRpc2NhcmQgPSAwOwkvKiBSZXNldCBpbnRlcnJ1cHRp b24gZmxhZ3MgKi8KKyAgICB0c3RhdHMoKTsJCQkJLyogTG9nIHRpbWluZyBpbmZvICovCisgICAg cmV0dXJuKDApOworfQorCisKKy8qICAgUiBQIEEgUiAtLSBGaWxsIHRoZSBkYXRhIGFycmF5IHdp dGggbXkgc2VuZC1pbml0IHBhcmFtZXRlcnMgICovCisKK2ludCBxOGZsYWcgPSAwOworCitDSEFS IGRhZGFbMzJdOwkJCQkvKiBVc2UgdGhpcyBpbnN0ZWFkIG9mIGRhdGFbXS4gKi8KKwkJCQkJLyog VG8gYXZvaWQgc29tZSBraW5kIG9mIHdpZXJkICovCisJCQkJCS8qIGFkZHJlc3NpbmcgZm91bHVw IGluIHNwYWNrKCkuLi4gKi8KKwkJCQkJLyogKHdoaWNoIG1pZ2h0IGJlIGZpeGVkIG5vdy4uLikg Ki8KKworQ0hBUiAqCitycGFyKCkgeworICAgIGNoYXIgKnA7CisgICAgaW50IGksIHgsIG1heDsK KyAgICBleHRlcm4gaW50IHNwcm1sZW47CisKKyAgICBtYXggPSBtYXhkYXRhKCk7CQkJLyogQmln Z2VzdCBkYXRhIGZpZWxkIEkgY2FuIHNlbmQgKi8KKyAgICBkZWJ1ZyhGMTAxLCAicnBhciBtYXgg MSIsIiIsbWF4KTsKKyAgICBkZWJ1ZyhGMTAxLCAicnBhciBzcHJtbGVuIiwiIixzcHJtbGVuKTsK KyAgICBpZiAoc3BybWxlbiA+IDEgJiYgc3BybWxlbiA8IG1heCkJLyogVXNlciBvdmVycmlkZSAq LworICAgICAgbWF4ID0gc3BybWxlbjsKKyAgICBkZWJ1ZyhGMTAxLCAicnBhciBtYXggMiIsIiIs bWF4KTsKKworICAgIGlmIChycHNpeiA+IE1BWFBBQ0spCQkvKiBCaWdnZXN0IG5vcm1hbCBwYWNr ZXQgSSB3YW50LiAqLworICAgICAgZGFkYVswXSA9IChjaGFyKSB0b2NoYXIoTUFYUEFDSyk7CS8q IElmID4gOTQsIHVzZSA5NCwgYnV0IHNwZWNpZnkgKi8KKyAgICBlbHNlCQkJCS8qIGV4dGVuZGVk IHBhY2tldCBsZW5ndGggYmVsb3cuLi4gKi8KKyAgICAgIGRhZGFbMF0gPSAoY2hhcikgdG9jaGFy KHJwc2l6KTsJLyogZWxzZSB1c2Ugd2hhdCB0aGUgdXNlciBzYWlkLiAqLworICAgIGRhZGFbMV0g PSAoY2hhcikgdG9jaGFyKGNoa3RpbW8ocGt0dGltLDApKTsgLyogV2hlbiB0byB0aW1lIG1lIG91 dCAqLworICAgIGRhZGFbMl0gPSAoY2hhcikgdG9jaGFyKG15cGFkbik7CS8qIEhvdyBtdWNoIHBh ZGRpbmcgSSBuZWVkIChub25lKSAqLworICAgIGRhZGFbM10gPSAoY2hhcikgY3RsKG15cGFkYyk7 CS8qIFBhZGRpbmcgY2hhcmFjdGVyIEkgd2FudCAqLworICAgIGRhZGFbNF0gPSAoY2hhcikgdG9j aGFyKGVvbCk7CS8qIEVuZC1PZi1MaW5lIGNoYXJhY3RlciBJIHdhbnQgKi8KKyAgICBkYWRhWzVd ID0gbXljdGxxOwkJCS8qIENvbnRyb2wtUXVvdGUgY2hhcmFjdGVyIEkgc2VuZCAqLworCisgICAg aWYgKG1heCA8IDYpIHsgZGFkYVs2XSA9IE5VTDsgcnFmID0gMDsgZWJxID0gc3EgPSBOVUw7IHJl dHVybihkYWRhKTsgfQorCisgICAgc3dpdGNoIChycWYpIHsJCQkvKiA4dGgtYml0IHByZWZpeCAo c2luZ2xlLXNoaWZ0KSAqLworICAgICAgY2FzZSAtMToJCQkJLyogSSdtIG9wZW5pbmcgdGhlIGJp ZHMgKi8KKyAgICAgIGNhc2UgIDE6CQkJCS8qIE90aGVyIEtlcm1pdCBhbHJlYWR5IGJpZCAnWScg Ki8KKwlpZiAocGFyaXR5KSBlYnEgPSBzcSA9IE1ZRUJROwkvKiBTbyBJIHJlcGx5IHdpdGggJyYn IGlmIHBhcml0eSAqLworCWJyZWFrOwkJCQkvKiAgb3RoZXJ3aXNlIHdpdGggJ1knLiAqLworICAg ICAgY2FzZSAgMjoJCQkJLyogT3RoZXIgS2VybWl0IHNlbnQgYSB2YWxpZCBwcmVmaXggKi8KKwlp ZiAocThmbGFnKQorCSAgc3EgPSBlYnE7CQkJLyogRmFsbCB0aHJvdWdoIG9uIHB1cnBvc2UgKi8K KyAgICAgIGNhc2UgIDA6CQkJCS8qIE90aGVyIEtlcm1pdCBiaWQgbm90aGluZyAqLworCWJyZWFr OwkJCQkvKiBTbyBJIHJlcGx5IHdpdGggJ1knLiAqLworICAgIH0KKyAgICBkZWJ1ZyhGMDAwLCJy cGFyIDhicSBzcSIsIiIsc3EpOworICAgIGRlYnVnKEYwMDAsInJwYXIgOGJxIGVicSIsIiIsZWJx KTsKKyAgICBpZiAobHNjYXB1ID09IDIpCQkJLyogTE9DS0lORy1TSElGVCBGT1JDRUQgKi8KKyAg ICAgIGRhZGFbNl0gPSAnTic7CQkJLyogcmVxdWlyZXMgbm8gc2luZ2xlLXNoaWZ0ICovCisgICAg ZWxzZQkJCQkvKiBvdGhlcndpc2Ugc2VuZCBwcmVmaXggb3IgJ1knICovCisgICAgICBkYWRhWzZd ID0gKGNoYXIpIHNxOworICAgIGVicXNlbnQgPSBkYWRhWzZdOwkJCS8qIEFuZCByZW1lbWJlciB3 aGF0IEkgcmVhbGx5IHNlbnQgKi8KKworICAgIGlmIChtYXggPCA3KSB7IGRhZGFbN10gPSBOVUw7 IGJjdHIgPSAxOyByZXR1cm4oZGFkYSk7IH0KKworICAgIGRhZGFbN10gPSAoY2hhcikgKGJjdHIg PT0gNCkgPyAnQicgOiBiY3RyICsgJzAnOyAvKiBCbG9jayBjaGVjayB0eXBlICovCisKKyAgICBp ZiAobWF4IDwgOCkgeyBkYWRhWzhdID0gTlVMOyBycHRmbGcgPSAwOyByZXR1cm4oZGFkYSk7IH0K KworICAgIGlmIChycHRlbmEpIHsKKwlpZiAocnB0ZmxnKQkJCS8qIFJ1biBsZW5ndGggZW5jb2Rp bmcgKi8KKwkgIGRhZGFbOF0gPSAoY2hhcikgcnB0cTsJLyogSWYgcmVjZWl2aW5nLCBhZ3JlZSAq LworCWVsc2UJCQkJLyogYnkgcmVwbHlpbmcgd2l0aCBzYW1lIGNoYXJhY3Rlci4gKi8KKwkgIGRh ZGFbOF0gPSAoY2hhcikgKHJwdHEgPSBteXJwdHEpOyAvKiBXaGVuIHNlbmRpbmcgdXNlIHRoaXMu ICovCisgICAgfSBlbHNlIGRhZGFbOF0gPSBTUDsJCS8qIE5vdCBlbmFibGVkLCBwdXQgYSBzcGFj ZSBoZXJlLiAqLworCisgICAgLyogQ0FQQVMgbWFzayAqLworCisgICAgaWYgKG1heCA8IDkpIHsK KwlkYWRhWzldID0gTlVMOworCWF0Y2FwciA9IDA7CisJbHBjYXByID0gMDsKKwlzd2NhcHIgPSAw OworCXJzY2FwciA9IDA7CisJcmV0dXJuKGRhZGEpOworICAgIH0KKyAgICBkYWRhWzldID0gKGNo YXIpIHRvY2hhcigobHNjYXByID8gbHNjYXBiIDogMCkgfCAvKiBMb2NraW5nIHNoaWZ0cyAqLwor CQkgICAgIChhdGNhcHIgPyBhdGNhcGIgOiAwKSB8IC8qIEF0dHJpYnV0ZSBwYWNrZXRzICovCisJ CSAgICAgKGxwY2FwciA/IGxwY2FwYiA6IDApIHwgLyogTG9uZyBwYWNrZXRzICovCisJCSAgICAg KHN3Y2FwciA/IHN3Y2FwYiA6IDApIHwgLyogU2xpZGluZyB3aW5kb3dzICovCisJCSAgICAgKHJz Y2FwciA/IHJzY2FwYiA6IDApKTsgLyogUkVTRU5EICovCisgICAgaWYgKG1heCA8IDEwKSB7IHdz bG90ciA9IDE7IHJldHVybihkYWRhKTsgfQorICAgIGRhZGFbMTBdID0gKGNoYXIpIHRvY2hhcihz d2NhcHIgPyB3c2xvdHIgOiAxKTsgLyogQ0FQQVMrMSA9IFdpbmRvdyBzaXplICovCisKKyAgICBp ZiAobWF4IDwgMTIpIHsgcnBzaXogPSA4MDsgcmV0dXJuKGRhZGEpOyB9CisgICAgaWYgKHVycHNp eiA+IDk0KQorICAgICAgcnBzaXogPSB1cnBzaXogLSAxOwkJLyogTG9uZyBwYWNrZXRzIC4uLiAq LworICAgIGRhZGFbMTFdID0gKGNoYXIpIHRvY2hhcihycHNpeiAvIDk1KTsgLyogTG9uZyBwYWNr ZXQgc2l6ZSwgYmlnIHBhcnQgKi8KKyAgICBkYWRhWzEyXSA9IChjaGFyKSB0b2NoYXIocnBzaXog JSA5NSk7IC8qIExvbmcgcGFja2V0IHNpemUsIGxpdHRsZSBwYXJ0ICovCisKKyAgICBpZiAobWF4 IDwgMTYpIHJldHVybihkYWRhKTsKKyAgICBkYWRhWzEzXSA9ICcwJzsJCQkvKiBDQVBBUys0ID0g V09OVCBDSEtQTlQgKi8KKyAgICBkYWRhWzE0XSA9ICdfJzsJCQkvKiBDQVBBUys1ID0gQ0hLSU5U IChyZXNlcnZlZCkgKi8KKyAgICBkYWRhWzE1XSA9ICdfJzsJCQkvKiBDQVBBUys2ID0gQ0hLSU5U IChyZXNlcnZlZCkgKi8KKyAgICBkYWRhWzE2XSA9ICdfJzsJCQkvKiBDQVBBUys3ID0gQ0hLSU5U IChyZXNlcnZlZCkgKi8KKyAgICBpZiAobWF4IDwgMTcpIHJldHVybihkYWRhKTsKKyNpZm5kZWYg V0hBVEFNSQorICAgIGRhZGFbMTddID0gJyAnOworI2Vsc2UKKyAgICB4ID0gMDsKKyAgICBpZiAo c2VydmVyKSB4IHw9IFdNSV9TRVJWRTsJCS8qIFdoZXRoZXIgSSBhbSBhIHNlcnZlciAqLworICAg IGlmIChiaW5hcnkpIHggfD0gV01JX0ZNT0RFOwkJLyogTXkgZmlsZSB0cmFuc2ZlciBtb2RlIGlz IC4uLiAqLworICAgIGlmIChmbmNudikgIHggfD0gV01JX0ZOQU1FOwkJLyogTXkgZmlsZW5hbWUg Y29udmVyc2lvbiBpcyAuLi4gKi8KKyNpZmRlZiBTVFJFQU1JTkcKKyAgICBpZiAoc3RyZWFtcnEg PT0gU0VUX09OKQorICAgICAgeCB8PSBXTUlfU1RSRUFNOworICAgIGVsc2UgaWYgKHN0cmVhbXJx ID09IFNFVF9BVVRPICYmIHJlbGlhYmxlID09IFNFVF9PTikKKyAgICAgIHggfD0gV01JX1NUUkVB TTsKKyAgICAvKgorICAgICAgQWx3YXlzIG9mZmVyIHRvIHN0cmVhbSB3aGVuIGluIHJlbW90ZSBt b2RlIGFuZCBTVFJFQU1JTkcgaXMgQVVUTworICAgICAgYW5kIFJFTElBQkxFIGlzIG5vdCBPRkYg KGkuZS4gaXMgT04gb3IgQVVUTykuCisgICAgKi8KKyAgICBlbHNlIGlmICghbG9jYWwgJiYgc3Ry ZWFtcnEgPT0gU0VUX0FVVE8gJiYgcmVsaWFibGUgIT0gU0VUX09GRikKKyAgICAgIHggfD0gV01J X1NUUkVBTTsKKyNlbmRpZiAvKiBTVFJFQU1JTkcgKi8KKyNpZmRlZiBUQ1BTT0NLRVQKKyAgICBp ZiAoY2xlYXJycSA9PSBTRVRfT04pCisgICAgICB4IHw9IFdNSV9DTEVBUjsKKyAgICBlbHNlIGlm IChjbGVhcnJxID09IFNFVF9BVVRPICYmCS8qIFNFVCBDTEVBUi1DSEFOTkVMIEFVVE8gKi8KKwkg ICAgICgobmV0d29yayAmJiBuZXR0eXBlID09IE5FVF9UQ1BCIC8qIFRDUC9JUCAqLworI2lmZGVm IFJMT0dDT0RFCisgICAgICAgICAgICAgICAgJiYgdHRucHJvdG8gIT0gTlBfUkxPR0lOLyogUmxv Z2luIGlzIG5vdCBjbGVhciAqLworICAgICAgICAgICAgICAgICYmICEodHRucHJvdG8gPj0gTlBf SzRMT0dJTiAmJiB0dG5wcm90byA8PSBOUF9FSzVMT0dJTikKKyNlbmRpZiAvKiBSTE9HQ09ERSAq LworCSAgICAgICApCisjaWZkZWYgU1NIQlVJTFRJTgorICAgICAgICAgICAgICB8fCAobmV0d29y ayAmJiBuZXR0eXBlID09IE5FVF9TU0gpCisjZW5kaWYgLyogU1NIQlVJTFRJTiAqLworI2lmZGVm IElLU0QKKwkgICAgICB8fCBpbnNlcnZlcgkJLyogV2UgYXJlIElLU0QgKi8KKyNlbmRpZiAvKiBJ S1NEICovCisJICAgICAgKSkKKyAgICAgIHggfD0gV01JX0NMRUFSOworI2VuZGlmIC8qIFRDUFNP Q0tFVCAqLworICAgIHggfD0gV01JX0ZMQUc7CisgICAgZGFkYVsxN10gPSAoY2hhcikgdG9jaGFy KHgpOworI2VuZGlmIC8qIFdIQVRBTUkgKi8KKyAgICBpID0gMTg7CQkJCS8qIFBvc2l0aW9uIG9m IG5leHQgZmllbGQgKi8KKyAgICBwID0gY2tzeXNpZDsJCQkvKiBXSE9BTUkgKG15IHN5c3RlbSBJ RCkgKi8KKyAgICB4ID0gc3RybGVuKHApOworICAgIGlmIChtYXggLSBpIDwgeCArIDEpIHJldHVy bihkYWRhKTsKKyAgICBpZiAoeCA+IDApIHsKKwlkYWRhW2krK10gPSAoY2hhcikgdG9jaGFyKHgp OworCXdoaWxlICgqcCkKKwkgIGRhZGFbaSsrXSA9ICpwKys7CisgICAgfQorCisgICAgaWYgKG1h eCA8IGkrMSkgcmV0dXJuKGRhZGEpOworI2lmbmRlZiBXSEFUQU1JCQkJCS8qIFdIQVRBTUkyICov CisgICAgZGFkYVtpKytdID0gJyAnOworI2Vsc2UKKyAgICBkZWJ1ZyhGMTAxLCJycGFyIHhmZXJt b2RlIiwiIix4ZmVybW9kZSk7CisgICAgeCA9IFdNSTJfRkxBRzsJCQkvKiBJcy1WYWxpZCBmbGFn ICovCisgICAgaWYgKHhmZXJtb2RlICE9IFhNT0RFX0EpCQkvKiBJZiBUUkFOU0ZFUiBNT0RFIGlz IE1BTlVBTCAqLworICAgICAgeCB8PSBXTUkyX1hNT0RFOwkJCS8qIHNldCB0aGUgWEZFUk1PREUg Yml0ICovCisgICAgaWYgKHJlY3Vyc2l2ZSA+IDApCQkJLyogSWYgdGhpcyBpcyBhIHJlY3Vyc2l2 ZSB0cmFuc2ZlciAqLworICAgICAgeCB8PSBXTUkyX1JFQ1U7CQkJLyogc2V0IHRoZSBSRUNVUlNJ VkUgYml0ICovCisgICAgZGFkYVtpKytdID0gdG9jaGFyKHgpOworICAgIGRlYnVnKEYxMDEsInJw YXIgd2hhdGFtaTIiLCIiLHgpOworI2VuZGlmIC8qIFdIQVRBTUkgKi8KKworICAgIGRhZGFbaV0g PSAnXDAnOwkJCS8qIFRlcm1pbmF0ZSB0aGUgaW5pdCBzdHJpbmcgKi8KKworI2lmZGVmIERFQlVH CisgICAgaWYgKGRlYmxvZykgeworCWRlYnVnKEYxMTAsInJwYXIiLGRhZGEsMCk7CisJcmRlYnUo ZGFkYSwoaW50KXN0cmxlbigoY2hhciAqKWRhZGEpKTsKKyAgICB9CisjZW5kaWYgLyogREVCVUcg Ki8KKyAgICBja3N0cm5jcHkoKGNoYXIgKilteWluaXQsKGNoYXIgKilkYWRhLE1ZSU5JVExFTik7 CisgICAgcmV0dXJuKGRhZGEpOwkJCS8qIFJldHVybiBwb2ludGVyIHRvIHN0cmluZy4gKi8KK30K KworaW50CitzcGFyKHMpIENIQVIgKnM7IHsJCQkvKiBTZXQgcGFyYW1ldGVycyAqLworICAgIGlu dCB4LCB5LCBscHNpeiwgYmlnZ2VzdDsKKyAgICBleHRlcm4gaW50IHJwcm1sZW4sIGxhc3RzcG1h eDsKKyAgICBleHRlcm4gc3RydWN0IHN5c2RhdGEgc3lzaWRsaXN0W107CisKKyAgICB3aGF0cnUg PSAwOworICAgIHdob2FyZXVbMF0gPSBOVUw7CisjaWZkZWYgU1RSRUFNSU5HCisgICAgc3RyZWFt b2sgPSAwOworICAgIHN0cmVhbWluZyA9IDA7CisjZW5kaWYgLyogU1RSRUFNSU5HICovCisgICAg YmlnZ2VzdCA9IHJsbjsKKworICAgIGRlYnVnKEYxMDEsICJzcGFyIGJpZ2dlc3QgMSIsIiIsYmln Z2VzdCk7CisgICAgZGVidWcoRjEwMSwgInNwYXIgcnBybWxlbiIsIiIscnBybWxlbik7CisgICAg aWYgKHJwcm1sZW4gPiAxICYmIHJwcm1sZW4gPCBiaWdnZXN0KQorICAgICAgYmlnZ2VzdCA9IHJw cm1sZW47CisgICAgZGVidWcoRjEwMSwgInJwYXIgYmlnZ2VzdCAyIiwiIixiaWdnZXN0KTsKKyAg ICBkZWJ1ZyhGMTEwLCJzcGFyIHBhY2tldCIscywwKTsKKworICAgIHMtLTsJCQkJLyogTGluZSB1 cCB3aXRoIGZpZWxkIG51bWJlcnMuICovCisKKy8qIExpbWl0IG9uIHNpemUgb2Ygb3V0Ym91bmQg cGFja2V0cyAqLworICAgIHggPSAoYmlnZ2VzdCA+PSAxKSA/IHh1bmNoYXIoc1sxXSkgOiA4MDsK KyAgICBscHNpeiA9IHNwc2l6cjsJCQkvKiBSZW1lbWJlciB3aGF0IHRoZXkgU0VULiAqLworICAg IGlmIChzcHNpemYpIHsJCQkvKiBTRVQtY29tbWFuZCBvdmVycmlkZT8gKi8KKwlpZiAoeCA8IHNw c2l6cikgc3BzaXogPSB4OwkvKiBJZ25vcmUgTEVOIHVubGVzcyBzbWFsbGVyICovCisgICAgfSBl bHNlIHsJCQkJLyogb3RoZXJ3aXNlICovCisJc3BzaXogPSAoeCA8IDEwKSA/IDgwIDogeDsJLyog YmVsaWV2ZSB0aGVtIGlmIHJlYXNvbmFibGUgKi8KKyAgICB9CisgICAgc3BtYXggPSBzcHNpejsJ CQkvKiBSZW1lbWJlciBtYXhpbXVtIHNpemUgKi8KKworLyogVGltZW91dCBvbiBpbmJvdW5kIHBh Y2tldHMgKi8KKyAgICBpZiAodGltZWYpIHsKKwl0aW1pbnQgPSBydGltbzsJCQkvKiBTRVQgU0VO RCBUSU1FT1VUIHZhbHVlIG92ZXJyaWRlcyAqLworICAgIH0gZWxzZSB7CQkJCS8qIE90aGVyd2lz ZSB1c2UgcmVxdWVzdGVkIHZhbHVlLCAqLworCXggPSAoYmlnZ2VzdCA+PSAyKSA/IHh1bmNoYXIo c1syXSkgOiBydGltbzsgLyogaWYgaXQgaXMgbGVnYWwuICovCisJdGltaW50ID0gKHggPCAwKSA/ IHJ0aW1vIDogeDsKKyAgICB9CisgICAgdGltaW50ID0gY2hrdGltbyh0aW1pbnQsdGltZWYpOwkv KiBBZGp1c3QgaWYgbmVjZXNzYXJ5ICovCisKKy8qIE91dGJvdW5kIFBhZGRpbmcgKi8KKyAgICBu cGFkID0gMDsgcGFkY2ggPSAnXDAnOworICAgIGlmIChiaWdnZXN0ID49IDMpIHsKKwlucGFkID0g eHVuY2hhcihzWzNdKTsKKwlpZiAoYmlnZ2VzdCA+PSA0KSBwYWRjaCA9IChDSEFSKSBjdGwoc1s0 XSk7IGVsc2UgcGFkY2ggPSAwOworICAgIH0KKyAgICBpZiAobnBhZCkgeworCWludCBpOworCWZv ciAoaSA9IDA7IGkgPCBucGFkOyBpKyspIHBhZGJ1ZltpXSA9IGRvcGFyKHBhZGNoKTsKKyAgICB9 CisKKy8qIE91dGJvdW5kIFBhY2tldCBUZXJtaW5hdG9yICovCisgICAgc2VvbCA9IChDSEFSKSAo YmlnZ2VzdCA+PSA1KSA/IHh1bmNoYXIoc1s1XSkgOiBDUjsKKyAgICBpZiAoKHNlb2wgPCAxKSB8 fCAoc2VvbCA+IDMxKSkgc2VvbCA9IENSOworCisvKiBDb250cm9sIHByZWZpeCB0aGF0IHRoZSBv dGhlciBLZXJtaXQgaXMgc2VuZGluZyAqLworICAgIHggPSAoYmlnZ2VzdCA+PSA2KSA/IHNbNl0g OiAnIyc7CisgICAgY3RscSA9IChDSEFSKSAoKCh4ID4gMzIgJiYgeCA8IDYzKSB8fCAoeCA+IDk1 ICYmIHggPCAxMjcpKSA/IHggOiAnIycpOworCisvKiA4dGgtYml0IHByZWZpeCAqLworLyoKKyAg Tk9URTogTWF5YmUgdGhpcyBjb3VsZCBiZSBzaW1wbGlmaWVkIHVzaW5nIHJjdnR5cC4KKyAgSWYg cmN2dHlwID09ICdZJyB0aGVuIHdlJ3JlIHJlYWRpbmcgdGhlIEFDSywKKyAgb3RoZXJ3aXNlIHdl J3JlIHJlYWRpbmcgdGhlIG90aGVyIEtlcm1pdCdzIGluaXRpYWwgYmlkLgorICBCdXQgaGlzIGhv cnJlbmRvdXMgY29kZSBoYXMgYmVlbiB3b3JraW5nIE9LIGZvciB5ZWFycywgc28uLi4KKyovCisg ICAgcnEgPSAoYmlnZ2VzdCA+PSA3KSA/IHNbN10gOiAwOworICAgIGlmIChycSA9PSAnWScpIHJx ZiA9IDE7CisgICAgICBlbHNlIGlmICgocnEgPiAzMiAmJiBycSA8IDYzKSB8fCAocnEgPiA5NSAm JiBycSA8IDEyNykpIHJxZiA9IDI7CisgICAgICAgIGVsc2UgcnFmID0gMDsKKyAgICBkZWJ1ZyhG MDAwLCJzcGFyIDhicSBycSIsIiIscnEpOworICAgIGRlYnVnKEYwMDAsInNwYXIgOGJxIHNxIiwi IixzcSk7CisgICAgZGVidWcoRjAwMCwic3BhciA4YnEgZWJxIiwiIixlYnEpOworICAgIGRlYnVn KEYxMDEsInNwYXIgOGJxIHJxZiIsIiIscnFmKTsKKyAgICBzd2l0Y2ggKHJxZikgeworICAgICAg Y2FzZSAwOgkJCQkvKiBGaWVsZCBpcyBtaXNzaW5nIGZyb20gcGFja2V0LiAqLworCWVicWZsZyA9 IDA7CQkJLyogU28gbm8gOHRoLWJpdCBwcmVmaXhpbmcuICovCisJYnJlYWs7CisgICAgICBjYXNl IDE6CQkJCS8qIE90aGVyIEtlcm1pdCBzZW50ICdZJyA9IFdpbGwgRG8uICovCisJLyoKKyAgICAg ICAgICBXaGVuIEkgYW0gdGhlIGZpbGUgcmVjZWl2ZXIsIGVicXNlbnQgaXMgMCBiZWNhdXNlIEkg ZGlkbid0IHNlbmQgYQorICAgICAgICAgIG5lZ290aWF0aW9uIHlldC4gIElmIG15IHBhcml0eSBp cyBzZXQgdG8gYW55dGhpbmcgb3RoZXIgdGhhbiBOT05FLAorICAgICAgICAgIGVpdGhlciBiZWNh dXNlIG15IHVzZXIgU0VUIFBBUklUWSBvciBiZWNhdXNlIEkgZGV0ZWN0ZWQgcGFyaXR5IGJpdHMK KyAgICAgICAgICBvbiB0aGlzIHBhY2tldCwgSSByZXBseSB3aXRoICcmJywgb3RoZXJ3aXNlICdZ Jy4KKworCSAgV2hlbiBJIGFtIHRoZSBmaWxlIHNlbmRlciwgZWJxc2VudCBpcyB3aGF0IEkganVz dCBzZW50IGluIHJwYXIoKSwKKyAgICAgICAgICB3aGljaCBjYW4gYmUgJ1knLCAnTicsIG9yICcm Jy4gIElmIEkgc2VudCAnJicsIHRoZW4gdGhpcyAnWScgbWVhbnMKKyAgICAgICAgICB0aGUgb3Ro ZXIgS2VybWl0IGFncmVlcyB0byBkbyA4dGgtYml0IHByZWZpeGluZy4KKworICAgICAgICAgIElm IEkgc2VudCAnWScgb3IgJ04nLCBidXQgdGhlbiBkZXRlY3RlZCBwYXJpdHkgb24gdGhlIEFDSyBw YWNrZXQKKyAgICAgICAgICB0aGF0IGNhbWUgYmFjaywgdGhlbiBpdCdzIHRvbyBsYXRlOiB0aGVy ZSBpcyBubyBsb25nZXIgYW55IHdheSBmb3IKKyAgICAgICAgICBtZSB0byB0ZWxsIHRoZSBvdGhl ciBLZXJtaXQgdGhhdCBJIHdhbnQgdG8gZG8gOHRoLWJpdCBwcmVmaXhpbmcsIHNvCisgICAgICAg ICAgSSBtdXN0IG5vdCBkbyBpdCwgYW5kIGluIHRoYXQgY2FzZSwgaWYgdGhlcmUgaXMgYW55IDgt Yml0IGRhdGEgaW4KKyAgICAgICAgICB0aGUgZmlsZSB0byBiZSB0cmFuc2ZlcnJlZCwgdGhlIHRy YW5zZmVyIHdpbGwgZmFpbCBiZWNhdXNlIG9mIGJsb2NrCisgICAgICAgICAgY2hlY2sgZXJyb3Jz LgorCisgICAgICAgICAgVGhlIGZvbGxvd2luZyBjbGF1c2UgY292ZXJzIGFsbCBvZiB0aGVzZSBz aXR1YXRpb25zOgorCSovCisJaWYgKHBhcml0eSAmJiAoZWJxc2VudCA9PSAwIHx8IGVicXNlbnQg PT0gJyYnKSkgeworCSAgICBlYnFmbGcgPSAxOworCSAgICBlYnEgPSBNWUVCUTsKKwl9CisJYnJl YWs7CisgICAgICBjYXNlIDI6CQkJCS8qIE90aGVyIEtlcm1pdCBzZW50IGEgdmFsaWQgcHJlZml4 ICovCisJZWJxZmxnID0gKGVicSA9PSBzcSB8fCBzcSA9PSAnWScpOworCWlmIChlYnFmbGcpIHsK KwkgICAgZWJxID0gcnE7CisJICAgIGRlYnVnKEYxMDEsInNwYXIgc2V0dGluZyBwYXJpdHkgdG8g c3BhY2UiLCIiLGVicSk7CisJICAgIGlmICghcGFyaXR5KSBwYXJpdHkgPSB0dHBydHkgPSAncyc7 CisJfQorICAgIH0KKyAgICBpZiAobHNjYXB1ID09IDIpIHsgICAgIC8qIEJ1dCBubyBzaW5nbGUt c2hpZnRzIGlmIExPQ0tJTkctU0hJRlQgRk9SQ0VEICovCisJZWJxZmxnID0gMDsKKwllYnEgPSAn Tic7CisgICAgfQorCisvKiBCbG9jayBjaGVjayAqLworICAgIHggPSAxOworICAgIGlmIChiaWdn ZXN0ID49IDgpIHsKKwlpZiAoc1s4XSA9PSAnQicpIHggPSA0OworCWVsc2UgeCA9IHNbOF0gLSAn MCc7CisJaWYgKCh4IDwgMSkgfHwgKHggPiA1KSkgeCA9IDE7CS8qICI1IiAyMDExMDYwNSAqLwor ICAgIH0KKyAgICBiY3RyID0geDsKKworLyogUmVwZWF0IHByZWZpeCAqLworCisgICAgcnB0Zmxn ID0gMDsJCQkJLyogQXNzdW1lIG5vIHJlcGVhdC1jb3VudHMgKi8KKyAgICBpZiAoYmlnZ2VzdCA+ PSA5KSB7CQkJLyogSXMgdGhlcmUgYSByZXBlYXQtY291bnQgZmllbGQ/ICovCisJY2hhciB0OwkJ CQkvKiBZZXMuICovCisJdCA9IHNbOV07CQkJLyogR2V0IGl0cyBjb250ZW50cy4gKi8KKy8qCisg IElmIEknbSBzZW5kaW5nIGZpbGVzLCB0aGVuIEknbSByZWFkaW5nIHRoZXNlIHBhcmFtZXRlcnMg ZnJvbSBhbiBBQ0ssIGFuZCBzbworICB0aGlzIGNoYXJhY3RlciBtdXN0IGFncmVlIHdpdGggd2hh dCBJIHNlbnQuCisqLworCWlmIChycHRlbmEpIHsJCQkvKiBJZiBlbmFibGVkIC4uLiAqLworCSAg ICBpZiAoKGNoYXIpIHJjdnR5cCA9PSAnWScpIHsJLyogU2VuZGluZyBmaWxlcywgcmVhZGluZyBB Q0suICovCisJCWlmICh0ID09IG15cnB0cSkgcnB0ZmxnID0gMTsKKwkgICAgfSBlbHNlIHsJCQkv KiBJJ20gcmVjZWl2aW5nIGZpbGVzICovCisJCWlmICgodCA+IDMyICYmIHQgPCA2MykgfHwgKHQg PiA5NSAmJiB0IDwgMTI3KSkgeworCQkgICAgcnB0ZmxnID0gMTsKKwkJICAgIHJwdHEgPSB0Owor CQl9CisJICAgIH0KKwl9IGVsc2UgcnB0ZmxnID0gMDsKKyAgICB9CisKKy8qIENhcGFiaWxpdGll cyAqLworCisgICAgYXRjYXB1ID0gbHBjYXB1ID0gc3djYXB1ID0gcnNjYXB1ID0gMDsgLyogQXNz dW1lIG5vbmUgb2YgdGhlc2UuICovCisgICAgaWYgKGxzY2FwdSAhPSAyKSBsc2NhcHUgPSAwOwkv KiBBc3N1bWUgbm8gTFMgdW5sZXNzIGZvcmNlZC4gKi8KKyAgICB5ID0gMTE7CQkJCS8qIFBvc2l0 aW9uIG9mIG5leHQgZmllbGQsIGlmIGFueSAqLworICAgIGlmIChiaWdnZXN0ID49IDEwKSB7Cisg ICAgICAgIHggPSB4dW5jaGFyKHNbMTBdKTsKKwlkZWJ1ZyhGMTAxLCJzcGFyIGNhcGFzIiwiIix4 KTsKKyAgICAgICAgYXRjYXB1ID0gKHggJiBhdGNhcGIpICYmIGF0Y2FwcjsgLyogQXR0cmlidXRl cyAqLworCWxwY2FwdSA9ICh4ICYgbHBjYXBiKSAmJiBscGNhcHI7IC8qIExvbmcgcGFja2V0cyAq LworCXN3Y2FwdSA9ICh4ICYgc3djYXBiKSAmJiBzd2NhcHI7IC8qIFNsaWRpbmcgd2luZG93cyAq LworCXJzY2FwdSA9ICh4ICYgcnNjYXBiKSAmJiByc2NhcHI7IC8qIFJFU0VORCAqLworCWRlYnVn KEYxMDEsInNwYXIgbHNjYXB1IiwiIixsc2NhcHUpOworCWRlYnVnKEYxMDEsInNwYXIgbHNjYXBy IiwiIixsc2NhcHIpOworCWRlYnVnKEYxMDEsInNwYXIgZWJxZmxnIiwiIixlYnFmbGcpOworCWlm IChsc2NhcHUgIT0gMikgbHNjYXB1ID0gKCh4ICYgbHNjYXBiKSAmJiBsc2NhcHIgJiYgZWJxZmxn KSA/IDEgOiAwOworCWRlYnVnKEYxMDEsInNwYXIgc3djYXByIiwiIixzd2NhcHIpOworCWRlYnVn KEYxMDEsInNwYXIgc3djYXB1IiwiIixzd2NhcHUpOworCWRlYnVnKEYxMDEsInNwYXIgbHNjYXB1 IiwiIixsc2NhcHUpOworCWZvciAoeSA9IDEwOyAoeHVuY2hhcihzW3ldKSAmIDEpICYmIChiaWdn ZXN0ID49IHkpOyB5KyspOworCWRlYnVnKEYxMDEsInNwYXIgeSIsIiIseSk7CisgICAgfQorCisv KiBMb25nIFBhY2tldHMgKi8KKyAgICBkZWJ1ZyhGMTAxLCJzcGFyIGxwY2FwdSIsIiIsbHBjYXB1 KTsKKyAgICBpZiAobHBjYXB1KSB7CisgICAgICAgIGlmIChiaWdnZXN0ID4geSsxKSB7CisJICAg IHggPSB4dW5jaGFyKHNbeSsyXSkgKiA5NSArIHh1bmNoYXIoc1t5KzNdKTsKKwkgICAgZGVidWco RjEwMSwic3BhciBscCBsZW4iLCIiLHgpOworCSAgICBpZiAoc3BzaXpmKSB7CQkvKiBJZiBvdmVy cmlkaW5nIG5lZ290aWF0aW9ucyAqLworCQlzcHNpeiA9ICh4IDwgbHBzaXopID8geCA6IGxwc2l6 OyAvKiBkbyB0aGlzLCAqLworCSAgICB9IGVsc2UgewkJCSAgICAgICAgIC8qIG90aGVyd2lzZSAq LworCQlzcHNpeiA9ICh4ID4gTUFYU1ApID8gTUFYU1AgOiB4OyAvKiBkbyB0aGlzLiAqLworCSAg ICB9CisJICAgIGlmIChzcHNpeiA8IDEwKSBzcHNpeiA9IDgwOwkvKiBCZSBkZWZlbnNpdmUuLi4g Ki8KKwl9CisgICAgfQorICAgIC8qIChQV1ApIHNhdmUgY3VycmVudCBzZW5kIHBhY2tldCBzaXpl IGZvciBvcHRpbWFsIHBhY2tldCBzaXplIGNhbGNzICovCisgICAgc3BtYXggPSBzcHNpejsJCQkv KiBNYXhpbXVtIG5lZ290aWF0ZWQgbGVuZ3RoICovCisgICAgbGFzdHNwbWF4ID0gc3BzaXo7CQkJ LyogRm9yIHN0YXRzICovCisgICAgaWYgKHNsb3N0YXJ0ICYmIHNwc2l6ID4gNDk5KQkvKiBTbG93 IHN0YXJ0IGxlbmd0aCAqLworICAgICAgc3BzaXogPSAyNDQ7CisgICAgZGVidWcoRjEwMSwic3Bh ciBzbG93LXN0YXJ0IHNwc2l6IiwiIixzcHNpeik7CisgICAgZGVidWcoRjEwMSwic3BhciBscCBz cG1heCIsIiIsc3BtYXgpOworICAgIHRpbWludCA9IGNoa3RpbW8odGltaW50LHRpbWVmKTsJLyog UmVjYWxjdWxhdGUgdGhlIHBhY2tldCB0aW1lb3V0ICovCisKKy8qIFNsaWRpbmcgV2luZG93cy4u LiAqLworCisgICAgaWYgKHN3Y2FwcikgewkJCS8qIE9ubHkgaWYgcmVxdWVzdGVkLi4uICovCisg ICAgICAgIGlmIChiaWdnZXN0ID4geSkgewkJLyogU2VlIHdoYXQgb3RoZXIgS2VybWl0IHNheXMg Ki8KKwkgICAgeCA9IHh1bmNoYXIoc1t5KzFdKTsKKwkgICAgZGVidWcoRjEwMSwic3BhciB3aW5k b3ciLCIiLHgpOworCSAgICB3c2xvdG4gPSAoeCA+IE1BWFdTKSA/IE1BWFdTIDogeDsKKy8qCisg IHdzbG90biA9IG5lZ290aWF0ZWQgc2l6ZSAoZnJvbSBvdGhlciBLZXJtaXQncyBTIG9yIEkgcGFj a2V0KS4KKyAgd3Nsb3RyID0gcmVxdWVzdGVkIHdpbmRvdyBzaXplIChmcm9tIHRoaXMgS2VybWl0 J3MgU0VUIFdJTkRPVyBjb21tYW5kKS4KKyovCisJICAgIGlmICh3c2xvdG4gPiB3c2xvdHIpCS8q IFVzZSB0aGUgc21hbGxlciBvZiB0aGUgdHdvICovCisJICAgICAgd3Nsb3RuID0gd3Nsb3RyOwor CSAgICBpZiAod3Nsb3RuIDwgMSkJCS8qIFdhdGNoIG91dCBmb3IgYmFkIG5lZ290aWF0aW9uICov CisJICAgICAgd3Nsb3RuID0gMTsKKwkgICAgaWYgKHdzbG90biA+IDEpIHsKKwkJc3djYXB1ID0g MTsJCS8qIFdlIGRvIHdpbmRvd3MuLi4gKi8KKwkJaWYgKHdzbG90biA+IG1heHRyeSkJLyogUmV0 cnkgbGltaXQgbXVzdCBiZSBncmVhdGVyICovCisJCSAgbWF4dHJ5ID0gd3Nsb3RuICsgMTsJLyog dGhhbiB3aW5kb3cgc2l6ZS4gKi8KKwkgICAgfQorCSAgICBkZWJ1ZyhGMTAxLCJzcGFyIHdpbmRv dyBhZnRlciBhZGp1c3RtZW50IiwiIix4KTsKKwl9IGVsc2UgewkJCS8qIE5vIHdpbmRvdyBzaXpl IHNwZWNpZmllZC4gKi8KKwkgICAgd3Nsb3RuID0gMTsJCQkvKiBXZSBkb24ndCBkbyB3aW5kb3dz Li4uICovCisJICAgIGRlYnVnKEYxMDEsInNwYXIgd2luZG93IiwiIix4KTsKKwkgICAgc3djYXB1 ID0gMDsKKwkgICAgZGVidWcoRjEwMSwic3BhciBubyB3aW5kb3dzIiwiIix3c2xvdG4pOworCX0K KyAgICB9CisKKy8qIE5vdyByZWNhbGN1bGF0ZSBwYWNrZXQgbGVuZ3RoIGJhc2VkIG9uIG51bWJl ciBvZiB3aW5kb3dzLiAgICovCisvKiBUaGUgbm9nb3RpYXRlZCBudW1iZXIgb2Ygd2luZG93IHNs b3RzIHdpbGwgYmUgYWxsb2NhdGVkLCAgICAqLworLyogYW5kIHRoZSBtYXhpbXVtIHBhY2tldCBs ZW5ndGggd2lsbCBiZSByZWR1Y2VkIGlmIG5lY2Vzc2FyeSwgKi8KKy8qIHNvIHRoYXQgYSB3aW5k b3dmdWwgb2YgcGFja2V0cyBjYW4gZml0IGluIHRoZSBiaWcgYnVmZmVyLiAgICovCisKKyAgICBp ZiAod3Nsb3RuID4gMSkgewkJCS8qIFNocmluayB0byBmaXQuLi4gKi8KKwl4ID0gYWRqcGtsKHNw bWF4LHdzbG90bixiaWdzYnNpeik7CisJaWYgKHggPCBzcG1heCkgeworCSAgICBzcG1heCA9IHg7 CisJICAgIGxhc3RzcG1heCA9IHNwc2l6OworCSAgICBpZiAoc2xvc3RhcnQgJiYgc3BzaXogPiA0 OTkpIHNwc2l6ID0gMjQ0OyAvKiBTbG93IHN0YXJ0IGFnYWluICovCisJICAgIGRlYnVnKEYxMDEs InNwYXIgc2VuZGluZywgcmVkZWZpbmUgc3BtYXgiLCIiLHNwbWF4KTsKKwl9CisgICAgfQorI2lm ZGVmIFdIQVRBTUkKKyAgICBkZWJ1ZyhGMTAxLCJzcGFyIGJpZ2dlc3QiLCIiLGJpZ2dlc3QpOwor ICAgIGlmIChiaWdnZXN0ID4geSs3KSB7CQkvKiBHZXQgV0hBVEFNSSBpbmZvIGlmIGFueSAqLwor CXdoYXRydSA9IHh1bmNoYXIoc1t5KzhdKTsKKwlkZWJ1ZyhGMTAxLCJzcGFyIHdoYXRydSIsIiIs d2hhdHJ1KTsKKyAgICB9CisgICAgaWYgKHdoYXRydSAmIFdNSV9GTEFHKSB7CQkvKiBPbmx5IHZh bGlkIGlmIHRoaXMgYml0IGlzIHNldCAqLworI2lmZGVmIFNUUkVBTUlORworCWlmICh3aGF0cnUg JiBXTUlfU1RSRUFNKSB7CisJICAgIGlmIChzdHJlYW1ycSA9PSBTRVRfT04gfHwKKwkJKHN0cmVh bXJxID09IFNFVF9BVVRPICYmCisJCSAocmVsaWFibGUgPT0gU0VUX09OIHx8IChyZWxpYWJsZSA9 PSBTRVRfQVVUTyAmJiAhbG9jYWwpCisjaWZkZWYgVE5fQ09NUE9SVAorICAgICAgICAgICAgICAg ICAgJiYgIWlzdG5jb21wb3J0KCkKKyNlbmRpZiAvKiBUTl9DT01QT1JUICovCisjaWZkZWYgSUtT RAorICAgICAgICAgICAgICAgICAgIHx8IGluc2VydmVyCisjZW5kaWYgLyogSUtTRCAqLworICAg ICAgICAgICAgICAgICAgICkpKSB7CisJCXN0cmVhbW9rID0gMTsJCS8qIFN0cmVhbWluZyBuZWdv dGlhdGVkICovCisJCXNsb3N0YXJ0ID0gMDsJCS8qIFVuZG8gc2xvdy1zdGFydCBtYWNoaW5hdGlv bnMgKi8KKwkJc3BzaXogPSBsYXN0c3BtYXg7CisJICAgIH0KKwl9CisJc3RyZWFtZWQgPSBzdHJl YW1vazsKKwlkZWJ1ZyhGMTAxLCJzcGFyIHN0cmVhbW9rIiwiIixzdHJlYW1vayk7CisJZGVidWco RjEwMSwic3BhciBjbGVhcnJxIiwiIixjbGVhcnJxKTsKKwlpZiAoY2xlYXJycSA9PSBTRVRfT04g fHwKKyAgICAgICAgICAgICAoY2xlYXJycSA9PSBTRVRfQVVUTyAmJgorICAgICAgICAgICAgICAg KChuZXR3b3JrICYmIG5ldHR5cGUgPT0gTkVUX1RDUEIKKyNpZmRlZiBSTE9HQ09ERQorICAgICAg ICAgICAgICAgICYmIHR0bnByb3RvICE9IE5QX1JMT0dJTi8qIFJsb2dpbiBpcyBub3QgY2xlYXIg Ki8KKyAgICAgICAgICAgICAgICAmJiAhKHR0bnByb3RvID49IE5QX0s0TE9HSU4gJiYgdHRucHJv dG8gPD0gTlBfRUs1TE9HSU4pCisjZW5kaWYgLyogUkxPR0NPREUgKi8KKyNpZmRlZiBUTl9DT01Q T1JUCisgICAgICAgICAgICAgICAgJiYgIWlzdG5jb21wb3J0KCkKKyNlbmRpZiAvKiBUTl9DT01Q T1JUICovCisgICAgICAgICAgICAgICAgICApCisjaWZkZWYgU1NIQlVJTFRJTgorICAgICAgICAg ICAgICAgICB8fCAobmV0d29yayAmJiBuZXR0eXBlID09IE5FVF9TU0gpCisjZW5kaWYgLyogU1NI QlVJTFRJTiAqLworI2lmZGVmIElLU0QKKyAgICAgICAgICAgICAgICAgfHwgaW5zZXJ2ZXIKKyNl bmRpZiAvKiBJS1NEICovCisgICAgICAgICAgICAgICAgICkpKQorICAgICAgICAgIHVyY2xlYXIg PSAod2hhdHJ1ICYgV01JX0NMRUFSKTsKKwlkZWJ1ZyhGMTAxLCJzcGFyIHVyY2xlYXIiLCIiLHVy Y2xlYXIpOworI2lmZGVmIENLX1NQRUVECisJaWYgKHVyY2xlYXIpCisJICBzZXRwcmVmaXgoUFhf Tk9OKTsKKyNlbmRpZiAvKiBDS19TUEVFRCAqLworCWNsZWFyZWQgPSB1cmNsZWFyOworI2VuZGlm IC8qIFNUUkVBTUlORyAqLworICAgIH0KKyNlbmRpZiAvKiBXSEFUQU1JICovCisKKyAgICBpZiAo YmlnZ2VzdCA+IHkrOCkgewkJLyogR2V0IFdIT0FSRVlPVSBpbmZvIGlmIGFueSAqLworCWludCB4 LCB6OworCXggPSB4dW5jaGFyKHNbeSs5XSk7CQkvKiBMZW5ndGggb2YgaXQgKi8KKwl6ID0geTsK Kwl5ICs9ICg5ICsgeCk7CisJZGVidWcoRjEwMSwic3BhciBzeXNpbmRleCB4IiwiIix4KTsKKwlk ZWJ1ZyhGMTAxLCJzcGFyIHN5c2luZGV4IHkiLCIiLHkpOworCWRlYnVnKEYxMDEsInNwYXIgc3lz aW5kZXggYmlnZ2VzdCIsIiIsYmlnZ2VzdCk7CisKKwlpZiAoeCA+IDAgJiYgeCA8IDE2ICYmIGJp Z2dlc3QgPj0geSkgeworCSAgICBzdHJuY3B5KHdob2FyZXUsKGNoYXIgKilzK3orMTAseCk7IC8q IE90aGVyIEtlcm1pdCdzIHN5c3RlbSBJRCAqLworCSAgICBkZWJ1ZyhGMTExLCJzcGFyIHdob2Fy ZXlvdSIsd2hvYXJldSx3aG9hcmV1WzBdKTsKKwkgICAgaWYgKHdob2FyZXVbMF0pIHsJCS8qIEdv dCBvbmU/ICovCisJCXN5c2luZGV4ID0gZ2V0c3lzaXgoKGNoYXIgKil3aG9hcmV1KTsKKwkJZGVi dWcoRjEwMSwic3BhciBzeXNpbmRleCIsd2hvYXJldSxzeXNpbmRleCk7CisJICAgIH0KKwl9Cisg ICAgfSBlbHNlCisgICAgICBnb3RvIHhzcGFyOworCisjaWZkZWYgV0hBVEFNSQorICAgIHkrKzsJ CQkJLyogQWR2YW5jZSBwb2ludGVyICovCisgICAgaWYgKGJpZ2dlc3QgPj0geSkgeworCXdoYXRy dTIgPSB4dW5jaGFyKHNbeV0pOwkvKiBOZXh0IGZpZWxkIGlzIFdIQVRBTUkyICovCisJZGVidWco RjEwMSwic3BhciB3aGF0cnUyIiwiIix3aGF0cnUyKTsKKwlpZiAod2hhdHJ1MiAmIFdNSTJfRkxB RykgewkvKiBWYWxpZCBvbmx5IGlmIHRoaXMgYml0IGlzIHNldCAqLworCSAgICBpZiAoc2VydmVy KSB7CQkvKiBTZXJ2ZXIgb2JleXMgY2xpZW50J3MgeGZlciBtb2RlICovCisJCXhmZXJtb2RlID0g KHdoYXRydTIgJiBXTUkyX1hNT0RFKSA/IFhNT0RFX00gOiBYTU9ERV9BOworCQlkZWJ1ZyhGMTAx LCJzcGFyIHdoYXRydTIgeGZlcm1vZGUiLCIiLHhmZXJtb2RlKTsKKwkgICAgfQorCSAgICBpZiAo d2hhdHJ1MiAmIFdNSTJfUkVDVSkgewkvKiBSRUNVUlNJVkUgdHJhbnNmZXIgKi8KKwkJaWYgKGZu cnBhdGggPT0gUEFUSF9BVVRPKSB7IC8qIElmIFJFQyBQQVRIIEFVVE8gKi8KKwkJICAgIGZucnBh dGggPSBQQVRIX1JFTDsJLyogU2V0IGl0IHRvIFJFTEFUSVZFICovCisJCSAgICBhdXRvcGF0aCA9 IDE7CS8qIGFuZCByZW1lbWJlciB3ZSBkaWQgdGhpcyAqLworCQl9CisJICAgIH0KKwl9CisgICAg fQorI2VuZGlmIC8qIFdIQVRBTUkgKi8KKworICB4c3BhcjoKKyAgICBpZiAoc3lzaW5kZXggPiAt MSkgeworCWNoYXIgKiBwOworCXAgPSBzeXNpZGxpc3Rbc3lzaW5kZXhdLnNpZF9uYW1lOworCXRs b2coRjExMCwiUmVtb3RlIHN5c3RlbSB0eXBlOiAiLHAsMEwpOworCWlmIChzeXNpbmRleCA+IDAp IHsJCS8qIElmIHBhcnRuZXQncyBzeXN0ZW0gdHlwZSBrbm93biAqLworCSAgICB3aG9hcmV3ZSgp OwkJCS8qIHNlZSBpZiB3ZSBhcmUgYSBtYXRjaC4gKi8KKyNpZmRlZiBDS19TUEVFRAorLyogTmV2 ZXIgdW5wcmVmaXggWE9OIGFuZCBYT0ZGIHdoZW4gc2VuZGluZyB0byBWTVMgKi8KKwkgICAgZGVi dWcoRjExMSwicHJvdG8gd2hvYXJldSIsd2hvYXJldSxzeXNpbmRleCk7CisJICAgIGlmICghc3Ry Y21wKChjaGFyICopd2hvYXJldSwiRDciKSkgeworCQlkZWJ1ZyhGMTExLCJwcm90byBzcGVjaWFs IFZNUyBwcmVmaXhpbmciLCIiLDApOworCQljdGxwW1hPTl0gPSBjdGxwW1hPRkZdID0gMTsKKwkJ Y3RscFtYT04rMTI4XSA9IGN0bHBbWE9GRisxMjhdID0gMTsKKwkJY3RscFszXSA9IDE7CQkvKiBD dHJsLUMgbWlnaHQgYmUgZGFuZ2Vyb3VzIHRvbyAqLworCQljdGxwWzE0XSA9IGN0bHBbMTVdID0g MTsgLyogQW5kIFNPL1NJICovCisJCWN0bHBbMjRdID0gY3RscFsyNV0gPSAxOyAvKiBBbmQgXlgv XlkgKi8KKwkJY3RscFsxNDFdID0gMTsJCS8qIEFuZCBDUisxMjggKi8KKwkgICAgfQorI2VuZGlm IC8qIENLX1NQRUVEICovCisJfQorICAgIH0KKworLyogUmVjb3JkIHBhcmFtZXRlcnMgaW4gZGVi dWcgbG9nICovCisjaWZkZWYgREVCVUcKKyAgICBpZiAoZGVibG9nKSBzZGVidShiaWdnZXN0KTsK KyNlbmRpZiAvKiBERUJVRyAqLworICAgIG51bWVycnMgPSAwOwkJCS8qIFN0YXJ0IGNvdW50aW5n IGVycm9ycyBoZXJlLiAqLworICAgIHJldHVybigwKTsKK30KKworLyogIEcgTiBGIEkgTCBFICAt LSAgR2V0IG5hbWUgb2YgbmV4dCBmaWxlIHRvIHNlbmQgICovCisvKgorICBFeHBlY3RzIGdsb2Jh bCBzbmRzcmMgdG8gYmU6CisgICAtOTogaWYgd2UgYXJlIGdlbmVyYXRpbmcgYSBmaWxlIGludGVy bmFsbHkgZm9yIGNhbGlicmF0aW9uLgorICAgLTE6IG5leHQgZmlsZW5hbWUgdG8gYmUgb2J0YWlu ZWQgYnkgY2FsbGluZyB6bmV4dCgpLgorICAgIDA6IG5vIG5leHQgZmlsZSBuYW1lCisgICAgMTog KG9yIGdyZWF0ZXIpIG5leHQgZmlsZW5hbWUgdG8gYmUgb2J0YWluZWQgZnJvbSAqKmNtbGlzdCwK KyAgICAgICBvciBpZiBhZGRsaXN0ICE9IDAsIGZyb20gdGhlICJmaWxlaGVhZCIgbGlua2VkIGxp c3QsCisgICAgICAgb3IgaWYgZmlsZWZpbGUgcG9pbnRlciBub3QgbnVsbCBmcm9tIHRoYXQgZmls ZSAod2hpY2ggaXMgYWxyZWFkeSBvcGVuKS4KKyAgUmV0dXJuczoKKyAgICAxLCB3aXRoIG5hbWUg b2YgbmV4dCBmaWxlIGluIGZpbG5hbS4KKyAgICAwLCBubyBtb3JlIGZpbGVzLCB3aXRoIGZpbG5h bSBzZXQgdG8gZW1wdHkgc3RyaW5nLgorICAgLTEsIGZpbGUgbm90IGZvdW5kCisgICAtMiwgZmls ZSBpcyBub3QgcmVhZGFibGUgKGJ1dCB0aGVuIHdlIGp1c3Qgc2tpcCB0byB0aGUgbmV4dCBvbmUg aWYgYW55KQorICAgLTMsIHJlYWQgYWNjZXNzIGRlbmllZAorICAgLTQsIGNhbmNlbGxlZAorICAg LTUsIHRvbyBtYW55IGZpbGVzIG1hdGNoIHdpbGRjYXJkCisgICAtNiwgbm8gZmlsZXMgc2VsZWN0 ZWQKKyAgTk9URToKKyAgICBJZiBnbmZpbGUoKSByZXR1cm5zIDAsIHRoZW4gdGhlIGdsb2JhbCB2 YXJpYWJsZSBnbmZlcnJvciBzaG91bGQgYmUgY2hlY2tlZAorICAgIHRvIGZpbmQgb3V0IHRoZSBt b3N0IHJlY2VudCBnbmZpbGUoKSBlcnJvciwgYW5kIHVzZSB0aGF0IGluc3RlYWQgb2YgdGhlCisg ICAgcmV0dXJuIGNvZGUgKGZvciByZWFzb25zIHRvIGhhcmQgdG8gZXhwbGFpbikuCisqLworaW50 CitnbmZpbGUoKSB7CisgICAgaW50IGkgPSAwLCB4ID0gMDsKKyAgICBDS19PRkZfVCBmaWxlc2l6 ZSA9IDA7CisgICAgaW50IGRvZGlyc3RvbyA9IDA7CisgICAgaW50IHJldGNvZGUgPSAwOworCisg ICAgY2hhciBmdWxsbmFtZVtDS01BWFBBVEgrMV07CisKKyAgICBkb2RpcnN0b28gPSAoKHdoYXQg JiAoV19GVFB8V19TRU5EKSkgPT0gKFdfRlRQfFdfU0VORCkpICYmIHJlY3Vyc2l2ZTsKKworICAg IGRlYnVnKEYxMDEsImduZmlsZSBzbmRzcmMiLCIiLHNuZHNyYyk7CisgICAgZGVidWcoRjEwMSwi Z25maWxlIGZpbGNudCIsIiIsZmlsY250KTsKKyAgICBkZWJ1ZyhGMTAxLCJnbmZpbGUgd2hhdCIs IiIsd2hhdCk7CisgICAgZGVidWcoRjEwMSwiZ25maWxlIHJlY3Vyc2l2ZSIsIiIscmVjdXJzaXZl KTsKKyAgICBkZWJ1ZyhGMTAxLCJnbmZpbGUgZG9kaXJzdG9vIiwiIixkb2RpcnN0b28pOworICAg IGduZmVycm9yID0gMDsKKyAgICBmc2l6ZSA9IChDS19PRkZfVCktMTsJCS8qIEluaXRpYWxpemUg ZmlsZSBzaXplICovCisgICAgZnVsbG5hbWVbMF0gPSBOVUw7CisKKyNpZmRlZiBWTVMKKyAgICAv KiAKKyAgICAgIEluIFZNUywgem9wZW5pKCkgc2V0cyBiaW5hcnkgMC8xIGF1dG9tYXRpY2FsbHkg ZnJvbSB0aGUgZmlsZQorICAgICAgYXR0cmlidXRlcy4gIERvbid0IHVuZG8gaXQgaGVyZS4KKyAg ICAqLworICAgIGRlYnVnKEYxMDEsImduZmlsZSBWTVMgYmluYXJ5IiwiIixiaW5hcnkpOworI2Vs c2UgIC8qIFZNUyAqLworICAgIGlmICghKHdoYXQgJiBXX1JFTU8pICYmICh4ZmVybW9kZSA9PSBY TU9ERV9BKQorI2lmbmRlZiBOT01TRU5ECisJJiYgIWFkZGxpc3QKKyNlbmRpZiAvKiBOT01TRU5E ICovCisJKSB7CisJZXh0ZXJuIGludCBzdGRpbmY7CisJaWYgKCFzdGRpbmYpCQkJLyogTm90IGlm IHNlbmRpbmcgZnJvbSBzdGRpbiAqLworI2lmZGVmIFdIQVRBTUkKKwkgIC8qIFdlIGRvbid0IGRv IHRoaXMgaW4gc2VydmVyIG1vZGUgYmVjYXVzZSBpdCB1bmRvZXMgV0hBVEFNSSAqLworCSAgaWYg KCFzZXJ2ZXIgfHwgKHNlcnZlciAmJiAoKHdoYXRydSAmIFdNSV9GTEFHKSA9PSAwKSkpCisjZW5k aWYgLyogV0hBVEFNSSAqLworCSAgICBiaW5hcnkgPSBnbmZfYmluYXJ5OwkvKiBSZXN0b3JlIHBy ZXZhaWxpbmcgdHJhbnNmZXIgbW9kZSAqLworCWRlYnVnKEYxMDEsImduZmlsZSBiaW5hcnkgPSBn bmZfYmluYXJ5IiwiIixnbmZfYmluYXJ5KTsKKyAgICB9CisjZW5kaWYJLyogVk1TICovCisKKyNp ZmRlZiBQSVBFU0VORAorICAgIGRlYnVnKEYxMDEsImduZmlsZSBwaXBlc2VuZCIsIiIscGlwZXNl bmQpOworICAgIGlmIChwaXBlc2VuZCkgewkJCS8qIEZpcnN0IG9uZSAqLworCWlmIChmaWxjbnQg PT0gMCkgeworCSAgICBja3N0cm5jcHkoZmlsbmFtLGNtYXJnLENLTUFYUEFUSCsxKTsKKwkgICAg cmV0dXJuKDEpOworCX0gZWxzZSB7CQkJLyogVGhlcmUncyBvbmx5IG9uZS4uLiAqLworCSAgICAq ZmlsbmFtID0gTlVMOworCSAgICBwaXBlc2VuZCA9IDA7CisJICAgIHJldHVybigwKTsKKwl9Cisg ICAgfQorI2VuZGlmIC8qIFBJUEVTRU5EICovCisKKyNpZmRlZiBDQUxJQlJBVEUKKyAgICBpZiAo c25kc3JjID09IC05KSB7CisJZGVidWcoRjEwMCwiZ25maWxlIGNhbGlicmF0ZSIsIiIsMCk7CisJ Y2tzdHJuY3B5KGZpbG5hbSwiQ0FMSUJSQVRJT04iLENLTUFYUEFUSCk7CisJbmZpbHMgPSAwOwor CWNhbF9qID0gMDsKKwlmc2l6ZSA9IGNhbGlicmF0ZTsKKwlzbmRzcmMgPSAwOwkJCS8qIEZvciBu ZXh0IHRpbWUgKi8KKwluZmlscyA9IDA7CisJcmV0dXJuKDEpOworICAgIH0KKyNlbmRpZiAvKiBD QUxJQlJBVEUgKi8KKworI2lmbmRlZiBOT1NQTAorICAgIGlmIChzbmRhcnJheSkgewkJCS8qIFNl bmRpbmcgZnJvbSBhbiBhcnJheSAqLworCWV4dGVybiBjaGFyIHNuZHhuYW1bXTsJCS8qIFBzZXVk byBmaWxlbmFtZSAqLworCWRlYnVnKEYxMDAsImduZmlsZSBhcnJheSIsIiIsMCk7CisJbmZpbHMg PSAwOworCWZzaXplID0gKENLX09GRl9UKS0xOwkJLyogU2l6ZSB1bmtub3duICovCisJc25kc3Jj ID0gMDsKKwlja3N0cm5jcHkoZmlsbmFtLHNuZHhuYW0sQ0tNQVhQQVRIKTsKKwlyZXR1cm4oMSk7 CisgICAgfQorI2VuZGlmIC8qIE5PU1BMICovCisKKyAgICBpZiAoc25kc3JjID09IDApIHsJCQkv KiBJdCdzIG5vdCByZWFsbHkgYSBmaWxlICovCisJaWYgKG5maWxzID4gMCkgewkJLyogSXQncyBh IHBpcGUsIG9yIHN0ZGluICovCisJICAgIGNrc3RybmNweShmaWxuYW0sKmNtbGlzdCxDS01BWFBB VEgrMSk7IC8qIENvcHkgaXRzICJuYW1lIiAqLworCSAgICBuZmlscyA9IDA7CQkJLyogVGhlcmUg aXMgbm8gbmV4dCBmaWxlICovCisJICAgIHJldHVybigxKTsJCQkvKiBPSyB0aGlzIHRpbWUgKi8K Kwl9IGVsc2UgcmV0dXJuKDApOwkJLyogYnV0IG5vdCBuZXh0IHRpbWUgKi8KKyAgICB9CisKKy8q IElmIGZpbGUgZ3JvdXAgaW50ZXJydXB0aW9uIChDLVopIG9jY3VycmVkLCBmYWlsLiAgKi8KKwor ICAgIGlmIChjenNlZW4pIHsKKwl0bG9nKEYxMDAsIlRyYW5zYWN0aW9uIGNhbmNlbGxlZCIsIiIs MEwpOworICAgICAgICBkZWJ1ZyhGMTAwLCJnbmZpbGUgY3pzZWVuIiwiIiwwKTsKKwlyZXR1cm4o LTQpOworICAgIH0KKworLyogTG9vcCB0aHJvdWdoIGZpbGUgbGlzdCB0aWxsIHdlIGZpbmQgYSBy ZWFkYWJsZSwgc2VuZGFibGUgZmlsZSAqLworCisgICAgZmlsZXNpemUgPSAoQ0tfT0ZGX1QpLTE7 CQkvKiBMb29wIGV4aXQgKGZpbGUgc2l6ZSkgdmFyaWFibGUgKi8KKyAgICB3aGlsZSAoZmlsZXNp emUgPCAwKSB7CQkvKiBLZWVwIHRyeWluZyB0aWxsIHdlIGdldCBvbmUuLi4gKi8KKwlyZXRjb2Rl ID0gMDsKKwlpZiAoc25kc3JjID4gMCkgewkJLyogRmlsZSBsaXN0IGluIGNtbGlzdCBvciBmaWxl ICovCisJICAgIGlmIChmaWxlZmlsZSkgewkJLyogUmVhZGluZyBsaXN0IGZyb20gZmlsZS4uLiAq LworCQlpZiAoenNpbmwoWk1GSUxFLGZpbG5hbSxDS01BWFBBVEgpIDwgMCkgeyAvKiBSZWFkIGEg bGluZSAqLworCQkgICAgemNsb3NlKFpNRklMRSk7CSAgICAgICAgICAgICAgICAgIC8qIEZhaWxl ZCAqLworCQkgICAgZGVidWcoRjExMCwiZ25maWxlIGZpbGVmaWxlIEVPRiIsZmlsZWZpbGUsMCk7 CisJCSAgICBtYWtlc3RyKCZmaWxlZmlsZSxOVUxMKTsKKwkJICAgIHJldHVybigwKTsKKwkJfQor CQlkZWJ1ZyhGMTEwLCJnbmZpbGUgZmlsZWZpbGUgZmlsbmFtIixmaWxuYW0sMCk7CisJICAgIH0K KwkgICAgZGVidWcoRjEwMSwiZ25maWxlIG5maWxzIiwiIixuZmlscyk7CisJICAgIGlmIChuZmls cy0tID4gMCB8fCBmaWxlZmlsZSkgeyAvKiBTdGlsbCBzb21lIGxlZnQ/ICovCisjaWZuZGVmIE5P TVNFTkQKKwkJaWYgKGFkZGxpc3QpIHsKKwkJICAgIGlmIChmaWxlbmV4dCAmJiBmaWxlbmV4dC0+ ZmxfbmFtZSkgeworCQkJY2tzdHJuY3B5KGZpbG5hbSxmaWxlbmV4dC0+ZmxfbmFtZSxDS01BWFBB VEgrMSk7CisJCQljbWFyZzIgPQorCQkJICBmaWxlbmV4dC0+ZmxfYWxpYXMgPworCQkJICAgIGZp bGVuZXh0LT5mbF9hbGlhcyA6CisJCQkgICAgICAiIjsKKwkJCWJpbmFyeSA9IGZpbGVuZXh0LT5m bF9tb2RlOworCQkgICAgfSBlbHNlIHsKKwkJCXByaW50ZigiP0ludGVybmFsIGVycm9yIGV4cGFu ZGluZyBBREQgbGlzdFxuIik7CisJCQlyZXR1cm4oLTUpOworCQkgICAgfQorCQkgICAgZmlsZW5l eHQgPSBmaWxlbmV4dC0+ZmxfbmV4dDsKKwkJICAgIGRlYnVnKEYxMTEsImduZmlsZSBhZGRsaXN0 IGZpbG5hbSIsZmlsbmFtLG5maWxzKTsKKwkJfSBlbHNlIGlmIChzbmRzcmMgPiAwICYmICFmaWxl ZmlsZSkgeworI2VuZGlmIC8qIE5PTVNFTkQgKi8KKwkJICAgIGNrc3RybmNweShmaWxuYW0sKmNt bGlzdCsrLENLTUFYUEFUSCsxKTsKKwkJICAgIGRlYnVnKEYxMTEsImduZmlsZSBjbWxpc3QgZmls bmFtIixmaWxuYW0sbmZpbHMpOworI2lmbmRlZiBOT01TRU5ECisJCX0KKyNlbmRpZiAvKiBOT01T RU5EICovCisJCWkgPSAwOworI2lmbmRlZiBOT1NFUlZFUgorCQlkZWJ1ZyhGMTAxLCJnbmZpbGUg bmdldHBhdGgiLCIiLG5nZXRwYXRoKTsKKyNlbmRpZiAvKiBOT1NFUlZFUiAqLworbmV4dGlucGF0 aDoKKyNpZm5kZWYgTk9TRVJWRVIKKwkJZnJvbWdldHBhdGggPSAwOworCQlpZiAoc2VydmVyICYm ICFpc2Fic29sdXRlKGZpbG5hbSkgJiYgKG5nZXRwYXRoID4gaSkpIHsKKwkJICAgIGNrc3RybmNw eShmdWxsbmFtZSxnZXRwYXRoW2ldLENLTUFYUEFUSCsxKTsKKwkJICAgIGNrc3RybmNhdChmdWxs bmFtZSxmaWxuYW0sQ0tNQVhQQVRIKTsKKwkJICAgIGRlYnVnKEYxMTEsImduZmlsZSBnZXRwYXRo IixmdWxsbmFtZSxpKTsKKwkJICAgIGZyb21nZXRwYXRoID0gMTsKKwkJICAgIGkrKzsKKwkJfSBl bHNlIHsKKwkJICAgIGkgPSBuZ2V0cGF0aCArIDE7CisjZWxzZQorCQkgICAgaSA9IDE7CQkvKiA/ ICovCisjZW5kaWYgLyogTk9TRVJWRVIgKi8KKwkJICAgIGNrc3RybmNweShmdWxsbmFtZSxmaWxu YW0sQ0tNQVhQQVRIKzEpOworCQkgICAgZGVidWcoRjExMCwiZ25maWxlIGFic29sdXRlIixmdWxs bmFtZSwwKTsKKyNpZm5kZWYgTk9TRVJWRVIKKwkJfQorI2VuZGlmIC8qIE5PU0VSVkVSICovCisJ CWlmIChpc3dpbGQoZnVsbG5hbWUpCisjaWZkZWYgUkVDVVJTSVZFCisJCSAgICB8fCByZWN1cnNp dmUgPiAwIHx8ICFzdHJjbXAoZnVsbG5hbWUsIi4iKQorI2VuZGlmIC8qIFJFQ1VSU0lWRSAqLwor CQkgICAgKSB7CS8qIEl0IGxvb2tzIHdpbGQuLi4gKi8KKwkJICAgIC8qIEZpcnN0IGNoZWNrIGlm IGEgZmlsZSB3aXRoIHRoaXMgbmFtZSBleGlzdHMgKi8KKwkJICAgIGRlYnVnKEYxMTAsImduZmls ZSB3aWxkIixmdWxsbmFtZSwwKTsKKwkJICAgIGlmICh6Y2hraShmdWxsbmFtZSkgPj0gMCkgewor CQkJLyoKKwkJCSAgIEhlcmUgd2UgaGF2ZSBhIGZpbGUgd2hvc2UgbmFtZSBhY3R1YWxseQorCQkJ ICAgY29udGFpbnMgd2lsZGNhcmQgY2hhcmFjdGVycy4KKwkJCSovCisJCQlnb3RvIGdvdG5hbTsK KwkJICAgIH0KKyNpZmRlZiBDT01NRU5UCisJCSAgICBuenhvcHRzID0gWlhfRklMT05MWTsgLyog KHdhcyAwOiAyNSBKdWwgMjAwMSBmZGMpICovCisjZWxzZQorCQkgICAgbnp4b3B0cyA9IHJlY3Vy c2l2ZSA/IDAgOiBaWF9GSUxPTkxZOyAvKiAzMCBKdWwgMjAwMSAqLworI2VuZGlmIC8qIENPTU1F TlQgKi8KKwkJICAgIGlmIChub2xpbmtzKSBuenhvcHRzIHw9IFpYX05PTElOS1M7CS8qICgyNiBK dWwgMjAwMSBmZGMpICovCisjaWZkZWYgVU5JWE9ST1NLCisJCSAgICBpZiAobWF0Y2hkb3QpIG56 eG9wdHMgfD0gWlhfTUFUQ0hET1Q7CisjZW5kaWYgLyogVU5JWE9ST1NLICovCisJCSAgICBpZiAo cmVjdXJzaXZlKSBuenhvcHRzIHw9IFpYX1JFQ1VSU0U7CisJCSAgICB4ID0gbnp4cGFuZChmdWxs bmFtZSxuenhvcHRzKTsgLyogRXhwYW5kIHdpbGRjYXJkcyAqLworCQkgICAgZGVidWcoRjEwMSwi Z25maWxlIG56eHBhbmQiLCIiLHgpOworCQkgICAgaWYgKHggPT0gMSkgeworCQkJaW50IHh4Owor CQkJeHggPSB6bmV4dChmdWxsbmFtZSk7CisJCQlkZWJ1ZyhGMTExLCJnbmZpbGUgem5leHQgQSIs ZnVsbG5hbWUseHgpOworCQkJZ290byBnb3RuYW07CisJCSAgICB9CisJCSAgICBpZiAoeCA9PSAw KSB7CS8qIE5vbmUgbWF0Y2ggKi8KKyNpZm5kZWYgTk9TRVJWRVIKKwkJCWlmIChzZXJ2ZXIgJiYg bmdldHBhdGggPiBpKQorCQkJICBnb3RvIG5leHRpbnBhdGg7CisjZW5kaWYgLyogTk9TRVJWRVIg Ki8KKwkJCXJldGNvZGUgPSAtMTsKKwkJCWRlYnVnKEYxMDEsImduZmlsZSBnbmZlcnJvciBBIiwi IixnbmZlcnJvcik7CisJCQlnbmZlcnJvciA9IC0xOworCQkJY29udGludWU7CisJCSAgICB9CisJ CSAgICBpZiAoeCA8IDApIHsJLyogVG9vIG1hbnkgdG8gZXhwYW5kICovCisJCQlkZWJ1ZyhGMTAx LCJnbmZpbGUgZ25mZXJyb3IgQiIsIiIsZ25mZXJyb3IpOworCQkJZ25mZXJyb3IgPSAtNTsKKwkJ CXJldHVybigtNSk7CisJCSAgICB9CisJCSAgICBzbmRzcmMgPSAtMTsJLyogQ2hhbmdlIHNlbmQt c291cmNlIHRvIHpuZXh0KCkgKi8KKwkJfQorCSAgICB9IGVsc2UgewkJCS8qIFdlJ3JlIG91dCBv ZiBmaWxlcy4gKi8KKwkJZGVidWcoRjExMSwiZ25maWxlIGRvbmUiLGNraXRvYShnbmZlcnJvciks bmZpbHMpOworCQkqZmlsbmFtID0gJ1wwJzsKKwkJcmV0dXJuKDApOworCSAgICB9CisJfQorCisv KiBPdGhlcndpc2UsIHN0ZXAgdG8gbmV4dCBlbGVtZW50IG9mIGludGVybmFsIHdpbGRjYXJkIGV4 cGFuc2lvbiBsaXN0LiAqLworCisJaWYgKHNuZHNyYyA9PSAtMSkgeworCSAgICBpbnQgeHggPSAw OworCSAgICB3aGlsZSAoMSkgeworCQlkZWJ1ZyhGMTExLCJnbmZpbGUgem5leHQgWCIsZmlsbmFt LHh4KTsKKwkJeHggPSB6bmV4dChmaWxuYW0pOworCQlkZWJ1ZyhGMTExLCJnbmZpbGUgem5leHQg QiIsZmlsbmFtLHh4KTsKKwkJaWYgKCFmaWxuYW1bMF0pCisJCSAgYnJlYWs7CisJCWlmIChkb2Rp cnN0b28pIHsKKwkJICAgIGRlYnVnKEYxMTEsImduZmlsZSBGVFAgTVBVVCAvUkVDVVJTSVZFIixm aWxuYW0seHgpOworCQkgICAgYnJlYWs7CisJCX0KKwkJaWYgKCFpc2RpcihmaWxuYW0pKQorCQkg IGJyZWFrOworCSAgICB9CisJICAgIGRlYnVnKEYxMTEsImduZmlsZSB6bmV4dCBDIixmaWxuYW0s eCk7CisJICAgIGlmICghZmlsbmFtWzBdKSB7CQkvKiBJZiBubyBtb3JlLCAqLworCQlzbmRzcmMg PSAxOwkJLyogZ28gYmFjayB0byBwcmV2aW91cyBsaXN0ICovCisJCWRlYnVnKEYxMDEsImduZmls ZSBzZXR0aW5nIHNuZHNyYyBiYWNrIiwiIixzbmRzcmMpOworCQljb250aW51ZTsKKwkgICAgfSBl bHNlCisJICAgICAgY2tzdHJuY3B5KGZ1bGxuYW1lLGZpbG5hbSxDS01BWFBBVEgrMSk7CisJfQor CisvKiBHZXQgaGVyZSB3aXRoIGEgZmlsZW5hbWUuICovCisKK2dvdG5hbToKKwlkZWJ1ZyhGMTEw LCJnbmZpbGUgZnVsbG5hbWUiLGZ1bGxuYW1lLDApOworCWlmIChmdWxsbmFtZVswXSkgeworI2lm ZGVmIERUSUxERQorCSAgICBjaGFyICogZGlycCA9ICIiOworCSAgICBpZiAoZnVsbG5hbWVbMF0g PT0gJ34nKSB7CisJCWRpcnAgPSB0aWxkZV9leHBhbmQoKGNoYXIgKilmdWxsbmFtZSk7CisJCWlm ICgqZGlycCkgY2tzdHJuY3B5KGZ1bGxuYW1lLGRpcnAsQ0tNQVhQQVRIKzEpOworCSAgICB9Cisj ZW5kaWYgLyogRFRJTERFICovCisJICAgIGZpbGVzaXplID0gemNoa2koZnVsbG5hbWUpOwkvKiBD aGVjayBpZiBmaWxlIHJlYWRhYmxlICovCisJICAgIGRlYnVnKEYxMTEsImduZmlsZSB6Y2hraSIs ZnVsbG5hbWUsZmlsZXNpemUpOworCSAgICByZXRjb2RlID0gZmlsZXNpemU7CQkvKiBQb3NzaWJs ZSByZXR1cm4gY29kZSAqLworCSAgICBpZiAoZmlsZXNpemUgPT0gKENLX09GRl9UKS0yICYmIGRv ZGlyc3RvbykgeworCQlmaWxlc2l6ZSA9IDA7CisJICAgIH0KKwkgICAgaWYgKGZpbGVzaXplIDwg MCkgeworCQlnbmZlcnJvciA9IChpbnQpZmlsZXNpemU7CisJCWRlYnVnKEYxMDEsImduZmlsZSBn bmZlcnJvciBDIiwiIixnbmZlcnJvcik7CisJICAgIH0KKwkgICAgaWYgKGZpbGVzaXplID09IChD S19PRkZfVCktMSkgeyAvKiBJZiBub3QgZm91bmQgKi8KKwkJZGVidWcoRjEwMCwiZ25maWxlIC0x IiwiIiwwKTsKKyNpZm5kZWYgTk9TRVJWRVIKKwkJaWYgKHNlcnZlciAmJiBuZ2V0cGF0aCA+IGkp CisJCSAgZ290byBuZXh0aW5wYXRoOworI2VuZGlmIC8qIE5PU0VSVkVSICovCisJCWRlYnVnKEYx MTAsImduZmlsZSBza2lwcGluZzoiLGZ1bGxuYW1lLDApOworCQl0bG9nKEYxMTAsZnVsbG5hbWUs Ijogb3BlbiBmYWlsdXJlIC0gc2tpcHBlZCIsMCk7CisJCXh4c2NyZWVuKFNDUl9GTiwwLDBsLGZ1 bGxuYW1lKTsKKwkJeHhzY3JlZW4oU0NSX1NULFNUX1NLSVAsU0tQX0FDQyxmdWxsbmFtZSk7Cisj aWZkZWYgVExPRworCQlpZiAodHJhbG9nICYmICF0bG9nZm10KQorCQkgIGRveGxvZyh3aGF0LGZ1 bGxuYW1lLGZzaXplLGJpbmFyeSwxLCJTa2lwcGVkIik7CisjZW5kaWYgLyogVExPRyAqLworCQlj b250aW51ZTsKKwkgICAgfSBlbHNlIGlmIChmaWxlc2l6ZSA8IDApIHsKKwkJaWYgKGZpbGVzaXpl ID09IChDS19PRkZfVCktMykgeyAvKiBFeGlzdHMgYnV0IG5vdCByZWFkYWJsZSAqLworCQkgICAg ZGVidWcoRjEwMCwiZ25maWxlIC0zIiwiIiwwKTsKKwkJICAgIGZpbHJlaisrOwkJLyogQ291bnQg dGhpcyBvbmUgYXMgbm90IHNlbnQgKi8KKwkJICAgIHRsb2coRjExMCwiUmVhZCBhY2Nlc3MgZGVu aWVkIixmdWxsbmFtZSwwKTsgLyogTG9nIHRoaXMgKi8KKwkJICAgIHh4c2NyZWVuKFNDUl9GTiww LDBsLGZ1bGxuYW1lKTsKKwkJICAgIHh4c2NyZWVuKFNDUl9TVCxTVF9TS0lQLFNLUF9BQ0MsZnVs bG5hbWUpOyAvKiBEaXNwbGF5IGl0ICovCisjaWZkZWYgVExPRworCQkgICAgaWYgKHRyYWxvZyAm JiAhdGxvZ2ZtdCkKKwkJICAgICAgZG94bG9nKHdoYXQsZnVsbG5hbWUsZnNpemUsYmluYXJ5LDEs IlNraXBwZWQiKTsKKyNlbmRpZiAvKiBUTE9HICovCisJCX0KKwkJY29udGludWU7CisJICAgIH0g ZWxzZSB7CisJCWludCB4eDsKKwkJZnNpemUgPSBmaWxlc2l6ZTsKKy8qICsrKyAqLworICAgIGRl YnVnKEYxMTEsImduZmlsZSBzbmRzbWFsbGVyIixja2ZzdG9hKHNuZHNtYWxsZXIpLHNuZHNtYWxs ZXIpOworICAgIGRlYnVnKEYxMTEsImduZmlsZSBzbmRsYXJnZXIiLGNrZnN0b2Eoc25kbGFyZ2Vy KSxzbmRsYXJnZXIpOworICAgIGRlYnVnKEYxMTEsImduZmlsZSAoQ0tfT0ZGX1QpLTEiLGNrZnN0 b2EoKENLX09GRl9UKS0xKSwoQ0tfT0ZGX1QpLTEpOworCisJCXh4ID0gZmlsZXNlbGVjdChmdWxs bmFtZSwKKwkJCQlzbmRhZnRlciwgc25kYmVmb3JlLAorCQkJCXNuZG5hZnRlcixzbmRuYmVmb3Jl LAorCQkJCXNuZHNtYWxsZXIsc25kbGFyZ2VyLAorCQkJCXNraXBidXAsCisJCQkJTlNOREVYQ0VQ VCxzbmRleGNlcHQpOworCQlkZWJ1ZyhGMTExLCJnbmZpbGUgZmlsZXNlbGVjdCIsZnVsbG5hbWUs eHgpOworCQlpZiAoIXh4KSB7CisJCSAgICBmaWxlc2l6ZSA9IChDS19PRkZfVCktMTsKKwkJICAg IGduZmVycm9yID0gLTY7CisJCSAgICBkZWJ1ZyhGMTAxLCJnbmZpbGUgZ25mZXJyb3IgRCIsIiIs Z25mZXJyb3IpOworCQkgICAgY29udGludWU7CisJCX0KKwkJY2tzdHJuY3B5KGZpbG5hbSxmdWxs bmFtZSxDS01BWFBBVEgrMSk7CisJCXJldHVybigxKTsKKwkgICAgfQorI2lmZGVmIENPTU1FTlQK KwkvKiBUaGlzIGNhbid0IGJlIHJpZ2h0ISAqLworCX0gZWxzZSB7CQkJLyogc25kc3JjIGlzIDAu Li4gKi8KKwkgICAgaWYgKCFmaWxlc2VsZWN0KGZ1bGxuYW1lLAorCQkJICAgIHNuZGFmdGVyLCBz bmRiZWZvcmUsCisJCQkgICAgc25kbmFmdGVyLHNuZG5iZWZvcmUsCisJCQkgICAgc25kc21hbGxl cixzbmRsYXJnZXIsCisJCQkgICAgc2tpcGJ1cCwKKwkJCSAgICBOU05ERVhDRVBULHNuZGV4Y2Vw dCkpIHsKKwkJZ25mZXJyb3IgPSAtNjsKKwkJZGVidWcoRjExMSwiZ25maWxlIGZpbGVzZWxlY3Qi LGZ1bGxuYW1lLGduZmVycm9yKTsKKwkJZmlsZXNpemUgPSAoQ0tfT0ZGX1QpLTE7CisJCWNvbnRp bnVlOworCSAgICB9CisJICAgIGNrc3RybmNweShmaWxuYW0sZnVsbG5hbWUsQ0tNQVhQQVRIKzEp OworCSAgICByZXR1cm4oMSk7CisjZW5kaWYgLyogQ09NTUVOVCAqLworCX0KKyAgICB9CisgICAg ZGVidWcoRjEwMSwiZ25maWxlIHJlc3VsdCIsIiIscmV0Y29kZSk7CisgICAgKmZpbG5hbSA9ICdc MCc7CisgICAgcmV0dXJuKDApOworfQorCisvKgorICBUaGUgZm9sbG93aW5nIGJ1bmNoIG9mIHJv dXRpbmVzIGZlZWQgaW50ZXJuYWxseSBnZW5lcmF0ZWQgZGF0YSB0byB0aGUgc2VydmVyCisgIHRv IHNlbmQgdG8gdGhlIGNsaWVudCBpbiByZXNwb25zZSB0byBSRU1PVEUgY29tbWFuZHMgbGlrZSBE SVJFQ1RPUlksIERFTEVURSwKKyAgYW5kIHNvIG9uLiAgV2UgaGF2ZSB0byB3cml0ZSB0aGVzZSBs aW5lcyBpbiB0aGUgZm9ybWF0IGFwcHJvcHJpYXRlIHRvIG91cgorICBwbGF0Zm9ybSwgc28gdGhl eSBjYW4gYmUgY29udmVydGVkIHRvIGdlbmVyaWMgKENSTEYpIHRleHQgZm9ybWF0IGJ5IHRoZQor ICBwYWNrZXRpemVyLgorKi8KKyNpZmRlZiBVTklYCitjaGFyICogZW5kbGluZSA9ICJcMTIiOwor I2Vsc2UKKyNpZmRlZiBkYXRhZ2VuZXJhbAorY2hhciAqIGVuZGxpbmUgPSAiXDEyIjsKKyNlbHNl CisjaWZkZWYgTUFDCitjaGFyICogZW5kbGluZSA9ICJcMTUiOworI2Vsc2UKKyNpZmRlZiBPU0sK K2NoYXIgKiBlbmRsaW5lID0gIlwxNSI7CisjZWxzZQorY2hhciAqIGVuZGxpbmUgPSAiXDE1XDEy IjsKKyNlbmRpZiAvKiBPU0sgKi8KKyNlbmRpZiAvKiBNQUMgKi8KKyNlbmRpZiAvKiBkYXRhZ2Vu ZXJhbCAqLworI2VuZGlmIC8qIFVOSVggKi8KKworI2lmZGVmIE1BQworI2RlZmluZSBGTkNCVUZM IDI1NgorI2Vsc2UKKyNpZmRlZiBDS1NZTUxJTksKKyNkZWZpbmUgRk5DQlVGTCAoQ0tNQVhQQVRI ICsgQ0tNQVhQQVRIICsgNjQpCisjZWxzZQorI2RlZmluZSBGTkNCVUZMIChDS01BWFBBVEggKyA2 NCkKKyNlbmRpZiAvKiBDS1NZTUxJTksgKi8KKyNlbmRpZiAvKiBNQUMgKi8KKworLyogTkI6IFRo ZSBtaW5pbXVtIEZOQ0JVRkwgaXMgMjU1ICovCisKK3N0YXRpYyBDSEFSIGZ1bmNidWZbRk5DQlVG TF07CitzdGF0aWMgaW50ICBmdW5jbnh0ID0gIDA7CitzdGF0aWMgaW50ICBmdW5jbGVuID0gIDA7 CitzdGF0aWMgaW50ICBueHBuZCAgID0gLTE7CitzdGF0aWMgbG9uZyBuZGlycyAgID0gIDA7Citz dGF0aWMgbG9uZyBuZmlsZXMgID0gIDA7CitzdGF0aWMgQ0tfT0ZGX1QgbmJ5dGVzICA9ICAwOwor CitpbnQKK3NuZHN0cmluZyhwKSBjaGFyICogcDsgeworI2lmbmRlZiBOT1NFUlZFUgorICAgIG5m aWxzID0gMDsJCQkJLyogTm8gZmlsZXMsIG5vIGxpc3RzLiAqLworICAgIHhmbGcgPSAxOwkJCQkv KiBGbGFnIHdlIG11c3Qgc2VuZCBYIHBhY2tldC4gKi8KKyAgICBja3N0cm5jcHkoY21kc3RyLHZl cnNpbyxDTURTVFJMKTsJLyogRGF0YSBmb3IgWCBwYWNrZXQuICovCisgICAgZmlyc3QgPSAxOwkJ CQkvKiBJbml0IGdldGNoeCBsb29rYWhlYWQgKi8KKyAgICBtZW1zdHIgPSAxOwkJCQkvKiBKdXN0 IHNldCB0aGUgZmxhZy4gKi8KKyAgICBtZW1wdHIgPSBwOwkJCQkvKiBBbmQgdGhlIHBvaW50ZXIu ICovCisgICAgYmluYXJ5ID0gWFlGVF9UOwkJCS8qIFRleHQgbW9kZSBmb3IgdGhpcy4gKi8KKyAg ICByZXR1cm4oc2luaXQoKSk7CisjZWxzZQorICAgIHJldHVybigwKTsKKyNlbmRpZiAvKiBOT1NF UlZFUiAqLworfQorCisvKiAgUyBOIEQgSCBMIFAgIC0tICBSb3V0aW5lIHRvIHNlbmQgYnVpbHRp biBoZWxwICAqLworCitzdGF0aWMgaW50IHNydmhscG51bSA9IDA7CisKKyNpZmRlZiBJS1NECitz dGF0aWMgY2hhciAqbm14W10gPSAgeyAiRGlzYWJsZWQiLCAiRGlzYWJsZWQiLCAiRW5hYmxlZCIs ICJFbmFibGVkIiB9OworI2VuZGlmIC8qIElLU0QgKi8KKworc3RhdGljIGNoYXIgKgoreG5tKHgp IGludCB4OyB7CisjaWZkZWYgSUtTRAorICAgIGlmIChpbnNlcnZlcikKKyAgICAgIHJldHVybihu bXhbeF0pOworICAgIGVsc2UKKyNlbmRpZiAvKiBJS1NEICovCisgICAgICByZXR1cm4obm1beF0p OworfQorCitzdGF0aWMgaW50CitueHRobHAoCisjaWZkZWYgQ0tfQU5TSUMKKyAgICAgICB2b2lk CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKyAgICAgICApIHsKKyAgICBpbnQgeCA9IDA7CisgICAg ZXh0ZXJuIGludAorICAgICAgZW5fY3B5LCBlbl9jd2QsIGVuX2RlbCwgZW5fZGlyLCBlbl9maW4s IGVuX2dldCwgZW5fYnllLCBlbl9tYWksCisgICAgICBlbl9wcmksIGVuX2hvcywgZW5fcmVuLCBl bl9zZW4sIGVuX3NwYSwgZW5fc2V0LCBlbl90eXAsIGVuX3dobywKKyAgICAgIC8qIGVuX3JldCwg Ki8gZW5fbWtkLCBlbl9ybWQsIGVuX2FzZywgZW5fcXVlLCBlbl94aXQsIHhfbG9naW4sIHhfbG9n Z2VkLAorICAgICAgeGZpbmlzaDsKKyAgICBleHRlcm4gY2hhciAqIGNreHN5czsKKworICAgIGlm IChmdW5jbnh0IDwgZnVuY2xlbikKKyAgICAgIHJldHVybiAoZnVuY2J1ZltmdW5jbnh0KytdKTsK KworICAgIHN3aXRjaCAoc3J2aGxwbnVtKyspIHsKKyAgICAgIGNhc2UgMDoKKwl4ID0gY2tzdHJu Y3B5KChjaGFyICopZnVuY2J1ZiwKKwkJICAgICAgIkNsaWVudCBDb21tYW5kICAgICBTdGF0dXMg ICAgICAgIERlc2NyaXB0aW9uXG4iLAorCQkgICAgICBGTkNCVUZMCisJCSAgICAgICk7CisJaWYg KHhfbG9naW4gJiYgIXhfbG9nZ2VkKSB7CisJICAgIHggKz0gY2tzdHJuY2F0KChjaGFyICopZnVu Y2J1ZiwKKwkJCSAgICIgUkVNT1RFIExPR0lOICAgICAgIHJlcXVpcmVkXG4iLAorCQkJICAgRk5D QlVGTAorCQkJICAgKTsKKwl9CisJaWYgKEZOQ0JVRkwgLSB4ID4gNzQpCisJc3ByaW50ZigoY2hh ciAqKShmdW5jYnVmK3gpLCIgR0VUICAgICAgICAgICAgICAgICUtMTRzJXNcbiIsCisJCXhubShl bl9nZXQpLAorCQkiVHJhbnNmZXIgZmlsZShzKSBmcm9tIHNlcnZlciB0byBjbGllbnQuIgorCQkp OworCWJyZWFrOworCisvKiBOT1RFOiBUaGUgbWluaW11bSBmdW5jYnVmW10gc2l6ZSBpcyAyNTU7 IGFsbCBvZiB0aGUgZm9sbG93aW5nIGFyZSBzYWZlLiAqLworCisgICAgICBjYXNlIDE6CisJc3By aW50ZigoY2hhciAqKWZ1bmNidWYsIiBTRU5EICAgICAgICAgICAgICAgJS0xNHMlc1xuIiwKKwkJ eG5tKGVuX3NlbiksCisJCSJUcmFuc2ZlciBmaWxlKHMpIGZyb20gY2xpZW50IHRvIHNlcnZlci4i CisJCSk7CisJYnJlYWs7CisKKyAgICAgIGNhc2UgMjoKKwlzcHJpbnRmKChjaGFyICopZnVuY2J1 ZiwiIE1BSUwgICAgICAgICAgICAgICAlLTE0cyVzXG4iLAorCQl4bm0oaW5zZXJ2ZXIgPyAwIDog ZW5fbWFpKSwKKwkJIlNlbmQgZmlsZShzKSBhcyBlLW1haWwuIgorCQkpOworCWJyZWFrOworCisg ICAgICBjYXNlIDM6CisjaWZuZGVmIE5PU1BMCisJc3ByaW50ZigoY2hhciAqKWZ1bmNidWYsIiBS RU1PVEUgQVNTSUdOICAgICAgJS0xNHMlc1xuIiwKKwkJeG5tKGVuX2FzZyksCisJCSJBc3NpZ24g dmFsdWUgdG8gc2VydmVyIHZhcmlhYmxlIG9yIG1hY3JvLiIKKwkJKTsKKyNlbHNlCisJc3ByaW50 ZigoY2hhciAqKWZ1bmNidWYsIiBSRU1PVEUgQVNTSUdOICAgICAgbm90IGNvbmZpZ3VyZWRcbiIp OworI2VuZGlmIC8qIE5PU1BMICovCisKKwlicmVhazsKKyAgICAgIGNhc2UgNDoKKwlzcHJpbnRm KChjaGFyICopZnVuY2J1ZiwiIFJFTU9URSBDRCAgICAgICAgICAlLTE0cyVzXG4iLAorCQl4bm0o ZW5fY3dkKSwKKwkJIkNoYW5nZSBzZXJ2ZXIncyBkaXJlY3RvcnkuIgorCQkpOworCWJyZWFrOwor CisgICAgICBjYXNlIDU6CisjaWZkZWYgWkNPUFkKKwlzcHJpbnRmKChjaGFyICopZnVuY2J1Ziwi IFJFTU9URSBDT1BZICAgICAgICAlLTE0cyVzXG4iLAorCQl4bm0oZW5fY3B5KSwKKwkJIkNvcHkg YSBmaWxlIG9uIHRoZSBzZXJ2ZXIuIgorCQkpOworI2Vsc2UKKwlzcHJpbnRmKChjaGFyICopZnVu Y2J1ZiwiIFJFTU9URSBDT1BZICAgICAgICBub3QgY29uZmlndXJlZFxuIik7CisjZW5kaWYgLyog WkNPUFkgKi8KKworCWJyZWFrOworICAgICAgY2FzZSA2OgorCXNwcmludGYoKGNoYXIgKilmdW5j YnVmLCIgUkVNT1RFIERFTEVURSAgICAgICUtMTRzJXNcbiIsCisJCXhubShlbl9kZWwpLAorCQki RGVsZXRlIGEgZmlsZSBvbiB0aGUgc2VydmVyLiIKKwkJKTsKKwlicmVhazsKKworICAgICAgY2Fz ZSA3OgorCXNwcmludGYoKGNoYXIgKilmdW5jYnVmLCIgUkVNT1RFIERJUkVDVE9SWSAgICUtMTRz JXNcbiIsCisJCXhubShlbl9kaXIpLAorCQkiTGlzdCBmaWxlcyBvbiB0aGUgc2VydmVyLiIKKwkJ KTsKKwlicmVhazsKKworICAgICAgY2FzZSA4OgorCXNwcmludGYoKGNoYXIgKilmdW5jYnVmLCIg UkVNT1RFIEVYSVQgICAgICAgICUtMTRzJXNcbiIsCisJCXhubShlbl94aXQpLAorCQkiRXhpdCBm cm9tIEtlcm1pdCBzZXJ2ZXIgcHJvZ3JhbS4iCisJCSk7CisJYnJlYWs7CisKKyAgICAgIGNhc2Ug OToKKwlzcHJpbnRmKChjaGFyICopZnVuY2J1ZiwiIFJFTU9URSBIT1NUICAgICAgICAlLTE0cyVz XG4iLAorCQl4bm0oaW5zZXJ2ZXIgPyAwIDogZW5faG9zKSwKKyNpZmRlZiBkYXRhZ2VuZXJhbAor CQkiRXhlY3V0ZSBhIENMSSBjb21tYW5kIG9uIHRoZSBzZXJ2ZXIuIgorI2Vsc2UKKyNpZmRlZiBW TVMKKwkJIkV4ZWN1dGUgYSBEQ0wgY29tbWFuZCBvbiB0aGUgc2VydmVyLiIKKyNlbHNlCisJCSJF eGVjdXRlIGEgc2hlbGwgY29tbWFuZCBvbiB0aGUgc2VydmVyLiIKKyNlbmRpZiAvKiBWTVMgKi8K KyNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLworCQkpOworCWJyZWFrOworCisgICAgICBjYXNlIDEw OgorCXNwcmludGYoKGNoYXIgKilmdW5jYnVmLCIgUkVNT1RFIFBSSU5UICAgICAgICUtMTRzJXNc biIsCisJCXhubShpbnNlcnZlciA/IDAgOiBlbl9wcmkpLAorCQkiU2VuZCBhIGZpbGUgdG8gdGhl IHNlcnZlciBmb3IgcHJpbnRpbmcuIgorCQkpOworCWJyZWFrOworCisgICAgICBjYXNlIDExOgor I2lmbmRlZiBOT1NQTAorCXNwcmludGYoKGNoYXIgKilmdW5jYnVmLCIgUkVNT1RFIFFVRVJZICAg ICAgICUtMTRzJXNcbiIsCisJCXhubShlbl9xdWUpLAorCQkiR2V0IHZhbHVlIG9mIHNlcnZlciB2 YXJpYWJsZSBvciBtYWNyby4iCisJCSk7CisKKyNlbHNlCisJc3ByaW50ZigoY2hhciAqKWZ1bmNi dWYsIiBSRU1PVEUgUVVFUlkgICAgICAgbm90IGNvbmZpZ3VyZWRcbiIpOworI2VuZGlmIC8qIE5P U1BMICovCisKKwlicmVhazsKKyAgICAgIGNhc2UgMTI6CisJc3ByaW50ZigoY2hhciAqKWZ1bmNi dWYsIiBSRU1PVEUgTUtESVIgICAgICAgJS0xNHMlc1xuIiwKKwkJeG5tKGVuX21rZCksCisJCSJD cmVhdGUgYSBkaXJlY3Rvcnkgb24gdGhlIHNlcnZlci4iCisJCSk7CisJYnJlYWs7CisKKyAgICAg IGNhc2UgMTM6CisJc3ByaW50ZigoY2hhciAqKWZ1bmNidWYsIiBSRU1PVEUgUk1ESVIgICAgICAg JS0xNHMlc1xuIiwKKwkJeG5tKGVuX3JtZCksCisJCSJSZW1vdmUgYSBkaXJlY3Rvcnkgb24gdGhl IHNlcnZlci4iCisJCSk7CisJYnJlYWs7CisKKyAgICAgIGNhc2UgMTQ6CisJc3ByaW50ZigoY2hh ciAqKWZ1bmNidWYsIiBSRU1PVEUgUkVOQU1FICAgICAgJS0xNHMlc1xuIiwKKwkJeG5tKGVuX3Jl biksCisJCSJSZW5hbWUgYSBmaWxlIG9uIHRoZSBzZXJ2ZXIuIgorCQkpOworCWJyZWFrOworCisg ICAgICBjYXNlIDE1OgorCXNwcmludGYoKGNoYXIgKilmdW5jYnVmLCIgUkVNT1RFIFNFVCAgICAg ICAgICUtMTRzJXNcbiIsCisJCXhubShlbl9zZXQpLAorCQkiU2V0IGEgcGFyYW1ldGVyIG9uIHRo ZSBzZXJ2ZXIiCisJCSk7CisJYnJlYWs7CisKKyAgICAgIGNhc2UgMTY6CisJc3ByaW50ZigoY2hh ciAqKWZ1bmNidWYsIiBSRU1PVEUgU1BBQ0UgICAgICAgJS0xNHMlc1xuIiwKKwkJeG5tKGVuX3Nw YSksCisJCSJJbnF1aXJlIGFib3V0IGRpc2sgc3BhY2Ugb24gdGhlIHNlcnZlci4iCisJCSk7CisJ YnJlYWs7CisKKyAgICAgIGNhc2UgMTc6CisJc3ByaW50ZigoY2hhciAqKWZ1bmNidWYsIiBSRU1P VEUgVFlQRSAgICAgICAgJS0xNHMlc1xuIiwKKwkJeG5tKGVuX3R5cCksCisJCSJEaXNwbGF5IGEg c2VydmVyIGZpbGUgb24geW91ciBzY3JlZW4uIgorCQkpOworCWJyZWFrOworCisgICAgICBjYXNl IDE4OgorCXNwcmludGYoKGNoYXIgKilmdW5jYnVmLCIgUkVNT1RFIFdITyAgICAgICAgICUtMTRz JXNcbiIsCisJCXhubShpbnNlcnZlciA/IDAgOiBlbl93aG8pLAorCQkiTGlzdCB3aG8gaXMgbG9n Z2VkIGluIHRvIHRoZSBzZXJ2ZXIuIgorCQkpOworCWJyZWFrOworCisgICAgICBjYXNlIDE5Ogor CXNwcmludGYoKGNoYXIgKilmdW5jYnVmLCIgRklOSVNIICAgICAgICAgICAgICUtMTRzJXNcbiIs CisJCXhubShlbl9maW4pLAorCQl4ZmluaXNoID8KKwkJIkV4aXQgZnJvbSBLZXJtaXQgc2VydmVy IHByb2dyYW0uIiA6CisJCSJSZXR1cm4gdGhlIHNlcnZlciB0byBpdHMgY29tbWFuZCBwcm9tcHQu IgorCQkpOworCWJyZWFrOworCisgICAgICBjYXNlIDIwOgorCXNwcmludGYoKGNoYXIgKilmdW5j YnVmLCIgQllFICAgICAgICAgICAgICAgICUtMTRzJXNcblxuIiwKKwkJeG5tKGVuX2J5ZSksCisJ CSJMb2cgdGhlIHNlcnZlciBvdXQgYW5kIGRpc2Nvbm5lY3QuIgorCQkpOworCWJyZWFrOworCisg ICAgICBkZWZhdWx0OgorCXJldHVybigtMSk7CisgICAgfQorICAgIGZ1bmNueHQgPSAwOworICAg IGZ1bmNsZW4gPSBzdHJsZW4oKGNoYXIgKilmdW5jYnVmKTsKKyAgICByZXR1cm4oZnVuY2J1Zltm dW5jbnh0KytdKTsKK30KKworaW50CitzbmRobHAoKSB7CisjaWZuZGVmIE5PU0VSVkVSCisgICAg ZXh0ZXJuIGNoYXIgKiBja3hzeXM7CisKKyAgICBmaXJzdCA9IDE7CQkJCS8qIEluaXQgZ2V0Y2h4 IGxvb2thaGVhZCAqLworICAgIG5maWxzID0gMDsJCQkJLyogTm8gZmlsZXMsIG5vIGxpc3RzLiAq LworICAgIHhmbGcgPSAxOwkJCQkvKiBGbGFnIHdlIG11c3Qgc2VuZCBYIHBhY2tldC4gKi8KKyAg ICBja3N0cm5jcHkoY21kc3RyLCJSRU1PVEUgSEVMUCIsQ01EU1RSTCk7IC8qIERhdGEgZm9yIFgg cGFja2V0LiAqLworICAgIHNwcmludGYoKGNoYXIgKilmdW5jYnVmLCAiQy1LZXJtaXQgJXMsJXNc blxuIiwgdmVyc2lvLCBja3hzeXMpOworICAgIGZ1bmNsZW4gPSBzdHJsZW4oKGNoYXIgKilmdW5j YnVmKTsKKyNpZmRlZiBJS1NECisgICAgaWYgKGluc2VydmVyKSB7CisJc3ByaW50ZigoY2hhciAq KShmdW5jYnVmK2Z1bmNsZW4pLAorCQkiSW50ZXJuZXQgS2VybWl0IFNlcnZpY2UgKEVYUEVSSU1F TlRBTClcblxuIik7CisJZnVuY2xlbiA9IHN0cmxlbigoY2hhciAqKWZ1bmNidWYpOworICAgIH0K KyNlbmRpZiAvKiBJS1NEICovCisgICAgZnVuY254dCA9IDA7CisgICAgZnVuY3B0ciA9IG54dGhs cDsKKyAgICBmdW5jc3RyID0gMTsKKyAgICBzcnZobHBudW0gPSAwOworICAgIGJpbmFyeSA9IFhZ RlRfVDsJCQkvKiBUZXh0IG1vZGUgZm9yIHRoaXMuICovCisgICAgcmV0dXJuKHNpbml0KCkpOwor I2Vsc2UKKyAgICByZXR1cm4oMCk7CisjZW5kaWYgLyogTk9TRVJWRVIgKi8KK30KKworLyoKKyAg IFJldHVybnMgdGhlIG5leHQgYXZhaWxhYmxlIGNoYXJhY3RlciwKKyAgLTEgaWYgbm8gbW9yZSBk YXRhLgorKi8KK3N0YXRpYyBpbnQKK254dHR5cGUoCisjaWZkZWYgQ0tfQU5TSUMKKyAgICAgICB2 b2lkCisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKwkpIHsKKyAgICBpbnQgYzsKKyAgICBpZiAoemNo aW4oWklGSUxFLCZjKSA8IDApIHsKKyAgICAgICAgemNsb3NlKFpJRklMRSk7CisgICAgICAgIHJl dHVybigtMSk7CisgICAgfSBlbHNlIHsKKwlyZXR1cm4oKHVuc2lnbmVkKWMpOworICAgIH0KK30K KworLyogIFMgTiBEIFQgWSBQIC0tIFRZUEUgYSBmaWxlIHRvIHJlbW90ZSBjbGllbnQgKi8KKwor aW50CitzbmR0eXBlKGZpbGUpIGNoYXIgKiBmaWxlOyB7CisjaWZuZGVmIE5PU0VSVkVSCisgICAg Y2hhciBuYW1lW0NLTUFYUEFUSCsxXTsKKworI2lmZGVmIE9TMgorICAgIGNoYXIgKiBwID0gTlVM TDsKKworICAgIGlmICgqZmlsZSkgeworICAgICAgICBja3N0cm5jcHkobmFtZSwgZmlsZSwgQ0tN QVhQQVRIKzEpOworICAgICAgICAvKiBjaGFuZ2UgLyB0byBcLiAqLworICAgICAgICBwID0gbmFt ZTsKKyAgICAgICAgd2hpbGUgKCpwKSB7CQkJLyogQ2hhbmdlIHRoZW0gYmFjayB0byBcICovCisg ICAgICAgICAgICBpZiAoKnAgPT0gJy8nKSAqcCA9ICdcXCc7CisgICAgICAgICAgICBwKys7Cisg ICAgICAgIH0KKyAgICB9IGVsc2UKKyAgICAgIHJldHVybigwKTsKKyNlbHNlCisgICAgY2tzdHJu Y3B5KG5hbWUsIGZpbGUsIENLTUFYUEFUSCsxKTsKKyNlbmRpZiAvKiBPUzIgKi8KKworICAgIGZ1 bmNueHQgPSAwOworICAgIGZ1bmNsZW4gPSBzdHJsZW4oKGNoYXIgKilmdW5jYnVmKTsKKyAgICBp ZiAoemNoa2kobmFtZSkgPT0gLTIpIHsKKyAgICAgICAgLyogRm91bmQgYSBkaXJlY3RvcnkgKi8K KyAgICAgICAgcmV0dXJuKDApOworICAgIH0KKyAgICBpZiAoIXpvcGVuaShaSUZJTEUsbmFtZSkp CisgICAgICByZXR1cm4oMCk7CisKKyAgICBuZmlscyA9IDA7CQkJCS8qIE5vIGZpbGVzLCBubyBs aXN0cy4gKi8KKyAgICB4ZmxnID0gMTsJCQkJLyogRmxhZyB3ZSBtdXN0IHNlbmQgWCBwYWNrZXQu ICovCisgICAgY2tzdHJuY3B5KGNtZHN0ciwidHlwZSIsQ01EU1RSTCk7CS8qIERhdGEgZm9yIFgg cGFja2V0LiAqLworICAgIGZpcnN0ID0gMTsJCQkJLyogSW5pdCBnZXRjaHggbG9va2FoZWFkICov CisgICAgZnVuY3N0ciA9IDE7CQkJLyogSnVzdCBzZXQgdGhlIGZsYWcuICovCisgICAgZnVuY3B0 ciA9IG54dHR5cGU7CQkJLyogQW5kIHRoZSBwb2ludGVyLiAqLworICAgIGJpbmFyeSA9IFhZRlRf VDsJCQkvKiBUZXh0IG1vZGUgZm9yIHRoaXMgKi8KKyAgICByZXR1cm4oc2luaXQoKSk7CisjZWxz ZQorICAgIHJldHVybigwKTsKKyNlbmRpZiAvKiBOT1NFUlZFUiAqLworfQorCisvKgorICAgTiBY IFQgRCBJIFIgIC0tICBQcm92aWRlIGRhdGEgZm9yIHNlbmRkaXIoKQorCisgICBSZXR1cm5zIHRo ZSBuZXh0IGF2YWlsYWJsZSBjaGFyYWN0ZXIgb3IgLTEgaWYgbm8gbW9yZSBkYXRhLgorKi8KKyNp Zm5kZWYgTk9JQ1AKKy8qIERpcmVjdG9yeSBsaXN0aW5nIHBhcmFtZXRlcnMgc2V0IGJ5IHRoZSB1 c2VyIGludGVyZmFjZSwgaWYgYW55LiAqLworZXh0ZXJuIGludCBkaXJfaGVhZCwgZGlyX2RvdHMs IGRpcl9iYWNrOworI2VuZGlmIC8qIE5PSUNQICovCitzdGF0aWMgaW50IHNkX2hkZywgc2RfYmtw LCBzZF9kb3Q7CS8qIExvY2FsIGxpc3RpbmcgcGFyYW1ldGVycyAqLworCitzdGF0aWMgaW50Citu eHRkaXIoCisjaWZkZWYgQ0tfQU5TSUMKKyAgICAgICB2b2lkCisjZW5kaWYgLyogQ0tfQU5TSUMg Ki8KKyAgICAgICApIHsKKyAgICBjaGFyIG5hbWVbQ0tNQVhQQVRIKzFdLCBkYnVmWzI0XSwgKnAg PSBOVUxMOworICAgIGNoYXIgKmRzdHIgPSBOVUxMLCAqIGxuayA9ICIiOworICAgIENIQVIgYywg KiBsaW5lYnVmID0gZnVuY2J1ZjsKKyNpZmRlZiBPU0sKKyAgICAvKiBXb3JrIGFyb3VuZCBidWdz IGluIE9TSyBjb21waWxlciAqLworICAgIGNoYXIgKmRpcnRhZyA9ICJkaXJlY3RvcmllcyI7Cisg ICAgY2hhciAqZmlsZXRhZyA9ICJmaWxlcyI7CisgICAgY2hhciAqYnl0ZXRhZyA9ICJieXRlcyI7 CisjZW5kaWYgLyogT1NLICovCisgICAgQ0tfT0ZGX1QgbGVuID0gMDsKKyAgICBpbnQgeCwgaXRz YWRpciA9IDAsIGdvdG9uZSA9IDA7CisKKyNpZmRlZiBERUJVRworICAgIGlmIChkZWJsb2cpIHsK KwlkZWJ1ZyhGMTAxLCJueHRkaXIgZnVuY254dCIsIiIsZnVuY254dCk7CisJZGVidWcoRjEwMSwi bnh0ZGlyIGZ1bmNsZW4iLCIiLGZ1bmNsZW4pOworCWRlYnVnKEYxMTAsIm54dGRpciBmdW5jYnVm IixmdW5jYnVmK2Z1bmNueHQsMCk7CisgICAgfQorI2VuZGlmIC8qIERFQlVHICovCisgICAgaWYg KGZ1bmNueHQgPCBmdW5jbGVuKSB7CQkvKiBSZXR1cm4gbmV4dCBjaGFyYWN0ZXIgZnJvbSBidWZm ZXIgKi8KKwljID0gZnVuY2J1ZltmdW5jbnh0KytdOworCWRlYnVnKEYwMDAsIm54dGRpciByZXR1 cm4gMSIsIiIsKHVuc2lnbmVkKShjICYgMHhmZikpOworCXJldHVybigodW5zaWduZWQpKGMgJiAw eGZmKSk7CisgICAgfQorICAgIHdoaWxlIChueHBuZCA+IDApIHsJCQkvKiBCdWZmZXIgbmVlZHMg cmVmaWxsICovCisgICAgICAgIG54cG5kLS07CisJem5leHQobmFtZSk7CQkJLyogR2V0IG5leHQg ZmlsZW5hbWUgKi8KKyAgICAgICAgaWYgKCFuYW1lWzBdKSB7CQkJLyogTm9uZSBsZWZ0IC0gZG9u ZSAqLworICAgICAgICAgICAgbnhwbmQgPSAwOworICAgICAgICAgICAgcmV0dXJuKG54dGRpcigp KTsKKyAgICAgICAgfQorCWlmIChzZF9ia3ApIHsJCQkvKiBTaG93aW5nIGJhY2t1cCBmaWxlcz8g Ki8KKwkgICAgZ290b25lID0gMTsJCQkvKiBZZXMsIG5vIG5lZWQgdG8gY2hlY2suICovCisJICAg IGJyZWFrOworCX0KKwl4ID0gY2ttYXRjaCgJCQkvKiBObyAtIHNlZSBpZiB0aGlzIGlzIG9uZSAq LworI2lmZGVmIENLUkVHRVgKKwkJICAgICIqLn5bMC05XSp+IgkvKiBOb3QgcGVyZmVjdCBidXQg Y2xvc2UgZW5vdWdoLiAqLworI2Vsc2UKKwkJICAgICIqLn4qfiIJCS8qIExlc3MgY2xvc2UuICov CisjZW5kaWYgLyogQ0tSRUdFWCAqLworCQkgICAgLG5hbWUsZmlsZWNhc2UsMSk7CisJZGVidWco RjExMSwibnh0ZGlyIGNrbWF0Y2giLG5hbWUseCk7CisJaWYgKHgpIHsKKwkgICAgY29udGludWU7 CQkJLyogSXQncyBhIGJhY2t1cCBmaWxlIC0gc2tpcCBpdCAqLworCX0gZWxzZSB7CisJICAgIGdv dG9uZSA9IDE7CQkJLyogSXQncyBub3QsIGJyZWFrIGZyb20gbG9vcC4gKi8KKwkgICAgYnJlYWs7 CisJfQorICAgIH0KKyAgICBpZiAoZ290b25lKSB7CisgICAgICAgIGxlbiA9IHpnZXRmcyhuYW1l KTsJCS8qIEdldCBmaWxlIHNpemUgKi8KKwlkZWJ1ZyhGMTExLCJueHRkaXIgemdldGZzIixuYW1l LGxlbik7CisjaWZkZWYgVk1TT1JVTklYCisJaXRzYWRpciA9IHpnZnNfZGlyOwkJLyogU2VlIGlm IGl0J3MgYSBkaXJlY3RvcnkgKi8KKyNlbHNlCisJaXRzYWRpciA9IChsZW4gPT0gLTIgfHwgaXNk aXIobmFtZSkpOworI2VuZGlmIC8qIFZNU09SVU5JWCAqLworICAgICAgICBkc3RyID0gemZjZGF0 KG5hbWUpOworCWRlYnVnKEYxMTEsIm54dGRpciB6Y2ZkYXQiLGRzdHIsMCk7CisJaWYgKCFkc3Ry KQorCSAgZHN0ciA9ICIwMDAwLTAwLTAwIDAwOjAwOjAwIjsKKwlpZiAoISpkc3RyKSB7CisJICBk c3RyID0gIjAwMDAtMDAtMDAgMDA6MDA6MDAiOworCX0gZWxzZSB7CisJICAgIGRidWZbMF0gPSBk c3RyWzBdOworCSAgICBkYnVmWzFdID0gZHN0clsxXTsKKwkgICAgZGJ1ZlsyXSA9IGRzdHJbMl07 CisJICAgIGRidWZbM10gPSBkc3RyWzNdOworCSAgICBkYnVmWzRdID0gJy0nOworCSAgICBkYnVm WzVdID0gZHN0cls0XTsKKwkgICAgZGJ1Zls2XSA9IGRzdHJbNV07CisJICAgIGRidWZbN10gPSAn LSc7CisJICAgIGRidWZbOF0gPSBkc3RyWzZdOworCSAgICBkYnVmWzldID0gZHN0cls3XTsKKwkg ICAgc3RyY3B5KGRidWYrMTAsZHN0cis4KTsKKwkgICAgZHN0ciA9IGRidWY7CisJfQorI2lmZGVm IENLX1BFUk1TCisjaWZkZWYgVk1TT1JVTklYCisJcCA9IHppcGVybShuYW1lKTsJCS8qIEdldCBw ZXJtaXNzaW9ucyAqLworI2Vsc2UKKwlwID0gemdwZXJtKG5hbWUpOworI2VuZGlmIC8qIFZNU09S VU5JWCAqLworI2Vsc2UKKwlwID0gTlVMTDsKKyNlbmRpZiAvKiBDS19QRVJNUyAqLworCWRlYnVn KEYxMTAsImRvbXlkaXIgcGVybXMiLHAsMCk7CisKKyNpZmRlZiBWTVMKKwkvKiBNYWtlIG5hbWUg cmVsYXRpdmUgKi8KKwlja3N0cm5jcHkobmFtZSx6cmVsbmFtZShuYW1lLHpndGRpcigpKSxDS01B WFBBVEgrMSk7CisjZW5kaWYgLyogVk1TICovCisKKwlpZiAoaXRzYWRpcikgeworCSAgICBuZGly cysrOworCX0gZWxzZSB7CisJICAgIG5maWxlcysrOworCSAgICBuYnl0ZXMgKz0gbGVuOworCX0K KwlsbmsgPSAiIjsKKyNpZmRlZiBVTklYCisjaWZkZWYgQ0tTWU1MSU5LCisJaWYgKHpnZnNfbGlu aykgeworCSAgICBleHRlcm4gY2hhciBsaW5rbmFtZVtdOworCSAgICBsbmsgPSBsaW5rbmFtZTsK Kwl9CisJZGVidWcoRjExMSwibnh0ZGlyIGxpbmtuYW1lIixsbmssemdmc19saW5rKTsKKyNlbmRp ZiAvKiBDS1NZTUxJTksgKi8KKyNlbmRpZiAvKiBVTklYICovCisKKy8qCisgIFRoZSBmb2xsb3dp bmcgc3ByaW50ZidzIGFyZSBzYWZlOyBsaW5lYnVmIGlzIGEgcG9pbnRlciB0byBmdW5jYnVmLAor ICB3aGljaCBpcyA2NCBieXRlcyBsYXJnZXIgdGhhbiBDS01BWFBBVEggKG9yIGRvdWJsZSBDS01B WFBBVEggd2hlbgorICBzeW1saW5rcyBhcmUgcG9zc2libGUpLiAgNjQgYWxsb3dzIGZvciB0aGUg Zml4ZWQtZmllbGQgcG9ydGlvbnMgb2YKKyAgdGhlIGZpbGUgbGlzdGluZyBsaW5lOiBwZXJtaXNz aW9ucywgc2l6ZSwgYW5kIGRhdGUuICBDS01BWFBBVEggYWxsb3dzCisgIGZvciB0aGUgbG9uZ2Vz dCBwb3NzaWJsZSBwYXRobmFtZS4KKyovCisJaWYgKGl0c2FkaXIgJiYgbGVuIDwgMCkgewkvKiBE aXJlY3RvcnkgKi8KKyNpZmRlZiBWTVMKKwkgICAgc3ByaW50ZigoY2hhciAqKWxpbmVidWYsCisJ CSAgICAiJS0yMnMlLTEwcyAgJXMgICVzXG4iLHAsIjxESVI+Iixkc3RyLG5hbWUpOworI2Vsc2UK KwkgICAgaWYgKHApCisJICAgICAgc3ByaW50ZigoY2hhciAqKWxpbmVidWYsCisJCSAgICAgICIl MTBzJS0xMHMgICVzICAlc1xuIixwLCI8RElSPiIsZHN0cixuYW1lKTsKKwkgICAgZWxzZQorCSAg ICAgIHNwcmludGYoKGNoYXIgKilsaW5lYnVmLAorCQkgICAgICAiJS0xMHMgICVzICAlc1xuIiwg IjxESVI+IiwgZHN0ciwgbmFtZSk7CisjZW5kaWYgLyogVk1TICovCisJfSBlbHNlIHsJCQkvKiBS ZWd1bGFyIGZpbGUgKi8KKyNpZmRlZiBWTVMKKwkgICAgc3ByaW50ZigoY2hhciAqKWxpbmVidWYs CisJCSAgICAiJS0yMnMlMTBzICAlcyAgJXNcbiIsIHAsIGNrZnN0b2EobGVuKSwgZHN0ciwgbmFt ZSk7CisjZWxzZQorCSAgICBpZiAocCkKKwkgICAgICBzcHJpbnRmKChjaGFyICopbGluZWJ1ZiwK KwkJICAgICAgIiUxMHMlMTBzICAlcyAgJXMlcyVzXG4iLAorCQkgICAgICBwLCBja2ZzdG9hKGxl biksIGRzdHIsIG5hbWUsCisJCSAgICAgICpsbmsgPyAiIC0+ICIgOiAiIiwKKwkJICAgICAgbG5r CisJCSAgICAgICk7CisJICAgIGVsc2UKKwkgICAgICBzcHJpbnRmKChjaGFyICopbGluZWJ1ZiwK KwkJICAgICAgIiUxMHMgICVzICAlcyVzJXNcbiIsCisJCSAgICAgIGNrZnN0b2EobGVuKSwgZHN0 ciwgbmFtZSwKKwkJICAgICAgKmxuayA/ICIgLT4gIiA6ICIiLAorCQkgICAgICBsbmsKKwkJICAg ICAgKTsKKyNlbmRpZiAvKiBWTVMgKi8KKwl9CisgICAgICAgIGZ1bmNueHQgPSAwOworICAgICAg ICBmdW5jbGVuID0gc3RybGVuKChjaGFyICopZnVuY2J1Zik7CisgICAgfSBlbHNlIGlmIChzZF9o ZGcgJiYgbnhwbmQgPT0gMCkgewkvKiBEb25lLCBzZW5kIHN1bW1hcnkgKi8KKwljaGFyICpibGFu a2xpbmUgPSAiIjsJCS8qIEF0IGJlZ2lubmluZyBvZiBzdW1tYXJ5ICovCisvKgorICBUaGUgaWRl YSBpcyB0byBwcmV2ZW50IChhKSB1bm5lY2Vzc2FyeSBtdWx0aXBsZSBibGFua2xpbmVzLCBhbmQg KGIpCisgIHByb21wdC1zdG9tcGluZy4gIFByZXZlbnRpbmcgKGIpIGlzIHByYWN0aWNhbGx5IGlt cG9zc2libGUsIGJlY2F1c2UgaXQKKyAgZGVwZW5kcyBvbiB0aGUgY2xpZW50IHNvIGZvciBub3cg YWx3YXlzIGluY2x1ZGUgdGhhdCBmaW5hbCBDUkxGLgorKi8KKwlpZiAoIW5kaXJzIHx8ICFuYnl0 ZXMgfHwgIW5maWxlcykKKwkgIGJsYW5rbGluZSA9IGVuZGxpbmU7CisjaWZkZWYgT1NLCisvKiBX b3JrYXJvdW5kIGJ1Z3MgaW4gT1MtOSBjb21waWxlci4uLiAqLworICAgICAgICBpZiAobmRpcnMg PT0gMSkKKyAgICAgICAgICAgZGlydGFnID0gImRpcmVjdG9yeSI7CisgICAgICAgIGlmIChuZmls ZXMgPT0gMSkKKyAgICAgICAgICAgZmlsZXRhZyA9ICJmaWxlIjsKKyAgICAgICAgaWYgKG5ieXRl cyA9PSAoQ0tfT0ZGX1QpMSkKKyAgICAgICAgICAgYnl0ZXRhZyA9ICJieXRlIjsKKyAgICAgICAg c3ByaW50ZigoY2hhciAqKWZ1bmNidWYsCisJCSIlc1N1bW1hcnk6ICVsZCAlcywgJWxkICVzLCAl cyAlcyVzIiwKKwkJYmxhbmtsaW5lLAorCQluZGlycywKKwkJZGlydGFnLAorCQluZmlsZXMsCisJ CWZpbGV0YWcsCisJCWNrZnN0b2EobmJ5dGVzKSwKKwkJYnl0ZXRhZywKKwkJZW5kbGluZSk7Cisj ZWxzZQorICAgICAgICBzcHJpbnRmKChjaGFyICopZnVuY2J1ZiwKKwkJIiVzU3VtbWFyeTogJWxk IGRpcmVjdG9yJXMsICVsZCBmaWxlJXMsICVzIGJ5dGUlcyVzIiwKKwkJYmxhbmtsaW5lLAorCQlu ZGlycywKKwkJKG5kaXJzID09IDEpID8gInkiIDogImllcyIsCisJCW5maWxlcywKKwkJKG5maWxl cyA9PSAxKSA/ICIiIDogInMiLAorCQlja2ZzdG9hKG5ieXRlcyksCisJCShuYnl0ZXMgPT0gKENL X09GRl9UKTEpID8gIiIgOiAicyIsCisJCWVuZGxpbmUKKwkJKTsKKyNlbmRpZiAvKiBPU0sgKi8K KyAgICAgICAgbnhwbmQtLTsKKyAgICAgICAgZnVuY254dCA9IDA7CisgICAgICAgIGZ1bmNsZW4g PSBzdHJsZW4oKGNoYXIgKilmdW5jYnVmKTsKKyAgICB9IGVsc2UgeworICAgICAgICBmdW5jYnVm WzBdID0gJ1wwJzsKKyAgICAgICAgZnVuY254dCA9IDA7CisgICAgICAgIGZ1bmNsZW4gPSAwOwor ICAgIH0KKyAgICBkZWJ1ZyhGMTAxLCJueHRkaXIgZnVuY2xlbiIsIiIsZnVuY2xlbik7CisKKyAg ICBpZiAoZnVuY254dCA8IGZ1bmNsZW4pIHsJCS8qIElmIHdlIGhhdmUgZGF0YSB0byBzZW5kLi4u ICovCisJYyA9IGZ1bmNidWZbZnVuY254dCsrXTsKKwlkZWJ1ZyhGMDAwLCJueHRkaXIgcmV0dXJu IDIiLCIiLCh1bnNpZ25lZCkoYyAmIDB4ZmYpKTsKKwlyZXR1cm4oKHVuc2lnbmVkKShjICYgMHhm ZikpOworICAgIH0gZWxzZQorICAgICAgcmV0dXJuKC0xKTsJCQkvKiBOb3RoaW5nIGxlZnQsIGRv bmUuICovCit9CisKKy8qICBTIE4gRCBEIEkgUiAtLSBzZW5kIGRpcmVjdG9yeSBsaXN0aW5nICAq LworCitpbnQKK3NuZGRpcihzcGVjKSBjaGFyICogc3BlYzsgeworI2lmbmRlZiBOT1NFUlZFUgor ICAgIGNoYXIgKiBwID0gTlVMTCwgbmFtZVtDS01BWFBBVEgrMV07CisgICAgaW50IHQgPSAwLCBy YyA9IDA7CisgICAgY2hhciBmbmJ1ZltDS01BWFBBVEgrMV07CisKKyAgICBkZWJ1ZyhGMTExLCJz bmRkaXIgbWF0Y2hkb3QiLHNwZWMsbWF0Y2hkb3QpOworCisjaWZuZGVmIE5PSUNQCisgICAgZGVi dWcoRjExMSwic25kZGlyIGRpcl9kb3RzIixzcGVjLGRpcl9kb3RzKTsKKyAgICBzZF9oZGcgPSBk aXJfaGVhZCA+IDA7CQkvKiBJbXBvcnQgbGlzdGluZyBwYXJhbWV0ZXJzIGlmIGFueSAqLworICAg IHNkX2JrcCA9IGRpcl9iYWNrID4gMDsKKyAgICBpZiAoZGlyX2RvdHMgPiAtMSkKKyAgICAgIHNk X2RvdCA9IGRpcl9kb3RzOworICAgIGVsc2UKKyAgICAgIHNkX2RvdCA9IG1hdGNoZG90OworI2Vs c2UKKyAgICBzZF9oZGcgPSAxOwkJCQkvKiBPciB1c2UgaGFyZHdpcmVkIGRlZmF1bHRzICovCisg ICAgc2RfYmtwID0gMTsKKyAgICBzZF9kb3QgPSBtYXRjaGRvdDsKKyNlbmRpZiAvKiBOT0lDUCAq LworCisgICAgaWYgKCFzcGVjKSBzcGVjID0gIiI7CisgICAgZGVidWcoRjExMSwic25kZGlyIHNk X2RvdCIsc3BlYyxzZF9kb3QpOworICAgIGlmICgqc3BlYykgeworI2lmZGVmIENPTU1FTlQKKwl6 Zm5xZnAoc3BlYyxDS01BWFBBVEgsbmFtZSk7CisJZGVidWcoRjExMCwic25kZGlyIHpmbnFmcCIs bmFtZSwwKTsKKyNlbHNlCisJY2tzdHJuY3B5KG5hbWUsc3BlYyxDS01BWFBBVEgrMSk7CisJZGVi dWcoRjExMCwic25kZGlyIG5hbWUiLG5hbWUsMCk7CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAg IH0gZWxzZSB7CisjaWZkZWYgT1MyCisJc3RyY3B5KG5hbWUsICIqIik7CisjZWxzZQorI2lmZGVm IFVOSVhPUk9TSworCXN0cmNweShuYW1lLCAiLi8qIik7CisjZWxzZQorI2lmZGVmIFZNUworCXN0 cmNweShuYW1lLCAiKi4qIik7CisjZWxzZQorI2lmZGVmIGRhdGFnZW5lcmFsCisJc3RyY3B5KG5h bWUsICIrIik7CisjZWxzZQorCWRlYnVnKEYxMDEsInNuZGRpciBxdWl0IChubyBmaWxlc3BlYyki LCIiLDApOworCXJldHVybigwKTsKKyNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLworI2VuZGlmIC8q IFZNUyAqLworI2VuZGlmIC8qIFVOSVggKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyAgICB9CisgICAg ZGVidWcoRjExMCwic25kZGlyIG5hbWUgMSIsbmFtZSwwKTsKKyAgICBuZGlycyA9IDBMOworICAg IG5maWxlcyA9IDBMOworICAgIG5ieXRlcyA9IChDS19PRkZfVCkwOworCisgICAgaWYgKHpmbnFm cChuYW1lLENLTUFYUEFUSCxmbmJ1ZikpCisKKyAgICBkZWJ1ZyhGMTEwLCJzbmRkaXIgbmFtZSAy IixuYW1lLDApOworICAgIHAgPSBuYW1lICsgc3RybGVuKG5hbWUpOwkJLyogTW92ZSBpdCB0byBl bmQgb2YgbGlzdCAqLworCisgICAgLyogc3ByaW50ZiBzYWZlIGJlY2F1c2UgZnVuY2J1ZiBzaXpl ID49IG1heCBwYXRoIGxlbiArIDY0ICovCisKKyAgICBpZiAoc2RfaGRnKSB7CisJc3ByaW50Zigo Y2hhciAqKWZ1bmNidWYsIkxpc3RpbmcgZmlsZXM6ICVzJXMlcyIsZm5idWYsZW5kbGluZSxlbmRs aW5lKTsKKwlmdW5jbnh0ID0gMDsKKwlmdW5jbGVuID0gc3RybGVuKChjaGFyICopZnVuY2J1Zik7 CisgICAgfQorICAgIGRpcmFjdGl2ZSA9IDE7CisKKyNpZmRlZiBPUzIKKyAgICBpZiAoemNoa2ko bmFtZSkgPT0gLTIpIHsJCS8qIEZvdW5kIGEgZGlyZWN0b3J5ICovCisgICAgICAgIHAtLTsKKyAg ICAgICAgaWYgKCpwID09ICdcXCcgfHwgKnAgPT0gJy8nKQorICAgICAgICAgIGNrc3RybmNhdChu YW1lLCAiKiIsIENLTUFYUEFUSCk7CisgICAgICAgIGVsc2UgaWYgKCpwID09ICc6JykKKyAgICAg ICAgICBja3N0cm5jYXQobmFtZSwgIi4iLCBDS01BWFBBVEgpOworICAgICAgICBlbHNlCisgICAg ICAgICAgY2tzdHJuY2F0KG5hbWUsICJcXCoiLCBDS01BWFBBVEgpOworCWRlYnVnKEYxMTAsInNu ZGRpciBkaXJlY3RvcnkiLG5hbWUsMCk7CisgICAgfQorI2Vsc2UKKyAgICBpZiAoIWlzd2lsZChu YW1lKSAmJiBpc2RpcihuYW1lKSkgeworCWNoYXIgKiBzID0gbmFtZTsKKwlwLS07CisjaWZkZWYg VU5JWE9ST1NLCisJaWYgKCpwID09ICcvJykJCQkvKiBTbyBhcHBlbmQgd2lsZGNhcmQgdG8gaXQg Ki8KKwkgIGNrc3RybmNhdChzLCAiKiIsIENLTUFYUEFUSCk7CisJZWxzZQorCSAgY2tzdHJuY2F0 KHMsICIvKiIsIENLTUFYUEFUSCk7CisjZWxzZQorI2lmZGVmIFZNUworCWlmICgqcCA9PSAnXScg fHwgKnAgPT0gJz4nIHx8ICpwID09ICc6JykKKwkgIGNrc3RybmNhdChzLCAiKi4qIiwgQ0tNQVhQ QVRIKTsKKyNlbHNlCisjaWZkZWYgZGF0YWdlbmVyYWwKKwlpZiAoKnAgPT0gJzonKQorCSAgY2tz dHJuY2F0KHMsICIrIiwgQ0tNQVhQQVRIKTsKKwllbHNlCisJICBja3N0cm5jYXQocywgIjorIiwg Q0tNQVhQQVRIKTsKKyNlbHNlCisjaWZkZWYgVk9TCisJaWYgKCpwID09ICc+JykKKwkgIGNrc3Ry bmNhdChzLCAiKiIsIENLTUFYUEFUSCk7CisJZWxzZQorCSAgY2tzdHJuY2F0KHMsICI+KiIsIENL TUFYUEFUSCk7CisjZW5kaWYgLyogVk9TICovCisjZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KKyNl bmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBVTklYT1JPU0sgKi8KKwlkZWJ1ZyhGMTEwLCJzbmRk aXIgZGlyZWN0b3J5IixuYW1lLDApOworICAgIH0KKyNlbmRpZiAvKiBPUzIgKi8KKworICAgIG56 eG9wdHMgPSAwOworI2lmZGVmIFVOSVgKKyAgICB7CisJZXh0ZXJuIGNoYXIgKiogbXRjaHM7CisJ ZGVidWcoRjExMSwic25kZGlyIHNkX2RvdCIsc3BlYyxzZF9kb3QpOworCWlmIChzZF9kb3QgPiAw KQorCSAgbnp4b3B0cyB8PSBaWF9NQVRDSERPVDsKKwlpZiAocmVjdXJzaXZlKQorCSAgbnp4b3B0 cyB8PSBaWF9SRUNVUlNFOworCWRlYnVnKEYxMTEsInNuZGRpciBuenhvcHRzIixzcGVjLG56eG9w dHMpOworCW54cG5kID0gbnp4cGFuZChuYW1lLG56eG9wdHMpOwkvKiBHZXQgdGhlIGFycmF5IG9m IG5hbWVzICovCisJc2hfc29ydChtdGNocyxOVUxMLG54cG5kLDAsMCwxKTsgLyogU29ydCB0aGUg YXJyYXkgKi8KKyAgICB9CisjZWxzZQorICAgIGlmIChyZWN1cnNpdmUpIG56eG9wdHMgfD0gWlhf UkVDVVJTRTsKKyAgICBueHBuZCA9IG56eHBhbmQobmFtZSxuenhvcHRzKTsKKyNlbmRpZiAvKiBV TklYICovCisKKyAgICBkZWJ1ZyhGMTAxLCJzbmRkaXIgbnp4cGFuZCBueHBuZCIsIiIsbnhwbmQp OworICAgIGlmIChueHBuZCA8IDEpCisgICAgICByZXR1cm4oLTEpOworICAgIG5maWxzID0gMDsJ CQkJLyogTm8gZmlsZXMsIG5vIGxpc3RzLiAqLworICAgIHhmbGcgPSAxOwkJCQkvKiBGbGFnIHdl IG11c3Qgc2VuZCBYIHBhY2tldC4gKi8KKyAgICBpZiAoKGludClzdHJsZW4obmFtZSkgPCBDTURT VFJMIC0gMTEpIC8qIERhdGEgZm9yIFggcGFja2V0LiAqLworICAgICAgc3ByaW50ZihjbWRzdHIs IkRJUkVDVE9SWSAlcyIsbmFtZSk7IC8qIHNhZmUgKi8KKyAgICBlbHNlCisgICAgICBja3N0cm5j cHkoY21kc3RyLCJESVJFQ1RPUlkiLENNRFNUUkwpOworICAgIGZpcnN0ID0gMTsJCQkJLyogSW5p dCBnZXRjaHggbG9va2FoZWFkICovCisgICAgZnVuY3N0ciA9IDE7CQkJLyogSnVzdCBzZXQgdGhl IGZsYWcuICovCisgICAgZnVuY3B0ciA9IG54dGRpcjsJCQkvKiBBbmQgdGhlIHBvaW50ZXIuICov CisgICAgYmluYXJ5ID0gWFlGVF9UOwkJCS8qIFRleHQgbW9kZSBmb3IgdGhpcyAqLworICAgIHJj ID0gc2luaXQoKTsJCQkvKiAyNiBBdWcgMjAwNSAqLworICAgIGRlYnVnKEYxMTEsInNuZGRpciIs InNpbml0KCkiLHJjKTsKKyAgICByZXR1cm4ocmMpOworI2Vsc2UKKyAgICByZXR1cm4oMCk7Cisj ZW5kaWYgLyogTk9TRVJWRVIgKi8KK30KKworLyogIE4gWCBUIEQgRSBMIC0tIHByb3ZpZGUgZGF0 YSBmb3IgZGVsZXRlICAgKi8KKworLyogIFJldHVybnMgdGhlIG5leHQgYXZhaWxhYmxlIGNoYXJh Y3RlciBvciAtMSBpZiBubyBtb3JlIGRhdGEgICovCisKK3N0YXRpYyBpbnQKK254dGRlbCgKKyNp ZmRlZiBDS19BTlNJQworICAgICAgIHZvaWQKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworICAgICAg ICkgeworICAgIGNoYXIgbmFtZVsyNTddLCAqcCA9IE5VTEw7CisgICAgaW50IGxlbiA9IDA7CisK KyAgICBpZiAoZnVuY254dCA8IGZ1bmNsZW4pCisgICAgICByZXR1cm4gKCh1bnNpZ25lZClmdW5j YnVmW2Z1bmNueHQrK10pOworCisgICAgaWYgKG54cG5kID4gMCkgeworICAgICAgICBueHBuZC0t OworCXpuZXh0KG5hbWUpOworICAgICAgICBpZiAoIW5hbWVbMF0pIHsKKyAgICAgICAgICAgIG54 cG5kID0gMDsKKyAgICAgICAgICAgIHJldHVybihueHRkZWwoKSk7CisgICAgICAgIH0KKyAgICAg ICAgbGVuID0gemNoa2kobmFtZSk7CisKKyAgICAgICAgLyogRmluZCBqdXN0IHRoZSBuYW1lIG9m IHRoZSBmaWxlICovCisKKyAgICAgICAgZm9yIChwID0gbmFtZSArIHN0cmxlbihuYW1lKTsgcCAh PSBuYW1lICYmICpwICE9ICcvJyA7IHAtLSkgOworICAgICAgICBpZiAoKnAgPT0gJy8nKSBwKys7 CisKKwkvKiBzcHJpbnRmJ3Mgc2FmZSBiZWNhdXNlIHNpemUgb2YgZnVuY2J1ZiA+PSA2NCArIG1h eHBhdGhsZW4gKi8KKworICAgICAgICBpZiAobGVuID4gLTFMKSB7CisJICAgIGlmICh6ZGVsZXQo bmFtZSkpIHsKKwkJc3ByaW50ZigoY2hhciAqKWZ1bmNidWYsIiAlMTBzOiAlcyVzIiwic2tpcHBp bmciLHAsZW5kbGluZSk7CisJICAgIH0gZWxzZSB7CisJCW5maWxlcysrOworCQluYnl0ZXMgKz0g bGVuOworCQlzcHJpbnRmKChjaGFyICopZnVuY2J1ZiwiICUxMHM6ICVzJXMiLCJkZWxldGVkIixw LGVuZGxpbmUpOworCSAgICB9CisgICAgICAgIH0gZWxzZQorCSAgc3ByaW50ZigoY2hhciAqKWZ1 bmNidWYsIiBkaXJlY3Rvcnk6ICVzJXMiLCBwLCBlbmRsaW5lKTsKKyAgICAgICAgZnVuY254dCA9 IDA7CisgICAgICAgIGZ1bmNsZW4gPSBzdHJsZW4oKGNoYXIgKilmdW5jYnVmKTsKKyAgICB9IGVs c2UKKworICAgIC8qIElmIGRvbmUgcHJvY2Vzc2luZyB0aGUgZXhwYW5kZWQgZW50cmllcyBzZW5k IGEgc3VtbWFyeSBzdGF0ZW1lbnQgKi8KKworICAgICAgaWYgKG54cG5kID09IDApIHsKKwkgIHNw cmludGYoKGNoYXIgKilmdW5jYnVmLAorCQkgICIlcyVsZCBmaWxlJXMgZGVsZXRlZCwgJXMgYnl0 ZSVzIGZyZWVkJXMiLAorCQkgIGVuZGxpbmUsCisJCSAgbmZpbGVzLAorCQkgIChuZmlsZXMgPT0g MSkgPyAiIiA6ICJzIiwKKwkJICBja2ZzdG9hKG5ieXRlcyksCisJCSAgKG5ieXRlcyA9PSAoQ0tf T0ZGX1QpMSkgPyAiIiA6ICJzIiwKKwkJICBlbmRsaW5lCisJCSAgKTsKKwkgIG54cG5kLS07CisJ ICBmdW5jbnh0ID0gMDsKKwkgIGZ1bmNsZW4gPSBzdHJsZW4oKGNoYXIgKilmdW5jYnVmKTsKKyAg ICAgIH0gZWxzZSB7CisJICBmdW5jYnVmWzBdID0gJ1wwJzsKKwkgIGZ1bmNueHQgPSAwOworCSAg ZnVuY2xlbiA9IDA7CisgICAgICB9CisKKyAgICAvKiBJZiB3ZSBoYXZlIGRhdGEgdG8gc2VuZCAq LworCisgICAgaWYgKGZ1bmNueHQgPCBmdW5jbGVuKQorICAgICAgcmV0dXJuICgodW5zaWduZWQp ZnVuY2J1ZltmdW5jbnh0KytdKTsgLyogUmV0dXJuIGEgY2hhcmFjdGVyICovCisgICAgZWxzZQor ICAgICAgcmV0dXJuKC0xKTsJCQkvKiBObyBtb3JlIGlucHV0ICovCit9CisKKy8qICBTIE4gRCBE IEUgTCAgLS0gIFNlbmQgZGVsZXRlIG1lc3NhZ2UgICovCisKK2ludAorc25kZGVsKHNwZWMpIGNo YXIgKiBzcGVjOyB7CisjaWZuZGVmIE5PU0VSVkVSCisgICAgY2hhciBuYW1lW0NLTUFYUEFUSCsx XTsKKyNpZmRlZiBPUzIKKyAgICBjaGFyICogcCA9IE5VTEw7CisjZW5kaWYgLyogI2lmZGVmIE9T MiAqLworCisgICAgaWYgKCEqc3BlYykKKyAgICAgIHJldHVybigwKTsKKworICAgIGNrc3RybmNw eShuYW1lLCBzcGVjLCBDS01BWFBBVEgrMSk7CisKKyNpZmRlZiBPUzIKKyAgICAvKiBjaGFuZ2Ug LyB0byBcLiAqLworICAgIHAgPSBuYW1lOworICAgIHdoaWxlICgqcCkgewkJCS8qIENoYW5nZSB0 aGVtIGJhY2sgdG8gXCAqLworICAgICAgICBpZiAoKnAgPT0gJy8nKSAqcCA9ICdcXCc7CisgICAg ICAgIHArKzsKKyAgICB9CisjZW5kaWYgLyogT1MyICovCisKKyAgICBuZmlsZXMgPSAwTDsKKyAg ICBuYnl0ZXMgPSAoQ0tfT0ZGX1QpMDsKKyAgICBzcHJpbnRmKChjaGFyICopZnVuY2J1ZiwiRGVs ZXRpbmcgXCIlc1wiJXMiLG5hbWUsZW5kbGluZSk7CisgICAgZnVuY254dCA9IDA7CisgICAgZnVu Y2xlbiA9IHN0cmxlbigoY2hhciAqKWZ1bmNidWYpOworCisgICAgbnp4b3B0cyA9IFpYX0ZJTE9O TFk7CQkvKiBGaWxlcyBvbmx5ICovCisjaWZkZWYgVU5JWE9ST1NLCisgICAgaWYgKG1hdGNoZG90 KSBuenhvcHRzIHw9IFpYX01BVENIRE9UOworI2VuZGlmIC8qIFVOSVhPUk9TSyAqLworI2lmZGVm IENPTU1FTlQKKyAgICAvKiBSZWN1cnNpdmUgZGVsZXRpbmcgbm90IHN1cHBvcnRlZCB5ZXQgKi8K KyAgICBpZiAocmVjdXJzaXZlKSBuenhvcHRzIHw9IFpYX1JFQ1VSU0U7CisjZW5kaWYgLyogQ09N TUVOVCAqLworICAgIG54cG5kID0gbnp4cGFuZChuYW1lLG56eG9wdHMpOworICAgIGlmIChueHBu ZCA8IDEpCisgICAgICByZXR1cm4oLTEpOworICAgIG5maWxzID0gMDsJCQkJLyogTm8gZmlsZXMs IG5vIGxpc3RzLiAqLworICAgIHhmbGcgPSAxOwkJCQkvKiBGbGFnIHdlIG11c3Qgc2VuZCBYIHBh Y2tldC4gKi8KKyAgICBja3N0cm5jcHkoY21kc3RyLCJSRU1PVEUgREVMRVRFIixDTURTVFJMKTsg LyogRGF0YSBmb3IgWCBwYWNrZXQuICovCisgICAgZmlyc3QgPSAxOwkJCQkvKiBJbml0IGdldGNo eCBsb29rYWhlYWQgKi8KKyAgICBmdW5jc3RyID0gMTsJCQkvKiBKdXN0IHNldCB0aGUgZmxhZy4g Ki8KKyAgICBmdW5jcHRyID0gbnh0ZGVsOwkJCS8qIEFuZCB0aGUgcG9pbnRlci4gKi8KKyAgICBi aW5hcnkgPSBYWUZUX1Q7CQkJLyogVXNlIHRleHQgbW9kZSBmb3IgdGhpcywgKi8KKyAgICByZXR1 cm4oc2luaXQoKSk7CisjZWxzZQorICAgIHJldHVybigwKTsKKyNlbmRpZiAvKiBOT1NFUlZFUiAq LworfQorCisjaWZkZWYgT1MyCisvKiAgUyBOIEQgUyBQIEEgQyBFIC0tIHNlbmQgZGlzayBzcGFj ZSBtZXNzYWdlICAqLworaW50CitzbmRzcGFjZShkcml2ZSkgaW50IGRyaXZlOyB7CisjaWZuZGVm IE5PU0VSVkVSCisgICAgc3RhdGljIGNoYXIgc3BjdGV4dFs2NF07CisgICAgdW5zaWduZWQgbG9u ZyBzcGFjZTsKKworICAgIGlmIChkcml2ZSkgeworCXNwYWNlID0gemRza3NwYWNlKGRyaXZlIC0g J0EnICsgMSk7CisJaWYgKHNwYWNlID4gMCAmJiBzcGFjZSA8IDEwMjQpCisJICBzcHJpbnRmKHNw Y3RleHQsCisJCSAgIiBEcml2ZSAlYzogdW5rbm93biVzIiwKKwkJICBkcml2ZSwKKwkJICBlbmRs aW5lCisJCSAgKTsKKwllbHNlCisJICBzcHJpbnRmKHNwY3RleHQsCisJCSAgIiBEcml2ZSAlYzog JWxkSyBmcmVlJXMiLAorCQkgIGRyaXZlLAorCQkgIHNwYWNlIC8gMTAyNEwsCisJCSAgZW5kbGlu ZQorCQkgICk7CisgICAgfSBlbHNlIHsKKwlzcGFjZSA9IHpkc2tzcGFjZSgwKTsKKwlpZiAoc3Bh Y2UgPiAwICYmIHNwYWNlIDwgMTAyNCkKKwkgIHNwcmludGYoc3BjdGV4dCwgIiBGcmVlIHNwYWNl OiB1bmtub3duJXMiLCBlbmRsaW5lKTsKKwllbHNlCisJICBzcHJpbnRmKHNwY3RleHQsICIgRnJl ZSBzcGFjZTogJWxkSyVzIiwgc3BhY2UgLyAxMDI0TCwgZW5kbGluZSk7CisgICAgfQorICAgIG5m aWxzID0gMDsJCQkJLyogTm8gZmlsZXMsIG5vIGxpc3RzLiAqLworICAgIHhmbGcgPSAxOwkJCQkv KiBGbGFnIHdlIG11c3Qgc2VuZCBYIHBhY2tldC4gKi8KKyAgICBja3N0cm5jcHkoY21kc3RyLCJm cmVlIHNwYWNlIixDTURTVFJMKTsgLyogRGF0YSBmb3IgWCBwYWNrZXQuICovCisgICAgZmlyc3Qg PSAxOwkJCQkvKiBJbml0IGdldGNoeCBsb29rYWhlYWQgKi8KKyAgICBtZW1zdHIgPSAxOwkJCQkv KiBKdXN0IHNldCB0aGUgZmxhZy4gKi8KKyAgICBtZW1wdHIgPSBzcGN0ZXh0OwkJCS8qIEFuZCB0 aGUgcG9pbnRlci4gKi8KKyAgICBiaW5hcnkgPSBYWUZUX1Q7CQkJLyogVGV4dCBtb2RlIGZvciB0 aGlzLiAqLworICAgIHJldHVybihzaW5pdCgpKTsKKyNlbHNlCisgICAgcmV0dXJuKDApOworI2Vu ZGlmIC8qIE5PU0VSVkVSICovCit9CisKKy8qICBTIE4gRCBXIEggTyAtLSBzZW5kIHdobyBtZXNz YWdlICAqLworaW50CitzbmR3aG8od2hvKSBjaGFyICogd2hvOyB7CisjaWZuZGVmIE5PU0VSVkVS CisgICAgbmZpbHMgPSAwOwkJCQkvKiBObyBmaWxlcywgbm8gbGlzdHMuICovCisgICAgeGZsZyA9 IDE7CQkJCS8qIEZsYWcgd2UgbXVzdCBzZW5kIFggcGFja2V0LiAqLworICAgIGNrc3RybmNweShj bWRzdHIsIndobyIsQ01EU1RSTCk7CS8qIERhdGEgZm9yIFggcGFja2V0LiAqLworICAgIGZpcnN0 ID0gMTsJCQkJLyogSW5pdCBnZXRjaHggbG9va2FoZWFkICovCisgICAgbWVtc3RyID0gMTsJCQkJ LyogSnVzdCBzZXQgdGhlIGZsYWcuICovCisjaWZkZWYgTlQKKyAgICBtZW1wdHIgPSAiXDE1XDEy Szk1IFNFUlZFUlwxNVwxMiI7CS8qIEFuZCB0aGUgcG9pbnRlci4gKi8KKyNlbHNlCisgICAgbWVt cHRyID0gIlwxNVwxMksvMiBTRVJWRVJcMTVcMTIiOworI2VuZGlmIC8qIE5UICovCisgICAgYmlu YXJ5ID0gWFlGVF9UOwkJCS8qIFVzZSB0ZXh0IG1vZGUgKi8KKyAgICByZXR1cm4oc2luaXQoKSk7 CisjZWxzZQorICAgIHJldHVybigwKTsKKyNlbmRpZiAvKiBOT1NFUlZFUiAqLworfQorI2VuZGlm IC8qIE9TMiAqLworCisvKiAgQyBXIEQgIC0tICBDaGFuZ2Ugc2VydmVyJ3Mgd29ya2luZyBkaXJl Y3RvcnkgICovCisKKy8qCisgU3RyaW5nIHBhc3NlZCBoYXMgZmlyc3QgYnl0ZSBhcyBsZW5ndGgg b2YgZGlyZWN0b3J5IG5hbWUsIHJlc3Qgb2Ygc3RyaW5nCisgaXMgbmFtZS4gIFJldHVybnM6Cisg IDAgb24gZmFpbHVyZS4KKyAgMSBvbiBzdWNjZXNzIGFmdGVyIHNlbmRpbmcgc2hvcnQtZm9ybSBy ZXNwb25zZSAoQUNLIHdpdGggbmFtZSkuCisgIDIgb24gc3VjY2VzcyBpZiBhIENEIE1lc3NhZ2Ug ZmlsZSBpcyB0byBiZSBzZW50LgorKi8KK2ludAorY3dkKHZkaXIpIGNoYXIgKnZkaXI7IHsKKyAg ICBjaGFyICpjZGQsICpkaXJwOworCisgICAgdmRpclt4dW5jaGFyKCp2ZGlyKSArIDFdID0gJ1ww JzsJLyogVGVybWluYXRlIHN0cmluZyB3aXRoIGEgbnVsbCAqLworICAgIGRpcnAgPSB2ZGlyKzE7 CisgICAgdGxvZyhGMTEwLCJEaXJlY3RvcnkgcmVxdWVzdGVkOiAiLGRpcnAsMEwpOworICAgIGlm ICh6Y2hkaXIoZGlycCkpIHsJCQkvKiBUcnkgdG8gY2hhbmdlICovCisJY2RkID0gemd0ZGlyKCk7 CQkJLyogR2V0IG5ldyB3b3JraW5nIGRpcmVjdG9yeS4gKi8KKwlkZWJ1ZyhGMTEwLCJjd2QiLGNk ZCwwKTsKKwlpZiAoc3J2Y2Rtc2cpIHsJCQkvKiBTZW5kIG9yaWVudGF0aW9uIGZpbGU/ICovCisJ ICAgIGludCBpOworCSAgICBmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisJCWlmICh6Y2hraShj ZG1zZ2ZpbGVbaV0pID4gLTEpIHsKKwkJICAgIHh4c2NyZWVuKFNDUl9DRCwwLDBsLGNkZCk7CisJ CSAgICB0bG9nKEYxMTAsIkNoYW5nZWQgZGlyZWN0b3J5IHRvIixjZGQsMEwpOworCQkgICAgcmV0 dXJuKDIpOworCQl9CisJICAgIH0KKwl9CisJZW5jc3RyKChDSEFSICopY2RkKTsJCS8qIFNlbmQg c2hvcnQtZm9ybSByZXBseSAqLworCWFjazEoZGF0YSk7CQkJLyogY29udGFpbmluZyBkaXJlY3Rv cnkgbmFtZS4gKi8KKwl4eHNjcmVlbihTQ1JfQ0QsMCwwbCxjZGQpOworCXRsb2coRjExMCwiQ2hh bmdlZCBkaXJlY3RvcnkgdG8iLGNkZCwwTCk7CisJcmV0dXJuKDEpOworICAgIH0gZWxzZSB7CisJ ZGVidWcoRjExMCwiY3dkIGZhaWxlZCIsZGlycCwwKTsKKwl0bG9nKEYxMTAsIkZhaWxlZCB0byBj aGFuZ2UgZGlyZWN0b3J5IHRvIixkaXJwLDBMKTsKKwlyZXR1cm4oMCk7CisgICAgfQorfQorCisK Ky8qICBTIFkgUyBDIE0gRCAgLS0gIERvIGEgc3lzdGVtIGNvbW1hbmQgICovCisKKy8qICBDb21t YW5kIHN0cmluZyBpcyBmb3JtZWQgYnkgY29uY2F0ZW5hdGluZyB0aGUgdHdvIGFyZ3VtZW50cy4g ICovCisKK2ludAorc3lzY21kKHByZWZpeCxzdWZmaXgpIGNoYXIgKnByZWZpeCwgKnN1ZmZpeDsg eworICAgIGV4dGVybiBpbnQgaV9pc29wZW47CisjaWZuZGVmIE5PUFVTSAorICAgIGNoYXIgKmNw OworCisgICAgaV9pc29wZW4gPSAwOworICAgIGlmICghcHJlZml4KQorICAgICAgcmV0dXJuKDAp OworICAgIGlmICghKnByZWZpeCkKKyAgICAgIHJldHVybigwKTsKKyAgICBmb3IgKGNwID0gY21k c3RyOyAqcHJlZml4ICE9ICdcMCc7ICgqY3ArKyA9ICpwcmVmaXgrKykpOworICAgIHdoaWxlICgo KmNwKysgPSAqc3VmZml4KyspKQorI2lmZGVmIE9TMgorICAgICAgICAvKiBUaGlzIHRha2VzIGF3 YXkgbW9yZSB0aGFuIHdlIGdhaW4gaW4gY29udmVuaWVuY2UKKyAgICAgICAgaWYgKCooY3AtMSkg PT0gJy8nKSAqKGNwLTEpID0gJ1xcJyAqLworI2VuZGlmIC8qIE9TMiAqLworICAgICAgOwkJCQkJ LyogQ29weSBzdWZmaXggKi8KKworICAgIGRlYnVnKEYxMTAsInN5c2NtZCIsY21kc3RyLDApOwor CisgICAgaWYgKHp4Y21kKFpJRklMRSxjbWRzdHIpID4gMCkgeworICAgIAlkZWJ1ZyhGMTEwLCJz eXNjbWQgenhjbWQgb2siLGNtZHN0ciwwKTsKKwluZmlscyA9IHNuZHNyYyA9IDA7CQkvKiBGbGFn IHRoYXQgaW5wdXQgaXMgZnJvbSBzdGRpbiAqLworICAgIAl4ZmxnID0gaGNmbGcgPSAxOwkJLyog QW5kIHNwZWNpYWwgZmxhZ3MgZm9yIHBpcGUgKi8KKwliaW5hcnkgPSBYWUZUX1Q7CQkvKiBHbyB0 byB0ZXh0IG1vZGUgKi8KKwlpX2lzb3BlbiA9IDE7CisgICAgCXJldHVybiAoc2luaXQoKSk7CQkv KiBTZW5kIFMgcGFja2V0ICovCisgICAgfSBlbHNlIHsKKyAgICAJZGVidWcoRjEwMCwic3lzY21k IHp4Y21kIGZhaWxlZCIsY21kc3RyLDApOworCWlfaXNvcGVuID0gMDsKKyAgICAJcmV0dXJuKDAp OworICAgIH0KKyNlbHNlCisgICAgZGVidWcoRjEwMCwic3lzY21kIHp4Y21kIE5PUFVTSCIsY21k c3RyLDApOworICAgIGlfaXNvcGVuID0gMDsKKyAgICByZXR1cm4oMCk7CisjZW5kaWYgLyogTk9Q VVNIICovCit9CisKKy8qICBSIEUgTSBTIEUgVCAgLS0gIFJlbW90ZSBTZXQgICovCisvKiAgQ2Fs bGVkIGJ5IHNlcnZlciB0byBzZXQgdmFyaWFibGVzIGFzIGNvbW1hbmRlZCBpbiBSRU1PVEUgU0VU IHBhY2tldHMuICAqLworLyogIFJldHVybnMgMSBvbiBzdWNjZXNzLCAwIG9uIGZhaWx1cmUuICAq LworCitpbnQKK3JlbXNldChzKSBjaGFyICpzOyB7CisgICAgZXh0ZXJuIGludCBjX3NhdmUsIGVu X2RlbDsKKyAgICBpbnQgbGVuLCBpLCB4LCB5OworICAgIGNoYXIgKnA7CisKKyAgICBsZW4gPSB4 dW5jaGFyKCpzKyspOwkJLyogTGVuZ3RoIG9mIGZpcnN0IGZpZWxkICovCisgICAgcCA9IHMgKyBs ZW47CQkJLyogUG9pbnRlciB0byBzZWNvbmQgbGVuZ3RoIGZpZWxkICovCisgICAgKnArKyA9ICdc MCc7CQkJLyogWmVybyBvdXQgc2Vjb25kIGxlbmd0aCBmaWVsZCAqLworICAgIHggPSBhdG9pKHMp OwkJCS8qIFZhbHVlIG9mIGZpcnN0IGZpZWxkICovCisgICAgZGVidWcoRjExMSwicmVtc2V0Iixz LHgpOworICAgIGRlYnVnKEYxMTAsInJlbXNldCIscCwwKTsKKyAgICBzd2l0Y2ggKHgpIHsJCQkv KiBEbyB0aGUgcmlnaHQgdGhpbmcgKi8KKyAgICAgIGNhc2UgMTMyOgkJCQkvKiBBdHRyaWJ1dGVz IChhbGwsIGluKSAqLworCWF0Y2FwciA9IGF0b2kocCk7CisJcmV0dXJuKDEpOworICAgICAgY2Fz ZSAxMzM6CQkJCS8qIEZpbGUgbGVuZ3RoIGF0dHJpYnV0ZXMgKi8KKyAgICAgIGNhc2UgMjMzOgkJ CQkvKiBJTi9PVVQgY29tYmluZWQgKi8KKyAgICAgIGNhc2UgMTQ4OgkJCQkvKiBCb3RoIGtpbmRz IG9mIGxlbmd0aHMgKi8KKyAgICAgIGNhc2UgMjQ4OgorCWF0bGVuaSA9IGF0bGVubyA9IGF0b2ko cCk7CisJcmV0dXJuKDEpOworICAgICAgY2FzZSAxMzQ6CQkJCS8qIEZpbGUgVHlwZSAodGV4dC9i aW5hcnkpICovCisgICAgICBjYXNlIDIzNDoKKwlhdHR5cGkgPSBhdHR5cG8gPSBhdG9pKHApOwor CXJldHVybigxKTsKKyAgICAgIGNhc2UgMTM1OgkJCQkvKiBGaWxlIGNyZWF0aW9uIGRhdGUgKi8K KyAgICAgIGNhc2UgMjM1OgorCWF0ZGF0aSA9IGF0ZGF0byA9IGF0b2kocCk7CisJcmV0dXJuKDEp OworICAgICAgY2FzZSAxMzk6CQkJCS8qIEZpbGUgQmxvY2tzaXplICovCisgICAgICBjYXNlIDIz OToKKwlhdGJsa2kgPSBhdGJsa28gPSBhdG9pKHApOworCXJldHVybigxKTsKKyAgICAgIGNhc2Ug MTQxOgkJCQkvKiBFbmNvZGluZyAvIENoYXJhY3RlciBTZXQgKi8KKyAgICAgIGNhc2UgMjQxOgor CWF0ZW5jaSA9IGF0ZW5jbyA9IGF0b2kocCk7CisJcmV0dXJuKDEpOworICAgICAgY2FzZSAxNDI6 CQkJCS8qIERpc3Bvc2l0aW9uICovCisgICAgICBjYXNlIDI0MjoKKwlhdGRpc2kgPSBhdGRpc28g PSBhdG9pKHApOworCXJldHVybigxKTsKKyAgICAgIGNhc2UgMTQ1OgkJCQkvKiBTeXN0ZW0gSUQg Ki8KKyAgICAgIGNhc2UgMjQ1OgorCWF0c2lkaSA9IGF0c2lkbyA9IGF0b2kocCk7CisJcmV0dXJu KDEpOworICAgICAgY2FzZSAxNDc6CQkJCS8qIFN5c3RlbS1EZXBlbmRlbnQgSW5mbyAqLworICAg ICAgY2FzZSAyNDc6CisJYXRzeXNpID0gYXRzeXNvID0gYXRvaShwKTsKKwlyZXR1cm4oMSk7Cisg ICAgICBjYXNlIDIzMjoJCQkJLyogQXR0cmlidXRlcyAoYWxsLCBvdXQpICovCisJYXRjYXByID0g YXRvaShwKTsKKwlyZXR1cm4oMSk7CisgICAgICBjYXNlIDMwMDoJCQkJLyogRmlsZSB0eXBlICh0 ZXh0LCBiaW5hcnkpICovCisJYmluYXJ5ID0gYXRvaShwKTsKKwliX3NhdmUgPSBiaW5hcnk7Cisj aWZuZGVmIE5PSUNQCisJZ19iaW5hcnkgPSAtMTsKKyNlbmRpZiAvKiBOT0lDUCAqLworCXJldHVy bigxKTsKKyAgICAgIGNhc2UgMzAxOgkJCQkvKiBGaWxlIG5hbWUgY29udmVyc2lvbiAqLworCWZu Y252ID0gMSAtIGF0b2kocCk7CQkvKiAob29wcykgKi8KKwlmX3NhdmUgPSBmbmNudjsKKyNpZm5k ZWYgTk9JQ1AKKwlnX2ZuY252ID0gLTE7CisjZW5kaWYgLyogTk9JQ1AgKi8KKwlyZXR1cm4oMSk7 CisgICAgICBjYXNlIDMwMjoJCQkJLyogRmlsZSBuYW1lIGNvbGxpc2lvbiAqLworI2lmZGVmIElL U0QKKyNpZmRlZiBDS19MT0dJTgorCWlmIChpbnNlcnZlciAmJiBpc2d1ZXN0KQkvKiBNYXkgbm90 IGJlIGNoYW5nZWQgYnkgZ3Vlc3QgKi8KKwkgIHJldHVybigwKTsKKyNlbmRpZiAvKiBDS19MT0dJ TiAqLworI2VuZGlmIC8qIElLU0QgKi8KKwl4ID0gYXRvaShwKTsKKwlpZiAoIUVOQUJMRUQoZW5f ZGVsKSAmJiAoeCA9PSBYWUZYX1ggfHwgeCA9PSBYWUZYX1UpKQorCSAgcmV0dXJuKDApOworCWlm ICh4ID09IFhZRlhfUikgY2t3YXJuID0gMTsJLyogUmVuYW1lICovCisJaWYgKHggPT0gWFlGWF9Y KSBja3dhcm4gPSAwOwkvKiBSZXBsYWNlICovCisJZm5jYWN0ID0geDsKKwlyZXR1cm4oMSk7Cisg ICAgICBjYXNlIDMxMDoJCQkJLyogSW5jb21wbGV0ZSBGaWxlIERpc3Bvc2l0aW9uICovCisJa2Vl cCA9IGF0b2kocCk7CQkJLyogS2VlcCwgRGlzY2FyZCwgQXV0byAqLworCXJldHVybigxKTsKKyAg ICAgIGNhc2UgMzExOgkJCQkvKiBCbG9ja3NpemUgKi8KKwlmYmxrc2l6ID0gYXRvaShwKTsKKwly ZXR1cm4oMSk7CisgICAgICBjYXNlIDMxMjoJCQkJLyogUmVjb3JkIExlbmd0aCAqLworCWZyZWNs ID0gYXRvaShwKTsKKwlyZXR1cm4oMSk7CisgICAgICBjYXNlIDMxMzoJCQkJLyogUmVjb3JkIGZv cm1hdCAqLworCWZyZWNmbSA9IGF0b2kocCk7CisJcmV0dXJuKDEpOworICAgICAgY2FzZSAzMTQ6 CQkJCS8qIEZpbGUgb3JnYW5pemF0aW9uICovCisJZm9yZyA9IGF0b2kocCk7CisJcmV0dXJuKDEp OworICAgICAgY2FzZSAzMTU6CQkJCS8qIEZpbGUgY2FycmlhZ2UgY29udHJvbCAqLworCWZjY3Ry bCA9IGF0b2kocCk7CisJcmV0dXJuKDEpOworICAgICAgY2FzZSAzMzA6CQkJCS8qIE1hdGNoIGRv dGZpbGVzICovCisjaWZuZGVmIE5PSUNQCisJZGlyX2RvdHMgPSAtMTsJCQkvKiBUaGlzIHVuZG9l cyBESVIgL0RPVCBvcHRpb24gKi8KKyNlbmRpZiAvKiBOT0lDUCAqLworCW1hdGNoZG90ID0gYXRv aShwKTsKKwlyZXR1cm4oMSk7CisgICAgICBjYXNlIDMzMToJCQkJLyogTWF0Y2ggRklGT3MgKi8K KwltYXRjaGZpZm8gPSBhdG9pKHApOworCXJldHVybigxKTsKKyAgICAgIGNhc2UgNDAwOgkJCQkv KiBCbG9jayBjaGVjayAqLworCXkgPSBhdG9pKHApOworCWlmICh5IDwgNSAmJiB5ID4gMCkgewor CSAgICBiY3RyID0geTsKKwkgICAgY19zYXZlID0gLTE7CisJICAgIHJldHVybigxKTsKKwl9IGVs c2UgaWYgKCpwID09ICdCJykgeworCSAgICBiY3RyID0gNDsKKwkgICAgY19zYXZlID0gLTE7CisJ ICAgIHJldHVybigxKTsKKwl9IGVsc2UgaWYgKCpwID09ICc1JykgeworCSAgICBiY3RyID0gMzsK KwkgICAgY19zYXZlID0gLTE7CisJICAgIHJldHVybigxKTsKKwl9CisJcmV0dXJuKDApOworICAg ICAgY2FzZSA0MDE6CQkJCS8qIFJlY2VpdmUgcGFja2V0LWxlbmd0aCAqLworCXJwc2l6ID0gdXJw c2l6ID0gYXRvaShwKTsKKwlpZiAodXJwc2l6ID4gTUFYUlApIHVycHNpeiA9IE1BWFJQOyAvKiBN YXggbG9uZy1wYWNrZXQgbGVuZ3RoICovCisJaWYgKHJwc2l6ID4gOTQpIHJwc2l6ID0gOTQ7CSAg ICAvKiBNYXggc2hvcnQtcGFja2V0IGxlbmd0aCAqLworCXVycHNpeiA9IGFkanBrbCh1cnBzaXos d3Nsb3RzLGJpZ3Jic2l6KTsKKwlyZXR1cm4oMSk7CisgICAgICBjYXNlIDQwMjoJCQkJLyogUmVj ZWl2ZSB0aW1lb3V0ICovCisJeSA9IGF0b2kocCk7CQkJLyogQ2xpZW50IGlzIHRlbGxpbmcgdXMg Ki8KKwlpZiAoeSA+IC0xICYmIHkgPCA5OTkpIHsJLyogdGhlIHRpbWVvdXQgdGhhdCBpdCB3YW50 cyAqLworCSAgICBwa3R0aW0gPSBjaGt0aW1vKHksdGltZWYpOwkvKiB1cyB0byB0ZWxsIGl0IHRv IHVzZS4gKi8KKwkgICAgcmV0dXJuKDEpOworCX0gZWxzZSByZXR1cm4oMCk7CisgICAgICBjYXNl IDQwMzoJCQkJLyogUmV0cnkgbGltaXQgKi8KKwl5ID0gYXRvaShwKTsKKwlpZiAoeSA+IC0xICYm IHkgPCA5NSkgeworCSAgICBtYXh0cnkgPSB5OworCSAgICByZXR1cm4oMSk7CisJfSBlbHNlIHJl dHVybigwKTsKKyAgICAgIGNhc2UgNDA0OgkJCQkvKiBTZXJ2ZXIgdGltZW91dCAqLworCXkgPSBh dG9pKHApOworCWlmICh5IDwgMCkgcmV0dXJuKDApOworCXNydnRpbSA9IHk7CisJcmV0dXJuKDEp OworCisjaWZuZGVmIE5PQ1NFVFMKKyAgICAgIGNhc2UgNDA1OiB7CQkJCS8qIFRyYW5zZmVyIGNo YXJhY3RlciBzZXQgKi8KKwkgIGV4dGVybiBpbnQgc19jc2V0LCBheGNzZXRbXTsKKwkgIGludCBp OworCSAgZm9yIChpID0gMDsgaSA8IG50Y3NldHM7IGkrKykgeworCSAgICAgIGlmICghc3RyY21w KHRjc2luZm9baV0uZGVzaWduYXRvcixwKSkgYnJlYWs7CisJICB9CisJICBkZWJ1ZyhGMTAxLCJy ZW1zZXQgdGNoYXJzZXQgbG9va3VwIiwiIixpKTsKKwkgIGlmIChpID09IG50Y3NldHMpIHJldHVy bigwKTsKKwkgIHRjaGFyc2V0ID0gdGNzaW5mb1tpXS5jb2RlOwkvKiBJZiBrbm93biwgdXNlIGl0 ICovCisJICBkZWJ1ZyhGMTAxLCJyZW1zZXQgdGNoYXJzZXQiLCIiLHRjaGFyc2V0KTsKKwkgIGlm IChzX2NzZXQgPT0gWE1PREVfQSkKKwkgICAgaWYgKGF4Y3NldFt0Y2hhcnNldF0gPiAtMSAmJiBh eGNzZXRbdGNoYXJzZXRdID4gTUFYRkNTRVRTKQorCSAgICAgIGZjaGFyc2V0ID0gYXhjc2V0W3Rj aGFyc2V0XTsgLyogQXV0by1waWNrIGZpbGUgY2hhcnNldCAqLworCSAgZGVidWcoRjEwMSwicmVt c2V0IHRjaGFyc2V0IGZjaGFyc2V0IiwiIixmY2hhcnNldCk7CisJICBzZXR4bGF0eXBlKHRjaGFy c2V0LGZjaGFyc2V0KTsgLyogU2V0IHVwIGNoYXJzZXQgdHJhbnNsYXRpb25zICovCisJICBkZWJ1 ZyhGMTAxLCJyZW1zZXQgeGxhdHlwZSIsIiIseGxhdHlwZSk7CisJICBkZWJ1ZyhGMTAxLCJyZW1z ZXQgdGNoYXJzZXQgYWZ0ZXIgc2V0eGxhdHlwZSIsIiIsdGNoYXJzZXQpOworCSAgdGNzX3NhdmUg PSAtMTsKKwkgIHJldHVybigxKTsKKyAgICAgIH0KKyAgICAgIGNhc2UgMzIwOiB7CQkJLyogRmls ZSBjaGFyYWN0ZXIgc2V0ICovCisJICBleHRlcm4gc3RydWN0IGtleXRhYiBmY3N0YWJbXTsKKwkg IGV4dGVybiBpbnQgbmZpbGMsIHNfY3NldCwgcl9jc2V0OworCSAgeCA9IGxvb2t1cChmY3N0YWIs cCxuZmlsYywmeSk7CisJICBkZWJ1ZyhGMTExLCJSU0VUIEZJTEUgQ0hBUiBuYW1lIixwLHgpOwor CSAgaWYgKHggPCAwKQorCSAgICByZXR1cm4oMCk7CisJICBzX2NzZXQgPSBYTU9ERV9NOwkJLyog Tm8gYXV0b21hdGljIGNoYXJzZXQgc3dpdGNoaW5nICovCisJICByX2NzZXQgPSBYTU9ERV9NOwor CSAgZmNoYXJzZXQgPSB4OwkJCS8qIFNldCBmaWxlIGNoYXJzZXQgKi8KKwkgIHNldHhsYXR5cGUo dGNoYXJzZXQsZmNoYXJzZXQpOyAvKiBhbmQgdHJhbnNsYXRpb24gdHlwZSAqLworCSAgZmNzX3Nh dmUgPSAtMTsKKwkgIHJldHVybigxKTsKKyAgICAgIH0KKyNlbmRpZiAvKiBOT0NTRVRTICovCisK KyAgICAgIGNhc2UgNDA2OgkJCQkvKiBXaW5kb3cgc2xvdHMgKi8KKwl5ID0gYXRvaShwKTsKKwlp ZiAoeSA9PSAwKSB5ID0gMTsKKwlpZiAoeSA8IDEgfHwgeSA+IE1BWFdTKSByZXR1cm4oMCk7CisJ d3Nsb3RyID0geTsKKwlzd2NhcHIgPSAxOworCXVycHNpeiA9IGFkanBrbCh1cnBzaXosd3Nsb3Ry LGJpZ3Jic2l6KTsKKwlyZXR1cm4oMSk7CisKKyAgICAgIGNhc2UgNDEwOgkJCQkvKiBUcmFuc2Zl ciBtb2RlICovCisJeSA9IGF0b2kocCk7CQkJLyogMCA9IGF1dG9tYXRpYywgbm9uemVybyA9IG1h bnVhbCAqLworCWlmICh5ICE9IDApIHkgPSAxOworCXhmZXJtb2RlID0geTsKKwlkZWJ1ZyhGMTAx LCJSRU1PVEUgU0VUIHhmZXJtb2RlIiwiIix4ZmVybW9kZSk7CisJcmV0dXJuKDEpOworCisgICAg ICBjYXNlIDQyMDoJCQkJLyogU0VSVkVSIENELU1FU1NBR0UgeyBPTiwgT0ZGIH0gKi8KKwl5ID0g YXRvaShwKTsJCQkvKiAwID0gYXV0b21hdGljLCBub256ZXJvID0gbWFudWFsICovCisJc3J2Y2Rt c2cgPSB5OworCXJldHVybigxKTsKKworICAgICAgZGVmYXVsdDoJCQkJLyogQW55dGhpbmcgZWxz ZS4uLiAqLworCXJldHVybigwKTsKKyAgICB9Cit9CisKKy8qIEFkanVzdCBwYWNrZXQgbGVuZ3Ro IGJhc2VkIG9uIG51bWJlciBvZiB3aW5kb3cgc2xvdHMgYW5kIGJ1ZmZlciBzaXplICovCisKK2lu dAorYWRqcGtsKHBrdGxlbixzbG90cyxidWZzaXopIGludCBwa3RsZW4sIHNsb3RzLCBidWZzaXo7 IHsKKyAgICBpZiAocHJvdG9jb2wgIT0gUFJPVE9fSykgcmV0dXJuKHBrdGxlbik7CisgICAgZGVi dWcoRjEwMSwiYWRqcGtsIGxlbiIsIiIscGt0bGVuKTsKKyAgICBkZWJ1ZyhGMTAxLCJhZGpwa2wg c2xvdHMiLCIiLHNsb3RzKTsKKyAgICBkZWJ1ZyhGMTAxLCJhZGpwa2wgYnVmc2l6IiwiIixidWZz aXopOworICAgIGlmICgoKHBrdGxlbiArIDYpICogc2xvdHMpID4gYnVmc2l6KQorICAgICAgcGt0 bGVuID0gKGJ1ZnNpeiAvIHNsb3RzKSAtIDY7CisgICAgZGVidWcoRjEwMSwiYWRqcGtsIG5ldyBs ZW4iLCIiLHBrdGxlbik7CisgICAgcmV0dXJuKHBrdGxlbik7Cit9CisKKy8qIFNldCB0cmFuc2Zl ciBtb2RlIGFuZCBmaWxlIG5hbWluZyBiYXNlZCBvbiBjb21wYXJpc29uIG9mIHN5c3RlbSB0eXBl cyAqLworCisKK1ZPSUQKK3dob2FyZXdlKCkgeworI2lmbmRlZiBOT0lDUAorICAgIGV4dGVybiBp bnQgZ194ZmVybW9kZTsKKyNlbmRpZiAvKiBOT0lDUCAqLworCisgICAgd2VhcmVhbGlrZSA9IDA7 CisKKyAgICBkZWJ1ZyhGMTAxLCJ3aG9hcmV3ZSB4ZmVybW9kZSIsIiIseGZlcm1vZGUpOworI2lm bmRlZiBOT0lDUAorICAgIGRlYnVnKEYxMDEsIndob2FyZXdlIGdfeGZlcm1vZGUiLCIiLGdfeGZl cm1vZGUpOworI2VuZGlmIC8qIE5PSUNQICovCisgICAgaWYgKHdob2FyZXVbMF0pIHsJCQkvKiBJ ZiB3ZSBrbm93IHBhcnRuZXIncyBzeXN0ZW0gdHlwZSAqLworCWNoYXIgKiBwID0gKGNoYXIgKil3 aG9hcmV1OworCWRlYnVnKEYxMTAsIndob2FyZXdlIHJlbW90ZSBzeXNpZCIsd2hvYXJldSwwKTsK KwlpZiAoIXN0cmNtcChwLGNrc3lzaWQpKQkJLyogT3RoZXIgc3lzdGVtIHNhbWUgYXMgdXMgKi8K KwkgIHdlYXJlYWxpa2UgPSAxOworCisjaWZkZWYgVU5JWAorCWVsc2UgaWYgKCFzdHJjbXAocCwi TDMiKSkJLyogVU5JWCBpcyBzb3J0IG9mIGxpa2UgQW1pZ2FET1MgKi8KKwkgIHdlYXJlYWxpa2Ug PSAxOwkJLyogKHNhbWUgZGlyZWN0b3J5IHNlcGFyYXRvcikgKi8KKwllbHNlIGlmICghc3RyY21w KHAsIk4zIikpCS8qIFVOSVggbGlrZSBBZWdpcyAqLworCSAgd2VhcmVhbGlrZSA9IDE7CisjZWxz ZQorI2lmZGVmIEFNSUdBCisvKiBMaWtlIFVOSVgsIGJ1dCBjYXNlIGRpc3RpbmN0aW9ucyBhcmUg aWdub3JlZCBhbmQgY2FuIGJlZ2luIHdpdGggZGV2aWNlOi4gKi8KKwllbHNlIGlmICghc3RyY21w KHAsIlUxIikpCS8qIEFtaWdhIGlzIHNvcnQgb2YgbGlrZSBVTklYICovCisJICB3ZWFyZWFsaWtl ID0gMTsKKwllbHNlIGlmICghc3RyY21wKHAsIk4zIikpCS8qIEFtaWdhIGlzIHNvcnQgb2YgbGlr ZSBBZWdpcyAqLworCSAgd2VhcmVhbGlrZSA9IDE7CisjZWxzZQorI2lmZGVmIE9TMgkJCQkvKiAo SW5jbHVkZXMgV2luZG93cyA5NS9OVCkgKi8KKworCS8qIERPUywgR0VNRE9TLCBXaW5kb3dzIDMu eCwgV2luZG93cyA5NSwgV2luZG93cyBOVCAqLworCS8qIEFsbCAidGhlIHNhbWUiIGZvciBGQVQg cGFydGl0aW9ucyBidXQgYWxsIGJldHMgb2ZmIG90aGVyd2lzZSAqLworCS8qIHNvIHRoaXMgcGFy dCBuZWVkcyBzb21lIHJlZmluZW1lbnQgLi4uICAqLworCisJZWxzZSBpZiAoIXN0cmNtcChwLCJV OCIpKQkvKiBNUy1ET1MgKi8KKwkgIHdlYXJlYWxpa2UgPSAxOworCWVsc2UgaWYgKCFzdHJjbXAo cCwiVU8iKSkJLyogT1MvMiAqLworCSAgd2VhcmVhbGlrZSA9IDE7CisJZWxzZSBpZiAoIXN0cmNt cChwLCJVTiIpKQkvKiBXaW5kb3dzIE5UIG9yIDk1ICovCisJICB3ZWFyZWFsaWtlID0gMTsKKwll bHNlIGlmICghc3RyY21wKHAsIksyIikpCS8qIEdFTURPUyAqLworCSAgd2VhcmVhbGlrZSA9IDE7 CisjZWxzZQorI2lmZGVmIEdFTURPUworCWVsc2UgaWYgKCFzdHJjbXAocCwiVTgiKSkKKwkgIHdl YXJlYWxpa2UgPSAxOworCWVsc2UgaWYgKCFzdHJjbXAocCwiVU8iKSkKKwkgIHdlYXJlYWxpa2Ug PSAxOworCWVsc2UgaWYgKCFzdHJjbXAocCwiVU4iKSkKKwkgIHdlYXJlYWxpa2UgPSAxOworCWVs c2UgaWYgKCFzdHJjbXAocCwiSzIiKSkKKwkgIHdlYXJlYWxpa2UgPSAxOworI2VuZGlmIC8qIEdF TURPUyAqLworI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIEFNSUdBICovCisjZW5kaWYgLyog VU5JWCAqLworCisJLyogR2V0IGhlcmUgd2l0aCB3ZWFyZWFsaWtlID09IDEgaWYgc3lzdGVtIHR5 cGVzIG1hdGNoICovCisKKwlkZWJ1ZyhGMTAxLCJ3aG9hcmV3ZSB3ZWFyZWFsaWtlIiwiIix3ZWFy ZWFsaWtlKTsKKwlpZiAoIXdlYXJlYWxpa2UpCQkvKiBOb3QgYWxpa2UgKi8KKwkgIHJldHVybjsK KworCWZuY252ID0gWFlGTl9MOwkJCS8qIEFsaWtlLCBzbyBsaXRlcmFsIGZpbGVuYW1lcyAqLwor CWRlYnVnKEYxMDEsIndob2FyZXdlIHNldHRpbmcgZm5jbnYiLCIiLGZuY252KTsKKworCWlmICh4 ZmVybW9kZSA9PSBYTU9ERV9BKSB7CS8qIEN1cnJlbnQgeGZlciBtb2RlIGlzIGF1dG8gKi8KKyNp ZmRlZiBWTVMKKwkgICAgYmluYXJ5ID0gWFlGVF9MOwkJLyogRm9yIFZNUy10by1WTVMsIHVzZSBs YWJlbGVkICovCisjZWxzZQorI2lmZGVmIE9TMgorCSAgICAvKiBPUy8yIGJ1dCBub3QgV2luZG93 cyAqLworCSAgICBpZiAoIXN0cmNtcChja3N5c2lkLCJVTyIpICYmICFzdHJjbXAoKGNoYXIgKil3 aG9hcmV1LCJVTyIpKQorCSAgICAgIGJpbmFyeSA9IFhZRlRfTDsJCS8qIEZvciBPUy8yLXRvLU9T LzIsIHVzZSBsYWJlbGVkICovCisjZWxzZQorCSAgICBiaW5hcnkgPSBYWUZUX0I7CQkvKiBGb3Ig YWxsIG90aGVycyB1c2UgYmluYXJ5ICovCisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogVk1T ICovCisJICAgIGduZl9iaW5hcnkgPSBiaW5hcnk7CS8qIFByZXZhaWxpbmcgdHlwZSBmb3IgZ25m aWxlKCkgKi8KKwkgICAgZGVidWcoRjEwMSwid2hvYXJld2Ugc2V0dGluZyBiaW5hcnkiLCIiLGJp bmFyeSk7CisJfQorICAgIH0KK30KKyNlbmRpZiAvKiBOT1hGRVIgKi8KCmRpZmYgLS1naXQgYS9j a2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrY2Z0cC5jIGIvY2tlcm1pdC05 LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2NmdHAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwLi42NmM3OTQwCi0tLSAvZGV2L251bGwKKysrIGIvY2tlcm1pdC05LjAu MzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2NmdHAuYwpAQCAtMCwwICsxLDE3NjU0IEBACisj ZGVmaW5lIEZUUF9USU1FT1VUCisKKy8qICBDIEsgQyBGIFQgUCAgLS0gIEZUUCBDbGllbnQgZm9y IEMtS2VybWl0ICAqLworCitjaGFyICpja2Z0cHYgPSAiRlRQIENsaWVudCwgOS4wLjI2MCwgMTQg SnVsIDIwMTEiOworCisvKgorICBBdXRob3JzOgorICAgIEplZmZyZXkgRSBBbHRtYW4gPGphbHRt YW5Ac2VjdXJlLWVuZHBvaW50cy5jb20+CisgICAgICBTZWN1cmUgRW5kcG9pbnRzIEluYy4sIE5l dyBZb3JrIENpdHkKKyAgICBGcmFuayBkYSBDcnV6IDxmZGNAY29sdW1iaWEuZWR1PiwKKyAgICAg IFRoZSBLZXJtaXQgUHJvamVjdCwgQ29sdW1iaWEgVW5pdmVyc2l0eS4KKworICBDb3B5cmlnaHQg KEMpIDIwMDAsIDIwMTEsCisgICAgVHJ1c3RlZXMgb2YgQ29sdW1iaWEgVW5pdmVyc2l0eSBpbiB0 aGUgQ2l0eSBvZiBOZXcgWW9yay4KKyAgICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgU2VlIHRoZSBD LUtlcm1pdCBDT1BZSU5HLlRYVCBmaWxlIG9yIHRoZQorICAgIGNvcHlyaWdodCB0ZXh0IGluIHRo ZSBja2NtYWkuYyBtb2R1bGUgZm9yIGRpc2NsYWltZXIgYW5kIHBlcm1pc3Npb25zLgorCisgIFBv cnRpb25zIG9mIGNvbmRpdGlvbmFsbHkgaW5jbHVkZWQgY29kZSBDb3B5cmlnaHQgUmVnZW50cyBv ZiB0aGUKKyAgICBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEgYW5kIFRoZSBTdGFuZm9yZCBTUlAg QXV0aGVudGljYXRpb24gUHJvamVjdDsKKyAgICBzZWUgbm90aWNlcyBiZWxvdy4KKyovCisKKy8q CisgIFBlbmRpbmcuLi4KKworICAuIEltcGxlbWVudCByZWN1cnNpdmUgTkxTVCBkb3dubG9hZHMg YnkgdHJ5aW5nIHRvIENEIHRvIGVhY2ggZmlsZW5hbWUuCisgICAgSWYgaXQgd29ya3MsIGl0J3Mg YSBkaXJlY3Rvcnk7IGlmIG5vdCwgaXQncyBhIGZpbGUgLS0gR0VUIGl0LiAgQnV0CisgICAgdGhh dCB3b24ndCB3b3JrIHdpdGggc2VydmVycyBsaWtlIHd1LWZ0cGQgdGhhdCBkb24ndCBzZW5kIGRp cmVjdG9yeSAKKyAgICBuYW1lcy4gIFJlY3Vyc2lvbiB3aXRoIE1MU0QgaXMgZG9uZS4KKworICAu IE1ha2Ugc3lzbG9nIGVudHJpZXMgZm9yIHNlc3Npb24/ICBGaWxlcz8KKworICAuIE1lc3NhZ2Vz IGFyZSBwcmludGVkIHRvIHN0ZG91dCBhbmQgc3RkZXJyIGluIHJhbmRvbSBmYXNoaW9uLiAgV2Ug c2hvdWxkCisgICAgZWl0aGVyIHByaW50IGV2ZXJ5dGhpbmcgdG8gc3Rkb3V0LCBvciBlbHNlIGJl IHN5c3RlbWF0aWMgYWJvdXQgd2hlbgorICAgIHRvIHVzZSBzdGRlcnIuCisKKyAgLiBJbXBsZW1l bnQgbWFpbCAoTUFJTCwgTUxGTCwgTVNPTSwgZXRjKSBpZiBhbnkgc2VydmVycyBzdXBwb3J0IGl0 LgorCisgIC4gQWRhcHQgdG8gVk1TLiAgQmlnIGpvYiBiZWNhdXNlIG9mIGl0cyByZWNvcmQtb3Jp ZW50ZWQgZmlsZSBzeXN0ZW0uCisgICAgUk1TIHByb2dyYW1tZXIgcmVxdWlyZWQuICBUaGVyZSBh cmUgcHJvYmFibHkgYWxzbyBzb21lIFZNUyBUQ1AvSVAKKyAgICBwcm9kdWN0LXNwZWNpZmljIHdy aW5rbGVzLCBlLmcuIGF0dHJpYnV0ZSBwcmVzZXJ2YXRpb24gaW4gVk1TLXRvLVZNUworICAgIHRy YW5zZmVycyB1c2luZyBzcGVjaWFsIG9wdGlvbnMgZm9yIE11bHRpbmV0IG9yIG90aGVyIEZUUCBz ZXJ2ZXJzCisgICAgKGZpbmQgb3V0IGFib3V0IFNUUlUgVk1TKS4KKyovCisKKy8qCisgIFF1aWNr IEZUUCBjb21tYW5kIHJlZmVyZW5jZToKKworICBSRkM3NjUgKDE5ODApIGFuZCBlYXJsaWVyOgor ICAgIE1PREUgIFModHJlYW0pLCBCKGxvY2spLCBDKG9tcHJlc3NlZCkKKyAgICBTVFJVICBGKElM RSksIFIoRUNPUkQpLCBQKEFHRSkKKyAgICBUWVBFICBBKFNDSUkpIDxmb3JtYXQ+LCAgRShCQ0RJ QykgPGZvcm1hdD4sIEkoTUFHRSksIEwoT0NBTCkgPGJ5dGVzaXplPgorICAgIFBPUlQgIC0gUG9y dAorICAgIFBBU1YgIC0gUGFzc2l2ZSBtb2RlCisgICAgVVNFUiAgLSBVc2VyCisgICAgUEFTUyAg LSBQYXNzd29yZAorICAgIEFDQ1QgIC0gQWNjb3VudAorICAgIENXRCAgIC0gQ2hhbmdlIFdvcmtp bmcgRGlyZWN0b3J5CisgICAgUkVJTiAgLSBMb2dvdXQgYnV0IG5vdCBkaXNjb25uZWN0CisgICAg UVVJVCAgLSBCeWUKKyAgICBSRVRSICAtIFJldHJlaXZlCisgICAgU1RPUiAgLSBTdG9yZQorICAg IEFQUEUgIC0gQXBwZW5kCisgICAgQUxMTyAgLSBBbGxvY2F0ZQorICAgIFJFU1QgIC0gUmVzdGFy dAorICAgIFJORlIgIC0gUmVuYW1lIGZyb20KKyAgICBSTlRPICAtIFJlbmFtZSB0bworICAgIEFC T1IgIC0gQ2FuY2VsCisgICAgREVMRSAgLSBEZWxldGUKKyAgICBMSVNUICAtIERpcmVjdG9yeQor ICAgIE5MU1QgIC0gTmFtZSBMaXN0CisgICAgU0lURSAgLSBTaXRlIHBhcmFtZXRlcnMgb3IgY29t bWFuZHMKKyAgICBTVEFUICAtIFN0YXR1cworICAgIEhFTFAgIC0gSGVscAorICAgIE5PT1AgIC0g Tm9vcAorCisgIFJGQzk1OSAoMTk4NSk6CisgICAgQ0RVUCAgLSBDaGFuZ2UgdG8gUGFyZW50IERp cmVjdG9yeQorICAgIFNNTlQgIC0gU3RydWN0dXJlIE1vdW50CisgICAgU1RPVSAgLSBTdG9yZSBV bmlxdWUKKyAgICBSTUQgICAtIFJlbW92ZSBEaXJlY3RvcnkKKyAgICBNS0QgICAtIE1ha2UgRGly ZWN0b3J5CisgICAgUFdEICAgLSBQcmludCBEaXJlY3RvcnkKKyAgICBTWVNUICAtIFN5c3RlbQor CisgIFJGQzIzODkgKDE5OTgpOgorICAgIEZFQVQgIC0gTGlzdCBGZWF0dXJlcyAoZG9uZSkKKyAg ICBPUFRTICAtIFNlbmQgb3B0aW9ucyAoZG9uZSkKKworICBSRkMyNjQwICgxOTk5KToKKyAgICBM QU5HICAtIFNwZWNpZnkgbGFuZ3VhZ2UgZm9yIG1lc3NhZ2VzIChub3QgZG9uZSkKKworICBQZW5k aW5nIChJbnRlcm5ldCBEcmFmdHMpOgorICAgIFNJWkUgIC0gRmlsZSBzaXplIChkb25lKQorICAg IE1EVE0gIC0gRmlsZSBtb2RpZmljYXRpb24gZGF0ZS10aW1lIChkb25lKQorICAgIE1MU1QgIC0g RmlsZSBuYW1lIGFuZCBhdHRyaWJ1dGUgbGlzdCAoc2luZ2xlIGZpbGUpIChub3QgZG9uZSkKKyAg ICBNTFNEICAtIEZpbGUgbGlzdCB3aXRoIGF0dHJpYnV0ZXMgKG11bHRpcGxlIGZpbGVzKSAoZG9u ZSkKKyAgICBNQUlMLCBNTEZMLCBNU09NIC0gbWFpbCBkZWxpdmVyeSAobm90IGRvbmUpCisKKyAg QWxwaGFiZXRpY2FsIHN5bnRheCBsaXN0OgorICAgIEFCT1IgPENSTEY+CisgICAgQUNDVCA8U1A+ IDxhY2NvdW50LWluZm9ybWF0aW9uPiA8Q1JMRj4KKyAgICBBTExPIDxTUD4gPGRlY2ltYWwtaW50 ZWdlcj4gWzxTUD4gUiA8U1A+IDxkZWNpbWFsLWludGVnZXI+XSA8Q1JMRj4KKyAgICBBUFBFIDxT UD4gPHBhdGhuYW1lPiA8Q1JMRj4KKyAgICBDRFVQIDxDUkxGPgorICAgIENXRCAgPFNQPiA8cGF0 aG5hbWU+IDxDUkxGPgorICAgIERFTEUgPFNQPiA8cGF0aG5hbWU+IDxDUkxGPgorICAgIEZFQVQg PENSTEY+CisgICAgSEVMUCBbPFNQPiA8c3RyaW5nPl0gPENSTEY+CisgICAgTEFORyBbPFNQPiA8 bGFuZ3VhZ2UtdGFnPiBdIDxDUkxGPgorICAgIExJU1QgWzxTUD4gPHBhdGhuYW1lPl0gPENSTEY+ CisgICAgTUtEICA8U1A+IDxwYXRobmFtZT4gPENSTEY+CisgICAgTUxTRCBbPFNQPiA8cGF0aG5h bWU+XSA8Q1JMRj4KKyAgICBNTFNUIFs8U1A+IDxwYXRobmFtZT5dIDxDUkxGPgorICAgIE1PREUg PFNQPiA8bW9kZS1jb2RlPiA8Q1JMRj4KKyAgICBOTFNUIFs8U1A+IDxwYXRobmFtZS1vci13aWxk Y2FyZD5dIDxDUkxGPgorICAgIE5PT1AgPENSTEY+CisgICAgT1BUUyA8U1A+IDxjb21tYW5kbmFt ZT4gWyA8U1A+IDxjb21tYW5kLW9wdGlvbnM+IF0gPENSTEY+CisgICAgUEFTUyA8U1A+IDxwYXNz d29yZD4gPENSTEY+CisgICAgUEFTViA8Q1JMRj4KKyAgICBQT1JUIDxTUD4gPGhvc3QtcG9ydD4g PENSTEY+CisgICAgUFdEICA8Q1JMRj4KKyAgICBRVUlUIDxDUkxGPgorICAgIFJFSU4gPENSTEY+ CisgICAgUkVTVCA8U1A+IDxtYXJrZXI+IDxDUkxGPgorICAgIFJFVFIgPFNQPiA8cGF0aG5hbWU+ IDxDUkxGPgorICAgIFJNRCAgPFNQPiA8cGF0aG5hbWU+IDxDUkxGPgorICAgIFJORlIgPFNQPiA8 cGF0aG5hbWU+IDxDUkxGPgorICAgIFJOVE8gPFNQPiA8cGF0aG5hbWU+IDxDUkxGPgorICAgIFNJ VEUgPFNQPiA8c3RyaW5nPiA8Q1JMRj4KKyAgICBTSVpFIDxTUD4gPHBhdGhuYW1lPiA8Q1JMRj4K KyAgICBTTU5UIDxTUD4gPHBhdGhuYW1lPiA8Q1JMRj4KKyAgICBTVEFUIFs8U1A+IDxwYXRobmFt ZT5dIDxDUkxGPgorICAgIFNUT1IgPFNQPiA8cGF0aG5hbWU+IDxDUkxGPgorICAgIFNUT1UgPENS TEY+CisgICAgU1RSVSA8U1A+IDxzdHJ1Y3R1cmUtY29kZT4gPENSTEY+CisgICAgU1lTVCA8Q1JM Rj4KKyAgICBUWVBFIDxTUD4gPHR5cGUtY29kZT4gPENSTEY+CisgICAgVVNFUiA8U1A+IDx1c2Vy bmFtZT4gPENSTEY+CisqLworI2luY2x1ZGUgImNrY3N5bS5oIiAgICAgICAgICAgICAgICAgICAg IC8qIFN0YW5kYXJkIGluY2x1ZGVzICovCisjaW5jbHVkZSAiY2tjZGViLmgiCisKKyNpZm5kZWYg Tk9GVFAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOT0ZUUCAgPSBubyBGVFAgKi8KKyNp Zm5kZWYgU1lTRlRQICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTWVNGVFAgPSB1c2UgZXh0 ZXJuYWwgZnRwIGNsaWVudCAqLworI2lmZGVmIFRDUFNPQ0tFVCAgICAgICAgICAgICAgICAgICAg ICAgIC8qIEJ1aWxkIG9ubHkgaWYgVENQL0lQIGluY2x1ZGVkICovCisjZGVmaW5lIENLQ0ZUUF9D CisKKy8qIE5vdGU6IG11Y2ggb2YgdGhlIGZvbGxvd2luZyBkdXBsaWNhdGVzIHdoYXQgd2FzIGRv bmUgaW4gY2tjZGViLmggKi8KKy8qIGJ1dCBsZXQncyBub3QgbWVzcyB3aXRoIGl0IHVubGVzcyBp dCBjYXVzZXMgdHJvdWJsZS4gKi8KKworI2lmZGVmIENLX0FOU0lDCisjaW5jbHVkZSA8c3RkYXJn Lmg+CisjZWxzZSAvKiBDS19BTlNJQyAqLworI2luY2x1ZGUgPHZhcmFyZ3MuaD4KKyNlbmRpZiAv KiBDS19BTlNJQyAqLworI2luY2x1ZGUgPHNpZ25hbC5oPgorI2lmZGVmIE9TMgorI2lmZGVmIE9T Mk9OTFkKKyNpbmNsdWRlIDxvczIuaD4KKyNlbmRpZiAvKiBPUzJPTkxZICovCisjaW5jbHVkZSAi Y2tvd2luLmgiCisjaW5jbHVkZSAiY2tvY29uLmgiCisjZW5kaWYgLyogT1MyICovCisjaWZuZGVm IFpJTE9HCisjaWZkZWYgTlQKKyNpbmNsdWRlIDxzZXRqbXBleC5oPgorI2lmZGVmIE5UU0lHCitl eHRlcm4gaW50IFRsc0luZGV4OworI2VuZGlmIC8qIE5UU0lHICovCisjZWxzZSAvKiBOVCAqLwor I2luY2x1ZGUgPHNldGptcC5oPgorI2VuZGlmIC8qIE5UICovCisjZWxzZQorI2luY2x1ZGUgPHNl dHJldC5oPgorI2VuZGlmIC8qIFpJTE9HICovCisjaW5jbHVkZSAiY2tjc2lnLmgiCisjaWZkZWYg Vk1TCisvKiAyMDEwLTAzLTA5IFNNUy4gIFZBWCBDIG5lZWRzIGhlbHAgdG8gZmluZCAic3lzIi4g IEl0J3MgZWFzaWVyIG5vdCB0byB0cnkuICovCisjaW5jbHVkZSA8c3RhdC5oPgorI2Vsc2UgLyog ZGVmIFZNUyAqLworI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjZW5kaWYgLyogZGVmIFZNUyBbZWxz ZV0gKi8KKyNpbmNsdWRlIDxjdHlwZS5oPgorCisjaWZuZGVmIEhQVVhQUkU2NQorI2luY2x1ZGUg PGVycm5vLmg+CQkJLyogRXJyb3IgbnVtYmVyIHN5bWJvbHMgKi8KKyNlbHNlCisjaWZuZGVmIEVS Uk5PX0lOQ0xVREVECisjaW5jbHVkZSA8ZXJybm8uaD4JCQkvKiBFcnJvciBudW1iZXIgc3ltYm9s cyAqLworI2VuZGlmCS8qIEVSUk5PX0lOQ0xVREVEICovCisjZW5kaWYJLyogSFBVWFBSRTY1ICov CisKKyNpZm5kZWYgTk9USU1FSAorI2luY2x1ZGUgPHRpbWUuaD4KKyNlbmRpZiAvKiBOT1RJTUVI ICovCisjaWZuZGVmIEVQSVBFCisjZGVmaW5lIEVQSVBFIDMyICAgICAgICAgICAgICAgICAgICAg ICAgLyogQnJva2VuIHBpcGUgZXJyb3IgKi8KKyNlbmRpZiAvKiBFUElQRSAqLworCisvKiBLZXJt aXQgaW5jbHVkZXMgKi8KKworI2luY2x1ZGUgImNrY2FzYy5oIgorI2luY2x1ZGUgImNrY2tlci5o IgorI2luY2x1ZGUgImNrdWNtZC5oIgorI2luY2x1ZGUgImNrdXVzci5oIgorI2luY2x1ZGUgImNr Y25ldC5oIiAgICAgICAgICAgICAgICAgICAgIC8qIEluY2x1ZGVzIGNrY3RlbC5oICovCisjaW5j bHVkZSAiY2tjdGVsLmgiICAgICAgICAgICAgICAgICAgICAgLyogKHRoZW4gd2h5IGluY2x1ZGUg aXQgYWdhaW4/KSAqLworI2luY2x1ZGUgImNrY3hsYS5oIgorCisjaWZkZWYgQ0tfU1NMCisjaW5j bHVkZSAiY2t1YXRoLmgiCQkJLyogU01TIDIwMDcvMDIvMTUgKi8KKyNlbmRpZiAvKiBkZWYgQ0tf U1NMICovCisKKy8qCisgIEhvdyB0byBnZXQgdGhlIHN0cnVjdCB0aW1ldmFsIGRlZmluaXRpb24g c28gd2UgY2FuIGNhbGwgc2VsZWN0KCkuICBUaGUKKyAgeHhUSU1FSCBzeW1ib2xzIGFyZSBkZWZp bmVkIGluIGNrY2RlYi5oLCBvdmVycmlkZGVuIGluIHZhcmlvdXMgbWFrZWZpbGUKKyAgdGFyZ2V0 cy4gIFRoZSBwcm9ibGVtIGlzOiBtYXliZSB3ZSBoYXZlIGFscmVhZHkgaW5jbHVkZWQgc29tZSBo ZWFkZXIgZmlsZQorICB0aGF0IGRlZmluZWQgc3RydWN0IHRpbWV2YWwsIGFuZCBtYXliZSB3ZSBk aWRuJ3QuICBJZiB3ZSBkaWQsIHdlIGRvbid0IHdhbnQKKyAgdG8gaW5jbHVkZSBhbm90aGVyIGhl YWRlciBmaWxlIHRoYXQgZGVmaW5lcyBpdCBhZ2FpbiBvciB0aGUgY29tcGlsYXRpb24gd2lsbAor ICBmYWlsLiAgSWYgd2UgZGlkbid0LCB3ZSBoYXZlIHRvIGluY2x1ZGUgdGhlIGhlYWRlciBmaWxl IHdoZXJlIGl0J3MgZGVmaW5lZC4KKyAgQnV0IGluIHNvbWUgY2FzZXMgZXZlbiB0aGF0IHdvbid0 IHdvcmsgYmVjYXVzZSBvZiBzdHJpY3QgUE9TSVggY29uc3RyYWludHMKKyAgb3Igc29tZXN1Y2gs IG9yIGJlY2F1c2UgdGhpcyBpbnRyb2R1Y2VzIG90aGVyIGNvbmZsaWN0cyAoZS5nLiBzdHJ1Y3Qg dG0KKyAgbXVsdGlwbHkgZGVmaW5lZCksIGluIHdoaWNoIGNhc2Ugd2UgaGF2ZSB0byBkZWZpbmUg aXQgb3Vyc2VsdmVzLCBidXQgdGhpcworICBjYW4gd29yayBvbmx5IGlmIHdlIGRpZG4ndCBhbHJl YWR5IGVuY291bnRlciBhIGRlZmluaXRpb24uCisqLworI2lmbmRlZiBEQ0xUSU1FVkFMCisjaWZk ZWYgU1Y2OFIzVjYKKyNkZWZpbmUgRENMVElNRVZBTAorI2Vsc2UKKyNpZmRlZiBTQ08yMzQKKyNk ZWZpbmUgRENMVElNRVZBTAorI2VuZGlmIC8qIFNDTzIzNCAqLworI2VuZGlmIC8qIFNWNjhSM1Y2 ICovCisjZW5kaWYgLyogRENMVElNRVZBTCAqLworCisjaWZkZWYgRENMVElNRVZBTAorLyogQWxz byBtYXliZSBpbiBzb21lIHBsYWNlcyB0aGUgZWxlbWVudHMgbXVzdCBiZSB1bnNpZ25lZC4uLiAq Lworc3RydWN0IHRpbWV2YWwgeworICAgIGxvbmcgdHZfc2VjOworICAgIGxvbmcgdHZfdXNlYzsK K307CisjaWZkZWYgQ09NTUVOVAorLyogQ3VycmVudGx5IHdlIGRvbid0IHVzZSB0aGlzLi4uICov CitzdHJ1Y3QgdGltZXpvbmUgeworICAgIGludCB0el9taW51dGVzd2VzdDsKKyAgICBpbnQgdHpf ZHN0dGltZTsKK307CisjZW5kaWYgLyogQ09NTUVOVCAqLworI2Vsc2UgIC8qICFEQ0xUSU1FVkFM ICovCisjaWZuZGVmIE5PU1lTVElNRUgKKyNpZmRlZiBTWVNUSU1FSAorI2luY2x1ZGUgPHN5cy90 aW1lLmg+CisjZW5kaWYgLyogU1lTVElNRUggKi8KKyNlbmRpZiAvKiBOT1NZU1RJTUVIICovCisj aWZuZGVmIE5PU1lTVElNRUJICisjaWZkZWYgU1lTVElNRUJICisjaW5jbHVkZSA8c3lzL3RpbWVi Lmg+CisjZW5kaWYgLyogU1lTVElNRUJIICovCisjZW5kaWYgLyogTk9TWVNUSU1FQkggKi8KKyNl bmRpZiAvKiBEQ0xUSU1FVkFMICovCisKKy8qIDIwMTAtMDMtMDkgU01TLiAgVkFYIEMgbmVlZHMg aGVscCB0byBmaW5kICJzeXMiLiAgSXQncyBlYXNpZXIgbm90IHRvIHRyeS4gKi8KKyNpZmRlZiBW TVMKKyNpbmNsdWRlIDx0eXBlcy5oPgorI2Vsc2UgLyogZGVmIFZNUyAqLworI2luY2x1ZGUgPHN5 cy90eXBlcy5oPgorI2VuZGlmIC8qIGRlZiBWTVMgW2Vsc2VdICovCisjaW5jbHVkZSA8c3RkaW8u aD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpZmRlZiBIQVZFX1NURExJQl9ICisjaW5jbHVkZSA8 c3RkbGliLmg+CisjZW5kaWYgLyogSEFWRV9TVERMSUJfSCAqLworCisjaWZuZGVmIE5PU0VUVElN RQorI2lmZGVmIENPTU1FTlQKKy8qIFRoaXMgc2VjdGlvbiBtb3ZlZCB0byBja2NkZWIuaCAqLwor I2lmZGVmIFBPU0lYCisjZGVmaW5lIFVUSU1FSAorI2Vsc2UKKyNpZmRlZiBIUFVYOQorI2RlZmlu ZSBVVElNRUgKKyNlbHNlCisjaWZkZWYgT1MyCisjZGVmaW5lIFNZU1VUSU1FSAorI2VuZGlmIC8q IE9TMiAqLworI2VuZGlmIC8qIEhQVVg5ICovCisjZW5kaWYgLyogUE9TSVggKi8KKyNlbmRpZiAv KiBDT01NRU5UICovCisKKyNpZmRlZiBWTVMJCQkJLyogU01TIDIwMDcvMDIvMTUgKi8KKyNpbmNs dWRlICJja3ZydGwuaCIJCQkvKiBmb3IgdXRpbWUoKSAqLworI2Vsc2UgIC8qIGRlZiBWTVMgKi8K KyNpZmRlZiBTWVNVVElNRUgKKyNpbmNsdWRlIDxzeXMvdXRpbWUuaD4KKyNlbHNlCisjaWZkZWYg VVRJTUVICisjaW5jbHVkZSA8dXRpbWUuaD4KKyNkZWZpbmUgU1lTVVRJTUVICisjZW5kaWYgLyog VVRJTUVIICovCisjZW5kaWYgLyogU1lTVVRJTUVIICovCisjZW5kaWYgLyogZGVmIFZNUyAqLwor I2VuZGlmIC8qIE5PU0VUVElNRSAqLworCisjaWZuZGVmIFNDT19PU1I1MDQKKyNpZmRlZiBTRUxF Q1RfSAorI2luY2x1ZGUgPHN5cy9zZWxlY3QuaD4KKyNlbmRpZiAvKiBTRUxFQ1RfSCAqLworI2Vu ZGlmIC8qIFNDT19PU1I1MDQgKi8KKworI2lmbmRlZiBJTkFERFJfTk9ORQkJCS8qIDIwMTAtMDMt MjkgKi8KKyNkZWZpbmUgSU5BRERSX05PTkUgLTEKKyNlbmRpZgkvKiBJTkFERFJfTk9ORSAqLwor CisvKiBzZWxlY3QoKSBkaWFsZWN0cy4uLiAqLworCisjaWZkZWYgVU5JWAorI2RlZmluZSBCU0RT RUxFQ1QgICAgICAgICAgICAgICAgICAgICAgIC8qIEJTRCBzZWxlY3QoKSBzeW50YXgvc2VtYW50 aWNzICovCisjaWZuZGVmIEZEX1NFVFNJWkUKKyNkZWZpbmUgRkRfU0VUU0laRSAxMjgKKyNlbmRp ZgkvKiBGRF9TRVRTSVpFICovCisjaWZkZWYgSFBVWDYJCQkJLyogRm9yIEhQLVVYIDYuNSBjaXJj YSAxOTg5ICovCit0eXBlZGVmIGxvbmcgZmRfbWFzazsKKyNkZWZpbmUgTkZEQklUUyAoc2l6ZW9m KGZkX21hc2spICogTkJCWSkgLyogYml0cyBwZXIgbWFzayAqLworI2lmbmRlZiBob3dtYW55Cisj ZGVmaW5lIGhvd21hbnkoeCwgeSkgICAoKCh4KSsoKHkpLTEpKS8oeSkpCisjZW5kaWYJLyogaG93 bWFueSAqLworI2RlZmluZSBGRF9TRVQobiwgcCkgICAgKChwKS0+ZmRzX2JpdHNbKG4pL05GREJJ VFNdIHw9ICgxIDw8ICgobikgJSBORkRCSVRTKSkpCisjZGVmaW5lIEZEX0NMUihuLCBwKSAgICAo KHApLT5mZHNfYml0c1sobikvTkZEQklUU10gJj0gfigxIDw8ICgobikgJSBORkRCSVRTKSkpCisj ZGVmaW5lIEZEX0lTU0VUKG4sIHApICAoKHApLT5mZHNfYml0c1sobikvTkZEQklUU10gJiAoMSA8 PCAoKG4pICUgTkZEQklUUykpKQorI2RlZmluZSBGRF9DT1BZKGYsIHQpICAgYmNvcHkoZiwgdCwg c2l6ZW9mKCooZikpKQorI2RlZmluZSBGRF9aRVJPKHApICAgICAgYnplcm8ocCwgc2l6ZW9mKCoo cCkpKQorI2VuZGlmCS8qIEhQVVg2ICovCisKKyNlbHNlCisjaWZkZWYgT1MyICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogT1MvMiBvciBXaW4zMiAqLworI2lmZGVmIE5UCisjZGVmaW5l IEJTRFNFTEVDVAorI2Vsc2UgLyogTlQgKi8KKyNkZWZpbmUgSUJNU0VMRUNUCisjZW5kaWYgLyog TlQgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBVTklYICovCisKKyNpZmRlZiBWTVMK KyNkZWZpbmUgQlNEU0VMRUNUCQkJLyogU01TIDIwMDcvMDIvMTUgKi8KKyNlbmRpZiAvKiBkZWYg Vk1TICovCisKKy8qIE90aGVyIHNlbGVjdCgpIHBlY3VsaWFyaXRpZXMgKi8KKworI2lmZGVmIEhQ VVgKKyNpZm5kZWYgSFBVWDEwICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBIUC1VWCA5Lnh4 IGFuZCBlYXJsaWVyICovCisjaWZuZGVmIEhQVVgxMTAwCisvKiBUaGUgdGhyZWUgaW50ZXJpb3Ig YXJncyB0byBzZWxlY3QoKSBhcmUgKGludCAqKSByYXRoZXIgdGhhbiAoZmRfc2V0ICopICovCisj aWZuZGVmIElOVFNFTEVDVAorI2RlZmluZSBJTlRTRUxFQ1QKKyNlbmRpZiAvKiBJTlRTRUxFQ1Qg Ki8KKyNlbmRpZiAvKiBIUFVYMTEwMCAqLworI2VuZGlmIC8qIEhQVVgxMCAqLworI2VuZGlmIC8q IEhQVVggKi8KKworI2lmZGVmIENLX1NPQ0tTICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNP Q0tTIEludGVybmV0IHJlbGF5IHBhY2thZ2UgKi8KKyNpZmRlZiBDS19TT0NLUzUgICAgICAgICAg ICAgICAgICAgICAgICAvKiBTT0NLUyA1ICovCisjZGVmaW5lIGFjY2VwdCAgU09DS1NhY2NlcHQK KyNkZWZpbmUgYmluZCAgICBTT0NLU2JpbmQKKyNkZWZpbmUgY29ubmVjdCBTT0NLU2Nvbm5lY3QK KyNkZWZpbmUgZ2V0c29ja25hbWUgU09DS1NnZXRzb2NrbmFtZQorI2RlZmluZSBsaXN0ZW4gU09D S1NsaXN0ZW4KKyNlbHNlICAvKiBOb3QgU09DS1MgNSAqLworI2RlZmluZSBhY2NlcHQgIFJhY2Nl cHQKKyNkZWZpbmUgYmluZCAgICBSYmluZAorI2RlZmluZSBjb25uZWN0IFJjb25uZWN0CisjZGVm aW5lIGdldHNvY2tuYW1lIFJnZXRzb2NrbmFtZQorI2RlZmluZSBsaXN0ZW4gUmxpc3RlbgorI2Vu ZGlmIC8qIENLX1NPQ0tTNSAqLworI2VuZGlmIC8qIENLX1NPQ0tTICovCisKKyNpZm5kZWYgTk9I VFRQCitleHRlcm4gY2hhciAqIHRjcF9odHRwX3Byb3h5OyAgICAgICAgICAgLyogTmFtZVs6cG9y dF0gb2YgaHR0cCBwcm94eSBzZXJ2ZXIgKi8KK2V4dGVybiBpbnQgICAgdGNwX2h0dHBfcHJveHlf ZXJybm87CitleHRlcm4gY2hhciAqIHRjcF9odHRwX3Byb3h5X3VzZXI7CitleHRlcm4gY2hhciAq IHRjcF9odHRwX3Byb3h5X3B3ZDsKK2V4dGVybiBjaGFyICogdGNwX2h0dHBfcHJveHlfYWdlbnQ7 CisjZGVmaW5lIEhUVFBDUFlMIDEwMjQKK3N0YXRpYyBjaGFyIHByb3h5aG9zdFtIVFRQQ1BZTF07 CisjZW5kaWYgLyogTk9IVFRQICovCitpbnQgc3NsX2Z0cF9wcm94eSA9IDA7ICAgICAgICAgICAg ICAgICAgLyogRlRQIG92ZXIgU1NML1RMUyBQcm94eSBTZXJ2ZXIgKi8KKworLyogRmVhdHVyZSBz ZWxlY3Rpb24gKi8KKworI2lmbmRlZiBVU0VfU0hVVERPV04KKy8qCisgIFdlIGRvbid0IHVzZSBz aHV0ZG93bigpIGJlY2F1c2UgKGEpIHdlIGFsd2F5cyBjYWxsIGl0IGp1c3QgYmVmb3JlIGNsb3Nl KCkKKyAgc28gaXQncyByZWR1bmRhbnQgYW5kIHVubmVjZXNzYXJ5LCBhbmQgKGIpIGl0IGludHJv ZHVjZXMgYSBsb25nIHBhdXNlIG9uCisgIHNvbWUgcGxhdGZvcm1zIGxpa2UgU1YvNjggUjMuCisq LworLyogI2RlZmluZSBVU0VfU0hVVERPV04gKi8KKyNlbmRpZiAvKiBVU0VfU0hVVERPV04gKi8K KworI2lmbmRlZiBOT1JFU0VORAorI2lmbmRlZiBOT1JFU1RBUlQgICAgICAgICAgICAgICAgICAg ICAgIC8qIFJlc3RhcnQgLyByZWNvdmVyICovCisjaWZuZGVmIEZUUF9SRVNUQVJUCisjZGVmaW5l IEZUUF9SRVNUQVJUCisjZW5kaWYgLyogRlRQX1JFU1RBUlQgKi8KKyNlbmRpZiAvKiBOT1JFU1RB UlQgKi8KKyNlbmRpZiAvKiBOT1JFU0VORCAqLworCisjaWZuZGVmIE5PVVBEQVRFICAgICAgICAg ICAgICAgICAgICAgICAgLyogVXBkYXRlIG1vZGUgKi8KKyNpZm5kZWYgRE9VUERBVEUKKyNkZWZp bmUgRE9VUERBVEUKKyNlbmRpZiAvKiBET1VQREFURSAqLworI2VuZGlmIC8qIE5PVVBEQVRFICov CisKKyNpZm5kZWYgVU5JQ09ERSAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVbmljb2RlIHJl cXVpcmVkICovCisjaWZuZGVmIE5PQ1NFVFMgICAgICAgICAgICAgICAgICAgICAgICAgLyogZm9y IGNoYXJzZXQgdHJhbnNsYXRpb24gKi8KKyNkZWZpbmUgTk9DU0VUUworI2VuZGlmIC8qIE5PQ1NF VFMgKi8KKyNlbmRpZiAvKiBVTklDT0RFICovCisKKyNpZm5kZWYgT1MyCisjaWZuZGVmIEhBVkVf TVNFQ1MgICAgICAgICAgICAgICAgICAgICAgLyogTWlsbGlzZWNvbmQgdGltZXIgKi8KKyNpZmRl ZiBVTklYCisjaWZkZWYgR0ZUSU1FUgorI2RlZmluZSBIQVZFX01TRUNTCisjZW5kaWYgLyogR0ZU SU1FUiAqLworI2VuZGlmIC8qIFVOSVggKi8KKyNlbmRpZiAvKiBIQVZFX01TRUNTICovCisjZW5k aWYgLyogT1MyICovCisKKyNpZmRlZiBQSVBFU0VORCAgICAgICAgICAgICAgICAgICAgICAgICAv KiBQVVQgZnJvbSBwaXBlICovCisjaWZuZGVmIFBVVFBJUEUKKyNkZWZpbmUgUFVUUElQRQorI2Vu ZGlmIC8qIFBVVFBJUEUgKi8KKyNlbmRpZiAvKiBQSVBFU0VORCAqLworCisjaWZuZGVmIE5PU1BM ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUFVUIGZyb20gYXJyYXkgKi8KKyNpZm5kZWYg UFVUQVJSQVkKKyNkZWZpbmUgUFVUQVJSQVkKKyNlbmRpZiAvKiBQVVRBUlJBWSAqLworI2VuZGlm IC8qIE5PU1BMICovCisKKy8qIFNlY3VyaXR5Li4uICovCisKKyNpZmRlZiBDS19TUlAKKyNkZWZp bmUgRlRQX1NSUAorI2VuZGlmIC8qIENLX1NSUCAqLworCisjaWZkZWYgQ0tfS0VSQkVST1MKKyNp ZmRlZiBLUkI0CisvKgorICBUaGVyZSBpcyBhIGNvbmZsaWN0IGJldHdlZW4gdGhlIEtleSBTY2hl ZHVsZSBmb3JtYXRzIHVzZWQgaW50ZXJuYWxseQorICB3aXRoaW4gdGhlIHN0YW5kYWxvbmUgTUlU IEtSQjQgbGlicmFyeSBhbmQgdGhhdCB1c2VkIGJ5IEVyaWMgWW91bmcKKyAgaW4gT3BlblNTTCBh bmQgaGlzIHN0YW5kYWxvbmUgREVTIGxpYnJhcnkuICBUaGVyZWZvcmUsIEtSQjQgRlRQIEFVVEgK KyAgY2Fubm90IGJlIHN1cHBvcnRlZCB3aGVuIGVpdGhlciBvZiB0aG9zZSB0d28gcGFja2FnZXMg YXJlIHVzZWQuCisqLworI2lmZGVmIEtSQjUyNAorI2RlZmluZSBGVFBfS1JCNAorI2Vsc2UgLyog S1JCNTI0ICovCisjaWZuZGVmIENLX1NTTAorI2lmbmRlZiBMSUJERVMKKyNkZWZpbmUgRlRQX0tS QjQKKyNlbmRpZiAvKiBMSUJERVMgKi8KKyNlbmRpZiAvKiBDS19TU0wgKi8KKyNlbmRpZiAvKiBL UkI1MjQgKi8KKyNlbmRpZiAvKiBLUkI0ICovCisjaWZkZWYgS1JCNQorI2lmbmRlZiBIRUlNREFM CisjaWZuZGVmIE5PRlRQX0dTU0FQSQkJCS8qIDI5OSAqLworI2RlZmluZSBGVFBfR1NTQVBJCisj ZW5kaWYJLyogTk9GVFBfR1NTQVBJICovCisjZW5kaWYgLyogSEVJTURBTCAqLworI2VuZGlmIC8q IEtSQjUgKi8KKyNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLworCisvKiBGVFBfU0VDVVJJVFkgaXMg ZGVmaW5lZCBpZiBhbnkgb2YgdGhlIGFib3ZlIGlzIHNlbGVjdGVkICovCisjaWZuZGVmIEZUUF9T RUNVUklUWQorI2lmZGVmIEZUUF9HU1NBUEkKKyNkZWZpbmUgRlRQX1NFQ1VSSVRZCisjZWxzZQor I2lmZGVmIEZUUF9LUkI0CisjZGVmaW5lIEZUUF9TRUNVUklUWQorI2Vsc2UKKyNpZmRlZiBGVFBf U1JQCisjZGVmaW5lIEZUUF9TRUNVUklUWQorI2Vsc2UKKyNpZmRlZiBDS19TU0wKKyNkZWZpbmUg RlRQX1NFQ1VSSVRZCisjZW5kaWYgLyogQ0tfU1NMICovCisjZW5kaWYgLyogRlRQX1NSUCAqLwor I2VuZGlmIC8qIEZUUF9LUkI0ICovCisjZW5kaWYgLyogRlRQX0dTU0FQSSAqLworI2VuZGlmIC8q IEZUUF9TRUNVUklUWSAqLworCisjaWZkZWYgQ0tfREVTCisjaWZkZWYgQ0tfU1NMCisjaWZuZGVm IExJQkRFUworI2RlZmluZSBMSUJERVMKKyNlbmRpZiAvKiBMSUJERVMgKi8KKyNlbmRpZiAvKiBD S19TU0wgKi8KKyNlbmRpZiAvKiBDS19ERVMgKi8KKworI2lmZGVmIENSWVBUX0RMTAorI2lmbmRl ZiBMSUJERVMKKyNkZWZpbmUgTElCREVTCisjZW5kaWYgLyogTElCREVTICovCisjZW5kaWYgLyog Q1JZUFRfRExMICovCisKKyNpZmRlZiBGVFBfS1JCNAorI2RlZmluZSBkZXNfY2Jsb2NrIEJsb2Nr CisjZGVmaW5lIGRlc19rZXlfc2NoZWR1bGUgU2NoZWR1bGUKKyNpZmRlZiBLUkI1MjQKKyNpZmRl ZiBOVAorI2RlZmluZSBfV0lORE9XUworI2VuZGlmIC8qIE5UICovCisjaW5jbHVkZSAia2VyYmVy b3NJVi9rcmIuaCIKKyNlbHNlIC8qIEtSQjUyNCAqLworI2lmZGVmIFNPTEFSSVMKKyNpZm5kZWYg c3VuCisvKiBGb3Igc29tZSByZWFzb24gbG9zdCBpbiBoaXN0b3J5IHRoZSBNYWtlZmlsZSBTb2xh cmlzIHRhcmdldHMgaGF2ZSAtVXN1biAqLworI2RlZmluZSBzdW4KKyNlbmRpZiAvKiBzdW4gKi8K KyNlbmRpZiAvKiBTT0xBUklTICovCisjaW5jbHVkZSAia3JiLmgiCisjZGVmaW5lIGtyYl9nZXRf ZXJyX3RleHRfZW50cnkga3JiX2dldF9lcnJfdGV4dAorI2VuZGlmIC8qIEtSQjUyNCAqLworI2Vu ZGlmIC8qIEZUUF9LUkI0ICovCisKKyNpZmRlZiBDS19TU0wKKyNpZmRlZiBGVFBfS1JCNAorI2lm bmRlZiBIRUFERVJfREVTX0gKKyNkZWZpbmUgSEVBREVSX0RFU19ICisjZW5kaWYgLyogSEVBREVS X0RFU19IICovCisjZW5kaWYgLyogRlRQX0tSQjQgKi8KKyNpbmNsdWRlICJja19zc2wuaCIKKyNl bmRpZiAvKiBDS19TU0wgKi8KKworI2lmZGVmIEZUUF9TUlAKKyNpZmRlZiBIQVZFX1BXRF9ICisj aW5jbHVkZSAicHdkLmgiCisjZW5kaWYgLyogSEFWRV9QV0RfSCAqLworI2luY2x1ZGUgInRfcHdk LmgiCisjaW5jbHVkZSAidF9jbGllbnQuaCIKKyNpbmNsdWRlICJrcnlwdG8uaCIKKyNlbmRpZiAv KiBGVFBfU1JQICovCisKKyNpZmRlZiBGVFBfR1NTQVBJCisjaW5jbHVkZSA8Z3NzYXBpL2dzc2Fw aS5oPgorLyoKKyAgTmVlZCB0byBpbmNsdWRlIHRoZSBrcmI1IGZpbGUsIGJlY2F1c2Ugd2UncmUg ZG9pbmcgbWFudWFsIGZhbGxiYWNrCisgIGZyb20gdGhlIHYyIG1lY2ggdG8gdGhlIHYxIG1lY2gu ICBPbmNlIHRoZXJlJ3MgcmVhbCBuZWdvdGlhdGlvbiwKKyAgd2UgY2FuIGJlIGdlbmVyaWMgYWdh aW4uCisqLworI2luY2x1ZGUgPGdzc2FwaS9nc3NhcGlfZ2VuZXJpYy5oPgorI2luY2x1ZGUgPGdz c2FwaS9nc3NhcGlfa3JiNS5oPgorc3RhdGljIGdzc19jdHhfaWRfdCBnY29udGV4dDsKKworI2lm ZGVmIE1BQ09TWAorLyoqIGV4cG9ydGVkIGNvbnN0YW50cyBkZWZpbmVkIGluIGdzc2FwaV9rcmI1 eyxfbnh9LmggKiovCisKKy8qIHRoZXNlIGFyZSBib2d1cywgYnV0IHdpbGwgY29tcGlsZSAqLwor CisvKgorICogVGhlIE9JRCBvZiB0aGUgZHJhZnQga3JiNSBtZWNoYW5pc20sIGFzc2lnbmVkIGJ5 IElFVEYsIGlzOgorICogICAgICBpc28oMSkgb3JnKDMpIGRvZCg1KSBpbnRlcm5ldCgxKSBzZWN1 cml0eSg1KQorICogICAgICBrZXJiZXJvc3Y1KDIpID0gMS4zLjUuMS41LjIKKyAqIFRoZSBPSUQg b2YgdGhlIGtyYjVfbmFtZSB0eXBlIGlzOgorICogICAgICBpc28oMSkgbWVtYmVyLWJvZHkoMikg VVMoODQwKSBtaXQoMTEzNTU0KSBpbmZvc3lzKDEpIGdzc2FwaSgyKQorICogICAgICBrcmI1KDIp IGtyYjVfbmFtZSgxKSA9IDEuMi44NDAuMTEzNTU0LjEuMi4yLjEKKyAqIFRoZSBPSUQgb2YgdGhl IGtyYjVfcHJpbmNpcGFsIHR5cGUgaXM6CisgKiAgICAgIGlzbygxKSBtZW1iZXItYm9keSgyKSBV Uyg4NDApIG1pdCgxMTM1NTQpIGluZm9zeXMoMSkgZ3NzYXBpKDIpCisgKiAgICAgIGtyYjUoMikg a3JiNV9wcmluY2lwYWwoMikgPSAxLjIuODQwLjExMzU1NC4xLjIuMi4yCisgKiBUaGUgT0lEIG9m IHRoZSBwcm9wb3NlZCBzdGFuZGFyZCBrcmI1IG1lY2hhbmlzbSBpczoKKyAqICAgICAgaXNvKDEp IG1lbWJlci1ib2R5KDIpIFVTKDg0MCkgbWl0KDExMzU1NCkgaW5mb3N5cygxKSBnc3NhcGkoMikK KyAqICAgICAga3JiNSgyKSA9IDEuMi44NDAuMTEzNTU0LjEuMi4yCisgKiBUaGUgT0lEIG9mIHRo ZSBwcm9wb3NlZCBzdGFuZGFyZCBrcmI1IHYyIG1lY2hhbmlzbSBpczoKKyAqICAgICAgaXNvKDEp IG1lbWJlci1ib2R5KDIpIFVTKDg0MCkgbWl0KDExMzU1NCkgaW5mb3N5cygxKSBnc3NhcGkoMikK KyAqICAgICAga3JiNXYyKDMpID0gMS4yLjg0MC4xMTM1NTQuMS4yLjMKKyAqCisgKi8KKworLyoK KyAqIEVuY29kaW5nIHJ1bGVzOiBUaGUgZmlyc3QgdHdvIHZhbHVlcyBhcmUgZW5jb2RlZCBpbiBv bmUgYnl0ZSBhcyA0MAorICogKiB2YWx1ZTEgKyB2YWx1ZTIuICBTdWJzZXF1ZW50IHZhbHVlcyBh cmUgZW5jb2RlZCBiYXNlIDEyOCwgbW9zdAorICogc2lnbmlmaWNhbnQgZGlnaXQgZmlyc3QsIHdp dGggdGhlIGhpZ2ggYml0IChcMjAwKSBzZXQgb24gYWxsIG9jdGV0cworICogZXhjZXB0IHRoZSBs YXN0IGluIGVhY2ggdmFsdWUncyBlbmNvZGluZy4KKyAqLworCitzdGF0aWMgQ09OU1QgZ3NzX09J RF9kZXNjCitja19rcmI1X2dzc19vaWRfYXJyYXlbXSA9IHsKKyAgIC8qIHRoaXMgaXMgdGhlIG9m ZmljaWFsLCByZmMtc3BlY2lmaWVkIE9JRCAqLworICAgezksICJcMDUyXDIwNlwxMTBcMjA2XDM2 N1wwMjJcMDAxXDAwMlwwMDIifSwKKyAgIC8qIHRoaXMgaXMgdGhlIHVub2ZmaWNpYWwsIHdyb25n IE9JRCAqLworICAgezUsICJcMDUzXDAwNVwwMDFcMDA1XDAwMiJ9LAorICAgLyogdGhpcyBpcyB0 aGUgdjIgYXNzaWduZWQgT0lEICovCisgICB7OSwgIlwwNTJcMjA2XDExMFwyMDZcMzY3XDAyMlww MDFcMDAyXDAwMyJ9LAorICAgLyogdGhlc2UgdHdvIGFyZSBuYW1lIHR5cGUgT0lEJ3MgKi8KKyAg IHsxMCwgIlwwNTJcMjA2XDExMFwyMDZcMzY3XDAyMlwwMDFcMDAyXDAwMlwwMDEifSwKKyAgIHsx MCwgIlwwNTJcMjA2XDExMFwyMDZcMzY3XDAyMlwwMDFcMDAyXDAwMlwwMDIifSwKKyAgIHsgMCwg MCB9Cit9OworCitzdGF0aWMKK0NPTlNUIGdzc19PSURfZGVzYyAqIENPTlNUIGdzc19tZWNoX2ty YjVfdjIgPSBja19rcmI1X2dzc19vaWRfYXJyYXkrMjsKKworI2lmZGVmIE1BQ09TWDEwMworc3Rh dGljCitDT05TVCBnc3NfT0lEX2Rlc2MgKiBDT05TVCBnc3NfbWVjaF9rcmI1ID0gY2tfa3JiNV9n c3Nfb2lkX2FycmF5KzA7CisjZW5kaWYgLyogTUFDT1NYMTAzICovCisKKyNpZm5kZWYgTUFDT1NY CitzdGF0aWMKK0NPTlNUIGdzc19PSURfZGVzYyAqIENPTlNUIGdzc19tZWNoX2tyYjUgPSBja19r cmI1X2dzc19vaWRfYXJyYXkrMDsKK3N0YXRpYworQ09OU1QgZ3NzX09JRF9kZXNjICogQ09OU1Qg Z3NzX21lY2hfa3JiNV9vbGQgPSBja19rcmI1X2dzc19vaWRfYXJyYXkrMTsKK3N0YXRpYworQ09O U1QgZ3NzX09JRF9kZXNjICogQ09OU1QgZ3NzX250X2tyYjVfbmFtZSA9IGNrX2tyYjVfZ3NzX29p ZF9hcnJheSszOworc3RhdGljCitDT05TVCBnc3NfT0lEX2Rlc2MgKiBDT05TVCBnc3NfbnRfa3Ji NV9wcmluY2lwYWwgPSBja19rcmI1X2dzc19vaWRfYXJyYXkrNDsKKyNlbmRpZgkvKiBNQUNPU1gg Ki8KKworLyoKKyAqIFNlZSBrcmI1L2dzc2FwaV9rcmI1LmMgZm9yIGEgZGVzY3JpcHRpb24gb2Yg dGhlIGFsZ29yaXRobSBmb3IKKyAqIGVuY29kaW5nIGFuIG9iamVjdCBpZGVudGlmaWVyLgorICov CisKKy8qCisgKiBUaGUgT0lEIG9mIHVzZXJfbmFtZSBpczoKKyAqICAgICAgaXNvKDEpIG1lbWJl ci1ib2R5KDIpIFVTKDg0MCkgbWl0KDExMzU1NCkgaW5mb3N5cygxKSBnc3NhcGkoMikKKyAqICAg ICAgZ2VuZXJpYygxKSB1c2VyX25hbWUoMSkgPSAxLjIuODQwLjExMzU1NC4xLjIuMS4xCisgKiBt YWNoaW5lX3VpZF9uYW1lOgorICogICAgICBpc28oMSkgbWVtYmVyLWJvZHkoMikgVVMoODQwKSBt aXQoMTEzNTU0KSBpbmZvc3lzKDEpIGdzc2FwaSgyKQorICogICAgICBnZW5lcmljKDEpIG1hY2hp bmVfdWlkX25hbWUoMikgPSAxLjIuODQwLjExMzU1NC4xLjIuMS4yCisgKiBzdHJpbmdfdWlkX25h bWU6CisgKiAgICAgIGlzbygxKSBtZW1iZXItYm9keSgyKSBVUyg4NDApIG1pdCgxMTM1NTQpIGlu Zm9zeXMoMSkgZ3NzYXBpKDIpCisgKiAgICAgIGdlbmVyaWMoMSkgc3RyaW5nX3VpZF9uYW1lKDMp ID0gMS4yLjg0MC4xMTM1NTQuMS4yLjEuMworICogc2VydmljZV9uYW1lOgorICogICAgICBpc28o MSkgbWVtYmVyLWJvZHkoMikgVVMoODQwKSBtaXQoMTEzNTU0KSBpbmZvc3lzKDEpIGdzc2FwaSgy KQorICogICAgICBnZW5lcmljKDEpIHNlcnZpY2VfbmFtZSg0KSA9IDEuMi44NDAuMTEzNTU0LjEu Mi4xLjQKKyAqIGV4cG9ydGVkX25hbWU6CisgKiAgICAgIDEoaXNvKSwgMyhvcmcpLCA2KGRvZCks IDEoaW50ZXJuZXQpLCA1KHNlY3VyaXR5KSwgNihuYW1ldHlwZXMpLAorICogICAgICAgICAgNChn c3MtYXBpLWV4cG9ydGVkLW5hbWUpCisgKiBob3N0X2Jhc2VkX3NlcnZpY2VfbmFtZSAodjIpOgor ICogICAgICBpc28gKDEpIG9yZyAoMyksIGRvZCAoNiksIGludGVybmV0ICgxKSwgc2VjdXJpdHkg KDUpLCBuYW1ldHlwZXMoNiksCisgKiAgICAgIGdzcy1ob3N0LWJhc2VkLXNlcnZpY2VzKDIpCisg Ki8KKworc3RhdGljIGdzc19PSURfZGVzYyBja19vaWRzW10gPSB7CisgICB7MTAsICJcMDUyXDIw NlwxMTBcMjA2XDM2N1wwMjJcMDAxXDAwMlwwMDFcMDAxIn0sCisgICB7MTAsICJcMDUyXDIwNlwx MTBcMjA2XDM2N1wwMjJcMDAxXDAwMlwwMDFcMDAyIn0sCisgICB7MTAsICJcMDUyXDIwNlwxMTBc MjA2XDM2N1wwMjJcMDAxXDAwMlwwMDFcMDAzIn0sCisgICB7MTAsICJcMDUyXDIwNlwxMTBcMjA2 XDM2N1wwMjJcMDAxXDAwMlwwMDFcMDA0In0sCisgICB7IDYsICJcMDUzXDAwNlwwMDFcMDA1XDAw NlwwMDQifSwKKyAgIHsgNiwgIlwwNTNcMDA2XDAwMVwwMDVcMDA2XDAwMiJ9LAorfTsKKworc3Rh dGljIGdzc19PSUQgY2tfZ3NzX250X3VzZXJfbmFtZSA9IGNrX29pZHMrMDsKK3N0YXRpYyBnc3Nf T0lEIGNrX2dzc19udF9tYWNoaW5lX3VpZF9uYW1lID0gY2tfb2lkcysxOworc3RhdGljIGdzc19P SUQgY2tfZ3NzX250X3N0cmluZ191aWRfbmFtZSA9IGNrX29pZHMrMjsKK3N0YXRpYyBnc3NfT0lE IGNrX2dzc19udF9zZXJ2aWNlX25hbWUgPSBja19vaWRzKzM7CitzdGF0aWMgZ3NzX09JRCBja19n c3NfbnRfZXhwb3J0ZWRfbmFtZSA9IGNrX29pZHMrNDsKK3N0YXRpYyBnc3NfT0lEIGNrX2dzc19u dF9zZXJ2aWNlX25hbWVfdjIgPSBja19vaWRzKzU7CisjZW5kaWYgLyogTUFDT1NYICovCisjZW5k aWYgLyogRlRQX0dTU0FQSSAqLworCisjaWZkZWYgT1MyCisjaWZkZWYgRlRQX1NSUAorI2RlZmlu ZSBNQVBfS1JZUFRPCisjaWZkZWYgU1JQRExMCisjZGVmaW5lIE1BUF9TUlAKKyNlbmRpZiAvKiBT UlBETEwgKi8KKyNlbmRpZiAvKiBGVFBfU1JQICovCisjaWZkZWYgRlRQX0tSQjQKKyNkZWZpbmUg TUFQX0tSQjQKKyNpZmRlZiBDS19FTkNSWVBUSU9OCisjZGVmaW5lIE1BUF9ERVMKKyNlbmRpZiAv KiBDS19FTkNSWVBUSU9OICovCisjZW5kaWYgLyogRlRQX0tSQjQgKi8KKyNpZmRlZiBGVFBfR1NT QVBJCisjZGVmaW5lIE1BUF9HU1NBUEkKKyNkZWZpbmUgR1NTX09JRFMKKyNlbmRpZiAvKiBGVFBf R1NTQVBJICovCisjaW5jbHVkZSAiY2tvYXRoLmgiCisKK2V4dGVybiBpbnQgazk1c3Rkb3V0LCB3 aGVyZXhbXSwgd2hlcmV5W107CitleHRlcm4gdW5zaWduZWQgY2hhciBjb2xvcmNtZDsKKyNlbmRp ZiAvKiBPUzIgKi8KKworI2lmZGVmIEZUUF9LUkI0CitzdGF0aWMgY2hhciBmdHBfcmVhbG1bUkVB TE1fU1ogKyAxXTsKK3N0YXRpYyBLVEVYVF9TVCBmdHBfdGt0OworI2lmZGVmIE9TMgorc3RhdGlj IExFQVNIX0NSRURFTlRJQUxTIGZ0cF9jcmVkOworI2Vsc2UgLyogT1MyICovCitzdGF0aWMgQ1JF REVOVElBTFMgZnRwX2NyZWQ7CisjZW5kaWYgLyogT1MyICovCitzdGF0aWMgTVNHX0RBVCBmdHBf bXNnX2RhdGE7CitzdGF0aWMgZGVzX2tleV9zY2hlZHVsZSBmdHBfc2NoZWQ7CitzdGF0aWMgaW50 IGZvb1s0XSA9IHs5OSw5OSw5OSw5OX07CisjZW5kaWYgLyogRlRQX0tSQjQgKi8KKworLyogZ2V0 cmVwbHkoKSBmdW5jdGlvbiBjb2RlcyAqLworCisjZGVmaW5lIEdSRl9BVVRIIDEJCQkvKiBSZXBs eSB0byBBVVRIIGNvbW1hbmQgKi8KKyNkZWZpbmUgR1JGX0ZFQVQgMgkJCS8qIFJlcGx5IHRvIEZF QVQgY29tbWFuZCAqLworCisvKiBPcGVyYXRpb25hbCBkZWZpbml0aW9ucyAqLworCisjZGVmaW5l IERFRl9WQk0gMCAgICAgICAgICAgICAgICAgICAgICAgLyogRGVmYXVsdCB2ZXJib3NlIG1vZGUg Ki8KKy8qICNkZWZpbmUgU0VUVkJNICovICAgICAgICAgICAgICAgICAgICAvKiAoc2VlIGdldHJl cGx5KSAqLworCisjZGVmaW5lIFVSTF9PTkVGSUxFICAgICAgICAgICAgICAgICAgICAgLyogR0VU LCBub3QgTUdFVCwgZm9yIEZUUCBVUkwgKi8KKworI2RlZmluZSBGVFBfQlVGU0laIDEwMjQwICAg ICAgICAgICAgICAgIC8qIE1heCBzaXplIGZvciBGVFAgY21kcyAmIHJlcGxpZXMgKi8KKyNkZWZp bmUgU1JWTkFNTEVOIDMyICAgICAgICAgICAgICAgICAgICAvKiBNYXggbGVuZ3RoIGZvciBzZXJ2 ZXIgdHlwZSBuYW1lICovCisjZGVmaW5lIFBXRFNJWiAyNTYKKyNkZWZpbmUgUEFTU0JVRlNJWiAy NTYKKyNkZWZpbmUgUFJPTVBUU0laIDI1NgorCisjaWZuZGVmIE1HRVRNQVggICAgICAgICAgICAg ICAgICAgICAgICAgLyogTWF4IG9wZXJhbmRzIGZvciBNR0VUIGNvbW1hbmQgKi8KKyNkZWZpbmUg TUdFVE1BWCAxMDAwCisjZW5kaWYgLyogTUdFVE1BWCAqLworCisjaWZkZWYgRlRQX1NSUAorI2Rl ZmluZSBGVURHRV9GQUNUT1IgMTAwCisjZW5kaWYgLyogRlRQX1NSUCAqLworCisvKgorICBBbW91 bnQgb2YgZ3Jvd3RoIGZyb20gY2xlYXJ0ZXh0IHRvIGNpcGhlcnRleHQuICBrcmJfbWtfcHJpdiBh ZGRzIHRoaXMKKyAgbnVtYmVyIGJ5dGVzLiAgTXVzdCBiZSBkZWZpbmVkIGZvciBlYWNoIGF1dGgg dHlwZS4KKyAgR1NTQVBJIGFwcGVhcnMgdG8gYWRkIDUyIGJ5dGVzLCBidXQgSSdtIG5vdCBzdXJl IGl0IGlzIGEgY29uc3RhbnQtLWhhcnRtYW5zCisgIDNERVMgcmVxdWlyZXMgNTYgYnl0ZXMuICBM ZXRzIHVzZSA5NiBqdXN0IHRvIGJlIHN1cmUuCisqLworI2lmZGVmIEZUUF9HU1NBUEkKKyNpZm5k ZWYgRlVER0VfRkFDVE9SCisjZGVmaW5lIEZVREdFX0ZBQ1RPUiA5NgorI2VuZGlmIC8qIEZVREdF X0ZBQ1RPUiAqLworI2VuZGlmIC8qIEZUUF9HU1NBUEkgKi8KKworI2lmZGVmIEZUUF9LUkI0Cisj aWZuZGVmIEZVREdFX0ZBQ1RPUgorI2RlZmluZSBGVURHRV9GQUNUT1IgMzIKKyNlbmRpZiAvKiBG VURHRV9GQUNUT1IgKi8KKyNlbmRpZiAvKiBGVFBfS1JCNCAqLworCisjaWZuZGVmIEZVREdFX0ZB Q1RPUiAgICAgICAgICAgICAgICAgICAgLyogSW4gY2FzZSBubyBhdXRoIHR5cGVzIGRlZmluZSBp dCAqLworI2RlZmluZSBGVURHRV9GQUNUT1IgMAorI2VuZGlmIC8qIEZVREdFX0ZBQ1RPUiAqLwor CisjaWZuZGVmIE1BWEhPU1ROQU1FTEVOCisjZGVmaW5lIE1BWEhPU1ROQU1FTEVOIDY0CisjZW5k aWYgLyogTUFYSE9TVE5BTUVMRU4gKi8KKyNkZWZpbmUgTUFYX0ROU19OQU1FTEVOICgxNSooTUFY SE9TVE5BTUVMRU4gKyAxKSsxKQorCisvKiBGYXNjaXN0IGNvbXBpbGVyIHRvYWR5aW5nICovCisK KyNpZm5kZWYgU0VOREFSRzJUWVBFCisjaWZkZWYgQ09NTUVOVCAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogTWlnaHQgYmUgbmVlZGVkIGhlcmUgYW5kIHRoZXJlICovCisjZGVmaW5lIFNFTkRB UkcyVFlQRSBjb25zdCBjaGFyICoKKyNlbHNlCisjZGVmaW5lIFNFTkRBUkcyVFlQRSBjaGFyICoK KyNlbmRpZiAvKiBDT01NRU5UICovCisjZW5kaWYgLyogU0VOREFSRzJUWVBFICovCisKKy8qIENv bW1vbiB0ZXh0IG1lc3NhZ2VzICovCisKK3N0YXRpYyBjaGFyICpub2N4ID0gIj9ObyBGVFAgY29u dHJvbCBjb25uZWN0aW9uXG4iOworCitzdGF0aWMgY2hhciAqZm5jbmFtW10gPSB7CisgICJyZW5h bWUiLCAib3ZlcndyaXRlIiwgImJhY2t1cCIsICJhcHBlbmQiLCAiZGlzY2FyZCIsICJhc2siLCAi dXBkYXRlIiwKKyAgImRhdGVzLWRpZmZlciIsICIiCit9OworCisvKiBNYWNybyBkZWZpbml0aW9u cyAqLworCisvKiBVc2VkIHRvIHNwZWVkIHVwIHRleHQtbW9kZSBQVVRzICovCisjZGVmaW5lIHp6 b3V0KGZkLGMpIFwKKygoZmQ8MCk/KC0xKTooKG5vdXQ+PXVjYnVmc2l6KT8oenpzZW5kKGZkLGMp KToodWNidWZbbm91dCsrXT1jKSkpCisKKyNkZWZpbmUgQ0hFQ0tDT05OKCkgaWYoIWNvbm5lY3Rl ZCl7cHJpbnRmKG5vY3gpO3JldHVybigtOSk7fQorCisvKiBFeHRlcm5hbHMgKi8KKworI2lmZGVm IENLX1VSTAorZXh0ZXJuIHN0cnVjdCB1cmxkYXRhIGdfdXJsOworI2VuZGlmIC8qIENLX1VSTCAq LworCisjaWZkZWYgRFlOQU1JQworZXh0ZXJuIGNoYXIgKnppbmJ1ZmZlciwgKnpvdXRidWZmZXI7 ICAgIC8qIFJlZ3VsYXIgS2VybWl0IGZpbGUgaS9vICovCisjZWxzZQorZXh0ZXJuIGNoYXIgemlu YnVmZmVyW10sIHpvdXRidWZmZXJbXTsKKyNlbmRpZiAvKiBEWU5BTUlDICovCitleHRlcm4gY2hh ciAqemlucHRyLCAqem91dHB0cjsKK2V4dGVybiBpbnQgemluY250LCB6b3V0Y250LCB6b2J1ZnNp emUsIGZuY2FjdDsKKworI2lmZGVmIENLX1RNUERJUgorZXh0ZXJuIGludCBmX3RtcGRpcjsgICAg ICAgICAgICAgICAgICAgIC8qIERpcmVjdG9yeSBjaGFuZ2VkIHRlbXBvcmFyaWx5ICovCitleHRl cm4gY2hhciBzYXZkaXJbXTsgICAgICAgICAgICAgICAgICAgLyogRm9yIHNhdmluZyBjdXJyZW50 IGRpcmVjdG9yeSAqLworZXh0ZXJuIGNoYXIgKiBkbGRpcjsKKyNlbmRpZiAvKiBDS19UTVBESVIg Ki8KKworZXh0ZXJuIGNoYXIgKiByZnNwZWMsICogc2ZzcGVjLCAqIHNyZnNwZWMsICogcnJmc3Bl YzsgLyogRm9yIFdIRVJFIGNvbW1hbmQgKi8KKworZXh0ZXJuIHh4X3N0cnAgeHhzdHJpbmc7Citl eHRlcm4gc3RydWN0IGtleXRhYiBvbm9mZltdLCB0eHRiaW5bXSwgcnBhdGh0YWJbXTsKK2V4dGVy biBpbnQgbnJwYXRodGFiLCB4ZmlsZXR5cGUsIHBhdHRlcm5zLCBnbmZlcnJvciwgbW92aW5nLCB3 aGF0LCBwa3RudW07CitleHRlcm4gaW50IHN1Y2Nlc3MsIG5maWxzLCBzbmRzcmMsIHF1aWV0LCBu b3B1c2gsIHJlY3Vyc2l2ZSwgaW5zZXJ2ZXIsIGJpbmFyeTsKK2V4dGVybiBpbnQgZmlsZXBlZWss IG5zY2FuZmlsZSwgZnNlY3MsIHhmZXJzdGF0LCB4ZmVybW9kZSwgbGFzdHhmZXIsIHRzZWNzOwor ZXh0ZXJuIGludCBiYWNrZ3JkLCBzcGFja2V0cywgcnBhY2tldHMsIHNwa3RsLCBycGt0bCwgeGFz a21vcmUsIGNtZF9yb3dzOworZXh0ZXJuIGludCBub2xpbmtzLCBtc2dmbGcsIGtlZXA7CitleHRl cm4gQ0tfT0ZGX1QgZnNpemUsIGZmYywgdGZjLCBzZW5kc3RhcnQsIHNuZHNtYWxsZXIsIHNuZGxh cmdlciwgcnNfbGVuOworZXh0ZXJuIGxvbmcgZmlsY250LCB4ZnNlY3MsIHRmY3BzLCBjcHMsIG9s ZGNwczsKKworI2lmZGVmIEZUUF9USU1FT1VUCitpbnQgZnRwX3RpbWVkX291dCA9IDA7Citsb25n IGZ0cF90aW1lb3V0ID0gMDsKKyNlbmRpZgkvKiBGVFBfVElNRU9VVCAqLworCisjaWZkZWYgR0ZU SU1FUgorZXh0ZXJuIENLRkxPQVQgZnB0c2VjcywgZnBmc2VjcywgZnB4ZnNlY3M7CisjZWxzZQor ZXh0ZXJuIGxvbmcgeGZzZWNzOworI2VuZGlmIC8qIEdGVElNRVIgKi8KKworZXh0ZXJuIGNoYXIg ZmlsbmFtW10sICogZmlsZWZpbGUsIG15aG9zdFtdOworZXh0ZXJuIGNoYXIgKiBzbmRfbW92ZSwg KiByY3ZfbW92ZSwgKiBzbmRfcmVuYW1lLCAqIHJjdl9yZW5hbWU7CitleHRlcm4gaW50IGdfc2tp cGJ1cCwgc2tpcGJ1cCwgc2VuZG1vZGU7CitleHRlcm4gaW50IGdfZGlzcGxhLCBmZGlzcGxhLCBk aXNwbGE7CisKKyNpZmRlZiBMT0NVUworZXh0ZXJuIGludCBsb2N1cywgYXV0b2xvY3VzOworI2Vu ZGlmIC8qIExPQ1VTICovCisKKyNpZm5kZWYgTk9DU0VUUworZXh0ZXJuIGludCBuZmlsYywgZGNz ZXQ3LCBkY3NldDgsIGZpbGVvcmRlcjsKK2V4dGVybiBzdHJ1Y3QgY3NpbmZvIGZjc2luZm9bXTsK K2V4dGVybiBzdHJ1Y3Qga2V5dGFiIGZjc3RhYltdOworZXh0ZXJuIGludCBmY2hhcnNldDsKKyNl bmRpZiAvKiBOT0NTRVRTICovCisKK2V4dGVybiBjaGFyIHNuZGJlZm9yZVtdLCBzbmRhZnRlcltd LCAqc25kZXhjZXB0W107IC8qIFNlbGVjdGlvbiBjcml0ZXJpYSAqLworZXh0ZXJuIGNoYXIgc25k bmJlZm9yZVtdLCBzbmRuYWZ0ZXJbXSwgKnJjdmV4Y2VwdFtdOworZXh0ZXJuIENIQVIgZmVvbDsK KworZXh0ZXJuIGNoYXIgKiByZW1kZXN0OworZXh0ZXJuIGludCByZW1maWxlLCByZW1hcHBkLCBy ZW1waXBlOworCisjaWZuZGVmIE5PU1BMCitleHRlcm4gaW50IGNtZF9xdW90aW5nOworI2lmZGVm IFBVVEFSUkFZCitleHRlcm4gaW50IHNuZHhsbywgc25keGhpLCBzbmR4aW47CitleHRlcm4gY2hh ciBzbmR4bmFtW107CitleHRlcm4gY2hhciAqKmFfcHRyW107ICAgICAgICAgICAgICAgICAgLyog QXJyYXkgcG9pbnRlcnMgKi8KK2V4dGVybiBpbnQgYV9kaW1bXTsgICAgICAgICAgICAgICAgICAg ICAvKiBBcnJheSBkaW1lbnNpb25zICovCisjZW5kaWYgLyogUFVUQVJSQVkgKi8KKyNlbmRpZiAv KiBOT1NQTCAqLworCisjaWZuZGVmIE5PTVNFTkQgICAgICAgICAgICAgICAgICAgICAgICAgLyog TVBVVCBhbmQgQUREIFNFTkQtTElTVCBsaXN0cyAqLworZXh0ZXJuIGNoYXIgKm1zZmlsZXNbXTsK K2V4dGVybiBpbnQgZmlsZXNpbmxpc3Q7CitleHRlcm4gc3RydWN0IGZpbGVsaXN0ICogZmlsZWhl YWQ7CitleHRlcm4gc3RydWN0IGZpbGVsaXN0ICogZmlsZXRhaWw7CitleHRlcm4gc3RydWN0IGZp bGVsaXN0ICogZmlsZW5leHQ7CitleHRlcm4gaW50IGFkZGxpc3Q7CitleHRlcm4gY2hhciBmc3Bl Y1tdOyAgICAgICAgICAgICAgICAgICAgLyogTW9zdCByZWNlbnQgZmlsZXNwZWMgKi8KK2V4dGVy biBpbnQgZnNwZWNsZW47ICAgICAgICAgICAgICAgICAgICAvKiBMZW5ndGggb2YgZnNwZWNbXSBi dWZmZXIgKi8KKyNlbmRpZiAvKiBOT01TRU5EICovCisKK2V4dGVybiBpbnQgcGlwZXNlbmQ7Cisj aWZkZWYgUElQRVNFTkQKK2V4dGVybiBjaGFyICogc25kZmlsdGVyLCAqIHJjdmZpbHRlcjsKKyNl bmRpZiAvKiBQSVBFU0VORCAqLworCisjaWZkZWYgQ0tST09UCitleHRlcm4gaW50IGNrcm9vdGVy cjsKKyNlbmRpZiAvKiBDS1JPT1QgKi8KKworI2lmZGVmIEtSQjQKK2V4dGVybiBpbnQga3JiNF9h dXRvZ2V0OworX1BST1RPVFlQKGNoYXIgKiBja19rcmI0X3JlYWxtb2Zob3N0LChjaGFyICopKTsK KyNlbmRpZiAvKiBLUkI0ICovCisKKyNpZmRlZiBLUkI1CitleHRlcm4gaW50IGtyYjVfYXV0b2dl dDsKK2V4dGVybiBpbnQga3JiNV9kX25vX2FkZHJlc3NlczsKK19QUk9UT1RZUChjaGFyICogY2tf a3JiNV9yZWFsbW9maG9zdCwoY2hhciAqKSk7CisjZW5kaWYgLyogS1JCNSAqLworCisjaWZkZWYg RENNREJVRgorZXh0ZXJuIGNoYXIgKmF0bWJ1ZjsgICAgICAgICAgICAgICAgICAgIC8qIEF0b20g YnVmZmVyIChtYWxsb2MnZCkgKi8KK2V4dGVybiBjaGFyICpjbWRidWY7ICAgICAgICAgICAgICAg ICAgICAvKiBDb21tYW5kIGJ1ZmZlciAobWFsbG9jJ2QpICovCitleHRlcm4gY2hhciAqbGluZTsg ICAgICAgICAgICAgICAgICAgICAgLyogQmlnIHN0cmluZyBidWZmZXIgIzEgKi8KK2V4dGVybiBj aGFyICp0bXBidWY7ICAgICAgICAgICAgICAgICAgICAvKiBCaWcgc3RyaW5nIGJ1ZmZlciAjMiAq LworI2Vsc2UKK2V4dGVybiBjaGFyIGF0bWJ1ZltdOyAgICAgICAgICAgICAgICAgICAvKiBUaGUg c2FtZSwgYnV0IHN0YXRpYyAqLworZXh0ZXJuIGNoYXIgY21kYnVmW107CitleHRlcm4gY2hhciBs aW5lW107CitleHRlcm4gY2hhciB0bXBidWZbXTsKKyNlbmRpZiAvKiBEQ01EQlVGICovCisKK2V4 dGVybiBjaGFyICogY21hcmcsICogY21hcmcyLCAqKiBjbWxpc3Q7IC8qIEZvciBzZXR0aW5nIHVw IGZpbGUgbGlzdHMgKi8KKworLyogUHVibGljIHZhcmlhYmxlcyBkZWNsYXJlZCBoZXJlICovCisK KyNpZmRlZiBOT1hGRVIKK2ludCBmdHBnZXQgID0gIDE7ICAgICAgICAgICAgICAgICAgICAgICAv KiBHRVQvUFVUL1JFTU9URSBvcmllbnRhdGlvbiBGVFAgKi8KKyNlbHNlCitpbnQgZnRwZ2V0ICA9 ICAyOyAgICAgICAgICAgICAgICAgICAgICAgLyogR0VUL1BVVC9SRU1PVEUgb3JpZW50YXRpb24g QVVUTyAqLworI2VuZGlmIC8qIE5PWEZFUiAqLworaW50IGZ0cGNvZGUgPSAtMTsgICAgICAgICAg ICAgICAgICAgICAgIC8qIExhc3QgRlRQIHJlc3BvbnNlIGNvZGUgKi8KK2ludCBmdHBfY21kbGlu ID0gMDsgICAgICAgICAgICAgICAgICAgICAvKiBGVFAgaW52b2tlZCBmcm9tIGNvbW1hbmQgbGlu ZSAqLworaW50IGZ0cF9mYWkgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZUUCBmYWls dXJlIGNvdW50ICovCitpbnQgZnRwX2RlYiA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgLyog RlRQIGRlYnVnZ2luZyAqLworaW50IGZ0cF9kaXMgPSAtMTsJCQkvKiBGVFAgZGlzcGxheSBzdHls ZSAqLworaW50IGZ0cF9sb2cgPSAxOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZUUCBBdXRv LWxvZ2luICovCitpbnQgc2F2X2xvZyA9IC0xOworaW50IGZ0cF9hY3Rpb24gPSAwOyAgICAgICAg ICAgICAgICAgICAgIC8qIEZUUCBhY3Rpb24gZnJvbSBjb21tYW5kIGxpbmUgKi8KK2ludCBmdHBf ZGF0ZXMgPSAxOyAgICAgICAgICAgICAgICAgICAgICAvKiBTZXQgZmlsZSBkYXRlcyBmcm9tIHNl cnZlciAqLworaW50IGZ0cF94ZmVybW9kZSA9IFhNT0RFX0E7CQkvKiBGVFAtc3BlY2lmaWMgdHJh bnNmZXIgbW9kZSAqLworCitjaGFyIGZ0cF9yZXBseV9zdHJbRlRQX0JVRlNJWl0gPSAiIjsgICAg LyogTGFzdCBsaW5lIG9mIHByZXZpb3VzIHJlcGx5ICovCitjaGFyIGZ0cF9zcnZ0eXBbU1JWTkFN TEVOXSA9IHsgTlVMLCBOVUwgfTsgLyogU2VydmVyJ3Mgc3lzdGVtIHR5cGUgKi8KK2NoYXIgZnRw X3VzZXJfaG9zdFtNQVhfRE5TX05BTUVMRU5dPSAiIjsgLyogRlRQIGhvc3RuYW1lIHNwZWNpZmll ZCBieSB1c2VyICovCitjaGFyICogZnRwX2hvc3QgPSBOVUxMOyAgICAgICAgICAgICAgICAgLyog RlRQIGhvc3RuYW1lICovCitjaGFyICogZnRwX2xvZ25hbWUgPSBOVUxMOyAgICAgICAgICAgICAg LyogRlRQIHVzZXJuYW1lICovCitjaGFyICogZnRwX3JkaXIgPSBOVUxMOyAgICAgICAgICAgICAg ICAgLyogUmVtb3RlIGRpcmVjdG9yeSBmcm9tIGNtZGxpbmUgKi8KK2NoYXIgKiBmdHBfYXB3ID0g TlVMTDsJCQkvKiBBbm9ueW1vdXMgcGFzc3dvcmQgKi8KKworLyogRGVmaW5pdGlvbnMgYW5kIHR5 cGVkZWZzIG5lZWRlZCBmb3IgcHJvdG90eXBlcyAqLworCisjZGVmaW5lIHNpZ190IG15X3NpZ190 CisjZGVmaW5lIHNpZ3R5cGUgU0lHVFlQCit0eXBlZGVmIHNpZ3R5cGUgKCpzaWdfdCkoKTsKKwor LyogU3RhdGljIGdsb2JhbCB2YXJpYWJsZXMgKi8KKworc3RhdGljIGNoYXIgZnRwc25kYnVmW0ZU UF9CVUZTSVorNjRdOworCitzdGF0aWMgY2hhciAqIGZ0c19zdG8gPSBOVUxMOworCitzdGF0aWMg aW50IGZ0cHNuZHJldCA9IDA7CitzdGF0aWMgc3RydWN0IF9mdHBzbmQgeworICAgIHNpZ190IG9s ZGludHIsIG9sZGludHA7CisgICAgaW50ICAgICAgICAgICAgcmVwbHk7CisgICAgaW50ICAgICAg ICAgICAgaW5jcywKKyAgICAgICAgICAgICAgICAgICBvdXRjczsKKyAgICBjaGFyICogICAgICAg ICBjbWQsICogbG9jYWwsICogcmVtb3RlOworICAgIGludCAgICAgICAgICAgIGJ5dGVzOworICAg IGludCAgICAgICAgICAgIHJlc3RhcnQ7CisgICAgaW50ICAgICAgICAgICAgeGxhdGU7CisgICAg Y2hhciAqICAgICAgICAgbG1vZGU7Cit9IGZ0cHNuZDsKKworLyoKKyAgVGhpcyBpcyBqdXN0IGEg Zmlyc3Qgc3RhYiAtLSB0aGVzZSBzdHJpbmdzIHNob3VsZCBtYXRjaCBob3cgdGhlCisgIGNvcnJl c3BvbmRpbmcgRlRQIHNlcnZlcnMgaWRlbnRpZnkgdGhlbXNlbHZlcy4KKyovCisjaWZkZWYgVU5J WAorc3RhdGljIGNoYXIgKiBteW9zdHlwZSA9ICJVTklYIjsKKyNlbHNlCisjaWZkZWYgVk1TCisv KiBub3QgeWV0Li4uICovCitzdGF0aWMgY2hhciAqIG15b3N0eXBlID0gIlZNUyI7CisjZWxzZQor I2lmZGVmIE9TMgorI2lmZGVmIE5UCitzdGF0aWMgY2hhciAqIG15b3N0eXBlID0gIldJTjMyIjsK KyNlbHNlCitzdGF0aWMgY2hhciAqIG15b3N0eXBlID0gIk9TLzIiOworI2VuZGlmIC8qIE5UICov CisjZWxzZQorc3RhdGljIGNoYXIgKiBteW9zdHlwZSA9ICJVTlNVUFBPUlRFRCI7CisjZW5kaWYg LyogT1MyICAqLworI2VuZGlmIC8qIFZNUyAqLworI2VuZGlmIC8qIFVOSVggKi8KKworc3RhdGlj IGludCBub2luaXQgPSAwOyAgICAgICAgICAgICAgICAgIC8qIERvbid0IHNlbmQgUkVTVCwgU1RS VSwgTU9ERSAqLworc3RhdGljIGludCBhbGlrZSA9IDA7ICAgICAgICAgICAgICAgICAgIC8qIENs aWVudC9zZXJ2ZXIgbGlrZSBwbGF0Zm9ybXMgKi8KK3N0YXRpYyBpbnQgbG9jYWwgPSAxOyAgICAg ICAgICAgICAgICAgICAvKiBTaGFkb3dzIEtlcm1pdCBnbG9iYWwgJ2xvY2FsJyAqLworc3RhdGlj IGludCBkb3V0ID0gLTE7ICAgICAgICAgICAgICAgICAgIC8qIERhdGEgY29ubmVjdGlvbiBmaWxl IGRlc2NyaXB0b3IgKi8KK3N0YXRpYyBpbnQgZHB5YWN0aXZlID0gMDsgICAgICAgICAgICAgICAv KiBEYXRhIHRyYW5zZmVyIGlzIGFjdGl2ZSAqLworc3RhdGljIGludCBnbG9iYWxkaW4gPSAtMTsg ICAgICAgICAgICAgIC8qIERhdGEgY29ubmVjdGlvbiBmLmQuICovCitzdGF0aWMgaW50IG91dDJz Y3JlZW4gPSAwOyAgICAgICAgICAgICAgLyogR0VUIG91dHB1dCBpcyB0byBzY3JlZW4gKi8KK3N0 YXRpYyBpbnQgZm9yY2V0eXBlID0gMDsgICAgICAgICAgICAgICAvKiBGb3JjZSB0ZXh0IG9yIGJp bmFyeSBtb2RlICovCitzdGF0aWMgaW50IGNhbmNlbGZpbGUgPSAwOyAgICAgICAgICAgICAgLyog RmlsZSBjYW5jZWxlZCAqLworc3RhdGljIGludCBjYW5jZWxncm91cCA9IDA7ICAgICAgICAgICAg IC8qIEdyb3VwIGNhbmNlbGVkICovCitzdGF0aWMgaW50IGFub255bW91cyA9IDA7ICAgICAgICAg ICAgICAgLyogTG9nZ2luZyBpbiBhcyBhbm9ueW1vdXMgKi8KK3N0YXRpYyBpbnQgbG9nZ2VkaW4g PSAwOyAgICAgICAgICAgICAgICAvKiBMb2dnZWQgaW4gKG9yIG5vdCkgKi8KK3N0YXRpYyBpbnQg cHV0ZXJyb3IgPSAwOyAgICAgICAgICAgICAgICAvKiBXaGF0IHRvIGRvIG9uIFBVVCBlcnJvciAq Lworc3RhdGljIGludCBnZXRlcnJvciA9IDA7ICAgICAgICAgICAgICAgIC8qIFdoYXQgdG8gZG8g b24gR0VUIGVycm9yICovCitzdGF0aWMgaW50IHJmcmMgPSAwOyAgICAgICAgICAgICAgICAgICAg LyogcmVtb3RlX2ZpbGVzKCkgcmV0dXJuIGNvZGUgKi8KK3N0YXRpYyBpbnQgb2tyZXN0YXJ0ID0g MDsgICAgICAgICAgICAgICAvKiBTZXJ2ZXIgdW5kZXJzdGFuZHMgUkVTVCAqLworc3RhdGljIGlu dCBwcmludGxpbmVzID0gMDsgICAgICAgICAgICAgIC8qIGdldHJlcGx5KClzaG91bGQgcHJpbnQg ZGF0YSBsaW5lcyAqLworc3RhdGljIGludCBoYXZldXJsID0gMDsgICAgICAgICAgICAgICAgIC8q IEludm9rZWQgYnkgY29tbWFuZC1saW5lIEZUUCBVUkwgKi8KK3N0YXRpYyBpbnQgbWR0bW9rID0g MTsJCQkvKiBTZXJ2ZXIgc3VwcG9ydHMgTURUTSAqLworc3RhdGljIGludCBzaXplb2sgPSAxOwor c3RhdGljIGludCBmZWF0b2sgPSAxOworc3RhdGljIGludCBtbHN0b2sgPSAxOworc3RhdGljIGlu dCBzdG91YXJnID0gMTsKK3N0YXRpYyBpbnQgdHlwZXNlbnQgPSAwOworc3RhdGljIGludCBoYXZl c2lnaW50ID0gMDsKK3N0YXRpYyBsb25nIGhhdmV0eXBlID0gIDA7CitzdGF0aWMgQ0tfT0ZGX1Qg aGF2ZXNpemUgPSAoQ0tfT0ZGX1QpLTE7CitzdGF0aWMgY2hhciAqIGhhdmVtZHRtID0gTlVMTDsK K3N0YXRpYyBpbnQgbWdldG1ldGhvZCA9IDA7CQkvKiBOTFNUIG9yIE1MU0QgKi8KK3N0YXRpYyBp bnQgbWdldGZvcmNlZCA9IDA7CisKK3N0YXRpYyBpbnQgaSwgLyogaiwgaywgKi8geCwgeSwgejsg ICAgICAvKiBWb2xhdGlsZSB0ZW1wb3JhcmllcyAqLworc3RhdGljIGludCBjMCwgYzE7ICAgICAg ICAgICAgICAgICAgICAgIC8qIFRlbXAgdmFyaWFibGVzIGZvciBjaGFyYWN0ZXJzICovCisKK3N0 YXRpYyBjaGFyIHB1dHBhdGhbQ0tNQVhQQVRIKzFdID0geyBOVUwsIE5VTCB9Oworc3RhdGljIGNo YXIgYXNuYW1idWZbQ0tNQVhQQVRIKzFdID0geyBOVUwsIE5VTCB9OworCisjZGVmaW5lIFJGTkJV RlNJWiA0MDk2CQkJLyogUmVtb3RlIGZpbGVuYW1lIGJ1ZmZlciBzaXplICovCisKK3N0YXRpYyB1 bnNpZ25lZCBpbnQgbWF4YnVmID0gMCwgYWN0dWFsYnVmID0gMDsKK3N0YXRpYyBDSEFSICp1Y2J1 ZiA9IE5VTEw7CitzdGF0aWMgaW50IHVjYnVmc2l6ID0gMDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQg bm91dCA9IDA7ICAgICAgICAgICAvKiBOdW1iZXIgb2YgY2hhcnMgaW4gdWNidWYgKi8KKworc3Rh dGljIGptcF9idWYgcmVjdmNhbmNlbDsKK3N0YXRpYyBqbXBfYnVmIHNlbmRjYW5jZWw7CitzdGF0 aWMgam1wX2J1ZiBwdGNhbmNlbDsKK3N0YXRpYyBqbXBfYnVmIGpjYW5jZWw7CitzdGF0aWMgaW50 IHB0YWJmbGcgPSAwOworCisvKiBQcm90ZWN0aW9uIGxldmVsIHN5bWJvbHMgKi8KKworI2RlZmlu ZSBGUExfQ0xSIDEgICAgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyICovCisjZGVmaW5lIEZQ TF9TQUYgMiAgICAgICAgICAgICAgICAgICAgICAgLyogU2FmZSAqLworI2RlZmluZSBGUExfUFJW IDMgICAgICAgICAgICAgICAgICAgICAgIC8qIFByaXZhdGUgKi8KKyNkZWZpbmUgRlBMX0NPTiA0 ICAgICAgICAgICAgICAgICAgICAgICAvKiBDb25maWRlbnRpYWwgKi8KKworLyogU3ltYm9scyBm b3IgZmlsZSB0eXBlcyByZXR1cm5lZCBieSBNTFNUL01MU0QgKi8KKworI2RlZmluZSBGVFlQX0ZJ TEUgMQkJCS8qIFJlZ3VsYXIgZmlsZSAqLworI2RlZmluZSBGVFlQX0RJUiAgMgkJCS8qIERpcmVj dG9yeSAqLworI2RlZmluZSBGVFlQX0NESVIgMwkJCS8qIEN1cnJlbnQgZGlyZWN0b3J5ICovCisj ZGVmaW5lIEZUWVBfUERJUiA0CQkJLyogUGFyZW50IGRpcmVjdG9yeSAqLworCisvKiBGaWxlIHR5 cGUgc3ltYm9scyBrZXllZCB0byB0aGUgZmlsZS10eXBlIHN5bWJvbHMgZnJvbSBja2NrZXIuaCAq LworCisjZGVmaW5lIEZUVF9BU0MgWFlGVF9UICAgICAgICAgICAgICAgICAgLyogQVNDSUkgKHRl eHQpICovCisjZGVmaW5lIEZUVF9CSU4gWFlGVF9CICAgICAgICAgICAgICAgICAgLyogQmluYXJ5 IChpbWFnZSkgKi8KKyNkZWZpbmUgRlRUX1RFTiBYWUZUX1ggICAgICAgICAgICAgICAgICAvKiBU RU5FWCAoVE9QUy0yMCkgKi8KKworLyogU2VydmVyIGZlYXR1cmUgdGFibGUgLSBzZnR0YWJbMF0g PiAwIG1lYW5zIHNlcnZlciBzdXBwb3J0cyBGRUFUIGFuZCBPUFRTICovCisKK3N0YXRpYyBpbnQg c2Z0dGFiWzE2XSA9IHsgMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCB9OworCisjZGVm aW5lIFNGVF9BVVRIICAxCQkJLyogRlRQIHNlcnZlciBmZWF0dXJlIGNvZGVzICovCisjZGVmaW5l IFNGVF9MQU5HICAyCisjZGVmaW5lIFNGVF9NRFRNICAzCisjZGVmaW5lIFNGVF9NTFNUICA0Cisj ZGVmaW5lIFNGVF9QQlNaICA1CisjZGVmaW5lIFNGVF9QUk9UICA2CisjZGVmaW5lIFNGVF9SRVNU ICA3CisjZGVmaW5lIFNGVF9TSVpFICA4CisjZGVmaW5lIFNGVF9UVkZTICA5CisjZGVmaW5lIFNG VF9VVEY4IDEwCisKKyNkZWZpbmUgQ05WX0FVVE8gIDIJCQkvKiBGVFAgZmlsZW5hbWUgY29udmVy c2lvbiAqLworI2RlZmluZSBDTlZfQ05WICAgMQorI2RlZmluZSBDTlZfTElUICAgMAorCisvKiBT RVQgRlRQIHZhbHVlcyAqLworCitzdGF0aWMgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogU0VUIEZUUCB2YWx1ZXMuLi4gKi8KKyAgZnRwX2F1dCA9IDEsICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBBdXRvLWF1dGhlbnRpY2F0aW9uICovCisjaWZkZWYgRlRQX1NFQ1VSSVRZ CisgIGZ0cF9jcnkgPSAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQXV0by1lbmNyeXB0 aW9uICovCisgIGZ0cF9jZncgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ3JlZGVu dGlhbCBmb3J3YXJkaW5nICovCisjZW5kaWYgLyogRlRQX1NFQ1VSSVRZICovCisgIGZ0cF9jcGwg PSBGUExfQ0xSLCAgICAgICAgICAgICAgICAgICAgLyogQ29tbWFuZCBwcm90ZWN0aW9uIGxldmVs ICovCisgIGZ0cF9kcGwgPSBGUExfQ0xSLCAgICAgICAgICAgICAgICAgICAgLyogRGF0YSBwcm90 ZWN0aW9uIGxldmVsICovCisjaWZkZWYgRlRQX1BST1hZCisgIGZ0cF9wcnggPSAwLCAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogVXNlIHByb3h5ICovCisjZW5kaWYgLyogRlRQX1BST1hZICov CisgIHNhdl9wc3YgPSAtMSwgICAgICAgICAgICAgICAgICAgICAgICAgLyogRm9yIHNhdmluZyBw YXNzaXZlIG1vZGUgKi8KKyAgZnRwX3BzdiA9IDEsICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBQYXNzaXZlIG1vZGUgKi8KKyAgZnRwX3NwYyA9IDEsICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBTZW5kIHBvcnQgY29tbWFuZHMgKi8KKyAgZnRwX3R5cCA9IEZUVF9BU0MsICAgICAgICAg ICAgICAgICAgICAvKiBUeXBlICovCisgIGdldF9hdXRvID0gMSwgICAgICAgICAgICAgICAgICAg ICAgICAgLyogQXV0b21hdGljIHR5cGUgc3dpdGNoaW5nIGZvciBHRVQgKi8KKyAgdGVuZXggPSAw LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUeXBlIGlzIFRlbmV4ICovCisgIGZ0cF91 c24gPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVW5pcXVlIHNlcnZlciBuYW1lcyAq LworICBmdHBfcHJtID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBlcm1pc3Npb25z ICovCisgIGZ0cF9jbnYgPSBDTlZfQVVUTywJCQkvKiBGaWxlbmFtZSBjb252ZXJzaW9uICgyID0g YXV0bykgKi8KKyAgZnRwX3ZibSA9IERFRl9WQk0sICAgICAgICAgICAgICAgICAgICAvKiBWZXJi b3NlIG1vZGUgKi8KKyAgZnRwX3ZieCA9IERFRl9WQk0sICAgICAgICAgICAgICAgICAgICAvKiBT dGlja3kgdmVyc2lvbiBvZiBzYW1lICovCisgIGZ0cF9lcnIgPSAwLCAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogRXJyb3IgYWN0aW9uICovCisgIGZ0cF9mbmMgPSAtMTsgICAgICAgICAgICAg ICAgICAgICAgICAgLyogRmlsZW5hbWUgY29sbGlzaW9uIGFjdGlvbiAqLworCisjaWZkZWYgQ0tf U1NMCitzdGF0aWMgaW50IGZ0cF9idWdfdXNlX3NzbF92MiA9IDA7ICAgICAgLyogdXNlIFNTTHYy IGZvciBBVVRIIFNTTCAqLworI2VuZGlmIC8qIENLX1NTTCAqLworCitzdGF0aWMgaW50CisjaWZk ZWYgTk9DU0VUUworICBmdHBfY3NyID0gLTEsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJl bW90ZSAoc2VydmVyKSBjaGFyYWN0ZXIgc2V0ICovCisjZWxzZQorICBmdHBfY3NyID0gRkNfVVRG OCwKKyNlbmRpZiAvKiBOT0NTRVRTICovCisgIGZ0cF94bGEgPSAwOyAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogQ2hhcmFjdGVyLXNldCB0cmFuc2xhdGlvbiBvbi9vZmYgKi8KK2ludAorICBm dHBfY3N4ID0gLTEsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlbW90ZSBjaGFyc2V0IGN1 cnJlbnRseSBpbiB1c2UgKi8KKyAgZnRwX2NzbCA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBMb2NhbCBjaGFyc2V0IGN1cnJlbnRseSBpbiB1c2UgKi8KKworc3RhdGljIGludCBnX2Z0 cF90eXAgPSBGVFRfQVNDOyAgICAgICAgIC8qIEZvciBzYXZpbmcgYW5kIHJlc3RvcmluZyBmdHBf dHlwICovCisKK2NoYXIgKiBmdHBfbm1sID0gTlVMTDsgICAgICAgICAgICAgICAgICAvKiAvTkFN RUxJU1QgKi8KK2NoYXIgKiBmdHBfdG1wID0gTlVMTDsgICAgICAgICAgICAgICAgICAvKiBUZW1w b3Jhcnkgc3RyaW5nICovCitzdGF0aWMgY2hhciAqIGZ0cF9hY2MgPSBOVUxMOyAgICAgICAgICAg LyogQWNjb3VudCBzdHJpbmcgKi8KK3N0YXRpYyBjaGFyICogYXV0aF90eXBlID0gTlVMTDsgICAg ICAgICAvKiBBdXRoZW50aWNhdGlvbiB0eXBlICovCitzdGF0aWMgY2hhciAqIHNydl9yZW5hbSA9 IE5VTEw7ICAgICAgICAgLyogU2VydmVyLXJlbmFtZSBzdHJpbmcgKi8KK0ZJTEUgKiBmcF9ubWwg PSBOVUxMOyAgICAgICAgICAgICAgICAgICAvKiBOYW1lbGlzdCBmaWxlIHBvaW50ZXIgKi8KKwor c3RhdGljIGludCBjc29ja2V0ID0gLTE7ICAgICAgICAgICAgICAgIC8qIENvbnRyb2wgc29ja2V0 ICovCitzdGF0aWMgaW50IGNvbm5lY3RlZCA9IDA7ICAgICAgICAgICAgICAgLyogQ29ubmVjdGVk IHRvIEZUUCBzZXJ2ZXIgKi8KKy8qIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBmdHBfcG9ydCA9IDA7 ICovIC8qIEZUUCBwb3J0ICovIAorLyogc3RhdGljIGludCBmdHBfcG9ydCA9IDA7ICovCQkvKiBT TVMgMjAwNy8wMi8xNSAqLworc3RhdGljIGludCBmdHBfcG9ydCA9IDA7CQkvKiBmZGMgMjAwNy8w OC8zMCAqLworI2lmZGVmIEZUUEhPU1QKK3N0YXRpYyBpbnQgaG9zdGNtZCA9IDA7ICAgICAgICAg ICAgICAgICAvKiBIYXMgSE9TVCBjb21tYW5kIGJlZW4gc2VudCAqLworI2VuZGlmIC8qIEZUUEhP U1QgKi8KK3N0YXRpYyBpbnQgZm9ybSwgbW9kZSwgc3RydSwgYnl0ZXNpemUsIGN1cnR5cGUgPSBG VFRfQVNDOworc3RhdGljIGNoYXIgYnl0ZW5hbWVbOF07CisKKy8qIEZvciBwYXJzaW5nIHJlcGxp ZXMgdG8gRlRQIHNlcnZlciBjb21tYW5kICovCitzdGF0aWMgY2hhciAqcmVwbHlfcGFyc2UsIHJl cGx5X2J1ZltGVFBfQlVGU0laXSwgKnJlcGx5X3B0cjsKKworI2lmZGVmIEZUUF9QUk9YWQorc3Rh dGljIGludCBwcm94eSwgdW5peF9wcm94eQorI2VuZGlmIC8qIEZUUF9QUk9YWSAqLworCitzdGF0 aWMgY2hhciBwYXN2WzY0XTsgICAgICAgICAgICAgICAgICAgLyogUGFzc2l2ZS1tb2RlIHBvcnQg Ki8KK3N0YXRpYyBpbnQgcGFzc2l2ZW1vZGUgPSAwOworc3RhdGljIGludCBzZW5kcG9ydCA9IDA7 CitzdGF0aWMgaW50IHNlcnZlcnR5cGUgPSAwOyAgICAgICAgICAgICAgLyogRlRQIHNlcnZlcidz IE9TIHR5cGUgKi8KKworc3RhdGljIGludCB0ZXN0aW5nID0gMDsKK3N0YXRpYyBjaGFyIGZ0cGNt ZGJ1ZltGVFBfQlVGU0laXTsKKworLyogTWFjcm8gZGVmaW5pdGlvbnMgKi8KKworI2RlZmluZSBV QyhiKSBja2l0b2EoKChpbnQpYikmMHhmZikKKyNkZWZpbmUgbnooeCkgKCh4KSA9PSAwID8gMSA6 ICh4KSkKKworLyogQ29tbWFuZCB0YWJsZXMgYW5kIGRlZmluaXRpb25zICovCisKKyNkZWZpbmUg RlRQX0FDQyAgMSAgICAgICAgICAgICAgICAgICAgICAvKiBGVFAgY29tbWFuZCBrZXl3b3JkIGNv ZGVzICovCisjZGVmaW5lIEZUUF9BUFAgIDIKKyNkZWZpbmUgRlRQX0NXRCAgMworI2RlZmluZSBG VFBfQ0hNICA0CisjZGVmaW5lIEZUUF9DTFMgIDUKKyNkZWZpbmUgRlRQX0RFTCAgNgorI2RlZmlu ZSBGVFBfRElSICA3CisjZGVmaW5lIEZUUF9HRVQgIDgKKyNkZWZpbmUgRlRQX0lETCAgOQorI2Rl ZmluZSBGVFBfTURFIDEwCisjZGVmaW5lIEZUUF9NREkgMTEKKyNkZWZpbmUgRlRQX01HRSAxMgor I2RlZmluZSBGVFBfTUtEIDEzCisjZGVmaW5lIEZUUF9NT0QgMTQKKyNkZWZpbmUgRlRQX01QVSAx NQorI2RlZmluZSBGVFBfT1BOIDE2CisjZGVmaW5lIEZUUF9QVVQgMTcKKyNkZWZpbmUgRlRQX1BX RCAxOAorI2RlZmluZSBGVFBfUkdFIDE5CisjZGVmaW5lIEZUUF9SRU4gMjAKKyNkZWZpbmUgRlRQ X1JFUyAyMQorI2RlZmluZSBGVFBfSExQIDIyCisjZGVmaW5lIEZUUF9STUQgMjMKKyNkZWZpbmUg RlRQX1NUQSAyNAorI2RlZmluZSBGVFBfU0lUIDI1CisjZGVmaW5lIEZUUF9TSVogMjYKKyNkZWZp bmUgRlRQX1NZUyAyNworI2RlZmluZSBGVFBfVU1BIDI4CisjZGVmaW5lIEZUUF9HVVAgMjkKKyNk ZWZpbmUgRlRQX1VTUiAzMAorI2RlZmluZSBGVFBfUVVPIDMxCisjZGVmaW5lIEZUUF9UWVAgMzIK KyNkZWZpbmUgRlRQX0ZFQSAzMworI2RlZmluZSBGVFBfT1BUIDM0CisjZGVmaW5lIEZUUF9DSEsg MzUKKyNkZWZpbmUgRlRQX1ZESSAzNgorI2RlZmluZSBGVFBfRU5BIDM3CisjZGVmaW5lIEZUUF9E SVMgMzgKKyNkZWZpbmUgRlRQX1JFUCAzOQorCitzdHJ1Y3Qga2V5dGFiIGdwcnRhYltdID0geyAg ICAgICAgICAgICAgLyogR0VULVBVVC1SRU1PVEUga2V5d29yZHMgKi8KKyAgICB7ICJhdXRvIiwg ICAgMiwgMCB9LAorICAgIHsgImZ0cCIsICAgICAxLCAwIH0sCisgICAgeyAia2VybWl0IiwgIDAs IDAgIH0KK307CisKK3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIHFvcnBbXSA9IHsgICAgICAgICAvKiBR VUlUIG9yIFBST0NFRUQga2V5d29yZHMgKi8KKyAgICB7ICJwcm9jZWVkIiwgMCwgMCB9LCAgICAg ICAgICAgICAgICAvKiAwID0gcHJvY2VlZCAqLworICAgIHsgInF1aXQiLCAgICAxLCAwIH0gICAg ICAgICAgICAgICAgIC8qIDEgPSBxdWl0ICovCit9OworCitzdGF0aWMgc3RydWN0IGtleXRhYiBm dHBjbWR0YWJbXSA9IHsgICAgLyogRlRQIGNvbW1hbmQgdGFibGUgKi8KKyAgICB7ICJhY2NvdW50 IiwgICBGVFBfQUNDLCAwIH0sCisgICAgeyAiYXBwZW5kIiwgICAgRlRQX0FQUCwgMCB9LAorICAg IHsgImJ5ZSIsICAgICAgIEZUUF9DTFMsIDAgfSwKKyAgICB7ICJjZCIsICAgICAgICBGVFBfQ1dE LCAwIH0sCisgICAgeyAiY2R1cCIsICAgICAgRlRQX0dVUCwgMCB9LAorICAgIHsgImNoZWNrIiwg ICAgIEZUUF9DSEssIDAgfSwKKyAgICB7ICJjaG1vZCIsICAgICBGVFBfQ0hNLCAwIH0sCisgICAg eyAiY2xvc2UiLCAgICAgRlRQX0NMUywgMCB9LAorICAgIHsgImN3ZCIsICAgICAgIEZUUF9DV0Qs IENNX0lOViB9LAorICAgIHsgImRlbGV0ZSIsICAgIEZUUF9NREUsIDAgfSwKKyAgICB7ICJkaXJl Y3RvcnkiLCBGVFBfRElSLCAwIH0sCisgICAgeyAiZGlzYWJsZSIsICAgRlRQX0RJUywgMCB9LAor ICAgIHsgImVuYWJsZSIsICAgIEZUUF9FTkEsIDAgfSwKKyAgICB7ICJmZWF0dXJlcyIsICBGVFBf RkVBLCAwIH0sCisgICAgeyAiZ2V0IiwgICAgICAgRlRQX0dFVCwgMCB9LAorICAgIHsgImhlbHAi LCAgICAgIEZUUF9ITFAsIDAgfSwKKyAgICB7ICJpZGxlIiwgICAgICBGVFBfSURMLCAwIH0sCisg ICAgeyAibG9naW4iLCAgICAgRlRQX1VTUiwgQ01fSU5WIH0sCisgICAgeyAibWRlbGV0ZSIsICAg RlRQX01ERSwgQ01fSU5WIH0sCisgICAgeyAibWdldCIsICAgICAgRlRQX01HRSwgMCB9LAorICAg IHsgIm1rZGlyIiwgICAgIEZUUF9NS0QsIDAgfSwKKyAgICB7ICJtb2R0aW1lIiwgICBGVFBfTU9E LCAwIH0sCisgICAgeyAibXB1dCIsICAgICAgRlRQX01QVSwgMCB9LAorICAgIHsgIm9wZW4iLCAg ICAgIEZUUF9PUE4sIDAgfSwKKyAgICB7ICJvcHQiLCAgICAgICBGVFBfT1BULCBDTV9JTlZ8Q01f QUJSIH0sCisgICAgeyAib3B0cyIsICAgICAgRlRQX09QVCwgQ01fSU5WIH0sCisgICAgeyAib3B0 aW9ucyIsICAgRlRQX09QVCwgMCB9LAorICAgIHsgInB1dCIsICAgICAgIEZUUF9QVVQsIDAgfSwK KyAgICB7ICJwd2QiLCAgICAgICBGVFBfUFdELCAwIH0sCisgICAgeyAicXVpdCIsICAgICAgRlRQ X0NMUywgQ01fSU5WIH0sCisgICAgeyAicXVvdGUiLCAgICAgRlRQX1FVTywgMCB9LAorICAgIHsg InJlZ2V0IiwgICAgIEZUUF9SR0UsIDAgfSwKKyAgICB7ICJyZW5hbWUiLCAgICBGVFBfUkVOLCAw IH0sCisgICAgeyAicmVwdXQiLCAgICAgRlRQX1JFUCwgMCB9LAorICAgIHsgInJlc2VuZCIsICAg IEZUUF9SRVAsIENNX0lOViB9LAorICAgIHsgInJlc2V0IiwgICAgIEZUUF9SRVMsIDAgfSwKKyAg ICB7ICJybWRpciIsICAgICBGVFBfUk1ELCAwIH0sCisgICAgeyAic2VuZCIsICAgICAgRlRQX1BV VCwgQ01fSU5WIH0sCisgICAgeyAic2l0ZSIsICAgICAgRlRQX1NJVCwgMCB9LAorICAgIHsgInNp emUiLCAgICAgIEZUUF9TSVosIDAgfSwKKyAgICB7ICJzdGF0dXMiLCAgICBGVFBfU1RBLCAwIH0s CisgICAgeyAic3lzdGVtIiwgICAgRlRQX1NZUywgMCB9LAorICAgIHsgInR5cGUiLCAgICAgIEZU UF9UWVAsIDAgfSwKKyAgICB7ICJ1bWFzayIsICAgICBGVFBfVU1BLCAwIH0sCisgICAgeyAidXAi LCAgICAgICAgRlRQX0dVUCwgQ01fSU5WIH0sCisgICAgeyAidXNlciIsICAgICAgRlRQX1VTUiwg MCB9LAorICAgIHsgInZkaXJlY3RvcnkiLEZUUF9WREksIDAgfSwKKyAgICB7ICIiLCAwLCAwIH0K K307CitzdGF0aWMgaW50IG5mdHBjbWQgPSAoc2l6ZW9mKGZ0cGNtZHRhYikgLyBzaXplb2Yoc3Ry dWN0IGtleXRhYikpIC0gMTsKKworI2RlZmluZSBPUE5fQU5PIDEJCQkvKiBGVFAgT1BFTiBzd2l0 Y2ggY29kZXMgKi8KKyNkZWZpbmUgT1BOX1BTVyAyCisjZGVmaW5lIE9QTl9VU1IgMworI2RlZmlu ZSBPUE5fQUNDIDQKKyNkZWZpbmUgT1BOX0FDVCA1CisjZGVmaW5lIE9QTl9QU1YgNgorI2RlZmlu ZSBPUE5fVExTIDcKKyNkZWZpbmUgT1BOX05JTiA4CisjZGVmaW5lIE9QTl9OT0wgOQorCisjaWZk ZWYgRlRQX1NFQ1VSSVRZCisjaWZkZWYgQ0tfU1NMCisjZGVmaW5lIFVTRVRMU1RBQgorc3RhdGlj IHN0cnVjdCBrZXl0YWIgdGxzdGFiW10gPSB7ICAgICAgIC8qIEZUUCBTU0wvVExTIHN3aXRjaGVz ICovCisgICAgeyAiL3NzbCIsICAgICAgIE9QTl9UTFMsIDAgICAgfSwKKyAgICB7ICIvdGxzIiwg ICAgICAgT1BOX1RMUywgMCAgICB9LAorICAgIHsgIiIsIDAsIDAgfQorfTsKK3N0YXRpYyBpbnQg bnRsc3RhYiA9IChzaXplb2YodGxzdGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSkgLSAxOwor I2VuZGlmIC8qIENLX1NTTCAqLworI2VuZGlmIC8qIEZUUF9TRUNVUklUWSAqLworCitzdGF0aWMg c3RydWN0IGtleXRhYiBmdHBzd2l0YWJbXSA9IHsgICAgLyogRlRQIGNvbW1hbmQgc3dpdGNoZXMg Ki8KKyAgICB7ICIvYWNjb3VudCIsICAgT1BOX0FDQywgQ01fQVJHIH0sCisgICAgeyAiL2FjdGl2 ZSIsICAgIE9QTl9BQ1QsIDAgICAgICB9LAorICAgIHsgIi9hbm9ueW1vdXMiLCBPUE5fQU5PLCAw ICAgICAgfSwKKyAgICB7ICIvbm9pbml0IiwgICAgT1BOX05JTiwgMCAgICAgIH0sCisgICAgeyAi L25vbG9naW4iLCAgIE9QTl9OT0wsIDAgICAgICB9LAorICAgIHsgIi9wYXNzaXZlIiwgICBPUE5f UFNWLCAwICAgICAgfSwKKyAgICB7ICIvcGFzc3dvcmQiLCAgT1BOX1BTVywgQ01fQVJHIH0sCisg ICAgeyAiL3VzZXIiLCAgICAgIE9QTl9VU1IsIENNX0FSRyB9LAorICAgIHsgIiIsIDAsIDAgfQor fTsKK3N0YXRpYyBpbnQgbmZ0cHN3aSA9IChzaXplb2YoZnRwc3dpdGFiKSAvIHNpemVvZihzdHJ1 Y3Qga2V5dGFiKSkgLSAxOworCisvKiBGVFAgeyBFTkFCTEUsIERJU0FCTEUgfSBpdGVtcyAqLwor CisjZGVmaW5lIEVOQV9GRUFUIDEKKyNkZWZpbmUgRU5BX01EVE0gMgorI2RlZmluZSBFTkFfTUxT VCAzCisjZGVmaW5lIEVOQV9TSVpFIDQKKyNkZWZpbmUgRU5BX0FVVEggNQorCitzdGF0aWMgc3Ry dWN0IGtleXRhYiBmdHBlbmF0YWJbXSA9IHsKKyAgICB7ICJBVVRIIiwgIEVOQV9BVVRILCAwIH0s CisgICAgeyAiRkVBVCIsICBFTkFfRkVBVCwgMCB9LAorICAgIHsgIk1EVE0iLCAgRU5BX01EVE0s IDAgfSwKKyAgICB7ICJNTCIsICAgIEVOQV9NTFNULCBDTV9JTlZ8Q01fQUJSIH0sCisgICAgeyAi TUxTIiwgICBFTkFfTUxTVCwgQ01fSU5WfENNX0FCUiB9LAorICAgIHsgIk1MU0QiLCAgRU5BX01M U1QsIENNX0lOViB9LAorICAgIHsgIk1MU1QiLCAgRU5BX01MU1QsIDAgfSwKKyAgICB7ICJTSVpF IiwgIEVOQV9TSVpFLCAwIH0sCisgICAgeyAiIiwgMCwgMCB9Cit9Oworc3RhdGljIGludCBuZnRw ZW5hID0gKHNpemVvZihmdHBlbmF0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKSAtIDE7CisK Ky8qIFNFVCBGVFAgY29tbWFuZCBrZXl3b3JkIGluZGljZXMgKi8KKworI2RlZmluZSBGVFNfQVVU ICAxICAgICAgICAgICAgICAgICAgICAgIC8qIEF1dG9hdXRoZW50aWNhdGlvbiAqLworI2RlZmlu ZSBGVFNfQ1JZICAyICAgICAgICAgICAgICAgICAgICAgIC8qIEVuY3J5cHRpb24gKi8KKyNkZWZp bmUgRlRTX0xPRyAgMyAgICAgICAgICAgICAgICAgICAgICAvKiBBdXRvbG9naW4gKi8KKyNkZWZp bmUgRlRTX0NQTCAgNCAgICAgICAgICAgICAgICAgICAgICAvKiBDb21tYW5kIHByb3RlY3Rpb24g bGV2ZWwgKi8KKyNkZWZpbmUgRlRTX0NGVyAgNSAgICAgICAgICAgICAgICAgICAgICAvKiBDcmVk ZW50aWFscyBmb3J3YXJkaW5nICovCisjZGVmaW5lIEZUU19EUEwgIDYgICAgICAgICAgICAgICAg ICAgICAgLyogRGF0YSBwcm90ZWN0aW9uIGxldmVsICovCisjZGVmaW5lIEZUU19EQkcgIDcgICAg ICAgICAgICAgICAgICAgICAgLyogRGVidWdnaW5nICovCisjZGVmaW5lIEZUU19QU1YgIDggICAg ICAgICAgICAgICAgICAgICAgLyogUGFzc2l2ZSBtb2RlICovCisjZGVmaW5lIEZUU19TUEMgIDkg ICAgICAgICAgICAgICAgICAgICAgLyogU2VuZCBwb3J0IGNvbW1hbmRzICovCisjZGVmaW5lIEZU U19UWVAgMTAgICAgICAgICAgICAgICAgICAgICAgLyogKGZpbGUpIFR5cGUgKi8KKyNkZWZpbmUg RlRTX1VTTiAxMSAgICAgICAgICAgICAgICAgICAgICAvKiBVbmlxdWUgc2VydmVyIG5hbWVzIChm b3IgZmlsZXMpICovCisjZGVmaW5lIEZUU19WQk0gMTIgICAgICAgICAgICAgICAgICAgICAgLyog VmVyYm9zZSBtb2RlICovCisjZGVmaW5lIEZUU19BVFAgMTMgICAgICAgICAgICAgICAgICAgICAg LyogQXV0aGVudGljYXRpb24gdHlwZSAqLworI2RlZmluZSBGVFNfQ05WIDE0ICAgICAgICAgICAg ICAgICAgICAgIC8qIEZpbGVuYW1lIGNvbnZlcnNpb24gKi8KKyNkZWZpbmUgRlRTX1RTVCAxNSAg ICAgICAgICAgICAgICAgICAgICAvKiBUZXN0IChwcm9ncmVzcykgbWVzc2FnZXMgKi8KKyNkZWZp bmUgRlRTX1BSTSAxNiAgICAgICAgICAgICAgICAgICAgICAvKiAoZmlsZSkgUGVybWlzc2lvbnMg Ki8KKyNkZWZpbmUgRlRTX1hMQSAxNyAgICAgICAgICAgICAgICAgICAgICAvKiBDaGFyc2V0IHRy YW5zbGF0aW9uICovCisjZGVmaW5lIEZUU19DU1IgMTggICAgICAgICAgICAgICAgICAgICAgLyog U2VydmVyIGNoYXJzZXQgKi8KKyNkZWZpbmUgRlRTX0VSUiAxOSAgICAgICAgICAgICAgICAgICAg ICAvKiBFcnJvciBhY3Rpb24gKi8KKyNkZWZpbmUgRlRTX0ZOQyAyMCAgICAgICAgICAgICAgICAg ICAgICAvKiBDb2xsaXNpb24gKi8KKyNkZWZpbmUgRlRTX1NSUCAyMSAgICAgICAgICAgICAgICAg ICAgICAvKiBTUlAgb3B0aW9ucyAqLworI2RlZmluZSBGVFNfR0ZUIDIyICAgICAgICAgICAgICAg ICAgICAgIC8qIEdFVCBhdXRvbWF0aWMgZmlsZS10eXBlIHN3aXRjaGluZyAqLworI2RlZmluZSBG VFNfREFUIDIzICAgICAgICAgICAgICAgICAgICAgIC8qIFNldCBmaWxlIGRhdGVzICovCisjZGVm aW5lIEZUU19TVE8gMjQJCQkvKiBTZXJ2ZXIgdGltZSBvZmZzZXQgKi8KKyNkZWZpbmUgRlRTX0FQ VyAyNQkJCS8qIEFub255bW91cyBwYXNzd29yZCAqLworI2RlZmluZSBGVFNfRElTIDI2CQkJLyog RmlsZS10cmFuc2ZlciBkaXNwbGF5IHN0eWxlICovCisjZGVmaW5lIEZUU19CVUcgMjcgICAgICAg ICAgICAgICAgICAgICAgLyogQnVnKHMpICovCisjZGVmaW5lIEZUU19UTU8gMjgJCQkvKiBUaW1l b3V0ICovCisKKy8qIEZUUCBCVUdTICovCisKKyNkZWZpbmUgRlRCX1NWMiAgMSAgICAgICAgICAg ICAgICAgICAgICAvKiB1c2UgU1NMdjIgKi8KKworc3RhdGljIHN0cnVjdCBrZXl0YWIgZnRwYnVn dGFiW10gPSB7CisgICAgeyAidXNlLXNzbC12MiIsICAgICBGVEJfU1YyLCAgICAgICAgMCB9Cit9 Oworc3RhdGljIGludCBuZnRwYnVnID0gKHNpemVvZihmdHBidWd0YWIpIC8gc2l6ZW9mKHN0cnVj dCBrZXl0YWIpKTsKKworLyogRlRQIFBVVCBvcHRpb25zIChtdXR1YWxseSBleGNsdXNpdmUsIG5v dCBhIGJpdG1hc2spICovCisKKyNkZWZpbmUgUFVUX1VQRCAxICAgICAgICAgICAgICAgICAgICAg ICAvKiBVcGRhdGUgKi8KKyNkZWZpbmUgUFVUX1JFUyAyICAgICAgICAgICAgICAgICAgICAgICAv KiBSZXN0YXJ0ICovCisjZGVmaW5lIFBVVF9TSU0gNCAgICAgICAgICAgICAgICAgICAgICAgLyog U2ltdWxhdGlvbiAqLworI2RlZmluZSBQVVRfRElGIDgJCQkvKiBEYXRlcyBEaWZmZXIgKi8KKwor c3RhdGljIHN0cnVjdCBrZXl0YWIgZnRwY29seHRhYltdID0geyAvKiBTRVQgRlRQIENPTExJU0lP TiBvcHRpb25zICovCisjaWZuZGVmIE1BQworICAgIHsgImFwcGVuZCIsICAgIFhZRlhfQSwgMCB9 LCAgICAgICAgIC8qIGFwcGVuZCB0byBvbGQgZmlsZSAqLworI2VuZGlmIC8qIE1BQyAqLworI2lm ZGVmIENPTU1FTlQKKyAgICB7ICJhc2siLCAgICAgICBYWUZYX1EsIDAgfSwgICAgICAgICAvKiBh c2sgd2hhdCB0byBkbyAobm90IGltcGxlbWVudGVkKSAqLworI2VuZGlmCisgICAgeyAiYmFja3Vw IiwgICAgWFlGWF9CLCAwIH0sICAgICAgICAgLyogcmVuYW1lIG9sZCBmaWxlICovCisjaWZuZGVm IE1BQworICAgIHsgImRhdGVzLWRpZmZlciIsIFhZRlhfTSwgMCB9LAkvKiBhY2NlcHQgaWYgZGF0 ZXMgZGlmZmVyICovCisgICAgeyAiZGlzY2FyZCIsICAgWFlGWF9ELCAwIH0sICAgICAgICAgLyog ZG9uJ3QgYWNjZXB0IG5ldyBmaWxlICovCisgICAgeyAibm8tc3VwZXJzZWRlIiwgWFlGWF9ELCBD TV9JTlYgfSwgLyogZGl0dG8gKE1TSyBjb21wYXRpYmlsaXR5KSAqLworI2VuZGlmIC8qIE1BQyAq LworICAgIHsgIm92ZXJ3cml0ZSIsIFhZRlhfWCwgMCB9LCAgICAgICAgIC8qIG92ZXJ3cml0ZSB0 aGUgb2xkIGZpbGUgKi8KKyAgICB7ICJyZW5hbWUiLCAgICBYWUZYX1IsIDAgfSwgICAgICAgICAv KiByZW5hbWUgdGhlIGluY29taW5nIGZpbGUgKi8KKyNpZm5kZWYgTUFDICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBUaGlzIGNyYXNoZXMgTWFjIEtlcm1pdC4gKi8KKyAgICB7ICJ1cGRh dGUiLCAgICBYWUZYX1UsIDAgfSwgICAgICAgICAvKiByZXBsYWNlIGlmIG5ld2VyICovCisjZW5k aWYgLyogTUFDICovCisgICAgeyAiIiwgMCwgMCB9Cit9Oworc3RhdGljIGludCBuZnRwY29seCA9 IChzaXplb2YoZnRwY29seHRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpIC0gMTsKKworCisj aWZkZWYgRlRQX1NFQ1VSSVRZCisvKiBGVFAgYXV0aGVudGljYXRpb24gb3B0aW9ucyAqLworCisj ZGVmaW5lIEZUQV9BVVRPIDAgICAgICAgICAgICAgICAgICAgICAgLyogQXV0byAqLworI2RlZmlu ZSBGVEFfU1JQICAxICAgICAgICAgICAgICAgICAgICAgIC8qIFNSUCAqLworI2RlZmluZSBGVEFf R0s1ICAyICAgICAgICAgICAgICAgICAgICAgIC8qIEtlcmJlcm9zIDUgKi8KKyNkZWZpbmUgRlRB X0s0ICAgMyAgICAgICAgICAgICAgICAgICAgICAvKiBLZXJiZXJvcyA0ICovCisjZGVmaW5lIEZU QV9TU0wgIDQgICAgICAgICAgICAgICAgICAgICAgLyogU1NMICovCisjZGVmaW5lIEZUQV9UTFMg IDUgICAgICAgICAgICAgICAgICAgICAgLyogVExTICovCisKKy8qIEZUUCBhdXRoZW50aWNhdGlv biB0eXBlcyAqLworCisjZGVmaW5lIEZUUEFUWVBTIDgKK3N0YXRpYyBpbnQgZnRwX2F1dGhfdHlw ZVtGVFBBVFlQU10gPSB7CisjaWZkZWYgRlRQX0dTU0FQSQorICAgIEZUQV9HSzUsICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIEdTU0FQSSBLZXJiZXJvcyA1ICovCisjZW5kaWYgLyogRlRQ X0dLNSAqLworI2lmZGVmIEZUUF9TUlAKKyAgICBGVEFfU1JQLCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBTUlAgKi8KKyNlbmRpZiAvKiBGVFBfU1JQICovCisjaWZkZWYgRlRQX0tSQjQK KyAgICBGVEFfSzQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBLZXJiZXJvcyA0ICov CisjZW5kaWYgLyogRlRQX0tSQjQgKi8KKyNpZmRlZiBDS19TU0wKKyAgICBGVEFfVExTLCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBUTFMgKi8KKyAgICBGVEFfU1NMLCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBTU0wgKi8KKyNlbmRpZiAvKiBDS19TU0wgKi8KKyAgICAwCit9 OworCitzdGF0aWMgc3RydWN0IGtleXRhYiBmdHBhdXRoW10gPSB7ICAgICAgLyogU0VUIEZUUCBB VVRIVFlQRSBjbWQgdGFibGUgKi8KKyAgICB7ICJhdXRvbWF0aWMiLCBGVEFfQVVUTywgIENNX0lO ViB9LAorI2lmZGVmIEZUUF9HU1NBUEkKKyAgICB7ICJnc3NhcGkta3JiNSIsIEZUQV9HSzUsIDAg fSwKKyNlbmRpZiAvKiBGVFBfR1NTQVBJICovCisjaWZkZWYgRlRQX0tSQjQKKyAgICB7ICJrNCIs ICAgICAgIEZUQV9LNCwgICAgIENNX0lOViB9LAorI2VuZGlmIC8qIEZUUF9LUkI0ICovCisjaWZk ZWYgRlRQX0dTU0FQSQorICAgIHsgIms1IiwgICAgICAgIEZUQV9HSzUsICAgQ01fSU5WIH0sCisj ZW5kaWYgLyogRlRQX0dTU0FQSSAqLworI2lmZGVmIEZUUF9LUkI0CisgICAgeyAia2VyYmVyb3M0 IiwgRlRBX0s0LCAgICAwIH0sCisjZW5kaWYgLyogRlRQX0tSQjQgKi8KKyNpZmRlZiBGVFBfR1NT QVBJCisgICAgeyAia2VyYmVyb3M1IiwgRlRBX0dLNSwgICBDTV9JTlYgfSwKKyNlbmRpZiAvKiBG VFBfR1NTQVBJICovCisjaWZkZWYgRlRQX0tSQjQKKyAgICB7ICJrZXJiZXJvc19pdiIsRlRBX0s0 LCAgIENNX0lOViB9LAorI2VuZGlmIC8qIEZUUF9LUkI0ICovCisjaWZkZWYgRlRQX0dTU0FQSQor ICAgIHsgImtlcmJlcm9zX3YiLCBGVEFfR0s1LCAgQ01fSU5WIH0sCisjZW5kaWYgLyogRlRQX0dT U0FQSSAqLworI2lmZGVmIEZUUF9LUkI0CisgICAgeyAia3JiNCIsICAgICBGVEFfSzQsICAgICBD TV9JTlYgfSwKKyNlbmRpZiAvKiBGVFBfS1JCNCAqLworI2lmZGVmIEZUUF9HU1NBUEkKKyAgICB7 ICJrcmI1IiwgICAgIEZUQV9HSzUsICAgIENNX0lOViB9LAorI2VuZGlmIC8qIEZUUF9HU1NBUEkg Ki8KKyNpZmRlZiBGVFBfU1JQCisgICAgeyAic3JwIiwgICAgICBGVEFfU1JQLCAgICAgMCB9LAor I2VuZGlmIC8qIEZUUF9TUlAgKi8KKyNpZmRlZiBDS19TU0wKKyAgICB7ICJzc2wiLCAgICAgIEZU QV9TU0wsICAgICAwIH0sCisgICAgeyAidGxzIiwgICAgICBGVEFfVExTLCAgICAgMCB9LAorI2Vu ZGlmIC8qIENLX1NTTCAqLworICAgIHsgIiIsIDAsIDAgfQorfTsKK3N0YXRpYyBpbnQgbmZ0cGF1 dGggPSAoc2l6ZW9mKGZ0cGF1dGgpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKSAtIDE7CisKKyNp ZmRlZiBGVFBfU1JQCisjZGVmaW5lIFNSUF9DSVBIRVIgMQorI2RlZmluZSBTUlBfSEFTSCAgIDIK K3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIGZ0cHNycFtdID0geyAgICAgIC8qIFNFVCBGVFAgU1JQIGNv bW1hbmQgdGFibGUgKi8KKyAgICB7ICJjaXBoZXIiLCAgIFNSUF9DSVBIRVIsICAgICAwIH0sCisg ICAgeyAiaGFzaCIsICAgICBTUlBfSEFTSCwgICAgICAgMCB9LAorICAgIHsgIiIsIDAsIDAgfQor fTsKK3N0YXRpYyBpbnQgbmZ0cHNycCA9IChzaXplb2YoZnRwc3JwKSAvIHNpemVvZihzdHJ1Y3Qg a2V5dGFiKSkgLSAxOworI2VuZGlmIC8qIEZUUF9TUlAgKi8KKyNlbmRpZiAvKiBGVFBfU0VDVVJJ VFkgKi8KKworc3RhdGljIHN0cnVjdCBrZXl0YWIgZnRwc2V0W10gPSB7ICAgICAgIC8qIFNFVCBG VFAgY29tbW1hbmQgdGFibGUgKi8KKyAgICB7ICJhbm9ueW1vdXMtcGFzc3dvcmQiLCAgICAgICBG VFNfQVBXLCAwIH0sCisjaWZkZWYgRlRQX1NFQ1VSSVRZCisgICAgeyAiYXV0aHR5cGUiLCAgICAg ICAgICAgICAgICAgRlRTX0FUUCwgMCB9LAorICAgIHsgImF1dG9hdXRoZW50aWNhdGlvbiIsICAg ICAgIEZUU19BVVQsIDAgfSwKKyAgICB7ICJhdXRvZW5jcnlwdGlvbiIsICAgICAgICAgICBGVFNf Q1JZLCAwIH0sCisjZW5kaWYgLyogRlRQX1NFQ1VSSVRZICovCisgICAgeyAiYXV0b2xvZ2luIiwg ICAgICAgICAgICAgICAgRlRTX0xPRywgMCB9LAorICAgIHsgImJ1ZyIsICAgICAgICAgICAgICAg ICAgICAgIEZUU19CVUcsIDAgfSwKKyNpZm5kZWYgTk9DU0VUUworICAgIHsgImNoYXJhY3Rlci1z ZXQtdHJhbnNsYXRpb24iLEZUU19YTEEsIDAgfSwKKyNlbmRpZiAvKiBOT0NTRVRTICovCisgICAg eyAiY29sbGlzaW9uIiwgICAgICAgICAgICAgICAgRlRTX0ZOQywgMCB9LAorI2lmZGVmIEZUUF9T RUNVUklUWQorICAgIHsgImNvbW1hbmQtcHJvdGVjdGlvbi1sZXZlbCIsIEZUU19DUEwsIDAgfSwK KyAgICB7ICJjcGwiLCAgICAgICAgICAgICAgICAgICAgICBGVFNfQ1BMLCBDTV9JTlYgfSwKKyAg ICB7ICJjcmVkZW50aWFsLWZvcndhcmRpbmciLCAgICBGVFNfQ0ZXLCAwIH0sCisgICAgeyAiZGEi LCAgICAgICAgICAgICAgICAgICAgICAgRlRTX0RBVCwgQ01fSU5WfENNX0FCUiB9LAorICAgIHsg ImRhdGEtcHJvdGVjdGlvbi1sZXZlbCIsICAgIEZUU19EUEwsIDAgfSwKKyNlbmRpZiAvKiBGVFBf U0VDVVJJVFkgKi8KKyAgICB7ICJkYXRlcyIsICAgICAgICAgICAgICAgICAgICBGVFNfREFULCAw IH0sCisgICAgeyAiZGVidWciLCAgICAgICAgICAgICAgICAgICAgRlRTX0RCRywgMCB9LAorICAg IHsgImRpc3BsYXkiLCAgICAgICAgICAgICAgICAgIEZUU19ESVMsIDAgfSwKKyNpZmRlZiBGVFBf U0VDVVJJVFkKKyAgICB7ICJkcGwiLCAgICAgICAgICAgICAgICAgICAgICBGVFNfRFBMLCBDTV9J TlYgfSwKKyNlbmRpZiAvKiBGVFBfU0VDVVJJVFkgKi8KKyAgICB7ICJlcnJvci1hY3Rpb24iLCAg ICAgICAgICAgICBGVFNfRVJSLCAwIH0sCisgICAgeyAiZmlsZW5hbWVzIiwgICAgICAgICAgICAg ICAgRlRTX0NOViwgMCB9LAorICAgIHsgImdldC1maWxldHlwZS1zd2l0Y2hpbmciLCAgIEZUU19H RlQsIDAgfSwKKyAgICB7ICJwYXNzaXZlLW1vZGUiLCAgICAgICAgICAgICBGVFNfUFNWLCAwIH0s CisgICAgeyAicGFzdiIsICAgICAgICAgICAgICAgICAgICAgRlRTX1BTViwgQ01fSU5WIH0sCisg ICAgeyAicGVybWlzc2lvbnMiLCAgICAgICAgICAgICAgRlRTX1BSTSwgMCB9LAorICAgIHsgInBy b2dyZXNzLW1lc3NhZ2VzIiwgICAgICAgIEZUU19UU1QsIDAgfSwKKyAgICB7ICJzZW5kLXBvcnQt Y29tbWFuZHMiLCAgICAgICBGVFNfU1BDLCAwIH0sCisjaWZuZGVmIE5PQ1NFVFMKKyAgICB7ICJz ZXJ2ZXItY2hhcmFjdGVyLXNldCIsICAgICBGVFNfQ1NSLCAwIH0sCisjZW5kaWYgLyogTk9DU0VU UyAqLworICAgIHsgInNlcnZlci10aW1lLW9mZnNldCIsICAgICAgIEZUU19TVE8sIDAgfSwKKyNp ZmRlZiBGVFBfU1JQCisgICAgeyAic3JwIiwgICAgICAgICAgICAgICAgICAgICAgRlRTX1NSUCwg MCB9LAorI2Vsc2UKKyAgICB7ICJzcnAiLCAgICAgICAgICAgICAgICAgICAgICBGVFNfU1JQLCBD TV9JTlYgfSwKKyNlbmRpZiAvKiBGVFBfU1JQICovCisjaWZkZWYgRlRQX1RJTUVPVVQKKyAgICB7 ICJ0aW1lb3V0IiwgICAgICAgICAgICAgICAgICBGVFNfVE1PLCAwIH0sCisjZW5kaWYJLyogRlRQ X1RJTUVPVVQgKi8KKyAgICB7ICJ0eXBlIiwgICAgICAgICAgICAgICAgICAgICBGVFNfVFlQLCAw IH0sCisgICAgeyAidW5pcXVlLXNlcnZlci1uYW1lcyIsICAgICAgRlRTX1VTTiwgMCB9LAorICAg IHsgInZlcmJvc2UtbW9kZSIsICAgICAgICAgICAgIEZUU19WQk0sIDAgfSwKKyAgICB7ICIiLCAw LCAwIH0KK307CitzdGF0aWMgaW50IG5mdHBzZXQgPSAoc2l6ZW9mKGZ0cHNldCkgLyBzaXplb2Yo c3RydWN0IGtleXRhYikpIC0gMTsKKworLyoKKyAgR0VUIGFuZCBQVVQgc3dpdGNoZXMgYXJlIGFw cHJveGltYXRlbHkgdGhlIHNhbWUgYXMgS2VybWl0IEdFVCBhbmQgU0VORCwKKyAgYW5kIHVzZSB0 aGUgc2FtZSBTTkRfeHh4IGRlZmluaXRpb25zLCBidXQgaGlqYWNrIGEgY291cGxlIGZvciBGVFAg dXNlLgorICBEb24ndCBqdXN0IG1ha2UgdXAgbmV3IG9uZXMsIHNpbmNlIHRoZSBudW1iZXIgb2Yg U05EX3h4eCBvcHRpb25zIG11c3QgYmUKKyAga25vd24gaW4gYWR2YW5jZSBmb3IgdGhlIHN3aXRj aC1wYXJzaW5nIGFycmF5cy4KKyovCisjZGVmaW5lIFNORF9VU04gU05EX1BSTyAgICAgICAgICAg ICAgICAgLyogL1VOSVFVRSBpbnN0ZWFkIG9mIC9QUk9UT0NPTCAqLworI2RlZmluZSBTTkRfUFJN IFNORF9QSVAgICAgICAgICAgICAgICAgIC8qIC9QRVJNSVNTSU9OUyBpbnN0ZWFkIG9mIC9QSVBF UyAqLworI2RlZmluZSBTTkRfVEVOIFNORF9DQUwgICAgICAgICAgICAgICAgIC8qIC9URU5FWCBp bnN0ZWFkIG9mIC9DQUxJQlJBVEUgKi8KKworc3RhdGljIHN0cnVjdCBrZXl0YWIgcHV0c3dpW10g PSB7ICAgICAgIC8qIEZUUCBQVVQgc3dpdGNoIHRhYmxlICovCisgICAgeyAiL2FmdGVyIiwgICAg ICAgICAgICAgICAgU05EX0FGVCwgQ01fQVJHIH0sCisjaWZkZWYgUFVUQVJSQVkKKyAgICB7ICIv YXJyYXkiLCAgICAgICAgICAgICAgICBTTkRfQVJSLCBDTV9BUkcgfSwKKyNlbmRpZiAvKiBQVVRB UlJBWSAqLworICAgIHsgIi9hcyIsICAgICAgICAgICAgICAgICAgIFNORF9BU04sIENNX0FSR3xD TV9JTlZ8Q01fQUJSIH0sCisgICAgeyAiL2FzLW5hbWUiLCAgICAgICAgICAgICAgU05EX0FTTiwg Q01fQVJHIH0sCisgICAgeyAiL2FzY2lpIiwgICAgICAgICAgICAgICAgU05EX1RYVCwgQ01fSU5W IH0sCisgICAgeyAiL2IiLCAgICAgICAgICAgICAgICAgICAgU05EX0JJTiwgQ01fSU5WfENNX0FC UiB9LAorICAgIHsgIi9iZWZvcmUiLCAgICAgICAgICAgICAgIFNORF9CRUYsIENNX0FSRyB9LAor ICAgIHsgIi9iaW5hcnkiLCAgICAgICAgICAgICAgIFNORF9CSU4sIDAgfSwKKyNpZmRlZiBQVVRQ SVBFCisgICAgeyAiL2NvbW1hbmQiLCAgICAgICAgICAgICAgU05EX0NNRCwgQ01fUFNIIH0sCisj ZW5kaWYgLyogUFVUUElQRSAqLworI2lmZGVmIENPTU1FTlQKKy8qIFRoaXMgd29ya3MgYnV0IGl0 J3MgZGFuZ2Vyb3VzICovCisjaWZkZWYgRE9VUERBVEUKKyAgICB7ICIvZGF0ZXMtZGlmZmVyIiwg ICAgICAgICBTTkRfRElGLCBDTV9JTlYgfSwKKyNlbmRpZiAvKiBET1VQREFURSAqLworI2VuZGlm IC8qIENPTU1FTlQgKi8KKyAgICB7ICIvZGVsZXRlIiwgICAgICAgICAgICAgICBTTkRfREVMLCAw IH0sCisjaWZkZWYgVU5JWE9ST1NLCisgICAgeyAiL2RvdGZpbGVzIiwgICAgICAgICAgICAgU05E X0RPVCwgMCB9LAorI2VuZGlmIC8qIFVOSVhPUk9TSyAqLworICAgIHsgIi9lcnJvci1hY3Rpb24i LCAgICAgICAgIFNORF9FUlIsIENNX0FSRyB9LAorICAgIHsgIi9leGNlcHQiLCAgICAgICAgICAg ICAgIFNORF9FWEMsIENNX0FSRyB9LAorICAgIHsgIi9maWxlbmFtZXMiLCAgICAgICAgICAgIFNO RF9OQU0sIENNX0FSRyB9LAorI2lmZGVmIFBJUEVTRU5ECisjaWZuZGVmIE5PU1BMCisgICAgeyAi L2ZpbHRlciIsICAgICAgICAgICAgICAgU05EX0ZMVCwgQ01fQVJHfENNX1BTSCB9LAorI2VuZGlm IC8qIE5PU1BMICovCisjZW5kaWYgLyogUElQRVNFTkQgKi8KKyNpZmRlZiBDS1NZTUxJTksKKyAg ICB7ICIvZm9sbG93bGlua3MiLCAgICAgICAgICBTTkRfTE5LLCAwIH0sCisjZW5kaWYgLyogQ0tT WU1MSU5LICovCisjaWZkZWYgVk1TCisgICAgeyAiL2ltYWdlIiwgICAgICAgICAgICAgICAgU05E X0lNRywgMCB9LAorI2Vsc2UKKyAgICB7ICIvaW1hZ2UiLCAgICAgICAgICAgICAgICBTTkRfQklO LCBDTV9JTlYgfSwKKyNlbmRpZiAvKiBWTVMgKi8KKyAgICB7ICIvbGFyZ2VyLXRoYW4iLCAgICAg ICAgICBTTkRfTEFSLCBDTV9BUkcgfSwKKyAgICB7ICIvbGlzdGZpbGUiLCAgICAgICAgICAgICBT TkRfRklMLCBDTV9BUkcgfSwKKyNpZm5kZWYgTk9DU0VUUworICAgIHsgIi9sb2NhbC1jaGFyYWN0 ZXItc2V0IiwgIFNORF9DU0wsIENNX0FSRyB9LAorI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKyNpZmRl ZiBDS19UTVBESVIKKyAgICB7ICIvbW92ZS10byIsICAgICAgICAgICAgICBTTkRfTU9WLCBDTV9B UkcgfSwKKyNlbmRpZiAvKiBDS19UTVBESVIgKi8KKyAgICB7ICIvbm9iYWNrdXBmaWxlcyIsICAg ICAgICBTTkRfTk9CLCAwIH0sCisjaWZkZWYgVU5JWE9ST1NLCisgICAgeyAiL25vZG90ZmlsZXMi LCAgICAgICAgICAgU05EX05PRCwgMCB9LAorI2VuZGlmIC8qIFVOSVhPUk9TSyAqLworI2lmZGVm IENLU1lNTElOSworICAgIHsgIi9ub2ZvbGxvd2xpbmtzIiwgICAgICAgIFNORF9OTEssIDAgfSwK KyNlbmRpZiAvKiBDS1NZTUxJTksgKi8KKworICAgIHsgIi9ub3QtYWZ0ZXIiLCAgICAgICAgICAg IFNORF9OQUYsIENNX0FSRyB9LAorICAgIHsgIi9ub3QtYmVmb3JlIiwgICAgICAgICAgIFNORF9O QkUsIENNX0FSRyB9LAorI2lmZGVmIFVOSVgKKyAgICB7ICIvcGVybWlzc2lvbnMiLCAgICAgICAg ICBTTkRfUFJNLCBDTV9BUkcgfSwKKyNlbHNlCisgICAgeyAiL3Blcm1pc3Npb25zIiwgICAgICAg ICAgU05EX1BSTSwgQ01fQVJHfENNX0lOViB9LAorI2VuZGlmIC8qIFVOSVggKi8KKyAgICB7ICIv cXVpZXQiLCAgICAgICAgICAgICAgICBTTkRfU0hILCAwIH0sCisjaWZkZWYgRlRQX1JFU1RBUlQK KyAgICB7ICIvcmVjb3ZlciIsICAgICAgICAgICAgICBTTkRfUkVTLCAwIH0sCisjZW5kaWYgLyog RlRQX1JFU1RBUlQgKi8KKyNpZmRlZiBSRUNVUlNJVkUKKyAgICB7ICIvcmVjdXJzaXZlIiwgICAg ICAgICAgICBTTkRfUkVDLCAwIH0sCisjZW5kaWYgLyogUkVDVVJTSVZFICovCisgICAgeyAiL3Jl bmFtZS10byIsICAgICAgICAgICAgU05EX1JFTiwgQ01fQVJHIH0sCisjaWZkZWYgRlRQX1JFU1RB UlQKKyAgICB7ICIvcmVzdGFydCIsICAgICAgICAgICAgICBTTkRfUkVTLCBDTV9JTlYgfSwKKyNl bmRpZiAvKiBGVFBfUkVTVEFSVCAqLworI2lmbmRlZiBOT0NTRVRTCisgICAgeyAiL3NlcnZlci1j aGFyYWN0ZXItc2V0IiwgU05EX0NTUiwgQ01fQVJHIH0sCisjZW5kaWYgLyogTk9DU0VUUyAqLwor ICAgIHsgIi9zZXJ2ZXItcmVuYW1lLXRvIiwgICAgIFNORF9TUk4sIENNX0FSRyB9LAorICAgIHsg Ii9zaW11bGF0ZSIsICAgICAgICAgICAgIFNORF9TSU0sIDAgfSwKKyAgICB7ICIvc2luY2UiLCAg ICAgICAgICAgICAgICBTTkRfQUZULCBDTV9JTlZ8Q01fQVJHIH0sCisgICAgeyAiL3NtYWxsZXIt dGhhbiIsICAgICAgICAgU05EX1NNQSwgQ01fQVJHIH0sCisjaWZkZWYgQ09NTUVOVAorICAgIHsg Ii9zdGFydGluZy1hdCIsICAgICAgICAgIFNORF9TVEEsIENNX0FSRyB9LAorI2VuZGlmIC8qIENP TU1FTlQgKi8KKyNpZmRlZiBSRUNVUlNJVkUKKyAgICB7ICIvc3ViZGlyZWN0b3JpZXMiLCAgICAg ICBTTkRfUkVDLCBDTV9JTlYgfSwKKyNlbmRpZiAvKiBSRUNVUlNJVkUgKi8KKyAgICB7ICIvdGVu ZXgiLCAgICAgICAgICAgICAgICBTTkRfVEVOLCAwIH0sCisgICAgeyAiL3RleHQiLCAgICAgICAg ICAgICAgICAgU05EX1RYVCwgMCB9LAorI2lmbmRlZiBOT0NTRVRTCisgICAgeyAiL3RyYW5zcGFy ZW50IiwgICAgICAgICAgU05EX1hQQSwgMCB9LAorI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKyAgICB7 ICIvdHlwZSIsICAgICAgICAgICAgICAgICBTTkRfVFlQLCBDTV9BUkcgfSwKKyNpZmRlZiBET1VQ REFURQorICAgIHsgIi91cGRhdGUiLCAgICAgICAgICAgICAgIFNORF9VUEQsIDAgfSwKKyNlbmRp ZiAvKiBET1VQREFURSAqLworICAgIHsgIi91bmlxdWUtc2VydmVyLW5hbWVzIiwgIFNORF9VU04s IDAgfSwKKyAgICB7ICIiLCAwLCAwIH0KK307CitzdGF0aWMgaW50IG5wdXRzd2kgPSAoc2l6ZW9m KHB1dHN3aSkgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpIC0gMTsKKworc3RhdGljIHN0cnVjdCBr ZXl0YWIgZ2V0c3dpW10gPSB7ICAgICAgIC8qIEZUUCBbTV1HRVQgc3dpdGNoIHRhYmxlICovCisg ICAgeyAiL2FmdGVyIiwgICAgICAgICAgICAgICAgU05EX0FGVCwgQ01fSU5WIH0sCisgICAgeyAi L2FzIiwgICAgICAgICAgICAgICAgICAgU05EX0FTTiwgQ01fQVJHfENNX0lOVnxDTV9BQlIgfSwK KyAgICB7ICIvYXMtbmFtZSIsICAgICAgICAgICAgICBTTkRfQVNOLCBDTV9BUkcgfSwKKyAgICB7 ICIvYXNjaWkiLCAgICAgICAgICAgICAgICBTTkRfVFhULCBDTV9JTlYgfSwKKyAgICB7ICIvYmVm b3JlIiwgICAgICAgICAgICAgICBTTkRfQkVGLCBDTV9JTlYgfSwKKyAgICB7ICIvYmluYXJ5Iiwg ICAgICAgICAgICAgICBTTkRfQklOLCAwIH0sCisgICAgeyAiL2NvbGxpc2lvbiIsICAgICAgICAg ICAgU05EX0NPTCwgQ01fQVJHIH0sCisjaWZkZWYgUFVUUElQRQorICAgIHsgIi9jb21tYW5kIiwg ICAgICAgICAgICAgIFNORF9DTUQsIENNX1BTSCB9LAorI2VuZGlmIC8qIFBVVFBJUEUgKi8KKyAg ICB7ICIvZGVsZXRlIiwgICAgICAgICAgICAgICBTTkRfREVMLCAwIH0sCisgICAgeyAiL2Vycm9y LWFjdGlvbiIsICAgICAgICAgU05EX0VSUiwgQ01fQVJHIH0sCisgICAgeyAiL2V4Y2VwdCIsICAg ICAgICAgICAgICAgU05EX0VYQywgQ01fQVJHIH0sCisgICAgeyAiL2ZpbGVuYW1lcyIsICAgICAg ICAgICAgU05EX05BTSwgQ01fQVJHIH0sCisjaWZkZWYgUElQRVNFTkQKKyNpZm5kZWYgTk9TUEwK KyAgICB7ICIvZmlsdGVyIiwgICAgICAgICAgICAgICBTTkRfRkxULCBDTV9BUkd8Q01fUFNIIH0s CisjZW5kaWYgLyogTk9TUEwgKi8KKyNlbmRpZiAvKiBQSVBFU0VORCAqLworI2lmZGVmIFZNUwor ICAgIHsgIi9pbWFnZSIsICAgICAgICAgICAgICAgIFNORF9JTUcsIDAgfSwKKyNlbHNlCisgICAg eyAiL2ltYWdlIiwgICAgICAgICAgICAgICAgU05EX0JJTiwgQ01fSU5WIH0sCisjZW5kaWYgLyog Vk1TICovCisgICAgeyAiL2xhcmdlci10aGFuIiwgICAgICAgICAgU05EX0xBUiwgQ01fQVJHIH0s CisgICAgeyAiL2xpc3RmaWxlIiwgICAgICAgICAgICAgU05EX0ZJTCwgQ01fQVJHIH0sCisjaWZu ZGVmIE5PQ1NFVFMKKyAgICB7ICIvbG9jYWwtY2hhcmFjdGVyLXNldCIsICBTTkRfQ1NMLCBDTV9B UkcgfSwKKyNlbmRpZiAvKiBOT0NTRVRTICovCisgICAgeyAiL21hdGNoIiwgICAgICAgICAgICAg ICAgU05EX1BBVCwgQ01fQVJHIH0sCisgICAgeyAiL21sIiwgICAgICAgICAgICAgICAgICAgU05E X01MUywgQ01fSU5WfENNX0FCUiB9LAorICAgIHsgIi9tbHMiLCAgICAgICAgICAgICAgICAgIFNO RF9NTFMsIENNX0lOVnxDTV9BQlIgfSwKKyAgICB7ICIvbWxzZCIsICAgICAgICAgICAgICAgICBT TkRfTUxTLCAwIH0sCisgICAgeyAiL21sc3QiLCAgICAgICAgICAgICAgICAgU05EX01MUywgQ01f SU5WIH0sCisjaWZkZWYgQ0tfVE1QRElSCisgICAgeyAiL21vdmUtdG8iLCAgICAgICAgICAgICAg U05EX01PViwgQ01fQVJHIH0sCisjZW5kaWYgLyogQ0tfVE1QRElSICovCisgICAgeyAiL25hbWVs aXN0IiwgICAgICAgICAgICAgU05EX05NTCwgQ01fQVJHIH0sCisgICAgeyAiL25sc3QiLCAgICAg ICAgICAgICAgICAgU05EX05MUywgMCB9LAorICAgIHsgIi9ub2JhY2t1cGZpbGVzIiwgICAgICAg IFNORF9OT0IsIDAgfSwKKyAgICB7ICIvbm9kb3RmaWxlcyIsICAgICAgICAgICBTTkRfTk9ELCAw IH0sCisjaWZkZWYgRE9VUERBVEUKKyAgICB7ICIvZGF0ZXMtZGlmZmVyIiwgICAgICAgICBTTkRf RElGLCBDTV9JTlYgfSwKKyNlbmRpZiAvKiBET1VQREFURSAqLworICAgIHsgIi9ub3QtYWZ0ZXIi LCAgICAgICAgICAgIFNORF9OQUYsIENNX0lOViB9LAorICAgIHsgIi9ub3QtYmVmb3JlIiwgICAg ICAgICAgIFNORF9OQkUsIENNX0lOViB9LAorICAgIHsgIi9wZXJtaXNzaW9ucyIsICAgICAgICAg IFNORF9QUk0sIENNX0lOViB9LAorICAgIHsgIi9xdWlldCIsICAgICAgICAgICAgICAgIFNORF9T SEgsIDAgfSwKKyNpZmRlZiBGVFBfUkVTVEFSVAorICAgIHsgIi9yZWNvdmVyIiwgICAgICAgICAg ICAgIFNORF9SRVMsIDAgfSwKKyNlbmRpZiAvKiBGVFBfUkVTVEFSVCAqLworI2lmZGVmIFJFQ1VS U0lWRQorICAgIHsgIi9yZWN1cnNpdmUiLCAgICAgICAgICAgIFNORF9SRUMsIDAgfSwKKyNlbmRp ZiAvKiBSRUNVUlNJVkUgKi8KKyAgICB7ICIvcmVuYW1lLXRvIiwgICAgICAgICAgICBTTkRfUkVO LCBDTV9BUkcgfSwKKyNpZmRlZiBGVFBfUkVTVEFSVAorICAgIHsgIi9yZXN0YXJ0IiwgICAgICAg ICAgICAgIFNORF9SRVMsIENNX0lOViB9LAorI2VuZGlmIC8qIEZUUF9SRVNUQVJUICovCisjaWZu ZGVmIE5PQ1NFVFMKKyAgICB7ICIvc2VydmVyLWNoYXJhY3Rlci1zZXQiLCBTTkRfQ1NSLCBDTV9B UkcgfSwKKyNlbmRpZiAvKiBOT0NTRVRTICovCisgICAgeyAiL3NlcnZlci1yZW5hbWUtdG8iLCAg ICAgU05EX1NSTiwgQ01fQVJHIH0sCisgICAgeyAiL3NtYWxsZXItdGhhbiIsICAgICAgICAgU05E X1NNQSwgQ01fQVJHIH0sCisjaWZkZWYgUkVDVVJTSVZFCisgICAgeyAiL3N1YmRpcmVjdG9yaWVz IiwgICAgICAgU05EX1JFQywgQ01fSU5WIH0sCisjZW5kaWYgLyogUkVDVVJTSVZFICovCisgICAg eyAiL3RleHQiLCAgICAgICAgICAgICAgICAgU05EX1RYVCwgMCB9LAorICAgIHsgIi90ZW5leCIs ICAgICAgICAgICAgICAgIFNORF9URU4sIDAgfSwKKyNpZm5kZWYgTk9DU0VUUworICAgIHsgIi90 cmFuc3BhcmVudCIsICAgICAgICAgIFNORF9YUEEsIDAgfSwKKyNlbmRpZiAvKiBOT0NTRVRTICov CisgICAgeyAiL3RvLXNjcmVlbiIsICAgICAgICAgICAgU05EX01BSSwgMCB9LAorI2lmZGVmIERP VVBEQVRFCisgICAgeyAiL3VwZGF0ZSIsICAgICAgICAgICAgICAgU05EX1VQRCwgQ01fSU5WIH0s CisjZW5kaWYgLyogRE9VUERBVEUgKi8KKyAgICB7ICIiLCAwLCAwIH0KK307CitzdGF0aWMgaW50 IG5nZXRzd2kgPSAoc2l6ZW9mKGdldHN3aSkgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpIC0gMTsK Kworc3RhdGljIHN0cnVjdCBrZXl0YWIgZGVsc3dpW10gPSB7ICAgICAgIC8qIEZUUCBbTV1ERUxF VEUgc3dpdGNoIHRhYmxlICovCisgICAgeyAiL2Vycm9yLWFjdGlvbiIsICAgICAgICAgU05EX0VS UiwgQ01fQVJHIH0sCisgICAgeyAiL2V4Y2VwdCIsICAgICAgICAgICAgICAgU05EX0VYQywgQ01f QVJHIH0sCisgICAgeyAiL2ZpbGVuYW1lcyIsICAgICAgICAgICAgU05EX05BTSwgQ01fQVJHIH0s CisgICAgeyAiL2xhcmdlci10aGFuIiwgICAgICAgICAgU05EX0xBUiwgQ01fQVJHIH0sCisgICAg eyAiL25vYmFja3VwZmlsZXMiLCAgICAgICAgU05EX05PQiwgMCB9LAorI2lmZGVmIFVOSVhPUk9T SworICAgIHsgIi9ub2RvdGZpbGVzIiwgICAgICAgICAgIFNORF9OT0QsIDAgfSwKKyNlbmRpZiAv KiBVTklYT1JPU0sgKi8KKyAgICB7ICIvcXVpZXQiLCAgICAgICAgICAgICAgICBTTkRfU0hILCAw IH0sCisjaWZkZWYgUkVDVVJTSVZFCisgICAgeyAiL3JlY3Vyc2l2ZSIsICAgICAgICAgICAgU05E X1JFQywgMCB9LAorI2VuZGlmIC8qIFJFQ1VSU0lWRSAqLworICAgIHsgIi9zbWFsbGVyLXRoYW4i LCAgICAgICAgIFNORF9TTUEsIENNX0FSRyB9LAorI2lmZGVmIFJFQ1VSU0lWRQorICAgIHsgIi9z dWJkaXJlY3RvcmllcyIsICAgICAgIFNORF9SRUMsIENNX0lOViB9LAorI2VuZGlmIC8qIFJFQ1VS U0lWRSAqLworICAgIHsgIiIsIDAsIDAgfQorfTsKK3N0YXRpYyBpbnQgbmRlbHN3aSA9IChzaXpl b2YoZGVsc3dpKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSkgLSAxOworCitzdGF0aWMgc3RydWN0 IGtleXRhYiBmbnRhYltdID0geyAgICAgICAgLyogRmlsZW5hbWUgY29udmVyc2lvbiBrZXl3b3Jk IHRhYmxlICovCisgICAgeyAiYXV0b21hdGljIiwgICAgMiwgQ05WX0FVVE8gfSwKKyAgICB7ICJj b252ZXJ0ZWQiLCAgICAxLCBDTlZfQ05WICB9LAorICAgIHsgImxpdGVyYWwiLCAgICAgIDAsIENO Vl9MSVQgIH0KK307CitzdGF0aWMgaW50IG5mbnRhYiA9IChzaXplb2YoZm50YWIpIC8gc2l6ZW9m KHN0cnVjdCBrZXl0YWIpKTsKKworc3RhdGljIHN0cnVjdCBrZXl0YWIgZnRwdHlwW10gPSB7ICAg ICAgIC8qIFNFVCBGVFAgVFlQRSB0YWJsZSAqLworICAgIHsgImFzY2lpIiwgICAgICAgIEZUVF9B U0MsIDAgfSwKKyAgICB7ICJiaW5hcnkiLCAgICAgICBGVFRfQklOLCAwIH0sCisgICAgeyAidGVu ZXgiLCAgICAgICAgRlRUX1RFTiwgMCB9LAorICAgIHsgInRleHQiLCAgICAgICAgIEZUVF9BU0Ms IENNX0lOViB9LAorICAgIHsgIiIsIDAsIDAgfQorfTsKK3N0YXRpYyBpbnQgbmZ0cHR5cCA9IChz aXplb2YoZnRwdHlwKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSkgLSAxOworCisjaWZkZWYgRlRQ X1NFQ1VSSVRZCitzdGF0aWMgc3RydWN0IGtleXRhYiBmdHBwcm9bXSA9IHsgICAgICAgLyogU0VU IEZUUCBQUk9URUNUSU9OLUxFVkVMIHRhYmxlICovCisgICAgeyAiY2xlYXIiLCAgICAgICAgRlBM X0NMUiwgMCB9LAorICAgIHsgImNvbmZpZGVudGlhbCIsIEZQTF9DT04sIDAgfSwKKyAgICB7ICJw cml2YXRlIiwgICAgICBGUExfUFJWLCAwIH0sCisgICAgeyAic2FmZSIsICAgICAgICAgRlBMX1NB RiwgMCB9LAorICAgIHsgIiIsIDAsIDAgfQorfTsKK3N0YXRpYyBpbnQgbmZ0cHBybyA9IChzaXpl b2YoZnRwcHJvKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSkgLSAxOworI2VuZGlmIC8qIEZUUF9T RUNVUklUWSAqLworCisvKiBEZWZpbml0aW9ucyBmb3IgRlRQIGZyb20gUkZDNzY1LiAqLworCisv KiBSZXBseSBjb2RlcyAqLworCisjZGVmaW5lIFJFUExZX1BSRUxJTSAgICAxICAgICAgICAgICAg ICAgLyogUG9zaXRpdmUgcHJlbGltaW5hcnkgKi8KKyNkZWZpbmUgUkVQTFlfQ09NUExFVEUgIDIg ICAgICAgICAgICAgICAvKiBQb3NpdGl2ZSBjb21wbGV0aW9uICovCisjZGVmaW5lIFJFUExZX0NP TlRJTlVFICAzICAgICAgICAgICAgICAgLyogUG9zaXRpdmUgaW50ZXJtZWRpYXRlICovCisjZGVm aW5lIFJFUExZX1RSQU5TSUVOVCA0ICAgICAgICAgICAgICAgLyogVHJhbnNpZW50IG5lZ2F0aXZl IGNvbXBsZXRpb24gKi8KKyNkZWZpbmUgUkVQTFlfRVJST1IgICAgIDUgICAgICAgICAgICAgICAv KiBQZXJtYW5lbnQgbmVnYXRpdmUgY29tcGxldGlvbiAqLworI2RlZmluZSBSRVBMWV9TRUNVUkUg ICAgNiAgICAgICAgICAgICAgIC8qIFNlY3VyaXR5IGVuY29kZWQgbWVzc2FnZSAqLworCisvKiBG b3JtIGNvZGVzIGFuZCBuYW1lcyAqLworCisjZGVmaW5lIEZPUk1fTiAxICAgICAgICAgICAgICAg ICAgICAgICAgLyogTm9uLXByaW50ICovCisjZGVmaW5lIEZPUk1fVCAyICAgICAgICAgICAgICAg ICAgICAgICAgLyogVGVsbmV0IGZvcm1hdCBlZmZlY3RvcnMgKi8KKyNkZWZpbmUgRk9STV9DIDMg ICAgICAgICAgICAgICAgICAgICAgICAvKiBDYXJyaWFnZSBjb250cm9sIChBU0EpICovCisKKy8q IFN0cnVjdHVyZSBjb2RlcyBhbmQgbmFtZXMgKi8KKworI2RlZmluZSBTVFJVX0YgMSAgICAgICAg ICAgICAgICAgICAgICAgIC8qIEZpbGUgKG5vIHJlY29yZCBzdHJ1Y3R1cmUpICovCisjZGVmaW5l IFNUUlVfUiAyICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVjb3JkIHN0cnVjdHVyZSAqLwor I2RlZmluZSBTVFJVX1AgMyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBhZ2Ugc3RydWN0dXJl ICovCisKKy8qIE1vZGUgdHlwZXMgYW5kIG5hbWVzICovCisKKyNkZWZpbmUgTU9ERV9TIDEgICAg ICAgICAgICAgICAgICAgICAgICAvKiBTdHJlYW0gKi8KKyNkZWZpbmUgTU9ERV9CIDIgICAgICAg ICAgICAgICAgICAgICAgICAvKiBCbG9jayAqLworI2RlZmluZSBNT0RFX0MgMyAgICAgICAgICAg ICAgICAgICAgICAgIC8qIENvbXByZXNzZWQgKi8KKworLyogUHJvdGVjdGlvbiBsZXZlbHMgYW5k IG5hbWVzICovCisKKyNkZWZpbmUgUFJPVF9DIDEgICAgICAgICAgICAgICAgICAgICAgICAvKiBD bGVhciAqLworI2RlZmluZSBQUk9UX1MgMiAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNhZmUg Ki8KKyNkZWZpbmUgUFJPVF9QIDMgICAgICAgICAgICAgICAgICAgICAgICAvKiBQcml2YXRlICov CisjZGVmaW5lIFBST1RfRSA0ICAgICAgICAgICAgICAgICAgICAgICAgLyogQ29uZmlkZW50aWFs ICovCisKKyNpZmRlZiBDT01NRU5UICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOb3QgdXNl ZCAqLworI2lmZGVmIEZUUF9OQU1FUworY2hhciAqc3RydW5hbWVzW10gID0gIHsiMCIsICJGaWxl IiwgICAgICJSZWNvcmQiLCAiUGFnZSIgfTsKK2NoYXIgKmZvcm1uYW1lc1tdICA9ICB7IjAiLCAi Tm9ucHJpbnQiLCAiVGVsbmV0IiwgIkNhcnJpYWdlLWNvbnRyb2wiIH07CitjaGFyICptb2RlbmFt ZXNbXSAgPSAgeyIwIiwgIlN0cmVhbSIsICAgIkJsb2NrIiwgICJDb21wcmVzc2VkIiB9OworY2hh ciAqbGV2ZWxuYW1lc1tdID0gIHsiMCIsICJDbGVhciIsICAgICJTYWZlIiwgICAiUHJpdmF0ZSIs ICAiQ29uZmlkZW50aWFsIiB9OworI2VuZGlmIC8qIEZUUF9OQU1FUyAqLworCisvKiBSZWNvcmQg VG9rZW5zICovCisKKyNkZWZpbmUgUkVDX0VTQyAnXDM3NycgICAgICAgICAgICAgICAgICAvKiBS ZWNvcmQtbW9kZSBFc2NhcGUgKi8KKyNkZWZpbmUgUkVDX0VPUiAnXDAwMScgICAgICAgICAgICAg ICAgICAvKiBSZWNvcmQtbW9kZSBFbmQtb2YtUmVjb3JkICovCisjZGVmaW5lIFJFQ19FT0YgJ1ww MDInICAgICAgICAgICAgICAgICAgLyogUmVjb3JkLW1vZGUgRW5kLW9mLUZpbGUgKi8KKworLyog QmxvY2sgSGVhZGVyICovCisKKyNkZWZpbmUgQkxLX0VPUiAgICAgICAgICAgMHg4MCAgICAgICAg ICAvKiBCbG9jayBpcyBFbmQtb2YtUmVjb3JkICovCisjZGVmaW5lIEJMS19FT0YgICAgICAgICAg IDB4NDAgICAgICAgICAgLyogQmxvY2sgaXMgRW5kLW9mLUZpbGUgKi8KKyNkZWZpbmUgQkxLX1JF UExZX0VSUk9SUyAgMHgyMCAgICAgICAgICAvKiBCbG9jayBtaWdodCBoYXZlIGVycm9ycyAqLwor I2RlZmluZSBCTEtfUkVTVEFSVCAgICAgICAweDEwICAgICAgICAgIC8qIEJsb2NrIGlzIFJlc3Rh cnQgTWFya2VyICovCisjZGVmaW5lIEJMS19CWVRFQ09VTlQgMiAgICAgICAgICAgICAgICAgLyog Qnl0ZXMgaW4gdGhpcyBibG9jayAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKworI2RlZmluZSBS QURJWF9FTkNPREUgMCAgICAgICAgICAgICAgICAgIC8qIHJhZGl4X2VuY29kZSgpIGZ1bmN0aW9u IGNvZGVzICovCisjZGVmaW5lIFJBRElYX0RFQ09ERSAxCisKKy8qCisgIFRoZSBkZWZhdWx0IHNl dHBic3ooKSB2YWx1ZSBpbiB0aGUgVW5peCBGVFAgY2xpZW50IGlzIDE8PDIwICgxTUIpLiAgVGhp cworICByZXN1bHRzIGluIGEgc2VyaW91cyBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvbiBkdWUgdG8g dGhlIGluY3JlYXNlZCBudW1iZXIKKyAgb2YgcGFnZSBmYXVsdHMgYW5kIHRoZSBpbmFiaWxpdHkg dG8gb3ZlcmxhcCBlbmNyeXB0L2RlY3J5cHQsIGZpbGUgaS9vLCBhbmQKKyAgbmV0d29yayBpL28u ICBTbyBpbnN0ZWFkIHdlIHNldCB0aGUgdmFsdWUgdG8gMTw8MTMgKDhLKSwgYWJvdXQgaGFsZiB0 aGUgc2l6ZQorICBvZiB0aGUgdHlwaWNhbCBUQ1Agd2luZG93LiAgTWF5YmUgd2Ugc2hvdWxkIGFk ZCBhIGNvbW1hbmQgdG8gYWxsb3cgdGhlIHZhbHVlCisgIHRvIGJlIGNoYW5nZWQuCisqLworI2Rl ZmluZSBERUZBVUxUX1BCU1ogMTw8MTMKKworLyogUHJvdG90eXBlcyAqLworCitfUFJPVE9UWVAo aW50IHJlbXR4dCwgKGNoYXIgKiopICk7CitfUFJPVE9UWVAoY2hhciAqIGdza3JlYXNvbiwgKGlu dCkgKTsKK19QUk9UT1RZUChzdGF0aWMgaW50IGZ0cGNsb3NlLCh2b2lkKSk7CitfUFJPVE9UWVAo c3RhdGljIGludCB6enNlbmQsIChpbnQsIENIQVIpKTsKK19QUk9UT1RZUChzdGF0aWMgaW50IGdl dHJlcGx5LChpbnQsaW50LGludCxpbnQsaW50KSk7CitfUFJPVE9UWVAoc3RhdGljIGludCByYWRp eF9lbmNvZGUsKENIQVJbXSwgQ0hBUltdLCBpbnQsIGludCAqLCBpbnQpKTsKK19QUk9UT1RZUChz dGF0aWMgaW50IHNldHBic3osKHVuc2lnbmVkIGludCkpOworX1BST1RPVFlQKHN0YXRpYyBpbnQg cmVjdnJlcXVlc3QsKGNoYXIgKixjaGFyICosY2hhciAqLGNoYXIgKiwKKyAgaW50LGludCxjaGFy ICosaW50LGludCxpbnQpKTsKK19QUk9UT1RZUChzdGF0aWMgaW50IGZ0cGNtZCwoY2hhciAqLGNo YXIgKixpbnQsaW50LGludCkpOworX1BST1RPVFlQKHN0YXRpYyBpbnQgZnRzX2NwbCwoaW50KSk7 CitfUFJPVE9UWVAoc3RhdGljIGludCBmdHNfZHBsLChpbnQpKTsKKyNpZmRlZiBGVFBfU0VDVVJJ VFkKK19QUk9UT1RZUChzdGF0aWMgaW50IGZ0cF9hdXRoLCAodm9pZCkpOworI2VuZGlmIC8qIEZU UF9TRUNVUklUWSAqLworX1BST1RPVFlQKHN0YXRpYyBpbnQgZnRwX3VzZXIsIChjaGFyICosIGNo YXIgKiwgY2hhciAqKSk7CitfUFJPVE9UWVAoc3RhdGljIGludCBmdHBfbG9naW4sIChjaGFyICop KTsKK19QUk9UT1RZUChzdGF0aWMgaW50IGZ0cF9yZXNldCwgKHZvaWQpKTsKK19QUk9UT1RZUChz dGF0aWMgaW50IGZ0cF9yZW5hbWUsIChjaGFyICosIGNoYXIgKikpOworX1BST1RPVFlQKHN0YXRp YyBpbnQgZnRwX3VtYXNrLCAoY2hhciAqKSk7CitfUFJPVE9UWVAoc3RhdGljIGludCBzZWN1cmVf Zmx1c2gsIChpbnQpKTsKKyNpZmRlZiBDT01NRU5UCitfUFJPVE9UWVAoc3RhdGljIGludCBzZWN1 cmVfcHV0YywgKGNoYXIsIGludCkpOworI2VuZGlmIC8qIENPTU1FTlQgKi8KK19QUk9UT1RZUChz dGF0aWMgaW50IHNlY3VyZV93cml0ZSwgKGludCwgQ0hBUiAqLCB1bnNpZ25lZCBpbnQpKTsKK19Q Uk9UT1RZUChzdGF0aWMgaW50IHNjb21tYW5kLCAoY2hhciAqKSk7CitfUFJPVE9UWVAoc3RhdGlj IGludCBzZWN1cmVfcHV0YnVmLCAoaW50LCBDSEFSICosIHVuc2lnbmVkIGludCkpOworX1BST1RP VFlQKHN0YXRpYyBpbnQgc2VjdXJlX2dldGMsIChpbnQsIGludCkpOworX1BST1RPVFlQKHN0YXRp YyBpbnQgc2VjdXJlX2dldGJ5dGUsIChpbnQsIGludCkpOworX1BST1RPVFlQKHN0YXRpYyBpbnQg c2VjdXJlX3JlYWQsIChpbnQsIGNoYXIgKiwgaW50KSk7CitfUFJPVE9UWVAoc3RhdGljIGludCBp bml0Y29ubiwgKHZvaWQpKTsKK19QUk9UT1RZUChzdGF0aWMgaW50IGRhdGFjb25uLCAoY2hhciAq KSk7CitfUFJPVE9UWVAoc3RhdGljIGludCBzZXRwcm90YnVmLCh1bnNpZ25lZCBpbnQpKTsKK19Q Uk9UT1RZUChzdGF0aWMgaW50IHNlbmRyZXF1ZXN0LCAoY2hhciAqLCBjaGFyICosIGNoYXIgKiwg aW50LGludCxpbnQsaW50KSk7CisKK19QUk9UT1RZUChzdGF0aWMgY2hhciAqIHJhZGl4X2Vycm9y LChpbnQpKTsKK19QUk9UT1RZUChzdGF0aWMgY2hhciAqIGZ0cF9ob29rdXAsKGNoYXIgKiwgaW50 LCBpbnQpKTsKK19QUk9UT1RZUChzdGF0aWMgQ0hBUiAqIHJlbW90ZV9maWxlcywgKGludCwgQ0hB UiAqLCBDSEFSICosIGludCkpOworCitfUFJPVE9UWVAoc3RhdGljIFZPSUQgbWxzcmVzZXQsICh2 b2lkKSk7CitfUFJPVE9UWVAoc3RhdGljIFZPSUQgc2VjdXJlX2Vycm9yLCAoY2hhciAqZm10LCAu Li4pKTsKK19QUk9UT1RZUChzdGF0aWMgVk9JRCBsb3N0cGVlciwgKHZvaWQpKTsKK19QUk9UT1RZ UChzdGF0aWMgVk9JRCBjYW5jZWxfcmVtb3RlLCAoaW50KSk7CitfUFJPVE9UWVAoc3RhdGljIFZP SUQgY2hhbmdldHlwZSwgKGludCwgaW50KSk7CisKK19QUk9UT1RZUChzdGF0aWMgc2lndHlwZSBj bWRjYW5jZWwsIChpbnQpKTsKKworI2lmZGVmIEZUUF9TUlAKK19QUk9UT1RZUChzdGF0aWMgaW50 IHNycF9yZXNldCwgKCkpOworX1BST1RPVFlQKHN0YXRpYyBpbnQgc3JwX2Z0cF9hdXRoLCAoY2hh ciAqLGNoYXIgKixjaGFyICopKTsKK19QUk9UT1RZUChzdGF0aWMgaW50IHNycF9wdXQsIChDSEFS ICosIENIQVIgKiosIGludCwgaW50ICopKTsKK19QUk9UT1RZUChzdGF0aWMgaW50IHNycF9nZXQs IChDSEFSICoqLCBDSEFSICoqLCBpbnQgKiwgaW50ICopKTsKK19QUk9UT1RZUChzdGF0aWMgaW50 IHNycF9lbmNvZGUsIChpbnQsIENIQVIgKiwgQ0hBUiAqLCB1bnNpZ25lZCBpbnQpKTsKK19QUk9U T1RZUChzdGF0aWMgaW50IHNycF9kZWNvZGUsIChpbnQsIENIQVIgKiwgQ0hBUiAqLCB1bnNpZ25l ZCBpbnQpKTsKK19QUk9UT1RZUChzdGF0aWMgaW50IHNycF9zZWxjaXBoZXIsIChjaGFyICopKTsK K19QUk9UT1RZUChzdGF0aWMgaW50IHNycF9zZWxoYXNoLCAoY2hhciAqKSk7CisjZW5kaWYgLyog RlRQX1NSUCAqLworCisjaWZkZWYgRlRQX0dTU0FQSQorX1BST1RPVFlQKHN0YXRpYyB2b2lkIHVz ZXJfZ3NzX2Vycm9yLChPTV91aW50MzIsIE9NX3VpbnQzMixjaGFyICopKTsKKyNlbmRpZiAvKiBG VFBfR1NTQVBJICovCisKKy8qICBEIE8gRiBUIFAgQSBSIEcgIC0tICBEbyBhbiBGVFAgY29tbWFu ZC1saW5lIGFyZ3VtZW50LiAgKi8KKworI2lmZGVmIEZUUF9TRUNVUklUWQorI2lmbmRlZiBOT0lD UAorI2RlZmluZSBGVF9OT0dTUyAgIDEKKyNkZWZpbmUgRlRfTk9LNCAgICAyCisjZGVmaW5lIEZU X05PU1JQICAgMworI2RlZmluZSBGVF9OT1NTTCAgIDQKKyNkZWZpbmUgRlRfTk9UTFMgICA1Cisj ZGVmaW5lIEZUX0NFUlRGSSAgNgorI2RlZmluZSBGVF9PS0NFUlQgIDcKKyNkZWZpbmUgRlRfREVC VUcgICA4CisjZGVmaW5lIEZUX0tFWSAgICAgOQorI2RlZmluZSBGVF9TRUNVUkUgMTAKKyNkZWZp bmUgRlRfVkVSSUZZIDExCisKK3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIGZ0cHp0YWJbXSA9IHsKKyAg ICB7ICIhZ3NzIiwgICAgRlRfTk9HU1MsICAwIH0sCisgICAgeyAiIWtyYjQiLCAgIEZUX05PSzQs ICAgMCB9LAorICAgIHsgIiFzcnAiLCAgICBGVF9OT1NSUCwgIDAgfSwKKyAgICB7ICIhc3NsIiwg ICAgRlRfTk9TU0wsICAwIH0sCisgICAgeyAiIXRscyIsICAgIEZUX05PVExTLCAgMCB9LAorICAg IHsgImNlcnQiLCAgICBGVF9DRVJURkksIENNX0FSRyB9LAorICAgIHsgImNlcnRzb2siLCBGVF9P S0NFUlQsIDAgfSwKKyAgICB7ICJkZWJ1ZyIsICAgRlRfREVCVUcsICAwIH0sCisgICAgeyAia2V5 IiwgICAgIEZUX0tFWSwgICAgQ01fQVJHIH0sCisgICAgeyAibm9nc3MiLCAgIEZUX05PR1NTLCAg MCB9LAorICAgIHsgIm5va3JiNCIsICBGVF9OT0s0LCAgIDAgfSwKKyAgICB7ICJub3NycCIsICAg RlRfTk9TUlAsICAwIH0sCisgICAgeyAibm9zc2wiLCAgIEZUX05PU1NMLCAgMCB9LAorICAgIHsg Im5vdGxzIiwgICBGVF9OT1RMUywgIDAgfSwKKyNpZmRlZiBDT01NRU5UCisgICAgeyAic2VjdXJl IiwgIEZUX1NFQ1VSRSwgMCB9LAorI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICB7ICJ2ZXJpZnki LCAgRlRfVkVSSUZZLCBDTV9BUkcgfSwKKyAgICB7ICIiLCAwLCAwIH0KK307CitzdGF0aWMgaW50 IG5mdHB6dGFiID0gc2l6ZW9mKGZ0cHp0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpIC0gMTsK KworLyoKKyAgVGhlIGZvbGxvd2luZyBjaXBoZXIgYW5kIGhhc2ggdGFibGVzIHNob3VsZCBiZSBy ZXBsYWNlZCB3aXRoCisgIGR5bmFtaWNseSBjcmVhdGVkIHZlcnNpb25zIGJhc2VkIHVwb24gdGhl IGxpbmtlZCBsaWJyYXJ5LgorKi8KKyNkZWZpbmUgU1JQX0JMT1dGSVNIX0VDQiAgICAxCisjZGVm aW5lIFNSUF9CTE9XRklTSF9DQkMgICAgMgorI2RlZmluZSBTUlBfQkxPV0ZJU0hfQ0ZCNjQgIDMK KyNkZWZpbmUgU1JQX0JMT1dGSVNIX09GQjY0ICA0CisjZGVmaW5lIFNSUF9DQVNUNV9FQ0IgICAg ICAgNQorI2RlZmluZSBTUlBfQ0FTVDVfQ0JDICAgICAgIDYKKyNkZWZpbmUgU1JQX0NBU1Q1X0NG QjY0ICAgICA3CisjZGVmaW5lIFNSUF9DQVNUNV9PRkI2NCAgICAgOAorI2RlZmluZSBTUlBfREVT X0VDQiAgICAgICAgIDkKKyNkZWZpbmUgU1JQX0RFU19DQkMgICAgICAgIDEwCisjZGVmaW5lIFNS UF9ERVNfQ0ZCNjQgICAgICAxMQorI2RlZmluZSBTUlBfREVTX09GQjY0ICAgICAgMTIKKyNkZWZp bmUgU1JQX0RFUzNfRUNCICAgICAgIDEzCisjZGVmaW5lIFNSUF9ERVMzX0NCQyAgICAgICAxNAor I2RlZmluZSBTUlBfREVTM19DRkI2NCAgICAgMTUKKyNkZWZpbmUgU1JQX0RFUzNfT0ZCNjQgICAg IDE2CisKK3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIGNpcGhlcnRhYltdID0geworICAgIHsgImJsb3dm aXNoX2VjYiIsICAgU1JQX0JMT1dGSVNIX0VDQiwgICAwIH0sCisgICAgeyAiYmxvd2Zpc2hfY2Jj IiwgICBTUlBfQkxPV0ZJU0hfQ0JDLCAgIDAgfSwKKyAgICB7ICJibG93ZmlzaF9jZmI2NCIsIFNS UF9CTE9XRklTSF9DRkI2NCwgMCB9LAorICAgIHsgImJsb3dmaXNoX29mYjY0IiwgU1JQX0JMT1dG SVNIX09GQjY0LCAwIH0sCisgICAgeyAiY2FzdDVfZWNiIiwgICAgICBTUlBfQ0FTVDVfRUNCLCAg ICAgIDAgfSwKKyAgICB7ICJjYXN0NV9jYmMiLCAgICAgIFNSUF9DQVNUNV9DQkMsICAgICAgMCB9 LAorICAgIHsgImNhc3Q1X2NmYjY0IiwgICAgU1JQX0NBU1Q1X0NGQjY0LCAgICAwIH0sCisgICAg eyAiY2FzdDVfb2ZiNjQiLCAgICBTUlBfQ0FTVDVfT0ZCNjQsICAgIDAgfSwKKyAgICB7ICJkZXNf ZWNiIiwgICAgICAgIFNSUF9ERVNfRUNCLCAgICAgICAgMCB9LAorICAgIHsgImRlc19jYmMiLCAg ICAgICAgU1JQX0RFU19DQkMsICAgICAgICAwIH0sCisgICAgeyAiZGVzX2NmYjY0IiwgICAgICBT UlBfREVTX0NGQjY0LCAgICAgIDAgfSwKKyAgICB7ICJkZXNfb2ZiNjQiLCAgICAgIFNSUF9ERVNf T0ZCNjQsICAgICAgMCB9LAorICAgIHsgImRlczNfZWNiIiwgICAgICAgU1JQX0RFUzNfRUNCLCAg ICAgICAwIH0sCisgICAgeyAiZGVzM19jYmMiLCAgICAgICBTUlBfREVTM19DQkMsICAgICAgIDAg fSwKKyAgICB7ICJkZXMzX2NmYjY0IiwgICAgIFNSUF9ERVMzX0NGQjY0LCAgICAgMCB9LAorICAg IHsgImRlczNfb2ZiNjQiLCAgICAgU1JQX0RFUzNfT0ZCNjQsICAgICAwIH0sCisgICAgeyAibm9u ZSIsICAgICAgICAgICAwLCAwIH0sCisgICAgeyAiIiwgMCwgMCB9Cit9Oworc3RhdGljIGludCBu Y2lwaGVydGFiID0gc2l6ZW9mKGNpcGhlcnRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikgLSAx OworCisjZGVmaW5lIFNSUF9NRDUgIDEKKyNkZWZpbmUgU1JQX1NIQSAgMgorc3RhdGljIHN0cnVj dCBrZXl0YWIgaGFzaHRhYltdID0geworICAgIHsgIm1kNSIsICAgICAgICAgICAgICBTUlBfTUQ1 LCAgICAgICAgMCB9LAorICAgIHsgIm5vbmUiLCAgICAgICAgICAgICAwLCAgICAgICAgICAgICAg MCB9LAorICAgIHsgInNoYSIsICAgICAgICAgICAgICBTUlBfU0hBLCAgICAgICAgMCB9LAorICAg IHsgIiIsIDAsIDAgfQorfTsKK3N0YXRpYyBpbnQgbmhhc2h0YWIgPSBzaXplb2YoaGFzaHRhYikg LyBzaXplb2Yoc3RydWN0IGtleXRhYikgLSAxOworI2VuZGlmIC8qIE5PSUNQICovCisjZW5kaWYg LyogRlRQX1NFQ1VSSVRZICovCisKK3N0YXRpYyBjaGFyICoKK3N0cnZhbChzMSxzMikgY2hhciAq IHMxLCAqIHMyOyB7CisgICAgaWYgKCFzMSkgczEgPSAiIjsKKyAgICBpZiAoIXMyKSBzMiA9ICIi OworICAgIHJldHVybigqczEgPyBzMSA6ICgqczIgPyBzMiA6ICIobm9uZSkiKSk7Cit9CisKKyNp Zm5kZWYgTk9DU0VUUworc3RhdGljIGNoYXIgKiByZm5wdHIgPSBOVUxMOworc3RhdGljIGludCBy Zm5sZW4gPSAwOworc3RhdGljIGNoYXIgcmZuYnVmW1JGTkJVRlNJWl07ICAgICAgICAgIC8qIFJl bW90ZSBmaWxlbmFtZSB0cmFuc2xhdGUgYnVmZmVyICovCitzdGF0aWMgY2hhciAqIHhnbmJwID0g TlVMTDsKKworc3RhdGljIGludAorc3RyZ2V0YygpIHsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIEhlbHBlciBmdW5jdGlvbiBmb3IgeGduYnl0ZSgpICovCisgICAgaW50IGM7CisgICAg aWYgKCF4Z25icCkKKyAgICAgIHJldHVybigtMSk7CisgICAgaWYgKCEqeGduYnApCisgICAgICBy ZXR1cm4oLTEpOworICAgIGMgPSAodW5zaWduZWQpICp4Z25icCsrOworICAgIHJldHVybigoKHVu c2lnbmVkKSBjKSAmIDB4ZmYpOworfQorCitzdGF0aWMgaW50ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogSGVscGVyIGZ1bmN0aW9uIGZvciB4cG5ieXRlKCkgKi8KKyNpZmRlZiBDS19B TlNJQworc3RycHV0YyhjaGFyIGMpCisjZWxzZQorc3RycHV0YyhjKSBjaGFyIGM7CisjZW5kaWYg LyogQ0tfQU5TSUMgKi8KK3sKKyAgICByZm5sZW4gPSByZm5wdHIgLSByZm5idWY7CisgICAgaWYg KHJmbmxlbiA+PSAoUkZOQlVGU0laIC0gMSkpCisgICAgICByZXR1cm4oLTEpOworICAgICpyZm5w dHIrKyA9IGM7CisgICAgKnJmbnB0ciA9IE5VTDsKKyAgICByZXR1cm4oMCk7Cit9CisKK3N0YXRp YyBpbnQKKyNpZmRlZiBDS19BTlNJQworeHByaW50YyhjaGFyIGMpCisjZWxzZQoreHByaW50Yyhj KSBjaGFyIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAgICBwcmludGYoIiVjIixjKTsK KyAgICByZXR1cm4oMCk7Cit9CisKK3N0YXRpYyBWT0lECitieXRzd2FwKGMwLGMxKSBpbnQgKiBj MCwgKiBjMTsgeworICAgIGludCB0OworICAgIHQgPSAqYzA7CisgICAgKmMwID0gKmMxOworICAg ICpjMSA9IHQ7Cit9CisjZW5kaWYgLyogTk9DU0VUUyAqLworCisjaWZkZWYgQ0tMT0dESUFMCitj aGFyIGZ0cGxvZ2J1ZltDWExPR0JVRkxdID0geyBOVUwsIE5VTCB9OyAvKiBDb25uZWN0aW9uIExv ZyAqLworaW50IGZ0cGxvZ2FjdGl2ZSA9IDA7Citsb25nIGZ0cGxvZ3ByZXYgPSAwTDsKKworVk9J RAorZnRwbG9nZW5kKCkgeworICAgIGV4dGVybiBpbnQgZGlhbG9nOworICAgIGV4dGVybiBjaGFy IGRpYWZpbFtdOworICAgIGxvbmcgZDEsIGQyLCB0MSwgdDI7CisgICAgY2hhciBidWZbMzJdLCAq IHA7CisKKyAgICBkZWJ1ZyhGMTExLCJmdHAgY3ggbG9nIGFjdGl2ZSIsY2tpdG9hKGRpYWxvZyks ZnRwbG9nYWN0aXZlKTsKKyAgICBkZWJ1ZyhGMTEwLCJmdHAgY3ggbG9nIGJ1ZiIsZnRwbG9nYnVm LDApOworCisgICAgaWYgKCFmdHBsb2dhY3RpdmUgfHwgIWZ0cGxvZ2J1ZlswXSkgLyogTm8gYWN0 aXZlIHJlY29yZCAqLworICAgICAgcmV0dXJuOworCisgICAgZnRwbG9nYWN0aXZlID0gMDsgICAg ICAgICAgICAgICAgICAgLyogUmVjb3JkIGlzIG5vdCBhY3RpdmUgKi8KKworICAgIGQxID0gbWpk KChjaGFyICopZnRwbG9nYnVmKTsgICAgICAgIC8qIEdldCBzdGFydCBkYXRlIG9mIHRoaXMgc2Vz c2lvbiAqLworICAgIGNrc3RybmNweShidWYsY2tkYXRlKCksMzEpOyAgICAgICAgIC8qIEdldCBj dXJyZW50IGRhdGUgKi8KKyAgICBkMiA9IG1qZChidWYpOyAgICAgICAgICAgICAgICAgICAgICAv KiBDb252ZXJ0IHRoZW0gdG8gbWpkcyAqLworICAgIHAgPSBmdHBsb2didWY7ICAgICAgICAgICAg ICAgICAgICAgIC8qIEdldCBzdGFydCB0aW1lICovCisgICAgcFsxMV0gPSBOVUw7CisgICAgcFsx NF0gPSBOVUw7ICAgICAgICAgICAgICAgICAgICAgICAgLyogQ29udmVydCB0byBzZWNvbmRzICov CisgICAgdDEgPSBhdG9sKHArOSkgKiAzNjAwTCArIGF0b2wocCsxMikgKiA2MEwgKyBhdG9sKHAr MTUpOworICAgIHBbMTFdID0gJzonOworICAgIHBbMTRdID0gJzonOworICAgIHAgPSBidWY7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEdldCBlbmQgdGltZSAqLworICAgIHBbMTFdID0g TlVMOworICAgIHBbMTRdID0gTlVMOworICAgIHQyID0gYXRvbChwKzkpICogMzYwMEwgKyBhdG9s KHArMTIpICogNjBMICsgYXRvbChwKzE1KTsKKyAgICB0MiA9ICgoZDIgLSBkMSkgKiA4NjQwMEwp ICsgKHQyIC0gdDEpOyAvKiBDb21wdXRlIGVsYXBzZWQgdGltZSAqLworICAgIGlmICh0MiA+IC0x TCkgeworICAgICAgICBmdHBsb2dwcmV2ID0gdDI7CisgICAgICAgIHAgPSBoaG1tc3ModDIpOwor ICAgICAgICBja3N0cm5jYXQoZnRwbG9nYnVmLCJFPSIsQ1hMT0dCVUZMKTsgLyogQXBwZW5kIHRv IGxvZyByZWNvcmQgKi8KKyAgICAgICAgY2tzdHJuY2F0KGZ0cGxvZ2J1ZixwLENYTE9HQlVGTCk7 CisgICAgfSBlbHNlCisgICAgICBmdHBsb2dwcmV2ID0gMEw7CisgICAgZGVidWcoRjEwMSwiZnRw IGN4IGxvZyBkaWFsb2ciLCIiLGRpYWxvZyk7CisgICAgaWYgKGRpYWxvZykgeyAgICAgICAgICAg ICAgICAgICAgICAgLyogSWYgbG9nZ2luZyAqLworICAgICAgICBpbnQgeDsKKyAgICAgICAgeCA9 IGRpYW9wbihkaWFmaWwsMSwxKTsgICAgICAgICAvKiBPcGVuIGxvZyBpbiBhcHBlbmQgbW9kZSAq LworICAgICAgICBpZiAoeCA+IDApIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMDEsImZ0cCBjeCBs b2cgb3BlbiIsIiIseCk7CisgICAgICAgICAgICB4ID0genNvdXRsKFpESUZJTCxmdHBsb2didWYp OyAvKiBXcml0ZSB0aGUgcmVjb3JkICovCisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJmdHAgY3gg bG9nIHdyaXRlIiwiIix4KTsKKyAgICAgICAgICAgIHggPSB6Y2xvc2UoWkRJRklMKTsgICAgICAg ICAvKiBDbG9zZSB0aGUgbG9nICovCisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJmdHAgY3ggbG9n IGNsb3NlIiwiIix4KTsKKyAgICAgICAgfQorICAgIH0KK30KKworVk9JRAorZG9sb2dmdHAoKSB7 CisgICAgZnRwbG9nZW5kKCk7ICAgICAgICAgICAgICAgICAgICAgICAgLyogUHJldmlvdXMgc2Vz c2lvbiBub3QgY2xvc2VkIG91dD8gKi8KKyAgICBmdHBsb2dwcmV2ID0gMEw7CisgICAgZnRwbG9n YWN0aXZlID0gMTsgICAgICAgICAgICAgICAgICAgLyogUmVjb3JkIGlzIGFjdGl2ZSAqLworCisg ICAgY2ttYWt4bXNnKGZ0cGxvZ2J1ZixDWExPR0JVRkwsCisgICAgICAgICAgICAgIGNrZGF0ZSgp LCIgIixzdHJ2YWwoZnRwX2xvZ25hbWUsTlVMTCksIiAiLGNrZ2V0cGlkKCksCisgICAgICAgICAg ICAgICIgVD1GVFAgTj0iLCBzdHJ2YWwoZnRwX2hvc3QsTlVMTCksIiBIPSIsbXlob3N0LAorICAg ICAgICAgICAgICAiIFA9IiwgY2tpdG9hKGZ0cF9wb3J0KSwiICIpOyAvKiBTTVMgMjAwNy8wMi8x NSAqLworICAgIGRlYnVnKEYxMTAsImZ0cCBjeCBsb2cgYmVnaW4iLGZ0cGxvZ2J1ZiwwKTsKK30K KyNlbmRpZiAvKiBDS0xPR0RJQUwgKi8KKworc3RhdGljIGNoYXIgKiBkdW1teVsyXSA9IHsgTlVM TCwgTlVMTCB9OworCitzdGF0aWMgc3RydWN0IGtleXRhYiBtb2RldGFiW10gPSB7CisgICAgeyAi YWN0aXZlIiwgIDAsIDAgfSwKKyAgICB7ICJwYXNzaXZlIiwgMSwgMCB9Cit9OworCisjaWZuZGVm IE5PQ01ETAoraW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENhbGxl ZCBmcm9tIGNrdXVzeS5jICovCisjaWZkZWYgQ0tfQU5TSUMKK2RvZnRwYXJnKGNoYXIgYykKKyNl bHNlCitkb2Z0cGFyZyhjKSBjaGFyIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIGRvZnRw YXJnICovIHsKKyAgICBpbnQgeCwgejsKKyAgICBjaGFyICp4cDsKKyAgICBleHRlcm4gY2hhciAq Knhhcmd2LCAqeGFyZzA7CisgICAgZXh0ZXJuIGludCB4YXJnYywgc3RheWZsZywgaGF2ZWZ0cHVp ZDsKKyAgICBleHRlcm4gY2hhciB1aWRidWZbXTsKKworICAgIHhwID0gKnhhcmd2KzE7ICAgICAg ICAgICAgICAgICAgICAgIC8qIFBvaW50ZXIgZm9yIGJ1bmRsZWQgYXJncyAqLworICAgIHdoaWxl IChjKSB7CisgICAgICAgIGlmIChja3N0cmNocigiTXVEUGtjSHptIixjKSkgeyAgLyogT3B0aW9u cyB0aGF0IHRha2UgYXJndW1lbnRzICovCisgICAgICAgICAgICBpZiAoKih4cCsxKSkgeworICAg ICAgICAgICAgICAgIGZhdGFsKCI/SW52YWxpZCBhcmd1bWVudCBidW5kbGluZyIpOworICAgICAg ICAgICAgfQorICAgICAgICAgICAgeGFyZ3YrKywgeGFyZ2MtLTsKKyAgICAgICAgICAgIGlmICgo eGFyZ2MgPCAxKSB8fCAoKip4YXJndiA9PSAnLScpKSB7CisgICAgICAgICAgICAgICAgZmF0YWwo Ij9SZXF1aXJlZCBhcmd1bWVudCBtaXNzaW5nIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0K KyAgICAgICAgc3dpdGNoIChjKSB7ICAgICAgICAgICAgICAgICAgICAvKiBCaWcgc3dpdGNoIG9u IGFyZyAqLworICAgICAgICAgIGNhc2UgJ2gnOiAgICAgICAgICAgICAgICAgICAgIC8qIGhlbHAg Ki8KKyAgICAgICAgICAgcHJpbnRmKCJDLUtlcm1pdCdzIEZUUCBjbGllbnQgY29tbWFuZC1saW5l IHBlcnNvbmFsaXR5LiAgVXNhZ2U6XG4iKTsKKyAgICAgICAgICAgIHByaW50ZigiICAlcyBbIG9w dGlvbnMgXSBob3N0IFsgcG9ydCBdIFstcGcgZmlsZXMgXVxuXG4iLHhhcmcwKTsKKyAgICAgICAg ICAgIHByaW50ZigiT3B0aW9uczpcbiIpOworICAgICAgICAgICAgcHJpbnRmKCIgIC1oICAgICAg ICAgICA9IGhlbHAgKHRoaXMgbWVzc2FnZSlcbiIpOworICAgICAgICAgICAgcHJpbnRmKCIgIC1t IG1vZGUgICAgICA9IFwicGFzc2l2ZVwiIChkZWZhdWx0KSBvciBcImFjdGl2ZVwiXG4iKTsKKyAg ICAgICAgICAgIHByaW50ZigiICAtdSBuYW1lICAgICAgPSB1c2VybmFtZSBmb3IgYXV0b2xvZ2lu IChvciAtTSlcbiIpOworICAgICAgICAgICAgcHJpbnRmKCIgIC1QIHBhc3N3b3JkICA9IHBhc3N3 b3JkIGZvciBhdXRvbG9naW4gKFJJU0tZKVxuIik7CisgICAgICAgICAgICBwcmludGYoIiAgLUEg ICAgICAgICAgID0gYXV0b2xvZ2luIGFub255bW91c2x5XG4iKTsKKyAgICAgICAgICAgIHByaW50 ZigiICAtRCBkaXJlY3RvcnkgPSBjZCBhZnRlciBhdXRvbG9naW5cbiIpOworICAgICAgICAgICAg cHJpbnRmKCIgIC1iICAgICAgICAgICA9IGZvcmNlIGJpbmFyeSBtb2RlXG4iKTsKKyAgICAgICAg ICAgIHByaW50ZigiICAtYSAgICAgICAgICAgPSBmb3JjZSB0ZXh0IChcImFzY2lpXCIpIG1vZGUg KG9yIC1UKVxuIik7CisgICAgICAgICAgICBwcmludGYoIiAgLWQgICAgICAgICAgID0gZGVidWcg KGRvdWJsZSB0byBhZGQgdGltZXN0YW1wcylcbiIpOworICAgICAgICAgICAgcHJpbnRmKCIgIC1u ICAgICAgICAgICA9IG5vIGF1dG9sb2dpblxuIik7CisgICAgICAgICAgICBwcmludGYoIiAgLXYg ICAgICAgICAgID0gdmVyYm9zZSAoZGVmYXVsdClcbiIpOworICAgICAgICAgICAgcHJpbnRmKCIg IC1xICAgICAgICAgICA9IHF1aWV0XG4iKTsKKyAgICAgICAgICAgIHByaW50ZigiICAtUyAgICAg ICAgICAgPSBTdGF5IChpc3N1ZSBjb21tYW5kIHByb21wdCB3aGVuIGRvbmUpXG4iKTsKKyAgICAg ICAgICAgIHByaW50ZigiICAtWSAgICAgICAgICAgPSBkbyBub3QgZXhlY3V0ZSBLZXJtaXQgaW5p dCBmaWxlXG4iKTsKKyAgICAgICAgICAgIHByaW50ZigiICAtcCBmaWxlcyAgICAgPSBmaWxlcyB0 byBwdXQgYWZ0ZXIgYXV0b2xvZ2luIChvciAtcylcbiIpOworICAgICAgICAgICAgcHJpbnRmKCIg IC1nIGZpbGVzICAgICA9IGZpbGVzIHRvIGdldCBhZnRlciBhdXRvbG9naW5cbiIpOworICAgICAg ICAgICAgcHJpbnRmKCIgIC1SICAgICAgICAgICA9IHJlY3Vyc2l2ZSAoZm9yIHVzZSB3aXRoIC1w KVxuIik7CisKKyNpZmRlZiBGVFBfU0VDVVJJVFkKKyAgICAgICAgICAgIHByaW50ZigiXG5TZWN1 cml0eSBvcHRpb25zOlxuIik7CisgICAgICAgICAgICBwcmludGYoIiAgLWsgcmVhbG0gICAgID0g S2VyYmVyb3MgNCByZWFsbVxuIik7CisgICAgICAgICAgICBwcmludGYoIiAgLWYgICAgICAgICAg ID0gS2VyYm9yb3MgNSBjcmVkZW50aWFscyBmb3J3YXJkaW5nXG4iKTsKKyAgICAgICAgICAgIHBy aW50ZigiICAteCAgICAgICAgICAgPSBhdXRvZW5jcnlwdGlvbiBtb2RlXG4iKTsKKyAgICAgICAg ICAgIHByaW50ZigiICAtYyBjaXBoZXIgICAgPSBTUlAgY2lwaGVyIHR5cGVcbiIpOworICAgICAg ICAgICAgcHJpbnRmKCIgIC1IIGhhc2ggICAgICA9IFNSUCBlbmNyeXB0aW9uIGhhc2hcbiIpOwor ICAgICAgICAgICAgcHJpbnRmKCIgIC16IG9wdGlvbiAgICA9IFNlY3VyaXR5IG9wdGlvbnNcbiIp OworI2VuZGlmIC8qIEZUUF9TRUNVUklUWSAqLworCisgICAgICAgICAgICBwcmludGYoIlxuLXAg b3IgLWcsIGlmIGdpdmVuLCBzaG91bGQgYmUgbGFzdC4gIEV4YW1wbGU6XG4iKTsKKyAgICAgICAg ICAgIHByaW50ZigiICBmdHAgLUEga2VybWl0LmNvbHVtYmlhLmVkdSAtRCBrZXJtaXQgLWFnIFRF U1RGSUxFXG4iKTsKKworICAgICAgICAgICAgZG9leGl0KEdPT0RfRVhJVCwtMSk7CisgICAgICAg ICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgJ1InOiAgICAgICAgICAgICAgICAgICAgIC8q IFJlY3Vyc2l2ZSAqLworICAgICAgICAgICAgcmVjdXJzaXZlID0gMTsKKyAgICAgICAgICAgIGJy ZWFrOworCisgICAgICAgICAgY2FzZSAnZCc6ICAgICAgICAgICAgICAgICAgICAgLyogRGVidWcg Ki8KKyNpZmRlZiBERUJVRworICAgICAgICAgICAgaWYgKGRlYmxvZykgeworICAgICAgICAgICAg ICAgIGV4dGVybiBpbnQgZGVidGltOworICAgICAgICAgICAgICAgIGRlYnRpbSA9IDE7CisgICAg ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGRlYmxvZyA9IGRlYm9wbigiZGVidWcu bG9nIiwwKTsKKyAgICAgICAgICAgICAgICBkZWJvayA9IDE7CisgICAgICAgICAgICB9CisjZW5k aWYgLyogREVCVUcgKi8KKyAgICAgICAgICAgIC8qIGZhbGwgdGhydSBvbiBwdXJwb3NlICovCisK KyAgICAgICAgICBjYXNlICd0JzogICAgICAgICAgICAgICAgICAgICAvKiBUcmFjZSAqLworICAg ICAgICAgICAgZnRwX2RlYisrOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNl ICduJzogICAgICAgICAgICAgICAgICAgICAvKiBObyBhdXRvbG9naW4gKi8KKyAgICAgICAgICAg IGZ0cF9sb2cgPSAwOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlICdpJzog ICAgICAgICAgICAgICAgICAgICAvKiBObyBwcm9tcHQgKi8KKyAgICAgICAgICBjYXNlICd2Jzog ICAgICAgICAgICAgICAgICAgICAvKiBWZXJib3NlICovCisgICAgICAgICAgICBicmVhazsgICAg ICAgICAgICAgICAgICAgICAgLyogKGlnbm9yZWQpICovCisKKyAgICAgICAgICBjYXNlICdxJzog ICAgICAgICAgICAgICAgICAgICAvKiBRdWlldCAqLworICAgICAgICAgICAgcXVpZXQgPSAxOwor ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlICdTJzogICAgICAgICAgICAgICAg ICAgICAvKiBTdGF5ICovCisgICAgICAgICAgICBzdGF5ZmxnID0gMTsKKyAgICAgICAgICAgIGJy ZWFrOworCisgICAgICAgICAgY2FzZSAnTSc6CisgICAgICAgICAgY2FzZSAndSc6ICAgICAgICAg ICAgICAgICAgICAgLyogTXkgVXNlciBOYW1lICovCisgICAgICAgICAgICBpZiAoKGludClzdHJs ZW4oKnhhcmd2KSA+IDYzKSB7CisgICAgICAgICAgICAgICAgZmF0YWwoInVzZXJuYW1lIHRvbyBs b25nIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBja3N0cm5jcHkodWlkYnVmLCp4YXJn dixVSURCVUZMRU4pOworICAgICAgICAgICAgaGF2ZWZ0cHVpZCA9IDE7CisgICAgICAgICAgICBi cmVhazsKKworICAgICAgICAgIGNhc2UgJ0EnOgorICAgICAgICAgICAgY2tzdHJuY3B5KHVpZGJ1 ZiwiYW5vbnltb3VzIixVSURCVUZMRU4pOworICAgICAgICAgICAgaGF2ZWZ0cHVpZCA9IDE7Cisg ICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgJ1QnOiAgICAgICAgICAgICAgICAg ICAgIC8qIFRleHQgKi8KKyAgICAgICAgICBjYXNlICdhJzogICAgICAgICAgICAgICAgICAgICAv KiAiYXNjaWkiICovCisgICAgICAgICAgY2FzZSAnYic6ICAgICAgICAgICAgICAgICAgICAgLyog QmluYXJ5ICovCisgICAgICAgICAgICBiaW5hcnkgPSAoYyA9PSAnYicpID8gRlRUX0JJTiA6IEZU VF9BU0M7CisgICAgICAgICAgICBmdHBfeGZlcm1vZGUgPSBYTU9ERV9NOworICAgICAgICAgICAg ZmlsZXBlZWsgPSAwOworICAgICAgICAgICAgcGF0dGVybnMgPSAwOworICAgICAgICAgICAgYnJl YWs7CisKKyAgICAgICAgICBjYXNlICdnJzogICAgICAgICAgICAgICAgICAgICAvKiBHZXQgKi8K KyAgICAgICAgICBjYXNlICdwJzogICAgICAgICAgICAgICAgICAgICAvKiBQdXQgKi8KKyAgICAg ICAgICBjYXNlICdzJzogeyAgICAgICAgICAgICAgICAgICAvKiBTZW5kICg9IFB1dCkgKi8KKyAg ICAgICAgICAgICAgaW50IGhhdmVmaWxlcywgcmM7CisgICAgICAgICAgICAgIGlmIChmdHBfYWN0 aW9uKSB7CisgICAgICAgICAgICAgICAgICBmYXRhbCgiT25seSBvbmUgRlRQIGFjdGlvbiBhdCBh IHRpbWUgcGxlYXNlIik7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgaWYgKCooeHAr MSkpIHsKKyAgICAgICAgICAgICAgICAgIGZhdGFsKCJpbnZhbGlkIGFyZ3VtZW50IGJ1bmRsaW5n IGFmdGVyIC1zIik7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgbmZpbHMgPSAwOyAg ICAgICAgICAgICAgICAvKiBJbml0aWFsaXplIGZpbGUgY291bnRlciAqLworICAgICAgICAgICAg ICBoYXZlZmlsZXMgPSAwOyAgICAgICAgICAgIC8qIEFzc3VtZSBub3RoaW5nIHRvIHNlbmQgICov CisgICAgICAgICAgICAgIGNtbGlzdCA9IHhhcmd2ICsgMTsgICAgICAgLyogUmVtZW1iZXIgdGhp cyBwb2ludGVyICovCisKKyAgICAgICAgICAgICAgd2hpbGUgKCsreGFyZ3YsIC0teGFyZ2MgPiAw KSB7IC8qIFRyYXZlcnNlIHRoZSBsaXN0ICovCisgICAgICAgICAgICAgICAgICBpZiAoYyA9PSAn ZycpIHsKKyAgICAgICAgICAgICAgICAgICAgICBoYXZlZmlsZXMrKzsKKyAgICAgICAgICAgICAg ICAgICAgICBuZmlscysrOworICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg ICAgICAgICAgICAgfQorI2lmZGVmIFJFQ1VSU0lWRQorICAgICAgICAgICAgICAgICAgaWYgKCFz dHJjbXAoKnhhcmd2LCIuIikpIHsKKyAgICAgICAgICAgICAgICAgICAgICBoYXZlZmlsZXMgPSAx OworICAgICAgICAgICAgICAgICAgICAgIG5maWxzKys7CisgICAgICAgICAgICAgICAgICAgICAg cmVjdXJzaXZlID0gMTsKKyAgICAgICAgICAgICAgICAgIH0gZWxzZQorI2VuZGlmIC8qIFJFQ1VS U0lWRSAqLworICAgICAgICAgICAgICAgICAgICBpZiAoKHJjID0gemNoa2koKnhhcmd2KSkgPiAt MSB8fCAocmMgPT0gLTIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAgKHJjICE9IC0y KQorICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlZmlsZXMgPSAxOworICAgICAgICAgICAg ICAgICAgICAgICAgbmZpbHMrKzsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpc3dp bGQoKnhhcmd2KSAmJiBuenhwYW5kKCp4YXJndiwwKSA+IDApIHsKKyAgICAgICAgICAgICAgICAg ICAgICAgIGhhdmVmaWxlcyA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICBuZmlscysrOwor ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgeGFy Z2MrKywgeGFyZ3YtLTsgICAgICAgICAvKiBBZGp1c3QgYXJndi9hcmdjICovCisgICAgICAgICAg ICAgIGlmICghaGF2ZWZpbGVzKSB7CisgICAgICAgICAgICAgICAgICBpZiAoYyA9PSAnZycpIHsK KyAgICAgICAgICAgICAgICAgICAgICBmYXRhbCgiTm8gZmlsZXMgdG8gcHV0Iik7CisgICAgICAg ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgIGZhdGFsKCJObyBmaWxl cyB0byBnZXQiKTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICBmdHBfYWN0aW9uID0gYzsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg fQorICAgICAgICAgIGNhc2UgJ0QnOiAgICAgICAgICAgICAgICAgICAgIC8qIERpcmVjdG9yeSAq LworICAgICAgICAgICAgbWFrZXN0cigmZnRwX3JkaXIsKnhhcmd2KTsKKyAgICAgICAgICAgIGJy ZWFrOworCisgICAgICAgICAgY2FzZSAnbSc6ICAgICAgICAgICAgICAgICAgICAgLyogTW9kZSAo QWN0aXZlL1Bhc3NpdmUgKi8KKyAgICAgICAgICAgIGZ0cF9wc3YgPSBsb29rdXAobW9kZXRhYiwq eGFyZ3YsMixOVUxMKTsKKyAgICAgICAgICAgIGlmIChmdHBfcHN2IDwgMCkgZmF0YWwoIkludmFs aWQgbW9kZSIpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlICdQJzoKKyAg ICAgICAgICAgIG1ha2VzdHIoJmZ0cF90bXAsKnhhcmd2KTsgICAvKiBZb3UtS25vdy1XaGF0ICov CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgJ1knOiAgICAgICAgICAgICAg ICAgICAgIC8qIE5vIGluaXRpYWxpemF0aW9uIGZpbGUgKi8KKyAgICAgICAgICAgIGJyZWFrOyAg ICAgICAgICAgICAgICAgICAgICAvKiAoYWxyZWFkeSBkb25lIGluIHByZXNjYW4pICovCisKKyNp ZmRlZiBDS19VUkwKKyAgICAgICAgICBjYXNlICdVJzogeyAgICAgICAgICAgICAgICAgICAvKiBV UkwgKi8KKyAgICAgICAgICAgICAgLyogVGhlc2UgYXJlIHNldCBieSB1cmxwYXJzZSgpIC0gYW55 IG5vdCBzZXQgYXJlIE5VTEwgKi8KKyAgICAgICAgICAgICAgaWYgKGdfdXJsLmhvcykgeworLyoK KyAgS2VybWl0IGhhcyBhY2NlcHRlZCBob3N0OnBvcnQgbm90YXRpb24gc2luY2UgbWFueSB5ZWFy cyBiZWZvcmUgVVJMcyB3ZXJlCisgIGludmVudGVkLiAgVW5mb3J0dW5hdGVseSwgVVJMcyBjb25m bGljdCB3aXRoIHRoaXMgbm90YXRpb24uICBUaHVzICJmdHAKKyAgaG9zdDo0NDkiIGxvb2tzIGxp a2UgYSBVUkwgYW5kIHJlc3VsdHMgaW4gc2VydmljZSA9IGhvc3QgYW5kIGhvc3QgPSA0NDkuCisg IEhlcmUgd2UgdHJ5IHRvIGNhdGNoIHRoaXMgc2l0dWF0aW9uIHRyYW5zcGFyZW50bHkgdG8gdGhl IHVzZXIuCisqLworICAgICAgICAgICAgICAgICAgaWYgKGNrc3RyY21wKGdfdXJsLnN2YywiZnRw IiwtMSwwKQorI2lmZGVmIENLX1NTTAorICAgICAgICAgICAgICAgICAgICAgICAmJiBja3N0cmNt cChnX3VybC5zdmMsImZ0cHMiLC0xLDApCisjZW5kaWYgLyogQ0tfU1NMICovCisgICAgICAgICAg ICAgICAgICAgICAgICkgeworICAgICAgICAgICAgICAgICAgICAgIGlmICghZ191cmwudXNyICYm CisgICAgICAgICAgICAgICAgICAgICAgICAgICFnX3VybC5wc3cgJiYKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgIWdfdXJsLnBvciAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAhZ191 cmwucHRoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGdfdXJsLnBvciA9IGdfdXJsLmhv czsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZ191cmwuaG9zID0gZ191cmwuc3ZjOworICAg ICAgICAgICAgICAgICAgICAgICAgICBnX3VybC5zdmMgPSAiZnRwIjsKKyAgICAgICAgICAgICAg ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICBja21ha21zZyh0bXBi dWYsVE1QQlVGU0laLCJOb24tRlRQIFVSTDogc2VydmljZT0iLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBnX3VybC5zdmMsIiBob3N0PSIsZ191cmwuaG9zKTsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgZmF0YWwodG1wYnVmKTsKKyAgICAgICAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICBtYWtlc3RyKCZmdHBfaG9z dCxnX3VybC5ob3MpOworICAgICAgICAgICAgICAgICAgaWYgKGdfdXJsLnVzcikgeworICAgICAg ICAgICAgICAgICAgICAgIGhhdmVmdHB1aWQgPSAxOworICAgICAgICAgICAgICAgICAgICAgIGNr c3RybmNweSh1aWRidWYsZ191cmwudXNyLFVJREJVRkxFTik7CisgICAgICAgICAgICAgICAgICAg ICAgbWFrZXN0cigmZnRwX2xvZ25hbWUsdWlkYnVmKTsKKyAgICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgICAgIGlmIChnX3VybC5wc3cpIHsKKyAgICAgICAgICAgICAgICAgICAgICBt YWtlc3RyKCZmdHBfdG1wLGdfdXJsLnBzdyk7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgICAgICBpZiAoZ191cmwucHRoKSB7CisgICAgICAgICAgICAgICAgICAgICAgaWYgKCFn X3VybC51c3IpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWZ0cHVpZCA9IDE7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgIGNrc3RybmNweSh1aWRidWYsImFub255bW91cyIsVUlE QlVGTEVOKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZXN0cigmZnRwX2xvZ25hbWUs dWlkYnVmKTsKKyAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg aWYgKGZ0cF9hY3Rpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZmF0YWwoIk9ubHkg b25lIEZUUCBhY3Rpb24gYXQgYSB0aW1lIHBsZWFzZSIpOworICAgICAgICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgICAgICAgICBpZiAoIXN0YXlmbGcpCisgICAgICAgICAgICAgICAg ICAgICAgICBxdWlldCA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgbmZpbHMgPSAxOworICAg ICAgICAgICAgICAgICAgICAgIGR1bW15WzBdID0gZ191cmwucHRoOworICAgICAgICAgICAgICAg ICAgICAgIGNtbGlzdCA9IGR1bW15OworICAgICAgICAgICAgICAgICAgICAgIGZ0cF9hY3Rpb24g PSAnZyc7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICB4cCA9IE5VTEw7 CisgICAgICAgICAgICAgICAgICBoYXZldXJsID0gMTsKKyAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisjZW5kaWYgLyogQ0tfVVJMICovCisKKyNpZmRl ZiBGVFBfU0VDVVJJVFkKKyAgICAgICAgICBjYXNlICdrJzogeyAgICAgICAgICAgICAgICAgICAv KiBLNCBSZWFsbSAqLworI2lmZGVmIEZUUF9LUkI0CisgICAgICAgICAgICAgIGNrc3RybmNweShm dHBfcmVhbG0sKnhhcmd2LCBSRUFMTV9TWik7CisjZW5kaWYgLyogRlRQX0tSQjQgKi8KKyAgICAg ICAgICAgICAgaWYgKGZ0cF9kZWIpIHByaW50ZigiSzQgUmVhbG0gPSBbJXNdXG4iLCp4YXJndik7 CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgICBjYXNlICdmJzog eworI2lmZGVmIEZUUF9HU1NBUEkKKyAgICAgICAgICAgICAgZnRwX2NmdyA9IDE7CisgICAgICAg ICAgICAgIGlmIChmdHBfZGViKSBwcmludGYoIks1IENyZWRlbnRpYWxzIEZvcndhcmRpbmdcbiIp OworI2Vsc2UgLyogRlRQX0dTU0FQSSAqLworICAgICAgICAgICAgICBwcmludGYoIks1IENyZWRl bnRpYWxzIEZvcndhcmRpbmcgbm90IHN1cHBvcnRlZFxuIik7CisjZW5kaWYgLyogRlRQX0dTU0FQ SSAqLworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAgICAgICAgY2FzZSAn eCc6IHsKKyAgICAgICAgICAgICAgZnRwX2NyeSA9IDE7CisgICAgICAgICAgICAgIGlmIChmdHBf ZGViKSBwcmludGYoIkF1dG9lbmNyeXB0aW9uXG4iKTsKKyAgICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgICAgfQorICAgICAgICAgIGNhc2UgJ2MnOiB7ICAgICAgICAgICAgICAgICAgIC8qIENp cGhlciAqLworI2lmZGVmIEZUUF9TUlAKKyAgICAgICAgICAgICAgaWYgKCFzcnBfc2VsY2lwaGVy KCp4YXJndikpIHsKKyAgICAgICAgICAgICAgICAgIGlmIChmdHBfZGViKSBwcmludGYoIlNSUCBj aXBoZXIgdHlwZTogXCIlc1wiXG4iLCp4YXJndik7CisgICAgICAgICAgICAgIH0gZWxzZQorICAg ICAgICAgICAgICAgIHByaW50ZigiP0ludmFsaWQgU1JQIGNpcGhlciB0eXBlOiBcIiVzXCJcbiIs Knhhcmd2KTsKKyNlbHNlIC8qIEZUUF9TUlAgKi8KKyAgICAgICAgICAgICAgcHJpbnRmKCI/U1JQ IG5vdCBzdXBwb3J0ZWRcbiIpOworI2VuZGlmIC8qIEZUUF9TUlAgKi8KKyAgICAgICAgICAgICAg YnJlYWs7CisgICAgICAgICAgfQorICAgICAgICAgIGNhc2UgJ0gnOiB7CisjaWZkZWYgRlRQX1NS UAorICAgICAgICAgICAgICBpZiAoIXNycF9zZWxoYXNoKCp4YXJndikpIHsKKyAgICAgICAgICAg ICAgICAgIGlmIChmdHBfZGViKSBwcmludGYoIlNSUCBoYXNoIHR5cGU6IFwiJXNcIlxuIiwqeGFy Z3YpOworICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBwcmludGYoIj9JbnZh bGlkIFNSUCBoYXNoIHR5cGU6IFwiJXNcIlxuIiwqeGFyZ3YpOworI2Vsc2UgLyogRlRQX1NSUCAq LworICAgICAgICAgICAgICBwcmludGYoIj9TUlAgbm90IHN1cHBvcnRlZFxuIik7CisjZW5kaWYg LyogRlRQX1NSUCAqLworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAgICAg ICAgY2FzZSAneic6IHsKKyAgICAgICAgICAgICAgLyogKnhhcmd2IGNvbnRhaW5zIGEgdmFsdWUg b2YgdGhlIGZvcm0gdGFnPXZhbHVlICovCisgICAgICAgICAgICAgIC8qIHdlIG5lZWQgdG8gbG9v a3VwIHRoZSB0YWcgYW5kIHNhdmUgdGhlIHZhbHVlICAqLworICAgICAgICAgICAgICBjaGFyICog cCA9IE5VTEwsICogcSA9IE5VTEw7CisgICAgICAgICAgICAgIG1ha2VzdHIoJnAsKnhhcmd2KTsK KyAgICAgICAgICAgICAgeSA9IGNraW5kZXgoIj0iLHAsMCwwLDEpOworICAgICAgICAgICAgICBp ZiAoeSA+IDApCisgICAgICAgICAgICAgICAgcFt5LTFdID0gJ1wwJzsKKyAgICAgICAgICAgICAg eCA9IGxvb2t1cChmdHB6dGFiLHAsbmZ0cHp0YWIsJnopOworICAgICAgICAgICAgICBpZiAoeCA8 IDApIHsKKyAgICAgICAgICAgICAgICAgIHByaW50ZigiP0ludmFsaWQgc2VjdXJpdHkgb3B0aW9u OiBcIiVzXCJcbiIscCk7CisgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg ICBpZiAoZnRwX2RlYikKKwkJICAgIHByaW50ZigiU2VjdXJpdHkgb3B0aW9uOiBcIiVzIixwKTsK KyAgICAgICAgICAgICAgICAgIGlmIChmdHB6dGFiW3pdLmZsZ3MgJiBDTV9BUkcpIHsKKyAgICAg ICAgICAgICAgICAgICAgICBpZiAoeSA8PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgZmF0 YWwoIj9NaXNzaW5nIHJlcXVpcmVkIHZhbHVlIik7CisgICAgICAgICAgICAgICAgICAgICAgcSA9 ICZwW3ldOworICAgICAgICAgICAgICAgICAgICAgIGlmICghKnEpCisgICAgICAgICAgICAgICAg ICAgICAgICBmYXRhbCgiP01pc3NpbmcgcmVxdWlyZWQgdmFsdWUiKTsKKyAgICAgICAgICAgICAg ICAgICAgICBpZiAoZnRwX2RlYikKKwkJCXByaW50ZigiPSVzXCIiLHEpOworICAgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICAgICAgc3dpdGNoIChmdHB6dGFiW3pdLmt3dmFsKSB7IC8q IC16IG9wdGlvbnMgdy9hcmdzICovCisgICAgICAgICAgICAgICAgICAgIGNhc2UgRlRfTk9HU1M6 CisjaWZkZWYgRlRQX0dTU0FQSQorICAgICAgICAgICAgICAgICAgICAgIGZvciAoeiA9IDA7IHog PCBGVFBBVFlQUyAmJiBmdHBfYXV0aF90eXBlW3pdOyB6KyspIHsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgaWYgKGZ0cF9hdXRoX3R5cGVbel0gPT0gRlRBX0dLNSkgeworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZm9yICh5ID0gejsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgeSA8IChGVFBBVFlQUy0xKSAmJiBmdHBfYXV0aF90eXBlW3ldOworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB5KysKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdHBfYXV0aF90eXBl W3ldID0gZnRwX2F1dGhfdHlwZVt5KzFdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZnRwX2F1dGhfdHlwZVtGVFBBVFlQUy0xXSA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg ICAgICAgIH0KKyNlbmRpZiAvKiBGVFBfR1NTQVBJICovCisgICAgICAgICAgICAgICAgICAgICAg YnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRlRfTk9LNDoKKyNpZmRlZiBGVFBfS1JC NAorICAgICAgICAgICAgICAgICAgICAgIGZvciAoeiA9IDA7IHogPCBGVFBBVFlQUyAmJiBmdHBf YXV0aF90eXBlW3pdOyB6KyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZ0cF9h dXRoX3R5cGVbel0gPT0gRlRBX0s0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm b3IgKHkgPSB6OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5IDwgKEZUUEFU WVBTLTEpICYmIGZ0cF9hdXRoX3R5cGVbeV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHkrKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGZ0cF9hdXRoX3R5cGVbeV0gPSBmdHBfYXV0aF90eXBl W3krMV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdHBfYXV0aF90eXBlW0ZUUEFU WVBTLTFdID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgfQorI2VuZGlmIC8q IEZUUF9LUkI0ICovCisgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg ICAgICAgIGNhc2UgRlRfTk9TUlA6CisjaWZkZWYgRlRQX1NSUAorICAgICAgICAgICAgICAgICAg ICAgIGZvciAoeiA9IDA7IHogPCBGVFBBVFlQUyAmJiBmdHBfYXV0aF90eXBlW3pdOyB6KyspIHsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZ0cF9hdXRoX3R5cGVbel0gPT0gRlRBX1NS UCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh5ID0gejsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA8IChGVFBBVFlQUy0xKSAmJiBmdHBfYXV0aF90 eXBlW3ldOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5KysKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBmdHBfYXV0aF90eXBlW3ldID0gZnRwX2F1dGhfdHlwZVt5KzFdOworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZnRwX2F1dGhfdHlwZVtGVFBBVFlQUy0xXSA9IDA7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg fQorICAgICAgICAgICAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBGVFBfU1JQICovCisgICAgICAg ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRlRfTk9TU0w6 CisjaWZkZWYgQ0tfU1NMCisgICAgICAgICAgICAgICAgICAgICAgZm9yICh6ID0gMDsgeiA8IEZU UEFUWVBTICYmIGZ0cF9hdXRoX3R5cGVbel07IHorKykgeworICAgICAgICAgICAgICAgICAgICAg ICAgICBpZiAoZnRwX2F1dGhfdHlwZVt6XSA9PSBGVEFfU1NMKSB7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBmb3IgKHkgPSB6OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB5IDwgKEZUUEFUWVBTLTEpICYmIGZ0cF9hdXRoX3R5cGVbeV07CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHkrKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ0cF9hdXRoX3R5cGVbeV0g PSBmdHBfYXV0aF90eXBlW3krMV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdHBf YXV0aF90eXBlW0ZUUEFUWVBTLTFdID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg ICAgfQorI2VuZGlmIC8qIENLX1NTTCAqLworICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICAgICAgICAgICAgICBjYXNlIEZUX05PVExTOgorI2lmZGVmIENLX1NTTAorICAgICAg ICAgICAgICAgICAgICAgIGZvciAoeiA9IDA7IHogPCBGVFBBVFlQUyAmJiBmdHBfYXV0aF90eXBl W3pdOyB6KyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZ0cF9hdXRoX3R5cGVb el0gPT0gRlRBX1RMUykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh5ID0g ejsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA8IChGVFBBVFlQUy0xKSAm JiBmdHBfYXV0aF90eXBlW3ldOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5 KysKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBmdHBfYXV0aF90eXBlW3ldID0gZnRwX2F1dGhfdHlwZVt5KzFdOwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnRwX2F1dGhfdHlwZVtGVFBBVFlQUy0xXSA9 IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBDS19TU0wg Ki8KKyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2Fz ZSBGVF9DRVJURkk6CisjaWZkZWYgQ0tfU1NMCisgICAgICAgICAgICAgICAgICAgICAgbWFrZXN0 cigmc3NsX3JzYV9jZXJ0X2ZpbGUscSk7CisjZW5kaWYgLyogQ0tfU1NMICovCisgICAgICAgICAg ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRlRfT0tDRVJUOgor I2lmZGVmIENLX1NTTAorICAgICAgICAgICAgICAgICAgICAgIHNzbF9jZXJ0c29rX2ZsYWcgPSAx OworI2VuZGlmIC8qIENLX1NTTCAqLworICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg ICAgICAgICAgICAgICAgICBjYXNlIEZUX0RFQlVHOgorI2lmZGVmIERFQlVHCisgICAgICAgICAg ICAgICAgICAgICAgaWYgKGRlYmxvZykgeworICAgICAgICAgICAgICAgICAgICAgICAgICBleHRl cm4gaW50IGRlYnRpbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidGltID0gMTsKKyAg ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICBk ZWJsb2cgPSBkZWJvcG4oImRlYnVnLmxvZyIsMCk7CisgICAgICAgICAgICAgICAgICAgICAgfQor I2VuZGlmIC8qIERFQlVHICovCisgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg ICAgICAgICAgICAgIGNhc2UgRlRfS0VZOgorI2lmZGVmIENLX1NTTAorICAgICAgICAgICAgICAg ICAgICAgIG1ha2VzdHIoJnNzbF9yc2Ffa2V5X2ZpbGUscSk7CisjZW5kaWYgLyogQ0tfU1NMICov CisgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2Ug RlRfU0VDVVJFOgorICAgICAgICAgICAgICAgICAgICAgIC8qIG5vIGVxdWl2YWxlbnQgKi8KKyAg ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBGVF9W RVJJRlk6CisjaWZkZWYgQ0tfU1NMCisgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZGlnaXRz KHEpKQorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/QmFkIG51bWJlcjogJXNcbiIs cSk7CisgICAgICAgICAgICAgICAgICAgICAgc3NsX3ZlcmlmeV9mbGFnID0gYXRvaShxKTsKKyNl bmRpZiAvKiBDS19TU0wgKi8KKyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBpZiAoZnRwX2RlYikg cHJpbnRmKCJcIlxuIik7CisgICAgICAgICAgICAgIGZyZWUocCk7CisgICAgICAgICAgICAgIGJy ZWFrOworICAgICAgICAgIH0KKyNlbmRpZiAvKiBGVFBfU0VDVVJJVFkgKi8KKworICAgICAgICAg IGRlZmF1bHQ6CisgICAgICAgICAgICBmYXRhbDIoKnhhcmd2LAorICAgICAgICAgICAgICAgICAg ICJ1bmtub3duIGNvbW1hbmQtbGluZSBvcHRpb24sIHR5cGUgXCJmdHAgLWhcIiBmb3IgaGVscCIK KyAgICAgICAgICAgICAgICAgICApOworICAgICAgICB9CisgICAgICAgIGlmICgheHApIGJyZWFr OworICAgICAgICBjID0gKisreHA7ICAgICAgICAgICAgICAgICAgICAgIC8qIFNlZSBpZiBvcHRp b25zIGFyZSBidW5kbGVkICovCisgICAgfQorICAgIHJldHVybigwKTsKK30KKyNlbmRpZiAvKiBO T0NNREwgKi8KKworaW50CitmdHBpc2Nvbm5lY3RlZCgpIHsKKyAgICByZXR1cm4oY29ubmVjdGVk KTsKK30KKworaW50CitmdHBpc2xvZ2dlZGluKCkgeworICAgIHJldHVybihjb25uZWN0ZWQgPyBs b2dnZWRpbiA6IDApOworfQorCitpbnQKK2Z0cGlzc2VjdXJlKCkgeworICAgIHJldHVybigoZnRw X2RwbCA9PSBGUExfQ0xSICYmICFzc2xfZnRwX3Byb3h5KSA/IDAgOiAxKTsKK30KKworc3RhdGlj IFZPSUQKK2Z0c2NyZWVuKG4sIGMsIHosIHMpIGludCBuOyBjaGFyIGM7IENLX09GRl9UIHo7IGNo YXIgKiBzOyB7CisgICAgaWYgKGRpc3BsYSAmJiBmZGlzcGxhICYmICFiYWNrZ3JkICYmICFxdWll dCAmJiAhb3V0MnNjcmVlbikgeworICAgICAgICBpZiAoIWRweWFjdGl2ZSkgeworICAgICAgICAg ICAgY2tzY3JlZW4oU0NSX1BULCdTJywoQ0tfT0ZGX1QpMCwiIik7CisgICAgICAgICAgICBkcHlh Y3RpdmUgPSAxOworICAgICAgICB9CisgICAgICAgIGNrc2NyZWVuKG4sYyx6LHMpOworICAgIH0K K30KKworI2lmbmRlZiBPUzIKKy8qICBnIG0gcyB0IGkgbSBlIHIgIC0tICBNaWxsaXNlY29uZCB0 aW1lciAqLworCitsb25nCitnbXN0aW1lcigpIHsKKyNpZmRlZiBIQVZFX01TRUNTCisgICAgLyog Rm9yIHRob3NlIHZlcnNpb25zIG9mIHp0aW1lKCkgdGhhdCBhbHNvIHNldCBnbG9iYWwgenRtc2Vj LiAqLworICAgIGNoYXIgKnAgPSBOVUxMOworICAgIGxvbmcgejsKKyAgICB6dGltZSgmcCk7Cisg ICAgaWYgKCFwKSByZXR1cm4oMEwpOworICAgIGlmICghKnApIHJldHVybigwTCk7CisgICAgeiA9 IGF0b2wocCsxMSkgKiAzNjAwTCArIGF0b2wocCsxNCkgKiA2MEwgKyBhdG9sKHArMTcpOworICAg IHJldHVybih6ICogMTAwMCArIHp0bXNlYyk7CisjZWxzZQorICAgIHJldHVybigobG9uZyl0aW1l KE5VTEwpICogMTAwMEwpOworI2VuZGlmIC8qIEhBVkVfTVNFQ1MgKi8KK30KKyNlbmRpZiAvKiBP UzIgKi8KKworLyogIGQgbyBzIGUgdCBmIHQgcCAgLS0gIFRoZSBTRVQgRlRQIGNvbW1hbmQgICov CisKK2ludAorZG9zZXRmdHAoKSB7CisgICAgaW50IGN4OworICAgIGlmICgoY3ggPSBjbWtleShm dHBzZXQsbmZ0cHNldCwiIiwiIix4eHN0cmluZykpIDwgMCkgLyogU2V0IHdoYXQ/ICovCisgICAg ICByZXR1cm4oY3gpOworICAgIHN3aXRjaCAoY3gpIHsKKworICAgICAgY2FzZSBGVFNfRk5DOiAg ICAgICAgICAgICAgICAgICAgIC8qIEZpbGVuYW1lIGNvbGxpc2lvbiBhY3Rpb24gKi8KKyAgICAg ICAgaWYgKCh4ID0gY21rZXkoZnRwY29seHRhYixuZnRwY29seCwiIiwiIix4eHN0cmluZykpIDwg MCkKKyAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkK KyAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgIGZ0cF9mbmMgPSB4OworICAgICAgICByZXR1 cm4oMSk7CisKKyAgICAgIGNhc2UgRlRTX0NOVjogICAgICAgICAgICAgICAgICAgICAvKiBGaWxl bmFtZSBjb252ZXJzaW9uICovCisgICAgICAgIGlmICgoeCA9IGNta2V5KGZudGFiLG5mbnRhYiwi IiwiYXV0b21hdGljIix4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICByZXR1cm4oeCk7CisgICAg ICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkKKyAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAg IGZ0cF9jbnYgPSB4OworICAgICAgICByZXR1cm4oMSk7CisKKyAgICAgIGNhc2UgRlRTX0RCRzog ICAgICAgICAgICAgICAgICAgICAvKiBEZWJ1ZyBtZXNzYWdlcyAqLworICAgICAgICByZXR1cm4o c2V0b24oJmZ0cF9kZWIpKTsKKworICAgICAgY2FzZSBGVFNfTE9HOiAgICAgICAgICAgICAgICAg ICAgIC8qIEF1dG8tbG9naW4gKi8KKyAgICAgICAgcmV0dXJuKHNldG9uKCZmdHBfbG9nKSk7CisK KyAgICAgIGNhc2UgRlRTX1BTVjogICAgICAgICAgICAgICAgICAgICAvKiBQYXNzaXZlIG1vZGUg Ki8KKwlyZXR1cm4oZG9zZXRmdHBwc3YoKSk7CisKKyAgICAgIGNhc2UgRlRTX1NQQzogICAgICAg ICAgICAgICAgICAgICAvKiBTZW5kIHBvcnQgY29tbWFuZHMgKi8KKyAgICAgICAgeCA9IHNldG9u KCZmdHBfc3BjKTsKKyAgICAgICAgaWYgKHggPiAwKSBzZW5kcG9ydCA9IGZ0cF9zcGM7CisgICAg ICAgIHJldHVybih4KTsKKworICAgICAgY2FzZSBGVFNfVFlQOiAgICAgICAgICAgICAgICAgICAg IC8qIFR5cGUgKi8KKyAgICAgICAgaWYgKCh4ID0gY21rZXkoZnRwdHlwLG5mdHB0eXAsIiIsIiIs eHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICBpZiAoKHkgPSBj bWNmbSgpKSA8IDApIHJldHVybih5KTsKKwlmdHBfdHlwID0geDsKKwlnX2Z0cF90eXAgPSB4Owor CXRlbmV4ID0gKGZ0cF90eXAgPT0gRlRUX1RFTik7CisgICAgICAgIHJldHVybigxKTsKKworICAg ICAgY2FzZSBGVFNfVVNOOiAgICAgICAgICAgICAgICAgICAgIC8qIFVuaXF1ZSBzZXJ2ZXIgbmFt ZXMgKi8KKyAgICAgICAgcmV0dXJuKHNldG9uKCZmdHBfdXNuKSk7CisKKyAgICAgIGNhc2UgRlRT X1ZCTTogICAgICAgICAgICAgICAgICAgICAvKiBWZXJib3NlIG1vZGUgKi8KKyAgICAgICAgaWYg KCh4ID0gc2V0b24oJmZ0cF92Ym0pKSA8IDApICAvKiBQZXItY29tbWFuZCBjb3B5ICovCisgICAg ICAgICAgcmV0dXJuKHgpOworICAgICAgICBmdHBfdmJ4ID0gZnRwX3ZibTsgICAgICAgICAgICAg IC8qIEdsb2JhbCBzdGlja3kgY29weSAqLworICAgICAgICByZXR1cm4oeCk7CisKKyAgICAgIGNh c2UgRlRTX1RTVDogICAgICAgICAgICAgICAgICAgICAvKiAiaWYgKHRlc3RpbmcpIiBtZXNzYWdl cyAqLworICAgICAgICByZXR1cm4oc2V0b24oJnRlc3RpbmcpKTsKKworICAgICAgY2FzZSBGVFNf UFJNOiAgICAgICAgICAgICAgICAgICAgIC8qIFNlbmQgcGVybWlzc2lvbnMgKi8KKyAgICAgICAg cmV0dXJuKHNldG9uYXV0KCZmdHBfcHJtKSk7CisKKyAgICAgIGNhc2UgRlRTX0FVVDogICAgICAg ICAgICAgICAgICAgICAvKiBBdXRvLWF1dGhlbnRpY2F0aW9uICovCisgICAgICAgIHJldHVybihz ZXRvbigmZnRwX2F1dCkpOworCisgICAgICBjYXNlIEZUU19FUlI6ICAgICAgICAgICAgICAgICAg ICAgLyogRXJyb3IgYWN0aW9uICovCisgICAgICAgIGlmICgoeCA9IGNta2V5KHFvcnAsMiwiIiwi Iix4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgIGlmICgoeSA9 IGNtY2ZtKCkpIDwgMCkKKyAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgIGZ0cF9lcnIgPSB4 OworICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworCisjaWZuZGVmIE5PQ1NFVFMKKyAgICAg IGNhc2UgRlRTX1hMQTogICAgICAgICAgICAgICAgICAgICAvKiBUcmFuc2xhdGlvbiAqLworICAg ICAgICByZXR1cm4oc2V0b24oJmZ0cF94bGEpKTsKKworICAgICAgY2FzZSBGVFNfQ1NSOiAgICAg ICAgICAgICAgICAgICAgIC8qIFNlcnZlciBjaGFyc2V0ICovCisgICAgICAgIGlmICgoeCA9IGNt a2V5KGZjc3RhYixuZmlsYywiY2hhcmFjdGVyLXNldCIsInV0ZjgiLHh4c3RyaW5nKSkgPCAwKQor ICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKQorICAg ICAgICAgIHJldHVybih5KTsKKyAgICAgICAgZnRwX2NzciA9IHg7CisgICAgICAgIGZ0cF94bGEg PSAxOyAgICAgICAgICAgICAgICAgICAgLyogQWxzbyBlbmFibGUgdHJhbnNsYXRpb24gKi8KKyAg ICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKyNlbmRpZiAvKiBOT0NTRVRTICovCisKKyAgICAg IGNhc2UgRlRTX0dGVDoKKyAgICAgICAgcmV0dXJuKHNldG9uKCZnZXRfYXV0bykpOyAgICAgICAv KiBHRVQtZmlsZXR5cGUtc3dpdGNoaW5nICovCisKKyAgICAgIGNhc2UgRlRTX0RBVDoKKyAgICAg ICAgcmV0dXJuKHNldG9uKCZmdHBfZGF0ZXMpKTsgICAgICAvKiBTZXQgZmlsZSBkYXRlcyAqLwor CisjaWZkZWYgRlRQX1RJTUVPVVQKKyAgICAgIGNhc2UgRlRTX1RNTzoJCQkvKiBUaW1lb3V0ICov CisgICAgICAgIGlmICgoeCA9IGNtbnVtKCJOdW1iZXIgb2Ygc2Vjb25kcyIsIjAiLDEwLCZ6LHh4 c3RyaW5nKSkgPCAwKQorICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgaWYgKCh5ID0gY21j Zm0oKSkgPCAwKQorICAgICAgICAgIHJldHVybih5KTsKKwlmdHBfdGltZW91dCA9IHo7CisJcmV0 dXJuKHN1Y2Nlc3MgPSAxKTsKKyNlbmRpZgkvKiBGVFBfVElNRU9VVCAqLworCisgICAgICBjYXNl IEZUU19TVE86IHsJCQkvKiBTZXJ2ZXIgdGltZSBvZmZzZXQgKi8KKwkgIGNoYXIgKiBzLCAqIHAg PSBOVUxMOworCSAgbG9uZyBrOworCSAgaWYgKCh4ID0gY21mbGQoIlsrLV1oaFs6bW1bOnNzXV0i LCIrMCIsJnMseHhzdHJpbmcpKSA8IDApCisJICAgIHJldHVybih4KTsKKwkgIGlmICghc3RyY21w KHMsIiswIikpIHsKKwkgICAgICBzID0gTlVMTDsKKwkgIH0gZWxzZSBpZiAoKHggPSBkZWx0YTJz ZWMocywmaykpIDwgMCkgeyAvKiBDaGVjayBmb3JtYXQgKi8KKwkgICAgICBwcmludGYoIj9JbnZh bGlkIHRpbWUgb2Zmc2V0XG4iKTsKKwkgICAgICByZXR1cm4oLTkpOworCSAgfQorCSAgbWFrZXN0 cigmcCxzKTsJCS8qIE1ha2UgYSBzYWZlIGNvcHkgdGhlIHN0cmluZyAqLworCSAgaWYgKCh4ID0g Y21jZm0oKSkgPCAwKSB7CS8qIEdldCBjb25maXJtYXRpb24gKi8KKwkgICAgICBpZiAocCkKKwkJ bWFrZXN0cigmcCxOVUxMKTsKKwkgICAgICByZXR1cm4oeCk7CisJICB9CisJICBmdHNfc3RvID0g cDsJCQkvKiBDb25maXJtZWQgLSBzZXQgdGhlIHN0cmluZy4gKi8KKwkgIHJldHVybihzdWNjZXNz ID0gMSk7CisgICAgICB9CisgICAgICBjYXNlIEZUU19BUFc6IHsKKwkgIGNoYXIgKiBzOworCSAg aWYgKCh4ID0gY210eHQoIlRleHQiLCAiIiwgJnMsIHh4c3RyaW5nKSkgPCAwKQorCSAgICByZXR1 cm4oeCk7CisJICBtYWtlc3RyKCZmdHBfYXB3LCAqcyA/IHMgOiBOVUxMKTsKKwkgIHJldHVybihz dWNjZXNzID0gMSk7CisgICAgICB9CisKKyAgICAgIGNhc2UgRlRTX0JVRzogeworICAgICAgICAg IGlmICgoeCA9IGNta2V5KGZ0cGJ1Z3RhYixuZnRwYnVnLCIiLCIiLHh4c3RyaW5nKSkgPCAwKSAK KwkgICAgcmV0dXJuKHgpOworICAgICAgICAgIHN3aXRjaCAoeCkgeworI2lmZGVmIENLX1NTTAor ICAgICAgICAgIGNhc2UgRlRCX1NWMjoKKwkgICAgcmV0dXJuIHNldG9uKCZmdHBfYnVnX3VzZV9z c2xfdjIpOworI2VuZGlmIC8qIENLX1NTTCAqLworICAgICAgICAgIGRlZmF1bHQ6CisJICAgIHJl dHVybigtMik7CisgICAgICAgICAgfQorICAgICAgfQorCisjaWZkZWYgRlRQX1NFQ1VSSVRZCisg ICAgICBjYXNlIEZUU19DUlk6ICAgICAgICAgICAgICAgICAgICAgLyogQXV0by1lbmNyeXB0aW9u ICovCisgICAgICAgIHJldHVybihzZXRvbigmZnRwX2NyeSkpOworCisgICAgICBjYXNlIEZUU19D Rlc6ICAgICAgICAgICAgICAgICAgICAgLyogQ3JlZGVudGlhbC1mb3J3YXJkaW5nICovCisgICAg ICAgIHJldHVybihzZXRvbigmZnRwX2NmdykpOworCisgICAgICBjYXNlIEZUU19DUEw6ICAgICAg ICAgICAgICAgICAgICAgLyogQ29tbWFuZCBwcm90ZWN0aW9uIGxldmVsICovCisgICAgICAgIGlm ICgoeCA9IGNta2V5KGZ0cHBybyxuZnRwcHJvLCIiLCIiLHh4c3RyaW5nKSkgPCAwKSByZXR1cm4o eCk7CisgICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkpOworICAgICAgICBz dWNjZXNzID0gZnRzX2NwbCh4KTsKKyAgICAgICAgcmV0dXJuKHN1Y2Nlc3MpOworCisgICAgICBj YXNlIEZUU19EUEw6ICAgICAgICAgICAgICAgICAgICAgLyogRGF0YSBwcm90ZWN0aW9uIGxldmVs ICovCisgICAgICAgIGlmICgoeCA9IGNta2V5KGZ0cHBybyxuZnRwcHJvLCIiLCIiLHh4c3RyaW5n KSkgPCAwKSByZXR1cm4oeCk7CisgICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJu KHkpOworICAgICAgICAgIHN1Y2Nlc3MgPSBmdHNfZHBsKHgpOworICAgICAgICAgIHJldHVybihz dWNjZXNzKTsKKworICAgICAgY2FzZSBGVFNfQVRQOiB7ICAgICAgICAgICAgICAgICAgIC8qIEZU UCBBdXRoIFR5cGUgKi8KKyAgICAgICAgICBpbnQgaSwgaiwgYXR5cGVzWzhdOworCisgICAgICAg ICAgZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworICAgICAgICAgICAgICBpZiAoKHkgPSBjbWtl eShmdHBhdXRoLG5mdHBhdXRoLCIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaSA9 PSAwKSA/ICJhdXRvbWF0aWMiIDogIiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHh4 c3RyaW5nKSkgPCAwKSB7CisgICAgICAgICAgICAgICAgICBpZiAoeSA9PSAtMykKKyAgICAgICAg ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgaWYgKGkgPiAwICYmICh5ID09IEZUQV9BVVRPKSkgewor ICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/Q2hvaWNlIG1heSBvbmx5IGJlIHVzZWQgaW4gZmly c3QgcG9zaXRpb24uXHJcbiIpOworICAgICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgaTsgaisrKSB7CisgICAg ICAgICAgICAgICAgICBpZiAoYXR5cGVzW2pdID09IHkpIHsKKyAgICAgICAgICAgICAgICAgICAg ICBwcmludGYoIlxyXG4/Q2hvaWNlIGhhcyBhbHJlYWR5IGJlZW4gdXNlZC5cclxuIik7CisgICAg ICAgICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgICBhdHlwZXNbaV0gPSB5OworICAgICAgICAgICAgICBp ZiAoeSA9PSBGVEFfQVVUTykgeworICAgICAgICAgICAgICAgICAgaSsrOworICAgICAgICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgICAgaWYg KGkgPCA4KQorICAgICAgICAgICAgYXR5cGVzW2ldID0gMDsKKyAgICAgICAgICBpZiAoKHogPSBj bWNmbSgpKSA8IDApCisgICAgICAgICAgICByZXR1cm4oeik7CisgICAgICAgICAgaWYgKGF0eXBl c1swXSA9PSBGVEFfQVVUTykgeworICAgICAgICAgICAgICBpID0gMDsKKyNpZmRlZiBGVFBfR1NT QVBJCisgICAgICAgICAgICAgIGZ0cF9hdXRoX3R5cGVbaSsrXSA9IEZUQV9HSzU7CisjZW5kaWYg LyogRlRQX0dTU0FQSSAqLworI2lmZGVmIEZUUF9TUlAKKyAgICAgICAgICAgICAgZnRwX2F1dGhf dHlwZVtpKytdID0gRlRBX1NSUDsKKyNlbmRpZiAvKiBGVFBfU1JQICovCisjaWZkZWYgRlRQX0tS QjQKKyAgICAgICAgICAgICAgZnRwX2F1dGhfdHlwZVtpKytdID0gRlRBX0s0OworI2VuZGlmIC8q IEZUUF9LUkI0ICovCisjaWZkZWYgQ0tfU1NMCisgICAgICAgICAgICAgIGZ0cF9hdXRoX3R5cGVb aSsrXSA9IEZUQV9UTFM7CisgICAgICAgICAgICAgIGZ0cF9hdXRoX3R5cGVbaSsrXSA9IEZUQV9T U0w7CisjZW5kaWYgLyogQ0tfU1NMICovCisgICAgICAgICAgICAgIGZ0cF9hdXRoX3R5cGVbaV0g PSAwOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCA4 OyBpKyspCisgICAgICAgICAgICAgICAgZnRwX2F1dGhfdHlwZVtpXSA9IGF0eXBlc1tpXTsKKyAg ICAgICAgICB9CisgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKyAgICAgIH0KKworICAg ICAgY2FzZSBGVFNfU1JQOgorI2lmZGVmIEZUUF9TUlAKKyAgICAgICAgaWYgKCh4ID0gY21rZXko ZnRwc3JwLG5mdHBzcnAsIiIsIiIseHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgcmV0dXJuKHgp OworICAgICAgICBzd2l0Y2ggKHgpIHsKKyAgICAgICAgICBjYXNlIFNSUF9DSVBIRVI6CisgICAg ICAgICAgICBpZiAoKHggPSBjbWtleShjaXBoZXJ0YWIsbmNpcGhlcnRhYiwiIiwiIix4eHN0cmlu ZykpIDwgMCkKKyAgICAgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICAgICAgaWYgKCh6ID0g Y21jZm0oKSkgPCAwKQorICAgICAgICAgICAgICByZXR1cm4oeik7CisgICAgICAgICAgICBzdWNj ZXNzID0gIXNycF9zZWxjaXBoZXIoY2lwaGVydGFiW3hdLmt3ZCk7CisgICAgICAgICAgICByZXR1 cm4oc3VjY2Vzcyk7CisgICAgICAgICAgY2FzZSBTUlBfSEFTSDoKKyAgICAgICAgICAgIGlmICgo eCA9IGNta2V5KGhhc2h0YWIsbmhhc2h0YWIsIiIsIiIseHhzdHJpbmcpKSA8IDApCisgICAgICAg ICAgICAgIHJldHVybih4KTsKKyAgICAgICAgICAgIGlmICgoeiA9IGNtY2ZtKCkpIDwgMCkKKyAg ICAgICAgICAgICAgcmV0dXJuKHopOworICAgICAgICAgICAgc3VjY2VzcyA9ICFzcnBfc2VsaGFz aChoYXNodGFiW3hdLmt3ZCk7CisgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworICAg ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBpZiAoKHogPSBjbWNmbSgpKSA8IDApCisgICAg ICAgICAgICAgIHJldHVybih6KTsKKyAgICAgICAgICAgIHJldHVybigtMik7CisgICAgICAgIH0K KyNlbHNlIC8qIEZUUF9TUlAgKi8KKyAgICAgICAgaWYgKCh6ID0gY21jZm0oKSkgPCAwKQorICAg ICAgICAgIHJldHVybih6KTsKKyAgICAgICAgcmV0dXJuKC0yKTsKKyNlbmRpZiAvKiBGVFBfU1JQ ICovCisjZW5kaWYgLyogRlRQX1NFQ1VSSVRZICovCisKKyAgICAgIGNhc2UgRlRTX0RJUzoKKwlk b3hkaXMoMik7CQkJLyogMiA9PSBmdHAgKi8KKyAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsK KworICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuKC0yKTsKKyAgICB9Cit9CisKK2ludAor ZnRwYnllKCkgeworICAgIGludCB4OworICAgIGlmICghY29ubmVjdGVkKQorICAgICAgcmV0dXJu KDEpOworICAgIGlmICh0ZXN0aW5nKQorICAgICAgcHJpbnRmKCIgZnRwIGNsb3NpbmcgJXMuLi5c biIsZnRwX2hvc3QpOworICAgIHggPSBmdHBjbG9zZSgpOworICAgIHJldHVybigoeCA+IC0xKSA/ IDEgOiAwKTsKK30KKworLyogIG8gcCBlIG4gZiB0IHAgIC0tICBQYXJzZSBGVFAgaG9zdG5hbWUg JiBwb3J0IGFuZCBvcGVuICovCisKK3N0YXRpYyBpbnQKK29wZW5mdHAocyxvcG5fdGxzKSBjaGFy ICogczsgaW50IG9wbl90bHM7IHsKKyAgICBjaGFyIGMsICogcCwgKiBob3N0bmFtZSA9IE5VTEws ICpob3N0c2F2ZSA9IE5VTEwsICogc2VydmljZSA9IE5VTEw7CisgICAgaW50IGksIG4sIGhhdmVo b3N0ID0gMCwgZ2V0dmFsID0gMCwgcmMgPSAtOSwgb3BuX3BzdiA9IC0xLCBub2xvZ2luID0gMDsK KyAgICBpbnQgaGF2ZXVzZXIgPSAwOworICAgIHN0cnVjdCBGREIgc3csIGZsLCBjbTsKKyAgICBl eHRlcm4gaW50IG5uZXRkaXI7ICAgICAgICAgICAgICAgICAvKiBOZXR3b3JrIHNlcnZpY2VzIGRp cmVjdG9yeSAqLworICAgIGV4dGVybiBpbnQgbmhjb3VudDsgICAgICAgICAgICAgICAgIC8qIExv b2t1cCByZXN1bHQgKi8KKyAgICBleHRlcm4gY2hhciAqbmhfcFtdOyAgICAgICAgICAgICAgICAv KiBOZXR3b3JrIGRpcmVjdG9yeSBlbnRyeSBwb2ludGVycyAqLworICAgIGV4dGVybiBjaGFyICpu aF9wMltdOyAgICAgICAgICAgICAgIC8qIE5ldHdvcmsgZGlyZWN0b3J5IGVudHJ5IG5ldHR5cGUg Ki8KKworICAgIGlmICghcykgcmV0dXJuKC0yKTsKKyAgICBpZiAoISpzKSByZXR1cm4oLTIpOwor CisgICAgbWFrZXN0cigmaG9zdG5hbWUscyk7CisgICAgaG9zdHNhdmUgPSBob3N0bmFtZTsKKyAg ICBtYWtlc3RyKCZmdHBfbG9nbmFtZSxOVUxMKTsKKyAgICBhbm9ueW1vdXMgPSAwOworICAgIG5v aW5pdCA9IDA7CisKKyAgICBkZWJ1ZyhGMTEwLCJmdHAgb3BlbiIsaG9zdG5hbWUsMCk7CisKKyAg ICBpZiAoc2F2X3BzdiA+IC0xKSB7ICAgICAgICAgICAgICAgICAvKiBSZXN0b3JlIHByZXZhaWxp bmcgYWN0aXZlL3Bhc3NpdmUgKi8KKyAgICAgICAgZnRwX3BzdiA9IHNhdl9wc3Y7ICAgICAgICAg ICAgICAvKiBzZWxlY3Rpb24gaW4gY2FzZSBpdCB3YXMgKi8KKyAgICAgICAgc2F2X3BzdiA9IC0x OyAgICAgICAgICAgICAgICAgICAvKiB0ZW1wb3JhcmlseSBvdmVycmlkZW4gYnkgYSBzd2l0Y2gg Ki8KKyAgICB9CisgICAgaWYgKHNhdl9sb2cgPiAtMSkgeyAgICAgICAgICAgICAgICAgLyogRGl0 dG8gZm9yIGF1dG9sb2dpbiAqLworICAgICAgICBmdHBfbG9nID0gc2F2X2xvZzsKKyAgICAgICAg c2F2X2xvZyA9IC0xOworICAgIH0KKyAgICBjbWZkYmkoJnN3LCAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBTd2l0Y2hlcyAqLworICAgICAgICAgICBfQ01LRVksCisgICAgICAgICAgICJTZXJ2 aWNlIG5hbWUgb3IgcG9ydDtcbiBvciBzd2l0Y2giLAorICAgICAgICAgICAiIiwgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIGRlZmF1bHQgKi8KKyAgICAgICAgICAgIiIsICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBhZGR0bCBzdHJpbmcgZGF0YSAqLworICAgICAgICAgICBuZnRwc3dp LCAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAxOiB0Ymwgc2l6ZSAq LworICAgICAgICAgICA0LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVy aWMgZGF0YSAyOiBub25lICovCisgICAgICAgICAgIHh4c3RyaW5nLCAgICAgICAgICAgICAgICAg ICAgLyogUHJvY2Vzc2luZyBmdW5jdGlvbiAqLworICAgICAgICAgICBmdHBzd2l0YWIsICAgICAg ICAgICAgICAgICAgIC8qIEtleXdvcmQgdGFibGUgKi8KKyAgICAgICAgICAgJmZsICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBQb2ludGVyIHRvIG5leHQgRkRCICovCisgICAgICAgICAgICk7 CisgICAgY21mZGJpKCZmbCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogQSBob3N0IG5hbWUg b3IgYWRkcmVzcyAqLworICAgICAgICAgICBfQ01GTEQsICAgICAgICAgICAgICAgICAgICAgIC8q IGZjb2RlICovCisgICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaGVs cCAqLworICAgICAgICAgICAieFl6Qm9vIiwgICAgICAgICAgICAgICAgICAgIC8qIGRlZmF1bHQg Ki8KKyAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBzdHJp bmcgZGF0YSAqLworICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFk ZHRsIG51bWVyaWMgZGF0YSAxICovCisgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDIgKi8KKyAgICAgICAgICAgeHhzdHJpbmcsCisg ICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICZjbQorICAgICAgICAgICApOworICAgIGNtZmRi aSgmY20sICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvbW1hbmQgY29uZmlybWF0aW9uICov CisgICAgICAgICAgIF9DTUNGTSwKKyAgICAgICAgICAgIiIsCisgICAgICAgICAgICIiLAorICAg ICAgICAgICAiIiwKKyAgICAgICAgICAgMCwKKyAgICAgICAgICAgMCwKKyAgICAgICAgICAgTlVM TCwKKyAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgTlVMTAorICAgICAgICAgICApOworCisg ICAgZm9yIChuID0gMDs7IG4rKykgeworICAgICAgICByYyA9IGNtZmRiKCZzdyk7ICAgICAgICAg ICAgICAgIC8qIFBhcnNlIGEgc2VydmljZSBuYW1lIG9yIGEgc3dpdGNoICovCisgICAgICAgIGlm IChyYyA8IDApCisgICAgICAgICAgZ290byB4b3BlbmZ0cDsKKworICAgICAgICBpZiAoY21yZXN1 bHQuZmNvZGUgPT0gX0NNQ0ZNKSB7IC8qIERvbmU/ICovCisgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgfSBlbHNlIGlmIChjbXJlc3VsdC5mY29kZSA9PSBfQ01GTEQpIHsgIC8qIFBvcnQgKi8K KyAgICAgICAgICAgIGlmIChja3N0cmNtcCgieFl6Qm9vIixjbXJlc3VsdC5zcmVzdWx0LC0xLDEp KQorICAgICAgICAgICAgICBtYWtlc3RyKCZzZXJ2aWNlLGNtcmVzdWx0LnNyZXN1bHQpOworICAg ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBtYWtlc3RyKCZzZXJ2aWNlLG9wbl90bHM/ImZ0 cHMiOiJmdHAiKTsKKyAgICAgICAgfSBlbHNlIGlmIChjbXJlc3VsdC5mY29kZSA9PSBfQ01LRVkp IHsgLyogSGF2ZSBhIHN3aXRjaCAqLworICAgICAgICAgICAgYyA9IGNtZ2JyaygpOyAgICAgICAg ICAgICAgIC8qIGdldCBicmVhayBjaGFyYWN0ZXIgKi8KKyAgICAgICAgICAgIGdldHZhbCA9IChj ID09ICc6JyB8fCBjID09ICc9Jyk7CisgICAgICAgICAgICByYyA9IC05OworICAgICAgICAgICAg aWYgKGdldHZhbCAmJiAhKGNtcmVzdWx0LmtmbGFncyAmIENNX0FSRykpIHsKKyAgICAgICAgICAg ICAgICBwcmludGYoIj9UaGlzIHN3aXRjaCBkb2VzIG5vdCB0YWtlIGFyZ3VtZW50c1xuIik7Cisg ICAgICAgICAgICAgICAgZ290byB4b3BlbmZ0cDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg IGlmICghZ2V0dmFsICYmIChjbXJlc3VsdC5rZmxhZ3MgJiBDTV9BUkcpKSB7CisgICAgICAgICAg ICAgICAgcHJpbnRmKCI/VGhpcyBzd2l0Y2ggcmVxdWlyZXMgYW4gYXJndW1lbnRcbiIpOworICAg ICAgICAgICAgICAgIGdvdG8geG9wZW5mdHA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBz d2l0Y2ggKGNtcmVzdWx0Lm5yZXN1bHQpIHsgLyogU3dpdGNoICovCisgICAgICAgICAgICAgIGNh c2UgT1BOX0FOTzogICAgICAgICAgICAgLyogL0FOT05ZTU9VUyAqLworICAgICAgICAgICAgICAg IGFub255bW91cysrOworCQlub2xvZ2luID0gMDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgICAgICAgY2FzZSBPUE5fTklOOiAgICAgICAgICAgICAvKiAvTk9JTklUICovCisgICAg ICAgICAgICAgICAgbm9pbml0Kys7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg ICAgIGNhc2UgT1BOX05PTDogICAgICAgICAgICAgLyogL05PTE9HSU4gKi8KKyAgICAgICAgICAg ICAgICBub2xvZ2luKys7CisJCWFub255bW91cyA9IDA7CisJCW1ha2VzdHIoJmZ0cF9sb2duYW1l LE5VTEwpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIE9QTl9Q U1c6ICAgICAgICAgICAgIC8qIC9QQVNTV09SRCAqLworICAgICAgICAgICAgICAgIGlmICghYW5v bnltb3VzKSAgICAgICAgIC8qIERvbid0IGxvZyByZWFsIHBhc3N3b3JkcyAqLworICAgICAgICAg ICAgICAgICAgZGVib2sgPSAwOworICAgICAgICAgICAgICAgIHJjID0gY21mbGQoIlBhc3N3b3Jk IGZvciBGVFAgc2VydmVyIiwiIiwmcCx4eHN0cmluZyk7CisgICAgICAgICAgICAgICAgaWYgKHJj ID09IC0zKSB7CisgICAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJmZ0cF90bXAsTlVMTCk7Cisg ICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyYyA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAg Z290byB4b3BlbmZ0cDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg ICAgICBtYWtlc3RyKCZmdHBfdG1wLGJyc3RyaXAocCkpOworCQkgICAgbm9sb2dpbiA9IDA7Cisg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBj YXNlIE9QTl9VU1I6ICAgICAgICAgICAgIC8qIC9VU0VSICovCisgICAgICAgICAgICAgICAgcmMg PSBjbWZsZCgiVXNlcm5hbWUgZm9yIEZUUCBzZXJ2ZXIiLCIiLCZwLHh4c3RyaW5nKTsKKyAgICAg ICAgICAgICAgICBpZiAocmMgPT0gLTMpIHsKKyAgICAgICAgICAgICAgICAgICAgbWFrZXN0cigm ZnRwX2xvZ25hbWUsTlVMTCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyYyA8IDApIHsK KyAgICAgICAgICAgICAgICAgICAgZ290byB4b3BlbmZ0cDsKKyAgICAgICAgICAgICAgICB9IGVs c2UgeworCQkgICAgbm9sb2dpbiA9IDA7CisgICAgICAgICAgICAgICAgICAgIGFub255bW91cyA9 IDA7CisJCSAgICBoYXZldXNlciA9IDE7CisgICAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJmZ0 cF9sb2duYW1lLGJyc3RyaXAocCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBPUE5fQUNDOgorICAgICAgICAgICAgICAgIHJj ID0gY21mbGQoIkFjY291bnQgZm9yIEZUUCBzZXJ2ZXIiLCIiLCZwLHh4c3RyaW5nKTsKKyAgICAg ICAgICAgICAgICBpZiAocmMgPT0gLTMpIHsKKyAgICAgICAgICAgICAgICAgICAgbWFrZXN0cigm ZnRwX2FjYyxOVUxMKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJjIDwgMCkgeworICAg ICAgICAgICAgICAgICAgICBnb3RvIHhvcGVuZnRwOworICAgICAgICAgICAgICAgIH0gZWxzZSB7 CisgICAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJmZ0cF9hY2MsYnJzdHJpcChwKSk7CisgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNl IE9QTl9BQ1Q6CisgICAgICAgICAgICAgICAgb3BuX3BzdiA9IDA7CisgICAgICAgICAgICAgICAg YnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgT1BOX1BTVjoKKyAgICAgICAgICAgICAgICBvcG5f cHN2ID0gMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBPUE5f VExTOgorICAgICAgICAgICAgICAgIG9wbl90bHMgPSAxOworICAgICAgICAgICAgICAgIGJyZWFr OworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg ICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChuID09IDApIHsgICAgICAgICAgICAgICAg ICAgLyogQWZ0ZXIgZmlyc3QgdGltZSB0aHJvdWdoICovCisgICAgICAgICAgICBjbWZkYmkoJnN3 LCAgICAgICAgICAgICAgICAgLyogYWNjZXB0IG9ubHkgc3dpdGNoZXMgKi8KKyAgICAgICAgICAg ICAgICAgICBfQ01LRVksCisgICAgICAgICAgICAgICAgICAgIlxuQ2FycmlhZ2UgcmV0dXJuIHRv IGNvbmZpcm0gdG8gY29tbWFuZCwgb3Igc3dpdGNoIiwKKyAgICAgICAgICAgICAgICAgICAiIiwK KyAgICAgICAgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgICAgICAgICBuZnRwc3dpLAorICAg ICAgICAgICAgICAgICAgIDQsCisgICAgICAgICAgICAgICAgICAgeHhzdHJpbmcsCisgICAgICAg ICAgICAgICAgICAgZnRwc3dpdGFiLAorICAgICAgICAgICAgICAgICAgICZjbQorICAgICAgICAg ICAgICAgICAgICk7CisgICAgICAgIH0KKyAgICB9CisjaWZkZWYgQ09NTUVOVAorICAgIGRlYnVn KEYxMDAsImZ0cCBvcGVuZnRwIHdoaWxlIGV4aXQiLCIiLDApOworICAgIHJjID0gY21jZm0oKTsK KyAgICBkZWJ1ZyhGMTAxLCJmdHAgb3BlbmZ0cCBjbWNmbSByYyIsIiIscmMpOworICAgIGlmIChy YyA8IDApCisgICAgICBnb3RvIHhvcGVuZnRwOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKworICAg IGlmIChvcG5fcHN2ID4gLTEpIHsgICAgICAgICAgICAgICAgIC8qIC9QQVNTSVZFIG9yIC9BQ1RJ VkUgc3dpdGNoIGdpdmVuICovCisgICAgICAgIHNhdl9wc3YgPSBmdHBfcHN2OworICAgICAgICBm dHBfcHN2ID0gb3BuX3BzdjsKKyAgICB9CisgICAgaWYgKG5vbG9naW4gfHwgaGF2ZXVzZXIpIHsJ CS8qIC9OT0xPR0lOIG9yIC9VU0VSIHN3aXRjaCBnaXZlbiAqLworCXNhdl9sb2cgPSBmdHBfbG9n OworCWZ0cF9sb2cgPSBoYXZldXNlciA/IDEgOiAwOworICAgIH0KKyAgICBpZiAoKmhvc3RuYW1l ID09ICc9JykgeyAgICAgICAgICAgICAvKiBCeXBhc3MgZGlyZWN0b3J5IGxvb2t1cCAqLworICAg ICAgICBob3N0bmFtZSsrOyAgICAgICAgICAgICAgICAgICAgIC8qIGlmIGhvc3RuYW1lIHN0YXJ0 cyB3aXRoICc9JyAqLworICAgICAgICBoYXZlaG9zdCsrOworICAgIH0gZWxzZSBpZiAoaXNkaWdp dCgqaG9zdG5hbWUpKSB7ICAgIC8qIG9yIGlmIGl0IHN0YXJ0cyB3aXRoIGEgZGlnaXQgKi8KKyAg ICAgICAgaGF2ZWhvc3QrKzsKKyAgICB9CisgICAgaWYgKCFzZXJ2aWNlKQorICAgICAgbWFrZXN0 cigmc2VydmljZSxvcG5fdGxzPyJmdHBzIjoiZnRwIik7CisKKyNpZm5kZWYgTk9ESUFMCisgICAg aWYgKCFoYXZlaG9zdCAmJiBubmV0ZGlyID4gMCkgeyAgICAgLyogSWYgdGhlcmUgaXMgYSBuZXR3 b3JrcyBkaXJlY3RvcnkgKi8KKyAgICAgICAgbHVuZXQoaG9zdG5hbWUpOyAgICAgICAgICAgICAg ICAvKiBMb29rIHVwIHRoZSBuYW1lICovCisgICAgICAgIGRlYnVnKEYxMTEsImZ0cCBvcGVuZnRw IGx1bmV0Iixob3N0bmFtZSxuaGNvdW50KTsKKyAgICAgICAgaWYgKG5oY291bnQgPT0gMCkgewor ICAgICAgICAgICAgaWYgKHRlc3RpbmcpCisgICAgICAgICAgICAgIHByaW50ZigiIGZ0cCBvcGVu IHRyeWluZyBcIiVzICVzXCIuLi5cbiIsaG9zdG5hbWUsc2VydmljZSk7CisgICAgICAgICAgICBz dWNjZXNzID0gZnRwb3Blbihob3N0bmFtZSxzZXJ2aWNlLG9wbl90bHMpOworICAgICAgICAgICAg ZGVidWcoRjEwMSwiZnRwIG9wZW5mdHAgQSBmdHBvcGVuIHN1Y2Nlc3MiLCIiLHN1Y2Nlc3MpOwor ICAgICAgICAgICAgcmMgPSBzdWNjZXNzOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg aW50IGZvdW5kID0gMDsKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuaGNvdW50OyBpKysp IHsKKyAgICAgICAgICAgICAgICBpZiAobmhfcDJbaV0pICAgICAgICAgICAvKiBJZiBuZXR3b3Jr IHR5cGUgc3BlY2lmaWVkICovCisgICAgICAgICAgICAgICAgICBpZiAoY2tzdHJjbXAobmhfcDJb aV0sInRjcC9pcCIsc3RybGVuKG5oX3AyW2ldKSwwKSkKKyAgICAgICAgICAgICAgICAgICAgY29u dGludWU7CisgICAgICAgICAgICAgICAgZm91bmQrKzsKKyAgICAgICAgICAgICAgICBtYWtlc3Ry KCZob3N0bmFtZSxuaF9wW2ldKTsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJmdHBvcGVu IGx1bmV0IHN1YnN0aXR1dGlvbiIsaG9zdG5hbWUsaSk7CisgICAgICAgICAgICAgICAgaWYgKHRl c3RpbmcpCisgICAgICAgICAgICAgICAgICBwcmludGYoIiBmdHAgb3BlbiB0cnlpbmcgXCIlcyAl c1wiLi4uXG4iLGhvc3RuYW1lLHNlcnZpY2UpOworICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBm dHBvcGVuKGhvc3RuYW1lLHNlcnZpY2Usb3BuX3Rscyk7CisgICAgICAgICAgICAgICAgZGVidWco RjEwMSwiZnRwIG9wZW5mdHAgQiBmdHBvcGVuIHN1Y2Nlc3MiLCIiLHN1Y2Nlc3MpOworICAgICAg ICAgICAgICAgIHJjID0gc3VjY2VzczsKKyAgICAgICAgICAgICAgICBpZiAoc3VjY2VzcykKKyAg ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFm b3VuZCkgeyAgICAgICAgICAgICAgIC8qIEUuZy4gaWYgbm8gbmV0d29yayB0eXBlcyBtYXRjaCAq LworICAgICAgICAgICAgICAgIGlmICh0ZXN0aW5nKQorICAgICAgICAgICAgICAgICAgcHJpbnRm KCIgZnRwIG9wZW4gdHJ5aW5nIFwiJXMgJXNcIi4uLlxuIixob3N0bmFtZSxzZXJ2aWNlKTsKKyAg ICAgICAgICAgICAgICBzdWNjZXNzID0gZnRwb3Blbihob3N0bmFtZSxzZXJ2aWNlLG9wbl90bHMp OworICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsImZ0cCBvcGVuZnRwIEMgZnRwb3BlbiBzdWNj ZXNzIiwiIixzdWNjZXNzKTsKKyAgICAgICAgICAgICAgICByYyA9IHN1Y2Nlc3M7CisgICAgICAg ICAgICB9CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworI2VuZGlmIC8qIE5PRElBTCAqLworICAg ICAgICBpZiAodGVzdGluZykKKyAgICAgICAgICBwcmludGYoIiBmdHAgb3BlbiB0cnlpbmcgXCIl cyAlc1wiLi4uXG4iLGhvc3RuYW1lLHNlcnZpY2UpOworICAgICAgICBzdWNjZXNzID0gZnRwb3Bl bihob3N0bmFtZSxzZXJ2aWNlLG9wbl90bHMpOworICAgICAgICBkZWJ1ZyhGMTExLCJmdHAgb3Bl bmZ0cCBEIGZ0cG9wZW4gc3VjY2VzcyIsaG9zdG5hbWUsc3VjY2Vzcyk7CisgICAgICAgIGRlYnVn KEYxMTEsImZ0cCBvcGVuZnRwIEQgZnRwb3BlbiBjb25uZWN0ZWQiLGhvc3RuYW1lLGNvbm5lY3Rl ZCk7CisgICAgICAgIHJjID0gc3VjY2VzczsKKyNpZm5kZWYgTk9ESUFMCisgICAgfQorI2VuZGlm IC8qIE5PRElBTCAqLworCisgIHhvcGVuZnRwOgorICAgIGRlYnVnKEYxMDEsImZ0cCBvcGVuZnRw IHhvcGVuZnRwIHJjIiwiIixyYyk7CisgICAgaWYgKGhvc3RzYXZlKSBmcmVlKGhvc3RzYXZlKTsK KyAgICBpZiAoc2VydmljZSkgZnJlZShzZXJ2aWNlKTsKKyAgICBpZiAocmMgPCAwICYmIGZ0cF9s b2duYW1lKSB7CisgICAgICAgIGZyZWUoZnRwX2xvZ25hbWUpOworICAgICAgICBmdHBfbG9nbmFt ZSA9IE5VTEw7CisgICAgfQorICAgIGlmIChmdHBfdG1wKSB7CisgICAgICAgIGZyZWUoZnRwX3Rt cCk7CisgICAgICAgIGZ0cF90bXAgPSBOVUxMOworICAgIH0KKyAgICByZXR1cm4ocmMpOworfQor CitWT0lECQkJCQkvKiAxMiBBdWcgMjAwNyAqLworZG9mdHBnbG9iYWx0eXBlKHgpIGludCB4OyB7 CisgICAgZnRwX3hmZXJtb2RlID0gWE1PREVfTTsJCS8qIFNldCBtYW51YWwgRlRQIHRyYW5zZmVy IG1vZGUgKi8KKyAgICBmdHBfdHlwID0geDsJCQkvKiBVc2VkIGJ5IHRvcC1sZXZlbCBCSU5BUlkg YW5kICovCisgICAgZ19mdHBfdHlwID0geDsJCQkvKiBBU0NJSSBjb21tYW5kcy4gKi8KKyAgICBn ZXRfYXV0byA9IDA7CisgICAgZm9yY2V0eXBlID0gMTsKK30KKworaW50Citkb2Z0cGFjY3QoKSB7 CisgICAgaW50IHg7CisgICAgY2hhciAqIHM7CisgICAgaWYgKCh4ID0gY210eHQoIlJlbW90ZSBh Y2NvdW50IiwgIiIsICZzLCB4eHN0cmluZykpIDwgMCkKKyAgICAgIHJldHVybih4KTsKKyAgICBD SEVDS0NPTk4oKTsKKyAgICBtYWtlc3RyKCZmdHBfYWNjLGJyc3RyaXAocykpOworICAgIGlmICh0 ZXN0aW5nKQorICAgICAgcHJpbnRmKCIgZnRwIGFjY291bnQ6IFwiJXNcIlxuIixmdHBfYWNjKTsK KyAgICBzdWNjZXNzID0gKGZ0cGNtZCgiQUNDVCIsZnRwX2FjYywtMSwtMSxmdHBfdmJtKSA9PSBS RVBMWV9DT01QTEVURSk7CisgICAgcmV0dXJuKHN1Y2Nlc3MpOworfQorCitpbnQKK2RvZnRwdXNy KCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBMb2cgaW4gYXMgVVNFUiAqLworICAg IGV4dGVybiBjaGFyIHVpZGJ1ZltdOworICAgIGV4dGVybiBjaGFyIHB3YnVmW107CisgICAgZXh0 ZXJuIGludCAgcHdmbGcsIHB3Y3J5cHQ7CisgICAgaW50IHg7CisgICAgY2hhciAqcywgKiBhY2N0 ID0gIiI7CisKKyAgICBkZWJvayA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEb24n dCBsb2cgKi8KKworICAgIGlmICgoeCA9IGNtZmxkKCJSZW1vdGUgdXNlcm5hbWUgb3IgSUQiLHVp ZGJ1Ziwmcyx4eHN0cmluZykpIDwgMCkKKyAgICAgIHJldHVybih4KTsKKyAgICBja3N0cm5jcHko bGluZSxicnN0cmlwKHMpLExJTkJVRlNJWik7IC8qIGJyc3RyaXA6IDE1IEphbiAyMDAzICovCisg ICAgaWYgKCh4ID0gY21mbGQoIlJlbW90ZSBwYXNzd29yZCIsIiIsJnMseHhzdHJpbmcpKSA8IDAp IHsKKyAgICAgICAgaWYgKHggPT0gLTMpIHsgLyogbm8gaW5wdXQgKi8KKyAgICAgICAgICAgIGlm ICggcHdidWZbMF0gJiYgcHdmbGcgKSB7CisgICAgICAgICAgICAgICAgY2tzdHJuY3B5KHRtcGJ1 ZiwoY2hhciAqKXB3YnVmLFRNUEJVRlNJWik7CisjaWZkZWYgT1MyCisgICAgICAgICAgICAgICAg aWYgKCBwd2NyeXB0ICkKKyAgICAgICAgICAgICAgICAgICAgY2tfZW5jcnlwdCgoY2hhciAqKXRt cGJ1Zik7CisjZW5kaWYgLyogT1MyICovCisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7 CisgICAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAg ICBja3N0cm5jcHkodG1wYnVmLGJyc3RyaXAocyksVE1QQlVGU0laKTsKKyAgICB9CisgICAgaWYg KCh4ID0gY210eHQoIlJlbW90ZSBhY2NvdW50XG4gb3IgRW50ZXIgb3IgQ1IgdG8gY29uZmlybSB0 aGUgY29tbWFuZCIsCisgICAgICAgICAgICAgICAgICAgIiIsICZzLCB4eHN0cmluZykpIDwgMCkK KyAgICAgIHJldHVybih4KTsKKyAgICBDSEVDS0NPTk4oKTsKKyAgICBpZiAoKnMpIHsKKyAgICAg ICAgeCA9IHN0cmxlbih0bXBidWYpOworICAgICAgICBpZiAoeCA+IDApIHsKKyAgICAgICAgICAg IGFjY3QgPSAmdG1wYnVmW3grMl07CisgICAgICAgICAgICBja3N0cm5jcHkoYWNjdCxicnN0cmlw KHMpLFRNUEJVRlNJWiAtIHggLSAyKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAodGVzdGlu ZykKKyAgICAgIHByaW50ZigiIGZ0cCB1c2VyIFwiJXNcIiBwYXNzd29yZCBcIiVzXCIuLi5cbiIs bGluZSx0bXBidWYpOworICAgIHN1Y2Nlc3MgPSBmdHBfdXNlcihsaW5lLHRtcGJ1ZixhY2N0KTsK KyNpZmRlZiBDS0xPR0RJQUwKKyAgICBkb2xvZ2Z0cCgpOworI2VuZGlmIC8qIENLTE9HRElBTCAq LworICAgIHJldHVybihzdWNjZXNzKTsKK30KKworLyogRE8gKHZhcmlvdXMgRlRQIGNvbW1hbmRz KS4uLiAqLworCitpbnQKK2RvZnRwdHlwKHR5cGUpIGludCB0eXBlOyB7ICAgICAgICAgICAgICAv KiBUWVBFICovCisgICAgQ0hFQ0tDT05OKCk7CisgICAgZnRwX3R5cCA9IHR5cGU7CisgICAgY2hh bmdldHlwZShmdHBfdHlwLGZ0cF92Ym0pOworICAgIGRlYnVnKEYxMDEsImRvZnRwdHlwIGNoYW5n ZWQgdHlwZSIsIiIsdHlwZSk7CisgICAgcmV0dXJuKDEpOworfQorCitzdGF0aWMgaW50Citkb2Z0 cHhta2Qocyx2Ym0pIGNoYXIgKiBzOyBpbnQgdmJtOyB7ICAgLyogTUtESVIgYWN0aW9uICovCisg ICAgaW50IGxjcyA9IC0xLCByY3MgPSAtMTsKKyNpZm5kZWYgTk9DU0VUUworICAgIGlmIChmdHBf eGxhKSB7CisgICAgICAgIGxjcyA9IGZ0cF9jc2w7CisgICAgICAgIGlmIChsY3MgPCAwKSBsY3Mg PSBmY2hhcnNldDsKKyAgICAgICAgcmNzID0gZnRwX2NzeDsKKyAgICAgICAgaWYgKHJjcyA8IDAp IHJjcyA9IGZ0cF9jc3I7CisgICAgfQorI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKyAgICBkZWJ1ZyhG MTEwLCJmdHAgZG9mdHBta2QiLHMsMCk7CisgICAgaWYgKGZ0cGNtZCgiTUtEIixzLGxjcyxyY3Ms dmJtKSA9PSBSRVBMWV9DT01QTEVURSkKKyAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisgICAg aWYgKGZ0cGNvZGUgPT0gNTAwIHx8IGZ0cGNvZGUgPT0gNTAyKSB7CisgICAgICAgIGlmICghcXVp ZXQpCisgICAgICAgICAgcHJpbnRmKCJNS0QgY29tbWFuZCBub3QgcmVjb2duaXplZCwgdHJ5aW5n IFhNS0RcbiIpOworICAgICAgICBpZiAoZnRwY21kKCJYTUtEIixzLGxjcyxyY3MsdmJtKSA9PSBS RVBMWV9DT01QTEVURSkKKyAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworICAgIH0KKyAg ICByZXR1cm4oc3VjY2VzcyA9IDApOworfQorCitzdGF0aWMgaW50Citkb2Z0cG1rZCgpIHsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogTUtESVIgcGFyc2UgKi8KKyAgICBpbnQgeDsKKyAg ICBjaGFyICogczsKKyAgICBpZiAoKHggPSBjbXR4dCgiUmVtb3RlIGRpcmVjdG9yeSBuYW1lIiwg IiIsICZzLCB4eHN0cmluZykpIDwgMCkKKyAgICAgIHJldHVybih4KTsKKyAgICBDSEVDS0NPTk4o KTsKKyAgICBja3N0cm5jcHkobGluZSxzLExJTkJVRlNJWik7CisgICAgaWYgKHRlc3RpbmcpCisg ICAgICBwcmludGYoIiBmdHAgbWtkaXIgXCIlc1wiLi4uXG4iLGxpbmUpOworICAgIHJldHVybihz dWNjZXNzID0gZG9mdHB4bWtkKGxpbmUsLTEpKTsKK30KKworc3RhdGljIGludAorZG9mdHBybWQo KSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJNRElSICovCisgICAgaW50IHgsIGxj cyA9IC0xLCByY3MgPSAtMTsKKyAgICBjaGFyICogczsKKyAgICBpZiAoKHggPSBjbXR4dCgiUmVt b3RlIGRpcmVjdG9yeSIsICIiLCAmcywgeHhzdHJpbmcpKSA8IDApCisgICAgICByZXR1cm4oeCk7 CisgICAgQ0hFQ0tDT05OKCk7CisgICAgY2tzdHJuY3B5KGxpbmUscyxMSU5CVUZTSVopOworICAg IGlmICh0ZXN0aW5nKQorICAgICAgcHJpbnRmKCIgZnRwIHJtZGlyIFwiJXNcIi4uLlxuIixsaW5l KTsKKyNpZm5kZWYgTk9DU0VUUworICAgIGlmIChmdHBfeGxhKSB7CisgICAgICAgIGxjcyA9IGZ0 cF9jc2w7CisgICAgICAgIGlmIChsY3MgPCAwKSBsY3MgPSBmY2hhcnNldDsKKyAgICAgICAgcmNz ID0gZnRwX2NzeDsKKyAgICAgICAgaWYgKHJjcyA8IDApIHJjcyA9IGZ0cF9jc3I7CisgICAgfQor I2VuZGlmIC8qIE5PQ1NFVFMgKi8KKyAgICBpZiAoZnRwY21kKCJSTUQiLGxpbmUsbGNzLHJjcyxm dHBfdmJtKSA9PSBSRVBMWV9DT01QTEVURSkKKyAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Cisg ICAgaWYgKGZ0cGNvZGUgPT0gNTAwIHx8IGZ0cGNvZGUgPT0gNTAyKSB7CisgICAgICAgIGlmICgh cXVpZXQpCisgICAgICAgICAgcHJpbnRmKCJSTUQgY29tbWFuZCBub3QgcmVjb2duaXplZCwgdHJ5 aW5nIFhNS0RcbiIpOworICAgICAgICBzdWNjZXNzID0gKGZ0cGNtZCgiWFJNRCIsbGluZSxsY3Ms cmNzLGZ0cF92Ym0pID09IFJFUExZX0NPTVBMRVRFKTsKKyAgICB9IGVsc2UKKyAgICAgIHN1Y2Nl c3MgPSAwOworICAgIHJldHVybihzdWNjZXNzKTsKK30KKworc3RhdGljIGludAorZG9mdHByZW4o KSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJFTkFNRSAqLworICAgIGludCB4Owor ICAgIGNoYXIgKiBzOworICAgIGlmICgoeCA9IGNtZmxkKCJSZW1vdGUgZmlsZW5hbWUiLCIiLCZz LHh4c3RyaW5nKSkgPCAwKQorICAgICAgcmV0dXJuKHgpOworICAgIGNrc3RybmNweShsaW5lLHMs TElOQlVGU0laKTsKKyAgICBpZiAoKHggPSBjbWZsZCgiTmV3IG5hbWUgZm9yIHJlbW90ZSBmaWxl IiwiIiwmcyx4eHN0cmluZykpIDwgMCkKKyAgICAgIHJldHVybih4KTsKKyAgICBja3N0cm5jcHko dG1wYnVmLHMsVE1QQlVGU0laKTsKKyAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApCisgICAgICBy ZXR1cm4oeCk7CisgICAgQ0hFQ0tDT05OKCk7CisgICAgaWYgKHRlc3RpbmcpCisgICAgICBwcmlu dGYoIiBmdHAgcmVuYW1lIFwiJXNcIiAodG8pIFwiJXNcIi4uLlxuIixsaW5lLHRtcGJ1Zik7Cisg ICAgc3VjY2VzcyA9IGZ0cF9yZW5hbWUobGluZSx0bXBidWYpOworICAgIHJldHVybihzdWNjZXNz KTsKK30KKworaW50Citkb2Z0cHJlcygpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog UkVTRVQgKGxvZyBvdXQgd2l0aG91dCBjbG9zZSkgKi8KKyAgICBpbnQgeDsKKyAgICBpZiAoKHgg PSBjbWNmbSgpKSA8IDApCisgICAgICByZXR1cm4oeCk7CisgICAgQ0hFQ0tDT05OKCk7CisgICAg aWYgKHRlc3RpbmcpCisgICAgICBwcmludGYoIiBmdHAgcmVzZXQuLi5cbiIpOworICAgIHJldHVy bihzdWNjZXNzID0gZnRwX3Jlc2V0KCkpOworfQorCitzdGF0aWMgaW50Citkb2Z0cHhobHAoKSB7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSEVMUCAqLworICAgIGludCB4OworICAgIGNo YXIgKiBzOworICAgIGlmICgoeCA9IGNtdHh0KCJDb21tYW5kIG5hbWUiLCAiIiwgJnMsIHh4c3Ry aW5nKSkgPCAwKQorICAgICAgcmV0dXJuKHgpOworICAgIENIRUNLQ09OTigpOworICAgIGNrc3Ry bmNweShsaW5lLHMsTElOQlVGU0laKTsKKyAgICBpZiAodGVzdGluZykKKyAgICAgIHByaW50Zigi IGZ0cCBoZWxwIFwiJXNcIi4uLlxuIixsaW5lKTsKKyAgICAvKiBObyBuZWVkIHRvIHRyYW5zbGF0 ZSAtLSBhbGwgRlRQIGNvbW1hbmRzIGFyZSBBU0NJSSAqLworICAgIHJldHVybihzdWNjZXNzID0g KGZ0cGNtZCgiSEVMUCIsbGluZSwwLDAsMSkgPT0gUkVQTFlfQ09NUExFVEUpKTsKK30KKworc3Rh dGljIGludAorZG9mdHBkaXIoY3gpIGludCBjeDsgeyAgICAgICAgICAgICAgICAgIC8qIFtWXURJ UkVDVE9SWSAqLworICAgIGludCB4LCBsY3MgPSAwLCByY3MgPSAwLCB4bGF0ZSA9IDA7CisgICAg Y2hhciAqIHAsICogcywgKiBtID0gIiI7CisgICAgaWYgKGN4ID09IEZUUF9WREkpIHsKKyAgICAg ICAgc3dpdGNoIChzZXJ2ZXJ0eXBlKSB7CisgICAgICAgICAgY2FzZSBTWVNfVk1TOgorICAgICAg ICAgIGNhc2UgU1lTX0RPUzoKKyAgICAgICAgICBjYXNlIFNZU19UT1BTMTA6CisgICAgICAgICAg Y2FzZSBTWVNfVE9QUzIwOgorICAgICAgICAgICAgbSA9ICIqLioiOworICAgICAgICAgICAgYnJl YWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIG0gPSAiKiI7CisgICAgICAgIH0K KyAgICB9CisgICAgaWYgKCh4ID0gY210eHQoIlJlbW90ZSBmaWxlc3BlYyIsbSwmcyx4eHN0cmlu ZykpIDwgMCkKKyAgICAgIHJldHVybih4KTsKKyAgICBpZiAoKHggPSByZW10eHQoJnMpKSA8IDAp CisgICAgICByZXR1cm4oeCk7CisjaWZkZWYgTk9DU0VUUworICAgIHhsYXRlID0gMDsKKyNlbHNl CisgICAgeGxhdGUgPSBmdHBfeGxhOworI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKyAgICBsaW5lWzBd ID0gTlVMOworICAgIGNrc3RybmNweShsaW5lLHMsTElOQlVGU0laKTsKKyAgICBzID0gbGluZTsK KyAgICBDSEVDS0NPTk4oKTsKKworI2lmbmRlZiBOT0NTRVRTCisgICAgaWYgKHhsYXRlKSB7ICAg ICAgICAgICAgICAgICAgICAgICAgLyogU0VUIEZUUCBDSEFSQUNURVItU0VULVRSQU5TTEFUSU9O ICovCisgICAgICAgIGxjcyA9IGZ0cF9jc2w7ICAgICAgICAgICAgICAgICAgLyogTG9jYWwgY2hh cnNldCAqLworICAgICAgICBpZiAobGNzIDwgMCkgbGNzID0gZmNoYXJzZXQ7CisgICAgICAgIGlm IChsY3MgPCAwKSB4bGF0ZSA9IDA7CisgICAgfQorICAgIGlmICh4bGF0ZSkgeyAgICAgICAgICAg ICAgICAgICAgICAgIC8qIFN0aWxsIE9OPyAqLworICAgICAgICByY3MgPSBmdHBfY3N4OyAgICAg ICAgICAgICAgICAgIC8qIFJlbW90ZSAoU2VydmVyKSBjaGFyc2V0ICovCisgICAgICAgIGlmIChy Y3MgPCAwKSByY3MgPSBmdHBfY3NyOworICAgICAgICBpZiAocmNzIDwgMCkgeGxhdGUgPSAwOwor ICAgIH0KKyNlbmRpZiAvKiBOT0NTRVRTICovCisKKyAgICBpZiAodGVzdGluZykgeworICAgICAg ICBwID0gczsKKyAgICAgICAgaWYgKCFwKSBwID0gIiI7CisgICAgICAgIGlmICgqcCkKKyAgICAg ICAgICBwcmludGYoIkRpcmVjdG9yeSBvZiBmaWxlcyAlcyBhdCAlczpcbiIsIGxpbmUsIGZ0cF9o b3N0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIHByaW50ZigiRGlyZWN0b3J5IG9mIGZpbGVz IGF0ICVzOlxuIiwgZnRwX2hvc3QpOworICAgIH0KKyAgICBkZWJ1ZyhGMTExLCJkb2Z0cGRpciIs cyxjeCk7CisKKyAgICBpZiAoY3ggPT0gRlRQX0RJUikgeworICAgICAgICAvKiBUcmFuc2xhdGlv biBvZiBsaW5lW10gaXMgZG9uZSBpbnNpZGUgcmVjdnJlcXVlc3QoKSAqLworICAgICAgICAvKiB3 aGVuIGl0IGNhbGxzIGZ0cGNtZCgpLiAqLworICAgICAgICByZXR1cm4oc3VjY2VzcyA9CisgICAg ICAgICAgKHJlY3ZyZXF1ZXN0KCJMSVNUIiwiLSIscywid2IiLDAsMCxOVUxMLHhsYXRlLGxjcyxy Y3MpID09IDApKTsKKyAgICB9CisgICAgc3VjY2VzcyA9IDE7ICAgICAgICAgICAgICAgICAgICAg ICAgLyogVkRJUiAtIG9uZSBmaWxlIGF0IGEgdGltZS4uLiAqLworICAgIHAgPSAoY2hhciAqKXJl bW90ZV9maWxlcygxLChDSEFSICopcyxOVUxMLDApOyAvKiBHZXQgdGhlIGZpbGUgbGlzdCAqLwor ICAgIGNhbmNlbGdyb3VwID0gMDsKKyAgICBpZiAoIWZ0cF92Ym0gJiYgIXF1aWV0KQorICAgICAg cHJpbnRsaW5lcyA9IDE7CisgICAgd2hpbGUgKHAgJiYgIWNhbmNlbGZpbGUgJiYgIWNhbmNlbGdy b3VwKSB7IC8qIFNUQVQgb25lIGZpbGUgKi8KKyAgICAgICAgaWYgKGZ0cGNtZCgiU1RBVCIscCxs Y3MscmNzLGZ0cF92Ym0pIDwgMCkgeworICAgICAgICAgICAgc3VjY2VzcyA9IDA7CisgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBwID0gKGNoYXIgKilyZW1vdGVfZmlsZXMo MCxOVUxMLE5VTEwsMCk7IC8qIEdldCBuZXh0IGZpbGUgKi8KKyAgICAgICAgZGVidWcoRjExMCwi ZnRwIHZkaXIgZmlsZSIscywwKTsKKyAgICB9CisgICAgcmV0dXJuKHN1Y2Nlc3MpOworfQorCitz dGF0aWMgaW50Citkb2Z0cHB3ZCgpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUFdE ICovCisgICAgaW50IHgsIGxjcyA9IC0xLCByY3MgPSAtMTsKKyNpZm5kZWYgTk9DU0VUUworICAg IGlmIChmdHBfeGxhKSB7CisgICAgICAgIGxjcyA9IGZ0cF9jc2w7CisgICAgICAgIGlmIChsY3Mg PCAwKSBsY3MgPSBmY2hhcnNldDsKKyAgICAgICAgcmNzID0gZnRwX2NzeDsKKyAgICAgICAgaWYg KHJjcyA8IDApIHJjcyA9IGZ0cF9jc3I7CisgICAgfQorI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKyAg ICBpZiAoKHggPSBjbWNmbSgpKSA8IDApCisgICAgICByZXR1cm4oeCk7CisgICAgQ0hFQ0tDT05O KCk7CisgICAgaWYgKGZ0cGNtZCgiUFdEIixOVUxMLGxjcyxyY3MsMSkgPT0gUkVQTFlfQ09NUExF VEUpIHsKKyAgICAgICAgc3VjY2VzcyA9IDE7CisgICAgfSBlbHNlIGlmIChmdHBjb2RlID09IDUw MCB8fCBmdHBjb2RlID09IDUwMikgeworICAgICAgICBpZiAoZnRwX2RlYikKKyAgICAgICAgICBw cmludGYoIlBXRCBjb21tYW5kIG5vdCByZWNvZ25pemVkLCB0cnlpbmcgWFBXRFxuIik7CisgICAg ICAgIHN1Y2Nlc3MgPSAoZnRwY21kKCJYUFdEIixOVUxMLGxjcyxyY3MsMSkgPT0gUkVQTFlfQ09N UExFVEUpOworICAgIH0KKyAgICByZXR1cm4oc3VjY2Vzcyk7Cit9CisKK3N0YXRpYyBpbnQKK2Rv ZnRwY3dkKHMsdmJtKSBjaGFyICogczsgaW50IHZibTsgeyAgICAvKiBDRCAoQ1dEKSAqLworICAg IGludCBsY3MgPSAtMSwgcmNzID0gLTE7CisjaWZuZGVmIE5PQ1NFVFMKKyAgICBpZiAoZnRwX3hs YSkgeworICAgICAgICBsY3MgPSBmdHBfY3NsOworICAgICAgICBpZiAobGNzIDwgMCkgbGNzID0g ZmNoYXJzZXQ7CisgICAgICAgIHJjcyA9IGZ0cF9jc3g7CisgICAgICAgIGlmIChyY3MgPCAwKSBy Y3MgPSBmdHBfY3NyOworICAgIH0KKyNlbmRpZiAvKiBOT0NTRVRTICovCisKKyAgICBkZWJ1ZyhG MTEwLCJmdHAgZG9mdHBjd2QiLHMsMCk7CisgICAgaWYgKGZ0cGNtZCgiQ1dEIixzLGxjcyxyY3Ms dmJtKSA9PSBSRVBMWV9DT01QTEVURSkKKyAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisgICAg aWYgKGZ0cGNvZGUgPT0gNTAwIHx8IGZ0cGNvZGUgPT0gNTAyKSB7CisgICAgICAgIGlmICghcXVp ZXQpCisgICAgICAgICAgcHJpbnRmKCJDV0QgY29tbWFuZCBub3QgcmVjb2duaXplZCwgdHJ5aW5n IFhDV0RcbiIpOworICAgICAgICBpZiAoZnRwY21kKCJYQ1dEIixzLGxjcyxyY3MsdmJtKSA9PSBS RVBMWV9DT01QTEVURSkKKyAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworICAgIH0KKyAg ICByZXR1cm4oc3VjY2VzcyA9IDApOworfQorCitzdGF0aWMgaW50Citkb2Z0cGNkdXAoKSB7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogQ0RVUCAqLworICAgIGRlYnVnKEYxMDAsImZ0cCBk b2Z0cGNkdXAiLCIiLDApOworICAgIGlmIChmdHBjbWQoIkNEVVAiLE5VTEwsMCwwLDEpID09IFJF UExZX0NPTVBMRVRFKQorICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKyAgICBpZiAoZnRwY29k ZSA9PSA1MDAgfHwgZnRwY29kZSA9PSA1MDIpIHsKKyAgICAgICAgaWYgKCFxdWlldCkKKyAgICAg ICAgICBwcmludGYoIkNEVVAgY29tbWFuZCBub3QgcmVjb2duaXplZCwgdHJ5aW5nIFhDVVBcbiIp OworICAgICAgICBpZiAoZnRwY21kKCJYQ1VQIixOVUxMLDAsMCwxKSA9PSBSRVBMWV9DT01QTEVU RSkKKyAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworICAgIH0KKyAgICByZXR1cm4oc3Vj Y2VzcyA9IDApOworfQorCisvKiBzIHkgbiBjIGQgaSByICAtLSAgU3luY2hyb25pemVzIGNsaWVu dCAmIHNlcnZlciBkaXJlY3RvcmllcyAqLworCisvKgorICBDYWxsIHdpdGg6CisgICAgbG9jYWwg PSBwb2ludGVyIHRvIHBhdGhuYW1lIG9mIGxvY2FsIGZpbGUgdG8gYmUgc2VudC4KKyAgICBzaW0g ICA9IDEgZm9yIHNpbXVsYXRpb24sIDAgZm9yIHJlYWwgdXBsb2FkaW5nLgorICBSZXR1cm5zIDAg b24gZmFpbHVyZSwgMSBvbiBzdWNjZXNzLgorCisgIFRoZSAnbG9jYWwnIGFyZ3VtZW50IGlzIHJl bGF0aXZlIHRvIHRoZSBpbml0aWFsIGRpcmVjdG9yeSBvZiB0aGUgTVBVVCwKKyAgaS5lLiB0aGUg cm9vdCBvZiB0aGUgdHJlZSBiZWluZyB1cGxvYWRlZC4gIElmIHRoZSBkaXJlY3Rvcnkgb2YgdGhl CisgIGFyZ3VtZW50IGZpbGUgaXMgZGlmZmVyZW50IGZyb20gdGhlIGRpcmVjdG9yeSBvZiB0aGUg cHJldmlvdXMgZmlsZQorICAod2hpY2ggaXMgc3RvcmVkIGluIGdsb2JhbCBwdXRwYXRoW10pLCB0 aGlzIHJvdXRpbmUgZG9lcyB0aGUgYXBwcm9wcmlhdGUKKyAgQ1dEcywgQ0RVUHMsIGFuZC9vciBN S0RJUnMgdG8gcG9zaXRpb24gdGhlIEZUUCBzZXJ2ZXIgaW4gdGhlIHNhbWUgcGxhY2UuCisqLwor c3RhdGljIGludCBjZGxldmVsID0gMCwgY2RzaW1sdmwgPSAwOwkvKiBUcmVlLWxldmVsIHRyYWNr ZXJzICovCisKK3N0YXRpYyBpbnQKK3N5bmNkaXIobG9jYWwsc2ltKSBjaGFyICogbG9jYWw7IGlu dCBzaW07IHsKKyAgICBjaGFyIGJ1ZltDS01BWFBBVEgrMV07CisgICAgY2hhciB0bXBbQ0tNQVhQ QVRIKzFdOworICAgIGNoYXIgbXNnYnVmW0NLTUFYUEFUSCs2NF07CisgICAgY2hhciBjLCAqIHAg PSBsb2NhbCwgKiBzID0gYnVmLCAqIHEgPSBidWYsICogcHNlcCwgKiBzc2VwOworICAgIGludCBp LCBrID0gMCwgZG9uZSA9IDAsIGl0c2FkaXIgPSAwLCBzYXZlcTsKKworICAgIGRlYnVnKEYxMTAs ImZ0cCBzeW5jZGlyIGxvY2FsIChuZXcpIixsb2NhbCwwKTsKKyAgICBkZWJ1ZyhGMTEwLCJmdHAg c3luY2RpciBwdXRwYXRoIChvbGQpIixwdXRwYXRoLDApOworCisgICAgaXRzYWRpciA9IGlzZGly KGxvY2FsKTsJCS8qIElzIHRoZSBsb2NhbCBmaWxlIGEgZGlyZWN0b3J5PyAqLworICAgIHNhdmVx ID0gcXVpZXQ7CisKKyAgICB3aGlsZSAoKCpzID0gKnApKSB7ICAgICAgICAgICAgICAgICAvKiBD b3B5IHRoZSBhcmd1bWVudCBmaWxlbmFtZSAqLworICAgICAgICBpZiAoKytrID09IENLTUFYUEFU SCkgICAgICAgICAgIC8qIHNvIHdlIGNhbiBwb2tlIGl0LiAqLworICAgICAgICAgIHJldHVybigt MSk7CisgICAgICAgIGlmICgqcyA9PSAnLycpICAgICAgICAgICAgICAgICAgLyogUG9pbnRlciB0 byByaWdodG1vc3QgZGlyc2VwICovCisgICAgICAgICAgcSA9IHM7CisgICAgICAgIHMrKzsKKyAg ICAgICAgcCsrOworICAgIH0KKyAgICBpZiAoIWl0c2FkaXIpCQkJLyogSWYgaXQncyBhIHJlZ3Vs YXIgZmlsZSAqLworICAgICAgKnEgPSBOVUw7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGtl ZXAganVzdCB0aGUgcGF0aCBwYXJ0ICovCisKKyAgICBkZWJ1ZyhGMTEwLCJmdHAgc3luY2RpciBi dWYiLGJ1ZiwwKTsKKyAgICBpZiAoIXN0cmNtcChidWYscHV0cGF0aCkpIHsgICAgICAgICAvKiBT YW1lIHBhdGggYXMgcHJldmlvdXMgZmlsZT8gKi8KKyAgICAgICAgaWYgKGl0c2FkaXIpIHsgICAg ICAgICAgICAgICAgICAvKiBUaGlzIGZpbGUgaXMgYSBkaXJlY3Rvcnk/ICovCisgICAgICAgICAg ICBpZiAoZG9mdHBjd2QobG9jYWwsMCkpIHsgICAgLyogVHJ5IHRvIENEIHRvIGl0ICovCisgICAg ICAgICAgICAgICAgZG9mdHBjZHVwKCk7ICAgICAgICAgICAgLyogV29ya2VkIC0gQ0QgYmFjayB1 cCAqLworICAgICAgICAgICAgfSBlbHNlIGlmIChzaW0pIHsgICAgICAgICAgIC8qIFNpbXVsYXRp bmcuLi4gKi8KKyAgICAgICAgICAgICAgICBpZiAoZmRpc3BsYSA9PSBYWUZEX0IpIHsKKyAgICAg ICAgICAgICAgICAgICAgcHJpbnRmKCJXT1VMRCBDUkVBVEUgRElSRUNUT1JZICVzXG4iLGxvY2Fs KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZkaXNwbGEpIHsKKyAgICAgICAgICAgICAg ICAgICAgY2ttYWttc2cobXNnYnVmLENLTUFYUEFUSCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIldPVUxEIENSRUFURSBESVJFQ1RPUlkiLGxvY2FsLE5VTEwsTlVMTCk7CisgICAgICAg ICAgICAgICAgICAgIGZ0c2NyZWVuKFNDUl9TVCxTVF9NU0csKENLX09GRl9UKTAsbXNnYnVmKTsK KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLyogU2VlIG5vdGUgYWJvdmUgKi8K KyAgICAgICAgICAgICAgICByZXR1cm4oMCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKCFkb2Z0 cHhta2QobG9jYWwsMCkpIHsgLyogQ2FuJ3QgQ0QgLSB0cnkgdG8gY3JlYXRlICovCisgICAgICAg ICAgICAgICAgcmV0dXJuKDApOworICAgICAgICAgICAgfSBlbHNlIHsJCQkvKiBSZW1vdGUgZGly ZWN0b3J5IGNyZWF0ZWQgT0sgKi8KKyAgICAgICAgICAgICAgICBpZiAoZmRpc3BsYSA9PSBYWUZE X0IpIHsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJDUkVBVEVEIERJUkVDVE9SWSAlc1xu Iixsb2NhbCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmZGlzcGxhKSB7CisgICAgICAg ICAgICAgICAgICAgIGNrbWFrbXNnKG1zZ2J1ZixDS01BWFBBVEgrNjQsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICJDUkVBVEVEIERJUkVDVE9SWSAiLGxvY2FsLE5VTEwsTlVMTCk7Cisg ICAgICAgICAgICAgICAgICAgIGZ0c2NyZWVuKFNDUl9TVCxTVF9NU0csKENLX09GRl9UKTAsbXNn YnVmKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg ICAgZGVidWcoRjExMCwiZnRwIHN5bmNkaXIgbm8gY2hhbmdlIixidWYsMCk7CisgICAgICAgIHJl dHVybigxKTsgICAgICAgICAgICAgICAgICAgICAgLyogWWVzLCBkb25lLiAqLworICAgIH0KKyAg ICBja3N0cm5jcHkodG1wLGJ1ZixDS01BWFBBVEgrMSk7ICAgICAvKiBNYWtlIGEgc2FmZSAocHJl LXBva2VkKSBjb3B5ICovCisgICAgZGVidWcoRjExMCwiZnRwIHN5bmNkaXIgbmV3IHBhdGgiLGJ1 ZiwwKTsgLyogZm9yIGxhdGVyIChzZWUgZW5kKSAqLworCisgICAgcCA9IGJ1ZjsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogTmV3ICovCisgICAgcyA9IHB1dHBhdGg7ICAgICAgICAgICAg ICAgICAgICAgICAgLyogT2xkICovCisKKyAgICBkZWJ1ZyhGMTEwLCJmdHAgc3luY2RpciBBIChv bGQpIHMiLHMsMCk7IC8qIFByZXZpb3VzICovCisgICAgZGVidWcoRjExMCwiZnRwIHN5bmNkaXIg QSAobmV3KSBwIixwLDApOyAvKiBOZXcgKi8KKworICAgIHBzZXAgPSBidWY7CisgICAgc3NlcCA9 IHB1dHBhdGg7CisgICAgd2hpbGUgKCpwICE9IE5VTCAmJiAqcyAhPSBOVUwgJiYgKnAgPT0gKnMp IHsKKwlpZiAoKnAgPT0gJy8nKSB7IHBzZXAgPSBwKzE7IHNzZXAgPSBzKzE7IH0KKwlwKysscysr OworICAgIH0KKyAgICAvKgorICAgICAgcHNlcCBhbmQgc3NlcCBwb2ludCB0byB0aGUgZmlyc3Qg cGF0aCBzZWdtZW50IHRoYXQgZGlmZmVycy4KKyAgICAgIFdlIGhhdmUgdG8gZG8gYXMgbWFueSBD RFVQcyBhcyB0aGVyZSBhcmUgcGF0aCBzZWdtZW50cyBpbiBzc2VwLgorICAgICAgdGhlbiB3ZSBo YXZlIHRvIGRvIGFzIG1hbnkgTUtEcyBhbmQgQ1dEcyBhcyB0aGVyZSBhcmUgc2VnbWVudHMgaW4g cHNlcC4KKyAgICAqLworICAgIHMgPSBzc2VwOworICAgIHAgPSBwc2VwOworCisgICAgZGVidWco RjExMCwiZnRwIHN5bmNkaXIgQiAob2xkKSBzIixzLDApOyAvKiBQcmV2aW91cyAqLworICAgIGRl YnVnKEYxMTAsImZ0cCBzeW5jZGlyIEIgKG5ldykgcCIscCwwKTsgLyogTmV3ICovCisKKyAgICAv KiBwIGFuZCBzIG5vdyBwb2ludCB0byB0aGUgbGVmdG1vc3Qgc3BvdCB3aGVyZSB0aGUgcGF0aHMg ZGlmZmVyICovCisKKyAgICBpZiAoKnMpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBX ZSBoYXZlIHRvIGJhY2sgdXAgKi8KKyAgICAgICAgayA9IDE7ICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBIb3cgbWFueSBsZXZlbHMgY291bnRpbmcgdGhpcyBvbmUgKi8KKyAgICAgICAgd2hp bGUgKChjID0gKnMrKykpIHsgICAgICAgICAgICAvKiBDb3VudCBkaXJzZXBzIHJlbWFpbmluZyBp biBwcmV2ICovCisgICAgICAgICAgICBpZiAoYyA9PSAnLycgJiYgKnMpCisgICAgICAgICAgICAg IGsrKzsKKyAgICAgICAgfQorCWRlYnVnKEYxMDEsImZ0cCBzeW5jZGlyIGxldmVscyB1cCIsIiIs ayk7CisKKyAgICAgICAgZm9yIChpID0gMTsgaSA8PSBrOyBpKyspIHsgICAgICAgLyogRG8gdGhh dCBtYW55IENEVVBzICovCisgICAgICAgICAgICBkZWJ1ZyhGMTExLCJmdHAgc3luY2RpciBDRFVQ IEEiLHAsaSk7CisJICAgIGlmIChmZGlzcGxhID09IFhZRkRfQikKKwkgICAgICBwcmludGYoIiBD RFVQXG4iKTsKKyAgICAgICAgICAgIGlmIChzaW0gJiYgY2RzaW1sdmwpIHsKKyAgICAgICAgICAg ICAgICBjZHNpbWx2bC0tOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBp ZiAoIWRvZnRwY2R1cCgpKSB7CisgICAgICAgICAgICAgICAgICAgIHF1aWV0ID0gc2F2ZXE7Cisg ICAgICAgICAgICAgICAgICAgIHJldHVybigwKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICB9CisgICAgICAgICAgICBjZGxldmVsLS07CisgICAgICAgIH0KKyAgICAgICAgaWYgKCEq cCkgICAgICAgICAgICAgICAgICAgICAgICAvKiBJZiB3ZSBkb24ndCBoYXZlIHRvIGdvIGRvd24g Ki8KKyAgICAgICAgICBnb3RvIHhjd2Q7ICAgICAgICAgICAgICAgICAgICAvKiB3ZSdyZSBkb25l LiAqLworICAgIH0KKyNpZmRlZiBDT01NRU5UCisgICAgd2hpbGUgKHAgPiBidWYgJiYgKnAgJiYg KnAgIT0gJy8nKSAgLyogSWYgaW4gbWlkZGxlIG9mIHNlZ21lbnQgKi8KKyAgICAgIHAtLTsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBiYWNrIHVwIHRvIGJlZ2lubmluZyAqLworICAg IGlmICgqcCA9PSAnLycpICAgICAgICAgICAgICAgICAgICAgIC8qIGFuZCB0ZXJtaW5hdGUgdGhl cmUgKi8KKyAgICAgIHArKzsKKyNlbmRpZgkvKiBDT01NRU5UICovCisKKyAgICBkZWJ1ZyhGMTEw LCJmdHAgc3luY2RpciBORVcgUEFUSCIscCwwKTsKKworICAgIHMgPSBwOyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIFBvaW50IHRvIHN0YXJ0IG9mIG5ldyBkb3duIHBhdGguICovCisg ICAgd2hpbGUgKDEpIHsgICAgICAgICAgICAgICAgICAgICAgICAgLyogTG9vcCB0aHJvdWdoIGNo YXJhY3RlcnMuICovCisgICAgICAgIGlmICgqcyA9PSAnLycgfHwgISpzKSB7ICAgICAgICAgLyog SGF2ZSBhIHNlZ21lbnQuICovCisgICAgICAgICAgICBpZiAoISpzKSAgICAgICAgICAgICAgICAg ICAgLyogSWYgZW5kIG9mIHN0cmluZywgKi8KKyAgICAgICAgICAgICAgZG9uZSsrOyAgICAgICAg ICAgICAgICAgICAvKiBhZnRlciB0aGlzIHNlZ21lbnQgd2UncmUgZG9uZS4gKi8KKyAgICAgICAg ICAgIGVsc2UKKyAgICAgICAgICAgICAgKnMgPSBOVUw7ICAgICAgICAgICAgICAgICAvKiBOVUwg b3V0IHRoZSBzZXBhcmF0b3IuICovCisgICAgICAgICAgICBpZiAoKnApIHsgICAgICAgICAgICAg ICAgICAgLyogSWYgc2VnbWVudCBpcyBub3QgZW1wdHkgKi8KKyAgICAgICAgICAgICAgICBkZWJ1 ZyhGMTEwLCJmdHAgc3luY2RpciBkb3duIHNlZ21lbnQiLHAsMCk7CisgICAgICAgICAgICAgICAg aWYgKCFkb2Z0cGN3ZChwLDApKSB7ICAgLyogVHJ5IHRvIENEIHRvIGl0ICovCisgICAgICAgICAg ICAgICAgICAgIGlmIChzaW0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmZGlzcGxh ID09IFhZRkRfQikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiIFdPVUxE IENSRUFURSBESVJFQ1RPUlkgJXNcbiIsbG9jYWwpOworICAgICAgICAgICAgICAgICAgICAgICAg fSBlbHNlIGlmIChmZGlzcGxhKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ttYWtt c2cobXNnYnVmLENLTUFYUEFUSCwKKwkJCQkgICAgICJXT1VMRCBDUkVBVEUgRElSRUNUT1JZIiwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbCxOVUxMLE5VTEwpOwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ0c2NyZWVuKFNDUl9TVCxTVF9NU0csKENLX09G Rl9UKTAsbXNnYnVmKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ICAgICAgICAgIGNkc2ltbHZsKys7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg ICAgICAgICAgICAgICAgICAgICBpZiAoIWRvZnRweG1rZChwLDApKSB7IC8qIENhbid0IENEIC0g dHJ5IHRvIGNyZWF0ZSAqLworCQkJICAgIGRlYnVnKEYxMTAsImZ0cCBzeW5jZGlyIG1rZGlyIGZh aWxlZCIscCwwKTsgCisvKgorICBTdXBwb3NlIHdlIGFyZSBleGVjdXRpbmcgU0VORCAvUkVDVVJT SVZFLiAgTG9jYWxseSB3ZSBoYXZlIGEgZGlyZWN0b3J5CisgIEZPTyBidXQgdGhlIHJlbW90ZSBo YXMgYSByZWd1bGFyIGZpbGUgd2l0aCB0aGUgc2FtZSBuYW1lLiAgV2UgY2FuJ3QgQ0QKKyAgdG8g aXQsIGNhbid0IE1LRElSIGl0IGVpdGhlci4gIFRoZXJlJ3Mgbm8gd2F5IG91dCBidXQgdG8gZmFp bCBhbmQgbGV0CisgIHRoZSB1c2VyIGhhbmRsZSB0aGUgcHJvYmxlbS4KKyovCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcXVpZXQgPSBzYXZlcTsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICByZXR1cm4oMCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisJCQlkZWJ1ZyhGMTEw LCJmdHAgc3luY2RpciBta2RpciBPSyIscCwwKTsgCisgICAgICAgICAgICAgICAgICAgICAgICBp ZiAoZmRpc3BsYSA9PSBYWUZEX0IpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmlu dGYoIiBDUkVBVEVEIERJUkVDVE9SWSAlc1xuIixwKTsKKyAgICAgICAgICAgICAgICAgICAgICAg IH0gZWxzZSBpZiAoZmRpc3BsYSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNrbWFr bXNnKG1zZ2J1ZixDS01BWFBBVEgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIkNSRUFURUQgRElSRUNUT1JZICIscCxOVUxMLE5VTEwpOworICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGZ0c2NyZWVuKFNDUl9TVCxTVF9NU0csKENLX09GRl9UKTAsbXNnYnVmKTsKKyAg ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZG9m dHBjd2QocCwwKSkgeyAvKiBUcnkgYWdhaW4gdG8gQ0QgKi8KKwkJCSAgICBkZWJ1ZyhGMTEwLCJm dHAgc3luY2RpciBDRCBmYWlsZWQiLHAsMCk7IAorICAgICAgICAgICAgICAgICAgICAgICAgICAg IHF1aWV0ID0gc2F2ZXE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKDApOwor ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZk aXNwbGEgPT0gWFlGRF9CKSBwcmludGYoIiBDV0QgJXNcbiIscCk7CisJCQlkZWJ1ZyhGMTEwLCJm dHAgc3luY2RpciBDRCBPSyIscCwwKTsgCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICAgICAgY2RsZXZlbCsrOworICAgICAgICAgICAgfQorICAg ICAgICAgICAgaWYgKGRvbmUpICAgICAgICAgICAgICAgICAgIC8qIFF1aXQgaWYgbm8gbmV4dCBz ZWdtZW50ICovCisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcCA9IHMrMTsgICAg ICAgICAgICAgICAgICAgIC8qIFBvaW50IHRvIG5leHQgc2VnbWVudCAqLworICAgICAgICB9Cisg ICAgICAgIHMrKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUG9pbnQgdG8gbmV4dCBz b3VyY2UgY2hhciAqLworICAgIH0KKworICB4Y3dkOgorICAgIGNrc3RybmNweShwdXRwYXRoLHRt cCxDS01BWFBBVEgrMSk7IC8qIEFsbCBPSyAtIG1ha2UgdGhpcyB0aGUgbmV3IHBhdGggKi8KKyAg ICBxdWlldCA9IHNhdmVxOworICAgIHJldHVybigxKTsKK30KKworI2lmZGVmIERPVVBEQVRFCisj aWZkZWYgREVCVUcKK3N0YXRpYyBWT0lECitkYnRpbWUocyx4eCkgY2hhciAqIHM7IHN0cnVjdCB0 bSAqIHh4OyB7IC8qIFdyaXRlIHN0cnVjdCB0bSB0byBkZWJ1ZyBsb2cgKi8KKyAgICBpZiAoZGVi bG9nKSB7CisgICAgICAgIGRlYnVnKEYxMTEsImZ0cCB5ZWFyICIscyx4eC0+dG1feWVhcik7Cisg ICAgICAgIGRlYnVnKEYxMTEsImZ0cCBtb250aCIscyx4eC0+dG1fbW9uKTsKKyAgICAgICAgZGVi dWcoRjExMSwiZnRwIGRheSAgIixzLHh4LT50bV9tZGF5KTsKKyAgICAgICAgZGVidWcoRjExMSwi ZnRwIGhvdXIgIixzLHh4LT50bV9ob3VyKTsKKyAgICAgICAgZGVidWcoRjExMSwiZnRwIG1pbiAg IixzLHh4LT50bV9taW4pOworICAgICAgICBkZWJ1ZyhGMTExLCJmdHAgc2VjICAiLHMseHgtPnRt X3NlYyk7CisgICAgfQorfQorI2VuZGlmIC8qIERFQlVHICovCisKKy8qICB0IG0gYyBvIG0gcCBh IHIgZSAgLS0gIENvbXBhcmUgdHdvIHN0cnVjdCB0bSdzICovCisKKy8qICBMaWtlIHN0cmNtcCgp IGJ1dCBmb3Igc3RydWN0IHRtJ3MgICovCisvKiAgUmV0dXJucyAtMSBpZiB4eCA8IHl5LCAwIGlm IHRoZXkgYXJlIGVxdWFsLCAxIGlmIHh4ID4geXkgKi8KKworc3RhdGljIGludAordG1jb21wYXJl KHh4LHl5KSBzdHJ1Y3QgdG0gKiB4eCwgKiB5eTsgeworCisgICAgaWYgKHh4LT50bV95ZWFyIDwg eXktPnRtX3llYXIpICAgICAgLyogRmlyc3QgeWVhciBsZXNzIHRoYW4gc2Vjb25kICovCisgICAg ICByZXR1cm4oLTEpOworICAgIGlmICh4eC0+dG1feWVhciA+IHl5LT50bV95ZWFyKSAgICAgIC8q IEZpcnN0IHllYXIgZ3JlYXRlciB0aGFuIHNlY29uZCAqLworICAgICAgcmV0dXJuKDEpOworCisg ICAgLyogWWVhcnMgYXJlIGVxdWFsIHNvIGNvbXBhcmUgbW9udGhzICovCisKKyAgICBpZiAoeHgt PnRtX21vbiAgPCB5eS0+dG1fbW9uKSAgICAgICAvKiBBbmQgc28gb24uLi4gKi8KKyAgICAgIHJl dHVybigtMSk7CisgICAgaWYgKHh4LT50bV9tb24gID4geXktPnRtX21vbikKKyAgICAgIHJldHVy bigxKTsKKworICAgIGlmICh4eC0+dG1fbWRheSA8IHl5LT50bV9tZGF5KQorICAgICAgcmV0dXJu KC0xKTsKKyAgICBpZiAoeHgtPnRtX21kYXkgPiB5eS0+dG1fbWRheSkKKyAgICAgIHJldHVybigx KTsKKworICAgIGlmICh4eC0+dG1faG91ciA8IHl5LT50bV9ob3VyKQorICAgICAgcmV0dXJuKC0x KTsKKyAgICBpZiAoeHgtPnRtX2hvdXIgPiB5eS0+dG1faG91cikKKyAgICAgIHJldHVybigxKTsK KworICAgIGlmICh4eC0+dG1fbWluICA8IHl5LT50bV9taW4pCisgICAgICByZXR1cm4oLTEpOwor ICAgIGlmICh4eC0+dG1fbWluICA+IHl5LT50bV9taW4pCisgICAgICByZXR1cm4oMSk7CisKKyAg ICBpZiAoeHgtPnRtX3NlYyAgPCB5eS0+dG1fc2VjKQorICAgICAgcmV0dXJuKC0xKTsKKyAgICBp ZiAoeHgtPnRtX3NlYyAgPiB5eS0+dG1fc2VjKQorICAgICAgcmV0dXJuKDEpOworCisgICAgcmV0 dXJuKDApOworfQorI2VuZGlmIC8qIERPVVBEQVRFICovCisKKyNpZm5kZWYgSEFWRV9USU1FR00g ICAgICAgICAgICAgLyogRm9yIHBsYXRmb3JtcyB0aGF0IGRvIG5vdCBoYXZlIHRpbWVnbSgpICov CitzdGF0aWMgQ09OU1QgaW50IE1PTlRIREFZU1tdID0geyAvKiBOdW1iZXIgb2YgZGF5cyBpbiBl YWNoIG1vbnRoLiAqLworICAgIDMxLCAyOCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMSwgMzAsIDMx LCAzMCwgMzEKK307CisKKy8qIE1hY3JvIGZvciB3aGV0aGVyIGEgZ2l2ZW4geWVhciBpcyBhIGxl YXAgeWVhci4gKi8KKyNkZWZpbmUgSVNMRUFQKHllYXIpIFwKKygoKHllYXIpICUgNCkgPT0gMCAm JiAoKCh5ZWFyKSAlIDEwMCkgIT0gMCB8fCAoKHllYXIpICUgNDAwKSA9PSAwKSkKKyNlbmRpZiAv KiBIQVZFX1RJTUVHTSAqLworCisvKiAgbSBrIHUgdCBpIG0gZSAgLS0gIExpa2UgbWt0aW1lKCkg YnV0IGFyZ3VtZW50IGlzIGFscmVhZHkgVVRDICovCisKK3N0YXRpYyB0aW1lX3QKKyNpZmRlZiBD S19BTlNJQworbWt1dGltZShzdHJ1Y3QgdG0gKiB0bSkKKyNlbHNlCitta3V0aW1lKHRtKSBzdHJ1 Y3QgdG0gKiB0bTsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogbWt1dGltZSAqLyB7CisjaWZk ZWYgSEFWRV9USU1FR00KKyAgICByZXR1cm4odGltZWdtKHRtKSk7ICAgICAgICAgICAgICAgICAv KiBIYXZlIHN5c3RlbSBzZXJ2aWNlLCB1c2UgaXQuICovCisjZWxzZQorLyoKKyAgQ29udHJpYnV0 ZWQgYnkgUnVzcyBBbGxiZXJ5IChycmFAc3RhbmZvcmQuZWR1KSwgdXNlZCBieSBwZXJtaXNzaW9u LgorICBHaXZlbiBhIHN0cnVjdCB0bSByZXByZXNlbnRpbmcgYSBjYWxlbmRhciB0aW1lIGluIFVU QywgY29udmVydCBpdCB0bworICBzZWNvbmRzIHNpbmNlIGVwb2NoLiAgUmV0dXJucyAodGltZV90 KSAtMSBpZiB0aGUgdGltZSBpcyBub3QKKyAgY29udmVydGFibGUuICBOb3RlIHRoYXQgdGhpcyBm dW5jdGlvbiBkb2VzIG5vdCBjYW5vbmljYWxpemUgdGhlIHByb3ZpZGVkCisgIHN0cnVjdCB0bSwg bm9yIGRvZXMgaXQgYWxsb3cgb3V0LW9mLXJhbmdlIHZhbHVlcyBvciB5ZWFycyBiZWZvcmUgMTk3 MC4KKyAgUmVzdWx0IHNob3VsZCBiZSBpZGVudGljYWwgd2l0aCB0aW1lZ20oKS4KKyovCisgICAg dGltZV90IHJlc3VsdCA9IDA7CisgICAgaW50IGk7CisgICAgLyoKKyAgICAgIFdlIGRvIGFsbG93 IHNvbWUgaWxsLWZvcm1lZCBkYXRlcywgYnV0IHdlIGRvbid0IGRvIGFueXRoaW5nIHNwZWNpYWwK KyAgICAgIHdpdGggdGhlbSBhbmQgb3VyIGNhbGxlcnMgcmVhbGx5IHNob3VsZG4ndCBwYXNzIHRo ZW0gdG8gdXMuICBEbworICAgICAgZXhwbGljaXRseSBkaXNhbGxvdyB0aGUgb25lcyB0aGF0IHdv dWxkIGNhdXNlIGludmFsaWQgYXJyYXkgYWNjZXNzZXMKKyAgICAgIG9yIG90aGVyIGFsZ29yaXRo bSBwcm9ibGVtcy4KKyAgICAqLworI2lmZGVmIERFQlVHCisgICAgaWYgKGRlYmxvZykgeworICAg ICAgICBkZWJ1ZyhGMTAxLCJta3V0aW1lIHRtX21vbiIsIiIsdG0tPnRtX21vbik7CisgICAgICAg IGRlYnVnKEYxMDEsIm1rdXRpbWUgdG1feWVhciIsIiIsdG0tPnRtX3llYXIpOworICAgIH0KKyNl bmRpZiAvKiBERUJVRyAqLworICAgIGlmICh0bS0+dG1fbW9uIDwgMCB8fCB0bS0+dG1fbW9uID4g MTEgfHwgdG0tPnRtX3llYXIgPCA3MCkKKyAgICAgIHJldHVybigodGltZV90KSAtMSk7CisKKyAg ICAvKiBDb252ZXJ0IHRvIHRpbWVfdC4gKi8KKyAgICBmb3IgKGkgPSAxOTcwOyBpIDwgdG0tPnRt X3llYXIgKyAxOTAwOyBpKyspCisgICAgICByZXN1bHQgKz0gMzY1ICsgSVNMRUFQKGkpOworICAg IGZvciAoaSA9IDA7IGkgPCB0bS0+dG1fbW9uOyBpKyspCisgICAgICByZXN1bHQgKz0gTU9OVEhE QVlTW2ldOworICAgIGlmICh0bS0+dG1fbW9uID4gMSAmJiBJU0xFQVAodG0tPnRtX3llYXIgKyAx OTAwKSkKKyAgICAgIHJlc3VsdCsrOworICAgIHJlc3VsdCA9IDI0ICogKHJlc3VsdCArIHRtLT50 bV9tZGF5IC0gMSkgKyB0bS0+dG1faG91cjsKKyAgICByZXN1bHQgPSA2MCAqIHJlc3VsdCArIHRt LT50bV9taW47CisgICAgcmVzdWx0ID0gNjAgKiByZXN1bHQgKyB0bS0+dG1fc2VjOworICAgIGRl YnVnKEYxMDEsIm1rdXRpbWUgcmVzdWx0IiwiIixyZXN1bHQpOworICAgIHJldHVybihyZXN1bHQp OworI2VuZGlmIC8qIEhBVkVfVElNRUdNICovCit9CisKKworLyoKKyAgcyBlIHQgbSBvIGQgdCBp IG0gZSAgLS0gIFNldCBmaWxlIG1vZGlmaWNhdGlvbiB0aW1lLgorCisgIGYgPSBjaGFyICogZmls ZW5hbWU7CisgIHQgPSB0aW1lX3QgZGF0ZS90aW1lIHRvIHNldCAoU2VjcyBzaW5jZSAxOTcwMDEw MSAwOjAwOjAwIFVUQywgTk9UIGxvY2FsKQorCisgIFVOSVgtc3BlY2lmaWM7IGlzb2xhdGVzIG1h aW5saW5lIGNvZGUgZnJvbSBoaWRlb3VzICNpZmRlZnMuCisgIFJldHVybnM6CisgICAgMCBvbiBz dWNjZXNzLAorICAgLTEgb24gZXJyb3IuCisKKyovCitzdGF0aWMgaW50CisjaWZkZWYgQ0tfQU5T SUMKK3NldG1vZHRpbWUoY2hhciAqIGYsIHRpbWVfdCB0KQorI2Vsc2UKK3NldG1vZHRpbWUoZix0 KSBjaGFyICogZjsgdGltZV90IHQ7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIHNldG1vZHRp bWUgKi8geworI2lmZGVmIE5UCisgICAgc3RydWN0IF9zdGF0IHNiOworI2Vsc2UgLyogTlQgKi8K KyAgICBzdHJ1Y3Qgc3RhdCBzYjsKKyNlbmRpZiAvKiBOVCAqLworICAgIGludCB4LCByYyA9IDA7 CisjaWZkZWYgQlNENDQKKyAgICBzdHJ1Y3QgdGltZXZhbCB0cFsyXTsKKyNlbHNlICAvKiBkZWYg QlNENDQgKi8KKyNpZmRlZiBWNworICAgIHN0cnVjdCB1dGltYnVmIHsKKyAgICAgICAgdGltZV90 IHRpbWVwWzJdOworICAgIH0gdHA7CisjZWxzZSAgLyogZGVmIFY3ICovCisjaWZkZWYgU1lTVVRJ TUVICisjaWZkZWYgTlQKKyAgICBzdHJ1Y3QgX3V0aW1idWYgdHA7CisjZWxzZSAvKiBOVCAqLwor ICAgIHN0cnVjdCB1dGltYnVmIHRwOworI2VuZGlmIC8qIE5UICovCisjZWxzZSAvKiBkZWYgU1lT VVRJTUVIICovCisjaWZkZWYgVk1TCisgICAgc3RydWN0IHV0aW1idWYgdHA7CisjZGVmaW5lIFNZ U1VUSU1FSCAgICAgICAgICAgICAgIC8qIE91ciB1dGltYnVmIG1hdGNoZXMgdGhpcyBvbmUuICov CisjZWxzZSAvKiBkZWYgVk1TICovCisgICAgc3RydWN0IHV0aW1idWYgeworICAgICAgICB0aW1l X3QgYXRpbWU7CisgICAgICAgIHRpbWVfdCBtdGltZTsKKyAgICB9IHRwOworI2VuZGlmIC8qIGRl ZiBWTVMgW2Vsc2VdICovCisjZW5kaWYgLyogZGVmIFNZU1VUSU1FSCBbZWxzZV0gKi8KKyNlbmRp ZiAvKiBkZWYgVjcgW2Vsc2VdICovCisjZW5kaWYgLyogZGVmIEJTRDQ0IFtlbHNlXSAqLworCisg ICAgaWYgKHN0YXQoZiwmc2IpIDwgMCkgeworICAgICAgICBkZWJ1ZyhGMTExLCJzZXRtb2R0aW1l IHN0YXQgZmFpbHVyZSIsZixlcnJubyk7CisgICAgICAgIHJldHVybigtMSk7CisgICAgfQorI2lm ZGVmIEJTRDQ0CisgICAgdHBbMF0udHZfc2VjID0gc2Iuc3RfYXRpbWU7ICAgICAgICAgLyogQWNj ZXNzIHRpbWUgZmlyc3QgKi8KKyAgICB0cFsxXS50dl9zZWMgPSB0OyAgICAgICAgICAgICAgICAg ICAvKiBVcGRhdGUgdGltZSBzZWNvbmQgKi8KKyAgICBkZWJ1ZyhGMTExLCJzZXRtb2R0aW1lIEJT RDQ0IixmLHQpOworI2Vsc2UKKyNpZmRlZiBWNworICAgIHRwLnRpbWVwWzBdID0gdDsgICAgICAg ICAgICAgICAgICAgIC8qIFNldCBtb2RpZi4gdGltZSB0byBjcmVhdGlvbiBkYXRlICovCisgICAg dHAudGltZXBbMV0gPSBzYi5zdF9hdGltZTsgICAgICAgICAgLyogRG9uJ3QgY2hhbmdlIHRoZSBh Y2Nlc3MgdGltZSAqLworICAgIGRlYnVnKEYxMTEsInNldG1vZHRpbWUgVjciLGYsdCk7CisjZWxz ZQorI2lmZGVmIFNZU1VUSU1FSAorICAgIHRwLm1vZHRpbWUgPSB0OyAgICAgICAgICAgICAgICAg ICAgIC8qIFNldCBtb2RpZi4gdGltZSB0byBjcmVhdGlvbiBkYXRlICovCisgICAgdHAuYWN0aW1l ID0gc2Iuc3RfYXRpbWU7ICAgICAgICAgICAgLyogRG9uJ3QgY2hhbmdlIHRoZSBhY2Nlc3MgdGlt ZSAqLworICAgIGRlYnVnKEYxMTEsInNldG1vZHRpbWUgU1lTVVRJTUVIIixmLHQpOworI2Vsc2UK KyAgICB0cC5tdGltZSA9IHQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiBTZXQgbW9kaWYuIHRp bWUgdG8gY3JlYXRpb24gZGF0ZSAqLworICAgIHRwLmF0aW1lID0gc2Iuc3RfYXRpbWU7ICAgICAg ICAgICAgIC8qIERvbid0IGNoYW5nZSB0aGUgYWNjZXNzIHRpbWUgKi8KKyAgICBkZWJ1ZyhGMTEx LCJzZXRtb2R0aW1lIChvdGhlcikiLGYsdCk7CisjZW5kaWYgLyogU1lTVVRJTUVIICovCisjZW5k aWYgLyogVjcgKi8KKyNlbmRpZiAvKiBCU0Q0NCAqLworCisgICAgLyogVHJ5IHRvIHNldCB0aGUg ZmlsZSBkYXRlICovCisKKyNpZmRlZiBCU0Q0NAorICAgIHggPSB1dGltZXMoZix0cCk7CisgICAg ZGVidWcoRjExMSwic2V0bW9kdGltZSB1dGltZXMoKSIsIkJTRDQ0Iix4KTsKKyNlbHNlCisjaWZk ZWYgSVJJWDY1CisgICAgeworICAgICAgLyoKKyAgICAgICAgVGhlIGZvbGxvd2luZyBwcm9kdWNl cyB0aGUgbm9uc2Vuc2ljYWwgd2FybmluZzoKKyAgICAgICAgQXJndW1lbnQgIG9mIHR5cGUgImNv bnN0IHN0cnVjdCB1dGltYnVmICoiIGlzIGluY29tcGF0aWJsZSB3aXRoCisgICAgICAgIHBhcmFt ZXRlciBvZiB0eXBlICJjb25zdCBzdHJ1Y3QgdXRpbWJ1ZiAqIi4gIElmIHlvdSBjYW4gbWFrZSBp dAorICAgICAgICBnbyBhd2F5LCBiZSBteSBndWVzdC4KKyAgICAgICovCisgICAgICAgIGNvbnN0 IHN0cnVjdCB1dGltYnVmICogdDIgPSAmdHA7CisgICAgICAgIHggPSB1dGltZShmLHQyKTsKKyAg ICB9CisjZWxzZQorICAgIHggPSB1dGltZShmLCZ0cCk7CisgICAgZGVidWcoRjExMSwic2V0bW9k dGltZSB1dGltZSgpIiwib3RoZXIiLHgpOworI2VuZGlmIC8qIElSSVg2NSAqLworI2VuZGlmIC8q IEJTRDQ0ICovCisgICAgaWYgKHgpCisgICAgICByYyA9IC0xOworCisgICAgZGVidWcoRjEwMSwi c2V0bW9kdGltZSByZXN1bHQiLCIiLHJjKTsKKyAgICByZXR1cm4ocmMpOworfQorCisKKy8qCisg IGMgaCBrIG0gbyBkIHQgaSBtIGUgIC0tICBDaGVjay9TZXQgZmlsZSBtb2RpZmljYXRpb24gdGlt ZS4KKworICBmYyA9IGZ1bmN0aW9uIGNvZGU6CisgICAgMCA9IENoZWNrOyByZXR1cm5zOgorICAg ICAgLTEgb24gZXJyb3IsCisgICAgICAgMCBpZiBsb2NhbCBvbGRlciB0aGFuIHJlbW90ZSwKKyAg ICAgICAxIGlmIG1vZHRpbWVzIGFyZSBlcXVhbCwKKyAgICAgICAyIGlmIGxvY2FsIG5ld2VyIHRo YW4gcmVtb3RlLgorICAgIDEgPSBTZXQgKGxvY2FsIGZpbGUncyBtb2R0aW1lIGZyb20gcmVtb3Rl J3MpOyByZXR1cm5zOgorICAgICAgLTEgb24gZXJyb3IsCisgICAgICAgMCBvbiBzdWNjZXNzLgor Ki8KK3N0YXRpYyBpbnQKK2Noa21vZHRpbWUobG9jYWwscmVtb3RlLGZjKSBjaGFyICogbG9jYWws ICogcmVtb3RlOyBpbnQgZmM7IHsKKyNpZmRlZiBOVAorICAgIHN0cnVjdCBfc3RhdCBzdGF0YnVm OworI2Vsc2UgLyogTlQgKi8KKyAgICBzdHJ1Y3Qgc3RhdCBzdGF0YnVmOworI2VuZGlmIC8qIE5U ICovCisgICAgc3RydWN0IHRtICogdG1sb2NhbCA9IE5VTEw7CisgICAgc3RydWN0IHRtIHRtcmVt b3RlOworICAgIGludCByYyA9IDAsIGhhdmVkYXRlID0gMCwgbGNzID0gLTEsIHJjcyA9IC0xLCBm bGFnID0gMDsKKyAgICBjaGFyICogcywgdGltZWJ1Zls2NF07CisKKyAgICBkZWJ1ZyhGMTExLCJj aGttb2R0aW1lIixsb2NhbCxtZHRtb2spOworICAgIGlmICghbWR0bW9rKQkJCS8qIFNlcnZlciBz dXBwb3J0cyBNRFRNPyAqLworICAgICAgcmV0dXJuKC0xKTsJCQkvKiBObyBkb24ndCBib3RoZXIu ICovCisKKyNpZm5kZWYgTk9DU0VUUworICAgIGlmIChmdHBfeGxhKSB7CisgICAgICAgIGxjcyA9 IGZ0cF9jc2w7CisgICAgICAgIGlmIChsY3MgPCAwKSBsY3MgPSBmY2hhcnNldDsKKyAgICAgICAg cmNzID0gZnRwX2NzeDsKKyAgICAgICAgaWYgKHJjcyA8IDApIHJjcyA9IGZ0cF9jc3I7CisgICAg fQorI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKworICAgIGlmIChmYyA9PSAwKSB7CisgICAgICAgIHJj ID0gc3RhdChsb2NhbCwmc3RhdGJ1Zik7CisgICAgICAgIGlmIChyYyA9PSAwKSB7ICAgICAgICAg ICAgICAgICAgLyogR2V0IGxvY2FsIGZpbGUncyBtb2QgdGltZSAqLworCSAgICAvKiBDb252ZXJ0 IHRvIHN0cnVjdCB0bSAqLworICAgICAgICAgICAgdG1sb2NhbCA9IGdtdGltZSgodGltZV90ICop JnN0YXRidWYuc3RfbXRpbWUpOworI2lmZGVmIERFQlVHCisgICAgICAgICAgICBpZiAodG1sb2Nh bCkgeworICAgICAgICAgICAgICAgIGRidGltZShsb2NhbCx0bWxvY2FsKTsKKyAgICAgICAgICAg IH0KKyNlbmRpZiAvKiBERUJVRyAqLworICAgICAgICB9CisgICAgfQorICAgIC8qIEdldCByZW1v dGUgZmlsZSdzIG1vZCB0aW1lIGFzIHl5eXltbWRkaGhtbXNzICovCisKKyAgICBpZiAoaGF2ZW1k dG0pIHsJCQkvKiBBbHJlYWR5IGdvdCBpdCBmcm9tIE1MU0Q/ICovCisJcyA9IGhhdmVtZHRtOwor CWZsYWcrKzsKKyAgICB9IGVsc2UgaWYgKGZ0cGNtZCgiTURUTSIscmVtb3RlLGxjcyxyY3MsMCkg PT0gUkVQTFlfQ09NUExFVEUpIHsKKyAgICAgICAgY2hhciBjOworICAgICAgICBiemVybygoY2hh ciAqKSZ0bXJlbW90ZSwgc2l6ZW9mKHN0cnVjdCB0bSkpOworICAgICAgICBzID0gZnRwX3JlcGx5 X3N0cjsKKyAgICAgICAgd2hpbGUgKChjID0gKnMrKykpIHsgICAgICAgICAgICAvKiBTa2lwIHBh c3QgcmVzcG9uc2UgY29kZSAqLworICAgICAgICAgICAgaWYgKGMgPT0gU1ApIHsKKyAgICAgICAg ICAgICAgICBmbGFnKys7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg ICAgICAgIH0KKyAgICB9CisgICAgaWYgKGZsYWcpIHsKKwlkZWJ1ZyhGMTExLCJmdHAgY2hrbW9k dGltZSBzdHJpbmciLHMsZmxhZyk7CisJaWYgKGZ0c19zdG8pIHsJCQkvKiBVc2VyIGdhdmUgc2Vy dmVyIHRpbWUgb2Zmc2V0PyAqLworCSAgICBjaGFyICogcDsKKwkgICAgZGVidWcoRjExMCwiZnRw IGNoa21vZHRpbWUgb2Zmc2V0IixmdHNfc3RvLDApOworCSAgICBja21ha21zZyh0aW1lYnVmLDY0 LHMsIiAiLGZ0c19zdG8sTlVMTCk7IC8qIEJ1aWxkIGRlbHRhIHRpbWUgKi8KKwkgICAgaWYgKChw ID0gY21jdnRkYXRlKHRpbWVidWYsMSkpKSB7IC8qIEFwcGx5IGRlbHRhIHRpbWUgKi8KKwkJY2tz dHJuY3B5KHRpbWVidWYscCw2NCk7ICAgICAgLyogQ29udmVydCB0byBNRFRNIGZvcm1hdCAqLwor CQl0aW1lYnVmWzhdICA9IHRpbWVidWZbOV07ICAvKiBoICovCisJCXRpbWVidWZbOV0gID0gdGlt ZWJ1ZlsxMF07IC8qIGggKi8KKwkJdGltZWJ1ZlsxMF0gPSB0aW1lYnVmWzEyXTsgLyogbSAqLwor CQl0aW1lYnVmWzExXSA9IHRpbWVidWZbMTNdOyAvKiBtICovCisJCXRpbWVidWZbMTJdID0gdGlt ZWJ1ZlsxMl07IC8qIHMgKi8KKwkJdGltZWJ1ZlsxM10gPSB0aW1lYnVmWzEzXTsgLyogcyAqLwor CQl0aW1lYnVmWzE0XSA9IE5VTDsKKwkJcyA9IHRpbWVidWY7CisJCWRlYnVnKEYxMTAsImZ0cCBj aGttb2R0aW1lIGFkanVzdCIscywwKTsKKwkgICAgfQorCX0KKyAgICAgICAgaWYgKGZsYWcpIHsg ICAgICAgICAgICAgICAgICAgICAvKiBDb252ZXJ0IHRvIHN0cnVjdCB0bSAqLworICAgICAgICAg ICAgY2hhciAqIHBhdDsKKyAgICAgICAgICAgIGludCB5MmtidWcgPSAwOyAgICAgICAgICAgICAv KiBTZWVuIGluIEtlcmJlcm9zIDQgRlRQIHNlcnZlcnMgKi8KKyAgICAgICAgICAgIGlmICghY2tz dHJjbXAocywiMTkxIiwzLDApKSB7CisgICAgICAgICAgICAgICAgcGF0ID0gIiUwNWQlMDJkJTAy ZCUwMmQlMDJkJTAyZCI7CisgICAgICAgICAgICAgICAgeTJrYnVnKys7CisgICAgICAgICAgICAg ICAgZGVidWcoRjExMCwiZnRwIGNoa21vZHRpbWUgWTJLIEJVRyBkZXRlY3RlZCIscywwKTsKKyAg ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcGF0ID0gIiUwNGQlMDJkJTAyZCUw MmQlMDJkJTAyZCI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc3NjYW5mKHMsICAg ICAgICAgICAgICAgLyogUGFyc2UgaW50byBzdHJ1Y3QgdG0gKi8KKyAgICAgICAgICAgICAgICAg ICAgICAgcGF0LAorICAgICAgICAgICAgICAgICAgICAgICAmKHRtcmVtb3RlLnRtX3llYXIpLAor ICAgICAgICAgICAgICAgICAgICAgICAmKHRtcmVtb3RlLnRtX21vbiksCisgICAgICAgICAgICAg ICAgICAgICAgICYodG1yZW1vdGUudG1fbWRheSksCisgICAgICAgICAgICAgICAgICAgICAgICYo dG1yZW1vdGUudG1faG91ciksCisgICAgICAgICAgICAgICAgICAgICAgICYodG1yZW1vdGUudG1f bWluKSwKKyAgICAgICAgICAgICAgICAgICAgICAgJih0bXJlbW90ZS50bV9zZWMpCisgICAgICAg ICAgICAgICAgICAgICAgICkgPT0gNikgeworICAgICAgICAgICAgICAgIHRtcmVtb3RlLnRtX3ll YXIgLT0gKHkya2J1ZyA/IDE5MDAwIDogMTkwMCk7CisgICAgICAgICAgICAgICAgZGVidWcoRjEw MSwiZnRwIGNoa21vZHRpbWUgeWVhciIsIiIsdG1yZW1vdGUudG1feWVhcik7CisgICAgICAgICAg ICAgICAgdG1yZW1vdGUudG1fbW9uLS07CisKKyNpZmRlZiBERUJVRworCQlkZWJ1ZyhGMTAwLCJT RVJWRVIgVElNRSBGT0xMT1dTOiIsIiIsMCk7CisgICAgICAgICAgICAgICAgZGJ0aW1lKHJlbW90 ZSwmdG1yZW1vdGUpOworI2VuZGlmIC8qIERFQlVHICovCisKKyAgICAgICAgICAgICAgICBpZiAo aGF2ZWRhdGUgPiAtMSkKKwkJICBoYXZlZGF0ZSA9IDE7CisgICAgICAgICAgICB9CisgICAgICAg IH0KKyAgICB9IGVsc2UgewkJCQkvKiBGYWlsZWQgKi8KKwlkZWJ1ZyhGMTAxLCJmdHAgY2hrbW9k dGltZSBmdHBjb2RlIiwiIixmdHBjb2RlKTsKKwlpZiAoZnRwY29kZSA9PSA1MDAgfHwJCS8qIENv bW1hbmQgdW5yZWNvZ25pemVkICovCisJICAgIGZ0cGNvZGUgPT0gNTAyIHx8CQkvKiBDb21tYW5k IG5vdCBpbXBsZW1lbnRlZCAqLworCSAgICBmdHBjb2RlID09IDIwMikJCS8qIENvbW1hbmQgc3Vw ZXJmbHVvdXMgKi8KKwkgIG1kdG1vayA9IDA7CQkJLyogRG9uJ3QgYXNrIHRoaXMgc2VydmVyIGFn YWluICovCisJcmV0dXJuKC0xKTsKKyAgICB9CisgICAgaWYgKGZjID09IDApIHsgICAgICAgICAg ICAgICAgICAgICAgLyogQ29tcGFyZSAqLworICAgICAgICBpZiAoaGF2ZWRhdGUgPT0gMSkgewkJ LyogT25seSBpZiB3ZSBoYXZlIGJvdGggZmlsZSBkYXRlcyAqLworICAgICAgICAgICAgLyoKKyAg ICAgICAgICAgICAgQ29tcGFyZSB3aXRoIGxvY2FsIGZpbGUncyB0aW1lLiAgV2UgZG9uJ3QgdXNl CisgICAgICAgICAgICAgIGNsb2NrIHRpbWUgKHRpbWVfdCkgaGVyZSBpbiBjYXNlIG9mIHNpZ25l ZC91bnNpZ25lZAorICAgICAgICAgICAgICBjb25mdXNpb24sIGV0Yy4KKyAgICAgICAgICAgICov CisJICAgIGludCB4eDsKKyNpZmRlZiBDT01NRU5UCisjaWZkZWYgREVCVUcJICAgIAorCSAgICBp ZiAoZGVibG9nKSB7CisJCWRidGltZSgiTE9DQUwiLHRtbG9jYWwpOworCQlkYnRpbWUoIlJFTU9U IiwmdG1yZW1vdGUpOworCSAgICB9CisjZW5kaWYgLyogREVCVUcgKi8KKyNlbmRpZiAvKiBDT01N RU5UICovCisJICAgIHh4ID0gdG1jb21wYXJlKHRtbG9jYWwsJnRtcmVtb3RlKTsKKwkgICAgZGVi dWcoRjEwMSwiY2hrbW9kdGltZSB0bWNvbXBhcmUiLCIiLHh4KTsKKyAgICAgICAgICAgIHJldHVy bih4eCArIDEpOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChmdHBfZGF0ZXMpIHsgICAgICAg ICAgICAgLyogU2V0ICovCisgICAgICAgIC8qCisgICAgICAgICAgSGVyZSB3ZSBtdXN0IGNvbnZl cnQgc3RydWN0IHRtIHRvIHRpbWVfdAorICAgICAgICAgIHdpdGhvdXQgYXBwbHlpbmcgdGltZXpv bmUgY29udmVyc2lvbiwgZm9yIHdoaWNoCisgICAgICAgICAgdGhlcmUgaXMgbm8gcG9ydGFibGUg QVBJLiAgVGhlIG1ldGhvZCBpcyBoaWRkZW4KKyAgICAgICAgICBpbiBta3V0aW1lKCksIGRlZmlu ZWQgYWJvdmUuCisgICAgICAgICovCisgICAgICAgIHRpbWVfdCB1dGM7CisgICAgICAgIHV0YyA9 IG1rdXRpbWUoJnRtcmVtb3RlKTsKKyAgICAgICAgZGVidWcoRjExMSwiZnRwIGNoa21vZHRpbWUg bWt1dGltZSIscmVtb3RlLHV0Yyk7CisgICAgICAgIGlmICh1dGMgIT0gKHRpbWVfdCktMSkKKyAg ICAgICAgICByZXR1cm4oc2V0bW9kdGltZShsb2NhbCx1dGMpKTsKKyAgICB9CisgICAgcmV0dXJu KC0xKTsKK30KKworLyogZ2V0ZmlsZSgpIHJldHVybnM6IC0xIG9uIGVycm9yLCAwIGlmIGZpbGUg cmVjZWl2ZWQsIDEgaWYgZmlsZSBza2lwcGVkICovCisKK3N0YXRpYyBpbnQKK2dldGZpbGUocmVt b3RlLGxvY2FsLHJlY292ZXIsYXBwZW5kLHBpcGVuYW1lLHhsYXRlLGZjcyxyY3MpCisgICAgY2hh ciAqIGxvY2FsLCAqIHJlbW90ZSwgKiBwaXBlbmFtZTsgaW50IHJlY292ZXIsIGFwcGVuZCwgeGxh dGUsIGZjcywgcmNzOworLyogZ2V0ZmlsZSAqLyB7CisgICAgaW50IHJjID0gLTE7CisgICAgVUxP TkcgdDAsIHQxOworCisjaWZkZWYgR0ZUSU1FUgorICAgIENLRkxPQVQgc2VjOworI2Vsc2UKKyAg ICBpbnQgc2VjID0gMDsKKyNlbmRpZiAvKiBHRlRJTUVSICovCisgICAgY2hhciBmdWxsbmFtZVtD S01BWFBBVEgrMV07CisKKyAgICBkZWJ1ZyhGMTEwLCJmdHAgZ2V0ZmlsZSByZW1vdGUgQSIscmVt b3RlLDApOworICAgIGRlYnVnKEYxMTAsImZ0cCBnZXRmaWxlIGxvY2FsIEEiLGxvY2FsLDApOwor ICAgIGRlYnVnKEYxMTAsImZ0cCBnZXRmaWxlIHBpcGVuYW1lIixwaXBlbmFtZSwwKTsKKyAgICBp ZiAoIXJlbW90ZSkgcmVtb3RlID0gIiI7CisKKyNpZmRlZiBQQVRURVJOUworICAgIC8qIEF1dG9t YXRpYyB0eXBlIHN3aXRjaGluZz8gKi8KKyAgICBpZiAoZnRwX3hmZXJtb2RlID09IFhNT0RFX0Eg JiYgcGF0dGVybnMgJiYgZ2V0X2F1dG8gJiYgIWZvcmNldHlwZSkgeworICAgICAgICBpbnQgeDsK KyAgICAgICAgeCA9IG1hdGNobmFtZShyZW1vdGUsMCxzZXJ2ZXJ0eXBlKTsKKyAgICAgICAgZGVi dWcoRjExMSwiZnRwIGdldGZpbGUgbWF0Y2huYW1lIixyZW1vdGUseCk7CisgICAgICAgIHN3aXRj aCAoeCkgeworICAgICAgICAgIGNhc2UgMDogZnRwX3R5cCA9IEZUVF9BU0M7IGJyZWFrOworICAg ICAgICAgIGNhc2UgMTogZnRwX3R5cCA9IHRlbmV4ID8gRlRUX1RFTiA6IEZUVF9CSU47IGJyZWFr OworICAgICAgICAgIGRlZmF1bHQ6IGlmIChnX2Z0cF90eXAgPiAtMSkgZnRwX3R5cCA9IGdfZnRw X3R5cDsKKyAgICAgICAgfQorICAgICAgICBjaGFuZ2V0eXBlKGZ0cF90eXAsZnRwX3ZibSk7Cisg ICAgICAgIGJpbmFyeSA9IGZ0cF90eXA7ICAgICAgICAgICAgICAgLyogRm9yIGZpbGUtdHJhbnNm ZXIgZGlzcGxheSAqLworICAgIH0KKyNlbmRpZiAvKiBQQVRURVJOUyAqLworCisjaWZuZGVmIE5P Q1NFVFMKKyAgICBmdHBfY3N4ID0gLTE7ICAgICAgICAgICAgICAgICAgICAgICAvKiBGb3IgZmls ZS10cmFuc2ZlciBkaXNwbGF5ICovCisgICAgZnRwX2NzbCA9IC0xOyAgICAgICAgICAgICAgICAg ICAgICAgLyogLi4uICovCisKKyAgICBpZiAocmNzID4gLTEpICAgICAgICAgICAgICAgICAgICAg ICAvKiAtMSBtZWFucyBubyB0cmFuc2xhdGlvbiAqLworICAgICAgaWYgKGZ0cF90eXAgPT0gRlRU X0FTQykgICAgICAgICAgIC8qIEZpbGUgdHlwZSBpcyAiYXNjaWkiPyAqLworICAgICAgICBpZiAo ZmNzIDwgMCkgICAgICAgICAgICAgICAgICAgIC8qIEZpbGUgY2hhcnNldCBub3QgZm9yY2VkPyAq LworICAgICAgICAgIGZjcyA9IGZjaGFyc2V0OyAgICAgICAgICAgICAgIC8qIHVzZSBwcmV2YWls aW5nIEZJTEUgQ0hBUkFDVEVSLVNFVCAqLworICAgIGlmIChmY3MgPiAtMSAmJiByY3MgPiAtMSkg eyAgICAgICAgIC8qIFNldCB1cCB0cmFuc2xhdGlvbiBmdW5jdGlvbnMgKi8KKyAgICAgICAgZGVi dWcoRjExMCwiZnRwIGdldGZpbGUiLCJpbml0eGxhdGUiLDApOworICAgICAgICBpbml0eGxhdGUo cmNzLGZjcyk7ICAgICAgICAgICAgIC8qIE5COiBvcHBvc2l0ZSBvcmRlciBvZiBQVVQgKi8KKyAg ICAgICAgZnRwX2NzeCA9IHJjczsKKyAgICAgICAgZnRwX2NzbCA9IGZjczsKKyAgICB9IGVsc2UK KyAgICAgIHhsYXRlID0gMDsKKyNlbmRpZiAvKiBOT0NTRVRTICovCisKKyAgICBpZiAoIWxvY2Fs KSBsb2NhbCA9ICIiOworICAgIGlmICghcGlwZW5hbWUgJiYgISpsb2NhbCkKKyAgICAgIGxvY2Fs ID0gcmVtb3RlOworCisgICAgb3V0MnNjcmVlbiA9ICFzdHJjbXAobG9jYWwsIi0iKTsKKworICAg IGZ1bGxuYW1lWzBdID0gTlVMOworICAgIGlmIChwaXBlbmFtZSkgeworICAgICAgICBja3N0cm5j cHkoZnVsbG5hbWUscGlwZW5hbWUsQ0tNQVhQQVRIKzEpOworICAgIH0gZWxzZSB7CisgICAgICAg IHpmbnFmcChsb2NhbCxDS01BWFBBVEgsZnVsbG5hbWUpOworICAgICAgICBpZiAoIWZ1bGxuYW1l WzBdKQorICAgICAgICAgIGNrc3RybmNweShmdWxsbmFtZSxsb2NhbCxDS01BWFBBVEgrMSk7Cisg ICAgfQorICAgIGlmICghb3V0MnNjcmVlbiAmJiBkaXNwbGEgJiYgZmRpc3BsYSkgeyAvKiBTY3Jl ZW4gKi8KKyAgICAgICAgZnRzY3JlZW4oU0NSX0ZOLCdGJywoQ0tfT0ZGX1QpcGt0bnVtLHJlbW90 ZSk7CisgICAgICAgIGZ0c2NyZWVuKFNDUl9BTiwwLChDS19PRkZfVCkwLGZ1bGxuYW1lKTsKKyAg ICAgICAgZnRzY3JlZW4oU0NSX0ZTLDAsZnNpemUsIiIpOworICAgIH0KKyAgICB0bG9nKEYxMTAs ZnRwX3R5cCA/ICJmdHAgZ2V0IEJJTkFSWToiIDogImZ0cCBnZXQgVEVYVDoiLCByZW1vdGUsIDAp OworICAgIHRsb2coRjExMCwiIGFzIixmdWxsbmFtZSwwKTsKKyAgICBkZWJ1ZyhGMTExLCJmdHAg Z2V0ZmlsZSBzaXplIixyZW1vdGUsZnNpemUpOworICAgIGRlYnVnKEYxMTEsImZ0cCBnZXRmaWxl IGxvY2FsIixsb2NhbCxvdXQyc2NyZWVuKTsKKworICAgIGNrc3RybmNweShmaWxuYW0sIHBpcGVu YW1lID8gcmVtb3RlIDogbG9jYWwsIENLTUFYUEFUSCk7CisKKyAgICB0MCA9IGdtc3RpbWVyKCk7 ICAgICAgICAgICAgICAgICAgICAvKiBTdGFydCB0aW1lICovCisgICAgZGVidWcoRjExMSwiZnRw IGdldGZpbGUgdDAiLHJlbW90ZSx0MCk7IC8qIF5eXiAqLworICAgIHJjID0gcmVjdnJlcXVlc3Qo IlJFVFIiLAorICAgICAgICAgICAgICAgICAgICAgbG9jYWwsCisgICAgICAgICAgICAgICAgICAg ICByZW1vdGUsCisgICAgICAgICAgICAgICAgICAgICBhcHBlbmQgPyAiYWIiIDogIndiIiwKKyAg ICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICByZWNvdmVyLAorICAg ICAgICAgICAgICAgICAgICAgcGlwZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICB4bGF0ZSwK KyAgICAgICAgICAgICAgICAgICAgIGZjcywKKyAgICAgICAgICAgICAgICAgICAgIHJjcworICAg ICAgICAgICAgICAgICAgICAgKTsKKyAgICB0MSA9IGdtc3RpbWVyKCk7ICAgICAgICAgICAgICAg ICAgICAvKiBFbmQgdGltZSAqLworICAgIGRlYnVnKEYxMTEsImZ0cCBnZXRmaWxlIHQxIixyZW1v dGUsdDEpOworICAgIGRlYnVnKEYxMTEsImZ0cCBnZXRmaWxlIHNlYyIscmVtb3RlLCh0MS10MCkv MTAwMCk7CisjaWZkZWYgR0ZUSU1FUgorICAgIHNlYyA9IChDS0ZMT0FUKSgoQ0tGTE9BVCkodDEg LSB0MCkgLyAxMDAwLjApOyAvKiBTdGF0cyAqLworICAgIGZweGZzZWNzID0gc2VjOyAgICAgICAg ICAgICAgICAgICAgIC8qIChmb3IgZG94bG9nKCkpICovCisjZWxzZQorICAgIHNlYyA9ICh0MSAt IHQwKSAvIDEwMDA7CisgICAgeGZzZWNzID0gKGludClzZWM7CisjZW5kaWYgLyogR0ZUSU1FUiAq LworCisjaWZkZWYgRlRQX1RJTUVPVVQKKyAgICBpZiAoZnRwX3RpbWVkX291dCkKKyAgICAgIHJj ID0gLTQ7CisjZW5kaWYJLyogRlRQX1RJTUVPVVQgKi8KKworICAgIGRlYnVnKEYxMTEsImZ0cCBy ZWN2cmVxdWVzdCByYyIscmVtb3RlLHJjKTsKKyAgICBpZiAoY2FuY2VsZmlsZSB8fCBjYW5jZWxn cm91cCkgeworICAgICAgICBkZWJ1ZyhGMTExLCJmdHAgZ2V0IGNhbmNlbGVkIixja2l0b2EoY2Fu Y2VsZmlsZSksY2FuY2VsZ3JvdXApOworICAgICAgICBmdHNjcmVlbihTQ1JfU1QsU1RfSU5ULChD S19PRkZfVCkwLCIiKTsKKyAgICB9IGVsc2UgaWYgKHJjID4gMCkgeworICAgICAgICBkZWJ1ZyhG MTExLCJmdHAgZ2V0IHNraXBwZWQiLGNraXRvYShjYW5jZWxmaWxlKSxjYW5jZWxncm91cCk7Cisg ICAgICAgIGZ0c2NyZWVuKFNDUl9TVCxTVF9TS0lQLChDS19PRkZfVCkwLGNtYXJnKTsKKyAgICB9 IGVsc2UgaWYgKHJjIDwgMCkgeworICAgICAgICBzd2l0Y2ggKGZ0cGNvZGUpIHsKKyAgICAgICAg ICBjYXNlIC00OiAgICAgICAgICAgICAgICAgICAgICAvKiBOZXR3b3JrIGVycm9yICovCisgICAg ICAgICAgY2FzZSAtMjogICAgICAgICAgICAgICAgICAgICAgLyogRmlsZSBlcnJvciAqLworICAg ICAgICAgICAgZnRzY3JlZW4oU0NSX1NULFNUX01TRywoQ0tfT0ZGX1QpMCxja19lcnJzdHIoKSk7 CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIC0zOgorICAgICAgICAgICAgZnRz Y3JlZW4oU0NSX1NULFNUX01TRywoQ0tfT0ZGX1QpMCwKKwkJICAgICAiRmFpbHVyZSB0byBtYWtl IGRhdGEgY29ubmVjdGlvbiIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSAt MToJCQkvKiAoc2hvdWxkIGJlIGNvdmVyZWQgYWJvdmUpICovCisgICAgICAgICAgICBmdHNjcmVl bihTQ1JfU1QsU1RfSU5ULChDS19PRkZfVCkwLCIiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBmdHNjcmVlbihTQ1JfU1QsU1RfTVNHLChDS19P RkZfVCkwLCZmdHBfcmVwbHlfc3RyWzRdKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIFR1ZG8gYmVtICovCisgICAgICAgIGZ0c2NyZWVuKFND Ul9QVCwnWicsKENLX09GRl9UKTAsIiIpOworICAgICAgICBpZiAocmMgPT0gMCkgeworICAgICAg ICAgICAgZnRzY3JlZW4oU0NSX1NULFNUX09LLChDS19PRkZfVCkwLCIiKTsgLyogRm9yIHNjcmVl biAqLworICAgICAgICAgICAgbWFrZXN0cigmcnJmc3BlYyxyZW1vdGUpOyAgICAgLyogRm9yIFdI RVJFIGNvbW1hbmQgKi8KKyAgICAgICAgICAgIG1ha2VzdHIoJnJmc3BlYyxmdWxsbmFtZSk7Cisg ICAgICAgIH0KKyAgICB9CisgICAgaWYgKHJjID4gLTEpIHsKKwlpZiAoZnRwX2RhdGVzKQkJCS8q IElmIEZUUCBEQVRFUyBPTi4uLiAqLworCSAgaWYgKCFwaXBlbmFtZSAmJiAhb3V0MnNjcmVlbikJ LyogYW5kIGl0J3MgYSByZWFsIGZpbGUgKi8KKwkgICAgaWYgKHJjIDwgMSAmJiByYyAhPSAtMykJ LyogYW5kIGl0IHdhc24ndCBza2lwcGVkICovCisJICAgICAgaWYgKGNvbm5lY3RlZCkJCS8qIGFu ZCB3ZSBzdGlsbCBoYXZlIGEgY29ubmVjdGlvbiAqLworCQlpZiAoemNoa2kobG9jYWwpID4gLTEp IHsgLyogYW5kIHRoZSBmaWxlIHdhc24ndCBkaXNjYXJkZWQgKi8KKwkJICAgIGNoa21vZHRpbWUo bG9jYWwscmVtb3RlLDEpOyAvKiBzZXQgbG9jYWwgZmlsZSBkYXRlICovCisJCSAgICBkZWJ1ZyhG MTEwLCJmdHAgZ2V0IHNldCBkYXRlIixsb2NhbCwwKTsKKwkJfQorCWZpbGNudCsrOwkJCS8qIFVz ZWQgYnkgXHYoZmlsZW51bSkgKi8KKyAgICB9CisjaWZkZWYgVExPRworICAgIGlmICh0cmFsb2cp IHsKKyAgICAgICAgaWYgKHJjID4gMCkgeworICAgICAgICAgICAgdGxvZyhGMTAwLCIgcmVjb3Zl cnkgc2tpcHBlZCIsIiIsMCk7CisgICAgICAgIH0gZWxzZSBpZiAocmMgPT0gMCkgeworICAgICAg ICAgICAgdGxvZyhGMTAxLCIgY29tcGxldGUsIHNpemUiLCAiIiwgZnNpemUpOworICAgICAgICB9 IGVsc2UgaWYgKGNhbmNlbGZpbGUpIHsKKyAgICAgICAgICAgIHRsb2coRjEwMCwiIGNhbmNlbGVk IGJ5IHVzZXIiLCIiLDApOworI2lmZGVmIEZUUF9USU1FT1VUCisgICAgICAgIH0gZWxzZSBpZiAo ZnRwX3RpbWVkX291dCkgeworICAgICAgICAgICAgdGxvZyhGMTAwLCIgdGltZWQgb3V0IiwiIiww KTsKKyNlbmRpZgkvKiBGVFBfVElNRU9VVCAqLworICAgICAgICB9IGVsc2UgeworICAgICAgICAg ICAgdGxvZyhGMTEwLCIgZmFpbGVkOiIsZnRwX3JlcGx5X3N0ciwwKTsKKyAgICAgICAgfQorICAg ICAgICBpZiAoIXRsb2dmbXQpCisgICAgICAgICAgZG94bG9nKHdoYXQsbG9jYWwsZnNpemUsZnRw X3R5cCxyYywiIik7CisgICAgfQorI2VuZGlmIC8qIFRMT0cgKi8KKyAgICByZXR1cm4ocmMpOwor fQorCisvKiBwdXRmaWxlKCkgcmV0dXJuczogLTEgb24gZXJyb3IsID4wIGlmIGZpbGUgbm90IHNl bGVjdGVkLCAwIG9uIHN1Y2Nlc3MuICovCisvKiBQb3NpdGl2ZSByZXR1cm4gdmFsdWUgaXMgU2tp cCBSZWFzb24sIFNLUF94eHgsIGZyb20gY2tja2VyLmguICovCisKK3N0YXRpYyBpbnQKK3B1dGZp bGUoY3gsCisgICAgbG9jYWwscmVtb3RlLGZvcmNlLG1vdmluZyxtdnRvLHJudG8sc3J2cm4seF9j bnYseF91c24seGZ0LHBybSxmY3MscmNzLGZsZykKKyAgICBjaGFyICogbG9jYWwsICogcmVtb3Rl LCAqIG12dG8sICpybnRvLCAqc3J2cm47CisgICAgaW50IGN4LCBmb3JjZSwgbW92aW5nLCB4X2Nu diwgeF91c24sIHhmdCwgZmNzLCByY3MsIGZsZywgcHJtOworCisvKiBwdXRmaWxlICovIHsKKwor ICAgIGNoYXIgYXNuYW1lW0NLTUFYUEFUSCsxXTsKKyAgICBjaGFyIGZ1bGxuYW1lW0NLTUFYUEFU SCsxXTsKKyAgICBpbnQgayA9IC0xLCB4ID0gMCwgeSA9IDAsIG8gPSAtMSwgcmMgPSAwLCBuYyA9 IDA7CisgICAgaW50IHhsYXRlID0gMCwgcmVzdGFydCA9IDAsIG10ID0gLTE7CisgICAgY2hhciAq IHMgPSBOVUxMLCAqIGNtZCA9IE5VTEw7CisgICAgVUxPTkcgdDAgPSAwLCB0MSA9IDA7CQkvKiBU aW1lcyBmb3Igc3RhdHMgKi8KKyAgICBpbnQgb2ZjcyA9IDAsIG9yY3MgPSAwOworCisjaWZkZWYg R0ZUSU1FUgorICAgIENLRkxPQVQgc2VjID0gMC4wOworI2Vsc2UKKyAgICBpbnQgc2VjID0gMDsK KyNlbmRpZiAvKiBHRlRJTUVSICovCisgICAgZGVidWcoRjExMSwiZnRwIHB1dGZpbGUgZmxnIixs b2NhbCxmbGcpOworICAgIGRlYnVnKEYxMTAsImZ0cCBwdXRmaWxlIHNydl9yZW5hbSIsc3J2cm4s MCk7CisgICAgZGVidWcoRjEwMSwiZnRwIHB1dGZpbGUgZmNzIiwiIixmY3MpOworICAgIGRlYnVn KEYxMDEsImZ0cCBwdXRmaWxlIHJjcyIsIiIscmNzKTsKKworICAgIG9mY3MgPSBmY3M7ICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIFNhdmUgY2hhcnNldCBhcmdzICovCisgICAgb3JjcyA9IHJj czsKKworICAgIHNlbmRzdGFydCA9IChDS19PRkZfVCkwOworICAgIHJlc3RhcnQgPSBmbGcgJiBQ VVRfUkVTOworICAgIGlmICghcmVtb3RlKQorICAgICAgcmVtb3RlID0gIiI7CisKKyAgICAvKiBG VFAgcHJvdG9jb2wgY29tbWFuZCB0byBzZW5kIHRvIHNlcnZlciAqLworICAgIGNtZCA9IChjeCA9 PSBGVFBfQVBQKSA/ICJBUFBFIiA6ICh4X3VzbiA/ICJTVE9VIiA6ICJTVE9SIik7CisKKyAgICBp ZiAoeF9jbnYgPT0gU0VUX0FVVE8pIHsgICAgICAgICAgICAvKiBOYW1lIGNvbnZlcnNpb24gaXMg YXV0byAqLworICAgICAgICBpZiAoYWxpa2UpIHsgICAgICAgICAgICAgICAgICAgIC8qIElmIHNl cnZlciAmIGNsaWVudCBhcmUgYWxpa2UgKi8KKyAgICAgICAgICAgIG5jID0gMDsgICAgICAgICAg ICAgICAgICAgICAvKiBubyBjb252ZXJzaW9uICovCisgICAgICAgIH0gZWxzZSB7ICAgICAgICAg ICAgICAgICAgICAgICAgLyogSWYgdGhleSBhcmUgZGlmZmVyZW50ICovCisgICAgICAgICAgICBp ZiAoc2VydmVydHlwZSA9PSBTWVNfVU5JWCB8fCBzZXJ2ZXJ0eXBlID09IFNZU19XSU4zMikKKyAg ICAgICAgICAgICAgbmMgPSAtMTsgICAgICAgICAgICAgICAgICAvKiBvbmx5IG1pbmltYWwgY29u dmVyc2lvbnMgbmVlZGVkICovCisgICAgICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAg ICAgLyogb3RoZXJ3aXNlICovCisgICAgICAgICAgICAgIG5jID0gMTsgICAgICAgICAgICAgICAg ICAgLyogZnVsbCBjb252ZXJzaW9uICovCisgICAgICAgIH0KKyAgICB9IGVsc2UgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBOb3QgYXV0byAtIGRvIHdoYXQgdXNlciBzYWlkICovCisg ICAgICBuYyA9IHhfY252OworCisgICAgLyogSWYgVHJhbnNmZXIgTW9kZSBpcyBBdXRvbWF0aWMs IGRldGVybWluZSBmaWxlIHR5cGUgKi8KKyAgICBpZiAoZnRwX3hmZXJtb2RlID09IFhNT0RFX0Eg JiYgZmlsZXBlZWsgJiYgIXBpcGVzZW5kKSB7CisgICAgICAgIGlmIChpc2Rpcihsb2NhbCkpIHsg ICAgICAgICAgICAgLyogSWYgaXQncyBhIGRpcmVjdG9yeSAqLworICAgICAgICAgICAgayA9IEZU X0JJTjsgICAgICAgICAgICAgICAgIC8qIHNraXAgdGhlIGZpbGUgc2NhbiAqLworICAgICAgICB9 IGVsc2UgeworICAgICAgICAgICAgZGVidWcoRjExMCwiRlRQIFBVVCBjYWxsaW5nIHNjYW5maWxl Iixsb2NhbCwwKTsKKyAgICAgICAgICAgIGsgPSBzY2FuZmlsZShsb2NhbCwmbyxuc2NhbmZpbGUp OyAvKiBTY2FuIHRoZSBmaWxlICovCisgICAgICAgIH0KKyAgICAgICAgZGVidWcoRjExMSwiRlRQ IFBVVCBzY2FuZmlsZSIsbG9jYWwsayk7CisgICAgICAgIGlmIChrID4gLTEgJiYgIWZvcmNldHlw ZSkgeworICAgICAgICAgICAgZnRwX3R5cCA9IChrID09IEZUX0JJTikgPyAxIDogMDsKKyAgICAg ICAgICAgIGlmICh4ZnQgPiAtMSAmJiBmdHBfdHlwICE9IHhmdCkgeworICAgICAgICAgICAgICAg IGlmIChmbGcgJiBQVVRfU0lNKQorICAgICAgICAgICAgICAgICAgdGxvZyhGMTEwLCJmdHAgcHV0 IFNLSVAgKFR5cGUpOiIsIGxvY2FsLCAwKTsKKyAgICAgICAgICAgICAgICByZXR1cm4oU0tQX1RZ UCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZnRwX3R5cCA9PSAxICYmIHRlbmV4 KSAgLyogVXNlciBzYWlkIFRFTkVYPyAqLworICAgICAgICAgICAgICBmdHBfdHlwID0gRlRUX1RF TjsKKyAgICAgICAgfQorICAgIH0KKyNpZm5kZWYgTk9DU0VUUworICAgIGZ0cF9jc3ggPSAtMTsg ICAgICAgICAgICAgICAgICAgICAgIC8qIEZvciBmaWxlLXRyYW5zZmVyIGRpc3BsYXkgKi8KKyAg ICBmdHBfY3NsID0gLTE7ICAgICAgICAgICAgICAgICAgICAgICAvKiAuLi4gKi8KKworICAgIGlm IChyY3MgPiAtMSkgeyAgICAgICAgICAgICAgICAgICAgIC8qIC0xIG1lYW5zIG5vIHRyYW5zbGF0 aW9uICovCisgICAgICAgIGlmIChmdHBfdHlwID09IDApIHsgICAgICAgICAgICAgLyogRmlsZSB0 eXBlIGlzICJhc2NpaSI/ICovCisgICAgICAgICAgICBpZiAoZmNzIDwgMCkgeyAgICAgICAgICAg ICAgLyogRmlsZSBjaGFyc2V0IG5vdCBmb3JjZWQ/ICovCisgICAgICAgICAgICAgICAgaWYgKGsg PCAwKSB7ICAgICAgICAgICAgLyogSWYgd2UgZGlkbid0IHNjYW4gKi8KKyAgICAgICAgICAgICAg ICAgICAgZmNzID0gZmNoYXJzZXQ7ICAgICAvKiB1c2UgcHJldmFpbGluZyBGSUxFIENIQVJBQ1RF Ui1TRVQgKi8KKyAgICAgICAgICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAvKiBJZiB3 ZSBkaWQgc2NhbiwgdXNlIHNjYW4gcmVzdWx0ICovCisgICAgICAgICAgICAgICAgICAgIHN3aXRj aCAoaykgeworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRlRfVEVYVDogICAgIC8qIFVua25v d24gdGV4dCAqLworICAgICAgICAgICAgICAgICAgICAgICAgZmNzID0gZmNoYXJzZXQ7CisgICAg ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIEZU XzdCSVQ6ICAgICAvKiA3LWJpdCB0ZXh0ICovCisgICAgICAgICAgICAgICAgICAgICAgICBmY3Mg PSBkY3NldDc7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg ICAgICAgICBjYXNlIEZUXzhCSVQ6ICAgICAvKiA4LWJpdCB0ZXh0ICovCisgICAgICAgICAgICAg ICAgICAgICAgICBmY3MgPSBkY3NldDg7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK KyAgICAgICAgICAgICAgICAgICAgICBjYXNlIEZUX1VURjg6ICAgICAvKiBVVEYtOCAqLworICAg ICAgICAgICAgICAgICAgICAgICAgZmNzID0gRkNfVVRGODsKKyAgICAgICAgICAgICAgICAgICAg ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRlRfVUNTMjogICAgIC8qIFVD Uy0yICovCisgICAgICAgICAgICAgICAgICAgICAgICBmY3MgPSBGQ19VQ1MyOworICAgICAgICAg ICAgICAgICAgICAgICAgaWYgKG8gPiAtMSkgICAgIC8qIElucHV0IGZpbGUgYnl0ZSBvcmRlciAq LworICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlb3JkZXIgPSBvOworICAgICAgICAgICAg ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAg ICAgICAgICAgICAgICAgICAgIHJjcyA9IC0xOworICAgICAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGlmIChm Y3MgPiAtMSAmJiByY3MgPiAtMSkgeyAgICAgICAgIC8qIFNldCB1cCB0cmFuc2xhdGlvbiBmdW5j dGlvbnMgKi8KKyAgICAgICAgZGVidWcoRjExMCwiZnRwIHB1dGZpbGUiLCJpbml0eGxhdGUiLDAp OworICAgICAgICBpbml0eGxhdGUoZmNzLHJjcyk7CisgICAgICAgIGRlYnVnKEYxMTEsImZ0cCBw dXRmaWxlIHJjcyIsZmNzaW5mb1tyY3NdLmtleXdvcmQscmNzKTsKKyAgICAgICAgeGxhdGUgPSAx OworICAgICAgICBmdHBfY3N4ID0gcmNzOworICAgICAgICBmdHBfY3NsID0gZmNzOworICAgIH0K KyNlbmRpZiAvKiBOT0NTRVRTICovCisKKyAgICBiaW5hcnkgPSBmdHBfdHlwOyAgICAgICAgICAg ICAgICAgICAvKiBGb3IgZmlsZS10cmFuc2ZlciBkaXNwbGF5ICovCisgICAgYXNuYW1lWzBdID0g TlVMOworCisgICAgaWYgKHJlY3Vyc2l2ZSkgeyAgICAgICAgICAgICAgICAgICAgLyogSWYgc2Vu ZGluZyByZWN1cnNpdmVseSwgKi8KKyAgICAgICAgaWYgKCFzeW5jZGlyKGxvY2FsLGZsZyAmIFBV VF9TSU0pKSAvKiBzeW5jaHJvbml6ZSBkaXJlY3Rvcmllcy4gKi8KKyAgICAgICAgICByZXR1cm4o LTEpOyAgICAgICAgICAgICAgICAgICAvKiBEb24ndCBQVVQgaWYgaXQgZmFpbHMuICovCisgICAg ICAgIGVsc2UgaWYgKGlzZGlyKGxvY2FsKSkgICAgICAgICAgLyogSXQncyBhIGRpcmVjdG9yeSAq LworICAgICAgICAgIHJldHVybigwKTsgICAgICAgICAgICAgICAgICAgIC8qIERvbid0IHNlbmQg aXQhICovCisgICAgfQorICAgIGlmICgqcmVtb3RlKSB7ICAgICAgICAgICAgICAgICAgICAgIC8q IElmIGFuIGFzLW5hbWUgdGVtcGxhdGUgd2FzIGdpdmVuICovCisjaWZuZGVmIE5PU1BMCisgICAg ICAgIGlmIChjbWRfcXVvdGluZykgeyAgICAgICAgICAgICAgLyogYW5kIENPTU1BTkQgUVVPVElO RyBpcyBPTiAqLworICAgICAgICAgICAgeSA9IENLTUFYUEFUSDsgICAgICAgICAgICAgIC8qIGV2 YWx1YXRlIGl0IGZvciB0aGlzIGZpbGUgKi8KKyAgICAgICAgICAgIHMgPSBhc25hbWU7CisgICAg ICAgICAgICB6enN0cmluZyhyZW1vdGUsJnMsJnkpOworICAgICAgICB9IGVsc2UKKyNlbmRpZiAv KiBOT1NQTCAqLworICAgICAgICAgIGNrc3RybmNweShhc25hbWUscmVtb3RlLENLTUFYUEFUSCk7 ICAgLyogKG9yIHRha2UgaXQgbGl0ZXJhbGx5KSAqLworICAgIH0gZWxzZSB7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogTm8gYXMtbmFtZSAqLworICAgICAgICBuemx0b3Io bG9jYWwsYXNuYW1lLG5jLDAsQ0tNQVhQQVRIKTsgICAgLyogdXNlIGxvY2FsIG5hbWUgc3RyaXAg cGF0aCAqLworICAgICAgICBkZWJ1ZyhGMTEwLCJGVFAgUFVUIG56bHRvciIsYXNuYW1lLDApOwor ICAgIH0KKyAgICAvKiBQcmVsaW1pbmFyeSBtZXNzYWdlcyBhbmQgbG9nIGVudHJpZXMgKi8KKwor ICAgIGZ1bGxuYW1lWzBdID0gTlVMOworICAgIHpmbnFmcChsb2NhbCxDS01BWFBBVEgsZnVsbG5h bWUpOworICAgIGlmICghZnVsbG5hbWVbMF0pIGNrc3RybmNweShmdWxsbmFtZSxsb2NhbCxDS01B WFBBVEgrMSk7CisgICAgZnVsbG5hbWVbQ0tNQVhQQVRIXSA9IE5VTDsKKworICAgIGlmIChkaXNw bGEgJiYgZmRpc3BsYSkgeyAgICAgICAgICAgIC8qIFNjcmVlbiAqLworICAgICAgICBmdHNjcmVl bihTQ1JfRk4sJ0YnLChDS19PRkZfVClwa3RudW0sbG9jYWwpOworICAgICAgICBmdHNjcmVlbihT Q1JfQU4sMCwoQ0tfT0ZGX1QpMCxhc25hbWUpOworICAgICAgICBmdHNjcmVlbihTQ1JfRlMsMCxm c2l6ZSwiIik7CisgICAgfQorI2lmZGVmIERPVVBEQVRFCisgICAgaWYgKGZsZyAmIChQVVRfVVBE fFBVVF9ESUYpKSB7CS8qIERhdGUtY2hlY2tpbmcgbW9kZXMuLi4gKi8KKyAgICAgICAgbXQgPSBj aGttb2R0aW1lKGZ1bGxuYW1lLGFzbmFtZSwwKTsKKyAgICAgICAgZGVidWcoRjExMSwiZnRwIHB1 dGZpbGUgY2hrbW9kdGltZSIsYXNuYW1lLG10KTsKKyAgICAgICAgaWYgKG10ID09IDAgJiYgKChm bGcgJiBQVVRfRElGKSA9PSAwKSkgeyAvKiBMb2NhbCBpcyBvbGRlciAqLworICAgICAgICAgICAg dGxvZyhGMTEwLCJmdHAgcHV0IC91cGRhdGUgU0tJUCAoT2xkZXIgbW9kdGltZSk6ICIsZnVsbG5h bWUsMCk7CisJICAgIC8qIFNraXAgdGhpcyBvbmUgKi8KKyAgICAgICAgICAgIGZ0c2NyZWVuKFND Ul9TVCxTVF9TS0lQLChDS19PRkZfVClTS1BfREFULGZ1bGxuYW1lKTsKKyAgICAgICAgICAgIGZp bGNudCsrOworICAgICAgICAgICAgcmV0dXJuKFNLUF9EQVQpOworICAgICAgICB9IGVsc2UgaWYg KG10ID09IDEpIHsgICAgICAgICAgIC8qIFRpbWVzIGFyZSBlcXVhbCAqLworICAgICAgICAgICAg dGxvZyhGMTEwLCJmdHAgcHV0IC91cGRhdGUgU0tJUCAoRXF1YWwgbW9kdGltZSk6ICIsZnVsbG5h bWUsMCk7CisgICAgICAgICAgICBmdHNjcmVlbihTQ1JfU1QsU1RfU0tJUCwoQ0tfT0ZGX1QpU0tQ X0VRVSxmdWxsbmFtZSk7IC8qIFNraXAgaXQgKi8KKyAgICAgICAgICAgIGZpbGNudCsrOworICAg ICAgICAgICAgcmV0dXJuKFNLUF9EQVQpOworICAgICAgICB9CisJLyogTG9jYWwgZmlsZSBpcyBu ZXdlciAqLworICAgICAgICB0bG9nKEYxMTAsZnRwX3R5cCA/ICJmdHAgcHV0IC91cGRhdGUgQklO QVJZOiIgOgorICAgICAgICAgICAgICJmdHAgcHV0IC91cGRhdGUgVEVYVDoiLCBmdWxsbmFtZSwg MCk7CisgICAgfSBlbHNlIGlmIChmbGcgJiBQVVRfUkVTKSB7CisgICAgICAgIHRsb2coRjExMCxm dHBfdHlwID8gImZ0cCBwdXQgL3JlY292ZXIgQklOQVJZOiIgOgorICAgICAgICAgICAgICJmdHAg cHV0IC9yZWNvdmVyIFRFWFQ6IiwgZnVsbG5hbWUsIDApOworICAgIH0gZWxzZSB7CisgICAgICAg IHRsb2coRjExMCxmdHBfdHlwID8gImZ0cCBwdXQgQklOQVJZOiIgOiAiZnRwIHB1dCBURVhUOiIs IGZ1bGxuYW1lLCAwKTsKKyAgICB9CisjZWxzZQorICAgIHRsb2coRjExMCxmdHBfdHlwID8gImZ0 cCBwdXQgQklOQVJZOiIgOiAiZnRwIHB1dCBURVhUOiIsIGZ1bGxuYW1lLCAwKTsKKyNlbmRpZiAv KiBET1VQREFURSAqLworICAgIHRsb2coRjExMCwiIGFzIixhc25hbWUsMCk7CisKKyNpZm5kZWYg Tk9DU0VUUworICAgIGlmICh4bGF0ZSkgeworICAgICAgICBkZWJ1ZyhGMTExLCJmdHAgcHV0Zmls ZSBmY3MiLGZjc2luZm9bZmNzXS5rZXl3b3JkLGZjcyk7CisgICAgICAgIHRsb2coRjExMCwiIGZp bGUgY2hhcmFjdGVyIHNldDoiLGZjc2luZm9bZmNzXS5rZXl3b3JkLDApOworICAgICAgICB0bG9n KEYxMTAsIiBzZXJ2ZXIgY2hhcmFjdGVyIHNldDoiLGZjc2luZm9bcmNzXS5rZXl3b3JkLDApOwor ICAgIH0gZWxzZSBpZiAoIWZ0cF90eXApIHsKKyAgICAgICAgdGxvZyhGMTEwLCIgY2hhcmFjdGVy IHNldHM6Iiwibm8gY29udmVyc2lvbiIsMCk7CisgICAgICAgIGZjcyA9IG9mY3M7ICAgICAgICAg ICAgICAgICAgICAgLyogQmluYXJ5IGZpbGUgYnV0IHdlIHN0aWxsIG11c3QgKi8KKyAgICAgICAg cmNzID0gb3JjczsgICAgICAgICAgICAgICAgICAgICAvKiB0cmFuc2xhdGUgaXRzIG5hbWUgKi8K KyAgICB9CisjZW5kaWYgLyogTk9DU0VUUyAqLworCisgICAgLyogUFVUIFRIRSBGSUxFICovCisK KyAgICB0MCA9IGdtc3RpbWVyKCk7ICAgICAgICAgICAgICAgICAgICAvKiBTdGFydCB0aW1lICov CisgICAgaWYgKGZsZyAmIFBVVF9TSU0pIHsgICAgICAgICAgICAgICAgLyogcmMgPiAwIGlzIGEg c2tpcCByZWFzb24gY29kZSAqLworICAgICAgICBpZiAoZmxnICYgKFBVVF9VUER8UFVUX0RJRikp IHsJLyogKHNlZSBTS1BfeHh4IGluIGNrY2tlci5oKSAqLworICAgICAgICAgICAgcmMgPSAobXQg PCAwKSA/ICAgICAgICAgICAgIC8qIFVwZGF0ZSBtb2RlLi4uICovCisgICAgICAgICAgICAgIFNL UF9YTlggOiAgICAgICAgICAgICAgICAgLyogUmVtb3RlIGZpbGUgZG9lc24ndCBleGlzdCAqLwor ICAgICAgICAgICAgICAgIFNLUF9YVVA7ICAgICAgICAgICAgICAgIC8qIFJlbW90ZSBmaWxlIGlz IG9sZGVyICovCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByYyA9IFNLUF9TSU07ICAg ICAgICAgICAgICAgLyogIldvdWxkIGJlIHNlbnQiLCBwZXJpb2QuICovCisgICAgICAgIH0KKyAg ICB9IGVsc2UgeworICAgICAgICByYyA9IHNlbmRyZXF1ZXN0KGNtZCxsb2NhbCxhc25hbWUseGxh dGUsZmNzLHJjcyxyZXN0YXJ0KTsKKyAgICB9CisgICAgdDEgPSBnbXN0aW1lcigpOyAgICAgICAg ICAgICAgICAgICAgLyogRW5kIHRpbWUgKi8KKyAgICBmaWxjbnQrKzsgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBGaWxlIG51bWJlciAqLworCisjaWZkZWYgR0ZUSU1FUgorICAgIHNlYyA9 IChDS0ZMT0FUKSgoQ0tGTE9BVCkodDEgLSB0MCkgLyAxMDAwLjApOyAvKiBTdGF0cyAqLworICAg IGZweGZzZWNzID0gc2VjOyAgICAgICAgICAgICAgICAgICAgIC8qIChmb3IgZG94bG9nKCkpICov CisjZWxzZQorICAgIHNlYyA9ICh0MSAtIHQwKSAvIDEwMDA7CisgICAgeGZzZWNzID0gKGludClz ZWM7CisjZW5kaWYgLyogR0ZUSU1FUiAqLworCisgICAgZGVidWcoRjExMSwiZnRwIHNlbmRyZXF1 ZXN0IHJjIixsb2NhbCxyYyk7CisKKyAgICBpZiAoY2FuY2VsZmlsZSB8fCBjYW5jZWxncm91cCkg eworICAgICAgICBkZWJ1ZyhGMTExLCJmdHAgcHV0IGNhbmNlbGVkIixja2l0b2EoY2FuY2VsZmls ZSksY2FuY2VsZ3JvdXApOworICAgICAgICBmdHNjcmVlbihTQ1JfU1QsU1RfSU5ULChDS19PRkZf VCkwLCIiKTsKKyAgICB9IGVsc2UgaWYgKHJjID4gMCkgeworICAgICAgICBkZWJ1ZyhGMTAxLCJm dHAgcHV0IHNraXBwZWQiLGxvY2FsLHJjKTsKKyAgICAgICAgZnRzY3JlZW4oU0NSX1NULFNUX1NL SVAsKENLX09GRl9UKXJjLGZ1bGxuYW1lKTsKKyAgICB9IGVsc2UgaWYgKHJjIDwgMCkgeworICAg ICAgICBkZWJ1ZyhGMTExLCJmdHAgcHV0IGVycm9yIixsb2NhbCxmdHBjb2RlKTsKKyAgICAgICAg ZnRzY3JlZW4oU0NSX1NULFNUX01TRywoQ0tfT0ZGX1QpMCwmZnRwX3JlcGx5X3N0cls0XSk7Cisg ICAgfSBlbHNlIHsKKyAgICAgICAgZGVidWcoRjExMSwiZnRwIHB1dCBub3QgY2FuY2VsZWQiLGNr aXRvYShkaXNwbGEpLGZkaXNwbGEpOworICAgICAgICBmdHNjcmVlbihTQ1JfUFQsJ1onLChDS19P RkZfVCkwLCIiKTsKKyAgICAgICAgZGVidWcoRjExMSwiZnRwIHB1dCBTVF9PSyIsbG9jYWwscmMp OworICAgICAgICBmdHNjcmVlbihTQ1JfU1QsU1RfT0ssKENLX09GRl9UKTAsIiIpOworICAgICAg ICBkZWJ1ZyhGMTEwLCJmdHAgcHV0IG9sZCBzZnNwZWMiLHNmc3BlYywwKTsKKyAgICAgICAgbWFr ZXN0cigmc2ZzcGVjLGZ1bGxuYW1lKTsgICAgICAvKiBGb3IgV0hFUkUgY29tbWFuZCAqLworICAg ICAgICBkZWJ1ZyhGMTEwLCJmdHAgcHV0IG5ldyBzZnNwZWMiLHNmc3BlYywwKTsKKyAgICAgICAg ZGVidWcoRjExMCwiZnRwIHB1dCBvbGQgc3Jmc3BlYyIsc3Jmc3BlYywwKTsKKyAgICAgICAgbWFr ZXN0cigmc3Jmc3BlYyxhc25hbWUpOworICAgICAgICBkZWJ1ZyhGMTEwLCJmdHAgcHV0IG5ldyBz cmZzcGVjIixzcmZzcGVjLDApOworICAgIH0KKworICAgIC8qIEZpbmFsIGxvZyBlbnRyaWVzICov CisKKyNpZmRlZiBUTE9HCisgICAgaWYgKHRyYWxvZykgeworICAgICAgICBpZiAocmMgPiAwKSB7 CisgICAgICAgICAgICBpZiAocmMgPT0gU0tQX1hOWCkKKyAgICAgICAgICAgICAgdGxvZyhGMTAw LCIgL3NpbXVsYXRlOiBXT1VMRCBCRSBTRU5UOiIsIm5vIHJlbW90ZSBmaWxlIiwwKTsKKyAgICAg ICAgICAgIGVsc2UgaWYgKHJjID09IFNLUF9YVVApCisgICAgICAgICAgICAgIHRsb2coRjEwMCwi IC9zaW11bGF0ZTogV09VTEQgQkUgU0VOVDoiLCJyZW1vdGUgZmlsZSBvbGRlciIsMCk7CisgICAg ICAgICAgICBlbHNlIGlmIChyYyA9PSBTS1BfU0lNKQorICAgICAgICAgICAgICB0bG9nKEYxMDAs IiAvc2ltdWxhdGU6IFdPVUxEIEJFIFNFTlQiLCIiLDApOworICAgICAgICAgICAgZWxzZQorICAg ICAgICAgICAgICB0bG9nKEYxMTAsIiBza2lwcGVkOiIsZ3NrcmVhc29uKHJjKSwwKTsKKyAgICAg ICAgfSBlbHNlIGlmIChyYyA9PSAwKSB7CisgICAgICAgICAgICB0bG9nKEYxMDEsIiBjb21wbGV0 ZSwgc2l6ZSIsICIiLCBmc2l6ZSk7CisgICAgICAgIH0gZWxzZSBpZiAoY2FuY2VsZmlsZSkgewor ICAgICAgICAgICAgdGxvZyhGMTAwLCIgY2FuY2VsZWQgYnkgdXNlciIsIiIsMCk7CisgICAgICAg IH0gZWxzZSB7CisgICAgICAgICAgICB0bG9nKEYxMTAsIiBmYWlsZWQ6IixmdHBfcmVwbHlfc3Ry LDApOworICAgICAgICB9CisgICAgICAgIGlmICghdGxvZ2ZtdCkKKyAgICAgICAgICBkb3hsb2co d2hhdCxsb2NhbCxmc2l6ZSxmdHBfdHlwLHJjLCIiKTsKKyAgICB9CisjZW5kaWYgLyogVExPRyAq LworCisgICAgaWYgKHJjIDwgMCkgICAgICAgICAgICAgICAgICAgICAgICAgLyogUFVUIGRpZCBu b3Qgc3VjY2VlZCAqLworICAgICAgcmV0dXJuKC0xKTsgICAgICAgICAgICAgICAgICAgICAgIC8q IHNvIGRvbmUuICovCisKKyAgICBpZiAoZmxnICYgUFVUX1NJTSkgICAgICAgICAgICAgICAgICAv KiBTaW11bGF0aW5nLCBza2lwIHRoZSByZXN0LiAqLworICAgICAgcmV0dXJuKFNLUF9TSU0pOwor CisjaWZkZWYgVU5JWAorICAgIC8qIFNldCBwZXJtaXNzaW9ucyB0b28/ICovCisKKyAgICBpZiAo cHJtKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDaGFuZ2UgcGVybWlzc2lvbnM/ICov CisgICAgICAgIHMgPSB6Z3Blcm0obG9jYWwpOyAgICAgICAgICAgICAgLyogR2V0IHBlcm1zIG9m IGxvY2FsIGZpbGUgKi8KKyAgICAgICAgaWYgKCFzKSBzID0gIiI7CisgICAgICAgIHggPSBzdHJs ZW4ocyk7CisgICAgICAgIGlmICh4ID4gMykgcyArPSAoeCAtIDMpOworICAgICAgICBpZiAocmRp Z2l0cyhzKSkgeworICAgICAgICAgICAgY2ttYWttc2coZnRwY21kYnVmLEZUUF9CVUZTSVoscywi ICIsYXNuYW1lLE5VTEwpOworICAgICAgICAgICAgeCA9CisgICAgICAgICAgICAgIGZ0cGNtZCgi U0lURSBDSE1PRCIsZnRwY21kYnVmLGZjcyxyY3MsZnRwX3ZibSkgPT0gUkVQTFlfQ09NUExFVEU7 CisgICAgICAgICAgICB0bG9nKEYxMTAsIHggPyAiIGNobW9kIiA6ICIgY2htb2QgZmFpbGVkIiwK KyAgICAgICAgICAgICAgICAgcywKKyAgICAgICAgICAgICAgICAgMAorICAgICAgICAgICAgICAg ICApOworICAgICAgICAgICAgaWYgKCF4KQorICAgICAgICAgICAgICByZXR1cm4oLTEpOworICAg ICAgICB9CisgICAgfQorI2VuZGlmIC8qIFVOSVggKi8KKworICAgIC8qIERpc3Bvc2l0aW9uIG9m IHNvdXJjZSBmaWxlICovCisKKyAgICBpZiAobW92aW5nKSB7CisgICAgICAgIHggPSB6ZGVsZXQo bG9jYWwpOworICAgICAgICB0bG9nKEYxMTAsICh4ID4gLTEpID8KKyAgICAgICAgICAgICAiIGRl bGV0ZWQiIDogIiBmYWlsZWQgdG8gZGVsZXRlIiwKKyAgICAgICAgICAgICBsb2NhbCwKKyAgICAg ICAgICAgICAwCisgICAgICAgICAgICAgKTsKKyAgICAgICAgaWYgKHggPCAwKQorICAgICAgICAg IHJldHVybigtMSk7CisgICAgfSBlbHNlIGlmIChtdnRvKSB7CisgICAgICAgIHggPSB6cmVuYW1l KGxvY2FsLG12dG8pOworICAgICAgICB0bG9nKEYxMTAsICh4ID4gLTEpID8KKyAgICAgICAgICAg ICAiIG1vdmVkIHNvdXJjZSB0byIgOiAiIGZhaWxlZCB0byBtb3ZlIHNvdXJjZSB0byIsCisgICAg ICAgICAgICAgbXZ0bywKKyAgICAgICAgICAgICAwCisgICAgICAgICAgICAgKTsKKyAgICAgICAg aWYgKHggPCAwKQorICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAgIC8qIGZ0c2NyZWVuKFND Ul9TVCxTVF9NU0csKENLX09GRl9UKTAsbXZ0byk7ICovCisKKyAgICB9IGVsc2UgaWYgKHJudG8p IHsKKyAgICAgICAgY2hhciAqIHMgPSBybnRvOworI2lmbmRlZiBOT1NQTAorICAgICAgICBpbnQg eTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBhc3MgaXQgdGhydSB0aGUgZXZhbHVhdG9y ICovCisgICAgICAgIGV4dGVybiBpbnQgY21kX3F1b3Rpbmc7ICAgICAgICAgLyogZm9yIFx2KGZp bGVuYW1lKSAqLworICAgICAgICBpZiAoY21kX3F1b3RpbmcpIHsgICAgICAgICAgICAgIC8qIEJ1 dCBvbmx5IGlmIGNtZF9xdW90aW5nIGlzIG9uICovCisgICAgICAgICAgICB5ID0gQ0tNQVhQQVRI OworICAgICAgICAgICAgcyA9IChjaGFyICopYXNuYW1lOworICAgICAgICAgICAgenpzdHJpbmco cm50bywmcywmeSk7CisgICAgICAgICAgICBzID0gKGNoYXIgKilhc25hbWU7CisgICAgICAgIH0K KyNlbmRpZiAvKiBOT1NQTCAqLworICAgICAgICBpZiAocykgaWYgKCpzKSB7CisgICAgICAgICAg ICBpbnQgeDsKKyAgICAgICAgICAgIHggPSB6cmVuYW1lKGxvY2FsLHMpOworICAgICAgICAgICAg dGxvZyhGMTEwLCAoeCA+IC0xKSA/CisgICAgICAgICAgICAgICAgICIgcmVuYW1lZCBzb3VyY2Ug ZmlsZSB0byIgOgorICAgICAgICAgICAgICAgICAiIGZhaWxlZCB0byByZW5hbWUgc291cmNlIGZp bGUgdG8iLAorICAgICAgICAgICAgICAgICBzLAorICAgICAgICAgICAgICAgICAwCisgICAgICAg ICAgICAgICAgICk7CisgICAgICAgICAgICBpZiAoeCA8IDApCisgICAgICAgICAgICAgIHJldHVy bigtMSk7CisgICAgICAgICAgICAvKiBmdHNjcmVlbihTQ1JfU1QsU1RfTVNHLChDS19PRkZfVCkw LHMpOyAqLworICAgICAgICB9CisgICAgfQorCisgICAgLyogRGlzcG9zaXRpb24gb2YgZGVzdGlu YXRpb24gZmlsZSAqLworCisgICAgaWYgKHNydnJuKSB7ICAgICAgICAgICAgICAgICAgICAgICAg LyogL1NFUlZFUi1SRU5BTUU6ICovCisgICAgICAgIGNoYXIgKiBzID0gc3J2cm47CisjaWZuZGVm IE5PU1BMCisgICAgICAgIGludCB5OyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUGFzcyBp dCB0aHJ1IHRoZSBldmFsdWF0b3IgKi8KKyAgICAgICAgZXh0ZXJuIGludCBjbWRfcXVvdGluZzsg LyogZm9yIFx2KGZpbGVuYW1lKSAqLworICAgICAgICBkZWJ1ZyhGMTExLCJmdHAgcHV0ZmlsZSBz cnZybiIscywxKTsKKworICAgICAgICBpZiAoY21kX3F1b3RpbmcpIHsgICAgICAgICAgICAgIC8q IEJ1dCBvbmx5IGlmIGNtZF9xdW90aW5nIGlzIG9uICovCisgICAgICAgICAgICB5ID0gQ0tNQVhQ QVRIOworICAgICAgICAgICAgcyA9IChjaGFyICopZnVsbG5hbWU7ICAgICAgIC8qIFdlIGNhbiBy ZWN5Y2xlIHRoaXMgYnVmZmVyIG5vdyAqLworICAgICAgICAgICAgenpzdHJpbmcoc3J2cm4sJnMs JnkpOworICAgICAgICAgICAgcyA9IChjaGFyICopZnVsbG5hbWU7CisgICAgICAgIH0KKyNlbmRp ZiAvKiBOT1NQTCAqLworICAgICAgICBkZWJ1ZyhGMTExLCJmdHAgcHV0ZmlsZSBzcnZybiIscywy KTsKKyAgICAgICAgaWYgKHMpIGlmICgqcykgeworICAgICAgICAgICAgaW50IHg7CisgICAgICAg ICAgICB4ID0gZnRwX3JlbmFtZShhc25hbWUscyk7CisgICAgICAgICAgICBkZWJ1ZyhGMTExLCJm dHAgcHV0ZmlsZSBmdHBfcmVuYW1lIixhc25hbWUseCk7CisgICAgICAgICAgICB0bG9nKEYxMTAs ICh4ID4gMCkgPworICAgICAgICAgICAgICAgICAiIHJlbmFtZWQgZGVzdGluYXRpb24gZmlsZSB0 byIgOgorICAgICAgICAgICAgICAgICAiIGZhaWxlZCB0byByZW5hbWUgZGVzdGluYXRpb24gZmls ZSB0byIsCisgICAgICAgICAgICAgICAgIHMsCisgICAgICAgICAgICAgICAgIDAKKyAgICAgICAg ICAgICAgICAgKTsKKyAgICAgICAgICAgIGlmICh4IDwgMSkKKyAgICAgICAgICAgICAgcmV0dXJu KC0xKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4oMCk7Cit9CisKKy8qIHh4b3V0IG11 c3Qgb25seSBiZSB1c2VkIGZvciBBU0NJSSB0cmFuc2ZlcnMgKi8KK3N0YXRpYyBpbnQKKyNpZmRl ZiBDS19BTlNJQworeHhvdXQoY2hhciBjKQorI2Vsc2UKK3h4b3V0KGMpIGNoYXIgYzsKKyNlbmRp ZiAvKiBDS19BTlNJQyAqLworeworI2lmbmRlZiBPUzIKKyNpZm5kZWYgVk1TCisjaWZuZGVmIE1B QworI2lmbmRlZiBPU0sKKyAgICAvKiBGb3IgVW5peCwgREcsIFN0cmF0dXMsIEFtaWdhLCBHZW1k b3MsIG90aGVyICovCisgICAgaWYgKGMgPT0gJ1wwMTInKSB7CisJaWYgKHp6b3V0KGRvdXQsKENI QVIpJ1wwMTUnKSA8IDApCisJICByZXR1cm4oLTEpOworCWZ0cHNuZC5ieXRlcysrOworICAgIH0K KyNlbHNlIC8qIE9TSyAqLworICAgIGlmIChjID09ICdcMDE1JykgeworCWMgPSAnXDAxMic7CisJ aWYgKHp6b3V0KGRvdXQsKENIQVIpJ1wwMTUnKSA8IDApCisJICByZXR1cm4oLTEpOworCWZ0cHNu ZC5ieXRlcysrOworICAgIH0KKyNlbmRpZiAvKiBPU0sgKi8KKyNlbHNlIC8qIE1BQyAqLworICAg IGlmIChjID09ICdcMDE1JykgeworCWMgPSAnXDAxMic7CisJaWYgKHp6b3V0KGRvdXQsKENIQVIp J1wwMTUnKSA8IDApCisJICByZXR1cm4oLTEpOworCWZ0cHNuZC5ieXRlcysrOworICAgIH0KKyNl bmRpZiAvKiBNQUMgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyAgICBp ZiAoenpvdXQoZG91dCwoQ0hBUiljKSA8IDApCisgICAgICByZXR1cm4oLTEpOworICAgIGZ0cHNu ZC5ieXRlcysrOworICAgIHJldHVybigwKTsKK30KKworc3RhdGljIGludAorI2lmZGVmIENLX0FO U0lDCitzY3Jub3V0KGNoYXIgYykKKyNlbHNlCitzY3Jub3V0KGMpIGNoYXIgYzsKKyNlbmRpZiAv KiBDS19BTlNJQyAqLworeworICAgIHJldHVybihwdXRjaGFyKGMpKTsKK30KKworc3RhdGljIGlu dAorI2lmZGVmIENLX0FOU0lDCitwaXBlb3V0KGNoYXIgYykKKyNlbHNlCitwaXBlb3V0KGMpIGNo YXIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworICAgIHJldHVybih6bWNob3V0KGMpKTsK K30KKworc3RhdGljIGludAoraXNwYXRoc2VwKGMpIGludCBjOyB7CisgICAgc3dpdGNoIChzZXJ2 ZXJ0eXBlKSB7CisgICAgICBjYXNlIFNZU19WTVM6CisgICAgICBjYXNlIFNZU19UT1BTMTA6Cisg ICAgICBjYXNlIFNZU19UT1BTMjA6CisgICAgICAgIHJldHVybigoKGMgPT0gJ10nKSB8fCAoYyA9 PSAnPicpIHx8IChjID09ICc6JykpID8gMSA6IDApOworICAgICAgY2FzZSBTWVNfT1MyOgorICAg ICAgY2FzZSBTWVNfV0lOMzI6CisgICAgICBjYXNlIFNZU19ET1M6CisgICAgICAgIHJldHVybigo KGMgPT0gJ1xcJykgfHwgKGMgPT0gJy8nKSB8fCAoYyA9PSAnOicpKSA/IDEgOiAwKTsKKyAgICAg IGNhc2UgU1lTX1ZPUzoKKyAgICAgICAgcmV0dXJuKChjID09ICc+JykgPyAxIDogMCk7CisgICAg ICBkZWZhdWx0OgorICAgICAgICByZXR1cm4oKGMgPT0gJy8nKSA/IDEgOiAwKTsKKyAgICB9Cit9 CisKK3N0YXRpYyBpbnQKK2lzY2FuY2VsZWQoKSB7CisjaWZkZWYgQ0tfQ1VSU0VTCisgICAgZXh0 ZXJuIGludCBja19yZXBhaW50KCk7CisjZW5kaWYgLyogQ0tfQ1VSU0VTICovCisgICAgaW50IHgs IHJjID0gMDsKKyAgICBjaGFyIGMgPSAwOworICAgIGlmIChjYW5jZWxmaWxlKQorICAgICAgcmV0 dXJuKDEpOworICAgIHggPSBjb25jaGsoKTsgICAgICAgICAgICAgICAgICAgICAgIC8qIEFueSBj aGFycyB3YWl0aW5nIGF0IGNvbnNvbGU/ICovCisgICAgaWYgKHgtLSA+IDApIHsgICAgICAgICAg ICAgICAgICAgICAgLyogWWVzLi4uICAqLworICAgICAgICBjID0gY29uaW5jKDUpOyAgICAgICAg ICAgICAgICAgIC8qIEdldCBvbmUgKi8KKyAgICAgICAgc3dpdGNoIChjKSB7CisgICAgICAgICAg Y2FzZSAwMzI6ICAgICAgICAgICAgICAgICAgICAgLyogQ3RybC1YIG9yIFggKi8KKyAgICAgICAg ICBjYXNlICd6JzoKKyAgICAgICAgICBjYXNlICdaJzogY2FuY2VsZ3JvdXArKzsgICAgICAvKiBm YWxsIHRocnUgb24gcHVycG9zZSAqLworICAgICAgICAgIGNhc2UgMDMwOiAgICAgICAgICAgICAg ICAgICAgIC8qIEN0cmwtWiBvciBaICovCisgICAgICAgICAgY2FzZSAneCc6CisgICAgICAgICAg Y2FzZSAnWCc6IGNhbmNlbGZpbGUrKzsgcmMrKzsgYnJlYWs7CisjaWZkZWYgQ0tfQ1VSU0VTCisg ICAgICAgICAgY2FzZSAnTCc6CisgICAgICAgICAgY2FzZSAnbCc6CisgICAgICAgICAgY2FzZSAw MTQ6ICAgICAgICAgICAgICAgICAgICAgLyogQ3RybC1MIG9yIEwgb3IgQ3RybC1XICovCisgICAg ICAgICAgY2FzZSAwMjc6CisgICAgICAgICAgICBja19yZXBhaW50KCk7ICAgICAgICAgICAgICAg LyogUmVmcmVzaCBzY3JlZW4gKi8KKyNlbmRpZiAvKiBDS19DVVJTRVMgKi8KKyAgICAgICAgfQor ICAgIH0KKyAgICB3aGlsZSAoeC0tID4gMCkgICAgICAgICAgICAgICAgICAgICAvKiBTb2FrIHVw IGFueSByZXN0ICovCisgICAgICBjID0gY29uaW5jKDEpOworICAgIHJldHVybihyYyk7Cit9CisK KyNpZmRlZiBGVFBfVElNRU9VVAorLyogZmMgPSAwIGZvciByZWFkOyAxIGZvciB3cml0ZSAqLwor c3RhdGljIGludAorY2hlY2tfZGF0YV9jb25uZWN0aW9uKGZkLGZjKSBpbnQgZmQsIGZjOyB7Cisg ICAgaW50IHg7CisgICAgc3RydWN0IHRpbWV2YWwgdHY7CisgICAgZmRfc2V0IGluLCBvdXQsIGVy cjsKKworICAgIGlmIChmdHBfdGltZW91dCA8IDFMKQorICAgICAgcmV0dXJuKDApOworCisgICAg RkRfWkVSTygmaW4pOworICAgIEZEX1pFUk8oJm91dCk7CisgICAgRkRfWkVSTygmZXJyKTsKKyAg ICBGRF9TRVQoZmQsZmMgPyAmb3V0IDogJmluKTsKKyAgICB0di50dl9zZWMgPSBmdHBfdGltZW91 dDsJCS8qIFRpbWUgbGltaXQgKi8KKyAgICB0di50dl91c2VjID0gMEw7CisKKyNpZmRlZiBJTlRT RUxFQ1QKKyAgICB4ID0gc2VsZWN0KEZEX1NFVFNJWkUsKGludCAqKSZpbiwoaW50ICopJm91dCwo aW50ICopJmVyciwmdHYpOworI2Vsc2UKKyAgICB4ID0gc2VsZWN0KEZEX1NFVFNJWkUsJmluLCZv dXQsJmVyciwmdHYpOworI2VuZGlmIC8qIElOVFNFTEVDVCAqLworCisgICAgaWYgKHggPT0gMCkg eworI2lmZGVmIEVXT1VMREJMT0NLCisJZXJybm8gPSBFV09VTERCTE9DSzsKKyNlbHNlCisjaWZk ZWYgRUFHQUlOCisJZXJybm8gPSBFQUdBSU47CisjZWxzZQorCWVycm5vID0gMTE7CisjZW5kaWYJ LyogRUFHQUlOICovCisjZW5kaWYJLyogRVdPVUxEQkxPQ0sgKi8KKwlkZWJ1ZyhGMTAwLCJmdHAg Y2hlY2tfZGF0YV9jb25uZWN0aW9uIFRJTU9VVCIsIiIsMCk7CisJcmV0dXJuKC0zKTsKKyAgICB9 CisgICAgcmV0dXJuKDApOworfQorI2VuZGlmCS8qIEZUUF9USU1FT1VUICovCisKKy8qIHp6c2Vu ZCAtIHVzZWQgYnkgYnVmZmVyZWQgb3V0cHV0IG1hY3Jvcy4gKi8KKworc3RhdGljIGludAorI2lm ZGVmIENLX0FOU0lDCit6enNlbmQoaW50IGZkLCBDSEFSIGMpCisjZWxzZQorenpzZW5kKGZkLGMp IGludCBmZDsgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgaW50IHJjOwor CisgICAgZGVidWcoRjEwMSwienpzZW5kIHVjYnVmc2l6IiwiIix1Y2J1ZnNpeik7CisgICAgZGVi dWcoRjEwMSwienpzZW5kIG5vdXQiLCIiLG5vdXQpOworICAgIGRlYnVnKEYxMTEsInp6c2VuZCIs InNlY3VyZT8iLGZ0cGlzc2VjdXJlKCkpOworCisgICAgaWYgKGlzY2FuY2VsZWQoKSkgICAgICAg ICAgICAgICAgICAgLyogQ2hlY2sgZm9yIGNhbmNlbGxhdGlvbiAqLworICAgICAgcmV0dXJuKC05 KTsKKworI2lmZGVmIEZUUF9USU1FT1VUICAgIAorICAgIGZ0cF90aW1lZF9vdXQgPSAwOworICAg IGlmIChjaGVja19kYXRhX2Nvbm5lY3Rpb24oZmQsMSkgPCAwKSB7CisJZnRwX3RpbWVkX291dCA9 IDE7CisJcmV0dXJuKC0zKTsKKyAgICB9CisjZW5kaWYJLyogRlRQX1RJTUVPVVQgKi8KKworICAg IHJjID0gKCFmdHBpc3NlY3VyZSgpKSA/CisgICAgICBzZW5kKGZkLCAoU0VOREFSRzJUWVBFKXVj YnVmLCBub3V0LCAwKSA6CisgICAgICAgIHNlY3VyZV9wdXRidWYoZmQsIHVjYnVmLCBub3V0KTsK KyAgICB1Y2J1Zltub3V0XSA9IE5VTDsKKyAgICBub3V0ID0gMDsKKyAgICB1Y2J1Zltub3V0Kytd ID0gYzsKKyAgICBzcGFja2V0cysrOworICAgIHBrdG51bSsrOworICAgIGlmIChyYyA+IC0xICYm IGZkaXNwbGEgIT0gWFlGRF9CKSB7CisgICAgICAgIHNwa3RsID0gbm91dDsKKyAgICAgICAgZnRz Y3JlZW4oU0NSX1BULCdEJywoQ0tfT0ZGX1Qpc3BhY2tldHMsTlVMTCk7CisgICAgfQorICAgIHJl dHVybihyYyk7Cit9CisKKy8qIGMgbSBkIGwgaSBuIHAgdSB0ICAtLSAgQ29tbWFuZC1saW5lIFBV VCAqLworCitpbnQKK2NtZGxpbnB1dChzdGF5KSBpbnQgc3RheTsgeworICAgIGludCB4LCByYyA9 IDAsIGRvbmUgPSAwLCBnb29kID0gMCwgc3RhdHVzID0gMDsKKyAgICBVTE9ORyB0MCwgdDE7ICAg ICAgICAgICAgICAgICAgICAgICAvKiBUaW1lcyBmb3Igc3RhdHMgKi8KKyNpZmRlZiBHRlRJTUVS CisgICAgQ0tGTE9BVCBzZWM7CisjZWxzZQorICAgIGludCBzZWMgPSAwOworI2VuZGlmIC8qIEdG VElNRVIgKi8KKworICAgIGlmIChxdWlldCkgeyAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1x IHJlYWxseSBtZWFucyBxdWlldCAqLworICAgICAgICBkaXNwbGEgPSAwOworICAgICAgICBmZGlz cGxhID0gMDsKKyAgICB9IGVsc2UgeworICAgICAgICBkaXNwbGEgPSAxOworICAgICAgICBmZGlz cGxhID0gWFlGRF9COworICAgIH0KKyAgICB0ZXN0aW5nID0gMDsKKyAgICBvdXQyc2NyZWVuID0g MDsKKyAgICBkcHlhY3RpdmUgPSAwOworICAgIHdoYXQgPSBXX0ZUUHxXX1NFTkQ7CisKKyNpZm5k ZWYgTk9TUEwKKyAgICBjbWRfcXVvdGluZyA9IDA7CisjZW5kaWYgLyogTk9TUEwgKi8KKyAgICBz bmRzcmMgPSBuZmlsczsKKworICAgIHQwID0gZ21zdGltZXIoKTsgICAgICAgICAgICAgICAgICAg IC8qIFJlY29yZCBzdGFydGluZyB0aW1lICovCisKKyAgICB3aGlsZSAoIWRvbmUgJiYgIWNhbmNl bGdyb3VwKSB7ICAgICAvKiBMb29wIGZvciBhbGwgZmlsZXMgKi8KKworICAgICAgICBjYW5jZWxm aWxlID0gMDsKKyAgICAgICAgeCA9IGduZmlsZSgpOyAgICAgICAgICAgICAgICAgICAvKiBHZXQg bmV4dCBmaWxlIGZyb20gbGlzdChzKSAqLworICAgICAgICBpZiAoeCA9PSAwKSAgICAgICAgICAg ICAgICAgICAgIC8qIChzZWUgZ25maWxlKCkgY29tbWVudHMuLi4pICovCisgICAgICAgICAgeCA9 IGduZmVycm9yOworCisgICAgICAgIHN3aXRjaCAoeCkgeworICAgICAgICAgIGNhc2UgMTogICAg ICAgICAgICAgICAgICAgICAgIC8qIEZpbGUgdG8gc2VuZCAqLworICAgICAgICAgICAgcmMgPSBw dXRmaWxlKEZUUF9QVVQsICAgICAgIC8qIEZ1bmN0aW9uIChQVVQsIEFQUEVORCkgKi8KKyAgICAg ICAgICAgICAgICAgICAgICAgICBmaWxuYW0sICAgICAgICAvKiBMb2NhbCBmaWxlIHRvIHNlbmQg Ki8KKyAgICAgICAgICAgICAgICAgICAgICAgICBmaWxuYW0sICAgICAgICAvKiBSZW1vdGUgbmFt ZSBmb3IgZmlsZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmNldHlwZSwgICAgIC8q IFRleHQvYmluYXJ5IG1vZGUgZm9yY2VkICovCisgICAgICAgICAgICAgICAgICAgICAgICAgMCwg ICAgICAgICAgICAgLyogTm90IG1vdmluZyAqLworICAgICAgICAgICAgICAgICAgICAgICAgIE5V TEwsICAgICAgICAgIC8qIE5vIG1vdmUtdG8gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICBO VUxMLCAgICAgICAgICAvKiBObyByZW5hbWUtdG8gKi8KKyAgICAgICAgICAgICAgICAgICAgICAg ICBOVUxMLCAgICAgICAgICAvKiBObyBzZXJ2ZXItcmVuYW1lICovCisgICAgICAgICAgICAgICAg ICAgICAgICAgZnRwX2NudiwgICAgICAgLyogRmlsZW5hbWUgY29udmVyc2lvbiAqLworICAgICAg ICAgICAgICAgICAgICAgICAgIDAsICAgICAgICAgICAgIC8qIFVuaXF1ZS1zZXJ2ZXItbmFtZXMg Ki8KKyAgICAgICAgICAgICAgICAgICAgICAgICAtMSwgICAgICAgICAgICAvKiBBbGwgZmlsZSB0 eXBlcyAqLworICAgICAgICAgICAgICAgICAgICAgICAgIDAsICAgICAgICAgICAgIC8qIE5vIHBl cm1pc3Npb25zICovCisgICAgICAgICAgICAgICAgICAgICAgICAgLTEsICAgICAgICAgICAgLyog Tm8gY2hhcmFjdGVyIHNldHMgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAtMSwgICAgICAg ICAgICAvKiBObyBjaGFyYWN0ZXIgc2V0cyAqLworICAgICAgICAgICAgICAgICAgICAgICAgIDAg ICAgICAgICAgICAgIC8qIE5vIHVwZGF0ZSBvciByZXN0YXJ0ICovCisgICAgICAgICAgICAgICAg ICAgICAgICAgKTsKKyAgICAgICAgICAgIGlmIChyYyA+IC0xKSB7CisgICAgICAgICAgICAgICAg Z29vZCsrOworICAgICAgICAgICAgICAgIHN0YXR1cyA9IDE7CisgICAgICAgICAgICB9CisgICAg ICAgICAgICBpZiAoY2FuY2VsZmlsZSkgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAgICAg ICAgICAgICAgIC8qIE9yIGJyZWFrPyAqLworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg KHJjIDwgMCkgeworICAgICAgICAgICAgICAgIGZ0cF9mYWkrKzsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIGNvbnRpbnVlOyAgICAgICAgICAgICAgICAgICAvKiBPciBicmVhaz8gKi8KKwor ICAgICAgICAgIGNhc2UgMDogICAgICAgICAgICAgICAgICAgICAgIC8qIE5vIG1vcmUgZmlsZXMs IGRvbmUgKi8KKyAgICAgICAgICAgIGRvbmUrKzsKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisg ICAgICAgICAgY2FzZSAtMjoKKyAgICAgICAgICBjYXNlIC0xOgorICAgICAgICAgICAgcHJpbnRm KCI/JXM6IGZpbGUgbm90IGZvdW5kIC0gXCIlc1wiXG4iLAorICAgICAgICAgICAgICAgICAgIHB1 dGVycm9yID8gIkZhdGFsIiA6ICJXYXJuaW5nIiwKKyAgICAgICAgICAgICAgICAgICBmaWxuYW0K KyAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgY29udGludWU7ICAgICAgICAgICAg ICAgICAgIC8qIG9yIGJyZWFrPyAqLworICAgICAgICAgIGNhc2UgLTM6CisgICAgICAgICAgICBw cmludGYoIj9XYXJuaW5nIGFjY2VzcyBkZW5pZWQgLSBcIiVzXCJcbiIsIGZpbG5hbSk7CisgICAg ICAgICAgICBjb250aW51ZTsgICAgICAgICAgICAgICAgICAgLyogb3IgYnJlYWs/ICovCisgICAg ICAgICAgY2FzZSAtNToKKyAgICAgICAgICAgIHByaW50ZigiP1RvbyBtYW55IGZpbGVzIG1hdGNo XG4iKTsKKyAgICAgICAgICAgIGRvbmUrKzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg IGNhc2UgLTY6CisgICAgICAgICAgICBpZiAoZ29vZCA8IDEpCisgICAgICAgICAgICAgIHByaW50 ZigiP05vIGZpbGVzIHNlbGVjdGVkXG4iKTsKKyAgICAgICAgICAgIGRvbmUrKzsKKyAgICAgICAg ICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBwcmludGYoIj9nZXRu ZXh0ZmlsZSgpIC0gdW5rbm93biBmYWlsdXJlXG4iKTsKKyAgICAgICAgICAgIGRvbmUrKzsKKyAg ICAgICAgfQorICAgIH0KKyAgICBpZiAoc3RhdHVzID4gMCkgeworICAgICAgICBpZiAoY2FuY2Vs Z3JvdXApCisgICAgICAgICAgc3RhdHVzID0gMDsKKyAgICAgICAgZWxzZSBpZiAoY2FuY2VsZmls ZSAmJiBnb29kIDwgMSkKKyAgICAgICAgICBzdGF0dXMgPSAwOworICAgIH0KKyAgICBzdWNjZXNz ID0gc3RhdHVzOworICAgIHggPSBzdWNjZXNzOworICAgIGlmICh4ID4gLTEpIHsKKyAgICAgICAg bGFzdHhmZXIgPSBXX0ZUUHxXX1NFTkQ7CisgICAgICAgIHhmZXJzdGF0ID0gc3VjY2VzczsKKyAg ICB9CisgICAgdDEgPSBnbXN0aW1lcigpOyAgICAgICAgICAgICAgICAgICAgLyogRW5kIHRpbWUg Ki8KKyNpZmRlZiBHRlRJTUVSCisgICAgc2VjID0gKENLRkxPQVQpKChDS0ZMT0FUKSh0MSAtIHQw KSAvIDEwMDAuMCk7IC8qIFN0YXRzICovCisgICAgaWYgKCFzZWMpIHNlYyA9IDAuMDAxOworICAg IGZwdHNlY3MgPSBzZWM7CisjZWxzZQorICAgIHNlYyA9ICh0MSAtIHQwKSAvIDEwMDA7CisgICAg aWYgKCFzZWMpIHNlYyA9IDE7CisjZW5kaWYgLyogR0ZUSU1FUiAqLworICAgIHRmY3BzID0gKGxv bmcpICh0ZmMgLyBzZWMpOworICAgIHRzZWNzID0gKGludClzZWM7CisgICAgbGFzdHhmZXIgPSBX X0ZUUHxXX1NFTkQ7CisgICAgeGZlcnN0YXQgPSBzdWNjZXNzOworICAgIGlmIChkcHlhY3RpdmUp CisgICAgICBmdHNjcmVlbihzdGF0dXMgPiAwID8gU0NSX1RDIDogU0NSX0NXLCAwLCAoQ0tfT0ZG X1QpMCwgIiIpOworICAgIGlmICghc3RheSkKKyAgICAgIGRvZXhpdChzdWNjZXNzID8gR09PRF9F WElUIDogQkFEX0VYSVQsIC0xKTsKKyAgICByZXR1cm4oc3VjY2Vzcyk7Cit9CisKKworLyogIGQg byBmIHQgcCBwIHUgdCAgLS0gIFBhcnNlIGFuZCBleGVjdXRlIFBVVCwgTVBVVCwgYW5kIEFQUEVO RCAgKi8KKworaW50CisjaWZkZWYgQ0tfQU5TSUMKK2RvZnRwcHV0KGludCBjeCwgaW50IHdobykg ICAgICAgICAgICAgICAvKiB3aG8gPT0gMSBmb3IgZnRwLCAwIGZvciBrZXJtaXQgKi8KKyNlbHNl Citkb2Z0cHB1dChjeCx3aG8pIGludCBjeCwgd2hvOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7 CisgICAgc3RydWN0IEZEQiBzZiwgZmwsIHN3LCBjbTsKKyAgICBpbnQgbiwgcmMsIGNvbmZpcm1l ZCA9IDAsIHdpbGQgPSAwLCBnZXR2YWwgPSAwLCBtcHV0ID0gMCwgZG9uZSA9IDA7CisgICAgaW50 IHhfY252ID0gMCwgeF91c24gPSAwLCB4X3BybSA9IDAsIHB1dGZsYWdzID0gMCwgc3RhdHVzID0g MCwgZ29vZCA9IDA7CisgICAgY2hhciAqIHMsICogczI7CisKKyAgICBpbnQgeF9jc2wsIHhfY3Ny ID0gLTE7ICAgICAgICAgICAgICAvKiBMb2NhbCBhbmQgcmVtb3RlIGNoYXJzZXRzICovCisgICAg aW50IHhfeGxhID0gMDsKKyAgICBpbnQgeF9yZWN1cnNlID0gMDsKKyAgICBjaGFyIGMsICogcDsg ICAgICAgICAgICAgICAgICAgICAgICAvKiBXb3JrZXJzICovCisjaWZkZWYgUFVUQVJSQVkKKyAg ICBpbnQgcmFuZ2VbMl07ICAgICAgICAgICAgICAgICAgICAgICAvKiBBcnJheSByYW5nZSAqLwor ICAgIGNoYXIgKiogYXAgPSBOVUxMOyAgICAgICAgICAgICAgICAgIC8qIEFycmF5IHBvaW50ZXIg Ki8KKyAgICBpbnQgYXJyYXl4ID0gLTE7ICAgICAgICAgICAgICAgICAgICAvKiBBcnJheSBpbmRl eCAqLworI2VuZGlmIC8qIFBVVEFSUkFZICovCisgICAgVUxPTkcgdDAgPSAwTCwgdDEgPSAwTDsg ICAgICAgICAgICAgLyogVGltZXMgZm9yIHN0YXRzICovCisjaWZkZWYgR0ZUSU1FUgorICAgIENL RkxPQVQgc2VjOworI2Vsc2UKKyAgICBpbnQgc2VjID0gMDsKKyNlbmRpZiAvKiBHRlRJTUVSICov CisKKyAgICBzdHJ1Y3Qgc3RyaW5naW50IHB2W1NORF9NQVgrMV07ICAgIC8qIFRlbXBvcmFyeSBh cnJheSBmb3Igc3dpdGNoIHZhbHVlcyAqLworICAgIHN1Y2Nlc3MgPSAwOyAgICAgICAgICAgICAg ICAgICAgICAgIC8qIEFzc3VtZSBmYWlsdXJlICovCisgICAgZm9yY2V0eXBlID0gMDsgICAgICAg ICAgICAgICAgICAgICAgLyogTm8gL1RFWFQgb3IgL0JJTkFSWSBnaXZlbiB5ZXQgKi8KKyAgICBv dXQyc2NyZWVuID0gMDsgICAgICAgICAgICAgICAgICAgICAvKiBOb3Qgb3V0cHV0dGluZyBmaWxl IHRvIHNjcmVlbiAqLworICAgIHB1dGZsYWdzID0gMDsgICAgICAgICAgICAgICAgICAgICAgIC8q IFBVVCBvcHRpb25zICovCisgICAgeF9jbnYgPSBmdHBfY252OyAgICAgICAgICAgICAgICAgICAg LyogRmlsZW5hbWUgY29udmVyc2lvbiAqLworICAgIHhfdXNuID0gZnRwX3VzbjsgICAgICAgICAg ICAgICAgICAgIC8qIFVuaXF1ZSBzZXJ2ZXIgbmFtZXMgKi8KKyAgICB4X3BybSA9IGZ0cF9wcm07 ICAgICAgICAgICAgICAgICAgICAvKiBQZXJtaXNzaW9ucyAqLworICAgIGlmICh4X3BybSA9PSBT RVRfQVVUTykgICAgICAgICAgICAgIC8qIFBlcm1pc3Npb25zIEFVVE8gKi8KKyAgICAgIHhfcHJt ID0gYWxpa2U7CisKKyNpZm5kZWYgTk9DU0VUUworICAgIHhfY3NyID0gZnRwX2NzcjsgICAgICAg ICAgICAgICAgICAgIC8qIEluaGVyaXQgZ2xvYmFsIHNlcnZlciBjaGFyc2V0ICovCisgICAgeF9j c2wgPSBmdHBfY3NsOworICAgIGlmICh4X2NzbCA8IDApCisgICAgICB4X2NzbCA9IGZjaGFyc2V0 OworICAgIHhfeGxhID0gZnRwX3hsYTsKKyNlbmRpZiAvKiBOT0NTRVRTICovCisKKyAgICBtYWtl c3RyKCZmaWxlZmlsZSxOVUxMKTsgICAgICAgICAgICAvKiBObyBmaWxlbmFtZSBsaXN0IGZpbGUg eWV0LiAqLworICAgIG1ha2VzdHIoJnNydl9yZW5hbSxOVUxMKTsJCS8qIENsZWFyIC9TRVJWRVIt UkVOQU1FOiAqLworICAgIG1ha2VzdHIoJnNuZF9yZW5hbWUsTlVMTCk7CQkvKiAgUFVUIC9SRU5B TUUgKi8KKyAgICBtYWtlc3RyKCZzbmRfbW92ZSxOVUxMKTsJCS8qICBQVVQgL01PVkUgKi8KKyAg ICBwdXRwYXRoWzBdID0gTlVMOyAgICAgICAgICAgICAgICAgICAvKiBJbml0aWFsaXplIGZvciBz eW5jZGlyKCkuICovCisgICAgcHV0ZXJyb3IgPSBmdHBfZXJyOyAgICAgICAgICAgICAgICAgLyog SW5oZXJpdCBnbG9iYWwgZXJyb3IgYWN0aW9uLiAqLworICAgIHdoYXQgPSBXX1NFTkR8V19GVFA7 ICAgICAgICAgICAgICAgIC8qIFdoYXQgd2UncmUgZG9pbmcgKHNlbmRpbmcgdy9GVFApICovCisg ICAgYXNuYW1idWZbMF0gPSBOVUw7ICAgICAgICAgICAgICAgICAgLyogQ2xlYXIgYXMtbmFtZSBi dWZmZXIgKi8KKworICAgIGlmIChnX2Z0cF90eXAgPiAtMSkgeyAgICAgICAgICAgICAgIC8qIFJl c3RvcmUgVFlQRSBpZiBzYXZlZCAqLworICAgICAgICBmdHBfdHlwID0gZ19mdHBfdHlwOworICAg ICAgICAvKiBnX2Z0cF90eXAgPSAtMTsgKi8KKyAgICB9CisgICAgZm9yIChpID0gMDsgaSA8PSBT TkRfTUFYOyBpKyspIHsgICAgLyogSW5pdGlhbGl6ZSBzd2l0Y2ggdmFsdWVzICovCisgICAgICAg IHB2W2ldLnN2YWwgPSBOVUxMOyAgICAgICAgICAgICAgLyogdG8gbnVsbCBwb2ludGVycyAqLwor ICAgICAgICBwdltpXS5pdmFsID0gLTE7ICAgICAgICAgICAgICAgIC8qIGFuZCAtMSBpbnQgdmFs dWVzICovCisgICAgICAgIHB2W2ldLnd2YWwgPSAoQ0tfT0ZGX1QpLTE7CS8qIGFuZCAtMSB3aWRl IHZhbHVlcyAqLworICAgIH0KKyAgICBpZiAod2hvID09IDApIHsgICAgICAgICAgICAgICAgICAg ICAvKiBDYWxsZWQgd2l0aCB1bnByZWZpeGVkIGNvbW1hbmQgKi8KKyAgICAgICAgc3dpdGNoIChj eCkgeworICAgICAgICAgIGNhc2UgWFhSU0VOOiAgcHZbU05EX1JFU10uaXZhbCA9IDE7IGJyZWFr OworICAgICAgICAgIGNhc2UgWFhDU0VOOiAgcHZbU05EX0NNRF0uaXZhbCA9IDE7IGJyZWFrOwor ICAgICAgICAgIGNhc2UgWFhNT1ZFOiAgcHZbU05EX0RFTF0uaXZhbCA9IDE7IGJyZWFrOworICAg ICAgICAgIGNhc2UgWFhNTU9WRTogcHZbU05EX0RFTF0uaXZhbCA9IDE7IC8qIGZhbGwgdGhydSAq LworICAgICAgICAgIGNhc2UgWFhNU0U6ICAgbXB1dCsrOyBicmVhazsKKyAgICAgICAgfQorICAg IH0gZWxzZSB7CisJaWYgKGN4ID09IEZUUF9SRVApCisJICBwdltTTkRfUkVTXS5pdmFsID0gMTsK KyAgICAgICAgaWYgKGN4ID09IEZUUF9NUFUpCisgICAgICAgICAgbXB1dCsrOworICAgIH0KKyAg ICBjbWZkYmkoJnN3LCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGaXJzdCBGREIgLSBjb21t YW5kIHN3aXRjaGVzICovCisgICAgICAgICAgIF9DTUtFWSwgICAgICAgICAgICAgICAgICAgICAg LyogZmNvZGUgKi8KKyAgICAgICAgICAgIkZpbGVuYW1lLCBvciBzd2l0Y2giLCAgICAgICAvKiBo bHBtc2cgKi8KKyAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkZWZh dWx0ICovCisgICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwg c3RyaW5nIGRhdGEgKi8KKyAgICAgICAgICAgbnB1dHN3aSwgICAgICAgICAgICAgICAgICAgICAv KiBhZGR0bCBudW1lcmljIGRhdGEgMTogdGJsIHNpemUgKi8KKyAgICAgICAgICAgNCwgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMjogNCA9IGNtc3dpICov CisgICAgICAgICAgIHh4c3RyaW5nLCAgICAgICAgICAgICAgICAgICAgLyogUHJvY2Vzc2luZyBm dW5jdGlvbiAqLworICAgICAgICAgICBwdXRzd2ksICAgICAgICAgICAgICAgICAgICAgIC8qIEtl eXdvcmQgdGFibGUgKi8KKyAgICAgICAgICAgJnNmICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBQb2ludGVyIHRvIG5leHQgRkRCICovCisgICAgICAgICAgICk7CisgICAgY21mZGJpKCZmbCwg ICAgICAgICAgICAgICAgICAgICAgICAgLyogM3JkIEZEQiAtIGxvY2FsIGZpbGVzcGVjICovCisg ICAgICAgICAgIF9DTUZMRCwgICAgICAgICAgICAgICAgICAgICAgLyogZmNvZGUgKi8KKyAgICAg ICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBobHBtc2cgKi8KKyAgICAgICAg ICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkZWZhdWx0ICovCisgICAgICAgICAg ICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KKyAg ICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRh dGEgMSAqLworICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRs IG51bWVyaWMgZGF0YSAyICovCisgICAgICAgICAgIHh4c3RyaW5nLAorICAgICAgICAgICBOVUxM LAorICAgICAgICAgICAmY20KKyAgICAgICAgICAgKTsKKyAgICBjbWZkYmkoJmNtLCAgICAgICAg ICAgICAgICAgICAgICAgICAvKiA0dGggRkRCIC0gQ29uZmlybWF0aW9uICovCisgICAgICAgICAg IF9DTUNGTSwgICAgICAgICAgICAgICAgICAgICAgLyogZmNvZGUgKi8KKyAgICAgICAgICAgIiIs ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBobHBtc2cgKi8KKyAgICAgICAgICAgIiIsICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBkZWZhdWx0ICovCisgICAgICAgICAgICIiLCAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KKyAgICAgICAgICAg MCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMSAqLwor ICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVyaWMg ZGF0YSAyICovCisgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgIE5VTEwsCisgICAgICAgICAg IE5VTEwKKyAgICAgICAgICAgKTsKKworICBhZ2FpbjoKKyAgICBjbWZkYmkoJnNmLCAgICAgICAg ICAgICAgICAgICAgICAgICAvKiAybmQgRkRCIC0gZmlsZSB0byBzZW5kICovCisgICAgICAgICAg IF9DTUlGSSwgICAgICAgICAgICAgICAgICAgICAgLyogZmNvZGUgKi8KKyAgICAgICAgICAgIiIs ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBobHBtc2cgKi8KKyAgICAgICAgICAgIiIsICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBkZWZhdWx0ICovCisgICAgICAgICAgICIiLCAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KKyAgICAgICAgICAg LyogMCA9IHBhcnNlIGZpbGVzLCAxID0gcGFyc2UgZmlsZXMgb3IgZGlycywgMiA9IHNraXAgc3lt bGlua3MgKi8KKyAgICAgICAgICAgbm9saW5rcyB8IHhfcmVjdXJzZSwgICAgICAgICAvKiBhZGR0 bCBudW1lcmljIGRhdGEgMSAqLworICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIGRpcmZsZyAwIG1lYW5zICJub3QgZGlycyBvbmx5IiAqLworICAgICAgICAgICB4eHN0 cmluZywKKyAgICAgICAgICAgTlVMTCwKKyNpZmRlZiBDT01NRU5UCisgICAgICAgICAgIG1wdXQg PyAmY20gOiAmZmwKKyNlbHNlCisJICAgJmZsCisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAg ICAgICApOworCisgICAgd2hpbGUgKDEpIHsgICAgICAgICAgICAgICAgICAgICAgICAgLyogUGFy c2UgemVybyBvciBtb3JlIHN3aXRjaGVzICovCisgICAgICAgIHggPSBjbWZkYigmc3cpOyAgICAg ICAgICAgICAgICAgLyogUGFyc2Ugc29tZXRoaW5nICovCisgICAgICAgIGRlYnVnKEYxMDEsImZ0 cCBwdXQgY21mZGIgQSIsIiIseCk7CisgICAgICAgIGRlYnVnKEYxMDEsImZ0cCBwdXQgZmNvZGUg QSIsIiIsY21yZXN1bHQuZmNvZGUpOworICAgICAgICBpZiAoeCA8IDApICAgICAgICAgICAgICAg ICAgICAgIC8qIEVycm9yICovCisgICAgICAgICAgZ290byB4cHV0eDsgICAgICAgICAgICAgICAg ICAgLyogb3IgcmVwYXJzZSBuZWVkZWQgKi8KKyAgICAgICAgaWYgKGNtcmVzdWx0LmZjb2RlICE9 IF9DTUtFWSkgICAvKiBCcmVhayBvdXQgb2YgbG9vcCBpZiBub3QgYSBzd2l0Y2ggKi8KKyAgICAg ICAgICBicmVhazsKKyAgICAgICAgYyA9IGNtZ2JyaygpOyAgICAgICAgICAgICAgICAgICAvKiBH ZXQgYnJlYWsgY2hhcmFjdGVyICovCisgICAgICAgIGdldHZhbCA9IChjID09ICc6JyB8fCBjID09 ICc9Jyk7IC8qIHRvIHNlZSBob3cgdGhleSBlbmRlZCB0aGUgc3dpdGNoICovCisgICAgICAgIGlm IChnZXR2YWwgJiYgIShjbXJlc3VsdC5rZmxhZ3MgJiBDTV9BUkcpKSB7CisgICAgICAgICAgICBw cmludGYoIj9UaGlzIHN3aXRjaCBkb2VzIG5vdCB0YWtlIGFyZ3VtZW50c1xuIik7CisgICAgICAg ICAgICB4ID0gLTk7CisgICAgICAgICAgICBnb3RvIHhwdXR4OworICAgICAgICB9CisgICAgICAg IGlmICghZ2V0dmFsICYmIChjbWdrd2ZsZ3MoKSAmIENNX0FSRykpIHsKKyAgICAgICAgICAgIHBy aW50ZigiP1RoaXMgc3dpdGNoIHJlcXVpcmVzIGFuIGFyZ3VtZW50XG4iKTsKKyAgICAgICAgICAg IHggPSAtOTsKKyAgICAgICAgICAgIGdvdG8geHB1dHg7CisgICAgICAgIH0KKyAgICAgICAgbiA9 IGNtcmVzdWx0Lm5yZXN1bHQ7ICAgICAgICAgICAvKiBOdW1lcmljIHJlc3VsdCA9IHN3aXRjaCB2 YWx1ZSAqLworICAgICAgICBkZWJ1ZyhGMTAxLCJmdHAgcHV0IHN3aXRjaCIsIiIsbik7CisKKyAg ICAgICAgc3dpdGNoIChuKSB7ICAgICAgICAgICAgICAgICAgICAvKiBQcm9jZXNzIHRoZSBzd2l0 Y2ggKi8KKyAgICAgICAgICBjYXNlIFNORF9BRlQ6ICAgICAgICAgICAgICAgICAvKiBTZW5kIC9B RlRFUjpkYXRlLXRpbWUgKi8KKyAgICAgICAgICBjYXNlIFNORF9CRUY6ICAgICAgICAgICAgICAg ICAvKiBTZW5kIC9CRUZPUkU6ZGF0ZS10aW1lICovCisgICAgICAgICAgY2FzZSBTTkRfTkFGOiAg ICAgICAgICAgICAgICAgLyogU2VuZCAvTk9ULUFGVEVSOmRhdGUtdGltZSAqLworICAgICAgICAg IGNhc2UgU05EX05CRTogICAgICAgICAgICAgICAgIC8qIFNlbmQgL05PVC1CRUZPUkU6ZGF0ZS10 aW1lICovCisgICAgICAgICAgICBpZiAoIWdldHZhbCkgYnJlYWs7CisgICAgICAgICAgICBpZiAo KHggPSBjbWRhdGUoIkZpbGUgZGF0ZS10aW1lIiwiIiwmcywwLHh4c3RyaW5nKSkgPCAwKSB7Cisg ICAgICAgICAgICAgICAgaWYgKHggPT0gLTMpIHsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRm KCI/RGF0ZS10aW1lIHJlcXVpcmVkXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgeCA9IC05Owor ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBnb3RvIHhwdXR4OworICAgICAgICAg ICAgfQorICAgICAgICAgICAgcHZbbl0uaXZhbCA9IDE7CisgICAgICAgICAgICBtYWtlc3RyKCYo cHZbbl0uc3ZhbCkscyk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgU05E X0FTTjogICAgICAgICAgICAgICAgIC8qIC9BUy1OQU1FOiAqLworICAgICAgICAgICAgZGVidWco RjEwMSwiZnRwIHB1dCAvYXMtbmFtZSBnZXR2YWwiLCIiLGdldHZhbCk7CisgICAgICAgICAgICBp ZiAoIWdldHZhbCkgYnJlYWs7CisgICAgICAgICAgICBpZiAoKHggPSBjbWZsZCgiTmFtZSB0byBz ZW5kIHVuZGVyIiwiIiwmcyxOVUxMKSkgPCAwKSB7CisgICAgICAgICAgICAgICAgaWYgKHggPT0g LTMpIHsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/bmFtZSByZXF1aXJlZFxuIik7Cisg ICAgICAgICAgICAgICAgICAgIHggPSAtOTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgICAgZ290byB4cHV0eDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1ha2VzdHIoJihw dltuXS5zdmFsKSxicnN0cmlwKHMpKTsKKyAgICAgICAgICAgIGRlYnVnKEYxMTAsImZ0cCBwdXQg L2FzLW5hbWUgMSIscHZbbl0uc3ZhbCwwKTsKKyAgICAgICAgICAgIGlmIChwdltuXS5zdmFsKSBw dltuXS5pdmFsID0gMTsKKyAgICAgICAgICAgIGJyZWFrOworCisjaWZkZWYgUFVUQVJSQVkKKyAg ICAgICAgICBjYXNlIFNORF9BUlI6ICAgICAgICAgICAgICAgICAvKiAvQVJSQVkgKi8KKyAgICAg ICAgICAgIGlmICghZ2V0dmFsKSBicmVhazsKKyAgICAgICAgICAgIGFwID0gTlVMTDsKKyAgICAg ICAgICAgIGlmICgoeCA9IGNtZmxkKCJBcnJheSBuYW1lIChhIHNpbmdsZSBsZXR0ZXIgd2lsbCBk bykiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAmcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICkpIDwgMCkgeworICAgICAgICAgICAgICAgIGlmICh4ID09IC0zKQor CQkgIGJyZWFrOworCQllbHNlCisJCSAgcmV0dXJuKHgpOworICAgICAgICAgICAgfQorICAgICAg ICAgICAgaWYgKCh4ID0gYXJyYXlib3VuZHMocywmKHJhbmdlWzBdKSwmKHJhbmdlWzFdKSkpIDwg MCkgeworICAgICAgICAgICAgICAgIHByaW50ZigiP0JhZCBhcnJheTogJXNcbiIscyk7CisgICAg ICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgh KGFwID0gYV9wdHJbeF0pKSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCI/Tm8gc3VjaCBhcnJh eTogJXNcbiIscyk7CisgICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgICAgIH0K KyAgICAgICAgICAgIHB2W25dLml2YWwgPSAxOworICAgICAgICAgICAgcHZbU05EX0NNRF0uaXZh bCA9IDA7ICAgICAgIC8qIFVuZG8gYW55IGNvbmZsaWN0aW5nIG9uZXMuLi4gKi8KKyAgICAgICAg ICAgIHB2W1NORF9SRVNdLml2YWwgPSAwOworICAgICAgICAgICAgcHZbU05EX0ZJTF0uaXZhbCA9 IDA7CisgICAgICAgICAgICBhcnJheXggPSB4OworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYg LyogUFVUQVJSQVkgKi8KKworICAgICAgICAgIGNhc2UgU05EX0JJTjogICAgICAgICAgICAgICAg IC8qIC9CSU5BUlkgKi8KKyAgICAgICAgICBjYXNlIFNORF9UWFQ6ICAgICAgICAgICAgICAgICAv KiAvVEVYVCBvciAvQVNDSUkgKi8KKyAgICAgICAgICBjYXNlIFNORF9URU46ICAgICAgICAgICAg ICAgICAvKiAvVEVORVggKi8KKyAgICAgICAgICAgIHB2W1NORF9CSU5dLml2YWwgPSAwOworICAg ICAgICAgICAgcHZbU05EX1RYVF0uaXZhbCA9IDA7CisgICAgICAgICAgICBwdltTTkRfVEVOXS5p dmFsID0gMDsKKyAgICAgICAgICAgIHB2W25dLml2YWwgPSAxOworICAgICAgICAgICAgYnJlYWs7 CisKKyNpZmRlZiBQVVRQSVBFCisgICAgICAgICAgY2FzZSBTTkRfQ01EOiAgICAgICAgICAgICAg ICAgLyogVGhlc2UgdGFrZSBubyBhcmdzICovCisgICAgICAgICAgICBpZiAobm9wdXNoKSB7Cisg ICAgICAgICAgICAgICAgcHJpbnRmKCI/U29ycnksIHN5c3RlbSBjb21tYW5kIGFjY2VzcyBpcyBk aXNhYmxlZFxuIik7CisgICAgICAgICAgICAgICAgeCA9IC05OworICAgICAgICAgICAgICAgIGdv dG8geHB1dHg7CisgICAgICAgICAgICB9CisjaWZkZWYgUElQRVNFTkQKKyAgICAgICAgICAgIGVs c2UgaWYgKHNuZGZpbHRlcikgeworICAgICAgICAgICAgICAgIHByaW50ZigiP1NvcnJ5LCBubyBQ VVQgL0NPTU1BTkQgd2hlbiBTRU5EIEZJTFRFUiBzZWxlY3RlZFxuIik7CisgICAgICAgICAgICAg ICAgeCA9IC05OworICAgICAgICAgICAgICAgIGdvdG8geHB1dHg7CisgICAgICAgICAgICB9Cisj ZW5kaWYgLyogUElQRVNFTkQgKi8KKyAgICAgICAgICAgIHN3LmhscG1zZyA9ICJDb21tYW5kLCBv ciBzd2l0Y2giOyAvKiBDaGFuZ2UgaGVscCBtZXNzYWdlICovCisgICAgICAgICAgICBwdltuXS5p dmFsID0gMTsgICAgICAgICAgICAgLyogSnVzdCBzZXQgdGhlIGZsYWcgKi8KKyAgICAgICAgICAg IHB2W1NORF9BUlJdLml2YWwgPSAwOworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogUFVU UElQRSAqLworCisjaWZkZWYgQ0tTWU1MSU5LCisgICAgICAgICAgY2FzZSBTTkRfTE5LOgorICAg ICAgICAgICAgbm9saW5rcyA9IDA7CisgICAgICAgICAgICBnb3RvIGFnYWluOwkJCS8qIEJlY2F1 c2UgQ01JRkkgcGFyYW1zIGNoYW5nZWQuLi4gKi8KKyAgICAgICAgICBjYXNlIFNORF9OTEs6Cisg ICAgICAgICAgICBub2xpbmtzID0gMjsKKyAgICAgICAgICAgIGdvdG8gYWdhaW47CisjZW5kaWYg LyogQ0tTWU1MSU5LICovCisKKyNpZmRlZiBGVFBfUkVTVEFSVAorICAgICAgICAgIGNhc2UgU05E X1JFUzogICAgICAgICAgICAgICAgIC8qIC9SRUNPVkVSIChyZXNlbmQpICovCisgICAgICAgICAg ICBwdltTTkRfQVJSXS5pdmFsID0gMDsgICAgICAgLyogZmFsbCB0aHJ1IG9uIHB1cnBvc2UuLi4g Ki8KKyNlbmRpZiAvKiBGVFBfUkVTVEFSVCAqLworCisgICAgICAgICAgY2FzZSBTTkRfTk9COgor ICAgICAgICAgIGNhc2UgU05EX0RFTDogICAgICAgICAgICAgICAgIC8qIC9ERUxFVEUgKi8KKyAg ICAgICAgICBjYXNlIFNORF9TSEg6ICAgICAgICAgICAgICAgICAvKiAvUVVJRVQgKi8KKyAgICAg ICAgICBjYXNlIFNORF9VUEQ6ICAgICAgICAgICAgICAgICAvKiAvVVBEQVRFICovCisgICAgICAg ICAgY2FzZSBTTkRfU0lNOiAgICAgICAgICAgICAgICAgLyogL1VQREFURSAqLworICAgICAgICAg IGNhc2UgU05EX1VTTjogICAgICAgICAgICAgICAgIC8qIC9VTklRVUUgKi8KKyAgICAgICAgICAg IHB2W25dLml2YWwgPSAxOyAgICAgICAgICAgICAvKiBKdXN0IHNldCB0aGUgZmxhZyAqLworICAg ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIFNORF9SRUM6ICAgICAgICAgICAgICAg ICAvKiAvUkVDVVJTSVZFICovCisgICAgICAgICAgICByZWN1cnNpdmUgPSAyOyAgICAgICAgICAg ICAgLyogTXVzdCBiZSBzZXQgYmVmb3JlIGNtaWZpKCkgKi8KKyAgICAgICAgICAgIHhfcmVjdXJz ZSA9IDE7CisgICAgICAgICAgICBnb3RvIGFnYWluOwkJCS8qIEJlY2F1c2UgQ01JRkkgcGFyYW1z IGNoYW5nZWQuLi4gKi8KKyAgICAgICAgICAgIGJyZWFrOworCisjaWZkZWYgVU5JWE9ST1NLCisg ICAgICAgICAgY2FzZSBTTkRfRE9UOiAgICAgICAgICAgICAgICAgLyogL0RPVEZJTEVTICovCisg ICAgICAgICAgICBtYXRjaGRvdCA9IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBj YXNlIFNORF9OT0Q6ICAgICAgICAgICAgICAgICAvKiAvTk9ET1RGSUxFUyAqLworICAgICAgICAg ICAgbWF0Y2hkb3QgPSAwOworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogVU5JWE9ST1NL ICovCisKKyAgICAgICAgICBjYXNlIFNORF9FUlI6ICAgICAgICAgICAgICAgICAvKiAvRVJST1It QUNUSU9OICovCisgICAgICAgICAgICBpZiAoKHggPSBjbWtleShxb3JwLDIsIiIsIiIseHhzdHJp bmcpKSA8IDApCisgICAgICAgICAgICAgIGdvdG8geHB1dHg7CisgICAgICAgICAgICBwdltuXS5p dmFsID0geDsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBTTkRfRVhDOiAg ICAgICAgICAgICAgICAgLyogRXhjbHVkZXMgKi8KKyAgICAgICAgICAgIGlmICghZ2V0dmFsKSBi cmVhazsKKyAgICAgICAgICAgIGlmICgoeCA9IGNtZmxkKCJQYXR0ZXJuIiwiIiwmcyx4eHN0cmlu ZykpIDwgMCkgeworICAgICAgICAgICAgICAgIGlmICh4ID09IC0zKSB7CisgICAgICAgICAgICAg ICAgICAgIHByaW50ZigiP1BhdHRlcm4gcmVxdWlyZWRcbiIpOworICAgICAgICAgICAgICAgICAg ICB4ID0gLTk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGdvdG8geHB1dHg7 CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocykgaWYgKCEqcykgcyA9IE5VTEw7Cisg ICAgICAgICAgICBtYWtlc3RyKCYocHZbbl0uc3ZhbCkscyk7CisgICAgICAgICAgICBpZiAocHZb bl0uc3ZhbCkKKyAgICAgICAgICAgICAgcHZbbl0uaXZhbCA9IDE7CisgICAgICAgICAgICBicmVh azsKKworICAgICAgICAgIGNhc2UgU05EX1BSTTogICAgICAgICAgICAgICAgIC8qIC9QRVJNSVNT SU9OUyAqLworICAgICAgICAgICAgaWYgKCFnZXR2YWwpCisgICAgICAgICAgICAgIHggPSAxOwor ICAgICAgICAgICAgZWxzZSBpZiAoKHggPSBjbWtleShvbm9mZiwyLCIiLCJvbiIseHhzdHJpbmcp KSA8IDApCisgICAgICAgICAgICAgIGdvdG8geHB1dHg7CisgICAgICAgICAgICBwdltTTkRfUFJN XS5pdmFsID0geDsKKyAgICAgICAgICAgIGJyZWFrOworCisjaWZkZWYgUElQRVNFTkQKKyAgICAg ICAgICBjYXNlIFNORF9GTFQ6ICAgICAgICAgICAgICAgICAvKiAvRklMVEVSICovCisgICAgICAg ICAgICBkZWJ1ZyhGMTAxLCJmdHAgcHV0IC9maWx0ZXIgZ2V0dmFsIiwiIixnZXR2YWwpOworICAg ICAgICAgICAgaWYgKCFnZXR2YWwpIGJyZWFrOworICAgICAgICAgICAgaWYgKCh4ID0gY21mbGQo IkZpbHRlciBwcm9ncmFtIHRvIHNlbmQgdGhyb3VnaCIsIiIsJnMsTlVMTCkpIDwgMCkgeworICAg ICAgICAgICAgICAgIGlmICh4ID09IC0zKQorICAgICAgICAgICAgICAgICAgcyA9ICIiOworICAg ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgIGdvdG8geHB1dHg7CisgICAgICAg ICAgICB9CisgICAgICAgICAgICBpZiAoKnMpIHMgPSBicnN0cmlwKHMpOworICAgICAgICAgICAg eSA9IHN0cmxlbihzKTsKKyAgICAgICAgICAgIGZvciAoeCA9IDA7IHggPCB5OyB4KyspIHsgICAv KiBNYWtlIHN1cmUgdGhleSBpbmNsdWRlZCAiXHYoLi4uKSIgKi8KKyAgICAgICAgICAgICAgICBp ZiAoc1t4XSAhPSAnXFwnKSBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBpZiAoc1t4KzFdID09 ICd2JykgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoeCA9PSB5KSB7Cisg ICAgICAgICAgICAgICAgcHJpbnRmKAorICAgICAgICAgICAgICAgICI/RmlsdGVyIG11c3QgY29u dGFpbiBhIHJlcGxhY2VtZW50IHZhcmlhYmxlIGZvciBmaWxlbmFtZS5cbiIKKyAgICAgICAgICAg ICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICB4ID0gLTk7CisgICAgICAgICAgICAgICAg Z290byB4cHV0eDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzKSBpZiAoISpzKSBz ID0gTlVMTDsKKyAgICAgICAgICAgIG1ha2VzdHIoJihwdltuXS5zdmFsKSxzKTsKKyAgICAgICAg ICAgIGlmIChwdltuXS5zdmFsKQorICAgICAgICAgICAgICBwdltuXS5pdmFsID0gMTsKKyAgICAg ICAgICAgIGJyZWFrOworI2VuZGlmIC8qIFBJUEVTRU5EICovCisKKyAgICAgICAgICBjYXNlIFNO RF9OQU06ICAgICAgICAgICAgICAgICAvKiAvRklMRU5BTUVTICovCisgICAgICAgICAgICBpZiAo IWdldHZhbCkgYnJlYWs7CisgICAgICAgICAgICBpZiAoKHggPSBjbWtleShmbnRhYixuZm50YWIs IiIsImF1dG9tYXRpYyIseHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgICAgIGdvdG8geHB1dHg7 CisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJmdHAgcHV0IC9maWxlbmFtZXMiLCIiLHgpOworICAg ICAgICAgICAgcHZbbl0uaXZhbCA9IHg7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAg IGNhc2UgU05EX1NNQTogICAgICAgICAgICAgICAgIC8qIFNtYWxsZXIgLyBsYXJnZXIgdGhhbiAq LworICAgICAgICAgIGNhc2UgU05EX0xBUjogeworCSAgICAgIENLX09GRl9UIHk7CisJICAgICAg aWYgKCFnZXR2YWwpIGJyZWFrOworCSAgICAgIGlmICgoeCA9IGNtbnVtdygiU2l6ZSBpbiBieXRl cyIsIjAiLDEwLCZ5LHh4c3RyaW5nKSkgPCAwKQorCQlnb3RvIHhwdXR4OworCSAgICAgIHB2W25d Lnd2YWwgPSB5OworCSAgICAgIGJyZWFrOworCSAgfQorICAgICAgICAgIGNhc2UgU05EX0ZJTDog ICAgICAgICAgICAgICAgIC8qIE5hbWUgb2YgZmlsZSBjb250YWluaW5nIGZpbGVuYW1lcyAqLwor ICAgICAgICAgICAgaWYgKCFnZXR2YWwpIGJyZWFrOworICAgICAgICAgICAgaWYgKCh4ID0gY21p ZmkoIk5hbWUgb2YgZmlsZSBjb250YWluaW5nIGxpc3Qgb2YgZmlsZW5hbWVzIiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAiIiwmcywmeSx4eHN0cmluZykpIDwgMCkgeworICAgICAg ICAgICAgICAgIGlmICh4ID09IC0zKSB7CisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiP0Zp bGVuYW1lIHJlcXVpcmVkXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgeCA9IC05OworICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBnb3RvIHhwdXR4OworICAgICAgICAgICAgfSBl bHNlIGlmICh5ICYmIGlzd2lsZChzKSkgeworICAgICAgICAgICAgICAgIHByaW50ZigiP1dpbGRj YXJkcyBub3QgYWxsb3dlZFxuIik7CisgICAgICAgICAgICAgICAgeCA9IC05OworICAgICAgICAg ICAgICAgIGdvdG8geHB1dHg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocykgaWYg KCEqcykgcyA9IE5VTEw7CisgICAgICAgICAgICBtYWtlc3RyKCYocHZbbl0uc3ZhbCkscyk7Cisg ICAgICAgICAgICBpZiAocHZbbl0uc3ZhbCkgeworICAgICAgICAgICAgICAgIHB2W25dLml2YWwg PSAxOworICAgICAgICAgICAgICAgIHB2W1NORF9BUlJdLml2YWwgPSAwOworICAgICAgICAgICAg fSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwdltuXS5pdmFsID0gMDsKKyAgICAgICAgICAgIH0K KyAgICAgICAgICAgIG1wdXQgPSAwOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBj YXNlIFNORF9NT1Y6ICAgICAgICAgICAgICAgICAvKiBNT1ZFIGFmdGVyICovCisgICAgICAgICAg Y2FzZSBTTkRfUkVOOiAgICAgICAgICAgICAgICAgLyogUkVOQU1FIGFmdGVyICovCisgICAgICAg ICAgY2FzZSBTTkRfU1JOOiB7ICAgICAgICAgICAgICAgLyogU0VSVkVSLVJFTkFNRSBhZnRlciAq LworICAgICAgICAgICAgICBjaGFyICogbSA9ICIiOworICAgICAgICAgICAgICBzd2l0Y2ggKG4p IHsKKyAgICAgICAgICAgICAgICBjYXNlIFNORF9NT1Y6CisgICAgICAgICAgICAgICAgICBtID0g ImRldmljZSBhbmQvb3IgZGlyZWN0b3J5IGZvciBzb3VyY2UgZmlsZSBhZnRlciBzZW5kaW5nIjsK KyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgU05EX1JFTjoK KyAgICAgICAgICAgICAgICAgIG0gPSAibmV3IG5hbWUgZm9yIHNvdXJjZSBmaWxlIGFmdGVyIHNl bmRpbmciOworICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBT TkRfU1JOOgorICAgICAgICAgICAgICAgICAgbSA9ICJuZXcgbmFtZSBmb3IgZGVzdGluYXRpb24g ZmlsZSBhZnRlciBzZW5kaW5nIjsKKyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgIGlmICghZ2V0dmFsKSBicmVhazsKKyAgICAgICAgICAgICAg aWYgKCh4ID0gY21mbGQobSwgIiIsICZzLCBuID09IFNORF9NT1YgPyB4eHN0cmluZyA6IE5VTEwp KSA8IDApIHsKKyAgICAgICAgICAgICAgICAgIGlmICh4ID09IC0zKSB7CisgICAgICAgICAgICAg ICAgICAgICAgcHJpbnRmKCIlc1xuIiwgbiA9PSBTTkRfTU9WID8KKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIj9EZXN0aW5hdGlvbiByZXF1aXJlZCIgOgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAiP05ldyBuYW1lIHJlcXVpcmVkIgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICApOworICAgICAgICAgICAgICAgICAgICAgIHggPSAtOTsKKyAgICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgICAgIGdvdG8geHB1dHg7CisgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgaWYgKHMpIGlmICghKnMpIHMgPSBOVUxMOworICAgICAgICAgICAgICBtYWtlc3Ry KCYocHZbbl0uc3ZhbCkscyA/IGJyc3RyaXAocykgOiBOVUxMKTsKKyAgICAgICAgICAgICAgcHZb bl0uaXZhbCA9IChwdltuXS5zdmFsKSA/IDEgOiAwOworICAgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgICB9CisgICAgICAgICAgY2FzZSBTTkRfU1RBOiAgICAgICAgICAgICAgICAgLyogU3Rh cnRpbmcgcG9zaXRpb24gKD0gUFNFTkQpICovCisgICAgICAgICAgICBpZiAoIWdldHZhbCkgYnJl YWs7CisgICAgICAgICAgICBpZiAoKHggPSBjbW51bSgiMC1iYXNlZCBwb3NpdGlvbiIsIjAiLDEw LCZ5LHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgICAgICBnb3RvIHhwdXR4OworICAgICAgICAg ICAgcHZbbl0uaXZhbCA9IHk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2Ug U05EX1RZUDogICAgICAgICAgICAgICAgIC8qIC9UWVBFICovCisgICAgICAgICAgICBpZiAoIWdl dHZhbCkgYnJlYWs7CisgICAgICAgICAgICBpZiAoKHggPSBjbWtleSh0eHRiaW4sMywiIiwiYWxs Iix4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICAgICAgZ290byB4cHV0eDsKKyAgICAgICAgICAg IHB2W25dLml2YWwgPSAoeCA9PSAyKSA/IC0xIDogeDsKKyAgICAgICAgICAgIGJyZWFrOworCisj aWZuZGVmIE5PQ1NFVFMKKyAgICAgICAgICBjYXNlIFNORF9DU0w6ICAgICAgICAgICAgICAgICAv KiBMb2NhbCBjaGFyYWN0ZXIgc2V0ICovCisgICAgICAgICAgY2FzZSBTTkRfQ1NSOiAgICAgICAg ICAgICAgICAgLyogUmVtb3RlIChzZXJ2ZXIpIGNoYXJzZXQgKi8KKyAgICAgICAgICAgIGlmICgo eCA9IGNta2V5KGZjc3RhYixuZmlsYywiIiwiIix4eHN0cmluZykpIDwgMCkgeworCQlyZXR1cm4o KHggPT0gLTMpID8gLTIgOiB4KTsKKyAgICAgICAgICAgIH0KKwkgICAgaWYgKG4gPT0gU05EX0NT TCkKKyAgICAgICAgICAgICAgeF9jc2wgPSB4OworICAgICAgICAgICAgZWxzZQorICAgICAgICAg ICAgICB4X2NzciA9IHg7CisgICAgICAgICAgICB4X3hsYSA9IDE7ICAgICAgICAgICAgICAgICAg LyogT3ZlcnJpZGVzIGdsb2JhbCBPRkYgc2V0dGluZyAqLworICAgICAgICAgICAgYnJlYWs7CisK KyAgICAgICAgICBjYXNlIFNORF9YUEE6ICAgICAgICAgICAgICAgICAvKiBUcmFuc3BhcmVudCAq LworICAgICAgICAgICAgeF94bGEgPSAwOworICAgICAgICAgICAgeF9jc3IgPSAtMTsKKyAgICAg ICAgICAgIHhfY3NsID0gLTE7CisgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBOT0NTRVRT ICovCisgICAgICAgIH0KKyAgICB9CisjaWZkZWYgUElQRVNFTkQKKyAgICBpZiAocHZbU05EX1JF U10uaXZhbCA+IDApIHsgLyogL1JFQ09WRVIgKi8KKyAgICAgICAgaWYgKHNuZGZpbHRlciB8fCBw dltTTkRfRkxUXS5pdmFsID4gMCkgeworICAgICAgICAgICAgcHJpbnRmKCI/U29ycnksIG5vIC9S RUNPVkVSIG9yIC9TVEFSVCBpZiBTRU5EIEZJTFRFUiBzZWxlY3RlZFxuIik7CisgICAgICAgICAg ICB4ID0gLTk7CisgICAgICAgICAgICBnb3RvIHhwdXR4OworICAgICAgICB9CisJaWYgKHNmdHRh YlswXSA+IDAgJiYgc2Z0dGFiW1NGVF9SRVNUXSA9PSAwKQorCSAgcHJpbnRmKCJXQVJOSU5HOiBT ZXJ2ZXIgc2F5cyBpdCBkb2Vzbid0IHN1cHBvcnQgUkVTVC5cbiIpOworICAgIH0KKyNlbmRpZiAv KiBQSVBFU0VORCAqLworCisgICAgY21hcmcgPSAiIjsKKyAgICBjbWFyZzIgPSBhc25hbWJ1ZjsK KyAgICBsaW5lWzBdID0gTlVMOworICAgIHMgPSBsaW5lOworICAgIHdpbGQgPSAwOworCisgICAg c3dpdGNoIChjbXJlc3VsdC5mY29kZSkgeyAgICAgICAgICAgLyogSG93IGRpZCB3ZSBnZXQgb3V0 IG9mIHN3aXRjaCBsb29wICovCisgICAgICBjYXNlIF9DTUlGSTogICAgICAgICAgICAgICAgICAg ICAgLyogSW5wdXQgZmlsZW5hbWUgKi8KKyAgICAgICAgaWYgKHB2W1NORF9GSUxdLml2YWwgPiAw KSB7CisgICAgICAgICAgICBwcmludGYoIj9Zb3UgbWF5IG5vdCBnaXZlIGEgUFVUIGZpbGVzcGVj IGFuZCBhIC9MSVNURklMRVxuIik7CisgICAgICAgICAgICB4ID0gLTk7CisgICAgICAgICAgICBn b3RvIHhwdXR4OworICAgICAgICB9CisgICAgICAgIGNrc3RybmNweShsaW5lLGNtcmVzdWx0LnNy ZXN1bHQsTElOQlVGU0laKTsgLyogTmFtZSAqLworICAgICAgICBpZiAocHZbU05EX0FSUl0uaXZh bCA+IDApCisgICAgICAgICAgY2tzdHJuY3B5KGFzbmFtYnVmLGxpbmUsQ0tNQVhQQVRIKTsKKyAg ICAgICAgZWxzZQorICAgICAgICAgIHdpbGQgPSBjbXJlc3VsdC5ucmVzdWx0OyAgICAgIC8qIFdp bGQgZmxhZyAqLworICAgICAgICBkZWJ1ZyhGMTExLCJmdHAgcHV0IHdpbGQiLGxpbmUsd2lsZCk7 CisgICAgICAgIGlmICghd2lsZCAmJiAhcmVjdXJzaXZlICYmICFtcHV0KQorICAgICAgICAgIG5v bGlua3MgPSAwOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgX0NNRkxEOiAgICAgICAgICAg ICAgICAgICAgICAvKiBGaWVsZCAqLworICAgICAgICAvKiBPbmx5IGFsbG93ZWQgd2l0aCAvQ09N TUFORCBhbmQgL0FSUkFZICovCisgICAgICAgIGlmIChwdltTTkRfRklMXS5pdmFsID4gMCkgewor ICAgICAgICAgICAgcHJpbnRmKCI/WW91IG1heSBub3QgZ2l2ZSBhIFBVVCBmaWxlc3BlYyBhbmQg YSAvTElTVEZJTEVcbiIpOworICAgICAgICAgICAgeCA9IC05OworICAgICAgICAgICAgZ290byB4 cHV0eDsKKyAgICAgICAgfQorCS8qIEZvciBNUFVUIGl0J3MgT0sgdG8gaGF2ZSBmaWxlc3BlY3Mg dGhhdCBkb24ndCBtYXRjaCBhbnkgZmlsZXMgKi8KKwlpZiAobXB1dCkKKwkgIGJyZWFrOworICAg ICAgICBpZiAocHZbU05EX0NNRF0uaXZhbCA8IDEgJiYgcHZbU05EX0FSUl0uaXZhbCA8IDEpIHsK KyNpZmRlZiBDS1JPT1QKKyAgICAgICAgICAgIGlmIChja3Jvb3RlcnIpCisgICAgICAgICAgICAg IHByaW50ZigiP09mZiBsaW1pdHM6ICVzXG4iLGNtcmVzdWx0LnNyZXN1bHQpOworICAgICAgICAg ICAgZWxzZQorI2VuZGlmIC8qIENLUk9PVCAqLworICAgICAgICAgICAgICBwcmludGYoIj8lcyAt IFwiJXNcIlxuIiwKKyAgICAgICAgICAgICAgICAgICBpc3dpbGQoY21yZXN1bHQuc3Jlc3VsdCkg PworICAgICAgICAgICAgICAgICAgICJObyBmaWxlcyBtYXRjaCIgOiAiRmlsZSBub3QgZm91bmQi LAorICAgICAgICAgICAgICAgICAgIGNtcmVzdWx0LnNyZXN1bHQKKyAgICAgICAgICAgICAgICAg ICApOworICAgICAgICAgICAgeCA9IC05OworICAgICAgICAgICAgZ290byB4cHV0eDsKKyAgICAg ICAgfQorICAgICAgICBja3N0cm5jcHkobGluZSxjbXJlc3VsdC5zcmVzdWx0LExJTkJVRlNJWik7 CisgICAgICAgIGlmIChwdltTTkRfQVJSXS5pdmFsID4gMCkKKyAgICAgICAgICBja3N0cm5jcHko YXNuYW1idWYsbGluZSxDS01BWFBBVEgpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgX0NN Q0ZNOiAgICAgICAgICAgICAgICAgICAgICAvKiBDb25maXJtYXRpb24gKi8KKyAgICAgICAgY29u ZmlybWVkID0gMTsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICBwcmlu dGYoIj9VbmV4cGVjdGVkIGZ1bmN0aW9uIGNvZGU6ICVkXG4iLGNtcmVzdWx0LmZjb2RlKTsKKyAg ICAgICAgeCA9IC05OworICAgICAgICBnb3RvIHhwdXR4OworICAgIH0KKyAgICBkZWJ1ZyhGMTEw LCJmdHAgcHV0IHN0cmluZyIscywwKTsKKyAgICBkZWJ1ZyhGMTAxLCJmdHAgcHV0IGNvbmZpcm1l ZCIsIiIsY29uZmlybWVkKTsKKworICAgIC8qIFNhdmUgYW5kIGNoYW5nZSBwcm90b2NvbCBhbmQg dHJhbnNmZXIgbW9kZSAqLworICAgIC8qIEdsb2JhbCB2YWx1ZXMgYXJlIHJlc3RvcmVkIGluIG1h aW4gcGFyc2UgbG9vcCAqLworCisgICAgZ19kaXNwbGEgPSBmZGlzcGxhOworICAgIGlmIChmdHBf ZGlzID4gLTEpCisgICAgICBmZGlzcGxhID0gZnRwX2RpczsKKyAgICBnX3NraXBidXAgPSBza2lw YnVwOworCisgICAgaWYgKHB2W1NORF9OT0JdLml2YWwgPiAtMSkgeyAgICAgICAgLyogL05PQkFD S1VQIChza2lwIGJhY2t1cCBmaWxlKSAqLworICAgICAgICBnX3NraXBidXAgPSBza2lwYnVwOwor ICAgICAgICBza2lwYnVwID0gMTsKKyAgICB9CisgICAgaWYgKHB2W1NORF9UWVBdLml2YWwgPiAt MSkgeyAgICAgICAgLyogL1RZUEUgKi8KKyAgICAgICAgeGZpbGV0eXBlID0gcHZbU05EX1RZUF0u aXZhbDsKKyAgICAgICAgaWYgKHhmaWxldHlwZSA9PSAyKQorICAgICAgICAgIHhmaWxldHlwZSA9 IC0xOworICAgIH0KKyAgICBpZiAocHZbU05EX0JJTl0uaXZhbCA+IDApIHsgICAgICAgICAvKiAv QklOQVJZIHJlYWxseSBtZWFucyBiaW5hcnkuLi4gKi8KKyAgICAgICAgZm9yY2V0eXBlID0gMTsg ICAgICAgICAgICAgICAgICAvKiBTbyBza2lwIGZpbGUgc2NhbiAqLworICAgICAgICBmdHBfdHlw ID0gRlRUX0JJTjsgICAgICAgICAgICAgIC8qIFNldCBiaW5hcnkgKi8KKyAgICB9IGVsc2UgaWYg KHB2W1NORF9UWFRdLml2YWwgPiAwKSB7ICAvKiBTaW1pbGFybHkgZm9yIC9URVhULi4uICovCisg ICAgICAgIGZvcmNldHlwZSA9IDE7CisgICAgICAgIGZ0cF90eXAgPSBGVFRfQVNDOworICAgIH0g ZWxzZSBpZiAocHZbU05EX1RFTl0uaXZhbCA+IDApIHsgIC8qIGFuZCAvVEVORVgqLworICAgICAg ICBmb3JjZXR5cGUgPSAxOworICAgICAgICBmdHBfdHlwID0gRlRUX1RFTjsKKyAgICB9IGVsc2Ug aWYgKGZ0cF9jbWRsaW4gJiYgZnRwX3hmZXJtb2RlID09IFhNT0RFX00pIHsKKyAgICAgICAgZm9y Y2V0eXBlID0gMTsKKyAgICAgICAgZnRwX3R5cCA9IGJpbmFyeTsKKyAgICAgICAgZ19mdHBfdHlw ID0gYmluYXJ5OworICAgIH0KKworI2lmZGVmIFBJUEVTRU5ECisgICAgaWYgKHB2W1NORF9DTURd Lml2YWwgPiAwKSB7ICAgICAgICAgLyogL0NPTU1BTkQgLSBzdHJpcCBhbnkgYnJhY2VzICovCisg ICAgICAgIGRlYnVnKEYxMTAsIlBVVCAvQ09NTUFORCBiZWZvcmUgc3RyaXBwaW5nIixzLDApOwor ICAgICAgICBzID0gYnJzdHJpcChzKTsKKyAgICAgICAgZGVidWcoRjExMCwiUFVUIC9DT01NQU5E IGFmdGVyIHN0cmlwcGluZyIscywwKTsKKyAgICAgICAgaWYgKCEqcykgeworICAgICAgICAgICAg cHJpbnRmKCI/U29ycnksIGEgY29tbWFuZCB0byBzZW5kIGZyb20gaXMgcmVxdWlyZWRcbiIpOwor ICAgICAgICAgICAgeCA9IC05OworICAgICAgICAgICAgZ290byB4cHV0eDsKKyAgICAgICAgfQor ICAgICAgICBjbWFyZyA9IHM7CisgICAgfQorI2VuZGlmIC8qIFBJUEVTRU5EICovCisKKy8qIFNl dCB1cCAvTU9WRSBhbmQgL1JFTkFNRSAqLworCisgICAgaWYgKHB2W1NORF9ERUxdLml2YWwgPiAw ICYmCisgICAgICAgIChwdltTTkRfTU9WXS5pdmFsID4gMCB8fCBwdltTTkRfUkVOXS5pdmFsID4g MCkpIHsKKyAgICAgICAgcHJpbnRmKCI/U29ycnksIC9ERUxFVEUgY29uZmxpY3RzIHdpdGggL01P VkUgb3IgL1JFTkFNRVxuIik7CisgICAgICAgIHggPSAtOTsKKyAgICAgICAgZ290byB4cHV0eDsK KyAgICB9CisjaWZkZWYgQ0tfVE1QRElSCisgICAgaWYgKHB2W1NORF9NT1ZdLml2YWwgPiAwKSB7 CisgICAgICAgIGludCBsZW47CisgICAgICAgIGNoYXIgKiBwID0gcHZbU05EX01PVl0uc3ZhbDsK KyAgICAgICAgbGVuID0gc3RybGVuKHApOworICAgICAgICBpZiAoIWlzZGlyKHApKSB7ICAgICAg ICAgICAgICAgIC8qIENoZWNrIGRpcmVjdG9yeSAqLworI2lmZGVmIENLX01LRElSCisgICAgICAg ICAgICBjaGFyICogcyA9IE5VTEw7CisgICAgICAgICAgICBzID0gKGNoYXIgKiltYWxsb2MobGVu ICsgNCk7CisgICAgICAgICAgICBpZiAocykgeworICAgICAgICAgICAgICAgIHN0cmNweShzLHAp OyAgICAgICAgICAgIC8qIHNhZmUgKi8KKyNpZmRlZiBkYXRhZ2VuZXJhbAorICAgICAgICAgICAg ICAgIGlmIChzW2xlbi0xXSAhPSAnOicpIHsgc1tsZW4rK10gPSAnOic7IHNbbGVuXSA9IE5VTDsg fQorI2Vsc2UKKyAgICAgICAgICAgICAgICBpZiAoc1tsZW4tMV0gIT0gJy8nKSB7IHNbbGVuKytd ID0gJy8nOyBzW2xlbl0gPSBOVUw7IH0KKyNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLworICAgICAg ICAgICAgICAgIHNbbGVuKytdID0gJ1gnOworICAgICAgICAgICAgICAgIHNbbGVuXSA9IE5VTDsK KyNpZmRlZiBOT01LRElSCisgICAgICAgICAgICAgICAgeCA9IC0xOworI2Vsc2UKKyAgICAgICAg ICAgICAgICB4ID0gem1rZGlyKHMpOworI2VuZGlmIC8qIE5PTUtESVIgKi8KKyAgICAgICAgICAg ICAgICBmcmVlKHMpOworICAgICAgICAgICAgICAgIGlmICh4IDwgMCkgeworICAgICAgICAgICAg ICAgICAgICBwcmludGYoIj9DYW4ndCBjcmVhdGUgXCIlc1wiXG4iLHApOworICAgICAgICAgICAg ICAgICAgICB4ID0gLTk7CisgICAgICAgICAgICAgICAgICAgIGdvdG8geHB1dHg7CisgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgICAgIHByaW50ZigiP0Rp cmVjdG9yeSBcIiVzXCIgbm90IGZvdW5kXG4iLHApOworICAgICAgICAgICAgeCA9IC05OworICAg ICAgICAgICAgZ290byB4cHV0eDsKKyNlbmRpZiAvKiBDS19NS0RJUiAqLworICAgICAgICB9Cisg ICAgICAgIG1ha2VzdHIoJnNuZF9tb3ZlLHApOworICAgIH0KKyNlbmRpZiAvKiBDS19UTVBESVIg Ki8KKworICAgIGlmIChwdltTTkRfUkVOXS5pdmFsID4gMCkgeyAgICAgICAgIC8qIC9SRU5BTUUg Ki8KKyAgICAgICAgY2hhciAqIHAgPSBwdltTTkRfUkVOXS5zdmFsOworICAgICAgICBpZiAoIXAp IHAgPSAiIjsKKyAgICAgICAgaWYgKCEqcCkgeworICAgICAgICAgICAgcHJpbnRmKCI/TmV3IG5h bWUgcmVxdWlyZWQgZm9yIC9SRU5BTUVcbiIpOworICAgICAgICAgICAgeCA9IC05OworICAgICAg ICAgICAgZ290byB4cHV0eDsKKyAgICAgICAgfQorICAgICAgICBwID0gYnJzdHJpcChwKTsKKyNp Zm5kZWYgTk9TUEwKKyAgICAvKiBJZiBuYW1lIGdpdmVuIGlzIHdpbGQsIHJlbmFtZSBzdHJpbmcg bXVzdCBjb250YWluIHZhcmlhYmxlcyAqLworICAgICAgICBpZiAod2lsZCkgeworICAgICAgICAg ICAgY2hhciAqIHMgPSB0bXBidWY7CisgICAgICAgICAgICB4ID0gVE1QQlVGU0laOworICAgICAg ICAgICAgenpzdHJpbmcocCwmcywmeCk7CisgICAgICAgICAgICBpZiAoIXN0cmNtcCh0bXBidWYs cCkpIHsKKyAgICAgICAgICAgICAgICBwcmludGYoCisgICAgIj8vUkVOQU1FIGZvciBmaWxlIGdy b3VwIG11c3QgY29udGFpbiB2YXJpYWJsZXMgc3VjaCBhcyBcXHYoZmlsZW5hbWUpXG4iCisgICAg ICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgeCA9IC05OworICAgICAgICAg ICAgICAgIGdvdG8geHB1dHg7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyNlbmRpZiAvKiBO T1NQTCAqLworICAgICAgICBtYWtlc3RyKCZzbmRfcmVuYW1lLHApOworICAgICAgICBkZWJ1ZyhG MTEwLCJGVFAgc25kX3JlbmFtZSIsc25kX3JlbmFtZSwwKTsKKyAgICB9CisgICAgaWYgKHB2W1NO RF9TUk5dLml2YWwgPiAwKSB7ICAgICAgICAgLyogL1NFUlZFUi1SRU5BTUUgKi8KKyAgICAgICAg Y2hhciAqIHAgPSBwdltTTkRfU1JOXS5zdmFsOworICAgICAgICBpZiAoIXApIHAgPSAiIjsKKyAg ICAgICAgaWYgKCEqcCkgeworICAgICAgICAgICAgcHJpbnRmKCI/TmV3IG5hbWUgcmVxdWlyZWQg Zm9yIC9TRVJWRVItUkVOQU1FXG4iKTsKKyAgICAgICAgICAgIHggPSAtOTsKKyAgICAgICAgICAg IGdvdG8geHB1dHg7CisgICAgICAgIH0KKyAgICAgICAgcCA9IGJyc3RyaXAocCk7CisjaWZuZGVm IE5PU1BMCisgICAgICAgIGlmICh3aWxkKSB7CisgICAgICAgICAgICBjaGFyICogcyA9IHRtcGJ1 ZjsKKyAgICAgICAgICAgIHggPSBUTVBCVUZTSVo7CisgICAgICAgICAgICB6enN0cmluZyhwLCZz LCZ4KTsKKyAgICAgICAgICAgIGlmICghc3RyY21wKHRtcGJ1ZixwKSkgeworICAgICAgICAgICAg ICAgIHByaW50ZigKKyI/L1NFUlZFUi1SRU5BTUUgZm9yIGZpbGUgZ3JvdXAgbXVzdCBjb250YWlu IHZhcmlhYmxlcyBzdWNoIGFzIFxcdihmaWxlbmFtZSlcbiIKKyAgICAgICAgICAgICAgICAgICAg ICAgKTsKKyAgICAgICAgICAgICAgICB4ID0gLTk7CisgICAgICAgICAgICAgICAgZ290byB4cHV0 eDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorI2VuZGlmIC8qIE5PU1BMICovCisgICAgICAg IG1ha2VzdHIoJnNydl9yZW5hbSxwKTsKKyAgICAgICAgZGVidWcoRjExMCwiZnRwIHB1dCBzcnZf cmVuYW0iLHNydl9yZW5hbSwwKTsKKyAgICB9CisgICAgaWYgKCFjb25maXJtZWQpIHsgICAgICAg ICAgICAgICAgICAgLyogQ1Igbm90IHR5cGVkIHlldCwgZ2V0IG1vcmUgZmllbGRzICovCisgICAg ICAgIGNoYXIgKiBscDsKKyAgICAgICAgaWYgKG1wdXQpIHsgICAgICAgICAgICAgICAgICAgICAv KiBNUFVUIG9yIE1NT1ZFICovCisgICAgICAgICAgICBuZmlscyA9IDA7ICAgICAgICAgICAgICAg ICAgLyogV2UgYWxyZWFkeSBoYXZlIHRoZSBmaXJzdCBvbmUgKi8KKyNpZm5kZWYgTk9NU0VORAor CSAgICBpZiAoY21yZXN1bHQuZmNvZGUgPT0gX0NNSUZJKSB7CisJCS8qIEZpcnN0IGZpbGVzcGVj IGlzIHZhbGlkICovCisJCW1zZmlsZXNbbmZpbHMrK10gPSBsaW5lOyAgICAvKiBTdG9yZSBwb2lu dGVyICovCisJCWxwID0gbGluZSArIChpbnQpc3RybGVuKGxpbmUpICsgMTsgLyogUG9pbnQgcGFz dCBpdCAqLworCQlkZWJ1ZyhGMTExLCJmdHAgcHV0IG1wdXQiLG1zZmlsZXNbbmZpbHMtMV0sbmZp bHMtMSk7CisJICAgIH0gZWxzZSB7CisJCS8qIEZpcnN0IGZpbGVzcGVjIG1hdGNoZXMgbm8gZmls ZXMgKi8KKwkJZGVidWcoRjExMCwiZnRwIHB1dCBtcHV0IHNraXBwaW5nIGZpcnN0IGZpbGVzcGVj IiwKKwkJICAgICAgY21yZXN1bHQuc3Jlc3VsdCwKKwkJICAgICAgMAorCQkgICAgICApOworCQls cCA9IGxpbmU7CisJICAgIH0KKwkgICAgLyogUGFyc2UgYSBmaWxlc3BlYywgYSAiZmllbGQiLCBv ciBjb25maXJtYXRpb24gKi8KKworCSAgICBjbWZkYmkoJnNmLAkJCS8qIDFzdCBGREIgLSBmaWxl IHRvIHNlbmQgKi8KKwkJICAgX0NNSUZJLAkJLyogZmNvZGUgKi8KKwkJICAgIiIsCQkJLyogaGxw bXNnICovCisJCSAgICIiLAkJCS8qIGRlZmF1bHQgKi8KKwkJICAgIiIsCQkJLyogYWRkdGwgc3Ry aW5nIGRhdGEgKi8KKwkJICAgbm9saW5rcyB8IHhfcmVjdXJzZSwJLyogYWRkdGwgbnVtZXJpYyBk YXRhIDEgKi8KKwkJICAgMCwJCQkvKiBkaXJmbGcgMCBtZWFucyAibm90IGRpcnMgb25seSIgKi8K KwkJICAgeHhzdHJpbmcsCisJCSAgIE5VTEwsCisJCSAgICZmbAorCQkgICApOworCSAgICBjbWZk YmkoJmZsLAkJCS8qIDJuZCBGREIgLSBsb2NhbCBmaWxlc3BlYyAqLworCQkgICBfQ01GTEQsCQkv KiBmY29kZSAqLworCQkgICAiIiwJCQkvKiBobHBtc2cgKi8KKwkJICAgIiIsCQkJLyogZGVmYXVs dCAqLworCQkgICAiIiwJCQkvKiBhZGR0bCBzdHJpbmcgZGF0YSAqLworCQkgICAwLAkJCS8qIGFk ZHRsIG51bWVyaWMgZGF0YSAxICovCisJCSAgIDAsCQkJLyogYWRkdGwgbnVtZXJpYyBkYXRhIDIg Ki8KKwkJICAgeHhzdHJpbmcsCisJCSAgIE5VTEwsCisJCSAgICZjbQorCQkgICApOworCSAgICBj bWZkYmkoJmNtLAkJCS8qIDNyZCBGREIgLSBDb25maXJtYXRpb24gKi8KKwkJICAgX0NNQ0ZNLAkJ LyogZmNvZGUgKi8KKwkJICAgIiIsCisJCSAgICIiLAorCQkgICAiIiwKKwkJICAgMCwKKwkJICAg MCwKKwkJICAgTlVMTCwKKwkJICAgTlVMTCwKKwkJICAgTlVMTAorCQkgICApOworCisgICAgICAg ICAgICB3aGlsZSAoIWNvbmZpcm1lZCkgewkvKiBHZXQgbW9yZSBmaWxlbmFtZXMgKi8KKwkJeCA9 IGNtZmRiKCZzZik7CQkvKiBQYXJzZSBzb21ldGhpbmcgKi8KKwkJZGVidWcoRjEwMSwiZnRwIHB1 dCBjbWZkYiBCIiwiIix4KTsKKwkJZGVidWcoRjEwMSwiZnRwIHB1dCBmY29kZSBCIiwiIixjbXJl c3VsdC5mY29kZSk7CisJCWlmICh4IDwgMCkJCS8qIEVycm9yICovCisJCSAgZ290byB4cHV0eDsJ CS8qIG9yIHJlcGFyc2UgbmVlZGVkICovCisJCXN3aXRjaCAoY21yZXN1bHQuZmNvZGUpIHsKKwkJ ICBjYXNlIF9DTUNGTToJCS8qIEVuZCBvZiBjb21tYW5kICovCisJCSAgICBjb25maXJtZWQrKzsK KwkJICAgIGlmIChuZmlscyA8IDEpIHsKKwkJCWRlYnVnKEYxMDAsImZ0cCBwdXQgbXB1dCBubyBm aWxlcyBtYXRjaCIsIiIsMCk7CisJCQlwcmludGYoIj9ObyBmaWxlcyBtYXRjaCBNUFVUIGxpc3Rc biIpOworCQkJeCA9IC05OworCQkJZ290byB4cHV0eDsKKwkJICAgIH0KKwkJICAgIGJyZWFrOwor CQkgIGNhc2UgX0NNRkxEOgkJLyogTm8gbWF0Y2ggKi8KKwkJICAgIGRlYnVnKEYxMTAsImZ0cCBw dXQgbXB1dCBza2lwcGluZyIsY21yZXN1bHQuc3Jlc3VsdCwwKTsKKwkJICAgIGNvbnRpbnVlOwor CQkgIGNhc2UgX0NNSUZJOgkJLyogR29vZCBtYXRjaCAqLworCQkgICAgcyA9IGNtcmVzdWx0LnNy ZXN1bHQ7CisJCSAgICBtc2ZpbGVzW25maWxzKytdID0gbHA7IC8qIEdvdCBvbmUsIGNvdW50LCBw b2ludCB0byBpdCwgKi8KKwkJICAgIHAgPSBscDsJCSAgIC8qIHJlbWVtYmVyIHBvaW50ZXIsICov CisJCSAgICB3aGlsZSAoKCpscCsrID0gKnMrKykpIC8qIGFuZCBjb3B5IGl0IGludG8gYnVmZmVy ICovCisJCSAgICAgIGlmIChscCA+IChsaW5lICsgTElOQlVGU0laKSkgeyAvKiBBdm9pZCBtZW1v cnkgbGVhayAqLworCQkJICBwcmludGYoIj9NUFVUIGxpc3QgdG9vIGxvbmdcbiIpOworCQkJICBs aW5lWzBdID0gTlVMOworCQkJICB4ID0gLTk7CisJCQkgIGdvdG8geHB1dHg7CisJCSAgICAgIH0K KwkJICAgIGRlYnVnKEYxMTEsImZ0cCBwdXQgbXB1dCBhZGRpbmciLG1zZmlsZXNbbmZpbHMtMV0s bmZpbHMtMSk7CisJCSAgICBpZiAobmZpbHMgPT0gMSkJLyogVGFrZSBjYXJlIG9mIFx2KGZpbGVz cGVjKSAqLworCQkgICAgICBmc3BlY1swXSA9IE5VTDsKKyNpZmRlZiBaRk5RRlAKKwkJICAgIHpm bnFmcChwLFRNUEJVRlNJWix0bXBidWYpOworCQkgICAgcCA9IHRtcGJ1ZjsKKyNlbmRpZiAvKiBa Rk5RRlAgKi8KKwkJICAgIGlmICgoKGludClzdHJsZW4oZnNwZWMpICsgKGludClzdHJsZW4ocCkg KyAxKSA8IGZzcGVjbGVuKSB7CisJCQlzdHJjYXQoZnNwZWMscCk7ICAgIC8qIHNhZmUgKi8KKwkJ CXN0cmNhdChmc3BlYywiICIpOyAgLyogc2FmZSAqLworCQkgICAgfSBlbHNlIHsKKyNpZmRlZiBD T01NRU5UCisJCQlwcmludGYoIldBUk5JTkcgLSBcXHYoZmlsZXNwZWMpIGJ1ZmZlciBvdmVyZmxv d1xuIik7CisjZWxzZQorCQkJZGVidWcoRjEwMSwiZG94cHV0IGZpbGVzcGVjIGJ1ZmZlciBvdmVy ZmxvdyIsIiIsMCk7CisjZW5kaWYgLyogQ09NTUVOVCAqLworCQkgICAgfQorCQl9CisJICAgIH0K KyNlbmRpZiAvKiBOT01TRU5EICovCisgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAg ICAgICAgLyogUmVndWxhciBQVVQgKi8KKyAgICAgICAgICAgIG5maWxzID0gLTE7CisgICAgICAg ICAgICBpZiAoKHggPSBjbXR4dCh3aWxkID8KKyJcbk9wdGlvbmFsIGFzLW5hbWUgdGVtcGxhdGUg Y29udGFpbmluZyByZXBsYWNlbWVudCB2YXJpYWJsZXMgXAorbGlrZSBcXHYoZmlsZW5hbWUpIiA6 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAiT3B0aW9uYWwgbmFtZSB0byBzZW5kIGl0IHdp dGgiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIsJnAsTlVMTCkpIDwgMCkKKyAgICAg ICAgICAgICAgZ290byB4cHV0eDsKKworICAgICAgICAgICAgaWYgKHApIGlmICghKnApIHAgPSBO VUxMOworICAgICAgICAgICAgcCA9IGJyc3RyaXAocCk7CisKKyAgICAgICAgICAgIGlmIChwICYm ICpwKSB7CisgICAgICAgICAgICAgICAgbWFrZXN0cigmKHB2W1NORF9BU05dLnN2YWwpLHApOwor ICAgICAgICAgICAgICAgIGlmIChwdltTTkRfQVNOXS5zdmFsKQorICAgICAgICAgICAgICAgICAg cHZbU05EX0FTTl0uaXZhbCA9IDE7CisgICAgICAgICAgICAgICAgZGVidWcoRjExMCwiZnRwIHB1 dCAvYXMtbmFtZSAyIixwdltTTkRfQVNOXS5zdmFsLDApOworICAgICAgICAgICAgfQorICAgICAg ICB9CisgICAgfQorICAgIC8qIFNldCBjbWFyZzIgZnJvbSBhcy1uYW1lLCBob3dldmVyIHdlIGdv dCBpdC4gKi8KKworICAgIENIRUNLQ09OTigpOworICAgIGlmIChwdltTTkRfQVNOXS5pdmFsID4g MCAmJiBwdltTTkRfQVNOXS5zdmFsICYmICFhc25hbWJ1ZlswXSkgeworICAgICAgICBjaGFyICog cDsKKyAgICAgICAgcCA9IGJyc3RyaXAocHZbU05EX0FTTl0uc3ZhbCk7CisgICAgICAgIGNrc3Ry bmNweShhc25hbWJ1ZixwLENLTUFYUEFUSCsxKTsKKyAgICB9CisgICAgZGVidWcoRjExMCwiZnRw IHB1dCBhc25hbWJ1ZiIsYXNuYW1idWYsMCk7CisKKyAgICBpZiAocHZbU05EX0ZJTF0uaXZhbCA+ IDApIHsKKyAgICAgICAgaWYgKGNvbmZpcm1lZCkgeworICAgICAgICAgICAgaWYgKHpvcGVuaSha TUZJTEUscHZbU05EX0ZJTF0uc3ZhbCkgPCAxKSB7CisgICAgICAgICAgICAgICAgZGVidWcoRjEx MCwiZnRwIHB1dCBjYW4ndCBvcGVuIixwdltTTkRfRklMXS5zdmFsLDApOworICAgICAgICAgICAg ICAgIHByaW50ZigiP0ZhaWx1cmUgdG8gb3BlbiAlc1xuIixwdltTTkRfRklMXS5zdmFsKTsKKyAg ICAgICAgICAgICAgICB4ID0gLTk7CisgICAgICAgICAgICAgICAgZ290byB4cHV0eDsKKyAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIG1ha2VzdHIoJmZpbGVmaWxlLHB2W1NORF9GSUxdLnN2YWwp OyAvKiBPcGVuLCByZW1lbWJlciBuYW1lICovCisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJmdHAg UFVUIC9MSVNURklMRSBvcGVuZWQiLGZpbGVmaWxlLDApOworICAgICAgICAgICAgd2lsZCA9IDE7 CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGNvbmZpcm1lZCAmJiAhbGluZVswXSAmJiAhZmls ZWZpbGUpIHsKKyNpZm5kZWYgTk9NU0VORAorICAgICAgICBpZiAoZmlsZWhlYWQpIHsgICAgICAg ICAgICAgICAgIC8qIE9LIGlmIHdlIGhhdmUgYSBTRU5ELUxJU1QgKi8KKyAgICAgICAgICAgIG5m aWxzID0gZmlsZXNpbmxpc3Q7CisgICAgICAgICAgICBzbmRzcmMgPSBuZmlsczsgICAgICAgICAg ICAgLyogTGlrZSBNU0VORCAqLworICAgICAgICAgICAgYWRkbGlzdCA9IDE7ICAgICAgICAgICAg ICAgIC8qIEJ1dCB1c2luZyBhIGRpZmZlcmVudCBsaXN0Li4uICovCisgICAgICAgICAgICBmaWxl bmV4dCA9IGZpbGVoZWFkOworICAgICAgICAgICAgZ290byBkb3B1dDsKKyAgICAgICAgfQorI2Vu ZGlmIC8qIE5PTVNFTkQgKi8KKyAgICAgICAgcHJpbnRmKCI/RmlsZW5hbWUgcmVxdWlyZWQgYnV0 IG5vdCBnaXZlblxuIik7CisgICAgICAgIHggPSAtOTsKKyAgICAgICAgZ290byB4cHV0eDsKKyAg ICB9CisjaWZuZGVmIE5PTVNFTkQKKyAgICBhZGRsaXN0ID0gMDsgICAgICAgICAgICAgICAgICAg ICAgICAvKiBEb24ndCB1c2UgU0VORC1MSVNULiAqLworI2VuZGlmIC8qIE5PTVNFTkQgKi8KKwor ICAgIGlmIChtcHV0KSB7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1QVVQgKHJhdGhlciB0 aGFuIFBVVCkgKi8KKyNpZm5kZWYgTk9NU0VORAorICAgICAgICBjbWxpc3QgPSBtc2ZpbGVzOyAg ICAgICAgICAgICAgIC8qIExpc3Qgb2YgZmlsZXNwZWNzICovCisgICAgICAgIHNuZHNyYyA9IG5m aWxzOyAgICAgICAgICAgICAgICAgLyogcmF0aGVyIGZpbGVzcGVjIGFuZCBhcy1uYW1lICovCisj ZW5kaWYgLyogTk9NU0VORCAqLworICAgICAgICBwaXBlc2VuZCA9IDA7CisgICAgfSBlbHNlIGlm IChmaWxlZmlsZSkgeyAgICAgICAgICAgICAgLyogRmlsZSBjb250YWlucyBsaXN0IG9mIGZpbGVu YW1lcyAqLworICAgICAgICBzID0gIiI7CisgICAgICAgIGNtYXJnID0gIiI7CisgICAgICAgIGxp bmVbMF0gPSBOVUw7CisgICAgICAgIG5maWxzID0gMTsKKyAgICAgICAgc25kc3JjID0gMTsKKwor ICAgIH0gZWxzZSBpZiAocHZbU05EX0FSUl0uaXZhbCA8IDEgJiYgcHZbU05EX0NNRF0uaXZhbCA8 IDEpIHsKKworICAgICAgICAvKiBOb3QgTVNFTkQsIE1NT1ZFLCAvTElTVCwgb3IgL0FSUkFZICov CisgICAgICAgIG5maWxzID0gc25kc3JjID0gLTE7CisgICAgICAgIGlmICghd2lsZCkgeworICAg ICAgICAgICAgaWYgKHpjaGtpKHMpIDwgMCkgeworICAgICAgICAgICAgICAgIHByaW50ZigiP1Jl YWQgYWNjZXNzIGRlbmllZCAtIFwiJXNcIlxuIiwgcyk7CisgICAgICAgICAgICAgICAgeCA9IC05 OworICAgICAgICAgICAgICAgIGdvdG8geHB1dHg7CisgICAgICAgICAgICB9CisgICAgICAgIH0K KyAgICAgICAgaWYgKHMgIT0gbGluZSkgICAgICAgICAgICAgICAgICAvKiBXZSBtaWdodCBhbHJl YWR5IGhhdmUgZG9uZSB0aGlzLiAqLworICAgICAgICAgIGNrc3RybmNweShsaW5lLHMsTElOQlVG U0laKTsgIC8qIENvcHkgb2Ygc3RyaW5nIGp1c3QgcGFyc2VkLiAqLworI2lmZGVmIERFQlVHCisg ICAgICAgIGVsc2UKKyAgICAgICAgICBkZWJ1ZyhGMTEwLCJkb3hwdXQgbGluZT1zIixsaW5lLDAp OworI2VuZGlmIC8qIERFQlVHICovCisgICAgICAgIGNtYXJnID0gbGluZTsgICAgICAgICAgICAg ICAgICAgLyogRmlsZSB0byBzZW5kICovCisgICAgfQorI2lmbmRlZiBOT01TRU5ECisgICAgemZu cWZwKGNtYXJnLGZzcGVjbGVuLGZzcGVjKTsgICAgICAgLyogR2V0IGZ1bGwgbmFtZSAqLworI2Vu ZGlmIC8qIE5PTVNFTkQgKi8KKworICAgIGlmICghbXB1dCkgeyAgICAgICAgICAgICAgICAgICAg ICAgIC8qIEZvciBhbGwgYnV0IE1QVVQuLi4gKi8KKyNpZmRlZiBQSVBFU0VORAorICAgICAgICBp ZiAocHZbU05EX0NNRF0uaXZhbCA+IDApICAgICAgIC8qIC9DT01NQU5EIHNldHMgcGlwZXNlbmQg ZmxhZyAqLworICAgICAgICAgIHBpcGVzZW5kID0gMTsKKyAgICAgICAgZGVidWcoRjEwMSwiZnRw IHB1dCAvQ09NTUFORCBwaXBlc2VuZCIsIiIscGlwZXNlbmQpOworICAgICAgICBpZiAocGlwZXNl bmQgJiYgZmlsZWZpbGUpIHsKKyAgICAgICAgICAgIHByaW50ZigiP0ludmFsaWQgc3dpdGNoIGNv bWJpbmF0aW9uXG4iKTsKKyAgICAgICAgICAgIHggPSAtOTsKKyAgICAgICAgICAgIGdvdG8geHB1 dHg7CisgICAgICAgIH0KKyNlbmRpZiAvKiBQSVBFU0VORCAqLworCisjaWZuZGVmIE5PU1BMCisg ICAgLyogSWYgYXMtbmFtZSBnaXZlbiBhbmQgZmlsZXNwZWMgaXMgd2lsZCwgYXMtbmFtZSBtdXN0 IGNvbnRhaW4gdmFyaWFibGVzICovCisgICAgICAgIGlmICgod2lsZCB8fCBtcHV0KSAmJiBhc25h bWJ1ZlswXSkgeworICAgICAgICAgICAgY2hhciAqIHMgPSB0bXBidWY7CisgICAgICAgICAgICB4 ID0gVE1QQlVGU0laOworICAgICAgICAgICAgenpzdHJpbmcoYXNuYW1idWYsJnMsJngpOworICAg ICAgICAgICAgaWYgKCFzdHJjbXAodG1wYnVmLGFzbmFtYnVmKSkgeworICAgICAgICAgICAgICAg IHByaW50ZigKKyAgICAiP0FzLW5hbWUgZm9yIGZpbGUgZ3JvdXAgbXVzdCBjb250YWluIHZhcmlh YmxlcyBzdWNoIGFzIFxcdihmaWxlbmFtZSlcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgKTsK KyAgICAgICAgICAgICAgICB4ID0gLTk7CisgICAgICAgICAgICAgICAgZ290byB4cHV0eDsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgfQorI2VuZGlmIC8qIE5PU1BMICovCisgICAgfQorCisgIGRv cHV0OgorCisgICAgaWYgKHB2W1NORF9TSEhdLml2YWwgPiAwKSB7ICAgICAgICAgLyogU0VORCAv UVVJRVQuLi4gKi8KKyAgICAgICAgZmRpc3BsYSA9IDA7CisgICAgICAgIGRlYnVnKEYxMDEsImZ0 cCBwdXQgZGlzcGxheSIsIiIsZmRpc3BsYSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZGlzcGxh ID0gMTsKKyAgICAgICAgaWYgKGZ0cF9kZWIpCisJICBmZGlzcGxhID0gWFlGRF9COworICAgIH0K KworI2lmZGVmIFBVVEFSUkFZICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNFTkQgL0FSUkFZ Li4uICovCisgICAgaWYgKHB2W1NORF9BUlJdLml2YWwgPiAwKSB7CisgICAgICAgIGlmICghYXAp IHsgeCA9IC0yOyBnb3RvIHhwdXR4OyB9IC8qIChzaG91bGRuJ3QgaGFwcGVuKSAqLworICAgICAg ICBpZiAocmFuZ2VbMF0gPT0gLTEpICAgICAgICAgICAgIC8qIElmIGxvdyBlbmQgb2YgcmFuZ2Ug bm90IHNwZWNpZmllZCAqLworICAgICAgICAgIHJhbmdlWzBdID0gMTsgICAgICAgICAgICAgICAg IC8qIGRlZmF1bHQgdG8gMSAqLworICAgICAgICBpZiAocmFuZ2VbMV0gPT0gLTEpICAgICAgICAg ICAgIC8qIElmIGhpZ2ggbm90IHNwZWNpZmllZCAqLworICAgICAgICAgIHJhbmdlWzFdID0gYV9k aW1bYXJyYXl4XTsgICAgIC8qIGRlZmF1bHQgdG8gc2l6ZSBvZiBhcnJheSAqLworICAgICAgICBp ZiAoKHJhbmdlWzBdIDwgMCkgfHwgICAgICAgICAgIC8qIENoZWNrIHJhbmdlICovCisgICAgICAg ICAgICAocmFuZ2VbMF0gPiBhX2RpbVthcnJheXhdKSB8fAorICAgICAgICAgICAgKHJhbmdlWzFd IDwgcmFuZ2VbMF0pIHx8CisgICAgICAgICAgICAocmFuZ2VbMV0gPiBhX2RpbVthcnJheXhdKSkg eworICAgICAgICAgICAgcHJpbnRmKCI/QmFkIGFycmF5IHJhbmdlIC0gWyVkOiVkXVxuIixyYW5n ZVswXSxyYW5nZVsxXSk7CisgICAgICAgICAgICB4ID0gLTk7CisgICAgICAgICAgICBnb3RvIHhw dXR4OworICAgICAgICB9CisgICAgICAgIHNuZGFycmF5ID0gYXA7ICAgICAgICAgICAgICAgICAg LyogQXJyYXkgcG9pbnRlciAqLworICAgICAgICBzbmR4aW4gPSBhcnJheXg7ICAgICAgICAgICAg ICAgIC8qIEFycmF5IGluZGV4ICovCisgICAgICAgIHNuZHhsbyA9IHJhbmdlWzBdOyAgICAgICAg ICAgICAgLyogQXJyYXkgcmFuZ2UgKi8KKyAgICAgICAgc25keGhpID0gcmFuZ2VbMV07CisgICAg ICAgIHNuZHhuYW1bN10gPSAoY2hhcikoKHNuZHhpbiA9PSAxKSA/IDY0IDogc25keGluICsgQVJS QVlCQVNFKTsKKyAgICAgICAgaWYgKCFhc25hbWJ1ZlswXSkKKyAgICAgICAgICBja3N0cm5jcHko YXNuYW1idWYsc25keG5hbSxDS01BWFBBVEgpOworICAgICAgICBjbWFyZyA9ICIiOworICAgIH0K KyNlbmRpZiAvKiBQVVRBUlJBWSAqLworCisgICAgbW92aW5nID0gMDsKKworICAgIGlmIChwdltT TkRfQVJSXS5pdmFsIDwgMSkgeyAgICAgICAgIC8qIEZpbGUgc2VsZWN0aW9uICYgZGlzcG9zaXRp b24uLi4gKi8KKyAgICAgICAgaWYgKHB2W1NORF9ERUxdLml2YWwgPiAwKSAgICAgICAvKiAvREVM RVRFIHdhcyBzcGVjaWZpZWQgKi8KKyAgICAgICAgICBtb3ZpbmcgPSAxOworICAgICAgICBpZiAo cHZbU05EX0FGVF0uaXZhbCA+IDApICAgICAgIC8qIENvcHkgU0VORCBjcml0ZXJpYSAqLworICAg ICAgICAgIGNrc3RybmNweShzbmRhZnRlcixwdltTTkRfQUZUXS5zdmFsLDE5KTsKKyAgICAgICAg aWYgKHB2W1NORF9CRUZdLml2YWwgPiAwKQorICAgICAgICAgIGNrc3RybmNweShzbmRiZWZvcmUs cHZbU05EX0JFRl0uc3ZhbCwxOSk7CisgICAgICAgIGlmIChwdltTTkRfTkFGXS5pdmFsID4gMCkK KyAgICAgICAgICBja3N0cm5jcHkoc25kbmFmdGVyLHB2W1NORF9OQUZdLnN2YWwsMTkpOworICAg ICAgICBpZiAocHZbU05EX05CRV0uaXZhbCA+IDApCisgICAgICAgICAgY2tzdHJuY3B5KHNuZG5i ZWZvcmUscHZbU05EX05CRV0uc3ZhbCwxOSk7CisgICAgICAgIGlmIChwdltTTkRfRVhDXS5pdmFs ID4gMCkKKyAgICAgICAgICBtYWtlbGlzdChwdltTTkRfRVhDXS5zdmFsLHNuZGV4Y2VwdCxOU05E RVhDRVBUKTsKKyAgICAgICAgaWYgKHB2W1NORF9TTUFdLml2YWwgPiAtMSkKKyAgICAgICAgICBz bmRzbWFsbGVyID0gcHZbU05EX1NNQV0ud3ZhbDsKKyAgICAgICAgaWYgKHB2W1NORF9MQVJdLml2 YWwgPiAtMSkKKyAgICAgICAgICBzbmRsYXJnZXIgPSBwdltTTkRfTEFSXS53dmFsOworICAgICAg ICBpZiAocHZbU05EX05BTV0uaXZhbCA+IC0xKQorICAgICAgICAgIHhfY252ID0gcHZbU05EX05B TV0uaXZhbDsKKyAgICAgICAgaWYgKHB2W1NORF9VU05dLml2YWwgPiAtMSkKKyAgICAgICAgICB4 X3VzbiA9IHB2W1NORF9VU05dLml2YWw7CisgICAgICAgIGlmIChwdltTTkRfRVJSXS5pdmFsID4g LTEpCisgICAgICAgICAgcHV0ZXJyb3IgPSBwdltTTkRfRVJSXS5pdmFsOworCisjaWZkZWYgRE9V UERBVEUKKyAgICAgICAgaWYgKHB2W1NORF9VUERdLml2YWwgPiAwKSB7CisgICAgICAgICAgICBp ZiAoeF91c24pIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIj9Db25mbGljdGluZyBzd2l0Y2hl czogL1VQREFURSAvVU5JUVVFXG4iKTsKKyAgICAgICAgICAgICAgICB4ID0gLTk7CisgICAgICAg ICAgICAgICAgZ290byB4cHV0eDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHB1dGZsYWdz IHw9IFBVVF9VUEQ7CisJICAgIGZ0cF9kYXRlcyB8PSAyOworICAgICAgICB9CisjaWZkZWYgQ09N TUVOVAorCS8qIFRoaXMgd29ya3MgYnV0IGl0J3MgdXNlbGVzcywgbWF5YmUgZGFuZ2Vyb3VzICov CisgICAgICAgIGlmIChwdltTTkRfRElGXS5pdmFsID4gMCkgeworICAgICAgICAgICAgaWYgKHhf dXNuKSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCI/Q29uZmxpY3Rpbmcgc3dpdGNoZXM6IC9E QVRFUy1ESUZGRVIgL1VOSVFVRVxuIik7CisgICAgICAgICAgICAgICAgeCA9IC05OworICAgICAg ICAgICAgICAgIGdvdG8geHB1dHg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwdXRmbGFn cyB8PSBQVVRfRElGOworCSAgICBmdHBfZGF0ZXMgfD0gMjsKKyAgICAgICAgfQorI2VuZGlmIC8q IENPTU1FTlQgKi8KKyNlbmRpZiAvKiBET1VQREFURSAqLworCisgICAgICAgIGlmIChwdltTTkRf U0lNXS5pdmFsID4gMCkKKyAgICAgICAgICBwdXRmbGFncyB8PSBQVVRfU0lNOworCisgICAgICAg IGlmIChwdltTTkRfUFJNXS5pdmFsID4gLTEpIHsKKyNpZmRlZiBVTklYCisgICAgICAgICAgICBp ZiAoeF91c24pIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIj9Db25mbGljdGluZyBzd2l0Y2hl czogL1BFUk1JU1NJT05TIC9VTklRVUVcbiIpOworICAgICAgICAgICAgICAgIHggPSAtOTsKKyAg ICAgICAgICAgICAgICBnb3RvIHhwdXR4OworICAgICAgICAgICAgfQorICAgICAgICAgICAgeF9w cm0gPSBwdltTTkRfUFJNXS5pdmFsOworI2Vsc2UgLyogVU5JWCAqLworICAgICAgICAgICAgcHJp bnRmKCI/L1BFUk1JU1NJT05TIHN3aXRjaCBpcyBub3Qgc3VwcG9ydGVkXG4iKTsKKyNlbmRpZiAv KiBVTklYICovCisgICAgICAgIH0KKyNpZmRlZiBGVFBfUkVTVEFSVAorICAgICAgICBpZiAocHZb U05EX1JFU10uaXZhbCA+IDApIHsKKwkgICAgaWYgKCFzaXplb2spIHsKKwkJcHJpbnRmKCI/UFVU IC9SRVNUQVJUIGNhbid0IGJlIHVzZWQgYmVjYXVzZSBTSVpFIGRpc2FibGVkLlxuIik7CisgICAg ICAgICAgICAgICAgeCA9IC05OworICAgICAgICAgICAgICAgIGdvdG8geHB1dHg7CisJICAgIH0K KyAgICAgICAgICAgIGlmICh4X3VzbiB8fCBwdXRmbGFncykgeworICAgICAgICAgICAgICAgIHBy aW50ZigiP0NvbmZsaWN0aW5nIHN3aXRjaGVzOiAvUkVDT1ZFUiAlc1xuIiwKKyAgICAgICAgICAg ICAgICAgICAgICAgeF91c24gJiYgcHV0ZmxhZ3MgPyAiL1VOSVFVRSAvVVBEQVRFIiA6CisgICAg ICAgICAgICAgICAgICAgICAgICh4X3VzbiA/ICIvVU5JUVVFIiA6ICIvVVBEQVRFIikKKyAgICAg ICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICB4ID0gLTk7CisgICAgICAgICAg ICAgICAgZ290byB4cHV0eDsKKyAgICAgICAgICAgIH0KKyNpZm5kZWYgTk9DU0VUUworICAgICAg ICAgICAgaWYgKHhfeGxhICYmCisgICAgICAgICAgICAgICAgKHhfY3NsID09IEZDX1VDUzIgfHwK KyAgICAgICAgICAgICAgICAgeF9jc2wgPT0gRkNfVVRGOCB8fAorICAgICAgICAgICAgICAgICB4 X2NzciA9PSBGQ19VQ1MyIHx8CisgICAgICAgICAgICAgICAgIHhfY3NyID09IEZDX1VURjgpKSB7 CisgICAgICAgICAgICAgICAgcHJpbnRmKCI/L1JFQ09WRVIgY2FuIG5vdCBiZSB1c2VkIHdpdGgg VW5pY29kZSB0cmFuc2xhdGlvblxuIik7CisgICAgICAgICAgICAgICAgeCA9IC05OworICAgICAg ICAgICAgICAgIGdvdG8geHB1dHg7CisgICAgICAgICAgICB9CisjZW5kaWYgLyogTk9DU0VUUyAq LworICAgICAgICAgICAgcHV0ZmxhZ3MgPSBQVVRfUkVTOworICAgICAgICB9CisjZW5kaWYgLyog RlRQX1JFU1RBUlQgKi8KKyAgICB9CisgICAgZGVidWcoRjEwMSwiZnRwIFBVVCByZXN0YXJ0Iiwi IixwdXRmbGFncyAmIFBVVF9SRVMpOworICAgIGRlYnVnKEYxMDEsImZ0cCBQVVQgdXBkYXRlIiwi IixwdXRmbGFncyAmIFBVVF9VUEQpOworCisjaWZkZWYgUElQRVNFTkQKKyAgICBpZiAocHZbU05E X0ZMVF0uaXZhbCA+IDApIHsgICAgICAgICAvKiBIYXZlIFNFTkQgRklMVEVSPyAqLworICAgICAg ICBpZiAoIXB2W1NORF9GTFRdLnN2YWwpIHsKKyAgICAgICAgICAgIHNuZGZpbHRlciA9IE5VTEw7 CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzbmRmaWx0ZXIgPSAoY2hhciAqKSBtYWxs b2MoKGludCkgc3RybGVuKHB2W1NORF9GTFRdLnN2YWwpICsgMSk7CisgICAgICAgICAgICBpZiAo c25kZmlsdGVyKSBzdHJjcHkoc25kZmlsdGVyLHB2W1NORF9GTFRdLnN2YWwpOyAvKiBzYWZlICov CisgICAgICAgIH0KKyAgICAgICAgZGVidWcoRjExMCwiZnRwIHB1dCAvRklMVEVSIiwgc25kZmls dGVyLCAwKTsKKyAgICB9CisgICAgaWYgKHNuZGZpbHRlciB8fCBwaXBlc2VuZCkgICAgICAgICAg LyogTm8gL1VQREFURSBvciAvUkVTVEFSVCAqLworICAgICAgaWYgKHB1dGZsYWdzKSAgICAgICAg ICAgICAgICAgICAgIC8qIHdpdGggcGlwZXMgb3IgZmlsdGVycyAqLworICAgICAgICBwdXRmbGFn cyA9IDA7CisjZW5kaWYgLyogUElQRVNFTkQgKi8KKworICAgIHRmYyA9IChDS19PRkZfVCkwOwkJ CS8qIEluaXRpYWxpemUgc3RhdHMgYW5kIGNvdW50ZXJzICovCisgICAgZmlsY250ID0gMDsKKyAg ICBwa3RudW0gPSAwOworICAgIHNwYWNrZXRzID0gMEw7CisKKyAgICBpZiAod2lsZCkgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiAoaXMgdGhpcyBuZWNlc3Nhcnk/KSAqLworICAgICAgY3gg PSBGVFBfTVBVOworCisgICAgdDAgPSBnbXN0aW1lcigpOyAgICAgICAgICAgICAgICAgICAgLyog UmVjb3JkIHN0YXJ0aW5nIHRpbWUgKi8KKworICAgIGRvbmUgPSAwOyAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIExvb3AgY29udHJvbCAqLworICAgIGNhbmNlbGdyb3VwID0gMDsKKworICAg IGNkbGV2ZWwgPSAwOworICAgIGNkc2ltbHZsID0gMDsKKyAgICB3aGlsZSAoIWRvbmUgJiYgIWNh bmNlbGdyb3VwKSB7ICAgICAvKiBMb29wIGZvciBhbGwgZmlsZXMgKi8KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBvciB1bnRpbCBjYW5jZWxlZC4gKi8KKyNpZmRl ZiBGVFBfUFJPWFkKKyAgICAgICAgLyoKKyAgICAgICAgICAgSWYgd2UgYXJlIHVzaW5nIGEgcHJv eHksIHdlIGRvbid0IHVzZSB0aGUgbG9jYWwgZmlsZSBsaXN0OworICAgICAgICAgICBpbnN0ZWFk IHdlIHVzZSB0aGUgbGlzdCBvbiB0aGUgcmVtb3RlIG1hY2hpbmUgd2hpY2ggd2Ugd2FudAorICAg ICAgICAgICBzZW50IHRvIHNvbWVvbmUgZWxzZSwgYW5kIHdlIHVzZSByZW1nbG9iKCkgdG8gZ2V0 IHRoZSBuYW1lcy4KKyAgICAgICAgICAgQnV0IGluIHRoYXQgY2FzZSB3ZSBzaG91bGRuJ3QgZXZl biBiZSBleGVjdXRpbmcgdGhpcyByb3V0aW5lOworICAgICAgICAgICBzZWUgZnRwX21wdXQoKS4K KyAgICAgICAgKi8KKyNlbmRpZiAvKiBGVFBfUFJPWFkgKi8KKworICAgICAgICBjYW5jZWxmaWxl ID0gMDsKKyAgICAgICAgeCA9IGduZmlsZSgpOyAgICAgICAgICAgICAgICAgICAvKiBHZXQgbmV4 dCBmaWxlIGZyb20gbGlzdChzKSAqLworCisgICAgICAgIGlmICh4ID09IDApICAgICAgICAgICAg ICAgICAgICAgLyogKHNlZSBnbmZpbGUoKSBjb21tZW50cy4uLikgKi8KKyAgICAgICAgICB4ID0g Z25mZXJyb3I7CisgICAgICAgIGRlYnVnKEYxMTEsIkZUUCBQVVQgZ25maWxlIixmaWxuYW0seCk7 CisgICAgICAgIGRlYnVnKEYxMTEsIkZUUCBQVVQgYmluYXJ5IixmaWxuYW0sYmluYXJ5KTsKKwor ICAgICAgICBzd2l0Y2ggKHgpIHsKKyAgICAgICAgICBjYXNlIDE6ICAgICAgICAgICAgICAgICAg ICAgICAvKiBGaWxlIHRvIHNlbmQgKi8KKyAgICAgICAgICAgIHMyID0gYXNuYW1idWY7CisjaWZu ZGVmIE5PU1BMCisgICAgICAgICAgICBpZiAoYXNuYW1idWZbMF0pIHsgICAgICAgICAgLyogQXMt bmFtZSAqLworICAgICAgICAgICAgICAgIGludCBuOyBjaGFyICpwOyAgICAgICAgIC8qIHRvIGJl IGV2YWx1YXRlZC4uLiAqLworICAgICAgICAgICAgICAgIG4gPSBUTVBCVUZTSVo7CisgICAgICAg ICAgICAgICAgcCA9IHRtcGJ1ZjsKKyAgICAgICAgICAgICAgICB6enN0cmluZyhhc25hbWJ1Ziwm cCwmbik7CisgICAgICAgICAgICAgICAgczIgPSB0bXBidWY7CisgICAgICAgICAgICAgICAgZGVi dWcoRjExMCwiZnRwIHB1dCBhc25hbWUiLHMyLDApOworICAgICAgICAgICAgfQorI2VuZGlmIC8q IE5PU1BMICovCisgICAgICAgICAgICByYyA9IHB1dGZpbGUoY3gsICAgICAgICAgICAgLyogRnVu Y3Rpb24gKFBVVCwgQVBQRU5EKSAqLworICAgICAgICAgICAgICAgICAgICBmaWxuYW0sIHMyLCAg ICAgICAgIC8qIE5hbWUgdG8gc2VuZCwgYXMtbmFtZSAqLworICAgICAgICAgICAgICAgICAgICBm b3JjZXR5cGUsIG1vdmluZywgIC8qIFBhcmFtZXRlcnMgZnJvbSBzd2l0Y2hlcy4uLiAqLworICAg ICAgICAgICAgICAgICAgICBzbmRfbW92ZSwgc25kX3JlbmFtZSwgc3J2X3JlbmFtLAorICAgICAg ICAgICAgICAgICAgICB4X2NudiwgeF91c24sIHhmaWxldHlwZSwgeF9wcm0sCisjaWZuZGVmIE5P Q1NFVFMKKyAgICAgICAgICAgICAgICAgICAgeF9jc2wsICgheF94bGEgPyAtMSA6IHhfY3NyKSwK KyNlbHNlCisgICAgICAgICAgICAgICAgICAgIC0xLCAtMSwKKyNlbmRpZiAvKiBOT0NTRVRTICov CisgICAgICAgICAgICAgICAgICAgIHB1dGZsYWdzCisgICAgICAgICAgICAgICAgICAgICk7Cisg ICAgICAgICAgICBkZWJ1ZyhGMTExLCJmdHAgcHV0IHB1dGZpbGUgcmMiLGZpbG5hbSxyYyk7Cisg ICAgICAgICAgICBkZWJ1ZyhGMTExLCJmdHAgcHV0IHB1dGZpbGUgY2FuY2VsZmlsZSIsZmlsbmFt LGNhbmNlbGZpbGUpOworICAgICAgICAgICAgZGVidWcoRjExMSwiZnRwIHB1dCBwdXRmaWxlIGNh bmNlbGdyb3VwIixmaWxuYW0sY2FuY2VsZ3JvdXApOworICAgICAgICAgICAgaWYgKHJjID4gLTEp IHsKKyAgICAgICAgICAgICAgICBnb29kKys7CisgICAgICAgICAgICAgICAgc3RhdHVzID0gMTsK KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjYW5jZWxmaWxlKQorICAgICAgICAgICAg ICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmIChyYyA8IDApIHsKKyAgICAgICAgICAgICAgICBm dHBfZmFpKys7CisgICAgICAgICAgICAgICAgaWYgKHB1dGVycm9yKSB7CisgICAgICAgICAgICAg ICAgICAgIHN0YXR1cyA9IDA7CisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiP0ZhdGFsIHVw bG9hZCBlcnJvcjogJXNcbiIsZmlsbmFtKTsKKyAgICAgICAgICAgICAgICAgICAgZG9uZSsrOwor ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbnRpbnVlOwor ICAgICAgICAgIGNhc2UgMDogICAgICAgICAgICAgICAgICAgICAgIC8qIE5vIG1vcmUgZmlsZXMs IGRvbmUgKi8KKyAgICAgICAgICAgIGRvbmUrKzsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg ICAgICAgIGNhc2UgLTE6CisgICAgICAgICAgICBwcmludGYoIj8lczogZmlsZSBub3QgZm91bmQg LSBcIiVzXCJcbiIsCisgICAgICAgICAgICAgICAgICAgcHV0ZXJyb3IgPyAiRmF0YWwiIDogIldh cm5pbmciLAorICAgICAgICAgICAgICAgICAgIGZpbG5hbQorICAgICAgICAgICAgICAgICAgICk7 CisgICAgICAgICAgICBpZiAocHV0ZXJyb3IpIHsKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSAw OworICAgICAgICAgICAgICAgIGRvbmUrKzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgIGNhc2UgLTI6CisgICAg ICAgICAgICBpZiAocHV0ZXJyb3IpIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIj9GYXRhbDog ZmlsZSBub3QgZm91bmQgLSBcIiVzXCJcbiIsIGZpbG5hbSk7CisgICAgICAgICAgICAgICAgc3Rh dHVzID0gMDsKKyAgICAgICAgICAgICAgICBkb25lKys7CisgICAgICAgICAgICAgICAgYnJlYWs7 CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb250aW51ZTsgICAgICAgICAgICAgICAgICAg LyogTm90IHJlYWRhYmxlLCBrZWVwIGdvaW5nICovCisgICAgICAgICAgY2FzZSAtMzoKKyAgICAg ICAgICAgIGlmIChwdXRlcnJvcikgeworICAgICAgICAgICAgICAgIHByaW50ZigiP0ZhdGFsOiBS ZWFkIGFjY2VzcyBkZW5pZWQgLSBcIiVzXCJcbiIsIGZpbG5hbSk7CisgICAgICAgICAgICAgICAg c3RhdHVzID0gMDsKKyAgICAgICAgICAgICAgICBkb25lKys7CisgICAgICAgICAgICAgICAgYnJl YWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwcmludGYoIj9XYXJuaW5nIGFjY2VzcyBk ZW5pZWQgLSBcIiVzXCJcbiIsIGZpbG5hbSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyNpZmRl ZiBDT01NRU5UCisgICAgICAgICAgY2FzZSAtNDogICAgICAgICAgICAgICAgICAgICAgLyogQ2Fu Y2VsZWQgKi8KKyAgICAgICAgICAgIGRvbmUrKzsKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlm IC8qIENPTU1FTlQgKi8KKyAgICAgICAgICBjYXNlIC01OgorICAgICAgICAgICAgcHJpbnRmKCI/ VG9vIG1hbnkgZmlsZXMgbWF0Y2hcbiIpOworICAgICAgICAgICAgZG9uZSsrOworICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgICAgY2FzZSAtNjoKKyAgICAgICAgICAgIGlmIChnb29kIDwgMSkK KyAgICAgICAgICAgICAgcHJpbnRmKCI/Tm8gZmlsZXMgc2VsZWN0ZWRcbiIpOworICAgICAgICAg ICAgZG9uZSsrOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAg ICAgICAgIHByaW50ZigiP2dldG5leHRmaWxlKCkgLSB1bmtub3duIGZhaWx1cmVcbiIpOworICAg ICAgICAgICAgZG9uZSsrOworICAgICAgICB9CisgICAgfQorICAgIGlmIChjZGxldmVsID4gMCkg eworICAgICAgICB3aGlsZSAoY2RsZXZlbC0tKSB7CisgICAgICAgICAgICBpZiAoY2RzaW1sdmwp IHsKKyAgICAgICAgICAgICAgICBjZHNpbWx2bC0tOworICAgICAgICAgICAgfSBlbHNlIGlmICgh ZG9mdHBjZHVwKCkpCisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAg IGlmIChzdGF0dXMgPiAwKSB7CisgICAgICAgIGlmIChjYW5jZWxncm91cCkKKyAgICAgICAgICBz dGF0dXMgPSAwOworICAgICAgICBlbHNlIGlmIChjYW5jZWxmaWxlICYmIGdvb2QgPCAxKQorICAg ICAgICAgIHN0YXR1cyA9IDA7CisgICAgfQorICAgIHN1Y2Nlc3MgPSBzdGF0dXM7CisgICAgeCA9 IHN1Y2Nlc3M7CisKKyAgeHB1dHg6CisgICAgaWYgKHggPiAtMSkgeworI2lmZGVmIEdGVElNRVIK KyAgICAgICAgdDEgPSBnbXN0aW1lcigpOyAgICAgICAgICAgICAgICAvKiBFbmQgdGltZSAqLwor ICAgICAgICBzZWMgPSAoQ0tGTE9BVCkoKENLRkxPQVQpKHQxIC0gdDApIC8gMTAwMC4wKTsgLyog U3RhdHMgKi8KKyAgICAgICAgaWYgKCFzZWMpIHNlYyA9IDAuMDAxOworICAgICAgICBmcHRzZWNz ID0gc2VjOworI2Vsc2UKKyAgICAgICAgc2VjID0gKHQxIC0gdDApIC8gMTAwMDsKKyAgICAgICAg aWYgKCFzZWMpIHNlYyA9IDE7CisjZW5kaWYgLyogR0ZUSU1FUiAqLworICAgICAgICB0ZmNwcyA9 IChsb25nKSAodGZjIC8gc2VjKTsKKyAgICAgICAgdHNlY3MgPSAoaW50KXNlYzsKKyAgICAgICAg bGFzdHhmZXIgPSBXX0ZUUHxXX1NFTkQ7CisgICAgICAgIHhmZXJzdGF0ID0gc3VjY2VzczsKKyAg ICAgICAgaWYgKGRweWFjdGl2ZSkKKwkgIGZ0c2NyZWVuKHN0YXR1cyA+IDAgPyBTQ1JfVEMgOiBT Q1JfQ1csIDAsIChDS19PRkZfVCkwLCAiIik7CisgICAgfQorICAgIGZvciAoaSA9IDA7IGkgPD0g U05EX01BWDsgaSsrKSB7ICAgIC8qIEZyZWUgbWFsbG9jJ2QgbWVtb3J5ICovCisgICAgICAgIGlm IChwdltpXS5zdmFsKQorICAgICAgICAgIGZyZWUocHZbaV0uc3ZhbCk7CisgICAgfQorICAgIGZ0 cmVzZXQoKTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVuZG8gc3dpdGNoIGVmZmVjdHMg Ki8KKyAgICBkcHlhY3RpdmUgPSAwOworICAgIHJldHVybih4KTsKK30KKworCitzdGF0aWMgY2hh ciAqKiBtZ2V0bGlzdCA9IE5VTEw7ICAgICAgICAgLyogRm9yIE1HRVQgKi8KK3N0YXRpYyBpbnQg bWdldG4gPSAwLCBtZ2V0eCA9IDA7CitzdGF0aWMgY2hhciB4dG1wYnVmWzQwOTZdOworCisvKgor ICBjIG0gZCBsIGkgbiBnIGUgdAorCisgIEdldCBmaWxlcyBzcGVjaWZpZWQgYnkgLWcgY29tbWFu ZC1saW5lIG9wdGlvbi4KKyAgRmlsZSBsaXN0IGlzIHNldCB1cCBpbiBjbWxpc3RbXSBieSBja3V1 c3kuYzsgbmZpbHMgaXMgbGVuZ3RoIG9mIGxpc3QuCisqLworaW50CitjbWRsaW5nZXQoc3RheSkg aW50IHN0YXk7IHsKKyAgICBpbnQgaSwgeCwgcmMgPSAwLCBkb25lID0gMCwgZ29vZCA9IDAsIHN0 YXR1cyA9IDAsIGFwcGVuZCA9IDA7CisgICAgaW50IGxjcyA9IC0xLCByY3MgPSAtMSwgeGxhdGUg PSAwOworICAgIGludCBmaXJzdCA9IDE7CisgICAgaW50IG1nZXQgPSAxOworICAgIGludCBuYzsK KyAgICBjaGFyICogcywgKiBzMiwgKiBzMzsKKyAgICBVTE9ORyB0MCwgdDE7ICAgICAgICAgICAg ICAgICAgICAgICAvKiBUaW1lcyBmb3Igc3RhdHMgKi8KKyNpZmRlZiBHRlRJTUVSCisgICAgQ0tG TE9BVCBzZWM7CisjZWxzZQorICAgIGludCBzZWMgPSAwOworI2VuZGlmIC8qIEdGVElNRVIgKi8K KworICAgIGlmIChxdWlldCkgeyAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1xIHJlYWxseSBt ZWFucyBxdWlldCAqLworICAgICAgICBkaXNwbGEgPSAwOworICAgICAgICBmZGlzcGxhID0gMDsK KyAgICB9IGVsc2UgeworICAgICAgICBkaXNwbGEgPSAxOworICAgICAgICBmZGlzcGxhID0gWFlG RF9COworICAgIH0KKyAgICB0ZXN0aW5nID0gMDsKKyAgICBkcHlhY3RpdmUgPSAwOworICAgIG91 dDJzY3JlZW4gPSAwOworICAgIHdoYXQgPSBXX0ZUUHxXX1JFQ1Y7CisgICAgbWdldG1ldGhvZCA9 IDA7CisgICAgbWdldGZvcmNlZCA9IDA7CisKKyAgICBoYXZldHlwZSA9IDA7CisgICAgaGF2ZXNp emUgPSAoQ0tfT0ZGX1QpLTE7CisgICAgbWFrZXN0cigmaGF2ZW1kdG0sTlVMTCk7CisKKyAgICBp ZiAoZnRwX2ZuYyA8IDApCisgICAgICBmdHBfZm5jID0gZm5jYWN0OworCisjaWZuZGVmIE5PU1BM CisgICAgY21kX3F1b3RpbmcgPSAwOworI2VuZGlmIC8qIE5PU1BMICovCisgICAgZGVidWcoRjEw MSwiZnRwIGNtZGxpbmdldCBuZmlscyIsIiIsbmZpbHMpOworCisgICAgaWYgKGZ0cF9jbnYgPT0g Q05WX0FVVE8pIHsgICAgICAgICAgLyogTmFtZSBjb252ZXJzaW9uIGlzIGF1dG8gKi8KKyAgICAg ICAgaWYgKGFsaWtlKSB7ICAgICAgICAgICAgICAgICAgICAvKiBJZiBzZXJ2ZXIgJiBjbGllbnQg YXJlIGFsaWtlICovCisgICAgICAgICAgICBuYyA9IDA7ICAgICAgICAgICAgICAgICAgICAgLyog bm8gY29udmVyc2lvbiAqLworICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAg IC8qIElmIHRoZXkgYXJlIGRpZmZlcmVudCAqLworICAgICAgICAgICAgaWYgKHNlcnZlcnR5cGUg PT0gU1lTX1VOSVggfHwgc2VydmVydHlwZSA9PSBTWVNfV0lOMzIpCisgICAgICAgICAgICAgIG5j ID0gLTE7ICAgICAgICAgICAgICAgICAgLyogb25seSBtaW5pbWFsIGNvbnZlcnNpb25zIG5lZWRl ZCAqLworICAgICAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgIC8qIG90aGVyd2lz ZSAqLworICAgICAgICAgICAgICBuYyA9IDE7ICAgICAgICAgICAgICAgICAgIC8qIGZ1bGwgY29u dmVyc2lvbiAqLworICAgICAgICB9CisgICAgfSBlbHNlICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogTm90IGF1dG8gLSBkbyB3aGF0IHVzZXIgc2FpZCAqLworICAgICAgbmMgPSBmdHBf Y252OworCisgICAgaWYgKG5maWxzIDwgMSkKKyAgICAgIGRvZXhpdChCQURfRVhJVCwtMSk7CisK KyAgICB0MCA9IGdtc3RpbWVyKCk7ICAgICAgICAgICAgICAgICAgICAvKiBTdGFydGluZyB0aW1l IGZvciB0aGlzIGJhdGNoICovCisKKyNpZm5kZWYgTk9DU0VUUworICAgIGlmICh4bGF0ZSkgeyAg ICAgICAgICAgICAgICAgICAgICAgIC8qIFNFVCBGVFAgQ0hBUkFDVEVSLVNFVC1UUkFOU0xBVElP TiAqLworICAgICAgICBsY3MgPSBmdHBfY3NsOyAgICAgICAgICAgICAgICAgIC8qIExvY2FsIGNo YXJzZXQgKi8KKyAgICAgICAgaWYgKGxjcyA8IDApIGxjcyA9IGZjaGFyc2V0OworICAgICAgICBp ZiAobGNzIDwgMCkgeGxhdGUgPSAwOworICAgIH0KKyAgICBpZiAoeGxhdGUpIHsgICAgICAgICAg ICAgICAgICAgICAgICAvKiBTdGlsbCBPTj8gKi8KKyAgICAgICAgcmNzID0gZnRwX2NzeDsgICAg ICAgICAgICAgICAgICAvKiBSZW1vdGUgKFNlcnZlcikgY2hhcnNldCAqLworICAgICAgICBpZiAo cmNzIDwgMCkgcmNzID0gZnRwX2NzcjsKKyAgICAgICAgaWYgKHJjcyA8IDApIHhsYXRlID0gMDsK KyAgICB9CisjZW5kaWYgLyogTk9DU0VUUyAqLworICAgIC8qCisgICAgICBJZiB3ZSBoYXZlIG9u bHkgb25lIGZpbGUgYW5kIGl0IGlzIGEgZGlyZWN0b3J5LCB0aGVuIHdlIGFzayBmb3IgYQorICAg ICAgbGlzdGluZyBvZiBpdHMgY29udGVudHMsIHJhdGhlciB0aGFuIHJldHJpZXZpbmcgdGhlIGRp cmVjdG9yeSBmaWxlCisgICAgICBpdHNlbGYuICBUaGlzIGlzIHdoYXQgKGUuZy4pIE5ldHNjYXBl IGRvZXMuCisgICAgKi8KKyAgICBpZiAobmZpbHMgPT0gMSkgeworICAgICAgICBpZiAoZG9mdHBj d2QoKGNoYXIgKiljbWxpc3RbbWdldHhdLC0xKSkgeworICAgICAgICAgICAgLyogSWYgd2UgY2Fu IENEIHRvIGl0LCBpdCBtdXN0IGJlIGEgZGlyZWN0b3J5ICovCisgICAgICAgICAgICBpZiAocmVj dXJzaXZlKSB7CisgICAgICAgICAgICAgICAgY21saXN0W21nZXR4XSA9ICIqIjsKKyAgICAgICAg ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3RhdHVzID0KKyAgICAgICAgICAgICAgICAg IChyZWN2cmVxdWVzdCgiTElTVCIsIi0iLCIiLCJ3YiIsMCwwLE5VTEwseGxhdGUsbGNzLHJjcyk9 PTApOworICAgICAgICAgICAgICAgIGRvbmUgPSAxOworICAgICAgICAgICAgfQorICAgICAgICB9 CisgICAgfQorLyoKKyAgVGhlIGZvbGxvd2luZyBpcyB0byB3b3JrIGFyb3VuZCBVTklYIHNlcnZl cnMgd2hpY2gsIHdoZW4gZ2l2ZW4gYSBjb21tYW5kCisgIGxpa2UgIk5MU1QgcGF0aC9ibGFoIiAo bm90IHdpbGQpIHJldHVybnMgdGhlIGJhc2VuYW1lIHdpdGhvdXQgdGhlIHBhdGguCisqLworICAg IGlmICghZG9uZSAmJiBzZXJ2ZXJ0eXBlID09IFNZU19VTklYICYmIG5maWxzID09IDEpIHsKKyAg ICAgICAgbWdldCA9IGlzd2lsZChjbWxpc3RbbWdldHhdKTsKKyAgICB9CisgICAgaWYgKCFtZ2V0 ICYmICFkb25lKSB7ICAgICAgICAgICAgICAgLyogSW52b2tlZCBieSBjb21tYW5kLWxpbmUgRlRQ IFVSTCAqLworICAgICAgICBpZiAoZnRwX2RlYikKKyAgICAgICAgICBwcmludGYoIkRPSU5HIEdF VC4uLlxuIik7CisgICAgICAgIGRvbmUrKzsKKyAgICAgICAgY2FuY2VsZmlsZSA9IDA7ICAgICAg ICAgICAgICAgICAvKiBUaGlzIGZpbGUgbm90IGNhbmNlbGVkIHlldCAqLworICAgICAgICBzID0g Y21saXN0W21nZXR4XTsKKyAgICAgICAgcmMgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAv KiBJbml0aWFsIHJldHVybiBjb2RlICovCisJZnNpemUgPSAoQ0tfT0ZGX1QpLTE7CisJaWYgKHNp emVvaykgeworCSAgICB4ID0gZnRwY21kKCJTSVpFIixzLGxjcyxyY3MsZnRwX3ZibSk7IC8qIEdl dCByZW1vdGUgZmlsZSdzIHNpemUgKi8KKwkgICAgaWYgKHggPT0gUkVQTFlfQ09NUExFVEUpCisJ ICAgICAgZnNpemUgPSBja2F0b2ZzKCZmdHBfcmVwbHlfc3RyWzRdKTsKKwl9CisgICAgICAgIGNr c3RybmNweShmaWxuYW0scyxDS01BWFBBVEgpOyAgLyogRm9yIFx2KGZpbGVuYW1lKSAqLworICAg ICAgICBkZWJ1ZyhGMTExLCJmdHAgY21kbGluZ2V0IGZpbG5hbSIsZmlsbmFtLGZzaXplKTsKKwor ICAgICAgICBuenJ0b2wocyx0bXBidWYsbmMsMCxDS01BWFBBVEgpOyAvKiBTdHJpcCBwYXRoIGFu ZCBtYXliZSBjb252ZXJ0ICovCisgICAgICAgIHMyID0gdG1wYnVmOworCisgICAgICAgIC8qIElm IGxvY2FsIGZpbGUgYWxyZWFkeSBleGlzdHMsIHRha2UgY29sbGlzaW9uIGFjdGlvbiAqLworCisg ICAgICAgIGlmICh6Y2hraShzMikgPiAtMSkgeworICAgICAgICAgICAgc3dpdGNoIChmdHBfZm5j KSB7CisgICAgICAgICAgICAgIGNhc2UgWFlGWF9BOiAgICAgICAgICAgICAgLyogQXBwZW5kICov CisgICAgICAgICAgICAgICAgYXBwZW5kID0gMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgICAgICAgY2FzZSBYWUZYX1I6ICAgICAgICAgICAgICAvKiBSZW5hbWUgKi8KKyAgICAg ICAgICAgICAgY2FzZSBYWUZYX0I6IHsgICAgICAgICAgICAvKiBCYWNrdXAgKi8KKyAgICAgICAg ICAgICAgICAgIGNoYXIgKiBwID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgIGludCB4ID0gLTE7 CisgICAgICAgICAgICAgICAgICB6bmV3bihzMiwmcCk7ICAgICAgICAgLyogTWFrZSB1bmlxdWUg bmFtZSAqLworICAgICAgICAgICAgICAgICAgZGVidWcoRjExMCwiZnRwIGNtZGxpbmdldCB6bmV3 biIscCwwKTsKKyAgICAgICAgICAgICAgICAgIGlmIChmdHBfZm5jID09IFhZRlhfQikgeyAvKiBC YWNrdXAgZXhpc3RpbmcgZmlsZSAqLworICAgICAgICAgICAgICAgICAgICAgIHggPSB6cmVuYW1l KHMyLHApOworICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsImZ0cCBjbWRsaW5nZXQg YmFja3VwIHpyZW5hbWUiLHAseCk7CisgICAgICAgICAgICAgICAgICB9IGVsc2UgeyAgICAgICAg ICAgICAgLyogUmVuYW1lIGluY29taW5nIGZpbGUgKi8KKyAgICAgICAgICAgICAgICAgICAgICB4 ID0gY2tzdHJuY3B5KHRtcGJ1ZixwLENLTUFYUEFUSCsxKTsKKyAgICAgICAgICAgICAgICAgICAg ICBzMiA9IHRtcGJ1ZjsKKyAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJmdHAgY21k bGluZ2V0IHJlbmFtZSBpbmNvbWluZyIscCx4KTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgICAgIGlmICh4IDwgMCkgeworICAgICAgICAgICAgICAgICAgICAgIHByaW50Zigi P0JhY2t1cC9SZW5hbWUgZmFpbGVkXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICByZXR1cm4o c3VjY2VzcyA9IDApOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgYnJl YWs7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgY2FzZSBYWUZYX0Q6ICAgICAgICAg ICAgICAvKiBEaXNjYXJkICovCisgICAgICAgICAgICAgICAgZnRzY3JlZW4oU0NSX0ZOLCdGJywo Q0tfT0ZGX1QpMCxzKTsKKyAgICAgICAgICAgICAgICBmdHNjcmVlbihTQ1JfU1QsU1RfU0tJUCwo Q0tfT0ZGX1QpU0tQX05BTSxzKTsKKyAgICAgICAgICAgICAgICB0bG9nKEYxMDAsIiByZWZ1c2Vk OiBuYW1lIiwiIiwwKTsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJmdHAgY21kbGluZ2V0 IHNraXAgbmFtZSIsczIsMCk7CisgICAgICAgICAgICAgICAgZ290byB4Y2xnZXQ7CisKKyAgICAg ICAgICAgICAgY2FzZSBYWUZYX1g6ICAgICAgICAgICAgICAvKiBPdmVyd3JpdGUgKi8KKyAgICAg ICAgICAgICAgY2FzZSBYWUZYX1U6ICAgICAgICAgICAgICAvKiBVcGRhdGUgKGFscmVhZHkgaGFu ZGxlZCBhYm92ZSkgKi8KKwkgICAgICBjYXNlIFhZRlhfTToJCS8qIGRpdHRvICovCisgICAgICAg ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmMgPSBn ZXRmaWxlKHMsICAgICAgICAgICAgICAgICAvKiBSZW1vdGUgbmFtZSAqLworICAgICAgICAgICAg ICAgICAgICAgczIsICAgICAgICAgICAgICAgIC8qIExvY2FsIG5hbWUgKi8KKyAgICAgICAgICAg ICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAvKiBSZWNvdmVyL1Jlc3RhcnQgKi8KKyAgICAg ICAgICAgICAgICAgICAgIGFwcGVuZCwgICAgICAgICAgICAvKiBBcHBlbmQgKi8KKyAgICAgICAg ICAgICAgICAgICAgIE5VTEwsICAgICAgICAgICAgICAvKiBQaXBlbmFtZSAqLworICAgICAgICAg ICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgIC8qIFRyYW5zbGF0ZSBjaGFyc2V0cyAqLwor ICAgICAgICAgICAgICAgICAgICAgLTEsICAgICAgICAgICAgICAgIC8qIEZpbGUgY2hhcnNldCAo bm9uZSkgKi8KKyAgICAgICAgICAgICAgICAgICAgIC0xICAgICAgICAgICAgICAgICAvKiBTZXJ2 ZXIgY2hhcnNldCAobm9uZSkgKi8KKyAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgIGRl YnVnKEYxMTEsImZ0cCBjbWRsaW5nZXQgcmMiLHMscmMpOworICAgICAgICBkZWJ1ZyhGMTExLCJm dHAgY21kbGluZ2V0IGNhbmNlbGZpbGUiLHMsY2FuY2VsZmlsZSk7CisgICAgICAgIGRlYnVnKEYx MTEsImZ0cCBjbWRsaW5nZXQgY2FuY2VsZ3JvdXAiLHMsY2FuY2VsZ3JvdXApOworCisgICAgICAg IGlmIChyYyA8IDAgJiYgaGF2ZXVybCAmJiBzWzBdID09ICcvJykgLyogVVJMIGZhaWxlZCAtIHRy eSBhZ2FpbiAqLworICAgICAgICAgICAgcmMgPSBnZXRmaWxlKCZzWzFdLCAgICAgICAgIC8qIFJl bW90ZSBuYW1lIHdpdGhvdXQgbGVhZGluZyAnLycgKi8KKyAgICAgICAgICAgICAgICAgICAgICAg ICBzMiwgICAgICAgICAgICAvKiBMb2NhbCBuYW1lICovCisgICAgICAgICAgICAgICAgICAgICAg ICAgMCwgICAgICAgICAgICAgLyogUmVjb3Zlci9SZXN0YXJ0ICovCisgICAgICAgICAgICAgICAg ICAgICAgICAgYXBwZW5kLCAgICAgICAgLyogQXBwZW5kICovCisgICAgICAgICAgICAgICAgICAg ICAgICAgTlVMTCwgICAgICAgICAgLyogUGlwZW5hbWUgKi8KKyAgICAgICAgICAgICAgICAgICAg ICAgICAwLCAgICAgICAgICAgICAvKiBUcmFuc2xhdGUgY2hhcnNldHMgKi8KKyAgICAgICAgICAg ICAgICAgICAgICAgICAtMSwgICAgICAgICAgICAvKiBGaWxlIGNoYXJzZXQgKG5vbmUpICovCisg ICAgICAgICAgICAgICAgICAgICAgICAgLTEgICAgICAgICAgICAgLyogU2VydmVyIGNoYXJzZXQg KG5vbmUpICovCisgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgaWYgKHJjID4g LTEpIHsKKyAgICAgICAgICAgIGdvb2QrKzsKKyAgICAgICAgICAgIHN0YXR1cyA9IDE7CisgICAg ICAgIH0KKyAgICAgICAgaWYgKGNhbmNlbGZpbGUpCisgICAgICAgICAgZ290byB4Y2xnZXQ7Cisg ICAgICAgIGlmIChyYyA8IDApIHsKKyAgICAgICAgICAgIGZ0cF9mYWkrKzsKKyNpZmRlZiBGVFBf VElNRU9VVAorCSAgICBpZiAoZnRwX3RpbWVkX291dCkKKwkgICAgICBzdGF0dXMgPSAwOworI2Vu ZGlmCS8qIEZUUF9USU1FT1VUICovCisgICAgICAgICAgICBpZiAoZ2V0ZXJyb3IpIHsKKyAgICAg ICAgICAgICAgICBzdGF0dXMgPSAwOworICAgICAgICAgICAgICAgIGRvbmUrKzsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoZnRwX2RlYiAmJiAhZG9uZSkKKyAgICAg IHByaW50ZigiRE9JTkcgTUdFVC4uLlxuIik7CisgICAgd2hpbGUgKCFkb25lICYmICFjYW5jZWxn cm91cCkgeworICAgICAgICBjYW5jZWxmaWxlID0gMDsgICAgICAgICAgICAgICAgIC8qIFRoaXMg ZmlsZSBub3QgY2FuY2VsZWQgeWV0ICovCisgICAgICAgIHMgPSAoY2hhciAqKXJlbW90ZV9maWxl cyhmaXJzdCwoQ0hBUiAqKWNtbGlzdFttZ2V0eF0sTlVMTCwwKTsKKyAgICAgICAgaWYgKCFzKSBz ID0gIiI7CisgICAgICAgIGlmICghKnMpIHsKKyAgICAgICAgICAgIGZpcnN0ID0gMTsKKyAgICAg ICAgICAgIG1nZXR4Kys7CisgICAgICAgICAgICBpZiAobWdldHggPCBuZmlscykKKyAgICAgICAg ICAgICAgcyA9IChjaGFyICopcmVtb3RlX2ZpbGVzKGZpcnN0LChDSEFSICopY21saXN0W21nZXR4 XSxOVUxMLDApOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBzID0gTlVMTDsKKyAg ICAgICAgICAgIGRlYnVnKEYxMTEsImZ0cCBjbWRsaW5nZXQgcmVtb3RlX2ZpbGVzIEIiLHMsMCk7 CisgICAgICAgICAgICBpZiAoIXMpIHsKKyAgICAgICAgICAgICAgICBkb25lID0gMTsKKyAgICAg ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvKgor ICAgICAgICAgIFRoZSBzZW1hbnRpY3Mgb2YgTkxTVCBhcmUgaWxsLWRlZmluZWQuICBTdXBwb3Nl IHdlIGhhdmUganVzdCBzZW50CisgICAgICAgICAgTkxTVCAvcGF0aC9bYS16XSouICBNb3N0IHNl cnZlcnMgc2VuZCBiYWNrIG5hbWVzIGxpa2UgL3BhdGgvZm9vLAorICAgICAgICAgIC9wYXRoL2Jh ciwgZXRjLiAgQnV0IHNvbWUgc2VuZCBiYWNrIG9ubHkgZm9vIGFuZCBiYXIsIGFuZCBzdWJzZXF1 ZW50CisgICAgICAgICAgUkVUUiBjb21tYW5kcyBiYXNlZCBvbiB0aGUgcGF0aGxlc3MgbmFtZXMg YXJlIG5vdCBnb2luZyB0byB3b3JrLgorICAgICAgICAqLworICAgICAgICBpZiAoc2VydmVydHlw ZSA9PSBTWVNfVU5JWCAmJiAhY2tzdHJjaHIocywnLycpKSB7CisgICAgICAgICAgICBpZiAoKHMz ID0gY2tzdHJyY2hyKGNtbGlzdFttZ2V0eF0sJy8nKSkpIHsKKyAgICAgICAgICAgICAgICBpbnQg bGVuLCBsZWZ0ID0gNDA5NjsKKyAgICAgICAgICAgICAgICBjaGFyICogdG1wID0geHRtcGJ1ZjsK KyAgICAgICAgICAgICAgICBsZW4gPSBzMyAtIGNtbGlzdFttZ2V0eF0gKyAxOworICAgICAgICAg ICAgICAgIGNrc3RybmNweSh0bXAsY21saXN0W21nZXR4XSxsZWZ0KTsKKyAgICAgICAgICAgICAg ICB0bXAgKz0gbGVuOworICAgICAgICAgICAgICAgIGxlZnQgLT0gbGVuOworICAgICAgICAgICAg ICAgIGNrc3RybmNweSh0bXAscyxsZWZ0KTsKKyAgICAgICAgICAgICAgICBzID0geHRtcGJ1ZjsK KwkJZGVidWcoRjExMSwiZnRwIGNtZGxpbmdldCByZW1vdGVfZmlsZXMgWCIscywwKTsKKyAgICAg ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBmaXJzdCA9IDA7ICAgICAgICAgICAgICAgICAg ICAgIC8qIE5vdCBmaXJzdCBhbnkgbW9yZSAqLworCisJZGVidWcoRjExMSwiZnRwIGNtZGxpbmdl dCBoYXZldHlwZSIscyxoYXZldHlwZSk7CisJaWYgKGhhdmV0eXBlID4gMCAmJiBoYXZldHlwZSAh PSBGVFlQX0ZJTEUpIHsgLyogU2VydmVyIHNheXMgbm90IGZpbGUgKi8KKwkgICAgZGVidWcoRjEx MCwiZnRwIGNtZGxpbmdldCBub3QtYS1maWxlIixzLDApOworCSAgICBjb250aW51ZTsKKwl9Cisg ICAgICAgIHJjID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogSW5pdGlhbCByZXR1cm4g Y29kZSAqLworCWlmIChoYXZlc2l6ZSA+IChDS19PRkZfVCktMSkgewkvKiBBbHJlYWR5IGhhdmUg ZmlsZSBzaXplPyAqLworCSAgICBmc2l6ZSA9IGhhdmVzaXplOworCX0gZWxzZSB7CQkJLyogTm8g LSBtdXN0IGFzayBzZXJ2ZXIgKi8KKwkgICAgLyoKKwkgICAgICBQcmlvciB0byBzZW5kaW5nIHRo ZSBOTFNUIGNvbW1hbmQgd2UgbmVjZXNzYXJpbHkgcHV0IHRoZQorCSAgICAgIHNlcnZlciBpbnRv IEFTQ0lJIG1vZGUuICBXZSBtdXN0IG5vdyBwdXQgaXQgYmFjayBpbnRvIHRoZQorCSAgICAgIHRo ZSByZXF1ZXN0ZWQgbW9kZSBzbyB0aGUgdXBjb21pbmcgU0laRSBjb21tYW5kIHJldHVybnMKKwkg ICAgICByaWdodCBraW5kIG9mIHNpemU7IHRoaXMgaXMgZXNwZWNpYWxseSBpbXBvcnRhbnQgZm9y CisJICAgICAgR0VUIC9SRUNPVkVSOyBvdGhlcndpc2UgdGhlIHNlcnZlciByZXR1cm5zIHRoZSAi QVNDSUkiIHNpemUKKwkgICAgICBvZiB0aGUgZmlsZSwgcmF0aGVyIHRoYW4gaXRzIHRydWUgc2l6 ZS4KKwkgICAgKi8KKwkgICAgY2hhbmdldHlwZShmdHBfdHlwLDApOwkvKiBDaGFuZ2UgdG8gcmVx dWVzdGVkIHR5cGUgKi8KKwkgICAgZnNpemUgPSAoQ0tfT0ZGX1QpLTE7CisJICAgIGlmIChzaXpl b2spIHsKKwkJeCA9IGZ0cGNtZCgiU0laRSIscyxsY3MscmNzLGZ0cF92Ym0pOworCQlpZiAoeCA9 PSBSRVBMWV9DT01QTEVURSkKKwkJICBmc2l6ZSA9IGNrYXRvZnMoJmZ0cF9yZXBseV9zdHJbNF0p OworCSAgICB9CisJfQorICAgICAgICBja3N0cm5jcHkoZmlsbmFtLHMsQ0tNQVhQQVRIKTsgIC8q IEZvciBcdihmaWxlbmFtZSkgKi8KKyAgICAgICAgZGVidWcoRjExMSwiZnRwIGNtZGxpbmdldCBm aWxuYW0iLGZpbG5hbSxmc2l6ZSk7CisKKyAgICAgICAgbnpydG9sKHMsdG1wYnVmLG5jLDAsQ0tN QVhQQVRIKTsgLyogU3RyaXAgcGF0aCBhbmQgbWF5YmUgY29udmVydCAqLworICAgICAgICBzMiA9 IHRtcGJ1ZjsKKworICAgICAgICAvKiBJZiBsb2NhbCBmaWxlIGFscmVhZHkgZXhpc3RzLCB0YWtl IGNvbGxpc2lvbiBhY3Rpb24gKi8KKworICAgICAgICBpZiAoemNoa2koczIpID4gLTEpIHsKKyAg ICAgICAgICAgIHN3aXRjaCAoZnRwX2ZuYykgeworICAgICAgICAgICAgICBjYXNlIFhZRlhfQTog ICAgICAgICAgICAgIC8qIEFwcGVuZCAqLworICAgICAgICAgICAgICAgIGFwcGVuZCA9IDE7Cisg ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgWFlGWF9SOiAgICAgICAg ICAgICAgLyogUmVuYW1lICovCisgICAgICAgICAgICAgIGNhc2UgWFlGWF9COiB7ICAgICAgICAg ICAgLyogQmFja3VwICovCisgICAgICAgICAgICAgICAgICBjaGFyICogcCA9IE5VTEw7CisgICAg ICAgICAgICAgICAgICBpbnQgeCA9IC0xOworICAgICAgICAgICAgICAgICAgem5ld24oczIsJnAp OyAgICAgICAgIC8qIE1ha2UgdW5pcXVlIG5hbWUgKi8KKyAgICAgICAgICAgICAgICAgIGRlYnVn KEYxMTAsImZ0cCBjbWRsaW5nZXQgem5ld24iLHAsMCk7CisgICAgICAgICAgICAgICAgICBpZiAo ZnRwX2ZuYyA9PSBYWUZYX0IpIHsgLyogQmFja3VwIGV4aXN0aW5nIGZpbGUgKi8KKyAgICAgICAg ICAgICAgICAgICAgICB4ID0genJlbmFtZShzMixwKTsKKyAgICAgICAgICAgICAgICAgICAgICBk ZWJ1ZyhGMTExLCJmdHAgY21kbGluZ2V0IGJhY2t1cCB6cmVuYW1lIixwLHgpOworICAgICAgICAg ICAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgIC8qIFJlbmFtZSBpbmNvbWluZyBmaWxlICov CisgICAgICAgICAgICAgICAgICAgICAgeCA9IGNrc3RybmNweSh0bXBidWYscCxDS01BWFBBVEgr MSk7CisgICAgICAgICAgICAgICAgICAgICAgczIgPSB0bXBidWY7CisgICAgICAgICAgICAgICAg ICAgICAgZGVidWcoRjExMSwiZnRwIGNtZGxpbmdldCByZW5hbWUgaW5jb21pbmciLHAseCk7Cisg ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICBpZiAoeCA8IDApIHsKKyAgICAg ICAgICAgICAgICAgICAgICBwcmludGYoIj9CYWNrdXAvUmVuYW1lIGZhaWxlZFxuIik7CisgICAg ICAgICAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKyAgICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgIGNhc2UgWFlGWF9EOiAgICAgIC8qIERpc2NhcmQgKi8KKyAgICAgICAgICAgICAgICBmdHNj cmVlbihTQ1JfRk4sJ0YnLChDS19PRkZfVCkwLHMpOworICAgICAgICAgICAgICAgIGZ0c2NyZWVu KFNDUl9TVCxTVF9TS0lQLChDS19PRkZfVClTS1BfTkFNLHMpOworICAgICAgICAgICAgICAgIHRs b2coRjEwMCwiIHJlZnVzZWQ6IG5hbWUiLCIiLDApOworICAgICAgICAgICAgICAgIGRlYnVnKEYx MTAsImZ0cCBjbWRsaW5nZXQgc2tpcCBuYW1lIixzMiwwKTsKKyAgICAgICAgICAgICAgICBjb250 aW51ZTsKKyAgICAgICAgICAgICAgY2FzZSBYWUZYX1g6ICAgICAgICAgICAgICAvKiBPdmVyd3Jp dGUgKi8KKyAgICAgICAgICAgICAgY2FzZSBYWUZYX1U6ICAgICAgICAgICAgICAvKiBVcGRhdGUg KGFscmVhZHkgaGFuZGxlZCBhYm92ZSkgKi8KKyAgICAgICAgICAgICAgY2FzZSBYWUZYX006ICAg ICAgICAgICAgICAvKiBkaXR0byAqLworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg ICAgfQorICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogXl5eIEFERCBDSEFSU0VUIFNUVUZGIEhFUkUgXl5eICovCisgICAgICAgIHJjID0gZ2V0Zmls ZShzLCAgICAgICAgICAgICAgICAgLyogUmVtb3RlIG5hbWUgKi8KKyAgICAgICAgICAgICAgICAg ICAgIHMyLCAgICAgICAgICAgICAgICAvKiBMb2NhbCBuYW1lICovCisgICAgICAgICAgICAgICAg ICAgICAwLCAgICAgICAgICAgICAgICAgLyogUmVjb3Zlci9SZXN0YXJ0ICovCisgICAgICAgICAg ICAgICAgICAgICBhcHBlbmQsICAgICAgICAgICAgLyogQXBwZW5kICovCisgICAgICAgICAgICAg ICAgICAgICBOVUxMLCAgICAgICAgICAgICAgLyogUGlwZW5hbWUgKi8KKyAgICAgICAgICAgICAg ICAgICAgIDAsICAgICAgICAgICAgICAgICAvKiBUcmFuc2xhdGUgY2hhcnNldHMgKi8KKyAgICAg ICAgICAgICAgICAgICAgIC0xLCAgICAgICAgICAgICAgICAvKiBGaWxlIGNoYXJzZXQgKG5vbmUp ICovCisgICAgICAgICAgICAgICAgICAgICAtMSAgICAgICAgICAgICAgICAgLyogU2VydmVyIGNo YXJzZXQgKG5vbmUpICovCisgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICBkZWJ1ZyhG MTExLCJmdHAgY21kbGluZ2V0IHJjIixzLHJjKTsKKyAgICAgICAgZGVidWcoRjExMSwiZnRwIGNt ZGxpbmdldCBjYW5jZWxmaWxlIixzLGNhbmNlbGZpbGUpOworICAgICAgICBkZWJ1ZyhGMTExLCJm dHAgY21kbGluZ2V0IGNhbmNlbGdyb3VwIixzLGNhbmNlbGdyb3VwKTsKKworICAgICAgICBpZiAo cmMgPiAtMSkgeworICAgICAgICAgICAgZ29vZCsrOworICAgICAgICAgICAgc3RhdHVzID0gMTsK KyAgICAgICAgfQorICAgICAgICBpZiAoY2FuY2VsZmlsZSkKKyAgICAgICAgICBjb250aW51ZTsK KyAgICAgICAgaWYgKHJjIDwgMCkgeworICAgICAgICAgICAgZnRwX2ZhaSsrOworI2lmZGVmIEZU UF9USU1FT1VUCisJICAgIGlmIChmdHBfdGltZWRfb3V0KQorCSAgICAgIHN0YXR1cyA9IDA7Cisj ZW5kaWYJLyogRlRQX1RJTUVPVVQgKi8KKyAgICAgICAgICAgIGlmIChnZXRlcnJvcikgeworICAg ICAgICAgICAgICAgIHN0YXR1cyA9IDA7CisgICAgICAgICAgICAgICAgZG9uZSsrOworICAgICAg ICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgIHhjbGdldDoKKyAgICBpZiAoY2FuY2VsZ3Jv dXApCisgICAgICBtbHNyZXNldCgpOworICAgIGlmIChzdGF0dXMgPiAwKSB7CisgICAgICAgIGlm IChjYW5jZWxncm91cCkKKyAgICAgICAgICBzdGF0dXMgPSAwOworICAgICAgICBlbHNlIGlmIChj YW5jZWxmaWxlICYmIGdvb2QgPCAxKQorICAgICAgICAgIHN0YXR1cyA9IDA7CisgICAgfQorICAg IHN1Y2Nlc3MgPSBzdGF0dXM7CisKKyNpZmRlZiBHRlRJTUVSCisgICAgdDEgPSBnbXN0aW1lcigp OyAgICAgICAgICAgICAgICAgICAgLyogRW5kIHRpbWUgKi8KKyAgICBzZWMgPSAoQ0tGTE9BVCko KENLRkxPQVQpKHQxIC0gdDApIC8gMTAwMC4wKTsgLyogU3RhdHMgKi8KKyAgICBpZiAoIXNlYykg c2VjID0gMC4wMDE7CisgICAgZnB0c2VjcyA9IHNlYzsKKyNlbHNlCisgICAgc2VjID0gKHQxIC0g dDApIC8gMTAwMDsKKyAgICBpZiAoIXNlYykgc2VjID0gMTsKKyNlbmRpZiAvKiBHRlRJTUVSICov CisKKyAgICB0ZmNwcyA9IChsb25nKSAodGZjIC8gc2VjKTsKKyAgICB0c2VjcyA9IChpbnQpc2Vj OworICAgIGxhc3R4ZmVyID0gV19GVFB8V19SRUNWOworICAgIHhmZXJzdGF0ID0gc3VjY2VzczsK KyAgICBpZiAoZHB5YWN0aXZlKQorICAgICAgZnRzY3JlZW4oc3RhdHVzID4gMCA/IFNDUl9UQyA6 IFNDUl9DVywgMCwgKENLX09GRl9UKTAsICIiKTsKKyAgICBpZiAoIXN0YXkpCisgICAgICBkb2V4 aXQoc3VjY2VzcyA/IEdPT0RfRVhJVCA6IEJBRF9FWElULCAtMSk7CisgICAgcmV0dXJuKHN1Y2Nl c3MpOworfQorCisvKiAgZCBvIGYgdCBwIGcgZSB0ICAtLSAgUGFyc2UgYW5kIGV4ZWN1dGUgR0VU LCBNR0VULCBNREVMRVRFLCAuLi4gICovCisKKy8qCisgIE5vdGU6IGlmIHdlIHdhbnRlZCB0byBp bXBsZW1lbnQgL0FGVEVSOiwgL0JFRk9SRTosIGV0Yywgd2UgY291bGQgdXNlCisgIHpzdHJkYXQo KSB0byBjb252ZXJ0IHRvIFVUQy1iYXNlZCB0aW1lX3QuICBCdXQgaXQgZG9lc24ndCBtYWtlIHNl bnNlIGZyb20KKyAgdGhlIHVzZXItaW50ZXJmYWNlIHBlcnNwZWN0aXZlLCBzaW5jZSB0aGUgc2Vy dmVyJ3MgZGlyZWN0b3J5IGxpc3RpbmdzIHNob3cKKyAgaXRzIG93biBsb2NhbCB0aW1lcyBhbmQg c2luY2Ugd2UgZG9uJ3Qga25vdyB3aGF0IHRpbWV6b25lIGl0J3MgaW4sIHRoZXJlJ3MKKyAgbm8g d2F5IHRvIHJlY29uY2lsZSBvdXIgbG9jYWwgdGltZXMgd2l0aCB0aGUgc2VydmVyJ3MuCisqLwor aW50Citkb2Z0cGdldChjeCx3aG8pIGludCBjeCwgd2hvOyB7ICAgICAgICAgLyogd2hvID09IDEg Zm9yIGZ0cCwgMCBmb3Iga2VybWl0ICovCisgICAgc3RydWN0IEZEQiBmbCwgc3csIGNtOworICAg IGludCBpLCBuLCByYywgZ2V0dmFsID0gMCwgbWdldCA9IDAsIGRvbmUgPSAwLCBwaXBlc2F2ZSA9 IDA7CisgICAgaW50IHhfY252ID0gMCwgeF9wcm0gPSAwLCByZXN0YXJ0ID0gMCwgc3RhdHVzID0g MCwgZ29vZCA9IDA7CisgICAgaW50IHhfZm5jID0gMCwgZmlyc3QgPSAwLCBza2lwdGhpcyA9IDAs IGFwcGVuZCA9IDAsIHNlbGVjdGVkID0gMDsKKyAgICBpbnQgcmVuYW1pbmcgPSAwLCBtZGVsID0g MCwgbGlzdGZpbGUgPSAwLCB1cGRhdGluZyA9IDAsIGdldG9uZSA9IDA7CisgICAgaW50IG1vdmlu ZyA9IDAsIGRlbGV0aW5nID0gMCwgdG9zY3JlZW4gPSAwLCBoYXNwYXRoID0gMDsKKyAgICBpbnQg Z290c2l6ZSA9IDA7CisgICAgaW50IG1hdGNoZG90ID0gMDsKKyAgICBDS19PRkZfVCBnZXRsYXJn ZXIgPSAoQ0tfT0ZGX1QpLTE7CisgICAgQ0tfT0ZGX1QgZ2V0c21hbGxlciA9IChDS19PRkZfVCkt MTsKKyAgICBjaGFyICogbXNnLCAqIHMsICogczIsICogbmFtLCAqIHBpcGVuYW1lID0gTlVMTCwg KiBwbiA9IE5VTEw7CisgICAgY2hhciAqIHNyYyA9ICIiLCAqIGxvY2FsID0gIiI7CisgICAgY2hh ciAqIHBhdCA9ICIiOworCisgICAgaW50IHhfY3NsID0gLTEsIHhfY3NyID0gLTE7ICAgICAgICAg LyogTG9jYWwgYW5kIHJlbW90ZSBjaGFyc2V0cyAqLworICAgIGludCB4X3hsYSA9IDA7CisgICAg Y2hhciBjOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogV29ya2VyIGNoYXIgKi8KKyAg ICBVTE9ORyB0MCA9IDBMLCB0MTsgICAgICAgICAgICAgICAgICAvKiBUaW1lcyBmb3Igc3RhdHMg Ki8KKyNpZmRlZiBHRlRJTUVSCisgICAgQ0tGTE9BVCBzZWM7CisjZWxzZQorICAgIGludCBzZWMg PSAwOworI2VuZGlmIC8qIEdGVElNRVIgKi8KKworICAgIHN0cnVjdCBzdHJpbmdpbnQgcHZbU05E X01BWCsxXTsgICAgLyogVGVtcG9yYXJ5IGFycmF5IGZvciBzd2l0Y2ggdmFsdWVzICovCisKKyAg ICBzdWNjZXNzID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBBc3N1bWUgZmFpbHVyZSAq LworICAgIGZvcmNldHlwZSA9IDA7ICAgICAgICAgICAgICAgICAgICAgIC8qIE5vIC9URVhUIG9y IC9CSU5BUlkgZ2l2ZW4geWV0ICovCisgICAgcmVzdGFydCA9IDA7ICAgICAgICAgICAgICAgICAg ICAgICAgLyogTm8gcmVzdGFydCB5ZXQgKi8KKyAgICBvdXQyc2NyZWVuID0gMDsJCQkvKiBObyBU Ty1TQ1JFRU4gc3dpdGNoIGdpdmVuIHlldCAqLworICAgIG1nZXRtZXRob2QgPSAwOwkJCS8qIE5v IE5MU1Qgb3IgTUxTRCBzd2l0Y2ggeWV0ICovCisgICAgbWdldGZvcmNlZCA9IDA7CisKKyAgICBn X2Rpc3BsYSA9IGZkaXNwbGE7CisgICAgaWYgKGZ0cF9kaXMgPiAtMSkKKyAgICAgIGZkaXNwbGEg PSBmdHBfZGlzOworCisgICAgeF9jbnYgPSBmdHBfY252OyAgICAgICAgICAgICAgICAgICAgLyog RmlsZW5hbWUgY29udmVyc2lvbiAqLworICAgIGlmICh4X2NudiA9PSBDTlZfQVVUTykgewkJLyog TmFtZSBjb252ZXJzaW9uIGlzIGF1dG8gKi8KKyAgICAgICAgaWYgKGFsaWtlKSB7ICAgICAgICAg ICAgICAgICAgICAvKiBJZiBzZXJ2ZXIgJiBjbGllbnQgYXJlIGFsaWtlICovCisgICAgICAgICAg ICB4X2NudiA9IDA7CQkJLyogbm8gY29udmVyc2lvbiAqLworICAgICAgICB9IGVsc2UgeyAgICAg ICAgICAgICAgICAgICAgICAgIC8qIElmIHRoZXkgYXJlIGRpZmZlcmVudCAqLworICAgICAgICAg ICAgaWYgKHNlcnZlcnR5cGUgPT0gU1lTX1VOSVggfHwgc2VydmVydHlwZSA9PSBTWVNfV0lOMzIp CisgICAgICAgICAgICAgIHhfY252ID0gLTE7CQkvKiBvbmx5IG1pbmltYWwgY29udmVyc2lvbnMg bmVlZGVkICovCisgICAgICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgLyogb3Ro ZXJ3aXNlICovCisgICAgICAgICAgICAgIHhfY252ID0gMTsJCS8qIGZ1bGwgY29udmVyc2lvbiAq LworICAgICAgICB9CisgICAgfSBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog Tm90IGF1dG8gLSBkbyB3aGF0IHVzZXIgc2FpZCAqLworICAgICAgeF9jbnYgPSBmdHBfY252Owor CisgICAgeF9wcm0gPSBmdHBfcHJtOyAgICAgICAgICAgICAgICAgICAgLyogUGVybWlzc2lvbnMg Ki8KKyAgICBpZiAoeF9wcm0gPT0gU0VUX0FVVE8pICAgICAgICAgICAgICAvKiBQZXJtaXNzaW9u cyBBVVRPICovCisgICAgICB4X3BybSA9IGFsaWtlOworCisjaWZuZGVmIE5PQ1NFVFMKKyAgICB4 X2NzciA9IGZ0cF9jc3I7ICAgICAgICAgICAgICAgICAgICAvKiBJbmhlcml0IGdsb2JhbCBzZXJ2 ZXIgY2hhcnNldCAqLworICAgIHhfY3NsID0gZnRwX2NzbDsgICAgICAgICAgICAgICAgICAgIC8q IEluaGVyaXQgZ2xvYmFsIGxvY2FsIGNoYXJzZXQgKi8KKyAgICBpZiAoeF9jc2wgPCAwKSAgICAg ICAgICAgICAgICAgICAgICAvKiBJZiBub25lLCB1c2UgY3VycmVudCAqLworICAgICAgeF9jc2wg PSBmY2hhcnNldDsgICAgICAgICAgICAgICAgIC8qIGZpbGUgY2hhcmFjdGVyLXNldC4gKi8KKyAg ICB4X3hsYSA9IGZ0cF94bGE7ICAgICAgICAgICAgICAgICAgICAvKiBUcmFuc2xhdGlvbiBPbi9P ZmYgKi8KKyNlbmRpZiAvKiBOT0NTRVRTICovCisKKyAgICBnZXRlcnJvciA9IGZ0cF9lcnI7ICAg ICAgICAgICAgICAgICAvKiBJbmhlcml0IGdsb2JhbCBlcnJvciBhY3Rpb24uICovCisgICAgYXNu YW1idWZbMF0gPSBOVUw7ICAgICAgICAgICAgICAgICAgLyogTm8gYXMtbmFtZSB5ZXQuICovCisg ICAgcGlwZXNhdmUgPSBwaXBlc2VuZDsKKyAgICBwaXBlc2VuZCA9IDA7CisKKyAgICBoYXZldHlw ZSA9IDA7CisgICAgaGF2ZXNpemUgPSAoQ0tfT0ZGX1QpLTE7CisgICAgbWFrZXN0cigmaGF2ZW1k dG0sTlVMTCk7CisKKyAgICBpZiAoZ19mdHBfdHlwID4gLTEpIHsgICAgICAgICAgICAgICAvKiBS ZXN0b3JlIFRZUEUgaWYgc2F2ZWQgKi8KKyAgICAgICAgZnRwX3R5cCA9IGdfZnRwX3R5cDsKKyAg ICAgICAgLyogZ19mdHBfdHlwID0gLTE7ICovCisgICAgfQorICAgIGZvciAoaSA9IDA7IGkgPD0g U05EX01BWDsgaSsrKSB7ICAgIC8qIEluaXRpYWxpemUgc3dpdGNoIHZhbHVlcyAqLworICAgICAg ICBwdltpXS5zdmFsID0gTlVMTDsgICAgICAgICAgICAgIC8qIHRvIG51bGwgcG9pbnRlcnMgKi8K KyAgICAgICAgcHZbaV0uaXZhbCA9IC0xOyAgICAgICAgICAgICAgICAvKiBhbmQgLTEgaW50IHZh bHVlcyAqLworICAgICAgICBwdltpXS53dmFsID0gKENLX09GRl9UKS0xOwkvKiBhbmQgLTEgd2lk ZSB2YWx1ZXMgKi8KKyAgICB9CisgICAgemNsb3NlKFpNRklMRSk7ICAgICAgICAgICAgICAgICAg ICAgLyogSW4gY2FzZSBpdCB3YXMgbGVmdCBvcGVuICovCisKKyAgICB4X2ZuYyA9IGZ0cF9mbmMg PiAtMSA/IGZ0cF9mbmMgOiBmbmNhY3Q7IC8qIEZpbGVuYW1lIGNvbGxpc2lvbiBhY3Rpb24gKi8K KworICAgIGlmIChmcF9ubWwpIHsgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlc2V0IC9OQU1F TElTVCAqLworICAgICAgICBpZiAoZnBfbm1sICE9IHN0ZG91dCkKKyAgICAgICAgICBmY2xvc2Uo ZnBfbm1sKTsKKyAgICAgICAgZnBfbm1sID0gTlVMTDsKKyAgICB9CisgICAgbWFrZXN0cigmZnRw X25tbCxOVUxMKTsKKworICAgIC8qIEluaXRpYWxpemUgbGlzdCBvZiByZW1vdGUgZmlsZXNwZWNz ICovCisKKyAgICBpZiAoIW1nZXRsaXN0KSB7CisgICAgICAgIG1nZXRsaXN0ID0gKGNoYXIgKiop bWFsbG9jKE1HRVRNQVggKiBzaXplb2YoY2hhciAqKSk7CisgICAgICAgIGlmICghbWdldGxpc3Qp IHsKKyAgICAgICAgICAgIHByaW50ZigiP01lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUgLSBNR0VU IGxpc3RcbiIpOworICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgfQorICAgICAgICBm b3IgKGkgPSAwOyBpIDwgTUdFVE1BWDsgaSsrKQorICAgICAgICAgIG1nZXRsaXN0W2ldID0gTlVM TDsKKyAgICB9CisgICAgbWdldG4gPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTnVt YmVyIG9mIG1nZXQgYXJndW1lbnRzICovCisgICAgbWdldHggPSAwOyAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogQ3VycmVudCBhcmcgKi8KKworICAgIGlmICh3aG8gPT0gMCkgeyAgICAgICAg ICAgICAgICAgICAgIC8qIENhbGxlZCB3aXRoIHVucHJlZml4ZWQgY29tbWFuZCAqLworICAgICAg ICBpZiAoY3ggPT0gWFhHRVQgfHwgY3ggPT0gWFhSRUdFVCB8fCBjeCA9PSBYWFJFVFIpCisgICAg ICAgICAgZ2V0b25lKys7CisgICAgICAgIHN3aXRjaCAoY3gpIHsKKyAgICAgICAgICBjYXNlIFhY UkVHRVQ6IHB2W1NORF9SRVNdLml2YWwgPSAxOyBicmVhazsKKyAgICAgICAgICBjYXNlIFhYUkVU UjogIHB2W1NORF9ERUxdLml2YWwgPSAxOyBicmVhazsKKyAgICAgICAgICBjYXNlIFhYR0VUOgor ICAgICAgICAgIGNhc2UgWFhNR0VUOiAgbWdldCsrOyBicmVhazsKKyAgICAgICAgfQorICAgIH0g ZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZUUCBjb21tYW5kICovCisgICAg ICAgIGlmIChjeCA9PSBGVFBfR0VUIHx8IGN4ID09IEZUUF9SR0UpCisgICAgICAgICAgZ2V0b25l Kys7CisgICAgICAgIHN3aXRjaCAoY3gpIHsKKyAgICAgICAgICBjYXNlIEZUUF9ERUw6ICAgICAg ICAgICAgICAgICAvKiAoZmFsbCB0aHJ1IG9uIHB1cnBvc2UpICovCisgICAgICAgICAgY2FzZSBG VFBfTURFOiBtZGVsKys7ICAgICAgICAgLyogKGRpdHRvKSAqLworICAgICAgICAgIGNhc2UgRlRQ X0dFVDogICAgICAgICAgICAgICAgIC8qIChkaXR0bykgKi8KKyAgICAgICAgICBjYXNlIEZUUF9N R0U6IG1nZXQrKzsgYnJlYWs7CisgICAgICAgICAgY2FzZSBGVFBfUkdFOiBwdltTTkRfUkVTXS5p dmFsID0gMTsgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgY21mZGJpKCZzdywgICAgICAg ICAgICAgICAgICAgICAgICAgLyogRmlyc3QgRkRCIC0gY29tbWFuZCBzd2l0Y2hlcyAqLworICAg ICAgICAgICBfQ01LRVksICAgICAgICAgICAgICAgICAgICAgIC8qIGZjb2RlICovCisgICAgICAg ICAgICJSZW1vdGUgZmlsZW5hbWU7XG4gb3Igc3dpdGNoIiwgLyogaGxwbXNnICovCisgICAgICAg ICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGVmYXVsdCAqLworICAgICAgICAg ICAiIiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIHN0cmluZyBkYXRhICovCisg ICAgICAgICAgIG1kZWwgPyBuZGVsc3dpIDogbmdldHN3aSwgICAgLyogYWRkdGwgbnVtZXJpYyBk YXRhIDE6IHRibCBzaXplICovCisgICAgICAgICAgIDQsICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDI6IDQgPSBjbXN3aSAqLworICAgICAgICAgICB4eHN0 cmluZywgICAgICAgICAgICAgICAgICAgIC8qIFByb2Nlc3NpbmcgZnVuY3Rpb24gKi8KKyAgICAg ICAgICAgbWRlbCA/IGRlbHN3aSA6IGdldHN3aSwgICAgICAvKiBLZXl3b3JkIHRhYmxlICovCisg ICAgICAgICAgICZmbCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUG9pbnRlciB0byBuZXh0 IEZEQiAqLworICAgICAgICAgICApOworICAgIGNtZmRiaSgmZmwsICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIDJuZCBGREIgLSByZW1vdGUgZmlsZW5hbWUgKi8KKyAgICAgICAgICAgX0NNRkxE LCAgICAgICAgICAgICAgICAgICAgICAvKiBmY29kZSAqLworICAgICAgICAgICAiIiwgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIGhscG1zZyAqLworICAgICAgICAgICAiIiwgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIGRlZmF1bHQgKi8KKyAgICAgICAgICAgIiIsICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBhZGR0bCBzdHJpbmcgZGF0YSAqLworICAgICAgICAgICAwLCAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAxICovCisgICAgICAg ICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDIg Ki8KKyAgICAgICAgICAgeHhzdHJpbmcsCisgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICZj bQorICAgICAgICAgICApOworICAgIGNtZmRiaSgmY20sICAgICAgICAgICAgICAgICAgICAgICAg IC8qIDNyZCBGREIgLSBDb25maXJtYXRpb24gKi8KKyAgICAgICAgICAgX0NNQ0ZNLCAgICAgICAg ICAgICAgICAgICAgICAvKiBmY29kZSAqLworICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIGhscG1zZyAqLworICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIGRlZmF1bHQgKi8KKyAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBhZGR0bCBzdHJpbmcgZGF0YSAqLworICAgICAgICAgICAwLCAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAxICovCisgICAgICAgICAgIDAsICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDIgKi8KKyAgICAg ICAgICAgTlVMTCwKKyAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgTlVMTAorICAgICAgICAg ICApOworCisgICAgd2hpbGUgKDEpIHsgICAgICAgICAgICAgICAgICAgICAgICAgLyogUGFyc2Ug MCBvciBtb3JlIHN3aXRjaGVzICovCisgICAgICAgIHggPSBjbWZkYigmc3cpOyAgICAgICAgICAg ICAgICAgLyogUGFyc2Ugc29tZXRoaW5nICovCisgICAgICAgIGRlYnVnKEYxMDEsImZ0cCBnZXQg Y21mZGIiLCIiLHgpOworICAgICAgICBpZiAoeCA8IDApICAgICAgICAgICAgICAgICAgICAgIC8q IEVycm9yICovCisgICAgICAgICAgZ290byB4Z2V0eDsgICAgICAgICAgICAgICAgICAgLyogb3Ig cmVwYXJzZSBuZWVkZWQgKi8KKyAgICAgICAgaWYgKGNtcmVzdWx0LmZjb2RlICE9IF9DTUtFWSkg ICAvKiBCcmVhayBvdXQgb2YgbG9vcCBpZiBub3QgYSBzd2l0Y2ggKi8KKyAgICAgICAgICBicmVh azsKKyAgICAgICAgYyA9IGNtZ2JyaygpOyAgICAgICAgICAgICAgICAgICAvKiBHZXQgYnJlYWsg Y2hhcmFjdGVyICovCisgICAgICAgIGdldHZhbCA9IChjID09ICc6JyB8fCBjID09ICc9Jyk7IC8q IHRvIHNlZSBob3cgdGhleSBlbmRlZCB0aGUgc3dpdGNoICovCisgICAgICAgIGlmIChnZXR2YWwg JiYgIShjbXJlc3VsdC5rZmxhZ3MgJiBDTV9BUkcpKSB7CisgICAgICAgICAgICBwcmludGYoIj9U aGlzIHN3aXRjaCBkb2VzIG5vdCB0YWtlIGFyZ3VtZW50c1xuIik7CisgICAgICAgICAgICB4ID0g LTk7CisgICAgICAgICAgICBnb3RvIHhnZXR4OworICAgICAgICB9CisgICAgICAgIG4gPSBjbXJl c3VsdC5ucmVzdWx0OyAgICAgICAgICAgLyogTnVtZXJpYyByZXN1bHQgPSBzd2l0Y2ggdmFsdWUg Ki8KKyAgICAgICAgZGVidWcoRjEwMSwiZnRwIGdldCBzd2l0Y2giLCIiLG4pOworCisgICAgICAg IGlmICghZ2V0dmFsICYmIChjbWdrd2ZsZ3MoKSAmIENNX0FSRykpIHsKKyAgICAgICAgICAgIHBy aW50ZigiP1RoaXMgc3dpdGNoIHJlcXVpcmVzIGFuIGFyZ3VtZW50XG4iKTsKKyAgICAgICAgICAg IHggPSAtOTsKKyAgICAgICAgICAgIGdvdG8geGdldHg7CisgICAgICAgIH0KKyAgICAgICAgc3dp dGNoIChuKSB7ICAgICAgICAgICAgICAgICAgICAvKiBQcm9jZXNzIHRoZSBzd2l0Y2ggKi8KKyAg ICAgICAgICBjYXNlIFNORF9BU046ICAgICAgICAgICAgICAgICAvKiAvQVMtTkFNRTogKi8KKyAg ICAgICAgICAgIGRlYnVnKEYxMDEsImZ0cCBnZXQgL2FzLW5hbWUgZ2V0dmFsIiwiIixnZXR2YWwp OworICAgICAgICAgICAgaWYgKCFnZXR2YWwpIGJyZWFrOworICAgICAgICAgICAgaWYgKCh4ID0g Y21mbGQoIk5hbWUgdG8gc3RvcmUgaXQgdW5kZXIiLCIiLCZzLE5VTEwpKSA8IDApIHsKKyAgICAg ICAgICAgICAgICBpZiAoeCA9PSAtMykgeworICAgICAgICAgICAgICAgICAgICBwcmludGYoIj9u YW1lIHJlcXVpcmVkXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgeCA9IC05OworICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgICBnb3RvIHhnZXR4OworICAgICAgICAgICAgfQorICAg ICAgICAgICAgcyA9IGJyc3RyaXAocyk7CisgICAgICAgICAgICBpZiAoISpzKSBzID0gTlVMTDsK KyAgICAgICAgICAgIG1ha2VzdHIoJihwdltuXS5zdmFsKSxzKTsKKyAgICAgICAgICAgIHB2W25d Lml2YWwgPSAxOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIFNORF9CSU46 ICAgICAgICAgICAgICAgICAvKiAvQklOQVJZICovCisgICAgICAgICAgY2FzZSBTTkRfVFhUOiAg ICAgICAgICAgICAgICAgLyogL1RFWFQgb3IgL0FTQ0lJICovCisgICAgICAgICAgY2FzZSBTTkRf VEVOOiAgICAgICAgICAgICAgICAgLyogL1RFTkVYICovCisgICAgICAgICAgICBwdltTTkRfQklO XS5pdmFsID0gMDsKKyAgICAgICAgICAgIHB2W1NORF9UWFRdLml2YWwgPSAwOworICAgICAgICAg ICAgcHZbU05EX1RFTl0uaXZhbCA9IDA7CisgICAgICAgICAgICBwdltuXS5pdmFsID0gMTsKKyAg ICAgICAgICAgIGJyZWFrOworCisjaWZkZWYgUFVUUElQRQorICAgICAgICAgIGNhc2UgU05EX0NN RDogICAgICAgICAgICAgICAgIC8qIFRoZXNlIHRha2Ugbm8gYXJncyAqLworICAgICAgICAgICAg aWYgKG5vcHVzaCkgeworICAgICAgICAgICAgICAgIHByaW50ZigiP1NvcnJ5LCBzeXN0ZW0gY29t bWFuZCBhY2Nlc3MgaXMgZGlzYWJsZWRcbiIpOworICAgICAgICAgICAgICAgIHggPSAtOTsKKyAg ICAgICAgICAgICAgICBnb3RvIHhnZXR4OworICAgICAgICAgICAgfQorI2lmZGVmIFBJUEVTRU5E CisgICAgICAgICAgICBlbHNlIGlmIChyY3ZmaWx0ZXIpIHsKKyAgICAgICAgICAgICAgICBwcmlu dGYoIj9Tb3JyeSwgbm8gUFVUIC9DT01NQU5EIHdoZW4gU0VORCBGSUxURVIgc2VsZWN0ZWRcbiIp OworICAgICAgICAgICAgICAgIHggPSAtOTsKKyAgICAgICAgICAgICAgICBnb3RvIHhnZXR4Owor ICAgICAgICAgICAgfQorI2VuZGlmIC8qIFBJUEVTRU5EICovCisgICAgICAgICAgICBzdy5obHBt c2cgPSAiQ29tbWFuZCwgb3Igc3dpdGNoIjsgLyogQ2hhbmdlIGhlbHAgbWVzc2FnZSAqLworICAg ICAgICAgICAgcHZbbl0uaXZhbCA9IDE7ICAgICAgICAgICAgIC8qIEp1c3Qgc2V0IHRoZSBmbGFn ICovCisgICAgICAgICAgICBwdltTTkRfQVJSXS5pdmFsID0gMDsKKyAgICAgICAgICAgIGJyZWFr OworI2VuZGlmIC8qIFBVVFBJUEUgKi8KKworICAgICAgICAgIGNhc2UgU05EX1NISDogICAgICAg ICAgICAgICAgIC8qIC9RVUlFVCAqLworICAgICAgICAgIGNhc2UgU05EX1JFUzogICAgICAgICAg ICAgICAgIC8qIC9SRUNPVkVSIChyZWdldCkgKi8KKyAgICAgICAgICBjYXNlIFNORF9OT0I6ICAg ICAgICAgICAgICAgICAvKiAvTk9CQUNLVVBGSUxFUyAqLworICAgICAgICAgIGNhc2UgU05EX0RF TDogICAgICAgICAgICAgICAgIC8qIC9ERUxFVEUgKi8KKyAgICAgICAgICBjYXNlIFNORF9VUEQ6 ICAgICAgICAgICAgICAgICAvKiAvVVBEQVRFICovCisgICAgICAgICAgY2FzZSBTTkRfVVNOOiAg ICAgICAgICAgICAgICAgLyogL1VOSVFVRSAqLworICAgICAgICAgIGNhc2UgU05EX05PRDogICAg ICAgICAgICAgICAgIC8qIC9OT0RPVEZJTEVTICovCisgICAgICAgICAgY2FzZSBTTkRfUkVDOiAg ICAgICAgICAgICAgICAgLyogL1JFQ09WRVIgKi8KKyAgICAgICAgICBjYXNlIFNORF9NQUk6ICAg ICAgICAgICAgICAgICAvKiAvVE8tU0NSRUVOICovCisgICAgICAgICAgICBwdltuXS5pdmFsID0g MTsgICAgICAgICAgICAgLyogSnVzdCBzZXQgdGhlIGZsYWcgKi8KKyAgICAgICAgICAgIGJyZWFr OworCisgICAgICAgICAgY2FzZSBTTkRfRElGOiAgICAgICAgICAgICAgICAgLyogL0RBVEVTLURJ RkZFUiAqLworCSAgICBwdltTTkRfQ09MXS5pdmFsID0gWFlGWF9NOwkvKiBOb3cgaXQncyBhIGNv bGxpc2lvbiBvcHRpb24gKi8KKwkgICAgcHZbbl0uaXZhbCA9IDE7CisJICAgIGJyZWFrOworCisg ICAgICAgICAgY2FzZSBTTkRfQ09MOiAgICAgICAgICAgICAgICAgLyogL0NPTExJU0lPTjogKi8K KyAgICAgICAgICAgIGlmICgoeCA9IGNta2V5KGZ0cGNvbHh0YWIsbmZ0cGNvbHgsIiIsIiIseHhz dHJpbmcpKSA8IDApCisgICAgICAgICAgICAgIGdvdG8geGdldHg7CisJICAgIGlmICh4ID09IFhZ RlhfTSkKKwkgICAgICBwdltTTkRfRElGXS5pdmFsID0gMTsJLyogKHBoYXNlIHRoaXMgb3V0KSAq LworCSAgICBwdltuXS5pdmFsID0geDsJCS8qIHRoaXMgc2hvdWxkIGJlIHN1ZmZpY2llbnQgKi8K KyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBTTkRfRVJSOiAgICAgICAgICAg ICAgICAgLyogL0VSUk9SLUFDVElPTiAqLworICAgICAgICAgICAgaWYgKCh4ID0gY21rZXkocW9y cCwyLCIiLCIiLHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgICAgICBnb3RvIHhnZXR4OworICAg ICAgICAgICAgcHZbbl0uaXZhbCA9IHg7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAg IGNhc2UgU05EX0VYQzogICAgICAgICAgICAgICAgIC8qIEV4Y2VwdGlvbiBsaXN0ICovCisgICAg ICAgICAgICBpZiAoIWdldHZhbCkgYnJlYWs7CisgICAgICAgICAgICBpZiAoKHggPSBjbWZsZCgi UGF0dGVybiIsIiIsJnMseHhzdHJpbmcpKSA8IDApIHsKKyAgICAgICAgICAgICAgICBpZiAoeCA9 PSAtMykgeworICAgICAgICAgICAgICAgICAgICBwcmludGYoIj9QYXR0ZXJuIHJlcXVpcmVkXG4i KTsKKyAgICAgICAgICAgICAgICAgICAgeCA9IC05OworICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgICBnb3RvIHhnZXR4OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHMp IGlmICghKnMpIHMgPSBOVUxMOworICAgICAgICAgICAgbWFrZXN0cigmKHB2W25dLnN2YWwpLHMp OworICAgICAgICAgICAgaWYgKHB2W25dLnN2YWwpCisgICAgICAgICAgICAgIHB2W25dLml2YWwg PSAxOworICAgICAgICAgICAgYnJlYWs7CisKKyNpZmRlZiBQSVBFU0VORAorICAgICAgICAgIGNh c2UgU05EX0ZMVDoKKyAgICAgICAgICAgIGRlYnVnKEYxMDEsImZ0cCBnZXQgL2ZpbHRlciBnZXR2 YWwiLCIiLGdldHZhbCk7CisgICAgICAgICAgICBpZiAoIWdldHZhbCkgYnJlYWs7CisgICAgICAg ICAgICBpZiAoKHggPSBjbWZsZCgiRmlsdGVyIHByb2dyYW0gdG8gc2VuZCB0aHJvdWdoIiwiIiwm cyxOVUxMKSkgPCAwKSB7CisgICAgICAgICAgICAgICAgaWYgKHggPT0gLTMpCisgICAgICAgICAg ICAgICAgICBzID0gIiI7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAg Z290byB4Z2V0eDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHMgPSBicnN0cmlwKHMpOwor ICAgICAgICAgICAgaWYgKHB2W1NORF9NQUldLml2YWwgPCAxKSB7CisgICAgICAgICAgICAgICAg eSA9IHN0cmxlbihzKTsKKyAgICAgICAgICAgICAgICAvKiBNYWtlIHN1cmUgdGhleSBpbmNsdWRl ZCAiXHYoLi4uKSIgKi8KKyAgICAgICAgICAgICAgICBmb3IgKHggPSAwOyB4IDwgeTsgeCsrKSB7 CisgICAgICAgICAgICAgICAgICAgIGlmIChzW3hdICE9ICdcXCcpIGNvbnRpbnVlOworICAgICAg ICAgICAgICAgICAgICBpZiAoc1t4KzFdID09ICd2JykgYnJlYWs7CisgICAgICAgICAgICAgICAg fQorICAgICAgICAgICAgICAgIGlmICh4ID09IHkpIHsKKyAgICAgICAgICAgICAgICAgICAgcHJp bnRmKAorICAgICAgICAgICAgICAgICI/RmlsdGVyIG11c3QgY29udGFpbiBhIHJlcGxhY2VtZW50 IHZhcmlhYmxlIGZvciBmaWxlbmFtZS5cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICk7 CisgICAgICAgICAgICAgICAgICAgIHggPSAtOTsKKyAgICAgICAgICAgICAgICAgICAgZ290byB4 Z2V0eDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo KnMpIHsKKyAgICAgICAgICAgICAgICBwdltuXS5pdmFsID0gMTsKKyAgICAgICAgICAgICAgICBt YWtlc3RyKCYocHZbbl0uc3ZhbCkscyk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg ICAgICAgIHB2W25dLml2YWwgPSAwOworICAgICAgICAgICAgICAgIG1ha2VzdHIoJihwdltuXS5z dmFsKSxOVUxMKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8q IFBJUEVTRU5EICovCisKKyAgICAgICAgICBjYXNlIFNORF9OQU06CisgICAgICAgICAgICBpZiAo IWdldHZhbCkgYnJlYWs7CisgICAgICAgICAgICBpZiAoKHggPSBjbWtleShmbnRhYixuZm50YWIs IiIsImF1dG9tYXRpYyIseHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgICAgIGdvdG8geGdldHg7 CisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJmdHAgZ2V0IC9maWxlbmFtZXMiLCIiLHgpOworICAg ICAgICAgICAgcHZbbl0uaXZhbCA9IHg7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAg IGNhc2UgU05EX1NNQTogICAgICAgICAgICAgICAgIC8qIFNtYWxsZXIgLyBsYXJnZXIgdGhhbiAq LworICAgICAgICAgIGNhc2UgU05EX0xBUjogeworCSAgICAgIENLX09GRl9UIHk7CisJICAgICAg aWYgKCFnZXR2YWwpIGJyZWFrOworCSAgICAgIGlmICgoeCA9IGNtbnVtdygiU2l6ZSBpbiBieXRl cyIsIjAiLDEwLCZ5LHh4c3RyaW5nKSkgPCAwKQorCQlnb3RvIHhnZXR4OworCSAgICAgIHB2W25d Lnd2YWwgPSB5OworCSAgICAgIGJyZWFrOworCSAgfQorICAgICAgICAgIGNhc2UgU05EX0ZJTDog ICAgICAgICAgICAgICAgIC8qIE5hbWUgb2YgZmlsZSBjb250YWluaW5nIGZpbG5hbWVzICovCisg ICAgICAgICAgICBpZiAoIWdldHZhbCkgYnJlYWs7CisgICAgICAgICAgICBpZiAoKHggPSBjbWlm aSgiTmFtZSBvZiBmaWxlIGNvbnRhaW5pbmcgbGlzdCBvZiBmaWxlbmFtZXMiLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICIiLCZzLCZ5LHh4c3RyaW5nKSkgPCAwKSB7CisgICAgICAg ICAgICAgICAgaWYgKHggPT0gLTMpIHsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/Rmls ZW5hbWUgcmVxdWlyZWRcbiIpOworICAgICAgICAgICAgICAgICAgICB4ID0gLTk7CisgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGdvdG8geGdldHg7CisgICAgICAgICAgICB9IGVs c2UgaWYgKHkgJiYgaXN3aWxkKHMpKSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCI/V2lsZGNh cmRzIG5vdCBhbGxvd2VkIEJCQlxuIik7CisgICAgICAgICAgICAgICAgeCA9IC05OworICAgICAg ICAgICAgICAgIGdvdG8geGdldHg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocykg aWYgKCEqcykgcyA9IE5VTEw7CisgICAgICAgICAgICBtYWtlc3RyKCYocHZbbl0uc3ZhbCkscyk7 CisgICAgICAgICAgICBpZiAocHZbbl0uc3ZhbCkKKyAgICAgICAgICAgICAgcHZbbl0uaXZhbCA9 IDE7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgU05EX01PVjogICAgICAg ICAgICAgICAgIC8qIE1PVkUgYWZ0ZXIgKi8KKyAgICAgICAgICBjYXNlIFNORF9SRU46ICAgICAg ICAgICAgICAgICAvKiBSRU5BTUUgYWZ0ZXIgKi8KKyAgICAgICAgICBjYXNlIFNORF9TUk46IHsg ICAgICAgICAgICAgICAvKiBTRVJWRVItUkVOQU1FICovCisgICAgICAgICAgICAgIGNoYXIgKiBt ID0gIiI7CisgICAgICAgICAgICAgIHN3aXRjaCAobikgeworICAgICAgICAgICAgICAgIGNhc2Ug U05EX01PVjoKKyAgICAgICAgICAgICAgICAgIG0gPQorICAgICAgICAgICAgICAgICAgICJEZXZp Y2UgYW5kL29yIGRpcmVjdG9yeSBmb3IgaW5jb21pbmcgZmlsZSBhZnRlciByZWNlcHRpb24iOwor ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBTTkRfUkVOOgor ICAgICAgICAgICAgICAgICAgbSA9ICJOZXcgbmFtZSBmb3IgaW5jb21pbmcgZmlsZSBhZnRlciBy ZWNlcHRpb24iOworICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2Fz ZSBTTkRfU1JOOgorICAgICAgICAgICAgICAgICAgbSA9ICJOZXcgbmFtZSBmb3Igc291cmNlIGZp bGUgb24gc2VydmVyIGFmdGVyIHJlY2VwdGlvbiI7CisgICAgICAgICAgICAgICAgICBicmVhazsK KyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBpZiAoIWdldHZhbCkgYnJlYWs7CisgICAg ICAgICAgICAgIGlmICgoeCA9IGNtZmxkKG0sICIiLCAmcywgbiA9PSBTTkRfTU9WID8geHhzdHJp bmcgOiBOVUxMKSkgPCAwKSB7CisgICAgICAgICAgICAgICAgICBpZiAoeCA9PSAtMykgeworICAg ICAgICAgICAgICAgICAgICAgIHByaW50ZigiJXNcbiIsIG4gPT0gU05EX01PViA/CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICI/RGVzdGluYXRpb24gcmVxdWlyZWQiIDoKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIj9OZXcgbmFtZSByZXF1aXJlZCIKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICAgICAgICB4ID0gLTk7CisgICAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICBnb3RvIHhnZXR4OworICAgICAgICAgICAg ICB9CisgICAgICAgICAgICAgIG1ha2VzdHIoJihwdltuXS5zdmFsKSwqcyA/IGJyc3RyaXAocykg OiBOVUxMKTsKKyAgICAgICAgICAgICAgcHZbbl0uaXZhbCA9IChwdltuXS5zdmFsKSA/IDEgOiAw OworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisjaWZuZGVmIE5PQ1NFVFMKKyAg ICAgICAgICBjYXNlIFNORF9DU0w6ICAgICAgICAgICAgICAgICAvKiBMb2NhbCBjaGFyYWN0ZXIg c2V0ICovCisgICAgICAgICAgY2FzZSBTTkRfQ1NSOiAgICAgICAgICAgICAgICAgLyogUmVtb3Rl IChzZXJ2ZXIpIGNoYXJzZXQgKi8KKyAgICAgICAgICAgIGlmICgoeCA9IGNta2V5KGZjc3RhYixu ZmlsYywiIiwiIix4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICAgICAgcmV0dXJuKCh4ID09IC0z KSA/IC0yIDogeCk7CisgICAgICAgICAgICBpZiAobiA9PSBTTkRfQ1NMKQorICAgICAgICAgICAg ICB4X2NzbCA9IHg7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIHhfY3NyID0geDsK KyAgICAgICAgICAgIHhfeGxhID0gMTsgICAgICAgICAgICAgICAgICAvKiBPdmVycmlkZXMgZ2xv YmFsIE9GRiBzZXR0aW5nICovCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2Ug U05EX1hQQTogICAgICAgICAgICAgICAgIC8qIFRyYW5zcGFyZW50ICovCisgICAgICAgICAgICB4 X3hsYSA9ICAwOworICAgICAgICAgICAgeF9jc3IgPSAtMTsKKyAgICAgICAgICAgIHhfY3NsID0g LTE7CisgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBOT0NTRVRTICovCisKKyAgICAgICAg ICBjYXNlIFNORF9OTUw6CisgICAgICAgICAgICBpZiAoKHggPSBjbW9maSgiTG9jYWwgZmlsZW5h bWUiLCItIiwmcyx4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICAgICAgZ290byB4Z2V0eDsKKyAg ICAgICAgICAgIG1ha2VzdHIoJmZ0cF9ubWwscyk7CisgICAgICAgICAgICBicmVhazsKKworCSAg Y2FzZSBTTkRfUEFUOgkJCS8qIC9QQVRURVJOOiAqLworCSAgICBpZiAoIWdldHZhbCkgYnJlYWs7 CisJICAgIGlmICgoeCA9IGNtZmxkKCJQYXR0ZXJuIiwiKiIsICZzLCB4eHN0cmluZykpIDwgMCkK KwkgICAgICBnb3RvIHhnZXR4OworCSAgICBtYWtlc3RyKCYocHZbbl0uc3ZhbCksKnMgPyBicnN0 cmlwKHMpIDogTlVMTCk7CisJICAgIHB2W25dLml2YWwgPSAocHZbbl0uc3ZhbCkgPyAxIDogMDsK KwkgICAgYnJlYWs7CisKKwkgIGNhc2UgU05EX05MUzoJCQkvKiAvTkxTVCAqLworICAgICAgICAg ICAgcHZbbl0uaXZhbCA9IDE7CQkvKiBVc2UgTkxTVCAqLworCSAgICBwdltTTkRfTUxTXS5pdmFs ID0gMDsJLyogRG9uJ3QgdXNlIE1MU0QgKi8KKwkgICAgYnJlYWs7CisKKwkgIGNhc2UgU05EX01M UzoJCQkvKiAvTUxTRCAqLworICAgICAgICAgICAgcHZbbl0uaXZhbCA9IDE7CQkvKiBVc2UgTUxT RCAqLworCSAgICBwdltTTkRfTkxTXS5pdmFsID0gMDsJLyogRG9uJ3QgdXNlIE5MU1QgKi8KKwkg ICAgYnJlYWs7CisKKyAgICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAvKiAv QUZURVIsIC9QRVJNSVNTSU9OUywgZXRjLi4uICovCisgICAgICAgICAgICBwcmludGYoIj9Tb3Jy eSwgXCIlc1wiIHdvcmtzIG9ubHkgd2l0aCBbTV1QVVRcbiIsYXRtYnVmKTsKKyAgICAgICAgICAg IHggPSAtOTsKKyAgICAgICAgICAgIGdvdG8geGdldHg7CisgICAgICAgIH0KKyAgICB9CisgICAg bGluZVswXSA9IE5VTDsKKyAgICBjbWFyZyA9IGxpbmU7CisgICAgY21hcmcyID0gYXNuYW1idWY7 CisgICAgcyA9IGxpbmU7CisvKgorICBGb3IgR0VULCB3ZSB3YW50IHRvIHBhcnNlIGFuIG9wdGlv bmFsIGFzLW5hbWUsIGxpa2Ugd2l0aCBQVVQuCisgIEZvciBNR0VULCB3ZSBtdXN0IHBhcnNlIGEg bGlzdCBvZiBuYW1lcywgYW5kIHRoZW4gc2VuZCBOTFNUIG9yIE1MU0QKKyAgY29tbWFuZHMgZm9y IGVhY2ggbmFtZSBzZXBhcmF0ZWx5LgorKi8KKyAgICBzd2l0Y2ggKGNtcmVzdWx0LmZjb2RlKSB7 ICAgICAgICAgICAvKiBIb3cgZGlkIHdlIGdldCBvdXQgb2Ygc3dpdGNoIGxvb3AgKi8KKyAgICAg IGNhc2UgX0NNRkxEOiAgICAgICAgICAgICAgICAgICAgICAvKiBGaWVsZCAqLworICAgICAgICBp ZiAoIWdldG9uZSkgeworICAgICAgICAgICAgcyA9IGJyc3RyaXAoY21yZXN1bHQuc3Jlc3VsdCk7 CisgICAgICAgICAgICBtYWtlc3RyKCYobWdldGxpc3RbbWdldG4rK10pLHMpOworICAgICAgICAg ICAgd2hpbGUgKCh4ID0gY21mbGQoIlJlbW90ZSBmaWxlbmFtZSIsIiIsJnMseHhzdHJpbmcpKSAh PSAtMykgeworICAgICAgICAgICAgICAgIGlmICh4IDwgMCkKKyAgICAgICAgICAgICAgICAgIGdv dG8geGdldHg7CisgICAgICAgICAgICAgICAgbWFrZXN0cigmKG1nZXRsaXN0W21nZXRuKytdKSxi cnN0cmlwKHMpKTsKKyAgICAgICAgICAgICAgICBpZiAobWdldG4gPj0gTUdFVE1BWCkgeworICAg ICAgICAgICAgICAgICAgICBwcmludGYoIj9Ub28gbWFueSBpdGVtcyBpbiBNR0VUIGxpc3RcbiIp OworICAgICAgICAgICAgICAgICAgICBnb3RvIHhnZXR4OworICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkKKyAgICAgICAg ICAgICAgZ290byB4Z2V0eDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHMgPSBicnN0 cmlwKGNtcmVzdWx0LnNyZXN1bHQpOworICAgICAgICAgICAgY2tzdHJuY3B5KGxpbmUscyxMSU5C VUZTSVopOworICAgICAgICAgICAgaWYgKCh4ID0gY21mbGQoIk5hbWUgdG8gc3RvcmUgaXQgdW5k ZXIiLCIiLCZzLHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgICAgICBpZiAoeCAhPSAtMykKKyAg ICAgICAgICAgICAgICBnb3RvIHhnZXR4OworICAgICAgICAgICAgcyA9IGJyc3RyaXAocyk7Cisg ICAgICAgICAgICBja3N0cm5jcHkoYXNuYW1idWYscyxDS01BWFBBVEgrMSk7CisgICAgICAgICAg ICBpZiAoKHggPSBjbWNmbSgpKSA8IDApCisgICAgICAgICAgICAgIGdvdG8geGdldHg7CisgICAg ICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIF9DTUNGTTogICAgICAgICAgICAgICAg ICAgICAgLyogQ29uZmlybWF0aW9uICovCisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoK KyAgICAgICAgcHJpbnRmKCI/VW5leHBlY3RlZCBmdW5jdGlvbiBjb2RlOiAlZFxuIixjbXJlc3Vs dC5mY29kZSk7CisgICAgICAgIHggPSAtOTsKKyAgICAgICAgZ290byB4Z2V0eDsKKyAgICB9Cisg ICAgaWYgKHB2W1NORF9SRUNdLml2YWwgPiAwKSAgICAgICAgICAgLyogL1JFQ1VSU0lWRSAqLwor ICAgICAgcmVjdXJzaXZlID0gMjsKKworICAgIGlmIChwdltTTkRfQklOXS5pdmFsID4gMCkgeyAg ICAgICAgIC8qIC9CSU5BUlkgcmVhbGx5IG1lYW5zIGJpbmFyeS4uLiAqLworICAgICAgICBmb3Jj ZXR5cGUgPSAxOyAgICAgICAgICAgICAgICAgIC8qIFNvIHNraXAgdGhlIG5hbWUtcGF0dGVybiBt YXRjaCAqLworICAgICAgICBmdHBfdHlwID0gWFlGVF9COyAgICAgICAgICAgICAgIC8qIFNldCBi aW5hcnkgKi8KKyAgICB9IGVsc2UgaWYgKHB2W1NORF9UWFRdLml2YWwgPiAwKSB7ICAvKiBTaW1p bGFybHkgZm9yIC9URVhULi4uICovCisgICAgICAgIGZvcmNldHlwZSA9IDE7CisgICAgICAgIGZ0 cF90eXAgPSBYWUZUX1Q7CisgICAgfSBlbHNlIGlmIChwdltTTkRfVEVOXS5pdmFsID4gMCkgeyAg LyogYW5kIC9URU5FWCovCisgICAgICAgIGZvcmNldHlwZSA9IDE7CisgICAgICAgIGZ0cF90eXAg PSBGVFRfVEVOOworICAgIH0gZWxzZSBpZiAoZnRwX2NtZGxpbiAmJiBmdHBfeGZlcm1vZGUgPT0g WE1PREVfTSkgeworICAgICAgICBmb3JjZXR5cGUgPSAxOworICAgICAgICBmdHBfdHlwID0gYmlu YXJ5OworICAgICAgICBnX2Z0cF90eXAgPSBiaW5hcnk7CisgICAgfQorICAgIGlmIChwdltTTkRf QVNOXS5pdmFsID4gMCAmJiBwdltTTkRfQVNOXS5zdmFsICYmICFhc25hbWJ1ZlswXSkgeworICAg ICAgICBjaGFyICogcDsKKyAgICAgICAgcCA9IGJyc3RyaXAocHZbU05EX0FTTl0uc3ZhbCk7ICAv KiBBcy1uYW1lICovCisgICAgICAgIGNrc3RybmNweShhc25hbWJ1ZixwLENLTUFYUEFUSCsxKTsK KyAgICB9CisgICAgZGVidWcoRjExMCwiZnRwIGdldCBhc25hbWJ1ZiIsYXNuYW1idWYsMCk7CisK KyNpZmRlZiBQSVBFU0VORAorICAgIGlmIChwdltTTkRfQ01EXS5pdmFsID4gMCkgeyAgICAgICAg IC8qIC9DT01NQU5EIC0gc3RyaXAgYW55IGJyYWNlcyAqLworICAgICAgICBjaGFyICogcDsKKyAg ICAgICAgcCA9IGFzbmFtYnVmOworICAgICAgICBkZWJ1ZyhGMTEwLCJHRVQgL0NPTU1BTkQgYmVm b3JlIHN0cmlwcGluZyIscCwwKTsKKyAgICAgICAgcCA9IGJyc3RyaXAocCk7CisgICAgICAgIGRl YnVnKEYxMTAsIkdFVCAvQ09NTUFORCBhZnRlciBzdHJpcHBpbmciLHAsMCk7CisgICAgICAgIGlm ICghKnApIHsKKyAgICAgICAgICAgIHByaW50ZigiP1NvcnJ5LCBhIGNvbW1hbmQgdG8gd3JpdGUg dG8gaXMgcmVxdWlyZWRcbiIpOworICAgICAgICAgICAgeCA9IC05OworICAgICAgICAgICAgZ290 byB4Z2V0eDsKKyAgICAgICAgfQorICAgICAgICBwaXBlbmFtZSA9IHA7CisgICAgICAgIHBpcGVz ZW5kID0gMTsKKyAgICB9CisjZW5kaWYgLyogUElQRVNFTkQgKi8KKworLyogU2V0IHVwIC9NT1ZF IGFuZCAvUkVOQU1FICovCisKKyNpZmRlZiBDT01NRU5UCisgICAgLyogQ29uZmxpY3QgZXhpc3Rz IG9ubHkgZm9yIFBVVCAtIHJlbW92ZWQgMTMgTWFyIDIwMDYgLSBmZGMgKi8KKyAgICBpZiAocHZb U05EX0RFTF0uaXZhbCA+IDAgJiYKKyAgICAgICAgKHB2W1NORF9NT1ZdLml2YWwgPiAwIHx8IHB2 W1NORF9SRU5dLml2YWwgPiAwKSkgeworICAgICAgICBwcmludGYoIj9Tb3JyeSwgL0RFTEVURSBj b25mbGljdHMgd2l0aCAvTU9WRSBvciAvUkVOQU1FXG4iKTsKKyAgICAgICAgeCA9IC05OworICAg ICAgICBnb3RvIHhnZXR4OworICAgIH0KKyNlbmRpZgkvKiBDT01NRU5UICovCisjaWZkZWYgQ0tf VE1QRElSCisgICAgaWYgKHB2W1NORF9NT1ZdLml2YWwgPiAwICYmIHB2W1NORF9NT1ZdLnN2YWwp IHsKKyAgICAgICAgaW50IGxlbjsKKyAgICAgICAgY2hhciAqIHAgPSBwdltTTkRfTU9WXS5zdmFs OworICAgICAgICBsZW4gPSBzdHJsZW4ocCk7CisgICAgICAgIGlmICghaXNkaXIocCkpIHsgICAg ICAgICAgICAgICAgLyogQ2hlY2sgZGlyZWN0b3J5ICovCisjaWZkZWYgQ0tfTUtESVIKKyAgICAg ICAgICAgIGNoYXIgKiBzID0gTlVMTDsKKyAgICAgICAgICAgIHMgPSAoY2hhciAqKW1hbGxvYyhs ZW4gKyA0KTsKKyAgICAgICAgICAgIGlmIChzKSB7CisgICAgICAgICAgICAgICAgc3RyY3B5KHMs cCk7ICAgICAgICAgICAgLyogc2FmZSAqLworI2lmZGVmIGRhdGFnZW5lcmFsCisgICAgICAgICAg ICAgICAgaWYgKHNbbGVuLTFdICE9ICc6JykgeyBzW2xlbisrXSA9ICc6Jzsgc1tsZW5dID0gTlVM OyB9CisjZWxzZQorICAgICAgICAgICAgICAgIGlmIChzW2xlbi0xXSAhPSAnLycpIHsgc1tsZW4r K10gPSAnLyc7IHNbbGVuXSA9IE5VTDsgfQorI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCisgICAg ICAgICAgICAgICAgc1tsZW4rK10gPSAnWCc7CisgICAgICAgICAgICAgICAgc1tsZW5dID0gTlVM OworI2lmZGVmIE5PTUtESVIKKyAgICAgICAgICAgICAgICB4ID0gLTE7CisjZWxzZQorICAgICAg ICAgICAgICAgIHggPSB6bWtkaXIocyk7CisjZW5kaWYgLyogTk9NS0RJUiAqLworICAgICAgICAg ICAgICAgIGZyZWUocyk7CisgICAgICAgICAgICAgICAgaWYgKHggPCAwKSB7CisgICAgICAgICAg ICAgICAgICAgIHByaW50ZigiP0Nhbid0IGNyZWF0ZSBcIiVzXCJcbiIscCk7CisgICAgICAgICAg ICAgICAgICAgIHggPSAtOTsKKyAgICAgICAgICAgICAgICAgICAgZ290byB4Z2V0eDsKKyAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisjZWxzZQorICAgICAgICAgICAgcHJpbnRmKCI/ RGlyZWN0b3J5IFwiJXNcIiBub3QgZm91bmRcbiIscCk7CisgICAgICAgICAgICB4ID0gLTk7Cisg ICAgICAgICAgICBnb3RvIHhnZXR4OworI2VuZGlmIC8qIENLX01LRElSICovCisgICAgICAgIH0K KyAgICAgICAgbWFrZXN0cigmcmN2X21vdmUscCk7CisgICAgICAgIG1vdmluZyA9IDE7CisgICAg fQorI2VuZGlmIC8qIENLX1RNUERJUiAqLworCisgICAgaWYgKHB2W1NORF9SRU5dLml2YWwgPiAw KSB7ICAgICAgICAgLyogL1JFTkFNRSAqLworICAgICAgICBjaGFyICogcCA9IHB2W1NORF9SRU5d LnN2YWw7CisgICAgICAgIGlmICghcCkgcCA9ICIiOworICAgICAgICBpZiAoISpwKSB7CisgICAg ICAgICAgICBwcmludGYoIj9OZXcgbmFtZSByZXF1aXJlZCBmb3IgL1JFTkFNRVxuIik7CisgICAg ICAgICAgICB4ID0gLTk7CisgICAgICAgICAgICBnb3RvIHhnZXR4OworICAgICAgICB9CisgICAg ICAgIHAgPSBicnN0cmlwKHApOworI2lmbmRlZiBOT1NQTAorICAgIC8qIElmIG5hbWUgZ2l2ZW4g aXMgd2lsZCwgcmVuYW1lIHN0cmluZyBtdXN0IGNvbnRhaW4gdmFyaWFibGVzICovCisgICAgICAg IGlmIChtZ2V0ICYmICFnZXRvbmUpIHsKKyAgICAgICAgICAgIGNoYXIgKiBzID0gdG1wYnVmOwor ICAgICAgICAgICAgeCA9IFRNUEJVRlNJWjsKKyAgICAgICAgICAgIHp6c3RyaW5nKHAsJnMsJngp OworICAgICAgICAgICAgaWYgKCFzdHJjbXAodG1wYnVmLHApKSB7CisgICAgICAgICAgICAgICAg cHJpbnRmKAorICAgICI/L1JFTkFNRSBmb3IgZmlsZSBncm91cCBtdXN0IGNvbnRhaW4gdmFyaWFi bGVzIHN1Y2ggYXMgXFx2KGZpbGVuYW1lKVxuIgorICAgICAgICAgICAgICAgICAgICAgICApOwor ICAgICAgICAgICAgICAgIHggPSAtOTsKKyAgICAgICAgICAgICAgICBnb3RvIHhnZXR4OworICAg ICAgICAgICAgfQorICAgICAgICB9CisjZW5kaWYgLyogTk9TUEwgKi8KKyAgICAgICAgcmVuYW1p bmcgPSAxOworICAgICAgICBtYWtlc3RyKCZyY3ZfcmVuYW1lLHApOworICAgICAgICBkZWJ1ZyhG MTEwLCJGVFAgcmN2X3JlbmFtZSIscmN2X3JlbmFtZSwwKTsKKyAgICB9CisgICAgaWYgKCFjbWFy Z1swXSAmJiBtZ2V0biA9PSAwICYmIGdldG9uZSAmJiBwdltTTkRfRklMXS5pdmFsIDwgMSkgewor ICAgICAgICBwcmludGYoIj9GaWxlbmFtZSByZXF1aXJlZCBidXQgbm90IGdpdmVuXG4iKTsKKyAg ICAgICAgeCA9IC05OworICAgICAgICBnb3RvIHhnZXR4OworICAgIH0gZWxzZSBpZiAoKGNtYXJn WzBdIHx8IG1nZXRuID4gMCkgJiYgcHZbU05EX0ZJTF0uaXZhbCA+IDApIHsKKyAgICAgICAgcHJp bnRmKCI/WW91IGNhbid0IGdpdmUgYm90aCAvTElTVEZJTEUgYW5kIGEgcmVtb3RlIGZpbGVuYW1l XG4iKTsKKyAgICAgICAgeCA9IC05OworICAgICAgICBnb3RvIHhnZXR4OworICAgIH0KKyAgICBD SEVDS0NPTk4oKTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBDaGVjayBjb25uZWN0aW9uICov CisKKyAgICBpZiAocHZbU05EX0NPTF0uaXZhbCA+IC0xKQorICAgICAgeF9mbmMgPSBwdltTTkRf Q09MXS5pdmFsOworCisjaWZuZGVmIE5PU1BMCisgICAgLyogSWYgYXMtbmFtZSBnaXZlbiBmb3Ig TUdFVCwgYXMtbmFtZSBtdXN0IGNvbnRhaW4gdmFyaWFibGVzICovCisgICAgaWYgKG1nZXQgJiYg IWdldG9uZSAmJiBhc25hbWJ1ZlswXSAmJiB4X2ZuYyAhPSBYWUZYX0EpIHsKKyAgICAgICAgY2hh ciAqIHMgPSB0bXBidWY7CisgICAgICAgIHggPSBUTVBCVUZTSVo7CisgICAgICAgIHp6c3RyaW5n KGFzbmFtYnVmLCZzLCZ4KTsKKyAgICAgICAgaWYgKCFzdHJjbXAodG1wYnVmLGFzbmFtYnVmKSkg eworICAgICAgICAgICAgcHJpbnRmKAorICAgICI/QXMtbmFtZSBmb3IgTUdFVCBtdXN0IGNvbnRh aW4gdmFyaWFibGVzIHN1Y2ggYXMgXFx2KGZpbGVuYW1lKVxuIgorICAgICAgICAgICAgICAgICAg ICk7CisgICAgICAgICAgICB4ID0gLTk7CisgICAgICAgICAgICBnb3RvIHhnZXR4OworICAgICAg ICB9CisgICAgfQorI2VuZGlmIC8qIE5PU1BMICovCisKKy8qIGRvZ2V0OiAqLworCisgICAgaWYg KHB2W1NORF9TSEhdLml2YWwgPiAwIHx8IGZ0cF9ubWwpIHsgLyogR0VUIC9RVUlFVC4uLiAqLwor ICAgICAgICBmZGlzcGxhID0gMDsKKyAgICB9IGVsc2UgeworICAgICAgICBkaXNwbGEgPSAxOwor ICAgICAgICBpZiAobWRlbCB8fCBmdHBfZGViKQorCSAgZmRpc3BsYSA9IFhZRkRfQjsKKyAgICB9 CisgICAgZGVsZXRpbmcgPSAwOworICAgIGlmIChwdltTTkRfREVMXS5pdmFsID4gMCkgICAgICAg ICAgIC8qIC9ERUxFVEUgd2FzIHNwZWNpZmllZCAqLworICAgICAgZGVsZXRpbmcgPSAxOworICAg IGlmIChwdltTTkRfRVhDXS5pdmFsID4gMCkKKyAgICAgIG1ha2VsaXN0KHB2W1NORF9FWENdLnN2 YWwscmN2ZXhjZXB0LE5TTkRFWENFUFQpOworICAgIGlmIChwdltTTkRfU01BXS53dmFsID4gLTEp CisgICAgICBnZXRzbWFsbGVyID0gcHZbU05EX1NNQV0ud3ZhbDsKKyAgICBpZiAocHZbU05EX0xB Ul0ud3ZhbCA+IC0xKQorICAgICAgZ2V0bGFyZ2VyID0gcHZbU05EX0xBUl0ud3ZhbDsKKyAgICBp ZiAocHZbU05EX05BTV0uaXZhbCA+IC0xKQorICAgICAgeF9jbnYgPSBwdltTTkRfTkFNXS5pdmFs OworICAgIGlmIChwdltTTkRfRVJSXS5pdmFsID4gLTEpCisgICAgICBnZXRlcnJvciA9IHB2W1NO RF9FUlJdLml2YWw7CisgICAgaWYgKHB2W1NORF9NQUldLml2YWwgPiAtMSkKKyAgICAgIHRvc2Ny ZWVuID0gMTsKKworICAgIGlmIChwdltTTkRfTkxTXS5pdmFsID4gMCkgewkJLyogRm9yY2UgTkxT VCBvciBNTFNEPyAqLworCW1nZXRtZXRob2QgPSBTTkRfTkxTOworCW1nZXRmb3JjZWQgPSAxOwor ICAgIH0gZWxzZSBpZiAocHZbU05EX01MU10uaXZhbCA+IDApIHsKKwltZ2V0bWV0aG9kID0gU05E X01MUzsKKwltZ2V0Zm9yY2VkID0gMTsKKyAgICB9CisKKyNpZmRlZiBGVFBfUkVTVEFSVAorICAg IGlmIChwdltTTkRfUkVTXS5pdmFsID4gMCkgeworICAgICAgICBpZiAoIWZ0cF90eXApIHsKKyAg ICAgICAgICAgIHByaW50ZigiP1NvcnJ5LCBHRVQgL1JFQ09WRVIgcmVxdWlyZXMgYmluYXJ5IG1v ZGVcbiIpOworICAgICAgICAgICAgeCA9IC05OworICAgICAgICAgICAgZ290byB4Z2V0eDsKKyNp ZmRlZiBDT01NRU5UCisgICAgICAgIC8qIE5vdCB0cnVlIC0gdGhlIGZhY3QgdGhhdCB0aGUgaW5p dGlhbCBSRVNUIGZhaWxzIGRvZXMgbm90IG1lYW4gKi8KKyAgICAgICAgLyogaXQgd2lsbCBmYWls IGhlcmUuICAqLworICAgICAgICB9IGVsc2UgaWYgKCFva3Jlc3RhcnQpIHsKKyAgICAgICAgICAg IHByaW50ZigiV0FSTklORzogU2VydmVyIG1pZ2h0IG5vdCBzdXBwb3J0IHJlc3RhcnQuLi5cbiIp OworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAgfQorICAgICAgICByZXN0YXJ0ID0gMTsK KyAgICB9CisjZW5kaWYgLyogRlRQX1JFU1RBUlQgKi8KKworI2lmZGVmIFBJUEVTRU5ECisgICAg aWYgKHB2W1NORF9GTFRdLml2YWwgPiAwKSB7ICAgICAgICAgLyogSGF2ZSBTRU5EIEZJTFRFUj8g Ki8KKyAgICAgICAgaWYgKHBpcGVzZW5kKSB7CisgICAgICAgICAgICBwcmludGYoIj9Td2l0Y2gg Y29uZmxpY3Q6IC9GSUxURVIgYW5kIC9DT01NQU5EXG4iKTsKKyAgICAgICAgICAgIHggPSAtOTsK KyAgICAgICAgICAgIGdvdG8geGdldHg7CisgICAgICAgIH0KKyAgICAgICAgbWFrZXN0cigmcmN2 ZmlsdGVyLHB2W1NORF9GTFRdLnN2YWwpOworICAgICAgICBkZWJ1ZyhGMTEwLCJmdHAgZ2V0IC9G SUxURVIiLCByY3ZmaWx0ZXIsIDApOworICAgIH0KKyAgICBpZiAocmN2ZmlsdGVyIHx8IHBpcGVz ZW5kKSB7ICAgICAgICAvKiAvUkVTVEFSVCAqLworI2lmZGVmIEZUUF9SRVNUQVJUCisgICAgICAg IGlmIChyZXN0YXJ0KSB7ICAgICAgICAgICAgICAgICAgLyogd2l0aCBwaXBlcyBvciBmaWx0ZXJz ICovCisgICAgICAgICAgICBwcmludGYoIj9Td2l0Y2ggY29uZmxpY3Q6IC9GSUxURVIgb3IgL0NP TU1BTkQgYW5kIC9SRUNPVkVSXG4iKTsKKyAgICAgICAgICAgIHggPSAtOTsKKyAgICAgICAgICAg IGdvdG8geGdldHg7CisgICAgICAgIH0KKyNlbmRpZiAvKiBGVFBfUkVTVEFSVCAqLworICAgICAg ICBpZiAocHZbU05EX1VQRF0uaXZhbCA+IDAgfHwgeF9mbmMgPT0gWFlGWF9NIHx8IHhfZm5jID09 IFhZRlhfVSkgeworICAgICAgICAgICAgcHJpbnRmKAorCQkiP1N3aXRjaCBjb25mbGljdDogL0ZJ TFRFUiBvciAvQ09NTUFORCBhbmQgRGF0ZSBDaGVja2luZ1xuIik7CisgICAgICAgICAgICB4ID0g LTk7CisgICAgICAgICAgICBnb3RvIHhnZXR4OworICAgICAgICB9CisgICAgfQorI2VuZGlmIC8q IFBJUEVTRU5EICovCisKKyAgICB0ZmMgPSAoQ0tfT0ZGX1QpMDsJCQkvKiBJbml0aWFsaXplIHN0 YXRzIGFuZCBjb3VudGVycyAqLworICAgIGZpbGNudCA9IDA7CisgICAgcGt0bnVtID0gMDsKKyAg ICBycGFja2V0cyA9IDBMOworCisgICAgaWYgKHB2W1NORF9GSUxdLml2YWwgPiAwKSB7CisgICAg ICAgIGlmICh6b3BlbmkoWk1GSUxFLHB2W1NORF9GSUxdLnN2YWwpIDwgMSkgeworICAgICAgICAg ICAgZGVidWcoRjExMSwiZnRwIGdldCBjYW4ndCBvcGVuIGxpc3RmaWxlIixwdltTTkRfRklMXS5z dmFsLGVycm5vKTsKKyAgICAgICAgICAgIHByaW50ZigiP0ZhaWx1cmUgdG8gb3BlbiBsaXN0Zmls ZSAtIFwiJXNcIlxuIixwdltTTkRfRklMXS5zdmFsKTsKKyAgICAgICAgICAgIHggPSAtOTsKKyAg ICAgICAgICAgIGdvdG8geGdldHg7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHpzaW5sKFpNRklM RSx0bXBidWYsQ0tNQVhQQVRIKSA8IDApIHsgLyogUmVhZCBhIGxpbmUgKi8KKyAgICAgICAgICAg IHpjbG9zZShaTUZJTEUpOyAgICAgICAgICAgICAgICAgICAgICAgLyogRmFpbGVkICovCisgICAg ICAgICAgICBkZWJ1ZyhGMTEwLCJmdHAgZ2V0IGxpc3RmaWxlIEVPRiIscHZbU05EX0ZJTF0uc3Zh bCwwKTsKKyAgICAgICAgICAgIHByaW50ZigiP0VtcHR5IGxpc3RmaWxlIC0gXCIlc1wiXG4iLHB2 W1NORF9GSUxdLnN2YWwpOworICAgICAgICAgICAgeCA9IC05OworICAgICAgICAgICAgZ290byB4 Z2V0eDsKKyAgICAgICAgfQorICAgICAgICBsaXN0ZmlsZSA9IDE7CisgICAgICAgIGRlYnVnKEYx MTAsImZ0cCBnZXQgbGlzdGZpbGUgZmlyc3QiLHRtcGJ1ZiwwKTsKKyAgICAgICAgbWFrZXN0cigm KG1nZXRsaXN0WzBdKSx0bXBidWYpOworICAgIH0KKyAgICB0MCA9IGdtc3RpbWVyKCk7ICAgICAg ICAgICAgICAgICAgICAvKiBSZWNvcmQgc3RhcnRpbmcgdGltZSAqLworCisgICAgdXBkYXRpbmcg PSAwOwkJCS8qIENoZWNraW5nIGRhdGVzPyAqLworICAgIGlmIChwdltTTkRfVVBEXS5pdmFsID4g MCB8fCAoIW1kZWwgJiYgeF9mbmMgPT0gWFlGWF9VKSkKKyAgICAgIHVwZGF0aW5nID0gMTsKKyAg ICBpZiAocHZbU05EX0RJRl0uaXZhbCA+IDAgfHwgeF9mbmMgPT0gWFlGWF9NKQorICAgICAgdXBk YXRpbmcgPSAyOworICAgIGlmICh1cGRhdGluZykJCQkvKiBUaGVzZSBzd2l0Y2hlcyBmb3JjZSBG VFAgREFURVMgT04gKi8KKyAgICAgIGZ0cF9kYXRlcyB8PSAyOworCisgICAgd2hhdCA9IG1kZWwg PyBXX0ZUUHxXX0ZUX0RFTEUgOiBXX1JFQ1Z8V19GVFA7IC8qIFdoYXQgd2UncmUgZG9pbmcgKi8K KworICAgIGNhbmNlbGdyb3VwID0gMDsgICAgICAgICAgICAgICAgICAgIC8qIEdyb3VwIG5vdCBj YW5jZWxlZCB5ZXQgKi8KKyAgICBpZiAoIShmdHBfeGZlcm1vZGUgPT0gWE1PREVfQSAmJiBwYXR0 ZXJucyAmJiBnZXRfYXV0byAmJiAhZm9yY2V0eXBlKSkKKyAgICAgIGNoYW5nZXR5cGUoZnRwX3R5 cCwwKTsJCS8qIENoYW5nZSB0byByZXF1ZXN0ZWQgdHlwZSAqLworICAgIGJpbmFyeSA9IGZ0cF90 eXA7ICAgICAgICAgICAgICAgICAgIC8qIEZvciBmaWxlLXRyYW5zZmVyIGRpc3BsYXkgKi8KKyAg ICBmaXJzdCA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGb3IgTUdFVCBsaXN0ICov CisgICAgZG9uZSA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTG9vcCBjb250cm9s ICovCisKKyNpZmRlZiBDS19UTVBESVIKKyAgICBpZiAoZGxkaXIgJiYgIWZfdG1wZGlyKSB7ICAg ICAgICAgICAvKiBJZiB0aGV5IGhhdmUgYSBkb3dubG9hZCBkaXJlY3RvcnkgKi8KKyAgICAgICAg aWYgKChzID0gemd0ZGlyKCkpKSB7ICAgICAgICAgICAvKiBHZXQgY3VycmVudCBkaXJlY3Rvcnkg Ki8KKyAgICAgICAgICAgIGlmICh6Y2hkaXIoZGxkaXIpKSB7ICAgICAgICAvKiBDaGFuZ2UgdG8g ZG93bmxvYWQgZGlyZWN0b3J5ICovCisgICAgICAgICAgICAgICAgY2tzdHJuY3B5KHNhdmRpcixz LFRNUERJUkxFTik7CisgICAgICAgICAgICAgICAgZl90bXBkaXIgPSAxOyAgICAgICAgICAgLyog UmVtZW1iZXIgdGhhdCB3ZSBkaWQgdGhpcyAqLworICAgICAgICAgICAgfQorICAgICAgICB9Cisg ICAgfQorI2VuZGlmIC8qIENLX1RNUERJUiAqLworCisgICAgaWYgKGZ0cF9ubWwpIHsgICAgICAg ICAgICAgICAgICAgICAgLyogL05BTUVMSVNUICovCisgICAgICAgIGRlYnVnKEYxMTAsImZ0cCBH RVQgZnRwX25tbCIsZnRwX25tbCwwKTsKKyAgICAgICAgaWYgKGZ0cF9ubWxbMF0gPT0gJy0nICYm IGZ0cF9ubWxbMV0gPT0gMCkKKyAgICAgICAgICBmcF9ubWwgPSBzdGRvdXQ7CisgICAgICAgIGVs c2UKKyAgICAgICAgICBmcF9ubWwgPSBmb3BlbihmdHBfbm1sLCAid2IiKTsKKyAgICAgICAgaWYg KCFmcF9ubWwpIHsKKyAgICAgICAgICAgIHByaW50ZigiPyVzOiAlc1xuIixmdHBfbm1sLGNrX2Vy cnN0cigpKTsKKyAgICAgICAgICAgIGdvdG8geGdldHg7CisgICAgICAgIH0KKyAgICB9CisgICAg d2hpbGUgKCFkb25lICYmICFjYW5jZWxncm91cCkgeyAgICAgLyogTG9vcCBmb3IgYWxsIGZpbGVz ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogb3IgdW50aWwg Y2FuY2VsZWQuICovCisjaWZkZWYgRlRQX1BST1hZCisgICAgICAgIC8qIGRvIHNvbWV0aGluZyBo ZXJlIGlmIHByb3h5ICovCisjZW5kaWYgLyogRlRQX1BST1hZICovCisKKyAgICAgICAgcnNfbGVu ID0gKENLX09GRl9UKTA7CQkvKiBSRUdFVCBwb3NpdGlvbiAqLworICAgICAgICBjYW5jZWxmaWxl ID0gMDsgICAgICAgICAgICAgICAgIC8qIFRoaXMgZmlsZSBub3QgY2FuY2VsZWQgeWV0ICovCisg ICAgICAgIGhhc3BhdGggPSAwOyAgICAgICAgICAgICAgICAgICAgLyogUmVjYWxjdWxhdGUgdGhp cyBlYWNoIHRpbWUgdGhydSAqLworCisgICAgICAgIGlmIChnZXRvbmUpIHsgICAgICAgICAgICAg ICAgICAgLyogR0VUICovCisgICAgICAgICAgICBjaGFyICogcDsKKyAgICAgICAgICAgIHMgPSBs aW5lOworICAgICAgICAgICAgc3JjID0gbGluZTsgICAgICAgICAgICAgICAgIC8qIFNlcnZlciBu YW1lICovCisgICAgICAgICAgICBkb25lID0gMTsKKyAgICAgICAgICAgIGRlYnVnKEYxMTEsImZ0 cCBnZXQgZmlsZSIscywwKTsKKyAgICAgICAgfSBlbHNlIGlmIChtZ2V0KSB7ICAgICAgICAgICAg ICAvKiBNR0VUICovCisgICAgICAgICAgICBzcmMgPSBtZ2V0bGlzdFttZ2V0eF07CisgICAgICAg ICAgICBkZWJ1ZyhGMTExLCJmdHAgbWdldCByZW1vdGVfZmlsZXMgQSIsc3JjLGZpcnN0KTsKKyAg ICAgICAgICAgIHMgPSAoY2hhciAqKXJlbW90ZV9maWxlcyhmaXJzdCwKKwkJCQkgICAgIChDSEFS ICopbWdldGxpc3RbbWdldHhdLAorCQkJCSAgICAgKENIQVIgKilwdltTTkRfUEFUXS5zdmFsLAor CQkJCSAgICAgMAorCQkJCSAgICAgKTsKKyAgICAgICAgICAgIGRlYnVnKEYxMTAsImZ0cCBtZ2V0 IHJlbW90ZV9maWxlcyBCIixzLDApOworICAgICAgICAgICAgaWYgKCFzKSBzID0gIiI7CisgICAg ICAgICAgICBpZiAoISpzKSB7CisgICAgICAgICAgICAgICAgZmlyc3QgPSAxOworICAgICAgICAg ICAgICAgIGlmIChsaXN0ZmlsZSkgewkJLyogTmFtZXMgZnJvbSBsaXN0ZmlsZSAqLworICAgICAg ICAgICAgICAgICAgYWdhaW46CisgICAgICAgICAgICAgICAgICAgIHRtcGJ1ZlswXSA9IE5VTDsK KyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCF0bXBidWZbMF0pIHsKKyAgICAgICAgICAgICAg ICAgICAgICAgIGlmICh6c2lubChaTUZJTEUsdG1wYnVmLENLTUFYUEFUSCkgPCAwKSB7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgemNsb3NlKFpNRklMRSk7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZGVidWcoRjExMCwiZnRwIGdldCBsaXN0ZmlsZSBFT0YiLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHB2W1NORF9GSUxdLnN2YWwsMCk7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbWFrZXN0cigmKG1nZXRsaXN0WzBdKSxOVUxMKTsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBkb25lID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg ICAgICBpZiAoZG9uZSkKKyAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg ICAgICAgICAgICAgICBtYWtlc3RyKCYobWdldGxpc3RbMF0pLHRtcGJ1Zik7CisJCSAgICBkZWJ1 ZyhGMTEwLCJmdHAgZ2V0IGxpc3RmaWxlIG5leHQiLHRtcGJ1ZiwwKTsKKyAgICAgICAgICAgICAg ICAgICAgcyA9IChjaGFyICopcmVtb3RlX2ZpbGVzKGZpcnN0LAorCQkJCQkgICAgIChDSEFSICop bWdldGxpc3RbMF0sCisJCQkJCSAgICAgKENIQVIgKilwdltTTkRfUEFUXS5zdmFsLAorCQkJCQkg ICAgIDAKKwkJCQkJICAgICApOworCQkgICAgZGVidWcoRjExMCwiZnRwIG1nZXQgcmVtb3RlX2Zp bGVzIEMiLHMsMCk7CisgICAgICAgICAgICAgICAgICAgIGlmICghcykgeworICAgICAgICAgICAg ICAgICAgICAgICAgZnRzY3JlZW4oU0NSX0ZOLCdGJywoQ0tfT0ZGX1QpMCxzKTsKKyAgICAgICAg ICAgICAgICAgICAgICAgIGZ0c2NyZWVuKFNDUl9TVCxTVF9NU0csKENLX09GRl9UKTAsIkZpbGUg bm90IGZvdW5kIik7CisgICAgICAgICAgICAgICAgICAgICAgICB0bG9nKEYxMTAsImZ0cCBnZXQg ZmlsZSBub3QgZm91bmQ6IixzLDApOworICAgICAgICAgICAgICAgICAgICAgICAgZ290byBhZ2Fp bjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CQkvKiBO YW1lcyBmcm9tIGNvbW1hbmQgbGluZSAqLworICAgICAgICAgICAgICAgICAgICBtZ2V0eCsrOwor ICAgICAgICAgICAgICAgICAgICBpZiAobWdldHggPCBtZ2V0bikKKwkJICAgICAgcyA9IChjaGFy ICopcmVtb3RlX2ZpbGVzKGZpcnN0LAorCQkJCQkgICAgICAgKENIQVIgKiltZ2V0bGlzdFttZ2V0 eF0sCisJCQkJCSAgICAgICAoQ0hBUiAqKXB2W1NORF9QQVRdLnN2YWwsCisJCQkJCSAgICAgICAw CisJCQkJCSAgICAgICApOworICAgICAgICAgICAgICAgICAgICBlbHNlCisJCSAgICAgIHMgPSBO VUxMOworCQkgICAgaWYgKCFzKSBtZ2V0eCsrOworCQkgICAgZGVidWcoRjExMSwiZnRwIG1nZXQg cmVtb3RlX2ZpbGVzIEQiLHMsbWdldHgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg ICAgICBpZiAoIXMpIHsKKwkJICAgIGlmICghZmlyc3QgfHwgbWdldHggPj0gbWdldG4pIHsKKwkJ CWRvbmUgPSAxOworCQkJYnJlYWs7CisJCSAgICB9IGVsc2UgaWYgKGdldGVycm9yKSB7CisJCQlz dGF0dXMgPSAwOworCQkJZG9uZSA9IDE7CisJCQlicmVhazsKKwkJICAgIH0gZWxzZSB7CisJCQlj b250aW51ZTsKKwkJICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg ICAgIH0KKwlkZWJ1ZyhGMTExLCJmdHAgbWdldCByZW1vdGVfZmlsZXMgRSIscywwKTsKKyAgICAg ICAgLyoKKyAgICAgICAgICBUaGUgc2VtYW50aWNzIG9mIE5MU1QgYXJlIGlsbC1kZWZpbmVkLiAg U3VwcG9zZSB3ZSBoYXZlIGp1c3Qgc2VudAorICAgICAgICAgIE5MU1QgL3BhdGgvW2Etel0qLiAg TW9zdCBzZXJ2ZXJzIHNlbmQgYmFjayBuYW1lcyBsaWtlIC9wYXRoL2ZvbywKKyAgICAgICAgICAv cGF0aC9iYXIsIGV0Yy4gIEJ1dCBzb21lIHNlbmQgYmFjayBvbmx5IGZvbyBhbmQgYmFyLCBhbmQg c3Vic2VxdWVudAorICAgICAgICAgIFJFVFIgY29tbWFuZHMgYmFzZWQgb24gdGhlIHBhdGhsZXNz IG5hbWVzIGFyZSBub3QgZ29pbmcgdG8gd29yay4KKyAgICAgICAgKi8KKyAgICAgICAgaWYgKHNl cnZlcnR5cGUgPT0gU1lTX1VOSVggJiYgIWNrc3RyY2hyKHMsJy8nKSkgeworICAgICAgICAgICAg Y2hhciAqIHMzOworICAgICAgICAgICAgaWYgKChzMyA9IGNrc3RycmNocihtZ2V0bGlzdFttZ2V0 eF0sJy8nKSkpIHsKKyAgICAgICAgICAgICAgICBpbnQgbGVuLCBsZWZ0ID0gNDA5NjsKKyAgICAg ICAgICAgICAgICBjaGFyICogdG1wID0geHRtcGJ1ZjsKKyAgICAgICAgICAgICAgICBsZW4gPSBz MyAtIG1nZXRsaXN0W21nZXR4XSArIDE7CisgICAgICAgICAgICAgICAgY2tzdHJuY3B5KHRtcCxt Z2V0bGlzdFttZ2V0eF0sbGVmdCk7CisgICAgICAgICAgICAgICAgdG1wICs9IGxlbjsKKyAgICAg ICAgICAgICAgICBsZWZ0IC09IGxlbjsKKyAgICAgICAgICAgICAgICBja3N0cm5jcHkodG1wLHMs bGVmdCk7CisgICAgICAgICAgICAgICAgcyA9IHh0bXBidWY7CisJCWRlYnVnKEYxMTEsImZ0cCBt Z2V0IHJlbW90ZV9maWxlcyBGIixzLDApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg ICAgIGZpcnN0ID0gMDsKKyAgICAgICAgc2tpcHRoaXMgPSAwOyAgICAgICAgICAgICAgICAgICAv KiBGaWxlIHNlbGVjdGlvbi4uLiAqLworICAgICAgICBtc2cgPSAiIjsKKyAgICAgICAgbmFtID0g czsgICAgICAgICAgICAgICAgICAgICAgICAvKiBGaWxlbmFtZSAod2l0aG91dCBwYXRoKSAqLwor ICAgICAgICByYyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEluaXRpYWwgcmV0dXJu IGNvZGUgKi8KKyAgICAgICAgczIgPSAiIjsKKworICAgICAgICBpZiAoIWdldG9uZSAmJiAhc2tp cHRoaXMpIHsgICAgIC8qIEZvciBNR0VUIGFuZCBNREVMRVRFLi4uICovCisgICAgICAgICAgICBj aGFyIGMsICogcCA9IHM7CisgICAgICAgICAgICBpbnQgc3J2cGF0aCA9IDA7CisgICAgICAgICAg ICBpbnQgdXNycGF0aCA9IDA7CisgICAgICAgICAgICBpbnQgaSwgayA9IDA7CisKKwkgICAgZGVi dWcoRjExMSwiZnRwIG1nZXQgaGF2ZXR5cGUiLHMsaGF2ZXR5cGUpOworCSAgICBpZiAoaGF2ZXR5 cGUgPiAwICYmIGhhdmV0eXBlICE9IEZUWVBfRklMRSkgeworCQkvKiBTZXJ2ZXIgc2F5cyBpdCdz IG5vdCBmaWxlLi4uICovCisJCWRlYnVnKEYxMTAsImZ0cCBtZ2V0IG5vdC1hLWZpbGUiLHMsMCk7 CisJCWNvbnRpbnVlOworCSAgICB9CisvKgorICBFeHBsYW5hdGlvbjogU29tZSBmdHAgc2VydmVy cyAoc3VjaCBhcyB3dS1mdHBkKSByZXR1cm4gYSByZWN1cnNpdmUgbGlzdC4KKyAgQnV0IGlmIHRo ZSBjbGllbnQgZGlkIG5vdCBhc2sgZm9yIGEgcmVjdXJzaXZlIGxpc3QsIHdlIGhhdmUgdG8gaWdu b3JlIGFueQorICBzZXJ2ZXIgZmlsZXMgdGhhdCBpbmNsdWRlIGEgcGF0aG5hbWUgdGhhdCBleHRl bmRzIGJleW9uZCBhbnkgcGF0aCB0aGF0CisgIHdhcyBpbmNsdWRlZCBpbiB0aGUgdXNlcidzIHJl cXVlc3QuCisKKyAgVXNlcidzIGZpbGVzcGVjIGlzIGJsYWggb3IgcGF0aC9ibGFoIChvciBvdGhl ciBub24tVU5JWCBzeW50YXgpLiAgV2UgbmVlZCB0bworICBnZXQgdGhlIHVzZXIncyBwYXRoIHNl Z21lbnQuICBUaGVuLCBmb3IgZWFjaCBpbmNvbWluZyBmaWxlLCBpZiBpdCBiZWdpbnMKKyAgd2l0 aCB0aGUgc2FtZSBwYXRoIHNlZ21lbnQsIHdlIG11c3Qgc3RyaXAgaXQgKHBvaW50IHBhc3QgaXQp LgorKi8KKyAgICAgICAgICAgIHNyYyA9IG1nZXRsaXN0W21nZXR4XTsgICAgICAvKiBJbiBjYXNl IGl0IG1vdmVkISAqLworCSAgICBpZiAoc3JjKSB7CisJCWZvciAoaSA9IDA7IHNyY1tpXTsgaSsr KSB7IC8qIEZpbmQgcmlnaHRtb3N0IHBhdGggc2VwYXJhdG9yICovCisJCSAgICBpZiAoaXNwYXRo c2VwKHNyY1tpXSkpIC8qIGluIHVzZXIncyBwYXRobmFtZSAqLworCQkgICAgICBrID0gaSArIDE7 CisJCX0KKwkgICAgfSBlbHNlIHsKKwkJc3JjID0gIiI7CisJICAgIH0KKyAgICAgICAgICAgIHVz cnBhdGggPSBrOyAgICAgICAgICAgICAgICAvKiBVc2VyIHBhdGggc2VnbWVudCBsZW5ndGggKi8K KyAgICAgICAgICAgIGRlYnVnKEYxMTEsImZ0cCBnZXQgdXNycGF0aCIsc3JjLHVzcnBhdGgpOwor CisgICAgICAgICAgICBwID0gczsgICAgICAgICAgICAgICAgICAgICAgLyogU2VydmVyIGZpbGVu YW1lICovCisgICAgICAgICAgICB3aGlsZSAoKGMgPSAqcCsrKSkgeyAgICAgICAgLyogTG9vayBm b3IgcGF0aCBpbiBzZXJ2ZXIgZmlsZW5hbWUgKi8KKyAgICAgICAgICAgICAgICBpZiAoaXNwYXRo c2VwKGMpKSB7CisJCSAgICAvKiBoYXNwYXRoKys7ICovCisgICAgICAgICAgICAgICAgICAgIG5h bSA9IHA7ICAgICAgICAgICAgLyogUGF0aGxlc3MgbmFtZSAoZm9yIGNrbWF0Y2gpICovCisgICAg ICAgICAgICAgICAgICAgIHNydnBhdGggPSBwIC0gczsgICAgLyogU2VydmVyIHBhdGggc2VnbWVu dCBsZW5ndGggKi8KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAg ICBkZWJ1ZyhGMTExLCJmdHAgZ2V0IHNydnBhdGgiLHMsc3J2cGF0aCk7CisKKwkgICAgaWYgKHVz cnBhdGggPT0gMCkgeworLyoKKyAgSGVyZSB3ZSBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgdGhlIHVz ZXIgc2FpZCAibWdldCBmb28iIHdoZXJlIGZvbyBpcyBhCisgIGRpcmVjdG9yeSBuYW1lLCBhbmQg dGhlIHNlcnZlciBpcyBzZW5kaW5nIGJhY2sgbmFtZXMgbGlrZSAiZm9vL2ZpbGUxIiwKKyAgImZv by9maWxlMiIsIGV0Yy4gIFRoaXMgaXMgYSBuYXN0eSB0cmljayBidXQgaXQncyBuZWNlc3Nhcnkg YmVjYXVzZSB0aGUKKyAgdXNlciBjYW4ndCBjb21wZW5zYXRlIGJ5IHR5cGluZyAibWdldCBmb28v IiBiZWNhdXNlIHRoZW4gdGhlIHNlcnZlciBpcworICBsaWtlbHkgdG8gc2VuZCBiYWNrICJmb28v L2ZpbGUxLCBmb28vL2ZpbGUyIiBldGMsIGFuZCB3ZSBzdGlsbCB3b24ndAorICBnZXQgYSBtYXRj aC4uLgorKi8KKwkJaW50IHNyY2xlbiA9IDAsIHNydmxlbiA9IDA7CisJCWlmIChzcmMpIHNyY2xl biA9IHN0cmxlbihzcmMpOworCQlpZiAocykgc3J2bGVuID0gc3RybGVuKHMpOworCQlpZiAoc3Jj ICYmIChzcnZsZW4gPiBzcmNsZW4pKSB7CisJCSAgICBpZiAoIXN0cm5jbXAoc3JjLHMsc3JjbGVu KSAmJiBpc3BhdGhzZXAoc1tzcmNsZW5dKSkgeworCQkJY2hhciAqIHRtcHNyYyA9IE5VTEw7CisJ CQl0bXBzcmMgPSAoY2hhciAqKW1hbGxvYyhzcmNsZW4gKyAyKTsKKwkJCXN0cm5jcHkodG1wc3Jj LHNyYyxzcmNsZW4pOworCQkJdG1wc3JjW3NyY2xlbl0gPSBzW3NyY2xlbl07CisJCQl0bXBzcmNb c3JjbGVuKzFdID0gTlVMOworCQkJZnJlZShtZ2V0bGlzdFttZ2V0eF0pOworCQkJbWdldGxpc3Rb bWdldHhdID0gdG1wc3JjOworCQkJdG1wc3JjID0gTlVMTDsKKwkJCXNyYyA9IG1nZXRsaXN0W21n ZXR4XTsKKwkJCXVzcnBhdGggPSBzcmNsZW4rMTsKKwkJICAgIH0JCQkgICAgICAKKwkJfQorCSAg ICB9CisvKgorICBJZiBhcy1uYW1lIG5vdCBnaXZlbiBhbmQgc2VydmVyIGZpbGVuYW1lIGluY2x1 ZGVzIHBhdGggdGhhdCBtYXRjaGVzCisgIHRoZSBwYXRobmFtZSBmcm9tIHRoZSB1c2VyJ3MgZmls ZSBzcGVjaWZpY2F0aW9uLCB3ZSBtdXN0IHRyaW0gdGhlIGNvbW1vbgorICBwYXRoIHByZWZpeCBm cm9tIHRoZSBzZXJ2ZXIncyBuYW1lIHdoZW4gY29uc3RydWN0aW5nIHRoZSBsb2NhbCBuYW1lLgor Ki8KKyAgICAgICAgICAgIGlmIChzcmMgJiYJCQkvKiBXZWQgU2VwIDI1IDE3OjI3OjQ4IDIwMDIg Ki8KKwkJIWFzbmFtYnVmWzBdICYmCisJCSFyZWN1cnNpdmUgJiYJCS8qIFRodSBTZXAgMTkgMTY6 MTE6NTkgMjAwMiAqLworCQkoc3J2cGF0aCA+IDApICYmCisJCSFzdHJuY21wKHNyYyxzLHVzcnBh dGgpKSB7CisgICAgICAgICAgICAgICAgczIgPSBzICsgdXNycGF0aDsgICAgICAgLyogTG9jYWwg bmFtZSBza2lwcyBwYXN0IHJlbW90ZSBwYXRoICovCisgICAgICAgICAgICB9CisjaWZkZWYgQ09N TUVOVAorCSAgICAvKiBUaGlzIGRvZXNuJ3Qgd29yayBpZiB0aGUgcGF0aCBwcmVmaXggY29udGFp bnMgd2lsZGNhcmRzISAqLworCSAgICBoYXNwYXRoID0gKHNydnBhdGggPiB1c3JwYXRoKTsKKyNl bHNlCisJICAgIHsJCQkJLyogQ291bnQgcGF0aCBzZWdtZW50cyBpbnN0ZWFkICovCisJCWludCB4 MSA9IDAsIHgyID0gMDsKKwkJY2hhciAqcDsKKwkJZm9yIChwID0gczsgKnA7IHArKykKKwkJICBp ZiAoaXNwYXRoc2VwKCpwKSkgeDErKzsKKwkJZm9yIChwID0gc3JjOyAqcDsgcCsrKSB7CisJCSAg ICBpZiAoaXNwYXRoc2VwKCpwKSkgeDIrKzsKKwkJfQorCQloYXNwYXRoID0gcmVjdXJzaXZlID8g eDEgfHwgeDIgOiB4MSA+IHgyOworCQlkZWJ1ZyhGMTExLCJmdHAgZ2V0IHNlcnZlciBwYXRoIHNl Z21lbnRzIixzLHgxKTsKKwkJZGVidWcoRjExMSwiZnRwIGdldCB1c2VyICAgcGF0aCBzZWdtZW50 cyIsc3JjLHgyKTsKKwkgICAgfQorCisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAgICAgICAg ZGVidWcoRjExMSwiZnRwIGdldCBoYXNwYXRoIixzK3VzcnBhdGgsaGFzcGF0aCk7CisKKyAgICAg ICAgICAgIGlmIChoYXNwYXRoKSB7ICAgICAgICAgICAgICAvKiBTZXJ2ZXIgZmlsZSBoYXMgcGF0 aCBzZWdtZW50cz8gKi8KKyAgICAgICAgICAgICAgICBpZiAoIXJlY3Vyc2l2ZSkgeyAgICAgICAv KiBbTV1HRVQgL1JFQ1VSU0lWRT8gKi8KKy8qCisgIFdlIGRpZCBub3QgYXNrIGZvciBhIHJlY3Vy c2l2ZSBsaXN0aW5nLCBidXQgdGhlIHNlcnZlciBpcyBzZW5kaW5nIHVzIG9uZQorICBhbnl3YXkg KGFzIHd1LWZ0cGQgaXMgd29udCB0byBkbykuICBXZSBnZXQgaGVyZSBpZiB0aGUgY3VycmVudCBm aWxlbmFtZQorICBpbmNsdWRlcyBhIHBhdGggc2VnbWVudCBiZXlvbmQgYW55IHBhdGggc2VnbWVu dCB3ZSBhc2tlZCBmb3IgaW4gb3VyCisgIG5vbi1yZWN1cnNpdmUgW01dR0VUIGNvbW1hbmQuICBX ZSBNVVNUIHNraXAgdGhpcyBmaWxlLgorKi8KKyAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEx MSwiZnRwIGdldCBza2lwcGluZyBiZWNhdXNlIG9mIHBhdGgiLHMsMCk7CisgICAgICAgICAgICAg ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg ICAgfSBlbHNlIGlmIChnZXRvbmUgJiYgIXNraXB0aGlzKSB7IC8qIEdFVCAobm90IE1HRVQpICov CisgICAgICAgICAgICBjaGFyICogcCA9IG5hbTsKKwkgICAgd2hpbGUgKChjID0gKnArKykpIHsJ LyogSGFuZGxlIHBhdGggaW4gbG9jYWwgbmFtZSAqLworCQlpZiAoaXNwYXRoc2VwKGMpKSB7CisJ CSAgICBpZiAocmVjdXJzaXZlKSB7CS8qIElmIHJlY3Vyc2l2ZSwga2VlcCBpdCAqLworCQkJaGFz cGF0aCA9IDE7CisJCQlicmVhazsKKwkJICAgIH0gZWxzZSB7CQkvKiBPdGhlcndpc2UgbG9zZSBp dC4gKi8KKwkJICAgICAgbmFtID0gcDsKKwkJICAgIH0KKwkJfQorICAgICAgICAgICAgfQorICAg ICAgICAgICAgczIgPSBuYW07CisgICAgICAgIH0KKyAgICAgICAgaWYgKCEqbmFtKSAgICAgICAg ICAgICAgICAgICAgICAvKiBOYW1lIHdpdGhvdXQgcGF0aCAqLworICAgICAgICAgIG5hbSA9IHM7 CisKKyAgICAgICAgaWYgKCFza2lwdGhpcyAmJiBwdltTTkRfTk9EXS5pdmFsID4gMCkgeyAvKiAv Tk9ET1RGSUxFUyAqLworICAgICAgICAgICAgaWYgKG5hbVswXSA9PSAnLicpCisJICAgICAgY29u dGludWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFza2lwdGhpcyAmJiByY3ZleGNlcHRbMF0p IHsgLyogL0VYQ0VQVDogbGlzdCAqLworCSAgICBpbnQgeHg7CisgICAgICAgICAgICBmb3IgKGkg PSAwOyBpIDwgTlNOREVYQ0VQVDsgaSsrKSB7CisgICAgICAgICAgICAgICAgaWYgKCFyY3ZleGNl cHRbaV0pIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQor CQl4eCA9IGNrbWF0Y2gocmN2ZXhjZXB0W2ldLCBuYW0sIHNlcnZlcnR5cGUgPT0gU1lTX1VOSVgs IDEpOworCQlkZWJ1ZyhGMTExLCJmdHAgbWdldCAvZXhjZXB0IG1hdGNoIixyY3ZleGNlcHRbaV0s eHgpOworICAgICAgICAgICAgICAgIGlmICh4eCkgeworICAgICAgICAgICAgICAgICAgICB0bG9n KEYxMDAsIiByZWZ1c2VkOiBleGNlcHRpb24gbGlzdCIsIiIsMCk7CisJCSAgICBtc2cgPSAiUmVm dXNlZDogRXhjZXB0aW9uIExpc3QiOworICAgICAgICAgICAgICAgICAgICBza2lwdGhpcysrOwor ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFza2lwdGhpcyAmJiBwdltTTkRfTk9CXS5pdmFs ID4gMCkgeyAvKiAvTk9CQUNLVVBGSUxFUyAqLworICAgICAgICAgICAgaWYgKGNrbWF0Y2goCisj aWZkZWYgQ0tSRUdFWAorICAgICAgICAgICAgICAgICAgICAgICAgIiouflswLTldKn4iCisjZWxz ZQorICAgICAgICAgICAgICAgICAgICAgICAgIioufip+IgorI2VuZGlmIC8qIENLUkVHRVggKi8K KyAgICAgICAgICAgICAgICAgICAgICAgICxuYW0sMCwxKSA+IDApCisgICAgICAgICAgICAgIGNv bnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmICgheF94bGEpIHsgICAgICAgICAgICAgICAg ICAgLyogSWYgdHJhbnNsYXRpb24gaXMgb2ZmICovCisgICAgICAgICAgICB4X2NzbCA9IC0yOyAg ICAgICAgICAgICAgICAgLyogdW5zZXQgdGhlIGNoYXJzZXRzICovCisgICAgICAgICAgICB4X2Nz ciA9IC0yOworICAgICAgICB9CisgICAgICAgIGNrc3RybmNweShmaWxuYW0scyxDS01BWFBBVEgp OyAgLyogRm9yIFx2KGZpbGVuYW1lKSAqLworICAgICAgICBpZiAoISpzMikgICAgICAgICAgICAg ICAgICAgICAgIC8qIExvY2FsIG5hbWUgKi8KKyAgICAgICAgICBzMiA9IGFzbmFtYnVmOyAgICAg ICAgICAgICAgICAvKiBBcy1uYW1lICovCisKKwlpZiAoISpzMikJCQkvKiBTYXQgTm92IDE2IDE5 OjE5OjM5IDIwMDIgKi8KKwkgIHMyID0gcmVjdXJzaXZlID8gcyA6IG5hbTsJLyogRnJpIEphbiAx MCAxMzoxNToxOSAyMDAzICovCisKKyAgICAgICAgZGVidWcoRjExMCwiZnRwIGdldCBmaWxuYW0g ICIscywwKTsKKyAgICAgICAgZGVidWcoRjExMCwiZnRwIGdldCBhc25hbWUgQSIsczIsMCk7CisK KyAgICAgICAgLyogUmVjZWl2aW5nIHRvIHJlYWwgZmlsZSAqLworICAgICAgICBpZiAoIXBpcGVz ZW5kICYmCisjaWZkZWYgUElQRVNFTkQKKyAgICAgICAgICAgICFyY3ZmaWx0ZXIgJiYKKyNlbmRp ZiAvKiBQSVBFU0VORCAqLworICAgICAgICAgICAgIXRvc2NyZWVuKSB7CisjaWZuZGVmIE5PU1BM CisgICAgICAgICAgICAvKiBEbyB0aGlzIGhlcmUgc28gd2UgY2FuIGRlY2lkZSB3aGV0aGVyIHRv IHNraXAgKi8KKyAgICAgICAgICAgIGlmIChjbWRfcXVvdGluZyAmJiAhc2tpcHRoaXMgJiYgYXNu YW1idWZbMF0pIHsKKyAgICAgICAgICAgICAgICBpbnQgbjsgY2hhciAqcDsKKyAgICAgICAgICAg ICAgICBuID0gVE1QQlVGU0laOworICAgICAgICAgICAgICAgIHAgPSB0bXBidWY7CisgICAgICAg ICAgICAgICAgenpzdHJpbmcoYXNuYW1idWYsJnAsJm4pOworICAgICAgICAgICAgICAgIHMyID0g dG1wYnVmOworICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsImZ0cCBnZXQgYXNuYW1lIEIiLHMy LHVwZGF0aW5nKTsKKyAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBOT1NQTCAqLworCisJICAgIGxv Y2FsID0gKnMyID8gczIgOiBzOworCisJICAgIGlmICghc2tpcHRoaXMgJiYgeF9mbmMgPT0gWFlG WF9EKSB7IC8qIEZpbGUgQ29sbGlzaW9uID0gRGlzY2FyZCAqLworCQlDS19PRkZfVCB4OworCQl4 ID0gemNoa2kobG9jYWwpOworCQlkZWJ1ZyhGMTExLCJmdHAgZ2V0IERJU0NBUkQgemNoa2kiLGxv Y2FsLHgpOworCQlpZiAoeCA+IC0xKSB7CisJCSAgICBza2lwdGhpcysrOworCQkgICAgZGVidWco RjExMCwiZnRwIGdldCBza2lwIG5hbWUiLGxvY2FsLDApOworCQkgICAgdGxvZyhGMTAwLCIgcmVm dXNlZDogbmFtZSIsIiIsMCk7CisJCSAgICBtc2cgPSAiUmVmdXNlZDogTmFtZSI7CisJCX0KKwkg ICAgfQorCisjaWZkZWYgRE9VUERBVEUKKyAgICAgICAgICAgIGlmICghc2tpcHRoaXMgJiYgdXBk YXRpbmcpIHsgLyogSWYgdXBkYXRpbmcgYW5kIG5vdCB5ZXQgc2tpcHBpbmcgKi8KKyAgICAgICAg ICAgICAgICBpZiAoemNoa2kobG9jYWwpID4gLTEpIHsKKyAgICAgICAgICAgICAgICAgICAgeCA9 IGNoa21vZHRpbWUobG9jYWwscywwKTsKKyNpZmRlZiBERUJVRworCQkgICAgaWYgKGRlYmxvZykg eworCQkJaWYgKHVwZGF0aW5nID09IDIpCisJCQkgIGRlYnVnKEYxMTEsImZ0cCBnZXQgL2RhdGVz LWRpZmYgY2hrbW9kdGltZSIsbG9jYWwseCk7CisJCQllbHNlCisJCQkgIGRlYnVnKEYxMTEsImZ0 cCBnZXQgL3VwZGF0ZSBjaGttb2R0aW1lIixsb2NhbCx4KTsKKwkJICAgIH0KKyNlbmRpZiAvKiBE RUJVRyAqLworCQkgICAgaWYgKCh1cGRhdGluZyA9PSAxICYmIHggPiAwKSB8fCAgLyogL1VQREFU RSAqLworCQkJKHVwZGF0aW5nID09IDIgJiYgeCA9PSAxKSkgeyAvKiAvREFURVMtRElGRkVSICov CisJCQlza2lwdGhpcysrOworCQkJdGxvZyhGMTAwLCIgcmVmdXNlZDogZGF0ZSIsIiIsMCk7CisJ CQltc2cgPSAiUmVmdXNlZDogRGF0ZSI7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhG MTEwLCJmdHAgZ2V0IHNraXAgZGF0ZSIsbG9jYWwsMCk7CisgICAgICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisjZW5kaWYgLyogRE9VUERBVEUgKi8K KyAgICAgICAgfQorICAgICAgICAvKiBJbml0aWFsaXplIGZpbGUgc2l6ZSB0byAtMSBpbiBjYXNl IHNlcnZlciBkb2Vzbid0IHVuZGVyc3RhbmQgKi8KKyAgICAgICAgLyogU0laRSBjb21tYW5kLCBz byB4eHNjcmVlbigpIHdpbGwga25vdyB3ZSBkb24ndCBrbm93IHRoZSBzaXplICovCisKKyAgICAg ICAgZnNpemUgPSAoQ0tfT0ZGX1QpLTE7CisKKwkvKiBBc2sgZm9yIHNpemUgbm93IG9ubHkgaWYg d2UgbmVlZCBpdCBmb3Igc2VsZWN0aW9uICovCisJLyogYmVjYXVzZSBpZiB5b3UncmUgZ29pbmcg dGhydSBhIGxpc3QgMTAwLDAwMCBmaWxlcyB0byBzZWxlY3QgKi8KKwkvKiBhIHNtYWxsIHN1YnNl dCwgMTAwLDAwMCBTSVpFIGNvbW1hbmRzIGNhbiB0YWtlIGhvdXJzLi4uICovCisKKwlnb3RzaXpl ID0gMDsKKyAgICAgICAgaWYgKCFtZGVsICYmICFza2lwdGhpcyAmJiAgICAgICAgLyogRG9uJ3Qg bmVlZCBzaXplIGZvciBERUxFLi4uICovCisJICAgIChnZXRzbWFsbGVyID49IChDS19PRkZfVCkw ICB8fCBnZXRsYXJnZXIgPj0gKENLX09GRl9UKTApKSB7CisJICAgIGlmIChoYXZlc2l6ZSA+PSAo Q0tfT0ZGX1QpMCkgeyAvKiBBbHJlYWR5IGhhdmUgZmlsZSBzaXplPyAqLworCQlmc2l6ZSA9IGhh dmVzaXplOworCQlnb3RzaXplID0gMTsKKwkgICAgfSBlbHNlIHsJCQkvKiBObyAtIG11c3QgYXNr IHNlcnZlciAqLworCQkvKgorCQkgIFByaW9yIHRvIHNlbmRpbmcgdGhlIE5MU1QgY29tbWFuZCB3 ZSBuZWNlc3NhcmlseSBwdXQgdGhlCisJCSAgc2VydmVyIGludG8gQVNDSUkgbW9kZS4gIFdlIG11 c3Qgbm93IHB1dCBpdCBiYWNrIGludG8gdGhlCisJCSAgdGhlIHJlcXVlc3RlZCBtb2RlIHNvIHRo ZSB1cGNvbWluZyBTSVpFIGNvbW1hbmQgcmV0dXJucworCQkgIHJpZ2h0IGtpbmQgb2Ygc2l6ZTsg dGhpcyBpcyBlc3BlY2lhbGx5IGltcG9ydGFudCBmb3IKKwkJICBHRVQgL1JFQ09WRVI7IG90aGVy d2lzZSB0aGUgc2VydmVyIHJldHVybnMgdGhlICJBU0NJSSIgc2l6ZQorCQkgIG9mIHRoZSBmaWxl LCByYXRoZXIgdGhhbiBpdHMgdHJ1ZSBzaXplLgorCQkqLworCQljaGFuZ2V0eXBlKGZ0cF90eXAs MCk7CS8qIENoYW5nZSB0byByZXF1ZXN0ZWQgdHlwZSAqLworCQlmc2l6ZSA9IChDS19PRkZfVCkt MTsKKwkJaWYgKHNpemVvaykgeworCQkgICAgeCA9IGZ0cGNtZCgiU0laRSIscyx4X2NzbCx4X2Nz cixmdHBfdmJtKTsKKwkJICAgIGlmICh4ID09IFJFUExZX0NPTVBMRVRFKSB7CisJCQlmc2l6ZSA9 IGNrYXRvZnMoJmZ0cF9yZXBseV9zdHJbNF0pOworCQkJZ290c2l6ZSA9IDE7CisJCSAgICB9CisJ CX0KKwkgICAgfQorICAgICAgICAgICAgaWYgKGdvdHNpemUpIHsKKyAgICAgICAgICAgICAgICBp ZiAoZ2V0c21hbGxlciA+PSAoQ0tfT0ZGX1QpMCAmJiBmc2l6ZSA+PSBnZXRzbWFsbGVyKQorICAg ICAgICAgICAgICAgICAgc2tpcHRoaXMrKzsKKyAgICAgICAgICAgICAgICBpZiAoZ2V0bGFyZ2Vy ID49IChDS19PRkZfVCkwICYmIGZzaXplIDw9IGdldGxhcmdlcikKKyAgICAgICAgICAgICAgICAg IHNraXB0aGlzKys7CisgICAgICAgICAgICAgICAgaWYgKHNraXB0aGlzKSB7CisgICAgICAgICAg ICAgICAgICAgIGRlYnVnKEYxMTEsImZ0cCBnZXQgc2tpcCBzaXplIixzLGZzaXplKTsKKyAgICAg ICAgICAgICAgICAgICAgdGxvZyhGMTAwLCIgcmVmdXNlZDogc2l6ZSIsIiIsMCk7CisgICAgICAg ICAgICAgICAgICAgIG1zZyA9ICJSZWZ1c2VkOiBTaXplIjsKKyAgICAgICAgICAgICAgICB9Cisj aWZkZWYgQ09NTUVOVAorICAgICAgICAgICAgfSBlbHNlIGlmIChnZXRvbmUpIHsKKyAgICAgICAg ICAgICAgICAvKiBTSVpFIGNhbiBmYWlsIGZvciBtYW55IHJlYXNvbnMuICBEb2VzIHRoZSBmaWxl IGV4aXN0PyAqLworICAgICAgICAgICAgICAgIHggPSBmdHBjbWQoIk5MU1QiLHMseF9jc2wseF9j c3IsZnRwX3ZibSk7CisgICAgICAgICAgICAgICAgaWYgKHggIT0gUkVQTFlfQ09NUExFVEUpIHsK KyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI+Pj4gRklMRSBOT1QgRk9VTkQ6ICVzXG4iLHMp OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisjZW5kaWYg LyogQ09NTUVOVCAqLworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChza2lw dGhpcykgeyAgICAgICAgICAgICAgICAgLyogU2tpcHBpbmcgdGhpcyBmaWxlPyAqLworICAgICAg ICAgICAgZnRzY3JlZW4oU0NSX0ZOLCdGJywoQ0tfT0ZGX1QpMCxzKTsKKyAgICAgICAgICAgIGlm IChtc2cpCisgICAgICAgICAgICAgIGZ0c2NyZWVuKFNDUl9TVCxTVF9FUlIsKENLX09GRl9UKTAs bXNnKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgZnRzY3JlZW4oU0NSX1NULFNU X1NLSVAsKENLX09GRl9UKTAscyk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQor ICAgICAgICBpZiAoZnBfbm1sKSB7ICAgICAgICAgICAgICAgICAgIC8qIC9OQU1FTElTVCBvbmx5 IC0gbm8gdHJhbnNmZXIgKi8KKyAgICAgICAgICAgIGZwcmludGYoZnBfbm1sLCIlc1xuIixzKTsK KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmIChyZWN1cnNpdmUg JiYgaGFzcGF0aCAmJiAhcGlwZXNlbmQKKyNpZmRlZiBQSVBFU0VORAorICAgICAgICAgICAgJiYg IXJjdmZpbHRlcgorI2VuZGlmIC8qIFBJUEVTRU5EICovCisgICAgICAgICAgICApIHsKKwkgICAg aW50IHg7CisKKyNpZmRlZiBOT01LRElSCisJICAgIHggPSAtMTsKKyNlbHNlCisgICAgICAgICAg ICB4ID0gem1rZGlyKHMpOwkJLyogVHJ5IHRvIG1ha2UgdGhlIGRpcmVjdG9yeSAqLworI2VuZGlm IC8qIE5PTUtESVIgKi8KKworICAgICAgICAgICAgaWYgKHggPCAwKSB7CisgICAgICAgICAgICAg ICAgcmMgPSAtMTsgICAgICAgICAgICAgICAgLyogRmFpbHVyZSBpcyBmYXRhbCAqLworICAgICAg ICAgICAgICAgIGlmIChnZXRlcnJvcikgeworICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSAw OworICAgICAgICAgICAgICAgICAgICBmdHNjcmVlbihTQ1JfRU0sMCwoQ0tfT0ZGX1QpMCwKKwkJ CSAgICAgIkRpcmVjdG9yeSBjcmVhdGlvbiBmYWlsdXJlIik7CisgICAgICAgICAgICAgICAgICAg IGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg ICAgICAgIC8qIE5vdCBza2lwcGluZyAqLworCisJc2VsZWN0ZWQrKzsJCQkvKiBDb3VudCB0aGlz IGZpbGUgYXMgc2VsZWN0ZWQgKi8KKyAgICAgICAgcG4gPSBOVUxMOworCisJaWYgKCFnb3RzaXpl ICYmICFtZGVsKSB7CS8qIERpZG4ndCBnZXQgc2l6ZSB5ZXQgKi8KKwkgICAgaWYgKGhhdmVzaXpl ID4gKENLX09GRl9UKS0xKSB7IC8qIEFscmVhZHkgaGF2ZSBmaWxlIHNpemU/ICovCisJCWZzaXpl ID0gaGF2ZXNpemU7CisJCWdvdHNpemUgPSAxOworCSAgICB9IGVsc2UgewkJCS8qIE5vIC0gbXVz dCBhc2sgc2VydmVyICovCisJCWZzaXplID0gKENLX09GRl9UKS0xOworCQlpZiAoc2l6ZW9rKSB7 CisJCSAgICB4ID0gZnRwY21kKCJTSVpFIixzLHhfY3NsLHhfY3NyLGZ0cF92Ym0pOworCQkgICAg aWYgKHggPT0gUkVQTFlfQ09NUExFVEUpIHsKKwkJCWZzaXplID0gY2thdG9mcygmZnRwX3JlcGx5 X3N0cls0XSk7CisJCQlnb3RzaXplID0gMTsKKwkJICAgIH0KKwkJfQorCSAgICB9CisJfQorICAg ICAgICBpZiAobWRlbCkgeyAgICAgICAgICAgICAgICAgICAgIC8qIFtNXURFTEVURSAqLworICAg ICAgICAgICAgaWYgKGRpc3BsYSAmJiAhZnRwX3ZibSkKKyAgICAgICAgICAgICAgcHJpbnRmKCIg JXMuLi4iLHMpOworICAgICAgICAgICAgcmMgPQorICAgICAgICAgICAgIChmdHBjbWQoIkRFTEUi LHMseF9jc2wseF9jc3IsZnRwX3ZibSkgPT0gUkVQTFlfQ09NUExFVEUpID8gMSA6IC0xOworICAg ICAgICAgICAgaWYgKHJjID4gLTEpIHsKKyAgICAgICAgICAgICAgICB0bG9nKEYxMTAsImZ0cCBt ZGVsZXRlIixzLDApOworICAgICAgICAgICAgICAgIGlmIChkaXNwbGEgJiYgIWZ0cF92Ym0pCisg ICAgICAgICAgICAgICAgICBwcmludGYoIk9LXG4iKTsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg ICAgICAgICAgICAgICAgdGxvZyhGMTEwLCJmdHAgbWRlbGV0ZSBmYWlsZWQ6IixzLDApOworICAg ICAgICAgICAgICAgIGlmIChkaXNwbGEpCisgICAgICAgICAgICAgICAgICBwcmludGYoIkZhaWxl ZFxuIik7CisgICAgICAgICAgICB9CisjaWZuZGVmIE5PU1BMCisjaWZkZWYgUElQRVNFTkQKKyAg ICAgICAgfSBlbHNlIGlmIChyY3ZmaWx0ZXIpIHsgICAgICAgICAvKiBbTV1HRVQgd2l0aCBmaWx0 ZXIgKi8KKyAgICAgICAgICAgIGludCBuOyBjaGFyICogcDsKKyAgICAgICAgICAgIG4gPSBDS01B WFBBVEg7CisgICAgICAgICAgICBwID0gdG1wYnVmOyAgICAgICAgICAgICAgICAgLyogU2FmZSAt IG5vIGFzbmFtZSB3aXRoIGZpbHRlciAqLworICAgICAgICAgICAgenpzdHJpbmcocmN2ZmlsdGVy LCZwLCZuKTsKKyAgICAgICAgICAgIGlmIChuID4gLTEpCisgICAgICAgICAgICAgIHBuID0gdG1w YnVmOworICAgICAgICAgICAgZGVidWcoRjExMSwiZnRwIGdldCByY3ZmaWx0ZXIiLHBuLG4pOwor I2VuZGlmIC8qIFBJUEVTRU5EICovCisjZW5kaWYgLyogTk9TUEwgKi8KKyAgICAgICAgICAgIGlm ICh0b3NjcmVlbikgczIgPSAiLSI7CisgICAgICAgIH0gZWxzZSBpZiAocGlwZXNlbmQpIHsgICAg ICAgICAgLyogW01dR0VUIC9DT01NQU5EICovCisgICAgICAgICAgICBpbnQgbjsgY2hhciAqIHA7 CisgICAgICAgICAgICBuID0gQ0tNQVhQQVRIOworICAgICAgICAgICAgcCA9IHRtcGJ1ZjsgICAg ICAgICAgICAgICAgIC8qIFNhZmUgLSBubyBhc25hbWUgd2l0aCBmaWx0ZXIgKi8KKyAgICAgICAg ICAgIHp6c3RyaW5nKHBpcGVuYW1lLCZwLCZuKTsKKyAgICAgICAgICAgIGlmIChuID4gLTEpCisg ICAgICAgICAgICAgIHBuID0gdG1wYnVmOworICAgICAgICAgICAgZGVidWcoRjExMSwiZnRwIGdl dCBwaXBlbmFtZSIscGlwZW5hbWUsbik7CisgICAgICAgICAgICBpZiAodG9zY3JlZW4pIHMyID0g Ii0iOworICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFtNXUdFVCB3 aXRoIG5vIHBpcGVzIG9yIGZpbHRlcnMgKi8KKyAgICAgICAgICAgIGRlYnVnKEYxMTEsImZ0cCBn ZXQgczIgQSIsczIseF9jbnYpOworICAgICAgICAgICAgaWYgKHRvc2NyZWVuKSB7CisgICAgICAg ICAgICAgICAgczIgPSAiLSI7ICAgICAgICAgICAgICAgLyogKGhva2V5IGNvbnZlbnRpb24gZm9y IHN0ZG91dCkgKi8KKyAgICAgICAgICAgIH0gZWxzZSBpZiAoISpzMikgeyAgICAgICAgICAvKiBO byBhc25hbWU/ICovCisgICAgICAgICAgICAgICAgaWYgKHhfY252KSB7ICAgICAgICAgICAgLyog SWYgY29udmVydGluZyAqLworICAgICAgICAgICAgICAgICAgICBuenJ0b2wocyx0bXBidWYseF9j bnYsMSxDS01BWFBBVEgpOyAvKiBjb252ZXJ0ICovCisgICAgICAgICAgICAgICAgICAgIHMyID0g dG1wYnVmOworICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJmdHAgZ2V0IG56cnRvbCIs czIsMCk7CisgICAgICAgICAgICAgICAgfSBlbHNlICAgICAgICAgICAgICAgICAgLyogb3RoZXJ3 aXNlICovCisgICAgICAgICAgICAgICAgICBzMiA9IHM7ICAgICAgICAgICAgICAgLyogdXNlIGlu Y29taW5nIGZpbGUncyBuYW1lICovCisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWJ1ZyhG MTEwLCJmdHAgZ2V0IHMyIEIiLHMyLDApOworCisgICAgICAgICAgICAvKiBJZiBsb2NhbCBmaWxl IGFscmVhZHkgZXhpc3RzLCB0YWtlIGNvbGxpc2lvbiBhY3Rpb24gKi8KKworICAgICAgICAgICAg aWYgKCFwaXBlc2VuZCAmJgorI2lmZGVmIFBJUEVTRU5ECisgICAgICAgICAgICAgICAgIXJjdmZp bHRlciAmJgorI2VuZGlmIC8qIFBJUEVTRU5EICovCisgICAgICAgICAgICAgICAgIXRvc2NyZWVu KSB7CisJCUNLX09GRl9UIHg7CisgICAgICAgICAgICAgICAgeCA9IHpjaGtpKHMyKTsKKyAgICAg ICAgICAgICAgICBkZWJ1ZyhGMTExLCJmdHAgZ2V0IHpjaGtpIixzMix4KTsKKyAgICAgICAgICAg ICAgICBkZWJ1ZyhGMTExLCJmdHAgZ2V0IHhfZm5jIixzMix4X2ZuYyk7CisKKyAgICAgICAgICAg ICAgICBpZiAoeCA+IChDS19PRkZfVCktMSAmJiAhcmVzdGFydCkgeworCQkgICAgaW50IHggPSAt MTsKKwkJICAgIGNoYXIgKiBuZXduYW1lID0gTlVMTDsKKworICAgICAgICAgICAgICAgICAgICBz d2l0Y2ggKHhfZm5jKSB7CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSBYWUZYX0E6ICAgICAg LyogQXBwZW5kICovCisgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmQgPSAxOworICAgICAg ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSBYWUZY X1I6ICAgICAgLyogUmVuYW1lICovCisgICAgICAgICAgICAgICAgICAgICAgY2FzZSBYWUZYX0I6 CS8qIEJhY2t1cCAqLworCQkJem5ld24oczIsJm5ld25hbWUpOyAvKiBNYWtlIHVuaXF1ZSBuYW1l ICovCisJCQlkZWJ1ZyhGMTEwLCJmdHAgZ2V0IHpuZXduIixuZXduYW1lLDApOworCQkJaWYgKHhf Zm5jID09IFhZRlhfQikgeyAvKiBCYWNrdXAgZXhpc3RpbmcgZmlsZSAqLworCQkJICAgIHggPSB6 cmVuYW1lKHMyLG5ld25hbWUpOworCQkJICAgIGRlYnVnKEYxMTEsImZ0cCBnZXQgYmFja3VwIHpy ZW5hbWUiLG5ld25hbWUseCk7CisJCQl9IGVsc2UgeyAgICAgIC8qIFJlbmFtZSBpbmNvbWluZyBm aWxlICovCisJCQkgICAgeCA9IGNrc3RybmNweSh0bXBidWYsbmV3bmFtZSxDS01BWFBBVEgrMSk7 CisJCQkgICAgczIgPSB0bXBidWY7CisJCQkgICAgZGVidWcoRjExMSwiZnRwIGdldCByZW5hbWUg aW5jb21pbmciLG5ld25hbWUseCk7CisJCQl9CisJCQlpZiAoeCA8IDApIHsKKwkJCSAgICBmdHNj cmVlbihTQ1JfRU0sMCwoQ0tfT0ZGX1QpMCwKKwkJCQkgICAgICJCYWNrdXAvUmVuYW1lIGZhaWxl ZCIpOworCQkJICAgIHggPSAwOworCQkJICAgIGdvdG8geGdldHg7CisJCQl9CisJCQlicmVhazsK KyAgICAgICAgICAgICAgICAgICAgICBjYXNlIFhZRlhfRDogICAgICAvKiBEaXNjYXJkIChhbHJl YWR5IGhhbmRsZWQgYWJvdmUpICovCisgICAgICAgICAgICAgICAgICAgICAgY2FzZSBYWUZYX1U6 ICAgICAgLyogVXBkYXRlIChkaXR0bykgKi8KKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIFhZ RlhfTTogICAgICAvKiBVcGRhdGUgKGRpdHRvKSAqLworICAgICAgICAgICAgICAgICAgICAgIGNh c2UgWFlGWF9YOiAgICAgIC8qIE92ZXJ3cml0ZSAqLworICAgICAgICAgICAgICAgICAgICAgICAg YnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFtZGVsKSB7CisjaWZkZWYgUElQRVNFTkQK KyAgICAgICAgICAgIGRlYnVnKEYxMTEsImZ0cCBnZXQgcG4iLHBuLHJjdmZpbHRlciA/IDEgOiAw KTsKKyNlbmRpZiAvKiBQSVBFU0VORCAqLworICAgICAgICAgICAgaWYgKHBpcGVzZW5kICYmICF0 b3NjcmVlbikKKyAgICAgICAgICAgICAgczIgPSBOVUxMOworI2lmZGVmIERFQlVHCisgICAgICAg ICAgICBpZiAoZGVibG9nKSB7CisgICAgICAgICAgICAgICAgZGVidWcoRjEwMSwiZnRwIGdldCB4 X3hsYSIsIiIseF94bGEpOworICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsImZ0cCBnZXQgeF9j c2wiLCIiLHhfY3NsKTsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJmdHAgZ2V0IHhfY3Ny IiwiIix4X2Nzcik7CisgICAgICAgICAgICAgICAgZGVidWcoRjEwMSwiZnRwIGdldCBhcHBlbmQi LCIiLGFwcGVuZCk7CisgICAgICAgICAgICB9CisjZW5kaWYgLyogREVCVUcgKi8KKworICAgICAg ICAgICAgcmMgPSBnZXRmaWxlKHMsczIscmVzdGFydCxhcHBlbmQscG4seF94bGEseF9jc2wseF9j c3IpOworCisjaWZkZWYgREVCVUcKKyAgICAgICAgICAgIGlmIChkZWJsb2cpIHsKKyAgICAgICAg ICAgICAgICBkZWJ1ZyhGMTExLCJmdHAgZ2V0IHJjIixzLHJjKTsKKyAgICAgICAgICAgICAgICBk ZWJ1ZyhGMTExLCJmdHAgZ2V0IGZ0cF90aW1lZF9vdXQiLHMsZnRwX3RpbWVkX291dCk7CisgICAg ICAgICAgICAgICAgZGVidWcoRjExMSwiZnRwIGdldCBjYW5jZWxmaWxlIixzLGNhbmNlbGZpbGUp OworICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsImZ0cCBnZXQgY2FuY2VsZ3JvdXAiLHMsY2Fu Y2VsZ3JvdXApOworICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsImZ0cCBnZXQgcmVuYW1pbmci LHMscmVuYW1pbmcpOworICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsImZ0cCBnZXQgbW92aW5n IixzLG1vdmluZyk7CisgICAgICAgICAgICB9CisjZW5kaWYgLyogREVCVUcgKi8KKyAgICAgICAg fQorICAgICAgICBpZiAocmMgPiAtMSkgeworICAgICAgICAgICAgZ29vZCsrOworICAgICAgICAg ICAgc3RhdHVzID0gMTsKKyAgICAgICAgICAgIGlmICghY2FuY2VsZmlsZSkgeworICAgICAgICAg ICAgICAgIGlmIChkZWxldGluZykgeyAgICAgICAgIC8qIEdFVCAvREVMRVRFIChzb3VyY2UgZmls ZSkgKi8KKyAgICAgICAgICAgICAgICAgICAgcmMgPQorICAgICAgICAgICAgICAgICAgICAgIChm dHBjbWQoIkRFTEUiLHMseF9jc2wseF9jc3IsZnRwX3ZibSkgPT0gUkVQTFlfQ09NUExFVEUpCisg ICAgICAgICAgICAgICAgICAgICAgICA/IDEgOiAtMTsKKyAgICAgICAgICAgICAgICAgICAgdGxv ZyhGMTEwLCAocmMgPiAtMSkgPworICAgICAgICAgICAgICAgICAgICAgICAgICIgZGVsZXRlZCIg OiAiIGZhaWxlZCB0byBkZWxldGUiLCBzLCAwKTsKKyAgICAgICAgICAgICAgICB9CisJCWlmIChy ZW5hbWluZyAmJiByY3ZfcmVuYW1lICYmICF0b3NjcmVlbikgeworICAgICAgICAgICAgICAgICAg ICBjaGFyICpwOyAgICAgICAgICAgIC8qIFJlbmFtZSBkb3dubG9hZGVkIGZpbGUgKi8KKyNpZm5k ZWYgTk9TUEwKKyAgICAgICAgICAgICAgICAgICAgY2hhciB0bXBidWZbQ0tNQVhQQVRIKzFdOwor ICAgICAgICAgICAgICAgICAgICBpbnQgbjsKKyAgICAgICAgICAgICAgICAgICAgbiA9IENLTUFY UEFUSDsKKyAgICAgICAgICAgICAgICAgICAgcCA9IHRtcGJ1ZjsKKyAgICAgICAgICAgICAgICAg ICAgZGVidWcoRjExMSwiZnRwIGdldCAvcmVuYW1lIixyY3ZfcmVuYW1lLDApOworICAgICAgICAg ICAgICAgICAgICB6enN0cmluZyhyY3ZfcmVuYW1lLCZwLCZuKTsKKyAgICAgICAgICAgICAgICAg ICAgZGVidWcoRjExMSwiZnRwIGdldCAvcmVuYW1lIixyY3ZfcmVuYW1lLDApOworICAgICAgICAg ICAgICAgICAgICBwID0gdG1wYnVmOworI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgcCA9IHJj dl9yZW5hbWU7CisjZW5kaWYgLyogTk9TUEwgKi8KKyAgICAgICAgICAgICAgICAgICAgcmMgPSAo enJlbmFtZShzMixwKSA8IDApID8gLTEgOiAxOworICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhG MTExLCJkb2Z0cGdldCAvUkVOQU1FIHpyZW5hbWUiLHAscmMpOworICAgICAgICAgICAgICAgICAg ICB0bG9nKEYxMTAsIChyYyA+IC0xKSA/CisgICAgICAgICAgICAgICAgICAgICAgICAgIiByZW5h bWVkIHRvIiA6CisgICAgICAgICAgICAgICAgICAgICAgICAgIiBmYWlsZWQgdG8gcmVuYW1lIHRv IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwLAorICAgICAgICAgICAgICAgICAgICAgICAg IDAKKyAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgIH0gZWxzZSBp ZiAobW92aW5nICYmIHJjdl9tb3ZlICYmICF0b3NjcmVlbikgeworICAgICAgICAgICAgICAgICAg ICBjaGFyICpwOyAgICAgICAgICAgIC8qIE1vdmUgZG93bmxvYWRlZCBmaWxlICovCisjaWZuZGVm IE5PU1BMCisgICAgICAgICAgICAgICAgICAgIGNoYXIgdG1wYnVmW0NLTUFYUEFUSCsxXTsKKyAg ICAgICAgICAgICAgICAgICAgaW50IG47CisgICAgICAgICAgICAgICAgICAgIG4gPSBUTVBCVUZT SVo7CisgICAgICAgICAgICAgICAgICAgIHAgPSB0bXBidWY7CisgICAgICAgICAgICAgICAgICAg IGRlYnVnKEYxMTEsImZ0cCBnZXQgL21vdmUtdG8iLHJjdl9tb3ZlLDApOworICAgICAgICAgICAg ICAgICAgICB6enN0cmluZyhyY3ZfbW92ZSwmcCwmbik7CisgICAgICAgICAgICAgICAgICAgIHAg PSB0bXBidWY7CisjZWxzZQorICAgICAgICAgICAgICAgICAgICBwID0gcmN2X21vdmU7CisjZW5k aWYgLyogTk9TUEwgKi8KKyAgICAgICAgICAgICAgICAgICAgZGVidWcoRjExMSwiZnRwIGdldCAv bW92ZS10byIscCwwKTsKKyAgICAgICAgICAgICAgICAgICAgcmMgPSAoenJlbmFtZShzMixwKSA8 IDApID8gLTEgOiAxOworICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJkb2Z0cGdldCAv TU9WRSB6cmVuYW1lIixwLHJjKTsKKyAgICAgICAgICAgICAgICAgICAgdGxvZyhGMTEwLCAocmMg PiAtMSkgPworICAgICAgICAgICAgICAgICAgICAgICAgICIgbW92ZWQgdG8iIDogIiBmYWlsZWQg dG8gbW92ZSB0byIsIHAsIDApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBp ZiAocHZbU05EX1NSTl0uaXZhbCA+IDAgJiYgcHZbU05EX1NSTl0uc3ZhbCkgeworICAgICAgICAg ICAgICAgICAgICBjaGFyICogcyA9IHB2W1NORF9TUk5dLnN2YWw7CisgICAgICAgICAgICAgICAg ICAgIGNoYXIgKiBzcnZybiA9IHB2W1NORF9TUk5dLnN2YWw7CisgICAgICAgICAgICAgICAgICAg IGNoYXIgdG1wYnVmW0NLTUFYUEFUSCsxXTsKKyNpZm5kZWYgTk9TUEwKKyAgICAgICAgICAgICAg ICAgICAgaW50IHk7ICAgICAgICAgICAgICAvKiBQYXNzIGl0IHRocnUgdGhlIGV2YWx1YXRvciAq LworICAgICAgICAgICAgICAgICAgICBleHRlcm4gaW50IGNtZF9xdW90aW5nOyAvKiBmb3IgXHYo ZmlsZW5hbWUpICovCisgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsImZ0cCBnZXQgc3J2 X3JlbmFtIixzLDEpOworCisgICAgICAgICAgICAgICAgICAgIGlmIChjbWRfcXVvdGluZykgewor ICAgICAgICAgICAgICAgICAgICAgICAgeSA9IENLTUFYUEFUSDsKKyAgICAgICAgICAgICAgICAg ICAgICAgIHMgPSAoY2hhciAqKXRtcGJ1ZjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHp6c3Ry aW5nKHNydnJuLCZzLCZ5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHMgPSAoY2hhciAqKXRt cGJ1ZjsKKyAgICAgICAgICAgICAgICAgICAgfQorI2VuZGlmIC8qIE5PU1BMICovCisgICAgICAg ICAgICAgICAgICAgIGRlYnVnKEYxMTEsImZ0cCBnZXQgc3J2X3JlbmFtIixzLDEpOworICAgICAg ICAgICAgICAgICAgICBpZiAocykgaWYgKCpzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBp bnQgeDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHggPSBmdHBfcmVuYW1lKHMyLHMpOworICAg ICAgICAgICAgICAgICAgICAgICAgZGVidWcoRjExMSwiZnRwIGdldCBmdHBfcmVuYW1lIixzMix4 KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRsb2coRjExMCwgKHggPiAwKSA/CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICIgcmVuYW1lZCBzb3VyY2UgZmlsZSB0byIgOgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAiIGZhaWxlZCB0byByZW5hbWUgc291cmNlIGZpbGUgdG8i LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAg ICAgICAgICAgICBpZiAoeCA8IDEpCisJCQkgIHJldHVybigtMSk7CisgICAgICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg ICAgaWYgKGNhbmNlbGZpbGUpCisgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChyYyA8 IDApIHsKKyAgICAgICAgICAgIGZ0cF9mYWkrKzsKKyNpZmRlZiBGVFBfVElNRU9VVAorCSAgICBk ZWJ1ZyhGMTAxLCJmdHAgZ2V0IGZ0cF90aW1lZF9vdXQiLCIiLGZ0cF90aW1lZF9vdXQpOworCSAg ICBpZiAoZnRwX3RpbWVkX291dCkgeworCQlzdGF0dXMgPSAwOworICAgICAgICAgICAgICAgIGZ0 c2NyZWVuKFNDUl9FTSwwLChDS19PRkZfVCkwLCJHRVQgdGltZWQgb3V0Iik7CisJICAgIH0KKyNl bmRpZgkvKiBGVFBfVElNRU9VVCAqLworICAgICAgICAgICAgaWYgKGdldGVycm9yKSB7CisgICAg ICAgICAgICAgICAgc3RhdHVzID0gMDsKKyAgICAgICAgICAgICAgICBmdHNjcmVlbihTQ1JfRU0s MCwoQ0tfT0ZGX1QpMCwiRmF0YWwgZG93bmxvYWQgZXJyb3IiKTsKKyAgICAgICAgICAgICAgICBk b25lKys7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisjaWZkZWYgREVCVUcKKyAg ICBpZiAoZGVibG9nKSB7CisJZGVidWcoRjEwMSwiZnRwIGdldCBzdGF0dXMiLCIiLHN0YXR1cyk7 CisJZGVidWcoRjEwMSwiZnRwIGdldCBjYW5jZWxncm91cCIsIiIsY2FuY2VsZ3JvdXApOworCWRl YnVnKEYxMDEsImZ0cCBnZXQgY2FuY2VsZmlsZSIsIiIsY2FuY2VsZmlsZSk7CisJZGVidWcoRjEw MSwiZnRwIGdldCBzZWxlY3RlZCIsIiIsc2VsZWN0ZWQpOworCWRlYnVnKEYxMDEsImZ0cCBnZXQg Z29vZCIsIiIsZ29vZCk7CisgICAgfQorI2VuZGlmIC8qIERFQlVHICovCisKKyAgICBpZiAoc2Vs ZWN0ZWQgPT0gMCkgewkJLyogTm8gZmlsZXMgbWV0IHNlbGVjdGlvbiBjcml0ZXJpYSAqLworCXN0 YXR1cyA9IDE7CQkJLyogd2hpY2ggaXMgYSBraW5kIG9mIHN1Y2Nlc3MuICovCisgICAgfSBlbHNl IGlmIChzdGF0dXMgPiAwKSB7CQkvKiBTb21lIGZpbGVzIHdlcmUgc2VsZWN0ZWQgKi8KKyAgICAg ICAgaWYgKGNhbmNlbGdyb3VwKQkJLyogYnV0IE1HRVQgd2FzIGNhbmNlbGVkICovCisgICAgICAg ICAgc3RhdHVzID0gMDsJCQkvKiBzbyBNR0VUIGZhaWxlZCAqLworICAgICAgICBlbHNlIGlmIChj YW5jZWxmaWxlICYmIGdvb2QgPCAxKSAvKiBJZiBmaWxlIHdhcyBjYW5jZWxlZCAqLworICAgICAg ICAgIHN0YXR1cyA9IDA7CQkJLyogTUdFVCBmYWlsZWQgaWYgaXQgZ290IG5vIGZpbGVzICovCisg ICAgfQorICAgIHN1Y2Nlc3MgPSBzdGF0dXM7CisgICAgeCA9IHN1Y2Nlc3M7CisgICAgZGVidWco RjEwMSwiZnRwIGdldCBzdWNjZXNzIiwiIixzdWNjZXNzKTsKKworICB4Z2V0eDoKKyAgICBwaXBl c2VuZCA9IHBpcGVzYXZlOyAgICAgICAgICAgICAgICAvKiBSZXN0b3JlIGdsb2JhbCBwaXBlIHNl bGVjdGlvbiAqLworICAgIGlmIChmcF9ubWwpIHsgICAgICAgICAgICAgICAgICAgICAgIC8qIENs b3NlIC9OQU1FTElTVCAqLworICAgICAgICBpZiAoZnBfbm1sICE9IHN0ZG91dCkKKyAgICAgICAg ICBmY2xvc2UoZnBfbm1sKTsKKyAgICAgICAgZnBfbm1sID0gTlVMTDsKKyAgICB9CisgICAgaWYg KAorI2lmZGVmIENPTU1FTlQKKwl4ID4gLTEKKyNlbHNlCisJc3VjY2VzcworI2VuZGlmCS8qIENP TU1FTlQgKi8KKwkpIHsJCQkJLyogRG93bmxvYWQgc3VjY2Vzc2Z1bCAqLworI2lmZGVmIEdGVElN RVIKKyAgICAgICAgdDEgPSBnbXN0aW1lcigpOyAgICAgICAgICAgICAgICAvKiBFbmQgdGltZSAq LworICAgICAgICBzZWMgPSAoQ0tGTE9BVCkoKENLRkxPQVQpKHQxIC0gdDApIC8gMTAwMC4wKTsg LyogU3RhdHMgKi8KKyAgICAgICAgaWYgKCFzZWMpIHNlYyA9IDAuMDAxOworICAgICAgICBmcHRz ZWNzID0gc2VjOworI2Vsc2UKKyAgICAgICAgc2VjID0gKHQxIC0gdDApIC8gMTAwMDsKKyAgICAg ICAgaWYgKCFzZWMpIHNlYyA9IDE7CisjZW5kaWYgLyogR0ZUSU1FUiAqLworICAgICAgICB0ZmNw cyA9IChsb25nKSAodGZjIC8gc2VjKTsKKyAgICAgICAgdHNlY3MgPSAoaW50KXNlYzsKKyAgICAg ICAgbGFzdHhmZXIgPSBXX0ZUUHxXX1JFQ1Y7CisgICAgICAgIHhmZXJzdGF0ID0gc3VjY2VzczsK KyAgICB9CisgICAgaWYgKGRweWFjdGl2ZSkKKyAgICAgIGZ0c2NyZWVuKHN1Y2Nlc3MgPiAwID8g U0NSX1RDIDogU0NSX0NXLCAwLCAoQ0tfT0ZGX1QpMCwgIiIpOworI2lmZGVmIENLX1RNUERJUgor ICAgIGlmIChmX3RtcGRpcikgeyAgICAgICAgICAgICAgICAgICAgIC8qIElmIHdlIGNoYW5nZWQg dG8gZG93bmxvYWQgZGlyICovCisgICAgICAgIHpjaGRpcigoY2hhciAqKSBzYXZkaXIpOyAgICAg ICAgLyogR28gYmFjayB3aGVyZSB3ZSBjYW1lIGZyb20gKi8KKyAgICAgICAgZl90bXBkaXIgPSAw OworICAgIH0KKyNlbmRpZiAvKiBDS19UTVBESVIgKi8KKworICAgIGZvciAoaSA9IDA7IGkgPD0g U05EX01BWDsgaSsrKSB7ICAgIC8qIEZyZWUgbWFsbG9jJ2QgbWVtb3J5ICovCisgICAgICAgIGlm IChwdltpXS5zdmFsKQorICAgICAgICAgIGZyZWUocHZbaV0uc3ZhbCk7CisgICAgfQorICAgIGZv ciAoaSA9IDA7IGkgPCBtZ2V0bjsgaSsrKSAgICAgICAgIC8qIE1HRVQgbGlzdCB0b28gKi8KKyAg ICAgIG1ha2VzdHIoJihtZ2V0bGlzdFtpXSksTlVMTCk7CisKKyAgICBpZiAoY2FuY2VsZ3JvdXAp CQkJLyogQ2xlYXIgdGVtcC1maWxlIHN0YWNrICovCisgICAgICBtbHNyZXNldCgpOworCisgICAg ZnRyZXNldCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVW5kbyBzd2l0Y2ggZWZmZWN0 cyAqLworICAgIGRweWFjdGl2ZSA9IDA7CisgICAgcmV0dXJuKHgpOworfQorCitzdGF0aWMgc3Ry dWN0IGtleXRhYiBmdHBybXRbXSA9IHsKKyAgICB7ICJjZCIsICAgICAgICBYWkNXRCwgMCB9LAor ICAgIHsgImNkdXAiLCAgICAgIFhaQ0RVLCAwIH0sCisgICAgeyAiY3dkIiwgICAgICAgWFpDV0Qs IENNX0lOViB9LAorICAgIHsgImRlbGV0ZSIsICAgIFhaREVMLCAwIH0sCisgICAgeyAiZGlyZWN0 b3J5IiwgWFpESVIsIDAgfSwKKyAgICB7ICJleGl0IiwgICAgICBYWlhJVCwgMCB9LAorICAgIHsg ImhlbHAiLCAgICAgIFhaSExQLCAwIH0sCisgICAgeyAibG9naW4iLCAgICAgWFpMR0ksIDAgfSwK KyAgICB7ICJsb2dvdXQiLCAgICBYWkxHTywgMCB9LAorICAgIHsgIm1rZGlyIiwgICAgIFhaTUtE LCAwIH0sCisgICAgeyAicHdkIiwgICAgICAgWFpQV0QsIDAgfSwKKyAgICB7ICJyZW5hbWUiLCAg ICBYWlJFTiwgMCB9LAorICAgIHsgInJtZGlyIiwgICAgIFhaUk1ELCAwIH0sCisgICAgeyAidHlw ZSIsICAgICAgWFpUWVAsIDAgfSwKKyAgICB7ICIiLCAwLCAwIH0KK307CitzdGF0aWMgaW50IG5m dHBybXQgPSAoc2l6ZW9mKGZ0cHJtdCkgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpIC0gMTsKKwor aW50Citkb2Z0cHNpdGUoKSB7CQkJCS8qIFNlbmQgYSBTSVRFIGNvbW1hbmQgKi8KKyAgICBpbnQg cmVwbHk7CisgICAgY2hhciAqIHM7CisgICAgaW50IGxjcyA9IC0xLCByY3MgPSAtMTsKKyAgICBp bnQgc2F2ZV92Ym0gPSBmdHBfdmJtOworCisjaWZuZGVmIE5PQ1NFVFMKKyAgICBpZiAoZnRwX3hs YSkgeworICAgICAgICBsY3MgPSBmdHBfY3NsOworICAgICAgICBpZiAobGNzIDwgMCkgbGNzID0g ZmNoYXJzZXQ7CisgICAgICAgIHJjcyA9IGZ0cF9jc3g7CisgICAgICAgIGlmIChyY3MgPCAwKSBy Y3MgPSBmdHBfY3NyOworICAgIH0KKyNlbmRpZiAvKiBOT0NTRVRTICovCisgICAgaWYgKCh4ID0g Y210eHQoIkNvbW1hbmQiLCAiIiwgJnMsIHh4c3RyaW5nKSkgPCAwKQorICAgICAgcmV0dXJuKHgp OworICAgIENIRUNLQ09OTigpOworICAgIGNrc3RybmNweShsaW5lLHMsTElOQlVGU0laKTsKKyAg ICBpZiAodGVzdGluZykgcHJpbnRmKCIgZnRwIHNpdGUgXCIlc1wiLi4uXG4iLGxpbmUpOworICAg IGlmICghZnRwX3ZibSkKKyAgICAgICAgZnRwX3ZibSA9ICFja3N0cmNtcCgiSEVMUCIsbGluZSw0 LDApOworICAgIGlmICgocmVwbHkgPSBmdHBjbWQoIlNJVEUiLGxpbmUsbGNzLHJjcyxmdHBfdmJt KSkgPT0gUkVQTFlfUFJFTElNKSB7CisJZG8geworCSAgICByZXBseSA9IGdldHJlcGx5KDAsbGNz LHJjcyxmdHBfdmJtLDApOworCX0gd2hpbGUgKHJlcGx5ID09IFJFUExZX1BSRUxJTSk7CisgICAg fQorICAgIGZ0cF92Ym0gPSBzYXZlX3ZibTsKKyAgICByZXR1cm4oc3VjY2VzcyA9IChyZXBseSA9 PSBSRVBMWV9DT01QTEVURSkpOworfQorCisKK2ludAorZG9zZXRmdHBwc3YoKSB7CQkJCS8qIFBh c3NpdmUgbW9kZSAqLworICAgIHggPSBzZXRvbigmZnRwX3Bzdik7CisgICAgaWYgKHggPiAwKSBw YXNzaXZlbW9kZSA9IGZ0cF9wc3Y7CisgICAgcmV0dXJuKHgpOworfQorCisvKiAgZCBvIGYgdCBw IHIgbSB0ICAtLSAgUGFyc2UgYW5kIGV4ZWN1dGUgUkVNT1RFIGNvbW1hbmRzICAqLworCitpbnQK K2RvZnRwcm10KGN4LHdobykgaW50IGN4LCB3aG87IHsgICAgICAgICAvKiB3aG8gPT0gMSBmb3Ig ZnRwLCAwIGZvciBrZXJtaXQgKi8KKyAgICAvKiBjeCA9PSAwIG1lYW5zIFJFTU9URSAqLworICAg IC8qIGN4ICE9IDAgaXMgYSBYWnh4eCB2YWx1ZSAqLworICAgIGNoYXIgKiBzOworCisgICAgaWYg KHdobyAhPSAwKQorICAgICAgcmV0dXJuKDApOworCisgICAgaWYgKGN4ID09IDApIHsKKyAgICAg ICAgaWYgKCh4ID0gY21rZXkoZnRwcm10LG5mdHBybXQsIiIsIiIseHhzdHJpbmcpKSA8IDApCisg ICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICBjeCA9IHg7CisgICAgfQorICAgIHN3aXRjaCAo Y3gpIHsKKyAgICAgIGNhc2UgWFpDRFU6ICAgICAgICAgICAgICAgICAgICAgICAvKiBDRFVQICov CisgICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOworICAgICAgICByZXR1 cm4oZG9mdHBjZHVwKCkpOworCisgICAgICBjYXNlIFhaQ1dEOiAgICAgICAgICAgICAgICAgICAg ICAgLyogUkNEICovCisgICAgICAgIGlmICgoeCA9IGNtdHh0KCJSZW1vdGUgZGlyZWN0b3J5Iiwg IiIsICZzLCB4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgIGNr c3RybmNweShsaW5lLHMsTElOQlVGU0laKTsKKwlzID0gYnJzdHJpcChsaW5lKTsKKyAgICAgICAg cmV0dXJuKGRvZnRwY3dkKHMsMSkpOworICAgICAgY2FzZSBYWlBXRDogICAgICAgICAgICAgICAg ICAgICAgIC8qIFJQV0QgKi8KKyAgICAgICAgcmV0dXJuKGRvZnRwcHdkKCkpOworICAgICAgY2Fz ZSBYWkRFTDogICAgICAgICAgICAgICAgICAgICAgIC8qIFJERUwgKi8KKyAgICAgICAgcmV0dXJu KGRvZnRwZ2V0KEZUUF9NREUsMSkpOworICAgICAgY2FzZSBYWkRJUjogICAgICAgICAgICAgICAg ICAgICAgIC8qIFJESVIgKi8KKyAgICAgICAgcmV0dXJuKGRvZnRwZGlyKEZUUF9ESVIpKTsKKyAg ICAgIGNhc2UgWFpITFA6ICAgICAgICAgICAgICAgICAgICAgICAvKiBSSEVMUCAqLworICAgICAg ICByZXR1cm4oZG9mdHB4aGxwKCkpOworICAgICAgY2FzZSBYWk1LRDogICAgICAgICAgICAgICAg ICAgICAgIC8qIFJNS0RJUiAqLworICAgICAgICByZXR1cm4oZG9mdHBta2QoKSk7CisgICAgICBj YXNlIFhaUkVOOiAgICAgICAgICAgICAgICAgICAgICAgLyogUlJFTkFNRSAqLworICAgICAgICBy ZXR1cm4oZG9mdHByZW4oKSk7CisgICAgICBjYXNlIFhaUk1EOiAgICAgICAgICAgICAgICAgICAg ICAgLyogUlJNRElSICovCisgICAgICAgIHJldHVybihkb2Z0cHJtZCgpKTsKKyAgICAgIGNhc2Ug WFpMR086ICAgICAgICAgICAgICAgICAgICAgICAvKiBMT0dPVVQgKi8KKyAgICAgICAgcmV0dXJu KGRvZnRwcmVzKCkpOworICAgICAgY2FzZSBYWlhJVDogICAgICAgICAgICAgICAgICAgICAgIC8q IEVYSVQgKi8KKyAgICAgICAgcmV0dXJuKGZ0cGJ5ZSgpKTsKKyAgICB9CisgICAgcHJpbnRmKCI/ Tm90IHVzYWJsZSB3aXRoIEZUUCAtIFwiJXNcIlxuIiwgYXRtYnVmKTsKKyAgICByZXR1cm4oLTkp OworfQorCitpbnQKK2RveGZ0cCgpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBD b21tYW5kIHBhcnNlciBmb3IgYnVpbHQtaW4gRlRQICovCisgICAgaW50IGN4LCBuOworICAgIHN0 cnVjdCBGREIga3csIGZsOworICAgIGNoYXIgKiBzOworICAgIGludCB1c2V0bHMgPSAwOworICAg IGludCBsY3MgPSAtMSwgcmNzID0gLTE7CisKKyNpZm5kZWYgTk9DU0VUUworICAgIGlmIChmdHBf eGxhKSB7CisgICAgICAgIGxjcyA9IGZ0cF9jc2w7CisgICAgICAgIGlmIChsY3MgPCAwKSBsY3Mg PSBmY2hhcnNldDsKKyAgICAgICAgcmNzID0gZnRwX2NzeDsKKyAgICAgICAgaWYgKHJjcyA8IDAp IHJjcyA9IGZ0cF9jc3I7CisgICAgfQorI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKworICAgIGlmIChp bnNlcnZlcikgICAgICAgICAgICAgICAgICAgICAgIC8qIEZUUCBub3QgYWxsb3dlZCBpbiBJS1NE LiAqLworICAgICAgcmV0dXJuKC0yKTsKKworICAgIGlmIChnX2Z0cF90eXAgPiAtMSkgeyAgICAg ICAgICAgICAgIC8qIFJlc3RvcmUgVFlQRSBpZiBzYXZlZCAqLworICAgICAgICBmdHBfdHlwID0g Z19mdHBfdHlwOworICAgICAgICAvKiBnX2Z0cF90eXAgPSAtMTsgKi8KKyAgICB9CisjaWZkZWYg Q09NTUVOVAorLyoKKyAgV2UnbGwgc2V0IHRoZSBjb2xsaXNpb24gYWN0aW9uIGxvY2FsbHkgaW4g ZG9mdHBnZXQoKSBiYXNlZCBvbiB3aGV0aGVyCisgIGZ0cF9mbmMgd2FzIGV2ZXIgc2V0IHRvIGEg dmFsdWUuICBpZiBub3QsIHdlJ2xsIHVzZSB0aGUgZm5jYWN0IHZhbHVlLgorKi8KKyAgICBpZiAo ZnRwX2ZuYyA8IDApICAgICAgICAgICAgICAgICAgICAvKiBJbmhlcml0IGdsb2JhbCBjb2xsaXNp b24gYWN0aW9uICovCisgICAgICBmdHBfZm5jID0gZm5jYWN0OyAgICAgICAgICAgICAgICAgLyog aWYgbm9uZSBzcGVjaWZpZWQgZm9yIEZUUCAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKworICAg IC8qIFJlc3RvcmUgZ2xvYmFsIHZlcmJvc2UgbW9kZSAqLworICAgIGlmIChmdHBfZGViKQorICAg ICAgZnRwX3ZibSA9IDE7CisgICAgZWxzZSBpZiAocXVpZXQpCisgICAgICBmdHBfdmJtID0gMDsK KyAgICBlbHNlCisgICAgICBmdHBfdmJtID0gZnRwX3ZieDsKKworICAgIGZ0cF9kYXRlcyAmPSAx OwkJCS8qIFVuZG8gYW55IHByZXZpb3VzIC9VUERBVEUgc3dpdGNoICovCisKKyAgICBkcHlhY3Rp dmUgPSAwOyAgICAgICAgICAgICAgICAgICAgICAvKiBSZXNldCBnbG9iYWwgdHJhbnNmZXItYWN0 aXZlIGZsYWcgKi8KKyAgICBwcmludGxpbmVzID0gMDsgICAgICAgICAgICAgICAgICAgICAvKiBS ZXNldCBwcmludGxpbmVzICovCisKKyAgICBpZiAoZnBfbm1sKSB7ICAgICAgICAgICAgICAgICAg ICAgICAvKiBSZXNldCAvTkFNRUxJU1QgKi8KKyAgICAgICAgaWYgKGZwX25tbCAhPSBzdGRvdXQp CisgICAgICAgICAgZmNsb3NlKGZwX25tbCk7CisgICAgICAgIGZwX25tbCA9IE5VTEw7CisgICAg fQorICAgIG1ha2VzdHIoJmZ0cF9ubWwsTlVMTCk7CisKKyAgICBjbWZkYmkoJmt3LCAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBGaXJzdCBGREIgLSBjb21tYW5kcyAqLworICAgICAgICAgICBf Q01LRVksICAgICAgICAgICAgICAgICAgICAgIC8qIGZjb2RlICovCisgICAgICAgICAgICJIb3N0 bmFtZTsgb3IgRlRQIGNvbW1hbmQiLCAgLyogaGVscCAqLworICAgICAgICAgICAiIiwgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIGRlZmF1bHQgKi8KKyAgICAgICAgICAgIiIsICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBhZGR0bCBzdHJpbmcgZGF0YSAqLworICAgICAgICAgICBuZnRw Y21kLCAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAxOiB0Ymwgc2l6 ZSAqLworICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51 bWVyaWMgZGF0YSAyOiBub25lICovCisgICAgICAgICAgIHh4c3RyaW5nLCAgICAgICAgICAgICAg ICAgICAgLyogUHJvY2Vzc2luZyBmdW5jdGlvbiAqLworICAgICAgICAgICBmdHBjbWR0YWIsICAg ICAgICAgICAgICAgICAgIC8qIEtleXdvcmQgdGFibGUgKi8KKyAgICAgICAgICAgJmZsICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBQb2ludGVyIHRvIG5leHQgRkRCICovCisgICAgICAgICAg ICk7CisgICAgY21mZGJpKCZmbCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogQSBob3N0IG5h bWUgb3IgYWRkcmVzcyAqLworICAgICAgICAgICBfQ01GTEQsICAgICAgICAgICAgICAgICAgICAg IC8qIGZjb2RlICovCisgICAgICAgICAgICJIb3N0bmFtZSBvciBhZGRyZXNzIiwgICAgICAgLyog aGVscCAqLworICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRlZmF1 bHQgKi8KKyAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBz dHJpbmcgZGF0YSAqLworICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IGFkZHRsIG51bWVyaWMgZGF0YSAxICovCisgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDIgKi8KKyAgICAgICAgICAgeHhzdHJpbmcs CisgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgIE5VTEwKKyAgICAgICAgICAgKTsKKyAgICB4 ID0gY21mZGIoJmt3KTsgICAgICAgICAgICAgICAgICAgICAvKiBQYXJzZSBhIGhvc3RuYW1lIG9y IGEga2V5d29yZCAqLworICAgIGlmICh4ID09IC0zKSB7CisgICAgICAgIHByaW50ZigiP2Z0cCB3 aGF0PyBcImhlbHAgZnRwXCIgZm9yIGhpbnRzXG4iKTsKKyAgICAgICAgcmV0dXJuKC05KTsKKyAg ICB9CisgICAgaWYgKHggPCAwKQorICAgICAgcmV0dXJuKHgpOworICAgIGlmIChjbXJlc3VsdC5m Y29kZSA9PSBfQ01GTEQpIHsgICAgIC8qIElmIGhvc3RuYW1lICovCisgICAgICAgIHJldHVybihv cGVuZnRwKGNtcmVzdWx0LnNyZXN1bHQsMCkpOyAvKiBnbyBvcGVuIHRoZSBjb25uZWN0aW9uICov CisgICAgfSBlbHNlIHsKKyAgICAgICAgY3ggPSBjbXJlc3VsdC5ucmVzdWx0OworICAgIH0KKyAg ICBzd2l0Y2ggKGN4KSB7CisgICAgICBjYXNlIEZUUF9BQ0M6ICAgICAgICAgICAgICAgICAgICAg LyogQUNDT1VOVCAqLworICAgICAgICBpZiAoKHggPSBjbXR4dCgiUmVtb3RlIGFjY291bnQiLCAi IiwgJnMsIHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgQ0hF Q0tDT05OKCk7CisgICAgICAgIG1ha2VzdHIoJmZ0cF9hY2Mscyk7CisgICAgICAgIGlmICh0ZXN0 aW5nKQorICAgICAgICAgIHByaW50ZigiIGZ0cCBhY2NvdW50OiBcIiVzXCJcbiIsZnRwX2FjYyk7 CisgICAgICAgIHN1Y2Nlc3MgPSAoZnRwY21kKCJBQ0NUIixmdHBfYWNjLC0xLC0xLGZ0cF92Ym0p ID09IFJFUExZX0NPTVBMRVRFKTsKKyAgICAgICAgcmV0dXJuKHN1Y2Nlc3MpOworCisgICAgICBj YXNlIEZUUF9HVVA6ICAgICAgICAgICAgICAgICAgICAgLyogR28gVVAgKi8KKyAgICAgICAgaWYg KCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7CisgICAgICAgIENIRUNLQ09OTigpOworICAg ICAgICBpZiAodGVzdGluZykgcHJpbnRmKCIgZnRwIGNkOiBcIih1cClcIlxuIik7CisgICAgICAg IHJldHVybihzdWNjZXNzID0gZG9mdHBjZHVwKCkpOworCisgICAgICBjYXNlIEZUUF9DV0Q6ICAg ICAgICAgICAgICAgICAgICAgLyogQ0QgKi8KKyAgICAgICAgaWYgKCh4ID0gY210eHQoIlJlbW90 ZSBkaXJlY3RvcnkiLCAiIiwgJnMsIHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgIHJldHVybih4 KTsKKyAgICAgICAgQ0hFQ0tDT05OKCk7CisgICAgICAgIGNrc3RybmNweShsaW5lLHMsTElOQlVG U0laKTsKKyAgICAgICAgaWYgKHRlc3RpbmcpCisgICAgICAgICAgcHJpbnRmKCIgZnRwIGNkOiBc IiVzXCJcbiIsIGxpbmUpOworICAgICAgICByZXR1cm4oc3VjY2VzcyA9IGRvZnRwY3dkKGxpbmUs MSkpOworCisgICAgICBjYXNlIEZUUF9DSE06ICAgICAgICAgICAgICAgICAgICAgLyogQ0hNT0Qg Ki8KKyAgICAgICAgaWYgKCh4ID0gY21mbGQoIlBlcm1pc3Npb25zIG9yIHByb3RlY3Rpb24gY29k ZSIsIiIsJnMseHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICBj a3N0cm5jcHkodG1wYnVmLHMsVE1QQlVGU0laKTsKKyAgICAgICAgaWYgKCh4ID0gY210eHQoIlJl bW90ZSBmaWxlbmFtZSIsICIiLCAmcywgeHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgcmV0dXJu KHgpOworICAgICAgICBDSEVDS0NPTk4oKTsKKyAgICAgICAgY2ttYWttc2coZnRwY21kYnVmLEZU UF9CVUZTSVosdG1wYnVmLCIgIixzLE5VTEwpOworICAgICAgICBpZiAodGVzdGluZykKKyAgICAg ICAgICBwcmludGYoIiBmdHAgY2htb2Q6ICVzXG4iLGZ0cGNtZGJ1Zik7CisgICAgICAgIHN1Y2Nl c3MgPQorICAgICAgICAgIChmdHBjbWQoIlNJVEUgQ0hNT0QiLGZ0cGNtZGJ1ZixsY3MscmNzLGZ0 cF92Ym0pID09IFJFUExZX0NPTVBMRVRFKTsKKyAgICAgICAgcmV0dXJuKHN1Y2Nlc3MpOworCisg ICAgICBjYXNlIEZUUF9DTFM6ICAgICAgICAgICAgICAgICAgICAgLyogQ0xPU0UgRlRQIGNvbm5l Y3Rpb24gKi8KKyAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKQorICAgICAgICAgIHJldHVy bih5KTsKKyAgICAgICAgQ0hFQ0tDT05OKCk7CisgICAgICAgIGlmICh0ZXN0aW5nKQorICAgICAg ICAgIHByaW50ZigiIGZ0cCBjbG9zaW5nLi4uXG4iKTsKKyAgICAgICAgZnRwY2xvc2UoKTsKKyAg ICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKworICAgICAgY2FzZSBGVFBfRElSOiAgICAgICAg ICAgICAgICAgICAgIC8qIERJUkVDVE9SWSBvZiByZW1vdGUgZmlsZXMgKi8KKyAgICAgIGNhc2Ug RlRQX1ZESToKKyAgICAgICAgcmV0dXJuKGRvZnRwZGlyKGN4KSk7CisKKyAgICAgIGNhc2UgRlRQ X0dFVDogICAgICAgICAgICAgICAgICAgICAvKiBHRVQgYSByZW1vdGUgZmlsZSAqLworICAgICAg Y2FzZSBGVFBfUkdFOiAgICAgICAgICAgICAgICAgICAgIC8qIFJFR0VUICovCisgICAgICBjYXNl IEZUUF9NR0U6ICAgICAgICAgICAgICAgICAgICAgLyogTUdFVCAqLworICAgICAgY2FzZSBGVFBf TURFOiAgICAgICAgICAgICAgICAgICAgIC8qIE1ERUxFVEUgKi8KKyAgICAgICAgcmV0dXJuKGRv ZnRwZ2V0KGN4LDEpKTsKKworICAgICAgY2FzZSBGVFBfSURMOiAgICAgICAgICAgICAgICAgICAg IC8qIElETEUgKi8KKyAgICAgICAgaWYgKCh4ID0gY21udW0oIk51bWJlciBvZiBzZWNvbmRzIiwi LTEiLDEwLCZ6LHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAg aWYgKCh5ID0gY21jZm0oKSkgPCAwKQorICAgICAgICAgIHJldHVybih5KTsKKyAgICAgICAgQ0hF Q0tDT05OKCk7CisgICAgICAgIGlmICh6IDwgMCkgIHsgICAgICAgICAgICAgICAgICAgLyogRGlz cGxheSBpZGxlIHRpbWVvdXQgKi8KKyAgICAgICAgICAgIGlmICh0ZXN0aW5nKQorICAgICAgICAg ICAgICBwcmludGYoIiBmdHAgcXVlcnkgaWRsZSB0aW1lb3V0Li4uXG4iKTsKKyAgICAgICAgICAg IHN1Y2Nlc3MgPSAoZnRwY21kKCJTSVRFIElETEUiLE5VTEwsMCwwLDEpID09IFJFUExZX0NPTVBM RVRFKTsKKyAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBTZXQgaWRs ZSB0aW1lb3V0ICovCisgICAgICAgICAgICBpZiAodGVzdGluZykKKyAgICAgICAgICAgICAgcHJp bnRmKCIgZnRwIGlkbGUgdGltZW91dCBzZXQ6ICVkLi4uXG4iLHopOworICAgICAgICAgICAgc3Vj Y2VzcyA9CisgICAgICAgICAgICAgIChmdHBjbWQoIlNJVEUgSURMRSIsY2tpdG9hKHopLDAsMCwx KSA9PSBSRVBMWV9DT01QTEVURSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuKHN1Y2Nlc3Mp OworCisgICAgICBjYXNlIEZUUF9NS0Q6ICAgICAgICAgICAgICAgICAgICAgLyogTUtESVIgKi8K KyAgICAgICAgcmV0dXJuKGRvZnRwbWtkKCkpOworCisgICAgICBjYXNlIEZUUF9NT0Q6ICAgICAg ICAgICAgICAgICAgICAgLyogTU9EVElNRSAqLworICAgICAgICBpZiAoKHggPSBjbXR4dCgiUmVt b3RlIGZpbGVuYW1lIiwgIiIsICZzLCB4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICByZXR1cm4o eCk7CisgICAgICAgIENIRUNLQ09OTigpOworICAgICAgICBja3N0cm5jcHkobGluZSxzLExJTkJV RlNJWik7CisgICAgICAgIGlmICh0ZXN0aW5nKQorICAgICAgICAgIHByaW50ZigiIGZ0cCBtb2R0 aW1lIFwiJXNcIi4uLlxuIixsaW5lKTsKKyAgICAgICAgc3VjY2VzcyA9IDA7CisgICAgICAgIGlm IChmdHBjbWQoIk1EVE0iLGxpbmUsbGNzLHJjcyxmdHBfdmJtKSA9PSBSRVBMWV9DT01QTEVURSkg eworCSAgICBzdWNjZXNzID0gMTsKKwkgICAgbWR0bW9rID0gMTsKKwkgICAgaWYgKCFxdWlldCkg eworCQlpbnQgZmxhZyA9IDA7CisJCWNoYXIgYywgKiBzOworCQlzdHJ1Y3QgdG0gdG1yZW1vdGU7 CisKKwkJYnplcm8oKGNoYXIgKikmdG1yZW1vdGUsIHNpemVvZihzdHJ1Y3QgdG0pKTsKKwkJcyA9 IGZ0cF9yZXBseV9zdHI7CisJCXdoaWxlICgoYyA9ICpzKyspKSB7CisJCSAgICBpZiAoYyA9PSBT UCkgeworCQkJZmxhZysrOworCQkJYnJlYWs7CisJCSAgICB9CisJCX0KKwkJaWYgKGZsYWcpIHsK KwkJICAgIGlmIChzc2NhbmYocywgIiUwNGQlMDJkJTAyZCUwMmQlMDJkJTAyZCIsCisJCQkgICAg ICAgJnRtcmVtb3RlLnRtX3llYXIsCisJCQkgICAgICAgJnRtcmVtb3RlLnRtX21vbiwKKwkJCSAg ICAgICAmdG1yZW1vdGUudG1fbWRheSwKKwkJCSAgICAgICAmdG1yZW1vdGUudG1faG91ciwKKwkJ CSAgICAgICAmdG1yZW1vdGUudG1fbWluLAorCQkJICAgICAgICZ0bXJlbW90ZS50bV9zZWMKKwkJ CSAgICAgICApID09IDYpIHsKKwkJCXByaW50ZigiICVzICUwNGQtJTAyZC0lMDJkICUwMmQ6JTAy ZDolMDJkIEdNVFxuIiwKKwkJCSAgICAgICBsaW5lLAorCQkJICAgICAgIHRtcmVtb3RlLnRtX3ll YXIsCisJCQkgICAgICAgdG1yZW1vdGUudG1fbW9uLAorCQkJICAgICAgIHRtcmVtb3RlLnRtX21k YXksCisJCQkgICAgICAgdG1yZW1vdGUudG1faG91ciwKKwkJCSAgICAgICB0bXJlbW90ZS50bV9t aW4sCisJCQkgICAgICAgdG1yZW1vdGUudG1fc2VjCisJCQkgICAgICAgKTsKKwkJICAgIH0gZWxz ZSB7CisJCQlzdWNjZXNzID0gMDsKKwkJICAgIH0KKwkJfQorCSAgICB9CisgICAgICAgIH0KKyAg ICAgICAgcmV0dXJuKHN1Y2Nlc3MpOworCisgICAgICBjYXNlIEZUUF9PUE46ICAgICAgICAgICAg ICAgICAgICAgLyogT1BFTiBjb25uZWN0aW9uICovCisjaWZkZWYgQ09NTUVOVAorICAgICAgICB4 ID0gY21mbGQoIklQIGhvc3RuYW1lIG9yIGFkZHJlc3MiLCIiLCZzLHh4c3RyaW5nKTsKKyAgICAg ICAgaWYgKHggPCAwKSB7CisgICAgICAgICAgICBzdWNjZXNzID0gMDsKKyAgICAgICAgICAgIHJl dHVybih4KTsKKyAgICAgICAgfQorICAgICAgICBja3N0cm5jcHkobGluZSxzLExJTkJVRlNJWik7 CisgICAgICAgIHMgPSBsaW5lOworICAgICAgICByZXR1cm4ob3BlbmZ0cChzLDApKTsKKyNlbHNl CisgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogT1BFTiBjb25uZWN0 aW9uICovCisgICAgICAgICAgICBjaGFyIG5hbWVbVFROQU1MRU4rMV0sICpwOworICAgICAgICAg ICAgZXh0ZXJuIGludCBuZXR3b3JrOworICAgICAgICAgICAgZXh0ZXJuIGNoYXIgdHRuYW1lW107 CisgICAgICAgICAgICBpZiAobmV0d29yaykgICAgICAgICAgICAgICAgLyogSWYgd2UgaGF2ZSBh IGN1cnJlbnQgY29ubmVjdGlvbiAqLworICAgICAgICAgICAgICBja3N0cm5jcHkobmFtZSx0dG5h bWUsTElOQlVGU0laKTsgLyogZ2V0IHRoZSBob3N0IG5hbWUgKi8KKyAgICAgICAgICAgIGVsc2UK KyAgICAgICAgICAgICAgKm5hbWUgPSAnXDAnOyAgICAgICAgICAgICAvKiBhcyBkZWZhdWx0IGhv c3QgKi8KKyAgICAgICAgICAgIGZvciAocCA9IG5hbWU7ICpwOyBwKyspICAgICAvKiBSZW1vdmUg IjpzZXJ2aWNlIiBmcm9tIGVuZC4gKi8KKyAgICAgICAgICAgICAgaWYgKCpwID09ICc6JykgeyAq cCA9ICdcMCc7IGJyZWFrOyB9CisjaWZuZGVmIFVTRVRMU1RBQgorICAgICAgICAgICAgeCA9IGNt ZmxkKCJJUCBob3N0bmFtZSBvciBhZGRyZXNzIixuYW1lLCZzLHh4c3RyaW5nKTsKKyNlbHNlCisg ICAgICAgICAgICBjbWZkYmkoJmt3LCAgICAgICAgICAgICAgICAgLyogRmlyc3QgRkRCIC0gY29t bWFuZHMgKi8KKyAgICAgICAgICAgICAgICAgICBfQ01LRVksICAgICAgICAgICAgICAvKiBmY29k ZSAqLworICAgICAgICAgICAgICAgICAgICJIb3N0bmFtZSBvciBzd2l0Y2giLCAvKiBoZWxwICov CisgICAgICAgICAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgLyogZGVmYXVsdCAqLwor ICAgICAgICAgICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIHN0cmluZyBk YXRhICovCisgICAgICAgICAgICAgICAgICAgbnRsc3RhYiwgICAgICAgICAgICAgLyogYWRkdGwg bnVtZXJpYyBkYXRhIDE6IHRibCBzaXplICovCisgICAgICAgICAgICAgICAgICAgMCwgICAgICAg ICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDI6IG5vbmUgKi8KKyAgICAgICAgICAg ICAgICAgICB4eHN0cmluZywgICAgICAgICAgICAvKiBQcm9jZXNzaW5nIGZ1bmN0aW9uICovCisg ICAgICAgICAgICAgICAgICAgdGxzdGFiLCAgICAgICAgICAgICAgLyogS2V5d29yZCB0YWJsZSAq LworICAgICAgICAgICAgICAgICAgICZmbCAgICAgICAgICAgICAgICAgIC8qIFBvaW50ZXIgdG8g bmV4dCBGREIgKi8KKyAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgY21mZGJpKCZm bCwgICAgICAgICAgICAgICAgIC8qIEEgaG9zdCBuYW1lIG9yIGFkZHJlc3MgKi8KKyAgICAgICAg ICAgICAgICAgICBfQ01GTEQsICAgICAgICAgICAgICAvKiBmY29kZSAqLworICAgICAgICAgICAg ICAgICAgICJIb3N0bmFtZSBvciBhZGRyZXNzIiwgLyogaGVscCAqLworICAgICAgICAgICAgICAg ICAgICIiLCAgICAgICAgICAgICAgICAgIC8qIGRlZmF1bHQgKi8KKyAgICAgICAgICAgICAgICAg ICAiIiwgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBzdHJpbmcgZGF0YSAqLworICAgICAgICAg ICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAxICov CisgICAgICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJp YyBkYXRhIDIgKi8KKyAgICAgICAgICAgICAgICAgICB4eHN0cmluZywKKyAgICAgICAgICAgICAg ICAgICBOVUxMLAorICAgICAgICAgICAgICAgICAgIE5VTEwKKyAgICAgICAgICAgICAgICAgICAp OworCisgICAgICAgICAgICBmb3IgKG4gPSAwOzsgbisrKSB7CisgICAgICAgICAgICAgICAgeCA9 IGNtZmRiKCZrdyk7ICAgICAgICAgLyogUGFyc2UgYSBob3N0bmFtZSBvciBhIGtleXdvcmQgKi8K KyAgICAgICAgICAgICAgICBpZiAoeCA9PSAtMykgeworICAgICAgICAgICAgICAgICAgcHJpbnRm KCI/ZnRwIG9wZW4gd2hhdD8gXCJoZWxwIGZ0cFwiIGZvciBoaW50c1xuIik7CisgICAgICAgICAg ICAgICAgICByZXR1cm4oLTkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBp ZiAoeCA8IDApCisgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBpZiAo Y21yZXN1bHQuZmNvZGUgPT0gX0NNRkxEKSB7IC8qIEhvc3RuYW1lICovCisgICAgICAgICAgICAg ICAgICAgIHMgPSBjbXJlc3VsdC5zcmVzdWx0OworICAgICAgICAgICAgICAgICAgICBicmVhazsK KyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNtcmVzdWx0Lm5yZXN1bHQgPT0gT1BOX1RMUykg eworICAgICAgICAgICAgICAgICAgICB1c2V0bHMgPSAxOworICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIH0KKyNlbmRpZiAvKiBVU0VUTFNUQUIgKi8KKyAgICAgICAgICAgIGlmICh4IDwg MCkgeworICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSAwOworICAgICAgICAgICAgICAgIHJldHVy bih4KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNrc3RybmNweShsaW5lLHMsTElOQlVG U0laKTsKKyAgICAgICAgICAgIHMgPSBsaW5lOworICAgICAgICAgICAgcmV0dXJuKG9wZW5mdHAo cyx1c2V0bHMpKTsKKyAgICAgICAgfQorI2VuZGlmIC8qIENPTU1FTlQgKi8KKworICAgICAgY2Fz ZSBGVFBfUFVUOiAgICAgICAgICAgICAgICAgICAgIC8qIFBVVCAqLworICAgICAgY2FzZSBGVFBf TVBVOiAgICAgICAgICAgICAgICAgICAgIC8qIE1QVVQgKi8KKyAgICAgIGNhc2UgRlRQX0FQUDog ICAgICAgICAgICAgICAgICAgICAvKiBBUFBFTkQgKi8KKyAgICAgIGNhc2UgRlRQX1JFUDoJCQkv KiBSRVBVVCAqLworICAgICAgICByZXR1cm4oZG9mdHBwdXQoY3gsMSkpOworCisgICAgICBjYXNl IEZUUF9QV0Q6ICAgICAgICAgICAgICAgICAgICAgLyogUFdEICovCisgICAgICAgIHggPSBkb2Z0 cHB3ZCgpOworICAgICAgICBpZiAoeCA+IC0xKSBzdWNjZXNzID0geDsKKyAgICAgICAgcmV0dXJu KHgpOworCisgICAgICBjYXNlIEZUUF9SRU46ICAgICAgICAgICAgICAgICAgICAgLyogUkVOQU1F ICovCisgICAgICAgIHJldHVybihkb2Z0cHJlbigpKTsKKworICAgICAgY2FzZSBGVFBfUkVTOiAg ICAgICAgICAgICAgICAgICAgIC8qIFJFU0VUICovCisgICAgICAgIHJldHVybihkb2Z0cHJlcygp KTsKKworICAgICAgY2FzZSBGVFBfSExQOiAgICAgICAgICAgICAgICAgICAgIC8qIChyZW1vdGUp IEhFTFAgKi8KKyAgICAgICAgcmV0dXJuKGRvZnRweGhscCgpKTsKKworICAgICAgY2FzZSBGVFBf Uk1EOiAgICAgICAgICAgICAgICAgICAgIC8qIFJNRElSICovCisgICAgICAgIHJldHVybihkb2Z0 cHJtZCgpKTsKKworICAgICAgY2FzZSBGVFBfU1RBOiAgICAgICAgICAgICAgICAgICAgIC8qIFNU QVRVUyAqLworICAgICAgICBpZiAoKHggPSBjbXR4dCgiQ29tbWFuZCIsICIiLCAmcywgeHhzdHJp bmcpKSA8IDApCisgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICBDSEVDS0NPTk4oKTsKKyAg ICAgICAgY2tzdHJuY3B5KGxpbmUscyxMSU5CVUZTSVopOworICAgICAgICBpZiAodGVzdGluZykg cHJpbnRmKCIgZnRwIHN0YXR1cyBcIiVzXCIuLi5cbiIsbGluZSk7CisgICAgICAgIHN1Y2Nlc3Mg PSAoZnRwY21kKCJTVEFUIixsaW5lLGxjcyxyY3MsMSkgPT0gUkVQTFlfQ09NUExFVEUpOworICAg ICAgICByZXR1cm4oc3VjY2Vzcyk7CisKKyAgICAgIGNhc2UgRlRQX1NJVDogeyAgICAgICAgICAg ICAgICAgICAvKiBTSVRFICovCisJICByZXR1cm4oZG9mdHBzaXRlKCkpOworICAgICAgfQorCisg ICAgICBjYXNlIEZUUF9TSVo6ICAgICAgICAgICAgICAgICAgICAgLyogKGFzayBmb3IpIFNJWkUg Ki8KKyAgICAgICAgaWYgKCh4ID0gY210eHQoIlJlbW90ZSBmaWxlbmFtZSIsICIiLCAmcywgeHhz dHJpbmcpKSA8IDApCisgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICBDSEVDS0NPTk4oKTsK KyAgICAgICAgY2tzdHJuY3B5KGxpbmUscyxMSU5CVUZTSVopOworICAgICAgICBpZiAodGVzdGlu ZykKKyAgICAgICAgICBwcmludGYoIiBmdHAgc2l6ZSBcIiVzXCIuLi5cbiIsbGluZSk7CisgICAg ICAgIHN1Y2Nlc3MgPSAoZnRwY21kKCJTSVpFIixsaW5lLGxjcyxyY3MsMSkgPT0gUkVQTFlfQ09N UExFVEUpOworCWlmIChzdWNjZXNzKQorCSAgc2l6ZW9rID0gMTsKKyAgICAgICAgcmV0dXJuKHN1 Y2Nlc3MpOworCisgICAgICBjYXNlIEZUUF9TWVM6ICAgICAgICAgICAgICAgICAgICAgLyogQXNr IGZvciBzZXJ2ZXIncyBTWVNURU0gdHlwZSAqLworICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8 IDApIHJldHVybih4KTsKKyAgICAgICAgQ0hFQ0tDT05OKCk7CisgICAgICAgIGlmICh0ZXN0aW5n KQorICAgICAgICAgIHByaW50ZigiIGZ0cCBzeXN0ZW0uLi5cbiIpOworICAgICAgICBzdWNjZXNz ID0gKGZ0cGNtZCgiU1lTVCIsTlVMTCwwLDAsMSkgPT0gUkVQTFlfQ09NUExFVEUpOworICAgICAg ICByZXR1cm4oc3VjY2Vzcyk7CisKKyAgICAgIGNhc2UgRlRQX1VNQTogICAgICAgICAgICAgICAg ICAgICAvKiBTZXQvcXVlcnkgVU1BU0sgKi8KKyAgICAgICAgaWYgKCh4ID0gY21mbGQoIlVtYXNr IHRvIHNldCBvciBub3RoaW5nIHRvIHF1ZXJ5IiwiIiwmcyx4eHN0cmluZykpIDwgMCkKKyAgICAg ICAgICBpZiAoeCAhPSAtMykKKyAgICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgY2tzdHJu Y3B5KHRtcGJ1ZixzLFRNUEJVRlNJWik7CisgICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkg cmV0dXJuKHgpOworICAgICAgICBDSEVDS0NPTk4oKTsKKyAgICAgICAgaWYgKHRlc3RpbmcpIHsK KyAgICAgICAgICAgIGlmICh0bXBidWZbMF0pCisgICAgICAgICAgICAgIHByaW50ZigiIGZ0cCB1 bWFzayBcIiVzXCIuLi5cbiIsdG1wYnVmKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg ICAgcHJpbnRmKCIgZnRwIHF1ZXJ5IHVtYXNrLi4uXG4iKTsKKyAgICAgICAgfQorICAgICAgICBz dWNjZXNzID0gZnRwX3VtYXNrKHRtcGJ1Zik7CisgICAgICAgIHJldHVybihzdWNjZXNzKTsKKwor ICAgICAgY2FzZSBGVFBfVVNSOgorICAgICAgICByZXR1cm4oZG9mdHB1c3IoKSk7CisKKyAgICAg IGNhc2UgRlRQX1FVTzoKKyAgICAgICAgaWYgKCh4ID0gY210eHQoIkZUUCBwcm90b2NvbCBjb21t YW5kIiwgIiIsICZzLCB4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICByZXR1cm4oeCk7CisgICAg ICAgIENIRUNLQ09OTigpOworICAgICAgICBzdWNjZXNzID0gKGZ0cGNtZChzLE5VTEwsMCwwLGZ0 cF92Ym0pID09IFJFUExZX0NPTVBMRVRFKTsKKyAgICAgICAgcmV0dXJuKHN1Y2Nlc3MpOworCisg ICAgICBjYXNlIEZUUF9UWVA6ICAgICAgICAgICAgICAgICAgICAgLyogVHlwZSAqLworICAgICAg ICBpZiAoKHggPSBjbWtleShmdHB0eXAsbmZ0cHR5cCwiIiwiIix4eHN0cmluZykpIDwgMCkKKyAg ICAgICAgICByZXR1cm4oeCk7CisgICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJu KHkpOworICAgICAgICBDSEVDS0NPTk4oKTsKKyAgICAgICAgZnRwX3R5cCA9IHg7CisgICAgICAg IGdfZnRwX3R5cCA9IHg7CisgICAgICAgIHRlbmV4ID0gKGZ0cF90eXAgPT0gRlRUX1RFTik7Cisg ICAgICAgIGNoYW5nZXR5cGUoZnRwX3R5cCxmdHBfdmJtKTsKKyAgICAgICAgcmV0dXJuKDEpOwor CisgICAgICBjYXNlIEZUUF9DSEs6ICAgICAgICAgICAgICAgICAgICAgLyogQ2hlY2sgaWYgcmVt b3RlIGZpbGUocykgZXhpc3QocykgKi8KKyAgICAgICAgaWYgKCh4ID0gY210eHQoInJlbW90ZSBm aWxlbmFtZSIsICIiLCAmcywgeHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgcmV0dXJuKHgpOwor ICAgICAgICBDSEVDS0NPTk4oKTsKKyAgICAgICAgc3VjY2VzcyA9IHJlbW90ZV9maWxlcygxLChD SEFSICopcywoQ0hBUiAqKXMsMCkgPyAxIDogMDsKKyAgICAgICAgcmV0dXJuKHN1Y2Nlc3MpOwor CisgICAgICBjYXNlIEZUUF9GRUE6ICAgICAgICAgICAgICAgICAgICAgLyogUkZDMjM4OSAqLwor ICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApCisgICAgICAgICAgcmV0dXJuKHkpOworICAg ICAgICBDSEVDS0NPTk4oKTsKKwlzdWNjZXNzID0gKGZ0cGNtZCgiRkVBVCIsTlVMTCwwLDAsMSkg PT0gUkVQTFlfQ09NUExFVEUpOworCWlmIChzdWNjZXNzKSB7CisJICAgIGlmIChzZnR0YWJbMF0g PiAwKSB7CisJCWZ0cF9hdXQgPSBzZnR0YWJbU0ZUX0FVVEhdOworCQlzaXplb2sgID0gc2Z0dGFi W1NGVF9TSVpFXTsKKwkJbWR0bW9rICA9IHNmdHRhYltTRlRfTURUTV07CisJCW1sc3RvayAgPSBz ZnR0YWJbU0ZUX01MU1RdOworCSAgICB9CisJfQorCXJldHVybihzdWNjZXNzKTsKKworICAgICAg Y2FzZSBGVFBfT1BUOiAgICAgICAgICAgICAgICAgICAgIC8qIFJGQzIzODkgKi8KKyAgICAgICAg LyogUGVyaGFwcyB0aGlzIHNob3VsZCBiZSBhIGtleXdvcmQgbGlzdC4uLiAqLworICAgICAgICBp ZiAoKHggPSBjbWZsZCgiRlRQIGNvbW1hbmQiLCIiLCZzLHh4c3RyaW5nKSkgPCAwKQorICAgICAg ICAgIHJldHVybih4KTsKKyAgICAgICAgQ0hFQ0tDT05OKCk7CisgICAgICAgIGNrc3RybmNweShs aW5lLHMsTElOQlVGU0laKTsKKyAgICAgICAgaWYgKCh4ID0gY210eHQoIk9wdGlvbnMgZm9yIHRo aXMgY29tbWFuZCIsICIiLCAmcywgeHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgcmV0dXJuKHgp OworICAgICAgICBzdWNjZXNzID0gKGZ0cGNtZCgiT1BUUyIsbGluZSxsY3MscmNzLGZ0cF92Ym0p ID09IFJFUExZX0NPTVBMRVRFKTsKKyAgICAgICAgcmV0dXJuKHN1Y2Nlc3MpOworCisgICAgICBj YXNlIEZUUF9FTkE6CQkJLyogRlRQIEVOQUJMRSAqLworICAgICAgY2FzZSBGVFBfRElTOgkJCS8q IEZUUCBESVNBQkxFICovCisgICAgICAgIGlmICgoeCA9IGNta2V5KGZ0cGVuYXRhYixuZnRwZW5h LCIiLCIiLHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgaWYg KCh5ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeSk7CisJc3dpdGNoICh4KSB7CisJICBjYXNlIEVO QV9BVVRIOgkJLyogT0sgdG8gdXNlIGF1dG9hdXRoZW50aWNhdGlvbiAqLworCSAgICBmdHBfYXV0 ID0gKGN4ID09IEZUUF9FTkEpID8gMSA6IDA7CisJICAgIHNmdHRhYltTRlRfQVVUSF0gPSBmdHBf YXV0OworCSAgICBicmVhazsKKwkgIGNhc2UgRU5BX0ZFQVQ6CQkvKiBPSyB0byBzZW5kIEZFQVQg Y29tbWFuZCAqLworCSAgICBmZWF0b2sgPSAoY3ggPT0gRlRQX0VOQSkgPyAxIDogMDsKKwkgICAg YnJlYWs7CisJICBjYXNlIEVOQV9NTFNUOgkJLyogT0sgdG8gdXNlIE1MU1QvTUxTRCAqLworCSAg ICBtbHN0b2sgPSAoY3ggPT0gRlRQX0VOQSkgPyAxIDogMDsKKwkgICAgc2Z0dGFiW1NGVF9NTFNU XSA9IG1sc3RvazsKKwkgICAgYnJlYWs7CisJICBjYXNlIEVOQV9NRFRNOgkJLyogT0sgdG8gdXNl IE1EVE0gKi8KKwkgICAgbWR0bW9rID0gKGN4ID09IEZUUF9FTkEpID8gMSA6IDA7CisJICAgIHNm dHRhYltTRlRfTURUTV0gPSBtZHRtb2s7CisJICAgIGJyZWFrOworCSAgY2FzZSBFTkFfU0laRToJ CS8qIE9LIHRvIHVzZSBTSVpFICovCisJICAgIHNpemVvayA9IChjeCA9PSBGVFBfRU5BKSA/IDEg OiAwOworCSAgICBzZnR0YWJbU0ZUX1NJWkVdID0gc2l6ZW9rOworCSAgICBicmVhazsKKwl9CisJ cmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKyAgICB9CisgICAgcmV0dXJuKC0yKTsKK30KKworI2lmbmRl ZiBOT1NIT1cKK3N0YXRpYyBjaGFyICoKK3Nob3BsKHgpIGludCB4OyB7CisgICAgc3dpdGNoICh4 KSB7CisgICAgICBjYXNlIEZQTF9DTFI6IHJldHVybigiY2xlYXIiKTsKKyAgICAgIGNhc2UgRlBM X1BSVjogcmV0dXJuKCJwcml2YXRlIik7CisgICAgICBjYXNlIEZQTF9TQUY6IHJldHVybigic2Fm ZSIpOworICAgICAgY2FzZSAwOiAgcmV0dXJuKCIobm90IHNldCkiKTsKKyAgICAgIGRlZmF1bHQ6 IHJldHVybigiKHVua25vd24pIik7CisgICAgfQorfQorCitpbnQKK3Nob2Z0cChicmllZikgaW50 IGJyaWVmOyB7CisgICAgY2hhciAqIHMgPSAiPyI7CisgICAgaW50IG4sIHg7CisKKyAgICBpZiAo Z19mdHBfdHlwID4gLTEpIHsgICAgICAgICAgICAgICAvKiBSZXN0b3JlIFRZUEUgaWYgc2F2ZWQg Ki8KKyAgICAgICAgZnRwX3R5cCA9IGdfZnRwX3R5cDsKKyAgICAgICAgLyogZ19mdHBfdHlwID0g LTE7ICovCisgICAgfQorICAgIHByaW50ZigiXG4iKTsKKyAgICBwcmludGYoIkZUUCBjb25uZWN0 aW9uOiAgICAgICAgICAgICAgICAgJXNcbiIsY29ubmVjdGVkID8KKyAgICAgICAgICAgZnRwX2hv c3QgOgorICAgICAgICAgICAiKG5vbmUpIgorICAgICAgICAgICApOworICAgIG4gPSAyOworICAg IGlmIChjb25uZWN0ZWQpIHsKKyAgICAgICAgbisrOworICAgICAgICBwcmludGYoIkZUUCBzZXJ2 ZXIgdHlwZTogICAgICAgICAgICAgICAgJXNcbiIsCisgICAgICAgICAgICAgICBmdHBfc3J2dHlw WzBdID8gZnRwX3NydnR5cCA6ICIodW5rbm93bikiKTsKKyAgICB9CisgICAgaWYgKGxvZ2dlZGlu KQorICAgICAgcHJpbnRmKCJMb2dnZWQgaW4gYXM6ICAgICAgICAgICAgICAgICAgICVzXG4iLAor ICAgICAgICAgICAgIHN0cnZhbChmdHBfbG9nbmFtZSwiKHVua25vd24pIikpOworICAgIGVsc2UK KyAgICAgIHByaW50ZigiTm90IGxvZ2dlZCBpblxuIik7CisgICAgbisrOworICAgIGlmIChicmll ZikgcmV0dXJuKDApOworCisgICAgcHJpbnRmKCJcblNFVCBGVFAgdmFsdWVzOlxuXG4iKTsKKyAg ICBuICs9IDM7CisKKyAgICBwcmludGYoIiBmdHAgYW5vbnltb3VzLXBhc3N3b3JkOiAgICAgICAg JXNcbiIsCisJICAgZnRwX2FwdyA/IGZ0cF9hcHcgOiAiKGRlZmF1bHQpIgorCSAgICk7CisgICAg cHJpbnRmKCIgZnRwIGF1dG8tbG9naW46ICAgICAgICAgICAgICAgICVzXG4iLHNob3dvZmYoZnRw X2xvZykpOworICAgIHByaW50ZigiIGZ0cCBhdXRvLWF1dGhlbnRpY2F0aW9uOiAgICAgICAlc1xu IixzaG93b2ZmKGZ0cF9hdXQpKTsKKyAgICBzd2l0Y2ggKGZ0cF90eXApIHsKKyAgICAgIGNhc2Ug RlRUX0FTQzogcyA9ICJ0ZXh0IjsgYnJlYWs7CisgICAgICBjYXNlIEZUVF9CSU46IHMgPSAiYmlu YXJ5IjsgYnJlYWs7CisgICAgICBjYXNlIEZUVF9URU46IHMgPSAidGVuZXgiOyBicmVhazsKKyAg ICB9CisjaWZkZWYgRlRQX1RJTUVPVVQKKyAgICBwcmludGYoIiBmdHAgdGltZW91dDogICAgICAg ICAgICAgICAgICAgJWxkXG4iLGZ0cF90aW1lb3V0KTsKKyNlbmRpZgkvKiBGVFBfVElNRU9VVCAq LworICAgIHByaW50ZigiIGZ0cCB0eXBlOiAgICAgICAgICAgICAgICAgICAgICAlc1xuIixzKTsK KyAgICBwcmludGYoIiBmdHAgZ2V0LWZpbGV0eXBlLXN3aXRjaGluZzogICAgJXNcbiIsc2hvd29m ZihnZXRfYXV0bykpOworICAgIHByaW50ZigiIGZ0cCBkYXRlczogICAgICAgICAgICAgICAgICAg ICAlc1xuIixzaG93b2ZmKGZ0cF9kYXRlcykpOworICAgIHByaW50ZigiIGZ0cCBlcnJvci1hY3Rp b246ICAgICAgICAgICAgICAlc1xuIixmdHBfZXJyID8gInF1aXQiOiJwcm9jZWVkIik7CisgICAg cHJpbnRmKCIgZnRwIGZpbGVuYW1lczogICAgICAgICAgICAgICAgICVzXG4iLAorICAgICAgICAg ICBmdHBfY252ID09IENOVl9BVVRPID8gImF1dG8iIDogKGZ0cF9jbnYgPyAiY29udmVydGVkIiA6 ICJsaXRlcmFsIikKKyAgICAgICAgICAgKTsKKyAgICBwcmludGYoIiBmdHAgZGVidWcgICAgICAg ICAgICAgICAgICAgICAgJXNcbiIsc2hvd29mZihmdHBfZGViKSk7CisKKyAgICBwcmludGYoIiBm dHAgcGFzc2l2ZS1tb2RlOiAgICAgICAgICAgICAgJXNcbiIsc2hvd29mZihmdHBfcHN2KSk7Cisg ICAgcHJpbnRmKCIgZnRwIHBlcm1pc3Npb25zOiAgICAgICAgICAgICAgICVzXG4iLHNob3dvb2Eo ZnRwX3BybSkpOworICAgIHByaW50ZigiIGZ0cCB2ZXJib3NlLW1vZGU6ICAgICAgICAgICAgICAl c1xuIixzaG93b2ZmKGZ0cF92YngpKTsKKyAgICBwcmludGYoIiBmdHAgc2VuZC1wb3J0LWNvbW1h bmRzOiAgICAgICAgJXNcbiIsc2hvd29mZihmdHBfcHN2KSk7CisgICAgcHJpbnRmKCIgZnRwIHVu aXF1ZS1zZXJ2ZXItbmFtZXM6ICAgICAgICVzXG4iLHNob3dvZmYoZnRwX3VzbikpOworI2lmZGVm IENPTU1FTlQKKyAgICAvKiBTZWUgbm90ZSBpbiBkb3hmdHAoKSAqLworICAgIGlmIChmdHBfZm5j IDwgMCkKKyAgICAgIGZ0cF9mbmMgPSBmbmNhY3Q7CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAg IHByaW50ZigiIGZ0cCBjb2xsaXNpb246ICAgICAgICAgICAgICAgICAlc1xuIiwKKwkgICBmbmNu YW1bZnRwX2ZuYyA+IC0xID8gZnRwX2ZuYyA6IGZuY2FjdF0pOworICAgIHByaW50ZigiIGZ0cCBz ZXJ2ZXItdGltZS1vZmZzZXQ6ICAgICAgICAlc1xuIiwKKwkgICBmdHNfc3RvID8gZnRzX3N0byA6 ICIobm9uZSkiKTsKKyAgICBuICs9IDE1OworCisjaWZuZGVmIE5PQ1NFVFMKKyAgICBwcmludGYo IiBmdHAgY2hhcmFjdGVyLXNldC10cmFuc2xhdGlvbjogJXNcbiIsc2hvd29mZihmdHBfeGxhKSk7 CisgICAgaWYgKCsrIG4gPiBjbWRfcm93cy0zKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4gMDsg ZWxzZSBuID0gMDsgfQorCisgICAgcHJpbnRmKCIgZnRwIHNlcnZlci1jaGFyYWN0ZXItc2V0OiAg ICAgICVzXG4iLGZjc2luZm9bZnRwX2Nzcl0ua2V5d29yZCk7CisgICAgaWYgKCsrIG4gPiBjbWRf cm93cy0zKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4gMDsgZWxzZSBuID0gMDsgfQorCisgICAg cHJpbnRmKCIgZmlsZSBjaGFyYWN0ZXItc2V0OiAgICAgICAgICAgICVzXG4iLGZjc2luZm9bZmNo YXJzZXRdLmtleXdvcmQpOworICAgIGlmICgrKyBuID4gY21kX3Jvd3MtMykgeyBpZiAoIWFza21v cmUoKSkgcmV0dXJuIDA7IGVsc2UgbiA9IDA7IH0KKyNlbmRpZiAvKiBOT0NTRVRTICovCisKKyAg ICB4ID0gZnRwX2RpczsKKyAgICBpZiAoeCA8IDApCisgICAgICB4ID0gZmRpc3BsYTsKKyAgICBz d2l0Y2ggKHgpIHsKKyAgICAgIGNhc2UgWFlGRF9OOiBzID0gIm5vbmUiOyBicmVhazsKKyAgICAg IGNhc2UgWFlGRF9SOiBzID0gInNlcmlhbCI7IGJyZWFrOworICAgICAgY2FzZSBYWUZEX0M6IHMg PSAiZnVsbHNjcmVlbiI7IGJyZWFrOworICAgICAgY2FzZSBYWUZEX1M6IHMgPSAiY3J0IjsgYnJl YWs7CisgICAgICBjYXNlIFhZRkRfQjogcyA9ICJicmllZiI7IGJyZWFrOworICAgIH0KKyAgICBw cmludGYoIiBmdHAgZGlzcGxheTogICAgICAgICAgICAgICAgICAgJXNcbiIscyk7CisgICAgaWYg KCsrIG4gPiBjbWRfcm93cy0zKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4gMDsgZWxzZSBuID0g MDsgfQorCisgICAgaWYgKG1sc3RvayB8fCBmZWF0b2sgfHwgbWR0bW9rIHx8IHNpemVvayB8fCBm dHBfYXV0KSB7CisJcHJpbnRmKCIgZW5hYmxlZDogICAgICAgICAgICAgICAgICAgICAgIik7CisJ aWYgKGZ0cF9hdXQpIHByaW50ZigiIEFVVEgiKTsKKwlpZiAoZmVhdG9rKSAgcHJpbnRmKCIgRkVB VCIpOworCWlmIChtZHRtb2spICBwcmludGYoIiBNRFRNIik7CisJaWYgKG1sc3RvaykgIHByaW50 ZigiIE1MU1QiKTsKKwlpZiAoc2l6ZW9rKSAgcHJpbnRmKCIgU0laRSIpOworCXByaW50ZigiXG4i KTsKKwlpZiAoKysgbiA+IGNtZF9yb3dzLTMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybiAwOyBl bHNlIG4gPSAwOyB9CisgICAgfQorICAgIGlmICghbWxzdG9rIHx8ICFmZWF0b2sgfHwgIW1kdG1v ayB8fCAhc2l6ZW9rIHx8ICFmdHBfYXV0KSB7CisJcHJpbnRmKCIgZGlzYWJsZWQ6ICAgICAgICAg ICAgICAgICAgICAgIik7CisJaWYgKCFmdHBfYXV0KSBwcmludGYoIiBBVVRIIik7CisJaWYgKCFm ZWF0b2spICBwcmludGYoIiBGRUFUIik7CisJaWYgKCFtZHRtb2spICBwcmludGYoIiBNRFRNIik7 CisJaWYgKCFtbHN0b2spICBwcmludGYoIiBNTFNUIik7CisJaWYgKCFzaXplb2spICBwcmludGYo IiBTSVpFIik7CisJcHJpbnRmKCJcbiIpOworCWlmICgrKyBuID4gY21kX3Jvd3MtMykgeyBpZiAo IWFza21vcmUoKSkgcmV0dXJuIDA7IGVsc2UgbiA9IDA7IH0KKyAgICB9CisgICAgc3dpdGNoIChm dHBnZXQpIHsKKyAgICAgIGNhc2UgMDogcyA9ICJrZXJtaXQiOyBicmVhazsKKyAgICAgIGNhc2Ug MTogcyA9ICJmdHAiOyBicmVhazsKKyAgICAgIGNhc2UgMjogcyA9ICJhdXRvIjsgYnJlYWs7Cisg ICAgICBkZWZhdWx0OiBzID0gIj8iOworICAgIH0KKyAgICBwcmludGYoIiBnZXQtcHV0LXJlbW90 ZTogICAgICAgICAgICAgICAgJXNcbiIscyk7CisgICAgaWYgKCsrIG4gPiBjbWRfcm93cy0zKSB7 IGlmICghYXNrbW9yZSgpKSByZXR1cm4gMDsgZWxzZSBuID0gMDsgfQorCisgICAgcHJpbnRmKCJc biIpOworICAgIGlmICgrKyBuID4gY21kX3Jvd3MtMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJu IDA7IGVsc2UgbiA9IDA7IH0KKworI2lmZGVmIEZUUF9TRUNVUklUWQorICAgIHByaW50ZigiQXZh aWxhYmxlIHNlY3VyaXR5IG1ldGhvZHM6ICAgICIpOworI2lmZGVmIEZUUF9HU1NBUEkKKyAgICBw cmludGYoIkdTU0FQSSAiKTsKKyNlbmRpZiAvKiBGVFBfR1NTQVBJICovCisjaWZkZWYgRlRQX0tS QjQKKyAgICBwcmludGYoIktlcmJlcm9zNCAiKTsKKyNlbmRpZiAvKiBGVFBfS1JCNCAqLworI2lm ZGVmIEZUUF9TUlAKKyAgICBwcmludGYoIlNSUCAiKTsKKyNlbmRpZiAvKiBGVFBfU1JQICovCisj aWZkZWYgRlRQX1NTTAorICAgIHByaW50ZigiU1NMICIpOworI2VuZGlmIC8qIEZUUF9TU0wgKi8K KworICAgIG4rKzsKKyAgICBwcmludGYoIlxuXG4iKTsKKyAgICBpZiAoKysgbiA+IGNtZF9yb3dz LTMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybiAwOyBlbHNlIG4gPSAwOyB9CisgICAgcHJpbnRm KCIgZnRwIGF1dGh0eXBlOiAgICAgICAgICAgICAgICAgICVzXG4iLHN0cnZhbChhdXRoX3R5cGUs TlVMTCkpOworICAgIGlmICgrKyBuID4gY21kX3Jvd3MtMykgeyBpZiAoIWFza21vcmUoKSkgcmV0 dXJuIDA7IGVsc2UgbiA9IDA7IH0KKyAgICBwcmludGYoIiBmdHAgYXV0by1lbmNyeXB0aW9uOiAg ICAgICAgICAgJXNcbiIsc2hvd29mZihmdHBfY3J5KSk7CisgICAgaWYgKCsrIG4gPiBjbWRfcm93 cy0zKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4gMDsgZWxzZSBuID0gMDsgfQorICAgIHByaW50 ZigiIGZ0cCBjcmVkZW50aWFsLWZvcndhcmRpbmc6ICAgICAlc1xuIixzaG93b2ZmKGZ0cF9jZncp KTsKKyAgICBpZiAoKysgbiA+IGNtZF9yb3dzLTMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybiAw OyBlbHNlIG4gPSAwOyB9CisgICAgcHJpbnRmKCIgZnRwIGNvbW1hbmQtcHJvdGVjdGlvbi1sZXZl bDogICVzXG4iLHNob3BsKGZ0cF9jcGwpKTsKKyAgICBpZiAoKysgbiA+IGNtZF9yb3dzLTMpIHsg aWYgKCFhc2ttb3JlKCkpIHJldHVybiAwOyBlbHNlIG4gPSAwOyB9CisgICAgcHJpbnRmKCIgZnRw IGRhdGEtcHJvdGVjdGlvbi1sZXZlbDogICAgICVzXG4iLHNob3BsKGZ0cF9kcGwpKTsKKyAgICBp ZiAoKysgbiA+IGNtZF9yb3dzLTMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybiAwOyBlbHNlIG4g PSAwOyB9CisgICAgcHJpbnRmKCIgZnRwIHNlY3VyZSBwcm94eTogICAgICAgICAgICAgICVzXG4i LHNob3BsKHNzbF9mdHBfcHJveHkpKTsKKyAgICBpZiAoKysgbiA+IGNtZF9yb3dzLTMpIHsgaWYg KCFhc2ttb3JlKCkpIHJldHVybiAwOyBlbHNlIG4gPSAwOyB9CisjZWxzZQorICAgIHByaW50Zigi QXZhaWxhYmxlIHNlY3VyaXR5IG1ldGhvZHM6ICAgICAobm9uZSlcbiIpOworICAgIGlmICgrKyBu ID4gY21kX3Jvd3MtMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuIDA7IGVsc2UgbiA9IDA7IH0K KyNlbmRpZiAvKiBGVFBfU0VDVVJJVFkgKi8KKworICAgIGlmIChuIDw9IGNtZF9yb3dzIC0gMykK KyAgICAgIHByaW50ZigiXG4iKTsKKyAgICByZXR1cm4oMCk7Cit9CisjZW5kaWYgLyogTk9TSE9X ICovCisKKyNpZm5kZWYgTk9IRUxQCisvKiBGVFAgSEVMUCB0ZXh0IHN0cmluZ3MgKi8KKworc3Rh dGljIGNoYXIgKiBmaHNfZnRwW10gPSB7CisgICAgIlN5bnRheDogRlRQIHN1YmNvbW1hbmQgWyBv cGVyYW5kcyBdIiwKKyAgICAiICBNYWtlcyBhbiBGVFAgY29ubmVjdGlvbiwgb3Igc2VuZHMgYSBj b21tYW5kIHRvIHRoZSBGVFAgc2VydmVyLiIsCisgICAgIiAgVG8gc2VlIGEgbGlzdCBvZiBhdmFp bGFibGUgRlRQIHN1YmNvbW1hbmRzLCB0eXBlIFwiZnRwID9cIi4iLAorICAgICIgIGFuZCB0aGVu IHVzZSBIRUxQIEZUUCB4eHggdG8gZ2V0IGhlbHAgYWJvdXQgc3ViY29tbWFuZCB4eHguIiwKKyAg ICAiICBBbHNvIHNlZSBIRUxQIFNFVCBGVFAsIEhFTFAgU0VUIEdFVC1QVVQtUkVNT1RFLCBhbmQg SEVMUCBGSVJFV0FMTC4iLAorICAgICIiCit9OworCitzdGF0aWMgY2hhciAqIGZoc19hY2NbXSA9 IHsgICAgICAgICAgICAgLyogQUNDT1VOVCAqLworICAgICJTeW50YXg6IEZUUCBBQ0NPVU5UIHRl eHQiLAorICAgICIgIFNlbmRzIGFuIGFjY291bnQgZGVzaWduYXRvciB0byBhbiBGVFAgc2VydmVy IHRoYXQgbmVlZHMgb25lLiIsCisgICAgIiAgTW9zdCBGVFAgc2VydmVycyBkbyBub3QgdXNlIGFj Y291bnRzOyBzb21lIHVzZSB0aGVtIGZvciBvdGhlciIsCisgICAgIiAgb3RoZXIgcHVycG9zZXMs IHN1Y2ggYXMgZGlzay1hY2Nlc3MgcGFzc3dvcmRzLiIsCisgICAgIiIKK307CitzdGF0aWMgY2hh ciAqIGZoc19hcHBbXSA9IHsgICAgICAgICAgICAgLyogQVBQRU5EICovCisgICAgIlN5bnRheDog RlRQIEFQUEVORCBmaWxuYW1lIiwKKyAgICAiICBFcXVpdmFsZW50IHRvIFsgRlRQIF0gUFVUIC9B UFBFTkQuICBTZWUgSEVMUCBGVFAgUFVULiIsCisgICAgIiIKK307CitzdGF0aWMgY2hhciAqIGZo c19jbHNbXSA9IHsgICAgICAgICAgICAgLyogQllFLCBDTE9TRSAqLworICAgICJTeW50YXg6IFsg RlRQIF0gQllFIiwKKyAgICAiICBMb2dzIG91dCBmcm9tIHRoZSBGVFAgc2VydmVyIGFuZCBjbG9z ZXMgdGhlIEZUUCBjb25uZWN0aW9uLiIsCisgICAgIiAgQWxzbyBzZWUgSEVMUCBTRVQgR0VULVBV VC1SRU1PVEUuICBTeW5vbnltOiBbIEZUUCBdIENMT1NFLiIsCisgICAgIiIKK307CitzdGF0aWMg Y2hhciAqIGZoc19jd2RbXSA9IHsgICAgICAgICAgICAgLyogQ0QsIENXRCAqLworICAgICJTeW50 YXg6IFsgRlRQIF0gQ0QgZGlyZWN0b3J5IiwKKyAgICAiICBBc2tzIHRoZSBGVFAgc2VydmVyIHRv IGNoYW5nZSB0byB0aGUgZ2l2ZW4gZGlyZWN0b3J5LiIsCisgICAgIiAgQWxzbyBzZWUgSEVMUCBT RVQgR0VULVBVVC1SRU1PVEUuICBTeW5vbnltczogWyBGVFAgXSBDV0QsIFJDRCwgUkNXRC4iLAor ICAgICIiCit9Oworc3RhdGljIGNoYXIgKiBmaHNfZ3VwW10gPSB7ICAgICAgICAgICAgIC8qIENE VVAsIFVQICovCisgICAgIlN5bnRheDogRlRQIENEVVAiLAorICAgICIgIEFza3MgdGhlIEZUUCBz ZXJ2ZXIgdG8gY2hhbmdlIHRvIHRoZSBwYXJlbnQgZGlyZWN0b3J5IG9mIGl0cyBjdXJyZW50IiwK KyAgICAiICBkaXJlY3RvcnkuICBBbHNvIHNlZSBIRUxQIFNFVCBHRVQtUFVULVJFTU9URS4gIFN5 bm9ueW06IEZUUCBVUC4iLAorICAgICIiCit9Oworc3RhdGljIGNoYXIgKiBmaHNfY2htW10gPSB7 ICAgICAgICAgICAgIC8qIENITU9EICovCisgICAgIlN5bnRheDogRlRQIENITU9EIGZpbGVuYW1l IHBlcm1pc3Npb25zIiwKKyAgICAiICBBc2tzIHRoZSBGVFAgc2VydmVyIHRvIGNoYW5nZSB0aGUg cGVybWlzc2lvbnMsIHByb3RlY3Rpb24sIG9yIG1vZGUgb2YiLAorICAgICIgIHRoZSBnaXZlbiBm aWxlLiAgVGhlIGdpdmVuIHBlcm1pc3Npb25zIG11c3QgYmUgaW4gdGhlIHN5bnRheCBvZiB0aGUi LAorICAgICIgIHRoZSBzZXJ2ZXIncyBmaWxlIHN5c3RlbSwgZS5nLiBhbiBvY3RhbCBudW1iZXIg Zm9yIFVOSVguICBBbHNvIHNlZSIsCisgICAgIiAgRlRQIFBVVCAvUEVSTUlTU0lPTlMiLAorICAg ICIiCit9Oworc3RhdGljIGNoYXIgKiBmaHNfbWRlW10gPSB7ICAgICAgICAgICAgIC8qIERFTEVU RSAqLworICAgICJTeW50YXg6IEZUUCBERUxFVEUgWyBzd2l0Y2hlcyBdIGZpbGVzcGVjIiwKKyAg ICAiICBBc2tzIHRoZSBGVFAgc2VydmVyIHRvIGRlbGV0ZSB0aGUgZ2l2ZW4gZmlsZSBvciBmaWxl cy4iLAorICAgICIgIFN5bm9ueW06IE1ERUxFVEUgKEtlcm1pdCBtYWtlcyBubyBkaXN0aW5jdGlv biBiZXR3ZWVuIHNpbmdsZSBhbmQiLAorICAgICIgIG11bHRpcGxlIGZpbGUgZGVsZXRpb24pLiAg T3B0aW9uYWwgc3dpdGNoZXM6IiwKKyAgICAiICIsCisgICAgIiAgL0VSUk9SLUFDVElPTjp7UFJP Q0VFRCxRVUlUfSIsCisgICAgIiAgL0VYQ0VQVDpwYXR0ZXJuIiwKKyAgICAiICAvRklMRU5BTUVT OntBVVRPLENPTlZFUlRFRCxMSVRFUkFMfSIsCisgICAgIiAgL0xBUkdFUi1USEFOOm51bWJlciIs CisjaWZkZWYgVU5JWE9ST1NLCisgICAgIiAgL05PRE9URklMRVMiLAorI2VuZGlmIC8qIFVOSVhP Uk9TSyAqLworICAgICIgIC9RVUlFVCIsCisjaWZkZWYgUkVDVVJTSVZFCisgICAgIiAgL1JFQ1VS U0lWRSAoZGVwZW5kcyBvbiBzZXJ2ZXIpIiwKKyAgICAiICAvU1VCRElSRUNUT1JJRVMiLAorI2Vu ZGlmIC8qIFJFQ1VSU0lWRSAqLworICAgICIgIC9TTUFMTEVSLVRIQU46bnVtYmVyIiwKKyAgICAi IgorfTsKK3N0YXRpYyBjaGFyICogZmhzX2RpcltdID0geyAgICAgICAgICAgICAvKiBESVJFQ1RP UlkgKi8KKyAgICAiU3ludGF4OiBGVFAgRElSRUNUT1JZIFsgZmlsZXNwZWMgXSIsCisgICAgIiAg QXNrcyB0aGUgc2VydmVyIHRvIHNlbmQgYSBkaXJlY3RvcnkgbGlzdGluZyBvZiB0aGUgZmlsZXMg dGhhdCBtYXRjaCIsCisgICAgIiAgdGhlIGdpdmVuIGZpbGVzcGVjLCBvciBpZiBub25lIGlzIGdp dmVuLCBhbGwgdGhlIGZpbGVzIGluIGl0cyBjdXJyZW50IiwKKyAgICAiICBkaXJlY3RvcnkuICBU aGUgZmlsZXNwZWMsIGluY2x1ZGluZyBhbnkgd2lsZGNhcmRzLCBtdXN0IGJlIGluIHRoZSIsCisg ICAgIiAgc3ludGF4IG9mIHRoZSBzZXJ2ZXIncyBmaWxlIHN5c3RlbS4gIEFsc28gc2VlIEhFTFAg U0VUIEdFVC1QVVQtUkVNT1RFLiIsCisgICAgIiAgU3lub255bTogUkRJUkVDVE9SWS4iLAorICAg ICIiCit9Oworc3RhdGljIGNoYXIgKiBmaHNfdmRpW10gPSB7ICAgICAgICAgICAgIC8qIFZESVJF Q1RPUlkgKi8KKyAgICAiU3ludGF4OiBGVFAgVkRJUkVDVE9SWSBbIGZpbGVzcGVjIF0iLAorICAg ICIgIEFza3MgdGhlIHNlcnZlciB0byBzZW5kIGEgZGlyZWN0b3J5IGxpc3Rpbmcgb2YgdGhlIGZp bGVzIHRoYXQgbWF0Y2giLAorICAgICIgIHRoZSBnaXZlbiBmaWxlc3BlYywgb3IgaWYgbm9uZSBp cyBnaXZlbiwgYWxsIHRoZSBmaWxlcyBpbiBpdHMgY3VycmVudCIsCisgICAgIiAgZGlyZWN0b3J5 LiAgVkRJUkVDVE9SWSBpcyBuZWVkZWQgZm9yIGdldHRpbmcgdmVyYm9zZSBkaXJlY3RvcnkiLAor ICAgICIgIGxpc3RpbmdzIGZyb20gY2VydGFpbiBGVFAgc2VydmVycywgc3VjaCBhcyBvbiBUT1BT LTIwLiAgVHJ5IGl0IGlmIiwKKyAgICAiICBGVFAgRElSRUNUT1JZIGxpc3RzIG9ubHkgZmlsZW5h bWVzIHdpdGhvdXQgZGV0YWlscy4iLAorICAgICIiCit9Oworc3RhdGljIGNoYXIgKiBmaHNfZmVh W10gPSB7ICAgICAgICAgICAgIC8qIEZFQVRVUkVTICovCisgICAgIlN5bnRheDogRlRQIEZFQVRV UkVTIiwKKyAgICAiICBBc2tzIHRoZSBGVFAgc2VydmVyIHRvIGxpc3QgaXRzIHNwZWNpYWwgZmVh dHVyZXMuICBNb3N0IEZUUCBzZXJ2ZXJzIiwKKyAgICAiICBkbyBub3QgcmVjb2duaXplIHRoaXMg Y29tbWFuZC4iLAorICAgICIiCit9Oworc3RhdGljIGNoYXIgKiBmaHNfbWdlW10gPSB7ICAgICAg ICAgICAgIC8qIE1HRVQgKi8KKyAgICAiU3ludGF4OiBbIEZUUCBdIE1HRVQgWyBvcHRpb25zIF0g ZmlsZXNwZWMgWyBmaWxlc3BlYyBbIGZpbGVzcGVjIC4uLiBdIF0iLAorICAgICIgIERvd25sb2Fk IGEgc2luZ2xlIGZpbGUgb3IgbXVsdGlwbGUgZmlsZXMuICBBc2tzIHRoZSBGVFAgc2VydmVyIHRv IHNlbmQiLAorICAgICIgIHRoZSBnaXZlbiBmaWxlIG9yIGZpbGVzLiAgQWxzbyBzZWUgRlRQIEdF VC4gIE9wdGlvbmFsIHN3aXRjaGVzOiIsCisgICAgIiAiLAorICAgICIgIC9BUy1OQU1FOnRleHQi LAorICAgICIgICAgTmFtZSB1bmRlciB3aGljaCB0byBzdG9yZSBpbmNvbWluZyBmaWxlLiIsCisg ICAgIiAgICBQYXR0ZXJuIHJlcXVpcmVkIGZvciBmb3IgbXVsdGlwbGUgZmlsZXMuIiwKKyAgICAi ICAvQklOQVJZIiwgICAgICAgICAgICAgICAgICAgICAgICAvKiAvSU1BR0UgKi8KKyAgICAiICAg IEZvcmNlIGJpbmFyeSBtb2RlLiAgU3lub255bTogL0lNQUdFLiIsCisgICAgIiAgL0NPTExJU0lP Tjp7QkFDS1VQLFJFTkFNRSxVUERBVEUsRElTQ0FSRCxBUFBFTkQsT1ZFUldSSVRFfSIsCisgICAi ICAgIFdoYXQgdG8gZG8gaWYgYW4gaW5jb21pbmcgZmlsZSBoYXMgdGhlIHNhbWUgbmFtZSBhcyBh biBleGlzdGluZyBmaWxlLiIsCisKKyNpZmRlZiBQVVRQSVBFCisgICAgIiAgL0NPTU1BTkQiLAor ICAgICIgICAgU3BlY2lmaWVzIHRoYXQgdGhlIGFzLW5hbWUgaXMgYSBjb21tYW5kIHRvIHdoaWNo IHRoZSBpbmNvbWluZyBmaWxlIiwKKyAgICAiICAgIGlzIHRvIGJlIHBpcGVkIGFzIHN0YW5kYXJk IGlucHV0LiIsCisjZW5kaWYgLyogUFVUUElQRSAqLworCisjaWZkZWYgRE9VUERBVEUKKyAgICAi ICAvREFURVMtRElGRkVSIiwKKyAgICAiICAgIERvd25sb2FkIG9ubHkgdGhvc2UgZmlsZXMgd2hv c2UgbW9kaWZpY2F0aW9uIGRhdGUtdGltZXMgZGlmZmVyIGZyb20iLAorICAgICIgICAgdGhvc2Ug b2YgdGhlIGNvcnJlc3BvbmRpbmcgbG9jYWwgZmlsZXMsIG9yIHRoYXQgZG8gbm90IGFscmVhZHki LAorICAgICIgICAgZXhpc3Qgb24gdGhlIGxvY2FsIGNvbXB1dGVyLiIsCisjZW5kaWYgLyogRE9V UERBVEUgKi8KKworICAgICIgIC9ERUxFVEUiLAorICAgICIgICAgU3BlY2lmaWVzIHRoYXQgZWFj aCBmaWxlIGlzIHRvIGJlIGRlbGV0ZWQgZnJvbSB0aGUgc2VydmVyIGFmdGVyLCIsCisgICAgIiAg ICBhbmQgb25seSBpZiwgaXQgaXMgc3VjY2Vzc2Z1bGx5IGRvd25sb2FkZWQuIiwKKyAgICAiICAv RVJST1ItQUNUSU9OOntQUk9DRUVELFFVSVR9IiwKKyAgICAiICAgIFdoZW4gZG93bmxvYWRpbmcg YSBncm91cCBvZiBmaWxlcywgd2hhdCB0byBkbyB1cG9uIGZhaWx1cmUgdG8iLAorICAgICIgICAg dHJhbnNmZXIgYSBmaWxlOiBxdWl0IG9yIHByb2NlZWQgdG8gdGhlIG5leHQgb25lLiIsCisgICAg IiAgL0VYQ0VQVDpwYXR0ZXJuIiwKKyAgICAiICAgIEV4Y2VwdGlvbiBsaXN0OiBkb24ndCBkb3du bG9hZCBhbnkgZmlsZXMgdGhhdCBtYXRjaCB0aGlzIHBhdHRlcm4uIiwKKyAgICAiICAgIFNlZSBI RUxQIFdJTERDQVJEIGZvciBwYXR0ZXJuIHN5bnRheC4iLAorICAgICIgIC9GSUxFTkFNRVM6e0FV VE9NQVRJQyxDT05WRVJURUQsTElURVJBTH0iLAorICAgICIgICAgV2hldGhlciB0byBjb252ZXJ0 IGluY29taW5nIGZpbGVuYW1lcyB0byBsb2NhbCBzeW50YXguIiwKKyNpZmRlZiBQSVBFU0VORAor I2lmbmRlZiBOT1NQTAorICAgICIgIC9GSUxURVI6Y29tbWFuZCIsCisgICAgIiAgICBQYXNzIGlu Y29taW5nIGZpbGVzIHRocm91Z2ggdGhlIGdpdmVuIGNvbW1hbmQuIiwKKyNlbmRpZiAvKiBOT1NQ TCAqLworI2VuZGlmIC8qIFBJUEVTRU5EICovCisgICAgIiAgL0xBUkdFUi1USEFOOm51bWJlciIs CisgICAgIiAgICBPbmx5IGRvd25sb2FkIGZpbGVzIHRoYXQgYXJlIGxhcmdlciB0aGFuIHRoZSBn aXZlbiBudW1iZXIgb2YgYnl0ZXMuIiwKKyAgICAiICAvTElTVEZJTEU6ZmlsZW5hbWUiLAorICAg ICIgICAgT2J0YWluIHRoZSBsaXN0IG9mIGZpbGVzIHRvIGRvd25sb2FkIGZyb20gdGhlIGdpdmVu IGZpbGUuIiwKKyNpZm5kZWYgTk9DU0VUUworICAgICIgIC9MT0NBTC1DSEFSQUNURVItU0VUOm5h bWUiLAorICAgICIgICAgV2hlbiBkb3dubG9hZGluZyBpbiB0ZXh0IG1vZGUgYW5kIGNoYXJhY3Rl ci1zZXQgY29udmVyc2lvbiBpcyIsCisgICAgIiAgICBkZXNpcmVkLCB0aGlzIHNwZWNpZmllcyB0 aGUgdGFyZ2V0IHNldC4iLAorI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKyAgICAiICAvTUFUQ0g6cGF0 dGVybiIsCisgICAgIiAgICBTcGVjaWZpZXMgYSBwYXR0ZXJuIHRvIGJlIHVzZWQgdG8gc2VsZWN0 IGZpbGVuYW1lcyBsb2NhbGx5IGZyb20gdGhlIiwKKyAgICAiICAgIHNlcnZlcidzIGxpc3QuIiwK KyAgICAiICAvTUxTRCIsCisgICAgIiAgICBGb3JjZXMgc2VuZGluZyBvZiBNTFNEIChyYXRoZXIg dGhhbiBOTFNUKSB0byBnZXQgdGhlIGZpbGUgbGlzdC4iLAorI2lmZGVmIENLX1RNUERJUgorICAg ICIgIC9NT1ZFLVRPOmRpcmVjdG9yeSIsCisgICAgIiAgICBFYWNoIGZpbGUgdGhhdCBpcyBkb3du bG9hZGVkIGlzIHRvIGJlIG1vdmVkIHRvIHRoZSBnaXZlbiBsb2NhbCIsCisgICAgIiAgICBkaXJl Y3RvcnkgaW1tZWRpYXRlbHkgYWZ0ZXIsIGFuZCBvbmx5IGlmLCBpdCBoYXMgYmVlbiByZWNlaXZl ZCIsCisgICAgIiAgICBzdWNjZXNzZnVsbHkuIiwKKyNlbmRpZiAvKiBDS19UTVBESVIgKi8KKyAg ICAiICAvTkFNRUxJU1Q6ZmlsZW5hbWUiLAorICAgICIgICAgSW5zdGVhZCBvZiBkb3dubG9hZGlu ZyB0aGUgZmlsZXMsIHN0b3JlcyB0aGUgbGlzdCBvZiBmaWxlcyB0aGF0IiwKKyAgICAiICAgIHdv dWxkIGJlIGRvd25sb2FkZWQgaW4gdGhlIGdpdmVuIGxvY2FsIGZpbGUsIG9uZSBmaWxlbmFtZSBw ZXIgbGluZS4iLAorICAgICIgIC9OTFNUIiwKKyAgICAiICAgIEZvcmNlcyBzZW5kaW5nIG9mIE5M U1QgKHJhdGhlciB0aGFuIE1MU0QpIHRvIGdldCB0aGUgZmlsZSBsaXN0LiIsCisgICAgIiAgL05P QkFDS1VQRklMRVMiLAorICAgICIgICAgRG9uJ3QgZG93bmxvYWQgYW55IGZpbGVzIHdob3NlIG5h bWVzIGVuZCB3aXRoIC5+PG51bWJlcj5+LiIsCisgICAgIiAgL05PRE9URklMRVMiLAorICAgICIg ICAgRG9uJ3QgZG93bmxvYWQgYW55IGZpbGVzIHdob3NlIG5hbWVzIGJlZ2luIHdpdGggcGVyaW9k ICguKS4iLAorICAgICIgIC9RVUlFVCIsCisgICAgIiAgICBTdXBwcmVzcyB0aGUgZmlsZS10cmFu c2ZlciBkaXNwbGF5LiIsCisjaWZkZWYgRlRQX1JFU1RBUlQKKyAgICAiICAvUkVDT1ZFUiIsICAg ICAgICAgICAgICAgICAgICAgICAvKiAvUkVTVEFSVCAqLworICAgICIgICAgUmVzdW1lIGEgZG93 bmxvYWQgdGhhdCB3YXMgcHJldmlvdXNseSBpbnRlcnJ1cHRlZCBmcm9tIHRoZSBwb2ludCBvZiIs CisgICAgIiAgICBmYWlsdXJlLiAgV29ya3Mgb25seSBpbiBiaW5hcnkgbW9kZS4gIE5vdCBzdXBw b3J0ZWQgYnkgYWxsIHNlcnZlcnMuIiwKKyAgICAiICAgIFN5bm9ueW06IC9SRVNUQVJULiIsCisj ZW5kaWYgLyogRlRQX1JFU1RBUlQgKi8KKyNpZmRlZiBSRUNVUlNJVkUKKyAgICAiICAvUkVDVVJT SVZFIiwgICAgICAgICAgICAgICAgICAgICAvKiAvU1VCRElSRUNUT1JJRVMgKi8KKyAgICAiICAg IENyZWF0ZSBzdWJkaXJlY3RvcmllcyBhdXRvbWF0aWNhbGx5IGlmIHRoZSBzZXJ2ZXIgc2VuZHMg ZmlsZXMiLAorICAgICIgICAgcmVjdXJzaXZlbHkgYW5kIGluY2x1ZGVzIHBhdGhuYW1lcyAobW9z dCBkb24ndCkuIiwKKyNlbmRpZiAvKiBSRUNVUlNJVkUgKi8KKyAgICAiICAvUkVOQU1FLVRPOnRl eHQiLAorICAgICIgICAgRWFjaCBmaWxlIHRoYXQgaXMgZG93bmxvYWRlZCBpcyB0byBiZSByZW5h bWVkIGFzIGluZGljYXRlZCBqdXN0LCIsCisgICAgIiAgICBhZnRlciwgYW5kIG9ubHkgaWYsIGl0 IGhhcyBhcnJpdmVkIHN1Y2Nlc3NmdWxseS4iLAorI2lmbmRlZiBOT0NTRVRTCisgICAgIiAgL1NF UlZFUi1DSEFSQUNURVItU0VUOm5hbWUiLAorICAgICIgICAgV2hlbiBkb3dubG9hZGluZyBpbiB0 ZXh0IG1vZGUgYW5kIGNoYXJhY3Rlci1zZXQgY29udmVyc2lvbiBpcyBkZXNpcmVkIgorLCAgICIg ICAgdGhpcyBzcGVjaWZpZXMgdGhlIG9yaWdpbmFsIGZpbGUncyBjaGFyYWN0ZXIgc2V0IG9uIHRo ZSBzZXJ2ZXIuIiwKKyNlbmRpZiAvKiBOT0NTRVRTICovCisgICAgIiAgL1NFUlZFUi1SRU5BTUU6 dGV4dCIsCisgICAgIiAgICBFYWNoIHNlcnZlciBzb3VyY2UgZmlsZSBpcyB0byBiZSByZW5hbWVk IG9uIHRoZSBzZXJ2ZXIgYXMgaW5kaWNhdGVkIiwKKyAgICAiICAgIGltbWVkaWF0ZWx5IGFmdGVy LCBidXQgb25seSBpZiwgaXQgaGFzIGFycml2ZWQgc3VjY2Vzc2Z1bGx5LiIsCisgICAgIiAgL1NN QUxMRVItVEhBTjpudW1iZXIiLAorICAgICIgICAgRG93bmxvYWQgb25seSB0aG9zZSBmaWxlcyBz bWFsbGVyIHRoYW4gdGhlIGdpdmVuIG51bWJlciBvZiBieXRlcy4iLAorICAgICIgIC9URVhUIiwg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC9BU0NJSSAqLworICAgICIgICAgRm9yY2UgdGV4 dCBtb2RlLiAgU3lub255bTogL0FTQ0lJLiIsCisgICAgIiAgL1RFTkVYIiwKKyAgICAiICAgIEZv cmNlIFRFTkVYIChUT1BTLTIwKSBtb2RlIChzZWUgSEVMUCBTRVQgRlRQIFRZUEUpLiIsCisjaWZu ZGVmIE5PQ1NFVFMKKyAgICAiICAvVFJBTlNQQVJFTlQiLAorICAgICIgICAgV2hlbiBkb3dubG9h ZGluZyBpbiB0ZXh0IG1vZGUsIGRvIG5vdCBjb252ZXJ0IGNocmFjdGVyLXNldHMuIiwKKyNlbmRp ZiAvKiBOT0NTRVRTICovCisgICAgIiAgL1RPLVNDUkVFTiIsCisgICAgIiAgICBUaGUgZG93bmxv YWRlZCBmaWxlIGlzIHRvIGJlIGRpc3BsYXllZCBvbiB0aGUgc2NyZWVuLiIsCisjaWZkZWYgRE9V UERBVEUKKyAgICAiICAvVVBEQVRFIiwKKyAgICAiICAgIEVxdWl2YWxlbnQgdG8gL0NPTExJU0lP TjpVUERBVEUuICBEb3dubG9hZCBvbmx5IHRob3NlIGZpbGVzIHRoYXQgYXJlIiwKKyAgICAiICAg IG5ld2VyIHRoYW4gdGhhbiB0aGVpciBsb2NhbCBjb3VudGVycGFydHMsIG9yIHRoYXQgZG8gbm90 IGV4aXN0IG9uIiwKKyAgICAiICAgIHRoZSBsb2NhbCBjb21wdXRlci4iLAorI2VuZGlmIC8qIERP VVBEQVRFICovCisgICAgIiIKK307CitzdGF0aWMgY2hhciAqIGZoc19obHBbXSA9IHsgICAgICAg ICAgICAgLyogSEVMUCAqLworICAgICJTeW50YXg6IEZUUCBIRUxQIFsgY29tbWFuZCBbIHN1YmNv bW1hbmQuLi4gXSBdIiwKKyAgICAiICBBc2tzIHRoZSBGVFAgc2VydmVyIGZvciBoZWxwIGFib3V0 IHRoZSBnaXZlbiBjb21tYW5kLiAgRmlyc3QgdXNlIiwKKyAgICAiICBGVFAgSEVMUCBieSBpdHNl bGYgdG8gZ2V0IGEgbGlzdCBvZiBjb21tYW5kcywgdGhlbiB1c2UgSEVMUCBGVFAgeHh4IiwKKyAg ICAiICB0byBnZXQgaGVscCBmb3IgY29tbWFuZCBcInh4eFwiLiAgU3lub255bXM6IFJFTU9URSBI RUxQLCBSSEVMUC4iLAorICAgICIiCit9Oworc3RhdGljIGNoYXIgKiBmaHNfaWRsW10gPSB7ICAg ICAgICAgICAgIC8qIElETEUgKi8KKyAgICAiU3ludGF4OiBGVFAgSURMRSBbIG51bWJlciBdIiwK KyAgICAiICBJZiBnaXZlbiB3aXRob3V0IGEgbnVtYmVyLCB0aGlzIGFza3MgdGhlIEZUUCBzZXJ2 ZXIgdG8gdGVsbCBpdHMiLAorICAgICIgIGN1cnJlbnQgaWRsZS10aW1lIGxpbWl0LiAgSWYgZ2l2 ZW4gd2l0aCBhIG51bWJlciwgaXQgYXNrcyB0aGUgc2VydmVyIiwKKyAgICAiICB0byBjaGFuZ2Ug aXRzIGlkbGUtdGltZSBsaW1pdCB0byB0aGUgZ2l2ZW4gbnVtYmVyIG9mIHNlY29uZHMuIiwKKyAg ICAiIgorfTsKK3N0YXRpYyBjaGFyICogZmhzX3VzcltdID0geyAgICAgICAgICAgICAvKiBVU0VS LCBMT0dJTiAqLworICAgICJTeW50YXg6IEZUUCBVU0VSIHVzZXJuYW1lIFsgcGFzc3dvcmQgWyBh Y2NvdW50IF0gXSIsCisgICAgIiAgTG9nIGluIHRvIHRoZSBGVFAgc2VydmVyLiAgVG8gYmUgdXNl ZCB3aGVuIGNvbm5lY3RlZCBidXQgbm90IHlldCIsCisgICAgIiAgbG9nZ2VkIGluLCBlLmcuIHdo ZW4gU0VUIEZUUCBBVVRPTE9HSU4gaXMgT0ZGIG9yIGF1dG9sb2dpbiBmYWlsZWQuIiwKKyAgICAi ICBJZiB5b3Ugb21pdCB0aGUgcGFzc3dvcmQsIGFuZCBvbmUgaXMgcmVxdWlyZWQgYnkgdGhlIHNl cnZlciwgeW91IGFyZSIsCisgICAgIiAgcHJvbXB0ZWQgZm9yIGl0LiAgSWYgeW91IG9taXQgdGhl IGFjY291bnQsIG5vIGFjY291bnQgaXMgc2VudC4iLAorICAgICIgIFN5bm9ueW06IEZUUCBMT0dJ Ti4iLAorICAgICIiCit9Oworc3RhdGljIGNoYXIgKiBmaHNfZ2V0W10gPSB7ICAgICAgICAgICAg IC8qIEdFVCAqLworICAgICJTeW50YXg6IFsgRlRQIF0gR0VUIFsgb3B0aW9ucyBdIGZpbGVuYW1l IFsgYXMtbmFtZSBdIiwKKyAgICAiICBEb3dubG9hZCBhIHNpbmdsZSBmaWxlLiAgQXNrcyB0aGUg RlRQIHNlcnZlciB0byBzZW5kIHRoZSBnaXZlbiBmaWxlLiIsCisgICAgIiAgVGhlIG9wdGlvbmFs IGFzLW5hbWUgaXMgdGhlIG5hbWUgdG8gc3RvcmUgaXQgdW5kZXIgd2hlbiBpdCBhcnJpdmVzOyIs CisgICAgIiAgaWYgb21pdHRlZCwgdGhlIGZpbGUgaXMgc3RvcmVkIHdpdGggdGhlIG5hbWUgaXQg YXJyaXZlZCB3aXRoLCBhcyIsCisgICAgIiAgbW9kaWZpZWQgYWNjb3JkaW5nIHRvIHRoZSBGVFAg RklMRU5BTUVTIHNldHRpbmcgb3IgL0ZJTEVOQU1FUzogc3dpdGNoIiwKKyAgICAiICB2YWx1ZS4g IEFzaWRlIGZyb20gdGhlIGZpbGUgbGlzdCBhbmQgYXMtbmFtZSwgc3ludGF4IGFuZCBvcHRpb25z IGFyZSIsCisgICAgIiAgdGhlIHNhbWUgYXMgZm9yIEZUUCBNR0VULCB3aGljaCBpcyB1c2VkIGZv ciBkb3dubG9hZGluZyBtdWx0aXBsZSBmaWxlcy4iCissICAgIiIKK307CitzdGF0aWMgY2hhciAq IGZoc19ta2RbXSA9IHsgICAgICAgICAgICAgLyogTUtESVIgKi8KKyAgICAiU3ludGF4OiBGVFAg TUtESVIgZGlyZWN0b3J5IiwKKyAgICAiICBBc2tzIHRoZSBGVFAgc2VydmVyIHRvIGNyZWF0ZSBh IGRpcmVjdG9yeSB3aXRoIHRoZSBnaXZlbiBuYW1lLCIsCisgICAgIiAgd2hpY2ggbXVzdCBiZSBp biB0aGUgc3ludGF4IG9mIHRoZSBzZXJ2ZXIncyBmaWxlIHN5c3RlbS4gIFN5bm9ueW1zOiIsCisg ICAgIiAgUkVNT1RFIE1LRElSLCBSTUtESVIuIiwKKyAgICAiIgorfTsKK3N0YXRpYyBjaGFyICog ZmhzX21vZFtdID0geyAgICAgICAgICAgICAvKiBNT0RUSU1FICovCisgICAgIlN5bnRheDogRlRQ IE1PRFRJTUUgZmlsZW5hbWUiLAorICAgICIgIEFza3MgdGhlIEZUUCBzZXJ2ZXIgdG8gc2VuZCB0 aGUgbW9kaWZpY2F0aW9uIHRpbWUgb2YgdGhlIGdpdmVuIGZpbGUsIiwKKyAgICAiICB0byBiZSBk aXNwbGF5ZWQgb24gdGhlIHNjcmVlbi4gIFRoZSBkYXRlLXRpbWUgZm9ybWF0IGlzIGFsbCBudW1l cmljOiIsCisgICAgIiAgeXl5eW1tZGRoaG1tc3N4eHguLi4gKHdoZXJlIHh4eC4uLiBpcyAwIG9y IG1vcmUgZGlnaXRzIGluZGljYXRpbmciLAorICAgICIgIGZyYWN0aW9ucyBvZiBzZWNvbmRzKS4i LAorICAgICIiCit9Oworc3RhdGljIGNoYXIgKiBmaHNfbXB1W10gPSB7ICAgICAgICAgICAgIC8q IE1QVVQgKi8KKyAgICAiU3ludGF4OiBbIEZUUCBdIE1QVVQgWyBzd2l0Y2hlcyBdIGZpbGVzcGVj IFsgZmlsZXNwZWMgWyBmaWxlc3BlYyAuLi4gXSBdIiwKKyAgICAiICBVcGxvYWRzIGZpbGVzLiAg U2VuZHMgdGhlIGdpdmVuIGZpbGUgb3IgZmlsZXMgdG8gdGhlIEZUUCBzZXJ2ZXIuIiwKKyAgICAi ICBBbHNvIHNlZSBGVFAgUFVULiAgT3B0aW9uYWwgc3dpdGNoZXMgYXJlOiIsCisgICAgIiAiLAor ICAgICIgIC9BRlRFUjpkYXRlLXRpbWUiLAorICAgICIgICAgVXBsb2FkcyBvbmx5IHRob3NlIGZp bGVzIG5ld2VyIHRoYW4gdGhlIGdpdmVuIGRhdGUtdGltZS4iLAorICAgICIgICAgSEVMUCBEQVRF IGZvciBpbmZvIGFib3V0IGRhdGUtdGltZSBmb3JtYXRzLiAgU3lub255bTogL1NJTkNFLiIsCisj aWZkZWYgUFVUQVJSQVkKKyAgICAiICAvQVJSQVk6YXJyYXktZGVzaWduYXRvciIsCisgICAgIiAg ICBUZWxscyBLZXJtaXQgdG8gdXBsb2FkIHRoZSBjb250ZW50cyBvZiB0aGUgZ2l2ZW4gYXJyYXks IHJhdGhlciB0aGFuIiwKKyAgICAiICAgIGEgZmlsZS4iLAorI2VuZGlmIC8qIFBVVEFSUkFZICov CisgICAgIiAgL0FTLU5BTUU6dGV4dCIsCisgICAgIiAgICBOYW1lIHVuZGVyIHdoaWNoIHRvIHNl bmQgZmlsZXMuIiwKKyAgICAiICAgIFBhdHRlcm4gcmVxdWlyZWQgZm9yIGZvciBtdWx0aXBsZSBm aWxlcy4iLAorICAgICIgIC9CRUZPUkU6ZGF0ZS10aW1lIiwKKyAgICAiICAgIFVwbG9hZCBvbmx5 IHRob3NlIGZpbGVzIG9sZGVyIHRoYW4gdGhlIGdpdmVuIGRhdGUtdGltZS4iLAorICAgICIgIC9C SU5BUlkiLAorICAgICIgICAgRm9yY2UgYmluYXJ5IG1vZGUuICBTeW5vbnltOiAvSU1BR0UuIiwK KyNpZmRlZiBQVVRQSVBFCisgICAgIiAgL0NPTU1BTkQiLAorICAgICIgICAgU3BlY2lmaWVzIHRo YXQgdGhlIGZpbGVzcGVjIGlzIGEgY29tbWFuZCB3aG9zZSBzdGFuZGFyZCBvdXRwdXQgaXMiLAor ICAgICIgICAgdG8gYmUgc2VudC4iLAorI2VuZGlmIC8qIFBVVFBJUEUgKi8KKworI2lmZGVmIENP TU1FTlQKKyNpZmRlZiBET1VQREFURQorICAgICIgIC9EQVRFUy1ESUZGRVIiLAorICAgICIgICAg VXBsb2FkIG9ubHkgdGhvc2UgZmlsZXMgd2hvc2UgbW9kaWZpY2F0aW9uIGRhdGUtdGltZXMgZGlm ZmVyIGZyb20iLAorICAgICIgICAgdGhvc2Ugb24gdGhlIHNlcnZlciwgb3IgdGhhdCBkb24ndCBl eGlzdCBvbiB0aGUgc2VydmVyIGF0IGFsbC4iLAorI2VuZGlmIC8qIERPVVBEQVRFICovCisjZW5k aWYgLyogQ09NTUVOVCAqLworCisgICAgIiAgL0RFTEVURSIsCisgICAgIiAgICBTcGVjaWZpZXMg dGhhdCBlYWNoIHNvdXJjZSBmaWxlIGlzIHRvIGJlIGRlbGV0ZWQgYWZ0ZXIsIGFuZCBvbmx5IGlm LCIsCisgICAgIiAgICBpdCBpcyBzdWNjZXNzZnVsbHkgdXBsb2FkZWQuIiwKKyAgICAiICAvRE9U RklMRVMiLAorICAgICIgICAgSW5jbHVkZSBmaWxlcyB3aG9zZSBuYW1lcyBiZWdpbiB3aXRoIHBl cmlvZCAoLikuIiwKKyAgICAiICAvRVJST1ItQUNUSU9OOntQUk9DRUVELFFVSVR9IiwKKyAgICAi ICAgIFdoZW4gdXBsb2FkaW5nIGEgZ3JvdXAgb2YgZmlsZXMsIHdoYXQgdG8gZG8gdXBvbiBmYWls dXJlIHRvIiwKKyAgICAiICAgIHRyYW5zZmVyIGEgZmlsZTogcXVpdCBvciBwcm9jZWVkIHRvIHRo ZSBuZXh0IG9uZS4iLAorICAgICIgIC9FWENFUFQ6cGF0dGVybiIsCisgICAgIiAgICBFeGNlcHRp b24gbGlzdDogZG9uJ3QgdXBsb2FkIGFueSBmaWxlcyB0aGF0IG1hdGNoIHRoaXMgcGF0dGVybi4i LAorICAgICIgICAgU2VlIEhFTFAgV0lMRENBUkQgZm9yIHBhdHRlcm4gc3ludGF4LiIsCisgICAg IiAgL0ZJTEVOQU1FUzp7QVVUT01BVElDLENPTlZFUlRFRCxMSVRFUkFMfSIsCisgICAgIiAgICBX aGV0aGVyIHRvIGNvbnZlcnQgb3V0Ym91bmQgZmlsZW5hbWVzIHRvIGNvbW1vbiBzeW50YXguIiwK KyNpZmRlZiBQSVBFU0VORAorI2lmbmRlZiBOT1NQTAorICAgICIgIC9GSUxURVI6Y29tbWFuZCIs CisgICAgIiAgICBQYXNzIG91dGJvdW5kIGZpbGVzIHRocm91Z2ggdGhlIGdpdmVuIGNvbW1hbmQu IiwKKyNlbmRpZiAvKiBOT1NQTCAqLworI2VuZGlmIC8qIFBJUEVTRU5EICovCisjaWZkZWYgQ0tT WU1MSU5LCisgICAgIiAgL0ZPTExPV0lOS1MiLAorICAgICIgICAgU2VuZCBmaWxlcyB0aGF0IGFy ZSBwb2ludGVkIHRvIGJ5IHN5bWJvbGljIGxpbmtzLiIsCisgICAgIiAgL05PRk9MTE9XSU5LUyIs CisgICAgIiAgICBTa2lwIG92ZXIgc3ltYm9saWMgbGlua3MgKGRlZmF1bHQpLiIsCisjZW5kaWYg LyogQ0tTWU1MSU5LICovCisgICAgIiAgL0xBUkdFUi1USEFOOm51bWJlciIsCisgICAgIiAgICBP bmx5IHVwbG9hZCBmaWxlcyB0aGF0IGFyZSBsYXJnZXIgdGhhbiB0aGUgZ2l2ZW4gbnVtYmVyIG9m IGJ5dGVzLiIsCisgICAgIiAgL0xJU1RGSUxFOmZpbGVuYW1lIiwKKyAgICAiICAgIE9idGFpbiB0 aGUgbGlzdCBvZiBmaWxlcyB0byB1cGxvYWQgZnJvbSB0aGUgZ2l2ZW4gZmlsZS4iLAorI2lmbmRl ZiBOT0NTRVRTCisgICAgIiAgL0xPQ0FMLUNIQVJBQ1RFUi1TRVQ6bmFtZSIsCisgICAgIiAgICBX aGVuIHVwbG9hZGluZyBpbiB0ZXh0IG1vZGUgYW5kIGNoYXJhY3Rlci1zZXQgY29udmVyc2lvbiBp cyIsCisgICAgIiAgICBkZXNpcmVkLCB0aGlzIHNwZWNpZmllcyB0aGUgc291cmNlLWZpbGUgY2hh cmFjdGVyIHNldC4iLAorI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKyNpZmRlZiBDS19UTVBESVIKKyAg ICAiICAvTU9WRS1UTzpkaXJlY3RvcnkiLAorICAgICIgICAgRWFjaCBzb3VyY2UgZmlsZSB0aGF0 IGlzIHVwbG9hZGVkIGlzIHRvIGJlIG1vdmVkIHRvIHRoZSBnaXZlbiBsb2NhbCIsCisgICAgIiAg ICBkaXJlY3Rvcnkgd2hlbiwgYW5kIG9ubHkgaWYsIHRoZSB0cmFuc2ZlciBpcyBzdWNjZXNzZnVs LiIsCisjZW5kaWYgLyogQ0tfVE1QRElSICovCisgICAgIiAgL05PQkFDS1VQRklMRVMiLAorICAg ICIgICAgRG9uJ3QgdXBsb2FkIGFueSBmaWxlcyB3aG9zZSBuYW1lcyBlbmQgd2l0aCAufjxudW1i ZXI+fi4iLAorI2lmZGVmIFVOSVhPUk9TSworICAgICIgIC9OT0RPVEZJTEVTIiwKKyAgICAiICAg IERvbid0IHVwbG9hZCBhbnkgZmlsZXMgd2hvc2UgbmFtZXMgYmVnaW4gd2l0aCBwZXJpb2QgKC4p LiIsCisjZW5kaWYgLyogVU5JWE9ST1NLICovCisgICAgIiAgL05PVC1BRlRFUjpkYXRlLXRpbWUi LAorICAgICIgICAgVXBsb2FkIG9ubHkgZmlsZXMgdGhhdCBhcmUgbm90IG5ld2VyIHRoYW4gdGhl IGdpdmVuIGRhdGUtdGltZSIsCisgICAgIiAgL05PVC1CRUZPUkU6ZGF0ZS10aW1lIiwKKyAgICAi ICAgIFVwbG9hZCBvbmx5IGZpbGVzIHRoYXQgYXJlIG5vdCBvbGRlciB0aGFuIHRoZSBnaXZlbiBk YXRlLXRpbWUiLAorI2lmZGVmIFVOSVgKKyAgICAiICAvUEVSTUlTU0lPTlMiLAorICAgICIgICAg QXNrIHRoZSBzZXJ2ZXIgdG8gc2V0IHRoZSBwZXJtaXNzaW9ucyBvZiBlYWNoIGZpbGUgaXQgcmVj ZWl2ZXMiLAorICAgICIgICAgYWNjb3JkaW5nIHRvIHRoZSBzb3VyY2UgZmlsZSdzIHBlcm1pc3Np b25zLiIsCisjZW5kaWYgLyogVU5JWCAqLworICAgICIgIC9RVUlFVCIsCisgICAgIiAgICBTdXBw cmVzcyB0aGUgZmlsZS10cmFuc2ZlciBkaXNwbGF5LiIsCisjaWZkZWYgRlRQX1JFU1RBUlQKKyAg ICAiICAvUkVDT1ZFUiIsCisgICAgIiAgICBSZXN1bWUgYW4gdXBsb2FkIHRoYXQgd2FzIHByZXZp b3VzbHkgaW50ZXJydXB0ZWQgZnJvbSB0aGUgcG9pbnQgb2YiLAorICAgICIgICAgZmFpbHVyZS4g IFN5bm9ueW06IC9SRVNUQVJULiIsCisjZW5kaWYgLyogRlRQX1JFU1RBUlQgKi8KKyNpZmRlZiBS RUNVUlNJVkUKKyAgICAiICAvUkVDVVJTSVZFIiwKKyAgICAiICAgIFNlbmQgZmlsZXMgZnJvbSB0 aGUgZ2l2ZW4gZGlyZWN0b3J5IGFuZCBhbGwgdGhlIGRpcmVjdG9yaWVzIGJlbmVhdGgiLAorICAg ICIgICAgaXQuICBTeW5vbnltOiAvU1VCRElSRUNUT1JJRVMuIiwKKyNlbmRpZiAvKiBSRUNVUlNJ VkUgKi8KKyAgICAiICAvUkVOQU1FLVRPOnRleHQiLAorICAgICIgICAgRWFjaCBzb3VyY2UgZmls ZSB0aGF0IGlzIHVwbG9hZGVkIGlzIHRvIGJlIHJlbmFtZWQgb24gdGhlIGxvY2FsIiwKKyAgICAi ICAgIGxvY2FsIGNvbXB1dGVyIGFzIGluZGljYXRlZCB3aGVuIGFuZCBvbmx5IGlmLCB0aGUgdHJh bnNmZXIgY29tcGxldGVzIiwKKyAgICAiICAgIHN1Y2Nlc3NmdWxseS4iLAorI2lmbmRlZiBOT0NT RVRTCisgICAgIiAgL1NFUlZFUi1DSEFSQUNURVItU0VUOm5hbWUiLAorICAgICIgICAgV2hlbiB1 cGxvYWRpbmcgaW4gdGV4dCBtb2RlIGFuZCBjaGFyYWN0ZXItc2V0IGNvbnZlcnNpb24gaXMgZGVz aXJlZCwiLAorICAgICIgICAgdGhpcyBzcGVjaWZpZXMgdGhlIGNoYXJhY3RlciBzZXQgdG8gd2hp Y2ggdGhlIGZpbGUgc2hvdWxkIGJlIiwKKyAgICAiICAgIGNvbnZlcnRlZCBmb3Igc3RvcmFnZSBv biB0aGUgc2VydmVyLiIsCisjZW5kaWYgLyogTk9DU0VUUyAqLworICAgICIgIC9TRVJWRVItUkVO QU1FOnRleHQiLAorICAgICIgICAgRWFjaCBmaWxlIHRoYXQgaXMgdXBsb2FkZWQgaXMgdG8gYmUg cmVuYW1lZCBhcyBpbmRpY2F0ZWQgb24gdGhlIiwKKyAgICAiICAgIHNlcnZlciBhZnRlciwgYW5k IG9ubHkgaWYsIGlmIGFycml2ZXMgc3VjY2Vzc2Z1bGx5LiIsCisgICAgIiAgL1NJTVVMQVRFIiwK KyAgICAiICAgIFNob3cgd2hpY2ggZmlsZXMgd291bGQgYmUgc2VudCB3aXRob3V0IGFjdHVhbGx5 IHNlbmRpbmcgdGhlbS4iLAorICAgICIgIC9TTUFMTEVSLVRIQU46bnVtYmVyIiwKKyAgICAiICAg IFVwbG9hZCBvbmx5IHRob3NlIGZpbGVzIHNtYWxsZXIgdGhhbiB0aGUgZ2l2ZW4gbnVtYmVyIG9m IGJ5dGVzLiIsCisgICAgIiAgL1RFWFQiLAorICAgICIgICAgRm9yY2UgdGV4dCBtb2RlLiAgU3lu b255bTogL0FTQ0lJLiIsCisgICAgIiAgL1RFTkVYIiwKKyAgICAiICAgIEZvcmNlIFRFTkVYIChU T1BTLTIwKSBtb2RlIChzZWUgSEVMUCBTRVQgRlRQIFRZUEUpLiIsCisjaWZuZGVmIE5PQ1NFVFMK KyAgICAiICAvVFJBTlNQQVJFTlQiLAorICAgICIgICAgV2hlbiB1cGxvYWRpbmcgaW4gdGV4dCBt b2RlLCBkbyBub3QgY29udmVydCBjaHJhY3Rlci1zZXRzLiIsCisjZW5kaWYgLyogTk9DU0VUUyAq LworICAgICIgIC9UWVBFOntURVhULEJJTkFSWX0iLAorICAgICIgICAgVXBsb2FkIG9ubHkgZmls ZXMgb2YgdGhlIGdpdmVuIHR5cGUuIiwKKyNpZmRlZiBET1VQREFURQorICAgICIgIC9VUERBVEUi LAorICAgICIgICAgSWYgYSBmaWxlIG9mIHRoZSBzYW1lIG5hbWUgZXhpc3RzIG9uIHRoZSBzZXJ2 ZXIsIHVwbG9hZCBvbmx5IGlmIiwKKyAgICAiICAgIHRoZSBsb2NhbCBmaWxlIGlzIG5ld2VyLiIs CisjZW5kaWYgLyogRE9VUERBVEUgKi8KKyAgICAiICAvVU5JUVVFLVNFUlZFUi1OQU1FUyIsCisg ICAgIiAgICBBc2sgdGhlIHNlcnZlciB0byBjb21wdXRlIG5ldyBuYW1lcyBmb3IgYW55IGluY29t aW5nIGZpbGUgdGhhdCBoYXMiLAorICAgICIgICAgdGhlIHNhbWUgbmFtZSBhcyBhbiBleGlzdGlu ZyBmaWxlLiIsCisgICAgIiIKK307CitzdGF0aWMgY2hhciAqIGZoc19vcG5bXSA9IHsgICAgICAg ICAgICAgLyogT1BFTiAqLworI2lmZGVmIENLX1NTTAorICAgICJTeW50YXg6IEZUUCBbIE9QRU4g XSBbIHsgL1NTTCwgL1RMUyB9IF0gaG9zdG5hbWUgWyBwb3J0IF0gWyBzd2l0Y2hlcyBdIiwKKyAg ICAiICBPcGVucyBhIGNvbm5lY3Rpb24gdG8gdGhlIEZUUCBzZXJ2ZXIgb24gdGhlIGdpdmVuIGhv c3QuICBUaGUgZGVmYXVsdCIsCisgICAgIiAgVENQIHBvcnQgaXMgMjEgKDk5MCBpZiBTU0wvVExT IGlzIHVzZWQpLCBidXQgYSBkaWZmZXJlbnQgcG9ydCBudW1iZXIiLAorICAgICIgIGNhbiBiZSBz dXBwbGllZCBpZiBuZWNlc3NhcnkuICBPcHRpb25hbCBzd2l0Y2hlcyBhcmU6IiwKKyNlbHNlIC8q IENLX1NTTCAqLworICAgICJTeW50YXg6IEZUUCBbIE9QRU4gXSBob3N0bmFtZSBbIHBvcnQgXSBb IHN3aXRjaGVzIF0iLAorICAgICIgIE9wZW5zIGEgY29ubmVjdGlvbiB0byB0aGUgRlRQIHNlcnZl ciBvbiB0aGUgZ2l2ZW4gaG9zdC4gIFRoZSBkZWZhdWx0IiwKKyAgICAiICBUQ1AgcG9ydCBpcyAy MSwgYnV0IGEgZGlmZmVyZW50IHBvcnQgbnVtYmVyIGNhbiBiZSBzdXBwbGllZCBpZiIsCisgICAg IiAgbmVjZXNzYXJ5LiAgT3B0aW9uYWwgc3dpdGNoZXMgYXJlOiIsCisjZW5kaWYgLyogQ0tfU1NM ICovCisgICAgIiAiLAorICAgICIgIC9BTk9OWU1PVVMiLAorICAgICIgICAgTG9ncyB5b3UgaW4g YW5vbnltb3VzbHkuIiwKKyAgICAiICAvVVNFUjp0ZXh0IiwKKyAgICAiICAgIFN1cHBsaWVzIHRo ZSBnaXZlbiB0ZXh0IGFzIHlvdXIgdXNlcm5hbWUuIiwKKyAgICAiICAvUEFTU1dPUkQ6dGV4dCIs CisgICAgIiAgICBTdXBwbGllcyB0aGUgZ2l2ZW4gdGV4dCBhcyB5b3VyIHBhc3N3b3JkLiAgSWYg eW91IGluY2x1ZGUgYSB1c2VybmFtZSIsCisgICAgIiAgICBidXQgb21pdCB0aGlzIHN3aXRjaCBh bmQgdGhlIHNlcnZlciByZXF1aXJlcyBhIHBhc3N3b3JkLCB5b3UgYXJlIiwKKyAgICAiICAgIHBy b21wdGVkIGZvciBpdC4iLAorICAgICIgIC9BQ0NPVU5UOnRleHQiLAorICAgICIgICAgU3VwcGxp ZXMgdGhlIGdpdmVuIHRleHQgYXMgeW91ciBhY2NvdW50LCBpZiByZXF1aXJlZCBieSB0aGUgc2Vy dmVyLiIsCisgICAgIiAgL0FDVElWRSIsCisgICAgIiAgICBGb3JjZXMgYW4gYWN0aXZlIChyYXRo ZXIgdGhhbiBwYXNzaXZlKSBjb25uZWN0aW9uLiIsCisgICAgIiAgL1BBU1NJVkUiLAorICAgICIg ICAgRm9yY2VzIGEgcGFzc2l2ZSAocmF0aGVyIHRoYW4gYWN0aXZlKSBjb25uZWN0aW9uLiIsCisg ICAgIiAgL05PSU5JVCIsCisgICAgIiAgICBJbmhpYml0cyBzZW5kaW5nIGluaXRpYWwgUkVTVCwg U1RSVSwgYW5kIE1PREUgY29tbWFuZHMsIHdoaWNoIGFyZSIsCisgICAgIiAgICB3ZWxsLWtub3du IHN0YW5kYXJkIGNvbW1hbmRzLCBidXQgdG8gd2hpY2ggc29tZSBzZXJ2ZXJzIHJlYWN0IGJhZGx5 LiIsCisgICAgIiAgL05PTE9HSU4iLAorICAgICIgICAgSW5oaWJpdHMgYXV0b2xvZ2luIGZvciB0 aGlzIGNvbm5lY3Rpb24gb25seS4iLAorICAgICIiCit9Oworc3RhdGljIGNoYXIgKiBmaHNfb3B0 W10gPSB7ICAgICAgICAgICAgIC8qIE9QVFMsIE9QVElPTlMgKi8KKyAgICAiU3ludGF4OiBGVFAg T1BUSU9OUyIsCisgICAgIiAgQXNrcyB0aGUgRlRQIHNlcnZlciB0byBsaXN0IGl0cyBjdXJyZW50 IG9wdGlvbnMuICBBZHZhbmNlZCwgbmV3LCIsCisgICAgIiAgbm90IHN1cHBvcnRlZCBieSBtb3N0 IEZUUCBzZXJ2ZXJzLiIsCisgICAgIiIKK307CitzdGF0aWMgY2hhciAqIGZoc19wdXRbXSA9IHsg ICAgICAgICAgICAgLyogUFVULCBTRU5EICovCisgICAgIlN5bnRheDogWyBGVFAgXSBQVVQgWyBz d2l0Y2hlcyBdIGZpbGVzcGVjIFsgYXMtbmFtZSBdIiwKKyAgICAiICBMaWtlIEZUUCBNUFVULCBi dXQgb25seSBvbmUgZmlsZXNwZWMgaXMgYWxsb3dlZCwgYW5kIGlmIGl0IGlzIGZvbGxvd2VkIiwK KyAgICAiICBieSBhbiBhZGRpdGlvbmFsIGZpZWxkLCB0aGlzIGlzIGludGVycHJldGVkIGFzIHRo ZSBuYW1lIHVuZGVyIHdoaWNoIiwKKyAgICAiICB0byBzZW5kIHRoZSBmaWxlIG9yIGZpbGVzLiAg U2VlIEhFTFAgRlRQIE1QVVQuIiwKKyAgICAiIgorfTsKK3N0YXRpYyBjaGFyICogZmhzX3JlcHV0 W10gPSB7CQkvKiBSRVBVVCwgUkVTRU5EICovCisgICAgIlN5bnRheDogWyBGVFAgXSBSRVBVVCBb IHN3aXRjaGVzIF0gZmlsZXNwZWMgWyBhcy1uYW1lIF0iLAorICAgICIgIFN5bm9ueW0gZm9yIEZU UCBQVVQgL1JFQ09WRVIuICBSZWNvdmVycyBhbiBpbnRlcnJ1cHRlZCBiaW5hcnktbW9kZSIsCisg ICAgIiAgdXBsb2FkIGZyb20gdGhlIHBvaW50IG9mIGZhaWx1cmUgaWYgdGhlIEZUUCBzZXJ2ZXIg c3VwcG9ydHMgcmVjb3ZlcnkuIiwKKyAgICAiICBTeW5vbnltOiBbIEZUUCBdIFJFU0VORC4gIEZv ciBkZXRhaWxzIHNlZSBIRUxQIEZUUCBNUFVULiIsCisgICAgIiIKK307CitzdGF0aWMgY2hhciAq IGZoc19wd2RbXSA9IHsgICAgICAgICAgICAgLyogUFdEICovCisgICAgIlN5bnRheDogRlRQIFBX RCIsCisgICAgIiAgQXNrcyB0aGUgRlRQIHNlcnZlciB0byByZXZlYWwgaXRzIGN1cnJlbnQgd29y a2luZyBkaXJlY3RvcnkuIiwKKyAgICAiICBTeW5vbnltczogUkVNT1RFIFBXRCwgUlBXRC4iLAor ICAgICIiCit9Oworc3RhdGljIGNoYXIgKiBmaHNfcXVvW10gPSB7ICAgICAgICAgICAgIC8qIFFV T1RFICovCisgICAgIlN5bnRheDogRlRQIFFVT1RFIHRleHQiLAorICAgICIgIFNlbmRzIGFuIEZU UCBwcm90b2NvbCBjb21tYW5kIHRvIHRoZSBGVFAgc2VydmVyLiAgVXNlIHRoaXMgY29tbWFuZCIs CisgICAgIiAgZm9yIHNlbmRpbmcgY29tbWFuZHMgdGhhdCBLZXJtaXQgbWlnaHQgbm90IHN1cHBv cnQuIiwKKyAgICAiIgorfTsKK3N0YXRpYyBjaGFyICogZmhzX3JnZVtdID0geyAgICAgICAgICAg ICAvKiBSRUdFVCAqLworICAgICJTeW50YXg6IEZUUCBSRUdFVCIsCisgICAgIiAgU3lub255bSBm b3IgRlRQIEdFVCAvUkVDT1ZFUi4iLAorICAgICIiCit9Oworc3RhdGljIGNoYXIgKiBmaHNfcmVu W10gPSB7ICAgICAgICAgICAgIC8qIFJFTkFNRSAqLworICAgICJTeW50YXg6IEZUUCBSRU5BTUUg bmFtZTEgbmFtZTEiLAorICAgICIgIEFza3MgdGhlIEZUUCBzZXJ2ZXIgdG8gY2hhbmdlIHRoZSBu YW1lIG9mIHRoZSBmaWxlIHdob3NlIG5hbWUgaXMgbmFtZTEiLAorICAgICIgIGFuZCB3aGljaCBy ZXNpZGVzIGluIHRoZSBGVFAgc2VydmVyJ3MgZmlsZSBzeXN0ZW0sIHRvIG5hbWUyLiAgV29ya3Mi LAorICAgICIgIG9ubHkgZm9yIHNpbmdsZSBmaWxlczsgd2lsZGNhcmRzIGFyZSBub3QgYWNjZXB0 ZWQuIiwKKyAgICAiIgorfTsKK3N0YXRpYyBjaGFyICogZmhzX3Jlc1tdID0geyAgICAgICAgICAg ICAvKiBSRVNFVCAqLworICAgICJTeW50YXg6IEZUUCBSRVNFVCIsCisgICAgIiAgQXNrcyB0aGUg c2VydmVyIHRvIGxvZyBvdXQgeW91ciBzZXNzaW9uLCB0ZXJtaW5hdGluZyB5b3VyIGFjY2VzcyIs CisgICAgIiAgcmlnaHRzLCB3aXRob3V0IGNsb3NpbmcgdGhlIGNvbm5lY3Rpb24uIiwKKyAgICAi IgorfTsKK3N0YXRpYyBjaGFyICogZmhzX3JtZFtdID0geyAgICAgICAgICAgICAvKiBSTURJUiAq LworICAgICJTeW50YXg6IEZUUCBSTURJUiBkaXJlY3RvcnkiLAorICAgICIgIEFza3MgdGhlIEZU UCBzZXJ2ZXIgdG8gcmVtb3ZlIHRoZSBkaXJlY3Rvcnkgd2hvc2UgbmFtZSBpcyBnaXZlbi4iLAor ICAgICIgIFRoaXMgdXN1YWxseSByZXF1aXJlcyB0aGUgZGlyZWN0b3J5IHRvIGJlIGVtcHR5LiAg U3lub255bXM6IFJFTU9URSIsCisgICAgIiAgUk1ESVIsIFJSTURJUi4iLAorICAgICIiCit9Owor c3RhdGljIGNoYXIgKiBmaHNfc2l0W10gPSB7ICAgICAgICAgICAgIC8qIFNJVEUgKi8KKyAgICAi U3ludGF4OiBGVFAgU0lURSB0ZXh0IiwKKyAgICAiICBTZW5kcyBhIHNpdGUtc3BlY2lmaWMgY29t bWFuZCB0byB0aGUgRlRQIHNlcnZlci4iLAorICAgICIiCit9Oworc3RhdGljIGNoYXIgKiBmaHNf c2l6W10gPSB7ICAgICAgICAgICAgIC8qIFNJWkUgKi8KKyAgICAiU3ludGF4OiBGVFAgU0laRSBm aWxlbmFtZSIsCisgICAgIiAgQXNrcyB0aGUgRlRQIHNlcnZlciB0byBzZW5kIGEgbnVtZXJpYyBz dHJpbmcgcmVwcmVzZW50aW5nIHRoZSBzaXplIiwKKyAgICAiICBvZiB0aGUgZ2l2ZW4gZmlsZS4i LAorICAgICIiCit9Oworc3RhdGljIGNoYXIgKiBmaHNfc3RhW10gPSB7ICAgICAgICAgICAgIC8q IFNUQVRVUyAqLworICAgICJTeW50YXg6IEZUUCBTVEFUVVMgWyBmaWxlbmFtZSBdIiwKKyAgICAi ICBBc2tzIHRoZSBGVFAgc2VydmVyIHRvIHJlcG9ydCBpdHMgc3RhdHVzLiAgSWYgYSBmaWxlbmFt ZSBpcyBnaXZlbiwiLAorICAgICIgIHRoZSBGVFAgc2VydmVyIHNob3VsZCByZXBvcnQgZGV0YWls cyBhYm91dCB0aGUgZmlsZS4iLAorICAgICIiCit9Oworc3RhdGljIGNoYXIgKiBmaHNfc3lzW10g PSB7ICAgICAgICAgICAgIC8qIFNZU1RFTSAqLworICAgICJTeW50YXg6IEZUUCBTWVNURU0iLAor ICAgICIgIEFza3MgdGhlIEZUUCBzZXJ2ZXIgdG8gcmVwb3J0IGl0cyBvcGVyYXRpbmcgc3lzdGVt IHR5cGUuIiwKKyAgICAiIgorfTsKK3N0YXRpYyBjaGFyICogZmhzX3R5cFtdID0geyAgICAgICAg ICAgICAvKiBUWVBFICovCisgICAgIlN5bnRheDogRlRQIFRZUEUgeyBURVhULCBCSU5BUlksIFRF TkVYIH0iLAorICAgICIgIFB1dHMgdGhlIGNsaWVudCBhbmQgc2VydmVyIGluIHRoZSBpbmRpY2F0 ZWQgdHJhbnNmZXIgbW9kZS4iLAorICAgICIgIEFTQ0lJIGlzIGEgc3lub255bSBmb3IgVEVYVC4g IFRFTkVYIGlzIHVzZWQgb25seSBmb3IgdXBsb2FkaW5nIDgtYml0IiwKKyAgICAiICBiaW5hcnkg ZmlsZXMgdG8gYSAzNi1iaXQgcGxhdGZvcm1zIHN1Y2ggYXMgVEVORVggb3IgVE9QUy0yMCBhbmQv b3IiLAorICAgICIgIGRvd25sb2FkaW5nIGZpbGVzIGZyb20gVEVORVggb3IgVE9QUy0yMCB0aGF0 IGhhdmUgYmVlbiB1cGxvYWRlZCBpbiIsCisgICAgIiAgVEVORVggbW9kZS4iLAorICAgICIiCit9 Oworc3RhdGljIGNoYXIgKiBmaHNfdW1hW10gPSB7ICAgICAgICAgICAgIC8qIFVNQVNLICovCisg ICAgIlN5bnRheDogRlRQIFVNQVNLIG51bWJlciIsCisgICAgIiAgQXNrcyB0aGUgRlRQIHNlcnZl ciB0byBzZXQgaXRzIGZpbGUgY3JlYXRpb24gbW9kZSBtYXNrLiAgQXBwbGllcyIsCisgICAgIiAg b25seSAob3IgbWFpbmx5KSB0byBVTklYLWJhc2VkIEZUUCBzZXJ2ZXJzLiIsCisgICAgIiIKK307 CitzdGF0aWMgY2hhciAqIGZoc19jaGtbXSA9IHsgICAgICAgICAgICAgLyogQ0hFQ0sgKi8KKyAg ICAiU3ludGF4OiBGVFAgQ0hFQ0sgcmVtb3RlLWZpbGVzcGVjIiwKKyAgICAiICBBc2tzIHRoZSBG VFAgc2VydmVyIGlmIHRoZSBnaXZlbiBmaWxlIG9yIGZpbGVzIGV4aXN0LiAgSWYgdGhlIiwKKyAg ICAiICByZW1vdGUtZmlsZXNwZWMgY29udGFpbnMgd2lsZGNhcmRzLCB0aGlzIGNvbW1hbmQgZmFp bHMgaWYgbm8gc2VydmVyIiwKKyAgICAiICBmaWxlcyBtYXRjaCwgYW5kIHN1Y2NlZWRzIGlmIGF0 IGxlYXN0IG9uZSBmaWxlIG1hdGNoZXMuICBJZiB0aGUiLAorICAgICIgIHJlbW90ZS1maWxlc3Bl YyBkb2VzIG5vdCBjb250YWluIHdpbGRjYXJkcywgdGhpcyBjb21tYW5kIHN1Y2NlZWRzIGlmIiwK KyAgICAiICB0aGUgZ2l2ZW4gZmlsZSBleGlzdHMgYW5kIGZhaWxzIGlmIGl0IGRvZXMgbm90LiIs CisgICAgIiIKK307CitzdGF0aWMgY2hhciAqIGZoc19lbmFbXSA9IHsJCS8qIEVOQUJMRSAqLwor ICAgICJTeW50YXg6IEZUUCBFTkFCTEUgeyBBVVRILCBGRUFULCBNRFRNLCBNTFNULCBTSVpFIH0i LAorICAgICIgIEVuYWJsZXMgdGhlIHVzZSBvZiB0aGUgZ2l2ZW4gRlRQIHByb3RvY29sIGNvbW1h bmQgaW4gY2FzZSBpdCBoYXMgYmVlbiIsCisgICAgIiAgZGlzYWJsZWQgKGJ1dCB0aGlzIGlzIG5v IGd1YXJhbnRlZSB0aGF0IHRoZSBGVFAgc2VydmVyIHVuZGVyc3RhbmRzIGl0KS4iCissCisgICAg IiAgVXNlIFNIT1cgRlRQIHRvIHNlZSB3aGljaCBvZiB0aGVzZSBjb21tYW5kcyBpcyBlbmFibGVk IGFuZCBkaXNhYmxlZC4iLAorICAgICIgIEFsc28gc2VlIEZUUCBESVNBQkxFLiIsCisgICAgIiIK K307CitzdGF0aWMgY2hhciAqIGZoc19kaXNbXSA9IHsJCS8qIERJU0FCTEUgKi8KKyAgICAiU3lu dGF4OiBGVFAgRElTQUJMRSB7IEFVVEgsIEZFQVQsIE1EVE0sIE1MU1QsIFNJWkUgfSIsCisgICAg IiAgRGlzYWJsZXMgdGhlIHVzZSBvZiB0aGUgZ2l2ZW4gRlRQIHByb3RvY29sIGNvbW1hbmQuIiwK KyAgICAiICBBbHNvIHNlZSBGVFAgRU5BQkxFLiIsCisgICAgIiIKK307CisKKyNlbmRpZiAvKiBO T0hFTFAgKi8KKworaW50Citkb2Z0cGhscCgpIHsKKyAgICBpbnQgY3g7CisgICAgaWYgKChjeCA9 IGNta2V5KGZ0cGNtZHRhYixuZnRwY21kLCIiLCIiLHh4c3RyaW5nKSkgPCAwKQorICAgICAgaWYg KGN4ICE9IC0zKQorICAgICAgICByZXR1cm4oY3gpOworICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwg MCkKKyAgICAgIHJldHVybih4KTsKKworI2lmZGVmIE5PSEVMUAorICAgIHByaW50ZigiU29ycnks IG5vIGhlbHAgYXZhaWxhYmxlXG4iKTsKKyNlbHNlCisgICAgc3dpdGNoIChjeCkgeworICAgICAg Y2FzZSAtMzoKKyAgICAgICAgcmV0dXJuKGhtc2dhKGZoc19mdHApKTsKKyAgICAgIGNhc2UgRlRQ X0FDQzogICAgICAgICAgICAgICAgICAgICAvKiBBQ0NPVU5UICovCisgICAgICAgIHJldHVybiho bXNnYShmaHNfYWNjKSk7CisgICAgICBjYXNlIEZUUF9BUFA6ICAgICAgICAgICAgICAgICAgICAg LyogQVBQRU5EICovCisgICAgICAgIHJldHVybihobXNnYShmaHNfYXBwKSk7CisgICAgICBjYXNl IEZUUF9DTFM6ICAgICAgICAgICAgICAgICAgICAgLyogQllFLCBDTE9TRSAqLworICAgICAgICBy ZXR1cm4oaG1zZ2EoZmhzX2NscykpOworICAgICAgY2FzZSBGVFBfQ1dEOiAgICAgICAgICAgICAg ICAgICAgIC8qIENELCBDV0QgKi8KKyAgICAgICAgcmV0dXJuKGhtc2dhKGZoc19jd2QpKTsKKyAg ICAgIGNhc2UgRlRQX0dVUDogICAgICAgICAgICAgICAgICAgICAvKiBDRFVQLCBVUCAqLworICAg ICAgICByZXR1cm4oaG1zZ2EoZmhzX2d1cCkpOworICAgICAgY2FzZSBGVFBfQ0hNOiAgICAgICAg ICAgICAgICAgICAgIC8qIENITU9EICovCisgICAgICAgIHJldHVybihobXNnYShmaHNfY2htKSk7 CisgICAgICBjYXNlIEZUUF9NREU6ICAgICAgICAgICAgICAgICAgICAgLyogREVMRVRFLCBNREVM RVRFICovCisgICAgICAgIHJldHVybihobXNnYShmaHNfbWRlKSk7CisgICAgICBjYXNlIEZUUF9E SVI6ICAgICAgICAgICAgICAgICAgICAgLyogRElSRUNUT1JZICovCisgICAgICAgIHJldHVybiho bXNnYShmaHNfZGlyKSk7CisgICAgICBjYXNlIEZUUF9WREk6ICAgICAgICAgICAgICAgICAgICAg LyogVkRJUkVDVE9SWSAqLworICAgICAgICByZXR1cm4oaG1zZ2EoZmhzX3ZkaSkpOworICAgICAg Y2FzZSBGVFBfRkVBOiAgICAgICAgICAgICAgICAgICAgIC8qIEZFQVRVUkVTICovCisgICAgICAg IHJldHVybihobXNnYShmaHNfZmVhKSk7CisgICAgICBjYXNlIEZUUF9HRVQ6ICAgICAgICAgICAg ICAgICAgICAgLyogR0VUICovCisgICAgICAgIHJldHVybihobXNnYShmaHNfZ2V0KSk7CisgICAg ICBjYXNlIEZUUF9ITFA6ICAgICAgICAgICAgICAgICAgICAgLyogSEVMUCAqLworICAgICAgICBy ZXR1cm4oaG1zZ2EoZmhzX2hscCkpOworICAgICAgY2FzZSBGVFBfSURMOiAgICAgICAgICAgICAg ICAgICAgIC8qIElETEUgKi8KKyAgICAgICAgcmV0dXJuKGhtc2dhKGZoc19pZGwpKTsKKyAgICAg IGNhc2UgRlRQX1VTUjogICAgICAgICAgICAgICAgICAgICAvKiBVU0VSLCBMT0dJTiAqLworICAg ICAgICByZXR1cm4oaG1zZ2EoZmhzX3VzcikpOworICAgICAgY2FzZSBGVFBfTUdFOiAgICAgICAg ICAgICAgICAgICAgIC8qIE1HRVQgKi8KKyAgICAgICAgcmV0dXJuKGhtc2dhKGZoc19tZ2UpKTsK KyAgICAgIGNhc2UgRlRQX01LRDogICAgICAgICAgICAgICAgICAgICAvKiBNS0RJUiAqLworICAg ICAgICByZXR1cm4oaG1zZ2EoZmhzX21rZCkpOworICAgICAgY2FzZSBGVFBfTU9EOiAgICAgICAg ICAgICAgICAgICAgIC8qIE1PRFRJTUUgKi8KKyAgICAgICAgcmV0dXJuKGhtc2dhKGZoc19tb2Qp KTsKKyAgICAgIGNhc2UgRlRQX01QVTogICAgICAgICAgICAgICAgICAgICAvKiBNUFVUICovCisg ICAgICAgIHJldHVybihobXNnYShmaHNfbXB1KSk7CisgICAgICBjYXNlIEZUUF9PUE46ICAgICAg ICAgICAgICAgICAgICAgLyogT1BFTiAqLworICAgICAgICByZXR1cm4oaG1zZ2EoZmhzX29wbikp OworICAgICAgY2FzZSBGVFBfT1BUOiAgICAgICAgICAgICAgICAgICAgIC8qIE9QVFMsIE9QVElP TlMgKi8KKyAgICAgICAgcmV0dXJuKGhtc2dhKGZoc19vcHQpKTsKKyAgICAgIGNhc2UgRlRQX1BV VDogICAgICAgICAgICAgICAgICAgICAvKiBQVVQsIFNFTkQgKi8KKyAgICAgICAgcmV0dXJuKGht c2dhKGZoc19wdXQpKTsKKyAgICAgIGNhc2UgRlRQX1JFUDogICAgICAgICAgICAgICAgICAgICAv KiBSRVBVVCwgUkVTRU5EICovCisgICAgICAgIHJldHVybihobXNnYShmaHNfcmVwdXQpKTsKKyAg ICAgIGNhc2UgRlRQX1BXRDogICAgICAgICAgICAgICAgICAgICAvKiBQV0QgKi8KKyAgICAgICAg cmV0dXJuKGhtc2dhKGZoc19wd2QpKTsKKyAgICAgIGNhc2UgRlRQX1FVTzogICAgICAgICAgICAg ICAgICAgICAvKiBRVU9URSAqLworICAgICAgICByZXR1cm4oaG1zZ2EoZmhzX3F1bykpOworICAg ICAgY2FzZSBGVFBfUkdFOiAgICAgICAgICAgICAgICAgICAgIC8qIFJFR0VUICovCisgICAgICAg IHJldHVybihobXNnYShmaHNfcmdlKSk7CisgICAgICBjYXNlIEZUUF9SRU46ICAgICAgICAgICAg ICAgICAgICAgLyogUkVOQU1FICovCisgICAgICAgIHJldHVybihobXNnYShmaHNfcmVuKSk7Cisg ICAgICBjYXNlIEZUUF9SRVM6ICAgICAgICAgICAgICAgICAgICAgLyogUkVTRVQgKi8KKyAgICAg ICAgcmV0dXJuKGhtc2dhKGZoc19yZXMpKTsKKyAgICAgIGNhc2UgRlRQX1JNRDogICAgICAgICAg ICAgICAgICAgICAvKiBSTURJUiAqLworICAgICAgICByZXR1cm4oaG1zZ2EoZmhzX3JtZCkpOwor ICAgICAgY2FzZSBGVFBfU0lUOiAgICAgICAgICAgICAgICAgICAgIC8qIFNJVEUgKi8KKyAgICAg ICAgcmV0dXJuKGhtc2dhKGZoc19zaXQpKTsKKyAgICAgIGNhc2UgRlRQX1NJWjogICAgICAgICAg ICAgICAgICAgICAvKiBTSVpFICovCisgICAgICAgIHJldHVybihobXNnYShmaHNfc2l6KSk7Cisg ICAgICBjYXNlIEZUUF9TVEE6ICAgICAgICAgICAgICAgICAgICAgLyogU1RBVFVTICovCisgICAg ICAgIHJldHVybihobXNnYShmaHNfc3RhKSk7CisgICAgICBjYXNlIEZUUF9TWVM6ICAgICAgICAg ICAgICAgICAgICAgLyogU1lTVEVNICovCisgICAgICAgIHJldHVybihobXNnYShmaHNfc3lzKSk7 CisgICAgICBjYXNlIEZUUF9UWVA6ICAgICAgICAgICAgICAgICAgICAgLyogVFlQRSAqLworICAg ICAgICByZXR1cm4oaG1zZ2EoZmhzX3R5cCkpOworICAgICAgY2FzZSBGVFBfVU1BOiAgICAgICAg ICAgICAgICAgICAgIC8qIFVNQVNLICovCisgICAgICAgIHJldHVybihobXNnYShmaHNfdW1hKSk7 CisgICAgICBjYXNlIEZUUF9DSEs6ICAgICAgICAgICAgICAgICAgICAgLyogQ0hFQ0sgKi8KKyAg ICAgICAgcmV0dXJuKGhtc2dhKGZoc19jaGspKTsKKyAgICAgIGNhc2UgRlRQX0VOQToKKyAgICAg ICAgcmV0dXJuKGhtc2dhKGZoc19lbmEpKTsKKyAgICAgIGNhc2UgRlRQX0RJUzoKKyAgICAgICAg cmV0dXJuKGhtc2dhKGZoc19kaXMpKTsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHByaW50Zigi U29ycnksIGhlbHAgYXZhaWxhYmxlIGZvciB0aGlzIGNvbW1hbmQuXG4iKTsKKyAgICAgICAgYnJl YWs7CisgICAgfQorI2VuZGlmIC8qIE5PSEVMUCAqLworICAgIHJldHVybihzdWNjZXNzID0gMCk7 Cit9CisKK2ludAorZG9zZXRmdHBobHAoKSB7CisgICAgaW50IGN4OworICAgIGlmICgoY3ggPSBj bWtleShmdHBzZXQsbmZ0cHNldCwiIiwiIix4eHN0cmluZykpIDwgMCkKKyAgICAgIGlmIChjeCAh PSAtMykKKyAgICAgICAgcmV0dXJuKGN4KTsKKyAgICBpZiAoY3ggIT0gLTMpCisgICAgICBja3N0 cm5jcHkodG1wYnVmLGF0bWJ1ZixUTVBCVUZTSVopOworICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwg MCkKKyAgICAgIHJldHVybih4KTsKKworI2lmZGVmIE5PSEVMUAorICAgIHByaW50ZigiU29ycnks IG5vIGhlbHAgYXZhaWxhYmxlXG4iKTsKKyNlbHNlCisgICAgc3dpdGNoIChjeCkgeworICAgICAg Y2FzZSAtMzoKKyAgICAgICAgcHJpbnRmKCJcblN5bnRheDogU0VUIEZUUCBwYXJhbWV0ZXIgdmFs dWVcbiIpOworICAgICAgICBwcmludGYoIiAgVHlwZSBcImhlbHAgc2V0IGZ0cCA/XCIgZm9yIGEg bGlzdCBvZiBwYXJhbWV0ZXJzLlxuIik7CisgICAgICAgIHByaW50ZigiICBUeXBlIFwiaGVscCBz ZXQgZnRwIHh4eFwiIGZvciBpbmZvcm1hdGlvbiBhYm91dCBzZXR0aW5nXG4iKTsKKyAgICAgICAg cHJpbnRmKCIgIHBhcmFtZXRlciB4eHguICBUeXBlIFwic2hvdyBmdHBcIiBmb3IgY3VycmVudCB2 YWx1ZXMuXG5cbiIpOworICAgICAgICByZXR1cm4oMCk7CisKKyAgICAgIGNhc2UgRlRTX0JVRzoK KwlwcmludGYoIlxuU3ludGF4OiBTRVQgRlRQIEJVRyA8bmFtZT4ge09OLCBPRkZ9XG4iKTsKKwlw cmludGYoCisJICAgICIgIEFjdGl2YXRlcyBhIHdvcmthcm91bmQgZm9yIHRoZSBuYW1lZCBidWcg aW4gdGhlIEZUUCBzZXJ2ZXIuXG4iKTsKKwlwcmludGYoIiAgVHlwZSBTRVQgRlRQIEJVRyA/IGZv ciBhIGxpc3Qgb2YgbmFtZXMuXG4iKTsKKwlwcmludGYoIiAgRm9yIGVhY2ggYnVnLCB0aGUgZGVm YXVsdCBpcyBPRkZcblxuIik7CisJcmV0dXJuKDApOworCisjaWZkZWYgRlRQX1NFQ1VSSVRZCisg ICAgICBjYXNlIEZUU19BVFA6ICAgICAgICAgICAgICAgICAgICAgLyogImF1dGh0eXBlIiAqLwor ICAgICAgICBwcmludGYoIlxuU3ludGF4OiBTRVQgRlRQIEFVVEhUWVBFIGxpc3RcbiIpOworICAg ICAgICBwcmludGYoIiAgU3BlY2lmaWVzIGFuIG9yZGVyZWQgbGlzdCBvZiBhdXRoZW50aWNhdGlv biBtZXRob2RzIHRvIGJlXG4iCisgICAgICAgICAgICAgICApOworICAgICAgICBwcmludGYoIiAg d2hlbiBGVFAgQVVUT0FVVEhFTlRJQ0FUSU9OIGlzIE9OLiAgVGhlIGRlZmF1bHQgbGlzdCBpczpc biIpOworICAgICAgICBwcmludGYoIiAgR1NTQVBJLUtSQjUsIFNSUCwgS0VSQkVST1NfVjQsIFRM UywgU1NMLlxuXG4iKTsKKyAgICAgICAgcmV0dXJuKDApOworCisgICAgICBjYXNlIEZUU19BVVQ6 ICAgICAgICAgICAgICAgICAgICAgLyogImF1dG9hdXRoZW50aWNhdGlvbiIgKi8KKyAgICAgICAg cHJpbnRmKCJcblN5bnRheDpTRVQgRlRQIEFVVE9BVVRIRU5USUNBVElPTiB7IE9OLCBPRkYgfVxu Iik7CisgICAgICAgIHByaW50ZigiICBUZWxscyB3aGV0aGVyIGF1dGhlbnRpY2F0aW9uIHNob3Vs ZCBiZSBuZWdvdGlhdGVkIGJ5IHRoZVxuIik7CisgICAgICAgIHByaW50ZigiICBGVFAgT1BFTiBj b21tYW5kLiAgRGVmYXVsdCBpcyBPTi5cblxuIik7CisgICAgICAgIGJyZWFrOworCisgICAgICBj YXNlIEZUU19DUlk6ICAgICAgICAgICAgICAgICAgICAgLyogImF1dG9lbmNyeXB0aW9uIiAqLwor ICAgICAgICBwcmludGYoIlxuU0VUIEZUUCBBVVRPRU5DUllQVElPTiB7IE9OLCBPRkYgfVxuIik7 CisgICAgICAgIHByaW50ZigiICBUZWxscyB3aGV0aGVyIGVuY3J5cHRpb24gKHByaXZhY3kpIHNo b3VsZCBiZSBuZWdvdGlhdGVkXG4iKTsKKyAgICAgICAgcHJpbnRmKCIgIGJ5IHRoZSBGVFAgT1BF TiBjb21tYW5kLiAgRGVmYXVsdCBpcyBPTi5cblxuIik7CisgICAgICAgIGJyZWFrOworI2VuZGlm IC8qIEZUUF9TRUNVUklUWSAqLworCisgICAgICBjYXNlIEZUU19MT0c6ICAgICAgICAgICAgICAg ICAgICAgLyogImF1dG9sb2dpbiIgKi8KKyAgICAgICAgcHJpbnRmKCJcblNFVCBGVFAgQVVUT0xP R0lOIHsgT04sIE9GRiB9XG4iKTsKKyAgICAgICAgcHJpbnRmKCIgIFRlbGxzIEtlcm1pdCB3aGV0 aGVyIHRvIHRyeSB0byBsb2cgeW91IGluIGF1dG9tYXRpY2FsbHlcbiIpOworICAgICAgICBwcmlu dGYoIiAgYXMgcGFydCBvZiB0aGUgY29ubmVjdGlvbiBwcm9jZXNzLlxuXG4iKTsKKyAgICAgICAg YnJlYWs7CisKKyAgICAgIGNhc2UgRlRTX0RJUzoKKyAgICAgICAgcHJpbnRmKCJcblNFVCBGVFAg RElTUExBWSB7IEJSSUVGLCBGVUxMU0NSRUVOLCBDUlQsIC4uLiB9XG4iKTsKKwlwcmludGYoIiAg Q2hvb3NlcyB0aGUgZmlsZS10cmFuc2ZlciBkaXNwbGF5IHN0eWxlIGZvciBGVFAuXG4iKTsKKyAg ICAgICAgcHJpbnRmKCIgIExpa2UgU0VUIFRSQU5TRkVSIERJU1BMQVkgYnV0IGFwcGxpZXMgb25s eSB0byBGVFAuXG5cbiIpOworICAgICAgICBicmVhazsKKworI2lmbmRlZiBOT0NTRVRTCisgICAg ICBjYXNlIEZUU19YTEE6ICAgICAgICAgICAgICAgICAgICAgLyogImNoYXJhY3Rlci1zZXQtdHJh bnNsYXRpb24iICovCisgICAgICAgIHByaW50ZigiXG5TRVQgRlRQIENIQVJBQ1RFUi1TRVQtVFJB TlNMQVRJT04geyBPTiwgT0ZGIH1cbiIpOworICAgICAgICBwcmludGYoIiAgV2hldGhlciB0byB0 cmFuc2xhdGUgY2hhcmFjdGVyIHNldHMgd2hlbiB0cmFuc2ZlcnJpbmdcbiIpOworICAgICAgICBw cmludGYoIiAgdGV4dCBmaWxlcyB3aXRoIEZUUC4gIE9GRiBieSBkZWZhdWx0LlxuXG4iKTsKKyAg ICAgICAgYnJlYWs7CisKKyNlbmRpZiAvKiBOT0NTRVRTICovCisgICAgICBjYXNlIEZUU19GTkM6 ICAgICAgICAgICAgICAgICAgICAgLyogImNvbGxpc2lvbiIgKi8KKyAgICAgICAgcHJpbnRmKCJc biIpOworICAgICAgICBwcmludGYoCisiU3ludGF4OiBTRVQgRlRQIENPTExJU0lPTiB7IEJBQ0tV UCxSRU5BTUUsVVBEQVRFLERJU0NBUkQsQVBQRU5ELE9WRVJXUklURSB9XG4iCisgICAgICAgICAg ICAgICApOworICAgICAgICBwcmludGYoIiAgVGVsbHMgd2hhdCBkbyB3aGVuIGFuIGluY29taW5n IGZpbGUgaGFzIHRoZSBzYW1lIG5hbWUgYXNcbiIpOworICAgICAgICBwcmludGYoIiAgYW4gZXhp c3RpbmcgZmlsZSB3aGVuIGRvd25sb2FkaW5nIHdpdGggRlRQLlxuXG4iKTsKKyAgICAgICAgYnJl YWs7CisKKyNpZmRlZiBGVFBfU0VDVVJJVFkKKyAgICAgIGNhc2UgRlRTX0NQTDogICAgICAgICAg ICAgICAgICAgICAvKiAiY29tbWFuZC1wcm90ZWN0aW9uLWxldmVsIiAqLworICAgICAgICBwcmlu dGYoIlxuIik7CisgICAgICAgIHByaW50ZigKKyJTeW50YXg6IFNFVCBGVFAgQ09NTUFORC1QUk9U RUNUSU9OLUxFVkVMIHsgQ0xFQVIsQ09ORklERU5USUFMLFBSSVZBVEUsU0FGRSB9IgorICAgICAg ICAgICAgICAgKTsKKyAgICAgICAgcHJpbnRmKCJcbiIpOworICAgICAgICBwcmludGYoCisiICBU ZWxscyB3aGF0IGxldmVsIG9mIHByb3RlY3Rpb24gaXMgYXBwbGllZCB0byB0aGUgRlRQIGNvbW1h bmQgY2hhbm5lbC5cblxuIik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBGVFNfQ0ZXOiAg ICAgICAgICAgICAgICAgICAgIC8qICJjcmVkZW50aWFsLWZvcndhcmRpbmciICovCisgICAgICAg IHByaW50ZigiXG5TeW50YXg6IFNFVCBGVFAgQ1JFREVOVElBTC1GT1JXQVJESU5HIHsgT04sIE9G RiB9XG4iKTsKKyAgICAgICAgcHJpbnRmKCIgIFRlbGxzIHdoZXRoZXIgZW5kLXVzZXIgY3JlZGVu dGlhbHMgYXJlIHRvIGJlIGZvcndhcmRlZFxuIik7CisgICAgICAgIHByaW50ZigiICB0byB0aGUg c2VydmVyIGlmIHN1cHBvcnRlZCBieSB0aGUgYXV0aGVudGljYXRpb24gbWV0aG9kXG4iKTsKKyAg ICAgICAgcHJpbnRmKCIgIChHU1NBUEktS1JCNSBvbmx5KS5cblxuIik7CisgICAgICAgIGJyZWFr OworICAgICAgY2FzZSBGVFNfRFBMOiAgICAgICAgICAgICAgICAgICAgIC8qICJkYXRhLXByb3Rl Y3Rpb24tbGV2ZWwiICovCisgICAgICAgIHByaW50ZigiXG4iKTsKKyAgICAgICAgcHJpbnRmKAor IlN5bnRheDogU0VUIEZUUCBEQVRBLVBST1RFQ1RJT04tTEVWRUwgeyBDTEVBUixDT05GSURFTlRJ QUwsUFJJVkFURSxTQUZFIH0iCisgICAgICAgICAgICAgICApOworICAgICAgICBwcmludGYoIlxu Iik7CisgICAgICAgIHByaW50ZigKKyIgIFRlbGxzIHdoYXQgbGV2ZWwgb2YgcHJvdGVjdGlvbiBp cyBhcHBsaWVkIHRvIHRoZSBGVFAgZGF0YSBjaGFubmVsLlxuXG4iKTsKKyAgICAgICAgYnJlYWs7 CisjZW5kaWYgLyogRlRQX1NFQ1VSSVRZICovCisKKyAgICAgIGNhc2UgRlRTX0RCRzogICAgICAg ICAgICAgICAgICAgICAvKiAiZGVidWciICovCisgICAgICAgIHByaW50ZigiXG5TeW50YXg6IFNF VCBGVFAgREVCVUcgeyBPTiwgT0ZGIH1cbiIpOworICAgICAgICBwcmludGYoIiAgV2hldGhlciB0 byBwcmludCBGVFAgcHJvdG9jb2wgbWVzc2FnZXMuXG5cbiIpOworICAgICAgICByZXR1cm4oMCk7 CisKKyAgICAgIGNhc2UgRlRTX0VSUjogICAgICAgICAgICAgICAgICAgICAvKiAiZXJyb3ItYWN0 aW9uIiAqLworICAgICAgICBwcmludGYoIlxuU3ludGF4OiBTRVQgRlRQIEVSUk9SLUFDVElPTiB7 IFFVSVQsIFBST0NFRUQgfVxuIik7CisgICAgICAgIHByaW50ZigiICBXaGF0IHRvIGRvIHdoZW4g YW4gZXJyb3Igb2NjdXJzIHdoZW4gdHJhbnNmZXJyaW5nIGEgZ3JvdXBcbiIpCisgICAgICAgICAg OworICAgICAgICBwcmludGYoIiAgb2YgZmlsZXM6IHF1aXQgYW5kIGZhaWwsIG9yIHByb2NlZWQg dG8gdGhlIG5leHQgZmlsZS5cblxuIik7CisgICAgICAgIHJldHVybigwKTsKKworICAgICAgY2Fz ZSBGVFNfQ05WOiAgICAgICAgICAgICAgICAgICAgIC8qICJmaWxlbmFtZXMiICovCisgICAgICAg IHByaW50ZigiXG5TeW50YXg6IFNFVCBGVFAgRklMRU5BTUVTIHsgQVVUTywgQ09OVkVSVEVELCBM SVRFUkFMIH1cbiIpOworICAgICAgICBwcmludGYoIiAgV2hhdCB0byBkbyB3aXRoIGZpbGVuYW1l czogY29udmVydCB0aGVtLCB0YWtlIGFuZCB1c2UgdGhlbVxuIgorICAgICAgICAgICAgICAgKTsK KyAgICAgICAgcHJpbnRmKCIgIGxpdGVyYWxseTsgb3IgY2hvb3NlIHdoYXQgdG8gZG8gYXV0b21h dGljYWxseSBiYXNlZCBvbiB0aGVcbiIKKyAgICAgICAgICAgICAgICk7CisgICAgICAgIHByaW50 ZigiICBPUyB0eXBlIG9mIHRoZSBzZXJ2ZXIuICBUaGUgZGVmYXVsdCBpcyBBVVRPLlxuXG4iKTsK KyAgICAgICAgcmV0dXJuKDApOworCisgICAgICBjYXNlIEZUU19QU1Y6ICAgICAgICAgICAgICAg ICAgICAgLyogInBhc3NpdmUtbW9kZSIgKi8KKyAgICAgICAgcHJpbnRmKCJcblN5bnRheDogU0VU IEZUUCBQQVNTSVZFLU1PREUgeyBPTiwgT0ZGIH1cbiIpOworICAgICAgICBwcmludGYoIiAgV2hl dGhlciB0byB1c2UgcGFzc2l2ZSBtb2RlLCB3aGljaCBoZWxwcyB0byBnZXQgdGhyb3VnaFxuIik7 CisgICAgICAgIHByaW50ZigiICBmaXJld2FsbHMuICBPTiBieSBkZWZhdWx0LlxuXG4iKTsKKyAg ICAgICAgcmV0dXJuKDApOworCisgICAgICBjYXNlIEZUU19QUk06ICAgICAgICAgICAgICAgICAg ICAgLyogInBlcm1pc3Npb25zIiAqLworICAgICAgICBwcmludGYoIlxuU3ludGF4OiBTRVQgRlRQ IFBFUk1JU1NJT05TIHsgQVVUTywgT04sIE9GRiB9XG4iKTsKKyAgICAgICAgcHJpbnRmKCIgIFdo ZXRoZXIgdG8gdHJ5IHRvIHNlbmQgZmlsZSBwZXJtaXNzaW9ucyB3aGVuIHVwbG9hZGluZy5cbiIp OworICAgICAgICBwcmludGYoIiAgT0ZGIGJ5IGRlZmF1bHQuICBBVVRPIG1lYW5zIG9ubHkgaWYg Y2xpZW50IGFuZCBzZXJ2ZXJcbiIpOworICAgICAgICBwcmludGYoIiAgaGF2ZSB0aGUgc2FtZSBP UyB0eXBlLlxuXG4iKTsKKyAgICAgICAgcmV0dXJuKDApOworCisgICAgICBjYXNlIEZUU19UU1Q6 ICAgICAgICAgICAgICAgICAgICAgLyogInByb2dyZXNzLW1lc3NhZ2VzIiAqLworICAgICAgICBw cmludGYoIlxuU3ludGF4OiBTRVQgRlRQIFBST0dSRVNTLU1FU1NBR0VTIHsgT04sIE9GRiB9XG4i KTsKKyAgICAgICAgcHJpbnRmKCIgIFdoZXRoZXIgS2VybWl0IHNob3VsZCBwcmludCBsb2NhbGx5 LWdlbmVyYXRlZCBmZWVkYmFja1xuIik7CisgICAgICAgIHByaW50ZigiICBtZXNzYWdlcyBmb3Ig ZWFjaCBub24tZmlsZS10cmFuc2ZlciBjb21tYW5kLiIpOworICAgICAgICBwcmludGYoIiAgT04g YnkgZGVmYXVsdC5cblxuIik7CisgICAgICAgIHJldHVybigwKTsKKworICAgICAgY2FzZSBGVFNf U1BDOiAgICAgICAgICAgICAgICAgICAgIC8qICJzZW5kLXBvcnQtY29tbWFuZHMiICovCisgICAg ICAgIHByaW50ZigiXG5TeW50YXg6IFNFVCBGVFAgU0VORC1QT1JULUNPTU1BTkRTIHsgT04sIE9G RiB9XG4iKTsKKyAgICAgICAgcHJpbnRmKCIgIFdoZXRoZXIgS2VybWl0IHNob3VsZCBzZW5kIGEg bmV3IFBPUlQgY29tbWFuZCBmb3IgZWFjaCIpOworICAgICAgICBwcmludGYoIiAgdGFzay5cblxu Iik7CisgICAgICAgIHJldHVybigwKTsKKworI2lmbmRlZiBOT0NTRVRTCisgICAgICBjYXNlIEZU U19DU1I6ICAgICAgICAgICAgICAgICAgICAgLyogInNlcnZlci1jaGFyYWN0ZXItc2V0IiAqLwor ICAgICAgICBwcmludGYoIlxuU3ludGF4OiBTRVQgRlRQIFNFUlZFUi1DSEFSQUNURVItU0VUIG5h bWVcbiIpOworICAgICAgICBwcmludGYoIiAgVGhlIG5hbWUgb2YgdGhlIGNoYXJhY3RlciBzZXQg dXNlZCBmb3IgdGV4dCBmaWxlcyBvbiB0aGVcbiIpOworICAgICAgICBwcmludGYoIiAgc2VydmVy LiAgRW50ZXIgYSBuYW1lIG9mICc/JyBmb3IgYSBtZW51LlxuXG4iKTsKKyAgICAgICAgcmV0dXJu KDApOworI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKworICAgICAgY2FzZSBGVFNfU1RPOgkJCS8qICJz ZXJ2ZXItdGltZS1vZmZzZXQgKi8KKwlwcmludGYoCisiXG5TeW50YXg6IFNFVCBGVFAgU0VSVkVS LVRJTUUtT0ZGU0VUICtoaFs6bW1bOnNzXV0gb3IgLWhoWzptbVs6c3NdXVxuIik7CisgICAgICAg IHByaW50ZigKKyIgIFNwZWNpZmllcyBhbiBvZmZzZXQgdG8gYXBwbHkgdG8gdGhlIHNlcnZlcidz IGZpbGUgdGltZXN0YW1wcy5cbiIpOworICAgICAgICBwcmludGYoCisiICBVc2UgdGhpcyB0byBj b3JyZWN0IGZvciBtaXNjb25maWd1cmVkIHNlcnZlciB0aW1lIG9yIHRpbWV6b25lLlxuIik7Cisg ICAgICAgIHByaW50ZigKKyIgIEZvcm1hdDogbXVzdCBiZWdpbiB3aXRoICsgb3IgLSBzaWduLiAg SG91cnMgbXVzdCBiZSBnaXZlbjsgbWludXRlc1xuIik7CisgICAgICAgIHByaW50ZigKKyIgIGFu ZCBzZWNvbmRzIGFyZSBvcHRpb25hbDogKzQgPSArNDowMCA9ICs0OjAwOjAwIChhZGQgNCBob3Vy cykuXG5cbiIpOworICAgICAgICByZXR1cm4oMCk7CisKKyAgICAgIGNhc2UgRlRTX1RZUDogICAg ICAgICAgICAgICAgICAgICAvKiAidHlwZSIgKi8KKyAgICAgICAgcHJpbnRmKCJcblN5bnRheDog U0VUIEZUUCBUWVBFIHsgVEVYVCwgQklOQVJZLCBURU5FWCB9XG4iKTsKKyAgICAgICAgcHJpbnRm KCIgIEVzdGFibGlzaGVzIHRoZSBkZWZhdWx0IHRyYW5zZmVyIG1vZGUuXG4iKTsKKyAgICAgICAg cHJpbnRmKCIgIFRFTkVYIGlzIHVzZWQgZm9yIHVwbG9hZGluZyA4LWJpdCBiaW5hcnkgZmlsZXMg dG8gMzYtYml0XG4iKTsKKyAgICAgICAgcHJpbnRmKCIgIHBsYXRmb3JtcyBzdWNoIGFzIFRFTkVY IGFuZCBUT1BTLTIwIGFuZCBmb3IgZG93bmxvYWRpbmdcbiIpOworICAgICAgICBwcmludGYoIiAg dGhlbSBhZ2Fpbi4gIEFTQ0lJIGlzIGEgc3lub255bSBmb3IgVEVYVC4gIE5vcm1hbGx5IGVhY2hc biIpOworICAgICAgICBwcmludGYoIiAgZmlsZSdzIHR5cGUgaXMgZGV0ZXJtaW5lZCBhdXRvbWF0 aWNhbGx5IGZyb20gaXRzIGNvbnRlbnRzXG4iCisJICAgICAgICk7CisgICAgICAgIHByaW50Zigi ICBvciBpdHMgbmFtZTsgU0VUIEZUUCBUWVBFIGRvZXMgbm90IHByZXZlbnQgdGhhdCwgaXQgb25s eVxuIik7CisgICAgICAgIHByaW50ZigiICB0ZWxscyB3aGljaCBtb2RlIHRvIHVzZSB3aGVuIHRo ZSB0eXBlIGNhbid0IGJlIGRldGVybWluZWRcbiIKKwkgICAgICAgKTsKKyAgICAgICAgcHJpbnRm KCIgIGF1dG9tYXRpY2FsbHkuICBUbyBjb21wbGV0ZWx5IGRpc2FibGUgYXV0b21hdGljIHRyYW5z ZmVyLVxuIgorCSAgICAgICApOworICAgICAgICBwcmludGYoIiAgbW9kZSBzd2l0Y2hpbmcgYW5k IGZvcmNlIGVpdGhlciB0ZXh0IG9yIGJpbmFyeSBtb2RlLCBnaXZlXG4iCisJICAgICAgICk7Cisg ICAgICAgIHByaW50ZigiICB0aGUgdG9wLWxldmVsIGNvbW1hbmQgQVNDSUkgb3IgQklOQVJZLCBh cyBpbiB0cmFkaXRpb25hbFxuIik7CisgICAgICAgIHByaW50ZigiICBGVFAgY2xpZW50cy5cblxu Iik7CisgICAgICAgIHJldHVybigwKTsKKworI2lmZGVmIEZUUF9USU1FT1VUCisgICAgICBjYXNl IEZUU19UTU86CisgICAgICAgcHJpbnRmKCJcblN5bnRheDogU0VUIEZUUCBUSU1FT1VUIG51bWJl ci1vZi1zZWNvbmRzXG4iKTsKKyAgICAgICBwcmludGYoIiAgRXN0YWJsaXNoZXMgYSB0aW1lb3V0 IGZvciBGVFAgdHJhbnNmZXJzLlxuIik7CisgICAgICAgcHJpbnRmKCIgIFRoZSB0aW1lb3V0IGFw cGxpZXMgcGVyIG5ldHdvcmsgcmVhZCBvciB3cml0ZSBvbiB0aGUgZGF0YVxuIik7CisgICAgICAg cHJpbnRmKCIgIGNvbm5lY3Rpb24sIG5vdCB0byB0aGUgd2hvbGUgdHJhbnNmZXIuICBCeSBkZWZh dWx0IHRoZVxuIik7CisgICAgICAgcHJpbnRmKCIgIHRpbWVvdXQgdmFsdWUgaXMgMCwgbWVhbmlu ZyBubyB0aW1lb3V0LiAgVXNlIGEgcG9zaXRpdmVcbiIpOworICAgICAgIHByaW50ZigiICBudW1i ZXIgdG8gZXNjYXBlIGdyYWNlZnVsbHkgZnJvbSBodW5nIGRhdGEgY29ubmVjdGlvbnMgb3JcbiIp OworICAgICAgIHByaW50ZigiICBkaXJlY3RvcnkgbGlzdGluZ3MuXG5cbiIpOworICAgICAgICBy ZXR1cm4oMCk7CisjZW5kaWYJLyogRlRQX1RJTUVPVVQgKi8KKworI2lmZGVmIFBBVFRFUk5TCisg ICAgICBjYXNlIEZUU19HRlQ6CisgICAgICAgIHByaW50ZigiXG5TeW50YXg6IFNFVCBGVFAgR0VU LUZJTEVUWVBFLVNXSVRDSElORyB7IE9OLCBPRkYgfVxuIik7CisgICAgICAgIHByaW50ZigiICBU ZWxscyB3aGV0aGVyIEdFVCBhbmQgTUdFVCBzaG91bGQgYXV0b21hdGljYWxseSBzd2l0Y2hcbiIp OworICAgICAgICBwcmludGYoIiAgdGhlIGFwcHJvcHJpYXRlIGZpbGUgdHlwZSwgVEVYVCwgQklO QVJZLCBvciBURU5FWCwgYnlcbiIpOworICAgICAgICBwcmludGYoIiAgbWF0Y2hpbmcgdGhlIG5h bWUgb2YgZWFjaCBpbmNvbWluZyBmaWxlIHdpdGggaXRzIGxpc3Qgb2ZcbiIpOworICAgICAgICBw cmludGYoIiAgRklMRSBURVhULVBBVFRFUk5TIGFuZCBGSUxFIEJJTkFSWS1QQVRURVJOUy4gIE9O IGJ5XG4iKTsKKyAgICAgICAgcHJpbnRmKCIgIGRlZmF1bHQuICBTSE9XIFBBVFRFUk5TIGRpc3Bs YXlzIHRoZSBjdXJyZW50IHBhdHRlcm5cbiIpOworICAgICAgICBwcmludGYoIiAgbGlzdC4gIEhF TFAgU0VUIEZJTEUgdG8gc2VlIGhvdyB0byBjaGFuZ2UgaXQuXG4iKTsKKyAgICAgICAgYnJlYWs7 CisjZW5kaWYgLyogUEFUVEVSTlMgKi8KKworICAgICAgY2FzZSBGVFNfVVNOOiAgICAgICAgICAg ICAgICAgICAgIC8qICJ1bmlxdWUtc2VydmVyLW5hbWVzIiAqLworICAgICAgICBwcmludGYoIlxu U3ludGF4OiBTRVQgRlRQIFVOSVFVRS1TRVJWRVItTkFNRVMgeyBPTiwgT0ZGIH1cbiIpOworICAg ICAgICBwcmludGYoIiAgVGVsbHMgd2hldGhlciB0byBhc2sgdGhlIHNlcnZlciB0byBjcmVhdGUg dW5pcXVlIG5hbWVzXG4iKTsKKyAgICAgICAgcHJpbnRmKCIgIGZvciBhbnkgdXBsb2FkZWQgZmls ZSB0aGF0IGhhcyB0aGUgc2FtZSBuYW1lIGFzIGFuXG4iKTsKKyAgICAgICAgcHJpbnRmKCIgIGV4 aXN0aW5nIGZpbGUuICBEZWZhdWx0IGlzIE9GRi5cblxuIik7CisgICAgICAgIHJldHVybigwKTsK KworICAgICAgY2FzZSBGVFNfVkJNOiAgICAgICAgICAgICAgICAgICAgIC8qICJ2ZXJib3NlLW1v ZGUiICovCisgICAgICAgIHByaW50ZigiXG5TeW50YXg6IFNFVCBGVFAgVkVSQk9TRS1NT0RFIHsg T04sIE9GRiB9XG4iKTsKKyAgICAgICAgcHJpbnRmKCIgIFdoZXRoZXIgdG8gZGlzcGxheSBhbGwg cmVzcG9uc2VzIGZyb20gdGhlIEZUUCBzZXJ2ZXIuXG4iKTsKKyAgICAgICAgcHJpbnRmKCIgIE9G RiBieSBkZWZhdWx0LlxuXG4iKTsKKyAgICAgICAgcmV0dXJuKDApOworCisgICAgICBjYXNlIEZU U19EQVQ6CisgICAgICAgIHByaW50ZigiXG5TeW50YXg6IFNFVCBGVFAgREFURVMgeyBPTiwgT0ZG IH1cbiIpOworICAgICAgICBwcmludGYoIiAgV2hldGhlciB0byBzZXQgZGF0ZSBvZiBpbmNvbWlu ZyBmaWxlcyBmcm9tIHRoZSBmaWxlIGRhdGVcbiIpOworICAgICAgICBwcmludGYoIiAgb24gdGhl IHNlcnZlci4gIE9OIGJ5IGRlZmF1bHQuICBOb3RlOiB0aGVyZSBpcyBubyB3YXkgdG9cbiIpCisg ICAgICAgICAgOworICAgICAgICBwcmludGYoIiAgc2V0IHRoZSBkYXRlIG9uIGZpbGVzIHVwbG9h ZGVkIHRvIHRoZSBzZXJ2ZXIuICBBbHNvIG5vdGVcbiIpOworCXByaW50ZigiICB0aGF0IG5vdCBh bGwgc2VydmVycyBzdXBwb3J0IHRoaXMgZmVhdHVyZS5cblxuIik7CisgICAgICAgIHJldHVybigw KTsKKworICAgICAgY2FzZSBGVFNfQVBXOgorCXByaW50ZigiXG5TeW50YXg6IFNFVCBGVFAgQU5P TllNT1VTLVBBU1NXT1JEIFsgdGV4dCBdXG4iKTsKKwlwcmludGYoIiAgUGFzc3dvcmQgdG8gc3Vw cGx5IGF1dG9tYXRpY2FsbHkgb24gYW5vbnltb3VzIEZUUFxuIik7CisJcHJpbnRmKCIgIGNvbm5l Y3Rpb25zIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgdXNlckBob3N0LlxuIik7CisJcHJpbnRmKCIg IE9taXQgb3B0aW9uYWwgdGV4dCB0byByZXN0b3JlIGRlZmF1bHQuXG5cbiIpOworCXJldHVybigw KTsKKworICAgICAgZGVmYXVsdDoKKyAgICAgICAgcHJpbnRmKCJTb3JyeSwgaGVscCBub3QgYXZh aWxhYmxlIGZvciBcInNldCBmdHAgJXNcIlxuIix0bXBidWYpOworICAgIH0KKyNlbmRpZiAvKiBO T0hFTFAgKi8KKyAgICByZXR1cm4oMCk7Cit9CisKKyNpZm5kZWYgTF9TRVQKKyNkZWZpbmUgTF9T RVQgMAorI2VuZGlmIC8qIExfU0VUICovCisjaWZuZGVmIExfSU5DUgorI2RlZmluZSBMX0lOQ1Ig MQorI2VuZGlmIC8qIExfSU5DUiAqLworCisjaWZkZWYgRlRQX1NSUAorY2hhciBzcnBfdXNlcltC VUZTSVpdOyAgICAgICAgICAgICAgICAgIC8qIHdoZXJlIGlzIEJVRlNJWiBkZWZpbmVkPyAqLwor Y2hhciAqc3JwX3Bhc3M7CitjaGFyICpzcnBfYWNjdDsKKyNlbmRpZiAvKiBGVFBfU1JQICovCisK K3N0YXRpYyBpbnQga2Vycm9yOyAgICAgICAgICAgICAgICAgICAgICAvKiBOZWVkZWQgZm9yIGFs bCBhdXRoIHR5cGVzICovCisKK3N0YXRpYyBzdHJ1Y3QgICBzb2NrYWRkcl9pbiBoaXNjdGxhZGRy Oworc3RhdGljIHN0cnVjdCAgIHNvY2thZGRyX2luIGhpc2RhdGFhZGRyOworc3RhdGljIHN0cnVj dCAgIHNvY2thZGRyX2luIGRhdGFfYWRkcjsKK3N0YXRpYyBpbnQgICAgICBkYXRhID0gLTE7Citz dGF0aWMgaW50ICAgICAgcHRmbGFnID0gMDsKK3N0YXRpYyBzdHJ1Y3QgICBzb2NrYWRkcl9pbiBt eWN0bGFkZHI7CisKKyNpZmRlZiBDT01NRU5UCisjaWZuZGVmIE9TMgorVUlEX1QgZ2V0dWlkKCk7 CisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogQ09NTUVOVCAqLworCisKK3N0YXRpYyBpbnQg Y3BlbmQgPSAwOyAgICAgICAgICAgICAgICAgICAvKiBObyBwZW5kaW5nIHJlcGxpZXMgKi8KKwor I2lmZGVmIENLX1NTTAorZXh0ZXJuIFNTTCAqc3NsX2Z0cF9jb247CitleHRlcm4gU1NMX0NUWCAq c3NsX2Z0cF9jdHg7CitleHRlcm4gU1NMICpzc2xfZnRwX2RhdGFfY29uOworZXh0ZXJuIGludCBz c2xfZnRwX2FjdGl2ZV9mbGFnOworZXh0ZXJuIGludCBzc2xfZnRwX2RhdGFfYWN0aXZlX2ZsYWc7 CisjZW5kaWYgLyogQ0tfU1NMICovCisKKy8qICBmIHQgcCBjIG0gZCAgLS0gIFNlbmQgYSBjb21t YW5kIHRvIHRoZSBGVFAgc2VydmVyICAqLworLyoKKyAgQ2FsbCB3aXRoOgorICAgIGNoYXIgKiBj bWQ6IFRoZSBjb21tYW5kIHRvIHNlbmQuCisgICAgY2hhciAqIGFyZzogVGhlIGFyZ3VtZW50IChl LmcuIGEgZmlsZW5hbWUpLgorICAgIGludCBsY3M6IFRoZSBsb2NhbCBjaGFyYWN0ZXIgc2V0IGlu ZGV4LgorICAgIGludCByY3M6IFRoZSByZW1vdGUgKHNlcnZlcikgY2hhcmFjdGVyIHNldCBpbmRl eC4KKyAgICBpbnQgdmJtOiBWZXJib3NlIG1vZGU6CisgICAgICAwID0gZm9yY2UgdmVyYm9zaXR5 IG9mZgorICAgICA+MCA9IGZvcmNlIHZlcmJvc2l0eSBvbgorCisgIElmIGFyZyBpcyBnaXZlbiAo bm90IE5VTEwgb3IgZW1wdHkpIGFuZCBsY3MgIT0gcmNzIGFuZCBib3RoIGFyZSA+IC0xLAorICBh bmQgbmVpdGhlciBsY3Mgb3IgcmNzIGlzIFVDUy0yLCB0aGUgYXJnIGlzIHRyYW5zbGF0ZWQgZnJv bSB0aGUgbG9jYWwKKyAgY2hhcmFjdGVyIHNldCB0byB0aGUgcmVtb3RlIG9uZSBiZWZvcmUgc2Vu ZGluZyB0aGUgcmVzdWx0IHRvIHRoZSBzZXJ2ZXIuCisKKyAgIFJldHVybnM6CisgICAgMCBvbiBm YWlsdXJlIHdpdGggZnRwY29kZSA9IC0xCisgICAgPj0gMCBvbiBzdWNjZXNzIChnZXRyZXBseSgp IHJlc3VsdCkgd2l0aCBmdHBjb2RlID0gMC4KKyovCitzdGF0aWMgY2hhciB4Y21kYnVmW1JGTkJV RlNJWl07CisKK3N0YXRpYyBpbnQKK2Z0cGNtZChjbWQsYXJnLGxjcyxyY3MsdmJtKSBjaGFyICog Y21kLCAqIGFyZzsgaW50IGxjcywgcmNzLCB2Ym07IHsKKyAgICBjaGFyICogcyA9IE5VTEw7Cisg ICAgaW50IHIgPSAwLCB4ID0gMCwgZmMgPSAwLCBsZW4gPSAwLCBjbWRsZW4gPSAwLCBxID0gLTE7 CisgICAgc2lnX3Qgb2xkaW50cjsKKworICAgIGlmIChmdHBfZGViKSAgICAgICAgICAgICAgICAg ICAgICAgIC8qIERFQlVHICovCisgICAgICB2Ym0gPSAxOworICAgIGVsc2UgaWYgKHF1aWV0IHx8 IGRweWFjdGl2ZSkgICAgICAgIC8qIFFVSUVUIG9yIEZpbGUgVHJhbnNmZXIgQWN0aXZlICovCisg ICAgICB2Ym0gPSAwOworICAgIGVsc2UgaWYgKHZibSA8IDApICAgICAgICAgICAgICAgICAgIC8q IFZFUkJPU0UgKi8KKyAgICAgIHZibSA9IGZ0cF92Ym07CisKKyAgICBjYW5jZWxmaWxlID0gMDsK KyAgICBpZiAoIWNtZCkgY21kID0gIiI7CisgICAgaWYgKCFhcmcpIGFyZyA9ICIiOworICAgIGNt ZGxlbiA9IChpbnQpc3RybGVuKGNtZCk7CisgICAgbGVuID0gY21kbGVuICsgKGludClzdHJsZW4o YXJnKSArIDE7CisKKyAgICBpZiAoZnRwX2RlYiAvKiAmJiAhZHB5YWN0aXZlICovICkgeworI2lm ZGVmIEZUUF9QUk9YWQorICAgICAgICBpZiAoZnRwX3ByeCkgcHJpbnRmKCIlcyAiLCBmdHBfaG9z dCk7CisjZW5kaWYgLyogRlRQX1BST1hZICovCisgICAgICAgIHByaW50ZigiLS0tPiAiKTsKKyAg ICAgICAgaWYgKCFhbm9ueW1vdXMgJiYgc3RyY21wKCJQQVNTIixjbWQpID09IDApCisgICAgICAg ICAgcHJpbnRmKCJQQVNTIFhYWFgiKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIHByaW50Zigi JXMgJXMiLGNtZCxhcmcpOworICAgICAgICBwcmludGYoIlxuIik7CisgICAgfQorICAgIC8qIGJ6 ZXJvKHhjbWRidWYsUkZOQlVGU0laKTsgKi8KKyAgICBja21ha21zZyh4Y21kYnVmLFJGTkJVRlNJ WiwgY21kLCAqYXJnID8gIiAiIDogIiIsIGFyZywgTlVMTCk7CisKKyNpZmRlZiBERUJVRworICAg IGlmIChkZWJsb2cpIHsKKyAgICAgICAgZGVidWcoRjExMCwiZnRwY21kIGNtZCIsY21kLDApOwor ICAgICAgICBkZWJ1ZyhGMTEwLCJmdHBjbWQgYXJnIixhcmcsMCk7CisgICAgICAgIGRlYnVnKEYx MDEsImZ0cGNtZCBsY3MiLCIiLGxjcyk7CisgICAgICAgIGRlYnVnKEYxMDEsImZ0cGNtZCByY3Mi LCIiLHJjcyk7CisgICAgfQorI2VuZGlmIC8qIERFQlVHICovCisKKyAgICBpZiAoY3NvY2tldCA9 PSAtMSkgeworICAgICAgICBwZXJyb3IoIk5vIGNvbnRyb2wgY29ubmVjdGlvbiBmb3IgY29tbWFu ZCIpOworICAgICAgICBmdHBjb2RlID0gLTE7CisgICAgICAgIHJldHVybigwKTsKKyAgICB9Cisg ICAgaGF2ZXNpZ2ludCA9IDA7CisgICAgb2xkaW50ciA9IHNpZ25hbChTSUdJTlQsIGNtZGNhbmNl bCk7CisKKyNpZm5kZWYgTk9DU0VUUworICAgIGlmICgqYXJnICYmICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIElmIGFuIGFyZyB3YXMgZ2l2ZW4gKi8KKyAgICAgICAgbGNzID4gLTEgJiYgICAg ICAgICAgICAgICAgICAgICAvKiBhbmQgYSBsb2NhbCBjaGFyc2V0ICovCisgICAgICAgIHJjcyA+ IC0xICYmICAgICAgICAgICAgICAgICAgICAgLyogYW5kIGEgcmVtb3RlIGNoYXJzZXQgKi8KKyAg ICAgICAgbGNzICE9IHJjcyAmJiAgICAgICAgICAgICAgICAgICAvKiBhbmQgdGhlIHR3byBhcmUg bm90IHRoZSBzYW1lICovCisgICAgICAgIGxjcyAhPSBGQ19VQ1MyICYmICAgICAgICAgICAgICAg LyogYW5kIG5laXRoZXIgb25lIGlzIFVDUy0yICovCisgICAgICAgIHJjcyAhPSBGQ19VQ1MyICAg ICAgICAgICAgICAgICAgLyogLi4uICovCisgICAgICAgICkgeworICAgICAgICBpbml0eGxhdGUo bGNzLHJjcyk7ICAgICAgICAgICAgIC8qIFRyYW5zbGF0ZSBhcmcgZnJvbSBsY3MgdG8gcmNzICov CisgICAgICAgIHhnbmJwID0gYXJnOyAgICAgICAgICAgICAgICAgICAgLyogR2xvYmFsIHBvaW50 ZXIgdG8gaW5wdXQgc3RyaW5nICovCisgICAgICAgIHJmbnB0ciA9IHJmbmJ1ZjsgICAgICAgICAg ICAgICAgLyogR2xvYmFsIHBvaW50ZXIgdG8gb3V0cHV0IGJ1ZmZlciAqLworCisgICAgICAgIHdo aWxlICgxKSB7CisgICAgICAgICAgICBpZiAoKGMwID0geGduYnl0ZShGQ19VQ1MyLGxjcyxzdHJn ZXRjKSkgPCAwKSBicmVhazsKKyAgICAgICAgICAgIGlmICh4cG5ieXRlKGMwLFRDX1VDUzIscmNz LHN0cnB1dGMpIDwgMCkgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgLyoKKyAgICAgICAgICBX ZSBoYXZlIHRvIGNvcHkgaGVyZSBpbnN0ZWFkIG9mIHRyYW5zbGF0aW5nIGRpcmVjdGx5IGludG8K KyAgICAgICAgICB4Y21kYnVmW10gc28gc3RycHV0YygpIGNhbiBjaGVjayBsZW5ndGguICBBbHRl cm5hdGl2ZWx5IHdlIGNvdWxkCisgICAgICAgICAgd3JpdGUgeWV0IGFub3RoZXIgeHBuYnl0ZSgp IG91dHB1dCBmdW5jdGlvbi4KKyAgICAgICAgKi8KKyAgICAgICAgaWYgKChpbnQpc3RybGVuKHJm bmJ1ZikgPiAoUkZOQlVGU0laIC0gKGNtZGxlbisxKSkpIHsKKyAgICAgICAgICAgIHByaW50Zigi P0ZUUCBjb21tYW5kIHRvbyBsb25nOiAlcyArIGFyZ1xuIixjbWQpOworICAgICAgICAgICAgZnRw Y29kZSA9IC0xOworICAgICAgICAgICAgcmV0dXJuKDApOworICAgICAgICB9CisgICAgICAgIHgg PSBja3N0cm5jcHkoJnhjbWRidWZbY21kbGVuKzFdLCByZm5idWYsIFJGTkJVRlNJWiAtIChjbWRs ZW4rMSkpOworICAgIH0KKyNlbmRpZiAvKiBOT0NTRVRTICovCisKKyAgICBzID0geGNtZGJ1Zjsg ICAgICAgICAgICAgICAgICAgICAgICAvKiBDb21tYW5kIHRvIHNlbmQgdG8gc2VydmVyICovCisK KyNpZmRlZiBERUJVRworICAgIGlmIChkZWJsb2cpIHsJCQkvKiBMb2cgaXQgKi8KKwlpZiAoIWFu b255bW91cyAmJiAhY2tzdHJjbXAocywiUEFTUyAiLDUsMCkpIHsKKwkgICAgLyogQnV0IGRvbid0 IGxvZyBwYXNzd29yZHMgKi8KKwkgICAgZGVidWcoRjExMCwiRlRQIFNFTlQgIiwiUEFTUyBYWFhY IiwwKTsKKwl9IGVsc2UgeworCSAgICBkZWJ1ZyhGMTEwLCJGVFAgU0VOVCAiLHMsMCk7CisJfQor ICAgIH0KKyNlbmRpZiAvKiBERUJVRyAqLworCisjaWZkZWYgQ0tfRU5DUllQVElPTgorICBhZ2Fp bjoKKyNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCisgICAgaWYgKHNjb21tYW5kKHMpID09IDAp IHsgICAgICAgICAgICAgIC8qIFNlbmQgaXQuICovCisgICAgICBzaWduYWwoU0lHSU5ULCBvbGRp bnRyKTsKKyAgICAgIHJldHVybigwKTsKKyAgICB9CisgICAgY3BlbmQgPSAxOworICAgIHggPSAh c3RyY21wKGNtZCwiUVVJVCIpOwkJLyogSXMgaXQgdGhlIFFVSVQgY29tbWFuZD8gKi8KKyAgICBp ZiAoeCkJCQkJLyogSW4gY2FzZSB3ZSdyZSBpbnRlcnJ1cHRlZCAqLworICAgICAgY29ubmVjdGVk ID0gMDsJCQkvKiB3aGlsZSB3YWl0aW5nIGZvciB0aGUgcmVwbHkuLi4gKi8KKworICAgIGZjID0g MDsJCQkJLyogRnVuY3Rpb24gY29kZSBmb3IgZ2V0cmVwbHkoKSAqLworICAgIGlmICghc3RybmNt cChjbWQsIkFVVEggIiw1KQkJLyogTXVzdCBwYXJzZSBBVVRIIHJlcGx5ICovCisjaWZkZWYgRlRQ SE9TVAorCSYmIHN0cm5jbXAoY21kLCAiSE9TVCAiLDUpCisjZW5kaWYgLyogRlRQSE9TVCAqLwor CSkgeworCWZjID0gR1JGX0FVVEg7CisgICAgfSBlbHNlIGlmICghY2tzdHJjbXAoY21kLCJGRUFU IiwtMSwwKSkgeyAvKiBNdXN0IHBhcnNlIEZFQVQgcmVwbHkgKi8KKwlmYyA9IEdSRl9GRUFUOwkJ CS8qIEJ1dCBGRUFUIG5vdCB3aWRlbHkgdW5kZXJzdG9vZCAqLworCWlmICghZnRwX2RlYikJCQkv KiBTbyBzdXBwcmVzcyBlcnJvciBtZXNzYWdlcyAqLworCSAgdmJtID0gOTsKKyAgICB9CisgICAg ciA9IGdldHJlcGx5KHgsCQkJLyogRXhwZWN0IGNvbm5lY3Rpb24gdG8gY2xvc2UgKi8KKwkJIGxj cyxyY3MsCQkvKiBDaGFyc2V0cyAqLworCQkgdmJtLAkJCS8qIFZlcmJvc2l0eSAqLworCQkgZmMJ CQkvKiBGdW5jdGlvbiBjb2RlICovCisJCSApOworICAgIGlmIChxID4gLTEpCisgICAgICBxdWll dCA9IHE7CisKKyNpZmRlZiBDS19FTkNSWVBUSU9OCisgICAgaWYgKGZ0cGNvZGUgPT0gNTMzICYm IGZ0cF9jcGwgPT0gRlBMX1BSVikgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwKKyAgICAgICAg ICAgICAgICJFTkMgY29tbWFuZCBub3Qgc3VwcG9ydGVkIGF0IHNlcnZlcjsgcmV0cnlpbmcgdW5k ZXIgTUlDLi4uXG4iKTsKKyAgICAgICAgZnRwX2NwbCA9IEZQTF9TQUY7CisgICAgICAgIGdvdG8g YWdhaW47CisgICAgfQorI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KKyNpZmRlZiBDT01NRU5U CisgICAgaWYgKGNhbmNlbGZpbGUgJiYgb2xkaW50ciAhPSBTSUdfSUdOKQorICAgICAgKCpvbGRp bnRyKShTSUdJTlQpOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICBzaWduYWwoU0lHSU5ULCBv bGRpbnRyKTsKKyAgICByZXR1cm4ocik7Cit9CisKK3N0YXRpYyBWT0lECitsb3N0cGVlcigpIHsK KyAgICBkZWJ1ZyhGMTAwLCJsb3N0cGVlciIsIiIsMCk7CisgICAgaWYgKGNvbm5lY3RlZCkgewor ICAgICAgICBpZiAoY3NvY2tldCAhPSAtMSkgeworI2lmZGVmIENLX1NTTAorICAgICAgICAgICAg aWYgKHNzbF9mdHBfYWN0aXZlX2ZsYWcpIHsKKyAgICAgICAgICAgICAgICBTU0xfc2h1dGRvd24o c3NsX2Z0cF9jb24pOworICAgICAgICAgICAgICAgIFNTTF9mcmVlKHNzbF9mdHBfY29uKTsKKyAg ICAgICAgICAgICAgICBzc2xfZnRwX3Byb3h5ID0gMDsKKyAgICAgICAgICAgICAgICBzc2xfZnRw X2FjdGl2ZV9mbGFnID0gMDsKKyAgICAgICAgICAgICAgICBzc2xfZnRwX2NvbiA9IE5VTEw7Cisg ICAgICAgICAgICB9CisjZW5kaWYgLyogQ0tfU1NMICovCisjaWZkZWYgVENQSVBMSUIKKyAgICAg ICAgICAgIHNvY2tldF9jbG9zZShjc29ja2V0KTsKKyNlbHNlIC8qIFRDUElQTElCICovCisjaWZk ZWYgVVNFX1NIVVRET1dOCisgICAgICAgICAgICBzaHV0ZG93bihjc29ja2V0LCAxKzEpOworI2Vu ZGlmIC8qIFVTRV9TSFVURE9XTiAqLworICAgICAgICAgICAgY2xvc2UoY3NvY2tldCk7CisjZW5k aWYgLyogVENQSVBMSUIgKi8KKyAgICAgICAgICAgIGNzb2NrZXQgPSAtMTsKKyAgICAgICAgfQor ICAgICAgICBpZiAoZGF0YSAhPSAtMSkgeworI2lmZGVmIENLX1NTTAorICAgICAgICAgICAgaWYg KHNzbF9mdHBfZGF0YV9hY3RpdmVfZmxhZykgeworICAgICAgICAgICAgICAgIFNTTF9zaHV0ZG93 bihzc2xfZnRwX2RhdGFfY29uKTsKKyAgICAgICAgICAgICAgICBTU0xfZnJlZShzc2xfZnRwX2Rh dGFfY29uKTsKKyAgICAgICAgICAgICAgICBzc2xfZnRwX2RhdGFfYWN0aXZlX2ZsYWcgPSAwOwor ICAgICAgICAgICAgICAgIHNzbF9mdHBfZGF0YV9jb24gPSBOVUxMOworICAgICAgICAgICAgfQor I2VuZGlmIC8qIENLX1NTTCAqLworI2lmZGVmIFRDUElQTElCCisgICAgICAgICAgICBzb2NrZXRf Y2xvc2UoZGF0YSk7CisjZWxzZSAvKiBUQ1BJUExJQiAqLworI2lmZGVmIFVTRV9TSFVURE9XTgor ICAgICAgICAgICAgc2h1dGRvd24oZGF0YSwgMSsxKTsKKyNlbmRpZiAvKiBVU0VfU0hVVERPV04g Ki8KKyAgICAgICAgICAgIGNsb3NlKGRhdGEpOworI2VuZGlmIC8qIFRDUElQTElCICovCisgICAg ICAgICAgICBkYXRhID0gLTE7CisgICAgICAgICAgICBnbG9iYWxkaW4gPSAtMTsKKyAgICAgICAg fQorICAgICAgICBjb25uZWN0ZWQgPSAwOworICAgICAgICBhbm9ueW1vdXMgPSAwOworICAgICAg ICBsb2dnZWRpbiA9IDA7CisgICAgICAgIGF1dGhfdHlwZSA9IE5VTEw7CisgICAgICAgIGZ0cF9j cGwgPSBmdHBfZHBsID0gRlBMX0NMUjsKKyNpZmRlZiBDS0xPR0RJQUwKKyAgICAgICAgZnRwbG9n ZW5kKCk7CisjZW5kaWYgLyogQ0tMT0dESUFMICovCisKKyNpZmRlZiBMT0NVUworCWlmIChhdXRv bG9jdXMpCQkJLyogQXVvdG9tYXRpYyBsb2N1cyBzd2l0Y2hpbmcuLi4gKi8KKwkgIHNldGxvY3Vz KDEsMSk7CQkvKiBTd2l0Y2ggbG9jdXMgdG8gbG9jYWwuICovCisjZW5kaWYgLyogTE9DVVMgKi8K KyNpZmRlZiBPUzIKKyAgICAgICAgRGlhbGVyU2VuZChPUFRfS0VSTUlUX0hBTkdVUCwgMCk7Cisj ZW5kaWYgLyogT1MyICovCisgICAgfQorI2lmZGVmIEZUUF9QUk9YWQorICAgIHBzd2l0Y2goMSk7 CisgICAgaWYgKGNvbm5lY3RlZCkgeworICAgICAgICBpZiAoY3NvY2tldCAhPSAtMSkgeworI2lm ZGVmIFRDUElQTElCCisgICAgICAgICAgICBzb2NrZXRfY2xvc2UoY3NvY2tldCk7CisjZWxzZSAv KiBUQ1BJUExJQiAqLworI2lmZGVmIFVTRV9TSFVURE9XTgorICAgICAgICAgICAgc2h1dGRvd24o Y3NvY2tldCwgMSsxKTsKKyNlbmRpZiAvKiBVU0VfU0hVVERPV04gKi8KKyAgICAgICAgICAgIGNs b3NlKGNzb2NrZXQpOworI2VuZGlmIC8qIFRDUElQTElCICovCisgICAgICAgICAgICBjc29ja2V0 ID0gLTE7CisgICAgICAgIH0KKyAgICAgICAgY29ubmVjdGVkID0gMDsKKyAgICAgICAgYW5vbnlt b3VzID0gMDsKKyAgICAgICAgbG9nZ2VkaW4gPSAwOworICAgICAgICBhdXRoX3R5cGUgPSBOVUxM OworICAgICAgICBmdHBfY3BsID0gZnRwX2RwbCA9IEZQTF9DTFI7CisgICAgfQorICAgIHByb3hm bGFnID0gMDsKKyAgICBwc3dpdGNoKDApOworI2VuZGlmIC8qIEZUUF9QUk9YWSAqLworfQorCitp bnQKK2Z0cGlzb3BlbigpIHsKKyAgICByZXR1cm4oY29ubmVjdGVkKTsKK30KKworc3RhdGljIGlu dAorZnRwY2xvc2UoKSB7CisgICAgZXh0ZXJuIGludCBxdWl0dGluZzsKKyAgICBpZiAoIWNvbm5l Y3RlZCkKKyAgICAgIHJldHVybigwKTsKKyAgICBmdHBfeGZlcm1vZGUgPSB4ZmVybW9kZTsKKyAg ICBpZiAoIWZ0cF92Ym0gJiYgIXF1aWV0KQorICAgICAgcHJpbnRsaW5lcyA9IDE7CisgICAgZnRw Y21kKCJRVUlUIixOVUxMLDAsMCxmdHBfdmJtKTsKKyAgICBpZiAoY3NvY2tldCkgeworI2lmZGVm IENLX1NTTAorICAgICAgICBpZiAoc3NsX2Z0cF9hY3RpdmVfZmxhZykgeworICAgICAgICAgICAg U1NMX3NodXRkb3duKHNzbF9mdHBfY29uKTsKKyAgICAgICAgICAgIFNTTF9mcmVlKHNzbF9mdHBf Y29uKTsKKyAgICAgICAgICAgIHNzbF9mdHBfcHJveHkgPSAwOworICAgICAgICAgICAgc3NsX2Z0 cF9hY3RpdmVfZmxhZyA9IDA7CisgICAgICAgICAgICBzc2xfZnRwX2NvbiA9IE5VTEw7CisgICAg ICAgIH0KKyNlbmRpZiAvKiBDS19TU0wgKi8KKyNpZmRlZiBUQ1BJUExJQgorICAgICAgICBzb2Nr ZXRfY2xvc2UoY3NvY2tldCk7CisjZWxzZSAvKiBUQ1BJUExJQiAqLworI2lmZGVmIFVTRV9TSFVU RE9XTgorICAgICAgICBzaHV0ZG93bihjc29ja2V0LCAxKzEpOworI2VuZGlmIC8qIFVTRV9TSFVU RE9XTiAqLworICAgICAgICBjbG9zZShjc29ja2V0KTsKKyNlbmRpZiAvKiBUQ1BJUExJQiAqLwor ICAgIH0KKyAgICBjc29ja2V0ID0gLTE7CisgICAgY29ubmVjdGVkID0gMDsKKyAgICBhbm9ueW1v dXMgPSAwOworICAgIGxvZ2dlZGluID0gMDsKKyAgICBtZHRtb2sgPSAxOworICAgIHNpemVvayA9 IDE7CisgICAgZmVhdG9rID0gMTsKKyAgICBzdG91YXJnID0gMTsKKyAgICB0eXBlc2VudCA9IDA7 CisgICAgZGF0YSA9IC0xOworICAgIGdsb2JhbGRpbiA9IC0xOworI2lmZGVmIEZUUF9QUk9YWQor ICAgIGlmICghcHJveHkpCisgICAgICBtYWNudW0gPSAwOworI2VuZGlmIC8qIEZUUF9QUk9YWSAq LworICAgIGF1dGhfdHlwZSA9IE5VTEw7CisgICAgZnRwX2RwbCA9IEZQTF9DTFI7CisjaWZkZWYg Q0tMT0dESUFMCisgICAgZnRwbG9nZW5kKCk7CisjZW5kaWYgLyogQ0tMT0dESUFMICovCisjaWZk ZWYgTE9DVVMKKyAgICAvKiBVbnByZWZpeGVkIGZpbGUgbWFuYWdlbWVudCBjb21tYW5kcyBhcmUg ZXhlY3V0ZWQgbG9jYWxseSAqLworICAgIGlmIChhdXRvbG9jdXMgJiYgIWZ0cF9jbWRsaW4gJiYg IXF1aXR0aW5nKSB7CisgICAgICAgIHNldGxvY3VzKDEsMSk7CisgICAgfQorI2VuZGlmIC8qIExP Q1VTICovCisjaWZkZWYgT1MyCisgICAgRGlhbGVyU2VuZChPUFRfS0VSTUlUX0hBTkdVUCwgMCk7 CisjZW5kaWYgLyogT1MyICovCisgICAgcmV0dXJuKDApOworfQorCitpbnQKK2Z0cG9wZW4ocmVt b3RlLCBzZXJ2aWNlLCB1c2VfdGxzKSBjaGFyICogcmVtb3RlLCAqIHNlcnZpY2U7IGludCB1c2Vf dGxzOyB7CisgICAgY2hhciAqIGhvc3Q7CisKKyAgICBpZiAoY29ubmVjdGVkKSB7CisgICAgICAg IHByaW50ZigiP0FscmVhZHkgY29ubmVjdGVkIHRvICVzLCB1c2UgRlRQIENMT1NFIGZpcnN0Llxu IiwgZnRwX2hvc3QpOworICAgICAgICBmdHBjb2RlID0gLTE7CisgICAgICAgIHJldHVybigwKTsK KyAgICB9CisjaWZkZWYgRlRQSE9TVAorICAgIGhvc3RjbWQgPSAwOworI2VuZGlmIC8qIEZUUEhP U1QgKi8KKyAgICBhbGlrZSA9IDA7CisgICAgZnRwX3NydnR5cFswXSA9IE5VTDsKKyAgICBpZiAo IXNlcnZpY2UpIHNlcnZpY2UgPSAiIjsKKyAgICBpZiAoISpzZXJ2aWNlKSBzZXJ2aWNlID0gdXNl X3RscyA/ICJmdHBzIiA6ICJmdHAiOworCisgICAgaWYgKCFpc2RpZ2l0KHNlcnZpY2VbMF0pKSB7 CisgICAgICAgIHN0cnVjdCBzZXJ2ZW50ICpkZXN0c3A7CisgICAgICAgIGRlc3RzcCA9IGdldHNl cnZieW5hbWUoc2VydmljZSwgInRjcCIpOworICAgICAgICBpZiAoIWRlc3RzcCkgeworICAgICAg ICAgICAgaWYgKCFja3N0cmNtcChzZXJ2aWNlLCJmdHAiLC0xLDApKSB7CisgICAgICAgICAgICAg ICAgZnRwX3BvcnQgPSAyMTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoIWNrc3RyY21wKHNlcnZp Y2UsImZ0cHMiLC0xLDApKSB7CisgICAgICAgICAgICAgICAgZnRwX3BvcnQgPSA5OTA7CisgICAg ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHByaW50ZigiP0JhZCBwb3J0IG5hbWUg LSBcIiVzXCJcbiIsIHNlcnZpY2UpOworICAgICAgICAgICAgICAgIGZ0cGNvZGUgPSAtMTsKKyAg ICAgICAgICAgICAgICByZXR1cm4oMCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7 CisgICAgICAgICAgICBmdHBfcG9ydCA9IGRlc3RzcC0+c19wb3J0OworICAgICAgICAgICAgZnRw X3BvcnQgPSBudG9ocygodW5zaWduZWQgc2hvcnQpZnRwX3BvcnQpOwkvKiBTTVMgMjAwNy8wMi8x NSAqLworICAgICAgICB9CisgICAgfSBlbHNlCisgICAgICAgIGZ0cF9wb3J0ID0gYXRvaShzZXJ2 aWNlKTsKKyAgICBpZiAoZnRwX3BvcnQgPD0gMCkgeworICAgICAgICBwcmludGYoIj9CYWQgcG9y dCBuYW1lIC0gXCIlc1wiXG4iLCBzZXJ2aWNlKTsKKyAgICAgICAgZnRwY29kZSA9IC0xOworICAg ICAgICByZXR1cm4oMCk7CisgICAgfQorICAgIGhvc3QgPSBmdHBfaG9va3VwKHJlbW90ZSwgZnRw X3BvcnQsIHVzZV90bHMpOworICAgIGlmIChob3N0KSB7CisgICAgICAgIGNrc3RybmNweShmdHBf dXNlcl9ob3N0LHJlbW90ZSxNQVhfRE5TX05BTUVMRU4pOworICAgICAgICBjb25uZWN0ZWQgPSAx OyAgICAgICAgICAgICAgICAgIC8qIFNldCBGVFAgZGVmYXVsdHMgKi8KKyAgICAgICAgZnRwX2Nw bCA9IGZ0cF9kcGwgPSBGUExfQ0xSOworICAgICAgICBjdXJ0eXBlID0gRlRUX0FTQzsgICAgICAg ICAgICAgIC8qIFNlcnZlciB1c2VzIEFTQ0lJIG1vZGUgKi8KKyAgICAgICAgZm9ybSA9IEZPUk1f TjsKKyAgICAgICAgbW9kZSA9IE1PREVfUzsKKyAgICAgICAgc3RydSA9IFNUUlVfRjsKKyAgICAg ICAgc3RyY3B5KGJ5dGVuYW1lLCAiOCIpOworICAgICAgICBieXRlc2l6ZSA9IDg7CisKKyNpZmRl ZiBGVFBfU0VDVVJJVFkKKyAgICAgICAgaWYgKGZ0cF9hdXQpIHsKKyAgICAgICAgICAgIGlmIChm dHBfYXV0aCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKGZ0cF9jcnkgCisjaWZkZWYgT1MyCisg ICAgICAgICAgICAgICAgICAgICAmJiBja19jcnlwdF9pc19pbnN0YWxsZWQoKQorI2VuZGlmIC8q IE9TMiAqLworICAgICAgICAgICAgICAgICAgICAgKSB7CisgICAgICAgICAgICAgICAgICAgIGlm ICghcXVpZXQpCisgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJGVFAgQ29tbWFuZCBjaGFu bmVsIGlzIFByaXZhdGUgKGVuY3J5cHRlZClcbiIpOworICAgICAgICAgICAgICAgICAgICBmdHBf Y3BsID0gRlBMX1BSVjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNldHBic3ooREVGQVVMVF9Q QlNaKSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGEgZmFpbHVyZSBoZXJlIGlz IG1vc3QgbGlrZWx5IGNhdXNlZCBieSBhIG1peHVwICovCisgICAgICAgICAgICAgICAgICAgICAg ICAvKiBpbiB0aGUgc2Vzc2lvbiBrZXkgdXNlZCBieSBjbGllbnQgYW5kIHNlcnZlciAgICAqLwor CQkJcHJpbnRmKCI/UHJvdGVjdGlvbiBidWZmZXIgc2l6ZSBuZWdvdGlhdGlvbiBmYWlsZWRcbiIp OworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKDApOworICAgICAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChmdHBjbWQoIlBST1QgUCIsTlVMTCwwLDAsZnRw X3ZibSkgPT0gUkVQTFlfQ09NUExFVEUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgh cXVpZXQpCisgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiRlRQIERhdGEgY2hhbm5l bCBpcyBQcml2YXRlIChlbmNyeXB0ZWQpXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ0 cF9kcGwgPSBGUExfUFJWOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg ICAgICAgICAgICBwcmludGYoIj9VbmFibGUgdG8gZW5hYmxlIGVuY3J5cHRpb24gb24gZGF0YSBj aGFubmVsXG4iKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAg ICBmdHBfY3BsID0gRlBMX1NBRjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg ICAgICAgICAgICBpZiAoIWNvbm5lY3RlZCkKKwkgICAgICBnb3RvIGZhaWw7CisgICAgICAgIH0K KyNlbmRpZiAvKiBGVFBfU0VDVVJJVFkgKi8KKyAgICAgICAgaWYgKGZ0cF9sb2cpCQkJLyogXl5e ICovCisgICAgICAgICAgZnRwX2xvZ2luKHJlbW90ZSk7CisKKyAgICAgICAgaWYgKCFjb25uZWN0 ZWQpCisJICBnb3RvIGZhaWw7CisKKwlmdHBfeGZlcm1vZGUgPSB4ZmVybW9kZTsKKworI2lmZGVm IENLTE9HRElBTAorICAgICAgICBkb2xvZ2Z0cCgpOworI2VuZGlmIC8qIENLTE9HRElBTCAqLwor I2lmZGVmIE9TMgorICAgICAgICBEaWFsZXJTZW5kKE9QVF9LRVJNSVRfQ09OTkVDVCwgMCk7Cisj ZW5kaWYgLyogT1MyICovCisgICAgICAgIHBhc3NpdmVtb2RlID0gZnRwX3BzdjsKKyAgICAgICAg c2VuZHBvcnQgPSBmdHBfc3BjOworCW1kdG1vayA9IDE7CisJc2l6ZW9rID0gMTsKKwlzdG91YXJn ID0gMTsKKwl0eXBlc2VudCA9IDA7CisKKyAgICAgICAgaWYgKHVjYnVmID09IE5VTEwpIHsKKyAg ICAgICAgICAgIGFjdHVhbGJ1ZiA9IERFRkFVTFRfUEJTWjsKKyAgICAgICAgICAgIHdoaWxlIChh Y3R1YWxidWYgJiYgKHVjYnVmID0gKENIQVIgKiltYWxsb2MoYWN0dWFsYnVmKSkgPT0gTlVMTCkK KyAgICAgICAgICAgICAgYWN0dWFsYnVmID4+PSAyOworICAgICAgICB9CisgICAgICAgIGlmICgh bWF4YnVmKQorICAgICAgICAgIHVjYnVmc2l6ID0gYWN0dWFsYnVmIC0gRlVER0VfRkFDVE9SOwor CWRlYnVnKEYxMDEsImZ0cG9wZW4gdWNidWZzaXoiLCIiLHVjYnVmc2l6KTsKKyAgICAgICAgcmV0 dXJuKDEpOworICAgIH0KKyAgZmFpbDoKKyAgICBwcmludGYoIj9DYW4ndCBGVFAgY29ubmVjdCB0 byAlczolc1xuIixyZW1vdGUsc2VydmljZSk7CisgICAgZnRwY29kZSA9IC0xOworICAgIHJldHVy bigwKTsKK30KKworI2lmZGVmIENLX1NTTAoraW50Citzc2xfYXV0aCgpIHsKKyAgICBpbnQgaTsK KyAgICBjaGFyKiBwOworCisgICAgaWYgKHNzbF9kZWJ1Z19mbGFnKSB7CisgICAgICAgIGZwcmlu dGYoc3RkZXJyLCJTU0wgREVCVUcgQUNUSVZFXG4iKTsKKyAgICAgICAgZmZsdXNoKHN0ZGVycik7 CisgICAgICAgIC8qIGZvciB0aGUgbW9tZW50IEkgd2FudCB0aGUgb3V0cHV0IG9uIHNjcmVlbiAq LworICAgIH0KKyAgICBpZiAoc3NsX2Z0cF9kYXRhX2NvbiAhPSBOVUxMKSB7CisgICAgICAgIFNT TF9mcmVlKHNzbF9mdHBfZGF0YV9jb24pOworICAgICAgICBzc2xfZnRwX2RhdGFfY29uID0gTlVM TDsKKyAgICB9CisgICAgaWYgKHNzbF9mdHBfY29uICE9IE5VTEwpIHsKKyAgICAgICAgU1NMX2Zy ZWUoc3NsX2Z0cF9jb24pOworICAgICAgICBzc2xfZnRwX2Nvbj1OVUxMOworICAgIH0KKyAgICBp ZiAoc3NsX2Z0cF9jdHggIT0gTlVMTCkgeworICAgICAgICBTU0xfQ1RYX2ZyZWUoc3NsX2Z0cF9j dHgpOworICAgICAgICBzc2xfZnRwX2N0eCA9IE5VTEw7CisgICAgfQorCisgICAgLyogVGhlIFNT TF9PUF9ET05UX0lOU0VSVF9FTVBUWV9GUkFHTUVOVFMgCisgICAgICogd2FzIGFkZGVkIHRvIE9w ZW5TU0wgMC45LjZlIGFuZCAwLjkuNy4gIEl0IGRvZXMgbm90IGV4aXN0IGluIHByZXZpb3VzCisg ICAgICogdmVyc2lvbnMKKyAgICAgKi8KKyNpZm5kZWYgU1NMX09QX0RPTlRfSU5TRVJUX0VNUFRZ X0ZSQUdNRU5UUworI2RlZmluZSBTU0xfT1BfRE9OVF9JTlNFUlRfRU1QVFlfRlJBR01FTlRTIDBM CisjZW5kaWYKKyAgICBpZiAoYXV0aF90eXBlICYmICFzdHJjbXAoYXV0aF90eXBlLCJUTFMiKSkg eworICAgICAgICBzc2xfZnRwX2N0eD1TU0xfQ1RYX25ldyhTU0x2M19jbGllbnRfbWV0aG9kKCkp OworICAgICAgICBpZiAoIXNzbF9mdHBfY3R4KQorICAgICAgICAgIHJldHVybigwKTsKKyAgICAg ICAgU1NMX0NUWF9zZXRfb3B0aW9ucyhzc2xfZnRwX2N0eCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICBTU0xfT1BfU0lOR0xFX0RIX1VTRXxTU0xfT1BfRVBIRU1FUkFMX1JTQQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3NsX2Z0cF9j dHggPSBTU0xfQ1RYX25ldyhmdHBfYnVnX3VzZV9zc2xfdjIgPyBTU0x2MjNfY2xpZW50X21ldGhv ZCgpIDogCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1NMdjNfY2xpZW50X21l dGhvZCgpKTsKKyAgICAgICAgaWYgKCFzc2xfZnRwX2N0eCkKKyAgICAgICAgICByZXR1cm4oMCk7 CisgICAgICAgIFNTTF9DVFhfc2V0X29wdGlvbnMoc3NsX2Z0cF9jdHgsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKGZ0cF9idWdfdXNlX3NzbF92MiA/IDAgOiBTU0xfT1BfTk9fU1NMdjIp fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNTTF9PUF9TSU5HTEVfREhfVVNFfFNTTF9P UF9FUEhFTUVSQUxfUlNBCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICB9Cisg ICAgU1NMX0NUWF9zZXRfZGVmYXVsdF9wYXNzd2RfY2Ioc3NsX2Z0cF9jdHgsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKHBlbV9wYXNzd29yZF9jYiAqKXNzbF9wYXNzd2RfY2Fs bGJhY2spOworICAgIFNTTF9DVFhfc2V0X2luZm9fY2FsbGJhY2soc3NsX2Z0cF9jdHgsc3NsX2Ns aWVudF9pbmZvX2NhbGxiYWNrKTsKKyAgICBTU0xfQ1RYX3NldF9zZXNzaW9uX2NhY2hlX21vZGUo c3NsX2Z0cF9jdHgsU1NMX1NFU1NfQ0FDSEVfQ0xJRU5UKTsKKworI2lmZGVmIE9TMgorI2lmZGVm IE5UCisgICAgLyogVGhlIGRlZmF1bHRzIGluIHRoZSBTU0wgY3J5cHRvIGxpYnJhcnkgYXJlIG5v dCBhcHByb3ByaWF0ZSBmb3IgT1MvMiAqLworICAgIHsKKyAgICAgICAgY2hhciBwYXRoW0NLTUFY UEFUSF07CisgICAgICAgIGV4dGVybiBjaGFyIGV4ZWRpcltdOworCisgICAgICAgIGNrbWFrbXNn KHBhdGgsQ0tNQVhQQVRILGV4ZWRpciwiY2VydHMiLE5VTEwsTlVMTCk7CisgICAgICAgIGlmIChT U0xfQ1RYX2xvYWRfdmVyaWZ5X2xvY2F0aW9ucyhzc2xfZnRwX2N0eCxOVUxMLHBhdGgpID09IDAp ICB7CisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJmdHAgc3NsX2F1dGggdW5hYmxlIHRvIGxvYWQg cGF0aCIscGF0aCwwKTsKKyAgICAgICAgICAgIGlmIChzc2xfZGVidWdfZmxhZykKKyAgICAgICAg ICAgICAgICBwcmludGYoIj9VbmFibGUgdG8gbG9hZCB2ZXJpZnktZGlyOiAlc1xyXG4iLHBhdGgp OworICAgICAgICB9CisKKyAgICAgICAgY2ttYWttc2cocGF0aCxDS01BWFBBVEgsCisgICAgICAg ICAgICAgICAgIChjaGFyICopR2V0QXBwRGF0YSgxKSwia2VybWl0IDk1L2NlcnRzIixOVUxMLE5V TEwpOworICAgICAgICBpZiAoU1NMX0NUWF9sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoc3NsX2Z0cF9j dHgsTlVMTCxwYXRoKSA9PSAwKSAgeworICAgICAgICAgICAgZGVidWcoRjExMCwiZnRwIHNzbF9h dXRoIHVuYWJsZSB0byBsb2FkIHBhdGgiLHBhdGgsMCk7CisgICAgICAgICAgICBpZiAoc3NsX2Rl YnVnX2ZsYWcpCisgICAgICAgICAgICAgICAgcHJpbnRmKCI/VW5hYmxlIHRvIGxvYWQgdmVyaWZ5 LWRpcjogJXNcclxuIixwYXRoKTsKKyAgICAgICAgfQorCisgICAgICAgIGNrbWFrbXNnKHBhdGgs Q0tNQVhQQVRILAorICAgICAgICAgICAgICAgICAoY2hhciAqKUdldEFwcERhdGEoMCksImtlcm1p dCA5NS9jZXJ0cyIsTlVMTCxOVUxMKTsKKyAgICAgICAgaWYgKFNTTF9DVFhfbG9hZF92ZXJpZnlf bG9jYXRpb25zKHNzbF9mdHBfY3R4LE5VTEwscGF0aCkgPT0gMCkgIHsKKyAgICAgICAgICAgIGRl YnVnKEYxMTAsImZ0cCBzc2xfYXV0aCB1bmFibGUgdG8gbG9hZCBwYXRoIixwYXRoLDApOworICAg ICAgICAgICAgaWYgKHNzbF9kZWJ1Z19mbGFnKQorICAgICAgICAgICAgICAgIHByaW50ZigiP1Vu YWJsZSB0byBsb2FkIHZlcmlmeS1kaXI6ICVzXHJcbiIscGF0aCk7CisgICAgICAgIH0KKworICAg ICAgICBja21ha21zZyhwYXRoLENLTUFYUEFUSCxleGVkaXIsImNhX2NlcnRzLnBlbSIsTlVMTCxO VUxMKTsKKyAgICAgICAgaWYgKFNTTF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zKHNzbF9mdHBf Y3R4LHBhdGgsTlVMTCkgPT0gMCkgeworICAgICAgICAgICAgZGVidWcoRjExMCwiZnRwIHNzbF9h dXRoIHVuYWJsZSB0byBsb2FkIHBhdGgiLHBhdGgsMCk7CisgICAgICAgICAgICBpZiAoc3NsX2Rl YnVnX2ZsYWcpCisgICAgICAgICAgICAgICAgcHJpbnRmKCI/VW5hYmxlIHRvIGxvYWQgdmVyaWZ5 LWZpbGU6ICVzXHJcbiIscGF0aCk7CisgICAgICAgIH0KKworICAgICAgICBja21ha21zZyhwYXRo LENLTUFYUEFUSCwoY2hhciAqKUdldEFwcERhdGEoMSksCisJCSAia2VybWl0IDk1L2NhX2NlcnRz LnBlbSIsTlVMTCxOVUxMKTsKKyAgICAgICAgaWYgKFNTTF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRp b25zKHNzbF9mdHBfY3R4LHBhdGgsTlVMTCkgPT0gMCkgeworICAgICAgICAgICAgZGVidWcoRjEx MCwiZnRwIHNzbF9hdXRoIHVuYWJsZSB0byBsb2FkIHBhdGgiLHBhdGgsMCk7CisgICAgICAgICAg ICBpZiAoc3NsX2RlYnVnX2ZsYWcpCisgICAgICAgICAgICAgICAgcHJpbnRmKCI/VW5hYmxlIHRv IGxvYWQgdmVyaWZ5LWZpbGU6ICVzXHJcbiIscGF0aCk7CisgICAgICAgIH0KKworICAgICAgICBj a21ha21zZyhwYXRoLENLTUFYUEFUSCwoY2hhciAqKUdldEFwcERhdGEoMCksCisJCSAia2VybWl0 IDk1L2NhX2NlcnRzLnBlbSIsTlVMTCxOVUxMKTsKKyAgICAgICAgaWYgKFNTTF9DVFhfbG9hZF92 ZXJpZnlfbG9jYXRpb25zKHNzbF9mdHBfY3R4LHBhdGgsTlVMTCkgPT0gMCkgeworICAgICAgICAg ICAgZGVidWcoRjExMCwiZnRwIHNzbF9hdXRoIHVuYWJsZSB0byBsb2FkIHBhdGgiLHBhdGgsMCk7 CisgICAgICAgICAgICBpZiAoc3NsX2RlYnVnX2ZsYWcpCisgICAgICAgICAgICAgICAgcHJpbnRm KCI/VW5hYmxlIHRvIGxvYWQgdmVyaWZ5LWZpbGU6ICVzXHJcbiIscGF0aCk7CisgICAgICAgIH0K KyAgICB9CisjZWxzZSAvKiBOVCAqLworICAgIC8qIFRoZSBkZWZhdWx0cyBpbiB0aGUgU1NMIGNy eXB0byBsaWJyYXJ5IGFyZSBub3QgYXBwcm9wcmlhdGUgZm9yIE9TLzIgKi8KKyAgICB7CisKKyAg ICAgICAgY2hhciBwYXRoW0NLTUFYUEFUSF07CisgICAgICAgIGV4dGVybiBjaGFyIGV4ZWRpcltd OworCisgICAgICAgIGNrbWFrbXNnKHBhdGgsQ0tNQVhQQVRILGV4ZWRpciwiY2VydHMiLE5VTEws TlVMTCk7CisgICAgICAgIGlmIChTU0xfQ1RYX2xvYWRfdmVyaWZ5X2xvY2F0aW9ucyhzc2xfZnRw X2N0eCxOVUxMLHBhdGgpID09IDApICB7CisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJmdHAgc3Ns X2F1dGggdW5hYmxlIHRvIGxvYWQgcGF0aCIscGF0aCwwKTsKKyAgICAgICAgICAgIGlmIChzc2xf ZGVidWdfZmxhZykKKyAgICAgICAgICAgICAgICBwcmludGYoIj9VbmFibGUgdG8gbG9hZCB2ZXJp ZnktZGlyOiAlc1xyXG4iLHBhdGgpOworICAgICAgICB9CisgICAgICAgIGNrbWFrbXNnKHBhdGgs Q0tNQVhQQVRILGV4ZWRpciwiY2FfY2VydHMucGVtIixOVUxMLE5VTEwpOworICAgICAgICBpZiAo U1NMX0NUWF9sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoc3NsX2Z0cF9jdHgscGF0aCxOVUxMKSA9PSAw KSB7CisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJmdHAgc3NsX2F1dGggdW5hYmxlIHRvIGxvYWQg cGF0aCIscGF0aCwwKTsKKyAgICAgICAgICAgIGlmIChzc2xfZGVidWdfZmxhZykKKyAgICAgICAg ICAgICAgICBwcmludGYoIj9VbmFibGUgdG8gbG9hZCB2ZXJpZnktZmlsZTogJXNcclxuIixwYXRo KTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBOVCAqLworI2Vsc2UgLyogT1MyICovCisg ICAgU1NMX0NUWF9zZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHMoc3NsX2Z0cF9jdHgpOworI2VuZGlm IC8qIE9TMiAqLworCisgICAgaWYgKHNzbF92ZXJpZnlfZmlsZSAmJgorICAgICAgICBTU0xfQ1RY X2xvYWRfdmVyaWZ5X2xvY2F0aW9ucyhzc2xfZnRwX2N0eCxzc2xfdmVyaWZ5X2ZpbGUsTlVMTCkg PT0gMCkgeworICAgICAgICBkZWJ1ZyhGMTEwLAorICAgICAgICAgICAgICAiZnRwIHNzbCBhdXRo IHVuYWJsZSB0byBsb2FkIHNzbF92ZXJpZnlfZmlsZSIsCisgICAgICAgICAgICAgIHNzbF92ZXJp ZnlfZmlsZSwKKyAgICAgICAgICAgICAgMAorICAgICAgICAgICAgICApOworICAgICAgICBpZiAo c3NsX2RlYnVnX2ZsYWcpCisgICAgICAgICAgcHJpbnRmKCI/VW5hYmxlIHRvIGxvYWQgdmVyaWZ5 LWZpbGU6ICVzXHJcbiIsc3NsX3ZlcmlmeV9maWxlKTsKKyAgICB9CisgICAgaWYgKHNzbF92ZXJp ZnlfZGlyICYmCisgICAgICAgIFNTTF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zKHNzbF9mdHBf Y3R4LE5VTEwsc3NsX3ZlcmlmeV9kaXIpID09IDApIHsKKyAgICAgICAgZGVidWcoRjExMCwKKyAg ICAgICAgICAgICAgImZ0cCBzc2wgYXV0aCB1bmFibGUgdG8gbG9hZCBzc2xfdmVyaWZ5X2RpciIs CisgICAgICAgICAgICAgIHNzbF92ZXJpZnlfZGlyLAorICAgICAgICAgICAgICAwCisgICAgICAg ICAgICAgICk7CisgICAgICAgIGlmIChzc2xfZGVidWdfZmxhZykKKyAgICAgICAgICBwcmludGYo Ij9VbmFibGUgdG8gbG9hZCB2ZXJpZnktZGlyOiAlc1xyXG4iLHNzbF92ZXJpZnlfZGlyKTsKKyAg ICB9CisKKyAgICAvKiBzZXQgdXAgdGhlIG5ldyBDUkwgU3RvcmUgKi8KKyAgICBjcmxfc3RvcmUg PSAoWDUwOV9TVE9SRSAqKVg1MDlfU1RPUkVfbmV3KCk7CisgICAgaWYgKGNybF9zdG9yZSkgewor I2lmZGVmIE9TMgorICAgICAgICBjaGFyIHBhdGhbQ0tNQVhQQVRIXTsKKyAgICAgICAgZXh0ZXJu IGNoYXIgZXhlZGlyW107CisKKyAgICAgICAgY2ttYWttc2cocGF0aCxDS01BWFBBVEgsZXhlZGly LCJjcmxzIixOVUxMLE5VTEwpOworICAgICAgICBpZiAoWDUwOV9TVE9SRV9sb2FkX2xvY2F0aW9u cyhjcmxfc3RvcmUsTlVMTCxwYXRoKSA9PSAwKSB7CisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJm dHAgc3NsIGF1dGggdW5hYmxlIHRvIGxvYWQgZGlyIixwYXRoLDApOworICAgICAgICAgICAgaWYg KHNzbF9kZWJ1Z19mbGFnKQorICAgICAgICAgICAgICAgIHByaW50ZigiP1VuYWJsZSB0byBsb2Fk IGNybC1kaXI6ICVzXHJcbiIscGF0aCk7CisgICAgICAgIH0KKyNpZmRlZiBOVAorICAgICAgICBj a21ha21zZyhwYXRoLENLTUFYUEFUSCwKKwkJIChjaGFyICopR2V0QXBwRGF0YSgxKSwia2VybWl0 IDk1L2NybHMiLE5VTEwsTlVMTCk7CisgICAgICAgIGlmIChYNTA5X1NUT1JFX2xvYWRfbG9jYXRp b25zKGNybF9zdG9yZSxOVUxMLHBhdGgpID09IDApIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMTAs ImZ0cCBzc2wgYXV0aCB1bmFibGUgdG8gbG9hZCBkaXIiLHBhdGgsMCk7CisgICAgICAgICAgICBp ZiAoc3NsX2RlYnVnX2ZsYWcpCisgICAgICAgICAgICAgICAgcHJpbnRmKCI/VW5hYmxlIHRvIGxv YWQgY3JsLWRpcjogJXNcclxuIixwYXRoKTsKKyAgICAgICAgfQorICAgICAgICBja21ha21zZyhw YXRoLENLTUFYUEFUSCwKKwkJIChjaGFyICopR2V0QXBwRGF0YSgwKSwia2VybWl0IDk1L2NybHMi LE5VTEwsTlVMTCk7CisgICAgICAgIGlmIChYNTA5X1NUT1JFX2xvYWRfbG9jYXRpb25zKGNybF9z dG9yZSxOVUxMLHBhdGgpID09IDApIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMTAsImZ0cCBzc2wg YXV0aCB1bmFibGUgdG8gbG9hZCBkaXIiLHBhdGgsMCk7CisgICAgICAgICAgICBpZiAoc3NsX2Rl YnVnX2ZsYWcpCisgICAgICAgICAgICAgICAgcHJpbnRmKCI/VW5hYmxlIHRvIGxvYWQgY3JsLWRp cjogJXNcclxuIixwYXRoKTsKKyAgICAgICAgfQorI2VuZGlmIC8qIE5UICovCisgICAgICAgIAor ICAgICAgICBja21ha21zZyhwYXRoLENLTUFYUEFUSCxleGVkaXIsImNhX2NybHMucGVtIixOVUxM LE5VTEwpOworICAgICAgICBpZiAoWDUwOV9TVE9SRV9sb2FkX2xvY2F0aW9ucyhjcmxfc3RvcmUs cGF0aCxOVUxMKSA9PSAwKSB7CisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJmdHAgc3NsIGF1dGgg dW5hYmxlIHRvIGxvYWQgZmlsZSIscGF0aCwwKTsKKyAgICAgICAgICAgIGlmIChzc2xfZGVidWdf ZmxhZykKKyAgICAgICAgICAgICAgICBwcmludGYoIj9VbmFibGUgdG8gbG9hZCBjcmwtZmlsZTog JXNcclxuIixwYXRoKTsKKyAgICAgICAgfQorI2lmZGVmIE5UCisgICAgICAgIGNrbWFrbXNnKHBh dGgsQ0tNQVhQQVRILChjaGFyICopR2V0QXBwRGF0YSgxKSwKKwkJICJrZXJtaXQgOTUvY2FfY3Js cy5wZW0iLE5VTEwsTlVMTCk7CisgICAgICAgIGlmIChYNTA5X1NUT1JFX2xvYWRfbG9jYXRpb25z KGNybF9zdG9yZSxwYXRoLE5VTEwpID09IDApIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMTAsImZ0 cCBzc2wgYXV0aCB1bmFibGUgdG8gbG9hZCBmaWxlIixwYXRoLDApOworICAgICAgICAgICAgaWYg KHNzbF9kZWJ1Z19mbGFnKQorICAgICAgICAgICAgICAgIHByaW50ZigiP1VuYWJsZSB0byBsb2Fk IGNybC1maWxlOiAlc1xyXG4iLHBhdGgpOworICAgICAgICB9CisgICAgICAgIGNrbWFrbXNnKHBh dGgsQ0tNQVhQQVRILChjaGFyICopR2V0QXBwRGF0YSgwKSwKKwkJICJrZXJtaXQgOTUvY2FfY3Js cy5wZW0iLE5VTEwsTlVMTCk7CisgICAgICAgIGlmIChYNTA5X1NUT1JFX2xvYWRfbG9jYXRpb25z KGNybF9zdG9yZSxwYXRoLE5VTEwpID09IDApIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMTAsImZ0 cCBzc2wgYXV0aCB1bmFibGUgdG8gbG9hZCBmaWxlIixwYXRoLDApOworICAgICAgICAgICAgaWYg KHNzbF9kZWJ1Z19mbGFnKQorICAgICAgICAgICAgICAgIHByaW50ZigiP1VuYWJsZSB0byBsb2Fk IGNybC1maWxlOiAlc1xyXG4iLHBhdGgpOworICAgICAgICB9CisjZW5kaWYgLyogTlQgKi8KKyNl bmRpZiAvKiBPUzIgKi8KKworICAgICAgICBpZiAoc3NsX2NybF9maWxlIHx8IHNzbF9jcmxfZGly KSB7CisgICAgICAgICAgICBpZiAoc3NsX2NybF9maWxlICYmCisgICAgICAgICAgICAgICAgWDUw OV9TVE9SRV9sb2FkX2xvY2F0aW9ucyhjcmxfc3RvcmUsc3NsX2NybF9maWxlLE5VTEwpID09IDAp IHsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLAorICAgICAgICAgICAgICAgICAgICAgICJm dHAgc3NsIGF1dGggdW5hYmxlIHRvIGxvYWQgc3NsX2NybF9maWxlIiwKKyAgICAgICAgICAgICAg ICAgICAgICBzc2xfY3JsX2ZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgMAorICAgICAgICAg ICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgaWYgKHNzbF9kZWJ1Z19mbGFnKQorICAg ICAgICAgICAgICAgICAgcHJpbnRmKCI/VW5hYmxlIHRvIGxvYWQgY3JsLWZpbGU6ICVzXHJcbiIs c3NsX2NybF9maWxlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzc2xfY3JsX2Rp ciAmJgorICAgICAgICAgICAgICAgIFg1MDlfU1RPUkVfbG9hZF9sb2NhdGlvbnMoY3JsX3N0b3Jl LE5VTEwsc3NsX2NybF9kaXIpID09IDApIHsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLAor ICAgICAgICAgICAgICAgICAgICAgICJmdHAgc3NsIGF1dGggdW5hYmxlIHRvIGxvYWQgc3NsX2Ny bF9kaXIiLAorICAgICAgICAgICAgICAgICAgICAgIHNzbF9jcmxfZGlyLAorICAgICAgICAgICAg ICAgICAgICAgIDAKKyAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgIGlm IChzc2xfZGVidWdfZmxhZykKKyAgICAgICAgICAgICAgICAgIHByaW50ZigiP1VuYWJsZSB0byBs b2FkIGNybC1kaXI6ICVzXHJcbiIsc3NsX2NybF9kaXIpOworICAgICAgICAgICAgfQorICAgICAg ICB9IGVsc2UgeworICAgICAgICAgICAgWDUwOV9TVE9SRV9zZXRfZGVmYXVsdF9wYXRocyhjcmxf c3RvcmUpOworICAgICAgICB9CisgICAgfQorICAgIFNTTF9DVFhfc2V0X3ZlcmlmeShzc2xfZnRw X2N0eCxzc2xfdmVyaWZ5X2ZsYWcsCisgICAgICAgICAgICAgICAgICAgICAgIHNzbF9jbGllbnRf dmVyaWZ5X2NhbGxiYWNrKTsKKyAgICBzc2xfdmVyaWZ5X2RlcHRoID0gLTE7CisgICAgc3NsX2Z0 cF9jb249KFNTTCAqKVNTTF9uZXcoc3NsX2Z0cF9jdHgpOworICAgIHRsc19sb2FkX2NlcnRzKHNz bF9mdHBfY3R4LHNzbF9mdHBfY29uLDApOworICAgIFNTTF9zZXRfZmQoc3NsX2Z0cF9jb24sY3Nv Y2tldCk7CisgICAgU1NMX3NldF92ZXJpZnkoc3NsX2Z0cF9jb24sc3NsX3ZlcmlmeV9mbGFnLE5V TEwpOworICAgIGlmIChzc2xfY2lwaGVyX2xpc3QpIHsKKyAgICAgICAgU1NMX3NldF9jaXBoZXJf bGlzdChzc2xfZnRwX2Nvbixzc2xfY2lwaGVyX2xpc3QpOworICAgIH0gZWxzZSB7CisgICAgICAg IGNoYXIgKiBwOworICAgICAgICBpZiAocCA9IGdldGVudigiU1NMX0NJUEhFUiIpKSB7CisgICAg ICAgICAgICBTU0xfc2V0X2NpcGhlcl9saXN0KHNzbF9mdHBfY29uLHApOworICAgICAgICB9IGVs c2UgeworICAgICAgICAgICAgU1NMX3NldF9jaXBoZXJfbGlzdChzc2xfZnRwX2NvbixERUZBVUxU X0NJUEhFUl9MSVNUKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoc3NsX2RlYnVnX2ZsYWcp IHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsIj0+U1RBUlQgU1NML1RMUyBjb25uZWN0IG9uIENP TU1BTkRcbiIpOworICAgICAgICBmZmx1c2goc3RkZXJyKTsKKyAgICB9CisgICAgaWYgKFNTTF9j b25uZWN0KHNzbF9mdHBfY29uKSA8PSAwKSB7CisgICAgICAgIHN0YXRpYyBjaGFyIGVycmJ1Zlsx MDI0XTsKKyAgICAgICAgY2ttYWttc2coZXJyYnVmLDEwMjQsImZ0cDogU1NML1RMUyBjb25uZWN0 IENPTU1BTkQgZXJyb3I6ICIsCisgICAgICAgICAgICAgICAgIEVSUl9lcnJvcl9zdHJpbmcoRVJS X2dldF9lcnJvcigpLE5VTEwpLE5VTEwsTlVMTCk7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCIl c1xuIiwgZXJyYnVmKTsKKyAgICAgICAgZmZsdXNoKHN0ZGVycik7CisgICAgICAgIHNzbF9mdHBf YWN0aXZlX2ZsYWc9MDsKKyAgICAgICAgU1NMX2ZyZWUoc3NsX2Z0cF9jb24pOworICAgICAgICBz c2xfZnRwX2NvbiA9IE5VTEw7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3NsX2Z0cF9hY3RpdmVf ZmxhZyA9IDE7CisKKyAgICAgICAgaWYgKCFzc2xfY2VydHNva19mbGFnICYmICF0bHNfaXNfa3Ji NSgxKSkgeworICAgICAgICAgICAgY2hhciAqc3ViamVjdCA9IHNzbF9nZXRfc3ViamVjdF9uYW1l KHNzbF9mdHBfY29uKTsKKworICAgICAgICAgICAgaWYgKCFzdWJqZWN0KSB7CisgICAgICAgICAg ICAgICAgaWYgKHNzbF92ZXJpZnlfZmxhZyAmIFNTTF9WRVJJRllfRkFJTF9JRl9OT19QRUVSX0NF UlQpIHsKKyAgICAgICAgICAgICAgICAgICAgZGVidWcoRjExMCwic3NsX2F1dGgiLCJbU1NMIC0g RkFJTEVEXSIsMCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybihzc2xfZnRwX2FjdGl2ZV9m bGFnID0gMCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg aWYgKHVxX29rKCJXYXJuaW5nOiBTZXJ2ZXIgZGlkbid0IHByb3ZpZGUgYSBjZXJ0aWZpY2F0ZVxu IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ29udGludWU/IChZL04pIiwzLE5V TEwsMCkgPD0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoRjExMCwgInNzbF9h dXRoIiwiW1NTTCAtIEZBSUxFRF0iLDApOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu KHNzbF9mdHBfYWN0aXZlX2ZsYWcgPSAwKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc3NsX2NoZWNrX3NlcnZlcl9uYW1l KHNzbF9mdHBfY29uLCBmdHBfdXNlcl9ob3N0KSkgeworICAgICAgICAgICAgICAgIGRlYnVnKEYx MTAsInNzbF9hdXRoIiwiW1NTTCAtIEZBSUxFRF0iLDApOworICAgICAgICAgICAgICAgIHJldHVy bihzc2xfZnRwX2FjdGl2ZV9mbGFnID0gMCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg ICAgICAgZGVidWcoRjExMCwic3NsX2F1dGgiLCJbU1NMIC0gT0tdIiwwKTsKKyAgICAgICAgc3Ns X2Rpc3BsYXlfY29ubmVjdF9kZXRhaWxzKHNzbF9mdHBfY29uLDAsc3NsX3ZlcmJvc2VfZmxhZyk7 CisgICAgfQorICAgIGlmIChzc2xfZGVidWdfZmxhZykgeworICAgICAgICBmcHJpbnRmKHN0ZGVy ciwiPT5ET05FIFNTTC9UTFMgY29ubmVjdCBvbiBDT01NQU5EXG4iKTsKKyAgICAgICAgZmZsdXNo KHN0ZGVycik7CisgICAgfQorICAgIHJldHVybihzc2xfZnRwX2FjdGl2ZV9mbGFnKTsKK30KKyNl bmRpZiAvKiBDS19TU0wgKi8KKworc3RhdGljIHNpZ3R5cGUKK2NtZGNhbmNlbChzaWcpIGludCBz aWc7IHsKKyNpZmRlZiBPUzIKKyAgICAvKiBJbiBVbml4IHdlICJjaGFpbiIgdG8gdHJhcCgpLCB3 aGljaCBwcmludHMgdGhpcyAqLworICAgIHByaW50ZigiXkMuLi5cbiIpOworI2VuZGlmIC8qIE9T MiAqLworICAgIGRlYnVnKEYxMDAsImZ0cCBjbWRjYW5jZWwgY2F1Z2h0IFNJR0lOVCAiLCIiLDAp OworICAgIGZmbHVzaChzdGRvdXQpOworICAgIHNlY3VyZV9nZXRjKDAsMSk7CQkJLyogSW5pdGlh bGl6ZSBuZXQgaW5wdXQgYnVmZmVycyAqLworICAgIGNhbmNlbGZpbGUrKzsKKyAgICBjYW5jZWxn cm91cCsrOworICAgIG1sc3Jlc2V0KCk7CisjaWZuZGVmIE9TMgorI2lmZGVmIEZUUF9QUk9YWQor ICAgIGlmIChwdGZsYWcpICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHByb3h5Li4uICovCisg ICAgICBsb25nam1wKHB0Y2FuY2VsLDEpOworI2VuZGlmIC8qIEZUUF9QUk9YWSAqLworICAgIGRl YnVnKEYxMDAsImZ0cCBjbWRjYW5jZWwgY2hhaW4gdG8gdHJhcCgpLi4uIiwiIiwwKTsKKyAgICB0 cmFwKFNJR0lOVCk7CisgICAgLyogTk9UUkVBQ0hFRCAqLworICAgIGRlYnVnKEYxMDAsImZ0cCBj bWRjYW5jZWwgcmV0dXJuIGZyb20gdHJhcCgpLi4uIiwiIiwwKTsKKyNlbHNlCisgICAgZGVidWco RjEwMCwiZnRwIGNtZGNhbmNlbCBQb3N0Q3RybENTZW0oKS4uLiIsIiIsMCk7CisgICAgUG9zdEN0 cmxDU2VtKCk7CisjZW5kaWYgLyogT1MyICovCit9CisKK3N0YXRpYyBpbnQKKyNpZmRlZiBDS19B TlNJQworc2NvbW1hbmQoY2hhciAqIHMpICAgICAgICAgICAgICAgICAgICAgIC8qIFdhcyBzZWN1 cmVfY29tbWFuZCgpICovCisjZWxzZQorc2NvbW1hbmQocykgY2hhciAqIHM7CisjZW5kaWYgLyog Q0tfQU5TSUMgKi8KK3sKKyAgICBpbnQgbGVuZ3RoID0gMCwgbGVuMjsKKyAgICBjaGFyIGluW0ZU UF9CVUZTSVpdLCBvdXRbRlRQX0JVRlNJWl07CisjaWZkZWYgQ0tfU1NMCisgICAgaWYgKHNzbF9m dHBfYWN0aXZlX2ZsYWcpIHsKKyAgICAgICAgaW50IGVycm9yLCByYzsKKyAgICAgICAgbGVuZ3Ro ID0gc3RybGVuKHMpICsgMjsKKyAgICAgICAgbGVuZ3RoID0gY2ttYWttc2cob3V0LEZUUF9CVUZT SVoscywiXHJcbiIsTlVMTCxOVUxMKTsKKyAgICAgICAgcmMgPSBTU0xfd3JpdGUoc3NsX2Z0cF9j b24sb3V0LGxlbmd0aCk7CisgICAgICAgIGVycm9yID0gU1NMX2dldF9lcnJvcihzc2xfZnRwX2Nv bixyYyk7CisgICAgICAgIHN3aXRjaCAoZXJyb3IpIHsKKyAgICAgICAgICBjYXNlIFNTTF9FUlJP Ul9OT05FOgorICAgICAgICAgICAgcmV0dXJuKDEpOworICAgICAgICAgIGNhc2UgU1NMX0VSUk9S X1dBTlRfV1JJVEU6CisgICAgICAgICAgY2FzZSBTU0xfRVJST1JfV0FOVF9SRUFEOgorICAgICAg ICAgIGNhc2UgU1NMX0VSUk9SX1NZU0NBTEw6CisjaWZkZWYgTlQKKyAgICAgICAgICAgIHsKKyAg ICAgICAgICAgICAgICBpbnQgZ2xlID0gR2V0TGFzdEVycm9yKCk7CisgICAgICAgICAgICB9Cisj ZW5kaWYgLyogTlQgKi8KKyAgICAgICAgICBjYXNlIFNTTF9FUlJPUl9XQU5UX1g1MDlfTE9PS1VQ OgorICAgICAgICAgIGNhc2UgU1NMX0VSUk9SX1NTTDoKKyAgICAgICAgICBjYXNlIFNTTF9FUlJP Ul9aRVJPX1JFVFVSTjoKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgbG9zdHBlZXIo KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4oMCk7CisgICAgfQorI2VuZGlmIC8qIENLX1NT TCAqLworCisgICAgaWYgKGF1dGhfdHlwZSAmJiBmdHBfY3BsICE9IEZQTF9DTFIpIHsKKyNpZmRl ZiBGVFBfU1JQCisgICAgICAgIGlmIChja19zcnBfaXNfaW5zdGFsbGVkKCkgJiYgKHN0cmNtcChh dXRoX3R5cGUsIlNSUCIpID09IDApKQorICAgICAgICAgIGlmICgobGVuZ3RoID0gc3JwX2VuY29k ZShmdHBfY3BsID09IEZQTF9QUlYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IChDSEFSICopcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKENIQVIgKilv dXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbihzKSkpIDwgMCkg eworICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlNSUCBmYWlsZWQgdG8gZW5jb2RlIG1l c3NhZ2VcbiIpOworICAgICAgICAgICAgICByZXR1cm4oMCk7CisgICAgICAgICAgfQorI2VuZGlm IC8qIEZUUF9TUlAgKi8KKyNpZmRlZiBGVFBfS1JCNAorICAgICAgICBpZiAoY2tfa3JiNF9pc19p bnN0YWxsZWQoKSAmJgorICAgICAgICAgICAgKHN0cmNtcChhdXRoX3R5cGUsICJLRVJCRVJPU19W NCIpID09IDApKSB7CisgICAgICAgICAgICBpZiAoZnRwX2NwbCA9PSBGUExfUFJWKSB7CisgICAg ICAgICAgICAgICAgbGVuZ3RoID0KKyAgICAgICAgICAgICAgICAgIGtyYl9ta19wcml2KChDSEFS ICopcywgKENIQVIgKilvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4o cyksIGZ0cF9zY2hlZCwKKyNpZmRlZiBLUkI1MjQKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGZ0cF9jcmVkLnNlc3Npb24sCisjZWxzZSAvKiBLUkI1MjQgKi8KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICZmdHBfY3JlZC5zZXNzaW9uLAorI2VuZGlmIC8qIEtSQjUyNCAqLwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm15Y3RsYWRkciwgJmhpc2N0bGFkZHIpOwor ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBsZW5ndGggPQorICAgICAgICAg ICAgICAgICAga3JiX21rX3NhZmUoKENIQVIgKilzLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKENIQVIgKilvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4o cyksCisjaWZkZWYgS1JCNTI0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdHBfY3Jl ZC5zZXNzaW9uLAorI2Vsc2UgLyogS1JCNTI0ICovCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAmZnRwX2NyZWQuc2Vzc2lvbiwKKyNlbmRpZiAvKiBLUkI1MjQgKi8KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICZteWN0bGFkZHIsICZoaXNjdGxhZGRyKTsKKyAgICAgICAgICAg IH0KKyAgICAgICAgICAgIGlmIChsZW5ndGggPT0gLTEpIHsKKyAgICAgICAgICAgICAgICBmcHJp bnRmKHN0ZGVyciwgImtyYl9ta18lcyBmYWlsZWQgZm9yIEtFUkJFUk9TX1Y0XG4iLAorICAgICAg ICAgICAgICAgICAgICAgICAgZnRwX2NwbCA9PSBGUExfUFJWID8gInByaXYiIDogInNhZmUiKTsK KyAgICAgICAgICAgICAgICByZXR1cm4oMCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyNl bmRpZiAvKiBGVFBfS1JCNCAqLworI2lmZGVmIEZUUF9HU1NBUEkKKyAgICAgICAgLyogU2NvbW1h bmQgKGJhc2VkIG9uIGxldmVsKSAqLworICAgICAgICBpZiAoY2tfZ3NzYXBpX2lzX2luc3RhbGxl ZCgpICYmIChzdHJjbXAoYXV0aF90eXBlLCAiR1NTQVBJIikgPT0gMCkpIHsKKyAgICAgICAgICAg IGdzc19idWZmZXJfZGVzYyBpbl9idWYsIG91dF9idWY7CisgICAgICAgICAgICBPTV91aW50MzIg bWFqX3N0YXQsIG1pbl9zdGF0OworICAgICAgICAgICAgaW50IGNvbmZfc3RhdGU7CisgICAgICAg ICAgICBpbl9idWYudmFsdWUgPSBzOworICAgICAgICAgICAgaW5fYnVmLmxlbmd0aCA9IHN0cmxl bihzKSArIDE7CisgICAgICAgICAgICBtYWpfc3RhdCA9IGdzc19zZWFsKCZtaW5fc3RhdCwgZ2Nv bnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmdHBfY3BsPT1GUExfUFJW KSwgLyogcHJpdmF0ZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHU1NfQ19R T1BfREVGQVVMVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmluX2J1ZiwgJmNv bmZfc3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvdXRfYnVmKTsKKyAg ICAgICAgICAgIGlmIChtYWpfc3RhdCAhPSBHU1NfU19DT01QTEVURSkgeyAvKiBHZW5lcmFsbHkg bmVlZCB0byBkZWFsICovCisgICAgICAgICAgICAgICAgdXNlcl9nc3NfZXJyb3IobWFqX3N0YXQs IG1pbl9zdGF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmdHBfY3BsPT1GUExf UFJWKT8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZ3NzX3NlYWwgRU5DIGRpZG4n dCBjb21wbGV0ZSI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImdzc19zZWFsIE1J QyBkaWRuJ3QgY29tcGxldGUiKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoKGZ0cF9jcGwgPT0g RlBMX1BSVikgJiYgIWNvbmZfc3RhdGUpIHsKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVy ciwgIkdTU0FQSSBkaWRuJ3QgZW5jcnlwdCBtZXNzYWdlIik7CisgICAgICAgICAgICB9IGVsc2Ug eworICAgICAgICAgICAgICAgIGlmIChmdHBfZGViKQorICAgICAgICAgICAgICAgICAgZnByaW50 ZihzdGRlcnIsICJzZWFsZWQgKCVzKSAlZCBieXRlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgZnRwX2NwbD09RlBMX1BSVj8iRU5DIjoiTUlDIiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgb3V0X2J1Zi5sZW5ndGgpOworICAgICAgICAgICAgICAgIG1lbWNweShvdXQsIG91dF9i dWYudmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aD1vdXRfYnVmLmxlbmd0aCk7 CisgICAgICAgICAgICAgICAgZ3NzX3JlbGVhc2VfYnVmZmVyKCZtaW5fc3RhdCwgJm91dF9idWYp OworICAgICAgICAgICAgfQorICAgICAgICB9CisjZW5kaWYgLyogRlRQX0dTU0FQSSAqLworICAg ICAgICAvKiBPdGhlciBhdXRoIHR5cGVzIGdvIGhlcmUgLi4uICovCisKKyAgICAgICAgbGVuMiA9 IEZUUF9CVUZTSVo7CisgICAgICAgIGlmICgoa2Vycm9yID0gcmFkaXhfZW5jb2RlKChDSEFSICop b3V0LCAoQ0hBUiAqKWluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5n dGgsICZsZW4yLCBSQURJWF9FTkNPREUpKQorICAgICAgICAgICAgKSB7CisgICAgICAgICAgICBm cHJpbnRmKHN0ZGVyciwiQ291bGRuJ3QgYmFzZSA2NCBlbmNvZGUgY29tbWFuZCAoJXMpXG4iLAor ICAgICAgICAgICAgICAgICAgICByYWRpeF9lcnJvcihrZXJyb3IpKTsKKyAgICAgICAgICAgIHJl dHVybigwKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZnRwX2RlYikKKyAgICAgICAgICBmcHJp bnRmKHN0ZGVyciwgInNjb21tYW5kKCVzKVxuZW5jb2RpbmcgJWQgYnl0ZXNcbiIsIHMsIGxlbmd0 aCk7CisgICAgICAgIGxlbjIgPSBja21ha21zZyhvdXQsCisJCQlGVFBfQlVGU0laLAorCQkJZnRw X2NwbCA9PSBGUExfUFJWID8gIkVOQyAiIDogIk1JQyAiLAorICAgICAgICAgICAgICAgICAgICAg ICAgaW4sCisJCQkiXHJcbiIsCisJCQlOVUxMCisJCQkpOworICAgICAgICBzZW5kKGNzb2NrZXQs KFNFTkRBUkcyVFlQRSlvdXQsbGVuMiwwKTsKKyAgICB9IGVsc2UgeworICAgICAgICBjaGFyIG91 dFtGVFBfQlVGU0laXTsKKyAgICAgICAgaW50IGxlbiA9IGNrbWFrbXNnKG91dCxGVFBfQlVGU0la LHMsIlxyXG4iLE5VTEwsTlVMTCk7CisgICAgICAgIHNlbmQoY3NvY2tldCwoU0VOREFSRzJUWVBF KW91dCxsZW4sMCk7CisgICAgfQorICAgIHJldHVybigxKTsKK30KKworc3RhdGljIGludAorbXln ZXRjKCkgeworICAgIHN0YXRpYyBjaGFyIGluYnVmWzQwOTZdOworICAgIHN0YXRpYyBpbnQgYnAg PSAwLCBlcCA9IDA7CisgICAgaW50IHJjOworCisgICAgaWYgKGJwID09IGVwKSB7CisgICAgICAg IGJwID0gZXAgPSAwOworI2lmZGVmIENLX1NTTAorICAgICAgICBpZiAoc3NsX2Z0cF9hY3RpdmVf ZmxhZykgeworICAgICAgICAgICAgaW50IGVycm9yOworICAgICAgICAgICAgcmMgPSBTU0xfcmVh ZChzc2xfZnRwX2NvbixpbmJ1Ziw0MDk2KTsKKyAgICAgICAgICAgIGVycm9yID0gU1NMX2dldF9l cnJvcihzc2xfZnRwX2NvbixyYyk7CisgICAgICAgICAgICBzd2l0Y2ggKGVycm9yKSB7CisgICAg ICAgICAgICAgIGNhc2UgU1NMX0VSUk9SX05PTkU6CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgICAgICAgIGNhc2UgU1NMX0VSUk9SX1dBTlRfV1JJVEU6CisgICAgICAgICAgICAgIGNh c2UgU1NMX0VSUk9SX1dBTlRfUkVBRDoKKyAgICAgICAgICAgICAgICByZXR1cm4oMCk7CisgICAg ICAgICAgICAgIGNhc2UgU1NMX0VSUk9SX1NZU0NBTEw6CisgICAgICAgICAgICAgICAgaWYgKHJj ID09IDApIHsgICAgICAgICAgLyogRU9GICovCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICAgICAgICAgIH0gZWxzZSB7CisjaWZkZWYgTlQKKyAgICAgICAgICAgICAgICAgICAg aW50IGdsZSA9IEdldExhc3RFcnJvcigpOworI2VuZGlmIC8qIE5UICovCisgICAgICAgICAgICAg ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgY2FzZSBTU0xf RVJST1JfV0FOVF9YNTA5X0xPT0tVUDoKKyAgICAgICAgICAgICAgY2FzZSBTU0xfRVJST1JfU1NM OgorICAgICAgICAgICAgICBjYXNlIFNTTF9FUlJPUl9aRVJPX1JFVFVSTjoKKyAgICAgICAgICAg ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg ICAgfSBlbHNlCisjZW5kaWYgLyogQ0tfU1NMICovCisgICAgICAgICAgcmMgPSByZWN2KGNzb2Nr ZXQsKGNoYXIgKilpbmJ1Ziw0MDk2LDApOworICAgICAgICBpZiAocmMgPD0gMCkKKyAgICAgICAg ICByZXR1cm4oRU9GKTsKKyAgICAgICAgZXAgPSByYzsKKyAgICB9CisgICAgcmV0dXJuKGluYnVm W2JwKytdKTsKK30KKworLyogIHggbCBhIHQgZSBjICAtLSAgVHJhbnNsYXRlIGEgY2hhcmFjdGVy ICAqLworLyoKKyAgICBDYWxsIHdpdGg6CisgICAgICBmYyAgICA9IEZ1bmN0aW9uIGNvZGU6IDAg PSB0cmFuc2xhdGUsIDEgPSBpbml0aWFsaXplLgorICAgICAgYyAgICAgPSBDaGFyYWN0ZXIgKGFz IGludCkuCisgICAgICBpbmNzICA9IEluZGV4IG9mIGNoYXJzZXQgdG8gdHJhbnNsYXRlIGZyb20u CisgICAgICBvdXRjcyA9IEluZGV4IG9mIGNoYXJzZXQgdG8gdHJhbnNsYXRlIHRvLgorCisgICAg UmV0dXJuczoKKyAgICAgIDA6IE9LCisgICAgIC0xOiBFcnJvcgorKi8KK3N0YXRpYyBpbnQKK3hs YXRlYyhmYyxjLGluY3Msb3V0Y3MpIGludCBmYywgYywgaW5jcywgb3V0Y3M7IHsKKyNpZmRlZiBO T0NTRVRTCisgICAgcmV0dXJuKGMpOworI2Vsc2UKKyAgICBzdGF0aWMgY2hhciBidWZbMTI4XTsK KyAgICBzdGF0aWMgaW50IGN4OworICAgIGludCBjMCwgYzE7CisKKyAgICBpZiAoZmMgPT0gMSkg eyAgICAgICAgICAgICAgICAgICAgICAvKiBJbml0aWFsaXplICovCisgICAgICAgIGN4ID0gMDsg ICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2F0Y2gtdXAgYnVmZmVyIHdyaXRlIGluZGV4ICov CisgICAgICAgIHhnbmJwID0gYnVmOyAgICAgICAgICAgICAgICAgICAgLyogQ2F0Y2gtdXAgYnVm ZmVyIHJlYWQgcG9pbnRlciAqLworICAgICAgICBidWZbMF0gPSBOVUw7ICAgICAgICAgICAgICAg ICAgIC8qIEJ1ZmZlciBpcyBlbXB0eSAqLworICAgICAgICByZXR1cm4oMCk7CisgICAgfQorICAg IGlmIChjeCA+PSAxMjcpIHsgICAgICAgICAgICAgICAgICAgIC8qIENhdGNoLXVwIGJ1ZmZlciBm dWxsICovCisgICAgICAgIGRlYnVnKEYxMDAsInhsYXRlYyBvdmVyZmxvdyIsIiIsMCk7IC8qIChz aG91bGRuJ3QgaGFwcGVuKSAqLworICAgICAgICBwcmludGYoIj9UcmFuc2xhdGlvbiBidWZmZXIg b3ZlcmZsb3dcbiIpOworICAgICAgICByZXR1cm4oLTEpOworICAgIH0KKyAgICAvKiBBZGQgY2hh ciB0byBidWZmZXIuICovCisgICAgLyogVGhlIGJ1ZmZlciB3b24ndCBncm93IHVubGVzcyBpbmNz IGlzIGEgbXVsdGlieXRlIHNldCwgZS5nLiBVVEYtOC4gKi8KKworICAgIGRlYnVnKEYwMDAsInhs YXRlYyBidWYiLGNraXRvYShjeCksYyk7CisgICAgYnVmW2N4KytdID0gYzsKKyAgICBidWZbY3hd ID0gTlVMOworCisgICAgd2hpbGUgKChjMCA9IHhnbmJ5dGUoRkNfVUNTMixpbmNzLHN0cmdldGMp KSA+IC0xKSB7CisgICAgICAgIGlmICh4cG5ieXRlKGMwLFRDX1VDUzIsb3V0Y3MsTlVMTCkgPCAw KQkvKiAoTlVMTCB3YXMgeHByaW50YykgKi8KKyAgICAgICAgICByZXR1cm4oLTEpOworICAgIH0K KyAgICAvKiBJZiB3ZSdyZSBjYXVnaHQgdXAsIHJlaW5pdGlhbGl6ZSB0aGUgYnVmZmVyICovCisg ICAgcmV0dXJuKChjeCA9PSAoeGduYnAgLSBidWYpKSA/IHhsYXRlYygxLDAsMCwwKSA6IDApOwor I2VuZGlmIC8qIE5PQ1NFVFMgKi8KK30KKworCisvKiAgcCBhIHIgcyBlIGYgZSBhIHQgICovCisK Ky8qIE5vdGU6IGZvciBjb252ZW5pZW5jZSB3ZSBhbGlnbiBrZXl3b3JkIHZhbHVlcyB3aXRoIHRh YmxlIGluZGljZXMgKi8KKy8qIElmIHlvdSBuZWVkIHRvIGluc2VydCBhIG5ldyBrZXl3b3JkLCBh ZGp1c3QgdGhlIFNGVF94eHggZGVmaW5pdGlvbnMgKi8KKworc3RhdGljIHN0cnVjdCBrZXl0YWIg ZmVhdHRhYltdID0geworICAgIHsgIiQkJCQiLCAwLCAgICAgICAgMCB9LAkJLyogRHVtbXkgZm9y IHNmdHRhYlswXSAqLworICAgIHsgIkFVVEgiLCBTRlRfQVVUSCwgMCB9LAorICAgIHsgIkxBTkci LCBTRlRfTEFORywgMCB9LAorICAgIHsgIk1EVE0iLCBTRlRfTURUTSwgMCB9LAorICAgIHsgIk1M U1QiLCBTRlRfTUxTVCwgMCB9LAorICAgIHsgIlBCU1oiLCBTRlRfUEJTWiwgMCB9LAorICAgIHsg IlBST1QiLCBTRlRfUFJPVCwgMCB9LAorICAgIHsgIlJFU1QiLCBTRlRfUkVTVCwgMCB9LAorICAg IHsgIlNJWkUiLCBTRlRfU0laRSwgMCB9LAorICAgIHsgIlRWRlMiLCBTRlRfVFZGUywgMCB9LAor ICAgIHsgIlVURjgiLCBTRlRfVVRGOCwgMCB9Cit9Oworc3RhdGljIGludCBuZmVhdHRhYiA9IChz aXplb2YoZmVhdHRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpOworCisjZGVmaW5lIEZBQ1Rf Q1NFVCAgMQorI2RlZmluZSBGQUNUX0NSRUEgIDIKKyNkZWZpbmUgRkFDVF9MQU5HICAzCisjZGVm aW5lIEZBQ1RfTVRZUCAgNAorI2RlZmluZSBGQUNUX01EVE0gIDUKKyNkZWZpbmUgRkFDVF9QRVJN ICA2CisjZGVmaW5lIEZBQ1RfU0laRSAgNworI2RlZmluZSBGQUNUX1RZUEUgIDgKKyNkZWZpbmUg RkFDVF9VTklRICA5CisKK3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIGZhY3R0YWJbXSA9IHsKKyAgICB7 ICJDSEFSU0VUIiwgICAgRkFDVF9DU0VULCAwIH0sCisgICAgeyAiQ1JFQVRFIiwgICAgIEZBQ1Rf Q1JFQSwgMCB9LAorICAgIHsgIkxBTkciLCAgICAgICBGQUNUX0xBTkcsIDAgfSwKKyAgICB7ICJN RURJQS1UWVBFIiwgRkFDVF9NVFlQLCAwIH0sCisgICAgeyAiTU9ESUZZIiwgICAgIEZBQ1RfTURU TSwgMCB9LAorICAgIHsgIlBFUk0iLCAgICAgICBGQUNUX1BFUk0sIDAgfSwKKyAgICB7ICJTSVpF IiwgICAgICAgRkFDVF9TSVpFLCAwIH0sCisgICAgeyAiVFlQRSIsICAgICAgIEZBQ1RfVFlQRSwg MCB9LAorICAgIHsgIlVOSVFVRSIsICAgICBGQUNUX1VOSVEsIDAgfQorfTsKK3N0YXRpYyBpbnQg bmZhY3R0YWIgPSAoc2l6ZW9mKGZhY3R0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKKwor c3RhdGljIHN0cnVjdCBrZXl0YWIgZnR5cHRhYltdID0geworICAgIHsgIkNESVIiLCBGVFlQX0NE SVIsIDAgfSwKKyAgICB7ICJESVIiLCAgRlRZUF9ESVIsICAwIH0sCisgICAgeyAiRklMRSIsIEZU WVBfRklMRSwgMCB9LAorICAgIHsgIlBESVIiLCBGVFlQX1BESVIsIDAgfQorfTsKK3N0YXRpYyBp bnQgbmZ0eXB0YWIgPSAoc2l6ZW9mKGZ0eXB0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsK Kworc3RhdGljIFZPSUQKK3BhcnNlZmVhdChzKSBjaGFyICogczsgewkJLyogUGFyc2UgYSBGRUFU VVJFIHJlc3BvbnNlICovCisgICAgY2hhciBrd2J1Zls4XTsKKyAgICBpbnQgaSwgeDsKKyAgICBp ZiAoIXMpIHJldHVybjsKKyAgICBpZiAoISpzKSByZXR1cm47CisgICAgd2hpbGUgKCpzIDwgJyEn KQorICAgICAgcysrOworICAgIGZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwlpZiAoc1tpXSA8 ICchJykKKwkgIGJyZWFrOworCWt3YnVmW2ldID0gc1tpXTsKKyAgICB9CisgICAgaWYgKHNbaV0g JiYgc1tpXSAhPSBTUCAmJiBzW2ldICE9IENSICYmIHNbaV0gIT0gTEYpCisgICAgICByZXR1cm47 CisgICAga3didWZbaV0gPSBOVUw7CisgICAgLyogeGxvb2t1cCByZXF1aXJlcyBhIGZ1bGwgKGJ1 dCBjYXNlIGluZGVwZW5kZW50KSBtYXRjaCAqLworICAgIGkgPSB4bG9va3VwKGZlYXR0YWIsa3di dWYsbmZlYXR0YWIsJngpOworICAgIGRlYnVnKEYxMTEsImZ0cCBwYXJzZWZlYXQiLHMsaSk7Cisg ICAgaWYgKGkgPCAwIHx8IGkgPiAxNSkKKyAgICAgIHJldHVybjsKKworICAgIHN3aXRjaCAoaSkg eworICAgICAgY2FzZSBTRlRfTURUTToJCQkvKiBDb250cm9sbGVkIGJ5IEVOQUJMRS9ESVNBQkxF ICovCisJc2Z0dGFiW2ldID0gbWR0bW9rOworCWlmIChtZHRtb2spIHNmdHRhYlswXSsrOworCWJy ZWFrOworICAgICAgY2FzZSBTRlRfTUxTVDoJCQkvKiBkaXR0byAqLworCXNmdHRhYltpXSA9IG1s c3RvazsKKwlpZiAobWxzdG9rKSBzZnR0YWJbMF0rKzsKKwlicmVhazsKKyAgICAgIGNhc2UgU0ZU X1NJWkU6CQkJLyogZGl0dG8gKi8KKwlzZnR0YWJbaV0gPSBzaXplb2s7CisJaWYgKHNpemVvaykg c2Z0dGFiWzBdKys7CisJYnJlYWs7CisgICAgICBjYXNlIFNGVF9BVVRIOgkJCS8qIGRpdHRvICov CisJc2Z0dGFiW2ldID0gZnRwX2F1dDsKKwlpZiAoZnRwX2F1dCkgc2Z0dGFiWzBdKys7CisJYnJl YWs7CisgICAgICBkZWZhdWx0OgkJCQkvKiBPdGhlcnMgKi8KKwlzZnR0YWJbMF0rKzsKKwlzZnR0 YWJbaV0rKzsKKyAgICB9Cit9CisKK3N0YXRpYyBjaGFyICoKK3BhcnNlZmFjdHMocykgY2hhciAq IHM7IHsJCS8qIFBhcnNlIE1MU1tEVF0gRmlsZSBGYWN0cyAqLworICAgIGNoYXIgKiBwOworICAg IGludCBpLCBqLCB4OworICAgIGlmICghcykgcmV0dXJuKE5VTEwpOworICAgIGlmICghKnMpIHJl dHVybihOVUxMKTsKKworICAgIC8qIE1heWJlIHdlIHNob3VsZCBtYWtlIGEgY29weSBvZiBzIHNv IHdlIGNhbiBwb2tlIGl0Li4uICovCisKKyAgICB3aGlsZSAoKHAgPSBja3N0cmNocihzLCc9Jykp KSB7CisJKnAgPSBOVUw7CQkJLyogcyBwb2ludHMgdG8gZmFjdCAqLworCWkgPSB4bG9va3VwKGZh Y3R0YWIscyxuZmFjdHRhYiwmeCk7IAorCWRlYnVnKEYxMTEsImZ0cCBwYXJzZWZhY3QgZmFjdCIs cyxpKTsKKwkqcCA9ICc9JzsKKwlzID0gcCsxOwkJCS8qIE5vdyBzIHBvaW50cyB0byBhcmcgKi8K KwlwID0gY2tzdHJjaHIocywnOycpOworICAgICAgICBpZiAoIXApCisJICBwID0gY2tzdHJjaHIo cyxTUCk7CisJaWYgKCFwKSB7CisJICAgIGRlYnVnKEYxMTAsImZ0cCBwYXJzZWZhY3QgZW5kLW9m LXZhbCBzZWFyY2ggZmFpbCIscywwKTsKKwkgICAgYnJlYWs7CisJfQorCSpwID0gTlVMOworCWRl YnVnKEYxMTAsImZ0cCBwYXJzZWZhY3QgdmFsdSIscywwKTsKKwlzd2l0Y2ggKGkpIHsKKwkgIGNh c2UgRkFDVF9DU0VUOgkJLyogSWdub3JlIHRoZXNlIGZvciBub3cgKi8KKwkgIGNhc2UgRkFDVF9D UkVBOgorCSAgY2FzZSBGQUNUX0xBTkc6CisJICBjYXNlIEZBQ1RfUEVSTToKKwkgIGNhc2UgRkFD VF9NVFlQOgorCSAgY2FzZSBGQUNUX1VOSVE6CisJICAgIGJyZWFrOworCSAgY2FzZSBGQUNUX01E VE06CQkvKiBNb2R0aW1lICovCisJICAgIG1ha2VzdHIoJmhhdmVtZHRtLHMpOworCSAgICBkZWJ1 ZyhGMTEwLCJmdHAgcGFyc2VmYWN0IG1kdG0iLGhhdmVtZHRtLDApOworCSAgICBicmVhazsKKwkg IGNhc2UgRkFDVF9TSVpFOgkJLyogU2l6ZSAqLworCSAgICBoYXZlc2l6ZSA9IGNrYXRvZnMocyk7 CisJICAgIGRlYnVnKEYxMDEsImZ0cCBwYXJzZWZhY3Qgc2l6ZSIsIiIsaGF2ZXNpemUpOworCSAg ICBicmVhazsKKwkgIGNhc2UgRkFDVF9UWVBFOgkJLyogVHlwZSAqLworCSAgICBqID0geGxvb2t1 cChmdHlwdGFiLHMsbmZ0eXB0YWIsTlVMTCk7CisJICAgIGRlYnVnKEYxMTEsImZ0cCBwYXJzZWZh Y3QgdHlwZSIscyxqKTsKKwkgICAgaGF2ZXR5cGUgPSAoaiA8IDEpID8gMCA6IGo7CisJICAgIGJy ZWFrOworCX0KKwkqcCA9ICc7JzsKKwlzID0gcCsxOwkJCS8qIHMgcG9pbnRzIG5leHQgZmFjdCBv ciBuYW1lICovCisgICAgfQorICAgIHdoaWxlICgqcyA9PSBTUCkJCQkvKiBTa2lwIHBhc3Qgc3Bh Y2VzLiAqLworICAgICAgcysrOworICAgIGlmICghKnMpCQkJCS8qIE1ha2Ugc3VyZSB3ZSBzdGls bCBoYXZlIGEgbmFtZSAqLworICAgICAgcyA9IE5VTEw7CisgICAgZGVidWcoRjExMCwiZnRwIHBh cnNlZmFjdCBuYW1lIixzLDApOworICAgIHJldHVybihzKTsKK30KKworLyogIGcgZSB0IHIgZSBw IGwgeSAgLS0gICh0byBhbiBGVFAgY29tbWFuZCBzZW50IHRvIHNlcnZlcikgICovCisKKy8qIHZi bSA9IDEgKHZlcmJvc2UpOyAwIChxdWlldCBleGNlcHQgZm9yIGVycm9yIG1lc3NhZ2VzKTsgOSAo c3VwZXIgcXVpZXQpICovCisKK3N0YXRpYyBpbnQKK2dldHJlcGx5KGV4cGVjdGVvZixsY3MscmNz LHZibSxmYykgaW50IGV4cGVjdGVvZiwgbGNzLCByY3MsIHZibSwgZmM7IHsKKyAgICAvKiBsY3Ms IHJjcywgdmJtIHBhcmFtZXRlcnMgYXMgaW4gZnRwY21kKCkgKi8KKyAgICByZWdpc3RlciBpbnQg aSwgYywgbjsKKyAgICByZWdpc3RlciBpbnQgZGlnOworICAgIHJlZ2lzdGVyIGNoYXIgKmNwOwor ICAgIGludCB4bGF0ZSA9IDA7CisgICAgaW50IGNvdW50ID0gMDsKKyAgICBpbnQgYXV0aCA9IDA7 CisgICAgaW50IG9yaWdpbmFsY29kZSA9IDAsIGNvbnRpbnVhdGlvbiA9IDA7CisgICAgc2lnX3Qg b2xkaW50cjsKKyAgICBpbnQgcGZsYWcgPSAwOworICAgIGNoYXIgKnB0ID0gcGFzdjsKKyAgICBj aGFyIGlidWZbRlRQX0JVRlNJWl0sIG9idWZbRlRQX0JVRlNJWl07IC8qICh0aGVzZSBhcmUgcHJl dHR5IGJpZy4uLikgKi8KKyAgICBpbnQgc2FmZSA9IDA7CisgICAgaW50IHhxdWlldCA9IDA7CisK KyAgICBhdXRoID0gKGZjID09IEdSRl9BVVRIKTsKKworI2lmbmRlZiBOT0NTRVRTCisgICAgZGVi dWcoRjEwMSwiZnRwIGdldHJlcGx5IGxjcyIsIiIsbGNzKTsKKyAgICBkZWJ1ZyhGMTAxLCJmdHAg Z2V0cmVwbHkgcmNzIiwiIixyY3MpOworICAgIGlmIChsY3MgPiAtMSAmJiByY3MgPiAtMSAmJiBs Y3MgIT0gcmNzKSB7CisgICAgICAgIHhsYXRlID0gMTsKKyAgICAgICAgaW5pdHhsYXRlKHJjcyxs Y3MpOworICAgICAgICB4bGF0ZWMoMSwwLHJjcyxsY3MpOworICAgIH0KKyNlbmRpZiAvKiBOT0NT RVRTICovCisgICAgZGVidWcoRjEwMSwiZnRwIGdldHJlcGx5IGZjIiwiIixmYyk7CisKKyAgICBp ZiAocXVpZXQpCisgICAgICB4cXVpZXQgPSAxOworICAgIGlmICh2Ym0gPT0gOSkgeworICAgICAg ICB4cXVpZXQgPSAxOworICAgICAgICB2Ym0gPSAwOworICAgIH0KKyAgICBpZiAoZnRwX2RlYikg ICAgICAgICAgICAgICAgICAgICAgICAvKiBERUJVRyAqLworICAgICAgdmJtID0gMTsKKyAgICBl bHNlIGlmIChxdWlldCB8fCBkcHlhY3RpdmUpICAgICAgICAvKiBRVUlFVCBvciBGaWxlIFRyYW5z ZmVyIEFjdGl2ZSAqLworICAgICAgdmJtID0gMDsKKyAgICBlbHNlIGlmICh2Ym0gPCAwKSAgICAg ICAgICAgICAgICAgICAvKiBWRVJCT1NFICovCisgICAgICB2Ym0gPSBmdHBfdmJtOworCisgICAg aWJ1ZlswXSA9ICdcMCc7CisgICAgaWYgKHJlcGx5X3BhcnNlKQorICAgICAgcmVwbHlfcHRyID0g cmVwbHlfYnVmOworICAgIGhhdmVzaWdpbnQgPSAwOworICAgIG9sZGludHIgPSBzaWduYWwoU0lH SU5ULCBjbWRjYW5jZWwpOworICAgIGZvciAoY291bnQgPSAwOzsgY291bnQrKykgeworICAgICAg ICBvYnVmWzBdID0gJ1wwJzsKKyAgICAgICAgZGlnID0gbiA9IGZ0cGNvZGUgPSBpID0gMDsKKyAg ICAgICAgY3AgPSBmdHBfcmVwbHlfc3RyOworICAgICAgICB3aGlsZSAoKGMgPSBpYnVmWzBdID8g aWJ1ZltpKytdIDogbXlnZXRjKCkpICE9ICdcbicpIHsKKyAgICAgICAgICAgIGlmIChjID09IElB QykgeyAgICAgICAgICAgICAvKiBIYW5kbGUgdGVsbmV0IGNvbW1hbmRzICovCisgICAgICAgICAg ICAgICAgc3dpdGNoIChjID0gbXlnZXRjKCkpIHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgV0lM TDoKKyAgICAgICAgICAgICAgICAgIGNhc2UgV09OVDoKKyAgICAgICAgICAgICAgICAgICAgYyA9 IG15Z2V0YygpOworICAgICAgICAgICAgICAgICAgICBvYnVmWzBdID0gSUFDOworICAgICAgICAg ICAgICAgICAgICBvYnVmWzFdID0gRE9OVDsKKyAgICAgICAgICAgICAgICAgICAgb2J1ZlsyXSA9 IGM7CisgICAgICAgICAgICAgICAgICAgIG9idWZbM10gPSBOVUw7CisjaWZkZWYgQ0tfU1NMCisg ICAgICAgICAgICAgICAgICAgIGlmIChzc2xfZnRwX2FjdGl2ZV9mbGFnKSB7CisgICAgICAgICAg ICAgICAgICAgICAgICBpbnQgZXJyb3IsIHJjOworICAgICAgICAgICAgICAgICAgICAgICAgcmMg PSBTU0xfd3JpdGUoc3NsX2Z0cF9jb24sb2J1ZiwzKTsKKyAgICAgICAgICAgICAgICAgICAgICAg IGVycm9yID0gU1NMX2dldF9lcnJvcihzc2xfZnRwX2NvbixyYyk7CisgICAgICAgICAgICAgICAg ICAgICAgICBzd2l0Y2ggKGVycm9yKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug U1NMX0VSUk9SX05PTkU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICAgICAgICAgICAgICAgICAgIGNhc2UgU1NMX0VSUk9SX1dBTlRfV1JJVEU6CisgICAgICAg ICAgICAgICAgICAgICAgICAgIGNhc2UgU1NMX0VSUk9SX1dBTlRfUkVBRDoKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICByZXR1cm4oMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGNh c2UgU1NMX0VSUk9SX1NZU0NBTEw6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJj ID09IDApIHsgLyogRU9GICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisjaWZkZWYgTlQKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGdsZSA9IEdldExhc3RFcnJvcigpOworI2Vu ZGlmIC8qIE5UICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fz ZSBTU0xfRVJST1JfV0FOVF9YNTA5X0xPT0tVUDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAg Y2FzZSBTU0xfRVJST1JfU1NMOgorICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFNTTF9F UlJPUl9aRVJPX1JFVFVSTjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlCisjZW5kaWYgLyogQ0tfU1NMICovCisgICAg ICAgICAgICAgICAgICAgICAgc2VuZChjc29ja2V0LChTRU5EQVJHMlRZUEUpb2J1ZiwzLDApOwor ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgRE86Cisg ICAgICAgICAgICAgICAgICBjYXNlIERPTlQ6CisgICAgICAgICAgICAgICAgICAgIGMgPSBteWdl dGMoKTsKKyAgICAgICAgICAgICAgICAgICAgb2J1ZlswXSA9IElBQzsKKyAgICAgICAgICAgICAg ICAgICAgb2J1ZlsxXSA9IFdPTlQ7CisgICAgICAgICAgICAgICAgICAgIG9idWZbMl0gPSBjOwor ICAgICAgICAgICAgICAgICAgICBvYnVmWzNdID0gTlVMOworI2lmZGVmIENLX1NTTAorICAgICAg ICAgICAgICAgICAgICBpZiAoc3NsX2Z0cF9hY3RpdmVfZmxhZykgeworICAgICAgICAgICAgICAg ICAgICAgICAgaW50IGVycm9yLCByYzsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJjID0gU1NM X3dyaXRlKHNzbF9mdHBfY29uLG9idWYsMyk7CisgICAgICAgICAgICAgICAgICAgICAgICBlcnJv ciA9IFNTTF9nZXRfZXJyb3Ioc3NsX2Z0cF9jb24scmMpOworICAgICAgICAgICAgICAgICAgICAg ICAgc3dpdGNoIChlcnJvcikgeworICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFNTTF9F UlJPUl9OT05FOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg ICAgICAgICAgICAgICAgICBjYXNlIFNTTF9FUlJPUl9XQU5UX1dSSVRFOgorICAgICAgICAgICAg ICAgICAgICAgICAgICBjYXNlIFNTTF9FUlJPUl9XQU5UX1JFQUQ6CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzaWduYWwoU0lHSU5ULG9sZGludHIpOworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcmV0dXJuKDApOworICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFNT TF9FUlJPUl9TWVNDQUxMOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyYyA9PSAw KSB7IC8qIEVPRiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworI2lmZGVmIE5UCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGludCBnbGUgPSBHZXRMYXN0RXJyb3IoKTsKKyNlbmRpZiAv KiBOVCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgU1NM X0VSUk9SX1dBTlRfWDUwOV9MT09LVVA6CisgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug U1NMX0VSUk9SX1NTTDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBTU0xfRVJST1Jf WkVST19SRVRVUk46CisgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgICAgICAgIH0gZWxzZQorI2VuZGlmIC8qIENLX1NTTCAqLworICAgICAgICAg ICAgICAgICAgICAgIHNlbmQoY3NvY2tldCwoU0VOREFSRzJUWVBFKW9idWYsMywwKTsKKyAgICAg ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg Y29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkaWcrKzsKKyAgICAgICAgICAg IGlmIChjID09IEVPRikgeworICAgICAgICAgICAgICAgIGlmIChleHBlY3Rlb2YpIHsKKyAgICAg ICAgICAgICAgICAgICAgc2lnbmFsKFNJR0lOVCxvbGRpbnRyKTsKKyAgICAgICAgICAgICAgICAg ICAgZnRwY29kZSA9IDIyMTsKKyAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEwMSwiZnRwIGdl dHJlcGx5IEVPRiIsIiIsZnRwY29kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybigwKTsK KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbG9zdHBlZXIoKTsKKyAgICAgICAg ICAgICAgICBpZiAoIXhxdWlldCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoZnRwX2RlYikK KyAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIjQyMSAiKTsKKyAgICAgICAgICAgICAgICAg ICAgcHJpbnRmKAorICAgICAgICAgICAgICAgICAgICAgICJTZXJ2aWNlIG5vdCBhdmFpbGFibGUs IGNvbm5lY3Rpb24gY2xvc2VkIGJ5IHNlcnZlclxuIik7CisgICAgICAgICAgICAgICAgICAgIGZm bHVzaChzdGRvdXQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzaWduYWwo U0lHSU5ULG9sZGludHIpOworICAgICAgICAgICAgICAgIGZ0cGNvZGUgPSA0MjE7CisgICAgICAg ICAgICAgICAgZGVidWcoRjEwMSwiZnRwIGdldHJlcGx5IEVPRiIsIiIsZnRwY29kZSk7CisgICAg ICAgICAgICAgICAgcmV0dXJuKDQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG4g PT0gMCkgewkJLyogRmlyc3QgZGlnaXQgKi8KKwkJbiA9IGM7CQkJLyogU2F2ZSBpdCAqLworCSAg ICB9CisgICAgICAgICAgICBpZiAoYXV0aF90eXBlICYmCisjaWZkZWYgQ0tfU1NMCisgICAgICAg ICAgICAgICAgIXNzbF9mdHBfYWN0aXZlX2ZsYWcgJiYKKyNlbmRpZiAvKiBDS19TU0wgKi8KKyAg ICAgICAgICAgICAgICAhaWJ1ZlswXSAmJiAobiA9PSAnNicgfHwgY29udGludWF0aW9uKSkgewor ICAgICAgICAgICAgICAgIGlmIChjICE9ICdccicgJiYgZGlnID4gNCkKKyAgICAgICAgICAgICAg ICAgIG9idWZbaSsrXSA9IGM7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg IGlmIChhdXRoX3R5cGUgJiYKKyNpZmRlZiBDS19TU0wKKyAgICAgICAgICAgICAgICAgICAgIXNz bF9mdHBfYWN0aXZlX2ZsYWcgJiYKKyNlbmRpZiAvKiBDS19TU0wgKi8KKyAgICAgICAgICAgICAg ICAgICAgIWlidWZbMF0gJiYgZGlnID09IDEgJiYgdmJtKQorICAgICAgICAgICAgICAgICAgcHJp bnRmKCJVbmF1dGhlbnRpY2F0ZWQgcmVwbHkgcmVjZWl2ZWQgZnJvbSBzZXJ2ZXI6XG4iKTsKKyAg ICAgICAgICAgICAgICBpZiAocmVwbHlfcGFyc2UpIHsKKyAgICAgICAgICAgICAgICAgICAgKnJl cGx5X3B0cisrID0gYzsKKyAgICAgICAgICAgICAgICAgICAgKnJlcGx5X3B0ciA9IE5VTDsKKyAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCghZHB5YWN0aXZlIHx8IGZ0cF9k ZWIpICYmIC8qIERvbid0IG1lc3MgdXAgeGZlciBkaXNwbGF5ICovCisgICAgICAgICAgICAgICAg ICAgIGZ0cF9jbWRsaW4gPCAyKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICgoYyAhPSAnXHIn KSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgKGZ0cF9kZWIgfHwgKCh2Ym0gfHwgKCFhdXRo ICYmIG4gPT0gJzUnKSkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIChkaWcgPiA0IHx8ICgg ZGlnIDw9IDQgJiYgIWlzZGlnaXQoYykgJiYgZnRwY29kZSA9PSAwCisgICAgICAgICAgICAgICAg ICAgICAgICApKSkpKQorICAgICAgICAgICAgICAgICAgICB7CisjaWZkZWYgRlRQX1BST1hZCisg ICAgICAgICAgICAgICAgICAgICAgICBpZiAoZnRwX3ByeCAmJiAoZGlnID09IDEgfHwgKGRpZyA9 PSA1ICYmIHZibSA9PSAwKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiJXM6 IixmdHBfaG9zdCk7CisjZW5kaWYgLyogRlRQX1BST1hZICovCisKKyAgICAgICAgICAgICAgICAg ICAgICAgIGlmICgheHF1aWV0KSB7CisjaWZkZWYgTk9DU0VUUworICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHByaW50ZigiJWMiLGMpOworI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpZiAoeGxhdGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGxhdGVj KDAsYyxyY3MsbGNzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIiVjIixjKTsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICB9CisjZW5kaWYgLyogTk9DU0VUUyAqLworICAgICAgICAgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGF1dGhfdHlwZSAmJgorI2lmZGVmIENLX1NTTAor ICAgICAgICAgICAgICAgICFzc2xfZnRwX2FjdGl2ZV9mbGFnICYmCisjZW5kaWYgLyogQ0tfU1NM ICovCisgICAgICAgICAgICAgICAgIWlidWZbMF0gJiYgbiAhPSAnNicpCisgICAgICAgICAgICAg IGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKGRpZyA8IDQgJiYgaXNkaWdpdChjKSkKKyAgICAg ICAgICAgICAgZnRwY29kZSA9IGZ0cGNvZGUgKiAxMCArIChjIC0gJzAnKTsKKyAgICAgICAgICAg IGlmICghcGZsYWcgJiYgZnRwY29kZSA9PSAyMjcpCisgICAgICAgICAgICAgIHBmbGFnID0gMTsK KyAgICAgICAgICAgIGlmIChkaWcgPiA0ICYmIHBmbGFnID09IDEgJiYgaXNkaWdpdChjKSkKKyAg ICAgICAgICAgICAgcGZsYWcgPSAyOworICAgICAgICAgICAgaWYgKHBmbGFnID09IDIpIHsKKyAg ICAgICAgICAgICAgICBpZiAoYyAhPSAnXHInICYmIGMgIT0gJyknKQorICAgICAgICAgICAgICAg ICAgKnB0KysgPSBjOworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAg ICAqcHQgPSAnXDAnOworICAgICAgICAgICAgICAgICAgICBwZmxhZyA9IDM7CisgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGRpZyA9PSA0ICYmIGMgPT0g Jy0nICYmIG4gIT0gJzYnKSB7CisgICAgICAgICAgICAgICAgaWYgKGNvbnRpbnVhdGlvbikKKyAg ICAgICAgICAgICAgICAgIGZ0cGNvZGUgPSAwOworICAgICAgICAgICAgICAgIGNvbnRpbnVhdGlv bisrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGNwIDwgJmZ0cF9yZXBseV9zdHJb RlRQX0JVRlNJWiAtIDFdKSB7CisgICAgICAgICAgICAgICAgKmNwKysgPSBjOworICAgICAgICAg ICAgICAgICpjcCA9IE5VTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAo ZGVibG9nIHx8CisjaWZkZWYgQ09NTUVOVAorLyoKKyAgU29tZXRpbWVzIHdlIG5lZWQgdG8gcHJp bnQgdGhlIHNlcnZlciByZXBseS4gIHByaW50bGluZXMgaXMgbm9uemVybyBmb3IgYW55CisgIGNv bW1hbmQgd2hlcmUgdGhlIHJlc3VsdHMgYXJlIHNlbnQgYmFjayBvbiB0aGUgY29udHJvbCBjb25u ZWN0aW9uIHJhdGhlcgorICB0aGFuIHRoZSBkYXRhIGNvbm5lY3Rpb24sIGUuZy4gU1RBVC4gIElu IHRoZSBUT1BTLTIwIGNhc2UsIGVhY2ggZmlsZSBsaW5lCisgIGhhcyBmdHBjb2RlIDIxMy4gIEJ1 dCBpZiB5b3UgZG8gdGhpcyB3aXRoIGEgVU5JWCBzZXJ2ZXIsIGl0IHNlbmRzICIyMTMtU3RhcnQK KyAgU1RBVCIsIDxsaW5lIHdpdGggZnRwY29kZSA9PSAwPiwgIjIxMy1FbmQiIG9yIHNvbWVzdWNo LiAgU28gd2hlbiBwcmludGxpbmVzCisgIGlzIG5vbnplcm8sIHdlIHdhbnQgdGhlIDIxMyBsaW5l cyBmcm9tIFRPUFMtMjAgYW5kIHdlIERPTidUIHdhbnQgdGhlIDIxMworICBsaW5lcyBmcm9tIFVO SVguICBGdXJ0aGVyIGV4cGVyaW1lbnRhdGlvbiBuZWVkZWQgd2l0aCBvdGhlciBzZXJ2ZXJzLiAg T2YKKyAgY291cnNlIFJGQzk1OSBpcyBtdXRlIGFzIHRvIHRoZSBmb3JtYXQgb2YgdGhlIHNlcnZl ciByZXBseS4KKworICAncHJpbnRsaW5lcycgaXMgYWxzbyB0cnVlIGZvciBQV0QgYW5kIEJZRS4K KyovCisJICAgIChwcmludGxpbmVzICYmICgoZnRwY29kZSA9PSAwKSB8fCAoc2VydmVydHlwZSA9 PSBTWVNfVE9QUzIwKSkpCisjZWxzZQorLyogTm8sIHdlIGNhbid0IGJlIHRoYXQgY2xldmVyIC0t IGl0IGJyZWFrcyBvdGhlciB0aGluZ3MgbGlrZSBSUFdELi4uICovCisgICAgICAgICAgICAocHJp bnRsaW5lcyAmJgorICAgICAgICAgICAgIChmdHBjb2RlICE9IDYzMSAmJiBmdHBjb2RlICE9IDYz MiAmJiBmdHBjb2RlICE9IDYzMykpCisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAgICAgICAg KSB7CisgICAgICAgICAgICBjaGFyICogcSA9IGNwOworICAgICAgICAgICAgY2hhciAqciA9IGZ0 cF9yZXBseV9zdHI7CisgICAgICAgICAgICAqcS0tID0gTlVMOyAgICAgICAgICAgICAgICAgLyog TlVMLXRlcm1pbmF0ZSAqLworICAgICAgICAgICAgd2hpbGUgKCpxIDwgJyEnICYmIHEgPiByKSAg IC8qIFN0cmlwIENSLCBldGMgKi8KKyAgICAgICAgICAgICAgKnEtLSA9IE5VTDsKKyAgICAgICAg ICAgIGlmICghZnRwX2RlYiAmJiBwcmludGxpbmVzKSB7IC8qIElmIHByaW50aW5nICovCisgICAg ICAgICAgICAgICAgaWYgKGZ0cGNvZGUgIT0gMCkgICAgICAgLyogc3RyaXAgZnRwY29kZSBpZiBh bnkgKi8KKyAgICAgICAgICAgICAgICAgIHIgKz0gNDsKKyNpZmRlZiBOT0NTRVRTCisgICAgICAg ICAgICAgICAgcHJpbnRmKCIlc1xuIixyKTsgICAgICAgLyogYW5kIHByaW50ICovCisjZWxzZQor ICAgICAgICAgICAgICAgIGlmICgheGxhdGUpIHsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRm KCIlc1xuIixyKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgewkJLyogVHJhbnNsYXRpbmcgKi8K KyAgICAgICAgICAgICAgICAgICAgeGduYnAgPSByOwkJLyogU2V0IHVwIHN0cmdldGMoKSAqLwor ICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKGMwID0geGduYnl0ZShGQ19VQ1MyLHJjcyxzdHJn ZXRjKSkgPiAtMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHhwbmJ5dGUoYzAsVENf VUNTMixsY3MsTlVMTCkgPCAwKSB7CS8qICh4cHJpbnRjKSAqLworICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHNpZ25hbChTSUdJTlQsb2xkaW50cik7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBwcmludGYoIlxuIik7CisgICAgICAgICAg ICAgICAgfQorI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor CWRlYnVnKEYxMTAsIkZUUCBSQ1ZEICIsZnRwX3JlcGx5X3N0ciwwKTsKKworCWlmIChmYyA9PSBH UkZfRkVBVCkgewkJLyogUGFyc2luZyBGRUFUIGNvbW1hbmQgcmVzcG9uc2U/ICovCisJICAgIGlm IChjb3VudCA9PSAwICYmIG4gPT0gJzInKSB7CisJCWludCBpOwkJCS8qIChSZSktaW5pdCBzZXJ2 ZXIgRkVBVHVyZSB0YWJsZSAqLworCQlkZWJ1ZyhGMTAwLCJmdHAgZ2V0cmVwbHkgY2xlYXJpbmcg ZmVhdHVyZSB0YWJsZSIsIiIsMCk7CisJCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQorCQkgIHNm dHRhYltpXSA9IDA7CisJICAgIH0gZWxzZSB7CisJCXBhcnNlZmVhdCgoY2hhciAqKWZ0cF9yZXBs eV9zdHIpOworCSAgICB9CisJfQorICAgICAgICBpZiAoYXV0aF90eXBlICYmCisjaWZkZWYgQ0tf U1NMCisgICAgICAgICAgICAhc3NsX2Z0cF9hY3RpdmVfZmxhZyAmJgorI2VuZGlmIC8qIENLX1NT TCAqLworICAgICAgICAgICAgICFpYnVmWzBdICYmIG4gIT0gJzYnKSB7CisgICAgICAgICAgICBz aWduYWwoU0lHSU5ULG9sZGludHIpOworICAgICAgICAgICAgcmV0dXJuKGdldHJlcGx5KGV4cGVj dGVvZixsY3MscmNzLHZibSxhdXRoKSk7CisgICAgICAgIH0KKyAgICAgICAgaWJ1ZlswXSA9IG9i dWZbaV0gPSAnXDAnOworICAgICAgICBpZiAoZnRwY29kZSAmJiBuID09ICc2JykKKyAgICAgICAg ICBpZiAoZnRwY29kZSAhPSA2MzEgJiYgZnRwY29kZSAhPSA2MzIgJiYgZnRwY29kZSAhPSA2MzMp IHsKKyAgICAgICAgICAgICAgcHJpbnRmKCJVbmtub3duIHJlcGx5OiAlZCAlc1xuIiwgZnRwY29k ZSwgb2J1Zik7CisgICAgICAgICAgICAgIG4gPSAnNSc7CisgICAgICAgICAgfSBlbHNlIHNhZmUg PSAoZnRwY29kZSA9PSA2MzEpOworICAgICAgICBpZiAob2J1ZlswXSAgICAgICAgICAgICAgICAg ICAgIC8qIGlmIHRoZXJlIGlzIGEgc3RyaW5nIHRvIGRlY29kZSAqLworI2lmZGVmIENLX1NTTAor ICAgICAgICAgICAgJiYgIXNzbF9mdHBfYWN0aXZlX2ZsYWcgICAgIC8qIGFuZCBub3QgU1NML1RM UyAqLworI2VuZGlmIC8qIENLX1NTTCAqLworICAgICAgICAgICAgKSB7CisgICAgICAgICAgICBp ZiAoIWF1dGhfdHlwZSkgeworICAgICAgICAgICAgICAgIHByaW50ZigiQ2Fubm90IGRlY29kZSBy ZXBseTpcbiVkICVzXG4iLCBmdHBjb2RlLCBvYnVmKTsKKyAgICAgICAgICAgICAgICBuID0gJzUn OworICAgICAgICAgICAgfQorI2lmbmRlZiBDS19FTkNSWVBUSU9OCisgICAgICAgICAgICBlbHNl IGlmIChmdHBjb2RlID09IDYzMikgeworICAgICAgICAgICAgICAgIHByaW50ZigiQ2Fubm90IGRl Y3J5cHQgJWQgcmVwbHk6ICVzXG4iLCBmdHBjb2RlLCBvYnVmKTsKKyAgICAgICAgICAgICAgICBu ID0gJzUnOworICAgICAgICAgICAgfQorI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KKyNpZmRl ZiBOT0NPTkZJREVOVElBTAorICAgICAgICAgICAgZWxzZSBpZiAoZnRwY29kZSA9PSA2MzMpIHsK KyAgICAgICAgICAgICAgICBwcmludGYoIkNhbm5vdCBkZWNyeXB0ICVkIHJlcGx5OiAlc1xuIiwg ZnRwY29kZSwgb2J1Zik7CisgICAgICAgICAgICAgICAgbiA9ICc1JzsKKyAgICAgICAgICAgIH0K KyNlbmRpZiAvKiBOT0NPTkZJREVOVElBTCAqLworICAgICAgICAgICAgZWxzZSB7CisgICAgICAg ICAgICAgICAgaW50IGxlbiA9IEZUUF9CVUZTSVo7CisgICAgICAgICAgICAgICAgaWYgKChrZXJy b3IgPSByYWRpeF9lbmNvZGUoKENIQVIgKilvYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChDSEFSICopaWJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICZsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUkFESVhfREVDT0RFKSkKKyAgICAgICAgICAgICAgICAgICAgKSB7CisgICAgICAgICAgICAg ICAgICAgIHByaW50ZigiQ2FuJ3QgZGVjb2RlIGJhc2UgNjQgcmVwbHkgJWQgKCVzKVxuXCIlc1wi XG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZnRwY29kZSwgcmFkaXhfZXJyb3Ioa2Vy cm9yKSwgb2J1Zik7CisgICAgICAgICAgICAgICAgICAgIG4gPSAnNSc7CisgICAgICAgICAgICAg ICAgfQorI2lmZGVmIEZUUF9TUlAKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChzdHJjbXAoYXV0 aF90eXBlLCAiU1JQIikgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICBpbnQgb3V0bGVuOwor ICAgICAgICAgICAgICAgICAgICBvdXRsZW4gPSBzcnBfZGVjb2RlKCFzYWZlLCAoQ0hBUiAqKWli dWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKENIQVIgKikgaWJ1 ZiwgbGVuKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG91dGxlbiA8IDApIHsKKyAgICAgICAg ICAgICAgICAgICAgICAgIHByaW50ZigiV2FybmluZzogJWQgcmVwbHkgJXMhXG4iLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGZ0cGNvZGUsIHNhZmUgPyAibW9kaWZpZWQiIDogImdh cmJsZWQiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG4gPSAnNSc7CisgICAgICAgICAgICAg ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBja3N0cm5jcHkoJmlidWZb b3V0bGVuXSwgIlxyXG4iLEZUUF9CVUZTSVotb3V0bGVuKTsKKyAgICAgICAgICAgICAgICAgICAg ICAgIGlmIChmdHBfZGViKQorICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIiVjOiIs IHNhZmUgPyAnUycgOiAnUCcpOworICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cisg ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisjZW5kaWYgLyogRlRQX1NS UCAqLworI2lmZGVmIEZUUF9LUkI0CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoc3RyY21wKGF1 dGhfdHlwZSwgIktFUkJFUk9TX1Y0IikgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICBpZiAo c2FmZSkgeworICAgICAgICAgICAgICAgICAgICAgICAga2Vycm9yID0ga3JiX3JkX3NhZmUoKENI QVIgKilpYnVmLCBsZW4sCisjaWZkZWYgS1JCNTI0CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBmdHBfY3JlZC5zZXNzaW9uLAorI2Vsc2UgLyogS1JCNTI0ICov CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZnRwX2NyZWQu c2Vzc2lvbiwKKyNlbmRpZiAvKiBLUkI1MjQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICZoaXNjdGxhZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJm15Y3RsYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICZmdHBfbXNnX2RhdGEKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7 CisgICAgICAgICAgICAgICAgICAgICAgICBrZXJyb3IgPSBrcmJfcmRfcHJpdigoQ0hBUiAqKWli dWYsIGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ0 cF9zY2hlZCwKKyNpZmRlZiBLUkI1MjQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGZ0cF9jcmVkLnNlc3Npb24sCisjZWxzZSAvKiBLUkI1MjQgKi8KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmdHBfY3JlZC5zZXNzaW9u LAorI2VuZGlmIC8qIEtSQjUyNCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJmhpc2N0bGFkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAmbXljdGxhZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJmZ0cF9tc2dfZGF0YQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg ICAgICAgICBpZiAoa2Vycm9yICE9IEtTVUNDRVNTKSB7CisgICAgICAgICAgICAgICAgICAgICAg ICBwcmludGYoIiVkIHJlcGx5ICVzISAoa3JiX3JkXyVzOiAlcylcbiIsIGZ0cGNvZGUsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FmZSA/ICJtb2RpZmllZCIgOiAiZ2FyYmxlZCIs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FmZSA/ICJzYWZlIiA6ICJwcml2IiwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrcmJfZ2V0X2Vycl90ZXh0KGtlcnJvcikp OworICAgICAgICAgICAgICAgICAgICAgICAgbiA9ICc1JzsKKyAgICAgICAgICAgICAgICAgICAg fSBlbHNlIGlmIChmdHBfbXNnX2RhdGEuYXBwX2xlbmd0aCA+PSBGVFBfQlVGU0laIC0gMykgewor ICAgICAgICAgICAgICAgICAgICAgICAga2Vycm9yID0gS0ZBSUxVUkU7CisgICAgICAgICAgICAg ICAgICAgICAgICBuID0gJzUnOworICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJyZXBs eSBkYXRhIHRvbyBsYXJnZSBmb3IgYnVmZmVyXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgfSBl bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmdHBfZGViKQorICAgICAgICAgICAg ICAgICAgICAgICAgICBwcmludGYoIiVjOiIsIHNhZmUgPyAnUycgOiAnUCcpOworICAgICAgICAg ICAgICAgICAgICAgICAgbWVtY3B5KGlidWYsZnRwX21zZ19kYXRhLmFwcF9kYXRhLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGZ0cF9tc2dfZGF0YS5hcHBfbGVuZ3RoKTsKKyAgICAg ICAgICAgICAgICAgICAgICAgIGNrc3RybmNweSgmaWJ1ZltmdHBfbXNnX2RhdGEuYXBwX2xlbmd0 aF0sICJcclxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVFBfQlVGU0la IC0gZnRwX21zZ19kYXRhLmFwcF9sZW5ndGgpOworICAgICAgICAgICAgICAgICAgICAgICAgY29u dGludWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisjZW5kaWYg LyogRlRQX0tSQjQgKi8KKyNpZmRlZiBGVFBfR1NTQVBJCisgICAgICAgICAgICAgICAgZWxzZSBp ZiAoc3RyY21wKGF1dGhfdHlwZSwgIkdTU0FQSSIpID09IDApIHsKKyAgICAgICAgICAgICAgICAg ICAgZ3NzX2J1ZmZlcl9kZXNjIHhtaXRfYnVmLCBtc2dfYnVmOworICAgICAgICAgICAgICAgICAg ICBPTV91aW50MzIgbWFqX3N0YXQsIG1pbl9zdGF0OworICAgICAgICAgICAgICAgICAgICBpbnQg Y29uZl9zdGF0ZTsKKyAgICAgICAgICAgICAgICAgICAgeG1pdF9idWYudmFsdWUgPSBpYnVmOwor ICAgICAgICAgICAgICAgICAgICB4bWl0X2J1Zi5sZW5ndGggPSBsZW47CisgICAgICAgICAgICAg ICAgICAgIC8qIGRlY3J5cHQvdmVyaWZ5IHRoZSBtZXNzYWdlICovCisgICAgICAgICAgICAgICAg ICAgIGNvbmZfc3RhdGUgPSBzYWZlOworICAgICAgICAgICAgICAgICAgICBtYWpfc3RhdCA9IGdz c191bnNlYWwoJm1pbl9zdGF0LCBnY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICZ4bWl0X2J1ZiwgJm1zZ19idWYsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAmY29uZl9zdGF0ZSwgTlVMTCk7CisgICAgICAgICAgICAg ICAgICAgIGlmIChtYWpfc3RhdCAhPSBHU1NfU19DT01QTEVURSkgeworICAgICAgICAgICAgICAg ICAgICAgICAgdXNlcl9nc3NfZXJyb3IobWFqX3N0YXQsIG1pbl9zdGF0LAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgImZhaWxlZCB1bnNlYWxpbmcgcmVwbHkiKTsKKyAg ICAgICAgICAgICAgICAgICAgICAgIG4gPSAnNSc7CisgICAgICAgICAgICAgICAgICAgIH0gZWxz ZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtZW1jcHkoaWJ1ZiwgbXNnX2J1Zi52YWx1ZSwg bXNnX2J1Zi5sZW5ndGgpOworICAgICAgICAgICAgICAgICAgICAgICAgY2tzdHJuY3B5KCZpYnVm W21zZ19idWYubGVuZ3RoXSwgIlxyXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEZUUF9CVUZTSVotbXNnX2J1Zi5sZW5ndGgpOworICAgICAgICAgICAgICAgICAgICAgICAg Z3NzX3JlbGVhc2VfYnVmZmVyKCZtaW5fc3RhdCwmbXNnX2J1Zik7CisgICAgICAgICAgICAgICAg ICAgICAgICBpZiAoZnRwX2RlYikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIl YzoiLCBzYWZlID8gJ1MnIDogJ1AnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorI2VuZGlmIC8qIEZU UF9HU1NBUEkgKi8KKyAgICAgICAgICAgICAgICAvKiBPdGhlciBhdXRoIHR5cGVzIGdvIGhlcmUu Li4gKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICgoIWRweWFjdGl2ZSB8fCBm dHBfZGViKSAmJiBmdHBfY21kbGluIDwgMiAmJgorICAgICAgICAgICAgICAgICAgICF4cXVpZXQg JiYgKHZibSB8fCAoIWF1dGggJiYgKG4gPT0gJzQnIHx8IG4gPT0gJzUnKSkpKSB7CisjaWZkZWYg Tk9DU0VUUworICAgICAgICAgICAgcHJpbnRmKCIlYyIsYyk7CisjZWxzZQorICAgICAgICAgICAg aWYgKHhsYXRlKSB7CisgICAgICAgICAgICAgICAgeGxhdGVjKDAsYyxyY3MsbGNzKTsKKyAgICAg ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCIlYyIsYyk7CisgICAgICAg ICAgICB9CisjZW5kaWYgLyogTk9DU0VUUyAqLworICAgICAgICAgICAgZmZsdXNoIChzdGRvdXQp OworICAgICAgICB9CisgICAgICAgIGlmIChjb250aW51YXRpb24gJiYgZnRwY29kZSAhPSBvcmln aW5hbGNvZGUpIHsKKyAgICAgICAgICAgIGlmIChvcmlnaW5hbGNvZGUgPT0gMCkKKyAgICAgICAg ICAgICAgb3JpZ2luYWxjb2RlID0gZnRwY29kZTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg ICAgICB9CisgICAgICAgICpjcCA9ICdcMCc7CisgICAgICAgIGlmIChuICE9ICcxJykKKyAgICAg ICAgICBjcGVuZCA9IDA7CisgICAgICAgIHNpZ25hbChTSUdJTlQsb2xkaW50cik7CisgICAgICAg IGlmIChmdHBjb2RlID09IDQyMSB8fCBvcmlnaW5hbGNvZGUgPT0gNDIxKSB7CisJICAgIGxvc3Rw ZWVyKCk7CisJICAgIGlmICgheHF1aWV0ICYmICFmdHBfZGViKQorCSAgICAgIHByaW50ZigiJXNc biIscmVwbHlfYnVmKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoKGNhbmNlbGZpbGUgIT0gMCkg JiYKKyNpZm5kZWYgVUxUUklYMworICAgICAgICAgICAgLyogVWx0cml4IDMuMCBjYyBvYmplY3Rz IHZpb2xlbnRseSB0byB0aGlzIGNsYXVzZSAqLworICAgICAgICAgICAgKG9sZGludHIgIT0gY21k Y2FuY2VsKSAmJgorI2VuZGlmIC8qIFVMVFJJWDMgKi8KKyAgICAgICAgICAgIChvbGRpbnRyICE9 IFNJR19JR04pKSB7CisgICAgICAgICAgICBpZiAob2xkaW50cikKKyAgICAgICAgICAgICAgKCpv bGRpbnRyKShTSUdJTlQpOworICAgICAgICB9CisgICAgICAgIGlmIChyZXBseV9wYXJzZSkgewor ICAgICAgICAgICAgKnJlcGx5X3B0ciA9ICdcMCc7CisgICAgICAgICAgICBpZiAoKHJlcGx5X3B0 ciA9IGNrc3Ryc3RyKHJlcGx5X2J1ZiwgcmVwbHlfcGFyc2UpKSkgeworICAgICAgICAgICAgICAg IHJlcGx5X3BhcnNlID0gcmVwbHlfcHRyICsgc3RybGVuKHJlcGx5X3BhcnNlKTsKKyAgICAgICAg ICAgICAgICBpZiAoKHJlcGx5X3B0ciA9IGNrc3RycGJyayhyZXBseV9wYXJzZSwgIiBcciIpKSkK KyAgICAgICAgICAgICAgICAgICpyZXBseV9wdHIgPSAnXDAnOworICAgICAgICAgICAgfSBlbHNl CisgICAgICAgICAgICAgIHJlcGx5X3BhcnNlID0gcmVwbHlfcHRyOworICAgICAgICB9CisgICAg ICAgIHdoaWxlICgqY3AgPCAnIScgJiYgY3AgPiBmdHBfcmVwbHlfc3RyKSAvKiBSZW1vdmUgdHJh aWxpbmcganVuayAqLworICAgICAgICAgICpjcC0tID0gTlVMOworICAgICAgICBkZWJ1ZyhGMTEx LCJmdHAgZ2V0cmVwbHkiLGZ0cF9yZXBseV9zdHIsbiAtICcwJyk7CisgICAgICAgIHJldHVybihu IC0gJzAnKTsKKyAgICB9IC8qIGZvciAoOzspICovCit9CisKKyNpZmRlZiBCU0RTRUxFQ1QKK3N0 YXRpYyBpbnQKKyNpZmRlZiBDS19BTlNJQworZW1wdHkoZmRfc2V0ICogbWFzaywgaW50IHNlYykK KyNlbHNlCitlbXB0eShtYXNrLCBzZWMpIGZkX3NldCAqIG1hc2s7IGludCBzZWM7CisjZW5kaWYg LyogQ0tfQU5TSUMgKi8KK3sKKyAgICBzdHJ1Y3QgdGltZXZhbCB0OworICAgIHQudHZfc2VjID0g KGxvbmcpIHNlYzsKKyAgICB0LnR2X3VzZWMgPSAwTDsKKyAgICBkZWJ1ZyhGMTAwLCJmdHAgZW1w dHkgY2FsbGluZyBzZWxlY3QuLi4iLCIiLDApOworI2lmZGVmIElOVFNFTEVDVAorICAgIHggPSBz ZWxlY3QoMzIsIChpbnQgKiltYXNrLCBOVUxMLCBOVUxMLCAmdCk7CisjZWxzZQorICAgIHggPSBz ZWxlY3QoMzIsIG1hc2ssIChmZF9zZXQgKikgMCwgKGZkX3NldCAqKSAwLCAmdCk7CisjZW5kaWYg LyogSU5UU0VMRUNUICovCisgICAgZGVidWcoRjEwMSwiZnRwIGVtcHR5IHNlbGVjdCIsIiIseCk7 CisgICAgcmV0dXJuKHgpOworfQorI2Vsc2UgLyogQlNEU0VMRUNUICovCisjaWZkZWYgSUJNU0VM RUNUCitzdGF0aWMgaW50CitlbXB0eShtYXNrLCBjbnQsIHNlYykgaW50ICogbWFzaywgc2VjOwor ICAgICAgICAgICAgICAgICAgICAgIGludCAgIGNudDsKK3sKKyAgICByZXR1cm4oc2VsZWN0KG1h c2ssY250LDAsMCxzZWMqMTAwMCkpOworfQorI2VuZGlmIC8qIElCTVNFTEVDVCAqLworI2VuZGlm IC8qIEJTRFNFTEVDVCAqLworCitzdGF0aWMgc2lndHlwZQorY2FuY2Vsc2VuZChzaWcpIGludCBz aWc7IHsKKyAgICBoYXZlc2lnaW50Kys7CisgICAgY2FuY2VsZ3JvdXArKzsKKyAgICBjYW5jZWxm aWxlID0gMDsKKyAgICBwcmludGYoIiBDYW5jZWxlZC4uLlxuIik7CisgICAgc2VjdXJlX2dldGMo MCwxKTsJCQkvKiBJbml0aWFsaXplIG5ldCBpbnB1dCBidWZmZXJzICovCisgICAgZGVidWcoRjEw MCwiZnRwIGNhbmNlbHNlbmQgY2F1Z2h0IFNJR0lOVCAiLCIiLDApOworICAgIGZmbHVzaChzdGRv dXQpOworI2lmbmRlZiBPUzIKKyAgICBsb25nam1wKHNlbmRjYW5jZWwsIDEpOworI2Vsc2UKKyAg ICBQb3N0Q3RybENTZW0oKTsKKyNlbmRpZiAvKiBPUzIgKi8KK30KKworc3RhdGljIFZPSUQKKyNp ZmRlZiBDS19BTlNJQworc2VjdXJlX2Vycm9yKGNoYXIgKmZtdCwgLi4uKQorI2Vsc2UKKy8qIFZB UkFSR1MxICovCitzZWN1cmVfZXJyb3IoZm10LCBwMSwgcDIsIHAzLCBwNCwgcDUpCisgICBjaGFy ICpmbXQ7IGludCBwMSwgcDIsIHAzLCBwNCwgcDU7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sK KyNpZmRlZiBDS19BTlNJQworICAgIHZhX2xpc3QgYXA7CisKKyAgICB2YV9zdGFydChhcCwgZm10 KTsKKyAgICB2ZnByaW50ZihzdGRlcnIsIGZtdCwgYXApOworICAgIHZhX2VuZChhcCk7CisjZWxz ZQorICAgIGZwcmludGYoc3RkZXJyLCBmbXQsIHAxLCBwMiwgcDMsIHA0LCBwNSk7CisjZW5kaWYK KyAgICBmcHJpbnRmKHN0ZGVyciwgIlxuIik7Cit9CisKKy8qCisgKiBJbnRlcm5hbCBmb3JtIG9m IHNldHR5cGU7IGNoYW5nZXMgY3VycmVudCB0eXBlIGluIHVzZSB3aXRoIHNlcnZlcgorICogd2l0 aG91dCBjaGFuZ2luZyBvdXIgbm90aW9uIG9mIHRoZSB0eXBlIGZvciBkYXRhIHRyYW5zZmVycy4K KyAqIFVzZWQgdG8gY2hhbmdlIHRvIGFuZCBmcm9tIGFzY2lpIGZvciBsaXN0aW5ncy4KKyAqLwor c3RhdGljIFZPSUQKK2NoYW5nZXR5cGUobmV3dHlwZSwgc2hvdykgaW50IG5ld3R5cGUsIHNob3c7 IHsKKyAgICBpbnQgcmM7CisgICAgY2hhciAqIHM7CisKKyAgICBpZiAoKG5ld3R5cGUgPT0gY3Vy dHlwZSkgJiYgdHlwZXNlbnQrKykKKyAgICAgIHJldHVybjsKKyAgICBzd2l0Y2ggKG5ld3R5cGUp IHsKKyAgICAgIGNhc2UgRlRUX0FTQzoKKyAgICAgICAgcyA9ICJBIjsKKyAgICAgICAgYnJlYWs7 CisgICAgICBjYXNlIEZUVF9CSU46CisgICAgICAgIHMgPSAiSSI7CisgICAgICAgIGJyZWFrOwor ICAgICAgY2FzZSBGVFRfVEVOOgorICAgICAgICBzID0gIkwgOCI7CisgICAgICAgIGJyZWFrOwor ICAgICAgZGVmYXVsdDoKKyAgICAgICAgcyA9ICJJIjsKKyAgICAgICAgYnJlYWs7CisgICAgfQor ICAgIHJjID0gZnRwY21kKCJUWVBFIixzLC0xLC0xLHNob3cpOworICAgIGlmIChyYyA9PSBSRVBM WV9DT01QTEVURSkKKyAgICAgIGN1cnR5cGUgPSBuZXd0eXBlOworfQorCisvKiBQVVQgYSBmaWxl LiAgUmV0dXJucyAtMSBvbiBlcnJvciwgMCBvbiBzdWNjZXNzLCAxIGlmIGZpbGUgc2tpcHBlZCAq LworCitzdGF0aWMgVk9JRAorI2lmZGVmIENLX0FOU0lDCitkb2Z0cHNlbmQodm9pZCAqIHRocmVh ZGluZm8pCisjZWxzZQorZG9mdHBzZW5kKHRocmVhZGluZm8pIFZPSUQgKiB0aHJlYWRpbmZvOwor I2VuZGlmCit7CisjaWZkZWYgTlRTSUcKKyAgICBpZiAodGhyZWFkaW5mbykgeyAgICAgICAgICAg ICAgICAgICAvKiBUaHJlYWQgbG9jYWwgc3RvcmFnZS4uLiAqLworICAgICAgICBUbHNTZXRWYWx1 ZShUbHNJbmRleCx0aHJlYWRpbmZvKTsKKyAgICAgICAgZGVidWcoRjEwMCwgImRvZnRwc2VuZCBj YWxsZWQgd2l0aCB0aHJlYWRpbmZvIGJsb2NrIiwiIiwgMCk7CisgICAgfSBlbHNlIGRlYnVnKEYx MDAsICJkb2Z0cHNlbmQgLSB0aHJlYWRpbmZvIGlzIE5VTEwiLCAiIiwgMCk7CisjZW5kaWYgLyog TlRTSUcgKi8KKyNpZmRlZiBDS19MT0dJTgorI2lmZGVmIElLU0QKKyNpZmRlZiBOVAorICAgIGlm IChpbnNlcnZlcikKKyAgICAgIHNldG50Y3JlZHMoKTsKKyNlbmRpZiAvKiBOVCAqLworI2VuZGlm IC8qIElLU0QgKi8KKyNlbmRpZiAvKiBDS19MT0dJTiAqLworCisgICAgaWYgKGluaXRjb25uKCkp IHsKKyNpZm5kZWYgTk9IVFRQCisgICAgICAgIGludCB5ID0gLTE7CisgICAgICAgIC8qIGRlYnVn KEYxMDEsImRvZnRwc2VuZCIsInRjcF9odHRwX3Byb3h5Iix0Y3BfaHR0cF9wcm94eSk7ICovCisK KyAgICAgICAvKiAgSWYgdGhlIGNvbm5lY3Rpb24gZmFpbGVkIGFuZCB3ZSBhcmUgdXNpbmcgYW4g SFRUUCBQcm94eQorICAgICAgICAqICBhbmQgdGhlIHJlYXNvbiBmb3IgdGhlIGZhaWx1cmUgd2Fz IGFuIGF1dGhlbnRpY2F0aW9uCisgICAgICAgICogIGVycm9yLCB0aGVuIHdlIG5lZWQgdG8gZ2l2 ZSB0aGUgdXNlciB0byBhYmlsaXR5IHRvCisgICAgICAgICogIGVudGVyIGEgdXNlcm5hbWUgYW5k IHBhc3N3b3JkLCBqdXN0IGxpa2UgYSBicm93c2VyLgorICAgICAgICAqCisgICAgICAgICogIEkg dHJpZWQgdG8gZG8gYWxsIG9mIHRoaXMgd2l0aGluIHRoZSBuZXRvcGVuKCkgY2FsbAorICAgICAg ICAqICBidXQgaXQgaXMgbXVjaCB0b28gbXVjaCB3b3JrLgorICAgICAgICAqLworICAgICAgICB3 aGlsZSAoeSAhPSAwICYmIHRjcF9odHRwX3Byb3h5ICE9IE5VTEwgKSB7CisKKyAgICAgICAgICAg IGlmICh0Y3BfaHR0cF9wcm94eV9lcnJubyA9PSA0MDEgfHwKKyAgICAgICAgICAgICAgICAgdGNw X2h0dHBfcHJveHlfZXJybm8gPT0gNDA3ICkgeworICAgICAgICAgICAgICAgIGNoYXIgdWlkW1VJ REJVRkxFTl07CisgICAgICAgICAgICAgICAgY2hhciBwd2RbUFdEU0laXTsKKyAgICAgICAgICAg ICAgICBzdHJ1Y3QgdHh0Ym94IHRiWzJdOworICAgICAgICAgICAgICAgIGludCBvazsKKworICAg ICAgICAgICAgICAgIHRiWzBdLnRfYnVmID0gdWlkOworICAgICAgICAgICAgICAgIHRiWzBdLnRf bGVuID0gVUlEQlVGTEVOOworICAgICAgICAgICAgICAgIHRiWzBdLnRfbGJsID0gIlByb3h5IFVz ZXJpZDogIjsKKyAgICAgICAgICAgICAgICB0YlswXS50X2RmbHQgPSBOVUxMOworICAgICAgICAg ICAgICAgIHRiWzBdLnRfZWNobyA9IDE7CisgICAgICAgICAgICAgICAgdGJbMV0udF9idWYgPSBw d2Q7CisgICAgICAgICAgICAgICAgdGJbMV0udF9sZW4gPSAyNTY7CisgICAgICAgICAgICAgICAg dGJbMV0udF9sYmwgPSAiUHJveHkgUGFzc3BocmFzZTogIjsKKyAgICAgICAgICAgICAgICB0Ylsx XS50X2RmbHQgPSBOVUxMOworICAgICAgICAgICAgICAgIHRiWzFdLnRfZWNobyA9IDI7CisKKyAg ICAgICAgICAgICAgICBvayA9IHVxX210eHQoIlByb3h5IFNlcnZlciBBdXRoZW50aWNhdGlvbiBS ZXF1aXJlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDIsIHRiKTsK KyAgICAgICAgICAgICAgICBpZiAob2sgJiYgdWlkWzBdKSB7CisgICAgICAgICAgICAgICAgICAg IGNoYXIgKiBwcm94eV91c2VyLCAqIHByb3h5X3B3ZDsKKworICAgICAgICAgICAgICAgICAgICBw cm94eV91c2VyID0gdGNwX2h0dHBfcHJveHlfdXNlcjsKKyAgICAgICAgICAgICAgICAgICAgcHJv eHlfcHdkICA9IHRjcF9odHRwX3Byb3h5X3B3ZDsKKworICAgICAgICAgICAgICAgICAgICB0Y3Bf aHR0cF9wcm94eV91c2VyID0gdWlkOworICAgICAgICAgICAgICAgICAgICB0Y3BfaHR0cF9wcm94 eV9wd2QgPSBwd2Q7CisKKyAgICAgICAgICAgICAgICAgICAgeSA9IGluaXRjb25uKCk7CisKKyAg ICAgICAgICAgICAgICAgICAgZGVidWcoRjEwMSwiZG9mdHBzZW5kIiwiaW5pdGNvbm4iLHkpOwor ICAgICAgICAgICAgICAgICAgICBtZW1zZXQocHdkLDAsUFdEU0laKTsKKyAgICAgICAgICAgICAg ICAgICAgdGNwX2h0dHBfcHJveHlfdXNlciA9IHByb3h5X3VzZXI7CisgICAgICAgICAgICAgICAg ICAgIHRjcF9odHRwX3Byb3h5X3B3ZCA9IHByb3h5X3B3ZDsKKyAgICAgICAgICAgICAgICB9IGVs c2UKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAg ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggeSAhPSAwICkgewor I2VuZGlmIC8qIE5PSFRUUCAqLworICAgICAgICAgICAgc2lnbmFsKFNJR0lOVCwgZnRwc25kLm9s ZGludHIpOworI2lmZGVmIFNJR1BJUEUKKyAgICAgICAgICAgIGlmIChmdHBzbmQub2xkaW50cCkK KyAgICAgICAgICAgICAgc2lnbmFsKFNJR1BJUEUsIGZ0cHNuZC5vbGRpbnRwKTsKKyNlbmRpZiAv KiBTSUdQSVBFICovCisgICAgICAgICAgICBmdHBjb2RlID0gLTE7CisgICAgICAgICAgICB6Y2xv c2UoWklGSUxFKTsKKyAgICAgICAgICAgIGZ0cHNuZHJldCA9IC0xOworI2lmZGVmIE5UU0lHCisg ICAgICAgICAgICBja1RocmVhZEVuZCh0aHJlYWRpbmZvKTsKKyNlbmRpZiAvKiBOVFNJRyAqLwor ICAgICAgICAgICAgcmV0dXJuOworI2lmbmRlZiBOT0hUVFAKKyAgICAgICAgfQorI2VuZGlmIC8q IE5PSFRUUCAqLworICAgIH0KKyAgICBmdHBzbmRyZXQgPSAwOworI2lmZGVmIE5UU0lHCisgICAg IGNrVGhyZWFkRW5kKHRocmVhZGluZm8pOworI2VuZGlmIC8qIE5UU0lHICovCit9CisKK3N0YXRp YyBWT0lECisjaWZkZWYgQ0tfQU5TSUMKK2ZhaWxmdHBzZW5kKHZvaWQgKiB0aHJlYWRpbmZvKQor I2Vsc2UKK2ZhaWxmdHBzZW5kKHRocmVhZGluZm8pIFZPSUQgKiB0aHJlYWRpbmZvOworI2VuZGlm IC8qIENLX0FOU0lDICovCit7CisjaWZkZWYgTlRTSUcKKyAgICBpZiAodGhyZWFkaW5mbykgeyAg ICAgICAgICAgICAgICAgICAvKiBUaHJlYWQgbG9jYWwgc3RvcmFnZS4uLiAqLworICAgICAgICBU bHNTZXRWYWx1ZShUbHNJbmRleCx0aHJlYWRpbmZvKTsKKyAgICAgICAgZGVidWcoRjEwMCwgImRv Y21kZmlsZSBjYWxsZWQgd2l0aCB0aHJlYWRpbmZvIGJsb2NrIiwiIiwgMCk7CisgICAgfSBlbHNl IGRlYnVnKEYxMDAsICJkb2NtZGZpbGUgLSB0aHJlYWRpbmZvIGlzIE5VTEwiLCAiIiwgMCk7Cisj ZW5kaWYgLyogTlRTSUcgKi8KKyNpZmRlZiBDS19MT0dJTgorI2lmZGVmIElLU0QKKyNpZmRlZiBO VAorICAgIGlmIChpbnNlcnZlcikKKyAgICAgIHNldG50Y3JlZHMoKTsKKyNlbmRpZiAvKiBOVCAq LworI2VuZGlmIC8qIElLU0QgKi8KKyNlbmRpZiAvKiBDS19MT0dJTiAqLworCisgICAgd2hpbGUg KGNwZW5kKSB7CisgICAgICAgIGZ0cHNuZC5yZXBseSA9IGdldHJlcGx5KDAsZnRwc25kLmluY3Ms ZnRwc25kLm91dGNzLGZ0cF92Ym0sMCk7CisgICAgICAgIGRlYnVnKEYxMTEsImZ0cCBzZW5kcmVx dWVzdCBnZXRyZXBseSIsIm51bGwgY29tbWFuZCIsZnRwc25kLnJlcGx5KTsKKyAgICB9CisgICAg aWYgKGRhdGEgPj0gMCkgeworI2lmZGVmIENLX1NTTAorICAgICAgICBpZiAoc3NsX2Z0cF9kYXRh X2FjdGl2ZV9mbGFnKSB7CisgICAgICAgICAgICBTU0xfc2h1dGRvd24oc3NsX2Z0cF9kYXRhX2Nv bik7CisgICAgICAgICAgICBTU0xfZnJlZShzc2xfZnRwX2RhdGFfY29uKTsKKyAgICAgICAgICAg IHNzbF9mdHBfZGF0YV9hY3RpdmVfZmxhZyA9IDA7CisgICAgICAgICAgICBzc2xfZnRwX2RhdGFf Y29uID0gTlVMTDsKKyAgICAgICAgfQorI2VuZGlmIC8qIENLX1NTTCAqLworI2lmZGVmIFRDUElQ TElCCisgICAgICAgIHNvY2tldF9jbG9zZShkYXRhKTsKKyNlbHNlIC8qIFRDUElQTElCICovCisj aWZkZWYgVVNFX1NIVVRET1dOCisgICAgICAgIHNodXRkb3duKGRhdGEsIDErMSk7CisjZW5kaWYg LyogVVNFX1NIVVRET1dOICovCisgICAgICAgIGNsb3NlKGRhdGEpOworI2VuZGlmIC8qIFRDUElQ TElCICovCisgICAgICAgIGRhdGEgPSAtMTsKKyAgICAgICAgZ2xvYmFsZGluID0gLTE7CisgICAg fQorICAgIGlmIChmdHBzbmQub2xkaW50cikKKyAgICAgICAgc2lnbmFsKFNJR0lOVCxmdHBzbmQu b2xkaW50cik7CisjaWZkZWYgU0lHUElQRQorICAgIGlmIChmdHBzbmQub2xkaW50cCkKKyAgICAg ICAgc2lnbmFsKFNJR1BJUEUsZnRwc25kLm9sZGludHApOworI2VuZGlmIC8qIFNJR1BJUEUgKi8K KyAgICBmdHBjb2RlID0gLTE7CisjaWZuZGVmIE9TMgorICAgIC8qIFRFU1QgTUUgSU4gSzk1ICov CisgICAgaWYgKGhhdmVzaWdpbnQpIHsKKwloYXZlc2lnaW50ID0gMDsKKwlkZWJ1ZyhGMTAwLCJm dHAgZmFpbGZ0cHNlbmQgY2hhaW4gdG8gdHJhcCgpLi4uIiwiIiwwKTsKKwlpZiAoZnRwc25kLm9s ZGludHIgIT0gU0lHX0lHTikKKwkgICgqZnRwc25kLm9sZGludHIpKFNJR0lOVCk7CisJLyogTk9U UkVBQ0hFRCAoSSBob3BlISkgKi8KKwlkZWJ1ZyhGMTAwLCJmdHAgZmFpbGZ0cHNlbmQgcmV0dXJu IGZyb20gdHJhcCgpLi4uIiwiIiwwKTsKKyAgICB9CisjZW5kaWYgLyogT1MyICovCit9CisKK3N0 YXRpYyBWT0lECisjaWZkZWYgQ0tfQU5TSUMKK2ZhaWxmdHBzZW5kMih2b2lkICogdGhyZWFkaW5m bykKKyNlbHNlCitmYWlsZnRwc2VuZDIodGhyZWFkaW5mbykgVk9JRCAqIHRocmVhZGluZm87Cisj ZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyNpZmRlZiBOVFNJRworICAgIGlmICh0aHJlYWRpbmZv KSB7ICAgICAgICAgICAgICAgICAgIC8qIFRocmVhZCBsb2NhbCBzdG9yYWdlLi4uICovCisgICAg ICAgIFRsc1NldFZhbHVlKFRsc0luZGV4LHRocmVhZGluZm8pOworICAgICAgICBkZWJ1ZyhGMTAw LCAiZG9jbWRmaWxlIGNhbGxlZCB3aXRoIHRocmVhZGluZm8gYmxvY2siLCIiLCAwKTsKKyAgICB9 IGVsc2UgZGVidWcoRjEwMCwgImRvY21kZmlsZSAtIHRocmVhZGluZm8gaXMgTlVMTCIsICIiLCAw KTsKKyNlbmRpZiAvKiBOVFNJRyAqLworI2lmZGVmIENLX0xPR0lOCisjaWZkZWYgSUtTRAorI2lm ZGVmIE5UCisgICAgaWYgKGluc2VydmVyKQorICAgICAgc2V0bnRjcmVkcygpOworI2VuZGlmIC8q IE5UICovCisjZW5kaWYgLyogSUtTRCAqLworI2VuZGlmIC8qIENLX0xPR0lOICovCisKKyAgICBk ZWJ1ZyhGMTAxLCJmdHAgc2VuZHJlcXVlc3QgY2FuY2VsZWQiLCIiLGZ0cHNuZC5ieXRlcyk7Cisg ICAgdGZjICs9IGZmYzsKKyNpZmRlZiBHRlRJTUVSCisgICAgZnBmc2VjcyA9IGdmdGltZXIoKTsK KyNlbmRpZiAvKiBHRlRJTUVSICovCisgICAgemNsb3NlKFpJRklMRSk7CisjaWZkZWYgUElQRVNF TkQKKyAgICBpZiAoc25kZmlsdGVyKQorICAgICAgcGlwZXNlbmQgPSAwOworI2VuZGlmIC8qIFBJ UEVTRU5EICovCisgICAgc2lnbmFsKFNJR0lOVCwgZnRwc25kLm9sZGludHIpOworI2lmZGVmIFNJ R1BJUEUKKyAgICBpZiAoZnRwc25kLm9sZGludHApCisgICAgICBzaWduYWwoU0lHUElQRSwgZnRw c25kLm9sZGludHApOworI2VuZGlmIC8qIFNJR1BJUEUgKi8KKyAgICBpZiAoIWNwZW5kKSB7Cisg ICAgICAgIGZ0cGNvZGUgPSAtMTsKKyAgICAgICAgZnRwc25kcmV0ID0gLTE7CisjaWZkZWYgTlRT SUcKKyAgICAgICAgY2tUaHJlYWRFbmQodGhyZWFkaW5mbyk7CisjZW5kaWYgLyogTlRTSUcgKi8K KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoZGF0YSA+PSAwKSB7CisjaWZkZWYgQ0tf U1NMCisgICAgICAgIGlmIChzc2xfZnRwX2RhdGFfYWN0aXZlX2ZsYWcpIHsKKyAgICAgICAgICAg IFNTTF9zaHV0ZG93bihzc2xfZnRwX2RhdGFfY29uKTsKKyAgICAgICAgICAgIFNTTF9mcmVlKHNz bF9mdHBfZGF0YV9jb24pOworICAgICAgICAgICAgc3NsX2Z0cF9kYXRhX2FjdGl2ZV9mbGFnID0g MDsKKyAgICAgICAgICAgIHNzbF9mdHBfZGF0YV9jb24gPSBOVUxMOworICAgICAgICB9CisjZW5k aWYgLyogQ0tfU1NMICovCisjaWZkZWYgVENQSVBMSUIKKyAgICAgICAgc29ja2V0X2Nsb3NlKGRh dGEpOworI2Vsc2UgLyogVENQSVBMSUIgKi8KKyNpZmRlZiBVU0VfU0hVVERPV04KKyAgICAgICAg c2h1dGRvd24oZGF0YSwgMSsxKTsKKyNlbmRpZiAvKiBVU0VfU0hVVERPV04gKi8KKyAgICAgICAg Y2xvc2UoZGF0YSk7CisjZW5kaWYgLyogVENQSVBMSUIgKi8KKyAgICAgICAgZGF0YSA9IC0xOwor ICAgICAgICBnbG9iYWxkaW4gPSAtMTsKKyAgICB9CisgICAgaWYgKGRvdXQpIHsKKyNpZmRlZiBU Q1BJUExJQgorICAgICAgICBzb2NrZXRfY2xvc2UoZG91dCk7CisjZWxzZSAvKiBUQ1BJUExJQiAq LworI2lmZGVmIFVTRV9TSFVURE9XTgorICAgICAgICBzaHV0ZG93bihkb3V0LCAxKzEpOworI2Vu ZGlmIC8qIFVTRV9TSFVURE9XTiAqLworICAgICAgICBjbG9zZShkb3V0KTsKKyNlbmRpZiAvKiBU Q1BJUExJQiAqLworICAgIH0KKyAgICBmdHBzbmQucmVwbHkgPSBnZXRyZXBseSgwLGZ0cHNuZC5p bmNzLGZ0cHNuZC5vdXRjcyxmdHBfdmJtLDApOworICAgIGZ0cGNvZGUgPSAtMTsKKyAgICBmdHBz bmRyZXQgPSAtMTsKKworI2lmbmRlZiBPUzIKKyAgICAvKiBURVNUIE1FIElOIEs5NSAqLworICAg IGlmIChoYXZlc2lnaW50KSB7CisJaGF2ZXNpZ2ludCA9IDA7CisJZGVidWcoRjEwMCwiZnRwIGZh aWxmdHBzZW5kMiBjaGFpbiB0byB0cmFwKCkuLi4iLCIiLDApOworCWlmIChmdHBzbmQub2xkaW50 ciAhPSBTSUdfSUdOKQorCSAgKCpmdHBzbmQub2xkaW50cikoU0lHSU5UKTsKKwkvKiBOT1RSRUFD SEVEIChJIGhvcGUhKSAqLworCWRlYnVnKEYxMDAsImZ0cCBmYWlsZnRwc2VuZDIgcmV0dXJuIGZy b20gdHJhcCgpLi4uIiwiIiwwKTsKKyAgICB9CisjZW5kaWYgLyogT1MyICovCit9CisKK3N0YXRp YyBWT0lECisjaWZkZWYgQ0tfQU5TSUMKK2RvZnRwc2VuZDIodm9pZCAqIHRocmVhZGluZm8pCisj ZWxzZQorZG9mdHBzZW5kMih0aHJlYWRpbmZvKSBWT0lEICogdGhyZWFkaW5mbzsKKyNlbmRpZgor eworICAgIHJlZ2lzdGVyIGludCBjLCBkID0gMDsKKyAgICBpbnQgbiwgdCwgeCwgbm90YWZpbGUs IHVuaXF1ZSA9IDA7CisgICAgY2hhciAqYnVmLCAqYnVmcDsKKyAgICAKKyNpZmRlZiBOVFNJRwor ICAgIGlmICh0aHJlYWRpbmZvKSB7ICAgICAgICAgICAgICAgICAgIC8qIFRocmVhZCBsb2NhbCBz dG9yYWdlLi4uICovCisgICAgICAgIFRsc1NldFZhbHVlKFRsc0luZGV4LHRocmVhZGluZm8pOwor ICAgICAgICBkZWJ1ZyhGMTAwLCAiZG9mdHBzZW5kMiBjYWxsZWQgd2l0aCB0aHJlYWRpbmZvIGJs b2NrIiwiIiwgMCk7CisgICAgfSBlbHNlIGRlYnVnKEYxMDAsICJkb2Z0cHNlbmQyIC0gdGhyZWFk aW5mbyBpcyBOVUxMIiwgIiIsIDApOworI2VuZGlmIC8qIE5UU0lHICovCisjaWZkZWYgQ0tfTE9H SU4KKyNpZmRlZiBJS1NECisjaWZkZWYgTlQKKyAgICBpZiAoaW5zZXJ2ZXIpCisgICAgICBzZXRu dGNyZWRzKCk7CisjZW5kaWYgLyogTlQgKi8KKyNlbmRpZiAvKiBJS1NEICovCisjZW5kaWYgLyog Q0tfTE9HSU4gKi8KKworICAgIGJ1ZiA9IGZ0cHNuZGJ1ZjsJCQkvKiAobm90IG9uIHN0YWNrKSAq LworCisgICAgdW5pcXVlID0gc3RyY21wKGZ0cHNuZC5jbWQsIlNUT1UiKSA/IDAgOiAxOworICAg IG5vdGFmaWxlID0gc25kYXJyYXkgfHwgcGlwZXNlbmQ7CisKKyNpZmRlZiBGVFBfUkVTVEFSVAor ICAgIGlmIChmdHBzbmQucmVzdGFydCAmJiAoKGN1cnR5cGUgPT0gRlRUX0JJTikgfHwgKGFsaWtl ID4gMCkpKSB7CisgICAgICAgIGNoYXIgKiBwOworICAgICAgICBjaGFuZ2V0eXBlKEZUVF9CSU4s MCk7ICAgICAgICAgIC8qIENoYW5nZSB0byBiaW5hcnkgKi8KKworICAgICAgICAvKiBBc2sgZm9y IHJlbW90ZSBmaWxlJ3Mgc2l6ZSAqLworICAgICAgICB4ID0gZnRwY21kKCJTSVpFIixmdHBzbmQu cmVtb3RlLGZ0cHNuZC5pbmNzLGZ0cHNuZC5vdXRjcyxmdHBfdmJtKTsKKworICAgICAgICBpZiAo eCA9PSBSRVBMWV9DT01QTEVURSkgeyAgICAgIC8qIEhhdmUgZnRwc25kLnJlcGx5ICovCisgICAg ICAgICAgICBwID0gJmZ0cF9yZXBseV9zdHJbNF07ICAgICAgLyogUGFyc2UgaXQgKi8KKyAgICAg ICAgICAgIHdoaWxlIChpc2RpZ2l0KCpwKSkgeworICAgICAgICAgICAgICAgIHNlbmRzdGFydCA9 IHNlbmRzdGFydCAqIDEwICsgKGludCkoKnAgLSAnMCcpOworICAgICAgICAgICAgICAgIHArKzsK KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgqcCAmJiAqcCAhPSBDUikgeyAgICAgICAv KiBCYWQgbnVtYmVyICovCisgICAgICAgICAgICAgICAgZGVidWcoRjExMCwiZG9mdHBzZW5kMiBi YWQgc2l6ZSIsZnRwX3JlcGx5X3N0ciwwKTsKKyAgICAgICAgICAgICAgICBzZW5kc3RhcnQgPSAo Q0tfT0ZGX1QpMDsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc2VuZHN0YXJ0ID4gZnNpemUpIHsg LyogUmVtb3RlIGZpbGUgYmlnZ2VyIHRoYW4gbG9jYWwgKi8KKyAgICAgICAgICAgICAgICBkZWJ1 ZyhGMTEwLCJkb2Z0cHNlbmQyIGJpZyBzaXplIixja2ZzdG9hKGZzaXplKSxzZW5kc3RhcnQpOwor ICAgICAgICAgICAgICAgIHNlbmRzdGFydCA9IChDS19PRkZfVCkwOworICAgICAgICAgICAgfQor CSAgICAvKiBMb2NhbCBpcyBuZXdlciAqLworICAgICAgICAgICAgZGVidWcoRjExMSwiZG9mdHBz ZW5kMiBzaXplIixmdHBzbmQucmVtb3RlLHNlbmRzdGFydCk7CisgICAgICAgICAgICBpZiAoY2hr bW9kdGltZShmdHBzbmQubG9jYWwsZnRwc25kLnJlbW90ZSwwKSA9PSAyKSB7CisgICAgICAgICAg ICAgICAgZGVidWcoRjExMCwiZG9mdHBzZW5kMiBkYXRlIG1pc21hdGNoIixmdHBfcmVwbHlfc3Ry LDApOworICAgICAgICAgICAgICAgIHNlbmRzdGFydCA9IChDS19PRkZfVCkwOyAvKiBTZW5kIHRo ZSB3aG9sZSBmaWxlICovCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgY2hhbmdl dHlwZShmdHBfdHlwLDApOyAgICAgICAgICAvKiBDaGFuZ2UgYmFjayB0byBhcHByb3ByaWF0ZSB0 eXBlICovCisgICAgICAgIGlmIChzZW5kc3RhcnQgPiAoQ0tfT0ZGX1QpMCkgewkvKiBTdGlsbCBy ZXN0YXJ0aW5nPyAqLworICAgICAgICAgICAgaWYgKHNlbmRzdGFydCA9PSBmc2l6ZSkgeyAgIC8q IFNhbWUgc2l6ZSAtIG5vIG5lZWQgdG8gc2VuZCAqLworICAgICAgICAgICAgICAgIGRlYnVnKEYx MTEsImRvZnRwc2VuZDIgL3Jlc3RhcnQgU0tJUCIsCisJCSAgICAgIGNrZnN0b2EoZnNpemUpLHNl bmRzdGFydCk7CisgICAgICAgICAgICAgICAgemNsb3NlKFpJRklMRSk7CisgICAgICAgICAgICAg ICAgZnRwc25kcmV0ID0gU0tQX1JFUzsKKyNpZmRlZiBOVFNJRworICAgICAgICAgICAgICAgIGNr VGhyZWFkRW5kKHRocmVhZGluZm8pOworI2VuZGlmIC8qIE5UU0lHICovCisgICAgICAgICAgICAg ICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZXJybm8gPSAwOyAgICAgICAg ICAgICAgICAgIC8qIFJlc3RhcnQgbmVlZGVkLCBzZWVrIHRvIHRoZSBzcG90ICovCisgICAgICAg ICAgICBpZiAoemZzZWVrKChsb25nKXNlbmRzdGFydCkgPCAwKSB7CisgICAgICAgICAgICAgICAg ZGVidWcoRjExMSwiZG9mdHBzZW5kMiB6ZnNlZWsgZmFpbHMiLAorCQkgICAgICBmdHBzbmQubG9j YWwsc2VuZHN0YXJ0KTsKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZTRUVLOiAl czogJXNcbiIsIGZ0cHNuZC5sb2NhbCwgY2tfZXJyc3RyKCkpOworICAgICAgICAgICAgICAgIHNl bmRzdGFydCA9IDA7CisgICAgICAgICAgICAgICAgemNsb3NlKFpJRklMRSk7CisgICAgICAgICAg ICAgICAgZnRwc25kcmV0ID0gLTE7CisjaWZkZWYgTlRTSUcKKyAgICAgICAgICAgICAgICBja1Ro cmVhZEVuZCh0aHJlYWRpbmZvKTsKKyNlbmRpZiAvKiBOVFNJRyAqLworICAgICAgICAgICAgICAg IHJldHVybjsKKyAgICAgICAgICAgIH0KKyNpZmRlZiBDT01NRU5UCisgICAgICAgICAgICBkZWJ1 ZyhGMTExLCJkb2Z0cHNlbmQyIHpmc2VlayBvayIsZnRwc25kLmxvY2FsLHNlbmRzdGFydCk7Cisg ICAgICAgICAgICB4ID0gZnRwY21kKCJSRVNUIixja2x0b2Eoc2VuZHN0YXJ0KSwtMSwtMSxmdHBf dmJtKTsKKyAgICAgICAgICAgIGlmICh4ICE9IFJFUExZX0NPTlRJTlVFKSB7CisgICAgICAgICAg ICAgICAgc2VuZHN0YXJ0ID0gMDsKKyAgICAgICAgICAgICAgICB6Y2xvc2UoWklGSUxFKTsKKyAg ICAgICAgICAgICAgICBmdHBzbmRyZXQgPSAtMTsKKyNpZmRlZiBOVFNJRworICAgICAgICAgICAg ICAgIGNrVGhyZWFkRW5kKHRocmVhZGluZm8pOworI2VuZGlmIC8qIE5UU0lHICovCisgICAgICAg ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBm dHBzbmQuY21kID0gIlNUT1IiOworICAgICAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgICAgIHNl bmRtb2RlID0gU01fUkVTRU5EOworICAgICAgICAgICAgZnRwc25kLmNtZCA9ICJBUFBFIjsKKyNl bmRpZiAvKiBDT01NRU5UICovCisgICAgICAgICAgICAvKiBzZW5kc3RhcnQgPSAoQ0tfT0ZGX1Qp MDsgKi8KKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBGVFBfUkVTVEFSVCAqLworCisgICAg aWYgKHVuaXF1ZSAmJiAhc3RvdWFyZykJCS8qIElmIHdlIGtub3cgU1RPVSBhY2NlcHRzIG5vIGFy ZyAqLworICAgICAgZnRwc25kLnJlbW90ZSA9IE5VTEw7CQkvKiBkb24ndCBpbmNsdWRlIG9uZS4g Ki8KKworICAgIHggPSBmdHBjbWQoZnRwc25kLmNtZCwgZnRwc25kLnJlbW90ZSwgZnRwc25kLmlu Y3MsIGZ0cHNuZC5vdXRjcywgZnRwX3ZibSk7CisgICAgZGVidWcoRjExMSwiZG9mdHBzZW5kMiBm dHBjb2RlIixmdHBzbmQuY21kLGZ0cGNvZGUpOworICAgIGRlYnVnKEYxMDEsImRvZnRwc2VuZDIg ZnRwY21kIiwiIix4KTsKKworICAgIGlmICh4ICE9IFJFUExZX1BSRUxJTSAmJiB1bmlxdWUpIHsK KwkvKgorCSAgUkZDOTU5IHNheXMgU1RPVSBkb2VzIG5vdCB0YWtlIGFuIGFyZ3VtZW50LiAgQnV0 IGV2ZXJ5IEZUUCBzZXJ2ZXIKKwkgIEkndmUgZW5jb3VudGVyZWQgYnV0IG9uZSBhY2NlcHRzIHRo ZSBhcmcgYW5kIGNvbnN0cnVjdHMgdGhlIHVuaXF1ZQorCSAgbmFtZSBmcm9tIGl0LCB3aGljaCBp cyBiZXR0ZXIgdGhhbiBtYWtpbmcgdXAgYSB0b3RhbGx5IHJhbmRvbSBuYW1lCisJICBmb3IgdGhl IGZpbGUsIHdoaWNoIGlzIHdoYXQgUkZDOTU5IGNhbGxzIGZvci4gIEVzcGVjaWFsbHkgYmVjYXVz ZQorCSAgdGhlcmUgaXMgbm8gd2F5IGZvciB0aGUgY2xpZW50IHRvIGZpbmQgb3V0IHRoZSBuYW1l IGNob3NlbiBieSB0aGUKKwkgIHNlcnZlci4gIFNvIHdlIHRyeSBTVE9VIHdpdGggdGhlIGFyZ3Vt ZW50IGZpcnN0LCB3aGljaCB3b3JrcyB3aXRoCisJICBtb3N0IHNlcnZlcnMsIGFuZCBpZiBpdCBm YWlscyB3ZSByZXRyeSBpdCB3aXRob3V0IHRoZSBhcmcsIGZvcgorCSAgdGhlIGJlbmVmaXQgb2Yg dGhlIG9uZSBwaWNreSBzZXJ2ZXIgdGhhdCBpcyBub3QgImxpYmVyYWwgaW4gd2hhdAorCSAgaXQg YWNjZXB0cyIgVU5MRVNTIHRoZSBmaXJzdCBTVE9VIGdvdCBhIDUwMiBjb2RlICgibm90IGltcGxl bWVudGVkIikKKwkgIHdoaWNoIG1lYW5zIFNUT1UgaXMgbm90IGFjY2VwdGVkLCBwZXJpb2QuCisJ Ki8KKwlpZiAoKHggPT0gNSkgJiYgc3RvdWFyZyAmJiAoZnRwY29kZSAhPSA1MDIpKSB7CisJICAg IHggPSBmdHBjbWQoZnRwc25kLmNtZCxOVUxMLGZ0cHNuZC5pbmNzLGZ0cHNuZC5vdXRjcyxmdHBf dmJtKTsgCisJICAgIGlmICh4ID09IFJFUExZX1BSRUxJTSkJLyogSWYgYWNjZXB0ZWQgKi8KKwkg ICAgICBzdG91YXJnID0gMDsJCS8qIGZsYWcgbm8gU1RPVSBhcmcgZm9yIHRoaXMgc2VydmVyICov CisJfQorICAgIH0KKyAgICBpZiAoeCAhPSBSRVBMWV9QUkVMSU0pIHsKKyAgICAgICAgc2lnbmFs KFNJR0lOVCwgZnRwc25kLm9sZGludHIpOworI2lmZGVmIFNJR1BJUEUKKyAgICAgICAgaWYgKGZ0 cHNuZC5vbGRpbnRwKQorICAgICAgICAgIHNpZ25hbChTSUdQSVBFLCBmdHBzbmQub2xkaW50cCk7 CisjZW5kaWYgLyogU0lHUElQRSAqLworCWRlYnVnKEYxMDEsImRvZnRwc2VuZDIgbm90IFJFUExZ X1BSRUxJTSIsIiIseCk7CisgICAgICAgIHpjbG9zZShaSUZJTEUpOworI2lmZGVmIFBJUEVTRU5E CisgICAgICAgIGlmIChzbmRmaWx0ZXIpCisgICAgICAgICAgcGlwZXNlbmQgPSAwOworI2VuZGlm IC8qIFBJUEVTRU5EICovCisgICAgICAgIGZ0cHNuZHJldCA9IC0xOworI2lmZGVmIE5UU0lHCisg ICAgICAgIGNrVGhyZWFkRW5kKHRocmVhZGluZm8pOworI2VuZGlmIC8qIE5UU0lHICovCisgICAg ICAgIHJldHVybjsKKyAgICB9CisgICAgZGVidWcoRjEwMCwiZG9mdHBzZW5kMiBnZXR0aW5nIGRh dGEgY29ubmVjdGlvbi4uLiIsIiIsMCk7CisgICAgZG91dCA9IGRhdGFjb25uKGZ0cHNuZC5sbW9k ZSk7ICAgICAgICAgICAgIC8qIEdldCBkYXRhIGNvbm5lY3Rpb24gKi8KKyAgICBkZWJ1ZyhGMTAx LCJkb2Z0cHNlbmQyIGRhdGFjb25uIiwiIixkb3V0KTsKKyAgICBpZiAoZG91dCA9PSAtMSkgewor ICAgICAgICBmYWlsZnRwc2VuZDIodGhyZWFkaW5mbyk7CisjaWZkZWYgTlRTSUcKKyAgICAgICAg Y2tUaHJlYWRFbmQodGhyZWFkaW5mbyk7CisjZW5kaWYgLyogTlRTSUcgKi8KKyAgICAgICAgcmV0 dXJuOworICAgIH0KKyAgICAvKiBJbml0aWFsaXplIHBlci1maWxlIHN0YXRzICovCisgICAgZmZj ID0gKENLX09GRl9UKTA7CQkJLyogQ2hhcmFjdGVyIGNvdW50ZXIgKi8KKyAgICBjcHMgPSBvbGRj cHMgPSAwTDsgICAgICAgICAgICAgICAgICAvKiBUaHJ1cHV0ICovCisgICAgbiA9IDA7CisjaWZk ZWYgR0ZUSU1FUgorICAgIHJmdGltZXIoKTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJl c2V0IGYucC4gdGltZXIgKi8KKyNlbmRpZiAvKiBHRlRJTUVSICovCisKKyNpZmRlZiBTSUdQSVBF CisgICAgZnRwc25kLm9sZGludHAgPSBzaWduYWwoU0lHUElQRSwgU0lHX0lHTik7CisjZW5kaWYg LyogU0lHUElQRSAqLworICAgIGRlYnVnKEYxMDEsImRvZnRwc2VuZDIgY3VydHlwZSIsIiIsY3Vy dHlwZSk7CisgICAgc3dpdGNoIChjdXJ0eXBlKSB7CisgICAgICBjYXNlIEZUVF9CSU46ICAgICAg ICAgICAgICAgICAgICAgLyogQmluYXJ5IG1vZGUgKi8KKyAgICAgIGNhc2UgRlRUX1RFTjoKKyAg ICAgICAgZXJybm8gPSBkID0gMDsKKyNpZmRlZiBWTVMKKwkvKgorCSAgVGhpcyBpcyBiZWNhdXNl IFZNUyB6eGluKCkgaXMgQy1MaWJyYXJ5IGZyZWFkKCkgCisgICAgICAgICAgYnV0IHRoZSBmaWxl IHdhcyBvcGVuZWQgd2l0aCB6b3BlbmkoKSwgd2hpY2ggaXMgUk1TLgorCSovCisJd2hpbGUgKCgo YyA9IHptaW5jaGFyKCkpID4gLTEpICYmICFjYW5jZWxmaWxlKSB7CisJICAgIGZmYysrOworCSAg ICBpZiAoenpvdXQoZG91dCxjKSA8IDApCisJICAgICAgYnJlYWs7CisJfQorI2Vsc2UgIC8qIFZN UyAqLworICAgICAgICB3aGlsZSAoKG4gPSB6eGluKFpJRklMRSxidWYsRlRQX0JVRlNJWiAtIDEp KSA+IDAgJiYgIWNhbmNlbGZpbGUpIHsKKyAgICAgICAgICAgIGZ0cHNuZC5ieXRlcyArPSBuOwor ICAgICAgICAgICAgZmZjICs9IG47CisgICAgICAgICAgICBkZWJ1ZyhGMTExLCJkb2Z0cHNlbmQy IHp4aW4iLGNrbHRvYShuKSxmZmMpOworICAgICAgICAgICAgY2toZXhkdW1wKCJkb2Z0cHNlbmQy IHp4aW4iLGJ1ZiwxNik7CisjaWZkZWYgQ0tfU1NMCisgICAgICAgICAgICBpZiAoc3NsX2Z0cF9k YXRhX2FjdGl2ZV9mbGFnKSB7CisgICAgICAgICAgICAgICAgZm9yIChidWZwID0gYnVmOyBuID4g MDsgbiAtPSBkLCBidWZwICs9IGQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKChkID0gU1NM X3dyaXRlKHNzbF9mdHBfZGF0YV9jb24sIGJ1ZnAsIG4pKSA8PSAwKQorICAgICAgICAgICAgICAg ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBzcGFja2V0cysrOworICAgICAgICAg ICAgICAgICAgICBwa3RudW0rKzsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGZkaXNwbGEgIT0g WFlGRF9CKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzcGt0bCA9IGQ7CisgICAgICAgICAg ICAgICAgICAgICAgICBmdHNjcmVlbihTQ1JfUFQsJ0QnLChDS19PRkZfVClzcGFja2V0cyxOVUxM KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg IH0gZWxzZSB7CisjZW5kaWYgLyogQ0tfU1NMICovCisgICAgICAgICAgICAgICAgZm9yIChidWZw ID0gYnVmOyBuID4gMDsgbiAtPSBkLCBidWZwICs9IGQpIHsKKyAgICAgICAgICAgICAgICAgICAg aWYgKCgoZCA9IHNlY3VyZV93cml0ZShkb3V0LCAoQ0hBUiAqKWJ1ZnAsIG4pKSA8PSAwKQorICAg ICAgICAgICAgICAgICAgICAgICAgfHwgaXNjYW5jZWxlZCgpKQorICAgICAgICAgICAgICAgICAg ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBzcGFja2V0cysrOworICAgICAgICAgICAg ICAgICAgICBwa3RudW0rKzsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGZkaXNwbGEgIT0gWFlG RF9CKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzcGt0bCA9IGQ7CisgICAgICAgICAgICAg ICAgICAgICAgICBmdHNjcmVlbihTQ1JfUFQsJ0QnLChDS19PRkZfVClzcGFja2V0cyxOVUxMKTsK KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyNpZmRlZiBDS19TU0wK KyAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBDS19TU0wgKi8KKyAgICAgICAgICAgIGlmIChkIDw9 IDApCisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisjZW5kaWYJLyogVk1TICovCisK KwlkZWJ1ZyhGMTExLCJkb2Z0cHNlbmQyIFhYIHp4aW4iLGNrbHRvYShuKSxmZmMpOworICAgICAg ICBpZiAobiA8IDApCisgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJsb2NhbDogJXM6ICVzXG4i LCBmdHBzbmQubG9jYWwsIGNrX2VycnN0cigpKTsKKyAgICAgICAgaWYgKGQgPCAwIHx8IChkID0g c2VjdXJlX2ZsdXNoKGRvdXQpKSA8IDApIHsKKyAgICAgICAgICAgIGlmIChkID09IC0xICYmIGVy cm5vICYmIGVycm5vICE9IEVQSVBFKQorICAgICAgICAgICAgICBwZXJyb3IoIm5ldG91dCIpOwor ICAgICAgICAgICAgZnRwc25kLmJ5dGVzID0gLTE7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7 CisKKyAgICAgIGNhc2UgRlRUX0FTQzogICAgICAgICAgICAgICAgICAgICAvKiBUZXh0IG1vZGUg Ki8KKyNpZm5kZWYgTk9DU0VUUworICAgICAgICBpZiAoZnRwc25kLnhsYXRlKSB7ICAgICAgICAg ICAgIC8qIFdpdGggdHJhbnNsYXRpb24gKi8KKyAgICAgICAgICAgIGluaXR4bGF0ZShmdHBzbmQu aW5jcyxmdHBzbmQub3V0Y3MpOworICAgICAgICAgICAgd2hpbGUgKCFjYW5jZWxmaWxlKSB7Cisg ICAgICAgICAgICAgICAgaWYgKChjMCA9IHhnbmJ5dGUoRkNfVUNTMixmdHBzbmQuaW5jcyxOVUxM KSkgPCAwKSBicmVhazsKKyAgICAgICAgICAgICAgICBpZiAoKHggPSB4cG5ieXRlKGMwLFRDX1VD UzIsZnRwc25kLm91dGNzLHh4b3V0KSkgPCAwKSBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg ICAgfSBlbHNlIHsKKyNlbmRpZiAvKiBOT0NTRVRTICovCisgICAgICAgICAgICAvKiBUZXh0IG1v ZGUsIG5vIHRyYW5zbGF0aW9uICovCisgICAgICAgICAgICB3aGlsZSAoKChjID0gem1pbmNoYXIo KSkgPiAtMSkgJiYgIWNhbmNlbGZpbGUpIHsKKyAgICAgICAgICAgICAgICBmZmMrKzsKKwkJaWYg KHh4b3V0KGMpIDwgMCkKKwkJICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGQg PSAwOworI2lmbmRlZiBOT0NTRVRTCisgICAgICAgIH0KKyNlbmRpZiAvKiBOT0NTRVRTICovCisg ICAgICAgIGlmIChkb3V0ID09IC0xIHx8IChkID0gc2VjdXJlX2ZsdXNoKGRvdXQpKSA8IDApIHsK KyAgICAgICAgICAgIGlmIChkID09IC0xICYmIGVycm5vICYmIGVycm5vICE9IEVQSVBFKQorICAg ICAgICAgICAgICBwZXJyb3IoIm5ldG91dCIpOworICAgICAgICAgICAgZnRwc25kLmJ5dGVzID0g LTE7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHRmYyArPSBmZmM7ICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIFRvdGFsIGZpbGUgY2hhcnMgKi8KKyNpZmRlZiBHRlRJ TUVSCisgICAgZnBmc2VjcyA9IGdmdGltZXIoKTsKKyNlbmRpZiAvKiBHRlRJTUVSICovCisgICAg emNsb3NlKFpJRklMRSk7ICAgICAgICAgICAgICAgICAgICAgLyogQ2xvc2UgaW5wdXQgZmlsZSAq LworI2lmZGVmIFBJUEVTRU5ECisgICAgaWYgKHNuZGZpbHRlcikgICAgICAgICAgICAgICAgICAg ICAgLyogVW5kbyB0aGlzIChpdCdzIHBlciBmaWxlKSAqLworICAgICAgcGlwZXNlbmQgPSAwOwor I2VuZGlmIC8qIFBJUEVTRU5EICovCisKKyNpZmRlZiBDS19TU0wKKyAgICAgICAgaWYgKHNzbF9m dHBfZGF0YV9hY3RpdmVfZmxhZykgeworICAgICAgICAgICAgU1NMX3NodXRkb3duKHNzbF9mdHBf ZGF0YV9jb24pOworICAgICAgICAgICAgU1NMX2ZyZWUoc3NsX2Z0cF9kYXRhX2Nvbik7CisgICAg ICAgICAgICBzc2xfZnRwX2RhdGFfYWN0aXZlX2ZsYWcgPSAwOworICAgICAgICAgICAgc3NsX2Z0 cF9kYXRhX2NvbiA9IE5VTEw7CisgICAgICAgIH0KKyNlbmRpZiAvKiBDS19TU0wgKi8KKworI2lm ZGVmIFRDUElQTElCCisgICAgc29ja2V0X2Nsb3NlKGRvdXQpOyAgICAgICAgICAgICAgICAgLyog Q2xvc2UgZGF0YSBjb25uZWN0aW9uICovCisjZWxzZSAvKiBUQ1BJUExJQiAqLworI2lmZGVmIFVT RV9TSFVURE9XTgorICAgIHNodXRkb3duKGRvdXQsIDErMSk7CisjZW5kaWYgLyogVVNFX1NIVVRE T1dOICovCisgICAgY2xvc2UoZG91dCk7CisjZW5kaWYgLyogVENQSVBMSUIgKi8KKyAgICBmdHBz bmQucmVwbHkgPSBnZXRyZXBseSgwLGZ0cHNuZC5pbmNzLGZ0cHNuZC5vdXRjcyxmdHBfdmJtLDAp OworICAgIHNpZ25hbChTSUdJTlQsIGZ0cHNuZC5vbGRpbnRyKTsgICAgICAgICAgICAvKiBQdXQg YmFjayBpbnRlcnJ1cHRzICovCisjaWZkZWYgU0lHUElQRQorICAgIGlmIChmdHBzbmQub2xkaW50 cCkKKyAgICAgIHNpZ25hbChTSUdQSVBFLCBmdHBzbmQub2xkaW50cCk7CisjZW5kaWYgLyogU0lH UElQRSAqLworICAgIGlmIChmdHBzbmQucmVwbHkgPT0gUkVQTFlfVFJBTlNJRU5UIHx8IGZ0cHNu ZC5yZXBseSA9PSBSRVBMWV9FUlJPUikgeworICAgICAgICBkZWJ1ZyhGMTAxLCJkb2Z0cHNlbmQy IGZ0cHNuZC5yZXBseSIsIiIsZnRwc25kLnJlcGx5KTsKKyAgICAgICAgZnRwc25kcmV0ID0gLTE7 CisjaWZkZWYgTlRTSUcKKyAgICAgICAgY2tUaHJlYWRFbmQodGhyZWFkaW5mbyk7CisjZW5kaWYg LyogTlRTSUcgKi8KKyAgICAgICAgcmV0dXJuOworICAgIH0gZWxzZSBpZiAoY2FuY2VsZmlsZSkg eworICAgICAgICBkZWJ1ZyhGMTAxLCJkb2Z0cHNlbmQyIGNhbmNlbGVkIiwiIixmdHBzbmQuYnl0 ZXMpOworICAgICAgICBmdHBzbmRyZXQgPSAtMTsKKyNpZmRlZiBOVFNJRworICAgICAgICBja1Ro cmVhZEVuZCh0aHJlYWRpbmZvKTsKKyNlbmRpZiAvKiBOVFNJRyAqLworICAgICAgICByZXR1cm47 CisgICAgfQorICAgIGRlYnVnKEYxMDEsImRvZnRwc2VuZDIgb2siLCIiLGZ0cHNuZC5ieXRlcyk7 CisgICAgZnRwc25kcmV0ID0gMDsKKyNpZmRlZiBOVFNJRworICAgICBja1RocmVhZEVuZCh0aHJl YWRpbmZvKTsKKyNlbmRpZiAvKiBOVFNJRyAqLworfQorCitzdGF0aWMgaW50CitzZW5kcmVxdWVz dChjbWQsIGxvY2FsLCByZW1vdGUsIHhsYXRlLCBpbmNzLCBvdXRjcywgcmVzdGFydCkKKyAgICBj aGFyICpjbWQsICpsb2NhbCwgKnJlbW90ZTsgaW50IHhsYXRlLCBpbmNzLCBvdXRjcywgcmVzdGFy dDsKK3sKKyAgICBpZiAoIXJlbW90ZSkgcmVtb3RlID0gIiI7ICAgICAgICAgICAvKiBDaGVjayBh cmdzICovCisgICAgaWYgKCEqcmVtb3RlKSByZW1vdGUgPSBsb2NhbDsKKyAgICBpZiAoIWxvY2Fs KSBsb2NhbCA9ICIiOworICAgIGlmICghKmxvY2FsKSByZXR1cm4oLTEpOworICAgIGlmICghY21k KSBjbWQgPSAiIjsKKyAgICBpZiAoISpjbWQpIGNtZCA9ICJTVE9SIjsKKworICAgIGRlYnVnKEYx MTEsImZ0cCBzZW5kcmVxdWVzdCByZXN0YXJ0Iixsb2NhbCxyZXN0YXJ0KTsKKworICAgIG5vdXQg PSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEluaXQgb3V0cHV0IGJ1ZmZlciBjb3Vu dCAqLworICAgIGZ0cHNuZC5ieXRlcyA9IDA7ICAgICAgICAgICAgICAgICAgIC8qIEZpbGUgaW5w dXQgYnl0ZSBjb3VudCAqLworICAgIGRvdXQgPSAtMTsKKworI2lmZGVmIEZUUF9QUk9YWQorICAg IGlmIChwcm94eSkgeworICAgICAgICBwcm94dHJhbnMoY21kLCBsb2NhbCwgcmVtb3RlLCAhc3Ry Y21wKGNtZCwiU1RPVSIpKTsKKyAgICAgICAgcmV0dXJuKDApOworICAgIH0KKyNlbmRpZiAvKiBG VFBfUFJPWFkgKi8KKworICAgIGNoYW5nZXR5cGUoZnRwX3R5cCwwKTsgICAgICAgICAgICAgIC8q IENoYW5nZSB0eXBlIGZvciB0aGlzIGZpbGUgKi8KKworICAgIGZ0cHNuZC5vbGRpbnRyID0gTlVM TDsJCS8qIFNldCB1cCBpbnRlcnJ1cHQgaGFuZGxlciAqLworICAgIGZ0cHNuZC5vbGRpbnRwID0g TlVMTDsKKyAgICBmdHBzbmQucmVzdGFydCA9IHJlc3RhcnQ7CisgICAgZnRwc25kLnhsYXRlID0g eGxhdGU7CisgICAgZnRwc25kLmxtb2RlID0gIndiIjsKKworI2lmZGVmIFBJUEVTRU5EICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIFVzZSBLZXJtaXQgQVBJIGZvciBmaWxlIGkvby4uLiAqLwor ICAgIGlmIChzbmRmaWx0ZXIpIHsKKyAgICAgICAgY2hhciAqIHAgPSBOVUxMLCAqIHE7CisjaWZu ZGVmIE5PU1BMCisgICAgICAgIGludCBuID0gQ0tNQVhQQVRIOworICAgICAgICBpZiAoY21kX3F1 b3RpbmcgJiYgKHAgPSAoY2hhciAqKSBtYWxsb2MobiArIDEpKSkgeworICAgICAgICAgICAgcSA9 IHA7CisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJzZW5kcmVxdWVzdCBwaXBlc2VuZCBmaWx0ZXIi LHNuZGZpbHRlciwwKTsKKyAgICAgICAgICAgIHp6c3RyaW5nKHNuZGZpbHRlciwmcCwmbik7Cisg ICAgICAgICAgICBkZWJ1ZyhGMTExLCJzZW5kcmVxdWVzdCBwaXBlbmFtZSIscSxuKTsKKyAgICAg ICAgICAgIGlmIChuIDw9IDApIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIj9Tb3JyeSwgc2Vu ZCBmaWx0ZXIgKyBmaWxlbmFtZSB0b28gbG9uZywgJWQgbWF4LlxuIiwKKyAgICAgICAgICAgICAg ICAgICAgICAgQ0tNQVhQQVRICisgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAg ICAgICAgZnJlZShxKTsKKyAgICAgICAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICAgICAg fQorICAgICAgICAgICAgY2tzdHJuY3B5KGZpbG5hbSxxLENLTUFYUEFUSCsxKTsKKyAgICAgICAg ICAgIGZyZWUocSk7CisgICAgICAgICAgICBsb2NhbCA9IGZpbG5hbTsKKyAgICAgICAgfQorI2Vu ZGlmIC8qIE5PU1BMICovCisgICAgfQorCisgICAgaWYgKHNuZGZpbHRlcikgICAgICAgICAgICAg ICAgICAgICAgLyogSWYgc2VuZGluZyB0aHJ1IGEgZmlsdGVyICovCisgICAgICBwaXBlc2VuZCA9 IDE7ICAgICAgICAgICAgICAgICAgICAgLyogc2V0IHRoaXMgZm9yIG9wZW4gYW5kIGkvbyAqLwor I2VuZGlmIC8qIFBJUEVTRU5EICovCisgICAgCisjaWZkZWYgVk1TCisgICAgZGVidWcoRjEwMSwi WFhYIGJlZm9yZSBvcGVuaSBiaW5hcnkiLCIiLGJpbmFyeSk7CisgICAgZGVidWcoRjEwMSwiWFhY IGJlZm9yZSBvcGVuaSBmdHBfdHlwIiwiIixmdHBfdHlwKTsKKyNlbmRpZgkvKiBWTVMgKi8KKwor ICAgIGlmIChvcGVuaShsb2NhbCkgPT0gMCkJCS8qIFRyeSB0byBvcGVuIHRoZSBpbnB1dCBmaWxl ICovCisgICAgICByZXR1cm4oLTEpOworCisjaWZkZWYgVk1TCisgICAgZGVidWcoRjEwMSwiWFhY IGFmdGVyIG9wZW5pIGJpbmFyeSIsIiIsYmluYXJ5KTsKKyAgICBkZWJ1ZyhGMTAxLCJYWFggYWZ0 ZXIgb3BlbmkgZnRwX3R5cCIsIiIsZnRwX3R5cCk7CisgICAgaWYgKCFmb3JjZXR5cGUpIHsKKwlp ZiAoYmluYXJ5ICE9IGZ0cF90eXApIHsJLyogVk1TIHpvcGVuaSgpIHNldHMgYmluYXJ5ICovCisJ ICAgIGRlYnVnKEYxMDEsIlhYWCBjaGFuZ2luZyB0eXBlIiwiIixiaW5hcnkpOworCSAgICBkb2Z0 cHR5cChiaW5hcnkpOworCSAgICBkZWJ1ZyhGMTAxLCJYWFggYWZ0ZXIgZG9mdHB0eXAiLCIiLGZ0 cF90eXApOworCisJICAgIC8qICoqKiogKi8KKwkgICAgaWYgKGRpc3BsYSAmJiBmZGlzcGxhKSB7 CS8qIFVwZGF0ZSBmaWxlIHR5cGUgZGlzcGxheSAqLworCQlmdHNjcmVlbihTQ1JfRk4sJ0YnLChD S19PRkZfVCkwLGxvY2FsKTsKKwkgICAgfQorCX0KKyAgICB9CisjZW5kaWYJLyogVk1TICovCisg ICAgZnRwc25kcmV0ID0gMDsKKyAgICBmdHBzbmQuaW5jcyA9IGluY3M7CisgICAgZnRwc25kLm91 dGNzID0gb3V0Y3M7CisgICAgZnRwc25kLmNtZCA9IGNtZDsKKyAgICBmdHBzbmQubG9jYWwgPSBs b2NhbDsKKyAgICBmdHBzbmQucmVtb3RlID0gcmVtb3RlOworICAgIGZ0cHNuZC5vbGRpbnRyID0g c2lnbmFsKFNJR0lOVCwgY2FuY2Vsc2VuZCk7CisgICAgaGF2ZXNpZ2ludCA9IDA7CisKKyAgICBp ZiAoY2NfZXhlY3V0ZShja2phZGRyKHNlbmRjYW5jZWwpLCBkb2Z0cHNlbmQsIGZhaWxmdHBzZW5k KSA8IDApCisgICAgICByZXR1cm4oLTEpOworICAgIGlmIChmdHBzbmRyZXQgPCAwKQorICAgICAg cmV0dXJuKC0xKTsKKyAgICBpZiAoY2NfZXhlY3V0ZShja2phZGRyKHNlbmRjYW5jZWwpLCBkb2Z0 cHNlbmQyLCBmYWlsZnRwc2VuZDIpIDwgMCkKKyAgICAgIHJldHVybigtMSk7CisKKyAgICByZXR1 cm4oZnRwc25kcmV0KTsKK30KKworc3RhdGljIHNpZ3R5cGUKK2NhbmNlbHJlY3Yoc2lnKSBpbnQg c2lnOyB7CisgICAgaGF2ZXNpZ2ludCsrOworICAgIGNhbmNlbGZpbGUgPSAwOworICAgIGNhbmNl bGdyb3VwKys7CisgICAgc2VjdXJlX2dldGMoMCwxKTsJCQkvKiBJbml0aWFsaXplIG5ldCBpbnB1 dCBidWZmZXJzICovCisgICAgcHJpbnRmKCIgQ2FuY2VsaW5nLi4uXG4iKTsKKyAgICBkZWJ1ZyhG MTAwLCJmdHAgY2FuY2VscmVjdiBjYXVnaHQgU0lHSU5UIiwiIiwwKTsKKyAgICBmZmx1c2goc3Rk b3V0KTsKKyAgICBpZiAoZnBfbm1sKSB7CisgICAgICAgIGlmIChmcF9ubWwgIT0gc3Rkb3V0KQor ICAgICAgICAgIGZjbG9zZShmcF9ubWwpOworICAgICAgICBmcF9ubWwgPSBOVUxMOworICAgIH0K KyNpZm5kZWYgT1MyCisgICAgbG9uZ2ptcChyZWN2Y2FuY2VsLCAxKTsKKyNlbHNlCisgICAgUG9z dEN0cmxDU2VtKCk7CisjZW5kaWYgLyogT1MyICovCit9CisKKy8qIEFyZ3VtZW50bGVzcyBmcm9u dC1lbmQgZm9yIHNlY3VyZV9nZXRjKCkgKi8KKworc3RhdGljIGludAorbmV0Z2V0YygpIHsKKyAg ICByZXR1cm4oc2VjdXJlX2dldGMoZ2xvYmFsZGluLDApKTsKK30KKworLyogUmV0dXJucyAtMSBv biBmYWlsdXJlLCAwIG9uIHN1Y2Nlc3MsIDEgaWYgZmlsZSBza2lwcGVkICovCisKKy8qCisgIFNl dHMgZnRwY29kZSA8IDAgb24gZmFpbHVyZSBpZiBmYWlsdXJlIHJlYXNvbiBpcyBub3Qgc2VydmVy IHJlcGx5IGNvZGU6CisgICAgLTE6IGludGVycnVwdGVkIGJ5IHVzZXIuCisgICAgLTI6IGVycm9y IG9wZW5pbmcgb3Igd3JpdGluZyBvdXRwdXQgZmlsZSAocmVhc29uIGluIGVycm5vKS4KKyAgICAt MzogZmFpbHVyZSB0byBtYWtlIGRhdGEgY29ubmVjdGlvbi4KKyAgICAtNDogbmV0d29yayByZWFk IGVycm9yIChyZWFzb24gaW4gZXJybm8pLgorKi8KKworc3RydWN0IHh4X2Z0cHJlY3YgeworICAg IGludCByZXBseTsKKyAgICBpbnQgZmNzOworICAgIGludCByY3M7CisgICAgaW50IHJlY292ZXI7 CisgICAgaW50IHhsYXRlOworICAgIGludCBkaW47CisgICAgaW50IGlzX3JldHI7CisgICAgc2ln X3Qgb2xkaW50ciwgb2xkaW50cDsKKyAgICBjaGFyICogY21kOworICAgIGNoYXIgKiBsb2NhbDsK KyAgICBjaGFyICogcmVtb3RlOworICAgIGNoYXIgKiBsbW9kZTsKKyAgICBjaGFyICogcGlwZW5h bWU7CisgICAgaW50ICAgIHRjcmZsYWc7CisgICAgQ0tfT0ZGX1QgbG9jYWxzaXplOworfTsKK3N0 YXRpYyBzdHJ1Y3QgeHhfZnRwcmVjdiBmdHByZWN2OworCitzdGF0aWMgaW50IGZ0cHJlY3ZyZXQg PSAwOworCitzdGF0aWMgVk9JRAorI2lmZGVmIENLX0FOU0lDCitmYWlsZnRwcmVjdihWT0lEICog dGhyZWFkaW5mbykKKyNlbHNlCitmYWlsZnRwcmVjdih0aHJlYWRpbmZvKSBWT0lEICogdGhyZWFk aW5mbzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworI2lmZGVmIE5UU0lHCisgICAgaWYgKHRo cmVhZGluZm8pIHsgICAgICAgICAgICAgICAgICAgLyogVGhyZWFkIGxvY2FsIHN0b3JhZ2UuLi4g Ki8KKyAgICAgICAgVGxzU2V0VmFsdWUoVGxzSW5kZXgsdGhyZWFkaW5mbyk7CisgICAgICAgIGRl YnVnKEYxMDAsICJkb2NtZGZpbGUgY2FsbGVkIHdpdGggdGhyZWFkaW5mbyBibG9jayIsIiIsIDAp OworICAgIH0gZWxzZSBkZWJ1ZyhGMTAwLCAiZG9jbWRmaWxlIC0gdGhyZWFkaW5mbyBpcyBOVUxM IiwgIiIsIDApOworI2VuZGlmIC8qIE5UU0lHICovCisKKyNpZmRlZiBDS19MT0dJTgorI2lmZGVm IElLU0QKKyNpZmRlZiBOVAorICAgIGlmIChpbnNlcnZlcikKKyAgICAgIHNldG50Y3JlZHMoKTsK KyNlbmRpZiAvKiBOVCAqLworI2VuZGlmIC8qIElLU0QgKi8KKyNlbmRpZiAvKiBDS19MT0dJTiAq LworCisgICAgd2hpbGUgKGNwZW5kKSB7CisgICAgICAgIGZ0cHJlY3YucmVwbHkgPSBnZXRyZXBs eSgwLGZ0cHJlY3YuZmNzLGZ0cHJlY3YucmNzLGZ0cF92Ym0sMCk7CisgICAgfQorICAgIGlmIChk YXRhID49IDApIHsKKyNpZmRlZiBDS19TU0wKKyAgICAgICAgaWYgKHNzbF9mdHBfZGF0YV9hY3Rp dmVfZmxhZykgeworICAgICAgICAgICAgU1NMX3NodXRkb3duKHNzbF9mdHBfZGF0YV9jb24pOwor ICAgICAgICAgICAgU1NMX2ZyZWUoc3NsX2Z0cF9kYXRhX2Nvbik7CisgICAgICAgICAgICBzc2xf ZnRwX2RhdGFfYWN0aXZlX2ZsYWcgPSAwOworICAgICAgICAgICAgc3NsX2Z0cF9kYXRhX2NvbiA9 IE5VTEw7CisgICAgICAgIH0KKyNlbmRpZiAvKiBDS19TU0wgKi8KKyNpZmRlZiBUQ1BJUExJQgor ICAgICAgICBzb2NrZXRfY2xvc2UoZGF0YSk7CisjZWxzZSAvKiBUQ1BJUExJQiAqLworI2lmZGVm IFVTRV9TSFVURE9XTgorICAgICAgICBzaHV0ZG93bihkYXRhLCAxKzEpOworI2VuZGlmIC8qIFVT RV9TSFVURE9XTiAqLworICAgICAgICBjbG9zZShkYXRhKTsKKyNlbmRpZiAvKiBUQ1BJUExJQiAq LworICAgICAgICBkYXRhID0gLTE7CisgICAgICAgIGdsb2JhbGRpbiA9IC0xOworICAgIH0KKyAg ICBpZiAoZnRwcmVjdi5vbGRpbnRyKQorICAgICAgc2lnbmFsKFNJR0lOVCwgZnRwcmVjdi5vbGRp bnRyKTsKKyAgICBmdHBjb2RlID0gLTE7CisgICAgZnRwcmVjdnJldCA9IC0xOworCisjaWZuZGVm IE9TMgorICAgIC8qIFRFU1QgTUUgSU4gSzk1ICovCisgICAgaWYgKGhhdmVzaWdpbnQpIHsKKwlo YXZlc2lnaW50ID0gMDsKKwlkZWJ1ZyhGMTAwLCJmdHAgZmFpbGZ0cHJlY3YgY2hhaW4gdG8gdHJh cCgpLi4uIiwiIiwwKTsKKwlpZiAoZnRwcmVjdi5vbGRpbnRyICE9IFNJR19JR04pCisJICAoKmZ0 cHJlY3Yub2xkaW50cikoU0lHSU5UKTsKKwkvKiBOT1RSRUFDSEVEIChJIGhvcGUhKSAqLworCWRl YnVnKEYxMDAsImZ0cCBmYWlsZnRwcmVjdiByZXR1cm4gZnJvbSB0cmFwKCkuLi4iLCIiLDApOwor ICAgIH0KKyNlbmRpZiAvKiBPUzIgKi8KKyAgICByZXR1cm47Cit9CisKK3N0YXRpYyBWT0lECisj aWZkZWYgQ0tfQU5TSUMKK2RvZnRwcmVjdihWT0lEICogdGhyZWFkaW5mbykKKyNlbHNlCitkb2Z0 cHJlY3YodGhyZWFkaW5mbykgVk9JRCAqIHRocmVhZGluZm87CisjZW5kaWYgLyogQ0tfQU5TSUMg Ki8KK3sKKyNpZmRlZiBOVFNJRworICAgIGlmICh0aHJlYWRpbmZvKSB7ICAgICAgICAgICAgICAg ICAgIC8qIFRocmVhZCBsb2NhbCBzdG9yYWdlLi4uICovCisgICAgICAgIFRsc1NldFZhbHVlKFRs c0luZGV4LHRocmVhZGluZm8pOworICAgICAgICBkZWJ1ZyhGMTAwLCAiZG9jbWRmaWxlIGNhbGxl ZCB3aXRoIHRocmVhZGluZm8gYmxvY2siLCIiLCAwKTsKKyAgICB9IGVsc2UgZGVidWcoRjEwMCwg ImRvY21kZmlsZSAtIHRocmVhZGluZm8gaXMgTlVMTCIsICIiLCAwKTsKKyNlbmRpZiAvKiBOVFNJ RyAqLworI2lmZGVmIENLX0xPR0lOCisjaWZkZWYgSUtTRAorI2lmZGVmIE5UCisgICAgaWYgKGlu c2VydmVyKQorICAgICAgc2V0bnRjcmVkcygpOworI2VuZGlmIC8qIE5UICovCisjZW5kaWYgLyog SUtTRCAqLworI2VuZGlmIC8qIENLX0xPR0lOICovCisKKyNpZm5kZWYgQ09NTUVOVAorICAgIGlm ICghb3V0MnNjcmVlbiAmJiAhZnRwcmVjdi5waXBlbmFtZSkgeworCWludCB4OworCWNoYXIgKiBs b2NhbDsKKwlsb2NhbCA9IGZ0cHJlY3YubG9jYWw7CisJeCA9IHpjaGtvKGxvY2FsKTsKKyAgICAg ICAgaWYgKHggPCAwKSB7CisgICAgICAgICAgICBpZiAoKCFkcHlhY3RpdmUgfHwgZnRwX2RlYikp CisgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLAorCQkgICAgICAiVGVtcG9yYXJ5IGZpbGUg JXM6ICVzXG4iLCBmdHByZWN2LmxvY2FsLCBja19lcnJzdHIoKSk7CisgICAgICAgICAgICBzaWdu YWwoU0lHSU5ULCBmdHByZWN2Lm9sZGludHIpOworICAgICAgICAgICAgZnRwY29kZSA9IC0yOwor ICAgICAgICAgICAgZnRwcmVjdnJldCA9IC0xOworI2lmZGVmIE5UU0lHCisgICAgICAgICAgICBj a1RocmVhZEVuZCh0aHJlYWRpbmZvKTsKKyNlbmRpZiAvKiBOVFNJRyAqLworICAgICAgICAgICAg cmV0dXJuOworICAgICAgICB9CisgICAgfQorI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICBjaGFu Z2V0eXBlKCghZnRwcmVjdi5pc19yZXRyKSA/IEZUVF9BU0MgOiBmdHBfdHlwLCAwKTsKKyAgICBp ZiAoaW5pdGNvbm4oKSkgeyAgICAgICAgICAgICAgICAgICAvKiBJbml0aWFsaXplIHRoZSBkYXRh IGNvbm5lY3Rpb24gKi8KKyAgICAgICAgc2lnbmFsKFNJR0lOVCwgZnRwcmVjdi5vbGRpbnRyKTsK KyAgICAgICAgZnRwY29kZSA9IC0xOworICAgICAgICBmdHByZWN2cmV0ID0gLTM7CisjaWZkZWYg TlRTSUcKKyAgICAgICAgY2tUaHJlYWRFbmQodGhyZWFkaW5mbyk7CisjZW5kaWYgLyogTlRTSUcg Ki8KKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBzZWN1cmVfZ2V0YygwLDEpOwkJCS8qIElu aXRpYWxpemUgbmV0IGlucHV0IGJ1ZmZlcnMgKi8KKyAgICBmdHByZWN2cmV0ID0gMDsKKworI2lm ZGVmIE5UU0lHCisgICAgY2tUaHJlYWRFbmQodGhyZWFkaW5mbyk7CisjZW5kaWYgLyogTlRTSUcg Ki8KK30KKworc3RhdGljIFZPSUQKKyNpZmRlZiBDS19BTlNJQworZmFpbGZ0cHJlY3YyKFZPSUQg KiB0aHJlYWRpbmZvKQorI2Vsc2UKK2ZhaWxmdHByZWN2Mih0aHJlYWRpbmZvKSBWT0lEICogdGhy ZWFkaW5mbzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworI2lmZGVmIE5UU0lHCisgICAgaWYg KHRocmVhZGluZm8pIHsgICAgICAgICAgICAgICAgICAgLyogVGhyZWFkIGxvY2FsIHN0b3JhZ2Uu Li4gKi8KKyAgICAgICAgVGxzU2V0VmFsdWUoVGxzSW5kZXgsdGhyZWFkaW5mbyk7CisgICAgICAg IGRlYnVnKEYxMDAsICJkb2NtZGZpbGUgY2FsbGVkIHdpdGggdGhyZWFkaW5mbyBibG9jayIsIiIs IDApOworICAgIH0gZWxzZSBkZWJ1ZyhGMTAwLCAiZG9jbWRmaWxlIC0gdGhyZWFkaW5mbyBpcyBO VUxMIiwgIiIsIDApOworI2VuZGlmIC8qIE5UU0lHICovCisjaWZkZWYgQ0tfTE9HSU4KKyNpZmRl ZiBJS1NECisjaWZkZWYgTlQKKyAgICBpZiAoaW5zZXJ2ZXIpCisgICAgICBzZXRudGNyZWRzKCk7 CisjZW5kaWYgLyogTlQgKi8KKyNlbmRpZiAvKiBJS1NEICovCisjZW5kaWYgLyogQ0tfTE9HSU4g Ki8KKworICAgIC8qIENhbmNlbCB1c2luZyBSRkM5NTkgcmVjb21tZW5kZWQgSVAsU1lOQyBzZXF1 ZW5jZSAgKi8KKworICAgIGRlYnVnKEYxMDAsImZ0cCByZWN2cmVxdWVzdCBDQU5DRUwiLCIiLDAp OworI2lmZGVmIEdGVElNRVIKKyAgICBmcGZzZWNzID0gZ2Z0aW1lcigpOworI2VuZGlmIC8qIEdG VElNRVIgKi8KKyNpZmRlZiBTSUdQSVBFCisgICAgaWYgKGZ0cHJlY3Yub2xkaW50cCkKKyAgICAg IHNpZ25hbChTSUdQSVBFLCBmdHByZWN2Lm9sZGludHIpOworI2VuZGlmIC8qIFNJR1BJUEUgKi8K KyAgICBzaWduYWwoU0lHSU5ULCBTSUdfSUdOKTsKKyAgICBpZiAoIWNwZW5kKSB7CisgICAgICAg IGZ0cGNvZGUgPSAtMTsKKyAgICAgICAgc2lnbmFsKFNJR0lOVCwgZnRwcmVjdi5vbGRpbnRyKTsK KyAgICAgICAgZnRwcmVjdnJldCA9IC0xOworI2lmZGVmIE5UU0lHCisgICAgICAgIGNrVGhyZWFk RW5kKHRocmVhZGluZm8pOworI2VuZGlmIC8qIE5UU0lHICovCisgICAgICAgIHJldHVybjsKKyAg ICB9CisgICAgY2FuY2VsX3JlbW90ZShmdHByZWN2LmRpbik7CisKKyNpZmRlZiBGVFBfVElNRU9V VAorICAgIGlmIChmdHBfdGltZWRfb3V0ICYmIG91dDJzY3JlZW4gJiYgIXF1aWV0KQorICAgICAg cHJpbnRmKCJcbj9UaW1lZCBvdXQuXG4iKTsKKyNlbmRpZgkvKiBGVFBfVElNRU9VVCAqLworCisg ICAgaWYgKGZ0cGNvZGUgPiAtMSkKKyAgICAgIGZ0cGNvZGUgPSAtMTsKKyAgICBpZiAoZGF0YSA+ PSAwKSB7CisjaWZkZWYgQ0tfU1NMCisgICAgICAgIGlmIChzc2xfZnRwX2RhdGFfYWN0aXZlX2Zs YWcpIHsKKyAgICAgICAgICAgIFNTTF9zaHV0ZG93bihzc2xfZnRwX2RhdGFfY29uKTsKKyAgICAg ICAgICAgIFNTTF9mcmVlKHNzbF9mdHBfZGF0YV9jb24pOworICAgICAgICAgICAgc3NsX2Z0cF9k YXRhX2FjdGl2ZV9mbGFnID0gMDsKKyAgICAgICAgICAgIHNzbF9mdHBfZGF0YV9jb24gPSBOVUxM OworICAgICAgICB9CisjZW5kaWYgLyogQ0tfU1NMICovCisjaWZkZWYgVENQSVBMSUIKKyAgICAg ICAgc29ja2V0X2Nsb3NlKGRhdGEpOworI2Vsc2UgLyogVENQSVBMSUIgKi8KKyNpZmRlZiBVU0Vf U0hVVERPV04KKyAgICAgICAgc2h1dGRvd24oZGF0YSwgMSsxKTsKKyNlbmRpZiAvKiBVU0VfU0hV VERPV04gKi8KKyAgICAgICAgY2xvc2UoZGF0YSk7CisjZW5kaWYgLyogVENQSVBMSUIgKi8KKyAg ICAgICAgZGF0YSA9IC0xOworICAgICAgICBnbG9iYWxkaW4gPSAtMTsKKyAgICB9CisgICAgaWYg KCFvdXQyc2NyZWVuKSB7CisJaW50IHggPSAwOworCWRlYnVnKEYxMTEsImZ0cCBmYWlscmVjdjIg emNsb3NlIixmdHByZWN2LmxvY2FsLGtlZXApOworCXpjbG9zZShaT0ZJTEUpOworCXN3aXRjaCAo a2VlcCkgewkJCS8qIHdoaWNoIGlzLi4uICovCisJICBjYXNlIFNFVF9BVVRPOgkJLyogQVVUTyAq LworCSAgICBpZiAoY3VydHlwZSA9PSBGVFRfQVNDKQkvKiBEZWxldGUgZmlsZSBpZiBUWVBFIEEu ICovCisJICAgICAgeCA9IDE7CisJICAgIGJyZWFrOworCSAgY2FzZSBTRVRfT0ZGOgkJCS8qIERJ U0NBUkQgKi8KKwkgICAgeCA9IDE7CQkJLyogRGVsZXRlIGZpbGUsIHBlcmlvZC4gKi8KKwkgICAg YnJlYWs7CisJICBkZWZhdWx0OgkJCS8qIEtFRVAgKi8KKwkgICAgYnJlYWs7CisJfQorCWlmICh4 KSB7CisJICAgIHggPSB6ZGVsZXQoZnRwcmVjdi5sb2NhbCk7CisJICAgIGRlYnVnKEYxMTEsImZ0 cCBmYWlscmVjdjIgZGVsZXRlIGluY29tcGxldGUiLGZ0cHJlY3YubG9jYWwseCk7CisJfQorICAg IH0KKyAgICBpZiAoZnRwcmVjdi5kaW4pIHsKKyNpZmRlZiBUQ1BJUExJQgorICAgICAgICBzb2Nr ZXRfY2xvc2UoZnRwcmVjdi5kaW4pOworI2Vsc2UgLyogVENQSVBMSUIgKi8KKyNpZmRlZiBVU0Vf U0hVVERPV04KKyAgICAgICAgc2h1dGRvd24oZnRwcmVjdi5kaW4sIDErMSk7CisjZW5kaWYgLyog VVNFX1NIVVRET1dOICovCisgICAgICAgIGNsb3NlKGZ0cHJlY3YuZGluKTsKKyNlbmRpZiAvKiBU Q1BJUExJQiAqLworICAgIH0KKyAgICBzaWduYWwoU0lHSU5ULCBmdHByZWN2Lm9sZGludHIpOwor ICAgIGZ0cHJlY3ZyZXQgPSAtMTsKKworICAgIGlmIChoYXZlc2lnaW50KSB7CisJaGF2ZXNpZ2lu dCA9IDA7CisJZGVidWcoRjEwMCwiRlRQIGZhaWxmdHByZWN2MiBjaGFpbiB0byB0cmFwKCkuLi4i LCIiLDApOworI2lmZGVmIE9TMgorICAgICAgICBkZWJ1ZyhGMTAwLCJGVFAgZmFpbGZ0cHJlY3Yy IFBvc3RDdHJsQ1NlbSgpLi4uIiwiIiwwKTsKKyAgICAgICAgUG9zdEN0cmxDU2VtKCk7CisjZWxz ZSAvKiBPUzIgKi8KKwlpZiAoZnRwcmVjdi5vbGRpbnRyICE9IFNJR19JR04pCisJICAoKmZ0cHJl Y3Yub2xkaW50cikoU0lHSU5UKTsKKwkvKiBOT1RSRUFDSEVEIChJIGhvcGUhKSAqLworCWRlYnVn KEYxMDAsImZ0cCBmYWlsZnRwcmVjdjIgcmV0dXJuIGZyb20gdHJhcCgpLi4uIiwiIiwwKTsKKyNl bmRpZiAvKiBPUzIgKi8KKyAgICB9Cit9CisKK3N0YXRpYyBWT0lECisjaWZkZWYgQ0tfQU5TSUMK K2RvZnRwcmVjdjIoVk9JRCAqIHRocmVhZGluZm8pCisjZWxzZQorZG9mdHByZWN2Mih0aHJlYWRp bmZvKSBWT0lEICogdGhyZWFkaW5mbzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworICAgIHJl Z2lzdGVyIGludCBjLCBkOworICAgIENLX09GRl9UIGJ5dGVzID0gKENLX09GRl9UKTA7CisgICAg aW50IGJhcmVfbGZzID0gMDsKKyAgICBpbnQgYmxrc2l6ZSA9IDA7CisgICAgVUxPTkcgc3RhcnQg PSAwTCwgc3RvcDsKKyAgICBjaGFyICogcDsKKyAgICBzdGF0aWMgY2hhciAqIHJjdmJ1ZiA9IE5V TEw7CisgICAgc3RhdGljIGludCByY3ZidWZzaXogPSAwOworI2lmZGVmIENLX1VSTAorICAgIGNo YXIgbmV3bmFtZVtDS01BWFBBVEgrMV07CQkvKiBGb3IgZmlsZSBkaWFsb2cgKi8KKyNlbmRpZiAv KiBDS19VUkwgKi8KKyAgICBleHRlcm4gaW50IGFkbF9hc2s7CisKKyNpZmRlZiBGVFBfVElNRU9V VAorICAgIGZ0cF90aW1lZF9vdXQgPSAwOworI2VuZGlmCS8qIEZUUF9USU1FT1VUICovCisKKyAg ICBmdHByZWN2LmRpbiA9IC0xOworI2lmZGVmIE5UU0lHCisgICAgaWYgKHRocmVhZGluZm8pIHsg ICAgICAgICAgICAgICAgICAgLyogVGhyZWFkIGxvY2FsIHN0b3JhZ2UuLi4gKi8KKyAgICAgICAg VGxzU2V0VmFsdWUoVGxzSW5kZXgsdGhyZWFkaW5mbyk7CisgICAgICAgIGRlYnVnKEYxMDAsICJk b2NtZGZpbGUgY2FsbGVkIHdpdGggdGhyZWFkaW5mbyBibG9jayIsIiIsIDApOworICAgIH0gZWxz ZSBkZWJ1ZyhGMTAwLCAiZG9jbWRmaWxlIC0gdGhyZWFkaW5mbyBpcyBOVUxMIiwgIiIsIDApOwor I2VuZGlmIC8qIE5UU0lHICovCisjaWZkZWYgQ0tfTE9HSU4KKyNpZmRlZiBJS1NECisjaWZkZWYg TlQKKyAgICBpZiAoaW5zZXJ2ZXIpCisgICAgICBzZXRudGNyZWRzKCk7CisjZW5kaWYgLyogTlQg Ki8KKyNlbmRpZiAvKiBJS1NEICovCisjZW5kaWYgLyogQ0tfTE9HSU4gKi8KKworICAgIGlmIChm dHByZWN2LnJlY292ZXIpIHsgICAgICAgICAgICAgICAgICAgICAgLyogSW5pdGlhdGUgcmVjb3Zl cnkgKi8KKyAgICAgICAgeCA9IGZ0cGNtZCgiUkVTVCIsY2tmc3RvYShmdHByZWN2LmxvY2Fsc2l6 ZSksLTEsLTEsZnRwX3ZibSk7CisgICAgICAgIGRlYnVnKEYxMTEsImZ0cCByZXBseSIsIlJFU1Qi LHgpOworICAgICAgICBpZiAoeCA9PSBSRVBMWV9DT05USU5VRSkgeworICAgICAgICAgICAgZnRw cmVjdi5sbW9kZSA9ICJhYiI7CisgICAgICAgICAgICByc19sZW4gPSBmdHByZWN2LmxvY2Fsc2l6 ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZ0cHJlY3YucmVjb3ZlciA9IDA7Cisg ICAgICAgIH0KKyAgICB9CisgICAgLyogSU1QT1JUQU5UOiBObyBGVFAgY29tbWFuZHMgY2FuIGNv bWUgYmV0d2VlbiBSRVNUIGFuZCBSRVRSISAqLworCisgICAgZGVidWcoRjExMSwiZnRwIHJlY3Zy ZXF1ZXN0IHJlY292ZXIgRSIsZnRwcmVjdi5yZW1vdGUsZnRwcmVjdi5yZWNvdmVyKTsKKworICAg IC8qIFNlbmQgdGhlIGNvbW1hbmQgYW5kIGdldCByZXBseSAqLworICAgIGRlYnVnKEYxMTAsImZ0 cCByZWN2cmVxdWVzdCBjbWQiLGZ0cHJlY3YuY21kLDApOworICAgIGRlYnVnKEYxMTAsImZ0cCBy ZWN2cmVxdWVzdCByZW1vdGUiLGZ0cHJlY3YucmVtb3RlLDApOworCisgICAgaWYgKGZ0cGNtZChm dHByZWN2LmNtZCxmdHByZWN2LnJlbW90ZSxmdHByZWN2LmZjcyxmdHByZWN2LnJjcyxmdHBfdmJt KQorCSE9IFJFUExZX1BSRUxJTSkgeworICAgICAgICBzaWduYWwoU0lHSU5ULCBmdHByZWN2Lm9s ZGludHIpOyAvKiBCYWQgcmVwbHksIGZhaWwuICovCisgICAgICAgIGZ0cHJlY3ZyZXQgPSAtMTsJ CS8qIGZ0cGNvZGUgaXMgc2V0IGJ5IGZ0cGNtZCgpICovCisjaWZkZWYgTlRTSUcKKyAgICAgICAg Y2tUaHJlYWRFbmQodGhyZWFkaW5mbyk7CisjZW5kaWYgLyogTlRTSUcgKi8KKyAgICAgICAgcmV0 dXJuOworICAgIH0KKyAgICBmdHByZWN2LmRpbiA9IGRhdGFjb25uKCJyIik7ICAgICAgICAvKiBH b29kIHJlcGx5LCBvcGVuIGRhdGEgY29ubmVjdGlvbiAqLworICAgIGdsb2JhbGRpbiA9IGZ0cHJl Y3YuZGluOyAgICAgICAgICAgIC8qIEdsb2JhbCBjb3B5IG9mIGZpbGUgZGVzY3JpcHRvciAqLwor ICAgIGlmIChmdHByZWN2LmRpbiA9PSAtMSkgeyAgICAgICAgICAgIC8qIENoZWNrIGZvciBmYWls dXJlICovCisgICAgICAgIGZ0cGNvZGUgPSAtMzsgICAgICAgICAgICAgICAgICAgLyogQ29kZSBm b3Igbm8gZGF0YSBjb25uZWN0aW9uICovCisgICAgICAgIGZ0cHJlY3ZyZXQgPSAtMTsKKyNpZmRl ZiBOVFNJRworICAgICAgICBja1RocmVhZEVuZCh0aHJlYWRpbmZvKTsKKyNlbmRpZiAvKiBOVFNJ RyAqLworICAgICAgICByZXR1cm47CisgICAgfQorI2lmZGVmIENLX1VSTAorICAgIC8qIEluIEs5 NSBHVUkgcHV0IHVwIGEgZmlsZSBib3ggKi8KKyAgICBpZiAoaGF2ZXVybCAmJiBnX3VybC5wdGgg JiYgYWRsX2FzawkpIHsgLyogRG93bmxvYWRpbmcgZnJvbSBhIFVSTCAqLworCWludCB4OworCWNo YXIgKiBwcmVmYWNlID0KKyJcclxuSW5jb21pbmcgZmlsZSBmcm9tIEZUUCBzZXJ2ZXIuLi5cclxu XAorUGxlYXNlIGNvbmZpcm0gb3V0cHV0IGZpbGUgc3BlY2lmaWNhdGlvbiBvciBzdXBwbHkgYW4g YWx0ZXJuYXRpdmU6IjsKKworCXggPSB1cV9maWxlKHByZWZhY2UsCQkvKiBLOTUgR1VJOiBQdXQg dXAgZmlsZSBib3guICovCisJCSAgICBOVUxMLAorCQkgICAgNCwKKwkJICAgIE5VTEwsCisJCSAg ICBmdHByZWN2LmxvY2FsID8gZnRwcmVjdi5sb2NhbCA6IGZ0cHJlY3YucmVtb3RlLAorCQkgICAg bmV3bmFtZSwKKwkJICAgIENLTUFYUEFUSCsxCisJCSAgICApOworCWlmICh4ID4gMCkgeworCSAg ICBmdHByZWN2LmxvY2FsID0gbmV3bmFtZTsJLyogU3Vic3RpdHV0ZSB1c2VyJ3MgZmlsZSBuYW1l ICovCisJICAgIGlmICh4ID09IDIpCQkJLyogQW5kIGFwcGVuZCBpZiB1c2VyIHNhaWQgdG8gKi8K KwkgICAgICBmdHByZWN2Lmxtb2RlID0gImFiIjsKKwl9CisgICAgfQorI2VuZGlmIC8qIENLX1VS TCAqLworICAgIHggPSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE91dHB1dCBm aWxlIG9wZW4gT0s/ICovCisgICAgaWYgKGZ0cHJlY3YucGlwZW5hbWUpIHsJCS8qIENvbW1hbmQg Ki8KKyAgICAgICAgeCA9IHp4Y21kKFpPRklMRSxmdHByZWN2LnBpcGVuYW1lKTsKKyAgICAgICAg ZGVidWcoRjExMSwiZnRwIHJlY3ZyZXF1ZXN0IHp4Y21kIixmdHByZWN2LnBpcGVuYW1lLHgpOwor ICAgIH0gZWxzZSBpZiAoIW91dDJzY3JlZW4pIHsgICAgICAgICAgIC8qIEZpbGUgKi8KKyAgICAg ICAgc3RydWN0IGZpbGluZm8geHg7CisgICAgICAgIHh4LmJzID0gMDsgeHguY3MgPSAwOyB4eC5y bCA9IDA7IHh4Lm9yZyA9IDA7IHh4LmNjID0gMDsKKyAgICAgICAgeHgudHlwID0gMDsgeHgub3Nf c3BlY2lmaWMgPSBOVUw7IHh4LmxibG9wdHMgPSAwOworCS8qIEFwcGVuZCBvciBOZXcgKi8KKyAg ICAgICAgeHguZHNwID0gIXN0cmNtcChmdHByZWN2Lmxtb2RlLCJhYiIpID8gWFlGWl9BIDogWFlG Wl9OOworICAgICAgICB4ID0gem9wZW5vKFpPRklMRSxmdHByZWN2LmxvY2FsLE5VTEwsJnh4KTsK KyAgICAgICAgZGVidWcoRjExMSwiZnRwIHJlY3ZyZXF1ZXN0IHpvcGVubyIsZnRwcmVjdi5sb2Nh bCx4KTsKKyAgICB9CisgICAgaWYgKHggPCAxKSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyog RmFpbHVyZSB0byBvcGVuIG91dHB1dCBmaWxlICovCisgICAgICAgIGlmICgoIWRweWFjdGl2ZSB8 fCBmdHBfZGViKSkKKyAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImxvY2FsKDIpOiAlczogJXNc biIsIGZ0cHJlY3YubG9jYWwsIGNrX2VycnN0cigpKTsKKyAgICAgICAgZnRwcmVjdnJldCA9IC0x OworI2lmZGVmIE5UU0lHCisgICAgICAgIGNrVGhyZWFkRW5kKHRocmVhZGluZm8pOworI2VuZGlm IC8qIE5UU0lHICovCisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgYmxrc2l6ZSA9IEZUUF9C VUZTSVo7ICAgICAgICAgICAgICAgLyogQWxsb2NhdGUgaW5wdXQgYnVmZmVyICovCisKKyAgICBk ZWJ1ZyhGMTAxLCJmdHAgcmVjdnJlcXVlc3QgYmxrc2l6ZSIsIiIsYmxrc2l6ZSk7CisgICAgZGVi dWcoRjEwMSwiZnRwIHJlY3ZyZXF1ZXN0IHJjdmJ1ZnNpeiIsIiIscmN2YnVmc2l6KTsKKworICAg IGlmIChyY3ZidWZzaXogPCBibGtzaXplKSB7ICAgICAgICAgIC8qIGlmIG5lY2Vzc2FyeSAqLwor ICAgICAgICBpZiAocmN2YnVmKSB7CisgICAgICAgICAgICBmcmVlKHJjdmJ1Zik7CisgICAgICAg ICAgICByY3ZidWYgPSBOVUxMOworICAgICAgICB9CisgICAgICAgIHJjdmJ1ZiA9IChjaGFyICop bWFsbG9jKCh1bnNpZ25lZClibGtzaXplKTsKKyAgICAgICAgaWYgKCFyY3ZidWYpIHsKKwkgICAg ZGVidWcoRjEwMCwiZnRwIGdldCByY3ZidWYgbWFsbG9jIGZhaWxlZCIsIiIsMCk7CisgICAgICAg ICAgICBmdHBjb2RlID0gLTI7CisjaWZkZWYgRU5PTUVNCisgICAgICAgICAgICBlcnJubyA9IEVO T01FTTsKKyNlbmRpZiAvKiBFTk9NRU0gKi8KKyAgICAgICAgICAgIGlmICgoIWRweWFjdGl2ZSB8 fCBmdHBfZGViKSkKKyAgICAgICAgICAgICAgcGVycm9yKCJtYWxsb2MiKTsKKyAgICAgICAgICAg IHJjdmJ1ZnNpeiA9IDA7CisgICAgICAgICAgICBmdHByZWN2cmV0ID0gLTE7CisjaWZkZWYgTlRT SUcKKyAgICAgICAgICAgIGNrVGhyZWFkRW5kKHRocmVhZGluZm8pOworI2VuZGlmIC8qIE5UU0lH ICovCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwlkZWJ1ZyhGMTAxLCJmdHAgZ2V0 IHJjdmJ1ZiBtYWxsb2Mgb2siLCIiLGJsa3NpemUpOworICAgICAgICByY3ZidWZzaXogPSBibGtz aXplOworICAgIH0KKyAgICBkZWJ1ZyhGMTExLCJmdHAgZ2V0IHJjdmJ1ZnNpeiIsZnRwcmVjdi5s b2NhbCxyY3ZidWZzaXopOworCisgICAgZmZjID0gKENLX09GRl9UKTA7CQkJLyogQ2hhcmFjdGVy IGNvdW50ZXIgKi8KKyAgICBjcHMgPSBvbGRjcHMgPSAwTDsgICAgICAgICAgICAgICAgICAvKiBU aHJ1cHV0ICovCisgICAgc3RhcnQgPSBnbXN0aW1lcigpOyAgICAgICAgICAgICAgICAgLyogU3Rh cnQgdGltZSAobXNlY3MpICovCisjaWZkZWYgR0ZUSU1FUgorICAgIHJmdGltZXIoKTsgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIFN0YXJ0IHRpbWUgKGZsb2F0KSAqLworI2VuZGlmIC8qIEdG VElNRVIgKi8KKworICAgIGRlYnVnKEYxMTEsImZ0cCBnZXQgdHlwZSIsZnRwcmVjdi5sb2NhbCxj dXJ0eXBlKTsKKyAgICBkZWJ1ZyhGMTAxLCJmdHAgcmVjdnJlcXVlc3QgZnRwX2RwbCIsIiIsZnRw X2RwbCk7CisgICAgc3dpdGNoIChjdXJ0eXBlKSB7CisgICAgICBjYXNlIEZUVF9CSU46ICAgICAg ICAgICAgICAgICAgICAgLyogQmluYXJ5IG1vZGUgKi8KKyAgICAgIGNhc2UgRlRUX1RFTjogICAg ICAgICAgICAgICAgICAgICAvKiBURU5FWCBtb2RlICovCisgICAgICAgIGQgPSAwOworICAgICAg ICB3aGlsZSAoMSkgeworICAgICAgICAgICAgZXJybm8gPSAwOworICAgICAgICAgICAgYyA9IHNl Y3VyZV9yZWFkKGZ0cHJlY3YuZGluLCByY3ZidWYsIHJjdmJ1ZnNpeik7CisgICAgICAgICAgICBp ZiAoY2FuY2VsZmlsZSkgeworICAgICAgICAgICAgICAgIGZhaWxmdHByZWN2Mih0aHJlYWRpbmZv KTsKKyNpZmRlZiBOVFNJRworICAgICAgICAgICAgICAgIGNrVGhyZWFkRW5kKHRocmVhZGluZm8p OworI2VuZGlmIC8qIE5UU0lHICovCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg ICAgfQorICAgICAgICAgICAgaWYgKGMgPCAxKQorICAgICAgICAgICAgICBicmVhazsKKyNpZmRl ZiBwcmludGYgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAoV2hhdCBpZiBpdCBpc24ndD8p ICovCisgICAgICAgICAgICBpZiAob3V0MnNjcmVlbiAmJiAhZnRwcmVjdi5waXBlbmFtZSkgewor ICAgICAgICAgICAgICAgIGludCBpOworICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBj OyBpKyspCisgICAgICAgICAgICAgICAgICBwcmludGYoIiVjIixyY3ZidWZbaV0pOworICAgICAg ICAgICAgfSBlbHNlCisjZW5kaWYgLyogcHJpbnRmICovCisgICAgICAgICAgICAgIHsKKyAgICAg ICAgICAgICAgICByZWdpc3RlciBpbnQgaTsKKyAgICAgICAgICAgICAgICBpID0gMDsKKyAgICAg ICAgICAgICAgICBlcnJubyA9IDA7CisgICAgICAgICAgICAgICAgd2hpbGUgKGkgPCBjKSB7Cisg ICAgICAgICAgICAgICAgICAgIGlmICh6bWNob3V0KHJjdmJ1ZltpKytdKSA8IDApIHsKKyAgICAg ICAgICAgICAgICAgICAgICAgIGQgPSBpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7 CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9 CisgICAgICAgICAgICBieXRlcyArPSBjOworICAgICAgICAgICAgZmZjICs9IGM7CisgICAgICAg IH0KKyNpZmRlZiBGVFBfVElNRU9VVAorCWlmIChjID09IC0zKSB7CisgICAgICAgICAgICBkZWJ1 ZyhGMTAwLCJmdHAgcmVjdnJlcXVlc3QgdGltZW91dCIsIiIsMCk7IAorICAgICAgICAgICAgYnl0 ZXMgPSAoQ0tfT0ZGX1QpLTE7CisJICAgIGZ0cF90aW1lZF9vdXQgPSAxOworCSAgICBmdHBjb2Rl ID0gLTM7CisJfSBlbHNlCisjZW5kaWYJLyogRlRQX1RJTUVPVVQgKi8KKyAgICAgICAgaWYgKGMg PCAwKSB7CisgICAgICAgICAgICBkZWJ1ZyhGMTExLCJmdHAgcmVjdnJlcXVlc3QgZXJybm8iLGNr aXRvYShjKSxlcnJubyk7CisgICAgICAgICAgICBpZiAoYyA9PSAtMSAmJiBlcnJubyAhPSBFUElQ RSkKKyAgICAgICAgICAgICAgaWYgKCghZHB5YWN0aXZlIHx8IGZ0cF9kZWIpKQorICAgICAgICAg ICAgICAgIHBlcnJvcigibmV0aW4iKTsKKyAgICAgICAgICAgIGJ5dGVzID0gKENLX09GRl9UKS0x OworICAgICAgICAgICAgZnRwY29kZSA9IC00OworICAgICAgICB9CisgICAgICAgIGlmIChkIDwg YykgeworICAgICAgICAgICAgZnRwY29kZSA9IC0yOworICAgICAgICAgICAgaWYgKCghZHB5YWN0 aXZlIHx8IGZ0cF9kZWIpKSB7CisgICAgICAgICAgICAgICAgY2hhciAqIHA7CisgICAgICAgICAg ICAgICAgcCA9IGZ0cHJlY3YubG9jYWwgPyBmdHByZWN2LmxvY2FsIDogZnRwcmVjdi5waXBlbmFt ZTsKKyAgICAgICAgICAgICAgICBpZiAoZCA8IDApCisgICAgICAgICAgICAgICAgICBmcHJpbnRm KHN0ZGVyciwKKwkJCSAgImxvY2FsKDMpOiAlczogJXNcbiIsIGZ0cHJlY3YubG9jYWwsIGNrX2Vy cnN0cigpKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICBmcHJpbnRm KHN0ZGVyciwKKwkJCSAgIiVzOiBzaG9ydCB3cml0ZVxuIiwgZnRwcmVjdi5sb2NhbCk7CisgICAg ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgRlRUX0FT QzogICAgICAgICAgICAgICAgICAgICAvKiBUZXh0IG1vZGUgKi8KKwlkZWJ1ZyhGMTAxLCJmdHAg cmVjdnJlcXVlc3QgVFlQRSBBIHhsYXRlIiwiIixmdHByZWN2LnhsYXRlKTsKKyNpZm5kZWYgTk9D U0VUUworICAgICAgICBpZiAoZnRwcmVjdi54bGF0ZSkgeworICAgICAgICAgICAgaW50IHQ7Cisj aWZkZWYgQ0tfQU5TSUMKKyAgICAgICAgICAgIGludCAoKmZuKShjaGFyKTsKKyNlbHNlCisgICAg ICAgICAgICBpbnQgKCpmbikoKTsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworICAgICAgICAgICAg ZGVidWcoRjExMCwiZnRwIHJlY3ZyZXF1ZXN0IChkYXRhKSIsImluaXR4bGF0ZSIsMCk7CisgICAg ICAgICAgICBpbml0eGxhdGUoZnRwcmVjdi5yY3MsZnRwcmVjdi5mY3MpOyAgICAgICAgIC8qIChG cm9tLFRvKSAqLworICAgICAgICAgICAgaWYgKGZ0cHJlY3YucGlwZW5hbWUpIHsKKyAgICAgICAg ICAgICAgICBmbiA9IHBpcGVvdXQ7CisgICAgICAgICAgICAgICAgZGVidWcoRjExMCwiZnRwIHJl Y3ZyZXF1ZXN0IEFTQ0lJIiwicGlwZW91dCIsMCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAg ICAgICAgICAgICAgIGZuID0gb3V0MnNjcmVlbiA/IHNjcm5vdXQgOiBwdXRmaWw7CisgICAgICAg ICAgICAgICAgZGVidWcoRjExMCwiZnRwIHJlY3ZyZXF1ZXN0IEFTQ0lJIiwKKyAgICAgICAgICAg ICAgICAgICAgICBvdXQyc2NyZWVuID8gInNjcm5vdXQiIDogInB1dGZpbCIsMCk7CisgICAgICAg ICAgICB9CisgICAgICAgICAgICB3aGlsZSAoMSkgeworCQkvKiBHZXQgYnl0ZSBmcm9tIG5ldCAq LworICAgICAgICAgICAgICAgIGMwID0geGduYnl0ZShGQ19VQ1MyLGZ0cHJlY3YucmNzLG5ldGdl dGMpOworICAgICAgICAgICAgICAgIGlmIChjYW5jZWxmaWxlKSB7CisgICAgICAgICAgICAgICAg ICAgIGZhaWxmdHByZWN2Mih0aHJlYWRpbmZvKTsKKyNpZmRlZiBOVFNJRworICAgICAgICAgICAg ICAgICAgICBja1RocmVhZEVuZCh0aHJlYWRpbmZvKTsKKyNlbmRpZiAvKiBOVFNJRyAqLworICAg ICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg ICAgIGlmIChjMCA8IDApCisgICAgICAgICAgICAgICAgICBicmVhazsKKwkJLyogU2Vjb25kIGJ5 dGUgZnJvbSBuZXQgKi8KKyAgICAgICAgICAgICAgICBjMSA9IHhnbmJ5dGUoRkNfVUNTMixmdHBy ZWN2LnJjcyxuZXRnZXRjKTsKKyAgICAgICAgICAgICAgICBpZiAoY2FuY2VsZmlsZSkgeworICAg ICAgICAgICAgICAgICAgICBmYWlsZnRwcmVjdjIodGhyZWFkaW5mbyk7CisjaWZkZWYgTlRTSUcK KyAgICAgICAgICAgICAgICAgICAgY2tUaHJlYWRFbmQodGhyZWFkaW5mbyk7CisjZW5kaWYgLyog TlRTSUcgKi8KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgICBpZiAoYzEgPCAwKQorICAgICAgICAgICAgICAgICAgYnJlYWs7Cisj aWZkZWYgQ09NTUVOVAorCQkvKiBLOTU6IENoZWNrIHdoZXRoZXIgd2UgbmVlZCB0aGlzICovCisJ CWlmIChmaWxlb3JkZXIgPiAwKQkvKiBMaXR0bGUgRW5kaWFuICovCisJCSAgYnl0c3dhcCgmYzAs JmMxKTsJLyogc3dhcCBieXRlcyovCisjZW5kaWYgLyogQ09NTUVOVCAqLworCisjaWZkZWYgT1My CisgICAgICAgICAgICAgICAgaWYgKCBvdXQyc2NyZWVuICYmICAgICAgICAgICAgLyogd2UncmUg dHJhbnNsYXRpbmcgdG8gVUNTLTIgKi8gCisgICAgICAgICAgICAgICAgICAgICAhazk1c3Rkb3V0 ICYmICFpbnNlcnZlcikgLyogZm9yIHRoZSByZWFsIHNjcmVlbi4uLiAqLyAgICAgCisgICAgICAg ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1bmlvbiB7CisgICAgICAgICAgICAgICAg ICAgICAgICBVU0hPUlQgdWNzMjsKKyAgICAgICAgICAgICAgICAgICAgICAgIFVDSEFSICBieXRl c1syXTsKKyAgICAgICAgICAgICAgICAgICAgfSBvdXRwdXQ7CisKKyAgICAgICAgICAgICAgICAg ICAgb3V0cHV0LmJ5dGVzWzBdID0gYzE7CisgICAgICAgICAgICAgICAgICAgIG91dHB1dC5ieXRl c1sxXSA9IGMwOworCisgICAgICAgICAgICAgICAgICAgIFZzY3JuV3J0VUNTMlN0ckF0dChWQ01E LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm91dHB1dC51Y3MyLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJleVtWQ01EXSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHdoZXJleFtWQ01EXSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICZjb2xvcmNtZAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKTsKKworICAgICAgICAgICAgICAgIH0gZWxzZSAKKyNlbmRpZiAvKiBPUzIg Ki8KKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmICgoeCA9IHhwbmJ5 dGUoYzAsVENfVUNTMixmdHByZWN2LmZjcyxmbikpIDwgMCkgYnJlYWs7CisgICAgICAgICAgICAg ICAgICAgIGlmICgoeCA9IHhwbmJ5dGUoYzEsVENfVUNTMixmdHByZWN2LmZjcyxmbikpIDwgMCkg YnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2Ug eworI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKyAgICAgICAgICAgIHdoaWxlICgxKSB7CisgICAgICAg ICAgICAgICAgYyA9IHNlY3VyZV9nZXRjKGZ0cHJlY3YuZGluLDApOworICAgICAgICAgICAgICAg IGlmIChjYW5jZWxmaWxlCisjaWZkZWYgRlRQX1RJTUVPVVQKKwkJICAgIHx8IGZ0cF90aW1lZF9v dXQKKyNlbmRpZgkvKiBGVFBfVElNRU9VVCAqLworCQkgICAgKSB7CisgICAgICAgICAgICAgICAg ICAgIGZhaWxmdHByZWN2Mih0aHJlYWRpbmZvKTsKKyNpZmRlZiBOVFNJRworICAgICAgICAgICAg ICAgICAgICBja1RocmVhZEVuZCh0aHJlYWRpbmZvKTsKKyNlbmRpZiAvKiBOVFNJRyAqLworICAg ICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg ICAgIGlmIChjIDwgMCB8fCBjID09IEVPRikKKyAgICAgICAgICAgICAgICAgIGJyZWFrOworI2lm ZGVmIFVOSVgKKwkJLyogUmVjb3JkIGZvcm1hdCBjb252ZXJzaW9uIGZvciBVbml4ICovCisJCS8q IFNLSVAgVEhJUyBGT1IgV0lORE9XUyEgKi8KKyAgICAgICAgICAgICAgICBpZiAoYyA9PSAnXG4n KQorICAgICAgICAgICAgICAgICAgYmFyZV9sZnMrKzsKKyAgICAgICAgICAgICAgICB3aGlsZSAo YyA9PSAnXHInKSB7CisgICAgICAgICAgICAgICAgICAgIGJ5dGVzKys7CisgICAgICAgICAgICAg ICAgICAgIGlmICgoYyA9IHNlY3VyZV9nZXRjKGZ0cHJlY3YuZGluLDApKSAhPSAnXG4nIHx8CisJ CQlmdHByZWN2LnRjcmZsYWcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYW5jZWxm aWxlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFpbGZ0cHJlY3YyKHRocmVhZGlu Zm8pOworI2lmZGVmIE5UU0lHCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2tUaHJlYWRF bmQodGhyZWFkaW5mbyk7CisjZW5kaWYgLyogTlRTSUcgKi8KKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg ICAgICAgICAgICBpZiAoYyA8IDAgfHwgYyA9PSBFT0YpCisgICAgICAgICAgICAgICAgICAgICAg ICAgIGdvdG8gYnJlYWsyOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT0gJ1wwJykg eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzKys7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZ290byBjb250aW4yOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlm IChjIDwgMCkKKyAgICAgICAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIFVOWCAqLworCisg ICAgICAgICAgICAgICAgaWYgKG91dDJzY3JlZW4gJiYgIWZ0cHJlY3YucGlwZW5hbWUpCisjaWZk ZWYgcHJpbnRmCisgICAgICAgICAgICAgICAgICBwcmludGYoIiVjIiwoY2hhciljKTsKKyNlbHNl CisgICAgICAgICAgICAgICAgICBwdXRjaGFyKChjaGFyKWMpOworI2VuZGlmIC8qIHByaW50ZiAq LworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgIGlmICgoZCA9IHptY2hv dXQoYykpIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg Ynl0ZXMrKzsKKyAgICAgICAgICAgICAgICBmZmMrKzsKKyAgICAgICAgICAgICAgY29udGluMjoK KyAgICAgICAgICAgICAgICA7CisgICAgICAgICAgICB9CisgICAgICAgICAgYnJlYWsyOgorICAg ICAgICAgICAgaWYgKGJhcmVfbGZzICYmICghZHB5YWN0aXZlIHx8IGZ0cF9kZWIpKSB7CisgICAg ICAgICAgICAgICAgcHJpbnRmKCJXQVJOSU5HISAlZCBiYXJlIGxpbmVmZWVkcyByZWNlaXZlZCBp biBBU0NJSSBtb2RlXG4iLAorICAgICAgICAgICAgICAgICAgICAgICBiYXJlX2xmcyk7CisgICAg ICAgICAgICAgICAgcHJpbnRmKCJGaWxlIG1pZ2h0IG5vdCBoYXZlIHRyYW5zZmVycmVkIGNvcnJl Y3RseS5cbiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGZ0cHJlY3YuZGluID09 IC0xKSB7CisgICAgICAgICAgICAgICAgYnl0ZXMgPSAoQ0tfT0ZGX1QpLTE7CisgICAgICAgICAg ICB9CisgICAgICAgICAgICBpZiAoYyA9PSAtMikKKyAgICAgICAgICAgICAgYnl0ZXMgPSAoQ0tf T0ZGX1QpLTE7CisgICAgICAgICAgICBicmVhazsKKyNpZm5kZWYgTk9DU0VUUworICAgICAgICB9 CisjZW5kaWYgLyogTk9DU0VUUyAqLworICAgIH0KKyAgICBpZiAoZnRwcmVjdi5waXBlbmFtZSB8 fCAhb3V0MnNjcmVlbikgeworCXpjbG9zZShaT0ZJTEUpOwkJCS8qIENsb3NlIHRoZSBmaWxlICov CisJZGVidWcoRjExMSwiZG9mdHByZWN2MiB6Y2xvc2UgZnRwY29kZSIsZnRwcmVjdi5sb2NhbCxm dHBjb2RlKTsKKwlpZiAoZnRwY29kZSA8IDApIHsJCS8qIElmIGRvd25sb2FkIGZhaWxlZCAqLwor CSAgICBpbnQgeCA9IDA7CisJICAgIHN3aXRjaCAoa2VlcCkgewkJLyogd2hpY2ggaXMuLi4gKi8K KwkgICAgICBjYXNlIFNFVF9BVVRPOgkJLyogQVVUTyAqLworCQlpZiAoY3VydHlwZSA9PSBGVFRf QVNDKSAvKiBEZWxldGUgZmlsZSBpZiBUWVBFIEEuICovCisJCSAgeCA9IDE7CisJCWJyZWFrOwor CSAgICAgIGNhc2UgU0VUX09GRjoJCS8qIERJU0NBUkQgKi8KKwkJeCA9IDE7CQkJLyogRGVsZXRl IGZpbGUsIHBlcmlvZC4gKi8KKwkJYnJlYWs7CisJICAgICAgZGVmYXVsdDoJCQkvKiBLRUVQICov CisJCWJyZWFrOworCSAgICB9CisJICAgIGlmICh4KSB7CisJCXggPSB6ZGVsZXQoZnRwcmVjdi5s b2NhbCk7CisJCWRlYnVnKEYxMTEsImZ0cCBnZXQgZGVsZXRlIGluY29tcGxldGUiLGZ0cHJlY3Yu bG9jYWwseCk7CisJICAgIH0KKwl9CisgICAgfQorICAgIHNpZ25hbChTSUdJTlQsIGZ0cHJlY3Yu b2xkaW50cik7CisjaWZkZWYgU0lHUElQRQorICAgIGlmIChmdHByZWN2Lm9sZGludHApCisgICAg ICBzaWduYWwoU0lHUElQRSwgZnRwcmVjdi5vbGRpbnRwKTsKKyNlbmRpZiAvKiBTSUdQSVBFICov CisgICAgc3RvcCA9IGdtc3RpbWVyKCk7CisjaWZkZWYgR0ZUSU1FUgorICAgIGZwZnNlY3MgPSBn ZnRpbWVyKCk7CisjZW5kaWYgLyogR0ZUSU1FUiAqLworICAgIHRmYyArPSBmZmM7CisKKyNpZmRl ZiBUQ1BJUExJQgorICAgIHNvY2tldF9jbG9zZShmdHByZWN2LmRpbik7CisjZWxzZSAvKiBUQ1BJ UExJQiAqLworI2lmZGVmIFVTRV9TSFVURE9XTgorICAgIHNodXRkb3duKGZ0cHJlY3YuZGluLCAx KzEpOworI2VuZGlmIC8qIFVTRV9TSFVURE9XTiAqLworICAgIGNsb3NlKGZ0cHJlY3YuZGluKTsK KyNlbmRpZiAvKiBUQ1BJUExJQiAqLworICAgIGZ0cHJlY3YucmVwbHkgPSBnZXRyZXBseSgwLGZ0 cHJlY3YuZmNzLGZ0cHJlY3YucmNzLGZ0cF92Ym0sMCk7CisgICAgZnRwcmVjdnJldCA9ICgoZnRw Y29kZSA8IDAgfHwgZnRwcmVjdi5yZXBseSA9PSBSRVBMWV9UUkFOU0lFTlQgfHwgCisgICAgICAg ICAgICAgICAgICAgZnRwcmVjdi5yZXBseSA9PSBSRVBMWV9FUlJPUikgPyAtMSA6IDApOworI2lm ZGVmIE5UU0lHCisgICAgIGNrVGhyZWFkRW5kKHRocmVhZGluZm8pOworI2VuZGlmIC8qIE5UU0lH ICovCit9CisKK3N0YXRpYyBpbnQKK3JlY3ZyZXF1ZXN0KGNtZCwgbG9jYWwsIHJlbW90ZSwgbG1v ZGUsIHByaW50bmFtZXMsIHJlY292ZXIsIHBpcGVuYW1lLAorICAgICAgICAgICAgeGxhdGUsIGZj cywgcmNzKQorICAgIGNoYXIgKmNtZCwgKmxvY2FsLCAqcmVtb3RlLCAqbG1vZGUsICpwaXBlbmFt ZTsKKyAgICBpbnQgcHJpbnRuYW1lcywgcmVjb3ZlciwgeGxhdGUsIGZjcywgcmNzOworeworI2lm ZGVmIE5UCisgICAgc3RydWN0IF9zdGF0IHN0YnVmOworI2Vsc2UgLyogTlQgKi8KKyAgICBzdHJ1 Y3Qgc3RhdCBzdGJ1ZjsKKyNlbmRpZiAvKiBOVCAqLworCisjaWZkZWYgREVCVUcKKyAgICBpZiAo ZGVibG9nKSB7CisgICAgICAgIGRlYnVnKEYxMTEsImZ0cCByZWN2cmVxdWVzdCBjbWQiLGNtZCxy ZWNvdmVyKTsKKyAgICAgICAgZGVidWcoRjExMCwiZnRwIHJlY3ZyZXF1ZXN0IGxvY2FsICIsbG9j YWwsMCk7CisgICAgICAgIGRlYnVnKEYxMTEsImZ0cCByZWN2cmVxdWVzdCByZW1vdGUiLHJlbW90 ZSxmdHBfdHlwKTsKKyAgICAgICAgZGVidWcoRjExMCwiZnRwIHJlY3ZyZXF1ZXN0IHBpcGVuYW1l ICIscGlwZW5hbWUsMCk7CisgICAgICAgIGRlYnVnKEYxMDEsImZ0cCByZWN2cmVxdWVzdCB4bGF0 ZSIsIiIseGxhdGUpOworICAgICAgICBkZWJ1ZyhGMTAxLCJmdHAgcmVjdnJlcXVlc3QgZmNzIiwi IixmY3MpOworICAgICAgICBkZWJ1ZyhGMTAxLCJmdHAgcmVjdnJlcXVlc3QgcmNzIiwiIixyY3Mp OworICAgIH0KKyNlbmRpZiAvKiBERUJVRyAqLworCisgICAgZnRwcmVjdi5sb2NhbHNpemUgPSAo Q0tfT0ZGX1QpMDsKKworICAgIGlmIChyZW1maWxlKSB7ICAgICAgICAgICAgICAgICAgICAgIC8q IFNlZSByZW1jZm0oKSwgcmVtdHh0KCkgKi8KKyAgICAgICAgaWYgKHJlbXBpcGUpIHsKKyAgICAg ICAgICAgIHBpcGVuYW1lID0gcmVtZGVzdDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg IGxvY2FsID0gcmVtZGVzdDsKKyAgICAgICAgICAgIGlmIChyZW1hcHBkKSBsbW9kZSA9ICJhYiI7 CisgICAgICAgIH0KKyAgICB9CisgICAgb3V0MnNjcmVlbiA9IDA7CisgICAgaWYgKCFjbWQpIGNt ZCA9ICIiOyAgICAgICAgICAgICAgICAgLyogQ29yZSBkdW1wIHByZXZlbnRpb24gKi8KKyAgICBp ZiAoIXJlbW90ZSkgcmVtb3RlID0gIiI7CisgICAgaWYgKCFsbW9kZSkgbG1vZGUgPSAiIjsKKwor ICAgIGlmIChwaXBlbmFtZSkgeyAgICAgICAgICAgICAgICAgICAgIC8qIE5vIHJlY292ZXJ5IGZv ciBwaXBlcy4gKi8KKyAgICAgICAgcmVjb3ZlciA9IDA7CisgICAgICAgIGlmICghbG9jYWwpCisg ICAgICAgICAgbG9jYWwgPSBwaXBlbmFtZTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoIWxv Y2FsKSAgICAgICAgICAgICAgICAgICAgIC8qIE91dHB1dCB0byBzY3JlZW4/ICovCisgICAgICAg ICAgbG9jYWwgPSAiLSI7CisgICAgICAgIG91dDJzY3JlZW4gPSAhc3RyY21wKGxvY2FsLCItIik7 CisgICAgfQorICAgIGRlYnVnKEYxMDEsImZ0cCByZWN2cmVxdWVzdCBvdXQyc2NyZWVuIiwiIixv dXQyc2NyZWVuKTsKKworI2lmZGVmIE9TMgorICAgIGlmICggZnRwX3hsYSAmJiBvdXQyc2NyZWVu ICYmICFrOTVzdGRvdXQgJiYgIWluc2VydmVyICkKKyAgICAgICAgZmNzID0gRkNfVUNTMjsKKyNl bmRpZiAvKiBPUzIgKi8KKworICAgIGlmIChvdXQyc2NyZWVuKSAgICAgICAgICAgICAgICAgICAg IC8qIE5vIHJlY292ZXJ5IHRvIHNjcmVlbiAqLworICAgICAgcmVjb3ZlciA9IDA7CisgICAgaWYg KCFmdHBfdHlwKSAgICAgICAgICAgICAgICAgICAgICAgLyogTm8gcmVjb3ZlcnkgaW4gdGV4dCBt b2RlICovCisgICAgICByZWNvdmVyID0gMDsKKyAgICBmdHByZWN2LmlzX3JldHIgPSAoc3RyY21w KGNtZCwgIlJFVFIiKSA9PSAwKTsKKworICAgIGlmICghZnRwcmVjdi5pc19yZXRyKSAgICAgICAg ICAgICAgIC8qIE5vIHJlY292ZXJ5IGV4Y2VwdCBmb3IgUkVUUmlldmUgKi8KKyAgICAgIHJlY292 ZXIgPSAwOworCisjaWZkZWYgQ09NTUVOVAorICAgIGlmICghb3V0MnNjcmVlbiAmJiAhcGlwZW5h bWUgJiYgZnRwcmVjdi5pc19yZXRyKSB7IC8qIFRvIHJlYWwgZmlsZSAqLworICAgICAgICBpZiAo cmVjdXJzaXZlICYmIGNrc3RyY2hyKGxvY2FsLCcvJykpIHsKKwkgICAgCisgICAgICAgIH0KKyAg ICB9CisjZW5kaWYgLyogQ09NTUVOVCAqLworCisgICAgZnRwcmVjdi5sb2NhbHNpemUgPSAoQ0tf T0ZGX1QpMDsJLyogTG9jYWwgZmlsZSBzaXplICovCisgICAgcnNfbGVuID0gKENLX09GRl9UKTA7 CQkvKiBSZWNvdmVyeSBwb2ludCAqLworCisgICAgZGVidWcoRjEwMSwiZnRwIHJlY3ZyZXF1ZXN0 IHJlY292ZXIiLCIiLHJlY292ZXIpOworICAgIGlmIChyZWNvdmVyKSB7ICAgICAgICAgICAgICAg ICAgICAgIC8qIFJlY292ZXJpbmcuLi4gKi8KKyAgICAgICAgaWYgKHN0YXQobG9jYWwsICZzdGJ1 ZikgPCAwKSB7ICAvKiBDYW4ndCBzdGF0IGxvY2FsIGZpbGUgKi8KKwkgICAgZGVidWcoRjEwMSwi ZnRwIHJlY3ZyZXF1ZXN0IHJlY292ZXIgc3RhdCBmYWlsZWQiLCIiLGVycm5vKTsKKyAgICAgICAg ICAgIHJlY292ZXIgPSAwOyAgICAgICAgICAgICAgICAvKiBTbyBjYW5jZWwgcmVjb3ZlcnkgKi8K KyAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBIYXZlIGxvY2FsIGZp bGUgaW5mbyAqLworICAgICAgICAgICAgZnRwcmVjdi5sb2NhbHNpemUgPSBzdGJ1Zi5zdF9zaXpl OyAgLyogR2V0IHNpemUgKi8KKwkgICAgLyogUmVtb3RlIGZpbGUgc21hbGxlciB0aGFuIGxvY2Fs ICovCisgICAgICAgICAgICBpZiAoZnNpemUgPCBmdHByZWN2LmxvY2Fsc2l6ZSkgeworCQlkZWJ1 ZyhGMTAxLCJmdHAgcmVjdnJlcXVlc3QgcmVjb3ZlciByZW1vdGUgc21hbGxlciIsIiIsZnNpemUp OworICAgICAgICAgICAgICAgIHJlY292ZXIgPSAwOyAgICAgICAgICAgIC8qIFJlY292ZXJ5IGNh bid0IHdvcmsgKi8KKyAgICAgICAgICAgIH0gZWxzZSBpZiAoZnNpemUgPT0gZnRwcmVjdi5sb2Nh bHNpemUpIHsgLyogU2l6ZXMgYXJlIGVxdWFsICovCisgICAgICAgICAgICAgICAgZGVidWcoRjEx MSwiZnRwIHJlY3ZyZXF1ZXN0IHJlY292ZXIgZXF1YWwgc2l6ZSIsCisJCSAgICAgIHJlbW90ZSxm dHByZWN2LmxvY2Fsc2l6ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuKDEpOworICAgICAgICAg ICAgfQorI2lmZGVmIENPTU1FTlQKKy8qCisgIFRoZSBwcm9ibGVtIGhlcmUgaXMgdGhhdCB0aGUg b3JpZ2luYWwgcGFydGlhbCBmaWxlIG5ldmVyIGdvdCBpdHMgZGF0ZQorICBzZXQsIGVpdGhlciBi ZWNhdXNlIEZUUCBEQVRFUyB3YXMgT0ZGLCBvciBiZWNhdXNlIHRoZSBwYXJ0aWFsIGZpbGUgd2Fz CisgIGRvd25sb2FkZWQgYnkgc29tZSBvdGhlciBwcm9ncmFtIHRoYXQgZG9lc24ndCBzZXQgbG9j YWwgZmlsZSBkYXRlcywgb3IKKyAgYmVjYXVzZSBLZXJtaXQgb25seSBzZXRzIHRoZSBmaWxlJ3Mg ZGF0ZSB3aGVuIHRoZSBkb3dubG9hZCB3YXMgY29tcGxldGUKKyAgYW5kIHN1Y2Nlc3NmdWwuICBJ biBhbGwgdGhlc2UgY2FzZXMsIHRoZSBsb2NhbCBmaWxlIGhhcyBhIGxhdGVyIHRpbWUKKyAgdGhh biB0aGUgcmVtb3RlLgorKi8KKyAgICAgICAgICAgIGlmIChyZWNvdmVyKSB7ICAgICAgICAgICAg ICAvKiBSZW1vdGUgaXMgYmlnZ2VyICovCisgICAgICAgICAgICAgICAgeCA9IGNoa21vZHRpbWUo bG9jYWwscmVtb3RlLDApOyAvKiBDaGVjayBmaWxlIGRhdGVzICovCisgICAgICAgICAgICAgICAg ZGVidWcoRjExMSwiZnRwIHJlY3ZyZXF1ZXN0IGNoa21vZHRpbWUiLHJlbW90ZSx4KTsKKyAgICAg ICAgICAgICAgICBpZiAoeCAhPSAxKQkJLyogRGF0ZXMgbXVzdCBiZSBlcXVhbCEgKi8KKyAgICAg ICAgICAgICAgICAgIHJlY292ZXIgPSAwOyAgICAgICAgICAvKiBJZiBub3QsIGdldCB3aG9sZSBm aWxlICovCisgICAgICAgICAgICB9CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAgICB9Cisg ICAgICAgIGRlYnVnKEYxMTEsImZ0cCByZWN2cmVxdWVzdCByZWNvdmVyIixyZW1vdGUscmVjb3Zl cik7CisgICAgfQorCisjaWZkZWYgRlRQX1BST1hZCisgICAgaWYgKHByb3h5ICYmIGZ0cHJlY3Yu aXNfcmV0cikKKyAgICAgIHJldHVybihwcm94dHJhbnMoY21kLCBsb2NhbCA/IGxvY2FsIDogcmVt b3RlLCByZW1vdGUpKTsKKyNlbmRpZiAvKiBGVFBfUFJPWFkgKi8KKworICAgIGZ0cHJlY3YudGNy ZmxhZyA9IChmZW9sICE9IENSKSAmJiBmdHByZWN2LmlzX3JldHI7CisKKyAgICBmdHByZWN2LnJl cGx5ID0gMDsKKyAgICBmdHByZWN2LmZjcyA9IGZjczsKKyAgICBmdHByZWN2LnJjcyA9IHJjczsK KyAgICBmdHByZWN2LnJlY292ZXIgPSByZWNvdmVyOworICAgIGZ0cHJlY3YueGxhdGUgPSB4bGF0 ZTsKKyAgICBmdHByZWN2LmNtZCA9IGNtZDsKKyAgICBmdHByZWN2LmxvY2FsID0gbG9jYWw7Cisg ICAgZnRwcmVjdi5yZW1vdGUgPSByZW1vdGU7CisgICAgZnRwcmVjdi5sbW9kZSA9IGxtb2RlOwor ICAgIGZ0cHJlY3YucGlwZW5hbWUgPSBwaXBlbmFtZTsKKyAgICBmdHByZWN2Lm9sZGludHAgPSBO VUxMOworICAgIGZ0cGNvZGUgPSAwOworCisgICAgaGF2ZXNpZ2ludCA9IDA7CisgICAgZnRwcmVj di5vbGRpbnRyID0gc2lnbmFsKFNJR0lOVCwgY2FuY2VscmVjdik7CisgICAgaWYgKGNjX2V4ZWN1 dGUoY2tqYWRkcihyZWN2Y2FuY2VsKSwgZG9mdHByZWN2LCBmYWlsZnRwcmVjdikgPCAwKQorICAg ICAgcmV0dXJuIC0xOworCisjaWZkZWYgRlRQX1RJTUVPVVQKKyAgICBkZWJ1ZyhGMTExLCJmdHAg cmVjdnJlcXVlc3QgZnRwcmVjdnJldCIscmVtb3RlLGZ0cHJlY3ZyZXQpOworICAgIGRlYnVnKEYx MTEsImZ0cCByZWN2cmVxdWVzdCBmdHBfdGltZWRfb3V0IixyZW1vdGUsZnRwX3RpbWVkX291dCk7 CisgICAgaWYgKGZ0cF90aW1lZF9vdXQpCisgICAgICBmdHByZWN2cmV0ID0gLTE7CisjZW5kaWYJ LyogRlRQX1RJTUVPVVQgKi8KKworICAgIGlmIChmdHByZWN2cmV0IDwgMCkKKyAgICAgIHJldHVy biAtMTsKKworICAgIGlmIChjY19leGVjdXRlKGNramFkZHIocmVjdmNhbmNlbCksIGRvZnRwcmVj djIsIGZhaWxmdHByZWN2MikgPCAwKQorICAgICAgcmV0dXJuIC0xOworICAgIHJldHVybiBmdHBy ZWN2cmV0OworfQorCisvKgorICogTmVlZCB0byBzdGFydCBhIGxpc3RlbiBvbiB0aGUgZGF0YSBj aGFubmVsIGJlZm9yZSB3ZSBzZW5kIHRoZSBjb21tYW5kLAorICogb3RoZXJ3aXNlIHRoZSBzZXJ2 ZXIncyBjb25uZWN0IG1heSBmYWlsLgorICovCitzdGF0aWMgaW50Citpbml0Y29ubigpIHsKKyAg ICByZWdpc3RlciBjaGFyICpwLCAqYTsKKyAgICBpbnQgcmVzdWx0LCB0bXBubyA9IDA7CisgICAg aW50IG9uID0gMTsKKyAgICBHU09DS05BTUVfVCBsZW47CisKKyNpZm5kZWYgTk9fUEFTU0lWRV9N T0RFCisgICAgaW50IGExLGEyLGEzLGE0LHAxLHAyOworCisgICAgaWYgKHBhc3NpdmVtb2RlKSB7 CisgICAgICAgIGRhdGEgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19TVFJFQU0sIDApOworICAgICAg ICBnbG9iYWxkaW4gPSBkYXRhOworICAgICAgICBpZiAoZGF0YSA8IDApIHsKKyAgICAgICAgICAg IHBlcnJvcigiZnRwOiBzb2NrZXQiKTsKKyAgICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAg IH0KKyAgICAgICAgaWYgKGZ0cGNtZCgiUEFTViIsTlVMTCwwLDAsZnRwX3ZibSkgIT0gUkVQTFlf Q09NUExFVEUpIHsKKyAgICAgICAgICAgIHByaW50ZigiUGFzc2l2ZSBtb2RlIHJlZnVzZWRcbiIp OworICAgICAgICAgICAgcGFzc2l2ZW1vZGUgPSAwOworICAgICAgICAgICAgcmV0dXJuKGluaXRj b25uKCkpOworICAgICAgICB9CisvKgorICBOb3cgd2UgaGF2ZSBhIHN0cmluZyBvZiBjb21tYS1z ZXBhcmF0ZWQgb25lLWJ5dGUgdW5zaWduZWQgaW50ZWdlciB2YWx1ZXMsCisgIFRoZSBmaXJzdCBm b3VyIGFyZSB0aGUgYW4gSVAgYWRkcmVzcy4gIFRoZSBmaWZ0aCBpcyB0aGUgTVNCIG9mIHRoZSBw b3J0CisgIG51bWJlciwgdGhlIHNpeHRoIGlzIHRoZSBMU0IuICBGcm9tIHRoYXQgd2UgY2FuIG1h a2UgYSBzb2NrYWRkcl9pbi4KKyovCisgICAgICAgIGlmIChzc2NhbmYocGFzdiwiJWQsJWQsJWQs JWQsJWQsJWQiLCZhMSwmYTIsJmEzLCZhNCwmcDEsJnAyKSAhPSA2KSB7CisgICAgICAgICAgICBw cmludGYoIlBhc3NpdmUgbW9kZSBhZGRyZXNzIHNjYW4gZmFpbHVyZVxuIik7CisgICAgICAgICAg ICByZXR1cm4oLTEpOworICAgICAgICB9OworI2lmbmRlZiBOT0hUVFAKKyAgICAgICAgaWYgKHRj cF9odHRwX3Byb3h5KSB7CisjaWZkZWYgT1MyCisgICAgICAgICAgICBjaGFyICogYWdlbnQgPSAi S2VybWl0IDk1IjsgLyogRGVmYXVsdCB1c2VyIGFnZW50ICovCisjZWxzZQorICAgICAgICAgICAg Y2hhciAqIGFnZW50ID0gIkMtS2VybWl0IjsKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAgICAg IHJlZ2lzdGVyIHN0cnVjdCBob3N0ZW50ICpocCA9IDA7CisgICAgICAgICAgICBzdHJ1Y3Qgc2Vy dmVudCAqZGVzdHNwOworICAgICAgICAgICAgY2hhciBob3N0WzUxMl0sICpwLCAqcTsKKyNpZmRl ZiBJUF9UT1MKKyNpZmRlZiBJUFRPU19USFJPVUdIUFVUCisgICAgICAgICAgICBpbnQgdG9zOwor I2VuZGlmIC8qIElQVE9TX1RIUk9VR0hQVVQgKi8KKyNlbmRpZiAvKiBJUF9UT1MgKi8KKyAgICAg ICAgICAgIGludCBzOworI2lmZGVmIERFQlVHCisgICAgICAgICAgICBleHRlcm4gaW50IGRlYnRp bTsKKyAgICAgICAgICAgIGludCB4ZGVidGltOworICAgICAgICAgICAgeGRlYnRpbSA9IGRlYnRp bTsKKyAgICAgICAgICAgIGRlYnRpbSA9IDE7CisjZW5kaWYgLyogREVCVUcgKi8KKworICAgICAg ICAgICAgY2ttYWt4bXNnKHByb3h5aG9zdCxIVFRQQ1BZTCxja3VpdG9hKGExKSwiLiIsY2t1aXRv YShhMiksCisgICAgICAgICAgICAgICAgICAgICAgIi4iLGNrdWl0b2EoYTMpLCIuIixja3VpdG9h KGE0KSwiOiIsY2t1aXRvYSgocDE8PDgpfHAyKSwKKyAgICAgICAgICAgICAgICAgICAgICBOVUxM LE5VTEwsTlVMTAorICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICBtZW1zZXQo KGNoYXIgKikmaGlzY3RsYWRkciwgMCwgc2l6ZW9mIChoaXNjdGxhZGRyKSk7CisgICAgICAgICAg ICBmb3IgKHAgPSB0Y3BfaHR0cF9wcm94eSwgcT1ob3N0OyAqcCAhPSAnXDAnICYmICpwICE9ICc6 JzsgcCsrLCBxKyspCisgICAgICAgICAgICAgICpxID0gKnA7CisgICAgICAgICAgICAqcSA9ICdc MCc7CisKKyAgICAgICAgICAgIGhpc2N0bGFkZHIuc2luX2FkZHIuc19hZGRyID0gaW5ldF9hZGRy KGhvc3QpOworICAgICAgICAgICAgaWYgKGhpc2N0bGFkZHIuc2luX2FkZHIuc19hZGRyICE9IElO QUREUl9OT05FKSAvKiAyMDEwLTAzLTI5ICovCisJICAgIHsKKyAgICAgICAgICAgICAgICBkZWJ1 ZyhGMTEwLCJpbml0Y29ubiBBIixob3N0LDApOworICAgICAgICAgICAgICAgIGhpc2N0bGFkZHIu c2luX2ZhbWlseSA9IEFGX0lORVQ7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg ICAgIGRlYnVnKEYxMTAsImluaXRjb25uIEIiLGhvc3QsMCk7CisgICAgICAgICAgICAgICAgaHAg PSBnZXRob3N0YnluYW1lKGhvc3QpOworI2lmZGVmIEhBRERSTElTVAorICAgICAgICAgICAgICAg IGhwID0gY2tfY29weWhvc3RlbnQoaHApOyAvKiBtYWtlIHNhZmUgY29weSB0aGF0IHdvbid0IGNo YW5nZSAqLworI2VuZGlmIC8qIEhBRERSTElTVCAqLworICAgICAgICAgICAgICAgIGlmIChocCA9 PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZnRwOiAlczog VW5rbm93biBob3N0XG4iLCBob3N0KTsKKyAgICAgICAgICAgICAgICAgICAgZnRwY29kZSA9IC0x OworI2lmZGVmIERFQlVHCisgICAgICAgICAgICAgICAgICAgIGRlYnRpbSA9IHhkZWJ0aW07Cisj ZW5kaWYgLyogREVCVUcgKi8KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuKDApOworICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBoaXNjdGxhZGRyLnNpbl9mYW1pbHkgPSBocC0+ aF9hZGRydHlwZTsKKyNpZmRlZiBIQUREUkxJU1QKKyAgICAgICAgICAgICAgICBtZW1jcHkoKGNo YXIgKikmaGlzY3RsYWRkci5zaW5fYWRkciwgaHAtPmhfYWRkcl9saXN0WzBdLAorICAgICAgICAg ICAgICAgICAgICAgICBzaXplb2YoaGlzY3RsYWRkci5zaW5fYWRkcikpOworI2Vsc2UgLyogSEFE RFJMSVNUICovCisgICAgICAgICAgICAgICAgbWVtY3B5KChjaGFyICopJmhpc2N0bGFkZHIuc2lu X2FkZHIsIGhwLT5oX2FkZHIsCisgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihoaXNjdGxh ZGRyLnNpbl9hZGRyKSk7CisjZW5kaWYgLyogSEFERFJMSVNUICovCisgICAgICAgICAgICB9Cisg ICAgICAgICAgICBkYXRhID0gc29ja2V0KGhpc2N0bGFkZHIuc2luX2ZhbWlseSwgU09DS19TVFJF QU0sIDApOworICAgICAgICAgICAgZGVidWcoRjEwMSwiaW5pdGNvbm4gc29ja2V0IiwiIixkYXRh KTsKKyAgICAgICAgICAgIGlmIChkYXRhIDwgMCkgeworICAgICAgICAgICAgICAgIHBlcnJvcigi ZnRwOiBzb2NrZXQiKTsKKyAgICAgICAgICAgICAgICBmdHBjb2RlID0gLTE7CisjaWZkZWYgREVC VUcKKyAgICAgICAgICAgICAgICBkZWJ0aW0gPSB4ZGVidGltOworI2VuZGlmIC8qIERFQlVHICov CisgICAgICAgICAgICAgICAgcmV0dXJuKDApOworICAgICAgICAgICAgfQorICAgICAgICAgICAg aWYgKCpwID09ICc6JykKKyAgICAgICAgICAgICAgcCsrOworICAgICAgICAgICAgZWxzZQorICAg ICAgICAgICAgICBwID0gImh0dHAiOworCisgICAgICAgICAgICBkZXN0c3AgPSBnZXRzZXJ2Ynlu YW1lKHAsInRjcCIpOworICAgICAgICAgICAgaWYgKGRlc3RzcCkKKyAgICAgICAgICAgICAgaGlz Y3RsYWRkci5zaW5fcG9ydCA9IGRlc3RzcC0+c19wb3J0OworICAgICAgICAgICAgZWxzZSBpZiAo cCkKKyAgICAgICAgICAgICAgaGlzY3RsYWRkci5zaW5fcG9ydCA9IGh0b25zKGF0b2kocCkpOwor ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBoaXNjdGxhZGRyLnNpbl9wb3J0ID0gaHRv bnMoODApOworICAgICAgICAgICAgZXJybm8gPSAwOworI2lmZGVmIEhBRERSTElTVAorICAgICAg ICAgICAgZGVidWcoRjEwMCwiaW5pdGNvbm4gSEFERFJMSVNUIiwiIiwwKTsKKyAgICAgICAgICAg IHdoaWxlCisjZWxzZQorICAgICAgICAgICAgZGVidWcoRjEwMCwiaW5pdGNvbm4gbm8gSEFERFJM SVNUIiwiIiwwKTsKKyAgICAgICAgICAgIGlmCisjZW5kaWYgLyogSEFERFJMSVNUICovCisgICAg ICAgICAgICAgIChjb25uZWN0KGRhdGEsIChzdHJ1Y3Qgc29ja2FkZHIgKikmaGlzY3RsYWRkciwK KyAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mIChoaXNjdGxhZGRyKSkgPCAwKSB7CisgICAg ICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJpbml0Y29ubiBjb25uZWN0IGZhaWxlZCIsIiIsZXJy bm8pOworI2lmZGVmIEhBRERSTElTVAorICAgICAgICAgICAgICAgICAgaWYgKGhwICYmIGhwLT5o X2FkZHJfbGlzdFsxXSkgeworICAgICAgICAgICAgICAgICAgICAgIGludCBvZXJybm8gPSBlcnJu bzsKKworICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgImZ0cDogY29ubmVjdCB0byBhZGRyZXNzICVzOiAiLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW5ldF9udG9hKGhpc2N0bGFkZHIuc2luX2FkZHIpCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgICAgICAgIGVy cm5vID0gb2Vycm5vOworICAgICAgICAgICAgICAgICAgICAgIHBlcnJvcigoY2hhciAqKTApOwor ICAgICAgICAgICAgICAgICAgICAgIGhwLT5oX2FkZHJfbGlzdCsrOworICAgICAgICAgICAgICAg ICAgICAgIG1lbWNweSgoY2hhciAqKSZoaXNjdGxhZGRyLnNpbl9hZGRyLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBocC0+aF9hZGRyX2xpc3RbMF0sCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHNpemVvZihoaXNjdGxhZGRyLnNpbl9hZGRyKSk7CisgICAgICAgICAgICAgICAg ICAgICAgZnByaW50ZihzdGRvdXQsICJUcnlpbmcgJXMuLi5cbiIsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpbmV0X250b2EoaGlzY3RsYWRkci5zaW5fYWRkcikpOworI2lmZGVmIFRD UElQTElCCisgICAgICAgICAgICAgICAgICAgICAgc29ja2V0X2Nsb3NlKGRhdGEpOworI2Vsc2Ug LyogVENQSVBMSUIgKi8KKyAgICAgICAgICAgICAgICAgICAgICBjbG9zZShkYXRhKTsKKyNlbmRp ZiAvKiBUQ1BJUExJQiAqLworICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBzb2NrZXQoaGlz Y3RsYWRkci5zaW5fZmFtaWx5LCBTT0NLX1NUUkVBTSwgMCk7CisgICAgICAgICAgICAgICAgICAg ICAgaWYgKGRhdGEgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcnJvcigiZnRw OiBzb2NrZXQiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZnRwY29kZSA9IC0xOworI2lm ZGVmIERFQlVHCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnRpbSA9IHhkZWJ0aW07Cisj ZW5kaWYgLyogREVCVUcgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKDApOwor ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK KyAgICAgICAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBIQUREUkxJU1QgKi8KKyAgICAgICAgICAg ICAgICAgIHBlcnJvcigiZnRwOiBjb25uZWN0Iik7CisgICAgICAgICAgICAgICAgICBmdHBjb2Rl ID0gLTE7CisgICAgICAgICAgICAgICAgICBnb3RvIGJhZDsKKyAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgaWYgKGh0dHBfY29ubmVjdChkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB0Y3BfaHR0cF9wcm94eV9hZ2VudCA/CisJCQkgICAgICAgdGNwX2h0dHBfcHJveHlfYWdl bnQgOgorCQkJICAgICAgICAgYWdlbnQsCisJCQkgICAgIE5VTEwsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHRjcF9odHRwX3Byb3h5X3VzZXIsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHRjcF9odHRwX3Byb3h5X3B3ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJveHlob3N0CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICkgPCAwKSB7CisjaWZkZWYgVENQSVBMSUIKKyAgICAgICAgICAgICAg ICBzb2NrZXRfY2xvc2UoZGF0YSk7CisjZWxzZSAvKiBUQ1BJUExJQiAqLworICAgICAgICAgICAg ICAgIGNsb3NlKGRhdGEpOworI2VuZGlmIC8qIFRDUElQTElCICovCisgICAgICAgICAgICAgICAg cGVycm9yKCJmdHA6IGNvbm5lY3QiKTsKKyAgICAgICAgICAgICAgICBmdHBjb2RlID0gLTE7Cisg ICAgICAgICAgICAgICAgZ290byBiYWQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZQor I2VuZGlmIC8qIE5PSFRUUCAqLworICAgICAgICB7CisgICAgICAgICAgICBkYXRhX2FkZHIuc2lu X2ZhbWlseSA9IEFGX0lORVQ7CisgICAgICAgICAgICBkYXRhX2FkZHIuc2luX2FkZHIuc19hZGRy ID0gaHRvbmwoKGExPDwyNCl8KGEyPDwxNil8KGEzPDw4KXxhNCk7CisgICAgICAgICAgICBkYXRh X2FkZHIuc2luX3BvcnQgPSBodG9ucygocDE8PDgpfHAyKTsKKworICAgICAgICAgICAgaWYgKGNv bm5lY3QoZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3Qgc29ja2FkZHIgKikm ZGF0YV9hZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGRhdGFfYWRkcikpIDwg MAorICAgICAgICAgICAgICAgICkgeworICAgICAgICAgICAgICAgIHBlcnJvcigiZnRwOiBjb25u ZWN0Iik7CisgICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgICAgIH0KKyAgICAg ICAgfQorICAgICAgICBkZWJ1ZyhGMTAwLCJpbml0Y29ubiBjb25uZWN0IG9rIiwiIiwwKTsKKyNp ZmRlZiBJUF9UT1MKKyNpZmRlZiBJUFRPU19USFJPVUdIUFVUCisgICAgICAgIG9uID0gSVBUT1Nf VEhST1VHSFBVVDsKKyAgICAgICAgaWYgKHNldHNvY2tvcHQoZGF0YSwgSVBQUk9UT19JUCwgSVBf VE9TLCAoY2hhciAqKSZvbiwgc2l6ZW9mKGludCkpIDwgMCkKKyAgICAgICAgICBwZXJyb3IoImZ0 cDogc2V0c29ja29wdCBUT1MgKGlnbm9yZWQpIik7CisjZW5kaWYgLyogSVBUT1NfVEhST1VHSFBV VCAqLworI2VuZGlmIC8qIElQX1RPUyAqLworICAgICAgICBtZW1jcHkoJmhpc2RhdGFhZGRyLCZk YXRhX2FkZHIsc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOworICAgICAgICByZXR1cm4oMCk7 CisgICAgfQorI2VuZGlmIC8qIE5PX1BBU1NJVkVfTU9ERSAqLworCisgIG5vcG9ydDoKKyAgICBt ZW1jcHkoJmRhdGFfYWRkciwmbXljdGxhZGRyLHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsK KyAgICBpZiAoc2VuZHBvcnQpCisgICAgICBkYXRhX2FkZHIuc2luX3BvcnQgPSAwOyAgIC8qIGxl dCBzeXN0ZW0gcGljayBvbmUgKi8KKyAgICBpZiAoZGF0YSAhPSAtMSkgeworI2lmZGVmIFRDUElQ TElCCisgICAgICAgIHNvY2tldF9jbG9zZShkYXRhKTsKKyNlbHNlIC8qIFRDUElQTElCICovCisj aWZkZWYgVVNFX1NIVVRET1dOCisgICAgICAgIHNodXRkb3duKGRhdGEsIDErMSk7CisjZW5kaWYg LyogVVNFX1NIVVRET1dOICovCisgICAgICAgIGNsb3NlKGRhdGEpOworI2VuZGlmIC8qIFRDUElQ TElCICovCisgICAgfQorICAgIGRhdGEgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19TVFJFQU0sIDAp OworICAgIGdsb2JhbGRpbiA9IGRhdGE7CisgICAgaWYgKGRhdGEgPCAwKSB7CisgICAgICAgIHBl cnJvcigiZnRwOiBzb2NrZXQiKTsKKyAgICAgICAgaWYgKHRtcG5vKQorICAgICAgICAgIHNlbmRw b3J0ID0gMTsKKyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9CisgICAgaWYgKCFzZW5kcG9ydCkg eworICAgICAgICBpZiAoc2V0c29ja29wdChkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICBT T0xfU09DS0VULAorICAgICAgICAgICAgICAgICAgICAgICBTT19SRVVTRUFERFIsCisgICAgICAg ICAgICAgICAgICAgICAgIChjaGFyICopJm9uLAorICAgICAgICAgICAgICAgICAgICAgICBzaXpl b2YgKG9uKQorICAgICAgICAgICAgICAgICAgICAgICApIDwgMAorICAgICAgICAgICAgKSB7Cisg ICAgICAgICAgICBwZXJyb3IoImZ0cDogc2V0c29ja29wdCAocmV1c2UgYWRkcmVzcykiKTsKKyAg ICAgICAgICAgIGdvdG8gYmFkOworICAgICAgICB9CisgICAgfQorICAgIGlmIChiaW5kKGRhdGEs IChzdHJ1Y3Qgc29ja2FkZHIgKikmZGF0YV9hZGRyLCBzaXplb2YgKGRhdGFfYWRkcikpIDwgMCkg eworICAgICAgICBwZXJyb3IoImZ0cDogYmluZCIpOworICAgICAgICBnb3RvIGJhZDsKKyAgICB9 CisgICAgbGVuID0gc2l6ZW9mIChkYXRhX2FkZHIpOworICAgIGlmIChnZXRzb2NrbmFtZShkYXRh LCAoc3RydWN0IHNvY2thZGRyICopJmRhdGFfYWRkciwgJmxlbikgPCAwKSB7CisgICAgICAgIHBl cnJvcigiZnRwOiBnZXRzb2NrbmFtZSIpOworICAgICAgICBnb3RvIGJhZDsKKyAgICB9CisgICAg aWYgKGxpc3RlbihkYXRhLCAxKSA8IDApIHsKKyAgICAgICAgcGVycm9yKCJmdHA6IGxpc3RlbiIp OworICAgICAgICBnb3RvIGJhZDsKKyAgICB9CisgICAgaWYgKHNlbmRwb3J0KSB7CisgICAgICAg IGEgPSAoY2hhciAqKSZkYXRhX2FkZHIuc2luX2FkZHI7CisgICAgICAgIHAgPSAoY2hhciAqKSZk YXRhX2FkZHIuc2luX3BvcnQ7CisgICAgICAgIGNrbWFreG1zZyhmdHBjbWRidWYsRlRQX0JVRlNJ WiwiUE9SVCAiLAorICAgICAgICAgICAgICAgICAgVUMoYVswXSksIiwiLFVDKGFbMV0pLCIsIiwg VUMoYVsyXSksIiwiLCBVQyhhWzNdKSwiLCIsCisgICAgICAgICAgICAgICAgICBVQyhwWzBdKSwi LCIsIFVDKHBbMV0pKTsKKyAgICAgICAgcmVzdWx0ID0gZnRwY21kKGZ0cGNtZGJ1ZixOVUxMLDAs MCxmdHBfdmJtKTsKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBSRVBMWV9FUlJPUiAmJiBzZW5kcG9y dCkgeworICAgICAgICAgICAgc2VuZHBvcnQgPSAwOworICAgICAgICAgICAgdG1wbm8gPSAxOwor ICAgICAgICAgICAgZ290byBub3BvcnQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuKHJlc3Vs dCAhPSBSRVBMWV9DT01QTEVURSk7CisgICAgfQorICAgIGlmICh0bXBubykKKyAgICAgIHNlbmRw b3J0ID0gMTsKKyNpZmRlZiBJUF9UT1MKKyNpZmRlZiBJUFRPU19USFJPVUdIUFVUCisgICAgb24g PSBJUFRPU19USFJPVUdIUFVUOworICAgIGlmIChzZXRzb2Nrb3B0KGRhdGEsIElQUFJPVE9fSVAs IElQX1RPUywgKGNoYXIgKikmb24sIHNpemVvZihpbnQpKSA8IDApCisgICAgICBwZXJyb3IoImZ0 cDogc2V0c29ja29wdCBUT1MgKGlnbm9yZWQpIik7CisjZW5kaWYKKyNlbmRpZgorICAgIHJldHVy bigwKTsKKyAgYmFkOgorI2lmZGVmIFRDUElQTElCCisgICAgc29ja2V0X2Nsb3NlKGRhdGEpOwor I2Vsc2UgLyogVENQSVBMSUIgKi8KKyNpZmRlZiBVU0VfU0hVVERPV04KKyAgICBzaHV0ZG93bihk YXRhLCAxKzEpOworI2VuZGlmIC8qIFVTRV9TSFVURE9XTiAqLworICAgIGNsb3NlKGRhdGEpOwor I2VuZGlmIC8qIFRDUElQTElCICovCisgICAgZGF0YSA9IC0xOworICAgIGdsb2JhbGRpbiA9IGRh dGE7CisgICAgaWYgKHRtcG5vKQorICAgICAgc2VuZHBvcnQgPSAxOworICAgIHJldHVybigtMSk7 Cit9CisKKyNpZmRlZiBDS19TU0wKK3N0YXRpYyBpbnQKK3NzbF9kYXRhY29ubigpIHsKKyAgICBp ZiAoc3NsX2Z0cF9kYXRhX2NvbiE9TlVMTCkgeyAgICAgICAvKiBEbyBTU0wgKi8KKyAgICAgICAg U1NMX2ZyZWUoc3NsX2Z0cF9kYXRhX2Nvbik7CisgICAgICAgIHNzbF9mdHBfZGF0YV9jb249TlVM TDsKKyAgICB9CisgICAgc3NsX2Z0cF9kYXRhX2Nvbj0oU1NMICopU1NMX25ldyhzc2xfZnRwX2N0 eCk7CisKKyAgICBTU0xfc2V0X2ZkKHNzbF9mdHBfZGF0YV9jb24sZGF0YSk7CisgICAgU1NMX3Nl dF92ZXJpZnkoc3NsX2Z0cF9kYXRhX2Nvbixzc2xfdmVyaWZ5X2ZsYWcsTlVMTCk7CisKKyAgICBT U0xfY29weV9zZXNzaW9uX2lkKHNzbF9mdHBfZGF0YV9jb24sc3NsX2Z0cF9jb24pOworCisgICAg aWYgKHNzbF9kZWJ1Z19mbGFnKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCI9PlNUQVJUIFNT TCBjb25uZWN0IG9uIERBVEFcbiIpOworICAgICAgICBmZmx1c2goc3RkZXJyKTsKKyAgICB9Cisg ICAgaWYgKFNTTF9jb25uZWN0KHNzbF9mdHBfZGF0YV9jb24pIDw9IDApIHsKKyAgICAgICAgc3Rh dGljIGNoYXIgZXJyYnVmWzEwMjRdOworICAgICAgICBja21ha21zZyhlcnJidWYsMTAyNCwiZnRw OiBTU0xfY29ubmVjdCBEQVRBIGVycm9yOiAiLAorICAgICAgICAgICAgICAgICAgRVJSX2Vycm9y X3N0cmluZyhFUlJfZ2V0X2Vycm9yKCksTlVMTCksTlVMTCxOVUxMKTsKKyAgICAgICAgZnByaW50 ZihzdGRlcnIsIiVzXG4iLCBlcnJidWYpOworICAgICAgICBmZmx1c2goc3RkZXJyKTsKKyNpZmRl ZiBUQ1BJUExJQgorICAgICAgICBzb2NrZXRfY2xvc2UoZGF0YSk7CisjZWxzZSAvKiBUQ1BJUExJ QiAqLworI2lmZGVmIFVTRV9TSFVURE9XTgorICAgICAgICBzaHV0ZG93bihkYXRhLCAxKzEpOwor I2VuZGlmIC8qIFVTRV9TSFVURE9XTiAqLworICAgICAgICBjbG9zZShkYXRhKTsKKyNlbmRpZiAv KiBUQ1BJUExJQiAqLworICAgICAgICBkYXRhID0gLTE7CisgICAgICAgIGdsb2JhbGRpbiA9IGRh dGE7CisgICAgICAgIHJldHVybigtMSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3NsX2Z0cF9k YXRhX2FjdGl2ZV9mbGFnPTE7CisKKyAgICAgICAgaWYgKCFzc2xfY2VydHNva19mbGFnICYmICF0 bHNfaXNfa3JiNSgyKSkgeworICAgICAgICAgICAgY2hhciAqc3ViamVjdCA9IHNzbF9nZXRfc3Vi amVjdF9uYW1lKHNzbF9mdHBfZGF0YV9jb24pOworCisgICAgICAgICAgICBpZiAoIXN1YmplY3Qp IHsKKyAgICAgICAgICAgICAgICBpZiAoc3NsX3ZlcmlmeV9mbGFnICYgU1NMX1ZFUklGWV9GQUlM X0lGX05PX1BFRVJfQ0VSVCkgeworICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJkYXRh Y29ubiIsIltTU0wgXy0gRkFJTEVEXSIsMCk7CisKKyAgICAgICAgICAgICAgICAgICAgc3NsX2Z0 cF9kYXRhX2FjdGl2ZV9mbGFnID0gMDsKKyNpZmRlZiBUQ1BJUExJQgorICAgICAgICAgICAgICAg ICAgICBzb2NrZXRfY2xvc2UoZGF0YSk7CisjZWxzZSAvKiBUQ1BJUExJQiAqLworI2lmZGVmIFVT RV9TSFVURE9XTgorICAgICAgICAgICAgICAgICAgICBzaHV0ZG93bihkYXRhLCAxKzEpOworI2Vu ZGlmIC8qIFVTRV9TSFVURE9XTiAqLworICAgICAgICAgICAgICAgICAgICBjbG9zZShkYXRhKTsK KyNlbmRpZiAvKiBUQ1BJUExJQiAqLworICAgICAgICAgICAgICAgICAgICBkYXRhID0gLTE7Cisg ICAgICAgICAgICAgICAgICAgIGdsb2JhbGRpbiA9IGRhdGE7CisgICAgICAgICAgICAgICAgICAg IHJldHVybigtMSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAg ICAgaWYgKCFvdXQyc2NyZWVuICYmIGRpc3BsYSAmJiBmZGlzcGxhKSB7CisgICAgICAgICAgICAg ICAgICAgICAgICBmdHNjcmVlbihTQ1JfVEMsMCwoQ0tfT0ZGX1QpMCwiRGlzcGxheSBjYW5jZWxl ZCIpOworICAgICAgICAgICAgICAgICAgICAgICAgLyogZmRpc3BsYSA9IFhZRkRfQjsgKi8KKyAg ICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmICh1cV9vaygKKyAg ICAgICAgICAiV2FybmluZzogU2VydmVyIGRpZG4ndCBwcm92aWRlIGEgY2VydGlmaWNhdGUgb24g ZGF0YSBjb25uZWN0aW9uXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDb250 aW51ZSB3aXRoIGZpbGUgdHJhbnNmZXI/IChZL04pIiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDMsTlVMTCwwKSA8PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhG MTEwLCAiZGF0YWNvbm4iLCJbU1NMIC0gRkFJTEVEXSIsMCk7CisgICAgICAgICAgICAgICAgICAg ICAgICBzc2xfZnRwX2RhdGFfYWN0aXZlX2ZsYWcgPSAwOworI2lmZGVmIFRDUElQTElCCisgICAg ICAgICAgICAgICAgICAgICAgICBzb2NrZXRfY2xvc2UoZGF0YSk7CisjZWxzZSAvKiBUQ1BJUExJ QiAqLworI2lmZGVmIFVTRV9TSFVURE9XTgorICAgICAgICAgICAgICAgICAgICAgICAgc2h1dGRv d24oZGF0YSwgMSsxKTsKKyNlbmRpZiAvKiBVU0VfU0hVVERPV04gKi8KKyAgICAgICAgICAgICAg ICAgICAgICAgIGNsb3NlKGRhdGEpOworI2VuZGlmIC8qIFRDUElQTElCICovCisgICAgICAgICAg ICAgICAgICAgICAgICBkYXRhID0gLTE7CisgICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWxk aW4gPSBkYXRhOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7Cisg ICAgICAgICAgICAgICAgaWYgKCFvdXQyc2NyZWVuICYmIGRpc3BsYSAmJiBmZGlzcGxhID09IFhZ RkRfQykgeworICAgICAgICAgICAgICAgICAgICBmdHNjcmVlbihTQ1JfVEMsMCwoQ0tfT0ZGX1Qp MCwiRGlzcGxheSBjYW5jZWxlZCIpOworICAgICAgICAgICAgICAgICAgICAvKiBmZGlzcGxhID0g WFlGRF9COyAqLworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChzc2xf Y2hlY2tfc2VydmVyX25hbWUoc3NsX2Z0cF9kYXRhX2NvbixmdHBfdXNlcl9ob3N0KSkgeworICAg ICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJkYXRhY29ubiIsIltTU0wgLSBGQUlMRURdIiww KTsKKyAgICAgICAgICAgICAgICAgICAgc3NsX2Z0cF9kYXRhX2FjdGl2ZV9mbGFnID0gMDsKKyNp ZmRlZiBUQ1BJUExJQgorICAgICAgICAgICAgICAgICAgICBzb2NrZXRfY2xvc2UoZGF0YSk7Cisj ZWxzZSAvKiBUQ1BJUExJQiAqLworI2lmZGVmIFVTRV9TSFVURE9XTgorICAgICAgICAgICAgICAg ICAgICBzaHV0ZG93bihkYXRhLCAxKzEpOworI2VuZGlmIC8qIFVTRV9TSFVURE9XTiAqLworICAg ICAgICAgICAgICAgICAgICBjbG9zZShkYXRhKTsKKyNlbmRpZiAvKiBUQ1BJUExJQiAqLworICAg ICAgICAgICAgICAgICAgICBkYXRhID0gLTE7CisgICAgICAgICAgICAgICAgICAgIGdsb2JhbGRp biA9IGRhdGE7CisgICAgICAgICAgICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGRlYnVnKEYxMTAsImRhdGFj b25uIiwiW1NTTCAtIE9LXSIsMCk7CisjaWZkZWYgQ09NTUVOVAorICAgICAgICAvKiBUaGlzIG1l c3NlcyB1cCB0aGUgZnVsbCBzY3JlZW4gZmlsZSB0cmFuc2ZlciBkaXNwbGF5ICovCisgICAgICAg IHNzbF9kaXNwbGF5X2Nvbm5lY3RfZGV0YWlscyhzc2xfZnRwX2NvbiwwLHNzbF92ZXJib3NlX2Zs YWcpOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICB9CisgICAgaWYgKHNzbF9kZWJ1Z19mbGFn KSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCI9PkRPTkUgU1NMIGNvbm5lY3Qgb24gREFUQVxu Iik7CisgICAgICAgIGZmbHVzaChzdGRlcnIpOworICAgIH0KKyAgICByZXR1cm4oZGF0YSk7Cit9 CisjZW5kaWYgLyogQ0tfU1NMICovCisKK3N0YXRpYyBpbnQKK2RhdGFjb25uKGxtb2RlKSBjaGFy ICpsbW9kZTsgeworICAgIGludCBzOworI2lmZGVmIElQX1RPUworICAgIGludCB0b3M7CisjZW5k aWYgLyogSVBfVE9TICovCisjaWZkZWYgVUNYNTAKKyAgICBzdGF0aWMgdV9pbnQgZnJvbWxlbjsK KyNlbHNlCisgICAgc3RhdGljIFNPQ0tPUFRfVCBmcm9tbGVuOworI2VuZGlmIC8qIFVDWDUwICov CisKKyAgICBmcm9tbGVuID0gc2l6ZW9mKGhpc2RhdGFhZGRyKTsKKworI2lmbmRlZiBOT19QQVNT SVZFX01PREUKKyAgICBpZiAocGFzc2l2ZW1vZGUpIHsKKyNpZmRlZiBDS19TU0wKKyAgICAgICAg c3NsX2Z0cF9kYXRhX2FjdGl2ZV9mbGFnPTA7CisgICAgICAgIGlmIChzc2xfZnRwX2FjdGl2ZV9m bGFnICYmCisgICAgICAgICAgICAoc3NsX2Z0cF9wcm94eSB8fCBmdHBfZHBsID09IEZQTF9QUlYp KQorICAgICAgICAgIHJldHVybihzc2xfZGF0YWNvbm4oKSk7CisjZW5kaWYgLyogQ0tfU1NMICov CisgICAgICAgIHJldHVybihkYXRhKTsKKyAgICB9CisjZW5kaWYgLyogTk9fUEFTU0lWRV9NT0RF ICovCisKKyAgICBzID0gYWNjZXB0KGRhdGEsIChzdHJ1Y3Qgc29ja2FkZHIgKikgJmhpc2RhdGFh ZGRyLCAmZnJvbWxlbik7CisgICAgaWYgKHMgPCAwKSB7CisgICAgICAgIHBlcnJvcigiZnRwOiBh Y2NlcHQiKTsKKyNpZmRlZiBUQ1BJUExJQgorICAgICAgICBzb2NrZXRfY2xvc2UoZGF0YSk7Cisj ZWxzZSAvKiBUQ1BJUExJQiAqLworI2lmZGVmIFVTRV9TSFVURE9XTgorICAgICAgICBzaHV0ZG93 bihkYXRhLCAxKzEpOworI2VuZGlmIC8qIFVTRV9TSFVURE9XTiAqLworICAgICAgICBjbG9zZShk YXRhKTsKKyNlbmRpZiAvKiBUQ1BJUExJQiAqLworICAgICAgICBkYXRhID0gLTE7CisgICAgICAg IGdsb2JhbGRpbiA9IGRhdGE7CisgICAgICAgIHJldHVybigtMSk7CisgICAgfQorI2lmZGVmIFRD UElQTElCCisgICAgc29ja2V0X2Nsb3NlKGRhdGEpOworI2Vsc2UgLyogVENQSVBMSUIgKi8KKyNp ZmRlZiBVU0VfU0hVVERPV04KKyAgICBzaHV0ZG93bihkYXRhLCAxKzEpOworI2VuZGlmIC8qIFVT RV9TSFVURE9XTiAqLworICAgIGNsb3NlKGRhdGEpOworI2VuZGlmIC8qIFRDUElQTElCICovCisg ICAgZGF0YSA9IHM7CisgICAgZ2xvYmFsZGluID0gZGF0YTsKKyNpZmRlZiBJUF9UT1MKKyNpZmRl ZiBJUFRPU19USFJPVUdIUFVUCisgICAgdG9zID0gSVBUT1NfVEhST1VHSFBVVDsKKyAgICBpZiAo c2V0c29ja29wdChkYXRhLCBJUFBST1RPX0lQLCBJUF9UT1MsIChjaGFyICopJnRvcywgc2l6ZW9m KGludCkpIDwgMCkKKyAgICAgIHBlcnJvcigiZnRwOiBzZXRzb2Nrb3B0IFRPUyAoaWdub3JlZCki KTsKKyNlbmRpZiAvKiBJUFRPU19USFJPVUdIUFVUICovCisjZW5kaWYgLyogSVBfVE9TICovCisK KyNpZmRlZiBDS19TU0wKKyAgICBzc2xfZnRwX2RhdGFfYWN0aXZlX2ZsYWc9MDsKKyAgICBpZiAo c3NsX2Z0cF9hY3RpdmVfZmxhZyAmJgorICAgICAgICAoc3NsX2Z0cF9wcm94eSB8fCBmdHBfZHBs ID09IEZQTF9QUlYpKQorICAgICAgcmV0dXJuKHNzbF9kYXRhY29ubigpKTsKKyNlbmRpZiAvKiBD S19TU0wgKi8KKyAgICByZXR1cm4oZGF0YSk7Cit9CisKKyNpZmRlZiBGVFBfUFJPWFkKK3N0YXRp YyBzaWd0eXBlCitwc2NhbmNlbChzaWcpIGludCBzaWc7IHsKKyAgICBjYW5jZWxmaWxlKys7Cit9 CisKK3N0YXRpYyBWT0lECitwc3dpdGNoKGZsYWcpIGludCBmbGFnOyB7CisgICAgZXh0ZXJuIGlu dCBwcm94eTsKKyAgICBzaWdfdCBvbGRpbnRyOworICAgIHN0YXRpYyBzdHJ1Y3QgY29tdmFycyB7 CisgICAgICAgIGludCBjb25uZWN0OworICAgICAgICBjaGFyIG5hbWVbTUFYSE9TVE5BTUVMRU5d OworICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gbWN0bDsKKyAgICAgICAgc3RydWN0IHNvY2th ZGRyX2luIGhjdGw7CisgICAgICAgIEZJTEUgKmluOworICAgICAgICBGSUxFICpvdXQ7CisgICAg ICAgIGludCB0cGU7CisgICAgICAgIGludCBjdXJ0cGU7CisgICAgICAgIGludCBjcG5kOworICAg ICAgICBpbnQgc3VucWU7CisgICAgICAgIGludCBydW5xZTsKKyAgICAgICAgaW50IG1jc2U7Cisg ICAgICAgIGludCBudGZsZzsKKyAgICAgICAgY2hhciBudGlbMTddOworICAgICAgICBjaGFyIG50 b1sxN107CisgICAgICAgIGludCBtYXBmbGc7CisgICAgICAgIGNoYXIgbWlbQ0tNQVhQQVRIXTsK KyAgICAgICAgY2hhciBtb1tDS01BWFBBVEhdOworICAgICAgICBjaGFyICphdXRodHlwZTsKKyAg ICAgICAgaW50IGNsdmw7CisgICAgICAgIGludCBkbHZsOworI2lmZGVmIEZUUF9LUkI0CisgICAg ICAgIGRlc19jYmxvY2sgc2Vzc2lvbjsKKyAgICAgICAgZGVzX2tleV9zY2hlZHVsZSBmdHBfc2No ZWQ7CisjZW5kaWYgLyogRlRQX0tSQjQgKi8KKyNpZmRlZiBGVFBfR1NTQVBJCisgICAgICAgIGdz c19jdHhfaWRfdCBnY29udGV4dDsKKyNlbmRpZiAvKiBHU1NBUEkgKi8KKyAgICB9IHByb3hzdHJ1 Y3QsIHRtcHN0cnVjdDsKKyAgICBzdHJ1Y3QgY29tdmFycyAqaXAsICpvcDsKKworICAgIGNhbmNl bGZpbGUgPSAwOworICAgIG9sZGludHIgPSBzaWduYWwoU0lHSU5ULCBwc2NhbmNlbCk7CisgICAg aWYgKGZsYWcpIHsKKyAgICAgICAgaWYgKHByb3h5KQorICAgICAgICAgIHJldHVybjsKKyAgICAg ICAgaXAgPSAmdG1wc3RydWN0OworICAgICAgICBvcCA9ICZwcm94c3RydWN0OworICAgICAgICBw cm94eSsrOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmICghcHJveHkpCisgICAgICAgICAgcmV0 dXJuOworICAgICAgICBpcCA9ICZwcm94c3RydWN0OworICAgICAgICBvcCA9ICZ0bXBzdHJ1Y3Q7 CisgICAgICAgIHByb3h5ID0gMDsKKyAgICB9CisgICAgaXAtPmNvbm5lY3QgPSBjb25uZWN0ZWQ7 CisgICAgY29ubmVjdGVkID0gb3AtPmNvbm5lY3Q7CisgICAgaWYgKGZ0cF9ob3N0KSB7CisgICAg ICAgIHN0cm5jcHkoaXAtPm5hbWUsIGZ0cF9ob3N0LCBNQVhIT1NUTkFNRUxFTiAtIDEpOworICAg ICAgICBpcC0+bmFtZVtNQVhIT1NUTkFNRUxFTiAtIDFdID0gJ1wwJzsKKyAgICAgICAgaXAtPm5h bWVbc3RybGVuKGlwLT5uYW1lKV0gPSAnXDAnOworICAgIH0gZWxzZQorICAgICAgaXAtPm5hbWVb MF0gPSAwOworICAgIGZ0cF9ob3N0ID0gb3AtPm5hbWU7CisgICAgaXAtPmhjdGwgPSBoaXNjdGxh ZGRyOworICAgIGhpc2N0bGFkZHIgPSBvcC0+aGN0bDsKKyAgICBpcC0+bWN0bCA9IG15Y3RsYWRk cjsKKyAgICBteWN0bGFkZHIgPSBvcC0+bWN0bDsKKyAgICBpcC0+aW4gPSBjc29ja2V0OworICAg IGNzb2NrZXQgPSBvcC0+aW47CisgICAgaXAtPm91dCA9IGNzb2NrZXQ7CisgICAgY3NvY2tldCA9 IG9wLT5vdXQ7CisgICAgaXAtPnRwZSA9IGZ0cF90eXA7CisgICAgZnRwX3R5cCA9IG9wLT50cGU7 CisgICAgaXAtPmN1cnRwZSA9IGN1cnR5cGU7CisgICAgY3VydHlwZSA9IG9wLT5jdXJ0cGU7Cisg ICAgaXAtPmNwbmQgPSBjcGVuZDsKKyAgICBjcGVuZCA9IG9wLT5jcG5kOworICAgIGlwLT5zdW5x ZSA9IGZ0cF91c247CisgICAgZnRwX3VzbiA9IG9wLT5zdW5xZTsKKyAgICBpcC0+bWNzZSA9IG1j YXNlOworICAgIG1jYXNlID0gb3AtPm1jc2U7CisgICAgaXAtPm50ZmxnID0gbnRmbGFnOworICAg IG50ZmxhZyA9IG9wLT5udGZsZzsKKyAgICBzdHJuY3B5KGlwLT5udGksIG50aW4sIDE2KTsKKyAg ICAoaXAtPm50aSlbc3RybGVuKGlwLT5udGkpXSA9ICdcMCc7CisgICAgc3RyY3B5KG50aW4sIG9w LT5udGkpOworICAgIHN0cm5jcHkoaXAtPm50bywgbnRvdXQsIDE2KTsKKyAgICAoaXAtPm50bylb c3RybGVuKGlwLT5udG8pXSA9ICdcMCc7CisgICAgc3RyY3B5KG50b3V0LCBvcC0+bnRvKTsKKyAg ICBpcC0+bWFwZmxnID0gbWFwZmxhZzsKKyAgICBtYXBmbGFnID0gb3AtPm1hcGZsZzsKKyAgICBz dHJuY3B5KGlwLT5taSwgbWFwaW4sIENLTUFYUEFUSCAtIDEpOworICAgIChpcC0+bWkpW3N0cmxl bihpcC0+bWkpXSA9ICdcMCc7CisgICAgc3RyY3B5KG1hcGluLCBvcC0+bWkpOworICAgIHN0cm5j cHkoaXAtPm1vLCBtYXBvdXQsIENLTUFYUEFUSCAtIDEpOworICAgIChpcC0+bW8pW3N0cmxlbihp cC0+bW8pXSA9ICdcMCc7CisgICAgc3RyY3B5KG1hcG91dCwgb3AtPm1vKTsKKyAgICBpcC0+YXV0 aHR5cGUgPSBhdXRoX3R5cGU7CisgICAgYXV0aF90eXBlID0gb3AtPmF1dGh0eXBlOworICAgIGlw LT5jbHZsID0gZnRwX2NwbDsKKyAgICBmdHBfY3BsID0gb3AtPmNsdmw7CisgICAgaXAtPmRsdmwg PSBmdHBfZHBsOworICAgIGZ0cF9kcGwgPSBvcC0+ZGx2bDsKKyAgICBpZiAoIWZ0cF9jcGwpCisg ICAgICBmdHBfY3BsID0gRlBMX0NMUjsKKyAgICBpZiAoIWZ0cF9kcGwpCisgICAgICBmdHBfZHBs ID0gRlBMX0NMUjsKKyNpZmRlZiBGVFBfS1JCNAorICAgIG1lbWNweShpcC0+c2Vzc2lvbiwgZnRw X2NyZWQuc2Vzc2lvbiwgc2l6ZW9mKGZ0cF9jcmVkLnNlc3Npb24pKTsKKyAgICBtZW1jcHkoZnRw X2NyZWQuc2Vzc2lvbiwgb3AtPnNlc3Npb24sIHNpemVvZihmdHBfY3JlZC5zZXNzaW9uKSk7Cisg ICAgbWVtY3B5KGlwLT5zY2hlZHVsZSwgZnRwX3NjaGVkLCBzaXplb2YoZnRwX3NjaGVkKSk7Cisg ICAgbWVtY3B5KGZ0cF9zY2hlZCwgb3AtPnNjaGVkdWxlLCBzaXplb2YoZnRwX3NjaGVkKSk7Cisj ZW5kaWYgLyogRlRQX0tSQjQgKi8KKyNpZmRlZiBGVFBfR1NTQVBJCisgICAgaXAtPmdjb250ZXh0 ID0gZ2NvbnRleHQ7CisgICAgZ2NvbnRleHQgPSBvcC0+Z2NvbnRleHQ7CisjZW5kaWYgLyogR1NT QVBJICovCisgICAgc2lnbmFsKFNJR0lOVCwgb2xkaW50cik7CisgICAgaWYgKGNhbmNlbGZpbGUp IHsKKyAgICAgICAgY2FuY2VsZmlsZSA9IDA7CisgICAgICAgIGRlYnVnKEYxMDEsInBzd2l0Y2gg Y2FuY2VsZmlsZSBCIiwiIixjYW5jZWxmaWxlKTsKKyAgICAgICAgKCpvbGRpbnRyKShTSUdJTlQp OworICAgIH0KK30KKworc3RhdGljIHNpZ3R5cGUKK2NhbmNlbHB0KHNpZykgaW50IHNpZzsgewor ICAgIHByaW50ZigiXG4iKTsKKyAgICBmZmx1c2goc3Rkb3V0KTsKKyAgICBwdGFiZmxnKys7Cisg ICAgY2FuY2VsZmlsZSA9IDA7CisjaWZuZGVmIE9TMgorICAgIGxvbmdqbXAocHRjYW5jZWwsIDEp OworI2Vsc2UKKyAgICBQb3N0Q3RybENTZW0oKTsKKyNlbmRpZiAvKiBPUzIgKi8KK30KKwordm9p ZAorcHJveHRyYW5zKGNtZCwgbG9jYWwsIHJlbW90ZSwgdW5pcXVlKSBjaGFyICpjbWQsICpsb2Nh bCwgKnJlbW90ZTsgaW50IHVuaXF1ZTsgeworICAgIHNpZ190IG9sZGludHI7CisgICAgaW50IHNl Y25kZmxhZyA9IDAsIHByb3hfdHlwZSwgbmZuZDsKKyAgICBjaGFyICpjbWQyOworI2lmZGVmIEJT RFNFTEVDVAorICAgIGZkX3NldCBtYXNrOworI2VuZGlmIC8qIEJTRFNFTEVDVCAqLworICAgIHNp Z3R5cGUgY2FuY2VscHQoKTsKKworICAgIGlmIChzdHJjbXAoY21kLCAiUkVUUiIpKQorICAgICAg Y21kMiA9ICJSRVRSIjsKKyAgICBlbHNlCisgICAgICBjbWQyID0gdW5pcXVlID8gIlNUT1UiIDog IlNUT1IiOworICAgIGlmICgocHJveF90eXBlID0gdHlwZSkgPT0gMCkgeworICAgICAgICBpZiAo c2VydmVydHlwZSA9PSBTWVNfVU5JWCAmJiB1bml4X3Byb3h5KQorICAgICAgICAgIHByb3hfdHlw ZSA9IEZUVF9CSU47CisgICAgICAgIGVsc2UKKyAgICAgICAgICBwcm94X3R5cGUgPSBGVFRfQVND OworICAgIH0KKyAgICBpZiAoY3VydHlwZSAhPSBwcm94X3R5cGUpCisgICAgICBjaGFuZ2V0eXBl KHByb3hfdHlwZSwgMSk7CisgICAgaWYgKGZ0cGNtZCgiUEFTViIsTlVMTCwwLDAsZnRwX3ZibSkg IT0gUkVQTFlfQ09NUExFVEUpIHsKKyAgICAgICAgcHJpbnRmKCJQcm94eSBzZXJ2ZXIgZG9lcyBu b3Qgc3VwcG9ydCB0aGlyZCBwYXJ0eSB0cmFuc2ZlcnMuXG4iKTsKKyAgICAgICAgcmV0dXJuOwor ICAgIH0KKyAgICBwc3dpdGNoKDApOworICAgIGlmICghY29ubmVjdGVkKSB7CisgICAgICAgIHBy aW50ZigiTm8gcHJpbWFyeSBjb25uZWN0aW9uXG4iKTsKKyAgICAgICAgcHN3aXRjaCgxKTsKKyAg ICAgICAgZnRwY29kZSA9IC0xOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChjdXJ0 eXBlICE9IHByb3hfdHlwZSkKKyAgICAgIGNoYW5nZXR5cGUocHJveF90eXBlLCAxKTsKKworICAg IGlmIChmdHBjbWQoIlBPUlQiLHBhc3YsLTEsLTEsZnRwX3ZibSkgIT0gUkVQTFlfQ09NUExFVEUp IHsKKyAgICAgICAgcHN3aXRjaCgxKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8q IFJlcGxhY2Ugd2l0aCBjYWxscyB0byBjY19leGVjdXRlKCkgKi8KKyAgICBpZiAoc2V0am1wKHB0 Y2FuY2VsKSkKKyAgICAgIGdvdG8gY2FuY2VsOworICAgIG9sZGludHIgPSBzaWduYWwoU0lHSU5U LCBjYW5jZWxwdCk7CisgICAgaWYgKGZ0cGNtZChjbWQscmVtb3RlLC0xLC0xLGZ0cF92Ym0pICE9 IFBSRUxJTSkgeworICAgICAgICBzaWduYWwoU0lHSU5ULCBvbGRpbnRyKTsKKyAgICAgICAgcHN3 aXRjaCgxKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBzbGVlcCgyMDAwKTsKKyAgICBw c3dpdGNoKDEpOworICAgIHNlY25kZmxhZysrOworICAgIGlmIChmdHBjbWQoY21kMixsb2NhbCwt MSwtMSxmdHBfdmJtKSAhPSBQUkVMSU0pCisgICAgICBnb3RvIGNhbmNlbDsKKyAgICBwdGZsYWcr KzsKKyAgICBnZXRyZXBseSgwLC0xLC0xLGZ0cF92Ym0sMCk7CisgICAgcHN3aXRjaCgwKTsKKyAg ICBnZXRyZXBseSgwLC0xLC0xLGZ0cF92Ym0sMCk7CisgICAgc2lnbmFsKFNJR0lOVCwgb2xkaW50 cik7CisgICAgcHN3aXRjaCgxKTsKKyAgICBwdGZsYWcgPSAwOworICAgIHJldHVybjsKKworICBj YW5jZWw6CisgICAgc2lnbmFsKFNJR0lOVCwgU0lHX0lHTik7CisgICAgcHRmbGFnID0gMDsKKyAg ICBpZiAoc3RyY21wKGNtZCwgIlJFVFIiKSAmJiAhcHJveHkpCisgICAgICBwc3dpdGNoKDEpOwor ICAgIGVsc2UgaWYgKCFzdHJjbXAoY21kLCAiUkVUUiIpICYmIHByb3h5KQorICAgICAgcHN3aXRj aCgwKTsKKyAgICBpZiAoIWNwZW5kICYmICFzZWNuZGZsYWcpIHsgIC8qIG9ubHkgaGVyZSBpZiBj bWQgPSAiU1RPUiIgKHByb3h5PTEpICovCisgICAgICAgIGlmIChmdHBjbWQoY21kMixsb2NhbCwt MSwtMSxmdHBfdmJtKSAhPSBQUkVMSU0pIHsKKyAgICAgICAgICAgIHBzd2l0Y2goMCk7CisgICAg ICAgICAgICBpZiAoY3BlbmQpCisgICAgICAgICAgICAgIGNhbmNlbF9yZW1vdGUoMCk7CisgICAg ICAgIH0KKyAgICAgICAgcHN3aXRjaCgxKTsKKyAgICAgICAgaWYgKHB0YWJmbGcpCisgICAgICAg ICAgZnRwY29kZSA9IC0xOworICAgICAgICBzaWduYWwoU0lHSU5ULCBvbGRpbnRyKTsKKyAgICAg ICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoY3BlbmQpCisgICAgICBjYW5jZWxfcmVtb3RlKDAp OworICAgIHBzd2l0Y2goIXByb3h5KTsKKyAgICBpZiAoIWNwZW5kICYmICFzZWNuZGZsYWcpIHsg IC8qIG9ubHkgaWYgY21kID0gIlJFVFIiIChwcm94eT0xKSAqLworICAgICAgICBpZiAoZnRwY21k KGNtZDIsbG9jYWwsLTEsLTEsZnRwX3ZibSkgIT0gUFJFTElNKSB7CisgICAgICAgICAgICBwc3dp dGNoKDApOworICAgICAgICAgICAgaWYgKGNwZW5kKQorICAgICAgICAgICAgICBjYW5jZWxfcmVt b3RlKDApOworICAgICAgICAgICAgcHN3aXRjaCgxKTsKKyAgICAgICAgICAgIGlmIChwdGFiZmxn KQorICAgICAgICAgICAgICBmdHBjb2RlID0gLTE7CisgICAgICAgICAgICBzaWduYWwoU0lHSU5U LCBvbGRpbnRyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICBp ZiAoY3BlbmQpCisgICAgICBjYW5jZWxfcmVtb3RlKDApOworICAgIHBzd2l0Y2goIXByb3h5KTsK KyAgICBpZiAoY3BlbmQpIHsKKyNpZmRlZiBCU0RTRUxFQ1QKKyAgICAgICAgRkRfWkVSTygmbWFz ayk7CisgICAgICAgIEZEX1NFVChjc29ja2V0LCAmbWFzayk7CisgICAgICAgIGlmICgobmZuZCA9 IGVtcHR5KCZtYXNrLCAxMCkpIDw9IDApIHsKKyAgICAgICAgICAgIGlmIChuZm5kIDwgMCkgewor ICAgICAgICAgICAgICAgIHBlcnJvcigiY2FuY2VsIik7CisgICAgICAgICAgICB9CisgICAgICAg ICAgICBpZiAocHRhYmZsZykKKyAgICAgICAgICAgICAgZnRwY29kZSA9IC0xOworICAgICAgICAg ICAgbG9zdHBlZXIoKTsKKyAgICAgICAgfQorI2Vsc2UgLyogQlNEU0VMRUNUICovCisjaWZkZWYg SUJNU0VMRUNUCisgICAgICAgIGlmICgobmZuZCA9IGVtcHR5KCZjc29ja2V0LCAxLCAxMCkpIDw9 IDApIHsKKyAgICAgICAgICAgIGlmIChuZm5kIDwgMCkgeworICAgICAgICAgICAgICAgIHBlcnJv cigiY2FuY2VsIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocHRhYmZsZykKKyAg ICAgICAgICAgICAgZnRwY29kZSA9IC0xOworICAgICAgICAgICAgbG9zdHBlZXIoKTsKKyAgICAg ICAgfQorI2VuZGlmIC8qIElCTVNFTEVDVCAqLworI2VuZGlmIC8qIEJTRFNFTEVDVCAqLworICAg ICAgICBnZXRyZXBseSgwLC0xLC0xLGZ0cF92Ym0sMCk7CisgICAgICAgIGdldHJlcGx5KDAsLTEs LTEsZnRwX3ZibSwwKTsKKyAgICB9CisgICAgaWYgKHByb3h5KQorICAgICAgcHN3aXRjaCgwKTsK KyAgICBwc3dpdGNoKDEpOworICAgIGlmIChwdGFiZmxnKQorICAgICAgZnRwY29kZSA9IC0xOwor ICAgIHNpZ25hbChTSUdJTlQsIG9sZGludHIpOworfQorI2VuZGlmIC8qIEZUUF9QUk9YWSAqLwor CisjaWZkZWYgRlRQX1NFQ1VSSVRZCisjaWZkZWYgRlRQX0dTU0FQSQorCisjaWZkZWYgQ09NTUVO VAorLyogY2tfZ3NzX21lY2hfa3JiNSBpcyBub3QgZGVjbGFyZWQgYW55d2hlcmUgKi8KK3N0cnVj dCB7CisgICAgQ09OU1QgZ3NzX09JRF9kZXNjICogQ09OU1QgKiBtZWNoX3R5cGU7CisgICAgY2hh ciAqc2VydmljZV9uYW1lOworfSBnc3NfdHJpYWxzW10gPSB7CisgICAgeyAmY2tfZ3NzX21lY2hf a3JiNSwgImZ0cCIgfSwKKyAgICB7ICZja19nc3NfbWVjaF9rcmI1LCAiaG9zdCIgfSwKK307Cisj ZWxzZQorLyogVGhpcyBtYXRjaGVzIHdoYXQgaXMgZGVjbGFyZWQgYWJvdmUgKi8KK3N0cnVjdCB7 CisgICAgQ09OU1QgZ3NzX09JRF9kZXNjICogQ09OU1QgKiBtZWNoX3R5cGU7CisgICAgY2hhciAq c2VydmljZV9uYW1lOworfSBnc3NfdHJpYWxzW10gPSB7CisgICAgeyAmZ3NzX21lY2hfa3JiNSwg ImZ0cCIgfSwKKyAgICB7ICZnc3NfbWVjaF9rcmI1LCAiaG9zdCIgfSwKK307CisjZW5kaWYJLyog Q09NTUVOVCAqLworCisKK2ludCBuX2dzc190cmlhbHMgPSBzaXplb2YoZ3NzX3RyaWFscykvc2l6 ZW9mKGdzc190cmlhbHNbMF0pOworI2VuZGlmIC8qIEZUUF9HU1NBUEkgKi8KKworc3RhdGljIGlu dAorZnRwX2F1dGgoKSB7CisgICAgZXh0ZXJuIGludCBzZXRzYWZlKCk7CisgICAgaW50IGogPSAw LCBuOworI2lmZGVmIEZUUF9LUkI0CisgICAgY2hhciAqc2VydmljZSwgaW5zdFtJTlNUX1NaXTsK KyAgICBVTE9ORyBja3N1bTsKKyAgICBVTE9ORyBjaGVja3N1bSA9IChVTE9ORykgZ2V0cGlkKCk7 CisgICAgQ0hBUiBvdXRfYnVmW0ZUUF9CVUZTSVpdOworICAgIGludCBpOworI2Vsc2UgLyogRlRQ X0tSQjQgKi8KKyNpZmRlZiBGVFBfR1NTQVBJCisgICAgQ0hBUiBvdXRfYnVmW0ZUUF9CVUZTSVpd OworICAgIGludCBpOworI2VuZGlmIC8qIEZUUF9HU1NBUEkgKi8KKyNlbmRpZiAvKiBGVFBfS1JC NCAqLworCisgICAgaWYgKHNzbF9mdHBfcHJveHkpICAgICAgICAgICAgICAgICAgLyogRG8gbm90 IGFsbG93IEFVVEggb3ZlciBTU0wgcHJveHkgKi8KKyAgICAgICAgcmV0dXJuKDApOworCisgICAg aWYgKGF1dGhfdHlwZSkKKyAgICAgIHJldHVybigxKTsgICAgICAgICAgICAgICAgICAgICAgICAv KiBhdXRoIGFscmVhZHkgc3VjY2VlZGVkICovCisKKyAgICAvKiBUcnkgZWFjaCBhdXRoIHR5cGUg YXMgc3BlY2lmaWVkIGJ5IHRoZSBlbmQgdXNlciAqLworICAgIGZvciAoaiA9IDA7IGogPCA4ICYm IGZ0cF9hdXRoX3R5cGVbal0gIT0gMDsgaisrKSB7CisjaWZkZWYgRlRQX0dTU0FQSQorICAgICAg ICBpZiAoZnRwX2F1dGhfdHlwZVtqXSA9PSBGVEFfR0s1ICYmIGNrX2dzc2FwaV9pc19pbnN0YWxs ZWQoKSkgeworICAgICAgICAgICAgbiA9IGZ0cGNtZCgiQVVUSCBHU1NBUEkiLE5VTEwsMCwwLGZ0 cF92Ym0pOworICAgICAgICAgICAgaWYgKG4gPT0gUkVQTFlfQ09OVElOVUUpIHsKKyAgICAgICAg ICAgICAgICBPTV91aW50MzIgbWFqX3N0YXQsIG1pbl9zdGF0OworICAgICAgICAgICAgICAgIGdz c19uYW1lX3QgdGFyZ2V0X25hbWU7CisgICAgICAgICAgICAgICAgZ3NzX2J1ZmZlcl9kZXNjIHNl bmRfdG9rLCByZWN2X3RvaywgKnRva2VuX3B0cjsKKyAgICAgICAgICAgICAgICBjaGFyIHN0YnVm W0ZUUF9CVUZTSVpdOworICAgICAgICAgICAgICAgIGludCBjb21jb2RlLCB0cmlhbDsKKyAgICAg ICAgICAgICAgICBzdHJ1Y3QgZ3NzX2NoYW5uZWxfYmluZGluZ3Nfc3RydWN0IGNoYW47CisgICAg ICAgICAgICAgICAgY2hhciAqIHJlYWxtID0gTlVMTDsKKyAgICAgICAgICAgICAgICBjaGFyIHRn dFsyNTZdOworCisgICAgICAgICAgICAgICAgY2hhbi5pbml0aWF0b3JfYWRkcnR5cGUgPSBHU1Nf Q19BRl9JTkVUOyAvKiBPTV91aW50MzIgICovCisgICAgICAgICAgICAgICAgY2hhbi5pbml0aWF0 b3JfYWRkcmVzcy5sZW5ndGggPSA0OworICAgICAgICAgICAgICAgIGNoYW4uaW5pdGlhdG9yX2Fk ZHJlc3MudmFsdWUgPSAmbXljdGxhZGRyLnNpbl9hZGRyLnNfYWRkcjsKKyAgICAgICAgICAgICAg ICBjaGFuLmFjY2VwdG9yX2FkZHJ0eXBlID0gR1NTX0NfQUZfSU5FVDsgLyogT01fdWludDMyICov CisgICAgICAgICAgICAgICAgY2hhbi5hY2NlcHRvcl9hZGRyZXNzLmxlbmd0aCA9IDQ7CisgICAg ICAgICAgICAgICAgY2hhbi5hY2NlcHRvcl9hZGRyZXNzLnZhbHVlID0gJmhpc2N0bGFkZHIuc2lu X2FkZHIuc19hZGRyOworICAgICAgICAgICAgICAgIGNoYW4uYXBwbGljYXRpb25fZGF0YS5sZW5n dGggPSAwOworICAgICAgICAgICAgICAgIGNoYW4uYXBwbGljYXRpb25fZGF0YS52YWx1ZSA9IDA7 CisKKyAgICAgICAgICAgICAgICBpZiAoIXF1aWV0KQorICAgICAgICAgICAgICAgICAgcHJpbnRm KCJHU1NBUEkgYWNjZXB0ZWQgYXMgYXV0aGVudGljYXRpb24gdHlwZVxuIik7CisKKyAgICAgICAg ICAgICAgICByZWFsbSA9IGNrX2tyYjVfcmVhbG1vZmhvc3QoZnRwX3VzZXJfaG9zdCk7CisgICAg ICAgICAgICAgICAgaWYgKHJlYWxtKSB7CisgICAgICAgICAgICAgICAgICAgIGNrbWFrbXNnKHRn dCxzaXplb2YodGd0KSwia3JidGd0LyIscmVhbG0sIkAiLHJlYWxtKTsKKyAgICAgICAgICAgICAg ICAgICAgZGVidWcoRjExMCwiZnRwX2F1dGgoR1NTQVBJKSBUR1QiLHRndCwwKTsKKyAgICAgICAg ICAgICAgICAgICAgaWYgKCBrcmI1X2F1dG9nZXQgJiYKKyAgICAgICAgICAgICAgICAgICAgICAg ICAhKChja19rcmI1X3RrdF9pc3ZhbGlkKE5VTEwsdGd0KSA+IDApIHx8CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKGNrX2tyYjVfaXNfdGd0X3ZhbGlkKCkgPiAwKSkgKQorICAgICAgICAg ICAgICAgICAgICAgICAgY2tfa3JiNV9hdXRvZ2V0X1RHVChyZWFsbSk7CisgICAgICAgICAgICAg ICAgfQorCisgICAgICAgICAgICAgICAgLyogQmxvYiBmcm9tIGdzcy1jbGllbnQgKi8KKyAgICAg ICAgICAgICAgICBmb3IgKHRyaWFsID0gMDsgdHJpYWwgPCBuX2dzc190cmlhbHM7IHRyaWFsKysp IHsKKyAgICAgICAgICAgICAgICAgICAgLyogZnRwQGhvc3RuYW1lIGZpcnN0LCB0aGUgaG9zdEBo b3N0bmFtZSAqLworICAgICAgICAgICAgICAgICAgICAvKiB0aGUgVjUgR1NTQVBJIGJpbmRpbmcg Y2Fub25pY2FsaXplcyB0aGlzIGZvciB1cy4uLiAqLworICAgICAgICAgICAgICAgICAgICBja21h a21zZyhzdGJ1ZixGVFBfQlVGU0laLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc3Nf dHJpYWxzW3RyaWFsXS5zZXJ2aWNlX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICJAIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnRwX3VzZXJfaG9zdCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgTlVMTAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICApOworICAgICAgICAgICAgICAgICAgICBpZiAoZnRwX2RlYikKKyAgICAgICAgICAgICAgICAg ICAgICBmcHJpbnRmKHN0ZGVyciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBdXRo ZW50aWNhdGluZyB0byA8JXM+Li4uXG4iLCBzdGJ1Zik7CisgICAgICAgICAgICAgICAgICAgIHNl bmRfdG9rLnZhbHVlID0gc3RidWY7CisgICAgICAgICAgICAgICAgICAgIHNlbmRfdG9rLmxlbmd0 aCA9IHN0cmxlbihzdGJ1Zik7CisgICAgICAgICAgICAgICAgICAgIG1hal9zdGF0ID0gZ3NzX2lt cG9ydF9uYW1lKCZtaW5fc3RhdCwgJnNlbmRfdG9rLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBnc3NfbnRfc2VydmljZV9uYW1lLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdGFyZ2V0X25hbWUKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAg ICAgICAgaWYgKG1hal9zdGF0ICE9IEdTU19TX0NPTVBMRVRFKSB7CisgICAgICAgICAgICAgICAg ICAgICAgICB1c2VyX2dzc19lcnJvcihtYWpfc3RhdCwgbWluX3N0YXQsICJwYXJzaW5nIG5hbWUi KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3VyZV9lcnJvcigibmFtZSBwYXJzZWQgPCVz PlxuIiwgc3RidWYpOworICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgdG9rZW5fcHRyID0gR1NTX0NfTk9f QlVGRkVSOworICAgICAgICAgICAgICAgICAgICBnY29udGV4dCA9IEdTU19DX05PX0NPTlRFWFQ7 IC8qIHN0cnVjdHVyZSBjb3B5ICovCisKKyAgICAgICAgICAgICAgICAgICAgZG8geworICAgICAg ICAgICAgICAgICAgICAgICAgaWYgKGZ0cF9kZWIpCisgICAgICAgICAgICAgICAgICAgICAgICAg IGZwcmludGYoc3RkZXJyLCAiY2FsbGluZyBnc3NfaW5pdF9zZWNfY29udGV4dFxuIik7CisgICAg ICAgICAgICAgICAgICAgICAgICBtYWpfc3RhdCA9CisgICAgICAgICAgICAgICAgICAgICAgICAg IGdzc19pbml0X3NlY19jb250ZXh0KCZtaW5fc3RhdCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgR1NTX0NfTk9fQ1JFREVOVElBTCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmdjb250ZXh0LAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRfbmFtZSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdzc19PSUQpICoKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc3NfdHJpYWxz W3RyaWFsXS5tZWNoX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEdTU19DX01VVFVBTF9GTEFHIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgR1NTX0NfUkVQTEFZX0ZMQUcgfAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZnRwX2NmdyA/CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHU1NfQ19ERUxFR19GTEFHIDogMCks CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjaGFubmVsIGJp bmRpbmdzICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoa3JiNV9kX25vX2FkZHJlc3NlcyA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEdTU19DX05PX0NIQU5ORUxfQklORElOR1MgOgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY2hhbiksCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbl9wdHIsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsICAgIC8qIGln bm9yZSBtZWNoIHR5cGUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJnNlbmRfdG9rLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBOVUxMLCAgICAvKiBpZ25vcmUgcmV0X2ZsYWdzICovCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsgICAgICAgLyogaWdub3JlIHRpbWVfcmVj ICovCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYWpfc3RhdCAhPSBHU1NfU19DT01Q TEVURSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hal9zdGF0ICE9IEdTU19TX0NP TlRJTlVFX05FRURFRCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0cmlhbCA9 PSBuX2dzc190cmlhbHMtMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJfZ3Nz X2Vycm9yKG1hal9zdGF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbWluX3N0YXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAiaW5pdGlhbGl6aW5nIGNvbnRleHQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzc19yZWxl YXNlX25hbWUoJm1pbl9zdGF0LCAmdGFyZ2V0X25hbWUpOworICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIG1heWJlIHdlIG1pc3NlZCBvbiB0aGUgc2VydmljZSBuYW1lICovCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZ290byBvdXRlcl9sb29wOworICAgICAgICAgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlbmRfdG9rLmxlbmd0aCAhPSAw KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxlbjsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICByZXBseV9wYXJzZSA9ICJBREFUPSI7IC8qIGZvciBmdHBjbWQoKSBsYXRl ciAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbiA9IEZUUF9CVUZTSVo7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAga2Vycm9yID0KKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHJhZGl4X2VuY29kZShzZW5kX3Rvay52YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBvdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHNlbmRfdG9rLmxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAmbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFJBRElYX0VOQ09ERQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGtlcnJv cikgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkJhc2UgNjQgZW5jb2Rpbmcg ZmFpbGVkOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy YWRpeF9lcnJvcihrZXJyb3IpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBnc3NfY29tcGxldGVf bG9vcDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29tY29kZSA9IGZ0cGNtZCgiQURBVCIsb3V0X2J1ZiwtMSwtMSwwKTsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tY29kZSAhPSBSRVBMWV9DT01QTEVURQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBjb21jb2RlICE9IFJFUExZX0NPTlRJTlVF IC8qICgzMzUpICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgeworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJpYWwgPT0gbl9nc3NfdHJpYWxzLTEpIHsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiR1NT QVBJIEFEQVQgZmFpbGVkXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIGZvcmNlIG91dCBvZiBsb29wICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBtYWpfc3RhdCA9IEdTU19TX0ZBSUxVUkU7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBCYWNrb2ZmIHRvIHRoZSB2MSBnc3NhcGkgaXMgc3RpbGwg cG9zc2libGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VuZCBhIG5ldyBB VVRIIGNvbW1hbmQuICBJZiB0aGF0IGZhaWxzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHRlcm1pbmF0ZSB0aGUgbG9vcC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZ0cGNtZCgiQVVUSCBH U1NBUEkiLE5VTEwsMCwwLGZ0cF92Ym0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAhPSBSRVBMWV9DT05USU5VRSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZnByaW50ZihzdGRlcnIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJH U1NBUEkgQURBVCBmYWlsZWQsIEFVVEggcmVzdGFydCBmYWlsZWRcbiIpOworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogZm9yY2Ugb3V0IG9mIGxvb3AgKi8KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hal9zdGF0ID0gR1NTX1NfRkFJTFVSRTsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBnb3RvIG91dGVyX2xvb3A7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVwbHlfcGFyc2UpIHsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAiTm8gYXV0aGVudGljYXRpb24gZGF0YSByZWNlaXZlZCBmcm9tIHNlcnZl clxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYWpfc3RhdCA9PSBH U1NfU19DT01QTEVURSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnBy aW50ZihzdGRlcnIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICIuLi5idXQgbm8gbW9yZSB3YXMgbmVlZGVkXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGdvdG8gZ3NzX2NvbXBsZXRlX2xvb3A7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB1c2VyX2dzc19lcnJvcihtYWpfc3RhdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG1pbl9zdGF0LAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vIHJlcGx5LCBodWg/IgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZ3NzX2NvbXBsZXRlX2xvb3A7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuID0gRlRQX0JVRlNJWjsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICBrZXJyb3IgPSByYWRpeF9lbmNvZGUocmVwbHlfcGFyc2Usb3V0X2J1 ZixpLCZsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFJBRElYX0RFQ09ERSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGtlcnJv cikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQmFzZSA2NCBkZWNvZGluZyBm YWlsZWQ6ICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJh ZGl4X2Vycm9yKGtlcnJvcikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3Rv IGdzc19jb21wbGV0ZV9sb29wOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV2ZXJ5dGhpbmcgd29ya2VkICovCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdG9rZW5fcHRyID0gJnJlY3ZfdG9rOworICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHJlY3ZfdG9rLnZhbHVlID0gb3V0X2J1ZjsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICByZWN2X3Rvay5sZW5ndGggPSBsZW47CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBnZXQg b3V0IG9mIGxvb3AgY2xlYW4gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgZ3NzX2NvbXBs ZXRlX2xvb3A6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpYWwgPSBuX2dzc190cmlh bHMtMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc3NfcmVsZWFzZV9idWZmZXIoJm1p bl9zdGF0LCAmc2VuZF90b2spOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzc19yZWxl YXNlX25hbWUoJm1pbl9zdGF0LCAmdGFyZ2V0X25hbWUpOworICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGdvdG8gb3V0ZXJfbG9vcDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgICAgICAgfSB3aGlsZSAobWFqX3N0YXQgPT0gR1NTX1NfQ09OVElOVUVfTkVFREVE KTsKKworICAgICAgICAgICAgICAgICAgb3V0ZXJfbG9vcDoKKyAgICAgICAgICAgICAgICAgICAg aWYgKG1hal9zdGF0ID09IEdTU19TX0NPTVBMRVRFKQorICAgICAgICAgICAgICAgICAgICAgIGJy ZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAobWFqX3N0YXQgPT0g R1NTX1NfQ09NUExFVEUpIHsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJHU1NBUEkgYXV0 aGVudGljYXRpb24gc3VjY2VlZGVkXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcmVwbHlfcGFy c2UgPSBOVUxMOworICAgICAgICAgICAgICAgICAgICBhdXRoX3R5cGUgPSAiR1NTQVBJIjsKKyAg ICAgICAgICAgICAgICAgICAgcmV0dXJuKDEpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg ICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiR1NTQVBJIGF1dGhlbnRpY2F0aW9u IGZhaWxlZFxuIik7CisgICAgICAgICAgICAgICAgICAgIHJlcGx5X3BhcnNlID0gTlVMTDsKKyAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlm IChmdHBfZGViKQorICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiR1NTQVBJIHJlamVj dGVkIGFzIGFuIGF1dGhlbnRpY2F0aW9uIHR5cGVcbiIpOworICAgICAgICAgICAgICAgIGlmIChm dHBjb2RlID09IDUwMCB8fCBmdHBjb2RlID09IDUwMikKKyAgICAgICAgICAgICAgICAgICAgcmV0 dXJuKDApOworICAgICAgICAgICAgfQorICAgICAgICB9CisjZW5kaWYgLyogRlRQX0dTU0FQSSAq LworI2lmZGVmIEZUUF9TUlAKKyAgICAgICAgaWYgKGZ0cF9hdXRoX3R5cGVbal0gPT0gRlRBX1NS UCAmJiBja19zcnBfaXNfaW5zdGFsbGVkKCkpIHsKKyAgICAgICAgICAgIGlmIChzcnBfZnRwX2F1 dGgoZnRwX3VzZXJfaG9zdCxOVUxMLE5VTEwpKQorICAgICAgICAgICAgICByZXR1cm4oMSk7Cisg ICAgICAgICAgICBlbHNlIGlmIChmdHBjb2RlID09IDUwMCB8fCBmdHBjb2RlID09IDUwMikKKyAg ICAgICAgICAgICAgcmV0dXJuKDApOworICAgICAgICB9CisjZW5kaWYgLyogRlRQX1NSUCAqLwor I2lmZGVmIEZUUF9LUkI0CisgICAgICAgIGlmIChmdHBfYXV0aF90eXBlW2pdID09IEZUQV9LNCAm JiBja19rcmI0X2lzX2luc3RhbGxlZCgpKSB7CisgICAgICAgICAgICBuID0gZnRwY21kKCJBVVRI IEtFUkJFUk9TX1Y0IixOVUxMLDAsMCxmdHBfdmJtKTsKKyAgICAgICAgICAgIGlmIChuID09IFJF UExZX0NPTlRJTlVFKSB7CisgICAgICAgICAgICAgICAgY2hhciB0Z3RbNCpSRUFMTV9TWisxXTsK KyAgICAgICAgICAgICAgICBpbnQgcmM7CisKKyAgICAgICAgICAgICAgICBpZiAoIXF1aWV0KQor ICAgICAgICAgICAgICAgICAgcHJpbnRmKCJLRVJCRVJPU19WNCBhY2NlcHRlZCBhcyBhdXRoZW50 aWNhdGlvbiB0eXBlXG4iKTsKKyAgICAgICAgICAgICAgICBja3N0cm5jcHkoaW5zdCwgKGNoYXIg Kikga3JiX2dldF9waG9zdChmdHBfdXNlcl9ob3N0KSxJTlNUX1NaKTsKKyAgICAgICAgICAgICAg ICBja3N0cm5jcHkoZnRwX3JlYWxtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAq KWNrX2tyYjRfcmVhbG1vZmhvc3QoZnRwX3VzZXJfaG9zdCksCisgICAgICAgICAgICAgICAgICAg ICAgICAgIFJFQUxNX1NaCisgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisKKyAgICAgICAg ICAgICAgICBja21ha21zZyh0Z3Qsc2l6ZW9mKHRndCksImtyYnRndC4iLGZ0cF9yZWFsbSwiQCIs ZnRwX3JlYWxtKTsKKyAgICAgICAgICAgICAgICByYyA9IGNrX2tyYjRfdGt0X2lzdmFsaWQodGd0 KTsKKworICAgICAgICAgICAgICAgIGlmIChyYyA8PSAwICYmIGtyYjRfYXV0b2dldCkKKyAgICAg ICAgICAgICAgICAgIGNrX2tyYjRfYXV0b2dldF9UR1QoZnRwX3JlYWxtKTsKKworICAgICAgICAg ICAgICAgIHNlcnZpY2UgPSAiZnRwIjsKKyAgICAgICAgICAgICAgICBrZXJyb3IgPSBrcmJfbWtf cmVxKCZmdHBfdGt0LHNlcnZpY2UsaW5zdCxmdHBfcmVhbG0sY2hlY2tzdW0pOworICAgICAgICAg ICAgICAgIGlmIChrZXJyb3IgPT0gS0RDX1BSX1VOS05PV04pIHsKKyAgICAgICAgICAgICAgICAg ICAgc2VydmljZSA9ICJyY21kIjsKKyAgICAgICAgICAgICAgICAgICAga2Vycm9yID0ga3JiX21r X3JlcSgmZnRwX3RrdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz ZXJ2aWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3QsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnRwX3JlYWxtLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrc3VtCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgICAgaWYgKGtlcnJvcikKKyAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAi S2VyYmVyb3MgVjQga3JiX21rX3JlcSBmYWlsZWQ6ICVzXG4iLAorICAgICAgICAgICAgICAgICAg ICAgICAgICBrcmJfZ2V0X2Vycl90ZXh0KGtlcnJvcikpOworICAgICAgICAgICAgICAgIGlmICgh a2Vycm9yKSB7CisgICAgICAgICAgICAgICAgICAgIGtlcnJvciA9IGtyYl9nZXRfY3JlZChzZXJ2 aWNlLCBpbnN0LCBmdHBfcmVhbG0sJmZ0cF9jcmVkKTsKKyAgICAgICAgICAgICAgICAgICAgaWYg KGtlcnJvcikKKyAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIktlcmJlcm9z IFY0IGtyYl9nZXRfY3JlZCBmYWlsZWQ6ICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAga3JiX2dldF9lcnJfdGV4dChrZXJyb3IpKTsKKyAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgICAgaWYgKCFrZXJyb3IpIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IHJjOwor ICAgICAgICAgICAgICAgICAgICByYyA9IGRlc19rZXlfc2NoZWQoZnRwX2NyZWQuc2Vzc2lvbiwg ZnRwX3NjaGVkKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJjID09IC0xKSB7CisgICAgICAg ICAgICAgICAgICAgICAgIHByaW50ZigiP0ludmFsaWQgREVTIGtleSBzcGVjaWZpZWQgaW4gY3Jl ZGVudGlhbHNcclxuIik7CisgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsImZ0cF9h dXRoIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImludmFsaWQgREVTIEtleSBzcGVj aWZpZWQgaW4gY3JlZGVudGlhbHMiLDApOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYg KCByYyA9PSAtMiApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiP1dlYWsgREVT IGtleSBzcGVjaWZpZWQgaW4gY3JlZGVudGlhbHNcclxuIik7CisgICAgICAgICAgICAgICAgICAg ICAgICBkZWJ1ZyhGMTEwLCJmdHBfYXV0aCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAid2VhayBERVMgS2V5IHNwZWNpZmllZCBpbiBjcmVkZW50aWFscyIsMCk7CisgICAgICAgICAg ICAgICAgICAgIH0gZWxzZSBpZiAoIHJjICE9IDAgKSB7CisgICAgICAgICAgICAgICAgICAgICAg ICBwcmludGYoIj9ERVMgS2V5IFNjaGVkdWxlIG5vdCBzZXQgYnkgY3JlZGVudGlhbHNcclxuIik7 CisgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJmdHBfYXV0aCIsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAiREVTIEtleSBTY2hlZHVsZSBub3Qgc2V0IGJ5IGNyZWRl bnRpYWxzIiwwKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBy ZXBseV9wYXJzZSA9ICJBREFUPSI7CisgICAgICAgICAgICAgICAgICAgIGkgPSBGVFBfQlVGU0la OworICAgICAgICAgICAgICAgICAgICBrZXJyb3IgPSByYWRpeF9lbmNvZGUoZnRwX3RrdC5kYXQs IG91dF9idWYsIGZ0cF90a3QubGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJmksIFJBRElYX0VOQ09ERSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChr ZXJyb3IpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQmFzZSA2 NCBlbmNvZGluZyBmYWlsZWQ6ICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICByYWRpeF9lcnJvcihrZXJyb3IpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8ga3Ji NF9lcnI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKGkg PiBGVFBfQlVGU0laIC0gNikKKyAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIj9BREFUIGRh dGEgdG9vIGxvbmdcbiIpOworICAgICAgICAgICAgICAgICAgICBpZiAoZnRwY21kKCJBREFUIixv dXRfYnVmLC0xLC0xLDApICE9CisgICAgICAgICAgICAgICAgICAgICAgICBSRVBMWV9DT01QTEVU RSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJLZXJiZXJvcyBW NCBhdXRoZW50aWNhdGlvbiBmYWlsZWRcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgZ290 byBrcmI0X2VycjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBp ZiAoIXJlcGx5X3BhcnNlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVy ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5vIGF1dGhlbnRpY2F0aW9uIGRhdGEg cmVjZWl2ZWQgZnJvbSBzZXJ2ZXJcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgZ290byBr cmI0X2VycjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpID0g c2l6ZW9mKG91dF9idWYpOworICAgICAgICAgICAgICAgICAgICBrZXJyb3IgPQorICAgICAgICAg ICAgICAgICAgICAgIHJhZGl4X2VuY29kZShyZXBseV9wYXJzZSwgb3V0X2J1ZiwgMCwgJmksIFJB RElYX0RFQ09ERSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChrZXJyb3IpIHsKKyAgICAgICAg ICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQmFzZSA2NCBkZWNvZGluZyBmYWlsZWQ6 ICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWRpeF9lcnJvcihrZXJy b3IpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8ga3JiNF9lcnI7CisgICAgICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAga2Vycm9yID0ga3JiX3JkX3NhZmUob3V0 X2J1ZiwgaSwKKyNpZmRlZiBLUkI1MjQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZnRwX2NyZWQuc2Vzc2lvbiwKKyNlbHNlIC8qIEtSQjUyNCAqLworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZnRwX2NyZWQuc2Vzc2lvbiwKKyNlbmRp ZiAvKiBLUkI1MjQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Jmhpc2N0bGFkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZt eWN0bGFkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmdHBf bXNnX2RhdGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAg ICAgICAgICAgICAgICAgICAgaWYgKGtlcnJvcikgeworICAgICAgICAgICAgICAgICAgICAgICAg ZnByaW50ZihzdGRlcnIsICJLZXJiZXJvcyBWNCBrcmJfcmRfc2FmZSBmYWlsZWQ6ICVzXG4iLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrcmJfZ2V0X2Vycl90ZXh0KGtlcnJvcikp OworICAgICAgICAgICAgICAgICAgICAgICAgZ290byBrcmI0X2VycjsKKyAgICAgICAgICAgICAg ICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8qIGZldGNoIHRoZSAobW9kaWZpZWQpIGNo ZWNrc3VtICovCisgICAgICAgICAgICAgICAgICAgIG1lbWNweSgmY2tzdW0sIGZ0cF9tc2dfZGF0 YS5hcHBfZGF0YSwgc2l6ZW9mKGNrc3VtKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChudG9o bChja3N1bSkgPT0gY2hlY2tzdW0gKyAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo ZnRwX3ZibSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJLZXJiZXJvcyBWNCBh dXRoZW50aWNhdGlvbiBzdWNjZWVkZWRcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgcmVw bHlfcGFyc2UgPSBOVUxMOworICAgICAgICAgICAgICAgICAgICAgICAgYXV0aF90eXBlID0gIktF UkJFUk9TX1Y0IjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybigxKTsKKyAgICAgICAg ICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiS2VyYmVyb3MgVjQgbXV0dWFsIGF1dGhl bnRpY2F0aW9uIGZhaWxlZFxuIik7CisgICAgICAgICAgICAgICAgICBrcmI0X2VycjoKKyAgICAg ICAgICAgICAgICAgICAgcmVwbHlfcGFyc2UgPSBOVUxMOworICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKGZ0cF9kZWIpCisJCSAgZnBy aW50ZihzdGRlcnIsCisgICAgICAgICAgICAgICAgICAgICAgIktFUkJFUk9TX1Y0IHJlamVjdGVk IGFzIGFuIGF1dGhlbnRpY2F0aW9uIHR5cGVcbiIpOworICAgICAgICAgICAgICAgIGlmIChmdHBj b2RlID09IDUwMCB8fCBmdHBjb2RlID09IDUwMikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu KDApOworICAgICAgICAgICAgfQorICAgICAgICB9CisjZW5kaWYgLyogRlRQX0tSQjQgKi8KKyNp ZmRlZiBDS19TU0wKKyAgICAgICAgaWYgKGZ0cF9hdXRoX3R5cGVbal0gPT0gRlRBX1RMUyAmJiBj a19zc2xlYXlfaXNfaW5zdGFsbGVkKCkpIHsKKyNpZmRlZiBGVFBIT1NUCisgICAgICAgICAgICBp ZiAoIWhvc3RjbWQpIHsKKyAgICAgICAgICAgICAgICBmdHBjbWQoIkhPU1QiLGZ0cF91c2VyX2hv c3QsMCwwLDApOworICAgICAgICAgICAgICAgIGhvc3RjbWQgPSAxOworICAgICAgICAgICAgfQor I2VuZGlmIC8qIEZUUEhPU1QgKi8KKyAgICAgICAgICAgIG4gPSBmdHBjbWQoIkFVVEggVExTIixO VUxMLDAsMCxmdHBfdmJtKTsKKyAgICAgICAgICAgIGlmIChuICE9IFJFUExZX0NPTVBMRVRFKQor ICAgICAgICAgICAgICBuID0gZnRwY21kKCJBVVRIIFRMUy1QIixOVUxMLDAsMCxmdHBfdmJtKTsK KyAgICAgICAgICAgIGlmIChuID09IFJFUExZX0NPTVBMRVRFKSB7CisgICAgICAgICAgICAgICAg aWYgKCFxdWlldCkKKyAgICAgICAgICAgICAgICAgIHByaW50ZigiVExTIGFjY2VwdGVkIGFzIGF1 dGhlbnRpY2F0aW9uIHR5cGVcbiIpOworCisgICAgICAgICAgICAgICAgYXV0aF90eXBlID0gIlRM UyI7CisgICAgICAgICAgICAgICAgc3NsX2F1dGgoKTsKKyAgICAgICAgICAgICAgICBpZiAoc3Ns X2Z0cF9hY3RpdmVfZmxhZyApIHsKKyAgICAgICAgICAgICAgICAgICAgZnRwX2RwbCA9IEZQTF9D TFI7CisgICAgICAgICAgICAgICAgICAgIGZ0cF9jcGwgPSBGUExfUFJWOworICAgICAgICAgICAg ICAgICAgICByZXR1cm4oMSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg ICAgICAgICAgZnByaW50ZihzdGRlcnIsIlRMUyBhdXRoZW50aWNhdGlvbiBmYWlsZWRcbiIpOwor ICAgICAgICAgICAgICAgICAgICBhdXRoX3R5cGUgPSBOVUxMOworI2lmZGVmIFRDUElQTElCCisg ICAgICAgICAgICAgICAgICAgIHNvY2tldF9jbG9zZShjc29ja2V0KTsKKyNlbHNlIC8qIFRDUElQ TElCICovCisjaWZkZWYgVVNFX1NIVVRET1dOCisgICAgICAgICAgICAgICAgICAgIHNodXRkb3du KGNzb2NrZXQsIDErMSk7CisjZW5kaWYgLyogVVNFX1NIVVRET1dOICovCisgICAgICAgICAgICAg ICAgICAgIGNsb3NlKGNzb2NrZXQpOworI2VuZGlmIC8qIFRDUElQTElCICovCisgICAgICAgICAg ICAgICAgICAgIGNzb2NrZXQgPSAtMTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGZ0cF9ob29r dXAoZnRwX3VzZXJfaG9zdCxmdHBfcG9ydCwwKSA9PSBOVUxMKQorICAgICAgICAgICAgICAgICAg ICAgIHJldHVybigwKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2Ugewor ICAgICAgICAgICAgICAgIGlmIChmdHBfZGViKQorCQkgIGZwcmludGYoc3RkZXJyLCJUTFMgcmVq ZWN0ZWQgYXMgYW4gYXV0aGVudGljYXRpb24gdHlwZVxuIik7CisgICAgICAgICAgICAgICAgaWYg KGZ0cGNvZGUgPT0gNTAwIHx8IGZ0cGNvZGUgPT0gNTAyKQorICAgICAgICAgICAgICAgICAgICBy ZXR1cm4oMCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZ0cF9hdXRo X3R5cGVbal0gPT0gRlRBX1NTTCAmJiBja19zc2xlYXlfaXNfaW5zdGFsbGVkKCkpIHsKKyNpZmRl ZiBGVFBIT1NUCisgICAgICAgICAgICBpZiAoIWhvc3RjbWQpIHsKKyAgICAgICAgICAgICAgICBm dHBjbWQoIkhPU1QiLGZ0cF91c2VyX2hvc3QsMCwwLDApOworICAgICAgICAgICAgICAgIGhvc3Rj bWQgPSAxOworICAgICAgICAgICAgfQorI2VuZGlmIC8qIEZUUEhPU1QgKi8KKyAgICAgICAgICAg IG4gPSBmdHBjbWQoIkFVVEggU1NMIixOVUxMLDAsMCxmdHBfdmJtKTsKKyAgICAgICAgICAgIGlm IChuID09IFJFUExZX0NPTlRJTlVFIHx8IG4gPT0gUkVQTFlfQ09NUExFVEUpIHsKKyAgICAgICAg ICAgICAgICBpZiAoIXF1aWV0KQorICAgICAgICAgICAgICAgICAgcHJpbnRmKCJTU0wgYWNjZXB0 ZWQgYXMgYXV0aGVudGljYXRpb24gdHlwZVxuIik7CisgICAgICAgICAgICAgICAgYXV0aF90eXBl ID0gIlNTTCI7CisgICAgICAgICAgICAgICAgc3NsX2F1dGgoKTsKKyAgICAgICAgICAgICAgICBp ZiAoc3NsX2Z0cF9hY3RpdmVfZmxhZykgeworICAgICAgICAgICAgICAgICAgICBmdHBfZHBsID0g RlBMX1BSVjsKKyAgICAgICAgICAgICAgICAgICAgZnRwX2NwbCA9IEZQTF9QUlY7CisgICAgICAg ICAgICAgICAgICAgIHNldHByb3RidWYoMTw8MjApOworICAgICAgICAgICAgICAgICAgICByZXR1 cm4oMSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZnBy aW50ZihzdGRlcnIsIlNTTCBhdXRoZW50aWNhdGlvbiBmYWlsZWRcbiIpOworICAgICAgICAgICAg ICAgICAgICBhdXRoX3R5cGUgPSBOVUxMOworI2lmZGVmIFRDUElQTElCCisgICAgICAgICAgICAg ICAgICAgIHNvY2tldF9jbG9zZShjc29ja2V0KTsKKyNlbHNlIC8qIFRDUElQTElCICovCisjaWZk ZWYgVVNFX1NIVVRET1dOCisgICAgICAgICAgICAgICAgICAgIHNodXRkb3duKGNzb2NrZXQsIDEr MSk7CisjZW5kaWYgLyogVVNFX1NIVVRET1dOICovCisgICAgICAgICAgICAgICAgICAgIGNsb3Nl KGNzb2NrZXQpOworI2VuZGlmIC8qIFRDUElQTElCICovCisgICAgICAgICAgICAgICAgICAgIGNz b2NrZXQgPSAtMTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGZ0cF9ob29rdXAoZnRwX3VzZXJf aG9zdCxmdHBfcG9ydCwwKSA9PSBOVUxMKQorICAgICAgICAgICAgICAgICAgICAgIHJldHVybigw KTsKKyAgICAgICAgICAgICAgICB9CisJICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYg KGZ0cF9kZWIpCisJCSAgZnByaW50ZihzdGRlcnIsICJTU0wgcmVqZWN0ZWQgYXMgYW4gYXV0aGVu dGljYXRpb24gdHlwZVxuIik7CisgICAgICAgICAgICAgICAgaWYgKGZ0cGNvZGUgPT0gNTAwIHx8 IGZ0cGNvZGUgPT0gNTAyKQorCQkgIHJldHVybigwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg fQorI2VuZGlmIC8qIENLX1NTTCAqLworICAgICAgICAvKiBPdGhlciBhdXRoIHR5cGVzIGdvIGhl cmUgLi4uICovCisgICAgfSAvKiBmb3IgKGo7OykgKi8KKyAgICByZXR1cm4oMCk7Cit9CisjZW5k aWYgLyogRlRQX1NFQ1VSSVRZICovCisKK3N0YXRpYyBpbnQKKyNpZmRlZiBDS19BTlNJQworc2V0 cHJvdGJ1Zih1bnNpZ25lZCBpbnQgc2l6ZSkKKyNlbHNlCitzZXRwcm90YnVmKHNpemUpIHVuc2ln bmVkIGludCBzaXplOworI2VuZGlmIC8qIENLX0FOU0lDICovCisvKiBzZXRwcm90YnVmICovIHsK KyAgICBpZiAodWNidWYpCisgICAgICBmcmVlKHVjYnVmKTsKKyAgICB1Y2J1ZiA9IE5VTEw7Cisg ICAgdWNidWZzaXogPSAwOworICAgIGFjdHVhbGJ1ZiA9IHNpemU7CisgICAgd2hpbGUgKCh1Y2J1 ZiA9IChDSEFSICopbWFsbG9jKGFjdHVhbGJ1ZikpID09IE5VTEwpIHsKKyAgICAgICAgaWYgKGFj dHVhbGJ1ZikKKyAgICAgICAgICBhY3R1YWxidWYgLz0gMjsKKyAgICAgICAgZWxzZQorICAgICAg ICAgIHJldHVybigwKTsKKyAgICB9CisgICAgdWNidWZzaXogPSBhY3R1YWxidWYgLSBGVURHRV9G QUNUT1I7CisgICAgZGVidWcoRjEwMSwic2V0cHJvdGJ1ZiB1Y2J1ZnNpeiIsIiIsdWNidWZzaXop OworICAgIGlmICh1Y2J1ZnNpeiA8IDEyOCkgeworICAgICAgICBwcmludGYoIldBUk5JTkc6IHRp bnkgdWNidWZzaXo6ICVkXG4iLHVjYnVmc2l6KTsKKyAgICB9IGVsc2UgaWYgKHVjYnVmc2l6IDwg MCkgeworICAgICAgICBwcmludGYoIkVSUk9SOiB1Y2J1ZiBhbGxvY2F0aW9uIGZhaWx1cmVcbiIp OworICAgICAgICByZXR1cm4oLTEpOworICAgIH0KKyAgICBtYXhidWYgPSBhY3R1YWxidWY7Cisg ICAgcmV0dXJuKDEpOworfQorCitzdGF0aWMgaW50CisjaWZkZWYgQ0tfQU5TSUMKK3NldHBic3oo dW5zaWduZWQgaW50IHNpemUpCisjZWxzZQorc2V0cGJzeihzaXplKSB1bnNpZ25lZCBpbnQgc2l6 ZTsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogc2V0cGJzeiAqLyB7CisgICAgaWYgKCFzZXRw cm90YnVmKHNpemUpKSB7CisgICAgICAgIHBlcnJvcigiP0Vycm9yIHdoaWxlIHRyeWluZyB0byBt YWxsb2MgUFJPVCBidWZmZXI6Iik7CisjaWZkZWYgRlRQX1NSUAorICAgICAgICBzcnBfcmVzZXQo KTsKKyNlbmRpZiAvKiBGVFBfU1JQICovCisgICAgICAgIGZ0cGNsb3NlKCk7CisgICAgICAgIHJl dHVybigtMSk7CisgICAgfQorICAgIHJlcGx5X3BhcnNlID0gIlBCU1o9IjsKKyAgICBja21ha21z ZyhmdHBjbWRidWYsRlRQX0JVRlNJWiwiUEJTWiAiLAorI2lmZGVmIENLX1NTTAorICAgICAgICAg ICAgIHNzbF9mdHBfYWN0aXZlX2ZsYWcgPyAiMCIgOgorI2VuZGlmIC8qIENLX1NTTCAqLworICAg ICAgICAgICAgIGNrdWl0b2EoYWN0dWFsYnVmKSxOVUxMLE5VTEwpOworICAgIGlmIChmdHBjbWQo ZnRwY21kYnVmLE5VTEwsMCwwLDApICE9IFJFUExZX0NPTVBMRVRFKSB7CisgICAgICAgIGlmIChj b25uZWN0ZWQpIHsKKyAgICAgICAgICAgIHByaW50ZigiP1VuYWJsZSB0byBuZWdvdGlhdGUgUFJP VCBidWZmZXIgc2l6ZSB3aXRoIEZUUCBzZXJ2ZXJcbiIpOworICAgICAgICAgICAgZnRwY2xvc2Uo KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4oLTEpOworICAgIH0KKyAgICBpZiAocmVwbHlf cGFyc2UpIHsKKyAgICAgICAgaWYgKChtYXhidWYgPSAodW5zaWduZWQgaW50KSBhdG9sKHJlcGx5 X3BhcnNlKSkgPiBhY3R1YWxidWYpCisgICAgICAgICAgbWF4YnVmID0gYWN0dWFsYnVmOworICAg IH0gZWxzZQorICAgICAgbWF4YnVmID0gYWN0dWFsYnVmOworICAgIHVjYnVmc2l6ID0gbWF4YnVm IC0gRlVER0VfRkFDVE9SOworICAgIGRlYnVnKEYxMDEsInNldHBic3ogdWNidWZzaXoiLCIiLHVj YnVmc2l6KTsgICAgCisgICAgcmVwbHlfcGFyc2UgPSBOVUxMOworICAgIHJldHVybigwKTsKK30K Kworc3RhdGljIFZPSUQKK2NhbmNlbF9yZW1vdGUoZGluKSBpbnQgZGluOyB7CisgICAgQ0hBUiBi dWZbRlRQX0JVRlNJWl07CisgICAgaW50IHgsIG5mbmQ7CisjaWZkZWYgQlNEU0VMRUNUCisgICAg ZmRfc2V0IG1hc2s7CisjZW5kaWYgLyogQlNEU0VMRUNUICovCisjaWZkZWYgSUJNU0VMRUNUCisg ICAgaW50IGZkc1syXSwgZmRjbnQgPSAwOworI2VuZGlmIC8qIElCTVNFTEVDVCAqLworI2lmZGVm IERFQlVHCisgICAgZXh0ZXJuIGludCBkZWJ0aW07CisgICAgaW50IHhkZWJ0aW07CisgICAgeGRl YnRpbSA9IGRlYnRpbTsKKyAgICBkZWJ0aW0gPSAxOworI2VuZGlmIC8qIERFQlVHICovCisgICAg ZGVidWcoRjEwMCwiZnRwIGNhbmNlbF9yZW1vdGUgZW50cnkiLCIiLDApOworI2lmZGVmIENLX1NT TAorICAgIGlmIChzc2xfZnRwX2FjdGl2ZV9mbGFnKSB7CisgICAgICAgIC8qCisgICAgICAgICAq IFNlbmQgVGVsbmV0IElQLCBUZWxuZXQgRE0gYnV0IGRvIHNvIGlubGluZSBhbmQgd2l0aGluIHRo ZQorICAgICAgICAgKiBUTFMgY2hhbm5lbAorICAgICAgICAgKi8KKyAgICAgICAgaW50IGNvdW50 LCBlcnJvcjsKKworICAgICAgICBidWZbMF0gPSBJQUM7CisgICAgICAgIGJ1ZlsxXSA9IFROX0lQ OworICAgICAgICBidWZbMl0gPSBJQUM7CisgICAgICAgIGJ1ZlszXSA9IFROX0RNOworICAgICAg ICBidWZbNF0gPSBOVUw7CisKKyAgICAgICAgY291bnQgPSBTU0xfd3JpdGUoc3NsX2Z0cF9jb24s IGJ1ZiwgNCk7CisgICAgICAgIGRlYnVnKEYxMTEsImZ0cCBjYW5jZWxfcmVtb3RlIiwiU1NMX3dy aXRlKElBQyBJUCBJQUMgRE0pIixjb3VudCk7CisgICAgICAgIGVycm9yID0gU1NMX2dldF9lcnJv cihzc2xfZnRwX2Nvbixjb3VudCk7CisgICAgICAgIGRlYnVnKEYxMTEsImZ0cCBjYW5jZWxfcmVt b3RlIiwiU1NMX2dldF9lcnJvcigpIixlcnJvcik7CisgICAgICAgIHN3aXRjaCAoZXJyb3IpIHsK KyAgICAgICAgICBjYXNlIFNTTF9FUlJPUl9OT05FOgorICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICAgY2FzZSBTU0xfRVJST1JfV0FOVF9XUklURToKKyAgICAgICAgICBjYXNlIFNTTF9FUlJP Ul9XQU5UX1JFQUQ6CisgICAgICAgICAgY2FzZSBTU0xfRVJST1JfU1lTQ0FMTDoKKyNpZmRlZiBO VAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGludCBnbGUgPSBHZXRMYXN0RXJyb3Io KTsKKyAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBOVCAqLworICAgICAgICAgIGNhc2UgU1NMX0VS Uk9SX1dBTlRfWDUwOV9MT09LVVA6CisgICAgICAgICAgY2FzZSBTU0xfRVJST1JfU1NMOgorICAg ICAgICAgIGNhc2UgU1NMX0VSUk9SX1pFUk9fUkVUVVJOOgorICAgICAgICAgIGRlZmF1bHQ6Cisg ICAgICAgICAgICBsb3N0cGVlcigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg ICAgfSBlbHNlCisjZW5kaWYgLyogQ0tfU1NMICovCisgICAgeworICAgICAgICAvKgorICAgICAg ICAgKiBzZW5kIElBQyBpbiB1cmdlbnQgbW9kZSBpbnN0ZWFkIG9mIERNIGJlY2F1c2UgNC4zQlNE IHBsYWNlcyBvb2IgbWFyaworICAgICAgICAgKiBhZnRlciB1cmdlbnQgYnl0ZSByYXRoZXIgdGhh biBiZWZvcmUgYXMgaXMgcHJvdG9jb2wgbm93LgorICAgICAgICAgKi8KKyAgICAgICAgYnVmWzBd ID0gSUFDOworICAgICAgICBidWZbMV0gPSBUTl9JUDsKKyAgICAgICAgYnVmWzJdID0gSUFDOwor ICAgICAgICBidWZbM10gPSBOVUw7CisgICAgICAgIGlmICgoeCA9IHNlbmQoY3NvY2tldCwgKFNF TkRBUkcyVFlQRSlidWYsIDMsIE1TR19PT0IpKSAhPSAzKQorICAgICAgICAgIHBlcnJvcigiY2Fu Y2VsIik7CisgICAgICAgIGRlYnVnKEYxMDEsImZ0cCBjYW5jZWxfcmVtb3RlIHNlbmQgMSIsIiIs eCk7CisgICAgICAgIGJ1ZlswXSA9IFROX0RNOworICAgICAgICB4ID0gc2VuZChjc29ja2V0LChT RU5EQVJHMlRZUEUpYnVmLDEsMCk7CisgICAgICAgIGRlYnVnKEYxMDEsImZ0cCBjYW5jZWxfcmVt b3RlIHNlbmQgMiIsIiIseCk7CisgICAgfQorICAgIHggPSBzY29tbWFuZCgiQUJPUiIpOworICAg IGRlYnVnKEYxMDEsImZ0cCBjYW5jZWxfcmVtb3RlIHNjb21tYW5kIiwiIix4KTsKKyNpZmRlZiBC U0RTRUxFQ1QKKyAgICBGRF9aRVJPKCZtYXNrKTsKKyAgICBGRF9TRVQoY3NvY2tldCwgJm1hc2sp OworICAgIGlmIChkaW4pIHsKKyAgICAgICAgRkRfU0VUKGRpbiwgJm1hc2spOworICAgIH0KKyAg ICBuZm5kID0gZW1wdHkoJm1hc2ssIDEwKTsKKyAgICBkZWJ1ZyhGMTAxLCJmdHAgY2FuY2VsX3Jl bW90ZSBlbXB0eSIsIiIsbmZuZCk7CisgICAgaWYgKChuZm5kKSA8PSAwKSB7CisgICAgICAgIGlm IChuZm5kIDwgMCkgeworICAgICAgICAgICAgcGVycm9yKCJjYW5jZWwiKTsKKyAgICAgICAgfQor I2lmZGVmIEZUUF9QUk9YWQorICAgICAgICBpZiAocHRhYmZsZykKKyAgICAgICAgICBmdHBjb2Rl ID0gLTE7CisjZW5kaWYgLyogRlRQX1BST1hZICovCisgICAgICAgIGxvc3RwZWVyKCk7CisgICAg fQorICAgIGRlYnVnKEYxMTAsImZ0cCBjYW5jZWxfcmVtb3RlIiwiRCIsMCk7CisgICAgaWYgKGRp biAmJiBGRF9JU1NFVChkaW4sICZtYXNrKSkgeworICAgICAgICAvKiBTZWN1cml0eTogTm8gdGhy ZWF0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIHJlYWQuICovCisgICAgICAgIC8qIEJ1dCB5b3UgY2Fu J3Qgc2ltcGx5IHJlYWQgdGhlIFRMUyBkYXRhIHN0cmVhbSAgKi8KKyNpZmRlZiBDS19TU0wKKyAg ICAgICAgaWYgKHNzbF9mdHBfZGF0YV9hY3RpdmVfZmxhZykgeworICAgICAgICAgICAgaW50IGNv dW50LCBlcnJvcjsKKyAgICAgICAgICAgIHdoaWxlICgoY291bnQgPSBTU0xfcmVhZChzc2xfZnRw X2RhdGFfY29uLCBidWYsIEZUUF9CVUZTSVopKSA+IDApCisgICAgICAgICAgICAgICAgICAgIC8q IExPT1AgKi8gOworICAgICAgICB9IGVsc2UKKyNlbmRpZiAvKiBDS19TU0wgKi8KKyAgICAgICAg eworICAgICAgICAgICAgd2hpbGUgKHJlY3YoZGluLCAoU0VOREFSRzJUWVBFKWJ1ZiwgRlRQX0JV RlNJWiwwKSA+IDApCisgICAgICAgICAgICAgICAgLyogTE9PUCAqLyA7CisgICAgICAgIH0KKyAg ICB9CisgICAgZGVidWcoRjExMCwiZnRwIGNhbmNlbF9yZW1vdGUiLCJFIiwwKTsKKyNlbHNlIC8q IEJTRFNFTEVDVCAqLworI2lmZGVmIElCTVNFTEVDVAorICAgIGZkc1swXSA9IGNzb2NrZXQ7Cisg ICAgZmRjbnQrKzsKKyAgICBpZiAoZGluKSB7CisgICAgICAgIGZkc1sxXSA9IGRpbjsKKyAgICAg ICAgZmRjbnQrKzsKKyAgICB9CisgICAgbmZuZCA9IGVtcHR5KGZkcywgZmRjbnQsIDEwKTsKKyAg ICBkZWJ1ZyhGMTAxLCJmdHAgY2FuY2VsX3JlbW90ZSBlbXB0eSIsIiIsbmZuZCk7CisgICAgaWYg KChuZm5kKSA8PSAwKSB7CisgICAgICAgIGlmIChuZm5kIDwgMCkgeworICAgICAgICAgICAgcGVy cm9yKCJjYW5jZWwiKTsKKyAgICAgICAgfQorI2lmZGVmIEZUUF9QUk9YWQorICAgICAgICBpZiAo cHRhYmZsZykKKyAgICAgICAgICBmdHBjb2RlID0gLTE7CisjZW5kaWYgLyogRlRQX1BST1hZICov CisgICAgICAgIGxvc3RwZWVyKCk7CisgICAgfQorICAgIGRlYnVnKEYxMTAsImZ0cCBjYW5jZWxf cmVtb3RlIiwiRCIsMCk7CisgICAgaWYgKGRpbiAmJiBzZWxlY3QoJmRpbiwgMSwwLDAsMSkgKSB7 CisjaWZkZWYgQ0tfU1NMCisgICAgICAgIGlmIChzc2xfZnRwX2RhdGFfYWN0aXZlX2ZsYWcpIHsK KyAgICAgICAgICAgIGludCBjb3VudCwgZXJyb3I7CisgICAgICAgICAgICB3aGlsZSAoKGNvdW50 ID0gU1NMX3JlYWQoc3NsX2Z0cF9kYXRhX2NvbiwgYnVmLCBGVFBfQlVGU0laKSkgPiAwKQorICAg ICAgICAgICAgICAgICAgICAvKiBMT09QICovIDsKKyAgICAgICAgfSBlbHNlCisjZW5kaWYgLyog Q0tfU1NMICovCisgICAgICAgIHsKKyAgICAgICAgICAgIHdoaWxlIChyZWN2KGRpbiwgKFNFTkRB UkcyVFlQRSlidWYsIEZUUF9CVUZTSVosMCkgPiAwKQorICAgICAgICAgICAgICAgIC8qIExPT1Ag Ki8gOworICAgICAgICB9CisgICAgfQorICAgIGRlYnVnKEYxMTAsImZ0cCBjYW5jZWxfcmVtb3Rl IiwiRSIsMCk7CisjZWxzZSAvKiBJQk1TRUxFQ1QgKi8KKyAgICBTb21lIGZvcm0gb2Ygc2VsZWN0 IGlzIHJlcXVpcmVkLgorI2VuZGlmIC8qIElCTVNFTEVDVCAqLworI2VuZGlmIC8qIEJTRFNFTEVD VCAqLworICAgIGlmIChnZXRyZXBseSgwLC0xLC0xLGZ0cF92Ym0sMCkgPT0gUkVQTFlfRVJST1Ig JiYgZnRwY29kZSA9PSA1NTIpIHsKKyAgICAgICAgZGVidWcoRjExMCwiZnRwIGNhbmNlbF9yZW1v dGUiLCJGIiwwKTsKKyAgICAgICAgLyogNTUyIG5lZWRlZCBmb3IgTklDIHN0eWxlIGNhbmNlbCAq LworICAgICAgICBnZXRyZXBseSgwLC0xLC0xLGZ0cF92Ym0sMCk7CisgICAgICAgIGRlYnVnKEYx MTAsImZ0cCBjYW5jZWxfcmVtb3RlIiwiRyIsMCk7CisgICAgfQorICAgIGRlYnVnKEYxMTAsImZ0 cCBjYW5jZWxfcmVtb3RlIiwiSCIsMCk7CisgICAgZ2V0cmVwbHkoMCwtMSwtMSxmdHBfdmJtLDAp OworICAgIGRlYnVnKEYxMTAsImZ0cCBjYW5jZWxfcmVtb3RlIiwiSSIsMCk7CisjaWZkZWYgREVC VUcKKyAgICBkZWJ0aW0gPSB4ZGVidGltOworI2VuZGlmIC8qIERFQlVHICovCit9CisKK3N0YXRp YyBpbnQKK2Z0c19kcGwoeCkgaW50IHg7IHsKKyAgICBpZiAoIWF1dGhfdHlwZQorI2lmZGVmIE9T MgorICAgICAgICAgfHwgIWNrX2NyeXB0X2lzX2luc3RhbGxlZCgpCisjZW5kaWYgLyogT1MyICov CisgICAgICAgICApIHsKKyAgICAgICAgc3dpdGNoICggeCApIHsKKyAgICAgICAgICBjYXNlIEZQ TF9QUlY6CisgICAgICAgICAgICBwcmludGYoIj9DYW5ub3Qgc2V0IHByb3RlY3Rpb24gbGV2ZWwg dG8gUFJJVkFURVxuIik7CisgICAgICAgICAgICByZXR1cm4oMCk7CisgICAgICAgICAgY2FzZSBG UExfU0FGOgorICAgICAgICAgICAgcHJpbnRmKCI/Q2Fubm90IHNldCBwcm90ZWN0aW9uIGxldmVs IHRvIFNBRkVcbiIpOworICAgICAgICAgICAgcmV0dXJuKDApOworICAgICAgICB9CisgICAgICAg IGZ0cF9kcGwgPSB4OworICAgICAgICByZXR1cm4oMSk7CisgICAgfQorCisjaWZkZWYgQ0tfU1NM CisgICAgaWYgKHggPT0gRlBMX1NBRiAmJgorICAgICAgICAoIXN0cmNtcChhdXRoX3R5cGUsIlNT TCIpIHx8ICFzdHJjbXAoYXV0aF90eXBlLCJUTFMiKSkpIHsKKyAgICAgICAgcHJpbnRmKCJDYW5u b3Qgc2V0IHByb3RlY3Rpb24gbGV2ZWwgdG8gc2FmZVxuIik7CisgICAgICAgIHJldHVybigwKTsK KyAgICB9CisjZW5kaWYgLyogQ0tfU1NMICovCisgICAgLyogU3RhcnQgd2l0aCBhIFBCU1ogb2Yg MSBtZWcgKi8KKyAgICBpZiAoeCAhPSBGUExfQ0xSKSB7CisgICAgICAgIGlmIChzZXRwYnN6KERF RkFVTFRfUEJTWikgPCAwKQorICAgICAgICAgIHJldHVybigwKTsKKyAgICB9CisgICAgeSA9IGZ0 cGNtZCh4ID09IEZQTF9DTFIgPyAiUFJPVCBDIiA6CisgICAgICAgICAgICAgICAoeCA9PSBGUExf U0FGID8gIlBST1QgUyIgOiAiUFJPVCBQIiksIE5VTEwsIDAsIDAsZnRwX3ZibSk7CisgICAgaWYg KHkgPT0gUkVQTFlfQ09NUExFVEUpIHsKKyAgICAgICAgZnRwX2RwbCA9IHg7CisgICAgICAgIHJl dHVybigxKTsKKyAgICB9CisgICAgcmV0dXJuKDApOworfQorCitzdGF0aWMgaW50CitmdHNfY3Bs KHgpIGludCB4OyB7CisgICAgaWYgKCFhdXRoX3R5cGUgCisjaWZkZWYgT1MyCisgICAgICAgICB8 fCAhY2tfY3J5cHRfaXNfaW5zdGFsbGVkKCkKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAgICkg eworICAgICAgICBzd2l0Y2ggKCB4ICkgeworICAgICAgICAgIGNhc2UgRlBMX1BSVjoKKyAgICAg ICAgICAgIHByaW50ZigiP0Nhbm5vdCBzZXQgcHJvdGVjdGlvbiBsZXZlbCB0byBQUklWQVRFXG4i KTsKKyAgICAgICAgICAgIHJldHVybigwKTsKKyAgICAgICAgICBjYXNlIEZQTF9TQUY6CisgICAg ICAgICAgICBwcmludGYoIj9DYW5ub3Qgc2V0IHByb3RlY3Rpb24gbGV2ZWwgdG8gU0FGRVxuIik7 CisgICAgICAgICAgICByZXR1cm4oMCk7CisgICAgICAgIH0KKyAgICAgICAgZnRwX2NwbCA9IHg7 CisgICAgICAgIHJldHVybigxKTsKKyAgICB9CisgICAgaWYgKHggPT0gRlBMX0NMUikgeworICAg ICAgICB5ID0gZnRwY21kKCJDQ0MiLE5VTEwsMCwwLGZ0cF92Ym0pOworICAgICAgICBpZiAoeSA9 PSBSRVBMWV9DT01QTEVURSkgeworICAgICAgICAgICAgZnRwX2NwbCA9IHg7CisgICAgICAgICAg ICByZXR1cm4oMSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuKDApOworICAgIH0KKyAgICBm dHBfY3BsID0geDsKKyAgICByZXR1cm4oMSk7Cit9CisKKyNpZmRlZiBGVFBfR1NTQVBJCitzdGF0 aWMgVk9JRAordXNlcl9nc3NfZXJyb3IobWFqX3N0YXQsIG1pbl9zdGF0LCBzKQorICAgIE9NX3Vp bnQzMiBtYWpfc3RhdCwgbWluX3N0YXQ7CisgICAgY2hhciAqczsKK3sKKyAgICAvKiBhIGxvdCBv ZiB3b3JrIGp1c3QgdG8gcmVwb3J0IHRoZSBlcnJvciAqLworICAgIE9NX3VpbnQzMiBnbWFqX3N0 YXQsIGdtaW5fc3RhdCwgbXNnX2N0eDsKKyAgICBnc3NfYnVmZmVyX2Rlc2MgbXNnOworICAgIG1z Z19jdHggPSAwOworICAgIHdoaWxlICghbXNnX2N0eCkgeworICAgICAgICBnbWFqX3N0YXQgPSBn c3NfZGlzcGxheV9zdGF0dXMoJmdtaW5fc3RhdCwgbWFqX3N0YXQsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBHU1NfQ19HU1NfQ09ERSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEdTU19DX05VTExfT0lELAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJm1zZ19jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAmbXNnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICApOworICAgICAgICBpZiAoKGdtYWpfc3RhdCA9PSBHU1NfU19DT01QTEVURSl8fAorICAgICAg ICAgICAgKGdtYWpfc3RhdCA9PSBHU1NfU19DT05USU5VRV9ORUVERUQpKSB7CisgICAgICAgICAg ICBmcHJpbnRmKHN0ZGVyciwgIkdTU0FQSSBlcnJvciBtYWpvcjogJXNcbiIsCisgICAgICAgICAg ICAgICAgICAgIChjaGFyKiltc2cudmFsdWUpOworICAgICAgICAgICAgZ3NzX3JlbGVhc2VfYnVm ZmVyKCZnbWluX3N0YXQsICZtc2cpOworICAgICAgICB9CisgICAgICAgIGlmIChnbWFqX3N0YXQg IT0gR1NTX1NfQ09OVElOVUVfTkVFREVEKQorICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBt c2dfY3R4ID0gMDsKKyAgICB3aGlsZSAoIW1zZ19jdHgpIHsKKyAgICAgICAgZ21hal9zdGF0ID0g Z3NzX2Rpc3BsYXlfc3RhdHVzKCZnbWluX3N0YXQsIG1pbl9zdGF0LAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgR1NTX0NfTUVDSF9DT0RFLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgR1NTX0NfTlVMTF9PSUQsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAmbXNnX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICZtc2cKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICk7CisgICAgICAgIGlmICgoZ21hal9zdGF0ID09IEdTU19TX0NPTVBMRVRFKXx8CisgICAg ICAgICAgICAoZ21hal9zdGF0ID09IEdTU19TX0NPTlRJTlVFX05FRURFRCkpIHsKKyAgICAgICAg ICAgIGZwcmludGYoc3RkZXJyLCAiR1NTQVBJIGVycm9yIG1pbm9yOiAlc1xuIiwgKGNoYXIqKW1z Zy52YWx1ZSk7CisgICAgICAgICAgICBnc3NfcmVsZWFzZV9idWZmZXIoJmdtaW5fc3RhdCwgJm1z Zyk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGdtYWpfc3RhdCAhPSBHU1NfU19DT05USU5VRV9O RUVERUQpCisgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGZwcmludGYoc3RkZXJyLCAiR1NT QVBJIGVycm9yOiAlc1xuIiwgcyk7Cit9CisjZW5kaWYgLyogRlRQX0dTU0FQSSAqLworCisjaWZu ZGVmIE5PTUhIT1NUCisjaWZkZWYgZGF0YWdlbmVyYWwKKyNkZWZpbmUgTk9NSEhPU1QKKyNlbHNl CisjaWZkZWYgSFBVWDVXSU5UQ1AKKyNkZWZpbmUgTk9NSEhPU1QKKyNlbmRpZiAvKiBIUFVYNVdJ TlRDUCAqLworI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCisjZW5kaWYgLyogTk9NSEhPU1QgKi8K KworI2lmZGVmIElOQUREUlgKK3N0YXRpYyBzdHJ1Y3QgaW5fYWRkciBpbmFkZHJ4OworI2VuZGlm IC8qIElOQUREUlggKi8KKworc3RhdGljIGNoYXIgKgorZnRwX2hvb2t1cChob3N0LCBwb3J0LCB0 bHMpIGNoYXIgKiBob3N0OyBpbnQgcG9ydDsgaW50IHRsczsgeworICAgIHJlZ2lzdGVyIHN0cnVj dCBob3N0ZW50ICpocCA9IDA7CisjaWZkZWYgSVBfVE9TCisjaWZkZWYgSVBUT1NfVEhST1VHSFBV VAorICAgIGludCB0b3M7CisjZW5kaWYgLyogSVBUT1NfVEhST1VHSFBVVCAqLworI2VuZGlmIC8q IElQX1RPUyAqLworICAgIGludCBzOworICAgIEdTT0NLTkFNRV9UIGxlbjsKKyAgICBzdGF0aWMg Y2hhciBob3N0bmFtZWJ1ZltNQVhIT1NUTkFNRUxFTl07CisgICAgY2hhciBob3N0bmFtZVtNQVhI T1NUTkFNRUxFTl0gLyogLCAqcCwgKnEgKi8gOworICAgIGludCAgY3BvcnQ7CisjaWZkZWYgREVC VUcKKyAgICBleHRlcm4gaW50IGRlYnRpbTsKKyAgICBpbnQgeGRlYnRpbTsKKyAgICB4ZGVidGlt ID0gZGVidGltOworICAgIGRlYnRpbSA9IDE7CisjZW5kaWYgLyogREVCVUcgKi8KKworICAgIGRl YnVnKEYxMTEsImZ0cF9ob29rdXAiLGhvc3QscG9ydCk7CisKKyNpZm5kZWYgTk9IVFRQCisgICAg aWYgKHRjcF9odHRwX3Byb3h5KSB7CisgICAgICAgIHN0cnVjdCBzZXJ2ZW50ICpkZXN0c3A7Cisg ICAgICAgIGNoYXIgKnAsICpxOworCisgICAgICAgIGNrbWFrbXNnKHByb3h5aG9zdCxIVFRQQ1BZ TCxob3N0LCI6Iixja3VpdG9hKHBvcnQpLE5VTEwpOworICAgICAgICBmb3IgKHAgPSB0Y3BfaHR0 cF9wcm94eSwgcSA9IGhvc3RuYW1lOworICAgICAgICAgICAgICpwICE9ICdcMCcgJiYgKnAgIT0g JzonOworICAgICAgICAgICAgIHArKywgcSsrCisgICAgICAgICAgICAgKQorICAgICAgICAgICpx ID0gKnA7CisgICAgICAgICpxID0gJ1wwJzsKKworICAgICAgICBpZiAoKnAgPT0gJzonKQorICAg ICAgICAgIHArKzsKKyAgICAgICAgZWxzZQorICAgICAgICAgIHAgPSAiaHR0cCI7CisKKyAgICAg ICAgZGVzdHNwID0gZ2V0c2VydmJ5bmFtZShwLCJ0Y3AiKTsKKyAgICAgICAgaWYgKGRlc3RzcCkK KyAgICAgICAgICBjcG9ydCA9IG50b2hzKGRlc3RzcC0+c19wb3J0KTsKKyAgICAgICAgZWxzZSBp ZiAocCkgeworICAgICAgICAgIGNwb3J0ID0gYXRvaShwKTsKKyAgICAgICAgfSBlbHNlCisgICAg ICAgICAgY3BvcnQgPSA4MDsKKyAgICB9IGVsc2UKKyNlbmRpZiAvKiBOT0hUVFAgKi8KKyAgICB7 CisgICAgICAgIGNrc3RybmNweShob3N0bmFtZSxob3N0LE1BWEhPU1ROQU1FTEVOKTsKKyAgICAg ICAgY3BvcnQgPSBwb3J0OworICAgIH0KKyAgICBtZW1zZXQoKGNoYXIgKikmaGlzY3RsYWRkciwg MCwgc2l6ZW9mIChoaXNjdGxhZGRyKSk7CisgICAgaGlzY3RsYWRkci5zaW5fYWRkci5zX2FkZHIg PSBpbmV0X2FkZHIoaG9zdCk7CisgICAgaWYgKGhpc2N0bGFkZHIuc2luX2FkZHIuc19hZGRyICE9 IElOQUREUl9OT05FKSAvKiAyMDEwLTAzLTI5ICovCisgICAgeworICAgICAgICBkZWJ1ZyhGMTEw LCJmdHAgaG9va3VwIEEiLGhvc3RuYW1lLDApOworICAgICAgICBoaXNjdGxhZGRyLnNpbl9mYW1p bHkgPSBBRl9JTkVUOworICAgICAgICBja3N0cm5jcHkoaG9zdG5hbWVidWYsIGhvc3RuYW1lLCBN QVhIT1NUTkFNRUxFTik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZGVidWcoRjExMCwiZnRwIGhv b2t1cCBCIixob3N0bmFtZSwwKTsKKyAgICAgICAgaHAgPSBnZXRob3N0YnluYW1lKGhvc3RuYW1l KTsKKyNpZmRlZiBIQUREUkxJU1QKKyAgICAgICAgaHAgPSBja19jb3B5aG9zdGVudChocCk7ICAg ICAgICAvKiBtYWtlIHNhZmUgY29weSB0aGF0IHdvbid0IGNoYW5nZSAqLworI2VuZGlmIC8qIEhB RERSTElTVCAqLworICAgICAgICBpZiAoaHAgPT0gTlVMTCkgeworICAgICAgICAgICAgZnByaW50 ZihzdGRlcnIsICJmdHA6ICVzOiBVbmtub3duIGhvc3RcbiIsIGhvc3QpOworICAgICAgICAgICAg ZnRwY29kZSA9IC0xOworI2lmZGVmIERFQlVHCisgICAgICAgICAgICBkZWJ0aW0gPSB4ZGVidGlt OworI2VuZGlmIC8qIERFQlVHICovCisgICAgICAgICAgICByZXR1cm4oKGNoYXIgKikgMCk7Cisg ICAgICAgIH0KKyAgICAgICAgaGlzY3RsYWRkci5zaW5fZmFtaWx5ID0gaHAtPmhfYWRkcnR5cGU7 CisjaWZkZWYgSEFERFJMSVNUCisgICAgICAgIG1lbWNweSgoY2hhciAqKSZoaXNjdGxhZGRyLnNp bl9hZGRyLCBocC0+aF9hZGRyX2xpc3RbMF0sCisgICAgICAgICAgICAgICBzaXplb2YoaGlzY3Rs YWRkci5zaW5fYWRkcikpOworI2Vsc2UgLyogSEFERFJMSVNUICovCisgICAgICAgIG1lbWNweSgo Y2hhciAqKSZoaXNjdGxhZGRyLnNpbl9hZGRyLCBocC0+aF9hZGRyLAorICAgICAgICAgICAgICAg c2l6ZW9mKGhpc2N0bGFkZHIuc2luX2FkZHIpKTsKKyNlbmRpZiAvKiBIQUREUkxJU1QgKi8KKyAg ICAgICAgY2tzdHJuY3B5KGhvc3RuYW1lYnVmLCBocC0+aF9uYW1lLCBNQVhIT1NUTkFNRUxFTik7 CisgICAgfQorICAgIGRlYnVnKEYxMTAsImZ0cCBob29rdXAgQyIsaG9zdG5hbWVidWYsMCk7Cisg ICAgZnRwX2hvc3QgPSBob3N0bmFtZWJ1ZjsKKyAgICBzID0gc29ja2V0KGhpc2N0bGFkZHIuc2lu X2ZhbWlseSwgU09DS19TVFJFQU0sIDApOworICAgIGRlYnVnKEYxMDEsImZ0cCBob29rdXAgc29j a2V0IiwiIixzKTsKKyAgICBpZiAocyA8IDApIHsKKyAgICAgICAgcGVycm9yKCJmdHA6IHNvY2tl dCIpOworICAgICAgICBmdHBjb2RlID0gLTE7CisjaWZkZWYgREVCVUcKKyAgICAgICAgZGVidGlt ID0geGRlYnRpbTsKKyNlbmRpZiAvKiBERUJVRyAqLworICAgICAgICByZXR1cm4oMCk7CisgICAg fQorICAgIGhpc2N0bGFkZHIuc2luX3BvcnQgPSBodG9ucyhjcG9ydCk7CisgICAgZXJybm8gPSAw OworCisjaWZkZWYgQ09NTUVOVAorICBwcmludGYoImhpc2N0bGFkZHI9JWRcbiIsc2l6ZW9mKGhp c2N0bGFkZHIpKTsKKyAgcHJpbnRmKCJoaXNjdGxhZGRyLnNpbl9hZGRyPSVkXG4iLHNpemVvZiho aXNjdGxhZGRyLnNpbl9hZGRyKSk7CisgIHByaW50Zigic29ja2FkZHJfaW49JWRcbiIsc2l6ZW9m KHN0cnVjdCBzb2NrYWRkcl9pbikpOworICBwcmludGYoImhpc2N0bGFkZHIuc2luX2FkZHIuc19h ZGRyPSVkXG4iLHNpemVvZihoaXNjdGxhZGRyLnNpbl9hZGRyLnNfYWRkcikpOworI2VuZGlmCS8q IENPTU1FTlQgKi8KKworI2lmZGVmIEhBRERSTElTVAorICAgIGRlYnVnKEYxMDAsImZ0cCBob29r dXAgSEFERFJMSVNUIiwiIiwwKTsKKyAgICB3aGlsZQorI2Vsc2UKKyAgICBkZWJ1ZyhGMTAwLCJm dHAgaG9va3VwIG5vIEhBRERSTElTVCIsIiIsMCk7CisgICAgaWYKKyNlbmRpZiAvKiBIQUREUkxJ U1QgKi8KKyAgICAgIChjb25uZWN0KHMsIChzdHJ1Y3Qgc29ja2FkZHIgKikmaGlzY3RsYWRkciwg c2l6ZW9mIChoaXNjdGxhZGRyKSkgPCAwKSB7CisgICAgICAgICAgZGVidWcoRjEwMSwiZnRwIGhv b2t1cCBjb25uZWN0IGZhaWxlZCIsIiIsZXJybm8pOworI2lmZGVmIEhBRERSTElTVAorICAgICAg ICAgIGlmIChocCAmJiBocC0+aF9hZGRyX2xpc3RbMV0pIHsKKyAgICAgICAgICAgICAgaW50IG9l cnJubyA9IGVycm5vOworCisgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZnRwOiBjb25u ZWN0IHRvIGFkZHJlc3MgJXM6ICIsCisgICAgICAgICAgICAgICAgICAgICAgaW5ldF9udG9hKGhp c2N0bGFkZHIuc2luX2FkZHIpKTsKKyAgICAgICAgICAgICAgZXJybm8gPSBvZXJybm87CisgICAg ICAgICAgICAgIHBlcnJvcigoY2hhciAqKSAwKTsKKyAgICAgICAgICAgICAgaHAtPmhfYWRkcl9s aXN0Kys7CisgICAgICAgICAgICAgIG1lbWNweSgoY2hhciAqKSZoaXNjdGxhZGRyLnNpbl9hZGRy LAorICAgICAgICAgICAgICAgICAgICAgaHAtPmhfYWRkcl9saXN0WzBdLAorICAgICAgICAgICAg ICAgICAgICAgc2l6ZW9mKGhpc2N0bGFkZHIuc2luX2FkZHIpKTsKKyAgICAgICAgICAgICAgZnBy aW50ZihzdGRvdXQsICJUcnlpbmcgJXMuLi5cbiIsCisgICAgICAgICAgICAgICAgICAgICAgaW5l dF9udG9hKGhpc2N0bGFkZHIuc2luX2FkZHIpKTsKKyNpZmRlZiBUQ1BJUExJQgorICAgICAgICAg ICAgICBzb2NrZXRfY2xvc2Uocyk7CisjZWxzZSAvKiBUQ1BJUExJQiAqLworICAgICAgICAgICAg ICBjbG9zZShzKTsKKyNlbmRpZiAvKiBUQ1BJUExJQiAqLworICAgICAgICAgICAgICBzID0gc29j a2V0KGhpc2N0bGFkZHIuc2luX2ZhbWlseSwgU09DS19TVFJFQU0sIDApOworICAgICAgICAgICAg ICBpZiAocyA8IDApIHsKKyAgICAgICAgICAgICAgICAgIHBlcnJvcigiZnRwOiBzb2NrZXQiKTsK KyAgICAgICAgICAgICAgICAgIGZ0cGNvZGUgPSAtMTsKKyNpZmRlZiBERUJVRworICAgICAgICAg ICAgICAgICAgZGVidGltID0geGRlYnRpbTsKKyNlbmRpZiAvKiBERUJVRyAqLworICAgICAgICAg ICAgICAgICAgcmV0dXJuKDApOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGNvbnRp bnVlOworICAgICAgICAgIH0KKyNlbmRpZiAvKiBIQUREUkxJU1QgKi8KKyAgICAgICAgICBwZXJy b3IoImZ0cDogY29ubmVjdCIpOworICAgICAgICAgIGZ0cGNvZGUgPSAtMTsKKyAgICAgICAgICBn b3RvIGJhZDsKKyAgICAgIH0KKyAgICBkZWJ1ZyhGMTAwLCJmdHAgaG9va3VwIGNvbm5lY3Qgb2si LCIiLDApOworCisgICAgbGVuID0gc2l6ZW9mIChteWN0bGFkZHIpOworICAgIGVycm5vID0gMDsK KyAgICBpZiAoZ2V0c29ja25hbWUocywgKHN0cnVjdCBzb2NrYWRkciAqKSZteWN0bGFkZHIsICZs ZW4pIDwgMCkgeworICAgICAgICBkZWJ1ZyhGMTAxLCJmdHAgaG9va3VwIGdldHNvY2tuYW1lIGZh aWxlZCIsIiIsZXJybm8pOworICAgICAgICBwZXJyb3IoImZ0cDogZ2V0c29ja25hbWUiKTsKKyAg ICAgICAgZnRwY29kZSA9IC0xOworICAgICAgICBnb3RvIGJhZDsKKyAgICB9CisgICAgZGVidWco RjEwMCwiZnRwIGhvb2t1cCBnZXRzb2NrbmFtZSBvayIsIiIsMCk7CisKKyNpZm5kZWYgTk9IVFRQ CisgICAgaWYgKHRjcF9odHRwX3Byb3h5KSB7CisjaWZkZWYgT1MyCisgICAgICAgIGNoYXIgKiBh Z2VudCA9ICJLZXJtaXQgOTUiOyAgICAgLyogRGVmYXVsdCB1c2VyIGFnZW50ICovCisjZWxzZQor ICAgICAgICBjaGFyICogYWdlbnQgPSAiQy1LZXJtaXQiOworI2VuZGlmIC8qIE9TMiAqLworCisg ICAgICAgIGlmIChodHRwX2Nvbm5lY3QocyxhZ2VudCxOVUxMLAorICAgICAgICAgICAgICAgICAg ICAgICAgIHRjcF9odHRwX3Byb3h5X3VzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgdGNw X2h0dHBfcHJveHlfcHdkLAorICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAg ICAgICAgICAgICAgICAgcHJveHlob3N0CisgICAgICAgICAgICAgICAgICAgICAgICAgKSA8IDAp IHsKKyAgICAgICAgICAgIGNoYXIgKiBmb28gPSBOVUxMOworI2lmZGVmIFRDUElQTElCCisgICAg ICAgICAgICBzb2NrZXRfY2xvc2Uocyk7CisjZWxzZSAvKiBUQ1BJUExJQiAqLworICAgICAgICAg ICAgY2xvc2Uocyk7CisjZW5kaWYgLyogVENQSVBMSUIgKi8KKworICAgICAgICAgICAgd2hpbGUg KGZvbyA9PSBOVUxMICYmIHRjcF9odHRwX3Byb3h5ICE9IE5VTEwgKSB7CisKKyAgICAgICAgICAg ICAgICBpZiAodGNwX2h0dHBfcHJveHlfZXJybm8gPT0gNDAxIHx8CisgICAgICAgICAgICAgICAg ICAgICB0Y3BfaHR0cF9wcm94eV9lcnJubyA9PSA0MDcgKSB7CisgICAgICAgICAgICAgICAgICAg IGNoYXIgdWlkW1VJREJVRkxFTl07CisgICAgICAgICAgICAgICAgICAgIGNoYXIgcHdkW1BXRFNJ Wl07CisgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0eHRib3ggdGJbMl07CisgICAgICAgICAg ICAgICAgICAgIGludCBvazsKKworICAgICAgICAgICAgICAgICAgICB0YlswXS50X2J1ZiA9IHVp ZDsKKyAgICAgICAgICAgICAgICAgICAgdGJbMF0udF9sZW4gPSBVSURCVUZMRU47CisgICAgICAg ICAgICAgICAgICAgIHRiWzBdLnRfbGJsID0gIlByb3h5IFVzZXJpZDogIjsKKyAgICAgICAgICAg ICAgICAgICAgdGJbMF0udF9kZmx0ID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgdGJbMF0u dF9lY2hvID0gMTsKKyAgICAgICAgICAgICAgICAgICAgdGJbMV0udF9idWYgPSBwd2Q7CisgICAg ICAgICAgICAgICAgICAgIHRiWzFdLnRfbGVuID0gMjU2OworICAgICAgICAgICAgICAgICAgICB0 YlsxXS50X2xibCA9ICJQcm94eSBQYXNzcGhyYXNlOiAiOworICAgICAgICAgICAgICAgICAgICB0 YlsxXS50X2RmbHQgPSBOVUxMOworICAgICAgICAgICAgICAgICAgICB0YlsxXS50X2VjaG8gPSAy OworCisgICAgICAgICAgICAgICAgICAgIG9rID0gdXFfbXR4dCgiUHJveHkgU2VydmVyIEF1dGhl bnRpY2F0aW9uIFJlcXVpcmVkXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IE5VTEwsIDIsIHRiKTsKKworICAgICAgICAgICAgICAgICAgICBpZiAob2sgJiYgdWlkWzBdKSB7 CisgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICogcHJveHlfdXNlciwgKiBwcm94eV9wd2Q7 CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb3h5X3VzZXIgPSB0Y3BfaHR0cF9wcm94eV91 c2VyOworICAgICAgICAgICAgICAgICAgICAgICAgcHJveHlfcHdkICA9IHRjcF9odHRwX3Byb3h5 X3B3ZDsKKworICAgICAgICAgICAgICAgICAgICAgICAgdGNwX2h0dHBfcHJveHlfdXNlciA9IHVp ZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRjcF9odHRwX3Byb3h5X3B3ZCA9IHB3ZDsKKwor ICAgICAgICAgICAgICAgICAgICAgICAgZm9vID0gZnRwX2hvb2t1cChob3N0LCBwb3J0LCAwKTsK KworICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoRjExMCwiZnRwX2hvb2t1cCgpIixmb28s MCk7CisgICAgICAgICAgICAgICAgICAgICAgICBtZW1zZXQocHdkLDAsUFdEU0laKTsKKyAgICAg ICAgICAgICAgICAgICAgICAgIHRjcF9odHRwX3Byb3h5X3VzZXIgPSBwcm94eV91c2VyOworICAg ICAgICAgICAgICAgICAgICAgICAgdGNwX2h0dHBfcHJveHlfcHdkID0gcHJveHlfcHdkOworICAg ICAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIGlmIChmb28gIT0gTlVMTCkKKyAgICAgICAgICAgICAgcmV0 dXJuKGZvbyk7CisgICAgICAgICAgICBwZXJyb3IoImZ0cDogY29ubmVjdCIpOworICAgICAgICAg ICAgZnRwY29kZSA9IC0xOworICAgICAgICAgICAgZ290byBiYWQ7CisgICAgICAgIH0KKyAgICAg ICAgY2tzdHJuY3B5KGhvc3RuYW1lYnVmLCBwcm94eWhvc3QsIE1BWEhPU1ROQU1FTEVOKTsKKyAg ICB9CisjZW5kaWYgLyogTk9IVFRQICovCisKKyAgICBjc29ja2V0ID0gczsKKworI2lmZGVmIENL X1NTTAorICAgIGlmICh0bHMpIHsKKyAgICAgICAgLyogRlRQIG92ZXIgU1NMCisgICAgICAgICAq IElmIHRoZSBjb25uZWN0aW9uIGlzIG92ZXIgYW4gU1NMIHByb3h5IHRoZW4gdGhlCisgICAgICAg ICAqIGF1dGhfdHlwZSB3aWxsIGJlIE5VTEwuICBIb3dldmVyLCBJJ20gbm90IHN1cmUKKyAgICAg ICAgICogd2hldGhlciB3ZSBzaG91bGQgcHJvdGVjdCB0aGUgZGF0YSBjaGFubmVsIGluCisgICAg ICAgICAqIHRoYXQgY2FzZSBvciBub3QuCisgICAgICAgICAqLworCisgICAgICAgIGRlYnVnKEYx MDAsImZ0cCBob29rdXAgdXNlX3RscyIsIiIsMCk7CisgICAgICAgIGlmICghc3NsX2F1dGgoKSkg eworICAgICAgICAgICAgZGVidWcoRjEwMCwiZnRwIGhvb2t1cCBzc2xfYXV0aCBmYWlsZWQiLCIi LDApOworICAgICAgICAgICAgYXV0aF90eXBlID0gTlVMTDsKKyAgICAgICAgICAgIGZ0cGNvZGUg PSAtMTsKKyAgICAgICAgICAgIGNzb2NrZXQgPSAtMTsKKyAgICAgICAgICAgIGdvdG8gYmFkOwor ICAgICAgICB9CisgICAgICAgIHNzbF9mdHBfcHJveHkgPSAxOworICAgIH0KKyNlbmRpZiAvKiBD S19TU0wgKi8KKworI2lmZGVmIElQX1RPUworI2lmZGVmIElQVE9TX0xPV0RFTEFZCisgICAgdG9z ID0gSVBUT1NfTE9XREVMQVk7CisgICAgaWYgKHNldHNvY2tvcHQoY3NvY2tldCwgSVBQUk9UT19J UCwgSVBfVE9TLCAoY2hhciAqKSZ0b3MsIHNpemVvZihpbnQpKSA8IDApCisgICAgICBwZXJyb3Io ImZ0cDogc2V0c29ja29wdCBUT1MgKGlnbm9yZWQpIik7CisjZW5kaWYKKyNlbmRpZgorICAgIGlm ICghcXVpZXQpCisgICAgICBwcmludGYoIkNvbm5lY3RlZCB0byAlcy5cbiIsIGhvc3QpOworCisg ICAgLyogUmVhZCBncmVldGluZyBmcm9tIHNlcnZlciAqLworICAgIGlmIChnZXRyZXBseSgwLGZ0 cF9jc2wsZnRwX2NzcixmdHBfdmJtLDApID4gMikgeworICAgICAgICBkZWJ1ZyhGMTAwLCJmdHAg aG9va3VwIGJhZCByZXBseSIsIiIsMCk7CisjaWZkZWYgVENQSVBMSUIKKyAgICAgICAgc29ja2V0 X2Nsb3NlKGNzb2NrZXQpOworI2Vsc2UgLyogVENQSVBMSUIgKi8KKyAgICAgICAgY2xvc2UoY3Nv Y2tldCk7CisjZW5kaWYgLyogVENQSVBMSUIgKi8KKyAgICAgICAgZnRwY29kZSA9IC0xOworICAg ICAgICBnb3RvIGJhZDsKKyAgICB9CisjaWZkZWYgU09fT09CSU5MSU5FCisgICAgeworICAgICAg ICBpbnQgb24gPSAxOworICAgICAgICBlcnJubyA9IDA7CisgICAgICAgIGlmIChzZXRzb2Nrb3B0 KHMsIFNPTF9TT0NLRVQsIFNPX09PQklOTElORSwgKGNoYXIgKikmb24sCisJCSAgICAgICBzaXpl b2Yob24pKSA8IDApIHsKKyAgICAgICAgICAgIHBlcnJvcigiZnRwOiBzZXRzb2Nrb3B0Iik7Cisg ICAgICAgICAgICBkZWJ1ZyhGMTAxLCJmdHAgaG9va3VwIHNldHNvY2tvcHQgZmFpbGVkIiwiIixl cnJubyk7CisgICAgICAgIH0KKyNpZmRlZiBERUJVRworICAgICAgICBlbHNlCisgICAgICAgICAg ZGVidWcoRjEwMCwiZnRwIGhvb2t1cCBzZXRzb2Nrb3B0IG9rIiwiIiwwKTsKKyNlbmRpZiAvKiBE RUJVRyAqLworICAgIH0KKyNlbmRpZiAvKiBTT19PT0JJTkxJTkUgKi8KKworI2lmZGVmIERFQlVH CisgICAgZGVidGltID0geGRlYnRpbTsKKyNlbmRpZiAvKiBERUJVRyAqLworICAgIHJldHVybihm dHBfaG9zdCk7CisKKyAgYmFkOgorICAgIGRlYnVnKEYxMDAsImZ0cCBob29rdXAgYmFkIiwiIiww KTsKKyNpZmRlZiBUQ1BJUExJQgorICAgIHNvY2tldF9jbG9zZShzKTsKKyNlbHNlIC8qIFRDUElQ TElCICovCisgICAgY2xvc2Uocyk7CisjZW5kaWYgLyogVENQSVBMSUIgKi8KKyNpZmRlZiBERUJV RworICAgIGRlYnRpbSA9IHhkZWJ0aW07CisjZW5kaWYgLyogREVCVUcgKi8KKyAgICBjc29ja2V0 ID0gLTE7CisgICAgcmV0dXJuKChjaGFyICopMCk7Cit9CisKK3N0YXRpYyBWT0lECitmdHBfaW5p dCgpIHsKKyAgICBpbnQgaSwgbjsKKworICAgIC8qIFRoZSBwdXJwb3NlIG9mIHRoZSBpbml0aWFs IFJFU1QgMCBpcyBub3QgY2xlYXIsIGJ1dCBvdGhlciBGVFAgKi8KKyAgICAvKiBjbGllbnRzIGRv IGl0LiAgSW4gYW55IGNhc2UsIGZhaWx1cmUgb2YgdGhpcyBjb21tYW5kIGlzIG5vdCBhICovCisg ICAgLyogcmVsaWFibGUgaW5kaWNhdGlvbiB0aGF0IHRoZSBzZXJ2ZXIgZG9lcyBub3Qgc3VwcG9y dCBSZXN0YXJ0LiAqLworCisgICAgb2tyZXN0YXJ0ID0gMDsKKyAgICBpZiAoIW5vaW5pdCkgewor ICAgICAgICBuID0gZnRwY21kKCJSRVNUIDAiLE5VTEwsMCwwLDApOworICAgICAgICBpZiAobiA9 PSBSRVBMWV9DT01QTEVURSkKKyAgICAgICAgICBva3Jlc3RhcnQgPSAxOworI2lmZGVmIENPTU1F TlQKKyAgICAgICAgZWxzZSBpZiAoZnRwX2RlYikKKyAgICAgICAgICBwcmludGYoIldBUk5JTkc6 IFVuYWJsZSB0byByZXN0b3JlIGZpbGUgcG9pbnRlci5cbiIpOworI2VuZGlmIC8qIENPTU1FTlQg Ki8KKyAgICB9CisgICAgbiA9IGZ0cGNtZCgiU1lTVCIsTlVMTCwwLDAsMCk7ICAgICAgLyogR2V0 IHNlcnZlciBzeXN0ZW0gdHlwZSAqLworICAgIGlmIChuID09IFJFUExZX0NPTVBMRVRFKSB7Cisg ICAgICAgIHJlZ2lzdGVyIGNoYXIgKmNwLCBjID0gTlVMOworICAgICAgICBjcCA9IGNrc3RyY2hy KGZ0cF9yZXBseV9zdHIrNCwnICcpOyAvKiBHZXQgZmlyc3Qgd29yZCBvZiByZXBseSAqLworICAg ICAgICBpZiAoY3AgPT0gTlVMTCkKKyAgICAgICAgICBjcCA9IGNrc3RyY2hyKGZ0cF9yZXBseV9z dHIrNCwnXHInKTsKKyAgICAgICAgaWYgKGNwKSB7CisgICAgICAgICAgICBpZiAoY3BbLTFdID09 ICcuJykKKyAgICAgICAgICAgICAgY3AtLTsKKyAgICAgICAgICAgIGMgPSAqY3A7ICAgICAgICAg ICAgICAgICAgICAvKiBTYXZlIHRoaXMgY2hhciAqLworICAgICAgICAgICAgKmNwID0gJ1wwJzsg ICAgICAgICAgICAgICAgIC8qIFJlcGxhY2UgaXQgd2l0aCBOVUwgKi8KKyAgICAgICAgfQorICAg ICAgICBpZiAoIXF1aWV0KQorICAgICAgICAgIHByaW50ZigiUmVtb3RlIHN5c3RlbSB0eXBlIGlz ICVzLlxuIixmdHBfcmVwbHlfc3RyKzQpOworICAgICAgICBja3N0cm5jcHkoZnRwX3NydnR5cCxm dHBfcmVwbHlfc3RyKzQsU1JWTkFNTEVOKTsKKyAgICAgICAgaWYgKGNwKSAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBQdXQgYmFjayBzYXZlZCBjaGFyICovCisgICAgICAgICAgKmNwID0gYzsK KyAgICB9CisgICAgYWxpa2UgPSAhY2tzdHJjbXAoZnRwX3NydnR5cCxteW9zdHlwZSwtMSwwKTsK KworICAgIGlmICghY2tzdHJjbXAoZnRwX3NydnR5cCwiVU5JWCIsLTEsMCkpIHNlcnZlcnR5cGUg PSBTWVNfVU5JWDsKKyAgICBlbHNlIGlmICghY2tzdHJjbXAoZnRwX3NydnR5cCwiV0lOMzIiLC0x LDApKSBzZXJ2ZXJ0eXBlID0gU1lTX1dJTjMyOworICAgIGVsc2UgaWYgKCFja3N0cmNtcChmdHBf c3J2dHlwLCJPUy8yIiwtMSwwKSkgc2VydmVydHlwZSA9IFNZU19XSU4zMjsKKyAgICBlbHNlIGlm ICghY2tzdHJjbXAoZnRwX3NydnR5cCwiVk1TIiwtMSwwKSkgc2VydmVydHlwZSA9IFNZU19WTVM7 CisgICAgZWxzZSBpZiAoIWNrc3RyY21wKGZ0cF9zcnZ0eXAsIkRPUyIsLTEsMCkpIHNlcnZlcnR5 cGUgPSBTWVNfRE9TOworICAgIGVsc2UgaWYgKCFja3N0cmNtcChmdHBfc3J2dHlwLCJUT1BTMjAi LC0xLDApKSBzZXJ2ZXJ0eXBlID0gU1lTX1RPUFMyMDsKKyAgICBlbHNlIGlmICghY2tzdHJjbXAo ZnRwX3NydnR5cCwiVE9QUzEwIiwtMSwwKSkgc2VydmVydHlwZSA9IFNZU19UT1BTMTA7CisKKyNp ZmRlZiBGVFBfUFJPWFkKKyAgICB1bml4X3Byb3h5ID0gMDsKKyAgICBpZiAoc2VydmVydHlwZSA9 PSBTWVNfVU5JWCAmJiBwcm94eSkgdW5peF9wcm94eSA9IDE7CisjZW5kaWYgLyogRlRQX1BST1hZ ICovCisKKyAgICBpZiAoZnRwX2NtZGxpbiAmJiBmdHBfeGZlcm1vZGUgPT0gWE1PREVfTSkKKyAg ICAgIGZ0cF90eXAgPSBiaW5hcnk7ICAgICAgICAgICAgICAgICAvKiBUeXBlIGdpdmVuIG9uIGNv bW1hbmQgbGluZSAqLworICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IE90aGVyd2lzZSBzZXQgaXQgYXV0b21hdGljYWxseSAqLworICAgICAgZnRwX3R5cCA9IGFsaWtl ID8gRlRUX0JJTiA6IEZUVF9BU0M7CisgICAgY2hhbmdldHlwZShmdHBfdHlwLDApOyAgICAgICAg ICAgICAgLyogQ2hhbmdlIHRvIHRoaXMgdHlwZSAqLworICAgIGdfZnRwX3R5cCA9IGZ0cF90eXA7 ICAgICAgICAgICAgICAgIC8qIE1ha2UgaXQgdGhlIGdsb2JhbCB0eXBlICovCisgICAgaWYgKCFx dWlldCkKKyAgICAgIHByaW50ZigiRGVmYXVsdCB0cmFuc2ZlciBtb2RlIGlzICVzXG4iLAorICAg ICAgICAgICAgIGZ0cF90eXAgPyAiQklOQVJZIiA6ICJURVhUIChcIkFTQ0lJXCIpIgorICAgICAg ICAgICAgICk7CisgICAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCQkvKiBJbml0IHNlcnZlciBG RUFUdXJlIHRhYmxlICovCisgICAgICBzZnR0YWJbaV0gPSAwOworICAgIGlmICghbm9pbml0KSB7 CisgICAgICAgIG4gPSBmdHBjbWQoIk1PREUgUyIsTlVMTCwwLDAsMCk7IC8qIFdlIGFsd2F5cyBz ZW5kIGluIFN0cmVhbSBtb2RlICovCisjaWZkZWYgQ09NTUVOVAorICAgICAgICBpZiAobiAhPSBS RVBMWV9DT01QTEVURSkKKyAgICAgICAgICBwcmludGYoIldBUk5JTkc6IFNlcnZlciBkb2VzIG5v dCBhY2NlcHQgTU9ERSBTKFRSRUFNKVxuIik7CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAg ICBuID0gZnRwY21kKCJTVFJVIEYiLE5VTEwsMCwwLDApOyAvKiBTVFJVIEZpbGUgKG5vdCBSZWNv cmQgb3IgUGFnZSkgKi8KKyNpZmRlZiBDT01NRU5UCisgICAgICAgIGlmIChuICE9IFJFUExZX0NP TVBMRVRFKQorICAgICAgICAgIHByaW50ZigiV0FSTklORzogU2VydmVyIGRvZXMgbm90IGFjY2Vw dCBTVFJVIEYoSUxFKVxuIik7CisjZW5kaWYgLyogQ09NTUVOVCAqLworCWlmIChmZWF0b2spIHsK KwkgICAgbiA9IGZ0cGNtZCgiRkVBVCIsTlVMTCwwLDAsMCk7IC8qIEFzayBzZXJ2ZXIgYWJvdXQg ZmVhdHVyZXMgKi8KKwkgICAgaWYgKG4gPT0gUkVQTFlfQ09NUExFVEUpIHsKKwkJZGVidWcoRjEw MSwiZnRwX2luaXQgRkVBVCIsIiIsc2Z0dGFiWzBdKTsKKwkJaWYgKGRlYmxvZyB8fCBmdHBfZGVi KSB7CisJCSAgICBpbnQgaTsKKwkJICAgIGZvciAoaSA9IDE7IGkgPCAxNiAmJiBpIDwgbmZlYXR0 YWI7IGkrKykgeworCQkJZGVidWcoRjExMSwiZnRwX2luaXQgRkVBVCIsZmVhdHRhYltpXS5rd2Qs c2Z0dGFiW2ldKTsKKwkJCWlmIChmdHBfZGViKQorCQkJICBwcmludGYoIiAgU2VydmVyICVzICVz XG4iLAorCQkJCSBzZnR0YWJbaV0gPyAic3VwcG9ydHMiIDogImRvZXMgbm90IHN1cHBvcnQiLAor CQkJCSBmZWF0dGFiW2ldLmt3ZAorCQkJCSApOworCQkgICAgfQorCQkgICAgLyogRGVhbCB3aXRo IGRpc2FibGVkIE1MU1Qgb3B0cyBoZXJlIGlmIG5lY2Vzc2FyeSAqLworCQkgICAgLyogQnV0IHdo eSB3b3VsZCBpdCBiZT8gKi8KKwkJfQorCSAgICB9CisJfQorICAgIH0KK30KKworc3RhdGljIGlu dAorZnRwX2xvZ2luKGhvc3QpIGNoYXIgKiBob3N0OyB7ICAgICAgICAgIC8qIChhbHNvIGNhbGxl ZCBmcm9tIGNrdXVzeS5jKSAqLworICAgIHN0YXRpYyBjaGFyIGZ0cHBhc3NbUEFTU0JVRlNJWl09 IiI7CisgICAgY2hhciB0bXBbUEFTU0JVRlNJWl07CisgICAgY2hhciAqdXNlciA9IE5VTEwsICpw YXNzID0gTlVMTCwgKmFjY3QgPSBOVUxMOworICAgIGludCBuLCBhZmxhZyA9IDA7CisgICAgZXh0 ZXJuIGNoYXIgdWlkYnVmW107CisgICAgZXh0ZXJuIGNoYXIgcHdidWZbXTsKKyAgICBleHRlcm4g aW50ICBwd2ZsZywgcHdjcnlwdDsKKworICAgIGRlYnVnKEYxMTEsImZ0cF9sb2dpbiIsZnRwX2xv Z25hbWUsZnRwX2xvZyk7CisKKyAgICBpZiAoIWNrc3RyY21wKGZ0cF9sb2duYW1lLCJhbm9ueW1v dXMiLC0xLDApKQorICAgICAgYW5vbnltb3VzID0gMTsKKyAgICBpZiAoIWNrc3RyY21wKGZ0cF9s b2duYW1lLCJmdHAiLC0xLDApKQorICAgICAgYW5vbnltb3VzID0gMTsKKworI2lmZGVmIEZUUF9T UlAKKyAgICBpZiAoYXV0aF90eXBlICYmICFzdHJjbXAoYXV0aF90eXBlLCAiU1JQIikpIHsKKyAg ICAgICAgdXNlciA9IHNycF91c2VyOworICAgICAgICBwYXNzID0gc3JwX3Bhc3M7CisgICAgICAg IGFjY3QgPSBzcnBfYWNjdDsKKyAgICB9IGVsc2UKKyNlbmRpZiAvKiBGVFBfU1JQICovCisgICAg ICBpZiAoYW5vbnltb3VzKSB7CisgICAgICAgICAgdXNlciA9ICJhbm9ueW1vdXMiOworICAgICAg ICAgIGlmIChmdHBfdG1wKSB7CQkvKiBUaGV5IGdhdmUgYSBwYXNzd29yZCAqLworICAgICAgICAg ICAgICBwYXNzID0gZnRwX3RtcDsKKyAgICAgICAgICB9IGVsc2UgaWYgKGZ0cF9hcHcpIHsJCS8q IFNFVCBGVFAgQU5PTllNT1VTLVBBU1NXT1JEICovCisJICAgICAgcGFzcyA9IGZ0cF9hcHc7CisJ ICB9IGVsc2UgewkJCS8qIFN1cHBseSB1c2VyQGhvc3QgKi8KKwkgICAgICBja21ha21zZyh0bXAs UEFTU0JVRlNJWix3aG9hbWkoKSwiQCIsbXlob3N0LE5VTEwpOworCSAgICAgIHBhc3MgPSB0bXA7 CisgICAgICAgICAgfQorCSAgZGVidWcoRjExMCwiZnRwIGFub255bW91cyIscGFzcywwKTsKKyAg ICAgIH0gZWxzZSB7CisjaWZkZWYgVVNFX1JVU0VSUEFTUworICAgICAgICAgIGlmIChydXNlcnBh c3MoaG9zdCwgJnVzZXIsICZwYXNzLCAmYWNjdCkgPCAwKSB7CisgICAgICAgICAgICAgIGZ0cGNv ZGUgPSAtMTsKKyAgICAgICAgICAgICAgcmV0dXJuKDApOworICAgICAgICAgIH0KKyNlbmRpZiAv KiBVU0VfUlVTRVJQQVNTICovCisgICAgICAgICAgaWYgKGZ0cF9sb2duYW1lKSB7CisgICAgICAg ICAgICAgIHVzZXIgPSBmdHBfbG9nbmFtZTsKKyAgICAgICAgICAgICAgcGFzcyA9IGZ0cF90bXA7 CisgICAgICAgICAgfSBlbHNlIGlmICh1aWRidWZbMF0gJiYgKGZ0cF90bXAgfHwgcHdidWZbMF0g JiYgcHdmbGcpKSB7CisgICAgICAgICAgICAgIHVzZXIgPSB1aWRidWY7CisgICAgICAgICAgICAg IGlmIChmdHBfdG1wKSB7CisgICAgICAgICAgICAgICAgICBwYXNzID0gZnRwX3RtcDsKKyAgICAg ICAgICAgICAgfSBlbHNlIGlmIChwd2J1ZlswXSAmJiBwd2ZsZykgeworICAgICAgICAgICAgICAg ICAgY2tzdHJuY3B5KGZ0cHBhc3MscHdidWYsUEFTU0JVRlNJWik7CisjaWZkZWYgT1MyCisgICAg ICAgICAgICAgICAgICBpZiAoIHB3Y3J5cHQgKQorICAgICAgICAgICAgICAgICAgICAgIGNrX2Vu Y3J5cHQoKGNoYXIgKilmdHBwYXNzKTsKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAgICAgICAg ICAgIHBhc3MgPSBmdHBwYXNzOworICAgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAg ICAgIGFjY3QgPSBmdHBfYWNjOworICAgICAgICAgIHdoaWxlICh1c2VyID09IE5VTEwpIHsKKyAg ICAgICAgICAgICAgY2hhciAqbXluYW1lLCBwcm9tcHRbUFJPTVBUU0laXTsKKyAgICAgICAgICAg ICAgaW50IG9rOworCisgICAgICAgICAgICAgIG15bmFtZSA9IHdob2FtaSgpOworICAgICAgICAg ICAgICBpZiAobXluYW1lKQorICAgICAgICAgICAgICAgIGNrbWFreG1zZyhwcm9tcHQsUFJPTVBU U0laLCIgTmFtZSAoIixob3N0LCI6IixteW5hbWUsIik6ICIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgIE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwpOworICAgICAgICAgICAg ICBlbHNlCisgICAgICAgICAgICAgICAgY2ttYWttc2cocHJvbXB0LFBST01QVFNJWiwiIE5hbWUg KCIsaG9zdCwiKTogIixOVUxMKTsKKyAgICAgICAgICAgICAgdG1wWzBdID0gJ1wwJzsKKyAgICAg ICAgICAgICAgCisgICAgICAgICAgICAgIG9rID0gdXFfdHh0KE5VTEwscHJvbXB0LDEsTlVMTCx0 bXAsUEFTU0JVRlNJWixOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICBERUZBVUxUX1VR X1RJTUVPVVQpOworICAgICAgICAgICAgICBpZiAoIW9rIHx8ICp0bXAgPT0gJ1wwJykKKyAgICAg ICAgICAgICAgICB1c2VyID0gbXluYW1lOworICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg ICAgICAgdXNlciA9IGJyc3RyaXAodG1wKTsKKyAgICAgICAgICB9CisgICAgICB9CisgICAgbiA9 IGZ0cGNtZCgiVVNFUiIsdXNlciwtMSwtMSxmdHBfdmJtKTsKKyAgICBpZiAobiA9PSBSRVBMWV9D T01QTEVURSkgeworICAgICAgICAvKiBkZXRlcm1pbmUgaWYgd2UgbmVlZCB0byBzZW5kIGEgZHVt bXkgcGFzc3dvcmQgKi8KKyAgICAgICAgaWYgKGZ0cGNtZCgiUFdEIixOVUxMLDAsMCwwKSAhPSBS RVBMWV9DT01QTEVURSkKKyAgICAgICAgICBmdHBjbWQoIlBBU1MgZHVtbXkiLE5VTEwsMCwwLDEp OworICAgIH0gZWxzZSBpZiAobiA9PSBSRVBMWV9DT05USU5VRSkgeworI2lmZGVmIENLX0VOQ1JZ UFRJT04KKyAgICAgICAgaW50IG9sZGZ0cF9jcGw7CisjZW5kaWYgLyogQ0tfRU5DUllQVElPTiAq LworCisgICAgICAgIGlmIChwYXNzID09IE5VTEwpIHsKKyAgICAgICAgICAgIGludCBvazsKKyAg ICAgICAgICAgIHNldGludCgpOworICAgICAgICAgICAgb2sgPSB1cV90eHQoTlVMTCwiIFBhc3N3 b3JkOiAiLDIsTlVMTCxmdHBwYXNzLFBBU1NCVUZTSVosTlVMTCwKKyAgICAgICAgICAgICAgICAg ICAgICAgIERFRkFVTFRfVVFfVElNRU9VVCk7CisgICAgICAgICAgICBpZiAob2spCisgICAgICAg ICAgICAgICAgcGFzcyA9IGJyc3RyaXAoZnRwcGFzcyk7CisgICAgICAgIH0KKworI2lmZGVmIENL X0VOQ1JZUFRJT04KKyAgICAgICAgb2xkZnRwX2NwbCA9IGZ0cF9jcGw7CisgICAgICAgIGZ0cF9j cGwgPSBGUExfUFJWOworI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KKyAgICAgICAgbiA9IGZ0 cGNtZCgiUEFTUyIscGFzcywtMSwtMSwxKTsKKyAgICAgICAgaWYgKCFhbm9ueW1vdXMgJiYgcGFz cykgeworICAgICAgICAgICAgY2hhciAqIHAgPSBwYXNzOworICAgICAgICAgICAgd2hpbGUgKCpw KyspICoocC0xKSA9IE5VTDsKKyAgICAgICAgICAgIG1ha2VzdHIoJmZ0cF90bXAsTlVMTCk7Cisg ICAgICAgIH0KKyNpZmRlZiBDS19FTkNSWVBUSU9OCisgICAgICAgIC8qIGxldmVsIG1heSBoYXZl IGNoYW5nZWQgKi8KKyAgICAgICAgaWYgKGZ0cF9jcGwgPT0gRlBMX1BSVikKKyAgICAgICAgICBm dHBfY3BsID0gb2xkZnRwX2NwbDsKKyNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCisgICAgfQor ICAgIGlmIChuID09IFJFUExZX0NPTlRJTlVFKSB7CisgICAgICAgIGFmbGFnKys7CisgICAgICAg IGlmIChhY2N0ID09IE5VTEwpIHsKKyAgICAgICAgICAgIHN0YXRpYyBjaGFyIGZ0cGFjY3RbODBd OworICAgICAgICAgICAgaW50IG9rOworICAgICAgICAgICAgc2V0aW50KCk7CisgICAgICAgICAg ICBvayA9IHVxX3R4dChOVUxMLCIgQWNjb3VudDogIiwyLE5VTEwsZnRwYWNjdCw4MCxOVUxMLAor ICAgICAgICAgICAgICAgICAgICAgICAgREVGQVVMVF9VUV9USU1FT1VUKTsKKyAgICAgICAgICAg IGlmIChvaykKKyAgICAgICAgICAgICAgICBhY2N0ID0gYnJzdHJpcChmdHBhY2N0KTsKKyAgICAg ICAgfQorICAgICAgICBuID0gZnRwY21kKCJBQ0NUIixhY2N0LC0xLC0xLGZ0cF92Ym0pOworICAg IH0KKyAgICBpZiAobiAhPSBSRVBMWV9DT01QTEVURSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVy ciwgIkZUUCBsb2dpbiBmYWlsZWQuXG4iKTsKKyAgICAgICAgaWYgKGhhdmV1cmwpCisgICAgICAg ICAgZG9leGl0KEJBRF9FWElULC0xKTsKKyAgICAgICAgcmV0dXJuKDApOworICAgIH0KKyAgICBp ZiAoIWFmbGFnICYmIGFjY3QgIT0gTlVMTCkgeworICAgICAgICBmdHBjbWQoIkFDQ1QiLGFjY3Qs LTEsLTEsZnRwX3ZibSk7CisgICAgfQorICAgIG1ha2VzdHIoJmZ0cF9sb2duYW1lLHVzZXIpOwor ICAgIGxvZ2dlZGluID0gMTsKKyNpZmRlZiBMT0NVUworICAgIC8qIFVucHJlZml4ZWQgZmlsZSBt YW5hZ2VtZW50IGNvbW1hbmRzIGdvIHRvIHNlcnZlciAqLworICAgIGlmIChhdXRvbG9jdXMgJiYg IWZ0cF9jbWRsaW4pIHsKKwlzZXRsb2N1cygwLDEpOworICAgIH0KKyNlbmRpZiAvKiBMT0NVUyAq LworICAgIGZ0cF9pbml0KCk7CisKKyAgICBpZiAoYW5vbnltb3VzICYmICFxdWlldCkgeworICAg ICAgICBwcmludGYoIiBMb2dnZWQgaW4gYXMgYW5vbnltb3VzICglcylcbiIscGFzcyk7CisgICAg ICAgIG1lbXNldChwYXNzLCAwLCBzdHJsZW4ocGFzcykpOworICAgIH0KKyAgICBpZiAoZnRwX3Jk aXIpIHsKKyAgICAgICAgaWYgKGRvZnRwY3dkKGZ0cF9yZGlyLC0xKSA8IDEpCisgICAgICAgICAg ZG9leGl0KEJBRF9FWElULC0xKTsKKyAgICB9CisKKyNpZmRlZiBGVFBfUFJPWFkKKyAgICBpZiAo cHJveHkpCisgICAgICByZXR1cm4oMSk7CisjZW5kaWYgLyogRlRQX1BST1hZICovCisgICAgcmV0 dXJuKDEpOworfQorCitzdGF0aWMgaW50CitmdHBfcmVzZXQoKSB7CisgICAgaW50IHJjOworI2lm ZGVmIEJTRFNFTEVDVAorICAgIGludCBuZm5kID0gMTsKKyAgICBmZF9zZXQgbWFzazsKKyAgICBG RF9aRVJPKCZtYXNrKTsKKyAgICB3aGlsZSAobmZuZCA+IDApIHsKKyAgICAgICAgRkRfU0VUKGNz b2NrZXQsICZtYXNrKTsKKyAgICAgICAgaWYgKChuZm5kID0gZW1wdHkoJm1hc2ssMCkpIDwgMCkg eworICAgICAgICAgICAgcGVycm9yKCJyZXNldCIpOworICAgICAgICAgICAgZnRwY29kZSA9IC0x OworICAgICAgICAgICAgbG9zdHBlZXIoKTsKKyAgICAgICAgICAgIHJldHVybigwKTsKKyAgICAg ICAgfSBlbHNlIGlmIChuZm5kKSB7CisgICAgICAgICAgICBnZXRyZXBseSgwLC0xLC0xLGZ0cF92 Ym0sMCk7CisgICAgICAgIH0KKyAgICB9CisjZWxzZSAvKiBCU0RTRUxFQ1QgKi8KKyNpZmRlZiBJ Qk1TRUxFQ1QKKyAgICBpbnQgbmZuZCA9IDE7CisgICAgd2hpbGUgKG5mbmQgPiAwKSB7CisgICAg ICAgIGlmICgobmZuZCA9IGVtcHR5KCZjc29ja2V0LDEsMCkpIDwgMCkgeworICAgICAgICAgICAg cGVycm9yKCJyZXNldCIpOworICAgICAgICAgICAgZnRwY29kZSA9IC0xOworICAgICAgICAgICAg bG9zdHBlZXIoKTsKKyAgICAgICAgICAgIHJldHVybigwKTsKKyAgICAgICAgfSBlbHNlIGlmIChu Zm5kKSB7CisgICAgICAgICAgICBnZXRyZXBseSgwLC0xLC0xLGZ0cF92Ym0sMCk7CisgICAgICAg IH0KKyAgICB9CisjZW5kaWYgLyogSUJNU0VMRUNUICovCisjZW5kaWYgLyogQlNEU0VMRUNUICov CisgICAgcmMgPSAoZnRwY21kKCJSRUlOIixOVUxMLDAsMCxmdHBfdmJtKSA9PSBSRVBMWV9DT01Q TEVURSk7CisgICAgaWYgKHJjID4gMCkKKyAgICAgIGxvZ2dlZGluID0gMDsKKyAgICByZXR1cm4o cmMpOworfQorCitzdGF0aWMgaW50CitmdHBfcmVuYW1lKGZyb20sIHRvKSBjaGFyICogZnJvbSwg KiB0bzsgeworICAgIGludCBsY3MgPSAtMSwgcmNzID0gLTE7CisjaWZuZGVmIE5PQ1NFVFMKKyAg ICBpZiAoZnRwX3hsYSkgeworICAgICAgICBsY3MgPSBmdHBfY3NsOworICAgICAgICBpZiAobGNz IDwgMCkgbGNzID0gZmNoYXJzZXQ7CisgICAgICAgIHJjcyA9IGZ0cF9jc3g7CisgICAgICAgIGlm IChyY3MgPCAwKSByY3MgPSBmdHBfY3NyOworICAgIH0KKyNlbmRpZiAvKiBOT0NTRVRTICovCisg ICAgaWYgKGZ0cGNtZCgiUk5GUiIsZnJvbSxsY3MscmNzLGZ0cF92Ym0pID09IFJFUExZX0NPTlRJ TlVFKSB7CisgICAgICAgIHJldHVybihmdHBjbWQoIlJOVE8iLHRvLGxjcyxyY3MsZnRwX3ZibSkg PT0gUkVQTFlfQ09NUExFVEUpOworICAgIH0KKyAgICByZXR1cm4oMCk7ICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBGYWlsdXJlICovCit9CisKK3N0YXRpYyBpbnQKK2Z0cF91bWFzayhtYXNr KSBjaGFyICogbWFzazsgeworICAgIGludCByYzsKKyAgICByYyA9IChmdHBjbWQoIlNJVEUgVU1B U0siLG1hc2ssLTEsLTEsMSkgPT0gUkVQTFlfQ09NUExFVEUpOworICAgIHJldHVybihyYyk7Cit9 CisKK3N0YXRpYyBpbnQKK2Z0cF91c2VyKHVzZXIscGFzcyxhY2N0KSBjaGFyICogdXNlciwgKiBw YXNzLCAqIGFjY3Q7IHsKKyAgICBpbnQgbiA9IDAsIGFmbGFnID0gMDsKKyAgICBjaGFyIHB3ZFtQ V0RTSVpdOworCisgICAgaWYgKCFhdXRoX3R5cGUgJiYgZnRwX2F1dCkgeworI2lmZGVmIEZUUF9T UlAKKyAgICAgICAgaWYgKGNrX3NycF9pc19pbnN0YWxsZWQoKSkgeworICAgICAgICAgICAgaWYg KHNycF9mdHBfYXV0aCggTlVMTCwgdXNlciwgcGFzcykpIHsKKyAgICAgICAgICAgICAgICBtYWtl c3RyKCZwYXNzLHNycF9wYXNzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorI2VuZGlmIC8q IEZUUF9TUlAgKi8KKyAgICB9CisgICAgbiA9IGZ0cGNtZCgiVVNFUiIsdXNlciwtMSwtMSxmdHBf dmJtKTsKKyAgICBpZiAobiA9PSBSRVBMWV9DT01QTEVURSkKKyAgICAgIG4gPSBmdHBjbWQoIlBB U1MgZHVtbXkiLE5VTEwsMCwwLDEpOworICAgIGVsc2UgaWYgKG4gPT0gUkVQTFlfQ09OVElOVUUp IHsKKyNpZmRlZiBDS19FTkNSWVBUSU9OCisgICAgICAgIGludCBvbGRmdHBfY3BsOworI2VuZGlm IC8qIENLX0VOQ1JZUFRJT04gKi8KKyAgICAgICAgaWYgKHBhc3MgPT0gTlVMTCB8fCAhcGFzc1sw XSkgeworICAgICAgICAgICAgaW50IG9rOworICAgICAgICAgICAgcHdkWzBdID0gJ1wwJzsKKyAg ICAgICAgICAgIHNldGludCgpOworICAgICAgICAgICAgb2sgPSB1cV90eHQoTlVMTCwiIFBhc3N3 b3JkOiAiLDIsTlVMTCxwd2QsUFdEU0laLE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICBE RUZBVUxUX1VRX1RJTUVPVVQpOworICAgICAgICAgICAgaWYgKG9rKQorICAgICAgICAgICAgICAg IHBhc3MgPSBicnN0cmlwKHB3ZCk7CisgICAgICAgIH0KKworI2lmZGVmIENLX0VOQ1JZUFRJT04K KyAgICAgICAgaWYgKChvbGRmdHBfY3BsID0gZnRwX2NwbCkgPT0gUFJPVF9TKQorICAgICAgICAg IGZ0cF9jcGwgPSBQUk9UX1A7CisjZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLworICAgICAgICBu ID0gZnRwY21kKCJQQVNTIixwYXNzLC0xLC0xLDEpOworICAgICAgICBtZW1zZXQocGFzcywgMCwg c3RybGVuKHBhc3MpKTsKKyNpZmRlZiBDS19FTkNSWVBUSU9OCisgICAgICAgIC8qIGxldmVsIG1h eSBoYXZlIGNoYW5nZWQgKi8KKyAgICAgICAgaWYgKGZ0cF9jcGwgPT0gUFJPVF9QKQorICAgICAg ICAgIGZ0cF9jcGwgPSBvbGRmdHBfY3BsOworI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KKyAg ICB9CisgICAgaWYgKG4gPT0gUkVQTFlfQ09OVElOVUUpIHsKKyAgICAgICAgaWYgKGFjY3QgPT0g TlVMTCB8fCAhYWNjdFswXSkgeworICAgICAgICAgICAgaW50IG9rOworICAgICAgICAgICAgcHdk WzBdID0gJ1wwJzsKKyAgICAgICAgICAgIHNldGludCgpOworICAgICAgICAgICAgb2sgPSB1cV90 eHQoTlVMTCwiIEFjY291bnQ6ICIsMixOVUxMLHB3ZCxQV0RTSVosTlVMTCwKKyAgICAgICAgICAg ICAgICAgICAgICAgIERFRkFVTFRfVVFfVElNRU9VVCk7CisgICAgICAgICAgICBpZiAob2spCisg ICAgICAgICAgICAgICAgYWNjdCA9IHB3ZDsKKyAgICAgICAgfQorICAgICAgICBuID0gZnRwY21k KCJBQ0NUIixhY2N0LC0xLC0xLGZ0cF92Ym0pOworICAgICAgICBhZmxhZysrOworICAgIH0KKyAg ICBpZiAobiAhPSBSRVBMWV9DT01QTEVURSkgeworICAgICAgICBwcmludGYoIkxvZ2luIGZhaWxl ZC5cbiIpOworICAgICAgICByZXR1cm4oMCk7CisgICAgfQorICAgIGlmICghYWZsYWcgJiYgYWNj dCAhPSBOVUxMICYmIGFjY3RbMF0pIHsKKyAgICAgICAgbiA9IGZ0cGNtZCgiQUNDVCIsYWNjdCwt MSwtMSxmdHBfdmJtKTsKKyAgICB9CisgICAgaWYgKG4gPT0gUkVQTFlfQ09NUExFVEUpIHsKKyAg ICAgICAgbWFrZXN0cigmZnRwX2xvZ25hbWUsdXNlcik7CisgICAgICAgIGxvZ2dlZGluID0gMTsK KyAgICAgICAgZnRwX2luaXQoKTsKKyAgICAgICAgcmV0dXJuKDEpOworICAgIH0KKyAgICByZXR1 cm4oMCk7Cit9CisKK2NoYXIgKgorZnRwX2F1dGh0eXBlKCkgeworICAgIGlmICghY29ubmVjdGVk KQorICAgICAgcmV0dXJuKCJOVUxMIik7CisgICAgcmV0dXJuKGF1dGhfdHlwZSA/IGF1dGhfdHlw ZSA6ICJOVUxMIik7Cit9CisKK2NoYXIgKgorZnRwX2NwbF9tb2RlKCkgeworICAgIHN3aXRjaCAo ZnRwX2NwbCkgeworICAgICAgY2FzZSBGUExfQ0xSOgorICAgICAgICByZXR1cm4oImNsZWFyIik7 CisgICAgICBjYXNlIEZQTF9TQUY6CisgICAgICAgIHJldHVybigic2FmZSIpOworICAgICAgY2Fz ZSBGUExfUFJWOgorICAgICAgICByZXR1cm4oInByaXZhdGUiKTsKKyAgICAgIGNhc2UgRlBMX0NP TjoKKyAgICAgICAgcmV0dXJuKCJjb25maWRlbnRpYWwiKTsKKyAgICAgIGRlZmF1bHQ6CisgICAg ICAgIHJldHVybigiKGVycm9yKSIpOworICAgIH0KK30KKworY2hhciAqCitmdHBfZHBsX21vZGUo KSB7CisgICAgc3dpdGNoIChmdHBfZHBsKSB7CisgICAgICBjYXNlIEZQTF9DTFI6CisgICAgICAg IHJldHVybigiY2xlYXIiKTsKKyAgICAgIGNhc2UgRlBMX1NBRjoKKyAgICAgICAgcmV0dXJuKCJz YWZlIik7CisgICAgICBjYXNlIEZQTF9QUlY6CisgICAgICAgIHJldHVybigicHJpdmF0ZSIpOwor ICAgICAgY2FzZSBGUExfQ09OOgorICAgICAgICByZXR1cm4oImNvbmZpZGVudGlhbCIpOworICAg ICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuKCIoZXJyb3IpIik7CisgICAgfQorfQorCisKKy8q IHJlbW90ZV9maWxlcygpICovCisvKgorICAgUmV0dXJucyBuZXh0IHJlbW90ZSBmaWxlbmFtZSBv biBzdWNjZXNzOworICAgTlVMTCBvbiBlcnJvciBvciBubyBtb3JlIGZpbGVzIHdpdGggZ2xvYmFs IHJmcmMgc2V0IHRvOgorICAgICAtMTogQmFkIGFyZ3VtZW50CisgICAgIC0yOiBTZXJ2ZXIgZXJy b3IgcmVzcG9uc2UgdG8gTkxTVCwgZS5nLiBmaWxlIG5vdCBmb3VuZAorICAgICAtMzogTm8gbW9y ZSBmaWxlcworICAgICAtOTogSW50ZXJuYWwgZXJyb3IKKyovCisjZGVmaW5lIEZUUE5BTUJVRkxF TiBDS01BWFBBVEgrMTAyNAorCisvKiBDaGVjazogY2ttYXhmaWxlcyBDS01BWE9QRU4gKi8KKwor I2RlZmluZSBNTFNERVBUSCAxMjgJCQkvKiBTdGFjayBvZiBvcGVuIHRlbXAgZmlsZXMgKi8KK3N0 YXRpYyBpbnQgbWxzZGVwdGggPSAwOwkJLyogVGVtcCBmaWxlIHN0YWNrIGRlcHRoICovCitzdGF0 aWMgRklMRSAqIHRtcGZpbHB0cltNTFNERVBUSCsxXSA9IHsgTlVMTCwgTlVMTCB9OyAvKiBUZW1w IGZpbGUgcG9pbnRlcnMgKi8KK3N0YXRpYyBjaGFyICogdG1wZmlsbmFtW01MU0RFUFRIKzFdID0g eyBOVUxMLCBOVUxMIH07IC8qIFRlbXAgZmlsZSBuYW1lcyAqLworCitzdGF0aWMgVk9JRAorbWxz cmVzZXQoKSB7CQkJCS8qIFJlc2V0IE1HRVQgdGVtcC1maWxlIHN0YWNrICovCisgICAgaW50IGk7 CisgICAgZm9yIChpID0gMDsgaSA8PSBtbHNkZXB0aDsgaSsrKSB7CisJaWYgKHRtcGZpbHB0cltp XSkgeworCSAgICBmY2xvc2UodG1wZmlscHRyW2ldKTsKKwkgICAgdG1wZmlscHRyW2ldID0gTlVM TDsKKwkgICAgaWYgKHRtcGZpbG5hbVtpXSkgeworI2lmZGVmIE9TMgorCQl1bmxpbmsodG1wZmls bmFtW2ldKTsKKyNlbmRpZiAvKiBPUzIgKi8KKwkJZnJlZSh0bXBmaWxuYW1baV0pOworCSAgICB9 CisJfQorICAgIH0KKyAgICBtbHNkZXB0aCA9IDA7Cit9CisKK3N0YXRpYyBDSEFSICoKKyNpZmRl ZiBDS19BTlNJQworcmVtb3RlX2ZpbGVzKGludCBuZXdfcXVlcnksIENIQVIgKiBhcmcsIENIQVIg KiBwYXR0ZXJuLCBpbnQgcHJveHlfc3dpdGNoKQorI2Vsc2UgLyogQ0tfQU5TSUMgKi8KK3JlbW90 ZV9maWxlcyhuZXdfcXVlcnksIGFyZywgcGF0dGVybiwgcHJveHlfc3dpdGNoKQorICAgIGludCBu ZXdfcXVlcnk7CisgICAgQ0hBUiAqIGFyZzsJCQkJLyogVGhhdCB3ZSBzZW5kIHRvIHRoZSBzZXJ2 ZXIgKi8KKyAgICBDSEFSICogcGF0dGVybjsJCQkvKiBUaGF0IHdlIHVzZSBsb2NhbGx5ICovCisg ICAgaW50IHByb3h5X3N3aXRjaDsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogcmVtb3RlX2Zp bGVzICovIHsKKyAgICBzdGF0aWMgQ0hBUiBidWZbRlRQTkFNQlVGTEVOXTsKKyAgICBDSEFSICpj cCwgKndoaWNoYXJnOworICAgIGNoYXIgKiBjZHRvID0gTlVMTDsKKyAgICBjaGFyICogcDsKKyAg ICBpbnQgaSwgeCwgZm9yY2VkID0gMDsKKyAgICBpbnQgbGNzID0gMCwgcmNzID0gMCwgeGxhdGUg PSAwOworCisgICAgZGVidWcoRjEwMSwiZnRwIHJlbW90ZV9maWxlcyBuZXdfcXVlcnkiLCIiLG5l d19xdWVyeSk7CisgICAgZGVidWcoRjExMCwiZnRwIHJlbW90ZV9maWxlcyBhcmciLGFyZywwKTsK KyAgICBkZWJ1ZyhGMTEwLCJmdHAgcmVtb3RlX2ZpbGVzIHBhdHRlcm4iLHBhdHRlcm4sMCk7CisK KyAgICByZnJjID0gLTE7CisgICAgaWYgKHBhdHRlcm4pCQkJLyogVHJlYXQgZW1wdHkgcGF0dGVy biBzYW1lIGFzIE5VTEwgKi8KKyAgICAgIGlmICghKnBhdHRlcm4pCisJcGF0dGVybiA9IE5VTEw7 CisgICAgaWYgKGFyZykJCQkJLyogRGl0dG8gZm9yIGFyZyAqLworICAgICAgaWYgKCEqYXJnKQor CWFyZyA9IE5VTEw7CisKKyAgYWdhaW46CisKKyAgICBpZiAobmV3X3F1ZXJ5KSB7CisgICAgICAg IGlmICh0bXBmaWxwdHJbbWxzZGVwdGhdKSB7CisgICAgICAgICAgICBmY2xvc2UodG1wZmlscHRy W21sc2RlcHRoXSk7CisgICAgICAgICAgICB0bXBmaWxwdHJbbWxzZGVwdGhdID0gTlVMTDsKKyNp ZmRlZiBPUzIKKyAgICAgICAgICAgIGlmICghZnRwX2RlYiAmJiAhZGVibG9nKQorICAgICAgICAg ICAgICB1bmxpbmsodG1wZmlsbmFtW21sc2RlcHRoXSk7CisjZW5kaWYgLyogT1MyICovCisgICAg ICAgIH0KKyAgICB9CisgICAgaWYgKHRtcGZpbHB0clttbHNkZXB0aF0gPT0gTlVMTCkgeworICAg ICAgICBleHRlcm4gY2hhciAqIHRlbXBkaXI7CisgICAgICAgIGNoYXIgKiBwOworICAgICAgICBk ZWJ1ZyhGMTEwLCJmdHAgcmVtb3RlX2ZpbGVzIHRlbXBkaXIiLHRlbXBkaXIsMCk7CisgICAgICAg IGlmICh0ZW1wZGlyKSB7CisgICAgICAgICAgICBwID0gdGVtcGRpcjsKKyAgICAgICAgfSBlbHNl IHsKKyNpZmRlZiBPUzIKKyNpZmRlZiBOVAorICAgICAgICAgICAgcCA9IGdldGVudigiSzk1VE1Q Iik7CisjZWxzZQorICAgICAgICAgICAgcCA9IGdldGVudigiSzJUTVAiKTsKKyNlbmRpZiAvKiBO VCAqLworICAgICAgICAgICAgaWYgKCFwKQorI2VuZGlmIC8qIE9TMiAqLworICAgICAgICAgICAg ICBwID0gZ2V0ZW52KCJDS19UTVAiKTsKKyAgICAgICAgICAgIGlmICghcCkKKyAgICAgICAgICAg ICAgcCA9IGdldGVudigiVE1QRElSIik7CisgICAgICAgICAgICBpZiAoIXApIHAgPSBnZXRlbnYo IlRFTVAiKTsKKyAgICAgICAgICAgIGlmICghcCkgcCA9IGdldGVudigiVE1QIik7CisjaWZkZWYg T1MyT1JVTklYCisgICAgICAgICAgICBpZiAocCkgeworICAgICAgICAgICAgICAgIGludCBsZW4g PSBzdHJsZW4ocCk7CisgICAgICAgICAgICAgICAgaWYgKHBbbGVuLTFdICE9ICcvJworI2lmZGVm IE9TMgorICAgICAgICAgICAgICAgICAgICAmJiBwW2xlbi0xXSAhPSAnXFwnCisjZW5kaWYgLyog T1MyICovCisgICAgICAgICAgICAgICAgICAgICApIHsKKyAgICAgICAgICAgICAgICAgICAgc3Rh dGljIGNoYXIgZm9vW0NLTUFYUEFUSF07CisgICAgICAgICAgICAgICAgICAgIGNrc3RybmNweShm b28scCxDS01BWFBBVEgpOworICAgICAgICAgICAgICAgICAgICBja3N0cm5jYXQoZm9vLCIvIixD S01BWFBBVEgpOworICAgICAgICAgICAgICAgICAgICBwID0gZm9vOworICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgIH0gZWxzZQorI2Vsc2UgLyogT1MyT1JVTklYICovCisgICAgICAgICAg ICBpZiAoIXApCisjZW5kaWYgLyogT1MyT1JVTklYICovCisjaWZkZWYgVU5JWCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogU3lzdGVtcyB0aGF0IGhhdmUgYSBzdGFuZGFyZCAqLworICAg ICAgICAgICAgICAgIHAgPSAiL3RtcC8iOyAgICAgICAgICAgIC8qIHRlbXBvcmFyeSBkaXJlY3Rv cnkuLi4gKi8KKyNlbHNlCisjaWZkZWYgZGF0YWdlbmVyYWwKKyAgICAgICAgICAgIHAgPSAiOlRN UDoiOworI2Vsc2UKKyAgICAgICAgICAgIHAgPSAiIjsKKyNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAq LworI2VuZGlmIC8qIFVOSVggKi8KKyAgICAgICAgfQorICAgICAgICBkZWJ1ZyhGMTEwLCJmdHAg cmVtb3RlX2ZpbGVzIHAiLHAsMCk7CisKKwkvKiBHZXQgdGVtcCBmaWxlICovCisKKwlpZiAoKHRt cGZpbG5hbVttbHNkZXB0aF0gPSAoY2hhciAqKW1hbGxvYyhDS01BWFBBVEgrMSkpKSB7CisJICAg IGNrbWFrbXNnKChjaGFyICopdG1wZmlsbmFtW21sc2RlcHRoXSwKKwkJICAgICBDS01BWFBBVEgr MSxwLCJja1hYWFhYWCIsTlVMTCxOVUxMKTsKKwl9IGVsc2UgeworCSAgICBwcmludGYoIj9NYWxs b2MgZmFpbHVyZTogcmVtb3RlX2ZpbGVzKClcbiIpOworCSAgICByZXR1cm4oTlVMTCk7CisJfQor CisjaWZkZWYgTlQKKwl7CisJICAgIGNoYXIgKiB0bXBmaWwgPSBta3RlbXAoKGNoYXIgKil0bXBm aWxuYW1bbWxzZGVwdGhdKTsKKwkgICAgaWYgKCB0bXBmaWwgKQorCQlja3N0cm5jcHkodG1wZmls bmFtW21sc2RlcHRoXSx0bXBmaWwsQ0tNQVhQQVRIKzEpOworCX0KKyNlbHNlIC8qIE5UICovCisj aWZkZWYgTUtURU1QCisjaWZkZWYgTUtTVEVNUAorCXggPSBta3N0ZW1wKChjaGFyICopdG1wZmls bmFtW21sc2RlcHRoXSk7CisJaWYgKHggPiAtMSkgY2xvc2UoeCk7CQkvKiBXZSBqdXN0IHdhbnQg dGhlIG5hbWUuICovCisjZWxzZQorICAgICAgICBta3RlbXAoKGNoYXIgKil0bXBmaWxuYW1bbWxz ZGVwdGhdKTsKKyNlbmRpZiAvKiBNS1NURU1QICovCisgICAgICAgIC8qIGlmIG5vIG1rdG1wbmFt KCkgdGhlIG5hbWUgd2lsbCBqdXN0IGJlICJja1hYWFhYWCIuLi4gKi8KKyNlbmRpZiAvKiBNS1RF TVAgKi8KKyNlbmRpZiAvKiBOVCAqLworCisJZGVidWcoRjExMSwiZnRwIHJlbW90ZV9maWxlcyB0 bXBmaWxuYW1bbWxzZGVwdGhdIiwKKwkgICAgICB0bXBmaWxuYW1bbWxzZGVwdGhdLG1sc2RlcHRo KTsKKworI2lmZGVmIEZUUF9QUk9YWQorICAgICAgICBpZiAocHJveHlfc3dpdGNoKSB7CisgICAg ICAgICAgICBwc3dpdGNoKCFwcm94eSk7CisgICAgICAgIH0KKyNlbmRpZiAvKiBGVFBfUFJPWFkg Ki8KKworICAgICAgICBkZWJ1ZyhGMTAxLCJmdHAgcmVtb3RlX2ZpbGVzIGZ0cF94bGEiLCIiLGZ0 cF94bGEpOworICAgICAgICBkZWJ1ZyhGMTAxLCJmdHAgcmVtb3RlX2ZpbGVzIGZ0cF9jc2wiLCIi LGZ0cF9jc2wpOworICAgICAgICBkZWJ1ZyhGMTAxLCJmdHAgcmVtb3RlX2ZpbGVzIGZ0cF9jc3Ii LCIiLGZ0cF9jc3IpOworCisjaWZuZGVmIE5PQ1NFVFMKKyAgICAgICAgeGxhdGUgPSBmdHBfeGxh OyAgICAgICAgICAgICAgICAvKiBTRVQgRlRQIENIQVJBQ1RFUi1TRVQtVFJBTlNMQVRJT04gKi8K KyAgICAgICAgaWYgKHhsYXRlKSB7ICAgICAgICAgICAgICAgICAgICAvKiBPTj8gKi8KKyAgICAg ICAgICAgIGxjcyA9IGZ0cF9jc2w7ICAgICAgICAgICAgICAvKiBMb2NhbCBjaGFyc2V0ICovCisg ICAgICAgICAgICBpZiAobGNzIDwgMCkgbGNzID0gZmNoYXJzZXQ7CisgICAgICAgICAgICBpZiAo bGNzIDwgMCkgeGxhdGUgPSAwOworICAgICAgICB9CisgICAgICAgIGlmICh4bGF0ZSkgeyAgICAg ICAgICAgICAgICAgICAgLyogU3RpbGwgT04/ICovCisgICAgICAgICAgICByY3MgPSBmdHBfY3N4 OyAgICAgICAgICAgICAgLyogUmVtb3RlIChTZXJ2ZXIpIGNoYXJzZXQgKi8KKyAgICAgICAgICAg IGlmIChyY3MgPCAwKSByY3MgPSBmdHBfY3NyOworICAgICAgICAgICAgaWYgKHJjcyA8IDApIHhs YXRlID0gMDsKKyAgICAgICAgfQorI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKworCWZvcmNlZCA9IG1n ZXRmb3JjZWQ7CQkvKiBNR0VUIG1ldGhvZCBmb3JjZWQ/ICovCisJaWYgKCFmb3JjZWQgfHwgIW1n ZXRtZXRob2QpCS8qIE5vdCBmb3JjZWQuLi4gKi8KKwkgIG1nZXRtZXRob2QgPSAoc2Z0dGFiWzBd ICYmIHNmdHRhYltTRlRfTUxTVF0pID8gLyogc28gcGljayBvbmUgKi8KKwkgICAgICBTTkRfTUxT IDoKKwkgICAgICBTTkRfTkxTOyAKKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIAorICBVc2VyJ3MgQ29tbWFuZDogICAgICAgICAgICAgICAgIFJlc3VsdDoKKyAg ICBtZ2V0IC9ubHN0ICAgICAgICAgICAgICAgICAgICAgTkxTVCAoTlVMTCkKKyAgICBtZ2V0IC9u bHN0IGZvbyAgICAgICAgICAgICAgICAgTkxTVCBmb28KKyAgICBtZ2V0IC9ubHN0ICoudHh0ICAg ICAgICAgICAgICAgTkxTVCAqLnR4dCAKKyAgICBtZ2V0IC9ubHN0IC9tYXRjaDoqLnR4dCAgICAg ICAgTkxTVCAoTlVMTCkKKyAgICBtZ2V0IC9ubHN0IC9tYXRjaDoqLnR4dCAgZm9vICAgTkxTVCBm b28gICAKKyAgICBtZ2V0IC9tbHNkICAgICAgICAgICAgICAgICAgICAgTUxTRCAoTlVMTCkKKyAg ICBtZ2V0IC9tbHNkIGZvbyAgICAgICAgICAgICAgICAgTUxTRCBmb28KKyAgICBtZ2V0IC9tbHNk ICoudHh0ICAgICAgICAgICAgICAgTUxTRCAoTlVMTCkKKyAgICBtZ2V0IC9tbHNkIC9tYXRjaDoq LnR4dCAgICAgICAgTUxTRCAoTlVMTCkKKyAgICBtZ2V0IC9tbHNkIC9tYXRjaDoqLnR4dCAgZm9v ICAgTUxTRCBmb28KKyovCisJeCA9IC0xOworCXdoaWxlICh4IDwgMCkgeworCSAgICBpZiAocGF0 dGVybikgewkJLyogRG9uJ3Qgc2ltcGxpZnkgdGhpcyEgKi8KKwkJd2hpY2hhcmcgPSBhcmc7CisJ ICAgIH0gZWxzZSBpZiAobWdldG1ldGhvZCA9PSBTTkRfTUxTKSB7CisJCWlmIChhcmcpCisJCSAg d2hpY2hhcmcgPSBpc3dpbGQoKGNoYXIgKilhcmcpID8gTlVMTCA6IGFyZzsKKwkJZWxzZQorCQkg IHdoaWNoYXJnID0gTlVMTDsKKwkgICAgfSBlbHNlIHsKKwkJd2hpY2hhcmcgPSBhcmc7CisJICAg IH0KKwkgICAgZGVidWcoRjExMCwiZnRwIHJlbW90ZV9maWxlcyBtZ2V0bWV0aG9kIiwKKwkJICBt Z2V0bWV0aG9kID09IFNORF9NTFMgPyAiTUxTRCIgOiAiTkxTVCIsIDApOworCSAgICBkZWJ1ZyhG MTEwLCJmdHAgcmVtb3RlX2ZpbGVzIHdoaWNoYXJnIix3aGljaGFyZywwKTsKKworCSAgICB4ID0g cmVjdnJlcXVlc3QoKG1nZXRtZXRob2QgPT0gU05EX01MUykgPyAiTUxTRCIgOiAiTkxTVCIsCisJ CQkgICAgKGNoYXIgKil0bXBmaWxuYW1bbWxzZGVwdGhdLAorCQkJICAgIChjaGFyICopd2hpY2hh cmcsCisJCQkgICAgIndiIiwKKwkJCSAgICAwLAorCQkJICAgIDAsCisJCQkgICAgTlVMTCwKKwkJ CSAgICB4bGF0ZSwKKwkJCSAgICBsY3MsCisJCQkgICAgcmNzCisJCQkgICAgKTsKKwkgICAgaWYg KHggPCAwKSB7CQkvKiBDaG9zZW4gbWV0aG9kIHdhc24ndCBhY2NlcHRlZCAqLworCQlpZiAoZm9y Y2VkKSB7CisJCSAgICBpZiAoZnRwY29kZSA+IDUwMCAmJiBmdHBjb2RlIDwgNTA1ICYmICFxdWll dCkKKwkJICAgICAgcHJpbnRmKCI/JXM6IE5vdCBzdXBwb3J0ZWQgYnkgc2VydmVyXG4iLAorCQkJ ICAgICBtZ2V0bWV0aG9kID09IFNORF9NTFMgPyAiTUxTRCIgOiAiTkxTVCIKKwkJCSAgICAgKTsK KwkJICAgIHJmcmMgPSAtMjsJCS8qIEZhaWwgKi8KKwkJICAgIHJldHVybihOVUxMKTsKKwkJfQor CQkvKiBOb3QgZm9yY2VkIC0gaWYgTUxTRCBmYWlsZWQsIHRyeSBOTFNUICovCisJCWlmIChtZ2V0 bWV0aG9kID09IFNORF9NTFMpIHsgIC8qIFNlcnZlciBsaWVkIGFib3V0IE1MU1QgKi8KKwkJICAg IHNmdHRhYltTRlRfTUxTVF0gPSAwOyAgICAgLyogU28gZGlzYWJsZSBpdCAqLworCQkgICAgbWxz dG9rID0gMDsJCSAgICAgIC8qIGFuZCAqLworCQkgICAgbWdldG1ldGhvZCA9IFNORF9OTFM7ICAg ICAvKiB0cnkgTkxTVCAqLworCQkgICAgY29udGludWU7CisJCX0KKwkJcmZyYyA9IC0yOworCQly ZXR1cm4oTlVMTCk7CisJICAgIH0KKwl9CisjaWZkZWYgRlRQX1BST1hZCisgICAgICAgIGlmIChw cm94eV9zd2l0Y2gpIHsKKyAgICAgICAgICAgIHBzd2l0Y2goIXByb3h5KTsKKyAgICAgICAgfQor I2VuZGlmIC8qIEZUUF9QUk9YWSAqLworICAgICAgICB0bXBmaWxwdHJbbWxzZGVwdGhdID0gZm9w ZW4oKGNoYXIgKil0bXBmaWxuYW1bbWxzZGVwdGhdLCAiciIpOworI2lmbmRlZiBPUzIKKwlpZiAo dG1wZmlscHRyW21sc2RlcHRoXSkgeworCSAgICBpZiAoIWZ0cF9kZWIgJiYgIWRlYmxvZykKKwkg ICAgICB1bmxpbmsodG1wZmlsbmFtW21sc2RlcHRoXSk7CisJfQorI2VuZGlmIC8qIE9TMiAqLwor ICAgICAgbm90ZW1wOgorICAgICAgICBpZiAoIXRtcGZpbHB0clttbHNkZXB0aF0pIHsKKyAgICAg ICAgICAgIGRlYnVnKEYxMTAsImZ0cCByZW1vdGVfZmlsZXMgb3BlbiBmYWlsIix0bXBmaWxuYW1b bWxzZGVwdGhdLDApOworICAgICAgICAgICAgaWYgKCghZHB5YWN0aXZlIHx8IGZ0cF9kZWIpKQor ICAgICAgICAgICAgICBwcmludGYoIj9DYW4ndCBmaW5kIGxpc3Qgb2YgcmVtb3RlIGZpbGVzLCBv b3BzXG4iKTsKKyAgICAgICAgICAgIHJmcmMgPSAtOTsKKyAgICAgICAgICAgIHJldHVybihOVUxM KTsKKyAgICAgICAgfQorCWlmIChmdHBfZGViKQorCSAgcHJpbnRmKCJMSVNURklMRTogJXNcbiIs dG1wZmlsbmFtW21sc2RlcHRoXSk7CisgICAgfQorICAgIGJ1ZlswXSA9IE5VTDsKKyAgICBidWZb RlRQTkFNQlVGTEVOLTFdID0gTlVMOworICAgIGJ1ZltGVFBOQU1CVUZMRU4tMl0gPSBOVUw7CisK KyAgICAvKiBXZSBoYXZlIHRvIHJlZG8gYWxsIHRoaXMgYmVjYXVzZSB0aGUgZmlyc3QgdGltZSB3 YXMgb25seSBmb3IgKi8KKyAgICAvKiBmb3IgZ2V0dGluZyB0aGUgZmlsZSBsaXN0LCBub3cgaXQn cyBmb3IgZ2V0dGluZyBlYWNoIGZpbGUgKi8KKworICAgIGlmIChhcmcgJiYgbWdldG1ldGhvZCA9 PSBTTkRfTUxTKSB7CS8qIE1MU0QgKi8KKwlpZiAoIXBhdHRlcm4gJiYgaXN3aWxkKChjaGFyICop YXJnKSkgeworCSAgICBwYXR0ZXJuID0gYXJnOwkJLyogV2lsZCBhcmcgaXMgcmVhbGx5IGEgcGF0 dGVybiAqLworCSAgICBpZiAocGF0dGVybikKKwkgICAgICBpZiAoISpwYXR0ZXJuKQorCQlwYXR0 ZXJuID0gTlVMTDsKKwkgICAgYXJnID0gTlVMTDsJCQkvKiBhbmQgbm90IGFuIGFyZyAqLworCX0K KwlpZiAobmV3X3F1ZXJ5KSB7CQkvKiBJbml0aWFsIHF1ZXJ5PyAqLworCSAgICBjZHRvID0gKGNo YXIgKilhcmc7CQkvKiAobm9ud2lsZCkgYXJnIGdpdmVuPyAqLworCSAgICBpZiAoY2R0bykKKwkg ICAgICBpZiAoISpjZHRvKQorCQljZHRvID0gTlVMTDsKKwkgICAgaWYgKGNkdG8pCQkJLyogSWYg c28sIHRoZW4gQ0QgdG8gaXQgKi8KKwkgICAgICBkb2Z0cGN3ZChjZHRvLDApOworCX0KKyAgICB9 CisgICAgbmV3X3F1ZXJ5ID0gMDsKKworICAgIGlmIChmZ2V0cygoY2hhciAqKWJ1ZiwgRlRQTkFN QlVGTEVOLCB0bXBmaWxwdHJbbWxzZGVwdGhdKSA9PSBOVUxMKSB7CisgICAgICAgIGZjbG9zZSh0 bXBmaWxwdHJbbWxzZGVwdGhdKTsKKyAgICAgICAgdG1wZmlscHRyW21sc2RlcHRoXSA9IE5VTEw7 CisKKyNpZmRlZiBPUzIKKyAgICAgICAgaWYgKCFmdHBfZGViICYmICFkZWJsb2cpCisgICAgICAg ICAgdW5saW5rKHRtcGZpbG5hbVttbHNkZXB0aF0pOworI2VuZGlmIC8qIE9TMiAqLworICAgICAg ICBpZiAoZnRwX2RlYiAmJiAhZGVibG9nKSB7CisgICAgICAgICAgICBwcmludGYoIihUZW1wb3Jh cnkgZmlsZSAlcyBOT1QgZGVsZXRlZClcbiIsCisJCSAgIChjaGFyICopdG1wZmlsbmFtW21sc2Rl cHRoXSk7CisgICAgICAgIH0KKwlpZiAobWxzZGVwdGggPD0gMCkgewkJLyogRU9GIGF0IGRlcHRo IDAgKi8KKwkgICAgcmZyYyA9IC0zOwkJCS8qIG1lYW5zIHdlJ3JlIGRvbmUgKi8KKwkgICAgcmV0 dXJuKE5VTEwpOworCX0KKwlwcmludGYoIlBPUFBJTkcoJWQpLi4uXG4iLG1sc2RlcHRoLTEpOyAK KwlpZiAodG1wZmlsbmFtW21sc2RlcHRoXSkgZnJlZSh0bXBmaWxuYW1bbWxzZGVwdGhdKTsKKwlt bHNkZXB0aC0tOworCWRvZnRwY2R1cCgpOworCXpjaGRpcigiLi4iKTsJCQkvKiA8LS0gTm90IHBv cnRhYmxlICovCisJZ290byBhZ2FpbjsKKyAgICB9CisgICAgaWYgKGJ1ZltGVFBOQU1CVUZMRU4t MV0pIHsKKwlwcmludGYoIj9CVUZGRVIgT1ZFUkZMT1cgLS0gRlRQIE5MU1Qgb3IgTUxTRCBzdHJp bmcgbG9uZ2VyIHRoYW4gJWRcbiIsCisJICAgICAgIEZUUE5BTUJVRkxFTgorCSAgICAgICApOwor CWRlYnVnKEYxMDEsInJlbW90ZV9maWxlcyBidWZmZXIgb3ZlcnJ1biIsIiIsRlRQTkFNQlVGTEVO KTsKKwlyZXR1cm4oTlVMTCk7CisgICAgfQorICAgIC8qIGRlYnVnKEYxMTAsImZ0cCByZW1vdGVf ZmlsZXMgYnVmIDEiLGJ1ZiwwKTsgKi8KKyAgICBpZiAoKGNwID0gKENIQVIgKilja3N0cmNocigo Y2hhciAqKWJ1ZiwnXG4nKSkgIT0gTlVMTCkKKyAgICAgICpjcCA9ICdcMCc7CisgICAgaWYgKChj cCA9IChDSEFSICopY2tzdHJjaHIoKGNoYXIgKilidWYsJ1xyJykpICE9IE5VTEwpCisgICAgICAq Y3AgPSAnXDAnOworICAgIGRlYnVnKEYxMTAsImZ0cCByZW1vdGVfZmlsZXMgYnVmIixidWYsMCk7 CisgICAgcmZyYyA9IDA7CisKKyAgICBpZiAoZnRwX2RlYikKKyAgICAgIHByaW50ZigiWyVzXVxu IiwoY2hhciAqKWJ1Zik7CisKKyAgICBoYXZlc2l6ZSA9IChDS19PRkZfVCktMTsJCS8qIEluaXRp YWxpemUgZmlsZSBmYWN0cy4uLiAqLworICAgIGhhdmV0eXBlID0gMDsKKyAgICBtYWtlc3RyKCZo YXZlbWR0bSxOVUxMKTsKKyAgICBwID0gKGNoYXIgKilidWY7CisKKyAgICBpZiAobWdldG1ldGhv ZCA9PSBTTkRfTkxTKSB7CS8qIE5MU1QuLi4gKi8KKwlpZiAocGF0dGVybikgeworCSAgICBpZiAo IWNrbWF0Y2goKGNoYXIgKilwYXR0ZXJuLHAsKHNlcnZlcnR5cGUgPT0gU1lTX1VOSVgpLDEpKQor CSAgICAgIGdvdG8gYWdhaW47CisJfQorICAgIH0gZWxzZSB7CQkJCS8qIE1MU0QuLi4gKi8KKwlw ID0gcGFyc2VmYWN0cygoY2hhciAqKWJ1Zik7CisJc3dpdGNoIChoYXZldHlwZSkgeworCSAgY2Fz ZSBGVFlQX0ZJTEU6CQkvKiBGaWxlOiBHZXQgaXQgaWYgaXQgbWF0Y2hlcyAqLworCSAgICBpZiAo cGF0dGVybikgeworCQlpZiAoIWNrbWF0Y2goKGNoYXIgKilwYXR0ZXJuLHAsKHNlcnZlcnR5cGUg PT0gU1lTX1VOSVgpLDEpKQorCQkgIGdvdG8gYWdhaW47CisJICAgIH0KKwkgICAgYnJlYWs7CisJ ICBjYXNlIEZUWVBfQ0RJUjoJCS8qIEN1cnJlbnQgZGlyZWN0b3J5ICovCisJICBjYXNlIEZUWVBf UERJUjoJCS8qIFBhcmVudCBkaXJlY3RvcnkgKi8KKwkgICAgZ290byBhZ2FpbjsJCQkvKiBTa2lw ICovCisJICBjYXNlIEZUWVBfRElSOgkJLyogKFN1YilEaXJlY3RvcnkgKi8KKwkgICAgaWYgKCFy ZWN1cnNpdmUpCQkvKiBJZiBub3QgL1JFQ1VSU0lWRSAqLworCSAgICAgIGdvdG8gYWdhaW47CQkv KiBTa2lwICovCisJICAgIGlmIChtbHNkZXB0aCA8IE1MU0RFUFRIKSB7CisJCWNoYXIgKiBwMiA9 IE5VTEw7CisJCW1sc2RlcHRoKys7CisJCXByaW50ZigiUkVDVVJTSU5HIFslc10oJWQpLi4uXG4i LHAsbWxzZGVwdGgpOyAKKwkJaWYgKGRvZnRwY3dkKHAsMCkgPiAwKSB7CisJCSAgICBpbnQgeDsK KwkJICAgIGlmICghY2tzdHJjaHIocCwnLycpKSB7CisJCQkvKiB6bWtkaXIoKSBuZWVkcyBkaXJz ZXAgKi8KKwkJCWlmICgocDIgPSAoY2hhciAqKW1hbGxvYygoaW50KXN0cmxlbihwKSArIDIpKSkg eworCQkJICAgIHN0cmNweShwMixwKTsJLyogU0FGRSAqLworCQkJICAgIHN0cmNhdChwMiwiLyIp OwkvKiBTQUZFICovCisJCQkgICAgcCA9IHAyOworCQkJfQorCQkgICAgfQorI2lmZGVmIE5PTUtE SVIKKwkJICAgIHggPSAtMTsKKyNlbHNlCisJCSAgICB4ID0gem1rZGlyKHApOworI2VuZGlmIC8q IE5PTUtESVIgKi8KKwkJICAgIGlmICh4ID4gLTEpIHsKKwkJCXpjaGRpcihwKTsKKwkJCXAgPSAo Y2hhciAqKXJlbW90ZV9maWxlcygxLGFyZyxwYXR0ZXJuLDApOworCQkJaWYgKHAyKSBmcmVlKHAy KTsKKwkJICAgIH0gZWxzZSB7CisJCQlwcmludGYoIj9ta2RpciBmYWlsZWQ6IFslc10gRGVwdGg9 JWRcbiIsCisJCQkgICAgICAgcCwKKwkJCSAgICAgICBtbHNkZXB0aAorCQkJICAgICAgICk7CisJ CQltbHNyZXNldCgpOworCQkJaWYgKHAyKSBmcmVlKHAyKTsKKwkJCXJldHVybihOVUxMKTsKKwkJ ICAgIH0KKwkJfSBlbHNlIHsKKwkJICAgIHByaW50ZigiP0NXRCBmYWlsZWQ6IFslc10gRGVwdGg9 JWRcbiIscCxtbHNkZXB0aCk7CisJCSAgICBtbHNyZXNldCgpOworCQkgICAgcmV0dXJuKE5VTEwp OworCQl9CisJICAgIH0gZWxzZSB7CisJCXByaW50ZigiTUFYIERJUkVDVE9SWSBTVEFDSyBERVBU SCBFWENFRURFRDogJWRcbiIsCisJCSAgICAgICBtbHNkZXB0aAorCQkgICAgICAgKTsKKwkJbWxz cmVzZXQoKTsKKwkJcmV0dXJuKE5VTEwpOworCSAgICB9CisJfQorICAgIH0KKworI2lmZGVmIERF QlVHCisgICAgaWYgKGRlYmxvZykgeworCWRlYnVnKEYxMDEsInJlbW90ZV9maWxlcyBoYXZlc2l6 ZSIsIiIsaGF2ZXNpemUpOworCWRlYnVnKEYxMDEsInJlbW90ZV9maWxlcyBoYXZldHlwZSIsIiIs aGF2ZXR5cGUpOworCWRlYnVnKEYxMTAsInJlbW90ZV9maWxlcyBoYXZlbWR0bSIsaGF2ZW1kdG0s MCk7CQorCWRlYnVnKEYxMTAsInJlbW90ZV9maWxlcyBuYW1lIixwLDApOwkKKyAgICB9CisjZW5k aWYgLyogREVCVUcgKi8KKyAgICByZXR1cm4oKENIQVIgKilwKTsKK30KKworLyogTiBPIFQgIFAg TyBSIFQgQSBCIEwgRSAhISEgKi8KKworI2lmIChTSVpFT0ZfU0hPUlQgPT0gNCkKK3R5cGVkZWYg dW5zaWduZWQgc2hvcnQgZnRwX3VpbnQzMjsKK3R5cGVkZWYgc2hvcnQgZnRwX2ludDMyOworI2Vs c2UKKyNpZiAoU0laRU9GX0lOVCA9PSA0KQordHlwZWRlZiB1bnNpZ25lZCBpbnQgZnRwX3VpbnQz MjsKK3R5cGVkZWYgaW50IGZ0cF9pbnQzMjsKKyNlbHNlCisjaWYgKFNJWkVPRl9MT05HID09IDQp Cit0eXBlZGVmIFVMT05HIGZ0cF91aW50MzI7Cit0eXBlZGVmIGxvbmcgZnRwX2ludDMyOworI2Vu ZGlmCisjZW5kaWYKKyNlbmRpZgorCisvKiBQZXJoYXBzIHVzZSB0aGVzZSBpbiBnZW5lcmFsLCBj ZXJ0YWlubHkgdXNlIHRoZW0gZm9yIEdTU0FQSSAqLworCisjaWZuZGVmIGxvb3Bpbmdfd3JpdGUK KyNkZWZpbmUgZnRwX2ludDMyIGludAorI2RlZmluZSBmdHBfdWludDMyIHVuc2lnbmVkIGludAor c3RhdGljIGludAorbG9vcGluZ193cml0ZShmZCwgYnVmLCBsZW4pCisgICAgaW50IGZkOworICAg IHJlZ2lzdGVyIENPTlNUIGNoYXIgKmJ1ZjsKKyAgICBpbnQgbGVuOworeworICAgIGludCBjYzsK KyAgICByZWdpc3RlciBpbnQgd3JsZW4gPSBsZW47CisgICAgZG8geworICAgICAgICBjYyA9IHNl bmQoZmQsIChTRU5EQVJHMlRZUEUpYnVmLCB3cmxlbiwgMCk7CisgICAgICAgIGlmIChjYyA8IDAp IHsKKyAgICAgICAgICAgIGlmIChlcnJubyA9PSBFSU5UUikKKyAgICAgICAgICAgICAgY29udGlu dWU7CisgICAgICAgICAgICByZXR1cm4oY2MpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg ICAgYnVmICs9IGNjOworICAgICAgICAgICAgd3JsZW4gLT0gY2M7CisgICAgICAgIH0KKyAgICB9 IHdoaWxlICh3cmxlbiA+IDApOworICAgIHJldHVybihsZW4pOworfQorI2VuZGlmCisjaWZuZGVm IGxvb3BpbmdfcmVhZAorc3RhdGljIGludAorbG9vcGluZ19yZWFkKGZkLCBidWYsIGxlbikKKyAg ICBpbnQgZmQ7CisgICAgcmVnaXN0ZXIgY2hhciAqYnVmOworICAgIHJlZ2lzdGVyIGludCBsZW47 Cit7CisgICAgaW50IGNjLCBsZW4yID0gMDsKKworICAgIGRvIHsKKyAgICAgICAgY2MgPSByZWN2 KGZkLCAoY2hhciAqKWJ1ZiwgbGVuLDApOworICAgICAgICBpZiAoY2MgPCAwKSB7CisgICAgICAg ICAgICBpZiAoZXJybm8gPT0gRUlOVFIpCisgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg ICAgICAgcmV0dXJuKGNjKTsgICAgICAgICAgICAgICAgIC8qIGVycm5vIGlzIGFscmVhZHkgc2V0 ICovCisgICAgICAgIH0gZWxzZSBpZiAoY2MgPT0gMCkgeworICAgICAgICAgICAgcmV0dXJuKGxl bjIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYnVmICs9IGNjOworICAgICAgICAg ICAgbGVuMiArPSBjYzsKKyAgICAgICAgICAgIGxlbiAtPSBjYzsKKyAgICAgICAgfQorICAgIH0g d2hpbGUgKGxlbiA+IDApOworICAgIHJldHVybihsZW4yKTsKK30KKyNlbmRpZiAvKiBsb29waW5n X3JlYWQgKi8KKworI2RlZmluZSBFUlIgLTIKKworI2lmZGVmIENPTU1FTlQKK3N0YXRpYworc2Vj dXJlX3B1dGJ5dGUoZmQsIGMpIGludCBmZDsgQ0hBUiBjOyB7CisgICAgaW50IHJldDsKKworICAg IHVjYnVmW25vdXQrK10gPSBjOworICAgIGlmIChub3V0ID09IChtYXhidWYgPyBtYXhidWYgOiBh Y3R1YWxidWYpIC0gRlVER0VfRkFDVE9SKSB7CisgICAgICAgIG5vdXQgPSAwOworICAgICAgICBp ZiAoIWZ0cGlzc2VjdXJlKCkpCisgICAgICAgICAgcmV0ID0gc2VuZChmZCwgKFNFTkRBUkcyVFlQ RSl1Y2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgIChtYXhidWYgPyBtYXhidWYgOiBhY3R1YWxi dWYpIC0gRlVER0VfRkFDVE9SLCAwKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIHJldCA9IHNl Y3VyZV9wdXRidWYoZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1Y2J1ZiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYXhidWYgPyBtYXhidWYgOiBhY3R1YWxidWYp IC0gRlVER0VfRkFDVE9SCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAg ICByZXR1cm4ocmV0P3JldDpjKTsKKyAgICB9CisgICAgcmV0dXJuKGMpOworfQorI2VuZGlmIC8q IENPTU1FTlQgKi8KKworLyogcmV0dXJuczoKKyAqICAgICAgIDAgIG9uIHN1Y2Nlc3MKKyAqICAg ICAgLTEgIG9uIGVycm9yIChlcnJubyBzZXQpCisgKiAgICAgIC0yICBvbiBzZWN1cml0eSBlcnJv cgorICovCitzdGF0aWMgaW50CitzZWN1cmVfZmx1c2goZmQpIGludCBmZDsgeworICAgIGludCBy YyA9IDA7CisgICAgaW50IGxlbiA9IDA7CisKKyAgICBpZiAobm91dCA+IDApIHsKKyAgICAgICAg bGVuID0gbm91dDsKKyAgICAgICAgaWYgKCFmdHBpc3NlY3VyZSgpKSB7CisgICAgICAgICAgICBy YyA9IHNlbmQoZmQsIChTRU5EQVJHMlRZUEUpdWNidWYsIG5vdXQsIDApOworICAgICAgICAgICAg bm91dCA9IDA7CisgICAgICAgICAgICBnb3RvIHhmbHVzaDsKKyAgICAgICAgfSBlbHNlIHsKKyAg ICAgICAgICAgIHJjID0gc2VjdXJlX3B1dGJ1ZihmZCwgdWNidWYsIG5vdXQpOworICAgICAgICAg ICAgaWYgKHJjKQorICAgICAgICAgICAgICBnb3RvIHhmbHVzaDsKKyAgICAgICAgfQorICAgIH0K KyAgICByYyA9ICghZnRwaXNzZWN1cmUoKSkgPyAwIDogc2VjdXJlX3B1dGJ1ZihmZCwgKENIQVIg KikiIiwgbm91dCA9IDApOworCisgIHhmbHVzaDoKKyAgICBpZiAocmMgPiAtMSAmJiBsZW4gPiAw ICYmIGZkaXNwbGEgIT0gWFlGRF9CKSB7CisJc3BhY2tldHMrKzsKKyAgICAgICAgc3BrdGwgPSBs ZW47CisgICAgICAgIGZ0c2NyZWVuKFNDUl9QVCwnRCcsKENLX09GRl9UKXNwYWNrZXRzLE5VTEwp OworICAgIH0KKyAgICByZXR1cm4ocmMpOworfQorCisjaWZkZWYgQ09NTUVOVCAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogKG5vdCB1c2VkKSAqLworLyogcmV0dXJuczoKKyAqICAgICAgYz49 MCAgb24gc3VjY2VzcworICogICAgICAtMSAgICBvbiBlcnJvcgorICogICAgICAtMiAgICBvbiBz ZWN1cml0eSBlcnJvcgorICovCitzdGF0aWMgaW50CisjaWZkZWYgQ0tfQU5TSUMKK3NlY3VyZV9w dXRjKGNoYXIgYywgaW50IGZkKQorI2Vsc2UKK3NlY3VyZV9wdXRjKGMsIGZkKSBjaGFyIGM7IGlu dCBmZDsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogc2VjdXJlX3B1dGMgKi8geworICAgIHJl dHVybihzZWN1cmVfcHV0Ynl0ZShmZCwgKENIQVIpIGMpKTsKK30KKyNlbmRpZiAvKiBDT01NRU5U ICovCisKKy8qIHJldHVybnM6CisgKiAgICAgIG5ieXRlIG9uIHN1Y2Nlc3MKKyAqICAgICAgLTEg IG9uIGVycm9yIChlcnJubyBzZXQpCisgKiAgICAgIC0yICBvbiBzZWN1cml0eSBlcnJvcgorICov CitzdGF0aWMgaW50CisjaWZkZWYgQ0tfQU5TSUMKK3NlY3VyZV93cml0ZShpbnQgZmQsIENIQVIg KiBidWYsIHVuc2lnbmVkIGludCBuYnl0ZSkKKyNlbHNlCitzZWN1cmVfd3JpdGUoZmQsIGJ1Ziwg bmJ5dGUpCisgICAgaW50IGZkOworICAgIENIQVIgKiBidWY7CisgICAgdW5zaWduZWQgaW50IG5i eXRlOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgaW50IHJldDsKKworI2lmZGVmIEZU UF9USU1FT1VUICAgIAorICAgIGZ0cF90aW1lZF9vdXQgPSAwOworICAgIGlmIChjaGVja19kYXRh X2Nvbm5lY3Rpb24oZmQsMSkgPCAwKSB7CisJZnRwX3RpbWVkX291dCA9IDE7CisJcmV0dXJuKC0z KTsKKyAgICB9CisjZW5kaWYJLyogRlRQX1RJTUVPVVQgKi8KKworICAgIGlmICghZnRwaXNzZWN1 cmUoKSkgeworICAgICAgICBpZiAobm91dCA+IDApIHsKKyAgICAgICAgICAgIGlmICgocmV0ID0g c2VuZChmZCwgKFNFTkRBUkcyVFlQRSl1Y2J1Ziwgbm91dCwgMCkpIDwgMCkKKyAgICAgICAgICAg ICAgcmV0dXJuKHJldCk7CisgICAgICAgICAgICBub3V0ID0gMDsKKyAgICAgICAgfQorICAgICAg ICByZXR1cm4oc2VuZChmZCwoU0VOREFSRzJUWVBFKWJ1ZixuYnl0ZSwwKSk7CisgICAgfSBlbHNl IHsKKyAgICAgICAgaW50IHVjYnVmbGVuID0gKG1heGJ1ZiA/IG1heGJ1ZiA6IGFjdHVhbGJ1Zikg LSBGVURHRV9GQUNUT1I7CisgICAgICAgIGludCBic2VudCA9IDA7CisKKyAgICAgICAgd2hpbGUg KGJzZW50IDwgbmJ5dGUpIHsKKyAgICAgICAgICAgIGludCBiMmNwID0gKChuYnl0ZSAtIGJzZW50 KSA+ICh1Y2J1ZmxlbiAtIG5vdXQpID8KKyAgICAgICAgICAgICAgICAgICAgICAgICh1Y2J1Zmxl biAtIG5vdXQpIDogKG5ieXRlIC0gYnNlbnQpKTsKKyNpZmRlZiBERUJVRworCSAgICBpZiAoZGVi bG9nKSB7CisJCWRlYnVnKEYxMDEsInNlY3VyZV93cml0ZSB1Y2J1ZmxlbiIsIiIsdWNidWZsZW4p OworCQlkZWJ1ZyhGMTAxLCJzZWN1cmVfd3JpdGUgdWNidWZzaXoiLCIiLHVjYnVmc2l6KTsKKwkJ ZGVidWcoRjEwMSwic2VjdXJlX3dyaXRlIGJzZW50IiwiIixic2VudCk7CisJCWRlYnVnKEYxMDEs InNlY3VyZV93cml0ZSBiMmNwIiwiIixiMmNwKTsKKwkgICAgfQorI2VuZGlmIC8qIERFQlVHICov CisgICAgICAgICAgICBtZW1jcHkoJnVjYnVmW25vdXRdLCZidWZbYnNlbnRdLGIyY3ApOworICAg ICAgICAgICAgbm91dCArPSBiMmNwOworICAgICAgICAgICAgYnNlbnQgKz0gYjJjcDsKKworICAg ICAgICAgICAgaWYgKG5vdXQgPT0gdWNidWZsZW4pIHsKKyAgICAgICAgICAgICAgICBub3V0ID0g MDsKKyAgICAgICAgICAgICAgICByZXQgPSBzZWN1cmVfcHV0YnVmKGZkLCB1Y2J1ZiwgdWNidWZs ZW4pOworICAgICAgICAgICAgICAgIGlmIChyZXQgPCAwKQorICAgICAgICAgICAgICAgICAgcmV0 dXJuKHJldCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuKGJzZW50 KTsKKyAgICB9Cit9CisKKy8qIHJldHVybnM6CisgKiAgICAgICAwICBvbiBzdWNjZXNzCisgKiAg ICAgIC0xICBvbiBlcnJvciAoZXJybm8gc2V0KQorICogICAgICAtMiAgb24gc2VjdXJpdHkgZXJy b3IKKyAqLworc3RhdGljIGludAorI2lmZGVmIENLX0FOU0lDCitzZWN1cmVfcHV0YnVmKGludCBm ZCwgQ0hBUiAqIGJ1ZiwgdW5zaWduZWQgaW50IG5ieXRlKQorI2Vsc2UKK3NlY3VyZV9wdXRidWYo ZmQsIGJ1ZiwgbmJ5dGUpIGludCBmZDsgQ0hBUiAqIGJ1ZjsgdW5zaWduZWQgaW50IG5ieXRlOwor I2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgc3RhdGljIGNoYXIgKm91dGJ1ZiA9IE5VTEw7 ICAgICAgICAgLyogb3V0cHV0IGNpcGhlcnRleHQgKi8KKyNpZmRlZiBGVFBfU0VDVVJJVFkKKyAg ICBzdGF0aWMgdW5zaWduZWQgaW50IGJ1ZnNpemUgPSAwOyAgICAvKiBzaXplIG9mIG91dGJ1ZiAq LworI2VuZGlmIC8qIEZUUF9TRUNVUklUWSAqLworICAgIGZ0cF9pbnQzMiBsZW5ndGggICA9IDA7 CisgICAgZnRwX3VpbnQzMiBuZXRfbGVuID0gMDsKKworICAgIC8qIE90aGVyIGF1dGggdHlwZXMg Z28gaGVyZSAuLi4gKi8KKyNpZmRlZiBDS19TU0wKKyAgICBpZiAoc3NsX2Z0cF9kYXRhX2FjdGl2 ZV9mbGFnKSB7CisgICAgICAgIGludCBjb3VudCwgZXJyb3I7CisKKyAgICAgICAgLyogdGhlcmUg aXMgbm8gbmVlZCB0byBzZW5kIGFuIGVtcHR5IGJ1ZmZlciB3aGVuIHVzaW5nIFNTTC9UTFMgKi8K KyAgICAgICAgaWYgKCBuYnl0ZSA9PSAwICkKKwkgIHJldHVybigwKTsKKworICAgICAgICBjb3Vu dCA9IFNTTF93cml0ZShzc2xfZnRwX2RhdGFfY29uLCBidWYsIG5ieXRlKTsKKyAgICAgICAgZXJy b3IgPSBTU0xfZ2V0X2Vycm9yKHNzbF9mdHBfZGF0YV9jb24sY291bnQpOworICAgICAgICBzd2l0 Y2ggKGVycm9yKSB7CisgICAgICAgICAgY2FzZSBTU0xfRVJST1JfTk9ORToKKyAgICAgICAgICAg IHJldHVybigwKTsKKyAgICAgICAgICBjYXNlIFNTTF9FUlJPUl9XQU5UX1dSSVRFOgorICAgICAg ICAgIGNhc2UgU1NMX0VSUk9SX1dBTlRfUkVBRDoKKyAgICAgICAgICBjYXNlIFNTTF9FUlJPUl9T WVNDQUxMOgorI2lmZGVmIE5UCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW50IGds ZSA9IEdldExhc3RFcnJvcigpOworCQlpZiAoZ2xlID09IDApCisJCSAgcmV0dXJuKDApOworCQlk ZWJ1ZyhGMTExLCJzZWN1cmVfcHV0YnVmIiwiU1NMX0VSUk9SX1NZU0NBTEwiLGdsZSk7CisgICAg ICAgICAgICB9CisjZW5kaWYgLyogTlQgKi8KKyAgICAgICAgICBjYXNlIFNTTF9FUlJPUl9XQU5U X1g1MDlfTE9PS1VQOgorICAgICAgICAgIGNhc2UgU1NMX0VSUk9SX1NTTDoKKyAgICAgICAgICBj YXNlIFNTTF9FUlJPUl9aRVJPX1JFVFVSTjoKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg ICAgU1NMX3NodXRkb3duKHNzbF9mdHBfZGF0YV9jb24pOworICAgICAgICAgICAgU1NMX2ZyZWUo c3NsX2Z0cF9kYXRhX2Nvbik7CisgICAgICAgICAgICBzc2xfZnRwX2RhdGFfYWN0aXZlX2ZsYWcg PSAwOworICAgICAgICAgICAgc3NsX2Z0cF9kYXRhX2NvbiA9IE5VTEw7CisjaWZkZWYgVENQSVBM SUIKKyAgICAgICAgICAgIHNvY2tldF9jbG9zZShkYXRhKTsKKyNlbHNlIC8qIFRDUElQTElCICov CisjaWZkZWYgVVNFX1NIVVRET1dOCisgICAgICAgICAgICBzaHV0ZG93bihkYXRhLCAxKzEpOwor I2VuZGlmIC8qIFVTRV9TSFVURE9XTiAqLworICAgICAgICAgICAgY2xvc2UoZGF0YSk7CisjZW5k aWYgLyogVENQSVBMSUIgKi8KKyAgICAgICAgICAgIGRhdGEgPSAtMTsKKyAgICAgICAgICAgIGds b2JhbGRpbiA9IGRhdGE7CisgICAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICB9CisgICAg ICAgIHJldHVybigtMSk7CisgICAgfQorI2VuZGlmIC8qIENLX1NTTCAqLworCisjaWZkZWYgRlRQ X1NSUAorICAgIGlmIChja19zcnBfaXNfaW5zdGFsbGVkKCkgJiYgKHN0cmNtcChhdXRoX3R5cGUs ICJTUlAiKSA9PSAwKSkgeworICAgICAgICBpZiAoYnVmc2l6ZSA8IG5ieXRlICsgRlVER0VfRkFD VE9SKSB7CisgICAgICAgICAgICBpZiAob3V0YnVmPworICAgICAgICAgICAgICAgIChvdXRidWYg PSByZWFsbG9jKG91dGJ1ZiwgKHVuc2lnbmVkKSAobmJ5dGUgKyBGVURHRV9GQUNUT1IpKSk6Cisg ICAgICAgICAgICAgICAgKG91dGJ1ZiA9IG1hbGxvYygodW5zaWduZWQpIChuYnl0ZSArIEZVREdF X0ZBQ1RPUikpKSkgeworICAgICAgICAgICAgICAgIGJ1ZnNpemUgPSBuYnl0ZSArIEZVREdFX0ZB Q1RPUjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYnVmc2l6ZSA9IDA7 CisgICAgICAgICAgICAgICAgc2VjdXJlX2Vycm9yKCIlcyAoaW4gbWFsbG9jIG9mIFBST1QgYnVm ZmVyKSIsIGNrX2VycnN0cigpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4oRVJSKTsKKyAgICAg ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoKGxlbmd0aCA9CisgICAgICAgICAgICAg c3JwX2VuY29kZShmdHBfZHBsID09IEZQTF9QUlYsCisgICAgICAgICAgICAgICAgICAgICAgICAo Q0hBUiAqKSBidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAoQ0hBUiAqKSBvdXRidWYsCisg ICAgICAgICAgICAgICAgICAgICAgICBuYnl0ZQorICAgICAgICAgICAgICAgICAgICAgICAgKQor ICAgICAgICAgICAgICkgPCAwKSB7CisgICAgICAgICAgICBzZWN1cmVfZXJyb3IgKCJzcnBfZW5j b2RlIGZhaWxlZCIpOworICAgICAgICAgICAgcmV0dXJuIEVSUjsKKyAgICAgICAgfQorICAgIH0K KyNlbmRpZiAvKiBGVFBfU1JQICovCisjaWZkZWYgRlRQX0tSQjQKKyAgICBpZiAoY2tfa3JiNF9p c19pbnN0YWxsZWQoKSAmJiAoc3RyY21wKGF1dGhfdHlwZSwgIktFUkJFUk9TX1Y0IikgPT0gMCkp IHsKKyAgICAgICAgc3RydWN0IHNvY2thZGRyX2luIG15YWRkciwgaGlzYWRkcjsKKyAgICAgICAg R1NPQ0tOQU1FX1QgbGVuOworICAgICAgICBsZW4gPSBzaXplb2YobXlhZGRyKTsKKyAgICAgICAg aWYgKGdldHNvY2tuYW1lKGZkLCAoc3RydWN0IHNvY2thZGRyKikmbXlhZGRyLCAmbGVuKSA8IDAp IHsKKyAgICAgICAgICAgIHNlY3VyZV9lcnJvcigic2VjdXJlX3B1dGJ1ZjogZ2V0c29ja25hbWUg ZmFpbGVkIik7CisgICAgICAgICAgICByZXR1cm4oRVJSKTsKKyAgICAgICAgfQorICAgICAgICBs ZW4gPSBzaXplb2YoaGlzYWRkcik7CisgICAgICAgIGlmIChnZXRwZWVybmFtZShmZCwgKHN0cnVj dCBzb2NrYWRkciopJmhpc2FkZHIsICZsZW4pIDwgMCkgeworICAgICAgICAgICAgc2VjdXJlX2Vy cm9yKCJzZWN1cmVfcHV0YnVmOiBnZXRwZWVybmFtZSBmYWlsZWQiKTsKKyAgICAgICAgICAgIHJl dHVybihFUlIpOworICAgICAgICB9CisgICAgICAgIGlmIChidWZzaXplIDwgbmJ5dGUgKyBGVURH RV9GQUNUT1IpIHsKKyAgICAgICAgICAgIGlmIChvdXRidWYgPworICAgICAgICAgICAgICAgIChv dXRidWYgPSByZWFsbG9jKG91dGJ1ZiwgKHVuc2lnbmVkKSAobmJ5dGUgKyBGVURHRV9GQUNUT1Ip KSk6CisgICAgICAgICAgICAgICAgIChvdXRidWYgPSBtYWxsb2MoKHVuc2lnbmVkKSAobmJ5dGUg KyBGVURHRV9GQUNUT1IpKSkpIHsKKyAgICAgICAgICAgICAgICBidWZzaXplID0gbmJ5dGUgKyBG VURHRV9GQUNUT1I7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGJ1ZnNp emUgPSAwOworICAgICAgICAgICAgICAgIHNlY3VyZV9lcnJvcigiJXMgKGluIG1hbGxvYyBvZiBQ Uk9UIGJ1ZmZlcikiLCBja19lcnJzdHIoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuKEVSUik7 CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZ0cF9kcGwgPT0gRlBMX1BS VikgeworICAgICAgICAgICAgbGVuZ3RoID0ga3JiX21rX3ByaXYoYnVmLCAoQ0hBUiAqKSBvdXRi dWYsIG5ieXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnRwX3NjaGVkLAor I2lmZGVmIEtSQjUyNAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnRwX2NyZWQu c2Vzc2lvbiwKKyNlbHNlIC8qIEtSQjUyNCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJmZ0cF9jcmVkLnNlc3Npb24sCisjZW5kaWYgLyogS1JCNTI0ICovCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAmbXlhZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJmhpc2FkZHIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Cisg ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBsZW5ndGggPSBrcmJfbWtfc2FmZShidWYsIChD SEFSICopIG91dGJ1ZiwgbmJ5dGUsCisjaWZkZWYgS1JCNTI0CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBmdHBfY3JlZC5zZXNzaW9uLAorI2Vsc2UgLyogS1JCNTI0ICovCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZnRwX2NyZWQuc2Vzc2lvbiwKKyNlbmRpZiAv KiBLUkI1MjQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZteWFkZHIsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaGlzYWRkcgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgfQorICAgICAgICBpZiAobGVuZ3RoID09IC0x KSB7CisgICAgICAgICAgICBzZWN1cmVfZXJyb3IoImtyYl9ta18lcyBmYWlsZWQgZm9yIEtFUkJF Uk9TX1Y0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmdHBfZHBsID09IEZQTF9QUlYgPyAi cHJpdiIgOiAic2FmZSIpOworICAgICAgICAgICAgcmV0dXJuKEVSUik7CisgICAgICAgIH0KKyAg ICB9CisjZW5kaWYgLyogRlRQX0tSQjQgKi8KKyNpZmRlZiBGVFBfR1NTQVBJCisgICAgaWYgKGNr X2dzc2FwaV9pc19pbnN0YWxsZWQoKSAmJiAoc3RyY21wKGF1dGhfdHlwZSwgIkdTU0FQSSIpID09 IDApKSB7CisgICAgICAgIGdzc19idWZmZXJfZGVzYyBpbl9idWYsIG91dF9idWY7CisgICAgICAg IE9NX3VpbnQzMiBtYWpfc3RhdCwgbWluX3N0YXQ7CisgICAgICAgIGludCBjb25mX3N0YXRlOwor CisgICAgICAgIGluX2J1Zi52YWx1ZSA9IGJ1ZjsKKyAgICAgICAgaW5fYnVmLmxlbmd0aCA9IG5i eXRlOworICAgICAgICBtYWpfc3RhdCA9IGdzc19zZWFsKCZtaW5fc3RhdCwgZ2NvbnRleHQsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZ0cF9kcGwgPT0gRlBMX1BSViksIC8qIGNvbmZp ZGVudGlhbCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdTU19DX1FPUF9ERUZBVUxU LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpbl9idWYsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJmNvbmZfc3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm91 dF9idWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICBpZiAobWFqX3N0 YXQgIT0gR1NTX1NfQ09NUExFVEUpIHsKKyAgICAgICAgICAgIC8qIGdlbmVyYWxseSBuZWVkIHRv IGRlYWwgKi8KKyAgICAgICAgICAgIC8qIGllLiBzaG91bGQgbG9vcCwgYnV0IGZvciBub3cganVz dCBmYWlsICovCisgICAgICAgICAgICB1c2VyX2dzc19lcnJvcihtYWpfc3RhdCwgbWluX3N0YXQs CisgICAgICAgICAgICAgICAgICAgICAgICAgICBmdHBfZHBsID09IEZQTF9QUlY/CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAiR1NTQVBJIHNlYWwgZmFpbGVkIjoKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICJHU1NBUEkgc2lnbiBmYWlsZWQiKTsKKyAgICAgICAgICAgIHJldHVybihF UlIpOworICAgICAgICB9CisgICAgICAgIGlmIChidWZzaXplIDwgb3V0X2J1Zi5sZW5ndGgpIHsK KyAgICAgICAgICAgIGlmIChvdXRidWYgPworICAgICAgICAgICAgICAgIChvdXRidWYgPSByZWFs bG9jKG91dGJ1ZiwgKHVuc2lnbmVkKSBvdXRfYnVmLmxlbmd0aCkpOgorICAgICAgICAgICAgICAg IChvdXRidWYgPSBtYWxsb2MoKHVuc2lnbmVkKSBvdXRfYnVmLmxlbmd0aCkpKSB7CisgICAgICAg ICAgICAgICAgYnVmc2l6ZSA9IG91dF9idWYubGVuZ3RoOworICAgICAgICAgICAgfSBlbHNlIHsK KyAgICAgICAgICAgICAgICBidWZzaXplID0gMDsKKyAgICAgICAgICAgICAgICBzZWN1cmVfZXJy b3IoIiVzIChpbiBtYWxsb2Mgb2YgUFJPVCBidWZmZXIpIiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY2tfZXJyc3RyKCkpOworICAgICAgICAgICAgICAgIHJldHVybihFUlIpOworICAg ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIG1lbWNweShvdXRidWYsIG91dF9idWYudmFs dWUsIGxlbmd0aD1vdXRfYnVmLmxlbmd0aCk7CisgICAgICAgIGdzc19yZWxlYXNlX2J1ZmZlcigm bWluX3N0YXQsICZvdXRfYnVmKTsKKyAgICB9CisjZW5kaWYgLyogRlRQX0dTU0FQSSAqLworICAg IG5ldF9sZW4gPSBodG9ubCgoVUxPTkcpIGxlbmd0aCk7CisgICAgaWYgKGxvb3Bpbmdfd3JpdGUo ZmQsIChjaGFyICopJm5ldF9sZW4sIDQpID09IC0xKQorICAgICAgcmV0dXJuKC0xKTsKKyAgICBp ZiAobG9vcGluZ193cml0ZShmZCwgb3V0YnVmLCBsZW5ndGgpICE9IGxlbmd0aCkKKyAgICAgIHJl dHVybigtMSk7CisgICAgcmV0dXJuKDApOworfQorCisKKy8qIGZjID0gMCBtZWFucyB0byBnZXQg YSBieXRlOyBub256ZXJvIG1lYW5zIHRvIGluaXRpYWxpemUgYnVmZmVyIHBvaW50ZXJzICovCisK K3N0YXRpYyBpbnQKK3NlY3VyZV9nZXRieXRlKGZkLGZjKSBpbnQgZmQsZmM7IHsKKyAgICAvKiBu dW1iZXIgb2YgY2hhcnMgaW4gdWNidWYsIHBvaW50ZXIgaW50byB1Y2J1ZiAqLworICAgIHN0YXRp YyB1bnNpZ25lZCBpbnQgbmluID0gMCwgYnVmcCA9IDA7CisgICAgaW50IGtlcnJvcjsKKyAgICBm dHBfdWludDMyIGxlbmd0aDsKKworICAgIGlmIChmYykgeworCW5pbiA9IGJ1ZnAgPSAwOworCXVj YnVmWzBdID0gTlVMOworCXJldHVybigwKTsKKyAgICB9CisgICAgaWYgKG5pbiA9PSAwKSB7Cisg ICAgICAgIGlmIChpc2NhbmNlbGVkKCkpCisgICAgICAgICAgcmV0dXJuKC05KTsKKworI2lmZGVm IEZUUF9USU1FT1VUCisJaWYgKGNoZWNrX2RhdGFfY29ubmVjdGlvbihmZCwwKSA8IDApCisJICBy ZXR1cm4oLTMpOworI2VuZGlmCS8qIEZUUF9USU1FT1VUICovCisKKyNpZmRlZiBDS19TU0wKKyAg ICAgICAgaWYgKHNzbF9mdHBfZGF0YV9hY3RpdmVfZmxhZykgeworICAgICAgICAgICAgaW50IGNv dW50LCBlcnJvcjsKKyAgICAgICAgICAgIGNvdW50ID0gU1NMX3JlYWQoc3NsX2Z0cF9kYXRhX2Nv biwgdWNidWYsIHVjYnVmc2l6KTsKKyAgICAgICAgICAgIGVycm9yID0gU1NMX2dldF9lcnJvcihz c2xfZnRwX2RhdGFfY29uLGNvdW50KTsKKyNpZmRlZiBERUJVRworCSAgICBpZiAoZXJyb3IgIT0g U1NMX0VSUk9SX05PTkUpCisJICAgICAgZGVidWcoRjEwMSwiZnRwIHNlY3VyZV9nZXRieXRlIGVy cm9yIiwiIixlcnJvcik7CisJICAgIGlmIChjb3VudCA9PSAwKQorCSAgICAgIGRlYnVnKEYxMDEs ImZ0cCBzZWN1cmVfZ2V0Ynl0ZSBjb3VudCIsIiIsY291bnQpOworI2VuZGlmCS8qIERFQlVHICov CisgICAgICAgICAgICBzd2l0Y2ggKGVycm9yKSB7CisgICAgICAgICAgICAgIGNhc2UgU1NMX0VS Uk9SX05PTkU6CisJCWlmIChjb3VudCA+IDApIHsKKwkJICAgIG5pbiA9IGJ1ZnAgPSBjb3VudDsK KwkJICAgIHJwYWNrZXRzKys7CisJCSAgICBwa3RudW0rKzsKKwkJICAgIGlmIChmZGlzcGxhICE9 IFhZRkRfQikgeworCQkJcnBrdGwgPSBjb3VudDsKKwkJCWZ0c2NyZWVuKFNDUl9QVCwnRCcsKENL X09GRl9UKXJwYWNrZXRzLE5VTEwpOworCQkgICAgfQorCQkgICAgYnJlYWs7CisJCX0KKyAgICAg ICAgICAgICAgY2FzZSBTU0xfRVJST1JfV0FOVF9XUklURToKKyAgICAgICAgICAgICAgY2FzZSBT U0xfRVJST1JfV0FOVF9SRUFEOgorICAgICAgICAgICAgICBjYXNlIFNTTF9FUlJPUl9TWVNDQUxM OgorI2lmZGVmIE5UCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpbnQg Z2xlID0gR2V0TGFzdEVycm9yKCk7CisgICAgICAgICAgICAgICAgfQorI2VuZGlmIC8qIE5UICov CisgICAgICAgICAgICAgIGNhc2UgU1NMX0VSUk9SX1dBTlRfWDUwOV9MT09LVVA6CisgICAgICAg ICAgICAgIGNhc2UgU1NMX0VSUk9SX1NTTDoKKyAgICAgICAgICAgICAgY2FzZSBTU0xfRVJST1Jf WkVST19SRVRVUk46CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgbmlu ID0gYnVmcCA9IGNvdW50ID0gMDsKKyAgICAgICAgICAgICAgICBTU0xfc2h1dGRvd24oc3NsX2Z0 cF9kYXRhX2Nvbik7CisgICAgICAgICAgICAgICAgU1NMX2ZyZWUoc3NsX2Z0cF9kYXRhX2Nvbik7 CisgICAgICAgICAgICAgICAgc3NsX2Z0cF9kYXRhX2FjdGl2ZV9mbGFnID0gMDsKKyAgICAgICAg ICAgICAgICBzc2xfZnRwX2RhdGFfY29uID0gTlVMTDsKKyNpZmRlZiBUQ1BJUExJQgorICAgICAg ICAgICAgICAgIHNvY2tldF9jbG9zZShkYXRhKTsKKyNlbHNlIC8qIFRDUElQTElCICovCisjaWZk ZWYgVVNFX1NIVVRET1dOCisgICAgICAgICAgICAgICAgc2h1dGRvd24oZGF0YSwgMSsxKTsKKyNl bmRpZiAvKiBVU0VfU0hVVERPV04gKi8KKyAgICAgICAgICAgICAgICBjbG9zZShkYXRhKTsKKyNl bmRpZiAvKiBUQ1BJUExJQiAqLworICAgICAgICAgICAgICAgIGRhdGEgPSAtMTsKKyAgICAgICAg ICAgICAgICBnbG9iYWxkaW4gPSBkYXRhOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg ICAgICAgfQorICAgICAgICB9IGVsc2UKKyNlbmRpZiAvKiBDS19TU0wgKi8KKyAgICAgICAgICB7 CisgICAgICAgICAgICAgIGtlcnJvciA9IGxvb3BpbmdfcmVhZChmZCwgKGNoYXIgKikmbGVuZ3Ro LCBzaXplb2YobGVuZ3RoKSk7CisgICAgICAgICAgICAgIGlmIChrZXJyb3IgIT0gc2l6ZW9mKGxl bmd0aCkpIHsKKyAgICAgICAgICAgICAgICAgIHNlY3VyZV9lcnJvcigiQ291bGRuJ3QgcmVhZCBQ Uk9UIGJ1ZmZlciBsZW5ndGg6ICVkLyVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBrZXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2Vycm9yID09IC0xID8g Y2tfZXJyc3RyKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICJwcmVtYXR1cmUg RU9GIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAg ICByZXR1cm4oRVJSKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBkZWJ1ZyhGMTAx LCJzZWN1cmVfZ2V0Ynl0ZSBsZW5ndGgiLCIiLGxlbmd0aCk7CisgICAgICAgICAgICAgIGRlYnVn KEYxMDEsInNlY3VyZV9nZXRieXRlIG50b2hsKGxlbmd0aCkiLCIiLG50b2hsKGxlbmd0aCkpOwor CisgICAgICAgICAgICAgIGxlbmd0aCA9IChVTE9ORykgbnRvaGwobGVuZ3RoKTsKKyAgICAgICAg ICAgICAgaWYgKGxlbmd0aCA+IG1heGJ1ZikgeworICAgICAgICAgICAgICAgICAgc2VjdXJlX2Vy cm9yKCJMZW5ndGggKCVkKSBvZiBQUk9UIGJ1ZmZlciA+IFBCU1o9JXUiLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBtYXhidWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAg ICAgICAgcmV0dXJuKEVSUik7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgaWYgKChr ZXJyb3IgPSBsb29waW5nX3JlYWQoZmQsIHVjYnVmLCBsZW5ndGgpKSAhPSBsZW5ndGgpIHsKKyAg ICAgICAgICAgICAgICAgIHNlY3VyZV9lcnJvcigiQ291bGRuJ3QgcmVhZCAldSBieXRlIFBST1Qg YnVmZmVyOiAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtlcnJvciA9PSAtMSA/IGNrX2VycnN0cigpIDog InByZW1hdHVyZSBFT0YiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAg ICAgICAgICAgICAgIHJldHVybihFUlIpOworICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg ICAgLyogT3RoZXIgYXV0aCB0eXBlcyBnbyBoZXJlIC4uLiAqLworI2lmZGVmIEZUUF9TUlAKKyAg ICAgICAgICAgICAgaWYgKHN0cmNtcChhdXRoX3R5cGUsICJTUlAiKSA9PSAwKSB7CisgICAgICAg ICAgICAgICAgICBpZiAoKG5pbiA9IGJ1ZnAgPSBzcnBfZGVjb2RlIChmdHBfZHBsID09IEZQTF9Q UlYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQ0hB UiAqKSB1Y2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHVjYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbGVuZ3RoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICApCisgICAgICAgICAgICAgICAgICAgICAgICkgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICAg ICAgICBzZWN1cmVfZXJyb3IgKCJzcnBfZW5jb2RlIGZhaWxlZCIgKTsKKyAgICAgICAgICAgICAg ICAgICAgICByZXR1cm4gRVJSOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9 CisjZW5kaWYgLyogRlRQX1NSUCAqLworI2lmZGVmIEZUUF9LUkI0CisgICAgICAgICAgICAgIGlm IChzdHJjbXAoYXV0aF90eXBlLCAiS0VSQkVST1NfVjQiKSA9PSAwKSB7CisgICAgICAgICAgICAg ICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gbXlhZGRyLCBoaXNhZGRyOworICAgICAgICAgICAgICAg ICAgR1NPQ0tOQU1FX1QgbGVuOworICAgICAgICAgICAgICAgICAgbGVuID0gc2l6ZW9mKG15YWRk cik7CisgICAgICAgICAgICAgICAgICBpZiAoZ2V0c29ja25hbWUoZmQsIChzdHJ1Y3Qgc29ja2Fk ZHIqKSZteWFkZHIsICZsZW4pIDwgMCkgeworICAgICAgICAgICAgICAgICAgICAgIHNlY3VyZV9l cnJvcigic2VjdXJlX3B1dGJ1ZjogZ2V0c29ja25hbWUgZmFpbGVkIik7CisgICAgICAgICAgICAg ICAgICAgICAgcmV0dXJuKEVSUik7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg ICAgICBsZW4gPSBzaXplb2YoaGlzYWRkcik7CisgICAgICAgICAgICAgICAgICBpZiAoZ2V0cGVl cm5hbWUoZmQsIChzdHJ1Y3Qgc29ja2FkZHIqKSZoaXNhZGRyLCAmbGVuKSA8IDApIHsKKyAgICAg ICAgICAgICAgICAgICAgICBzZWN1cmVfZXJyb3IoInNlY3VyZV9wdXRidWY6IGdldHBlZXJuYW1l IGZhaWxlZCIpOworICAgICAgICAgICAgICAgICAgICAgIHJldHVybihFUlIpOworICAgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgaWYgKGZ0cF9kcGwpIHsKKyAgICAgICAgICAg ICAgICAgICAgICBrZXJyb3IgPSBrcmJfcmRfcHJpdih1Y2J1ZiwgbGVuZ3RoLCBmdHBfc2NoZWQs CisjaWZkZWYgS1JCNTI0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZnRwX2NyZWQuc2Vzc2lvbiwKKyNlbHNlIC8qIEtSQjUyNCAqLworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmdHBfY3JlZC5zZXNzaW9uLAorI2VuZGlmIC8q IEtSQjUyNCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZo aXNhZGRyLCAmbXlhZGRyLCAmZnRwX21zZ19kYXRhKTsKKyAgICAgICAgICAgICAgICAgIH0gZWxz ZSB7CisgICAgICAgICAgICAgICAgICAgICAga2Vycm9yID0ga3JiX3JkX3NhZmUodWNidWYsIGxl bmd0aCwKKyNpZmRlZiBLUkI1MjQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBmdHBfY3JlZC5zZXNzaW9uLAorI2Vsc2UgLyogS1JCNTI0ICovCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZ0cF9jcmVkLnNlc3Npb24sCisjZW5k aWYgLyogS1JCNTI0ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJmhpc2FkZHIsICZteWFkZHIsICZmdHBfbXNnX2RhdGEpOworICAgICAgICAgICAgICAgICAg fQorICAgICAgICAgICAgICAgICAgaWYgKGtlcnJvcikgeworICAgICAgICAgICAgICAgICAgICAg IHNlY3VyZV9lcnJvcigia3JiX3JkXyVzIGZhaWxlZCBmb3IgS0VSQkVST1NfVjQgKCVzKSIsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ0cF9kcGwgPT0gRlBMX1BSViA/ICJw cml2IiA6ICJzYWZlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3JiX2dl dF9lcnJfdGV4dChrZXJyb3IpKTsKKyAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oRVJSKTsK KyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIG1lbWNweSh1Y2J1ZixmdHBf bXNnX2RhdGEuYXBwX2RhdGEsZnRwX21zZ19kYXRhLmFwcF9sZW5ndGgpOworICAgICAgICAgICAg ICAgICAgbmluID0gYnVmcCA9IGZ0cF9tc2dfZGF0YS5hcHBfbGVuZ3RoOworICAgICAgICAgICAg ICB9CisjZW5kaWYgLyogRlRQX0tSQjQgKi8KKyNpZmRlZiBGVFBfR1NTQVBJCisgICAgICAgICAg ICAgIGlmIChzdHJjbXAoYXV0aF90eXBlLCAiR1NTQVBJIikgPT0gMCkgeworICAgICAgICAgICAg ICAgICAgZ3NzX2J1ZmZlcl9kZXNjIHhtaXRfYnVmLCBtc2dfYnVmOworICAgICAgICAgICAgICAg ICAgT01fdWludDMyIG1hal9zdGF0LCBtaW5fc3RhdDsKKyAgICAgICAgICAgICAgICAgIGludCBj b25mX3N0YXRlOworCisgICAgICAgICAgICAgICAgICB4bWl0X2J1Zi52YWx1ZSA9IHVjYnVmOwor ICAgICAgICAgICAgICAgICAgeG1pdF9idWYubGVuZ3RoID0gbGVuZ3RoOworICAgICAgICAgICAg ICAgICAgY29uZl9zdGF0ZSA9IChmdHBfZHBsID09IEZQTF9QUlYpOworICAgICAgICAgICAgICAg ICAgLyogZGVjcnlwdC92ZXJpZnkgdGhlIG1lc3NhZ2UgKi8KKyAgICAgICAgICAgICAgICAgIG1h al9zdGF0ID0gZ3NzX3Vuc2VhbCgmbWluX3N0YXQsIGdjb250ZXh0LCAmeG1pdF9idWYsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1zZ19idWYsICZjb25mX3N0YXRl LCBOVUxMKTsKKyAgICAgICAgICAgICAgICAgIGlmIChtYWpfc3RhdCAhPSBHU1NfU19DT01QTEVU RSkgeworICAgICAgICAgICAgICAgICAgICAgIHVzZXJfZ3NzX2Vycm9yKG1hal9zdGF0LCBtaW5f c3RhdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZnRwX2RwbCA9PSBG UExfUFJWKT8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmFpbGVkIHVu c2VhbGluZyBFTkMgbWVzc2FnZSI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgImZhaWxlZCB1bnNlYWxpbmcgTUlDIG1lc3NhZ2UiKTsKKyAgICAgICAgICAgICAgICAgICAg ICByZXR1cm4gRVJSOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgbWVt Y3B5KHVjYnVmLCBtc2dfYnVmLnZhbHVlLCBuaW4gPSBidWZwID0gbXNnX2J1Zi5sZW5ndGgpOwor ICAgICAgICAgICAgICAgICAgZ3NzX3JlbGVhc2VfYnVmZmVyKCZtaW5fc3RhdCwgJm1zZ19idWYp OworICAgICAgICAgICAgICB9CisjZW5kaWYgLyogRlRQX0dTU0FQSSAqLworICAgICAgICAgICAg ICAvKiBPdGhlciBhdXRoIHR5cGVzIGdvIGhlcmUgLi4uICovCisKKyAgICAgICAgICAgICAgLyog VXBkYXRlIGZpbGUgdHJhbnNmZXIgZGlzcGxheSAqLworICAgICAgICAgICAgICBycGFja2V0cysr OworICAgICAgICAgICAgICBwa3RudW0rKzsKKyAgICAgICAgICAgICAgaWYgKGZkaXNwbGEgIT0g WFlGRF9CKSB7CisgICAgICAgICAgICAgICAgICBycGt0bCA9IG5pbjsKKyAgICAgICAgICAgICAg ICAgIGZ0c2NyZWVuKFNDUl9QVCwnRCcsKENLX09GRl9UKXJwYWNrZXRzLE5VTEwpOworICAgICAg ICAgICAgICB9CisgICAgICAgICAgfQorICAgIH0KKyAgICBpZiAobmluID09IDApCisgICAgICBy ZXR1cm4oRU9GKTsKKyAgICBlbHNlCisgICAgICByZXR1cm4odWNidWZbYnVmcCAtIG5pbi0tXSk7 Cit9CisKKy8qIHNlY3VyZV9nZXRjKGZkLGZjKQorICogQ2FsbCB3aXRoOgorICogICBmZCA9IGZp bGUgZGVzY3JpcHRvciBmb3IgY29ubmVjdGlvbi4KKyAqICAgZmMgPSAwIHRvIGdldCBhIGNoYXJh Y3RlciwgZmMgIT0gMCB0byBpbml0aWFsaXplIGJ1ZmZlciBwb2ludGVycy4KKyAqIFJldHVybnM6 CisgKiAgIGM+PTAgb24gc3VjY2VzcyAoY2hhcmFjdGVyIHZhbHVlKQorICogICAtMSAgIG9uIEVP RgorICogICAtMiAgIG9uIHNlY3VyaXR5IGVycm9yCisgKiAgIC0zICAgb24gdGltZW91dCAoaWYg YnVpbHQgd2l0aCBGVFBfVElNRU9VVCBkZWZpbmVkKQorICovCitzdGF0aWMgaW50CitzZWN1cmVf Z2V0YyhmZCxmYykgaW50IGZkLGZjOyB7CQkvKiBmaWxlIGRlc2NyaXB0b3IsIGZ1bmN0aW9uIGNv ZGUgKi8KKworICAgIGlmICghZnRwaXNzZWN1cmUoKSkgeworICAgICAgICBzdGF0aWMgdW5zaWdu ZWQgaW50IG5pbiA9IDAsIGJ1ZnAgPSAwOworCWlmIChmYykgeworCSAgICBuaW4gPSBidWZwID0g MDsKKwkgICAgdWNidWZbMF0gPSBOVUw7CisJICAgIHJldHVybigwKTsKKwl9CisgICAgICAgIGlm IChuaW4gPT0gMCkgeworICAgICAgICAgICAgaWYgKGlzY2FuY2VsZWQoKSkKKyAgICAgICAgICAg ICAgcmV0dXJuKC05KTsKKworI2lmZGVmIEZUUF9USU1FT1VUCisJICAgIGlmIChjaGVja19kYXRh X2Nvbm5lY3Rpb24oZmQsMCkgPCAwKSB7CisgICAgICAgICAgICAgICAgZGVidWcoRjEwMCwic2Vj dXJlX2dldGMgVElNRU9VVCIsIiIsMCk7CisgICAgICAgICAgICAgICAgbmluID0gYnVmcCA9IDA7 CisJCWZ0cF90aW1lZF9vdXQgPSAxOworCQlyZXR1cm4oLTMpOworCSAgICB9CQkKKyNlbmRpZgkv KiBGVFBfVElNRU9VVCAqLworCisgICAgICAgICAgICBuaW4gPSBidWZwID0gcmVjdihmZCwoY2hh ciAqKXVjYnVmLGFjdHVhbGJ1ZiwwKTsKKyAgICAgICAgICAgIGlmICgobmluID09IDApIHx8IChu aW4gPT0gKHVuc2lnbmVkIGludCktMSkpIHsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJz ZWN1cmVfZ2V0YyByZWN2IGVycm5vIixja2l0b2EobmluKSxlcnJubyk7CisgICAgICAgICAgICAg ICAgZGVidWcoRjEwMSwic2VjdXJlX2dldGMgcmV0dXJucyBFT0YiLCIiLEVPRik7CisgICAgICAg ICAgICAgICAgbmluID0gYnVmcCA9IDA7CisgICAgICAgICAgICAgICAgcmV0dXJuKEVPRik7Cisg ICAgICAgICAgICB9CisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJmdHAgc2VjdXJlX2dldGMgcmVj diIsIiIsbmluKTsKKyAgICAgICAgICAgIGNraGV4ZHVtcCgiZnRwIHNlY3VyZV9nZXRjIHJlY3Yi LHVjYnVmLDE2KTsKKyAgICAgICAgICAgIHJwYWNrZXRzKys7CisgICAgICAgICAgICBwa3RudW0r KzsKKyAgICAgICAgICAgIGlmIChmZGlzcGxhICE9IFhZRkRfQikgeworICAgICAgICAgICAgICAg IHJwa3RsID0gbmluOworICAgICAgICAgICAgICAgIGZ0c2NyZWVuKFNDUl9QVCwnRCcsKENLX09G Rl9UKXJwYWNrZXRzLE5VTEwpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJl dHVybih1Y2J1ZltidWZwIC0gbmluLS1dKTsKKyAgICB9IGVsc2UKKyAgICAgIHJldHVybihzZWN1 cmVfZ2V0Ynl0ZShmZCxmYykpOworfQorCisvKiByZXR1cm5zOgorICogICAgIG4+MCAgb24gc3Vj Y2VzcyAobiA9PSAjIG9mIGJ5dGVzIHJlYWQpCisgKiAgICAgICAwICBvbiBFT0YKKyAqICAgICAg LTEgIG9uIGVycm9yIChlcnJubyBzZXQpLCBvbmx5IGZvciBGUExfQ0xSCisgKiAgICAgIC0yICBv biBzZWN1cml0eSBlcnJvcgorICovCitzdGF0aWMgaW50CitzZWN1cmVfcmVhZChmZCwgYnVmLCBu Ynl0ZSkgaW50IGZkOyBjaGFyICpidWY7IGludCBuYnl0ZTsgeworICAgIHN0YXRpYyBpbnQgYyA9 IDA7CisgICAgaW50IGk7CisKKyAgICBkZWJ1ZyhGMTAxLCJzZWN1cmVfcmVhZCBieXRlcyByZXF1 ZXN0ZWQiLCIiLG5ieXRlKTsKKyAgICBpZiAoYyA9PSBFT0YpCisgICAgICByZXR1cm4oYyA9IDAp OworICAgIGZvciAoaSA9IDA7IG5ieXRlID4gMDsgbmJ5dGUtLSkgeworICAgICAgICBjID0gc2Vj dXJlX2dldGMoZmQsMCk7CisgICAgICAgIHN3aXRjaCAoYykgeworICAgICAgICAgIGNhc2UgLTk6 ICAgICAgICAgICAgICAgICAgICAgIC8qIENhbmNlbGVkIGZyb20ga2V5Ym9hcmQgKi8KKyAgICAg ICAgICAgIGRlYnVnKEYxMDEsImZ0cCBzZWN1cmVfcmVhZCBpbnRlcnJ1cHRlZCIsIiIsYyk7Cisg ICAgICAgICAgICByZXR1cm4oMCk7CisgICAgICAgICAgY2FzZSBFUlI6CisgICAgICAgICAgICBk ZWJ1ZyhGMTAxLCJmdHAgc2VjdXJlX3JlYWQgZXJyb3IiLCIiLGMpOworICAgICAgICAgICAgcmV0 dXJuKGMpOworICAgICAgICAgIGNhc2UgRU9GOgorICAgICAgICAgICAgZGVidWcoRjEwMSwiZnRw IHNlY3VyZV9yZWFkIEVPRiIsIiIsYyk7CisgICAgICAgICAgICBpZiAoIWkpCisgICAgICAgICAg ICAgIGMgPSAwOworICAgICAgICAgICAgcmV0dXJuKGkpOworI2lmZGVmIEZUUF9USU1FT1VUCisg ICAgICAgICAgY2FzZSAtMzoKKyAgICAgICAgICAgIGRlYnVnKEYxMDEsImZ0cCBzZWN1cmVfcmVh ZCB0aW1lb3V0IiwiIixjKTsKKwkgICAgcmV0dXJuKGMpOworI2VuZGlmCS8qIEZUUF9USU1FT1VU ICovCisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJ1ZltpKytdID0gYzsKKyAgICAg ICAgfQorICAgIH0KKyAgICByZXR1cm4oaSk7Cit9CisKKyNpZmRlZiBVU0VfUlVTRVJQQVNTCisv KiBCRUdJTl9SVVNFUlBBU1MKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5ODUgUmVnZW50cyBvZiB0 aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3 aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0 aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1 dGlvbi4KKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJl cyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dp bmcgYWNrbm93bGVkZ2VtZW50OgorICogICAgICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdh cmUgZGV2ZWxvcGVkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mCisgKiAgICAgIENhbGlmb3JuaWEsIEJl cmtlbGV5IGFuZCBpdHMgY29udHJpYnV0b3JzLgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0 aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1h eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhp cyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQg Q09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VO VFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNU LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERB TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT VElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBM SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ U0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLwor CisjaWZuZGVmIGxpbnQKK3N0YXRpYyBjaGFyIHNjY3NpZFtdID0gIkAoIylydXNlcnBhc3MuYyA1 LjMgKEJlcmtlbGV5KSAzLzEvOTEiOworI2VuZGlmIC8qIG5vdCBsaW50ICovCisKKyNpZm5kZWYg TUFYSE9TVE5BTUVMRU4KKyNkZWZpbmUgTUFYSE9TVE5BTUVMRU4gNjQKKyNlbmRpZgorCitjaGFy ICogcmVudmxvb2soKTsKK3N0YXRpYyBGSUxFICogY2ZpbGU7CisKKyNkZWZpbmUgREVGQVVMVCAx CisjZGVmaW5lIExPR0lOICAgMgorI2RlZmluZSBQQVNTV0QgIDMKKyNkZWZpbmUgQUNDT1VOVCA0 CisjZGVmaW5lIE1BQ0RFRiAgNQorI2RlZmluZSBJRCAgICAgIDEwCisjZGVmaW5lIE1BQ0ggICAg MTEKKworc3RhdGljIGNoYXIgdG9rdmFsWzEwMF07CisKK3N0YXRpYyBzdHJ1Y3QgdG9rdGFiIHsK KyAgICBjaGFyICp0b2tzdHI7CisgICAgaW50IHR2YWw7Cit9IHRva3RhYltdPSB7CisgICAgImRl ZmF1bHQiLCAgREVGQVVMVCwKKyAgICAibG9naW4iLCAgICBMT0dJTiwKKyAgICAicGFzc3dvcmQi LCBQQVNTV0QsCisgICAgInBhc3N3ZCIsICAgUEFTU1dELAorICAgICJhY2NvdW50IiwgIEFDQ09V TlQsCisgICAgIm1hY2hpbmUiLCAgTUFDSCwKKyAgICAibWFjZGVmIiwgICBNQUNERUYsCisgICAg MCwgICAgICAgICAgMAorfTsKKworc3RhdGljIGludAordG9rZW4oKSB7CisgICAgY2hhciAqY3A7 CisgICAgaW50IGM7CisgICAgc3RydWN0IHRva3RhYiAqdDsKKworICAgIGlmIChmZW9mKGNmaWxl KSkKKyAgICAgIHJldHVybigwKTsKKyAgICB3aGlsZSAoKGMgPSBnZXRjKGNmaWxlKSkgIT0gRU9G ICYmCisgICAgICAgICAgIChjID09ICdcbicgfHwgYyA9PSAnXHQnIHx8IGMgPT0gJyAnIHx8IGMg PT0gJywnKSkKKyAgICAgIGNvbnRpbnVlOworICAgIGlmIChjID09IEVPRikKKyAgICAgIHJldHVy bigwKTsKKyAgICBjcCA9IHRva3ZhbDsKKyAgICBpZiAoYyA9PSAnIicpIHsKKyAgICAgICAgd2hp bGUgKChjID0gZ2V0YyhjZmlsZSkpICE9IEVPRiAmJiBjICE9ICciJykgeworICAgICAgICAgICAg aWYgKGMgPT0gJ1xcJykKKyAgICAgICAgICAgICAgYyA9IGdldGMoY2ZpbGUpOworICAgICAgICAg ICAgKmNwKysgPSBjOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgKmNwKysgPSBj OworICAgICAgICB3aGlsZSAoKGMgPSBnZXRjKGNmaWxlKSkgIT0gRU9GCisgICAgICAgICAgICAg ICAmJiBjICE9ICdcbicgJiYgYyAhPSAnXHQnICYmIGMgIT0gJyAnICYmIGMgIT0gJywnKSB7Cisg ICAgICAgICAgICBpZiAoYyA9PSAnXFwnKQorICAgICAgICAgICAgICBjID0gZ2V0YyhjZmlsZSk7 CisgICAgICAgICAgICAqY3ArKyA9IGM7CisgICAgICAgIH0KKyAgICB9CisgICAgKmNwID0gMDsK KyAgICBpZiAodG9rdmFsWzBdID09IDApCisgICAgICByZXR1cm4oMCk7CisgICAgZm9yICh0ID0g dG9rdGFiOyB0LT50b2tzdHI7IHQrKykKKyAgICAgIGlmICghc3RyY21wKHQtPnRva3N0ciwgdG9r dmFsKSkKKyAgICAgICAgcmV0dXJuKHQtPnR2YWwpOworICAgIHJldHVybihJRCk7Cit9CisKK3J1 c2VycGFzcyhob3N0LCBhbmFtZSwgYXBhc3MsIGFhY2N0KQorICAgIGNoYXIgKmhvc3QsICoqYW5h bWUsICoqYXBhc3MsICoqYWFjY3Q7Cit7CisgICAgY2hhciAqaGRpciwgYnVmW0ZUUF9CVUZTSVpd LCAqdG1wOworICAgIGNoYXIgbXluYW1lW01BWEhPU1ROQU1FTEVOXSwgKm15ZG9tYWluOworICAg IGludCB0LCBpLCBjLCB1c2VkZWZhdWx0ID0gMDsKKyNpZmRlZiBOVAorICAgIHN0cnVjdCBfc3Rh dCBzdGI7CisjZWxzZSAvKiBOVCAqLworICAgIHN0cnVjdCBzdGF0IHN0YjsKKyNlbmRpZiAvKiBO VCAqLworCisgICAgaGRpciA9IGdldGVudigiSE9NRSIpOworICAgIGlmIChoZGlyID09IE5VTEwp CisgICAgICAgIGhkaXIgPSAiLiI7CisgICAgY2ttYWttc2coYnVmLEZUUF9CVUZTSVosaGRpciwi Ly5uZXRyYyIsTlVMTCxOVUxMKTsKKyAgICBjZmlsZSA9IGZvcGVuKGJ1ZiwgInIiKTsKKyAgICBp ZiAoY2ZpbGUgPT0gTlVMTCkgeworICAgICAgICBpZiAoZXJybm8gIT0gRU5PRU5UKQorICAgICAg ICAgIHBlcnJvcihidWYpOworICAgICAgICByZXR1cm4oMCk7CisgICAgfQorICAgIGlmIChnZXRo b3N0bmFtZShteW5hbWUsIE1BWEhPU1ROQU1FTEVOKSA8IDApCisgICAgICBteW5hbWVbMF0gPSAn XDAnOworICAgIGlmICgobXlkb21haW4gPSBja3N0cmNocihteW5hbWUsICcuJykpID09IE5VTEwp CisgICAgICBteWRvbWFpbiA9ICIiOworCisgIG5leHQ6CisgICAgd2hpbGUgKCh0ID0gdG9rZW4o KSkpIHN3aXRjaCh0KSB7CisKKyAgICAgIGNhc2UgREVGQVVMVDoKKyAgICAgICAgdXNlZGVmYXVs dCA9IDE7CisgICAgICAgIC8qIEZBTEwgVEhST1VHSCAqLworCisgICAgICBjYXNlIE1BQ0g6Cisg ICAgICAgIGlmICghdXNlZGVmYXVsdCkgeworICAgICAgICAgICAgaWYgKHRva2VuKCkgIT0gSUQp CisgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAq IEFsbG93IG1hdGNoIGVpdGhlciBmb3IgdXNlcidzIGlucHV0IGhvc3QgbmFtZQorICAgICAgICAg ICAgICogb3Igb2ZmaWNpYWwgaG9zdG5hbWUuICBBbHNvIGFsbG93IG1hdGNoIG9mCisgICAgICAg ICAgICAgKiBpbmNvbXBsZXRlbHktc3BlY2lmaWVkIGhvc3QgaW4gbG9jYWwgZG9tYWluLgorICAg ICAgICAgICAgICovCisgICAgICAgICAgICBpZiAoY2tzdHJjbXAoaG9zdCwgdG9rdmFsLC0xLDEp ID09IDApCisgICAgICAgICAgICAgIGdvdG8gbWF0Y2g7CisgICAgICAgICAgICBpZiAoY2tzdHJj bXAoZnRwX2hvc3QsIHRva3ZhbCwtMSwwKSA9PSAwKQorICAgICAgICAgICAgICBnb3RvIG1hdGNo OworICAgICAgICAgICAgaWYgKCh0bXAgPSBja3N0cmNocihmdHBfaG9zdCwgJy4nKSkgIT0gTlVM TCAmJgorICAgICAgICAgICAgICAgIGNrc3RyY21wKHRtcCwgbXlkb21haW4sLTEsMSkgPT0gMCAm JgorICAgICAgICAgICAgICAgIGNrc3RyY21wKGZ0cF9ob3N0LCB0b2t2YWwsIHRtcC1mdHBfaG9z dCwwKSA9PSAwICYmCisgICAgICAgICAgICAgICAgdG9rdmFsW3RtcCAtIGZ0cF9ob3N0XSA9PSAn XDAnKQorICAgICAgICAgICAgICBnb3RvIG1hdGNoOworICAgICAgICAgICAgaWYgKCh0bXAgPSBj a3N0cmNocihob3N0LCAnLicpKSAhPSBOVUxMICYmCisgICAgICAgICAgICAgICAgY2tzdHJjbXAo dG1wLCBteWRvbWFpbiwtMSwxKSA9PSAwICYmCisgICAgICAgICAgICAgICAgY2tzdHJjbXAoaG9z dCwgdG9rdmFsLCB0bXAgLSBob3N0LCAwKSA9PSAwICYmCisgICAgICAgICAgICAgICAgdG9rdmFs W3RtcCAtIGhvc3RdID09ICdcMCcpCisgICAgICAgICAgICAgIGdvdG8gbWF0Y2g7CisgICAgICAg ICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICBtYXRjaDoKKyAgICAgICAgd2hpbGUg KCh0ID0gdG9rZW4oKSkgJiYgdCAhPSBNQUNIICYmIHQgIT0gREVGQVVMVCkgc3dpdGNoKHQpIHsK KworICAgICAgICAgIGNhc2UgTE9HSU46CisgICAgICAgICAgICBpZiAodG9rZW4oKSkKKyAgICAg ICAgICAgICAgaWYgKCphbmFtZSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAqYW5hbWUgPSBt YWxsb2MoKHVuc2lnbmVkKSBzdHJsZW4odG9rdmFsKSArIDEpOworICAgICAgICAgICAgICAgICAg c3RyY3B5KCphbmFtZSwgdG9rdmFsKTsgICAgICAvKiBzYWZlICovCisgICAgICAgICAgICAgIH0g ZWxzZSB7CisgICAgICAgICAgICAgICAgICBpZiAoc3RyY21wKCphbmFtZSwgdG9rdmFsKSkKKyAg ICAgICAgICAgICAgICAgICAgZ290byBuZXh0OworICAgICAgICAgICAgICB9CisgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgICBjYXNlIFBBU1NXRDoKKyAgICAgICAgICAgIGlmIChzdHJjbXAo KmFuYW1lLCAiYW5vbnltb3VzIikgJiYKKyAgICAgICAgICAgICAgICBmc3RhdChmaWxlbm8oY2Zp bGUpLCAmc3RiKSA+PSAwICYmCisgICAgICAgICAgICAgICAgKHN0Yi5zdF9tb2RlICYgMDc3KSAh PSAwKSB7CisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvciAtIC5uZXRyYyBm aWxlIG5vdCBjb3JyZWN0IG1vZGUuXG4iKTsKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVy ciwgIlJlbW92ZSBwYXNzd29yZCBvciBjb3JyZWN0IG1vZGUuXG4iKTsKKyAgICAgICAgICAgICAg ICBnb3RvIGJhZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0b2tlbigpICYmICph cGFzcyA9PSAwKSB7CisgICAgICAgICAgICAgICAgKmFwYXNzID0gbWFsbG9jKCh1bnNpZ25lZCkg c3RybGVuKHRva3ZhbCkgKyAxKTsKKyAgICAgICAgICAgICAgICBzdHJjcHkoKmFwYXNzLCB0b2t2 YWwpOyAgICAgICAgICAvKiBzYWZlICovCisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVh azsKKyAgICAgICAgICBjYXNlIEFDQ09VTlQ6CisgICAgICAgICAgICBpZiAoZnN0YXQoZmlsZW5v KGNmaWxlKSwgJnN0YikgPj0gMAorICAgICAgICAgICAgICAgICYmIChzdGIuc3RfbW9kZSAmIDA3 NykgIT0gMCkgeworICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3IgLSAubmV0 cmMgZmlsZSBub3QgY29ycmVjdCBtb2RlLlxuIik7CisgICAgICAgICAgICAgICAgZnByaW50Zihz dGRlcnIsICJSZW1vdmUgYWNjb3VudCBvciBjb3JyZWN0IG1vZGUuXG4iKTsKKyAgICAgICAgICAg ICAgICBnb3RvIGJhZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0b2tlbigpICYm ICphYWNjdCA9PSAwKSB7CisgICAgICAgICAgICAgICAgKmFhY2N0ID0gbWFsbG9jKCh1bnNpZ25l ZCkgc3RybGVuKHRva3ZhbCkgKyAxKTsKKyAgICAgICAgICAgICAgICBzdHJjcHkoKmFhY2N0LCB0 b2t2YWwpOyAgICAgICAgICAvKiBzYWZlICovCisgICAgICAgICAgICB9CisgICAgICAgICAgICBi cmVhazsKKworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwg IlVua25vd24gLm5ldHJjIGtleXdvcmQgJXNcbiIsIHRva3ZhbCk7CisgICAgICAgICAgICBicmVh azsKKyAgICAgICAgfQorICAgICAgICBnb3RvIGRvbmU7CisgICAgfQorCisgIGRvbmU6CisgICAg ZmNsb3NlKGNmaWxlKTsKKyAgICByZXR1cm4oMCk7CisKKyAgYmFkOgorICAgIGZjbG9zZShjZmls ZSk7CisgICAgcmV0dXJuKC0xKTsKK30KKyNlbmRpZiAvKiBVU0VfUlVTRVJQQVNTICovCisKK3N0 YXRpYyBjaGFyICpyYWRpeE4gPQorICAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZn aGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyI7CisKK3N0YXRpYyBjaGFyIHBhZCA9ICc9 JzsKKworc3RhdGljIGludAorcmFkaXhfZW5jb2RlKGluYnVmLCBvdXRidWYsIGlubGVuLCBvdXRs ZW4sIGRlY29kZSkKKyAgICBDSEFSIGluYnVmW10sIG91dGJ1ZltdOworICAgIGludCBpbmxlbiwg Km91dGxlbiwgZGVjb2RlOworeworICAgIGludCBpLCBqLCBEID0gMDsKKyAgICBjaGFyICpwOwor ICAgIENIQVIgYyA9IE5VTDsKKworICAgIGlmIChkZWNvZGUpIHsKKyAgICAgICAgZm9yIChpID0g MCwgaiA9IDA7IGluYnVmW2ldICYmIGluYnVmW2ldICE9IHBhZDsgaSsrKSB7CisgICAgICAgICAg ICBpZiAoKHAgPSBja3N0cmNocihyYWRpeE4sIGluYnVmW2ldKSkgPT0gTlVMTCkKKyAgICAgICAg ICAgICAgcmV0dXJuKDEpOworICAgICAgICAgICAgRCA9IHAgLSByYWRpeE47CisgICAgICAgICAg ICBzd2l0Y2ggKGkmMykgeworICAgICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgICAg b3V0YnVmW2pdID0gRDw8MjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg Y2FzZSAxOgorICAgICAgICAgICAgICAgIG91dGJ1ZltqKytdIHw9IEQ+PjQ7CisgICAgICAgICAg ICAgICAgb3V0YnVmW2pdID0gKEQmMTUpPDw0OworICAgICAgICAgICAgICAgIGJyZWFrOworICAg ICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgb3V0YnVmW2orK10gfD0gRD4+MjsK KyAgICAgICAgICAgICAgICBvdXRidWZbal0gPSAoRCYzKTw8NjsKKyAgICAgICAgICAgICAgICBi cmVhazsKKyAgICAgICAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgICAgIG91dGJ1ZltqKytd IHw9IEQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoaiA9PSAqb3V0bGVuKQorICAg ICAgICAgICAgICByZXR1cm4oNCk7CisgICAgICAgIH0KKyAgICAgICAgc3dpdGNoIChpJjMpIHsK KyAgICAgICAgICBjYXNlIDE6IHJldHVybigzKTsKKyAgICAgICAgICBjYXNlIDI6IGlmIChEJjE1 KSByZXR1cm4oMyk7CisgICAgICAgICAgICBpZiAoc3RyY21wKChjaGFyICopJmluYnVmW2ldLCAi PT0iKSkgcmV0dXJuKDIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSAzOiBp ZiAoRCYzKSByZXR1cm4oMyk7CisgICAgICAgICAgICBpZiAoc3RyY21wKChjaGFyICopJmluYnVm W2ldLCAiPSIpKSAgcmV0dXJuKDIpOworICAgICAgICB9CisgICAgICAgICpvdXRsZW4gPSBqOwor ICAgIH0gZWxzZSB7CisgICAgICAgIGZvciAoaSA9IDAsIGogPSAwOyBpIDwgaW5sZW47IGkrKykg eworICAgICAgICAgICAgc3dpdGNoIChpJTMpIHsKKyAgICAgICAgICAgICAgY2FzZSAwOgorICAg ICAgICAgICAgICAgIG91dGJ1ZltqKytdID0gcmFkaXhOW2luYnVmW2ldPj4yXTsKKyAgICAgICAg ICAgICAgICBjID0gKGluYnVmW2ldJjMpPDw0OworICAgICAgICAgICAgICAgIGJyZWFrOworICAg ICAgICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgICAgb3V0YnVmW2orK10gPSByYWRpeE5b Y3xpbmJ1ZltpXT4+NF07CisgICAgICAgICAgICAgICAgYyA9IChpbmJ1ZltpXSYxNSk8PDI7Cisg ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAg ICAgICBvdXRidWZbaisrXSA9IHJhZGl4TltjfGluYnVmW2ldPj42XTsKKyAgICAgICAgICAgICAg ICBvdXRidWZbaisrXSA9IHJhZGl4TltpbmJ1ZltpXSY2M107CisgICAgICAgICAgICAgICAgYyA9 IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoaiA9PSAqb3V0bGVuKQorICAgICAg ICAgICAgICByZXR1cm4oNCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGklMykgb3V0YnVmW2or K10gPSByYWRpeE5bY107CisgICAgICAgIHN3aXRjaCAoaSUzKSB7CisgICAgICAgICAgY2FzZSAx OiBvdXRidWZbaisrXSA9IHBhZDsKKyAgICAgICAgICBjYXNlIDI6IG91dGJ1ZltqKytdID0gcGFk OworICAgICAgICB9CisgICAgICAgIG91dGJ1Zlsqb3V0bGVuID0gal0gPSAnXDAnOworICAgIH0K KyAgICByZXR1cm4oMCk7Cit9CisKK3N0YXRpYyBjaGFyICoKK3JhZGl4X2Vycm9yKGUpIGludCBl OworeworICAgIHN3aXRjaCAoZSkgeworICAgICAgY2FzZSAwOiAgcmV0dXJuKCJTdWNjZXNzIik7 CisgICAgICBjYXNlIDE6ICByZXR1cm4oIkJhZCBjaGFyYWN0ZXIgaW4gZW5jb2RpbmciKTsKKyAg ICAgIGNhc2UgMjogIHJldHVybigiRW5jb2Rpbmcgbm90IHByb3Blcmx5IHBhZGRlZCIpOworICAg ICAgY2FzZSAzOiAgcmV0dXJuKCJEZWNvZGVkICMgb2YgYml0cyBub3QgYSBtdWx0aXBsZSBvZiA4 Iik7CisgICAgICBjYXNlIDQ6ICByZXR1cm4oIk91dHB1dCBidWZmZXIgdG9vIHNtYWxsIik7Cisg ICAgICBkZWZhdWx0OiByZXR1cm4oIlVua25vd24gZXJyb3IiKTsKKyAgICB9Cit9CisvKiBFTkRf UlVTRVJQQVNTICovCisKKyNpZmRlZiBGVFBfU1JQCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyB8 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgfAorIHwgICBQYWNrYWdlOiBzcnBmdHAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgfCAgIEF1dGhvcjog RXVnZW5lIEpob25nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHwKKyB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICstLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwor CisvKgorICogQ29weXJpZ2h0IChjKSAxOTk3LTE5OTkgIFRoZSBTdGFuZm9yZCBTUlAgQXV0aGVu dGljYXRpb24gUHJvamVjdAorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBQZXJtaXNz aW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRh aW5pbmcKKyAqIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50 YXRpb24gZmlsZXMgKHRoZQorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJl IHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICogd2l0aG91dCBsaW1pdGF0aW9uIHRo ZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICogZGlzdHJp YnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5k IHRvCisgKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQg dG8gZG8gc28sIHN1YmplY3QgdG8KKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisg KiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBz aGFsbCBiZQorICogaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9u cyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUy1J UyIgQU5EIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTLCBJTVBMSUVE IE9SIE9USEVSV0lTRSwgSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZCisgKiBXQVJS QU5UWSBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UuCisgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgU1RBTkZPUkQgQkUgTElBQkxFIEZPUiBBTlkg U1BFQ0lBTCwgSU5DSURFTlRBTCwKKyAqIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF UyBPRiBBTlkgS0lORCwgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUgorICogUkVTVUxUSU5HIEZS T00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBPUiBOT1QgQURWSVNFRCBP RgorICogVEhFIFBPU1NJQklMSVRZIE9GIERBTUFHRSwgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB QklMSVRZLCBBUklTSU5HIE9VVAorICogT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0Ug T1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqCisgKiBJbiBhZGRpdGlvbiwgdGhl IGZvbGxvd2luZyBjb25kaXRpb25zIGFwcGx5OgorICoKKyAqIDEuIEFueSBzb2Z0d2FyZSB0aGF0 IGluY29ycG9yYXRlcyB0aGUgU1JQIGF1dGhlbnRpY2F0aW9uIHRlY2hub2xvZ3kKKyAqICAgIG11 c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZ21lbnQ6CisgKiAgICAiVGhpcyBwcm9k dWN0IHVzZXMgdGhlICdTZWN1cmUgUmVtb3RlIFBhc3N3b3JkJyBjcnlwdG9ncmFwaGljCisgKiAg ICAgYXV0aGVudGljYXRpb24gc3lzdGVtIGRldmVsb3BlZCBieSBUb20gV3UgKHRqd0BDUy5TdGFu Zm9yZC5FRFUpLiIKKyAqCisgKiAyLiBBbnkgc29mdHdhcmUgdGhhdCBpbmNvcnBvcmF0ZXMgYWxs IG9yIHBhcnQgb2YgdGhlIFNSUCBkaXN0cmlidXRpb24KKyAqICAgIGl0c2VsZiBtdXN0IGFsc28g ZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorICogICAgIlRoaXMgcHJvZHVj dCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgVG9tIFd1IGFuZCBFdWdlbmUKKyAqICAg ICBKaG9uZyBmb3IgdGhlIFNSUCBEaXN0cmlidXRpb24gKGh0dHA6Ly9zcnAuc3RhbmZvcmQuZWR1 L3NycC8pLiIKKyAqCisgKiAzLiBSZWRpc3RyaWJ1dGlvbnMgaW4gc291cmNlIG9yIGJpbmFyeSBm b3JtIG11c3QgcmV0YWluIGFuIGludGFjdCBjb3B5CisgKiAgICBvZiB0aGlzIGNvcHlyaWdodCBu b3RpY2UgYW5kIGxpc3Qgb2YgY29uZGl0aW9ucy4KKyAqLworCisjZGVmaW5lIFNSUF9QUk9UX1ZF UlNJT04gICAgICAgIDEKKworI2lmZGVmIENLX0VOQ1JZUFRJT04KKyNkZWZpbmUgU1JQX0RFRkFV TFRfQ0lQSEVSICAgICAgQ0lQSEVSX0lEX0NBU1Q1X0NCQworI2Vsc2UKKyNkZWZpbmUgU1JQX0RF RkFVTFRfQ0lQSEVSICAgICAgQ0lQSEVSX0lEX05PTkUKKyNlbmRpZiAvKiBDS19FTkNSWVBUSU9O ICovCisKKyNkZWZpbmUgU1JQX0RFRkFVTFRfSEFTSCAgICAgICAgSEFTSF9JRF9TSEEKKworQ0hB UiBzcnBfcHJlZl9jaXBoZXIgPSBDSVBIRVJfSURfREVTM19FQ0I7CitDSEFSIHNycF9wcmVmX2hh c2ggPSBIQVNIX0lEX1NIQTsKKworc3RhdGljIHN0cnVjdCB0X2NsaWVudCAqdGMgPSBOVUxMOwor c3RhdGljIENIQVIgKnNrZXkgPSBOVUxMOworc3RhdGljIGtyeXB0b19jb250ZXh0ICppbmNyeXB0 ID0gTlVMTDsKK3N0YXRpYyBrcnlwdG9fY29udGV4dCAqb3V0Y3J5cHQgPSBOVUxMOworCit0eXBl ZGVmIHVuc2lnbmVkIGludCBzcnBfdWludDMyOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworIHwgc3JwX3NlbGNpcGhl cjogc2VsZWN0IGNpcGhlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyArLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0qLworc3RhdGljIGludAorc3JwX3NlbGNpcGhlciAoY25hbWUpIGNoYXIgKmNuYW1lOyB7Cisg ICAgY2lwaGVyX2Rlc2MgKmNkOworCisgICAgaWYgKCEoY2QgPSBjaXBoZXJfZ2V0ZGVzY2J5bmFt ZSAoY25hbWUpKSkgeworICAgICAgICBpbnQgaTsKKyAgICAgICAgQ0hBUiAqbGlzdCA9IGNpcGhl cl9nZXRsaXN0ICgpOworCisgICAgICAgIGZwcmludGYgKHN0ZGVyciwgImZ0cDogc3VwcG9ydGVk IGNpcGhlcnM6XG5cbiIpOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc3RybGVuIChsaXN0KTsg aSsrKQorICAgICAgICAgIGZwcmludGYgKHN0ZGVyciwgIiAgICAlc1xuIiwgKGNpcGhlcl9nZXRk ZXNjYnlpZChsaXN0W2ldKSktPm5hbWUpOworICAgICAgICBmcHJpbnRmIChzdGRlcnIsICJcbiIp OworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIHNycF9wcmVmX2NpcGhlciA9IGNkLT5p ZDsKKyAgICByZXR1cm4gMDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyB8IHNycF9zZWxoYXNoOiBzZWxlY3Qg aGFzaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0 YXRpYyBpbnQKK3NycF9zZWxoYXNoIChobmFtZSkgY2hhciAqaG5hbWU7IHsKKyAgICBoYXNoX2Rl c2MgKmhkOworCisgICAgaWYgKCEoaGQgPSBoYXNoX2dldGRlc2NieW5hbWUgKGhuYW1lKSkpIHsK KyAgICAgICAgaW50IGk7CisgICAgICAgIENIQVIgKmxpc3QgPSBoYXNoX2dldGxpc3QgKCk7CisK KyAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiZnRwOiBzdXBwb3J0ZWQgaGFzaCBmdW5jdGlvbnM6 XG5cbiIpOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc3RybGVuIChsaXN0KTsgaSsrKQorICAg ICAgICAgIGZwcmludGYgKHN0ZGVyciwgIiAgICAlc1xuIiwgKGhhc2hfZ2V0ZGVzY2J5aWQobGlz dFtpXSkpLT5uYW1lKTsKKyAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiXG4iKTsKKyAgICAgICAg cmV0dXJuIC0xOworICAgIH0KKyAgICBzcnBfcHJlZl9oYXNoID0gaGQtPmlkOworICAgIHJldHVy biAwOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKworIHwgc3JwX3VzZXJwYXNzOiBnZXQgdXNlcm5hbWUgYW5kIHBh c3N3b3JkICAgICAgICAgICAgICAgICAgICAgIHwKKyArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludAorc3Jw X3VzZXJwYXNzIChob3N0KSBjaGFyICpob3N0OyB7CisgICAgY2hhciB0bXBbQlVGU0laXSwgcHJv bXB0W1BST01QVFNJWl07CisgICAgY2hhciAqdXNlcjsKKworICAgIHVzZXIgPSBOVUxMOworI2lm ZGVmIFVTRV9SVVNFUlBBU1MKKyAgICBydXNlcnBhc3MgKGhvc3QsICZ1c2VyLCAmc3JwX3Bhc3Ms ICZzcnBfYWNjdCk7CisjZW5kaWYgLyogVVNFX1JVU0VSUEFTUyAqLworCisgICAgd2hpbGUgKHVz ZXIgPT0gTlVMTCkgICAgIHsKKyAgICAgICAgY2hhciAqbXluYW1lOworICAgICAgICBpbnQgb2s7 CisKKyAgICAgICAgbXluYW1lID0gd2hvYW1pKCk7CisgICAgICAgIGlmICghbXluYW1lKSBteW5h bWUgPSAiIjsKKyAgICAgICAgaWYgKG15bmFtZVswXSkKKyAgICAgICAgICBja21ha3htc2cocHJv bXB0LFBST01QVFNJWiwiIE5hbWUgKCIsaG9zdCwiOiIsbXluYW1lLCIpOiAiLAorICAgICAgICAg ICAgICAgICAgICBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMKTsKKyAgICAgICAg ZWxzZQorICAgICAgICAgIGNrbWFrbXNnKHByb21wdCxQUk9NUFRTSVosIiBOYW1lICgiLGhvc3Qs Iik6ICIsTlVMTCk7CisgICAgICAgIHRtcFswXSA9ICdcMCc7CisgICAgICAgIG9rID0gdXFfdHh0 KE5VTEwscHJvbXB0LDEsTlVMTCx0bXAsQlVGU0laLE5VTEwsCisgICAgICAgICAgICAgICAgICAg IERFRkFVTFRfVVFfVElNRU9VVCk7CisgICAgICAgIGlmICghb2sgfHwgKnRtcCA9PSAnXDAnKQor ICAgICAgICAgIHVzZXIgPSBteW5hbWU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICB1c2VyID0g YnJzdHJpcCh0bXApOworICAgIH0KKyAgICBja3N0cm5jcHkgKHNycF91c2VyLCB1c2VyLEJVRlNJ Wik7CisgICAgcmV0dXJuKDApOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworIHwgc3JwX3Jlc2V0OiByZXNldCBz cnAgaW5mb3JtYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyArLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwor c3RhdGljIGludAorc3JwX3Jlc2V0ICgpIHsKKyAgICBpZiAodGMpIHsgdF9jbGllbnRjbG9zZSAo dGMpOyB0YyA9IE5VTEw7IH0KKyAgICBpZiAoaW5jcnlwdCkgeyBrcnlwdG9fZGVsZXRlIChpbmNy eXB0KTsgaW5jcnlwdCA9IE5VTEw7IH0KKyAgICBpZiAob3V0Y3J5cHQpIHsga3J5cHRvX2RlbGV0 ZSAob3V0Y3J5cHQpOyBvdXRjcnlwdCA9IE5VTEw7IH0KKyAgICByZXR1cm4oMCk7Cit9CisKKy8q LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rCisgfCBzcnBfZnRwX2F1dGg6IHBlcmZvcm0gc3JwIGF1dGhlbnRpY2F0aW9uICAgICAg ICAgICAgICAgICAgICAgICAgIHwKKyArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludAorc3JwX2Z0cF9hdXRo KGhvc3QsIHVzZXIsIHBhc3MpCisgICAgY2hhciAqaG9zdDsKKyAgICBjaGFyICp1c2VyOworICAg IGNoYXIgKnBhc3M7Cit7CisgICAgc3RydWN0IHRfbnVtICp3cDsKKyAgICBzdHJ1Y3QgdF9udW0g TjsKKyAgICBzdHJ1Y3QgdF9udW0gZzsKKyAgICBzdHJ1Y3QgdF9udW0gczsKKyAgICBzdHJ1Y3Qg dF9udW0geXA7CisgICAgQ0hBUiBidWZbRlRQX0JVRlNJWl07CisgICAgQ0hBUiB0bXBbRlRQX0JV RlNJWl07CisgICAgQ0hBUiAqYnAsICpjcDsKKyAgICBpbnQgbiwgZSwgY2xlbiwgYmxlbiwgbGVu LCBpOworICAgIENIQVIgY2lkID0gMDsKKyAgICBDSEFSIGhpZCA9IDA7CisKKyAgICBzcnBfcGFz cyA9IHNycF9hY2N0ID0gMDsKKworICAgIG4gPSBmdHBjbWQoIkFVVEggU1JQIixOVUxMLDAsMCxm dHBfdmJtKTsKKyAgICBpZiAobiAhPSBSRVBMWV9DT05USU5VRSkgeworICAgICAgICBpZiAoZnRw X2RlYikKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiU1JQIHJlamVjdGVkIGFzIGFuIGF1 dGhlbnRpY2F0aW9uIHR5cGVcbiIpOworICAgICAgICByZXR1cm4oMCk7CisgICAgfSBlbHNlIHsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2VuZCBwcm90b2NvbCB2ZXJzaW9uICovCisg ICAgICAgIENIQVIgdmVyc1s0XTsKKyAgICAgICAgbWVtc2V0ICh2ZXJzLCAwLCA0KTsKKyAgICAg ICAgdmVyc1szXSA9IFNSUF9QUk9UX1ZFUlNJT047CisgICAgICAgIGlmICghcXVpZXQpCisgICAg ICAgICAgcHJpbnRmICgiU1JQIGFjY2VwdGVkIGFzIGF1dGhlbnRpY2F0aW9uIHR5cGUuXG4iKTsK KyAgICAgICAgYnAgPSB0bXA7IGJsZW4gPSAwOworICAgICAgICBzcnBfcHV0ICh2ZXJzLCAmYnAs IDQsICZibGVuKTsKKyAgICAgICAgbGVuID0gRlRQX0JVRlNJWjsKKyAgICAgICAgaWYgKGUgPSBy YWRpeF9lbmNvZGUgKHRtcCwgYnVmLCBibGVuLCAmbGVuLCBSQURJWF9FTkNPREUpKQorICAgICAg ICAgIGdvdG8gZW5jb2RlX2Vycm9yOworICAgICAgICByZXBseV9wYXJzZSA9ICJBREFUPSI7Cisg ICAgICAgIG4gPSBmdHBjbWQoIkFEQVQiLGJ1ZiwtMSwtMSwwKTsKKyAgICB9CisgICAgaWYgKG4g PT0gUkVQTFlfQ09OVElOVUUpIHsgICAgICAgICAgLyogR2V0IHByb3RvY29sIHZlcnNpb24gKi8K KyAgICAgICAgYnAgPSBidWY7CisgICAgICAgIGlmICghcmVwbHlfcGFyc2UpCisgICAgICAgICAg Z290byBkYXRhX2Vycm9yOworICAgICAgICBibGVuID0gRlRQX0JVRlNJWjsKKyAgICAgICAgaWYg KGUgPSByYWRpeF9lbmNvZGUocmVwbHlfcGFyc2UsIGJwLCAwLCAmYmxlbiwgUkFESVhfREVDT0RF KSkKKyAgICAgICAgICBnb3RvIGRlY29kZV9lcnJvcjsKKyAgICAgICAgaWYgKHNycF9nZXQgKCZi cCwgJmNwLCAmYmxlbiwgJmNsZW4pICE9IDQpCisgICAgICAgICAgZ290byBkYXRhX2Vycm9yOwor CisgICAgICAgIGlmIChob3N0KSB7ICAgICAgICAgICAgICAgICAgICAgLyogR2V0IHVzZXJuYW1l L3Bhc3N3b3JkIGlmIG5lZWRlZCAqLworICAgICAgICAgICAgc3JwX3VzZXJwYXNzIChob3N0KTsK KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNrc3RybmNweSAoc3JwX3VzZXIsIHVzZXIs IEJVRlNJWik7CisgICAgICAgICAgICBzcnBfcGFzcyA9IHBhc3M7CisgICAgICAgIH0KKyAgICAg ICAgYnAgPSB0bXA7IGJsZW4gPSAwOyAgICAgICAgICAgICAvKiBTZW5kIHVzZXJuYW1lICovCisg ICAgICAgIHNycF9wdXQgKHNycF91c2VyLCAmYnAsIHN0cmxlbiAoc3JwX3VzZXIpLCAmYmxlbik7 CisgICAgICAgIGxlbiA9IEZUUF9CVUZTSVo7CisgICAgICAgIGlmIChlID0gcmFkaXhfZW5jb2Rl ICh0bXAsIGJ1ZiwgYmxlbiwgJmxlbiwgUkFESVhfRU5DT0RFKSkKKyAgICAgICAgICBnb3RvIGVu Y29kZV9lcnJvcjsKKyAgICAgICAgcmVwbHlfcGFyc2UgPSAiQURBVD0iOworICAgICAgICBuID0g ZnRwY21kKCJBREFUIixidWYsLTEsLTEsMCk7CisgICAgfQorICAgIGlmIChuID09IFJFUExZX0NP TlRJTlVFKSB7ICAgICAgICAgIC8qIEdldCBOLCBnIGFuZCBzICovCisgICAgICAgIGJwID0gYnVm OworICAgICAgICBpZiAoIXJlcGx5X3BhcnNlKQorICAgICAgICAgIGdvdG8gZGF0YV9lcnJvcjsK KyAgICAgICAgYmxlbiA9IEZUUF9CVUZTSVo7CisgICAgICAgIGlmIChlID0gcmFkaXhfZW5jb2Rl IChyZXBseV9wYXJzZSwgYnAsIDAsICZibGVuLCBSQURJWF9ERUNPREUpKQorICAgICAgICAgIGdv dG8gZGVjb2RlX2Vycm9yOworICAgICAgICBpZiAoc3JwX2dldCAoJmJwLCAmKE4uZGF0YSksICZi bGVuLCAmKE4ubGVuKSkgPCAwKQorICAgICAgICAgIGdvdG8gZGF0YV9lcnJvcjsKKyAgICAgICAg aWYgKHNycF9nZXQgKCZicCwgJihnLmRhdGEpLCAmYmxlbiwgJihnLmxlbikpIDwgMCkKKyAgICAg ICAgICBnb3RvIGRhdGFfZXJyb3I7CisgICAgICAgIGlmIChzcnBfZ2V0ICgmYnAsICYocy5kYXRh KSwgJmJsZW4sICYocy5sZW4pKSA8IDApCisgICAgICAgICAgZ290byBkYXRhX2Vycm9yOworICAg ICAgICBpZiAoKHRjID0gdF9jbGllbnRvcGVuIChzcnBfdXNlciwgJk4sICZnLCAmcykpID09IE5V TEwpIHsKKyAgICAgICAgICAgIGZwcmludGYgKHN0ZGVyciwgIlVuYWJsZSB0byBvcGVuIFNSUCBj bGllbnQgc3RydWN0dXJlLlxuIik7CisgICAgICAgICAgICBnb3RvIGJhZDsKKyAgICAgICAgfQor ICAgICAgICB3cCA9IHRfY2xpZW50Z2VuZXhwICh0Yyk7ICAgICAgIC8qIFNlbmQgd3AgKi8KKyAg ICAgICAgYnAgPSB0bXA7IGJsZW4gPSAwOworICAgICAgICBzcnBfcHV0ICh3cC0+ZGF0YSwgJmJw LCB3cC0+bGVuLCAmYmxlbik7CisgICAgICAgIGxlbiA9IEZUUF9CVUZTSVo7CisgICAgICAgIGlm IChlID0gcmFkaXhfZW5jb2RlICh0bXAsIGJ1ZiwgYmxlbiwgJmxlbiwgUkFESVhfRU5DT0RFKSkK KyAgICAgICAgICBnb3RvIGVuY29kZV9lcnJvcjsKKyAgICAgICAgcmVwbHlfcGFyc2UgPSAiQURB VD0iOworICAgICAgICBuID0gZnRwY21kKCJBREFUIixidWYsLTEsLTEsMCk7CisgICAgfQorICAg IGlmIChuID09IFJFUExZX0NPTlRJTlVFKSB7ICAgICAgICAgIC8qIEdldCB5cCAqLworICAgICAg ICBicCA9IGJ1ZjsKKyAgICAgICAgaWYgKCFyZXBseV9wYXJzZSkKKyAgICAgICAgICBnb3RvIGRh dGFfZXJyb3I7CisgICAgICAgIGJsZW4gPSBGVFBfQlVGU0laOworICAgICAgICBpZiAoZSA9IHJh ZGl4X2VuY29kZSAocmVwbHlfcGFyc2UsIGJwLCAwLCAmYmxlbiwgUkFESVhfREVDT0RFKSkKKyAg ICAgICAgICBnb3RvIGRlY29kZV9lcnJvcjsKKyAgICAgICAgaWYgKHNycF9nZXQgKCZicCwgJih5 cC5kYXRhKSwgJmJsZW4sICYoeXAubGVuKSkgPCAwKQorICAgICAgICAgIGdvdG8gZGF0YV9lcnJv cjsKKyAgICAgICAgaWYgKCFzcnBfcGFzcykgeworICAgICAgICAgICAgc3RhdGljIGNoYXIgZnRw cGFzc1tQQVNTQlVGU0laXTsKKyAgICAgICAgICAgIGludCBvazsKKyAgICAgICAgICAgIHNldGlu dCgpOworICAgICAgICAgICAgb2sgPSB1cV90eHQoTlVMTCwiIFNSUCBQYXNzd29yZDogIiwyLE5V TEwsZnRwcGFzcyxQQVNTQlVGU0laLE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICBERUZB VUxUX1VRX1RJTUVPVVQpOworICAgICAgICAgICAgaWYgKG9rKQorCSAgICAgIHNycF9wYXNzID0g YnJzdHJpcChmdHBwYXNzKTsKKyAgICAgICAgfQorICAgICAgICB0X2NsaWVudHBhc3N3ZCAodGMs IHNycF9wYXNzKTsKKyAgICAgICAgbWVtc2V0IChzcnBfcGFzcywgMCwgc3RybGVuIChzcnBfcGFz cykpOworICAgICAgICBza2V5ID0gdF9jbGllbnRnZXRrZXkgKHRjLCAmeXApOyAvKiBTZW5kIHJl c3BvbnNlICovCisgICAgICAgIGJwID0gdG1wOyBibGVuID0gMDsKKyAgICAgICAgc3JwX3B1dCAo dF9jbGllbnRyZXNwb25zZSAodGMpLCAmYnAsIDIwLCAmYmxlbik7CisgICAgICAgIGxlbiA9IEZU UF9CVUZTSVo7CisgICAgICAgIGlmIChlID0gcmFkaXhfZW5jb2RlICh0bXAsIGJ1ZiwgYmxlbiwg JmxlbiwgUkFESVhfRU5DT0RFKSkKKyAgICAgICAgICBnb3RvIGVuY29kZV9lcnJvcjsKKyAgICAg ICAgcmVwbHlfcGFyc2UgPSAiQURBVD0iOworICAgICAgICBuID0gZnRwY21kKCJBREFUIixidWYs LTEsLTEsMCk7CisgICAgfQorICAgIGlmIChuID09IFJFUExZX0NPTlRJTlVFKSB7ICAgICAgICAg IC8qIEdldCByZXNwb25zZSAqLworICAgICAgICBicCA9IGJ1ZjsKKyAgICAgICAgaWYgKCFyZXBs eV9wYXJzZSkKKyAgICAgICAgICBnb3RvIGRhdGFfZXJyb3I7CisgICAgICAgIGJsZW4gPSBGVFBf QlVGU0laOworICAgICAgICBpZiAoZSA9IHJhZGl4X2VuY29kZSAocmVwbHlfcGFyc2UsIGJwLCAw LCAmYmxlbiwgUkFESVhfREVDT0RFKSkKKyAgICAgICAgICBnb3RvIGVuY29kZV9lcnJvcjsKKyAg ICAgICAgaWYgKHNycF9nZXQgKCZicCwgJmNwLCAmYmxlbiwgJmNsZW4pICE9IDIwKQorICAgICAg ICAgIGdvdG8gZGF0YV9lcnJvcjsKKyAgICAgICAgaWYgKHRfY2xpZW50dmVyaWZ5ICh0YywgY3Ap KSB7CisgICAgICAgICAgICBmcHJpbnRmIChzdGRlcnIsICJXQVJOSU5HOiBiYWQgcmVzcG9uc2Ug dG8gY2xpZW50IGNoYWxsZW5nZS5cbiIpOworICAgICAgICAgICAgZ290byBiYWQ7CisgICAgICAg IH0KKyAgICAgICAgYnAgPSB0bXA7IGJsZW4gPSAwOyAgICAgICAgICAgICAvKiBTZW5kIG5vdGhp bmcgKi8KKyAgICAgICAgc3JwX3B1dCAoIlwwIiwgJmJwLCAxLCAmYmxlbik7CisgICAgICAgIGxl biA9IEZUUF9CVUZTSVo7CisgICAgICAgIGlmIChlID0gcmFkaXhfZW5jb2RlICh0bXAsIGJ1Ziwg YmxlbiwgJmxlbiwgUkFESVhfRU5DT0RFKSkKKyAgICAgICAgICBnb3RvIGVuY29kZV9lcnJvcjsK KyAgICAgICAgcmVwbHlfcGFyc2UgPSAiQURBVD0iOworICAgICAgICBuID0gZnRwY21kKCJBREFU IixidWYsLTEsLTEsMCk7CisgICAgfQorICAgIGlmIChuID09IFJFUExZX0NPTlRJTlVFKSB7ICAg ICAgICAgIC8qIEdldCBjaXBoZXIgJiBoYXNoIGxpc3RzLCBzZXFudW0gKi8KKyAgICAgICAgQ0hB UiBzZXFudW1bNF07CisgICAgICAgIENIQVIgKmNsaXN0OworICAgICAgICBDSEFSICpobGlzdDsK KyAgICAgICAgQ0hBUiAqcDE7CisgICAgICAgIGludCBjbGlzdF9sZW4sIGhsaXN0X2xlbjsKKyAg ICAgICAgYnAgPSBidWY7CisgICAgICAgIGlmICghcmVwbHlfcGFyc2UpCisgICAgICAgICAgZ290 byBkYXRhX2Vycm9yOworICAgICAgICBibGVuID0gRlRQX0JVRlNJWjsKKyAgICAgICAgaWYgKGUg PSByYWRpeF9lbmNvZGUgKHJlcGx5X3BhcnNlLCBicCwgMCwgJmJsZW4sIFJBRElYX0RFQ09ERSkp CisgICAgICAgICAgZ290byBlbmNvZGVfZXJyb3I7CisgICAgICAgIGlmIChzcnBfZ2V0ICgmYnAs ICZjbGlzdCwgJmJsZW4sICZjbGlzdF9sZW4pIDwgMCkKKyAgICAgICAgICBnb3RvIGRhdGFfZXJy b3I7CisgICAgICAgIGlmIChzcnBfZ2V0ICgmYnAsICZobGlzdCwgJmJsZW4sICZobGlzdF9sZW4p IDwgMCkKKyAgICAgICAgICBnb3RvIGRhdGFfZXJyb3I7CisgICAgICAgIGlmIChzcnBfZ2V0ICgm YnAsICZjcCwgJmJsZW4sICZjbGVuKSAhPSA0KQorICAgICAgICAgIGdvdG8gZGF0YV9lcnJvcjsK KyAgICAgICAgbWVtY3B5IChzZXFudW0sIGNwLCA0KTsKKyAgICAgICAgaWYgKGNpcGhlcl9zdXBw b3J0ZWQgKGNsaXN0LCBzcnBfcHJlZl9jaXBoZXIpKSAvKiBDaG9vc2UgY2lwaGVyICovCisgICAg ICAgICAgY2lkID0gc3JwX3ByZWZfY2lwaGVyOworICAgICAgICBpZiAoIWNpZCAmJiBjaXBoZXJf c3VwcG9ydGVkIChjbGlzdCwgU1JQX0RFRkFVTFRfQ0lQSEVSKSkKKyAgICAgICAgICBjaWQgPSBT UlBfREVGQVVMVF9DSVBIRVI7CisgICAgICAgIGlmICghY2lkKSB7CisgICAgICAgICAgICBDSEFS ICpsb2NsaXN0ID0gY2lwaGVyX2dldGxpc3QgKCk7CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBp IDwgc3RybGVuIChsb2NsaXN0KTsgaSsrKQorICAgICAgICAgICAgICBpZiAoY2lwaGVyX3N1cHBv cnRlZCAoY2xpc3QsIGxvY2xpc3RbaV0pKSB7CisgICAgICAgICAgICAgICAgICBjaWQgPSBsb2Ns aXN0W2ldOworICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIH0KKyAgICAg ICAgfQorICAgICAgICBpZiAoIWNpZCkgeworICAgICAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAi VW5hYmxlIHRvIGFncmVlIG9uIGNpcGhlci5cbiIpOworICAgICAgICAgICAgZ290byBiYWQ7Cisg ICAgICAgIH0KKyAgICAgICAgLyogQ2hvb3NlIGhhc2ggKi8KKworICAgICAgICBpZiAoc3JwX3By ZWZfaGFzaCAmJiBoYXNoX3N1cHBvcnRlZCAoaGxpc3QsIHNycF9wcmVmX2hhc2gpKQorICAgICAg ICAgIGhpZCA9IHNycF9wcmVmX2hhc2g7CisKKyAgICAgICAgaWYgKCFoaWQgJiYgaGFzaF9zdXBw b3J0ZWQgKGhsaXN0LCBTUlBfREVGQVVMVF9IQVNIKSkKKyAgICAgICAgICBoaWQgPSBTUlBfREVG QVVMVF9IQVNIOworCisgICAgICAgIGlmICghaGlkKSB7CisgICAgICAgICAgICBDSEFSICpsb2Ns aXN0ID0gaGFzaF9nZXRsaXN0ICgpOworICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHN0cmxl biAobG9jbGlzdCk7IGkrKykKKyAgICAgICAgICAgICAgaWYgKGhhc2hfc3VwcG9ydGVkIChobGlz dCwgbG9jbGlzdFtpXSkpIHsKKyAgICAgICAgICAgICAgICAgIGhpZCA9IGxvY2xpc3RbaV07Cisg ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg ICAgIGlmICghaGlkKSB7CisgICAgICAgICAgICBmcHJpbnRmIChzdGRlcnIsICJVbmFibGUgdG8g YWdyZWUgb24gaGFzaC5cbiIpOworICAgICAgICAgICAgZ290byBiYWQ7CisgICAgICAgIH0KKyAg ICAgICAgLyogU2V0IGluY3J5cHQgKi8KKworICAgICAgICBpZiAoIShpbmNyeXB0ID0ga3J5cHRv X25ldyAoY2lkLCBoaWQsIHNrZXksIDIwLCBOVUxMLCAwLCBzZXFudW0sCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBLUllQVE9fREVDT0RFKSkpCisgICAgICAgICAgZ290byBi YWQ7CisKKyAgICAgICAgLyogR2VuZXJhdGUgcmFuZG9tIG51bWJlciBmb3Igb3V0a2V5IGFuZCBv dXRzZXFudW0gKi8KKworICAgICAgICB0X3JhbmRvbSAoc2VxbnVtLCA0KTsKKworICAgICAgICAv KiBTZW5kIGNpZCwgaGlkLCBvdXRrZXksIG91dHNlcW51bSAqLworCisgICAgICAgIGJwID0gdG1w OyBibGVuID0gMDsKKyAgICAgICAgc3JwX3B1dCAoJmNpZCwgJmJwLCAxLCAmYmxlbik7CisgICAg ICAgIHNycF9wdXQgKCZoaWQsICZicCwgMSwgJmJsZW4pOworICAgICAgICBzcnBfcHV0IChzZXFu dW0sICZicCwgNCwgJmJsZW4pOworICAgICAgICBsZW4gPSBGVFBfQlVGU0laOworICAgICAgICBp ZiAoZSA9IHJhZGl4X2VuY29kZSAodG1wLCBidWYsIGJsZW4sICZsZW4sIFJBRElYX0VOQ09ERSkp CisgICAgICAgICAgZ290byBlbmNvZGVfZXJyb3I7CisgICAgICAgIHJlcGx5X3BhcnNlID0gIkFE QVQ9IjsKKyAgICAgICAgbiA9IGZ0cGNtZCgiQURBVCIsYnVmLC0xLC0xLDApOworCisgICAgICAg IC8qIFNldCBvdXRjcnlwdCAqLworCisgICAgICAgIGlmICghKG91dGNyeXB0ID0ga3J5cHRvX25l dyAoY2lkLCBoaWQsIHNrZXkrMjAsIDIwLCBOVUxMLCAwLCBzZXFudW0sCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgS1JZUFRPX0VOQ09ERSkpKQorICAgICAgICAgIGdvdG8g YmFkOworCisgICAgICAgIHRfY2xpZW50Y2xvc2UgKHRjKTsKKyAgICAgICAgdGMgPSBOVUxMOwor ICAgIH0KKyAgICBpZiAobiAhPSBSRVBMWV9DT01QTEVURSkKKyAgICAgIGdvdG8gYmFkOworCisg ICAgaWYgKGZ0cF92Ym0pIHsKKyAgICAgICAgaWYgKGZ0cF9kZWIpCisgICAgICAgICAgcHJpbnRm KCJcbiIpOworICAgICAgICBwcmludGYgKCJTUlAgYXV0aGVudGljYXRpb24gc3VjY2VlZGVkLlxu Iik7CisgICAgICAgIHByaW50ZiAoIlVzaW5nIGNpcGhlciAlcyBhbmQgaGFzaCBmdW5jdGlvbiAl cy5cbiIsCisgICAgICAgICAgICAgICAgKGNpcGhlcl9nZXRkZXNjYnlpZChjaWQpKS0+bmFtZSwK KyAgICAgICAgICAgICAgICAoaGFzaF9nZXRkZXNjYnlpZChoaWQpKS0+bmFtZQorICAgICAgICAg ICAgICAgICk7CisgICAgfQorICAgIHJlcGx5X3BhcnNlID0gTlVMTDsKKyAgICBhdXRoX3R5cGUg PSAiU1JQIjsKKyAgICByZXR1cm4oMSk7CisKKyAgZW5jb2RlX2Vycm9yOgorICAgIGZwcmludGYg KHN0ZGVyciwgIkJhc2UgNjQgZW5jb2RpbmcgZmFpbGVkOiAlcy5cbiIsIHJhZGl4X2Vycm9yIChl KSk7CisgICAgZ290byBiYWQ7CisKKyAgZGVjb2RlX2Vycm9yOgorICAgIGZwcmludGYgKHN0ZGVy ciwgIkJhc2UgNjQgZGVjb2RpbmcgZmFpbGVkOiAlcy5cbiIsIHJhZGl4X2Vycm9yIChlKSk7Cisg ICAgZ290byBiYWQ7CisKKyAgZGF0YV9lcnJvcjoKKyAgICBmcHJpbnRmIChzdGRlcnIsICJVbmFi bGUgdG8gdW5tYXJzaGFsIGF1dGhlbnRpY2F0aW9uIGRhdGEuXG4iKTsKKyAgICBnb3RvIGJhZDsK KworICBiYWQ6CisgICAgZnByaW50ZiAoc3RkZXJyLCAiU1JQIGF1dGhlbnRpY2F0aW9uIGZhaWxl ZCwgdHJ5aW5nIHJlZ3VsYXIgbG9naW4uXG4iKTsKKyAgICByZXBseV9wYXJzZSA9IE5VTEw7Cisg ICAgcmV0dXJuKDApOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworIHwgc3JwX3B1dDogcHV0IGl0ZW0gdG8gc2Vu ZCBidWZmZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyArLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGlj IGludAorc3JwX3B1dCAoaW4sIG91dCwgaW5sZW4sIG91dGxlbikKKyAgICBDSEFSICppbjsKKyAg ICBDSEFSICoqb3V0OworICAgIGludCBpbmxlbjsKKyAgICBpbnQgKm91dGxlbjsKK3sKKyAgICBz cnBfdWludDMyIG5ldF9sZW47CisKKyAgICBuZXRfbGVuID0gaHRvbmwgKGlubGVuKTsKKyAgICBt ZW1jcHkgKCpvdXQsICZuZXRfbGVuLCA0KTsKKworICAgICpvdXQgKz0gNDsgKm91dGxlbiArPSA0 OworCisgICAgbWVtY3B5ICgqb3V0LCBpbiwgaW5sZW4pOworCisgICAgKm91dCArPSBpbmxlbjsg Km91dGxlbiArPSBpbmxlbjsKKyAgICByZXR1cm4oMCk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgfCBzcnBf Z2V0OiBnZXQgaXRlbSBmcm9tIHJlY2VpdmUgYnVmZmVyICAgICAgICAgICAgICAgICAgICAgICAg fAorICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSovCitzdGF0aWMgaW50CitzcnBfZ2V0IChpbiwgb3V0LCBpbmxlbiwgb3V0bGVu KQorICAgIENIQVIgKippbjsKKyAgICBDSEFSICoqb3V0OworICAgIGludCAqaW5sZW47CisgICAg aW50ICpvdXRsZW47Cit7CisgICAgc3JwX3VpbnQzMiBuZXRfbGVuOworCisgICAgaWYgKCppbmxl biA8IDQpIHJldHVybiAtMTsKKworICAgIG1lbWNweSAoJm5ldF9sZW4sICppbiwgNCk7ICppbmxl biAtPSA0OyAqaW4gKz0gNDsKKyAgICAqb3V0bGVuID0gbnRvaGwgKG5ldF9sZW4pOworCisgICAg aWYgKCppbmxlbiA8ICpvdXRsZW4pIHJldHVybiAtMTsKKworICAgICpvdXQgPSAqaW47ICppbmxl biAtPSAqb3V0bGVuOyAqaW4gKz0gKm91dGxlbjsKKworICAgIHJldHVybiAqb3V0bGVuOworfQor CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKworIHwgc3JwX2VuY29kZTogZW5jb2RlIGNvbnRyb2wgbWVzc2FnZSAgICAgICAg ICAgICAgICAgICAgICAgICAgIHwKKyArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludAorc3JwX2VuY29kZSAo cHJpdmF0ZSwgaW4sIG91dCwgbGVuKQorICAgIGludCBwcml2YXRlOworICAgIENIQVIgKmluOwor ICAgIENIQVIgKm91dDsKKyAgICB1bnNpZ25lZCBsZW47Cit7CisgICAgaWYgKHByaXZhdGUpCisg ICAgICByZXR1cm4ga3J5cHRvX21zZ19wcml2IChvdXRjcnlwdCwgaW4sIG91dCwgbGVuKTsKKyAg ICBlbHNlCisgICAgICByZXR1cm4ga3J5cHRvX21zZ19zYWZlIChvdXRjcnlwdCwgaW4sIG91dCwg bGVuKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSsKKyB8IHNycF9kZWNvZGU6IGRlY29kZSBjb250cm9sIG1lc3Nh Z2UgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQKK3Ny cF9kZWNvZGUgKHByaXZhdGUsIGluLCBvdXQsIGxlbikKKyAgICBpbnQgcHJpdmF0ZTsKKyAgICBD SEFSICppbjsKKyAgICBDSEFSICpvdXQ7CisgICAgdW5zaWduZWQgbGVuOworeworICAgIGlmIChw cml2YXRlKQorICAgICAgcmV0dXJuIGtyeXB0b19tc2dfcHJpdiAoaW5jcnlwdCwgaW4sIG91dCwg bGVuKTsKKyAgICBlbHNlCisgICAgICByZXR1cm4ga3J5cHRvX21zZ19zYWZlIChpbmNyeXB0LCBp biwgb3V0LCBsZW4pOworfQorCisjZW5kaWYgLyogRlRQX1NSUCAqLworCisKKworI2lmZGVmIE5P VF9VU0VECisvKgorICBUaGUgZm9sbG93aW5nIGNvZGUgaXMgZnJvbSB0aGUgVW5peCBGVFAgY2xp ZW50LiAgQmUgc3VyZSB0bworICBtYWtlIHN1cmUgdGhhdCB0aGUgZnVuY3Rpb25hbGl0eSBpcyBu b3QgbG9zdC4gIEVzcGVjaWFsbHkKKyAgdGhlIFByb3h5IHN0dWZmIGV2ZW4gdGhvdWdoIHdlIGhh dmUgbm90IHlldCBpbXBsZW1lbnRlZCBpdC4KKyovCisKKy8qIFNlbmQgbXVsdGlwbGUgZmlsZXMg ICovCisKK3N0YXRpYyBpbnQKK2Z0cF9tcHV0KGFyZ2MsIGFyZ3YpIGludCBhcmdjOyBjaGFyICoq YXJndjsgeworICAgIHJlZ2lzdGVyIGludCBpOworICAgIHNpZ190IG9sZGludHI7CisgICAgaW50 IG9pbnRlcjsKKyAgICBjaGFyICp0cDsKKyAgICBzaWd0eXBlIG1jYW5jZWwoKTsKKworICAgIGlm IChhcmdjIDwgMiAmJiAhYW5vdGhlcigmYXJnYywgJmFyZ3YsICJsb2NhbC1maWxlcyIpKSB7Cisg ICAgICAgIHByaW50ZigidXNhZ2U6ICVzIGxvY2FsLWZpbGVzXG4iLCBhcmd2WzBdKTsKKyAgICAg ICAgZnRwY29kZSA9IC0xOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1uYW1lID0gYXJn dlswXTsKKyAgICBtZmxhZyA9IDE7CisgICAgb2xkaW50ciA9IHNpZ25hbChTSUdJTlQsIG1jYW5j ZWwpOworCisgICAgLyogUmVwbGFjZSB3aXRoIGNhbGxzIHRvIGNjX2V4ZWN1dGUoKSAqLworICAg IHNldGptcChqY2FuY2VsKTsKKyNpZmRlZiBGVFBfUFJPWFkKKyAgICBpZiAocHJveHkpIHsKKyAg ICAgICAgY2hhciAqY3AsICp0cDIsIHRtcGJ1ZltDS01BWFBBVEhdOworCisgICAgICAgIHdoaWxl ICgoY3AgPSByZW1nbG9iKGFyZ3YsMCkpICE9IE5VTEwpIHsKKyAgICAgICAgICAgIGlmICgqY3Ag PT0gMCkgeworICAgICAgICAgICAgICAgIG1mbGFnID0gMDsKKyAgICAgICAgICAgICAgICBjb250 aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtZmxhZyAmJiBjb25maXJtKGFy Z3ZbMF0sIGNwKSkgeworICAgICAgICAgICAgICAgIHRwID0gY3A7CisgICAgICAgICAgICAgICAg aWYgKG1jYXNlKSB7CisgICAgICAgICAgICAgICAgICAgIHdoaWxlICgqdHAgJiYgIWlzbG93ZXIo KnRwKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdHArKzsKKyAgICAgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoISp0cCkgeworICAgICAgICAgICAgICAgICAg ICAgICAgdHAgPSBjcDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRwMiA9IHRtcGJ1ZjsKKyAg ICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgoKnRwMiA9ICp0cCkgIT0gMCkgeworICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGlmIChpc3VwcGVyKCp0cDIpKSB7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICp0cDIgPSAnYScgKyAqdHAyIC0gJ0EnOworICAgICAgICAgICAg ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cCsrOworICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHRwMisrOworICAgICAgICAgICAgICAgICAgICAgICAg fQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHRwID0gdG1wYnVm OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAobnRmbGFnKSB7CisgICAg ICAgICAgICAgICAgICAgIHRwID0gZG90cmFucyh0cCk7CisgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICAgIGlmIChtYXBmbGFnKSB7CisgICAgICAgICAgICAgICAgICAgIHRwID0gZG9t YXAodHApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzZW5kcmVxdWVzdCgo c3VuaXF1ZSkgPyAiU1RPVSIgOiAiU1RPUiIsIGNwLCB0cCwgMCwgLTEsIC0xLCAwKTsKKyAgICAg ICAgICAgICAgICBpZiAoIW1mbGFnICYmIGZyb21hdHR5KSB7CisgICAgICAgICAgICAgICAgICAg IG9pbnRlciA9IGludGVyYWN0aXZlOworICAgICAgICAgICAgICAgICAgICBpbnRlcmFjdGl2ZSA9 IDE7CisgICAgICAgICAgICAgICAgICAgIGlmIChjb25maXJtKCJDb250aW51ZSB3aXRoIiwibXB1 dCIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtZmxhZysrOworICAgICAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgICAgICAgIGludGVyYWN0aXZlID0gb2ludGVyOworICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBzaWduYWwoU0lH SU5ULCBvbGRpbnRyKTsKKyAgICAgICAgbWZsYWcgPSAwOworICAgICAgICByZXR1cm47CisgICAg fQorI2VuZGlmIC8qIEZUUF9QUk9YWSAqLworICAgIGZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKysp IHsKKyAgICAgICAgcmVnaXN0ZXIgY2hhciAqKmNwcCwgKipnYXJnczsKKworICAgICAgICBpZiAo bWZsYWcgJiYgY29uZmlybShhcmd2WzBdLCBhcmd2W2ldKSkgeworICAgICAgICAgICAgdHAgPSBh cmd2W2ldOworICAgICAgICAgICAgc2VuZHJlcXVlc3QoKGZ0cF91c24pID8gIlNUT1UiIDogIlNU T1IiLCBhcmd2W2ldLCB0cCwgMCwtMSwtMSwgMCk7CisgICAgICAgICAgICBpZiAoIW1mbGFnICYm IGZyb21hdHR5KSB7CisgICAgICAgICAgICAgICAgb2ludGVyID0gaW50ZXJhY3RpdmU7CisgICAg ICAgICAgICAgICAgaW50ZXJhY3RpdmUgPSAxOworICAgICAgICAgICAgICAgIGlmIChjb25maXJt KCJDb250aW51ZSB3aXRoIiwibXB1dCIpKSB7CisgICAgICAgICAgICAgICAgICAgIG1mbGFnKys7 CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGludGVyYWN0aXZlID0gb2ludGVy OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGNvbnRpbnVlOworCisgICAgICAg IGdhcmdzID0gZnRwZ2xvYihhcmd2W2ldKTsKKyAgICAgICAgaWYgKGdsb2JlcnIgIT0gTlVMTCkg eworICAgICAgICAgICAgcHJpbnRmKCIlc1xuIiwgZ2xvYmVycik7CisgICAgICAgICAgICBpZiAo Z2FyZ3MpIHsKKyAgICAgICAgICAgICAgICBibGtmcmVlKGdhcmdzKTsKKyAgICAgICAgICAgICAg ICBmcmVlKChjaGFyICopZ2FyZ3MpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY29udGlu dWU7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChjcHAgPSBnYXJnczsgY3BwICYmICpjcHAgIT0g TlVMTDsgY3BwKyspIHsKKyAgICAgICAgICAgIGlmIChtZmxhZyAmJiBjb25maXJtKGFyZ3ZbMF0s ICpjcHApKSB7CisgICAgICAgICAgICAgICAgdHAgPSAqY3BwOworICAgICAgICAgICAgICAgIHNl bmRyZXF1ZXN0KChzdW5pcXVlKSA/ICJTVE9VIjoiU1RPUiIsICpjcHAsIHRwLCAwLCAtMSwgLTEs IDApOworICAgICAgICAgICAgICAgIGlmICghbWZsYWcgJiYgZnJvbWF0dHkpIHsKKyAgICAgICAg ICAgICAgICAgICAgb2ludGVyID0gaW50ZXJhY3RpdmU7CisgICAgICAgICAgICAgICAgICAgIGlu dGVyYWN0aXZlID0gMTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmZpcm0oIkNvbnRpbnVl IHdpdGgiLCJtcHV0IikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1mbGFnKys7CisgICAg ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaW50ZXJhY3RpdmUgPSBvaW50 ZXI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg IGlmIChnYXJncyAhPSBOVUxMKSB7CisgICAgICAgICAgICBibGtmcmVlKGdhcmdzKTsKKyAgICAg ICAgICAgIGZyZWUoKGNoYXIgKilnYXJncyk7CisgICAgICAgIH0KKyAgICB9CisgICAgc2lnbmFs KFNJR0lOVCwgb2xkaW50cik7CisgICAgbWZsYWcgPSAwOworfQorCisvKiBHZXQgbXVsdGlwbGUg ZmlsZXMgKi8KKworc3RhdGljIGludAorZnRwX21nZXQoYXJnYywgYXJndikgaW50IGFyZ2M7IGNo YXIgKiphcmd2OyB7CisgICAgaW50IHJjID0gLTE7CisgICAgc2lnX3Qgb2xkaW50cjsKKyAgICBp bnQgb2ludGVyOworICAgIGNoYXIgKmNwLCAqdHAsICp0cDIsIHRtcGJ1ZltDS01BWFBBVEhdOwor ICAgIHNpZ3R5cGUgbWNhbmNlbCgpOworCisgICAgaWYgKGFyZ2MgPCAyICYmICFhbm90aGVyKCZh cmdjLCAmYXJndiwgInJlbW90ZS1maWxlcyIpKSB7CisgICAgICAgIHByaW50ZigidXNhZ2U6ICVz IHJlbW90ZS1maWxlc1xuIiwgYXJndlswXSk7CisgICAgICAgIGZ0cGNvZGUgPSAtMTsKKyAgICAg ICAgcmV0dXJuKC0xKTsKKyAgICB9CisgICAgbW5hbWUgPSBhcmd2WzBdOworICAgIG1mbGFnID0g MTsKKyAgICBvbGRpbnRyID0gc2lnbmFsKFNJR0lOVCxtY2FuY2VsKTsKKyAgICAvKiBSZXBsYWNl IHdpdGggY2FsbHMgdG8gY2NfZXhlY3V0ZSgpICovCisgICAgc2V0am1wKGpjYW5jZWwpOworICAg IHdoaWxlICgoY3AgPSByZW1nbG9iKGFyZ3YscHJveHkpKSAhPSBOVUxMKSB7CisgICAgICAgIGlm ICgqY3AgPT0gJ1wwJykgeworICAgICAgICAgICAgbWZsYWcgPSAwOworICAgICAgICAgICAgY29u dGludWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1mbGFnICYmIGNvbmZpcm0oYXJndlswXSwg Y3ApKSB7CisgICAgICAgICAgICB0cCA9IGNwOworICAgICAgICAgICAgaWYgKG1jYXNlKSB7Cisg ICAgICAgICAgICAgICAgd2hpbGUgKCp0cCAmJiAhaXNsb3dlcigqdHApKSB7CisgICAgICAgICAg ICAgICAgICAgIHRwKys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICgh KnRwKSB7CisgICAgICAgICAgICAgICAgICAgIHRwID0gY3A7CisgICAgICAgICAgICAgICAgICAg IHRwMiA9IHRtcGJ1ZjsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCgqdHAyID0gKnRwKSAh PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXN1cHBlcigqdHAyKSkgeworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICp0cDIgPSAnYScgKyAqdHAyIC0gJ0EnOworICAgICAg ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgdHArKzsKKyAgICAg ICAgICAgICAgICAgICAgICAgIHRwMisrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRwID0gdG1wYnVmOworICAgICAgICAgICAgfQor ICAgICAgICAgICAgcmMgPSAocmVjdnJlcXVlc3QoIlJFVFIiLCB0cCwgY3AsICJ3YiIsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdHAgIT0gY3AgfHwgIWludGVyYWN0aXZlKSA9PSAw LDAsTlVMTCwwLDAsMCk7CisgICAgICAgICAgICBpZiAoIW1mbGFnICYmIGZyb21hdHR5KSB7Cisg ICAgICAgICAgICAgICAgb2ludGVyID0gaW50ZXJhY3RpdmU7CisgICAgICAgICAgICAgICAgaW50 ZXJhY3RpdmUgPSAxOworICAgICAgICAgICAgICAgIGlmIChjb25maXJtKCJDb250aW51ZSB3aXRo IiwibWdldCIpKSB7CisgICAgICAgICAgICAgICAgICAgIG1mbGFnKys7CisgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICAgIGludGVyYWN0aXZlID0gb2ludGVyOworICAgICAgICAgICAg fQorICAgICAgICB9CisgICAgfQorICAgIHNpZ25hbChTSUdJTlQsb2xkaW50cik7CisgICAgbWZs YWcgPSAwOworICAgIHJldHVybihyYyk7Cit9CisKKy8qIERlbGV0ZSBtdWx0aXBsZSBmaWxlcyAq LworCitzdGF0aWMgaW50CittZGVsZXRlKGFyZ2MsIGFyZ3YpIGludCBhcmdjOyBjaGFyICoqYXJn djsgeworICAgIHNpZ190IG9sZGludHI7CisgICAgaW50IG9pbnRlcjsKKyAgICBjaGFyICpjcDsK KyAgICBzaWd0eXBlIG1jYW5jZWwoKTsKKworICAgIGlmIChhcmdjIDwgMiAmJiAhYW5vdGhlcigm YXJnYywgJmFyZ3YsICJyZW1vdGUtZmlsZXMiKSkgeworICAgICAgICBwcmludGYoInVzYWdlOiAl cyByZW1vdGUtZmlsZXNcbiIsIGFyZ3ZbMF0pOworICAgICAgICBmdHBjb2RlID0gLTE7CisgICAg ICAgIHJldHVybigtMSk7CisgICAgfQorICAgIG1uYW1lID0gYXJndlswXTsKKyAgICBtZmxhZyA9 IDE7CisgICAgb2xkaW50ciA9IHNpZ25hbChTSUdJTlQsIG1jYW5jZWwpOworICAgIC8qIFJlcGxh Y2Ugd2l0aCBjYWxscyB0byBjY19leGVjdXRlKCkgKi8KKyAgICBzZXRqbXAoamNhbmNlbCk7Cisg ICAgd2hpbGUgKChjcCA9IHJlbWdsb2IoYXJndiwwKSkgIT0gTlVMTCkgeworICAgICAgICBpZiAo KmNwID09ICdcMCcpIHsKKyAgICAgICAgICAgIG1mbGFnID0gMDsKKyAgICAgICAgICAgIGNvbnRp bnVlOworICAgICAgICB9CisgICAgICAgIGlmIChtZmxhZyAmJiBjb25maXJtKGFyZ3ZbMF0sIGNw KSkgeworICAgICAgICAgICAgcmMgPSAoZnRwY21kKCJERUxFIixjcCwtMSwtMSxmdHBfdmJtKSA9 PSBSRVBMWV9DT01QTEVURSk7CisgICAgICAgICAgICBpZiAoIW1mbGFnICYmIGZyb21hdHR5KSB7 CisgICAgICAgICAgICAgICAgb2ludGVyID0gaW50ZXJhY3RpdmU7CisgICAgICAgICAgICAgICAg aW50ZXJhY3RpdmUgPSAxOworICAgICAgICAgICAgICAgIGlmIChjb25maXJtKCJDb250aW51ZSB3 aXRoIiwgIm1kZWxldGUiKSkgeworICAgICAgICAgICAgICAgICAgICBtZmxhZysrOworICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpbnRlcmFjdGl2ZSA9IG9pbnRlcjsKKyAgICAg ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBzaWduYWwoU0lHSU5ULCBvbGRpbnRyKTsK KyAgICBtZmxhZyA9IDA7CisgICAgcmV0dXJuKHJjKTsKK30KKworLyogR2V0IGEgZGlyZWN0b3J5 IGxpc3Rpbmcgb2YgbXVsdGlwbGUgcmVtb3RlIGZpbGVzICovCisKK3N0YXRpYyBpbnQKK21scyhh cmdjLCBhcmd2KSBpbnQgYXJnYzsgY2hhciAqKmFyZ3Y7IHsKKyAgICBzaWdfdCBvbGRpbnRyOwor ICAgIGludCBvaW50ZXIsIGk7CisgICAgY2hhciAqY21kLCBtb2RlWzFdLCAqZGVzdDsKKyAgICBz aWd0eXBlIG1jYW5jZWwoKTsKKyAgICBpbnQgcmMgPSAtMTsKKworICAgIGlmIChhcmdjIDwgMiAm JiAhYW5vdGhlcigmYXJnYywgJmFyZ3YsICJyZW1vdGUtZmlsZXMiKSkKKyAgICAgIGdvdG8gdXNh Z2U7CisgICAgaWYgKGFyZ2MgPCAzICYmICFhbm90aGVyKCZhcmdjLCAmYXJndiwgImxvY2FsLWZp bGUiKSkgeworICAgICAgdXNhZ2U6CisgICAgICAgIHByaW50ZigidXNhZ2U6ICVzIHJlbW90ZS1m aWxlcyBsb2NhbC1maWxlXG4iLCBhcmd2WzBdKTsKKyAgICAgICAgZnRwY29kZSA9IC0xOworICAg ICAgICByZXR1cm4oLTEpOworICAgIH0KKyAgICBkZXN0ID0gYXJndlthcmdjIC0gMV07CisgICAg YXJndlthcmdjIC0gMV0gPSBOVUxMOworICAgIGlmIChzdHJjbXAoZGVzdCwgIi0iKSAmJiAqZGVz dCAhPSAnfCcpCisgICAgICBpZiAoIWdsb2J1bGl6ZSgmZGVzdCkgfHwKKyAgICAgICAgICAhY29u ZmlybSgib3V0cHV0IHRvIGxvY2FsLWZpbGU6IiwgZGVzdCkpIHsKKyAgICAgICAgICBmdHBjb2Rl ID0gLTE7CisgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgIH0KKyAgICBjbWQgPSBhcmd2WzBd WzFdID09ICdsJyA/ICJOTFNUIiA6ICJMSVNUIjsKKyAgICBtbmFtZSA9IGFyZ3ZbMF07CisgICAg bWZsYWcgPSAxOworICAgIG9sZGludHIgPSBzaWduYWwoU0lHSU5ULCBtY2FuY2VsKTsKKyAgICAv KiBSZXBsYWNlIHdpdGggY2FsbHMgdG8gY2NfZXhlY3V0ZSgpICovCisgICAgc2V0am1wKGpjYW5j ZWwpOworICAgIGZvciAoaSA9IDE7IG1mbGFnICYmIGkgPCBhcmdjLTE7ICsraSkgeworICAgICAg ICAqbW9kZSA9IChpID09IDEpID8gJ3cnIDogJ2EnOworICAgICAgICByYyA9IHJlY3ZyZXF1ZXN0 KGNtZCwgZGVzdCwgYXJndltpXSwgbW9kZSwgMCwwLE5VTEwsMCwwLDApOworICAgICAgICBpZiAo IW1mbGFnICYmIGZyb21hdHR5KSB7CisgICAgICAgICAgICBvaW50ZXIgPSBpbnRlcmFjdGl2ZTsK KyAgICAgICAgICAgIGludGVyYWN0aXZlID0gMTsKKyAgICAgICAgICAgIGlmIChjb25maXJtKCJD b250aW51ZSB3aXRoIiwgYXJndlswXSkpIHsKKyAgICAgICAgICAgICAgICBtZmxhZyArKzsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIGludGVyYWN0aXZlID0gb2ludGVyOworICAgICAgICB9 CisgICAgfQorICAgIHNpZ25hbChTSUdJTlQsIG9sZGludHIpOworICAgIG1mbGFnID0gMDsKKyAg ICByZXR1cm4ocmMpOworfQorCitzdGF0aWMgY2hhciAqCityZW1nbG9iKGFyZ3YsZG9zd2l0Y2gp IGNoYXIgKmFyZ3ZbXTsgaW50IGRvc3dpdGNoOyB7CisgICAgY2hhciB0ZW1wWzE2XTsKKyAgICBz dGF0aWMgY2hhciBidWZbQ0tNQVhQQVRIXTsKKyAgICBzdGF0aWMgRklMRSAqZnRlbXAgPSBOVUxM OworICAgIHN0YXRpYyBjaGFyICoqYXJnczsKKyAgICBpbnQgb2xkaGFzaDsKKyAgICBjaGFyICpj cCwgKm1vZGU7CisKKyAgICBpZiAoIW1mbGFnKSB7CisgICAgICAgIGlmICghZG9nbG9iKSB7Cisg ICAgICAgICAgICBhcmdzID0gTlVMTDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlm IChmdGVtcCkgeworICAgICAgICAgICAgICAgICh2b2lkKSBmY2xvc2UoZnRlbXApOworICAgICAg ICAgICAgICAgIGZ0ZW1wID0gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg ICByZXR1cm4oTlVMTCk7CisgICAgfQorICAgIGlmICghZG9nbG9iKSB7CisgICAgICAgIGlmIChh cmdzID09IE5VTEwpCisgICAgICAgICAgYXJncyA9IGFyZ3Y7CisgICAgICAgIGlmICgoY3AgPSAq KythcmdzKSA9PSBOVUxMKQorICAgICAgICAgIGFyZ3MgPSBOVUxMOworICAgICAgICByZXR1cm4o Y3ApOworICAgIH0KKyAgICBpZiAoZnRlbXAgPT0gTlVMTCkgeworICAgICAgICAodm9pZCkgc3Ry Y3B5KHRlbXAsIF9QQVRIX1RNUCk7CisjaWZkZWYgTUtURU1QCisjaWZuZGVmIE1LU1RFTVAKKyAg ICAgICAgKHZvaWQpIG1rdGVtcCh0ZW1wKTsKKyNlbmRpZiAvKiBNS1NURU1QICovCisjZW5kaWYg LyogTUtURU1QICovCisgICAgICAgIHZlcmJvc2UgPSAwOworICAgICAgICBvbGRoYXNoID0gaGFz aCwgaGFzaCA9IDA7CisjaWZkZWYgRlRQX1BST1hZCisgICAgICAgIGlmIChkb3N3aXRjaCkgewor ICAgICAgICAgICAgcHN3aXRjaCghcHJveHkpOworICAgICAgICB9CisjZW5kaWYgLyogRlRQX1BS T1hZICovCisgICAgICAgIGZvciAobW9kZSA9ICJ3YiI7ICorK2FyZ3YgIT0gTlVMTDsgbW9kZSA9 ICJhYiIpCisgICAgICAgICAgcmVjdnJlcXVlc3QgKCJOTFNUIiwgdGVtcCwgKmFyZ3YsIG1vZGUs IDApOworI2lmZGVmIEZUUF9QUk9YWQorICAgICAgICBpZiAoZG9zd2l0Y2gpIHsKKyAgICAgICAg ICAgIHBzd2l0Y2goIXByb3h5KTsKKyAgICAgICAgfQorI2VuZGlmIC8qIEZUUF9QUk9YWSAqLwor ICAgICAgICBoYXNoID0gb2xkaGFzaDsKKyAgICAgICAgZnRlbXAgPSBmb3Blbih0ZW1wLCAiciIp OworICAgICAgICB1bmxpbmsodGVtcCk7CisgICAgICAgIGlmIChmdGVtcCA9PSBOVUxMICYmICgh ZHB5YWN0aXZlIHx8IGZ0cF9kZWIpKSB7CisgICAgICAgICAgICBwcmludGYoIkNhbid0IGZpbmQg bGlzdCBvZiByZW1vdGUgZmlsZXMsIG9vcHNcbiIpOworICAgICAgICAgICAgcmV0dXJuKE5VTEwp OworICAgICAgICB9CisgICAgfQorICAgIGlmIChmZ2V0cyhidWYsIENLTUFYUEFUSCwgZnRlbXAp ID09IE5VTEwpIHsKKyAgICAgICAgZmNsb3NlKGZ0ZW1wKSwgZnRlbXAgPSBOVUxMOworICAgICAg ICByZXR1cm4oTlVMTCk7CisgICAgfQorICAgIGlmICgoY3AgPSBja3N0cmNocihidWYsJ1xuJykp ICE9IE5VTEwpCisgICAgICAqY3AgPSAnXDAnOworICAgIHJldHVybihidWYpOworfQorI2VuZGlm IC8qIE5PVF9VU0VEICovCisjZW5kaWYgLyogVENQU09DS0VUICh0b3Agb2YgZmlsZSkgKi8KKyNl bmRpZiAvKiBTWVNGVFAgKHRvcCBvZiBmaWxlKSAqLworI2VuZGlmIC8qIE5PRlRQICh0b3Agb2Yg ZmlsZSkgKi8KCmRpZmYgLS1naXQgYS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAu MzAyL2NrY2tlci5oIGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2Nr ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTBmNjY2Ci0tLSAvZGV2 L251bGwKKysrIGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2NrZXIu aApAQCAtMCwwICsxLDE0MjUgQEAKKy8qIGNrY2tlci5oIC0tIFN5bWJvbCBhbmQgbWFjcm8gZGVm aW5pdGlvbnMgZm9yIEMtS2VybWl0ICovCisKKy8qCisgIEF1dGhvcjogRnJhbmsgZGEgQ3J1eiA8 ZmRjQGNvbHVtYmlhLmVkdT4sCisgIENvbHVtYmlhIFVuaXZlcnNpdHkgQWNhZGVtaWMgSW5mb3Jt YXRpb24gU3lzdGVtcywgTmV3IFlvcmsgQ2l0eS4KKworICBDb3B5cmlnaHQgKEMpIDE5ODUsIDIw MDksCisgICAgVHJ1c3RlZXMgb2YgQ29sdW1iaWEgVW5pdmVyc2l0eSBpbiB0aGUgQ2l0eSBvZiBO ZXcgWW9yay4KKyAgICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgU2VlIHRoZSBDLUtlcm1pdCBDT1BZ SU5HLlRYVCBmaWxlIG9yIHRoZQorICAgIGNvcHlyaWdodCB0ZXh0IGluIHRoZSBja2NtYWkuYyBt b2R1bGUgZm9yIGRpc2NsYWltZXIgYW5kIHBlcm1pc3Npb25zLgorKi8KKworI2lmbmRlZiBDS0NL RVJfSAorI2RlZmluZSBDS0NLRVJfSAorCisjZGVmaW5lIElfQU1fS0VSTUlUICAwCQkJLyogUGVy c29uYWxpdGllcyAqLworI2RlZmluZSBJX0FNX1RFTE5FVCAgMQorI2RlZmluZSBJX0FNX1JMT0dJ TiAgMgorI2RlZmluZSBJX0FNX0lLU0QgICAgMworI2RlZmluZSBJX0FNX0ZUUCAgICAgNAorI2Rl ZmluZSBJX0FNX0hUVFAgICAgNQorI2RlZmluZSBJX0FNX1NTSFNVQiAgNgorI2RlZmluZSBJX0FN X1NTSCAgICAgNworCisjaWZuZGVmIE5PU1RSRUFNSU5HCisjaWZuZGVmIFNUUkVBTUlORworI2Rl ZmluZSBTVFJFQU1JTkcKKyNlbmRpZiAvKiBTVFJFQU1JTkcgKi8KKyNlbmRpZiAvKiBOT1NUUkVB TUlORyAqLworLyoKKyAgSWYgTkVXREVGQVVMVFMgaXMgZGVmaW5lZCB0aGVuOgorICAgLSBSRUNF SVZFIFBBQ0tFVC1MRU5HVEggaXMgNDA5NSByYXRoZXIgdGhhbiA5MAorICAgLSBXSU5ET1cgaXMg MzAgcmF0aGVyIHRoYW4gMQorICAgLSBCTE9DSy1DSEVDSyBpcyAzIHJhdGhlciB0aGFuIDEKKyAg IC0gRklMRSBUWVBFIGlzIEJJTkFSWSByYXRoZXIgdGhhbiBURVhUCisqLworI2lmZGVmIEJJR0JV Rk9LCQkJCS8qICh3YXMgT1MyKSAqLworI2lmbmRlZiBORVdERUZBVUxUUworI2RlZmluZSBORVdE RUZBVUxUUworI2VuZGlmIC8qIE5FV0RFRkFVTFRTICovCisjZW5kaWYgLyogQklHQlVGT0sgKi8K KworI2lmZGVmIE5PSUNQCQkJCS8qIE5vIEludGVyYWN0aXZlIENvbW1hbmQgUGFyc2VyICovCisj aWZuZGVmIE5PU1BMCQkJCS8qIGltcGxpZXMuLi4gKi8KKyNkZWZpbmUgTk9TUEwJCQkJLyogTm8g U2NyaXB0IFByb2dyYW1taW5nIExhbmd1YWdlICovCisjZW5kaWYgLyogTk9TUEwgKi8KKyNpZm5k ZWYgTk9DU0VUUwkJCQkvKiBObyBjaGFyYWN0ZXItc2V0IHRyYW5zbGF0aW9uICovCisjZGVmaW5l IE5PQ1NFVFMJCQkJLyogYmVjYXVzZSB0aGUgb25seSB3YXkgdG8gc2V0IGl0IHVwICovCisjZW5k aWYgLyogTk9DU0VUUyAqLwkJCS8qIGlzIHdpdGggaW50ZXJhY3RpdmUgY29tbWFuZHMgKi8KKyNl bmRpZiAvKiBOT0lDUCAqLworCisjaWZkZWYgcGRwMTEJCQkJLyogVGhlcmUgaXMgYSBtYXhpbXVt IG51bWJlciBvZiAqLworI2lmbmRlZiBOT0NLU1BFRUQJCQkvKiBvZiAtRCdzIGFsbG93ZWQgb24g dGhlIENDICovCisjZGVmaW5lIE5PQ0tTUEVFRAkJCS8qIGNvbW1hbmQgbGluZSwgc28gc29tZSBv ZiB0aGVtICovCisjZW5kaWYgLyogTk9DS1NQRUVEICovCQkJLyogaGF2ZSB0byBnbyBoZXJlLi4u ICovCisjaWZuZGVmIE5PUkVESVJFQ1QKKyNkZWZpbmUgTk9SRURJUkVDVAorI2VuZGlmIC8qIE5P UkVESVJFQ1QgKi8KKyNpZmRlZiBXSEFUQU1JCisjdW5kZWYgV0hBVEFNSQorI2VuZGlmIC8qIFdI QVRBTUkgKi8KKyNlbmRpZiAvKiBwZHAxMSAqLworCisjaWZkZWYgVUlEQlVGTEVOCisjZGVmaW5l IExPR0lOTEVOIFVJREJVRkxFTgorI2Vsc2UKKyNkZWZpbmUgTE9HSU5MRU4gMzIJCQkvKiBMZW5n dGggb2Ygc2VydmVyIGxvZ2luIGZpZWxkICovCisjZW5kaWYgLyogVUlEQlVGTEVOICovCisKKy8q IEJlbGwgdmFsdWVzICovCisKKyNkZWZpbmUgWFlCX05PTkUgIDAJCQkvKiBObyBiZWxsICovCisj ZGVmaW5lIFhZQl9BVUQgICAxCQkJLyogQXVkaWJsZSBiZWxsICovCisjZGVmaW5lIFhZQl9WSVMg ICAyCQkJLyogVmlzaWJsZSBiZWxsICovCisjZGVmaW5lIFhZQl9CRUVQICAwCQkJLyogQXVkaWJs ZSBCZWVwICovCisjZGVmaW5lIFhZQl9TWVMgICA0CQkJLyogQXVkaWJsZSBTeXN0ZW0gU291bmRz ICovCisKKy8qIEZpbGUgc3RhdHVzIGJpdHMgKi8KKworI2RlZmluZSBGU19PSyAgIDEJCQkvKiBG aWxlIHRyYW5zZmVycmVkIE9LICovCisjZGVmaW5lIEZTX1JFRlUgMgkJCS8qIEZpbGUgd2FzIHJl ZnVzZWQgKi8KKyNkZWZpbmUgRlNfRElTQyA0CQkJLyogRmlsZSB3YXMgZGlzY2FyZGVkICovCisj ZGVmaW5lIEZTX0lOVFIgOAkJCS8qIFRyYW5zZmVyIHdhcyBpbnRlcnJ1cHRlZCBieSB1c2VyICov CisjZGVmaW5lIEZTX0VSUiAgMTYJCQkvKiBGYXRhbCBlcnJvciBkdXJpbmcgdHJhbnNmZXIgKi8K KworLyogQ29udHJvbC1jaGFyYWN0ZXIgKHVuKXByZWZpeGluZyBvcHRpb25zICovCisKKyNkZWZp bmUgUFhfQUxMICAwCQkJLyogUHJlZml4IGFsbCBjb250cm9sIGNoYXJzICovCisjZGVmaW5lIFBY X0NBVSAgMQkJCS8qIFVucHJlZml4IGNhdXRpb3VzbHkgKi8KKyNkZWZpbmUgUFhfV0lMICAyCQkJ LyogVW5wcmVmaXggd2l0aCB3aWxkIGFiYW5kb24gKi8KKyNkZWZpbmUgUFhfTk9OICAzCQkJLyog VW5wcmVmaXggYWxsICg9IHByZWZpeCBub25lKSAqLworCisvKiBEZXN0aW5hdGlvbiBjb2RlcyAq LworCisjZGVmaW5lICBERVNUX0QgMAkvKiAgRElTSyAqLworI2RlZmluZSAgREVTVF9TIDEJLyog IFNDUkVFTiAqLworI2RlZmluZSAgREVTVF9QIDIJLyogIFBSSU5URVIgKi8KKyNkZWZpbmUgIERF U1RfTiAzCS8qICBOT1dIRVJFIChjYWxpYnJhdGlvbiBydW4pICovCisKKy8qIEZpbGUgdHJhbnNm ZXIgcHJvdG9jb2xzICovCisKKyNkZWZpbmUgIFBST1RPX0sgICAgMAkvKiAgIEtlcm1pdCAgICov CisjaWZkZWYgQ0tfWFlaCisjZGVmaW5lICBQUk9UT19YICAgIDEJLyogICBYTU9ERU0gICAgICov CisjZGVmaW5lICBQUk9UT19YQyAgIDIJLyogICBYTU9ERU0tQ1JDICovCisjZGVmaW5lICBQUk9U T19ZICAgIDMJLyogICBZTU9ERU0gICAgICovCisjZGVmaW5lICBQUk9UT19HICAgIDQJLyogICBZ TU9ERU0tZyAqLworI2RlZmluZSAgUFJPVE9fWiAgICA1CS8qICAgWk1PREVNICAgKi8KKyNkZWZp bmUgIFBST1RPX08gICAgNiAgIC8qICAgT1RIRVIgICAgKi8KKyNkZWZpbmUgIE5QUk9UT1MgICAg NyAgIC8qICAgSG93IG1hbnkgKi8KKyNlbHNlCisjZGVmaW5lICBOUFJPVE9TICAgIDEgICAvKiAg IEhvdyBtYW55ICovCisjZW5kaWYgLyogQ0tfWFlaICovCisKK3N0cnVjdCBja19wIHsJCQkJLyog Qy1LZXJtaXQgUHJvdG9jb2wgaW5mbyBzdHJ1Y3R1cmUgKi8KKyAgICBjaGFyICogcF9uYW1lOwkJ CS8qIFByb3RvY29sIG5hbWUgKi8KKyAgICBpbnQgcnBrdGxlbjsJCQkvKiBQYWNrZXQgbGVuZ3Ro IC0gcmVjZWl2ZSAqLworICAgIGludCBzcGt0bGVuOwkJCS8qIFBhY2tldCBsZW5ndGggLSBzZW5k ICovCisgICAgaW50IHNwa3RmbGc7CQkJLyogLi4uICovCisgICAgaW50IHdpbnNpemU7CQkJLyog V2luZG93IHNpemUgKi8KKyAgICBpbnQgcHJlZml4OwkJCQkvKiBDb250cm9sLWNoYXIgcHJlZml4 aW5nIG9wdGlvbnMgKi8KKyAgICBpbnQgZm5jYTsJCQkJLyogRmlsZW5hbWUgY29sbGlzaW9uIGFj dGlvbiAqLworICAgIGludCBmbmNuOwkJCQkvKiBGaWxlbmFtZSBjb252ZXJzaW9uICovCisgICAg aW50IGZuc3A7CQkJCS8qIFNlbmQgZmlsZW5hbWUgcGF0aCBzdHJpcHBpbmcgKi8KKyAgICBpbnQg Zm5ycDsJCQkJLyogUmVjZWl2ZSBmaWxlbmFtZSBwYXRoIHN0cmlwcGluZyAqLworICAgIGNoYXIg KiBoX2JfaW5pdDsJCS8qIEhvc3QgcmVjZWl2ZSBpbml0aWF0aW9uIHN0cmluZyAtIHRleHQgICAq LworICAgIGNoYXIgKiBoX3RfaW5pdDsJCS8qIEhvc3QgcmVjZWl2ZSBpbml0aWF0aW9uIHN0cmlu ZyAtIGJpbmFyeSAqLworICAgIGNoYXIgKiBoX3hfaW5pdDsJCS8qIEhvc3Qgc2VydmVyIHN0cmlu ZyAqLworICAgIGNoYXIgKiBwX2Jfc2NtZDsJCS8qIFNFTkQgY21kIGZvciBleHRlcm5hbCBwcm90 b2NvbCAtIHRleHQgICAqLworICAgIGNoYXIgKiBwX3Rfc2NtZDsJCS8qIFNFTkQgY21kIGZvciBl eHRlcm5hbCBwcm90b2NvbCAtIGJpbmFyeSAqLworICAgIGNoYXIgKiBwX2JfcmNtZDsJCS8qIFJF Q1YgY21kIGZvciBleHRlcm5hbCBwcm90b2NvbCAtIHRleHQgICAqLworICAgIGNoYXIgKiBwX3Rf cmNtZDsJCS8qIFJFQ1YgY21kIGZvciBleHRlcm5hbCBwcm90b2NvbCAtIGJpbmFyeSAqLworfTsK Kworc3RydWN0IGZpbGVsaXN0IHsJCQkvKiBTZW5kLWZpbGUgbGlzdCBlbGVtZW50ICovCisgICAg Y2hhciAqIGZsX25hbWU7CQkJLyogRmlsZW5hbWUgKi8KKyAgICBpbnQgZmxfbW9kZTsJCQkvKiBU cmFuc2ZlciBtb2RlICovCisgICAgY2hhciAqIGZsX2FsaWFzOwkJCS8qIE5hbWUgdG8gc2VuZCB0 aGUgZmlsZSB1bmRlciAqLworICAgIHN0cnVjdCBmaWxlbGlzdCAqIGZsX25leHQ7CQkvKiBQb2lu dGVyIHRvIG5leHQgZWxlbWVudCAqLworfTsKKworLyogS2VybWl0IHN5c3RlbSBJRHMgYW5kIGFz c29jaWF0ZWQgcHJvcGVydGllcy4uLiAqLworCitzdHJ1Y3Qgc3lzZGF0YSB7CisgICAgY2hhciAq c2lkX2NvZGU7CS8qIEtlcm1pdCBzeXN0ZW0gSUQgY29kZSAqLworICAgIGNoYXIgKnNpZF9uYW1l OwkvKiBEZXNjcmlwdGl2ZSBuYW1lICovCisgICAgc2hvcnQgc2lkX3VuaXhsaWtlOwkvKiBUcmVl LXN0cnVjdHVyZWQgZGlyZWN0b3J5IHdpdGggc2VwYXJhdG9ycyAqLworICAgIGNoYXIgIHNpZF9k aXJzZXA7CS8qIERpcmVjdG9yeSBzZXBhcmF0b3IgY2hhcmFjdGVyIGlmIHVuaXhsaWtlICovCisg ICAgc2hvcnQgc2lkX2RldjsJLyogQ2FuIHN0YXJ0IHdpdGggZGV2OiAqLworICAgIHNob3J0IHNp ZF9jYXNlOwkvKiBCaXQgbWFwcGVkOiAxID0gY2FzZSBtYXR0ZXJzLCAyID0gY2FzZSBwcmVzZXJ2 ZWQgKi8KKyAgICBzaG9ydCBzaWRfcmVjZm07ICAgIC8qIFRleHQgcmVjb3JkIHNlcGFyYXRvciAq LworLyoKKyAgIDAgPSB1bmtub3duIG9yIG5vbnN0cmVhbQorICAgMSA9IGNyCisgICAyID0gbGYK KyAgIDMgPSBjcmxmCisqLworfTsKKworc3RydWN0IHNzaF9wZiB7CQkJCS8qIFNTSCBwb3J0IGZv cndhcmRpbmcgKi8KKyAgICBpbnQgICAgcDE7CQkJCS8qIHBvcnQgdG8gYmUgZm9yd2FyZGVkICov CisgICAgY2hhciAqIGhvc3Q7CQkJLyogaG9zdCAqLworICAgIGludCAgICBwMjsJCQkJLyogcG9y dCAqLworfTsKKworI2RlZmluZSBTRVRfT04gICAxCS8qIEdlbmVyYWwgdmFsdWVzIGZvciBzZXR0 aW5ncyB0aGF0IGNhbiBiZSBPTiAqLworI2RlZmluZSBTRVRfT0ZGICAwCQkJLyogT0ZGLCAqLwor I2RlZmluZSBTRVRfQVVUTyAyCQkJLyogb3IgQVVUTyAqLworCisjZGVmaW5lIFBBVEhfT0ZGIDAJ LyogUGF0aG5hbWVzIG9mZiAodG8gYmUgc3RyaXBwZWQpICovCisjZGVmaW5lIFBBVEhfUkVMIDEg ICAgICAvKiBQYXRobmFtZXMgb24sIGxlZnQgcmVsYXRpdmUgaWYgcG9zc2libGUgKi8KKyNkZWZp bmUgUEFUSF9BQlMgMiAgICAgIC8qIFBhdGhuYW1lcyBhYnNvbHV0ZSBhbHdheXMgKi8KKyNkZWZp bmUgUEFUSF9BVVRPIDQJLyogUGF0aG5hbWVzIGhhbmRsZWQgYXV0b21hdGljYWxseSAqLworCisv KiBHRVQgT3B0aW9ucyAqLworCisjZGVmaW5lIEdPUFRfREVMIDEJCQkvKiBEZWxldGUgc291cmNl IGZpbGUgKi8KKyNkZWZpbmUgR09QVF9SRUMgMgkJCS8qIFJlY3Vyc2l2ZSAqLworI2RlZmluZSBH T1BUX1JFUyA0CQkJLyogUmVjb3ZlciAoUmVzZW5kKSAqLworI2RlZmluZSBHT1BUX0NNRCA4CQkJ LyogRmlsZW5hbWUgaXMgYSBDb21tYW5kICovCisKKy8qIEdFVCBUcmFuc2ZlciBNb2RlcyAqLwor CisjZGVmaW5lIEdNT0RfVFhUIDAJCQkvKiBUZXh0ICovCisjZGVmaW5lIEdNT0RfQklOIDEJCQkv KiBCaW5hcnkgKi8KKyNkZWZpbmUgR01PRF9BVVQgMgkJCS8qIEF1dG8gKi8KKyNkZWZpbmUgR01P RF9MQkwgMwkJCS8qIExhYmVsZWQgKi8KKworLyogR0VUIEZpbGVuYW1lIE9wdGlvbnMgKi8KKwor I2RlZmluZSBHTkFNX0xJVCAwCQkJLyogTGl0ZXJhbCAqLworI2RlZmluZSBHTkFNX0NOViAxCQkJ LyogQ29udmVydGVkICovCisKKy8qIEdFVCBQYXRobmFtZSBPcHRpb25zICovCisKKyNkZWZpbmUg R1BUSF9PRkYgMAkJCS8qIFBhdGhuYW1lcyBPZmYgKi8KKyNkZWZpbmUgR1BUSF9SRUwgMQkJCS8q IFBhdGhuYW1lcyBSZWxhdGl2ZSAqLworI2RlZmluZSBHUFRIX0FCWCAyCQkJLyogUGF0aG5hbWVz IEFic29sdXRlICovCisKKyNpZm5kZWYgTk9TUEwKKy8qCisgIFRoZSBJRiBSRU1PVEUtT05MWSBj b21tYW5kIGlzIGF2YWlsYWJsZSBvbmx5IGluIHZlcnNpb25zCisgIHRoYXQgYWN0dWFsbHkgY2Fu IGJlIHVzZWQgaW4gcmVtb3RlIG1vZGUsIGFuZCBvbmx5IGlmIHdlIGhhdmUKKyAgYW4gaW50ZXJh Y3RpdmUgY29tbWFuZCBwYXJzZXIuCisqLworI2RlZmluZSBDS19JRlJPCisjaWZkZWYgTUFDCisj dW5kZWYgQ0tfSUZSTworI2Vsc2UKKyNpZmRlZiBHRU1ET1MKKyN1bmRlZiBDS19JRlJPCisjZW5k aWYgLyogR0VNRE9TICovCisjZW5kaWYgLyogTUFDICovCisjZW5kaWYgLyogTk9TUEwgKi8KKwor LyogU3lzdGVtcyB3aG9zZSBDT05ORUNUIG1vZHVsZXMgY2FuIGV4ZWN1dGUgQXBwbGljYXRpb24g UHJvZ3JhbSBDb21tYW5kcyAqLworCisjaWZkZWYgTk9TUEwJCQkJLyogU2NyaXB0IHByb2dyYW1t aW5nIGxhbmd1YWdlICovCisjaWZkZWYgQ0tfQVBDCQkJCS8qIGlzIHJlcXVpcmVkIGZvciBBUEMu ICovCisjdW5kZWYgQ0tfQVBDCisjZW5kaWYgLyogQ0tfQVBDICovCisjaWZuZGVmIE5PQVBDCisj ZGVmaW5lIE5PQVBDCisjZW5kaWYgLyogTk9BUEMgKi8KKyNpZm5kZWYgTk9BVVRPREwKKyNkZWZp bmUgTk9BVVRPREwKKyNlbmRpZiAvKiBOT0FVVE9ETCAqLworI2VuZGlmIC8qIE5PU1BMICovCisK KyNpZm5kZWYgTk9BUEMJCQkJLyogVW5sZXNzIHRoZXkgc2FpZCBOTyBBUEMgKi8KKyNpZm5kZWYg Q0tfQVBDCQkJCS8qIEFuZCB0aGV5IGRpZG4ndCBhbHJlYWR5IGRlZmluZSBpdCAqLworI2lmZGVm IE9TMgkJCQkvKiBPUy8yIGdldHMgaXQgKi8KKyNkZWZpbmUgQ0tfQVBDCisjZW5kaWYgLyogT1My ICovCisjaWZkZWYgVU5JWAkJCQkvKiBVTklYIGdldHMgaXQgKi8KKyNkZWZpbmUgQ0tfQVBDCisj ZW5kaWYgLyogVU5JWCAqLworI2lmZGVmIFZNUwkJCQkvKiBWTVMgdG9vICovCisjZGVmaW5lIENL X0FQQworI2VuZGlmIC8qIFZNUyAqLworI2VuZGlmIC8qIENLX0FQQyAqLworI2VuZGlmIC8qIE5P QVBDICovCisKKyNpZmRlZiBDS19BUEMJCQkJLyogQVBDIGJ1ZmZlciBsZW5ndGggKi8KKyNpZm5k ZWYgQVBDQlVGTEVOCQkJLyogU2hvdWxkIGJlIG5vIGJpZ2dlciB0aGFuICovCisjaWZkZWYgTk9T UEwJCQkJLyogY29tbWFuZCBidWZmZXIgbGVuZ3RoICovCisjZGVmaW5lIEFQQ0JVRkxFTiA2MDgJ CQkvKiAoc2VlIGNrdWNtZC5oKSBidXQgd2UgY2FuJ3QgKi8KKyNlbHNlCQkJCQkvKiByZWZlcmVu Y2UgY2t1Y21kLmggc3ltYm9scyBoZXJlICovCisjZGVmaW5lIEFQQ0JVRkxFTiA0MDk2CisjZW5k aWYgLyogTk9TUEwgKi8KKyNlbmRpZiAvKiBBUENCVUZMRU4gKi8KKyNkZWZpbmUgQVBDX09GRiAg IDAJLyogQVBDIE9GRiAoZGlzYWJsZWQpICovCisjZGVmaW5lIEFQQ19PTiAgICAxCS8qIEFQQyBP TiAoZW5hYmxlZCBmb3Igbm9uLWRhbmdlcm91cyBjb21tYW5kcykgKi8KKyNkZWZpbmUgQVBDX1VO Q0ggIDIJLyogQVBDIFVOQ0hFQ0tFRCAoZW5hYmxlZCBmb3IgQUxMIGNvbW1hbmRzKSBiaXRtYXNr ICovCisjZGVmaW5lIEFQQ19OT0lOUCA0ICAgICAvKiBBUEMgKGVuYWJsZWQgd2l0aCBubyBpbnB1 dCBhbGxvd2VkIC0gYml0bWFzaykgKi8KKyNkZWZpbmUgQVBDX0lOQUNUSVZFIDAJLyogQVBDIG5v dCBpbiB1c2UgKi8KKyNkZWZpbmUgQVBDX1JFTU9URSAgIDEJLyogQVBDIGluIHVzZSBmcm9tIFJl bW90ZSAqLworI2RlZmluZSBBUENfTE9DQUwgICAgMgkvKiBBUEMgYmVpbmcgdXNlZCBmcm9tIHdp dGhpbiBLZXJtaXQgKi8KKyNpZm5kZWYgTk9BVVRPREwKKyNpZm5kZWYgQ0tfQVVUT0RMCS8qIEF1 dG9kb3dubG9hZCAqLworI2lmZGVmIE9TMgorI2RlZmluZSBDS19BVVRPREwKKyNlbHNlCisjaWZk ZWYgVU5JWAorI2RlZmluZSBDS19BVVRPREwKKyNlbHNlCisjaWZkZWYgVk1TCisjZGVmaW5lIENL X0FVVE9ETAorI2Vsc2UKKyNpZmRlZiBDS19BVVRPREwKKyN1bmRlZiBDS19BVVRPREwKKyNlbmRp ZiAvKiBDS19BVVRPREwgICovCisjZW5kaWYgLyogTk9BVVRPREwgKi8KKyNlbmRpZiAvKiBWTVMg Ki8KKyNlbmRpZiAvKiBVTklYICovCisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogQ0tfQVVU T0RMICovCisKKyNlbHNlICAvKiBDS19BUEMgbm90IGRlZmluZWQgKi8KKworI2lmZGVmIE5PSUNQ CisjaWZkZWYgVU5JWAorI2lmbmRlZiBDS19BVVRPREwKKyNkZWZpbmUgQ0tfQVVUT0RMCisjZW5k aWYgLyogQ0tfQVVUT0RMICovCisjZW5kaWYgLyogVU5JWCAqLworI2Vsc2UgIC8qIE5vdCBOT0lD UC4uLiAqLworI2lmZGVmIENLX0FVVE9ETAorI3VuZGVmIENLX0FVVE9ETAorI2VuZGlmIC8qIENL X0FVVE9ETCAqLworI2VuZGlmIC8qIE5PSUNQICovCisjZW5kaWYgLyogQ0tfQVBDICovCisKKyNp ZmRlZiBOT0FVVE9ETAorI2lmZGVmIENLX0FVVE9ETAorI3VuZGVmIENLX0FVVE9ETAorI2VuZGlm IC8qIENLX0FVVE9ETCAqLworI2VuZGlmIC8qIE5PQVVUT0RMICovCisKKy8qIENvZGVzIGZvciB3 aGF0IHdlIGFyZSBkb2luZyBub3cgLSBiaXQgbWFzayB2YWx1ZXMgKi8KKworI2RlZmluZSBXX05P VEhJTkcgICAgMAkJCS8qIE5vdGhpbmcgKi8KKyNkZWZpbmUgV19JTklUICAgICAgIDEJCQkvKiBJ bml0aWFsaXppbmcgcHJvdG9jb2wgKi8KKyNkZWZpbmUgV19TRU5EICAgICAgIDIJCQkvKiBTRU5E aW5nIG9yIE1BSUxpbmcgKi8KKyNkZWZpbmUgV19SRUNWICAgICAgIDQJCQkvKiBSRUNFSVZFaW5n IG9yIEdFVHRpbmcgKi8KKyNkZWZpbmUgV19SRU1PICAgICAgIDgJCQkvKiBEb2luZyBhIFJFTU9U RSBjb21tYW5kICovCisjZGVmaW5lIFdfQ09OTkVDVCAgIDE2CQkJLyogQ09OTkVDVCBtb2RlICov CisjZGVmaW5lIFdfQ09NTUFORCAgIDMyCQkJLyogQ29tbWFuZCBtb2RlICovCisjZGVmaW5lIFdf RElBTElORyAgIDY0CQkJLyogRGlhbGluZyBhIG1vZGVtICovCisjZGVmaW5lIFdfRlRQICAgICAg MTI4CQkJLyogRlRQICovCisjZGVmaW5lIFdfRlRfREVMRSAgIDY0CQkJLyogRlRQIE1ERUxFVEUg Ki8KKyNkZWZpbmUgV19LRVJNSVQgKFdfSU5JVHxXX1NFTkR8V19SRUNWfFdfUkVNTykgLyogS2Vy bWl0IHByb3RvY29sICovCisjZGVmaW5lIFdfWEZFUiAoV19JTklUfFdfU0VORHxXX1JFQ1Z8V19S RU1PfFdfRlRQKSAvKiBGaWxlIHhmZXIgYW55IHByb3RvY29sICovCisKKyNpZm5kZWYgTk9XSEFU QU1JCisjaWZuZGVmIFdIQVRBTUkKKyNkZWZpbmUgV0hBVEFNSQorI2VuZGlmIC8qIFdIQVRBTUkg Ki8KKyNlbmRpZiAvKiBOT1dIQVRBTUkgKi8KKworI2lmZGVmIFdIQVRBTUkJCQkJLyogQml0IG1h c2sgcG9zaXRpb25zIGZvciBXSEFUQU1JICovCisjZGVmaW5lIFdNSV9TRVJWRSAgIDEJCQkvKiBT ZXJ2ZXIgbW9kZSAqLworI2RlZmluZSBXTUlfRk1PREUgICAyCQkJLyogRmlsZSB0cmFuc2ZlciBt b2RlICovCisjZGVmaW5lIFdNSV9GTkFNRSAgIDQJCQkvKiBGaWxlIG5hbWUgY29udmVyc2lvbiAq LworI2RlZmluZSBXTUlfU1RSRUFNICA4CQkJLyogSSBoYXZlIGEgcmVsaWFibGUgdHJhbnNwb3J0 ICovCisjZGVmaW5lIFdNSV9DTEVBUiAgMTYJCQkvKiBJIGhhdmUgYSBjbGVhciBjaGFubmVsICov CisjZGVmaW5lIFdNSV9GTEFHICAgMzIJCQkvKiBGbGFnIHRoYXQgV0hBVEFNSSBmaWVsZCBpcyB2 YWxpZCAqLworLyogV0hBVEFNSTIgYml0cy4uLiAqLworI2RlZmluZSBXTUkyX1hNT0RFICAxCQkJ LyogVHJhbnNmZXIgbW9kZSBhdXRvKDApL21hbnVhbCgxKSAqLworI2RlZmluZSBXTUkyX1JFQ1Ug ICAyCQkJLyogVHJhbnNmZXIgaXMgcmVjdXJzaXZlICovCisjZGVmaW5lIFdNSTJfRkxBRyAgMzIJ CQkvKiBGbGFnIHRoYXQgV0hBVEFNSTIgZmllbGQgaXMgdmFsaWQgKi8KKyNlbmRpZiAvKiBXSEFU QU1JICovCisKKy8qIFRlcm1pbmFsIHR5cGVzICovCisjZGVmaW5lIFZUMTAwICAgICAwCQkJLyog QWxzbyBmb3IgVlQ1MiBtb2RlICovCisjZGVmaW5lIFRFS1RST05JWCAxCisKKy8qIE5vcm1hbCBw YWNrZXQgYW5kIHdpbmRvdyBzaXplICovCisKKyNkZWZpbmUgTUFYUEFDSyA5NAkJCS8qIE1heGlt dW0gdW5leHRlbmRlZCBwYWNrZXQgc2l6ZSAqLworCQkJCQkvKiBDYW4ndCBiZSBtb3JlIHRoYW4g OTQuICovCisjaWZkZWYgcGRwMTEJCQkJLyogTWF4aW11bSBzbGlkaW5nIHdpbmRvdyBzbG90cyAq LworI2RlZmluZSBNQVhXUyAgOAorI2Vsc2UKKyNkZWZpbmUgTUFYV1MgMzIJCQkvKiBDYW4ndCBi ZSBtb3JlIHRoYW4gMzIuICovCisjZW5kaWYgLyogcGRwMTEgKi8KKworLyogTWF4aW11bSBsb25n IHBhY2tldCBzaXplIGZvciBzZW5kaW5nIHBhY2tldHMgKi8KKy8qIE92ZXJyaWRlIHRoZXNlIGZy b20gY2MgY29tbWFuZCBsaW5lIHZpYSAtRE1BWFNQPW5ubiAqLworCisjaWZkZWYgSVJJWAkJCQkv KiBJcml4IDYuNCBhbmQgZWFybGllciBoYXMgKi8KKyNpZm5kZWYgTUFYU1AJCQkJLyogVGVsbmV0 IHNlcnZlciBidWcgKi8KKyNpZmRlZiBJUklYNjUKKyNkZWZpbmUgTUFYU1AgOTAyNAorI2Vsc2UK KyNkZWZpbmUgTUFYU1AgNDAwMAorI2VuZGlmIC8qIElSSVg2NSAqLworI2VuZGlmIC8qIE1BWFNQ ICovCisjZW5kaWYgLyogSVJJWCAqLworCisjaWZkZWYgRFlOQU1JQworI2lmbmRlZiBNQVhTUAor I2RlZmluZSBNQVhTUCA5MDI0CisjZW5kaWYgLyogTUFYU1AgKi8KKyNlbHNlICAvKiBub3QgRFlO QU1JQyAqLworI2lmbmRlZiBNQVhTUAorI2lmZGVmIHBkcDExCisjZGVmaW5lIE1BWFNQIDEwMjQK KyNlbHNlCisjZGVmaW5lIE1BWFNQIDIwNDgKKyNlbmRpZiAvKiBwZHAxMSAqLworI2VuZGlmIC8q IE1BWFNQICovCisjZW5kaWYgLyogRFlOQU1JQyAqLworCisvKiBNYXhpbXVtIGxvbmcgcGFja2V0 IHNpemUgZm9yIHJlY2VpdmluZyBwYWNrZXRzICovCisvKiBPdmVycmlkZSB0aGVzZSBmcm9tIGNj IGNvbW1hbmQgbGluZSB2aWEgLURNQVhSUD1ubm4gKi8KKworI2lmZGVmIERZTkFNSUMKKyNpZm5k ZWYgTUFYUlAKKyNkZWZpbmUgTUFYUlAgOTAyNAorI2VuZGlmIC8qIE1BWFJQICovCisjZWxzZSAg Lyogbm90IERZTkFNSUMgKi8KKyNpZm5kZWYgTUFYUlAKKyNpZmRlZiBwZHAxMQorI2RlZmluZSBN QVhSUCAxMDI0CisjZWxzZQorI2RlZmluZSBNQVhSUCAyMDQ4CisjZW5kaWYgLyogcGRwMTEgKi8K KyNlbmRpZiAvKiBNQVhSUCAqLworI2VuZGlmIC8qIERZTkFNSUMgKi8KKy8qCisgIERlZmF1bHQg c2l6ZXMgZm9yIHdpbmRvd2VkIHBhY2tldCBidWZmZXJzLgorICBPdmVycmlkZSB0aGVzZSBmcm9t IGNjIGNvbW1hbmQgbGluZSB2aWEgLURTQlNJWj1ubm4sIC1EUkJTSVo9bm5uLgorICBPciBqdXN0 IC1EQklHQlVGT0suCisqLworI2lmbmRlZiBNQVhHRVRQQVRICQkJLyogTWF4aW11bSBudW1iZXIg b2YgZGlyZWN0b3JpZXMgKi8KKyNpZmRlZiBCSUdCVUZPSwkJCQkvKiBmb3IgR0VUIHBhdGguLi4g Ki8KKyNkZWZpbmUgTUFYR0VUUEFUSCAxMjgKKyNlbHNlCisjZGVmaW5lIE1BWEdFVFBBVEggMTYK KyNlbmRpZiAvKiBCSUdCVUZPSyAqLworI2VuZGlmIC8qIE1BWEdFVFBBVEggKi8KKworI2lmbmRl ZiBOT1NQTAkJCQkvKiBRdWVyeSBidWZmZXIgbGVuZ3RoICovCisjaWZkZWYgT1MyCisjZGVmaW5l IFFCVUZMIDQwOTUKKyNlbHNlCisjaWZkZWYgQklHQlVGT0sKKyNkZWZpbmUgUUJVRkwgNDA5NQor I2Vsc2UKKyNkZWZpbmUgUUJVRkwgMTAyMworI2VuZGlmIC8qIEJJR0JVRk9LICovCisjZW5kaWYg LyogT1MyICovCisjZW5kaWYgLyogTk9TUEwgKi8KKworI2lmZGVmIERZTkFNSUMKKyNpZm5kZWYg U0JTSVoKKyNpZmRlZiBCSUdCVUZPSwkJCQkvKiBJZiBiaWcgYnVmZmVycyBhcmUgc2FmZS4uLiAq LworI2RlZmluZSBTQlNJWiAyOTAwMDAJCQkvKiBBbGxvdyBmb3IgMTAgeCA5MDI0IG9yIDIwIHgg NDA5NiAqLworI2Vsc2UJCQkJCS8qIE90aGVyd2lzZS4uLiAqLworI2lmZGVmIHBkcDExCisjZGVm aW5lIFNCU0laIDMwMjAKKyNlbHNlCisjZGVmaW5lIFNCU0laIDkwNTAJCQkvKiBBbGxvdyBmb3Ig MyB4IDMwMDAsIGV0Yy4gKi8KKyNlbmRpZiAvKiBwZHAxMSAqLworI2VuZGlmIC8qIEJJR0JVRk9L ICovCisjZW5kaWYgLyogU0JTSVogKi8KKworI2lmbmRlZiBSQlNJWgorI2lmZGVmIEJJR0JVRk9L CisjZGVmaW5lIFJCU0laIDI5MDAwMAorI2Vsc2UKKyNpZmRlZiBwZHAxMQorI2RlZmluZSBSQlNJ WiAzMDIwCisjZWxzZQorI2RlZmluZSBSQlNJWiA5MDUwCisjZW5kaWYgLyogcGRwMTEgKi8KKyNl bmRpZiAvKiBCSUdCVUZPSyAqLworI2VuZGlmIC8qIFJCU0laICovCisjZWxzZSAgLyogbm90IERZ TkFNSUMgKi8KKyNpZmRlZiBwZHAxMQorI2RlZmluZSBTQlNJWiAzMDIwCisjZGVmaW5lIFJCU0la IDMwMjAKKyNlbHNlCisjaWZuZGVmIFNCU0laCisjZGVmaW5lIFNCU0laIChNQVhTUCAqIChNQVhX UyArIDEpKQorI2VuZGlmIC8qIFNCU0laICovCisjaWZuZGVmIFJCU0laCisjZGVmaW5lIFJCU0la IChNQVhSUCAqIChNQVhXUyArIDEpKQorI2VuZGlmIC8qIFJCU0laICovCisjZW5kaWYgLyogcGRw MTEgKi8KKyNlbmRpZiAvKiBEWU5BTUlDICovCisKKyNpZmRlZiBCSUdCVUZPSworI2RlZmluZSBQ S1RNU0dMRU4gMTAyMworI2Vsc2UKKyNkZWZpbmUgUEtUTVNHTEVOIDgwCisjZW5kaWYgLyogQklH QlVGT0sgKi8KKworLyogS2VybWl0IHBhcmFtZXRlcnMgYW5kIGRlZmF1bHRzICovCisKKyNkZWZp bmUgQ1RMUQkgICAnIycJCQkvKiBDb250cm9sIGNoYXIgcHJlZml4IEkgd2lsbCB1c2UgKi8KKyNk ZWZpbmUgTVlFQlEJICAgJyYnCQkJLyogOHRoLUJpdCBwcmVmaXggY2hhciBJIHdpbGwgdXNlICov CisjZGVmaW5lIE1ZUlBUUQkgICAnficJCQkvKiBSZXBlYXQgY291bnQgcHJlZml4IEkgd2lsbCB1 c2UgKi8KKworI2RlZmluZSBNQVhUUlkJICAgIDEwCQkJLyogVGltZXMgdG8gcmV0cnkgYSBwYWNr ZXQgKi8KKyNkZWZpbmUgTVlQQUROCSAgICAwCQkJLyogSG93IG1hbnkgcGFkZGluZyBjaGFycyBJ IG5lZWQgKi8KKyNkZWZpbmUgTVlQQURDCSAgICAnXDAnCQkvKiBXaGljaCBwYWRkaW5nIGNoYXJh Y3RlciBJIG5lZWQgKi8KKworI2RlZmluZSBETVlUSU0JICAgIDgJCQkvKiBJbml0aWFsIHRpbWVv dXQgaW50ZXJ2YWwgdG8gdXNlLiAqLworI2RlZmluZSBVUlRJTUUJICAgIDE1CQkJLyogVGltZW91 dCBpbnRlcnZhbCB0byB1c2Ugb24gbWUuICovCisjZGVmaW5lIERTUlZUSU0gICAgIDAJCQkvKiBE ZWZhdWx0IHNlcnZlciBjbWQgd2FpdCB0aW1lb3V0LiAqLworCisjZGVmaW5lIERFRlRSTgkgICAg MAkJCS8qIERlZmF1bHQgbGluZSB0dXJuYXJvdW5kIGhhbmRzaGFrZSAqLworCisjZGVmaW5lIE1Z RU9MCSAgICBDUgkJCS8qIEluY29taW5nIHBhY2tldCB0ZXJtaW5hdG9yLiAqLworCisjaWZkZWYg TkVXREVGQVVMVFMKKyNkZWZpbmUgRFJQU0laCSAgNDA5NQkJCS8qIERlZmF1bHQgaW5jb21pbmcg cGFja2V0IHNpemUuICovCisjZGVmaW5lIERGV1NJWiAgICAgIDMwCQkJLyogRGVmYXVsdCB3aW5k b3cgc2l6ZSAqLworI2RlZmluZSBERkJDVCAgICAgICAgMwkJCS8qIERlZmF1bHQgYmxvY2stY2hl Y2sgdHlwZSAqLworI2Vsc2UKKyNkZWZpbmUgRFJQU0laCSAgICA5MAkJCS8qIERlZmF1bHQgaW5j b21pbmcgcGFja2V0IHNpemUuICovCisjZGVmaW5lIERGV1NJWiAgICAgICAxCQkJLyogRGVmYXVs dCB3aW5kb3cgc2l6ZSAqLworI2RlZmluZSBERkJDVCAgICAgICAgMwkJCS8qIERlZmF1bHQgYmxv Y2stY2hlY2sgdHlwZSAqLworI2VuZGlmIC8qIE5FV0RFRkFVTFRTICovCisKKy8qIFRoZSBIUC1V WCA1IGFuZCA2IFRlbG5ldCBzZXJ2ZXJzIGNhbiBvbmx5IHN3YWxsb3cgNTEzIGJ5dGVzIGF0IG9u Y2UgKi8KKworI2lmZGVmIEhQVVg1CisjaWZkZWYgRFJQU0laCisjdW5kZWYgRFJQU0laCisjZW5k aWYgLyogRFJQU0laICovCisjZGVmaW5lIERSUFNJWiA1MDAKKyNlbHNlCisjaWZkZWYgSFBVWDYK KyNpZmRlZiBEUlBTSVoKKyN1bmRlZiBEUlBTSVoKKyNlbmRpZiAvKiBEUlBTSVogKi8KKyNkZWZp bmUgRFJQU0laIDUwMAorI2VuZGlmIC8qIEhQVVg2ICovCisjZW5kaWYgLyogSFBVWDUgKi8KKwor I2RlZmluZSBEU1BTSVoJICAgIDkwCQkJLyogRGVmYXVsdCBvdXRib3VuZCBwYWNrZXQgc2l6ZS4g Ki8KKyNkZWZpbmUgRERFTEFZICAgICAgMQkJCS8qIERlZmF1bHQgZGVsYXkuICovCisjZGVmaW5l IERTUEVFRAkgICAgOTYwMAkJLyogRGVmYXVsdCBsaW5lIHNwZWVkLiAqLworCisjaWZkZWYgT1My CQkJCS8qIERlZmF1bHQgQ09OTkVDVC1tb2RlICovCisjZGVmaW5lIERGRVNDIDI5CQkJLyogZXNj YXBlIGNoYXJhY3RlciAqLworI2Vsc2UKKyNpZmRlZiBORVhUCQkJCS8qIEN0cmwtXSBmb3IgUEMg YW5kIE5lWFQgKi8KKyNkZWZpbmUgREZFU0MgMjkKKyNlbHNlCisjaWZkZWYgR0VNRE9TCQkJCS8q IEFuZCBBdGFyaSBTVCAqLworI2RlZmluZSBERkVTQyAyOQorI2Vsc2UKKyNkZWZpbmUgREZFU0Mg MjgJCQkvKiBDdHJsLWJhY2tzbGFzaCBmb3Igb3RoZXJzICovCisjZW5kaWYgLyogR0VNRE9TICov CisjZW5kaWYgLyogTkVYVCAqLworI2VuZGlmIC8qIE9TMiAqLworCisjaWZkZWYgTk9QVVNICQkJ CS8qIE5PUFVTSCBpbXBsaWVzIE5PSkMgKi8KKyNpZm5kZWYgTk9KQwkJCQkvKiAobm8gam9iIGNv bnRyb2wpICovCisjZGVmaW5lIE5PSkMKKyNlbmRpZiAvKiBOT0pDICovCisjZW5kaWYgLyogTk9Q VVNIICovCisKKyNpZmRlZiBVTklYCQkJCS8qIERlZmF1bHQgZm9yIFNFVCBTVVNQRU5EICovCisj aWZkZWYgTk9KQwkJCQkvKiBVTklYIGJ1dCBqb2IgY29udHJvbCBkaXNhYmxlZCAqLworI2RlZmlu ZSBERlNVU1AgICAgICAwCisjZWxzZQkJCQkJLyogVU5JWCwgam9iIGNvbnRyb2wgZW5hYmxlZC4g Ki8KKyNkZWZpbmUgREZTVVNQICAgICAgMQorI2VuZGlmIC8qIE5PSkMgKi8KKyNlbHNlCisjZGVm aW5lIERGU1VTUCAgICAgIDAKKyNlbmRpZiAvKiBVTklYICovCisKKyNpZm5kZWYgREZDRE1TRwor I2lmZGVmIFVOSVhPUk9TSworI2RlZmluZSBERkNETVNHICJ7ey4vLnJlYWRtZX17UkVBRE1FLlRY VH17UkVBRC5NRX19IgorI2Vsc2UKKyNkZWZpbmUgREZDRE1TRyAie3tSRUFETUUuVFhUfXtSRUFE Lk1FfX0iCisjZW5kaWYgLyogVU5JWE9ST1NLICovCisjZW5kaWYgLyogREZDRE1TRyAqLworCisj ZGVmaW5lIE5TTkRFWENFUFQgNjQJCS8qIE1heCBwYXR0ZXJucyBmb3IgL0VYQ0VQVDogbGlzdCAq LworCisvKiBGaWxlcyAqLworCisjZGVmaW5lIFpDVEVSTSAgICAgIDAJICAgIAkvKiBDb25zb2xl IHRlcm1pbmFsICovCisjZGVmaW5lIFpTVERJTyAgICAgIDEJCS8qIFN0YW5kYXJkIGlucHV0L291 dHB1dCAqLworI2RlZmluZSBaSUZJTEUJICAgIDIJCS8qIEN1cnJlbnQgaW5wdXQgZmlsZSAoU0VO RCwgZXRjKSAoaW4pICovCisjZGVmaW5lIFpPRklMRSAgICAgIDMJICAgIAkvKiBDdXJyZW50IG91 dHB1dCBmaWxlIChSRUNFSVZFLCBHRVQpIChvdXQpICovCisjZGVmaW5lIFpERklMRSAgICAgIDQJ ICAgIAkvKiBDdXJyZW50IGRlYnVnZ2luZyBsb2cgZmlsZSAob3V0KSAqLworI2RlZmluZSBaVEZJ TEUgICAgICA1CSAgICAJLyogQ3VycmVudCB0cmFuc2FjdGlvbiBsb2cgZmlsZSAob3V0KSAqLwor I2RlZmluZSBaUEZJTEUgICAgICA2CSAgICAJLyogQ3VycmVudCBwYWNrZXQgbG9nIGZpbGUgKG91 dCkgKi8KKyNkZWZpbmUgWlNGSUxFICAgICAgNwkJLyogQ3VycmVudCBzZXNzaW9uIGxvZyBmaWxl IChvdXQpICovCisjZGVmaW5lIFpTWVNGTgkgICAgOAkJLyogSW5wdXQvT3V0cHV0IGZyb20gYSBz eXN0ZW0gZnVuY3Rpb24gKi8KKyNkZWZpbmUgWlJGSUxFICAgICAgOSAgICAgICAgICAgLyogTG9j YWwgZmlsZSBmb3IgUkVBRCAoaW4pICovCisjZGVmaW5lIFpXRklMRSAgICAgMTAgICAgICAgICAg IC8qIExvY2FsIGZpbGUgZm9yIFdSSVRFIChvdXQpICovCisjZGVmaW5lIFpNRklMRSAgICAgMTEJ CS8qIE1pc2NlbGxhbmVvdXMgZmlsZSwgZS5nLiBmb3IgWExBVEUgKi8KKyNkZWZpbmUgWkRJRklM ICAgICAxMgkJLyogRElBTCBsb2cgKi8KKyNkZWZpbmUgWk5GSUxTICAgICAxMwkgICAgCS8qIEhv dyBtYW55IGRlZmluZWQgZmlsZSBudW1iZXJzICovCisKKyNpZmRlZiBDS0NIQU5ORUxJTworCisv KiBGaWxlIG1vZGVzICovCisKKyNkZWZpbmUgRk1fUkVBICAgICAgMQkJCS8qIFJlYWQgKi8KKyNk ZWZpbmUgRk1fV1JJICAgICAgMgkJCS8qIFdyaXRlICovCisjZGVmaW5lIEZNX0FQUCAgICAgIDQJ CQkvKiBBcHBlbmQgKi8KKyNkZWZpbmUgRk1fUldBICAgICAgNwkJCS8qIFJlYWQvV3JpdGUvQXBw ZW5kIG1hc2sgKi8KKyNkZWZpbmUgRk1fQklOICAgICAgOAkJCS8qIEJpbmFyeSAqLworI2RlZmlu ZSBGTV9SV0IgICAgIDE1CQkJLyogUmVhZC9Xcml0ZS9BcHBlbmQvQmluYXJ5IG1hc2sgKi8KKyNk ZWZpbmUgRk1fQ01EICAgICAxNgkJCS8qIENvbW1hbmQgKi8KKyNkZWZpbmUgRk1fRU9GICAgICA2 NAkJCS8qIChzdGF0dXMpIEF0IEVPRiAqLworCisvKiBGaWxlIGVycm9ycyAqLworCisjZGVmaW5l IEZYX05FUiAgICAgIDAJCQkvKiBObyBlcnJvciAqLworI2RlZmluZSBGWF9TWVMgICAgIC0xCQkJ LyogU3lzdGVtIGVycm9yICovCisjZGVmaW5lIEZYX0VPRiAgICAgLTIJCQkvKiBFbmQgb2YgZmls ZSAqLworI2RlZmluZSBGWF9OT1AgICAgIC0zCQkJLyogQ2hhbm5lbCBub3Qgb3BlbiAqLworI2Rl ZmluZSBGWF9DSE4gICAgIC00CQkJLyogQ2hhbm5lbCBvdXQgb2YgcmFuZ2UgKi8KKyNkZWZpbmUg RlhfUk5HICAgICAtNQkJCS8qIEFyZ3VtZW50IHJhbmdlIGVycm9yICovCisjZGVmaW5lIEZYX0ZO RiAgICAgLTYJCQkvKiBGaWxlIG5vdCBmb3VuZCAqLworI2RlZmluZSBGWF9CRk4gICAgIC03CQkJ LyogQmFkIG9yIG1pc3NpbmcgZmlsZW5hbWUgKi8KKyNkZWZpbmUgRlhfTk1GICAgICAtOAkJCS8q IE5vIG1vcmUgZmlsZXMgKi8KKyNkZWZpbmUgRlhfRk9QICAgICAtOQkJCS8qIEZvcmJpZGRlbiBv cGVyYXRpb24gKi8KKyNkZWZpbmUgRlhfQUNDICAgIC0xMAkJCS8qIEFjY2VzcyBkZW5pZWQgKi8K KyNkZWZpbmUgRlhfQk9NICAgIC0xMQkJCS8qIEJhZCBjb21iaW5hdGlvbiBvZiBvcGVuIG1vZGVz ICovCisjZGVmaW5lIEZYX09GTCAgICAtMTIJCQkvKiBCdWZmZXIgb3ZlcmZsb3cgKi8KKyNkZWZp bmUgRlhfTE5VICAgIC0xMwkJCS8qIEN1cnJlbnQgbGluZSBudW1iZXIgdW5rbm93biAqLworI2Rl ZmluZSBGWF9ST08gICAgLTE0CQkJLyogU2V0IFJvb3QgdmlvbGF0aW9uICovCisjZGVmaW5lIEZY X05ZSSAgICAtOTkJCQkvKiBGZWF0dXJlIG5vdCBpbXBsZW1lbnRlZCB5ZXQgKi8KKyNkZWZpbmUg RlhfVU5LICAgLTk5OQkJCS8qIFVua25vd24gZXJyb3IgKi8KKworX1BST1RPVFlQKCBpbnQgel9v cGVuLCAoY2hhciAqLCBpbnQpICk7CitfUFJPVE9UWVAoIGludCB6X2Nsb3NlLCAoaW50KSApOwor X1BST1RPVFlQKCBpbnQgel9vdXQsIChpbnQsIGNoYXIgKiwgaW50LCBpbnQpICk7CitfUFJPVE9U WVAoIGludCB6X2luLCAoaW50LCBjaGFyICosIGludCwgaW50LCBpbnQpICk7CitfUFJPVE9UWVAo IGludCB6X2ZsdXNoLCAoaW50KSApOworX1BST1RPVFlQKCBpbnQgel9zZWVrLCAoaW50LCBDS19P RkZfVCkgKTsKK19QUk9UT1RZUCggaW50IHpfbGluZSwgKGludCwgQ0tfT0ZGX1QpICk7CitfUFJP VE9UWVAoIGludCB6X2dldG1vZGUsIChpbnQpICk7CitfUFJPVE9UWVAoIGludCB6X2dldGZudW0s IChpbnQpICk7CitfUFJPVE9UWVAoIENLX09GRl9UIHpfZ2V0cG9zLCAoaW50KSApOworX1BST1RP VFlQKCBDS19PRkZfVCB6X2dldGxpbmUsIChpbnQpICk7CitfUFJPVE9UWVAoIENLX09GRl9UIHpf Y291bnQsIChpbnQsIGludCkgKTsKK19QUk9UT1RZUCggY2hhciAqIHpfZ2V0bmFtZSwgKGludCkg KTsKK19QUk9UT1RZUCggY2hhciAqIGNrZmVycm9yLCAoaW50KSApOworI2VuZGlmIC8qIENLQ0hB Tk5FTElPICovCisKK19QUk9UT1RZUCggaW50IHNjYW5maWxlLCAoY2hhciAqLCBpbnQgKiwgaW50 KSApOworX1BST1RPVFlQKCBpbnQgc2NhbnN0cmluZywgKGNoYXIgKikgKTsKKworLyogIEJ1ZmZl cmVkIGZpbGUgaS9vIC4uLiAgKi8KKyNpZmRlZiBPUzIJCQkJLyogSy05NSAqLworI2RlZmluZSBJ TkJVRlNJWkUgMzI3NjgKKyNkZWZpbmUgT0JVRlNJWkUgMzI3NjgKKyNlbHNlCisjaWZkZWYgcGRw MTEKKyNkZWZpbmUgSU5CVUZTSVpFIDUxMgorI2RlZmluZSBPQlVGU0laRSA1MTIKKyNlbHNlCisv KiBJbiBWTVMsIGFsbG93IGZvciBsb25nZXN0IHBvc3NpYmxlIFJNUyByZWNvcmQgKi8KKyNpZmRl ZiBWTVMKKyNkZWZpbmUgSU5CVUZTSVpFIDMyNzY4CQkJLyogRmlsZSBpbnB1dCBidWZmZXIgc2l6 ZSAqLworI2RlZmluZSBPQlVGU0laRSAzMjc2OAkJCS8qIEZpbGUgb3V0cHV0IGJ1ZmZlciBzaXpl ICovCisjZWxzZSAgLyogTm90IFZNUyAqLworI2lmZGVmIFNUUkFUVVMKKyNpZmRlZiBEWU5BTUlD CisjZGVmaW5lIElOQlVGU0laRSAzMjc2NwkJCS8qIEZpbGUgaW5wdXQgYnVmZmVyIHNpemUgKi8K KyNkZWZpbmUgT0JVRlNJWkUgMzI3NjcJCQkvKiBGaWxlIG91dHB1dCBidWZmZXIgc2l6ZSAqLwor I2Vsc2UgLyogU1RSQVRVUywgbm90IERZTkFNSUMgKi8KKyNkZWZpbmUgSU5CVUZTSVpFIDQwOTYJ CQkvKiBGaWxlIGlucHV0IGJ1ZmZlciBzaXplICovCisjZGVmaW5lIE9CVUZTSVpFIDQwOTYJCQkv KiBGaWxlIG91dHB1dCBidWZmZXIgc2l6ZSAqLworI2VuZGlmIC8qIERZTkFNSUMgKi8KKyNlbHNl IC8qIG5vdCBTVFJBVFVTICovCisjaWZkZWYgQklHQlVGT0sJCQkJLyogU3lzdGVtcyB3aGVyZSBt ZW1vcnkgaXMgKi8KKyNkZWZpbmUgSU5CVUZTSVpFIDMyNzY4CQkJLyogbm90IGEgcHJvYmxlbS4u LiAqLworI2RlZmluZSBPQlVGU0laRSAzMjc2OAorI2Vsc2UgLyogTm90IEJJR0JVRk9LICovCisj ZGVmaW5lIElOQlVGU0laRSAxMDI0CisjZGVmaW5lIE9CVUZTSVpFIDEwMjQKKyNlbmRpZiAvKiBC SUdCVUZPSyAqLworI2VuZGlmIC8qIFNUUkFUVVMgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKyNlbmRp ZiAvKiBwZHAxMSAqLworI2VuZGlmIC8qIE9TMiAqLworCisvKiBGaWxlLXRyYW5zZmVyIGNoYXJh Y3RlciBpbi9vdXQgbWFjcm9zIGZvciBidWZmZXJlZCBpL28gKi8KKworLyogR2V0IHRoZSBuZXh0 IGZpbGUgYnl0ZSAqLworI2lmbmRlZiBDS0NNQUkKKyNpZm5kZWYgTk9YRkVSCitleHRlcm4gY2hh ciAqKiBzbmRhcnJheTsKKyNlbmRpZiAvKiBOT1hGRVIgKi8KKyNlbmRpZiAvKiBDS0NNQUkgKi8K KyNpZmRlZiBOT1NQTAorI2RlZmluZSB6bWluY2hhcigpICgoKC0temluY250KT49MCkgPyAoKGlu dCkoKnppbnB0cisrKSAmIDAzNzcpIDogemluZmlsbCgpKQorI2Vsc2UKKyNpZmRlZiBOT1hGRVIK KyNkZWZpbmUgem1pbmNoYXIoKSAoKCgtLXppbmNudCk+PTApID8gKChpbnQpKCp6aW5wdHIrKykg JiAwMzc3KSA6IHppbmZpbGwoKSkKKyNlbHNlCisjZGVmaW5lIHptaW5jaGFyKCkgXAorKHNuZGFy cmF5P2FnbmJ5dGUoKTooKCgtLXppbmNudCk+PTApID8gKChpbnQpKCp6aW5wdHIrKykgJiAwMzc3 KSA6IHppbmZpbGwoKSkpCisjZW5kaWYgLyogTk9YRkVSICovCisjZW5kaWYgLyogTk9TUEwgKi8K KworLyogU3R1ZmYgYSBjaGFyYWN0ZXIgaW50byB0aGUgaW5wdXQgYnVmZmVyICovCisjZGVmaW5l IHptc3R1ZmYoYykgemlucHRyLS0sICp6aW5wdHIgPSBjLCB6aW5jbnQrKworCisvKiBQdXQgYSBj aGFyYWN0ZXIgdG8gYSBmaWxlICovCisjZGVmaW5lIHptY2hvdXQoYykgXAorKCgqem91dHB0cisr PShjaGFyKShjKSksKCgoKyt6b3V0Y250KT49em9idWZzaXplKT96b3V0ZHVtcCgpOjApKQorCisv KiBTY3JlZW4gZnVuY3Rpb25zICovCisKKyNkZWZpbmUgWFlGRF9OIDAJCQkvKiBGaWxlIHRyYW5z ZmVyIGRpc3BsYXk6IE5vbmUsIE9mZiAqLworI2RlZmluZSBYWUZEX1IgMQkJCS8qIFJlZ3VsYXIs IERvdHMgKi8KKyNkZWZpbmUgWFlGRF9DIDIJCQkvKiBDdXJzb3ItcG9zaXRpb25pbmcgKGUuZy4g Y3Vyc2VzKSAqLworI2RlZmluZSBYWUZEX1MgMwkJCS8qIENSVCBTY3JlZW4gKi8KKyNkZWZpbmUg WFlGRF9CIDQJCQkvKiBCcmllZiAqLworI2RlZmluZSBYWUZEX0cgNSAgICAgICAgICAgICAgICAg ICAgICAgIC8qIEdVSSAqLworCisjaWZkZWYgTk9ESVNQTEFZCisjZGVmaW5lIHh4c2NyZWVuKGEs YixjLGQpCisjZGVmaW5lIGNrc2NyZWVuKGEsYixjLGQpCisjZWxzZQorX1BST1RPVFlQKCBWT0lE IGNrc2NyZWVuLCAoaW50LCBjaGFyLCBDS19PRkZfVCwgY2hhciAqKSApOworI2lmZGVmIFZNUwor I2RlZmluZSB4eHNjcmVlbihhLGIsYyxkKSBcCitpZiAobG9jYWwgJiYgZmRpc3BsYSAhPSBYWUZE X04pIFwKK2Nrc2NyZWVuKChpbnQpYSwoY2hhciliLChDS19PRkZfVCljLChjaGFyICopZCkKKyNl bHNlCisjZGVmaW5lIHh4c2NyZWVuKGEsYixjLGQpIFwKK2lmIChsb2NhbCAmJiAhYmFja2dyZCAm JiBmZGlzcGxhICE9IFhZRkRfTikgXAorY2tzY3JlZW4oKGludClhLChjaGFyKWIsKENLX09GRl9U KWMsKGNoYXIgKilkKQorI2VuZGlmIC8qIFZNUyAqLworI2VuZGlmIC8qIE5PRElTUExBWSAqLwor CisjZGVmaW5lIFNDUl9GTiAxICAgIAkvKiBmaWxlbmFtZSAqLworI2RlZmluZSBTQ1JfQU4gMiAg ICAJLyogYXMtbmFtZSAqLworI2RlZmluZSBTQ1JfRlMgMyAJLyogZmlsZS1zaXplICovCisjZGVm aW5lIFNDUl9YRCA0ICAgIAkvKiB4LXBhY2tldCBkYXRhICovCisjZGVmaW5lIFNDUl9TVCA1ICAg ICAgCS8qIEZpbGUgc3RhdHVzOiAqLworI2RlZmluZSAgIFNUX09LICAgMCAgIAkvKiAgVHJhbnNm ZXJyZWQgT0sgKi8KKyNkZWZpbmUgICBTVF9ESVNDIDEgCS8qICBEaXNjYXJkZWQgKi8KKyNkZWZp bmUgICBTVF9JTlQgIDIgICAgIC8qICBJbnRlcnJ1cHRlZCAqLworI2RlZmluZSAgIFNUX1NLSVAg MyAJLyogIFNraXBwZWQgKi8KKyNkZWZpbmUgICBTVF9FUlIgIDQgCS8qICBGYXRhbCBFcnJvciAq LworI2RlZmluZSAgIFNUX1JFRlUgNSAgICAgLyogIFJlZnVzZWQgKHVzZSBBdHRyaWJ1dGUgY29k ZXMgZm9yIHJlYXNvbikgKi8KKyNkZWZpbmUgICBTVF9JTkMgIDYJLyogIEluY29tcGxldGVseSBy ZWNlaXZlZCAqLworI2RlZmluZSAgIFNUX01TRyAgNwkvKiAgSW5mb3JtYXRpb25hbCBtZXNzYWdl ICovCisjZGVmaW5lICAgU1RfU0lNICA4CS8qICBUcmFuc2ZlciBzaW11bGF0ZWQgKGUuZy4gd291 bGQgYmUgc2VudCkgKi8KKyNkZWZpbmUgU0NSX1BOIDYgICAgCS8qIHBhY2tldCBudW1iZXIgKi8K KyNkZWZpbmUgU0NSX1BUIDcgICAgCS8qIHBhY2tldCB0eXBlIG9yIHBzZXVkb3R5cGUgKi8KKyNk ZWZpbmUgU0NSX1RDIDggICAgCS8qIHRyYW5zYWN0aW9uIGNvbXBsZXRlICovCisjZGVmaW5lIFND Ul9FTSA5ICAgIAkvKiBlcnJvciBtZXNzYWdlICovCisjZGVmaW5lIFNDUl9XTSAxMCAgIAkvKiB3 YXJuaW5nIG1lc3NhZ2UgKi8KKyNkZWZpbmUgU0NSX1RVIDExCS8qIGFyYml0cmFyeSB1bmRlbGlt aXRlZCB0ZXh0ICovCisjZGVmaW5lIFNDUl9UTiAxMiAgIAkvKiBhcmJpdHJhcnkgbmV3IHRleHQs IGRlbGltaXRlZCBhdCBiZWdpbm5pbmcgKi8KKyNkZWZpbmUgU0NSX1RaIDEzICAgCS8qIGFyYml0 cmFyeSB0ZXh0LCBkZWxpbWl0ZWQgYXQgZW5kICovCisjZGVmaW5lIFNDUl9RRSAxNAkvKiBxdWFu dGl0eSBlcXVhbHMgKGUuZy4gImZvbzogNyIpICovCisjZGVmaW5lIFNDUl9DVyAxNQkvKiBjbG9z ZSBzY3JlZW4gd2luZG93ICovCisjZGVmaW5lIFNDUl9DRCAxNiAgICAgICAvKiBkaXNwbGF5IGN1 cnJlbnQgZGlyZWN0b3J5ICovCisjZGVmaW5lIFNDUl9NUyAxNwkvKiBtZXNzYWdlIGZyb20gY2xp ZW50ICovCisKKy8qIFNraXAgcmVhc29ucyAqLworCisjZGVmaW5lIFNLUF9EQVQgMQkJCS8qIERh dGUtVGltZSAoT2xkZXIpICovCisjZGVmaW5lIFNLUF9FUVUgMgkJCS8qIERhdGUtVGltZSAoRXF1 YWwpICovCisjZGVmaW5lIFNLUF9UWVAgMwkJCS8qIFR5cGUgKi8KKyNkZWZpbmUgU0tQX1NJWiA0 CQkJLyogU2l6ZSAqLworI2RlZmluZSBTS1BfTkFNIDUJCQkvKiBOYW1lIGNvbGxpc2lvbiAqLwor I2RlZmluZSBTS1BfRVhMIDYJCQkvKiBFeGNlcHRpb24gbGlzdCAqLworI2RlZmluZSBTS1BfRE9U IDcJCQkvKiBEb3QgZmlsZSAqLworI2RlZmluZSBTS1BfQktVIDgJCQkvKiBCYWNrdXAgZmlsZSAq LworI2RlZmluZSBTS1BfUkVTIDkJCQkvKiBSZWNvdmVyeSBub3QgbmVlZGVkICovCisjZGVmaW5l IFNLUF9BQ0MgMTAJCQkvKiBBY2Nlc3MgZGVuaWVkICovCisjZGVmaW5lIFNLUF9OUkYgMTEJCQkv KiBOb3QgYSByZWd1bGFyIGZpbGUgKi8KKyNkZWZpbmUgU0tQX1NJTSAxMgkJCS8qIFNpbXVsYXRp b24gKFdPVUxEIEJFIFNFTlQpICovCisjZGVmaW5lIFNLUF9YVVAgMTMgLyogU2ltdWxhdGlvbjog V291bGQgYmUgc2VudCBiZWNhdXNlIHJlbW90ZSBmaWxlIG9sZGVyICovCisjZGVmaW5lIFNLUF9Y TlggMTQgLyogU2ltdWxhdGlvbjogZGl0dG8sIGJlY2F1c2UgcmVtb3RlIGZpbGUgZG9lcyBub3Qg ZXhpc3QgKi8KKworLyogTWFjcm9zICovCisKKyNpZm5kZWYgQ0tDTUFJCitleHRlcm4gaW50IHRj cF9pbmNvbWluZzsJCS8qIFVzZWQgYnkgRU5BQkxFIG1hY3JvICovCisjZW5kaWYgLyogQ0tDTUFJ ICovCisKKyNpZm5kZWYgVENQU09DS0VUCisvKgorICBFTkFCTEVEIHRlbGxzIHdoZXRoZXIgYSBz ZXJ2ZXItc2lkZSBzZXJ2aWNlIGlzIGVuYWJsZWQuCisgIDAgPSBkaXNhYmxlZCwgMSA9IGxvY2Fs LCAyID0gcmVtb3RlLgorICBBICJzZXQgaG9zdCAqIiBjb25uZWN0aW9uIGlzIHRlY2huaWNhbGx5 IGxvY2FsIGJ1dCBsb2dpY2FsbHkgcmVtb3RlCisqLworI2RlZmluZSBFTkFCTEVEKHgpICgobG9j YWwgJiYgKHggJiAxKSkgfHwgKCFsb2NhbCAmJiAoeCAmIDIpKSkKKyNlbHNlCisjZGVmaW5lIEVO QUJMRUQoeCkgKCgobG9jYWwgJiYgIXRjcF9pbmNvbWluZykgJiYgKHggJiAxKSkgfHwgXAorKCgh bG9jYWwgfHwgdGNwX2luY29taW5nKSAmJiAoeCYyKSkpCisjZW5kaWYgLyogVENQU09DS0VUICov CisKKy8qIFRoZXNlIGFyZSBmcm9tIHRoZSBib29rICovCisKKyNkZWZpbmUgdG9jaGFyKGNoKSAg KCgoY2gpICsgU1AgKSAmIDB4RkYgKQkvKiBOdW1iZXIgdG8gY2hhcmFjdGVyICovCisjZGVmaW5l IHh1bmNoYXIoY2gpICgoKGNoKSAtIFNQICkgJiAweEZGICkJLyogQ2hhcmFjdGVyIHRvIG51bWJl ciAqLworI2RlZmluZSBjdGwoY2gpICAgICAoKChjaCkgXiA2NCApICYgMHhGRiApCS8qIENvbnRy b2wvVW5jb250cm9sIHRvZ2dsZSAqLworI2RlZmluZSB1bnBhcihjaCkgICAoKChjaCkgJiAxMjcp ICYgMHhGRiApCS8qIENsZWFyIHBhcml0eSBiaXQgKi8KKworI2lmbmRlZiBOT0xPQ0FMCQkJCS8q IENPTk5FQ1QgcmV0dXJuIHN0YXR1cyBjb2RlcyAqLworCisvKiBVc2VycyB3aWxsIHNlZSB0aGUg bnVtYmVycyBzbyB0aGV5IGNhbid0IGJlIGNoYW5nZWQgKi8KKy8qIE51bWJlcnMgPj0gMTAwIGlu ZGljYXRlIGNvbm5lY3Rpb24gbG9zcyAqLworCisjZGVmaW5lIENTWF9OT05FICAgICAgICAwCQkv KiBObyBDT05ORUNUIHlldCBzbyBubyBzdGF0dXMgKi8KKyNkZWZpbmUgQ1NYX0VTQ0FQRSAgICAg IDEJCS8qIFVzZXIgRXNjYXBlZCBiYWNrICovCisjZGVmaW5lIENTWF9UUklHR0VSICAgICAyCQkv KiBUcmlnZ2VyIHdhcyBlbmNvdW50ZXJlZCAqLworI2RlZmluZSBDU1hfSUtTRCAgICAgICAgMwkJ LyogSUtTRCBhdXRvc3luY2hyb25pemF0aW9uICovCisjZGVmaW5lIENTWF9BUEMgICAgICAgICA0 CQkvKiBBcHBsaWNhdGlvbiBQcm9ncmFtIENvbW1hbmQgKi8KKyNkZWZpbmUgQ1NYX0lETEUgICAg ICAgIDUJCS8qIElkbGUgbGltaXQgZXhjZWVkZWQgKi8KKyNkZWZpbmUgQ1NYX1ROX0VSUiAgICAg IDYJCS8qIFRlbG5ldCBFcnJvciAqLworI2RlZmluZSBDU1hfTUFDUk8gICAgICAgNyAgICAgICAg ICAgICAgIC8qIE1hY3JvIGJvdW5kIHRvIGtleXN0cm9rZSAqLworI2RlZmluZSBDU1hfVElNRSAg ICAgICAgOCAgICAgICAgICAgICAgIC8qIFRpbWUgTGltaXQgZXhjZWVkZWQgKi8KKyNkZWZpbmUg Q1NYX0lOVEVSTkFMICAxMDAJCS8qIEludGVybmFsIGVycm9yICovCisjZGVmaW5lIENTWF9DQVJS SUVSICAgMTAxCQkvKiBDYXJyaWVyIHJlcXVpcmVkIGJ1dCBub3QgZGV0ZWN0ZWQgKi8KKyNkZWZp bmUgQ1NYX0lPRVJST1IgICAxMDIJCS8qIEkvTyBlcnJvciBvbiBjb25uZWN0aW9uICovCisjZGVm aW5lIENTWF9IT1NURElTQyAgMTAzCQkvKiBEaXNjb25uZWN0ZWQgYnkgaG9zdCAqLworI2RlZmlu ZSBDU1hfVVNFUkRJU0MgIDEwNAkJLyogRGlzY29ubmVjdGVkIGJ5IHVzZXIgKi8KKyNkZWZpbmUg Q1NYX1NFU1NJT04gICAxMDUJCS8qIFNlc3Npb24gTGltaXQgZXhjZWVkZWQgKi8KKyNkZWZpbmUg Q1NYX1ROX1BPTCAgICAxMDYJCS8qIFJlamVjdGVkIGR1ZSB0byBUZWxuZXQgUG9saWN5ICovCisj ZGVmaW5lIENTWF9LSUxMX1NJRyAgMTA3ICAgICAgICAgICAgICAgLyogUmVjZWl2ZWQgS2lsbCBT aWduYWwgKi8KKworLyogU0VUIFRFUk1JTkFMIElETEUtQUNUSU9OIHZhbHVlcyAqLworCisjZGVm aW5lIElETEVfUkVUICAwCQkJLyogUmV0dXJuIHRvIHByb21wdCAqLworI2RlZmluZSBJRExFX0VY SVQgMQkJCS8qIEV4aXQgZnJvbSBLZXJtaXQgKi8KKyNkZWZpbmUgSURMRV9IQU5HIDIJCQkvKiBI YW5ndXAgdGhlIGNvbm5lY3Rpb24gKi8KKyNkZWZpbmUgSURMRV9PVVQgIDMJCQkvKiBPVVRQVVQg YSBzdHJpbmcgKi8KKyNkZWZpbmUgSURMRV9UTk9QIDQJCQkvKiBURUxORVQgTk9QICovCisjZGVm aW5lIElETEVfVEFZVCA1CQkJLyogVEVMTkVUIEFZVCAqLworI2VuZGlmIC8qIE5PTE9DQUwgKi8K KworLyogTW9kZW0gYW5kIGRpYWxpbmcgZGVmaW5pdGlvbnMgKi8KKworI2lmbmRlZiBOT0RJQUwK KworLyogTW9kZW0gY2FwYWJpbGl0aWVzIChiaXQgdmFsdWVzKSAqLworI2RlZmluZSBDS0RfQVQg ICAxCQkJLyogSGF5ZXMgQVQgY29tbWFuZHMgYW5kIHJlc3BvbnNlcyAqLworI2RlZmluZSBDS0Rf VjI1ICAyCQkJLyogVi4yNWJpcyBjb21tYW5kcyBhbmQgcmVzcG9uc2VzICovCisjZGVmaW5lIENL RF9TQiAgIDQJCQkvKiBTcGVlZCBidWZmZXJpbmcgKi8KKyNkZWZpbmUgQ0tEX0VDICAgOAkJCS8q IEVycm9yIGNvcnJlY3Rpb24gKi8KKyNkZWZpbmUgQ0tEX0RDICAxNgkJCS8qIERhdGEgY29tcHJl c3Npb24gKi8KKyNkZWZpbmUgQ0tEX0hXICAzMgkJCS8qIEhhcmR3YXJlIGZsb3cgY29udHJvbCAq LworI2RlZmluZSBDS0RfU1cgIDY0CQkJLyogKExvY2FsKSBzb2Z0d2FyZSBmbG93IGNvbnRyb2wg Ki8KKyNkZWZpbmUgQ0tEX0tTIDEyOAkJCS8qIEtlcm1pdCBzcG9vZmluZyAqLworI2RlZmluZSBD S0RfVEIgMjU2CQkJLyogTWFkZSBieSBUZWxlYml0ICovCisjZGVmaW5lIENLRF9JRCA1MTIJCQkv KiBIYXMgQ2FsbGVyIElEICovCisKKy8qIERJQUwgY29tbWFuZCByZXN1bHQgY29kZXMgKi8KKyNk ZWZpbmUgRElBX1VOSyAgIC0xCQkJLyogTm8gRElBTCBjb21tYW5kIGdpdmVuIHlldCAqLworI2Rl ZmluZSBESUFfT0sgICAgIDAJCQkvKiBESUFMIHN1Y2NlZWRlZCAqLworI2RlZmluZSBESUFfTk9N TyAgIDEJCQkvKiBNb2RlbSB0eXBlIG5vdCBzcGVjaWZpZWQgKi8KKyNkZWZpbmUgRElBX05PTEkg ICAyCQkJLyogQ29tbXVuaWNhdGlvbiBsaW5lIG5vdCBzcGVjJ2QgKi8KKyNkZWZpbmUgRElBX09Q RU4gICAzCQkJLyogTGluZSBjYW4ndCBiZSBvcGVuZWQgKi8KKyNkZWZpbmUgRElBX05PU1AgICA0 CQkJLyogU3BlZWQgbm90IHNwZWNpZmllZCAqLworI2RlZmluZSBESUFfSEFORyAgIDUJCQkvKiBI YW5ndXAgZmFpbHVyZSAqLworI2RlZmluZSBESUFfSUUgICAgIDYJCQkvKiBJbnRlcm5hbCBlcnJv ciAobWFsbG9jLCBldGMpICovCisjZGVmaW5lIERJQV9JTyAgICAgNwkJCS8qIEkvTyBlcnJvciAq LworI2RlZmluZSBESUFfVElNTyAgIDgJCQkvKiBEaWFsIHRpbWVvdXQgZXhwaXJlZCAqLworI2Rl ZmluZSBESUFfSU5UUiAgIDkJCQkvKiBEaWFsaW5nIGludGVycnVwdGVkIGJ5IHVzZXIgKi8KKyNk ZWZpbmUgRElBX05SRFkgIDEwCQkJLyogTW9kZW0gbm90IHJlYWR5ICovCisjZGVmaW5lIERJQV9Q QVJUICAxMQkJCS8qIFBhcnRpYWwgZGlhbCBjb21tYW5kIE9LICovCisjZGVmaW5lIERJQV9ESVIg ICAxMgkJCS8qIERpYWxpbmcgZGlyZWN0b3J5IGVycm9yICovCisjZGVmaW5lIERJQV9IVVAgICAx MwkJCS8qIE1vZGVtIHdhcyBodW5nIHVwIE9LICovCisjZGVmaW5lIERJQV9OUlNQICAxOQkJCS8q IE5vIHJlc3BvbnNlIGZyb20gbW9kZW0gKi8KKyNkZWZpbmUgRElBX0VSUiAgIDIwCQkJLyogTW9k ZW0gY29tbWFuZCBlcnJvciAqLworI2RlZmluZSBESUFfTk9JTiAgMjEJCQkvKiBGYWlsdXJlIHRv IGluaXRpYWxpemUgbW9kZW0gKi8KKyNkZWZpbmUgRElBX0JVU1kgIDIyCQkJLyogUGhvbmUgYnVz eSAqLworI2RlZmluZSBESUFfTk9DQSAgMjMJCQkvKiBObyBjYXJyaWVyICovCisjZGVmaW5lIERJ QV9OT0RUICAyNAkJCS8qIE5vIGRpYWx0b25lICovCisjZGVmaW5lIERJQV9SSU5HICAyNQkJCS8q IFJpbmcsIGluY29taW5nIGNhbGwgKi8KKyNkZWZpbmUgRElBX05PQU4gIDI2CQkJLyogTm8gYW5z d2VyICovCisjZGVmaW5lIERJQV9ESVNDICAyNwkJCS8qIERpc2Nvbm5lY3RlZCAqLworI2RlZmlu ZSBESUFfVk9JQyAgMjgJCQkvKiBBbnN3ZXJlZCBieSB2b2ljZSAqLworI2RlZmluZSBESUFfTk9B QyAgMjkJCQkvKiBBY2Nlc3MgZGVuaWVkLCBmb3JiaWRkZW4gY2FsbCAqLworI2RlZmluZSBESUFf QkxDSyAgMzAJCQkvKiBCbGFja2xpc3RlZCAqLworI2RlZmluZSBESUFfREVMQSAgMzEJCQkvKiBE ZWxheWVkICovCisjZGVmaW5lIERJQV9GQVggICAzMgkJCS8qIEZheCAqLworI2RlZmluZSBESUFf RElHSSAgMzMgICAgICAgICAgICAgICAgICAgIC8qIERpZ2l0YWwgTGluZSAqLworI2RlZmluZSBE SUFfVEFQSSAgMzQJCQkvKiBUQVBJIGRpYWxpbmcgZmFpbHVyZSAqLworI2RlZmluZSBESUFfVUVS UiAgOTgJCQkvKiBVbmtub3duIGVycm9yICovCisjZGVmaW5lIERJQV9VTlNQICA5OQkJLyogVW5z cGVjaWZpZWQgZmFpbHVyZSBkZXRlY3RlZCBieSBtb2RlbSAqLworCisjZGVmaW5lIE1ETUlORglz dHJ1Y3QgbWRtaW5mCisKK01ETUlORiB7CQkJLyogU3RydWN0dXJlIGZvciBtb2RlbS1zcGVjaWZp YyBpbmZvcm1hdGlvbiAqLworCisgICAgY2hhciAqIG5hbWU7CQkvKiBEZXNjcmlwdGl2ZSBuYW1l ICovCisgICAgY2hhciAqIHB1bHNlOwkJLyogQ29tbWFuZCB0byBmb3JjZSBwdWxzZSBkaWFsaW5n ICovCisgICAgY2hhciAqIHRvbmU7CQkvKiBDb21tYW5kIHRvIGZvcmNlIHRvbmUgZGlhbGluZyAq LworICAgIGludCAgICBkaWFsX3RpbWU7CQkvKiBUaW1lIG1vZGVtIGFsbG93cyBmb3IgZGlhbGlu ZyAoc2VjcykgKi8KKyAgICBjaGFyICogcGF1c2VfY2hhcnM7CQkvKiBDaGFyYWN0ZXIocykgdG8g dGVsbCBtb2RlbSB0byBwYXVzZSAqLworICAgIGludAkgICBwYXVzZV90aW1lOwkJLyogVGltZSBh c3NvY2lhdGVkIHdpdGggcGF1c2UgY2hhcnMgKHNlY3MpICovCisgICAgY2hhciAqIHdha2Vfc3Ry OwkJLyogU3RyaW5nIHRvIHdha2V1cCBtb2RlbSAmIHB1dCBpbiBjbWQgbW9kZSAqLworICAgIGlu dAkgICB3YWtlX3JhdGU7CQkvKiBEZWxheSBiZXR3ZWVuIHdha2Vfc3RyIGNoYXJhY3RlcnMgKG1z ZWNzKSAqLworICAgIGNoYXIgKiB3YWtlX3Byb21wdDsJCS8qIFN0cmluZyBwcm9tcHQgYWZ0ZXIg d2FrZV9zdHIgKi8KKyAgICBjaGFyICogZG1vZGVfc3RyOwkJLyogU3RyaW5nIHRvIHB1dCBtb2Rl bSBpbiBkaWFsaW5nIG1vZGUgKi8KKyAgICBjaGFyICogZG1vZGVfcHJvbXB0OwkvKiBTdHJpbmcg cHJvbXB0IGZvciBkaWFsaW5nIG1vZGUgKi8KKyAgICBjaGFyICogZGlhbF9zdHI7CQkvKiBEaWFs aW5nIHN0cmluZywgd2l0aCAiJXMiIGZvciBudW1iZXIgKi8KKyAgICBpbnQgICAgZGlhbF9yYXRl OwkJLyogSW50ZXJjaGFyIGRlbGF5IHRvIG1vZGVtIChtc2VjKSAqLworICAgIGludCAgICBlc2Nf dGltZTsJCS8qIEVzY2FwZSBzZXF1ZW5jZSBndWFyZCB0aW1lIChtc2VjKSAqLworICAgIGludCAg ICBlc2NfY2hhcjsJCS8qIEVzY2FwZSBjaGFyYWN0ZXIgKi8KKyAgICBjaGFyICogaHVwX3N0cjsJ CS8qIEhhbmd1cCBzdHJpbmcgKi8KKyAgICBjaGFyICogaHdmY19zdHI7CQkvKiBIYXJkd2FyZSBm bG93IGNvbnRyb2wgc3RyaW5nICovCisgICAgY2hhciAqIHN3ZmNfc3RyOwkJLyogU29mdHdhcmUg ZmxvdyBjb250cm9sIHN0cmluZyAqLworICAgIGNoYXIgKiBub2ZjX3N0cjsJCS8qIE5vIGZsb3cg Y29udHJvbCBzdHJpbmcgKi8KKyAgICBjaGFyICogZWNfb25fc3RyOwkJLyogRXJyb3IgY29ycmVj dGlvbiBvbiBzdHJpbmcgKi8KKyAgICBjaGFyICogZWNfb2ZmX3N0cjsJCS8qIEVycm9yIGNvcnJl Y3Rpb24gb2ZmIHN0cmluZyAqLworICAgIGNoYXIgKiBkY19vbl9zdHI7CQkvKiBEYXRhIGNvbXBy ZXNzaW9uIG9uIHN0cmluZyAqLworICAgIGNoYXIgKiBkY19vZmZfc3RyOwkJLyogRGF0YSBjb21w cmVzc2lvbiBvZmYgc3RyaW5nICovCisgICAgY2hhciAqIGFhX29uX3N0cjsJCS8qIEF1dG9hbnN3 ZXIgb24gc3RyaW5nICovCisgICAgY2hhciAqIGFhX29mZl9zdHI7CQkvKiBBdXRvYW5zd2VyIG9m ZiBzdHJpbmcgKi8KKyAgICBjaGFyICogc2Jfb25fc3RyOwkJLyogU3BlZWQgYnVmZmVyaW5nIG9u IHN0cmluZyAqLworICAgIGNoYXIgKiBzYl9vZmZfc3RyOwkJLyogU3BlZWQgYnVmZmVyaW5nIG9m ZiBzdHJpbmcgKi8KKyAgICBjaGFyICogc3Bfb25fc3RyOwkJLyogU3BlYWtlciBvbiBzdHJpbmcg Ki8KKyAgICBjaGFyICogc3Bfb2ZmX3N0cjsJCS8qIFNwZWFrZXIgb2ZmIHN0cmluZyAqLworICAg IGNoYXIgKiB2b2wxX3N0cjsJCS8qIFZvbHVtZSBsb3cgc3RyaW5nICovCisgICAgY2hhciAqIHZv bDJfc3RyOwkJLyogVm9sdW1lIG1lZCBzdHJpbmcgKi8KKyAgICBjaGFyICogdm9sM19zdHI7CQkv KiBWb2x1bWUgaGlnaCBzdHJpbmcgKi8KKyAgICBjaGFyICogaWdub3JlZHQ7CQkvKiBJZ25vcmUg ZGlhbHRvbmUgc3RyaW5nICovCisgICAgY2hhciAqIGluaTI7CQkvKiBMYXN0LW1pbnV0ZSBpbml0 IHN0cmluZyAqLworICAgIGxvbmcgICBtYXhfc3BlZWQ7CQkvKiBNYXhpbXVtIGludGVyZmFjZSBz cGVlZCAqLworICAgIGxvbmcgICBjYXBhczsJCS8qIENhcGFiaWxpdHkgYml0cyAqLworICAgIC8q IGZ1bmN0aW9uIHRvIHJlYWQgbW9kZW0ncyByZXNwb25zZSBzdHJpbmcgdG8gYSBub24tZGlhbGlu ZyBjb21tYW5kICovCisgICAgX1BST1RPVFlQKCBpbnQgKCpva19mbiksIChpbnQsaW50KSApOwor fTsKKyNlbmRpZiAvKiBOT0RJQUwgKi8KKworLyogU3ltYm9scyBmb3IgRmlsZSBBdHRyaWJ1dGVz ICovCisKKyNkZWZpbmUgQVRfWEFMTCAgMAkJCS8qIEFsbCBvZiB0aGVtICovCisjZGVmaW5lIEFU X0FMTFkgIDEJCQkvKiBBbGwgb2YgdGhlbSBvbiAoWWVzKSAqLworI2RlZmluZSBBVF9BTExOICAy CQkJLyogQWxsIG9mIHRoZW0gb2ZmIChubykgKi8KKyNkZWZpbmUgQVRfTEVOSyAgMwkJCS8qIExl bmd0aCBpbiBLICovCisjZGVmaW5lIEFUX0ZUWVAgIDQJCQkvKiBGaWxlIFR5cGUgKi8KKyNkZWZp bmUgQVRfREFURSAgNQkJCS8qIENyZWF0aW9uIGRhdGUgKi8KKyNkZWZpbmUgQVRfQ1JFQSAgNgkJ CS8qIENyZWF0b3IgKi8KKyNkZWZpbmUgQVRfQUNDVCAgNwkJCS8qIEFjY291bnQgKi8KKyNkZWZp bmUgQVRfQVJFQSAgOAkJCS8qIEFyZWEgKi8KKyNkZWZpbmUgQVRfUFNXRCAgOQkJCS8qIFBhc3N3 b3JkIGZvciBhcmVhICovCisjZGVmaW5lIEFUX0JMS1MgMTAJCQkvKiBCbG9ja3NpemUgKi8KKyNk ZWZpbmUgQVRfQUNDRSAxMQkJCS8qIEFjY2VzcyAqLworI2RlZmluZSBBVF9FTkNPIDEyCQkJLyog RW5jb2RpbmcgKi8KKyNkZWZpbmUgQVRfRElTUCAxMwkJCS8qIERpc3Bvc2l0aW9uICovCisjZGVm aW5lIEFUX0xQUk8gMTQJCQkvKiBMb2NhbCBQcm90ZWN0aW9uICovCisjZGVmaW5lIEFUX0dQUk8g MTUJCQkvKiBHZW5lcmljIFByb3RlY3Rpb24gKi8KKyNkZWZpbmUgQVRfU1lTSSAxNgkJCS8qIFN5 c3RlbSBJRCAqLworI2RlZmluZSBBVF9SRUNGIDE3CQkJLyogUmVjb3JkIEZvcm1hdCAqLworI2Rl ZmluZSBBVF9TWVNQIDE4CQkJLyogU3lzdGVtLURlcGVuZGVudCBQYXJhbWV0ZXJzICovCisjZGVm aW5lIEFUX0xFTkIgMTkJCQkvKiBMZW5ndGggaW4gQnl0ZXMgKi8KKyNkZWZpbmUgQVRfRU9BICAy MAkJCS8qIEVuZCBvZiBBdHRyaWJ1dGVzICovCisKKy8qIEtlcm1pdCBwYWNrZXQgaW5mb3JtYXRp b24gc3RydWN0dXJlICovCisKK3N0cnVjdCBwa3RpbmZvIHsJCQkvKiBQYWNrZXQgaW5mb3JtYXRp b24gc3RydWN0dXJlICovCisgICAgQ0hBUiAqYmZfYWRyOwkJCS8qICBidWZmZXIgYWRkcmVzcyAq LworICAgIGludCAgIGJmX2xlbjsJCQkvKiAgYnVmZmVyIGxlbmd0aCAqLworICAgIENIQVIgKnBr X2FkcjsJCQkvKiBQYWNrZXQgYWRkcmVzcyB3aXRoaW4gYnVmZmVyICovCisgICAgaW50ICAgcGtf bGVuOwkJCS8qICBsZW5ndGggb2YgZGF0YSB3aXRoaW4gYnVmZmVyICovCisgICAgaW50ICAgcGtf dHlwOwkJCS8qICBwYWNrZXQgdHlwZSAqLworICAgIGludCAgIHBrX3NlcTsJCQkvKiAgcGFja2V0 IHNlcXVlbmNlIG51bWJlciAqLworICAgIGludCAgIHBrX3J0cjsJCQkvKiAgcmV0cmFuc21pc3Np b24gY291bnQgKi8KK307CisKKy8qIFNlbmQgTW9kZXMgKGluZGljYXRpbmcgd2hpY2ggdHlwZSBv ZiBTRU5EIGNvbW1hbmQgd2FzIHVzZWQpICovCisKKyNkZWZpbmUgU01fU0VORCAgICAgMAorI2Rl ZmluZSBTTV9NU0VORCAgICAxCisjZGVmaW5lIFNNX1JFU0VORCAgIDIKKyNkZWZpbmUgU01fUFNF TkQgICAgMworI2RlZmluZSBTTV9NQUlMICAgICA0CisjZGVmaW5lIFNNX1BSSU5UICAgIDUKKwor I2RlZmluZSBPUFRCVUZMRU4gMjU2CisKKy8qIEZpbGUtcmVsYXRlZCBzeW1ib2xzIGFuZCBzdHJ1 Y3R1cmVzICovCisvKiBVc2VkIGJ5IFNFVCBGSUxFIGNvbW1hbmQgYnV0IGFsc28gYnkgcHJvdG9j b2wgYW5kIGkvbyBtb2R1bGVzICovCisKKyNkZWZpbmUgWE1PREVfQSAwCS8qIFRyYW5zZmVyIG1v ZGUgQXV0b21hdGljICovCisjZGVmaW5lIFhNT0RFX00gMQkvKiBUcmFuc2ZlciBtb2RlIE1hbnVh bCAgICAqLworCisjZGVmaW5lICAgWFlGSUxOIDAgIAkvKiAgTmFtaW5nICAqLworI2RlZmluZSAg ICAgWFlGTl9MIDAJLyogICAgTGl0ZXJhbCAqLworI2RlZmluZSAgICAgWFlGTl9DIDEJLyogICAg Q29udmVydGVkICovCisjZGVmaW5lICAgWFlGSUxUIDEgIAkvKiAgVHlwZSAgICAqLworI2RlZmlu ZSAgICAgWFlGVF9UIDAgICAgLyogICAgVGV4dCAgKi8KKyNkZWZpbmUgICAgIFhZRlRfQiAxICAg IC8qICAgIEJpbmFyeSAqLworI2RlZmluZSAgICAgWFlGVF9JIDIgICAgLyogICAgSW1hZ2Ugb3Ig QmxvY2sgKFZNUykgKi8KKyNkZWZpbmUgICAgIFhZRlRfTCAzCS8qICAgIExhYmVsZWQgKHRhZ2dl ZCBiaW5hcnkpIChWTVMgb3IgT1MvMikgKi8KKyNkZWZpbmUgICAgIFhZRlRfVSA0ICAgIC8qICAg IEJpbmFyeSBVbmRlZmluZWQgKFZNUykgKi8KKyNkZWZpbmUgICAgIFhZRlRfTSA1CS8qICAgIE1h Y0JpbmFyeSAoTWFjaW50b3NoKSAqLworI2RlZmluZSAgICAgWFlGVF9YIDYJLyogICAgVEVORVgg KEZUUCBUWVBFIEwgOCkgKi8KKyNkZWZpbmUgICAgIFhZRlRfRCA5OSAgIC8qICAgIERlYnVnIChm b3Igc2Vzc2lvbiBsb2dzKSAqLworI2RlZmluZSAgIFhZRklMVyAyICAgICAgLyogIFdhcm5pbmcg Ki8KKyNkZWZpbmUgICBYWUZJTEQgMyAgICAgIC8qICBEaXNwbGF5ICovCisjZGVmaW5lICAgWFlG SUxDIDQgICAgICAvKiAgQ2hhcmFjdGVyIHNldCAqLworI2RlZmluZSAgIFhZRklMRiA1ICAgICAg LyogIFJlY29yZCBGb3JtYXQgKi8KKyNkZWZpbmUgICAgIFhZRkZfUyAgMCAgIC8qICAgIFN0cmVh bSAqLworI2RlZmluZSAgICAgWFlGRl9WICAxICAgLyogICAgVmFyaWFibGUgKi8KKyNkZWZpbmUg ICAgIFhZRkZfVkIgMiAgIC8qICAgIFZhcmlhYmxlIHdpdGggUkNXJ3MgKi8KKyNkZWZpbmUgICAg IFhZRkZfRiAgMyAgIC8qICAgIEZpeGVkIGxlbmd0aCAqLworI2RlZmluZSAgICAgWFlGRl9VICA0 ICAgLyogICAgVW5kZWZpbmVkICovCisjZGVmaW5lICAgWFlGSUxSIDYgICAgICAvKiAgUmVjb3Jk IGxlbmd0aCAqLworI2RlZmluZSAgIFhZRklMTyA3ICAgICAgLyogIE9yZ2FuaXphdGlvbiAqLwor I2RlZmluZSAgICAgWFlGT19TIDAgICAgLyogICAgU2VxdWVudGlhbCAqLworI2RlZmluZSAgICAg WFlGT19JIDEgICAgLyogICAgSW5kZXhlZCAqLworI2RlZmluZSAgICAgWFlGT19SIDIgICAgLyog ICAgUmVsYXRpdmUgKi8KKyNkZWZpbmUgICBYWUZJTFAgOCAgICAgIC8qICBQcmludGVyIGNhcnJp YWdlIGNvbnRyb2wgKi8KKyNkZWZpbmUgICAgIFhZRlBfTiAwICAgIC8qICAgIE5ld2xpbmUgKGlt YmVkZGVkIGNvbnRyb2wgY2hhcmFjdGVycykgKi8KKyNkZWZpbmUgICAgIFhZRlBfRiAxICAgIC8q ICAgIEZPUlRSQU4gKHNwYWNlLCAxLCArLCBldGMsIGluIGNvbHVtbiAxICovCisjZGVmaW5lICAg ICBYWUZQX1AgMiAgICAvKiAgICBTcGVjaWFsIHByaW50ZXIgY2FycmlhZ2UgY29udHJvbHMgKi8K KyNkZWZpbmUgICAgIFhZRlBfWCA0ICAgIC8qICAgIE5vbmUgKi8KKyNkZWZpbmUgICBYWUZJTFgg OSAgICAgIC8qICBDb2xsaXNpb24gQWN0aW9uICovCisjZGVmaW5lICAgICBYWUZYX0EgMyAgICAv KiAgICBBcHBlbmQgKi8KKyNkZWZpbmUgICAgIFhZRlhfUSA1ICAgIC8qICAgIEFzayAqLworI2Rl ZmluZSAgICAgWFlGWF9CIDIgICAgLyogICAgQmFja3VwICovCisjZGVmaW5lICAgICBYWUZYX0Qg NCAgICAvKiAgICBEaXNjYXJkICovCisjZGVmaW5lICAgICBYWUZYX1IgMCAgICAvKiAgICBSZW5h bWUgKi8KKyNkZWZpbmUgICAgIFhZRlhfWCAxICAgIC8qICAgIFJlcGxhY2UgKi8KKyNkZWZpbmUg ICAgIFhZRlhfVSA2ICAgIC8qICAgIFVwZGF0ZSAqLworI2RlZmluZSAgICAgWFlGWF9NIDcgICAg LyogICAgTW9kdGltZXMgZGlmZmVyICovCisjZGVmaW5lICAgWFlGSUxCIDEwICAgICAvKiAgQmxv Y2tzaXplICovCisjZGVmaW5lICAgWFlGSUxaIDExICAgICAvKiAgRGlzcG9zaXRpb24gKi8KKyNk ZWZpbmUgICAgIFhZRlpfTiAwICAgIC8qICAgIE5ldywgQ3JlYXRlICovCisjZGVmaW5lICAgICBY WUZaX0EgMSAgICAvKiAgICBOZXcsIGFwcGVuZCBpZiBmaWxlIGV4aXN0cywgZWxzZSBjcmVhdGUg Ki8KKyNkZWZpbmUgICAgIFhZRlpfTyAyICAgIC8qICAgIE9sZCwgZmlsZSBtdXN0IGV4aXN0ICov CisjZGVmaW5lICAgWFlGSUxTIDEyICAgICAvKiAgRmlsZSBCeXRlIFNpemUgKi8KKyNkZWZpbmUg ICBYWUZJTEwgMTMgICAgIC8qICBGaWxlIExhYmVsIChWTVMpICovCisjZGVmaW5lICAgWFlGSUxJ IDE0ICAgICAvKiAgRmlsZSBJbmNvbXBsZXRlICovCisjZGVmaW5lICAgWFlGSUxRIDE1ICAgICAv KiAgRmlsZSBwYXRoIGFjdGlvbiAoc3RyaXAgb3Igbm90KSAqLworI2RlZmluZSAgIFhZRklMRyAx NiAgICAgLyogIEZpbGUgZG93bmxvYWQgZGlyZWN0b3J5ICovCisjZGVmaW5lICAgWFlGSUxBIDE3 ICAgICAvKiAgTGluZSB0ZXJtaW5hdG9yIGZvciBsb2NhbCB0ZXh0IGZpbGVzICovCisjZGVmaW5l ICAgICBYWUZBX0wgMDEyICAvKiAgICBMRiAoYXMgaW4gVU5JWCkgKi8KKyNkZWZpbmUgICAgIFhZ RkFfQyAwMTUgIC8qICAgIENSIChhcyBpbiBPUy05IG9yIE1hYyBPUykgKi8KKyNkZWZpbmUgICAg IFhZRkFfMiAwMDAgIC8qICBDUkxGIC0tIE5vdGU6IHRoaXMgbXVzdCBiZSBkZWZpbmVkIGFzIDAg Ki8KKyNkZWZpbmUgICBYWUZJTFkgMTggICAgIC8qICBEZXN0aW5hdGlvbiAqLworI2RlZmluZSAg IFhZRklMViAxOQkvKiAgRU9GIERldGVjdGlvbiBNZXRob2QgKi8KKyNkZWZpbmUgICAgIFhZRU9G X0wgMCAgIC8qICAgIEZpbGUgbGVuZ3RoICovCisjZGVmaW5lICAgICBYWUVPRl9aIDEgICAvKiAg ICBDdHJsLVogaW4gZmlsZSAqLworI2RlZmluZSAgIFhZRklMSCAgIDIwICAgLyogIE9VVFBVVCBw YXJhbWV0ZXJzIC0gYnVmZmVyZWQsIGJsb2NraW5nLCBldGMgKi8KKyNkZWZpbmUgICBYWUZJQlAg ICAyMQkvKiAgQklOQVJZLVBBVFRFUk4gKi8KKyNkZWZpbmUgICBYWUZJVFAgICAyMiAgIC8qICBU RVhULVBBVFRFUk4gKi8KKyNkZWZpbmUgICBYWUZJUEEgICAyMyAgIC8qICBQQVRURVJOUyBPTi9P RkYgKi8KKyNkZWZpbmUgICBYWUZJTFUgICAyNCAgIC8qICBVQ1MgLi4uICovCisjZGVmaW5lICAg WFlGX1BSTSAgMjUgICAvKiAgUEVSTUlTU0lPTlMsIFBST1RFQ1RJT04gKi8KKyNkZWZpbmUgICBY WUZfSU5TUCAyNiAgIC8qICBJTlNQRUNUSU9OIChTQ0FOKSAqLworI2RlZmluZSAgIFhZRl9ERkxU IDI3ICAgLyogIERFRkFVTFQgKGNoYXJhY3RlciBzZXRzKSAqLworI2RlZmluZSAgIFhZRl9TU1BB IDI4ICAgLyogIFNUUklOR1NQQUNFICovCisjZGVmaW5lICAgWFlGX0xTSVogMjkgICAvKiAgTElT VFNJWkUgKi8KKworLyogRmlsZSBUeXBlIChyZXR1cm4gY29kZSkgZGVmaW5pdGlvbnMgYW5kIGNv cnJlc3BvbmRpbmcgbmFtZSBzdHJpbmdzICovCisKKyNkZWZpbmUgRlRfN0JJVCAwCQkJLyogNy1i aXQgdGV4dCAqLworI2RlZmluZSBGVF84QklUIDEJCQkvKiA4LWJpdCB0ZXh0ICovCisjZGVmaW5l IEZUX1VURjggMgkJCS8qIFVURjggKi8KKyNkZWZpbmUgRlRfVUNTMiAzCQkJLyogVUNTMiAqLwor I2RlZmluZSBGVF9URVhUIDQJCQkvKiBVbmtub3duIHRleHQgKi8KKyNkZWZpbmUgRlRfQklOICA1 CQkJLyogQmluYXJ5ICovCisjZGVmaW5lIFNDQU5GSUxFQlVGIDQ5MTUyCQkvKiBTaXplIG9mIGZp bGUgc2NhbiAoNDhLKSAqLworCisvKiBDb25uZWN0aW9uIGNsb3NlZCByZWFzb25zICovCisKKyNk ZWZpbmUgV0NfUkVNTyAgIDAJCQkvKiBDbG9zZWQgYnkgcmVtb3RlICovCisjZGVmaW5lIFdDX0NM T1MgICAxCQkJLyogQ2xvc2VkIGZyb20gb3VyIGVuZCAqLworI2RlZmluZSBXQ19URUxPUFQgMgkJ CS8qIFRlbG5ldCBuZWdvdGlhdGlvbiBmYWlsdXJlICovCisKKyNpZmRlZiBCSUdCVUZPSworI2Rl ZmluZSBGVFBBVFRFUk5TIDI1NgorI2Vsc2UKKyNkZWZpbmUgRlRQQVRURVJOUyA2NAorI2VuZGlm IC8qIEJJR0JVRk9LICovCisKKyNkZWZpbmUgU1lTX1VOSyAgICAwCQkJLyogU2VsZWN0ZWQgc2Vy dmVyIHN5c3RlbSB0eXBlcyAqLworI2RlZmluZSBTWVNfVU5JWCAgIDEKKyNkZWZpbmUgU1lTX1dJ TjMyICAyCisjZGVmaW5lIFNZU19WTVMgICAgMworI2RlZmluZSBTWVNfT1MyICAgIDQKKyNkZWZp bmUgU1lTX0RPUyAgICA1CisjZGVmaW5lIFNZU19UT1BTMTAgNgorI2RlZmluZSBTWVNfVE9QUzIw IDcKKyNkZWZpbmUgU1lTX1ZPUyAgICA4CisjZGVmaW5lIFNZU19ERyAgICAgOQorI2RlZmluZSBT WVNfT1NLICAgIDEwCisjZGVmaW5lIFNZU19NQVggICAgMTEKKworI2lmZGVmIENLX1NNQUxMCisj ZGVmaW5lIFBXQlVGTCA2MworI2Vsc2UKKyNkZWZpbmUgUFdCVUZMIDI1NQorI2VuZGlmIC8qIENL X1NNQUxMICovCisKKyNpZmRlZiBPUzIKK3N0cnVjdCB0dF9pbmZvX3JlYyB7CQkJLyogVGVybWlu YWwgZW11bGF0aW9uIGluZm8gKi8KKyAgICBjaGFyICAqeF9uYW1lOworICAgIGNoYXIgKnhfYWxp YXNlc1s0XTsKKyAgICBjaGFyICAqeF9pZDsKK307CisjZW5kaWYgLyogT1MyICovCisKKy8qIEJF RVAgVFlQRVMgKi8KKyNkZWZpbmUgQlBfQkVMICAwCQkJLyogVGVybWluYWwgYmVsbCAqLworI2Rl ZmluZSBCUF9OT1RFIDEJCQkvKiBJbmZvICovCisjZGVmaW5lIEJQX1dBUk4gMgkJCS8qIFdhcm5p bmcgKi8KKyNkZWZpbmUgQlBfRkFJTCAzCQkJLyogRXJyb3IgKi8KKworI2lmbmRlZiBOT0lLU0QK KyNpZmRlZiBJS1NEQgkJCQkvKiBJS1NEIERhdGFiYXNlIGRlZmluaXRpb25zICovCisKKy8qIEZp ZWxkIHZhbHVlcyAqLworCisjZGVmaW5lIERCRl9JTlVTRSAgICAxCQkJLyogRmxhZyBiaXRzLi4u IEluIHVzZSAqLworI2RlZmluZSBEQkZfVVNFUiAgICAgMgkJCS8qIFJlYWwgdXNlciAodmVyc3Vz IGFub255bW91cykgKi8KKyNkZWZpbmUgREJGX0xPR0dFRCAgIDQJCQkvKiBMb2dnZWQgaW4gKHZl cnN1cyBub3QpICovCisKKy8qIERhdGEgRGVmaW5pdGlvbnMuLi4gKi8KKworLyogTnVtZXJpYyBm aWVsZHMsIGhleCwgcmlnaHQganVzdGlmaWVkLCAwLWZpbGxlZCBvbiBsZWZ0ICovCisKKyNkZWZp bmUgZGJfRkxBR1MgICAgIDAJCQkvKiBGaWVsZCAwOiBGbGFncyAqLworI2RlZmluZSBEQl9GTEFH UyAgICAgMAkJCS8qIE9mZnNldDogMCAqLworI2RlZmluZSBkQl9GTEFHUyAgICAgNAkJCS8qIExl bmd0aDogNCAoaGV4IGRpZ2l0cykgKi8KKworI2RlZmluZSBkYl9BVFlQRSAgICAgMQkJCS8qIEZp ZWxkIDE6IEF1dGhlbnRpY2F0aW9uIHR5cGUgKi8KKyNkZWZpbmUgREJfQVRZUEUgICAgIDQJCQkv KiA0IGhleCBkaWdpdHMgKi8KKyNkZWZpbmUgZEJfQVRZUEUgICAgIDQKKworI2RlZmluZSBkYl9B TU9ERSAgICAgMgkJCS8qIEZpZWxkIDI6IEF1dGhlbnRpY2F0aW9uIG1vZGUgKi8KKyNkZWZpbmUg REJfQU1PREUgICAgIDgJCQkvKiA0IGhleCBkaWdpdHMgKi8KKyNkZWZpbmUgZEJfQU1PREUgICAg IDQKKworI2RlZmluZSBkYl9TVEFURSAgICAgMwkJCS8qIEZpZWxkIDM6IFN0YXRlIC0gNCBoZXgg ZGlnaXRzKi8KKyNkZWZpbmUgREJfU1RBVEUgICAgMTIJCQkvKiA0IGhleCBkaWdpdHMgKi8KKyNk ZWZpbmUgZEJfU1RBVEUgICAgIDQKKworI2RlZmluZSBkYl9NWVBJRCAgICAgNAkJCS8qIEZpZWxk IDQ6IE15IFBJRCAqLworI2RlZmluZSBEQl9NWVBJRCAgICAxNgkJCS8qIDE2IGhleCBkaWdpdHMg bGVmdCBwYWRkZWQgd2l0aCAwICovCisjZGVmaW5lIGRCX01ZUElEICAgIDE2CisKKyNkZWZpbmUg ZGJfU0FERFIgICAgIDUJCQkvKiBGaWVsZCA1OiBTZXJ2ZXIgKG15KSBJUCBhZGRyZXNzICovCisj ZGVmaW5lIERCX1NBRERSICAgIDMyCQkJLyogMTYgaGV4IGRpZ2l0cyBsZWZ0IHBhZGRlZCB3aXRo IDAgKi8KKyNkZWZpbmUgZEJfU0FERFIgICAgMTYKKworI2RlZmluZSBkYl9DQUREUiAgICAgNgkJ CS8qIEZpZWxkIDY6IENsaWVudCBJUCBhZGRyZXNzICovCisjZGVmaW5lIERCX0NBRERSICAgIDQ4 CQkJLyogMTYgaGV4IGRpZ2l0cyBsZWZ0IHBhZGRlZCB3aXRoIDAgKi8KKyNkZWZpbmUgZEJfQ0FE RFIgICAgMTYKKworLyogRGF0ZS10aW1lIGZpZWxkcyAoMTcgcmlnaHQtYWRqdXN0ZWQgaW4gMTgg Zm9yIFkxMEsgcmVhZGluZXNzKSAqLworCisjZGVmaW5lIGRiX1NUQVJUICAgICA3CQkJLyogRmll bGQgNzogU2Vzc2lvbiBzdGFydCBkYXRlLXRpbWUgKi8KKyNkZWZpbmUgREJfU1RBUlQgICAgNjUJ CQkvKiA2NCBpcyBsZWFkaW5nIHNwYWNlIGZvciBZMTBLICovCisjZGVmaW5lIGRCX1NUQVJUICAg IDE3CisKKyNkZWZpbmUgZGJfTEFTVFUgICAgIDgJCQkvKiBGaWVsZCA4OiBMYXN0IGxhc3R1IGRh dGUtdGltZSAqLworI2RlZmluZSBEQl9MQVNUVSAgICA4MwkJCS8qIDgyIGlzIGxlYWRpbmcgc3Bh Y2UgZm9yIFkxMEsgKi8KKyNkZWZpbmUgZEJfTEFTVFUgICAgMTcKKworI2RlZmluZSBkYl9VTEVO ICAgICAgOQkJCS8qIEZpZWxkIDk6IExlbmd0aCBvZiBVc2VybmFtZSAqLworI2RlZmluZSBEQl9V TEVOICAgIDEwMAkJCS8qIDQgaGV4IGRpZ2l0cyAqLworI2RlZmluZSBkQl9VTEVOICAgICAgNAor CisjZGVmaW5lIGRiX0RMRU4gICAgIDEwCQkJLyogRmllbGQgMTA6IExlbmd0aCBvZiBEaXJlY3Rv cnkgKi8KKyNkZWZpbmUgREJfRExFTiAgICAxMDQJCQkvKiA0IGhleCBkaWdpdHMgKi8KKyNkZWZp bmUgZEJfRExFTiAgICAgIDQKKworI2RlZmluZSBkYl9JTEVOICAgICAxMQkJCS8qIEZpZWxkIDEx OiBMZW5ndGggb2YgSW5mbyAqLworI2RlZmluZSBEQl9JTEVOICAgIDEwOAkJCS8qIDQgaGV4IGRp Z2l0cyAqLworI2RlZmluZSBkQl9JTEVOICAgICAgNAorCisjZGVmaW5lIGRiX1BBRDEgICAgIDEy CQkJLyogRmllbGQgMTI6IChSZXNlcnZlZCkgKi8KKyNkZWZpbmUgREJfUEFEMSAgICAxMTIJCQkv KiBmaWxsZWQgd2l0aCBzcGFjZXMgKi8KKyNkZWZpbmUgZEJfUEFEMSAgICA5MTIKKworLyogU3Ry aW5nIGZpZWxkcywgYWxsIHJpZ2h0LXBhZGRlZCB3aXRoIGJsYW5rcyAqLworCisjZGVmaW5lIGRi X1VTRVIgICAgIDEzCQkJLyogRmllbGQgMTM6IFVzZXJuYW1lICovCisjZGVmaW5lIERCX1VTRVIg ICAxMDI0CQkJLyogcmlnaHQtcGFkZGVkIHdpdGggc3BhY2VzICovCisjZGVmaW5lIGRCX1VTRVIg ICAxMDI0CisKKyNkZWZpbmUgZGJfRElSICAgICAgMTQJCQkvKiBGaWVsZCAxNDogQ3VycmVudCBk aXJlY3RvcnkgKi8KKyNkZWZpbmUgREJfRElSICAgIDIwNDgJCQkvKiByaWdodC1wYWRkZWQgd2l0 aCBzcGFjZXMgKi8KKyNkZWZpbmUgZEJfRElSICAgIDEwMjQKKworI2RlZmluZSBkYl9JTkZPICAg ICAxNQkJCS8qIEZpZWxkIDE1OiBTdGF0ZS1zcGVjaWZpYyBpbmZvICovCisjZGVmaW5lIERCX0lO Rk8gICAzMDcyCQkJLyogcmlnaHQtcGFkZGVkIHdpdGggc3BhY2VzICovCisjZGVmaW5lIGRCX0lO Rk8gICAxMDI0CisKKyNkZWZpbmUgREJfUkVDTCAgIDQwOTYJCQkvKiBEYXRhYmFzZSByZWNvcmQg bGVuZ3RoICovCisKKy8qIE9mZnNldCwgbGVuZ3RoLCBhbmQgdHlwZSBvZiBlYWNoIGZpZWxkIHRo cnUgaXRzIGRiX1hYWCBzeW1ib2wgKi8KKworI2RlZmluZSBEQlRfSEVYIDEJCQkvKiBIZXhhZGVj aW1hbCBudW1iZXIgKi8KKyNkZWZpbmUgREJUX1NUUiAyCQkJLyogU3RyaW5nICovCisjZGVmaW5l IERCVF9EQVQgMwkJCS8qIERhdGUtVGltZSB5eXl5bW1kZCBoaDptbTpzcyAqLworI2RlZmluZSBE QlRfVU5EIDkJCQkvKiBVbmRlZmluZWQgYW5kIGJsYW5rICovCisKK3N0cnVjdCBpa3NkYmZsZCB7 CisgICAgaW50IG9mZjsJCQkJLyogUG9zaXRpb24gKG9mZnNldCkgKi8KKyAgICBpbnQgbGVuOwkJ CQkvKiBMZW5ndGggKGJ5dGVzKSAqLworICAgIGludCB0eXA7CQkJCS8qIERhdGEgdHlwZSAqLwor fTsKK19QUk9UT1RZUChpbnQgZGJpbml0LCAodm9pZCkpOworX1BST1RPVFlQKGludCBpbml0c2xv dCwgKGludCkpOworX1BST1RPVFlQKGludCBnZXRzbG90LCAodm9pZCkpOworX1BST1RPVFlQKGlu dCBmcmVlc2xvdCwgKGludCkpOworX1BST1RPVFlQKGludCB1cGRzbG90LCAoaW50KSk7CitfUFJP VE9UWVAoaW50IHNsb3RzdGF0ZSwgKGludCwgY2hhciAqLCBjaGFyICosIGNoYXIgKikpOworX1BS T1RPVFlQKGludCBzbG90ZGlyLCAoY2hhciAqLCBjaGFyICopKTsKKyNlbmRpZiAvKiBJS1NEQiAq LworI2VuZGlmIC8qIE5PSUtTRCAqLworCisvKiBBTlNJIGZvcndhcmQgZGVjbGFyYXRpb25zIGZv ciBwcm90b2NvbC1yZWxhdGVkIGZ1bmN0aW9ucy4gKi8KKworX1BST1RPVFlQKCBpbnQgaW5wdXQs ICh2b2lkKSApOworX1BST1RPVFlQKCBpbnQgaW5pYnVmcywgKGludCwgaW50KSApOworX1BST1RP VFlQKCBpbnQgbWFrZWJ1ZiwgKGludCwgaW50LCBDSEFSIFtdLCBzdHJ1Y3QgcGt0aW5mbyAqKSAp OworX1BST1RPVFlQKCBpbnQgbWtzYnVmLCAoaW50KSApOworX1BST1RPVFlQKCBpbnQgbWtyYnVm LCAoaW50KSApOworX1BST1RPVFlQKCBpbnQgc3BhY2ssIChjaGFyLCBpbnQsIGludCwgQ0hBUiAq KSApOworX1BST1RPVFlQKCBWT0lEIHByb3RvLCAodm9pZCkgKTsKK19QUk9UT1RZUCggaW50IHJw YWNrLCAodm9pZCkgKTsKK19QUk9UT1RZUCggaW50IGFjaywgKHZvaWQpICk7CitfUFJPVE9UWVAo IGludCBuYWNrLCAoaW50KSApOworX1BST1RPVFlQKCBpbnQgYWNrbiwgKGludCkgKTsKK19QUk9U T1RZUCggaW50IGFjazEsIChDSEFSICopICk7CitfUFJPVE9UWVAoIGludCBhY2tucywgKGludCwg Q0hBUiAqKSApOworI2lmZGVmIFNUUkVBTUlORworX1BST1RPVFlQKCBpbnQgZmFzdGFjaywgKHZv aWQpICk7CisjZW5kaWYgLyogU1RSRUFNSU5HICovCitfUFJPVE9UWVAoIGludCByZXNlbmQsIChp bnQpICk7CitfUFJPVE9UWVAoIGludCBlcnJwa3QsIChDSEFSICopICk7CitfUFJPVE9UWVAoIFZP SUQgbG9ncGt0LCAoY2hhciwgaW50LCBDSEFSICosIGludCkgKTsKK19QUk9UT1RZUCggQ0hBUiBk b3BhciwgKENIQVIpICk7CitfUFJPVE9UWVAoIGludCBjaGsxLCAoQ0hBUiAqLCBpbnQpICk7Citf UFJPVE9UWVAoIHVuc2lnbmVkIGludCBjaGsyLCAoQ0hBUiAqLCBpbnQpICk7CitfUFJPVE9UWVAo IHVuc2lnbmVkIGludCBjaGszLCAoQ0hBUiAqLCBpbnQpICk7CitfUFJPVE9UWVAoIGludCBzaXBr dCwgKGNoYXIpICk7CitfUFJPVE9UWVAoIGludCBzb3BrdCwgKHZvaWQpICk7CitfUFJPVE9UWVAo IGludCBzaW5pdCwgKHZvaWQpICk7CitfUFJPVE9UWVAoIFZPSUQgcmluaXQsIChDSEFSICopICk7 CitfUFJPVE9UWVAoIGludCBzcGFyLCAoQ0hBUiAqKSApOworX1BST1RPVFlQKCBpbnQgcmN2Zmls LCAoY2hhciAqKSApOworX1BST1RPVFlQKCBDSEFSICogcnBhciwgKHZvaWQpICk7CitfUFJPVE9U WVAoIGludCBnbmZpbGUsICh2b2lkKSApOworX1BST1RPVFlQKCBpbnQgZ2V0c2J1ZiwgKGludCkg KTsKK19QUk9UT1RZUCggaW50IGdldHJidWYsICh2b2lkKSApOworX1BST1RPVFlQKCBpbnQgZnJl ZXNidWYsIChpbnQpICk7CitfUFJPVE9UWVAoIGludCBmcmVlcmJ1ZiwgKGludCkgKTsKK19QUk9U T1RZUCggaW50IGR1bXBzYnVmLCAodm9pZCkgKTsKK19QUk9UT1RZUCggaW50IGR1bXByYnVmLCAo dm9pZCkgKTsKK19QUk9UT1RZUCggVk9JRCBmcmVlcnBrdCwgKGludCkgKTsKK19QUk9UT1RZUCgg aW50IGNoa3dpbiwgKGludCwgaW50LCBpbnQpICk7CitfUFJPVE9UWVAoIGludCByc2F0dHIsIChD SEFSICopICk7CitfUFJPVE9UWVAoIGNoYXIgKmdldHJlYXNvbiwgKGNoYXIgKikgKTsKK19QUk9U T1RZUCggaW50IHNjbWQsIChjaGFyLCBDSEFSICopICk7CitfUFJPVE9UWVAoIGludCBlbmNzdHIs IChDSEFSICopICk7CitfUFJPVE9UWVAoIGludCBkZWNvZGUsIChDSEFSICosIGludCAoKikoY2hh ciksIGludCkgKTsKK19QUk9UT1RZUCggaW50IGJkZWNvZGUsIChDSEFSICosIGludCAoKikoY2hh cikpICk7CitfUFJPVE9UWVAoIGludCBmbnBhcnNlLCAoY2hhciAqKSApOworX1BST1RPVFlQKCBp bnQgc3lzY21kLCAoY2hhciAqLCBjaGFyICopICk7CitfUFJPVE9UWVAoIGludCBjd2QsIChjaGFy ICopICk7CitfUFJPVE9UWVAoIGludCByZW1zZXQsIChjaGFyICopICk7CitfUFJPVE9UWVAoIGlu dCBpbml0YXR0ciwgKHN0cnVjdCB6YXR0ciAqKSApOworX1BST1RPVFlQKCBpbnQgZ2F0dHIsIChD SEFSICosIHN0cnVjdCB6YXR0ciAqKSApOworX1BST1RPVFlQKCBpbnQgYWRlYnUsIChjaGFyICos IHN0cnVjdCB6YXR0ciAqKSApOworX1BST1RPVFlQKCBpbnQgY2FubmVkLCAoQ0hBUiAqKSApOwor X1BST1RPVFlQKCBpbnQgb3BlbnQsIChzdHJ1Y3QgemF0dHIgKikgKTsKK19QUk9UT1RZUCggaW50 IGNrb3BlbngsIChzdHJ1Y3QgemF0dHIgKikgKTsKK19QUk9UT1RZUCggaW50IG9wZW5hLCAoY2hh ciAqLCBzdHJ1Y3QgemF0dHIgKikgKTsKK19QUk9UT1RZUCggaW50IG9wZW5pLCAoY2hhciAqKSAp OworX1BST1RPVFlQKCBpbnQgb3Blbm8sIChjaGFyICosIHN0cnVjdCB6YXR0ciAqLCBzdHJ1Y3Qg ZmlsaW5mbyAqKSApOworX1BST1RPVFlQKCBpbnQgb3BlbmMsIChpbnQsIGNoYXIgKikgKTsKK19Q Uk9UT1RZUCggaW50IHJlb2YsIChjaGFyICosIHN0cnVjdCB6YXR0ciAqKSApOworX1BST1RPVFlQ KCBWT0lEIHJlb3QsICh2b2lkKSApOworX1BST1RPVFlQKCBpbnQgc2ZpbGUsIChpbnQpICk7Citf UFJPVE9UWVAoIGludCBzYXR0ciwgKGludCwgaW50KSApOworX1BST1RPVFlQKCBpbnQgc2RhdGEs ICh2b2lkKSApOworX1BST1RPVFlQKCBpbnQgc2VvZiwgKGludCkgKTsKK19QUk9UT1RZUCggaW50 IHN4ZW9mLCAoaW50KSApOworX1BST1RPVFlQKCBpbnQgc2VvdCwgKHZvaWQpICk7CitfUFJPVE9U WVAoIGludCB3aW5kb3csIChpbnQpICk7CitfUFJPVE9UWVAoIGludCBjbHNpZiwgKHZvaWQpICk7 CitfUFJPVE9UWVAoIGludCBjbHNvZiwgKGludCkgKTsKK19QUk9UT1RZUCggQ0hBUiBzZXRnZW4s IChjaGFyLCBjaGFyICosIGNoYXIgKiwgY2hhciAqKSApOworX1BST1RPVFlQKCBpbnQgZ2V0cGt0 LCAoaW50LCBpbnQpICk7CitfUFJPVE9UWVAoIGludCBtYXhkYXRhLCAodm9pZCkgKTsKK19QUk9U T1RZUCggaW50IHB1dHNydiwgKGNoYXIpICk7CitfUFJPVE9UWVAoIGludCBwdXR0cm0sIChjaGFy KSApOworX1BST1RPVFlQKCBpbnQgcHV0cXVlLCAoY2hhcikgKTsKK19QUk9UT1RZUCggaW50IHB1 dGZpbCwgKGNoYXIpICk7CitfUFJPVE9UWVAoIGludCBwdXRtZmlsLCAoY2hhcikgKTsKK19QUk9U T1RZUCggaW50IHpwdXRmaWwsIChjaGFyKSApOworX1BST1RPVFlQKCBWT0lEIHpkc3R1ZmYsIChD SEFSKSApOworX1BST1RPVFlQKCBpbnQgdGluaXQsIChpbnQpICk7CitfUFJPVE9UWVAoIFZPSUQg cGt0aW5pdCwgKHZvaWQpICk7CitfUFJPVE9UWVAoIFZPSUQgcmVzZXRjLCAodm9pZCkgKTsKK19Q Uk9UT1RZUCggVk9JRCB4c2luaXQsICh2b2lkKSApOworX1BST1RPVFlQKCBpbnQgYWRqcGtsLCAo aW50LGludCxpbnQpICk7CitfUFJPVE9UWVAoIGludCBjaGt0aW1vLCAoaW50LGludCkgKTsKK19Q Uk9UT1RZUCggaW50IG54dHBrdCwgKHZvaWQpICk7CitfUFJPVE9UWVAoIFZPSUQgcmNhbGNwc3os ICh2b2lkKSApOworX1BST1RPVFlQKCBpbnQgc3Jpbml0LCAoaW50LCBpbnQsIGludCkgKTsKK19Q Uk9UT1RZUCggVk9JRCB0c3RhdHMsICh2b2lkKSApOworX1BST1RPVFlQKCBWT0lEIGZzdGF0cywg KHZvaWQpICk7CitfUFJPVE9UWVAoIFZPSUQgaW50bXNnLCAobG9uZykgKTsKK19QUk9UT1RZUCgg Vk9JRCBlcm1zZywgKGNoYXIgKikgKTsKK19QUk9UT1RZUCggaW50IGNoa2ludCwgKHZvaWQpICk7 CitfUFJPVE9UWVAoIFZPSUQgc2RlYnUsIChpbnQpICk7CitfUFJPVE9UWVAoIFZPSUQgcmRlYnUs IChDSEFSICosIGludCkgKTsKK19QUk9UT1RZUCggY2hhciAqIGRiY2hyLCAoIGludCApICk7Cisj aWZkZWYgQ09NTUVOVAorX1BST1RPVFlQKCBTSUdUWVAgc3RwdHJhcCwgKGludCwgaW50KSApOwor X1BST1RPVFlQKCBTSUdUWVAgdHJhcCwgKGludCwgaW50KSApOworI2Vsc2UKK19QUk9UT1RZUCgg U0lHVFlQIHN0cHRyYXAsIChpbnQpICk7CitfUFJPVE9UWVAoIFNJR1RZUCB0cmFwLCAoaW50KSAp OworI2VuZGlmIC8qIENPTU1FTlQgKi8KK19QUk9UT1RZUCggY2hhciAqIGNrX2VycnN0ciwgKHZv aWQpICk7CisjaWZuZGVmIE5PWEZFUgorX1BST1RPVFlQKCBpbnQgYWduYnl0ZSwgKHZvaWQpICk7 CisjZW5kaWYgLyogTk9YRkVSICovCitfUFJPVE9UWVAoIGludCB4Z25ieXRlLCAoaW50LCBpbnQs IGludCAoKikodm9pZCkpICk7CitfUFJPVE9UWVAoIGludCB4cG5ieXRlLCAoaW50LCBpbnQsIGlu dCwgaW50ICgqKShjaGFyKSkgKTsKKworLyogVXNlciBpbnRlcmZhY2UgZnVuY3Rpb25zIG5lZWRl ZCBieSBtYWluIHByb2dyYW0sIGV0Yy4gKi8KKworX1BST1RPVFlQKCBpbnQgZG9jb25lY3QsIChp bnQsaW50KSApOworX1BST1RPVFlQKCBWT0lEIHNldGZsb3csICh2b2lkKSApOworX1BST1RPVFlQ KCBWT0lEIHByZXNjYW4sIChpbnQpICk7CitfUFJPVE9UWVAoIFZPSUQgc2V0aW50LCAodm9pZCkg KTsKK19QUk9UT1RZUCggVk9JRCBkb2luaXQsICh2b2lkKSApOworX1BST1RPVFlQKCBWT0lEIGRv ZmFzdCwgKHZvaWQpICk7CitfUFJPVE9UWVAoIFZPSUQgY21kaW5pLCAodm9pZCkgKTsKK19QUk9U T1RZUCggaW50IGRvdGFrZSwgKGNoYXIgKikgKTsKK19QUk9UT1RZUCggaW50IGNtZGxpbiwgKHZv aWQpICk7CisjaWZkZWYgT1MyCitfUFJPVE9UWVAoIGludCBjb25lY3QsIChpbnQpICk7CisjZWxz ZSAvKiBPUzIgKi8KK19QUk9UT1RZUCggaW50IGNvbmVjdCwgKHZvaWQpICk7CisjZW5kaWYgLyog T1MyICovCitfUFJPVE9UWVAoIGludCBja2NnZXRjLCAoaW50KSApOworX1BST1RPVFlQKCBpbnQg Y2tjcHV0YywgKGludCkgKTsKK19QUk9UT1RZUCAoaW50IG1kbWh1cCwgKHZvaWQpICk7CitfUFJP VE9UWVAoIFZPSUQgaGVyYWxkLCAodm9pZCkgKTsKK19QUk9UT1RZUCggVk9JRCBmaXhjbWQsICh2 b2lkKSApOworX1BST1RPVFlQKCBpbnQgZG9hcmcsIChjaGFyKSApOworX1BST1RPVFlQKCBpbnQg ZG94YXJnLCAoY2hhciAqKiwgaW50KSApOworX1BST1RPVFlQKCBWT0lEIHVzYWdlLCAodm9pZCkg KTsKK19QUk9UT1RZUCggVk9JRCBkb2NsZWFuLCAoaW50KSApOworX1BST1RPVFlQKCBpbnQgc25k aGxwLCAodm9pZCkgKTsKK19QUk9UT1RZUCggaW50IHNuZHN0cmluZywgKGNoYXIgKikgKTsKK19Q Uk9UT1RZUCggVk9JRCBja2hvc3QsIChjaGFyICosIGludCkgKTsKK19QUk9UT1RZUCggaW50IGdl dHRjcywgKGludCwgaW50KSApOworX1BST1RPVFlQKCBWT0lEIGdldGRpYWxlbnYsICh2b2lkKSAp OworX1BST1RPVFlQKCBWT0lEIHNldHByZWZpeCwgKGludCkgKTsKK19QUk9UT1RZUChWT0lEIGlu aXRwcm90bywoaW50LGNoYXIgKixjaGFyICosY2hhciAqLGNoYXIgKixjaGFyICosY2hhciosY2hh ciopKTsKK19QUk9UT1RZUCggVk9JRCBpbml0cGF0LCAodm9pZCkgKTsKK19QUk9UT1RZUCggVk9J RCBpbml0Y3NldHMsICh2b2lkKSApOworX1BST1RPVFlQKCBjaGFyICogZ2V0c3lzaWQsIChjaGFy ICopICk7CitfUFJPVE9UWVAoIGludCBnZXRzeXNpeCwgKGNoYXIgKikgKTsKKyNpZmRlZiBDS19U SU1FUlMKK19QUk9UT1RZUCggVk9JRCBydHRpbml0LCAodm9pZCkgKTsKK19QUk9UT1RZUCggaW50 IGdldHJ0dCwgKGludCwgaW50KSApOworI2VuZGlmIC8qIENLX1RJTUVSUyAqLworCitfUFJPVE9U WVAoIGludCBpc19hX3R0eSwgKGludCkgKTsKK19QUk9UT1RZUCggaW50IHNuZGRpciwgKGNoYXIg KikgKTsKK19QUk9UT1RZUCggaW50IHNuZGRlbCwgKGNoYXIgKikgKTsKK19QUk9UT1RZUCggaW50 IHNuZHR5cGUsIChjaGFyICopICk7CitfUFJPVE9UWVAoIGludCBkb291dHB1dCwgKGNoYXIgKiwg aW50KSApOworX1BST1RPVFlQKCBpbnQgaXNhYnNvbHV0ZSwgKGNoYXIgKikgKTsKK19QUk9UT1RZ UCggVk9JRCB3aG9hcmV3ZSwgKHZvaWQpICk7CitfUFJPVE9UWVAoIGludCBja21rZGlyLCAoaW50 LCBjaGFyICosIGNoYXIgKiosIGludCwgaW50KSApOworX1BST1RPVFlQKCBpbnQgYXV0b2V4aXRj aGssIChDSEFSKSApOworX1BST1RPVFlQKCBWT0lEIGZjcHMsICh2b2lkKSApOworI2lmZGVmIE9T MgorX1BST1RPVFlQKCBWT0lEIGxvZ2NoYXIsICh1bnNpZ25lZCBzaG9ydCkgKTsKKyNlbHNlIC8q IE9TMiAqLworX1BST1RPVFlQKCBWT0lEIGxvZ2NoYXIsIChjaGFyKSApOworI2VuZGlmIC8qIE9T MiAqLworX1BST1RPVFlQKCBWT0lEIGxvZ3N0ciwgKGNoYXIgKiwgaW50KSApOworCitfUFJPVE9U WVAoIFZPSUQgZG9sb2dlbmQsICh2b2lkKSApOworI2lmZGVmIE5PTE9DQUwKKyNkZWZpbmUgZG9s b2dzaG93KCkKKyNlbHNlCitfUFJPVE9UWVAoIGxvbmcgZG9sb2dzaG93LCAoaW50KSApOworI2Vu ZGlmIC8qIE5PTE9DQUwgKi8KKworI2lmZGVmIE5PRElTUExBWQorI2RlZmluZSBmeGRpbml0KGEp CisjZWxzZQorX1BST1RPVFlQKCBWT0lEIGZ4ZGluaXQsIChpbnQpICk7CisjZW5kaWYgLyogTk9E SVNQTEFZICovCisKK19QUk9UT1RZUCggaW50IGZpbGVzZWxlY3QsIChjaGFyICosCisJCQkgICAg Y2hhciAqLCBjaGFyICosIGNoYXIgKiwgY2hhciAqLAorCQkJICAgIENLX09GRl9ULCBDS19PRkZf VCwKKwkJCSAgICBpbnQsIGludCwKKwkJCSAgICBjaGFyICoqKSApOworX1BST1RPVFlQKCBjaGFy ICogd2hvYW1pLCAodm9pZCkgKTsKK19QUk9UT1RZUCggaW50IHNob2VzYywgKGludCkgKTsKKwor I2lmZGVmIENLX0FQQworX1BST1RPVFlQKCBpbnQgY2hrc3BrdCwgKGNoYXIgKikgKTsKK19QUk9U T1RZUCggaW50IGtzdGFydCwgKENIQVIpICk7CitfUFJPVE9UWVAoIFZPSUQgYXV0b2Rvd24sIChp bnQpKTsKKyNpZmRlZiBDS19YWVoKK19QUk9UT1RZUCggaW50IHpzdGFydCwgKENIQVIpICk7Cisj ZW5kaWYgLyogQ0tfWFlaICovCisjaWZkZWYgT1MyCitfUFJPVE9UWVAodm9pZCBhcGNfY29tbWFu ZCwgKGludCwgY2hhciopKTsKKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBDS19BUEMgKi8K KworLyogVXNlciBRdWVyeSBkYXRhIHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9ucyAqLworCitzdHJ1 Y3QgdHh0Ym94IHsKKyAgICBjaGFyICogdF9idWY7CQkJLyogRGVzdGluYXRpb24gYnVmZmVyIGFk ZHJlc3MgKi8KKyAgICBpbnQgICAgdF9sZW47CQkJLyogRGVzdGluYXRpb24gYnVmZmVyIGxlbmd0 aCAqLworICAgIGNoYXIgKiB0X2xibDsJCQkvKiBMYWJlbCBmb3IgdGhpcyBmaWVsZCAqLworICAg IGNoYXIgKiB0X2RmbHQ7CQkJLyogRGVmYXVsdCByZXNwb25zZSBmb3IgdGhpcyBmaWVsZCAqLwor ICAgIGludCAgICB0X2VjaG87CQkJLyogMCA9IG5vLCAxID0geWVzLCAyID0gYXN0ZXJpc2tzICov Cit9OworCisjZGVmaW5lIERFRkFVTFRfVVFfVElNRU9VVCAgMAorX1BST1RPVFlQKGludCB1cV9v aywgKGNoYXIgKixjaGFyICosaW50LGNoYXIgKiosaW50KSApOworX1BST1RPVFlQKGludCB1cV90 eHQsIChjaGFyICosY2hhciAqLGludCxjaGFyICoqLGNoYXIgKixpbnQsY2hhciAqLGludCkpOwor X1BST1RPVFlQKGludCB1cV9tdHh0LCAoY2hhciAqLGNoYXIgKiosaW50LHN0cnVjdCB0eHRib3hb XSkgKTsKK19QUk9UT1RZUChpbnQgdXFfZmlsZSwgKGNoYXIgKixjaGFyICosaW50LGNoYXIgKios Y2hhciAqLGNoYXIgKixpbnQpKTsKKworI2lmZGVmIENLX1VSTAorc3RydWN0IHVybG9wdCB7Cisg ICAgY2hhciAqIG5hbTsKKyAgICBjaGFyICogdmFsOworfTsKKyNkZWZpbmUgTUFYX1VSTF9PUFRT ICAgIDE2CitzdHJ1Y3QgdXJsZGF0YSB7CisgICAgY2hhciAqIHNhdjsJCQkvKiBUaGUgVVJMIGl0 c2VsZiAqLworICAgIGNoYXIgKiBzdmM7CQkJLyogU2VydmljZSAqLworICAgIGNoYXIgKiB1c3I7 CQkJLyogVXNlciAqLworICAgIGNoYXIgKiBwc3c7CQkJLyogUGFzc3dvcmQgKi8KKyAgICBjaGFy ICogaG9zOwkJCS8qIEhvc3QgKi8KKyAgICBjaGFyICogcG9yOwkJCS8qIFBvcnQgKi8KKyAgICBj aGFyICogcHRoOwkJCS8qIFBhdGggKi8KKyAgICBpbnQgICAgbm9wdHM7ICAgICAgICAgICAgICAg LyogbnVtYmVyIG9mIG9wdGlvbnMgKi8KKyAgICBzdHJ1Y3QgdXJsb3B0IG9wdFtNQVhfVVJMX09Q VFNdOyAgIC8qIG9wdGlvbnMgKi8KK307CitfUFJPVE9UWVAoaW50IHVybHBhcnNlLCAoY2hhciAq LCBzdHJ1Y3QgdXJsZGF0YSAqKSk7CisjZW5kaWYgLyogQ0tfVVJMICovCisKKyNlbmRpZiAvKiBD S0NLRVJfSCAqLworCisvKiBFbmQgb2YgY2tja2VyLmggKi8KCmRpZmYgLS1naXQgYS9ja2VybWl0 LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrY2xpYi5jIGIvY2tlcm1pdC05LjAuMzAy LWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2NsaWIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwLi41MWI5ZjA2Ci0tLSAvZGV2L251bGwKKysrIGIvY2tlcm1pdC05LjAuMzAyLWJ1 aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2NsaWIuYwpAQCAtMCwwICsxLDMzMTkgQEAKK2NoYXIgKiBj a2xpYnYgPSAiQy1LZXJtaXQgbGlicmFyeSwgOS4wLjA1MiwgMjkgSnVuIDIwMTEiOworCisjZGVm aW5lIENLQ0xJQl9DCisKKy8qIEMgSyBDIEwgSSBCIC4gQyAgLS0gIEMtS2VybWl0IExpYnJhcnkg cm91dGluZXMuICovCisKKy8qCisgIEF1dGhvcjogRnJhbmsgZGEgQ3J1eiA8ZmRjQGNvbHVtYmlh LmVkdT4sCisgIENvbHVtYmlhIFVuaXZlcnNpdHkgQWNhZGVtaWMgSW5mb3JtYXRpb24gU3lzdGVt cywgTmV3IFlvcmsgQ2l0eS4KKworICBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMTEsCisgICAgVHJ1 c3RlZXMgb2YgQ29sdW1iaWEgVW5pdmVyc2l0eSBpbiB0aGUgQ2l0eSBvZiBOZXcgWW9yay4KKyAg ICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgU2VlIHRoZSBDLUtlcm1pdCBDT1BZSU5HLlRYVCBmaWxl IG9yIHRoZQorICAgIGNvcHlyaWdodCB0ZXh0IGluIHRoZSBja2NtYWkuYyBtb2R1bGUgZm9yIGRp c2NsYWltZXIgYW5kIHBlcm1pc3Npb25zLgorKi8KKworLyoKKyAgR2VuZXJhbC1wdXJwb3NlLCBz eXN0ZW0vcGxhdGZvcm0vY29tcGlsZXItaW5kZXBlbmRlbnQgcm91dGluZXMgZm9yIHVzZQorICBi eSBhbGwgbW9kdWxlcy4gIE1hbnkgYXJlIHJlcGxhY2VtZW50cyBmb3IgY29tbW9ubHkgdXNlZCBD IGxpYnJhcnkKKyAgZnVuY3Rpb25zIHRoYXQgYXJlIG5vdCBmb3VuZCBvbiBldmVyeSBwbGF0Zm9y bSwgYW5kL29yIHRoYXQgbGFjayBuZWVkZWQKKyAgZnVuY3Rpb25hbGl0eSAoZS5nLiBjYXNlbGVz cyBzdHJpbmcgc2VhcmNoL2NvbXBhcmUpIG9yIHNhZmV0eSBmZWF0dXJlcy4KKworICAgIGNrc3Ry bmNweSgpICAtIFNpbWlsYXIgdG8gc3RybmNweSgpIGJ1dCBkaWZmZXJlbnQgKHNlZSBjb21tZW50 cykuCisgICAgY2tzdHJuY2F0KCkgIC0gU2ltaWxhciB0byBzdHJuY2F0KCkgYnV0IGRpZmZlcmVu dCAoc2VlIGNvbW1lbnRzKS4KKyAgICBjaGFydG9zdHIoKSAgLSBDb252ZXJ0cyBhIGNoYXIgdG8g YSBzdHJpbmcgKHNlbGYgb3IgY3RybCBjaGFyIG5hbWUpLgorICAgIGNrc3RyY2hyKCkgICAtIFBv cnRhYmxlIHN0cmNocigpLgorICAgIGNrc3RycGJyaygpICAtIFBvcnRhYmxlIHN0cnBicmsoKS4K KyAgICBja2xvd2VyKCkgICAgLSBMb3dlcmNhc2UgYSBzdHJpbmcgKGluIHBsYWNlKS4KKyAgICBj a3VwcGVyKCkgICAgLSBVcHBlcmNhc2UgYSBzdHJpbmcgKGluIHBsYWNlKS4KKyAgICBja2luZGV4 KCkgICAgLSBMZWZ0IG9yIHJpZ2h0IGluZGV4LgorICAgIGNrc3Ryc3RyKCkgICAtIFBvcnRhYmxl IHN0cnN0cigpLgorICAgIGNraXRvYSgpICAgICAtIENvbnZlcnRzIGludCB0byBzdHJpbmcuCisg ICAgY2t1aXRvYSgpICAgIC0gQ29udmVydHMgdW5zaWduZWQgaW50IHRvIHN0cmluZy4KKyAgICBj a2x0b2EoKSAgICAgLSBDb252ZXJ0cyBsb25nIHRvIHN0cmluZy4KKyAgICBja3VsdG9hKCkgICAg LSBDb252ZXJ0cyB1bnNpZ25lZCBsb25nIHRvIHN0cmluZy4KKyAgICBja2ZzdG9hKCkgICAgLSBD b252ZXJ0cyBvZmZfdC10eXBlIGludGVnZXIgKGxvbmcgb3IgbG9uZyBsb25nKSB0byBzdHJpbmcu CisgICAgY2thdG9mcygpICAgIC0gQ29udmVydHMgYSBudW1lcmljIHN0cmluZyB0byBhbiBvZmZf dC10eXBlIGludGVnZXIuCisgICAgY2tjdG9hKCkgICAgIC0gQ29udmVydHMgY2hhciB0byBzdHJp bmcuCisgICAgY2ttYWttc2coKSAgIC0gQ29uc3RydWN0cyBhIG1lc3NhZ2UgZnJvbSA0IHNvdXJj ZSBzdHJpbmdzLgorICAgIGNrbWFreG1zZygpICAtIENvbnN0cnVjdHMgYSBtZXNzYWdlIGZyb20g MTIgc291cmNlIHN0cmluZ3MuCisgICAgY2ttYXRjaCgpICAgIC0gUGF0dGVybiBtYXRjaGluZy4K KyAgICBja21lbWNweSgpICAgLSBQb3J0YWJsZSBtZW1jcHkoKS4KKyAgICBja3JjaGFyKCkgICAg LSBSaWdodG1vc3QgY2hhcmFjdGVyIG9mIGEgc3RyaW5nLgorICAgIGNrc3RyY21wKCkgICAtIFBv c3NpYmx5IGNhc2VsZXNzIHN0cmluZyBjb21wYXJpc29uLgorICAgIGNrc3RycHJlKCkgICAtIENh c2VsZXNzIHN0cmluZyBwcmVmaXggY29tcGFyaXNvbi4KKyAgICBzaF9zb3J0KCkgICAgLSBTb3J0 cyBhbiBhcnJheSBvZiBzdHJpbmdzLCBtYW55IG9wdGlvbnMuCisgICAgYnJzdHJpcCgpICAgIC0g U3RyaXBzIGVuY2xvc2luZyBicmFjZXMgKGFuZCBkb3VibGVxdW90ZXMpLgorICAgIG1ha2VsaXN0 KCkgICAtIFNwbGl0cyAie3tpdGVtfXtpdGVtfS4uLn0iIGludG8gYW4gYXJyYXkuCisgICAgbWFr ZXN0cigpICAgIC0gQ2FyZWZ1bCBtYWxsb2MoKSBmcm9udCBlbmQuCisgICAgeG1ha2VzdHIoKSAg IC0gZGl0dG8gKHNlZSBjb21tZW50cykuCisgICAgY2tyYWRpeCgpICAgIC0gQ29udmVydCBudW1i ZXIgcmFkaXggKDItMzYpLgorICAgIGI4dG9iNjQoKSAgICAtIENvbnZlcnQgZGF0YSB0byBiYXNl IDY0LgorICAgIGI2NHRvYjgoKSAgICAtIENvbnZlcnQgYmFzZSA2NCB0byBkYXRhLgorICAgIGNo a251bSgpICAgICAtIENoZWNrcyBpZiBzdHJpbmcgaXMgYSAocG9zc2libHkgc2lnbmVkKSBpbnRl Z2VyLgorICAgIHJkaWdpdHMoKSAgICAtIENoZWNrcyBpZiBzdHJpbmcgaXMgY29tcG9zZWQgb25s eSBvZiBkZWNpbWFsIGRpZ2l0cy4KKyAgICBpc2Zsb2F0KCkgICAgLSBDaGVja3MgaWYgc3RyaW5n IGlzIGEgdmFsaWQgZmxvYXRpbmctcG9pbnQgbnVtYmVyLgorICAgIGNrcm91bmQoKSAgICAtIFJv dW5kcyBhIGZsb2F0aW5nLXBvaW50IG51bWJlciB0byBkZXNpcmVkIHByZWNpc2lvbi4KKyAgICBw YXJuYW0oKSAgICAgLSBSZXR1cm5zIHBhcml0eSBuYW1lIHN0cmluZy4KKyAgICBoaG1tc3MoKSAg ICAgLSBDb252ZXJ0cyBzZWNvbmRzIHRvIGhoOm1tOnNzIHN0cmluZy4KKyAgICBsc2V0KCkgICAg ICAgLSBXcml0ZSBmaXhlZC1sZW5ndGggZmllbGQgbGVmdC1hZGp1c3RlZCBpbnRvIGEgcmVjb3Jk LgorICAgIHJzZXQoKSAgICAgICAtIFdyaXRlIGZpeGVkLWxlbmd0aCBmaWVsZCByaWdodC1hZGp1 c3RlZCBpbnRvIGEgcmVjb3JkLgorICAgIHVsb25ndG9oZXgoKSAtIENvbnZlcnRzIGFuIHVuc2ln bmVkIGxvbmcgdG8gYSBoZXggc3RyaW5nLgorICAgIGhleHRvdWxvbmcoKSAtIENvbnZlcnRzIGEg aGV4IHN0cmluZyB0byBhbiB1bnNpZ25lZCBsb25nLgorICAgIGNrc3BsaXQoKSAgICAtIFNwbGl0 cyBhIHN0cmluZyBpbnRvIGFuIGFycmF5IG9mIHdvcmRzLgorICAgIGlzcGF0dGVybigpICAtIFRl bGxzIGlmIGFyZ3VtZW50IHN0cmluZyBpcyBhIHBhdHRlcm4uCisKKyAgUHJvdG90eXBlcyBhcmUg aW4gY2tjbGliLmguCisKKyAgTm90ZTogVGhpcyBtb2R1bGUgc2hvdWxkIG5vdCBjb250YWluIGFu eSBleHRlcm4gZGVjbGFyYXRpb25zLgorKi8KKyNpbmNsdWRlICJja2NzeW0uaCIKKyNpbmNsdWRl ICJja2NkZWIuaCIKKyNpbmNsdWRlICJja2Nhc2MuaCIKKworLyogUHVibGljIHZhcmlhYmxlcyAq LworCitpbnQgZGJscXVvID0gMTsgLyogTm9uemVybyBpZiBkb3VibGVxdW90ZXMgY2FuIGJlIHVz ZWQgZm9yIGdyb3VwaW5nICovCisKK2NoYXIgKgorY2NudGFiW10gPSB7CS8qIE5hbWVzIG9mIEFT Q0lJIChDMCkgY29udHJvbCBjaGFyYWN0ZXJzIDAtMzEgKi8KKyAgICAiTlVMIiwgIlNPSCIsICJT VFgiLCAiRVRYIiwgIkVPVCIsICJFTlEiLCAiQUNLIiwgIkJFTCIsCisgICAgIkJTIiwgICJIVCIs ICAiTEYiLCAgIlZUIiwgICJGRiIsICAiQ1IiLCAgIlNPIiwgICJTSSIsCisgICAgIkRMRSIsICJE QzEiLCAiREMyIiwgIkRDMyIsICJEQzQiLCAiTkFLIiwgIlNZTiIsICJFVEIiLAorICAgICJDQU4i LCAiRU0iLCAgIlNVQiIsICJFU0MiLCAiRlMiLCAgIkdTIiwgICJSUyIsICAiVVMiCit9OworCitj aGFyICoKK2MxdGFiW10gPSB7CS8qIE5hbWVzIG9mIElTTyA2NDI5IChDMSkgY29udHJvbCBjaGFy YWN0ZXJzIDAtMzIgKi8KKyAgICAiWFhYIiwgIlhYWCIsICJCUEgiLCAiTkJIIiwgIklORCIsICJO RUwiLCAiU1NBIiwgIkVTQSIsCisgICAgIkhUUyIsICJIVEoiLCAiVlRTIiwgIlBMRCIsICJQTFUi LCAiUkkiLCAgIlNTMiIsICJTUzMiLAorICAgICJEQ1MiLCAiUFUxIiwgIlBVMiIsICJTVFMiLCAi Q0NIIiwgIk1XIiwgICJTUEEiLCAiRVBBIiwKKyAgICAiU09TIiwgIlhYWCIsICJTQ0kiLCAiQ1NJ IiwgIlNUIiwgICJPU0MiLCAiUE0iLCAgIkFQQyIsICJOQlMiCit9OworCisjZGVmaW5lIFJYUkVT VUxUIDEyNworc3RhdGljIGNoYXIgcnhkaWdpdHNbXSA9ICIwMTIzNDU2Nzg5QUJDREVGR0hJSktM TU5PUFFSU1RVVldYWVoiOworc3RhdGljIGNoYXIgcnhyZXN1bHRbUlhSRVNVTFQrMV07CisKKy8q ICBDIEsgUyBUIFIgTiBDIFAgWSAqLworCisvKgorICBDb3BpZXMgYSBOVUwtdGVybWluYXRlZCBz dHJpbmcgaW50byBhIGJ1ZmZlciB3aG9zZSB0b3RhbCBsZW5ndGggaXMgZ2l2ZW4sCisgIGVuc3Vy aW5nIHRoYXQgdGhlIHJlc3VsdCBpcyBOVUwtdGVybWluYXRlZCBldmVuIGlmIGl0IGhhcyB0byBi ZSB0cnVuY2F0ZWQuCisKKyAgQ2FsbCB3aXRoOgorICAgIGRlc3QgPSBwb2ludGVyIHRvIGRlc3Rp bmF0aW9uIGJ1ZmZlcgorICAgIHNyYyAgPSBwb2ludGVyIHRvIHNvdXJjZSBzdHJpbmcKKyAgICBs ZW4gID0gbGVuZ3RoIG9mIGRlc3RpbmF0aW9uIGJ1ZmZlciAodGhlIGFjdHVhbCBsZW5ndGgsIG5v dCBvbmUgbGVzcykuCisKKyAgUmV0dXJuczoKKyAgICBpbnQsIFRoZSBudW1iZXIgb2YgYnl0ZXMg Y29waWVkLCAwIG9yIG1vcmUuCisKKyAgTk9URTogVGhpcyBpcyBOT1QgYSByZXBsYWNlbWVudCBm b3Igc3RybmNweSgpOgorICAgLiBzdHJuY3B5KCkgZG9lcyBub3QgcmVxdWlyZSBpdHMgc291cmNl IHN0cmluZyB0byBiZSBOVUwtdGVybWluYXRlZC4KKyAgIC4gc3RybmNweSgpIGRvZXMgbm90IG5l Y2Vzc2FyaWx5IE5VTC10ZXJtaW5hdGUgaXRzIHJlc3VsdC4KKyAgIC4gc3RybmNweSgpIHJpZ2h0 LXBhZHMgZGVzdCB3aXRoIE5VTHMgaWYgaXQgaXMgbG9uZ2VyIHRoYW4gc3JjLgorICAgLiBzdHJu Y3B5KCkgdHJlYXRzIHRoZSBsZW5ndGggYXJndW1lbnQgYXMgdGhlIG51bWJlciBvZiBieXRlcyB0 byBjb3B5LgorICAgLiBja3N0cm5jcHkoKSB0cmVhdHMgdGhlIGxlbmd0aCBhcmd1bWVudCBhcyB0 aGUgc2l6ZSBvZiB0aGUgZGVzdCBidWZmZXIuCisgICAuIGNrc3RybmNweSgpIGRvZXNuJ3QgZHVt cCBjb3JlIGlmIGdpdmVuIE5VTEwgc3RyaW5nIHBvaW50ZXJzLgorICAgLiBja3N0cm5jcHkoKSBy ZXR1cm5zIGEgbnVtYmVyLgorCisgIFVzZSBja3N0cm5jcHkoKSB3aGVuIHlvdSB3YW50IHRvOgor ICAgLiBDb3B5IGFuIGVudGlyZSBzdHJpbmcgaW50byBhIGJ1ZmZlciB3aXRob3V0IG92ZXJydW4u CisgICAuIEdldCB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgYmFjay4KKworICBVc2Ugc3RybmNw eSgpIHdoZW4geW91IHdhbnQgdG86CisgICAuIENvcHkgYSBwaWVjZSBvZiBhIHN0cmluZy4KKyov CitpbnQKKyNpZmRlZiBDS19BTlNJQworY2tzdHJuY3B5KGNoYXIgKiBkZXN0LCBjb25zdCBjaGFy ICogc3JjLCBpbnQgbGVuKQorI2Vsc2UKK2Nrc3RybmNweShkZXN0LHNyYyxsZW4pIGNoYXIgKiBk ZXN0LCAqIHNyYzsgaW50IGxlbjsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworICAgIGludCBp OworICAgIGlmIChsZW4gPCAxIHx8ICFzcmMgfHwgIWRlc3QpIHsJLyogTm90aGluZyBvciBub3do ZXJlIHRvIGNvcHkgKi8KKwlpZiAoZGVzdCkgKmRlc3QgPSBOVUw7CisJcmV0dXJuKDApOworICAg IH0KKyNpZm5kZWYgTk9DS1NUUk5DUFkKKyAgICBmb3IgKGkgPSAwOyBzcmNbaV0gJiYgKGkgPCBs ZW4tMSk7IGkrKykgLyogQXJncyBPSywgY29weSAqLworICAgICAgZGVzdFtpXSA9IHNyY1tpXTsK KyAgICBkZXN0W2ldID0gTlVMOworI2Vsc2UKKyAgICBpID0gc3RybGVuKHNyYyk7CisgICAgaWYg KGkgPiBsZW4pIGkgPSBsZW47CisgICAgc3RybmNweShkZXN0LHNyYyxpKTsKKyAgICBkZXN0W2xl bl0gPSBOVUw7CisjZW5kaWYgLyogTk9DS1NUUk5DUFkgKi8KKyAgICByZXR1cm4oaSk7Cit9CisK Ky8qICBDIEsgUyBUIFIgTiBDIEEgVCAqLworCisvKgorICBBcHBlbmRzIGEgTlVMLXRlcm1pbmF0 ZWQgc3RyaW5nIHRvIGEgYnVmZmVyIHdob3NlIHRvdGFsIGxlbmd0aCBpcyBnaXZlbiwKKyAgZW5z dXJpbmcgdGhhdCB0aGUgcmVzdWx0IGlzIE5VTC10ZXJtaW5hdGVkIGV2ZW4gaWYgaXQgaGFkIHRv IGJlIHRydW5jYXRlZC4KKworICBDYWxsIHdpdGg6CisgICAgZGVzdCA9IHBvaW50ZXIgdG8gZGVz dGluYXRpb24gYnVmZmVyIGNvbnRhaW5pbmcgYSBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nCisgICAg c3JjICA9IHBvaW50ZXIgdG8gbnVsbC10ZXJtaW5hdGVkIHNvdXJjZSBzdHJpbmcKKyAgICBsZW4g ID0gbGVuZ3RoIG9mIGRlc3RpbmF0aW9uIGJ1ZmZlciAodGhlIGFjdHVhbCBsZW5ndGgsIG5vdCBv bmUgbGVzcykuCisKKyAgUmV0dXJuczoKKyAgICBpbnQsIFRoZSBudW1iZXIgb2YgYnl0ZXMgY29w aWVkLCAwIG9yIG1vcmUuCisqLworaW50CisjaWZkZWYgQ0tfQU5TSUMKK2Nrc3RybmNhdChjaGFy ICogZGVzdCwgY29uc3QgY2hhciAqIHNyYywgaW50IGxlbikKKyNlbHNlCitja3N0cm5jYXQoZGVz dCxzcmMsbGVuKSBjaGFyICogZGVzdCwgKiBzcmM7IGludCBsZW47CisjZW5kaWYgLyogQ0tfQU5T SUMgKi8KK3sKKyAgICByZWdpc3RlciBpbnQgaSwgajsKKyNpZmRlZiBOT0NLU1RSTkNQWQorICAg IHJlZ2lzdGVyIGNoYXIgKiBzMSwgKiBzMjsKKyNlbmRpZiAvKiBOT0NLU1RSTkNQWSAqLworICAg IGlmIChsZW4gPCAxIHx8ICFzcmMgfHwgIWRlc3QpIHsJLyogTm90aGluZyBvciBub3doZXJlIHRv IGNvcHkgKi8KKwlpZiAoZGVzdCkgKmRlc3QgPSBOVUw7CisJcmV0dXJuKDApOworICAgIH0KKyNp Zm5kZWYgTk9DS1NUUk5DUFkKKyAgICAvKiBBcmdzIE9LLCBjb3B5ICovCisgICAgZm9yIChpID0g MCwgaiA9IHN0cmxlbihkZXN0KTsgc3JjW2ldICYmIChpIDwgbGVuLWotMSk7IGkrKykKKyAgICAg IGRlc3RbaStqXSA9IHNyY1tpXTsKKyAgICBkZXN0W2kral0gPSBOVUw7CisjZWxzZQorICAgIGog PSAwOworICAgIHMxID0gZGVzdDsKKyAgICB3aGlsZSAoKnMxKyspIGorKzsJCQkvKiBqID0gc3Ry bGVuKGRlc3QpOyAqLworICAgIHMxLS07CQkJCS8qIChiYWNrIHVwIG92ZXIgTlVMKSAqLworCisg ICAgaSA9IDA7CisgICAgczIgPSAoY2hhciAqKXNyYzsKKyAgICB3aGlsZSAoKnMyKyspIGkrKzsJ CQkvKiBpID0gc3RybGVuKHNyYyk7ICovCisKKyAgICBpZiAoaSA+IChsZW4taikpCisgICAgICBp ID0gbGVuIC0gajsKKyAgICBpZiAoaSA8PSAwKQorICAgICAgcmV0dXJuKDApOworCisjaWZkZWYg Q09NTUVOVAorICAgIHN0cm5jcHkoJmRlc3Rbal0sc3JjLGkpOworI2Vsc2UKKyAgICBqID0gaTsJ CQkJLyogVGhpcyBzaG91bGQgYmUgYSBiaXQgZmFzdGVyLi4uICAgICovCisgICAgczIgPSAoY2hh ciAqKXNyYzsJCSAgICAgICAvKiBkZXBlbmRzIG9uIHN0cmNweSBpbXBsZW1lbnRhdGlvbjsgKi8K KyAgICB3aGlsZSAoKCpzMSsrID0gKnMyKyspICYmIGotLSkJLyogYXQgbGVhc3QgaXQgc2hvdWxk bid0IGJlIHNsb3dlci4gICovCisgICAgICA7CisgICAgZGVzdFtsZW4tMV0gPSBOVUw7CQkJLyog SW4gY2FzZSBvZiBlYXJseSBleGl0LiAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKworI2VuZGlm IC8qIE5PQ0tTVFJOQ1BZICovCisgICAgcmV0dXJuKGkpOworfQorCisvKiAgQyBLIE0gQSBLIE0g UyBHICAqLworCisvKgorICAgQ29uc3RydWN0cyBhIG1lc3NhZ2UgZnJvbSB1cCB0byA0IHBpZWNl cyB3aXRoIGxlbmd0aCBjaGVja2luZy4KKyAgIFJlc3VsdCBpcyBhbHdheXMgTlVMIHRlcm1pbmF0 ZWQuICBDYWxsIHdpdGg6CisgICAgIGJ1ZjogUG9pbnRlciB0byBidWZmZXIgZm9yIGNvbnN0cnVj dGluZyBtZXNzYWdlLgorICAgICBsZW46IExlbmd0aCBvZiBidWZmZXIuCisgICAgIHMxLXM0OiBT dHJpbmcgcG9pbnRlcnMgKGNhbiBiZSBOVUxMKS4KKyAgIFJldHVybnM6CisgICAgIDA6IE5vdGhp bmcgd2FzIGNvcGllZC4KKyAgICAgbjogKHBvc2l0aXZlIG51bWJlcikgbiBieXRlcyBjb3BpZWQs IGFsbCBhcmdzIGNvcGllZCBzdWNjZXNzZnVsbHkuCisgICAgLW46IG4gYnl0ZXMgd2VyZSBjb3Bp ZWQsIGRlc3RpbmF0aW9uIGJ1ZmZlciBub3QgYmlnIGVub3VnaCBmb3IgYWxsLgorICAgQWxzbyBz ZWU6CisgICAgIGNrbWFreG1zZygpIC0tIGFjY2VwdHMgMTIgc3RyaW5nIGFyZ3MuCisgICAgIGNr aXRvYSgpLCBja2x0b2EoKSwgY2tjdG9hKCksIGNraXRveCgpLCBldGMuCisgICAgIFVzZSBja21h a1t4XW1zZygpIHBsdXMgY2s/dG8/KCkgYXMgYSBzYWZlIHJlcGxhY2VtZW50IGZvciBzcHJpbnRm KCkuCisqLworaW50CisjaWZkZWYgQ0tfQU5TSUMKK2NrbWFrbXNnKGNoYXIgKiBidWYsIGludCBs ZW4sIGNoYXIgKnMxLCBjaGFyICpzMiwgY2hhciAqczMsIGNoYXIgKnM0KQorI2Vsc2UgLyogQ0tf QU5TSUMgKi8KK2NrbWFrbXNnKGJ1ZixsZW4sczEsczIsczMsczQpIGNoYXIgKmJ1ZiwgKnMxLCAq czIsICpzMywgKnM0OyBpbnQgbGVuOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgaW50 IGksIG4gPSAwLCBtID0gMDsKKyAgICBjaGFyICpzOworICAgIGNoYXIgKnAsICphWzRdOworCisg ICAgaWYgKCFidWYpIHJldHVybihuKTsJCS8qIE5vIGRlc3RpbmF0aW9uICovCisgICAgaWYgKGxl biA8IDEpIHJldHVybihuKTsJCS8qIE5vIHNpemUgKi8KKworICAgIHMgPSBidWY7CQkJCS8qIFBv aW50IHRvIGRlc3RpbmF0aW9uICovCisgICAgYVswXSA9IHMxOyBhWzFdID0gczI7IGFbMl0gPSBz MzsgYVszXSA9IHM0OwkvKiBBcnJheSBvZiBzb3VyY2Ugc3RyaW5ncyAqLworICAgIGZvciAoaSA9 IDA7IGkgPCA0OyBpKyspIHsJCS8qIExvb3AgdGhydSBhcnJheSAqLworCXAgPSBhW2ldOwkJCS8q IFBvaW50IHRvIHRoaXMgZWxlbWVudCAqLworCWlmIChwKSB7CQkJLyogSWYgcG9pbnRlciBub3Qg bnVsbCAqLworCSAgICBuID0gY2tzdHJuY3B5KHMscCxsZW4pOwkvKiBDb3B5IHNhZmVseSAqLwor CSAgICBtICs9IG47CQkJLyogQWNjdW11bGF0ZSB0b3RhbCAqLworCSAgICBpZiAocFtuXSkJCQkv KiBEaWRuJ3QgZ2V0IHdob2xlIHRoaW5nPyAqLworCSAgICAgIHJldHVybigtbSk7CQkvKiByZXR1 cm4gaW5kaWNhdGluZyBidWZmZXIgZnVsbCAqLworCSAgICBsZW4gLT0gbjsJCQkvKiBEZWR1Y3Qg ZnJvbSBzcGFjZSBsZWZ0ICovCisJICAgIHMgKz0gbjsJCQkvKiBPdGhlcndpc2UgYWR2YW5jZSBk ZXN0IHBvaW50ZXIgKi8KKwl9CisgICAgfQorICAgIHJldHVybihtKTsJCQkJLyogUmV0dXJuIHRv dGFsIGJ5dGVzIGNvcGllZCAqLworfQorCisKKy8qICBDIEsgTSBBIEsgWCBNIFMgRyAgKi8KKwor LyogIEV4YWN0bHkgbGlrZSBja21ha21zZygpLCBidXQgYWNjZXB0cyAxMiBzdHJpbmcgYXJndW1l bnRzLiAqLworCitpbnQKKyNpZmRlZiBDS19BTlNJQworY2ttYWt4bXNnKGNoYXIgKiBidWYsIGlu dCBsZW4sCisJICBjaGFyICpzMSwgY2hhciAqczIsIGNoYXIgKnMzLCBjaGFyICAqczQsIGNoYXIg ICpzNSwgY2hhciAqczYsCisJICBjaGFyICpzNywgY2hhciAqczgsIGNoYXIgKnM5LCBjaGFyICpz MTAsIGNoYXIgKnMxMSwgY2hhciAqczEyKQorI2Vsc2UgLyogQ0tfQU5TSUMgKi8KK2NrbWFreG1z ZyhidWYsbGVuLHMxLHMyLHMzLHM0LHM1LHM2LHM3LHM4LHM5LHMxMCxzMTEsczEyKQorICBjaGFy ICpidWYsICpzMSwgKnMyLCAqczMsICpzNCwgKnM1LCAqczYsICpzNywgKnM4LCAqczksICpzMTAs ICpzMTEsICpzMTI7CisgIGludCBsZW47CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAgICBp bnQgaSwgbiA9IDAsIG0gPSAwOworICAgIGNoYXIgKnM7CisgICAgY2hhciAqcCwgKmFbMTJdOwor CisKKyAgICBpZiAoIWJ1ZikgcmV0dXJuKG4pOwkJLyogTm8gZGVzdGluYXRpb24gKi8KKyAgICBp ZiAobGVuIDwgMSkgcmV0dXJuKG4pOwkJLyogTm8gc2l6ZSAqLworCisgICAgcyA9IGJ1ZjsJCQkJ LyogUG9pbnQgdG8gZGVzdGluYXRpb24gKi8KKyAgICBhWzBdID0gczE7IGFbMV0gPSAgczI7IGFb Ml0gID0gczM7ICBhWzNdID0gczQ7IC8qIFNvdXJjZS1zdHJpbmcgYXJyYXkgKi8KKyAgICBhWzRd ID0gczU7IGFbNV0gPSAgczY7IGFbNl0gID0gczc7ICBhWzddID0gczg7CisgICAgYVs4XSA9IHM5 OyBhWzldID0gczEwOyBhWzEwXSA9IHMxMTsgYVsxMV0gPSBzMTI7CisgICAgZm9yIChpID0gMDsg aSA8IDEyOyBpKyspIHsJCS8qIExvb3AgdGhydSBhcnJheSAqLworCXAgPSBhW2ldOwkJCS8qIFBv aW50IHRvIHRoaXMgZWxlbWVudCAqLworCWlmIChwKSB7CQkJLyogSWYgcG9pbnRlciBub3QgbnVs bCAqLworCSAgICBuID0gY2tzdHJuY3B5KHMscCxsZW4pOwkvKiBDb3B5IHNhZmVseSAqLworCSAg ICBtICs9IG47CQkJLyogQWNjdW11bGF0ZSB0b3RhbCAqLworCSAgICBpZiAocFtuXSkJCQkvKiBE aWRuJ3QgZ2V0IHdob2xlIHRoaW5nPyAqLworCSAgICAgIHJldHVybigtbSk7CQkvKiByZXR1cm4g aW5kaWNhdGluZyBidWZmZXIgZnVsbCAqLworCSAgICBsZW4gLT0gbjsJCQkvKiBEZWR1Y3QgZnJv bSBzcGFjZSBsZWZ0ICovCisJICAgIHMgKz0gbjsJCQkvKiBPdGhlcndpc2UgYWR2YW5jZSBkZXN0 IHBvaW50ZXIgKi8KKwl9CisgICAgfQorICAgIHJldHVybihtKTsJCQkJLyogUmV0dXJuIHRvdGFs IGJ5dGVzIGNvcGllZCAqLworfQorCisvKiAgQyBIIEEgUiBUIE8gUyBUIFIgICovCisKKy8qICBD b252ZXJ0cyBhIGNoYXJhY3RlciB0byBhIHN0cmluZywgaW50ZXJwcmV0aW5nIGNvbnRyb2xzLiAg Ki8KKworY2hhciAqCitjaGFydG9zdHIoeCkgaW50IHg7IHsJCQkvKiBDYWxsIHdpdGggY2hhciB4 ICovCisgICAgc3RhdGljIGNoYXIgYnVmWzJdOwkJCS8qIFJldHVybnMgc3RyaW5nIHBvaW50ZXIu ICovCisgICAgaWYgKHggPCAzMikKKyAgICAgIHJldHVybihjY250YWJbeF0pOworICAgIGlmICh4 ID09IDEyNykKKyAgICAgIHJldHVybigiREVMIik7CisgICAgaWYgKHggPiAxMjcgJiYgeCA8IDE2 MSkKKyAgICAgIHJldHVybihjMXRhYlt4IC0gMTI4XSk7CisgICAgaWYgKHggPT0gMHhBRCkKKyAg ICAgIHJldHVybigiU0hZIik7CisgICAgYnVmWzFdID0gTlVMOworICAgIGJ1ZlswXSA9ICh1bnNp Z25lZCkoeCAmIDB4ZmYpOworICAgIHJldHVybigoY2hhciAqKWJ1Zik7Cit9CisKKy8qICBDIEsg UiBDIEggQSBSICovCisKKy8qICBSZXR1cm5zIHRoZSByaWdodG1vc3QgY2hhcmFjdGVyIG9mIHRo ZSBnaXZlbiBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nICovCisKK2ludAorY2tyY2hhcihzKSBjaGFy ICogczsgeworICAgIHJlZ2lzdGVyIENIQVIgYyA9ICdcMCcsICpwOworICAgIHAgPSAoQ0hBUiAq KXM7CisgICAgaWYgKCFwKSBwID0gKENIQVIgKikiIjsJCS8qIE51bGwgcG9pbnRlciA9PSBlbXB0 eSBzdHJpbmcgKi8KKyAgICBpZiAoISpwKSByZXR1cm4oMCk7CisgICAgd2hpbGUgKCpwKQkJCQkv KiBDcmF3bCB0byBlbmQgb2Ygc3RyaW5nICovCisgICAgICBjID0gKnArKzsKKyAgICByZXR1cm4o KHVuc2lnbmVkKShjICYgMHhmZikpOwkvKiBSZXR1cm4gZmluYWwgY2hhcmFjdGVyICovCit9CisK Ky8qICBDIEsgUyBUIFIgQyBIIFIgICovCisKKy8qICBSZXBsYWNlbWVudCBmb3Igc3RyY2hyKCks IHdoaWNoIGlzIG5vdCB1bml2ZXJzYWwuICAqLworLyogIENhbGwgd2l0aDoKKyAgICAgcyA9IHBv aW50ZXIgdG8gc3RyaW5nIHRvIGxvb2sgaW4uCisgICAgIGMgPSBjaGFyYWN0ZXIgdG8gbG9vayBm b3IuCisgICAgUmV0dXJuczoKKyAgICAgTlVMTCBpZiBjIG5vdCBmb3VuZCBpbiBzIG9yIHVwb24g YW55IGtpbmQgb2YgZXJyb3IsIG9yOgorICAgICBwb2ludGVyIHRvIGZpcnN0IG9jY3VycmVuY2Ug b2YgYyBpbiBzLCBzZWFyY2hpbmcgZnJvbSBsZWZ0IHRvIHJpZ2h0LgorKi8KK2NoYXIgKgorI2lm ZGVmIENLX0FOU0lDCitja3N0cmNocihjaGFyICogcywgY2hhciBjKQorI2Vsc2UKK2Nrc3RyY2hy KHMsYykgY2hhciAqcywgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogY2tzdHJjaHIgKi8g eworICAgIGlmICghcykKKyAgICAgIHJldHVybihOVUxMKTsKKyAgICB3aGlsZSAoKnMgJiYgKnMg IT0gYykKKyAgICAgIHMrKzsKKyAgICByZXR1cm4oKCpzID09IGMpID8gcyA6IE5VTEwpOworfQor CisvKiAgQyBLIFMgVCBSIFIgQyBIIFIgICovCisKKy8qICBSZXBsYWNlbWVudCBmb3Igc3RycmNo cigpLCB3aGljaCBpcyBub3QgdW5pdmVyc2FsLiAgKi8KKy8qICBDYWxsIHdpdGg6CisgICAgIHMg PSBwb2ludGVyIHRvIHN0cmluZyB0byBsb29rIGluLgorICAgICBjID0gY2hhcmFjdGVyIHRvIGxv b2sgZm9yLgorICAgIFJldHVybnM6CisgICAgIE5VTEwgaWYgYyBub3QgZm91bmQgaW4gcyBvciB1 cG9uIGFueSBraW5kIG9mIGVycm9yLCBvcjoKKyAgICAgcG9pbnRlciB0byBmaXJzdCBvY2N1cnJl bmNlIG9mIGMgaW4gcywgc2VhcmNoaW5nIGZyb20gcmlnaHQgdG8gbGVmdC4KKyovCitjaGFyICoK KyNpZmRlZiBDS19BTlNJQworY2tzdHJyY2hyKGNoYXIgKiBzLCBjaGFyIGMpCisjZWxzZQorY2tz dHJyY2hyKHMsYykgY2hhciAqcywgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogY2tzdHJj aHIgKi8geworICAgIGNoYXIgKiBzMiA9IE5VTEw7CisgICAgaWYgKCFzKQorICAgICAgcmV0dXJu KE5VTEwpOworICAgIHdoaWxlICgqcykgeworCWlmICgqcyA9PSBjKQorCSAgczIgPSBzOworCXMr KzsKKyAgICB9CisgICAgcmV0dXJuKHMyKTsKK30KKworCisvKiBDIEsgUyBUIFIgUCBCIFIgSyAg LS0gIFBvcnRhYmxlIHJlcGxhY2VtZW50IGZvciBzdHJwYnJrKCkgICovCisKKy8qIFJldHVybnMg cG9pbnRlciB0byBmaXJzdCBjaGFyIGluIHMxIHRoYXQgaXMgYWxzbyBpbiBzMiwgb3IgTlVMTCAq LworCitjaGFyICoKK2Nrc3RycGJyayhzMSwgczIpIGNoYXIgKiBzMSwgKiBzMjsgeworICAgIGNo YXIgYzEsIGMyLCAqIHMzOworICAgIGlmICghczEgfHwgIXMyKSByZXR1cm4oTlVMTCk7CisgICAg aWYgKCEqczEgfHwgISpzMikgcmV0dXJuKE5VTEwpOworICAgIHdoaWxlICgoYzEgPSAqczErKykp IHsKKwlzMyA9IHMyOworCXdoaWxlICgoYzIgPSAqczMrKykpIHsKKwkgICAgaWYgKGMyID09IGMx KQorCSAgICAgIHJldHVybihzMS0xKTsKKwl9CisgICAgfQorICAgIHJldHVybihOVUxMKTsKK30K KworLyogIEMgSyBMIE8gVyBFIFIgIC0tICBMb3dlcmNhc2UgYSBzdHJpbmcgSU4gUExBQ0UgKi8K KworLyogUmV0dXJucyB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgKi8KKworaW50Citja2xvd2Vy KHMpIGNoYXIgKnM7IHsKKyAgICBpbnQgbiA9IDA7CisgICAgaWYgKCFzKSByZXR1cm4oMCk7Cisg ICAgd2hpbGUgKCpzKSB7CisgICAgICAgIGlmIChpc3VwcGVyKCpzKSkgKnMgPSAoY2hhcikgdG9s b3dlcigqcyk7CisgICAgICAgIHMrKywgbisrOworICAgIH0KKyAgICByZXR1cm4obik7Cit9CisK Ky8qICBDIEsgVSBQIFAgRSBSICAtLSAgVXBwZXJjYXNlIGEgc3RyaW5nIElOIFBMQUNFICovCisK Ky8qIFJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nICovCisKK2ludAorY2t1cHBlcihz KSBjaGFyICpzOyB7CisgICAgaW50IG4gPSAwOworICAgIGlmICghcykgcmV0dXJuKDApOworICAg IHdoaWxlICgqcykgeworICAgICAgICBpZiAoaXNsb3dlcigqcykpICpzID0gKGNoYXIpIHRvdXBw ZXIoKnMpOworICAgICAgICBzKyssIG4rKzsKKyAgICB9CisgICAgcmV0dXJuKG4pOworfQorCisv KiAgQyBLIEwgVCBPIEEgIC0tICBMb25nIHRvIHN0cmluZyAgLS0gIEZPUiBESVNDSVBMSU5FRCBV U0UgT05MWSAgKi8KKworI2RlZmluZSBOVU1CVUYgMTAyNAorc3RhdGljIGNoYXIgbnVtYnVmW05V TUJVRiszMl0gPSB7IE5VTCwgTlVMIH07CitzdGF0aWMgaW50IG51bWJwID0gMDsKKy8qCisgIGNr bHRvYSgpIGFuZCBja2l0b2EoKSBhcmUgbGlrZSBhdG9sKCkgYW5kIGF0b2koKSBpbiB0aGUgcmV2 ZXJzZSBkaXJlY3Rpb24sCisgIHJldHVybmluZyBhIHBvaW50ZXIgdG8gdGhlIHN0cmluZyByZXBy ZXNlbnRhdGlvbiBvZiB0aGUgZ2l2ZW4gbnVtYmVyIHdpdGhvdXQKKyAgdGhlIGNhbGxlciBoYXZp bmcgdG8gd29ycnkgYWJvdXQgYWxsb2NhdGluZyBvciBkZWZpbmluZyBhIGJ1ZmZlciBmaXJzdC4K KyAgVGhleSBtYW5hZ2UgdGhlaXIgb3duIGludGVybmFsIGJ1ZmZlciwgc28gc3VjY2Vzc2l2ZSBj YWxscyByZXR1cm4gZGlmZmVyZW50CisgIHBvaW50ZXJzLiAgSG93ZXZlciwgdG8ga2VlcCBtZW1v cnkgY29uc3VtcHRpb24gZnJvbSBncm93aW5nIHdpdGhvdXQgYm91bmQsCisgIHRoZSBidWZmZXIg cmVjeWNsZXMgaXRzZWxmLiAgU28gYWZ0ZXIgc2V2ZXJhbCBodW5kcmVkIGNhbGxzIChkZXBlbmRp bmcgb24KKyAgdGhlIHNpemUgb2YgdGhlIG51bWJlcnMpLCBzb21lIG9mIHRoZSBlYXJsaWVyIHBv aW50ZXJzIG1pZ2h0IHdlbGwgZmluZAorICB0aGVtc2VsdmVzIHJlZmVyZW5jaW5nIHNvbWV0aGlu ZyBkaWZmZXJlbnQuICBNb3JhbDogWW91IGNhbid0IHdpbiBpbiBDLgorICBUaGVyZWZvcmUsIHRo ZXNlIHJvdXRpbmVzIGFyZSBpbnRlbmRlZCBtYWlubHkgZm9yIGdlbmVyYXRpbmcgbnVtZXJpYyBz dHJpbmdzCisgIGZvciBzaG9ydC10ZXJtIHVzZSwgZS5nLiBmb3IgcGFzc2luZyBudW1iZXJzIGlu IHN0cmluZyBmb3JtIGFzIHBhcmFtZXRlcnMgdG8KKyAgZnVuY3Rpb25zLiAgRm9yIGxvbmctdGVy bSB1c2UsIHRoZSByZXN1bHQgbXVzdCBiZSBjb3BpZWQgdG8gYSBzYWZlIHBsYWNlLgorKi8KK2No YXIgKgorI2lmZGVmIENLX0FOU0lDCitja2x0b2EobG9uZyBuKQorI2Vsc2UKK2NrbHRvYShuKSBs b25nIG47CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIGNrbHRvYSAqLyB7CisgICAgY2hhciBi dWZbMzJdOwkJCS8qIEludGVybmFsIHdvcmtpbmcgYnVmZmVyICovCisgICAgY2hhciAqIHAsICog cywgKiBxOworICAgIGludCBrLCB4LCBsZW4gPSAwLCBzaWduID0gMDsKKyAgICBpZiAobiA8IDBM KSB7CQkJLyogU2lnbiAqLworCW4gPSAwTCAtIG47CisJc2lnbiA9IDE7CisgICAgfQorICAgIGJ1 ZlszMV0gPSBOVUw7CisgICAgZm9yIChrID0gMzA7IGsgPiAwOyBrLS0pIHsJCS8qIENvbnZlcnQg bnVtYmVyIHRvIHN0cmluZyAqLworCXggPSBuICUgMTBMOworCWJ1ZltrXSA9IHggKyAnMCc7CisJ biA9IG4gLyAxMEw7CisJaWYgKCFuKQorCSAgYnJlYWs7CisgICAgfQorICAgIGlmIChzaWduKSBi dWZbLS1rXSA9ICctJzsJCS8qIEFkZCBzaWduIGlmIG5lY2Vzc2FyeSAqLworICAgIGxlbiA9IDMx IC0gazsKKyAgICBpZiAobGVuICsgbnVtYnAgPiBOVU1CVUYpCisgICAgICBudW1icCA9IDA7Cisg ICAgcCA9IG51bWJ1ZiArIG51bWJwOworICAgIHEgPSBwOworICAgIHMgPSBidWYgKyBrOworICAg IHdoaWxlICgoKnArKyA9ICpzKyspKSA7CQkvKiBDb3B5ICovCisgICAgKnArKyA9IE5VTDsKKyAg ICBudW1icCArPSBsZW4rMTsKKyAgICByZXR1cm4ocSk7CQkJCS8qIFJldHVybiBwb2ludGVyICov Cit9CisKKy8qICBDIEsgVSBMIFQgTyBBICAtLSAgVW5zaWduZWQgbG9uZyB0byBzdHJpbmcgICov CisKK2NoYXIgKgorI2lmZGVmIENLX0FOU0lDCitja3VsdG9hKHVuc2lnbmVkIGxvbmcgbikKKyNl bHNlCitja3VsdG9hKG4pIHVuc2lnbmVkIGxvbmcgbjsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLwor LyogY2t1bHRvYSAqLyB7CisgICAgY2hhciBidWZbMzJdOwkJCS8qIEludGVybmFsIHdvcmtpbmcg YnVmZmVyICovCisgICAgY2hhciAqIHAsICogcywgKiBxOworICAgIGludCBrLCB4LCBsZW4gPSAw OworICAgIGJ1ZlszMV0gPSBOVUw7CisgICAgZm9yIChrID0gMzA7IGsgPiAwOyBrLS0pIHsJCS8q IENvbnZlcnQgbnVtYmVyIHRvIHN0cmluZyAqLworCXggPSBuICUgMTBMOworCWJ1ZltrXSA9IHgg KyAnMCc7CisJbiA9IG4gLyAxMEw7CisJaWYgKCFuKQorCSAgYnJlYWs7CisgICAgfQorICAgIGxl biA9IDMxIC0gazsKKyAgICBpZiAobGVuICsgbnVtYnAgPiBOVU1CVUYpCisgICAgICBudW1icCA9 IDA7CisgICAgcCA9IG51bWJ1ZiArIG51bWJwOworICAgIHEgPSBwOworICAgIHMgPSBidWYgKyBr OworICAgIHdoaWxlICgoKnArKyA9ICpzKyspKSA7CQkvKiBDb3B5ICovCisgICAgbnVtYnAgKz0g bGVuKzE7CisgICAgcmV0dXJuKHEpOwkJCQkvKiBSZXR1cm4gcG9pbnRlciAqLworfQorCitjaGFy ICoKKyNpZmRlZiBDS19BTlNJQworY2tsdG94KGxvbmcgbikJCQkJLyogTG9uZyBpbnQgdG8gIjB4 Li4iIGhleCBzdHJpbmcgKi8KKyNlbHNlCitja2x0b3gobikgbG9uZyBuOworI2VuZGlmIC8qIENL X0FOU0lDICovCisvKiBja2x0b3ggKi8geworICAgIGNoYXIgYnVmWzMyXTsJCQkvKiBJbnRlcm5h bCB3b3JraW5nIGJ1ZmZlciAqLworICAgIGNoYXIgKnAsICpxLCAqcywgKmJwID0gYnVmICsgMjsK KyAgICBpbnQgazsKKyAgICBidWZbMF0gPSAnMCc7CisgICAgYnVmWzFdID0gJ3gnOworICAgIHNw cmludGYoYnAsICIlbHgiLCBuKTsKKyAgICBrID0gc3RybGVuKGJwKTsKKyAgICBpZiAoayYxKSB7 CisJc3ByaW50ZihicCwgIjAlbHgiLCBuKTsKKwlrKys7CisgICAgfQorICAgIGsgKz0gMjsJCQkJ LyogIjB4IiAqLworICAgIGlmIChudW1icCArIGsgPj0gTlVNQlVGKQorICAgICAgbnVtYnAgPSAw OworICAgIHAgPSBudW1idWYgKyBudW1icDsKKyAgICBxID0gcDsKKyAgICBzID0gYnVmOworICAg IHdoaWxlICgoKnArKyA9ICpzKyspKSA7CQkvKiBDb3B5ICovCisgICAgKnArKyA9IE5VTDsKKyAg ICBudW1icCArPSBrKzE7CisgICAgcmV0dXJuKHEpOwkJCQkvKiBSZXR1cm4gcG9pbnRlciAqLwor fQorCisKKy8qICBDIEsgRiBTIFQgTyBBICAtLSAgRmlsZSBTaXplIChvciBvZmZzZXQpIHRvIHN0 cmluZyAgKi8KKworLyogVGhpcyBpcyBqdXN0IGxpa2UgY2tsdG9hKCkgZXhjZXB0IGZvciB0aGUg ZGF0YSB0eXBlIG9mIHRoZSBhcmd1bWVudC4gKi8KKy8qIEl0J3MgbWFpbmx5IGZvciBwcmludGlu ZyBmaWxlIHNpemVzIHdpdGhvdXQgaGF2aW5nIHRvIGtub3cgdGhlaXIgZGF0YSAqLworLyogdHlw ZSwgc28gd2UgZG9uJ3QgaGF2ZSB0byBoYXJkd2FyZSAiJWxkIiBvciAiJWxsZCIgaW50byBwcmlu dGYoKXMuICovCisvKiBXb3JrcyBmb3IgMzIgb3IgNjQgYml0cywgYWNjb3JkaW5nIHRvIENLX09G Rl9UIGRlZmluaXRpb24uICovCisKK2NoYXIgKgorI2lmZGVmIENLX0FOU0lDCitja2ZzdG9hKENL X09GRl9UIG4pCisjZWxzZQorY2tmc3RvYShuKSBDS19PRkZfVCBuOworI2VuZGlmIC8qIENLX0FO U0lDICovCisvKiBja2ZzdG9hICovIHsKKyAgICBjaGFyIGJ1ZlszMl07CQkJLyogSW50ZXJuYWwg d29ya2luZyBidWZmZXIgKi8KKyAgICBjaGFyICogcCwgKiBzLCAqIHE7CisgICAgaW50IGssIHgs IGxlbiA9IDAsIHNpZ24gPSAwOworCisgICAgaWYgKG4gPCAoQ0tfT0ZGX1QpMCkgewkJLyogU2ln biAqLworCW4gPSAoQ0tfT0ZGX1QpMCAtIG47CisJc2lnbiA9IDE7CisgICAgfQorICAgIGJ1Zlsz MV0gPSBOVUw7CQkJLyogMl42My0xIGlzIGFib3V0IDIwIGRlY2ltYWwgZGlnaXRzICovCisgICAg Zm9yIChrID0gMzA7IGsgPiAwOyBrLS0pIHsJCS8qIENvbnZlcnQgbnVtYmVyIHRvIHN0cmluZyAq LworCXggPSBuICUgKENLX09GRl9UKTEwOworCWlmICh4IDwgMCkgeworCSAgICAvKiB4ICs9IDEw OyAqLworCSAgICBja3N0cm5jcHkoJmJ1ZlsyM10sIk9WRVJGTE9XIiwzMik7CisJICAgIHNpZ24g PSAwOworCSAgICBrID0gMjM7CisJICAgIGJyZWFrOworCX0KKwlidWZba10gPSB4ICsgJzAnOwor CW4gPSBuIC8gKENLX09GRl9UKTEwOworCWlmICghbikKKwkgIGJyZWFrOworICAgIH0KKyAgICBp ZiAoc2lnbikgYnVmWy0ta10gPSAnLSc7CQkvKiBBZGQgc2lnbiBpZiBuZWNlc3NhcnkgKi8KKyAg ICBsZW4gPSAzMSAtIGs7CisgICAgaWYgKGxlbiArIG51bWJwID4gTlVNQlVGKQorICAgICAgbnVt YnAgPSAwOworICAgIHAgPSBudW1idWYgKyBudW1icDsKKyAgICBxID0gcDsKKyAgICBzID0gYnVm ICsgazsKKyAgICB3aGlsZSAoKCpwKysgPSAqcysrKSkgOwkJLyogQ29weSAqLworICAgICpwKysg PSBOVUw7CisgICAgbnVtYnAgKz0gbGVuKzE7CisgICAgcmV0dXJuKHEpOwkJCQkvKiBSZXR1cm4g cG9pbnRlciAqLworfQorCisvKiAgQyBLIEEgVCBPIEYgUyAgLS0gIFN0cmluZyB0byBGaWxlIFNp emUgKG9yIG9mZnNldCkgKi8KKworLyogVGhpcyBpcyB0aGUgaW52ZXJzZSBvZiBja2ZzdG9hKCks IGEgcmVwbGFjZW1lbnQgZm9yIGF0b2woKSB0aGF0IHdvcmtzICovCisvKiBmb3IgZWl0aGVyIDMy LWJpdCBvciA2NC1iaXQgYXJndW1lbnRzLCBhY2NvcmRpbmcgdG8gQ0tfT0ZGX1QgZGVmaW5pdGlv bi4gKi8KKy8qIExpa2UgYXRvbCgpLCB0aGVyZSBpcyBubyBlcnJvciBpbmRpY2F0aW9uLiAqLwor CitDS19PRkZfVAorI2lmZGVmIENLX0FOU0lDCitja2F0b2ZzKGNoYXIgKiBzKQorI2Vsc2UKK2Nr YXRvZnMocykgY2hhciAqIHM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIGNrYXRvZnMgKi8g eworICAgIENLX09GRl9UIHJlc3VsdCA9IChDS19PRkZfVCkwOworICAgIGludCBtaW51cyA9IDA7 CisgICAgd2hpbGUgKCpzICYmICgqcyA9PSBTUCB8fCAqcyA9PSBIVCkpIHMrKzsKKyAgICBpZiAo KnMgPT0gJysnKSBzKys7CisgICAgaWYgKCpzID09ICctJykgeworCW1pbnVzID0gMTsKKwlzKys7 CisgICAgfQorICAgIHdoaWxlIChpc2RpZ2l0KCpzKSkgeworCXJlc3VsdCA9IChyZXN1bHQgKiAo Q0tfT0ZGX1QpMTApICsgKENLX09GRl9UKSgqcyAtICcwJyk7CisJcysrOworICAgIH0KKyAgICBy ZXR1cm4obWludXMgPyAtcmVzdWx0IDogcmVzdWx0KTsKK30KKworLyogIEMgSyBJIFQgTyBBICAt LSAgSW50IHRvIHN0cmluZyAgLS0gRk9SIERJU0NJUExJTkVEIFVTRSBPTkxZICAqLworCitjaGFy ICoKK2NraXRvYShuKSBpbnQgbjsgewkJCS8qIFNlZSBjb21tZW50cyB3aXRoIGNrbHRvYSgpLiAq LworICAgIGxvbmcgbm47CisgICAgbm4gPSBuOworICAgIHJldHVybihja2x0b2Eobm4pKTsKK30K KworCitjaGFyICoJCQkJCS8qIFVuc2lnbmVkIGludCB0byBzdHJpbmcgKi8KK2NrdWl0b2Eobikg dW5zaWduZWQgaW50IG47IHsKKyAgICB1bnNpZ25lZCBsb25nIG5uOworICAgIG5uID0gbjsKKyAg ICByZXR1cm4oY2t1bHRvYShubikpOworfQorCitjaGFyICoKK2NraXRveChuKSBpbnQgbjsgewkJ CS8qIEludCB0byBoZXggKi8KKyAgICBsb25nIG5uOworICAgIG5uID0gbjsKKyAgICByZXR1cm4o Y2tsdG94KG5uKSk7Cit9CisKK2NoYXIgKgorI2lmZGVmIENLX0FOU0lDCitja2N0b2EoY2hhciBj KQkJCQkvKiBDaGFyIHRvIHN0cmluZyAqLworI2Vsc2UKK2NrY3RvYShjKSBjaGFyIGM7CisjZW5k aWYKKy8qIGNrY3RvYSAqLyB7CisgICAgc3RhdGljIGNoYXIgYnVmWzMyXTsKKyAgICBzdGF0aWMg aW50IGN1cnJlbnQgPSAwOworICAgIGlmIChjdXJyZW50ID49IDMwKQorICAgICAgY3VycmVudCA9 IDA7CisgICAgYnVmW2N1cnJlbnQrK10gPSBjOworICAgIGJ1ZltjdXJyZW50KytdID0gJ1wwJzsK KyAgICByZXR1cm4oKGNoYXIgKikoYnVmICsgY3VycmVudCAtIDIpKTsKK30KKworY2hhciAqCisj aWZkZWYgQ0tfQU5TSUMKK2NrY3RveChDSEFSIGMsIGludCBmbGFnKQkJLyogVW5zaWduZWQgY2hh ciB0byBoZXggKi8KKyNlbHNlCitja2N0b3goYywgZmxhZykgQ0hBUiBjOyBpbnQgZmxhZzsKKyNl bmRpZgorLyogY2tjdG94ICovIHsKKyAgICBzdGF0aWMgY2hhciBidWZbNDhdOworICAgIHN0YXRp YyBpbnQgY3VycmVudCA9IDA7CisgICAgaW50IHg7CisgICAgY2hhciBoOworICAgIGlmIChjdXJy ZW50ID4gNDUpCisgICAgICBjdXJyZW50ID0gMDsKKyAgICB4ID0gKGMgPj4gNCkgJiAweDBmOwor ICAgIGggPSByeGRpZ2l0c1t4XTsKKyAgICBpZiAoIWZsYWcgJiYgaXN1cHBlcihyeGRpZ2l0c1t4 XSkpCisgICAgICBoID0gdG9sb3dlcihyeGRpZ2l0c1t4XSk7CisgICAgYnVmW2N1cnJlbnQrK10g PSBoOworICAgIHggPSBjICYgMHgwZjsKKyAgICBoID0gcnhkaWdpdHNbeF07CisgICAgaWYgKCFm bGFnICYmIGlzdXBwZXIocnhkaWdpdHNbeF0pKQorICAgICAgaCA9IHRvbG93ZXIocnhkaWdpdHNb eF0pOworICAgIGJ1ZltjdXJyZW50KytdID0gaDsKKyAgICBidWZbY3VycmVudCsrXSA9ICdcMCc7 CisgICAgcmV0dXJuKChjaGFyICopKGJ1ZiArIGN1cnJlbnQgLSAzKSk7Cit9CisKKy8qICBDIEsg SSBOIEQgRSBYICAtLSAgQy1LZXJtaXQncyBpbmRleCBmdW5jdGlvbiAgKi8KKy8qCisgIFdlIGNh bid0IGRlcGVuZCBvbiBDIGxpYnJhcmllcyB0byBoYXZlIG9uZSwgc28gaGVyZSBpcyBvdXIgb3du LgorICBDYWxsIHdpdGg6CisgICAgczEgLSBTdHJpbmcgdG8gbG9vayBmb3IuCisgICAgczIgLSBT dHJpbmcgdG8gbG9vayBpbi4KKyAgICAgdCAtIE9mZnNldCBmcm9tIHJpZ2h0IG9yIGxlZnQgb2Yg czIsIDAgYmFzZWQ7IC0xIGZvciByaWdodG1vc3QgY2hhciBpbiBzMi4KKyAgICAgciAtIDAgZm9y IGxlZnQtdG8tcmlnaHQgc2VhcmNoLCBub24tMCBmb3IgcmlnaHQtdG8tbGVmdC4KKyAgaWNhc2Ug IDAgZm9yIGNhc2UgaW5kZXBlbmRlbmNlLCBub24tMCBpZiBhbHBoYWJldGljIGNhc2UgbWF0dGVy cy4KKyAgUmV0dXJucyAwIGlmIHN0cmluZyBub3QgZm91bmQsIG90aGVyd2lzZSBhIDEtYmFzZWQg cmVzdWx0LgorICBBbHNvIHJldHVybnMgMCBvbiBhbnkga2luZCBvZiBlcnJvciwgZS5nLiBqdW5r IHBhcmFtZXRlcnMuCisqLworaW50Citja2luZGV4KHMxLHMyLHQscixpY2FzZSkgY2hhciAqczEs ICpzMjsgaW50IHQsIHIsIGljYXNlOyB7CisgICAgaW50IGxlbjEgPSAwLCBsZW4yID0gMCwgaSwg aiwgeCwgb3QgPSB0OyAvKiBvdCA9IG9yaWdpbmFsIHQgKi8KKyAgICBjaGFyICogczsKKworICAg IGlmICghczEgfHwgIXMyKSByZXR1cm4oMCk7CisgICAgcyA9IHMxOworICAgIHdoaWxlICgqcysr KSBsZW4xKys7CQkvKiBsZW5ndGggb2Ygc3RyaW5nIHRvIGxvb2sgZm9yICovCisgICAgcyA9IHMy OworICAgIHdoaWxlICgqcysrKSBsZW4yKys7CQkvKiBsZW5ndGggb2Ygc3RyaW5nIHRvIGxvb2sg aW4gKi8KKyAgICBzID0gczI7CisgICAgaWYgKHQgPCAwKSB0ID0gbGVuMiAtIDE7CisKKyAgICBq ID0gbGVuMiAtIGxlbjE7CQkJLyogbGVuZ3RoIGRpZmZlcmVuY2UgKi8KKworICAgIGlmIChqIDwg MCB8fCAociA9PSAwICYmIHQgPiBqKSkJLyogc2VhcmNoIHN0cmluZyBpcyBsb25nZXIgKi8KKyAg ICAgIHJldHVybigwKTsKKyAgICBpZiAociA9PSAwKSB7CQkJLyogSW5kZXggKi8KKwlzID0gczIg KyB0OwkJCS8qIFBvaW50IHRvIGJlZ2lubmluZyBvZiB0YXJnZXQgKi8KKwlmb3IgKGkgPSAwOyBp IDw9IChqIC0gdCk7IGkrKykgeyAvKiBOb3cgY29tcGFyZSAqLworCSAgICB4ID0gY2tzdHJjbXAo czEscysrLGxlbjEsaWNhc2UpOworCSAgICBpZiAoIXgpCisJICAgICAgcmV0dXJuKGkrMSt0KTsK Kwl9CisgICAgfSBlbHNlIHsJCQkJLyogUmV2ZXJzZSBJbmRleCAqLworICAgICAgICBpID0gbGVu MiAtIGxlbjE7CQkvKiBXaGVyZSB0byBzdGFydCBsb29raW5nICovCisgICAgICAgIGlmIChvdCA+ IDApCQkJLyogRmlndXJlIGluIG9mZnNldCBpZiBhbnkgKi8KKwkgIGkgLT0gdDsKKwlmb3IgKGog PSBpOyBqID4gLTE7IGotLSkgeworCSAgICBpZiAoIWNrc3RyY21wKHMxLCZzMltqXSxsZW4xLGlj YXNlKSkKKwkgICAgICByZXR1cm4oaisxKTsKKwl9CisgICAgfQorICAgIHJldHVybigwKTsKK30K KworLyogIEMgSyBTIFQgUiBTIFQgUiAgLS0gIFBvcnRhYmxlIHJlcGxhY2VtZW50IGZvciBzdHJz dHIoKSAgKi8KKworLyogIFJldHVybnMgcG9pbnRlciB0byBmaXJzdCBvY2N1cnJlbmNlIG9mIHMx IGluIHMyLCBvciBOVUxMICovCisKK2NoYXIgKgorY2tzdHJzdHIoczEsIHMyKSBjaGFyICogczEs ICogczI7IHsKKyAgICBpbnQgazsKKyAgICBrID0gY2tpbmRleChzMixzMSwwLDAsMSk7CisgICAg cmV0dXJuKChrIDwgMSkgPyBOVUxMIDogJnMxW2stMV0pOworfQorCisKKy8qICBCIFIgUyBUIFIg SSBQICAtLSAgU3RyaXAgZW5jbG9zaW5nIGJyYWNlcyBmcm9tIGFyZyBzdHJpbmcsIGluIHBsYWNl LiAqLworLyoKKyAgQ2FsbCB3aXRoOgorICAgIFBvaW50ZXIgdG8gc3RyaW5nIHRoYXQgY2FuIGJl IHBva2VkLgorICBSZXR1cm5zOgorICAgIFBvaW50ZXIgdG8gc3RyaW5nIHdpdGhvdXQgZW5jbG9z aW5nIGJyYWNlcy4KKyAgICBJZiBvcmlnaW5hbCBzdHJpbmcgd2FzIG5vdCBicmFjZWQsIHRoaXMg aXMgdGhlIGFyZyBwb2ludGVyOworICAgIG90aGVyd2lzZSBpdCBpcyAxICsgdGhlIGFyZyBwb2lu dGVyLCB3aXRoIHRoZSBtYXRjaGluZyBjbG9zaW5nCisgICAgYnJhY2UgemVybydkIG91dC4gIElm IHRoZSBzdHJpbmcgc3RhcnRzIHdpdGggYSBicmFjZSBidXQgZG9lcworICAgIG5vdCBlbmQgd2l0 aCBhIG1hdGNoaW5nIGJyYWNlLCB0aGUgb3JpZ2luYWwgcG9pbnRlciB0byB0aGUgb3JpZ2luYWwK KyAgICBzdHJpbmcgaXMgcmV0dXJuZWQuICBJZiB0aGUgYXJnIHBvaW50ZXIgaXMgTlVMTCwgYSBw b2ludGVyIHRvIGFuCisgICAgZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkLgorKi8KKyNpZmRlZiBD T01NRU5UCisKKy8qIFRoaXMgaXMgdGhlIG9yaWdpbmFsIHZlcnNpb24sIGhhbmRsaW5nIG9ubHkg YnJhY2VzICovCisKK2NoYXIgKgorYnJzdHJpcChwKSBjaGFyICpwOyB7CisgICAgaWYgKCFwKSBy ZXR1cm4oIiIpOworICAgIGlmICgqcCA9PSAneycpIHsKKwlpbnQgeDsKKwl4ID0gKGludClzdHJs ZW4ocCkgLSAxOworCWlmIChwW3hdID09ICd9JykgeworCSAgICBwW3hdID0gTlVMOworCSAgICBw Kys7CisJfQorICAgIH0KKyAgICByZXR1cm4ocCk7Cit9CisKKyNlbHNlCisvKiBOZXcgdmVyc2lv biBoYW5kbGVzIGJyYWNlcyBhbmQgZG91YmxlcXVvdGVzICovCisvKiBXQVJOSU5HOiB0aGlzIGZ1 bmN0aW9uIHdyaXRlcyBpbnRvIGl0cyBhcmd1bWVudCwgaXQgYWx3YXlzIGhhcy4gKi8KKworY2hh ciAqCiticnN0cmlwKHApIGNoYXIgKnA7IHsKKyAgICBpZiAoIXApIHJldHVybigiIik7CisgICAg aWYgKCpwID09ICd7JyB8fCAoKnAgPT0gJyInICYmIGRibHF1bykpIHsKKwlpbnQgeDsKKwl4ID0g KGludClzdHJsZW4ocCkgLSAxOworCWlmICh4ID4gMCkgeworCSAgICBpZiAoKCpwID09ICd7JyAm JiBwW3hdID09ICd9JykgfHwKKwkJKCpwID09ICciJyAmJiBwW3hdID09ICciJykpIHsKKwkJaWYg KHggPiAwICYmIHBbeC0xXSAhPSBDTURRKSB7CisJCSAgICBwW3hdID0gTlVMOworCQkgICAgcCsr OworCQl9CisJICAgIH0KKwl9CisgICAgfQorICAgIHJldHVybihwKTsKK30KKyNlbmRpZiAvKiBD T01NRU5UICovCisKKyNpZmRlZiBDT01NRU5UCisKKy8qIEV2ZW4gbmV3ZXIgZXhwZXJpbWVudGFs IHZlcnNpb24gLS0gYnJlYWtzIG1hbnkgdGhpbmdzICovCisKK2NoYXIgKgorZm5zdHJpcChwKSBj aGFyICpwOyB7CisgICAgaW50IGksIGosIGssIG4sIGxlbjsKKyAgICBleHRlcm4gaW50IGNtZF9x dW90aW5nOwkJLyogQmFkIC0gbm8gZXh0ZXJucyBhbGxvd2VkISAqLworCisgICAgaWYgKCFwKQor ICAgICAgcmV0dXJuKCIiKTsKKworICAgIGlmICgqcCA9PSAneycpIHsKKyAgICAgICAgbGVuID0g c3RybGVuKHApOworICAgICAgICBuID0gMDsKKworICAgICAgICBmb3IgKGogPSAwOyBqIDwgbGVu OyBqKysgKSB7CisgICAgICAgICAgICBpZiAocFtqXSA9PSAneycgJiYKKwkJKCFjbWRfcXVvdGlu ZyB8fCBqID09IDAgfHwgcFtqLTFdICE9IENNRFEpKSB7CisgICAgICAgICAgICAgICAgZm9yIChu ID0gMSwgaSA9IGorMTsgaSA8IGxlbjsgaSsrICkgeworICAgICAgICAgICAgICAgICAgICBpZiAo cFtpXSA9PSAneycgJiYgKCFjbWRfcXVvdGluZyB8fCBwW2ktMV0gIT0gQ01EUSkpCisJCSAgICAg IG4rKzsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocFtpXSA9PSAnfScgJiYgKCFjbWRf cXVvdGluZyB8fCBwW2ktMV0gIT0gQ01EUSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm ICgtLW4gPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoayA9IGo7IGsg PCBpIC0gMTsgaysrKQorCQkJICAgICAgcFtrXSA9IHBbaysxXTsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICBmb3IgKDsgaSA8IGxlbjsgaSsrICkKKwkJCSAgICAgIHBbaS0xXSA9IHBbaSsx XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4gLT0gMjsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICBqID0gaSAtIDE7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg ICAgIH0KKyAgICAgICAgaWYgKG4gPT0gMSkgeyAvKiBJbXBsaWVkIHJpZ2h0IGJyYWNlIGF0IGVu ZCBvZiBmaWVsZCAqLworICAgICAgICAgICAgZm9yIChrID0gajsgayA8IGxlbjsgaysrKQorCSAg ICAgIHBba10gPSBwW2srMV07CisgICAgICAgICAgICBsZW4gLT0gMTsKKyAgICAgICAgfQorICAg IH0gZWxzZSBpZiAoKnAgPT0gJyInKSB7CisgICAgICAgIGxlbiA9IHN0cmxlbihwKTsKKyAgICAg ICAgbiA9IDA7CisKKyAgICAgICAgZm9yIChqID0gMDsgaiA8IGxlbjsgaisrKSB7CisgICAgICAg ICAgICBpZiAocFtqXSA9PSAnIicgJiYKKwkJKCFjbWRfcXVvdGluZyB8fCBqID09IDAgfHwgcFtq LTFdICE9IENNRFEpKSB7CisgICAgICAgICAgICAgICAgbisrOworCisgICAgICAgICAgICAgICAg Zm9yIChpID0gaiArIDE7IGkgPCBsZW47IGkrKykgeworICAgICAgICAgICAgICAgICAgICBpZiAo cFtpXSA9PSAnIicgJiYgKCFjbWRfcXVvdGluZyB8fCBwW2ktMV0gIT0gQ01EUSkpIHsKKyAgICAg ICAgICAgICAgICAgICAgICAgIG4tLTsKKworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChr ID0gajsgayA8IGkgLSAxOyBrKyspCisJCQkgIHBba10gPSBwW2srMV07CisgICAgICAgICAgICAg ICAgICAgICAgICBmb3IgKDsgaSA8IGxlbjsgaSsrKQorCQkJICBwW2ktMV0gPSBwW2krMV07Cisg ICAgICAgICAgICAgICAgICAgICAgICBsZW4gLT0gMjsKKyAgICAgICAgICAgICAgICAgICAgICAg IGogPSBpIC0gMTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAobiA9PSAxKSB7IC8qIEltcGxpZWQg ZG91YmxlIHF1b3RlIGF0IGVuZCBvZiBmaWVsZCAqLworICAgICAgICAgICAgZm9yIChrID0gajsg ayA8IGxlbjsgaysrICkKKwkgICAgICBwW2tdID0gcFtrKzFdOworICAgICAgICAgICAgbGVuIC09 IDE7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuKHApOworfQorI2VuZGlmIC8qIENPTU1F TlQgKi8KKworI2lmZGVmIENPTU1FTlQKKy8qCisgIE5vdCB1c2VkIC0tIE5vdGU6IHRoZXNlIG5v dCBvbmx5IHdyaXRlIGludG8gdGhlaXIgYXJnLCBidXQgd3JpdGUgcGFzdAorICBwYXN0IHRoZSBl bmQuCisqLworY2hhciAqCiticmFjZShmbikgY2hhciAqZm47IHsKKyAgICBpbnQgc3BhY2VzID0g MDsKKyAgICBjaGFyICogcCwgY2gsIGNoMjsKKyAgICBmb3IgKHAgPSBmbjsgKnA7IHArKykgewor CWlmICgqcCA9PSBTUCkgeworCSAgICBzcGFjZXMgPSAxOworCSAgICBicmVhazsKKwl9CisgICAg fQorICAgIGlmIChzcGFjZXMpIHsKKyAgICAgICAgcCA9IGZuOworICAgICAgICBjaCA9ICpwOwor ICAgICAgICAqcCA9ICd7JzsKKyAgICAgICAgcCsrOworCisgICAgICAgIHdoaWxlICgqcCkgewor ICAgICAgICAgICAgY2gyID0gKnA7CisgICAgICAgICAgICAqcCA9IGNoOworICAgICAgICAgICAg Y2ggPSBjaDI7CisgICAgICAgICAgICBwKys7CisgICAgICAgIH0KKyAgICAgICAgKnAgPSBjaDsK KyAgICAgICAgcCsrOworICAgICAgICAqcCA9ICd9JzsKKyAgICAgICAgcCsrOworICAgICAgICAq cCA9ICdcMCc7CisgICAgfQorICAgIHJldHVybihmbik7Cit9CisjZW5kaWYgLyogQ09NTUVOVCAq LworCisvKiBkIHEgdSBvIHQgZSAgLS0gIFB1dHMgZG91YmxlcXVvdGVzIGFyb3VuZCBhcmcgaW4g cGxhY2UuICovCisvKgorICAgQ2FsbCB3aXRoOgorICAgICBQb2ludGVyIHRvIGJ1ZmZlciBhbmQg aXRzIHRvdGFsIGxlbmd0aCBhbmQgZmxhZyA9IDAgdG8gdXNlCisgICAgIGRvdWJsZXF1b3Rlcywg MSB0byB1c2UgYnJhY2VzLgorICAgUmV0dXJuczoKKyAgICAgTnVtYmVyOiBsZW5ndGggb2YgcmVz dWx0LgorKi8KK2ludAorZHF1b3RlKGZuLCBsZW4sIGZsYWcpIGNoYXIgKmZuOyBpbnQgbGVuOyBp bnQgZmxhZzsgeworICAgIGludCBzcGFjZXMgPSAwLCBrID0gMDsKKyAgICBjaGFyICogcCwgY2gs IGNoMjsKKyAgICBpZiAoIWZuKQorICAgICAgcmV0dXJuKDApOworCisgICAgayA9IHN0cmxlbihm bik7CisgICAgZm9yIChwID0gZm47ICpwOyBwKyspIHsKKwlpZiAoKnAgPT0gU1ApIHsKKyAgICAg ICAgICAgIHNwYWNlcyA9IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0K KyAgICBpZiAoc3BhY2VzKSB7CisJaWYgKGsgKyAyID49IGxlbikKKwkgIHJldHVybihrKTsKKyAg ICAgICAgcCA9IGZuOworICAgICAgICBjaCA9ICpwOworICAgICAgICAqcCA9IGZsYWcgPyAneycg OiAnIic7CisgICAgICAgIHArKzsKKworICAgICAgICB3aGlsZSAoKnApIHsKKyAgICAgICAgICAg IGNoMiA9ICpwOworICAgICAgICAgICAgKnAgPSBjaDsKKyAgICAgICAgICAgIGNoID0gY2gyOwor ICAgICAgICAgICAgcCsrOworICAgICAgICB9CisgICAgICAgICpwID0gY2g7CisgICAgICAgIHAr KzsKKyAgICAgICAgKnAgPSBmbGFnID8gJ30nIDogJyInOworICAgICAgICBwKys7CisgICAgICAg ICpwID0gJ1wwJzsKKyAgICB9CisgICAgcmV0dXJuKGsrMik7Cit9CisKKworLyogIFUgTiBUIEEg QiBJIEYgWSAgLS0tICBVbnRhYmlmeSBzMSBpbnRvIHMyLCBhc3N1bWluZyB0YWJzIGV2ZXJ5IDgg c3BhY2UgKi8KKworaW50Cit1bnRhYmlmeShzMSxzMixtYXgpIGNoYXIgKiBzMSwgKiBzMjsgaW50 IG1heDsgeworICAgIGludCBpLCBqLCBrLCB4LCB6OworICAgIHggPSBzdHJsZW4oczEpOworICAg IGZvciAoaSA9IDAsIGsgPSAwOyBrIDwgeDsgaysrKSB7CisJaWYgKHMxW2tdICE9ICdcdCcpIHsK KwkgICAgaWYgKGkgPj0gbWF4LTEpIHsKKwkJczJbbWF4LTFdID0gJ1wwJzsKKwkJcmV0dXJuKC0x KTsKKwkgICAgfQorCSAgICBzMltpKytdID0gczFba107CisJICAgIGNvbnRpbnVlOworCX0KKwl6 ID0gOCAtIGklODsKKwlpZiAoeiA9PSAwKSB6ID0gODsKKwlmb3IgKGogPSAwOyBqIDwgeiAmJiBp IDwgbWF4OyBqKyspCisJICBzMltpKytdID0gJyAnOworICAgIH0KKyAgICBzMltpXSA9ICdcMCc7 CisgICAgcmV0dXJuKDApOworfQorCisKKy8qICBNIEEgSyBFIEwgSSBTIFQgIC0tLSAgQnJlYWtz IHt7czF9e3MyfS4ue3NufX0gaW50byBhbiBhcnJheSBvZiBzdHJpbmdzICovCisvKgorICBDYWxs IHdpdGg6CisgICAgcyAgICA9IHBvaW50ZXIgdG8gc3RyaW5nIHRvIGJyZWFrIHVwLgorICAgIGxp c3QgPSBhcnJheSBvZiBzdHJpbmcgcG9pbnRlcnMuCisgICAgbGVuICA9IG51bWJlciBvZiBlbGVt ZW50cyBpbiBhcnJheS4KKyAgTk9URTogVGhlIGFycmF5IG11c3QgYmUgcHJlaW5pdGlhbGl6ZWQg dG8gYWxsIE5VTEwgcG9pbnRlcnMuCisgIElmIGFueSBhcnJheSBlbGVtZW50IGlzIG5vdCBOVUxM LCBpdCBpcyBhc3N1bWVkIHRvIGhhdmUgYmVlbiBtYWxsb2MnZAorICBhbmQgaXMgdGhlcmVmb3Jl IGZyZWVkLiAgRG8gTk9UIGNhbGwgdGhpcyBmdW5jdGlvbiB3aXRoIGFuIHVuaW5pdGlhbGl6ZWQK KyAgYXJyYXksIG9yIHdpdGggYW4gYXJyYXkgdGhhdCBoYXMgaGFkIGFueSBzdGF0aWMgZWxlbWVu dHMgYXNzaWduZWQgdG8gaXQuCisqLworVk9JRAorbWFrZWxpc3QocyxsaXN0LGxlbikgY2hhciAq IHM7IGNoYXIgKmxpc3RbXTsgaW50IGxlbjsgeworICAgIGludCBpLCBuLCBxLCBiYyA9IDA7Cisg ICAgY2hhciAqcCA9IE5VTEwsICpzMiA9IE5VTEw7CisgICAgZGVidWcoRjExMCwibWFrZWxpc3Qg cyIscywwKTsKKyAgICBpZiAoIXMpIHsJCQkJLyogQ2hlY2sgZm9yIG51bGwgb3IgZW1wdHkgc3Ry aW5nICovCisJbGlzdFswXSA9IE5VTEw7CisJcmV0dXJuOworICAgIH0KKyAgICBuID0gc3RybGVu KHMpOworICAgIGlmIChuID09IDApIHsKKwlsaXN0WzBdID0gTlVMTDsKKwlyZXR1cm47CisgICAg fQorICAgIGlmICgoczIgPSAoY2hhciAqKW1hbGxvYyhuKzEpKSkgewkvKiBTYWZlIGNvcHkgZm9y IHBva2luZyAqLworCXN0cmNweShzMixzKTsJCQkvKiAobm8gbmVlZCBmb3IgY2tzdHJuY3B5IGhl cmUpICovCisJcyA9IHMyOworICAgIH0KKyAgICBzID0gYnJzdHJpcChzKTsJCQkvKiBTdHJpcCBi cmFjZXMgKi8KKyAgICBuID0gc3RybGVuKHMpOwkJCS8qIEdldCBsZW5ndGggKi8KKyAgICBpZiAo KnMgIT0gJ3snKSB7CQkJLyogT3V0ZXIgYnJhY2VzIG9ubHkgKi8KKwlpZiAoKHAgPSAoY2hhciAq KW1hbGxvYyhuKzEpKSkgeyAvKiBTbyBqdXN0IG9uZSBwYXR0ZXJuICovCisJICAgIHN0cmNweShw LHMpOwkJLyogKG5vIG5lZWQgZm9yIGNrc3RybmNweSBoZXJlKSAqLworCSAgICBpZiAobGlzdFsw XSkKKwkgICAgICBmcmVlKGxpc3RbMF0pOworCSAgICBsaXN0WzBdID0gcDsKKwl9CisJaWYgKHMy KSBmcmVlKHMyKTsKKwlyZXR1cm47CisgICAgfQorICAgIHEgPSAwOwkJCQkvKiBJbm5lciBvbmVz IHRvbyAqLworICAgIGkgPSAwOwkJCQkvKiBzbyBhIGxpc3Qgb2YgcGF0dGVybnMuICovCisgICAg biA9IDA7CisgICAgd2hpbGUgKCpzICYmIGkgPCBsZW4pIHsKKwlpZiAoKnMgPT0gQ01EUSkgewkJ LyogUXVvdGUuLi4gKi8KKwkgICAgcSA9IDE7CisJICAgIHMrKzsKKwkgICAgbisrOworCSAgICBj b250aW51ZTsKKwl9CisJaWYgKCpzID09ICd7JyAmJiAhcSkgewkJLyogT3BlbmluZyBicmFjZSAq LworCSAgICBpZiAoYmMrKyA9PSAwKSB7CQkvKiBCZWdpbm5pbmcgb2YgYSBncm91cCAqLworCQlw ID0gKytzOworCQluID0gMDsKKwkgICAgfSBlbHNlIHsJCQkvKiBJdCdzIGEgYnJhY2UgaW5zaWRl IHRoZSBncm91cCAqLworCQluKys7CisJCXMrKzsKKwkgICAgfQorCSAgICBjb250aW51ZTsKKwl9 IGVsc2UgaWYgKCpzID09ICd9JyAmJiAhcSkgewkvKiBDbG9zaW5nIGJyYWNlICovCisJICAgIGlm ICgtLWJjID09IDApIHsJCS8qIEVuZCBvZiBhIGdyb3VwICovCisJCSpzKysgPSBOVUw7CisJCWRl YnVnKEYxMTEsIm1ha2VsaXN0IGVsZW1lbnQiLHAsaSk7CisJCWlmIChsaXN0W2ldKQorCQkgIGZy ZWUobGlzdFtpXSk7CisJCWlmICgobGlzdFtpXSA9IChjaGFyICopbWFsbG9jKG4rMSkpKSB7CisJ CSAgICBja3N0cm5jcHkobGlzdFtpXSxwLG4rMSk7IC8qIE5vdGU6IG4rMSAqLworCQkgICAgaSsr OworCQl9CisJCXdoaWxlICgqcyA9PSBTUCkgcysrOworCQlwID0gczsKKwkJbiA9IDA7CisJCWNv bnRpbnVlOworCSAgICB9IGVsc2UgewkJCS8qIFdpdGhpbiBhIGdyb3VwICovCisJCW4rKzsKKwkJ cysrOworCSAgICB9CisJfSBlbHNlIHsJCQkvKiBSZWd1bGFyIGNoYXJhY3RlciAqLworCSAgICBx ID0gMDsKKwkgICAgcysrOworCSAgICBuKys7CisJfQorICAgIH0KKyAgICBpZiAoKnAgJiYgaSA8 IGxlbikgewkJLyogTGFzdCBvbmUgKi8KKwlpZiAobGlzdFtpXSkKKwkgIGZyZWUobGlzdFtpXSk7 CisJaWYgKChsaXN0W2ldID0gKGNoYXIgKiltYWxsb2MobisxKSkpIHsKKwkgICAgY2tzdHJuY3B5 KGxpc3RbaV0scCxuKzEpOworCSAgICBkZWJ1ZyhGMTExLCJtYWtlbGlzdCBsYXN0IGVsZW1lbnQi LHAsaSk7CisJfQorICAgIH0KKyAgICBpKys7CQkJCS8qIENsZWFyIG91dCB0aGUgcmVzdCBvZiB0 aGUgbGlzdCAqLworICAgIGZvciAoIDsgaSA8IGxlbjsgaSsrKSB7CisJaWYgKGxpc3RbaV0pCisJ ICBmcmVlIChsaXN0W2ldKTsKKwlsaXN0W2ldID0gTlVMTDsKKyAgICB9CisgICAgaWYgKHMyKSBm cmVlKHMyKTsKK30KKworLyoKKyAgIE0gQSBLIEUgUyBUIFIgIC0tICBDcmVhdGVzIGEgZHluYW1p Y2FsbHkgYWxsb2NhdGVkIHN0cmluZy4KKworICAgTWFrZXMgYSBuZXcgY29weSBvZiBzdHJpbmcg cyBhbmQgc2V0cyBwb2ludGVyIHAgdG8gaXRzIGFkZHJlc3MuCisgICBIYW5kbGVzIGRlZ2VuZXJh dGUgY2FzZXMsIGxpa2Ugd2hlbiBidWZmZXJzIG92ZXJsYXAgb3IgYXJlIHRoZSBzYW1lLAorICAg b25lIG9yIGJvdGggYXJndW1lbnRzIGFyZSBOVUxMLCBldGMuCisKKyAgIFRoZSBzb3VyY2Ugc3Ry aW5nIGlzIGFzc3VtZWQgdG8gYmUgTlVMLXRlcm1pbmF0ZWQuICBUaGVyZWZvcmUgaXQgY2FuIG5v dAorICAgYmUgYSBVQ1MtMiBzdHJpbmcgb3IgYXJiaXRyYXJ5IGJpbmFyeSBkYXRhLgorCisgICBU aGUgdGFyZ2V0IHBvaW50ZXIgbXVzdCBiZSBlaXRoZXIgTlVMTCBvciBlbHNlIGEgcG9pbnRlciB0 byBhIHByZXZpb3VzbHkKKyAgIG1hbGxvYydlZCBidWZmZXIuICBJZiBub3QsIGV4cGVjdCBhIGNv cmUgZHVtcCBvciBzZWdtZW50YXRpb24gZmF1bHQuCisKKyAgIE5vdGU6IFRoZSBjYWxsZXIgY2Fu IHRlbGwgd2hldGhlciB0aGlzIHJvdXRpbmUgZmFpbGVkIGFzIGZvbGxvd3M6CisKKyAgICAgbWFs bG9jKCZwLHEpOworICAgICBpZiAocSAmICFwKSB7IG1ha2VzdHIoKSBmYWlsZWQgfTsKKworICAg UmVhbGx5IHRoaXMgcm91dGluZSBzaG91bGQgaGF2ZSByZXR1cm5lZCBhIGxlbmd0aCwgYnV0IHNp bmNlIGl0IGRvZXNuJ3QKKyAgIHdlIHNldCB0aGUgZ2xvYmFsIHZhcmlhYmxlIG1ha2VzdHJsZW4g dG8gdGhlIGxlbmd0aCBvZiB0aGUgcmVzdWx0IHN0cmluZy4KKyovCitpbnQgbWFrZXN0cmxlbiA9 IDA7CisKK1ZPSUQKKyNpZmRlZiBDS19BTlNJQworbWFrZXN0cihjaGFyICoqcCwgY29uc3QgY2hh ciAqcykKKyNlbHNlCittYWtlc3RyKHAscykgY2hhciAqKnAsICpzOworI2VuZGlmCisvKiBtYWtl c3RyICovIHsKKyAgICBpbnQgeCA9IDA7CisgICAgY2hhciAqcSA9IE5VTEw7CisjaWZkZWYgQ0tf QU5TSUMKKyAgICByZWdpc3RlciBjb25zdCBjaGFyICogczI7CisjZWxzZQorICAgIHJlZ2lzdGVy IGNoYXIgKiBzMjsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworICAgIHJlZ2lzdGVyIGNoYXIgKiBx MjsKKworICAgIGlmICgqcCA9PSBzKQkJCS8qIFRoZSB0d28gcG9pbnRlcnMgYXJlIHRoZSBzYW1l LiAqLworICAgICAgcmV0dXJuOwkJCQkvKiBEb24ndCBkbyBhbnl0aGluZy4gKi8KKworICAgIGlm ICghcykgewkJCQkvKiBOZXcgZGVmaW5pdGlvbiBpcyBudWxsPyAqLworCWlmICgqcCkJCQkJLyog RnJlZSBvbGQgc3RvcmFnZS4gKi8KKwkgIGZyZWUoKnApOworCSpwID0gTlVMTDsJCQkvKiBSZXR1 cm4gbnVsbCBwb2ludGVyLiAqLworCW1ha2VzdHJsZW4gPSAwOworCXJldHVybjsKKyAgICB9Cisg ICAgczIgPSBzOwkJCQkvKiBNYXliZSBuZXcgc3RyaW5nIHdpbGwgZml0ICovCisKKyNpZmRlZiBD T01NRU5UCisvKgorICBUaGlzIGlzIGEgZmFpcmx5IGJpZyB3aW4sIGFsbG93aW5nIHVzIHRvIHNr aXAgdGhlIG1hbGxvYygpIGFuZCBmcmVlIGlmIHRoZQorICBkZXN0aW5hdGlvbiBzdHJpbmcgYWxy ZWFkeSBleGlzdHMgYW5kIGlzIG5vdCBzaG9ydGVyIHRoYW4gdGhlIHNvdXJjZSBzdHJpbmcuCisg IEJ1dCBpdCBkb2Vzbid0IGFsbG93IGZvciBwb3NzaWJsZSBvdmVybGFwIG9mIHNvdXJjZSBhbmQg ZGVzdGluYXRpb24uCisqLworICAgIGlmICgqcCkgewkJCQkvKiBpbnRvIG9sZCBzdG9yYWdlLi4u ICovCisJY2hhciAqIHAyID0gKnA7CisJY2hhciBjOworCXdoaWxlIChjID0gKnAyKSB7CisJICAg IGlmICghKCpwMisrID0gKnMyKyspKQorCSAgICAgIGJyZWFrOworCSAgICB4Kys7CisJfQorCW1h a2VzdHJsZW4gPSB4OworCWlmIChjKSByZXR1cm47CisgICAgfQorI2VuZGlmIC8qIENPTU1FTlQg Ki8KKworLyogRGlkbid0IGZpdCAqLworCisgICAgeCA9IDA7CisgICAgd2hpbGUgKCpzMisrKSB4 Kys7CQkJLyogR2V0IChyZXN0IG9mKSBsZW5ndGggb2Ygcy4gICovCisKKyAgICBpZiAoeCA+PSAw KSB7CQkJLyogR2V0IGxlbmd0aCwgZXZlbiBvZiBlbXB0eSBzdHJpbmcuICovCisJcSA9IG1hbGxv Yyh4KzEpOwkJLyogR2V0IGFuZCBwb2ludCB0byB0ZW1wIHN0b3JhZ2UuICovCisJaWYgKHEpIHsK KwkgICAgbWFrZXN0cmxlbiA9IHg7CQkvKiBSZW1lbWJlciBsZW5ndGggZm9yIHN0YXRzICovCisJ ICAgIHMyID0gczsJCQkvKiBQb2ludCBiYWNrIHRvIGJlZ2lubmluZyBvZiBzb3VyY2UgKi8KKwkg ICAgcTIgPSBxOwkJCS8qIENvcHkgZGVzdCBwb2ludGVyIHRvIGluY3JlbWVudC4uLiAqLworCSAg ICB3aGlsZSAoKCpxMisrID0gKnMyKyspKSA7CS8qIEluc3RlYWQgb2YgY2FsbGluZyBzdHJjcHko KS4gKi8KKy8qCisgIE5vdGU6IEhQIGZsZXhlbGludCBzYXlzIHRoYXQgdGhlIGFib3ZlIGxvb3Ag Y2FuIHJlc3VsdCBpbiBjcmVhdGlvbiAoKyspIGFuZAorICBhY2Nlc3MgKCopIG9mIG91dC1vZi1i b3VuZHMgcG9pbnRlcnMuICBJIHJlYWxseSBkb24ndCBzZWUgaXQuCisqLworCX0KKyNpZmRlZiBE RUJVRworCWVsc2UgewkJCQkvKiBUaGlzIHdvdWxkIGJlIGEgcmVhbGx5IGJhZCBlcnJvciAqLwor CSAgICBjaGFyIHRtcFsyNF07CQkvKiBTbyBnZXQgYSBnb29kIHJlY29yZCBvZiBpdC4gKi8KKwkg ICAgaWYgKHggPiAyMykgeworCQlja3N0cm5jcHkodG1wLHMsMjApOworCQlzdHJjcHkodG1wKzIw LCIuLi4iKTsKKwkJdG1wWzIzXSA9IE5VTDsKKwkgICAgfSBlbHNlIHsKKwkJc3RyY3B5KHRtcCxz KTsJCS8qIFdlIGFscmVhZHkgY2hlY2tlZCB0aGUgbGVuZ3RoICovCisJICAgIH0KKwkgICAgZGVi dWcoRjExMCwiTUFLRVNUUiBNQUxMT0MgRkFJTFVSRSAiLHRtcCwwKTsKKwl9CisjZW5kaWYgLyog REVCVUcgKi8KKyAgICB9IGVsc2UKKyAgICAgIHEgPSBOVUxMOwkJCQkvKiBMZW5ndGggb2Ygc3Ry aW5nIGlzIHplcm8gKi8KKworICAgIGlmICgqcCkJCQkJLyogTm93IGZyZWUgdGhlIG9yaWdpbmFs IHN0b3JhZ2UuICovCisgICAgICBmcmVlKCpwKTsKKyAgICAqcCA9IHE7Cit9CisKKy8qICBYIE0g QSBLIEUgUyBUIFIgIC0tICBOb24tZGVzdHJ1Y3RpdmUgbWFrZXN0cigpIGlmIHMgaXMgTlVMTC4g ICovCisKK1ZPSUQKKyNpZmRlZiBDS19BTlNJQworeG1ha2VzdHIoY2hhciAqKnAsIGNvbnN0IGNo YXIgKnMpCisjZWxzZQoreG1ha2VzdHIocCxzKSBjaGFyICoqcCwgKnM7CisjZW5kaWYKKy8qIHht YWtlc3RyICovIHsKKyAgICBpZiAocykgbWFrZXN0cihwLHMpOworfQorCisjaWZuZGVmIFVTRV9N RU1DUFkKKy8qIEMgSyBNIEUgTSBDIFAgWSAgLS0gIFBvcnRhYmxlIChidXQgc2xvdykgbWVtY3B5 KCkgKi8KKworLyogQ29waWVzIG4gYnl0ZXMgZnJvbSBzIHRvIHAsIGFsbG93aW5nIGZvciBvdmVy bGFwLiAqLworLyogRm9yIHVzZSB3aGVuIHJlYWwgbWVtY3B5KCkgbm90IGF2YWlsYWJsZS4gKi8K KworVk9JRAorY2ttZW1jcHkocCxzLG4pIGNoYXIgKnAsICpzOyBpbnQgbjsgeworICAgIGNoYXIg KiBxID0gTlVMTDsKKyAgICByZWdpc3RlciBpbnQgaTsKKyAgICBpbnQgeDsKKworICAgIGlmICgh cyB8fCAhcCB8fCBuIDw9IDAgfHwgcCA9PSBzKQkvKiBWZXJpZnkgYXJncyAqLworICAgICAgcmV0 dXJuOworICAgIHggPSBwIC0gczsJCQkJLyogQ2hlY2sgZm9yIG92ZXJsYXAgKi8KKyAgICBpZiAo eCA8IDApCisgICAgICB4ID0gMCAtIHg7CisgICAgaWYgKHggPCBuKSB7CQkJLyogVGhleSBvdmVy bGFwICovCisJcSA9IHA7CisJaWYgKCEocCA9IChjaGFyICopbWFsbG9jKG4pKSkJLyogU28gdXNl IGEgdGVtcG9yYXJ5IGJ1ZmZlciAqLworCSAgcmV0dXJuOworICAgIH0KKyAgICBmb3IgKGkgPSAw OyBpIDwgbjsgaSsrKQkJLyogQ29weSBuIGJ5dGVzICovCisgICAgICBwW2ldID0gc1tpXTsKKyAg ICBpZiAocSkgewkJCQkvKiBJZiB3ZSB1c2VkIGEgdGVtcG9yYXJ5IGJ1ZmZlciAqLworCWZvciAo aSA9IDA7IGkgPCBuOyBpKyspCQkvKiBjb3B5IGZyb20gaXQgdG8gZGVzdGluYXRpb24gKi8KKwkg IHFbaV0gPSBwW2ldOworCWlmIChwKSBmcmVlKHApOwkJCS8qIGFuZCBmcmVlIHRoZSB0ZW1wb3Jh cnkgYnVmZmVyICovCisgICAgfQorfQorI2VuZGlmIC8qIFVTRV9NRU1DUFkgKi8KKworCisvKiAg QyBLIFMgVCBSIEMgTSBQICAtLSAgU3RyaW5nIGNvbXBhcmlzb24gd2l0aCBjYXNlLW1hdHRlcnMg c2VsZWN0aW9uICovCisvKgorICBDYWxsIHdpdGggcG9pbnRlcnMgdG8gdGhlIHR3byBzdHJpbmdz LCBzMSBhbmQgczIsIGEgbGVuZ3RoLCBuLAorICBhbmQgYyA9PSAwIGZvciBjYXNlbGVzcyBjb21w YXJpc29uLCBub256ZXJvIGZvciBjYXNlIG1hdHRlcnMuCisgIENhbGwgd2l0aCBuID09IC0xIHRv IGNvbXBhcmUgd2l0aG91dCBhIGxlbmd0aCBsaW1pdC4KKyAgQ29tcGFyZXMgdXAgdG8gbiBjaGFy YWN0ZXJzIG9mIHRoZSB0d28gc3RyaW5ncyBhbmQgcmV0dXJuczoKKyAgICAxIGlmIHMxID4gczIK KyAgICAwIGlmIHMxID0gczIKKyAgIC0xIGlmIHMxIDwgczIKKyAgTm90ZTogY2FzZSBoYW5kbGlu ZyBpcyBvbmx5IGFzIGdvb2QgYXMgaXN1cHBlcigpIGFuZCB0b2xvd2VyKCkuCisqLworaW50Citj a3N0cmNtcChzMSxzMixuLGMpIGNoYXIgKnMxLCAqczI7IHJlZ2lzdGVyIGludCBuLCBjOyB7Cisg ICAgcmVnaXN0ZXIgQ0hBUiB0MSwgdDI7CisgICAgaWYgKG4gPT0gMCkgcmV0dXJuKDApOworICAg IGlmICghczEpIHMxID0gIiI7CQkJLyogV2F0Y2ggb3V0IGZvciBudWxsIHBvaW50ZXJzLiAqLwor ICAgIGlmICghczIpIHMyID0gIiI7CisgICAgaWYgKCEqczEpIHJldHVybigqczIgPyAtMSA6IDAp OworICAgIGlmICghKnMyKSByZXR1cm4oMSk7CisgICAgd2hpbGUgKG4tLSkgeworCXQxID0gKENI QVIpICpzMSsrOwkJLyogR2V0IG5leHQgY2hhcmFjdGVyIGZyb20gZWFjaC4gKi8KKwl0MiA9IChD SEFSKSAqczIrKzsKKwlpZiAoIXQxKSByZXR1cm4odDIgPyAtMSA6IDApOworCWlmICghdDIpIHJl dHVybigxKTsKKwlpZiAoIWMpIHsJCQkvKiBJZiBjYXNlIGRvZXNuJ3QgbWF0dGVyICovCisJICAg IGlmIChpc3VwcGVyKHQxKSkgdDEgPSB0b2xvd2VyKHQxKTsgLyogQ29udmVydCBjYXNlLiAqLwor CSAgICBpZiAoaXN1cHBlcih0MikpIHQyID0gdG9sb3dlcih0Mik7CisJfQorCWlmICh0MSA8IHQy KSByZXR1cm4oLTEpOwkvKiBzMSA8IHMyICovCisJaWYgKHQxID4gdDIpIHJldHVybigxKTsJCS8q IHMxID4gczIgKi8KKyAgICB9CisgICAgcmV0dXJuKDApOwkJCQkvKiBUaGV5J3JlIGVxdWFsICov Cit9CisKKy8qICBDIEsgUyBUIFIgUCBSIEUgIC0tICBDYXNlbGVzcyBzdHJpbmcgcHJlZml4IGNv bXBhcmlzb24gICovCisKKy8qIFJldHVybnMgcG9zaXRpb24gb2YgdGhlIGZpcnN0IGNoYXIgaW4g dGhlIDIgc3RyaW5ncyB0aGF0IGRvZXNuJ3QgbWF0Y2ggKi8KKworaW50Citja3N0cnByZShzMSxz MikgY2hhciAqczEsICpzMjsgeworICAgIENIQVIgdDEsIHQyOworICAgIGludCBuID0gMDsKKyAg ICBpZiAoIXMxKSBzMSA9ICIiOworICAgIGlmICghczIpIHMyID0gIiI7CisgICAgd2hpbGUgKDEp IHsKKwl0MSA9IChDSEFSKSAqczErKzsKKwl0MiA9IChDSEFSKSAqczIrKzsKKwlpZiAoIXQxIHx8 ICF0MikgcmV0dXJuKG4pOworCWlmIChpc3VwcGVyKHQxKSkgdDEgPSB0b2xvd2VyKHQxKTsKKwlp ZiAoaXN1cHBlcih0MikpIHQyID0gdG9sb3dlcih0Mik7CisJaWYgKHQxICE9IHQyKQorCSAgcmV0 dXJuKG4pOworCW4rKzsKKyAgICB9Cit9CisKKyNkZWZpbmUgR0xPQkJJTkcKKworLyogIEMgSyBN IEEgVCBDIEggIC0tICBNYXRjaCBhIHN0cmluZyBhZ2FpbnN0IGEgcGF0dGVybiAgKi8KKy8qCisg IENhbGwgd2l0aDoKKyAgICBwYXR0ZXJuIHRvIGJlIG1hdGNoZWQuCisgICAgc3RyaW5nIHRvIGxv b2sgZm9yIHRoZSBwYXR0ZXJuIGluLgorICAgIGljYXNlIGlzIDEgaWYgY2FzZS1zZW5zaXRpdmUs IDAgb3RoZXJ3aXNlLgorICAgIG9wdHMgaXMgYSBiaXRtYXNrOgorICAgICAgQml0IDAgKD0xKToK KwkxID0gTWF0Y2ggc3RyaW5ncyBzdGFydGluZyB3aXRoICcuJworCTAgPSBEb24ndCBtYXRjaCB0 aGVtICh1c2VkIHdpdGggVU5JWCBmaWxlbmFtZXMpLgorICAgICAgQml0IDEgKD0yKToKKwkxID0g RmlsZSBnbG9iYmluZyAoZGlyc2VwcyBhcmUgZmVuY2VzKTsKKwkwID0gRGlyc2VwcyBhcmUgbm90 IGZlbmNlcy4KKyAgICAgIEJpdCAyICg9NCk6CisJMSA9IEFsbG93IF4gYW5kICQgYW5jaG9ycyBh dCBiZWdpbm5pbmcgYW5kIGVuZCBvZiBwYXR0ZXJuLgorCTAgPSBEb24ndCBhbGxvdyB0aGVtIChu b3JtYWwgY2FzZSBmb3IgZmlsZW5hbWUgbWF0Y2hpbmcpLgorICAgICAgQml0IDMgKGFuZCBiZXlv bmQpOiBVbmRlZmluZWQuCisgIFdvcmtzIG9ubHkgd2l0aCBOVUwtdGVybWluYXRlZCBzdHJpbmdz LgorICBQYXR0ZXJuIG1heSBjb250YWluIGFueSBudW1iZXIgb2YgPyBhbmQvb3IgKi4KKyAgSWYg Q0tSRUdFWCBpcyBkZWZpbmVkLCBhbHNvIFthYmNdLCBbYS16XSwgYW5kL29yIHtzdHJpbmcsc3Ry aW5nLC4uLn0uCisgIChOb3RlOiBSRUdFWCBpcyBhIG1pc25vbWVyLCBzZWUgYmVsb3cuKQorCisg IFJldHVybnM6CisgICAgMCBpZiBzdHJpbmcgZG9lcyBub3QgbWF0Y2ggcGF0dGVybiwKKyAgICA+ PSAxLCB0aGUgMS1iYXNlZCBwb3NpdGlvbiBpbiB0aGUgc3RyaW5nIHdoZXJlIHRoZSBtYXRjaCB3 YXMgZm91bmQuCisKKyAgVG8gYmUgZG9uZToKKyAgICBGaW5kIGEgd2F5IHRvIGlkZW50aWZ5IHRo ZSBwaWVjZSBvZiB0aGUgc3RyaW5nIHRoYXQgbWF0Y2hlZCB0aGUgcGF0dGVybiwKKyAgICBhcyBp biBTbm9ib2wgIkxJTkUgKFBBVCAuIFJFU1VMVCkiLiAgVGhpcyBpcyBub3cgcGFydGlhbGx5IGRv bmUgYnkKKyAgICBzZXR0aW5nIG1hdGNocG9zIGFuZCBtYXRjaGVuZCAoZXhjZXB0IG1hdGNoZW5k IG5lZWRzIHNvbWUgdHVuaW5nKS4gIEJ1dAorICAgIHRoZXNlIGFyZSB1c2VsZXNzIHVubGVzcyBh IGNvcHkgb2YgdGhlIHN0cmluZyBpcyBrZXB0LCBvciBhIGNvcHkgb2YgdGhlCisgICAgbWF0Y2hp bmcgcGFydCBpcyBtYWRlLiAgQnV0IHRoYXQgd291bGQgYmUgdG9vIGNvc3RseSBpbiBwZXJmb3Jt YW5jZSAtLQorICAgIHRoaXMgcm91dGluZSBoYXMgdG8gYmUgZmFzdCBiZWNhdXNlIGl0J3MgdXNl ZCBmb3Igd2lsZGNhcmQgZXhwYW5zaW9uLgorCisgIE5vdGU6CisgICAgUGF0dGVybnMgYXJlIG5v dCB0aGUgc2FtZSBhcyByZWd1bGFyIGV4cHJlc3Npb25zLCBpbiB3aGljaCAnKicgbWVhbnMKKyAg ICAwIG9yIG1vcmUgcmVwZXRpdGlvbnMgb2YgdGhlIHByZWNlZGluZyBpdGVtLiAgRm9yIGV4YW1w bGUgImEqYiIgYXMgYQorICAgIHBhdHRlcm4gbWF0Y2hlcyBhbnkgc3RyaW5nIHRoYXQgc3RhcnRz IHdpdGggJ2EnIGFuZCBlbmRzIHdpdGggJ2InOyBhcyBhCisgICAgcmVndWxhciBleHByZXNzaW9u IGl0IG1hdGNoZXMgYW55IHN0cmluZyBvZiB6ZXJvIG9yIG1vcmUgYSdzIGZvbGxvd2VkIGJ5Cisg ICAgb25lIGIuICBSZWd1bGFyIGV4cHJlc3Npb25zIGFyZSBlc3BlY2lhbGx5IHVzZWZ1bCBpbiBt YXRjaGluZyBzdHJpbmdzIG9mCisgICAgKHNheSkgZGlnaXRzLCBvciBsZXR0ZXJzLCBlLmcuICJb MC05XSoiIG1hdGNoZXMgYW55IHN0cmluZyBvZiBkaWdpdHMuCisgICAgU28gZmFyLCBLZXJtaXQg ZG9lc24ndCBkbyB0aGlzLgorKi8KK3N0YXRpYyBjaGFyICogbXlwYXQgPSBOVUxMOwkJLyogRm9y IHJld3JpdGluZyBwYXR0ZXJuICovCitzdGF0aWMgaW50IG1hdGNocG9zID0gMDsKK2ludCBtYXRj aGVuZCA9IDA7CitzdGF0aWMgaW50IG1hdGNoZGVwdGggPSAwOworc3RhdGljIGludCBzdHJpbmdw b3MgPSAwOworc3RhdGljIGNoYXIgKiBvc3RyaW5nID0gTlVMTDsKKworI2RlZmluZSBNQVRDSFJF VFVSTih4LHkpIHsgcmM9eTsgd2hlcmU9eDsgZ290byB4Y2ttYXRjaDsgfQorc3RhdGljIGNoYXIg KiBsYXN0cGF0ID0gTlVMTDsKKworc3RhdGljIGludCB4eGZsYWcgPSAwOwkJCS8qIEdsb2JhbCBi YWlsb3V0IGZsYWcgZm9yIGNrbWF0Y2goKSAqLworCitpbnQKK2lzcGF0dGVybihzKSBjaGFyICog czsgeworICAgIGludCBxdW90ZSA9IDAsIHNiZmxhZyA9IDAsIHNiID0gMCwgY2JmbGFnID0gMCwg Y2IgPSAwOworICAgIAorICAgIGNoYXIgYyA9IDA7CisgICAgaWYgKCpzID09ICdeJykgcmV0dXJu KDEpOworICAgIHdoaWxlICgoYyA9ICpzKyspKSB7CisJaWYgKHF1b3RlKSB7CisJICAgIHF1b3Rl ID0gMDsKKwkgICAgY29udGludWU7CisJfQorCWlmIChjID09ICdcXCcpIHsKKwkgICAgcXVvdGUg PSAxOworCSAgICBjb250aW51ZTsKKwl9CisJaWYgKGMgPT0gJyonKSByZXR1cm4oMSk7CisJaWYg KGMgPT0gJz8nKSByZXR1cm4oMSk7CisJLyogVW5xdW90ZWQgYnJhY2tldHMgb3IgYnJhY2VzIG11 c3QgbWF0Y2ggKi8KKwlpZiAoYyA9PSAnWycpIHsgc2JmbGFnKys7IHNiKys7IGNvbnRpbnVlOyB9 CisJaWYgKGMgPT0gJ10nKSB7IHNiLS07IGNvbnRpbnVlOyB9CisJaWYgKGMgPT0gJ3snKSB7IGNi ZmxhZysrOyBjYisrOyBjb250aW51ZTsgfQorCWlmIChjID09ICd9JykgeyBjYi0tOyBjb250aW51 ZTsgfQorCWlmICghKnMgJiYgYyA9PSAnJCcpIHJldHVybigxKTsKKyAgICB9CisgICAgcmV0dXJu KHNiZmxhZyB8fCBjYmZsYWcpOworfQorCitpbnQKK2NrbWF0Y2gocGF0dGVybiwgc3RyaW5nLCBp Y2FzZSwgb3B0cykgY2hhciAqcGF0dGVybiwqc3RyaW5nOyBpbnQgaWNhc2UsIG9wdHM7IHsKKyAg ICBpbnQgcSA9IDAsIGkgPSAwLCBrID0gLTEsIHgsIGZsYWcgPSAwOworICAgIGludCByYyA9IDA7 CQkJCS8qIFJldHVybiBjb2RlICovCisgICAgaW50IGhhdmVzdGFyID0gMDsKKyAgICBpbnQgd2hl cmUgPSAtMTsKKyAgICBDSEFSIGNwOwkJCQkvKiBDdXJyZW50IGNoYXJhY3RlciBmcm9tIHBhdHRl cm4gKi8KKyAgICBDSEFSIGNzOwkJCQkvKiBDdXJyZW50IGNoYXJhY3RlciBmcm9tIHN0cmluZyAq LworICAgIGNoYXIgKiBwYXRzdGFydDsJCQkvKiBTdGFydCBvZiBwYXR0ZXJuICovCisgICAgaW50 IHBsZW4sIGRvdCwgZ2xvYmJpbmcsIHhzdGFyID0gMDsKKyAgICBpbnQgYnJvbmx5ID0gMDsJCQkv KiBXaG9sZSBwYXR0ZXJuIGlzIHthLGIsYywuLi59ICovCisKKyAgICBkZWJ1ZyhGMTExLCJDS01B VENIIEVOVFJZIHBhdCBvcHQiLHBhdHRlcm4sb3B0cyk7CisgICAgZGVidWcoRjExMSwiQ0tNQVRD SCBFTlRSWSBzdHIgZGVwIixzdHJpbmcsbWF0Y2hkZXB0aCk7CisgICAgLyogZGVidWcoRjEwMSwi Q0tNQVRDSCBFTlRSWSBpY2FzZSIsIiIsaWNhc2UpOyAqLworCisgICAgZ2xvYmJpbmcgPSBvcHRz ICYgMjsKKworICAgIGlmICghc3RyaW5nKSBzdHJpbmcgPSAiIjsKKyAgICBpZiAoIXBhdHRlcm4p IHBhdHRlcm4gPSAiIjsKKworICAgIGlmICghKnBhdHRlcm4pIHsJCQkvKiBFbXB0eSBwYXR0ZXJu IG1hdGNoZXMgYW55dGhpbmcgKi8KKwltYXRjaGRlcHRoKys7CQkJLyogKGl0IHdhc24ndCBpbmNy ZW1lbnRlZCB5ZXQpICovCisJTUFUQ0hSRVRVUk4oMCwxKTsKKyAgICB9IGVsc2UgaWYgKCEqc3Ry aW5nKSB7CisJTUFUQ0hSRVRVUk4oMCwwKTsKKyAgICB9CisgICAgcGF0c3RhcnQgPSBwYXR0ZXJu OwkJCS8qIFJlbWVtYmVyIGJlZ2lubmluZyBvZiBwYXR0ZXJuICovCisKKyAgICBpZiAobWF0Y2hk ZXB0aCA9PSAwKSB7CQkvKiBUb3AtbGV2ZWwgY2FsbD8gKi8KKwl4eGZsYWcgPSAwOworCXN0cmlu Z3BvcyA9IDA7CQkJLyogUmVzZXQgaW5kaWNlcyBldGMuICovCisJbWF0Y2hwb3MgPSAwOworCW1h dGNoZW5kID0gMDsKKwlvc3RyaW5nID0gc3RyaW5nOworCWxhc3RwYXQgPSBwYXR0ZXJuOworCWlm ICgqcGF0dGVybiA9PSAneycpCQkvKiBFbnRpcmUgcGF0dGVybiBpcyB7YSxiLmN9ICovCisJICBi cm9ubHkgPSAxOwkJCS8qIE1heWJlICovCisJZG90ID0gKG9wdHMgJiAxKSB8fAkJLyogTWF0Y2gg bGVhZGluZyBkb3QgKGlmIGZpbGUpICovCisJICAgICgob3B0cyAmIDIpID09IDApIHx8CS8qIGFs d2F5cyBpZiBub3QgZmlsZSAqLworCSAgICAocGF0dGVyblswXSA9PSAnLicpOwkvKiBvciBpZiBw YXR0ZXJuIHN0YXJ0cyB3aXRoICcuJyAqLworCisJcGxlbiA9IHN0cmxlbihwYXR0ZXJuKTsJCS8q IExlbmd0aCBvZiBwYXR0ZXJuICovCisvKiBUaGlzIHdvdWxkIGJlIHVzZWQgaW4gY2FsY3VsYXRp bmcgbGVuZ3RoIG9mIG1hdGNoaW5nIHNlZ21lbnQgKi8KKwlpZiAocGxlbiA+IDApCQkJLyogVXNl cidzIHBhdHRlcm4gZW5kcyB3aXRoICcqJyAqLworCSAgaWYgKHBhdHRlcm5bcGxlbiAtIDFdID09 ICcqJykKKwkgICAgeHN0YXIgPSAxOworCWlmIChwYXR0ZXJuWzBdID09ICcqJykgewkvKiBVc2Vy J3MgcGF0dGVybiBzdGFydHMgd2l0aCAnKicgKi8KKwkgICAgbWF0Y2hwb3MgPSAxOworCSAgICBk ZWJ1ZyhGMTExLCJDS01BVENIIDEiLHN0cmluZywgbWF0Y2hwb3MpOworCX0KKwlpZiAob3B0cyAm IDQpIHsJCQkvKiBeLi4kIGFsbG93ZWQgKHRvcCBsZXZlbCBvbmx5KSAqLworCSAgICAvKiBSZXdy aXRlIHBhdHRlcm4gdG8gYWNjb3VudCBmb3IgXi4uJCBhbmNob3JpbmcuLi4gKi8KKworCSAgICBp ZiAobXlwYXQpIGZyZWUobXlwYXQpOwkvKiBHZXQgc3BhY2UgZm9yICIqcGF0dGVybioiICovCisJ ICAgIG15cGF0ID0gKGNoYXIgKiltYWxsb2MocGxlbiArIDQpOworCSAgICBpZiAobXlwYXQpIHsJ CS8qIEdvdCBzcGFjZT8gKi8KKwkJY2hhciAqIHMgPSBwYXR0ZXJuLCAqIHAgPSBteXBhdDsgLyog U2V0IHdvcmtpbmcgcG9pbnRlcnMgKi8KKwkJaWYgKCpzID09ICdeJykgewkvKiBGaXJzdCBzb3Vy Y2UgY2hhciBpcyBeICovCisJCSAgICBzKys7CQkvKiBzbyBza2lwIHBhc3QgaXQgKi8KKwkJfSBl bHNlIGlmICgqcyAhPSAnKicpIHsJLyogb3RoZXJ3aXNlICovCisJCSAgICAqcCsrID0gJyonOwkJ LyogcHJlcGVuZCAnKicgdG8gcGF0dGVybiAqLworCQl9CisJCXdoaWxlICgqcykgewkJLyogQ29w eSByZXN0IG9mIHBhdHRlcm4gKi8KKwkJICAgIGlmICghKihzKzEpKSB7CS8qIEZpbmFsIHBhdHRl cm4gY2hhcmFjdGVyPyAqLworCQkJaWYgKCpzICE9ICckJykgeyAvKiBJZiBpdCdzIG5vdCAnJCcg Ki8KKwkJCSAgICAqcCsrID0gKnM7CS8qIENvcHkgaXQgaW50byB0aGUgcGF0dGVybiAqLworCQkJ ICAgIGlmICgqcysrICE9ICcqJykgLyogQW5kIGlmIGl0J3MgYWxzbyBub3QgJyonICovCisJCQkg ICAgICAqcCsrID0gJyonOyAvKiBhcHBlbmQgJyonLiAqLworCQkJfQorCQkJYnJlYWs7CQkvKiBE b25lICovCisJCSAgICB9IGVsc2UJCS8qIE5vdCBmaW5hbCBjaGFyYWN0ZXIgKi8KKwkJICAgICAg KnArKyA9ICpzKys7CS8qIEp1c3QgY29weSBpdCAqLworCQl9CisJCSpwID0gTlVMOwkJLyogVGVy bWluYXRlIHRoZSBuZXcgcGF0dGVybiAqLworCQlwYXR0ZXJuID0gbXlwYXQ7CS8qIE1ha2UgdGhl IHN3aXRjaCAqLworCSAgICB9CisJICAgIGRlYnVnKEYxMTAsIkNLTUFUQ0ggSU5JVCBwYXQiLHBh dHRlcm4sMCk7CisJfQorICAgIH0KKyAgICBtYXRjaGRlcHRoKys7CQkJLyogTm93IGluY3JlbWVu dCBjYWxsIGRlcHRoICovCisKKyNpZmRlZiBVTklYCisgICAgaWYgKCFkb3QpIHsJCQkJLyogRm9y IFVOSVggZmlsZSBnbG9iYmluZyAqLworCWlmICgqc3RyaW5nID09ICcuJyAmJiAqcGF0dGVybiAh PSAnLicgJiYgIW1hdGNoZG90KSB7CisJICAgIGlmICgKKyNpZmRlZiBDS1JFR0VYCisJCSpwYXR0 ZXJuICE9ICd7JyAmJiAqcGF0dGVybiAhPSAnWycKKyNlbHNlCisJCTEKKyNlbmRpZiAvKiBDS1JF R0VYICovCisJCSkgeworCQlkZWJ1ZyhGMTEwLCJja21hdGNoIHNraXAiLHN0cmluZywwKTsKKwkJ TUFUQ0hSRVRVUk4oMSwwKTsKKwkgICAgfQorCX0KKyAgICB9CisjZW5kaWYgLyogVU5JWCAqLwor ICAgIHdoaWxlICgxKSB7CisJaysrOworCWNwID0gKnBhdHRlcm47CQkJLyogQ2hhcmFjdGVyIGZy b20gcGF0dGVybiAqLworCWNzID0gKnN0cmluZzsJCQkvKiBDaGFyYWN0ZXIgZnJvbSBzdHJpbmcg Ki8KKworI2lmZGVmIENPTU1FTlQKKwlkZWJ1ZyhGMDAwLCJDS01BVENIIHBhdCBjcCIscGF0dGVy bixjcCk7CisJZGVidWcoRjAwMCwiQ0tNQVRDSCBzdHIgY3MiLHN0cmluZyxjcyk7CisjZW5kaWYg LyogQ09NTUVOVCAqLworCisJaWYgKCFjcykgewkJCS8qIEVuZCBvZiBzdHJpbmcgLSBkb25lLiAq LworCSAgICB4ID0gKCFjcCB8fCAoY3AgPT0gJyonICYmICEqKHBhdHRlcm4rMSkpKSA/IDEgOiAw OworCSAgICBpZiAoeCkgeworCQlpZiAoIW1hdGNocG9zKSB7CisJCSAgICBtYXRjaHBvcyA9IHN0 cmluZ3BvczsKKwkJICAgIGRlYnVnKEYxMTEsIkNLTUFUQ0ggQSIsc3RyaW5nLCBtYXRjaHBvcyk7 CisJCX0KKwkJbWF0Y2hlbmQgPSBzdHJpbmdwb3M7CisJCU1BVENIUkVUVVJOKDIsbWF0Y2hwb3Mp OworCSAgICB9CisJICAgIGRlYnVnKEYxMTEsIkNLTUFUQ0ggWkVSTyBkIixzdHJpbmcsIG1hdGNo cG9zKTsKKwkgICAgbWF0Y2hwb3MgPSAwOworCSAgICBNQVRDSFJFVFVSTigxNixtYXRjaHBvcyk7 CisJfQorICAgICAgICBpZiAoIWljYXNlKSB7CQkJLyogSWYgaWdub3JpbmcgY2FzZSAqLworCSAg ICBpZiAoaXN1cHBlcihjcCkpCQkvKiBjb252ZXJ0IGJvdGggdG8gbG93ZXJjYXNlLiAqLworCSAg ICAgIGNwID0gdG9sb3dlcihjcCk7CisJICAgIGlmIChpc3VwcGVyKGNzKSkKKwkgICAgICBjcyA9 IHRvbG93ZXIoY3MpOworICAgICAgICB9CisJaWYgKHEpIHsJCQkvKiBUaGlzIGNoYXJhY3RlciB3 YXMgcXVvdGVkICovCisJICAgIGRlYnVnKEYwMDAsIkNLTUFUQ0ggUVVPVEVEIixwYXR0ZXJuLGNw KTsKKwkgICAgcSA9IDA7CQkJLyogVHVybiBvZmYgcXVvdGUgZmxhZyAqLworCisJICAgIGlmIChj cyA9PSBjcCkgewkJLyogQ29tcGFyZSBkaXJlY3RseSAqLworCQlpZiAoIW1hdGNocG9zKSB7CS8q IE1hdGNoZXMgKi8KKwkJICAgIG1hdGNocG9zID0gc3RyaW5ncG9zOworCQkgICAgZGVidWcoRjEx MSwiQ0tNQVRDSCBcXCBuZXcgbWF0Y2giLHN0cmluZywgbWF0Y2hwb3MpOworCQl9CisJCXBhdHRl cm4rKzsKKwkgICAgfSBlbHNlIHsJCQkvKiBEb2Vzbid0IG1hdGNoICovCisJCXBhdHRlcm4gPSBs YXN0cGF0OwkvKiBCYWNrIHVwIHRoZSBwYXR0ZXJuICovCisJCW1hdGNocG9zID0gMDsKKwkJZGVi dWcoRjExMSwiQ0tNQVRDSCBcXCBubyBtYXRjaCIscGF0dGVybiwgbWF0Y2hwb3MpOworCSAgICB9 CisJICAgIHN0cmluZysrOworCSAgICBzdHJpbmdwb3MrKzsKKwkgICAgY29udGludWU7CisJfQor CWlmIChjcCA9PSBDTURRICYmICFxKSB7CQkvKiBRdW90ZSBpbiBwYXR0ZXJuICovCisJICAgIGRl YnVnKEYwMDAsIkNLTUFUQ0ggUVVPVEUiLHBhdHRlcm4sY3ApOworCSAgICBxID0gMTsJCQkvKiBT ZXQgZmxhZyAqLworCSAgICBwYXR0ZXJuKys7CQkJLyogQWR2YW5jZSB0byBuZXh0IHBhdHRlcm4g Y2hhcmFjdGVyICovCisJICAgIGNvbnRpbnVlOwkJCS8qIGFuZCBjb250aW51ZS4gKi8KKwl9CisJ aWYgKGNzICYmIGNwID09ICc/JykgewkJLyogJz8nIG1hdGNoZXMgYW55IGNoYXIgKi8KKwkgICAg aWYgKCFtYXRjaHBvcykgeworCQltYXRjaHBvcyA9IHN0cmluZ3BvczsKKwkJZGVidWcoRjExMSwi Q0tNQVRDSCBEIixzdHJpbmcsIG1hdGNocG9zKTsKKwkgICAgfQorCSAgICBkZWJ1ZyhGMTEwLCJD S01BVENIID8gcGF0IixwYXR0ZXJuLDApOworCSAgICBkZWJ1ZyhGMTEwLCJDS01BVENIID8gc3Ry IixzdHJpbmcsMCk7CisJICAgIHBhdHRlcm4rKzsKKwkgICAgc3RyaW5nKys7CisJICAgIHN0cmlu Z3BvcysrOworCSAgICBjb250aW51ZTsKKyNpZmRlZiBDS1JFR0VYCisJfSBlbHNlIGlmIChjcCA9 PSAnWycpIHsJCS8qIEhhdmUgYnJhY2tldCAqLworCSAgICBpbnQgcSA9IDA7CQkJLyogTXkgb3du IHByaXZhdGUgcSAqLworCSAgICBjaGFyICogcHNhdmUgPSBOVUxMOwkvKiBhbmQgYmFja3VwIHBv aW50ZXIgKi8KKwkgICAgQ0hBUiBjbGlzdFsyNTZdOwkJLyogQ2hhcmFjdGVyIGxpc3QgZnJvbSBi cmFja2V0cyAqLworCSAgICBDSEFSIGMsIGMxLCBjMjsKKworCSAgICBmb3IgKGkgPSAwOyBpIDwg MjU2OyBpKyspCS8qIG1lbXNldCgpIGV0YyBub3QgcG9ydGFibGUgKi8KKwkgICAgICBjbGlzdFtp XSA9IE5VTDsKKwkgICAgcHNhdmUgPSArK3BhdHRlcm47CQkvKiBXaGVyZSBwYXR0ZXJuIHN0YXJ0 cyAqLworCSAgICBkZWJ1ZyhGMTExLCJDS01BVENIIFtdICIscGF0dGVybi0xLCBtYXRjaHBvcyk7 CisJICAgIGZvciAoZmxhZyA9IDA7ICFmbGFnOyBwYXR0ZXJuKyspIHsgLyogTG9vcCB0aHJ1IHBh dHRlcm4gKi8KKwkJYyA9IChDSEFSKSpwYXR0ZXJuOwkvKiBDdXJyZW50IGNoYXIgKi8KKwkJZGVi dWcoRjAwMCwiPj4+IHBhdHRlcm4gY2hhciIsIiIsYyk7CisJCWlmIChxKSB7CQkvKiBRdW90ZSB3 aXRoaW4gYnJhY2tldHMgKi8KKwkJICAgIHEgPSAwOworCQkgICAgY2xpc3RbY10gPSAxOworCQkg ICAgY29udGludWU7CisJCX0KKwkJaWYgKCFpY2FzZSkJCS8qIENhc2UgY29udmVyc2lvbiAqLwor CQkgIGlmIChpc3VwcGVyKGMpKQorCQkgICAgYyA9IHRvbG93ZXIoYyk7CisJCXN3aXRjaCAoYykg ewkJLyogSGFuZGxlIHVucXVvdGVkIGNoYXJhY3RlciAqLworCQkgIGNhc2UgTlVMOgkJLyogRW5k IG9mIHN0cmluZyAqLworCQkgICAgTUFUQ0hSRVRVUk4oNCwwKTsJLyogTm8gbWF0Y2hpbmcgJ10n IHNvIGZhaWwgKi8KKwkJICBjYXNlIENNRFE6CQkvKiBOZXh0IGNoYXIgaXMgcXVvdGVkICovCisJ CSAgICBxID0gMTsJCS8qIFNldCBmbGFnICovCisJCSAgICBjb250aW51ZTsJCS8qIGFuZCBjb250 aW51ZS4gKi8KKwkJICBjYXNlICctJzoJCS8qIEEgcmFuZ2UgaXMgc3BlY2lmaWVkICovCisJCSAg ICBjMSA9IChwYXR0ZXJuID4gcHNhdmUpID8gKENIQVIpKihwYXR0ZXJuLTEpIDogTlVMOworCQkg ICAgYzIgPSAoQ0hBUikqKHBhdHRlcm4rMSk7IC8qIElHTk9SRSBPVVQtT0YtQk9VTkRTIFdBUk5J TkcgKi8KKwkJICAgIGlmIChjMiA9PSAnXScpIGMyID0gTlVMOyAvKiAoaXQgY2FuJ3QgaGFwcGVu KSAqLworCQkgICAgaWYgKGMxID09IE5VTCkgYzEgPSBjMjsKKwkJICAgIGZvciAoYyA9IGMxOyBj IDw9IGMyOyBjKyspIHsKKwkJCWNsaXN0W2NdID0gMTsKKwkJCWlmICghaWNhc2UpIHsKKwkJCSAg ICBpZiAoaXNsb3dlcihjKSkgeworCQkJCWNsaXN0W3RvdXBwZXIoYyldID0gMTsKKwkJCSAgICB9 IGVsc2UgaWYgKGlzdXBwZXIoYykpIHsKKwkJCQljbGlzdFt0b2xvd2VyKGMpXSA9IDE7CisJCQkg ICAgfQorCQkJfQorCQkgICAgfQorCQkgICAgY29udGludWU7CisJCSAgY2FzZSAnXSc6CQkvKiBF bmQgb2YgYnJhY2tldGVkIHNlcXVlbmNlICovCisJCSAgICBmbGFnID0gMTsJCS8qIERvbmUgd2l0 aCBGT1IgbG9vcCAqLworCQkgICAgYnJlYWs7CQkvKiBDb21wYXJlIHdoYXQgd2UgaGF2ZSAqLwor CQkgIGRlZmF1bHQ6CQkvKiBKdXN0IGEgY2hhciAqLworCQkgICAgY2xpc3RbY10gPSAxOwkvKiBS ZWNvcmQgaXQgKi8KKwkJICAgIGlmICghaWNhc2UpIHsKKwkJCWlmIChpc2xvd2VyKGMpKSB7CisJ CQkgICAgY2xpc3RbdG91cHBlcihjKV0gPSAxOworCQkJfSBlbHNlIGlmIChpc3VwcGVyKGMpKSB7 CisJCQkgICAgY2xpc3RbdG9sb3dlcihjKV0gPSAxOworCQkJfQorCQkgICAgfQorCQkgICAgY29u dGludWU7CisJCX0KKwkgICAgfQorCSAgICBkZWJ1ZyhGMDAwLCI+Pj4gY3MiLCIiLGNzKTsKKwkg ICAgZGVidWcoRjEwMSwiPj4+IGNsaXN0W2NzXSIsIiIsY2xpc3RbY3NdKTsKKwkgICAgZGVidWco RjAwMCwiPj4+IHN0cmluZyIsc3RyaW5nLCpzdHJpbmcpOworCisJICAgIGlmICghY2xpc3RbKHVu c2lnbmVkKWNzXSkgewkvKiBObyBtYXRjaD8gKi8KKwkJaWYgKCEqc3RyaW5nKSB7CQkvKiBUaGlz IGNsYXVzZSAxNiBKdW4gMjAwNSAqLworCQkgICAgTUFUQ0hSRVRVUk4oNSwwKTsJLyogTm9wZSwg ZG9uZS4gKi8KKwkJfQorLyoKKyAgV2UgbmVlZCB0byBmYWlsIGhlcmUgaWYgdGhlIFtjbGlzdF0g aXMgbm90IGFsbG93ZWQgdG8gZmxvYXQuCisgIFRoZSBbY2xpc3RdIGlzIG5vdCBhbGxvd2VkIHRv IGZsb2F0IGlmIGl0IGlzIG5vdCBwcmVjZWRlZAorICBieSBhbiBhc3RlcmlzaywgcmlnaHQ/ICAz MCBEZWMgMjAwNS4KKyovCisJCWlmICghaGF2ZXN0YXIpIHsKKwkJICAgIE1BVENIUkVUVVJOKDUw MCwwKTsKKwkJfQorCQlzdHJpbmcrKzsJCS8qIEZyb20gaGVyZSB0byBlbmQgYWRkZWQgMjAwNS82 LzE1ICovCisJCXN0cmluZ3BvcysrOworCQlwYXR0ZXJuID0gbGFzdHBhdDsJLyogQmFjayB1cCBw YXR0ZXJuICovCisJCWsgPSBja21hdGNoKHBhdHRlcm4sc3RyaW5nLGljYXNlLG9wdHMpOworCQlp ZiAoeHhmbGFnKSBNQVRDSFJFVFVSTigwLDApOworCQlpZiAoIW1hdGNocG9zICYmIGsgPiAwKQor CQkgIG1hdGNocG9zID0gc3RyaW5ncG9zOworCQlNQVRDSFJFVFVSTig1LCAoKnN0cmluZykgPyBt YXRjaHBvcyA6IDApOworCSAgICB9CisJICAgIGlmICghbWF0Y2hwb3MpIHsKKwkJbWF0Y2hwb3Mg PSBzdHJpbmdwb3M7CisJCWRlYnVnKEYxMTEsIkNLTUFUQ0ggW10gbWF0Y2giLHN0cmluZywgbWF0 Y2hwb3MpOworCSAgICB9CisJICAgIHN0cmluZysrOwkJCS8qIFllcywgYWR2YW5jZSBzdHJpbmcg cG9pbnRlciAqLworCSAgICBzdHJpbmdwb3MrKzsKKwkgICAgY29udGludWU7CQkJLyogYW5kIGdv IG9uLiAqLworCX0gZWxzZSBpZiAoY3AgPT0gJ3snKSB7CQkvKiBCcmFjZXMgZW5jbG9zaW5nIGxp c3Qgb2Ygc3RyaW5ncyAqLworCSAgICBjaGFyICogcCwgKiBzLCAqIHMyLCAqIGJ1ZiA9IE5VTEw7 CisJICAgIGludCBuLCBiYyA9IDA7CisJICAgIGludCBsZW4gPSAwOworCSAgICBkZWJ1ZyhGMTEx LCJDS01BVENIIHt9ICIsc3RyaW5nLCBtYXRjaHBvcyk7CisJICAgIGZvciAocCA9IHBhdHRlcm4r KzsgKnA7IHArKykgeworCQlpZiAoKnAgPT0gJ3snKSBiYysrOworCQlpZiAoKnAgPT0gJ30nKSBi Yy0tOworCQlpZiAoYmMgPCAxKSBicmVhazsKKwkgICAgfQorCSAgICBpZiAoYmMgIT0gMCkgewkJ LyogQnJhY2VzIGRvbid0IG1hdGNoICovCisJCU1BVENIUkVUVVJOKDYsMCk7CS8qIEZhaWwgKi8K KwkgICAgfSBlbHNlIHsJCQkvKiBCcmFjZXMgZG8gbWF0Y2ggKi8KKwkJaW50IHEgPSAwLCBkb25l ID0gMDsKKwkJbGVuID0gKnAgPyBzdHJsZW4ocCsxKSA6IDA7IC8qIExlbmd0aCBvZiByZXN0IG9m IHBhdHRlcm4gKi8KKwkJaWYgKGxlbikKKwkJICBicm9ubHkgPSAwOworCQlpZiAoYnJvbmx5ICYm IChtYXRjaGRlcHRoICE9IDEpKQorCQkgIGJyb25seSA9IDA7CisJCW4gPSBwIC0gcGF0dGVybjsJ ICAgIC8qIFNpemUgb2YgbGlzdCBpbiBicmFjZXMgKi8KKwkJaWYgKChidWYgPSAoY2hhciAqKW1h bGxvYyhuKzEpKSkgeyAvKiBDb3B5IHNvIHdlIGNhbiBwb2tlIGl0ICovCisJCSAgICBjaGFyICog dHAgPSBOVUxMOworCQkgICAgaW50IGssIHNvZmFyOworCQkgICAgY2tzdHJuY3B5KGJ1ZixwYXR0 ZXJuLG4rMSk7CisJCSAgICBzb2ZhciA9IHN0cmluZyAtIG9zdHJpbmcgLSBtYXRjaHBvcyArIDE7 CisJCSAgICBpZiAoc29mYXIgPCAwKSBzb2ZhciA9IDA7CisJCSAgICBkZWJ1ZyhGMTExLCJDS01B VENIIC4uIHN0cmluZyIsc3RyaW5nLHNvZmFyKTsKKwkJICAgIGRlYnVnKEYxMTEsIkNLTUFUQ0gg Li4gb3N0cmluZyIsb3N0cmluZyxzb2Zhcik7CisJCSAgICBuID0gMDsKKwkJICAgIGZvciAocyA9 IHMyID0gYnVmOyAxOyBzKyspIHsgLyogTG9vcCB0aHJvdWdoIHNlZ21lbnRzICovCisJCQluKys7 CisJCQlpZiAocSkgewkvKiBUaGlzIGNoYXIgaXMgcXVvdGVkICovCisJCQkgICAgcSA9IDA7CisJ CQkgICAgaWYgKCEqcykKKwkJCSAgICAgIGRvbmUgPSAxOworCQkJICAgIGNvbnRpbnVlOworCQkJ fQorCQkJaWYgKCpzID09IENNRFEgJiYgIXEpIHsJLyogUXVvdGUgbmV4dCBjaGFyICovCisJCQkg ICAgcSA9IDE7CisJCQkgICAgY29udGludWU7CisJCQl9CisJCQlpZiAoISpzIHx8ICpzID09ICcs JykgewkvKiBFbmQgb2YgdGhpcyBzZWdtZW50ICovCisJCQkgICAgaW50IHRwbGVuID0gMDsKKwkJ CSAgICBpZiAoISpzKQkvKiBJZiBlbmQgb2YgYnVmZmVyICovCisJCQkgICAgICBkb25lID0gMTsJ LyogdGhlbiBlbmQgb2YgbGFzdCBzZWdtZW50ICovCisJCQkgICAgKnMgPSBOVUw7CS8qIE92ZXJ3 cml0ZSBjb21tYSB3aXRoIE5VTCAqLworCQkJICAgIGRlYnVnKEYxMTEsIkNLTUFUQ0gge30gc2Vn bWVudCIsczIsZG9uZSk7CisJCQkgICAgdHBsZW4gPSBuICsgbGVuICsgc29mYXIgKyAyOworCQkJ ICAgIGlmICghKnMyKSB7CS8qIEVtcHR5IHNlZ21lbnQsIG5vIGFkdmFuY2VtZW50ICovCisJCQkJ ayA9IDA7CisJCQkgICAgfSBlbHNlIGlmICgodHAgPSAoY2hhciAqKW1hbGxvYyh0cGxlbikpKSB7 CisJCQkJaW50IHNhdnBvcywgb3B0czI7CisJCQkJY2hhciAqIHBwOworCQkJCXBwID0gbWF0Y2hw b3MgPiAwID8KKwkJCQkgICAgJm9zdHJpbmdbbWF0Y2hwb3MtMV0gOgorCQkJCSAgICBvc3RyaW5n OworCQkJCWlmIChicm9ubHkpIHsKKwkJCQkgICAgaWYgKG1hdGNocG9zID4gMCkKKwkJCQkgICAg ICBja3N0cm5jcHkodHAscHAsc29mYXIrMSk7CisJCQkJICAgIGVsc2UKKwkJCQkgICAgICBja3N0 cm5jcHkodHAscHAsc29mYXIpOworCQkJCX0gZWxzZSB7CisJCQkJICAgIHRwWzBdID0gJyonOwor CQkJCSAgICB0cFsxXSA9IE5VTDsKKwkJCQkgICAgaWYgKG1hdGNocG9zID4gMCkKKwkJCQkgICAg ICBja3N0cm5jcHkoJnRwWzFdLHBwLHNvZmFyKzEpOworCQkJCSAgICBlbHNlCisJCQkJICAgICAg Y2tzdHJuY3B5KCZ0cFsxXSxwcCxzb2Zhcik7CisJCQkJfQorCQkJCWNrc3RybmNhdCh0cCxzMix0 cGxlbik7IC8qIEN1cnJlbnQgc2VnbWVudCAqLworCQkJCWNrc3RybmNhdCh0cCxwKzEsdHBsZW4p OyAvKiByZXN0IG9mIHBhdHRlcm4gKi8KKworCQkJCWRlYnVnKEYxMDEsIkNLTUFUQ0gge30gbWF0 Y2hwb3MiLCIiLG1hdGNocG9zKTsKKwkJCQlzYXZwb3MgPSBtYXRjaHBvczsKKwkJCQltYXRjaHBv cyA9IDA7CisjaWZkZWYgREVCVUcKKwkJCQlpZiAoZGVibG9nKSB7CisJCQkJICAgIGRlYnVnKEYx MTEsIkNLTUFUQ0gge30gdHAiLHRwLG1hdGNocG9zKTsKKwkJCQkgICAgZGVidWcoRjExMSwiQ0tN QVRDSCB7fSBzdHJpbmciLAorCQkJCQkgIHN0cmluZyxtYXRjaHBvcyk7CisJCQkJICAgIGRlYnVn KEYxMTEsIkNLTUFUQ0gge30gb3N0cmluZyIsCisJCQkJCSAgb3N0cmluZyxzYXZwb3MpOworCQkJ CX0KKyNlbmRpZiAvKiBERUJVRyAqLworCQkJCS8qIElmIHNlZ21lbnQgc3RhcnRzIHdpdGggZG90 ICovCisJCQkJLyogdGhlbiBzZXQgbWF0Y2hkb3Qgb3B0aW9uLi4gKi8KKwkJCQlvcHRzMiA9IG9w dHM7CisJCQkJaWYgKCpzMiA9PSAnLicpIG9wdHMyIHw9IDE7CisJCQkJZGVidWcoRjExMSwiQ0tN QVRDSCB7fSByZWN1cnNpbmciLHMyLG9wdHMyKTsKKwkJCQlrID0gY2ttYXRjaCh0cCwKKwkJCQkJ ICAgIChzdHJpbmcgPiBvc3RyaW5nKSA/CisJCQkJCSAgICAmb3N0cmluZ1tzYXZwb3MtMV0gOiBz dHJpbmcsCisJCQkJCSAgICBpY2FzZSxvcHRzMik7CisjaWZkZWYgREVCVUcKKwkJCQlpZiAoZGVi bG9nKSB7CisJCQkJICAgIGRlYnVnKEYxMDEsIkNLTUFUQ0gge30gayIsIiIsayk7CisJCQkJICAg IGRlYnVnKEYxMDEsIkNLTUFUQ0gge30gc2F2cG9zIiwiIixzYXZwb3MpOworCQkJCX0KKyNlbmRp ZiAvKiBERUJVRyAqLworCQkJCWZyZWUodHApOworCQkJCXRwID0gTlVMTDsKKwkJCQlpZiAoeHhm bGFnKSBNQVRDSFJFVFVSTigwLDApOworCQkJCWlmIChrID09IDApIHsKKwkJCQkgICAgbWF0Y2hw b3MgPSBzYXZwb3M7CisJCQkJfQorCQkJCWlmIChrID4gMCkgeyAvKiBJZiBpdCBtYXRjaGVkIHdl J3JlIGRvbmUgKi8KKwkJCQkgICAgTUFUQ0hSRVRVUk4oNyxrKTsKKwkJCQl9CisJCQkgICAgfSBl bHNlIHsJLyogTWFsbG9jIGZhaWx1cmUgKi8KKwkJCQlNQVRDSFJFVFVSTigxNCwwKTsKKwkJCSAg ICB9CisJCQkgICAgaWYgKGspIHsJLyogU3VjY2Vzc2Z1bCBjb21wYXJpc29uICovCisJCQkJaWYg KCFtYXRjaHBvcykgeworCQkJCSAgICBtYXRjaHBvcyA9IHN0cmluZ3BvczsKKwkJCQkgICAgZGVi dWcoRjExMSwiQ0tNQVRDSCB7fSBtYXRjaCIsCisJCQkJCSAgc3RyaW5nLCBtYXRjaHBvcyk7CisJ CQkJfQorCQkJCXN0cmluZyArPSBuLTE7IC8qIEFkdmFuY2UgcG9pbnRlcnMgKi8KKwkJCQlwYXR0 ZXJuID0gcCsxOworCQkJCWJyZWFrOworCQkJICAgIH0KKwkJCSAgICBpZiAoZG9uZSkJLyogSWYg bm8gbW9yZSBzZWdtZW50cyAqLworCQkJICAgICAgYnJlYWs7CS8qIGJyZWFrIG91dCBvZiBzZWdt ZW50IGxvb3AuICovCisJCQkgICAgczIgPSBzKzE7CS8qIE90aGVyd2lzZSwgb24gdG8gbmV4dCBz ZWdtZW50ICovCisJCQkgICAgbiA9IDA7CisJCQl9CisJCSAgICB9CisJCSAgICBmcmVlKGJ1Zik7 CisJCX0KKwkgICAgfQorI2VuZGlmIC8qIENLUkVHRVggKi8KKwl9IGVsc2UgaWYgKGNwID09ICcq JykgewkJLyogUGF0dGVybiBjaGFyIGlzIGFzdGVyaXNrICovCisJICAgIGNoYXIgKiBwc2F2ZTsK KwkgICAgY2hhciAqIHAsICogcyA9IE5VTEw7CS8qIG1lYW5pbmcgbWF0Y2ggYW55dGhpbmcgKi8K KwkgICAgaW50IGssIG4sIHEgPSAwOworCSAgICBoYXZlc3RhcisrOwkJCS8qIFRoZSByZXN0IGNh biBmbG9hdCAqLworCSAgICB3aGlsZSAoKnBhdHRlcm4gPT0gJyonKQkvKiBDb2xsYXBzZSBzdWNj ZXNzaXZlIGFzdGVyaXNrcyAqLworCSAgICAgIHBhdHRlcm4rKzsKKwkgICAgcHNhdmUgPSBwYXR0 ZXJuOwkJLyogRmlyc3Qgbm9uLWFzdGVyaXNrIGFmdGVyIGFzdGVyaXNrICovCisJICAgIGxhc3Rw YXQgPSBwYXR0ZXJuIC0gMTsJLyogRGl0dG8sIGdsb2JhbCAqLworCSAgICBkZWJ1ZyhGMTExLCJD S01BVENIICogIixzdHJpbmcsbWF0Y2hwb3MpOworCSAgICBmb3IgKG4gPSAwLCBwID0gcHNhdmU7 ICpwOyBwKyssbisrKSB7IC8qIEZpbmQgbmV4dCBtZXRhIGNoYXIgKi8KKwkJaWYgKCFxKSB7CisJ CSAgICBpZiAoKnAgPT0gJz8nIHx8ICpwID09ICcqJyB8fCAqcCA9PSBDTURRCisjaWZkZWYgQ0tS RUdFWAorCQkJfHwgKnAgPT0gJ1snIHx8ICpwID09ICd7JworI2VuZGlmIC8qIENLUkVHRVggKi8K KwkJCSkKKwkJICAgICAgYnJlYWs7CisjaWZkZWYgR0xPQkJJTkcKKwkJICAgIGlmIChnbG9iYmlu ZworI2lmZGVmIFVOSVhPUk9TSworCQkJJiYgKnAgPT0gJy8nCisjZWxzZQorI2lmZGVmIFZNUwor CQkJJiYgKCpwID09ICcuJyB8fCAqcCA9PSAnXScgfHwKKwkJCSAgICAqcCA9PSAnPCcgfHwgKnAg PT0gJz4nIHx8CisJCQkgICAgKnAgPT0gJzonIHx8ICpwID09ICc7JykKKyNlbHNlCisjaWZkZWYg ZGF0YWdlbmVyYWwKKwkJCSYmICpwID09ICc6JworI2Vsc2UKKyNpZmRlZiBTVFJBVFVTCisJCQkm JiAqcCA9PSAnPicKKyNlbmRpZiAvKiBTVFJBVFVTICovCisjZW5kaWYgLyogZGF0YWdlbmVyYWwg Ki8KKyNlbmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBVTklYT1JPU0sgKi8KKwkJCSkKKwkJICAg ICAgYnJlYWs7CisjZW5kaWYgLyogR0xPQkJJTkcgKi8KKwkJfQorCSAgICB9CisJICAgIGRlYnVn KEYxMTEsIkNLTUFUQ0ggKiBuIHN0cmluZyIsc3RyaW5nLG4pOworCSAgICBkZWJ1ZyhGMTExLCJD S01BVENIICogbiBwYXR0cm4iLHBhdHRlcm4sbik7CisJICAgIGRlYnVnKEYxMTEsIkNLTUFUQ0gg KiBuIHAiLHAsbik7CisJICAgIGlmIChuID4gMCkgewkJLyogTGl0ZXJhbCBzdHJpbmcgdG8gbWF0 Y2ggICovCisJCXMgPSAoY2hhciAqKW1hbGxvYyhuKzEpOworCQlpZiAocykgeworCQkgICAgY2tz dHJuY3B5KHMscHNhdmUsbisxKTsgLyogQ29weSBjdXogbm8gcG9raW5nIG9yaWdpbmFsICovCisJ CSAgICBpZiAoKnApIHsKKwkJCWsgPSBja2luZGV4KHMsc3RyaW5nLDAsMCxpY2FzZSk7IC8qIDEt YmFzZWQgaW5kZXgoKSAqLworCQkJZGVidWcoRjExMCwiQ0tNQVRDSCAqIEluZGV4KCkgc3RyaW5n IixzdHJpbmcsMCk7CisJCQlkZWJ1ZyhGMTEwLCJDS01BVENIICogSW5kZXgoKSBwYXR0cm4iLHMs MCk7CisJCQlkZWJ1ZyhGMTAxLCJDS01BVENIICogSW5kZXgoKSByZXN1bHQiLCIiLGspOworCQkg ICAgfSBlbHNlIHsJCS8qIFN0cmluZyBpcyByaWdodC1hbmNob3JlZCAqLworCQkJayA9IGNraW5k ZXgocyxzdHJpbmcsLTEsMSxpY2FzZSk7IC8qIHJpbmRleCgpICovCisJCQlkZWJ1ZyhGMTExLCJD S01BVENIICogUmluZGV4KCkiLHN0cmluZyxrKTsKKwkJCWRlYnVnKEYxMTAsIkNLTUFUQ0ggKiBS aW5kZXgoKSBwYXR0cm4iLHMsMCk7CisJCQlkZWJ1ZyhGMTAxLCJDS01BVENIICogUmluZGV4KCkg cmVzdWx0IiwiIixrKTsKKwkJICAgIH0KKwkJICAgIGZyZWUocyk7CisJCSAgICBpZiAoayA8IDEp IHsKKwkJCU1BVENIUkVUVVJOKDgsMCk7CisJCSAgICB9CisJCSAgICBkZWJ1ZyhGMTExLCJDS01B VENIICogc3RyaW5ncG9zIG1hdGNocG9zIiwKKwkJCSAgY2tpdG9hKHN0cmluZ3BvcyksIG1hdGNo cG9zKTsKKwkJICAgIGlmICghbWF0Y2hwb3MpIHsKKwkJCW1hdGNocG9zID0gc3RyaW5nIC0gb3N0 cmluZyArIGs7CisJCQlkZWJ1ZyhGMTExLCJDS01BVENIICogbmV3IG1hdGNoICIsIHN0cmluZywg bWF0Y2hwb3MpOworCQkgICAgfQorCQkgICAgc3RyaW5nICs9IGsgKyBuIC0gMTsKKwkJICAgIHN0 cmluZ3BvcyArPSBrICsgbiAtIDE7CisJCSAgICBwYXR0ZXJuICs9IG47CisJCSAgICBkZWJ1ZyhG MTExLCJDS01BVENIICogbmV3IHN0cmluZyIsIHN0cmluZywgc3RyaW5ncG9zKTsKKwkJICAgIGRl YnVnKEYxMTAsIkNLTUFUQ0ggKiBuZXcgcGF0dHJuIiwgcGF0dGVybiwgMCk7CisJCSAgICBjb250 aW51ZTsKKwkJfQorCSAgICB9IGVsc2UgaWYgKCEqcCkgewkJLyogQXN0ZXJpc2sgYXQgZW5kIG1h dGNoZXMgdGhlIHJlc3QgKi8KKwkJaWYgKCFnbG9iYmluZykgewkvKiAoaWYgbm90IGZpbGVuYW1l IGdsb2JiaW5nKSAqLworCQkgICAgaWYgKCFtYXRjaHBvcykgeworCQkJbWF0Y2hwb3MgPSBzdHJp bmdwb3M7CisJCQlkZWJ1ZyhGMTExLCJDS01BVENIICokICIsc3RyaW5nLCBtYXRjaHBvcyk7CisJ CSAgICB9CisJCSAgICBtYXRjaGVuZCA9IHN0cmluZ3BvczsKKwkJICAgIE1BVENIUkVUVVJOKDks bWF0Y2hwb3MpOworCQl9CisjaWZkZWYgR0xPQkJJTkcKKwkJd2hpbGUgKCpzdHJpbmcpIHsKKwkJ ICAgIGlmIChnbG9iYmluZwkvKiBGaWxlc3BlYyBzbyBkb24ndCBjcm9zcyBmaWVsZHMgKi8KKyNp ZmRlZiBPUzIKKwkJCSYmICpzdHJpbmcgPT0gJy8nIHx8ICpzdHJpbmcgPT0gJ1xcJyB8fAorCQkJ KnN0cmluZyA9PSAnOicKKyNlbHNlCisjaWZkZWYgVU5JWE9ST1NLCisJCQkmJiAqc3RyaW5nID09 ICcvJworI2Vsc2UKKyNpZmRlZiBWTVMKKwkJCSYmICgqc3RyaW5nID09ICcuJyB8fCAqc3RyaW5n ID09ICddJyB8fAorCQkJICAgICpzdHJpbmcgPT0gJzwnIHx8ICpzdHJpbmcgPT0gJz4nIHx8CisJ CQkgICAgKnN0cmluZyA9PSAnOicgfHwgKnN0cmluZyA9PSAnOycpCisjZWxzZQorI2lmZGVmIGRh dGFnZW5lcmFsCisJCQkmJiAqc3RyaW5nID09ICc6JworI2Vsc2UKKyNpZmRlZiBTVFJBVFVTCisJ CQkmJiAqc3RyaW5nID09ICc+JworI2Vsc2UKKwkJCSYmICpzdHJpbmcgPT0gJy8nIC8qIChjYXRj aC1hbGwpICovCisjZW5kaWYgLyogU1RSQVRVUyAqLworI2VuZGlmIC8qIGRhdGFnZW5lcmFsICov CisjZW5kaWYgLyogVk1TICovCisjZW5kaWYgLyogVU5JWE9ST1NLICovCisjZW5kaWYgLyogT1My ICovCisJCQkpIHsKKwkJCW1hdGNoZW5kID0gc3RyaW5ncG9zOworCQkJTUFUQ0hSRVRVUk4oMTAs MCk7CisJCSAgICB9CisJCSAgICBpZiAoIW1hdGNocG9zKSB7CisJCQltYXRjaHBvcyA9IHN0cmlu Z3BvczsKKwkJCWRlYnVnKEYxMTEsIkNLTUFUQ0ggKiQgbWF0Y2giLHN0cmluZywgbWF0Y2hwb3Mp OworCQkgICAgfQorCQkgICAgc3RyaW5nKys7CisJCSAgICBzdHJpbmdwb3MrKzsKKwkJfQorI2Vu ZGlmIC8qIEdMT0JCSU5HICovCisJCWlmICghbWF0Y2hwb3MpIHsKKwkJICAgIG1hdGNocG9zID0g c3RyaW5ncG9zOworCQkgICAgZGVidWcoRjExMSwiQ0tNQVRDSCAqKiBtYXRjaCIsc3RyaW5nLCBt YXRjaHBvcyk7CisJCX0KKwkJbWF0Y2hlbmQgPSBzdHJpbmdwb3M7CisJCU1BVENIUkVUVVJOKDEx LG1hdGNocG9zKTsKKworCSAgICB9IGVsc2UgewkJCS8qIEEgbWV0YSBjaGFyIGZvbGxvd3MgYXN0 ZXJpc2sgKi8KKwkJaWYgKCEqc3RyaW5nKQorCQkgIE1BVENIUkVUVVJOKDE3LCBtYXRjaHBvcyA9 IDApOworI2lmZGVmIENPTU1FTlQKKwkJLyogVGhpcyBpcyBtb3JlIGVsZWdhbnQgYnV0IGl0IGRv ZXNuJ3Qgd29yay4gKi8KKwkJcC0tOworCQlzdHJpbmcrKzsKKwkJc3RyaW5ncG9zKys7CisJCWsg PSBja21hdGNoKHAsc3RyaW5nLGljYXNlLG9wdHMpOworI2Vsc2UKKwkJd2hpbGUgKCpzdHJpbmcg JiYgKChrID0gY2ttYXRjaChwLHN0cmluZyxpY2FzZSxvcHRzKSkgPCAxKSkgeworCQkgICAgaWYg KHh4ZmxhZykgTUFUQ0hSRVRVUk4oMCwwKTsKKwkJICAgIHN0cmluZysrOworCQkgICAgc3RyaW5n cG9zKys7CisJCX0KKwkJaWYgKCEqc3RyaW5nICYmIGsgPCAxKSB7CisvKgorICBEZWZpbml0ZWx5 IG5vIG1hdGNoIHNvIHdlIHNldCBhIGdsb2JhbCBmbGFnIHRvIGluaWJpdCBmdXJ0aGVyIGJhY2tp bmcgdXAKKyAgYW5kIHJldHJ5aW5nIGJ5IHByZXZpb3VzIGluY2FybmF0aW9ucywgc2luY2UgdGhl eSBkb24ndCBzZWUgdGhhdCB0aGUgc3RyaW5nCisgIGFuZC9vciBwYXR0ZXJuLCB3aGljaCBhcmUg b24gdGhlIHN0YWNrLCBoYXZlIGJlZW4gZXhoYXVzdGVkIGF0IHRoaXMgbGV2ZWwuCisqLworCQkg ICAgeHhmbGFnKys7CisJCSAgICBkZWJ1ZyhGMTExLCJDS01BVENIIERFRklOSVRFTFkgTk8gTUFU Q0giLHAsayk7CisJCSAgICBNQVRDSFJFVFVSTig5MSwwKTsKKwkJfQorI2VuZGlmCS8qIENPTU1F TlQgKi8KKwkJZGVidWcoRjExMSwiQ0tNQVRDSCAqPG1ldGE+IGsiLHN0cmluZywgayk7CisJCWlm ICghbWF0Y2hwb3MgJiYgayA+IDApIHsKKwkJICAgIG1hdGNocG9zID0gc3RyaW5ncG9zOworCQkg ICAgZGVidWcoRjExMSwiQ0tNQVRDSCAqPG1ldGE+IG1hdGNocG9zIixzdHJpbmcsIG1hdGNocG9z KTsKKwkJfQorCQlNQVRDSFJFVFVSTigxMiwgKCpzdHJpbmcpID8gbWF0Y2hwb3MgOiAwKTsKKwkg ICAgfQorCX0gZWxzZSBpZiAoY3MgPT0gY3ApIHsKKwkgICAgcGF0dGVybisrOworCSAgICBzdHJp bmcrKzsKKwkgICAgc3RyaW5ncG9zKys7CisJICAgIGlmICghbWF0Y2hwb3MpIHsKKwkJbWF0Y2hw b3MgPSBzdHJpbmdwb3M7CisJCWRlYnVnKEYxMTEsIkNLTUFUQ0ggY3M9Y3AiLHN0cmluZywgbWF0 Y2hwb3MpOworCSAgICB9CisJICAgIGNvbnRpbnVlOworCX0gZWxzZSB7CisJICAgIE1BVENIUkVU VVJOKDEzLDApOworCX0KKyAgICB9CisgIHhja21hdGNoOgorICAgIHsKKyNpZmRlZiBERUJVRwor CWNoYXIgbXNnYnVmWzI1Nl07CisjZW5kaWYgLyogREVCVUcgKi8KKwlpZiAobWF0Y2hkZXB0aCA+ IDApCisJICBtYXRjaGRlcHRoLS07CisJbWF0Y2hwb3MgPSByYzsKKyNpZmRlZiBERUJVRworCWNr bWFreG1zZyhtc2didWYsMjU2LAorCQkgICJDS01BVENIIFJFVFVSTlsiLAorCQkgIGNraXRvYSh3 aGVyZSksCisJCSAgIl0gbWF0Y2hwb3M9IiwKKwkJICBja2l0b2EobWF0Y2hwb3MpLAorCQkgICIg bWF0Y2hkZXB0aD0iLAorCQkgIGNraXRvYShtYXRjaGRlcHRoKSwKKwkJICAiIHBhdD0iLHBhdHRl cm4sCisJCSAgIiBzdHJpbmc9IixzdHJpbmcsTlVMTCxOVUxMCisJCSAgKTsKKwlkZWJ1ZyhGMTEw LG1zZ2J1ZixzdHJpbmcsMCk7CisjZW5kaWYgLyogREVCVUcgKi8KKwlyZXR1cm4ocmMpOworICAg IH0KK30KKworCisjaWZkZWYgQ0tGTE9BVAorLyogIEkgUyBGIEwgTyBBIFQgIC0tIFZlcmlmeSB0 aGF0IGFyZyByZXByZXNlbnRzIGEgZmxvYXRpbmctcG9pbnQgbnVtYmVyICovCisKKy8qCisgIFBv cnRhYmxlIHJlcGxhY2VtZW50IGZvciBhdG9mKCksIHN0cnRvZCgpLCBzY2FuZigpLCBldGMuCisK KyAgQ2FsbCB3aXRoOgorICAgIHMgPSBwb2ludGVyIHRvIHN0cmluZworICAgIGZsYWcgPT0gMCBt ZWFucyBlbnRpcmUgc3RyaW5nIG11c3QgYmUgYSAoZmxvYXRpbmctcG9pbnRpbmcpIG51bWJlci4K KyAgICBmbGFnICE9IDAgbWVhbnMgdG8gdGVybWluYXRlIHNjYW4gb24gZmlyc3QgY2hhcmFjdGVy IHRoYXQgaXMgbm90IGxlZ2FsLgorCisgIFJldHVybnM6CisgICAgMSBpZiByZXN1bHQgaXMgYSBs ZWdhbCBudW1iZXI7CisgICAgMiBpZiByZXN1bHQgaGFzIGEgZnJhY3Rpb25hbCBwYXJ0OworICAg IDAgaWYgbm90IG9yIGlmIHN0cmluZyBlbXB0eS4KKworICBTaWRlIGVmZmVjdDoKKyAgICBTZXRz IGdsb2JhbCBmbG9hdHZhbCB0byBmbG9hdGluZy1wb2ludCB2YWx1ZSBpZiBzdWNjZXNzZnVsLgor CisgIE51bWJlciBuZWVkIG5vdCBjb250YWluIGEgZGVjaW1hbCBwb2ludCAtLSBpbnRlZ2VyIGlz IHN1YmNhc2Ugb2YgZmxvYXQuCisgIFNjaWVudGlmaWMgbm90YXRpb24gbm90IHN1cHBvcnRlZC4K KyovCitDS0ZMT0FUIGZsb2F0dmFsID0gMC4wOwkJCS8qIEZvciByZXR1cm5pbmcgdmFsdWUgKi8K KworaW50Citpc2Zsb2F0KHMsZmxhZykgY2hhciAqczsgaW50IGZsYWc7IHsKKyAgICBpbnQgc3Rh dGUgPSAwOworICAgIGludCBzaWduID0gMDsKKyAgICBjaGFyIGM7CisgICAgQ0tGTE9BVCBkID0g MC4wLCBmID0gMC4wOworCisgICAgaWYgKCFzKSByZXR1cm4oMCk7CisgICAgaWYgKCEqcykgcmV0 dXJuKDApOworCisgICAgd2hpbGUgKGlzc3BhY2UoKnMpKSBzKys7CisKKyAgICBpZiAoKnMgPT0g Jy0nKSB7CQkJLyogSGFuZGxlIG9wdGlvbmFsIHNpZ24gKi8KKwlzaWduID0gMTsKKwlzKys7Cisg ICAgfSBlbHNlIGlmICgqcyA9PSAnKycpCisgICAgICBzKys7CisgICAgd2hpbGUgKChjID0gKnMr KykpIHsJCS8qIEhhbmRsZSBudW1lcmljIHBhcnQgKi8KKwlzd2l0Y2ggKHN0YXRlKSB7CisJICBj YXNlIDA6CQkJLyogTWFudGlzc2EuLi4gKi8KKwkgICAgaWYgKGlzZGlnaXQoYykpIHsKKwkJZiA9 IGYgKiAxMC4wICsgKENLRkxPQVQpKGMgLSAnMCcpOworCQljb250aW51ZTsKKwkgICAgfSBlbHNl IGlmIChjID09ICcuJykgeworCQlzdGF0ZSA9IDE7CisJCWQgPSAxLjA7CisJCWNvbnRpbnVlOwor CSAgICB9CisJICAgIGlmIChmbGFnKQkJCS8qIE5vdCBkaWdpdCBvciBwZXJpb2QgKi8KKwkgICAg ICBnb3RvIGRvbmU7CQkvKiBicmVhayBpZiBmbGFnICE9IDAgKi8KKwkgICAgcmV0dXJuKDApOwkJ CS8qIG90aGVyd2lzZSBmYWlsLiAqLworCSAgY2FzZSAxOgkJCS8qIEZyYWN0aW9uLi4uICovCisJ ICAgIGlmIChpc2RpZ2l0KGMpKSB7CisJCWQgKj0gMTAuMDsKKwkJZiArPSAoQ0tGTE9BVCkoYyAt ICcwJykgLyBkOworCQljb250aW51ZTsKKwkgICAgfQorCSAgZGVmYXVsdDoKKwkgICAgaWYgKGZs YWcpCQkJLyogSWxsZWdhbCBjaGFyYWN0ZXIgKi8KKwkgICAgICBnb3RvIGRvbmU7CQkvKiBCcmVh ayAqLworCSAgICByZXR1cm4oMCk7CQkJLyogb3IgZmFpbCwgZGVwZW5kaW5nIG9uIGZsYWcgKi8K Kwl9CisgICAgfQorICBkb25lOgorICAgIGlmIChzaWduKSBmID0gMC4wIC0gZjsJCS8qIEFwcGx5 IHNpZ24gdG8gcmVzdWx0ICovCisgICAgZmxvYXR2YWwgPSBmOwkJCS8qIFNldCByZXN1bHQgKi8K KyAgICByZXR1cm4oZCA/IDIgOiAxKTsJCQkvKiBTdWNjZWVkICovCit9CisKKy8qCisgIGMgayBy IG8gdSBuIGQgIC0tICBSb3VuZHMgYSBmbG9hdGluZyBwb2ludCBudW1iZXIgb3IgYW4gaW50ZWdl ci4KKworICBmcG51bToKKyAgICBGbG9hdGluZy1wb2ludCBudW1iZXIgdG8gcm91bmQuCisgIHBs YWNlczoKKyAgICBQb3NpdGl2ZS4uLlRvIGhvdyBtYW55IGRlY2ltYWwgcGxhY2VzLgorICAgIFpl cm8uLi4uLi4uUm91bmQgdG8gaW50ZWdlci4KKyAgICBOZWdhdGl2ZS4uLi0xID0gbmVhcmVzdCB0 ZW4sIC0yID0gbmVhcmVzdCAxMDAsIC0zID0gbmVhcmVzdCB0aG91c2FuZCwgZXRjLgorICBvYnVm CisgICAgT3V0cHV0IGJ1ZmZlciBmb3Igc3RyaW5nIHJlc3VsdCBpZiBkZXNpcmVkLgorICBvYnVm bGVuICAgIAorICAgIExlbmd0aCBvZiBvdXRwdXQgYnVmZmVyLgorICBSZXR1cm5zOgorICAgIFJl c3VsdCBhcyBDS0ZMT0FUICh3aGljaCBpcyBub3QgZ29pbmcgdG8gYmUgYXMgZXhhY3QgYXMgdGhl IHN0cmluZyByZXN1bHQpCisgICAgQW5kIHRoZSBleGFjdCByZXN1bHQgaW4gdGhlIHN0cmluZyBv dXRwdXQgYnVmZmVyLCBpZiBvbmUgd2FzIHNwZWNpZmllZC4KKyovCitDS0ZMT0FUCisjaWZkZWYg Q0tfQU5TSUMKK2Nrcm91bmQoQ0tGTE9BVCBmcG51bSwgaW50IHBsYWNlcywgY2hhciAqb2J1Ziwg aW50IG9idWZsZW4pCisjZWxzZQorY2tyb3VuZChmcG51bSxwbGFjZXMsb2J1ZixvYnVmbGVuKQor IENLRkxPQVQgZnBudW07IGludCBwbGFjZXMsIG9idWZsZW47IGNoYXIgKm9idWY7CisjZW5kaWYg LyogQ0tfQU5TSUMgKi8KKy8qIGNrcm91bmQgICovIHsKKyAgICBjaGFyICpzLCAqczIsICpkOwor ICAgIGludCBpLCBwLCBsZW4sIHgsIG4sIGRpZ2l0czsKKyAgICBpbnQgY2FycnkgPSAwOworICAg IGludCBtaW51cyA9IDA7CisgICAgY2hhciBidWZbMjAwXTsKKyAgICBjaGFyICogbnVtYmVyOwor ICAgIENLRkxPQVQgdmFsdWU7CisgICAgZXh0ZXJuIGludCBmcF9kaWdpdHM7CisKKyAgICBzcHJp bnRmKGJ1ZiwiJTIwMC4xMDBmIixmcG51bSk7CS8qIE1ha2Ugc3RyaW5nIHZlcnNpb24gdG8gd29y ayB3aXRoICovCisgICAgbnVtYmVyID0gKGNoYXIgKikgYnVmOwkJLyogTWFrZSBwb2ludGVyIHRv IGl0ICovCisKKyAgICBwID0gcGxhY2VzOwkJCQkvKiBQcmVjaXNpb24gKi8KKyAgICBkID0gKGNo YXIgKikwOwkJCS8qIFBvaW50ZXIgdG8gZGVjaW1hbCBvciBzdHJpbmcgZW5kICovCisKKyAgICBz ID0gbnVtYmVyOwkJCQkvKiBGaXggbnVtYmVyLi4uICovCisgICAgd2hpbGUgKCpzID09ICcgJyB8 fCAqcyA9PSAnXDAxMScpIHMrKzsgLyogU3RyaXAgbGVhZGluZyB3aGl0ZXNwYWNlICovCisgICAg aWYgKCpzID09ICcrJykgcysrOwkJCSAgIC8qIFNraXAgbGVhZGluZyBwbHVzIHNpZ24qLworICAg IG51bWJlciA9IHM7CQkJCSAgIC8qIFN0YXJ0IG9mIG51bWJlciAqLworICAgIGlmICgqcyA9PSAn LScpIHsgbWludXMrKzsgbnVtYmVyKys7IHMrKzsgfSAvKiBSZW1lbWJlciBpZiBuZWdhdGl2ZSAq LworCisgICAgcyA9IG51bWJlcjsJCQkJLyogRG9uJ3QgYWxsb3cgZmFsc2UgcHJlY2lzaW9uICov CisgICAgbiA9IDA7CisgICAgd2hpbGUgKCpzICYmICpzICE9ICcuJykgcysrLCBuKys7ICAgLyog RmluZCBkZWNpbWFsICovCisKKyAgICBpZiAocCArIG4gPiBmcF9kaWdpdHMpCQkvKiBUb28gbWFu eSBkaWdpdHMgKi8KKyAgICAgIHAgPSBmcF9kaWdpdHMgLSBuOwkJLyogRG9uJ3QgYXNrIGZvciBi b2d1cyBwcmVjaXNpb24gKi8KKyAgICBpZiAocCA8IDApIHAgPSAwOwkJCS8qIEJ1dCBkb24ndCBh c2sgZm9yIGxlc3MgdGhhbiB6ZXJvICovCisgICAgaWYgKG4gPiBmcF9kaWdpdHMpCQkJLyogSW50 ZWdlciBwYXJ0IGhhcyB0b28gbWFueSBkaWdpdHMgKi8KKyAgICAgICpzID0gMDsJCQkJLyogYnV0 IHdlIGNhbid0IHRydW5jYXRlIGl0ICovCisgICAgZWxzZQkJCQkvKiBNYWduaXR1ZGUgaXMgT0sg Ki8KKyAgICAgIG51bWJlcltmcF9kaWdpdHMrMV0gPSAwOwkJLyogVHJ1bmNhdGUgZnJhY3Rpb25h bCBwYXJ0LiAqLworCisgICAgbGVuID0gKGludClzdHJsZW4obnVtYmVyKTsJCS8qIExlbmd0aCBv ZiBub24tYm9ndXMgbnVtYmVyICovCisgICAgZCA9IHM7CQkJCS8qIFBvaW50ZXIgdG8gZGVjaW1h bCBwb2ludCAqLworICAgIGlmIChwID4gMCkgewkJCS8qIFJvdW5kaW5nIHRoZSBmcmFjdGlvbmFs IHBhcnQgKi8KKwlpZiAobiArIHAgPCBsZW4pIHsJCS8qIElmIGl0J3Mgbm90IGFscmVhZHkgc2hv cnRlciAqLworCSAgICBpZiAoKnMgPT0gJy4nKSBzKys7CQkvKiBTa2lwIHBhc3QgZGVjaW1hbCAq LworCSAgICBzICs9IHA7CQkJLyogR28gdG8gZGVzaXJlZCBzcG90ICovCisJICAgIGlmICgqcyA+ ICc0JyAmJiAqcyA8PSAnOScpCS8qIENoZWNrIHZhbHVlIG9mIGRpZ2l0ICovCisJICAgICAgY2Fy cnkgPSAxOworCSAgICAqcyA9IDA7CQkJLyogQW5kIGVuZCB0aGUgc3RyaW5nICovIAorCSAgICBz LS07CQkJLyogUG9pbnQgdG8gbGFzdCBkaWdpdCAqLworCX0KKyAgICB9IGVsc2UgaWYgKHAgPT0g MCkgewkJLyogUm91bmRpbmcgdG8gaW50ZWdlciAqLworCWlmICgqcyA9PSAnLicpIHsKKwkgICAg KnMgPSAwOwkJCS8qIGVyYXNlIHRoZSBkZWNpbWFsIHBvaW50ICovCisJICAgIGlmICgqKHMrMSkp IHsJCS8qIGFuZCB0aGVyZSBpcyBhIGZhY3Rpb25hbCBwYXJ0ICovCisJCWlmICgqKHMrMSkgPiAn NCcgJiYgKihzKzEpIDw9ICc5JykgLyogQ2hlY2sgZm9yIGNhcnJ5ICovCisJCSAgY2FycnkgPSAx OworCSAgICB9CisJICAgIHMtLTsJCQkvKiBQb2ludCB0byBsYXN0IGRpZ2l0ICovCisJfQorICAg IH0gZWxzZSB7CQkJCS8qIFJvdW5kaW5nIHRoZSBpbnRlZ2VyIHBhcnQgKi8KKwlpZiAocyArIHAg PiBudW1iZXIpIHsJCS8qIGFzIGluICJ0aGUgbmVhcmVzdCBodW5kcmVkIiAqLworCSAgICBzICs9 IHA7CQkJLyogR28gbGVmdCB0byBkZXNpcmVkIGRpZ2l0ICovCisJICAgICpkID0gMDsJCQkvKiBE aXNjYXJkIGZyYWN0aW9uICovCisJICAgIGNhcnJ5ID0gMDsKKwkgICAgaWYgKCpzID4gJzQnKQkJ LyogQ2hlY2sgZmlyc3QgZGlnaXQgb2YgZnJhY3Rpb24gKi8KKwkgICAgICBjYXJyeSA9IDE7CQkv KiBhbmQgc2V0IGNhcnJ5IGZsYWcgKi8KKwkgICAgczIgPSBzOworCSAgICB3aGlsZSAoczIgPCBk KQkJLyogRmlsbCBpbiB0aGUgcmVzdCB3aXRoIHplcm9zICovCisJICAgICAgKnMyKysgPSAnMCc7 CisJICAgIHMtLTsJCQkvKiBQb2ludCB0byBsYXN0IGRpZ2l0ICovCisJfQorICAgIH0KKyAgICBp ZiAoY2FycnkpIHsJCQkvKiBIYW5kbGUgY2FycnksIGlmIGFueSAqLworICAgICAgICB3aGlsZSAo cyA+PSBudW1iZXIpIHsKKyAgICAgICAgICAgIGlmICgqcyA9PSAnLicpIHsJCS8qIFNraXAgYmFj a3dhcmRzIG92ZXIgZGVjaW1hbCAqLworICAgICAgICAgICAgICAgIHMtLTsKKyAgICAgICAgICAg ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICpzICs9IDE7CQkJLyog QWRkIDEgdG8gY3VycmVudCBkaWdpdCAqLworICAgICAgICAgICAgY2FycnkgPSAwOworICAgICAg ICAgICAgaWYgKCpzIDw9ICc5JykgCQkvKiBJZiByZXN1bHQgaXMgOSBvciBsZXNzICovCisJICAg ICAgYnJlYWs7CQkJLyogd2UncmUgZG9uZSAqLworICAgICAgICAgICAgKnMgPSAnMCc7CQkJLyog T3RoZXJ3aXNlIHB1dCAwICovCisgICAgICAgICAgICBjYXJyeSA9IDE7CQkJLyogY2FycnkgdGhl IDEgKi8KKyAgICAgICAgICAgIHMtLTsJCQkvKiBhbmQgYmFjayB1cCB0byBuZXh0IGRpZ2l0ICov CisJfQorICAgIH0KKyNpZmRlZiBfX2FscGhhCisgICAgc3NjYW5mKG51bWJlciwiJWYiLCZ2YWx1 ZSk7CQkvKiBDb252ZXJ0IGJhY2sgdG8gZmxvYXRpbmcgcG9pbnQgKi8KKyNlbHNlCisgICAgc3Nj YW5mKG51bWJlciwiJWxmIiwmdmFsdWUpOyAgICAgICAgLyogQ29udmVydCBiYWNrIHRvIGZsb2F0 aW5nIHBvaW50ICovCisjZW5kaWYKKyAgICBpZiAob2J1Zikgc3RybmNweShvYnVmLG51bWJlcixv YnVmbGVuKTsgLyogU2V0IHN0cmluZyByZXN1bHQgKi8KKyAgICByZXR1cm4odmFsdWUpOwkJCSAg ICAvKiBSZXR1cm4gZmxvYXRpbmctcG9pbnQgcmVzdWx0ICovCit9CisKKyNlbmRpZiAvKiBDS0ZM T0FUICovCisKKy8qIFNvcnRpbmcgcm91dGluZXMuLi4gKi8KKworLyogUyBIIF8gUyBPIFIgVCAg LS0gIFNoZWxsIHNvcnQgLS0gc29ydHMgc3RyaW5nIGFycmF5IHMgaW4gcGxhY2UuICovCisKKy8q CisgIEhpZ2hseSBkZWZlbnNpdmUgYW5kIHJlbGF0aXZlbHkgcXVpY2suCisgIFVzZXMgc2hlbGwg c29ydCBhbGdvcml0aG0uCisKKyAgQXJnczoKKyAgIHMgPSBwb2ludGVyIHRvIGFycmF5IG9mIHN0 cmluZ3MuCisgICBwID0gcG9pbnRlciB0byBhIHNlY29uZCBhcnJheSB0byBzb3J0IGluIHBhcmFs bGVsIHMsIG9yIE5VTEwgZm9yIG5vbmUuCisgICBuID0gbnVtYmVyIG9mIGVsZW1lbnRzIGluIHMu CisgICBrID0gcG9zaXRpb24gb2Yga2V5LgorICAgciA9IGFzY2VuZGluZyBsZXhpY2FsIG9yZGVy IGlmIHplcm8sIHJldmVyc2UgbGV4aWNhbCBvcmRlciBpZiBub256ZXJvLgorICAgYyA9IDAgZm9y IGNhc2UgaW5kZXBlbmRlbmNlLCAxIGZvciBjYXNlIG1hdHRlcnMsIDIgZm9yIG51bWVyaWMuCisK KyAgSWYgayBpcyBwYXN0IHRoZSByaWdodCBlbmQgb2YgYSBzdHJpbmcsIHRoZSBzdHJpbmcgaXMg Y29uc2lkZXJlZCBlbXB0eQorICBmb3IgY29tcGFyaXNvbiBwdXJwb3Nlcy4KKworICBIaW50Ogor ICAgVG8gc29ydCBhIHBpZWNlIG9mIGFuIGFycmF5LCBjYWxsIHdpdGggcyBwb2ludGluZyB0byB0 aGUgZmlyc3QgZWxlbWVudAorICAgYW5kIG4gdGhlIG51bWJlciBvZiBlbGVtZW50cyB0byBzb3J0 LgorCisgIFJldHVybiB2YWx1ZToKKyAgIE5vbmUuICBBbHdheXMgc3VjY2VlZHMsIHVubGVzcyBh bnkgb2Ygc1swXS4uc1tuLTFdIGFyZSBiYWQgcG9pbnRlcnMsCisgICBpbiB3aGljaCBjYXNlIG1l bW9yeSB2aW9sYXRpb25zIGFyZSBwb3NzaWJsZSwgYnV0IEMgb2ZmZXJzIG5vIGRlZmVuc2UKKyAg IGFnYWluc3QgdGhpcywgc28gbm8gd2F5IHRvIGdyYWNlZnVsbHkgcmV0dXJuIGFuIGVycm9yIGNv ZGUuCisqLworVk9JRAorc2hfc29ydChzLHAsbixrLHIsYykgY2hhciAqKnMsICoqcDsgaW50IG4s IGssIHIsIGM7IHsKKyAgICBpbnQgbSwgaSwgaiwgeDsKKyAgICBjaGFyICp0LCAqdDEsICp0Miwg KnUgPSBOVUxMOworI2lmZGVmIENLRkxPQVQKKyAgICBDS0ZMT0FUIGYxLCBmMjsKKyNlbHNlCisg ICAgbG9uZyBuMSwgbjI7CisjZW5kaWYgLyogQ0tGTE9BVCAqLworCisgICAgaWYgKCFzKSByZXR1 cm47CQkJLyogTm90aGluZyB0byBzb3J0PyAqLworICAgIGlmIChuIDwgMikgcmV0dXJuOwkJCS8q IE5vdCBlbm91Z2ggZWxlbWVudHMgdG8gc29ydD8gKi8KKyAgICBpZiAoayA8IDApIGsgPSAwOwkJ CS8qIEtleSAqLworCisgICAgbSA9IG47CQkJCS8qIEluaXRpYWwgZ3JvdXAgc2l6ZSBpcyB3aG9s ZSBhcnJheSAqLworICAgIHdoaWxlICgxKSB7CisJbSA9IG0gLyAyOwkJCS8qIERpdmlkZSBncm91 cCBzaXplIGluIGhhbGYgKi8KKwlpZiAobSA8IDEpCQkJLyogU21hbGwgYXMgY2FuIGJlLCBzbyBk b25lICovCisJICBicmVhazsKKwlmb3IgKGogPSAwOyBqIDwgbi1tOyBqKyspIHsJLyogU29ydCBl YWNoIGdyb3VwICovCisJICAgIHQgPSB0MiA9IHNbaittXTsJCS8qIENvbXBhcmUgdGhpcyBvbmUu Li4gKi8KKwkgICAgaWYgKCF0KQkJCS8qIEJ1dCBpZiBpdCdzIE5VTEwgKi8KKwkgICAgICB0MiA9 ICIiOwkJCS8qIG1ha2UgaXQgdGhlIGVtcHR5IHN0cmluZyAqLworCSAgICBpZiAocCkJCQkvKiBI YW5kbGUgcGFyYWxsZWwgYXJyYXksIGlmIGFueSAqLworCSAgICAgIHUgPSBwW2orbV07CisJICAg IGlmIChrID4gMCAmJiAqdDIpIHsKKwkJaWYgKChpbnQpc3RybGVuKHQyKSA8IGspIC8qIElmIGtl eSB0b28gYmlnICovCisJCSAgdDIgPSAiIjsJCS8qIG1ha2Uga2V5IHRoZSBlbXB0eSBzdHJpbmcg Ki8KKwkJZWxzZQkJCS8qIEtleSBpcyBpbiBzdHJpbmcgKi8KKwkJICB0MiA9IHQgKyBrOwkJLyog c28gcG9pbnQgdG8ga2V5IHBvc2l0aW9uICovCisJICAgIH0KKwkgICAgZm9yIChpID0gajsgaSA+ PSAwOyBpIC09IG0pIHsgLyogTG9vcCB0aHJ1IGNvbXBhcmFuZHMgc1tpLi5dKi8KKwkJdDEgPSBz W2ldOworCQlpZiAoIXQxKQkJLyogU2FtZSBkZWFsICovCisJCSAgdDEgPSAiIjsKKwkJaWYgKGsg PiAwICYmICp0MSkgeworCQkgICAgaWYgKChpbnQpc3RybGVuKHQxKSA8IGspCisJCSAgICAgIHQx ID0gIiI7CisJCSAgICBlbHNlCisJCSAgICAgIHQxID0gc1tpXStrOworCQl9CisJCWlmIChjID09 IDIpIHsJCS8qIE51bWVyaWMgY29tcGFyaXNvbiAqLworCQkgICAgeCA9IDA7CisjaWZkZWYgQ0tG TE9BVAorCQkgICAgZjIgPSAwLjA7CisJCSAgICBmMSA9IDAuMDsKKwkJICAgIGlmIChpc2Zsb2F0 KHQxLDEpKSB7CisJCQlmMSA9IGZsb2F0dmFsOworCQkJaWYgKGlzZmxvYXQodDIsMSkpCisJCQkg IGYyID0gZmxvYXR2YWw7CisJCQllbHNlCisJCQkgIGYxID0gMC4wOworCQkgICAgfQorCQkgICAg aWYgKGYyIDwgZjEpCisJCSAgICAgIHggPSAxOworCQkgICAgZWxzZQorCQkgICAgICB4ID0gLTE7 CisjZWxzZQorCQkgICAgbjIgPSAwTDsKKwkJICAgIG4xID0gMEw7CisJCSAgICBpZiAocmRpZ2l0 cyh0MSkpIHsKKwkJCW4xID0gYXRvbCh0MSk7CisJCQlpZiAocmRpZ2l0cyh0MikpCisJCQkgIG4y ID0gYXRvbCh0Mik7CisJCQllbHNlCisJCQkgIG4xID0gMEw7CisJCSAgICB9CisJCSAgICBpZiAo bjIgPCBuMSkKKwkJICAgICAgeCA9IDE7CisJCSAgICBlbHNlCisJCSAgICAgIHggPSAtMTsKKyNl bmRpZiAvKiBDS0ZMT0FUICovCisJCX0gZWxzZSB7CisJCSAgICB4ID0gY2tzdHJjbXAodDEsdDIs LTEsYyk7IC8qIENvbXBhcmUgKi8KKwkJfQorCQlpZiAociA9PSAwICYmIHggPCAwKQorCQkgIGJy ZWFrOworCQlpZiAociAhPSAwICYmIHggPiAwKQorCQkgIGJyZWFrOworCQlzW2krbV0gPSBzW2ld OworCQlpZiAocCkgcFtpK21dID0gcFtpXTsKKwkgICAgfQorCSAgICBzW2krbV0gPSB0OworCSAg ICBpZiAocCkgcFtpK21dID0gdTsKKwl9CisgICAgfQorfQorCisKKy8qIEMgSyBSIEEgRCBJIFgg IC0tICBSYWRpeCBjb252ZXJ0ZXIgKi8KKy8qCisgICBDYWxsIHdpdGg6CisgICAgIHM6ICAgYSBu dW1iZXIgaW4gc3RyaW5nIGZvcm1hdC4KKyAgICAgaW46ICBpbnQsIHNwZWNpZnlpbmcgdGhlIHJh ZGl4IG9mIHMsIDItMzYuCisgICAgIG91dDogaW50LCBzcGVjaWZ5aW5nIHRoZSByYWRpeCB0byBj b252ZXJ0IHRvLCAyLTM2LgorICAgUmV0dXJuczoKKyAgICAgTlVMTCBvbiBlcnJvciAoaWxsZWdh bCByYWRpeCwgaWxsZWdhbCBudW1iZXIsIGV0Yy4pLgorICAgICAiLTEiIG9uIG92ZXJmbG93IChu dW1iZXIgdG9vIGJpZyBmb3IgdW5zaWduZWQgbG9uZykuCisgICAgIE90aGVyd2lzZTogUG9pbnRl ciB0byByZXN1bHQuCisqLworY2hhciAqCitja3JhZGl4KHMsaW4sb3V0KSBjaGFyICogczsgaW50 IGluLCBvdXQ7IHsKKyAgICBjaGFyIGMsICpyID0gcnhyZXN1bHQ7CisgICAgaW50IGQsIG1pbnVz ID0gMDsKKyNpZmRlZiBDT01NRU5UCisgICAgdW5zaWduZWQgbG9uZyB6eiA9IDBMOworICAgIGxv bmcgeiA9IDBMOworI2Vsc2UKKyAgICAvKgorICAgICAgVG8gZ2V0IDY0IGJpdHMgb24gMzItYml0 IGhhcmR3YXJlIHdlIHVzZSBvZmZfdCwgYnV0IHRoZXJlCisgICAgICBpcyBubyB1bnNpZ25lZCB2 ZXJzaW9uIG9mIG9mZl90LCBzbyB3ZSBsb3NlIHRoZSBhYmlsaXR5IHRvCisgICAgICBkZXRlY3Qg b3ZlcmZsb3cuCisgICAgKi8KKyAgICBDS19PRkZfVCB6eiA9IChDS19PRkZfVCkwOworICAgIENL X09GRl9UIHogPSAoQ0tfT0ZGX1QpMDsKKyNlbmRpZgkvKiBDT01NRU5UICovCisKKyAgICBpZiAo aW4gPCAyIHx8IGluID4gMzYpCQkvKiBWZXJpZnkgbGVnYWwgaW5wdXQgcmFkaXggKi8KKyAgICAg IHJldHVybihOVUxMKTsKKyAgICBpZiAob3V0IDwgMiB8fCBvdXQgPiAzNikJCS8qIGFuZCBvdXRw dXQgcmFkaXguICovCisgICAgICByZXR1cm4oTlVMTCk7CisgICAgaWYgKCpzID09ICcrJykgewkJ CS8qIEdldCBzaWduIGlmIGFueSAqLworCXMrKzsKKyAgICB9IGVsc2UgaWYgKCpzID09ICctJykg eworCW1pbnVzKys7CisJcysrOworICAgIH0KKyAgICB3aGlsZSAoKnMgPT0gU1AgfHwgKnMgPT0g JzAnKQkvKiBUcmltIGxlYWRpbmcgYmxhbmtzIG9yIDAncyAqLworICAgICAgcysrOworLyoKKyAg Rm9yIGRldGVjdGluZyBvdmVyZmxvdywgd2UgdXNlIGEgc2lnbmVkIGNvcHkgb2YgdGhlIHVuc2ln bmVkIGxvbmcKKyAgYWNjdW11bGF0b3IuICBJZiBpdCBnb2VzIG5lZ2F0aXZlLCB3ZSBrbm93IHdl J2xsIG92ZXJmbG93IE5FWFQgdGltZQorICB0aHJvdWdoIHRoZSBsb29wLgorKi8KKyAgICBmb3Ig KDsgKnM7ICBzKyspIHsJCQkvKiBDb252ZXJ0IGZyb20gaW5wdXQgcmFkaXggdG8gKi8KKwljID0g KnM7CQkJCS8qIHVuc2lnbmVkIGxvbmcgKi8KKwlpZiAoaXNsb3dlcihjKSkgYyA9IHRvdXBwZXIo Yyk7CisJaWYgKGMgPj0gJzAnICYmIGMgPD0gJzknKQorCSAgZCA9IGMgLSAnMCc7CisJZWxzZSBp ZiAoYyA+PSAnQScgJiYgYyA8PSAnWicpCisJICBkID0gYyAtICdBJyArIDEwOworCWVsc2UKKwkg IHJldHVybihOVUxMKTsKKwlpZiAoZCA+PSBpbikJCQkvKiBDaGVjayBmb3IgaWxsZWdhbCBkaWdp dCAqLworCSAgcmV0dXJuKE5VTEwpOworCXp6ID0genogKiBpbiArIGQ7CisJaWYgKHogPCAwTCkJ CQkvKiBDbGV2ZXIoPykgb3ZlcmZsb3cgZGV0ZWN0b3IgKi8KKwkgIHJldHVybigiLTEiKTsKKyAg ICAgICAgeiA9IHp6OworICAgIH0KKyAgICBpZiAoIXp6KSByZXR1cm4oIjAiKTsKKyAgICByID0g JnJ4cmVzdWx0W1JYUkVTVUxUXTsJCS8qIENvbnZlcnQgZnJvbSB1bnNpZ25lZCBsb25nICovCisg ICAgKnItLSA9IE5VTDsJCQkJLyogdG8gb3V0cHV0IHJhZGl4LiAqLworICAgIHdoaWxlICh6eiA+ IDAgJiYgciA+IHJ4cmVzdWx0KSB7CisJZCA9IHp6ICUgKHVuc2lnbmVkKW91dDsKKwkqci0tID0g cnhkaWdpdHNbZF07CisJenogPSB6eiAvICh1bnNpZ25lZClvdXQ7CisgICAgfQorICAgIGlmICht aW51cykgKnItLSA9ICctJzsJCS8qIFJlcGxhY2Ugb3JpZ2luYWwgc2lnbiAqLworICAgIHJldHVy bigoY2hhciAqKShyKzEpKTsKK30KKworI2lmbmRlZiBOT0I2NAorLyogQmFzZS02NCBjb252ZXJz aW9uIHJvdXRpbmVzICovCisKK3N0YXRpYyBjaGFyIGI2NFtdID0gewkJCS8qIEVuY29kaW5nIHZl Y3RvciAqLworI2lmZGVmIHBkcDExCisgICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2Rl ZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSIKKyNlbHNlCisgICdBJywnQicsJ0Mn LCdEJywnRScsJ0YnLCdHJywnSCcsJ0knLCdKJywnSycsJ0wnLCdNJywnTicsJ08nLCdQJywnUScs J1InLCdTJywKKyAgJ1QnLCdVJywnVicsJ1cnLCdYJywnWScsJ1onLCdhJywnYicsJ2MnLCdkJywn ZScsJ2YnLCdnJywnaCcsJ2knLCdqJywnaycsJ2wnLAorICAnbScsJ24nLCdvJywncCcsJ3EnLCdy JywncycsJ3QnLCd1JywndicsJ3cnLCd4JywneScsJ3onLCcwJywnMScsJzInLCczJywnNCcsCisg ICc1JywnNicsJzcnLCc4JywnOScsJysnLCcvJywnPScsJ1wwJworI2VuZGlmIC8qIHBkcDExICov Cit9Oworc3RhdGljIGludCBiNjR0YmxbXSA9IHsJCQkvKiBEZWNvZGluZyB2ZWN0b3IgKi8KKyAg ICAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIs IC0yLCAtMiwKKyAgICAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIs IC0yLCAtMiwgLTIsIC0yLCAtMiwKKyAgICAtMiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEs IC0xLCAtMSwgLTEsIDYyLCAtMSwgLTEsIC0xLCA2MywKKyAgICA1MiwgNTMsIDU0LCA1NSwgNTYs IDU3LCA1OCwgNTksIDYwLCA2MSwgLTEsIC0xLCAtMSwgLTIsIC0xLCAtMSwKKyAgICAtMSwgIDAs ICAxLCAgMiwgIDMsICA0LCAgNSwgIDYsICA3LCAgOCwgIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwK KyAgICAxNSwgMTYsIDE3LCAxOCwgMTksIDIwLCAyMSwgMjIsIDIzLCAyNCwgMjUsIC0xLCAtMSwg LTEsIC0xLCAtMSwKKyAgICAtMSwgMjYsIDI3LCAyOCwgMjksIDMwLCAzMSwgMzIsIDMzLCAzNCwg MzUsIDM2LCAzNywgMzgsIDM5LCA0MCwKKyAgICA0MSwgNDIsIDQzLCA0NCwgNDUsIDQ2LCA0Nywg NDgsIDQ5LCA1MCwgNTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKKyAgICAtMSwgLTEsIC0xLCAtMSwg LTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKKyAgICAtMSwg LTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAt MSwKKyAgICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAt MSwgLTEsIC0xLCAtMSwKKyAgICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAt MSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKKyAgICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAt MSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKKyAgICAtMSwgLTEsIC0xLCAt MSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKKyAgICAt MSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0x LCAtMSwKKyAgICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0x LCAtMSwgLTEsIC0xLCAtMQorfTsKKworLyoKKyAgIEIgOCBUIE8gQiA2IDQgIC0tICBDb252ZXJ0 cyA4LWJpdCBkYXRhIHRvIEJhc2U2NCBlbmNvZGluZy4KKworICAgQ2FsbCB3aXRoOgorICAgICBz ICAgPSBQb2ludGVyIHRvIDgtYml0IGRhdGE7CisgICAgIG4gICA9IE51bWJlciBvZiBzb3VyY2Ug Ynl0ZXMgdG8gZW5jb2RlIChTRUUgTk9URSkuCisgICAgICAgICAgIElmIGl0J3MgYSBudWxsLXRl cm1pbmF0ZWQgc3RyaW5nLCB5b3UgY2FuIHVzZSAtMSBoZXJlLgorICAgICBvdXQgPSBBZGRyZXNz IG9mIG91dHB1dCBidWZmZXIuCisgICAgIGxlbiA9IExlbmd0aCBvZiBvdXRwdXQgYnVmZmVyIChz aG91bGQgPiA0LzMgbG9uZ2VyIHRoYW4gaW5wdXQpLgorCisgICBSZXR1cm5zOgorICAgICA+PSAw IGlmIE9LLCBudW1iZXIgb2YgYnl0ZXMgcGxhY2VkIGluIG91dHB1dCBidWZmZXIsCisgICAgICAg ICAgd2l0aCB0aGUgc3Vic2VxdWVudCBieXRlIHNldCB0byBOVUwgaWYgc3BhY2UgcGVybWl0cy4K KyAgICAgLTEgb24gZXJyb3IgKG91dHB1dCBidWZmZXIgc3BhY2UgZXhoYXVzdGVkKS4KKworICAg Tk9URToKKyAgICAgSWYgdGhpcyBmdW5jdGlvbiBpcyB0byBiZSBjYWxsZWQgcmVwZWF0ZWRseSwg ZS5nLiB0byBlbmNvZGUgYSBkYXRhCisgICAgIHN0cmVhbSBhIGNodW5rIGF0IGEgdGltZSwgdGhl IHNvdXJjZSBsZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDMKKyAgICAgaW4gYWxsIGNhbGxz IGJ1dCB0aGUgZmluYWwgb25lIHRvIGF2b2lkIHRoZSBnZW5lcmF0aW9uIG9mIGV4dHJhbmVvdXMK KyAgICAgcGFkIGNoYXJhY3RlcnMgdGhhdCB3b3VsZCB0aHJvdyB0aGUgZGVjb2RlciBvdXQgb2Yg c3luYy4gIFdoZW4gZW5jb2RpbmcKKyAgICAgb25seSBhIHNpbmdsZSBzdHJpbmcsIHRoaXMgaXMg bm90IGEgY29uc2lkZXJhdGlvbi4gIE5vIGludGVybmFsIHN0YXRlCisgICAgIGlzIGtlcHQsIHNv IHRoZXJlIGlzIG5vIHJlc2V0IGZ1bmN0aW9uLgorKi8KK2ludAorYjh0b2I2NChzLG4sb3V0LGxl bikgY2hhciAqIHMsKiBvdXQ7IGludCBuLCBsZW47IHsKKyAgICBpbnQgYjMsIGI0LCBpLCB4ID0g MDsKKyAgICB1bnNpZ25lZCBpbnQgdDsKKworICAgIGlmIChuIDwgMCkgbiA9IHN0cmxlbihzKTsK KworICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpICs9IDMseCArPSA0KSB7IC8qIExvb3AgdGhyb3Vn aCBzb3VyY2UgYnl0ZXMgKi8KKwliMyA9IGI0ID0gMDsKKwl0ID0gKHVuc2lnbmVkKSgodW5zaWdu ZWQpKCh1bnNpZ25lZCBpbnQpc1tpXSAmIDB4ZmYpIDw8IDgpOworCWlmIChuIC0gMSA+IGkpIHsJ CS8qIERvIHdlIGhhdmUgYW5vdGhlciBhZnRlciB0aGlzPyAqLworICAgICAgICAgICAgdCB8PSAo dW5zaWduZWQpKHNbaSsxXSAmIDB4ZmYpOyAvKiBZZXMsIE9SIGl0IGluICovCisgICAgICAgICAg ICBiMyA9IDE7CQkJLyogQW5kIHJlbWVtYmVyICovCisgICAgICAgIH0KKyAgICAgICAgdCA8PD0g ODsJCQkvKiBNb3ZlIG92ZXIgKi8KKyAgICAgICAgaWYgKG4gLSAyID4gaSkgewkJLyogQW5vdGhl ciBvbmUgYWZ0ZXIgdGhhdD8gKi8KKyAgICAgICAgICAgIHQgfD0gKHVuc2lnbmVkKShzW2krMl0g JiAweGZmKTsgLyogWWVzLCBPUiBpdCBpbiAqLworICAgICAgICAgICAgYjQgPSAxOwkJCS8qIGFu ZCByZW1lbWJlciAqLworICAgICAgICB9CisJaWYgKHggKyA0ID4gbGVuKQkJLyogQ2hlY2sgb3V0 cHV0IHNwYWNlICovCisJICByZXR1cm4oLTEpOworCW91dFt4KzNdID0gYjY0W2I0ID8gKHQgJiAw eDNmKSA6IDY0XTsgLyogNjQgPSBjb2RlIGZvciAnPScgKi8KKyAgICAgICAgdCA+Pj0gNjsKKyAg ICAgICAgb3V0W3grMl0gPSBiNjRbYjMgPyAodCAmIDB4M2YpIDogNjRdOworICAgICAgICB0ID4+ PSA2OworICAgICAgICBvdXRbeCsxXSA9IGI2NFt0ICYgMHgzZl07CisgICAgICAgIHQgPj49IDY7 CisgICAgICAgIG91dFt4XSAgID0gYjY0W3QgJiAweDNmXTsKKyAgICB9CisgICAgaWYgKHggPCBs ZW4pIG91dFt4XSA9IE5VTDsJCS8qIE51bGwtdGVybWluYXRlIHRoZSBzdHJpbmcgKi8KKyAgICBy ZXR1cm4oeCk7Cit9CisKKworLyoKKyAgIEIgNiA0IFQgTyBCIDggIC0tICBDb252ZXJ0cyBCYXNl NjQgc3RyaW5nIHRvIDgtYml0IGRhdGEuCisKKyAgIENhbGwgd2l0aDoKKyAgICAgcyAgID0gcG9p bnRlciB0byBCYXNlNjQgc3RyaW5nICh3aGl0ZXNwYWNlIGlnbm9yZWQpLgorICAgICBuICAgPSBs ZW5ndGggb2Ygc3RyaW5nLCBvciAtMSBpZiBudWxsIHRlcm1pbmF0ZWQsIG9yIDAgdG8gcmVzZXQu CisgICAgIG91dCA9IGFkZHJlc3Mgb2Ygb3V0cHV0IGJ1ZmZlci4KKyAgICAgbGVuID0gbGVuZ3Ro IG9mIG91dHB1dCBidWZmZXIuCisKKyAgIFJldHVybnM6CisgICAgID49IDAgaWYgT0ssIG51bWJl ciBvZiBieXRlcyBwbGFjZWQgaW4gb3V0cHV0IGJ1ZmZlciwKKyAgICAgICAgICB3aXRoIHRoZSBz dWJzZXF1ZW50IGJ5dGUgc2V0IHRvIE5VTCBpZiBzcGFjZSBwZXJtaXRzLgorICAgICA8ICAwIG9u IGVycm9yOgorICAgICAgIC0xID0gb3V0cHV0IGJ1ZmZlciB0b28gc21hbGwgZm9yIGlucHV0Lgor ICAgICAgIC0yID0gaW5wdXQgY29udGFpbnMgaWxsZWdhbCBjaGFyYWN0ZXJzLgorICAgICAgIC0z ID0gaW50ZXJuYWwgY29kaW5nIGVycm9yLgorCisgICBOT1RFOgorICAgICBDYW4gYmUgY2FsbGVk IHJlcGVhdGVkbHkgdG8gZGVjb2RlIGEgQmFzZTY0IHN0cmVhbSwgb25lIGNodW5rIGF0IGEKKyAg ICAgdGltZS4gIEhvd2V2ZXIsIGlmIGl0IGlzIHRvIGJlIGNhbGxlZCBmb3IgbXVsdGlwbGUgc3Ry ZWFtcyBpbgorICAgICBzdWNjZXNzaW9uLCBpdHMgaW50ZXJuYWwgc3RhdGUgbXVzdCBiZSByZXNl dCBhdCB0aGUgYmVnaW5uaW5nIG9mCisgICAgIHRoZSBuZXcgc3RyZWFtLgorKi8KK2ludAorYjY0 dG9iOChzLG4sb3V0LGxlbikgY2hhciAqIHMsKiBvdXQ7IGludCBuLCBsZW47IHsgLyogRGVjb2Rl ICovCisgICAgc3RhdGljIGludCBiaXRzID0gMDsKKyAgICBzdGF0aWMgdW5zaWduZWQgaW50IHIg PSAwOworICAgIGludCBpLCBrID0gMCwgeCwgdDsKKyAgICB1bnNpZ25lZCBjaGFyIGM7CisKKyAg ICBpZiAobiA9PSAwKSB7CQkJLyogUmVzZXQgc3RhdGUgKi8KKwliaXRzID0gMDsKKwlyID0gMDsK KwlyZXR1cm4oMCk7CisgICAgfQorICAgIHggPSAobiA8IDApID8gc3RybGVuKHMpIDogbjsJLyog U291cmNlIGxlbmd0aCAqLworCisgICAgbiA9ICgoeCArIDMpIC8gNCkgKiAzOwkJLyogQ29tcHV0 ZSBkZXN0aW5hdGlvbiBsZW5ndGggKi8KKyAgICBpZiAoeCA+IDAgJiYgc1t4LTFdID09ICc9Jykg bi0tOwkvKiBBY2NvdW50IGZvciBwYWRkaW5nICovCisgICAgaWYgKHggPiAxICYmIHNbeC0yXSA9 PSAnPScpIG4tLTsKKyAgICBpZiAobiA+IGxlbikJCQkvKiBEZXN0aW5hdGlvbiBub3QgYmlnIGVu b3VnaCAqLworICAgICAgcmV0dXJuKC0xKTsJCQkvKiBGYWlsICovCisKKyAgICBmb3IgKGkgPSAw OyBpIDwgeDsgaSsrKSB7CQkvKiBMb29wIHRocnUgc291cmNlICovCisJYyA9IChDSEFSKXNbaV07 CQkJLyogTmV4dCBjaGFyICovCisgICAgICAgIHQgPSBiNjR0YmxbY107CQkJLyogQ29kZSBmb3Ig dGhpcyBjaGFyICovCisJaWYgKHQgPT0gLTIpIHsJCQkvKiBXaGl0ZXNwYWNlIG9yIEN0cmwgKi8K KwkgICAgbi0tOwkJCS8qIElnbm9yZSAqLworCSAgICBjb250aW51ZTsKKwl9IGVsc2UgaWYgKHQg PT0gLTEpIHsJCS8qIElsbGVnYWwgY29kZSAqLworCSAgICByZXR1cm4oLTIpOwkJCS8qIEZhaWwu ICovCisJfSBlbHNlIGlmICh0ID4gNjMgfHwgdCA8IDApCS8qIElsbGVnYWwgdmFsdWUgKi8KKwkg IHJldHVybigtMyk7CQkJLyogZmFpbC4gKi8KKwliaXRzICs9IDY7CQkJLyogQ291bnQgYml0cyAq LworCXIgPDw9IDY7CQkJLyogTWFrZSBzcGFjZSAqLworCXIgfD0gKHVuc2lnbmVkKSB0OwkJLyog T1IgaW4gbmV3IGNvZGUgKi8KKwlpZiAoYml0cyA+PSA4KSB7CQkvKiBIYXZlIGEgYnl0ZSB5ZXQ/ ICovCisJICAgIGJpdHMgLT0gODsJCQkvKiBPdXRwdXQgaXQgKi8KKwkgICAgYyA9ICh1bnNpZ25l ZCkgKChyID4+IGJpdHMpICYgMHhmZik7CisJICAgIG91dFtrKytdID0gYzsKKwl9CisgICAgfQor ICAgIGlmIChrIDwgbGVuKSBvdXRba10gPSBOVUw7CQkvKiBOdWxsLXRlcm1pbmF0ZSBpbiBjYXNl IGl0J3MgKi8KKyAgICByZXR1cm4oayk7CQkJCS8qIGEgdGV4dCBzdHJpbmcgKi8KK30KKyNlbmRp ZiAvKiBOT0I2NCAqLworCisvKiBDIEggSyBOIFUgTSAgLS0gIFNlZSBpZiBhcmd1bWVudCBzdHJp bmcgaXMgYW4gaW50ZWdlciAgKi8KKworLyogUmV0dXJucyAxIGlmIE9LLCB6ZXJvIGlmIG5vdCBP SyAqLworLyogSWYgT0ssIHN0cmluZyBzaG91bGQgYmUgYWNjZXB0YWJsZSB0byBhdG9pKCkgb3Ig YXRvbCgpIG9yIGNrYXRvZnMoKSAqLworLyogQWxsb3dzIGxlYWRpbmcgc3BhY2UsIHNpZ24gKi8K KworaW50CitjaGtudW0ocykgY2hhciAqczsgewkJCS8qIENoZWNrIE51bWVyaWMgU3RyaW5nICov CisgICAgaW50IHggPSAwOwkJCQkvKiBGbGFnIGZvciBwYXN0IGxlYWRpbmcgc3BhY2UgKi8KKyAg ICBpbnQgeSA9IDA7CQkJCS8qIEZsYWcgZm9yIGRpZ2l0IHNlZW4gKi8KKyAgICBjaGFyIGM7Cisg ICAgZGVidWcoRjExMCwiY2hrbnVtIixzLDApOworICAgIGlmICghcykgcmV0dXJuKDApOworICAg IGlmICghKnMpIHJldHVybigwKTsKKyAgICB3aGlsZSAoKGMgPSAqcysrKSkgewkJLyogRm9yIGVh Y2ggY2hhcmFjdGVyIGluIHRoZSBzdHJpbmcgKi8KKwlzd2l0Y2ggKGMpIHsKKwkgIGNhc2UgU1A6 CQkJLyogQWxsb3cgbGVhZGluZyBzcGFjZXMgKi8KKwkgIGNhc2UgSFQ6CisJICAgIGlmICh4ID09 IDApIGNvbnRpbnVlOworCSAgICBlbHNlIHJldHVybigwKTsKKwkgIGNhc2UgJysnOgkJCS8qIEFs bG93IGxlYWRpbmcgc2lnbiAqLworCSAgY2FzZSAnLSc6CisJICAgIGlmICh4ID09IDApIHggPSAx OworCSAgICBlbHNlIHJldHVybigwKTsKKwkgICAgYnJlYWs7CisJICBkZWZhdWx0OgkJCS8qIEFm dGVyIHRoYXQsIG9ubHkgZGVjaW1hbCBkaWdpdHMgKi8KKwkgICAgaWYgKGMgPj0gJzAnICYmIGMg PD0gJzknKSB7CisJCXggPSB5ID0gMTsKKwkJY29udGludWU7CisJICAgIH0gZWxzZSByZXR1cm4o MCk7CisJfQorICAgIH0KKyAgICByZXR1cm4oeSk7Cit9CisKKworLyogIFIgRCBJIEcgSSBUIFMg IC0tIFZlcmlmeSB0aGF0IGFsbCBjaGFyYWN0ZXJzIGluIGFyZyBBUkUgRElHSVRTICAqLworCisv KiAgUmV0dXJucyAxIGlmIHNvLCAwIGlmIG5vdCBvciBpZiBzdHJpbmcgaXMgZW1wdHkgKi8KKwor aW50CityZGlnaXRzKHMpIGNoYXIgKnM7IHsKKyAgICBpZiAoIXMpIHJldHVybigwKTsKKyAgICBk byB7CisgICAgICAgIGlmICghaXNkaWdpdCgqcykpIHJldHVybigwKTsKKyAgICAgICAgcysrOwor ICAgIH0gd2hpbGUgKCpzKTsKKyAgICByZXR1cm4oMSk7Cit9CisKKy8qICBQIEEgUiBOIEEgTSAg LS0gIFJldHVybiBwYXJpdHkgbmFtZSAqLworCitjaGFyICoKKyNpZmRlZiBDS19BTlNJQworcGFy bmFtKGNoYXIgYykKKyNlbHNlCitwYXJuYW0oYykgY2hhciBjOworI2VuZGlmIC8qIENLX0FOU0lD ICovCisvKiBwYXJuYW0gKi8geworICAgIHN3aXRjaCAoYykgeworCWNhc2UgJ2UnOiByZXR1cm4o ImV2ZW4iKTsKKwljYXNlICdvJzogcmV0dXJuKCJvZGQiKTsKKwljYXNlICdtJzogcmV0dXJuKCJt YXJrIik7CisJY2FzZSAncyc6IHJldHVybigic3BhY2UiKTsKKwljYXNlIDA6ICAgcmV0dXJuKCJu b25lIik7CisJZGVmYXVsdDogIHJldHVybigiaW52YWxpZCIpOworICAgIH0KK30KKworY2hhciAq CQkJCQkvKiBDb252ZXJ0IHNlY29uZHMgdG8gaGg6bW06c3MgKi8KKyNpZmRlZiBDS19BTlNJQwor aGhtbXNzKGxvbmcgeCkKKyNlbHNlCitoaG1tc3MoeCkgbG9uZyB4OworI2VuZGlmIC8qIENLX0FO U0lDICovCisvKiBoaG1tc3MoeCkgKi8geworICAgIHN0YXRpYyBjaGFyIGJ1ZlsxMF07CisgICAg bG9uZyBzLCBoLCBtOworICAgIGggPSB4IC8gMzYwMEw7CQkJLyogSG91cnMgKi8KKyAgICB4ID0g eCAlIDM2MDBMOworICAgIG0gPSB4IC8gNjBMOwkJCS8qIE1pbnV0ZXMgKi8KKyAgICBzID0geCAl IDYwTDsJCQkvKiBTZWNvbmRzICovCisgICAgaWYgKHggPiAtMUwpCisgICAgICBzcHJpbnRmKGJ1 ZiwiJTAybGQ6JTAybGQ6JTAybGQiLGgsbSxzKTsKKyAgICBlbHNlCisgICAgICBidWZbMF0gPSBO VUw7CisgICAgcmV0dXJuKChjaGFyICopYnVmKTsKK30KKworLyogTCBTIEUgVCAgLS0gIFNldCBz IGludG8gcCwgcmlnaHQgcGFkZGluZyB0byBsZW5ndGggbiB3aXRoIGNoYXIgYzsgKi8KKy8qCisg ICBzIGlzIGEgTlVMLXRlcm1pbmF0ZWQgc3RyaW5nLgorICAgSWYgbGVuZ3RoKHMpID4gbiwgb25s eSBuIGJ5dGVzIGFyZSBtb3ZlZC4KKyAgIFRoZSByZXN1bHQgaXMgTk9UIE5VTCB0ZXJtaW5hdGVk IHVubGVzcyBjID09IE5VTCBhbmQgbGVuZ3RoKHMpIDwgbi4KKyAgIFRoZSBpbnRlbmRlZCBvZiB0 aGlzIHJvdXRpbmUgaXMgZm9yIGZpbGxpbmcgaW4gZml4ZWQtbGVuZ3RoIHJlY29yZCBmaWVsZHMu CisqLworVk9JRAorbHNldChwLHMsbixjKSBjaGFyICpzOyBjaGFyICpwOyBpbnQgbjsgaW50IGM7 IHsKKyAgICBpbnQgeDsKKyNpZm5kZWYgVVNFX01FTUNQWQorICAgIGludCBpOworI2VuZGlmIC8q IFVTRV9NRU1DUFkgKi8KKyAgICBpZiAoIXMpIHMgPSAiIjsKKyAgICB4ID0gc3RybGVuKHMpOwor ICAgIGlmICh4ID4gbikgeCA9IG47CisjaWZkZWYgVVNFX01FTUNQWQorICAgIG1lbWNweShwLHMs eCk7CisgICAgaWYgKG4gPiB4KQorICAgICAgbWVtc2V0KHAreCxjLG4teCk7CisjZWxzZQorICAg IGZvciAoaSA9IDA7IGkgPCB4OyBpKyspCisgICAgICAqcCsrID0gKnMrKzsKKyAgICBmb3IgKDsg aSA8IG47IGkrKykKKyAgICAgICpwKysgPSBjOworI2VuZGlmIC8qIFVTRV9NRU1DUFkgKi8KK30K KworLyogUiBTIEUgVCAgLS0gIFJpZ2h0LWFkanVzdCBzIGluIHAsIGxlZnQgcGFkZGluZyB0byBs ZW5ndGggbiB3aXRoIGNoYXIgYyAqLworCitWT0lECityc2V0KHAscyxuLGMpIGNoYXIgKnM7IGNo YXIgKnA7IGludCBuOyBpbnQgYzsgeworICAgIGludCB4OworI2lmbmRlZiBVU0VfTUVNQ1BZCisg ICAgaW50IGk7CisjZW5kaWYgLyogVVNFX01FTUNQWSAqLworICAgIGlmICghcykgcyA9ICIiOwor ICAgIHggPSBzdHJsZW4ocyk7CisgICAgaWYgKHggPiBuKSB4ID0gbjsKKyNpZmRlZiBVU0VfTUVN Q1BZCisgICAgbWVtc2V0KHAsYyxuLXgpOworICAgIG1lbWNweShwK24teCxzLHgpOworI2Vsc2UK KyAgICBmb3IgKGkgPSAwOyBpIDwgKG4gLSB4KTsgaSsrKQorICAgICAgKnArKyA9IGM7CisgICAg Zm9yICg7IGkgPCBuOyBpKyspCisgICAgICAqcCsrID0gKnMrKzsKKyNlbmRpZiAvKiBVU0VfTUVN Q1BZICovCit9CisKKy8qICBVIEwgTyBOIEcgVCBPIEggRSBYICAtLSAgVW5zaWduZWQgbG9uZyB0 byBoZXggICovCisKKy8qCisgIENvbnZlcnRzIHVuc2lnbmVkIGxvbmcgYXJnIHRvIGhleCBhbmQg cmV0dXJucyBzdHJpbmcgcG9pbnRlciB0bworICByaWdodG1vc3QgbiBoZXggZGlnaXRzIGxlZnQg cGFkZGVkIHdpdGggMCdzLiAgQWxsb3dzIGZvciBsb25ncworICB1cCB0byA2NCBiaXRzLiAgUmV0 dXJucyBwb2ludGVyIHRvIHJlc3VsdC4KKyovCitjaGFyICoKKyNpZmRlZiBDS19BTlNJQwordWxv bmd0b2hleCggdW5zaWduZWQgbG9uZyB6LCBpbnQgbiApCisjZWxzZQordWxvbmd0b2hleCh6LG4p IHVuc2lnbmVkIGxvbmcgejsgaW50IG47IAorI2VuZGlmCS8qIENLX0FOU0lDICovCisvKiB1bG9u Z3RvaGV4ICovIHsKKyAgICBzdGF0aWMgY2hhciBoZXhidWZbMTddOworICAgIGludCBpID0gMTYs IHgsIGsgPSAwOworICAgIGhleGJ1ZlsxNl0gPSAnXDAnOworICAgIGlmIChuID4gMTYpIG4gPSAx NjsKKyAgICBrID0gMiAqIChzaXplb2YobG9uZykpOworICAgIGZvciAoaSA9IDA7IGkgPCBuOyBp KyspIHsKKwlpZiAoaSA+IGsgfHwgeiA9PSAwKSB7CisJICAgIGhleGJ1ZlsxNS1pXSA9ICcwJzsK Kwl9IGVsc2UgeworCSAgICB4ID0geiAmIDB4MGY7CisJICAgIHogPSB6ID4+IDQ7CisJICAgIGhl eGJ1ZlsxNS1pXSA9IHggKyAoKHggPCAxMCkgPyAnMCcgOiAweDM3KTsKKwl9CisgICAgfQorICAg IHJldHVybigoY2hhciAqKSgmaGV4YnVmWzE2LWldKSk7Cit9CisKKy8qICBIIEUgWCBUIE8gVSBM IE8gTiBHICAtLSAgSGV4IHN0cmluZyB0byB1bnNpZ25lZCBsb25nICAqLworCisvKgorICBDb252 ZXJ0cyBuIGNoYXJzIGZyb20gcyBmcm9tIGhleCB0byB1bnNpZ25lZCBsb25nLgorICBSZXR1cm5z OgorICAgMEwgb3IgcG9zaXRpdmUsIGdvb2QgcmVzdWx0ICgwTCBpcyByZXR1cm5lZCBpZiBhcmcg aXMgTlVMTCBvciBlbXB0eSkuCisgIC0xTCBvbiBlcnJvcjogbm9uLWhleCBhcmcgb3Igb3ZlcmZs b3cuCisqLworbG9uZworaGV4dG91bG9uZyhzLG4pIGNoYXIgKnM7IGludCBuOyB7CisgICAgY2hh ciBidWZbNjRdOworICAgIHVuc2lnbmVkIGxvbmcgcmVzdWx0ID0gMEw7CisgICAgaW50IGQsIGNv dW50ID0gMDsKKyAgICBpbnQgZmxhZyA9IDA7CisgICAgaWYgKCFzKSBzID0gIiI7CisgICAgaWYg KCEqcykgeworCXJldHVybigwTCk7CisgICAgfQorICAgIGlmIChuIDwgMSkKKyAgICAgIHJldHVy bigwTCk7CisgICAgaWYgKG4gPiA2MykgbiA9IDYzOworICAgIHN0cm5jcHkoYnVmLHMsbik7Cisg ICAgYnVmW25dID0gJ1wwJzsKKyAgICBzID0gYnVmOworICAgIHdoaWxlICgqcykgeworCWQgPSAq cysrOworCWlmICgoZCA9PSAnMCcgfHwgZCA9PSAnICcpKSB7CisJICAgIGlmICghZmxhZykKKwkg ICAgICBjb250aW51ZTsKKwl9IGVsc2UgeworCSAgICBmbGFnID0gMTsKKwl9CisJaWYgKGlzbG93 ZXIoZCkpCisJICBkID0gdG91cHBlcihkKTsKKwlpZiAoZCA+PSAnMCcgJiYgZCA8PSAnOScpIHsK KwkgICAgZCAtPSAweDMwOworCX0gZWxzZSBpZiAoZCA+PSAnQScgJiYgZCA8PSAnRicpIHsKKwkg ICAgZCAtPSAweDM3OworCX0gZWxzZSB7CisJICAgIHJldHVybigtMUwpOworCX0KKwlpZiAoKytj b3VudCA+IChzaXplb2YobG9uZykgKiAyKSkKKwkgIHJldHVybigtMUwpOworCXJlc3VsdCA9IChy ZXN1bHQgPDwgNCkgfCAoZCAmIDB4MGYpOworICAgIH0KKyAgICByZXR1cm4ocmVzdWx0KTsKK30K KworLyoKKyAgYyBrIHMgcCBsIGkgdCAgLS0gIFNwbGl0cyBhIHN0cmluZyBpbnRvIHdvcmRzLCBv cjoKKyAgICAgICAgICAgICAgICAgICAgIGV4dHJhY3RzIGEgZ2l2ZW4gd29yZCBmcm9tIGEgc3Ry aW5nLgorCisgIEFsbG93cyBmb3IgZ3JvdXBpbmcuCisgIE9wZXJhdGVzIG9uIGEgY29weSBvZiB0 aGUgc3RyaW5nOyBkb2VzIG5vdCBhbHRlciB0aGUgb3JpZ2luYWwgc3RyaW5nLgorICBBbGwgc3Ry aW5ncyBOVUwtdGVybWluYXRlZC4KKworICBDYWxsIHdpdGg6CisgICAgZmMgPSBmdW5jdGlvbiBj b2RlOgorICAgICAgICAgMSA9IHNwbGl0LCAwID0gd29yZC4KKyAgICBuMSA9IGRlc2lyZWQgd29y ZCBudW1iZXIgaWYgZmMgPT0gMC4KKyAgICBzMSA9IHNvdXJjZSBzdHJpbmcuCisgICAgczIgPSBi cmVhayBzdHJpbmcgKE5VTEwgdG8gYWNjZXB0IGRlZmF1bHQgPSBhbGwgbm9uLWFscGhhbnVtKS4K KyAgICBzMyA9IGluY2x1ZGUgc3RyaW5nIChOVUxMIHRvIGFjY2VwdCBkZWZhdWx0ID0gYWxsIGFs cGhhbnVtKS4KKyAgICBuMiA9IGdyb3VwaW5nIG1hc2sgKE9SIGRlc2lyZWQgb25lcyB0b2dldGhl cik6CisgICAgICAgICAxID0gZG91YmxlcXVvdGVzLCAgMiA9IGJyYWNlcywgICAgNCA9IGFwb3N0 cm9waGVzLAorICAgICAgICAgOCA9IHBhcmVucywgICAgICAgMTYgPSBicmFja2V0cywgMzIgPSBh bmdsZSBicmFja2V0cywKKyAgICAgICAgLTEgPSA2MyA9IGFsbCBvZiB0aGVzZS4KKyAgICBuMyA9 IGdyb3VwIHF1b3RlIGNoYXJhY3RlciwgQVNDSUkgdmFsdWUsIHVzZWQgYW5kIHRlc3RlZCBvbmx5 IGZvcgorICAgICAgICAgTElTUCBxdW90ZSwgZS5nLiAoYSAnYiBjICcoZCBlIGYpKS4KKyAgICBu NCA9IDAgdG8gY29sbGFwc2UgYWRqYWNlbnQgc2VwYXJhdG9yczsKKyAgICAgICAgIG5vbnplcm8g bm90IHRvIGNvbGxhcHNlIHRoZW0uCisKKyAgUmV0dXJuczoKKyAgICBQb2ludGVyIHRvIHN0cnVj dCBzdHJpbmdhcnJheSwgd2l0aCBzaXplOgorICAgICAgLTEgPSBtZW1vcnkgYWxsb2NhdGlvbiBl cnJvci4KKyAgICAgIC0yID0gdG9vIG1hbnkgd29yZHMgaW4gc3RyaW5nLgorICAgICAgIG4gPSBu dW1iZXIgb2Ygd29yZHMgKDAgb3IgbW9yZSkuCisKKyAgV2l0aDoKKyAgICB3b3JkYXJyYXkgPSBh cnJheSBvZiBwb2ludGVycyB0byBuIHdvcmRzIChuID09IDEgaWYgZmMgPT0gMCksIDEtYmFzZWQu CisgICAgRWFjaCBwb2ludGVyIGlzIHRvIGEgbWFsbG9jJ2Qgc3RyaW5nLiAgVGhpcyBhcnJheSBp cyByZWN5Y2xlZCB1cG9uIGVhY2gKKyAgICBjYWxsOyBpZiB5b3UgbmVlZCB0byBrZWVwIHRoZSBz dHJpbmdzLCBtYWtlIGNvcGllcyBvZiB0aGVtLiAgVGhpcyByb3V0aW5lCisgICAgbXVzdCBoYXZl IGNvbnRyb2wgb2YgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uLgorCisgIElmIGEgZ2l2ZW4g Y2hhcmFjdGVyIGlzIGluY2x1ZGVkIGluIHRoZSBpbmNsdWRlIGxpc3QsIGl0IGlzIG5vdCB0cmVh dGVkCisgIGFzIGEgc2VwYXJhdG9yIG9yIGFzIGEgZ3JvdXBpbmcgY2hhcmFjdGVyLgorCisgIEdy b3VwcyBtYXkgYmUgbmVzdGVkIG9ubHkgaWYgdGhleSBhcmUgZm9ybWVkIHdpdGggYnJhY2VzLCBw YXJlbnMsIG9yCisgIGJyYWNrZXRzLCBidXQgbm90IHdpdGggcXVvdGVzIG9yIGFwb3N0cm9waGVz IHNpbmNlIEFTQ0lJIHF1b3RlcyBoYXZlIG5vCisgIGludHJpbnNpYyBoYW5kZWRuZXNzLiAgR3Jv dXAtc3RhcnQgYW5kIGVuZCBjaGFyYWN0ZXJzIGFyZSB0cmVhdGVkIGFzCisgIHNlcGFyYXRvcnMg ZXZlbiBpbiB0aGUgYWJzZW5jZSBvZiBvdGhlciBzZXBhcmF0b3JzLCBzbyBhIHN0cmluZyBzdWNo IGFzCisgICJhe2J9YyIgcmVzdWx0cyBpbiB0aHJlZSB3b3Jkcywgbm90IG9uZS4KKworICBTYW1w bGUgY2FsbCB0byBzcGxpdCBhIHN0cmluZyBpbnRvIGFuIGFycmF5OgorICAgIHN0cnVjdCBzdHJp bmdhcnJheSAqIHE7CisgICAgcSA9IGNrc3BsaXQoMSwwLHMxLHMyLHMzLC0xLDApOworICAgICAg ICBxLT5hX3NpemUgPSBzaXplICg+PTApIG9yIGZhaWx1cmUgY29kZSAoPDApCisgICAgICAgIHEt PmFfaGVhZCA9IHBvaW50ZXIgdG8gYXJyYXkgKGVsZW1lbnRzIDAgdGhydSBxLT5hc2l6ZSAtIDEp LgorCisgIFNhbXBsZSBjYWxsIHRvIGV4dHJhY3Qgd29yZCBuIGZyb20gYSBzdHJpbmc6CisgICAg c3RydWN0IHN0cmluZ2FycmF5ICogcTsKKyAgICBxID0gY2tzcGxpdCgwLG4sczEsczIsczMsLTEs MCk7CisgICAgICAgIHEtPmFfc2l6ZSA9IHNpemUgKDEpIG9yIGZhaWx1cmUgY29kZSAoPDApCisg ICAgICAgIHEtPmFfaGVhZCA9IHBvaW50ZXIgdG8gYXJyYXkgKGVsZW1lbnQgMSBpcyB0aGUgZGVz aXJlZCB3b3JkKS4KKyovCisKKy8qIFN0YXRlcyAqLworCisjZGVmaW5lIFNUX0JXICAwCQkJLyog QmV0d2VlbiBXb3JkcyAqLworI2RlZmluZSBTVF9JVyAgMQkJCS8qIEluIFdvcmQgKi8KKyNkZWZp bmUgU1RfSUcgIDIJCQkvKiBTdGFydCBHcm91cCAqLworCisvKiBDaGFyYWN0ZXIgQ2xhc3NlcyAo Yml0bWFwKSAqLworCisjZGVmaW5lIENMX1NFUCAxCQkJLyogU2VwYXJhdG9yICovCisjZGVmaW5l IENMX09QTiAyCQkJLyogR3JvdXAgT3BlbiAqLworI2RlZmluZSBDTF9DTFMgNAkJCS8qIEdyb3Vw IENsb3NlICovCisjZGVmaW5lIENMX0RBVCA4CQkJLyogRGF0YSAqLworI2RlZmluZSBDTF9RVU8g MTYJCQkvKiBHcm91cCBxdW90ZSAqLworCisjaWZkZWYgQklHQlVGT0sKKyNpZm5kZWYgTUFYV09S RFMKKyNkZWZpbmUgTUFYV09SRFMgNDA5NgkJCS8qIE1heCBudW1iZXIgb2Ygd29yZHMgKi8KKyNl bmRpZiAvKiBNQVhXT1JEUyAqLworI2lmbmRlZiBORVNUTUFYCisjZGVmaW5lIE5FU1RNQVggNjQJ CQkvKiBNYXhpbXVtIG5lc3RpbmcgbGV2ZWwgKi8KKyNlbmRpZiAvKiBORVNUTUFYICovCisjZWxz ZQorI2lmbmRlZiBNQVhXT1JEUworI2RlZmluZSBNQVhXT1JEUyAxMjgJCQkvKiBNYXggbnVtYmVy IG9mIHdvcmRzICovCisjZW5kaWYgLyogTUFYV09SRFMgKi8KKyNpZm5kZWYgTkVTVE1BWAorI2Rl ZmluZSBORVNUTUFYIDE2CQkJLyogTWF4aW11bSBuZXN0aW5nIGxldmVsICovCisjZW5kaWYgLyog TkVTVE1BWCAqLworI2VuZGlmIC8qIEJJR0JVRk9LICovCisKKy8qIHN0YXRpYyAqLyBjaGFyICoq IHdvcmRhcnJheSA9IE5VTEw7CS8qIFJlc3VsdCBhcnJheSBvZiB3b3JkIHBvaW50ZXJzICovCisK K3N0YXRpYyBzdHJ1Y3Qgc3RyaW5nYXJyYXkgY2tfc3ZhbCA9ICB7CS8qIFJldHVybiB2YWx1ZSBz dHJ1Y3R1cmUgKi8KKyAgICBOVUxMLAkJCQkvKiBQb2ludGVyIHRvIGFycmF5ICovCisgICAgMAkJ CQkJLyogU2l6ZSAqLworfTsKK3N0YXRpYyBpbnQgKiB3b3Jkc2l6ZSA9IE5VTEw7CisKK3N0YXRp YyBWT0lECitzZXR3b3JkKG4scyxsZW4pIGludCBuLCBsZW47IGNoYXIgKiBzOyB7CisgICAgcmVn aXN0ZXIgY2hhciAqIHA7CisgICAgcmVnaXN0ZXIgaW50IGksIGs7CisKKyAgICBpZiAoIXMpIHMg PSAiIjsKKworICAgIGlmICghd29yZGFycmF5KSB7CQkJLyogQWxsb2NhdGUgcmVzdWx0IGFycmF5 IChvbmx5IG9uY2UpICovCisJaWYgKCEod29yZGFycmF5ID0gKGNoYXIgKiopbWFsbG9jKChNQVhX T1JEUysxKSAqIHNpemVvZihjaGFyICopKSkpCisJICByZXR1cm47CisJaWYgKCEod29yZHNpemUg PSAoaW50ICopbWFsbG9jKChNQVhXT1JEUysxKSAqIHNpemVvZihpbnQpKSkpCisJICByZXR1cm47 CisJZm9yIChpID0gMDsgaSA8PSBNQVhXT1JEUzsgaSsrKQl7IC8qIEluaXRpYWxpemUgcmVzdWx0 IGFycmF5ICovCisJICAgIHdvcmRhcnJheVtpXSA9IE5VTEw7CisJICAgIHdvcmRzaXplW2ldID0g MDsKKwl9CisgICAgfQorICAgIGlmICh3b3Jkc2l6ZVtuXSA8IGxlbiAvKiB8fCAhd29yZGFycmF5 W25dICovICkgeworCWsgPSAobGVuIDwgMTYpID8gMTYgOiBsZW4gKyAobGVuIC8gNCk7CisJd29y ZGFycmF5W25dID0gKGNoYXIgKikgbWFsbG9jKGsrMSk7CisJd29yZHNpemVbbl0gPSAod29yZGFy cmF5W25dKSA/IGsgOiAwOworCWlmICh3b3JkYXJyYXlbbl0pIHsKKwkgICAgcCA9IHdvcmRhcnJh eVtuXTsKKwkgICAgd2hpbGUgKCgqcCsrID0gKnMrKykgJiYgay0tID4gMCkgOworCX0KKyAgICB9 IGVsc2UgaWYgKGxlbiA+IDApIHsKKwlrID0gd29yZHNpemVbbl07CQkvKiAoSW4gY2FzZSBsZW4g YXJnIGlzIGEgbGllKSAqLworCXAgPSB3b3JkYXJyYXlbbl07CisJd2hpbGUgKCgqcCsrID0gKnMr KykgJiYgay0tID4gMCkgeworI2lmZGVmIENPTU1FTlQKKwkgICAgaWYgKCgqKHMtMSkgPT0gQ01E USkgJiYgKnMgIT0gQ01EUSkgeworCQlrKys7CisJCXAtLTsKKwkgICAgfQorI2VuZGlmIC8qIENP TU1FTlQgKi8KKwl9CisgICAgfSBlbHNlIGlmICh3b3JkYXJyYXlbbl0pIHsKKwl3b3JkYXJyYXlb bl1bMF0gPSBOVUw7CisgICAgfQorfQorCitzdGF0aWMgY2hhciAqIHNwbGl0YnVmID0gTlVMTDsK K3N0YXRpYyBpbnQgbnNwbGl0YnVmID0gMDsKKworLyogbjQgPSAxIHRvIE5PVCBjb2xsYXBzZSBh ZGphY2VudCBzZXBhcmF0b3JzICovCisKKworc3RydWN0IHN0cmluZ2FycmF5ICoKK2Nrc3BsaXQo ZmMsbjEsczEsczIsczMsbjIsbjMsbjQpIGludCBmYyxuMSxuMixuMyxuNDsgY2hhciAqczEsICpz MiwgKnMzOyB7CisgICAgaW50IHNwbGl0dGluZyA9IDA7CQkJLyogV2hhdCBJIHdhcyBhc2tlZCB0 byBkbyAqLworICAgIGludCBpLCBrLCBrbyA9IDAsIG4sIHgsIG1heCA9IE1BWFdPUkRTOyAvKiBX b3JrZXJzICovCisgICAgY2hhciAqIHMgPSBOVUxMLCAqIHNzLCAqIHA7CQkvKiBXb3JrZXJzICov CisgICAgY2hhciAqIHNlcCA9ICIiOwkJCS8qIERlZmF1bHQgYnJlYWsgc2V0ICovCisgICAgY2hh ciAqIG5vdHNlcCA9ICIiOwkJCS8qIERlZmF1bHQgaW5jbHVkZSBzZXQgKi8KKyAgICBpbnQgICAg Z3JvdXBpbmcgPSAwOwkJLyogR3JvdXBpbmcgb3B0aW9uICovCisgICAgY2hhciAqIGdyX29wbiA9 ICJcInsnKFs8IjsJCS8qIEdyb3VwIG9wZW4gYnJhY2tldHMgKi8KKyAgICBjaGFyICogZ3JfY2xz ID0gIlwifScpXT4iOwkJLyogR3JvdXAgY2xvc2UgYnJhY2tldHMgKi8KKyAgICBpbnQgICAgZ3Jf c3RrW05FU1RNQVhdOwkJLyogTmVzdGluZyBicmFja2V0IHN0YWNrICovCisgICAgaW50ICAgIGdy X2x2bCA9IDA7CQkJLyogTmVzdGluZyBsZXZlbCAqLworICAgIGludCAgICB3b3JkbnVtID0gMDsJ CQkvKiBDdXJyZW50IHdvcmQgbnVtYmVyICovCisgICAgQ0hBUiAgIGMgPSAnQSc7CQkJLyogQ3Vy cmVudCBjaGFyIChkdW1teSBzdGFydCB2YWx1ZSkgKi8KKyAgICBpbnQgICAgY2xhc3MgPSAwOwkJ CS8qIEN1cnJlbnQgY2hhcmFjdGVyIGNsYXNzICovCisgICAgaW50ICAgIHN0YXRlID0gU1RfQlc7 CQkvKiBDdXJyZW50IEZTQSBzdGF0ZSAqLworICAgIGludCAgICBsZW4gPSAwOwkJCS8qIExlbmd0 aCBvZiBjdXJyZW50IHdvcmQgKi8KKyAgICBpbnQgICAgc2xlbiA9IDA7CQkJLyogTGVuZ3RoIG9m IHMxICovCisgICAgaW50ICAgIGdxdW90ZSA9IDA7CQkJLyogUXVvdGVkIGdyb3VwICovCisgICAg aW50ICAgIGNxdW90ZSA9IDA7CQkJLyogUXVvdGVkIGNoYXJhY3RlciAqLworICAgIGludCAgICBj b2xsYXBzZSA9IDE7CQkvKiBDb2xsYXBzZSBhZGphY2VudCBzZXBhcmF0b3JzICovCisgICAgaW50 ICAgIGFsbCA9IDA7CQkJLyogczMgPT0gQUxMICovCisgICAgaW50ICAgIGNzdiA9IDA7CQkJLyog czMgPT0gQ1NWICovCisgICAgaW50ICAgIHRzdiA9IDA7CQkJLyogczMgPT0gVFNWICovCisgICAg aW50ICAgIHByZXZzdGF0ZSA9IC0xOworCisgICAgdW5zaWduZWQgaW50IGhleDgwID0gMTI4Owor ICAgIHVuc2lnbmVkIGludCBoZXhmZiA9IDI1NTsKKyAgICBDSEFSIG5vdHNlcGJ1ZlsyNTZdOwor CisgICAgbm90c2VwYnVmWzBdID0gTlVMOwkJCS8qIEtlZXAgc2V0IGZvciAiQUxMIiAqLworICAg IGlmIChuNCkgY29sbGFwc2UgPSAwOwkJLyogRG9uJ3QgY29sbGFwc2UgKi8KKworICAgIGZvciAo aSA9IDA7IGkgPCBORVNUTUFYOyBpKyspCS8qIEluaXRpYWxpemUgbmVzdGluZyBzdGFjayAqLwor ICAgICAgZ3Jfc3RrW2ldID0gMDsKKworICAgIHNldHdvcmQoMSxOVUxMLDApOworICAgIGNrX3N2 YWwuYV9oZWFkID0gd29yZGFycmF5OwkJLyogSW5pdGlhbGl6ZSByZXR1cm4gdmFsdWUgc3RydWN0 ICovCisgICAgY2tfc3ZhbC5hX3NpemUgPSAwOworCisgICAgaWYgKCFzMSkgczEgPSAiIjsJCQkv KiBzMSA9IHNvdXJjZSBzdHJpbmcgKi8KKyAgICBpZiAoISpzMSkgewkJCQkvKiBJZiBub25lLCBu b3RoaW5nIHRvIGRvICovCisJcmV0dXJuKCZja19zdmFsKTsKKyAgICB9CisgICAgc3BsaXR0aW5n ID0gZmM7CQkJLyogT3VyIGpvYiAqLworICAgIGlmIChzcGxpdHRpbmcpIHsJCQkvKiBJZiBzcGxp dHRpbmcgbiA9IHdvcmQgY291bnQgKi8KKwluID0gMDsJCQkJLyogSW5pdGlhbGl6ZSBpdCAqLwor ICAgIH0gZWxzZSB7CQkJCS8qIE90aGVyd2lzZSAqLworI2lmZGVmIENPTU1FTlQKKwlpZiAobjEg PCAxKSB7CQkJLyogSWYgMCAob3IgbGVzcykgKi8KKwkgICAgY2tfc3ZhbC5hX3NpemUgPSAwOwkJ Lyogbm90aGluZyB0byBkby4gKi8KKwkgICAgcmV0dXJuKCZja19zdmFsKTsKKwl9CisjZWxzZQor CWlmIChuMSA9PSAwKSB7CQkJLyogSWYgMCAqLworCSAgICBja19zdmFsLmFfc2l6ZSA9IDA7CQkv KiBub3RoaW5nIHRvIGRvLiAqLworCSAgICByZXR1cm4oJmNrX3N2YWwpOworCX0KKyNlbmRpZgkv KiBDT01NRU5UICovCisJbiA9IG4xOwkJCQkvKiBuID0gZGVzaXJlZCB3b3JkIG51bWJlci4gKi8K KyAgICB9CisgICAgc2xlbiA9IDA7CQkJCS8qIEdldCBsZW5ndGggb2YgczEgKi8KKyAgICBkZWJ1 ZyhGMTExLCJja3NwbGl0IixzMSxuKTsKKworICAgIHAgPSBzMTsKKworI2lmZGVmIENPTU1FTlQK KyAgICB3aGlsZSAoKnArKykgc2xlbisrOwkJLyogTWFrZSBwb2tlYWJsZSBjb3B5IG9mIHMxICov CisgICAgaWYgKCFzcGxpdGJ1ZiB8fCBzbGVuID4gbnNwbGl0YnVmKSB7IC8qIEFsbG9jYXRlIGJ1 ZmZlciBpZiBuZWVkZWQgKi8KKwlpbnQgeHg7CisJaWYgKHNwbGl0YnVmKQorCSAgZnJlZShzcGxp dGJ1Zik7CisJeHggPSAoc2xlbiA8IDI1NSkgPyAyNTUgOiB4eCArICh4eCAvIDQpOworCWRlYnVn KEYxMDEsImNrc3BsaXQgc3BsaXRidWYiLCIiLHh4KTsKKwlzcGxpdGJ1ZiA9IChjaGFyICopbWFs bG9jKHh4KzEpOworCWlmICghc3BsaXRidWYpIHsJCS8qIE1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1 cmUuLi4gKi8KKwkgICAgY2tfc3ZhbC5hX3NpemUgPSAtMTsKKwkgICAgcmV0dXJuKCZja19zdmFs KTsKKwl9CisJbnNwbGl0YnVmID0geHg7CQkJLyogUmVtZW1iZXIgc2l6ZSBvZiBidWZmZXIgKi8K KyAgICB9CisjZWxzZQorLyoKKyAgVGhlIGlkZWEgaXMgdG8ganVzdCBjb3B5IHRoZSBzdHJpbmcg aW50byBzcGxpdGJ1ZiAoaWYgaXQgZXhpc3RzKS4gIFRoaXMKKyAgZ2l2ZXMgdXMgYm90aCB0aGUg Y29weSBhbmQgdGhlIGxlbmd0aCBzbyB3ZSBvbmx5IG5lZWQgdG8gZ3JvdmVsIHRocm91Z2ggdGhl CisgIHN0cmluZyBvbmNlIGluIG1vc3QgY2FzZXMuICBPbmx5IHdoZW4gc3BsaXRidWYgZG9lc24n dCBleGlzdCBvciBpcyB0b28gc2hvcnQKKyAgZG8gd2UgcmUtbWFsbG9jKCksIHdoaWNoIHNob3Vs ZCBiZSB2ZXJ5IGluZnJlcXVlbnQgc28gd2hvIGNhcmVzIGlmIHdlIGhhdmUKKyAgdG8gZ28gdGhy b3VnaCB0aGUgc3RyaW5nIGFnYWluIGluIHRoYXQgY2FzZS4KKyovCisgICAgcCA9IHMxOworICAg IHMgPSBzcGxpdGJ1ZjsKKyAgICBpZiAoc3BsaXRidWYpIHsJCQkvKiBNYWtlIHBva2VhYmxlIGNv cHkgb2YgczEgKi8KKwl3aGlsZSAoKCpzKysgPSAqcCsrKSAmJiAoc2xlbisrIDwgbnNwbGl0YnVm KSkgLyogVHJ5IHRvIGNvcHkgKi8KKwkgIDsKKyAgICB9CisgICAgaWYgKCFzcGxpdGJ1ZiB8fCBz bGVuID49IG5zcGxpdGJ1ZikgeyAvKiBOZWVkIHRvIGRvIG1vcmUuLi4gKi8KKwlpbnQgeHg7CisJ aWYgKHNwbGl0YnVmKQkJCS8qIEZyZWUgcHJldmlvdXMgYnVmIGlmIGFueSAqLworCSAgZnJlZShz cGxpdGJ1Zik7CisJd2hpbGUgKCpwKyspIHNsZW4rKzsJCS8qIEdldCAocmVzdCBvZikgbGVuZ3Ro ICovCisJeHggPSAoc2xlbiA8IDI1NSkgPyAyNTUgOiBzbGVuICsgKHNsZW4gLyA0KTsgLyogU2l6 ZSBvZiBuZXcgYnVmZmVyICovCisJc3BsaXRidWYgPSAoY2hhciAqKW1hbGxvYyh4eCsxKTsgLyog QWxsb2NhdGUgaXQgKi8KKwlpZiAoIXNwbGl0YnVmKSB7CQkgLyogTWVtb3J5IGFsbG9jYXRpb24g ZmFpbHVyZS4uLiAqLworCSAgICBja19zdmFsLmFfc2l6ZSA9IC0xOworCSAgICByZXR1cm4oJmNr X3N2YWwpOworCX0KKwluc3BsaXRidWYgPSB4eDsJCQkvKiBSZW1lbWJlciAobmV3KSBidWZmZXIg c2l6ZSAqLworCXMgPSBzcGxpdGJ1ZjsKKwlwID0gczE7CisJd2hpbGUgKCgqcysrID0gKnArKykp IDsKKyAgICB9CisKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgcyA9IHNwbGl0YnVmOworICAg IHNlcCA9IHMyOwkJCQkvKiBzMiA9IGJyZWFrIHNldCAqLworICAgIGlmICghc2VwKSBzZXAgPSAi IjsKKyAgICBub3RzZXAgPSBzMzsJCQkvKiBzMyA9IGluY2x1ZGUgc2V0ICovCisgICAgaWYgKCFu b3RzZXApIHsKKwlub3RzZXAgPSAiIjsKKyAgICB9IGVsc2UgaWYgKChhbGwgPSAhY2tzdHJjbXAo bm90c2VwLCJBTEwiLDMsMSkpIHx8CisJICAgICAgIChjc3YgPSAhY2tzdHJjbXAobm90c2VwLCJD U1YiLDMsMSkpIHx8CisJICAgICAgICh0c3YgPSAhY2tzdHJjbXAobm90c2VwLCJUU1YiLDMsMSkp KSB7CisJaW50IGksIGZsYWc7IENIQVIgYzsKKwlpbnQgbiA9IDA7CisJY2hhciAqIHNzOworCWlm ICghYWxsICYmIChjc3YgfHwgdHN2KSkgeworCSAgICBhbGwgPSAxOworCSAgICBjb2xsYXBzZSA9 IDA7CisJfQorCWlmIChjc3YgfHwgdHN2KSB7CisJICAgIGFsbCA9IDE7CisJICAgIGNvbGxhcHNl ID0gMDsKKwl9CisJZm9yIChpID0gMTsgaSA8IDI1NjsgaSsrKSB7CisJICAgIGZsYWcgPSAwOwor CSAgICBzcyA9IHNlcDsKKwkgICAgd2hpbGUgKGMgPSAqc3MrKyAmJiAhZmxhZykgeworCQlpZiAo YyA9PSBpKSBmbGFnKys7CisJICAgIH0KKwkgICAgaWYgKCFmbGFnKSBub3RzZXBidWZbbisrXSA9 IGM7CisJfQorCW5vdHNlcGJ1ZltuXSA9IE5VTDsKKwlub3RzZXAgPSAoY2hhciAqKW5vdHNlcGJ1 ZjsKKwlkZWJ1ZyhGMTEwLCJDS01BVENIIE5PVFNFUEJVRiBBTEwiLG5vdHNlcCwwKTsKKyAgICB9 CisgICAgaWYgKCpzICYmIGNzdikgewkJCS8qIEZvciBDU1Ygc2tpcCBsZWFkaW5nIHdoaXRlc3Bh Y2UgKi8KKyAgICAgICAgd2hpbGUgKCpzID09IFNQIHx8ICpzID09IEhUKQorCSAgcysrOworCWMg PSAqczsKKyAgICB9CisgICAgaWYgKG4yID09IDAgJiYgY3N2KSBuMiA9IDE7CQkvKiBDU1YgaW1w bGllcyBkb3VibGVxdW90ZSBncm91cGluZyAqLworICAgIGlmIChuMiA8IDApIG4yID0gNjM7CQkv KiBuMiA9IGdyb3VwaW5nIG1hc2sgKi8KKyAgICBncm91cGluZyA9IG4yOworICAgIHAgPSAiIjsJ CQkJLyogUG9pbnRlciB0byBjdXJyZW50IHdvcmQgKi8KKyAgICB3aGlsZSAoYykgewkJCQkvKiBM b29wIHRocm91Z2ggc3RyaW5nICovCisJYyA9ICpzOworCWNsYXNzID0gMDsKKwlpZiAoIWNzdiAm JiAhdHN2KSB7CQkvKiBmZGMgMjAxMC0xMi0zMCAqLworCSAgICAvKiBJbiBDU1YgYW5kIFRTViBz cGxpdHRpbmcsIGJhY2tzbGFzaCBpcyBub3Qgc3BlY2lhbCAqLworCSAgICBpZiAoIWNxdW90ZSAm JiBjID09IENNRFEpIHsJLyogSWYgQ01EUSAqLworCQljcXVvdGUrKzsJCS8qIG5leHQgb25lIGlz IHF1b3RlZCAqLworCQlnb3RvIG5leHRjOwkJLyogZ28gZ2V0IGl0ICovCisJICAgIH0KKworCX0K KwlpZiAoY3F1b3RlICYmIGMgPT0gQ01EUSkgewkvKiBRdW90ZWQgQ01EUSBpcyBzcGVjaWFsICov CisJICAgIGlmIChzdGF0ZSAhPSBTVF9CVykgewkvKiBiZWNhdXNlIGl0IGNhbiBzdGlsbCBzZXBh cmF0ZSAqLworCQljaGFyICogczIgPSBzLTE7CisJCXdoaWxlIChzMiA+IHApIHsgKnMyID0gKihz Mi0xKTsgczItLTsgfQorCQlwKys7CisJICAgIH0KKwkgICAgY3F1b3RlID0gMDsKKwl9CisJaWYg KGNxdW90ZSkgewkJCS8qIE90aGVyIHF1b3RlZCBjaGFyYWN0ZXIgKi8KKwkgICAgaWYgKHN0YXRl ICE9IFNUX0JXKSB7CS8qIGNhbid0IHNlcGFyYXRlIG9yIGdyb3VwICovCisJCWNoYXIgKiBzMiA9 IHMtMTsKKwkJd2hpbGUgKHMyID4gcCkgeyAqczIgPSAqKHMyLTEpOyBzMi0tOyB9CisJCXArKzsK KwkgICAgfQorCSAgICBjbGFzcyA9IENMX0RBVDsJCS8qIHNvIHRyZWF0IGl0IGFzIGRhdGEgKi8K KwkgICAgY3F1b3RlID0gMDsKKwkgICAgeCA9IDE7CisJfSBlbHNlIHsJCQkvKiBDaGFyYWN0ZXIg aXMgbm90IHF1b3RlZCAqLworCSAgICBpZiAoIWFsbCAmJiBjIDwgU1ApIHsJLyogR2V0IGl0cyBj bGFzcyAqLworCQl4ID0gMDsJCQkvKiB4ID09IDAgbWVhbnMgImlzIHNlcGFyYXRvciIgKi8KKwkg ICAgfSBlbHNlIGlmICgqc2VwKSB7CQkvKiBCcmVhayBzZXQgZ2l2ZW4gKi8KKwkJc3MgPSBzZXA7 CisJCXdoaWxlICgqc3MgJiYgKnNzICE9IGMpIHNzKys7IC8qIChpbnN0ZWFkIG9mIGNrc3RyY2hy KCkpICovCisJCXggPSAoKnNzICE9IGMpOworCSAgICB9IGVsc2UgewkJCS8qIERlZmF1bHQgYnJl YWsgc2V0IGlzICovCisJCXggPSAoKGMgPj0gJ2EnICYmIGMgPD0gJ3onKSB8fCAvKiBhbGwgYnV0 IGFscGhhbnVtZXJpY3MgKi8KKwkJICAgICAoYyA+PSAnMCcgJiYgYyA8PSAnOScpIHx8CisJCSAg ICAgKGMgPj0gJ0EnICYmIGMgPD0gJ1onKSB8fAorCQkgICAgICgodW5zaWduZWQgaW50KWMgPj0g aGV4ODAgJiYgKHVuc2lnbmVkIGludCljIDw9IGhleGZmKQorCQkgICAgICk7CisJICAgIH0KKwkg ICAgaWYgKHggPT0gMCAmJiAqbm90c2VwICYmIGMpIHsgLyogSW5jbHVkZSBzZXQgaWYgZ2l2ZW4g Ki8KKwkJc3MgPSBub3RzZXA7CisJCXdoaWxlICgqc3MgJiYgKnNzICE9IGMpIHNzKys7IC8qIChp bnN0ZWFkIG9mIGNrc3RyY2hyKCkpICovCisJCXggPSAoKnNzID09IGMpOworCSAgICB9CisJICAg IGlmIChjID09IG4zICYmIGdyb3VwaW5nICYmIHN0YXRlID09IFNUX0JXKSB7IC8qIEdyb3VwIHF1 b3RlPyAqLworCQljbGFzcyA9IENMX1FVTzsKKwkgICAgfSBlbHNlIHsKKwkJY2xhc3MgPSB4ID8g Q0xfREFUIDogQ0xfU0VQOyAvKiBDbGFzcyA9IGRhdGEgb3Igc2VwYXJhdG9yICovCisJICAgIH0K KwkgICAgaWYgKGdyb3VwaW5nKSB7CQkvKiBHcm91cGluZz8gKi8KKwkJaW50IGo7CQkJLyogTG9v ayBmb3IgZ3JvdXAgc3RhcnQgKi8KKwkJZm9yIChrID0gMDsgayA8IDY7IGsrKykgeyAvKiBHcm91 cC1zdGFydCBjaGFyPyAqLworCQkgICAgaiA9IDEgPDwgazsJCS8qIEdldCBpdHMgbWFzayBiaXQg dmFsdWUgKi8KKwkJICAgIGlmIChncm91cGluZyAmIGopIHsKKwkJCWlmIChjID09IGdyX29wbltr XSkgeyAvKiBTZWxlY3RlZCBncm91cCBvcGVuZXI/ICovCisJCQkgICAga28gPSBrOworCQkJICAg IGNsYXNzIHw9IENMX09QTjsKKwkJCSAgICBpZiAoYyA9PSAnIicgfHwgYyA9PSAnXCcnKSB7IC8q IFRoZXNlIGNhbiBhbHNvICovCisJCQkJY2xhc3MgfD0gQ0xfQ0xTOyAgICAgICAgIC8qIGJlIGNs b3NlcnMgKi8KKwkJCQlicmVhazsKKwkJCSAgICB9CisJCQl9IGVsc2UgaWYgKGMgPT0gZ3JfY2xz W2tdKSB7IC8qIEdyb3VwIGNsb3Nlcj8gKi8KKwkJCSAgICBjbGFzcyB8PSBDTF9DTFM7CisJCQkg ICAgYnJlYWs7CisJCQl9CisJCSAgICB9CisJCX0KKwkgICAgfQorCX0KKwlkZWJ1ZyhGMDAwLCJj a3NwbGl0IGNoYXIiLHMsYyk7CisJZGVidWcoRjEwMSwiY2tzcGxpdCBzdGF0ZSIsIiIsc3RhdGUp OworCWRlYnVnKEYxMDEsImNrc3BsaXQgY2xhc3MiLCIiLGNsYXNzKTsKKworCXN3aXRjaCAoc3Rh dGUpIHsJCS8qIFN0YXRlIHN3aXRjaGVyLi4uICovCisJICBjYXNlIFNUX0JXOgkJCS8qIEJFVFdF RU5XT1JEUyAqLworCSAgICBpZiAoY2xhc3MgJiBDTF9PUE4pIHsJLyogR3JvdXAgb3BlbmVyICov CisJCWlmIChncl9sdmwgPT0gMCAmJiAhZ3F1b3RlKSB7IC8qIElmIG5vdCBpbiBncm91cCAqLwor CQkgICAgcCA9IHM7CQkvKiBwb2ludCB0byBiZWdpbm5pbmcgb2Ygd29yZCAqLworCQl9CisJCWdy X2x2bCsrOwkJLyogUHVzaCBjbG9zZXIgb24gbmVzdGluZyBzdGFjayAqLworCQlpZiAoZ3JfbHZs ID49IE5FU1RNQVgpCisJCSAgZ290byB4eHNwbGl0OworCQlncl9zdGtbZ3JfbHZsXSA9IGdyX2Ns c1trb107CisJCXByZXZzdGF0ZSA9IHN0YXRlOworCQlzdGF0ZSA9IFNUX0lHOwkJLyogU3dpdGNo IHRvIElOR1JPVVAgc3RhdGUgKi8KKwkgICAgfSBlbHNlIGlmIChjbGFzcyAmIENMX0RBVCkgeyAv KiBEYXRhIGNoYXJhY3RlciAqLworCQlncl9sdmwgPSAwOwkJLyogQ2xlYXIgZ3JvdXAgbmVzdGlu ZyBzdGFjayAqLworCQlncl9zdGtbZ3JfbHZsXSA9IDA7CisJCWxlbiA9IDA7CisJCXAgPSBzOwkJ CS8qIFBvaW50IHRvIGJlZ2lubmluZyBvZiB3b3JkICovCisJCWlmIChncXVvdGUpIHsJCS8qIEFk anVzdCBmb3IgcXVvdGUgKi8KKwkJICAgIGxlbisrOworCQkgICAgcC0tOworCQkgICAgZ3F1b3Rl ID0gMDsKKwkJfQorCQlwcmV2c3RhdGUgPSBzdGF0ZTsKKwkJc3RhdGUgPSBTVF9JVzsJCS8qIFN3 aXRjaCB0byBJTldPUkQgc3RhdGUgKi8KKwkgICAgfSBlbHNlIGlmIChjbGFzcyAmIENMX1FVTykg eyAvKiBHcm91cCBxdW90ZSAqLworCQlncXVvdGUgPSBncl9sdmwrMTsJLyogUmVtZW1iZXIgcXVv dGVkIGxldmVsICovCisJCXAgPSBzIC0gMTsKKwkJbGVuID0gMTsKKwkgICAgfQorCSAgICBpZiAo Y29sbGFwc2UpCisJICAgICAgYnJlYWs7CisKKwkgIGNhc2UgU1RfSVc6CQkJLyogSU5XT1JEIChi dXQgbm90IGluIGEgZ3JvdXApICovCisJICAgIGlmIChjbGFzcyAmIENMX1NFUCkgewkvKiBFbmRz IG9uIGFueSBraW5kIG9mIHNlcGFyYXRvciAqLworCQkqcyA9IE5VTDsJCS8qIFRlcm1pbmF0ZSB0 aGlzIHdvcmQgKi8KKwkJaWYgKGNzdikgewkJLyogSWYgY29tbWEtc2VwYXJhdGVkIGxpc3QgKi8K KwkJICAgIGNoYXIgKiBzMiA9IHM7CS8qIGRpc2NhcmQgc3Vycm91bmRpbmcgc3BhY2VzICovCisJ CSAgICB3aGlsZSAoczIgPiBzcGxpdGJ1ZikgeyAvKiBmaXJzdCBiYWNrd2FyZHMuLi4gKi8KKwkJ CXMyLS07CisJCQlpZiAoKnMyID09IFNQIHx8ICpzMiA9PSBIVCkKKwkJCSAgKnMyID0gTlVMOwor CQkJZWxzZQorCQkJICBicmVhazsKKwkJICAgIH0KKwkJICAgIHMyID0gcysxOwkJLyogVGhlbiBm b3J3YXJkcy4uLiAqLworCQkgICAgd2hpbGUgKCpzMiAmJiAoKnMyID09IFNQIHx8ICpzMiA9PSBI VCkpCisJCSAgICAgICpzMisrOworCQkgICAgcyA9IHMyLTE7CisJCX0KKwkJaWYgKCFjc3YgfHwg cHJldnN0YXRlICE9IFNUX0lHKSB7CisJCSAgICB3b3JkbnVtKys7CQkgICAgICAvKiBDb3VudCBp dCAqLworCQkgICAgaWYgKHNwbGl0dGluZyB8fCBuIDwgMCkgeyAvKiBEaXNwb3NlIG9mIGl0IGFw cHJvcHJpYXRlbHkgKi8KKwkJCWlmICh3b3JkbnVtID4gbWF4KSB7ICAvKiBBZGQgdG8gYXJyYXkg aWYgc3BsaXR0aW5nICovCisJCQkgICAgY2tfc3ZhbC5hX3NpemUgPSAtMjsKKwkJCSAgICByZXR1 cm4oJmNrX3N2YWwpOworCQkJfQorCQkJLyogVGhpcyBpbmVsZWdhbnQgYml0IGNvcnJlY3RzIGFu IGVkZ2UgY29uZGl0aW9uICovCisJCQlpZiAoY3N2ICYmICEqcCAmJiAoIWMgfHwgISoocysxKSkp IHsKKwkJCSAgICB3b3JkbnVtLS07CisJCQl9IGVsc2UgeworCQkJICAgIHNldHdvcmQod29yZG51 bSxwLGxlbik7CisJCQl9CisJCSAgICB9IGVsc2UgaWYgKHdvcmRudW0gPT0gbikgeyAvKiBTZWFy Y2hpbmcgZm9yIHdvcmQgbiAqLworCQkJc2V0d29yZCgxLHAsbGVuKTsKKwkJCWNrX3N2YWwuYV9z aXplID0gMTsKKwkJCXJldHVybigmY2tfc3ZhbCk7CisJCSAgICB9CisJCX0KKwkJcHJldnN0YXRl ID0gc3RhdGU7CisJCXN0YXRlID0gU1RfQlc7CQkvKiBTd2l0Y2ggdG8gQkVUV0VFTldPUkRTIHN0 YXRlICovCisJCWxlbiA9IDA7CisJICAgIH0KKwkgICAgYnJlYWs7CisKKwkgIGNhc2UgU1RfSUc6 CQkJLyogSU5HUk9VUCAqLworCSAgICBpZiAoY2xhc3MgJiBDTF9DTFMpIHsJLyogSGF2ZSBncm91 cCBjbG9zZXI/ICovCisJCWlmIChjc3YpIHsKKwkJICAgIGlmICgqKHMrMSkgPT0gYykgeworCQkJ Y2hhciAqczIgPSBzOworCQkJd2hpbGUgKCgqczIgPSAqKHMyKzEpKSkgczIrKzsKKwkJCXMrKzsK KwkJCWMgPSAqczsKKwkJICAgIH0KKwkJfQorCQlpZiAoYyA9PSBncl9zdGtbZ3JfbHZsXSkgeyAv KiBEb2VzIGl0IG1hdGNoIGN1cnJlbnQgb3BlbmVyPyAqLworCQkgICAgZ3JfbHZsLS07CQkgICAv KiBZZXMsIHBvcCBzdGFjayAqLworCQkgICAgaWYgKGdyX2x2bCA8IDApCSAgIC8qIERvbid0IHBv cCBpdCB0b28gbXVjaCAqLworCQkgICAgICBncl9sdmwgPSAwOworCQkgICAgaWYgKGdyX2x2bCA9 PSAwKSB7CS8qIElmIGF0IHRvcCBvZiBzdGFjayAqLworCQkJaWYgKGdxdW90ZSkKKwkJCSAgcysr OworCQkJYyA9ICpzOworCQkJKnMgPSBOVUw7CS8qIHdlIGhhdmUgd29yZC4gKi8KKwkJCXdvcmRu dW0rKzsJLyogQ291bnQgYW5kIGRpc3Bvc2Ugb2YgaXQuICovCisJCQlsZW4tLTsKKwkJCWlmIChz cGxpdHRpbmcgfHwgbiA8IDApIHsKKwkJCSAgICBpZiAod29yZG51bSA+IG1heCkgeworCQkJCWNr X3N2YWwuYV9zaXplID0gLTI7CisJCQkJcmV0dXJuKCZja19zdmFsKTsKKwkJCSAgICB9CisJCQkg ICAgc2V0d29yZCh3b3JkbnVtLHArMSxsZW4pOworCQkJfSBlbHNlIGlmICh3b3JkbnVtID09IG4p IHsKKwkJCSAgICBzZXR3b3JkKDEscCsxLGxlbik7CisJCQkgICAgY2tfc3ZhbC5hX3NpemUgPSAx OworCQkJICAgIHJldHVybigmY2tfc3ZhbCk7CisJCQl9CisJCQlwcmV2c3RhdGUgPSBzdGF0ZTsK KwkJCXN0YXRlID0gU1RfQlc7CS8qIFN3aXRjaCB0byBCRVRXRUVOV09SRFMgc3RhdGUgKi8KKwkJ CWxlbiA9IDA7CisJCSAgICB9CisJCSAgICBpZiAoZ3JfbHZsIDwgZ3F1b3RlKQorCQkgICAgICBn cXVvdGUgPSAwOworCQl9CisJICAgIH0gZWxzZSBpZiAoY2xhc3MgJiBDTF9PUE4pIHsgLyogSGF2 ZSBncm91cCBvcGVuZXIgKi8KKwkJZ3JfbHZsKys7CQkgLyogUHVzaCBvbiBuZXN0aW5nIHN0YWNr ICovCisJCWlmIChncl9sdmwgPj0gTkVTVE1BWCkgZ290byB4eHNwbGl0OworCQlncl9zdGtbZ3Jf bHZsXSA9IGdyX2Nsc1trb107CisJICAgIH0KKwl9IC8qIHN3aXRjaCAqLworCisgICAgICBuZXh0 YzoKKwlzKys7CQkJCS8qIE5leHQgY2hhciAqLworCWlmIChzdGF0ZSkKKwkgIGxlbisrOworICAg IH0gLyogd2hpbGUgKGMpICovCisKKyAgICBpZiAoZ3JfbHZsID4gMCkgewkJCS8qIEluIGNhc2Ug b2YgYW4gdW5jbG9zZWQgZ3JvdXAgKi8KKwlpZiAoc3BsaXR0aW5nIHx8IG4gPCAwKSB7CS8qIG1h a2UgaXQgdGhlIGxhc3Qgd29yZC4gKi8KKwkgICAgaWYgKCsrd29yZG51bSA+IG1heCkgeworCQlj a19zdmFsLmFfc2l6ZSA9IC0yOworCQlyZXR1cm4oJmNrX3N2YWwpOworCSAgICB9CisJICAgIHNl dHdvcmQod29yZG51bSxwKzEsbGVuKTsKKwl9IGVsc2UgaWYgKHdvcmRudW0gPT0gbikgewkvKiBD b3VudGluZyBmcm9tIGxlZnQgKi8KKwkgICAgc2V0d29yZCgxLHArMSxsZW4pOworCSAgICBja19z dmFsLmFfc2l6ZSA9IDE7CisJICAgIHJldHVybigmY2tfc3ZhbCk7CisJfSBlbHNlIAlpZiAobiA8 IDAgJiYgKHdvcmRudW0gKyBuID4gLTEpKSB7IC8qIENvdW50aW5nIGZyb20gcmlnaHQgKi8KKwkg ICAgY2hhciAqIHMgPSB3b3JkYXJyYXlbd29yZG51bSArIG4gKyAxXTsKKwkgICAgaWYgKCFzKSBz ID0gIiI7CisJICAgIHNldHdvcmQoMSxzLHN0cmxlbihzKSk7CisJICAgIGNrX3N2YWwuYV9zaXpl ID0gMTsKKwkgICAgcmV0dXJuKCZja19zdmFsKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAo IXNwbGl0dGluZykgewkJCS8qIEZ3b3JkLi4uICovCisJaWYgKG4gPCAwICYmICh3b3JkbnVtICsg biA+IC0xKSkgeyAvKiBDb3VudGluZyBmcm9tIHJpZ2h0ICovCisJICAgIGNoYXIgKiBzID0gd29y ZGFycmF5W3dvcmRudW0gKyBuICsgMV07CisJICAgIGlmICghcykgcyA9ICIiOworCSAgICBzZXR3 b3JkKDEscyxzdHJsZW4ocykpOworCSAgICBja19zdmFsLmFfc2l6ZSA9IDE7CisJICAgIHJldHVy bigmY2tfc3ZhbCk7CisgICAgICAgIH0KKwlzZXR3b3JkKDEsTlVMTCwwKTsJCS8qIEZyb20gbGVm dC4uLiAqLworCWNrX3N2YWwuYV9zaXplID0gMDsJCS8qIGJ1dCB0aGVyZSB3ZXJlbid0IG4gd29y ZHMgKi8KKwlyZXR1cm4oJmNrX3N2YWwpOworICAgIH0gZWxzZSB7CQkJCS8qIFN1Y2NlZWQgb3Ro ZXJ3aXNlICovCisJY2tfc3ZhbC5hX3NpemUgPSB3b3JkbnVtOworLyogCisgIEFsd2F5cyBwdXQg YSBudWxsIGVsZW1lbnQgYXQgdGhlIGVuZCBvZiB0aGUgYXJyYXkuICBJdCBkb2VzIG5vIGhhcm0g aW4KKyAgdGhlIG5vcm1hbCBjYXNlLCBhbmQgaXQncyByZXF1aXJlZCBpZiB3ZSdyZSBtYWtpbmcg YW4gYXJndltdIGFycmF5IHRvIAorICBwYXNzIHRvIGV4ZWN2cCgpLiAgVGhpcyBlbGVtZW50IGlz IG5vdCBpbmNsdWRlZCBpbiB0aGUgY291bnQuCisqLworCWlmICh3b3JkbnVtIDwgTUFYV09SRFMp CisgICAgICAgICAgc2V0d29yZCh3b3JkbnVtKzEsTlVMTCwwKTsKKyAgICB9CisjaWZkZWYgREVC VUcKKyAgICBpZiAoZGVibG9nKSB7CisJZm9yIChpID0gMTsgaSA8PSB3b3JkbnVtOyBpKyspCisJ ICBkZWJ1ZyhGMTExLCJja3NwbGl0IHJlc3VsdCIsd29yZGFycmF5W2ldLGkpOworICAgIH0KKyNl bmRpZiAvKiBERUJVRyAqLworICAgIHJldHVybigmY2tfc3ZhbCk7CisKKyAgeHhzcGxpdDoJCQkJ LyogRXJyb3IgcmV0dXJuICovCisgICAgY2tfc3ZhbC5hX3NpemUgPSAtMjsKKyAgICByZXR1cm4o JmNrX3N2YWwpOworfQorCisvKgorICBja2hleGJ5dGV0b2ludCgpIGV4cGVjdHMgYSBzdHJpbmcg b2YgdHdvIGhleCBjaGFyYWN0ZXJzLAorICByZXR1cm5zIHRoZSBpbnQgZXF1aXZhbGVudCBvciAt MSBvbiBlcnJvci4KKyovCitpbnQKKyNpZmRlZiBDS19BTlNJQworY2toZXhieXRldG9pbnQoIGNo YXIgKiBzICkKKyNlbHNlCitja2hleGJ5dGV0b2ludChzKSBjaGFyICogczsKKyNlbmRpZgkvKiBD S19BTlNJQyAqLworeworICAgIGludCBpLCBjWzJdOworICAgIGlmICghcykgcmV0dXJuKC0xKTsK KyAgICBpZiAoKGludClzdHJsZW4ocykgIT0gMikgcmV0dXJuKC0xKTsKKyAgICBmb3IgKGkgPSAw OyBpIDwgMjsgaSsrKSB7CisJY1tpXSA9ICpzKys7CisJaWYgKCFjW2ldKSByZXR1cm4oLTEpOwor CWlmIChpc2xvd2VyKGNbaV0pKSBjW2ldID0gdG91cHBlcihjW2ldKTsKKwlpZiAoY1tpXSA+PSAn MCcgJiYgY1tpXSA8PSAnOScpIHsKKwkgICAgY1tpXSAtPSAweDMwOworCX0gZWxzZSBpZiAoY1tp XSA+PSAnQScgJiYgY1tpXSA8PSAnRicpIHsKKwkgICAgY1tpXSAtPSAweDM3OworCX0gZWxzZSB7 CisJICAgIHJldHVybigtMSk7CisJfQorICAgIH0KKyAgICByZXR1cm4oY1swXSAqIDE2ICsgY1sx XSk7Cit9CisKKworLyogRW5kIG9mIGNrY2xpYi5jICovCgpkaWZmIC0tZ2l0IGEvY2tlcm1pdC05 LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2NsaWIuaCBiL2NrZXJtaXQtOS4wLjMwMi1i dWlsZC9ja2VybWl0LTkuMC4zMDIvY2tjbGliLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMC4uYWYwOWMwZQotLS0gL2Rldi9udWxsCisrKyBiL2NrZXJtaXQtOS4wLjMwMi1idWls ZC9ja2VybWl0LTkuMC4zMDIvY2tjbGliLmgKQEAgLTAsMCArMSwxMDQgQEAKKy8qIGNrY2xpYi5o IC0tIEMtS2VybWl0IGxpYnJhcnkgcm91dGluZSBwcm90b3R5cGVzICovCisvKgorICBBdXRob3I6 IEZyYW5rIGRhIENydXogPGZkY0Bjb2x1bWJpYS5lZHU+LAorICBDb2x1bWJpYSBVbml2ZXJzaXR5 IEFjYWRlbWljIEluZm9ybWF0aW9uIFN5c3RlbXMsIE5ldyBZb3JrIENpdHkuCisKKyAgQ29weXJp Z2h0IChDKSAyMDAyLCAyMDA5LAorICAgIFRydXN0ZWVzIG9mIENvbHVtYmlhIFVuaXZlcnNpdHkg aW4gdGhlIENpdHkgb2YgTmV3IFlvcmsuCisgICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFNlZSB0 aGUgQy1LZXJtaXQgQ09QWUlORy5UWFQgZmlsZSBvciB0aGUKKyAgICBjb3B5cmlnaHQgdGV4dCBp biB0aGUgY2tjbWFpLmMgbW9kdWxlIGZvciBkaXNjbGFpbWVyIGFuZCBwZXJtaXNzaW9ucy4KKyov CisjaWZuZGVmIENLQ0xJQl9ICisjZGVmaW5lIENLQ0xJQl9ICisKK3N0cnVjdCBzdHJpbmdhcnJh eSB7CisgICAgY2hhciAqKiBhX2hlYWQ7CisgICAgaW50IGFfc2l6ZTsKK307CisKKyNpZmRlZiBD S19BTlNJQworX1BST1RPVFlQKCBpbnQgY2tzdHJuY3B5LCAoY2hhciAqLCBjb25zdCBjaGFyICos IGludCkgKTsKK19QUk9UT1RZUCggaW50IGNrc3RybmNhdCwgKGNoYXIgKiwgY29uc3QgY2hhciAq LCBpbnQpICk7CisjZWxzZQorX1BST1RPVFlQKCBpbnQgY2tzdHJuY3B5LCAoY2hhciAqLCBjaGFy ICosIGludCkgKTsKK19QUk9UT1RZUCggaW50IGNrc3RybmNhdCwgKGNoYXIgKiwgY2hhciAqLCBp bnQpICk7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKworX1BST1RPVFlQKCBpbnQgY2ttYWttc2cs ICAoY2hhciAqLCBpbnQsIGNoYXIgKiwgY2hhciAqLCBjaGFyICosIGNoYXIgKikgKTsKK19QUk9U T1RZUCggaW50IGNrbWFreG1zZywgKGNoYXIgKiwgaW50LAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgY2hhciAqLCBjaGFyICosIGNoYXIgKiwgY2hhciAqLCBjaGFyICosIGNoYXIgKiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiwgY2hhciAqLCBjaGFyICosIGNoYXIgKiwg Y2hhciAqLCBjaGFyICopICk7CisKK19QUk9UT1RZUCggY2hhciAqIGNrc3RycGJyaywgKGNoYXIg KiwgY2hhciAqKSApOworX1BST1RPVFlQKCBjaGFyICogY2tzdHJzdHIsIChjaGFyICosIGNoYXIg KikgKTsKK19QUk9UT1RZUCggY2hhciAqIGNoYXJ0b3N0ciwgKGludCkgKTsKK19QUk9UT1RZUCgg aW50IGNrbG93ZXIsIChjaGFyICopICk7CitfUFJPVE9UWVAoIGludCBja3VwcGVyLCAoY2hhciAq KSApOworX1BST1RPVFlQKCBpbnQgY2tpbmRleCwgKGNoYXIgKiwgY2hhciAqLCBpbnQsIGludCwg aW50KSApOworX1BST1RPVFlQKCBjaGFyICogY2tjdG9hLCAoY2hhcikgKTsKK19QUk9UT1RZUCgg Y2hhciAqIGNrY3RveCwgKENIQVIsIGludCkgKTsKK19QUk9UT1RZUCggY2hhciAqIGNraXRvYSwg KGludCkgKTsKK19QUk9UT1RZUCggY2hhciAqIGNrdWl0b2EsICh1bnNpZ25lZCBpbnQpICk7Citf UFJPVE9UWVAoIGNoYXIgKiBja2x0b2EsIChsb25nKSApOworX1BST1RPVFlQKCBjaGFyICogY2t1 bHRvYSwgKHVuc2lnbmVkIGxvbmcpICk7CitfUFJPVE9UWVAoIGNoYXIgKiBja2ZzdG9hLCAoQ0tf T0ZGX1QpICk7CitfUFJPVE9UWVAoIENLX09GRl9UIGNrYXRvZnMsIChjaGFyICopICk7CitfUFJP VE9UWVAoIGNoYXIgKiBja2l0b3gsIChpbnQpICk7CitfUFJPVE9UWVAoIGNoYXIgKiBja2x0b3gs IChsb25nKSApOworX1BST1RPVFlQKCBpbnQgaXNwYXR0ZXJuLCAoY2hhciAqKSApOworX1BST1RP VFlQKCBpbnQgY2ttYXRjaCwgKGNoYXIgKiwgY2hhciAqLCBpbnQsIGludCApICk7CitfUFJPVE9U WVAoIFZPSUQgY2ttZW1jcHksIChjaGFyICosIGNoYXIgKiwgaW50KSApOworX1BST1RPVFlQKCBj aGFyICogY2tzdHJjaHIsIChjaGFyICosIGNoYXIpICk7CitfUFJPVE9UWVAoIGNoYXIgKiBja3N0 cnJjaHIsIChjaGFyICosIGNoYXIpICk7CitfUFJPVE9UWVAoIGludCBja3JjaGFyLCAoY2hhciAq KSApOworX1BST1RPVFlQKCBpbnQgY2tzdHJjbXAsIChjaGFyICosIGNoYXIgKiwgaW50LCBpbnQp ICk7CisjZGVmaW5lIHh4c3RyY21wKGEsYixjKSBja3N0cmNtcChhLGIsYywwKQorX1BST1RPVFlQ KCBpbnQgY2tzdHJwcmUsIChjaGFyICosIGNoYXIgKikgKTsKK19QUk9UT1RZUCggVk9JRCBzaF9z b3J0LCAoY2hhciAqKiwgY2hhciAqKiwgaW50LCBpbnQsIGludCwgaW50KSApOworX1BST1RPVFlQ KCBjaGFyICogYnJzdHJpcCwgKGNoYXIgKikgKTsKK19QUk9UT1RZUCggY2hhciAqIGZuc3RyaXAs IChjaGFyICopICk7CisjaWZkZWYgQ09NTUVOVAorX1BST1RPVFlQKCBjaGFyICogYnJhY2UsIChj aGFyICopICk7CisjZW5kaWYgLyogQ09NTUVOVCAqLworX1BST1RPVFlQKCBpbnQgZHF1b3RlLCAo Y2hhciAqLCBpbnQsIGludCkgKTsKK19QUk9UT1RZUCggaW50IHVudGFiaWZ5LCAoY2hhciAqLCBj aGFyICosIGludCkgKTsKK19QUk9UT1RZUCggVk9JRCBtYWtlbGlzdCwgKGNoYXIgKiwgY2hhciAq W10sIGludCkgKTsKKyNpZm5kZWYgQ0tfQU5TSUMKK19QUk9UT1RZUCggVk9JRCBtYWtlc3RyLCAo Y2hhciAqKiwgY2hhciAqKSApOworX1BST1RPVFlQKCBWT0lEIHhtYWtlc3RyLCAoY2hhciAqKiwg Y2hhciAqKSApOworI2Vsc2UgLyogQ0tfQU5TSUMgKi8KK19QUk9UT1RZUCggVk9JRCBtYWtlc3Ry LCAoY2hhciAqKiwgY29uc3QgY2hhciAqKSApOworX1BST1RPVFlQKCBWT0lEIHhtYWtlc3RyLCAo Y2hhciAqKiwgY29uc3QgY2hhciAqKSApOworI2VuZGlmIC8qIENLX0FOU0lDICovCitfUFJPVE9U WVAoIGludCBjaGtudW0sIChjaGFyICopICk7CitfUFJPVE9UWVAoIGludCByZGlnaXRzLCAoY2hh ciAqKSApOworX1BST1RPVFlQKCBjaGFyICogY2tyYWRpeCwgKGNoYXIgKixpbnQsaW50KSApOwor CisvKiBCYXNlLTY0IGNvbnZlcnNpb24gbmVlZGVkIGZvciBzY3JpcHQgcHJvZ3JhbW1pbmcgYW5k IEhUVFAgKi8KKworI2lmbmRlZiBOT0I2NAorX1BST1RPVFlQKCBpbnQgYjh0b2I2NCwgKGNoYXIg KixpbnQsY2hhciAqLGludCkpOworX1BST1RPVFlQKCBpbnQgYjY0dG9iOCwgKGNoYXIgKixpbnQs Y2hhciAqLGludCkpOworI2VuZGlmIC8qIE5PQjY0ICovCisKKyNpZmRlZiBDS0ZMT0FUCitfUFJP VE9UWVAoIGludCBpc2Zsb2F0LCAoY2hhciAqLGludCkgKTsKKyNpZm5kZWYgQ0tDTElCX0MKKyNp Zm5kZWYgQ0tXQVJUX0MKK2V4dGVybiBDS0ZMT0FUIGZsb2F0dmFsOworI2VuZGlmIC8qIENLV0FS VF9DICovCisjZW5kaWYgLyogQ0tDTElCX0MgKi8KKyNlbmRpZiAvKiBDS0ZMT0FUICovCisKK19Q Uk9UT1RZUCggY2hhciAqIHBhcm5hbSwgKGNoYXIpICk7CitfUFJPVE9UWVAoIGNoYXIgKmhobW1z cywgKGxvbmcpICk7CisKK19QUk9UT1RZUCggVk9JRCBsc2V0LCAoY2hhciAqLCBjaGFyICosIGlu dCwgaW50KSApOworX1BST1RPVFlQKCBWT0lEIHJzZXQsIChjaGFyICosIGNoYXIgKiwgaW50LCBp bnQpICk7CitfUFJPVE9UWVAoIGNoYXIgKiB1bG9uZ3RvaGV4LCAodW5zaWduZWQgbG9uZywgaW50 KSApOworX1BST1RPVFlQKCBsb25nIGhleHRvdWxvbmcsIChjaGFyICosIGludCkgKTsKK19QUk9U T1RZUCggc3RydWN0IHN0cmluZ2FycmF5ICogY2tzcGxpdCwgKGludCxpbnQsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICosY2hhciAqLGNoYXIgKixpbnQs aW50LGludCkgKTsKKworX1BST1RPVFlQKCBpbnQgY2toZXhieXRldG9pbnQsIChjaGFyICopICk7 CisjZW5kaWYgLyogQ0tDTElCX0ggKi8KCmRpZmYgLS1naXQgYS9ja2VybWl0LTkuMC4zMDItYnVp bGQvY2tlcm1pdC05LjAuMzAyL2NrY21haS5jIGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJt aXQtOS4wLjMwMi9ja2NtYWkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5m NjVkMGEwCi0tLSAvZGV2L251bGwKKysrIGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQt OS4wLjMwMi9ja2NtYWkuYwpAQCAtMCwwICsxLDM1ODAgQEAKKyNkZWZpbmUgRURJVERBVEUgICIy MCBBdWcgMjAxMSIJCS8qIExhc3QgZWRpdCBkYXRlIGRkIG1tbSB5eXl5ICovCisjZGVmaW5lIEVE SVROREFURSAiMjAxMTA4MjAiCQkvKiBLZWVwIHRoZW0gaW4gc3luYyAqLworLyogU2F0IEF1ZyAy MCAxNzoyMDoxNyAyMDExICovCisKKy8qIGNrY21haS5jIC0gTWFpbiBwcm9ncmFtIGZvciBDLUtl cm1pdCBwbHVzIHNvbWUgbWlzY2VsbGFuZW91cyBmdW5jdGlvbnMgKi8KKworLyoKKyAgY2tjc3lt LmggaXMgdXNlZCBmb3IgZm9yIGRlZmluaW5nIHN5bWJvbHMgdGhhdCBub3JtYWxseSB3b3VsZCBi ZSBkZWZpbmVkCisgIHVzaW5nIC1EIG9yIC1kIG9uIHRoZSBjYyBjb21tYW5kIGxpbmUsIGZvciB1 c2Ugd2l0aCBjb21waWxlcnMgdGhhdCBkb24ndAorICBzdXBwb3J0IHRoaXMgZmVhdHVyZS4gIE11 c3QgY29tZSBiZWZvcmUgYW55IHRlc3RzIGZvciBwcmVwcm9jZXNzb3Igc3ltYm9scy4KKyovCisj aW5jbHVkZSAiY2tjc3ltLmgiCisvKgorICBDb25zb2xpZGF0ZWQgcHJvZ3JhbSBDLUtlcm1pdCB2 ZXJzaW9uIGluZm9ybWF0aW9uIGZvciBhbGwgcGxhdGZvcm1zCisgIChidXQgZm9yIFVOSVggYWxz byBzZWUgY2t1dmVyLmgpLiAgU2VlIG1ha2V2ZXIoKSBiZWxvdyBmb3IgaG93IHRoZXkgYXJlIHVz ZWQuCisqLworI2lmZGVmIENPTU1FTlQgICAgICAgICAgICAgICAgICAgIC8qIFVuY29tbWVudCB0 aGlzIGZvciByZWFsIEs5NSB2ZXJzaW9uICovCisjaWZuZGVmIE9TMgkJCQkvKiBPUzIgYWN0dWFs bHkgbWVhbnMgS2VybWl0IDk1LiAqLworI2lmbmRlZiBCRVRBVEVTVAkJCS8qIEl0J3MgYmVjYXVz ZSBLZXJtaXQgOTUgc3RhcnRlZCAqLworI2RlZmluZSBCRVRBVEVTVAkJCS8qIG91dCBhcyBDLUtl cm1pdCBmb3IgT1MvMi4gKi8KKyNlbmRpZiAvKiBCRVRBVEVTVCAqLworI2VuZGlmIC8qIE9TMiAq LworI2VuZGlmIC8qIENPTU1FTlQgKi8KKworI2lmZGVmIEJFVEFURVNUCisjaWZkZWYgT1MyCisj aWZkZWYgX19EQVRFX18KKyNkZWZpbmUgQkVUQURBVEUKKyNlbmRpZiAvKiBfX0RBVEVfXyAqLwor I2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIEJFVEFURVNUICovCisKK2NoYXIgKiBja19jcnll YXIgPSAiMjAxMSI7IAkJLyogQy1LZXJtaXQgY29weXJpZ2h0IHllYXIgKi8KKworI2lmbmRlZiBN QUMJCQkJLyogTUFDID0gS2VybWl0IGZvciBNQUMgT1MgNiwgNywgLi4uICovCisvKgorICBOb3Rl OiBpbml0aWFsaXplIGNrX3NfdGVzdCB0byAiIiBpZiB0aGlzIGlzIG5vdCBhIHRlc3QgdmVyc2lv bi4KKyAgVXNlICgqY2tfc190ZXN0ICE9ICdcMCcpIHRvIGRlY2lkZSB3aGV0aGVyIHRvIHByaW50 IHRlc3QtcmVsYXRlZCBtZXNzYWdlcy4KKyovCisKKyNpZm5kZWYgQkVUQVRFU1QKKyNpZm5kZWYg T1MyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVTklYLCBWTVMsIGV0Yy4uLiAoaS5l LiBDLUtlcm1pdCkgKi8KK2NoYXIgKmNrX3NfdGVzdCA9ICIiOwkJCS8qICJEZXYiLCJBbHBoYSIs IkJldGEiLCJSQyIsIG9yICIiICovCitjaGFyICpja19zX3R2ZXIgPSAiIjsJCQkvKiBUZXN0IHZl cnNpb24gbnVtYmVyIG9yICIiICovCisjZWxzZSAgLyogT1MyICovCitjaGFyICpja19zX3Rlc3Qg PSAiIjsJCQkvKiAoaS5lLiBLOTUpICovCitjaGFyICpja19zX3R2ZXIgPSAiIjsKKyNlbmRpZiAv KiBPUzIgKi8KKyNlbHNlCitjaGFyICpja19zX3Rlc3QgPSAiIjsJCQkvKiBEZXZlbG9wbWVudCAq LworY2hhciAqY2tfc190dmVyID0gIiI7CisjZW5kaWYgLyogQkVUQVRFU1QgKi8KKyNlbHNlIC8q IE1BQyAqLworY2hhciAqY2tfc190ZXN0ID0gIlByZS1BbHBoYSI7ICAgICAgICAgIC8qIE1hYyBL ZXJtaXQgaXMgYWx3YXlzIGEgdGVzdC4uLiAqLworY2hhciAqY2tfc190dmVyID0gIiI7CQkJLyog KHByZSBNYWMgT1MgWCAxMCwgdGhhdCBpcyEpICovCisjZW5kaWYgLyogTUFDICovCisKKyNpZmRl ZiBCRVRBREFURSAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEYXRlIG9mIHRoaXMgdmVyc2lv biBvciBlZGl0ICovCitjaGFyICpja19zX2RhdGUgPSBfX0RBVEVfXzsgICAgICAgICAgICAgLyog Q29tcGlsYXRpb24gZGF0ZSAqLworI2Vsc2UKK2NoYXIgKmNrX3NfZGF0ZSA9IEVESVREQVRFOwkJ LyogU2VlIHRvcCAqLworCisjZW5kaWYgLyogQkVUQURBVEUgKi8KK2NoYXIgKmJ1aWxkaWQgPSBF RElUTkRBVEU7CQkvKiBTZWUgdG9wICovCisKKyNpZmRlZiBVTklYCitzdGF0aWMgY2hhciBzY2Nz aWRbXSA9ICJAKCMpQy1LZXJtaXQgOS4wLjMwMiI7CisjZW5kaWYgLyogVU5JWCAqLworCisvKgor ICBUaGUgQy1LZXJtaXQgVmVyc2lvbiBudW1iZXIgaXMgbWFqb3IubWlub3IuZWRpdCAoaW50ZWdl cnMpLgorICBNYWpvciB2ZXJzaW9uIGFsd2F5cyBnb2VzIHVwLgorICBNaW5vciB2ZXJzaW9uIGlz IGhpc3RvcmljYWwsIGhhc24ndCBiZWVuIHVzZWQgc2luY2UgQy1LZXJtaXQgNy4xLgorICBFZGl0 IGlzIHNlcXVlbnRpYWwsIGFsd2F5cyBnb2VzIHVwLCBidXQgdGhlcmUgY2FuIGJlIGdhcHMuCisg IEZvciBleGFtcGxlIHRoZXJlIG1pZ2h0IGJlIG1hbnkgZWRpdHMgYmV0d2VlbiByZWxlYXNlcy4K KyAgSWYgdGhlIG1ham9yIGdvZXMgdG8gMTAsIHNvbWUgdmVyc2lvbi1udW1iZXItYmFzZWQgZmVh dHVyZSB0ZXN0cworICBjb3VsZCBmYWlsLiAgSXQgbWlnaHQgYmUgYmV0dGVyIHRvIHVzZSB0aGUg bWlub3IgdmVyc2lvbiBmaWVsZAorICBmb3IgZnV0dXJlIHJlbGVhc2VzLgorKi8KKworY2hhciAq Y2tfc192ZXIgPSAiOS4wLjMwMiI7ICAgICAgICAgICAgIC8qIEMtS2VybWl0IHZlcnNpb24gc3Ry aW5nICovCitsb25nICBja19sX3ZlciA9ICA5MDAzMDJMOyAgICAgICAgICAgICAgLyogQy1LZXJt aXQgdmVyc2lvbiBudW1iZXIgKi8KKworI2lmZGVmIE9TMgorY2hhciAqY2tfc194dmVyID0gIjMu MC4wIjsJCS8qIFByb2R1Y3Qtc3BlY2lmaWMgdmVyc2lvbiBzdHJpbmcgKi8KK2xvbmcgIGNrX2xf eHZlciA9IDMwMDBMOyAgICAgICAgICAgICAgICAvKiBQcm9kdWN0LXNwZWNpZmljIHZlcnNpb24g bnVtYmVyICovCisjZWxzZQorI2lmZGVmIE1BQworY2hhciAqY2tfc194dmVyID0gIjAuOTk1Ijsg ICAgICAgICAgICAgIC8qIFByb2R1Y3Qtc3BlY2lmaWMgdmVyc2lvbiBzdHJpbmcgKi8KK2xvbmcg IGNrX2xfeHZlciA9IDk5NUw7ICAgICAgICAgICAgICAgICAvKiBQcm9kdWN0LXNwZWNpZmljIHZl cnNpb24gbnVtYmVyICovCisjZWxzZQorY2hhciAqY2tfc194dmVyID0gIiI7ICAgICAgICAgICAg ICAgICAgIC8qIERvbid0IHRvdWNoIHRoZXNlLi4uICovCitsb25nICBja19sX3h2ZXIgPSAwTDsg ICAgICAgICAgICAgICAgICAgLyogdGhleSBhcmUgY29tcHV0ZWQgYXQgcnVudGltZSAqLworI2Vu ZGlmIC8qIE1BQyAqLworI2VuZGlmIC8qIE9TMiAqLworCisjaWZkZWYgT1MyCisjaWZkZWYgSUtT RE9OTFkKKyNpZmRlZiBOVAorY2hhciAqY2tfc19uYW1lID0gIklLUy1OVCI7CisjZWxzZSAvKiBO VCAqLworY2hhciAqY2tfc19uYW1lID0gIklLUy1PUy8yIjsKKyNlbmRpZiAvKiBOVCAqLworI2Vs c2UgLyogSUtTRE9OTFkgKi8KK2NoYXIgKmNrX3NfbmFtZSA9ICJLZXJtaXQgOTUiOyAgICAgICAg ICAvKiBQcm9ncmFtIG5hbWUgKi8KKyNlbmRpZiAvKiBJS1NET05MWSAqLworI2Vsc2UKKyNpZmRl ZiBNQUMKK2NoYXIgKmNrX3NfbmFtZSA9ICJNYWMgS2VybWl0IjsKKyNlbHNlCitjaGFyICpja19z X25hbWUgPSAiQy1LZXJtaXQiOworI2VuZGlmIC8qIE1BQyAqLworI2VuZGlmIC8qIE9TMiAqLwor CitjaGFyICpja19zX3dobyA9ICIiOyAgICAgICAgICAgICAgICAgICAgLyogV2hlcmUgY3VzdG9t aXplZCwgIiIgPSBub3QuICovCitjaGFyICpja19wYXRjaCA9ICIiOyAgICAgICAgICAgICAgICAg ICAgLyogUGF0Y2ggaW5mbywgaWYgYW55LiAqLworCisjZGVmaW5lIENLVkVSTEVOIDEyOAorY2hh ciB2ZXJzaW94W0NLVkVSTEVOXTsgICAgICAgICAgICAgICAgIC8qIFZlcnNpb24gc3RyaW5nIGJ1 ZmZlciAgKi8KK2NoYXIgKnZlcnNpbyA9IHZlcnNpb3g7ICAgICAgICAgICAgICAgICAvKiBUaGVz ZSBhcmUgZmlsbGVkIGluIGF0ICovCitsb25nIHZlcm51bSwgeHZlcm51bTsgICAgICAgICAgICAg ICAgICAgLyogcnVudGltZSBmcm9tIGFib3ZlLiAgICAqLworCisjZGVmaW5lIENLQ01BSQorCisj aW5jbHVkZSAiY2tjYXNjLmgiICAgICAgICAgICAgICAgICAgICAgLyogQVNDSUkgY2hhcmFjdGVy IHN5bWJvbHMgKi8KKyNpbmNsdWRlICJja2NkZWIuaCIgICAgICAgICAgICAgICAgICAgICAvKiBE ZWJ1ZyAmIG90aGVyIHN5bWJvbHMgKi8KKworY2hhciAqIG15bmFtZSA9IE5VTEw7ICAgICAgICAg ICAgICAgICAgIC8qIFRoZSBuYW1lIEkgYW0gY2FsbGVkIGJ5ICovCisjaWZuZGVmIE9TMgorY2hh ciAqIGV4ZWRpciA9IE5VTEw7ICAgICAgICAgICAgICAgICAgIC8qIERpcmVjdG9yeSBJIHdhcyBl eGVjdXRlZCBmcm9tICovCisjZW5kaWYgLyogT1MyICovCitjaGFyICogbXlob21lID0gTlVMTDsJ CQkvKiBIb21lIGRpcmVjdG9yeSBvdmVycmlkZSAqLworCisvKiAgQyBLIEMgTSBBIEkgIC0tICBD LUtlcm1pdCBNYWluIHByb2dyYW0gICovCisKKy8qCisgIEF1dGhvcjogRnJhbmsgZGEgQ3J1eiAo ZmRjQGNvbHVtYmlhLmVkdSksCisgIENvbHVtYmlhIFVuaXZlcnNpdHkgaW4gdGhlIGNpdHkgb2Yg TmV3IFlvcmssCisgIENvbXB1dGVyIENlbnRlciAvIENlbnRlciBmb3IgQ29tcHV0aW5nIEFjdGl2 aXRpZXMgLyBJbmZvcm1hdGlvbiBUZWNobm9sb2d5LgorICBJIGFtIG5vIGxvbmdlciBhdCBDb2x1 bWJpYSBVIGFzIG9mIDEgSnVseSAyMDExLCBidXQgdGhlIGVtYWlsIGFkZHJlc3MKKyAgc2hvdWxk IHN0aWxsIHdvcmsuICBUaGUgS2VybWl0IHdlYnNpdGUgaHR0cDovL2tlcm1pdC5jb2x1bWJpYS5l ZHUgc2hvdWxkCisgIHN0aWxsIGJlIGF2YWlsYWJsZSBhbmQgdW5kZXIgbXkgY29udHJvbCwgYXMg d2VsbCBhcyB0aGUgS2VybWl0IEZUUCBzaXRlLAorICBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1 L2tlcm1pdC8uCisKK0NPUFlSSUdIVCBOT1RJQ0U6CisqLworCitjaGFyICpjb3B5cmlnaHRbXSA9 IHsKKworI2lmZGVmIHBkcDExCisiQ29weXJpZ2h0IChDKSAxOTg1LCAlcywgVHJ1c3RlZXMgb2Yg Q29sdW1iaWEgVW5pdmVyc2l0eSwgTllDLiIsCisiQWxsIHJpZ2h0cyByZXNlcnZlZC4iLAorIiAi LAorI2Vsc2UKKyJDb3B5cmlnaHQgKEMpIDE5ODUsICVzLCIsCisiICBUaGUgVHJ1c3RlZXMgb2Yg Q29sdW1iaWEgVW5pdmVyc2l0eSBpbiB0aGUgQ2l0eSBvZiBOZXcgWW9yay4iLAorIiAgQWxsIHJp Z2h0cyByZXNlcnZlZC4iLAorIiAiLAorIlJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCIsCisibW9kaWZpY2F0aW9uLCBhcmUg cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIiwKKyJhcmUg bWV0OiIsCisiICIsCisiICsgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0 YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQiLAorIiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4iLAorIiAiLAorIiArIFJlZGlzdHJp YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0 IiwKKyIgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n IGRpc2NsYWltZXIgaW4iLAorIiAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUiLAorIiAgIGRpc3RyaWJ1dGlvbi4iLAorIiAiLAorIiAr IE5laXRoZXIgdGhlIG5hbWUgb2YgQ29sdW1iaWEgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9m IGl0cyIsCisiICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90 ZSBwcm9kdWN0cyBkZXJpdmVkIiwKKyIgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIiwKKyIgIiwKKyJUSElTIFNPRlRXQVJFIElT IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIiwKKyJc IkFTIElTXCIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H LCBCVVQgTk9UIiwKKyJMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IiLAorIkEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIiwKKyJIT0xERVIgT1Ig Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U QUwsIiwKKyJTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D TFVESU5HLCBCVVQgTk9UIiwKKyJMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwiLAorIkRBVEEsIE9SIFBST0ZJVFM7IE9S IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSIsCisiVEhF T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg T1IgVE9SVCIsCisiKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIiwKKyJPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiIsCisjZW5kaWYgLyogcGRw MTEgKi8KKworI2lmZGVmIE9TMgorIlBvcnRpb25zIENvcHlyaWdodCAoQykgMjAwMi0yMDA1LCBT ZWN1cmUgRW5kcG9pbnRzIEluYywgTmV3IFlvcmsgTlkgVVNBLiIsCisiUG9ydGlvbnMgQ29weXJp Z2h0IChDKSAxOTk1LCBPeSBPbmxpbmUgU29sdXRpb25zIEx0ZC4sIEp5dmFza3lsYSwgRmlubGFu ZC4iLAorI2VuZGlmIC8qIE9TMiAqLworCisjaWZkZWYgQ0tfQVVUSEVOVElDQVRJT04KKyJQb3J0 aW9ucyBDb3B5cmlnaHQgKEMpIDE5OTAsIE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hu b2xvZ3kuIiwKKyNpZmRlZiBDS19FTkNSWVBUSU9OCisiUG9ydGlvbnMgQ29weXJpZ2h0IChDKSAx OTkxLCAxOTkzIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4iLAorIlBv cnRpb25zIENvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSBieSBBVCZU LiIsCisiUG9ydGlvbnMgQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk3LCBFcmljIFlvdW5nIDxlYXlA Y3J5cHRvc29mdC5jb20+LiIsCisjZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLworI2lmZGVmIENL X1NSUAorIlBvcnRpb25zIENvcHlyaWdodCAoQykgMTk5NywgU3RhbmZvcmQgVW5pdmVyc2l0eS4i LAorI2VuZGlmIC8qIENLX1NSUCAqLworI2VuZGlmIC8qIENLX0FVVEhFTlRJQ0FUSU9OICovCisK KyNpZm5kZWYgcGRwMTEKKyIgIiwKKyJGb3IgZnVydGhlciBpbmZvcm1hdGlvbiwgdmlzaXQgdGhl IEtlcm1pdCBQcm9qZWN0IHdlYnNpdGU6IiwKKyJodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvIC4iLAorI2VuZGlmIC8qIHBkcDExICovCisiIn07CisKKy8qIFdpbmRvd3MgSUtTRCBjb3B5 cmlnaHQgdXNlZCB0byBiZSBzZXBhcmF0ZSAqLworY2hhciAqd2lrc2RjcHIgPSAoY2hhciAqKSBj b3B5cmlnaHQ7CisKKworLyoKK0RPQ1VNRU5UQVRJT046CisKKyAiVXNpbmcgQy1LZXJtaXQiIGJ5 IEZyYW5rIGRhIENydXogYW5kIENocmlzdGluZSBNLiBHaWFub25lLAorICBEaWdpdGFsIFByZXNz IC8gQnV0dGVyd29ydGgtSGVpbmVtYW5uLCBXb2J1cm4gTUEsIFVTQS4KKyAgU2Vjb25kIGVkaXRp b24gKDE5OTcpLCBJU0JOIDEtNTU1NTgtMTY0LTEuCisgIE9yZGVyIGZyb20gRGlnaXRhbCBQcmVz czogICAgKzEgKDgwMCkgMzY2LTI2NjUKKyAgT3IgZnJvbSBDb2x1bWJpYSBVbml2ZXJzaXR5OiAr MSAoMjEyKSA4NTQtMzcwMworCitGb3IgS2VybWl0IDk1LCBhbHNvOgorCisgICJLZXJtaXQgOTUi IGJ5IENocmlzdGluZSBNLiBHaWFub25lIGFuZCBGcmFuayBkYSBDcnV6LAorICBNYW5uaW5nIFB1 YmxpY2F0aW9ucywgR3JlZW53aWNoIENULCBVU0EgKDE5OTgpIC0gT25saW5lLgorCitBQ0tOT1dM RURHTUVOVFM6CisKKyAgVGhlIEtlcm1pdCBmaWxlIHRyYW5zZmVyIHByb3RvY29sIHdhcyBkZXZl bG9wZWQgYXQgdGhlIENvbHVtYmlhIFVuaXZlcnNpdHkKKyAgQ2VudGVyIGZvciBDb21wdXRpbmcg QWN0aXZpdGllcyAoQ1VDQ0EpLCB3aGljaCB3YXMgc2luY2UgcmVuYW1lZCB0byBDb2x1bWJpYQor ICBVbml2ZXJzaXR5IEFjYWRlbWljIEluZm9ybWF0aW9uIFN5c3RlbXMgKEFjSVMpIGFuZCBhZnRl ciB0aGF0IENvbHVtYmlhCisgIFVuaXZlcnNpdHkgSW5mb3JtYXRpb24gVGVjaG5vbG9neSAoQ1VJ VCkuICBLZXJtaXQgaXMgbmFtZWQgYWZ0ZXIgS2VybWl0IHRoZQorICBGcm9nLCBzdGFyIG9mIHRo ZSB0ZWxldmlzaW9uIHNlcmllcyBUSEUgTVVQUEVUIFNIT1c7IHRoZSBuYW1lIGlzIHVzZWQgYnkK KyAgcGVybWlzc2lvbiBvZiBIZW5zb24gQXNzb2NpYXRlcywgSW5jLgorCisgIFRoYW5rcyB0byBh dCBsZWFzdCB0aGUgZm9sbG93aW5nIHBlb3BsZSBmb3IgdGhlaXIgY29udHJpYnV0aW9ucyB0byB0 aGlzCisgIHByb2dyYW0gb3ZlciB0aGUgeWVhcnMsIGFuZCBhcG9sb2dpZXMgdG8gYW55b25lIHdo byB3YXMgaW5hZHZlcnRhbnRseQorICBvbWl0dGVkOgorCisgICBDaHJpcyBBZGllLCBFZGluYnVy Z2ggVSwgU2NvdGxhbmQgKE9TLzIpCisgICBSb2JlcnQgQWRzZXR0LCBVbml2ZXJzaXR5IG9mIFdh dGVybG9vLCBDYW5hZGEKKyAgIExhcnJ5IEFmcmluLCBDbGVtc29uIFUKKyAgIFJ1c3MgQWxsYmVy eSwgU3RhbmZvcmQgVQorICAgSmVmZnJleSBBbHRtYW4sIENvbHVtYmlhIFVuaXZlcnNpdHkKKyAg IEdyZWcgQW5kcmV3cywgVGVsZWJpdCBDb3JwCisgICBCYXJyeSBBcmNoZXIsIFUgb2YgTWlzc291 cmkKKyAgIFJvYmVydCBBbmRlcnNzb24sIEludGVybmF0aW9uYWwgU3lzdGVtcyBBL1MsIE9zbG8s IE5vcndheQorICAgQ2hyaXMgQXJtc3Ryb25nLCBCcm9va2hhdmVuIE5hdGlvbmFsIExhYiAoT1Mv MikKKyAgIFdpbGxpYW0gQmFkZXIsIFNvZnR3YXJlIENvbnN1bHRpbmcgU2VydmljZXMsIE5hemFy ZXRoLCBQQQorICAgRnVhdCBCYXJhbiwgQ29sdW1iaWEgVQorICAgU3RhbiBCYXJiZXIsIFJpY2Ug VQorICAgSmltIEJhcmJvdXIsIFUgb2YgQ29sb3JhZG8KKyAgIERvbm4gQmF1bWdhcnRuZXIsIERl bGwKKyAgIElhbiBCZWNrd2l0aCwgRGViaWFuIFByb2plY3QKKyAgIE5lbHNvbiBCZWViZSwgVSBv ZiBVdGFoCisgICBHZXJyeSBCZWxhbmdlciwgQ29nbml0cm9uaWNzCisgICBLYXJsIEJlcnJ5LCBV TUIKKyAgIE1hcmsgQmVycnltYW4sIFNBSUMKKyAgIERlYW4gVyBCZXR0aW5nZXIsIFNVTlkKKyAg IEdhcnkgQmlsa3VzCisgICBQZXRlciBCaW5kZXJ1cCwgRGVubWFyaworICAgRGF2aWQgQm9sZW4s IEFkdmFuY2VkIE5ldHdvcmtzIGFuZCBTZXJ2aWNlcywgSW5jLgorICAgSm9vcCBCb25lbgorICAg TWFyYyBCb3VjaGVyLCBVIG9mIE1vbnRyZWFsCisgICBDaGFybGVzIEJyb29rcywgRUROCisgICBC b2IgQnJvd24KKyAgIE1pa2UgQnJvd24sIFB1cmR1ZSBVCisgICBSb2IgQnJvd24KKyAgIEphY2sg QnJ5YW5zLCBDYWxpZm9ybmlhIFN0YXRlIFUgYXQgTG9uZyBCZWFjaAorICAgTWFyayBCdWRhLCBE RUMgKFZNUykKKyAgIEZlcm5hbmRvIENhYnJhbCwgUGFkcmFvIGlYLCBCcmFzaWxpYQorICAgQmpv cm4gQ2FybHNzb24sIFN0b2NraG9sbSBVbml2ZXJzaXR5IENvbXB1dGVyIENlbnRyZSBRWiwgU3dl ZGVuCisgICBCaWxsIENhdGNoaW5ncywgKGZvcm1lcmx5IG9mKSBDb2x1bWJpYSBVCisgICBCb2Ig Q2F0dGFuaSwgQ29sdW1iaWEgVSBDUyBEZXB0CisgICBEYXZpZGUgQ2Vydm9uZSwgUm9jaGVzdGVy IFUKKyAgIFNldGggQ2hhaWtsaW4sIERlbm1hcmsKKyAgIEpvaG4gQ2hhbmRsZXIsIEhhcnZhcmQg VSAvIFNtaXRoc29uaWFuIEFzdHJvbm9taWNhbCBPYnNlcnZhdG9yeQorICAgQmVybmFyZCBDaGVu LCBVQ0xBCisgICBBbmRyZXcgQSBDaGVybm92LCBSRUxDT00gVGVhbSwgTW9zY293CisgICBKb2hu IEwgQ2htaWVsZXdza2ksIEFUJlQsIExpc2xlLCBJTAorICAgSG93YXJkIENodSwgVSBvZiBNaWNo aWdhbgorICAgQmlsbCBDb2Fsc29uLCBNY0Rvbm5lbGwgRG91Z2xhcworICAgQmVydGllIENvb3Bl cnNtaXRoLCBMb25kb24KKyAgIENocmlzdGlhbiBDb3J0aQorICAgQ2hldCBDcmVpZGVyLCBVIG9m IFdlc3Rlcm4gT250YXJpbworICAgQWxhbiBDcm9zc3dlbGwsIENvbHVtYmlhIFUKKyAgIEplZmYg RGFtZW5zLCAoZm9ybWVybHkgb2YpIENvbHVtYmlhIFUKKyAgIE1hcmsgRGF2aWVzLCBCYXRoIFUs IFVLCisgICBTaW4taXRpcm91IERlemF3YSwgRnVqaWZpbG0sIEphcGFuCisgICBKb2UgUi4gRG91 cG5paywgVXRhaCBTdGF0ZSBVCisgICBGcmFuayBEcmVhbm8sIEhvbmV5d2VsbAorICAgSm9obiBE dW5sYXAsIFUgb2YgV2FzaGluZ3RvbgorICAgQWxleCBEdXB1eSwgU01BUlQuQ09NCisgICBEYXZp ZCBEeWNrLCBKb2huIEZsdWtlIE1mZyBDby4KKyAgIFN0ZWZhYW4gQS4gRWVja2VscywgRXVyb2tv bSwgTHV4ZW1ib3VyZworICAgTmljayBFZnRoeW1pb3UKKyAgIFBhdWwgRWdnZXJ0LCBUd2luIFN1 biwgSW5jLiwgRWwgU2VndW5kbywgQ0EKKyAgIEJlcm5pZSBFaWJlbiwgREVDCisgICBQZXRlciBF aWNoaG9ybiwgQXNzeXN0IEludGVybmF0aW9uYWwKKyAgIEtyaXN0b2ZmZXIgRXJpa3Nzb24sIFBl cmlkb3QgS29uc3VsdCBBQiwgT2VyZWJybywgU3dlZGVuCisgICBKb2huIFIuIEV2YW5zLCBJUlMs IEthbnNhcyBDaXR5CisgICBHbGVubiBFdmVyaGFydCwgUkNBIExhYnMKKyAgIENoYXJsaWUgRmlu YW4sIENyYXkgUmVzZWFyY2gKKyAgIEhlcm0gRmlzY2hlciwgRW5jaW5vLCBDQSAoZXh0ZW5zaXZl IGNvbnRyaWJ1dGlvbnMgdG8gdmVyc2lvbiA0LjApCisgICBDYXJsIEZvbmdoZWlzZXIsIENXUlUK KyAgIE1pa2UgRnJlZW1hbiwgQm9ubmV2aWxsZSBQb3dlciBBdXRob3JpdHkKKyAgIENhcmwgRnJp ZWRiZXJnCisgICBNYXJjZWxsbyBGcnV0aWcsIENhdGhvbGljIFVuaXZlcnNpdHksIFNhbyBQYXVs bywgQnJhemlsIChYLjI1IHN1cHBvcnQpCisgICBIaXJvZnVtaSBGdWppaSwgSmFwYW4gTmF0J2wg TGFiIGZvciBIaWdoIEVuZXJneSBQaHlzaWNzLCBUb2t5byAoS2FuamkpCisgICBDaHVjayBGdWxs ZXIsIFdlc3Rpbmdob3VzZSBDb3Jwb3JhdGUgQ29tcHV0ZXIgU2VydmljZXMKKyAgIEFuZHkgRnlm ZSwgQ2FsdGVjaAorICAgQ2hyaXN0aW5lIE0uIEdpYW5vbmUsIENvbHVtYmlhIFUKKyAgIEpvaG4g R2lsbW9yZSwgVUMgQmVya2VsZXkKKyAgIE1hZGh1c3VkYW4gR2l5eWFycHVyYW0sIEhQCisgICBS YWluZXIgR2xhc2NoaWNrLCBTaWVtZW5zIEFHLCBQYWRlcmJvcm4KKyAgIFdpbGxpYW0gSC4gR2xh c3MKKyAgIEdlcm1hbiBHb2xkc3ptaWR0LCBJQk0KKyAgIENodWNrIEdvb2RoYXJ0LCBOQVNBCisg ICBBbGlzdGFpciBHb3JtYW4sIE5ldyBaZWFsYW5kCisgICBSaWNoYXJkIEdyYXRpb24sIEFERkEs IEF1c3RyYWxpYQorICAgQ2hyaXMgR3JlZW4sIEVzc2V4IFUsIFVLCisgICBBbGFuIEdyaWVnLCBE dW5kZWUgVGVjaCwgU2NvdGxhbmQKKyAgIFlla3RhIEd1cnNlbCwgTUlUCisgICBKaW0gR3V5dG9u LCBSYW5kIENvcnAKKyAgIE1pY2hhZWwgSGFlcnRlbAorICAgQnJ1bm8gSGFpYmxlCisgICBCb2Ig SGFpbiwgVU1OCisgICBNYXJpb24gSGFrYW5zb24sIE9SU1QKKyAgIFJpY2hhcmQgSGFtaWx0b24K KyAgIEpvaG4gSGFtaWxzdG9uLCBJb3dhIFN0YXRlIFUKKyAgIFNpbW9uIEhhbmlhLCBOZXRoZXJs YW5kcworICAgU3RhbiBIYW5rcywgUmljZSBVLgorICAgS2VuIEhhcnJlbnN0ZWluLCBTUkkKKyAg IEV1Z2VuaWEgSGFycmlzLCBEYXRhIEdlbmVyYWwgKEFPUy9WUykKKyAgIERhdmlkIEhhcnJpc29u LCBLaW5nc3RvbiBXYXJyZW4gQ29ycAorICAgTHVjYXMgSGFydCwgT3JlZ29uIFN0YXRlIFVuaXZl cnNpdHkKKyAgIEphbWVzIEhhcnZleSwgSW5kaWFuYS9QdXJkdWUgVSAoVk1TKQorICAgUm9iIEhl YWxleQorICAgQ2h1Y2sgSGVkcmljaywgUnV0Z2VycyBVCisgICBSb24gSGVpYnksIFRlY2huaWNh bCBTeXN0ZW1zIERpdmlzaW9uLCBNb3Rvcm9sYSBDb21wdXRlciBHcm91cAorICAgU3RldmUgSGVt bWluZ2VyLCBUZWt0cm9uaXgKKyAgIENocmlzdGlhbiBIZW1zaW5nLCBSV1RIIEFhY2hlbiwgR2Vy bWFueSAoT1MtOSkKKyAgIFJhbmRvbHBoIEhlcmJlciwgVVMgRE9FLAorICAgQW5kcmV3IEhlcmJl cnQsIE1vbmFzaCBVbml2LCBBdXN0cmFsaWEKKyAgIE1hcmN1cyBIZXJiZXJ0LCBHZXJtYW55Cisg ICBNaWtlIEhpY2tleSwgSVRJCisgICBEYW4gSGlsZGVicmFuZCwgUU5YIFNvZnR3YXJlIFN5c3Rl bXMgSW5jLCBLYW5hdGEsIE9OIChRTlgpCisgICBSIEUgSGlsbAorICAgU3RlcGhhbiBIb2ZmbWFu LUVtZGVuCisgICBTdmVuIEhvbG1zdHJvbSwgQUJCIFV0aWxpdGllcyBBQiwgU3dlZGVuCisgICBC aWxsIEhvbWVyLCBDcmF5IFJlc2VhcmNoCisgICBSYXkgSHVudGVyLCBUaGUgV29sbG9uZ29uZyBH cm91cAorICAgUmFuZHkgSHVudHppZ2VyLCBOYXRpb25hbCBMaWJyYXJ5IG9mIE1lZGljaW5lCisg ICBMYXJyeSBKYWNvYnMsIFRyYW5zYXJjCisgICBTdGV2ZSBKZW5raW5zLCBMYW5jYXN0ZXIgVW5p dmVyc2l0eSwgVUsKKyAgIERhdmUgSm9obnNvbiwgR3JhZGllbnQgVGVjaG5vbG9naWVzCisgICBN YXJrIEIgSm9obnNvbiwgQXBwbGUgQ29tcHV0ZXIKKyAgIEp5a2UgSm9raW5lbiwgVGFtcGVyZSBV bml2ZXJzaXR5IG9mIFRlY2hub2xvZ3ksIEZpbmxhbmQgKFFOWCkKKyAgIEVyaWMgRiBKb25lcywg QVQmVAorICAgTHVrZSBKb25lcywgQVQmVAorICAgUGV0ZXIgSm9uZXMsIFUgb2YgUXVlYmVjIE1v bnRyZWFsCisgICBQaGlsIEp1bGlhbiwgU0FTIEluc3RpdHV0ZQorICAgUGV0ZXIgS2FiYWwsIFUg b2YgUXVlYmVjCisgICBNaWMgS2Fjem1hcmN6aWssIFUgb2YgVGV4YXMgYXQgQXVzdGluCisgICBT ZXJnZXkgS2FydGFzaG9mZiwgSW5zdC4gb2YgUHJlY2lzZSBNZWNoYW5pY3MgJiBDb21wdXRlciBF cXVpcG1lbnQsIE1vc2NvdworICAgSG93aWUgS2F5ZSwgQ29sdW1iaWEgVQorICAgUm9iIEtlZG9p biwgTGlub3R5cGUgQ28sIEhhdXBwYXVnZSwgTlkgKE9TLzIpCisgICBQaGlsIEtlZWdzdHJhCisg ICBNYXJrIEtlbm5lZHksIElCTQorICAgVGVycnkgS2VubmVkeSwgU3QgUGV0ZXIncyBDb2xsZWdl LCBKZXJzZXkgQ2l0eSwgTkogKFZNUyBhbmQgbW9yZSkKKyAgICJDYXJsbyBLaWQiLCBUZWNobmlj YWwgVW5pdmVyc2l0eSBvZiBEZWxmdCwgTmV0aGVybGFuZHMKKyAgIFRpbSBLaWVudHpsZQorICAg UGF1bCBLaW1vdG8sIENvcm5lbGwgVQorICAgRG91Z2xhcyBLaW5nc3RvbiwgbW9yZ2FuLmNvbQor ICAgTGF3cmVuY2UgS2lyYnksIFdpbHRzaGlyZSwgVUsKKyAgIFRvbSBLbG9vcywgU2VxdWVudCBD b21wdXRlciBTeXN0ZW1zCisgICBHdWVudGVyIEtuYXVmCisgICBKaW0gS251dHNvbiwgVSBvZiBU ZXhhcyBhdCBBdXN0aW4KKyAgIEpvaG4gVC4gS29obCAoQlNESSkKKyAgIFNjb3R0IEtyYW1lciwg U1JJIEludGVybmF0aW9uYWwsIE1lbmxvIFBhcmssIENBCisgICBKb2huIEtyYXluYWNrLCBVUyBQ b3N0YWwgU2VydmljZQorICAgRGF2aWQgS3JpY2tlciwgRW5jb3JlIENvbXB1dGVyCisgICBUaG9t YXMgS3J1ZWdlciwgVVdNCisgICBCbyBLdWxsbWFyLCBBQkMgS2x1YmJlbiwgU3RvY2tob2xtLCBh bmQgQ2VudHJhbCBCYW5rIG9mIFN3ZWRlbiwgS2lzdGEKKyAgIFIuIEJyYWQgS3VtbWVyLCBBVCZU IEJlbGwgTGFicywgQXRsYW50YSwgR0EKKyAgIEpvaG4gS3VuemUsIFVDIEJlcmtlbGV5CisgICBE YXZpZCBMYW5lLCBCU1NJIC8gQmVsbFNvdXRoIChTdHJhdHVzIFZPUywgWC4yNSkKKyAgIEJvYiBM YXJzb24sIFVTQyAoT1MtOSkKKyAgIEJlcnQgTGF2ZXJtYW4sIEdyb25pbmdlbiBVLCBOZXRoZXJs YW5kcworICAgU3RldmUgTGF5dG9uCisgICBEYXZpZCBMYXd5ZXIsIFVDIElydmluZQorICAgSmFz b24gTGVocgorICAgRGF2aWQgTGVWaW5lLCBOYXRpb25hbCBTZW1pY29uZHVjdG9yIENvcnBvcmF0 aW9uCisgICBEYW5pZWwgUy4gTGV3YXJ0LCBVSVVDCisgICBTLk8uIExpZGllLCBMZWhpZ2ggVQor ICAgVG9yIExpbGxxdmlzdCwgSGVsc2lua2kgVSwgRmlubGFuZAorICAgRGF2aWQtTWljaGFlbCBM aW5ja2UsIFUgb2YgU3QgR2FsbGVuLCBTd2l0emVybGFuZAorICAgUm9iZXJ0IExpcGUgKGZvciBT Q08gbWFrZWZpbGUgZW50cmllcyAmIGFkdmljZSkKKyAgIERlYW4gTG9uZworICAgTWlrZSBMb25n LCBBbmFsb2cgRGV2aWNlcywgTm9yd29vZCBNQQorICAgS2V2aW4gTG93ZXksIFUgb2YgU2Fza2F0 Y2hld2FuIChPUy8yKQorICAgQW5keSBMb3dyeSwgQ29sdW1iaWEgVQorICAgSmFtZXMgTHVtbWVs LCBDYXByaWNhIFRlbGVjb21wdXRpbmcgUmVzb3VyY2VzIChRTlgpCisgICBMZXdpcyBNY0NhcnRo eQorICAgRGF2aWQgTWFjS2VuemllLCBFbnZpcm9ubWVudGFsIERlZmVuc2UgRnVuZCwgVSBvZiBN YXJ5bGFuZAorICAgSm9obiBNYWNraW4sIFVuaXZlcnNpdHkgb2YgU2lkbmV5LCBBdXN0cmFsaWEK KyAgIE1hcnRpbiBNYWNsYXJlbiwgQmF0aCBVLCBVSworICAgQ2hyaXMgTWFpbywgQ29sdW1iaWEg VSBDUyBEZXB0CisgICBNb250c2VycmF0IE1hbmUsIEhQLCBHcmVub2JsZSwgRnJhbmNlCisgICBG dWx2aW8gTWFyaW5vLCBPbGl2ZXR0aSwgSXZyZWEsIEl0YWx5CisgICBBcnRodXIgTWFyc2gsIGRp cmNzYS5vcmcuYXUKKyAgIFBldGVyIE1hdXpleSwgTHVjZW50IFRlY2hub2xvZ2llcworICAgVHll IE1jUXVlZW4sIFV0YWggU3RhdGUgVQorICAgVGVkIE1lZGluCisgICBIZWxsbXV0aCBNaWNoYWVs aXMsIEhhbnNlYXRpc2NoZXIgQ29tcHV0ZXJzZXJ2aWNlIEdtYkgsIEhhbWJ1cmcsIEdlcm1hbnkK KyAgIExlc2xpZSBNaWtlc2VsbCwgQW1lcmljYW4gRmFybSBCdXJlYXUKKyAgIFRvZGQgTWlsbGVy LCBDb3VydGVzYW4gQ29uc3VsdGluZworICAgR2FyeSBNaWxscworICAgTWFydGluIE1pbm93LCBE RUMgKFZNUykKKyAgIFBhd2FuIE1pc3JhLCBCZWxsY29yZQorICAgS2VuIE1pemlhbGtvLCBJQk0s IE1hbmFzc2FzLCBWQQorICAgV29sZmdhbmcgTW9lbGxlciwgREVDVVMgR2VybWFueQorICAgUmF5 IE1vb2R5LCBQdXJkdWUgVQorICAgQnJ1Y2UgSiBNb29yZSwgQWxsZW4tQnJhZGxleSBDbywgSGln aGxhbmQgSGVpZ2h0cywgT0ggKEF0YXJpIFNUKQorICAgU3RldmUgTW9ybGV5LCBDb252ZXgKKyAg IFBldGVyIE1vc3NlbCwgQ29sdW1iaWEgVQorICAgVG9ueSBNb3ZzaG9uLCBOWVUKKyAgIExvdSBN dWNjaW9saSwgU3dhbnNvbiBBbmFseXNpcyBTeXN0ZW1zCisgICBEYW4gTXVycGh5CisgICBOZWFs IFAuIE11cnBoeSwgSGFyc29mIFN5c3RlbXMsIFdvbmRlciBMYWtlIElMCisgICBHYXJ5IE11c3Nh cgorICAgSm9obiBOYWxsLCBGU1UKKyAgIEphY2sgTmVsc29uLCBVIG9mIFBpdHRzYnVyZ2gKKyAg IEppbSBOb2JsZSwgUGxhbm5pbmcgUmVzZWFyY2ggQ29ycG9yYXRpb24gKE1hY2ludG9zaCkKKyAg IElhbiBPJ0JyaWVuLCBCYXRoIFUsIFVLCisgICBNZWxpc3NhIE8nTmVpbGwsIFNGVQorICAgSm9o biBPd2VucworICAgVGhvbWFzIFBpbmtsLCBIZWFsdGggQnVzaW5lc3MgU3lzdGVtcyBJbmMuCisg ICBNaWNoYWVsIFBpbnMsIElvd2EgQ29tcHV0ZXIgQWlkZWQgRW5naW5lZXJpbmcgTmV0d29yawor ICAgQW5kcmUnIFBpcmFyZCwgVW5pdmVyc2l0eSBvZiBMaWVnZSwgQmVsZ2l1bQorICAgUGF1bCBQ bGFjZXdheSwgT2hpbyBTdGF0ZSBVCisgICBQaWV0IFcuIFBsb21wLCBJQ0NFLCBHcm9uaW5nZW4g VW5pdmVyc2l0eSwgTmV0aGVybGFuZHMKKyAgIEtlbiBQb3VsdG9uLCBIUCBMYWJzCisgICBNYW5m cmVkIFByYW5nZSwgT2FrbGFuZCBVCisgICBDaHJpc3RvcGhlciBQcmF0dCwgQVBWIEJha2VyLCBV SworICAgRnJhbmsgUHJpbmRsZSwgTkFEQworICAgVG9ueSBRdWVydWJpbiwgVSBvZiBIYXdhaWkK KyAgIEplYW4tUGllcnJlIFJhZGxleQorICAgQW50b24gUmFuZworICAgTWlrZSBSZWNodG1hbgor ICAgU2NvdHQgUmliZQorICAgQWxhbiBSb2JpZXR0ZSwgT3hmb3JkIFVuaXZlcnNpdHksIFVLCisg ICBNaWNoZWwgUm9iaXRhaWxsZSwgVSBvZiBNb250cmVhbCAoTWFjKQorICAgSHV3IFJvZ2Vycywg U2Nod2VpemVyaXNjaGUgS3JlZGl0YW5zdGFsdCwgWnVlcmljaAorICAgTmlnZWwgUm9sZXMsIENh bWJyaWRnZSwgRW5nbGFuZAorICAgS2FpIFV3ZSBSb21tZWwsIFRlY2huaXNjaGUgVW5pdmVyc2l0 YWV0IE11ZW5jaGVuIChPUy8yKQorICAgTGFycnkgUm9zZW5tYW4gKEFtaWdhKQorICAgSmF5IFJv dW1hbiwgVSBvZiBNaWNoaWdhbgorICAgSmFjayBSb3VzZSwgU0FTIEluc3RpdHV0ZSAoRGF0YSBH ZW5lcmFsIGFuZC9vciBBcG9sbG8pCisgICBTdGV3IFJ1YmVuc3RlaW4sIEhhcnZhcmQgVSAoVk1T KQorICAgR2VyaGFyZCBSdWVja2xlLCBGSCBEYXJtc3RhZHQsIEZiLiBFL0F1dG9tYXRpc2llcnVu Z3N0ZWNobmlrCisgICBKb2huIFNhbnRvcywgRUcmSAorICAgQmlsbCBTY2hpbGl0LCBDb2x1bWJp YSBVCisgICBVbGxpIFNjaGx1ZXRlciwgUldUSCBBYWNoZW4sIEdlcm1hbnkgKE9TLTksIGV0YykK KyAgIE1pY2hhZWwgU2NobWlkdCwgVSBvZiBQYWRlcmJvcm4sIEdlcm1hbnkKKyAgIEVyaWMgU2No bm9lYmVsZW4sIENvbnZleAorICAgQmVubiBTY2hyZWliZXIsIERFQworICAgRGFuIFNjaHVsbG1h biwgREVDIChtb2RlbXMsIERJQUwgY29tbWFuZCwgZXRjKQorICAgSm9obiBTY2h1bHR6LCAzTQor ICAgU3RldmVuIFNjaHVsdHosIENvbnRlbCAoUERQLTExKQorICAgU3RldmVuIFNjaHdlZGEKKyAg IEFQUFAgU2NvcmVyLCBMZWVkcyBQb2x5dGVjaG5pYywgVUsKKyAgIEdvcmRvbiBTY290dCwgTWlj cm8gRm9jdXMsIE5ld2J1cnkgVUsKKyAgIEdpc2JlcnQgVy4gU2Vsa2UsIFdJZE8sIEJvbm4sIEdl cm1hbnkKKyAgIEtpamFsIFNoYWgKKyAgIERhdmlkIFNpbmdlciwgSUJNIEFsbWFkZW4gUmVzZWFy Y2ggTGFicworICAgRGF2aWQgU2l6ZWxhbmQsIFUgb2YgTG9uZG9uIE1lZGljYWwgU2Nob29sCisg ICBGcmlkcmlrIFNrdWxhc29uLCBJY2VsYW5kCisgICBSaWNrIFNsYWRrZXkgKExpbnV4KQorICAg RGF2ZSBTbGF0ZQorICAgQnJhZGxleSBTbWl0aCwgVUNMQQorICAgRnJlZCBTbWl0aCwgTWVyayAv IENvbXB1dHJpdGlvbgorICAgUmljaGFyZCBTIFNtaXRoLCBDYWwgU3RhdGUKKyAgIFJ5YW4gU3Rh bmlzZmVyLCBVTlQKKyAgIEJlcnRpbCBTdGVuc3Ryb2VtLCBTdG9ja2hvbG0gVW5pdmVyc2l0eSBD b21wdXRlciBDZW50cmUgKFFaKSwgU3dlZGVuCisgICBKYW1lcyBTdHVyZGV2YW50LCBDQVAgR0VN RU5JIEFNRVJJQ0EsIE1pbm5lYXBvbGlzCisgICBQZXRlciBTdmFuYmVyZywgUm95YWwgVGVjaG4u IEhTLCBTd2VkZW4KKyAgIEphbWVzIFIuIFN3ZW5zb24sIEFjY3UtV2VhdGhlciwgSW5jLgorICAg VGVkIFQnc28sIE1JVCAoTGludXgpCisgICBBbmR5IFRhbmVuYmF1bSwgVnJpamUgVSwgQW1zdGVy ZGFtLCBOZXRoZXJsYW5kcworICAgU2V0aCBUaGVyaWF1bHQsIENvbHVtYmlhIFUKKyAgIEdsZW4g VGhvYmUKKyAgIE1hcmtrdSBUb2lqYWxhLCBIZWxzaW5raSBVIG9mIFRlY2hub2xvZ3kKKyAgIFRl ZW11IFRvcm1hLCBIZWxzaW5raSBVIG9mIFRlY2hub2xvZ3kKKyAgIExpbnVzIFRvcnZhbGRzLCBI ZWxzaW5raQorICAgUmljayBUcm94ZWwsIE5JSAorICAgV2FycmVuIFR1Y2tlciwgVHJpZG9tIENv cnAsIE1vdW50YWluIFBhcmssIEdBCisgICBEYXZlIFR3ZXRlbiwgQU1FUy1OQVMKKyAgIEcgVWRk ZWJvcmcsIFN3ZWRlbgorICAgV2FsdGVyIFVuZGVyd29vZCwgRm9yZCBBZXJvc3BhY2UKKyAgIFBp ZXRlciBWYW4gRGVyIExpbmRlbiwgQ2VudHJlIE1vbmRpYWwsIFBhcmlzCisgICBHZSB2YW4gR2Vs ZG9ycCwgTmV0aGVybGFuZHMKKyAgIEZyZWQgdmFuIEtlbXBlbiwgTUlOSVggVXNlciBHcm91cCwg Vm9vcmhvdXQsIE5ldGhlcmxhbmRzCisgICBXYXluZSBWYW4gUGVsdCwgR0UvQ1JECisgICBNYXJr IFZhc29sbCwgT2tsYWhvbWEgU3RhdGUgVSAoVjcgVU5JWCkKKyAgIEtvbnN0YW50aW4gVmlub2dy YWRvdiwgSUNTVEksIE1vc2NvdworICAgUGF1bCBWaXhpZSwgREVDCisgICBCZXJuaWUgVm9seiwg UHJvY2VzcyBTb2Z0d2FyZQorICAgRWR1YXJkIFZvcGlja2EsIFByYWd1ZSBVbml2ZXJzaXR5IG9m IEVjb25vbWljcywgQ3plY2ggUmVwdWJsaWMKKyAgIE1hcnRpbiBWb3JsYWVuZGVyCisgICBEaW1p dHJpIFZ1bGlzLCBDVU5ZCisgICBSb2dlciBXYWxsYWNlLCBSYXl0aGVvbgorICAgU3RlcGhlbiBX YWx0b24sIENhbGlmIFN0YXRlIFUsIE5vcnRocmlkZ2UgKEFtaWdhKQorICAgSmFtaWUgV2F0c29u LCBBZGFzb2Z0LCBTd2l0emVybGFuZCAoQUlYKQorICAgUmljayBXYXRzb24sIFUgb2YgVGV4YXMg KE1hY2ludG9zaCkKKyAgIEVyaWMgV2VhdmVyLCBDb2x1bWJpYSBVCisgICBTY290dCBXZWlrYXJ0 IChBc3NvY2lhdGlvbiBmb3IgUHJvZ3Jlc3NpdmUgQ29tbXVuaWNhdGlvbnMpCisgICBSb2JlcnQg V2VpbmVyLCBQcm9ncmFtbWluZyBQbHVzLCBOZXcgWW9yayBDaXR5CisgICBMYXVyZW4gV2VpbnN0 ZWluLCBWb3J0ZXggVGVjaG5sb2d5CisgICBEYXZpZCBXZXhlbGJsYXQsIEFUJlQKKyAgIENsYXJr IFdpZXJkYSwgSWxsdW1pbmF0aSBPbmxpbmUKKyAgIEpvYWNoaW0gV2llc2VsLCBVIG9mIEthcmxz cnVoZQorICAgTG9uIFdpbGxldHQsIFUgb2YgVXRhaAorICAgTWljaGFlbCBXaWxsaWFtcywgVUNM QQorICAgTmF0ZSBXaWxsaWFtcywgVSBvZiBNb250YW5hCisgICBEYXZpZCBXaWxzb24KKyAgIEpv ZWxsZW4gV2luZHNvciwgVSBvZiBBcml6b25hCisgICBQYXRyaWNrIFdvbGZlLCBLdWNrICYgQXNz b2NpYXRlcywgSW5jLgorICAgR3JlZ2cgV29uZGVybHksIE9rbGFob21hIFN0YXRlIFUgKFY3IFVO SVgpCisgICBGYXJyZWxsIFdvb2RzLCBDb25jdXJyZW50IChmb3JtZXJseSBNYXNzY29tcCkKKyAg IERhdmUgV29vbGxleSwgQ0FQIENvbW11bmljYXRpb24gU3lzdGVtcywgTG9uZG9uCisgICBKYWNr IFdvb2xsZXksIFNDVCBDb3JwCisgICBGcmFuayBXb3J0bmVyCisgICBLZW4gWWFwLCBmb3JtZXJs eSBvZiBVIG9mIFJvY2hlc3RlcgorICAgSm9obiBaZWVmZiwgQW5uIEFyYm9yLCBNSQorKi8KKwor I2luY2x1ZGUgImNrY2tlci5oIiAgICAgICAgICAgICAgICAgICAgIC8qIEtlcm1pdCBzeW1ib2xz ICovCisjaW5jbHVkZSAiY2tjbmV0LmgiICAgICAgICAgICAgICAgICAgICAgLyogTmV0d29yayBz eW1ib2xzICovCisKKyNpZmRlZiBDS19TU0wKKyNpbmNsdWRlICJja19zc2wuaCIKKyNlbmRpZiAv KiBDS19TU0wgKi8KKworI2lmbmRlZiBOT1NQTAorI2luY2x1ZGUgImNrdXVzci5oIgorI2VuZGlm IC8qIE5PU1BMICovCisKKyNpZmRlZiBPUzJPTkxZCisjZGVmaW5lIElOQ0xfVklPICAgICAgICAg ICAgICAgICAgICAgICAgLyogTmVlZGVkIGZvciBja29jb24uaCAqLworI2luY2x1ZGUgPG9zMi5o PgorI3VuZGVmIENPTU1FTlQKKyNlbmRpZiAvKiBPUzJPTkxZICovCisKKyNpZmRlZiBOVAorI2lu Y2x1ZGUgPHdpbmRvd3MuaD4KKyNpbmNsdWRlIDx0YXBpLmg+CisjaW5jbHVkZSAiY2tudGFwLmgi CisjZW5kaWYgLyogTlQgKi8KKworI2lmbmRlZiBOT1NFUlZFUgorLyogVGV4dCBtZXNzYWdlIGRl ZmluaXRpb25zLi4gZWFjaCBzaG91bGQgYmUgMjU2IGNoYXJzIGxvbmcsIG9yIGxlc3MuICovCisj aWZkZWYgTUlOSVgKK2NoYXIgKnNydnR4dCA9ICJcclxuXAorRW50ZXJpbmcgc2VydmVyIG1vZGUu XHJcblwwIjsKKyNlbHNlCisjaWZkZWYgT0xETVNHCisvKgorICBJdCBzZWVtcyB0aGVyZSB3YXMg YSBsYXJnZSBpbnN0YWxsYXRpb24gdGhhdCB3YXMgdXNpbmcgQy1LZXJtaXQgNUEoMTY1KQorICBv ciB0aGVyZWFib3V0cywgd2hpY2ggaGFkIGRlcGxveWVkIHRob3VzYW5kcyBvZiBNUy1ET1MgS2Vy bWl0IHNjcmlwdHMgaW4KKyAgc2NhdHRlcmVkIGxvY2F0aW9ucyB0aGF0IGxvb2tlZCBmb3Igc3Ry aW5ncyBpbiB0aGUgb2xkIHNlcnZlciBtZXNzYWdlLAorICB3aGljaCBjaGFuZ2VkIGluIDVBKDE4 MyksIEF1Z3VzdCAxOTkyLgorKi8KK2NoYXIgKnNydnR4dCA9ICJcclxuXAorQy1LZXJtaXQgc2Vy dmVyIHN0YXJ0aW5nLiAgUmV0dXJuIHRvIHlvdXIgbG9jYWwgbWFjaGluZSBieSB0eXBpbmdcclxu XAoraXRzIGVzY2FwZSBzZXF1ZW5jZSBmb3IgY2xvc2luZyB0aGUgY29ubmVjdGlvbiwgYW5kIGlz c3VlIGZ1cnRoZXJcclxuXAorY29tbWFuZHMgZnJvbSB0aGVyZS4gIFRvIHNodXQgZG93biB0aGUg Qy1LZXJtaXQgc2VydmVyLCBpc3N1ZSB0aGVcclxuXAorRklOSVNIIG9yIEJZRSBjb21tYW5kIGFu ZCB0aGVuIHJlY29ubmVjdC5cblwKK1xyXG5cMCI7CisjZWxzZQorI2lmZGVmIE9TSworY2hhciAq c3J2dHh0ID0gIlxyXDAxMlwKK0VudGVyaW5nIHNlcnZlciBtb2RlLiAgSWYgeW91ciBsb2NhbCBL ZXJtaXQgc29mdHdhcmUgaXMgbWVudSBkcml2ZW4sIHVzZVxyXDAxMlwKK3RoZSBtZW51cyB0byBz ZW5kIGNvbW1hbmRzIHRvIHRoZSBzZXJ2ZXIuICBPdGhlcndpc2UsIGVudGVyIHRoZSBlc2NhcGVc clwwMTJcCitzZXF1ZW5jZSB0byByZXR1cm4gdG8geW91ciBsb2NhbCBLZXJtaXQgcHJvbXB0IGFu ZCBpc3N1ZSBjb21tYW5kcyBmcm9tXHJcMDEyXAordGhlcmUuIFVzZSBTRU5EIGFuZCBHRVQgZm9y IGZpbGUgdHJhbnNmZXIuIFVzZSBSRU1PVEUgSEVMUCBmb3IgYSBsaXN0IG9mXHJcMDEyXAorb3Ro ZXIgYXZhaWxhYmxlIHNlcnZpY2VzLiAgVXNlIEJZRSBvciBGSU5JU0ggdG8gZW5kIHNlcnZlciBt b2RlLlxyXDAxMlwwIjsKKyNlbHNlIC8qIFVOSVgsIFZNUywgQU9TL1ZTLCBhbmQgYWxsIG90aGVy cyAqLworY2hhciAqc3J2dHh0ID0gIlxyXG5cCitFbnRlcmluZyBzZXJ2ZXIgbW9kZS4gIElmIHlv dXIgbG9jYWwgS2VybWl0IHNvZnR3YXJlIGlzIG1lbnUgZHJpdmVuLCB1c2VcclxuXAordGhlIG1l bnVzIHRvIHNlbmQgY29tbWFuZHMgdG8gdGhlIHNlcnZlci4gIE90aGVyd2lzZSwgZW50ZXIgdGhl IGVzY2FwZVxyXG5cCitzZXF1ZW5jZSB0byByZXR1cm4gdG8geW91ciBsb2NhbCBLZXJtaXQgcHJv bXB0IGFuZCBpc3N1ZSBjb21tYW5kcyBmcm9tXHJcblwKK3RoZXJlLiAgVXNlIFNFTkQgYW5kIEdF VCBmb3IgZmlsZSB0cmFuc2Zlci4gIFVzZSBSRU1PVEUgSEVMUCBmb3IgYSBsaXN0IG9mXHJcblwK K290aGVyIGF2YWlsYWJsZSBzZXJ2aWNlcy4gIFVzZSBCWUUgb3IgRklOSVNIIHRvIGVuZCBzZXJ2 ZXIgbW9kZS5cclxuXDAiOworI2VuZGlmIC8qIE9TSyAqLworI2VuZGlmIC8qIE9MRE1TRyAqLwor I2VuZGlmIC8qIE1JTklYICovCisjZWxzZSAgLyogc2VydmVyIG1vZGUgZGlzYWJsZWQgKi8KK2No YXIgKnNydnR4dCA9ICIiOworI2VuZGlmIC8qIE5PU0VSVkVSICovCisKK2ludCBpbml0ZmxnID0g MDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBzeXNpbml0KCkgaGFzIGV4ZWN1dGVkLi4uICov CitpbnQgaG93Y2FsbGVkID0gSV9BTV9LRVJNSVQ7ICAgICAgICAgICAgLyogSG93IEkgd2FzIGNh bGxlZCAqLworaW50IGhtdG9wbGluZSA9IDA7CitpbnQgcXVpdHRpbmcgPSAwOwkJCS8qIEknbSBp biB0aGUgYWN0IG9mIHF1aXR0aW5nICovCisKKyNpZmRlZiBJS1NEQ09ORgorY2hhciAqIGlrc2Rj b25mID0gSUtTRENPTkY7ICAgICAgICAgICAgIC8qIElLU0QgY29uZmlndXJhdGlvbiBmaWxlICov CitpbnQgICAgaWtzZGNmICAgPSAwOyAgICAgICAgICAgICAgICAgICAgLyogSGFzIElLU0QgYy5m LiBiZWVuIHByb2Nlc3NlZD8gKi8KKyNlbmRpZiAvKiBJS1NEQ09ORiAqLworCitpbnQgc3J2Y2Rt c2cgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgLyogW1NlcnZlcl0gQ0QgbWVzc2FnZSAqLwor Y2hhciAqIGNkbXNnZmlsZVs4XSA9IHsgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVM TCxOVUxMIH07CitjaGFyICogY2Rtc2dzdHIgPSBOVUxMOworY2hhciAqIGNrY2RwYXRoID0gTlVM TDsKKworI2lmZGVmIE5MQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRleHQtZmls ZSBsaW5lIHRlcm1pbmF0b3IgKi8KK0NIQVIgZmVvbCA9IE5MQ0hBUjsKKyNlbHNlCitDSEFSIGZl b2wgPSAwOworI2VuZGlmIC8qIE5MQ0hBUiAqLworCitpbnQgZmJsa3NpeiA9IERCTEtTSVo7ICAg ICAgICAgIC8qIEZpbGUgYmxvY2tzaXplICovCitpbnQgZnJlY2wgPSBETFJFQ0w7ICAgICAgICAg ICAgIC8qIEZpbGUgcmVjb3JkIGxlbmd0aCAqLworaW50IGZyZWNmbSA9IFhZRkZfUzsgICAgICAg ICAgICAvKiBGaWxlIHJlY29yZCBmb3JtYXQgKGRlZmF1bHQgPSBzdHJlYW0pICovCitpbnQgZm9y ZyA9IFhZRk9fUzsgICAgICAgICAgICAgIC8qIEZpbGUgb3JnYW5pemF0aW9uIChzZXF1ZW50aWFs KSAqLworaW50IGZjY3RybCA9IFhZRlBfTjsgICAgICAgICAgICAvKiBGaWxlIGNhcnJpYWdlIGNv bnRyb2wgKGN0cmwgY2hhcnMpICovCitpbnQgZmlsZWNhc2UgPSBGSUxFQ0FTRTsgICAgICAgIC8q IENhc2UgbWF0dGVycyBpbiBmaWxlbmFtZXMgKi8KK2ludCBzdGF0aGFjayA9IDE7ICAgICAgICAg ICAgICAgLyogRmFzdCBkaXJlY3RvcnkgbG9va3VwcyBieSBkZWZhdWx0ICovCisKK2NoYXIgdWlk YnVmW1VJREJVRkxFTl0gPSB7IE5VTCwgTlVMIH07ICAvKiBVc2VyIElEIGJ1ZmZlciAqLworaW50 IGNmaWxlZiA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFwcGxpY2F0aW9uICgia2Vy YmFuZyIpIGZpbGUgZmxhZyAqLworY2hhciBjbWRmaWxbQ0tNQVhQQVRIICsgMV0gPSB7IE5VTCwg TlVMIH07IC8qIEFwcGxpY2F0aW9uIGZpbGUgbmFtZSAqLworaW50IGhhdmV1cmwgPSAwOyAgICAg ICAgICAgICAgICAgICAgICAgIC8qIFVSTCBnaXZlbiBvbiBjb21tYW5kIGxpbmUgKi8KKworI2lm bmRlZiBOT1hGRVIKKy8qIE11bHRpLXByb3RvY29sIHN1cHBvcnQgKi8KKworc3RydWN0IGNrX3Ag cHRhYltOUFJPVE9TXSA9IHsgICAgICAgICAgIC8qIEluaXRpYWxpemUgdGhlIEtlcm1pdCBwYXJ0 IC4uLiAqLworICB7ICJLZXJtaXQiLAorICAgIERSUFNJWiwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIFJlY2VpdmUgcGFja2V0IHNpemUgKi8KKyAgICBEU1BTSVosICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBTZW5kIHBhY2tldCBzaXplICovCisgICAgMCwgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogU2VuZC1wYWNrZXQtc2l6ZS1zZXQgZmxhZyAqLwor ICAgIERGV1NJWiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdpbmRvdyBzaXplICov CisKKyNpZmRlZiBORVdERUZBVUxUUworICAgIFBYX0NBVSwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIENvbnRyb2wgY2hhciB1bnByZWZpeGluZy4uLiAqLworI2Vsc2UKKyAgICBQWF9B TEwsCisjZW5kaWYgLyogTkVXREVGQVVMVFMgKi8KKworI2lmZGVmIFZNUyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIERlZmF1bHQgZmlsZW5hbWUgY29sbGlzaW9uIGFjdGlvbiAqLwor ICAgIFhZRlhfWCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJFUExBQ0UgZm9yIFZB WC9WTVMgKi8KKyNlbHNlCisgICAgWFlGWF9CLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogQkFDS1VQIGZvciBldmVyeWJvZHkgZWxzZSAqLworI2VuZGlmIC8qIFZNUyAqLworCisjaWZk ZWYgT1MyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRmxhZyBmb3IgZmlsZSBuYW1l IGNvbnZlcnNpb24gKi8KKyAgICBYWUZOX0wsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBMaXRlcmFsIGZvciBPUzIgKi8KKyNlbHNlCisgICAgWFlGTl9DLCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogQ29udmVydGVkIGZvciBvdGhlcnMgKi8KKyNlbmRpZiAvKiBPUzIgKi8K KworICAgIFBBVEhfT0ZGLCAgICAgICAgICAgICAgICAgICAvKiBTZW5kIHBhdGhuYW1lcyBPRkYg Ki8KKyAgICBQQVRIX0FVVE8sICAgICAgICAgICAgICAgICAgLyogUmVjZWl2ZSBwYXRobmFtZXMg QVVUTyAqLworICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAvKiBIb3N0IHJlY2VpdmUg aW5pdGlhdGlvbiBzdHJpbmcgKGJpbmFyeSkgKi8KKyAgICBOVUxMLCAgICAgICAgICAgICAgICAg ICAgICAgLyogSG9zdCByZWNlaXZlIGluaXRpYXRpb24gc3RyaW5nICh0ZXh0KSAgICovCisgICAg TlVMTCwgICAgICAgICAgICAgICAgICAgICAgIC8qIEhvc3Qgc2VydmVyIHN0cmluZyAqLworICAg IE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAvKiBFeHRlcm5hbCBwcm90b2NvbCBzZW5kIGNv bW1hbmQgKGJpbmFyeSkgKi8KKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgLyogRXh0 ZXJuYWwgcHJvdG9jb2wgc2VuZCBjb21tYW5kICh0ZXh0KSAgICovCisgICAgTlVMTCwgICAgICAg ICAgICAgICAgICAgICAgIC8qIEV4dGVybmFsIHByb3RvY29sIHJlY2VpdmUgY29tbWFuZCAoYmlu KSAqLworICAgIE5VTEwgfSAgICAgICAgICAgICAgICAgICAgICAvKiBFeHRlcm5hbCBwcm90b2Nv bCByZWNlaXZlIGNvbW1hbmQgKHR4dCkgKi8KKyNpZmRlZiBDS19YWVoKKywKK3siWE1PREVNIiwg ICAgMTI4LDEyOCwtMSwtMSwgICAxLC0xLC0xLDAsMCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEws TlVMTCxOVUxMfSwKK3siWE1PREVNLUNSQyIsMTI4LDEyOCwtMSwtMSwgIC0xLC0xLC0xLDAsMCxO VUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMfSwKK3siWU1PREVNIiwgICAtMSwgLTEs LTEsLTEsICAgIC0xLC0xLC0xLDAsMCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxM fSwKK3siWU1PREVNLWciLCAtMSwgLTEsLTEsLTEsICAgIC0xLC0xLC0xLDAsMCxOVUxMLE5VTEws TlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMfSwKK3siWk1PREVNIiwgICAtMSwgLTEsLTEsLTEsUFhf V0lMLC0xLC0xLDAsMCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMfSwKK3siT3Ro ZXIiLCAgICAtMSwgLTEsLTEsLTEsICAgIC0xLC0xLC0xLDAsMCxOVUxMLE5VTEwsTlVMTCxOVUxM LE5VTEwsTlVMTCxOVUxMfQorI2VuZGlmIC8qIENLX1hZWiAqLworfTsKKworLyogRGVjbGFyYXRp b25zIGZvciBTZW5kLUluaXQgUGFyYW1ldGVycyAqLworCitpbnQgc3BzaXogPSBEU1BTSVosICAg ICAgICAgICAgICAgICAgICAgLyogQ3VycmVudCBwYWNrZXQgc2l6ZSB0byBzZW5kICovCisgICAg c3BtYXggPSBEU1BTSVosICAgICAgICAgICAgICAgICAgICAgLyogQmlnZ2VzdCBwYWNrZXQgc2l6 ZSB3ZSBjYW4gc2VuZCAqLworICAgIGxhc3RzcG1heCA9IERTUFNJWiwgICAgICAgICAgICAgICAg IC8qIFNlbmQtcGFja2V0IHNpemUgbGFzdCB1c2VkICovCisgICAgc3BzaXpyID0gRFNQU0laLCAg ICAgICAgICAgICAgICAgICAgLyogU2VuZC1wYWNrZXQgc2l6ZSByZXF1ZXN0ZWQgKi8KKyAgICBz cHNpemYgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGbGFnIHRvIG92ZXJyaWRlIHNp emUgbmVnb3RpYXRpb24gKi8KKyAgICBycHNpeiA9IERSUFNJWiwgICAgICAgICAgICAgICAgICAg ICAvKiBCaWdnZXN0IHdlIHdhbnQgdG8gcmVjZWl2ZSAqLworICAgIHVycHNpeiA9IERSUFNJWiwg ICAgICAgICAgICAgICAgICAgIC8qIFVzZXItcmVxdWVzdGVkIHJlY2VpdmUgcGt0IHNpemUgKi8K KyAgICBtYXhycHMgPSBNQVhSUCwgICAgICAgICAgICAgICAgICAgICAvKiBNYXhpbXVtIGluY29t aW5nIGxvbmcgcGFja2V0IHNpemUgKi8KKyAgICBtYXhzcHMgPSBNQVhTUCwgICAgICAgICAgICAg ICAgICAgICAvKiBNYXhpbXVtIG91dGJvdW5kIGwucC4gc2l6ZSAqLworICAgIG1heHRyeSA9IE1B WFRSWSwgICAgICAgICAgICAgICAgICAgIC8qIE1heGltdW0gcmV0cmllcyBwZXIgcGFja2V0ICov CisgICAgd3Nsb3RzID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAgLyogV2luZG93IHNpemUg Y3VycmVudGx5IGluIHVzZSAqLworICAgIHdzbG90ciA9IERGV1NJWiwgICAgICAgICAgICAgICAg ICAgIC8qIFdpbmRvdyBzaXplIGZyb20gU0VUIFdJTkRPVyAqLworICAgIHdzbG90biA9IDEsICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIFdpbmRvdyBzaXplIG5lZ290aWF0ZWQgaW4gUy1wa3Qg Ki8KKyAgICB0aW1lb3V0cyA9IDAsICAgICAgICAgICAgICAgICAgICAgICAvKiBGb3Igc3RhdGlz dGljcyByZXBvcnRpbmcgKi8KKyAgICBzcGFja2V0cyA9IDAsICAgICAgICAgICAgICAgICAgICAg ICAvKiAgLi4uICovCisgICAgcnBhY2tldHMgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgLyog IC4uLiAqLworICAgIHJldHJhbnMgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgIC8qICAuLi4g Ki8KKyAgICBjcnVuY2hlZCA9IDAsICAgICAgICAgICAgICAgICAgICAgICAvKiAgLi4uICovCisg ICAgd21heCA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIC4uLiAqLworICAgIHdj dXIgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAuLi4gKi8KKyAgICBzcnZpZGwg PSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTZXJ2ZXIgaWRsZSB0aW1lb3V0ICovCisg ICAgc3J2ZGlzID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2VydmVyIGZpbGUgeGZl ciBkaXNwbGF5ICovCisgICAgc3J2dGltID0gRFNSVlRJTSwgICAgICAgICAgICAgICAgICAgLyog U2VydmVyIGNvbW1hbmQgd2FpdCB0aW1lb3V0ICovCisgICAgc3J2cGluZyA9IDEsICAgICAgICAg ICAgICAgICAgICAgICAgLyogU2VydmVyIGtlZXBhbGl2ZSAqLworLyoKKyAgdGltaW50IGlzIHRo ZSB0aW1lb3V0IGludGVydmFsIEkgdXNlIHdoZW4gd2FpdGluZyBmb3IgYSBwYWNrZXQuCisgIHBr dHRpbSBpcyB0aGUgU0VUIFJFQ0VJVkUgVElNRU9VVCB2YWx1ZSwgc2VudCB0byB0aGUgb3RoZXIg S2VybWl0LgorICBydGltbyBpcyB0aGUgU0VUIFNFTkQgVElNRU9VVCB2YWx1ZS4gIHJ0aW1vIGlz IHRoZSBpbml0aWFsIHZhbHVlIG9mCisgIHRpbWludC4gIHRpbWludCBpcyBjaGFuZ2VkIGJ5IHRo ZSB2YWx1ZSBpbiB0aGUgaW5jb21pbmcgbmVnb3RpYXRpb24KKyAgcGFja2V0IHVubGVzcyBhIFNF VCBTRU5EIFRJTUVPVVQgY29tbWFuZCB3YXMgZ2l2ZW4uCisqLworICAgIHRpbWludCA9IERNWVRJ TSwgICAgICAgICAgICAgICAgICAgIC8qIFRpbWVvdXQgaW50ZXJ2YWwgSSB1c2UgKi8KKyAgICBw a3R0aW0gPSBVUlRJTUUsICAgICAgICAgICAgICAgICAgICAvKiBUaW1lb3V0IEkgd2FudCB5b3Ug dG8gdXNlICovCisgICAgcnRpbW8gPSBETVlUSU0sICAgICAgICAgICAgICAgICAgICAgLyogTm9y bWFsIHBhY2tldCB3YWl0IHRpbWVvdXQgKi8KKyAgICB0aW1lZiA9IDAsICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBGbGFnIHRvIG92ZXJyaWRlIHdoYXQgeW91IGFzayAqLworI2lmZGVmIENL X1RJTUVSUworICAgIHJ0dGZsZyA9IDEsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVzZSBk eW5hbWljIHJvdW5kLXRyaXAgdGltZXJzICovCisjZWxzZQorICAgIHJ0dGZsZyA9IDAsICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIFVzZSBmaXhlZCB0aW1lciAqLworI2VuZGlmIC8qIENLX1RJ TUVSUyAqLworICAgIG1pbnRpbWUgPSAxLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1pbmlt dW0gdGltZW91dCAqLworICAgIG1heHRpbWUgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgIC8q IE1heGltdW0gdGltZW91dCAqLworCisgICAgbnBhZCA9IE1ZUEFETiwgICAgICAgICAgICAgICAg ICAgICAgLyogSG93IG11Y2ggcGFkZGluZyB0byBzZW5kICovCisgICAgbXlwYWRuID0gTVlQQURO LCAgICAgICAgICAgICAgICAgICAgLyogSG93IG11Y2ggcGFkZGluZyB0byBhc2sgZm9yICovCisg ICAgYmN0ciA9IERGQkNULCAgICAgICAgICAgICAgICAgICAgICAgLyogQmxvY2sgY2hlY2sgdHlw ZSByZXF1ZXN0ZWQgKi8KKyAgICBiY3R1ID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBCbG9jayBjaGVjayB0eXBlIHVzZWQgKi8KKyAgICBiY3RsID0gMSwgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBCbG9jayBjaGVjayBsZW5ndGggKi8KKyAgICBiY3RmID0gMCwJCQkJLyog QmxvY2sgY2hlY2sgdHlwZSAzIGZvcmNlZCBvbiBhbGwgKi8KKyAgICBjX3NhdmUgPSAtMSwgICAg ICAgICAgICAgICAgICAgICAgICAvKiBCbG9jayBjaGVjayBzYXZpbmcgYW5kIHJlc3RvcmluZyAq LworICAgIHNzX3NhdmUgPSAtMSwgICAgICAgICAgICAgICAgICAgICAgIC8qIFNsb3ctc3RhcnQg c2F2aW5nIGFuZCByZXN0b3JpbmcgKi8KKyAgICBlYnEgPSAgTVlFQlEsICAgICAgICAgICAgICAg ICAgICAgICAvKiA4dGggYml0IHByZWZpeCAqLworICAgIGVicWZsZyA9IDAsICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIDh0aC1iaXQgcXVvdGluZyBmbGFnICovCisgICAgcnFmID0gLTEsICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogRmxhZyB1c2VkIGluIDhicSBuZWdvdGlhdGlvbiAq LworICAgIHJxID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlY2VpdmVkIDhi cSBiaWQgKi8KKyAgICBzcSA9ICdZJywgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTZW50 IDhicSBiaWQgKi8KKyAgICBycHQgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBS ZXBlYXQgY291bnQgKi8KKyAgICBycHRxID0gTVlSUFRRLCAgICAgICAgICAgICAgICAgICAgICAv KiBSZXBlYXQgcHJlZml4ICovCisgICAgcnB0ZmxnID0gMCwgICAgICAgICAgICAgICAgICAgICAg ICAgLyogUmVwZWF0IHByb2Nlc3NpbmcgZmxhZyAqLworICAgIHJwdGVuYSA9IDEsICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIFJlcGVhdCBwcm9jZXNzaW5nIGVuYWJsZWQgKi8KKyAgICB4ZnJj YW4gPSAxLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUcmFuc2ZlciBjYW5jZWxsYXRpb24g ZW5hYmxlZCAqLworICAgIHhmcmludCA9IDEsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRy YW5zZmVyIGludGVycnVwdGlvbiBlbmFibGVkICovCisgICAgeGZyY2hyID0gMywgICAgICAgICAg ICAgICAgICAgICAgICAgLyogVHJhbnNmZXIgY2FuY2VsIGNoYXIgPSBDdHJsLUMgKi8KKyAgICB4 ZnJudW0gPSAzLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOZWVkIHRocmVlIG9mIHRoZW0g YnkgZGVmYXVsdCAqLworICAgIGdfeGZyeGxhID0gLTE7CisgICAgY2hhciAqIHhmcm1zZyA9IE5V TEw7ICAgICAgICAgICAgICAgLyogTWVzc2FnZSBmb3IgZi50LiBkaXNwbGF5IHNjcmVlbiAqLwor I2VuZGlmIC8qIE5PWEZFUiAqLworCisjaWZkZWYgTk9DU0VUUworaW50IHhmcnhsYSA9IDA7ICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIENoYXJhY3Rlci1zZXQgdHJhbnNsYXRpb24gKi8KKyNl bHNlCitpbnQgeGZyeGxhID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogZW5hYmxlZCBv ciBkaXNhYmxlZCAqLworI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKworaW50IGhhdmVsZnMgPSAwOwkJ CS8qIExhcmdlIGZpbGUgc3VwcG9ydCBhdmFpbGFibGUgKi8KKworI2lmbmRlZiBOT1hGRVIKK2lu dCBlcGt0ZmxnID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBFLVBBQ0tFVCBjb21tYW5k IGFjdGl2ZSAqLworCitpbnQgY2FwYXMgID0gOSwgICAgICAgICAgICAgICAgICAgICAgICAgLyog UG9zaXRpb24gb2YgQ2FwYWJpbGl0aWVzICovCisgICAgbHBjYXBiID0gMiwgICAgICAgICAgICAg ICAgICAgICAgICAgLyogTG9uZyBQYWNrZXQgY2FwYWJpbGl0eSAqLworICAgIGxwY2FwciA9IDEs ICAgICAgICAgICAgICAgICAgICAgICAgIC8qICByZXF1ZXN0ZWQgKi8KKyAgICBscGNhcHUgPSAw LCAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgdXNlZCAqLworICAgIHN3Y2FwYiA9IDQsICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIFNsaWRpbmcgV2luZG93IGNhcGFiaWxpdHkgKi8KKyAg ICBzd2NhcHIgPSAxLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgcmVxdWVzdGVkIChhbGxv d2VkKSAqLworICAgIHN3Y2FwdSA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgIC8qICB1c2Vk ICovCisgICAgYXRjYXBiID0gOCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogQXR0cmlidXRl IGNhcGFiaWxpdHkgKi8KKyAgICBhdGNhcHIgPSAxLCAgICAgICAgICAgICAgICAgICAgICAgICAv KiAgcmVxdWVzdGVkICovCisgICAgYXRjYXB1ID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAg LyogIHVzZWQgKi8KKyAgICByc2NhcGIgPSAxNiwgICAgICAgICAgICAgICAgICAgICAgICAvKiBS RVNFTkQgY2FwYWJpbGl0eSAqLworICAgIHJzY2FwciA9IDEsICAgICAgICAgICAgICAgICAgICAg ICAgIC8qICByZXF1ZXN0ZWQgYnkgZGVmYXVsdCAqLworICAgIHJzY2FwdSA9IDAsICAgICAgICAg ICAgICAgICAgICAgICAgIC8qICB1c2VkICovCisgICAgbHNjYXBiID0gMzIsICAgICAgICAgICAg ICAgICAgICAgICAgLyogTG9ja2luZyBTaGlmdCBjYXBhYmlsaXR5ICovCisgICAgbHNjYXByID0g MSwgICAgICAgICAgICAgICAgICAgICAgICAgLyogIHJlcXVlc3RlZCBieSBkZWZhdWx0ICovCisg ICAgbHNjYXB1ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogIHVzZWQgKi8KKworLyog RmxhZ3MgZm9yIHdoZXRoZXIgdG8gdXNlIHBhcnRpY3VsYXIgYXR0cmlidXRlcyAqLworCitpbnQg YXRlbmNpID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAgLyogRW5jb2RpbmcgaW4gKi8KKyAg ICBhdGVuY28gPSAxLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFbmNvZGluZyBvdXQgKi8K KyAgICBhdGRhdGkgPSAxLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEYXRlIGluICovCisg ICAgYXRkYXRvID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAgLyogRGF0ZSBvdXQgKi8KKyAg ICBhdGRpc2kgPSAxLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEaXNwb3NpdGlvbiBpbi9v dXQgKi8KKyAgICBhdGRpc28gPSAxLAorICAgIGF0bGVuaSA9IDEsICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIExlbmd0aCBpbi9vdXQgKGJvdGgga2luZHMpICovCisgICAgYXRsZW5vID0gMSwK KyAgICBhdGJsa2kgPSAxLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBCbG9ja3NpemUgaW4v b3V0ICovCisgICAgYXRibGtvID0gMSwKKyAgICBhdHR5cGkgPSAxLCAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBGaWxlIHR5cGUgaW4vb3V0ICovCisgICAgYXR0eXBvID0gMSwKKyAgICBhdHNp ZGkgPSAxLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTeXN0ZW0gSUQgaW4vb3V0ICovCisg ICAgYXRzaWRvID0gMSwKKyAgICBhdHN5c2kgPSAxLCAgICAgICAgICAgICAgICAgICAgICAgIC8q IFN5c3RlbS1kZXBlbmRlbnQgcGFyYW1ldGVycyBpbi9vdXQgKi8KKyAgICBhdHN5c28gPSAxOwor CitpbnQgZGlzcG9zID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogRGlzcG9zaXRpb24g Ki8KKworI2lmZGVmIENLX1BFUk1TCitpbnQgYXRscHJpID0gMSwKKyAgICBhdGxwcm8gPSAxLAor ICAgIGF0Z3ByaSA9IDEsCisgICAgYXRncHJvID0gMTsKKyNlbmRpZiAvKiBDS19QRVJNUyAqLwor CitpbnQgYXRmcm1pID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVjb3JkIEZvcm1h dCBpbi9vdXQgKi8KKyAgICBhdGZybW8gPSAxOworCisjaWZkZWYgU1RSQVRVUworaW50IGF0Y3Jl aSA9IDEsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENyZWF0b3IgSUQgaW4vb3V0ICovCisg ICAgYXRjcmVvID0gMSwKKyAgICBhdGFjdGkgPSAxLCAgICAgICAgICAgICAgICAgICAgICAgICAv KiBBY2NvdW50IGluL291dCAqLworICAgIGF0YWN0byA9IDE7CisjZW5kaWYgLyogU1RSQVRVUyAq LworCitpbnQgc3BybWxlbiA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAgLyogU2VuZC9SZWNl aXZlIHByb3RvY29sIHBhcmFtZXRlciAqLworaW50IHJwcm1sZW4gPSAtMTsgICAgICAgICAgICAg ICAgICAgICAgIC8qIHN0cmluZyBsZW5ndGggbGltaXRzICovCitpbnQgc2VuZGlwa3RzID0gMTsg ICAgICAgICAgICAgICAgICAgICAgLyogU2VuZCBJIHBhY2tldHMgKi8KKworQ0hBUiBwYWRjaCA9 IE1ZUEFEQywgICAgICAgICAgICAgICAgICAgIC8qIFBhZGRpbmcgY2hhcmFjdGVyIHRvIHNlbmQg Ki8KKyAgICBteXBhZGMgPSBNWVBBREMsICAgICAgICAgICAgICAgICAgICAvKiBQYWRkaW5nIGNo YXJhY3RlciB0byBhc2sgZm9yICovCisgICAgc2VvbCA9IE1ZRU9MLCAgICAgICAgICAgICAgICAg ICAgICAgLyogRW5kLU9mLUxpbmUgY2hhcmFjdGVyIHRvIHNlbmQgKi8KKyAgICBlb2wgPSBNWUVP TCwgICAgICAgICAgICAgICAgICAgICAgICAvKiBFbmQtT2YtTGluZSBjaGFyYWN0ZXIgdG8gbG9v ayBmb3IgKi8KKyAgICBjdGxxID0gQ1RMUSwgICAgICAgICAgICAgICAgICAgICAgICAvKiBDb250 cm9sIHByZWZpeCBpbiBpbmNvbWluZyBkYXRhICovCisgICAgbXljdGxxID0gQ1RMUSwgICAgICAg ICAgICAgICAgICAgICAgLyogT3V0Ym91bmQgY29udHJvbCBjaGFyYWN0ZXIgcHJlZml4ICovCisg ICAgbXlycHRxID0gTVlSUFRROyAgICAgICAgICAgICAgICAgICAgLyogUmVwZWF0IHByZWZpeCBJ IHdhbnQgdG8gdXNlICovCisKK2ludCBycHRtaW4gPSAzOyAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBSZXBlYXQtY291bnQgbWluaW11bSAqLworCitpbnQgdXNlcGlwZXMgPSAwLCAgICAgICAg ICAgICAgICAgICAgICAgLyogVXNlZCBmb3IgeGZlciB0by9mcm9tIHBpcGVzICovCisgICAgZ191 c2VwaXBlcyA9IC0xOworCitjaGFyICogZmlsZWZpbGUgPSBOVUxMOyAgICAgICAgICAgICAgICAg LyogRmlsZSBjb250YWluaW5nIGxpc3Qgb2YgZmlsZW5hbWVzICovCisvKiBDRCBtZXNzYWdlIGZp bGVuYW1lIGxpc3QgKi8KKworY2hhciB3aG9hcmV1WzE2XSA9IHsgTlVMLCBOVUwgfTsgICAgICAg IC8qIFN5c3RlbSBJRCBvZiBvdGhlciBLZXJtaXQgKi8KK2ludCBzeXNpbmRleCA9IC0xOyAgICAg ICAgICAgICAgICAgICAgICAvKiBhbmQgaW5kZXggdG8gaXRzIHN5c3RlbSBJRCBzdHJ1Y3QgKi8K K2ludCBteWluZGV4ICA9IC0xOworaW50IHdlYXJlYWxpa2UgPSAwOyAgICAgICAgICAgICAgICAg ICAgIC8qIDIgS2VybWl0cyBoYXZlIGNvbXBhdGlibGUgc3lzaWRzICovCitjaGFyICogY2tzeXNp ZCA9ICAgICAgICAgICAgICAgICAgICAgICAgLyogTXkgc3lzdGVtIElEICovCisjaWZkZWYgVU5J WAorICAgICJVMSIKKyNlbHNlCisjaWZkZWYgVk1TCisgICAgIkQ3IgorI2Vsc2UKKyNpZmRlZiBP U0sKKyAgICAiVUQiCisjZWxzZQorI2lmZGVmIEFNSUdBCisgICAgIkwzIgorI2Vsc2UKKyNpZmRl ZiBNQUMKKyAgICAiQTMiCisjZWxzZQorI2lmZGVmIE9TMgorI2lmZGVmIE5UCisgICAgIlVOIgor I2Vsc2UgLyogTlQgKi8KKyAgICAiVU8iCisjZW5kaWYgLyogTlQgKi8KKyNlbHNlIC8qIE9TMiAq LworI2lmZGVmIGRhdGFnZW5lcmFsCisgICAgIkYzIgorI2Vsc2UKKyNpZmRlZiBHRU1ET1MKKyAg ICAiSzIiCisjZWxzZQorI2lmZGVmIFNUUkFUVVMKKyAgICAiTVYiCisjZWxzZQorICAgICIiCisj ZW5kaWYgLyogU1RSQVRVUyAqLworI2VuZGlmIC8qIEdFTURPUyAqLworI2VuZGlmIC8qIGRhdGFn ZW5lcmFsICovCisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogTUFDICovCisjZW5kaWYgLyog QU1JR0EgKi8KKyNlbmRpZiAvKiBPU0sgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBV TklYICovCisgICAgOworCitpbnQgb29wdHMgPSAtMTsgICAgICAgICAgICAgICAgICAgICAgICAg LyogTy1QYWNrZXQgT3B0aW9ucyAqLworaW50IG9tb2RlID0gLTE7ICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIE8tUGFja2V0IFRyYW5zZmVyIE1vZGUgKi8KK2ludCBvbmFtZSA9IC0xOyAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBPLVBhY2tldCBGaWxlbmFtZSBPcHRpb25zICovCitpbnQg b3BhdGggPSAtMTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogTy1QYWNrZXQgUGF0aG5hbWUg T3B0aW9ucyAqLworCitzdHJ1Y3QgemF0dHIgaWF0dHI7ICAgICAgICAgICAgICAgICAgICAgLyog SW5jb21pbmcgZmlsZSBhdHRyaWJ1dGVzICovCisKKyNpZmRlZiBWTVMKKy8qIFZNUyBsYWJlbGVk IGZpbGUgZGVmYXVsdCBvcHRpb25zIC0gbmFtZSBvbmx5LiAqLworaW50IGxmX29wdHMgPSBMQkxf TkFNOworI2Vsc2UKKyNpZmRlZiBPUzIKKy8qIE9TLzIgbGFiZWxlZCBmaWxlIGRlZmF1bHQgb3B0 aW9ucywgYWxsIGF0dHJpYnV0ZXMgYnV0IGFyY2hpdmVkLiAqLwordW5zaWduZWQgbG9uZyBpbnQg bGZfb3B0cyA9IExCTF9FWFR8TEJMX0hJRHxMQkxfUk98TEJMX1NZUzsKKyNlbHNlCitpbnQgbGZf b3B0cyA9IDA7CisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogVk1TICovCisKKy8qIFBhY2tl dC1yZWxhdGVkIHZhcmlhYmxlcyAqLworCitpbnQgcGt0bnVtID0gMCwgICAgICAgICAgICAgICAg ICAgICAgICAgLyogQ3VycmVudCBwYWNrZXQgbnVtYmVyICovCisgICAgc25kdHlwID0gMCwgICAg ICAgICAgICAgICAgICAgICAgICAgLyogVHlwZSBvZiBwYWNrZXQganVzdCBzZW50ICovCisgICAg cmN2dHlwID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogVHlwZSBvZiBwYWNrZXQganVz dCByZWNlaXZlZCAqLworICAgIHJzbiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IFJlY2VpdmVkIHBhY2tldCBzZXF1ZW5jZSBudW1iZXIgKi8KKyAgICBybG4sICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBSZWNlaXZlZCBwYWNrZXQgbGVuZ3RoICovCisgICAgc2l6 ZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ3VycmVudCBzaXplIG9mIG91dHB1 dCBwa3QgZGF0YSAqLworICAgIG9zaXplLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IFByZXZpb3VzIG91dHB1dCBwYWNrZXQgZGF0YSBzaXplICovCisgICAgbWF4c2l6ZSwgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogTWF4IHNpemUgZm9yIGJ1aWxkaW5nIGRhdGEgZmllbGQg Ki8KKyAgICBzcGt0bCA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBMZW5ndGggcGFj a2V0IGJlaW5nIHNlbnQgKi8KKyAgICBycGt0bCA9IDAsICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBMZW5ndGggb2YgcGFja2V0IGp1c3QgcmVjZWl2ZWQgKi8KKyAgICBwa3RwYXVzID0gMCwg ICAgICAgICAgICAgICAgICAgICAgICAvKiBJbnRlcnBhY2tldCBwYXVzZSBpbnRlcnZhbCwgbXNl YyAqLworICAgIHJwcmludGYsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJFTU9URSBQ UklOVCBmbGFnICovCisgICAgcm1haWxmLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog TUFJTCBmbGFnICovCisgICAgeGZlcnN0YXQgPSAtMSwgICAgICAgICAgICAgICAgICAgICAgLyog U3RhdHVzIG9mIGxhc3QgdHJhbnNhY3Rpb24gKi8KKyAgICBmaWxlc3RhdHVzID0gMDsgICAgICAg ICAgICAgICAgICAgICAvKiBTdGF0dXMgb2YgbGFzdCBmaWxlIHRyYW5zZmVyICovCisKK0NIQVIg cGt0bXNnYnVmW1BLVE1TR0xFTisxXTsKK0NIQVIgKmVwa3Rtc2cgPSBwa3Rtc2didWY7CisKKyNp ZmRlZiBwZHAxMQoraW50IHNydmNtZGxlbiA9IE1BWFJQOyAgICAgICAgICAgICAgICAgIC8qIHNy dmNtZCBidWZmZXIgbGVuZ3RoICovCisjZWxzZQorI2lmZGVmIERZTkFNSUMKK2ludCBzcnZjbWRs ZW4gPSBNQVhSUDsKKyNlbHNlCitpbnQgc3J2Y21kbGVuID0gMDsKKyNlbmRpZiAvKiBEWU5BTUlD ICovCisjZW5kaWYgLyogcGRwMTEgKi8KKworQ0hBUgorI2lmZGVmIHBkcDExCisgICAgc3J2Y21k YnVmW01BWFJQKzRdLAorICAgICpzcnZjbWQgPSBzcnZjbWRidWYsCisjZWxzZQorI2lmZGVmIERZ TkFNSUMKKyAgICAqc3J2Y21kID0gKENIQVIgKikwLCAgICAgICAgICAgICAgICAvKiBXaGVyZSB0 byBkZWNvZGUgc2VydmVyIGNvbW1hbmQgKi8KKyNlbHNlCisgICAgc3J2Y21kYnVmW01BWFJQKzRd LAorICAgICpzcnZjbWQgPSBzcnZjbWRidWYsCisjZW5kaWYgLyogRFlOQU1JQyAqLworI2VuZGlm IC8qIHBkcDExICovCisgICAgcGFkYnVmWzk2XSwgICAgICAgICAgICAgICAgICAgICAgICAgLyog QnVmZmVyIGZvciBzZW5kLXBhZGRpbmcgKi8KKyAgICAqcmVjcGt0LAorICAgICpyZGF0YXAsICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBvaW50ZXIgdG8gcmVjZWl2ZWQgcGFja2V0IGRh dGEgKi8KKyAgICAqZGF0YSA9IChDSEFSICopMCwgICAgICAgICAgICAgICAgICAvKiBQb2ludGVy IHRvIHNlbmQtcGFja2V0IGRhdGEgKi8KKyAgICAqc3J2cHRyLCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBQb2ludGVyIHRvIHNydmNtZCAqLworICAgIG15c3RjaCA9IFNPSCwgICAgICAg ICAgICAgICAgICAgICAgIC8qIE91dGJvdW5kIHBhY2tldC1zdGFydCBjaGFyYWN0ZXIgKi8KKyAg ICBzdGNociA9IFNPSDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBJbmNvbWluZyBwYWNrZXQt c3RhcnQgY2hhcmFjdGVyICovCisKKy8qIEZpbGUtcmVsYXRlZCB2YXJpYWJsZXMgKi8KKworI2lm bmRlZiBOT01TRU5EICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE11bHRpcGxlIFNFTkQgKi8K K3N0cnVjdCBmaWxlbGlzdCAqIGZpbGVoZWFkID0gTlVMTDsgICAgICAvKiBTRU5EIGxpc3QgKi8K K3N0cnVjdCBmaWxlbGlzdCAqIGZpbGV0YWlsID0gTlVMTDsKK3N0cnVjdCBmaWxlbGlzdCAqIGZp bGVuZXh0ID0gTlVMTDsKK2ludCBhZGRsaXN0ID0gMDsKKyNlbmRpZiAvKiBOT01TRU5EICovCisK K2NoYXIgZmlsbmFtW0NLTUFYUEFUSCArIDFdOyAgICAgICAgICAgICAvKiBOYW1lIG9mIGN1cnJl bnQgZmlsZS4gKi8KK2NoYXIgb2ZpbG5hbVtDS01BWFBBVEggKyAxXTsgICAgICAgICAgICAvKiBP cmlnaW5hbCBuYW1lLiAqLworCitpbnQgcGlwZXNlbmQgPSAwOyAgICAgICAgICAgICAgICAgICAg ICAgLyogTm9uemVybyBpZiBzZW5kaW5nIGZyb20gcGlwZSAqLworI2lmZGVmIFBJUEVTRU5ECitj aGFyICogc25kZmlsdGVyID0gTlVMTDsgICAgICAgICAgICAgICAgLyogU2VuZCBhbmQgcmVjZWl2 ZSBmaWx0ZXJzICovCitjaGFyICogcmN2ZmlsdGVyID0gTlVMTDsKKyNlbmRpZiAvKiBQSVBFU0VO RCAqLworCitjaGFyICoqIHNuZGFycmF5ID0gTlVMTDsgICAgICAgICAgICAgICAgLyogU0VORCAv QVJSQVkgcG9pbnRlciBhbmQgcmFuZ2UgKi8KKyNpZm5kZWYgTk9TUEwKK2ludCBzbmR4bG8gPSAt MSwgc25keGhpID0gLTEsIHNuZHhpbiA9IC0xOworI2VuZGlmIC8qIE5PU1BMICovCisjZW5kaWYg LyogTk9YRkVSICovCisKKyNpZm5kZWYgTk9TRVJWRVIKK2ludCBuZ2V0cGF0aCA9IDA7ICAgICAg ICAgICAgICAgICAgICAgICAvKiBHRVQgc2VhcmNoIHBhdGggKi8KK2ludCBmcm9tZ2V0cGF0aCA9 IDA7CitjaGFyICogZ2V0cGF0aFtNQVhHRVRQQVRIXTsKK2NoYXIgKiB4X3VzZXIgPSBOVUxMOyAg ICAgICAgICAgICAgICAgICAvKiBTZXJ2ZXIgbG9naW4gaW5mb3JtYXRpb24gKi8KK2NoYXIgKiB4 X3Bhc3N3ZCA9IE5VTEw7CitjaGFyICogeF9hY2N0ID0gTlVMTDsKKyNlbmRpZiAvKiBOT1NFUlZF UiAqLworCitpbnQgeF9sb2dpbiA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgLyogTG9naW4g cmVxdWlyZWQgKi8KK2ludCB4X2xvZ2dlZCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAvKiBV c2VyIGlzIGxvZ2dlZCBpbiAqLworCitleHRlcm4gaW50IHRpbWVsaW1pdDsKKworI2lmZGVmIENL X0xPR0lOCitpbnQgbG9naW50aW1vID0gMzAwOyAgICAgICAgICAgICAgICAgICAgLyogTG9naW4g dGltZW91dCAqLworY2hhciAqIHVzZXJmaWxlID0gTlVMTDsgICAgICAgICAgICAgICAgIC8qIEZv cmJpZGRlbiB1c2VyIGZpbGUgKi8KKyNlbmRpZiAvKiBDS19MT0dJTiAqLworI2lmZGVmIElLU0QK K2NoYXIgKiBhbm9uZmlsZSA9IE5VTEw7ICAgICAgICAgICAgICAgICAvKiBBbm9ueW1vdXMgbG9n aW4gaW5pdCBmaWxlICovCitjaGFyICogYW5vbnJvb3QgPSBOVUxMOyAgICAgICAgICAgICAgICAg LyogQW5vbnltb3VzIGZpbGUtc3lzdGVtIHJvb3QgKi8KK2ludCBpa3NfdGltbyAgPSAzMDA7ICAg ICAgICAgICAgICAgICAgICAvKiA1IG1pbnV0ZXMgaWRsZSB0aW1vICovCitpbnQgaWtzX3JldHJ5 ID0gMzsgICAgICAgICAgICAgICAgICAgICAgLyogMyBhdHRlbXB0cyBhdCBsb2dpbiAqLworI2Vu ZGlmIC8qIElLU0QgKi8KKworI2lmZGVmIENLU1lTTE9HCitleHRlcm4gVk9JRCB6c3lzbG9nKCk7 CitleHRlcm4gaW50IGNreGxvZ2dpbmcsIGNreHN5c2xvZzsKKyNlbmRpZiAvKiBDS1NZU0xPRyAq LworCitDS19PRkZfVCBmc2l6ZSA9IChDS19PRkZfVCkwLAkJLyogU2l6ZSBvZiBjdXJyZW50IGZp bGUgKi8KKyBzZW5kc3RhcnQgPSAoQ0tfT0ZGX1QpMCwJCS8qIFNFTkQgc3RhcnQgcG9zaXRpb24g Ki8KKyBjYWxpYnJhdGUgPSAoQ0tfT0ZGX1QpMDsJCS8qIE5vbnplcm8gaWYgY2FsaWJyYXRpb24g cnVuICovCisKK2ludCBuenhvcHRzID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBPcHRp b25zIGZvciBuenhwYW5kKCkgKi8KK2ludCBuZmlscyA9IDA7ICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBOdW1iZXIgb2YgZmlsZXMgaW4gZmlsZSBncm91cCAqLworaW50IHdpbGRlbmEgPSAx OwkJCS8qIFdpbGRjYXJkIGV4cGFuc2lvbiBlbmFibGVkICovCisjaWZkZWYgVU5JWAoraW50IHdp bGR4cGFuZCA9IDA7ICAgICAgICAgICAgICAgICAgICAgIC8qIFdobyBleHBhbmRzIHdpbGRjYXJk cywgMD1LZXJtaXQuLiAqLworI2Vsc2UgLyogVU5JWCAqLworI2lmZGVmIFNUUkFUVVMKK2ludCB3 aWxkeHBhbmQgPSAxOwkJCS8qIDE9U2hlbGwuICovCisjZW5kaWYgLyogU1RSQVRVUyAqLworI2Vu ZGlmIC8qIFVOSVggKi8KKyNpZmRlZiBVTklYT1JPU0sKK2ludCBtYXRjaGRvdCA9IDA7ICAgICAg ICAgICAgICAgICAgICAgICAvKiBXaGV0aGVyIHRvIG1hdGNoIGRvdCBmaWxlcyAqLworI2Vsc2UK K2ludCBtYXRjaGRvdCA9IDE7CisjZW5kaWYgLyogVU5JWE9ST1NLICovCitpbnQgbWF0Y2hmaWZv ID0gMDsJCQkvKiBXaGV0aGVyIHRvIG1hdGNoIEZJRk8gImZpbGVzIiAqLworaW50IGNsZmlscyA9 IDA7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZsYWcgZm9yIGNvbW1hbmQtbGluZSBmaWxl cyAqLworaW50IHN0YXlmbGcgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZsYWcgZm9y ICJzdGF5IiwgaS5lLiAiLVMiICovCitpbnQgeGZpbmlzaCA9IDA7ICAgICAgICAgICAgICAgICAg ICAgICAgLyogRmxhZyBmb3IgRklOSVNIID0gRVhJVCAqLworbG9uZyB6dHVzZWMgPSAtMUw7ICAg ICAgICAgICAgICAgICAgICAgIC8qIFVzZWQgd2l0aCB6dGltZSgpICovCitsb25nIHp0bXNlYyA9 IC0xTDsgICAgICAgICAgICAgICAgICAgICAgLyogRGl0dG8gKi8KKworLyogQ29tbXVuaWNhdGlv biBkZXZpY2UgLyBjb25uZWN0aW9uIHZhcmlhYmxlcyAqLworCitjaGFyIHR0bmFtZVtUVE5BTUxF TisxXTsgICAgICAgICAgICAgICAgLyogTmFtZSBvZiBjb21tdW5pY2F0aW9uIGRldmljZSAqLwor CisjaWZkZWYgTUFDCitpbnQgY29ubmVjdGVkID0gMDsgICAgICAgICAgICAgICAgICAgICAgLyog VHJ1ZSBpZiBjb25uZWN0ZWQgKi8KK2ludCBzdGFydGNvbm5lY3RlZDsgICAgICAgICAgICAgICAg ICAgICAvKiBpbml0aWFsIHN0YXRlIG9mIGNvbm5lY3RlZCAqLworI2VuZGlmIC8qIE1BQyAqLwor Citsb25nIHNwZWVkID0gLTFMOyAgICAgICAgICAgICAgICAgICAgICAgLyogQ29tbXVuaWNhdGlv biBkZXZpY2Ugc3BlZWQgKi8KK2ludCB3YXNjbG9zZWQgPSAwOyAgICAgICAgICAgICAgICAgICAg ICAvKiBDb25uZWN0aW9uIHdhcyBqdXN0IGNsb3NlZCAqLworaW50IHdoeWNsb3NlZCA9IFdDX1JF TU87ICAgICAgICAgICAgICAgIC8qIHdoeSBpdCB3YXMgY2xvc2VkICovCitpbnQgcW54cG9ydGxv Y2sgPSAwOyAgICAgICAgICAgICAgICAgICAgLyogUU5YIHBvcnQgbG9ja2luZyBvbi9vZmYgKi8K KworI2lmbmRlZiBDTFNPTkRJU0MKKyNkZWZpbmUgQ0xTT05ESVNDIDAKKyNlbmRpZiAvKiBDTFNP TkRJU0MgKi8KKworaW50IGN4Zmxvd1tDWFRfTUFYKzFdOyAgICAgICAgICAgICAgICAgIC8qIFNl ZSBpbml0ZmxvdygpICovCisKKyNpZm5kZWYgTk9TSE9XCitjaGFyICogZmxvbmFtZVtdID0geyAg ICAgICAgICAgICAgICAgICAgLyogRmxvdyBjb250cm9sIG5hbWVzICovCisgICJub25lIiwgInhv bi94b2ZmIiwgInJ0cy9jdHMiLCAiZHRyL2NkIiwgImV0eC9hY2siLCAic3RyaW5nIiwKKyAgInh4 eDEiLCAieHh4MiIsICJkdHIvY3RzIiwgImtlZXAiLCAiYXV0byIKK307CitpbnQgbmZsb25hbWUg PSAoc2l6ZW9mKGZsb25hbWUpIC8gc2l6ZW9mKGNoYXIgKikpOworCitjaGFyICogY3huYW1lW10g PSB7ICAgICAgICAgICAgICAgICAgICAgLyogQ29ubmVjdGlvbiB0eXBlIG5hbWVzICovCisgICJy ZW1vdGUiLCAiZGlyZWN0LXNlcmlhbCIsICJtb2RlbSIsICJ0Y3AvaXAiLCAieC4yNSIsICJkZWNu ZXQiLAorICAibGF0IiwgIm5ldGJpb3MiLCAibmFtZWQtcGlwZSIsICJzc2giLCAicGlwZSIKK307 CitpbnQgbmN4bmFtZSA9IChzaXplb2YoY3huYW1lKSAvIHNpemVvZihjaGFyICopKTsKKyNlbmRp ZiAvKiBOT1NIT1cgKi8KKworaW50IHBhcml0eSA9IERFRlBBUiwgICAgICAgICAgICAgICAgICAg IC8qIFBhcml0eSBzcGVjaWZpZWQsIDAsJ2UnLCdvJyxldGMgKi8KKyAgICBod3Bhcml0eSA9IDAs ICAgICAgICAgICAgICAgICAgICAgICAvKiBIYXJkd2FyZSBwYXJpdHkgZm9yIHNlcmlhbCBwb3J0 ICovCisgICAgc3RvcGJpdHMgPSAtMSwgICAgICAgICAgICAgICAgICAgICAgLyogU3RvcCBiaXRz IGZvciBzZXJpYWwgcG9ydCAqLworICAgIGNsc29uZGlzYyA9IENMU09ORElTQywgICAgICAgICAg ICAgIC8qIFNlcmlhbCBwb3J0IGNsb3NlIG9uIGRpc2Nvbm5lY3QgKi8KKyAgICBhdXRvcGFyID0g MCwgICAgICAgICAgICAgICAgICAgICAgICAvKiBBdXRvbWF0aWMgcGFyaXR5IGNoYW5nZSBmbGFn ICovCisgICAgc29zaSA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2hpZnQtSW4v T3V0IGZsYWcgKi8KKyAgICBmbG93ID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBG bG93IGNvbnRyb2wgKHNlZSBpbml0ZmxvdygpKSAqLworICAgIGF1dG9mbG93ID0gMSwgICAgICAg ICAgICAgICAgICAgICAgIC8qIEF1dG9tYXRpYyBmbG93IGNvbnRyb2wgKi8KKyAgICB0dXJuID0g MCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBMaW5lIHR1cm5hcm91bmQgaGFuZHNoYWtl IGZsYWcgKi8KKyAgICB0dXJuY2ggPSBYT04sICAgICAgICAgICAgICAgICAgICAgICAvKiBMaW5l IHR1cm5hcm91bmQgY2hhcmFjdGVyICovCisgICAgZHVwbGV4ID0gMCwgICAgICAgICAgICAgICAg ICAgICAgICAgLyogRHVwbGV4LCBmdWxsIGJ5IGRlZmF1bHQgKi8KKyAgICBlc2NhcGUgPSBERkVT QywgICAgICAgICAgICAgICAgICAgICAvKiBFc2NhcGUgY2hhcmFjdGVyIGZvciBjb25uZWN0ICov CisgICAgY2tkZWxheSA9IERERUxBWSwgICAgICAgICAgICAgICAgICAgLyogSW5pdGlhbCBkZWxh eSBiZWZvcmUgc2VuZGluZyAqLworICAgIHRubG0gPSAwOyAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIFRlcm1pbmFsIG5ld2xpbmUgbW9kZSAqLworCisvKiBOZXR3b3JrcyBmb3IgU0VUIEhP U1QgKi8KKworI2lmZGVmIEJJR0JVRk9LCisjZGVmaW5lIE1ZSE9TVEwgMTAyNAorI2Vsc2UKKyNk ZWZpbmUgTVlIT1NUTCAxMDAKKyNlbmRpZiAvKiBCSUdCVUZPSyAqLworCitjaGFyIG15aG9zdFtN WUhPU1RMXTsgICAgICAgICAgICAgICAgICAgLyogTG9jYWwgaG9zdCBuYW1lICovCitpbnQgbmV0 d29yayA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgLyogTmV0d29yayB2cyBzZXJpYWwgY29u bmVjdGlvbiAqLworaW50IGluc2VydmVyID0gMDsgICAgICAgICAgICAgICAgICAgICAgIC8qIFJ1 bm5pbmcgYXMgYW4gSW50ZXJuZXQgc2VydmVyICovCitpbnQgaXNndWVzdCA9IDA7ICAgICAgICAg ICAgICAgICAgICAgICAgLyogVXNlciBpcyBhbm9ueW1vdXMgKi8KK2NoYXIgKiBjbGllbnRob3N0 ID0gTlVMTDsgICAgICAgICAgICAgICAvKiBQZWVyIGhvc3QgbmFtZSBvciBhZGRyZXNzICovCitp bnQgdGNwX2luY29taW5nID0gMDsgICAgICAgICAgICAgICAgICAgLyogSW5jb21pbmcgVENQIGNv bm5lY3Rpb24/ICovCisKKyNpZmRlZiBORVRDT05OCisjaWZkZWYgVENQU09DS0VUCitpbnQgbmV0 dHlwZSA9IE5FVF9UQ1BCOyAgICAgICAgICAgICAgICAgLyogRGVmYXVsdCBuZXR3b3JrIHR5cGUg Ki8KKyNlbHNlCisjaWZkZWYgU1VOWDI1CitpbnQgbmV0dHlwZSA9IE5FVF9TWDI1OworI2Vsc2UK KyNpZmRlZiBJQk1YMjUKK2ludCBuZXR0eXBlID0gTkVUX0lYMjU7CisjZWxzZQorI2lmZGVmIEhQ WDI1CitpbnQgbmV0dHlwZSA9IE5FVF9IWDI1OworI2Vsc2UKKyNpZmRlZiBTVFJBVFVTWDI1Citp bnQgbmV0dHlwZSA9IE5FVF9WWDI1OworI2Vsc2UKKyNpZmRlZiBERUNORVQKK2ludCBuZXR0eXBl ID0gTkVUX0RFQzsKKyNlbHNlCisjaWZkZWYgU1VQRVJMQVQKK2ludCBuZXR0eXBlID0gTkVUX1NM QVQ7CisjZWxzZQoraW50IG5ldHR5cGUgPSBORVRfTk9ORTsKKyNlbmRpZiAvKiBTVVBFUkxBVCAq LworI2VuZGlmIC8qIERFQ05FVCAqLworI2VuZGlmIC8qIFNUUkFUVVNYMjUgKi8KKyNlbmRpZiAv KiBIUFgyNSAqLworI2VuZGlmIC8qIElCTVgyNSAqLworI2VuZGlmIC8qIFNVTlgyNSAqLworI2Vu ZGlmIC8qIFRDUFNPQ0tFVCAqLworI2Vsc2UgIC8qIE5FVENPTk4gKi8KK2ludCBuZXR0eXBlID0g TkVUX05PTkU7CisjZW5kaWYgLyogTkVUQ09OTiAqLworCisjaWZkZWYgQU5ZWDI1CitpbnQgcmV2 Y2FsbCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgLyogWC4yNSByZXZlcnNlIGNhbGwgbm90 IHNlbGVjdGVkICovCitpbnQgY2xvc2dyICA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAgLyog WC4yNSBjbG9zZWQgdXNlciBncm91cCAgKi8KK2ludCBjdWRhdGEgPSAwOyAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBYLjI1IGNhbGwgdXNlciBkYXRhIG5vdCBzcGVjaWZpZWQgKi8KK2NoYXIg dWRhdGFbTUFYQ1VEQVRBXTsgICAgICAgICAgICAgICAgICAvKiBYLjI1IGNhbGwgdXNlciBkYXRh ICovCisKKyNpZmRlZiBJQk1YMjUKKy8qCisgIEkgd2FzIHVuYWJsZSB0byBmaW5kIGFueSBwcmUt ZGVmaW5lZCBNQVggdmFsdWVzIGZvciB4MjUgYWRkcmVzc2VzIC0gdGhlCisgIGFkZHJlc3NlcyB0 aGF0IEkndmUgc2VlbiBoYXZlIGJlZW4gYXJvdW5kIDEwLTEyIGNoYXJhY3RlcnMgMzIgaXMgcHJv YmFibHkKKyAgZW5vdWdoLCA2NCBpcyBob3BlZnVsbHkgc2FmZSBmb3IgZXZlcnlvbmUuCisqLwor ICAgIHgyNWFkZHJfdCBsb2NhbF9udWEgPSB7J1wwJ307ICAgICAgIC8qIGxvY2FsIHguMjUgYWRk cmVzcyAqLworICAgIHgyNWFkZHJfdCByZW1vdGVfbnVhID0geydcMCd9OyAgICAgIC8qIHJlbW90 ZSB4LjI1IGFkZHJlc3MgKi8KKyAgICBjaGFyIHgyNW5hbWVbMzJdID0geydcMCd9OyAgICAgICAg ICAvKiB4MjUgZGV2aWNlIG5hbWUsIHN4MjVhMCBvciBzeDI1YTEgKi8KKyAgICBjaGFyIHgyNWRl dls2NF0gPSAgIi9kZXYveDI1cGt0IjsgICAvKiB4MjUgZGV2aWNlIGluIC9kZXYgKi8KKyAgICBp bnQgeDI1cG9ydCA9IDA7ICAgICAgICAgICAgICAgICAgICAvKiBwb3J0IHVzZWQgZm9yIFguMjUg LSBBSVggb25seSAqLworI2VuZGlmIC8qIElCTVgyNSAqLworCisjaWZuZGVmIElCTVgyNQorLyoK KyAgVGhpcyBjb25kaXRpb24gaXMgdW5yZWxhdGVkIHRvIHRoZSBhYm92ZSBJQk1YMjUgY29uZGl0 aW9uLgorICBJQk0gWC4yNSBkb2Vzbid0IGhhdmUgUEFEIHN1cHBvcnQuCisqLworICAgIENIQVIg cGFkcGFybXNbTUFYUEFEUEFSTVMrMV07IC8qIFguMyBwYXJhbWV0ZXJzICovCisjZW5kaWYgLyog SUJNWDI1ICovCisjZW5kaWYgLyogQU5ZWDI1ICovCisKKy8qIE90aGVyIGl0ZW1zICovCisKK2lu dCBpc2ludGVycnVwdGVkID0gMDsgICAgICAgICAgICAgICAgICAvKiBVc2VkIGluIGV4Y2VwdGlv biBoYW5kbGluZyAqLworaW50IHdoYXQgPSBXX0lOSVQ7ICAgICAgICAgICAgICAgICAgICAgIC8q IFdoYXQgSSBhbSBkb2luZyAqLworaW50IGxhc3R4ZmVyID0gMDsgICAgICAgICAgICAgICAgICAg ICAgIC8qIExhc3QgdHJhbnNmZXIgKHNlbmQgb3IgcmVjZWl2ZSkgKi8KKworZXh0ZXJuIGludCBt ZG10eXA7ICAgICAgICAgICAgICAgICAgICAgIC8qIE1vZGVtICgvbmV0d29yaykgdHlwZSAqLwor CisjaWZkZWYgTlQKK2V4dGVybiBpbnQgU3RhcnRlZEZyb21EaWFsZXI7CisjaWZkZWYgTlRTSUcK K2V4dGVybiBpbnQgVGxzSW5kZXg7CisjZW5kaWYgLyogTlRTSUcgKi8KKyNpZmRlZiBOVEFTTQor dW5zaWduZWQgbG9uZyBFU1BUb1Jlc3RvcmU7ICAgICAgICAgICAgIC8qIERpdHRvICovCisjZW5k aWYgLyogTlRBU00gKi8KKyNlbmRpZiAvKiBOVCAqLworCisjaWZkZWYgT1MyUE0KK2ludCBvczJw bSA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBPUy8yIFByZXNlbnRhdGlvbiBNYW5h Z2VyIGZsYWcgKi8KKyNlbmRpZiAvKiBPUzJQTSAqLworCisvKiBUZXJtaW5hbCBzY3JlZW4gc2l6 ZSwgaWYga25vd24sIC0xIG1lYW5zIHVua25vd24uICovCisKKyNpZmRlZiBPUzIKKyNpbmNsdWRl ICJja29jb24uaCIKKyNpZmRlZiBLVUkKK2ludCB0dF9yb3dzW1ZOVU1dID0gezI0LDI0LDI1LDF9 OyAgICAgICAvKiBSb3dzIChoZWlnaHQpICovCitpbnQgdHRfY29sc1tWTlVNXSA9IHs4MCw4MCw4 MCw4MH07ICAgICAgLyogQ29sdW1ucyAod2lkdGgpICovCitpbnQgY21kX3Jvd3MgPSAyNCwgY21k X2NvbHMgPSA4MDsgICAgICAgLyogQ29tbWFuZC9jb25zb2xlIHNjcmVlbiBkaW1lbnNpb25zICov CisjZWxzZSAvKiBLVUkgKi8KK2ludCB0dF9yb3dzW1ZOVU1dID0gey0xLDI0LDI1LDF9OyAgICAg ICAvKiBSb3dzIChoZWlnaHQpICovCitpbnQgdHRfY29sc1tWTlVNXSA9IHstMSw4MCw4MCw4MH07 ICAgICAgLyogQ29sdW1ucyAod2lkdGgpICovCitpbnQgY21kX3Jvd3MgPSAtMSwgY21kX2NvbHMg PSAtMTsgICAgICAgLyogQ29tbWFuZC9jb25zb2xlIHNjcmVlbiBkaW1lbnNpb25zICovCisjZW5k aWYgLyogS1VJICovCitpbnQgazk1c3RkaW8gPSAwOyAgICAgICAgICAgICAgICAgICAgICAgLyog U3RkaW8gdGhyZWFkcyAqLworaW50IHR0X2JlbGwgPSBYWUJfQVVEIHwgWFlCX1NZUzsgICAgICAg IC8qIEJFTEwgQVVESUJMRSAoc3lzdGVtIHNvdW5kcykgKi8KKyNlbHNlIC8qIE9TMiAqLworaW50 IHR0X3Jvd3MgPSAtMTsgICAgICAgICAgICAgICAgICAgICAgIC8qIFJvd3MgKGhlaWdodCkgKi8K K2ludCB0dF9jb2xzID0gLTE7ICAgICAgICAgICAgICAgICAgICAgICAvKiBDb2x1bW5zICh3aWR0 aCkgKi8KK2ludCBjbWRfcm93cyA9IDI0LCBjbWRfY29scyA9IDgwOyAgICAgICAvKiBDb21tYW5k L2NvbnNvbGUgc2NyZWVuIGRpbWVuc2lvbnMgKi8KK2ludCB0dF9iZWxsID0gWFlCX0FVRDsgICAg ICAgICAgICAgICAgICAvKiBCRUxMIE9OICovCisjZW5kaWYgLyogT1MyICovCisKK2ludCB0dF9w cmludCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAvKiBUcmFuc3BhcmVudCBwcmludCBkaXNh YmxlZCAqLworaW50IHR0X2VzY2FwZSA9IDE7ICAgICAgICAgICAgICAgICAgICAgIC8qIEVzY2Fw aW5nIGJhY2sgaXMgZW5hYmxlZCAqLworaW50IHR0X3Njcm9sbCA9IDE7ICAgICAgICAgICAgICAg ICAgICAgIC8qIFNjcm9sbGluZyBvcGVyYXRpb25zIGFyZSBlbmFibGVkICovCisKK2ludCB0bl9l eGl0ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBFeGl0IG9uIGRpc2Nvbm5lY3QgKi8K KworaW50IGV4aXRvbmNsb3NlID0gMDsgICAgICAgICAgICAgICAgICAgIC8qIEV4aXQgb24gY2xv c2UgKi8KK2ludCBleGl0aGFuZ3VwID0gMTsgICAgICAgICAgICAgICAgICAgICAvKiBIYW5ndXAg b24gZXhpdCAqLworaW50IGhhdmVsaW5lID0gMDsgICAgICAgICAgICAgICAgICAgICAgIC8qIFNF VCBMSU5FIG9yIFNFVCBIT1NUIGluIGVmZmVjdCAqLworaW50IHRsZXZlbCA9IC0xOyAgICAgICAg ICAgICAgICAgICAgICAgIC8qIFRha2UtZmlsZSBjb21tYW5kIGxldmVsICovCitpbnQgaGludHMg PSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogV2hldGhlciB0byBnaXZlIGhpbnRzICov CisKKyNpZmRlZiBOT0xPQ0FMCitpbnQgcmVtb25seSA9IDE7ICAgICAgICAgICAgICAgICAgICAg ICAgLyogUmVtb3RlLW1vZGUtb25seSBhZHZpc29yeSAoLVIpICovCitpbnQgbm9sb2NhbCA9IDE7 ICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVtb3RlLW9ubHkgc3RyaWN0bHkgZW5mb3JjZWQg Ki8KKyNlbHNlCitpbnQgcmVtb25seSA9IDA7CitpbnQgbm9sb2NhbCA9IDA7CitpbnQgY3hfc3Rh dHVzID0gMDsgICAgICAgICAgICAgICAgICAgICAgLyogQ09OTkVDVCByZXR1cm4gc3RhdHVzICov CisjZW5kaWYgLyogTk9MT0NBTCAqLworCisjaWZuZGVmIE5PU1BMCitleHRlcm4gaW50IGNtZGx2 bDsgICAgICAgICAgICAgICAgICAgICAgLyogQ29tbWFuZCBsZXZlbCAqLworZXh0ZXJuIGludCBt YWNsdmw7ICAgICAgICAgICAgICAgICAgICAgIC8qIE1hY3JvIGludm9jYXRpb24gbGV2ZWwgKi8K KyNlbmRpZiAvKiBOT1NQTCAqLworCitpbnQgcHJvdG9jb2wgID0gUFJPVE9fSzsgICAgICAgICAg ICAgICAgLyogRmlsZSB0cmFuc2ZlciBwcm90b2NvbCA9IEtlcm1pdCAqLworCisjaWZkZWYgTkVX REVGQVVMVFMKK2ludCBwcmVmaXhpbmcgPSBQWF9DQVU7CisjZWxzZQoraW50IHByZWZpeGluZyA9 IFBYX0FMTDsKKyNlbmRpZiAvKiBORVdERUZBVUxUUyAqLworCitleHRlcm4gc2hvcnQgY3RscFtd OyAgICAgICAgICAgICAgICAgICAgLyogQ29udHJvbC1wcmVmaXggdGFibGUgKi8KKworaW50IGNh cnJpZXIgPSBDQVJfQVVUOyAgICAgICAgICAgICAgICAgIC8qIFBheSBhdHRlbnRpb24gdG8gY2Fy cmllciBzaWduYWwgKi8KK2ludCBjZHRpbW8gPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAv KiBDYXJyaWVyIHdhaXQgdGltZW91dCAqLworaW50IHhpdHN0YSA9IEdPT0RfRVhJVDsgICAgICAg ICAgICAgICAgIC8qIFByb2dyYW0gZXhpdCBzdGF0dXMgKi8KKworI2lmZGVmIFZNUyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIERlZmF1bHQgZmlsZW5hbWUgY29sbGlzaW9uIGFjdGlv biAqLworaW50IGZuY2FjdCA9IFhZRlhfWDsgICAgICAgICAgICAgICAgICAgIC8qIFJFUExBQ0Ug Zm9yIFZNUyAqLworI2Vsc2UKK2ludCBmbmNhY3QgPSBYWUZYX0I7ICAgICAgICAgICAgICAgICAg ICAvKiBCQUNLVVAgZm9yIGV2ZXJ5Ym9keSBlbHNlICovCisjZW5kaWYgLyogVk1TICovCisKK2lu dCBmbmNzYXYgPSAtMTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBGb3Igc2F2aW5nICYgcmVz dG9yaW5nIHRoZSBhYm92ZSAqLworaW50IGJnc2V0ID0gLTE7ICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIEJBQ0tHUk9VTkQgbW9kZSBzZXQgZXhwbGljaXRseSAqLworCitpbnQgY21kaW50ID0g MTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogSW50ZXJydXB0cyBhcmUgYWxsb3dlZCAqLwor I2lmZGVmIFVOSVgKK2ludCB4c3VzcGVuZCA9IERGU1VTUDsJCQkvKiBXaGV0aGVyIFNVU1BFTkQg Y29tbWFuZCwgZXRjLCAqLworI2Vsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIGlzIHRvIGJlIGFsbG93ZWQuICovCitpbnQgeHN1c3BlbmQgPSAwOworI2VuZGlmIC8qIFVO SVggKi8KKworLyogU3RhdGlzdGljcyB2YXJpYWJsZXMgKi8KKworQ0tfT0ZGX1QKKyAgICBmbGNp LCAgICAgICAgICAgICAgICAgICAgICAgLyogQ2hhcmFjdGVycyBmcm9tIGxpbmUsIGN1cnJlbnQg ZmlsZSAqLworICAgIGZsY28sICAgICAgICAgICAgICAgICAgICAgICAvKiBDaGFycyB0byBsaW5l LCBjdXJyZW50IGZpbGUgICovCisgICAgdGxjaSwgICAgICAgICAgICAgICAgICAgICAgIC8qIENo YXJzIGZyb20gbGluZSBpbiB0cmFuc2FjdGlvbiAqLworICAgIHRsY28sICAgICAgICAgICAgICAg ICAgICAgICAvKiBDaGFycyB0byBsaW5lIGluIHRyYW5zYWN0aW9uICovCisgICAgZmZjLCAgICAg ICAgICAgICAgICAgICAgICAgIC8qIENoYXJzIHRvL2Zyb20gY3VycmVudCBmaWxlICovCisgICAg dGZjOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIENoYXJzIHRvL2Zyb20gZmlsZXMgaW4gdHJh bnNhY3Rpb24gKi8KKworbG9uZyBmaWxjbnQsICAgICAgICAgICAgICAgICAgICAvKiBOdW1iZXIg b2YgZmlsZXMgaW4gdHJhbnNhY3Rpb24gKi8KKyAgICBmaWxyZWosICAgICAgICAgICAgICAgICAg ICAgLyogTnVtYmVyIG9mIGZpbGVzIHJlamVjdGVkIGluIHRyYW5zYWN0aW9uICovCisgICAgY3Bz ID0gMEwsICAgICAgICAgICAgICAgICAgIC8qIENoYXJzL3NlYyBsYXN0IHRyYW5zZmVyICovCisg ICAgcGVha2NwcyA9IDBMLCAgICAgICAgICAgICAgIC8qIFBlYWsgY2hhcnMvc2VjIGxhc3QgdHJh bnNmZXIgKi8KKyAgICBjY3UsICAgICAgICAgICAgICAgICAgICAgICAgLyogQ29udHJvbCBjaGFy cyB1bnByZWZpeGVkIGluIHRyYW5zYWN0aW9uICovCisgICAgY2NwLCAgICAgICAgICAgICAgICAg ICAgICAgIC8qIENvbnRyb2wgY2hhcnMgcHJlZml4ZWQgaW4gdHJhbnNhY3Rpb24gKi8KKyAgICBy cHRuOyAgICAgICAgICAgICAgICAgICAgICAgLyogUmVwZWF0ZWQgY2hhcmFjdGVycyBjb21wcmVz c2VkICovCisKK2ludCB0c2VjcyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTZWNv bmRzIGZvciB0cmFuc2FjdGlvbiAqLworaW50IGZzZWNzID0gMDsgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIFBlci1maWxlIHRpbWVyICovCisKKyNpZmRlZiBHRlRJTUVSCitDS0ZMT0FUCisg IGZwZnNlY3MgPSAwLjAsICAgICAgICAgICAgICAgICAgICAgICAgLyogRmxvYXRpbmcgcG9pbnQg cGVyLWZpbGUgdGltZXIgKi8KKyAgZnB0c2VjcyA9IDAuMDsgICAgICAgICAgICAgICAgICAgICAg ICAvKiBhbmQgcGVyLXRyYW5zYWN0aW9uIHRpbWVyICovCisjZW5kaWYgLyogR0ZUSU1FUiAqLwor CisvKiBGbGFncyAqLworCitpbnQgZGVibG9nID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAg LyogRGVidWcgbG9nIGlzIG9wZW4gKi8KKyAgICBkZWJvayA9IDEsICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBEZWJ1ZyBsb2cgaXMgbm90IGRpc2FibGVkICovCisgICAgZGVieGxlbiA9IDU0 LCAgICAgICAgICAgICAgICAgICAgICAgLyogRGVmYXVsdCBsZW5ndGggZm9yIGRlYnVnIHN0cmlu Z3MgKi8KKyAgICBkZWJzZXMgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGbGFnIGZv ciBERUJVRyBTRVNTSU9OICovCisgICAgZGVidGltID0gMCwgICAgICAgICAgICAgICAgICAgICAg ICAgLyogSW5jbHVkZSB0aW1lc3RhbXAgaW4gZGVidWcgbG9nICovCisgICAgZGVibXNnID0gMCwg ICAgICAgICAgICAgICAgICAgICAgICAgLyogRGVidWcgbWVzc2FnZXMgb24vb2ZmICovCisgICAg cGt0bG9nID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogRmxhZyBmb3IgcGFja2V0IGxv Z2dpbmcgKi8KKyAgICBzZXNsb2cgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTZXNz aW9uIGxvZ2dpbmcgKi8KKyAgICBkaWFsb2cgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAv KiBESUFMIGxvZ2dpbmcgKi8KKyAgICB0cmFsb2cgPSAwLCAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBUcmFuc2FjdGlvbiBsb2dnaW5nICovCisgICAgdGxvZ2ZtdCA9IDEsICAgICAgICAgICAg ICAgICAgICAgICAgLyogVHJhbnNhY3Rpb24gbG9nIGZvcm1hdCAodmVyYm9zZSkgKi8KKyAgICB0 bG9nc2VwID0gKGludCknLCcsICAgICAgICAgICAgICAgICAvKiBUcmFuc2FjdGlvbiBsb2cgZmll bGQgc2VwYXJhdG9yICovCisgICAgZGlzcGxhID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAg LyogRmlsZSB0cmFuc2ZlciBkaXNwbGF5IG9uL29mZiAqLworICAgIHN0ZG91ZiA9IDAsICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIEZsYWcgZm9yIG91dHB1dCB0byBzdGRvdXQgKi8KKyAgICBz dGRpbmYgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGbGFnIGZvciBpbnB1dCBmcm9t IHN0ZGluICovCisgICAgeGZsZyAgID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogRmxh ZyBmb3IgWCBpbnN0ZWFkIG9mIEYgcGFja2V0ICovCisgICAgaGNmbGcgID0gMCwgICAgICAgICAg ICAgICAgICAgICAgICAgLyogRG9pbmcgSG9zdCBjb21tYW5kICovCisgICAgZGVzdCAgID0gREVT VF9ELCAgICAgICAgICAgICAgICAgICAgLyogRGVzdGluYXRpb24gZm9yIHBhY2tldCBkYXRhICov CisgICAgemNoa29kID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogemNoa28oKSBzaG91 bGQgd29yayBmb3IgZGlycyB0b28/ICovCisgICAgemNoa2lkID0gMCwgICAgICAgICAgICAgICAg ICAgICAgICAgLyogemNoa2koKSBzaG91bGQgd29yayBmb3IgZGlycyB0b28/ICovCisKKy8qIElm IHlvdSBjaGFuZ2UgdGhpcywgYWxzbyBzZWUgc3RydWN0IHB0YWIgYWJvdmUuLi4gKi8KKworI2lm ZGVmIE9TMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZsYWcgZm9yIGZpbGUgbmFt ZSBjb252ZXJzaW9uICovCisgICAgZm5jbnYgID0gWFlGTl9MLCAgICAgICAgICAgICAgICAgICAg LyogRGVmYXVsdCBpcyBMaXRlcmFsIGluIE9TLzIsICovCisgICAgZl9zYXZlID0gWFlGTl9MLCAg ICAgICAgICAgICAgICAgICAgLyogKHNhdmVkIGNvcHkgb2Ygc2FtZSkgKi8KKyNlbHNlCisgICAg Zm5jbnYgID0gWFlGTl9DLCAgICAgICAgICAgICAgICAgICAgLyogZWxzZXdoZXJlIENvbnZlcnQg dGhlbSAqLworICAgIGZfc2F2ZSA9IFhZRk5fQywgICAgICAgICAgICAgICAgICAgIC8qIChkaXR0 bykgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKworICAgIGZuc3BhdGggPSBQQVRIX09GRiwgICAgICAg ICAgICAgICAgIC8qIFNlbmQgZmlsZSBwYXRoICovCisgICAgZm5ycGF0aCA9IFBBVEhfQVVUTywg ICAgICAgICAgICAgICAgLyogUmVjZWl2ZSBmaWxlIHBhdGggKi8KKyAgICBmYWNrcGF0aCA9IDEs ICAgICAgICAgICAgICAgICAgICAgICAvKiBTZW5kIGJhY2sgcGF0aCBpbiBBQ0sgdG8gRiAqLwor ICAgIGJpbmFyeSA9IFhZRlRfQiwgICAgICAgICAgICAgICAgICAgIC8qIERlZmF1bHQgZmlsZSB0 cmFuc2ZlciBtb2RlICovCisgICAgYl9zYXZlID0gWFlGVF9CLCAgICAgICAgICAgICAgICAgICAg LyogU2F2ZWQgZmlsZSBtb2RlICovCisgICAgZW9mbWV0aG9kID0gMCwgICAgICAgICAgICAgICAg ICAgICAgLyogRU9GIGRldGVjdGlvbiBtZXRob2QgKGxlbmd0aCkgKi8KKworI2lmZGVmIE9TMgor ICAgIGN1cnNvcl9zYXZlID0gLTEsICAgICAgICAgICAgICAgICAgIC8qIEN1cnNvciBzdGF0ZSAq LworI2VuZGlmIC8qIE9TMiAqLworCisgICAgeGZlcm1vZGUgPSBYTU9ERV9BLCAgICAgICAgICAg ICAgICAgLyogVHJhbnNmZXIgbW9kZSwgbWFudWFsIG9yIGF1dG8gKi8KKyAgICB4ZmlsZXR5cGUg PSAtMSwgICAgICAgICAgICAgICAgICAgICAvKiBUcmFuc2ZlciBvbmx5IHRleHQgKG9yIGJpbmFy eSkgKi8KKyAgICByZWN1cnNpdmUgPSAwLCAgICAgICAgICAgICAgICAgICAgICAvKiBSZWN1cnNp dmUgZGlyZWN0b3J5IHRyYXZlcnNhbCAqLworICAgIG5vbGlua3MgICA9IDIsICAgICAgICAgICAg ICAgICAgICAgIC8qIERvbid0IGZvbGxvdyBzeW1ib2xpYyBsaW5rcyAqLworICAgIHNraXBidXAg ICA9IDAsICAgICAgICAgICAgICAgICAgICAgIC8qIFNraXAgYmFja3VwIGZpbGVzIHdoZW4gc2Vu ZGluZyAqLworICAgIHNlbmRtb2RlID0gU01fU0VORCwgICAgICAgICAgICAgICAgIC8qIFdoaWNo IHR5cGUgb2YgU0VORCBvcGVyYXRpb24gKi8KKyAgICBzbG9zdGFydCAgPSAxLCAgICAgICAgICAg ICAgICAgICAgICAvKiBTbG93IHN0YXJ0IChncm93IHBhY2tldCBsZW5ndGhzKSAqLworICAgIGNt YXNrICA9IDAzNzcsICAgICAgICAgICAgICAgICAgICAgIC8qIENPTk5FQ1QgKHRlcm1pbmFsKSBi eXRlIG1hc2sgKi8KKyAgICBmbWFzayAgPSAwMzc3LCAgICAgICAgICAgICAgICAgICAgICAvKiBG aWxlIGJ5dGUgbWFzayAqLworICAgIGNrd2FybiA9IDAsICAgICAgICAgICAgICAgICAgICAgICAg IC8qIEZsYWcgZm9yIGZpbGUgd2FybmluZyAqLworICAgIHF1aWV0ICA9IDAsICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIEJlIHF1aWV0IGR1cmluZyBmaWxlIHRyYW5zZmVyICovCisgICAgbG9j YWwgID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogMSA9IGxvY2FsIG1vZGUsIDAgPSBy ZW1vdGUgbW9kZSAqLworICAgIGN4dHlwZSA9IENYVF9SRU1PVEUsICAgICAgICAgICAgICAgIC8q IENvbm5lY3Rpb24gdHlwZSAqLworICAgIHNlcnZlciA9IDAsICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIEZsYWcgZm9yIEkgQW0gU2VydmVyICovCisgICAgcXVlcnkgPSAwLCAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogRmxhZyBmb3IgUXVlcnkgYWN0aXZlICovCisgICAganVzdG9uZSA9 IDAsICAgICAgICAgICAgICAgICAgICAgICAgLyogU2VydmVyIHNob3VsZCBkbyBKdXN0IE9uZSBj b21tYW5kICovCisgICAgdXJzZXJ2ZXIgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgLyogRmxh ZyBmb3IgWW91IEFyZSBTZXJ2ZXIgKi8KKyAgICBieWVfYWN0aXZlID0gMCwgICAgICAgICAgICAg ICAgICAgICAvKiBGbGFnIGZvciBCWUUgY29tbWFuZCBhY3RpdmUgKi8KKyAgICBkaXJhY3RpdmUg PSAwLCAgICAgICAgICAgICAgICAgICAgICAvKiBGbGFnIGZvciBESVJFQ1RPUlkgY29tbWFuZCBh Y3RpdmUgKi8KKyAgICBjZGFjdGl2ZSA9IDAsICAgICAgICAgICAgICAgICAgICAgICAvKiBGbGFn IGZvciBDRCBjb21tYW5kIGFjdGl2ZSAqLworICAgIGNmbGcgICA9IDAsICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIENvbm5lY3QgYmVmb3JlIHRyYW5zYWN0aW9uICovCisgICAgY25mbGcgID0g MCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ29ubmVjdCBhZnRlciB0cmFuc2FjdGlvbiAq LworICAgIGN4c2VlbiA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZsYWcgZm9yIGNh bmNlbGxpbmcgYSBmaWxlICovCisgICAgY3pzZWVuID0gMCwgICAgICAgICAgICAgICAgICAgICAg ICAgLyogRmxhZyBmb3IgY2FuY2VsbGluZyBmaWxlIGdyb3VwICovCisgICAgZmF0YWxpbyA9IDAs ICAgICAgICAgICAgICAgICAgICAgICAgLyogRmxhZyBmb3IgZmF0YWwgaS9vIGVycm9yICovCisg ICAgZGlzY2FyZCA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgLyogRmxhZyBmb3IgZmlsZSB0 byBiZSBkaXNjYXJkZWQgKi8KKyAgICBrZWVwID0gU0VUX0FVVE8sICAgICAgICAgICAgICAgICAg ICAvKiBLZWVwIGluY29tcGxldGUgZmlsZXMgPSBBVVRPICovCisgICAgdW5rY3MgPSAxLCAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogS2VlcCBmaWxlIHcvdW5rbm93biBjaGFyYWN0ZXIgc2V0 ICovCisjaWZkZWYgVk1TCisgICAgZmlsZXBlZWsgPSAwLCAgICAgICAgICAgICAgICAgICAgICAg LyogSW5zcGVjdGlvbiBvZiBmaWxlcyAqLworI2Vsc2UKKyNpZmRlZiBkYXRnZW5lcmFsCisgICAg ZmlsZXBlZWsgPSAwLAorI2Vsc2UKKyAgICBmaWxlcGVlayA9IDEsCisjZW5kaWYgLyogZGF0YWdl bmVyYWwgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKyAgICBuYWtzdGF0ZSA9IDAsICAgICAgICAgICAg ICAgICAgICAgICAvKiBJbiBhIHN0YXRlIHdoZXJlIHdlIGNhbiBzZW5kIE5BS3MgKi8KKyAgICBk YmxjaGFyID0gLTEsICAgICAgICAgICAgICAgICAgICAgICAvKiBDaGFyYWN0ZXIgdG8gZG91Ymxl IHdoZW4gc2VuZGluZyAqLworICAgIG1vdmluZyA9IDAsICAgICAgICAgICAgICAgICAgICAgICAg IC8qIE1PVkUgPSBzZW5kLCB0aGVuIGRlbGV0ZSAqLworICAgIHJlbGlhYmxlID0gU0VUX0FVVE8s ICAgICAgICAgICAgICAgIC8qIE5vbnplcm8gaWYgdHJhbnNwb3J0IGlzIHJlbGlhYmxlICovCisg ICAgeHJlbGlhYmxlID0gLTEsCisgICAgc2V0cmVsaWFibGUgPSAwLAorICAgIHVyY2xlYXIgPSAw LCAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vbnplcm8gZm9yIGNsZWFyIGNoYW5uZWwgdG8g eW91ICovCisgICAgY2xlYXJycSA9IFNFVF9BVVRPLCAgICAgICAgICAgICAgICAgLyogU0VUIENM RUFSQ0hBTkVMIHZhbHVlICovCisgICAgY2xlYXJlZCA9IDAsCisgICAgc3RyZWFtaW5nID0gMCwg ICAgICAgICAgICAgICAgICAgICAgLyogTm9uemVybyBpZiBzdHJlYW1pbmcgaXMgYWN0aXZlICov CisgICAgc3RyZWFtb2sgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgLyogTm9uemVybyBpZiBz dHJlYW1pbmcgbmVnb3RpYXRlZCAqLworICAgIHN0cmVhbXJxID0gU0VUX0FVVE8sICAgICAgICAg ICAgICAgIC8qIFNFVCBTVFJFQU1JTkcgdmFsdWUgKi8KKyAgICBzdHJlYW1lZCA9IC0xOyAgICAg ICAgICAgICAgICAgICAgICAvKiBXaGV0aGVyIHdlIHN0cmVhbWVkIGxhc3QgdGltZSAqLworCitj aGFyICogc25kX21vdmUgPSBOVUxMOyAgICAgICAgICAgICAgICAgLyogTW92ZSBmaWxlIGFmdGVy IHNlbmRpbmcgaXQgKi8KK2NoYXIgKiBzbmRfcmVuYW1lID0gTlVMTDsgICAgICAgICAgICAgICAv KiBSZW5hbWUgZmlsZSBhZnRlciBzZW5kaW5nIGl0ICovCitjaGFyICogcmN2X21vdmUgPSBOVUxM OyAgICAgICAgICAgICAgICAgLyogTW92ZSBmaWxlIGFmdGVyIHJlY2VpdmluZyBpdCAqLworY2hh ciAqIHJjdl9yZW5hbWUgPSBOVUxMOyAgICAgICAgICAgICAgIC8qIFJlbmFtZSBmaWxlIGFmdGVy IHJlY2VpdmluZyBpdCAqLworCitjaGFyICogZ19zbmRfbW92ZSA9IE5VTEw7CitjaGFyICogZ19z bmRfcmVuYW1lID0gTlVMTDsKK2NoYXIgKiBnX3Jjdl9tb3ZlID0gTlVMTDsKK2NoYXIgKiBnX3Jj dl9yZW5hbWUgPSBOVUxMOworCisjaWZkZWYgQ0tfVFJJR0dFUgorY2hhciAqdHRfdHJpZ2dlcltU UklHR0VSU10gPSB7IE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCB9Owor Q0hBUiAqdHRfdHJtYXRjaFtUUklHR0VSU10gPSB7IE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxO VUxMLE5VTEwsTlVMTCB9OworY2hhciAqdHJpZ2dlcnZhbCA9IE5VTEw7CisjZW5kaWYgLyogQ0tf VFJJR0dFUiAqLworCitpbnQgY2t4bG9nZ2luZyA9IDA7ICAgICAgICAgICAgICAgICAgICAgLyog RmxhZyBmb3Igc3lzbG9nZ2luZyBhY3RpdmUgKi8KK2ludCBpa2Rib3BlbiA9IDA7ICAgICAgICAg ICAgICAgICAgICAgICAvKiBGbGFnIGZvciBJS1NEIGRhdGFiYXNlIGFjdGl2ZSAqLworaW50IGRi aW5pdGVkID0gMDsgICAgICAgICAgICAgICAgICAgICAgIC8qIEZsYWcgZm9yIElLU0RCIHJlY29y ZCBpbml0J2QgKi8KKyNpZm5kZWYgQ0tTWVNMT0cKK2ludCBja3hzeXNsb2cgPSAwOyAgICAgICAg ICAgICAgICAgICAgICAvKiBMb2dnaW5nIGxldmVsIDAgKi8KKyNlbHNlCisjaWZkZWYgU1lTTE9H TEVWRUwKK2ludCBja3hzeXNsb2cgPSBTWVNMT0dMRVZFTDsgICAgICAgICAgICAvKiBMb2dnaW5n IGxldmVsIHNwZWNpZmllZCAqLworI2Vsc2UKK2ludCBja3hzeXNsb2cgPSBTWVNMR19ERjsgICAg ICAgICAgICAgICAvKiBEZWZhdWx0IGxvZ2dpbmcgbGV2ZWwgKi8KKyNlbmRpZiAvKiBTWVNMT0dM RVZFTCAqLworI2VuZGlmIC8qIENLU1lTTE9HICovCisKKyNpZm5kZWYgTk9IRUxQCisjaWZuZGVm IE5PQ01ETAorX1BST1RPVFlQKCBWT0lEIGluaW9wdGhscCwgKHZvaWQpICk7ICAgIC8qIENvbW1h bmQtbGluZSBoZWxwIGluaXRpYWxpemVyICovCisjZW5kaWYgLyogTk9DTURMICovCisjZW5kaWYg LyogTk9IRUxQICovCisKK19QUk9UT1RZUCggVk9JRCBnZXRleGVkaXIsICh2b2lkKSApOworX1BS T1RPVFlQKCBpbnQgcHV0bm90aGluZywgKGNoYXIpICk7CisKKyNpZmRlZiBJS1NECitfUFJPVE9U WVAoIFZPSUQgZG9pa3NkaW5pdCwgKHZvaWQpICk7CitfUFJPVE9UWVAoIFZPSUQgaWtzZGluaXQs ICh2b2lkKSApOworX1BST1RPVFlQKCBWT0lEIGRvaWtsb2csICh2b2lkKSApOworX1BST1RPVFlQ KCBpbnQgZGJpbml0LCAodm9pZCkgKTsKKyNlbmRpZiAvKiBJS1NEICovCisKKy8qIFZhcmlhYmxl cyBwYXNzZWQgZnJvbSBjb21tYW5kIHBhcnNlciB0byBwcm90b2NvbCBtb2R1bGUgKi8KKworI2lm bmRlZiBOT1NQTAorI2lmbmRlZiBOT0lDUAorI2lmZGVmIENLX0FQQworX1BST1RPVFlQKCBWT0lE IGFwY29uZWN0LCAodm9pZCkgKTsKKyNlbmRpZiAvKiBDS19BUEMgKi8KKyNpZmRlZiBPUzIKK2V4 dGVybiBpbnQgaW5pdHZpazsKKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBOT0lDUCAqLwor I2VuZGlmIC8qIE5PU1BMICovCitjaGFyICpjbGNtZHMgPSBOVUxMOyAgICAgICAgICAgICAgICAg ICAgLyogUG9pbnRlciB0byBjb21tYW5kLWxpbmUgY29tbWFuZHMgKi8KKworI2lmbmRlZiBOT1NF VEtFWQorZXh0ZXJuIEtFWSAqa2V5bWFwOworZXh0ZXJuIE1BQ1JPICptYWNyb3RhYjsKKyNlbmRp ZiAvKiBOT1NFVEtFWSAqLworCisjaWZuZGVmIE5PUFVTSAoraW50IG5vcHVzaCA9IDA7ICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIFBVU0ggZW5hYmxlZCAqLworI2Vsc2UKK2ludCBub3B1c2gg PSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQVVNIIGRpc2FibGVkICovCisjZW5kaWYg LyogTk9QVVNIICovCisKK0NIQVIgc3N0YXRlICA9IChDSEFSKSAwOyAgICAgICAgICAgICAgICAv KiBTdGFydGluZyBzdGF0ZSBmb3IgYXV0b21hdG9uICovCitDSEFSIHpzdGF0ZSAgPSAoQ0hBUikg MDsgICAgICAgICAgICAgICAgLyogRm9yIHJlbWVtYmVyaW5nIHNzdGF0ZSAqLworY2hhciAqIHBy aW50ZXJuYW1lID0gTlVMTDsgICAgICAgICAgICAgIC8qIE5VTEwgaWYgcHJpbnRlciBub3QgcmVk aXJlY3RlZCAqLworaW50IHByaW50cGlwZSA9IDA7ICAgICAgICAgICAgICAgICAgICAgIC8qIEZv ciBTRVQgUFJJTlRFUiAqLworaW50IG5vcHJpbnRlciA9IDA7CisKKyNpZm5kZWYgTk9YRkVSCitj aGFyICpjbWFyZyAgPSAiIjsgICAgICAgICAgICAgICAgICAgICAgLyogUG9pbnRlciB0byBjb21t YW5kIGRhdGEgKi8KK2NoYXIgKmNtYXJnMiA9ICIiOyAgICAgICAgICAgICAgICAgICAgICAvKiBQ b2ludGVyIHRvIDJuZCBjb21tYW5kIGRhdGEgKi8KK2NoYXIgKipjbWxpc3Q7ICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBQb2ludGVyIHRvIGZpbGUgbGlzdCBpbiBhcmd2ICovCisKKyNpZmRl ZiBDS19BVVRPREwgICAgICAgICAgICAgICAgICAgICAgICAvKiBBdXRvZG93bmxvYWQgKi8KK2lu dCBhdXRvZGwgPSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFbmFibGVkIGJ5IGRlZmF1 bHQgKi8KKyNlbHNlCitpbnQgYXV0b2RsID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgLyog KG9yIGlmIG5vdCBpbXBsZW1lbnRlZCkuICovCisjZW5kaWYgLyogQ0tfQVVUT0RMICovCitpbnQg YWRsX2VyciA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgLyogMSA9IHN0b3Agb24gZXJyb3Ig Ki8KKyNpZmRlZiBLVUkKK2ludCBhZGxfYXNrID0gMTsJCQkvKiAxID0gZmlsZSBkaWFsb2cgb24g YXV0b2Rvd25sb2FkICovCisjZWxzZQoraW50IGFkbF9hc2sgPSAwOwkJCS8qIDAgPSBubyBmaWxl IGRpYWxvZyAqLworI2VuZGlmIC8qIEtVSSAqLworI2lmZGVmIE9TMiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIEFVVE9ET1dOTE9BRCBwYXJhbWV0ZXJzICovCitpbnQgYWRsX2ttb2Rl ID0gQURMX1BBQ0ssICAgICAgICAgICAgICAgLyogTWF0Y2ggUGFja2V0IHRvIHNpZ25hbCBkb3du bG9hZCAqLworICAgIGFkbF96bW9kZSA9IEFETF9QQUNLOworY2hhciAqIGFkbF9rc3RyID0gTlVM TDsgICAgICAgICAgICAgICAgIC8qIEtFUk1JVCBEb3dubG9hZCBTdHJpbmcgKi8KK2NoYXIgKiBh ZGxfenN0ciA9IE5VTEw7ICAgICAgICAgICAgICAgICAvKiBaTU9ERU0gRG93bmxvYWQgU3RyaW5n ICovCisjZW5kaWYgLyogT1MyICovCisKK2ludCByZW1maWxlID0gMCwgcmVtcGlwZSA9IDAsIHJl bWFwcGQgPSAwOyAvKiBSRU1PVEUgb3V0cHV0IHJlZGlyZWN0aW9uICovCitjaGFyICogcmVtZGVz dCA9IE5VTEw7CisKKyNpZm5kZWYgTk9TRVJWRVIKKy8qCisgIFNlcnZlciBzZXJ2aWNlczoKKyAg IDAgPSBkaXNhYmxlZAorICAgMSA9IGVuYWJsZWQgaW4gbG9jYWwgbW9kZQorICAgMiA9IGVuYWJs ZWQgaW4gcmVtb3RlIG1vZGUKKyAgIDMgPSBlbmFibGVkIGluIGJvdGggbG9jYWwgYW5kIHJlbW90 ZSBtb2RlcworICBvbmx5IGFzIGluaXRpYWwgKGRlZmF1bHQpIHZhbHVlcy4KKyovCitpbnQgZW5f eGl0ID0gMjsgICAgICAgICAgICAgICAgICAgICAgICAgLyogRVhJVCAqLworaW50IGVuX2N3ZCA9 IDM7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENEL0NXRCAqLworaW50IGVuX2NweSA9IDM7 ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENPUFkgICAqLworaW50IGVuX2RlbCA9IDI7ICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIERFTEVURSAqLworaW50IGVuX21rZCA9IDM7ICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIE1LRElSICovCitpbnQgZW5fcm1kID0gMjsgICAgICAgICAg ICAgICAgICAgICAgICAgLyogUk1ESVIgKi8KK2ludCBlbl9kaXIgPSAzOyAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBESVJFQ1RPUlkgKi8KK2ludCBlbl9maW4gPSAzOyAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBGSU5JU0ggKi8KK2ludCBlbl9nZXQgPSAzOyAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBHRVQgKi8KKyNpZm5kZWYgTk9QVVNICitpbnQgZW5faG9zID0gMjsgICAgICAg ICAgICAgICAgICAgICAgICAgLyogSE9TVCBlbmFibGVkICovCisjZWxzZQoraW50IGVuX2hvcyA9 IDA7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEhPU1QgZGlzYWJsZWQgKi8KKyNlbmRpZiAv KiBOT1BVU0ggKi8KK2ludCBlbl9yZW4gPSAzOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBS RU5BTUUgKi8KK2ludCBlbl9zZW4gPSAzOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTRU5E ICovCitpbnQgZW5fc2V0ID0gMzsgICAgICAgICAgICAgICAgICAgICAgICAgLyogU0VUICovCitp bnQgZW5fc3BhID0gMzsgICAgICAgICAgICAgICAgICAgICAgICAgLyogU1BBQ0UgKi8KK2ludCBl bl90eXAgPSAzOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUWVBFICovCitpbnQgZW5fd2hv ID0gMzsgICAgICAgICAgICAgICAgICAgICAgICAgLyogV0hPICovCisjaWZkZWYgZGF0YWdlbmVy YWwKKy8qIERhdGEgR2VuZXJhbCBBT1MvVlMgY2FuJ3QgZG8gdGhpcyAqLworaW50IGVuX2J5ZSA9 IDA7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEJZRSAqLworI2Vsc2UKK2ludCBlbl9ieWUg PSAyOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQQ3MgaW4gbG9jYWwgbW9kZS4uLiAqLwor I2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCitpbnQgZW5fYXNnID0gMzsgICAgICAgICAgICAgICAg ICAgICAgICAgLyogQVNTSUdOICovCitpbnQgZW5fcXVlID0gMzsgICAgICAgICAgICAgICAgICAg ICAgICAgLyogUVVFUlkgKi8KK2ludCBlbl9yZXQgPSAyOyAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBSRVRSSUVWRSAqLworaW50IGVuX21haSA9IDM7ICAgICAgICAgICAgICAgICAgICAgICAg IC8qIE1BSUwgKi8KK2ludCBlbl9wcmkgPSAzOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQ UklOVCAqLworaW50IGVuX2VuYSA9IDM7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVOQUJM RSAqLworI2Vsc2UKK2ludCBlbl94aXQgPSAwLCBlbl9jd2QgPSAwLCBlbl9jcHkgPSAwLCBlbl9k ZWwgPSAwLCBlbl9ta2QgPSAwLCBlbl9ybWQgPSAwLAorICAgIGVuX2RpciA9IDAsIGVuX2ZpbiA9 IDAsIGVuX2dldCA9IDAsIGVuX2hvcyA9IDAsIGVuX3JlbiA9IDAsIGVuX3NlbiA9IDAsCisgICAg ZW5fc2V0ID0gMCwgZW5fc3BhID0gMCwgZW5fdHlwID0gMCwgZW5fd2hvID0gMCwgZW5fYnllID0g MCwgZW5fYXNnID0gMCwKKyAgICBlbl9xdWUgPSAwLCBlbl9yZXQgPSAwLCBlbl9tYWkgPSAwLCBl bl9wcmkgPSAwLCBlbl9lbmEgPSAwOworI2VuZGlmIC8qIE5PU0VSVkVSICovCisjZW5kaWYgLyog Tk9YRkVSICovCisKKy8qIE1pc2NlbGxhbmVvdXMgKi8KKworY2hhciAqKnhhcmd2OyAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIEdsb2JhbCBjb3BpZXMgb2YgYXJndiAqLworaW50IHhhcmdj OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFuZCBhcmdjICAqLworaW50IHhhcmdz OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFuIGltbXV0YWJsZSBjb3B5IG9mIGFy Z2MgKi8KK2NoYXIgKnhhcmcwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhbmQgb2Yg YXJndlswXSAqLworY2hhciAqcGlwZWRhdGE7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBv aW50ZXIgdG8gLVAgKHBpcGUpIGRhdGEgKi8KKworZXh0ZXJuIGNoYXIgKmRmdHR5OyAgICAgICAg ICAgICAgICAgICAgIC8qIERlZmF1bHQgdHR5IG5hbWUgZnJvbSBjaz90aW8uYyAqLworZXh0ZXJu IGludCBkZmxvYzsgICAgICAgICAgICAgICAgICAgICAgIC8qIERlZmF1bHQgbG9jYXRpb246IHJl bW90ZS9sb2NhbCAqLworZXh0ZXJuIGludCBkZnBydHk7ICAgICAgICAgICAgICAgICAgICAgIC8q IERlZmF1bHQgcGFyaXR5ICovCitleHRlcm4gaW50IGRmZmxvdzsgICAgICAgICAgICAgICAgICAg ICAgLyogRGVmYXVsdCBmbG93IGNvbnRyb2wgKi8KKworI2lmZGVmIFROQ09ERQorZXh0ZXJuIGlu dCB0bl9kZWI7CisjZW5kaWYgLyogVE5DT0RFICovCisvKgorICBCdWZmZXJlZCBmaWxlIGlucHV0 IGFuZCBvdXRwdXQgYnVmZmVycy4gIFNlZSBnZXRwa3QoKSBpbiBja2NmbnMuYworICBhbmQgem91 dGR1bXAoKSBpbiB0aGUgc3lzdGVtLWRlcGVuZGVudCBmaWxlIGkvbyBtb2R1bGUgKHVzdWFsbHkg Y2s/ZmlvLmMpLgorKi8KKyNpZm5kZWYgRFlOQU1JQworLyogTm93IHdlIGFsbG9jYXRlIHRoZW0g ZHluYW1pY2FsbHksIHNlZSBnZXRpb2JzKCkgYmVsb3cuICovCitjaGFyIHppbmJ1ZmZlcltJTkJV RlNJWkVdLCB6b3V0YnVmZmVyW09CVUZTSVpFXTsKKyNlbmRpZiAvKiBEWU5BTUlDICovCitjaGFy ICp6aW5wdHIsICp6b3V0cHRyOworaW50IHppbmNudCwgem91dGNudDsKK2ludCB6b2J1ZnNpemUg PSBPQlVGU0laRTsKK2ludCB6b2ZidWZmZXIgPSAxOworaW50IHpvZmJsb2NrICA9IDE7CisKKyNp ZmRlZiBTRVNMSU1JVAoraW50IHNlc2xpbWl0ID0gMDsKKyNlbmRpZiAvKiBTRVNMSU1JVCAqLwor CisjaWZkZWYgQ0tfQVVUSEVOVElDQVRJT04KKyNpbmNsdWRlICJja3VhdGguaCIKKyNlbmRpZiAv KiBDS19BVVRIRU5USUNBVElPTiAqLworCitfUFJPVE9UWVAoIGludCBnZXRpb2JzLCAoVk9JRCkg KTsKKworLyogIE0gQSBJIE4gIC0tICBDLUtlcm1pdCBtYWluIHByb2dyYW0gICovCisKKyNpbmNs dWRlIDxzaWduYWwuaD4KKworI2lmbmRlZiBWTVMKKyNpbmNsdWRlIDx0aW1lLmg+CisjZW5kaWYK KworI2lmbmRlZiBOT0NDVFJBUAorI2luY2x1ZGUgPHNldGptcC5oPgorI2luY2x1ZGUgImNrY3Np Zy5oIgorY2tqbXBidWYgY21qYnVmOworI2lmZGVmIEdFTURPUyAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIFNwZWNpYWwgZm9yIEF0YXJpIFNUICovCitjY19jbGVhbigpOyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogVGhpcyBjYW4ndCBiZSByaWdodD8gKi8KKyNlbmRpZiAvKiBH RU1ET1MgKi8KKyNlbmRpZiAvKiBOT0NDVFJBUCAqLworCisjaWZuZGVmIE5PWEZFUgorLyogSW5m byBhc3NvY2lhdGVkIHdpdGggYSBzeXN0ZW0gSUQgKi8KKworc3RydWN0IHN5c2RhdGEgc3lzaWRs aXN0W10gPSB7ICAgICAgICAgIC8qIEFkZCBvdGhlcnMgYXMgbmVlZGVkLi4uICovCisgIHsgIjAi LCAgImFub255bW91cyIsICAgIDAsIE5VTCwgIDAsIDAsIDAgfSwKKyAgeyAiQTEiLCAiQXBwbGUg SUkiLCAgICAgMCwgTlVMLCAgMCwgMCwgMyB9LCAvKiBmaXggdGhpcyAqLworICB7ICJBMyIsICJN YWNpbnRvc2giLCAgICAxLCAnOicsICAwLCAyLCAxIH0sCisgIHsgIkQ3IiwgIlZNUyIsICAgICAg ICAgIDAsICddJywgIDEsIDAsIDAgfSwKKyAgeyAiREEiLCAiUlNUUy9FIiwgICAgICAgMCwgJ10n LCAgMSwgMCwgMyB9LCAvKiAoaSB0aGluay4uLikgKi8KKyAgeyAiREIiLCAiUlQxMSIsICAgICAg ICAgMCwgTlVMLCAgMSwgMCwgMyB9LCAvKiAobWF5YmUuLi4pICovCisgIHsgIkYzIiwgIkFPUy9W UyIsICAgICAgIDEsICc6JywgIDAsIDAsIDIgfSwKKyAgeyAiSTEiLCAiVk0vQ01TIiwgICAgICAg MCwgTlVMLCAgMCwgMCwgMCB9LAorICB7ICJJMiIsICJNVlMvVFNPIiwgICAgICAwLCBOVUwsICAw LCAwLCAwIH0sCisgIHsgIkk0IiwgIk1VU0lDIiwgICAgICAgIDAsIE5VTCwgIDAsIDAsIDAgfSwK KyAgeyAiSTciLCAiQ0lDUyIsICAgICAgICAgMCwgTlVMLCAgMCwgMCwgMCB9LAorICB7ICJJOSIs ICJNVlMvUk9TQ09FIiwgICAwLCBOVUwsICAwLCAwLCAwIH0sCisgIHsgIksyIiwgIkF0YXJpIFNU IiwgICAgIDEsICdcXCcsIDEsIDAsIDMgfSwKKyAgeyAiTDMiLCAiQW1pZ2EiLCAgICAgICAgMSwg Jy8nLCAgMSwgMCwgMiB9LAorICB7ICJNViIsICJTdHJhdHVzIFZPUyIsICAxLCAnPicsICAwLCAx LCAwIH0sCisgIHsgIk4zIiwgIkFwb2xsbyBBZWdpcyIsIDEsICcvJywgIDAsIDMsIDIgfSwKKyAg eyAiVTEiLCAiVU5JWCIsICAgICAgICAgMSwgJy8nLCAgMCwgMywgMiB9LAorICB7ICJVOCIsICJN Uy1ET1MiLCAgICAgICAxLCAnXFwnLCAxLCAwLCAzIH0sCisgIHsgIlVEIiwgIk9TLTkiLCAgICAg ICAgIDEsICcvJywgIDAsIDMsIDIgfSwKKyAgeyAiVU4iLCAiV2luZG93cy0zMiIsICAgMSwgJ1xc JywgMSwgMiwgMyB9LAorICB7ICJVTyIsICJPUy8yIiwgICAgICAgICAxLCAnXFwnLCAxLCAyLCAz IH0KK307CitzdGF0aWMgaW50IG54eHN5c2lkcyA9IChzaXplb2Yoc3lzaWRsaXN0KSAvIHNpemVv ZihzdHJ1Y3Qgc3lzZGF0YSkpOworCisvKiBHaXZlbiBhIEtlcm1pdCBzeXN0ZW0gSUQgY29kZSwg cmV0dXJuIHRoZSBhc3NvY2lhdGVkIG5hbWUgc3RyaW5nICovCisvKiBhbmQgc29tZSBwcm9wZXJ0 aWVzIG9mIHRoZSBmaWxlbmFtZXMuLi4gKi8KKworY2hhciAqCitnZXRzeXNpZChzKSBjaGFyICog czsgeyAgICAgICAgICAgICAgICAgLyogR2V0IHN5c3RlbS10eXBlIG5hbWUgKi8KKyAgICBpbnQg aTsKKyAgICBpZiAoIXMpIHJldHVybigiIik7CisgICAgZm9yIChpID0gMDsgaSA8IG54eHN5c2lk czsgaSsrKQorICAgICAgaWYgKCFzdHJjbXAoc3lzaWRsaXN0W2ldLnNpZF9jb2RlLHMpKQorICAg ICAgICByZXR1cm4oc3lzaWRsaXN0W2ldLnNpZF9uYW1lKTsKKyAgICByZXR1cm4ocyk7Cit9CisK K2ludAorZ2V0c3lzaXgocykgY2hhciAqczsgeyAgICAgICAgICAgICAgICAgIC8qIEdldCBzeXN0 ZW0tdHlwZSBpbmRleCAqLworICAgIGludCBpOworICAgIGlmICghcykgcmV0dXJuKC0xKTsKKyAg ICBmb3IgKGkgPSAwOyBpIDwgbnh4c3lzaWRzOyBpKyspCisgICAgICBpZiAoIXN0cmNtcChzeXNp ZGxpc3RbaV0uc2lkX2NvZGUscykpCisgICAgICAgIHJldHVybihpKTsKKyAgICByZXR1cm4oLTEp OworfQorI2VuZGlmIC8qIE5PWEZFUiAqLworCisvKiBUZWxsIGlmIGEgcGF0aG5hbWUgaXMgYWJz b2x1dGUgKHZlcnN1cyByZWxhdGl2ZSkgKi8KKy8qIFRoaXMgc2hvdWxkIGJlIHBhcmNlbGVkIG91 dCB0byBlYWNoIG9mIHRoZSBjaypmaW8uYyBtb2R1bGVzLi4uICovCisvKiBWTVMgaXNhYnNvbHV0 ZSgpIGlzIG5vdyBpbiBja3ZmaW8uYy4gKi8KKyNpZm5kZWYgVk1TCitpbnQKK2lzYWJzb2x1dGUo cGF0aCkgY2hhciAqIHBhdGg7IHsKKyAgICBpbnQgcmMgPSAwOworICAgIGludCB4OworICAgIGlm ICghcGF0aCkKKyAgICAgIHJldHVybigwKTsKKyAgICBpZiAoISpwYXRoKQorICAgICAgcmV0dXJu KDApOworICAgIHggPSAoaW50KSBzdHJsZW4ocGF0aCk7CisgICAgZGVidWcoRjExMSwiaXNhYnNv bHV0ZSIscGF0aCx4KTsKKyNpZmRlZiBVTklYCisgICAgaWYgKCpwYXRoID09ICcvJworI2lmZGVm IERUSUxERQorICAgICAgICB8fCAqcGF0aCA9PSAnficKKyNlbmRpZiAvKiBEVElMREUgKi8KKyAg ICAgICAgKQorICAgICAgcmMgPSAxOworI2Vsc2UgLyogZGVmIFVOSVggKi8KKyNpZmRlZiBPUzIK KyAgICBpZiAoKnBhdGggPT0gJy8nIHx8ICpwYXRoID09ICdcXCcpCisgICAgICByYyA9IDE7Cisg ICAgZWxzZSBpZiAoaXNhbHBoYSgqcGF0aCkgJiYgeCA+IDIpCisgICAgICBpZiAoKihwYXRoKzEp ID09ICc6JyAmJiAoKihwYXRoICsyKSA9PSAnLycgfHwgKihwYXRoKzIpID09ICdcXCcpKQorICAg ICAgICByYyA9IDE7CisjZWxzZSAvKiBkZWYgT1MyICovCisjaWZkZWYgQU1JR0EKKyAgICBpZiAo KnBhdGggPT0gJy8nCisjaWZkZWYgRFRJTERFCisgICAgICAgIHx8ICpwYXRoID09ICd+JworI2Vu ZGlmIC8qIERUSUxERSAqLworICAgICAgICApCisgICAgICByYyA9IDE7CisjZWxzZSAvKiBkZWYg QU1JR0EgKi8KKyNpZmRlZiBPU0sKKyAgICBpZiAoKnBhdGggPT0gJy8nCisjaWZkZWYgRFRJTERF CisgICAgICAgIHx8ICpwYXRoID09ICd+JworI2VuZGlmIC8qIERUSUxERSAqLworICAgICAgICAp CisgICAgICByYyA9IDE7CisjZWxzZSAvKiBkZWYgT1NLICovCisjaWZkZWYgZGF0YWdlbmVyYWwK KyAgICBpZiAoKnBhdGggPT0gJzonKQorICAgICAgcmMgPSAxOworI2Vsc2UgLyogZGVmIGRhdGFn ZW5lcmFsICovCisjaWZkZWYgTUFDCisgICAgcmMgPSAwOyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogRmlsbCBpbiBsYXRlci4uLiAqLworI2Vsc2UgLyogZGVmIE1BQyAqLworI2lmZGVm IFNUUkFUVVMKKyAgICByYyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGaWxs IGluIGxhdGVyLi4uICovCisjZWxzZSAvKiBkZWYgU1RSQVRVUyAqLworI2lmZGVmIEdFTURPUwor ICAgIGlmICgqcGF0aCA9PSAnLycgfHwgKnBhdGggPT0gJ1xcJykKKyAgICAgIHJjID0gMTsKKyAg ICBlbHNlIGlmIChpc2FscGhhKCpwYXRoKSAmJiB4ID4gMSkKKyAgICAgIGlmICgqKHBhdGgrMSkg PT0gJzonKQorICAgICAgICByYyA9IDE7CisjZW5kaWYgLyogR0VNRE9TICovCisjZW5kaWYgLyog U1RSQVRVUyAqLworI2VuZGlmIC8qIE1BQyAqLworI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCisj ZW5kaWYgLyogT1NLICovCisjZW5kaWYgLyogQU1JR0EgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyNl bmRpZiAvKiBVTklYICovCisgICAgZGVidWcoRjEwMSwiaXNhYnNvbHV0ZSByYyIsIiIscmMpOwor ICAgIHJldHVybihyYyk7Cit9CisjZW5kaWYgLyogbmRlZiBWTVMgKi8KKworLyogIFNlZSBpZiBJ IGhhdmUgZGlyZWN0IGFjY2VzcyB0byB0aGUga2V5Ym9hcmQgICovCisKK2ludAoraXNfYV90dHko bikgaW50IG47IHsKKyNpZmRlZiBVTklYCisgICAgZXh0ZXJuIGludCB0dGZkZmxnOworICAgIGlm ICh0dGZkZmxnID4gMCkKKyAgICAgIHJldHVybigxKTsKKyNlbmRpZiAvKiBVTklYICovCisjaWZk ZWYgS1VJCisgICAgcmV0dXJuIDE7CisjZWxzZSAvKiBLVUkgKi8KKyNpZmRlZiBOVAorICAgIGlm IChpc1dpbjk1KCkpCisgICAgICByZXR1cm4oMSk7CisgICAgZWxzZQorICAgICAgcmV0dXJuKF9p c2F0dHkobikpOworI2Vsc2UKKyNpZmRlZiBJS1NECisgICBpZiAoaW5zZXJ2ZXIpCisgICAgIHJl dHVybigxKTsKKyAgIGVsc2UKKyNlbmRpZiAvKiBJS1NEICovCisgICAgIHJldHVybihpc2F0dHko bikpOworI2VuZGlmIC8qIE5UICovCisjZW5kaWYgLyogS1VJICovCit9CisKKyNpZm5kZWYgTk9Y RkVSCitWT0lECitpbml0eGxpc3QoKSB7CisgICAgZXh0ZXJuIGNoYXIgKiBzbmRleGNlcHRbXSwg KiByY3ZleGNlcHRbXTsKKyAgICBpbnQgaTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgTlNOREVYQ0VQ VDsgaSsrKSB7CisJc25kZXhjZXB0W2ldID0gTlVMTDsKKwlyY3ZleGNlcHRbaV0gPSBOVUxMOwor ICAgIH0KK30KKyNlbmRpZiAvKiBOT1hGRVIgKi8KKworLyogSW5pdGlhbGl6ZSBmbG93IGNvbnRy b2wgdGFibGUgKi8KKworVk9JRAoraW5pdGZsb3coKSB7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIERlZmF1bHQgdmFsdWVzIGZvciBmbG93IGNvbnRyb2wgKi8KKyNpZmRlZiBWTVMgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmb3IgZWFjaCBraW5kIG9mIGNvbm5lY3Rpb24u ICovCisgICAgLyogVGhlIFZNUyB0ZWxuZXQgdGVybWluYWwgZHJpdmVyIHRyZWF0cyAibm9uZSIg YXMgcmVxdWVzdCB0byBsb3NlIGNoYXJzICovCisgICAgY3hmbG93W0NYVF9SRU1PVEVdICA9IEZM T19YT05YOyAgICAgLyogUmVtb3RlIG1vZGUuLi4gKi8KKyNlbHNlCisjaWZkZWYgSFBVWAorICAg IC8qIERpdHRvIGZvciBIUC1VWCAqLworICAgIGN4Zmxvd1tDWFRfUkVNT1RFXSAgPSBGTE9fWE9O WDsgICAgIC8qIFJlbW90ZSBtb2RlLi4uICovCisjZWxzZQorICAgIC8qIFRoZSB0ZW1wdGF0aW9u IGlzIHRvIG1ha2UgdGhpcyBvbmUgRkxPX0tFRVAgYnV0IGRvbid0ISEhICovCisgICAgLyogSXQg dG90YWxseSB3cmVja3MgYmluYXJ5LWZpbGUgdHJhbnNmZXIgd2hlbiBjb21pbmcgaW4gdmlhIFRl bG5ldC4gKi8KKyAgICAvKiBJbiBVTklYIGF0IGxlYXN0Li4uICovCisgICAgY3hmbG93W0NYVF9S RU1PVEVdICA9IEZMT19OT05FOworI2VuZGlmIC8qIEhQVVggKi8KKyNlbmRpZiAvKiBWTVMgKi8K KworI2lmZGVmIFZNUworICAgIGN4Zmxvd1tDWFRfRElSRUNUXSAgPSBGTE9fWE9OWDsgICAgIC8q IERpcmVjdCBzZXJpYWwgY29ubmVjdGlvbnMuLi4gKi8KKyNlbHNlCisgICAgY3hmbG93W0NYVF9E SVJFQ1RdICA9IEZMT19OT05FOworI2VuZGlmIC8qIFZNUyAqLworCisjaWZkZWYgQ0tfUlRTQ1RT CisgICAgY3hmbG93W0NYVF9NT0RFTV0gICA9IEZMT19SVFNDOyAgICAgLyogTW9kZW0gY29ubmVj dGlvbnMuLi4gKi8KKyNlbHNlCisjaWZkZWYgVk1TCisgICAgY3hmbG93W0NYVF9NT0RFTV0gICA9 IEZMT19YT05YOworI2Vsc2UKKyAgICBjeGZsb3dbQ1hUX01PREVNXSAgID0gRkxPX05PTkU7Cisj ZW5kaWYgLyogVk1TICovCisjZW5kaWYgLyogQ0tfUlRTQ1RTICovCisKKyNpZmRlZiBWTVMKKyAg ICBjeGZsb3dbQ1hUX1RDUElQXSAgID0gRkxPX1hPTlg7ICAgICAvKiBUQ1AvSVAgY29ubmVjdGlv bnMuLi4gKi8KKyNlbHNlCisgICAgY3hmbG93W0NYVF9UQ1BJUF0gICA9IEZMT19OT05FOworI2Vu ZGlmIC8qIFZNUyAqLworCisgICAgY3hmbG93W0NYVF9TU0hdICAgICA9IEZMT19OT05FOworICAg IGN4Zmxvd1tDWFRfWDI1XSAgICAgPSBGTE9fTk9ORTsgICAgIC8qIE90aGVyIGtpbmRzIG9mIG5l dHdvcmtzLi4uICovCisgICAgY3hmbG93W0NYVF9ERUNORVRdICA9IEZMT19YT05YOworICAgIGN4 Zmxvd1tDWFRfTEFUXSAgICAgPSBGTE9fWE9OWDsKKyAgICBjeGZsb3dbQ1hUX05FVEJJT1NdID0g RkxPX05PTkU7CisgICAgY3hmbG93W0NYVF9OUElQRV0gICA9IEZMT19OT05FOworICAgIGN4Zmxv d1tDWFRfUElQRV0gICAgPSBGTE9fTk9ORTsKKyAgICBmbG93ID0gY3hmbG93W2N4dHlwZV07ICAg ICAgICAgICAgICAvKiBJbml0aWFsIGZsb3cgc2V0dGluZy4gKi8KKyAgICBkZWJ1ZyhGMTAxLCJp bml0ZmxvdyIsIiIsZmxvdyk7Cit9CisKKyNpZm5kZWYgTk9YRkVSCisvKiBJbml0aWFsaXplIGZp bGUgdHJhbnNmZXIgcHJvdG9jb2xzICovCisKK1ZPSUQKK2luaXRwcm90byh5LCB1cGJzdHIsIHVw dHN0ciwgc3J2c3RyLCBzbmRic3RyLCBzbmR0c3RyLCByY3Zic3RyLCByY3Z0c3RyKQorICAgIGlu dCB5OworICAgIGNoYXIgKiB1cGJzdHIsICogdXB0c3RyLCAqIHNydnN0ciwgKiBzbmRic3RyLCAq IHNuZHRzdHIsICogcmN2YnN0ciwKKyAgICAqIHJjdnRzdHI7CisvKiBpbml0cHJvdG8gKi8gewor CisgICAgaWYgKHVwYnN0cikgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ29udmVydCBudWxs IHN0cmluZ3MgKi8KKyAgICAgIGlmICghKnVwYnN0cikgICAgICAgICAgICAgICAgICAgICAvKiB0 byBudWxsIHBvaW50ZXJzICovCisgICAgICAgIHVwYnN0ciA9IE5VTEw7CisKKyAgICBpZiAodXB0 c3RyKSAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDb252ZXJ0IG51bGwgc3RyaW5ncyAqLwor ICAgICAgaWYgKCEqdXB0c3RyKSAgICAgICAgICAgICAgICAgICAgIC8qIHRvIG51bGwgcG9pbnRl cnMgKi8KKyAgICAgICAgdXB0c3RyID0gTlVMTDsKKworICAgIGlmIChzbmRic3RyKQorICAgICAg aWYgKCEqc25kYnN0cikKKyAgICAgICAgc25kYnN0ciA9IE5VTEw7CisKKyAgICBpZiAoc25kdHN0 cikKKyAgICAgIGlmICghKnNuZHRzdHIpCisgICAgICAgIHNuZHRzdHIgPSBOVUxMOworCisgICAg aWYgKHJjdmJzdHIpCisgICAgICBpZiAoISpyY3Zic3RyKQorICAgICAgICByY3Zic3RyID0gTlVM TDsKKworICAgIGlmIChyY3Z0c3RyKQorICAgICAgaWYgKCEqcmN2dHN0cikKKyAgICAgICAgcmN2 dHN0ciA9IE5VTEw7CisKKyAgICBpZiAoc3J2c3RyKQorICAgICAgaWYgKCEqc3J2c3RyKQorICAg ICAgICBzcnZzdHIgPSBOVUxMOworCisgICAgcHJvdG9jb2wgPSB5OyAgICAgICAgICAgICAgICAg ICAgICAgLyogU2V0IHByb3RvY29sICovCisKKyAgICBpZiAocHRhYltwcm90b2NvbF0ucnBrdGxl biA+IC0xKQorICAgICAgdXJwc2l6ID0gcHRhYltwcm90b2NvbF0ucnBrdGxlbjsKKyAgICBpZiAo cHRhYltwcm90b2NvbF0uc3BrdGZsZyA+IC0xKQorICAgICAgc3BzaXpmID0gcHRhYltwcm90b2Nv bF0uc3BrdGZsZzsKKyAgICBpZiAocHRhYltwcm90b2NvbF0uc3BrdGxlbiA+IC0xKSB7CisgICAg ICAgIHNwc2l6ID0gcHRhYltwcm90b2NvbF0uc3BrdGxlbjsKKyAgICAgICAgZGVidWcoRjEwMSwi aW5pdHByb3RvIHNwc2l6IiwiIixzcHNpeik7CisgICAgICAgIGlmIChzcHNpemYpIHsKKyAgICAg ICAgICAgIHNwc2l6ciA9IHNwbWF4ID0gc3BzaXo7CisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJp bml0cHJvdG8gc3BzaXpyIiwiIixzcHNpenIpOworICAgICAgICB9CisgICAgfQorICAgIGlmIChw dGFiW3Byb3RvY29sXS53aW5zaXplID4gLTEpCisgICAgICB3c2xvdHIgPSBwdGFiW3Byb3RvY29s XS53aW5zaXplOworICAgIGlmIChwdGFiW3Byb3RvY29sXS5wcmVmaXggPiAtMSkKKyAgICAgIHBy ZWZpeGluZyA9IHB0YWJbcHJvdG9jb2xdLnByZWZpeDsKKyAgICBpZiAocHRhYltwcm90b2NvbF0u Zm5jYSA+IC0xKQorICAgICAgZm5jYWN0ICA9IHB0YWJbcHJvdG9jb2xdLmZuY2E7CisgICAgaWYg KHB0YWJbcHJvdG9jb2xdLmZuY24gPiAtMSkKKyAgICAgIGZuY252ICAgPSBwdGFiW3Byb3RvY29s XS5mbmNuOworICAgIGlmIChwdGFiW3Byb3RvY29sXS5mbnNwID4gLTEpCisgICAgICBmbnNwYXRo ID0gcHRhYltwcm90b2NvbF0uZm5zcDsKKyAgICBpZiAocHRhYltwcm90b2NvbF0uZm5ycCA+IC0x KQorICAgICAgZm5ycGF0aCA9IHB0YWJbcHJvdG9jb2xdLmZucnA7CisKKyAgICBtYWtlc3RyKCYo cHRhYltwcm90b2NvbF0uaF9iX2luaXQpLHVwYnN0cik7CisgICAgbWFrZXN0cigmKHB0YWJbcHJv dG9jb2xdLmhfdF9pbml0KSx1cHRzdHIpOworICAgIG1ha2VzdHIoJihwdGFiW3Byb3RvY29sXS5o X3hfaW5pdCksc3J2c3RyKTsKKyAgICBtYWtlc3RyKCYocHRhYltwcm90b2NvbF0ucF9iX3NjbWQp LHNuZGJzdHIpOworICAgIG1ha2VzdHIoJihwdGFiW3Byb3RvY29sXS5wX3Rfc2NtZCksc25kdHN0 cik7CisgICAgbWFrZXN0cigmKHB0YWJbcHJvdG9jb2xdLnBfYl9yY21kKSxyY3Zic3RyKTsKKyAg ICBtYWtlc3RyKCYocHRhYltwcm90b2NvbF0ucF90X3JjbWQpLHJjdnRzdHIpOworfQorI2VuZGlm IC8qIE5PWEZFUiAqLworCisjaWZuZGVmIE5PQ01ETAorVk9JRAorI2lmZGVmIENLX0FOU0lDCitk b2NtZGxpbmUodm9pZCAqIHRocmVhZGluZm8pCisjZWxzZSAvKiBDS19BTlNJQyAqLworZG9jbWRs aW5lKHRocmVhZGluZm8pIFZPSUQgKiB0aHJlYWRpbmZvOworI2VuZGlmIC8qIENLX0FOU0lDICov Cit7CisjaWZkZWYgTlRTSUcKKyAgICBzZXRpbnQoKTsKKyAgICBpZiAodGhyZWFkaW5mbykgeyAg ICAgICAgICAgICAgICAgICAvKiBUaHJlYWQgbG9jYWwgc3RvcmFnZS4uLiAqLworICAgICAgIFRs c1NldFZhbHVlKFRsc0luZGV4LHRocmVhZGluZm8pOworICAgICAgIGRlYnVnKCBGMTAwLCAiZG9j bWRsaW5lIGNhbGxlZCB3aXRoIHRocmVhZGluZm8gYmxvY2siLCAiIiwgMCApOworICAgIH0gZWxz ZQorICAgICAgZGVidWcoIEYxMDAsICJkb2NtZGxpbmUgdGhyZWFkaW5mbyBpcyBOVUxMIiwiIiww KTsKKyNlbmRpZiAvKiBOVFNJRyAqLworI2lmZGVmIENLX0xPR0lOCisjaWZkZWYgTlQKKyNpZmRl ZiBJS1NECisgICAgaWYgKGluc2VydmVyKQorICAgICAgc2V0bnRjcmVkcygpOworI2VuZGlmIC8q IElLU0QgKi8KKyNlbmRpZiAvKiBOVCAqLworI2VuZGlmIC8qIENLX0xPR0lOICovCisgICAgcHJv dG8oKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVGFrZSBhbnkgcmVxdWVzdGVkIGFj dGlvbiwgdGhlbiAqLworICAgIGlmICghcXVpZXQpICAgICAgICAgICAgICAgICAgICAgICAgIC8q IHB1dCBjdXJzb3IgYmFjayBhdCBsZWZ0IG1hcmdpbiwgKi8KKyAgICAgIGNvbm9sbCgiIik7Cisj aWZuZGVmIE5PTE9DQUwKKyAgICBpZiAoY25mbGcpIHsgICAgICAgICAgICAgICAgICAgICAgICAv KiBSZS1jb25uZWN0IGlmIHJlcXVlc3RlZCAqLworICAgICAgICBjbmZsZyA9IDA7CisgICAgICAg IGRvY29uZWN0KDAsMCk7CisgICAgICAgIGlmICh0dGNoaygpIDwgMCkKKyAgICAgICAgICBkb2xv Z2VuZCgpOworICAgIH0KKyNlbmRpZiAvKiBOT0xPQ0FMICovCisKKyNpZmRlZiBOVFNJRworICAg ICBja1RocmVhZEVuZCh0aHJlYWRpbmZvKTsKKyNlbmRpZiAvKiBOVFNJRyAqLworICAgcmV0dXJu OworfQorCit2b2lkCitpa3Nsb2dpbigpIHsKKyAgICBpZiAoc3N0ZWxuZXQKKyNpZmRlZiBJS1NE CisgICAgICAgIHx8IGluc2VydmVyICAgICAgICAgICAgICAgICAgICAgLyogSW50ZXJuZXQgc2Vy dmVyICovCisjZW5kaWYgLyogSUtTRCAqLworICAgICAgICApIHsKKyAgICAgICAgY2hhciAqczsK KyAgICAgICAgZXh0ZXJuIGludCBmZGlzcGxhOyAgICAgICAgICAgICAvKiBGaWxlLXRyYW5zZmVy IGRpc3BsYXkgZm9ybWF0ICovCisgICAgICAgIGV4dGVybiBjaGFyICogaWtwcm9tcHQ7ICAgICAg ICAgLyogSUtTRCBwcm9tcHQgKi8KKworI2lmZGVmIElLU0QKKyNpZmRlZiBDS19MT0dJTgorICAg ICAgICBpZiAoaW5zZXJ2ZXIpIHsKKyAgICAgICAgICAgIHhfbG9naW4gPSAxOyAgICAgICAgICAg ICAgICAvKiBMb2dpbiByZXF1aXJlZCAqLworICAgICAgICAgICAgeF9sb2dnZWQgPSAwOyAgICAg ICAgICAgICAgIC8qIE5vdCBsb2dnZWQgaW4geWV0ICovCisgICAgICAgICAgICBjbXNldHAoaWtw cm9tcHQpOyAgICAgICAgICAgLyogU2V0IHVwIElLU0QncyBwcm9tcHQgKi8KKyNpZm5kZWYgTk9T RVJWRVIKKyAgICAgICAgICAgIGVuX21haSA9IDA7ICAgICAgICAgICAgICAgICAvKiBNQUlMIGlz IGRpc2FibGVkICovCisgICAgICAgICAgICBlbl93aG8gPSAwOyAgICAgICAgICAgICAgICAgLyog UkVNT1RFIFdITyBpcyBkaXNhYmxlZCAqLworICAgICAgICAgICAgZW5faG9zID0gMDsgICAgICAg ICAgICAgICAgIC8qIFJFTU9URSBIT1NUIGlzIGRpc2FibGVkICovCisgICAgICAgICAgICBlbl9w cmkgPSAwOyAgICAgICAgICAgICAgICAgLyogUFJJTlQgaXMgZGlzYWJsZWQgKi8KKyNlbmRpZiAv KiBOT1NFUlZFUiAqLworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgeF9sb2dpbiA9IDA7 ICAgICAgICAgICAgICAgIC8qIExvZ2luIG5vdCByZXF1aXJlZCAqLworICAgICAgICAgICAgeF9s b2dnZWQgPSAxOyAgICAgICAgICAgICAgIC8qIEFscmVhZHkgbG9nZ2VkIGluICovCisgICAgICAg IH0KKyNlbmRpZiAvKiBDS19MT0dJTiAqLworI2VuZGlmIC8qIElLU0QgKi8KKyAgICAgICAgbm9s b2NhbCA9IDE7ICAgICAgICAgICAgICAgICAgICAvKiBTRVQgTElORS9IT1NUIG5vdCBhbGxvd2Vk ICovCisgICAgICAgIGZkaXNwbGEgPSBYWUZEX047ICAgICAgICAgICAgICAgLyogTm8gZmlsZS10 cmFuc2ZlciBkaXNwbGF5ICovCisjaWZkZWYgTkVUQ09OTgorICAgICAgICBjbGllbnRob3N0ID0g Y2tnZXRwZWVyKCk7ICAgICAgIC8qIEdldCBjbGllbnQncyBob3N0bmFtZSAqLworICAgICAgICBk ZWJ1ZyhGMTEwLCJpa3Nsb2dpbiBjbGllbnRob3N0IixjbGllbnRob3N0LDApOworI2VuZGlmIC8q IE5FVENPTk4gKi8KKyAgICAgICAgenRpbWUoJnMpOyAgICAgICAgICAgICAgICAgICAgICAvKiBH ZXQgY3VycmVudCBkYXRlIGFuZCB0aW1lICovCisKKyNpZmRlZiBDS19MT0dJTgorI2lmZGVmIENL X0FVVEhFTlRJQ0FUSU9OCisgICAgICAgIGlmICh4X2xvZ2luKSB7CisgICAgICAgICAgICB4X2xv Z2dlZCA9IGNrX3RuX2F1dGhfdmFsaWQoKTsgLyogRGlkIFRlbG5ldCBBdXRoIHN1Y2NlZWQ/ICov CisgICAgICAgICAgICBkZWJ1ZyhGMTExLCJpa3Nsb2dpbiIsInhfbG9nZ2VkIix4X2xvZ2dlZCk7 CisKKyNpZmRlZiBOVAorICAgICAgICAgICAgLyogT24gV2luZG93cyA5eCwgd2UgZG8gbm90IGhh dmUgdGhlIGFiaWxpdHkgaW4gICovCisgICAgICAgICAgICAvKiB6dnVzZXIoKSBhdCBwcmVzZW50 IHRvIGRldGVybWluZSBpZiB0aGUgbmFtZSAgKi8KKyAgICAgICAgICAgIC8qIGFwcHJvdmVkIGlu IGEgS2VyYmVyb3MgcHJpbmNpcGFsIGlzIHJlYWxseSBhICAqLworICAgICAgICAgICAgLyogYW4g YWNjb3VudCBpbiB0aGUgV2luZG93cyBBY2Nlc3MgQ29udHJvbCBMaXN0ICovCisgICAgICAgICAg ICBpZiAoaXNXaW45NSgpICYmIHhfbG9nZ2VkID09IEFVVEhfVkFMSUQKKyAgICAgICAgICAgICAg ICAgJiYgKGNrX3RuX2F1dGhlbnRpY2F0ZWQoKSAhPSBBVVRIVFlQRV9OVExNKQorI2lmZGVmIENL X1NSUAorICAgICAgICAgICAgICAgICAmJiAoY2tfdG5fYXV0aGVudGljYXRlZCgpICE9IEFVVEhU WVBFX1NSUCkKKyNlbmRpZiAvKiBDS19TUlAgKi8KKyAgICAgICAgICAgICAgICAgKSB7CisgICAg ICAgICAgICAgICAgYXV0aF9maW5pc2hlZChBVVRIX1VTRVIpOworICAgICAgICAgICAgICAgIHhf bG9nZ2VkID0gQVVUSF9VU0VSOworICAgICAgICAgICAgICAgIHByaW50ZigiV0FSTklORzpcclxu Iik7CisgICAgICAgICAgICAgICAgcHJpbnRmKAorIiBUaGUgVGVsbmV0IGF1dGhlbnRpY2F0aW9u IG1ldGhvZCB1c2VkIGNhbm5vdCBwcm92aWRlIGZvciBhdXRvbWF0ZWRcclxuIik7CisgICAgICAg ICAgICAgICAgcHJpbnRmKAorIiBsb2dpbiB0byBXaW5kb3dzIDk1IG9yIFdpbmRvd3MgOTguICBB IHBhc3N3b3JkIG11c3QgYmUgZW50ZXJlZFxyXG4iKTsKKyAgICAgICAgICAgICAgICBwcmludGYo CisiIGxvY2FsbHkgdG8gdmFsaWRhdGUgeW91ciB1c2VyaWQuICBUZWxuZXQgYXV0aGVudGljYXRp b24gKGFuZCBlbmNyeXB0aW9uKVxyXG4iCisgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAg ICAgICBwcmludGYoCisiIGNhbiBiZSB1c2VkIHRvIHZhbGlkYXRlIHRoZSBob3N0IChhbmQgcHJv dGVjdCB0aGUgcHJpdmFjeSBvZiB5b3VyIHBhc3N3b3JkLilcCitcclxuIgorICAgICAgICAgICAg ICAgICk7CisgICAgICAgICAgICB9CisjZW5kaWYgLyogTlQgKi8KKworICAgICAgICAgICAgaWYg KHhfbG9nZ2VkID09IEFVVEhfVkFMSUQpIHsKKyNpZmRlZiBDS19TU0wKKyAgICAgICAgICAgICAg ICBpZiAoKHNzbF9hY3RpdmVfZmxhZyB8fCB0bHNfYWN0aXZlX2ZsYWcpICYmCisgICAgICAgICAg ICAgICAgICAgICghVEVMT1BUX1UoVEVMT1BUX0FVVEhFTlRJQ0FUSU9OKSB8fAorICAgICAgICAg ICAgICAgICAgICAgY2tfdG5fYXV0aGVudGljYXRlZCgpID09IEFVVEhUWVBFX05VTEwgfHwKKyAg ICAgICAgICAgICAgICAgICAgIGNrX3RuX2F1dGhlbnRpY2F0ZWQoKSA9PSBBVVRIVFlQRV9BVVRP KQorICAgICAgICAgICAgICAgICAgICApIHsKKyNpZmRlZiBTU0xfS1JCNQorICAgICAgICAgICAg ICAgICAgICBpZiAodGxzX2lzX2tyYjUoMCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBy aW50ZigiQXV0aGVudGljYXRlZCB1c2luZyBLZXJiZXJvcyA1XHJcbiIpOworI2lmZGVmIENLU1lT TE9HCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2t4c3lzbG9nID49IFNZU0xHX0xJICYm IGNreGxvZ2dpbmcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRlcm4gY2hhciBz elVzZXJOYW1lQXV0aGVudGljYXRlZFtdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNr c3lzbG9nKFNZU0xHX0xJLCAxLCAiQVVUSF9WQUxJRCIsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIktlcmJlcm9zIDUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHN6VXNlck5hbWVBdXRoZW50aWNhdGVkCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBD S1NZU0xPRyAqLworICAgICAgICAgICAgICAgICAgICB9IGVsc2UKKyNlbmRpZiAvKiBTU0xfS1JC NSAqLworICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBwcmlu dGYoIkF1dGhlbnRpY2F0ZWQgdXNpbmcgWC41MDkgY2VydGlmaWNhdGVcclxuIik7CisjaWZkZWYg Q0tTWVNMT0cKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChja3hzeXNsb2cgPj0gU1lTTEdf TEkgJiYgY2t4bG9nZ2luZykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVybiBj aGFyIHN6VXNlck5hbWVBdXRoZW50aWNhdGVkW107CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY2tzeXNsb2coU1lTTEdfTEksIDEsICJBVVRIX1ZBTElEIiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAiWC41MDkgY2VydGlmaWNhdGUiLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHN6VXNlck5hbWVBdXRoZW50aWNhdGVkCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K KyNlbmRpZiAvKiBDS1NZU0xPRyAqLworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgICAgfSBlbHNlCisjZW5kaWYgLyogQ0tfU1NMICovCisgICAgICAgICAgICAgICAgICB7Cisg ICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJBdXRoZW50aWNhdGVkIHVzaW5nICVzXHJcbiIs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFVVEhUWVBFX05BTUUoY2tfdG5fYXV0aGVu dGljYXRlZCgpKSk7CisjaWZkZWYgQ0tTWVNMT0cKKyAgICAgICAgICAgICAgICAgICAgICBpZiAo Y2t4c3lzbG9nID49IFNZU0xHX0xJICYmIGNreGxvZ2dpbmcpIHsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgZXh0ZXJuIGNoYXIgc3pVc2VyTmFtZUF1dGhlbnRpY2F0ZWRbXTsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgY2tzeXNsb2coU1lTTEdfTEksIDEsICJBVVRIX1ZBTElEIiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVVUSFRZUEVfTkFNRShja190bl9hdXRo ZW50aWNhdGVkKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzelVzZXJO YW1lQXV0aGVudGljYXRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwor ICAgICAgICAgICAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBDS1NZU0xPRyAqLworICAgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgICAgIHp2dXNlcih1aWRidWYpOworICAgICAgICAgICAg ICAgIGlmICh6dnBhc3MoIiIpID09IDApCisgICAgICAgICAgICAgICAgICB4X2xvZ2dlZCA9IDA7 CisgICAgICAgICAgICB9IGVsc2UgaWYgKHhfbG9nZ2VkID09IEFVVEhfVVNFUiAmJiAhc3RyY21w KHVpZGJ1ZiwiYW5vbnltb3VzIikpIHsKKyAgICAgICAgICAgICAgICBleHRlcm4gY2hhciBzelVz ZXJOYW1lQXV0aGVudGljYXRlZFtdOworICAgICAgICAgICAgICAgIHp2dXNlcih1aWRidWYpOwor ICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsInN6VXNlck5hbWVBdXRoZW50aWNhdGVkIiwKKyAg ICAgICAgICAgICAgICAgICAgICBzelVzZXJOYW1lQXV0aGVudGljYXRlZCwwKTsKKyAgICAgICAg ICAgICAgICBpZiAoenZwYXNzKHN6VXNlck5hbWVBdXRoZW50aWNhdGVkKSA9PSAwKSB7CisgICAg ICAgICAgICAgICAgICAvKiBBbm9ueW1vdXMgbG9naW4gZmFpbGVkLiAgRm9yY2UgYSB1c2VybmFt ZSBwcm9tcHQuICovCisgICAgICAgICAgICAgICAgICB4X2xvZ2dlZCA9IDA7CisgICAgICAgICAg ICAgICAgICB1aWRidWZbMF0gPSAnXDAnOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisjaWZk ZWYgQ0tfU1NMCisgICAgICAgICAgICAgICAgICAgIGlmICgoc3NsX2FjdGl2ZV9mbGFnIHx8IHRs c19hY3RpdmVfZmxhZykgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICghVEVMT1BUX1UoVEVM T1BUX0FVVEhFTlRJQ0FUSU9OKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgIGNrX3RuX2F1 dGhlbnRpY2F0ZWQoKSA9PSBBVVRIVFlQRV9OVUxMIHx8CisgICAgICAgICAgICAgICAgICAgICAg ICAgY2tfdG5fYXV0aGVudGljYXRlZCgpID09IEFVVEhUWVBFX0FVVE8pKSB7CisgICAgICAgICAg ICAgICAgICAgICAgICBwcmludGYoIkF1dGhlbnRpY2F0ZWQgdXNpbmcgWC41MDkgY2VydGlmaWNh dGVcclxuIik7CisjaWZkZWYgQ0tTWVNMT0cKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChj a3hzeXNsb2cgPj0gU1lTTEdfTEkgJiYgY2t4bG9nZ2luZykgeworICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGV4dGVybiBjaGFyIHN6VXNlck5hbWVBdXRoZW50aWNhdGVkW107CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY2tzeXNsb2coU1lTTEdfTEksIDEsICJBVVRIX1VTRVIiLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJYLjUwOSBjZXJ0aWZpY2F0ZSIs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3pVc2VyTmFtZUF1dGhlbnRp Y2F0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAg ICAgICAgICAgICAgICAgfQorI2VuZGlmIC8qIENLU1lTTE9HICovCisgICAgICAgICAgICAgICAg ICAgIH0gZWxzZQorI2VuZGlmIC8qIENLX1NTTCAqLworICAgICAgICAgICAgICAgICAgICAgIHsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJBdXRoZW50aWNhdGVkIHVzaW5nICVz XHJcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVVRIVFlQRV9OQU1FKGNr X3RuX2F1dGhlbnRpY2F0ZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7 CisjaWZkZWYgQ0tTWVNMT0cKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNreHN5c2xv ZyA+PSBTWVNMR19MSSAmJiBja3hsb2dnaW5nKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBja3N5c2xvZyhTWVNMR19MSSwgMSwgIkFVVEhfVVNFUiIsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBBVVRIVFlQRV9OQU1FKGNrX3RuX2F1dGhlbnRpY2F0ZWQo KSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzelVzZXJOYW1lQXV0 aGVudGljYXRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgfQorI2VuZGlmIC8qIENLU1lTTE9HICovCisgICAgICAg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7 CisjaWZkZWYgQ0tTWVNMT0cKKyAgICAgICAgICAgICAgICBpZiAoY2t4c3lzbG9nID49IFNZU0xH X0xJICYmIGNreGxvZ2dpbmcgJiYKKyAgICAgICAgICAgICAgICAgICAgeF9sb2dnZWQgPT0gQVVU SF9VU0VSKSB7CisgICAgICAgICAgICAgICAgICAgIGV4dGVybiBjaGFyIHN6VXNlck5hbWVBdXRo ZW50aWNhdGVkW107CisgICAgICAgICAgICAgICAgICAgIGNrc3lzbG9nKFNZU0xHX0xJLCAxLCAi QVVUSF9VU0VSIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVVUSFRZUEVfTkFNRShj a190bl9hdXRoZW50aWNhdGVkKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzelVz ZXJOYW1lQXV0aGVudGljYXRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAg ICAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBDS1NZU0xPRyAqLworICAgICAgICAgICAgICAgIHhf bG9nZ2VkID0gMDsKKyAgICAgICAgICAgICAgICBpZiAoIXN0cmNtcCgiKHVua25vd24pIix1aWRi dWYpCisjaWZkZWYgTlQKKyAgICAgICAgICAgICAgICAgICAgfHwgIXN0cmljbXAoImFkbWluaXN0 cmF0b3IiLHVpZGJ1ZikKKyNpZmRlZiBVTklYCisgICAgICAgICAgICAgICAgICAgIHx8ICFzdHJj bXAoInJvb3QiLHVpZGJ1ZikKKyNlbHNlCisjaWZkZWYgUGxhbjkKKyAgICAgICAgICAgICAgICAg ICAgfHwgIXN0cmNtcCgicm9vdCIsdWlkYnVmKQorI2Vsc2UKKyNpZmRlZiBPU0sKKyAgICAgICAg ICAgICAgICAgICAgfHwgIXN0cmNtcCgicm9vdCIsdWlkYnVmKQorI2VuZGlmIC8qIE9TSyAqLwor I2VuZGlmIC8qIFBsYW45ICovCisjZW5kaWYgLyogVU5JWCAqLworI2VuZGlmIC8qIE5UICovCisg ICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICAgIHVpZGJ1ZlswXSA9ICdcMCc7 CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyNlbmRpZiAvKiBDS19BVVRIRU5USUNBVElPTiAq LworI2VuZGlmIC8qIENLX0xPR0lOICovCisKKyNpZmRlZiBJS1NECisgICAgICAgIGlmIChpbnNl cnZlcikKKyAgICAgICAgICBwcmludGYoIlxyXG5JbnRlcm5ldCBLZXJtaXQgU2VydmljZSByZWFk eSBhdCAlcyVzXHJcbiIscyx2ZXJzaW8pOworICAgICAgICBlbHNlCisjZW5kaWYgLyogSUtTRCAq LworICAgICAgICAgIHByaW50ZigiXHJcbkMtS2VybWl0IHJlYWR5IGF0ICVzJXNcclxuIixzLHZl cnNpbyk7CisgICAgICAgIGlmICgqbXlob3N0KQorICAgICAgICAgIHByaW50ZigiJXNcclxuIiwg bXlob3N0KTsKKyAgICAgICAgcHJpbnRmKCJcclxuIik7CisgICAgfQorI2lmZGVmIENLX0xPR0lO CisjaWZkZWYgSUtTRAorICAgIGlmIChpbnNlcnZlcikgeworICAgICAgICBpbnQgaTsKKyAgICAg ICAgZXh0ZXJuIGludCBhcmdfeDsgICAgICAgICAgICAgICAvKiBGbGFnIGZvciAnLXgnIG9uIGNv bW1hbmQgbGluZSAqLworI2lmbmRlZiBOT1NQTAorICAgICAgICBleHRlcm4gc3RydWN0IG10YWIg Km1hY3RhYjsgICAgICAgICAvKiBGb3IgT05fTE9HSU4gbWFjcm8uICovCisgICAgICAgIGV4dGVy biBpbnQgbm1hYzsKKyNlbmRpZiAvKiBOT1NQTCAqLworCisgICAgICAgIGRlYnVnKEYxMTAsIk1B SU4gY2xpZW50aG9zdCIsY2xpZW50aG9zdCwwKTsKKyAgICAgICAgc3J2aWRsID0gdGltZWxpbWl0 ID0gbG9naW50aW1vOyAvKiBGb3IgaW50ZXJhY3RpdmUgbG9naW4gKi8KKyAgICAgICAgcnRpbWVy KCk7ICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXNldCB0aW1lciAqLworICAgICAgICBmb3Ig KGkgPSAwOyBpIDwgaWtzX3JldHJ5ICYmICF4X2xvZ2dlZDsgaSsrKSB7IC8qIENvdW50IHJldHJp ZXMgKi8KKyAgICAgICAgICAgIGlmIChndGltZXIoKSA+IGxvZ2ludGltbykKKyAgICAgICAgICAg ICAgYnJlYWs7CisjaWZkZWYgVE5DT0RFCisgICAgICAgICAgICB0bl93YWl0KCJsb2dpbiBsb29w Iik7CisgICAgICAgICAgICB0bl9wdXNoKCk7CisjZW5kaWYgLyogVE5DT0RFICovCisgICAgICAg ICAgICBkZWJ1ZyhGMTAxLCJNQUlOIExPR0lOIHRyeSIsIiIsaSk7CisgICAgICAgICAgICB3aGF0 ID0gV19OT1RISU5HOyAgICAgICAgICAgLyogQmVjYXVzZSBwcm90bygpIGNoYW5nZXMgdGhpcyAq LworCisjaWZkZWYgSUtTX09QVElPTgorICAgICAgICAgICAgZGVidWcoRjExMSwiTUFJTiBMT0dJ TiIsCisgICAgICAgICAgICAgICAgICAiVEVMT1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1pdC5t ZV9zdGFydCIsCisgICAgICAgICAgICAgICAgICBURUxPUFRfU0IoVEVMT1BUX0tFUk1JVCkua2Vy bWl0Lm1lX3N0YXJ0CisgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgLyogS2VybWl0 IHNlcnZlciBuZWdvdGlhdGVkICovCisgICAgICAgICAgICBpZiAoVEVMT1BUX1NCKFRFTE9QVF9L RVJNSVQpLmtlcm1pdC5tZV9zdGFydCkgeworICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsIklL U0Qgc3RhcnRpbmcgaW4gc2VydmVyIG1vZGUiLCIiLDApOworICAgICAgICAgICAgICAgIGFyZ194 ID0gMTsgICAgICAgICAgICAgIC8qIEVudGVyIHNlcnZlciBtb2RlICovCisgICAgICAgICAgICAg ICAgc3N0YXRlID0gJ3gnOworI2lmZGVmIElLU0RQT1BCQUNLCisgICAgICAgICAgICAgICAganVz dG9uZSA9IDE7ICAgICAgICAgICAgLyogRXhlY3V0ZSBvbmUgY29tbWFuZCBhdCBhIHRpbWUuICov CisjZW5kaWYgLyogSUtTRFBPUEJBQ0sgKi8KKyAgICAgICAgICAgICAgICBwcm90bygpOyAgICAg ICAgICAgICAgICAvKiBFbnRlciBwcm90b2NvbCBpZiByZXF1ZXN0ZWQuICovCisjaWZkZWYgTlRT SUcKKyAgICAgICAgICAgICAgICBja19paCgpOworI2VuZGlmIC8qIE5UU0lHICovCisgICAgICAg ICAgICAgICAgaWYgKHhfbG9nZ2VkKSAgICAgICAgICAgLyogTG9nZ2VkIGluICovCisgICAgICAg ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAg ICAvKiBOb3QgaW4gY2xpZW50L3NlcnZlciBtb2RlICovCisjZW5kaWYgLyogSUtTX09QVElPTiAq LworICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsIklLU0Qgc3RhcnRpbmcgd2l0aCBVc2VybmFt ZSBwcm9tcHQiLCIiLDApOworICAgICAgICAgICAgICAgIHhfbG9nZ2VkID0gY2t4bG9naW4oKENI QVIgKil1aWRidWYsTlVMTCxOVUxMLDEpOworICAgICAgICAgICAgICAgIGlmIChzc3RhdGUpIHsg ICAgICAgICAgIC8qIFJlY2VpdmVkIGEgcGFja2V0IGF0IHByb21wdCAqLworI2lmZGVmIElLU0RQ T1BCQUNLCisgICAgICAgICAgICAgICAgICAgIGp1c3RvbmUgPSAxOyAgICAgICAgLyogR28gaGFu ZGxlIGl0ICovCisjZW5kaWYgLyogSUtTRFBPUEJBQ0sgKi8KKyAgICAgICAgICAgICAgICAgICAg cHJvdG8oKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCF4X2xvZ2dl ZCkgeyAgICAgICAgLyogSW4gY2FzZSB3ZSBhcmUgYXQgdGhlIHByb21wdC4uLiAqLworICAgICAg ICAgICAgICAgICAgICBwcmludGYoIkFjY2VzcyBkZW5pZWQuXG4iKTsKKyAgICAgICAgICAgICAg ICAgICAgdWlkYnVmWzBdID0gJ1wwJzsgICAvKiBGb3JnZXQgdGhlIG5hbWUgaWYgd2UgaGF2ZSBv bmUgKi8KKyAgICAgICAgICAgICAgICB9CisjaWZkZWYgSUtTX09QVElPTgorICAgICAgICAgICAg fQorI2VuZGlmIC8qIElLU19PUFRJT04gKi8KKyAgICAgICAgfQorICAgICAgICBzcnZpZGwgPSB0 aW1lbGltaXQgPSBpa3NfdGltbzsgIC8qIFJlc2V0IGNvbW1hbmQgdGltZWxpbWl0ICovCisgICAg ICAgIGRlYnVnKEYxMDEsIk1BSU4gTE9HSU4iLCIiLHhfbG9nZ2VkKTsKKyAgICAgICAgaWYgKCF4 X2xvZ2dlZCkgeyAgICAgICAgICAgICAgICAvKiBMb2dpbnMgZmFpbGVkLiAqLworICAgICAgICAg ICAgaWYgKFRFTE9QVF9TQihURUxPUFRfS0VSTUlUKS5rZXJtaXQubWVfc3RhcnQpCisgICAgICAg ICAgICAgIGVycnBrdCgoQ0hBUiAqKSJMb2dpbiBUaW1lb3V0Iik7CisgICAgICAgICAgICBtc2xl ZXAoNTAwKTsKKyAgICAgICAgICAgIGRvZXhpdChCQURfRVhJVCwwKTsKKyAgICAgICAgfQorICAg ICAgICB3aGF0ID0gV19OT1RISU5HOyAgICAgICAgICAgICAgIC8qIFN0YXkgaW4ga25vd24gc3Rh dGUgKi8KKyNpZm5kZWYgTk9TRVJWRVIKKyAgICAgICAgaWYgKGlzZ3Vlc3QpIHsKKyAgICAgICAg ICAgIGVuX3ByaSA9IDA7ICAgICAgICAgICAgICAgICAvKiBObyBwcmludGluZyBmb3IgYW5vbnlt b3VzIHVzZXJzICovCisgICAgICAgICAgICBlbl9tYWkgPSAwOyAgICAgICAgICAgICAgICAgLyog Tm8gZW1haWwgZm9yIGFub255bW91cyB1c2VycyAqLworICAgICAgICAgICAgZW5fbWtkID0gMDsg ICAgICAgICAgICAgICAgIC8qIE9yIGRpcmVjdG9yeSBjcmVhdGlvbiAqLworICAgICAgICAgICAg ZW5fcm1kID0gMDsgICAgICAgICAgICAgICAgIC8qIE9yIGRpcmVjdG9yeSByZW1vdmFsICovCisg ICAgICAgICAgICBlbl9lbmEgPSAwOyAgICAgICAgICAgICAgICAgLyogT3IgRU5BQkxpbmcgRElT QUJMRWQgaXRlbXMgKi8KKyAgICAgICAgfQorI2VuZGlmIC8qIE5PU0VSVkVSICovCisKKyNpZm5k ZWYgTk9TUEwKKy8qCisgIElmIGEgbWFjcm8gbmFtZWQgIm9uX2xvZ2luIiBpcyBkZWZpbmVkLCBl eGVjdXRlIGl0LiAgQWxzbyByZW1vdmUgaXQgZnJvbSB0aGUKKyAgbWFjcm8gdGFibGUgc28gdGhl IHVzZXIgY2Fubm90IHNlZSB3aGF0IGl0IGRvZXMuICBFeGVjdXRlIGl0IGFzIHBhcnQgb2YgdGhl CisgIGlrc2QuY29uZiBmaWxlLgorKi8KKyAgICAgICAgaWYgKG5tYWMpIHsgICAgICAgICAgICAg ICAgICAgICAvKiBBbnkgbWFjcm9zIGRlZmluZWQ/ICovCisgICAgICAgICAgICBpbnQgazsgICAg ICAgICAgICAgICAgICAgICAgLyogWWVzICovCisgICAgICAgICAgICBjaGFyICogY21kID0gIm9u X2xvZ2luIjsgICAgLyogTVNWQyAyLnggY29tcGlsZXIgZXJyb3IgKi8KKyAgICAgICAgICAgIGsg PSBtbG9vayhtYWN0YWIsY21kLG5tYWMpOyAvKiBMb29rIHVwICJvbl9sb2dpbiIgKi8KKyAgICAg ICAgICAgIGlmIChrID49IDApIHsgICAgICAgICAgICAgICAvKiBJZiBmb3VuZCwgKi8KKyNpZmRl ZiBJS1NEQ09ORgorICAgICAgICAgICAgICAgIGludCBzYXZlZCA9IGlrc2RjZjsKKyAgICAgICAg ICAgICAgICBpa3NkY2YgPSAwOworI2VuZGlmIC8qIElLU0RDT05GICovCisgICAgICAgICAgICAg ICAgaWYgKGRvZG8oaywiIiwwKSA+IC0xKSAgLyogc2V0IGl0IHVwLCAqLworICAgICAgICAgICAg ICAgICAgcGFyc2VyKDEpOyAgICAgICAgICAgIC8qIGV4ZWN1dGUgaXQgKi8KKyNpZmRlZiBJS1NE Q09ORgorICAgICAgICAgICAgICAgIGlrc2RjZiA9IHNhdmVkOworI2VuZGlmIC8qIElLU0RDT05G ICovCisgICAgICAgICAgICAgICAgZGVsbWFjKGNtZCwxKTsgICAgICAgICAgLyogYW5kIGRlbGV0 ZSBpdCAqLworICAgICAgICAgICAgfQorICAgICAgICB9CisjZW5kaWYgLyogTk9TUEwgKi8KKyAg ICB9IC8qIGlmIChpbnNlcnZlcikgKi8KKyNlbHNlIC8qIENLX0xPR0lOICovCisgICAgaWYgKGlu c2VydmVyKQorICAgICAgICBzcnZpZGwgPSB0aW1lbGltaXQgPSBpa3NfdGltbzsgIC8qIFNldCBp ZGxlIGxpbWl0cyBmb3IgSUtTICovCisjZW5kaWYgLyogQ0tfTE9HSU4gKi8KKyNlbmRpZiAvKiBJ S1NEICovCit9CisKK1ZPSUQKKyNpZmRlZiBDS19BTlNJQworZmFpbGNtZGxpbmUodm9pZCAqIGZv bykKKyNlbHNlIC8qIENLX0FOU0lDICovCitmYWlsY21kbGluZShmb28pIFZPSUQgKiBmb287Cisj ZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyNpZmRlZiBHRU1ET1MKKyAgICBjY19jbGVhbigpOwor I2VuZGlmIC8qIEdFTURPUyAqLworI2lmbmRlZiBOT0xPQ0FMCisgICAgaWYgKGNuZmxnKSBkb2Nv bmVjdCgwLDApOyAgICAgICAgICAgLyogY29ubmVjdCBhZ2FpbiBpZiByZXF1ZXN0ZWQuICovCisg ICAgaWYgKHR0Y2hrKCkgPCAwKQorICAgICAgZG9sb2dlbmQoKTsKKyNlbmRpZiAvKiBOT0xPQ0FM ICovCit9CisjZW5kaWYgLyogTk9DTURMICovCisKKyNpZm5kZWYgTk9JQ1AKK1ZPSUQKKyNpZmRl ZiBDS19BTlNJQworZG90YWtlaW5pKHZvaWQgKiB0aHJlYWRpbmZvKSAgICAgICAgICAgIC8qIEV4 ZWN1dGUgaW5pdCBmaWxlLiAqLworI2Vsc2UgIC8qIENLX0FOU0lDICovCitkb3Rha2VpbmkodGhy ZWFkaW5mbykgVk9JRCAqIHRocmVhZGluZm87IC8qIEV4ZWN1dGUgaW5pdCBmaWxlLiAqLworI2Vu ZGlmIC8qIENLX0FOU0lDICovCisvKiBkb3Rha2VpbmkgKi8geworI2lmZGVmIE5UU0lHCisgICAg c2V0aW50KCk7CisgICAgaWYgKHRocmVhZGluZm8pIHsgICAgICAgICAgICAgICAgICAgLyogVGhy ZWFkIGxvY2FsIHN0b3JhZ2UuLi4gKi8KKyAgICAgICBUbHNTZXRWYWx1ZShUbHNJbmRleCx0aHJl YWRpbmZvKTsKKyAgICAgICBkZWJ1ZyhGMTAwLCAiZG90YWtlaW5pIGNhbGxlZCB3aXRoIHRocmVh ZGluZm8gYmxvY2siLCIiLCAwKTsKKyAgICB9IGVsc2UKKyAgICAgIGRlYnVnKEYxMDAsICJkb3Rh a2VpbmkgLSB0aHJlYWRpbmZvIGlzIE5VTEwiLCAiIiwgMCk7CisjZW5kaWYgLyogTlRTSUcgKi8K KyNpZmRlZiBDS19MT0dJTgorI2lmZGVmIE5UCisjaWZkZWYgSUtTRAorICAgIGlmIChpbnNlcnZl cikKKyAgICAgIHNldG50Y3JlZHMoKTsKKyNlbmRpZiAvKiBJS1NEICovCisjZW5kaWYgLyogTlQg Ki8KKyNlbmRpZiAvKiBDS19MT0dJTiAqLworICAgIGNtZGluaSgpOyAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIFNldHMgdGxldmVsICovCisKKyAgICBkZWJ1ZyhGMTExLCJkb3Rha2Vpbmki LCJpbnNlcnZlciIsaW5zZXJ2ZXIpOworICAgIGRlYnVnKEYxMTEsImRvdGFrZWluaSIsInNzdGVs bmV0Iixzc3RlbG5ldCk7CisKKyNpZmRlZiBDT01NRU5UCisvKiBXcm9uZyBwbGFjZSBmb3IgdGhp cy4uLiAqLworI2lmbmRlZiBOT1hGRVIKKyNpZmRlZiBDS19GQVNUCisgICAgZG9mYXN0KCk7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogQnkgbm93IEZBU1QgZGVmYXVsdHMgc2hvdWxkIGJl IE9LICovCisjZW5kaWYgLyogQ0tfRkFTVCAqLworI2VuZGlmIC8qIE5PWEZFUiAqLworI2VuZGlm IC8qIENPTU1FTlQgKi8KKworICAgIGRvaW5pdCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIE5vdyBkbyB0aGUgaW5pdGlhbGl6YXRpb24gZmlsZSAqLworICAgIGRlYnVnKEYxMDEsIm1h aW4gZXhlY3V0aW5nIGluaXQgZmlsZSIsIiIsdGxldmVsKTsKKyAgICB3aGlsZSAodGxldmVsID4g LTEpIHsKKyAgICAgICAgc3N0YXRlID0gKENIQVIpIHBhcnNlcigxKTsgICAgICAvKiBFeGVjdXRl IG9uZSBjb21tYW5kIGF0IGEgdGltZS4gKi8KKyAgICAgICAgaWYgKHNzdGF0ZSkgcHJvdG8oKTsg ICAgICAgICAgICAvKiBFbnRlciBwcm90b2NvbCBpZiByZXF1ZXN0ZWQuICovCisjaWZkZWYgTlRT SUcKKyAgICAgICAgY2tfaWgoKTsKKyNlbmRpZiAvKiBOVFNJRyAqLworICAgIH0KKyAgICBkZWJ1 ZyhGMTAxLCJtYWluIGV4aXRzIGluaXQgZmlsZSIsIiIsdGxldmVsKTsKKworI2lmZGVmIE5UU0lH CisgICAgY2tUaHJlYWRFbmQodGhyZWFkaW5mbyk7CisjZW5kaWYgLyogTlRTSUcgKi8KKyAgICBy ZXR1cm47Cit9CisKK1ZPSUQKKyNpZmRlZiBDS19BTlNJQworZmFpbHRha2Vpbmkodm9pZCAqIHRo cmVhZGluZm8pCisjZWxzZSAvKiBDS19BTlNJQyAqLworZmFpbHRha2VpbmkodGhyZWFkaW5mbykg Vk9JRCAqIHRocmVhZGluZm87CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIGZhaWx0YWtlaW5p ICovIHsKKyNpZmRlZiBHRU1ET1MKKyAgICBjY19jbGVhbigpOyAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBBdGFyaTogQ2xlYW4gdXAgYWZ0ZXIgXkMtdHJhcC4gKi8KKyNlbmRpZiAvKiBHRU1E T1MgKi8KKyAgICBmaXhjbWQoKTsKKyAgICBpZiAoIWNmaWxlZikgeworICAgICAgICBjb25vbGwo IkludGVycnVwdGVkIGR1cmluZyBpbml0aWFsaXphdGlvbiBvciBcCitjb21tYW5kLWxpbmUgcHJv Y2Vzc2luZy4iKTsKKyAgICAgICAgY29ub2xsKCJDLUtlcm1pdCBxdWl0dGluZy4uLiIpOworICAg IH0KKyAgICBkb2V4aXQoQkFEX0VYSVQsLTEpOyAgICAgICAgICAgICAgICAvKiBFeGl0IHdpdGgg YmFkIHN0YXR1cy4gKi8KK30KKworVk9JRAorI2lmZGVmIENLX0FOU0lDCitkb2ljcCh2b2lkICog dGhyZWFkaW5mbykKKyNlbHNlIC8qIENLX0FOU0lDICovCitkb2ljcCh0aHJlYWRpbmZvKSBWT0lE ICogdGhyZWFkaW5mbzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogZG9pY3AgKi8geworI2lm ZGVmIE5UU0lHCisgICAgc2V0aW50KCk7CisgICAgaWYgKHRocmVhZGluZm8pIHsgICAgICAgICAg ICAgICAgICAgLyogVGhyZWFkIGxvY2FsIHN0b3JhZ2UuLi4gKi8KKyAgICAgICBpZiAoIVRsc1Nl dFZhbHVlKFRsc0luZGV4LHRocmVhZGluZm8pKQorICAgICAgICAgIGRlYnVnKEYxMDEsImRvaWNw IFRsc1NldFZhbHVlIGZhaWxlZCIsIiIsR2V0TGFzdEVycm9yKCkpOworICAgICAgIGRlYnVnKEYx MDEsICJkb2ljcCBhIHRocmVhZGluZm8gYmxvY2sgLSBUbHNJbmRleCIsICIiLCBUbHNJbmRleCk7 CisgICAgfSBlbHNlIHsKKyAgICAgICAgZGVidWcoRjEwMCwgImRvaWNwIHJlY2VpdmVkIGEgbnVs bCB0aHJlYWRpbmZvIiwgIiIsIDApOworICAgIH0KKyNlbmRpZiAvKiBOVFNJRyAqLworI2lmZGVm IENLX0xPR0lOCisjaWZkZWYgTlQKKyNpZmRlZiBJS1NECisgICAgaWYgKGluc2VydmVyKQorICAg ICAgc2V0bnRjcmVkcygpOworI2VuZGlmIC8qIElLU0QgKi8KKyNlbmRpZiAvKiBOVCAqLworI2Vu ZGlmIC8qIENLX0xPR0lOICovCisjaWZkZWYgTUFDCisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAg ZXh0ZXJuIGNoYXIgKmxmaWxlczsgICAgICAgICAgICAvKiBGYWtlIHBvaW50ZXIgY2FzdCAqLwor CisgICAgICAgIGlmIChjb25uZWN0ZWQpIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMDAsICJkb2lj cDogY2FsbGluZyBtYWNwYXJzZXIiLCAiIiwgMCk7CisgICAgICAgICAgICBzc3RhdGUgPSBuZXdw YXJzZXIoMSwgMSwgMEwpOworCisgICAgICAgICAgICAvKiBpZ25vcmUgbnVsbCBjb21tYW5kIHN0 YXRlICovCisgICAgICAgICAgICBpZiAoc3N0YXRlID09ICduJykKKyAgICAgICAgICAgICAgc3N0 YXRlID0gJ1wwJzsKKworICAgICAgICAgICAgaWYgKHNzdGF0ZSkKKyAgICAgICAgICAgICAgcHJv dG8oKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBw cm9jZXNzIHRha2UgZmlsZXMgdGhlIGZpbmRlciBnYXZlIHVzLgorICAgICAgICAgICAgICovCisg ICAgICAgICAgICBpZiAoKHRsZXZlbCA9PSAtMSkgJiYgbGZpbGVzKQorICAgICAgICAgICAgICBz dGFydGxmaWxlKCk7CisKKyAgICAgICAgICAgIGRlYnVnKEYxMDAsICJkb2ljcDogY2FsbGluZyBw YXJzZXIiLCAiIiwgMCk7CisgICAgICAgICAgICBzc3RhdGUgPSAoQ0hBUikgcGFyc2VyKDApOwor ICAgICAgICAgICAgaWYgKHNzdGF0ZSA9PSAnYycpICAgICAgICAgIC8qIGlmIE1BQyBjb25uZWN0 ICovCisgICAgICAgICAgICAgIHNzdGF0ZSA9IDA7CisgICAgICAgICAgICBpZiAoc3N0YXRlKQor ICAgICAgICAgICAgICBwcm90bygpOworICAgICAgICB9CisgICAgfQorI2Vsc2UgLyogTm90IE1B QyAqLworCisjaWZuZGVmIE5PU1BMCisvKgorICBJZiBpbnRlcmFjdGl2ZSBjb21tYW5kcyB3ZXJl IGdpdmVuIG9uIHRoZSBjb21tYW5kIGxpbmUgKHVzaW5nIHRoZQorICAtQyAiY29tbWFuZCwgY29t bWFuZCwgLi4uIiBvcHRpb24pLCBhc3NpZ24gdGhlbSB0byBhIG1hY3JvIGNhbGxlZAorICAiY2xf Y29tbWFuZHMiLCB0aGVuIGV4ZWN1dGUgdGhlIG1hY3JvIGFuZCBsZWF2ZSBpdCBkZWZpbmVkIGZv cgorICBzdWJzZXF1ZW50IHJlLWV4ZWN1dGlvbiBpZiBkZXNpcmVkLgorKi8KKyAgICBpZiAoY2xj bWRzKSB7ICAgICAgICAgICAgICAgICAgICAgICAvKiBDaGVjayBmb3IgLUMgY29tbWFuZHMgKi8K KyAgICAgICAgaW50IHg7CisgICAgICAgIHggPSBhZGRtYWMoImNsX2NvbW1hbmRzIixjbGNtZHMp OyAvKiBQdXQgbWFjcm8gaW4gdGFibGUgKi8KKyAgICAgICAgaWYgKHggPiAtMSkgeyAgICAgICAg ICAgICAgICAgICAvKiBJZiBzdWNjZXNzZnVsLCAqLworICAgICAgICAgICAgZG9kbyh4LE5VTEws Q0ZfQ01ETCk7ICAgICAgIC8qIHNldCB1cCBmb3IgbWFjcm8gZXhlY3V0aW9uICovCisgICAgICAg ICAgICB3aGlsZSAobWFjbHZsID4gLTEpIHsgICAgICAgLyogTG9vcCBnZXR0aW5nIG1hY3JvIGNv bW1hbmRzLiAqLworICAgICAgICAgICAgICAgIHNzdGF0ZSA9IChDSEFSKSBwYXJzZXIoMSk7Cisg ICAgICAgICAgICAgICAgaWYgKHNzdGF0ZSkgcHJvdG8oKTsgICAgLyogRW50ZXIgcHJvdG9jb2wg aWYgcmVxdWVzdGVkLiAqLworI2lmZGVmIE5UU0lHCisgICAgICAgICAgICAgICAgY2tfaWgoKTsK KyNlbmRpZiAvKiBOVFNJRyAqLworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGRl YnVnKEYxMDAsImRvaWNwIGNhbGxpbmcgaGVyYWxkIiwiIiwwKTsKKyAgICAgICAgaGVyYWxkKCk7 CisgICAgfQorI2VuZGlmIC8qIE5PU1BMICovCisgICAgd2hpbGUoMSkgeyAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogTG9vcCBnZXR0aW5nIGNvbW1hbmRzLiAqLworICAgICAgICBzc3RhdGUg PSAoQ0hBUikgcGFyc2VyKDApOworICAgICAgICBpZiAoc3N0YXRlKSBwcm90bygpOyAgICAgICAg ICAgIC8qIEVudGVyIHByb3RvY29sIGlmIHJlcXVlc3RlZC4gKi8KKyNpZmRlZiBOVFNJRworICAg ICAgIGNrX2loKCk7CisjZW5kaWYgLyogTlRTSUcgKi8KKyAgICB9CisjaWZkZWYgTlRTSUcKKyAg ICBja1RocmVhZEVuZCh0aHJlYWRpbmZvKTsKKyNlbmRpZiAvKiBOVFNJRyAqLworI2VuZGlmIC8q IE1BQyAqLworfQorCitWT0lECisjaWZkZWYgQ0tfQU5TSUMKK2ZhaWxpY3Aodm9pZCAqIHRocmVh ZGluZm8pCisjZWxzZSAvKiBDS19BTlNJQyAqLworZmFpbGljcCh0aHJlYWRpbmZvKSBWT0lEICog dGhyZWFkaW5mbzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworI2lmZGVmIEdFTURPUworICAg IGNjX2NsZWFuKCk7CisjZW5kaWYgLyogR0VNRE9TICovCisgICAgZml4Y21kKCk7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogUG9wIGNvbW1hbmQgc3RhY2tzLCBldGMuICovCisgICAgY2xj bWRzID0gTlVMTDsKKyAgICBkZWJ1ZyhGMTAwLCJja2NtYWkgZ290IGludGVycnVwdCIsIiIsMCk7 Cit9CisjZW5kaWYgLyogTk9JQ1AgKi8KKworI2lmbmRlZiBOT0lDUAorVk9JRAorI2lmZGVmIENL X0FOU0lDCitkb2NtZGZpbGUodm9pZCAqIHRocmVhZGluZm8pICAgICAgICAgICAgLyogRXhlY3V0 ZSBhcHBsaWNhdGlvbiBmaWxlICovCisjZWxzZSAvKiBDS19BTlNJQyAqLworZG9jbWRmaWxlKHRo cmVhZGluZm8pIFZPSUQgKiB0aHJlYWRpbmZvOworI2VuZGlmIC8qIENLX0FOU0lDICovCisvKiBk b2NtZGZpbGUgKi8geworI2lmZGVmIE5UU0lHCisgICAgY29uY2IoKGNoYXIpZXNjYXBlKTsKKyAg ICBzZXRpbnQoKTsKKyAgICBpZiAodGhyZWFkaW5mbykgeyAgICAgICAgICAgICAgICAgICAvKiBU aHJlYWQgbG9jYWwgc3RvcmFnZS4uLiAqLworICAgICAgICBUbHNTZXRWYWx1ZShUbHNJbmRleCx0 aHJlYWRpbmZvKTsKKyAgICAgICAgZGVidWcoRjEwMCwgImRvY21kZmlsZSBjYWxsZWQgd2l0aCB0 aHJlYWRpbmZvIGJsb2NrIiwiIiwgMCk7CisgICAgfSBlbHNlIGRlYnVnKEYxMDAsICJkb2NtZGZp bGUgLSB0aHJlYWRpbmZvIGlzIE5VTEwiLCAiIiwgMCk7CisjZW5kaWYgLyogTlRTSUcgKi8KKyNp ZmRlZiBDS19MT0dJTgorI2lmZGVmIElLU0QKKyNpZmRlZiBOVAorICAgIGlmIChpbnNlcnZlcikK KyAgICAgIHNldG50Y3JlZHMoKTsKKyNlbmRpZiAvKiBOVCAqLworI2VuZGlmIC8qIElLU0QgKi8K KyNlbmRpZiAvKiBDS19MT0dJTiAqLworICAgIGRlYnVnKEYxMTAsIm1haW4gY21kZmlsIixjbWRm aWwsMCk7CisjaWZuZGVmIE5PU1BMCisgICAgYWRkbWFjKCJcXCUwIixjbWRmaWwpOworI2VuZGlm IC8qIE5PU1BMICovCisgICAgZG90YWtlKGNtZGZpbCk7CQkJLyogU2V0IHVwIHRoZSBjb21tYW5k IGZpbGUgKi8KKyAgICBpZiAodGxldmVsID4gLTEpCQkJLyogUmVtZW1iZXIgd2UgZGlkIHRoaXMg Ki8KKyAgICAgIGNmaWxlZiA9IDE7CisgICAgd2hpbGUgKHRsZXZlbCA+IC0xKSB7ICAgICAgICAg ICAgICAgLyogRXhlY3V0ZSBpdCB1bnRpbCBpdCBydW5zIG91dC4gKi8KKyAgICAgICAgc3N0YXRl ID0gcGFyc2VyKDEpOyAgICAgICAgICAgICAvKiBMb29wIGdldHRpbmcgY29tbWFuZHMuICovCisg ICAgICAgIGlmIChzc3RhdGUpIHByb3RvKCk7ICAgICAgICAgICAgLyogRW50ZXIgcHJvdG9jb2wg aWYgcmVxdWVzdGVkLiAqLworI2lmZGVmIE5UU0lHCisgICAgICAgIGNrX2loKCk7CisjZW5kaWYg LyogTlRTSUcgKi8KKyAgICB9CisKKyNpZmRlZiBOVFNJRworICAgIGNrVGhyZWFkRW5kKHRocmVh ZGluZm8pOworI2VuZGlmIC8qIE5UU0lHICovCisgICAgcmV0dXJuOworfQorCitWT0lECisjaWZk ZWYgQ0tfQU5TSUMKK2ZhaWxjbWRmaWxlKHZvaWQgKiB0aHJlYWRpbmZvKQorI2Vsc2UgLyogQ0tf QU5TSUMgKi8KK2ZhaWxjbWRmaWxlKHRocmVhZGluZm8pIFZPSUQgKiB0aHJlYWRpbmZvOworI2Vu ZGlmIC8qIENLX0FOU0lDICovCisvKiBmYWlsY21kZmlsZSAqLyB7CisjaWZkZWYgR0VNRE9TCisg ICAgY2NfY2xlYW4oKTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogQXRhcmk6IENsZWFuIHVw IGFmdGVyIF5DLXRyYXAuICovCisjZW5kaWYgLyogR0VNRE9TICovCisgICAgZml4Y21kKCk7Cisg ICAgaWYgKCFjZmlsZWYpIHsKKwljb25vbGwoIkludGVycnVwdGVkIGR1cmluZyBpbml0aWFsaXph dGlvbiBvciBcCitjb21tYW5kLWxpbmUgcHJvY2Vzc2luZy4iKTsKKwljb25vbGwoIkMtS2VybWl0 IHF1aXR0aW5nLi4uIik7CisgICAgfQorICAgIGRvZXhpdChCQURfRVhJVCwtMSk7ICAgICAgICAg ICAgICAgIC8qIEV4aXQgd2l0aCBiYWQgc3RhdHVzLiAqLworfQorI2VuZGlmIC8qIE5PSUNQICov CisKKyNpZm5kZWYgTk9YRkVSCitWT0lECitzZXRwcmVmaXgoeikgaW50IHo7IHsgICAgICAgICAg ICAgICAgICAgLyogSW5pdGlhbCBjb250cm9sLWNoYXIgcHJlZml4aW5nICovCisjaWZkZWYgQ0tf U1BFRUQKKyAgICBpbnQgaSwgdmFsOworCisgICAgcHJlZml4aW5nID0gejsKKyAgICBwdGFiW3By b3RvY29sXS5wcmVmaXggPSBwcmVmaXhpbmc7CisgICAgZGVidWcoRjEwMSwic2V0cHJlZml4Iiwi IixwcmVmaXhpbmcpOworICAgIHN3aXRjaCAoeikgeworICAgICAgY2FzZSBQWF9BTEw6ICAgICAg ICAgICAgICAgICAgICAgIC8qIEFsbCAqLworI2lmZGVmIENPTU1FTlQKKyAgICAgICAgLyogRG9u J3QgbGV0IENsZWFyLUNoYW5uZWwgYmUgZGVwZW5kZW50IG9uIHByZWZpeGluZyAqLworICAgICAg ICBjbGVhcnJxID0gMDsgICAgICAgICAgICAgICAgICAgIC8qIFR1cm4gb2ZmIGNsZWFyY2hhbm5l bCwgZmFsbCB0aHJ1ICovCisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAgY2FzZSBQWF9OT046 ICAgICAgICAgICAgICAgICAgICAgIC8qIE5vbmUgKi8KKyAgICAgICAgdmFsID0gKHogPT0gUFhf QUxMKSA/IDEgOiAwOworICAgICAgICBmb3IgKGkgPQorI2lmZGVmIFVOUFJFRklYWkVSTworICAg ICAgICAgICAgIDAKKyNlbHNlCisgICAgICAgICAgICAgMQorI2VuZGlmIC8qIFVOUFJFRklYWkVS TyAqLworICAgICAgICAgICAgIDsgaSA8IDMyOyBpKyspCisgICAgICAgICAgY3RscFtpXSA9IHZh bDsKKyAgICAgICAgZm9yIChpID0gMTI3OyBpIDwgMTYwOyBpKyspIGN0bHBbaV0gPSB2YWw7Cisg ICAgICAgIGN0bHBbKHVuc2lnbmVkKTI1NV0gPSB2YWw7CisgICAgICAgIGlmICh6ID09IFBYX05P TikgeyAgICAgICAgICAgICAgLyogVGhlc2UgYXJlIG5ldmVyIHNhZmUgKi8KKyAgICAgICAgICAg IGlmIChuZXR3b3JrKSB7ICAgICAgICAgICAgICAvKiBBc3N1bWUgbmV0d29yayA9IHRlbG5ldCBv ciBybG9naW4gKi8KKyAgICAgICAgICAgICAgICBjdGxwW0NSXSA9IDE7ICAgICAgICAgICAvKiBQ cmVmaXggQ1IgYmVjYXVzZSBvZiBOVlQgcnVsZXMgKi8KKyAgICAgICAgICAgICAgICBjdGxwW1hP Tl0gPSBjdGxwW1hPRkZdID0gMTsgLyogQmVjYXVzZSBvZiBUZWxuZXQgc2VydmVyICovCisgICAg ICAgICAgICAgICAgY3RscFsxMjddID0gY3RscFsyNTVdID0gMTsgIC8qIFRlbG5ldCBJQUMgKi8K KyAgICAgICAgICAgICAgICBjdGxwW215c3RjaF0gPSBjdGxwW215c3RjaCsxMjhdID0gMTsgLyog S2VybWl0IHBhY2tldCBzdGFydCAqLworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg ICAgICBjdGxwW0NSXSA9IGN0bHBbMjU1XSA9IGN0bHBbbXlzdGNoXSA9IGN0bHBbbXlzdGNoKzEy OF0gPSAxOworICAgICAgICAgICAgICAgIGlmIChmbG93ID09IEZMT19YT05YKSAgICAgICAvKiBY b24vWG9mZiBmb3JjZXMgcHJlZml4aW5nICovCisgICAgICAgICAgICAgICAgICBjdGxwW1hPTl0g PSBjdGxwW1hPRkZdID0gY3RscFtYT04rMTI4XSA9IGN0bHBbWE9GRisxMjhdID0gMTsKKyAgICAg ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBQWF9DQVU6 ICAgICAgICAgICAgICAgICAgICAgIC8qIENhdXRpb3VzIG9yIE1pbmltYWwgKi8KKyNpZmRlZiBD T01NRU5UCisgICAgICAgIC8qIERvbid0IGxldCBDTEVBUi1DSEFOTkVMIGJlIGRlcGVuZGVudCBv biBQcmVmaXhpbmcgKi8KKyAgICAgICAgY2xlYXJycSA9IDA7ICAgICAgICAgICAgICAgICAgICAv KiBUdXJuIG9mZiBjbGVhcmNoYW5uZWwgKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgICBj YXNlIFBYX1dJTDogICAgICAgICAgICAgICAgICAgICAgLyogTWluaW1hbCAoIndpbGQiKSAqLwor ICAgICAgICBjdGxwWzBdID0gMTsgICAgICAgICAgICAgICAgICAgIC8qIERvZXMgbm90IGluY2x1 ZGUgMCAqLworICAgICAgICBmb3IgKGkgPSAxOyBpIDwgMzI7IGkrKykKKyAgICAgICAgICBjdGxw W2ldID0gMDsKKyAgICAgICAgZm9yIChpID0gMTI3OyBpIDwgMTYwOyBpKyspCisgICAgICAgICAg Y3RscFtpXSA9IDA7CisgICAgICAgIGN0bHBbbXlzdGNoXSA9IGN0bHBbbXlzdGNoKzEyOF0gPSAx OyAvKiBLZXJtaXQgc3RhcnQgb2YgcGFja2V0ICovCisgICAgICAgIGlmIChzZW9sICE9IDEzKQor ICAgICAgICAgIGN0bHBbc2VvbF0gPSBjdGxwW3Nlb2wrMTI4XSA9IDE7IC8qIEtlcm1pdCBlbmQg Ki8KKyAgICAgICAgY3RscFsxM10gPSBjdGxwWzE0MV0gPSAxOyAgICAgICAvKiBJbiBjYXNlIG9m IFRFTE5FVCAoTlZUIHJ1bGVzKSAqLworICAgICAgICBjdGxwWyh1bnNpZ25lZCkyNTVdID0gMTsg ICAgICAgIC8qIERpdHRvICovCisKKyAgICAgICAgLyogXkQsIF5KLCBeTSwgb3IgXlUgZm9sbG93 ZWQgYnkgdGlsZGUgdHJpZ2dlciBSbG9naW4gZXNjYXBlICovCisKKyAgICAgICAgY3RscFs0XSAg PSBjdGxwWzQrMTI4XSAgPSAxOyAgICAvKiBJbiBjYXNlIG9mIFJMT0dJTiAqLworICAgICAgICBj dGxwWzEwXSA9IGN0bHBbMTArMTI4XSA9IDE7ICAgIC8qIEluIGNhc2Ugb2YgUkxPR0lOICovCisg ICAgICAgIGN0bHBbMjFdID0gY3RscFsyMSsxMjhdID0gMTsgICAgLyogSW4gY2FzZSBvZiBSTE9H SU4gKi8KKworICAgICAgICBpZiAoZmxvdyA9PSBGTE9fWE9OWCB8fCAgICAgICAgIC8qIFhvbi9Y b2ZmIGZvcmNlcyBwcmVmaXhpbmcgdGhlc2UgKi8KKyAgICAgICAgICAgIHByZWZpeGluZyA9PSBQ WF9DQVUgfHwgICAgICAvKiBTbyBkb2VzIENBVVRJT1VTICovCisgICAgICAgICAgICBuZXR3b3Jr KSAgICAgICAgICAgICAgICAgICAgLyogTmV0d29ya3MgdG9vLi4uICovCisgICAgICAgICAgY3Rs cFtYT05dID0gY3RscFtYT0ZGXSA9IGN0bHBbWE9OKzEyOF0gPSBjdGxwW1hPRkYrMTI4XSA9IDE7 CisgICAgICAgIGlmIChwcmVmaXhpbmcgPT0gUFhfQ0FVKSB7ICAgICAgLyogQ2F1dGlvdXMgLSBh ZGQgc29tZSBtb3JlICovCisjaWZkZWYgVU5QUkVGSVhaRVJPCisgICAgICAgICAgICBjdGxwWzBd ID0gMTsKKyNlbmRpZiAvKiBVTlBSRUZJWFpFUk8gKi8KKyAgICAgICAgICAgIGN0bHBbM10gICA9 IGN0bHBbMTZdICA9IDE7ICAgICAgICAgICAgIC8qIF5DLCBETEUgKi8KKyAgICAgICAgICAgIGN0 bHBbMTRdICA9IGN0bHBbMTVdICA9IDE7ICAgICAgICAgICAgIC8qIFNPL1NJICovCisgICAgICAg ICAgICBjdGxwWzI0XSAgPSBjdGxwWzI1XSAgPSAxOyAgICAgICAgICAgICAvKiBWTVMgbWlnaHQg bmVlZCB0aGVzZSAqLworICAgICAgICAgICAgY3RscFsyNl0gID0gY3RscFsyNisxMjhdID0gMTsg ICAgICAgICAgLyogVU5JWCBzdXNwZW5kICovCisgICAgICAgICAgICBjdGxwWzI4XSAgPSBjdGxw WzI5XSAgPSBjdGxwWzMwXSAgPSAxOyAvKiBBc3NvcnRlZCBlc2MgY2hhcnMgKi8KKyAgICAgICAg ICAgIGN0bHBbMTMxXSA9IGN0bHBbMTQxXSA9IGN0bHBbMTQ0XSA9IDE7IC8qIGFuZCA4LWJpdCB2 ZXJzaW9ucyAqLworICAgICAgICAgICAgY3RscFsodW5zaWduZWQpMjU1XSA9IGN0bHBbMTU2XSA9 IGN0bHBbMTU3XSA9IGN0bHBbMTU4XSA9IDE7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7Cisg ICAgfQorI2VuZGlmIC8qIENLX1NQRUVEICovCit9CisjZW5kaWYgLyogTk9YRkVSICovCisKK1ZP SUQKK21ha2V2ZXIoKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBNYWtlIHZlcnNp b24gc3RyaW5nIGZyb20gcGllY2VzICovCisgICAgaW50IHgsIHk7CisgICAgY2hhciAqIHM7Cisj aWZuZGVmIE9TMgorI2lmbmRlZiBNQUMKKyAgICBja19zX3h2ZXIgPSBja19zX3ZlcjsgICAgICAg ICAgICAgICAvKiBGaWxsIGluIEMtS2VybWl0IHZlcnNpb24gbnVtYmVyICovCisgICAgY2tfbF94 dmVyID0gY2tfbF92ZXI7ICAgICAgICAgICAgICAgLyogZm9yIFVOSVgsIFZNUywgZXRjLiAqLwor I2VuZGlmIC8qIE1BQyAqLworI2VuZGlmIC8qIE9TMiAqLworICAgIHggPSBzdHJsZW4oY2tfc19u YW1lKTsKKyAgICB5ID0gc3RybGVuKGNrX3NfeHZlcik7CisgICAgaWYgKHkgKyB4ICsgMSA8IENL VkVSTEVOKSB7CisgICAgICAgIGNrbWFrbXNnKHZlcnNpbyxDS1ZFUkxFTixja19zX25hbWUsIiAi LGNrX3NfeHZlcixOVUxMKTsKKyAgICB9IGVsc2UgeworICAgICAgICBja3N0cm5jcHkodmVyc2lv LCJDLUtlcm1pdCIsQ0tWRVJMRU4pOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHggKz0g eSArIDE7CisgIAorICAgIHMgPSAiIE9QRU4gU09VUkNFOiI7CQkvKiBDLUtlcm1pdCA5LjAgYW5k IGxhdGVyICovCisgICAgeSA9IHN0cmxlbihzKTsKKyAgICBpZiAoQ0tWRVJMRU4gPCB4ICsgeSAr IDEpCisgICAgICByZXR1cm47CisgICAgY2tzdHJuY2F0KHZlcnNpbyxzLENLVkVSTEVOKTsKKwor ICAgIHggKz0geSArIDE7CisgICAgaWYgKCpja19zX3dobykgeworICAgICAgICB5ID0gc3RybGVu KGNrX3Nfd2hvKTsKKyAgICAgICAgaWYgKENLVkVSTEVOIDwgeCArIHkgKyAxKQorICAgICAgICAg IHJldHVybjsKKyAgICAgICAgY2tzdHJuY2F0KHZlcnNpbywiLSIsQ0tWRVJMRU4pOworICAgICAg ICBja3N0cm5jYXQodmVyc2lvLGNrX3Nfd2hvLENLVkVSTEVOKTsKKyAgICB9CisgICAgeCArPSB5 ICsgMTsKKyAgICB5ID0gc3RybGVuKGNrX3NfdGVzdCk7CisgICAgaWYgKHkgPiAwICYmIHkgKyB4 ICsgMSA8IENLVkVSTEVOKSB7CisgICAgICAgIGNrc3RybmNhdCh2ZXJzaW8sIiAiLENLVkVSTEVO KTsKKyAgICAgICAgY2tzdHJuY2F0KHZlcnNpbyxja19zX3Rlc3QsQ0tWRVJMRU4pOworICAgICAg ICB4ICs9IHkgKyAxOworICAgICAgICB5ID0gc3RybGVuKGNrX3NfdHZlcik7CisgICAgICAgIGlm ICh5ID4gMCAmJiB5ICsgeCArIDEgPCBDS1ZFUkxFTikgeworICAgICAgICAgICAgY2tzdHJuY2F0 KHZlcnNpbywiLiIsQ0tWRVJMRU4pOworICAgICAgICAgICAgY2tzdHJuY2F0KHZlcnNpbyxja19z X3R2ZXIsQ0tWRVJMRU4pOworICAgICAgICAgICAgeCArPSB5ICsgMTsKKyAgICAgICAgfQorICAg IH0KKyAgICB5ID0gc3RybGVuKGNrX3NfZGF0ZSk7CisgICAgaWYgKHkgPiAwICYmIHkgKyB4ICsg MiA8IENLVkVSTEVOKSB7CisgICAgICAgIGNrc3RybmNhdCh2ZXJzaW8sIiwgIixDS1ZFUkxFTik7 CisgICAgICAgIGNrc3RybmNhdCh2ZXJzaW8sY2tfc19kYXRlLENLVkVSTEVOKTsKKyAgICB9Cisg ICAgdmVybnVtID0gY2tfbF92ZXI7CisgICAgeHZlcm51bSA9IGNrX2xfeHZlcjsKKyAgICBkZWJ1 ZyhGMTEwLCJLZXJtaXQgdmVyc2lvbiIsdmVyc2lvLDApOworfQorCit1bmlvbiBja19zaG9ydCBz aG9ydGJ5dGVzOyAgICAgICAgICAgICAgLyogRm9yIGRldGVybWluaW5nIGJ5dGUgb3JkZXIgKi8K K2ludCBieXRlb3JkZXIgPSAwOyAgICAgICAgICAgICAgICAgICAgICAvKiAwID0gQmlnIEVuZGlh bjsgMSA9IExpdHRsZSBFbmRpYW4gKi8KK2ludCBiaWdlbmRpYW4gPSAxOworLyogTk9URTogTVVT VCBCRSAwIG9yIDEgLSBub3RoaW5nIGVsc2UgKi8KKworI2lmbmRlZiBOT1NQTAorI2RlZmluZSBT Q1JJUFRMRU4gMTAyNDAKKyNlbmRpZgkvKiBOT1NQTCAqLworCisjaWZkZWYgTkVUQ09OTgorI2lm bmRlZiBOT0NNREwKKyNpZm5kZWYgTk9VUkwKK1ZPSUQKK2RvdXJsKCkgeworICAgIGludCByYyA9 IDA7CisgICAgY2hhciAqIHBvcnQgPSBOVUxMOworICAgIGV4dGVybiBpbnQgdHRucHJvdG87Cisg ICAgZXh0ZXJuIHN0cnVjdCB1cmxkYXRhIGdfdXJsOworCisjaWZkZWYgQ09NTUVOVAorICAgIC8q IE5PVEU6IGRlYnVnKCkgZG9lc24ndCB3b3JrIHlldCAtIG11c3QgdXNlIHByaW50ZidzICovCisg ICAgcHJpbnRmKCJVUkw6ICAlc1xuIixnX3VybC5zYXYgPyBnX3VybC5zYXYgOiAiKG5vbmUpIik7 CisgICAgcHJpbnRmKCJUeXBlOiAlc1xuIixnX3VybC5zdmMgPyBnX3VybC5zdmMgOiAiKG5vbmUp Iik7CisgICAgcHJpbnRmKCJVc2VyOiAlc1xuIixnX3VybC51c3IgPyBnX3VybC51c3IgOiAiKG5v bmUpIik7CisgICAgcHJpbnRmKCJQYXNzOiAlc1xuIixnX3VybC5wc3cgPyBnX3VybC5wc3cgOiAi KG5vbmUpIik7CisgICAgcHJpbnRmKCJIb3N0OiAlc1xuIixnX3VybC5ob3MgPyBnX3VybC5ob3Mg OiAiKG5vbmUpIik7CisvKiAgcHJpbnRmKCJQb3J0OiAlc1xuIixnX3VybC5wb3IgPyBnX3VybC5w b3IgOiAiKG5vbmUpIik7ICovCisgICAgcHJpbnRmKCJQYXRoOiAlc1xuIixnX3VybC5wdGggPyBn X3VybC5wdGggOiAiKG5vbmUpIik7CisjZW5kaWYgLyogQ09NTUVOVCAqLworCisgICAgaWYgKCFj a3N0cmNtcChnX3VybC5zdmMsImlrc2QiLC0xLDApIHx8CisgICAgICAgICFja3N0cmNtcChnX3Vy bC5zdmMsImtlcm1pdCIsLTEsMCkpIHsKKyAgICAgICAgZXh0ZXJuIGNoYXIgcHdidWZbXTsKKyAg ICAgICAgZXh0ZXJuIGludCBwd2ZsZzsKKyNpZmRlZiBPUzIKKyAgICAgICAgZXh0ZXJuIGludCBw d2NyeXB0OworI2VuZGlmIC8qIE9TMiAqLworCisgICAgICAgIGlmICghZ191cmwuaG9zKSB7Cisg ICAgICAgICAgICBwcmludGYoIj9JbmNvbXBsZXRlIElLU0QgVVJMXG4iKTsKKyAgICAgICAgICAg IGRvZXhpdChCQURfRVhJVCwxKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWdfdXJsLnVzcikK KyAgICAgICAgICAgIG1ha2VzdHIoJmdfdXJsLnVzciwiYW5vbnltb3VzIik7CisgICAgICAgIGlm ICghZ191cmwucHN3KSB7CisgICAgICAgICAgICBjaGFyICogdG1wYnVmID0gTlVMTDsKKyAgICAg ICAgICAgIGlmICghKHRtcGJ1ZiA9IChjaGFyICopbWFsbG9jKDEwMjQpKSkKKyAgICAgICAgICAg ICAgICBmYXRhbCgiZG91cmw6IG91dCBvZiBtZW1vcnkiKTsKKyAgICAgICAgICAgIGlmICghY2tz dHJjbXAoZ191cmwudXNyLCJhbm9ueW1vdXMiLC0xLDApKSB7CisgICAgICAgICAgICAgICAgY2tt YWttc2codG1wYnVmLDEwMjQsdWlkYnVmLCJAIixteWhvc3QsTlVMTCk7CisgICAgICAgICAgICAg ICAgbWFrZXN0cigmZ191cmwucHN3LHRtcGJ1Zik7CisgICAgICAgICAgICB9IGVsc2UgeworICAg ICAgICAgICAgICAgIHJlYWRwYXNzKCIgUGFzc3dvcmQ6Iix0bXBidWYsMTAyNCk7CisgICAgICAg ICAgICAgICAgbWFrZXN0cigmZ191cmwucHN3LHRtcGJ1Zik7CisgICAgICAgICAgICB9CisgICAg ICAgICAgICBmcmVlKHRtcGJ1Zik7CisgICAgICAgIH0KKyAgICAgICAgcG9ydCA9ICJrZXJtaXQi OworICAgICAgICB0dG5wcm90byA9IE5QX1RFTE5FVDsKKyAgICAgICAgbmV0dHlwZSA9IE5FVF9U Q1BCOworICAgICAgICBtZG10eXAgPSAtbmV0dHlwZTsKKyAgICAgICAgbG9jYWwgPSAtMTsKKyAg ICAgICAgY2tzdHJuY3B5KHVpZGJ1ZixnX3VybC51c3IsVUlEQlVGTEVOKTsKKyAgICAgICAgaWYg KGdfdXJsLnBzdykgeworICAgICAgICAgICAgY2tzdHJuY3B5KHB3YnVmLGdfdXJsLnBzdyxQV0JV RkwpOworICAgICAgICAgICAgcHdmbGcgPSAxOworI2lmZGVmIE9TMgorICAgICAgICAgICAgcHdj cnlwdCA9IDA7CisjZW5kaWYgLyogT1MyICovCisgICAgICAgIH0KKyAgICAgICAgY2ttYWttc2co dHRuYW1lLAorICAgICAgICAgICAgICAgICBUVE5BTUxFTiwKKyAgICAgICAgICAgICAgICAgZ191 cmwuaG9zLAorICAgICAgICAgICAgICAgICAiOiIsCisgICAgICAgICAgICAgICAgIGdfdXJsLnBv ciA/IGdfdXJsLnBvciA6IHBvcnQsCisgICAgICAgICAgICAgICAgIE5VTEwKKyAgICAgICAgICAg ICAgICAgKTsKKyAgICAgICAgcmMgPSB0dG9wZW4odHRuYW1lLCZsb2NhbCxtZG10eXAsMCk7Cisg ICAgICAgIGlmIChyYyA+IC0xKSB7CisgICAgICAgICAgICBuZXR3b3JrID0gMTsKKyAgICAgICAg ICAgIGV4aXRvbmNsb3NlID0gMTsKKyNpZmRlZiBDS0xPR0RJQUwKKyAgICAgICAgICAgIGRvbG9n bmV0KCk7CisjZW5kaWYgLyogQ0tMT0dESUFMICovCisgICAgICAgIH0gZWxzZSB7CisgICAgICAg ICAgICBwcmludGYoIj9Db25uZWN0aW9uIGZhaWxlZDogJXNcbiIsZ191cmwuc2F2KTsKKyAgICAg ICAgICAgIGRvZXhpdChCQURfRVhJVCwxKTsKKyAgICAgICAgfQorICAgICAgICAvKiBBbHNvIG5l ZWQgdG8gY2hlY2sgaGVyZSBmb3Igc2VjdXJlIGF1dGhlbnRpY2F0aW9uIGFscmVhZHkgZG9uZSAq LworCisjaWZkZWYgTk9TUEwKKyAgICAgICAgY2ZsZyA9IDE7CisjZWxzZQorCXsKKyAgICAgICAg ICAgIGNoYXIgKiBzY3JpcHQgPSBOVUxMOworICAgICAgICAgICAgaWYgKCEoc2NyaXB0ID0gKGNo YXIgKiltYWxsb2MoU0NSSVBUTEVOKSkpCisgICAgICAgICAgICAgIGZhdGFsKCJkb3VybDogb3V0 IG9mIG1lbW9yeSIpOworICAgICAgICAgICAgaWYgKCFnX3VybC5wdGgpIHsgICAgICAgICAgIC8q IFdyaXRlIHRoZSBhcHByb3ByaWF0ZSBzY3JpcHQgKi8KKwkJY2ZsZyA9IDE7CisgICAgICAgICAg ICAgICAgY2ttYWt4bXNnKHNjcmlwdCxTQ1JJUFRMRU4sCisJCQkgICJpZiBub3QgZXEge1xcdihh dXRoc3RhdGUpfSB7dXNlcn0gIiwKKwkJCSAgImlmIG5vdCBlcSB7XFx2KGF1dGhzdGF0ZSl9IHt2 YWxpZH0geyAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAicmVtb3RlIGxvZ2luICIsIC8q IE5vIHBhdGggKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgZ191cmwudXNyLCAgICAgICAv KiBKdXN0IGxvZyBpbiBhbmQgQ09OTkVDVCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAi ICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGdfdXJsLnBzdywKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgIiwgaWYgZmFpbCBleGl0IDEge0lLU0QgbG9naW4gZmFpbGVkfSB9IiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgIiwgY29ubmVjdCIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgIE5VTEwsTlVMTCxOVUxMLE5VTEwpOworCQkvKiBwcmludGYoIkNMQ01EUyAxOiAlc1xu IixzY3JpcHQpOyAqLworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvKiBk b2VzIHRoZSBwYXRoIHNwZWNpZnkgYSBmaWxlIG9yIGEgZGlyZWN0b3J5PyAqLworICAgICAgICAg ICAgICAgIGludCBsZW4gPSBzdHJsZW4oZ191cmwucHRoKTsKKyAgICAgICAgICAgICAgICBpZiAo SVNESVJTRVAoZ191cmwucHRoW2xlbi0xXSkpIHsKKwkJICAgIGNrbWFreG1zZyhzY3JpcHQsU0NS SVBUTEVOLCAvKiBEaXJlY3RvcnkgbmFtZSBnaXZlbiAqLworCQkJICAgICAgImlmIG5vdCBlcSB7 XFx2KGF1dGhzdGF0ZSl9IHt1c2VyfSBcCitpZiBub3QgZXEge1xcdihhdXRoc3RhdGUpfSB7dmFs aWR9IHsgcmVtb3RlIGxvZ2luICIsCisJCQkgICAgICBnX3VybC51c3IsCisJCQkgICAgICAiICIs CisJCQkgICAgICBnX3VybC5wc3csCisJCQkgICAgICAiLCBpZiBmYWlsIGV4aXQgMSB7SUtTRCBs b2dpbiBmYWlsZWR9IH0iLAorCQkJICAgICAgIiwgc2V0IG1hY3JvIGVycm9yIG9uIiwKKwkJCSAg ICAgICIsIHNldCB4ZmVyIGRpc3BsIGJyaWVmIiwKKwkJCSAgICAgICIsIHNldCB4ZmVyIGJlbGwg b2ZmIiwKKwkJCSAgICAgICIsIHJlbW90ZSBjZCAiLAorCQkJICAgICAgZ191cmwucHRoLAorCQkJ ICAgICAgIiwgbGluZW91dCBkaXJlY3RvcnkiLAorCQkJICAgICAgIiwgY29ubmVjdCIKKwkJCSAg ICAgICk7CisJCSAgICAvKiBwcmludGYoIkNMQ01EUyAyOiAlc1xuIixzY3JpcHQpOyAqLworCQl9 IGVsc2UgeworCQkgICAgY2ttYWt4bXNnKHNjcmlwdCxTQ1JJUFRMRU4sIC8qIFBhdGggZ2l2ZW4s IHRyeSB0byBHRVQgKi8KKwkJCSAgICAgICJpZiBub3QgZXEge1xcdihhdXRoc3RhdGUpfSB7dXNl cn0gXAoraWYgbm90IGVxIHtcXHYoYXV0aHN0YXRlKX0ge3ZhbGlkfSB7IHJlbW90ZSBsb2dpbiAi LAorCQkJICAgICAgZ191cmwudXNyLAorCQkJICAgICAgIiAiLAorCQkJICAgICAgZ191cmwucHN3 LAorCQkJICAgICAgIiwgaWYgZmFpbCBleGl0IDEge0lLU0QgbG9naW4gZmFpbGVkfSB9IiwKKwkJ CSAgICAgICIsIHNldCB4ZmVyIGRpc3BsIGJyaWVmIiwKKwkJCSAgICAgICIsIHNldCB4ZmVyIGJl bGwgb2ZmIiwKKwkJCSAgICAgICIsIGdldCAiLAorCQkJICAgICAgZ191cmwucHRoLAorCQkJICAg ICAgIiwgLnJjIDo9IFxcdihzdGF0dXMpIiwKKwkJCSAgICAgICIsIGlmIG9wZW4gY29ubmVjdGlv biBieWUiLAorCQkJICAgICAgIiwgZXhpdCBcXG0ocmMpIgorCQkJICAgICAgKTsKKwkJICAgIC8q IHByaW50ZigiQ0xDTURTIDI6ICVzXG4iLHNjcmlwdCk7ICovCisJCX0KKyAgICAgICAgICAgIH0K KyAgICAgICAgICAgIGNsY21kcyA9IHNjcmlwdDsJCS8qIE1ha2UgdGhpcyBvdXIgLUMgY21kbGlu ZSBtYWNybyAqLworCSAgICAvKiBwcmludGYoIkhBVkVVUkw9JWRcbiIsaGF2ZXVybCk7ICovCisg ICAgICAgIH0KKyNlbmRpZiAvKiBOT1NQTCAqLworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChj a3N0cmNtcChnX3VybC5zdmMsInRlbG5ldCIsLTEsMCkgJiYKKyNpZmRlZiBTU0hCVUlMVElOCisg ICAgICAgICAgICBja3N0cmNtcChnX3VybC5zdmMsInNzaCIsLTEsMCkgJiYKKyNlbmRpZiAvKiBT U0hCVUlMVElOICovCisgICAgICAgICAgICBja3N0cmNtcChnX3VybC5zdmMsImZ0cCIsLTEsMCkp IHsKKyAgICAgICAgICAgIHByaW50ZigiP1NvcnJ5LCAlcyBVUkxzIG5vdCBzdXBwb3J0ZWRcbiIs CisgICAgICAgICAgICAgICAgICAgZ191cmwuc3ZjID8gZ191cmwuc3ZjIDogIiIpOworICAgICAg ICAgICAgZG9leGl0KEJBRF9FWElULDEpOworICAgICAgICB9CisgICAgfQorfQorI2VuZGlmIC8q IE5PQ01ETCAqLworI2VuZGlmIC8qIE5FVENPTk4gKi8KKyNlbmRpZiAvKiBOT1VSTCAqLworCisv KgorICBtYWluKCkuLi4KKworICBJZiB5b3UgZ2V0IGNvbXBsYWludHMgYWJvdXQgIm1haW46IHJl dHVybiB0eXBlIGlzIG5vdCBibGFoIiwKKyAgZGVmaW5lIE1BSU5UWVBFIG9uIHRoZSBDQyBjb21t YW5kIGxpbmUsIGUuZy4gIkNGTEFHUz0tRE1BSU5UWVBFPWJsYWgiCisgICh3aGVyZSAiYmxhaCIg aXMgaW50LCBsb25nLCBvciB3aGF0ZXZlcikuCisKKyAgSWYgdGhlIGNvbXBsYWludCBpcyAiQXR0 ZW1wdCB0byByZXR1cm4gYSB2YWx1ZSBmcm9tIGEgZnVuY3Rpb24gb2YgdHlwZSB2b2lkIgorICB0 aGVuIGFkZCAtRE1BSU5JU1ZPSUQuCisqLworI2lmbmRlZiBNQUlOVFlQRQorI2lmbmRlZiBNQUlO SVNWT0lECisjZGVmaW5lIE1BSU5UWVBFIGludAorI2VuZGlmIC8qIE1BSU5JU1ZPSUQgKi8KKyNl bmRpZiAvKiBNQUlOVFlQRSAqLworCisjaWZkZWYgTUFJTklTVk9JRAorI2lmbmRlZiBNQUlOVFlQ RQorI2RlZmluZSBNQUlOVFlQRSB2b2lkCisjZW5kaWYgLyogTUFJTlRZUEUgKi8KKyNlbmRpZiAv KiBNQUlOSVNWT0lEICovCisKKyNpZmRlZiBhZWdpcworLyogT24gdGhlIEFwb2xsbywgaW50ZXJj ZXB0IG1haW4gdG8gaW5zZXJ0IGEgY2xlYW51cCBoYW5kbGVyICovCitpbnQKK2NrY21haShhcmdj LGFyZ3YpIGludCBhcmdjOyBjaGFyICoqYXJndjsKKyNlbHNlCisjaWZkZWYgTUFDICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogTWFjaW50b3NoICovCitpbnQKK21haW4gKHZvaWQpCisj ZWxzZQorI2lmZGVmIF9fR05VQ19fICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEdDQyBjb21w aWxlciAqLworaW50CittYWluKGFyZ2MsYXJndikgaW50IGFyZ2M7IGNoYXIgKiphcmd2OworI2Vs c2UKKyNpZmRlZiBfX0RFQ0MgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBERUMgQWxwaGEg d2l0aCBERUMgQyBjb21waWxlciAqLworI2lmZGVmIF9fQUxQSEEKK2ludAorbWFpbihhcmdjLGFy Z3YpIGludCBhcmdjOyBjaGFyICoqYXJndjsKKyNlbHNlICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBERUMgQyBjb21waWxlciwgbm90IEFscGhhICovCisjZGVmaW5lIE1BSU5J U1ZPSUQKK1ZPSUQKK21haW4oYXJnYyxhcmd2KSBpbnQgYXJnYzsgY2hhciAqKmFyZ3Y7CisjZW5k aWYgIC8qIF9fQUxQSEEgKi8KKyNlbHNlCisjaWZkZWYgU1RSQVRVUyAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogU3RyYXR1cyBWT1MgKi8KK2ludAorbWFpbihhcmdjLGFyZ3YpIGludCBhcmdj OyBjaGFyICoqYXJndjsKKyNlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBLLTk1ICovCisjaWZkZWYgT1MyCisjaWZkZWYgS1VJCisjZGVmaW5lIE1BSU5JU1ZPSUQKK3Zv aWQKK01haW4oIGludCBhcmdjLCBjaGFyICoqIGFyZ3YgKQorI2Vsc2UgLyogS1VJICovCisjZGVm aW5lIE1BSU5JU1ZPSUQKK1ZPSUQKK21haW4oYXJnYyxhcmd2KSBpbnQgYXJnYzsgY2hhciAqKmFy Z3Y7CisjZW5kaWYgLyogS1VJICovCisjZWxzZSAgLyogTm90IEs5NSAqLworTUFJTlRZUEUgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFsbCBvdGhlcnMuLi4gKi8KK21haW4oYXJn Yyxhcmd2KSBpbnQgYXJnYzsgY2hhciAqKmFyZ3Y7CisjZW5kaWYgLyogT1MyICovCisjZW5kaWYg LyogU1RSQVRVUyAqLworI2VuZGlmIC8qIF9fREVDQyAqLworI2VuZGlmIC8qIF9fR05VQ19fICov CisjZW5kaWYgLyogTUFDICovCisjZW5kaWYgLyogYWVnaXMgKi8KKworLyogbWFpbiAqLyB7CisK KyAgICBjaGFyICpwOworCisjaWZuZGVmIE5PU0VUS0VZCisgICAgaW50IGk7CisjZW5kaWYgLyog Tk9TRVRLRVkgKi8KKworI2lmZGVmIGRhdGFnZW5lcmFsCisgICAgc2hvcnQgKnBmaGEgPSAwMTYw MDAwMDAwMzY7ICAgICAgICAgLyogR2V0IGFyb3VuZCBMQU5HX1JUIHByb2JsZW0gKi8KKyAgICAq cGZoYSA9IChzaG9ydCkgMDsgICAgICAgICAgICAgICAgICAvKiBObyB1c2VyIHByb3RlY3Rpb24g ZmF1bHQgaGFuZGxlciAqLworI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCisKKyAgICBpbnQgdW5i dWYgPSAwOwkJCS8qIG5vbnplcm8gZm9yIHVuYnVmZmVyZWQgc3Rkb3V0ICovCisKKy8qIHNldGJ1 ZiBoYXMgdG8gYmUgY2FsbGVkIG9uIHRoZSBmaWxlIGRlc2NyaXB0b3IgYmVmb3JlIGl0IGlzIHVz ZWQgKi8KKworI2lmZGVmIFVOSVgKKyNpZmRlZiBOT05PU0VUQlVGCQkJLyogVW5idWZmZXJlZCBj b25zb2xlIGkvbyAqLworICAgIHVuYnVmKys7CQkJCS8qIGFzIGEgY29tcGlsZS10aW1lIG9wdGlv biAqLworI2VuZGlmCS8qIE5PTk9TRVRCVUYgKi8KKyAgICBpZiAoIXVuYnVmKSB7CQkJLyogT3Ig YXMgYSBjb21tYW5kLWxpbmUgc2VsZWN0aW9uICovCisJaW50IGksIG47CQkJLyogV2UgaGF2ZSB0 byBwcmUtcHJlLXNjYW4gZm9yICovCisJY2hhciAqIHM7CQkJLyogdGhpcyBvbmUuICovCisJZm9y IChpID0gMTsgaSA8IGFyZ2M7IGkrKykgeworCSAgICBzID0gYXJndltpXTsKKwkgICAgaWYgKCFz KSBuID0gMDsgZWxzZSBuID0gKGludClzdHJsZW4ocyk7CisJICAgIGlmIChuID4gNCkgeworCQlp ZiAoIWNrc3RyY21wKCItLXVuYnVmZmVyZWQiLHMsbiwwKSkgeworCQkgICAgdW5idWYrKzsKKwkJ ICAgIGJyZWFrOworCQl9CisJICAgIH0KKwl9CisgICAgfQorICAgIGlmICh1bmJ1ZikKKyAgICAg IHNldGJ1ZihzdGRvdXQsTlVMTCk7CisjZW5kaWYJLyogVU5JWCAqLworCisvKiBEbyBzb21lIGlu aXRpYWxpemF0aW9uICovCisKKyNpZmRlZiBWTVMKKyNpZmRlZiBfX0RFQ0MKKyAgICAvKiBHZXQg c29tZSBSTVMgZGVmYXVsdCBzZXR0aW5ncy4gKi8KKyAgICBnZXRfcm1zX2RlZmF1bHRzKCk7Cisj ZW5kaWYgLyogZGVmIF9fREVDQyAqLworI2VuZGlmIC8qIGRlZiBWTVMgKi8KKworI2lmbmRlZiBN QUMKKyAgICB4YXJnYyA9IHhhcmdzID0gYXJnYzsgICAgICAgICAgICAgICAvKiBNYWtlIGdsb2Jh bCBjb3BpZXMgb2YgYXJnYyAqLworICAgIHhhcmd2ID0gYXJndjsgICAgICAgICAgICAgICAgICAg ICAgIC8qIC4uLmFuZCBhcmd2LiAqLworICAgIHhhcmcwID0gYXJndlswXTsKKyNpZmRlZiBOVAor ICAgIHNldE9TVmVyKCk7CisjZW5kaWYgLyogTlQgKi8KKyAgICB6c3RyaXAoYXJndlswXSwmcCk7 ICAgICAgICAgICAgICAgICAvKiBHZXQgbmFtZSB3ZSB3ZXJlIGludm9rZWQgd2l0aCAqLworICAg IG1ha2VzdHIoJm15bmFtZSxwKTsKKyAgICBpZiAoIWNrc3RyY21wKG15bmFtZSwidGVsbmV0Iiwt MSwwKSkgICAgICAgaG93Y2FsbGVkID0gSV9BTV9URUxORVQ7CisjaWZkZWYgQ0tfS0VSQkVST1MK KyAgICBlbHNlIGlmICghY2tzdHJjbXAobXluYW1lLCJrdGVsbmV0IiwtMSwwKSkgaG93Y2FsbGVk ID0gSV9BTV9URUxORVQ7CisjZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KKyAgICBlbHNlIGlmICgh Y2tzdHJjbXAobXluYW1lLCJybG9naW4iLC0xLDApKSAgaG93Y2FsbGVkID0gSV9BTV9STE9HSU47 CisgICAgZWxzZSBpZiAoIWNrc3RyY21wKG15bmFtZSwiaWtzZCIsLTEsMCkpICAgIGhvd2NhbGxl ZCA9IElfQU1fSUtTRDsKKyNpZmRlZiBORVdGVFAKKyAgICBlbHNlIGlmICghY2tzdHJjbXAobXlu YW1lLCJmdHAiLC0xLDApKSAgICAgaG93Y2FsbGVkID0gSV9BTV9GVFA7CisjZW5kaWYgLyogTkVX RlRQICovCisjaWZuZGVmIE5PSFRUUAorICAgIGVsc2UgaWYgKCFja3N0cmNtcChteW5hbWUsImh0 dHAiLC0xLDApKSAgICBob3djYWxsZWQgPSBJX0FNX0hUVFA7CisjZW5kaWYgLyogTk9IVFRQICov CisjaWZkZWYgT1MyCisgICAgZWxzZSBpZiAoIWNrc3RyY21wKG15bmFtZSwidGVsbmV0LmV4ZSIs LTEsMCkpICBob3djYWxsZWQgPSBJX0FNX1RFTE5FVDsKKyNpZmRlZiBTU0hCVUlMVElOCisgICAg ZWxzZSBpZiAoIWNrc3RyY21wKG15bmFtZSwic3NoIiwtMSwwKSkgIGhvd2NhbGxlZCA9IElfQU1f U1NIOworICAgIGVsc2UgaWYgKCFja3N0cmNtcChteW5hbWUsInNzaC5leGUiLC0xLDApKSAgaG93 Y2FsbGVkID0gSV9BTV9TU0g7CisjZW5kaWYgLyogU1NIQlVJTFRJTiAqLworI2lmZGVmIENLX0tF UkJFUk9TCisgICAgZWxzZSBpZiAoIWNrc3RyY21wKG15bmFtZSwia3RlbG5ldC5leGUiLC0xLDAp KSBob3djYWxsZWQgPSBJX0FNX1RFTE5FVDsKKyNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLworICAg IGVsc2UgaWYgKCFja3N0cmNtcChteW5hbWUsInJsb2dpbi5leGUiLC0xLDApKSAgaG93Y2FsbGVk ID0gSV9BTV9STE9HSU47CisjaWZkZWYgTlQKKyAgICBlbHNlIGlmICghY2tzdHJjbXAobXluYW1l LCJpa3NkbnQiLC0xLDApKSAgICBob3djYWxsZWQgPSBJX0FNX0lLU0Q7CisgICAgZWxzZSBpZiAo IWNrc3RyY21wKG15bmFtZSwiaWtzZG50LmV4ZSIsLTEsMCkpICAgIGhvd2NhbGxlZCA9IElfQU1f SUtTRDsKKyNlbmRpZiAvKiBOVCAqLworI2lmZGVmIE5FV0ZUUAorICAgIGVsc2UgaWYgKCFja3N0 cmNtcChteW5hbWUsImZ0cC5leGUiLC0xLDApKSAgICAgaG93Y2FsbGVkID0gSV9BTV9GVFA7Cisj ZW5kaWYgLyogTkVXRlRQICovCisjaWZuZGVmIE5PSFRUUAorICAgIGVsc2UgaWYgKCFja3N0cmNt cChteW5hbWUsImh0dHAuZXhlIiwtMSwwKSkgICAgaG93Y2FsbGVkID0gSV9BTV9IVFRQOworI2Vu ZGlmIC8qIE5PSFRUUCAqLworI2VuZGlmIC8qIE9TMiAqLworICAgIGVsc2UgaWYgKCFja3N0cmNt cChteW5hbWUsImtlcm1pdC1zc2hzdWIiLC0xLDApKSBob3djYWxsZWQgPSBJX0FNX1NTSFNVQjsK KworI2lmbmRlZiBOT0lDUAorICAgIGNtZGluaSgpOyAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIE11c3QgY29tZSBiZWZvcmUgcHJlc2NhbiAqLworICAgIGRlYnVnKEYxMDAsIm1haW4gY21k aW5pKCkgZG9uZSIsIiIsMCk7CisjZW5kaWYgLyogTk9JQ1AgKi8KKyAgICBwcmVzY2FuKDApOyAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBQcmUtQ2hlY2sgZm9yIGRlYnVnZ2luZywgZXRjICov CisjZW5kaWYgLyogTUFDICovCisgICAgZGVidWcoRjEwMSwiTUFJTiBmZW9sIiwiIixmZW9sKTsK KyAgICBtYWtldmVyKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQdXQgdG9nZXRoZXIg dmVyc2lvbiBzdHJpbmdzICovCisjaWZuZGVmIE5PU0VUS0VZICAgICAgICAgICAgICAgICAgICAg ICAgLyogQWxsb2NhdGUgJiBpbml0aWFsaXplIHRoZSBrZXltYXAgKi8KKyAgICAvKiBUaGlzIGNv ZGUgaGFzIGJlZW4gbW92ZWQgdG8gYmVmb3JlIHN5c2luaXQoKSBmb3IgSzk1RyAqLworICAgIGlm ICghKGtleW1hcCA9IChLRVkgKikgbWFsbG9jKHNpemVvZihLRVkpKktNU0laRSkpKQorICAgICAg ZmF0YWwoIm1haW46IG5vIG1lbW9yeSBmb3Iga2V5bWFwIik7CisgICAgaWYgKCEobWFjcm90YWIg PSAoTUFDUk8gKikgbWFsbG9jKHNpemVvZihNQUNSTykqS01TSVpFKSkpCisgICAgICBmYXRhbCgi bWFpbjogbm8gbWVtb3J5IGZvciBtYWNyb3RhYiIpOworICAgIGZvciAoaSA9IDA7IGkgPCBLTVNJ WkU7IGkrKykgeworICAgICAgIGtleW1hcFtpXSA9IChLRVkpIGk7CisgICAgICAgbWFjcm90YWJb aV0gPSBOVUxMOworICAgIH0KKyNlbmRpZiAvKiBOT1NFVEtFWSAqLworCisgICAgc2hvcnRieXRl cy54X3Nob3J0ID0gMHhBQkNEOyAgICAgICAgLyogR2V0IEVuZGlhbm5lc3MgKi8KKyAgICBpZiAo c2hvcnRieXRlcy54X2NoYXJbMF0gPT0gMHhDRCkgeyAvKiAwID0gQmlnIEVuZGlhbiAqLworICAg ICAgICBieXRlb3JkZXIgPSAxOyAgICAgICAgICAgICAgICAgIC8qIDEgPSBMaXR0bGUgRW5kaWFu ICovCisgICAgICAgIGJpZ2VuZGlhbiA9IDA7ICAgICAgICAgICAgICAgICAgLyogKGZvciBjbGFy aXR5IGluIHByb2dyYW1taW5nKSAqLworICAgIH0gZWxzZSB7CisgICAgICAgIGJ5dGVvcmRlciA9 IDA7ICAgICAgICAgICAgICAgICAgLyogQmlnIEVuZGlhbiAqLworICAgICAgICBiaWdlbmRpYW4g PSAxOworICAgIH0KKyAgICBpZiAoc2l6ZW9mKENLX09GRl9UKSA9PSA4KQkJLyogTGFyZ2UgZmls ZXMgYW5kIGludHM/ICovCisgICAgICBoYXZlbGZzID0gMTsKKworICAgIGlmIChzeXNpbml0KCkg PCAwKSAgICAgICAgICAgICAgICAgIC8qIFN5c3RlbS1kZXBlbmRlbnQgaW5pdGlhbGl6YXRpb24u ICovCisgICAgICBmYXRhbCgiQ2FuJ3QgaW5pdGlhbGl6ZSEiKTsKKyAgICBlbHNlCisgICAgICBp bml0ZmxnID0gMTsgICAgICAgICAgICAgICAgICAgICAgLyogUmVtZW1iZXIgd2UgZGlkLiAqLwor ICAgIGRlYnVnKEYxMTEsImNrY21haSBteW5hbWUiLG15bmFtZSxob3djYWxsZWQpOworCisjaWZk ZWYgVU5JWAorICAgIGdldGV4ZWRpcigpOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvbXB1 dGUgZXhlZGlyIHZhcmlhYmxlICovCisjZW5kaWYgLyogVU5JWCAqLworCisjaWZkZWYgQ0tTWVNM T0cKKyNpZmRlZiBTWVNMT0dMRVZFTAorLyoKKyAgSWYgYnVpbHQgd2l0aCAtRFNZU0xPR0xFVkVM IG9uIGNjIGNvbW1hbmQgbGluZSwgdGhpcyBtZWFucyB3ZSBhbHdheXMKKyAgZG8gc3lzbG9nZ2lu ZyBhdCB0aGUgaW5kaWNhdGVkIGxldmVsLgorKi8KKyAgICB6c3lzbG9nKCk7ICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBPcGVuIHN5c2xvZyAqLworI2Vsc2UgLyogU1lTTE9HTEVWRUwgKi8K KyNpZmRlZiBJS1NECisgICAgaWYgKGluc2VydmVyKQorICAgICAgenN5c2xvZygpOyAgICAgICAg ICAgICAgICAgICAgICAgIC8qIE9wZW4gc3lzbG9nICovCisjZW5kaWYgLyogSUtTRCAqLworI2Vu ZGlmIC8qIFNZU0xPR0xFVkVMICovCisjZW5kaWYgLyogQ0tTWVNMT0cgKi8KKworI2lmZGVmIENL X0tFUkJFUk9TCisgICAgaW5pX2tlcmIoKTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogSW5p dGlhbGl6ZSBLZXJiZXJvcyBkYXRhICovCisjZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KKyNpZmRl ZiBDS19TU0wKKyAgICBzc2xfb25jZV9pbml0KCk7CisjZW5kaWYgLyogQ0tfU1NMICovCisjaWZk ZWYgVE5DT0RFCisgICAgdG5fc2V0X21vZGVzKCk7ICAgICAgICAgICAgICAgICAgICAgLyogSW5p dCBUZWxuZXQgT3B0aW9uIHRhYmxlcyAqLworI2VuZGlmIC8qIFROQ09ERSAqLworCisjaWZkZWYg Q0tfVFRHV1NJWiAgICAgICAgICAgICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSBzY3JlZW4gZGlt ZW5zaW9ucyAqLworI2lmZGVmIE9TMgorICAgIHR0Z2N3c3ooKTsKKyNlbHNlIC8qIE9TMiAqLwor ICAgIGlmICh0dGd3c2l6KCkgPiAwKSB7CisgICAgICAgIGlmICh0dF9yb3dzID4gMCAmJiB0dF9j b2xzID4gMCkgeworICAgICAgICAgICAgY21kX3Jvd3MgPSB0dF9yb3dzOworICAgICAgICAgICAg Y21kX2NvbHMgPSB0dF9jb2xzOworICAgICAgICB9CisgICAgfQorI2VuZGlmIC8qIE9TMiAqLwor I2VuZGlmIC8qIENLX1RUR1dTSVogKi8KKworI2lmbmRlZiBPUzIKKyNpZmRlZiBUQ1BTT0NLRVQK KyNpZmRlZiBDS19TT0NLUworICAgIFNPQ0tTaW5pdChhcmd2WzBdKTsgICAgICAgICAgICAgICAg IC8qIEludGVybmV0IHJlbGF5IHBhY2thZ2UuLi4gKi8KKyNlbmRpZiAvKiBDS19TT0NLUyAqLwor I2VuZGlmIC8qIFRDUFNPQ0tFVCAqLworI2VuZGlmIC8qIE9TMiAqLworCisgICAgaW5pdGZsb3co KTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSBmbG93LWNvbnRyb2wgdGFi bGUgKi8KKworI2lmbmRlZiBOT0lDUAorI2lmZGVmIENLRkxPQVQKKyAgICBpbml0ZmxvYXQoKTsg ICAgICAgICAgICAgICAgICAgICAgICAvKiBEZWR1Y2UgZmxvYXRpbmctcG9pbnQgcHJlY2lzaW9u ICovCisjZW5kaWYgLyogQ0tGTE9BVCAqLworI2VuZGlmIC8qIE5PSUNQICovCisKKyNpZm5kZWYg Tk9YRkVSCisgICAgaW5pdHhsaXN0KCk7CQkJLyogSW5pdCBleGNlcHRpb24gbGlzdHMgKi8KKwor I2lmZGVmIENLX1hZWiAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEluaXRpYWxpemUgcHJv dG9jb2xzLi4uICAqLworCisjaWZkZWYgWFlaX0lOVEVSTkFMIC8qIFhZWk1PREVNIGFyZSBpbnRl cm5hbCAuLi4gKi8KKworI2lmZGVmIENPTU1FTlQKKyAgICAvKiBDYW4ndCBkbyB0aGlzIGZvciBY TU9ERU0gYmVjYXVzZSBpZiBmaWxlbmFtZSBjb250YWlucyBhICJDIiBldGMuLi4gKi8KKyAgICBp bml0cHJvdG8oUFJPVE9fWCwgInJ4ICVzIiwicnggJXMiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxM LCBOVUxMKTsKKyAgICBpbml0cHJvdG8oUFJPVE9fWEMsInJjICVzIiwicmMgJXMiLCBOVUxMLCBO VUxMLCBOVUxMLCBOVUxMLCBOVUxMKTsKKyNlbHNlIC8qIENPTU1FTlQgKi8KKyAgICBpbml0cHJv dG8oUFJPVE9fWCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCk7Cisg ICAgaW5pdHByb3RvKFBST1RPX1hDLE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEws IE5VTEwpOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICBpbml0cHJvdG8oUFJPVE9fWSwgInJi IiwicmIiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKTsKKyAgICBpbml0cHJvdG8oUFJP VE9fRywgInJiIiwicmIiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKTsKKyAgICBpbml0 cHJvdG8oUFJPVE9fWiwgInJ6IiwicnoiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKTsK KyAgIGluaXRwcm90byhQUk9UT19LLCJrZXJtaXQgLWlyIiwia2VybWl0IC1yIiwia2VybWl0IC14 IixOVUxMLE5VTEwsTlVMTCxOVUxMKTsKKyAgICAvKiBLZXJtaXQgTXVzdCBiZSBsYXN0ICovCisK KyNlbHNlIC8qIFhZWk1PREVNIGFyZSBleHRlcm5hbCBwcm90b2NvbHMgLi4uICovCisKKyAvKiAg ICAgICAgICAgICAgICAgIHMxICAgICAgczIgICAgIHMzICAgIHM0ICAgICAgczUgICAgICAgICBz NiAgICAgIHM3ICAgICAqLworIGluaXRwcm90byhQUk9UT19YLCAicnggJXMiLCJyeCAlcyIsTlVM TCwic3ggJXMiLCJzeCAtYSAlcyIsInJ4ICVzIiwgInJ4ICVzIik7CisgaW5pdHByb3RvKFBST1RP X1hDLCJyYyAlcyIsInJjICVzIixOVUxMLCJzeCAlcyIsInN4IC1hICVzIiwicmMgJXMiLCAicmMg JXMiKTsKKyBpbml0cHJvdG8oUFJPVE9fWSwgInJiIiwgICAicmIiLCAgIE5VTEwsInNiICVzIiwi c2IgLWEgJXMiLCJyYiIsICAgICJyYiIgICApOworIGluaXRwcm90byhQUk9UT19HLCAicmIiLCAg ICJyYiIsICAgTlVMTCwic2IgJXMiLCJzYiAtYSAlcyIsInJiIiwgICAgInJiIiAgICk7CisgaW5p dHByb3RvKFBST1RPX1osICJyeiIsICAgInJ6IiwgICBOVUxMLCJzeiAlcyIsInN6IC1hICVzIiwi cnoiLCAgICAicnoiICAgKTsKKyBpbml0cHJvdG8oUFJPVE9fSywgImtlcm1pdCAtaXIiLCJrZXJt aXQgLXIiLCJrZXJtaXQgLXgiLE5VTEwsTlVMTCxOVUxMLE5VTEwpOworIC8qIEtlcm1pdCBtdXN0 IGJlIGxhc3QgKi8KKworI2VuZGlmIC8qIFhZWl9JTlRFUk5BTCAqLworCisjZWxzZSAgLyogTm8g WFlaTU9ERU0gc3VwcG9ydCAqLworCisgICBpbml0cHJvdG8oUFJPVE9fSywia2VybWl0IC1pciIs Imtlcm1pdCAtciIsImtlcm1pdCAteCIsTlVMTCxOVUxMLE5VTEwsTlVMTCk7CisKKyNlbmRpZiAv KiBDS19YWVogKi8KKyNlbmRpZiAvKiBOT1hGRVIgKi8KKworICAgIGNvbm5vaSgpOyAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIENvbnNvbGUgaW50ZXJydXB0cyBvZmYgKi8KKworI2lmbmRl ZiBOT1hGRVIKKyNpZmRlZiBPUzIKKyAgICAvKiBJbml0aWFsaXplIEtlcm1pdCBhbmQgWm1vZGVt IEF1dG8tRG93bmxvYWQgU3RyaW5ncyAqLworICAgIGFkbF9rc3RyID0gc3RyZHVwKCJLRVJNSVQg UkVBRFkgVE8gU0VORC4uLiIpOworICAgIGFkbF96c3RyID0gc3RyZHVwKCJyelxyIik7CisjZW5k aWYgLyogT1MyICovCisKKyNpZmRlZiBQQVRURVJOUworICAgIGluaXRwYXQoKTsgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIEluaXRpYWxpemUgZmlsZW5hbWUgcGF0dGVybnMgKi8KKyNlbmRp ZiAvKiBQQVRURVJOUyAqLworI2VuZGlmIC8qIE5PWEZFUiAqLworCisjaWZuZGVmIE5PQ1NFVFMK KyAgICBpbml0Y3NldHMoKTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBJbml0aWFsaXplIGNo YXJhY3RlciBzZXRzICovCisjZW5kaWYgLyogTk9DU0VUUyAqLworCisjaWZuZGVmIE5PSUNQCisj aWZkZWYgREZDRE1TRworICAgIG1ha2VzdHIoJmNkbXNnc3RyLERGQ0RNU0cpOworICAgIG1ha2Vs aXN0KGNkbXNnc3RyLGNkbXNnZmlsZSw4KTsgICAgIC8qIEluaXRpYWxpemUgQ0QgbWVzc2FnZSBm aWxlbmFtZXMgKi8KKyNlbmRpZiAvKiBERkNETVNHICovCisjZW5kaWYgLyogTk9JQ1AgKi8KKwor ICAgIHNzdGF0ZSA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vIGRlZmF1bHQgc3Rh cnQgc3RhdGUuICovCisjaWZkZWYgRFlOQU1JQworICAgIGlmIChnZXRpb2JzKCkgPCAwKQorICAg ICAgZmF0YWwoIkNhbid0IGFsbG9jYXRlIGkvbyBidWZmZXJzISIpOworI2VuZGlmIC8qIERZTkFN SUMgKi8KKworI2lmbmRlZiBOT1NQTAorI2lmbmRlZiBOT1JBTkRPTQorICAgIHsKKyAgICAgICAg Y2hhciBzdGFja2RhdGFbMjU2XTsKKyAgICAgICAgdW5zaWduZWQgaW50IGMgPSAxMjM0LCBuOwor ICAgICAgICAvKiB0cnkgdG8gbWFrZSBhIHJhbmRvbSB1bnNpZ25lZCBpbnQgdG8gZmVlZCBzcmFu ZCgpICovCisjaWZuZGVmIFZNUworCS8qIHRpbWUuaCBhbmQgTXVsdGlOZXQgZG8gbm90IGdldCBh bG9uZyAqLworICAgICAgICBjID0gdGltZShOVUxMKTsKKyNlbmRpZiAvKiBWTVMgKi8KKyAgICAg ICAgYyAqPSBnZXRwaWQoKTsKKwkvKiBSZWZlcmVuY2VkIGJlZm9yZSBzZXQuLi4gREVMSUJFUkFU RUxZICovCisgICAgICAgIGZvciAobiA9IDA7IG4gPCBzaXplb2Yoc3RhY2tkYXRhKTsgbisrKSAv KiBJR05PUkUgV0FSTklORyAqLworCSAgYyArPSBzdGFja2RhdGFbbl07CQkvKiBERUxJQkVSQVRF TFkgVVNFRCBCRUZPUkUgU0VUICovCisgICAgICAgIHNyYW5kKCh1bnNpZ25lZCBpbnQpYyk7Cisg ICAgfQorI2VuZGlmIC8qIE5PUkFORE9NICovCisjZW5kaWYgLyogTk9TUEwgKi8KKworICAgIGNr aG9zdChteWhvc3QsTVlIT1NUTCk7ICAgICAgICAgICAgIC8qIE5hbWUgb2YgbG9jYWwgaG9zdCAq LworICAgIGRlYnVnKEYxMTAsIm1haW4gY2tob3N0IixteWhvc3QsMCk7CisjaWZkZWYgSUtTRAor ICAgIGlmICghaW5zZXJ2ZXIpIHsKKyNlbmRpZiAvKiBJS1NEICovCisgICAgICAgIGNrc3RybmNw eSh0dG5hbWUsZGZ0dHksVFROQU1MRU4pOyAvKiBTZXQgdXAgZGVmYXVsdCB0dHkgbmFtZS4gKi8K KyAgICAgICAgbG9jYWwgPSBub2xvY2FsID8gMCA6IGRmbG9jOyAgICAvKiBBbmQgd2hldGhlciBp dCdzIGxvY2FsIG9yIHJlbW90ZS4gKi8KKyAgICAgICAgcGFyaXR5ID0gZGZwcnR5OyAgICAgICAg ICAgICAgICAvKiBTZXQgaW5pdGlhbCBwYXJpdHksICovCisjaWZuZGVmIE5PWEZFUgorICAgICAg ICBteWluZGV4ID0gZ2V0c3lzaXgoY2tzeXNpZCk7ICAgIC8qIFN5c3RlbSBpbmRleCAqLworI2Vu ZGlmIC8qIE5PWEZFUiAqLworICAgICAgICBpZiAobG9jYWwpIGlmICh0dG9wZW4odHRuYW1lLCZs b2NhbCwwLDApIDwgMCkgeworI2lmbmRlZiBPUzIKKyAgICAgICAgICAgIGNvbm9sKCJDYW4ndCBv cGVuIGRldmljZTogIik7CisgICAgICAgICAgICBjb25vbGwodHRuYW1lKTsKKyNlbmRpZiAvKiBP UzIgKi8KKyAgICAgICAgICAgIGxvY2FsID0gMDsKKyAgICAgICAgICAgIGNrc3RybmNweSh0dG5h bWUsQ1RUTkFNLFRUTkFNTEVOKTsKKyAgICAgICAgfQorICAgICAgICBzZXRmbG93KCk7ICAgICAg ICAgICAgICAgICAgICAgIC8qIFNldCBhcHByb3ByaWF0ZSBmbG93IGNvbnRyb2wgKi8KKyAgICAg ICAgc3BlZWQgPSB0dGdzcGQoKTsgICAgICAgICAgICAgICAvKiBHZXQgdHJhbnNtaXNzaW9uIHNw ZWVkLiAqLworI2lmZGVmIElLU0QKKyAgICB9CisjZW5kaWYgLyogSUtTRCAqLworCisjaWZkZWYg QU5ZWDI1ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQWxsIFguMjUgaW1wbGVtZW50YXRp b25zICovCisjaWZuZGVmIElCTVgyNSAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXhjZXB0 IElCTSBoYXZlIFBBRCBzdXBwb3J0ICovCisgICAgaW5pdHBhZCgpOyAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogSW5pdGlhbGl6ZSBYLjI1IFBBRCAqLworI2VuZGlmIC8qIElCTVgyNSAqLwor I2VuZGlmIC8qIEFOWVgyNSAqLworCisjaWZuZGVmIE5PWEZFUgorICAgIGlmIChpbmlidWZzKFNC U0laLFJCU0laKSA8IDApICAgICAgIC8qIEFsbG9jYXRlIHBhY2tldCBidWZmZXJzICovCisgICAg ICBmYXRhbCgiQ2FuJ3QgYWxsb2NhdGUgcGFja2V0IGJ1ZmZlcnMhIik7CisjaWZuZGVmIE5PQ0tT UEVFRAorICAgIHNldHByZWZpeChwcmVmaXhpbmcpOyAgICAgICAgICAgICAgIC8qIFNldCB1cCBj b250cm9sIGNoYXIgcHJlZml4aW5nICovCisjZW5kaWYgLyogTk9DS1NQRUVEICovCisjZW5kaWYg LyogTk9YRkVSICovCisKKyNpZm5kZWYgTk9JQ1AKKyAgICBpZiAoc3N0ZWxuZXQKKyNpZmRlZiBJ S1NECisgICAgICAgIHx8IGluc2VydmVyCisjZW5kaWYgLyogSUtTRCAqLworICAgICAgICApIHsK KyAgICAgICAgaW50IG9uID0gMSwgeCA9IDA7CisgICAgICAgIGV4dGVybiBpbnQgY2t4ZWNoLCB0 dG5ldCwgdHRucHJvdG8sIGNtZG1zazsKKyNpZmRlZiBTT19TTkRCVUYKKyAgICAgICAgZXh0ZXJu IGludCB0Y3Bfc2VuZGJ1ZjsKKyNlbmRpZgorI2lmZGVmIFNPX1JDVkJVRgorICAgICAgICBleHRl cm4gaW50IHRjcF9yZWN2YnVmOworI2VuZGlmCisjaWZkZWYgU09fS0VFUEFMSVZFCisgICAgICAg IGV4dGVybiBpbnQgdGNwX2tlZXBhbGl2ZTsKKyNlbmRpZgorI2lmZGVmIFNPX0xJTkdFUgorICAg ICAgICBleHRlcm4gaW50IHRjcF9saW5nZXIsIHRjcF9saW5nZXJfdG1vOworI2VuZGlmIC8qIFNP X0xJTkdFUiAqLworI2lmZGVmIFNPX0RPTlRST1VURQorICAgICAgICBleHRlcm4gaW50IHRjcF9k b250cm91dGU7CisjZW5kaWYgLyogU09fRE9OVFJPVVRFICovCisjaWZkZWYgVENQX05PREVMQVkK KyAgICAgICAgZXh0ZXJuIGludCB0Y3Bfbm9kZWxheTsKKyNlbmRpZiAvKiBUQ1BfTk9ERUxBWSAq LworI2lmZGVmIElLU0QKKyAgICAgICAgZXh0ZXJuIGludCBpa2xvZ29wZW47CisjZW5kaWYgLyog SUtTRCAqLworICAgICAgICBleHRlcm4gaW50IHR0bWRtOworCisjaWZkZWYgVU5JWAorICAgICAg ICBpZiAoaXNhdHR5KDApKQorICAgICAgICAgIGZhdGFsKCJJbnRlcm5ldCBLZXJtaXQgU2Vydmlj ZSBjYW5ub3QgYmUgc3RhcnRlZCBhdCBhIHRlcm1pbmFsLiIpOworI2VuZGlmIC8qIFVOSVggKi8K KworICAgICAgICByZWxpYWJsZSA9IHhyZWxpYWJsZSA9IFNFVF9PTjsgIC8qIElLU0QgaGFzIHJl bGlhYmxlIGNvbm5lY3Rpb24gKi8KKyNpZm5kZWYgVk1TCisgICAgICAgIGZsb3cgPSAwOyAgICAg ICAgICAgICAgICAgICAgICAgLyogTm8gZmxvdyBjb250cm9sIG5lZWRlZCAqLworI2VuZGlmIC8q IFZNUyAqLworICAgICAgICBiZ3NldCA9IDA7ICAgICAgICAgICAgICAgICAgICAgIC8qIE5vdCBp biBiYWNrZ3JvdW5kICovCisgICAgICAgIG5vcHVzaCA9IDE7ICAgICAgICAgICAgICAgICAgICAg LyogTm8gZXh0ZXJuYWwgcHJvY2Vzc2VzICovCisgICAgICAgIHBhcml0eSA9IDA7ICAgICAgICAg ICAgICAgICAgICAgLyogOCBiaXRzIC4uLiAqLworICAgICAgICBjbWRtc2sgPSAweGZmOyAgICAg ICAgICAgICAgICAgIC8qIGFsbCB0aGUgd2F5ICovCisgICAgICAgIGNtYXNrID0gMHhmZjsKKwor I2lmZGVmIElLU0QKKyAgICAgICAgaWYgKGluc2VydmVyKSB7ICAgICAgICAgICAgICAgICAvKiBJ ZiBJS1NEICovCisgICAgICAgICAgICBkb2lrc2Rpbml0KCk7ICAgICAgICAgICAgICAgLyogRXhl Y3V0ZSBJS1NEIGNvbmZpZ3VyYXRpb24gZmlsZSAqLworICAgICAgICAgICAgd2hpbGUgKHRsZXZl bCA+IC0xKQorICAgICAgICAgICAgICBwYXJzZXIoMSk7ICAgICAgICAgICAgICAgIC8qIChJZ25v cmUgYW55IGZpbGUteGZlciBjb21tYW5kcykgKi8KKyAgICAgICAgICAgIGlrc2RjZiA9IDE7ICAg ICAgICAgICAgICAgICAvKiBJS1NEIGMuZi4gaGFzIGJlZW4gcHJvY2Vzc2VkICovCisgICAgICAg IH0KKyAgICAgICAgaWYgKCFpa2xvZ29wZW4pIChWT0lEKSBkb2lrbG9nKCk7IC8qIE9wZW4gS2Vy bWl0LXNwZWNpZmljIGxvZyAqLworI2VuZGlmIC8qIElLU0QgKi8KKworI2lmZGVmIFVOSVgKKyAg ICAgICAgc2V0YnVmKHN0ZG91dCxOVUxMKTsgICAgICAgICAgICAvKiBEb24ndCBidWZmZXIgdGhl IG91dHB1dCAqLworICAgICAgICBja3N0cm5jcHkodHRuYW1lLCIwIixUVE5BTUxFTik7IC8qIG5v dCAiL2Rldi90dHkiLi4uICovCisjZW5kaWYgLyogVU5JWCAqLworICAgICAgICBsb2NhbCA9IDA7 ICAgICAgICAgICAgICAgICAgICAgIC8qIFdlIGFyZSBpbiByZW1vdGUgbW9kZSAqLworICAgICAg ICBja3hlY2ggPSAxOyAgICAgICAgICAgICAgICAgICAgIC8qIFdlIHdpbGwgZWNobyAqLworI2lm ZGVmIE9TMgorICAgICAgICBuZXR0eXBlID0gTkVUX1RDUEI7ICAgICAgICAgICAgIC8qIFNvIHR0 b3BlbigpIHRyZWF0cyB0aGUgY29ubmVjdGlvbiAqLworICAgICAgICBtZG10eXAgPSAtbmV0dHlw ZTsgICAgICAgICAgICAgIC8qIGFzIGEgbmV0d29yayAqLworI2VuZGlmIC8qIE9TMiAqLworICAg ICAgICBkZWJ1ZyhGMTAwLCJtYWluIGFib3V0IHRvIGNhbGwgdHRvcGVuKCkgaW5zZXJ2ZXIiLCIi LDApOworICAgICAgICBpZiAodHRvcGVuKHR0bmFtZSwmbG9jYWwsbWRtdHlwLDApIDwgMCkgeyAv KiBPcGVuIGNvbW0gY2hhbm5lbCAqLworICAgICAgICAgICAgZmF0YWwoImNhbid0IGluaXRpYWxp emUgaS9vIik7CisgICAgICAgIH0KKyNpZmRlZiBPUzIKKyAgICAgICAgbG9jYWwgPSAwOworICAg ICAgICBuZXR3b3JrID0gMTsgICAgICAgICAgICAgICAgICAgIC8qIERvZXMgdXNlIG5ldHdvcmtp bmcgY29kZSAqLworI2Vsc2UgIC8qIE9TMiAqLworICAgICAgICBuZXR3b3JrID0gMDsgICAgICAg ICAgICAgICAgICAgIC8qIERvZXMgbm90IHVzZSBuZXR3b3JraW5nIGNvZGUgKi8KKyNlbmRpZiAv KiBPUzIgKi8KKyAgICAgICAgdHRtZG0gPSAtMTsgICAgICAgICAgICAgICAgICAgICAvKiBEb2Vz IG5vdCB1c2UgYSBtb2RlbSAqLworICAgICAgICBzc3RlbG5ldCA9IDE7ICAgICAgICAgICAgICAg ICAgIC8qIERvIHNlcnZlci1zaWRlIFRlbG5ldCBuZWdvdGF0aW9ucyAqLworICAgICAgICBkZWJ1 ZyhGMTExLCJNQUlOIiwic3N0ZWxuZXQiLHNzdGVsbmV0KTsKKyAgICAgICAgdHRuZXQgPSBORVRf VENQQjsgICAgICAgICAgICAgICAvKiBOZXR3b3JrIHR5cGUgaXMgVENQIHNvY2tldHMgKi8KKyAg ICAgICAgdHRucHJvdG8gPSBOUF9URUxORVQ7ICAgICAgICAgICAvKiBOZXR3b3JkIHByb3RvY29s IGlzIFRlbG5ldCAqLworI2lmZGVmIElLU0RCCisgICAgICAgIGRiaW5pdCgpOyAgICAgICAgICAg ICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSBkYXRhYmFzZSByZWNvcmQgKi8KKyNlbmRpZiAvKiBJ S1NEQiAqLworI2lmbmRlZiBPUzIKKyNpZmRlZiBDS19BVVRIRU5USUNBVElPTgorICAgICAgICAv KiBCZWZvcmUgaW5pdGlhbGl6YXRpbmcgVGVsbmV0L1Jsb2dpbiBuZWdvdGlhdGlvbnMsIGluaXQg S2VyYmVyb3MgKi8KKyAgICAgICAgY2tfYXV0aF9pbml0KGNrZ2V0cGVlcigpLCIiLCIiLDApOwor I2VuZGlmIC8qIENLX0FVVEhFTlRJQ0FUSU9OICovCisKKyNpZmRlZiBOT05fQkxPQ0tfSU8KKyAg ICAgICAgb24gPSAxOworICAgICAgICB4ID0gc29ja2V0X2lvY3RsKDAsRklPTkJJTywmb24pOwor ICAgICAgICBkZWJ1ZyhGMTAxLCJtYWluIEZJT05CSU8iLCIiLHgpOworI2VuZGlmIC8qIE5PTl9C TE9DS19JTyAqLworI2lmZGVmIFNPX09PQklOTElORQorICAgICAgICBvbiA9IDE7CisgICAgICAg IHggPSBzZXRzb2Nrb3B0KDAsIFNPTF9TT0NLRVQsIFNPX09PQklOTElORSwgKGNoYXIgKikmb24s IHNpemVvZihvbikpOworICAgICAgICBkZWJ1ZyhGMTAxLCJtYWluIFNPX09PQklOTElORSIsIiIs eCk7CisjZW5kaWYgLyogU09fT09CSU5MSU5FICovCisKKyNpZm5kZWYgTk9UQ1BPUFRTCisjaWZu ZGVmIGRhdGFnZW5lcmFsCisjaWZkZWYgU09MX1NPQ0tFVAorI2lmZGVmIFRDUF9OT0RFTEFZCisg ICAgICAgIG5vX2RlbGF5KDAsdGNwX25vZGVsYXkpOworI2VuZGlmIC8qIFRDUF9OT0RFTEFZICov CisjaWZkZWYgU09fS0VFUEFMSVZFCisgICAgICAgIGtlZXBhbGl2ZSgwLHRjcF9rZWVwYWxpdmUp OworI2VuZGlmIC8qIFNPX0tFRVBBTElWRSAqLworI2lmZGVmIFNPX0xJTkdFUgorICAgICAgICBj a19saW5nZXIoMCx0Y3BfbGluZ2VyLCB0Y3BfbGluZ2VyX3Rtbyk7CisjZW5kaWYgLyogU09fTElO R0VSICovCisjaWZkZWYgU09fRE9OVFJPVVRFCisgICAgICAgIGRvbnRyb3V0ZSgwLHRjcF9kb250 cm91dGUpOworI2VuZGlmIC8qIFNPX0RPTlRST1VURSAqLworI2lmZGVmIFNPX1NOREJVRgorICAg ICAgICBzZW5kYnVmKDAsdGNwX3NlbmRidWYpOworI2VuZGlmIC8qIFNPX1NOREJVRiAqLworI2lm ZGVmIFNPX1JDVkJVRgorICAgICAgICByZWN2YnVmKDAsdGNwX3JlY3ZidWYpOworI2VuZGlmIC8q IFNPX1JDVkJVRiAqLworI2VuZGlmIC8qIFNPTF9TT0NLRVQgKi8KKyNlbmRpZiAvKiBkYXRhZ2Vu ZXJhbCAqLworI2VuZGlmIC8qIE5PVENQT1BUUyAqLworCisjaWZkZWYgQ0tfU1NMCisgICAgICAg IGlmIChja19zc2xlYXlfaXNfaW5zdGFsbGVkKCkpIHsKKyAgICAgICAgICAgIGlmICghc3NsX3Ru X2luaXQoU1NMX1NFUlZFUikpIHsKKyAgICAgICAgICAgICAgICBpZiAoYmlvX2VyciAhPSBOVUxM KSB7CisgICAgICAgICAgICAgICAgICAgIEJJT19wcmludGYoYmlvX2VyciwiZG9fc3NsZWF5X2lu aXQoKSBmYWlsZWRcclxuIik7CisgICAgICAgICAgICAgICAgICAgIEVSUl9wcmludF9lcnJvcnMo YmlvX2Vycik7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg ZmZsdXNoKHN0ZGVycik7CisgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCJkb19z c2xlYXlfaW5pdCgpIGZhaWxlZFxyXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgRVJSX3ByaW50 X2Vycm9yc19mcChzdGRlcnIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBz d2l0Y2ggKHR0bnByb3RvKSB7CisJCSAgY2FzZSBOUF9TU0w6CisJCSAgY2FzZSBOUF9UTFM6Cisg IAkJICBjYXNlIE5QX1NTTF9SQVc6CisJCSAgY2FzZSBOUF9UTFNfUkFXOgorCQkgIGNhc2UgTlBf U1NMX1RFTE5FVDoKKwkJICBjYXNlIE5QX1RMU19URUxORVQ6CisgICAgICAgICAgICAgICAgICAg IGRvZXhpdChCQURfRVhJVCwxKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg Lyogb3RoZXJ3aXNlIHdlIHdpbGwgY29udGludWUgdG8gYWNjZXB0IHRoZSBjb25uZWN0aW9uICAg Ki8KKyAgICAgICAgICAgICAgICAvKiB3aXRob3V0IFNTTCBvciBUTFMgc3VwcG9ydCB1bmxlc3Mg cmVxdWlyZWQuICovCisgICAgICAgICAgICAgICAgaWYgKCBURUxPUFRfREVGX1NfTUVfTU9ERShU RUxPUFRfU1RBUlRfVExTKSAhPSBUTl9OR19NVSApCisgICAgICAgICAgICAgICAgICAgIFRFTE9Q VF9ERUZfU19NRV9NT0RFKFRFTE9QVF9TVEFSVF9UTFMpID0gVE5fTkdfUkY7CisgICAgICAgICAg ICAgICAgaWYgKCBURUxPUFRfREVGX1NfVV9NT0RFKFRFTE9QVF9TVEFSVF9UTFMpICE9IFROX05H X01VICkKKyAgICAgICAgICAgICAgICAgICAgVEVMT1BUX0RFRl9TX1VfTU9ERShURUxPUFRfU1RB UlRfVExTKSA9IFROX05HX1JGOworICAgICAgICAgICAgICAgIGlmICggVEVMT1BUX0RFRl9DX01F X01PREUoVEVMT1BUX1NUQVJUX1RMUykgIT0gVE5fTkdfTVUgKQorICAgICAgICAgICAgICAgICAg ICBURUxPUFRfREVGX0NfTUVfTU9ERShURUxPUFRfU1RBUlRfVExTKSA9IFROX05HX1JGOworICAg ICAgICAgICAgICAgIGlmICggVEVMT1BUX0RFRl9DX1VfTU9ERShURUxPUFRfU1RBUlRfVExTKSAh PSBUTl9OR19NVSApCisgICAgICAgICAgICAgICAgICAgIFRFTE9QVF9ERUZfQ19VX01PREUoVEVM T1BUX1NUQVJUX1RMUykgPSBUTl9OR19SRjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg ICAgICAgICAgaWYgKCBja19zc2xfaW5jb21pbmcoMCkgPCAwICkgeworICAgICAgICAgICAgICAg ICAgICBkb2V4aXQoQkFEX0VYSVQsMSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg fQorICAgICAgICB9CisjZW5kaWYgLyogQ0tfU1NMICovCisKKyNpZmRlZiBUTkNPREUKKyAgICAg ICAgdG5faW5pKCk7ICAgICAgICAgICAgICAgICAgICAgICAvKiBTdGFydCBUZWxuZXQgbmVnb3Rp YXRpb24gbm93ICovCisjZW5kaWYgLyogVE5DT0RFICovCisjZW5kaWYgLyogT1MyICovCisgICAg fQorICAgIGRlYnVnKEYxMDEsIm1haW4gYXJnYyBhZnRlciBwcmVzY2FuKCkiLCIiLGFyZ2MpOwor CisgICAgLyogTm93IHByb2Nlc3MgYW55IHJlbGV2YW50IGVudmlyb25tZW50IHZhcmlhYmxlcyAq LworCisjaWZuZGVmIE5PRElBTAorICAgIGdldGRpYWxlbnYoKTsgICAgICAgICAgICAgICAgICAg ICAgIC8qIERpYWxpbmcgKi8KKyNpZmRlZiBORVRDT05OCisgICAgbmRpbml0KCk7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSBuZXR3b3JrIGRpcmVjdG9yeSBpbmZvICov CisgICAgZ2V0bmV0ZW52KCk7ICAgICAgICAgICAgICAgICAgICAgICAgLyogTmV0d29yayBkaXJl Y3RvcmllcyAqLworI2VuZGlmIC8qIE5FVENPTk4gKi8KKyNlbmRpZiAvKiBOT0RJQUwgKi8KKwor I2lmbmRlZiBOT1hGRVIKKyNpZmRlZiBDS19GQVNUCisgICAgZG9mYXN0KCk7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogQnkgbm93IEZBU1QgZGVmYXVsdHMgc2hvdWxkIGJlIE9LICovCisj ZW5kaWYgLyogQ0tfRkFTVCAqLworI2VuZGlmIC8qIE5PWEZFUiAqLworCisjaWZuZGVmIE5PQ01E TAorICAgIGlrc2xvZ2luKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJS1NEIExvZ2lu IGFuZCBvdGhlciBzdHVmZiAqLworI2lmZGVmIElLU0QKKyNpZmRlZiBOVAorICAgIGlmICggaW5z ZXJ2ZXIgKQorICAgICAgc2V0bnRjcmVkcygpOworI2VuZGlmIC8qIE5UICovCisjZW5kaWYgLyog SUtTRCAqLworI2VuZGlmIC8qIE5PQ01ETCAqLworCisgICAgaWYgKGhvd2NhbGxlZCA9PSBJX0FN X1NTSFNVQikgeworICAgICAgICByZWxpYWJsZSA9IDE7CQkJLyogV2Ugc2F5IHRoZSBjb25uZWN0 aW9uIGlzIHJlbGlhYmxlICovCisgICAgICAgIHhyZWxpYWJsZSA9IDE7CQkJLyogQW5kIHRoYXQg d2Ugc2FpZCBpdCB3YXMgKi8KKyAgICAgICAgc2V0cmVsaWFibGUgPSAxOwkJLyogQW5kIHByZXRl bmQgdGhlICJ1c2VyIiBkaWQgdG9vICovCisgICAgICAgIHhmaW5pc2ggPSAxOwkJCS8qIEZvciBS RU1PVEUgSEVMUCByZXNwb25zZSAqLworICAgICAgICBtZG10eXAgPSAwOwkJCS8qIEZvciB0dG9w ZW4oKSAqLworICAgICAgICBja3N0cm5jcHkodHRuYW1lLCIwIixUVE5BTUxFTisxKTsgIC8qIFVz ZSBmaWxlIGRlc2NyaXB0b3IgMCAqLworICAgICAgICBsb2NhbCA9IDA7ICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIEFuZCBmb3JjZSByZW1vdGUgbW9kZSAqLworICAgICAgICB0dG9wZW4odHRu YW1lLCZsb2NhbCxtZG10eXAsMCk7IC8qIE9wZW4gdGhlICJjb25uZWN0aW9uIiAqLworICAgICAg ICBzc3RhdGUgPSAneCc7CQkJLyogSW5pdGlhbCBzdGF0ZSBpcyBTZXJ2ZXIgKi8KKyAgICAgICAg cHJvdG8oKTsJCQkvKiBFbnRlciBwcm90b2NvbCAqLworICAgICAgICBkb2V4aXQoR09PRF9FWElU LHhpdHN0YSk7CS8qIEV4aXQgd2hlbiBkb25lICovCisgICAgfQorICAgIGRlYnVnKEYxMTEsImhv d2NhbGxlZCIsbXluYW1lLGhvd2NhbGxlZCk7CisKKyNpZmRlZiBOT0NDVFJBUAorICAgIGRvdGFr ZWluaSgwKTsKKyNlbHNlIC8qIE5PQ0NUUkFQICovCisgICAgZGVidWcoRjEwMCwibWFpbiBhYm91 dCB0byBjY19leGVjdXRlIiwiIiwwKTsKKyAgICBzZXRpbnQoKTsKKyAgICBjY19leGVjdXRlKCBj a2phZGRyKGNtamJ1ZiksIGRvdGFrZWluaSwgZmFpbHRha2VpbmkgKTsKKyNlbmRpZiAvKiBOT0ND VFJBUCAqLworCisgICAgZGVidWcoRjExMSwibWFpbiAyIGNmaWxlZiIsY21kZmlsLGNmaWxlZik7 CisgICAgaWYgKGNtZGZpbFswXSkgeyAgICAgICAgICAgICAgICAgICAgLyogSWYgd2UgZ290IG9u ZSAoc2VlIHByZXNjYW4oKSkuLi4gKi8KKyNpZmRlZiBOT0NDVFJBUAorICAgICAgICBkb2NtZGZp bGUoMCk7ICAgICAgICAgICAgICAgICAgIC8qIGV4ZWN1dGUgaXQuICovCisjZWxzZSAvKiBOT0ND VFJBUCAqLworICAgICAgICBzZXRpbnQoKTsKKyAgICAgICAgY2NfZXhlY3V0ZSggY2tqYWRkcihj bWpidWYpLCBkb2NtZGZpbGUsIGZhaWxjbWRmaWxlICk7CisjZW5kaWYgLyogTk9DQ1RSQVAgKi8K KyAgICB9CisjaWZuZGVmIE9TMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUHJlc2Vy dmUgbmFtZSBzbyB3ZSBjYW4gZGVsZXRlIGl0ICovCisgICAgKmNtZGZpbCA9ICdcMCc7ICAgICAg ICAgICAgICAgICAgICAgLyogRG9uZSwgbnVsbGlmeSB0aGUgZmlsZSBuYW1lICovCisjZW5kaWYg LyogT1MyICovCisjZW5kaWYgLyogTk9JQ1AgKi8KKworI2lmbmRlZiBOT0NNREwKKy8qIExvb2sg Zm9yIGEgVU5JWC1zdHlsZSBjb21tYW5kIGxpbmUuLi4gKi8KKworICAgIHdoYXQgPSBXX05PVEhJ Tkc7CisKKyAgICBkZWJ1ZyhGMTAxLCJtYWluIGFyZ2MiLCIiLGFyZ2MpOworI2lmbmRlZiBOT0hF TFAKKyAgICBpbmlvcHRobHAoKTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBJbml0aWFsaXpl IGNtZGxpbmUgYXJnIGhlbHAgKi8KKyNlbmRpZiAvKiBOT0hFTFAgKi8KKyAgICBpZiAoCisjaWZk ZWYgQ09NTUVOVAorICAgICAgICAhY2ZpbGVmICYmCisjZW5kaWYgLyogQ09NTUVOVCAqLworICAg ICAgICBhcmdjID4gMSkgeyAgICAgICAgICAgICAgICAgICAgIC8qIENvbW1hbmQgbGluZSBhcmd1 bWVudHM/ICovCisgICAgICAgIHNzdGF0ZSA9IChDSEFSKSBjbWRsaW4oKTsgICAgICAgLyogWWVz LCBwYXJzZS4gKi8KKyNpZmRlZiBORVRDT05OCisjaWZuZGVmIE5PVVJMCisgICAgICAgIGlmICho YXZldXJsKSB7ICAgICAgICAgICAgICAgICAgLyogV2FzIGEgVVJMIGdpdmVuPyAqLworICAgICAg ICAgICAgZG91cmwoKTsgICAgICAgICAgICAgICAgICAgIC8qIGlmIHNvLCBkbyBpdC4gKi8KKyAg ICAgICAgfQorI2VuZGlmIC8qIE5PVVJMICovCisjZW5kaWYgLyogTkVUQ09OTiAqLworI2lmbmRl ZiBOT1hGRVIKKyAgICAgICAgenN0YXRlID0gc3N0YXRlOyAgICAgICAgICAgICAgICAvKiBSZW1l bWJlciBzc3RhdGUgYXJvdW5kIHByb3RvY29sICovCisgICAgICAgIGRlYnVnKEYxMDEsIm1haW4g enN0YXRlIiwiIix6c3RhdGUpOworI2VuZGlmIC8qIE5PWEZFUiAqLworCisjaWZuZGVmIE5PTE9D QUwKKyAgICAgICAgaWYgKGNmbGcpIHsgICAgICAgICAgICAgICAgICAgICAvKiBDb25uZWN0IGZp cnN0IGlmIHJlcXVlc3RlZCAqLworICAgICAgICAgICAgZG9jb25lY3QoMCwwKTsKKyAgICAgICAg ICAgIGlmICh0dGNoaygpIDwgMCkKKyAgICAgICAgICAgICAgZG9sb2dlbmQoKTsKKyAgICAgICAg ICAgIGNmbGcgPSAwOworICAgICAgICB9CisjZW5kaWYgLyogTk9MT0NBTCAqLworCisjaWZuZGVm IE5PWEZFUgorICAgICAgICBpZiAoc3N0YXRlKSB7CisjaWZuZGVmIE5PTE9DQUwKKyAgICAgICAg ICAgIGlmIChkaXNwbGEpIGNvbmNiKChjaGFyKWVzY2FwZSk7IC8qIChmb3IgY29uc29sZSAiaW50 ZXJydXB0cyIpICovCisjZW5kaWYgLyogTk9MT0NBTCAqLworI2lmZGVmIE5PQ0NUUkFQCisgICAg ICAgICAgICBkb2NtZGxpbmUoMSk7CisjZWxzZSAvKiBOT0NDVFJBUCAqLworICAgICAgICAgICAg c2V0aW50KCk7CisgICAgICAgICAgICBjY19leGVjdXRlKCBja2phZGRyKGNtamJ1ZiksIGRvY21k bGluZSwgZmFpbGNtZGxpbmUgKTsKKyNlbmRpZiAvKiBOT0NDVFJBUCAqLworICAgICAgICB9Cisj ZW5kaWYgLyogTk9YRkVSICovCisKKyNpZm5kZWYgTk9JQ1AKKy8qCisgIElmIGEgY29tbWFuZC1s aW5lIGFjdGlvbiBhcmd1bWVudCB3YXMgZ2l2ZW4gYW5kIC1TICgic3RheSIpIHdhcyBub3QgZ2l2 ZW4sCisgIGV4aXQgbm93LgorKi8KKyAgICAgICAgaWYgKChjZmxnIHx8IGNuZmxnIHx8IHpzdGF0 ZSkgJiYgIXN0YXlmbGcpCisjZW5kaWYgLyogTk9JQ1AgKi8KKyAgICAgICAgICBkb2V4aXQoR09P RF9FWElULHhpdHN0YSk7ICAgICAvKiBFeGl0IHdpdGggZ29vZCBzdGF0dXMgKi8KKworI2lmbmRl ZiBOT0xPQ0FMCisjaWZuZGVmIE5PSUNQCisgICAgICAgIGlmIChsb2NhbCkgeworI2lmZGVmIE5F VENPTk4KKyAgICAgICAgICAgIGlmICgoY2ZsZyB8fCBjbmZsZykgJiYgdG5fZXhpdCAmJiB0dGNo aygpIDwgMCkKKyAgICAgICAgICAgICAgZG9leGl0KEdPT0RfRVhJVCx4aXRzdGEpOyAvKiBFeGl0 IHdpdGggZ29vZCBzdGF0dXMgKi8KKyNlbmRpZiAvKiBORVRDT05OICovCisgICAgICAgICAgICBp ZiAoZXhpdG9uY2xvc2UgJiYgIW5ldHdvcmsgJiYKKyAgICAgICAgICAgICAgICAoY2FycmllciAh PSBDQVJfT0ZGICYmICh0dGdtZG0oKSAmIEJNX0RDRCkgPT0gMCkpCisgICAgICAgICAgICAgIGRv ZXhpdChHT09EX0VYSVQseGl0c3RhKTsgLyogRXhpdCB3aXRoIGdvb2Qgc3RhdHVzICovCisgICAg ICAgICAgICBpZiAoZXhpdG9uY2xvc2UgJiYgbmV0d29yayAmJiB0dGNoaygpIDwgMCkKKyAgICAg ICAgICAgICAgZG9leGl0KEdPT0RfRVhJVCx4aXRzdGEpOyAvKiBFeGl0IHdpdGggZ29vZCBzdGF0 dXMgKi8KKyAgICAgICAgfQorI2VuZGlmIC8qIE5PSUNQICovCisjZW5kaWYgLyogTk9MT0NBTCAq LworICAgIH0KKyNlbmRpZiAvKiBOT0NNREwgKi8KKworI2lmZGVmIE5PSUNQICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIE5vIGludGVyYWN0aXZlIGNvbW1hbmQgcGFyc2VyICovCisjaWZu ZGVmIE5PQ01ETAorICAgIGVsc2UgeworCisgICAgICAgIC8qIENvbW1hbmQtbGluZS1vbmx5IHZl cnNpb24gKi8KKyAgICAgICAgZmF0YWwoIj9ObyBjb21tYW5kLWxpbmUgb3B0aW9ucyBnaXZlbiAt IHR5cGUgJ2tlcm1pdCAtaCcgZm9yIGhlbHAiKTsKKyAgICB9CisjZWxzZSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogTmVpdGhlciBvbmUhICovCisgICAgICAgIHNzdGF0ZSA9 ICd4JzsKKyAgICAgICAganVzdG9uZSA9IDA7CisgICAgICAgIHByb3RvKCk7ICAgICAgICAgICAg ICAgICAgICAgICAgLyogU28gZ28gaW50byBzZXJ2ZXIgbW9kZSAqLworICAgICAgICBkb2V4aXQo R09PRF9FWElULHhpdHN0YSk7ICAgICAgIC8qIGV4aXQgd2l0aCBnb29kIHN0YXR1cyAqLworCisj ZW5kaWYgLyogTk9DTURMICovCisjZWxzZSAvKiBub3QgTk9JQ1AgKi8KKy8qCisgIElmIG5vIGFj dGlvbiByZXF1ZXN0ZWQgb24gY29tbWFuZCBsaW5lLCBvciBpZiAtUyAoInN0YXkiKSB3YXMgaW5j bHVkZWQsCisgIGVudGVyIHRoZSBpbnRlcmFjdGl2ZSBjb21tYW5kIHBhcnNlci4KKyovCisgICAg aWYgKCFjbGNtZHMpCisgICAgICBoZXJhbGQoKTsgICAgICAgICAgICAgICAgICAgICAgICAgLyog RGlzcGxheSBwcm9ncmFtIGhlcmFsZC4gKi8KKworI2lmZGVmIE5PQ0NUUkFQCisgICAgZGVidWco RjEwMCwibWFpbiBOT0NDVFJBUCBzZXR0aW5nIGludGVycnVwdCB0cmFwIiwiIiwwKTsKKyAgICBz ZXRpbnQoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTZXQgdXAgY29tbWFuZCBpbnRl cnJ1cHQgdHJhcHMgKi8KKyAgICBkb2ljcChOVUxMKTsKKyNlbHNlIC8qIE5PQ0NUUkFQICovCisg ICAgd2hpbGUgKDEpIHsKKyAgICAgICAgZGVidWcoRjEwMCwibWFpbiBzZXR0aW5nIGludGVycnVw dCB0cmFwIiwiIiwwKTsKKyAgICAgICAgc2V0aW50KCk7ICAgICAgICAgICAgICAgICAgICAgICAv KiBTZXQgdXAgY29tbWFuZCBpbnRlcnJ1cHQgdHJhcHMgKi8KKyAgICAgICAgaWYgKCFjY19leGVj dXRlKGNramFkZHIoY21qYnVmKSwgZG9pY3AsIGZhaWxpY3ApKQorICAgICAgICAgIGJyZWFrOwor ICAgIH0KKyNlbmRpZiAvKiBOT0NDVFJBUCAqLworI2VuZGlmIC8qIE5PSUNQICovCisjaWZuZGVm IE1BSU5JU1ZPSUQKKyAgICByZXR1cm4oMSk7CisjZW5kaWYgLyogTUFJTklTVk9JRCAqLworfQor CisjaWZkZWYgRFlOQU1JQworLyogQWxsb2NhdGUgZmlsZSBpL28gYnVmZmVycyAqLworCitjaGFy ICp6aW5idWZmZXIgPSBOVUxMLCAqem91dGJ1ZmZlciA9IE5VTEw7CisKK2ludAorZ2V0aW9icygp IHsKKyAgICB6aW5idWZmZXIgPSAoY2hhciAqKW1hbGxvYyhJTkJVRlNJWkUpOworICAgIGlmICgh emluYnVmZmVyKSByZXR1cm4oLTEpOworICAgIHpvdXRidWZmZXIgPSAoY2hhciAqKW1hbGxvYyh6 b2J1ZnNpemUpOworICAgIGRlYnVnKEYxMDEsInpvdXRidWZmZXIgbWFsbG9jIiwiIix6b2J1ZnNp emUpOworICAgIGlmICghem91dGJ1ZmZlcikgcmV0dXJuKC0xKTsKKyAgICBkZWJ1ZyhGMTAwLCJn ZXRpb2JzIG9rIiwiIiwwKTsKKyAgICByZXR1cm4oMCk7Cit9CisjZW5kaWYgLyogRFlOQU1JQyAq LwoKZGlmZiAtLWdpdCBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2tj bWFpLmMuYzk5IGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2NtYWku Yy5jOTkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTU2NDBlNQotLS0gL2Rl di9udWxsCisrKyBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2tjbWFp LmMuYzk5CkBAIC0wLDAgKzEsMzU3NiBAQAorI2RlZmluZSBFRElUREFURSAgIjIwIEF1ZyAyMDEx IgkJLyogTGFzdCBlZGl0IGRhdGUgZGQgbW1tIHl5eXkgKi8KKyNkZWZpbmUgRURJVE5EQVRFICIy MDExMDgyMCIJCS8qIEtlZXAgdGhlbSBpbiBzeW5jICovCisvKiBTYXQgQXVnIDIwIDE3OjIwOjE3 IDIwMTEgKi8KKworLyogY2tjbWFpLmMgLSBNYWluIHByb2dyYW0gZm9yIEMtS2VybWl0IHBsdXMg c29tZSBtaXNjZWxsYW5lb3VzIGZ1bmN0aW9ucyAqLworCisvKgorICBja2NzeW0uaCBpcyB1c2Vk IGZvciBmb3IgZGVmaW5pbmcgc3ltYm9scyB0aGF0IG5vcm1hbGx5IHdvdWxkIGJlIGRlZmluZWQK KyAgdXNpbmcgLUQgb3IgLWQgb24gdGhlIGNjIGNvbW1hbmQgbGluZSwgZm9yIHVzZSB3aXRoIGNv bXBpbGVycyB0aGF0IGRvbid0CisgIHN1cHBvcnQgdGhpcyBmZWF0dXJlLiAgTXVzdCBjb21lIGJl Zm9yZSBhbnkgdGVzdHMgZm9yIHByZXByb2Nlc3NvciBzeW1ib2xzLgorKi8KKyNpbmNsdWRlICJj a2NzeW0uaCIKKy8qCisgIENvbnNvbGlkYXRlZCBwcm9ncmFtIEMtS2VybWl0IHZlcnNpb24gaW5m b3JtYXRpb24gZm9yIGFsbCBwbGF0Zm9ybXMKKyAgKGJ1dCBmb3IgVU5JWCBhbHNvIHNlZSBja3V2 ZXIuaCkuICBTZWUgbWFrZXZlcigpIGJlbG93IGZvciBob3cgdGhleSBhcmUgdXNlZC4KKyovCisj aWZkZWYgQ09NTUVOVCAgICAgICAgICAgICAgICAgICAgLyogVW5jb21tZW50IHRoaXMgZm9yIHJl YWwgSzk1IHZlcnNpb24gKi8KKyNpZm5kZWYgT1MyCQkJCS8qIE9TMiBhY3R1YWxseSBtZWFucyBL ZXJtaXQgOTUuICovCisjaWZuZGVmIEJFVEFURVNUCQkJLyogSXQncyBiZWNhdXNlIEtlcm1pdCA5 NSBzdGFydGVkICovCisjZGVmaW5lIEJFVEFURVNUCQkJLyogb3V0IGFzIEMtS2VybWl0IGZvciBP Uy8yLiAqLworI2VuZGlmIC8qIEJFVEFURVNUICovCisjZW5kaWYgLyogT1MyICovCisjZW5kaWYg LyogQ09NTUVOVCAqLworCisjaWZkZWYgQkVUQVRFU1QKKyNpZmRlZiBPUzIKKyNpZmRlZiBfX0RB VEVfXworI2RlZmluZSBCRVRBREFURQorI2VuZGlmIC8qIF9fREFURV9fICovCisjZW5kaWYgLyog T1MyICovCisjZW5kaWYgLyogQkVUQVRFU1QgKi8KKworY2hhciAqIGNrX2NyeWVhciA9ICIyMDEx IjsgCQkvKiBDLUtlcm1pdCBjb3B5cmlnaHQgeWVhciAqLworCisjaWZuZGVmIE1BQwkJCQkvKiBN QUMgPSBLZXJtaXQgZm9yIE1BQyBPUyA2LCA3LCAuLi4gKi8KKy8qCisgIE5vdGU6IGluaXRpYWxp emUgY2tfc190ZXN0IHRvICIiIGlmIHRoaXMgaXMgbm90IGEgdGVzdCB2ZXJzaW9uLgorICBVc2Ug KCpja19zX3Rlc3QgIT0gJ1wwJykgdG8gZGVjaWRlIHdoZXRoZXIgdG8gcHJpbnQgdGVzdC1yZWxh dGVkIG1lc3NhZ2VzLgorKi8KKworI2lmbmRlZiBCRVRBVEVTVAorI2lmbmRlZiBPUzIgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIFVOSVgsIFZNUywgZXRjLi4uIChpLmUuIEMtS2VybWl0 KSAqLworY2hhciAqY2tfc190ZXN0ID0gIiI7CQkJLyogIkRldiIsIkFscGhhIiwiQmV0YSIsIlJD Iiwgb3IgIiIgKi8KK2NoYXIgKmNrX3NfdHZlciA9ICIiOwkJCS8qIFRlc3QgdmVyc2lvbiBudW1i ZXIgb3IgIiIgKi8KKyNlbHNlICAvKiBPUzIgKi8KK2NoYXIgKmNrX3NfdGVzdCA9ICIiOwkJCS8q IChpLmUuIEs5NSkgKi8KK2NoYXIgKmNrX3NfdHZlciA9ICIiOworI2VuZGlmIC8qIE9TMiAqLwor I2Vsc2UKK2NoYXIgKmNrX3NfdGVzdCA9ICIiOwkJCS8qIERldmVsb3BtZW50ICovCitjaGFyICpj a19zX3R2ZXIgPSAiIjsKKyNlbmRpZiAvKiBCRVRBVEVTVCAqLworI2Vsc2UgLyogTUFDICovCitj aGFyICpja19zX3Rlc3QgPSAiUHJlLUFscGhhIjsgICAgICAgICAgLyogTWFjIEtlcm1pdCBpcyBh bHdheXMgYSB0ZXN0Li4uICovCitjaGFyICpja19zX3R2ZXIgPSAiIjsJCQkvKiAocHJlIE1hYyBP UyBYIDEwLCB0aGF0IGlzISkgKi8KKyNlbmRpZiAvKiBNQUMgKi8KKworI2lmZGVmIEJFVEFEQVRF ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERhdGUgb2YgdGhpcyB2ZXJzaW9uIG9yIGVkaXQg Ki8KK2NoYXIgKmNrX3NfZGF0ZSA9IF9fREFURV9fOyAgICAgICAgICAgICAvKiBDb21waWxhdGlv biBkYXRlICovCisjZWxzZQorY2hhciAqY2tfc19kYXRlID0gRURJVERBVEU7CQkvKiBTZWUgdG9w ICovCisKKyNlbmRpZiAvKiBCRVRBREFURSAqLworY2hhciAqYnVpbGRpZCA9IEVESVROREFURTsJ CS8qIFNlZSB0b3AgKi8KKworI2lmZGVmIFVOSVgKK3N0YXRpYyBjaGFyIHNjY3NpZFtdID0gIkAo IylDLUtlcm1pdCA5LjAuMzAyIjsKKyNlbmRpZiAvKiBVTklYICovCisKKy8qCisgIFRoZSBDLUtl cm1pdCBWZXJzaW9uIG51bWJlciBpcyBtYWpvci5taW5vci5lZGl0IChpbnRlZ2VycykuCisgIE1h am9yIHZlcnNpb24gYWx3YXlzIGdvZXMgdXAuCisgIE1pbm9yIHZlcnNpb24gaXMgaGlzdG9yaWNh bCwgaGFzbid0IGJlZW4gdXNlZCBzaW5jZSBDLUtlcm1pdCA3LjEuCisgIEVkaXQgaXMgc2VxdWVu dGlhbCwgYWx3YXlzIGdvZXMgdXAsIGJ1dCB0aGVyZSBjYW4gYmUgZ2Fwcy4KKyAgRm9yIGV4YW1w bGUgdGhlcmUgbWlnaHQgYmUgbWFueSBlZGl0cyBiZXR3ZWVuIHJlbGVhc2VzLgorICBJZiB0aGUg bWFqb3IgZ29lcyB0byAxMCwgc29tZSB2ZXJzaW9uLW51bWJlci1iYXNlZCBmZWF0dXJlIHRlc3Rz CisgIGNvdWxkIGZhaWwuICBJdCBtaWdodCBiZSBiZXR0ZXIgdG8gdXNlIHRoZSBtaW5vciB2ZXJz aW9uIGZpZWxkCisgIGZvciBmdXR1cmUgcmVsZWFzZXMuCisqLworCitjaGFyICpja19zX3ZlciA9 ICI5LjAuMzAyIjsgICAgICAgICAgICAgLyogQy1LZXJtaXQgdmVyc2lvbiBzdHJpbmcgKi8KK2xv bmcgIGNrX2xfdmVyID0gIDkwMDMwMkw7ICAgICAgICAgICAgICAvKiBDLUtlcm1pdCB2ZXJzaW9u IG51bWJlciAqLworCisjaWZkZWYgT1MyCitjaGFyICpja19zX3h2ZXIgPSAiMy4wLjAiOwkJLyog UHJvZHVjdC1zcGVjaWZpYyB2ZXJzaW9uIHN0cmluZyAqLworbG9uZyAgY2tfbF94dmVyID0gMzAw MEw7ICAgICAgICAgICAgICAgIC8qIFByb2R1Y3Qtc3BlY2lmaWMgdmVyc2lvbiBudW1iZXIgKi8K KyNlbHNlCisjaWZkZWYgTUFDCitjaGFyICpja19zX3h2ZXIgPSAiMC45OTUiOyAgICAgICAgICAg ICAgLyogUHJvZHVjdC1zcGVjaWZpYyB2ZXJzaW9uIHN0cmluZyAqLworbG9uZyAgY2tfbF94dmVy ID0gOTk1TDsgICAgICAgICAgICAgICAgIC8qIFByb2R1Y3Qtc3BlY2lmaWMgdmVyc2lvbiBudW1i ZXIgKi8KKyNlbHNlCitjaGFyICpja19zX3h2ZXIgPSAiIjsgICAgICAgICAgICAgICAgICAgLyog RG9uJ3QgdG91Y2ggdGhlc2UuLi4gKi8KK2xvbmcgIGNrX2xfeHZlciA9IDBMOyAgICAgICAgICAg ICAgICAgICAvKiB0aGV5IGFyZSBjb21wdXRlZCBhdCBydW50aW1lICovCisjZW5kaWYgLyogTUFD ICovCisjZW5kaWYgLyogT1MyICovCisKKyNpZmRlZiBPUzIKKyNpZmRlZiBJS1NET05MWQorI2lm ZGVmIE5UCitjaGFyICpja19zX25hbWUgPSAiSUtTLU5UIjsKKyNlbHNlIC8qIE5UICovCitjaGFy ICpja19zX25hbWUgPSAiSUtTLU9TLzIiOworI2VuZGlmIC8qIE5UICovCisjZWxzZSAvKiBJS1NE T05MWSAqLworY2hhciAqY2tfc19uYW1lID0gIktlcm1pdCA5NSI7ICAgICAgICAgIC8qIFByb2dy YW0gbmFtZSAqLworI2VuZGlmIC8qIElLU0RPTkxZICovCisjZWxzZQorI2lmZGVmIE1BQworY2hh ciAqY2tfc19uYW1lID0gIk1hYyBLZXJtaXQiOworI2Vsc2UKK2NoYXIgKmNrX3NfbmFtZSA9ICJD LUtlcm1pdCI7CisjZW5kaWYgLyogTUFDICovCisjZW5kaWYgLyogT1MyICovCisKK2NoYXIgKmNr X3Nfd2hvID0gIiI7ICAgICAgICAgICAgICAgICAgICAvKiBXaGVyZSBjdXN0b21pemVkLCAiIiA9 IG5vdC4gKi8KK2NoYXIgKmNrX3BhdGNoID0gIiI7ICAgICAgICAgICAgICAgICAgICAvKiBQYXRj aCBpbmZvLCBpZiBhbnkuICovCisKKyNkZWZpbmUgQ0tWRVJMRU4gMTI4CitjaGFyIHZlcnNpb3hb Q0tWRVJMRU5dOyAgICAgICAgICAgICAgICAgLyogVmVyc2lvbiBzdHJpbmcgYnVmZmVyICAqLwor Y2hhciAqdmVyc2lvID0gdmVyc2lveDsgICAgICAgICAgICAgICAgIC8qIFRoZXNlIGFyZSBmaWxs ZWQgaW4gYXQgKi8KK2xvbmcgdmVybnVtLCB4dmVybnVtOyAgICAgICAgICAgICAgICAgICAvKiBy dW50aW1lIGZyb20gYWJvdmUuICAgICovCisKKyNkZWZpbmUgQ0tDTUFJCisKKyNpbmNsdWRlICJj a2Nhc2MuaCIgICAgICAgICAgICAgICAgICAgICAvKiBBU0NJSSBjaGFyYWN0ZXIgc3ltYm9scyAq LworI2luY2x1ZGUgImNrY2RlYi5oIiAgICAgICAgICAgICAgICAgICAgIC8qIERlYnVnICYgb3Ro ZXIgc3ltYm9scyAqLworCitjaGFyICogbXluYW1lID0gTlVMTDsgICAgICAgICAgICAgICAgICAg LyogVGhlIG5hbWUgSSBhbSBjYWxsZWQgYnkgKi8KKyNpZm5kZWYgT1MyCitjaGFyICogZXhlZGly ID0gTlVMTDsgICAgICAgICAgICAgICAgICAgLyogRGlyZWN0b3J5IEkgd2FzIGV4ZWN1dGVkIGZy b20gKi8KKyNlbmRpZiAvKiBPUzIgKi8KK2NoYXIgKiBteWhvbWUgPSBOVUxMOwkJCS8qIEhvbWUg ZGlyZWN0b3J5IG92ZXJyaWRlICovCisKKy8qICBDIEsgQyBNIEEgSSAgLS0gIEMtS2VybWl0IE1h aW4gcHJvZ3JhbSAgKi8KKworLyoKKyAgQXV0aG9yOiBGcmFuayBkYSBDcnV6IChmZGNAY29sdW1i aWEuZWR1KSwKKyAgQ29sdW1iaWEgVW5pdmVyc2l0eSBpbiB0aGUgY2l0eSBvZiBOZXcgWW9yaywK KyAgQ29tcHV0ZXIgQ2VudGVyIC8gQ2VudGVyIGZvciBDb21wdXRpbmcgQWN0aXZpdGllcyAvIElu Zm9ybWF0aW9uIFRlY2hub2xvZ3kuCisgIEkgYW0gbm8gbG9uZ2VyIGF0IENvbHVtYmlhIFUgYXMg b2YgMSBKdWx5IDIwMTEsIGJ1dCB0aGUgZW1haWwgYWRkcmVzcworICBzaG91bGQgc3RpbGwgd29y ay4gIFRoZSBLZXJtaXQgd2Vic2l0ZSBodHRwOi8va2VybWl0LmNvbHVtYmlhLmVkdSBzaG91bGQK KyAgc3RpbGwgYmUgYXZhaWxhYmxlIGFuZCB1bmRlciBteSBjb250cm9sLCBhcyB3ZWxsIGFzIHRo ZSBLZXJtaXQgRlRQIHNpdGUsCisgIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0Ly4K KworQ09QWVJJR0hUIE5PVElDRToKKyovCisKK2NoYXIgKmNvcHlyaWdodFtdID0geworCisjaWZk ZWYgcGRwMTEKKyJDb3B5cmlnaHQgKEMpIDE5ODUsICVzLCBUcnVzdGVlcyBvZiBDb2x1bWJpYSBV bml2ZXJzaXR5LCBOWUMuIiwKKyJBbGwgcmlnaHRzIHJlc2VydmVkLiIsCisiICIsCisjZWxzZQor IkNvcHlyaWdodCAoQykgMTk4NSwgJXMsIiwKKyIgIFRoZSBUcnVzdGVlcyBvZiBDb2x1bWJpYSBV bml2ZXJzaXR5IGluIHRoZSBDaXR5IG9mIE5ldyBZb3JrLiIsCisiICBBbGwgcmlnaHRzIHJlc2Vy dmVkLiIsCisiICIsCisiUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IiwKKyJtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMiLAorImFyZSBtZXQ6IiwKKyIg IiwKKyIgKyBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi b3ZlIGNvcHlyaWdodCIsCisiICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiIsCisiICIsCisiICsgUmVkaXN0cmlidXRpb25zIGlu IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQiLAorIiAgIG5v dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l ciBpbiIsCisiICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92 aWRlZCB3aXRoIHRoZSIsCisiICAgZGlzdHJpYnV0aW9uLiIsCisiICIsCisiICsgTmVpdGhlciB0 aGUgbmFtZSBvZiBDb2x1bWJpYSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIiwKKyIg ICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz IGRlcml2ZWQiLAorIiAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y IHdyaXR0ZW4gcGVybWlzc2lvbi4iLAorIiAiLAorIlRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMiLAorIlwiQVMgSVNcIiBB TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qi LAorIkxJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ IEFORCBGSVRORVNTIEZPUiIsCisiQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQiLAorIkhPTERFUiBPUiBDT05UUklCVVRP UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwiLAorIlNQ RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV VCBOT1QiLAorIkxJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig U0VSVklDRVM7IExPU1MgT0YgVVNFLCIsCisiREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIiwKKyJUSEVPUlkgT0YgTElB QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIiwK KyIoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg T1VUIE9GIFRIRSBVU0UiLAorIk9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIiwKKyNlbmRpZiAvKiBwZHAxMSAqLworCisj aWZkZWYgT1MyCisiUG9ydGlvbnMgQ29weXJpZ2h0IChDKSAyMDAyLTIwMDUsIFNlY3VyZSBFbmRw b2ludHMgSW5jLCBOZXcgWW9yayBOWSBVU0EuIiwKKyJQb3J0aW9ucyBDb3B5cmlnaHQgKEMpIDE5 OTUsIE95IE9ubGluZSBTb2x1dGlvbnMgTHRkLiwgSnl2YXNreWxhLCBGaW5sYW5kLiIsCisjZW5k aWYgLyogT1MyICovCisKKyNpZmRlZiBDS19BVVRIRU5USUNBVElPTgorIlBvcnRpb25zIENvcHly aWdodCAoQykgMTk5MCwgTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neS4iLAor I2lmZGVmIENLX0VOQ1JZUFRJT04KKyJQb3J0aW9ucyBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTMg UmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiIsCisiUG9ydGlvbnMgQ29w eXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1IGJ5IEFUJlQuIiwKKyJQb3J0 aW9ucyBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTcsIEVyaWMgWW91bmcgPGVheUBjcnlwdG9zb2Z0 LmNvbT4uIiwKKyNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCisjaWZkZWYgQ0tfU1JQCisiUG9y dGlvbnMgQ29weXJpZ2h0IChDKSAxOTk3LCBTdGFuZm9yZCBVbml2ZXJzaXR5LiIsCisjZW5kaWYg LyogQ0tfU1JQICovCisjZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJT04gKi8KKworI2lmbmRlZiBw ZHAxMQorIiAiLAorIkZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLCB2aXNpdCB0aGUgS2VybWl0IFBy b2plY3Qgd2Vic2l0ZToiLAorImh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC8gLiIsCisj ZW5kaWYgLyogcGRwMTEgKi8KKyIifTsKKworLyogV2luZG93cyBJS1NEIGNvcHlyaWdodCB1c2Vk IHRvIGJlIHNlcGFyYXRlICovCitjaGFyICp3aWtzZGNwciA9IChjaGFyICopIGNvcHlyaWdodDsK KworCisvKgorRE9DVU1FTlRBVElPTjoKKworICJVc2luZyBDLUtlcm1pdCIgYnkgRnJhbmsgZGEg Q3J1eiBhbmQgQ2hyaXN0aW5lIE0uIEdpYW5vbmUsCisgIERpZ2l0YWwgUHJlc3MgLyBCdXR0ZXJ3 b3J0aC1IZWluZW1hbm4sIFdvYnVybiBNQSwgVVNBLgorICBTZWNvbmQgZWRpdGlvbiAoMTk5Nyks IElTQk4gMS01NTU1OC0xNjQtMS4KKyAgT3JkZXIgZnJvbSBEaWdpdGFsIFByZXNzOiAgICArMSAo ODAwKSAzNjYtMjY2NQorICBPciBmcm9tIENvbHVtYmlhIFVuaXZlcnNpdHk6ICsxICgyMTIpIDg1 NC0zNzAzCisKK0ZvciBLZXJtaXQgOTUsIGFsc286CisKKyAgIktlcm1pdCA5NSIgYnkgQ2hyaXN0 aW5lIE0uIEdpYW5vbmUgYW5kIEZyYW5rIGRhIENydXosCisgIE1hbm5pbmcgUHVibGljYXRpb25z LCBHcmVlbndpY2ggQ1QsIFVTQSAoMTk5OCkgLSBPbmxpbmUuCisKK0FDS05PV0xFREdNRU5UUzoK KworICBUaGUgS2VybWl0IGZpbGUgdHJhbnNmZXIgcHJvdG9jb2wgd2FzIGRldmVsb3BlZCBhdCB0 aGUgQ29sdW1iaWEgVW5pdmVyc2l0eQorICBDZW50ZXIgZm9yIENvbXB1dGluZyBBY3Rpdml0aWVz IChDVUNDQSksIHdoaWNoIHdhcyBzaW5jZSByZW5hbWVkIHRvIENvbHVtYmlhCisgIFVuaXZlcnNp dHkgQWNhZGVtaWMgSW5mb3JtYXRpb24gU3lzdGVtcyAoQWNJUykgYW5kIGFmdGVyIHRoYXQgQ29s dW1iaWEKKyAgVW5pdmVyc2l0eSBJbmZvcm1hdGlvbiBUZWNobm9sb2d5IChDVUlUKS4gIEtlcm1p dCBpcyBuYW1lZCBhZnRlciBLZXJtaXQgdGhlCisgIEZyb2csIHN0YXIgb2YgdGhlIHRlbGV2aXNp b24gc2VyaWVzIFRIRSBNVVBQRVQgU0hPVzsgdGhlIG5hbWUgaXMgdXNlZCBieQorICBwZXJtaXNz aW9uIG9mIEhlbnNvbiBBc3NvY2lhdGVzLCBJbmMuCisKKyAgVGhhbmtzIHRvIGF0IGxlYXN0IHRo ZSBmb2xsb3dpbmcgcGVvcGxlIGZvciB0aGVpciBjb250cmlidXRpb25zIHRvIHRoaXMKKyAgcHJv Z3JhbSBvdmVyIHRoZSB5ZWFycywgYW5kIGFwb2xvZ2llcyB0byBhbnlvbmUgd2hvIHdhcyBpbmFk dmVydGFudGx5CisgIG9taXR0ZWQ6CisKKyAgIENocmlzIEFkaWUsIEVkaW5idXJnaCBVLCBTY290 bGFuZCAoT1MvMikKKyAgIFJvYmVydCBBZHNldHQsIFVuaXZlcnNpdHkgb2YgV2F0ZXJsb28sIENh bmFkYQorICAgTGFycnkgQWZyaW4sIENsZW1zb24gVQorICAgUnVzcyBBbGxiZXJ5LCBTdGFuZm9y ZCBVCisgICBKZWZmcmV5IEFsdG1hbiwgQ29sdW1iaWEgVW5pdmVyc2l0eQorICAgR3JlZyBBbmRy ZXdzLCBUZWxlYml0IENvcnAKKyAgIEJhcnJ5IEFyY2hlciwgVSBvZiBNaXNzb3VyaQorICAgUm9i ZXJ0IEFuZGVyc3NvbiwgSW50ZXJuYXRpb25hbCBTeXN0ZW1zIEEvUywgT3NsbywgTm9yd2F5Cisg ICBDaHJpcyBBcm1zdHJvbmcsIEJyb29raGF2ZW4gTmF0aW9uYWwgTGFiIChPUy8yKQorICAgV2ls bGlhbSBCYWRlciwgU29mdHdhcmUgQ29uc3VsdGluZyBTZXJ2aWNlcywgTmF6YXJldGgsIFBBCisg ICBGdWF0IEJhcmFuLCBDb2x1bWJpYSBVCisgICBTdGFuIEJhcmJlciwgUmljZSBVCisgICBKaW0g QmFyYm91ciwgVSBvZiBDb2xvcmFkbworICAgRG9ubiBCYXVtZ2FydG5lciwgRGVsbAorICAgSWFu IEJlY2t3aXRoLCBEZWJpYW4gUHJvamVjdAorICAgTmVsc29uIEJlZWJlLCBVIG9mIFV0YWgKKyAg IEdlcnJ5IEJlbGFuZ2VyLCBDb2duaXRyb25pY3MKKyAgIEthcmwgQmVycnksIFVNQgorICAgTWFy ayBCZXJyeW1hbiwgU0FJQworICAgRGVhbiBXIEJldHRpbmdlciwgU1VOWQorICAgR2FyeSBCaWxr dXMKKyAgIFBldGVyIEJpbmRlcnVwLCBEZW5tYXJrCisgICBEYXZpZCBCb2xlbiwgQWR2YW5jZWQg TmV0d29ya3MgYW5kIFNlcnZpY2VzLCBJbmMuCisgICBKb29wIEJvbmVuCisgICBNYXJjIEJvdWNo ZXIsIFUgb2YgTW9udHJlYWwKKyAgIENoYXJsZXMgQnJvb2tzLCBFRE4KKyAgIEJvYiBCcm93bgor ICAgTWlrZSBCcm93biwgUHVyZHVlIFUKKyAgIFJvYiBCcm93bgorICAgSmFjayBCcnlhbnMsIENh bGlmb3JuaWEgU3RhdGUgVSBhdCBMb25nIEJlYWNoCisgICBNYXJrIEJ1ZGEsIERFQyAoVk1TKQor ICAgRmVybmFuZG8gQ2FicmFsLCBQYWRyYW8gaVgsIEJyYXNpbGlhCisgICBCam9ybiBDYXJsc3Nv biwgU3RvY2tob2xtIFVuaXZlcnNpdHkgQ29tcHV0ZXIgQ2VudHJlIFFaLCBTd2VkZW4KKyAgIEJp bGwgQ2F0Y2hpbmdzLCAoZm9ybWVybHkgb2YpIENvbHVtYmlhIFUKKyAgIEJvYiBDYXR0YW5pLCBD b2x1bWJpYSBVIENTIERlcHQKKyAgIERhdmlkZSBDZXJ2b25lLCBSb2NoZXN0ZXIgVQorICAgU2V0 aCBDaGFpa2xpbiwgRGVubWFyaworICAgSm9obiBDaGFuZGxlciwgSGFydmFyZCBVIC8gU21pdGhz b25pYW4gQXN0cm9ub21pY2FsIE9ic2VydmF0b3J5CisgICBCZXJuYXJkIENoZW4sIFVDTEEKKyAg IEFuZHJldyBBIENoZXJub3YsIFJFTENPTSBUZWFtLCBNb3Njb3cKKyAgIEpvaG4gTCBDaG1pZWxl d3NraSwgQVQmVCwgTGlzbGUsIElMCisgICBIb3dhcmQgQ2h1LCBVIG9mIE1pY2hpZ2FuCisgICBC aWxsIENvYWxzb24sIE1jRG9ubmVsbCBEb3VnbGFzCisgICBCZXJ0aWUgQ29vcGVyc21pdGgsIExv bmRvbgorICAgQ2hyaXN0aWFuIENvcnRpCisgICBDaGV0IENyZWlkZXIsIFUgb2YgV2VzdGVybiBP bnRhcmlvCisgICBBbGFuIENyb3Nzd2VsbCwgQ29sdW1iaWEgVQorICAgSmVmZiBEYW1lbnMsIChm b3JtZXJseSBvZikgQ29sdW1iaWEgVQorICAgTWFyayBEYXZpZXMsIEJhdGggVSwgVUsKKyAgIFNp bi1pdGlyb3UgRGV6YXdhLCBGdWppZmlsbSwgSmFwYW4KKyAgIEpvZSBSLiBEb3VwbmlrLCBVdGFo IFN0YXRlIFUKKyAgIEZyYW5rIERyZWFubywgSG9uZXl3ZWxsCisgICBKb2huIER1bmxhcCwgVSBv ZiBXYXNoaW5ndG9uCisgICBBbGV4IER1cHV5LCBTTUFSVC5DT00KKyAgIERhdmlkIER5Y2ssIEpv aG4gRmx1a2UgTWZnIENvLgorICAgU3RlZmFhbiBBLiBFZWNrZWxzLCBFdXJva29tLCBMdXhlbWJv dXJnCisgICBOaWNrIEVmdGh5bWlvdQorICAgUGF1bCBFZ2dlcnQsIFR3aW4gU3VuLCBJbmMuLCBF bCBTZWd1bmRvLCBDQQorICAgQmVybmllIEVpYmVuLCBERUMKKyAgIFBldGVyIEVpY2hob3JuLCBB c3N5c3QgSW50ZXJuYXRpb25hbAorICAgS3Jpc3RvZmZlciBFcmlrc3NvbiwgUGVyaWRvdCBLb25z dWx0IEFCLCBPZXJlYnJvLCBTd2VkZW4KKyAgIEpvaG4gUi4gRXZhbnMsIElSUywgS2Fuc2FzIENp dHkKKyAgIEdsZW5uIEV2ZXJoYXJ0LCBSQ0EgTGFicworICAgQ2hhcmxpZSBGaW5hbiwgQ3JheSBS ZXNlYXJjaAorICAgSGVybSBGaXNjaGVyLCBFbmNpbm8sIENBIChleHRlbnNpdmUgY29udHJpYnV0 aW9ucyB0byB2ZXJzaW9uIDQuMCkKKyAgIENhcmwgRm9uZ2hlaXNlciwgQ1dSVQorICAgTWlrZSBG cmVlbWFuLCBCb25uZXZpbGxlIFBvd2VyIEF1dGhvcml0eQorICAgQ2FybCBGcmllZGJlcmcKKyAg IE1hcmNlbGxvIEZydXRpZywgQ2F0aG9saWMgVW5pdmVyc2l0eSwgU2FvIFBhdWxvLCBCcmF6aWwg KFguMjUgc3VwcG9ydCkKKyAgIEhpcm9mdW1pIEZ1amlpLCBKYXBhbiBOYXQnbCBMYWIgZm9yIEhp Z2ggRW5lcmd5IFBoeXNpY3MsIFRva3lvIChLYW5qaSkKKyAgIENodWNrIEZ1bGxlciwgV2VzdGlu Z2hvdXNlIENvcnBvcmF0ZSBDb21wdXRlciBTZXJ2aWNlcworICAgQW5keSBGeWZlLCBDYWx0ZWNo CisgICBDaHJpc3RpbmUgTS4gR2lhbm9uZSwgQ29sdW1iaWEgVQorICAgSm9obiBHaWxtb3JlLCBV QyBCZXJrZWxleQorICAgTWFkaHVzdWRhbiBHaXl5YXJwdXJhbSwgSFAKKyAgIFJhaW5lciBHbGFz Y2hpY2ssIFNpZW1lbnMgQUcsIFBhZGVyYm9ybgorICAgV2lsbGlhbSBILiBHbGFzcworICAgR2Vy bWFuIEdvbGRzem1pZHQsIElCTQorICAgQ2h1Y2sgR29vZGhhcnQsIE5BU0EKKyAgIEFsaXN0YWly IEdvcm1hbiwgTmV3IFplYWxhbmQKKyAgIFJpY2hhcmQgR3JhdGlvbiwgQURGQSwgQXVzdHJhbGlh CisgICBDaHJpcyBHcmVlbiwgRXNzZXggVSwgVUsKKyAgIEFsYW4gR3JpZWcsIER1bmRlZSBUZWNo LCBTY290bGFuZAorICAgWWVrdGEgR3Vyc2VsLCBNSVQKKyAgIEppbSBHdXl0b24sIFJhbmQgQ29y cAorICAgTWljaGFlbCBIYWVydGVsCisgICBCcnVubyBIYWlibGUKKyAgIEJvYiBIYWluLCBVTU4K KyAgIE1hcmlvbiBIYWthbnNvbiwgT1JTVAorICAgUmljaGFyZCBIYW1pbHRvbgorICAgSm9obiBI YW1pbHN0b24sIElvd2EgU3RhdGUgVQorICAgU2ltb24gSGFuaWEsIE5ldGhlcmxhbmRzCisgICBT dGFuIEhhbmtzLCBSaWNlIFUuCisgICBLZW4gSGFycmVuc3RlaW4sIFNSSQorICAgRXVnZW5pYSBI YXJyaXMsIERhdGEgR2VuZXJhbCAoQU9TL1ZTKQorICAgRGF2aWQgSGFycmlzb24sIEtpbmdzdG9u IFdhcnJlbiBDb3JwCisgICBMdWNhcyBIYXJ0LCBPcmVnb24gU3RhdGUgVW5pdmVyc2l0eQorICAg SmFtZXMgSGFydmV5LCBJbmRpYW5hL1B1cmR1ZSBVIChWTVMpCisgICBSb2IgSGVhbGV5CisgICBD aHVjayBIZWRyaWNrLCBSdXRnZXJzIFUKKyAgIFJvbiBIZWlieSwgVGVjaG5pY2FsIFN5c3RlbXMg RGl2aXNpb24sIE1vdG9yb2xhIENvbXB1dGVyIEdyb3VwCisgICBTdGV2ZSBIZW1taW5nZXIsIFRl a3Ryb25peAorICAgQ2hyaXN0aWFuIEhlbXNpbmcsIFJXVEggQWFjaGVuLCBHZXJtYW55IChPUy05 KQorICAgUmFuZG9scGggSGVyYmVyLCBVUyBET0UsCisgICBBbmRyZXcgSGVyYmVydCwgTW9uYXNo IFVuaXYsIEF1c3RyYWxpYQorICAgTWFyY3VzIEhlcmJlcnQsIEdlcm1hbnkKKyAgIE1pa2UgSGlj a2V5LCBJVEkKKyAgIERhbiBIaWxkZWJyYW5kLCBRTlggU29mdHdhcmUgU3lzdGVtcyBJbmMsIEth bmF0YSwgT04gKFFOWCkKKyAgIFIgRSBIaWxsCisgICBTdGVwaGFuIEhvZmZtYW4tRW1kZW4KKyAg IFN2ZW4gSG9sbXN0cm9tLCBBQkIgVXRpbGl0aWVzIEFCLCBTd2VkZW4KKyAgIEJpbGwgSG9tZXIs IENyYXkgUmVzZWFyY2gKKyAgIFJheSBIdW50ZXIsIFRoZSBXb2xsb25nb25nIEdyb3VwCisgICBS YW5keSBIdW50emlnZXIsIE5hdGlvbmFsIExpYnJhcnkgb2YgTWVkaWNpbmUKKyAgIExhcnJ5IEph Y29icywgVHJhbnNhcmMKKyAgIFN0ZXZlIEplbmtpbnMsIExhbmNhc3RlciBVbml2ZXJzaXR5LCBV SworICAgRGF2ZSBKb2huc29uLCBHcmFkaWVudCBUZWNobm9sb2dpZXMKKyAgIE1hcmsgQiBKb2hu c29uLCBBcHBsZSBDb21wdXRlcgorICAgSnlrZSBKb2tpbmVuLCBUYW1wZXJlIFVuaXZlcnNpdHkg b2YgVGVjaG5vbG9neSwgRmlubGFuZCAoUU5YKQorICAgRXJpYyBGIEpvbmVzLCBBVCZUCisgICBM dWtlIEpvbmVzLCBBVCZUCisgICBQZXRlciBKb25lcywgVSBvZiBRdWViZWMgTW9udHJlYWwKKyAg IFBoaWwgSnVsaWFuLCBTQVMgSW5zdGl0dXRlCisgICBQZXRlciBLYWJhbCwgVSBvZiBRdWViZWMK KyAgIE1pYyBLYWN6bWFyY3ppaywgVSBvZiBUZXhhcyBhdCBBdXN0aW4KKyAgIFNlcmdleSBLYXJ0 YXNob2ZmLCBJbnN0LiBvZiBQcmVjaXNlIE1lY2hhbmljcyAmIENvbXB1dGVyIEVxdWlwbWVudCwg TW9zY293CisgICBIb3dpZSBLYXllLCBDb2x1bWJpYSBVCisgICBSb2IgS2Vkb2luLCBMaW5vdHlw ZSBDbywgSGF1cHBhdWdlLCBOWSAoT1MvMikKKyAgIFBoaWwgS2VlZ3N0cmEKKyAgIE1hcmsgS2Vu bmVkeSwgSUJNCisgICBUZXJyeSBLZW5uZWR5LCBTdCBQZXRlcidzIENvbGxlZ2UsIEplcnNleSBD aXR5LCBOSiAoVk1TIGFuZCBtb3JlKQorICAgIkNhcmxvIEtpZCIsIFRlY2huaWNhbCBVbml2ZXJz aXR5IG9mIERlbGZ0LCBOZXRoZXJsYW5kcworICAgVGltIEtpZW50emxlCisgICBQYXVsIEtpbW90 bywgQ29ybmVsbCBVCisgICBEb3VnbGFzIEtpbmdzdG9uLCBtb3JnYW4uY29tCisgICBMYXdyZW5j ZSBLaXJieSwgV2lsdHNoaXJlLCBVSworICAgVG9tIEtsb29zLCBTZXF1ZW50IENvbXB1dGVyIFN5 c3RlbXMKKyAgIEd1ZW50ZXIgS25hdWYKKyAgIEppbSBLbnV0c29uLCBVIG9mIFRleGFzIGF0IEF1 c3RpbgorICAgSm9obiBULiBLb2hsIChCU0RJKQorICAgU2NvdHQgS3JhbWVyLCBTUkkgSW50ZXJu YXRpb25hbCwgTWVubG8gUGFyaywgQ0EKKyAgIEpvaG4gS3JheW5hY2ssIFVTIFBvc3RhbCBTZXJ2 aWNlCisgICBEYXZpZCBLcmlja2VyLCBFbmNvcmUgQ29tcHV0ZXIKKyAgIFRob21hcyBLcnVlZ2Vy LCBVV00KKyAgIEJvIEt1bGxtYXIsIEFCQyBLbHViYmVuLCBTdG9ja2hvbG0sIGFuZCBDZW50cmFs IEJhbmsgb2YgU3dlZGVuLCBLaXN0YQorICAgUi4gQnJhZCBLdW1tZXIsIEFUJlQgQmVsbCBMYWJz LCBBdGxhbnRhLCBHQQorICAgSm9obiBLdW56ZSwgVUMgQmVya2VsZXkKKyAgIERhdmlkIExhbmUs IEJTU0kgLyBCZWxsU291dGggKFN0cmF0dXMgVk9TLCBYLjI1KQorICAgQm9iIExhcnNvbiwgVVND IChPUy05KQorICAgQmVydCBMYXZlcm1hbiwgR3JvbmluZ2VuIFUsIE5ldGhlcmxhbmRzCisgICBT dGV2ZSBMYXl0b24KKyAgIERhdmlkIExhd3llciwgVUMgSXJ2aW5lCisgICBKYXNvbiBMZWhyCisg ICBEYXZpZCBMZVZpbmUsIE5hdGlvbmFsIFNlbWljb25kdWN0b3IgQ29ycG9yYXRpb24KKyAgIERh bmllbCBTLiBMZXdhcnQsIFVJVUMKKyAgIFMuTy4gTGlkaWUsIExlaGlnaCBVCisgICBUb3IgTGls bHF2aXN0LCBIZWxzaW5raSBVLCBGaW5sYW5kCisgICBEYXZpZC1NaWNoYWVsIExpbmNrZSwgVSBv ZiBTdCBHYWxsZW4sIFN3aXR6ZXJsYW5kCisgICBSb2JlcnQgTGlwZSAoZm9yIFNDTyBtYWtlZmls ZSBlbnRyaWVzICYgYWR2aWNlKQorICAgRGVhbiBMb25nCisgICBNaWtlIExvbmcsIEFuYWxvZyBE ZXZpY2VzLCBOb3J3b29kIE1BCisgICBLZXZpbiBMb3dleSwgVSBvZiBTYXNrYXRjaGV3YW4gKE9T LzIpCisgICBBbmR5IExvd3J5LCBDb2x1bWJpYSBVCisgICBKYW1lcyBMdW1tZWwsIENhcHJpY2Eg VGVsZWNvbXB1dGluZyBSZXNvdXJjZXMgKFFOWCkKKyAgIExld2lzIE1jQ2FydGh5CisgICBEYXZp ZCBNYWNLZW56aWUsIEVudmlyb25tZW50YWwgRGVmZW5zZSBGdW5kLCBVIG9mIE1hcnlsYW5kCisg ICBKb2huIE1hY2tpbiwgVW5pdmVyc2l0eSBvZiBTaWRuZXksIEF1c3RyYWxpYQorICAgTWFydGlu IE1hY2xhcmVuLCBCYXRoIFUsIFVLCisgICBDaHJpcyBNYWlvLCBDb2x1bWJpYSBVIENTIERlcHQK KyAgIE1vbnRzZXJyYXQgTWFuZSwgSFAsIEdyZW5vYmxlLCBGcmFuY2UKKyAgIEZ1bHZpbyBNYXJp bm8sIE9saXZldHRpLCBJdnJlYSwgSXRhbHkKKyAgIEFydGh1ciBNYXJzaCwgZGlyY3NhLm9yZy5h dQorICAgUGV0ZXIgTWF1emV5LCBMdWNlbnQgVGVjaG5vbG9naWVzCisgICBUeWUgTWNRdWVlbiwg VXRhaCBTdGF0ZSBVCisgICBUZWQgTWVkaW4KKyAgIEhlbGxtdXRoIE1pY2hhZWxpcywgSGFuc2Vh dGlzY2hlciBDb21wdXRlcnNlcnZpY2UgR21iSCwgSGFtYnVyZywgR2VybWFueQorICAgTGVzbGll IE1pa2VzZWxsLCBBbWVyaWNhbiBGYXJtIEJ1cmVhdQorICAgVG9kZCBNaWxsZXIsIENvdXJ0ZXNh biBDb25zdWx0aW5nCisgICBHYXJ5IE1pbGxzCisgICBNYXJ0aW4gTWlub3csIERFQyAoVk1TKQor ICAgUGF3YW4gTWlzcmEsIEJlbGxjb3JlCisgICBLZW4gTWl6aWFsa28sIElCTSwgTWFuYXNzYXMs IFZBCisgICBXb2xmZ2FuZyBNb2VsbGVyLCBERUNVUyBHZXJtYW55CisgICBSYXkgTW9vZHksIFB1 cmR1ZSBVCisgICBCcnVjZSBKIE1vb3JlLCBBbGxlbi1CcmFkbGV5IENvLCBIaWdobGFuZCBIZWln aHRzLCBPSCAoQXRhcmkgU1QpCisgICBTdGV2ZSBNb3JsZXksIENvbnZleAorICAgUGV0ZXIgTW9z c2VsLCBDb2x1bWJpYSBVCisgICBUb255IE1vdnNob24sIE5ZVQorICAgTG91IE11Y2Npb2xpLCBT d2Fuc29uIEFuYWx5c2lzIFN5c3RlbXMKKyAgIERhbiBNdXJwaHkKKyAgIE5lYWwgUC4gTXVycGh5 LCBIYXJzb2YgU3lzdGVtcywgV29uZGVyIExha2UgSUwKKyAgIEdhcnkgTXVzc2FyCisgICBKb2hu IE5hbGwsIEZTVQorICAgSmFjayBOZWxzb24sIFUgb2YgUGl0dHNidXJnaAorICAgSmltIE5vYmxl LCBQbGFubmluZyBSZXNlYXJjaCBDb3Jwb3JhdGlvbiAoTWFjaW50b3NoKQorICAgSWFuIE8nQnJp ZW4sIEJhdGggVSwgVUsKKyAgIE1lbGlzc2EgTydOZWlsbCwgU0ZVCisgICBKb2huIE93ZW5zCisg ICBUaG9tYXMgUGlua2wsIEhlYWx0aCBCdXNpbmVzcyBTeXN0ZW1zIEluYy4KKyAgIE1pY2hhZWwg UGlucywgSW93YSBDb21wdXRlciBBaWRlZCBFbmdpbmVlcmluZyBOZXR3b3JrCisgICBBbmRyZScg UGlyYXJkLCBVbml2ZXJzaXR5IG9mIExpZWdlLCBCZWxnaXVtCisgICBQYXVsIFBsYWNld2F5LCBP aGlvIFN0YXRlIFUKKyAgIFBpZXQgVy4gUGxvbXAsIElDQ0UsIEdyb25pbmdlbiBVbml2ZXJzaXR5 LCBOZXRoZXJsYW5kcworICAgS2VuIFBvdWx0b24sIEhQIExhYnMKKyAgIE1hbmZyZWQgUHJhbmdl LCBPYWtsYW5kIFUKKyAgIENocmlzdG9waGVyIFByYXR0LCBBUFYgQmFrZXIsIFVLCisgICBGcmFu ayBQcmluZGxlLCBOQURDCisgICBUb255IFF1ZXJ1YmluLCBVIG9mIEhhd2FpaQorICAgSmVhbi1Q aWVycmUgUmFkbGV5CisgICBBbnRvbiBSYW5nCisgICBNaWtlIFJlY2h0bWFuCisgICBTY290dCBS aWJlCisgICBBbGFuIFJvYmlldHRlLCBPeGZvcmQgVW5pdmVyc2l0eSwgVUsKKyAgIE1pY2hlbCBS b2JpdGFpbGxlLCBVIG9mIE1vbnRyZWFsIChNYWMpCisgICBIdXcgUm9nZXJzLCBTY2h3ZWl6ZXJp c2NoZSBLcmVkaXRhbnN0YWx0LCBadWVyaWNoCisgICBOaWdlbCBSb2xlcywgQ2FtYnJpZGdlLCBF bmdsYW5kCisgICBLYWkgVXdlIFJvbW1lbCwgVGVjaG5pc2NoZSBVbml2ZXJzaXRhZXQgTXVlbmNo ZW4gKE9TLzIpCisgICBMYXJyeSBSb3Nlbm1hbiAoQW1pZ2EpCisgICBKYXkgUm91bWFuLCBVIG9m IE1pY2hpZ2FuCisgICBKYWNrIFJvdXNlLCBTQVMgSW5zdGl0dXRlIChEYXRhIEdlbmVyYWwgYW5k L29yIEFwb2xsbykKKyAgIFN0ZXcgUnViZW5zdGVpbiwgSGFydmFyZCBVIChWTVMpCisgICBHZXJo YXJkIFJ1ZWNrbGUsIEZIIERhcm1zdGFkdCwgRmIuIEUvQXV0b21hdGlzaWVydW5nc3RlY2huaWsK KyAgIEpvaG4gU2FudG9zLCBFRyZICisgICBCaWxsIFNjaGlsaXQsIENvbHVtYmlhIFUKKyAgIFVs bGkgU2NobHVldGVyLCBSV1RIIEFhY2hlbiwgR2VybWFueSAoT1MtOSwgZXRjKQorICAgTWljaGFl bCBTY2htaWR0LCBVIG9mIFBhZGVyYm9ybiwgR2VybWFueQorICAgRXJpYyBTY2hub2ViZWxlbiwg Q29udmV4CisgICBCZW5uIFNjaHJlaWJlciwgREVDCisgICBEYW4gU2NodWxsbWFuLCBERUMgKG1v ZGVtcywgRElBTCBjb21tYW5kLCBldGMpCisgICBKb2huIFNjaHVsdHosIDNNCisgICBTdGV2ZW4g U2NodWx0eiwgQ29udGVsIChQRFAtMTEpCisgICBTdGV2ZW4gU2Nod2VkYQorICAgQVBQUCBTY29y ZXIsIExlZWRzIFBvbHl0ZWNobmljLCBVSworICAgR29yZG9uIFNjb3R0LCBNaWNybyBGb2N1cywg TmV3YnVyeSBVSworICAgR2lzYmVydCBXLiBTZWxrZSwgV0lkTywgQm9ubiwgR2VybWFueQorICAg S2lqYWwgU2hhaAorICAgRGF2aWQgU2luZ2VyLCBJQk0gQWxtYWRlbiBSZXNlYXJjaCBMYWJzCisg ICBEYXZpZCBTaXplbGFuZCwgVSBvZiBMb25kb24gTWVkaWNhbCBTY2hvb2wKKyAgIEZyaWRyaWsg U2t1bGFzb24sIEljZWxhbmQKKyAgIFJpY2sgU2xhZGtleSAoTGludXgpCisgICBEYXZlIFNsYXRl CisgICBCcmFkbGV5IFNtaXRoLCBVQ0xBCisgICBGcmVkIFNtaXRoLCBNZXJrIC8gQ29tcHV0cml0 aW9uCisgICBSaWNoYXJkIFMgU21pdGgsIENhbCBTdGF0ZQorICAgUnlhbiBTdGFuaXNmZXIsIFVO VAorICAgQmVydGlsIFN0ZW5zdHJvZW0sIFN0b2NraG9sbSBVbml2ZXJzaXR5IENvbXB1dGVyIENl bnRyZSAoUVopLCBTd2VkZW4KKyAgIEphbWVzIFN0dXJkZXZhbnQsIENBUCBHRU1FTkkgQU1FUklD QSwgTWlubmVhcG9saXMKKyAgIFBldGVyIFN2YW5iZXJnLCBSb3lhbCBUZWNobi4gSFMsIFN3ZWRl bgorICAgSmFtZXMgUi4gU3dlbnNvbiwgQWNjdS1XZWF0aGVyLCBJbmMuCisgICBUZWQgVCdzbywg TUlUIChMaW51eCkKKyAgIEFuZHkgVGFuZW5iYXVtLCBWcmlqZSBVLCBBbXN0ZXJkYW0sIE5ldGhl cmxhbmRzCisgICBTZXRoIFRoZXJpYXVsdCwgQ29sdW1iaWEgVQorICAgR2xlbiBUaG9iZQorICAg TWFya2t1IFRvaWphbGEsIEhlbHNpbmtpIFUgb2YgVGVjaG5vbG9neQorICAgVGVlbXUgVG9ybWEs IEhlbHNpbmtpIFUgb2YgVGVjaG5vbG9neQorICAgTGludXMgVG9ydmFsZHMsIEhlbHNpbmtpCisg ICBSaWNrIFRyb3hlbCwgTklICisgICBXYXJyZW4gVHVja2VyLCBUcmlkb20gQ29ycCwgTW91bnRh aW4gUGFyaywgR0EKKyAgIERhdmUgVHdldGVuLCBBTUVTLU5BUworICAgRyBVZGRlYm9yZywgU3dl ZGVuCisgICBXYWx0ZXIgVW5kZXJ3b29kLCBGb3JkIEFlcm9zcGFjZQorICAgUGlldGVyIFZhbiBE ZXIgTGluZGVuLCBDZW50cmUgTW9uZGlhbCwgUGFyaXMKKyAgIEdlIHZhbiBHZWxkb3JwLCBOZXRo ZXJsYW5kcworICAgRnJlZCB2YW4gS2VtcGVuLCBNSU5JWCBVc2VyIEdyb3VwLCBWb29yaG91dCwg TmV0aGVybGFuZHMKKyAgIFdheW5lIFZhbiBQZWx0LCBHRS9DUkQKKyAgIE1hcmsgVmFzb2xsLCBP a2xhaG9tYSBTdGF0ZSBVIChWNyBVTklYKQorICAgS29uc3RhbnRpbiBWaW5vZ3JhZG92LCBJQ1NU SSwgTW9zY293CisgICBQYXVsIFZpeGllLCBERUMKKyAgIEJlcm5pZSBWb2x6LCBQcm9jZXNzIFNv ZnR3YXJlCisgICBFZHVhcmQgVm9waWNrYSwgUHJhZ3VlIFVuaXZlcnNpdHkgb2YgRWNvbm9taWNz LCBDemVjaCBSZXB1YmxpYworICAgTWFydGluIFZvcmxhZW5kZXIKKyAgIERpbWl0cmkgVnVsaXMs IENVTlkKKyAgIFJvZ2VyIFdhbGxhY2UsIFJheXRoZW9uCisgICBTdGVwaGVuIFdhbHRvbiwgQ2Fs aWYgU3RhdGUgVSwgTm9ydGhyaWRnZSAoQW1pZ2EpCisgICBKYW1pZSBXYXRzb24sIEFkYXNvZnQs IFN3aXR6ZXJsYW5kIChBSVgpCisgICBSaWNrIFdhdHNvbiwgVSBvZiBUZXhhcyAoTWFjaW50b3No KQorICAgRXJpYyBXZWF2ZXIsIENvbHVtYmlhIFUKKyAgIFNjb3R0IFdlaWthcnQgKEFzc29jaWF0 aW9uIGZvciBQcm9ncmVzc2l2ZSBDb21tdW5pY2F0aW9ucykKKyAgIFJvYmVydCBXZWluZXIsIFBy b2dyYW1taW5nIFBsdXMsIE5ldyBZb3JrIENpdHkKKyAgIExhdXJlbiBXZWluc3RlaW4sIFZvcnRl eCBUZWNobmxvZ3kKKyAgIERhdmlkIFdleGVsYmxhdCwgQVQmVAorICAgQ2xhcmsgV2llcmRhLCBJ bGx1bWluYXRpIE9ubGluZQorICAgSm9hY2hpbSBXaWVzZWwsIFUgb2YgS2FybHNydWhlCisgICBM b24gV2lsbGV0dCwgVSBvZiBVdGFoCisgICBNaWNoYWVsIFdpbGxpYW1zLCBVQ0xBCisgICBOYXRl IFdpbGxpYW1zLCBVIG9mIE1vbnRhbmEKKyAgIERhdmlkIFdpbHNvbgorICAgSm9lbGxlbiBXaW5k c29yLCBVIG9mIEFyaXpvbmEKKyAgIFBhdHJpY2sgV29sZmUsIEt1Y2sgJiBBc3NvY2lhdGVzLCBJ bmMuCisgICBHcmVnZyBXb25kZXJseSwgT2tsYWhvbWEgU3RhdGUgVSAoVjcgVU5JWCkKKyAgIEZh cnJlbGwgV29vZHMsIENvbmN1cnJlbnQgKGZvcm1lcmx5IE1hc3Njb21wKQorICAgRGF2ZSBXb29s bGV5LCBDQVAgQ29tbXVuaWNhdGlvbiBTeXN0ZW1zLCBMb25kb24KKyAgIEphY2sgV29vbGxleSwg U0NUIENvcnAKKyAgIEZyYW5rIFdvcnRuZXIKKyAgIEtlbiBZYXAsIGZvcm1lcmx5IG9mIFUgb2Yg Um9jaGVzdGVyCisgICBKb2huIFplZWZmLCBBbm4gQXJib3IsIE1JCisqLworCisjaW5jbHVkZSAi Y2tja2VyLmgiICAgICAgICAgICAgICAgICAgICAgLyogS2VybWl0IHN5bWJvbHMgKi8KKyNpbmNs dWRlICJja2NuZXQuaCIgICAgICAgICAgICAgICAgICAgICAvKiBOZXR3b3JrIHN5bWJvbHMgKi8K KworI2lmZGVmIENLX1NTTAorI2luY2x1ZGUgImNrX3NzbC5oIgorI2VuZGlmIC8qIENLX1NTTCAq LworCisjaWZuZGVmIE5PU1BMCisjaW5jbHVkZSAiY2t1dXNyLmgiCisjZW5kaWYgLyogTk9TUEwg Ki8KKworI2lmZGVmIE9TMk9OTFkKKyNkZWZpbmUgSU5DTF9WSU8gICAgICAgICAgICAgICAgICAg ICAgICAvKiBOZWVkZWQgZm9yIGNrb2Nvbi5oICovCisjaW5jbHVkZSA8b3MyLmg+CisjdW5kZWYg Q09NTUVOVAorI2VuZGlmIC8qIE9TMk9OTFkgKi8KKworI2lmZGVmIE5UCisjaW5jbHVkZSA8d2lu ZG93cy5oPgorI2luY2x1ZGUgPHRhcGkuaD4KKyNpbmNsdWRlICJja250YXAuaCIKKyNlbmRpZiAv KiBOVCAqLworCisjaWZuZGVmIE5PU0VSVkVSCisvKiBUZXh0IG1lc3NhZ2UgZGVmaW5pdGlvbnMu LiBlYWNoIHNob3VsZCBiZSAyNTYgY2hhcnMgbG9uZywgb3IgbGVzcy4gKi8KKyNpZmRlZiBNSU5J WAorY2hhciAqc3J2dHh0ID0gIlxyXG5cCitFbnRlcmluZyBzZXJ2ZXIgbW9kZS5cclxuXDAiOwor I2Vsc2UKKyNpZmRlZiBPTERNU0cKKy8qCisgIEl0IHNlZW1zIHRoZXJlIHdhcyBhIGxhcmdlIGlu c3RhbGxhdGlvbiB0aGF0IHdhcyB1c2luZyBDLUtlcm1pdCA1QSgxNjUpCisgIG9yIHRoZXJlYWJv dXRzLCB3aGljaCBoYWQgZGVwbG95ZWQgdGhvdXNhbmRzIG9mIE1TLURPUyBLZXJtaXQgc2NyaXB0 cyBpbgorICBzY2F0dGVyZWQgbG9jYXRpb25zIHRoYXQgbG9va2VkIGZvciBzdHJpbmdzIGluIHRo ZSBvbGQgc2VydmVyIG1lc3NhZ2UsCisgIHdoaWNoIGNoYW5nZWQgaW4gNUEoMTgzKSwgQXVndXN0 IDE5OTIuCisqLworY2hhciAqc3J2dHh0ID0gIlxyXG5cCitDLUtlcm1pdCBzZXJ2ZXIgc3RhcnRp bmcuICBSZXR1cm4gdG8geW91ciBsb2NhbCBtYWNoaW5lIGJ5IHR5cGluZ1xyXG5cCitpdHMgZXNj YXBlIHNlcXVlbmNlIGZvciBjbG9zaW5nIHRoZSBjb25uZWN0aW9uLCBhbmQgaXNzdWUgZnVydGhl clxyXG5cCitjb21tYW5kcyBmcm9tIHRoZXJlLiAgVG8gc2h1dCBkb3duIHRoZSBDLUtlcm1pdCBz ZXJ2ZXIsIGlzc3VlIHRoZVxyXG5cCitGSU5JU0ggb3IgQllFIGNvbW1hbmQgYW5kIHRoZW4gcmVj b25uZWN0LlxuXAorXHJcblwwIjsKKyNlbHNlCisjaWZkZWYgT1NLCitjaGFyICpzcnZ0eHQgPSAi XHJcMDEyXAorRW50ZXJpbmcgc2VydmVyIG1vZGUuICBJZiB5b3VyIGxvY2FsIEtlcm1pdCBzb2Z0 d2FyZSBpcyBtZW51IGRyaXZlbiwgdXNlXHJcMDEyXAordGhlIG1lbnVzIHRvIHNlbmQgY29tbWFu ZHMgdG8gdGhlIHNlcnZlci4gIE90aGVyd2lzZSwgZW50ZXIgdGhlIGVzY2FwZVxyXDAxMlwKK3Nl cXVlbmNlIHRvIHJldHVybiB0byB5b3VyIGxvY2FsIEtlcm1pdCBwcm9tcHQgYW5kIGlzc3VlIGNv bW1hbmRzIGZyb21cclwwMTJcCit0aGVyZS4gVXNlIFNFTkQgYW5kIEdFVCBmb3IgZmlsZSB0cmFu c2Zlci4gVXNlIFJFTU9URSBIRUxQIGZvciBhIGxpc3Qgb2ZcclwwMTJcCitvdGhlciBhdmFpbGFi bGUgc2VydmljZXMuICBVc2UgQllFIG9yIEZJTklTSCB0byBlbmQgc2VydmVyIG1vZGUuXHJcMDEy XDAiOworI2Vsc2UgLyogVU5JWCwgVk1TLCBBT1MvVlMsIGFuZCBhbGwgb3RoZXJzICovCitjaGFy ICpzcnZ0eHQgPSAiXHJcblwKK0VudGVyaW5nIHNlcnZlciBtb2RlLiAgSWYgeW91ciBsb2NhbCBL ZXJtaXQgc29mdHdhcmUgaXMgbWVudSBkcml2ZW4sIHVzZVxyXG5cCit0aGUgbWVudXMgdG8gc2Vu ZCBjb21tYW5kcyB0byB0aGUgc2VydmVyLiAgT3RoZXJ3aXNlLCBlbnRlciB0aGUgZXNjYXBlXHJc blwKK3NlcXVlbmNlIHRvIHJldHVybiB0byB5b3VyIGxvY2FsIEtlcm1pdCBwcm9tcHQgYW5kIGlz c3VlIGNvbW1hbmRzIGZyb21cclxuXAordGhlcmUuICBVc2UgU0VORCBhbmQgR0VUIGZvciBmaWxl IHRyYW5zZmVyLiAgVXNlIFJFTU9URSBIRUxQIGZvciBhIGxpc3Qgb2ZcclxuXAorb3RoZXIgYXZh aWxhYmxlIHNlcnZpY2VzLiAgVXNlIEJZRSBvciBGSU5JU0ggdG8gZW5kIHNlcnZlciBtb2RlLlxy XG5cMCI7CisjZW5kaWYgLyogT1NLICovCisjZW5kaWYgLyogT0xETVNHICovCisjZW5kaWYgLyog TUlOSVggKi8KKyNlbHNlICAvKiBzZXJ2ZXIgbW9kZSBkaXNhYmxlZCAqLworY2hhciAqc3J2dHh0 ID0gIiI7CisjZW5kaWYgLyogTk9TRVJWRVIgKi8KKworaW50IGluaXRmbGcgPSAwOyAgICAgICAg ICAgICAgICAgICAgICAgIC8qIHN5c2luaXQoKSBoYXMgZXhlY3V0ZWQuLi4gKi8KK2ludCBob3dj YWxsZWQgPSBJX0FNX0tFUk1JVDsgICAgICAgICAgICAvKiBIb3cgSSB3YXMgY2FsbGVkICovCitp bnQgaG10b3BsaW5lID0gMDsKK2ludCBxdWl0dGluZyA9IDA7CQkJLyogSSdtIGluIHRoZSBhY3Qg b2YgcXVpdHRpbmcgKi8KKworI2lmZGVmIElLU0RDT05GCitjaGFyICogaWtzZGNvbmYgPSBJS1NE Q09ORjsgICAgICAgICAgICAgLyogSUtTRCBjb25maWd1cmF0aW9uIGZpbGUgKi8KK2ludCAgICBp a3NkY2YgICA9IDA7ICAgICAgICAgICAgICAgICAgICAvKiBIYXMgSUtTRCBjLmYuIGJlZW4gcHJv Y2Vzc2VkPyAqLworI2VuZGlmIC8qIElLU0RDT05GICovCisKK2ludCBzcnZjZG1zZyA9IDA7ICAg ICAgICAgICAgICAgICAgICAgICAvKiBbU2VydmVyXSBDRCBtZXNzYWdlICovCitjaGFyICogY2Rt c2dmaWxlWzhdID0geyBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwgfTsK K2NoYXIgKiBjZG1zZ3N0ciA9IE5VTEw7CitjaGFyICogY2tjZHBhdGggPSBOVUxMOworCisjaWZk ZWYgTkxDSEFSICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVGV4dC1maWxlIGxpbmUgdGVy bWluYXRvciAqLworQ0hBUiBmZW9sID0gTkxDSEFSOworI2Vsc2UKK0NIQVIgZmVvbCA9IDA7Cisj ZW5kaWYgLyogTkxDSEFSICovCisKK2ludCBmYmxrc2l6ID0gREJMS1NJWjsgICAgICAgICAgLyog RmlsZSBibG9ja3NpemUgKi8KK2ludCBmcmVjbCA9IERMUkVDTDsgICAgICAgICAgICAgLyogRmls ZSByZWNvcmQgbGVuZ3RoICovCitpbnQgZnJlY2ZtID0gWFlGRl9TOyAgICAgICAgICAgIC8qIEZp bGUgcmVjb3JkIGZvcm1hdCAoZGVmYXVsdCA9IHN0cmVhbSkgKi8KK2ludCBmb3JnID0gWFlGT19T OyAgICAgICAgICAgICAgLyogRmlsZSBvcmdhbml6YXRpb24gKHNlcXVlbnRpYWwpICovCitpbnQg ZmNjdHJsID0gWFlGUF9OOyAgICAgICAgICAgIC8qIEZpbGUgY2FycmlhZ2UgY29udHJvbCAoY3Ry bCBjaGFycykgKi8KK2ludCBmaWxlY2FzZSA9IEZJTEVDQVNFOyAgICAgICAgLyogQ2FzZSBtYXR0 ZXJzIGluIGZpbGVuYW1lcyAqLworaW50IHN0YXRoYWNrID0gMTsgICAgICAgICAgICAgICAvKiBG YXN0IGRpcmVjdG9yeSBsb29rdXBzIGJ5IGRlZmF1bHQgKi8KKworY2hhciB1aWRidWZbVUlEQlVG TEVOXSA9IHsgTlVMLCBOVUwgfTsgIC8qIFVzZXIgSUQgYnVmZmVyICovCitpbnQgY2ZpbGVmID0g MDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogQXBwbGljYXRpb24gKCJrZXJiYW5nIikgZmls ZSBmbGFnICovCitjaGFyIGNtZGZpbFtDS01BWFBBVEggKyAxXSA9IHsgTlVMLCBOVUwgfTsgLyog QXBwbGljYXRpb24gZmlsZSBuYW1lICovCitpbnQgaGF2ZXVybCA9IDA7ICAgICAgICAgICAgICAg ICAgICAgICAgLyogVVJMIGdpdmVuIG9uIGNvbW1hbmQgbGluZSAqLworCisjaWZuZGVmIE5PWEZF UgorLyogTXVsdGktcHJvdG9jb2wgc3VwcG9ydCAqLworCitzdHJ1Y3QgY2tfcCBwdGFiW05QUk9U T1NdID0geyAgICAgICAgICAgLyogSW5pdGlhbGl6ZSB0aGUgS2VybWl0IHBhcnQgLi4uICovCisg IHsgIktlcm1pdCIsCisgICAgRFJQU0laLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog UmVjZWl2ZSBwYWNrZXQgc2l6ZSAqLworICAgIERTUFNJWiwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIFNlbmQgcGFja2V0IHNpemUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBTZW5kLXBhY2tldC1zaXplLXNldCBmbGFnICovCisgICAgREZXU0la LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogV2luZG93IHNpemUgKi8KKworI2lmZGVm IE5FV0RFRkFVTFRTCisgICAgUFhfQ0FVLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog Q29udHJvbCBjaGFyIHVucHJlZml4aW5nLi4uICovCisjZWxzZQorICAgIFBYX0FMTCwKKyNlbmRp ZiAvKiBORVdERUZBVUxUUyAqLworCisjaWZkZWYgVk1TICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogRGVmYXVsdCBmaWxlbmFtZSBjb2xsaXNpb24gYWN0aW9uICovCisgICAgWFlGWF9Y LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUkVQTEFDRSBmb3IgVkFYL1ZNUyAqLwor I2Vsc2UKKyAgICBYWUZYX0IsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBCQUNLVVAg Zm9yIGV2ZXJ5Ym9keSBlbHNlICovCisjZW5kaWYgLyogVk1TICovCisKKyNpZmRlZiBPUzIgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGbGFnIGZvciBmaWxlIG5hbWUgY29udmVyc2lv biAqLworICAgIFhZRk5fTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExpdGVyYWwg Zm9yIE9TMiAqLworI2Vsc2UKKyAgICBYWUZOX0MsICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBDb252ZXJ0ZWQgZm9yIG90aGVycyAqLworI2VuZGlmIC8qIE9TMiAqLworCisgICAgUEFU SF9PRkYsICAgICAgICAgICAgICAgICAgIC8qIFNlbmQgcGF0aG5hbWVzIE9GRiAqLworICAgIFBB VEhfQVVUTywgICAgICAgICAgICAgICAgICAvKiBSZWNlaXZlIHBhdGhuYW1lcyBBVVRPICovCisg ICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgIC8qIEhvc3QgcmVjZWl2ZSBpbml0aWF0aW9u IHN0cmluZyAoYmluYXJ5KSAqLworICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAvKiBI b3N0IHJlY2VpdmUgaW5pdGlhdGlvbiBzdHJpbmcgKHRleHQpICAgKi8KKyAgICBOVUxMLCAgICAg ICAgICAgICAgICAgICAgICAgLyogSG9zdCBzZXJ2ZXIgc3RyaW5nICovCisgICAgTlVMTCwgICAg ICAgICAgICAgICAgICAgICAgIC8qIEV4dGVybmFsIHByb3RvY29sIHNlbmQgY29tbWFuZCAoYmlu YXJ5KSAqLworICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAvKiBFeHRlcm5hbCBwcm90 b2NvbCBzZW5kIGNvbW1hbmQgKHRleHQpICAgKi8KKyAgICBOVUxMLCAgICAgICAgICAgICAgICAg ICAgICAgLyogRXh0ZXJuYWwgcHJvdG9jb2wgcmVjZWl2ZSBjb21tYW5kIChiaW4pICovCisgICAg TlVMTCB9ICAgICAgICAgICAgICAgICAgICAgIC8qIEV4dGVybmFsIHByb3RvY29sIHJlY2VpdmUg Y29tbWFuZCAodHh0KSAqLworI2lmZGVmIENLX1hZWgorLAoreyJYTU9ERU0iLCAgICAxMjgsMTI4 LC0xLC0xLCAgIDEsLTEsLTEsMCwwLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEx9 LAoreyJYTU9ERU0tQ1JDIiwxMjgsMTI4LC0xLC0xLCAgLTEsLTEsLTEsMCwwLE5VTEwsTlVMTCxO VUxMLE5VTEwsTlVMTCxOVUxMLE5VTEx9LAoreyJZTU9ERU0iLCAgIC0xLCAtMSwtMSwtMSwgICAg LTEsLTEsLTEsMCwwLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEx9LAoreyJZTU9E RU0tZyIsIC0xLCAtMSwtMSwtMSwgICAgLTEsLTEsLTEsMCwwLE5VTEwsTlVMTCxOVUxMLE5VTEws TlVMTCxOVUxMLE5VTEx9LAoreyJaTU9ERU0iLCAgIC0xLCAtMSwtMSwtMSxQWF9XSUwsLTEsLTEs MCwwLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEx9LAoreyJPdGhlciIsICAgIC0x LCAtMSwtMSwtMSwgICAgLTEsLTEsLTEsMCwwLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxM LE5VTEx9CisjZW5kaWYgLyogQ0tfWFlaICovCit9OworCisvKiBEZWNsYXJhdGlvbnMgZm9yIFNl bmQtSW5pdCBQYXJhbWV0ZXJzICovCisKK2ludCBzcHNpeiA9IERTUFNJWiwgICAgICAgICAgICAg ICAgICAgICAvKiBDdXJyZW50IHBhY2tldCBzaXplIHRvIHNlbmQgKi8KKyAgICBzcG1heCA9IERT UFNJWiwgICAgICAgICAgICAgICAgICAgICAvKiBCaWdnZXN0IHBhY2tldCBzaXplIHdlIGNhbiBz ZW5kICovCisgICAgbGFzdHNwbWF4ID0gRFNQU0laLCAgICAgICAgICAgICAgICAgLyogU2VuZC1w YWNrZXQgc2l6ZSBsYXN0IHVzZWQgKi8KKyAgICBzcHNpenIgPSBEU1BTSVosICAgICAgICAgICAg ICAgICAgICAvKiBTZW5kLXBhY2tldCBzaXplIHJlcXVlc3RlZCAqLworICAgIHNwc2l6ZiA9IDAs ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZsYWcgdG8gb3ZlcnJpZGUgc2l6ZSBuZWdvdGlh dGlvbiAqLworICAgIHJwc2l6ID0gRFJQU0laLCAgICAgICAgICAgICAgICAgICAgIC8qIEJpZ2dl c3Qgd2Ugd2FudCB0byByZWNlaXZlICovCisgICAgdXJwc2l6ID0gRFJQU0laLCAgICAgICAgICAg ICAgICAgICAgLyogVXNlci1yZXF1ZXN0ZWQgcmVjZWl2ZSBwa3Qgc2l6ZSAqLworICAgIG1heHJw cyA9IE1BWFJQLCAgICAgICAgICAgICAgICAgICAgIC8qIE1heGltdW0gaW5jb21pbmcgbG9uZyBw YWNrZXQgc2l6ZSAqLworICAgIG1heHNwcyA9IE1BWFNQLCAgICAgICAgICAgICAgICAgICAgIC8q IE1heGltdW0gb3V0Ym91bmQgbC5wLiBzaXplICovCisgICAgbWF4dHJ5ID0gTUFYVFJZLCAgICAg ICAgICAgICAgICAgICAgLyogTWF4aW11bSByZXRyaWVzIHBlciBwYWNrZXQgKi8KKyAgICB3c2xv dHMgPSAxLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXaW5kb3cgc2l6ZSBjdXJyZW50bHkg aW4gdXNlICovCisgICAgd3Nsb3RyID0gREZXU0laLCAgICAgICAgICAgICAgICAgICAgLyogV2lu ZG93IHNpemUgZnJvbSBTRVQgV0lORE9XICovCisgICAgd3Nsb3RuID0gMSwgICAgICAgICAgICAg ICAgICAgICAgICAgLyogV2luZG93IHNpemUgbmVnb3RpYXRlZCBpbiBTLXBrdCAqLworICAgIHRp bWVvdXRzID0gMCwgICAgICAgICAgICAgICAgICAgICAgIC8qIEZvciBzdGF0aXN0aWNzIHJlcG9y dGluZyAqLworICAgIHNwYWNrZXRzID0gMCwgICAgICAgICAgICAgICAgICAgICAgIC8qICAuLi4g Ki8KKyAgICBycGFja2V0cyA9IDAsICAgICAgICAgICAgICAgICAgICAgICAvKiAgLi4uICovCisg ICAgcmV0cmFucyA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgLyogIC4uLiAqLworICAgIGNy dW5jaGVkID0gMCwgICAgICAgICAgICAgICAgICAgICAgIC8qICAuLi4gKi8KKyAgICB3bWF4ID0g MCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgLi4uICovCisgICAgd2N1ciA9IDAsICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogIC4uLiAqLworICAgIHNydmlkbCA9IDAsICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIFNlcnZlciBpZGxlIHRpbWVvdXQgKi8KKyAgICBzcnZkaXMg PSAxLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTZXJ2ZXIgZmlsZSB4ZmVyIGRpc3BsYXkg Ki8KKyAgICBzcnZ0aW0gPSBEU1JWVElNLCAgICAgICAgICAgICAgICAgICAvKiBTZXJ2ZXIgY29t bWFuZCB3YWl0IHRpbWVvdXQgKi8KKyAgICBzcnZwaW5nID0gMSwgICAgICAgICAgICAgICAgICAg ICAgICAvKiBTZXJ2ZXIga2VlcGFsaXZlICovCisvKgorICB0aW1pbnQgaXMgdGhlIHRpbWVvdXQg aW50ZXJ2YWwgSSB1c2Ugd2hlbiB3YWl0aW5nIGZvciBhIHBhY2tldC4KKyAgcGt0dGltIGlzIHRo ZSBTRVQgUkVDRUlWRSBUSU1FT1VUIHZhbHVlLCBzZW50IHRvIHRoZSBvdGhlciBLZXJtaXQuCisg IHJ0aW1vIGlzIHRoZSBTRVQgU0VORCBUSU1FT1VUIHZhbHVlLiAgcnRpbW8gaXMgdGhlIGluaXRp YWwgdmFsdWUgb2YKKyAgdGltaW50LiAgdGltaW50IGlzIGNoYW5nZWQgYnkgdGhlIHZhbHVlIGlu IHRoZSBpbmNvbWluZyBuZWdvdGlhdGlvbgorICBwYWNrZXQgdW5sZXNzIGEgU0VUIFNFTkQgVElN RU9VVCBjb21tYW5kIHdhcyBnaXZlbi4KKyovCisgICAgdGltaW50ID0gRE1ZVElNLCAgICAgICAg ICAgICAgICAgICAgLyogVGltZW91dCBpbnRlcnZhbCBJIHVzZSAqLworICAgIHBrdHRpbSA9IFVS VElNRSwgICAgICAgICAgICAgICAgICAgIC8qIFRpbWVvdXQgSSB3YW50IHlvdSB0byB1c2UgKi8K KyAgICBydGltbyA9IERNWVRJTSwgICAgICAgICAgICAgICAgICAgICAvKiBOb3JtYWwgcGFja2V0 IHdhaXQgdGltZW91dCAqLworICAgIHRpbWVmID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIEZsYWcgdG8gb3ZlcnJpZGUgd2hhdCB5b3UgYXNrICovCisjaWZkZWYgQ0tfVElNRVJTCisg ICAgcnR0ZmxnID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAgLyogVXNlIGR5bmFtaWMgcm91 bmQtdHJpcCB0aW1lcnMgKi8KKyNlbHNlCisgICAgcnR0ZmxnID0gMCwgICAgICAgICAgICAgICAg ICAgICAgICAgLyogVXNlIGZpeGVkIHRpbWVyICovCisjZW5kaWYgLyogQ0tfVElNRVJTICovCisg ICAgbWludGltZSA9IDEsICAgICAgICAgICAgICAgICAgICAgICAgLyogTWluaW11bSB0aW1lb3V0 ICovCisgICAgbWF4dGltZSA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgLyogTWF4aW11bSB0 aW1lb3V0ICovCisKKyAgICBucGFkID0gTVlQQUROLCAgICAgICAgICAgICAgICAgICAgICAvKiBI b3cgbXVjaCBwYWRkaW5nIHRvIHNlbmQgKi8KKyAgICBteXBhZG4gPSBNWVBBRE4sICAgICAgICAg ICAgICAgICAgICAvKiBIb3cgbXVjaCBwYWRkaW5nIHRvIGFzayBmb3IgKi8KKyAgICBiY3RyID0g REZCQ1QsICAgICAgICAgICAgICAgICAgICAgICAvKiBCbG9jayBjaGVjayB0eXBlIHJlcXVlc3Rl ZCAqLworICAgIGJjdHUgPSAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEJsb2NrIGNo ZWNrIHR5cGUgdXNlZCAqLworICAgIGJjdGwgPSAxLCAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIEJsb2NrIGNoZWNrIGxlbmd0aCAqLworICAgIGJjdGYgPSAwLAkJCQkvKiBCbG9jayBjaGVj ayB0eXBlIDMgZm9yY2VkIG9uIGFsbCAqLworICAgIGNfc2F2ZSA9IC0xLCAgICAgICAgICAgICAg ICAgICAgICAgIC8qIEJsb2NrIGNoZWNrIHNhdmluZyBhbmQgcmVzdG9yaW5nICovCisgICAgc3Nf c2F2ZSA9IC0xLCAgICAgICAgICAgICAgICAgICAgICAgLyogU2xvdy1zdGFydCBzYXZpbmcgYW5k IHJlc3RvcmluZyAqLworICAgIGVicSA9ICBNWUVCUSwgICAgICAgICAgICAgICAgICAgICAgIC8q IDh0aCBiaXQgcHJlZml4ICovCisgICAgZWJxZmxnID0gMCwgICAgICAgICAgICAgICAgICAgICAg ICAgLyogOHRoLWJpdCBxdW90aW5nIGZsYWcgKi8KKyAgICBycWYgPSAtMSwgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBGbGFnIHVzZWQgaW4gOGJxIG5lZ290aWF0aW9uICovCisgICAgcnEg PSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVjZWl2ZWQgOGJxIGJpZCAqLwor ICAgIHNxID0gJ1knLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNlbnQgOGJxIGJpZCAq LworICAgIHJwdCA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlcGVhdCBjb3Vu dCAqLworICAgIHJwdHEgPSBNWVJQVFEsICAgICAgICAgICAgICAgICAgICAgIC8qIFJlcGVhdCBw cmVmaXggKi8KKyAgICBycHRmbGcgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXBl YXQgcHJvY2Vzc2luZyBmbGFnICovCisgICAgcnB0ZW5hID0gMSwgICAgICAgICAgICAgICAgICAg ICAgICAgLyogUmVwZWF0IHByb2Nlc3NpbmcgZW5hYmxlZCAqLworICAgIHhmcmNhbiA9IDEsICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIFRyYW5zZmVyIGNhbmNlbGxhdGlvbiBlbmFibGVkICov CisgICAgeGZyaW50ID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAgLyogVHJhbnNmZXIgaW50 ZXJydXB0aW9uIGVuYWJsZWQgKi8KKyAgICB4ZnJjaHIgPSAzLCAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBUcmFuc2ZlciBjYW5jZWwgY2hhciA9IEN0cmwtQyAqLworICAgIHhmcm51bSA9IDMs ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5lZWQgdGhyZWUgb2YgdGhlbSBieSBkZWZhdWx0 ICovCisgICAgZ194ZnJ4bGEgPSAtMTsKKyAgICBjaGFyICogeGZybXNnID0gTlVMTDsgICAgICAg ICAgICAgICAvKiBNZXNzYWdlIGZvciBmLnQuIGRpc3BsYXkgc2NyZWVuICovCisjZW5kaWYgLyog Tk9YRkVSICovCisKKyNpZmRlZiBOT0NTRVRTCitpbnQgeGZyeGxhID0gMDsgICAgICAgICAgICAg ICAgICAgICAgICAgLyogQ2hhcmFjdGVyLXNldCB0cmFuc2xhdGlvbiAqLworI2Vsc2UKK2ludCB4 ZnJ4bGEgPSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBlbmFibGVkIG9yIGRpc2FibGVk ICovCisjZW5kaWYgLyogTk9DU0VUUyAqLworCitpbnQgaGF2ZWxmcyA9IDA7CQkJLyogTGFyZ2Ug ZmlsZSBzdXBwb3J0IGF2YWlsYWJsZSAqLworCisjaWZuZGVmIE5PWEZFUgoraW50IGVwa3RmbGcg PSAwOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEUtUEFDS0VUIGNvbW1hbmQgYWN0aXZlICov CisKK2ludCBjYXBhcyAgPSA5LCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQb3NpdGlvbiBv ZiBDYXBhYmlsaXRpZXMgKi8KKyAgICBscGNhcGIgPSAyLCAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBMb25nIFBhY2tldCBjYXBhYmlsaXR5ICovCisgICAgbHBjYXByID0gMSwgICAgICAgICAg ICAgICAgICAgICAgICAgLyogIHJlcXVlc3RlZCAqLworICAgIGxwY2FwdSA9IDAsICAgICAgICAg ICAgICAgICAgICAgICAgIC8qICB1c2VkICovCisgICAgc3djYXBiID0gNCwgICAgICAgICAgICAg ICAgICAgICAgICAgLyogU2xpZGluZyBXaW5kb3cgY2FwYWJpbGl0eSAqLworICAgIHN3Y2FwciA9 IDEsICAgICAgICAgICAgICAgICAgICAgICAgIC8qICByZXF1ZXN0ZWQgKGFsbG93ZWQpICovCisg ICAgc3djYXB1ID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogIHVzZWQgKi8KKyAgICBh dGNhcGIgPSA4LCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBdHRyaWJ1dGUgY2FwYWJpbGl0 eSAqLworICAgIGF0Y2FwciA9IDEsICAgICAgICAgICAgICAgICAgICAgICAgIC8qICByZXF1ZXN0 ZWQgKi8KKyAgICBhdGNhcHUgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgdXNlZCAq LworICAgIHJzY2FwYiA9IDE2LCAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJFU0VORCBjYXBh YmlsaXR5ICovCisgICAgcnNjYXByID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAgLyogIHJl cXVlc3RlZCBieSBkZWZhdWx0ICovCisgICAgcnNjYXB1ID0gMCwgICAgICAgICAgICAgICAgICAg ICAgICAgLyogIHVzZWQgKi8KKyAgICBsc2NhcGIgPSAzMiwgICAgICAgICAgICAgICAgICAgICAg ICAvKiBMb2NraW5nIFNoaWZ0IGNhcGFiaWxpdHkgKi8KKyAgICBsc2NhcHIgPSAxLCAgICAgICAg ICAgICAgICAgICAgICAgICAvKiAgcmVxdWVzdGVkIGJ5IGRlZmF1bHQgKi8KKyAgICBsc2NhcHUg PSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgdXNlZCAqLworCisvKiBGbGFncyBmb3Ig d2hldGhlciB0byB1c2UgcGFydGljdWxhciBhdHRyaWJ1dGVzICovCisKK2ludCBhdGVuY2kgPSAx LCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFbmNvZGluZyBpbiAqLworICAgIGF0ZW5jbyA9 IDEsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVuY29kaW5nIG91dCAqLworICAgIGF0ZGF0 aSA9IDEsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERhdGUgaW4gKi8KKyAgICBhdGRhdG8g PSAxLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEYXRlIG91dCAqLworICAgIGF0ZGlzaSA9 IDEsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERpc3Bvc2l0aW9uIGluL291dCAqLworICAg IGF0ZGlzbyA9IDEsCisgICAgYXRsZW5pID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAgLyog TGVuZ3RoIGluL291dCAoYm90aCBraW5kcykgKi8KKyAgICBhdGxlbm8gPSAxLAorICAgIGF0Ymxr aSA9IDEsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEJsb2Nrc2l6ZSBpbi9vdXQgKi8KKyAg ICBhdGJsa28gPSAxLAorICAgIGF0dHlwaSA9IDEsICAgICAgICAgICAgICAgICAgICAgICAgIC8q IEZpbGUgdHlwZSBpbi9vdXQgKi8KKyAgICBhdHR5cG8gPSAxLAorICAgIGF0c2lkaSA9IDEsICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIFN5c3RlbSBJRCBpbi9vdXQgKi8KKyAgICBhdHNpZG8g PSAxLAorICAgIGF0c3lzaSA9IDEsICAgICAgICAgICAgICAgICAgICAgICAgLyogU3lzdGVtLWRl cGVuZGVudCBwYXJhbWV0ZXJzIGluL291dCAqLworICAgIGF0c3lzbyA9IDE7CisKK2ludCBkaXNw b3MgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEaXNwb3NpdGlvbiAqLworCisjaWZk ZWYgQ0tfUEVSTVMKK2ludCBhdGxwcmkgPSAxLAorICAgIGF0bHBybyA9IDEsCisgICAgYXRncHJp ID0gMSwKKyAgICBhdGdwcm8gPSAxOworI2VuZGlmIC8qIENLX1BFUk1TICovCisKK2ludCBhdGZy bWkgPSAxLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZWNvcmQgRm9ybWF0IGluL291dCAq LworICAgIGF0ZnJtbyA9IDE7CisKKyNpZmRlZiBTVFJBVFVTCitpbnQgYXRjcmVpID0gMSwgICAg ICAgICAgICAgICAgICAgICAgICAgLyogQ3JlYXRvciBJRCBpbi9vdXQgKi8KKyAgICBhdGNyZW8g PSAxLAorICAgIGF0YWN0aSA9IDEsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFjY291bnQg aW4vb3V0ICovCisgICAgYXRhY3RvID0gMTsKKyNlbmRpZiAvKiBTVFJBVFVTICovCisKK2ludCBz cHJtbGVuID0gLTE7ICAgICAgICAgICAgICAgICAgICAgICAvKiBTZW5kL1JlY2VpdmUgcHJvdG9j b2wgcGFyYW1ldGVyICovCitpbnQgcnBybWxlbiA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAg Lyogc3RyaW5nIGxlbmd0aCBsaW1pdHMgKi8KK2ludCBzZW5kaXBrdHMgPSAxOyAgICAgICAgICAg ICAgICAgICAgICAvKiBTZW5kIEkgcGFja2V0cyAqLworCitDSEFSIHBhZGNoID0gTVlQQURDLCAg ICAgICAgICAgICAgICAgICAgLyogUGFkZGluZyBjaGFyYWN0ZXIgdG8gc2VuZCAqLworICAgIG15 cGFkYyA9IE1ZUEFEQywgICAgICAgICAgICAgICAgICAgIC8qIFBhZGRpbmcgY2hhcmFjdGVyIHRv IGFzayBmb3IgKi8KKyAgICBzZW9sID0gTVlFT0wsICAgICAgICAgICAgICAgICAgICAgICAvKiBF bmQtT2YtTGluZSBjaGFyYWN0ZXIgdG8gc2VuZCAqLworICAgIGVvbCA9IE1ZRU9MLCAgICAgICAg ICAgICAgICAgICAgICAgIC8qIEVuZC1PZi1MaW5lIGNoYXJhY3RlciB0byBsb29rIGZvciAqLwor ICAgIGN0bHEgPSBDVExRLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvbnRyb2wgcHJlZml4 IGluIGluY29taW5nIGRhdGEgKi8KKyAgICBteWN0bHEgPSBDVExRLCAgICAgICAgICAgICAgICAg ICAgICAvKiBPdXRib3VuZCBjb250cm9sIGNoYXJhY3RlciBwcmVmaXggKi8KKyAgICBteXJwdHEg PSBNWVJQVFE7ICAgICAgICAgICAgICAgICAgICAvKiBSZXBlYXQgcHJlZml4IEkgd2FudCB0byB1 c2UgKi8KKworaW50IHJwdG1pbiA9IDM7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlcGVh dC1jb3VudCBtaW5pbXVtICovCisKK2ludCB1c2VwaXBlcyA9IDAsICAgICAgICAgICAgICAgICAg ICAgICAvKiBVc2VkIGZvciB4ZmVyIHRvL2Zyb20gcGlwZXMgKi8KKyAgICBnX3VzZXBpcGVzID0g LTE7CisKK2NoYXIgKiBmaWxlZmlsZSA9IE5VTEw7ICAgICAgICAgICAgICAgICAvKiBGaWxlIGNv bnRhaW5pbmcgbGlzdCBvZiBmaWxlbmFtZXMgKi8KKy8qIENEIG1lc3NhZ2UgZmlsZW5hbWUgbGlz dCAqLworCitjaGFyIHdob2FyZXVbMTZdID0geyBOVUwsIE5VTCB9OyAgICAgICAgLyogU3lzdGVt IElEIG9mIG90aGVyIEtlcm1pdCAqLworaW50IHN5c2luZGV4ID0gLTE7ICAgICAgICAgICAgICAg ICAgICAgIC8qIGFuZCBpbmRleCB0byBpdHMgc3lzdGVtIElEIHN0cnVjdCAqLworaW50IG15aW5k ZXggID0gLTE7CitpbnQgd2VhcmVhbGlrZSA9IDA7ICAgICAgICAgICAgICAgICAgICAgLyogMiBL ZXJtaXRzIGhhdmUgY29tcGF0aWJsZSBzeXNpZHMgKi8KK2NoYXIgKiBja3N5c2lkID0gICAgICAg ICAgICAgICAgICAgICAgICAvKiBNeSBzeXN0ZW0gSUQgKi8KKyNpZmRlZiBVTklYCisgICAgIlUx IgorI2Vsc2UKKyNpZmRlZiBWTVMKKyAgICAiRDciCisjZWxzZQorI2lmZGVmIE9TSworICAgICJV RCIKKyNlbHNlCisjaWZkZWYgQU1JR0EKKyAgICAiTDMiCisjZWxzZQorI2lmZGVmIE1BQworICAg ICJBMyIKKyNlbHNlCisjaWZkZWYgT1MyCisjaWZkZWYgTlQKKyAgICAiVU4iCisjZWxzZSAvKiBO VCAqLworICAgICJVTyIKKyNlbmRpZiAvKiBOVCAqLworI2Vsc2UgLyogT1MyICovCisjaWZkZWYg ZGF0YWdlbmVyYWwKKyAgICAiRjMiCisjZWxzZQorI2lmZGVmIEdFTURPUworICAgICJLMiIKKyNl bHNlCisjaWZkZWYgU1RSQVRVUworICAgICJNViIKKyNlbHNlCisgICAgIiIKKyNlbmRpZiAvKiBT VFJBVFVTICovCisjZW5kaWYgLyogR0VNRE9TICovCisjZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8K KyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBNQUMgKi8KKyNlbmRpZiAvKiBBTUlHQSAqLwor I2VuZGlmIC8qIE9TSyAqLworI2VuZGlmIC8qIFZNUyAqLworI2VuZGlmIC8qIFVOSVggKi8KKyAg ICA7CisKK2ludCBvb3B0cyA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBPLVBhY2tl dCBPcHRpb25zICovCitpbnQgb21vZGUgPSAtMTsgICAgICAgICAgICAgICAgICAgICAgICAgLyog Ty1QYWNrZXQgVHJhbnNmZXIgTW9kZSAqLworaW50IG9uYW1lID0gLTE7ICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIE8tUGFja2V0IEZpbGVuYW1lIE9wdGlvbnMgKi8KK2ludCBvcGF0aCA9IC0x OyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBPLVBhY2tldCBQYXRobmFtZSBPcHRpb25zICov CisKK3N0cnVjdCB6YXR0ciBpYXR0cjsgICAgICAgICAgICAgICAgICAgICAvKiBJbmNvbWluZyBm aWxlIGF0dHJpYnV0ZXMgKi8KKworI2lmZGVmIFZNUworLyogVk1TIGxhYmVsZWQgZmlsZSBkZWZh dWx0IG9wdGlvbnMgLSBuYW1lIG9ubHkuICovCitpbnQgbGZfb3B0cyA9IExCTF9OQU07CisjZWxz ZQorI2lmZGVmIE9TMgorLyogT1MvMiBsYWJlbGVkIGZpbGUgZGVmYXVsdCBvcHRpb25zLCBhbGwg YXR0cmlidXRlcyBidXQgYXJjaGl2ZWQuICovCit1bnNpZ25lZCBsb25nIGludCBsZl9vcHRzID0g TEJMX0VYVHxMQkxfSElEfExCTF9ST3xMQkxfU1lTOworI2Vsc2UKK2ludCBsZl9vcHRzID0gMDsK KyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKworLyogUGFja2V0LXJlbGF0ZWQg dmFyaWFibGVzICovCisKK2ludCBwa3RudW0gPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAv KiBDdXJyZW50IHBhY2tldCBudW1iZXIgKi8KKyAgICBzbmR0eXAgPSAwLCAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBUeXBlIG9mIHBhY2tldCBqdXN0IHNlbnQgKi8KKyAgICByY3Z0eXAgPSAw LCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUeXBlIG9mIHBhY2tldCBqdXN0IHJlY2VpdmVk ICovCisgICAgcnNuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVjZWl2ZWQg cGFja2V0IHNlcXVlbmNlIG51bWJlciAqLworICAgIHJsbiwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIFJlY2VpdmVkIHBhY2tldCBsZW5ndGggKi8KKyAgICBzaXplLCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBDdXJyZW50IHNpemUgb2Ygb3V0cHV0IHBrdCBkYXRh ICovCisgICAgb3NpemUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUHJldmlvdXMg b3V0cHV0IHBhY2tldCBkYXRhIHNpemUgKi8KKyAgICBtYXhzaXplLCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBNYXggc2l6ZSBmb3IgYnVpbGRpbmcgZGF0YSBmaWVsZCAqLworICAgIHNw a3RsID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExlbmd0aCBwYWNrZXQgYmVpbmcg c2VudCAqLworICAgIHJwa3RsID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExlbmd0 aCBvZiBwYWNrZXQganVzdCByZWNlaXZlZCAqLworICAgIHBrdHBhdXMgPSAwLCAgICAgICAgICAg ICAgICAgICAgICAgIC8qIEludGVycGFja2V0IHBhdXNlIGludGVydmFsLCBtc2VjICovCisgICAg cnByaW50ZiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUkVNT1RFIFBSSU5UIGZsYWcg Ki8KKyAgICBybWFpbGYsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBNQUlMIGZsYWcg Ki8KKyAgICB4ZmVyc3RhdCA9IC0xLCAgICAgICAgICAgICAgICAgICAgICAvKiBTdGF0dXMgb2Yg bGFzdCB0cmFuc2FjdGlvbiAqLworICAgIGZpbGVzdGF0dXMgPSAwOyAgICAgICAgICAgICAgICAg ICAgIC8qIFN0YXR1cyBvZiBsYXN0IGZpbGUgdHJhbnNmZXIgKi8KKworQ0hBUiBwa3Rtc2didWZb UEtUTVNHTEVOKzFdOworQ0hBUiAqZXBrdG1zZyA9IHBrdG1zZ2J1ZjsKKworI2lmZGVmIHBkcDEx CitpbnQgc3J2Y21kbGVuID0gTUFYUlA7ICAgICAgICAgICAgICAgICAgLyogc3J2Y21kIGJ1ZmZl ciBsZW5ndGggKi8KKyNlbHNlCisjaWZkZWYgRFlOQU1JQworaW50IHNydmNtZGxlbiA9IE1BWFJQ OworI2Vsc2UKK2ludCBzcnZjbWRsZW4gPSAwOworI2VuZGlmIC8qIERZTkFNSUMgKi8KKyNlbmRp ZiAvKiBwZHAxMSAqLworCitDSEFSCisjaWZkZWYgcGRwMTEKKyAgICBzcnZjbWRidWZbTUFYUlAr NF0sCisgICAgKnNydmNtZCA9IHNydmNtZGJ1ZiwKKyNlbHNlCisjaWZkZWYgRFlOQU1JQworICAg ICpzcnZjbWQgPSAoQ0hBUiAqKTAsICAgICAgICAgICAgICAgIC8qIFdoZXJlIHRvIGRlY29kZSBz ZXJ2ZXIgY29tbWFuZCAqLworI2Vsc2UKKyAgICBzcnZjbWRidWZbTUFYUlArNF0sCisgICAgKnNy dmNtZCA9IHNydmNtZGJ1ZiwKKyNlbmRpZiAvKiBEWU5BTUlDICovCisjZW5kaWYgLyogcGRwMTEg Ki8KKyAgICBwYWRidWZbOTZdLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBCdWZmZXIgZm9y IHNlbmQtcGFkZGluZyAqLworICAgICpyZWNwa3QsCisgICAgKnJkYXRhcCwgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogUG9pbnRlciB0byByZWNlaXZlZCBwYWNrZXQgZGF0YSAqLworICAg ICpkYXRhID0gKENIQVIgKikwLCAgICAgICAgICAgICAgICAgIC8qIFBvaW50ZXIgdG8gc2VuZC1w YWNrZXQgZGF0YSAqLworICAgICpzcnZwdHIsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IFBvaW50ZXIgdG8gc3J2Y21kICovCisgICAgbXlzdGNoID0gU09ILCAgICAgICAgICAgICAgICAg ICAgICAgLyogT3V0Ym91bmQgcGFja2V0LXN0YXJ0IGNoYXJhY3RlciAqLworICAgIHN0Y2hyID0g U09IOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEluY29taW5nIHBhY2tldC1zdGFydCBjaGFy YWN0ZXIgKi8KKworLyogRmlsZS1yZWxhdGVkIHZhcmlhYmxlcyAqLworCisjaWZuZGVmIE5PTVNF TkQgICAgICAgICAgICAgICAgICAgICAgICAgLyogTXVsdGlwbGUgU0VORCAqLworc3RydWN0IGZp bGVsaXN0ICogZmlsZWhlYWQgPSBOVUxMOyAgICAgIC8qIFNFTkQgbGlzdCAqLworc3RydWN0IGZp bGVsaXN0ICogZmlsZXRhaWwgPSBOVUxMOworc3RydWN0IGZpbGVsaXN0ICogZmlsZW5leHQgPSBO VUxMOworaW50IGFkZGxpc3QgPSAwOworI2VuZGlmIC8qIE5PTVNFTkQgKi8KKworY2hhciBmaWxu YW1bQ0tNQVhQQVRIICsgMV07ICAgICAgICAgICAgIC8qIE5hbWUgb2YgY3VycmVudCBmaWxlLiAq LworY2hhciBvZmlsbmFtW0NLTUFYUEFUSCArIDFdOyAgICAgICAgICAgIC8qIE9yaWdpbmFsIG5h bWUuICovCisKK2ludCBwaXBlc2VuZCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAvKiBOb256 ZXJvIGlmIHNlbmRpbmcgZnJvbSBwaXBlICovCisjaWZkZWYgUElQRVNFTkQKK2NoYXIgKiBzbmRm aWx0ZXIgPSBOVUxMOyAgICAgICAgICAgICAgICAvKiBTZW5kIGFuZCByZWNlaXZlIGZpbHRlcnMg Ki8KK2NoYXIgKiByY3ZmaWx0ZXIgPSBOVUxMOworI2VuZGlmIC8qIFBJUEVTRU5EICovCisKK2No YXIgKiogc25kYXJyYXkgPSBOVUxMOyAgICAgICAgICAgICAgICAvKiBTRU5EIC9BUlJBWSBwb2lu dGVyIGFuZCByYW5nZSAqLworI2lmbmRlZiBOT1NQTAoraW50IHNuZHhsbyA9IC0xLCBzbmR4aGkg PSAtMSwgc25keGluID0gLTE7CisjZW5kaWYgLyogTk9TUEwgKi8KKyNlbmRpZiAvKiBOT1hGRVIg Ki8KKworI2lmbmRlZiBOT1NFUlZFUgoraW50IG5nZXRwYXRoID0gMDsgICAgICAgICAgICAgICAg ICAgICAgIC8qIEdFVCBzZWFyY2ggcGF0aCAqLworaW50IGZyb21nZXRwYXRoID0gMDsKK2NoYXIg KiBnZXRwYXRoW01BWEdFVFBBVEhdOworY2hhciAqIHhfdXNlciA9IE5VTEw7ICAgICAgICAgICAg ICAgICAgIC8qIFNlcnZlciBsb2dpbiBpbmZvcm1hdGlvbiAqLworY2hhciAqIHhfcGFzc3dkID0g TlVMTDsKK2NoYXIgKiB4X2FjY3QgPSBOVUxMOworI2VuZGlmIC8qIE5PU0VSVkVSICovCisKK2lu dCB4X2xvZ2luID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBMb2dpbiByZXF1aXJlZCAq LworaW50IHhfbG9nZ2VkID0gMDsgICAgICAgICAgICAgICAgICAgICAgIC8qIFVzZXIgaXMgbG9n Z2VkIGluICovCisKK2V4dGVybiBpbnQgdGltZWxpbWl0OworCisjaWZkZWYgQ0tfTE9HSU4KK2lu dCBsb2dpbnRpbW8gPSAzMDA7ICAgICAgICAgICAgICAgICAgICAvKiBMb2dpbiB0aW1lb3V0ICov CitjaGFyICogdXNlcmZpbGUgPSBOVUxMOyAgICAgICAgICAgICAgICAgLyogRm9yYmlkZGVuIHVz ZXIgZmlsZSAqLworI2VuZGlmIC8qIENLX0xPR0lOICovCisjaWZkZWYgSUtTRAorY2hhciAqIGFu b25maWxlID0gTlVMTDsgICAgICAgICAgICAgICAgIC8qIEFub255bW91cyBsb2dpbiBpbml0IGZp bGUgKi8KK2NoYXIgKiBhbm9ucm9vdCA9IE5VTEw7ICAgICAgICAgICAgICAgICAvKiBBbm9ueW1v dXMgZmlsZS1zeXN0ZW0gcm9vdCAqLworaW50IGlrc190aW1vICA9IDMwMDsgICAgICAgICAgICAg ICAgICAgIC8qIDUgbWludXRlcyBpZGxlIHRpbW8gKi8KK2ludCBpa3NfcmV0cnkgPSAzOyAgICAg ICAgICAgICAgICAgICAgICAvKiAzIGF0dGVtcHRzIGF0IGxvZ2luICovCisjZW5kaWYgLyogSUtT RCAqLworCisjaWZkZWYgQ0tTWVNMT0cKK2V4dGVybiBWT0lEIHpzeXNsb2coKTsKK2V4dGVybiBp bnQgY2t4bG9nZ2luZywgY2t4c3lzbG9nOworI2VuZGlmIC8qIENLU1lTTE9HICovCisKK0NLX09G Rl9UIGZzaXplID0gKENLX09GRl9UKTAsCQkvKiBTaXplIG9mIGN1cnJlbnQgZmlsZSAqLworIHNl bmRzdGFydCA9IChDS19PRkZfVCkwLAkJLyogU0VORCBzdGFydCBwb3NpdGlvbiAqLworIGNhbGli cmF0ZSA9IChDS19PRkZfVCkwOwkJLyogTm9uemVybyBpZiBjYWxpYnJhdGlvbiBydW4gKi8KKwor aW50IG56eG9wdHMgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIE9wdGlvbnMgZm9yIG56 eHBhbmQoKSAqLworaW50IG5maWxzID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE51 bWJlciBvZiBmaWxlcyBpbiBmaWxlIGdyb3VwICovCitpbnQgd2lsZGVuYSA9IDE7CQkJLyogV2ls ZGNhcmQgZXhwYW5zaW9uIGVuYWJsZWQgKi8KKyNpZmRlZiBVTklYCitpbnQgd2lsZHhwYW5kID0g MDsgICAgICAgICAgICAgICAgICAgICAgLyogV2hvIGV4cGFuZHMgd2lsZGNhcmRzLCAwPUtlcm1p dC4uICovCisjZWxzZSAvKiBVTklYICovCisjaWZkZWYgU1RSQVRVUworaW50IHdpbGR4cGFuZCA9 IDE7CQkJLyogMT1TaGVsbC4gKi8KKyNlbmRpZiAvKiBTVFJBVFVTICovCisjZW5kaWYgLyogVU5J WCAqLworI2lmZGVmIFVOSVhPUk9TSworaW50IG1hdGNoZG90ID0gMDsgICAgICAgICAgICAgICAg ICAgICAgIC8qIFdoZXRoZXIgdG8gbWF0Y2ggZG90IGZpbGVzICovCisjZWxzZQoraW50IG1hdGNo ZG90ID0gMTsKKyNlbmRpZiAvKiBVTklYT1JPU0sgKi8KK2ludCBtYXRjaGZpZm8gPSAwOwkJCS8q IFdoZXRoZXIgdG8gbWF0Y2ggRklGTyAiZmlsZXMiICovCitpbnQgY2xmaWxzID0gMDsgICAgICAg ICAgICAgICAgICAgICAgICAgLyogRmxhZyBmb3IgY29tbWFuZC1saW5lIGZpbGVzICovCitpbnQg c3RheWZsZyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgLyogRmxhZyBmb3IgInN0YXkiLCBp LmUuICItUyIgKi8KK2ludCB4ZmluaXNoID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBG bGFnIGZvciBGSU5JU0ggPSBFWElUICovCitsb25nIHp0dXNlYyA9IC0xTDsgICAgICAgICAgICAg ICAgICAgICAgLyogVXNlZCB3aXRoIHp0aW1lKCkgKi8KK2xvbmcgenRtc2VjID0gLTFMOyAgICAg ICAgICAgICAgICAgICAgICAvKiBEaXR0byAqLworCisvKiBDb21tdW5pY2F0aW9uIGRldmljZSAv IGNvbm5lY3Rpb24gdmFyaWFibGVzICovCisKK2NoYXIgdHRuYW1lW1RUTkFNTEVOKzFdOyAgICAg ICAgICAgICAgICAvKiBOYW1lIG9mIGNvbW11bmljYXRpb24gZGV2aWNlICovCisKKyNpZmRlZiBN QUMKK2ludCBjb25uZWN0ZWQgPSAwOyAgICAgICAgICAgICAgICAgICAgICAvKiBUcnVlIGlmIGNv bm5lY3RlZCAqLworaW50IHN0YXJ0Y29ubmVjdGVkOyAgICAgICAgICAgICAgICAgICAgIC8qIGlu aXRpYWwgc3RhdGUgb2YgY29ubmVjdGVkICovCisjZW5kaWYgLyogTUFDICovCisKK2xvbmcgc3Bl ZWQgPSAtMUw7ICAgICAgICAgICAgICAgICAgICAgICAvKiBDb21tdW5pY2F0aW9uIGRldmljZSBz cGVlZCAqLworaW50IHdhc2Nsb3NlZCA9IDA7ICAgICAgICAgICAgICAgICAgICAgIC8qIENvbm5l Y3Rpb24gd2FzIGp1c3QgY2xvc2VkICovCitpbnQgd2h5Y2xvc2VkID0gV0NfUkVNTzsgICAgICAg ICAgICAgICAgLyogd2h5IGl0IHdhcyBjbG9zZWQgKi8KK2ludCBxbnhwb3J0bG9jayA9IDA7ICAg ICAgICAgICAgICAgICAgICAvKiBRTlggcG9ydCBsb2NraW5nIG9uL29mZiAqLworCisjaWZuZGVm IENMU09ORElTQworI2RlZmluZSBDTFNPTkRJU0MgMAorI2VuZGlmIC8qIENMU09ORElTQyAqLwor CitpbnQgY3hmbG93W0NYVF9NQVgrMV07ICAgICAgICAgICAgICAgICAgLyogU2VlIGluaXRmbG93 KCkgKi8KKworI2lmbmRlZiBOT1NIT1cKK2NoYXIgKiBmbG9uYW1lW10gPSB7ICAgICAgICAgICAg ICAgICAgICAvKiBGbG93IGNvbnRyb2wgbmFtZXMgKi8KKyAgIm5vbmUiLCAieG9uL3hvZmYiLCAi cnRzL2N0cyIsICJkdHIvY2QiLCAiZXR4L2FjayIsICJzdHJpbmciLAorICAieHh4MSIsICJ4eHgy IiwgImR0ci9jdHMiLCAia2VlcCIsICJhdXRvIgorfTsKK2ludCBuZmxvbmFtZSA9IChzaXplb2Yo ZmxvbmFtZSkgLyBzaXplb2YoY2hhciAqKSk7CisKK2NoYXIgKiBjeG5hbWVbXSA9IHsgICAgICAg ICAgICAgICAgICAgICAvKiBDb25uZWN0aW9uIHR5cGUgbmFtZXMgKi8KKyAgInJlbW90ZSIsICJk aXJlY3Qtc2VyaWFsIiwgIm1vZGVtIiwgInRjcC9pcCIsICJ4LjI1IiwgImRlY25ldCIsCisgICJs YXQiLCAibmV0YmlvcyIsICJuYW1lZC1waXBlIiwgInNzaCIsICJwaXBlIgorfTsKK2ludCBuY3hu YW1lID0gKHNpemVvZihjeG5hbWUpIC8gc2l6ZW9mKGNoYXIgKikpOworI2VuZGlmIC8qIE5PU0hP VyAqLworCitpbnQgcGFyaXR5ID0gREVGUEFSLCAgICAgICAgICAgICAgICAgICAgLyogUGFyaXR5 IHNwZWNpZmllZCwgMCwnZScsJ28nLGV0YyAqLworICAgIGh3cGFyaXR5ID0gMCwgICAgICAgICAg ICAgICAgICAgICAgIC8qIEhhcmR3YXJlIHBhcml0eSBmb3Igc2VyaWFsIHBvcnQgKi8KKyAgICBz dG9wYml0cyA9IC0xLCAgICAgICAgICAgICAgICAgICAgICAvKiBTdG9wIGJpdHMgZm9yIHNlcmlh bCBwb3J0ICovCisgICAgY2xzb25kaXNjID0gQ0xTT05ESVNDLCAgICAgICAgICAgICAgLyogU2Vy aWFsIHBvcnQgY2xvc2Ugb24gZGlzY29ubmVjdCAqLworICAgIGF1dG9wYXIgPSAwLCAgICAgICAg ICAgICAgICAgICAgICAgIC8qIEF1dG9tYXRpYyBwYXJpdHkgY2hhbmdlIGZsYWcgKi8KKyAgICBz b3NpID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTaGlmdC1Jbi9PdXQgZmxhZyAq LworICAgIGZsb3cgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZsb3cgY29udHJv bCAoc2VlIGluaXRmbG93KCkpICovCisgICAgYXV0b2Zsb3cgPSAxLCAgICAgICAgICAgICAgICAg ICAgICAgLyogQXV0b21hdGljIGZsb3cgY29udHJvbCAqLworICAgIHR1cm4gPSAwLCAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIExpbmUgdHVybmFyb3VuZCBoYW5kc2hha2UgZmxhZyAqLwor ICAgIHR1cm5jaCA9IFhPTiwgICAgICAgICAgICAgICAgICAgICAgIC8qIExpbmUgdHVybmFyb3Vu ZCBjaGFyYWN0ZXIgKi8KKyAgICBkdXBsZXggPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAv KiBEdXBsZXgsIGZ1bGwgYnkgZGVmYXVsdCAqLworICAgIGVzY2FwZSA9IERGRVNDLCAgICAgICAg ICAgICAgICAgICAgIC8qIEVzY2FwZSBjaGFyYWN0ZXIgZm9yIGNvbm5lY3QgKi8KKyAgICBja2Rl bGF5ID0gRERFTEFZLCAgICAgICAgICAgICAgICAgICAvKiBJbml0aWFsIGRlbGF5IGJlZm9yZSBz ZW5kaW5nICovCisgICAgdG5sbSA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVGVy bWluYWwgbmV3bGluZSBtb2RlICovCisKKy8qIE5ldHdvcmtzIGZvciBTRVQgSE9TVCAqLworCisj aWZkZWYgQklHQlVGT0sKKyNkZWZpbmUgTVlIT1NUTCAxMDI0CisjZWxzZQorI2RlZmluZSBNWUhP U1RMIDEwMAorI2VuZGlmIC8qIEJJR0JVRk9LICovCisKK2NoYXIgbXlob3N0W01ZSE9TVExdOyAg ICAgICAgICAgICAgICAgICAvKiBMb2NhbCBob3N0IG5hbWUgKi8KK2ludCBuZXR3b3JrID0gMDsg ICAgICAgICAgICAgICAgICAgICAgICAvKiBOZXR3b3JrIHZzIHNlcmlhbCBjb25uZWN0aW9uICov CitpbnQgaW5zZXJ2ZXIgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgLyogUnVubmluZyBhcyBh biBJbnRlcm5ldCBzZXJ2ZXIgKi8KK2ludCBpc2d1ZXN0ID0gMDsgICAgICAgICAgICAgICAgICAg ICAgICAvKiBVc2VyIGlzIGFub255bW91cyAqLworY2hhciAqIGNsaWVudGhvc3QgPSBOVUxMOyAg ICAgICAgICAgICAgIC8qIFBlZXIgaG9zdCBuYW1lIG9yIGFkZHJlc3MgKi8KK2ludCB0Y3BfaW5j b21pbmcgPSAwOyAgICAgICAgICAgICAgICAgICAvKiBJbmNvbWluZyBUQ1AgY29ubmVjdGlvbj8g Ki8KKworI2lmZGVmIE5FVENPTk4KKyNpZmRlZiBUQ1BTT0NLRVQKK2ludCBuZXR0eXBlID0gTkVU X1RDUEI7ICAgICAgICAgICAgICAgICAvKiBEZWZhdWx0IG5ldHdvcmsgdHlwZSAqLworI2Vsc2UK KyNpZmRlZiBTVU5YMjUKK2ludCBuZXR0eXBlID0gTkVUX1NYMjU7CisjZWxzZQorI2lmZGVmIElC TVgyNQoraW50IG5ldHR5cGUgPSBORVRfSVgyNTsKKyNlbHNlCisjaWZkZWYgSFBYMjUKK2ludCBu ZXR0eXBlID0gTkVUX0hYMjU7CisjZWxzZQorI2lmZGVmIFNUUkFUVVNYMjUKK2ludCBuZXR0eXBl ID0gTkVUX1ZYMjU7CisjZWxzZQorI2lmZGVmIERFQ05FVAoraW50IG5ldHR5cGUgPSBORVRfREVD OworI2Vsc2UKKyNpZmRlZiBTVVBFUkxBVAoraW50IG5ldHR5cGUgPSBORVRfU0xBVDsKKyNlbHNl CitpbnQgbmV0dHlwZSA9IE5FVF9OT05FOworI2VuZGlmIC8qIFNVUEVSTEFUICovCisjZW5kaWYg LyogREVDTkVUICovCisjZW5kaWYgLyogU1RSQVRVU1gyNSAqLworI2VuZGlmIC8qIEhQWDI1ICov CisjZW5kaWYgLyogSUJNWDI1ICovCisjZW5kaWYgLyogU1VOWDI1ICovCisjZW5kaWYgLyogVENQ U09DS0VUICovCisjZWxzZSAgLyogTkVUQ09OTiAqLworaW50IG5ldHR5cGUgPSBORVRfTk9ORTsK KyNlbmRpZiAvKiBORVRDT05OICovCisKKyNpZmRlZiBBTllYMjUKK2ludCByZXZjYWxsID0gMDsg ICAgICAgICAgICAgICAgICAgICAgICAvKiBYLjI1IHJldmVyc2UgY2FsbCBub3Qgc2VsZWN0ZWQg Ki8KK2ludCBjbG9zZ3IgID0gLTE7ICAgICAgICAgICAgICAgICAgICAgICAvKiBYLjI1IGNsb3Nl ZCB1c2VyIGdyb3VwICAqLworaW50IGN1ZGF0YSA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAg IC8qIFguMjUgY2FsbCB1c2VyIGRhdGEgbm90IHNwZWNpZmllZCAqLworY2hhciB1ZGF0YVtNQVhD VURBVEFdOyAgICAgICAgICAgICAgICAgIC8qIFguMjUgY2FsbCB1c2VyIGRhdGEgKi8KKworI2lm ZGVmIElCTVgyNQorLyoKKyAgSSB3YXMgdW5hYmxlIHRvIGZpbmQgYW55IHByZS1kZWZpbmVkIE1B WCB2YWx1ZXMgZm9yIHgyNSBhZGRyZXNzZXMgLSB0aGUKKyAgYWRkcmVzc2VzIHRoYXQgSSd2ZSBz ZWVuIGhhdmUgYmVlbiBhcm91bmQgMTAtMTIgY2hhcmFjdGVycyAzMiBpcyBwcm9iYWJseQorICBl bm91Z2gsIDY0IGlzIGhvcGVmdWxseSBzYWZlIGZvciBldmVyeW9uZS4KKyovCisgICAgeDI1YWRk cl90IGxvY2FsX251YSA9IHsnXDAnfTsgICAgICAgLyogbG9jYWwgeC4yNSBhZGRyZXNzICovCisg ICAgeDI1YWRkcl90IHJlbW90ZV9udWEgPSB7J1wwJ307ICAgICAgLyogcmVtb3RlIHguMjUgYWRk cmVzcyAqLworICAgIGNoYXIgeDI1bmFtZVszMl0gPSB7J1wwJ307ICAgICAgICAgIC8qIHgyNSBk ZXZpY2UgbmFtZSwgc3gyNWEwIG9yIHN4MjVhMSAqLworICAgIGNoYXIgeDI1ZGV2WzY0XSA9ICAi L2Rldi94MjVwa3QiOyAgIC8qIHgyNSBkZXZpY2UgaW4gL2RldiAqLworICAgIGludCB4MjVwb3J0 ID0gMDsgICAgICAgICAgICAgICAgICAgIC8qIHBvcnQgdXNlZCBmb3IgWC4yNSAtIEFJWCBvbmx5 ICovCisjZW5kaWYgLyogSUJNWDI1ICovCisKKyNpZm5kZWYgSUJNWDI1CisvKgorICBUaGlzIGNv bmRpdGlvbiBpcyB1bnJlbGF0ZWQgdG8gdGhlIGFib3ZlIElCTVgyNSBjb25kaXRpb24uCisgIElC TSBYLjI1IGRvZXNuJ3QgaGF2ZSBQQUQgc3VwcG9ydC4KKyovCisgICAgQ0hBUiBwYWRwYXJtc1tN QVhQQURQQVJNUysxXTsgLyogWC4zIHBhcmFtZXRlcnMgKi8KKyNlbmRpZiAvKiBJQk1YMjUgKi8K KyNlbmRpZiAvKiBBTllYMjUgKi8KKworLyogT3RoZXIgaXRlbXMgKi8KKworaW50IGlzaW50ZXJy dXB0ZWQgPSAwOyAgICAgICAgICAgICAgICAgIC8qIFVzZWQgaW4gZXhjZXB0aW9uIGhhbmRsaW5n ICovCitpbnQgd2hhdCA9IFdfSU5JVDsgICAgICAgICAgICAgICAgICAgICAgLyogV2hhdCBJIGFt IGRvaW5nICovCitpbnQgbGFzdHhmZXIgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgLyogTGFz dCB0cmFuc2ZlciAoc2VuZCBvciByZWNlaXZlKSAqLworCitleHRlcm4gaW50IG1kbXR5cDsgICAg ICAgICAgICAgICAgICAgICAgLyogTW9kZW0gKC9uZXR3b3JrKSB0eXBlICovCisKKyNpZmRlZiBO VAorZXh0ZXJuIGludCBTdGFydGVkRnJvbURpYWxlcjsKKyNpZmRlZiBOVFNJRworZXh0ZXJuIGlu dCBUbHNJbmRleDsKKyNlbmRpZiAvKiBOVFNJRyAqLworI2lmZGVmIE5UQVNNCit1bnNpZ25lZCBs b25nIEVTUFRvUmVzdG9yZTsgICAgICAgICAgICAgLyogRGl0dG8gKi8KKyNlbmRpZiAvKiBOVEFT TSAqLworI2VuZGlmIC8qIE5UICovCisKKyNpZmRlZiBPUzJQTQoraW50IG9zMnBtID0gMDsgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIE9TLzIgUHJlc2VudGF0aW9uIE1hbmFnZXIgZmxhZyAq LworI2VuZGlmIC8qIE9TMlBNICovCisKKy8qIFRlcm1pbmFsIHNjcmVlbiBzaXplLCBpZiBrbm93 biwgLTEgbWVhbnMgdW5rbm93bi4gKi8KKworI2lmZGVmIE9TMgorI2luY2x1ZGUgImNrb2Nvbi5o IgorI2lmZGVmIEtVSQoraW50IHR0X3Jvd3NbVk5VTV0gPSB7MjQsMjQsMjUsMX07ICAgICAgIC8q IFJvd3MgKGhlaWdodCkgKi8KK2ludCB0dF9jb2xzW1ZOVU1dID0gezgwLDgwLDgwLDgwfTsgICAg ICAvKiBDb2x1bW5zICh3aWR0aCkgKi8KK2ludCBjbWRfcm93cyA9IDI0LCBjbWRfY29scyA9IDgw OyAgICAgICAvKiBDb21tYW5kL2NvbnNvbGUgc2NyZWVuIGRpbWVuc2lvbnMgKi8KKyNlbHNlIC8q IEtVSSAqLworaW50IHR0X3Jvd3NbVk5VTV0gPSB7LTEsMjQsMjUsMX07ICAgICAgIC8qIFJvd3Mg KGhlaWdodCkgKi8KK2ludCB0dF9jb2xzW1ZOVU1dID0gey0xLDgwLDgwLDgwfTsgICAgICAvKiBD b2x1bW5zICh3aWR0aCkgKi8KK2ludCBjbWRfcm93cyA9IC0xLCBjbWRfY29scyA9IC0xOyAgICAg ICAvKiBDb21tYW5kL2NvbnNvbGUgc2NyZWVuIGRpbWVuc2lvbnMgKi8KKyNlbmRpZiAvKiBLVUkg Ki8KK2ludCBrOTVzdGRpbyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAvKiBTdGRpbyB0aHJl YWRzICovCitpbnQgdHRfYmVsbCA9IFhZQl9BVUQgfCBYWUJfU1lTOyAgICAgICAgLyogQkVMTCBB VURJQkxFIChzeXN0ZW0gc291bmRzKSAqLworI2Vsc2UgLyogT1MyICovCitpbnQgdHRfcm93cyA9 IC0xOyAgICAgICAgICAgICAgICAgICAgICAgLyogUm93cyAoaGVpZ2h0KSAqLworaW50IHR0X2Nv bHMgPSAtMTsgICAgICAgICAgICAgICAgICAgICAgIC8qIENvbHVtbnMgKHdpZHRoKSAqLworaW50 IGNtZF9yb3dzID0gMjQsIGNtZF9jb2xzID0gODA7ICAgICAgIC8qIENvbW1hbmQvY29uc29sZSBz Y3JlZW4gZGltZW5zaW9ucyAqLworaW50IHR0X2JlbGwgPSBYWUJfQVVEOyAgICAgICAgICAgICAg ICAgIC8qIEJFTEwgT04gKi8KKyNlbmRpZiAvKiBPUzIgKi8KKworaW50IHR0X3ByaW50ID0gMDsg ICAgICAgICAgICAgICAgICAgICAgIC8qIFRyYW5zcGFyZW50IHByaW50IGRpc2FibGVkICovCitp bnQgdHRfZXNjYXBlID0gMTsgICAgICAgICAgICAgICAgICAgICAgLyogRXNjYXBpbmcgYmFjayBp cyBlbmFibGVkICovCitpbnQgdHRfc2Nyb2xsID0gMTsgICAgICAgICAgICAgICAgICAgICAgLyog U2Nyb2xsaW5nIG9wZXJhdGlvbnMgYXJlIGVuYWJsZWQgKi8KKworaW50IHRuX2V4aXQgPSAwOyAg ICAgICAgICAgICAgICAgICAgICAgIC8qIEV4aXQgb24gZGlzY29ubmVjdCAqLworCitpbnQgZXhp dG9uY2xvc2UgPSAwOyAgICAgICAgICAgICAgICAgICAgLyogRXhpdCBvbiBjbG9zZSAqLworaW50 IGV4aXRoYW5ndXAgPSAxOyAgICAgICAgICAgICAgICAgICAgIC8qIEhhbmd1cCBvbiBleGl0ICov CitpbnQgaGF2ZWxpbmUgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgLyogU0VUIExJTkUgb3Ig U0VUIEhPU1QgaW4gZWZmZWN0ICovCitpbnQgdGxldmVsID0gLTE7ICAgICAgICAgICAgICAgICAg ICAgICAgLyogVGFrZS1maWxlIGNvbW1hbmQgbGV2ZWwgKi8KK2ludCBoaW50cyA9IDE7ICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBXaGV0aGVyIHRvIGdpdmUgaGludHMgKi8KKworI2lmZGVm IE5PTE9DQUwKK2ludCByZW1vbmx5ID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZW1v dGUtbW9kZS1vbmx5IGFkdmlzb3J5ICgtUikgKi8KK2ludCBub2xvY2FsID0gMTsgICAgICAgICAg ICAgICAgICAgICAgICAvKiBSZW1vdGUtb25seSBzdHJpY3RseSBlbmZvcmNlZCAqLworI2Vsc2UK K2ludCByZW1vbmx5ID0gMDsKK2ludCBub2xvY2FsID0gMDsKK2ludCBjeF9zdGF0dXMgPSAwOyAg ICAgICAgICAgICAgICAgICAgICAvKiBDT05ORUNUIHJldHVybiBzdGF0dXMgKi8KKyNlbmRpZiAv KiBOT0xPQ0FMICovCisKKyNpZm5kZWYgTk9TUEwKK2V4dGVybiBpbnQgY21kbHZsOyAgICAgICAg ICAgICAgICAgICAgICAvKiBDb21tYW5kIGxldmVsICovCitleHRlcm4gaW50IG1hY2x2bDsgICAg ICAgICAgICAgICAgICAgICAgLyogTWFjcm8gaW52b2NhdGlvbiBsZXZlbCAqLworI2VuZGlmIC8q IE5PU1BMICovCisKK2ludCBwcm90b2NvbCAgPSBQUk9UT19LOyAgICAgICAgICAgICAgICAvKiBG aWxlIHRyYW5zZmVyIHByb3RvY29sID0gS2VybWl0ICovCisKKyNpZmRlZiBORVdERUZBVUxUUwor aW50IHByZWZpeGluZyA9IFBYX0NBVTsKKyNlbHNlCitpbnQgcHJlZml4aW5nID0gUFhfQUxMOwor I2VuZGlmIC8qIE5FV0RFRkFVTFRTICovCisKK2V4dGVybiBzaG9ydCBjdGxwW107ICAgICAgICAg ICAgICAgICAgICAvKiBDb250cm9sLXByZWZpeCB0YWJsZSAqLworCitpbnQgY2FycmllciA9IENB Ul9BVVQ7ICAgICAgICAgICAgICAgICAgLyogUGF5IGF0dGVudGlvbiB0byBjYXJyaWVyIHNpZ25h bCAqLworaW50IGNkdGltbyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENhcnJpZXIg d2FpdCB0aW1lb3V0ICovCitpbnQgeGl0c3RhID0gR09PRF9FWElUOyAgICAgICAgICAgICAgICAg LyogUHJvZ3JhbSBleGl0IHN0YXR1cyAqLworCisjaWZkZWYgVk1TICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogRGVmYXVsdCBmaWxlbmFtZSBjb2xsaXNpb24gYWN0aW9uICovCitpbnQg Zm5jYWN0ID0gWFlGWF9YOyAgICAgICAgICAgICAgICAgICAgLyogUkVQTEFDRSBmb3IgVk1TICov CisjZWxzZQoraW50IGZuY2FjdCA9IFhZRlhfQjsgICAgICAgICAgICAgICAgICAgIC8qIEJBQ0tV UCBmb3IgZXZlcnlib2R5IGVsc2UgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKworaW50IGZuY3NhdiA9 IC0xOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZvciBzYXZpbmcgJiByZXN0b3JpbmcgdGhl IGFib3ZlICovCitpbnQgYmdzZXQgPSAtMTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogQkFD S0dST1VORCBtb2RlIHNldCBleHBsaWNpdGx5ICovCisKK2ludCBjbWRpbnQgPSAxOyAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBJbnRlcnJ1cHRzIGFyZSBhbGxvd2VkICovCisjaWZkZWYgVU5J WAoraW50IHhzdXNwZW5kID0gREZTVVNQOwkJCS8qIFdoZXRoZXIgU1VTUEVORCBjb21tYW5kLCBl dGMsICovCisjZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXMgdG8g YmUgYWxsb3dlZC4gKi8KK2ludCB4c3VzcGVuZCA9IDA7CisjZW5kaWYgLyogVU5JWCAqLworCisv KiBTdGF0aXN0aWNzIHZhcmlhYmxlcyAqLworCitDS19PRkZfVAorICAgIGZsY2ksICAgICAgICAg ICAgICAgICAgICAgICAvKiBDaGFyYWN0ZXJzIGZyb20gbGluZSwgY3VycmVudCBmaWxlICovCisg ICAgZmxjbywgICAgICAgICAgICAgICAgICAgICAgIC8qIENoYXJzIHRvIGxpbmUsIGN1cnJlbnQg ZmlsZSAgKi8KKyAgICB0bGNpLCAgICAgICAgICAgICAgICAgICAgICAgLyogQ2hhcnMgZnJvbSBs aW5lIGluIHRyYW5zYWN0aW9uICovCisgICAgdGxjbywgICAgICAgICAgICAgICAgICAgICAgIC8q IENoYXJzIHRvIGxpbmUgaW4gdHJhbnNhY3Rpb24gKi8KKyAgICBmZmMsICAgICAgICAgICAgICAg ICAgICAgICAgLyogQ2hhcnMgdG8vZnJvbSBjdXJyZW50IGZpbGUgKi8KKyAgICB0ZmM7ICAgICAg ICAgICAgICAgICAgICAgICAgLyogQ2hhcnMgdG8vZnJvbSBmaWxlcyBpbiB0cmFuc2FjdGlvbiAq LworCitsb25nIGZpbGNudCwgICAgICAgICAgICAgICAgICAgIC8qIE51bWJlciBvZiBmaWxlcyBp biB0cmFuc2FjdGlvbiAqLworICAgIGZpbHJlaiwgICAgICAgICAgICAgICAgICAgICAvKiBOdW1i ZXIgb2YgZmlsZXMgcmVqZWN0ZWQgaW4gdHJhbnNhY3Rpb24gKi8KKyAgICBjcHMgPSAwTCwgICAg ICAgICAgICAgICAgICAgLyogQ2hhcnMvc2VjIGxhc3QgdHJhbnNmZXIgKi8KKyAgICBwZWFrY3Bz ID0gMEwsICAgICAgICAgICAgICAgLyogUGVhayBjaGFycy9zZWMgbGFzdCB0cmFuc2ZlciAqLwor ICAgIGNjdSwgICAgICAgICAgICAgICAgICAgICAgICAvKiBDb250cm9sIGNoYXJzIHVucHJlZml4 ZWQgaW4gdHJhbnNhY3Rpb24gKi8KKyAgICBjY3AsICAgICAgICAgICAgICAgICAgICAgICAgLyog Q29udHJvbCBjaGFycyBwcmVmaXhlZCBpbiB0cmFuc2FjdGlvbiAqLworICAgIHJwdG47ICAgICAg ICAgICAgICAgICAgICAgICAvKiBSZXBlYXRlZCBjaGFyYWN0ZXJzIGNvbXByZXNzZWQgKi8KKwor aW50IHRzZWNzID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNlY29uZHMgZm9yIHRy YW5zYWN0aW9uICovCitpbnQgZnNlY3MgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyog UGVyLWZpbGUgdGltZXIgKi8KKworI2lmZGVmIEdGVElNRVIKK0NLRkxPQVQKKyAgZnBmc2VjcyA9 IDAuMCwgICAgICAgICAgICAgICAgICAgICAgICAvKiBGbG9hdGluZyBwb2ludCBwZXItZmlsZSB0 aW1lciAqLworICBmcHRzZWNzID0gMC4wOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFuZCBw ZXItdHJhbnNhY3Rpb24gdGltZXIgKi8KKyNlbmRpZiAvKiBHRlRJTUVSICovCisKKy8qIEZsYWdz ICovCisKK2ludCBkZWJsb2cgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEZWJ1ZyBs b2cgaXMgb3BlbiAqLworICAgIGRlYm9rID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IERlYnVnIGxvZyBpcyBub3QgZGlzYWJsZWQgKi8KKyAgICBkZWJ4bGVuID0gNTQsICAgICAgICAg ICAgICAgICAgICAgICAvKiBEZWZhdWx0IGxlbmd0aCBmb3IgZGVidWcgc3RyaW5ncyAqLworICAg IGRlYnNlcyA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZsYWcgZm9yIERFQlVHIFNF U1NJT04gKi8KKyAgICBkZWJ0aW0gPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJbmNs dWRlIHRpbWVzdGFtcCBpbiBkZWJ1ZyBsb2cgKi8KKyAgICBkZWJtc2cgPSAwLCAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBEZWJ1ZyBtZXNzYWdlcyBvbi9vZmYgKi8KKyAgICBwa3Rsb2cgPSAw LCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGbGFnIGZvciBwYWNrZXQgbG9nZ2luZyAqLwor ICAgIHNlc2xvZyA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNlc3Npb24gbG9nZ2lu ZyAqLworICAgIGRpYWxvZyA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERJQUwgbG9n Z2luZyAqLworICAgIHRyYWxvZyA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRyYW5z YWN0aW9uIGxvZ2dpbmcgKi8KKyAgICB0bG9nZm10ID0gMSwgICAgICAgICAgICAgICAgICAgICAg ICAvKiBUcmFuc2FjdGlvbiBsb2cgZm9ybWF0ICh2ZXJib3NlKSAqLworICAgIHRsb2dzZXAgPSAo aW50KScsJywgICAgICAgICAgICAgICAgIC8qIFRyYW5zYWN0aW9uIGxvZyBmaWVsZCBzZXBhcmF0 b3IgKi8KKyAgICBkaXNwbGEgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGaWxlIHRy YW5zZmVyIGRpc3BsYXkgb24vb2ZmICovCisgICAgc3Rkb3VmID0gMCwgICAgICAgICAgICAgICAg ICAgICAgICAgLyogRmxhZyBmb3Igb3V0cHV0IHRvIHN0ZG91dCAqLworICAgIHN0ZGluZiA9IDAs ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZsYWcgZm9yIGlucHV0IGZyb20gc3RkaW4gKi8K KyAgICB4ZmxnICAgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGbGFnIGZvciBYIGlu c3RlYWQgb2YgRiBwYWNrZXQgKi8KKyAgICBoY2ZsZyAgPSAwLCAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBEb2luZyBIb3N0IGNvbW1hbmQgKi8KKyAgICBkZXN0ICAgPSBERVNUX0QsICAgICAg ICAgICAgICAgICAgICAvKiBEZXN0aW5hdGlvbiBmb3IgcGFja2V0IGRhdGEgKi8KKyAgICB6Y2hr b2QgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiB6Y2hrbygpIHNob3VsZCB3b3JrIGZv ciBkaXJzIHRvbz8gKi8KKyAgICB6Y2hraWQgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAv KiB6Y2hraSgpIHNob3VsZCB3b3JrIGZvciBkaXJzIHRvbz8gKi8KKworLyogSWYgeW91IGNoYW5n ZSB0aGlzLCBhbHNvIHNlZSBzdHJ1Y3QgcHRhYiBhYm92ZS4uLiAqLworCisjaWZkZWYgT1MyICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRmxhZyBmb3IgZmlsZSBuYW1lIGNvbnZlcnNp b24gKi8KKyAgICBmbmNudiAgPSBYWUZOX0wsICAgICAgICAgICAgICAgICAgICAvKiBEZWZhdWx0 IGlzIExpdGVyYWwgaW4gT1MvMiwgKi8KKyAgICBmX3NhdmUgPSBYWUZOX0wsICAgICAgICAgICAg ICAgICAgICAvKiAoc2F2ZWQgY29weSBvZiBzYW1lKSAqLworI2Vsc2UKKyAgICBmbmNudiAgPSBY WUZOX0MsICAgICAgICAgICAgICAgICAgICAvKiBlbHNld2hlcmUgQ29udmVydCB0aGVtICovCisg ICAgZl9zYXZlID0gWFlGTl9DLCAgICAgICAgICAgICAgICAgICAgLyogKGRpdHRvKSAqLworI2Vu ZGlmIC8qIE9TMiAqLworCisgICAgZm5zcGF0aCA9IFBBVEhfT0ZGLCAgICAgICAgICAgICAgICAg LyogU2VuZCBmaWxlIHBhdGggKi8KKyAgICBmbnJwYXRoID0gUEFUSF9BVVRPLCAgICAgICAgICAg ICAgICAvKiBSZWNlaXZlIGZpbGUgcGF0aCAqLworICAgIGZhY2twYXRoID0gMSwgICAgICAgICAg ICAgICAgICAgICAgIC8qIFNlbmQgYmFjayBwYXRoIGluIEFDSyB0byBGICovCisgICAgYmluYXJ5 ID0gWFlGVF9CLCAgICAgICAgICAgICAgICAgICAgLyogRGVmYXVsdCBmaWxlIHRyYW5zZmVyIG1v ZGUgKi8KKyAgICBiX3NhdmUgPSBYWUZUX0IsICAgICAgICAgICAgICAgICAgICAvKiBTYXZlZCBm aWxlIG1vZGUgKi8KKyAgICBlb2ZtZXRob2QgPSAwLCAgICAgICAgICAgICAgICAgICAgICAvKiBF T0YgZGV0ZWN0aW9uIG1ldGhvZCAobGVuZ3RoKSAqLworCisjaWZkZWYgT1MyCisgICAgY3Vyc29y X3NhdmUgPSAtMSwgICAgICAgICAgICAgICAgICAgLyogQ3Vyc29yIHN0YXRlICovCisjZW5kaWYg LyogT1MyICovCisKKyAgICB4ZmVybW9kZSA9IFhNT0RFX0EsICAgICAgICAgICAgICAgICAvKiBU cmFuc2ZlciBtb2RlLCBtYW51YWwgb3IgYXV0byAqLworICAgIHhmaWxldHlwZSA9IC0xLCAgICAg ICAgICAgICAgICAgICAgIC8qIFRyYW5zZmVyIG9ubHkgdGV4dCAob3IgYmluYXJ5KSAqLworICAg IHJlY3Vyc2l2ZSA9IDAsICAgICAgICAgICAgICAgICAgICAgIC8qIFJlY3Vyc2l2ZSBkaXJlY3Rv cnkgdHJhdmVyc2FsICovCisgICAgbm9saW5rcyAgID0gMiwgICAgICAgICAgICAgICAgICAgICAg LyogRG9uJ3QgZm9sbG93IHN5bWJvbGljIGxpbmtzICovCisgICAgc2tpcGJ1cCAgID0gMCwgICAg ICAgICAgICAgICAgICAgICAgLyogU2tpcCBiYWNrdXAgZmlsZXMgd2hlbiBzZW5kaW5nICovCisg ICAgc2VuZG1vZGUgPSBTTV9TRU5ELCAgICAgICAgICAgICAgICAgLyogV2hpY2ggdHlwZSBvZiBT RU5EIG9wZXJhdGlvbiAqLworICAgIHNsb3N0YXJ0ICA9IDEsICAgICAgICAgICAgICAgICAgICAg IC8qIFNsb3cgc3RhcnQgKGdyb3cgcGFja2V0IGxlbmd0aHMpICovCisgICAgY21hc2sgID0gMDM3 NywgICAgICAgICAgICAgICAgICAgICAgLyogQ09OTkVDVCAodGVybWluYWwpIGJ5dGUgbWFzayAq LworICAgIGZtYXNrICA9IDAzNzcsICAgICAgICAgICAgICAgICAgICAgIC8qIEZpbGUgYnl0ZSBt YXNrICovCisgICAgY2t3YXJuID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogRmxhZyBm b3IgZmlsZSB3YXJuaW5nICovCisgICAgcXVpZXQgID0gMCwgICAgICAgICAgICAgICAgICAgICAg ICAgLyogQmUgcXVpZXQgZHVyaW5nIGZpbGUgdHJhbnNmZXIgKi8KKyAgICBsb2NhbCAgPSAwLCAg ICAgICAgICAgICAgICAgICAgICAgICAvKiAxID0gbG9jYWwgbW9kZSwgMCA9IHJlbW90ZSBtb2Rl ICovCisgICAgY3h0eXBlID0gQ1hUX1JFTU9URSwgICAgICAgICAgICAgICAgLyogQ29ubmVjdGlv biB0eXBlICovCisgICAgc2VydmVyID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogRmxh ZyBmb3IgSSBBbSBTZXJ2ZXIgKi8KKyAgICBxdWVyeSA9IDAsICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBGbGFnIGZvciBRdWVyeSBhY3RpdmUgKi8KKyAgICBqdXN0b25lID0gMCwgICAgICAg ICAgICAgICAgICAgICAgICAvKiBTZXJ2ZXIgc2hvdWxkIGRvIEp1c3QgT25lIGNvbW1hbmQgKi8K KyAgICB1cnNlcnZlciA9IDAsICAgICAgICAgICAgICAgICAgICAgICAvKiBGbGFnIGZvciBZb3Ug QXJlIFNlcnZlciAqLworICAgIGJ5ZV9hY3RpdmUgPSAwLCAgICAgICAgICAgICAgICAgICAgIC8q IEZsYWcgZm9yIEJZRSBjb21tYW5kIGFjdGl2ZSAqLworICAgIGRpcmFjdGl2ZSA9IDAsICAgICAg ICAgICAgICAgICAgICAgIC8qIEZsYWcgZm9yIERJUkVDVE9SWSBjb21tYW5kIGFjdGl2ZSAqLwor ICAgIGNkYWN0aXZlID0gMCwgICAgICAgICAgICAgICAgICAgICAgIC8qIEZsYWcgZm9yIENEIGNv bW1hbmQgYWN0aXZlICovCisgICAgY2ZsZyAgID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAg LyogQ29ubmVjdCBiZWZvcmUgdHJhbnNhY3Rpb24gKi8KKyAgICBjbmZsZyAgPSAwLCAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBDb25uZWN0IGFmdGVyIHRyYW5zYWN0aW9uICovCisgICAgY3hz ZWVuID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogRmxhZyBmb3IgY2FuY2VsbGluZyBh IGZpbGUgKi8KKyAgICBjenNlZW4gPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGbGFn IGZvciBjYW5jZWxsaW5nIGZpbGUgZ3JvdXAgKi8KKyAgICBmYXRhbGlvID0gMCwgICAgICAgICAg ICAgICAgICAgICAgICAvKiBGbGFnIGZvciBmYXRhbCBpL28gZXJyb3IgKi8KKyAgICBkaXNjYXJk ID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAvKiBGbGFnIGZvciBmaWxlIHRvIGJlIGRpc2Nh cmRlZCAqLworICAgIGtlZXAgPSBTRVRfQVVUTywgICAgICAgICAgICAgICAgICAgIC8qIEtlZXAg aW5jb21wbGV0ZSBmaWxlcyA9IEFVVE8gKi8KKyAgICB1bmtjcyA9IDEsICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBLZWVwIGZpbGUgdy91bmtub3duIGNoYXJhY3RlciBzZXQgKi8KKyNpZmRl ZiBWTVMKKyAgICBmaWxlcGVlayA9IDAsICAgICAgICAgICAgICAgICAgICAgICAvKiBJbnNwZWN0 aW9uIG9mIGZpbGVzICovCisjZWxzZQorI2lmZGVmIGRhdGdlbmVyYWwKKyAgICBmaWxlcGVlayA9 IDAsCisjZWxzZQorICAgIGZpbGVwZWVrID0gMSwKKyNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLwor I2VuZGlmIC8qIFZNUyAqLworICAgIG5ha3N0YXRlID0gMCwgICAgICAgICAgICAgICAgICAgICAg IC8qIEluIGEgc3RhdGUgd2hlcmUgd2UgY2FuIHNlbmQgTkFLcyAqLworICAgIGRibGNoYXIgPSAt MSwgICAgICAgICAgICAgICAgICAgICAgIC8qIENoYXJhY3RlciB0byBkb3VibGUgd2hlbiBzZW5k aW5nICovCisgICAgbW92aW5nID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogTU9WRSA9 IHNlbmQsIHRoZW4gZGVsZXRlICovCisgICAgcmVsaWFibGUgPSBTRVRfQVVUTywgICAgICAgICAg ICAgICAgLyogTm9uemVybyBpZiB0cmFuc3BvcnQgaXMgcmVsaWFibGUgKi8KKyAgICB4cmVsaWFi bGUgPSAtMSwKKyAgICBzZXRyZWxpYWJsZSA9IDAsCisgICAgdXJjbGVhciA9IDAsICAgICAgICAg ICAgICAgICAgICAgICAgLyogTm9uemVybyBmb3IgY2xlYXIgY2hhbm5lbCB0byB5b3UgKi8KKyAg ICBjbGVhcnJxID0gU0VUX0FVVE8sICAgICAgICAgICAgICAgICAvKiBTRVQgQ0xFQVJDSEFORUwg dmFsdWUgKi8KKyAgICBjbGVhcmVkID0gMCwKKyAgICBzdHJlYW1pbmcgPSAwLCAgICAgICAgICAg ICAgICAgICAgICAvKiBOb256ZXJvIGlmIHN0cmVhbWluZyBpcyBhY3RpdmUgKi8KKyAgICBzdHJl YW1vayA9IDAsICAgICAgICAgICAgICAgICAgICAgICAvKiBOb256ZXJvIGlmIHN0cmVhbWluZyBu ZWdvdGlhdGVkICovCisgICAgc3RyZWFtcnEgPSBTRVRfQVVUTywgICAgICAgICAgICAgICAgLyog U0VUIFNUUkVBTUlORyB2YWx1ZSAqLworICAgIHN0cmVhbWVkID0gLTE7ICAgICAgICAgICAgICAg ICAgICAgIC8qIFdoZXRoZXIgd2Ugc3RyZWFtZWQgbGFzdCB0aW1lICovCisKK2NoYXIgKiBzbmRf bW92ZSA9IE5VTEw7ICAgICAgICAgICAgICAgICAvKiBNb3ZlIGZpbGUgYWZ0ZXIgc2VuZGluZyBp dCAqLworY2hhciAqIHNuZF9yZW5hbWUgPSBOVUxMOyAgICAgICAgICAgICAgIC8qIFJlbmFtZSBm aWxlIGFmdGVyIHNlbmRpbmcgaXQgKi8KK2NoYXIgKiByY3ZfbW92ZSA9IE5VTEw7ICAgICAgICAg ICAgICAgICAvKiBNb3ZlIGZpbGUgYWZ0ZXIgcmVjZWl2aW5nIGl0ICovCitjaGFyICogcmN2X3Jl bmFtZSA9IE5VTEw7ICAgICAgICAgICAgICAgLyogUmVuYW1lIGZpbGUgYWZ0ZXIgcmVjZWl2aW5n IGl0ICovCisKK2NoYXIgKiBnX3NuZF9tb3ZlID0gTlVMTDsKK2NoYXIgKiBnX3NuZF9yZW5hbWUg PSBOVUxMOworY2hhciAqIGdfcmN2X21vdmUgPSBOVUxMOworY2hhciAqIGdfcmN2X3JlbmFtZSA9 IE5VTEw7CisKKyNpZmRlZiBDS19UUklHR0VSCitjaGFyICp0dF90cmlnZ2VyW1RSSUdHRVJTXSA9 IHsgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMIH07CitDSEFSICp0dF90 cm1hdGNoW1RSSUdHRVJTXSA9IHsgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxO VUxMIH07CitjaGFyICp0cmlnZ2VydmFsID0gTlVMTDsKKyNlbmRpZiAvKiBDS19UUklHR0VSICov CisKK2ludCBja3hsb2dnaW5nID0gMDsgICAgICAgICAgICAgICAgICAgICAvKiBGbGFnIGZvciBz eXNsb2dnaW5nIGFjdGl2ZSAqLworaW50IGlrZGJvcGVuID0gMDsgICAgICAgICAgICAgICAgICAg ICAgIC8qIEZsYWcgZm9yIElLU0QgZGF0YWJhc2UgYWN0aXZlICovCitpbnQgZGJpbml0ZWQgPSAw OyAgICAgICAgICAgICAgICAgICAgICAgLyogRmxhZyBmb3IgSUtTREIgcmVjb3JkIGluaXQnZCAq LworI2lmbmRlZiBDS1NZU0xPRworaW50IGNreHN5c2xvZyA9IDA7ICAgICAgICAgICAgICAgICAg ICAgIC8qIExvZ2dpbmcgbGV2ZWwgMCAqLworI2Vsc2UKKyNpZmRlZiBTWVNMT0dMRVZFTAoraW50 IGNreHN5c2xvZyA9IFNZU0xPR0xFVkVMOyAgICAgICAgICAgIC8qIExvZ2dpbmcgbGV2ZWwgc3Bl Y2lmaWVkICovCisjZWxzZQoraW50IGNreHN5c2xvZyA9IFNZU0xHX0RGOyAgICAgICAgICAgICAg IC8qIERlZmF1bHQgbG9nZ2luZyBsZXZlbCAqLworI2VuZGlmIC8qIFNZU0xPR0xFVkVMICovCisj ZW5kaWYgLyogQ0tTWVNMT0cgKi8KKworI2lmbmRlZiBOT0hFTFAKKyNpZm5kZWYgTk9DTURMCitf UFJPVE9UWVAoIFZPSUQgaW5pb3B0aGxwLCAodm9pZCkgKTsgICAgLyogQ29tbWFuZC1saW5lIGhl bHAgaW5pdGlhbGl6ZXIgKi8KKyNlbmRpZiAvKiBOT0NNREwgKi8KKyNlbmRpZiAvKiBOT0hFTFAg Ki8KKworX1BST1RPVFlQKCBWT0lEIGdldGV4ZWRpciwgKHZvaWQpICk7CitfUFJPVE9UWVAoIGlu dCBwdXRub3RoaW5nLCAoY2hhcikgKTsKKworI2lmZGVmIElLU0QKK19QUk9UT1RZUCggVk9JRCBk b2lrc2Rpbml0LCAodm9pZCkgKTsKK19QUk9UT1RZUCggVk9JRCBpa3NkaW5pdCwgKHZvaWQpICk7 CitfUFJPVE9UWVAoIFZPSUQgZG9pa2xvZywgKHZvaWQpICk7CitfUFJPVE9UWVAoIGludCBkYmlu aXQsICh2b2lkKSApOworI2VuZGlmIC8qIElLU0QgKi8KKworLyogVmFyaWFibGVzIHBhc3NlZCBm cm9tIGNvbW1hbmQgcGFyc2VyIHRvIHByb3RvY29sIG1vZHVsZSAqLworCisjaWZuZGVmIE5PU1BM CisjaWZuZGVmIE5PSUNQCisjaWZkZWYgQ0tfQVBDCitfUFJPVE9UWVAoIFZPSUQgYXBjb25lY3Qs ICh2b2lkKSApOworI2VuZGlmIC8qIENLX0FQQyAqLworI2lmZGVmIE9TMgorZXh0ZXJuIGludCBp bml0dmlrOworI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIE5PSUNQICovCisjZW5kaWYgLyog Tk9TUEwgKi8KK2NoYXIgKmNsY21kcyA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAvKiBQb2lu dGVyIHRvIGNvbW1hbmQtbGluZSBjb21tYW5kcyAqLworCisjaWZuZGVmIE5PU0VUS0VZCitleHRl cm4gS0VZICprZXltYXA7CitleHRlcm4gTUFDUk8gKm1hY3JvdGFiOworI2VuZGlmIC8qIE5PU0VU S0VZICovCisKKyNpZm5kZWYgTk9QVVNICitpbnQgbm9wdXNoID0gMDsgICAgICAgICAgICAgICAg ICAgICAgICAgLyogUFVTSCBlbmFibGVkICovCisjZWxzZQoraW50IG5vcHVzaCA9IDE7ICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIFBVU0ggZGlzYWJsZWQgKi8KKyNlbmRpZiAvKiBOT1BVU0gg Ki8KKworQ0hBUiBzc3RhdGUgID0gKENIQVIpIDA7ICAgICAgICAgICAgICAgIC8qIFN0YXJ0aW5n IHN0YXRlIGZvciBhdXRvbWF0b24gKi8KK0NIQVIgenN0YXRlICA9IChDSEFSKSAwOyAgICAgICAg ICAgICAgICAvKiBGb3IgcmVtZW1iZXJpbmcgc3N0YXRlICovCitjaGFyICogcHJpbnRlcm5hbWUg PSBOVUxMOyAgICAgICAgICAgICAgLyogTlVMTCBpZiBwcmludGVyIG5vdCByZWRpcmVjdGVkICov CitpbnQgcHJpbnRwaXBlID0gMDsgICAgICAgICAgICAgICAgICAgICAgLyogRm9yIFNFVCBQUklO VEVSICovCitpbnQgbm9wcmludGVyID0gMDsKKworI2lmbmRlZiBOT1hGRVIKK2NoYXIgKmNtYXJn ICA9ICIiOyAgICAgICAgICAgICAgICAgICAgICAvKiBQb2ludGVyIHRvIGNvbW1hbmQgZGF0YSAq LworY2hhciAqY21hcmcyID0gIiI7ICAgICAgICAgICAgICAgICAgICAgIC8qIFBvaW50ZXIgdG8g Mm5kIGNvbW1hbmQgZGF0YSAqLworY2hhciAqKmNtbGlzdDsgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIFBvaW50ZXIgdG8gZmlsZSBsaXN0IGluIGFyZ3YgKi8KKworI2lmZGVmIENLX0FVVE9E TCAgICAgICAgICAgICAgICAgICAgICAgIC8qIEF1dG9kb3dubG9hZCAqLworaW50IGF1dG9kbCA9 IDE7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVuYWJsZWQgYnkgZGVmYXVsdCAqLworI2Vs c2UKK2ludCBhdXRvZGwgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiAob3IgaWYgbm90 IGltcGxlbWVudGVkKS4gKi8KKyNlbmRpZiAvKiBDS19BVVRPREwgKi8KK2ludCBhZGxfZXJyID0g MTsgICAgICAgICAgICAgICAgICAgICAgICAvKiAxID0gc3RvcCBvbiBlcnJvciAqLworI2lmZGVm IEtVSQoraW50IGFkbF9hc2sgPSAxOwkJCS8qIDEgPSBmaWxlIGRpYWxvZyBvbiBhdXRvZG93bmxv YWQgKi8KKyNlbHNlCitpbnQgYWRsX2FzayA9IDA7CQkJLyogMCA9IG5vIGZpbGUgZGlhbG9nICov CisjZW5kaWYgLyogS1VJICovCisjaWZkZWYgT1MyICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogQVVUT0RPV05MT0FEIHBhcmFtZXRlcnMgKi8KK2ludCBhZGxfa21vZGUgPSBBRExfUEFD SywgICAgICAgICAgICAgICAvKiBNYXRjaCBQYWNrZXQgdG8gc2lnbmFsIGRvd25sb2FkICovCisg ICAgYWRsX3ptb2RlID0gQURMX1BBQ0s7CitjaGFyICogYWRsX2tzdHIgPSBOVUxMOyAgICAgICAg ICAgICAgICAgLyogS0VSTUlUIERvd25sb2FkIFN0cmluZyAqLworY2hhciAqIGFkbF96c3RyID0g TlVMTDsgICAgICAgICAgICAgICAgIC8qIFpNT0RFTSBEb3dubG9hZCBTdHJpbmcgKi8KKyNlbmRp ZiAvKiBPUzIgKi8KKworaW50IHJlbWZpbGUgPSAwLCByZW1waXBlID0gMCwgcmVtYXBwZCA9IDA7 IC8qIFJFTU9URSBvdXRwdXQgcmVkaXJlY3Rpb24gKi8KK2NoYXIgKiByZW1kZXN0ID0gTlVMTDsK KworI2lmbmRlZiBOT1NFUlZFUgorLyoKKyAgU2VydmVyIHNlcnZpY2VzOgorICAgMCA9IGRpc2Fi bGVkCisgICAxID0gZW5hYmxlZCBpbiBsb2NhbCBtb2RlCisgICAyID0gZW5hYmxlZCBpbiByZW1v dGUgbW9kZQorICAgMyA9IGVuYWJsZWQgaW4gYm90aCBsb2NhbCBhbmQgcmVtb3RlIG1vZGVzCisg IG9ubHkgYXMgaW5pdGlhbCAoZGVmYXVsdCkgdmFsdWVzLgorKi8KK2ludCBlbl94aXQgPSAyOyAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBFWElUICovCitpbnQgZW5fY3dkID0gMzsgICAgICAg ICAgICAgICAgICAgICAgICAgLyogQ0QvQ1dEICovCitpbnQgZW5fY3B5ID0gMzsgICAgICAgICAg ICAgICAgICAgICAgICAgLyogQ09QWSAgICovCitpbnQgZW5fZGVsID0gMjsgICAgICAgICAgICAg ICAgICAgICAgICAgLyogREVMRVRFICovCitpbnQgZW5fbWtkID0gMzsgICAgICAgICAgICAgICAg ICAgICAgICAgLyogTUtESVIgKi8KK2ludCBlbl9ybWQgPSAyOyAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBSTURJUiAqLworaW50IGVuX2RpciA9IDM7ICAgICAgICAgICAgICAgICAgICAgICAg IC8qIERJUkVDVE9SWSAqLworaW50IGVuX2ZpbiA9IDM7ICAgICAgICAgICAgICAgICAgICAgICAg IC8qIEZJTklTSCAqLworaW50IGVuX2dldCA9IDM7ICAgICAgICAgICAgICAgICAgICAgICAgIC8q IEdFVCAqLworI2lmbmRlZiBOT1BVU0gKK2ludCBlbl9ob3MgPSAyOyAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBIT1NUIGVuYWJsZWQgKi8KKyNlbHNlCitpbnQgZW5faG9zID0gMDsgICAgICAg ICAgICAgICAgICAgICAgICAgLyogSE9TVCBkaXNhYmxlZCAqLworI2VuZGlmIC8qIE5PUFVTSCAq LworaW50IGVuX3JlbiA9IDM7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJFTkFNRSAqLwor aW50IGVuX3NlbiA9IDM7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNFTkQgKi8KK2ludCBl bl9zZXQgPSAzOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTRVQgKi8KK2ludCBlbl9zcGEg PSAzOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTUEFDRSAqLworaW50IGVuX3R5cCA9IDM7 ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRZUEUgKi8KK2ludCBlbl93aG8gPSAzOyAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBXSE8gKi8KKyNpZmRlZiBkYXRhZ2VuZXJhbAorLyogRGF0 YSBHZW5lcmFsIEFPUy9WUyBjYW4ndCBkbyB0aGlzICovCitpbnQgZW5fYnllID0gMDsgICAgICAg ICAgICAgICAgICAgICAgICAgLyogQllFICovCisjZWxzZQoraW50IGVuX2J5ZSA9IDI7ICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIFBDcyBpbiBsb2NhbCBtb2RlLi4uICovCisjZW5kaWYgLyog ZGF0YWdlbmVyYWwgKi8KK2ludCBlbl9hc2cgPSAzOyAgICAgICAgICAgICAgICAgICAgICAgICAv KiBBU1NJR04gKi8KK2ludCBlbl9xdWUgPSAzOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBR VUVSWSAqLworaW50IGVuX3JldCA9IDI7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJFVFJJ RVZFICovCitpbnQgZW5fbWFpID0gMzsgICAgICAgICAgICAgICAgICAgICAgICAgLyogTUFJTCAq LworaW50IGVuX3ByaSA9IDM7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBSSU5UICovCitp bnQgZW5fZW5hID0gMzsgICAgICAgICAgICAgICAgICAgICAgICAgLyogRU5BQkxFICovCisjZWxz ZQoraW50IGVuX3hpdCA9IDAsIGVuX2N3ZCA9IDAsIGVuX2NweSA9IDAsIGVuX2RlbCA9IDAsIGVu X21rZCA9IDAsIGVuX3JtZCA9IDAsCisgICAgZW5fZGlyID0gMCwgZW5fZmluID0gMCwgZW5fZ2V0 ID0gMCwgZW5faG9zID0gMCwgZW5fcmVuID0gMCwgZW5fc2VuID0gMCwKKyAgICBlbl9zZXQgPSAw LCBlbl9zcGEgPSAwLCBlbl90eXAgPSAwLCBlbl93aG8gPSAwLCBlbl9ieWUgPSAwLCBlbl9hc2cg PSAwLAorICAgIGVuX3F1ZSA9IDAsIGVuX3JldCA9IDAsIGVuX21haSA9IDAsIGVuX3ByaSA9IDAs IGVuX2VuYSA9IDA7CisjZW5kaWYgLyogTk9TRVJWRVIgKi8KKyNlbmRpZiAvKiBOT1hGRVIgKi8K KworLyogTWlzY2VsbGFuZW91cyAqLworCitjaGFyICoqeGFyZ3Y7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogR2xvYmFsIGNvcGllcyBvZiBhcmd2ICovCitpbnQgeGFyZ2M7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogYW5kIGFyZ2MgICovCitpbnQgeGFyZ3M7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogYW4gaW1tdXRhYmxlIGNvcHkgb2YgYXJnYyAqLworY2hh ciAqeGFyZzA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFuZCBvZiBhcmd2WzBdICov CitjaGFyICpwaXBlZGF0YTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogUG9pbnRlciB0byAt UCAocGlwZSkgZGF0YSAqLworCitleHRlcm4gY2hhciAqZGZ0dHk7ICAgICAgICAgICAgICAgICAg ICAgLyogRGVmYXVsdCB0dHkgbmFtZSBmcm9tIGNrP3Rpby5jICovCitleHRlcm4gaW50IGRmbG9j OyAgICAgICAgICAgICAgICAgICAgICAgLyogRGVmYXVsdCBsb2NhdGlvbjogcmVtb3RlL2xvY2Fs ICovCitleHRlcm4gaW50IGRmcHJ0eTsgICAgICAgICAgICAgICAgICAgICAgLyogRGVmYXVsdCBw YXJpdHkgKi8KK2V4dGVybiBpbnQgZGZmbG93OyAgICAgICAgICAgICAgICAgICAgICAvKiBEZWZh dWx0IGZsb3cgY29udHJvbCAqLworCisjaWZkZWYgVE5DT0RFCitleHRlcm4gaW50IHRuX2RlYjsK KyNlbmRpZiAvKiBUTkNPREUgKi8KKy8qCisgIEJ1ZmZlcmVkIGZpbGUgaW5wdXQgYW5kIG91dHB1 dCBidWZmZXJzLiAgU2VlIGdldHBrdCgpIGluIGNrY2Zucy5jCisgIGFuZCB6b3V0ZHVtcCgpIGlu IHRoZSBzeXN0ZW0tZGVwZW5kZW50IGZpbGUgaS9vIG1vZHVsZSAodXN1YWxseSBjaz9maW8uYyku CisqLworI2lmbmRlZiBEWU5BTUlDCisvKiBOb3cgd2UgYWxsb2NhdGUgdGhlbSBkeW5hbWljYWxs eSwgc2VlIGdldGlvYnMoKSBiZWxvdy4gKi8KK2NoYXIgemluYnVmZmVyW0lOQlVGU0laRV0sIHpv dXRidWZmZXJbT0JVRlNJWkVdOworI2VuZGlmIC8qIERZTkFNSUMgKi8KK2NoYXIgKnppbnB0ciwg KnpvdXRwdHI7CitpbnQgemluY250LCB6b3V0Y250OworaW50IHpvYnVmc2l6ZSA9IE9CVUZTSVpF OworaW50IHpvZmJ1ZmZlciA9IDE7CitpbnQgem9mYmxvY2sgID0gMTsKKworI2lmZGVmIFNFU0xJ TUlUCitpbnQgc2VzbGltaXQgPSAwOworI2VuZGlmIC8qIFNFU0xJTUlUICovCisKKyNpZmRlZiBD S19BVVRIRU5USUNBVElPTgorI2luY2x1ZGUgImNrdWF0aC5oIgorI2VuZGlmIC8qIENLX0FVVEhF TlRJQ0FUSU9OICovCisKK19QUk9UT1RZUCggaW50IGdldGlvYnMsIChWT0lEKSApOworCisvKiAg TSBBIEkgTiAgLS0gIEMtS2VybWl0IG1haW4gcHJvZ3JhbSAgKi8KKworI2luY2x1ZGUgPHNpZ25h bC5oPgorCisjaWZuZGVmIE5PQ0NUUkFQCisjaW5jbHVkZSA8c2V0am1wLmg+CisjaW5jbHVkZSAi Y2tjc2lnLmgiCitja2ptcGJ1ZiBjbWpidWY7CisjaWZkZWYgR0VNRE9TICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogU3BlY2lhbCBmb3IgQXRhcmkgU1QgKi8KK2NjX2NsZWFuKCk7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBUaGlzIGNhbid0IGJlIHJpZ2h0PyAqLworI2VuZGlm IC8qIEdFTURPUyAqLworI2VuZGlmIC8qIE5PQ0NUUkFQICovCisKKyNpZm5kZWYgTk9YRkVSCisv KiBJbmZvIGFzc29jaWF0ZWQgd2l0aCBhIHN5c3RlbSBJRCAqLworCitzdHJ1Y3Qgc3lzZGF0YSBz eXNpZGxpc3RbXSA9IHsgICAgICAgICAgLyogQWRkIG90aGVycyBhcyBuZWVkZWQuLi4gKi8KKyAg eyAiMCIsICAiYW5vbnltb3VzIiwgICAgMCwgTlVMLCAgMCwgMCwgMCB9LAorICB7ICJBMSIsICJB cHBsZSBJSSIsICAgICAwLCBOVUwsICAwLCAwLCAzIH0sIC8qIGZpeCB0aGlzICovCisgIHsgIkEz IiwgIk1hY2ludG9zaCIsICAgIDEsICc6JywgIDAsIDIsIDEgfSwKKyAgeyAiRDciLCAiVk1TIiwg ICAgICAgICAgMCwgJ10nLCAgMSwgMCwgMCB9LAorICB7ICJEQSIsICJSU1RTL0UiLCAgICAgICAw LCAnXScsICAxLCAwLCAzIH0sIC8qIChpIHRoaW5rLi4uKSAqLworICB7ICJEQiIsICJSVDExIiwg ICAgICAgICAwLCBOVUwsICAxLCAwLCAzIH0sIC8qIChtYXliZS4uLikgKi8KKyAgeyAiRjMiLCAi QU9TL1ZTIiwgICAgICAgMSwgJzonLCAgMCwgMCwgMiB9LAorICB7ICJJMSIsICJWTS9DTVMiLCAg ICAgICAwLCBOVUwsICAwLCAwLCAwIH0sCisgIHsgIkkyIiwgIk1WUy9UU08iLCAgICAgIDAsIE5V TCwgIDAsIDAsIDAgfSwKKyAgeyAiSTQiLCAiTVVTSUMiLCAgICAgICAgMCwgTlVMLCAgMCwgMCwg MCB9LAorICB7ICJJNyIsICJDSUNTIiwgICAgICAgICAwLCBOVUwsICAwLCAwLCAwIH0sCisgIHsg Ikk5IiwgIk1WUy9ST1NDT0UiLCAgIDAsIE5VTCwgIDAsIDAsIDAgfSwKKyAgeyAiSzIiLCAiQXRh cmkgU1QiLCAgICAgMSwgJ1xcJywgMSwgMCwgMyB9LAorICB7ICJMMyIsICJBbWlnYSIsICAgICAg ICAxLCAnLycsICAxLCAwLCAyIH0sCisgIHsgIk1WIiwgIlN0cmF0dXMgVk9TIiwgIDEsICc+Jywg IDAsIDEsIDAgfSwKKyAgeyAiTjMiLCAiQXBvbGxvIEFlZ2lzIiwgMSwgJy8nLCAgMCwgMywgMiB9 LAorICB7ICJVMSIsICJVTklYIiwgICAgICAgICAxLCAnLycsICAwLCAzLCAyIH0sCisgIHsgIlU4 IiwgIk1TLURPUyIsICAgICAgIDEsICdcXCcsIDEsIDAsIDMgfSwKKyAgeyAiVUQiLCAiT1MtOSIs ICAgICAgICAgMSwgJy8nLCAgMCwgMywgMiB9LAorICB7ICJVTiIsICJXaW5kb3dzLTMyIiwgICAx LCAnXFwnLCAxLCAyLCAzIH0sCisgIHsgIlVPIiwgIk9TLzIiLCAgICAgICAgIDEsICdcXCcsIDEs IDIsIDMgfQorfTsKK3N0YXRpYyBpbnQgbnh4c3lzaWRzID0gKHNpemVvZihzeXNpZGxpc3QpIC8g c2l6ZW9mKHN0cnVjdCBzeXNkYXRhKSk7CisKKy8qIEdpdmVuIGEgS2VybWl0IHN5c3RlbSBJRCBj b2RlLCByZXR1cm4gdGhlIGFzc29jaWF0ZWQgbmFtZSBzdHJpbmcgKi8KKy8qIGFuZCBzb21lIHBy b3BlcnRpZXMgb2YgdGhlIGZpbGVuYW1lcy4uLiAqLworCitjaGFyICoKK2dldHN5c2lkKHMpIGNo YXIgKiBzOyB7ICAgICAgICAgICAgICAgICAvKiBHZXQgc3lzdGVtLXR5cGUgbmFtZSAqLworICAg IGludCBpOworICAgIGlmICghcykgcmV0dXJuKCIiKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbnh4 c3lzaWRzOyBpKyspCisgICAgICBpZiAoIXN0cmNtcChzeXNpZGxpc3RbaV0uc2lkX2NvZGUscykp CisgICAgICAgIHJldHVybihzeXNpZGxpc3RbaV0uc2lkX25hbWUpOworICAgIHJldHVybihzKTsK K30KKworaW50CitnZXRzeXNpeChzKSBjaGFyICpzOyB7ICAgICAgICAgICAgICAgICAgLyogR2V0 IHN5c3RlbS10eXBlIGluZGV4ICovCisgICAgaW50IGk7CisgICAgaWYgKCFzKSByZXR1cm4oLTEp OworICAgIGZvciAoaSA9IDA7IGkgPCBueHhzeXNpZHM7IGkrKykKKyAgICAgIGlmICghc3RyY21w KHN5c2lkbGlzdFtpXS5zaWRfY29kZSxzKSkKKyAgICAgICAgcmV0dXJuKGkpOworICAgIHJldHVy bigtMSk7Cit9CisjZW5kaWYgLyogTk9YRkVSICovCisKKy8qIFRlbGwgaWYgYSBwYXRobmFtZSBp cyBhYnNvbHV0ZSAodmVyc3VzIHJlbGF0aXZlKSAqLworLyogVGhpcyBzaG91bGQgYmUgcGFyY2Vs ZWQgb3V0IHRvIGVhY2ggb2YgdGhlIGNrKmZpby5jIG1vZHVsZXMuLi4gKi8KKy8qIFZNUyBpc2Fi c29sdXRlKCkgaXMgbm93IGluIGNrdmZpby5jLiAqLworI2lmbmRlZiBWTVMKK2ludAoraXNhYnNv bHV0ZShwYXRoKSBjaGFyICogcGF0aDsgeworICAgIGludCByYyA9IDA7CisgICAgaW50IHg7Cisg ICAgaWYgKCFwYXRoKQorICAgICAgcmV0dXJuKDApOworICAgIGlmICghKnBhdGgpCisgICAgICBy ZXR1cm4oMCk7CisgICAgeCA9IChpbnQpIHN0cmxlbihwYXRoKTsKKyAgICBkZWJ1ZyhGMTExLCJp c2Fic29sdXRlIixwYXRoLHgpOworI2lmZGVmIFVOSVgKKyAgICBpZiAoKnBhdGggPT0gJy8nCisj aWZkZWYgRFRJTERFCisgICAgICAgIHx8ICpwYXRoID09ICd+JworI2VuZGlmIC8qIERUSUxERSAq LworICAgICAgICApCisgICAgICByYyA9IDE7CisjZWxzZSAvKiBkZWYgVU5JWCAqLworI2lmZGVm IE9TMgorICAgIGlmICgqcGF0aCA9PSAnLycgfHwgKnBhdGggPT0gJ1xcJykKKyAgICAgIHJjID0g MTsKKyAgICBlbHNlIGlmIChpc2FscGhhKCpwYXRoKSAmJiB4ID4gMikKKyAgICAgIGlmICgqKHBh dGgrMSkgPT0gJzonICYmICgqKHBhdGggKzIpID09ICcvJyB8fCAqKHBhdGgrMikgPT0gJ1xcJykp CisgICAgICAgIHJjID0gMTsKKyNlbHNlIC8qIGRlZiBPUzIgKi8KKyNpZmRlZiBBTUlHQQorICAg IGlmICgqcGF0aCA9PSAnLycKKyNpZmRlZiBEVElMREUKKyAgICAgICAgfHwgKnBhdGggPT0gJ34n CisjZW5kaWYgLyogRFRJTERFICovCisgICAgICAgICkKKyAgICAgIHJjID0gMTsKKyNlbHNlIC8q IGRlZiBBTUlHQSAqLworI2lmZGVmIE9TSworICAgIGlmICgqcGF0aCA9PSAnLycKKyNpZmRlZiBE VElMREUKKyAgICAgICAgfHwgKnBhdGggPT0gJ34nCisjZW5kaWYgLyogRFRJTERFICovCisgICAg ICAgICkKKyAgICAgIHJjID0gMTsKKyNlbHNlIC8qIGRlZiBPU0sgKi8KKyNpZmRlZiBkYXRhZ2Vu ZXJhbAorICAgIGlmICgqcGF0aCA9PSAnOicpCisgICAgICByYyA9IDE7CisjZWxzZSAvKiBkZWYg ZGF0YWdlbmVyYWwgKi8KKyNpZmRlZiBNQUMKKyAgICByYyA9IDA7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBGaWxsIGluIGxhdGVyLi4uICovCisjZWxzZSAvKiBkZWYgTUFDICovCisj aWZkZWYgU1RSQVRVUworICAgIHJjID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IEZpbGwgaW4gbGF0ZXIuLi4gKi8KKyNlbHNlIC8qIGRlZiBTVFJBVFVTICovCisjaWZkZWYgR0VN RE9TCisgICAgaWYgKCpwYXRoID09ICcvJyB8fCAqcGF0aCA9PSAnXFwnKQorICAgICAgcmMgPSAx OworICAgIGVsc2UgaWYgKGlzYWxwaGEoKnBhdGgpICYmIHggPiAxKQorICAgICAgaWYgKCoocGF0 aCsxKSA9PSAnOicpCisgICAgICAgIHJjID0gMTsKKyNlbmRpZiAvKiBHRU1ET1MgKi8KKyNlbmRp ZiAvKiBTVFJBVFVTICovCisjZW5kaWYgLyogTUFDICovCisjZW5kaWYgLyogZGF0YWdlbmVyYWwg Ki8KKyNlbmRpZiAvKiBPU0sgKi8KKyNlbmRpZiAvKiBBTUlHQSAqLworI2VuZGlmIC8qIE9TMiAq LworI2VuZGlmIC8qIFVOSVggKi8KKyAgICBkZWJ1ZyhGMTAxLCJpc2Fic29sdXRlIHJjIiwiIixy Yyk7CisgICAgcmV0dXJuKHJjKTsKK30KKyNlbmRpZiAvKiBuZGVmIFZNUyAqLworCisvKiAgU2Vl IGlmIEkgaGF2ZSBkaXJlY3QgYWNjZXNzIHRvIHRoZSBrZXlib2FyZCAgKi8KKworaW50Citpc19h X3R0eShuKSBpbnQgbjsgeworI2lmZGVmIFVOSVgKKyAgICBleHRlcm4gaW50IHR0ZmRmbGc7Cisg ICAgaWYgKHR0ZmRmbGcgPiAwKQorICAgICAgcmV0dXJuKDEpOworI2VuZGlmIC8qIFVOSVggKi8K KyNpZmRlZiBLVUkKKyAgICByZXR1cm4gMTsKKyNlbHNlIC8qIEtVSSAqLworI2lmZGVmIE5UCisg ICAgaWYgKGlzV2luOTUoKSkKKyAgICAgIHJldHVybigxKTsKKyAgICBlbHNlCisgICAgICByZXR1 cm4oX2lzYXR0eShuKSk7CisjZWxzZQorI2lmZGVmIElLU0QKKyAgIGlmIChpbnNlcnZlcikKKyAg ICAgcmV0dXJuKDEpOworICAgZWxzZQorI2VuZGlmIC8qIElLU0QgKi8KKyAgICAgcmV0dXJuKGlz YXR0eShuKSk7CisjZW5kaWYgLyogTlQgKi8KKyNlbmRpZiAvKiBLVUkgKi8KK30KKworI2lmbmRl ZiBOT1hGRVIKK1ZPSUQKK2luaXR4bGlzdCgpIHsKKyAgICBleHRlcm4gY2hhciAqIHNuZGV4Y2Vw dFtdLCAqIHJjdmV4Y2VwdFtdOworICAgIGludCBpOworICAgIGZvciAoaSA9IDA7IGkgPCBOU05E RVhDRVBUOyBpKyspIHsKKwlzbmRleGNlcHRbaV0gPSBOVUxMOworCXJjdmV4Y2VwdFtpXSA9IE5V TEw7CisgICAgfQorfQorI2VuZGlmIC8qIE5PWEZFUiAqLworCisvKiBJbml0aWFsaXplIGZsb3cg Y29udHJvbCB0YWJsZSAqLworCitWT0lECitpbml0ZmxvdygpIHsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogRGVmYXVsdCB2YWx1ZXMgZm9yIGZsb3cgY29udHJvbCAqLworI2lmZGVmIFZN UyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZvciBlYWNoIGtpbmQgb2YgY29ubmVj dGlvbi4gKi8KKyAgICAvKiBUaGUgVk1TIHRlbG5ldCB0ZXJtaW5hbCBkcml2ZXIgdHJlYXRzICJu b25lIiBhcyByZXF1ZXN0IHRvIGxvc2UgY2hhcnMgKi8KKyAgICBjeGZsb3dbQ1hUX1JFTU9URV0g ID0gRkxPX1hPTlg7ICAgICAvKiBSZW1vdGUgbW9kZS4uLiAqLworI2Vsc2UKKyNpZmRlZiBIUFVY CisgICAgLyogRGl0dG8gZm9yIEhQLVVYICovCisgICAgY3hmbG93W0NYVF9SRU1PVEVdICA9IEZM T19YT05YOyAgICAgLyogUmVtb3RlIG1vZGUuLi4gKi8KKyNlbHNlCisgICAgLyogVGhlIHRlbXB0 YXRpb24gaXMgdG8gbWFrZSB0aGlzIG9uZSBGTE9fS0VFUCBidXQgZG9uJ3QhISEgKi8KKyAgICAv KiBJdCB0b3RhbGx5IHdyZWNrcyBiaW5hcnktZmlsZSB0cmFuc2ZlciB3aGVuIGNvbWluZyBpbiB2 aWEgVGVsbmV0LiAqLworICAgIC8qIEluIFVOSVggYXQgbGVhc3QuLi4gKi8KKyAgICBjeGZsb3db Q1hUX1JFTU9URV0gID0gRkxPX05PTkU7CisjZW5kaWYgLyogSFBVWCAqLworI2VuZGlmIC8qIFZN UyAqLworCisjaWZkZWYgVk1TCisgICAgY3hmbG93W0NYVF9ESVJFQ1RdICA9IEZMT19YT05YOyAg ICAgLyogRGlyZWN0IHNlcmlhbCBjb25uZWN0aW9ucy4uLiAqLworI2Vsc2UKKyAgICBjeGZsb3db Q1hUX0RJUkVDVF0gID0gRkxPX05PTkU7CisjZW5kaWYgLyogVk1TICovCisKKyNpZmRlZiBDS19S VFNDVFMKKyAgICBjeGZsb3dbQ1hUX01PREVNXSAgID0gRkxPX1JUU0M7ICAgICAvKiBNb2RlbSBj b25uZWN0aW9ucy4uLiAqLworI2Vsc2UKKyNpZmRlZiBWTVMKKyAgICBjeGZsb3dbQ1hUX01PREVN XSAgID0gRkxPX1hPTlg7CisjZWxzZQorICAgIGN4Zmxvd1tDWFRfTU9ERU1dICAgPSBGTE9fTk9O RTsKKyNlbmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBDS19SVFNDVFMgKi8KKworI2lmZGVmIFZN UworICAgIGN4Zmxvd1tDWFRfVENQSVBdICAgPSBGTE9fWE9OWDsgICAgIC8qIFRDUC9JUCBjb25u ZWN0aW9ucy4uLiAqLworI2Vsc2UKKyAgICBjeGZsb3dbQ1hUX1RDUElQXSAgID0gRkxPX05PTkU7 CisjZW5kaWYgLyogVk1TICovCisKKyAgICBjeGZsb3dbQ1hUX1NTSF0gICAgID0gRkxPX05PTkU7 CisgICAgY3hmbG93W0NYVF9YMjVdICAgICA9IEZMT19OT05FOyAgICAgLyogT3RoZXIga2luZHMg b2YgbmV0d29ya3MuLi4gKi8KKyAgICBjeGZsb3dbQ1hUX0RFQ05FVF0gID0gRkxPX1hPTlg7Cisg ICAgY3hmbG93W0NYVF9MQVRdICAgICA9IEZMT19YT05YOworICAgIGN4Zmxvd1tDWFRfTkVUQklP U10gPSBGTE9fTk9ORTsKKyAgICBjeGZsb3dbQ1hUX05QSVBFXSAgID0gRkxPX05PTkU7CisgICAg Y3hmbG93W0NYVF9QSVBFXSAgICA9IEZMT19OT05FOworICAgIGZsb3cgPSBjeGZsb3dbY3h0eXBl XTsgICAgICAgICAgICAgIC8qIEluaXRpYWwgZmxvdyBzZXR0aW5nLiAqLworICAgIGRlYnVnKEYx MDEsImluaXRmbG93IiwiIixmbG93KTsKK30KKworI2lmbmRlZiBOT1hGRVIKKy8qIEluaXRpYWxp emUgZmlsZSB0cmFuc2ZlciBwcm90b2NvbHMgKi8KKworVk9JRAoraW5pdHByb3RvKHksIHVwYnN0 ciwgdXB0c3RyLCBzcnZzdHIsIHNuZGJzdHIsIHNuZHRzdHIsIHJjdmJzdHIsIHJjdnRzdHIpCisg ICAgaW50IHk7CisgICAgY2hhciAqIHVwYnN0ciwgKiB1cHRzdHIsICogc3J2c3RyLCAqIHNuZGJz dHIsICogc25kdHN0ciwgKiByY3Zic3RyLAorICAgICogcmN2dHN0cjsKKy8qIGluaXRwcm90byAq LyB7CisKKyAgICBpZiAodXBic3RyKSAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDb252ZXJ0 IG51bGwgc3RyaW5ncyAqLworICAgICAgaWYgKCEqdXBic3RyKSAgICAgICAgICAgICAgICAgICAg IC8qIHRvIG51bGwgcG9pbnRlcnMgKi8KKyAgICAgICAgdXBic3RyID0gTlVMTDsKKworICAgIGlm ICh1cHRzdHIpICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvbnZlcnQgbnVsbCBzdHJpbmdz ICovCisgICAgICBpZiAoISp1cHRzdHIpICAgICAgICAgICAgICAgICAgICAgLyogdG8gbnVsbCBw b2ludGVycyAqLworICAgICAgICB1cHRzdHIgPSBOVUxMOworCisgICAgaWYgKHNuZGJzdHIpCisg ICAgICBpZiAoISpzbmRic3RyKQorICAgICAgICBzbmRic3RyID0gTlVMTDsKKworICAgIGlmIChz bmR0c3RyKQorICAgICAgaWYgKCEqc25kdHN0cikKKyAgICAgICAgc25kdHN0ciA9IE5VTEw7CisK KyAgICBpZiAocmN2YnN0cikKKyAgICAgIGlmICghKnJjdmJzdHIpCisgICAgICAgIHJjdmJzdHIg PSBOVUxMOworCisgICAgaWYgKHJjdnRzdHIpCisgICAgICBpZiAoISpyY3Z0c3RyKQorICAgICAg ICByY3Z0c3RyID0gTlVMTDsKKworICAgIGlmIChzcnZzdHIpCisgICAgICBpZiAoISpzcnZzdHIp CisgICAgICAgIHNydnN0ciA9IE5VTEw7CisKKyAgICBwcm90b2NvbCA9IHk7ICAgICAgICAgICAg ICAgICAgICAgICAvKiBTZXQgcHJvdG9jb2wgKi8KKworICAgIGlmIChwdGFiW3Byb3RvY29sXS5y cGt0bGVuID4gLTEpCisgICAgICB1cnBzaXogPSBwdGFiW3Byb3RvY29sXS5ycGt0bGVuOworICAg IGlmIChwdGFiW3Byb3RvY29sXS5zcGt0ZmxnID4gLTEpCisgICAgICBzcHNpemYgPSBwdGFiW3By b3RvY29sXS5zcGt0ZmxnOworICAgIGlmIChwdGFiW3Byb3RvY29sXS5zcGt0bGVuID4gLTEpIHsK KyAgICAgICAgc3BzaXogPSBwdGFiW3Byb3RvY29sXS5zcGt0bGVuOworICAgICAgICBkZWJ1ZyhG MTAxLCJpbml0cHJvdG8gc3BzaXoiLCIiLHNwc2l6KTsKKyAgICAgICAgaWYgKHNwc2l6Zikgewor ICAgICAgICAgICAgc3BzaXpyID0gc3BtYXggPSBzcHNpejsKKyAgICAgICAgICAgIGRlYnVnKEYx MDEsImluaXRwcm90byBzcHNpenIiLCIiLHNwc2l6cik7CisgICAgICAgIH0KKyAgICB9CisgICAg aWYgKHB0YWJbcHJvdG9jb2xdLndpbnNpemUgPiAtMSkKKyAgICAgIHdzbG90ciA9IHB0YWJbcHJv dG9jb2xdLndpbnNpemU7CisgICAgaWYgKHB0YWJbcHJvdG9jb2xdLnByZWZpeCA+IC0xKQorICAg ICAgcHJlZml4aW5nID0gcHRhYltwcm90b2NvbF0ucHJlZml4OworICAgIGlmIChwdGFiW3Byb3Rv Y29sXS5mbmNhID4gLTEpCisgICAgICBmbmNhY3QgID0gcHRhYltwcm90b2NvbF0uZm5jYTsKKyAg ICBpZiAocHRhYltwcm90b2NvbF0uZm5jbiA+IC0xKQorICAgICAgZm5jbnYgICA9IHB0YWJbcHJv dG9jb2xdLmZuY247CisgICAgaWYgKHB0YWJbcHJvdG9jb2xdLmZuc3AgPiAtMSkKKyAgICAgIGZu c3BhdGggPSBwdGFiW3Byb3RvY29sXS5mbnNwOworICAgIGlmIChwdGFiW3Byb3RvY29sXS5mbnJw ID4gLTEpCisgICAgICBmbnJwYXRoID0gcHRhYltwcm90b2NvbF0uZm5ycDsKKworICAgIG1ha2Vz dHIoJihwdGFiW3Byb3RvY29sXS5oX2JfaW5pdCksdXBic3RyKTsKKyAgICBtYWtlc3RyKCYocHRh Yltwcm90b2NvbF0uaF90X2luaXQpLHVwdHN0cik7CisgICAgbWFrZXN0cigmKHB0YWJbcHJvdG9j b2xdLmhfeF9pbml0KSxzcnZzdHIpOworICAgIG1ha2VzdHIoJihwdGFiW3Byb3RvY29sXS5wX2Jf c2NtZCksc25kYnN0cik7CisgICAgbWFrZXN0cigmKHB0YWJbcHJvdG9jb2xdLnBfdF9zY21kKSxz bmR0c3RyKTsKKyAgICBtYWtlc3RyKCYocHRhYltwcm90b2NvbF0ucF9iX3JjbWQpLHJjdmJzdHIp OworICAgIG1ha2VzdHIoJihwdGFiW3Byb3RvY29sXS5wX3RfcmNtZCkscmN2dHN0cik7Cit9Cisj ZW5kaWYgLyogTk9YRkVSICovCisKKyNpZm5kZWYgTk9DTURMCitWT0lECisjaWZkZWYgQ0tfQU5T SUMKK2RvY21kbGluZSh2b2lkICogdGhyZWFkaW5mbykKKyNlbHNlIC8qIENLX0FOU0lDICovCitk b2NtZGxpbmUodGhyZWFkaW5mbykgVk9JRCAqIHRocmVhZGluZm87CisjZW5kaWYgLyogQ0tfQU5T SUMgKi8KK3sKKyNpZmRlZiBOVFNJRworICAgIHNldGludCgpOworICAgIGlmICh0aHJlYWRpbmZv KSB7ICAgICAgICAgICAgICAgICAgIC8qIFRocmVhZCBsb2NhbCBzdG9yYWdlLi4uICovCisgICAg ICAgVGxzU2V0VmFsdWUoVGxzSW5kZXgsdGhyZWFkaW5mbyk7CisgICAgICAgZGVidWcoIEYxMDAs ICJkb2NtZGxpbmUgY2FsbGVkIHdpdGggdGhyZWFkaW5mbyBibG9jayIsICIiLCAwICk7CisgICAg fSBlbHNlCisgICAgICBkZWJ1ZyggRjEwMCwgImRvY21kbGluZSB0aHJlYWRpbmZvIGlzIE5VTEwi LCIiLDApOworI2VuZGlmIC8qIE5UU0lHICovCisjaWZkZWYgQ0tfTE9HSU4KKyNpZmRlZiBOVAor I2lmZGVmIElLU0QKKyAgICBpZiAoaW5zZXJ2ZXIpCisgICAgICBzZXRudGNyZWRzKCk7CisjZW5k aWYgLyogSUtTRCAqLworI2VuZGlmIC8qIE5UICovCisjZW5kaWYgLyogQ0tfTE9HSU4gKi8KKyAg ICBwcm90bygpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUYWtlIGFueSByZXF1ZXN0 ZWQgYWN0aW9uLCB0aGVuICovCisgICAgaWYgKCFxdWlldCkgICAgICAgICAgICAgICAgICAgICAg ICAgLyogcHV0IGN1cnNvciBiYWNrIGF0IGxlZnQgbWFyZ2luLCAqLworICAgICAgY29ub2xsKCIi KTsKKyNpZm5kZWYgTk9MT0NBTAorICAgIGlmIChjbmZsZykgeyAgICAgICAgICAgICAgICAgICAg ICAgIC8qIFJlLWNvbm5lY3QgaWYgcmVxdWVzdGVkICovCisgICAgICAgIGNuZmxnID0gMDsKKyAg ICAgICAgZG9jb25lY3QoMCwwKTsKKyAgICAgICAgaWYgKHR0Y2hrKCkgPCAwKQorICAgICAgICAg IGRvbG9nZW5kKCk7CisgICAgfQorI2VuZGlmIC8qIE5PTE9DQUwgKi8KKworI2lmZGVmIE5UU0lH CisgICAgIGNrVGhyZWFkRW5kKHRocmVhZGluZm8pOworI2VuZGlmIC8qIE5UU0lHICovCisgICBy ZXR1cm47Cit9CisKK3ZvaWQKK2lrc2xvZ2luKCkgeworICAgIGlmIChzc3RlbG5ldAorI2lmZGVm IElLU0QKKyAgICAgICAgfHwgaW5zZXJ2ZXIgICAgICAgICAgICAgICAgICAgICAvKiBJbnRlcm5l dCBzZXJ2ZXIgKi8KKyNlbmRpZiAvKiBJS1NEICovCisgICAgICAgICkgeworICAgICAgICBjaGFy ICpzOworICAgICAgICBleHRlcm4gaW50IGZkaXNwbGE7ICAgICAgICAgICAgIC8qIEZpbGUtdHJh bnNmZXIgZGlzcGxheSBmb3JtYXQgKi8KKyAgICAgICAgZXh0ZXJuIGNoYXIgKiBpa3Byb21wdDsg ICAgICAgICAvKiBJS1NEIHByb21wdCAqLworCisjaWZkZWYgSUtTRAorI2lmZGVmIENLX0xPR0lO CisgICAgICAgIGlmIChpbnNlcnZlcikgeworICAgICAgICAgICAgeF9sb2dpbiA9IDE7ICAgICAg ICAgICAgICAgIC8qIExvZ2luIHJlcXVpcmVkICovCisgICAgICAgICAgICB4X2xvZ2dlZCA9IDA7 ICAgICAgICAgICAgICAgLyogTm90IGxvZ2dlZCBpbiB5ZXQgKi8KKyAgICAgICAgICAgIGNtc2V0 cChpa3Byb21wdCk7ICAgICAgICAgICAvKiBTZXQgdXAgSUtTRCdzIHByb21wdCAqLworI2lmbmRl ZiBOT1NFUlZFUgorICAgICAgICAgICAgZW5fbWFpID0gMDsgICAgICAgICAgICAgICAgIC8qIE1B SUwgaXMgZGlzYWJsZWQgKi8KKyAgICAgICAgICAgIGVuX3dobyA9IDA7ICAgICAgICAgICAgICAg ICAvKiBSRU1PVEUgV0hPIGlzIGRpc2FibGVkICovCisgICAgICAgICAgICBlbl9ob3MgPSAwOyAg ICAgICAgICAgICAgICAgLyogUkVNT1RFIEhPU1QgaXMgZGlzYWJsZWQgKi8KKyAgICAgICAgICAg IGVuX3ByaSA9IDA7ICAgICAgICAgICAgICAgICAvKiBQUklOVCBpcyBkaXNhYmxlZCAqLworI2Vu ZGlmIC8qIE5PU0VSVkVSICovCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB4X2xvZ2lu ID0gMDsgICAgICAgICAgICAgICAgLyogTG9naW4gbm90IHJlcXVpcmVkICovCisgICAgICAgICAg ICB4X2xvZ2dlZCA9IDE7ICAgICAgICAgICAgICAgLyogQWxyZWFkeSBsb2dnZWQgaW4gKi8KKyAg ICAgICAgfQorI2VuZGlmIC8qIENLX0xPR0lOICovCisjZW5kaWYgLyogSUtTRCAqLworICAgICAg ICBub2xvY2FsID0gMTsgICAgICAgICAgICAgICAgICAgIC8qIFNFVCBMSU5FL0hPU1Qgbm90IGFs bG93ZWQgKi8KKyAgICAgICAgZmRpc3BsYSA9IFhZRkRfTjsgICAgICAgICAgICAgICAvKiBObyBm aWxlLXRyYW5zZmVyIGRpc3BsYXkgKi8KKyNpZmRlZiBORVRDT05OCisgICAgICAgIGNsaWVudGhv c3QgPSBja2dldHBlZXIoKTsgICAgICAgLyogR2V0IGNsaWVudCdzIGhvc3RuYW1lICovCisgICAg ICAgIGRlYnVnKEYxMTAsImlrc2xvZ2luIGNsaWVudGhvc3QiLGNsaWVudGhvc3QsMCk7CisjZW5k aWYgLyogTkVUQ09OTiAqLworICAgICAgICB6dGltZSgmcyk7ICAgICAgICAgICAgICAgICAgICAg IC8qIEdldCBjdXJyZW50IGRhdGUgYW5kIHRpbWUgKi8KKworI2lmZGVmIENLX0xPR0lOCisjaWZk ZWYgQ0tfQVVUSEVOVElDQVRJT04KKyAgICAgICAgaWYgKHhfbG9naW4pIHsKKyAgICAgICAgICAg IHhfbG9nZ2VkID0gY2tfdG5fYXV0aF92YWxpZCgpOyAvKiBEaWQgVGVsbmV0IEF1dGggc3VjY2Vl ZD8gKi8KKyAgICAgICAgICAgIGRlYnVnKEYxMTEsImlrc2xvZ2luIiwieF9sb2dnZWQiLHhfbG9n Z2VkKTsKKworI2lmZGVmIE5UCisgICAgICAgICAgICAvKiBPbiBXaW5kb3dzIDl4LCB3ZSBkbyBu b3QgaGF2ZSB0aGUgYWJpbGl0eSBpbiAgKi8KKyAgICAgICAgICAgIC8qIHp2dXNlcigpIGF0IHBy ZXNlbnQgdG8gZGV0ZXJtaW5lIGlmIHRoZSBuYW1lICAqLworICAgICAgICAgICAgLyogYXBwcm92 ZWQgaW4gYSBLZXJiZXJvcyBwcmluY2lwYWwgaXMgcmVhbGx5IGEgICovCisgICAgICAgICAgICAv KiBhbiBhY2NvdW50IGluIHRoZSBXaW5kb3dzIEFjY2VzcyBDb250cm9sIExpc3QgKi8KKyAgICAg ICAgICAgIGlmIChpc1dpbjk1KCkgJiYgeF9sb2dnZWQgPT0gQVVUSF9WQUxJRAorICAgICAgICAg ICAgICAgICAmJiAoY2tfdG5fYXV0aGVudGljYXRlZCgpICE9IEFVVEhUWVBFX05UTE0pCisjaWZk ZWYgQ0tfU1JQCisgICAgICAgICAgICAgICAgICYmIChja190bl9hdXRoZW50aWNhdGVkKCkgIT0g QVVUSFRZUEVfU1JQKQorI2VuZGlmIC8qIENLX1NSUCAqLworICAgICAgICAgICAgICAgICApIHsK KyAgICAgICAgICAgICAgICBhdXRoX2ZpbmlzaGVkKEFVVEhfVVNFUik7CisgICAgICAgICAgICAg ICAgeF9sb2dnZWQgPSBBVVRIX1VTRVI7CisgICAgICAgICAgICAgICAgcHJpbnRmKCJXQVJOSU5H OlxyXG4iKTsKKyAgICAgICAgICAgICAgICBwcmludGYoCisiIFRoZSBUZWxuZXQgYXV0aGVudGlj YXRpb24gbWV0aG9kIHVzZWQgY2Fubm90IHByb3ZpZGUgZm9yIGF1dG9tYXRlZFxyXG4iKTsKKyAg ICAgICAgICAgICAgICBwcmludGYoCisiIGxvZ2luIHRvIFdpbmRvd3MgOTUgb3IgV2luZG93cyA5 OC4gIEEgcGFzc3dvcmQgbXVzdCBiZSBlbnRlcmVkXHJcbiIpOworICAgICAgICAgICAgICAgIHBy aW50ZigKKyIgbG9jYWxseSB0byB2YWxpZGF0ZSB5b3VyIHVzZXJpZC4gIFRlbG5ldCBhdXRoZW50 aWNhdGlvbiAoYW5kIGVuY3J5cHRpb24pXHJcbiIKKyAgICAgICAgICAgICAgICApOworICAgICAg ICAgICAgICAgIHByaW50ZigKKyIgY2FuIGJlIHVzZWQgdG8gdmFsaWRhdGUgdGhlIGhvc3QgKGFu ZCBwcm90ZWN0IHRoZSBwcml2YWN5IG9mIHlvdXIgcGFzc3dvcmQuKVwKK1xyXG4iCisgICAgICAg ICAgICAgICAgKTsKKyAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBOVCAqLworCisgICAgICAgICAg ICBpZiAoeF9sb2dnZWQgPT0gQVVUSF9WQUxJRCkgeworI2lmZGVmIENLX1NTTAorICAgICAgICAg ICAgICAgIGlmICgoc3NsX2FjdGl2ZV9mbGFnIHx8IHRsc19hY3RpdmVfZmxhZykgJiYKKyAgICAg ICAgICAgICAgICAgICAgKCFURUxPUFRfVShURUxPUFRfQVVUSEVOVElDQVRJT04pIHx8CisgICAg ICAgICAgICAgICAgICAgICBja190bl9hdXRoZW50aWNhdGVkKCkgPT0gQVVUSFRZUEVfTlVMTCB8 fAorICAgICAgICAgICAgICAgICAgICAgY2tfdG5fYXV0aGVudGljYXRlZCgpID09IEFVVEhUWVBF X0FVVE8pCisgICAgICAgICAgICAgICAgICAgICkgeworI2lmZGVmIFNTTF9LUkI1CisgICAgICAg ICAgICAgICAgICAgIGlmICh0bHNfaXNfa3JiNSgwKSkgeworICAgICAgICAgICAgICAgICAgICAg ICAgcHJpbnRmKCJBdXRoZW50aWNhdGVkIHVzaW5nIEtlcmJlcm9zIDVcclxuIik7CisjaWZkZWYg Q0tTWVNMT0cKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChja3hzeXNsb2cgPj0gU1lTTEdf TEkgJiYgY2t4bG9nZ2luZykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVybiBj aGFyIHN6VXNlck5hbWVBdXRoZW50aWNhdGVkW107CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY2tzeXNsb2coU1lTTEdfTEksIDEsICJBVVRIX1ZBTElEIiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAiS2VyYmVyb3MgNSIsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc3pVc2VyTmFtZUF1dGhlbnRpY2F0ZWQKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgICAgICAgICAgfQorI2VuZGlm IC8qIENLU1lTTE9HICovCisgICAgICAgICAgICAgICAgICAgIH0gZWxzZQorI2VuZGlmIC8qIFNT TF9LUkI1ICovCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg IHByaW50ZigiQXV0aGVudGljYXRlZCB1c2luZyBYLjUwOSBjZXJ0aWZpY2F0ZVxyXG4iKTsKKyNp ZmRlZiBDS1NZU0xPRworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNreHN5c2xvZyA+PSBT WVNMR19MSSAmJiBja3hsb2dnaW5nKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0 ZXJuIGNoYXIgc3pVc2VyTmFtZUF1dGhlbnRpY2F0ZWRbXTsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICBja3N5c2xvZyhTWVNMR19MSSwgMSwgIkFVVEhfVkFMSUQiLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICJYLjUwOSBjZXJ0aWZpY2F0ZSIsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3pVc2VyTmFtZUF1dGhlbnRpY2F0ZWQKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgICAgICAg ICAgfQorI2VuZGlmIC8qIENLU1lTTE9HICovCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgICB9IGVsc2UKKyNlbmRpZiAvKiBDS19TU0wgKi8KKyAgICAgICAgICAgICAgICAg IHsKKyAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIkF1dGhlbnRpY2F0ZWQgdXNpbmcgJXNc clxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVVUSFRZUEVfTkFNRShja190bl9h dXRoZW50aWNhdGVkKCkpKTsKKyNpZmRlZiBDS1NZU0xPRworICAgICAgICAgICAgICAgICAgICAg IGlmIChja3hzeXNsb2cgPj0gU1lTTEdfTEkgJiYgY2t4bG9nZ2luZykgeworICAgICAgICAgICAg ICAgICAgICAgICAgICBleHRlcm4gY2hhciBzelVzZXJOYW1lQXV0aGVudGljYXRlZFtdOworICAg ICAgICAgICAgICAgICAgICAgICAgICBja3N5c2xvZyhTWVNMR19MSSwgMSwgIkFVVEhfVkFMSUQi LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVVRIVFlQRV9OQU1FKGNrX3Ru X2F1dGhlbnRpY2F0ZWQoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN6 VXNlck5hbWVBdXRoZW50aWNhdGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICk7CisgICAgICAgICAgICAgICAgICAgICAgfQorI2VuZGlmIC8qIENLU1lTTE9HICovCisgICAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgenZ1c2VyKHVpZGJ1Zik7CisgICAgICAg ICAgICAgICAgaWYgKHp2cGFzcygiIikgPT0gMCkKKyAgICAgICAgICAgICAgICAgIHhfbG9nZ2Vk ID0gMDsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoeF9sb2dnZWQgPT0gQVVUSF9VU0VSICYmICFz dHJjbXAodWlkYnVmLCJhbm9ueW1vdXMiKSkgeworICAgICAgICAgICAgICAgIGV4dGVybiBjaGFy IHN6VXNlck5hbWVBdXRoZW50aWNhdGVkW107CisgICAgICAgICAgICAgICAgenZ1c2VyKHVpZGJ1 Zik7CisgICAgICAgICAgICAgICAgZGVidWcoRjExMCwic3pVc2VyTmFtZUF1dGhlbnRpY2F0ZWQi LAorICAgICAgICAgICAgICAgICAgICAgIHN6VXNlck5hbWVBdXRoZW50aWNhdGVkLDApOworICAg ICAgICAgICAgICAgIGlmICh6dnBhc3Moc3pVc2VyTmFtZUF1dGhlbnRpY2F0ZWQpID09IDApIHsK KyAgICAgICAgICAgICAgICAgIC8qIEFub255bW91cyBsb2dpbiBmYWlsZWQuICBGb3JjZSBhIHVz ZXJuYW1lIHByb21wdC4gKi8KKyAgICAgICAgICAgICAgICAgIHhfbG9nZ2VkID0gMDsKKyAgICAg ICAgICAgICAgICAgIHVpZGJ1ZlswXSA9ICdcMCc7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsK KyNpZmRlZiBDS19TU0wKKyAgICAgICAgICAgICAgICAgICAgaWYgKChzc2xfYWN0aXZlX2ZsYWcg fHwgdGxzX2FjdGl2ZV9mbGFnKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgKCFURUxPUFRf VShURUxPUFRfQVVUSEVOVElDQVRJT04pIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgY2tf dG5fYXV0aGVudGljYXRlZCgpID09IEFVVEhUWVBFX05VTEwgfHwKKyAgICAgICAgICAgICAgICAg ICAgICAgICBja190bl9hdXRoZW50aWNhdGVkKCkgPT0gQVVUSFRZUEVfQVVUTykpIHsKKyAgICAg ICAgICAgICAgICAgICAgICAgIHByaW50ZigiQXV0aGVudGljYXRlZCB1c2luZyBYLjUwOSBjZXJ0 aWZpY2F0ZVxyXG4iKTsKKyNpZmRlZiBDS1NZU0xPRworICAgICAgICAgICAgICAgICAgICAgICAg aWYgKGNreHN5c2xvZyA+PSBTWVNMR19MSSAmJiBja3hsb2dnaW5nKSB7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZXh0ZXJuIGNoYXIgc3pVc2VyTmFtZUF1dGhlbnRpY2F0ZWRbXTsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICBja3N5c2xvZyhTWVNMR19MSSwgMSwgIkFVVEhfVVNF UiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlguNTA5IGNlcnRpZmlj YXRlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzelVzZXJOYW1lQXV0 aGVudGljYXRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAg ICAgICAgICAgICAgICAgICAgICB9CisjZW5kaWYgLyogQ0tTWVNMT0cgKi8KKyAgICAgICAgICAg ICAgICAgICAgfSBlbHNlCisjZW5kaWYgLyogQ0tfU1NMICovCisgICAgICAgICAgICAgICAgICAg ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIkF1dGhlbnRpY2F0ZWQgdXNp bmcgJXNcclxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFVVEhUWVBFX05B TUUoY2tfdG5fYXV0aGVudGljYXRlZCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKTsKKyNpZmRlZiBDS1NZU0xPRworICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2t4 c3lzbG9nID49IFNZU0xHX0xJICYmIGNreGxvZ2dpbmcpIHsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNrc3lzbG9nKFNZU0xHX0xJLCAxLCAiQVVUSF9VU0VSIiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFVVEhUWVBFX05BTUUoY2tfdG5fYXV0aGVudGlj YXRlZCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN6VXNlck5h bWVBdXRoZW50aWNhdGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAp OworICAgICAgICAgICAgICAgICAgICAgICAgICB9CisjZW5kaWYgLyogQ0tTWVNMT0cgKi8KKyAg ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBl bHNlIHsKKyNpZmRlZiBDS1NZU0xPRworICAgICAgICAgICAgICAgIGlmIChja3hzeXNsb2cgPj0g U1lTTEdfTEkgJiYgY2t4bG9nZ2luZyAmJgorICAgICAgICAgICAgICAgICAgICB4X2xvZ2dlZCA9 PSBBVVRIX1VTRVIpIHsKKyAgICAgICAgICAgICAgICAgICAgZXh0ZXJuIGNoYXIgc3pVc2VyTmFt ZUF1dGhlbnRpY2F0ZWRbXTsKKyAgICAgICAgICAgICAgICAgICAgY2tzeXNsb2coU1lTTEdfTEks IDEsICJBVVRIX1VTRVIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVVRIVFlQRV9O QU1FKGNrX3RuX2F1dGhlbnRpY2F0ZWQoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHN6VXNlck5hbWVBdXRoZW50aWNhdGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7 CisgICAgICAgICAgICAgICAgfQorI2VuZGlmIC8qIENLU1lTTE9HICovCisgICAgICAgICAgICAg ICAgeF9sb2dnZWQgPSAwOworICAgICAgICAgICAgICAgIGlmICghc3RyY21wKCIodW5rbm93biki LHVpZGJ1ZikKKyNpZmRlZiBOVAorICAgICAgICAgICAgICAgICAgICB8fCAhc3RyaWNtcCgiYWRt aW5pc3RyYXRvciIsdWlkYnVmKQorI2lmZGVmIFVOSVgKKyAgICAgICAgICAgICAgICAgICAgfHwg IXN0cmNtcCgicm9vdCIsdWlkYnVmKQorI2Vsc2UKKyNpZmRlZiBQbGFuOQorICAgICAgICAgICAg ICAgICAgICB8fCAhc3RyY21wKCJyb290Iix1aWRidWYpCisjZWxzZQorI2lmZGVmIE9TSworICAg ICAgICAgICAgICAgICAgICB8fCAhc3RyY21wKCJyb290Iix1aWRidWYpCisjZW5kaWYgLyogT1NL ICovCisjZW5kaWYgLyogUGxhbjkgKi8KKyNlbmRpZiAvKiBVTklYICovCisjZW5kaWYgLyogTlQg Ki8KKyAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgICAgdWlkYnVmWzBdID0g J1wwJzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorI2VuZGlmIC8qIENLX0FVVEhFTlRJQ0FU SU9OICovCisjZW5kaWYgLyogQ0tfTE9HSU4gKi8KKworI2lmZGVmIElLU0QKKyAgICAgICAgaWYg KGluc2VydmVyKQorICAgICAgICAgIHByaW50ZigiXHJcbkludGVybmV0IEtlcm1pdCBTZXJ2aWNl IHJlYWR5IGF0ICVzJXNcclxuIixzLHZlcnNpbyk7CisgICAgICAgIGVsc2UKKyNlbmRpZiAvKiBJ S1NEICovCisgICAgICAgICAgcHJpbnRmKCJcclxuQy1LZXJtaXQgcmVhZHkgYXQgJXMlc1xyXG4i LHMsdmVyc2lvKTsKKyAgICAgICAgaWYgKCpteWhvc3QpCisgICAgICAgICAgcHJpbnRmKCIlc1xy XG4iLCBteWhvc3QpOworICAgICAgICBwcmludGYoIlxyXG4iKTsKKyAgICB9CisjaWZkZWYgQ0tf TE9HSU4KKyNpZmRlZiBJS1NECisgICAgaWYgKGluc2VydmVyKSB7CisgICAgICAgIGludCBpOwor ICAgICAgICBleHRlcm4gaW50IGFyZ194OyAgICAgICAgICAgICAgIC8qIEZsYWcgZm9yICcteCcg b24gY29tbWFuZCBsaW5lICovCisjaWZuZGVmIE5PU1BMCisgICAgICAgIGV4dGVybiBzdHJ1Y3Qg bXRhYiAqbWFjdGFiOyAgICAgICAgIC8qIEZvciBPTl9MT0dJTiBtYWNyby4gKi8KKyAgICAgICAg ZXh0ZXJuIGludCBubWFjOworI2VuZGlmIC8qIE5PU1BMICovCisKKyAgICAgICAgZGVidWcoRjEx MCwiTUFJTiBjbGllbnRob3N0IixjbGllbnRob3N0LDApOworICAgICAgICBzcnZpZGwgPSB0aW1l bGltaXQgPSBsb2dpbnRpbW87IC8qIEZvciBpbnRlcmFjdGl2ZSBsb2dpbiAqLworICAgICAgICBy dGltZXIoKTsgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlc2V0IHRpbWVyICovCisgICAgICAg IGZvciAoaSA9IDA7IGkgPCBpa3NfcmV0cnkgJiYgIXhfbG9nZ2VkOyBpKyspIHsgLyogQ291bnQg cmV0cmllcyAqLworICAgICAgICAgICAgaWYgKGd0aW1lcigpID4gbG9naW50aW1vKQorICAgICAg ICAgICAgICBicmVhazsKKyNpZmRlZiBUTkNPREUKKyAgICAgICAgICAgIHRuX3dhaXQoImxvZ2lu IGxvb3AiKTsKKyAgICAgICAgICAgIHRuX3B1c2goKTsKKyNlbmRpZiAvKiBUTkNPREUgKi8KKyAg ICAgICAgICAgIGRlYnVnKEYxMDEsIk1BSU4gTE9HSU4gdHJ5IiwiIixpKTsKKyAgICAgICAgICAg IHdoYXQgPSBXX05PVEhJTkc7ICAgICAgICAgICAvKiBCZWNhdXNlIHByb3RvKCkgY2hhbmdlcyB0 aGlzICovCisKKyNpZmRlZiBJS1NfT1BUSU9OCisgICAgICAgICAgICBkZWJ1ZyhGMTExLCJNQUlO IExPR0lOIiwKKyAgICAgICAgICAgICAgICAgICJURUxPUFRfU0IoVEVMT1BUX0tFUk1JVCkua2Vy bWl0Lm1lX3N0YXJ0IiwKKyAgICAgICAgICAgICAgICAgIFRFTE9QVF9TQihURUxPUFRfS0VSTUlU KS5rZXJtaXQubWVfc3RhcnQKKyAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAvKiBL ZXJtaXQgc2VydmVyIG5lZ290aWF0ZWQgKi8KKyAgICAgICAgICAgIGlmIChURUxPUFRfU0IoVEVM T1BUX0tFUk1JVCkua2VybWl0Lm1lX3N0YXJ0KSB7CisgICAgICAgICAgICAgICAgZGVidWcoRjEw MSwiSUtTRCBzdGFydGluZyBpbiBzZXJ2ZXIgbW9kZSIsIiIsMCk7CisgICAgICAgICAgICAgICAg YXJnX3ggPSAxOyAgICAgICAgICAgICAgLyogRW50ZXIgc2VydmVyIG1vZGUgKi8KKyAgICAgICAg ICAgICAgICBzc3RhdGUgPSAneCc7CisjaWZkZWYgSUtTRFBPUEJBQ0sKKyAgICAgICAgICAgICAg ICBqdXN0b25lID0gMTsgICAgICAgICAgICAvKiBFeGVjdXRlIG9uZSBjb21tYW5kIGF0IGEgdGlt ZS4gKi8KKyNlbmRpZiAvKiBJS1NEUE9QQkFDSyAqLworICAgICAgICAgICAgICAgIHByb3RvKCk7 ICAgICAgICAgICAgICAgIC8qIEVudGVyIHByb3RvY29sIGlmIHJlcXVlc3RlZC4gKi8KKyNpZmRl ZiBOVFNJRworICAgICAgICAgICAgICAgIGNrX2loKCk7CisjZW5kaWYgLyogTlRTSUcgKi8KKyAg ICAgICAgICAgICAgICBpZiAoeF9sb2dnZWQpICAgICAgICAgICAvKiBMb2dnZWQgaW4gKi8KKyAg ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAg ICAgICAgIC8qIE5vdCBpbiBjbGllbnQvc2VydmVyIG1vZGUgKi8KKyNlbmRpZiAvKiBJS1NfT1BU SU9OICovCisgICAgICAgICAgICAgICAgZGVidWcoRjEwMSwiSUtTRCBzdGFydGluZyB3aXRoIFVz ZXJuYW1lIHByb21wdCIsIiIsMCk7CisgICAgICAgICAgICAgICAgeF9sb2dnZWQgPSBja3hsb2dp bigoQ0hBUiAqKXVpZGJ1ZixOVUxMLE5VTEwsMSk7CisgICAgICAgICAgICAgICAgaWYgKHNzdGF0 ZSkgeyAgICAgICAgICAgLyogUmVjZWl2ZWQgYSBwYWNrZXQgYXQgcHJvbXB0ICovCisjaWZkZWYg SUtTRFBPUEJBQ0sKKyAgICAgICAgICAgICAgICAgICAganVzdG9uZSA9IDE7ICAgICAgICAvKiBH byBoYW5kbGUgaXQgKi8KKyNlbmRpZiAvKiBJS1NEUE9QQkFDSyAqLworICAgICAgICAgICAgICAg ICAgICBwcm90bygpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIXhf bG9nZ2VkKSB7ICAgICAgICAvKiBJbiBjYXNlIHdlIGFyZSBhdCB0aGUgcHJvbXB0Li4uICovCisg ICAgICAgICAgICAgICAgICAgIHByaW50ZigiQWNjZXNzIGRlbmllZC5cbiIpOworICAgICAgICAg ICAgICAgICAgICB1aWRidWZbMF0gPSAnXDAnOyAgIC8qIEZvcmdldCB0aGUgbmFtZSBpZiB3ZSBo YXZlIG9uZSAqLworICAgICAgICAgICAgICAgIH0KKyNpZmRlZiBJS1NfT1BUSU9OCisgICAgICAg ICAgICB9CisjZW5kaWYgLyogSUtTX09QVElPTiAqLworICAgICAgICB9CisgICAgICAgIHNydmlk bCA9IHRpbWVsaW1pdCA9IGlrc190aW1vOyAgLyogUmVzZXQgY29tbWFuZCB0aW1lbGltaXQgKi8K KyAgICAgICAgZGVidWcoRjEwMSwiTUFJTiBMT0dJTiIsIiIseF9sb2dnZWQpOworICAgICAgICBp ZiAoIXhfbG9nZ2VkKSB7ICAgICAgICAgICAgICAgIC8qIExvZ2lucyBmYWlsZWQuICovCisgICAg ICAgICAgICBpZiAoVEVMT1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1pdC5tZV9zdGFydCkKKyAg ICAgICAgICAgICAgZXJycGt0KChDSEFSICopIkxvZ2luIFRpbWVvdXQiKTsKKyAgICAgICAgICAg IG1zbGVlcCg1MDApOworICAgICAgICAgICAgZG9leGl0KEJBRF9FWElULDApOworICAgICAgICB9 CisgICAgICAgIHdoYXQgPSBXX05PVEhJTkc7ICAgICAgICAgICAgICAgLyogU3RheSBpbiBrbm93 biBzdGF0ZSAqLworI2lmbmRlZiBOT1NFUlZFUgorICAgICAgICBpZiAoaXNndWVzdCkgeworICAg ICAgICAgICAgZW5fcHJpID0gMDsgICAgICAgICAgICAgICAgIC8qIE5vIHByaW50aW5nIGZvciBh bm9ueW1vdXMgdXNlcnMgKi8KKyAgICAgICAgICAgIGVuX21haSA9IDA7ICAgICAgICAgICAgICAg ICAvKiBObyBlbWFpbCBmb3IgYW5vbnltb3VzIHVzZXJzICovCisgICAgICAgICAgICBlbl9ta2Qg PSAwOyAgICAgICAgICAgICAgICAgLyogT3IgZGlyZWN0b3J5IGNyZWF0aW9uICovCisgICAgICAg ICAgICBlbl9ybWQgPSAwOyAgICAgICAgICAgICAgICAgLyogT3IgZGlyZWN0b3J5IHJlbW92YWwg Ki8KKyAgICAgICAgICAgIGVuX2VuYSA9IDA7ICAgICAgICAgICAgICAgICAvKiBPciBFTkFCTGlu ZyBESVNBQkxFZCBpdGVtcyAqLworICAgICAgICB9CisjZW5kaWYgLyogTk9TRVJWRVIgKi8KKwor I2lmbmRlZiBOT1NQTAorLyoKKyAgSWYgYSBtYWNybyBuYW1lZCAib25fbG9naW4iIGlzIGRlZmlu ZWQsIGV4ZWN1dGUgaXQuICBBbHNvIHJlbW92ZSBpdCBmcm9tIHRoZQorICBtYWNybyB0YWJsZSBz byB0aGUgdXNlciBjYW5ub3Qgc2VlIHdoYXQgaXQgZG9lcy4gIEV4ZWN1dGUgaXQgYXMgcGFydCBv ZiB0aGUKKyAgaWtzZC5jb25mIGZpbGUuCisqLworICAgICAgICBpZiAobm1hYykgeyAgICAgICAg ICAgICAgICAgICAgIC8qIEFueSBtYWNyb3MgZGVmaW5lZD8gKi8KKyAgICAgICAgICAgIGludCBr OyAgICAgICAgICAgICAgICAgICAgICAvKiBZZXMgKi8KKyAgICAgICAgICAgIGNoYXIgKiBjbWQg PSAib25fbG9naW4iOyAgICAvKiBNU1ZDIDIueCBjb21waWxlciBlcnJvciAqLworICAgICAgICAg ICAgayA9IG1sb29rKG1hY3RhYixjbWQsbm1hYyk7IC8qIExvb2sgdXAgIm9uX2xvZ2luIiAqLwor ICAgICAgICAgICAgaWYgKGsgPj0gMCkgeyAgICAgICAgICAgICAgIC8qIElmIGZvdW5kLCAqLwor I2lmZGVmIElLU0RDT05GCisgICAgICAgICAgICAgICAgaW50IHNhdmVkID0gaWtzZGNmOworICAg ICAgICAgICAgICAgIGlrc2RjZiA9IDA7CisjZW5kaWYgLyogSUtTRENPTkYgKi8KKyAgICAgICAg ICAgICAgICBpZiAoZG9kbyhrLCIiLDApID4gLTEpICAvKiBzZXQgaXQgdXAsICovCisgICAgICAg ICAgICAgICAgICBwYXJzZXIoMSk7ICAgICAgICAgICAgLyogZXhlY3V0ZSBpdCAqLworI2lmZGVm IElLU0RDT05GCisgICAgICAgICAgICAgICAgaWtzZGNmID0gc2F2ZWQ7CisjZW5kaWYgLyogSUtT RENPTkYgKi8KKyAgICAgICAgICAgICAgICBkZWxtYWMoY21kLDEpOyAgICAgICAgICAvKiBhbmQg ZGVsZXRlIGl0ICovCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyNlbmRpZiAvKiBOT1NQTCAq LworICAgIH0gLyogaWYgKGluc2VydmVyKSAqLworI2Vsc2UgLyogQ0tfTE9HSU4gKi8KKyAgICBp ZiAoaW5zZXJ2ZXIpCisgICAgICAgIHNydmlkbCA9IHRpbWVsaW1pdCA9IGlrc190aW1vOyAgLyog U2V0IGlkbGUgbGltaXRzIGZvciBJS1MgKi8KKyNlbmRpZiAvKiBDS19MT0dJTiAqLworI2VuZGlm IC8qIElLU0QgKi8KK30KKworVk9JRAorI2lmZGVmIENLX0FOU0lDCitmYWlsY21kbGluZSh2b2lk ICogZm9vKQorI2Vsc2UgLyogQ0tfQU5TSUMgKi8KK2ZhaWxjbWRsaW5lKGZvbykgVk9JRCAqIGZv bzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworI2lmZGVmIEdFTURPUworICAgIGNjX2NsZWFu KCk7CisjZW5kaWYgLyogR0VNRE9TICovCisjaWZuZGVmIE5PTE9DQUwKKyAgICBpZiAoY25mbGcp IGRvY29uZWN0KDAsMCk7ICAgICAgICAgICAvKiBjb25uZWN0IGFnYWluIGlmIHJlcXVlc3RlZC4g Ki8KKyAgICBpZiAodHRjaGsoKSA8IDApCisgICAgICBkb2xvZ2VuZCgpOworI2VuZGlmIC8qIE5P TE9DQUwgKi8KK30KKyNlbmRpZiAvKiBOT0NNREwgKi8KKworI2lmbmRlZiBOT0lDUAorVk9JRAor I2lmZGVmIENLX0FOU0lDCitkb3Rha2Vpbmkodm9pZCAqIHRocmVhZGluZm8pICAgICAgICAgICAg LyogRXhlY3V0ZSBpbml0IGZpbGUuICovCisjZWxzZSAgLyogQ0tfQU5TSUMgKi8KK2RvdGFrZWlu aSh0aHJlYWRpbmZvKSBWT0lEICogdGhyZWFkaW5mbzsgLyogRXhlY3V0ZSBpbml0IGZpbGUuICov CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIGRvdGFrZWluaSAqLyB7CisjaWZkZWYgTlRTSUcK KyAgICBzZXRpbnQoKTsKKyAgICBpZiAodGhyZWFkaW5mbykgeyAgICAgICAgICAgICAgICAgICAv KiBUaHJlYWQgbG9jYWwgc3RvcmFnZS4uLiAqLworICAgICAgIFRsc1NldFZhbHVlKFRsc0luZGV4 LHRocmVhZGluZm8pOworICAgICAgIGRlYnVnKEYxMDAsICJkb3Rha2VpbmkgY2FsbGVkIHdpdGgg dGhyZWFkaW5mbyBibG9jayIsIiIsIDApOworICAgIH0gZWxzZQorICAgICAgZGVidWcoRjEwMCwg ImRvdGFrZWluaSAtIHRocmVhZGluZm8gaXMgTlVMTCIsICIiLCAwKTsKKyNlbmRpZiAvKiBOVFNJ RyAqLworI2lmZGVmIENLX0xPR0lOCisjaWZkZWYgTlQKKyNpZmRlZiBJS1NECisgICAgaWYgKGlu c2VydmVyKQorICAgICAgc2V0bnRjcmVkcygpOworI2VuZGlmIC8qIElLU0QgKi8KKyNlbmRpZiAv KiBOVCAqLworI2VuZGlmIC8qIENLX0xPR0lOICovCisgICAgY21kaW5pKCk7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogU2V0cyB0bGV2ZWwgKi8KKworICAgIGRlYnVnKEYxMTEsImRvdGFr ZWluaSIsImluc2VydmVyIixpbnNlcnZlcik7CisgICAgZGVidWcoRjExMSwiZG90YWtlaW5pIiwi c3N0ZWxuZXQiLHNzdGVsbmV0KTsKKworI2lmZGVmIENPTU1FTlQKKy8qIFdyb25nIHBsYWNlIGZv ciB0aGlzLi4uICovCisjaWZuZGVmIE5PWEZFUgorI2lmZGVmIENLX0ZBU1QKKyAgICBkb2Zhc3Qo KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBCeSBub3cgRkFTVCBkZWZhdWx0cyBzaG91 bGQgYmUgT0sgKi8KKyNlbmRpZiAvKiBDS19GQVNUICovCisjZW5kaWYgLyogTk9YRkVSICovCisj ZW5kaWYgLyogQ09NTUVOVCAqLworCisgICAgZG9pbml0KCk7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogTm93IGRvIHRoZSBpbml0aWFsaXphdGlvbiBmaWxlICovCisgICAgZGVidWcoRjEw MSwibWFpbiBleGVjdXRpbmcgaW5pdCBmaWxlIiwiIix0bGV2ZWwpOworICAgIHdoaWxlICh0bGV2 ZWwgPiAtMSkgeworICAgICAgICBzc3RhdGUgPSAoQ0hBUikgcGFyc2VyKDEpOyAgICAgIC8qIEV4 ZWN1dGUgb25lIGNvbW1hbmQgYXQgYSB0aW1lLiAqLworICAgICAgICBpZiAoc3N0YXRlKSBwcm90 bygpOyAgICAgICAgICAgIC8qIEVudGVyIHByb3RvY29sIGlmIHJlcXVlc3RlZC4gKi8KKyNpZmRl ZiBOVFNJRworICAgICAgICBja19paCgpOworI2VuZGlmIC8qIE5UU0lHICovCisgICAgfQorICAg IGRlYnVnKEYxMDEsIm1haW4gZXhpdHMgaW5pdCBmaWxlIiwiIix0bGV2ZWwpOworCisjaWZkZWYg TlRTSUcKKyAgICBja1RocmVhZEVuZCh0aHJlYWRpbmZvKTsKKyNlbmRpZiAvKiBOVFNJRyAqLwor ICAgIHJldHVybjsKK30KKworVk9JRAorI2lmZGVmIENLX0FOU0lDCitmYWlsdGFrZWluaSh2b2lk ICogdGhyZWFkaW5mbykKKyNlbHNlIC8qIENLX0FOU0lDICovCitmYWlsdGFrZWluaSh0aHJlYWRp bmZvKSBWT0lEICogdGhyZWFkaW5mbzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogZmFpbHRh a2VpbmkgKi8geworI2lmZGVmIEdFTURPUworICAgIGNjX2NsZWFuKCk7ICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIEF0YXJpOiBDbGVhbiB1cCBhZnRlciBeQy10cmFwLiAqLworI2VuZGlmIC8q IEdFTURPUyAqLworICAgIGZpeGNtZCgpOworICAgIGlmICghY2ZpbGVmKSB7CisgICAgICAgIGNv bm9sbCgiSW50ZXJydXB0ZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uIG9yIFwKK2NvbW1hbmQtbGlu ZSBwcm9jZXNzaW5nLiIpOworICAgICAgICBjb25vbGwoIkMtS2VybWl0IHF1aXR0aW5nLi4uIik7 CisgICAgfQorICAgIGRvZXhpdChCQURfRVhJVCwtMSk7ICAgICAgICAgICAgICAgIC8qIEV4aXQg d2l0aCBiYWQgc3RhdHVzLiAqLworfQorCitWT0lECisjaWZkZWYgQ0tfQU5TSUMKK2RvaWNwKHZv aWQgKiB0aHJlYWRpbmZvKQorI2Vsc2UgLyogQ0tfQU5TSUMgKi8KK2RvaWNwKHRocmVhZGluZm8p IFZPSUQgKiB0aHJlYWRpbmZvOworI2VuZGlmIC8qIENLX0FOU0lDICovCisvKiBkb2ljcCAqLyB7 CisjaWZkZWYgTlRTSUcKKyAgICBzZXRpbnQoKTsKKyAgICBpZiAodGhyZWFkaW5mbykgeyAgICAg ICAgICAgICAgICAgICAvKiBUaHJlYWQgbG9jYWwgc3RvcmFnZS4uLiAqLworICAgICAgIGlmICgh VGxzU2V0VmFsdWUoVGxzSW5kZXgsdGhyZWFkaW5mbykpCisgICAgICAgICAgZGVidWcoRjEwMSwi ZG9pY3AgVGxzU2V0VmFsdWUgZmFpbGVkIiwiIixHZXRMYXN0RXJyb3IoKSk7CisgICAgICAgZGVi dWcoRjEwMSwgImRvaWNwIGEgdGhyZWFkaW5mbyBibG9jayAtIFRsc0luZGV4IiwgIiIsIFRsc0lu ZGV4KTsKKyAgICB9IGVsc2UgeworICAgICAgICBkZWJ1ZyhGMTAwLCAiZG9pY3AgcmVjZWl2ZWQg YSBudWxsIHRocmVhZGluZm8iLCAiIiwgMCk7CisgICAgfQorI2VuZGlmIC8qIE5UU0lHICovCisj aWZkZWYgQ0tfTE9HSU4KKyNpZmRlZiBOVAorI2lmZGVmIElLU0QKKyAgICBpZiAoaW5zZXJ2ZXIp CisgICAgICBzZXRudGNyZWRzKCk7CisjZW5kaWYgLyogSUtTRCAqLworI2VuZGlmIC8qIE5UICov CisjZW5kaWYgLyogQ0tfTE9HSU4gKi8KKyNpZmRlZiBNQUMKKyAgICB3aGlsZSAoMSkgeworICAg ICAgICBleHRlcm4gY2hhciAqbGZpbGVzOyAgICAgICAgICAgIC8qIEZha2UgcG9pbnRlciBjYXN0 ICovCisKKyAgICAgICAgaWYgKGNvbm5lY3RlZCkgeworICAgICAgICAgICAgZGVidWcoRjEwMCwg ImRvaWNwOiBjYWxsaW5nIG1hY3BhcnNlciIsICIiLCAwKTsKKyAgICAgICAgICAgIHNzdGF0ZSA9 IG5ld3BhcnNlcigxLCAxLCAwTCk7CisKKyAgICAgICAgICAgIC8qIGlnbm9yZSBudWxsIGNvbW1h bmQgc3RhdGUgKi8KKyAgICAgICAgICAgIGlmIChzc3RhdGUgPT0gJ24nKQorICAgICAgICAgICAg ICBzc3RhdGUgPSAnXDAnOworCisgICAgICAgICAgICBpZiAoc3N0YXRlKQorICAgICAgICAgICAg ICBwcm90bygpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAg ICAqIHByb2Nlc3MgdGFrZSBmaWxlcyB0aGUgZmluZGVyIGdhdmUgdXMuCisgICAgICAgICAgICAg Ki8KKyAgICAgICAgICAgIGlmICgodGxldmVsID09IC0xKSAmJiBsZmlsZXMpCisgICAgICAgICAg ICAgIHN0YXJ0bGZpbGUoKTsKKworICAgICAgICAgICAgZGVidWcoRjEwMCwgImRvaWNwOiBjYWxs aW5nIHBhcnNlciIsICIiLCAwKTsKKyAgICAgICAgICAgIHNzdGF0ZSA9IChDSEFSKSBwYXJzZXIo MCk7CisgICAgICAgICAgICBpZiAoc3N0YXRlID09ICdjJykgICAgICAgICAgLyogaWYgTUFDIGNv bm5lY3QgKi8KKyAgICAgICAgICAgICAgc3N0YXRlID0gMDsKKyAgICAgICAgICAgIGlmIChzc3Rh dGUpCisgICAgICAgICAgICAgIHByb3RvKCk7CisgICAgICAgIH0KKyAgICB9CisjZWxzZSAvKiBO b3QgTUFDICovCisKKyNpZm5kZWYgTk9TUEwKKy8qCisgIElmIGludGVyYWN0aXZlIGNvbW1hbmRz IHdlcmUgZ2l2ZW4gb24gdGhlIGNvbW1hbmQgbGluZSAodXNpbmcgdGhlCisgIC1DICJjb21tYW5k LCBjb21tYW5kLCAuLi4iIG9wdGlvbiksIGFzc2lnbiB0aGVtIHRvIGEgbWFjcm8gY2FsbGVkCisg ICJjbF9jb21tYW5kcyIsIHRoZW4gZXhlY3V0ZSB0aGUgbWFjcm8gYW5kIGxlYXZlIGl0IGRlZmlu ZWQgZm9yCisgIHN1YnNlcXVlbnQgcmUtZXhlY3V0aW9uIGlmIGRlc2lyZWQuCisqLworICAgIGlm IChjbGNtZHMpIHsgICAgICAgICAgICAgICAgICAgICAgIC8qIENoZWNrIGZvciAtQyBjb21tYW5k cyAqLworICAgICAgICBpbnQgeDsKKyAgICAgICAgeCA9IGFkZG1hYygiY2xfY29tbWFuZHMiLGNs Y21kcyk7IC8qIFB1dCBtYWNybyBpbiB0YWJsZSAqLworICAgICAgICBpZiAoeCA+IC0xKSB7ICAg ICAgICAgICAgICAgICAgIC8qIElmIHN1Y2Nlc3NmdWwsICovCisgICAgICAgICAgICBkb2RvKHgs TlVMTCxDRl9DTURMKTsgICAgICAgLyogc2V0IHVwIGZvciBtYWNybyBleGVjdXRpb24gKi8KKyAg ICAgICAgICAgIHdoaWxlIChtYWNsdmwgPiAtMSkgeyAgICAgICAvKiBMb29wIGdldHRpbmcgbWFj cm8gY29tbWFuZHMuICovCisgICAgICAgICAgICAgICAgc3N0YXRlID0gKENIQVIpIHBhcnNlcigx KTsKKyAgICAgICAgICAgICAgICBpZiAoc3N0YXRlKSBwcm90bygpOyAgICAvKiBFbnRlciBwcm90 b2NvbCBpZiByZXF1ZXN0ZWQuICovCisjaWZkZWYgTlRTSUcKKyAgICAgICAgICAgICAgICBja19p aCgpOworI2VuZGlmIC8qIE5UU0lHICovCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg ICAgZGVidWcoRjEwMCwiZG9pY3AgY2FsbGluZyBoZXJhbGQiLCIiLDApOworICAgICAgICBoZXJh bGQoKTsKKyAgICB9CisjZW5kaWYgLyogTk9TUEwgKi8KKyAgICB3aGlsZSgxKSB7ICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBMb29wIGdldHRpbmcgY29tbWFuZHMuICovCisgICAgICAgIHNz dGF0ZSA9IChDSEFSKSBwYXJzZXIoMCk7CisgICAgICAgIGlmIChzc3RhdGUpIHByb3RvKCk7ICAg ICAgICAgICAgLyogRW50ZXIgcHJvdG9jb2wgaWYgcmVxdWVzdGVkLiAqLworI2lmZGVmIE5UU0lH CisgICAgICAgY2tfaWgoKTsKKyNlbmRpZiAvKiBOVFNJRyAqLworICAgIH0KKyNpZmRlZiBOVFNJ RworICAgIGNrVGhyZWFkRW5kKHRocmVhZGluZm8pOworI2VuZGlmIC8qIE5UU0lHICovCisjZW5k aWYgLyogTUFDICovCit9CisKK1ZPSUQKKyNpZmRlZiBDS19BTlNJQworZmFpbGljcCh2b2lkICog dGhyZWFkaW5mbykKKyNlbHNlIC8qIENLX0FOU0lDICovCitmYWlsaWNwKHRocmVhZGluZm8pIFZP SUQgKiB0aHJlYWRpbmZvOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisjaWZkZWYgR0VNRE9T CisgICAgY2NfY2xlYW4oKTsKKyNlbmRpZiAvKiBHRU1ET1MgKi8KKyAgICBmaXhjbWQoKTsgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBQb3AgY29tbWFuZCBzdGFja3MsIGV0Yy4gKi8KKyAg ICBjbGNtZHMgPSBOVUxMOworICAgIGRlYnVnKEYxMDAsImNrY21haSBnb3QgaW50ZXJydXB0Iiwi IiwwKTsKK30KKyNlbmRpZiAvKiBOT0lDUCAqLworCisjaWZuZGVmIE5PSUNQCitWT0lECisjaWZk ZWYgQ0tfQU5TSUMKK2RvY21kZmlsZSh2b2lkICogdGhyZWFkaW5mbykgICAgICAgICAgICAvKiBF eGVjdXRlIGFwcGxpY2F0aW9uIGZpbGUgKi8KKyNlbHNlIC8qIENLX0FOU0lDICovCitkb2NtZGZp bGUodGhyZWFkaW5mbykgVk9JRCAqIHRocmVhZGluZm87CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8K Ky8qIGRvY21kZmlsZSAqLyB7CisjaWZkZWYgTlRTSUcKKyAgICBjb25jYigoY2hhcillc2NhcGUp OworICAgIHNldGludCgpOworICAgIGlmICh0aHJlYWRpbmZvKSB7ICAgICAgICAgICAgICAgICAg IC8qIFRocmVhZCBsb2NhbCBzdG9yYWdlLi4uICovCisgICAgICAgIFRsc1NldFZhbHVlKFRsc0lu ZGV4LHRocmVhZGluZm8pOworICAgICAgICBkZWJ1ZyhGMTAwLCAiZG9jbWRmaWxlIGNhbGxlZCB3 aXRoIHRocmVhZGluZm8gYmxvY2siLCIiLCAwKTsKKyAgICB9IGVsc2UgZGVidWcoRjEwMCwgImRv Y21kZmlsZSAtIHRocmVhZGluZm8gaXMgTlVMTCIsICIiLCAwKTsKKyNlbmRpZiAvKiBOVFNJRyAq LworI2lmZGVmIENLX0xPR0lOCisjaWZkZWYgSUtTRAorI2lmZGVmIE5UCisgICAgaWYgKGluc2Vy dmVyKQorICAgICAgc2V0bnRjcmVkcygpOworI2VuZGlmIC8qIE5UICovCisjZW5kaWYgLyogSUtT RCAqLworI2VuZGlmIC8qIENLX0xPR0lOICovCisgICAgZGVidWcoRjExMCwibWFpbiBjbWRmaWwi LGNtZGZpbCwwKTsKKyNpZm5kZWYgTk9TUEwKKyAgICBhZGRtYWMoIlxcJTAiLGNtZGZpbCk7Cisj ZW5kaWYgLyogTk9TUEwgKi8KKyAgICBkb3Rha2UoY21kZmlsKTsJCQkvKiBTZXQgdXAgdGhlIGNv bW1hbmQgZmlsZSAqLworICAgIGlmICh0bGV2ZWwgPiAtMSkJCQkvKiBSZW1lbWJlciB3ZSBkaWQg dGhpcyAqLworICAgICAgY2ZpbGVmID0gMTsKKyAgICB3aGlsZSAodGxldmVsID4gLTEpIHsgICAg ICAgICAgICAgICAvKiBFeGVjdXRlIGl0IHVudGlsIGl0IHJ1bnMgb3V0LiAqLworICAgICAgICBz c3RhdGUgPSBwYXJzZXIoMSk7ICAgICAgICAgICAgIC8qIExvb3AgZ2V0dGluZyBjb21tYW5kcy4g Ki8KKyAgICAgICAgaWYgKHNzdGF0ZSkgcHJvdG8oKTsgICAgICAgICAgICAvKiBFbnRlciBwcm90 b2NvbCBpZiByZXF1ZXN0ZWQuICovCisjaWZkZWYgTlRTSUcKKyAgICAgICAgY2tfaWgoKTsKKyNl bmRpZiAvKiBOVFNJRyAqLworICAgIH0KKworI2lmZGVmIE5UU0lHCisgICAgY2tUaHJlYWRFbmQo dGhyZWFkaW5mbyk7CisjZW5kaWYgLyogTlRTSUcgKi8KKyAgICByZXR1cm47Cit9CisKK1ZPSUQK KyNpZmRlZiBDS19BTlNJQworZmFpbGNtZGZpbGUodm9pZCAqIHRocmVhZGluZm8pCisjZWxzZSAv KiBDS19BTlNJQyAqLworZmFpbGNtZGZpbGUodGhyZWFkaW5mbykgVk9JRCAqIHRocmVhZGluZm87 CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIGZhaWxjbWRmaWxlICovIHsKKyNpZmRlZiBHRU1E T1MKKyAgICBjY19jbGVhbigpOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBdGFyaTogQ2xl YW4gdXAgYWZ0ZXIgXkMtdHJhcC4gKi8KKyNlbmRpZiAvKiBHRU1ET1MgKi8KKyAgICBmaXhjbWQo KTsKKyAgICBpZiAoIWNmaWxlZikgeworCWNvbm9sbCgiSW50ZXJydXB0ZWQgZHVyaW5nIGluaXRp YWxpemF0aW9uIG9yIFwKK2NvbW1hbmQtbGluZSBwcm9jZXNzaW5nLiIpOworCWNvbm9sbCgiQy1L ZXJtaXQgcXVpdHRpbmcuLi4iKTsKKyAgICB9CisgICAgZG9leGl0KEJBRF9FWElULC0xKTsgICAg ICAgICAgICAgICAgLyogRXhpdCB3aXRoIGJhZCBzdGF0dXMuICovCit9CisjZW5kaWYgLyogTk9J Q1AgKi8KKworI2lmbmRlZiBOT1hGRVIKK1ZPSUQKK3NldHByZWZpeCh6KSBpbnQgejsgeyAgICAg ICAgICAgICAgICAgICAvKiBJbml0aWFsIGNvbnRyb2wtY2hhciBwcmVmaXhpbmcgKi8KKyNpZmRl ZiBDS19TUEVFRAorICAgIGludCBpLCB2YWw7CisKKyAgICBwcmVmaXhpbmcgPSB6OworICAgIHB0 YWJbcHJvdG9jb2xdLnByZWZpeCA9IHByZWZpeGluZzsKKyAgICBkZWJ1ZyhGMTAxLCJzZXRwcmVm aXgiLCIiLHByZWZpeGluZyk7CisgICAgc3dpdGNoICh6KSB7CisgICAgICBjYXNlIFBYX0FMTDog ICAgICAgICAgICAgICAgICAgICAgLyogQWxsICovCisjaWZkZWYgQ09NTUVOVAorICAgICAgICAv KiBEb24ndCBsZXQgQ2xlYXItQ2hhbm5lbCBiZSBkZXBlbmRlbnQgb24gcHJlZml4aW5nICovCisg ICAgICAgIGNsZWFycnEgPSAwOyAgICAgICAgICAgICAgICAgICAgLyogVHVybiBvZmYgY2xlYXJj aGFubmVsLCBmYWxsIHRocnUgKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgICBjYXNlIFBY X05PTjogICAgICAgICAgICAgICAgICAgICAgLyogTm9uZSAqLworICAgICAgICB2YWwgPSAoeiA9 PSBQWF9BTEwpID8gMSA6IDA7CisgICAgICAgIGZvciAoaSA9CisjaWZkZWYgVU5QUkVGSVhaRVJP CisgICAgICAgICAgICAgMAorI2Vsc2UKKyAgICAgICAgICAgICAxCisjZW5kaWYgLyogVU5QUkVG SVhaRVJPICovCisgICAgICAgICAgICAgOyBpIDwgMzI7IGkrKykKKyAgICAgICAgICBjdGxwW2ld ID0gdmFsOworICAgICAgICBmb3IgKGkgPSAxMjc7IGkgPCAxNjA7IGkrKykgY3RscFtpXSA9IHZh bDsKKyAgICAgICAgY3RscFsodW5zaWduZWQpMjU1XSA9IHZhbDsKKyAgICAgICAgaWYgKHogPT0g UFhfTk9OKSB7ICAgICAgICAgICAgICAvKiBUaGVzZSBhcmUgbmV2ZXIgc2FmZSAqLworICAgICAg ICAgICAgaWYgKG5ldHdvcmspIHsgICAgICAgICAgICAgIC8qIEFzc3VtZSBuZXR3b3JrID0gdGVs bmV0IG9yIHJsb2dpbiAqLworICAgICAgICAgICAgICAgIGN0bHBbQ1JdID0gMTsgICAgICAgICAg IC8qIFByZWZpeCBDUiBiZWNhdXNlIG9mIE5WVCBydWxlcyAqLworICAgICAgICAgICAgICAgIGN0 bHBbWE9OXSA9IGN0bHBbWE9GRl0gPSAxOyAvKiBCZWNhdXNlIG9mIFRlbG5ldCBzZXJ2ZXIgKi8K KyAgICAgICAgICAgICAgICBjdGxwWzEyN10gPSBjdGxwWzI1NV0gPSAxOyAgLyogVGVsbmV0IElB QyAqLworICAgICAgICAgICAgICAgIGN0bHBbbXlzdGNoXSA9IGN0bHBbbXlzdGNoKzEyOF0gPSAx OyAvKiBLZXJtaXQgcGFja2V0IHN0YXJ0ICovCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg ICAgICAgICAgIGN0bHBbQ1JdID0gY3RscFsyNTVdID0gY3RscFtteXN0Y2hdID0gY3RscFtteXN0 Y2grMTI4XSA9IDE7CisgICAgICAgICAgICAgICAgaWYgKGZsb3cgPT0gRkxPX1hPTlgpICAgICAg IC8qIFhvbi9Yb2ZmIGZvcmNlcyBwcmVmaXhpbmcgKi8KKyAgICAgICAgICAgICAgICAgIGN0bHBb WE9OXSA9IGN0bHBbWE9GRl0gPSBjdGxwW1hPTisxMjhdID0gY3RscFtYT0ZGKzEyOF0gPSAxOwor ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIFBY X0NBVTogICAgICAgICAgICAgICAgICAgICAgLyogQ2F1dGlvdXMgb3IgTWluaW1hbCAqLworI2lm ZGVmIENPTU1FTlQKKyAgICAgICAgLyogRG9uJ3QgbGV0IENMRUFSLUNIQU5ORUwgYmUgZGVwZW5k ZW50IG9uIFByZWZpeGluZyAqLworICAgICAgICBjbGVhcnJxID0gMDsgICAgICAgICAgICAgICAg ICAgIC8qIFR1cm4gb2ZmIGNsZWFyY2hhbm5lbCAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAg ICAgIGNhc2UgUFhfV0lMOiAgICAgICAgICAgICAgICAgICAgICAvKiBNaW5pbWFsICgid2lsZCIp ICovCisgICAgICAgIGN0bHBbMF0gPSAxOyAgICAgICAgICAgICAgICAgICAgLyogRG9lcyBub3Qg aW5jbHVkZSAwICovCisgICAgICAgIGZvciAoaSA9IDE7IGkgPCAzMjsgaSsrKQorICAgICAgICAg IGN0bHBbaV0gPSAwOworICAgICAgICBmb3IgKGkgPSAxMjc7IGkgPCAxNjA7IGkrKykKKyAgICAg ICAgICBjdGxwW2ldID0gMDsKKyAgICAgICAgY3RscFtteXN0Y2hdID0gY3RscFtteXN0Y2grMTI4 XSA9IDE7IC8qIEtlcm1pdCBzdGFydCBvZiBwYWNrZXQgKi8KKyAgICAgICAgaWYgKHNlb2wgIT0g MTMpCisgICAgICAgICAgY3RscFtzZW9sXSA9IGN0bHBbc2VvbCsxMjhdID0gMTsgLyogS2VybWl0 IGVuZCAqLworICAgICAgICBjdGxwWzEzXSA9IGN0bHBbMTQxXSA9IDE7ICAgICAgIC8qIEluIGNh c2Ugb2YgVEVMTkVUIChOVlQgcnVsZXMpICovCisgICAgICAgIGN0bHBbKHVuc2lnbmVkKTI1NV0g PSAxOyAgICAgICAgLyogRGl0dG8gKi8KKworICAgICAgICAvKiBeRCwgXkosIF5NLCBvciBeVSBm b2xsb3dlZCBieSB0aWxkZSB0cmlnZ2VyIFJsb2dpbiBlc2NhcGUgKi8KKworICAgICAgICBjdGxw WzRdICA9IGN0bHBbNCsxMjhdICA9IDE7ICAgIC8qIEluIGNhc2Ugb2YgUkxPR0lOICovCisgICAg ICAgIGN0bHBbMTBdID0gY3RscFsxMCsxMjhdID0gMTsgICAgLyogSW4gY2FzZSBvZiBSTE9HSU4g Ki8KKyAgICAgICAgY3RscFsyMV0gPSBjdGxwWzIxKzEyOF0gPSAxOyAgICAvKiBJbiBjYXNlIG9m IFJMT0dJTiAqLworCisgICAgICAgIGlmIChmbG93ID09IEZMT19YT05YIHx8ICAgICAgICAgLyog WG9uL1hvZmYgZm9yY2VzIHByZWZpeGluZyB0aGVzZSAqLworICAgICAgICAgICAgcHJlZml4aW5n ID09IFBYX0NBVSB8fCAgICAgIC8qIFNvIGRvZXMgQ0FVVElPVVMgKi8KKyAgICAgICAgICAgIG5l dHdvcmspICAgICAgICAgICAgICAgICAgICAvKiBOZXR3b3JrcyB0b28uLi4gKi8KKyAgICAgICAg ICBjdGxwW1hPTl0gPSBjdGxwW1hPRkZdID0gY3RscFtYT04rMTI4XSA9IGN0bHBbWE9GRisxMjhd ID0gMTsKKyAgICAgICAgaWYgKHByZWZpeGluZyA9PSBQWF9DQVUpIHsgICAgICAvKiBDYXV0aW91 cyAtIGFkZCBzb21lIG1vcmUgKi8KKyNpZmRlZiBVTlBSRUZJWFpFUk8KKyAgICAgICAgICAgIGN0 bHBbMF0gPSAxOworI2VuZGlmIC8qIFVOUFJFRklYWkVSTyAqLworICAgICAgICAgICAgY3RscFsz XSAgID0gY3RscFsxNl0gID0gMTsgICAgICAgICAgICAgLyogXkMsIERMRSAqLworICAgICAgICAg ICAgY3RscFsxNF0gID0gY3RscFsxNV0gID0gMTsgICAgICAgICAgICAgLyogU08vU0kgKi8KKyAg ICAgICAgICAgIGN0bHBbMjRdICA9IGN0bHBbMjVdICA9IDE7ICAgICAgICAgICAgIC8qIFZNUyBt aWdodCBuZWVkIHRoZXNlICovCisgICAgICAgICAgICBjdGxwWzI2XSAgPSBjdGxwWzI2KzEyOF0g PSAxOyAgICAgICAgICAvKiBVTklYIHN1c3BlbmQgKi8KKyAgICAgICAgICAgIGN0bHBbMjhdICA9 IGN0bHBbMjldICA9IGN0bHBbMzBdICA9IDE7IC8qIEFzc29ydGVkIGVzYyBjaGFycyAqLworICAg ICAgICAgICAgY3RscFsxMzFdID0gY3RscFsxNDFdID0gY3RscFsxNDRdID0gMTsgLyogYW5kIDgt Yml0IHZlcnNpb25zICovCisgICAgICAgICAgICBjdGxwWyh1bnNpZ25lZCkyNTVdID0gY3RscFsx NTZdID0gY3RscFsxNTddID0gY3RscFsxNThdID0gMTsKKyAgICAgICAgfQorICAgICAgICBicmVh azsKKyAgICB9CisjZW5kaWYgLyogQ0tfU1BFRUQgKi8KK30KKyNlbmRpZiAvKiBOT1hGRVIgKi8K KworVk9JRAorbWFrZXZlcigpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1ha2Ug dmVyc2lvbiBzdHJpbmcgZnJvbSBwaWVjZXMgKi8KKyAgICBpbnQgeCwgeTsKKyAgICBjaGFyICog czsKKyNpZm5kZWYgT1MyCisjaWZuZGVmIE1BQworICAgIGNrX3NfeHZlciA9IGNrX3NfdmVyOyAg ICAgICAgICAgICAgIC8qIEZpbGwgaW4gQy1LZXJtaXQgdmVyc2lvbiBudW1iZXIgKi8KKyAgICBj a19sX3h2ZXIgPSBja19sX3ZlcjsgICAgICAgICAgICAgICAvKiBmb3IgVU5JWCwgVk1TLCBldGMu ICovCisjZW5kaWYgLyogTUFDICovCisjZW5kaWYgLyogT1MyICovCisgICAgeCA9IHN0cmxlbihj a19zX25hbWUpOworICAgIHkgPSBzdHJsZW4oY2tfc194dmVyKTsKKyAgICBpZiAoeSArIHggKyAx IDwgQ0tWRVJMRU4pIHsKKyAgICAgICAgY2ttYWttc2codmVyc2lvLENLVkVSTEVOLGNrX3NfbmFt ZSwiICIsY2tfc194dmVyLE5VTEwpOworICAgIH0gZWxzZSB7CisgICAgICAgIGNrc3RybmNweSh2 ZXJzaW8sIkMtS2VybWl0IixDS1ZFUkxFTik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg eCArPSB5ICsgMTsKKyAgCisgICAgcyA9ICIgT1BFTiBTT1VSQ0U6IjsJCS8qIEMtS2VybWl0IDku MCBhbmQgbGF0ZXIgKi8KKyAgICB5ID0gc3RybGVuKHMpOworICAgIGlmIChDS1ZFUkxFTiA8IHgg KyB5ICsgMSkKKyAgICAgIHJldHVybjsKKyAgICBja3N0cm5jYXQodmVyc2lvLHMsQ0tWRVJMRU4p OworCisgICAgeCArPSB5ICsgMTsKKyAgICBpZiAoKmNrX3Nfd2hvKSB7CisgICAgICAgIHkgPSBz dHJsZW4oY2tfc193aG8pOworICAgICAgICBpZiAoQ0tWRVJMRU4gPCB4ICsgeSArIDEpCisgICAg ICAgICAgcmV0dXJuOworICAgICAgICBja3N0cm5jYXQodmVyc2lvLCItIixDS1ZFUkxFTik7Cisg ICAgICAgIGNrc3RybmNhdCh2ZXJzaW8sY2tfc193aG8sQ0tWRVJMRU4pOworICAgIH0KKyAgICB4 ICs9IHkgKyAxOworICAgIHkgPSBzdHJsZW4oY2tfc190ZXN0KTsKKyAgICBpZiAoeSA+IDAgJiYg eSArIHggKyAxIDwgQ0tWRVJMRU4pIHsKKyAgICAgICAgY2tzdHJuY2F0KHZlcnNpbywiICIsQ0tW RVJMRU4pOworICAgICAgICBja3N0cm5jYXQodmVyc2lvLGNrX3NfdGVzdCxDS1ZFUkxFTik7Cisg ICAgICAgIHggKz0geSArIDE7CisgICAgICAgIHkgPSBzdHJsZW4oY2tfc190dmVyKTsKKyAgICAg ICAgaWYgKHkgPiAwICYmIHkgKyB4ICsgMSA8IENLVkVSTEVOKSB7CisgICAgICAgICAgICBja3N0 cm5jYXQodmVyc2lvLCIuIixDS1ZFUkxFTik7CisgICAgICAgICAgICBja3N0cm5jYXQodmVyc2lv LGNrX3NfdHZlcixDS1ZFUkxFTik7CisgICAgICAgICAgICB4ICs9IHkgKyAxOworICAgICAgICB9 CisgICAgfQorICAgIHkgPSBzdHJsZW4oY2tfc19kYXRlKTsKKyAgICBpZiAoeSA+IDAgJiYgeSAr IHggKyAyIDwgQ0tWRVJMRU4pIHsKKyAgICAgICAgY2tzdHJuY2F0KHZlcnNpbywiLCAiLENLVkVS TEVOKTsKKyAgICAgICAgY2tzdHJuY2F0KHZlcnNpbyxja19zX2RhdGUsQ0tWRVJMRU4pOworICAg IH0KKyAgICB2ZXJudW0gPSBja19sX3ZlcjsKKyAgICB4dmVybnVtID0gY2tfbF94dmVyOworICAg IGRlYnVnKEYxMTAsIktlcm1pdCB2ZXJzaW9uIix2ZXJzaW8sMCk7Cit9CisKK3VuaW9uIGNrX3No b3J0IHNob3J0Ynl0ZXM7ICAgICAgICAgICAgICAvKiBGb3IgZGV0ZXJtaW5pbmcgYnl0ZSBvcmRl ciAqLworaW50IGJ5dGVvcmRlciA9IDA7ICAgICAgICAgICAgICAgICAgICAgIC8qIDAgPSBCaWcg RW5kaWFuOyAxID0gTGl0dGxlIEVuZGlhbiAqLworaW50IGJpZ2VuZGlhbiA9IDE7CisvKiBOT1RF OiBNVVNUIEJFIDAgb3IgMSAtIG5vdGhpbmcgZWxzZSAqLworCisjaWZuZGVmIE5PU1BMCisjZGVm aW5lIFNDUklQVExFTiAxMDI0MAorI2VuZGlmCS8qIE5PU1BMICovCisKKyNpZmRlZiBORVRDT05O CisjaWZuZGVmIE5PQ01ETAorI2lmbmRlZiBOT1VSTAorVk9JRAorZG91cmwoKSB7CisgICAgaW50 IHJjID0gMDsKKyAgICBjaGFyICogcG9ydCA9IE5VTEw7CisgICAgZXh0ZXJuIGludCB0dG5wcm90 bzsKKyAgICBleHRlcm4gc3RydWN0IHVybGRhdGEgZ191cmw7CisKKyNpZmRlZiBDT01NRU5UCisg ICAgLyogTk9URTogZGVidWcoKSBkb2Vzbid0IHdvcmsgeWV0IC0gbXVzdCB1c2UgcHJpbnRmJ3Mg Ki8KKyAgICBwcmludGYoIlVSTDogICVzXG4iLGdfdXJsLnNhdiA/IGdfdXJsLnNhdiA6ICIobm9u ZSkiKTsKKyAgICBwcmludGYoIlR5cGU6ICVzXG4iLGdfdXJsLnN2YyA/IGdfdXJsLnN2YyA6ICIo bm9uZSkiKTsKKyAgICBwcmludGYoIlVzZXI6ICVzXG4iLGdfdXJsLnVzciA/IGdfdXJsLnVzciA6 ICIobm9uZSkiKTsKKyAgICBwcmludGYoIlBhc3M6ICVzXG4iLGdfdXJsLnBzdyA/IGdfdXJsLnBz dyA6ICIobm9uZSkiKTsKKyAgICBwcmludGYoIkhvc3Q6ICVzXG4iLGdfdXJsLmhvcyA/IGdfdXJs LmhvcyA6ICIobm9uZSkiKTsKKy8qICBwcmludGYoIlBvcnQ6ICVzXG4iLGdfdXJsLnBvciA/IGdf dXJsLnBvciA6ICIobm9uZSkiKTsgKi8KKyAgICBwcmludGYoIlBhdGg6ICVzXG4iLGdfdXJsLnB0 aCA/IGdfdXJsLnB0aCA6ICIobm9uZSkiKTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisKKyAgICBp ZiAoIWNrc3RyY21wKGdfdXJsLnN2YywiaWtzZCIsLTEsMCkgfHwKKyAgICAgICAgIWNrc3RyY21w KGdfdXJsLnN2Yywia2VybWl0IiwtMSwwKSkgeworICAgICAgICBleHRlcm4gY2hhciBwd2J1Zltd OworICAgICAgICBleHRlcm4gaW50IHB3ZmxnOworI2lmZGVmIE9TMgorICAgICAgICBleHRlcm4g aW50IHB3Y3J5cHQ7CisjZW5kaWYgLyogT1MyICovCisKKyAgICAgICAgaWYgKCFnX3VybC5ob3Mp IHsKKyAgICAgICAgICAgIHByaW50ZigiP0luY29tcGxldGUgSUtTRCBVUkxcbiIpOworICAgICAg ICAgICAgZG9leGl0KEJBRF9FWElULDEpOworICAgICAgICB9CisgICAgICAgIGlmICghZ191cmwu dXNyKQorICAgICAgICAgICAgbWFrZXN0cigmZ191cmwudXNyLCJhbm9ueW1vdXMiKTsKKyAgICAg ICAgaWYgKCFnX3VybC5wc3cpIHsKKyAgICAgICAgICAgIGNoYXIgKiB0bXBidWYgPSBOVUxMOwor ICAgICAgICAgICAgaWYgKCEodG1wYnVmID0gKGNoYXIgKiltYWxsb2MoMTAyNCkpKQorICAgICAg ICAgICAgICAgIGZhdGFsKCJkb3VybDogb3V0IG9mIG1lbW9yeSIpOworICAgICAgICAgICAgaWYg KCFja3N0cmNtcChnX3VybC51c3IsImFub255bW91cyIsLTEsMCkpIHsKKyAgICAgICAgICAgICAg ICBja21ha21zZyh0bXBidWYsMTAyNCx1aWRidWYsIkAiLG15aG9zdCxOVUxMKTsKKyAgICAgICAg ICAgICAgICBtYWtlc3RyKCZnX3VybC5wc3csdG1wYnVmKTsKKyAgICAgICAgICAgIH0gZWxzZSB7 CisgICAgICAgICAgICAgICAgcmVhZHBhc3MoIiBQYXNzd29yZDoiLHRtcGJ1ZiwxMDI0KTsKKyAg ICAgICAgICAgICAgICBtYWtlc3RyKCZnX3VybC5wc3csdG1wYnVmKTsKKyAgICAgICAgICAgIH0K KyAgICAgICAgICAgIGZyZWUodG1wYnVmKTsKKyAgICAgICAgfQorICAgICAgICBwb3J0ID0gImtl cm1pdCI7CisgICAgICAgIHR0bnByb3RvID0gTlBfVEVMTkVUOworICAgICAgICBuZXR0eXBlID0g TkVUX1RDUEI7CisgICAgICAgIG1kbXR5cCA9IC1uZXR0eXBlOworICAgICAgICBsb2NhbCA9IC0x OworICAgICAgICBja3N0cm5jcHkodWlkYnVmLGdfdXJsLnVzcixVSURCVUZMRU4pOworICAgICAg ICBpZiAoZ191cmwucHN3KSB7CisgICAgICAgICAgICBja3N0cm5jcHkocHdidWYsZ191cmwucHN3 LFBXQlVGTCk7CisgICAgICAgICAgICBwd2ZsZyA9IDE7CisjaWZkZWYgT1MyCisgICAgICAgICAg ICBwd2NyeXB0ID0gMDsKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAgfQorICAgICAgICBja21h a21zZyh0dG5hbWUsCisgICAgICAgICAgICAgICAgIFRUTkFNTEVOLAorICAgICAgICAgICAgICAg ICBnX3VybC5ob3MsCisgICAgICAgICAgICAgICAgICI6IiwKKyAgICAgICAgICAgICAgICAgZ191 cmwucG9yID8gZ191cmwucG9yIDogcG9ydCwKKyAgICAgICAgICAgICAgICAgTlVMTAorICAgICAg ICAgICAgICAgICApOworICAgICAgICByYyA9IHR0b3Blbih0dG5hbWUsJmxvY2FsLG1kbXR5cCww KTsKKyAgICAgICAgaWYgKHJjID4gLTEpIHsKKyAgICAgICAgICAgIG5ldHdvcmsgPSAxOworICAg ICAgICAgICAgZXhpdG9uY2xvc2UgPSAxOworI2lmZGVmIENLTE9HRElBTAorICAgICAgICAgICAg ZG9sb2duZXQoKTsKKyNlbmRpZiAvKiBDS0xPR0RJQUwgKi8KKyAgICAgICAgfSBlbHNlIHsKKyAg ICAgICAgICAgIHByaW50ZigiP0Nvbm5lY3Rpb24gZmFpbGVkOiAlc1xuIixnX3VybC5zYXYpOwor ICAgICAgICAgICAgZG9leGl0KEJBRF9FWElULDEpOworICAgICAgICB9CisgICAgICAgIC8qIEFs c28gbmVlZCB0byBjaGVjayBoZXJlIGZvciBzZWN1cmUgYXV0aGVudGljYXRpb24gYWxyZWFkeSBk b25lICovCisKKyNpZmRlZiBOT1NQTAorICAgICAgICBjZmxnID0gMTsKKyNlbHNlCisJeworICAg ICAgICAgICAgY2hhciAqIHNjcmlwdCA9IE5VTEw7CisgICAgICAgICAgICBpZiAoIShzY3JpcHQg PSAoY2hhciAqKW1hbGxvYyhTQ1JJUFRMRU4pKSkKKyAgICAgICAgICAgICAgZmF0YWwoImRvdXJs OiBvdXQgb2YgbWVtb3J5Iik7CisgICAgICAgICAgICBpZiAoIWdfdXJsLnB0aCkgeyAgICAgICAg ICAgLyogV3JpdGUgdGhlIGFwcHJvcHJpYXRlIHNjcmlwdCAqLworCQljZmxnID0gMTsKKyAgICAg ICAgICAgICAgICBja21ha3htc2coc2NyaXB0LFNDUklQVExFTiwKKwkJCSAgImlmIG5vdCBlcSB7 XFx2KGF1dGhzdGF0ZSl9IHt1c2VyfSAiLAorCQkJICAiaWYgbm90IGVxIHtcXHYoYXV0aHN0YXRl KX0ge3ZhbGlkfSB7ICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJyZW1vdGUgbG9naW4g IiwgLyogTm8gcGF0aCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICBnX3VybC51c3IsICAg ICAgIC8qIEp1c3QgbG9nIGluIGFuZCBDT05ORUNUICovCisgICAgICAgICAgICAgICAgICAgICAg ICAgICIgIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZ191cmwucHN3LAorICAgICAgICAg ICAgICAgICAgICAgICAgICAiLCBpZiBmYWlsIGV4aXQgMSB7SUtTRCBsb2dpbiBmYWlsZWR9IH0i LAorICAgICAgICAgICAgICAgICAgICAgICAgICAiLCBjb25uZWN0IiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgTlVMTCxOVUxMLE5VTEwsTlVMTCk7CisJCS8qIHByaW50ZigiQ0xDTURTIDE6 ICVzXG4iLHNjcmlwdCk7ICovCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg IC8qIGRvZXMgdGhlIHBhdGggc3BlY2lmeSBhIGZpbGUgb3IgYSBkaXJlY3Rvcnk/ICovCisgICAg ICAgICAgICAgICAgaW50IGxlbiA9IHN0cmxlbihnX3VybC5wdGgpOworICAgICAgICAgICAgICAg IGlmIChJU0RJUlNFUChnX3VybC5wdGhbbGVuLTFdKSkgeworCQkgICAgY2ttYWt4bXNnKHNjcmlw dCxTQ1JJUFRMRU4sIC8qIERpcmVjdG9yeSBuYW1lIGdpdmVuICovCisJCQkgICAgICAiaWYgbm90 IGVxIHtcXHYoYXV0aHN0YXRlKX0ge3VzZXJ9IFwKK2lmIG5vdCBlcSB7XFx2KGF1dGhzdGF0ZSl9 IHt2YWxpZH0geyByZW1vdGUgbG9naW4gIiwKKwkJCSAgICAgIGdfdXJsLnVzciwKKwkJCSAgICAg ICIgIiwKKwkJCSAgICAgIGdfdXJsLnBzdywKKwkJCSAgICAgICIsIGlmIGZhaWwgZXhpdCAxIHtJ S1NEIGxvZ2luIGZhaWxlZH0gfSIsCisJCQkgICAgICAiLCBzZXQgbWFjcm8gZXJyb3Igb24iLAor CQkJICAgICAgIiwgc2V0IHhmZXIgZGlzcGwgYnJpZWYiLAorCQkJICAgICAgIiwgc2V0IHhmZXIg YmVsbCBvZmYiLAorCQkJICAgICAgIiwgcmVtb3RlIGNkICIsCisJCQkgICAgICBnX3VybC5wdGgs CisJCQkgICAgICAiLCBsaW5lb3V0IGRpcmVjdG9yeSIsCisJCQkgICAgICAiLCBjb25uZWN0Igor CQkJICAgICAgKTsKKwkJICAgIC8qIHByaW50ZigiQ0xDTURTIDI6ICVzXG4iLHNjcmlwdCk7ICov CisJCX0gZWxzZSB7CisJCSAgICBja21ha3htc2coc2NyaXB0LFNDUklQVExFTiwgLyogUGF0aCBn aXZlbiwgdHJ5IHRvIEdFVCAqLworCQkJICAgICAgImlmIG5vdCBlcSB7XFx2KGF1dGhzdGF0ZSl9 IHt1c2VyfSBcCitpZiBub3QgZXEge1xcdihhdXRoc3RhdGUpfSB7dmFsaWR9IHsgcmVtb3RlIGxv Z2luICIsCisJCQkgICAgICBnX3VybC51c3IsCisJCQkgICAgICAiICIsCisJCQkgICAgICBnX3Vy bC5wc3csCisJCQkgICAgICAiLCBpZiBmYWlsIGV4aXQgMSB7SUtTRCBsb2dpbiBmYWlsZWR9IH0i LAorCQkJICAgICAgIiwgc2V0IHhmZXIgZGlzcGwgYnJpZWYiLAorCQkJICAgICAgIiwgc2V0IHhm ZXIgYmVsbCBvZmYiLAorCQkJICAgICAgIiwgZ2V0ICIsCisJCQkgICAgICBnX3VybC5wdGgsCisJ CQkgICAgICAiLCAucmMgOj0gXFx2KHN0YXR1cykiLAorCQkJICAgICAgIiwgaWYgb3BlbiBjb25u ZWN0aW9uIGJ5ZSIsCisJCQkgICAgICAiLCBleGl0IFxcbShyYykiCisJCQkgICAgICApOworCQkg ICAgLyogcHJpbnRmKCJDTENNRFMgMjogJXNcbiIsc2NyaXB0KTsgKi8KKwkJfQorICAgICAgICAg ICAgfQorICAgICAgICAgICAgY2xjbWRzID0gc2NyaXB0OwkJLyogTWFrZSB0aGlzIG91ciAtQyBj bWRsaW5lIG1hY3JvICovCisJICAgIC8qIHByaW50ZigiSEFWRVVSTD0lZFxuIixoYXZldXJsKTsg Ki8KKyAgICAgICAgfQorI2VuZGlmIC8qIE5PU1BMICovCisgICAgfSBlbHNlIHsKKyAgICAgICAg aWYgKGNrc3RyY21wKGdfdXJsLnN2YywidGVsbmV0IiwtMSwwKSAmJgorI2lmZGVmIFNTSEJVSUxU SU4KKyAgICAgICAgICAgIGNrc3RyY21wKGdfdXJsLnN2Yywic3NoIiwtMSwwKSAmJgorI2VuZGlm IC8qIFNTSEJVSUxUSU4gKi8KKyAgICAgICAgICAgIGNrc3RyY21wKGdfdXJsLnN2YywiZnRwIiwt MSwwKSkgeworICAgICAgICAgICAgcHJpbnRmKCI/U29ycnksICVzIFVSTHMgbm90IHN1cHBvcnRl ZFxuIiwKKyAgICAgICAgICAgICAgICAgICBnX3VybC5zdmMgPyBnX3VybC5zdmMgOiAiIik7Cisg ICAgICAgICAgICBkb2V4aXQoQkFEX0VYSVQsMSk7CisgICAgICAgIH0KKyAgICB9Cit9CisjZW5k aWYgLyogTk9DTURMICovCisjZW5kaWYgLyogTkVUQ09OTiAqLworI2VuZGlmIC8qIE5PVVJMICov CisKKy8qCisgIG1haW4oKS4uLgorCisgIElmIHlvdSBnZXQgY29tcGxhaW50cyBhYm91dCAibWFp bjogcmV0dXJuIHR5cGUgaXMgbm90IGJsYWgiLAorICBkZWZpbmUgTUFJTlRZUEUgb24gdGhlIEND IGNvbW1hbmQgbGluZSwgZS5nLiAiQ0ZMQUdTPS1ETUFJTlRZUEU9YmxhaCIKKyAgKHdoZXJlICJi bGFoIiBpcyBpbnQsIGxvbmcsIG9yIHdoYXRldmVyKS4KKworICBJZiB0aGUgY29tcGxhaW50IGlz ICJBdHRlbXB0IHRvIHJldHVybiBhIHZhbHVlIGZyb20gYSBmdW5jdGlvbiBvZiB0eXBlIHZvaWQi CisgIHRoZW4gYWRkIC1ETUFJTklTVk9JRC4KKyovCisjaWZuZGVmIE1BSU5UWVBFCisjaWZuZGVm IE1BSU5JU1ZPSUQKKyNkZWZpbmUgTUFJTlRZUEUgaW50CisjZW5kaWYgLyogTUFJTklTVk9JRCAq LworI2VuZGlmIC8qIE1BSU5UWVBFICovCisKKyNpZmRlZiBNQUlOSVNWT0lECisjaWZuZGVmIE1B SU5UWVBFCisjZGVmaW5lIE1BSU5UWVBFIHZvaWQKKyNlbmRpZiAvKiBNQUlOVFlQRSAqLworI2Vu ZGlmIC8qIE1BSU5JU1ZPSUQgKi8KKworI2lmZGVmIGFlZ2lzCisvKiBPbiB0aGUgQXBvbGxvLCBp bnRlcmNlcHQgbWFpbiB0byBpbnNlcnQgYSBjbGVhbnVwIGhhbmRsZXIgKi8KK2ludAorY2tjbWFp KGFyZ2MsYXJndikgaW50IGFyZ2M7IGNoYXIgKiphcmd2OworI2Vsc2UKKyNpZmRlZiBNQUMgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBNYWNpbnRvc2ggKi8KK2ludAorbWFpbiAodm9p ZCkKKyNlbHNlCisjaWZkZWYgX19HTlVDX18gICAgICAgICAgICAgICAgICAgICAgICAgLyogR0ND IGNvbXBpbGVyICovCitpbnQKK21haW4oYXJnYyxhcmd2KSBpbnQgYXJnYzsgY2hhciAqKmFyZ3Y7 CisjZWxzZQorI2lmZGVmIF9fREVDQyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERFQyBB bHBoYSB3aXRoIERFQyBDIGNvbXBpbGVyICovCisjaWZkZWYgX19BTFBIQQoraW50CittYWluKGFy Z2MsYXJndikgaW50IGFyZ2M7IGNoYXIgKiphcmd2OworI2Vsc2UgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIERFQyBDIGNvbXBpbGVyLCBub3QgQWxwaGEgKi8KKyNkZWZpbmUg TUFJTklTVk9JRAorVk9JRAorbWFpbihhcmdjLGFyZ3YpIGludCBhcmdjOyBjaGFyICoqYXJndjsK KyNlbmRpZiAgLyogX19BTFBIQSAqLworI2Vsc2UKKyNpZmRlZiBTVFJBVFVTICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBTdHJhdHVzIFZPUyAqLworaW50CittYWluKGFyZ2MsYXJndikgaW50 IGFyZ2M7IGNoYXIgKiphcmd2OworI2Vsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIEstOTUgKi8KKyNpZmRlZiBPUzIKKyNpZmRlZiBLVUkKKyNkZWZpbmUgTUFJTklTVk9J RAordm9pZAorTWFpbiggaW50IGFyZ2MsIGNoYXIgKiogYXJndiApCisjZWxzZSAvKiBLVUkgKi8K KyNkZWZpbmUgTUFJTklTVk9JRAorVk9JRAorbWFpbihhcmdjLGFyZ3YpIGludCBhcmdjOyBjaGFy ICoqYXJndjsKKyNlbmRpZiAvKiBLVUkgKi8KKyNlbHNlICAvKiBOb3QgSzk1ICovCitNQUlOVFlQ RSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQWxsIG90aGVycy4uLiAqLworbWFp bihhcmdjLGFyZ3YpIGludCBhcmdjOyBjaGFyICoqYXJndjsKKyNlbmRpZiAvKiBPUzIgKi8KKyNl bmRpZiAvKiBTVFJBVFVTICovCisjZW5kaWYgLyogX19ERUNDICovCisjZW5kaWYgLyogX19HTlVD X18gKi8KKyNlbmRpZiAvKiBNQUMgKi8KKyNlbmRpZiAvKiBhZWdpcyAqLworCisvKiBtYWluICov IHsKKworICAgIGNoYXIgKnA7CisKKyNpZm5kZWYgTk9TRVRLRVkKKyAgICBpbnQgaTsKKyNlbmRp ZiAvKiBOT1NFVEtFWSAqLworCisjaWZkZWYgZGF0YWdlbmVyYWwKKyAgICBzaG9ydCAqcGZoYSA9 IDAxNjAwMDAwMDAzNjsgICAgICAgICAvKiBHZXQgYXJvdW5kIExBTkdfUlQgcHJvYmxlbSAqLwor ICAgICpwZmhhID0gKHNob3J0KSAwOyAgICAgICAgICAgICAgICAgIC8qIE5vIHVzZXIgcHJvdGVj dGlvbiBmYXVsdCBoYW5kbGVyICovCisjZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KKworICAgIGlu dCB1bmJ1ZiA9IDA7CQkJLyogbm9uemVybyBmb3IgdW5idWZmZXJlZCBzdGRvdXQgKi8KKworLyog c2V0YnVmIGhhcyB0byBiZSBjYWxsZWQgb24gdGhlIGZpbGUgZGVzY3JpcHRvciBiZWZvcmUgaXQg aXMgdXNlZCAqLworCisjaWZkZWYgVU5JWAorI2lmZGVmIE5PTk9TRVRCVUYJCQkvKiBVbmJ1ZmZl cmVkIGNvbnNvbGUgaS9vICovCisgICAgdW5idWYrKzsJCQkJLyogYXMgYSBjb21waWxlLXRpbWUg b3B0aW9uICovCisjZW5kaWYJLyogTk9OT1NFVEJVRiAqLworICAgIGlmICghdW5idWYpIHsJCQkv KiBPciBhcyBhIGNvbW1hbmQtbGluZSBzZWxlY3Rpb24gKi8KKwlpbnQgaSwgbjsJCQkvKiBXZSBo YXZlIHRvIHByZS1wcmUtc2NhbiBmb3IgKi8KKwljaGFyICogczsJCQkvKiB0aGlzIG9uZS4gKi8K Kwlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKSB7CisJICAgIHMgPSBhcmd2W2ldOworCSAgICBp ZiAoIXMpIG4gPSAwOyBlbHNlIG4gPSAoaW50KXN0cmxlbihzKTsKKwkgICAgaWYgKG4gPiA0KSB7 CisJCWlmICghY2tzdHJjbXAoIi0tdW5idWZmZXJlZCIscyxuLDApKSB7CisJCSAgICB1bmJ1Zisr OworCQkgICAgYnJlYWs7CisJCX0KKwkgICAgfQorCX0KKyAgICB9CisgICAgaWYgKHVuYnVmKQor ICAgICAgc2V0YnVmKHN0ZG91dCxOVUxMKTsKKyNlbmRpZgkvKiBVTklYICovCisKKy8qIERvIHNv bWUgaW5pdGlhbGl6YXRpb24gKi8KKworI2lmZGVmIFZNUworI2lmZGVmIF9fREVDQworICAgIC8q IEdldCBzb21lIFJNUyBkZWZhdWx0IHNldHRpbmdzLiAqLworICAgIGdldF9ybXNfZGVmYXVsdHMo KTsKKyNlbmRpZiAvKiBkZWYgX19ERUNDICovCisjZW5kaWYgLyogZGVmIFZNUyAqLworCisjaWZu ZGVmIE1BQworICAgIHhhcmdjID0geGFyZ3MgPSBhcmdjOyAgICAgICAgICAgICAgIC8qIE1ha2Ug Z2xvYmFsIGNvcGllcyBvZiBhcmdjICovCisgICAgeGFyZ3YgPSBhcmd2OyAgICAgICAgICAgICAg ICAgICAgICAgLyogLi4uYW5kIGFyZ3YuICovCisgICAgeGFyZzAgPSBhcmd2WzBdOworI2lmZGVm IE5UCisgICAgc2V0T1NWZXIoKTsKKyNlbmRpZiAvKiBOVCAqLworICAgIHpzdHJpcChhcmd2WzBd LCZwKTsgICAgICAgICAgICAgICAgIC8qIEdldCBuYW1lIHdlIHdlcmUgaW52b2tlZCB3aXRoICov CisgICAgbWFrZXN0cigmbXluYW1lLHApOworICAgIGlmICghY2tzdHJjbXAobXluYW1lLCJ0ZWxu ZXQiLC0xLDApKSAgICAgICBob3djYWxsZWQgPSBJX0FNX1RFTE5FVDsKKyNpZmRlZiBDS19LRVJC RVJPUworICAgIGVsc2UgaWYgKCFja3N0cmNtcChteW5hbWUsImt0ZWxuZXQiLC0xLDApKSBob3dj YWxsZWQgPSBJX0FNX1RFTE5FVDsKKyNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLworICAgIGVsc2Ug aWYgKCFja3N0cmNtcChteW5hbWUsInJsb2dpbiIsLTEsMCkpICBob3djYWxsZWQgPSBJX0FNX1JM T0dJTjsKKyAgICBlbHNlIGlmICghY2tzdHJjbXAobXluYW1lLCJpa3NkIiwtMSwwKSkgICAgaG93 Y2FsbGVkID0gSV9BTV9JS1NEOworI2lmZGVmIE5FV0ZUUAorICAgIGVsc2UgaWYgKCFja3N0cmNt cChteW5hbWUsImZ0cCIsLTEsMCkpICAgICBob3djYWxsZWQgPSBJX0FNX0ZUUDsKKyNlbmRpZiAv KiBORVdGVFAgKi8KKyNpZm5kZWYgTk9IVFRQCisgICAgZWxzZSBpZiAoIWNrc3RyY21wKG15bmFt ZSwiaHR0cCIsLTEsMCkpICAgIGhvd2NhbGxlZCA9IElfQU1fSFRUUDsKKyNlbmRpZiAvKiBOT0hU VFAgKi8KKyNpZmRlZiBPUzIKKyAgICBlbHNlIGlmICghY2tzdHJjbXAobXluYW1lLCJ0ZWxuZXQu ZXhlIiwtMSwwKSkgIGhvd2NhbGxlZCA9IElfQU1fVEVMTkVUOworI2lmZGVmIFNTSEJVSUxUSU4K KyAgICBlbHNlIGlmICghY2tzdHJjbXAobXluYW1lLCJzc2giLC0xLDApKSAgaG93Y2FsbGVkID0g SV9BTV9TU0g7CisgICAgZWxzZSBpZiAoIWNrc3RyY21wKG15bmFtZSwic3NoLmV4ZSIsLTEsMCkp ICBob3djYWxsZWQgPSBJX0FNX1NTSDsKKyNlbmRpZiAvKiBTU0hCVUlMVElOICovCisjaWZkZWYg Q0tfS0VSQkVST1MKKyAgICBlbHNlIGlmICghY2tzdHJjbXAobXluYW1lLCJrdGVsbmV0LmV4ZSIs LTEsMCkpIGhvd2NhbGxlZCA9IElfQU1fVEVMTkVUOworI2VuZGlmIC8qIENLX0tFUkJFUk9TICov CisgICAgZWxzZSBpZiAoIWNrc3RyY21wKG15bmFtZSwicmxvZ2luLmV4ZSIsLTEsMCkpICBob3dj YWxsZWQgPSBJX0FNX1JMT0dJTjsKKyNpZmRlZiBOVAorICAgIGVsc2UgaWYgKCFja3N0cmNtcCht eW5hbWUsImlrc2RudCIsLTEsMCkpICAgIGhvd2NhbGxlZCA9IElfQU1fSUtTRDsKKyAgICBlbHNl IGlmICghY2tzdHJjbXAobXluYW1lLCJpa3NkbnQuZXhlIiwtMSwwKSkgICAgaG93Y2FsbGVkID0g SV9BTV9JS1NEOworI2VuZGlmIC8qIE5UICovCisjaWZkZWYgTkVXRlRQCisgICAgZWxzZSBpZiAo IWNrc3RyY21wKG15bmFtZSwiZnRwLmV4ZSIsLTEsMCkpICAgICBob3djYWxsZWQgPSBJX0FNX0ZU UDsKKyNlbmRpZiAvKiBORVdGVFAgKi8KKyNpZm5kZWYgTk9IVFRQCisgICAgZWxzZSBpZiAoIWNr c3RyY21wKG15bmFtZSwiaHR0cC5leGUiLC0xLDApKSAgICBob3djYWxsZWQgPSBJX0FNX0hUVFA7 CisjZW5kaWYgLyogTk9IVFRQICovCisjZW5kaWYgLyogT1MyICovCisgICAgZWxzZSBpZiAoIWNr c3RyY21wKG15bmFtZSwia2VybWl0LXNzaHN1YiIsLTEsMCkpIGhvd2NhbGxlZCA9IElfQU1fU1NI U1VCOworCisjaWZuZGVmIE5PSUNQCisgICAgY21kaW5pKCk7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogTXVzdCBjb21lIGJlZm9yZSBwcmVzY2FuICovCisgICAgZGVidWcoRjEwMCwibWFp biBjbWRpbmkoKSBkb25lIiwiIiwwKTsKKyNlbmRpZiAvKiBOT0lDUCAqLworICAgIHByZXNjYW4o MCk7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFByZS1DaGVjayBmb3IgZGVidWdnaW5nLCBl dGMgKi8KKyNlbmRpZiAvKiBNQUMgKi8KKyAgICBkZWJ1ZyhGMTAxLCJNQUlOIGZlb2wiLCIiLGZl b2wpOworICAgIG1ha2V2ZXIoKTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFB1dCB0b2dl dGhlciB2ZXJzaW9uIHN0cmluZ3MgKi8KKyNpZm5kZWYgTk9TRVRLRVkgICAgICAgICAgICAgICAg ICAgICAgICAvKiBBbGxvY2F0ZSAmIGluaXRpYWxpemUgdGhlIGtleW1hcCAqLworICAgIC8qIFRo aXMgY29kZSBoYXMgYmVlbiBtb3ZlZCB0byBiZWZvcmUgc3lzaW5pdCgpIGZvciBLOTVHICovCisg ICAgaWYgKCEoa2V5bWFwID0gKEtFWSAqKSBtYWxsb2Moc2l6ZW9mKEtFWSkqS01TSVpFKSkpCisg ICAgICBmYXRhbCgibWFpbjogbm8gbWVtb3J5IGZvciBrZXltYXAiKTsKKyAgICBpZiAoIShtYWNy b3RhYiA9IChNQUNSTyAqKSBtYWxsb2Moc2l6ZW9mKE1BQ1JPKSpLTVNJWkUpKSkKKyAgICAgIGZh dGFsKCJtYWluOiBubyBtZW1vcnkgZm9yIG1hY3JvdGFiIik7CisgICAgZm9yIChpID0gMDsgaSA8 IEtNU0laRTsgaSsrKSB7CisgICAgICAga2V5bWFwW2ldID0gKEtFWSkgaTsKKyAgICAgICBtYWNy b3RhYltpXSA9IE5VTEw7CisgICAgfQorI2VuZGlmIC8qIE5PU0VUS0VZICovCisKKyAgICBzaG9y dGJ5dGVzLnhfc2hvcnQgPSAweEFCQ0Q7ICAgICAgICAvKiBHZXQgRW5kaWFubmVzcyAqLworICAg IGlmIChzaG9ydGJ5dGVzLnhfY2hhclswXSA9PSAweENEKSB7IC8qIDAgPSBCaWcgRW5kaWFuICov CisgICAgICAgIGJ5dGVvcmRlciA9IDE7ICAgICAgICAgICAgICAgICAgLyogMSA9IExpdHRsZSBF bmRpYW4gKi8KKyAgICAgICAgYmlnZW5kaWFuID0gMDsgICAgICAgICAgICAgICAgICAvKiAoZm9y IGNsYXJpdHkgaW4gcHJvZ3JhbW1pbmcpICovCisgICAgfSBlbHNlIHsKKyAgICAgICAgYnl0ZW9y ZGVyID0gMDsgICAgICAgICAgICAgICAgICAvKiBCaWcgRW5kaWFuICovCisgICAgICAgIGJpZ2Vu ZGlhbiA9IDE7CisgICAgfQorICAgIGlmIChzaXplb2YoQ0tfT0ZGX1QpID09IDgpCQkvKiBMYXJn ZSBmaWxlcyBhbmQgaW50cz8gKi8KKyAgICAgIGhhdmVsZnMgPSAxOworCisgICAgaWYgKHN5c2lu aXQoKSA8IDApICAgICAgICAgICAgICAgICAgLyogU3lzdGVtLWRlcGVuZGVudCBpbml0aWFsaXph dGlvbi4gKi8KKyAgICAgIGZhdGFsKCJDYW4ndCBpbml0aWFsaXplISIpOworICAgIGVsc2UKKyAg ICAgIGluaXRmbGcgPSAxOyAgICAgICAgICAgICAgICAgICAgICAvKiBSZW1lbWJlciB3ZSBkaWQu ICovCisgICAgZGVidWcoRjExMSwiY2tjbWFpIG15bmFtZSIsbXluYW1lLGhvd2NhbGxlZCk7CisK KyNpZmRlZiBVTklYCisgICAgZ2V0ZXhlZGlyKCk7ICAgICAgICAgICAgICAgICAgICAgICAgLyog Q29tcHV0ZSBleGVkaXIgdmFyaWFibGUgKi8KKyNlbmRpZiAvKiBVTklYICovCisKKyNpZmRlZiBD S1NZU0xPRworI2lmZGVmIFNZU0xPR0xFVkVMCisvKgorICBJZiBidWlsdCB3aXRoIC1EU1lTTE9H TEVWRUwgb24gY2MgY29tbWFuZCBsaW5lLCB0aGlzIG1lYW5zIHdlIGFsd2F5cworICBkbyBzeXNs b2dnaW5nIGF0IHRoZSBpbmRpY2F0ZWQgbGV2ZWwuCisqLworICAgIHpzeXNsb2coKTsgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIE9wZW4gc3lzbG9nICovCisjZWxzZSAvKiBTWVNMT0dMRVZF TCAqLworI2lmZGVmIElLU0QKKyAgICBpZiAoaW5zZXJ2ZXIpCisgICAgICB6c3lzbG9nKCk7ICAg ICAgICAgICAgICAgICAgICAgICAgLyogT3BlbiBzeXNsb2cgKi8KKyNlbmRpZiAvKiBJS1NEICov CisjZW5kaWYgLyogU1lTTE9HTEVWRUwgKi8KKyNlbmRpZiAvKiBDS1NZU0xPRyAqLworCisjaWZk ZWYgQ0tfS0VSQkVST1MKKyAgICBpbmlfa2VyYigpOyAgICAgICAgICAgICAgICAgICAgICAgICAv KiBJbml0aWFsaXplIEtlcmJlcm9zIGRhdGEgKi8KKyNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLwor I2lmZGVmIENLX1NTTAorICAgIHNzbF9vbmNlX2luaXQoKTsKKyNlbmRpZiAvKiBDS19TU0wgKi8K KyNpZmRlZiBUTkNPREUKKyAgICB0bl9zZXRfbW9kZXMoKTsgICAgICAgICAgICAgICAgICAgICAv KiBJbml0IFRlbG5ldCBPcHRpb24gdGFibGVzICovCisjZW5kaWYgLyogVE5DT0RFICovCisKKyNp ZmRlZiBDS19UVEdXU0laICAgICAgICAgICAgICAgICAgICAgICAvKiBJbml0aWFsaXplIHNjcmVl biBkaW1lbnNpb25zICovCisjaWZkZWYgT1MyCisgICAgdHRnY3dzeigpOworI2Vsc2UgLyogT1My ICovCisgICAgaWYgKHR0Z3dzaXooKSA+IDApIHsKKyAgICAgICAgaWYgKHR0X3Jvd3MgPiAwICYm IHR0X2NvbHMgPiAwKSB7CisgICAgICAgICAgICBjbWRfcm93cyA9IHR0X3Jvd3M7CisgICAgICAg ICAgICBjbWRfY29scyA9IHR0X2NvbHM7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgLyogT1My ICovCisjZW5kaWYgLyogQ0tfVFRHV1NJWiAqLworCisjaWZuZGVmIE9TMgorI2lmZGVmIFRDUFNP Q0tFVAorI2lmZGVmIENLX1NPQ0tTCisgICAgU09DS1Npbml0KGFyZ3ZbMF0pOyAgICAgICAgICAg ICAgICAgLyogSW50ZXJuZXQgcmVsYXkgcGFja2FnZS4uLiAqLworI2VuZGlmIC8qIENLX1NPQ0tT ICovCisjZW5kaWYgLyogVENQU09DS0VUICovCisjZW5kaWYgLyogT1MyICovCisKKyAgICBpbml0 ZmxvdygpOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJbml0aWFsaXplIGZsb3ctY29udHJv bCB0YWJsZSAqLworCisjaWZuZGVmIE5PSUNQCisjaWZkZWYgQ0tGTE9BVAorICAgIGluaXRmbG9h dCgpOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIERlZHVjZSBmbG9hdGluZy1wb2ludCBwcmVj aXNpb24gKi8KKyNlbmRpZiAvKiBDS0ZMT0FUICovCisjZW5kaWYgLyogTk9JQ1AgKi8KKworI2lm bmRlZiBOT1hGRVIKKyAgICBpbml0eGxpc3QoKTsJCQkvKiBJbml0IGV4Y2VwdGlvbiBsaXN0cyAq LworCisjaWZkZWYgQ0tfWFlaICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSW5pdGlhbGl6 ZSBwcm90b2NvbHMuLi4gICovCisKKyNpZmRlZiBYWVpfSU5URVJOQUwgLyogWFlaTU9ERU0gYXJl IGludGVybmFsIC4uLiAqLworCisjaWZkZWYgQ09NTUVOVAorICAgIC8qIENhbid0IGRvIHRoaXMg Zm9yIFhNT0RFTSBiZWNhdXNlIGlmIGZpbGVuYW1lIGNvbnRhaW5zIGEgIkMiIGV0Yy4uLiAqLwor ICAgIGluaXRwcm90byhQUk9UT19YLCAicnggJXMiLCJyeCAlcyIsIE5VTEwsIE5VTEwsIE5VTEws IE5VTEwsIE5VTEwpOworICAgIGluaXRwcm90byhQUk9UT19YQywicmMgJXMiLCJyYyAlcyIsIE5V TEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpOworI2Vsc2UgLyogQ09NTUVOVCAqLworICAgIGlu aXRwcm90byhQUk9UT19YLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxM KTsKKyAgICBpbml0cHJvdG8oUFJPVE9fWEMsTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwg TlVMTCwgTlVMTCk7CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgIGluaXRwcm90byhQUk9UT19Z LCAicmIiLCJyYiIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpOworICAgIGluaXRwcm90 byhQUk9UT19HLCAicmIiLCJyYiIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpOworICAg IGluaXRwcm90byhQUk9UT19aLCAicnoiLCJyeiIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5V TEwpOworICAgaW5pdHByb3RvKFBST1RPX0ssImtlcm1pdCAtaXIiLCJrZXJtaXQgLXIiLCJrZXJt aXQgLXgiLE5VTEwsTlVMTCxOVUxMLE5VTEwpOworICAgIC8qIEtlcm1pdCBNdXN0IGJlIGxhc3Qg Ki8KKworI2Vsc2UgLyogWFlaTU9ERU0gYXJlIGV4dGVybmFsIHByb3RvY29scyAuLi4gKi8KKwor IC8qICAgICAgICAgICAgICAgICAgczEgICAgICBzMiAgICAgczMgICAgczQgICAgICBzNSAgICAg ICAgIHM2ICAgICAgczcgICAgICovCisgaW5pdHByb3RvKFBST1RPX1gsICJyeCAlcyIsInJ4ICVz IixOVUxMLCJzeCAlcyIsInN4IC1hICVzIiwicnggJXMiLCAicnggJXMiKTsKKyBpbml0cHJvdG8o UFJPVE9fWEMsInJjICVzIiwicmMgJXMiLE5VTEwsInN4ICVzIiwic3ggLWEgJXMiLCJyYyAlcyIs ICJyYyAlcyIpOworIGluaXRwcm90byhQUk9UT19ZLCAicmIiLCAgICJyYiIsICAgTlVMTCwic2Ig JXMiLCJzYiAtYSAlcyIsInJiIiwgICAgInJiIiAgICk7CisgaW5pdHByb3RvKFBST1RPX0csICJy YiIsICAgInJiIiwgICBOVUxMLCJzYiAlcyIsInNiIC1hICVzIiwicmIiLCAgICAicmIiICAgKTsK KyBpbml0cHJvdG8oUFJPVE9fWiwgInJ6IiwgICAicnoiLCAgIE5VTEwsInN6ICVzIiwic3ogLWEg JXMiLCJyeiIsICAgICJyeiIgICApOworIGluaXRwcm90byhQUk9UT19LLCAia2VybWl0IC1pciIs Imtlcm1pdCAtciIsImtlcm1pdCAteCIsTlVMTCxOVUxMLE5VTEwsTlVMTCk7CisgLyogS2VybWl0 IG11c3QgYmUgbGFzdCAqLworCisjZW5kaWYgLyogWFlaX0lOVEVSTkFMICovCisKKyNlbHNlICAv KiBObyBYWVpNT0RFTSBzdXBwb3J0ICovCisKKyAgIGluaXRwcm90byhQUk9UT19LLCJrZXJtaXQg LWlyIiwia2VybWl0IC1yIiwia2VybWl0IC14IixOVUxMLE5VTEwsTlVMTCxOVUxMKTsKKworI2Vu ZGlmIC8qIENLX1hZWiAqLworI2VuZGlmIC8qIE5PWEZFUiAqLworCisgICAgY29ubm9pKCk7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogQ29uc29sZSBpbnRlcnJ1cHRzIG9mZiAqLworCisj aWZuZGVmIE5PWEZFUgorI2lmZGVmIE9TMgorICAgIC8qIEluaXRpYWxpemUgS2VybWl0IGFuZCBa bW9kZW0gQXV0by1Eb3dubG9hZCBTdHJpbmdzICovCisgICAgYWRsX2tzdHIgPSBzdHJkdXAoIktF Uk1JVCBSRUFEWSBUTyBTRU5ELi4uIik7CisgICAgYWRsX3pzdHIgPSBzdHJkdXAoInJ6XHIiKTsK KyNlbmRpZiAvKiBPUzIgKi8KKworI2lmZGVmIFBBVFRFUk5TCisgICAgaW5pdHBhdCgpOyAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSBmaWxlbmFtZSBwYXR0ZXJucyAqLwor I2VuZGlmIC8qIFBBVFRFUk5TICovCisjZW5kaWYgLyogTk9YRkVSICovCisKKyNpZm5kZWYgTk9D U0VUUworICAgIGluaXRjc2V0cygpOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEluaXRpYWxp emUgY2hhcmFjdGVyIHNldHMgKi8KKyNlbmRpZiAvKiBOT0NTRVRTICovCisKKyNpZm5kZWYgTk9J Q1AKKyNpZmRlZiBERkNETVNHCisgICAgbWFrZXN0cigmY2Rtc2dzdHIsREZDRE1TRyk7CisgICAg bWFrZWxpc3QoY2Rtc2dzdHIsY2Rtc2dmaWxlLDgpOyAgICAgLyogSW5pdGlhbGl6ZSBDRCBtZXNz YWdlIGZpbGVuYW1lcyAqLworI2VuZGlmIC8qIERGQ0RNU0cgKi8KKyNlbmRpZiAvKiBOT0lDUCAq LworCisgICAgc3N0YXRlID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogTm8gZGVmYXVs dCBzdGFydCBzdGF0ZS4gKi8KKyNpZmRlZiBEWU5BTUlDCisgICAgaWYgKGdldGlvYnMoKSA8IDAp CisgICAgICBmYXRhbCgiQ2FuJ3QgYWxsb2NhdGUgaS9vIGJ1ZmZlcnMhIik7CisjZW5kaWYgLyog RFlOQU1JQyAqLworCisjaWZuZGVmIE5PU1BMCisjaWZuZGVmIE5PUkFORE9NCisgICAgeworICAg ICAgICBjaGFyIHN0YWNrZGF0YVsyNTZdOworICAgICAgICB1bnNpZ25lZCBpbnQgYyA9IDEyMzQs IG47CisgICAgICAgIC8qIHRyeSB0byBtYWtlIGEgcmFuZG9tIHVuc2lnbmVkIGludCB0byBmZWVk IHNyYW5kKCkgKi8KKyNpZm5kZWYgVk1TCisJLyogdGltZS5oIGFuZCBNdWx0aU5ldCBkbyBub3Qg Z2V0IGFsb25nICovCisgICAgICAgIGMgPSB0aW1lKE5VTEwpOworI2VuZGlmIC8qIFZNUyAqLwor ICAgICAgICBjICo9IGdldHBpZCgpOworCS8qIFJlZmVyZW5jZWQgYmVmb3JlIHNldC4uLiBERUxJ QkVSQVRFTFkgKi8KKyAgICAgICAgZm9yIChuID0gMDsgbiA8IHNpemVvZihzdGFja2RhdGEpOyBu KyspIC8qIElHTk9SRSBXQVJOSU5HICovCisJICBjICs9IHN0YWNrZGF0YVtuXTsJCS8qIERFTElC RVJBVEVMWSBVU0VEIEJFRk9SRSBTRVQgKi8KKyAgICAgICAgc3JhbmQoKHVuc2lnbmVkIGludClj KTsKKyAgICB9CisjZW5kaWYgLyogTk9SQU5ET00gKi8KKyNlbmRpZiAvKiBOT1NQTCAqLworCisg ICAgY2tob3N0KG15aG9zdCxNWUhPU1RMKTsgICAgICAgICAgICAgLyogTmFtZSBvZiBsb2NhbCBo b3N0ICovCisgICAgZGVidWcoRjExMCwibWFpbiBja2hvc3QiLG15aG9zdCwwKTsKKyNpZmRlZiBJ S1NECisgICAgaWYgKCFpbnNlcnZlcikgeworI2VuZGlmIC8qIElLU0QgKi8KKyAgICAgICAgY2tz dHJuY3B5KHR0bmFtZSxkZnR0eSxUVE5BTUxFTik7IC8qIFNldCB1cCBkZWZhdWx0IHR0eSBuYW1l LiAqLworICAgICAgICBsb2NhbCA9IG5vbG9jYWwgPyAwIDogZGZsb2M7ICAgIC8qIEFuZCB3aGV0 aGVyIGl0J3MgbG9jYWwgb3IgcmVtb3RlLiAqLworICAgICAgICBwYXJpdHkgPSBkZnBydHk7ICAg ICAgICAgICAgICAgIC8qIFNldCBpbml0aWFsIHBhcml0eSwgKi8KKyNpZm5kZWYgTk9YRkVSCisg ICAgICAgIG15aW5kZXggPSBnZXRzeXNpeChja3N5c2lkKTsgICAgLyogU3lzdGVtIGluZGV4ICov CisjZW5kaWYgLyogTk9YRkVSICovCisgICAgICAgIGlmIChsb2NhbCkgaWYgKHR0b3Blbih0dG5h bWUsJmxvY2FsLDAsMCkgPCAwKSB7CisjaWZuZGVmIE9TMgorICAgICAgICAgICAgY29ub2woIkNh bid0IG9wZW4gZGV2aWNlOiAiKTsKKyAgICAgICAgICAgIGNvbm9sbCh0dG5hbWUpOworI2VuZGlm IC8qIE9TMiAqLworICAgICAgICAgICAgbG9jYWwgPSAwOworICAgICAgICAgICAgY2tzdHJuY3B5 KHR0bmFtZSxDVFROQU0sVFROQU1MRU4pOworICAgICAgICB9CisgICAgICAgIHNldGZsb3coKTsg ICAgICAgICAgICAgICAgICAgICAgLyogU2V0IGFwcHJvcHJpYXRlIGZsb3cgY29udHJvbCAqLwor ICAgICAgICBzcGVlZCA9IHR0Z3NwZCgpOyAgICAgICAgICAgICAgIC8qIEdldCB0cmFuc21pc3Np b24gc3BlZWQuICovCisjaWZkZWYgSUtTRAorICAgIH0KKyNlbmRpZiAvKiBJS1NEICovCisKKyNp ZmRlZiBBTllYMjUgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBbGwgWC4yNSBpbXBsZW1l bnRhdGlvbnMgKi8KKyNpZm5kZWYgSUJNWDI1ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBl eGNlcHQgSUJNIGhhdmUgUEFEIHN1cHBvcnQgKi8KKyAgICBpbml0cGFkKCk7ICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBJbml0aWFsaXplIFguMjUgUEFEICovCisjZW5kaWYgLyogSUJNWDI1 ICovCisjZW5kaWYgLyogQU5ZWDI1ICovCisKKyNpZm5kZWYgTk9YRkVSCisgICAgaWYgKGluaWJ1 ZnMoU0JTSVosUkJTSVopIDwgMCkgICAgICAgLyogQWxsb2NhdGUgcGFja2V0IGJ1ZmZlcnMgKi8K KyAgICAgIGZhdGFsKCJDYW4ndCBhbGxvY2F0ZSBwYWNrZXQgYnVmZmVycyEiKTsKKyNpZm5kZWYg Tk9DS1NQRUVECisgICAgc2V0cHJlZml4KHByZWZpeGluZyk7ICAgICAgICAgICAgICAgLyogU2V0 IHVwIGNvbnRyb2wgY2hhciBwcmVmaXhpbmcgKi8KKyNlbmRpZiAvKiBOT0NLU1BFRUQgKi8KKyNl bmRpZiAvKiBOT1hGRVIgKi8KKworI2lmbmRlZiBOT0lDUAorICAgIGlmIChzc3RlbG5ldAorI2lm ZGVmIElLU0QKKyAgICAgICAgfHwgaW5zZXJ2ZXIKKyNlbmRpZiAvKiBJS1NEICovCisgICAgICAg ICkgeworICAgICAgICBpbnQgb24gPSAxLCB4ID0gMDsKKyAgICAgICAgZXh0ZXJuIGludCBja3hl Y2gsIHR0bmV0LCB0dG5wcm90bywgY21kbXNrOworI2lmZGVmIFNPX1NOREJVRgorICAgICAgICBl eHRlcm4gaW50IHRjcF9zZW5kYnVmOworI2VuZGlmCisjaWZkZWYgU09fUkNWQlVGCisgICAgICAg IGV4dGVybiBpbnQgdGNwX3JlY3ZidWY7CisjZW5kaWYKKyNpZmRlZiBTT19LRUVQQUxJVkUKKyAg ICAgICAgZXh0ZXJuIGludCB0Y3Bfa2VlcGFsaXZlOworI2VuZGlmCisjaWZkZWYgU09fTElOR0VS CisgICAgICAgIGV4dGVybiBpbnQgdGNwX2xpbmdlciwgdGNwX2xpbmdlcl90bW87CisjZW5kaWYg LyogU09fTElOR0VSICovCisjaWZkZWYgU09fRE9OVFJPVVRFCisgICAgICAgIGV4dGVybiBpbnQg dGNwX2RvbnRyb3V0ZTsKKyNlbmRpZiAvKiBTT19ET05UUk9VVEUgKi8KKyNpZmRlZiBUQ1BfTk9E RUxBWQorICAgICAgICBleHRlcm4gaW50IHRjcF9ub2RlbGF5OworI2VuZGlmIC8qIFRDUF9OT0RF TEFZICovCisjaWZkZWYgSUtTRAorICAgICAgICBleHRlcm4gaW50IGlrbG9nb3BlbjsKKyNlbmRp ZiAvKiBJS1NEICovCisgICAgICAgIGV4dGVybiBpbnQgdHRtZG07CisKKyNpZmRlZiBVTklYCisg ICAgICAgIGlmIChpc2F0dHkoMCkpCisgICAgICAgICAgZmF0YWwoIkludGVybmV0IEtlcm1pdCBT ZXJ2aWNlIGNhbm5vdCBiZSBzdGFydGVkIGF0IGEgdGVybWluYWwuIik7CisjZW5kaWYgLyogVU5J WCAqLworCisgICAgICAgIHJlbGlhYmxlID0geHJlbGlhYmxlID0gU0VUX09OOyAgLyogSUtTRCBo YXMgcmVsaWFibGUgY29ubmVjdGlvbiAqLworI2lmbmRlZiBWTVMKKyAgICAgICAgZmxvdyA9IDA7 ICAgICAgICAgICAgICAgICAgICAgICAvKiBObyBmbG93IGNvbnRyb2wgbmVlZGVkICovCisjZW5k aWYgLyogVk1TICovCisgICAgICAgIGJnc2V0ID0gMDsgICAgICAgICAgICAgICAgICAgICAgLyog Tm90IGluIGJhY2tncm91bmQgKi8KKyAgICAgICAgbm9wdXNoID0gMTsgICAgICAgICAgICAgICAg ICAgICAvKiBObyBleHRlcm5hbCBwcm9jZXNzZXMgKi8KKyAgICAgICAgcGFyaXR5ID0gMDsgICAg ICAgICAgICAgICAgICAgICAvKiA4IGJpdHMgLi4uICovCisgICAgICAgIGNtZG1zayA9IDB4ZmY7 ICAgICAgICAgICAgICAgICAgLyogYWxsIHRoZSB3YXkgKi8KKyAgICAgICAgY21hc2sgPSAweGZm OworCisjaWZkZWYgSUtTRAorICAgICAgICBpZiAoaW5zZXJ2ZXIpIHsgICAgICAgICAgICAgICAg IC8qIElmIElLU0QgKi8KKyAgICAgICAgICAgIGRvaWtzZGluaXQoKTsgICAgICAgICAgICAgICAv KiBFeGVjdXRlIElLU0QgY29uZmlndXJhdGlvbiBmaWxlICovCisgICAgICAgICAgICB3aGlsZSAo dGxldmVsID4gLTEpCisgICAgICAgICAgICAgIHBhcnNlcigxKTsgICAgICAgICAgICAgICAgLyog KElnbm9yZSBhbnkgZmlsZS14ZmVyIGNvbW1hbmRzKSAqLworICAgICAgICAgICAgaWtzZGNmID0g MTsgICAgICAgICAgICAgICAgIC8qIElLU0QgYy5mLiBoYXMgYmVlbiBwcm9jZXNzZWQgKi8KKyAg ICAgICAgfQorICAgICAgICBpZiAoIWlrbG9nb3BlbikgKFZPSUQpIGRvaWtsb2coKTsgLyogT3Bl biBLZXJtaXQtc3BlY2lmaWMgbG9nICovCisjZW5kaWYgLyogSUtTRCAqLworCisjaWZkZWYgVU5J WAorICAgICAgICBzZXRidWYoc3Rkb3V0LE5VTEwpOyAgICAgICAgICAgIC8qIERvbid0IGJ1ZmZl ciB0aGUgb3V0cHV0ICovCisgICAgICAgIGNrc3RybmNweSh0dG5hbWUsIjAiLFRUTkFNTEVOKTsg Lyogbm90ICIvZGV2L3R0eSIuLi4gKi8KKyNlbmRpZiAvKiBVTklYICovCisgICAgICAgIGxvY2Fs ID0gMDsgICAgICAgICAgICAgICAgICAgICAgLyogV2UgYXJlIGluIHJlbW90ZSBtb2RlICovCisg ICAgICAgIGNreGVjaCA9IDE7ICAgICAgICAgICAgICAgICAgICAgLyogV2Ugd2lsbCBlY2hvICov CisjaWZkZWYgT1MyCisgICAgICAgIG5ldHR5cGUgPSBORVRfVENQQjsgICAgICAgICAgICAgLyog U28gdHRvcGVuKCkgdHJlYXRzIHRoZSBjb25uZWN0aW9uICovCisgICAgICAgIG1kbXR5cCA9IC1u ZXR0eXBlOyAgICAgICAgICAgICAgLyogYXMgYSBuZXR3b3JrICovCisjZW5kaWYgLyogT1MyICov CisgICAgICAgIGRlYnVnKEYxMDAsIm1haW4gYWJvdXQgdG8gY2FsbCB0dG9wZW4oKSBpbnNlcnZl ciIsIiIsMCk7CisgICAgICAgIGlmICh0dG9wZW4odHRuYW1lLCZsb2NhbCxtZG10eXAsMCkgPCAw KSB7IC8qIE9wZW4gY29tbSBjaGFubmVsICovCisgICAgICAgICAgICBmYXRhbCgiY2FuJ3QgaW5p dGlhbGl6ZSBpL28iKTsKKyAgICAgICAgfQorI2lmZGVmIE9TMgorICAgICAgICBsb2NhbCA9IDA7 CisgICAgICAgIG5ldHdvcmsgPSAxOyAgICAgICAgICAgICAgICAgICAgLyogRG9lcyB1c2UgbmV0 d29ya2luZyBjb2RlICovCisjZWxzZSAgLyogT1MyICovCisgICAgICAgIG5ldHdvcmsgPSAwOyAg ICAgICAgICAgICAgICAgICAgLyogRG9lcyBub3QgdXNlIG5ldHdvcmtpbmcgY29kZSAqLworI2Vu ZGlmIC8qIE9TMiAqLworICAgICAgICB0dG1kbSA9IC0xOyAgICAgICAgICAgICAgICAgICAgIC8q IERvZXMgbm90IHVzZSBhIG1vZGVtICovCisgICAgICAgIHNzdGVsbmV0ID0gMTsgICAgICAgICAg ICAgICAgICAgLyogRG8gc2VydmVyLXNpZGUgVGVsbmV0IG5lZ290YXRpb25zICovCisgICAgICAg IGRlYnVnKEYxMTEsIk1BSU4iLCJzc3RlbG5ldCIsc3N0ZWxuZXQpOworICAgICAgICB0dG5ldCA9 IE5FVF9UQ1BCOyAgICAgICAgICAgICAgIC8qIE5ldHdvcmsgdHlwZSBpcyBUQ1Agc29ja2V0cyAq LworICAgICAgICB0dG5wcm90byA9IE5QX1RFTE5FVDsgICAgICAgICAgIC8qIE5ldHdvcmQgcHJv dG9jb2wgaXMgVGVsbmV0ICovCisjaWZkZWYgSUtTREIKKyAgICAgICAgZGJpbml0KCk7ICAgICAg ICAgICAgICAgICAgICAgICAvKiBJbml0aWFsaXplIGRhdGFiYXNlIHJlY29yZCAqLworI2VuZGlm IC8qIElLU0RCICovCisjaWZuZGVmIE9TMgorI2lmZGVmIENLX0FVVEhFTlRJQ0FUSU9OCisgICAg ICAgIC8qIEJlZm9yZSBpbml0aWFsaXphdGluZyBUZWxuZXQvUmxvZ2luIG5lZ290aWF0aW9ucywg aW5pdCBLZXJiZXJvcyAqLworICAgICAgICBja19hdXRoX2luaXQoY2tnZXRwZWVyKCksIiIsIiIs MCk7CisjZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJT04gKi8KKworI2lmZGVmIE5PTl9CTE9DS19J TworICAgICAgICBvbiA9IDE7CisgICAgICAgIHggPSBzb2NrZXRfaW9jdGwoMCxGSU9OQklPLCZv bik7CisgICAgICAgIGRlYnVnKEYxMDEsIm1haW4gRklPTkJJTyIsIiIseCk7CisjZW5kaWYgLyog Tk9OX0JMT0NLX0lPICovCisjaWZkZWYgU09fT09CSU5MSU5FCisgICAgICAgIG9uID0gMTsKKyAg ICAgICAgeCA9IHNldHNvY2tvcHQoMCwgU09MX1NPQ0tFVCwgU09fT09CSU5MSU5FLCAoY2hhciAq KSZvbiwgc2l6ZW9mKG9uKSk7CisgICAgICAgIGRlYnVnKEYxMDEsIm1haW4gU09fT09CSU5MSU5F IiwiIix4KTsKKyNlbmRpZiAvKiBTT19PT0JJTkxJTkUgKi8KKworI2lmbmRlZiBOT1RDUE9QVFMK KyNpZm5kZWYgZGF0YWdlbmVyYWwKKyNpZmRlZiBTT0xfU09DS0VUCisjaWZkZWYgVENQX05PREVM QVkKKyAgICAgICAgbm9fZGVsYXkoMCx0Y3Bfbm9kZWxheSk7CisjZW5kaWYgLyogVENQX05PREVM QVkgKi8KKyNpZmRlZiBTT19LRUVQQUxJVkUKKyAgICAgICAga2VlcGFsaXZlKDAsdGNwX2tlZXBh bGl2ZSk7CisjZW5kaWYgLyogU09fS0VFUEFMSVZFICovCisjaWZkZWYgU09fTElOR0VSCisgICAg ICAgIGNrX2xpbmdlcigwLHRjcF9saW5nZXIsIHRjcF9saW5nZXJfdG1vKTsKKyNlbmRpZiAvKiBT T19MSU5HRVIgKi8KKyNpZmRlZiBTT19ET05UUk9VVEUKKyAgICAgICAgZG9udHJvdXRlKDAsdGNw X2RvbnRyb3V0ZSk7CisjZW5kaWYgLyogU09fRE9OVFJPVVRFICovCisjaWZkZWYgU09fU05EQlVG CisgICAgICAgIHNlbmRidWYoMCx0Y3Bfc2VuZGJ1Zik7CisjZW5kaWYgLyogU09fU05EQlVGICov CisjaWZkZWYgU09fUkNWQlVGCisgICAgICAgIHJlY3ZidWYoMCx0Y3BfcmVjdmJ1Zik7CisjZW5k aWYgLyogU09fUkNWQlVGICovCisjZW5kaWYgLyogU09MX1NPQ0tFVCAqLworI2VuZGlmIC8qIGRh dGFnZW5lcmFsICovCisjZW5kaWYgLyogTk9UQ1BPUFRTICovCisKKyNpZmRlZiBDS19TU0wKKyAg ICAgICAgaWYgKGNrX3NzbGVheV9pc19pbnN0YWxsZWQoKSkgeworICAgICAgICAgICAgaWYgKCFz c2xfdG5faW5pdChTU0xfU0VSVkVSKSkgeworICAgICAgICAgICAgICAgIGlmIChiaW9fZXJyICE9 IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgQklPX3ByaW50ZihiaW9fZXJyLCJkb19zc2xl YXlfaW5pdCgpIGZhaWxlZFxyXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgRVJSX3ByaW50X2Vy cm9ycyhiaW9fZXJyKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg ICAgICBmZmx1c2goc3RkZXJyKTsKKyAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIs ImRvX3NzbGVheV9pbml0KCkgZmFpbGVkXHJcbiIpOworICAgICAgICAgICAgICAgICAgICBFUlJf cHJpbnRfZXJyb3JzX2ZwKHN0ZGVycik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg ICAgIHN3aXRjaCAodHRucHJvdG8pIHsKKwkJICBjYXNlIE5QX1NTTDoKKwkJICBjYXNlIE5QX1RM UzoKKyAgCQkgIGNhc2UgTlBfU1NMX1JBVzoKKwkJICBjYXNlIE5QX1RMU19SQVc6CisJCSAgY2Fz ZSBOUF9TU0xfVEVMTkVUOgorCQkgIGNhc2UgTlBfVExTX1RFTE5FVDoKKyAgICAgICAgICAgICAg ICAgICAgZG9leGl0KEJBRF9FWElULDEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg ICAgICAvKiBvdGhlcndpc2Ugd2Ugd2lsbCBjb250aW51ZSB0byBhY2NlcHQgdGhlIGNvbm5lY3Rp b24gICAqLworICAgICAgICAgICAgICAgIC8qIHdpdGhvdXQgU1NMIG9yIFRMUyBzdXBwb3J0IHVu bGVzcyByZXF1aXJlZC4gKi8KKyAgICAgICAgICAgICAgICBpZiAoIFRFTE9QVF9ERUZfU19NRV9N T0RFKFRFTE9QVF9TVEFSVF9UTFMpICE9IFROX05HX01VICkKKyAgICAgICAgICAgICAgICAgICAg VEVMT1BUX0RFRl9TX01FX01PREUoVEVMT1BUX1NUQVJUX1RMUykgPSBUTl9OR19SRjsKKyAgICAg ICAgICAgICAgICBpZiAoIFRFTE9QVF9ERUZfU19VX01PREUoVEVMT1BUX1NUQVJUX1RMUykgIT0g VE5fTkdfTVUgKQorICAgICAgICAgICAgICAgICAgICBURUxPUFRfREVGX1NfVV9NT0RFKFRFTE9Q VF9TVEFSVF9UTFMpID0gVE5fTkdfUkY7CisgICAgICAgICAgICAgICAgaWYgKCBURUxPUFRfREVG X0NfTUVfTU9ERShURUxPUFRfU1RBUlRfVExTKSAhPSBUTl9OR19NVSApCisgICAgICAgICAgICAg ICAgICAgIFRFTE9QVF9ERUZfQ19NRV9NT0RFKFRFTE9QVF9TVEFSVF9UTFMpID0gVE5fTkdfUkY7 CisgICAgICAgICAgICAgICAgaWYgKCBURUxPUFRfREVGX0NfVV9NT0RFKFRFTE9QVF9TVEFSVF9U TFMpICE9IFROX05HX01VICkKKyAgICAgICAgICAgICAgICAgICAgVEVMT1BUX0RFRl9DX1VfTU9E RShURUxPUFRfU1RBUlRfVExTKSA9IFROX05HX1JGOworICAgICAgICAgICAgfSBlbHNlIHsKKyAg ICAgICAgICAgICAgICBpZiAoIGNrX3NzbF9pbmNvbWluZygwKSA8IDAgKSB7CisgICAgICAgICAg ICAgICAgICAgIGRvZXhpdChCQURfRVhJVCwxKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICB9CisgICAgICAgIH0KKyNlbmRpZiAvKiBDS19TU0wgKi8KKworI2lmZGVmIFROQ09ERQor ICAgICAgICB0bl9pbmkoKTsgICAgICAgICAgICAgICAgICAgICAgIC8qIFN0YXJ0IFRlbG5ldCBu ZWdvdGlhdGlvbiBub3cgKi8KKyNlbmRpZiAvKiBUTkNPREUgKi8KKyNlbmRpZiAvKiBPUzIgKi8K KyAgICB9CisgICAgZGVidWcoRjEwMSwibWFpbiBhcmdjIGFmdGVyIHByZXNjYW4oKSIsIiIsYXJn Yyk7CisKKyAgICAvKiBOb3cgcHJvY2VzcyBhbnkgcmVsZXZhbnQgZW52aXJvbm1lbnQgdmFyaWFi bGVzICovCisKKyNpZm5kZWYgTk9ESUFMCisgICAgZ2V0ZGlhbGVudigpOyAgICAgICAgICAgICAg ICAgICAgICAgLyogRGlhbGluZyAqLworI2lmZGVmIE5FVENPTk4KKyAgICBuZGluaXQoKTsgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBJbml0aWFsaXplIG5ldHdvcmsgZGlyZWN0b3J5IGlu Zm8gKi8KKyAgICBnZXRuZXRlbnYoKTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBOZXR3b3Jr IGRpcmVjdG9yaWVzICovCisjZW5kaWYgLyogTkVUQ09OTiAqLworI2VuZGlmIC8qIE5PRElBTCAq LworCisjaWZuZGVmIE5PWEZFUgorI2lmZGVmIENLX0ZBU1QKKyAgICBkb2Zhc3QoKTsgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBCeSBub3cgRkFTVCBkZWZhdWx0cyBzaG91bGQgYmUgT0sg Ki8KKyNlbmRpZiAvKiBDS19GQVNUICovCisjZW5kaWYgLyogTk9YRkVSICovCisKKyNpZm5kZWYg Tk9DTURMCisgICAgaWtzbG9naW4oKTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIElLU0Qg TG9naW4gYW5kIG90aGVyIHN0dWZmICovCisjaWZkZWYgSUtTRAorI2lmZGVmIE5UCisgICAgaWYg KCBpbnNlcnZlciApCisgICAgICBzZXRudGNyZWRzKCk7CisjZW5kaWYgLyogTlQgKi8KKyNlbmRp ZiAvKiBJS1NEICovCisjZW5kaWYgLyogTk9DTURMICovCisKKyAgICBpZiAoaG93Y2FsbGVkID09 IElfQU1fU1NIU1VCKSB7CisgICAgICAgIHJlbGlhYmxlID0gMTsJCQkvKiBXZSBzYXkgdGhlIGNv bm5lY3Rpb24gaXMgcmVsaWFibGUgKi8KKyAgICAgICAgeHJlbGlhYmxlID0gMTsJCQkvKiBBbmQg dGhhdCB3ZSBzYWlkIGl0IHdhcyAqLworICAgICAgICBzZXRyZWxpYWJsZSA9IDE7CQkvKiBBbmQg cHJldGVuZCB0aGUgInVzZXIiIGRpZCB0b28gKi8KKyAgICAgICAgeGZpbmlzaCA9IDE7CQkJLyog Rm9yIFJFTU9URSBIRUxQIHJlc3BvbnNlICovCisgICAgICAgIG1kbXR5cCA9IDA7CQkJLyogRm9y IHR0b3BlbigpICovCisgICAgICAgIGNrc3RybmNweSh0dG5hbWUsIjAiLFRUTkFNTEVOKzEpOyAg LyogVXNlIGZpbGUgZGVzY3JpcHRvciAwICovCisgICAgICAgIGxvY2FsID0gMDsgICAgICAgICAg ICAgICAgICAgICAgICAgLyogQW5kIGZvcmNlIHJlbW90ZSBtb2RlICovCisgICAgICAgIHR0b3Bl bih0dG5hbWUsJmxvY2FsLG1kbXR5cCwwKTsgLyogT3BlbiB0aGUgImNvbm5lY3Rpb24iICovCisg ICAgICAgIHNzdGF0ZSA9ICd4JzsJCQkvKiBJbml0aWFsIHN0YXRlIGlzIFNlcnZlciAqLworICAg ICAgICBwcm90bygpOwkJCS8qIEVudGVyIHByb3RvY29sICovCisgICAgICAgIGRvZXhpdChHT09E X0VYSVQseGl0c3RhKTsJLyogRXhpdCB3aGVuIGRvbmUgKi8KKyAgICB9CisgICAgZGVidWcoRjEx MSwiaG93Y2FsbGVkIixteW5hbWUsaG93Y2FsbGVkKTsKKworI2lmZGVmIE5PQ0NUUkFQCisgICAg ZG90YWtlaW5pKDApOworI2Vsc2UgLyogTk9DQ1RSQVAgKi8KKyAgICBkZWJ1ZyhGMTAwLCJtYWlu IGFib3V0IHRvIGNjX2V4ZWN1dGUiLCIiLDApOworICAgIHNldGludCgpOworICAgIGNjX2V4ZWN1 dGUoIGNramFkZHIoY21qYnVmKSwgZG90YWtlaW5pLCBmYWlsdGFrZWluaSApOworI2VuZGlmIC8q IE5PQ0NUUkFQICovCisKKyAgICBkZWJ1ZyhGMTExLCJtYWluIDIgY2ZpbGVmIixjbWRmaWwsY2Zp bGVmKTsKKyAgICBpZiAoY21kZmlsWzBdKSB7ICAgICAgICAgICAgICAgICAgICAvKiBJZiB3ZSBn b3Qgb25lIChzZWUgcHJlc2NhbigpKS4uLiAqLworI2lmZGVmIE5PQ0NUUkFQCisgICAgICAgIGRv Y21kZmlsZSgwKTsgICAgICAgICAgICAgICAgICAgLyogZXhlY3V0ZSBpdC4gKi8KKyNlbHNlIC8q IE5PQ0NUUkFQICovCisgICAgICAgIHNldGludCgpOworICAgICAgICBjY19leGVjdXRlKCBja2ph ZGRyKGNtamJ1ZiksIGRvY21kZmlsZSwgZmFpbGNtZGZpbGUgKTsKKyNlbmRpZiAvKiBOT0NDVFJB UCAqLworICAgIH0KKyNpZm5kZWYgT1MyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQ cmVzZXJ2ZSBuYW1lIHNvIHdlIGNhbiBkZWxldGUgaXQgKi8KKyAgICAqY21kZmlsID0gJ1wwJzsg ICAgICAgICAgICAgICAgICAgICAvKiBEb25lLCBudWxsaWZ5IHRoZSBmaWxlIG5hbWUgKi8KKyNl bmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBOT0lDUCAqLworCisjaWZuZGVmIE5PQ01ETAorLyog TG9vayBmb3IgYSBVTklYLXN0eWxlIGNvbW1hbmQgbGluZS4uLiAqLworCisgICAgd2hhdCA9IFdf Tk9USElORzsKKworICAgIGRlYnVnKEYxMDEsIm1haW4gYXJnYyIsIiIsYXJnYyk7CisjaWZuZGVm IE5PSEVMUAorICAgIGluaW9wdGhscCgpOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEluaXRp YWxpemUgY21kbGluZSBhcmcgaGVscCAqLworI2VuZGlmIC8qIE5PSEVMUCAqLworICAgIGlmICgK KyNpZmRlZiBDT01NRU5UCisgICAgICAgICFjZmlsZWYgJiYKKyNlbmRpZiAvKiBDT01NRU5UICov CisgICAgICAgIGFyZ2MgPiAxKSB7ICAgICAgICAgICAgICAgICAgICAgLyogQ29tbWFuZCBsaW5l IGFyZ3VtZW50cz8gKi8KKyAgICAgICAgc3N0YXRlID0gKENIQVIpIGNtZGxpbigpOyAgICAgICAv KiBZZXMsIHBhcnNlLiAqLworI2lmZGVmIE5FVENPTk4KKyNpZm5kZWYgTk9VUkwKKyAgICAgICAg aWYgKGhhdmV1cmwpIHsgICAgICAgICAgICAgICAgICAvKiBXYXMgYSBVUkwgZ2l2ZW4/ICovCisg ICAgICAgICAgICBkb3VybCgpOyAgICAgICAgICAgICAgICAgICAgLyogaWYgc28sIGRvIGl0LiAq LworICAgICAgICB9CisjZW5kaWYgLyogTk9VUkwgKi8KKyNlbmRpZiAvKiBORVRDT05OICovCisj aWZuZGVmIE5PWEZFUgorICAgICAgICB6c3RhdGUgPSBzc3RhdGU7ICAgICAgICAgICAgICAgIC8q IFJlbWVtYmVyIHNzdGF0ZSBhcm91bmQgcHJvdG9jb2wgKi8KKyAgICAgICAgZGVidWcoRjEwMSwi bWFpbiB6c3RhdGUiLCIiLHpzdGF0ZSk7CisjZW5kaWYgLyogTk9YRkVSICovCisKKyNpZm5kZWYg Tk9MT0NBTAorICAgICAgICBpZiAoY2ZsZykgeyAgICAgICAgICAgICAgICAgICAgIC8qIENvbm5l Y3QgZmlyc3QgaWYgcmVxdWVzdGVkICovCisgICAgICAgICAgICBkb2NvbmVjdCgwLDApOworICAg ICAgICAgICAgaWYgKHR0Y2hrKCkgPCAwKQorICAgICAgICAgICAgICBkb2xvZ2VuZCgpOworICAg ICAgICAgICAgY2ZsZyA9IDA7CisgICAgICAgIH0KKyNlbmRpZiAvKiBOT0xPQ0FMICovCisKKyNp Zm5kZWYgTk9YRkVSCisgICAgICAgIGlmIChzc3RhdGUpIHsKKyNpZm5kZWYgTk9MT0NBTAorICAg ICAgICAgICAgaWYgKGRpc3BsYSkgY29uY2IoKGNoYXIpZXNjYXBlKTsgLyogKGZvciBjb25zb2xl ICJpbnRlcnJ1cHRzIikgKi8KKyNlbmRpZiAvKiBOT0xPQ0FMICovCisjaWZkZWYgTk9DQ1RSQVAK KyAgICAgICAgICAgIGRvY21kbGluZSgxKTsKKyNlbHNlIC8qIE5PQ0NUUkFQICovCisgICAgICAg ICAgICBzZXRpbnQoKTsKKyAgICAgICAgICAgIGNjX2V4ZWN1dGUoIGNramFkZHIoY21qYnVmKSwg ZG9jbWRsaW5lLCBmYWlsY21kbGluZSApOworI2VuZGlmIC8qIE5PQ0NUUkFQICovCisgICAgICAg IH0KKyNlbmRpZiAvKiBOT1hGRVIgKi8KKworI2lmbmRlZiBOT0lDUAorLyoKKyAgSWYgYSBjb21t YW5kLWxpbmUgYWN0aW9uIGFyZ3VtZW50IHdhcyBnaXZlbiBhbmQgLVMgKCJzdGF5Iikgd2FzIG5v dCBnaXZlbiwKKyAgZXhpdCBub3cuCisqLworICAgICAgICBpZiAoKGNmbGcgfHwgY25mbGcgfHwg enN0YXRlKSAmJiAhc3RheWZsZykKKyNlbmRpZiAvKiBOT0lDUCAqLworICAgICAgICAgIGRvZXhp dChHT09EX0VYSVQseGl0c3RhKTsgICAgIC8qIEV4aXQgd2l0aCBnb29kIHN0YXR1cyAqLworCisj aWZuZGVmIE5PTE9DQUwKKyNpZm5kZWYgTk9JQ1AKKyAgICAgICAgaWYgKGxvY2FsKSB7CisjaWZk ZWYgTkVUQ09OTgorICAgICAgICAgICAgaWYgKChjZmxnIHx8IGNuZmxnKSAmJiB0bl9leGl0ICYm IHR0Y2hrKCkgPCAwKQorICAgICAgICAgICAgICBkb2V4aXQoR09PRF9FWElULHhpdHN0YSk7IC8q IEV4aXQgd2l0aCBnb29kIHN0YXR1cyAqLworI2VuZGlmIC8qIE5FVENPTk4gKi8KKyAgICAgICAg ICAgIGlmIChleGl0b25jbG9zZSAmJiAhbmV0d29yayAmJgorICAgICAgICAgICAgICAgIChjYXJy aWVyICE9IENBUl9PRkYgJiYgKHR0Z21kbSgpICYgQk1fRENEKSA9PSAwKSkKKyAgICAgICAgICAg ICAgZG9leGl0KEdPT0RfRVhJVCx4aXRzdGEpOyAvKiBFeGl0IHdpdGggZ29vZCBzdGF0dXMgKi8K KyAgICAgICAgICAgIGlmIChleGl0b25jbG9zZSAmJiBuZXR3b3JrICYmIHR0Y2hrKCkgPCAwKQor ICAgICAgICAgICAgICBkb2V4aXQoR09PRF9FWElULHhpdHN0YSk7IC8qIEV4aXQgd2l0aCBnb29k IHN0YXR1cyAqLworICAgICAgICB9CisjZW5kaWYgLyogTk9JQ1AgKi8KKyNlbmRpZiAvKiBOT0xP Q0FMICovCisgICAgfQorI2VuZGlmIC8qIE5PQ01ETCAqLworCisjaWZkZWYgTk9JQ1AgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogTm8gaW50ZXJhY3RpdmUgY29tbWFuZCBwYXJzZXIgKi8K KyNpZm5kZWYgTk9DTURMCisgICAgZWxzZSB7CisKKyAgICAgICAgLyogQ29tbWFuZC1saW5lLW9u bHkgdmVyc2lvbiAqLworICAgICAgICBmYXRhbCgiP05vIGNvbW1hbmQtbGluZSBvcHRpb25zIGdp dmVuIC0gdHlwZSAna2VybWl0IC1oJyBmb3IgaGVscCIpOworICAgIH0KKyNlbHNlICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOZWl0aGVyIG9uZSEgKi8KKyAgICAgICAgc3N0 YXRlID0gJ3gnOworICAgICAgICBqdXN0b25lID0gMDsKKyAgICAgICAgcHJvdG8oKTsgICAgICAg ICAgICAgICAgICAgICAgICAvKiBTbyBnbyBpbnRvIHNlcnZlciBtb2RlICovCisgICAgICAgIGRv ZXhpdChHT09EX0VYSVQseGl0c3RhKTsgICAgICAgLyogZXhpdCB3aXRoIGdvb2Qgc3RhdHVzICov CisKKyNlbmRpZiAvKiBOT0NNREwgKi8KKyNlbHNlIC8qIG5vdCBOT0lDUCAqLworLyoKKyAgSWYg bm8gYWN0aW9uIHJlcXVlc3RlZCBvbiBjb21tYW5kIGxpbmUsIG9yIGlmIC1TICgic3RheSIpIHdh cyBpbmNsdWRlZCwKKyAgZW50ZXIgdGhlIGludGVyYWN0aXZlIGNvbW1hbmQgcGFyc2VyLgorKi8K KyAgICBpZiAoIWNsY21kcykKKyAgICAgIGhlcmFsZCgpOyAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBEaXNwbGF5IHByb2dyYW0gaGVyYWxkLiAqLworCisjaWZkZWYgTk9DQ1RSQVAKKyAgICBk ZWJ1ZyhGMTAwLCJtYWluIE5PQ0NUUkFQIHNldHRpbmcgaW50ZXJydXB0IHRyYXAiLCIiLDApOwor ICAgIHNldGludCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNldCB1cCBjb21tYW5k IGludGVycnVwdCB0cmFwcyAqLworICAgIGRvaWNwKE5VTEwpOworI2Vsc2UgLyogTk9DQ1RSQVAg Ki8KKyAgICB3aGlsZSAoMSkgeworICAgICAgICBkZWJ1ZyhGMTAwLCJtYWluIHNldHRpbmcgaW50 ZXJydXB0IHRyYXAiLCIiLDApOworICAgICAgICBzZXRpbnQoKTsgICAgICAgICAgICAgICAgICAg ICAgIC8qIFNldCB1cCBjb21tYW5kIGludGVycnVwdCB0cmFwcyAqLworICAgICAgICBpZiAoIWNj X2V4ZWN1dGUoY2tqYWRkcihjbWpidWYpLCBkb2ljcCwgZmFpbGljcCkpCisgICAgICAgICAgYnJl YWs7CisgICAgfQorI2VuZGlmIC8qIE5PQ0NUUkFQICovCisjZW5kaWYgLyogTk9JQ1AgKi8KKyNp Zm5kZWYgTUFJTklTVk9JRAorICAgIHJldHVybigxKTsKKyNlbmRpZiAvKiBNQUlOSVNWT0lEICov Cit9CisKKyNpZmRlZiBEWU5BTUlDCisvKiBBbGxvY2F0ZSBmaWxlIGkvbyBidWZmZXJzICovCisK K2NoYXIgKnppbmJ1ZmZlciA9IE5VTEwsICp6b3V0YnVmZmVyID0gTlVMTDsKKworaW50CitnZXRp b2JzKCkgeworICAgIHppbmJ1ZmZlciA9IChjaGFyICopbWFsbG9jKElOQlVGU0laRSk7CisgICAg aWYgKCF6aW5idWZmZXIpIHJldHVybigtMSk7CisgICAgem91dGJ1ZmZlciA9IChjaGFyICopbWFs bG9jKHpvYnVmc2l6ZSk7CisgICAgZGVidWcoRjEwMSwiem91dGJ1ZmZlciBtYWxsb2MiLCIiLHpv YnVmc2l6ZSk7CisgICAgaWYgKCF6b3V0YnVmZmVyKSByZXR1cm4oLTEpOworICAgIGRlYnVnKEYx MDAsImdldGlvYnMgb2siLCIiLDApOworICAgIHJldHVybigwKTsKK30KKyNlbmRpZiAvKiBEWU5B TUlDICovCgpkaWZmIC0tZ2l0IGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMw Mi9ja2NtZGIuYyBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2tjbWRi LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU1Y2ViYwotLS0gL2Rldi9u dWxsCisrKyBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2tjbWRiLmMK QEAgLTAsMCArMSwzODcgQEAKKy8qCisgIEMgSyBDIE0gRCBCIC4gQyAgLS0gIG1hbGxvYyBkZWJ1 Z2dlci4KKyovCisKKy8qCisgIEF1dGhvcjogSG93aWUgS2F5ZSwgQ29sdW1iaWEgVW5pdmVyc2l0 eSBDZW50ZXIgZm9yIENvbXB1dGluZyBBY3Rpdml0aWVzLgorCisgIENvcHlyaWdodCAoQykgMTk4 NSwgMTk5OSwKKyAgICBUcnVzdGVlcyBvZiBDb2x1bWJpYSBVbml2ZXJzaXR5IGluIHRoZSBDaXR5 IG9mIE5ldyBZb3JrLgorICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBTZWUgdGhlIEMtS2VybWl0 IENPUFlJTkcuVFhUIGZpbGUgb3IgdGhlCisgICAgY29weXJpZ2h0IHRleHQgaW4gdGhlIGNrY21h aS5jIG1vZHVsZSBmb3IgZGlzY2xhaW1lciBhbmQgcGVybWlzc2lvbnMuCisqLworLyogVXNlIHRo ZSByZWFsIG9uZXMgaW4gdGhpcyBtb2R1bGUhICovCisjaWZkZWYgbWFsbG9jCisjdW5kZWYgbWFs bG9jCisjZW5kaWYgLyogbWFsbG9jICovCisjaWZkZWYgY2FsbG9jCisjdW5kZWYgY2FsbG9jCisj ZW5kaWYgLyogY2FsbG9jICovCisjaWZkZWYgcmVhbGxvYworI3VuZGVmIHJlYWxsb2MKKyNlbmRp ZiAvKiByZWFsbG9jICovCisjaWZkZWYgZnJlZQorI3VuZGVmIGZyZWUKKyNlbmRpZiAvKiBmcmVl ICovCisKKyNpbmNsdWRlICJja2NzeW0uaCIKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUg ImNrY2RlYi5oIgorCisjaWZkZWYgQ09IRVJFTlQKK19QUk9UT1RZUCAoIEZJTEUgKiBmZG9wZW4s IChpbnQsIGNoYXIgKikgKTsKKyNlbmRpZiAvKiBDT0hFUkVOVCAqLworCisvKgorICBtZW1kZWJ1 ZzoKKyAgdmFyaWFibGUgdG8gY29udHJvbCBtZW1vcnkgZGVidWdnaW5nLgorICBpZiBtZW1kZWJ1 ZyA9PSAgMSwgdGhlbiBhY3Rpb24gaXMgYWx3YXlzIHRha2VuLgorICBpZiBtZW1kZWJ1ZyA9PSAg MCwgdGhlbiBubyBhY3Rpb24gaXMgdGFrZW4uCisgIGlmIG1lbWRlYnVnID09IC0xLCB0aGVuIHRo ZSB1c2VyIGlzIGFza2VkICh3b3JrcyB3ZWxsIHdpdGggZ2RiKS4KKyovCitpbnQgbWVtZGVidWcg PSAtMTsKK2ludCBkaXNhYmxlZCA9IDA7CitpbnQgaW5pdGVkID0gMDsKKy8qCisgIFRvIHVzZSB0 aGlzIHBhY2thZ2UsIGNvbXBpbGUgeW91ciBwcm9ncmFtIHdpdGg6CisgIC1EbWFsbG9jPWRtYWxs b2MgLURmcmVlPWRmcmVlID1EY2FsbG9jPWRjYWxsb2MgLi4uIC1ETURFQlVHCisgIGFuZCB0aGVu IGxpbmsgaXQgd2l0aCBja2NtZGIuYy4KKyovCisjaWZkZWYgTURFQlVHCisKKyNpZm5kZWYgTV9T SVpFX1QKKyNpZmRlZiBORVhUCisjZGVmaW5lIE1fU0laRV9UIHNpemVfdAorI2Vsc2UKKyNpZmRl ZiBTVU5PUzQxCisjZGVmaW5lIE1fU0laRV9UIHVuc2lnbmVkCisjZWxzZQorI2RlZmluZSBNX1NJ WkVfVCBpbnQKKyNlbmRpZiAvKiBTVU5PUzQxICovCisjZW5kaWYgLyogTkVYVCAqLworI2VuZGlm IC8qIE1fU0laRV9UICovCisKKyNpZmRlZiBDS19BTlNJQworX1BST1RPVFlQKCB2b2lkIGZyZWUs ICh2b2lkICopICk7CitfUFJPVE9UWVAoIHZvaWQgKiBtYWxsb2MsIChzaXplX3QpICk7CitfUFJP VE9UWVAoIHZvaWQgKiByZWFsbG9jLCAodm9pZCAqLCBzaXplX3QpICk7CisjZWxzZQorX1BST1RP VFlQKCBWT0lEIGZyZWUsIChjaGFyICopICk7CitfUFJPVE9UWVAoIGNoYXIgKiBtYWxsb2MsIChN X1NJWkVfVCkgKTsKK19QUk9UT1RZUCggY2hhciAqIHJlYWxsb2MsIChjaGFyICosIE1fU0laRV9U KSApOworI2VuZGlmIC8qIE5FWFQgKi8KKworX1BST1RPVFlQKCBWT0lEIG1faW5zZXJ0LCAoY2hh ciAqKSApOworX1BST1RPVFlQKCBpbnQgbV9kZWxldGUsIChjaGFyICopICk7CisKK19QUk9UT1RZ UCggY2hhciAqIGRtYWxsb2MsIChpbnQpICk7CitfUFJPVE9UWVAoIGNoYXIgKiBkY2FsbG9jLCAo aW50LCBpbnQpICk7CitfUFJPVE9UWVAoIGNoYXIgKiBkcmVhbGxvYywgKGNoYXIgKiwgaW50KSAp OworCitfUFJPVE9UWVAoIGNoYXIgKnNldF9yYW5nZV9jaGVjaywgKGNoYXIgKiwgaW50KSApOwor X1BST1RPVFlQKCBjaGFyICpjaGVja19yYW5nZSwgKGNoYXIgKikgKTsKK19QUk9UT1RZUCggc3Rh dGljIGNoYXIgKm1heWJlX2NoZWNrX3JhbmdlLCAoY2hhciAqKSApOworCitfUFJPVE9UWVAoIHN0 YXRpYyBWT0lEIG1heWJlX3F1aXQsIChjaGFyICopICk7CitfUFJPVE9UWVAoIHN0YXRpYyBpbnQg YXNrLCAoY2hhciAqKSApOworCisjaWZuZGVmIG1pbgorI2RlZmluZSBtaW4oeCx5KSAoKHgpIDwg KHkpID8gKHgpIDogKHkpKQorI2VuZGlmIC8qIG1pbiAqLworI2RlZmluZSBSQU5HRSAiQUJDREVG R0hJSktMTU5PUCIKKyNkZWZpbmUgSU5UU0laRSAgc2l6ZW9mKGludCkKKyNkZWZpbmUgTE9OR1NJ WkUgc2l6ZW9mKGxvbmcpCisjZGVmaW5lIFJTSVpFICAgIHNpemVvZihSQU5HRSkKKyNkZWZpbmUg UkZST05UICAgbWluKChSU0laRS8yKSxMT05HU0laRSkKKyNkZWZpbmUgUkJBQ0sgICAgbWluKChS U0laRS1SRlJPTlQpLExPTkdTSVpFKQorCitjaGFyICoKK2RtYWxsb2Moc2l6ZSkgaW50IHNpemU7 IHsKKyAgICBjaGFyICpjcDsKKworICAgIGNwID0gbWFsbG9jKHNpemUgKyBSU0laRSArIElOVFNJ WkUpOworICAgIGlmIChjcCkgeworICAgICAgICBjcCA9IHNldF9yYW5nZV9jaGVjayhjcCwgc2l6 ZSk7CisgICAgICAgIG1faW5zZXJ0KGNwKTsKKyAgICB9CisgICAgcmV0dXJuKGNwKTsKK30KKwor Y2hhciAqCitkY2FsbG9jKG5lbGVtLCBlbHNpemUpIGludCBuZWxlbSwgZWxzaXplOyB7CisgICAg Y2hhciAqY3A7CisKKyAgICBjcCA9IGRtYWxsb2MobmVsZW0gKiBlbHNpemUpOworICAgIGlmIChj cCkKKyAgICAgICAgbWVtc2V0KGNwLCAwLCBuZWxlbSAqIGVsc2l6ZSk7CisgICAgcmV0dXJuKGNw KTsKK30KKworY2hhciAqCitkcmVhbGxvYyhicCxzaXplKSBjaGFyICpicDsgaW50IHNpemU7IHsK KyAgICBjaGFyICpjcDsKKworICAgIGlmIChicCA9PSBOVUxMKSB7CisgICAgICAgIG1heWJlX3F1 aXQoIkZyZWVpbmcgTlVMTCBwb2ludGVyIik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9kZWxl dGUoYnApOworICAgICAgICBjcCA9IGNoZWNrX3JhbmdlKGJwKTsKKyAgICB9CisgICAgY3AgPSBy ZWFsbG9jKGNwLCBzaXplICsgUlNJWkUgKyBJTlRTSVpFKTsKKyAgICBpZiAoY3ApIHsKKyAgICAg ICAgY3AgPSBzZXRfcmFuZ2VfY2hlY2soY3AsIHNpemUpOworICAgICAgICBtX2luc2VydChjcCk7 CisgICAgfQorICAgIHJldHVybihjcCk7Cit9CisKK1ZPSUQKK2RmcmVlKGNwKSBjaGFyICpjcDsg eworICAgIGlmIChjcCA9PSBOVUxMKQorICAgICAgICBtYXliZV9xdWl0KCJGcmVlaW5nIE5VTEwg cG9pbnRlciIpOworICAgIGVsc2UgeworICAgICAgICBzd2l0Y2gobV9kZWxldGUoY3ApKSB7Cisg ICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgIGNwID0gbWF5YmVfY2hlY2tfcmFuZ2UoY3ApOwor ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIGNwID0gY2hl Y2tfcmFuZ2UoY3ApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMjoKKyAgICAg ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorI2lmbmRlZiBDS19BTlNJQworICAgIHJl dHVybihmcmVlKGNwKSk7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK30KKworY2hhciAqCitzZXRf cmFuZ2VfY2hlY2soY3Asc2l6ZSkgY2hhciAqY3A7IGludCBzaXplOyB7CisgICAgcmVnaXN0ZXIg aW50IGk7CisgICAgaW50IHRtcCA9IHNpemU7CisKKyAgICBmb3IoaSA9IDA7IGkgPCBJTlRTSVpF OyBpKyspIHsgICAgICAvKiBzZXQgdGhlIHNpemUgaW4gdGhlIHN0cmluZyAqLworICAgICAgICBj cFtpXSA9IHRtcCAmIDB4ZmY7CisgICAgICAgIHRtcCA+Pj0gODsKKyAgICB9CisgICAgY3AgKz0g SU5UU0laRTsgICAgICAgICAgICAgICAgICAgICAgLyogc2tpcCB0aGUgc2l6ZSAqLworCisgICAg Zm9yKGkgPSAwOyBpIDwgUkZST05UOyBpKyspICAgICAgICAgLyogc2V0IHRoZSBmcm9udCBvZiB0 aGUgcmFuZ2UgY2hlY2sgKi8KKyAgICAgICAgY3BbaV0gPSBSQU5HRVtpXTsgICAgICAgICAgICAg ICAvKiBzdHJpbmcgKi8KKworICAgIGNwICs9IFJGUk9OVDsgICAgICAgICAgICAgICAgICAgICAg IC8qIHNraXAgdGhlIGZyb250IHJhbmdlIGNoZWNrICovCisKKyAgICBmb3IoaSA9IDA7IGkgPCBS QkFDSzsgaSsrKSAgICAgICAgICAvKiBzZXQgdGhlIGJhY2sgb2RmIHRoZSByYW5nZSBjaGVjayAq LworICAgICAgICBjcFtpK3NpemVdID0gUkFOR0VbaStSRlJPTlRdOworCisgICAgcmV0dXJuKGNw KTsKK30KKworLyoKKyAgUHV0IGNhbGxzIHRvIHRoaXMgcm91dGluZSBpbiB5b3VyIGNvZGUgYW55 IHBsYWNlIHdoZXJlIHlvdSB3YW50IHRvCisgIGNoZWNrIHdoZXRoZXIgeW91J3ZlIGNvcGllZCB0 b28gbWFueSBjaGFyYWN0ZXJzIGludG8gYSBtYWxsb2MnZCBzcGFjZS4KKyovCitjaGFyICoKK2No ZWNrX3JhbmdlKGNwKSBjaGFyICpjcDsgeworICAgIHJlZ2lzdGVyIGNoYXIgKmJwID0gY3AgLSBS RlJPTlQgLSBJTlRTSVpFOworICAgIGNoYXIgKnhwID0gYnA7CisgICAgcmVnaXN0ZXIgaW50IGk7 CisgICAgaW50IHNpemUgPSAwOworCisgICAgZm9yKGkgPSAwIDsgaSA8IElOVFNJWkU7IGkrKykg eyAgICAgLyogZ2V0IHRoZSBzaXplIG91dCBvZiB0aGUgc3RyaW5nICovCisgICAgICAgIHNpemUg PDw9IDg7CisgICAgICAgIHNpemUgfD0gYnBbSU5UU0laRS1pLTFdICYgMHhmZjsKKyAgICB9Cisg ICAgYnAgKz0gSU5UU0laRTsKKworICAgIGZvcihpID0gMDsgaSA8IFJGUk9OVDsgaSsrKSAgICAg ICAgIC8qIGNoZWNrIGZyb250IHJhbmdlIGNoZWNrICovCisgICAgICAgIGlmIChicFtpXSAhPSBS QU5HRVtpXSkgeworICAgICAgICAgICAgbWF5YmVfcXVpdCgibGVmdHNpZGUgbWFsbG9jIGJ1ZmZl ciBvdmVycnVuIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIGJwICs9IFJG Uk9OVDsgICAgICAgICAgICAgICAgICAgICAgIC8qIHNraXAgZnJvbnQgcmFuZ2UgY2hlY2sgKi8K KworICAgIGZvcihpID0gMDsgaSA8IFJCQUNLOyBpKyspICAgICAgICAgIC8qIGNoZWNrIGJhY2sg cmFuZ2UgY2hlY2sgKi8KKyAgICAgICAgaWYgKGJwW2krc2l6ZV0gIT0gUkFOR0VbaStSRlJPTlRd KSB7CisgICAgICAgICAgICBtYXliZV9xdWl0KCJyaWdodHNpZGUgbWFsbG9jIGJ1ZmZlciBvdmVy cnVuIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIHJldHVybih4cCk7Cit9 CisKK3N0YXRpYyBjaGFyICoKK21heWJlX2NoZWNrX3JhbmdlKGNwKSBjaGFyICpjcDsgeworICAg IHJlZ2lzdGVyIGNoYXIgKmJwID0gY3AgLSBSRlJPTlQgLSBJTlRTSVpFOworICAgIGNoYXIgKnhw ID0gYnA7CisgICAgcmVnaXN0ZXIgaW50IGk7CisgICAgaW50IHNpemUgPSAwOworCisgICAgZm9y KGkgPSAwIDsgaSA8IElOVFNJWkU7IGkrKykgeyAgICAgLyogZ2V0IHRoZSBzaXplIG91dCBvZiB0 aGUgc3RyaW5nICovCisgICAgICAgIHNpemUgPDw9IDg7CisgICAgICAgIHNpemUgfD0gYnBbSU5U U0laRS1pLTFdICYgMHhmZjsKKyAgICB9CisgICAgYnAgKz0gSU5UU0laRTsKKworICAgIGZvcihp ID0gMDsgaSA8IFJGUk9OVDsgaSsrKSAgICAgICAgIC8qIGNoZWNrIGZyb250IHJhbmdlIGNoZWNr ICovCisgICAgICAgIGlmIChicFtpXSAhPSBSQU5HRVtpXSkgeworICAgICAgICAgICAgcmV0dXJu KGNwKTsKKyAgICAgICAgfQorICAgIGJwICs9IFJGUk9OVDsgICAgICAgICAgICAgICAgICAgICAg IC8qIHNraXAgZnJvbnQgcmFuZ2UgY2hlY2sgKi8KKworICAgIGZvcihpID0gMDsgaSA8IFJCQUNL OyBpKyspICAgICAgICAgIC8qIGNoZWNrIGJhY2sgcmFuZ2UgY2hlY2sgKi8KKyAgICAgICAgaWYg KGJwW2krc2l6ZV0gIT0gUkFOR0VbaStSRlJPTlRdKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0 ZGVyciwicmlnaHRzaWRlIG1hbGxvYyBidWZmZXIgb3ZlcnJ1blxuIik7CisgICAgICAgICAgICBh Ym9ydCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICByZXR1cm4oeHApOwor fQorCisjZGVmaW5lIEJVQ0tFVFMgMTAwMDAKK2NoYXIgKm1fdXNlZFtCVUNLRVRTXTsKK2NoYXIg Km1fdXNlZDJbQlVDS0VUU107CisKK1ZPSUQKK21faW5zZXJ0KGNwKSByZWdpc3RlciBjaGFyICpj cDsgeworICAgIHJlZ2lzdGVyIGludCBpOworCisgICAgaWYgKGRpc2FibGVkKQorICAgICAgICBy ZXR1cm47CisKKyAgICBmb3IoaSA9IDA7IGkgPCBCVUNLRVRTOyBpKyspCisgICAgICAgIGlmICht X3VzZWRbaV0gPT0gMCkgeworICAgICAgICAgICAgbV91c2VkW2ldID0gY3A7CisgICAgICAgICAg ICByZXR1cm47CisgICAgICAgIH0KKyAgICBkaXNhYmxlZCArKzsKK30KKworc3RhdGljIFZPSUQK K21faW5zZXJ0MihjcCkgcmVnaXN0ZXIgY2hhciAqY3A7IHsKKyAgICByZWdpc3RlciBpbnQgaTsK KworICAgIGlmIChkaXNhYmxlZCkKKyAgICAgICAgcmV0dXJuOworICAgIGZvcihpID0gMDsgaSA8 IEJVQ0tFVFM7IGkrKykKKyAgICAgICAgaWYgKG1fdXNlZDJbaV0gPT0gMCkgeworICAgICAgICAg ICAgbV91c2VkMltpXSA9IGNwOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg ZGlzYWJsZWQgKys7Cit9CisKK2ludAorbV9kZWxldGUoY3ApIHJlZ2lzdGVyIGNoYXIgKmNwOyB7 CisgICAgcmVnaXN0ZXIgaW50IGk7CisKKyAgICBmb3IoaSA9IDA7IGkgPCBCVUNLRVRTOyBpKysp CisgICAgICAgIGlmIChtX3VzZWRbaV0gPT0gY3ApIHsKKyAgICAgICAgICAgIG1fdXNlZFtpXSA9 IDA7CisgICAgICAgICAgICByZXR1cm4oMSk7CisgICAgICAgIH0KKyAgICBmb3IoaSA9IDA7IGkg PCBCVUNLRVRTOyBpKyspCisgICAgICAgIGlmIChtX3VzZWQyW2ldID09IGNwKSB7CisgICAgICAg ICAgICBtX3VzZWQyW2ldID0gMDsKKyAgICAgICAgICAgIHJldHVybigyKTsKKyAgICAgICAgfQor ICAgIGlmIChkaXNhYmxlZCkKKyAgICAgICAgcmV0dXJuKDApOworCisgICAgbWF5YmVfcXVpdCgi RnJlZWluZyB1bm1hbGxvYydlZCBwb2ludGVyIik7CisgICAgcmV0dXJuKDApOworfQorCitWT0lE CittX2luaXQoKSB7CisgICAgcmVnaXN0ZXIgaW50IGk7CisKKyAgICBpbml0ZWQgPSAxOworICAg IGRpc2FibGVkID0gMDsKKyNpZmRlZiBORVhUCisgICAgbWFsbG9jX2RlYnVnKDIrNCs4KzE2KTsK KyNlbmRpZiAvKiBORVhUICovCisKKyAgICBmb3IoaSA9IDA7IGkgPCBCVUNLRVRTOyBpKyspCisg ICAgICBtX3VzZWRbaV0gPSAwOworfQorCitWT0lECittX2RvbmUoKSB7CisgICAgcmVnaXN0ZXIg aW50IGksaj0wOworCisgICAgaWYgKGRpc2FibGVkKQorICAgICAgICByZXR1cm47CisgICAgZm9y KGkgPSAwOyBpIDwgQlVDS0VUUzsgaSsrKQorICAgICAgICBpZiAobV91c2VkW2ldICE9IDApIHsK KyAgICAgICAgICAgIGlmIChtZW1kZWJ1ZykgeworICAgICAgICAgICAgICAgIGlmIChqID09IDAp CisgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCJ1bmZyZWUnZWQgYnVmZmVycywg aW5kaWNlczogIik7CisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsIiVkLCAiLCBpKTsK KyAgICAgICAgICAgICAgICBqKys7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICBpZiAo aikKKyAgICAgICAgZnByaW50ZihzdGRlcnIsIlxuIik7CisgICAgZm9yKGkgPSAwOyBpIDwgQlVD S0VUUzsgaSsrKQorICAgICAgICBpZiAobV91c2VkMltpXSAhPSAwKSB7CisgICAgICAgICAgICBp ZiAobWVtZGVidWcpIHsKKyAgICAgICAgICAgICAgICBpZiAoaiA9PSAwKQorICAgICAgICAgICAg ICAgICAgICBmcHJpbnRmKHN0ZGVyciwidW5mcmVlJ2VkIHJlZ2lzdGVyZWQgYnVmZmVycywgaW5k aWNlczogIik7CisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsIiVkLCAiLCBpKTsKKyAg ICAgICAgICAgICAgICBqKys7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICBpZiAoaikK KyAgICAgICAgZnByaW50ZihzdGRlcnIsIlxuIik7CisgICAgaWYgKGopCisgICAgICAgIG1heWJl X3F1aXQoIlVuZnJlZSdlZCBtYWxsb2MgYnVmZmVycyIpOworfQorCitWT0lECittX2NoZWNrcmFu Z2VzKCkgeworICAgIGludCBpOworCisgICAgZm9yICggaSA9IDA7IGkgPCBCVUNLRVRTOyBpKysp CisgICAgICAgIGlmIChtX3VzZWRbaV0pCisgICAgICAgICAgICBjaGVja19yYW5nZShtX3VzZWRb aV0pOworfQorCitzdGF0aWMgVk9JRAorbWF5YmVfcXVpdChzdHIpIGNoYXIgKnN0cjsgeworICAg IGRlYnVnKEYxMDAsIm1kZWJ1ZyBtYXliZV9xdWl0IiwiIiwwKTsKKyAgICBpZiAobWVtZGVidWcg PT0gMCkKKyAgICAgICAgcmV0dXJuOworICAgIGZwcmludGYoc3RkZXJyLCIlc1xuIixzdHIpOwor ICAgIGlmIChtZW1kZWJ1ZyA9PSAxKQorICAgICAgICBhYm9ydCgpOworICAgIGlmIChtZW1kZWJ1 ZyA9PSAtMSkKKyAgICAgICAgaWYgKGFzaygiUXVpdD8gIikpCisgICAgICAgICAgICBhYm9ydCgp OworfQorCitzdGF0aWMgaW50Cithc2soc3RyKSBjaGFyICpzdHI7IHsKKyAgICBjaGFyIGJ1Zlsx MDBdOworICAgIEZJTEUgKmluOworICAgIGludCBmZDsKKworICAgIGZkID0gZHVwKGZpbGVubyhz dGRpbikpOworICAgIGluID0gZmRvcGVuKGZkLCAiciIpOworICAgIHdoaWxlKDEpIHsKKyAgICAg ICAgZnByaW50ZihzdGRlcnIsc3RyKTsKKyAgICAgICAgZmZsdXNoKHN0ZGVycik7CisgICAgICAg IGlmIChmZ2V0cyhidWYsIDk5LCBpbikgPT0gTlVMTCkgLyogRU9GPyAqLworICAgICAgICAgICAg cmV0dXJuKDApOworICAgICAgICBpZiAoYnVmWzBdID09ICduJyB8fCBidWZbMF0gPT0gJ04nKSB7 CisgICAgICAgICAgICBmY2xvc2UoaW4pOworICAgICAgICAgICAgcmV0dXJuKDApOworICAgICAg ICB9CisgICAgICAgIGlmIChidWZbMF0gPT0gJ3knIHx8IGJ1ZlswXSA9PSAnWScpIHsKKyAgICAg ICAgICAgIGZjbG9zZShpbik7CisgICAgICAgICAgICByZXR1cm4oMSk7CisgICAgICAgIH0KKyAg ICAgICAgZnByaW50ZihzdGRlcnIsInBsZWFzZSBhbnN3ZXIgeS9uLlxuIik7CisgICAgfQorfQor I2VuZGlmIC8qIE1ERUJVRyAqLwoKZGlmZiAtLWdpdCBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9j a2VybWl0LTkuMC4zMDIvY2tjbmV0LmMgYi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05 LjAuMzAyL2NrY25ldC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiYjAx YTYKLS0tIC9kZXYvbnVsbAorKysgYi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAu MzAyL2NrY25ldC5jCkBAIC0wLDAgKzEsMTQ0NDcgQEAKK2NoYXIgKmNrbmV0diA9ICJOZXR3b3Jr IHN1cHBvcnQsIDkuMC4yOTcsIDE0IEp1bCAyMDExIjsKKworLyogIEMgSyBDIE4gRSBUICAtLSAg TmV0d29yayBzdXBwb3J0ICAqLworCisvKgorICBDb3B5cmlnaHQgKEMpIDE5ODUsIDIwMTEsCisg ICAgVHJ1c3RlZXMgb2YgQ29sdW1iaWEgVW5pdmVyc2l0eSBpbiB0aGUgQ2l0eSBvZiBOZXcgWW9y ay4KKyAgICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgU2VlIHRoZSBDLUtlcm1pdCBDT1BZSU5HLlRY VCBmaWxlIG9yIHRoZQorICAgIGNvcHlyaWdodCB0ZXh0IGluIHRoZSBja2NtYWkuYyBtb2R1bGUg Zm9yIGRpc2NsYWltZXIgYW5kIHBlcm1pc3Npb25zLgorKi8KKworLyoKKyAgUkVNSU5ERVI6IEFu eSBjaGFuZ2VzIG1hZGUgdG8gdGhpcyBmaWxlIHRoYXQgb3RoZXIgbW9kdWxlcyBkZXBlbmQgbXVz dAorICBhbHNvIGJlIG1hZGUgdG8gY2tsbmV0LmMgKGZvciBWT1MpIHVudGlsIHN1Y2ggdGltZSBh cyBja2xuZXQuYyBhbmQgdGhpcworICBtb2R1bGUgYXJlIG1lcmdlZCBiYWNrIHRvZ2V0aGVyLgor CisgIE5PVEUgVE8gQ09OVFJJQlVUT1JTOiBUaGlzIGZpbGUsIGFuZCBhbGwgdGhlIG90aGVyIHNo YXJlZCAoY2tjIGFuZCBja3UpCisgIEMtS2VybWl0IHNvdXJjZSBmaWxlcywgbXVzdCBiZSBjb21w YXRpYmxlIHdpdGggQyBwcmVwcm9jZXNzb3JzIHRoYXQgc3VwcG9ydAorICBvbmx5ICNpZmRlZiwg I2Vsc2UsICNlbmRpZiwgI2RlZmluZSwgYW5kICN1bmRlZi4gIFBsZWFzZSBkbyBub3QgdXNlICNp ZiwKKyAgbG9naWNhbCBvcGVyYXRvcnMsIG9yIG90aGVyIHByZXByb2Nlc3NvciBmZWF0dXJlcyBp biB0aGlzIG1vZHVsZS4gIEFsc28sCisgIGRvbid0IHVzZSBhbnkgQU5TSSBDIGNvbnN0cnVjdHMg ZXhjZXB0IHdpdGhpbiAjaWZkZWYgQ0tfQU5TSUMuLiNlbmRpZi4KKworICBBdXRob3JzOgorCisg IEZyYW5rIGRhIENydXogKGZkY0Bjb2x1bWJpYS5lZHUpLAorICAgIENvbHVtYmlhIFVuaXZlcnNp dHkgQWNhZGVtaWMgSW5mb3JtYXRpb24gU3lzdGVtcywgTmV3IFlvcmsgQ2l0eS4KKyAgSmVmZnJl eSBFIEFsdG1hbiAoamFsdG1hbkBzZWN1cmUtZW5kcG9pbnRzLmNvbSkgLS0gUHJpbWFyeSAKKyAg ICBtYWludGFpbmVyL2RldmVsb3BlciBzaW5jZSBhYm91dCAxOTk2LgorICBuZXRvcGVuKCkgcm91 dGluZSBmb3IgVENQL0lQIG9yaWdpbmFsbHkgYnkgS2VuIFlhcCwgUm9jaGVzdGVyIFVuaXZlcnNp dHkKKyAgICAoa2VuQGNzLnJvY2hlc3Rlci5lZHUpIChubyBsb25nZXIgYXQgdGhhdCBhZGRyZXNz KS4KKyAgTWlzc2luZyBwaWVjZXMgZm9yIEV4Y2VsYW4gc29ja2V0cyBsaWJyYXJ5IGZyb20gV2ls bGlhbSBCYWRlci4KKyAgVGVsbmV0IHByb3RvY29sIGJ5IEZyYW5rIGRhIENydXogYW5kIEplZmZy ZXkgQWx0bWFuLgorICBSbG9naW4gcHJvdG9jb2wgYnkgSmVmZnJleSBFIEFsdG1hbi4KKyAgU1NM IHN1cHBvcnQgYWRhcHRlZCBieSBKZWZmcmV5IEUgQWx0bWFuIGZyb20gd29yayBkb25lIGJ5Cisg ICAgVGltIEh1ZHNvbiA8dGpoQGNyeXB0b3NvZnQuY29tPiArNjEgNyAzMjc4MTU4MQorICBUTFMg c3VwcG9ydCBieSBKZWZmcmV5IEUgQWx0bWFuLgorICBIVFRQIHN1cHBvcnQgYnkgSmVmZnJleSBF IEFsdG1hbi4KKyAgVEdWIE11bHRpTmV0IGNvZGUgYnkgRnJhbmsgZGEgQ3J1ei4KKyAgTXVsdGlO ZXQgY29kZSBhZGFwdGVkIHRvIFdJTi9UQ1AgYnkgUmF5IEh1bnRlciBvZiBUV0cuCisgIE11bHRp TmV0IGNvZGUgYWRhcHRlZCB0byBERUMgVENQL0lQIGJ5IExlZSBUaWJiZXJ0IG9mIERFQyBhbmQg RnJhbmsgZGEgQ3J1ei4KKyAgVENQL0lQIHN1cHBvcnQgYWRhcHRlZCB0byBJQk0gVENQL0lQIDEu Mi4xLDIuMCBmb3IgT1MvMiBieSBLYWkgVXdlIFJvbW1lbC4KKyAgQ01VLU9wZW5WTVMvSVAgbW9k aWZpY2F0aW9ucyBieSBNaWtlIE8nTWFsbGV5LCBEaWdpdGFsIChERUMpLgorICBYLjI1IHN1cHBv cnQgYnkgTWFyY2VsbG8gRnJ1dGlnLCBDYXRob2xpYyBVbml2ZXJzaXR5LAorICAgIFJpbyBkZSBK YW5laXJvLCBCcmF6aWwgKGZydXRpZ0BybnAuaW1wYS5icikgd2l0aCBmaXhlcyBmcm9tCisgICAg U3RlZmFhbiBFZWNrZWxzLCBFdXJva29tLCBMdXhlbWJvdXJnLgorICAgIERhdmlkIExhbmUgYWRk ZWQgc3VwcG9ydCBmb3IgU3RyYXR1cyBWT1MgWC4yNSAxOTk2LgorICAgIFN0ZXBoZW4gUmllaG0g YWRkZWQgc3VwcG9ydCBmb3IgSUJNIEFJWCBYLjI1IGluIEFwcmlsIDE5OTguCisgIE90aGVyIGNv bnRyaWJ1dGlvbnMgYXMgaW5kaWNhdGVkIGluIHRoZSBjb2RlLgorKi8KKyNkZWZpbmUgQ0tDTkVU X0MKKyNpbmNsdWRlICJja2NzeW0uaCIKKyNpbmNsdWRlICJja2NkZWIuaCIKKyNpbmNsdWRlICJj a2NrZXIuaCIKKyNpbmNsdWRlICJja2Nhc2MuaCIKKyNpZmRlZiBJMzg2SVggICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBIYXMgdG8gY29tZSBiZWZvcmUgY2tjbmV0LmggaW4gKi8KKyNpbmNs dWRlIDxlcnJuby5oPiAgICAgICAgICAgICAgICAgICAgICAvKiB0aGlzIHZlcnNpb24sIGJ1dCBh ZnRlciBpbiBvdGhlcnMgKi8KKyNlbmRpZiAvKiBJMzg2SVggKi8KKyNpbmNsdWRlICJja2NuZXQu aCIgICAgICAgICAgICAgICAgICAgICAvKiB3aGljaCBpbmNsdWRlcyBja2N0ZWwuaCAqLworI2lm ZGVmIENLX1NTTAorI2luY2x1ZGUgImNrX3NzbC5oIgorI2VuZGlmIC8qIENLX1NTTCAqLworCisj aWZkZWYgQ0tfRE5TX1NSVgorI2lmZGVmIE9TMgorI2lmZGVmIE5UCisjaW5jbHVkZSA8d3NoZWxw ZXIuaD4KKyNlbHNlIC8qIE5UICovCisvKiAhRXJyb3IgT1MvMiBkb2VzIG5vdCBzdXBwb3J0IERO UyBTZXJ2aWNlIFJlY29yZHMuICovCisjZW5kaWYgLyogTlQgKi8KKyNlbHNlIC8qIE9TMiAqLwor I2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2lmZGVmIFVTRV9OQU1FU0VSX0NPTVBBVAorI2luY2x1 ZGUgPGFycGEvbmFtZXNlcl9jb21wYXQuaD4KKyNlbmRpZgkvKiBVU0VfTkFNRVNFUl9DT01QQVQg Ki8KKworI2lmZGVmIE1JTklYMworI2luY2x1ZGUgPG5ldC9nZW4vcmVzb2x2Lmg+CisjaW5jbHVk ZSA8bmV0L2dlbi9uYW1lc2VyLmg+CisjZWxzZQorI2luY2x1ZGUgPGFycGEvbmFtZXNlci5oPgor I2luY2x1ZGUgPHJlc29sdi5oPgorI2VuZGlmIC8qIE1JTklYIDMgKi8KKworI2lmbmRlZiBQUzJB SVgxMAorI2lmbmRlZiBCU0Q0CisjaWZuZGVmIEkzODZJWAorI2lmbmRlZiBSVEFJWAorI2luY2x1 ZGUgPG5ldGRiLmg+CisjZW5kaWYgLyogUlRBSVggKi8KKyNlbmRpZiAvKiBJMzg2SVggKi8KKyNl bmRpZiAvKiBCU0Q0ICovCisjZW5kaWYgLyogUFMyQUlYMTAgKi8KKyNlbmRpZiAvKiBPUzIgKi8K KyNpZm5kZWYgVF9TUlYKKyNkZWZpbmUgVF9TUlYgMzMKKyNlbmRpZiAvKiBUX1NSViAqLworI2lm bmRlZiBUX1RYVAorI2RlZmluZSBUX1RYVCAxNgorI2VuZGlmIC8qIFRfVFhUICovCisKKy8qIGZv ciBvbGQgVW5peGVzIGFuZCBmcmllbmRzIC4uLiAqLworI2lmbmRlZiBNQVhIT1NUTkFNRUxFTgor I2RlZmluZSBNQVhIT1NUTkFNRUxFTiA2NAorI2VuZGlmIC8qIE1BWEhPU1ROQU1FTEVOICovCisK KyNkZWZpbmUgTUFYX0ROU19OQU1FTEVOICgxNSooTUFYSE9TVE5BTUVMRU4gKyAxKSsxKQorI2Vu ZGlmIC8qIENLX0ROU19TUlYgKi8KKworI2lmZGVmIE5PTkVUCisjaWZkZWYgVENQSVBMSUIKKyN1 bmRlZiBUQ1BJUExJQgorI2VuZGlmIC8qIFRDUElQTElCICovCisjZW5kaWYgLyogTk9ORVQgKi8K KworI2lmbmRlZiBOT01ISE9TVAorI2lmZGVmIGRhdGFnZW5lcmFsCisjZGVmaW5lIE5PTUhIT1NU CisjZWxzZQorI2lmZGVmIEhQVVg1V0lOVENQCisjZGVmaW5lIE5PTUhIT1NUCisjZW5kaWYgLyog SFBVWDVXSU5UQ1AgKi8KKyNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLworI2VuZGlmIC8qIE5PTUhI T1NUICovCisKKyNpZmRlZiBJTkFERFJYCisgIHN0cnVjdCBpbl9hZGRyIGluYWRkcng7CisjZW5k aWYgLyogSU5BRERSWCAqLworCitpbnQgdHRuZXQgPSBORVRfTk9ORTsgICAgICAgICAgICAgICAg ICAgLyogTmV0d29yayB0eXBlICovCitpbnQgdHRucHJvdG8gPSBOUF9ERUZBVUxUOyAgICAgICAg ICAgICAgLyogTmV0d29yayB2aXJ0dWFsIHRlcm1pbmFsIHByb3RvY29sICovCisKKy8qIDAgPSBk b24ndCBsb3dlcmNhc2UgdXNlcm5hbWUgZm9yIFJsb2dpbi9UZWxuZXQgcHJvdG9jb2wgKi8KKy8q IG5vbnplcm8gPSBkbyBsb3dlcmNhc2UgaXQuICBBZGQgYSBTRVQgY29tbWFuZCBpZiBuZWNlc3Nh cnkuLi4gKi8KKyNpZmRlZiBWTVMKK2ludCBja19sY25hbWUgPSAxOworI2Vsc2UKK2ludCBja19s Y25hbWUgPSAwOworI2VuZGlmIC8qIFZNUyAqLworCitleHRlcm4gaW50ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogRXh0ZXJuYWwgdmFyaWFibGVzICovCisgIGR1cGxleCwgZGVic2Vz LCBzZXNsb2csIHNlc3NmdCwgd2FzY2xvc2VkLAorICB0dHlmZCwgcXVpZXQsIG1zZ2ZsZywgd2hh dCwgbmV0dHlwZSwgdHRtZG07CisjaWZkZWYgSUtTRAorZXh0ZXJuIGludCBpbnNlcnZlcjsKKyNl bmRpZiAvKiBJS1NEICovCisKK2NoYXIgbXlpcGFkZHJbMjBdID0geyAnXDAnIH07ICAgICAgICAg ICAvKiBHbG9iYWwgY29weSBvZiBteSBJUCBhZGRyZXNzICovCitjaGFyIGhvc3RpcGFkZHJbNjRd ID0geyAnXDAnIH07CQkvKiBHbG9iYWwgY29weSBvZiByZW1vdGUgSVAgYWRkcmVzcyAqLworCisj aWZkZWYgTkVUQ09OTgorLyogRG9uJ3QgbmVlZCBhbnkgb2YgdGhpcyBpZiB0aGVyZSBpcyBubyBu ZXR3b3JrIHN1cHBvcnQuICovCisKKyNpZm5kZWYgT1MyCisvKiBDdXJyZW50IGZkLXN3YXBwaW5n IGhhY2sgaXMgbm90IHRocmVhZC1zYWZlICovCisjZGVmaW5lIEhUVFBfQlVGRkVSSU5HCisjZW5k aWYJLyogT1MyICovCisKKyNpZmRlZiBIVFRQX0JVRkZFUklORworI2RlZmluZSBIVFRQX0lOQlVG TEVOIDgxOTIKK3N0YXRpYyBjaGFyIGh0dHBfaW5idWZbSFRUUF9JTkJVRkxFTl07CitzdGF0aWMg aW50IGh0dHBfYnVmcCA9IDAsIGh0dHBfY291bnQ7CisjZW5kaWYJLyogSFRUUF9CVUZGRVJJTkcg Ki8KKworLyoKKyAgTkVUTEVCVUYgaXMgKG11c3QgYmUpIGRlZmluZWQgZm9yIHRob3NlIHBsYXRm b3JtcyB0aGF0IGNhbGwgdGhpcworICBtb2R1bGUgdG8gZG8gbmV0d29yayBpL28gKGUuZy4gbmV0 aW5jKCksIG5ldHRjaGsoKSwgZXRjKSByYXRoZXIKKyAgdGhhbiBkb2luZyBpdCB0aGVtc2VsdmVz ICh0dGluYygpLCB0dGNoaygpLCBldGMpLiAgSW4gdGhpcyBjYXNlCisgIHRoZSBUZWxuZXQgbG9j YWwtZWNobyBidWZmZXJzIGFuZCByb3V0aW5lcyBhcmUgZGVmaW5lZCBhbmQgcmVmZXJlbmNlZAor ICBoZXJlLCByYXRoZXIgdGhhbiBpbiB0aGUgY2s/dGlvLmMgbW9kdWxlLgorKi8KKyNpZmRlZiBO RVRMRUJVRgorI2RlZmluZSBMRUJVRlNJWiA0MDk2CitpbnQgdHRwdXNoID0gLTEsIGxlX2RhdGEg PSAwOyAgICAgICAgICAgLyogVGhlc2UgYXJlIHNlZW4gZnJvbSBvdXRzaWRlICovCitzdGF0aWMg Q0hBUiBsZV9idWZbTEVCVUZTSVpdOyAgICAgICAgICAgLyogVGhlc2UgYXJlIHVzZWQgaW50ZXJu YWxseSAqLworc3RhdGljIGludCBsZV9zdGFydCA9IDAsIGxlX2VuZCA9IDA7CitpbnQgdHRfcHVz aF9pbml0ZWQgPSAwOworI2VuZGlmIC8qIE5FVExFQlVGICovCisKKyNpZmRlZiBDS19TT0NLUyAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBTT0NLUyBJbnRlcm5ldCByZWxheSBwYWNrYWdlICov CisjaWZkZWYgQ0tfU09DS1M1ICAgICAgICAgICAgICAgICAgICAgICAgLyogU09DS1MgNSAqLwor I2RlZmluZSBhY2NlcHQgIFNPQ0tTYWNjZXB0CisjZGVmaW5lIGJpbmQgICAgU09DS1NiaW5kCisj ZGVmaW5lIGNvbm5lY3QgU09DS1Njb25uZWN0CisjZGVmaW5lIGdldHNvY2tuYW1lIFNPQ0tTZ2V0 c29ja25hbWUKKyNkZWZpbmUgbGlzdGVuIFNPQ0tTbGlzdGVuCisjZWxzZSAgLyogTm90IFNPQ0tT IDUgKi8KKyNkZWZpbmUgYWNjZXB0ICBSYWNjZXB0CisjZGVmaW5lIGJpbmQgICAgUmJpbmQKKyNk ZWZpbmUgY29ubmVjdCBSY29ubmVjdAorI2RlZmluZSBnZXRzb2NrbmFtZSBSZ2V0c29ja25hbWUK KyNkZWZpbmUgbGlzdGVuIFJsaXN0ZW4KKyNlbmRpZiAvKiBDS19TT0NLUzUgKi8KKyNlbmRpZiAv KiBDS19TT0NLUyAqLworCisjaWZkZWYgREVDX1RDUElQCisjaW5jbHVkZSA8dGltZS5oPgorI2lu Y2x1ZGUgPGluZXQuaD4KKyNlbmRpZiAvKiBERUNfVENQSVAgKi8KKworLyogQWxzbyBzZWUgY2tj bmV0LmggLS0gaG1tbSwgd2h5IGRvbid0IHdlIGFsd2F5cyBpbmNsdWRlIGluZXQuaD8gKi8KKwor I2lmZGVmIEhQVVgKKyNpZm5kZWYgSFBVWDcgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBI UFVYIDcuMDAgZG9lc24ndCBoYXZlIGl0ICovCisjaWZuZGVmIEhQVVg2ICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogSFBVWCA2LjAwIGRvZXNuJ3QgaGF2ZSBpdCAqLworI2luY2x1ZGUgPGFy cGEvaW5ldC5oPiAgICAgICAgICAgICAgICAgIC8qIEZvciBpbmV0X250b2EoKSBwcm90b3R5cGUg Ki8KKyNlbmRpZiAvKiBIUFVYNiAqLworI2VuZGlmIC8qIEhQVVg3ICovCisjZW5kaWYgLyogSFBV WCAqLworCisjaWZkZWYgQ01VX1RDUElQCisjaW5jbHVkZSA8dGltZS5oPgorI2VuZGlmIC8qIENN VV9UQ1BJUCAqLworCisjaWZuZGVmIE5PRENMVElNRVZBTAorI2lmZGVmIERDTFRJTUVWQUwgICAg ICAgICAgICAgICAgICAgICAgIC8qIFVuaXhXYXJlIDcgKi8KK3N0cnVjdCB0aW1ldmFsIHsgICAg ICAgICAgICAgICAgICAgICAgICAvKiBBbmQgZGVmaW5lIHRoZXNlIG91cnNlbHZlcy4gKi8KKyAg ICBsb25nIHR2X3NlYzsgICAgICAgICAgICAgICAgICAgICAgICAvKiAoc2VlIGNvbW1lbnRzIGlu IGNrdXRpby5jKSAqLworICAgIGxvbmcgdHZfdXNlYzsKK307CitzdHJ1Y3QgdGltZXpvbmUgewor ICAgIGludCB0el9taW51dGVzd2VzdDsKKyAgICBpbnQgdHpfZHN0dGltZTsKK307CisjZW5kaWYg LyogRENMVElNRVZBTCAqLworI2VuZGlmIC8qIE5PRENMVElNRVZBTCAqLworCisjaWZkZWYgV0lO VENQCisKKyNpbmNsdWRlIDxzZXRqbXAuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRl IDxzeXMvdGltZS5oPgorLyoKKyAgVGhlIFdJTi9UQ1AgY29kZSBwYXRoIGlzIHRoZSBzYW1lIGFz IHRoYXQgZm9yIE11bHRpTmV0LgorICBPbmx5IHRoZSByb3V0aW5lIG5hbWVzIGhhdmUgY2hhbmdl ZCAuLi4KKyovCisjZGVmaW5lIHNvY2tldF9yZWFkICAgICBuZXRyZWFkCisjZGVmaW5lIHNvY2tl dF9pb2N0bCAgICBpb2N0bAorI2RlZmluZSBzb2NrZXRfd3JpdGUgICAgbmV0d3JpdGUKKyNkZWZp bmUgc29ja2V0X2Nsb3NlICAgIG5ldGNsb3NlCisKKyNpZmRlZiBPTERfVFdHICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIHNvbWUgcm91dGluZXMgaGF2ZSBldm9sdmVkICovCisgICAgICAgIGV4 dGVybiBpbnQgdm1zZXJybm8sIHVlcnJubzsKKyNkZWZpbmUgc29ja2V0X2Vycm5vICAgIHVlcnJu bworI2RlZmluZSBzb2NrZXRfcGVycm9yICAgcGVycm9yICAgICAgICAgLyogd2hpY2ggdXNlcyBl cnJubywgbm90IHVlcnJubyEgKi8KKyNlbHNlCisjZGVmaW5lIHNvY2tldF9lcnJubyAgICBlcnJu bworI2RlZmluZSBzb2NrZXRfcGVycm9yICAgd2luJHBlcnJvcgorI2VuZGlmIC8qIE9MRF9UV0cg Ki8KKworI2Vsc2UgLyogTm90IFdJTlRDUCAqLworCisjaWZkZWYgT1NGMTMKKyNpZmRlZiBDS19B TlNJQworI2lmZGVmIF9OT19QUk9UTworI3VuZGVmIF9OT19QUk9UTworI2VuZGlmIC8qIF9OT19Q Uk9UTyAqLworI2VuZGlmIC8qIENLX0FOU0lDICovCisjZW5kaWYgLyogT1NGMTMgKi8KKworI2lm bmRlZiBJMzg2SVgKKyNpZm5kZWYgSFBVWFBSRTY1CisjaW5jbHVkZSA8ZXJybm8uaD4JCQkvKiBF cnJvciBudW1iZXIgc3ltYm9scyAqLworI2Vsc2UKKyNpZm5kZWYgRVJSTk9fSU5DTFVERUQKKyNp bmNsdWRlIDxlcnJuby5oPgkJCS8qIEVycm9yIG51bWJlciBzeW1ib2xzICovCisjZW5kaWYJLyog RVJSTk9fSU5DTFVERUQgKi8KKyNlbmRpZgkvKiBIUFVYUFJFNjUgKi8KKyNlbmRpZiAvKiBJMzg2 SVggKi8KKworI2luY2x1ZGUgPHNpZ25hbC5oPiAgICAgICAgICAgICAgICAgICAgIC8qIEV2ZXJ5 Ym9keSBuZWVkcyB0aGlzICovCisKKyNpZmRlZiBaSUxPRyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBaaWxvZyBoYXMgZGlmZmVyZW50IG5hbWUgZm9yIHRoaXMgKi8KKyNpbmNsdWRlIDxz ZXRyZXQuaD4KKyNlbHNlCisjaW5jbHVkZSA8c2V0am1wLmg+CisjZW5kaWYgLyogWklMT0cgKi8K KworI2VuZGlmIC8qIFdJTlRDUCAqLworCisjaWZkZWYgZGF0YWdlbmVyYWwgICAgICAgICAgICAg ICAgICAgICAgLyogRGF0YSBHZW5lcmFsIEFPUy9WUyAqLworI2luY2x1ZGUgPDp1c3I6aW5jbHVk ZTp2c190Y3BfZXJybm8uaD4KKyNpbmNsdWRlIDw6dXNyOmluY2x1ZGU6c3lzOnZzX3RjcF90eXBl cy5oPgorI2lmZGVmIFNFTEVDVAorLyoKKyAgTk9URTogVGhpcyBjYW4gYmUgY29tcGlsZWQgYW5k IGxpbmtlZCBPSyB3aXRoIFNFTEVDVCBkZWZpbmVkCisgIGJ1dCBpdCBkb2Vzbid0IHdvcmsgYXQg YWxsLiAgQW55Ym9keSB3aG8gY2FyZXMgYW5kIGtub3dzIGhvdworICB0byBmaXggaXQsIGZlZWwg ZnJlZS4KKyovCisjaW5jbHVkZSA8OnVzcjppbmNsdWRlOnN5czp2c190Y3BfdGltZS5oPgorI2Vu ZGlmIC8qIFNFTEVDVCAqLworI2luY2x1ZGUgPDp1c3I6aW5jbHVkZTpzeXM6c29ja2V0Lmg+Cisj aW5jbHVkZSA8OnVzcjppbmNsdWRlOm5ldGluZXQ6aW4uaD4KKyNpbmNsdWRlIDw6dXNyOmluY2x1 ZGU6bmV0ZGIuaD4KKyNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLworCisjaWZuZGVmIHNvY2tldF9l cnJubworI2RlZmluZSBzb2NrZXRfZXJybm8gZXJybm8KKyNlbmRpZiAvKiBzb2NrZXRfZXJybm8g Ki8KKworI2lmZGVmIFROQ09ERQorZXh0ZXJuIGludCB0bl9kZWI7CisjZW5kaWYgLyogVE5DT0RF ICovCisKK2ludCB0Y3BfcmRucyA9ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXZlcnNl IEROUyBsb29rdXAgKi8KKyNpZmRlZiBERUNfVENQSVBfT0xECisgICAgU0VUX09GRiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogRG9lc24ndCBzZWVtIHRvIHdvcmsgaW4gVUNYICovCisj ZWxzZQorICAgICBTRVRfQVVUTworI2VuZGlmIC8qIERFQ19UQ1BJUCAqLworICAgICAgOworI2lm ZGVmIENLX0ROU19TUlYKK2ludCB0Y3BfZG5zX3NydiA9IFNFVF9PRkY7CisjZW5kaWYgLyogQ0tf RE5TX1NSViAqLworCitfUFJPVE9UWVAoIGNoYXIgKiBjbWN2dGRhdGUsIChjaGFyICosIGludCkg KTsKKworI2lmZGVmIFJMT0dDT0RFCitfUFJPVE9UWVAoIGludCBybG9nX2N0cmwsIChDSEFSICos IGludCkgKTsKK19QUk9UT1RZUCggc3RhdGljIGludCBybG9nX29vYiwgKENIQVIgKiwgaW50KSAp OworI2lmbmRlZiBUQ1BJUExJQgorX1BST1RPVFlQKCBzdGF0aWMgU0lHVFlQIHJsb2dvb2JoLCAo IGludCApICk7CisjZW5kaWYgLyogVENQSVBMSUIgKi8KK19QUk9UT1RZUCggc3RhdGljIGludCBy bG9nX2luaSwgKENIQVIgKiwgaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c3RydWN0IHNvY2thZGRyX2luICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz dHJ1Y3Qgc29ja2FkZHJfaW4gKikgKTsKK2ludCBybG9nX21vZGUgPSBSTF9DT09LRUQ7CitpbnQg cmxvZ19zdG9wcGVkID0gMDsKK2ludCBybG9nX2luYmFuZCA9IDA7CisjZW5kaWYgLyogUkxPR0NP REUgKi8KKworI2lmbmRlZiBOT0lDUAorZXh0ZXJuIGludCBkb2Nvbng7ICAgICAgICAgICAgICAg ICAgICAgIC8qIENPTk5FQ1QtY2xhc3MgY29tbWFuZCBhY3RpdmUgKi8KKyNlbmRpZiAvKiBOT0lD UCAqLworCisjaWZkZWYgSUJNWDI1CisvKiBUaGlzIHZhcmlhYmxlIHNob3VsZCBwcm9iYWJseSBi ZSBnZW5lcmFsaXNlZCBmb3IgdHJ1ZSBjbGllbnQvc2VydmVyCisgKiBzdXBwb3J0IC0gaWU6IHRo ZSBmZCBvZiB0aGUgbGlzdGVuaW5nIHNlcnZlciwgYWNjZXB0ZWQgY2FsbHMgc2hvdWxkCisgKiBi ZSBmb3JrZWQgb3IgYXQgbGVhc3QgaGFuZGxlZCB2aWEgYSBzZWNvbmQgZmQgKGZvciBJQk0ncyBY LjI1IC0KKyAqIHR0eWZkIGFsd2F5cyBob2xkcyB0aGUgYWN0aXZlIGZkIC0gaWUgdGhlIHNlcnZl ciBiZWNvbWVzIGluYWN0aXZlCisgKiBhcyBsb25nIGFzIGEgY2xpZW50IGlzIGNvbm5lY3RlZCwg YW5kIGJlY29tZXMgYWN0aXZlIGFnYWluIHdoZW4gdGhlCisgKiBjb25uZWN0aW9uIGlzIGNsb3Nl ZCkKKyAqLworaW50IHgyNXNlcnZlcmZkID0gMDsgICAgICAgICAgICAvKiBleHRlcm4gaW4gY2tj bmV0LmggKi8KK2ludCB4MjVzZXFubyA9IDA7ICAgICAgICAgICAgICAgLyogQ29ubmVjdGlvbiBz ZXF1ZW5jZSBudW1iZXIgKi8KK2ludCB4MjVsYXN0bXNnID0gLTE7ICAgICAgICAgICAgLyogQSBj aGVhcHNrYXRlJ3Mgc3RhdGUgdGFibGUgKi8KKworI2RlZmluZSBYMjVfQ0xPU0VEICAgICAgMCAg ICAgICAvKiBEZWZhdWx0IHN0YXRlOiBubyBjb25uZWN0aW9uLCBubyBTVFJFQU0gKi8KKyNkZWZp bmUgWDI1X1NFVFVQICAgICAgIDEgICAgICAgLyogWC4yNSBoYXMgYmVlbiBzZXQgdXAgKG5vIGNv bm5lY3Rpb24pICovCisjZGVmaW5lIFgyNV9DT05ORUNURUQgICAyICAgICAgIC8qIFguMjUgY29u bmVjdGlvbiBoYXMgYmVlbiBlc3RhYmxpc2hlZCAqLworaW50IHgyNV9zdGF0ZSA9IFgyNV9DTE9T RUQ7ICAgICAvKiBEZWZhdWx0IHN0YXRlICovCisjZW5kaWYgLyogSUJNWDI1ICovCisKKyNpZm5k ZWYgREVCVUcKKyNkZWZpbmUgZGVibG9nIDAKKyNlbmRpZiAvKiBERUJVRyAqLworCisjaWZkZWYg Q0tfTkFXUyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTmVnb3RpYXRlIEFib3V0IFdpbmRv dyBTaXplICovCisjaWZkZWYgUkxPR0NPREUKK19QUk9UT1RZUCggaW50IHJsb2dfbmF3cywgKHZv aWQpICk7CisjZW5kaWYgLyogUkxPR0NPREUgKi8KKyNlbmRpZiAvKiBDS19OQVdTICovCisKKyNp ZmRlZiBPUzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGb3IgdGVybWluYWwgdHlw ZSBuYW1lIHN0cmluZyAqLworI2luY2x1ZGUgImNrdXVzci5oIgorI2lmbmRlZiBOVAorI2luY2x1 ZGUgPG9zMi5oPgorI3VuZGVmIENPTU1FTlQKKyNlbmRpZiAvKiBOVCAqLworI2luY2x1ZGUgImNr b2Nvbi5oIgorZXh0ZXJuIGludCB0dF90eXBlLCBtYXhfdHQ7CitleHRlcm4gc3RydWN0IHR0X2lu Zm9fcmVjIHR0X2luZm9bXTsKK2V4dGVybiBjaGFyIHR0bmFtZVtdOworI2Vsc2UKKyNpZmRlZiBD S19BVVRIRU5USUNBVElPTgorI2luY2x1ZGUgImNrdXVzci5oIgorI2VuZGlmIC8qIENLX0FVVEhF TlRJQ0FUSU9OICovCisjZW5kaWYgLyogT1MyICovCisKKyNpZmRlZiBOVAorZXh0ZXJuIGludCB3 aW5zb2NrX3ZlcnNpb247CisjZW5kaWYgLyogTlQgKi8KKworI2lmZGVmIENLX0FVVEhFTlRJQ0FU SU9OCisjaW5jbHVkZSAiY2t1YXRoLmgiCisjZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJT04gKi8K KworI2luY2x1ZGUgImNrY3NpZy5oIgorCisjaWZuZGVmIE9TMiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogRm9yIHRpbWVvdXQgbG9uZ2p1bXBzICovCitzdGF0aWMgY2tqbXBidWYgbmpi dWY7CisjZW5kaWYgLyogT1MyICovCisKKyNkZWZpbmUgTkFNRUNQWUwgMTAyNCAgICAgICAgICAg ICAgICAgICAvKiBMb2NhbCBjb3B5IG9mIGhvc3RuYW1lICovCitjaGFyIG5hbWVjb3B5W05BTUVD UFlMXTsgICAgICAgICAgICAgICAgLyogUmVmZXJlbmNlZCBieSBja2N0ZWwuYyAqLworY2hhciBu YW1lY29weTJbTkFNRUNQWUxdOwkJLyogUmVmZXJlbmNlZCBieSBja2N0ZWwuYyAqLworI2lmbmRl ZiBOT0hUVFAKK2NoYXIgaHR0cF9ob3N0X3BvcnRbTkFNRUNQWUxdOyAgICAgICAgICAvKiBvcmln IGhvc3QvcG9ydCBuZWNlc3NhcnkgZm9yIGh0dHAgKi8KK2NoYXIgaHR0cF9pcFsyMF0gPSB7ICdc MCcgfTsgICAgICAgICAgICAvKiBpcCBhZGRyZXNzIG9mIGhvc3QgKi8KK2NoYXIgaHR0cF9wb3J0 ID0gMDsKK2ludCAgaHR0cF9zc2wgPSAwOworY2hhciAqIGh0dHBfYWdlbnQgPSAwOworaW50ICBo dHRwZmQgPSAtMTsgICAgICAgICAgICAgICAgICAgICAgIC8qIHNvY2tldCBmb3IgaHR0cCBjb25u ZWN0aW9ucyAqLworaW50ICBodHRwX2NvZGUgPSAwOworI2RlZmluZSBIVFRQQlVGTEVOICAxMDI0 CitjaGFyIGh0dHBfcmVwbHlfc3RyW0hUVFBCVUZMRU5dID0gIiI7CisjZW5kaWYgLyogTk9IVFRQ ICovCisKK2NoYXIgaXBhZGRyWzIwXSA9IHsgJ1wwJyB9OyAgICAgICAgICAgICAvKiBHbG9iYWwg Y29weSBvZiBJUCBhZGRyZXNzICovCit1bnNpZ25lZCBsb25nIG15eGlwYWRkciA9IDBMOyAgICAg ICAgICAgLyogRGl0dG8gYXMgYSBudW1iZXIgKi8KKyNlbmRpZiAvKiBORVRDT05OICovCisKK2No YXIgKnRjcF9hZGRyZXNzID0gTlVMTDsgICAgICAgICAgICAgICAvKiBQcmVmZXJyZWQgSVAgQWRk cmVzcyAqLworZXh0ZXJuIGNoYXIgdWlkYnVmW107ICAgICAgICAgICAgICAgICAgIC8qIFVzZXIg SUQgYnVmZmVyICovCitleHRlcm4gY2hhciBwd2J1ZltdOyAgICAgICAgICAgICAgICAgICAgLyog UGFzc3dvcmQgYnVmZmVyICovCisKKyNpZm5kZWYgTk9IVFRQCitjaGFyICogdGNwX2h0dHBfcHJv eHkgPSBOVUxMOyAgICAgICAgICAgLyogTmFtZVs6cG9ydF0gb2YgaHR0cCBwcm94eSBzZXJ2ZXIg Ki8KK2ludCAgICB0Y3BfaHR0cF9wcm94eV9lcnJubyA9IDA7CitjaGFyICogdGNwX2h0dHBfcHJv eHlfdXNlciA9IE5VTEw7CitjaGFyICogdGNwX2h0dHBfcHJveHlfcHdkICA9IE5VTEw7CitjaGFy ICogdGNwX2h0dHBfcHJveHlfYWdlbnQgPSBOVUxMOworI2RlZmluZSBIVFRQQ1BZTCAxMDI0Citz dGF0aWMgY2hhciBwcm94eWNvcHlbSFRUUENQWUxdOworI2VuZGlmIC8qIE5PSFRUUCAqLworCisj aWZkZWYgT1MyCitleHRlcm4gaW50IHR0X3Jvd3NbXSwgdHRfY29sc1tdOworZXh0ZXJuIGludCB0 dF9zdGF0dXNbVk5VTV07CisjZWxzZSAvKiBPUzIgKi8KK2V4dGVybiBpbnQgdHRfcm93cywgdHRf Y29sczsgICAgICAgICAgICAvKiBFdmVyeWJvZHkgaGFzIHRoaXMgKi8KKyNlbmRpZiAvKiBPUzIg Ki8KKworZXh0ZXJuIGludCBjbWRfY29scywgY21kX3Jvd3M7CisKKyNpZmRlZiBTVFJFQU1JTkcg ICAgICAgICAgICAgICAgICAgICAgICAvKiBVc2UgYmxvY2tpbmcgd3JpdGVzIGZvciBzdHJlYW1p bmcgKi8KK2V4dGVybiBpbnQgc3RyZWFtaW5nOworI2VuZGlmIC8qIFNUUkVBTUlORyAqLworCisj aWZkZWYgTlQKK2V4dGVybiBpbnQgV1NBU2FmZVRvQ2FuY2VsOworaW50IHdpbjk1c2VsZWN0YnVn ID0gMDsgICAgICAgICAgICAgICAgIC8qIEZvciBUQ1AvSVAgc3RhY2tzIHdob3NlIHNlbGVjdCgp ICovCisvKiBhbHdheXMgZmFpbHMgb24gd3JpdGUgcmVxdWVzdHMgc3VjaCBhcyBDaXNjbyBhbmQg UXVhcnRlcmRlY2sgKi8KKyNkZWZpbmUgc3RyaWNtcCBfc3RyaWNtcAorI2VuZGlmIC8qIE5UICov CisKKyNpZm5kZWYgTk9UQ1BPUFRTCisKKy8qIFNraXAgYWxsIHRoaXMgaWYgTk9UQ1BPUFRTIHNw ZWNpZmllZC4gKi8KKworI2lmZGVmIFNPTF9TT0NLRVQKKworI2lmZGVmIFRDUF9OT0RFTEFZCitp bnQgdGNwX25vZGVsYXkgPSAwOyAgICAgICAgICAgICAgICAgICAgLyogTmFnbGUgYWxnb3JpdGht IFRDUF9OT0RFTEFZICovCisjZW5kaWYgLyogVENQX05PREVMQVkgKi8KKworI2lmZGVmIFNPX0RP TlRST1VURQoraW50IHRjcF9kb250cm91dGUgPSAwOworI2VuZGlmIC8qIFNPX0RPTlRST1VURSAq LworCisjaWZkZWYgU09fTElOR0VSCitpbnQgdGNwX2xpbmdlciAgPSAwOyAgICAgICAgICAgICAg ICAgICAgLyogU09fTElOR0VSICovCitpbnQgdGNwX2xpbmdlcl90bW8gPSAwOyAgICAgICAgICAg ICAgICAgLyogU09fTElOR0VSIHRpbWVvdXQgKi8KKyNlbmRpZiAvKiBTT19MSU5HRVIgKi8KKwor I2lmZGVmIEhQVVggICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEJ1dCB0aGUgZGF0YSBz dHJ1Y3R1cmVzICovCisjaWZuZGVmIEhQVVg4ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog bmVlZGVkIGZvciBsaW5nZXIgYXJlIG5vdCAqLworI2lmbmRlZiBIUFVYOSAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIGRlZmluZWQgaW4gSFAtVVggdmVyc2lvbnMgKi8KKyNpZm5kZWYgSFBV WDEwICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwcmlvciB0byA4LjAwLiAqLworI2lmZGVm IFNPX0xJTkdFUgorI3VuZGVmIFNPX0xJTkdFUgorI2VuZGlmIC8qIFNPX0xJTkdFUiAqLworI2Vu ZGlmIC8qIEhQVVgxMCAqLworI2VuZGlmIC8qIEhQVVg5ICovCisjZW5kaWYgLyogSFBVWDggKi8K KyNlbmRpZiAvKiBIUFVYICovCisKKyNpZm5kZWYgU09fT09CSU5MSU5FICAgICAgICAgICAgICAg ICAgICAvKiBIb3BlZnVsbHkgb25seSBIUC1VWCA3LjAgKi8KKyNkZWZpbmUgU09fT09CSU5MSU5F IDB4MDEwMAorI2VuZGlmIC8qIFNPX09PQklOTElORSAqLworCisjaWZuZGVmIFRDUFNOREJVRlNJ WgorI2lmZGVmIFZNUworI2lmZGVmIF9fYWxwaGEKKyNkZWZpbmUgVENQU05EQlVGU0laIDE2Mzg0 CisjZW5kaWYgLyogX19hbHBoYSAqLworI2VuZGlmIC8qIFZNUyAqLworI2VuZGlmIC8qIFRDUFNO REJVRlNJWiAqLworCisjaWZuZGVmIFRDUFNOREJVRlNJWgorI2RlZmluZSBUQ1BTTkRCVUZTSVog LTEKKyNlbmRpZiAvKiBUQ1BTTkRCVUZTSVogKi8KKworI2lmZGVmIFNPX1NOREJVRgoraW50IHRj cF9zZW5kYnVmID0gVENQU05EQlVGU0laOworI2VuZGlmIC8qIFNPX1NOREJVRiAqLworCisjaWZk ZWYgU09fUkNWQlVGCitpbnQgdGNwX3JlY3ZidWYgPSAtMTsKKyNlbmRpZiAvKiBTT19SQ1ZCVUYg Ki8KKworI2lmZGVmIFNPX0tFRVBBTElWRQoraW50IHRjcF9rZWVwYWxpdmUgPSAxOworI2VuZGlm IC8qIFNPX0tFRVBBTElWRSAqLworCisjZW5kaWYgLyogU09MX1NPQ0tFVCAqLworI2VuZGlmIC8q IE5PVENQT1BUUyAqLworCisjaWZuZGVmIE5FVENPTk4KKy8qCisgIE5ldHdvcmsgc3VwcG9ydCBu b3QgZGVmaW5lZC4KKyAgRHVtbXkgZnVuY3Rpb25zIGhlcmUgaW4gY2FzZSAjaWZkZWYncyBmb3Jn b3R0ZW4gZWxzZXdoZXJlLgorKi8KK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBPcGVuIG5ldHdvcmsgY29ubmVjdGlvbiAqLworbmV0b3BlbihuYW1lLCBsY2wsIG5l dHQpIGNoYXIgKm5hbWU7IGludCAqbGNsLCBuZXR0OyB7CisgICAgcmV0dXJuKC0xKTsKK30KK2lu dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbG9zZSBuZXR3b3JrIGNv bm5lY3Rpb24gKi8KK25ldGNsb3MoKSB7CisgICAgcmV0dXJuKC0xKTsKK30KK2ludCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDaGVjayBuZXR3b3JrIGlucHV0IGJ1ZmZl ciAqLworbmV0dGNoaygpIHsKKyAgICByZXR1cm4oLTEpOworfQoraW50ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIEZsdXNoIG5ldHdvcmsgaW5wdXQgYnVmZmVyICovCitu ZXRmbHVpKCkgeworICAgIHJldHVybigtMSk7Cit9CitpbnQgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogU2VuZCBuZXR3b3JrIEJSRUFLICovCituZXRicmVhaygpIHsKKyAg ICByZXR1cm4oLTEpOworfQoraW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIElucHV0IGNoYXJhY3RlciBmcm9tIG5ldHdvcmsgKi8KK25ldGluYyh0aW1vKSBpbnQgdGlt bzsgeworICAgIHJldHVybigtMSk7Cit9CitpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogT3V0cHV0IGNoYXJhY3RlciB0byBuZXR3b3JrICovCisjaWZkZWYgQ0tfQU5T SUMKK25ldHRvYyhDSEFSIGMpCisjZWxzZQorbmV0dG9jKGMpIENIQVIgYzsKKyNlbmRpZiAvKiBD S19BTlNJQyAqLworLyogbmV0dG9jICovIHsKKyAgICByZXR1cm4oLTEpOworfQoraW50CituZXR0 b2wocyxuKSBDSEFSICpzOyBpbnQgbjsgeworICAgIHJldHVybigtMSk7Cit9CisKKyNlbHNlIC8q IE5FVENPTk4gaXMgZGVmaW5lZCAobXVjaCBvZiB0aGlzIG1vZHVsZS4uLikgKi8KKworI2lmZGVm IE5FVExFQlVGCitWT0lECitsZV9pbml0KCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogTG9jYWxFY2hvSW5pdCgpICovCisgICAgaW50IGk7CisgICAgZm9yIChpID0gMDsgaSA8IExF QlVGU0laOyBpKyspCisgICAgICBsZV9idWZbaV0gPSAnXDAnOworICAgIGxlX3N0YXJ0ID0gMDsK KyAgICBsZV9lbmQgPSAwOworICAgIGxlX2RhdGEgPSAwOworICAgIHR0X3B1c2hfaW5pdGVkID0g MTsKK30KKworVk9JRAorbGVfY2xlYW4oKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IExvY2FsRWNob0NsZWFudXAoKSAqLworICAgIGxlX2luaXQoKTsKKyAgICByZXR1cm47Cit9CisK K2ludAorbGVfaW5idWYoKSB7CisgICAgaW50IHJjID0gMDsKKyAgICBpZiAobGVfc3RhcnQgIT0g bGVfZW5kKSB7CisgICAgICAgIHJjID0gKGxlX2VuZCAtCisgICAgICAgICAgICAgIGxlX3N0YXJ0 ICsKKyAgICAgICAgICAgICAgTEVCVUZTSVopICUgTEVCVUZTSVo7CisgICAgfQorICAgIHJldHVy bihyYyk7Cit9CisKK2ludAorI2lmZGVmIENLX0FOU0lDCitsZV9wdXRjaGFyKENIQVIgY2gpCisj ZWxzZQorbGVfcHV0Y2hhcihjaCkgQ0hBUiBjaDsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyog bGVfcHV0Y2hhciAqLyB7CisgICAgaWYgKChsZV9zdGFydCAtIGxlX2VuZCArIExFQlVGU0laKSVM RUJVRlNJWiA9PSAxKSB7CisgICAgICAgIGRlYnVnKEYxMTAsImxlX3B1dGNoYXIiLCJidWZmZXIg aXMgZnVsbCIsMCk7CisgICAgICAgIHJldHVybigtMSk7CisgICAgfQorICAgIGxlX2J1ZltsZV9l bmQrK10gPSBjaDsKKyAgICBpZiAobGVfZW5kID09IExFQlVGU0laKQorICAgICAgbGVfZW5kID0g MDsKKyAgICBsZV9kYXRhID0gMTsKKyAgICByZXR1cm4oMCk7Cit9CisKK2ludAorI2lmZGVmIENL X0FOU0lDCitsZV9wdXRzKENIQVIgKiBzLCBpbnQgbikKKyNlbHNlCitsZV9wdXRzKHMsbikgQ0hB UiAqIHM7IGludCBuOworI2VuZGlmIC8qIENLX0FOU0lDICovCisvKiBsZV9wdXRzICovIHsKKyAg ICBpbnQgcmMgPSAwOworICAgIGludCBpID0gMDsKKyAgICBDSEFSICogcCA9IChDSEFSICopImxl X3B1dHMiOworICAgIGNraGV4ZHVtcChwLHMsbik7CisgICAgZm9yIChpID0gMDsgaSA8IG47IGkr KykKKyAgICAgIHJjID0gbGVfcHV0Y2hhcigoY2hhcilzW2ldKTsKKyAgICBkZWJ1ZyhGMTAxLCJs ZV9wdXRzIiwiIixyYyk7CisgICAgcmV0dXJuKHJjKTsKK30KKworaW50CisjaWZkZWYgQ0tfQU5T SUMKK2xlX3B1dHN0cihDSEFSICogcykKKyNlbHNlCitsZV9wdXRzdHIocykgQ0hBUiAqIHM7Cisj ZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIGxlX3B1dHMgKi8geworICAgIENIQVIgKiBwOworICAg IGludCByYyA9IDA7CisgICAgcCA9IChDSEFSICopImxlX3B1dHN0ciI7CisgICAgY2toZXhkdW1w KHAscywoaW50KXN0cmxlbigoY2hhciAqKXMpKTsKKyAgICBmb3IgKHAgPSBzOyAqcCAmJiAhcmM7 IHArKykKKyAgICAgIHJjID0gbGVfcHV0Y2hhcigqcCk7CisgICAgcmV0dXJuKHJjKTsKK30KKwor aW50CisjaWZkZWYgQ0tfQU5TSUMKK2xlX2dldGNoYXIoQ0hBUiAqIHBjaCkKKyNlbHNlIC8qIENL X0FOU0lDICovCitsZV9nZXRjaGFyKHBjaCkgQ0hBUiAqIHBjaDsKKyNlbmRpZiAvKiBDS19BTlNJ QyAqLworLyogbGVfZ2F0Y2hhciAqLyB7CisgICAgaW50IHJjID0gMDsKKyAgICBpZiAobGVfc3Rh cnQgIT0gbGVfZW5kKSB7CisgICAgICAgICpwY2ggPSBsZV9idWZbbGVfc3RhcnRdOworICAgICAg ICBsZV9idWZbbGVfc3RhcnRdID0gMDsKKyAgICAgICAgbGVfc3RhcnQrKzsKKworICAgICAgICBp ZiAobGVfc3RhcnQgPT0gTEVCVUZTSVopCisgICAgICAgICAgbGVfc3RhcnQgPSAwOworCisgICAg ICAgIGlmIChsZV9zdGFydCA9PSBsZV9lbmQpIHsKKyAgICAgICAgICAgIGxlX2RhdGEgPSAwOwor ICAgICAgICB9CisgICAgICAgIHJjKys7CisgICAgfSBlbHNlIHsKKyAgICAgICAgKnBjaCA9IDA7 CisgICAgfQorICAgIHJldHVybihyYyk7Cit9CisjZW5kaWYgLyogTkVUTEVCVUYgKi8KKworI2lm ZGVmIFZNUworLyoKKyAgSW4gZWRpdCAxOTAsIHdlIG1vdmVkIHRuX2luaSgpIHRvIGJlIGNhbGxl ZCBmcm9tIHdpdGhpbiBuZXRvcGVuKCkuCisgIEJ1dCB0bl9pbmkoKSBjYWxscyB0dG9sKCksIGFu ZCB0dG9sKCkgY2hlY2tzIHRvIHNlZSBpZiBpdCdzIGEgbmV0CisgIGNvbm5lY3Rpb24sIGJ1dCB0 aGUgZmxhZyBmb3IgdGhhdCBpc24ndCBzZXQgdW50aWwgYWZ0ZXIgbmV0b3BlbigpCisgIGlzIGZp bmlzaGVkLiAgU2luY2UsIGluIHRoaXMgbW9kdWxlLCB3ZSBhcmUgYWx3YXlzIGRvaW5nIG5ldHdv cmsKKyAgb3V0cHV0IGFueXdheSwgd2UganVzdCBjYWxsIG5ldHRvbCgpIGRpcmVjdGx5LCBpbnN0 ZWFkIG9mIGdvaW5nIHRocnUKKyAgdHRvbCgpLiAgT25seSBuZWVkZWQgZm9yIFZNUywgc2luY2Ug VU5JWCwgQU9TL1ZTLCBhbmQgVk9TIGNhbiBoYW5kbGUKKyAgbmV0IGNvbm5lY3Rpb25zIGp1c3Qg bGlrZSByZWd1bGFyIGNvbm5lY3Rpb25zIGluIHR0b2woKSwgYW5kIE9TLzIKKyAgaGFzIGEgc3Bl Y2lhbCByb3V0aW5lIGZvciB0aGlzLgorKi8KKyNkZWZpbmUgdHRvbCBuZXR0b2wKKyNlbmRpZiAv KiBWTVMgKi8KKworaW50IHRjcHNyZmQgPSAtMTsKKworI2lmZGVmIENLX0tFUkJFUk9TCisKK2No YXIgKiBrcmI1X2RfcHJpbmNpcGFsID0gTlVMTDsgICAgICAgICAvKiBEZWZhdWx0IHByaW5jaXBh bCAqLworY2hhciAqIGtyYjVfZF9pbnN0YW5jZSA9IE5VTEw7ICAgICAgICAgIC8qIERlZmF1bHQg aW5zdGFuY2UgKi8KK2NoYXIgKiBrcmI1X2RfcmVhbG0gPSBOVUxMOyAgICAgICAgICAgICAvKiBE ZWZhdWx0IHJlYWxtICovCitjaGFyICoga3JiNV9kX2NjID0gTlVMTDsgICAgICAgICAgICAgICAg LyogRGVmYXVsdCBjcmVkZW50aWFscyBjYWNoZSAqLworY2hhciAqIGtyYjVfZF9zcnYgICA9IE5V TEw7ICAgICAgICAgICAgIC8qIERlZmF1bHQgU2VydmljZSAqLworaW50ICAgIGtyYjVfZF9saWZl dGltZSA9IDYwMDsgICAgICAgICAgIC8qIERlZmF1bHQgbGlmZXRpbWUgKDEwIGhvdXJzKSAqLwor aW50ICAgIGtyYjVfZF9mb3J3YXJkYWJsZSA9IDA7ICAgICAgICAgIC8qIGNyZWRzIG5vdCBmb3J3 YXJkYWJsZSAqLworaW50ICAgIGtyYjVfZF9wcm94aWFibGUgPSAwOyAgICAgICAgICAgIC8qIGNy ZWRzIG5vdCBwcm94aWFibGUgKi8KK2ludCAgICBrcmI1X2RfcmVuZXdhYmxlID0gMDsgICAgICAg ICAgICAvKiBjcmVkcyBub3QgcmVuZXdhYmxlICgwIG1pbikgKi8KK2ludCAgICBrcmI1X2F1dG9n ZXQgPSAxOyAgICAgICAgICAgICAgICAvKiBBdXRvZ2V0IFRHVHMgKi8KK2ludCAgICBrcmI1X2F1 dG9kZWwgPSAwOyAgICAgICAgICAgICAgICAvKiBBdXRvIGRlbGV0ZSBUR1RzICovCitpbnQgICAg a3JiNV9kX2dldGs0ID0gMDsgICAgICAgICAgICAgICAgLyogSzUgS2luaXQgZ2V0cyBLNCBUR1Rz ICovCitpbnQgICAga3JiNV9jaGVja2FkZHJzID0gMTsgICAgICAgICAgICAgLyogQ2hlY2sgVEdU IEFkZHJzICovCitpbnQgICAga3JiNV9kX25vX2FkZHJlc3NlcyA9IDA7ICAgICAgICAgLyogRG8g bm90IGluY2x1ZGUgSVAgQWRkcmVzc2VzICovCitjaGFyICoga3JiNV9kX2FkZHJzW0tSQjVfTlVN X09GX0FERFJTKzFdPXtOVUxMLE5VTEx9OyAvKiBBZGRycyB0byBpbmNsdWRlICovCitpbnQgICAg a3JiNV9lcnJubyA9IDA7ICAgICAgICAgICAgICAgICAgLyogTGFzdCBLNSBlcnJubyAqLworY2hh ciAqIGtyYjVfZXJybXNnID0gTlVMTDsgICAgICAgICAgICAgIC8qIExhc3QgSzUgZXJybXNnICov CitjaGFyICogazVfa2V5dGFiID0gTlVMTDsKKworY2hhciAqIGtyYjRfZF9wcmluY2lwYWwgPSBO VUxMOyAgICAgICAgIC8qIERlZmF1bHQgcHJpbmNpcGFsICovCitjaGFyICoga3JiNF9kX3JlYWxt ID0gTlVMTDsgICAgICAgICAgICAgLyogRGVmYXVsdCByZWFsbSAqLworY2hhciAqIGtyYjRfZF9z cnYgICA9IE5VTEw7ICAgICAgICAgICAgIC8qIERlZmF1bHQgU2VydmljZSAqLworaW50ICAgIGty YjRfZF9saWZldGltZSA9IDYwMDsgICAgICAgICAgIC8qIERlZmF1bHQgbGlmZXRpbWUgKDEwIGhv dXJzKSAqLworaW50ICAgIGtyYjRfZF9wcmVhdXRoID0gMTsgICAgICAgICAgICAgIC8qIFVzZSBw cmVhdXRoIHJlcXVlc3RzICovCitjaGFyICoga3JiNF9kX2luc3RhbmNlID0gTlVMTDsgICAgICAg ICAgLyogRGVmYXVsdCBpbnN0YW5jZSAqLworaW50ICAgIGtyYjRfYXV0b2dldCA9IDE7ICAgICAg ICAgICAgICAgIC8qIEF1dG9nZXQgVEdUcyAqLworaW50ICAgIGtyYjRfYXV0b2RlbCA9IDA7ICAg ICAgICAgICAgICAgIC8qIEF1dG8gZGVsZXRlIFRHVHMgKi8KK2ludCAgICBrcmI0X2NoZWNrYWRk cnMgPSAxOyAgICAgICAgICAgICAvKiBDaGVjayBUR1QgQWRkcnMgKi8KK2NoYXIgKiBrNF9rZXl0 YWIgPSBOVUxMOworCitpbnQgICAga3JiNF9lcnJubyA9IDA7ICAgICAgICAgICAgICAgICAgLyog TGFzdCBLNCBlcnJubyAqLworY2hhciAqIGtyYjRfZXJybXNnID0gTlVMTDsgICAgICAgICAgICAg IC8qIExhc3QgSzQgZXJybXNnICovCisKK3N0cnVjdCBrcmJfb3BfZGF0YSBrcmJfb3AgPSB7ICAg ICAgICAgICAvKiBPcGVyYXRpb25hbCBkYXRhIHN0cnVjdHVyZSAqLworICAgIDAsIE5VTEwgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qICh2ZXJzaW9uLCBjYWNoZWZpbGUpICovCit9Owor CitzdHJ1Y3Qga3JiNF9pbml0X2RhdGEga3JiNF9pbml0ID0geyAgICAgLyogS2VyYmVyb3MgNCBJ TklUIGRhdGEgc3RydWN0dXJlICovCisgICAgMCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTAorfTsK Kworc3RydWN0IGtyYjVfaW5pdF9kYXRhIGtyYjVfaW5pdCA9IHsgICAgIC8qIEtlcmJlcm9zIDUg SU5JVCBkYXRhIHN0cnVjdHVyZSAqLworICAgIDAsIDAsIDAsIDAsIDAsIDAsIE5VTEwsIE5VTEws IE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIDAsIDAsIDAsCisgICAgeyBOVUxMLCBOVUxMLCBOVUxM LCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAorICAgICAgTlVMTCwgTlVMTCwgTlVMTCwg TlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCB9LAorICAgIDAKK307CisKK3N0cnVj dCBrcmI1X2xpc3RfY3JlZF9kYXRhIGtyYjVfbGMgPSB7ICAvKiBMaXN0IENyZWRlbnRpYWxzIGRh dGEgc3RydWN0dXJlICovCisgICAgMCwgMCwgMAorfTsKKworaW50IGtyYl9hY3Rpb24gPSAtMTsg ICAgICAgICAgICAgICAgICAgIC8qIEtlcmJlcm9zIGFjdGlvbiB0byBwZXJmb3JtICovCisKKyNp Zm5kZWYgQ0tfQVVUSEVOVElDQVRJT04KK2NoYXIgKgorY2tfa3JiNF9nZXRyZWFsbSgpIHsKKyAg ICByZXR1cm4oIiIpOworfQorY2hhciAqCitja19rcmI1X2dldHJlYWxtKGNjKSBjaGFyICogY2M7 IHsKKyAgICByZXR1cm4oIiIpOworfQorY2hhciAqCitja19rcmI0X2dldHByaW5jaXBhbCgpIHsK KyAgICByZXR1cm4oIiIpOworfQorY2hhciAqCitja19rcmI1X2dldHByaW5jaXBhbChjYykgY2hh ciAqIGNjOyB7CisgICAgcmV0dXJuKCIiKTsKK30KKyNlbmRpZiAvKiBDS19BVVRIRU5USUNBVElP TiAqLworCisvKiAgSSBOIEkgXyBLIEUgUiBCICAtLSAgSW5pdGlhbGl6ZSBLZXJiZXJvcyBkYXRh ICAqLworCitWT0lECitpbmlfa2VyYigpIHsKKyAgICBpbnQgaTsKKworICAgIGtyYl9hY3Rpb24g PSAtMTsgICAgICAgICAgICAgICAgICAgIC8qIE5vIGFjdGlvbiBzcGVjaWZpZWQgKi8KKworICAg IGtyYl9vcC52ZXJzaW9uID0gMDsgICAgICAgICAgICAgICAgIC8qIEtlcmJlcm9zIHZlcnNpb24g KG5vbmUpICovCisgICAga3JiX29wLmNhY2hlID0gTlVMTDsgICAgICAgICAgICAgICAgLyogQ2Fj aGUgZmlsZSAobm9uZSkgKi8KKworLyogS2VyYmVyb3MgNSAqLworCisgICAga3JiNV9pbml0LmZv cndhcmRhYmxlID0ga3JiNV9kX2ZvcndhcmRhYmxlOyAvKiBJbml0IHN3aXRjaCB2YWx1ZXMuLi4g Ki8KKyAgICBrcmI1X2luaXQucHJveGlhYmxlICAgPSBrcmI1X2RfcHJveGlhYmxlOworICAgIGty YjVfaW5pdC5saWZldGltZSAgICA9IGtyYjVfZF9saWZldGltZTsKKyAgICBrcmI1X2luaXQucmVu ZXcgICAgICAgPSAwOworICAgIGtyYjVfaW5pdC5yZW5ld2FibGUgICA9IGtyYjVfZF9yZW5ld2Fi bGU7CisgICAga3JiNV9pbml0LnZhbGlkYXRlICAgID0gMDsKKyAgICBrcmI1X2luaXQubm9fYWRk cmVzc2VzID0ga3JiNV9kX25vX2FkZHJlc3NlczsKKyAgICBrcmI1X2luaXQuZ2V0azQgICAgICAg PSBrcmI1X2RfZ2V0azQ7CisgICAgaWYgKGtyYjVfaW5pdC5wb3N0ZGF0ZSkgeworICAgICAgICBm cmVlKGtyYjVfaW5pdC5wb3N0ZGF0ZSk7CisgICAgICAgIGtyYjVfaW5pdC5wb3N0ZGF0ZSA9IE5V TEw7CisgICAgfQorICAgIGlmIChrcmI1X2luaXQuc2VydmljZSkgeworICAgICAgICBmcmVlKGty YjVfaW5pdC5zZXJ2aWNlKTsKKyAgICAgICAga3JiNV9pbml0LnNlcnZpY2UgPSBOVUxMOworICAg IH0KKyAgICBpZiAoIWtyYjVfZF9jYyB8fCAha3JiNV9kX2NjWzBdKSB7ICAvKiBTZXQgZGVmYXVs dCBjYWNoZSAqLworICAgICAgICBjaGFyICogcDsKKyAgICAgICAgcCA9IGNrX2tyYjVfZ2V0X2Nj X25hbWUoKTsKKyAgICAgICAgbWFrZXN0cigma3JiNV9kX2NjLChwICYmIHBbMF0pID8gcCA6IE5V TEwpOworICAgIH0KKyAgICBpZiAoIWtyYjVfZF9yZWFsbSB8fCAha3JiNV9kX3JlYWxtWzBdKSB7 IC8qIFNldCBkZWZhdWx0IHJlYWxtICovCisgICAgICAgIGNoYXIgKiBwOworICAgICAgICBwID0g Y2tfa3JiNV9nZXRyZWFsbShrcmI1X2RfY2MpOworICAgICAgICBtYWtlc3RyKCZrcmI1X2RfcmVh bG0sKHAgJiYgcFswXSkgPyBwIDogTlVMTCk7CisgICAgfQorICAgIG1ha2VzdHIoJmtyYjVfaW5p dC5pbnN0YW5jZSxrcmI1X2RfaW5zdGFuY2UpOworICAgIG1ha2VzdHIoJmtyYjVfaW5pdC5yZWFs bSxrcmI1X2RfcmVhbG0pOyAvKiBTZXQgcmVhbG0gZnJvbSBkZWZhdWx0ICovCisgICAgaWYgKGty YjVfaW5pdC5wYXNzd29yZCkgeworICAgICAgICBtZW1zZXQoa3JiNV9pbml0LnBhc3N3b3JkLDB4 RkYsc3RybGVuKGtyYjVfaW5pdC5wYXNzd29yZCkpOworICAgICAgICBmcmVlKGtyYjVfaW5pdC5w YXNzd29yZCk7CisgICAgICAgIGtyYjVfaW5pdC5wYXNzd29yZCA9IE5VTEw7CisgICAgfQorICAg IGlmICgha3JiNV9kX3ByaW5jaXBhbCkgeyAgICAgICAgICAgIC8qIERlZmF1bHQgcHJpbmNpcGFs ICovCisgICAgICAgIC8qIGEgTnVsbCBwcmluY2lwYWwgaW5kaWNhdGVzIHRoZSB1c2VyIHNob3Vs ZCBiZSBwcm9tcHRlZCAqLworICAgICAgICBjaGFyICogcCA9IGNrX2tyYjVfZ2V0cHJpbmNpcGFs KGtyYjVfZF9jYyk7CisgICAgICAgIGlmICghcCB8fCAhKCpwKSkKKyAgICAgICAgICBwID0gKGNo YXIgKil1aWRidWY7ICAgICAgICAgICAvKiBQcmluY2lwYWwgPSB1c2VyICovCisgICAgICAgICAg ICAgICAgbWFrZXN0cigma3JiNV9kX3ByaW5jaXBhbCwocCAmJiBwWzBdKSA/IHAgOiBOVUxMKTsK KyAgICB9CisgICAgbWFrZXN0cigma3JiNV9pbml0LnByaW5jaXBhbCxrcmI1X2RfcHJpbmNpcGFs KTsKKyAgICBmb3IgKGkgPSAwOyBpIDw9IEtSQjVfTlVNX09GX0FERFJTOyBpKyspIHsKKyAgICAg ICAgaWYgKGtyYjVfaW5pdC5hZGRyc1tpXSkKKyAgICAgICAgICBmcmVlKGtyYjVfaW5pdC5hZGRy c1tpXSk7CisgICAgICAgIGtyYjVfaW5pdC5hZGRyc1tpXSA9IE5VTEw7CisgICAgfQorICAgIGZv ciAoaSA9IDA7IGkgPD0gS1JCNV9OVU1fT0ZfQUREUlMgJiYga3JiNV9kX2FkZHJzW2ldOyBpKysp IHsKKyAgICAgICAgbWFrZXN0cigma3JiNV9pbml0LmFkZHJzW2ldLGtyYjVfZF9hZGRyc1tpXSk7 CisgICAgfQorCisgICAgLyogS2VyYmVyb3MgNCAqLworCisgICAga3JiNF9pbml0LmxpZmV0aW1l ID0ga3JiNF9kX2xpZmV0aW1lOworICAgIGtyYjRfaW5pdC5wcmVhdXRoICA9IGtyYjRfZF9wcmVh dXRoOworICAgIG1ha2VzdHIoJmtyYjRfaW5pdC5pbnN0YW5jZSxrcmI0X2RfaW5zdGFuY2UpOwor ICAgIGlmICgha3JiNF9kX3JlYWxtIHx8ICFrcmI0X2RfcmVhbG1bMF0pIHsvKiBTZXQgZGVmYXVs dCByZWFsbSAqLworICAgICAgICBjaGFyICogcDsKKyAgICAgICAgcCA9IGNrX2tyYjRfZ2V0cmVh bG0oKTsKKyAgICAgICAgICAgICAgICBtYWtlc3RyKCZrcmI0X2RfcmVhbG0sKHAgJiYgcFswXSkg PyBwIDogTlVMTCk7CisgICAgfQorICAgIG1ha2VzdHIoJmtyYjRfaW5pdC5yZWFsbSxrcmI0X2Rf cmVhbG0pOworICAgIGlmIChrcmI0X2luaXQucGFzc3dvcmQpIHsKKyAgICAgICAgbWVtc2V0KGty YjRfaW5pdC5wYXNzd29yZCwweEZGLHN0cmxlbihrcmI0X2luaXQucGFzc3dvcmQpKTsKKyAgICAg ICAgZnJlZShrcmI0X2luaXQucGFzc3dvcmQpOworICAgICAgICBrcmI0X2luaXQucGFzc3dvcmQg PSBOVUxMOworICAgIH0KKyAgICBpZiAoIWtyYjRfZF9wcmluY2lwYWwpIHsgICAgICAgICAgICAv KiBEZWZhdWx0IHByaW5jaXBhbCAqLworICAgICAgICAvKiBhIE51bGwgcHJpbmNpcGFsIGluZGlj YXRlcyB0aGUgdXNlciBzaG91bGQgYmUgcHJvbXB0ZWQgKi8KKyAgICAgICAgY2hhciAqIHAgPSBj a19rcmI0X2dldHByaW5jaXBhbCgpOworICAgICAgICBpZiAoIXAgfHwgISgqcCkpCisgICAgICAg ICAgcCA9IChjaGFyICopdWlkYnVmOyAgICAgICAgICAgLyogUHJpbmNpcGFsID0gdXNlciAqLwor ICAgICAgICBtYWtlc3RyKCYoa3JiNF9kX3ByaW5jaXBhbCksKHAgJiYgcFswXSkgPyBwIDogTlVM TCk7CisgICAgfQorICAgIG1ha2VzdHIoJihrcmI0X2luaXQucHJpbmNpcGFsKSxrcmI0X2RfcHJp bmNpcGFsKTsKK30KKworLyogIEQgTyBBIFUgVCBIICAtLSAgQVVUSEVOVElDQVRFIGFjdGlvbiBy b3V0aW5lICAqLworCitpbnQKK2RvYXV0aChjeCkgaW50IGN4OyB7ICAgICAgICAgICAgICAgICAg ICAvKiBBVVRIRU5USUNBVEUgYWN0aW9uIHJvdXRpbmUgKi8KKyAgICBpbnQgcmMgPSAwOyAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBSZXR1cm4gY29kZSAqLworCisjaWZkZWYgQ0tfQVVUSEVO VElDQVRJT04KKyNpZmRlZiBPUzIKKyAgICBpZiAoIWNrX3NlY3VyaXR5X2xvYWRkbGwoKSkgICAg ICAgICAvKiBMb2FkIHZhcmlvdXMgRExMcyAqLworICAgICAgcmV0dXJuKHJjKTsKKyNlbmRpZiAv KiBPUzIgKi8KKyAgICBpZiAoa3JiX29wLnZlcnNpb24gPT0gNCkgeyAgICAgICAgICAvKiBWZXJz aW9uID0gNCAqLworI2lmZGVmIENPTU1FTlQKKyAgICAgICAgc2hvX2F1dGgoQVVUSFRZUEVfS0VS QkVST1NfVjQpOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAgaWYgKCFja19rcmI0X2lz X2luc3RhbGxlZCgpKSB7CisgICAgICAgICAgICBwcmludGYoIj9LZXJiZXJvcyA0IGlzIG5vdCBp bnN0YWxsZWRcbiIpOworICAgICAgICAgICAgcmV0dXJuKDApOworICAgICAgICB9CisgICAgICAg IHN3aXRjaCAoa3JiX2FjdGlvbikgeyAgICAgICAgICAgLyogUGVyZm9ybSBWNCBmdW5jdGlvbnMg Ki8KKyAgICAgICAgICBjYXNlIEtSQl9BX0lOOiAgICAgICAgICAgICAgICAvKiBJTklUICovCisg ICAgICAgICAgICByYyB8PSAhKGNrX2tyYjRfaW5pdFRHVCgma3JiX29wLCZrcmI0X2luaXQpIDwg MCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEtSQl9BX0RFOiAgICAgICAg ICAgICAgICAvKiBERVNUUk9ZICovCisgICAgICAgICAgICByYyB8PSAhKGNrX2tyYjRfZGVzdHJv eSgma3JiX29wKSA8IDApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBLUkJf QV9MQzogICAgICAgICAgICAgICAgLyogTElTVC1DUkVERU5USUFMUyAqLworICAgICAgICAgICAg cmMgfD0gIShja19rcmI0X2xpc3RfY3JlZHMoJmtyYl9vcCkgPCAwKTsKKyAgICAgICAgICAgIGJy ZWFrOworICAgICAgICB9CisgICAgfQorICAgIGlmIChrcmJfb3AudmVyc2lvbiA9PSA1KSB7ICAg ICAgICAgIC8qIFY1IGZ1bmN0aW9ucyAqLworI2lmZGVmIENPTU1FTlQKKyAgICAgICAgc2hvX2F1 dGgoQVVUSFRZUEVfS0VSQkVST1NfVjUpOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAg aWYgKCFja19rcmI1X2lzX2luc3RhbGxlZCgpKSB7CisgICAgICAgICAgICBwcmludGYoIj9LZXJi ZXJvcyA1IGlzIG5vdCBpbnN0YWxsZWRcbiIpOworICAgICAgICAgICAgcmV0dXJuKDApOworICAg ICAgICB9CisgICAgICAgIHN3aXRjaCAoa3JiX2FjdGlvbikgeworICAgICAgICAgIGNhc2UgS1JC X0FfSU46ICAgICAgICAgICAgICAgIC8qIElOSVQgKi8KKyAgICAgICAgICAgIHJjIHw9ICEoY2tf a3JiNV9pbml0VEdUKCZrcmJfb3AsJmtyYjVfaW5pdCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBrcmI1X2luaXQuZ2V0azQgPyAma3JiNF9pbml0IDogMCkgPCAwKTsKKyAg ICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgS1JCX0FfREU6ICAgICAgICAgICAgICAg IC8qIERFU1RST1kgKi8KKyAgICAgICAgICAgIHJjIHw9ICEoY2tfa3JiNV9kZXN0cm95KCZrcmJf b3ApIDwgMCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEtSQl9BX0xDOiAg ICAgICAgICAgICAgICAvKiBMSVNULUNSRURFTlRJQUxTICovCisgICAgICAgICAgICBpZiAoa3Ji X29wLnZlcnNpb24gPT0gMCkKKyAgICAgICAgICAgICAgcHJpbnRmKCJcbiIpOworICAgICAgICAg ICAgcmMgfD0gIShja19rcmI1X2xpc3RfY3JlZHMoJmtyYl9vcCwma3JiNV9sYykgPCAwKTsKKyAg ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorI2Vsc2UKKyNpZm5kZWYgTk9JQ1AK KyNpZm5kZWYgTk9TSE9XCisgICAgcmMgPSBzaG9fYXV0aCgwKTsgICAgICAgICAgICAgICAgICAg LyogU2hvdyBhbGwgKi8KKyNlbmRpZiAvKiBOT1NIT1cgKi8KKyNlbmRpZiAvKiBOT0lDUCAqLwor I2VuZGlmIC8qIENLX0FVVEhFTlRJQ0FUSU9OICovCisgICAgcmV0dXJuKHJjKTsKK30KKyNlbmRp ZiAvKiBDS19LRVJCRVJPUyAqLworCisjaWZkZWYgVENQU09DS0VUCisjaWZuZGVmIE9TMgorI2lm bmRlZiBOT0xJU1RFTiAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZvciBpbmNvbWluZyBjb25u ZWN0aW9ucyAqLworCisjaWZuZGVmIElOQUREUl9BTlkKKyNkZWZpbmUgSU5BRERSX0FOWSAwCisj ZW5kaWYgLyogSU5BRERSX0FOWSAqLworCitfUFJPVE9UWVAoIGludCB0dGJ1ZnIsICggVk9JRCAp ICk7CitfUFJPVE9UWVAoIGludCB0Y3BzcnZfb3BlbiwgKGNoYXIgKiwgaW50ICosIGludCwgaW50 ICkgKTsKKworc3RhdGljIHVuc2lnbmVkIHNob3J0IHRjcHNydl9wb3J0ID0gMDsKKworI2VuZGlm IC8qIE5PTElTVEVOICovCisjZW5kaWYgLyogT1MyICovCisKK3N0YXRpYyBjaGFyIHN2Y2J1Zls4 MF07ICAgICAgICAgICAgICAgICAvKiBUQ1Agc2VydmljZSBzdHJpbmcgKi8KK3N0YXRpYyBpbnQg c3ZjbnVtID0gMDsgICAgICAgICAgICAgICAgICAvKiBUQ1AgcG9ydCBudW1iZXIgKi8KKworI2Vu ZGlmIC8qIFRDUFNPQ0tFVCAqLworCisvKgorICBUQ1BJUExJQiBtZWFucyB1c2Ugc2VwYXJhdGUg c29ja2V0IGNhbGxzIGZvciBpL28sIHdoaWxlIG9uIFVOSVggdGhlCisgIG5vcm1hbCBmaWxlIHN5 c3RlbSBjYWxscyBhcmUgdXNlZCBmb3IgVENQL0lQIHNvY2tldHMgdG9vLgorICBNZWFucyAiREVD X1RDUElQIG9yIE1VTFRJTkVUIG9yIFdJTlRDUCBvciBPUzIgb3IgQkVCT1giIChzZWUgY2tjbmV0 LmgpLAorKi8KKworI2lmZGVmIFRDUElQTElCCisKKy8qIEZvciBidWZmZXJlZCBuZXR3b3JrIHJl YWRzLi4uICovCisvKgorICBJZiB0aGUgYnVmZmVyaW5nIGNvZGUgaXMgd3JpdHRlbiByaWdodCwg aXQgc2hvdWxkbid0IG1hdHRlcgorICBob3cgbG9uZyB0aGlzIGJ1ZmZlciBpcy4KKyovCisjaWZk ZWYgT1MyCisjaWZkZWYgTlQKKyNkZWZpbmUgVFRJQlVGTCA2NDI0MCAgICAgICAgICAgICAgICAg ICAvKiA0NCAqIDE0NjAgKE1TUykgKi8KKyNlbHNlCisjZGVmaW5lIFRUSUJVRkwgMzIxMjAgICAg ICAgICAgICAgICAgICAgLyogMjIgKiAxNDYwIChNU1MpICovCisjZW5kaWYgLyogTlQgKi8KKyNl bHNlIC8qIE9TMiAqLworI2RlZmluZSBUVElCVUZMIDgxOTEgICAgICAgICAgICAgICAgICAgIC8q IExldCdzIHVzZSA4Sy4gKi8KKyNlbmRpZiAvKiBPUzIgKi8KKworQ0hBUiB0dGlidWZbVFRJQlVG TCsxXTsKKworLyoKKyAgc2VsZWN0KCkgaXMgdXNlZCBpbiBwcmVmZXJlbmNlIHRvIGFsYXJtKCkv c2lnbmFsKCksIGJ1dCBkaWZmZXJlbnQgc3lzdGVtcworICB1c2UgZGlmZmVyZW50IGZvcm1zIG9m IHNlbGVjdCgpLi4uCisqLworI2lmbmRlZiBOT1NFTEVDVCAgICAgICAgIC8qIE9wdGlvbiB0byBv dmVycmlkZSBCU0RTRUxFQ1QgKi8KKyNpZmRlZiBCRUxMVjEwCisvKgorICBOb3RlOiBBbHRob3Vn aCBCRUxMVjEwIGRvZXMgaGF2ZSBUQ1AvSVAgc3VwcG9ydCwgYW5kIGRvZXMgdXNlIHRoZSB1bmlx dWUKKyAgZm9ybSBvZiBzZWxlY3QoKSB0aGF0IGlzIGV2aWRlbnQgaW4gdGhpcyBtb2R1bGUgKGFu ZCBpbiBja3V0aW8uYyksIGl0IGRvZXMKKyAgbm90IGhhdmUgYSBzb2NrZXRzIGxpYnJhcnkgYW5k IHNvIHdlIGNhbid0IGJ1aWxkIEtlcm1pdCBUQ1AvSVAgc3VwcG9ydCBmb3IKKyAgaXQuICBGb3Ig dGhpcywgc29tZWJvZHkgd291bGQgaGF2ZSB0byB3cml0ZSBUQ1AvSVAgc3RyZWFtcyBjb2RlLgor Ki8KKyNkZWZpbmUgQkVMTFNFTEVDVAorI2lmbmRlZiBGRF9TRVRTSVpFCisjZGVmaW5lIEZEX1NF VFNJWkUgMTI4CisjZW5kaWYgLyogRkRfU0VUU0laRSAqLworI2Vsc2UKKyNpZmRlZiBXSU5UQ1Ag ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBWTVMgd2l0aCBXb2xsb25nb25nIFdJTi9UQ1Ag Ki8KKyNpZm5kZWYgT0xEX1RXRyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUV0cgMy4yIGhh cyBvbmx5IHNlbGVjdChyZWFkKSAqLworI2RlZmluZSBCU0RTRUxFQ1QKKyNlbmRpZiAvKiBPTERf VFdHICovCisjZWxzZQorI2lmZGVmIENNVV9UQ1BJUCAgICAgICAgICAgICAgICAgICAgICAgIC8q IExJQkNNVSBjYW4gZG8gc2VsZWN0ICovCisjZGVmaW5lIEJTRFNFTEVDVAorI2Vsc2UKKyNpZmRl ZiBERUNfVENQSVAKKyNkZWZpbmUgQlNEU0VMRUNUCisjZWxzZQorI2lmZGVmIE9TMiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIE9TLzIgd2l0aCBUQ1AvSVAgKi8KKyNpZmRlZiBOVAor I2RlZmluZSBCU0RTRUxFQ1QKKyNlbHNlIC8qIE5UICovCisjZGVmaW5lIElCTVNFTEVDVAorI2Vu ZGlmIC8qIE5UICovCisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogREVDX1RDUElQICovCisj ZW5kaWYgLyogQ01VX1RDUElQICovCisjZW5kaWYgLyogV0lOVENQICovCisjZW5kaWYgLyogQkVM TFYxMCAqLworI2VuZGlmIC8qIE5PU0VMRUNUICovCisvKgorICBPdGhlcnMgKFRHViwgVENQd2Fy ZSwgLi4uKSB1c2UgYWxhcm0oKS9zaWduYWwoKS4gIFRoZSBCU0RTRUxFQ1QgY2FzZSBkb2VzIG5v dAorICBjb21waWxlIGF0IGFsbDsgdGhlIElCTVNFTEVDVCBjYXNlIGNvbXBpbGVzIGFuZCBsaW5r cyBidXQgY3Jhc2hlcyBhdCBydW50aW1lLgorICBOT1RFOiBJZiBhbnkgb2YgdGhlc2UgY2FuIGJl IGNvbnZlcnRlZCB0byBzZWxlY3QoKSwgdGhleSBzaG91bGQgYmUgZm9yIHR3bworICByZWFzb25z OiAoMSkgSXQncyBhIGxvdCBmYXN0ZXI7ICgyKSBjZXJ0YWluIHNvY2tldHMgbGlicmFyaWVzIGRv IG5vdCBsaWtlCisgIHRoZWlyIHNvY2tldF9yZWFkKCkgY2FsbHMgdG8gYmUgaW50ZXJydXB0ZWQ7 IHN1YnNlcXVlbnQgc29ja2V0X3JlYWQoKSdzIHRlbmQKKyAgdG8gZmFpbCB3aXRoIEVCVVNZLiAg VGhpcyBoYXBwZW5lZCBpbiB0aGUgVUNYIGNhc2UgYmVmb3JlIGl0IHdhcyBjb252ZXJ0ZWQKKyAg dG8gdXNlIHNlbGVjdCgpLgorKi8KKyNpZm5kZWYgT1MyCisjaWZuZGVmIFZNUworc3RhdGljICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRoZXNlIGFyZSB1c2VkIGluIENLVlRJ Ty5DICovCisjZW5kaWYgLyogVk1TICovICAgICAgICAgICAgICAgICAgICAgICAgLyogQW5kIGlu IENLT05FVC5DICAgICAgICAgICAgKi8KKyNlbmRpZiAvKiBPUzIgKi8KK2ludAorICB0dGlicCA9 IDAsCisgIHR0aWJuID0gMDsKKy8qCisgIFJlYWQgYnl0ZXMgZnJvbSBuZXR3b3JrIGludG8gaW50 ZXJuYWwgYnVmZmVyIHR0aWJ1ZltdLgorICBUbyBiZSBjYWxsZWQgd2hlbiBpbnB1dCBidWZmZXIg aXMgZW1wdHksIGkuZS4gd2hlbiB0dGlibiA9PSAwLgorCisgIE90aGVyIG5ldHdvcmsgcmVhZGlu ZyByb3V0aW5lcywgbGlrZSB0dGluYywgdHRpbmwsIHR0eGluLCBzaG91bGQgY2hlY2sgdGhlCisg IGludGVybmFsIGJ1ZmZlciBmaXJzdCwgYW5kIGNhbGwgdGhpcyByb3V0aW5lIGZvciBhIHJlZmls bCBpZiBuZWNlc3NhcnkuCisKKyAgUmV0dXJucyAtMSBvbiBlcnJvciwgMCBpZiBub3RoaW5nIGhh cHBlbnMuICBXaGVuIGRhdGEgaXMgcmVhZCBzdWNjZXNzZnVsbHksCisgIHJldHVybnMgbnVtYmVy IG9mIGJ5dGVzIHJlYWQsIGFuZCBzZXRzIGdsb2JhbCB0dGlibiB0byB0aGF0IG51bWJlciBhbmQK KyAgdHRpYnAgKHRoZSBidWZmZXIgcG9pbnRlcikgdG8gemVyby4KKyovCitfUFJPVE9UWVAoIGlu dCB0dGJ1ZnIsICggVk9JRCApICk7CitpbnQKK3R0YnVmcigpIHsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBUVCBCdWZmZXIgUmVhZCAqLworICAgIGludCBjb3VudDsKKworICAgIGlm ICh0dG5ldCAhPSBORVRfVENQQikgICAgICAgICAgICAgIC8qIEZpcnN0IG1ha2Ugc3VyZSBjdXJy ZW50IG5ldCBpcyAqLworICAgICAgcmV0dXJuKC0xKTsgICAgICAgICAgICAgICAgICAgICAgIC8q IFRDUC9JUDsgaWYgbm90LCBkbyBub3RoaW5nLiAqLworCisjaWZkZWYgT1MyCisgICAgUmVxdWVz dFRDUElQTXV0ZXgoU0VNX0lOREVGSU5JVEVfV0FJVCk7CisjZW5kaWYgLyogT1MyICovCisKKyAg ICBpZiAodHRpYm4gPiAwKSB7ICAgICAgICAgICAgICAgICAgICAvKiBPdXIgaW50ZXJuYWwgYnVm ZmVyIGlzIG5vdCBlbXB0eSwgKi8KKyNpZmRlZiBPUzIKKyAgICAgICAgUmVsZWFzZVRDUElQTXV0 ZXgoKTsKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAgcmV0dXJuKHR0aWJuKTsgICAgICAgICAg ICAgICAgICAvKiBzbyBrZWVwIHVzaW5nIGl0LiAqLworICAgIH0KKworICAgIGlmICh0dHlmZCA9 PSAtMSkgeyAgICAgICAgICAgICAgICAgIC8qIE5vIGNvbm5lY3Rpb24sIGVycm9yICovCisjaWZk ZWYgT1MyCisgICAgICAgIFJlbGVhc2VUQ1BJUE11dGV4KCk7CisjZW5kaWYgLyogT1MyICovCisg ICAgICAgIHJldHVybigtMik7CisgICAgfQorCisgICAgdHRpYnAgPSAwOyAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogRWxzZSByZXNldCBwb2ludGVyIHRvIGJlZ2lubmluZyAqLworCisjaWZk ZWYgV0lOVENQCisgICAgY291bnQgPSA1MTI7ICAgICAgICAgICAgICAgICAgICAgICAgLyogVGhp cyB3b3JrcyBmb3IgV0lOL1RDUCAqLworI2Vsc2UKKyNpZmRlZiBERUNfVENQSVAKKyAgICBjb3Vu dCA9IDUxMjsgICAgICAgICAgICAgICAgICAgICAgICAvKiBVQ1ggKi8KKyNlbHNlCisjaWZkZWYg T1MyCisgICAgY291bnQgPSBUVElCVUZMOworI2Vsc2UgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIE11bHRpbmV0LCBldGMuICovCisgICAgY291bnQgPSB0dGNoaygpOyAgICAg ICAgICAgICAgICAgICAgLyogQ2hlY2sgbmV0d29yayBpbnB1dCBidWZmZXIsICovCisgICAgaWYg KHR0aWJuID4gMCkgeyAgICAgICAgICAgICAgICAgICAgLyogd2hpY2ggY2FuIHB1dCBhIGNoYXIg dGhlcmUhICovCisgICAgICAgIGRlYnVnKEYxMTEsInR0YnVmciIsInR0Y2hrKCkgcmV0dXJucyIs Y291bnQpOworI2lmZGVmIE9TMgorICAgICAgICBSZWxlYXNlVENQSVBNdXRleCgpOworI2VuZGlm IC8qIE9TMiAqLworICAgICAgICByZXR1cm4odHRpYm4pOworICAgIH0KKyAgICBpZiAoY291bnQg PCAwKSB7ICAgICAgICAgICAgICAgICAgICAgLyogUmVhZCBlcnJvciAtIGNvbm5lY3Rpb24gY2xv c2VkICovCisjaWZkZWYgT1MyCisgICAgICAgIFJlbGVhc2VUQ1BJUE11dGV4KCk7CisjZW5kaWYg LyogT1MyICovCisgICAgICAgIHJldHVybigtMik7CisgICAgfQorICAgIGVsc2UgaWYgKGNvdW50 ID4gVFRJQlVGTCkgICAgICAgICAgIC8qIFRvbyBtYW55IHRvIHJlYWQgKi8KKyAgICAgIGNvdW50 ID0gVFRJQlVGTDsKKyAgICBlbHNlIGlmIChjb3VudCA9PSAwKSAgICAgICAgICAgICAgICAvKiBO b25lLCBzbyBmb3JjZSBibG9ja2luZyByZWFkICovCisgICAgICBjb3VudCA9IDE7CisjZW5kaWYg LyogT1MyICovCisjZW5kaWYgLyogREVDX1RDUElQICovCisjZW5kaWYgLyogV0lOVENQICovCisg ICAgZGVidWcoRjEwMSwidHRidWZyIGNvdW50IDEiLCIiLGNvdW50KTsKKworI2lmZGVmIENLX1NT TAorICAgIGlmIChzc2xfYWN0aXZlX2ZsYWcgfHwgdGxzX2FjdGl2ZV9mbGFnKSB7CisgICAgICAg IGludCBlcnJvcjsKKyAgICAgIHNzbF9yZWFkOgorICAgICAgICBpZiAoc3NsX2FjdGl2ZV9mbGFn KQorICAgICAgICAgIGNvdW50ID0gU1NMX3JlYWQoc3NsX2NvbiwgdHRpYnVmLCBjb3VudCk7Cisg ICAgICAgIGVsc2UKKyAgICAgICAgICBjb3VudCA9IFNTTF9yZWFkKHRsc19jb24sIHR0aWJ1Ziwg Y291bnQpOworICAgICAgICBlcnJvciA9IFNTTF9nZXRfZXJyb3Ioc3NsX2FjdGl2ZV9mbGFnP3Nz bF9jb246dGxzX2Nvbixjb3VudCk7CisgICAgICAgIHN3aXRjaCAoZXJyb3IpIHsKKyAgICAgICAg ICBjYXNlIFNTTF9FUlJPUl9OT05FOgorICAgICAgICAgICAgZGVidWcoRjExMSwidHRidWZyIFNT TF9FUlJPUl9OT05FIiwiY291bnQiLGNvdW50KTsKKyAgICAgICAgICAgIGlmIChjb3VudCA+IDAp IHsKKyAgICAgICAgICAgICAgICB0dGlicCA9IDA7ICAgICAgICAgICAgICAvKiBSZXNldCBidWZm ZXIgcG9pbnRlci4gKi8KKyAgICAgICAgICAgICAgICB0dGlibiA9IGNvdW50OworI2lmZGVmIE9T MgorICAgICAgICAgICAgICAgIFJlbGVhc2VUQ1BJUE11dGV4KCk7CisjZW5kaWYgLyogT1MyICov CisgICAgICAgICAgICAgICAgcmV0dXJuKHR0aWJuKTsgICAgICAgICAgLyogUmV0dXJuIGJ1ZmZl ciBjb3VudC4gKi8KKyAgICAgICAgICAgIH0gZWxzZSBpZiAoY291bnQgPCAwKSB7CisjaWZkZWYg T1MyCisgICAgICAgICAgICAgICAgUmVsZWFzZVRDUElQTXV0ZXgoKTsKKyNlbmRpZiAvKiBPUzIg Ki8KKyAgICAgICAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAg ICAgICAgICAgICAgICBuZXRjbG9zKCk7CisjaWZkZWYgT1MyCisgICAgICAgICAgICAgICAgUmVs ZWFzZVRDUElQTXV0ZXgoKTsKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAgICAgICAgICByZXR1 cm4oLTIpOworICAgICAgICAgICAgfQorICAgICAgICAgIGNhc2UgU1NMX0VSUk9SX1dBTlRfV1JJ VEU6CisgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJ0dGJ1ZnIgU1NMX0VSUk9SX1dBTlRfV1JJVEUi LCIiLDApOworI2lmZGVmIE9TMgorICAgICAgICAgICAgICBSZWxlYXNlVENQSVBNdXRleCgpOwor I2VuZGlmIC8qIE9TMiAqLworICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgICBjYXNl IFNTTF9FUlJPUl9XQU5UX1JFQUQ6CisgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJ0dGJ1ZnIgU1NM X0VSUk9SX1dBTlRfUkVBRCIsIiIsMCk7CisjaWZkZWYgT1MyCisgICAgICAgICAgICBSZWxlYXNl VENQSVBNdXRleCgpOworI2VuZGlmIC8qIE9TMiAqLworICAgICAgICAgICAgcmV0dXJuKC0xKTsK KyAgICAgICAgICBjYXNlIFNTTF9FUlJPUl9TWVNDQUxMOgorICAgICAgICAgICAgICBpZiAoIGNv dW50ID09IDAgKSB7IC8qIEVPRiAqLworICAgICAgICAgICAgICAgICAgbmV0Y2xvcygpOworI2lm ZGVmIE9TMgorICAgICAgICAgICAgICAgICAgUmVsZWFzZVRDUElQTXV0ZXgoKTsKKyNlbmRpZiAv KiBPUzIgKi8KKyAgICAgICAgICAgICAgICAgIHJldHVybigtMik7CisgICAgICAgICAgICAgIH0g ZWxzZSB7CisgICAgICAgICAgICAgICAgICBpbnQgcmMgPSAtMTsKKyNpZmRlZiBOVAorICAgICAg ICAgICAgICAgICAgaW50IGdsZSA9IEdldExhc3RFcnJvcigpOworICAgICAgICAgICAgICAgICAg ZGVidWcoRjExMSwidHRidWZyIFNTTF9FUlJPUl9TWVNDQUxMIiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAiR2V0TGFzdEVycm9yKCkiLGdsZSk7CisgICAgICAgICAgICAgICAgICByYyA9IG9z MnNvY2tldGVycm9yKGdsZSk7CisgICAgICAgICAgICAgICAgICBpZiAocmMgPT0gLTEpCisgICAg ICAgICAgICAgICAgICAgICAgcmMgPSAtMjsKKyAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCBy YyA9PSAtMiApCisgICAgICAgICAgICAgICAgICAgICAgcmMgPSAtMTsKKyNlbmRpZiAvKiBOVCAq LworI2lmZGVmIE9TMgorICAgICAgICAgICAgICAgICAgUmVsZWFzZVRDUElQTXV0ZXgoKTsKKyNl bmRpZiAvKiBPUzIgKi8KKyAgICAgICAgICAgICAgICAgIHJldHVybihyYyk7CisgICAgICAgICAg ICAgIH0KKyAgICAgICAgICBjYXNlIFNTTF9FUlJPUl9XQU5UX1g1MDlfTE9PS1VQOgorICAgICAg ICAgICAgZGVidWcoRjEwMCwidHRidWZyIFNTTF9FUlJPUl9XQU5UX1g1MDlfTE9PS1VQIiwiIiww KTsKKyAgICAgICAgICAgIG5ldGNsb3MoKTsKKyNpZmRlZiBPUzIKKyAgICAgICAgICAgICAgUmVs ZWFzZVRDUElQTXV0ZXgoKTsKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAgICAgIHJldHVybigt Mik7CisgICAgICAgICAgY2FzZSBTU0xfRVJST1JfU1NMOgorICAgICAgICAgICAgICBpZiAoYmlv X2VyciE9TlVMTCkgeworICAgICAgICAgICAgICAgICAgaW50IGxlbjsKKyAgICAgICAgICAgICAg ICAgIGV4dGVybiBjaGFyIHNzbF9lcnJbXTsKKyAgICAgICAgICAgICAgICAgIEJJT19wcmludGYo YmlvX2VyciwidHRidWZyIFNTTF9FUlJPUl9TU0xcbiIpOworICAgICAgICAgICAgICAgICAgRVJS X3ByaW50X2Vycm9ycyhiaW9fZXJyKTsKKyAgICAgICAgICAgICAgICAgIGxlbiA9IEJJT19yZWFk KGJpb19lcnIsc3NsX2VycixTU0xfRVJSX0JGU1opOworICAgICAgICAgICAgICAgICAgc3NsX2Vy cltsZW4gPCBTU0xfRVJSX0JGU1ogPyBsZW4gOiBTU0xfRVJSX0JGU1pdID0gJ1wwJzsKKyAgICAg ICAgICAgICAgICAgIGRlYnVnKEYxMTAsInR0YnVmciBTU0xfRVJST1JfU1NMIixzc2xfZXJyLDAp OworICAgICAgICAgICAgICAgICAgaWYgKHNzbF9kZWJ1Z19mbGFnKSAgICAgICAgICAgICAgICAg IAorICAgICAgICAgICAgICAgICAgICAgIHByaW50Zihzc2xfZXJyKTsKKyAgICAgICAgICAgICAg fSBlbHNlIGlmIChzc2xfZGVidWdfZmxhZykgeworICAgICAgICAgICAgICAgICAgZGVidWcoRjEw MCwidHRidWZyIFNTTF9FUlJPUl9TU0wiLCIiLDApOworICAgICAgICAgICAgICAgICAgZmZsdXNo KHN0ZGVycik7CisgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwidHRidWZyIFNTTF9F UlJPUl9TU0xcbiIpOworICAgICAgICAgICAgICAgICAgRVJSX3ByaW50X2Vycm9yc19mcChzdGRl cnIpOworICAgICAgICAgICAgICB9CisjaWZkZWYgQ09NTUVOVAorCSAgICAgIG5ldGNsb3MoKTsK KyNlbmRpZiAvKiBDT01NRU5UICovCisjaWZkZWYgT1MyCisgICAgICAgICAgICAgIFJlbGVhc2VU Q1BJUE11dGV4KCk7CisjZW5kaWYgLyogT1MyICovCisgICAgICAgICAgICByZXR1cm4oLTIpOwor ICAgICAgICAgIGNhc2UgU1NMX0VSUk9SX1pFUk9fUkVUVVJOOgorICAgICAgICAgICAgZGVidWco RjEwMCwidHRidWZyIFNTTF9FUlJPUl9aRVJPX1JFVFVSTiIsIiIsMCk7CisgICAgICAgICAgICBu ZXRjbG9zKCk7CisjaWZkZWYgT1MyCisgICAgICAgICAgICAgIFJlbGVhc2VUQ1BJUE11dGV4KCk7 CisjZW5kaWYgLyogT1MyICovCisgICAgICAgICAgICByZXR1cm4oLTIpOworICAgICAgICAgIGRl ZmF1bHQ6CisgICAgICAgICAgICAgIGRlYnVnKEYxMDAsInR0YnVmciBTU0xfRVJST1JfPz8/Pz8i LCIiLDApOworICAgICAgICAgICAgICBuZXRjbG9zKCk7CisjaWZkZWYgT1MyCisgICAgICAgICAg ICAgIFJlbGVhc2VUQ1BJUE11dGV4KCk7CisjZW5kaWYgLyogT1MyICovCisgICAgICAgICAgICAg IHJldHVybigtMik7CisgICAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBDS19TU0wgKi8KKwor I2lmZGVmIENPTU1FTlQKKy8qCisgVGhpcyBpcyBmb3Igbm9uYmxvY2tpbmcgcmVhZHMsIHdoaWNo IHdlIGRvbid0IGRvIGFueSBtb3JlLiAgVGhpcyBjb2RlIGRpZG4ndAorIHdvcmsgYW55d2F5LCBp biB0aGUgc2Vuc2UgdGhhdCBhIGJyb2tlbiBjb25uZWN0aW9uIHdhcyBuZXZlciBzZW5zZWQuCisq LworICAgIGlmICgoY291bnQgPSBzb2NrZXRfcmVhZCh0dHlmZCwmdHRpYnVmW3R0aWJwK3R0aWJu XSxjb3VudCkpIDwgMSkgeworICAgICAgICBpZiAoY291bnQgPT0gLTEgJiYgc29ja2V0X2Vycm5v ID09IEVXT1VMREJMT0NLKSB7CisgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJ0dGJ1ZnIgZmluZHMg bm90aGluZyIsIiIsMCk7CisjaWZkZWYgT1MyCisgICAgICAgICAgICBSZWxlYXNlVENQSVBNdXRl eCgpOworI2VuZGlmIC8qIE9TMiAqLworICAgICAgICAgICAgcmV0dXJuKDApOworICAgICAgICB9 IGVsc2UgeworICAgICAgICAgICAgZGVidWcoRjEwMSwidHRidWZyIHNvY2tldF9yZWFkIGVycm9y IiwiIixzb2NrZXRfZXJybm8pOworI2lmZGVmIE9TMgorICAgICAgICAgICAgUmVsZWFzZVRDUElQ TXV0ZXgoKTsKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAgICAgIHJldHVybigtMSk7CisgICAg ICAgIH0KKworICAgIH0gZWxzZSBpZiAoY291bnQgPT0gMCkgeworICAgICAgICBkZWJ1ZyhGMTAw LCJ0dGJ1ZnIgc29ja2V0IGVvZiIsIiIsMCk7CisjaWZkZWYgT1MyCisgICAgICAgIFJlbGVhc2VU Q1BJUE11dGV4KCk7CisjZW5kaWYgLyogT1MyICovCisgICAgICAgIHJldHVybigtMSk7CisgICAg fQorI2Vsc2UgLyogQ09NTUVOVCAqLworCisvKiBUaGlzIGlzIGZvciBibG9ja2luZyByZWFkcyAq LworCisjaWZuZGVmIFZNUworI2lmZGVmIFNPX09PQklOTElORQorICAgIHsKKyAgICAgICAgaW50 IG91dG9mYmFuZCA9IDA7CisjaWZkZWYgQkVMTFNFTEVDVAorICAgICAgICBpZiAoc2VsZWN0KDEy OCwgTlVMTCwgTlVMTCwgZWZkcywgMCkgPiAwICYmIEZEX0lTU0VUKHR0eWZkLCBlZmRzKSkKKyAg ICAgICAgICBvdXRvZmJhbmQgPSAxOworI2Vsc2UKKyNpZmRlZiBCU0RTRUxFQ1QKKyAgICAgICAg ZmRfc2V0IGVmZHM7CisgICAgICAgIHN0cnVjdCB0aW1ldmFsIHR2OworICAgICAgICBGRF9aRVJP KCZlZmRzKTsKKyAgICAgICAgRkRfU0VUKHR0eWZkLCAmZWZkcyk7CisgICAgICAgIHR2LnR2X3Nl YyAgPSB0di50dl91c2VjID0gMEw7CisgICAgICAgIGRlYnVnKEYxMDAsIk91dC1vZi1CYW5kIEJT RFNFTEVDVCIsIiIsMCk7CisjaWZkZWYgTlQKKyAgICAgICAgV1NBU2FmZVRvQ2FuY2VsID0gMTsK KyNlbmRpZiAvKiBOVCAqLworICAgICAgICBpZiAoc2VsZWN0KEZEX1NFVFNJWkUsIE5VTEwsIE5V TEwsICZlZmRzLCAmdHYpID4gMCAmJgorICAgICAgICAgICAgRkRfSVNTRVQodHR5ZmQsICZlZmRz KSkKKyAgICAgICAgICBvdXRvZmJhbmQgPSAxOworI2lmZGVmIE5UCisgICAgICAgIFdTQVNhZmVU b0NhbmNlbCA9IDA7CisjZW5kaWYgLyogTlQgKi8KKyNlbHNlIC8qICFCU0RTRUxFQ1QgKi8KKyNp ZmRlZiBJQk1TRUxFQ1QKKy8qIElzIHVzZWQgYnkgT1MvMiAuLi4gKi8KKy8qIC4uLiBhbmQgaXQg Y2FtZSBpbiBoYW5keSEgIEZvciBvdXIgVENQL0lQIGxheWVyLCBpdCBhdm9pZHMgYWxsIHRoZSBm ZF9zZXQgKi8KKy8qIGFuZCB0aW1ldmFsIHN0dWZmIHNpbmNlIHRoaXMgaXMgdGhlIG9ubHkgcGxh Y2Ugd2hlcmUgaXQgaXMgdXNlZC4gKi8KKyAgICAgICAgaW50IHNvY2tldCA9IHR0eWZkOworICAg ICAgICBkZWJ1ZyhGMTAwLCJPdXQtb2YtQmFuZCBJQk1TRUxFQ1QiLCIiLDApOworICAgICAgICBp ZiAoKHNlbGVjdCgmc29ja2V0LCAwLCAwLCAxLCAwTCkgPT0gMSkgJiYgKHNvY2tldCA9PSB0dHlm ZCkpCisgICAgICAgICAgb3V0b2ZiYW5kID0gMTsKKyNlbHNlIC8qICFJQk1TRUxFQ1QgKi8KKy8q CisgIElmIHdlIGNhbid0IHVzZSBzZWxlY3QoKSwgdGhlbiB3ZSB1c2UgdGhlIHJlZ3VsYXIgYWxh cm0oKS9zaWduYWwoKQorICB0aW1lb3V0IG1lY2hhbmlzbS4KKyovCisgICAgICBkZWJ1ZyhGMTAx LCJPdXQtb2YtQmFuZCBkYXRhIG5vdCBzdXBwb3J0ZWQiLCIiLDApOworICAgICAgb3V0b2ZiYW5k ID0gMDsKKworI2VuZGlmIC8qIElCTVNFTEVDVCAqLworI2VuZGlmIC8qIEJTRFNFTEVDVCAqLwor I2VuZGlmIC8qIEJFTExTRUxFQ1QgKi8KKyAgICAgIGlmIChvdXRvZmJhbmQpIHsKKyAgICAgICAg IC8qIEdldCB0aGUgVXJnZW50IERhdGEgKi8KKyAgICAgICAgIC8qIGlmIE9PQklOTElORSBpcyBk aXNhYmxlZCB0aGlzIHNob3VsZCBiZSBvbmx5IGEgc2luZ2xlIGJ5dGUgICAgICAqLworICAgICAg ICAgLyogTVMgV2luc29jayBoYXMgYSBidWcgaW4gV2luZG93cyA5NS4gIEV4dHJhIGJ5dGVzIGFy ZSBkZWxpdmVyZWQgICovCisgICAgICAgICAvKiBUaGF0IHdlcmUgbmV2ZXIgc2VudC4gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNpZmRlZiBPUzIKKyAgICAg ICAgICBSZXF1ZXN0VENQSVBNdXRleChTRU1fSU5ERUZJTklURV9XQUlUKTsKKyNlbmRpZiAvKiBP UzIgKi8KKyAgICAgICAgICBjb3VudCA9IHNvY2tldF9yZWN2KHR0eWZkLCZ0dGlidWZbdHRpYnAr dHRpYm5dLGNvdW50LE1TR19PT0IpOworI2lmZGVmIE9TMgorICAgICAgICAgIFJlbGVhc2VUQ1BJ UE11dGV4KCk7CisjZW5kaWYgLyogT1MyICovCisgICAgICAgICAgaWYgKGNvdW50IDw9IDApIHsK KyAgICAgICAgICAgICAgaW50IHNfZXJybm8gPSBzb2NrZXRfZXJybm87CisgICAgICAgICAgICAg IGRlYnVnKEYxMDEsICJ0dGJ1ZnIgc29ja2V0X3JlY3YgTVNHX09PQiIsIiIsY291bnQpOworICAg ICAgICAgICAgICBkZWJ1ZyhGMTAxLCAidHRidWZyIHNvY2tldF9lcnJubyIsIiIsc19lcnJubyk7 CisjaWZkZWYgT1MyT05MWQorICAgICAgICAgICAgICBpZiAoY291bnQgPCAwICYmIChzX2Vycm5v ID09IDAgfHwgc19lcnJubyA9PSAyMykpIHsKKyAgICAgICAgICAgICAgICAgIC8qIFRoZXNlIGFw cGVhciBpbiBPUy8yIC0gZG9uJ3Qga25vdyB3aHkgICAqLworICAgICAgICAgICAgICAgICAgLyog aWdub3JlIGl0IGFuZCByZWFkIGFzIG5vcm1hbCBkYXRhICAgICAgICovCisgICAgICAgICAgICAg ICAgICAvKiBhbmQgYnJlYWssIHRoZW4gd2Ugd2lsbCBhdHRlbXB0IHRvIHJlYWQgKi8KKyAgICAg ICAgICAgICAgICAgIC8qIHRoZSBwb3J0IHVzaW5nIG5vcm1hbCByZWFkKCkgdGVjaG5pcXVlcyAq LworICAgICAgICAgICAgICAgICAgZGVidWcoRjEwMCwidHRidWZyIGhhbmRpbmcgYXMgaW4tYmFu ZCBkYXRhIiwiIiwwKTsKKyAgICAgICAgICAgICAgICAgIGNvdW50ID0gMTsKKyAgICAgICAgICAg ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgIG5ldGNsb3MoKTsgICAgICAgICAgICAgICAg ICAgIC8qICoqKiAqKiogKi8KKyNpZmRlZiBPUzIKKyAgICAgICAgICAgICAgICAgIFJlbGVhc2VU Q1BJUE11dGV4KCk7CisjZW5kaWYgLyogT1MyICovCisgICAgICAgICAgICAgICAgICByZXR1cm4o LTIpOworICAgICAgICAgICAgICB9CisjZWxzZSAvKiBPUzJPTkxZICovCisgICAgICAgICAgICAg IG5ldGNsb3MoKTsgICAgICAgICAgICAgICAgICAgICAgICAvKiAqKiogKioqICovCisjaWZkZWYg T1MyCisgICAgICAgICAgICAgIFJlbGVhc2VUQ1BJUE11dGV4KCk7CisjZW5kaWYgLyogT1MyICov CisgICAgICAgICAgICAgIHJldHVybigtMik7CisjZW5kaWYgLyogT1MyT05MWSAqLworICAgICAg ICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgIC8qIHdlIGdvdCBvdXQtb2YtYmFuZCBk YXRhICovCisgICAgICAgICAgICAgIGNraGV4ZHVtcCgidHRidWZyIG91dC1vZi1iYW5kIGNoYXJz IiwmdHRpYnVmW3R0aWJwK3R0aWJuXSxjb3VudCk7CisjaWZkZWYgQkVUQURFQlVHCisgICAgICAg ICAgICAgIGJsZWVwKEJQX05PVEUpOworI2VuZGlmIC8qIEJFVEFERUJVRyAqLworI2lmZGVmIFJM T0dDT0RFICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGJsYWggKi8KKyAgICAgICAgICAgICAg aWYgKHR0bnByb3RvID09IE5QX1JMT0dJTiAgfHwKKyAgICAgICAgICAgICAgICAgIHR0bnByb3Rv ID09IE5QX0s0TE9HSU4gfHwgdHRucHJvdG8gPT0gTlBfRUs0TE9HSU4gfHwKKyAgICAgICAgICAg ICAgICAgICgodHRucHJvdG8gPT0gTlBfSzVMT0dJTiB8fCB0dG5wcm90byA9PSBOUF9FSzVMT0dJ TikgJiYgCisgICAgICAgICAgICAgICAgICAhcmxvZ19pbmJhbmQpCisgICAgICAgICAgICAgICAg ICAgKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAg ICAgICAgICBXaGVuIHVyZ2VudCBkYXRhIGlzIHJlYWQgd2l0aCBNU0dfT09CIGFuZCBub3QgT09C SU5MSU5FCisgICAgICAgICAgICAgICAgICAgIHRoZW4gdXJnZW50IGRhdGEgYW5kIG5vcm1hbCBk YXRhIGFyZSBub3QgbWl4ZWQuICBTbworICAgICAgICAgICAgICAgICAgICB0cmVhdCB0aGUgZW50 aXJlIGJ1ZmZlciBhcyB1cmdlbnQgZGF0YS4KKyAgICAgICAgICAgICAgICAgICovCisgICAgICAg ICAgICAgICAgICBybG9nX29vYigmdHRpYnVmW3R0aWJwK3R0aWJuXSwgY291bnQpOworI2lmZGVm IE9TMgorICAgICAgICAgICAgICAgICAgUmVsZWFzZVRDUElQTXV0ZXgoKTsKKyNlbmRpZiAvKiBP UzIgKi8KKyAgICAgICAgICAgICAgICAgIHJldHVybiB0dGJ1ZnIoKTsKKyAgICAgICAgICAgICAg fSBlbHNlCisjZW5kaWYgLyogUkxPR0NPREUgKi8gLyogYmxhaCAqLworI2lmZGVmIENPTU1FTlQK KyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICBJIGhhdmVuJ3Qgd3JpdHRlbiB0aGlzIHll dCwgbm9yIGRvIEkga25vdyB3aGF0IGl0IHNob3VsZCBkbworICAgICAgICAgICAgICovCisgICAg ICAgICAgICAgICAgaWYgKHR0bnByb3RvID09IE5QX1RFTE5FVCkgeworICAgICAgICAgICAgICAg ICAgICB0bl9vb2IoKTsKKyNpZmRlZiBPUzIKKyAgICAgICAgICAgICAgICAgICAgUmVsZWFzZVRD UElQTXV0ZXgoKTsKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu IDA7CisgICAgICAgICAgICAgIH0gZWxzZQorI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAg ICAgICAgeworICAgICAgICAgICAgICAgICAgLyogRm9yIGFueSBwcm90b2NvbHMgd2UgZG9uJ3Qg aGF2ZSBhIHNwZWNpYWwgb3V0LW9mLWJhbmQgICovCisgICAgICAgICAgICAgICAgICAvKiBoYW5k bGVyIGZvciwganVzdCBwdXQgdGhlIGJ5dGVzIGluIHRoZSBub3JtYWwgYnVmZmVyICAgKi8KKyAg ICAgICAgICAgICAgICAgIC8qIGFuZCByZXR1cm4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAqLworCisgICAgICAgICAgICAgICAgICB0dGlicCArPSAwOyAgICAg ICAvKiBSZXNldCBidWZmZXIgcG9pbnRlci4gKi8KKyAgICAgICAgICAgICAgICAgIHR0aWJuICs9 IGNvdW50OworI2lmZGVmIERFQlVHCisgICAgICAgICAgICAgICAgICAvKiBHb3Qgc29tZSBieXRl cy4gKi8KKyAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsInR0YnVmciBjb3VudCAyIiwiIixj b3VudCk7CisgICAgICAgICAgICAgICAgICBpZiAoY291bnQgPiAwKQorICAgICAgICAgICAgICAg ICAgICAgIHR0aWJ1Zlt0dGlicCt0dGlibl0gPSAnXDAnOworICAgICAgICAgICAgICAgICAgZGVi dWcoRjExMSwidHRidWZyIHR0aWJ1ZiIsdHRpYnVmLHR0aWJwKTsKKyNlbmRpZiAvKiBERUJVRyAq LworI2lmZGVmIE9TMgorICAgICAgICAgICAgICAgICAgUmVsZWFzZVRDUElQTXV0ZXgoKTsKKyNl bmRpZiAvKiBPUzIgKi8KKyAgICAgICAgICAgICAgICAgIHJldHVybih0dGlibik7ICAgIC8qIFJl dHVybiBidWZmZXIgY291bnQuICovCisgICAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAg ICB9CisgICAgfQorI2VuZGlmIC8qIFNPX09PQklOTElORSAqLworI2VuZGlmIC8qIFZNUyAqLwor CisgICAgY291bnQgPSBzb2NrZXRfcmVhZCh0dHlmZCwmdHRpYnVmW3R0aWJwK3R0aWJuXSxjb3Vu dCk7CisgICAgaWYgKGNvdW50IDw9IDApIHsKKyAgICAgICAgaW50IHNfZXJybm8gPSBzb2NrZXRf ZXJybm87CisgICAgICAgIGRlYnVnKEYxMDEsInR0YnVmciBzb2NrZXRfcmVhZCIsIiIsY291bnQp OworICAgICAgICBkZWJ1ZyhGMTAxLCJ0dGJ1ZnIgc29ja2V0X2Vycm5vIiwiIixzX2Vycm5vKTsK KyNpZmRlZiBPUzIKKyAgICAgICAgaWYgKGNvdW50ID09IDAgfHwgb3Myc29ja2V0ZXJyb3Ioc19l cnJubykgPCAwKSB7CisgICAgICAgICAgICBuZXRjbG9zKCk7CisgICAgICAgICAgICBSZWxlYXNl VENQSVBNdXRleCgpOworICAgICAgICAgICAgcmV0dXJuKC0yKTsKKyAgICAgICAgfQorICAgICAg ICBSZWxlYXNlVENQSVBNdXRleCgpOworICAgICAgICByZXR1cm4oLTEpOworI2Vsc2UgLyogT1My ICovCisgICAgICAgIG5ldGNsb3MoKTsgICAgICAgICAgICAgICAgICAgICAgLyogKioqICoqKiAq LworICAgICAgICByZXR1cm4oLTIpOworI2VuZGlmIC8qIE9TMiAqLworICAgIH0KKyNlbmRpZiAv KiBDT01NRU5UICovIC8qIChibG9ja2luZyB2cyBub25ibG9jayByZWFkcy4uLikgKi8KKyAgICBl bHNlIHsKKyAgICAgICAgdHRpYnAgPSAwOyAgICAgICAgICAgICAgICAgICAgICAvKiBSZXNldCBi dWZmZXIgcG9pbnRlci4gKi8KKyAgICAgICAgdHRpYm4gKz0gY291bnQ7CisjaWZkZWYgREVCVUcK KyAgICAgICAgZGVidWcoRjEwMSwidHRidWZyIGNvdW50IDIiLCIiLGNvdW50KTsgLyogR290IHNv bWUgYnl0ZXMuICovCisgICAgICAgIGlmIChjb3VudCA+IDApCisgICAgICAgICAgdHRpYnVmW3R0 aWJwK3R0aWJuXSA9ICdcMCc7CisgICAgICAgIGRlYnVnKEYxMTEsInR0YnVmciB0dGlidWYiLCZ0 dGlidWZbdHRpYnBdLHR0aWJuKTsKKyNlbmRpZiAvKiBERUJVRyAqLworCisjaWZkZWYgT1MyCisg ICAgICAgIFJlbGVhc2VUQ1BJUE11dGV4KCk7CisjZW5kaWYgLyogT1MyICovCisgICAgICAgIHJl dHVybih0dGlibik7ICAgICAgICAgICAgICAgICAgLyogUmV0dXJuIGJ1ZmZlciBjb3VudC4gKi8K KyAgICB9Cit9CisjZW5kaWYgLyogVENQSVBMSUIgKi8KKworI2lmbmRlZiBJQk1TRUxFQ1QKKyNp Zm5kZWYgQkVMTFNFTEVDVAorI2lmbmRlZiBCU0RTRUxFQ1QgICAgICAgICAgICAgICAvKiBOb24t VENQSVBMSUIgY2FzZSAqLworI2lmZGVmIFNFTEVDVAorI2RlZmluZSBCU0RTRUxFQ1QKKyNlbmRp ZiAvKiBTRUxFQ1QgKi8KKyNlbmRpZiAvKiBCU0RTRUxFQ1QgKi8KKyNlbmRpZiAvKiBCRUxMU0VM RUNUICovCisjZW5kaWYgLyogSUJNU0VMRUNUICovCisKKyNkZWZpbmUgVEVMTkVUX1BPUlQgMjMg ICAgICAgICAgLyogU2hvdWxkIGRvIGxvb2t1cCwgYnV0IGl0IHdvbid0IGNoYW5nZSAqLworI2Rl ZmluZSBSTE9HSU5fUE9SVCA1MTMKKyNkZWZpbmUgS0VSTUlUX1BPUlQgMTY0OQorI2RlZmluZSBL TE9HSU5fUE9SVCA1NDMKKyNkZWZpbmUgRUtMT0dJTl9QT1JUIDIxMDUKKworI2lmbmRlZiBOT05F VAorLyoKKyAgQy1LZXJtaXQgbmV0d29yayBvcGVuL2Nsb3NlIGZ1bmN0aW9ucyBmb3IgQlNELXNv Y2tldHMuCisgIE11Y2ggb2YgdGhpcyBjb2RlIHNoYXJlZCBieSBTdW5MaW5rIFguMjUsIHdoaWNo IGFsc28gdXNlcyB0aGUgc29ja2V0IGxpYnJhcnkuCisqLworCisvKiAgTiBFIFQgTyBQIE4gIC0t ICBPcGVuIGEgbmV0d29yayBjb25uZWN0aW9uLiAgKi8KKy8qCisgIENhbGwgd2l0aDoKKyAgICBu YW1lIG9mIGhvc3QgKG9yIGhvc3Q6c2VydmljZSksCisgICAgbGNsIC0gbG9jYWwtbW9kZSBmbGFn IHRvIGJlIHNldCBpZiB0aGlzIGZ1bmN0aW9uIHN1Y2NlZWRzLAorICAgIG5ldHdvcmsgdHlwZSAt IHZhbHVlIGRlZmluZWQgaW4gY2t1bmV0LmguCisqLworI2lmZGVmIFRDUFNPQ0tFVAorc3RydWN0 IGhvc3RlbnQgKgorI2lmZGVmIENLX0FOU0lDCitja19jb3B5aG9zdGVudChzdHJ1Y3QgaG9zdGVu dCAqIGgpCisjZWxzZSAvKiBDS19BTlNJQyAqLworY2tfY29weWhvc3RlbnQoaCkgc3RydWN0IGhv c3RlbnQgKiBoOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgLyoKKyAgICAgKiAgVGhl IGhvc3RlbnQgc3RydWN0dXJlIGlzIGR5bmFtaWMgaW4gbmF0dXJlLgorICAgICAqICBzdHJ1Y3Qg IGhvc3RlbnQgeworICAgICAqICBjaGFyICAgICogaF9uYW1lOworICAgICAqICBjaGFyICAgICog KiBoX2FsaWFzZXM7CisgICAgICogIHNob3J0ICAgaF9hZGRydHlwZTsKKyAgICAgKiAgc2hvcnQg ICBoX2xlbmd0aDsKKyAgICAgKiAgY2hhciAgICAqICogaF9hZGRyX2xpc3Q7CisgICAgICogICNk ZWZpbmUgaF9hZGRyICBoX2FkZHJfbGlzdFswXQorICAgICAqLworI2RlZmluZSBIT1NURU5UQ05U IDUKKyAgICBzdGF0aWMgc3RydWN0IGhvc3RlbnQgaG9zdHNbSE9TVEVOVENOVF0gPSB7e05VTEws TlVMTCwwLDAsTlVMTH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHtOVUxMLE5VTEwsMCwwLE5VTEx9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB7TlVMTCxOVUxMLDAsMCxOVUxMfSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge05VTEwsTlVMTCwwLDAsTlVMTH0sCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtOVUxMLE5VTEws MCwwLE5VTEx9fTsKKyAgICBzdGF0aWMgaW50ICAgIG5leHQgPSAwOworICAgIGludCAgICBpLGNu dDsKKyAgICBjaGFyICoqIHBwOworCisgICAgaWYgKCBoID09IE5VTEwgKQorICAgICAgICByZXR1 cm4oTlVMTCk7CisKKyAgICBpZiAobmV4dCA9PSBIT1NURU5UQ05UKQorICAgICAgICBuZXh0ID0g MDsKKworICAgIGlmICggaG9zdHNbbmV4dF0uaF9uYW1lICkgeworICAgICAgICBmcmVlKGhvc3Rz W25leHRdLmhfbmFtZSk7CisgICAgICAgIGhvc3RzW25leHRdLmhfbmFtZSA9IE5VTEw7CisgICAg fQorICAgIGlmICggaG9zdHNbbmV4dF0uaF9hbGlhc2VzICkgeworICAgICAgICBwcCA9IGhvc3Rz W25leHRdLmhfYWxpYXNlczsKKyAgICAgICAgd2hpbGUgKCAqcHAgKSB7CisgICAgICAgICAgICBm cmVlKCpwcCk7CisgICAgICAgICAgICBwcCsrOworICAgICAgICB9CisgICAgICAgIGZyZWUoaG9z dHNbbmV4dF0uaF9hbGlhc2VzKTsKKyAgICB9CisjaWZkZWYgSEFERFJMSVNUCisgICAgaWYgKCBo b3N0c1tuZXh0XS5oX2FkZHJfbGlzdCApIHsKKyAgICAgICAgcHAgPSBob3N0c1tuZXh0XS5oX2Fk ZHJfbGlzdDsKKyAgICAgICAgd2hpbGUgKCAqcHAgKSB7CisgICAgICAgICAgICBmcmVlKCpwcCk7 CisgICAgICAgICAgICBwcCsrOworICAgICAgICB9CisgICAgICAgIGZyZWUoaG9zdHNbbmV4dF0u aF9hZGRyX2xpc3QpOworICAgIH0KKyNlbmRpZiAvKiBIQUREUkxJU1QgKi8KKworICAgIG1ha2Vz dHIoJmhvc3RzW25leHRdLmhfbmFtZSxoLT5oX25hbWUpOworICAgIGlmIChoLT5oX2FsaWFzZXMp IHsKKyAgICAgICAgZm9yICggY250PTAscHA9aC0+aF9hbGlhc2VzOyBwcCAmJiAqcHA7IHBwKyss Y250KyspIDsKKyAgICAgICAgLyogVGhlIGZvbGxvd2luZyBjYW4gZ2l2ZSB3YXJuaW5ncyBpbiBu b24tQU5TSSBidWlsZHMgKi8KKyAgICAgICAgaG9zdHNbbmV4dF0uaF9hbGlhc2VzID0gKGNoYXIg KiopIG1hbGxvYyhzaXplb2YoY2hhciAqKSAqIChjbnQrMSkpOworICAgICAgICBmb3IgKCBpPTA7 IGk8Y250OyBpKyspIHsKKyAgICAgICAgICAgIGhvc3RzW25leHRdLmhfYWxpYXNlc1tpXSA9IE5V TEw7CisgICAgICAgICAgICBtYWtlc3RyKCZob3N0c1tuZXh0XS5oX2FsaWFzZXNbaV0saC0+aF9h bGlhc2VzW2ldKTsKKyAgICAgICAgfQorICAgICAgICBob3N0c1tuZXh0XS5oX2FsaWFzZXNbaV0g PSBOVUxMOworICAgIH0gZWxzZQorICAgICAgICBob3N0c1tuZXh0XS5oX2FsaWFzZXMgPSBOVUxM OworCisgICAgaG9zdHNbbmV4dF0uaF9hZGRydHlwZSA9IGgtPmhfYWRkcnR5cGU7CisgICAgaG9z dHNbbmV4dF0uaF9sZW5ndGggPSBoLT5oX2xlbmd0aDsKKworI2lmZGVmIEhBRERSTElTVAorI2lm ZGVmIGhfYWRkcgorICAgIGlmIChoLT5oX2FkZHJfbGlzdCkgeworICAgICAgICBmb3IgKCBjbnQ9 MCxwcD1oLT5oX2FkZHJfbGlzdDsgcHAgJiYgKnBwOyBwcCsrLGNudCsrKSA7CisgICAgICAgIC8q IFRoZSBmb2xsb3dpbmcgY2FuIGdpdmUgd2FybmluZ3Mgbm9uLUFOU0kgYnVpbGRzICovCisgICAg ICAgIGhvc3RzW25leHRdLmhfYWRkcl9saXN0ID0gKGNoYXIgKiopIG1hbGxvYyhzaXplb2YoY2hh ciAqKSAqIChjbnQrMSkpOworICAgICAgICBmb3IgKCBpPTA7IGk8Y250OyBpKyspIHsKKyAgICAg ICAgICAgIGhvc3RzW25leHRdLmhfYWRkcl9saXN0W2ldID0gbWFsbG9jKGgtPmhfbGVuZ3RoKTsK KyAgICAgICAgICAgIGJjb3B5KGgtPmhfYWRkcl9saXN0W2ldLGhvc3RzW25leHRdLmhfYWRkcl9s aXN0W2ldLGgtPmhfbGVuZ3RoKTsKKyAgICAgICAgfQorICAgICAgICBob3N0c1tuZXh0XS5oX2Fk ZHJfbGlzdFtpXSA9IE5VTEw7CisgICAgfSBlbHNlCisgICAgICAgIGhvc3RzW25leHRdLmhfYWRk cl9saXN0ID0gTlVMTDsKKyNlbHNlCisgICAgYmNvcHkoaC0+aF9hZGRyLCAmaG9zdHNbbmV4dF0u aF9hZGRyLCBoLT5oX2xlbmd0aCk7CisjZW5kaWYgLyogaF9hZGRyICovCisjZWxzZSAvKiBIQURE UkxJU1QgKi8KKyAgICBiY29weShoLT5oX2FkZHIsICZob3N0c1tuZXh0XS5oX2FkZHIsIGgtPmhf bGVuZ3RoKTsKKyNlbmRpZiAvKiBIQUREUkxJU1QgKi8KKworICAgIHJldHVybigmaG9zdHNbbmV4 dCsrXSk7Cit9CisKKyNpZmRlZiBFWENFTEFOCisvKgorICBNb3N0IG90aGVyIEJTRCBzb2NrZXRz IGltcGxlbWVudGF0aW9ucyBkZWZpbmUgdGhlc2UgaW4gaGVhZGVyIGZpbGVzCisgIGFuZCBsaWJy YXJpZXMuCisqLworc3RydWN0IHNlcnZlbnQgeworICAgIHVuc2lnbmVkIHNob3J0IHNfcG9ydDsK K307CisKK3N0cnVjdCBob3N0ZW50IHsKKyAgICBzaG9ydCBoX2FkZHJ0eXBlOworICAgIHN0cnVj dCBpbl9hZGRyIGhfYWRkcjsKKyAgICBpbnQgaF9sZW5ndGg7Cit9OworCitzdHJ1Y3Qgc2VydmVu dCAqCitnZXRzZXJ2YnluYW1lKHNlcnZpY2UsIGNvbm5lY3Rpb24pIGNoYXIgKnNlcnZpY2UsKmNv bm5lY3Rpb247IHsKKyAgICBzdGF0aWMgc3RydWN0IHNlcnZlbnQgc2VydnJlYzsKKyAgICBpbnQg cG9ydDsKKworICAgIHBvcnQgPSAwOworICAgIGlmIChzdHJjbXAoc2VydmljZSwgInRlbG5ldCIp ID09IDApIHBvcnQgPSAyMzsKKyAgICBlbHNlIGlmIChzdHJjbXAoc2VydmljZSwgInNtdHAiKSA9 PSAwKSBwb3J0ID0gMjU7CisgICAgZWxzZSBwb3J0ID0gYXRvaShzZXJ2aWNlKTsKKworICAgIGRl YnVnKEYxMDEsImdldHNlcnZieW5hbWUgcmV0dXJuIHBvcnQgIiwiIixwb3J0KTsKKworICAgIGlm IChwb3J0ID4gMCkgeworICAgICAgICBzZXJ2cmVjLnNfcG9ydCA9IGh0b25zKHBvcnQpOworICAg ICAgICByZXR1cm4oJnNlcnZyZWMpOworICAgIH0KKyAgICByZXR1cm4oKHN0cnVjdCBzZXJ2ZW50 ICopIE5VTEwpOworfQorCitzdHJ1Y3QgaG9zdGVudCAqCitnZXRob3N0YnluYW1lKGhvc3RuYW1l KSBjaGFyICpob3N0bmFtZTsgeworICAgIHJldHVybigoc3RydWN0IGhvc3RlbnQgKikgTlVMTCk7 Cit9CisKK3Vuc2lnbmVkIGxvbmcKK2luZXRfYWRkcihuYW1lKSBjaGFyICpuYW1lOyB7CisgICAg dW5zaWduZWQgbG9uZyBhZGRyOworCisgICAgYWRkciA9IHJob3N0KCZuYW1lKTsKKyAgICBkZWJ1 ZyhGMTExLCJpbmV0X2FkZHIgIixuYW1lLChpbnQpYWRkcik7CisgICAgcmV0dXJuKGFkZHIpOwor fQorCitjaGFyICoKK2luZXRfbnRvYShpbikgc3RydWN0IGluX2FkZHIgaW47IHsKKyAgICBzdGF0 aWMgY2hhciBuYW1lWzgwXTsKKyAgICBja21ha3htc2cobmFtZSwgY2t1aXRvYShpbi5zX25ldCks Ii4iLGNrdWl0b2EoaW4uc19ob3N0KSwiLiIsCisgICAgICAgICAgICAgICBja3VpdG9hKGluLnNf bGgpLCIuIiwgY2t1aXRvYShpbi5zX2ltcG5vKSk7CisgICAgcmV0dXJuKG5hbWUpOworfQorI2Vs c2UKKyNpZmRlZiBERUNfVENQSVAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVQ1ggKi8KKwor aW50IHVjeF9wb3J0X2J1ZyA9IDA7ICAgICAgICAgICAgICAgICAgIC8qIEV4cGxhaW5lZCBiZWxv dyAqLworCisjaWZkZWYgT0xESVAJCQkJLyogVmVyeSBvbGQgVkFYQyBvciBHQ0MgKi8KKy8qCisg IE5vdGUgdGhhdCBteSBvbGRlc3QgVkFYIEMgKFYzLjEtMDUxKSBkb2VzIG5vdCBuZWVkIChvciB3 YW50KSBPTERJUCwKKyAgaGVuY2UgdGhlICJWZXJ5IG9sZCIgaW4gdGhlIGNvbW1lbnQgLSBTTVMs IDIwMTAvMDMvMTUuCisqLworI2RlZmluZSBnZXRzZXJ2YnluYW1lIG15X2dldHNlcnZieW5hbWUK KworI2lmZGVmIENLX0FOU0lDCitnbG9iYWxyZWYgaW50ICgqQyQkR0FfVUNYX0dFVFNFUlZCWU5B TUUpKCk7CitleHRlcm4gdm9pZCBDJCRUUkFOU0xBVEUoKTsKK2V4dGVybiB2b2lkIEMkJFNPQ0tf VFJBTlNMQVRFKCk7CisjZWxzZQorZ2xvYmFscmVmIGludCAoKkMkJEdBX1VDWF9HRVRTRVJWQllO QU1FKSgpOworZXh0ZXJuIFZPSUQgQyQkVFJBTlNMQVRFKCk7CitleHRlcm4gVk9JRCBDJCRTT0NL X1RSQU5TTEFURSgpOworI2VuZGlmIC8qIENLX0FOU0lDICovCisKK3N0cnVjdCBzZXJ2ZW50ICoK K215X2dldHNlcnZieW5hbWUgKHNlcnZpY2UsIHByb3RvKSBjaGFyICpzZXJ2aWNlLCAqcHJvdG87 IHsKKyAgICBzdGF0aWMgc3RydWN0IHNlcnZlbnQgc2VudDsKKyAgICBzdHJ1Y3QgaW9zYiB7Cisg ICAgICAgIHVuaW9uIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgc3RhdHVzOworICAgICAg ICAgICAgdW5zaWduZWQgc2hvcnQgc3RbMl07CisgICAgICAgIH0gc2I7CisgICAgICAgIHVuc2ln bmVkIGxvbmcgc3BhcmU7CisgICAgfSBzOworICAgIHN0cnVjdCB7CisgICAgICAgIHN0cnVjdCBp b3NiICpzOworICAgICAgICBjaGFyICpzZXJ2OworICAgICAgICBjaGFyICpwcm90OworICAgIH0g cGFyOworICAgIHVuc2lnbmVkIGxvbmcgZTsKKyAgICBjaGFyIHNidWZbMzBdLCBwYnVmWzMwXTsK KyAgICBjaGFyICpwOworCisgICAgZGVidWcoRjExMSwiVUNYIGdldHNlcnZieW5hbWUiLHNlcnZp Y2UsKGludClDJCRHQV9VQ1hfR0VUU0VSVkJZTkFNRSk7CisKKyAgICBwID0gc2J1ZjsKKyAgICBj a3N0cm5jcHkocCwgc2VydmljZSwgMjkpOworICAgIHdoaWxlICgqcCA9IHRvdXBwZXIoKnApLCAq cCsrKSB7fQorICAgIHAgPSBwYnVmOworICAgIGNrc3RybmNweShwLCBwcm90bywgMjkpOworICAg IHdoaWxlICgqcCA9IHRvdXBwZXIoKnApLCAqcCsrKSB7fQorCisgICAgcGFyLnMgPSAmczsKKwor ICAgIHBhci5zZXJ2ID0gIiI7CisgICAgcGFyLnByb3QgPSAiIjsKKyAgICAvKiByZXNldCBmaWxl IHBvaW50ZXIgb3Igc29tZXRoaW5nIGxpa2UgdGhhdCE/IT8gKi8KKyAgICBlID0gKCpDJCRHQV9V Q1hfR0VUU0VSVkJZTkFNRSkoJnBhciwgJnNlbnQsIHBhci5zKTsKKyAgICBwYXIuc2VydiA9IHNi dWY7CisgICAgcGFyLnByb3QgPSBwYnVmOyAgICAgICAgICAgIC8qIHRoYXQgaXMgZG9uJ3QgY2Fy ZSAqLworICAgIGUgPSAoKkMkJEdBX1VDWF9HRVRTRVJWQllOQU1FKSgmcGFyLCAmc2VudCwgcGFy LnMpOworICAgIGlmICgobG9uZyllID09IC0xTCkKKyAgICAgIHJldHVybiBOVUxMOworICAgIGlm ICgoZSAmIDEpID09IDBMKSB7CisgICAgICAgIEMkJFRSQU5TTEFURShlKTsKKyAgICAgICAgcmV0 dXJuIE5VTEw7CisgICAgfQorICAgIGlmICgocy5zYi5zdFswXSAmIDEpID09IDApIHsKKyAgICAg ICAgQyQkU09DS19UUkFOU0xBVEUoJnMuc2Iuc3RbMF0pOworICAgICAgICByZXR1cm4gTlVMTDsK KyAgICB9CisvKgorICBzZW50LnNfcG9ydCBpcyBzdXBwb3NlZCB0byBiZSByZXR1cm5lZCBieSBV Q1ggaW4gbmV0d29yayBieXRlIG9yZGVyLgorICBIb3dldmVyLCBVQ1ggMi4wIHRocm91Z2ggMi4w QyBkaWQgbm90IGRvIHRoaXM7IDIuMEQgYW5kIGxhdGVyIGRvIGl0LgorICBCdXQgdGhlcmUgaXMg bm8gd2F5IG9mIGtub3dpbmcgd2hpY2ggVUNYIHZlcnNpb24sIHNvIHdlIGhhdmUgYSB1c2VyLXNl dHRhYmxlCisgIHJ1bnRpbWUgdmFyaWFibGUuICBOb3RlOiBVQ1ggMi4wIHdhcyBvbmx5IGZvciB0 aGUgVkFYLgorKi8KKyAgICBkZWJ1ZyhGMTAxLCJVQ1ggZ2V0c2VydmJ5bmFtZSBwb3J0IiwiIixz ZW50LnNfcG9ydCk7CisgICAgZGVidWcoRjEwMSwiVUNYIGdldHNlcnZieW5hbWUgbnRvaHMocG9y dCkiLCIiLG50b2hzKHNlbnQuc19wb3J0KSk7CisgICAgaWYgKHVjeF9wb3J0X2J1ZykgeworICAg ICAgICBzZW50LnNfcG9ydCA9IGh0b25zKHNlbnQuc19wb3J0KTsKKyAgICAgICAgZGVidWcoRjEw MCwiVUNYLVBPUlQtQlVHIE9OOiBzd2FwcGluZyBieXRlcyIsIiIsMCk7CisgICAgICAgIGRlYnVn KEYxMDEsIlVDWCBzd2FwcGVkIHBvcnQiLCIiLHNlbnQuc19wb3J0KTsKKyAgICAgICAgZGVidWco RjEwMSwiVUNYIHN3YXBwZWQgbnRvaHMocG9ydCkiLCIiLG50b2hzKHNlbnQuc19wb3J0KSk7Cisg ICAgfQorICAgIHJldHVybiAmc2VudDsKK30KKyNlbmRpZiAvKiBkZWYgT0xESVAgKi8KKyNlbmRp ZiAvKiBERUNfVENQSVAgKi8KKyNlbmRpZiAvKiBFWENFTEFOICovCisKK2ludAorZ2V0dGNwcG9y dCgpIHsKKyAgICByZXR1cm4oc3ZjbnVtKTsKK30KKworI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLwor CisjaWZuZGVmIE5PVENQT1BUUworI2lmbmRlZiBkYXRhZ2VuZXJhbAoraW50Citja19saW5nZXIo c29jaywgb25vZmYsIHRpbW8pIGludCBzb2NrOyBpbnQgb25vZmY7IGludCB0aW1vOyB7CisvKgor ICBUaGUgZm9sbG93aW5nLCBmcm9tIFdpbGxpYW0gQmFkZXIsIHR1cm5zIG9mZiB0aGUgc29ja2V0 IGxpbmdlciBwYXJhbWV0ZXIsCisgIHdoaWNoIG1ha2VzIGEgY2xvc2UoKSBibG9jayB1bnRpbCBh bGwgZGF0YSBpcyBzZW50LiAgIkkgZG9uJ3QgdGhpbmsgdGhhdAorICBkaXNhYmxpbmcgbGluZ2Vy IGNhbiBldmVyIGNhdXNlIGtlcm1pdCB0byBsb3NlIGRhdGEsIGJ1dCB5b3UgdGVsbmV0IHRvIGEK KyAgZmxha3kgc2VydmVyIChvciB0byBvdXIgbW9kZW0gc2VydmVyIHdoZW4gdGhlIG1vZGVtIGlz IGluIHVzZSksIGRpc2FibGluZworICBsaW5nZXIgcHJldmVudHMga2VybWl0IGZyb20gaGFuZ2lu ZyBvbiB0aGUgY2xvc2UgaWYgeW91IHRyeSB0byBleGl0LiIKKworICBNb2RpZmllZCBieSBKZWZm IEFsdG1hbiB0byBiZSBnZW5lcmFsbHkgdXNlZnVsLgorKi8KKyNpZmRlZiBTT0xfU09DS0VUCisj aWZkZWYgU09fTElOR0VSCisgICAgc3RydWN0IGxpbmdlciBzZXRfbGluZ2VyX29wdDsKKyAgICBz dHJ1Y3QgbGluZ2VyIGdldF9saW5nZXJfb3B0OworICAgIFNPQ0tPUFRfVCB4OworCisjaWZkZWYg SUtTRAorICAgIGlmICghaW5zZXJ2ZXIpCisjZW5kaWYgLyogSUtTRCAqLworICAgICAgaWYgKHNv Y2sgPT0gLTEgfHwKKyAgICAgICAgbmV0dHlwZSAhPSBORVRfVENQQSAmJiBuZXR0eXBlICE9IE5F VF9UQ1BCICYmCisgICAgICAgIG5ldHR5cGUgIT0gTkVUX1NTSCB8fCB0dG1kbSA+PSAwKSB7Cisg ICAgICAgIHRjcF9saW5nZXIgPSBvbm9mZjsKKyAgICAgICAgdGNwX2xpbmdlcl90bW8gPSB0aW1v OworICAgICAgICByZXR1cm4oMSk7CisgICAgfQorICAgIHggPSBzaXplb2YoZ2V0X2xpbmdlcl9v cHQpOworICAgIGlmIChnZXRzb2Nrb3B0KHNvY2ssIFNPTF9TT0NLRVQsIFNPX0xJTkdFUiwKKyAg ICAgICAgICAgICAgICAgICAgKGNoYXIgKikmZ2V0X2xpbmdlcl9vcHQsICZ4KSkgeworICAgICAg ICBkZWJ1ZyhGMTExLCJUQ1AgY2tfbGluZ2VyIGNhbid0IGdldCBTT19MSU5HRVIiLGNrX2VycnN0 cigpLGVycm5vKTsKKyAgICB9IGVsc2UgaWYgKHggIT0gc2l6ZW9mKGdldF9saW5nZXJfb3B0KSkg eworI2lmZGVmIE9TMgorICAgICAgICBzdHJ1Y3QgX2xpbmdlcjE2IHsKKyAgICAgICAgICAgIHNo b3J0IHNfbGluZ2VyOworICAgICAgICAgICAgc2hvcnQgc19vbm9mZjsKKyAgICAgICAgfSBnZXRf bGluZ2VyX29wdDE2LCBzZXRfbGluZ2VyX29wdDE2OworICAgICAgICBpZiAoIHggPT0gc2l6ZW9m KGdldF9saW5nZXJfb3B0MTYpICkgeworICAgICAgICAgICAgZGVidWcoRjExMSwiVENQIHNldGxp bmdlciB3YXJuaW5nOiBTT19MSU5HRVIiLCJsZW4gaXMgMTYtYml0Iix4KTsKKyAgICAgICAgICAg IGlmIChnZXRzb2Nrb3B0KHNvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICBTT0xfU09D S0VULCBTT19MSU5HRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSZnZXRf bGluZ2VyX29wdDE2LCAmeCkKKyAgICAgICAgICAgICAgICApIHsKKyAgICAgICAgICAgICAgICBk ZWJ1ZyhGMTExLAorICAgICAgICAgICAgICAgICAgICAgICJUQ1AgY2tfbGluZ2VyIGNhbid0IGdl dCBTT19MSU5HRVIiLGNrX2VycnN0cigpLGVycm5vKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAo Z2V0X2xpbmdlcl9vcHQxNi5zX29ub2ZmICE9IG9ub2ZmIHx8CisgICAgICAgICAgICAgICAgICAg ICAgIGdldF9saW5nZXJfb3B0MTYuc19saW5nZXIgIT0gdGltbykKKyAgICAgICAgICAgIHsKKyAg ICAgICAgICAgICAgICBzZXRfbGluZ2VyX29wdDE2LnNfb25vZmYgID0gb25vZmY7CisgICAgICAg ICAgICAgICAgc2V0X2xpbmdlcl9vcHQxNi5zX2xpbmdlciA9IHRpbW87CisgICAgICAgICAgICAg ICAgaWYgKHNldHNvY2tvcHQoc29jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBT T0xfU09DS0VULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPX0xJTkdFUiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSZzZXRfbGluZ2VyX29wdDE2LAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzZXRfbGluZ2VyX29wdDE2KSkK KyAgICAgICAgICAgICAgICAgICAgKSB7CisgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEs CisgICAgICAgICAgICAgICAgICAgICAgICAgICJUQ1AgY2tfbGluZ2VyIGNhbid0IHNldCBTT19M SU5HRVIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBja19lcnJzdHIoKSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgZXJybm8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAg ICAgICAgICAgICAgICAgICAgdGNwX2xpbmdlciA9IGdldF9saW5nZXJfb3B0MTYuc19vbm9mZjsK KyAgICAgICAgICAgICAgICAgICAgdGNwX2xpbmdlcl90bW8gPSBnZXRfbGluZ2VyX29wdDE2LnNf bGluZ2VyOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGRl YnVnKEYxMDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJUQ1AgY2tfbGluZ2VyIG5ldyBT T19MSU5HRVIiLCIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRfbGluZ2VyX29wdDE2 LnNfb25vZmYpOworICAgICAgICAgICAgICAgICAgICB0Y3BfbGluZ2VyID0gc2V0X2xpbmdlcl9v cHQxNi5zX29ub2ZmOworICAgICAgICAgICAgICAgICAgICB0Y3BfbGluZ2VyX3RtbyA9IHNldF9s aW5nZXJfb3B0MTYuc19saW5nZXI7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAxOworICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZGVi dWcoRjEwMSwiVENQIGNrX2xpbmdlciBTT19MSU5HRVIgdW5jaGFuZ2VkIiwiIiwKKyAgICAgICAg ICAgICAgICAgICAgICAgZ2V0X2xpbmdlcl9vcHQxNi5zX29ub2ZmKTsKKyAgICAgICAgICAgICAg ICB0Y3BfbGluZ2VyID0gZ2V0X2xpbmdlcl9vcHQxNi5zX29ub2ZmOworICAgICAgICAgICAgICAg IHRjcF9saW5nZXJfdG1vID0gZ2V0X2xpbmdlcl9vcHQxNi5zX2xpbmdlcjsKKyAgICAgICAgICAg ICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybigwKTsKKyAg ICAgICAgfQorI2VuZGlmIC8qIE9TMiAqLworICAgICAgICBkZWJ1ZyhGMTExLCJUQ1AgY2tfbGlu Z2VyIGVycm9yOiBTT19MSU5HRVIiLCJsZW4iLHgpOworICAgICAgICBkZWJ1ZyhGMTExLCJUQ1Ag Y2tfbGluZ2VyIFNPX0xJTkdFUiIsCisgICAgICAgICAgICAgICJleHBlY3RlZCBsZW4iLHNpemVv ZihnZXRfbGluZ2VyX29wdCkpOworICAgICAgICBkZWJ1ZyhGMTExLCJUQ1AgY2tfbGluZ2VyIFNP X0xJTkdFUiIsImxpbmdlcl9vcHQubF9vbm9mZiIsCisgICAgICAgICAgICAgIGdldF9saW5nZXJf b3B0Lmxfb25vZmYpOworICAgICAgICBkZWJ1ZyhGMTExLCJUQ1AgbGluZ2VyIFNPX0xJTkdFUiIs Imxpbmdlcl9vcHQubF9saW5nZXIiLAorICAgICAgICAgICAgICAgZ2V0X2xpbmdlcl9vcHQubF9s aW5nZXIpOworICAgIH0gZWxzZSBpZiAoZ2V0X2xpbmdlcl9vcHQubF9vbm9mZiAhPSBvbm9mZiB8 fAorICAgICAgICAgICAgICAgZ2V0X2xpbmdlcl9vcHQubF9saW5nZXIgIT0gdGltbykgeworICAg ICAgICBzZXRfbGluZ2VyX29wdC5sX29ub2ZmICA9IG9ub2ZmOworICAgICAgICBzZXRfbGluZ2Vy X29wdC5sX2xpbmdlciA9IHRpbW87CisgICAgICAgIGlmIChzZXRzb2Nrb3B0KHNvY2ssCisgICAg ICAgICAgICAgICAgICAgICAgIFNPTF9TT0NLRVQsCisgICAgICAgICAgICAgICAgICAgICAgIFNP X0xJTkdFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikmc2V0X2xpbmdlcl9vcHQs CisgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzZXRfbGluZ2VyX29wdCkpKSB7CisgICAg ICAgICAgICBkZWJ1ZyhGMTExLCJUQ1AgY2tfbGluZ2VyIGNhbid0IHNldCBTT19MSU5HRVIiLGNr X2VycnN0cigpLGVycm5vKTsKKyAgICAgICAgICAgIHRjcF9saW5nZXIgPSBnZXRfbGluZ2VyX29w dC5sX29ub2ZmOworICAgICAgICAgICAgdGNwX2xpbmdlcl90bW8gPSBnZXRfbGluZ2VyX29wdC5s X2xpbmdlcjsKKyAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgZGVidWcoRjEwMSwKKyAg ICAgICAgICAgICAgICAgICAiVENQIGNrX2xpbmdlciBuZXcgU09fTElOR0VSIiwKKyAgICAgICAg ICAgICAgICAgICAiIiwKKyAgICAgICAgICAgICAgICAgICBzZXRfbGluZ2VyX29wdC5sX29ub2Zm CisgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICB0Y3BfbGluZ2VyID0gc2V0X2xp bmdlcl9vcHQubF9vbm9mZjsKKyAgICAgICAgICAgICB0Y3BfbGluZ2VyX3RtbyA9IHNldF9saW5n ZXJfb3B0LmxfbGluZ2VyOworICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgfQorICAg IH0gZWxzZSB7CisgICAgICAgIGRlYnVnKEYxMDEsIlRDUCBja19saW5nZXIgU09fTElOR0VSIHVu Y2hhbmdlZCIsIiIsCisgICAgICAgICAgICAgIGdldF9saW5nZXJfb3B0Lmxfb25vZmYpOworICAg ICAgICB0Y3BfbGluZ2VyID0gZ2V0X2xpbmdlcl9vcHQubF9vbm9mZjsKKyAgICAgICAgdGNwX2xp bmdlcl90bW8gPSBnZXRfbGluZ2VyX29wdC5sX2xpbmdlcjsKKyAgICAgICAgcmV0dXJuIDE7Cisg ICAgfQorI2Vsc2UKKyAgICBkZWJ1ZyhGMTAwLCJUQ1AgY2tfbGluZ2VyIFNPX0xJTkdFUiBub3Qg ZGVmaW5lZCIsIiIsMCk7CisjZW5kaWYgLyogU09fTElOR0VSICovCisjZWxzZQorICAgIGRlYnVn KEYxMDAsIlRDUCBja19saW5nZXIgU09fU09DS0VUIG5vdCBkZWZpbmVkIiwiIiwwKTsKKyNlbmRp ZiAvKiBTT0xfU09DS0VUICovCisgICAgcmV0dXJuKDApOworfQorCitpbnQKK3NlbmRidWYoc29j ayxzaXplKSBpbnQgc29jazsgaW50IHNpemU7IHsKKy8qCisgIFRoZSBmb2xsb3dpbmcsIGZyb20g V2lsbGlhbSBCYWRlciwgYWxsb3dzIGNoYW5naW5nIG9mIHNvY2tldCBidWZmZXIgc2l6ZXMsCisg IGluIGNhc2UgdGhhdCBtaWdodCBhZmZlY3QgcGVyZm9ybWFuY2UuCisKKyAgTW9kaWZpZWQgYnkg SmVmZiBBbHRtYW4gdG8gYmUgZ2VuZXJhbGx5IHVzZWZ1bC4KKyovCisjaWZkZWYgU09MX1NPQ0tF VAorI2lmZGVmIFNPX1NOREJVRgorICAgIGludCBpLCBqOworICAgIFNPQ0tPUFRfVCB4OworCisj aWZkZWYgSUtTRAorICAgIGlmICghaW5zZXJ2ZXIpCisjZW5kaWYgLyogSUtTRCAqLworICAgICAg aWYgKHNvY2sgPT0gLTEgfHwKKyAgICAgICAgbmV0dHlwZSAhPSBORVRfVENQQSAmJiBuZXR0eXBl ICE9IE5FVF9UQ1BCICYmIG5ldHR5cGUgIT0gTkVUX1NTSAorICAgICAgICAgICAgICAgIHx8IHR0 bWRtID49IDApIHsKKyAgICAgICAgdGNwX3NlbmRidWYgPSBzaXplOworICAgICAgICByZXR1cm4g MTsKKyAgICB9CisgICAgeCA9IHNpemVvZihpKTsKKyAgICBpZiAoZ2V0c29ja29wdChzb2NrLCBT T0xfU09DS0VULCBTT19TTkRCVUYsIChjaGFyICopJmksICZ4KSkgeworICAgICAgICBkZWJ1ZyhG MTExLCJUQ1Agc2VuZGJ1ZiBjYW4ndCBnZXQgU09fU05EQlVGIixja19lcnJzdHIoKSxlcnJubyk7 CisgICAgfSBlbHNlIGlmICh4ICE9IHNpemVvZihpKSkgeworI2lmZGVmIE9TMgorICAgICAgICBz aG9ydCBpMTYsajE2OworICAgICAgICBpZiAoeCA9PSBzaXplb2YoaTE2KSkgeworICAgICAgICAg ICAgZGVidWcoRjExMSwiVENQIHNlbmRidWYgd2FybmluZzogU09fU05EQlVGIiwibGVuIGlzIDE2 LWJpdCIseCk7CisgICAgICAgICAgICBpZiAoZ2V0c29ja29wdChzb2NrLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgU09MX1NPQ0tFVCwgU09fU05EQlVGLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgKGNoYXIgKikmaTE2LCAmeCkKKyAgICAgICAgICAgICAgICApIHsKKyAgICAgICAg ICAgICAgICBkZWJ1ZyhGMTExLCJUQ1Agc2VuZGJ1ZiBjYW4ndCBnZXQgU09fU05EQlVGIiwKKyAg ICAgICAgICAgICAgICAgICAgICBja19lcnJzdHIoKSxlcnJubyk7CisgICAgICAgICAgICB9IGVs c2UgaWYgKHNpemUgPD0gMCkgeworICAgICAgICAgICAgICAgIHRjcF9zZW5kYnVmID0gaTE2Owor ICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsIlRDUCBzZW5kYnVmIFNPX1NOREJVRiByZXRyaWV2 ZWQiLCIiLGkxNik7CisgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICB9IGVs c2UgaWYgKGkxNiAhPSBzaXplKSB7CisgICAgICAgICAgICAgICAgajE2ID0gc2l6ZTsKKyAgICAg ICAgICAgICAgICBpZiAoc2V0c29ja29wdChzb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFNPTF9TT0NLRVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU09fU05E QlVGLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopJmoxNiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoajE2KSkKKyAgICAgICAgICAgICAgICAg ICAgKSB7CisgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsIlRDUCBzZW5kYnVmIGNhbid0 IHNldCBTT19TTkRCVUYiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBja19lcnJzdHIoKSxl cnJubyk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZGVi dWcoRjEwMSwiVENQIHNlbmRidWYgb2xkIFNPX1NOREJVRiIsIiIsaTE2KTsKKyAgICAgICAgICAg ICAgICAgICAgZGVidWcoRjEwMSwiVENQIHNlbmRidWYgbmV3IFNPX1NOREJVRiIsIiIsajE2KTsK KyAgICAgICAgICAgICAgICAgICAgdGNwX3NlbmRidWYgPSBzaXplOworICAgICAgICAgICAgICAg ICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2Ugewor ICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsIlRDUCBzZW5kYnVmIFNPX1NOREJVRiB1bmNoYW5n ZWQiLCIiLGkxNik7CisgICAgICAgICAgICAgICAgdGNwX3NlbmRidWYgPSBzaXplOworICAgICAg ICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuKDAp OworICAgICAgICB9CisjZW5kaWYgLyogT1MyICovCisgICAgICAgIGRlYnVnKEYxMTEsIlRDUCBz ZW5kYnVmIGVycm9yOiBTT19TTkRCVUYiLCJsZW4iLHgpOworICAgICAgICBkZWJ1ZyhGMTExLCJU Q1Agc2VuZGJ1ZiBTT19TTkRCVUYiLCJleHBlY3RlZCBsZW4iLHNpemVvZihpKSk7CisgICAgICAg IGRlYnVnKEYxMTEsIlRDUCBzZW5kYnVmIFNPX1NOREJVRiIsImkiLGkpOworICAgIH0gZWxzZSBp ZiAoc2l6ZSA8PSAwKSB7CisgICAgICAgIHRjcF9zZW5kYnVmID0gaTsKKyAgICAgICAgZGVidWco RjEwMSwiVENQIHNlbmRidWYgU09fU05EQlVGIHJldHJpZXZlZCIsIiIsaSk7CisgICAgICAgIHJl dHVybiAxOworICAgIH0gZWxzZSBpZiAoaSAhPSBzaXplKSB7CisgICAgICAgIGogPSBzaXplOwor ICAgICAgICBpZiAoc2V0c29ja29wdChzb2NrLCBTT0xfU09DS0VULCBTT19TTkRCVUYsIChjaGFy ICopJmosIHNpemVvZihqKSkpIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMTEsIlRDUCBzZW5kYnVm IGNhbid0IHNldCBTT19TTkRCVUYiLGNrX2VycnN0cigpLGVycm5vKTsKKyAgICAgICAgICAgIHRj cF9zZW5kYnVmID0gaTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMDEs IlRDUCBzZW5kYnVmIG9sZCBTT19TTkRCVUYiLCIiLGkpOworICAgICAgICAgICAgZGVidWcoRjEw MSwiVENQIHNlbmRidWYgbmV3IFNPX1NOREJVRiIsIiIsaik7CisgICAgICAgICAgICB0Y3Bfc2Vu ZGJ1ZiA9IHNpemU7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorICAgIH0gZWxz ZSB7CisgICAgICAgIGRlYnVnKEYxMDEsIlRDUCBzZW5kYnVmIFNPX1NOREJVRiB1bmNoYW5nZWQi LCIiLGkpOworICAgICAgICB0Y3Bfc2VuZGJ1ZiA9IHNpemU7CisgICAgICAgIHJldHVybiAxOwor ICAgIH0KKyNlbHNlCisgICAgZGVidWcoRjEwMCwiVENQIHNlbmRidWYgU09fU05EQlVGIG5vdCBk ZWZpbmVkIiwiIiwwKTsKKyNlbmRpZiAvKiBTT19TTkRCVUYgKi8KKyNlbHNlCisgICAgZGVidWco RjEwMCwiVENQIHNlbmRidWYgU09fU09DS0VUIG5vdCBkZWZpbmVkIiwiIiwwKTsKKyNlbmRpZiAv KiBTT0xfU09DS0VUICovCisgICAgcmV0dXJuKDApOworfQorCitpbnQKK3JlY3ZidWYoc29jayxz aXplKSBpbnQgc29jazsgaW50IHNpemU7IHsKKy8qCisgIFRoZSBmb2xsb3dpbmcsIGZyb20gV2ls bGlhbSBCYWRlciwgYWxsb3dzIGNoYW5naW5nIG9mIHNvY2tldCBidWZmZXIgc2l6ZXMsCisgIGlu IGNhc2UgdGhhdCBtaWdodCBhZmZlY3QgcGVyZm9ybWFuY2UuCisKKyAgTW9kaWZpZWQgYnkgSmVm ZiBBbHRtYW4gdG8gYmUgZ2VuZXJhbGx5IHVzZWZ1bC4KKyovCisjaWZkZWYgU09MX1NPQ0tFVAor I2lmZGVmIFNPX1JDVkJVRgorICAgIGludCBpLCBqOworICAgIFNPQ0tPUFRfVCB4OworCisjaWZk ZWYgSUtTRAorICAgIGlmICghaW5zZXJ2ZXIpCisjZW5kaWYgLyogSUtTRCAqLworICAgICAgaWYg KHNvY2sgPT0gLTEgfHwKKwkgIG5ldHR5cGUgIT0gTkVUX1RDUEEgJiYgbmV0dHlwZSAhPSBORVRf VENQQiAmJgorCSAgbmV0dHlwZSAhPSBORVRfU1NIIHx8IHR0bWRtID49IDApIHsKKyAgICAgICAg dGNwX3JlY3ZidWYgPSBzaXplOworICAgICAgICByZXR1cm4oMSk7CisgICAgfQorICAgIHggPSBz aXplb2YoaSk7CisgICAgaWYgKGdldHNvY2tvcHQoc29jaywgU09MX1NPQ0tFVCwgU09fUkNWQlVG LCAoY2hhciAqKSZpLCAmeCkpIHsKKyAgICAgICAgZGVidWcoRjExMSwiVENQIHJlY3ZidWYgY2Fu J3QgZ2V0IFNPX1JDVkJVRiIsY2tfZXJyc3RyKCksZXJybm8pOworICAgIH0gZWxzZSBpZiAoeCAh PSBzaXplb2YoaSkpIHsKKyNpZmRlZiBPUzIKKyAgICAgICAgc2hvcnQgaTE2LGoxNjsKKyAgICAg ICAgaWYgKCB4ID09IHNpemVvZihpMTYpICkgeworICAgICAgICAgICAgZGVidWcoRjExMSwiVENQ IHJlY3ZidWYgd2FybmluZzogU09fUkNWQlVGIiwibGVuIGlzIDE2LWJpdCIseCk7CisgICAgICAg ICAgICBpZiAoZ2V0c29ja29wdChzb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgU09M X1NPQ0tFVCwgU09fUkNWQlVGLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikm aTE2LCAmeCkKKyAgICAgICAgICAgICAgICApIHsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEx LCJUQ1AgcmVjdmJ1ZiBjYW4ndCBnZXQgU09fUkNWQlVGIiwKKyAgICAgICAgICAgICAgICAgICAg ICBja19lcnJzdHIoKSxlcnJubyk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHNpemUgPD0gMCkg eworICAgICAgICAgICAgICAgIHRjcF9yZWN2YnVmID0gaTE2OworICAgICAgICAgICAgICAgIGRl YnVnKEYxMDEsIlRDUCByZWN2YnVmIFNPX1JDVkJVRiByZXRyaWV2ZWQiLCIiLGkxNik7CisgICAg ICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGkxNiAhPSBzaXpl KSB7CisgICAgICAgICAgICAgICAgajE2ID0gc2l6ZTsKKyAgICAgICAgICAgICAgICBpZiAoc2V0 c29ja29wdChzb2NrLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIChjaGFyICopJmoxNiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoajE2KSkpIHsKKyAgICAgICAgICAgICAg ICAgICAgZGVidWcoRjExMSwiVENQIHJlY3ZidWYgY2FuJyBzZXQgU09fUkNWQlVGIiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgY2tfZXJyc3RyKCksZXJybm8pOworICAgICAgICAgICAgICAg IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsIlRDUCByZWN2YnVmIG9s ZCBTT19SQ1ZCVUYiLCIiLGkxNik7CisgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsIlRD UCByZWN2YnVmIG5ldyBTT19SQ1ZCVUYiLCIiLGoxNik7CisgICAgICAgICAgICAgICAgICAgIHRj cF9yZWN2YnVmID0gc2l6ZTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhG MTAxLCJUQ1AgcmVjdmJ1ZiBTT19SQ1ZCVUYgdW5jaGFuZ2VkIiwiIixpMTYpOworICAgICAgICAg ICAgICAgIHRjcF9yZWN2YnVmID0gc2l6ZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybigwKTsKKyAgICAgICAgfQorI2VuZGlmIC8q IE9TMiAqLworICAgICAgICBkZWJ1ZyhGMTExLCJUQ1AgcmVjdmJ1ZiBlcnJvcjogU09fUkNWQlVG IiwibGVuIix4KTsKKyAgICAgICAgZGVidWcoRjExMSwiVENQIHJlY3ZidWYgU09fUkNWQlVGIiwi ZXhwZWN0ZWQgbGVuIixzaXplb2YoaSkpOworICAgICAgICBkZWJ1ZyhGMTExLCJUQ1AgcmVjdmJ1 ZiBTT19SQ1ZCVUYiLCJpIixpKTsKKyAgICB9IGVsc2UgaWYgKHNpemUgPD0gMCkgeworICAgICAg ICB0Y3BfcmVjdmJ1ZiA9IGk7CisgICAgICAgIGRlYnVnKEYxMDEsIlRDUCByZWN2YnVmIFNPX1JD VkJVRiByZXRyaWV2ZWQiLCIiLGkpOworICAgICAgICByZXR1cm4gMTsKKyAgICB9IGVsc2UgaWYg KGkgIT0gc2l6ZSkgeworICAgICAgICBqID0gc2l6ZTsKKyAgICAgICAgaWYgKHNldHNvY2tvcHQo c29jaywgU09MX1NPQ0tFVCwgU09fUkNWQlVGLCAoY2hhciAqKSZqLCBzaXplb2YoaikpKSB7Cisg ICAgICAgICAgICBkZWJ1ZyhGMTExLCJUQ1AgcmVjdmJ1ZiBjYW4ndCBzZXQgU09fUkNWQlVGIixj a19lcnJzdHIoKSxlcnJubyk7CisgICAgICAgICAgICB0Y3BfcmVjdmJ1ZiA9IGk7CisgICAgICAg IH0gZWxzZSB7CisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJUQ1AgcmVjdmJ1ZiBvbGQgU09fUkNW QlVGIiwiIixpKTsKKyAgICAgICAgICAgIGRlYnVnKEYxMDEsIlRDUCByZWN2YnVmIG5ldyBTT19S Q1ZCVUYiLCIiLGopOworICAgICAgICAgICAgdGNwX3JlY3ZidWYgPSBzaXplOworICAgICAgICAg ICAgcmV0dXJuIDE7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBkZWJ1ZyhGMTAx LCJUQ1AgcmVjdmJ1ZiBTT19SQ1ZCVUYgdW5jaGFuZ2VkIiwiIixpKTsKKyAgICAgICAgdGNwX3Jl Y3ZidWYgPSBzaXplOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisjZWxzZQorICAgIGRlYnVn KEYxMDAsIlRDUCByZWN2YnVmIFNPX1JDVkJVRiBub3QgZGVmaW5lZCIsIiIsMCk7CisjZW5kaWYg LyogU09fUkNWQlVGICovCisjZWxzZQorICAgIGRlYnVnKEYxMDAsIlRDUCByZWN2YnVmIFNPX1NP Q0tFVCBub3QgZGVmaW5lZCIsIiIsMCk7CisjZW5kaWYgLyogU09MX1NPQ0tFVCAqLworICAgIHJl dHVybiAwOworfQorCitpbnQKK2tlZXBhbGl2ZShzb2NrLG9ub2ZmKSBpbnQgc29jazsgaW50IG9u b2ZmOyB7CisjaWZkZWYgU09MX1NPQ0tFVAorI2lmZGVmIFNPX0tFRVBBTElWRQorICAgIGludCBn ZXRfa2VlcGFsaXZlX29wdDsKKyAgICBpbnQgc2V0X2tlZXBhbGl2ZV9vcHQ7CisgICAgU09DS09Q VF9UIHg7CisKKyAgICBkZWJ1ZyhGMTExLCJUQ1Aga2VlcGFsaXZlIiwic29jayIsc29jayk7Cisg ICAgZGVidWcoRjExMSwiVENQIGtlZXBhbGl2ZSIsIm5ldHR5cGUiLG5ldHR5cGUpOworICAgIGRl YnVnKEYxMTEsIlRDUCBrZWVwYWxpdmUiLCJ0dG1kbSIsdHRtZG0pOworCisjaWZkZWYgSUtTRAor ICAgIGlmICghaW5zZXJ2ZXIpCisjZW5kaWYgLyogSUtTRCAqLworICAgICAgaWYgKHNvY2sgPT0g LTEgfHwKKyAgICAgICAgbmV0dHlwZSAhPSBORVRfVENQQSAmJiBuZXR0eXBlICE9IE5FVF9UQ1BC ICYmIG5ldHR5cGUgIT0gTkVUX1NTSAorICAgICAgICAgICAgICAgIHx8IHR0bWRtID49IDApIHsK KyAgICAgICAgdGNwX2tlZXBhbGl2ZSA9IG9ub2ZmOworICAgICAgICByZXR1cm4gMTsKKyAgICB9 CisgICAgeCA9IHNpemVvZihnZXRfa2VlcGFsaXZlX29wdCk7CisgICAgaWYgKGdldHNvY2tvcHQo c29jaywKKyAgICAgICAgICAgICAgICAgICBTT0xfU09DS0VULCBTT19LRUVQQUxJVkUsIChjaGFy ICopJmdldF9rZWVwYWxpdmVfb3B0LCAmeCkpIHsKKyAgICAgICAgZGVidWcoRjExMSwiVENQIGtl ZXBhbGl2ZSBjYW4ndCBnZXQgU09fS0VFUEFMSVZFIixja19lcnJzdHIoKSxlcnJubyk7CisgICAg fSBlbHNlIGlmICh4ICE9IHNpemVvZihnZXRfa2VlcGFsaXZlX29wdCkpIHsKKyNpZmRlZiBPUzIK KyAgICAgICAgc2hvcnQgZ2V0X2tlZXBhbGl2ZV9vcHQxNjsKKyAgICAgICAgc2hvcnQgc2V0X2tl ZXBhbGl2ZV9vcHQxNjsKKyAgICAgICAgaWYgKHggPT0gc2l6ZW9mKGdldF9rZWVwYWxpdmVfb3B0 MTYpKSB7CisgICAgICAgICAgICBkZWJ1ZyhGMTExLCJUQ1Aga2VlcGFsaXZlIHdhcm5pbmc6IFNP X0tFRVBBTElWRSIsCisgICAgICAgICAgICAgICAgICAibGVuIGlzIDE2LWJpdCIseCk7CisgICAg ICAgICAgICBpZiAoZ2V0c29ja29wdChzb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg U09MX1NPQ0tFVCwgU09fS0VFUEFMSVZFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNo YXIgKikmZ2V0X2tlZXBhbGl2ZV9vcHQxNiwgJngpCisgICAgICAgICAgICAgICAgKSB7CisgICAg ICAgICAgICAgICAgZGVidWcoRjExMSwKKyAgICAgICAgICAgICAgICAgICAgICAiVENQIGtlZXBh bGl2ZSBjYW4ndCBnZXQgU09fS0VFUEFMSVZFIiwKKyAgICAgICAgICAgICAgICAgICAgICBja19l cnJzdHIoKSwKKyAgICAgICAgICAgICAgICAgICAgICBlcnJubworICAgICAgICAgICAgICAgICAg ICAgICk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGdldF9rZWVwYWxpdmVfb3B0MTYgIT0gb25v ZmYpIHsKKyAgICAgICAgICAgICAgICBzZXRfa2VlcGFsaXZlX29wdDE2ID0gb25vZmY7CisgICAg ICAgICAgICAgICAgaWYgKHNldHNvY2tvcHQoc29jaywKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBTT0xfU09DS0VULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPX0tF RVBBTElWRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSZzZXRfa2Vl cGFsaXZlX29wdDE2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzZXRf a2VlcGFsaXZlX29wdDE2KSkKKyAgICAgICAgICAgICAgICAgICAgKSB7CisgICAgICAgICAgICAg ICAgICAgIGRlYnVnKEYxMTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJUQ1Aga2VlcGFs aXZlIGNhbid0IGNsZWFyIFNPX0tFRVBBTElWRSIsCisgICAgICAgICAgICAgICAgICAgICAgICAg IGNrX2VycnN0cigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJubworICAgICAgICAg ICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgICAgICB0Y3Bfa2VlcGFsaXZlID0g Z2V0X2tlZXBhbGl2ZV9vcHQxNjsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg ICAgICAgICAgICBkZWJ1ZyhGMTAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiVENQIGtl ZXBhbGl2ZSBuZXcgU09fS0VFUEFMSVZFIiwiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg c2V0X2tlZXBhbGl2ZV9vcHQxNik7CisgICAgICAgICAgICAgICAgICAgIHRjcF9rZWVwYWxpdmUg PSBzZXRfa2VlcGFsaXZlX29wdDE2OworICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGRl YnVnKEYxMDEsIlRDUCBrZWVwYWxpdmUgU09fS0VFUEFMSVZFIHVuY2hhbmdlZCIsIiIsCisgICAg ICAgICAgICAgICAgICAgICAgZ2V0X2tlZXBhbGl2ZV9vcHQxNik7CisgICAgICAgICAgICAgICAg dGNwX2tlZXBhbGl2ZSA9IG9ub2ZmOworICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAg ICAgICAgfQorICAgICAgICAgICAgcmV0dXJuKDApOworICAgICAgICB9CisjZW5kaWYgLyogT1My ICovCisgICAgICAgIGRlYnVnKEYxMTEsIlRDUCBrZWVwYWxpdmUgZXJyb3I6IFNPX0tFRVBBTElW RSIsImxlbiIseCk7CisgICAgICAgIGRlYnVnKEYxMTEsCisgICAgICAgICAgICAgICJUQ1Aga2Vl cGFsaXZlIFNPX0tFRVBBTElWRSIsCisgICAgICAgICAgICAgICJleHBlY3RlZCBsZW4iLAorICAg ICAgICAgICAgICBzaXplb2YoZ2V0X2tlZXBhbGl2ZV9vcHQpCisgICAgICAgICAgICAgICk7Cisg ICAgICAgIGRlYnVnKEYxMTEsCisgICAgICAgICAgICAgICJUQ1Aga2VlcGFsaXZlIFNPX0tFRVBB TElWRSIsCisgICAgICAgICAgICAgICJrZWVwYWxpdmVfb3B0IiwKKyAgICAgICAgICAgICAgZ2V0 X2tlZXBhbGl2ZV9vcHQKKyAgICAgICAgICAgICAgKTsKKyAgICB9IGVsc2UgaWYgKGdldF9rZWVw YWxpdmVfb3B0ICE9IG9ub2ZmKSB7CisgICAgICAgICAgICBzZXRfa2VlcGFsaXZlX29wdCA9IG9u b2ZmOworICAgICAgICAgICAgaWYgKHNldHNvY2tvcHQoc29jaywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICBTT0xfU09DS0VULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPX0tF RVBBTElWRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSZzZXRfa2VlcGFs aXZlX29wdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc2V0X2tlZXBhbGl2 ZV9vcHQpKQorICAgICAgICAgICAgICAgICkgeworICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEs CisgICAgICAgICAgICAgICAgICAgICAgIlRDUCBrZWVwYWxpdmUgY2FuJ3QgY2xlYXIgU09fS0VF UEFMSVZFIiwKKyAgICAgICAgICAgICAgICAgICAgICBja19lcnJzdHIoKSwKKyAgICAgICAgICAg ICAgICAgICAgICBlcnJubworICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAg ICAgdGNwX2tlZXBhbGl2ZSA9IGdldF9rZWVwYWxpdmVfb3B0OworICAgICAgICAgICAgfSBlbHNl IHsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLAorICAgICAgICAgICAgICAgICAgICAgICJU Q1Aga2VlcGFsaXZlIG5ldyBTT19LRUVQQUxJVkUiLAorICAgICAgICAgICAgICAgICAgICAgICIi LAorICAgICAgICAgICAgICAgICAgICAgIHNldF9rZWVwYWxpdmVfb3B0CisgICAgICAgICAgICAg ICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICB0Y3Bfa2VlcGFsaXZlID0gb25vZmY7CisgICAg ICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7Cisg ICAgICAgICAgICBkZWJ1ZyhGMTAxLCJUQ1Aga2VlcGFsaXZlIFNPX0tFRVBBTElWRSB1bmNoYW5n ZWQiLAorICAgICAgICAgICAgICAgICAgIiIsCisgICAgICAgICAgICAgICAgICBnZXRfa2VlcGFs aXZlX29wdAorICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIHRjcF9rZWVwYWxpdmUg PSBvbm9mZjsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgIH0KKyNlbHNlCisgICAgZGVidWco RjEwMCwiVENQIGtlZXBhbGl2ZSBTT19LRUVQQUxJVkUgbm90IGRlZmluZWQiLCIiLDApOworI2Vu ZGlmIC8qIFNPX0tFRVBBTElWRSAqLworI2Vsc2UKKyAgICBkZWJ1ZyhGMTAwLCJUQ1Aga2VlcGFs aXZlIFNPX1NPQ0tFVCBub3QgZGVmaW5lZCIsIiIsMCk7CisjZW5kaWYgLyogU09MX1NPQ0tFVCAq LworICAgIHJldHVybigwKTsKK30KKworaW50Citkb250cm91dGUoc29jayxvbm9mZikgaW50IHNv Y2s7IGludCBvbm9mZjsgeworI2lmZGVmIFNPTF9TT0NLRVQKKyNpZmRlZiBTT19ET05UUk9VVEUK KyAgICBpbnQgZ2V0X2RvbnRyb3V0ZV9vcHQ7CisgICAgaW50IHNldF9kb250cm91dGVfb3B0Owor ICAgIFNPQ0tPUFRfVCB4OworCisjaWZkZWYgSUtTRAorICAgIGlmICghaW5zZXJ2ZXIpCisjZW5k aWYgLyogSUtTRCAqLworICAgICAgaWYgKHNvY2sgPT0gLTEgfHwKKyAgICAgICAgbmV0dHlwZSAh PSBORVRfVENQQSAmJiBuZXR0eXBlICE9IE5FVF9UQ1BCICYmIG5ldHR5cGUgIT0gTkVUX1NTSAor ICAgICAgICAgICAgICAgIHx8IHR0bWRtID49IDApIHsKKyAgICAgICAgdGNwX2RvbnRyb3V0ZSA9 IG9ub2ZmOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisgICAgeCA9IHNpemVvZihnZXRfZG9u dHJvdXRlX29wdCk7CisgICAgaWYgKGdldHNvY2tvcHQoc29jaywKKyAgICAgICAgICAgICAgICAg ICBTT0xfU09DS0VULCBTT19ET05UUk9VVEUsIChjaGFyICopJmdldF9kb250cm91dGVfb3B0LCAm eCkpIHsKKyAgICAgICAgZGVidWcoRjExMSwiVENQIGRvbnRyb3V0ZSBjYW4ndCBnZXQgU09fRE9O VFJPVVRFIixja19lcnJzdHIoKSxlcnJubyk7CisgICAgfSBlbHNlIGlmICh4ICE9IHNpemVvZihn ZXRfZG9udHJvdXRlX29wdCkpIHsKKyNpZmRlZiBPUzIKKyAgICAgICAgc2hvcnQgZ2V0X2RvbnRy b3V0ZV9vcHQxNjsKKyAgICAgICAgc2hvcnQgc2V0X2RvbnRyb3V0ZV9vcHQxNjsKKyAgICAgICAg aWYgKHggPT0gc2l6ZW9mKGdldF9kb250cm91dGVfb3B0MTYpKSB7CisgICAgICAgICAgICBkZWJ1 ZyhGMTExLCJUQ1AgZG9udHJvdXRlIHdhcm5pbmc6IFNPX0RPTlRST1VURSIsCisgICAgICAgICAg ICAgICAgICAibGVuIGlzIDE2LWJpdCIseCk7CisgICAgICAgICAgICBpZiAoZ2V0c29ja29wdChz b2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgU09MX1NPQ0tFVCwgU09fRE9OVFJPVVRF LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikmZ2V0X2RvbnRyb3V0ZV9vcHQx NiwgJngpCisgICAgICAgICAgICAgICAgKSB7CisgICAgICAgICAgICAgICAgZGVidWcoRjExMSwK KyAgICAgICAgICAgICAgICAgICAgICAiVENQIGRvbnRyb3V0ZSBjYW4ndCBnZXQgU09fRE9OVFJP VVRFIiwKKyAgICAgICAgICAgICAgICAgICAgICBja19lcnJzdHIoKSwKKyAgICAgICAgICAgICAg ICAgICAgICBlcnJubworICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICB9IGVs c2UgaWYgKGdldF9kb250cm91dGVfb3B0MTYgIT0gb25vZmYpIHsKKyAgICAgICAgICAgICAgICBz ZXRfZG9udHJvdXRlX29wdDE2ID0gb25vZmY7CisgICAgICAgICAgICAgICAgaWYgKHNldHNvY2tv cHQoc29jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTT0xfU09DS0VULAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPX0RPTlRST1VURSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoY2hhciAqKSZzZXRfZG9udHJvdXRlX29wdDE2LAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzZXRfZG9udHJvdXRlX29wdDE2KSkKKyAgICAg ICAgICAgICAgICAgICAgKSB7CisgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICJUQ1AgZG9udHJvdXRlIGNhbid0IGNsZWFyIFNPX0RPTlRS T1VURSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNrX2VycnN0cigpLAorICAgICAgICAg ICAgICAgICAgICAgICAgICBlcnJubworICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAg ICAgICAgICAgICAgICAgICB0Y3BfZG9udHJvdXRlID0gZ2V0X2RvbnRyb3V0ZV9vcHQxNjsKKyAg ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAiVENQIGRvbnRyb3V0ZSBuZXcgU09fRE9OVFJPVVRF IiwiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0X2RvbnRyb3V0ZV9vcHQxNik7Cisg ICAgICAgICAgICAgICAgICAgIHRjcF9kb250cm91dGUgPSBzZXRfZG9udHJvdXRlX29wdDE2Owor ICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsIlRDUCBkb250cm91dGUg U09fRE9OVFJPVVRFIHVuY2hhbmdlZCIsIiIsCisgICAgICAgICAgICAgICAgICAgICAgZ2V0X2Rv bnRyb3V0ZV9vcHQxNik7CisgICAgICAgICAgICAgICAgdGNwX2RvbnRyb3V0ZSA9IG9ub2ZmOwor ICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0 dXJuKDApOworICAgICAgICB9CisjZW5kaWYgLyogT1MyICovCisgICAgICAgIGRlYnVnKEYxMTEs IlRDUCBkb250cm91dGUgZXJyb3I6IFNPX0RPTlRST1VURSIsImxlbiIseCk7CisgICAgICAgIGRl YnVnKEYxMTEsCisgICAgICAgICAgICAgICJUQ1AgZG9udHJvdXRlIFNPX0RPTlRST1VURSIsCisg ICAgICAgICAgICAgICJleHBlY3RlZCBsZW4iLAorICAgICAgICAgICAgICBzaXplb2YoZ2V0X2Rv bnRyb3V0ZV9vcHQpCisgICAgICAgICAgICAgICk7CisgICAgICAgIGRlYnVnKEYxMTEsCisgICAg ICAgICAgICAgICJUQ1AgZG9udHJvdXRlIFNPX0RPTlRST1VURSIsCisgICAgICAgICAgICAgICJk b250cm91dGVfb3B0IiwKKyAgICAgICAgICAgICAgZ2V0X2RvbnRyb3V0ZV9vcHQKKyAgICAgICAg ICAgICAgKTsKKyAgICB9IGVsc2UgaWYgKGdldF9kb250cm91dGVfb3B0ICE9IG9ub2ZmKSB7Cisg ICAgICAgICAgICBzZXRfZG9udHJvdXRlX29wdCA9IG9ub2ZmOworICAgICAgICAgICAgaWYgKHNl dHNvY2tvcHQoc29jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTT0xfU09DS0VULAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPX0RPTlRST1VURSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoY2hhciAqKSZzZXRfZG9udHJvdXRlX29wdCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzaXplb2Yoc2V0X2RvbnRyb3V0ZV9vcHQpKQorICAgICAgICAgICAgICAg ICkgeworICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsCisgICAgICAgICAgICAgICAgICAgICAg IlRDUCBkb250cm91dGUgY2FuJ3QgY2xlYXIgU09fRE9OVFJPVVRFIiwKKyAgICAgICAgICAgICAg ICAgICAgICBja19lcnJzdHIoKSwKKyAgICAgICAgICAgICAgICAgICAgICBlcnJubworICAgICAg ICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgdGNwX2RvbnRyb3V0ZSA9IGdldF9k b250cm91dGVfb3B0OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBkZWJ1 ZyhGMTAxLAorICAgICAgICAgICAgICAgICAgICAgICJUQ1AgZG9udHJvdXRlIG5ldyBTT19ET05U Uk9VVEUiLAorICAgICAgICAgICAgICAgICAgICAgICIiLAorICAgICAgICAgICAgICAgICAgICAg IHNldF9kb250cm91dGVfb3B0CisgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAg ICAgICB0Y3BfZG9udHJvdXRlID0gb25vZmY7CisgICAgICAgICAgICAgICAgcmV0dXJuIDE7Cisg ICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJU Q1AgZG9udHJvdXRlIFNPX0RPTlRST1VURSB1bmNoYW5nZWQiLAorICAgICAgICAgICAgICAgICAg IiIsCisgICAgICAgICAgICAgICAgICBnZXRfZG9udHJvdXRlX29wdAorICAgICAgICAgICAgICAg ICAgKTsKKyAgICAgICAgICAgIHRjcF9kb250cm91dGUgPSBvbm9mZjsKKyAgICAgICAgICAgIHJl dHVybiAxOworICAgIH0KKyNlbHNlCisgICAgZGVidWcoRjEwMCwiVENQIGRvbnRyb3V0ZSBTT19E T05UUk9VVEUgbm90IGRlZmluZWQiLCIiLDApOworI2VuZGlmIC8qIFNPX0RPTlRST1VURSAqLwor I2Vsc2UKKyAgICBkZWJ1ZyhGMTAwLCJUQ1AgZG9udHJvdXRlIFNPX1NPQ0tFVCBub3QgZGVmaW5l ZCIsIiIsMCk7CisjZW5kaWYgLyogU09MX1NPQ0tFVCAqLworICAgIHJldHVybigwKTsKK30KKwor aW50Citub19kZWxheShzb2NrLG9ub2ZmKSAgaW50IHNvY2s7IGludCBvbm9mZjsgeworI2lmZGVm IFNPTF9TT0NLRVQKKyNpZmRlZiBUQ1BfTk9ERUxBWQorICAgIGludCBnZXRfbm9kZWxheV9vcHQ7 CisgICAgaW50IHNldF9ub2RlbGF5X29wdDsKKyAgICBTT0NLT1BUX1QgeDsKKworI2lmZGVmIElL U0QKKyAgICBpZiAoIWluc2VydmVyKQorI2VuZGlmIC8qIElLU0QgKi8KKyAgICAgIGlmIChzb2Nr ID09IC0xIHx8CisgICAgICAgIG5ldHR5cGUgIT0gTkVUX1RDUEEgJiYgbmV0dHlwZSAhPSBORVRf VENQQiAmJiBuZXR0eXBlICE9IE5FVF9TU0gKKyAgICAgICAgICAgICAgICB8fCB0dG1kbSA+PSAw KSB7CisgICAgICAgIHRjcF9ub2RlbGF5ID0gb25vZmY7CisgICAgICAgIHJldHVybigxKTsKKyAg ICB9CisgICAgeCA9IHNpemVvZihnZXRfbm9kZWxheV9vcHQpOworICAgIGlmIChnZXRzb2Nrb3B0 KHNvY2ssSVBQUk9UT19UQ1AsVENQX05PREVMQVksCisgICAgICAgICAgICAgICAgICAgKGNoYXIg KikmZ2V0X25vZGVsYXlfb3B0LCZ4KSkgeworICAgICAgICBkZWJ1ZyhGMTExLAorICAgICAgICAg ICAgICAiVENQIG5vX2RlbGF5IGNhbid0IGdldCBUQ1BfTk9ERUxBWSIsCisgICAgICAgICAgICAg IGNrX2VycnN0cigpLAorICAgICAgICAgICAgICBlcnJubyk7CisgICAgfSBlbHNlIGlmICh4ICE9 IHNpemVvZihnZXRfbm9kZWxheV9vcHQpKSB7CisjaWZkZWYgT1MyCisgICAgICAgIHNob3J0IGdl dF9ub2RlbGF5X29wdDE2OworICAgICAgICBzaG9ydCBzZXRfbm9kZWxheV9vcHQxNjsKKyAgICAg ICAgaWYgKHggPT0gc2l6ZW9mKGdldF9ub2RlbGF5X29wdDE2KSkgeworICAgICAgICAgICAgZGVi dWcoRjExMSwiVENQIG5vX2RlbGF5IHdhcm5pbmc6IFRDUF9OT0RFTEFZIiwibGVuIGlzIDE2LWJp dCIseCk7CisgICAgICAgICAgICBpZiAoZ2V0c29ja29wdChzb2NrLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgSVBQUk9UT19UQ1AsIFRDUF9OT0RFTEFZLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgKGNoYXIgKikmZ2V0X25vZGVsYXlfb3B0MTYsICZ4KQorICAgICAgICAgICAgICAg ICkgeworICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsCisgICAgICAgICAgICAgICAgICAgICAg IlRDUCBub19kZWxheSBjYW4ndCBnZXQgVENQX05PREVMQVkiLAorICAgICAgICAgICAgICAgICAg ICAgIGNrX2VycnN0cigpLAorICAgICAgICAgICAgICAgICAgICAgIGVycm5vKTsKKyAgICAgICAg ICAgIH0gZWxzZSBpZiAoZ2V0X25vZGVsYXlfb3B0MTYgIT0gb25vZmYpIHsKKyAgICAgICAgICAg ICAgICBzZXRfbm9kZWxheV9vcHQxNiA9IG9ub2ZmOworICAgICAgICAgICAgICAgIGlmIChzZXRz b2Nrb3B0KHNvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVBQUk9UT19UQ1As CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVENQX05PREVMQVksCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikmc2V0X25vZGVsYXlfb3B0MTYsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHNldF9ub2RlbGF5X29wdDE2KSkKKyAgICAg ICAgICAgICAgICAgICAgKSB7CisgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICJUQ1Agbm9fZGVsYXkgY2FuJ3QgY2xlYXIgVENQX05PREVM QVkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBja19lcnJzdHIoKSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgZXJybm8pOworICAgICAgICAgICAgICAgICAgICB0Y3Bfbm9kZWxheSA9 IGdldF9ub2RlbGF5X29wdDE2OworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg ICAgICAgICAgIGRlYnVnKEYxMDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJUQ1Agbm9f ZGVsYXkgbmV3IFRDUF9OT0RFTEFZIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIiIsCisg ICAgICAgICAgICAgICAgICAgICAgICAgIHNldF9ub2RlbGF5X29wdDE2KTsKKyAgICAgICAgICAg ICAgICAgICAgdGNwX25vZGVsYXkgPSBvbm9mZjsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu IDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg ICAgICBkZWJ1ZyhGMTAxLCJUQ1Agbm9fZGVsYXkgVENQX05PREVMQVkgdW5jaGFuZ2VkIiwiIiwK KyAgICAgICAgICAgICAgICAgICAgICBnZXRfbm9kZWxheV9vcHQxNik7CisgICAgICAgICAgICAg ICAgdGNwX25vZGVsYXkgPSBvbm9mZjsKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybigwKTsKKyAgICAgICAgfQorI2VuZGlmIC8qIE9T MiAqLworICAgICAgICBkZWJ1ZyhGMTExLCJUQ1Agbm9fZGVsYXkgZXJyb3I6IFRDUF9OT0RFTEFZ IiwibGVuIix4KTsKKyAgICAgICAgZGVidWcoRjExMSwiVENQIG5vX2RlbGF5IFRDUF9OT0RFTEFZ IiwiZXhwZWN0ZWQgbGVuIiwKKyAgICAgICAgICAgICAgc2l6ZW9mKGdldF9ub2RlbGF5X29wdCkp OworICAgICAgICBkZWJ1ZyhGMTExLCJUQ1Agbm9fZGVsYXkgVENQX05PREVMQVkiLCJub2RlbGF5 X29wdCIsZ2V0X25vZGVsYXlfb3B0KTsKKyAgICB9IGVsc2UgaWYgKGdldF9ub2RlbGF5X29wdCAh PSBvbm9mZikgeworICAgICAgICBzZXRfbm9kZWxheV9vcHQgPSBvbm9mZjsKKyAgICAgICAgaWYg KHNldHNvY2tvcHQoc29jaywKKyAgICAgICAgICAgICAgICAgICAgICAgSVBQUk9UT19UQ1AsCisg ICAgICAgICAgICAgICAgICAgICAgIFRDUF9OT0RFTEFZLAorICAgICAgICAgICAgICAgICAgICAg ICAoY2hhciAqKSZzZXRfbm9kZWxheV9vcHQsCisgICAgICAgICAgICAgICAgICAgICAgIHNpemVv ZihzZXRfbm9kZWxheV9vcHQpKSkgeworICAgICAgICAgICAgZGVidWcoRjExMSwKKyAgICAgICAg ICAgICAgICAgICJUQ1Agbm9fZGVsYXkgY2FuJ3QgY2xlYXIgVENQX05PREVMQVkiLAorICAgICAg ICAgICAgICAgICAgY2tfZXJyc3RyKCksCisgICAgICAgICAgICAgICAgICBlcnJubworICAgICAg ICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIHRjcF9ub2RlbGF5ID0gZ2V0X25vZGVsYXlfb3B0 OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZGVidWcoRjEwMSwiVENQIG5vX2RlbGF5 IG5ldyBUQ1BfTk9ERUxBWSIsIiIsc2V0X25vZGVsYXlfb3B0KTsKKyAgICAgICAgICAgIHRjcF9u b2RlbGF5ID0gb25vZmY7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorICAgIH0g ZWxzZSB7CisgICAgICAgIGRlYnVnKEYxMDEsIlRDUCBub19kZWxheSBUQ1BfTk9ERUxBWSB1bmNo YW5nZWQiLCIiLGdldF9ub2RlbGF5X29wdCk7CisgICAgICAgIHRjcF9ub2RlbGF5ID0gb25vZmY7 CisgICAgICAgIHJldHVybigxKTsKKyAgICB9CisjZWxzZQorICAgIGRlYnVnKEYxMDAsIlRDUCBu b19kZWxheSBUQ1BfTk9ERUxBWSBub3QgZGVmaW5lZCIsIiIsMCk7CisjZW5kaWYgLyogVENQX05P REVMQVkgKi8KKyNlbHNlCisgICAgZGVidWcoRjEwMCwiVENQIG5vX2RlbGF5IFNPX1NPQ0tFVCBu b3QgZGVmaW5lZCIsIiIsMCk7CisjZW5kaWYgLyogU09MX1NPQ0tFVCAqLworICAgIHJldHVybiAw OworfQorI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCisjZW5kaWYgLyogTk9UQ1BPUFRTICovCisK KyNpZmRlZiBTVU5YMjUKKyNpZm5kZWYgWDI1X1dSX0ZBQ0lMSVRZCisvKiBGb3IgU29sYXJpcyAy LjMgLyBTdW5MaW5rIDgueCAtIHNlZSBjb21tZW50cyBpbiBja2NuZXQuaCAqLwordm9pZAorYnpl cm8ocyxuKSBjaGFyICpzOyBpbnQgbjsgeworICAgIG1lbXNldChzLDAsbik7Cit9CisjZW5kaWYg LyogWDI1X1dSX0ZBQ0lMSVRZICovCisjZW5kaWYgLyogU1VOWDI1ICovCisKKyNpZmRlZiBUQ1BT T0NLRVQKKyNpZm5kZWYgT1MyCisjaWZuZGVmIE5PTElTVEVOCisKKyNpZmRlZiBCU0RTRUxFQ1QK KyNpZm5kZWYgVk1TCisjaWZuZGVmIEJFTExWMTAKKyNpZm5kZWYgZGF0YWdlbmVyYWwKKyNpZmRl ZiBocDkwMDBzNTAwICAgICAgICAgICAgICAgICAgICAgICAvKiBIUC05MDAwLzUwMCBIUC1VIDUu MjEgKi8KKyNpbmNsdWRlIDx0aW1lLmg+CisjZWxzZQorCisvKioqKioqIFRISVMgU0VDVElPTiBB RERFRCBCWSBTVEVWRSBSQU5DRSAtIE9TOSBORVRXT1JLIFNFUlZFUgorKiAgICAgICAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogICAg ICAgRHVlIHRvIE9TOSdzIExhY2sgb2YgYSBzZWxlY3QoKSBjYWxsLCB0aGUgZm9sbG93aW5nIHNl ZW1zIHRvIGJlCisqICAgICAgIGVub3VnaCB0byBmb29sIHRoZSByZXN0IG9mIHRoZSBjb2RlIGlu dG8gY29tcGlsaW5nLiBUaGUgb25seQorKiAgICAgICBlZmZlY3QgdGhhdCBJIGNhbiBzZWUgaXMg dXNpbmcgY29udHJvbCBMIHRvIHJlZnJlc2ggdGhlIHN0YXR1cworKiAgICAgICBkaXNwbGF5IGdl dHMgcXVlZCB1cCB1bnRpbCBzb21lIG5ldHdvcmsgcGFja2V0cyBhcnJpdmUuCisqCisqICAgICAg IFRoaXMgc29sdXRpb24gaXMgYnkgbm8gbWVhbnMgZWxlZ2FudCBidXQgd29ya3MgZW5vdWdoIHRv IGJlCisqICAgICAgIGEgKHRoZSkgc29sdXRpb24uCisqCisqICAgICAgIEFsc28gd2l0aCB0aGUg ZGVmaW5lcyBJIGhhZCBzcGVjaWZpZWQgaW4gbXkgbWFrZWZpbGUgSSBoYWQgdG8KKyogICAgICAg aGF2ZSBhbiAjZW5kaWYgcmlnaHQgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSB3aGVuIGNvbXBpbGlu Zy4KKyogICAgICAgSSBkaWQgbm90IGJvdGhlciBzcGVkaW5nIHRpbWUgdG8gZmluZCBvdXQgd2h5 LgorKgorKiAgICAgICBDT1BUUyAgID0gLXRvPW9zayAtZD1PU0sgLWQ9VENQU09DS0VUIC1kPVNF TEVDVCAtZD1WT0lEPXZvaWQgLWQ9U0lHX1YgXAorKiAgICAgICAgICAtZD1EWU5BTUlDIC1kPVBB UlNFTlNFIC1kPUtBTkpJIC1kPU1ZQ1VSU0VTIC1kPVpGQ0RBVCBcCisqICAgICAgICAgIC1kPUNL X0FQQyAtZD1DS19SRURJUiAtZD1SRU5BTUUgLWQ9Q0tfVFRZRkQgLWQ9Tk9PTERNT0RFTVMgXAor KiAgICAgICAgICAtZD1DS19BTlNJQyAtZD1DS19YWVogLXRwPTY4MDQwZCAtbD1uZXRkYi5sIC1s PXNvY2tsaWIubCBcCisqICAgICAgICAgIC1sPXRlcm1saWIubCAtbD1tYXRoLmwgLWw9c3lzX2Ns aWIubAorKgorKiAgICAgICBzdGV2ZXJAb3plbWFpbC5jb20uYXUKKyovCisKKyNpZmRlZiAgT1NL CisjZGVmaW5lIEJTRFNFTEVDVCAgICAgICAgICAgICAgICAgICAgICAgLyogc3dpdGNoIG9uIEJT RCBzZWxlY3QgY29kZSAqLworI2RlZmluZSBGRF9TRVRTSVpFIDMyICAgICAgICAgICAgICAgICAg IC8qIE1heCAjIG9mIHBhdGhzIGluIE9TOSAqLworI2RlZmluZSBGRF9aRVJPKHApICAgICAgICAg ICAgICAgICAgICAgICgoKnApPTApCisjZGVmaW5lIEZEX1NFVChuLGIpICAgICAgICAgICAgICAg ICAgICAgKCgqYil8PSgxPDwobikpKQorI2RlZmluZSBGRF9JU1NFVChuLGIpICAgICAgICAgICAx ICAgICAgIC8qIGFsd2F5cyBzYXkgZGF0YSBpcyByZWFkeSAqLworI2RlZmluZSBzZWxlY3QoYSxi LGMsZCxlKSAgICAgICAxICAgICAgIC8qIGFsd2F5cyBzYXkgMSBwYXRoIGhhcyBkYXRhICovCit0 eXBlZGVmIGludCAgICAgZmRfc2V0OyAgICAgICAgICAgICAgICAgLyoga2VlcCBCU0QgQ29kZSBI YXBweSAqLworc3RydWN0IHRpbWV2YWwge2ludCB0dl9zZWMsdHZfdXNlYzt9OyAgIC8qIGtlZXAg QlNEIENvZGUgSGFwcHkgKi8KKworLyoqKioqKiBFTkQgT0YgT1M5IE1PRFMgRlJPTSBTVEVWRSBS QU5DRSAqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNlbmRpZiAvKiBPU0sgKi8KKworI2lu Y2x1ZGUgPHN5cy90aW1lLmg+CisjZW5kaWYgLyogaHA5MDAwczUwMCAqLworI2VuZGlmIC8qIGRh dGFnZW5lcmFsICovCisjZW5kaWYgLyogQkVMTFYxMCAqLworI2VuZGlmIC8qIFZNUyAqLworI2lm ZGVmIFNFTEVDVF9ICisjaW5jbHVkZSA8c3lzL3NlbGVjdC5oPgorI2VuZGlmIC8qIFNFTEVDVF9I ICovCisjZW5kaWYgLyogQlNEU0VMRUNUICovCisKKyNpZmRlZiBTRUxFQ1QKKyNpZmRlZiBDS19T Q09WNQorI2luY2x1ZGUgPHN5cy9zZWxlY3QuaD4KKyNlbmRpZiAvKiBDS19TQ09WNSAqLworI2Vu ZGlmIC8qIFNFTEVDVCAqLworCisjaWZkZWYgTk9UVVNFRAorLyogVCBDIFAgUyBPIEMgSyBFIFQg XyBPIFAgRSBOIC0tIE9wZW4gYSBwcmVleGlzdGluZyBzb2NrZXQgbnVtYmVyICovCisKK2ludAor dGNwc29ja2V0X29wZW4obmFtZSxsY2wsbmV0dCx0aW1vKSBjaGFyICogbmFtZTsgaW50ICogbGNs OyBpbnQgbmV0dDsgaW50IHRpbW8geworICAgIGludCBvbiA9IDE7CisgICAgc3RhdGljIHN0cnVj dCBzZXJ2ZW50ICpzZXJ2aWNlLCBzZXJ2cmVjOworICAgIHN0YXRpYyBzdHJ1Y3QgaG9zdGVudCAq aG9zdDsKKyAgICBzdGF0aWMgc3RydWN0IHNvY2thZGRyX2luIHNhZGRyOworICAgIHN0YXRpYwor I2lmZGVmIFVDWDUwCisgICAgICB1bnNpZ25lZAorI2VuZGlmIC8qIFVDWDUwICovCisgICAgICBp bnQgc2FkZHJsZW47CisjaWZkZWYgQlNEU0VMRUNUCisgICAgZmRfc2V0IHJmZHM7CisgICAgc3Ry dWN0IHRpbWV2YWwgdHY7CisjZWxzZQorI2lmZGVmIEJFTExTRUxFQ1QKKyAgICBmZF9zZXQgcmZk czsKKyNlbHNlCisgICAgZmRfc2V0IHJmZHM7CisgICAgZmRfc2V0IHJmZHM7CisgICAgc3RydWN0 IHRpbWV2YWwgeworICAgICAgICBsb25nIHR2X3NlYzsKKyAgICAgICAgbG9uZyB0dl91c2VjOwor ICAgIH0gdHY7CisjZW5kaWYgLyogQkVMTFNFTEVDVCAqLworI2VuZGlmIC8qIEJTRFNFTEVDVCAq LworCisgICAgZGVidWcoRjEwMSwidGNwc29ja2V0X29wZW4gbmV0dCIsIiIsbmV0dCk7CisgICAg KmlwYWRkciA9ICdcMCc7CisKKyAgICBpZiAobmV0dCAhPSBORVRfVENQQikKKyAgICAgIHJldHVy bigtMSk7ICAgICAgICAgICAgICAgICAgICAgICAvKiBCU0Qgc29ja2V0IHN1cHBvcnQgKi8KKwor ICAgIG5ldGNsb3MoKTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENsb3NlIGFueSBwcmV2 aW91cyBjb25uZWN0aW9uLiAqLworICAgIGNrc3RybmNweShuYW1lY29weSwgbmFtZSwgTkFNRUNQ WUwpOyAvKiBDb3B5IHRoZSBob3N0bmFtZS4gKi8KKyNpZmRlZiBDT01NRU5UCisgICAgLyogSmVm ZidzIHZlcnNpb24gZnJvbSAzMCBEZWMgMjAwNSBkb2Vzbid0IGluaGliaXQgVGVsbmV0ICovCisg ICAgaWYgKHR0bnByb3RvICE9IE5QX1RDUFJBVyAmJgorCXR0bnByb3RvICE9IE5QX1NTTF9SQVcg JiYKKwl0dG5wcm90byAhPSBOUF9UTFNfUkFXKQorICAgICAgdHRucHJvdG8gPSBOUF9OT05FOyAg ICAgICAgICAgICAgIC8qIE5vIHByb3RvY29sIHNlbGVjdGVkIHlldC4gKi8KKyNlbHNlCisgICAg LyogZmRjJ3MgdmVyc2lvbiBmcm9tIDQgRGVjIDIwMDUgd29ya3Mgb2sgKi8KKyAgICBpZiAodHRu cHJvdG8gIT0gTlBfVENQUkFXKQorICAgICAgdHRucHJvdG8gPSBOUF9OT05FOyAgICAgICAgICAg ICAgIC8qIE5vIHByb3RvY29sIHNlbGVjdGVkIHlldC4gKi8KKyNlbmRpZgkvKiBDT01NRU5UICov CisgICAgZGVidWcoRjExMCwidGNwc29ja2V0X29wZW4gbmFtZWNvcHkiLG5hbWVjb3B5LDApOwor CisgICAgLyogQXNzaWduIHRoZSBzb2NrZXQgbnVtYmVyIHRvIHR0eWZkIGFuZCB0aGVuIGZpbGwg aW4gdGNwIHN0cnVjdHVyZXMgKi8KKyAgICB0dHlmZCA9IGF0b2koJm5hbWVbMV0pOworICAgIGRl YnVnKEYxMTEsInRjcHNvY2tldF9vcGVuIiwidHR5ZmQiLHR0eWZkKTsKKworI2lmbmRlZiBOT1RD UE9QVFMKKyNpZmRlZiBTT0xfU09DS0VUCisgICAgc2V0c29ja29wdCh0dHlmZCwgU09MX1NPQ0tF VCwgU09fT09CSU5MSU5FLChjaGFyICopICZvbiwgc2l6ZW9mIG9uKTsKKworI2lmbmRlZiBkYXRh Z2VuZXJhbAorI2lmZGVmIFRDUF9OT0RFTEFZCisgICAgbm9fZGVsYXkodHR5ZmQsdGNwX25vZGVs YXkpOworI2VuZGlmIC8qIFRDUF9OT0RFTEFZICovCisjaWZkZWYgU09fS0VFUEFMSVZFCisgICAg a2VlcGFsaXZlKHR0eWZkLHRjcF9rZWVwYWxpdmUpOworI2VuZGlmIC8qIFNPX0tFRVBBTElWRSAq LworI2lmZGVmIFNPX0xJTkdFUgorICAgIGNrX2xpbmdlcih0dHlmZCx0Y3BfbGluZ2VyLCB0Y3Bf bGluZ2VyX3Rtbyk7CisjZW5kaWYgLyogU09fTElOR0VSICovCisjaWZkZWYgU09fU05EQlVGCisg ICAgc2VuZGJ1Zih0dHlmZCx0Y3Bfc2VuZGJ1Zik7CisjZW5kaWYgLyogU09fU05EQlVGICovCisj aWZkZWYgU09fUkNWQlVGCisgICAgcmVjdmJ1Zih0dHlmZCx0Y3BfcmVjdmJ1Zik7CisjZW5kaWYg LyogU09fUkNWQlVGICovCisjZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KKyNlbmRpZiAvKiBTT0xf U09DS0VUICovCisjZW5kaWYgLyogTk9UQ1BPUFRTICovCisKKyNpZmRlZiBOVF9UQ1BfT1ZFUkxB UFBFRAorICAgIE92ZXJsYXBwZWRXcml0ZUluaXQoKTsKKyAgICBPdmVybGFwcGVkUmVhZEluaXQo KTsKKyNlbmRpZiAvKiBOVF9UQ1BfT1ZFUkxBUFBFRCAqLworCisKKyAgICAvKiBHZXQgdGhlIG5h bWUgb2YgdGhlIGhvc3Qgd2UgYXJlIGNvbm5lY3RlZCB0byAqLworCisgICAgc2FkZHJsZW4gPSBz aXplb2Yoc2FkZHIpOworICAgIGdldHBlZXJuYW1lKHR0eWZkLChzdHJ1Y3Qgc29ja2FkZHIgKikm c2FkZHIsJnNhZGRybGVuKTsKKworICAgIGNrc3RybmNweShpcGFkZHIsKGNoYXIgKilpbmV0X250 b2Eoc2FkZHIuc2luX2FkZHIpLDIwKTsKKworICAgIGlmICh0Y3BfcmRucyA9PSBTRVRfT04KKyNp ZmRlZiBDS19LRVJCRVJPUworICAgICAgICB8fCB0Y3BfcmRucyA9PSBTRVRfQVVUTyAmJgorICAg ICAgICAgKGNrX2tyYjVfaXNfaW5zdGFsbGVkKCkgfHwgY2tfa3JiNF9pc19pbnN0YWxsZWQoKSkK KyNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLworI2lmbmRlZiBOT0hUVFAKKyAgICAgICAgICAmJiAo dGNwX2h0dHBfcHJveHkgPT0gTlVMTCkKKyNlbmRpZiAvKiBOT0hUVFAgKi8KKyNpZmRlZiBDS19T U0wKKyAgICAgICAgICAmJiAhKHNzbF9vbmx5X2ZsYWcgfHwgdGxzX29ubHlfZmxhZykKKyNlbmRp ZiAvKiBDS19TU0wgKi8KKyAgICAgICAgICkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBSZXZlcnNlIEROUyAqLworICAgICAgICBpZiAoIXF1aWV0KSB7CisgICAgICAgICAgICBwcmlu dGYoIiBSZXZlcnNlIEROUyBMb29rdXAuLi4gIik7CisgICAgICAgICAgICBmZmx1c2goc3Rkb3V0 KTsKKyAgICAgICAgfQorICAgICAgICBob3N0ID0gZ2V0aG9zdGJ5YWRkcigoY2hhciAqKSZzYWRk ci5zaW5fYWRkciw0LFBGX0lORVQpOworICAgICAgICBkZWJ1ZyhGMTEwLCJ0Y3Bzb2NrZXRfb3Bl biBnZXRob3N0YnlhZGRyIixob3N0ID8gIk9LIiA6ICJGQUlMRUQiLDApOworICAgICAgICBpZiAo aG9zdCkgeworICAgICAgICAgICAgaG9zdCA9IGNrX2NvcHlob3N0ZW50KGhvc3QpOworICAgICAg ICAgICAgZGVidWcoRjEwMCwidGNwc29ja2V0X29wZW4gZ2V0aG9zdGJ5YWRkciAhPSBOVUxMIiwi IiwwKTsKKyAgICAgICAgICAgIGlmICghcXVpZXQpIHsKKyAgICAgICAgICAgICAgICBwcmludGYo IihPSylcbiIpOworICAgICAgICAgICAgICAgIGZmbHVzaChzdGRvdXQpOworICAgICAgICAgICAg fQorICAgICAgICAgICAgY2tzdHJuY3B5KG5hbWUsIGhvc3QtPmhfbmFtZSwgODApOworICAgICAg ICAgICAgY2tzdHJuY2F0KG5hbWUsICI6IiwgODApOworICAgICAgICAgICAgY2tzdHJuY2F0KG5h bWUsY2t1aXRvYShudG9ocyhzYWRkci5zaW5fcG9ydCkpLCA4MCk7CisgICAgICAgICAgICBpZiAo IXF1aWV0CisjaWZuZGVmIE5PSUNQCisgICAgICAgICAgICAgICAgJiYgIWRvY29ueAorI2VuZGlm IC8qIE5PSUNQICovCisgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICBwcmludGYoIiVz IGNvbm5lY3RlZCBvbiBwb3J0ICVkXG4iLAorICAgICAgICAgICAgICAgICAgIGhvc3QtPmhfbmFt ZSwKKyAgICAgICAgICAgICAgICAgICBudG9ocyhzYWRkci5zaW5fcG9ydCkKKyAgICAgICAgICAg ICAgICAgICApOworICAgICAgICB9IGVsc2UgaWYgKCFxdWlldCkKKyAgICAgICAgICBwcmludGYo IkZhaWxlZFxuIik7CisgICAgfSBlbHNlIGlmICghcXVpZXQpCisgICAgICBwcmludGYoIihPSylc biIpOworCisgICAgaWYgKHRjcF9yZG5zICE9IFNFVF9PTiB8fCAhaG9zdCkgeworICAgICAgICBj a3N0cm5jcHkobmFtZSxpcGFkZHIsODApOworICAgICAgICBja3N0cm5jYXQobmFtZSwiOiIsODAp OworICAgICAgICBja3N0cm5jYXQobmFtZSxja3VpdG9hKG50b2hzKHNhZGRyLnNpbl9wb3J0KSks ODApOworICAgICAgICBpZiAoIXF1aWV0CisjaWZkZWYgTk9JQ1AKKyAgICAgICAgICAgICYmICFk b2NvbngKKyNlbmRpZiAvKiBOT0lDUCAqLworICAgICAgICAgICAgKQorICAgICAgICAgIHByaW50 ZigiJXMgY29ubmVjdGVkIG9uIHBvcnQgJWRcbiIsaXBhZGRyLG50b2hzKHNhZGRyLnNpbl9wb3J0 KSk7CisgICAgfQorICAgIGlmICghcXVpZXQpIGZmbHVzaChzdGRvdXQpOworICAgIHR0bmV0ID0g bmV0dDsgICAgICAgICAgICAgICAgICAgICAgIC8qIFRDUC9JUCAoc29ja2V0cykgbmV0d29yayAq LworCisjaWZkZWYgUkxPR0NPREUKKyAgICBpZiAobnRvaHMoc2FkZHIuc2luX3BvcnQpID09IDUx MykKKyAgICAgICAgdHRucHJvdG8gPSBOUF9MT0dJTjsKKyAgICBlbHNlCisjZW5kaWYgLyogUkxP R0NPREUgKi8KKyAgICAvKiBBc3N1bWUgdGhlIHNlcnZpY2UgaXMgVEVMTkVULiAqLworI2lmZGVm IENPTU1FTlQKKyAgICAgIC8qIEplZmYncyBjb2RlIGZyb20gMjAwNS8xMi8zMCAqLworICAgICAg aWYgKHR0bnByb3RvICE9IE5QX1RDUF9SQVcgJiYKKwkgIHR0bnByb3RvICE9IE5QX1NTTF9SQVcg JiYKKwkgIHR0bnByb3RvICE9IE5QX1RMU19SQVcpCisjZWxzZQorICAgICAgLyogZmRjJ3MgY29k ZSBmcm9tIDIwMDUvMTIvMDQgKi8KKyAgICAgIGlmICh0dG5wcm90byAhPSBOUF9UQ1BSQVcpCisj ZW5kaWYJLyogQ09NTUVOVCAqLworCXR0bnByb3RvID0gTlBfVEVMTkVUOwkJLyogWWVzLCBzZXQg Z2xvYmFsIGZsYWcuICovCisjaWZkZWYgQ0tfU0VDVVJJVFkKKyAgICAvKiBCZWZvcmUgSW5pdGlh bGl6YXRpb24gVGVsbmV0L1Jsb2dpbiBOZWdvdGlhdGlvbnMgSW5pdCBLZXJiZXJvcyAqLworICAg IGNrX2F1dGhfaW5pdCgodGNwX3JkbnMgJiYgaG9zdCAmJiBob3N0LT5oX25hbWUgJiYgaG9zdC0+ aF9uYW1lWzBdKSA/CisgICAgICAgICAgICAgICAgaG9zdC0+aF9uYW1lIDogaXBhZGRyLAorICAg ICAgICAgICAgICAgIGlwYWRkciwKKyAgICAgICAgICAgICAgICB1aWRidWYsCisgICAgICAgICAg ICAgICAgdHR5ZmQKKyAgICAgICAgICAgICAgICApOworI2VuZGlmIC8qIENLX1NFQ1VSSVRZICov CisgICAgaWYgKHRuX2luaSgpIDwgMCkgICAgICAgICAgICAgICAgICAgLyogU3RhcnQvUmVzZXQg VEVMTkVUIG5lZ290aWF0aW9ucyAqLworICAgICAgaWYgKHR0Y2hrKCkgPCAwKSAgICAgICAgICAg ICAgICAgIC8qIERpZCBpdCBmYWlsIGR1ZSB0byBjb25uZWN0IGxvc3M/ICovCisgICAgICAgIHJl dHVybigtMSk7CisKKyAgICBpZiAoKmxjbCA8IDApICpsY2wgPSAxOyAgICAgICAgICAgICAvKiBM b2NhbCBtb2RlLiAqLworCisgICAgcmV0dXJuKDApOyAgICAgICAgICAgICAgICAgICAgICAgICAg LyogRG9uZS4gKi8KK30KKyNlbmRpZiAvKiBOT1RVU0VEICovCisKKy8qICBUIEMgUCBTIFIgViBf IE8gUCBFIE4gIC0tICBPcGVuIGEgVENQL0lQIFNlcnZlciBjb25uZWN0aW9uICAqLworLyoKKyAg Q2FsbGluZyBjb252ZW50aW9ucyBzYW1lIGFzIHR0b3BlbigpLCBleGNlcHQgdGhpcmQgYXJndW1l bnQgaXMgbmV0d29yaworICB0eXBlIHJhdGhlciB0aGFuIG1vZGVtIHR5cGUuCisqLworaW50Cit0 Y3BzcnZfb3BlbihuYW1lLGxjbCxuZXR0LHRpbW8pIGNoYXIgKiBuYW1lOyBpbnQgKiBsY2w7IGlu dCBuZXR0OyBpbnQgdGltbzsgeworICAgIGNoYXIgKnA7CisgICAgaW50IGksIHg7CisgICAgU09D S09QVF9UIG9uID0gMTsKKyAgICBpbnQgcmVhZHlfdG9fYWNjZXB0ID0gMDsKKyAgICBzdGF0aWMg c3RydWN0IHNlcnZlbnQgKnNlcnZpY2UsICpzZXJ2aWNlMiwgc2VydnJlYzsKKyAgICBzdGF0aWMg c3RydWN0IGhvc3RlbnQgKmhvc3Q7CisgICAgc3RhdGljIHN0cnVjdCBzb2NrYWRkcl9pbiBzYWRk cjsKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gbF9hZGRyOworICAgIEdTT0NLTkFNRV9UIGxfc2xl bjsKKyNpZmRlZiBVQ1g1MAorICAgIHN0YXRpYyB1X2ludCBzYWRkcmxlbjsKKyNlbHNlCisgICAg c3RhdGljIFNPQ0tPUFRfVCBzYWRkcmxlbjsKKyNlbmRpZiAvKiBVQ1g1MCAqLworCisjaWZkZWYg QlNEU0VMRUNUCisgICAgZmRfc2V0IHJmZHM7CisgICAgc3RydWN0IHRpbWV2YWwgdHY7CisjZWxz ZQorI2lmZGVmIEJFTExTRUxDVAorICAgIGZkX3NldCByZmRzOworI2Vsc2UKKyAgICBmZF9zZXQg cmZkczsKKyAgICBzdHJ1Y3QgdGltZXZhbCB7CisgICAgICAgIGxvbmcgdHZfc2VjOworICAgICAg ICBsb25nIHR2X3VzZWM7CisgICAgfSB0djsKKyNlbmRpZiAvKiBCRUxMU0VMRUNUICovCisjZW5k aWYgLyogQlNEU0VMRUNUICovCisjaWZkZWYgQ0tfU1NMCisgICAgaW50IHNzbF9mYWlsZWQgPSAw OworI2VuZGlmIC8qIENLX1NTTCAqLworCisgICAgZGVidWcoRjEwMSwidGNwc3J2X29wZW4gbmV0 dCIsIiIsbmV0dCk7CisgICAgKmlwYWRkciA9ICdcMCc7CisKKyAgICBpZiAobmV0dCAhPSBORVRf VENQQikKKyAgICAgIHJldHVybigtMSk7ICAgICAgICAgICAgICAgICAgICAgICAvKiBCU0Qgc29j a2V0IHN1cHBvcnQgKi8KKworICAgIG5ldGNsb3MoKTsgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIENsb3NlIGFueSBwcmV2aW91cyBjb25uZWN0aW9uLiAqLworICAgIGNrc3RybmNweShuYW1l Y29weSwgbmFtZSwgTkFNRUNQWUwpOyAvKiBDb3B5IHRoZSBob3N0bmFtZS4gKi8KKyAgICAvKiBE b24ndCBkbyB0aGlzLiAqLworI2lmZGVmIENPTU1FTlQKKyAgICAvKiBmZGMgKi8KKyAgICBpZiAo dHRucHJvdG8gIT0gTlBfVENQUkFXKQorICAgICAgdHRucHJvdG8gPSBOUF9OT05FOyAgICAgICAg ICAgICAgIC8qIE5vIHByb3RvY29sIHNlbGVjdGVkIHlldC4gKi8KKyNlbmRpZgkvKiBDT01NRU5U ICovCisjaWZkZWYgQ09NTUVOVAorICAgIC8qIEplZmYgKi8KKyAgICBpZiAodHRucHJvdG8gIT0g TlBfVENQX1JBVyAmJgorCXR0bnByb3RvICE9IE5QX1NTTF9SQVcgJiYKKwl0dG5wcm90byAhPSBO UF9UTFNfUkFXKQorICAgICAgdHRucHJvdG8gPSBOUF9OT05FOyAgICAgICAgICAgICAgIC8qIE5v IHByb3RvY29sIHNlbGVjdGVkIHlldC4gKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgZGVi dWcoRjExMCwidGNwc3J2X29wZW4gbmFtZWNvcHkiLG5hbWVjb3B5LDApOworCisgICAgcCA9IG5h bWVjb3B5OyAgICAgICAgICAgICAgICAgICAgICAgLyogV2FzIGEgc2VydmljZSByZXF1ZXN0ZWQ/ ICovCisgICAgd2hpbGUgKCpwICE9ICdcMCcgJiYgKnAgIT0gJzonKQorICAgICAgcCsrOyAvKiBM b29rIGZvciBjb2xvbiAqLworICAgIGlmICgqcCA9PSAnOicpIHsgICAgICAgICAgICAgICAgICAg IC8qIEhhdmUgYSBjb2xvbiAqLworICAgICAgICAqcCsrID0gJ1wwJzsgICAgICAgICAgICAgICAg ICAgIC8qIEdldCBzZXJ2aWNlIG5hbWUgb3IgbnVtYmVyICovCisgICAgfSBlbHNlIHsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogT3RoZXJ3aXNlIHVzZSBrZXJtaXQgKi8KKyAgICAgICAg cCA9ICJrZXJtaXQiOworICAgIH0KKyAgICBkZWJ1ZyhGMTEwLCJ0Y3BzcnZfb3BlbiBzZXJ2aWNl IHJlcXVlc3RlZCIscCwwKTsKKyAgICBpZiAoaXNkaWdpdCgqcCkpIHsgICAgICAgICAgICAgICAg ICAvKiBVc2Ugc29ja2V0IG51bWJlciB3aXRob3V0IGxvb2t1cCAqLworICAgICAgICBzZXJ2aWNl ID0gJnNlcnZyZWM7CisgICAgICAgIHNlcnZpY2UtPnNfcG9ydCA9IGh0b25zKCh1bnNpZ25lZCBz aG9ydClhdG9pKHApKTsKKyAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBPdGhlcndpc2UgbG9va3VwIHRoZSBzZXJ2aWNlIG5hbWUgKi8KKyAgICAgICAgc2VydmljZSA9 IGdldHNlcnZieW5hbWUocCwgInRjcCIpOworICAgIH0KKyAgICBpZiAoIXNlcnZpY2UgJiYgIXN0 cmNtcCgia2VybWl0IixwKSkgeyAvKiBVc2UgS2VybWl0IHNlcnZpY2UgcG9ydCAqLworICAgICAg ICBzZXJ2aWNlID0gJnNlcnZyZWM7CisgICAgICAgIHNlcnZpY2UtPnNfcG9ydCA9IGh0b25zKDE2 NDkpOworICAgIH0KKyNpZmRlZiBSTE9HQ09ERQorICAgIGlmIChzZXJ2aWNlICYmICFzdHJjbXAo ImxvZ2luIixwKSAmJiBzZXJ2aWNlLT5zX3BvcnQgIT0gaHRvbnMoNTEzKSkgeworICAgICAgICBm cHJpbnRmKHN0ZGVyciwKKyAgICAgICAgICAgICAgICAiICBXYXJuaW5nOiBsb2dpbiBzZXJ2aWNl IG9uIHBvcnQgJWQgaW5zdGVhZCBvZiBwb3J0IDUxM1xuIiwKKyAgICAgICAgICAgICAgICAgbnRv aHMoc2VydmljZS0+c19wb3J0KSk7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiICBFZGl0IFNF UlZJQ0VTIGZpbGUgaWYgUkxPR0lOIGZhaWxzIHRvIGNvbm5lY3QuXG4iKTsKKyAgICAgICAgZGVi dWcoRjEwMSwidGNwc3J2X29wZW4gbG9naW4gb24gcG9ydCIsIiIsbnRvaHMoc2VydmljZS0+c19w b3J0KSk7CisgICAgfQorI2VuZGlmIC8qIFJMT0dDT0RFICovCisgICAgaWYgKCFzZXJ2aWNlKSB7 CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ2Fubm90IGZpbmQgcG9ydCBmb3Igc2VydmljZTog JXNcbiIsIHApOworICAgICAgICBkZWJ1ZyhGMTExLCJ0Y3BzcnZfb3BlbiBjYW4ndCBnZXQgc2Vy dmljZSIscCxlcnJubyk7CisgICAgICAgIGVycm5vID0gMDsgICAgICAgICAgICAgICAgICAgICAg LyogcmF0aGVyIHRoYW4gbWlzbGVhZCAqLworICAgICAgICByZXR1cm4oLTEpOworICAgIH0KKwor ICAgIC8qIElmIHdlIGN1cnJlbnRseSBoYXZlIGEgbGlzdGVuIGFjdGl2ZSBidXQgcG9ydCBoYXMg Y2hhbmdlZCB0aGVuIGNsb3NlICovCisKKyAgICBkZWJ1ZyhGMTAxLCJ0Y3BzcnZfb3BlbiBjaGVj a2luZyBwcmV2aW91cyBjb25uZWN0aW9uIiwiIix0Y3BzcmZkKTsKKyAgICBkZWJ1ZyhGMTAxLCJ0 Y3BzcnZfb3BlbiBwcmV2aW91cyB0Y3BzcnZfcG9ydCIsIiIsdGNwc3J2X3BvcnQpOworICAgIGlm ICh0Y3BzcmZkICE9IC0xICYmCisgICAgICAgIHRjcHNydl9wb3J0ICE9IG50b2hzKCh1bnNpZ25l ZCBzaG9ydClzZXJ2aWNlLT5zX3BvcnQpKSB7CisgICAgICAgIGRlYnVnKEYxMDAsInRjcHNydl9v cGVuIGNsb3NpbmcgcHJldmlvdXMgY29ubmVjdGlvbiIsIiIsMCk7CisjaWZkZWYgVENQSVBMSUIK KyAgICAgICAgc29ja2V0X2Nsb3NlKHRjcHNyZmQpOworI2Vsc2UKKyAgICAgICAgY2xvc2UodGNw c3JmZCk7CisjZW5kaWYgLyogVENQSVBMSUIgKi8KKyAgICAgICAgdGNwc3JmZCA9IC0xOworICAg IH0KKyAgICBkZWJ1ZyhGMTAwLCJ0Y3BzcnZfb3BlbiB0Y3BzcmZkIiwiIix0Y3BzcmZkKTsKKyAg ICBpZiAodGNwc3JmZCA9PSAtMSkgeworCisgICAgICAgIC8qIFNldCB1cCBzb2NrZXQgc3RydWN0 dXJlIGFuZCBnZXQgaG9zdCBhZGRyZXNzICovCisKKyAgICAgICAgYnplcm8oKGNoYXIgKikmc2Fk ZHIsIHNpemVvZihzYWRkcikpOworICAgICAgICBkZWJ1ZyhGMTAwLCJ0Y3BzcnZfb3BlbiBiemVy byBvayIsIiIsMCk7CisgICAgICAgIHNhZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworICAgICAg ICBpZiAodGNwX2FkZHJlc3MpIHsKKyNpZmRlZiBJTkFERFJYCisgICAgICAgICAgICBpbmFkZHJ4 ID0gaW5ldF9hZGRyKHRjcF9hZGRyZXNzKTsKKyAgICAgICAgICAgIHNhZGRyLnNpbl9hZGRyLnNf YWRkciA9ICoodW5zaWduZWQgbG9uZyAqKSZpbmFkZHJ4OworI2Vsc2UKKyAgICAgICAgICAgIHNh ZGRyLnNpbl9hZGRyLnNfYWRkciA9IGluZXRfYWRkcih0Y3BfYWRkcmVzcyk7CisjZW5kaWYgLyog SU5BRERSWCAqLworICAgICAgICB9IGVsc2UKKyAgICAgICAgICBzYWRkci5zaW5fYWRkci5zX2Fk ZHIgPSBJTkFERFJfQU5ZOworCisgICAgICAgIC8qIEdldCBhIGZpbGUgZGVzY3JpcHRvciBmb3Ig dGhlIGNvbm5lY3Rpb24uICovCisKKyAgICAgICAgc2FkZHIuc2luX3BvcnQgPSBzZXJ2aWNlLT5z X3BvcnQ7CisgICAgICAgIGlwYWRkclswXSA9ICdcMCc7CisKKyAgICAgICAgZGVidWcoRjEwMCwi dGNwc3J2X29wZW4gY2FsbGluZyBzb2NrZXQiLCIiLDApOworICAgICAgICBpZiAoKHRjcHNyZmQg PSBzb2NrZXQoQUZfSU5FVCwgU09DS19TVFJFQU0sIDApKSA8IDApIHsKKyAgICAgICAgICAgIHBl cnJvcigiVENQIHNvY2tldCBlcnJvciIpOworICAgICAgICAgICAgZGVidWcoRjEwMSwidGNwc3J2 X29wZW4gc29ja2V0IGVycm9yIiwiIixlcnJubyk7CisgICAgICAgICAgICByZXR1cm4gKC0xKTsK KyAgICAgICAgfQorICAgICAgICBlcnJubyA9IDA7CisKKyAgICAgICAgLyogU3BlY2lmeSB0aGUg UG9ydCBtYXkgYmUgcmV1c2VkICovCisKKyAgICAgICAgZGVidWcoRjEwMCwidGNwc3J2X29wZW4g Y2FsbGluZyBzZXRzb2Nrb3B0IiwiIiwwKTsKKyAgICAgICAgeCA9IHNldHNvY2tvcHQodGNwc3Jm ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgU09MX1NPQ0tFVCxTT19SRVVTRUFERFIsKGNoYXIg Kikmb24sc2l6ZW9mIG9uKTsKKyAgICAgICAgZGVidWcoRjEwMSwidGNwc3J2X29wZW4gc2V0c29j a29wdCIsIiIseCk7CisKKyAgICAgICAvKiBOb3cgYmluZCB0byB0aGUgc29ja2V0ICovCisgICAg ICAgIHByaW50ZigiXG5CaW5kaW5nIHNvY2tldCB0byBwb3J0ICVkIC4uLlxuIiwKKyAgICAgICAg ICAgICAgIG50b2hzKCh1bnNpZ25lZCBzaG9ydClzZXJ2aWNlLT5zX3BvcnQpKTsKKyAgICAgICAg aWYgKGJpbmQodGNwc3JmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZzYWRkciwgc2l6ZW9mKHNhZGRy KSkgPCAwKSB7CisgICAgICAgICAgICBpID0gZXJybm87ICAgICAgICAgICAgICAgICAgLyogU2F2 ZSBlcnJvciBjb2RlICovCisjaWZkZWYgVENQSVBMSUIKKyAgICAgICAgICAgIHNvY2tldF9jbG9z ZSh0Y3BzcmZkKTsKKyNlbHNlIC8qIFRDUElQTElCICovCisgICAgICAgICAgICBjbG9zZSh0Y3Bz cmZkKTsKKyNlbmRpZiAvKiBUQ1BJUExJQiAqLworICAgICAgICAgICAgdGNwc3JmZCA9IC0xOwor ICAgICAgICAgICAgdGNwc3J2X3BvcnQgPSAwOworICAgICAgICAgICAgdHR5ZmQgPSAtMTsKKyAg ICAgICAgICAgIHdhc2Nsb3NlZCA9IDE7CisgICAgICAgICAgICBlcnJubyA9IGk7ICAgICAgICAg ICAgICAgICAgLyogYW5kIHJlcG9ydCB0aGlzIGVycm9yICovCisgICAgICAgICAgICBkZWJ1ZyhG MTAxLCJ0Y3BzcnZfb3BlbiBiaW5kIGVycm5vIiwiIixlcnJubyk7CisgICAgICAgICAgICBwcmlu dGYoIj9VbmFibGUgdG8gYmluZCB0byBzb2NrZXQgKGVycm5vID0gJWQpXG4iLGVycm5vKTsKKyAg ICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAgIH0KKyAgICAgICAgZGVidWcoRjEwMCwidGNw c3J2X29wZW4gYmluZCBPSyIsIiIsMCk7CisgICAgICAgIHByaW50ZigiTGlzdGVuaW5nIC4uLlxu Iik7CisgICAgICAgIGlmIChsaXN0ZW4odGNwc3JmZCwgMTUpIDwgMCkgeworICAgICAgICAgICAg aSA9IGVycm5vOyAgICAgICAgICAgICAgICAgIC8qIFNhdmUgZXJyb3IgY29kZSAqLworI2lmZGVm IFRDUElQTElCCisgICAgICAgICAgICBzb2NrZXRfY2xvc2UodGNwc3JmZCk7CisjZWxzZSAvKiBU Q1BJUExJQiAqLworICAgICAgICAgICAgY2xvc2UodGNwc3JmZCk7CisjZW5kaWYgLyogVENQSVBM SUIgKi8KKyAgICAgICAgICAgIHRjcHNyZmQgPSAtMTsKKyAgICAgICAgICAgIHRjcHNydl9wb3J0 ID0gMDsKKyAgICAgICAgICAgIHR0eWZkID0gLTE7CisgICAgICAgICAgICB3YXNjbG9zZWQgPSAx OworICAgICAgICAgICAgZXJybm8gPSBpOyAgICAgICAgICAgICAgICAgIC8qIEFuZCByZXBvcnQg dGhpcyBlcnJvciAqLworICAgICAgICAgICAgZGVidWcoRjEwMSwidGNwc3J2X29wZW4gbGlzdGVu IGVycm5vIiwiIixlcnJubyk7CisgICAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICB9Cisg ICAgICAgIGRlYnVnKEYxMDAsInRjcHNydl9vcGVuIGxpc3RlbiBPSyIsIiIsMCk7CisgICAgICAg IHRjcHNydl9wb3J0ID0gbnRvaHMoKHVuc2lnbmVkIHNob3J0KXNlcnZpY2UtPnNfcG9ydCk7Cisg ICAgfQorCisjaWZkZWYgQ0tfU1NMCisgICAgaWYgKGNrX3NzbGVheV9pc19pbnN0YWxsZWQoKSkg eworICAgICAgICBpZiAoIXNzbF90bl9pbml0KFNTTF9TRVJWRVIpKSB7CisgICAgICAgICAgICBz c2xfZmFpbGVkID0gMTsKKyAgICAgICAgICAgIGlmIChiaW9fZXJyIT1OVUxMKSB7CisgICAgICAg ICAgICAgICAgQklPX3ByaW50ZihiaW9fZXJyLCJkb19zc2xlYXlfaW5pdCgpIGZhaWxlZFxuIik7 CisgICAgICAgICAgICAgICAgRVJSX3ByaW50X2Vycm9ycyhiaW9fZXJyKTsKKyAgICAgICAgICAg IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZmZsdXNoKHN0ZGVycik7CisgICAgICAgICAgICAg ICAgZnByaW50ZihzdGRlcnIsImRvX3NzbGVheV9pbml0KCkgZmFpbGVkXG4iKTsKKyAgICAgICAg ICAgICAgICBFUlJfcHJpbnRfZXJyb3JzX2ZwKHN0ZGVycik7CisgICAgICAgICAgICB9CisgICAg ICAgICAgICBpZiAodGxzX29ubHlfZmxhZyB8fCBzc2xfb25seV9mbGFnKSB7CisjaWZkZWYgVENQ SVBMSUIKKyAgICAgICAgICAgICAgICBzb2NrZXRfY2xvc2UodHR5ZmQpOworICAgICAgICAgICAg ICAgIHNvY2tldF9jbG9zZSh0Y3BzcmZkKTsKKyNlbHNlIC8qIFRDUElQTElCICovCisgICAgICAg ICAgICAgICAgY2xvc2UodHR5ZmQpOworICAgICAgICAgICAgICAgIGNsb3NlKHRjcHNyZmQpOwor I2VuZGlmIC8qIFRDUElQTElCICovCisgICAgICAgICAgICAgICAgdHR5ZmQgPSAtMTsKKyAgICAg ICAgICAgICAgICB3YXNjbG9zZWQgPSAxOworICAgICAgICAgICAgICAgIHRjcHNyZmQgPSAtMTsK KyAgICAgICAgICAgICAgICB0Y3BzcnZfcG9ydCA9IDA7CisgICAgICAgICAgICAgICAgcmV0dXJu KC0xKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8qIHdlIHdpbGwgY29udGludWUgdG8g YWNjZXB0IHRoZSBjb25uZWN0aW9uICAgKi8KKyAgICAgICAgICAgIC8qIHdpdGhvdXQgU1NMIG9y IFRMUyBzdXBwb3J0IHVubGVzcyByZXF1aXJlZC4gKi8KKyAgICAgICAgICAgIGlmICggVEVMT1BU X0RFRl9TX01FX01PREUoVEVMT1BUX1NUQVJUX1RMUykgIT0gVE5fTkdfTVUgKQorICAgICAgICAg ICAgICAgIFRFTE9QVF9ERUZfU19NRV9NT0RFKFRFTE9QVF9TVEFSVF9UTFMpID0gVE5fTkdfUkY7 CisgICAgICAgICAgICBpZiAoIFRFTE9QVF9ERUZfU19VX01PREUoVEVMT1BUX1NUQVJUX1RMUykg IT0gVE5fTkdfTVUgKQorICAgICAgICAgICAgICAgIFRFTE9QVF9ERUZfU19VX01PREUoVEVMT1BU X1NUQVJUX1RMUykgPSBUTl9OR19SRjsKKyAgICAgICAgICAgIGlmICggVEVMT1BUX0RFRl9DX01F X01PREUoVEVMT1BUX1NUQVJUX1RMUykgIT0gVE5fTkdfTVUgKQorICAgICAgICAgICAgICAgIFRF TE9QVF9ERUZfQ19NRV9NT0RFKFRFTE9QVF9TVEFSVF9UTFMpID0gVE5fTkdfUkY7CisgICAgICAg ICAgICBpZiAoIFRFTE9QVF9ERUZfQ19VX01PREUoVEVMT1BUX1NUQVJUX1RMUykgIT0gVE5fTkdf TVUgKQorICAgICAgICAgICAgICAgIFRFTE9QVF9ERUZfQ19VX01PREUoVEVMT1BUX1NUQVJUX1RM UykgPSBUTl9OR19SRjsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBDS19TU0wgKi8KKwor ICAgIHByaW50ZigiXG5XYWl0aW5nIHRvIEFjY2VwdCBhIFRDUC9JUCBjb25uZWN0aW9uIG9uIHBv cnQgJWQgLi4uXG4iLAorICAgICAgICAgICBudG9ocygodW5zaWduZWQgc2hvcnQpc2VydmljZS0+ c19wb3J0KSk7CisgICAgc2FkZHJsZW4gPSBzaXplb2Yoc2FkZHIpOworCisjaWZkZWYgQlNEU0VM RUNUCisgICAgdHYudHZfc2VjICA9IHR2LnR2X3VzZWMgPSAwTDsKKyAgICBpZiAodGltbyA8IDAp CisgICAgICB0di50dl91c2VjID0gKGxvbmcpIC10aW1vICogMTAwMDBMOworICAgIGVsc2UKKyAg ICAgIHR2LnR2X3NlYyA9IHRpbW87CisgICAgZGVidWcoRjEwMSwidGNwc3J2X29wZW4gQlNEU0VM RUNUIiwiIix0aW1vKTsKKyNlbHNlCisgICAgZGVidWcoRjEwMSwidGNwc3J2X29wZW4gbm90IEJT RFNFTEVDVCIsIiIsdGltbyk7CisjZW5kaWYgLyogQlNEU0VMRUNUICovCisKKyAgICBpZiAodGlt bykgeworICAgICAgICB3aGlsZSAoIXJlYWR5X3RvX2FjY2VwdCkgeworI2lmZGVmIEJTRFNFTEVD VAorICAgICAgICAgICAgRkRfWkVSTygmcmZkcyk7CisgICAgICAgICAgICBGRF9TRVQodGNwc3Jm ZCwgJnJmZHMpOworICAgICAgICAgICAgcmVhZHlfdG9fYWNjZXB0ID0KKyAgICAgICAgICAgICAg KChzZWxlY3QoRkRfU0VUU0laRSwKKyNpZmRlZiBIUFVYCisjaWZkZWYgSFBVWDEwMTAKKyAgICAg ICAgICAgICAgICAgICAgICAgKGZkX3NldCAqKQorI2Vsc2UKKworICAgICAgICAgICAgICAgICAg ICAgICAoaW50ICopCisjZW5kaWYgLyogSFBVWDEwMTAgKi8KKyNlbHNlCisjaWZkZWYgX19ERUND CisjaWZkZWYgSU5UU0VMRUNUCisgICAgICAgICAgICAgICAgICAgICAgIChpbnQgKikKKyNlbHNl IC8qIGRlZiBJTlRTRUxFQ1QgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgKGZkX3NldCAqKQor I2VuZGlmIC8qIGRlZiBJTlRTRUxFQ1QgW2Vsc2VdICovCisjZW5kaWYgLyogX19ERUNDICovCisj ZW5kaWYgLyogSFBVWCAqLworICAgICAgICAgICAgICAgICAgICAgICAmcmZkcywgTlVMTCwgTlVM TCwgJnR2KSA+IDApICYmCisgICAgICAgICAgICAgICBGRF9JU1NFVCh0Y3BzcmZkLCAmcmZkcykp OworI2Vsc2UgLyogQlNEU0VMRUNUICovCisjaWZkZWYgSUJNU0VMRUNUCisjZGVmaW5lIGNrX3Ns ZWVwaW50IDI1MAorICAgICAgICAgICAgcmVhZHlfdG9fYWNjZXB0ID0KKyAgICAgICAgICAgICAg KHNlbGVjdCgmdGNwc3JmZCwgMSwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICB0aW1vIDwg MCA/IC10aW1vIDoKKyAgICAgICAgICAgICAgICAgICAgICAodGltbyA+IDAgPyB0aW1vICogMTAw MEwgOiBja19zbGVlcGludCkpID09IDEKKyAgICAgICAgICAgICAgICk7CisjZWxzZQorI2lmZGVm IEJFTExTRUxFQ1QKKyAgICAgICAgICAgIEZEX1pFUk8ocmZkcyk7CisgICAgICAgICAgICBGRF9T RVQodGNwc3JmZCwgcmZkcyk7CisgICAgICAgICAgICByZWFkeV90b19hY2NlcHQgPQorICAgICAg ICAgICAgICAoKHNlbGVjdCgxMjgsIHJmZHMsIE5VTEwsIE5VTEwsIHRpbW8gPCAwID8gLXRpbW8g OgorICAgICAgICAgICAgICAgICAgICAgICh0aW1vID4gMCA/IHRpbW8gKiAxMDAwTCkpID4gMCkg JiYKKyAgICAgICAgICAgICAgIEZEX0lTU0VUKHRjcHNyZmQsIHJmZHMpKTsKKyNlbHNlCisvKiBU cnkgdGhpcyAtIHdoYXQncyB0aGUgd29yc3QgdGhhdCBjYW4gaGFwcGVuLi4uICovCisKKyAgICAg ICAgICAgIEZEX1pFUk8oJnJmZHMpOworICAgICAgICAgICAgRkRfU0VUKHRjcHNyZmQsICZyZmRz KTsKKyAgICAgICAgICAgIHJlYWR5X3RvX2FjY2VwdCA9CisgICAgICAgICAgICAgICgoc2VsZWN0 KEZEX1NFVFNJWkUsCisgICAgICAgICAgICAgICAgICAgICAgIChmZF9zZXQgKikgJnJmZHMsIE5V TEwsIE5VTEwsICZ0dikgPiAwKSAmJgorICAgICAgICAgICAgICAgRkRfSVNTRVQodGNwc3JmZCwg JnJmZHMpKTsKKworI2VuZGlmIC8qIEJFTExTRUxFQ1QgKi8KKyNlbmRpZiAvKiBJQk1TRUxFQ1Qg Ki8KKyNlbmRpZiAvKiBCU0RTRUxFQ1QgKi8KKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAocmVh ZHlfdG9fYWNjZXB0IHx8IHRpbW8gPT0gMCkgeworICAgICAgICBpZiAoKHR0eWZkID0gYWNjZXB0 KHRjcHNyZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBzb2NrYWRkciAq KSZzYWRkciwmc2FkZHJsZW4pKSA8IDApIHsKKyAgICAgICAgICAgIGkgPSBlcnJubzsgICAgICAg ICAgICAgICAgICAvKiBzYXZlIGVycm9yIGNvZGUgKi8KKyNpZmRlZiBUQ1BJUExJQgorICAgICAg ICAgICAgc29ja2V0X2Nsb3NlKHRjcHNyZmQpOworI2Vsc2UgLyogVENQSVBMSUIgKi8KKyAgICAg ICAgICAgIGNsb3NlKHRjcHNyZmQpOworI2VuZGlmIC8qIFRDUElQTElCICovCisgICAgICAgICAg ICB0dHlmZCA9IC0xOworICAgICAgICAgICAgd2FzY2xvc2VkID0gMTsKKyAgICAgICAgICAgIHRj cHNyZmQgPSAtMTsKKyAgICAgICAgICAgIHRjcHNydl9wb3J0ID0gMDsKKyAgICAgICAgICAgIGVy cm5vID0gaTsgICAgICAgICAgICAgICAgICAvKiBhbmQgcmVwb3J0IHRoaXMgZXJyb3IgKi8KKyAg ICAgICAgICAgIGRlYnVnKEYxMDEsInRjcHNydl9vcGVuIGFjY2VwdCBlcnJubyIsIiIsZXJybm8p OworICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgfQorICAgICAgICBzZXRzb2Nrb3B0 KHR0eWZkLCBTT0xfU09DS0VULCBTT19PT0JJTkxJTkUsKGNoYXIgKikgJm9uLCBzaXplb2Ygb24p OworCisjaWZuZGVmIE5PVENQT1BUUworI2lmbmRlZiBkYXRhZ2VuZXJhbAorI2lmZGVmIFNPTF9T T0NLRVQKKyNpZmRlZiBUQ1BfTk9ERUxBWQorICAgICAgICBub19kZWxheSh0dHlmZCx0Y3Bfbm9k ZWxheSk7CisgICAgICAgIGRlYnVnKEYxMDEsInRjcHNydl9vcGVuIG5vX2RlbGF5IiwiIix0Y3Bf bm9kZWxheSk7CisjZW5kaWYgLyogVENQX05PREVMQVkgKi8KKyNpZmRlZiBTT19LRUVQQUxJVkUK KyAgICAgICAga2VlcGFsaXZlKHR0eWZkLHRjcF9rZWVwYWxpdmUpOworICAgICAgICBkZWJ1ZyhG MTAxLCJ0Y3BzcnZfb3BlbiBrZWVwYWxpdmUiLCIiLHRjcF9rZWVwYWxpdmUpOworI2VuZGlmIC8q IFNPX0tFRVBBTElWRSAqLworI2lmZGVmIFNPX0xJTkdFUgorICAgICAgICBja19saW5nZXIodHR5 ZmQsdGNwX2xpbmdlciwgdGNwX2xpbmdlcl90bW8pOworICAgICAgICBkZWJ1ZyhGMTAxLCJ0Y3Bz cnZfb3BlbiBsaW5nZXIiLCIiLHRjcF9saW5nZXJfdG1vKTsKKyNlbmRpZiAvKiBTT19MSU5HRVIg Ki8KKyNpZmRlZiBTT19TTkRCVUYKKyAgICAgICAgc2VuZGJ1Zih0dHlmZCx0Y3Bfc2VuZGJ1Zik7 CisjZW5kaWYgLyogU09fU05EQlVGICovCisjaWZkZWYgU09fUkNWQlVGCisgICAgICAgIHJlY3Zi dWYodHR5ZmQsdGNwX3JlY3ZidWYpOworI2VuZGlmIC8qIFNPX1JDVkJVRiAqLworI2VuZGlmIC8q IFNPTF9TT0NLRVQgKi8KKyNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLworI2VuZGlmIC8qIE5PVENQ T1BUUyAqLworCisgICAgICAgIHR0bmV0ID0gbmV0dDsgICAgICAgICAgICAgICAgICAgLyogVENQ L0lQIChzb2NrZXRzKSBuZXR3b3JrICovCisgICAgICAgIHRjcF9pbmNvbWluZyA9IDE7ICAgICAg ICAgICAgICAgLyogVGhpcyBpcyBhbiBpbmNvbWluZyBjb25uZWN0aW9uICovCisgICAgICAgIHNz dGVsbmV0ID0gMTsgICAgICAgICAgICAgICAgICAgLyogRG8gc2VydmVyLXNpZGUgVGVsbmV0IHBy b3RvY29sICovCisKKyAgICAgICAgLyogU2VlIGlmIHRoZSBzZXJ2aWNlIGlzIFRFTE5FVC4gKi8K KyAgICAgICAgeCA9ICh1bnNpZ25lZCBzaG9ydClzZXJ2aWNlLT5zX3BvcnQ7CisgICAgICAgIHNl cnZpY2UyID0gZ2V0c2VydmJ5bmFtZSgidGVsbmV0IiwgInRjcCIpOworICAgICAgICBpZiAoc2Vy dmljZTIgJiYgeCA9PSBzZXJ2aWNlMi0+c19wb3J0KSB7CisjaWZkZWYgQ09NTUVOVAorCSAgICAv KiBKZWZmIDIwMDUvMTIvMzAgKi8KKwkgICAgaWYgKHR0bnByb3RvICE9IE5QX1RDUFJBVyAmJiAv KiBZZXMuLi4gKi8KKwkJIHR0bnByb3RvICE9IE5QX1NTTF9SQVcgJiYKKwkJIHR0bnByb3RvICE9 IE5QX1RMU19SQVcpIC8qIGFuZCBpZiByYXcgcG9ydCBub3QgcmVxdWVzdGVkICovCisjZWxzZQor CSAgICAvKiBmZGMgMjAwNS8xMi8wNCAqLworICAgICAgICAgICAgaWYgKHR0bnByb3RvICE9IE5Q X1RDUFJBVykgIC8qIFllcyBhbmQgaWYgcmF3IHBvcnQgbm90IHJlcXVlc3RlZCAqLworI2VuZGlm CS8qICAqLworICAgICAgICAgICAgICB0dG5wcm90byA9IE5QX1RFTE5FVDsJLyogc2V0IHByb3Rv Y29sIHRvIFRFTE5FVC4gKi8KKyAgICAgICAgfQorICAgICAgICBja3N0cm5jcHkoaXBhZGRyLChj aGFyICopaW5ldF9udG9hKHNhZGRyLnNpbl9hZGRyKSwyMCk7CisgICAgICAgIGlmICh0Y3BfcmRu cykgeworICAgICAgICAgICAgaWYgKCFxdWlldCkgeworICAgICAgICAgICAgICAgIHByaW50Zigi IFJldmVyc2UgRE5TIExvb2t1cC4uLiAiKTsKKyAgICAgICAgICAgICAgICBmZmx1c2goc3Rkb3V0 KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChob3N0ID0gZ2V0aG9zdGJ5YWRkcigo Y2hhciAqKSZzYWRkci5zaW5fYWRkciw0LFBGX0lORVQpKSB7CisgICAgICAgICAgICAgICAgaG9z dCA9IGNrX2NvcHlob3N0ZW50KGhvc3QpOworICAgICAgICAgICAgICAgIGRlYnVnKEYxMDAsInRj cHNydl9vcGVuIGdldGhvc3RieWFkZHIgIT0gTlVMTCIsIiIsMCk7CisgICAgICAgICAgICAgICAg aWYgKCFxdWlldCkgeworICAgICAgICAgICAgICAgICAgICBwcmludGYoIihPSylcbiIpOworICAg ICAgICAgICAgICAgICAgICBmZmx1c2goc3Rkb3V0KTsKKyAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgICAgbmFtZVswXSA9ICcqJzsKKyAgICAgICAgICAgICAgICBja3N0cm5jcHkoJm5h bWVbMV0saG9zdC0+aF9uYW1lLDc4KTsKKyAgICAgICAgICAgICAgICBja3N0cm5jYXQobmFtZSwi OiIsODAtc3RybGVuKG5hbWUpKTsKKyAgICAgICAgICAgICAgICBja3N0cm5jYXQobmFtZSxwLDgw LXN0cmxlbihuYW1lKSk7CisgICAgICAgICAgICAgICAgaWYgKCFxdWlldAorI2lmbmRlZiBOT0lD UAorICAgICAgICAgICAgICAgICAgICAmJiAhZG9jb254CisjZW5kaWYgLyogTk9JQ1AgKi8KKyAg ICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgICAgcHJpbnRmKCIlcyBjb25uZWN0 ZWQgb24gcG9ydCAlc1xuIixob3N0LT5oX25hbWUscCk7CisgICAgICAgICAgICB9IGVsc2Ugewor ICAgICAgICAgICAgICAgIGlmICghcXVpZXQpIHByaW50ZigiRmFpbGVkLlxuIik7CisgICAgICAg ICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoIXF1aWV0KSBwcmludGYoIihPSylcbiIpOworCisg ICAgICAgIGlmICghdGNwX3JkbnMgfHwgIWhvc3QpIHsKKyAgICAgICAgICAgIGNrc3RybmNweShu YW1lLGlwYWRkciw4MCk7CisgICAgICAgICAgICBja3N0cm5jYXQobmFtZSwiOiIsODApOworICAg ICAgICAgICAgY2tzdHJuY2F0KG5hbWUsY2t1aXRvYShudG9ocyhzYWRkci5zaW5fcG9ydCkpLDgw KTsKKyAgICAgICAgICAgIGlmICghcXVpZXQKKyNpZm5kZWYgTk9JQ1AKKyAgICAgICAgICAgICAg ICAmJiAhZG9jb254CisjZW5kaWYgLyogTk9JQ1AgKi8KKyAgICAgICAgICAgICAgICApCisgICAg ICAgICAgICAgIHByaW50ZigiJXMgY29ubmVjdGVkIG9uIHBvcnQgJWRcbiIsaXBhZGRyLG50b2hz KHNhZGRyLnNpbl9wb3J0KSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFxdWlldCkgZmZsdXNo KHN0ZG91dCk7CisKKyNpZmRlZiBDS19TRUNVUklUWQorICAgICAgICAvKiBCZWZvcmUgSW5pdGlh bGl6YXRpb24gVGVsbmV0L1Jsb2dpbiBOZWdvdGlhdGlvbnMgSW5pdCBLZXJiZXJvcyAqLworICAg ICAgICBja19hdXRoX2luaXQoKHRjcF9yZG5zICYmIGhvc3QgJiYgaG9zdC0+aF9uYW1lICYmIGhv c3QtPmhfbmFtZVswXSkgPworICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKilob3N0LT5oX25h bWUgOiBpcGFkZHIsCisgICAgICAgICAgICAgICAgICAgICBpcGFkZHIsCisgICAgICAgICAgICAg ICAgICAgICB1aWRidWYsCisgICAgICAgICAgICAgICAgICAgICB0dHlmZAorICAgICAgICAgICAg ICAgICAgICAgKTsKKyNlbmRpZiAvKiBDS19TRUNVUklUWSAqLworCisjaWZkZWYgQ0tfU1NMCisg ICAgICAgIGlmIChja19zc2xlYXlfaXNfaW5zdGFsbGVkKCkgJiYgIXNzbF9mYWlsZWQpIHsKKyAg ICAgICAgICAgIGlmIChja19zc2xfaW5jb21pbmcodHR5ZmQpIDwgMCkgeworI2lmZGVmIFRDUElQ TElCCisgICAgICAgICAgICAgICAgICAgIHNvY2tldF9jbG9zZSh0dHlmZCk7CisgICAgICAgICAg ICAgICAgICAgIHNvY2tldF9jbG9zZSh0Y3BzcmZkKTsKKyNlbHNlIC8qIFRDUElQTElCICovCisg ICAgICAgICAgICAgICAgICAgIGNsb3NlKHR0eWZkKTsKKyAgICAgICAgICAgICAgICAgICAgY2xv c2UodGNwc3JmZCk7CisjZW5kaWYgLyogVENQSVBMSUIgKi8KKyAgICAgICAgICAgICAgICAgICAg dHR5ZmQgPSAtMTsKKyAgICAgICAgICAgICAgICAgICAgd2FzY2xvc2VkID0gMTsKKyAgICAgICAg ICAgICAgICAgICAgdGNwc3JmZCA9IC0xOworICAgICAgICAgICAgICAgICAgICB0Y3BzcnZfcG9y dCA9IDA7CisgICAgICAgICAgICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAgICAgICB9Cisg ICAgICAgIH0KKyNlbmRpZiAvKiBDS19TU0wgKi8KKworI2lmbmRlZiBkYXRhZ2VuZXJhbAorICAg ICAgICAvKiBGaW5kIG91dCBvdXIgb3duIElQIGFkZHJlc3MuICovCisgICAgICAgIGxfc2xlbiA9 IHNpemVvZihsX2FkZHIpOworICAgICAgICBiemVybygoY2hhciAqKSZsX2FkZHIsIGxfc2xlbik7 CisjaWZuZGVmIEVYQ0VMQU4KKyAgICAgICAgaWYgKCFnZXRzb2NrbmFtZSh0dHlmZCwgKHN0cnVj dCBzb2NrYWRkciAqKSZsX2FkZHIsICZsX3NsZW4pKSB7CisgICAgICAgICAgICBjaGFyICogcyA9 IChjaGFyICopaW5ldF9udG9hKGxfYWRkci5zaW5fYWRkcik7CisgICAgICAgICAgICBja3N0cm5j cHkobXlpcGFkZHIsIHMsMjApOworICAgICAgICAgICAgZGVidWcoRjExMCwiZ2V0c29ja25hbWUi LG15aXBhZGRyLDApOworICAgICAgICB9CisjZW5kaWYgLyogRVhDRUxBTiAqLworI2VuZGlmIC8q IGRhdGFnZW5lcmFsICovCisKKyAgICAgICAgaWYgKHRuX2luaSgpIDwgMCkgICAgICAgICAgICAg ICAvKiBTdGFydCBURUxORVQgbmVnb3RpYXRpb25zLiAqLworICAgICAgICAgIGlmICh0dGNoaygp IDwgMCkgeyAgICAgICAgICAgIC8qIERpc2Nvbm5lY3RlZD8gKi8KKyAgICAgICAgICAgICAgaSA9 IGVycm5vOyAgICAgICAgICAgICAgICAvKiBzYXZlIGVycm9yIGNvZGUgKi8KKyNpZmRlZiBUQ1BJ UExJQgorICAgICAgICAgICAgICBzb2NrZXRfY2xvc2UodGNwc3JmZCk7CisjZWxzZSAvKiBUQ1BJ UExJQiAqLworICAgICAgICAgICAgICBjbG9zZSh0Y3BzcmZkKTsKKyNlbmRpZiAvKiBUQ1BJUExJ QiAqLworICAgICAgICAgICAgICB0dHlmZCA9IC0xOworICAgICAgICAgICAgICB3YXNjbG9zZWQg PSAxOworICAgICAgICAgICAgICB0Y3BzcmZkID0gLTE7CisgICAgICAgICAgICAgIHRjcHNydl9w b3J0ID0gMDsKKyAgICAgICAgICAgICAgZXJybm8gPSBpOyAgICAgICAgICAgICAgICAvKiBhbmQg cmVwb3J0IHRoaXMgZXJyb3IgKi8KKyAgICAgICAgICAgICAgZGVidWcoRjEwMSwidGNwc3J2X29w ZW4gYWNjZXB0IGVycm5vIiwiIixlcnJubyk7CisgICAgICAgICAgICAgIHJldHVybigtMSk7Cisg ICAgICAgICAgfQorICAgICAgICBkZWJ1ZyhGMTAxLCJ0Y3BzcnZfb3BlbiBzZXJ2aWNlIiwiIix4 KTsKKyAgICAgICAgaWYgKCpsY2wgPCAwKSAgICAgICAgICAgICAgICAgICAvKiBTZXQgbG9jYWwg bW9kZS4gKi8KKyAgICAgICAgICAqbGNsID0gMTsKKworI2lmZGVmIENLX0tFUkJFUk9TCisjaWZk ZWYgS1JCNV9VMlUKKyAgICAgICAgaWYgKCB0dG5wcm90byA9PSBOUF9LNVUyVSApIHsKKyAgICAg ICAgICAgIGlmIChrNV91c2VyX3RvX3VzZXJfc2VydmVyX2F1dGgoKSAhPSAwKSB7CisgICAgICAg ICAgICAgICAgaSA9IGVycm5vOyAgICAgICAgICAgICAgICAvKiBzYXZlIGVycm9yIGNvZGUgKi8K KyNpZmRlZiBUQ1BJUExJQgorICAgICAgICAgICAgICAgIHNvY2tldF9jbG9zZSh0Y3BzcmZkKTsK KyNlbHNlIC8qIFRDUElQTElCICovCisgICAgICAgICAgICAgICAgY2xvc2UodGNwc3JmZCk7Cisj ZW5kaWYgLyogVENQSVBMSUIgKi8KKyAgICAgICAgICAgICAgICB0dHlmZCA9IC0xOworICAgICAg ICAgICAgICAgIHdhc2Nsb3NlZCA9IDE7CisgICAgICAgICAgICAgICAgdGNwc3JmZCA9IC0xOwor ICAgICAgICAgICAgICAgIHRjcHNydl9wb3J0ID0gMDsKKyAgICAgICAgICAgICAgICBlcnJubyA9 IGk7ICAgICAgICAgICAgICAgIC8qIGFuZCByZXBvcnQgdGhpcyBlcnJvciAqLworICAgICAgICAg ICAgICAgIGRlYnVnKEYxMDEsInRjcHNydl9vcGVuIGFjY2VwdCBlcnJubyIsIiIsZXJybm8pOwor ICAgICAgICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyNl bmRpZiAvKiBLUkI1X1UyVSAqLworI2VuZGlmIC8qIENLX0tFUkJFUk9TICovCisgICAgICAgIHJl dHVybigwKTsgICAgICAgICAgICAgICAgICAgICAgLyogRG9uZS4gKi8KKyAgICB9IGVsc2Ugewor ICAgICAgICBpID0gZXJybm87ICAgICAgICAgICAgICAgICAgICAgIC8qIHNhdmUgZXJyb3IgY29k ZSAqLworI2lmZGVmIFRDUElQTElCCisgICAgICAgIHNvY2tldF9jbG9zZSh0Y3BzcmZkKTsKKyNl bHNlIC8qIFRDUElQTElCICovCisgICAgICAgIGNsb3NlKHRjcHNyZmQpOworI2VuZGlmIC8qIFRD UElQTElCICovCisgICAgICAgIHR0eWZkID0gLTE7CisgICAgICAgIHdhc2Nsb3NlZCA9IDE7Cisg ICAgICAgIHRjcHNyZmQgPSAtMTsKKyAgICAgICAgdGNwc3J2X3BvcnQgPSAwOworICAgICAgICBl cnJubyA9IGk7ICAgICAgICAgICAgICAgICAgICAgIC8qIGFuZCByZXBvcnQgdGhpcyBlcnJvciAq LworICAgICAgICBkZWJ1ZyhGMTAxLCJ0Y3BzcnZfb3BlbiBhY2NlcHQgZXJybm8iLCIiLGVycm5v KTsKKyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9Cit9CisjZW5kaWYgLyogTk9MSVNURU4gKi8K KyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KKyNlbmRpZiAvKiBOT05F VCAqLworCisjaWZkZWYgVENQU09DS0VUCitjaGFyICoKK2NrbmFtZTJhZGRyKG5hbWUpIGNoYXIg KiBuYW1lOworeworI2lmZGVmIEhQVVg1CisgICAgcmV0dXJuKCIiKTsKKyNlbHNlCisgICAgc3Ry dWN0IGhvc3RlbnQgKmhvc3Q7CisKKyAgICBpZiAobmFtZSA9PSBOVUxMIHx8ICpuYW1lID09ICdc MCcpCisgICAgICAgIHJldHVybigiIik7CisKKyAgICBob3N0ID0gZ2V0aG9zdGJ5bmFtZShuYW1l KTsKKyAgICBpZiAoIGhvc3QgKSB7CisgICAgICAgIGhvc3QgPSBja19jb3B5aG9zdGVudChob3N0 KTsKKyAgICAgICAgcmV0dXJuKGluZXRfbnRvYSgqKChzdHJ1Y3QgaW5fYWRkciAqKSBob3N0LT5o X2FkZHIpKSk7CisgICAgfQorICAgIHJldHVybigiIik7CisjZW5kaWYgLyogSFBVWDUgKi8KK30K KworY2hhciAqCitja2FkZHIybmFtZShhZGRyKSBjaGFyICogYWRkcjsKK3sKKyNpZmRlZiBIUFVY NQorICAgIHJldHVybigiIik7CisjZWxzZQorICAgIHN0cnVjdCBob3N0ZW50ICpob3N0OworICAg IHN0cnVjdCBpbl9hZGRyIHNpbl9hZGRyOworCisgICAgaWYgKGFkZHIgPT0gTlVMTCB8fCAqYWRk ciA9PSAnXDAnKQorICAgICAgICByZXR1cm4oIiIpOworCisgICAgc2luX2FkZHIuc19hZGRyID0g aW5ldF9hZGRyKGFkZHIpOworICAgIGhvc3QgPSBnZXRob3N0YnlhZGRyKChjaGFyICopJnNpbl9h ZGRyLDQsQUZfSU5FVCk7CisgICAgaWYgKGhvc3QpIHsKKyAgICAgICAgaG9zdCA9IGNrX2NvcHlo b3N0ZW50KGhvc3QpOworICAgICAgICByZXR1cm4oKGNoYXIgKilob3N0LT5oX25hbWUpOworICAg IH0KKyAgICByZXR1cm4oIiIpOworI2VuZGlmIC8qIEhQVVg1ICovCit9CisjZW5kaWYgLyogVENQ U09DS0VUICovCisKK3Vuc2lnbmVkIGxvbmcgcGVlcnhpcGFkZHIgPSAwTDsKKworY2hhciAqCitj a2dldHBlZXIoKSB7CisjaWZkZWYgVENQU09DS0VUCisgICAgc3RhdGljIGNoYXIgbmFtZWJ1Zlsy NTZdOworICAgIHN0YXRpYyBzdHJ1Y3QgaG9zdGVudCAqaG9zdDsKKyAgICBzdGF0aWMgc3RydWN0 IHNvY2thZGRyX2luIHNhZGRyOworI2lmZGVmIEdQRUVSTkFNRV9UCisgICAgc3RhdGljIEdQRUVS TkFNRV9UIHNhZGRybGVuOworI2Vsc2UKKyNpZmRlZiBQVFgKKyAgICBzdGF0aWMgc2l6ZV90IHNh ZGRybGVuOworI2Vsc2UKKyNpZmRlZiBBSVg0MgorICAgIC8qIEl0J3Mgc2l6ZV90IGluIDQuMiBi dXQgaW50IGluIDQuMSBhbmQgZWFybGllci4gKi8KKyAgICAvKiBOb3RlOiB0aGUgNC4yIG1hbiBw YWdlIGxpZXM7IGJlbGlldmUgc29ja2V0LmguICovCisgICAgc3RhdGljIHNpemVfdCBzYWRkcmxl bjsKKyNlbHNlCisjaWZkZWYgVU5JWFdBUkUKKyAgICBzdGF0aWMgc2l6ZV90IHNhZGRybGVuOwor I2Vsc2UgIC8qIFVOSVhXQVJFICovCisjaWZkZWYgREVDX1RDUElQCisvKiAyMDEwLTAzLTA4IFNN Uy4KKyAqIENvaW5jaWRlbnRhbGx5LCB0aGUgY29uZGl0aW9uIGZvciBpbnRlZ2VyIGFyZ3VtZW50 cyBpbiBzZWxlY3QoKSwKKyAqIHdoaWNoIGlzIGFjdHVhbGx5ICJkZWZpbmVkKCBfREVDQ19WNF9T T1VSQ0UpIiwgd29ya3MgZm9yIGFuIGludGVnZXIKKyAqIGFyZ3VtZW50IGluIGdldHBlZXJuYW1l KCkuICBTYWRseSwgZHVlIHRvIGEgbGFjayBvZiBmb3Jlc2lnaHQsCisgKiAiZGVmaW5lZCggX0RF Q0NfVjRfU09VUkNFKSIgZG9lc24ndCB3b3JrIHdpdGggREVDIEMgVjQuMCwgc28gdGhlCisgKiB1 c2VyLXNwZWNpZmllZCBJTlRTRUxFQ1QgaXMgdXNlZCBpbnN0ZWFkLiAgTW9zdCBsaWtlbHksICJz aXplX3QiCisgKiBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkIG9mICJ1bnNpZ25lZCBpbnQiLCBidXQg SSdtIGEgY293YXJkLgorICovCisjaWZkZWYgSU5UU0VMRUNUCisgICAgc3RhdGljIGludCBzYWRk cmxlbjsKKyNlbHNlIC8qIGRlZiBJTlRTRUxFQ1QgKi8KKyAgICBzdGF0aWMgdW5zaWduZWQgaW50 IHNhZGRybGVuOworI2VuZGlmIC8qIGRlZiBJTlRTRUxFQ1QgW2Vsc2VdICovCisjZWxzZQorI2lm ZGVmIE1BQ09TWDEwCisgICAgc3RhdGljIHVuc2lnbmVkIGludCBzYWRkcmxlbjsKKyNlbHNlCisj aWZkZWYgQ0tfNjRCSVQKKyAgICBzdGF0aWMgc29ja2xlbl90IHNhZGRybGVuOworI2Vsc2UKKyAg ICBzdGF0aWMgaW50IHNhZGRybGVuOworI2VuZGlmCS8qIENLXzY0QklUICovCisjZW5kaWYgLyog TUFDT1NYMTAgKi8KKyNlbmRpZiAvKiBERUNfVENQSVAgKi8KKyNlbmRpZiAvKiBVTklYV0FSRSAq LworI2VuZGlmIC8qIEFJWDQyICovCisjZW5kaWYgLyogUFRYICovCisjZW5kaWYJLyogR1BFRVJO QU1FX1QgKi8KKyAgICBzYWRkcmxlbiA9IHNpemVvZihzYWRkcik7CisgICAgaWYgKGdldHBlZXJu YW1lKHR0eWZkLChzdHJ1Y3Qgc29ja2FkZHIgKikmc2FkZHIsJnNhZGRybGVuKSA8IDApIHsKKyAg ICAgICAgZGVidWcoRjExMSwiY2tnZXRwZWVyIGZhaWx1cmUiLGNraXRvYSh0dHlmZCksZXJybm8p OworICAgICAgICByZXR1cm4oTlVMTCk7CisgICAgfQorICAgIGhvc3QgPSBnZXRob3N0YnlhZGRy KChjaGFyICopJnNhZGRyLnNpbl9hZGRyLDQsQUZfSU5FVCk7CisgICAgaWYgKGhvc3QpIHsKKyAg ICAgICAgaG9zdCA9IGNrX2NvcHlob3N0ZW50KGhvc3QpOworICAgICAgICBja3N0cm5jcHkobmFt ZWJ1ZiwoY2hhciAqKWhvc3QtPmhfbmFtZSw4MCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgY2tz dHJuY3B5KG5hbWVidWYsKGNoYXIgKilpbmV0X250b2Eoc2FkZHIuc2luX2FkZHIpLDgwKTsKKyAg ICB9CisgICAgcGVlcnhpcGFkZHIgPSBudG9obChzYWRkci5zaW5fYWRkci5zX2FkZHIpOworICAg IGRlYnVnKEYxMTEsImNrZ2V0cGVlciIsbmFtZWJ1ZixwZWVyeGlwYWRkcik7CisgICAgcmV0dXJu KG5hbWVidWYpOworI2Vsc2UKKyAgICByZXR1cm4oTlVMTCk7CisjZW5kaWYgLyogVENQU09DS0VU ICovCit9CisKKy8qIEdldCBmdWxseSBxdWFsaWZpZWQgSVAgaG9zdG5hbWUgKi8KKworI2lmbmRl ZiBOT05FVAorY2hhciAqCisjaWZkZWYgQ0tfQU5TSUMKK2NrZ2V0ZnFob3N0bmFtZShjaGFyICog bmFtZSkKKyNlbHNlCitja2dldGZxaG9zdG5hbWUobmFtZSkgY2hhciAqIG5hbWU7CisjZW5kaWYg LyogQ0tfQU5TSUMgKi8KK3sKKyNpZmRlZiBOT0NLR0VURlFIT1NUCisKKyAgICByZXR1cm4obmFt ZSk7CisKKyNlbHNlIC8qIElmIHRoZSBmb2xsb3dpbmcgY29kZSBkdW1wcyBjb3JlLCBkZWZpbmUg Tk9DS0dFVEZRSE9TVCBhbmQgcmVidWlsZC4gKi8KKworICAgIHN0YXRpYyBjaGFyIG5hbWVidWZb MjU2XTsKKyAgICBzdHJ1Y3QgaG9zdGVudCAqaG9zdD1OVUxMOworICAgIHN0cnVjdCBzb2NrYWRk cl9pbiByX2FkZHI7CisgICAgaW50IGk7CisKKyAgICBkZWJ1ZyhGMTEwLCJja2dldGZxaG4oKSIs bmFtZSwwKTsKKworICAgIGNrc3RybmNweShuYW1lYnVmLG5hbWUsMjU2KTsKKyAgICBuYW1lYnVm WzI1NV0gPSAnXDAnOworICAgIGkgPSBja2luZGV4KCI6IixuYW1lYnVmLDAsMCwwKTsKKyAgICBp ZiAoaSkKKyAgICAgIG5hbWVidWZbaS0xXSA9ICdcMCc7CisKKyAgICBiemVybygoY2hhciAqKSZy X2FkZHIsIHNpemVvZihyX2FkZHIpKTsKKworICAgIGhvc3QgPSBnZXRob3N0YnluYW1lKG5hbWVi dWYpOworICAgIGlmIChob3N0KSB7CisgICAgICAgIGhvc3QgPSBja19jb3B5aG9zdGVudChob3N0 KTsKKyAgICAgICAgZGVidWcoRjEwMCwiY2tnZXRmcWhuKCkgZ2V0aG9zdGJ5bmFtZSAhPSBOVUxM IiwiIiwwKTsKKyAgICAgICAgcl9hZGRyLnNpbl9mYW1pbHkgPSBob3N0LT5oX2FkZHJ0eXBlOwor I2lmZGVmIEhBRERSTElTVAorI2lmZGVmIGhfYWRkcgorICAgICAgICAvKiBUaGlzIGlzIGZvciB0 cnlpbmcgbXVsdGlwbGUgSVAgYWRkcmVzc2VzIC0gc2VlIDxuZXRkYi5oPiAqLworICAgICAgICBp ZiAoIShob3N0LT5oX2FkZHJfbGlzdCkpCisgICAgICAgICAgZ290byBleGl0X2Z1bmM7CisgICAg ICAgIGJjb3B5KGhvc3QtPmhfYWRkcl9saXN0WzBdLAorICAgICAgICAgICAgICAoY2FkZHJfdCkm cl9hZGRyLnNpbl9hZGRyLAorICAgICAgICAgICAgICBob3N0LT5oX2xlbmd0aAorICAgICAgICAg ICAgICApOworI2Vsc2UKKyAgICAgICAgYmNvcHkoaG9zdC0+aF9hZGRyLCAoY2FkZHJfdCkmcl9h ZGRyLnNpbl9hZGRyLCBob3N0LT5oX2xlbmd0aCk7CisjZW5kaWYgLyogaF9hZGRyICovCisjZWxz ZSAgLyogSEFERFJMSVNUICovCisgICAgICAgIGJjb3B5KGhvc3QtPmhfYWRkciwgKGNhZGRyX3Qp JnJfYWRkci5zaW5fYWRkciwgaG9zdC0+aF9sZW5ndGgpOworI2VuZGlmIC8qIEhBRERSTElTVCAq LworI2lmZGVmIENPTU1FTlQKKyNpZm5kZWYgRVhDRUxBTgorICAgICAgICBkZWJ1ZyhGMTExLCJC Q09QWSIsImhvc3QtPmhfYWRkciIsaG9zdC0+aF9hZGRyKTsKKyNlbmRpZiAvKiBFWENFTEFOICov CisgICAgICAgIGRlYnVnKEYxMTEsIkJDT1BZIiwiIChjYWRkcl90KSZyX2FkZHIuc2luX2FkZHIi LAorICAgICAgICAgICAgICAoY2FkZHJfdCkmcl9hZGRyLnNpbl9hZGRyKTsKKyNlbmRpZgkvKiBD T01NRU5UICovCisgICAgICAgIGRlYnVnKEYxMTEsIkJDT1BZIiwiaG9zdC0+aF9sZW5ndGgiLGhv c3QtPmhfbGVuZ3RoKTsKKworI2lmZGVmIE5UCisgICAgICAgIC8qIFdpbmRvd3MgOTUvOTggcmVx dWlyZXMgYSAxIHNlY29uZCB3YWl0IGJldHdlZW4gY2FsbHMgdG8gTWljcm9zb2Z0ICovCisgICAg ICAgIC8qIHByb3ZpZGVkIEROUyBmdW5jdGlvbnMuICBPdGhlcndpc2UsIHRoZSBUVEwgb2YgdGhl IEROUyByZXNwb25zZSAqLworICAgICAgICAvKiBpcyBpZ25vcmVkLiAqLworICAgICAgICBpZiAo aXNXaW45NSgpKQorICAgICAgICAgIHNsZWVwKDEpOworI2VuZGlmIC8qIE5UICovCisgICAgICAg IGhvc3QgPSBnZXRob3N0YnlhZGRyKChjaGFyICopJnJfYWRkci5zaW5fYWRkciw0LFBGX0lORVQp OworICAgICAgICBpZiAoaG9zdCkgeworICAgICAgICAgICAgaG9zdCA9IGNrX2NvcHlob3N0ZW50 KGhvc3QpOworICAgICAgICAgICAgZGVidWcoRjEwMCwiY2tnZXRmcWhuKCkgZ2V0aG9zdGJ5YWRk ciAhPSBOVUxMIiwiIiwwKTsKKyAgICAgICAgICAgIGNrc3RybmNweShuYW1lYnVmLCBob3N0LT5o X25hbWUsIDI1Nik7CisgICAgICAgIH0KKyAgICB9CisKKyNpZmRlZiBIQUREUkxJU1QKKyNpZmRl ZiBoX2FkZHIKKyAgZXhpdF9mdW5jOgorI2VuZGlmIC8qIGhfYWRkciAqLworI2VuZGlmIC8qIEhB RERSTElTVCAqLworCisgICAgaWYgKGkgPiAwKQorICAgICAgY2tzdHJuY2F0KG5hbWVidWYsJm5h bWVbaS0xXSwyNTYtc3RybGVuKG5hbWVidWYpLXN0cmxlbigmbmFtZVtpLTFdKSk7CisgICAgZGVi dWcoRjExMCwiY2tnZXRmcWhuKCkiLG5hbWVidWYsMCk7CisgICAgcmV0dXJuKG5hbWVidWYpOwor I2VuZGlmIC8qIE5PQ0tHRVRGUUhPU1QgKi8KK30KKworVk9JRAorI2lmZGVmIENLX0FOU0lDCitz ZXRucHJvdG8oY2hhciAqIHApCisjZWxzZQorc2V0bnByb3RvKHApIGNoYXIgKiBwOworI2VuZGlm IC8qIENLX0FOU0lDICovCit7CisgICAgaWYgKCFpc2RpZ2l0KCpwKSkgeworICAgICAgICBpZiAo IXN0cmNtcCgia2VybWl0IixwKSkKKyAgICAgICAgICB0dG5wcm90byA9IE5QX0tFUk1JVDsKKyAg ICAgICAgZWxzZSBpZiAoIXN0cmNtcCgidGVsbmV0IixwKSkKKyAgICAgICAgICB0dG5wcm90byA9 IE5QX1RFTE5FVDsKKyAgICAgICAgZWxzZSBpZiAoIXN0cmNtcCgiaHR0cCIscCkpCisgICAgICAg ICAgdHRucHJvdG8gPSBOUF9UQ1BSQVc7CisjaWZkZWYgUkxPR0NPREUKKyAgICAgICAgZWxzZSBp ZiAoIXN0cmNtcCgibG9naW4iLHApKQorICAgICAgICAgIHR0bnByb3RvID0gTlBfUkxPR0lOOwor I2VuZGlmIC8qIFJMT0dDT0RFICovCisjaWZkZWYgQ0tfU1NMCisgICAgICAgIC8qIENvbW1vbmx5 IHVzZWQgU1NMIHBvcnRzIChtaWdodCBub3QgYmUgaW4gc2VydmljZXMgZmlsZSkgKi8KKyAgICAg ICAgZWxzZSBpZiAoIXN0cmNtcCgiaHR0cHMiLHApKSB7CisgICAgICAgICAgdHRucHJvdG8gPSBO UF9TU0xfUkFXOworICAgICAgICAgIHNzbF9vbmx5X2ZsYWcgPSAxOworICAgICAgICB9IGVsc2Ug aWYgKCFzdHJjbXAoInNzbC10ZWxuZXQiLHApKSB7CisgICAgICAgICAgdHRucHJvdG8gPSBOUF9U RUxORVQ7CisgICAgICAgICAgc3NsX29ubHlfZmxhZyA9IDE7CisgICAgICAgIH0gZWxzZSBpZiAo IXN0cmNtcCgidGVsbmV0cyIscCkpIHsKKyAgICAgICAgICB0dG5wcm90byA9IE5QX1RFTE5FVDsK KyAgICAgICAgICBzc2xfb25seV9mbGFnID0gMTsKKyAgICAgICAgfQorI2VuZGlmIC8qIENLX1NT TCAqLworI2lmZGVmIENLX0tFUkJFUk9TCisjaWZkZWYgUkxPR0NPREUKKyAgICAgICAgZWxzZSBp ZiAoIXN0cmNtcCgia2xvZ2luIixwKSkgeworICAgICAgICAgICAgaWYgKGNrX2tyYjVfaXNfaW5z dGFsbGVkKCkpCisgICAgICAgICAgICAgIHR0bnByb3RvID0gTlBfSzVMT0dJTjsKKyAgICAgICAg ICAgIGVsc2UgaWYgKGNrX2tyYjRfaXNfaW5zdGFsbGVkKCkpCisgICAgICAgICAgICAgIHR0bnBy b3RvID0gTlBfSzRMT0dJTjsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgdHRucHJv dG8gPSBOUF9STE9HSU47CisgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcCgiZWtsb2dpbiIscCkp IHsKKyAgICAgICAgICAgIGlmIChja19rcmI1X2lzX2luc3RhbGxlZCgpKQorICAgICAgICAgICAg ICB0dG5wcm90byA9IE5QX0VLNUxPR0lOOworICAgICAgICAgICAgZWxzZSBpZiAoY2tfa3JiNF9p c19pbnN0YWxsZWQoKSkKKyAgICAgICAgICAgICAgdHRucHJvdG8gPSBOUF9FSzRMT0dJTjsKKyAg ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgdHRucHJvdG8gPSBOUF9STE9HSU47CisgICAg ICAgIH0KKyNlbmRpZiAvKiBSTE9HQ09ERSAqLworI2VuZGlmIC8qIENLX0tFUkJFUk9TICovCisg ICAgICAgIGVsc2UKKyAgICAgICAgICB0dG5wcm90byA9IE5QX05PTkU7CisgICAgfSBlbHNlIHsK KyAgICAgICAgc3dpdGNoIChhdG9pKHApKSB7CisgICAgICAgICAgY2FzZSAyMzogICAgICAgICAg ICAgICAgICAgICAgLyogVGVsbmV0ICovCisgICAgICAgICAgICB0dG5wcm90byA9IE5QX1RFTE5F VDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgNTEzOgorICAgICAgICAgICAg dHRucHJvdG8gPSBOUF9STE9HSU47CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNl IDE2NDk6CisgICAgICAgICAgICB0dG5wcm90byA9IE5QX0tFUk1JVDsKKyAgICAgICAgICAgIGJy ZWFrOworI2lmZGVmIENLX1NTTAorICAgICAgICAgIGNhc2UgNDQzOgorI2lmZGVmIENPTU1FTlQK KwkgICAgLyogSmVmZiAyMDA1LzEyLzMwICovCisgICAgICAgICAgICB0dG5wcm90byA9IE5QX1NT TF9SQVc7CisjZWxzZQorCSAgICAvKiBmZGMgMjAwNS8xMi8wNCAqLworICAgICAgICAgICAgdHRu cHJvdG8gPSBOUF9TU0w7CisjZW5kaWYJLyogQ09NTUVOVCAqLworICAgICAgICAgICAgc3NsX29u bHlfZmxhZyA9IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIDE1MToKKyAg ICAgICAgICBjYXNlIDk5MjoKKyAgICAgICAgICAgIHR0bnByb3RvID0gTlBfVEVMTkVUOworICAg ICAgICAgICAgc3NsX29ubHlfZmxhZyA9IDE7CisgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAv KiBDS19TU0wgKi8KKyNpZmRlZiBDS19LRVJCRVJPUworICAgICAgICAgIGNhc2UgNTQzOgorICAg ICAgICAgICAgaWYgKGNrX2tyYjVfaXNfaW5zdGFsbGVkKCkpCisgICAgICAgICAgICAgIHR0bnBy b3RvID0gTlBfSzVMT0dJTjsKKyAgICAgICAgICAgIGVsc2UgaWYgKGNrX2tyYjRfaXNfaW5zdGFs bGVkKCkpCisgICAgICAgICAgICAgIHR0bnByb3RvID0gTlBfSzRMT0dJTjsKKyAgICAgICAgICAg IGVsc2UKKyAgICAgICAgICAgICAgdHRucHJvdG8gPSBOUF9STE9HSU47CisgICAgICAgICAgICBi cmVhazsKKyAgICAgICAgICBjYXNlIDIxMDU6CisgICAgICAgICAgICBpZiAoY2tfa3JiNV9pc19p bnN0YWxsZWQoKSkKKyAgICAgICAgICAgICAgdHRucHJvdG8gPSBOUF9FSzVMT0dJTjsKKyAgICAg ICAgICAgIGVsc2UgaWYgKGNrX2tyYjRfaXNfaW5zdGFsbGVkKCkpCisgICAgICAgICAgICAgIHR0 bnByb3RvID0gTlBfRUs0TE9HSU47CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIHR0 bnByb3RvID0gTlBfUkxPR0lOOworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogQ0tfS0VS QkVST1MgKi8KKyAgICAgICAgICBjYXNlIDgwOiAgICAgICAgICAgICAgICAgICAgICAvKiBIVFRQ ICovCisgICAgICAgICAgICB0dG5wcm90byA9IE5QX1RDUFJBVzsKKyAgICAgICAgICAgIGJyZWFr OworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICB0dG5wcm90byA9IE5QX05PTkU7Cisg ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KK30KKworLyogY2tnZXRzZXJ2aWNl KCkgaXMgdXNlZCB0byBkZXRlcm1pbmUgdGhlIHBvcnQgbnVtYmVyIGZvciBhIGdpdmVuICovCisv KiBzZXJ2aWNlIHRha2luZyBpbnRvIGFjY291bnQgdGhlIHVzZSBvZiBETlMgU1JWIHJlY29yZHMu ICAgICAgICAgKi8KKworc3RhdGljIHN0cnVjdCBzZXJ2ZW50IHNlcnZyZWM7CitzdGF0aWMgc3Ry dWN0IHNlcnZlbnQgKgorY2tnZXRzZXJ2aWNlKGhvc3RuYW1lLCBzZXJ2aWNlbmFtZSwgaXAsIGlw bGVuKQorICAgIGNoYXIgKmhvc3RuYW1lOyBjaGFyICogc2VydmljZW5hbWU7IGNoYXIgKiBpcDsg aW50IGlwbGVuOworeworICAgIHN0cnVjdCBzZXJ2ZW50ICogc2VydmljZSA9IE5VTEw7CisjaWZk ZWYgQ0tfRE5TX1NSVgorICAgIHN0cnVjdCBzb2NrYWRkciAqIGRuc19hZGRycyA9IE5VTEw7Cisg ICAgaW50IGRuc19uYWRkcnMgPSAwOworI2VuZGlmIC8qIENLX0ROU19TUlYgKi8KKworICAgIGlm IChpc2RpZ2l0KCpzZXJ2aWNlbmFtZSkpIHsgICAgICAgIC8qIFVzZSBzb2NrZXQgbnVtYmVyIHdp dGhvdXQgbG9va3VwICovCisgICAgICAgIHNlcnZpY2UgPSAmc2VydnJlYzsKKyAgICAgICAgc2Vy dmljZS0+c19wb3J0ID0gaHRvbnMoKHVuc2lnbmVkIHNob3J0KWF0b2koc2VydmljZW5hbWUpKTsK KyAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBPdGhlcndpc2UgbG9v a3VwIHRoZSBzZXJ2aWNlIG5hbWUgKi8KKyNpZmRlZiBDS19ETlNfU1JWCisgICAgICAgIGlmICh0 Y3BfZG5zX3NydiAmJiAhcXVpZXQpIHsKKyAgICAgICAgICAgIHByaW50ZigiIEROUyBTUlYgTG9v a3VwLi4uICIpOworICAgICAgICAgICAgZmZsdXNoKHN0ZG91dCk7CisgICAgICAgIH0KKyAgICAg ICAgaWYgKHRjcF9kbnNfc3J2ICYmCisgICAgICAgICAgICBsb2NhdGVfc3J2X2Rucyhob3N0bmFt ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2VuYW1lLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgInRjcCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmZG5zX2Fk ZHJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRuc19uYWRkcnMKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICkgeworICAgICAgICAgICAgLyogVXNlIHRo ZSBmaXJzdCBvbmUuICBFdmVudHVhbGx5IHdlIHNob3VsZCBjeWNsZSB0aHJvdWdoIGFsbCAqLwor ICAgICAgICAgICAgLyogdGhlIHJldHVybmVkIElQIGFkZHJlc3NlcyBhbmQgcG9ydCBudW1iZXJz LiAqLworICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyX2luICpzaW4gPSBOVUxMOworI2lmZGVm IEJFVEFERUJVRworICAgICAgICAgICAgaW50IGk7CisgICAgICAgICAgICBwcmludGYoIlxyXG4i KTsKKyAgICAgICAgICAgIGZvciAoIGk9MDtpPGRuc19uYWRkcnM7aSsrICkgeworICAgICAgICAg ICAgICAgIHNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgJmRuc19hZGRyc1tpXTsKKyAgICAg ICAgICAgICAgICBwcmludGYoImRuc19hZGRyc1slZF0gPSAlcyAlZFxyXG4iLCBpLAorICAgICAg ICAgICAgICAgICAgICAgICAgKGNoYXIgKilpbmV0X250b2Eoc2luLT5zaW5fYWRkciksCisgICAg ICAgICAgICAgICAgICAgICAgICBudG9ocyhzaW4tPnNpbl9wb3J0KSk7CisgICAgICAgICAgICB9 CisjZW5kaWYgLyogQkVUQURFQlVHICovCisgICAgICAgICAgICBzaW4gPSAoc3RydWN0IHNvY2th ZGRyX2luICopICZkbnNfYWRkcnNbMF07CisgICAgICAgICAgICBpZiAoIGlwICYmIGlwbGVuID4g MCApCisgICAgICAgICAgICAgICAgY2tzdHJuY3B5KGlwLChjaGFyICopaW5ldF9udG9hKHNpbi0+ c2luX2FkZHIpLGlwbGVuKTsKKyAgICAgICAgICAgIHNlcnZpY2UgPSAmc2VydnJlYzsKKyAgICAg ICAgICAgIHNlcnZpY2UtPnNfcG9ydCA9IHNpbi0+c2luX3BvcnQ7CisKKyAgICAgICAgICAgIGZy ZWUoZG5zX2FkZHJzKTsKKyAgICAgICAgICAgIGRuc19hZGRycyA9IE5VTEw7CisgICAgICAgICAg ICBkbnNfbmFkZHJzID0gMDsKKyAgICAgICAgfSBlbHNlCisjZW5kaWYgLyogQ0tfRE5TX1NSViAq LworICAgICAgICAgICAgc2VydmljZSA9IGdldHNlcnZieW5hbWUoc2VydmljZW5hbWUsICJ0Y3Ai KTsKKyAgICB9CisgICAgaWYgKCFzZXJ2aWNlKSB7CisgICAgICAgIGlmICghY2tzdHJjbXAoImtl cm1pdCIsc2VydmljZW5hbWUsLTEsMCkpIHsgLyogS2VybWl0IHNlcnZpY2UgcG9ydCAqLworICAg ICAgICAgICAgc2VydmljZSA9ICZzZXJ2cmVjOworICAgICAgICAgICAgc2VydmljZS0+c19wb3J0 ID0gaHRvbnMoMTY0OSk7CisgICAgICAgIH0gZWxzZSBpZiAoIWNrc3RyY21wKCJ0ZWxuZXQiLHNl cnZpY2VuYW1lLC0xLDApKSB7IC8qIFRlbG5ldCBwb3J0ICovCisgICAgICAgICAgICBzZXJ2aWNl ID0gJnNlcnZyZWM7CisgICAgICAgICAgICBzZXJ2aWNlLT5zX3BvcnQgPSBodG9ucygyMyk7Cisg ICAgICAgIH0gZWxzZSBpZiAoIWNrc3RyY21wKCJodHRwIixzZXJ2aWNlbmFtZSwtMSwwKSkgewor ICAgICAgICAgICAgc2VydmljZSA9ICZzZXJ2cmVjOworICAgICAgICAgICAgc2VydmljZS0+c19w b3J0ID0gaHRvbnMoODApOworICAgICAgICB9CisjaWZkZWYgUkxPR0NPREUKKyAgICAgICAgZWxz ZSBpZiAoIWNrc3RyY21wKCJsb2dpbiIsc2VydmljZW5hbWUsLTEsMCkpIHsKKyAgICAgICAgICAg IHNlcnZpY2UgPSAmc2VydnJlYzsKKyAgICAgICAgICAgIHNlcnZpY2UtPnNfcG9ydCA9IGh0b25z KDUxMyk7CisgICAgICAgIH0KKyNlbmRpZiAvKiBSTE9HQ09ERSAqLworI2lmZGVmIENLX1NTTAor ICAgICAgICAvKiBDb21tb25seSB1c2VkIFNTTCBwb3J0cyAobWlnaHQgbm90IGJlIGluIHNlcnZp Y2VzIGZpbGUpICovCisgICAgICAgIGVsc2UgaWYgKCFja3N0cmNtcCgiaHR0cHMiLHNlcnZpY2Vu YW1lLC0xLDApKSB7CisgICAgICAgICAgICBzZXJ2aWNlID0gJnNlcnZyZWM7CisgICAgICAgICAg ICBzZXJ2aWNlLT5zX3BvcnQgPSBodG9ucyg0NDMpOworICAgICAgICB9IGVsc2UgaWYgKCFja3N0 cmNtcCgic3NsLXRlbG5ldCIsc2VydmljZW5hbWUsLTEsMCkpIHsKKyAgICAgICAgICAgIHNlcnZp Y2UgPSAmc2VydnJlYzsKKyAgICAgICAgICAgIHNlcnZpY2UtPnNfcG9ydCA9IGh0b25zKDE1MSk7 CisgICAgICAgIH0gZWxzZSBpZiAoIWNrc3RyY21wKCJ0ZWxuZXRzIixzZXJ2aWNlbmFtZSwtMSww KSkgeworICAgICAgICAgICAgc2VydmljZSA9ICZzZXJ2cmVjOworICAgICAgICAgICAgc2Vydmlj ZS0+c19wb3J0ID0gaHRvbnMoOTkyKTsKKyAgICAgICAgfQorI2VuZGlmIC8qIENLX1NTTCAqLwor I2lmZGVmIENLX0tFUkJFUk9TCisjaWZkZWYgUkxPR0NPREUKKyAgICAgICAgZWxzZSBpZiAoIWNr c3RyY21wKCJrbG9naW4iLHNlcnZpY2VuYW1lLC0xLDApKSB7CisgICAgICAgICAgICBzZXJ2aWNl ID0gJnNlcnZyZWM7CisgICAgICAgICAgICBzZXJ2aWNlLT5zX3BvcnQgPSBodG9ucyg1NDMpOwor ICAgICAgICB9IGVsc2UgaWYgKCFja3N0cmNtcCgiZWtsb2dpbiIsc2VydmljZW5hbWUsLTEsMCkp IHsKKyAgICAgICAgICAgIHNlcnZpY2UgPSAmc2VydnJlYzsKKyAgICAgICAgICAgIHNlcnZpY2Ut PnNfcG9ydCA9IGh0b25zKDIxMDUpOworICAgICAgICB9CisjZW5kaWYgLyogUkxPR0NPREUgKi8K KyNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLworICAgIH0KKyAgICByZXR1cm4oc2VydmljZSk7Cit9 CisKKy8qICBOIEUgVCBPIFAgRSBOICAtLSAgT3BlbiBhIG5ldHdvcmsgY29ubmVjdGlvbiAgKi8K Ky8qCisgIENhbGxpbmcgY29udmVudGlvbnMgc2FtZSBhcyB0dG9wZW4oKSwgZXhjZXB0IHRoaXJk IGFyZ3VtZW50IGlzIG5ldHdvcmsKKyAgdHlwZSByYXRoZXIgdGhhbiBtb2RlbSB0eXBlLiAgRGVz aWduZWQgdG8gYmUgY2FsbGVkIGZyb20gd2l0aGluIHR0b3Blbi4KKyovCisKKyNkZWZpbmUgWFhO QU1FTEVOIDI1Ngorc3RhdGljIGNoYXIgeHhuYW1lW1hYTkFNRUxFTl07CisKK2ludAorbmV0b3Bl bihuYW1lLCBsY2wsIG5ldHQpIGNoYXIgKm5hbWU7IGludCAqbGNsLCBuZXR0OyB7CisgICAgY2hh ciAqcDsKKyAgICBpbnQgaSwgeCwgcmNfaW5ldF9hZGRyID0gMCwgZG5zID0gMDsKKyNpZmRlZiBU Q1BTT0NLRVQKKyAgICBpbnQgaXNjb25uZWN0ID0gMDsKKyNpZmRlZiBTT19PT0JJTkxJTkUKKyAg ICBpbnQgb24gPSAxOworI2VuZGlmIC8qIFNPX09PQklOTElORSAqLworICAgIHN0cnVjdCBzZXJ2 ZW50ICpzZXJ2aWNlPU5VTEw7CisgICAgc3RydWN0IGhvc3RlbnQgKmhvc3Q9TlVMTDsKKyAgICBz dHJ1Y3Qgc29ja2FkZHJfaW4gcl9hZGRyOworICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBzaW47Cisg ICAgc3RydWN0IHNvY2thZGRyX2luIGxfYWRkcjsKKyAgICBHU09DS05BTUVfVCBsX3NsZW47Cisj aWZkZWYgRVhDRUxBTgorICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBzZW5kX3NvY2tldDsKKyNlbmRp ZiAvKiBFWENFTEFOICovCisKKyNpZmRlZiBJTkFERFJYCisvKiBpbmV0X2FkZHIoKSBpcyBvZiB0 eXBlIHN0cnVjdCBpbl9hZGRyICovCisjaWZkZWYgZGF0YWdlbmVyYWwKKyAgICBleHRlcm4gc3Ry dWN0IGluX2FkZHIgaW5ldF9hZGRyKCk7CisjZWxzZQorI2lmZGVmIEhQVVg1V0lOVENQCisgICAg ZXh0ZXJuIHN0cnVjdCBpbl9hZGRyIGluZXRfYWRkcigpOworI2VuZGlmIC8qIEhQVVg1V0lOVENQ ICovCisjZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KKyAgICBzdHJ1Y3QgaW5fYWRkciBpYXg7Cisj ZWxzZQorI2lmZGVmIElOQUREUl9OT05FCisgICAgc3RydWN0IGluX2FkZHIgaWF4OworI2Vsc2Ug LyogSU5BRERSX05PTkUgKi8KKyAgICBsb25nIGlheDsKKyNlbmRpZiAvKiBJTkFERFJfTk9ORSAq LworI2VuZGlmIC8qIElOQUREUlggKi8KKyNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KKworI2lmZGVm IENPTU1FTlQKKy8qIFRoaXMgY2F1c2VzIGJpZyB0cm91YmxlICovCisjaWZuZGVmIElOQUREUl9O T05FCisjZGVmaW5lIElOQUREUl9OT05FIDB4ZmZmZmZmZmYKKyNlbmRpZiAvKiBJTkFERFJfTk9O RSAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKworI2lmZGVmIFNVTlgyNSAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIENvZGUgZm9yIFN1bkxpbmsgWC4yNSBzdXBwb3J0ICovCisjZGVmaW5l IFgyOVBJRCAxICAgICAgICAgICAgICAgICAgICAgICAgLyogWC4yOSBQcm90b2NvbCBJRCAqLwor X1BST1RPVFlQKFNJR1RZUCB4MjVvb2JoLCAoaW50KSApOworICAgIENPTk5fREIgeDI1aG9zdDsK KyNpZm5kZWYgWDI1X1dSX0ZBQ0lMSVRZCisgICAgRkFDSUxJVFkgeDI1ZmFjaWw7CisjZWxzZQor ICAgIEZBQ0lMSVRZX0RCIHgyNWZhY2lsOworI2VuZGlmIC8qIFgyNV9XUl9GQUNJTElUWSAqLwor ICAgIHN0YXRpYyBpbnQgbmVlZGggPSAxOworICAgIFBJRF9UIHBpZDsKKyAgICBleHRlcm4gaW50 IGxpbmtpZCwgbGNuLCB4MjV2ZXI7CisjZW5kaWYgLyogU1VOWDI1ICovCisjaWZkZWYgQU5ZWDI1 CisgICAgZXh0ZXJuIGludCByZXZjYWxsLCBjbG9zZ3IsIGN1ZGF0YTsKKyAgICBleHRlcm4gY2hh ciB1ZGF0YVtdOworI2VuZGlmIC8qIEFOWVgyNSAqLworCisjaWZkZWYgSUJNWDI1ICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogVmFyaWFibGVzIGZvciBJQk0gWDI1ICovCisgICAgZXh0ZXJu IGludCB4MjVwb3J0OyAgICAgICAgICAgICAgICAgLyogTG9naWNhbCBwb3J0IHRvIHVzZSAqLwor ICAgIGV4dGVybiB4MjVhZGRyX3QgbG9jYWxfbnVhOyAgICAgICAgIC8qIExvY2FsIFguMjUgYWRk cmVzcyAqLworICAgIGV4dGVybiB4MjVhZGRyX3QgcmVtb3RlX251YTsgICAgICAgIC8qIFJlbW90 ZSBYLjI1IGFkZHJlc3MgKi8KKyAgICBleHRlcm4gY2hhciB4MjVuYW1lW107ICAgICAgICAgICAg ICAvKiBYMjUgZGV2aWNlIG5hbWUgKHN4MjVhMCkgKi8KKyAgICBleHRlcm4gY2hhciB4MjVkZXZb XTsgICAgICAgICAgICAgICAvKiBYMjUgZGV2aWNlIGZpbGUgL2Rldi94MjVwa3QgKi8KKyAgICB1 bG9uZyBiaW5kX2ZsYWdzID0gMDsgICAgICAgICAgICAgICAvKiBGbGFncyBmb3IgYmluZGluZyB0 aGUgWDI1IHN0cmVhbSAqLworICAgIHVsb25nIHRva2VuID0gMDsgICAgICAgICAgICAgICAgICAg IC8qIFRlbXBvcmFyeSByZXR1cm4gY29kZSAqLworI2VuZGlmIC8qIElCTVgyNSAqLworCisgICAg ZGVidWcoRjEwMSwibmV0b3BlbiBuZXR0IiwiIixuZXR0KTsKKyAgICAqaXBhZGRyID0gJ1wwJzsg ICAgICAgICAgICAgICAgICAgICAvKiBJbml0aWFsaXplIElQIGFkZHJlc3Mgc3RyaW5nICovCisK KyNpZmRlZiBTVU5YMjUKKyAgICBpZiAobmV0dCA9PSBORVRfU1gyNSkgeyAgICAgICAgICAgICAv KiBJZiBuZXR3b3JrIHR5cGUgaXMgWC4yNSAqLworICAgICAgICBuZXRjbG9zKCk7ICAgICAgICAg ICAgICAgICAgICAgIC8qIENsb3NlIGFueSBwcmV2aW91cyBuZXQgY29ubmVjdGlvbiAqLworICAg ICAgICB0dG5wcm90byA9IE5QX05PTkU7ICAgICAgICAgICAgIC8qIE5vIHByb3RvY29sIHNlbGVj dGVkIHlldCAqLworCisgICAgICAgIC8qIFNldCB1cCBob3N0IHN0cnVjdHVyZSAqLworICAgICAg ICBiemVybygoY2hhciAqKSZ4MjVob3N0LHNpemVvZih4MjVob3N0KSk7CisgICAgICAgIGlmICgo eDI1aG9zdC5ob3N0bGVuID0gcGt4MTIxKG5hbWUseDI1aG9zdC5ob3N0KSkgPCAwKSB7CisgICAg ICAgICAgICBmcHJpbnRmIChzdGRlcnIsIkludmFsaWQgWC4xMjEgaG9zdCBhZGRyZXNzICVzXG4i LG5hbWUpOworICAgICAgICAgICAgZXJybm8gPSAwOworICAgICAgICAgICAgcmV0dXJuICgtMSk7 CisgICAgICAgIH0KKyAgICAgICAgeDI1aG9zdC5kYXRhbGVuID0gWDI5UElETEVOOworICAgICAg ICB4MjVob3N0LmRhdGFbMF0gPSBYMjlQSUQ7CisKKyAgICAgICAgLyogU2V0IGNhbGwgdXNlciBk YXRhIGlmIHNwZWNpZmllZCAqLworICAgICAgICBpZiAoY3VkYXRhKSB7CisgICAgICAgICAgICBj a3N0cm5jcHkoKGNoYXIgKil4MjVob3N0LmRhdGErWDI5UElETEVOLHVkYXRhLChpbnQpc3RybGVu KHVkYXRhKSk7CisgICAgICAgICAgICB4MjVob3N0LmRhdGFsZW4gKz0gKGludClzdHJsZW4odWRh dGEpOworICAgICAgICB9CisKKyAgICAgICAgLyogT3BlbiBTdW5MaW5rIFguMjUgc29ja2V0ICov CisgICAgICAgIGlmICghcXVpZXQgJiYgKm5hbWUpIHsKKyAgICAgICAgICAgIHByaW50ZigiIFRy eWluZyAlcy4uLiAiLCBuYW1lKTsKKyAgICAgICAgICAgIGZmbHVzaChzdGRvdXQpOworICAgICAg ICB9CisgICAgICAgIGlmICgodHR5ZmQgPSBzb2NrZXQoQUZfWDI1LCBTT0NLX1NUUkVBTSwgMCkp IDwgMCkgeworICAgICAgICAgICAgZGVidWcoRjEwMSwibmV0b3BlbiBzb2NrZXQgZXJyb3IiLCIi LGVycm5vKTsKKyAgICAgICAgICAgIHBlcnJvciAoIlguMjUgc29ja2V0IGVycm9yIik7CisgICAg ICAgICAgICByZXR1cm4gKC0xKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIFNldHRpbmcgWC4y NSBvdXQtb2YtYmFuZCBkYXRhIGhhbmRsZXIgKi8KKyAgICAgICAgcGlkID0gZ2V0cGlkKCk7Cisg ICAgICAgIGlmIChpb2N0bCh0dHlmZCxTSU9DU1BHUlAsJnBpZCkpIHsKKyAgICAgICAgICAgIHBl cnJvcigiWC4yNSBzZXQgcHJvY2VzcyBncm91cCBpZCBlcnJvciIpOworICAgICAgICAgICAgcmV0 dXJuKC0xKTsKKyAgICAgICAgfQorICAgICAgICAoVk9JRCkgc2lnbmFsKFNJR1VSRyx4MjVvb2Jo KTsKKworICAgICAgICAvKiBTZXQgcmV2ZXJzZSBjaGFyZ2UgY2FsbCBhbmQgY2xvc2VkIHVzZXIg Z3JvdXAgaWYgcmVxdWVzdGVkICovCisgICAgICAgIGJ6ZXJvICgoY2hhciAqKSZ4MjVmYWNpbCxz aXplb2YoeDI1ZmFjaWwpKTsKKworI2lmbmRlZiBYMjVfV1JfRkFDSUxJVFkKKy8qICBOZXcgU3Vu TGluayAoNy4wIG9yIDguMCwgbm90IHN1cmUgd2hpY2gpLi4uICovCisgICAgICAgIHgyNWZhY2ls LnR5cGUgPSBUX1JFVkVSU0VfQ0hBUkdFOyAvKiBSZXZlcnNlIENoYXJnZSAqLworICAgICAgICB4 MjVmYWNpbC5mX3JldmVyc2VfY2hhcmdlID0gcmV2Y2FsbCA/IDEgOiAwOworICAgICAgICBpZiAo aW9jdGwodHR5ZmQsWDI1X1NFVF9GQUNJTElUWSwmeDI1ZmFjaWwpIDwgMCkgeworICAgICAgICAg ICAgcGVycm9yICgiU2V0dGluZyBYLjI1IHJldmVyc2UgY2hhcmdlIik7CisgICAgICAgICAgICBy ZXR1cm4gKC0xKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY2xvc2dyID4gLTEpIHsgICAgICAg ICAgICAgIC8qIENsb3NlZCBVc2VyIEdyb3VwIChPdXRnb2luZykgKi8KKyAgICAgICAgICAgIGJ6 ZXJvICgoY2hhciAqKSZ4MjVmYWNpbCxzaXplb2YoeDI1ZmFjaWwpKTsKKyAgICAgICAgICAgIHgy NWZhY2lsLnR5cGUgPSBUX0NVRzsKKyAgICAgICAgICAgIHgyNWZhY2lsLmZfY3VnX3JlcSA9IENV R19SRVFfQUNTOworICAgICAgICAgICAgeDI1ZmFjaWwuZl9jdWdfaW5kZXggPSBjbG9zZ3I7Cisg ICAgICAgICAgICBpZiAoaW9jdGwodHR5ZmQsWDI1X1NFVF9GQUNJTElUWSwmeDI1ZmFjaWwpIDwg MCkgeworICAgICAgICAgICAgICAgIHBlcnJvciAoIlNldHRpbmcgWC4yNSBjbG9zZWQgdXNlciBn cm91cCIpOworICAgICAgICAgICAgICAgIHJldHVybiAoLTEpOworICAgICAgICAgICAgfQorICAg ICAgICB9CisjZWxzZQorLyogIE9sZCBTdW5MaW5rIDYuMCAob3IgNy4wPykuLi4gKi8KKyAgICAg ICAgaWYgKHJldmNhbGwpIHgyNWZhY2lsLnJldmVyc2VfY2hhcmdlID0gcmV2Y2FsbDsKKyAgICAg ICAgaWYgKGNsb3NnciA+IC0xKSB7CisgICAgICAgICAgICB4MjVmYWNpbC5jdWdfcmVxID0gMTsK KyAgICAgICAgICAgIHgyNWZhY2lsLmN1Z19pbmRleCA9IGNsb3NncjsKKyAgICAgICAgfQorICAg ICAgICBpZiAoaW9jdGwodHR5ZmQsWDI1X1dSX0ZBQ0lMSVRZLCZ4MjVmYWNpbCkgPCAwKSB7Cisg ICAgICAgICAgICBwZXJyb3IgKCJTZXR0aW5nIFguMjUgZmFjaWxpdGllcyIpOworICAgICAgICAg ICAgcmV0dXJuICgtMSk7CisgICAgICAgIH0KKyNlbmRpZiAvKiBYMjVfV1JfRkFDSUxJVFkgKi8K KworICAgICAgICAvKiAgTmVlZCBYLjI1IGhlYWRlciB3aXRoIGJpdHMgUSBhbmQgTSAqLworICAg ICAgICBpZiAoaW9jdGwgKHR0eWZkLFgyNV9IRUFERVIsJm5lZWRoKSA8IDApIHsKKyAgICAgICAg ICAgIHBlcnJvciAoIlNldHRpbmcgWC4yNSBoZWFkZXIiKTsKKyAgICAgICAgICAgIHJldHVybiAo LTEpOworICAgICAgICB9CisKKyAgICAgICAgLyogQ29ubmVjdHMgdG8gcmVtb3RlIGhvc3Qgdmlh IFN1bkxpbmsgWC4yNSAqLworICAgICAgICBpZiAoY29ubmVjdCh0dHlmZCwoc3RydWN0IHNvY2th ZGRyICopJngyNWhvc3Qsc2l6ZW9mKHgyNWhvc3QpKSA8IDApIHsKKyAgICAgICAgICAgIGkgPSBl cnJubzsKKyAgICAgICAgICAgIGRlYnVnKEYxMDEsIm5ldG9wZW4gY29ubmVjdCBlcnJubyIsIiIs aSk7CisgICAgICAgICAgICBpZiAoaSkgeworICAgICAgICAgICAgICAgIHBlcnJvcigibmV0b3Bl biB4MjUgY29ubmVjdCIpOworICAgICAgICAgICAgICAgIHgyNWRpYWcoKTsKKyAgICAgICAgICAg IH0KKyAgICAgICAgICAgIChWT0lEKSBuZXRjbG9zKCk7CisgICAgICAgICAgICB0dHlmZCA9IC0x OworICAgICAgICAgICAgd2FzY2xvc2VkID0gMTsKKyAgICAgICAgICAgIHR0bnByb3RvID0gTlBf Tk9ORTsKKyAgICAgICAgICAgIGVycm5vID0gaTsKKyAgICAgICAgICAgIHJldHVybiAoLTEpOwor ICAgICAgICB9CisKKyAgICAgICAgLyogR2V0IFguMjUgbGluayBpZGVudGlmaWNhdGlvbiB1c2Vk IGZvciB0aGUgY29ubmVjdGlvbiAqLworICAgICAgICBpZiAoaW9jdGwodHR5ZmQsWDI1X0dFVF9M SU5LLCZsaW5raWQpIDwgMCkgeworICAgICAgICAgICAgcGVycm9yICgiR2V0dGluZyBYLjI1IGxp bmsgaWQiKTsKKyAgICAgICAgICAgIHJldHVybiAoLTEpOworICAgICAgICB9CisKKyAgICAgICAg LyogR2V0IFguMjUgbG9naWNhbCBjaGFubmVsIG51bWJlciB1c2VkIGZvciB0aGUgY29ubmVjdGlv biAqLworICAgICAgICBpZiAoaW9jdGwodHR5ZmQsWDI1X1JEX0xDR04sJmxjbikgPCAwKSB7Cisg ICAgICAgICAgICBwZXJyb3IgKCJHZXR0aW5nIFguMjUgbGNuIik7CisgICAgICAgICAgICByZXR1 cm4gKC0xKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIEdldCBTdW5MaW5rIFguMjUgdmVyc2lv biAqLworICAgICAgICBpZiAoaW9jdGwodHR5ZmQsWDI1X1ZFUlNJT04sJngyNXZlcikgPCAwKSB7 CisgICAgICAgICAgICBwZXJyb3IgKCJHZXR0aW5nIFN1bkxpbmsgWC4yNSB2ZXJzaW9uIik7Cisg ICAgICAgICAgICByZXR1cm4gKC0xKTsKKyAgICAgICAgfQorICAgICAgICB0dG5ldCA9IG5ldHQ7 ICAgICAgICAgICAgICAgICAgIC8qIFN1bmxpbmsgWC4yNSBuZXR3b3JrICovCisgICAgICAgIHR0 bnByb3RvID0gTlBfWDM7ICAgICAgICAgICAgICAgLyogUEFEIFguMywgWC4yOCwgWC4yOSBwcm90 b2NvbCAqLworICAgICAgICBpZiAobGNsKSBpZiAoKmxjbCA8IDApICpsY2wgPSAxOyAvKiBMb2Nh bCBtb2RlICovCisgICAgICAgIHJldHVybigwKTsKKyAgICB9IGVsc2UgLyogTm90ZSB0aGF0IFNV TlgyNSBzdXBwb3J0IGNhbiBjb2V4aXN0IHdpdGggVENQL0lQIHN1cHBvcnQuICovCisjZW5kaWYg LyogU1VOWDI1ICovCisKKyNpZmRlZiBJQk1YMjUKKyAgICAvKiByaWVobSAqLworICAgIGlmIChu ZXR0ID09IE5FVF9JWDI1KSB7ICAgICAgICAgICAgIC8qIElCTSBBSVggWC4yNSAqLworICAgICAg ICBuZXRjbG9zKCk7ICAgICAgICAgICAgICAgICAgICAgIC8qIENsb3NlIGFueSBwcmV2aW91cyBu ZXQgY29ubmVjdGlvbiAqLworICAgICAgICB0dG5wcm90byA9IE5QX05PTkU7ICAgICAgICAgICAg IC8qIE5vIHByb3RvY29sIHNlbGVjdGVkIHlldCAqLworCisgICAgICAgIC8qIGZpbmQgb3V0IHdo byB3ZSBhcmUgLSB0aGlzIGlzIG5vdCBzbyBlYXN5IG9uIEFJWCAqLworICAgICAgICAvKiByaWVo bTogbmVlZCB0byB3cml0ZSB0aGUgY29kZSB0aGF0IGZpbmRzIHRoaXMgb3V0CisgICAgICAgICAq IGF1dG9tYXRpY2FsbHksIG9yIGF0IGxlYXN0IGFsbG93IGl0IHRvIGJlIGNvbmZpZ3VyZWQKKyAg ICAgICAgICogc29tZWhvdworICAgICAgICAgKi8KKyAgICAgICAgaWYgKCFsb2NhbF9udWFbMF0g JiYgIXgyNWxvY2FsX251YShsb2NhbF9udWEpKSB7CisgICAgICAgICAgICByZXR1cm4oLTEpOwor ICAgICAgICB9CisKKyAgICAgICAgLyogSW5pdGlhbGlzZSB0aGUgWDI1IEFQSSAob25jZSBwZXIg cHJvY2Vzcz8gb25jZSBwZXIgY29ubmVjdGlvbj8pICovCisKKyAgICAgICAgZGVidWcoRjExMCwg Ik9wZW5pbmcgIiwgeDI1ZGV2LCAwICk7CisgICAgICAgIC8qIHNldCBPX05ERUxBWSB0byBhbGxv dyBwb2xsaW5nPyAqLworICAgICAgICBpZiAoKHR0eWZkID0gb3Blbih4MjVkZXYsIE9fUkRXUikp IDwgMCkgeworICAgICAgICAgICAgcGVycm9yICgiWC4yNSBkZXZpY2Ugb3BlbiBlcnJvciIpOwor ICAgICAgICAgICAgZGVidWcoRjEwMSwibmV0b3BlbjogZGV2aWNlIG9wZW4gZXJyb3IiLCIiLGVy cm5vKTsKKyAgICAgICAgICAgIHJldHVybiAoLTEpOworICAgICAgICB9CisKKyAgICAgICAgLyog cHVzaCB0aGUgTlBJIG9udG8gdGhlIFNUUkVBTSAqLworICAgICAgICBpZiAoaW9jdGwodHR5ZmQs SV9QVVNILCJucGkiKSA8IDAgKSB7CisgICAgICAgICAgICBjbG9zZSh0dHlmZCk7CisgICAgICAg ICAgICB0dHlmZCA9IC0xOworICAgICAgICAgICAgd2FzY2xvc2VkID0gMTsKKyAgICAgICAgICAg IHBlcnJvciggImtlcm1pdDogbmV0b3BlbigpOiBjb3VsZG4ndCBwdXNoIG5waSBvbiB0aGUgWDI1 IHN0cmVhbSIgKTsKKyAgICAgICAgICAgIGRlYnVnKEYxMDEsIm5ldG9wZW46IGNhbid0IHB1c2gg bnBpIG9uIHRoZSBYMjUgc3RyZWFtIiwiIixlcnJubyk7CisgICAgICAgICAgICByZXR1cm4gKC0x KTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIHNldCB1cCBzZXJ2ZXIgbW9kZSAtIGJpbmQgdGhl IHgyNSBwb3J0IGFuZCB3YWl0IGZvcgorICAgICAgICAgKiBpbmNvbWluZyBjb25uZWN0aW9ucwor ICAgICAgICAgKi8KKyAgICAgICAgaWYgKG5hbWVbMF0gPT0gJyonKSB7ICAgICAgICAgICAvKiBT ZXJ2ZXIgKi8KKyAgICAgICAgICAgIC8qIHNldCB1cCBhIHNlcnZlciAtIHNlZSB0aGUgd2Fybmlu ZyBpbiB4MjViaW5kKCkgKi8KKyAgICAgICAgICAgIGJpbmRfZmxhZ3MgfD0gVE9LRU5fUkVRVUVT VDsKKworICAgICAgICAgICAgLyogYmluZCBrZXJtaXQgdG8gdGhlIGxvY2FsIFgyNSBhZGRyZXNz ICovCisgICAgICAgICAgICB0b2tlbiA9IHgyNWJpbmQodHR5ZmQsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbG9jYWxfbnVhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVkYXRh LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpc3RybGVuKCB1ZGF0YSApLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg eDI1cG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5kX2ZsYWdzCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIGlmICh0b2tlbiA8IDApIHsKKyAg ICAgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJuZXRvcGVuOiBjb3VsZG4ndCBiaW5kIHRvIGxvY2Fs IFgyNSBhZGRyZXNzIiwiIiwwKTsKKyAgICAgICAgICAgICAgICBuZXRjbG9zKCk7CisgICAgICAg ICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8qIEN1cnJl bnRseSBub3QgY29ubmVjdGVkIHRvIGEgcmVtb3RlIGhvc3QgKi8KKworICAgICAgICAgICAgcmVt b3RlX251YVswXSA9ICdcMCc7CisKKyAgICAgICAgICAgIC8qIHN0b3JlIHRoZSBmZCBzbyB0aGF0 IGluY29taW5nIGNhbGxzIGNhbiBoYXZlIHRoZWlyIG93biBmZAorICAgICAgICAgICAgICogVGhp cyBpcyBhbG1vc3Qgc3VwcG9ydCBmb3IgYSB0cnVlIHNlcnZlciAoaWU6IGEnbGEgZnRwZCkKKyAg ICAgICAgICAgICAqIGJ1dCB3ZSdyZSBub3QgcXVpdGUgdGhlcmUgeWV0LgorICAgICAgICAgICAg ICogdXNlZCBpbiBuZXRjbG9zKCkKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgeDI1c2Vy dmVyZmQgPSB0dHlmZDsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiB3YWl0IGZvciBh biBpbmNvbWluZyBjYWxsCisgICAgICAgICAgICAgKiB0aGlzIHNob3VsZCBoYXBwZW4gaW4gdGhl ICJzZXJ2ZXIiIGNvbW1hbmQgYW5kIG5vdCBpbgorICAgICAgICAgICAgICogdGhlICJzZXQgaG9z dCAqIiBjb21tYW5kLgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBpZiAoKHR0eWZkID0g eDI1Z2V0Y2FsbCh0dHlmZCkpIDwgMCkgeworICAgICAgICAgICAgICAgIG5ldGNsb3MoKTsKKyAg ICAgICAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2Ug eyAgICAgICAgICAgICAgICAgICAgICAgIC8qIENsaWVudCAqLworICAgICAgICAgICAgLyogQmlu ZCBrZXJtaXQgdG8gdGhlIGxvY2FsIFgyNSBhZGRyZXNzICovCisgICAgICAgICAgICB0b2tlbiA9 IHgyNWJpbmQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHR5ZmQsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbG9jYWxfbnVhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg IChjaGFyICopTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDI1cG9y dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5kX2ZsYWdzCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIGlmICh0b2tlbiA8IDApIHsKKyAgICAgICAg ICAgICAgICBkZWJ1ZyhGMTAwLCJuZXRvcGVuOiBjb3VsZG4ndCBiaW5kIHRvIGxvY2FsIFgyNSBh ZGRyZXNzIiwiIiwwKTsKKyAgICAgICAgICAgICAgICBuZXRjbG9zKCk7CisgICAgICAgICAgICAg ICAgcmV0dXJuKC0xKTsKKyAgICAgICAgICAgIH0KKy8qIHJpZWhtOiB0aGlzIHNob3VsZCBiZSBk b25lIHZpYSB0aGUgQ09OTkVDVCBjb21tYW5kLCBub3QgSE9TVCEgKi8KKyAgICAgICAgICAgIHsK KyAgICAgICAgICAgICAgICB4MjVzZXJ2ZXJmZCA9IDA7CisgICAgICAgICAgICAgICAgLyogY2Fs bCB0aGUgcmVtb3RlIGhvc3QgKi8KKyAgICAgICAgICAgICAgICAvKiBuYW1lID09IGFkZHJlc3Mg b2YgcmVtb3RlIGhvc3QgYXMgY2hhciogKi8KKyAgICAgICAgICAgICAgICBpZiAoeDI1Y2FsbCh0 dHlmZCwgbmFtZSwgdWRhdGEpIDwgMCApIHsKKyAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEw MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIm5ldG9wZW46IGNvdWxkbid0IGNvbm5lY3Qg dG8gcmVtb3RlIFgyNSBhZGRyZXNzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIiIsIDAp OworICAgICAgICAgICAgICAgICAgICBuZXRjbG9zKCk7CisgICAgICAgICAgICAgICAgICAgIHJl dHVybigtMSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHN0cmNweShyZW1v dGVfbnVhLCBuYW1lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB0dG5ldCA9 IG5ldHQ7ICAgICAgICAgICAgICAgICAgIC8qIEFJWCBYLjI1IG5ldHdvcmsgKi8KKyAgICAgICAg aWYgKGxjbCkgaWYgKCpsY2wgPCAwKSAqbGNsID0gMTsgLyogTG9jYWwgbW9kZSAqLworICAgICAg ICByZXR1cm4oMCk7CisKKyAgICB9IGVsc2UgLyogTm90ZSB0aGF0IElCTVgyNSBzdXBwb3J0IGNh biBjb2V4aXN0IHdpdGggVENQL0lQIHN1cHBvcnQuICovCisjZW5kaWYgLyogSUJNWDI1ICovCisK Ky8qICAgQWRkIHN1cHBvcnQgZm9yIG90aGVyIG5ldHdvcmtzIGhlcmUuICovCisKKyAgICAgIGlm IChuZXR0ICE9IE5FVF9UQ1BCKSByZXR1cm4oLTEpOyAvKiBCU0Qgc29ja2V0IHN1cHBvcnQgKi8K KworI2lmZGVmIFRDUFNPQ0tFVAorICAgIG5ldGNsb3MoKTsgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIENsb3NlIGFueSBwcmV2aW91cyBjb25uZWN0aW9uLiAqLworICAgIGNrc3RybmNweShu YW1lY29weSwgbmFtZSwgTkFNRUNQWUwpOyAgICAgICAgLyogQ29weSB0aGUgaG9zdG5hbWUuICov CisgICAgZGVidWcoRjExMCwibmV0b3BlbiBuYW1lY29weSIsbmFtZWNvcHksMCk7CisKKyNpZm5k ZWYgTk9MSVNURU4KKyAgICBpZiAobmFtZVswXSA9PSAnKicpCisgICAgICByZXR1cm4odGNwc3J2 X29wZW4obmFtZSwgbGNsLCBuZXR0LCAwKSk7CisjZW5kaWYgLyogTk9MSVNURU4gKi8KKworICAg IHAgPSBuYW1lY29weTsgICAgICAgICAgICAgICAgICAgICAgIC8qIFdhcyBhIHNlcnZpY2UgcmVx dWVzdGVkPyAqLworICAgIHdoaWxlICgqcCAhPSAnXDAnICYmICpwICE9ICc6JykgcCsrOyAvKiBM b29rIGZvciBjb2xvbiAqLworICAgIGlmICgqcCA9PSAnOicpIHsgICAgICAgICAgICAgICAgICAg IC8qIEhhdmUgYSBjb2xvbiAqLworICAgICAgICBkZWJ1ZyhGMTEwLCJuZXRvcGVuIG5hbWUgaGFz IGNvbG9uIixuYW1lY29weSwwKTsKKyAgICAgICAgKnArKyA9ICdcMCc7ICAgICAgICAgICAgICAg ICAgICAvKiBHZXQgc2VydmljZSBuYW1lIG9yIG51bWJlciAqLworI2lmZGVmIENLX1VSTAorICAg ICAgICAvKgorICAgICAgICAgICBIZXJlIHdlIGhhdmUgdG8gY2hlY2sgZm9yIHZhcmlvdXMgcG9w dWxhciBzeW50YXhlczoKKyAgICAgICAgICAgaG9zdDpwb3J0IChvdXIgb3JpZ2luYWwgc3ludGF4 KQorICAgICAgICAgICBVUkwgc3VjaCBhcyB0ZWxuZXQ6aG9zdCBvciB0ZWxuZXQ6Ly9ob3N0Lwor ICAgICAgICAgICBPciBldmVuIHRlbG5ldDovL3VzZXI6cGFzc3dvcmRAaG9zdDpwb3J0L3BhdGgv CisgICAgICAgICAgIE9yIGEgbWFsZm9ybWVkIFVSTCBzdWNoIGFzIGdlbmVyYXRlZCBieSBOZXRz Y2FwZSA0LjAgbGlrZToKKyAgICAgICAgICAgdGVsbmV0OnRlbG5ldCBvciB0ZWxuZXQ6Omhvc3Qu CisgICAgICAgICovCisKKyAgICAgICAgLyoKKyAgICAgICAgICogUkVQTEFDRSBUSElTIENPREUg V0lUSCB1cmxwYXJzZSgpIGJ1dCBub3Qgb24gdGhlIGRheSBvZiB0aGUKKyAgICAgICAgICogQy1L ZXJtaXQgOC4wIFJFTEVBU0UuCisgICAgICAgICAqLworCisgICAgICAgIGlmICgqcCA9PSAnOicp ICAgICAgICAgICAgICAgICAgLyogYSBzZWNvbmQgY29sb24gKi8KKyAgICAgICAgICAqcCsrID0g J1wwJzsgICAgICAgICAgICAgICAgICAvKiBnZXQgcmlkIG9mIHRoYXQgb25lIHRvbyAqLworICAg ICAgICB3aGlsZSAoKnAgPT0gJy8nKSAqcCsrID0gJ1wwJzsgIC8qIGFuZCBzbGFzaGVzICovCisg ICAgICAgIHggPSBzdHJsZW4ocCk7ICAgICAgICAgICAgICAgICAgLyogTGVuZ3RoIG9mIHJlbWFp bmRlciAqLworICAgICAgICBpZiAocFt4LTFdID09ICcvJykgICAgICAgICAgICAgIC8qIElmIHRo ZXJlIGlzIGEgdHJhaWxpbmcgc2xhc2ggKi8KKyAgICAgICAgICBwW3gtMV0gPSAnXDAnOyAgICAg ICAgICAgICAgICAvKiByZW1vdmUgaXQuICovCisgICAgICAgIGRlYnVnKEYxMTAsIm5ldG9wZW4g bmFtZWNvcHkgYWZ0ZXIgc3RyaXBwaW5nIixuYW1lY29weSwwKTsKKyAgICAgICAgZGVidWcoRjEx MCwibmV0b3BlbiBwIGFmdGVyIHN0cmlwcGluZyIscCwwKTsKKyAgICAgICAgc2VydmljZSA9IGdl dHNlcnZieW5hbWUobmFtZWNvcHksInRjcCIpOworICAgICAgICBpZiAoc2VydmljZSB8fAorI2lm ZGVmIFJMT0dDT0RFCisgICAgICAgICAgICAhY2tzdHJjbXAoInJsb2dpbiIsbmFtZWNvcHksTkFN RUNQWUwsMCkgfHwKKyNlbmRpZiAvKiBSTE9HQ09ERSAqLworI2lmZGVmIENLX1NTTAorICAgICAg ICAgICAgIWNrc3RyY21wKCJ0ZWxuZXRzIixuYW1lY29weSxOQU1FQ1BZTCwwKSB8fAorI2VuZGlm IC8qIENLX1NTTCAqLworICAgICAgICAgICAgIWNrc3RyY21wKCJpa3NkIixuYW1lY29weSxOQU1F Q1BZTCwwKQorICAgICAgICAgICAgKSB7CisgICAgICAgICAgICBjaGFyIHRlbXBob3N0WzI1Nl0s IHRlbXBzZXJ2aWNlWzgwXSwgdGVtcHBhdGhbMjU2XTsKKyAgICAgICAgICAgIGNoYXIgKiBxID0g cCwgKnIgPSBwLCAqdyA9IHA7CisgICAgICAgICAgICBpbnQgdWlkZm91bmQ9MDsKKyAgICAgICAg ICAgIGV4dGVybiBjaGFyIHB3YnVmW107CisgICAgICAgICAgICBleHRlcm4gaW50IHB3ZmxnLCBw d2NyeXB0OworCisgICAgICAgICAgICBpZiAodHRucHJvdG8gPT0gTlBfREVGQVVMVCkKKyAgICAg ICAgICAgICAgc2V0bnByb3RvKG5hbWVjb3B5KTsKKworICAgICAgICAgICAgLyogQ2hlY2sgZm9y IHVzZXJpZCBhbmQgcG9zc2libHkgcGFzc3dvcmQgKi8KKyAgICAgICAgICAgIHdoaWxlICgqcCAh PSAnXDAnICYmICpwICE9ICdAJykKKyAgICAgICAgICAgICAgICBwKys7IC8qIGxvb2sgZm9yIEAg Ki8KKyAgICAgICAgICAgIGlmICgqcCA9PSAnQCcpIHsKKyAgICAgICAgICAgICAgICAvKiBmb3Vu ZCB1c2VybmFtZSBhbmQgcGVyaGFwcyBwYXNzd29yZCAqLworICAgICAgICAgICAgICAgIGRlYnVn KEYxMTAsIm5ldG9wZW4gbmFtZWNvcHkgZm91bmQgQCIsIiIsMCk7CisgICAgICAgICAgICAgICAg KnAgPSAnXDAnOworICAgICAgICAgICAgICAgIHArKzsKKyAgICAgICAgICAgICAgICB3aGlsZSAo KncgIT0gJ1wwJyAmJiAqdyAhPSAnOicpCisgICAgICAgICAgICAgICAgICB3Kys7CisgICAgICAg ICAgICAgICAgaWYgKCp3ID09ICc6JykKKyAgICAgICAgICAgICAgICAgICp3KysgPSAnXDAnOwor ICAgICAgICAgICAgICAgIC8qIHIgbm93IHBvaW50cyB0byB1c2VybmFtZSwgc2F2ZSBpdCBhbmQg dGhlIHBhc3N3b3JkICovCisgICAgICAgICAgICAgICAgZGVidWcoRjExMCwibmV0b3BlbiBuYW1l Y29weSB1c2VybmFtZSIsciwwKTsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJuZXRvcGVu IG5hbWVjb3B5IHBhc3N3b3JkIix3LDApOworICAgICAgICAgICAgICAgIHVpZGZvdW5kPTE7Cisg ICAgICAgICAgICAgICAgaWYgKCBzdHJjbXAodWlkYnVmLHIpIHx8ICp3ICkKKyAgICAgICAgICAg ICAgICAgICAgY2tzdHJuY3B5KHB3YnVmLHcsUFdCVUZMKzEpOworICAgICAgICAgICAgICAgIGNr c3RybmNweSh1aWRidWYscixVSURCVUZMRU4pOworICAgICAgICAgICAgICAgIHB3ZmxnID0gMTsK KyAgICAgICAgICAgICAgICBwd2NyeXB0ID0gMDsKKyAgICAgICAgICAgICAgICBxID0gcDsgICAg ICAgICAgICAgICAgICAvKiBIb3N0IGFmdGVyIHVzZXIgYW5kIHB3ZCAqLworICAgICAgICAgICAg fSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwID0gcTsgICAgICAgICAgICAgICAgICAvKiBObyB1 c2VybmFtZSBvciBwYXNzd29yZCAqLworICAgICAgICAgICAgfQorICAgICAgICAgICAgLyogTm93 IHdlIG11c3QgbG9vayBmb3IgdGhlIG9wdGlvbmFsIHBvcnQuICovCisgICAgICAgICAgICBkZWJ1 ZyhGMTEwLCJuZXRvcGVuIHggcCIscCwwKTsKKyAgICAgICAgICAgIGRlYnVnKEYxMTAsIm5ldG9w ZW4geCBxIixxLDApOworCisgICAgICAgICAgICAvKiBMb29rIGZvciB0aGUgcG9ydC9zZXJ2aWNl IG9yIGEgZmlsZS9kaXJlY3RvcnkgcGF0aCAqLworICAgICAgICAgICAgd2hpbGUgKCpwICE9ICdc MCcgJiYgKnAgIT0gJzonICYmICpwICE9ICcvJykKKyAgICAgICAgICAgICAgcCsrOworICAgICAg ICAgICAgaWYgKCpwID09ICc6JykgeworICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsIm5ldG9w ZW4gZm91bmQgcG9ydCIscSwwKTsKKyAgICAgICAgICAgICAgICAqcCsrID0gJ1wwJzsgICAgICAg ICAgICAvKiBGb3VuZCBhIHBvcnQgbmFtZSBvciBudW1iZXIgKi8KKyAgICAgICAgICAgICAgICBy ID0gcDsKKworICAgICAgICAgICAgICAgIC8qIExvb2sgZm9yIHRoZSBlbmQgb2YgcG9ydC9zZXJ2 aWNlIG9yIGEgZmlsZS9kaXJlY3RvcnkgcGF0aCAqLworICAgICAgICAgICAgICAgIHdoaWxlICgq cCAhPSAnXDAnICYmICpwICE9ICcvJykKKyAgICAgICAgICAgICAgICAgICAgcCsrOworICAgICAg ICAgICAgICAgIGlmICgqcCA9PSAnLycpCisgICAgICAgICAgICAgICAgICAgICpwKysgPSAnXDAn OworCisgICAgICAgICAgICAgICAgZGVidWcoRjExMCwibmV0b3BlbiBwb3J0IixyLDApOworICAg ICAgICAgICAgICAgIGNrc3RybmNweSh0ZW1wc2VydmljZSxyLDgwKTsKKyAgICAgICAgICAgICAg ICBja3N0cm5jcHkodGVtcGhvc3QscSwyNTYpOworICAgICAgICAgICAgICAgIGNrc3RybmNweSh0 ZW1wcGF0aCxwLDI1Nik7CisgICAgICAgICAgICAgICAgY2tzdHJuY3B5KG5hbWVjb3B5LHRlbXBo b3N0LE5BTUVDUFlMKTsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJuZXRvcGVuIHRlbXBz ZXJ2aWNlIix0ZW1wc2VydmljZSwwKTsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJuZXRv cGVuIHRlbXBob3N0Iix0ZW1waG9zdCwwKTsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJu ZXRvcGVuIHRlbXBwYXRoIix0ZW1wcGF0aCwwKTsKKworICAgICAgICAgICAgICAgIC8qIG1vdmUg cG9ydC9zZXJ2aWNlIHRvIGEgYnVmZmVyIHRoYXQgd29uJ3QgZ28gYXdheSAqLworICAgICAgICAg ICAgICAgIHggPSBzdHJsZW4obmFtZWNvcHkpOworICAgICAgICAgICAgICAgIHAgPSBuYW1lY29w eSArIHggKyAxOworICAgICAgICAgICAgICAgIGNrc3RybmNweShwLCB0ZW1wc2VydmljZSwgTkFN RUNQWUwgLSB4KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLyogSGFu ZGxlIGEgcGF0aCBpZiB3ZSBmb3VuZCBvbmUgKi8KKyAgICAgICAgICAgICAgICBpZiAoKnAgPT0g Jy8nKQorICAgICAgICAgICAgICAgICAgICAqcCsrID0gJ1wwJzsKKyAgICAgICAgICAgICAgICBj a3N0cm5jcHkodGVtcHBhdGgscCwyNTYpOworCisgICAgICAgICAgICAgICAgLyogV2UgZGlkbid0 IGZpbmQgYW5vdGhlciBwb3J0LCBidXQgaWYgcSBpcyBhIHNlcnZpY2UgKi8KKyAgICAgICAgICAg ICAgICAvKiB0aGVuIGFzc3VtZSB0aGF0IG5hbWVjb3B5IGlzIGFjdHVhbGx5IGEgaG9zdC4gICAg ICAqLworICAgICAgICAgICAgICAgIGlmIChnZXRzZXJ2YnluYW1lKHEsInRjcCIpKSB7CisgICAg ICAgICAgICAgICAgICAgIHAgPSBxOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisjaWZkZWYg UkxPR0NPREUKKyAgICAgICAgICAgICAgICAgICAgLyogcmxvZ2luIGlzIG5vdCBhIHZhbGlkIHNl cnZpY2UgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKCFja3N0cmNtcCgicmxvZ2luIixuYW1l Y29weSw2LDApKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBja3N0cm5jcHkobmFtZWNvcHks ImxvZ2luIixOQU1FQ1BZTCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBSTE9H Q09ERSAqLworICAgICAgICAgICAgICAgICAgICAvKiBpa3NkIGlzIG5vdCBhIHZhbGlkIHNlcnZp Y2UgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKCFja3N0cmNtcCgiaWtzZCIsbmFtZWNvcHks NiwwKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY2tzdHJuY3B5KG5hbWVjb3B5LCJrZXJt aXQiLE5BTUVDUFlMKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg ICAvKiBSZWNvbnN0cnVjdCBuYW1lY29weSAqLworICAgICAgICAgICAgICAgICAgICBja3N0cm5j cHkodGVtcHNlcnZpY2UsbmFtZWNvcHksODApOworICAgICAgICAgICAgICAgICAgICBja3N0cm5j cHkodGVtcGhvc3QscSwyNTYpOworICAgICAgICAgICAgICAgICAgICBja3N0cm5jcHkobmFtZWNv cHksdGVtcGhvc3QsTkFNRUNQWUwpOworICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJu ZXRvcGVuIHRlbXBzZXJ2aWNlIix0ZW1wc2VydmljZSwwKTsKKyAgICAgICAgICAgICAgICAgICAg ZGVidWcoRjExMCwibmV0b3BlbiB0ZW1waG9zdCIsdGVtcGhvc3QsMCk7CisgICAgICAgICAgICAg ICAgICAgIGRlYnVnKEYxMTAsIm5ldG9wZW4gdGVtcHBhdGgiLHRlbXBwYXRoLDApOworCisgICAg ICAgICAgICAgICAgICAgIC8qIG1vdmUgcG9ydC9zZXJ2aWNlIHRvIGEgYnVmZmVyIHRoYXQgd29u J3QgZ28gYXdheSAqLworICAgICAgICAgICAgICAgICAgICB4ID0gc3RybGVuKG5hbWVjb3B5KTsK KyAgICAgICAgICAgICAgICAgICAgcCA9IG5hbWVjb3B5ICsgeCArIDE7CisgICAgICAgICAgICAg ICAgICAgIGNrc3RybmNweShwLCB0ZW1wc2VydmljZSwgTkFNRUNQWUwgLSB4IC0gMSk7CisgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVidWcoRjExMCwibmV0 b3BlbiBVUkwgcmVzdWx0OiBob3N0IixuYW1lY29weSwwKTsKKyAgICAgICAgICAgIGRlYnVnKEYx MTAsIm5ldG9wZW4gVVJMIHJlc3VsdDogc2VydmljZSIscCwwKTsKKyAgICAgICAgICAgIGRlYnVn KEYxMTAsIm5ldG9wZW4gVVJMIHJlc3VsdDogcGF0aCIsdGVtcHBhdGgsMCk7CisKKyNpZmRlZiBJ S1NfR0VUCisgICAgICAgICAgICAvKiBJZiB3ZSBoYXZlIHNldCBhIHBhdGggc3BlY2lmaWVkLCB3 ZSBuZWVkIHRvIHRyeSB0byBHRVQgaXQgKi8KKyAgICAgICAgICAgIC8qIEJ1dCB3ZSBoYXZlIGFu b3RoZXIgcHJvYmxlbSwgd2UgaGF2ZSB0byBsb2dpbiBmaXJzdC4gIEhvdyAqLworICAgICAgICAg ICAgLyogZG8gd2Ugc3BlY2lmeSB0aGF0IGEgbG9naW4gbXVzdCBiZSBkb25lIGJlZm9yZSB0aGUg R0VUPyAgICovCisgICAgICAgICAgICAvKiBUaGUgdXNlcidzIG5hbWUgaWYgc3BlY2lmaWVkIGlz IGluICd1c2VyaWQnIGFuZCB0aGUgICAgICAgKi8KKyAgICAgICAgICAgIC8qIHBhc3N3b3JkIGlm IGFueSBpcyBpbiAncHdidWYnLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAg ICAgICAgaWYgKCB0ZW1wcGF0aFswXSApIHsKKyAgICAgICAgICAgICAgICBleHRlcm4gaW50IGFj dGlvbjsKKyAgICAgICAgICAgICAgICBleHRlcm4gY2hhciAqIGNtYXJnOworCisgICAgICAgICAg ICAgICAgaWYgKCAhdWlkZm91bmQgKSB7CisgICAgICAgICAgICAgICAgICAgIC8qIElmIG5vIHVz ZXJpZCB3YXMgc3BlY2lmaWVkIGFzIHBhcnQgb2YgdGhlIFVSTCBidXQKKyAgICAgICAgICAgICAg ICAgICAgICogYSBwYXRoIHdhcyBzcGVjaWZpZWQsIHRoZW4gd2UKKyAgICAgICAgICAgICAgICAg ICAgICogc2V0IHRoZSB1c2VyIG5hbWUgdG8gYW5vbnltb3VzIGFuZCB0aGUgcGFzc3dvcmQKKyAg ICAgICAgICAgICAgICAgICAgICogdG8gdGhlIGN1cnJlbnQgdXNlcmlkLgorICAgICAgICAgICAg ICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgY2tzdHJuY3B5KHB3YnVmLHVpZGJ1ZixQ V0JVRkwpOworICAgICAgICAgICAgICAgICAgICBja3N0cm5jYXQocHdidWYsIkAiLFBXQlVGTCk7 CisgICAgICAgICAgICAgICAgICAgIHB3ZmxnID0gMTsKKyAgICAgICAgICAgICAgICAgICAgcHdj cnlwdCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGNrc3RybmNweSh1aWRidWYsImFub255bW91 cyIsVUlEQlVGTEVOKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvKgor ICAgICAgICAgICAgICAgICAqIElmIGEgZmlsZSBwYXRoIHdhcyBzcGVjaWZpZWQgd2UgcGVyZm9y bSB0aGUgR0VUCisgICAgICAgICAgICAgICAgICogb3BlcmF0aW9uIGFuZCB0aGVuIHRlcm1pbmF0 ZSB0aGUgY29ubmVjdGlvbi4KKyAgICAgICAgICAgICAgICAgKgorICAgICAgICAgICAgICAgICAq IElmIGEgZGlyZWN0b3J5IHdhcyBnaXZlbiBpbnN0ZWFkIG9mIGEgZmlsZSwgdGhlbgorICAgICAg ICAgICAgICAgICAqIHdlIHNob3VsZCBSRU1PVEUgQ0QgdG8gdGhlIGRpcmVjdG9yeSBhbmQgbGlz dCBpdHMKKyAgICAgICAgICAgICAgICAgKiBjb250ZW50cy4gIEJ1dCBob3cgZG8gd2UgdGVsbCB0 aGUgZGlmZmVyZW5jZT8KKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBtYWtl c3RyKCZjbWFyZyx0ZW1wcGF0aCk7CisgICAgICAgICAgICAgICAgYWN0aW9uID0gJ3InOworICAg ICAgICAgICAgfQorI2VuZGlmIC8qIElLU19HRVQgKi8KKyAgICAgICAgfQorI2VuZGlmIC8qIENL X1VSTCAqLworICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE90aGVy d2lzZSB1c2UgdGVsbmV0ICovCisgICAgICAgIHAgPSAidGVsbmV0IjsKKyAgICB9CisvKgorICBC eSB0aGUgdGltZSB3ZSBnZXQgaGVyZSwgbmFtZWNvcHlbXSBzaG91bGQgaG9sZCB0aGUgbnVsbC10 ZXJtaW5hdGVkCisgIGhvc3RuYW1lIG9yIGFkZHJlc3MsIGFuZCBwIHNob3VsZCBwb2ludCB0byB0 aGUgc2VydmljZSBuYW1lIG9yIG51bWJlci4KKyovCisgICAgZGVidWcoRjExMCwibmV0b3BlbiBo b3N0IixuYW1lY29weSwwKTsKKyAgICBkZWJ1ZyhGMTEwLCJuZXRvcGVuIHNlcnZpY2UgcmVxdWVz dGVkIixwLDApOworCisgICAvKiBVc2UgdGhlIHNlcnZpY2UgcG9ydCB0byBzZXQgdGhlIGRlZmF1 bHQgcHJvdG9jb2wgdHlwZSBpZiBuZWNlc3NhcnkgKi8KKyAgICBpZiAodHRucHJvdG8gPT0gTlBf REVGQVVMVCkKKyAgICAgICBzZXRucHJvdG8ocCk7CisKKyAgICBja3N0cm5jcHkobmFtZWNvcHky LG5hbWVjb3B5LE5BTUVDUFlMKTsKKyAgICBzZXJ2aWNlID0gY2tnZXRzZXJ2aWNlKG5hbWVjb3B5 LHAsbmFtZWNvcHksTkFNRUNQWUwpOworICAgIGlmICghc2VydmljZSkgeworICAgICAgICBmcHJp bnRmKHN0ZGVyciwgIkNhbid0IGZpbmQgcG9ydCBmb3Igc2VydmljZSAlc1xuIiwgcCk7CisjaWZk ZWYgVEdWT1JXSU4KKyAgICAgICAgZGVidWcoRjEwMSwibmV0b3BlbiBjYW4ndCBnZXQgc2Vydmlj ZSIsIiIsc29ja2V0X2Vycm5vKTsKKyNlbHNlCisgICAgICAgIGRlYnVnKEYxMDEsIm5ldG9wZW4g Y2FuJ3QgZ2V0IHNlcnZpY2UiLCIiLGVycm5vKTsKKyNlbmRpZiAvKiBUR1ZPUldJTiAqLworICAg ICAgICBlcnJubyA9IDA7ICAgICAgICAgICAgICAgICAgLyogKHJhdGhlciB0aGFuIG1pc2xlYWQp ICovCisgICAgICAgIHJldHVybigtMSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKCFja3N0 cmNtcChuYW1lY29weSxuYW1lY29weTIsLTEsMCkpCisJICBuYW1lY29weTJbMF0gPSAnXDAnOwor ICAgICAgICBja3N0cm5jcHkoc3ZjYnVmLGNrdWl0b2EobnRvaHMoc2VydmljZS0+c19wb3J0KSks c2l6ZW9mKHN2Y2J1ZikpOworICAgICAgICBkZWJ1ZyhGMTEwLCJuZXRvcGVuIHNlcnZpY2Ugb2si LHN2Y2J1ZiwwKTsKKyAgICB9CisKKyNpZmRlZiBSTE9HQ09ERQorICAgIGlmIChzZXJ2aWNlICYm ICFzdHJjbXAoImxvZ2luIixwKSAmJiBzZXJ2aWNlLT5zX3BvcnQgIT0gaHRvbnMoNTEzKSkgewor ICAgICAgICBmcHJpbnRmKHN0ZGVyciwKKyAgICAgICAgICAgICAgICAiICBXYXJuaW5nOiBsb2dp biBzZXJ2aWNlIG9uIHBvcnQgJWQgaW5zdGVhZCBvZiBwb3J0IDUxM1xuIiwKKyAgICAgICAgICAg ICAgICAgbnRvaHMoc2VydmljZS0+c19wb3J0KQorICAgICAgICAgICAgICAgICk7CisgICAgICAg IGZwcmludGYoc3RkZXJyLCAiICBFZGl0IFNFUlZJQ0VTIGZpbGUgaWYgUkxPR0lOIGZhaWxzIHRv IGNvbm5lY3QuXG4iKTsKKyAgICAgICAgZGVidWcoRjEwMSwidGNwc3J2X29wZW4gbG9naW4gb24g cG9ydCIsIiIsbnRvaHMoc2VydmljZS0+c19wb3J0KSk7CisgICAgfQorI2VuZGlmIC8qIFJMT0dD T0RFICovCisKKyNpZm5kZWYgTk9IVFRQCisgICAvKiBGb3IgSFRUUCBjb25uZWN0aW9ucyB3ZSBt dXN0IHByZXNlcnZlIHRoZSBvcmlnaW5hbCBob3N0bmFtZSBhbmQgKi8KKyAgIC8qIHNlcnZpY2Ug cmVxdWVzdGVkIHNvIHdlIGNhbiBpbmNsdWRlIHRoZW0gaW4gdGhlIEhvc3QgaGVhZGVyLiAgICAq LworICAgIGNrbWFrbXNnKGh0dHBfaG9zdF9wb3J0LHNpemVvZihodHRwX2hvc3RfcG9ydCksbmFt ZWNvcHksIjoiLAorICAgICAgICAgICAgICBja2l0b2EobnRvaHMoc2VydmljZS0+c19wb3J0KSks TlVMTCk7CisKKyAgICAvKiAnbmFtZWNvcHknIGNvbnRhaW5zIHRoZSBuYW1lIG9mIHRoZSBob3N0 IHRvIHdoaWNoIHdlIHdhbnQgdG8gY29ubmVjdCAqLworICAgIC8qICdzdmNidWYnICAgY29udGFp bnMgdGhlIHNlcnZpY2UgbmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisg ICAgLyogJ3NlcnZpY2UtPnNfcG9ydCcgY29udGFpbnMgdGhlIHBvcnQgbnVtYmVyIGluIG5ldHdv cmsgYnl0ZSBvcmRlciAgICAgKi8KKworICAgIC8qIElmIHdlIGFyZSB1c2luZyBhbiBodHRwIHBy b3h5LCB3ZSBuZWVkIHRvIGNyZWF0ZSBhIGJ1ZmZlciBjb250YWluaW5nICovCisgICAgLyogICBo b3N0bmFtZTpwb3J0LW51bWJlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKi8KKyAgICAvKiB0byBwYXNzIHRvIHRoZSBodHRwX2Nvbm5lY3QoKSBmdW5jdGlv bi4gIFRoZW4gd2UgbmVlZCB0byByZXBsYWNlICAgICAqLworICAgIC8qICduYW1lY29weScgd2l0 aCB0aGUgbmFtZSBvZiB0aGUgcHJveHkgc2VydmVyIGFuZCB0aGUgc2VydmljZS0+c19wb3J0ICov CisgICAgLyogd2l0aCB0aGUgcG9ydCBudW1iZXIgb2YgdGhlIHByb3h5IChkZWZhdWx0IHBvcnQg ODApLiAgICAgICAgICAgICAgICAgKi8KKworICAgIGlmICggdGNwX2h0dHBfcHJveHkgKSB7Cisg ICAgICAgIGNrbWFrbXNnKHByb3h5Y29weSxzaXplb2YocHJveHljb3B5KSxuYW1lY29weSwiOiIs CisgICAgICAgICAgICAgICAgIGNrdWl0b2EobnRvaHMoc2VydmljZS0+c19wb3J0KSksTlVMTCk7 CisgICAgICAgIGNrc3RybmNweShuYW1lY29weSx0Y3BfaHR0cF9wcm94eSxOQU1FQ1BZTCk7CisK KyAgICAgICAgcCA9IG5hbWVjb3B5OyAgICAgICAgICAgICAgICAgICAgICAgLyogV2FzIGEgc2Vy dmljZSByZXF1ZXN0ZWQ/ICovCisgICAgICAgIHdoaWxlICgqcCAhPSAnXDAnICYmICpwICE9ICc6 JykgcCsrOyAvKiBMb29rIGZvciBjb2xvbiAqLworICAgICAgICBpZiAoKnAgPT0gJzonKSB7ICAg ICAgICAgICAgICAgICAgICAvKiBIYXZlIGEgY29sb24gKi8KKyAgICAgICAgICAgIGRlYnVnKEYx MTAsIm5ldG9wZW4gbmFtZSBoYXMgY29sb24iLG5hbWVjb3B5LDApOworICAgICAgICAgICAgKnAr KyA9ICdcMCc7ICAgICAgICAgICAgICAgICAgICAvKiBHZXQgc2VydmljZSBuYW1lIG9yIG51bWJl ciAqLworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3RyY3B5KCsrcCwiaHR0cCIpOwor ICAgICAgICB9CisKKyAgICAgICAgc2VydmljZSA9IGNrZ2V0c2VydmljZShuYW1lY29weSxwLG5h bWVjb3B5LE5BTUVDUFlMKTsKKyAgICAgICAgaWYgKCFzZXJ2aWNlKSB7CisgICAgICAgICAgICBm cHJpbnRmKHN0ZGVyciwgIkNhbid0IGZpbmQgcG9ydCBmb3Igc2VydmljZSAlc1xuIiwgcCk7Cisj aWZkZWYgVEdWT1JXSU4KKyAgICAgICAgICAgIGRlYnVnKEYxMDEsIm5ldG9wZW4gY2FuJ3QgZ2V0 IHNlcnZpY2UgZm9yIHByb3h5IiwiIixzb2NrZXRfZXJybm8pOworI2Vsc2UKKyAgICAgICAgICAg IGRlYnVnKEYxMDEsIm5ldG9wZW4gY2FuJ3QgZ2V0IHNlcnZpY2UgZm9yIHByb3h5IiwiIixlcnJu byk7CisjZW5kaWYgLyogVEdWT1JXSU4gKi8KKyAgICAgICAgICAgIGVycm5vID0gMDsgICAgICAg ICAgICAgICAgICAvKiAocmF0aGVyIHRoYW4gbWlzbGVhZCkgKi8KKyAgICAgICAgICAgIHJldHVy bigtMSk7CisgICAgICAgIH0KKyAgICAgICAgY2tzdHJuY3B5KHAsY2t1aXRvYShudG9ocyhzZXJ2 aWNlLT5zX3BvcnQpKSxOQU1FQ1BZTC0ocC1uYW1lY29weSkpOworCisgICAgfQorI2VuZGlmIC8q IE5PSFRUUCAqLworCisgICAgLyogU2V0IHVwIHNvY2tldCBzdHJ1Y3R1cmUgYW5kIGdldCBob3N0 IGFkZHJlc3MgKi8KKworICAgIGJ6ZXJvKChjaGFyICopJnJfYWRkciwgc2l6ZW9mKHJfYWRkcikp OworICAgIGRlYnVnKEYxMDAsIm5ldG9wZW4gYnplcm8gb2siLCIiLDApOworLyoKKyAgIE5PVEU6 IE9yaWdpbmFsbHkgdGhlIGluZXRfYWRkcigpIGNoZWNrIHdhcyAjaWZkZWYgTlQsIGJ1dCBpcyBl bmFibGVkIGZvcgorICAgYWxsIGFzIG9mIDIwIFNlcCA5NywgdG8gYWxsb3cgcGVvcGxlIHRvICJz ZXQgaG9zdCIgdG8gYSBzcGVjaWZpYyBudW1lcmljIElQCisgICBhZGRyZXNzIHdpdGhvdXQgZ29p bmcgdGhyb3VnaCB0aGUgbXVsdGlob21lZCBob3N0IHNlcXVlbmNlIGFuZCB3aW5kaW5nIHVwCisg ICBhdCBhIGRpZmZlcmVudCBwbGFjZSB0aGFuIHRoZSBvbmUgcmVxdWVzdGVkLgorKi8KKyNpZmRl ZiBJTkFERFJfTk9ORQorICAgIGRlYnVnKEYxMDEsIm5ldG9wZW4gSU5BRERSX05PTkUgZGVmaW5l ZCIsIiIsSU5BRERSX05PTkUpOworI2Vsc2UgLyogSU5BRERSX05PTkUgKi8KKyAgICBkZWJ1ZyhG MTAwLCJuZXRvcGVuIElOQUREUl9OT05FIG5vdCBkZWZpbmVkIiwiIiwwKTsKKyNlbmRpZiAvKiBJ TkFERFJfTk9ORSAqLworI2lmZGVmIElOQUREUlgKKyAgICBkZWJ1ZyhGMTAwLCJuZXRvcGVuIElO QUREUlggZGVmaW5lZCIsIiIsMCk7CisjZWxzZSAvKiBJTkFERFJYICovCisgICAgZGVidWcoRjEw MCwibmV0b3BlbiBJTkFERFJYIG5vdCBkZWZpbmVkIiwiIiwwKTsKKyNlbmRpZiAvKiBJTkFERFJY ICovCisKKyNpZm5kZWYgTk9NSEhPU1QKKyNpZmRlZiBJTkFERFJYCisgICAgaWF4ID0gaW5ldF9h ZGRyKG5hbWVjb3B5KTsKKyAgICBkZWJ1ZyhGMTExLCJuZXRvcGVuIGluZXRfYWRkciIsbmFtZWNv cHksaWF4LnNfYWRkcik7CisjZWxzZSAvKiBJTkFERFJYICovCisjaWZkZWYgSU5BRERSX05PTkUK KyAgICBpYXguc19hZGRyID0gaW5ldF9hZGRyKG5hbWVjb3B5KTsKKyAgICBkZWJ1ZyhGMTExLCJu ZXRvcGVuIGluZXRfYWRkciIsbmFtZWNvcHksaWF4LnNfYWRkcik7CisjZWxzZSAvKiBJTkFERFJf Tk9ORSAqLworI2lmZGVmIFNPTEFSSVMKKyAgICAvKiBJbiBTb2xhcmlzIGluZXRfYWRkcigpIGlz IG9mIHR5cGUgaW5fYWRkcl90IHdoaWNoIGlzIHVpbnQzMl90ICovCisgICAgLyogKHVuc2lnbmVk KSB5ZXQgaXQgcmV0dXJucyAtMSAoc2lnbmVkKSBvbiBmYWlsdXJlLiAqLworICAgIC8qIEl0IG1h a2VzIGEgZGlmZmVyZW5jZSBpbiA2NC1iaXQgYnVpbGRzLiAqLworICAgIHJjX2luZXRfYWRkciA9 IGluZXRfYWRkcihuYW1lY29weSk7CS8qIEFzc2lnbiByZXR1cm4gY29kZSB0byBhbiBpbnQgKi8K KyAgICBpYXggPSAodW5zaWduZWQpIHJjX2luZXRfYWRkcjsJLyogYW5kIGZyb20gdGhlcmUgdG8g d2hhdGV2ZXIuLiAqLworI2Vsc2UKKyNpZm5kZWYgZGF0YWdlbmVyYWwKKyAgICBpYXggPSAodW5z aWduZWQgaW50KSBpbmV0X2FkZHIobmFtZWNvcHkpOworI2Vsc2UKKyAgICBpYXggPSAtMUw7Cisj ZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KKyNlbmRpZiAvKiBTT0xBUklTICovCisgICAgZGVidWco RjExMSwibmV0b3BlbiByY19pbmV0X2FkZHIiLG5hbWVjb3B5LHJjX2luZXRfYWRkcik7CisgICAg ZGVidWcoRjExMSwibmV0b3BlbiBpbmV0X2FkZHIiLG5hbWVjb3B5LGlheCk7CisjZW5kaWYgLyog SU5BRERSX05PTkUgKi8KKyNlbmRpZiAvKiBJTkFERFJYICovCisKKyAgICBkbnMgPSAwOworICAg IGlmICgKKy8qIFRoaXMgbWlnaHQgZ2l2ZSB3YXJuaW5ncyBvbiA2NC1iaXQgcGxhdGZvcm1zIGJ1 dCB0aGV5IHNob3VsZCBiZSBoYXJtbGVzcyAqLworLyogYmVjYXVzZSBJTkFERFJfTk9ORSBzaG91 bGQgYmUgYWxsIDEncyBhbnl3YXksIHRodXMgdGhlIE9SIHBhcnQgaXMgKi8KKy8qIHByb2JhYmx5 IHN1cGVyZmx1b3VzIC0tIG5vdCBzdXJlIHdoeSBpdCdzIGV2ZW4gdGhlcmUsIG1heWJlIGl0IHNo b3VsZCBiZSAqLworLyogcmVtb3ZlZC4gKi8KKyNpZmRlZiBTT0xBUklTCisJcmNfaW5ldF9hZGRy ID09IC0xCisjZWxzZQorI2lmZGVmIElOQUREUl9OT05FCisgICAgICAgIGlheC5zX2FkZHIgPT0g SU5BRERSX05PTkUgLyogfHwgaWF4LnNfYWRkciA9PSAodW5zaWduZWQgbG9uZykgLTFMICovCisj ZWxzZSAvKiBJTkFERFJfTk9ORSAqLworICAgICAgICBpYXggPCAwCisjZW5kaWYgLyogSU5BRERS X05PTkUgKi8KKyNlbmRpZiAvKiBTT0xBUklTICovCisgICAgICAgICkgeworICAgICAgICBpZiAo IXF1aWV0KSB7CisgICAgICAgICAgICBwcmludGYoIiBETlMgTG9va3VwLi4uICIpOworICAgICAg ICAgICAgZmZsdXNoKHN0ZG91dCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKChob3N0ID0gZ2V0 aG9zdGJ5bmFtZShuYW1lY29weSkpICE9IE5VTEwpIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMTAs Im5ldG9wZW4gZ2V0aG9zdGJ5bmFtZSAhPSBOVUxMIixuYW1lY29weSwwKTsKKyAgICAgICAgICAg IGhvc3QgPSBja19jb3B5aG9zdGVudChob3N0KTsKKyAgICAgICAgICAgIGRucyA9IDE7ICAgICAg ICAgICAgICAgICAgICAvKiBSZW1lbWJlciB3ZSBwZXJmb3JtZWQgZG5zIGxvb2t1cCAqLworICAg ICAgICAgICAgcl9hZGRyLnNpbl9mYW1pbHkgPSBob3N0LT5oX2FkZHJ0eXBlOworICAgICAgICAg ICAgaWYgKHRjcF9yZG5zICYmIGhvc3QtPmhfbmFtZSAmJiBob3N0LT5oX25hbWVbMF0KKyNpZm5k ZWYgTk9IVFRQCisgICAgICAgICAgICAgICAgICYmICh0Y3BfaHR0cF9wcm94eSA9PSBOVUxMKQor I2VuZGlmIC8qIE5PSFRUUCAqLworCQkpIHsKKyNpZmRlZiBDT01NRU5UCisgICAgICAgICAgICAg ICAgY2tzdHJuY3B5KHh4bmFtZSxob3N0LT5oX25hbWUsWFhOQU1FTEVOKTsKKwkJZGVidWcoRjEx MCwibmV0b3BlbiB4eG5hbWVbMV0iLHh4bmFtZSwwKTsKKyAgICAgICAgICAgICAgICBpZiAoKFhY TkFNRUxFTiAtIChpbnQpc3RybGVuKG5hbWUpKSA+ICgoaW50KXN0cmxlbihzdmNidWYpKzEpKXsK KyAgICAgICAgICAgICAgICAgICAgY2tzdHJuY2F0KHh4bmFtZSwiOiIsWFhOQU1FTEVOIC0gKGlu dClzdHJsZW4oeHhuYW1lKSk7CisgICAgICAgICAgICAgICAgICAgIGNrc3RybmNhdCh4eG5hbWUs c3ZjYnVmLFhYTkFNRUxFTiAtIChpbnQpc3RybGVuKHh4bmFtZSkpOworCQkgICAgZGVidWcoRjEx MCwibmV0b3BlbiB4eG5hbWVbMl0iLHh4bmFtZSwwKTsKKyAgICAgICAgICAgICAgICB9CisJCW5h bWUgPSAoY2hhciAqKXh4bmFtZTsKKyNlbHNlCisgICAgICAgICAgICAgICAgY2tzdHJuY3B5KG5h bWUsaG9zdC0+aF9uYW1lLDgwKTsgIC8qIEJhZCBCYWQgQmFkICovCisgICAgICAgICAgICAgICAg aWYgKCAoODAtc3RybGVuKG5hbWUpKSA+IChzdHJsZW4oc3ZjYnVmKSsxKSApIHsKKyAgICAgICAg ICAgICAgICAgICAgY2tzdHJuY2F0KG5hbWUsIjoiLDgwLXN0cmxlbihuYW1lKSk7CisgICAgICAg ICAgICAgICAgICAgIGNrc3RybmNhdChuYW1lLHN2Y2J1Ziw4MC1zdHJsZW4obmFtZSkpOworICAg ICAgICAgICAgICAgIH0KKyNlbmRpZgkvKiBDT01NRU5UICovCisgICAgICAgICAgICB9CisJICAg IGRlYnVnKEYxMTAsIm5ldG9wZW4gbmFtZSBhZnRlciBsb29rdXAiLG5hbWUsMCk7CisKKyNpZmRl ZiBIQUREUkxJU1QKKyNpZmRlZiBoX2FkZHIKKyAgICAgICAgICAgIC8qIFRoaXMgaXMgZm9yIHRy eWluZyBtdWx0aXBsZSBJUCBhZGRyZXNzZXMgLSBzZWUgPG5ldGRiLmg+ICovCisgICAgICAgICAg ICBpZiAoIShob3N0LT5oX2FkZHJfbGlzdCkpCisgICAgICAgICAgICAgIHJldHVybigtMSk7Cisg ICAgICAgICAgICBiY29weShob3N0LT5oX2FkZHJfbGlzdFswXSwKKyAgICAgICAgICAgICAgICAg IChjYWRkcl90KSZyX2FkZHIuc2luX2FkZHIsCisgICAgICAgICAgICAgICAgICBob3N0LT5oX2xl bmd0aAorICAgICAgICAgICAgICAgICAgKTsKKyNlbHNlCisgICAgICAgICAgICBiY29weShob3N0 LT5oX2FkZHIsIChjYWRkcl90KSZyX2FkZHIuc2luX2FkZHIsIGhvc3QtPmhfbGVuZ3RoKTsKKyNl bmRpZiAvKiBoX2FkZHIgKi8KKyNlbHNlICAvKiBIQUREUkxJU1QgKi8KKyNpZmRlZiBIUFVYNgor CSAgICByX2FkZHIuc2luX2FkZHIuc19hZGRyID0gKHVfbG9uZylob3N0LT5oX2FkZHI7CisjZWxz ZSAgLyogSFBVWDYgKi8KKyAgICAgICAgICAgIGJjb3B5KGhvc3QtPmhfYWRkciwgKGNhZGRyX3Qp JnJfYWRkci5zaW5fYWRkciwgaG9zdC0+aF9sZW5ndGgpOworI2VuZGlmCS8qIEhQVVg2ICovCisj ZW5kaWYgLyogSEFERFJMSVNUICovCisKKyNpZm5kZWYgSFBVWDYKKyAgICAgICAgICAgIGRlYnVn KEYxMTEsIkJDT1BZIiwiaG9zdC0+aF9sZW5ndGgiLGhvc3QtPmhfbGVuZ3RoKTsKKyNlbmRpZgkv KiBIUFVYNiAqLworICAgICAgICB9CisgICAgfQorI2VuZGlmIC8qIE5PTUhIT1NUICovCisKKyAg ICBkZWJ1ZyhGMTAxLCJuZXRvcGVuIGRucyIsIiIsZG5zKTsKKworICAgIGlmICghZG5zKSB7Cisj aWZkZWYgSU5BRERSWAorLyogaW5ldF9hZGRyKCkgaXMgb2YgdHlwZSBzdHJ1Y3QgaW5fYWRkciAq LworICAgICAgICBzdHJ1Y3QgaW5fYWRkciBpbmE7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgdXU7 CisgICAgICAgIGRlYnVnKEYxMDAsIm5ldG9wZW4gZ2V0aG9zdGJ5bmFtZSA9PSBOVUxMOiBJTkFE RFJYIiwiIiwwKTsKKyAgICAgICAgaW5hID0gaW5ldF9hZGRyKG5hbWVjb3B5KTsKKyAgICAgICAg dXUgPSAqKHVuc2lnbmVkIGludCAqKSZpbmE7CisjZWxzZSAvKiBOb3QgSU5BRERSWCAqLworLyog aW5ldF9hZGRyKCkgaXMgdW5zaWduZWQgbG9uZyAqLworICAgICAgICB1bnNpZ25lZCBsb25nIHV1 OworICAgICAgICBkZWJ1ZyhGMTAwLCJuZXRvcGVuIGdldGhvc3RieW5hbWUgPT0gTlVMTDogTm90 IElOQUREUlgiLCIiLDApOworICAgICAgICB1dSA9IGluZXRfYWRkcihuYW1lY29weSk7CisjZW5k aWYgLyogSU5BRERSWCAqLworICAgICAgICBkZWJ1ZyhGMTAxLCJuZXRvcGVuIHV1IiwiIix1dSk7 CisgICAgICAgIGlmICgKKyNpZmRlZiBJTkFERFJfTk9ORQorICAgICAgICAgICAgISh1dSA9PSBJ TkFERFJfTk9ORSB8fCB1dSA9PSAodW5zaWduZWQgaW50KSAtMUwpCisjZWxzZSAgIC8qIElOQURE Ul9OT05FICovCisgICAgICAgICAgICB1dSAhPSAoKHVuc2lnbmVkIGxvbmcpLTEpCisjZW5kaWYg LyogSU5BRERSX05PTkUgKi8KKyAgICAgICAgICAgICkgeworICAgICAgICAgICAgcl9hZGRyLnNp bl9hZGRyLnNfYWRkciA9IHV1OworICAgICAgICAgICAgcl9hZGRyLnNpbl9mYW1pbHkgPSBBRl9J TkVUOworICAgICAgICB9IGVsc2UgeworI2lmZGVmIFZNUworICAgICAgICAgICAgZnByaW50Zihz dGRvdXQsICJcclxuIik7ICAgIC8qIGNvbXBsZXRlIGFueSBwcmV2aW91cyBtZXNzYWdlICovCisj ZW5kaWYgLyogVk1TICovCisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNhbid0IGdldCBh ZGRyZXNzIGZvciAlc1xuIiwgbmFtZWNvcHkpOworI2lmZGVmIFRHVk9SV0lOCisgICAgICAgICAg ICBkZWJ1ZyhGMTAxLCJuZXRvcGVuIGNhbid0IGdldCBhZGRyZXNzIiwiIixzb2NrZXRfZXJybm8p OworI2Vsc2UKKyAgICAgICAgICAgIGRlYnVnKEYxMDEsIm5ldG9wZW4gY2FuJ3QgZ2V0IGFkZHJl c3MiLCIiLGVycm5vKTsKKyNlbmRpZiAvKiBUR1ZPUldJTiAqLworICAgICAgICAgICAgZXJybm8g PSAwOyAgICAgICAgICAgICAgICAgIC8qIFJhdGhlciB0aGFuIG1pc2xlYWQgKi8KKyAgICAgICAg ICAgIHJldHVybigtMSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBHZXQgYSBmaWxlIGRl c2NyaXB0b3IgZm9yIHRoZSBjb25uZWN0aW9uLiAqLworCisgICAgcl9hZGRyLnNpbl9wb3J0ID0g c2VydmljZS0+c19wb3J0OworICAgIGNrc3RybmNweShpcGFkZHIsKGNoYXIgKilpbmV0X250b2Eo cl9hZGRyLnNpbl9hZGRyKSwyMCk7CisgICAgZGVidWcoRjExMCwibmV0b3BlbiB0cnlpbmciLGlw YWRkciwwKTsKKyAgICBpZiAoIXF1aWV0ICYmICppcGFkZHIpIHsKKyAgICAgICAgcHJpbnRmKCIg VHJ5aW5nICVzLi4uICIsIGlwYWRkcik7CisgICAgICAgIGZmbHVzaChzdGRvdXQpOworICAgIH0K KworICAgIC8qIExvb3AgdG8gdHJ5IGFkZGl0aW9uYWwgSVAgYWRkcmVzc2VzLCBpZiBhbnkuICov CisKKyAgICBkbyB7CisjaWZkZWYgRVhDRUxBTgorICAgICAgICBzZW5kX3NvY2tldC5zaW5fZmFt aWx5ID0gQUZfSU5FVDsKKyAgICAgICAgc2VuZF9zb2NrZXQuc2luX2FkZHIuc19hZGRyID0gMDsK KyAgICAgICAgc2VuZF9zb2NrZXQuc2luX3BvcnQgPSAwOworICAgICAgICBpZiAoKHR0eWZkID0g c29ja2V0KFNPQ0tfU1RSRUFNLCAoc3RydWN0IHNvY2twcm90byAqKTAsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJnNlbmRfc29ja2V0LCBTT19SRVVTRUFERFIpKSA8IDApCisjZWxzZSAg LyogRVhDRUxBTiAqLworI2lmZGVmIE5UCisjaWZkZWYgQ09NTUVOVF9YCisgICAgICAgLyoKKyAg ICAgICAgIE11c3QgbWFrZSBzdXJlIHRoYXQgYWxsIHNvY2tldHMgYXJlIG9wZW5lZCBpbgorICAg ICAgICAgTm9uLW92ZXJsYXBwZWQgbW9kZSBzaW5jZSB3ZSB1c2UgdGhlIHN0YW5kYXJkCisgICAg ICAgICBDIFJUTCBmdW5jdGlvbnMgdG8gcmVhZCBhbmQgd3JpdGUgZGF0YS4KKyAgICAgICAgIEJ1 dCBpdCBkb2Vzbid0IHNlZW0gdG8gd29yayBhcyBwbGFubmVkLgorICAgICAgICovCisgICAgICAg ICAgeworICAgICAgICAgICAgICBpbnQgb3B0aW9uVmFsdWUgPSBTT19TWU5DSFJPTk9VU19OT05B TEVSVDsKKyAgICAgICAgICAgICAgaWYgKHNldHNvY2tvcHQoSU5WQUxJRF9TT0NLRVQsIFNPTF9T T0NLRVQsIFNPX09QRU5UWVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAq KSAmb3B0aW9uVmFsdWUsIHNpemVvZihvcHRpb25WYWx1ZSkpCisgICAgICAgICAgICAgICAgICAh PSBOT19FUlJPUikKKyAgICAgICAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICAgIH0KKyNl bmRpZiAvKiBDT01NRU5UICovCisjZW5kaWYgLyogTlQgKi8KKworICAgICAgICBpZiAoKHR0eWZk ID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCAwKSkgPCAwKQorI2VuZGlmIC8qIEVYQ0VM QU4gKi8KKyAgICAgICAgICAgIHsKKyNpZmRlZiBFWENFTEFOCisgICAgICAgICAgICAgICAgZXhw ZXJyb3IoIlRDUCBzb2NrZXQgZXJyb3IiKTsKKyNlbHNlCisjaWZkZWYgVk1TCisgICAgICAgICAg ICAgICAgZnByaW50ZihzdGRvdXQsICJcclxuIik7IC8qIGNvbXBsZXRlIGFueSBwcmV2aW91cyBz dGRvdXQgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKyNpZmRlZiBUR1ZPUldJTgorI2lmZGVmIE9MRF9U V0cKKyAgICAgICAgICAgICAgICBlcnJubyA9IHNvY2tldF9lcnJubzsKKyNlbmRpZiAvKiBPTERf VFdHICovCisgICAgICAgICAgICAgICAgc29ja2V0X3BlcnJvcigiVENQIHNvY2tldCBlcnJvciIp OworICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsIm5ldG9wZW4gc29ja2V0IGVycm9yIiwiIixz b2NrZXRfZXJybm8pOworI2Vsc2UKKyAgICAgICAgICAgICAgICBwZXJyb3IoIlRDUCBzb2NrZXQg ZXJyb3IiKTsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJuZXRvcGVuIHNvY2tldCBlcnJv ciIsIiIsZXJybm8pOworI2VuZGlmIC8qIFRHVk9SV0lOICovCisjZW5kaWYgLyogRVhDRUxBTiAq LworICAgICAgICAgICAgICAgIHJldHVybiAoLTEpOworICAgICAgICAgICAgfQorICAgICAgICBl cnJubyA9IDA7CisKKyNpZmRlZiBSTE9HQ09ERQorICAgICAgIC8qIE5vdCBwYXJ0IG9mIHRoZSBS TE9HSU4gUkZDLCBidXQgdGhlIEJTRCBpbXBsZW1lbnRhdGlvbiAgICAgKi8KKyAgICAgICAvKiBy ZXF1aXJlcyB0aGF0IHRoZSBjbGllbnQgcG9ydCBiZSBhIHByaXZpbGlnZWQgcG9ydCAoPDEwMjQp ICovCisgICAgICAgLyogb24gYSBVbml4IHN5c3RlbSB0aGlzIHdvdWxkIHJlcXVpcmUgU3VwZXJV c2VyIHBlcm1pc3Npb25zICAqLworICAgICAgIC8qIHRoZXJlYnkgc2F5aW5nIHRoYXQgdGhlIHJv b3Qgb2YgdGhlIFVuaXggc3lzdGVtIGhhcyBnaXZlbiAgKi8KKyAgICAgICAvKiBwZXJtaXNzaW9u IGZvciB0aGlzIGNvbm5lY3Rpb24gdG8gYmUgY3JlYXRlZCAgICAgICAgICAgICAgICovCisgICAg ICAgaWYgKHNlcnZpY2UtPnNfcG9ydCA9PSBodG9ucygodW5zaWduZWQgc2hvcnQpUkxPR0lOX1BP UlQpKSB7CisgICAgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBscG9ydCA9IDEwMjQ7ICAv KiBtYXggcmVzZXJ2ZWQgcG9ydCAqLworI2lmZGVmIE9TMgorICAgICAgICAgICBpbnQgc19lcnJu bzsKKyNlbmRpZiAvKiBPUzIgKi8KKworICAgICAgICAgICBscG9ydC0tOyAgICAgICAgICAgICAg ICAgICAgIC8qIE1ha2Ugc3VyZSB3ZSBkbyBub3QgcmV1c2UgYSBwb3J0ICovCisgICAgICAgICAg IGlmIChscG9ydCA9PSA1MTIpCisgICAgICAgICAgICAgbHBvcnQgPSAxMDIzOworCisgICAgICAg ICAgIHNpbi5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyAgICAgICAgICAgaWYgKHRjcF9hZGRyZXNz KSB7CisjaWZkZWYgSU5BRERSWAorICAgICAgICAgICAgICAgaW5hZGRyeCA9IGluZXRfYWRkcih0 Y3BfYWRkcmVzcyk7CisgICAgICAgICAgICAgICBzaW4uc2luX2FkZHIuc19hZGRyID0gKih1bnNp Z25lZCBsb25nICopJmluYWRkcng7CisjZWxzZQorICAgICAgICAgICAgICAgc2luLnNpbl9hZGRy LnNfYWRkciA9IGluZXRfYWRkcih0Y3BfYWRkcmVzcyk7CisjZW5kaWYgLyogSU5BRERSWCAqLwor ICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICBzaW4uc2luX2FkZHIuc19hZGRyID0gSU5B RERSX0FOWTsKKyAgICAgICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgICAgICAgIHNpbi5zaW5f cG9ydCA9IGh0b25zKGxwb3J0KTsKKyAgICAgICAgICAgICAgIGlmIChiaW5kKHR0eWZkLCAoc3Ry dWN0IHNvY2thZGRyICopJnNpbiwgc2l6ZW9mKHNpbikpID49IDApCisgICAgICAgICAgICAgICAg IGJyZWFrOworI2lmZGVmIE9TMgorICAgICAgICAgICAgICAgc19lcnJubyA9IHNvY2tldF9lcnJu bzsKKyAgICAgICAgICAgICAgIGlmIChzX2Vycm5vICYmIC8qIE9TMiBiaW5kIGZhaWxzIHdpdGgg MCwgaWYgYWxyZWFkeSBpbiB1c2UgKi8KKyNpZmRlZiBOVAorICAgICAgICAgICAgICAgICAgIHNf ZXJybm8gIT0gV1NBRUFERFJJTlVTRQorI2Vsc2UKKyAgICAgICAgICAgICAgICAgICBzX2Vycm5v ICE9IFNPQ0VBRERSSU5VU0UgJiYKKyAgICAgICAgICAgICAgICAgICBzX2Vycm5vICE9IChTT0NF QUREUklOVVNFIC0gU09DQkFTRUVSUikKKyNlbmRpZiAvKiBOVCAqLworICAgICAgICAgICAgICAg ICAgICkKKyNlbHNlIC8qIE9TMiAqLworI2lmZGVmIFRHVk9SV0lOCisgICAgICAgICAgICAgICAg IGlmIChzb2NrZXRfZXJybm8gIT0gRUFERFJJTlVTRSkKKyNlbHNlCisgICAgICAgICAgICAgICAg IGlmIChlcnJubyAhPSBFQUREUklOVVNFKQorI2VuZGlmIC8qIFRHVk9SV0lOICovCisjZW5kaWYg LyogT1MyICovCisgICAgICAgICAgICAgICAgICAgeworI2lmZGVmIENPTU1FTlQKKyAgICAgICAg ICAgICAgICAgICAgICAgcHJpbnRmKCJcbkJpbmQgZmFpbGVkIHdpdGggZXJybm8gJWQgIGZvciBw b3J0ICVkLlxuIiwKKyNpZmRlZiBPUzIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNf ZXJybm8KKyNlbHNlCisjaWZkZWYgVEdWT1JXSU4KKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHNvY2tldF9lcnJubworI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVy cm5vCisjZW5kaWYgLyogVEdWT1JXSU4gKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICwgbHBvcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICk7CisjaWZkZWYgT1MyCisgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsInJsb2dp biBiaW5kIGZhaWxlZCIsIiIsc19lcnJubyk7CisjZWxzZQorI2lmZGVmIFRHVk9SV0lOCisgICAg ICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsInJsb2dpbiBiaW5kIGZhaWxlZCIsIiIsc29j a2V0X2Vycm5vKTsKKyNpZmRlZiBPTERfVFdHCisgICAgICAgICAgICAgICAgICAgICAgIGVycm5v ID0gc29ja2V0X2Vycm5vOworI2VuZGlmIC8qIE9MRF9UV0cgKi8KKyAgICAgICAgICAgICAgICAg ICAgICAgc29ja2V0X3BlcnJvcigicmxvZ2luIGJpbmQiKTsKKyNlbHNlCisgICAgICAgICAgICAg ICAgICAgICAgIGRlYnVnKEYxMDEsInJsb2dpbiBiaW5kIGZhaWxlZCIsIiIsZXJybm8pOworICAg ICAgICAgICAgICAgICAgICAgICBwZXJyb3IoInJsb2dpbiBiaW5kIik7CisjZW5kaWYgLyogVEdW T1JXSU4gKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyNlbHNlICAvKiBDT01NRU5UICovCisjaWZkZWYg T1MyCisgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsInJsb2dpbiBiaW5kIHNfZXJy bm8iLCIiLHNfZXJybm8pOworICAgICAgICAgICAgICAgICAgICAgICBwZXJyb3IoInJsb2dpbiBi aW5kIik7CisjZWxzZQorI2lmZGVmIFZNUworICAgICAgICAgICAgICAgICAgICAgICBwcmludGYo IlxyXG4iKTsgIC8qIGNvbXBsZXRlIGFueSBwcmV2aW91cyBtZXNzYWdlICovCisjZW5kaWYgLyog Vk1TICovCisjaWZkZWYgVEdWT1JXSU4KKyAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEw MSwicmxvZ2luIGJpbmQgc29ja2V0X2Vycm5vIiwiIixzb2NrZXRfZXJybm8pOworI2lmZGVmIE9M RF9UV0cKKyAgICAgICAgICAgICAgICAgICAgICAgZXJybm8gPSBzb2NrZXRfZXJybm87CisjZW5k aWYgLyogT0xEX1RXRyAqLworICAgICAgICAgICAgICAgICAgICAgICBzb2NrZXRfcGVycm9yKCJy bG9naW4gYmluZCIpOworI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEwMSwi cmxvZ2luIGJpbmQgZXJybm8iLCIiLGVycm5vKTsKKyAgICAgICAgICAgICAgICAgICAgICAgcGVy cm9yKCJybG9naW4gYmluZCIpOworI2VuZGlmIC8qIFRHVk9SV0lOICovCisjZW5kaWYgLyogT1My ICovCisgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsInJsb2dpbiBsb2NhbCBwb3J0 IiwiIixscG9ydCk7CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAgICAgICAgICAgICAgICAg ICBuZXRjbG9zKCk7CisgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICBscG9ydC0tOworICAgICAgICAgICAgICAgaWYg KGxwb3J0ID09IDUxMiAvKiBsb3dlc3QgcmVzZXJ2ZWQgcG9ydCB0byB1c2UgKi8gKSB7CisgICAg ICAgICAgICAgICAgICAgcHJpbnRmKCJcbk5vIHJlc2VydmVkIHBvcnRzIGF2YWlsYWJsZS5cbiIp OworICAgICAgICAgICAgICAgICAgIG5ldGNsb3MoKTsKKyAgICAgICAgICAgICAgICAgICByZXR1 cm4gLTE7CisgICAgICAgICAgICAgICB9CisgICAgICAgICAgIH0KKyAgICAgICAgICAgZGVidWco RjEwMSwicmxvZ2luIGxwb3J0IiwiIixscG9ydCk7CisgICAgICAgICAgIHR0bnByb3RvID0gTlBf UkxPR0lOOworICAgICAgIH0gZWxzZQorI2VuZGlmIC8qIFJMT0dDT0RFICAqLworCisgICAgICAg LyogSWYgYSBzcGVjaWZpYyBUQ1AgYWRkcmVzcyBvbiB0aGUgbG9jYWwgaG9zdCBpcyBkZXNpcmVk IHdlICovCisgICAgICAgLyogbXVzdCBiaW5kIGl0IHRvIHRoZSBzb2NrZXQuICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICovCisjaWZuZGVmIGRhdGFnZW5lcmFsCisgICAgICAgICBpZiAo dGNwX2FkZHJlc3MpIHsKKyAgICAgICAgICAgICBpbnQgc19lcnJubzsKKworICAgICAgICAgICAg IGRlYnVnKEYxMTAsIm5ldG9wZW4gYmluZGluZyBzb2NrZXQgdG8iLHRjcF9hZGRyZXNzLDApOwor ICAgICAgICAgICAgIGJ6ZXJvKChjaGFyICopJnNpbixzaXplb2Yoc2luKSk7CisgICAgICAgICAg ICAgc2luLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworI2lmZGVmIElOQUREUlgKKyAgICAgICAgICAg ICBpbmFkZHJ4ID0gaW5ldF9hZGRyKHRjcF9hZGRyZXNzKTsKKyAgICAgICAgICAgICBzaW4uc2lu X2FkZHIuc19hZGRyID0gKih1bnNpZ25lZCBsb25nICopJmluYWRkcng7CisjZWxzZQorICAgICAg ICAgICAgIHNpbi5zaW5fYWRkci5zX2FkZHIgPSBpbmV0X2FkZHIodGNwX2FkZHJlc3MpOworI2Vu ZGlmIC8qIElOQUREUlggKi8KKyAgICAgICAgICAgICBzaW4uc2luX3BvcnQgPSAwOworICAgICAg ICAgICAgIGlmIChiaW5kKHR0eWZkLCAoc3RydWN0IHNvY2thZGRyICopJnNpbiwgc2l6ZW9mKHNp bikpIDwgMCkgeworICAgICAgICAgICAgICAgICBzX2Vycm5vID0gc29ja2V0X2Vycm5vOyAvKiBT YXZlIGVycm9yIGNvZGUgKi8KKyNpZmRlZiBUQ1BJUExJQgorICAgICAgICAgICAgICAgICBzb2Nr ZXRfY2xvc2UodHR5ZmQpOworI2Vsc2UgLyogVENQSVBMSUIgKi8KKyAgICAgICAgICAgICAgICAg Y2xvc2UodHR5ZmQpOworI2VuZGlmIC8qIFRDUElQTElCICovCisgICAgICAgICAgICAgICAgIHR0 eWZkID0gLTE7CisgICAgICAgICAgICAgICAgIHdhc2Nsb3NlZCA9IDE7CisgICAgICAgICAgICAg ICAgIGVycm5vID0gc19lcnJubzsgICAgICAgLyogYW5kIHJlcG9ydCB0aGlzIGVycm9yICovCisg ICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsIm5ldG9wZW4gYmluZCBlcnJubyIsIiIsZXJybm8p OworICAgICAgICAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICAgICAgIH0KKyAgICAgICAg IH0KKyNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLworCisvKiBOb3cgY29ubmVjdCB0byB0aGUgc29j a2V0IG9uIHRoZSBvdGhlciBlbmQuICovCisKKyNpZmRlZiBFWENFTEFOCisgICAgICAgIGlmIChj b25uZWN0KHR0eWZkLCAmcl9hZGRyKSA8IDApCisjZWxzZQorI2lmZGVmIE5UCisgICAgICAgICAg V1NBU2FmZVRvQ2FuY2VsID0gMTsKKyNlbmRpZiAvKiBOVCAqLworICAgICAgICBpZiAoY29ubmVj dCh0dHlmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZyX2FkZHIsIHNpemVvZihyX2FkZHIpKSA8IDAp CisjZW5kaWYgLyogRVhDRUxBTiAqLworICAgICAgICAgIHsKKyNpZmRlZiBOVAorICAgICAgICAg ICAgICBXU0FTYWZlVG9DYW5jZWwgPSAwOworI2VuZGlmIC8qIE5UICovCisjaWZkZWYgT1MyCisg ICAgICAgICAgICAgIGkgPSBzb2NrZXRfZXJybm87CisjZWxzZSAvKiBPUzIgKi8KKyNpZmRlZiBU R1ZPUldJTgorICAgICAgICAgICAgICBpID0gc29ja2V0X2Vycm5vOworI2Vsc2UKKyAgICAgICAg ICAgICAgaSA9IGVycm5vOyAgICAgICAgICAgICAgICAvKiBTYXZlIGVycm9yIGNvZGUgKi8KKyNl bmRpZiAvKiBUR1ZPUldJTiAqLworI2VuZGlmIC8qIE9TMiAqLworI2lmZGVmIFJMT0dDT0RFCisg ICAgICAgICAgICAgIGlmICgKKyNpZmRlZiBPUzIKKyAgICAgICAgICAgICAgICAgaSAmJiAvKiBP UzIgYmluZCBmYWlscyB3aXRoIDAsIGlmIGFscmVhZHkgaW4gdXNlICovCisjaWZkZWYgTlQKKyAg ICAgICAgICAgICAgICAgaSA9PSBXU0FFQUREUklOVVNFCisjZWxzZQorICAgICAgICAgICAgICAg ICAoaSA9PSBTT0NFQUREUklOVVNFIHx8CisgICAgICAgICAgICAgICAgIGkgPT0gKFNPQ0VBRERS SU5VU0UgLSBTT0NCQVNFRVJSKSkKKyNlbmRpZiAvKiBOVCAqLworI2Vsc2UgLyogT1MyICovCisj aWZkZWYgVEdWT1JXSU4KKyAgICAgICAgICAgICAgICAgIHNvY2tldF9lcnJubyA9PSBFQUREUklO VVNFCisjZWxzZQorICAgICAgICAgICAgICAgICAgZXJybm8gPT0gRUFERFJJTlVTRQorI2VuZGlm IC8qIFRHVk9SV0lOICovCisjZW5kaWYgLyogT1MyICovCisgICAgICAgICAgICAgICAgICAmJiB0 dG5wcm90byA9PSBOUF9STE9HSU4pIHsKKyNpZmRlZiBUQ1BJUExJQgorICAgICAgICAgICAgICAg ICAgIHNvY2tldF9jbG9zZSh0dHlmZCk7IC8qIENsb3NlIGl0LiAqLworI2Vsc2UKKyAgICAgICAg ICAgICAgICAgICBjbG9zZSh0dHlmZCk7CisjZW5kaWYgLyogVENQSVBMSUIgKi8KKyAgICAgICAg ICAgICAgICAgICBjb250aW51ZTsgICAgICAgICAgICAvKiBUcnkgYSBkaWZmZXJlbnQgbHBvcnQg Ki8KKyAgICAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBSTE9HQ09ERSAqLworI2lmZGVmIEhBRERS TElTVAorI2lmZGVmIGhfYWRkcgorICAgICAgICAgICAgICBpZiAoaG9zdCAmJiBob3N0LT5oX2Fk ZHJfbGlzdCAmJiBob3N0LT5oX2FkZHJfbGlzdFsxXSkgeworICAgICAgICAgICAgICAgICAgcGVy cm9yKCIiKTsKKyAgICAgICAgICAgICAgICAgIGhvc3QtPmhfYWRkcl9saXN0Kys7CisgICAgICAg ICAgICAgICAgICBiY29weShob3N0LT5oX2FkZHJfbGlzdFswXSwKKyAgICAgICAgICAgICAgICAg ICAgICAgIChjYWRkcl90KSZyX2FkZHIuc2luX2FkZHIsCisgICAgICAgICAgICAgICAgICAgICAg ICBob3N0LT5oX2xlbmd0aCk7CisKKyAgICAgICAgICAgICAgICAgIGNrc3RybmNweShpcGFkZHIs KGNoYXIgKilpbmV0X250b2Eocl9hZGRyLnNpbl9hZGRyKSwyMCk7CisgICAgICAgICAgICAgICAg ICBkZWJ1ZyhGMTEwLCJuZXRvcGVuIGhfYWRkcl9saXN0IixpcGFkZHIsMCk7CisgICAgICAgICAg ICAgICAgICBpZiAoIXF1aWV0ICYmICppcGFkZHIpIHsKKyAgICAgICAgICAgICAgICAgICAgICBw cmludGYoIiBUcnlpbmcgJXMuLi4gIiwgaXBhZGRyKTsKKyAgICAgICAgICAgICAgICAgICAgICBm Zmx1c2goc3Rkb3V0KTsKKyAgICAgICAgICAgICAgICAgIH0KKyNpZmRlZiBUQ1BJUExJQgorICAg ICAgICAgICAgICAgICAgc29ja2V0X2Nsb3NlKHR0eWZkKTsgLyogQ2xvc2UgaXQuICovCisjZWxz ZQorICAgICAgICAgICAgICAgICAgY2xvc2UodHR5ZmQpOworI2VuZGlmIC8qIFRDUElQTElCICov CisgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgfQorI2VuZGlmIC8q IGhfYWRkciAqLworI2VuZGlmICAvKiBIQUREUkxJU1QgKi8KKyAgICAgICAgICAgICAgbmV0Y2xv cygpOworICAgICAgICAgICAgICB0dHlmZCA9IC0xOworICAgICAgICAgICAgICB3YXNjbG9zZWQg PSAxOworICAgICAgICAgICAgICB0dG5wcm90byA9IE5QX05PTkU7CisgICAgICAgICAgICAgIGVy cm5vID0gaTsgICAgICAgICAgICAgICAgLyogQW5kIHJlcG9ydCB0aGlzIGVycm9yICovCisjaWZk ZWYgRVhDRUxBTgorICAgICAgICAgICAgICBpZiAoZXJybm8pIGV4cGVycm9yKCJuZXRvcGVuIGNv bm5lY3QiKTsKKyNlbHNlCisjaWZkZWYgVEdWT1JXSU4KKyAgICAgICAgICAgICAgZGVidWcoRjEw MSwibmV0b3BlbiBjb25uZWN0IGVycm9yIiwiIixzb2NrZXRfZXJybm8pOworICAgICAgICAgICAg ICAvKiBpZiAoZXJybm8pIHNvY2tldF9wZXJyb3IoIm5ldG9wZW4gY29ubmVjdCIpOyAqLworI2lm ZGVmIE9MRF9UV0cKKyAgICAgICAgICAgICAgZXJybm8gPSBzb2NrZXRfZXJybm87CisjZW5kaWYg LyogT0xEX1RXRyAqLworICAgICAgICAgICAgICBpZiAoIXF1aWV0KQorICAgICAgICAgICAgICAg IHNvY2tldF9wZXJyb3IoIm5ldG9wZW4gY29ubmVjdCIpOworI2Vsc2UgLyogVEdWT1JXSU4gKi8K KyAgICAgICAgICAgICAgZGVidWcoRjEwMSwibmV0b3BlbiBjb25uZWN0IGVycm5vIiwiIixlcnJu byk7CisjaWZkZWYgVk1TCisgICAgICAgICAgICAgIGlmICghcXVpZXQpCisgICAgICAgICAgICAg ICAgcGVycm9yKCJcclxuRmFpbGVkIik7CisjZWxzZQorICAgICAgICAgICAgICBpZiAoIXF1aWV0 KQorICAgICAgICAgICAgICAgIHBlcnJvcigiRmFpbGVkIik7CisjZW5kaWYgLyogVk1TICovCisj aWZkZWYgREVDX1RDUElQCisgICAgICAgICAgICAgIGlmICghcXVpZXQpCisgICAgICAgICAgICAg ICAgcGVycm9yKCJuZXRvcGVuIGNvbm5lY3QiKTsKKyNlbmRpZiAvKiBERUNfVENQSVAgKi8KKyNp ZmRlZiBDTVVfVENQSVAKKyAgICAgICAgICAgICAgaWYgKCFxdWlldCkKKyAgICAgICAgICAgICAg ICBwZXJyb3IoIm5ldG9wZW4gY29ubmVjdCIpOworI2VuZGlmIC8qIENNVV9UQ1BJUCAqLworI2Vu ZGlmIC8qIFRHVk9SV0lOICovCisjZW5kaWYgLyogRVhDRUxBTiAqLworICAgICAgICAgICAgICBy ZXR1cm4oLTEpOworICAgICAgICAgIH0KKyNpZmRlZiBOVAorICAgICAgICBXU0FTYWZlVG9DYW5j ZWwgPSAwOworI2VuZGlmIC8qIE5UICovCisgICAgICAgIGlzY29ubmVjdCA9IDE7CisgICAgfSB3 aGlsZSAoIWlzY29ubmVjdCk7CisKKyNpZmRlZiBOT05fQkxPQ0tfSU8KKyAgICBvbiA9IDE7Cisg ICAgeCA9IHNvY2tldF9pb2N0bCh0dHlmZCxGSU9OQklPLCZvbik7CisgICAgZGVidWcoRjEwMSwi bmV0b3BlbiBGSU9OQklPIiwiIix4KTsKKyNlbmRpZiAvKiBOT05fQkxPQ0tfSU8gKi8KKworI2lm ZGVmIE5UX1RDUF9PVkVSTEFQUEVECisgICAgT3ZlcmxhcHBlZFdyaXRlSW5pdCgpOworICAgIE92 ZXJsYXBwZWRSZWFkSW5pdCgpOworI2VuZGlmIC8qIE5UX1RDUF9PVkVSTEFQUEVEICovCisKKyAg ICB0dG5ldCA9IG5ldHQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiBUQ1AvSVAgKHNvY2tldHMp IG5ldHdvcmsgKi8KKworI2lmbmRlZiBOT0hUVFAKKyAgICAvKiBXZSBoYXZlIHN1Y2NlZWRlZCBp biBjb25uZWN0aW5nIHRvIHRoZSBIVFRQIFBST1hZLiAgU28gbm93IHdlICAgKi8KKyAgICAvKiBu ZWVkIHRvIGF0dGVtcHQgdG8gY29ubmVjdCB0aHJvdWdoIHRoZSBwcm94eSB0byB0aGUgYWN0dWFs IGhvc3QgKi8KKyAgICAvKiBJZiB0aGF0IGlzIHN1Y2Nlc3NmdWwsIHdlIGhhdmUgdG8gcHJldGVu ZCB0aGF0IHdlIG1hZGUgYSBkaXJlY3QgKi8KKyAgICAvKiBjb25uZWN0aW9uIHRvIHRoZSBhY3R1 YWwgaG9zdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICAgIGlmICgg dGNwX2h0dHBfcHJveHkgKSB7CisjaWZkZWYgT1MyCisgICAgICAgIGNoYXIgKiBhZ2VudCA9ICJL ZXJtaXQgOTUiOyAgICAgICAgICAgICAvKiBEZWZhdWx0IHVzZXIgYWdlbnQgKi8KKyNlbHNlCisg ICAgICAgIGNoYXIgKiBhZ2VudCA9ICJDLUtlcm1pdCI7CisjZW5kaWYgLyogT1MyICovCisKKyAg ICAgICAgaWYgKGh0dHBfY29ubmVjdCh0dHlmZCwKKwkJCSB0Y3BfaHR0cF9wcm94eV9hZ2VudCA/ IHRjcF9odHRwX3Byb3h5X2FnZW50IDogYWdlbnQsCisJCQkgTlVMTCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICB0Y3BfaHR0cF9wcm94eV91c2VyLAorICAgICAgICAgICAgICAgICAgICAgICAg IHRjcF9odHRwX3Byb3h5X3B3ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAg ICAgICAgICAgICAgICAgICAgIHByb3h5Y29weQorICAgICAgICAgICAgICAgICAgICAgICAgICkg PCAwKSB7CisgICAgICAgICAgICBuZXRjbG9zKCk7CisgICAgICAgICAgICByZXR1cm4oLTEpOwor ICAgICAgICB9CisKKyAgICAgICAgY2tzdHJuY3B5KG5hbWVjb3B5LHByb3h5Y29weSxOQU1FQ1BZ TCk7CisgICAgICAgIHAgPSBuYW1lY29weTsgICAgICAgICAgICAgICAgICAgICAgIC8qIFdhcyBh IHNlcnZpY2UgcmVxdWVzdGVkPyAqLworICAgICAgICB3aGlsZSAoKnAgIT0gJ1wwJyAmJiAqcCAh PSAnOicpIHArKzsgLyogTG9vayBmb3IgY29sb24gKi8KKyAgICAgICAgKnAgPSAnXDAnOworICAg IH0KKyNlbmRpZiAvKiBOT0hUVFAgKi8KKworICAgIC8qIEplZmYgLSBEb2VzIHRoaXMgbmV4dCBi bG9jayBvZiBjb2RlIHRoYXQgc2V0J3MgdGhlIHByb3RvY29sICovCisgICAgLyogbmVlZCB0byBi ZSBoZXJlIGFueW1vcmU/ICA1LzEwLzIwMDAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwor ICAgIC8qIFRoZXJlIGFyZSBjZXJ0YWluIG1hZ2ljIHBvcnQgbnVtYmVycyB0aGF0IHdoZW4gdXNl ZCByZXF1aXJlICovCisgICAgLyogdGhlIHVzZSBvZiBzcGVjaWZpYyBwcm90b2NvbHMuICBDaGVj ayB0aGlzIG5vdyBiZWZvcmUgd2UgICAgKi8KKyAgICAvKiBzZXQgdGhlIFNPX09PQklOTElORSBz dGF0ZSBvciB3ZSBtaWdodCBnZXQgaXQgd3JvbmcuICAgICAgICAqLworICAgIHggPSBudG9ocygo dW5zaWduZWQgc2hvcnQpc2VydmljZS0+c19wb3J0KTsKKyAgICBzdmNudW0gPSB4OworICAgIC8q IFNlZSBpZiB0aGUgc2VydmljZSBpcyBURUxORVQuICovCisgICAgaWYgKHggPT0gVEVMTkVUX1BP UlQpIHsKKyAgICAgICAgLyogWWVzLCBzbyBpZiByYXcgcG9ydCBub3QgcmVxdWVzdGVkICovCisj aWZkZWYgQ09NTUVOVAorCS8qIEplZmYgMjAwNS8xMi8zMCAqLworICAgICAgICBpZiAodHRucHJv dG8gIT0gTlBfVENQUkFXICYmIHR0bnByb3RvICE9IE5QX1NTTF9SQVcgJiYgCisJICAgIHR0bnBy b3RvICE9IE5QX1RMU19SQVcgJiYgdHRucHJvdG8gIT0gTlBfTk9ORSkKKyNlbHNlCisJLyogZmRj IDIwMDUvMTIvMDQgKi8KKyAgICAgICAgaWYgKHR0bnByb3RvICE9IE5QX1RDUFJBVyAmJiB0dG5w cm90byAhPSBOUF9OT05FKQorI2VuZGlmCS8qIENPTU1FTlQgKi8KKyAgICAgICAgICB0dG5wcm90 byA9IE5QX1RFTE5FVDsgICAgICAgICAvKiBTZWxlY3QgVEVMTkVUIHByb3RvY29sLiAqLworICAg IH0KKyNpZmRlZiBSTE9HQ09ERQorICAgIGVsc2UgaWYgKHggPT0gUkxPR0lOX1BPUlQpIHsKKyAg ICAgICAgdHRucHJvdG8gPSBOUF9STE9HSU47CisgICAgfQorI2lmZGVmIENLX0tFUkJFUk9TCisg ICAgLyogVGhlcmUgaXMgbm8gZ29vZCB3YXkgdG8gZG8gdGhpcy4gIElmIHRoZSB1c2VyIGRpZG4n dCB0ZWxsICAgICovCisgICAgLyogd2hpY2ggb25lIHRvIHVzZSB1cCBmcm9udC4gIFdlIG1heSBn dWVzcyB3cm9uZyBpZiB0aGUgdXNlciAgICovCisgICAgLyogaGFzIGJvdGggS2VyYmVyb3MgdmVy c2lvbnMgaW5zdGFsbGVkIGFuZCB2YWxpZCBUR1RzIGZvciBlYWNoICovCisgICAgZWxzZSBpZiAo eCA9PSBLTE9HSU5fUE9SVCAmJgorICAgICAgICAgICAgIHR0bnByb3RvICE9IE5QX0s0TE9HSU4g JiYKKyAgICAgICAgICAgICB0dG5wcm90byAhPSBOUF9LNUxPR0lOKSB7CisgICAgICAgIGlmIChj a19rcmI1X2lzX2luc3RhbGxlZCgpICYmCisgICAgICAgICAgICBja19rcmI1X2lzX3RndF92YWxp ZCgpKQorICAgICAgICAgIHR0bnByb3RvID0gTlBfSzVMT0dJTjsKKyAgICAgICAgZWxzZSBpZiAo Y2tfa3JiNF9pc19pbnN0YWxsZWQoKSAmJiBja19rcmI0X2lzX3RndF92YWxpZCgpKQorICAgICAg ICAgIHR0bnByb3RvID0gTlBfSzRMT0dJTjsKKyAgICAgICAgZWxzZQorICAgICAgICAgIHR0bnBy b3RvID0gTlBfSzRMT0dJTjsKKyAgICB9IGVsc2UgaWYgKHggPT0gRUtMT0dJTl9QT1JUICYmCisg ICAgICAgICAgICAgICB0dG5wcm90byAhPSBOUF9FSzRMT0dJTiAmJgorICAgICAgICAgICAgICAg dHRucHJvdG8gIT0gTlBfRUs1TE9HSU4pIHsKKyAgICAgICAgaWYgKGNrX2tyYjVfaXNfaW5zdGFs bGVkKCkgJiYgY2tfa3JiNV9pc190Z3RfdmFsaWQoKSkKKyAgICAgICAgICB0dG5wcm90byA9IE5Q X0VLNUxPR0lOOworICAgICAgICBlbHNlIGlmIChja19rcmI0X2lzX2luc3RhbGxlZCgpICYmIGNr X2tyYjRfaXNfdGd0X3ZhbGlkKCkpCisgICAgICAgICAgdHRucHJvdG8gPSBOUF9FSzRMT0dJTjsK KyAgICAgICAgZWxzZQorICAgICAgICAgIHR0bnByb3RvID0gTlBfRUs0TE9HSU47CisgICAgfQor I2VuZGlmIC8qIENLX0tFUkJFUk9TICovCisjZW5kaWYgLyogUkxPR0NPREUgKi8KKyNpZmRlZiBJ S1NfT1BUSU9OCisgICAgZWxzZSBpZiAoeCA9PSBLRVJNSVRfUE9SVCkgeyAgICAgICAgLyogSUtT IHVzZXMgVGVsbmV0IHByb3RvY29sICovCisgICAgICAgIGlmICh0dG5wcm90byA9PSBOUF9OT05F KQorICAgICAgICAgIHR0bnByb3RvID0gTlBfS0VSTUlUOworICAgIH0KKyNlbmRpZiAvKiBJS1Nf T1BUSU9OICovCisKKyNpZmRlZiBTT19PT0JJTkxJTkUKKy8qCisgIFRoZSBzeW1ib2wgU09fT09C SU5MSU5FIGlzIG5vdCBrbm93biB0byBVbHRyaXggMi4wLgorICBJdCBtZWFucyAibGVhdmUgb3V0 IG9mIGJhbmQgZGF0YSBpbmxpbmUiLiAgVGhlIG5vcm1hbCB2YWx1ZSBpcyAweDAxMDAsCisgIGJ1 dCBkb24ndCB0cnkgdGhpcyBvbiBzeXN0ZW1zIHdoZXJlIHRoZSBzeW1ib2wgaXMgdW5kZWZpbmVk LgorKi8KKy8qCisgIE5vdGUgZnJvbSBKZWZmIEFsdG1hbjogMTIvMTMvOTUKKyAgSW4gaW1wbGVt ZW50aW5nIHJsb2dpbiBwcm90b2NvbCBJIGhhdmUgY29tZSB0byB0aGUgY29uY2x1c2lvbiB0aGF0 IGl0IGlzCisgIGEgcmVhbGx5IGJhZCBpZGVhIHRvIHJlYWQgb3V0LW9mLWJhbmQgZGF0YSBpbmxp bmUuCisgIEF0IGxlYXN0IFdpbmRvd3MgYW5kIE9TLzIgZG9lcyBub3QgaGFuZGxlIHRoaXMgd2Vs bC4KKyAgQW5kIGlmIHlvdSBuZWVkIHRvIGtub3cgdGhhdCBkYXRhIGlzIG91dC1vZi1iYW5kLCB0 aGVuIGl0IGJlY29tZXMKKyAgYWJzb2x1dGVseSBwb2ludGxlc3MuCisKKyAgVGhlcmVmb3JlLCBh dCBsZWFzdCBvbiBPUzIgYW5kIFdpbmRvd3MgKE5UKSBJIGhhdmUgY2hhbmdlZCB0aGUgdmFsdWUg b2YKKyAgb24gdG8gMCwgc28gdGhhdCBvdXQtb2YtYmFuZCBkYXRhIHN0YXlzIG91dC1vZi1iYW5k LgorCisgIDEyLzE4Lzk1CisgIEFjdHVhbGx5LCBPT0IgZGF0YSBzaG91bGQgYmUgcmVhZCBpbmxp bmUgd2hlbiBwb3NzaWJsZS4gIEVzcGVjaWFsbHkgd2l0aAorICBwcm90b2NvbHMgdGhhdCBkb24n dCBjYXJlIGFib3V0IHRoZSBVcmdlbnQgZmxhZy4gIFRoaXMgaXMgdHJ1ZSB3aXRoIFRlbG5ldC4K KyAgV2l0aCBSbG9naW4sIHlvdSBuZWVkIHRvIGJlIGFibGUgdG8gY2F0Y2ggT09CIGRhdGEuICBI b3dldmVyLCB0aGUgYmVzdAorICB3YXkgdG8gZG8gdGhpcyBpcyB0byBzZXQgYSBzaWduYWwgaGFu ZGxlciBvbiBTSUdVUkcuICBUaGlzIGlzbid0IHBvc3NpYmxlCisgIG9uIE9TLzIgYW5kIFdpbmRv d3MuICBCdXQgaXQgaXMgaW4gVU5JWC4gIFdlIHdpbGwgYWxzbyBuZWVkIE9PQiBkYXRhIGZvcgor ICBGVFAgc28gYmV0dGVyIGNyZWF0ZSBhIGdlbmVyYWwgbWVjaGFuaXNtLgorCisgIFRoZSByZWFz b24gZm9yIG1ha2luZyBPT0IgZGF0YSBiZSBpbmxpbmUgaXMgdGhhdCB0aGUgc3RhbmRhcmQgdHRp bmMvdHRvYworICBjYWxscyBjYW4gYmUgdXNlZCBmb3IgcmVhZGluZyB0aGF0IGRhdGEgb24gVU5J WCBzeXN0ZW1zLiAgSWYgd2UgZGlkbid0CisgIGhhdmUgdGhlIE9PQklOTElORSBvcHRpb24gc2V0 IHRoZW4gd2Ugd291bGQgaGF2ZSB0byB1c2UgcmVjdigsTVNHX09PQikKKyAgdG8gcmVhZCBpdC4K KyovCisjaWZkZWYgUkxPR0NPREUKKyNpZmRlZiBUQ1BJUExJQgorICAgIGlmICh0dG5wcm90byA9 PSBOUF9STE9HSU4KKyNpZmRlZiBDS19LRVJCRVJPUworICAgICAgICB8fCB0dG5wcm90byA9PSBO UF9LNExPR0lOIHx8IHR0bnByb3RvID09IE5QX0VLNExPR0lOCisgICAgICAgIHx8IHR0bnByb3Rv ID09IE5QX0s1TE9HSU4gfHwgdHRucHJvdG8gPT0gTlBfRUs1TE9HSU4KKyNlbmRpZiAvKiBDS19L RVJCRVJPUyAqLworICAgICAgKQorICAgICAgb24gPSAwOworI2Vsc2UgLyogVENQSVBMSUIgKi8K KyAgICBpZiAodHRucHJvdG8gPT0gTlBfUkxPR0lOCisjaWZkZWYgQ0tfS0VSQkVST1MKKyAgICAg ICAgIHx8IHR0bnByb3RvID09IE5QX0s0TE9HSU4gfHwgdHRucHJvdG8gPT0gTlBfRUs0TE9HSU4K KyAgICAgICAgIHx8IHR0bnByb3RvID09IE5QX0s1TE9HSU4gfHwgdHRucHJvdG8gPT0gTlBfRUs1 TE9HSU4KKyNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLworICAgICAgICAgKSB7CisgICAgICAgIGRl YnVnKEYxMDAsIkluc3RhbGxpbmcgcmxvZ29vYmggb24gU0lHVVJHIiwiIiwwKTsKKyAgICAgICAg c2lnbmFsKFNJR1VSRywgcmxvZ29vYmgpOworICAgICAgICBvbiA9IDA7CisgICAgfSBlbHNlIHsK KyAgICAgICAgZGVidWcoRjEwMCwiSWdub3JpbmcgU0lHVVJHIiwiIiwwKTsKKyAgICAgICAgc2ln bmFsKFNJR1VSRywgU0lHX0RGTCk7CisgICAgfQorI2VuZGlmIC8qIFRDUElQTElCICovCisjZW5k aWYgLyogUkxPR0NPREUgKi8KKworI2lmZGVmIGRhdGFnZW5lcmFsCisgICAgc2V0c29ja29wdCh0 dHlmZCwgU09MX1NPQ0tFVCwgU09fT09CSU5MSU5FLChjaGFyICopICZvbiwgc2l6ZW9mIG9uKTsK KyNlbHNlCisjaWZkZWYgQlNENDMKKyAgICBzZXRzb2Nrb3B0KHR0eWZkLCBTT0xfU09DS0VULCBT T19PT0JJTkxJTkUsKGNoYXIgKikgJm9uLCBzaXplb2Ygb24pOworI2Vsc2UKKyNpZmRlZiBPU0Yx CisgICAgc2V0c29ja29wdCh0dHlmZCwgU09MX1NPQ0tFVCwgU09fT09CSU5MSU5FLChjaGFyICop ICZvbiwgc2l6ZW9mIG9uKTsKKyNlbHNlCisjaWZkZWYgUE9TSVgKKyAgICBzZXRzb2Nrb3B0KHR0 eWZkLCBTT0xfU09DS0VULCBTT19PT0JJTkxJTkUsKGNoYXIgKikgJm9uLCBzaXplb2Ygb24pOwor I2Vsc2UKKyNpZmRlZiBNT1RTVjg4UjQKKyAgICBzZXRzb2Nrb3B0KHR0eWZkLCBTT0xfU09DS0VU LCBTT19PT0JJTkxJTkUsKGNoYXIgKikgJm9uLCBzaXplb2Ygb24pOworI2Vsc2UKKyNpZmRlZiBT T0xBUklTCisvKgorICBNYXliZSB0aGlzIGFwcGxpZXMgdG8gYWxsIFNWUjQgdmVyc2lvbnMsIGJ1 dCB0aGUgb3RoZXIgKGVsc2UpIHdheSBoYXMgYmVlbgorICBjb21waWxpbmcgYW5kIHdvcmtpbmcg ZmluZSBvbiBhbGwgdGhlIG90aGVycywgc28gYmVzdCBub3QgdG8gY2hhbmdlIGl0LgorKi8KKyAg ICBzZXRzb2Nrb3B0KHR0eWZkLCBTT0xfU09DS0VULCBTT19PT0JJTkxJTkUsKGNoYXIgKikgJm9u LCBzaXplb2Ygb24pOworI2Vsc2UKKyNpZmRlZiBPU0sKKyAgICBzZXRzb2Nrb3B0KHR0eWZkLCBT T0xfU09DS0VULCBTT19PT0JJTkxJTkUsKGNoYXIgKikgJm9uLCBzaXplb2Ygb24pOworI2Vsc2UK KyNpZmRlZiBPUzIKKyAgICB7CisgICAgICAgIGludCByYzsKKyAgICAgICAgcmMgPSBzZXRzb2Nr b3B0KHR0eWZkLAorICAgICAgICAgICAgICAgICAgICAgICAgU09MX1NPQ0tFVCwKKyAgICAgICAg ICAgICAgICAgICAgICAgIFNPX09PQklOTElORSwKKyAgICAgICAgICAgICAgICAgICAgICAgIChj aGFyICopICZvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiBvbgorICAgICAgICAg ICAgICAgICAgICAgICAgKTsKKyAgICAgICAgZGVidWcoRjExMSwic2V0c29ja29wdCBTT19PT0JJ TkxJTkUiLG9uID8gIm9uIiA6ICJvZmYiICxyYyk7CisgICAgfQorI2Vsc2UKKyNpZmRlZiBWTVMg Lyogb3IsIGF0IGxlYXN0LCBWTVMgd2l0aCBnY2MgKi8KKyAgICBzZXRzb2Nrb3B0KHR0eWZkLCBT T0xfU09DS0VULCBTT19PT0JJTkxJTkUsKGNoYXIgKikgJm9uLCBzaXplb2Ygb24pOworI2Vsc2UK KyNpZmRlZiBDTElYCisgICAgc2V0c29ja29wdCh0dHlmZCwgU09MX1NPQ0tFVCwgU09fT09CSU5M SU5FLChjaGFyICopICZvbiwgc2l6ZW9mIG9uKTsKKyNlbHNlCisgICAgc2V0c29ja29wdCh0dHlm ZCwgU09MX1NPQ0tFVCwgU09fT09CSU5MSU5FLCAmb24sIHNpemVvZiBvbik7CisjZW5kaWYgLyog Q0xJWCAqLworI2VuZGlmIC8qIFZNUyAqLworI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIE9T SyAqLworI2VuZGlmIC8qIFNPTEFSSVMgKi8KKyNlbmRpZiAvKiBNT1RTVjg4UjQgKi8KKyNlbmRp ZiAvKiBQT1NJWCAqLworI2VuZGlmIC8qIEJTRDQzICovCisjZW5kaWYgLyogT1NGMSAqLworI2Vu ZGlmIC8qIGRhdGFnZW5lcmFsICovCisjZW5kaWYgLyogU09fT09CSU5MSU5FICovCisKKyNpZm5k ZWYgTk9UQ1BPUFRTCisjaWZuZGVmIGRhdGFnZW5lcmFsCisjaWZkZWYgU09MX1NPQ0tFVAorI2lm ZGVmIFRDUF9OT0RFTEFZCisgICAgbm9fZGVsYXkodHR5ZmQsdGNwX25vZGVsYXkpOworI2VuZGlm IC8qIFRDUF9OT0RFTEFZICovCisjaWZkZWYgU09fS0VFUEFMSVZFCisgICAga2VlcGFsaXZlKHR0 eWZkLHRjcF9rZWVwYWxpdmUpOworI2VuZGlmIC8qIFNPX0tFRVBBTElWRSAqLworI2lmZGVmIFNP X0xJTkdFUgorICAgIGNrX2xpbmdlcih0dHlmZCx0Y3BfbGluZ2VyLCB0Y3BfbGluZ2VyX3Rtbyk7 CisjZW5kaWYgLyogU09fTElOR0VSICovCisjaWZkZWYgU09fU05EQlVGCisgICAgc2VuZGJ1Zih0 dHlmZCx0Y3Bfc2VuZGJ1Zik7CisjZW5kaWYgLyogU09fU05EQlVGICovCisjaWZkZWYgU09fUkNW QlVGCisgICAgcmVjdmJ1Zih0dHlmZCx0Y3BfcmVjdmJ1Zik7CisjZW5kaWYgLyogU09fUkNWQlVG ICovCisjZW5kaWYgLyogU09MX1NPQ0tFVCAqLworI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCisj ZW5kaWYgLyogTk9UQ1BPUFRTICovCisKKyNpZm5kZWYgZGF0YWdlbmVyYWwKKyAgICAvKiBGaW5k IG91dCBvdXIgb3duIElQIGFkZHJlc3MuICovCisgICAgLyogV2UgbmVlZCB0aGUgbF9hZGRyIHN0 cnVjdHVyZSBmb3IgW0VdS0xPR0lOLiAqLworICAgIGxfc2xlbiA9IHNpemVvZihsX2FkZHIpOwor ICAgIGJ6ZXJvKChjaGFyICopJmxfYWRkciwgbF9zbGVuKTsKKyNpZm5kZWYgRVhDRUxBTgorICAg IGlmICghZ2V0c29ja25hbWUodHR5ZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmbF9hZGRyLCAmbF9z bGVuKSkgeworICAgICAgICBjaGFyICogcyA9IChjaGFyICopaW5ldF9udG9hKGxfYWRkci5zaW5f YWRkcik7CisgICAgICAgIGNrc3RybmNweShteWlwYWRkciwgcywgMjApOworICAgICAgICBkZWJ1 ZyhGMTEwLCJnZXRzb2NrbmFtZSIsbXlpcGFkZHIsMCk7CisgICAgfQorI2VuZGlmIC8qIEVYQ0VM QU4gKi8KKyNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLworCisvKgorICBUaGlzIGlzIHJlYWxseSBv bmx5IG5lZWRlZCBmb3IgS2VyYmVyb3MgSVYgYnV0IGlzIHVzZWZ1bCBpbmZvcm1hdGlvbiBpbiBh bnkKKyAgY2FzZS4gIElmIHdlIGNvbm5lY3QgdG8gYSBuYW1lIHRoYXQgaXMgcmVhbGx5IGEgcG9v bCwgd2UgbmVlZCB0byBnZXQgdGhlCisgIG5hbWUgb2YgdGhlIG1hY2hpbmUgd2UgYXJlIGFjdHVh bGx5IGNvbm5lY3RpbmcgdG8gZm9yIEs0IHRvIGF1dGhlbnRpY2F0ZQorICBwcm9wZXJseS4gIFRo aXMgd2F5IHdlIGFsc28gdXBkYXRlIHRoZSBuYW1lcyBwcm9wZXJseS4KKworICBIb3dldmVyLCBp dCBpcyBhIHNlY3VyaXR5IGhvbGUgd2hlbiB1c2VkIHdpdGggaW5zZWN1cmUgRE5TLgorCisgIE5v dGU6IFRoaXMgZG9lcyBub3Qgd29yayBvbiBXaW5kb3dzIDk1IG9yIFdpbmRvd3MgTlQgMy41eC4g IFRoaXMgaXMgYmVjYXVzZQorICBvZiB0aGUgTWljcm9zb2Z0IGltcGxlbWVudGF0aW9uIG9mIGdl dGhvc3RieWFkZHIoKSBpbiBib3RoIFdpbnNvY2sgMS4xCisgIGFuZCBXaW5zb2NrIDIuMCBvbiB0 aG9zZSBwbGF0Zm9ybXMuICBUaGVpciBhbGdvcml0aG0gaXM6CisKKyAgMS4gQ2hlY2sgdGhlIEhP U1RFTlQgY2FjaGUuCisgIDIuIENoZWNrIHRoZSBIT1NUUyBmaWxlIGF0ICVTeXN0ZW1Sb290JVxT eXN0ZW0zMlxEUklWRVJTXEVUQy4KKyAgMy4gRG8gYSBETlMgcXVlcnkgaWYgdGhlIEROUyBzZXJ2 ZXIgaXMgY29uZmlndXJlZCBmb3IgbmFtZSByZXNvbHV0aW9uLgorICA0LiBEbyBhbiBhZGRpdGlv bmFsIE5ldEJJT1MgcmVtb3RlIGFkYXB0ZXIgc3RhdHVzIHRvIGFuIElQIGFkZHJlc3MgZm9yIGl0 cworICAgICBOZXRCSU9TIG5hbWUgdGFibGUuIFRoaXMgc3RlcCBpcyBzcGVjaWZpYyBvbmx5IHRv IHRoZSBXaW5kb3dzIE5UIHZlcnNpb24KKyAgICAgMy41MSBpbXBsZW1lbnRhdGlvbi4KKworICBU aGUgcHJvYmxlbSBpcyB0aGUgdXNlIG9mIHRoZSBIT1NURU5UIGNhY2hlLiAgSXQgbWVhbnMgdGhh dCBnZXRob3N0YnlhZGRyKCkKKyAgY2FuIG5vdCBiZSB1c2VkIHRvIHJlc29sdmUgdGhlIHJlYWwg bmFtZSBvZiBtYWNoaW5lIGlmIGl0IHdhcyBvcmlnaW5hbGx5CisgIGFjY2Vzc2VkIGJ5IGFuIGFs aWFzIHVzZWQgdG8gcmVwcmVzZW50IGEgY2x1c3Rlci4KKyovCisgICAgIGlmICgodGNwX3JkbnMg JiYgZG5zIHx8IHRjcF9yZG5zID09IFNFVF9PTgorI2lmZGVmIENLX0tFUkJFUk9TCisgICAgICAg ICB8fCB0Y3BfcmRucyA9PSBTRVRfQVVUTyAmJgorICAgICAgICAgIChja19rcmI1X2lzX2luc3Rh bGxlZCgpIHx8IGNrX2tyYjRfaXNfaW5zdGFsbGVkKCkpCisjZW5kaWYgLyogQ0tfS0VSQkVST1Mg Ki8KKyAgICAgICAgICkKKyNpZm5kZWYgTk9IVFRQCisgICAgICAgICAgJiYgKHRjcF9odHRwX3By b3h5ID09IE5VTEwpCisjZW5kaWYgLyogTk9IVFRQICovCisjaWZkZWYgQ0tfU1NMCisgICAgICAg ICAgJiYgIShzc2xfb25seV9mbGFnIHx8IHRsc19vbmx5X2ZsYWcpCisjZW5kaWYgLyogQ0tfU1NM ICovCisgICAgICAgICApIHsKKyNpZmRlZiBOVAorICAgICAgICBpZiAoaXNXaW45NSgpKQorICAg ICAgICAgIHNsZWVwKDEpOworI2VuZGlmIC8qIE5UICovCisgICAgICAgIGlmICghcXVpZXQpIHsK KyAgICAgICAgICAgIHByaW50ZigiIFJldmVyc2UgRE5TIExvb2t1cC4uLiAiKTsKKyAgICAgICAg ICAgIGZmbHVzaChzdGRvdXQpOworICAgICAgICB9CisgICAgICAgIGlmIChob3N0ID0gZ2V0aG9z dGJ5YWRkcigoY2hhciAqKSZyX2FkZHIuc2luX2FkZHIsNCxQRl9JTkVUKSkgeworICAgICAgICAg ICAgY2hhciAqIHM7CisgICAgICAgICAgICBob3N0ID0gY2tfY29weWhvc3RlbnQoaG9zdCk7Cisg ICAgICAgICAgICBkZWJ1ZyhGMTAwLCJuZXRvcGVuIGdldGhvc3RieW5hbWUgIT0gTlVMTCIsIiIs MCk7CisgICAgICAgICAgICBpZiAoIXF1aWV0KSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCIo T0spXG4iKTsKKyAgICAgICAgICAgICAgICBmZmx1c2goc3Rkb3V0KTsKKyAgICAgICAgICAgIH0K KyAgICAgICAgICAgIHMgPSBob3N0LT5oX25hbWU7CisgICAgICAgICAgICBpZiAoIXMpIHsgICAg ICAgICAgICAgICAgICAgLyogVGhpcyBjYW4gaGFwcGVuLi4uICovCisgICAgICAgICAgICAgICAg ZGVidWcoRjEwMCwibmV0b3BlbiBob3N0LT5oX25hbWUgaXMgTlVMTCIsIiIsMCk7CisgICAgICAg ICAgICAgICAgcyA9ICIiOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLyogU29tZXRoaW5n IGlzIHdyb25nIHdpdGggaW5ldF9udG9hKCkgb24gSFBVWCAxMC54eCAqLworICAgICAgICAgICAg LyogVGhlIGNvbXBpbGVyIHNheXMgIkludGVncmFsIHZhbHVlIGltcGxpY2l0bHkgY29udmVydGVk IHRvICovCisgICAgICAgICAgICAvKiBwb2ludGVyIGluIGFzc2lnbm1lbnQuIiAgVGhlIHByb3Rv dHlwZSBpcyByaWdodCB0aGVyZSAqLworICAgICAgICAgICAgLyogaW4gPGFycGEvaW5ldC5oPiBz byB3aGF0J3MgdGhlIHByb2JsZW0/ICovCisgICAgICAgICAgICAvKiBEaXR0byBpbiBIUC1VWCA1 LngsIGJ1dCBub3QgOC54IG9yIDkueC4uLiAqLworICAgICAgICAgICAgaWYgKCEqcykgeyAgICAg ICAgICAgICAgICAgIC8qIE5vIG5hbWUgc28gc3Vic3RpdHV0ZSB0aGUgYWRkcmVzcyAqLworICAg ICAgICAgICAgICAgIGRlYnVnKEYxMDAsIm5ldG9wZW4gaG9zdC0+aF9uYW1lIGlzIGVtcHR5Iiwi IiwwKTsKKyAgICAgICAgICAgICAgICBzID0gaW5ldF9udG9hKHJfYWRkci5zaW5fYWRkcik7IC8q IENvbnZlcnQgYWRkcmVzcyB0byBzdHJpbmcgKi8KKyAgICAgICAgICAgICAgICBpZiAoIXMpICAg ICAgICAgICAgICAgICAvKiBUcnVzdCBObyAxICovCisgICAgICAgICAgICAgICAgICBzID0gIiI7 CisgICAgICAgICAgICAgICAgaWYgKCpzKSB7ICAgICAgICAgICAgICAgLyogSWYgaXQgd29ya2Vk LCB1c2UgdGhpcyBzdHJpbmcgKi8KKyAgICAgICAgICAgICAgICAgICAgY2tzdHJuY3B5KGlwYWRk cixzLDIwKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcyA9IGlwYWRkcjsg ICAgICAgICAgICAgLyogT3RoZXJ3aXNlIHN0aWNrIHdpdGggdGhlIElQICovCisgICAgICAgICAg ICAgICAgaWYgKCEqcykgICAgICAgICAgICAgICAgLyogb3IgZmFpbGluZyB0aGF0ICovCisgICAg ICAgICAgICAgICAgICBzID0gbmFtZWNvcHk7ICAgICAgICAgLyogdGhlIG5hbWUgd2Ugd2VyZSBj YWxsZWQgd2l0aC4gKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgqcykgeyAgICAg ICAgICAgICAgICAgICAvKiBDb3B5aW5nIGludG8gb3VyIGFyZ3VtZW50PyAqLworICAgICAgICAg ICAgICAgIGNrc3RybmNweShuYW1lLHMsODApOyAgIC8qIEJhZCBCYWQgQmFkICovCisgICAgICAg ICAgICAgICAgaWYgKCAoODAtc3RybGVuKG5hbWUpKSA+IChzdHJsZW4oc3ZjYnVmKSsxKSApIHsK KyAgICAgICAgICAgICAgICAgICAgY2tzdHJuY2F0KG5hbWUsIjoiLDgwLXN0cmxlbihuYW1lKSk7 CisgICAgICAgICAgICAgICAgICAgIGNrc3RybmNhdChuYW1lLHN2Y2J1Ziw4MC1zdHJsZW4obmFt ZSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgh cXVpZXQgJiYgKnMKKyNpZm5kZWYgTk9JQ1AKKyAgICAgICAgICAgICAgICAmJiAhZG9jb254Cisj ZW5kaWYgLyogTk9JQ1AgKi8KKyAgICAgICAgICAgICAgICApIHsKKyAgICAgICAgICAgICAgICBw cmludGYoIiAlcyBjb25uZWN0ZWQgb24gcG9ydCAlc1xuIixzLHApOworI2lmZGVmIEJFVEFERUJV RworICAgICAgICAgICAgICAgIC8qIFRoaXMgaXMgc2ltcGx5IGZvciB0ZXN0aW5nIHRoZSBETlMg ZW50cmllcyAqLworICAgICAgICAgICAgICAgIGlmIChob3N0LT5oX2FsaWFzZXMpIHsKKyAgICAg ICAgICAgICAgICAgICAgY2hhciAqKiBhID0gaG9zdC0+aF9hbGlhc2VzOworICAgICAgICAgICAg ICAgICAgICB3aGlsZSAoKmEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiIGFs aWFzID0+ICVzXG4iLCphKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGErKzsKKyAgICAgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBCRVRBREVCVUcgKi8K KyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICghcXVpZXQp IHByaW50ZigiRmFpbGVkLlxuIik7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKCFxdWlldCkg cHJpbnRmKCIoT0spXG4iKTsKKyAgICBpZiAoIXF1aWV0KSBmZmx1c2goc3Rkb3V0KTsKKworICAg IC8qIFRoaXMgc2hvdWxkIGFscmVhZHkgaGF2ZSBiZWVuIGRvbmUgYnV0IGp1c3QgaW4gY2FzZSAq LworICAgIGNrc3RybmNweShpcGFkZHIsKGNoYXIgKilpbmV0X250b2Eocl9hZGRyLnNpbl9hZGRy KSwyMCk7CisKKyNpZmRlZiBDS19TRUNVUklUWQorCisgICAgLyogQmVmb3JlIEluaXRpYWxpemF0 aW9uIFRlbG5ldC9SbG9naW4gTmVnb3RpYXRpb25zIEluaXQgS2VyYmVyb3MgKi8KKyNpZm5kZWYg Tk9IVFRQCisgICAgaWYgKHRjcF9odHRwX3Byb3h5KSB7CisgICAgICAgIGZvciAoaT1zdHJsZW4o cHJveHljb3B5KTsgaSA+PSAwIDsgaS0tKQorICAgICAgICAgICAgaWYgKCBwcm94eWNvcHlbaV0g PT0gJzonICkKKyAgICAgICAgICAgICAgICBwcm94eWNvcHlbaV0gPSAnXDAnOworICAgIH0KKyNl bmRpZiAvKiBOT0hUVFAgKi8KKyAgICBja19hdXRoX2luaXQoCisjaWZuZGVmIE5PSFRUUAorICAg ICAgICAgICAgICAgICB0Y3BfaHR0cF9wcm94eSA/IHByb3h5Y29weSA6CisjZW5kaWYgLyogTk9I VFRQICovCisgICAgICAgICAgICAgICAgICh0Y3BfcmRucyAmJiBob3N0ICYmIGhvc3QtPmhfbmFt ZSAmJiBob3N0LT5oX25hbWVbMF0pID8KKyAgICAgICAgICAgICAgICAgKGNoYXIgKilob3N0LT5o X25hbWUgOiAobmFtZWNvcHkyWzBdID8gbmFtZWNvcHkyIDogCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKG5hbWVjb3B5WzBdID8gbmFtZWNvcHkgOiBpcGFkZHIpKSwK KyAgICAgICAgICAgICAgICAgaXBhZGRyLAorICAgICAgICAgICAgICAgICB1aWRidWYsCisgICAg ICAgICAgICAgICAgIHR0eWZkCisgICAgICAgICAgICAgICAgICk7CisjZW5kaWYgLyogQ0tfU0VD VVJJVFkgKi8KKyNpZmRlZiBDS19TU0wKKyAgICBpZiAoY2tfc3NsZWF5X2lzX2luc3RhbGxlZCgp KSB7CisgICAgICAgIGlmICghc3NsX3RuX2luaXQoU1NMX0NMSUVOVCkpIHsKKyAgICAgICAgICAg IGRlYnVnKEYxMDAsIm5ldG9wZW4gc3NsX3RuX2luaXQoKSBmYWlsZWQiLCIiLDApOworICAgICAg ICAgICAgaWYgKGJpb19lcnIhPU5VTEwpIHsKKyAgICAgICAgICAgICAgICBCSU9fcHJpbnRmKGJp b19lcnIsInNzbF90bl9pbml0KCkgZmFpbGVkXG4iKTsKKyAgICAgICAgICAgICAgICBFUlJfcHJp bnRfZXJyb3JzKGJpb19lcnIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg ICBmZmx1c2goc3RkZXJyKTsKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwic3NsX3Ru X2luaXQoKSBmYWlsZWRcbiIpOworICAgICAgICAgICAgICAgIEVSUl9wcmludF9lcnJvcnNfZnAo c3RkZXJyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0bHNfb25seV9mbGFnIHx8 IHNzbF9vbmx5X2ZsYWcpIHsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJuZXRvcGVuIHNz bC90bHMgcmVxdWlyZWQiLCIiLDApOworICAgICAgICAgICAgICAgIG5ldGNsb3MoKTsKKyAgICAg ICAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiB3 ZSB3aWxsIGNvbnRpbnVlIHRvIGFjY2VwdCB0aGUgY29ubmVjdGlvbiAgICovCisgICAgICAgICAg ICAvKiB3aXRob3V0IFNTTCBvciBUTFMgc3VwcG9ydCB1bmxlc3MgcmVxdWlyZWQuICovCisgICAg ICAgICAgICBpZiAoIFRFTE9QVF9ERUZfU19NRV9NT0RFKFRFTE9QVF9TVEFSVF9UTFMpICE9IFRO X05HX01VICkKKyAgICAgICAgICAgICAgICBURUxPUFRfREVGX1NfTUVfTU9ERShURUxPUFRfU1RB UlRfVExTKSA9IFROX05HX1JGOworICAgICAgICAgICAgaWYgKCBURUxPUFRfREVGX1NfVV9NT0RF KFRFTE9QVF9TVEFSVF9UTFMpICE9IFROX05HX01VICkKKyAgICAgICAgICAgICAgICBURUxPUFRf REVGX1NfVV9NT0RFKFRFTE9QVF9TVEFSVF9UTFMpID0gVE5fTkdfUkY7CisgICAgICAgICAgICBp ZiAoIFRFTE9QVF9ERUZfQ19NRV9NT0RFKFRFTE9QVF9TVEFSVF9UTFMpICE9IFROX05HX01VICkK KyAgICAgICAgICAgICAgICBURUxPUFRfREVGX0NfTUVfTU9ERShURUxPUFRfU1RBUlRfVExTKSA9 IFROX05HX1JGOworICAgICAgICAgICAgaWYgKCBURUxPUFRfREVGX0NfVV9NT0RFKFRFTE9QVF9T VEFSVF9UTFMpICE9IFROX05HX01VICkKKyAgICAgICAgICAgICAgICBURUxPUFRfREVGX0NfVV9N T0RFKFRFTE9QVF9TVEFSVF9UTFMpID0gVE5fTkdfUkY7CisgICAgICAgIH0gZWxzZSBpZiAoIGNr X3NzbF9vdXRnb2luZyh0dHlmZCkgPCAwICkgeworICAgICAgICAgICAgZGVidWcoRjEwMCwiY2tf c3NsX291dGdvaW5nKCkgZmFpbGVkIiwiIiwwKTsKKyAgICAgICAgICAgIG5ldGNsb3MoKTsKKyAg ICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgLyogQ0tfU1NM ICovCisKKyNpZmRlZiBSTE9HQ09ERQorICAgIGlmICh0dG5wcm90byA9PSBOUF9STE9HSU4KKyNp ZmRlZiBDS19LRVJCRVJPUworICAgICAgICB8fCB0dG5wcm90byA9PSBOUF9LNExPR0lOIHx8IHR0 bnByb3RvID09IE5QX0VLNExPR0lOCisgICAgICAgIHx8IHR0bnByb3RvID09IE5QX0s1TE9HSU4g fHwgdHRucHJvdG8gPT0gTlBfRUs1TE9HSU4KKyNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLworICAg ICAgICApIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNpbWlsYXIgZGVhbCBmb3Ig cmxvZ2luICovCisgICAgICAgIGlmIChybG9nX2luaSgoKHRjcF9yZG5zICYmIGhvc3QgJiYgaG9z dC0+aF9uYW1lICYmIGhvc3QtPmhfbmFtZVswXSkgPworICAgICAgICAgICAgICAgICAgICAgIChD SEFSICopaG9zdC0+aF9uYW1lIDogKENIQVIgKilpcGFkZHIpLAorICAgICAgICAgICAgICAgICAg ICAgc2VydmljZS0+c19wb3J0LAorICAgICAgICAgICAgICAgICAgICAgJmxfYWRkciwmcl9hZGRy CisgICAgICAgICAgICAgICAgICAgICApIDwgMCkgeworICAgICAgICAgICAgZGVidWcoRjEwMCwi cmxvZ2luIGluaXRpYWxpemF0aW9uIGZhaWxlZCIsIiIsMCk7CisgICAgICAgICAgICBuZXRjbG9z KCk7CisgICAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICB9CisgICAgfSBlbHNlCisjZW5k aWYgLyogUkxPR0NPREUgKi8KKyAgICBpZiAodG5faW5pKCkgPCAwKSB7ICAgICAgICAgICAgICAg ICAvKiBTdGFydCBUZWxuZXQgbmVnb3RpYXRpb25zLiAqLworICAgICAgICBuZXRjbG9zKCk7Cisg ICAgICAgIHJldHVybigtMSk7ICAgICAgICAgICAgICAgICAgICAgLyogR29uZSwgc28gb3BlbiBm YWlsZWQuICAqLworICAgIH0KKyAgICBpZiAodHRjaGsoKSA8IDApIHsKKyAgICAgICAgbmV0Y2xv cygpOworICAgICAgICByZXR1cm4oLTEpOworICAgIH0KKyNpZmRlZiBDS19LRVJCRVJPUworI2lm ZGVmIEtSQjVfVTJVCisgICBpZiAoIHR0bnByb3RvID09IE5QX0s1VTJVICkgeworICAgICAgIGlm IChrNV91c2VyX3RvX3VzZXJfY2xpZW50X2F1dGgoKSkgeworICAgICAgICAgICBuZXRjbG9zKCk7 CisgICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAgfQorICAgfQorI2VuZGlmIC8qIEtSQjVf VTJVICovCisjZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KKworICAgIGRlYnVnKEYxMDEsIm5ldG9w ZW4gc2VydmljZSIsIiIsc3ZjbnVtKTsKKyAgICBkZWJ1ZyhGMTEwLCJuZXRvcGVuIG5hbWUiLG5h bWUsMCk7CisgICAgZGVidWcoRjExMCwibmV0b3BlbiBpcGFkZHIiLGlwYWRkciwwKTsKKyAgICBj a3N0cm5jcHkoaG9zdGlwYWRkcixpcGFkZHIsNjMpOworCisgICAgaWYgKGxjbCkgaWYgKCpsY2wg PCAwKSAgICAgICAgICAgICAgLyogTG9jYWwgbW9kZS4gKi8KKyAgICAgICpsY2wgPSAxOworI2Vu ZGlmIC8qIFRDUFNPQ0tFVCAqLworICAgIHJldHVybigwKTsgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIERvbmUuICovCit9CisKKy8qICBOIEUgVCBDIEwgTyBTICAtLSAgQ2xvc2UgY3VycmVu dCBuZXR3b3JrIGNvbm5lY3Rpb24uICAqLworCisjaWZuZGVmIE5PTE9DQUwKK19QUk9UT1RZUChW T0lEIHNscmVzdG9yLChWT0lEKSk7CisjaWZkZWYgQ0tfU1NMCitpbnQgdGxzX25vcmVzdG9yZSA9 IDA7CisjZW5kaWYgLyogQ0tfU1NMICovCisjZW5kaWYgLyogTk9MT0NBTCAqLworCitpbnQKK25l dGNsb3MoKSB7CisgICAgc3RhdGljIGludCBjbG9zZV9pbl9wcm9ncmVzcyA9IDA7CisgICAgaW50 IHggPSAwLCB5LCB6OworICAgIGRlYnVnKEYxMDEsIm5ldGNsb3MiLCIiLHR0eWZkKTsKKworI2lm ZGVmIE5FVExFQlVGCisgICAgaWYgKCF0dF9wdXNoX2luaXRlZCkKKyAgICAgIGxlX2luaXQoKTsK KyNlbmRpZiAvKiBORVRMRUJVRiAqLworCisgICAgaWYgKHR0eWZkID09IC0xKSAgICAgICAgICAg ICAgICAgICAgLyogV2FzIG9wZW4/ICovCisgICAgICByZXR1cm4oMCk7ICAgICAgICAgICAgICAg ICAgICAgICAgLyogV2Fzbid0LiAqLworCisgICAgaWYgKGNsb3NlX2luX3Byb2dyZXNzKQorICAg ICAgcmV0dXJuKDApOworICAgIGNsb3NlX2luX3Byb2dyZXNzID0gMTsgICAgICAgICAgICAgIC8q IFJlbWVtYmVyICovCisKKyNpZm5kZWYgTk9MT0NBTAorICAgIC8qIFRoaXMgZnVuY3Rpb24gY2Fs bCBzaG91bGQgbm90IGJlIGhlcmUgc2luY2UgdGhpcyBpcyBhIGRpcmVjdCBjYWxsICovCisgICAg LyogZnJvbSBhbiBJL08gcm91dGluZSB0byBhIHVzZXIgaW50ZXJmYWNlIGxldmVsIGZ1bmN0aW9u LiAgSG93ZXZlciwgKi8KKyAgICAvKiB0aGUgcmVhbGl0eSBpcyB0aGF0IHdlIGRvIG5vdCBoYXZl IHB1cmUgaW50ZXJmYWNlcy4gIElmIHdlIGV2ZXIgICAqLworICAgIC8qIGRlY2lkZSB0byBjbGVh biB0aGlzIHVwIHRoZSBVSSBsZXZlbCBzaG91bGQgYXNzaWduIHRoaXMgZnVuY3Rpb24gICovCisg ICAgLyogdmlhIGEgcG9pbnRlciBhc3NpZ25tZW50LiAgLSBKZWZmIDkvMTAvMTk5OSAgICAgICAg ICAgICAgICAgICAgICAgKi8KKyNpZmRlZiBDS19TU0wKKyAgICBpZiAoIXRsc19ub3Jlc3RvcmUp CisjZW5kaWYgLyogQ0tfU1NMICovCisgICAgICBzbHJlc3RvcigpOworI2VuZGlmIC8qIE5PTE9D QUwgKi8KKyNpZmRlZiBPUzIKKyAgICBSZXF1ZXN0VENQSVBNdXRleChTRU1fSU5ERUZJTklURV9X QUlUKTsKKyNlbHNlIC8qIE9TMiAqLworICAgIGlmICh0dHlmZCA+IC0xKSAgICAgICAgICAgICAg ICAgICAgIC8qIFdhcy4gKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgIHsKKyNpZmRlZiBWTVMK KwkgIHkgPSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVHVybiBvbiBub25ibG9ja2lu ZyByZWFkcyAqLworCSAgeiA9IHNvY2tldF9pb2N0bCh0dHlmZCxGSU9OQklPLCZ5KTsKKwkgIGRl YnVnKEYxMTEsIm5ldGNsb3MgRklPTkJJTyIsIm9uIix6KTsKKyNlbmRpZiAvKiBWTVMgKi8KKyNp ZmRlZiBUTkNPREUKKyAgICAgICAgICBpZiAodHRucHJvdG8gPT0gTlBfVEVMTkVUKSB7CisgICAg ICAgICAgICBpZiAoIVRFTE9QVF9NRShURUxPUFRfTE9HT1VUKQorI2lmZGVmIENPTU1FTlQKKy8q IEplZmYgMjAwNS8xMi8zMCAqLworI2lmZGVmIENLX1NTTAorCQkgJiYgIXNzbF9yYXdfZmxhZyAm JiAhdGxzX3Jhd19mbGFnCisjZW5kaWYJLyogQ0tfU1NMICovCisjZW5kaWYJLyogQ09NTUVOVCAq LworCQkpIHsKKwkJLyogU2VuZCBMT0dPVVQgb3B0aW9uIGJlZm9yZSBjbG9zZSAqLworCQlpZiAo dG5fc29wdChETyxURUxPUFRfTE9HT1VUKSA+PSAwKSB7CisJCSAgICBURUxPUFRfVU5BTlNXRVJF RF9ETyhURUxPUFRfTE9HT1VUKSA9IDE7CisJCSAgICAvKiBJdCB3b3VsZCBiZSBuaWNlIHRvIGNh bGwgdG5fd2FpdCBidXQgd2UgY2FuJ3QgKi8KKwkJfQorCSAgICB9CisgICAgICAgICAgICB0bl9w dXNoKCk7CQkJLyogUGxhY2UgYW55IHdhaXRpbmcgZGF0YSBpbnRvIGlucHV0Ki8KKyAgICAgICAg ICB9CisjZW5kaWYgLyogVE5DT0RFICovCisjaWZkZWYgQ0tfU1NMCisgICAgICAgICAgaWYgKHNz bF9hY3RpdmVfZmxhZykgeworICAgICAgICAgICAgICBpZiAoc3NsX2RlYnVnX2ZsYWcpCisgICAg ICAgICAgICAgICAgQklPX3ByaW50ZihiaW9fZXJyLCJjYWxsaW5nIFNTTF9zaHV0ZG93blxuIik7 CisgICAgICAgICAgICAgIFNTTF9zaHV0ZG93bihzc2xfY29uKTsKKyAgICAgICAgICAgICAgc3Ns X2FjdGl2ZV9mbGFnID0gMDsKKyAgICAgICAgICB9CisgICAgICAgICAgaWYgKHRsc19hY3RpdmVf ZmxhZykgeworICAgICAgICAgICAgICBpZiAoc3NsX2RlYnVnX2ZsYWcpCisgICAgICAgICAgICAg ICAgQklPX3ByaW50ZihiaW9fZXJyLCJjYWxsaW5nIFNTTF9zaHV0ZG93blxuIik7CisgICAgICAg ICAgICAgIFNTTF9zaHV0ZG93bih0bHNfY29uKTsKKyAgICAgICAgICAgICAgdGxzX2FjdGl2ZV9m bGFnID0gMDsKKyAgICAgICAgICB9CisjZW5kaWYgLyogQ0tfU1NMICovCisjaWZkZWYgVk1TCisg ICAgICAgICAgY2tfY2FuY2lvKCk7ICAgICAgICAgICAgICAgICAgLyogQ2FuY2VsIGFueSBvdXRz dGFuZGluZyByZWFkcy4gKi8KKyNlbmRpZiAvKiBWTVMgKi8KKyNpZmRlZiBUQ1BJUExJQgorICAg ICAgICAgIHggPSBzb2NrZXRfY2xvc2UodHR5ZmQpOyAgICAgIC8qIENsb3NlIGl0LiAqLworI2Vs c2UKKyNpZm5kZWYgT1MyCisjaWZkZWYgSUJNWDI1CisgICAgICAgIGlmICh0dG5ldCA9PSBORVRf SVgyNSkgeworICAgICAgICAgICAgLyogcmllaG06IHNob3VsZCBzZW5kIGEgZGlzY19yZXEgLSBi dXQgb25seSBpZiBsaW5rIGlzIHN0aWxsIE9LICovCisgICAgICAgICAgICB4ID0geDI1Y2xlYXIo KTsKKyAgICAgICAgICAgIGNsb3NlKHR0eWZkKTsKKyAgICAgICAgICAgIGlmICh4MjVzZXJ2ZXJm ZCkgeworICAgICAgICAgICAgICAgICAgLyogd2Ugd2VyZSB0aGUgcGFzc2l2ZSBjbGllbnQgb2Yg YSBzZXJ2ZXIsIG5vdyB3ZQorICAgICAgICAgICAgICAgICAgICogZ28gYmFjayB0byBiZWluZyB0 aGUgbm9ybWFsIGNsaWVudC4KKyAgICAgICAgICAgICAgICAgICAqIEkgaG9wZSB0aGF0IGtlcm1p dCBjYW4gY29wZSB3aXRoIHRoZSBsb2dpYyB0aGF0CisgICAgICAgICAgICAgICAgICAgKiB0aGVy ZSBjYW4gc3RpbGwgYmUgYSBjb25uZWN0aW9uIGFmdGVyIG5ldGNsb3MKKyAgICAgICAgICAgICAg ICAgICAqIGhhcyBiZWVuIGNhbGxlZC4KKyAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAg ICAgICAgICAgdHR5ZmQgPSB4MjVzZXJ2ZXJmZDsKKyAgICAgICAgICAgICAgICAgIHgyNXNlcnZl cmZkID0gMDsKKyAgICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICAgKiBuZWVk IHRvIGNsb3NlIHRoZSBzZXJ2ZXIgY29ubmVjdGlvbiB0b28gLSBiZWNhdXNlCisgICAgICAgICAg ICAgICAgICAgKiBhbGwgZmlsZSBkZXNjcmlwdG9ycyBjb25uZWN0ZWQgdG8gdGhlIE5QSSBoYXZl IHRoZQorICAgICAgICAgICAgICAgICAgICogc2FtZSBzdGF0dXMuCisgICAgICAgICAgICAgICAg ICAgKgorICAgICAgICAgICAgICAgICAgICogVGhlIHByb2JsZW0gaXMgdGhhdCBhbnkgd2FpdGlu ZyBjb25uZWN0aW9ucyBnZXQKKyAgICAgICAgICAgICAgICAgICAqIGxvc3QsIHRoZSBjbGllbnQg ZG9lc24ndCByZWFsaXNlLCBhbmQgaGFuZ3MuCisgICAgICAgICAgICAgICAgICAgKi8KKyAgICAg ICAgICAgICAgICAgIG5ldGNsb3MoKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgeDI1 X3N0YXRlID0gWDI1X0NMT1NFRDsgICAgIC8qIHJpZWhtOiBkZWFkIGNvZGU/ICovCisgICAgICAg IH0gZWxzZQorI2VuZGlmIC8qIElCTVgyNSAqLworICAgICAgICAgIHggPSBjbG9zZSh0dHlmZCk7 CisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogVENQSVBMSUIgKi8KKyAgICAgIH0KKyAgICB0 dHlmZCA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBNYXJrIGl0IGFzIGNsb3NlZC4g Ki8KKyAgICB3YXNjbG9zZWQgPSAxOworI2lmZGVmIE9TMgorICAgIFJlbGVhc2VUQ1BJUE11dGV4 KCk7CisjZW5kaWYgLyogT1MyICovCisjaWZkZWYgVE5DT0RFCisjaWZkZWYgQ0tfRk9SV0FSRF9Y CisgICAgZndkeF9jbG9zZV9hbGwoKTsgICAgICAgICAgICAgICAgICAgLyogU2h1dCBkb3duIGFu eSBGb3J3YXJkIFggc29ja2V0cyAqLworI2VuZGlmIC8qIENLX0ZPUldBUkRfWCAqLworICAgIHRu X3Jlc2V0KCk7ICAgICAgICAgICAgICAgICAgIC8qIFRoZSBSZXNldCBUZWxuZXQgT3B0aW9uIHRh YmxlLiAgKi8KKyAgICBkZWJ1ZyhGMTAwLCJuZXRjbG9zZSBzZXR0aW5nIHRuX2luaXQgPSAwIiwi IiwwKTsKKyAgICB0bl9pbml0ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZW1lbWJl ciBhYm91dCB0ZWxuZXQgcHJvdG9jb2wuLi4gKi8KKyAgICBzc3RlbG5ldCA9IDA7ICAgICAgICAg ICAgICAgICAgICAgICAvKiBDbGllbnQtc2lkZSBUZWxuZXQgKi8KKyNlbmRpZiAvKiBUTkNPREUg Ki8KKyAgICAqaXBhZGRyID0gJ1wwJzsgICAgICAgICAgICAgICAgICAgICAvKiBaZXJvIHRoZSBJ UCBhZGRyZXNzIHN0cmluZyAqLworICAgIHRjcF9pbmNvbWluZyA9IDA7ICAgICAgICAgICAgICAg ICAgIC8qIE5vIGxvbmdlciBpbmNvbWluZyAqLworICAgIC8qIERvbid0IHJlc2V0IHR0bnByb3Rv IHNvIHRoYXQgd2UgY2FuIHJlbWVtYmVyIHdoaWNoIHByb3RvY29sIGlzIGluIHVzZSAqLworCisj aWZkZWYgVENQSVBMSUIKKy8qCisgIEVtcHR5IHRoZSBpbnRlcm5hbCBidWZmZXJzIHNvIHRoZXkg d29uJ3QgYmUgdXNlZCBhcyBpbnZhbGlkIGlucHV0IG9uCisgIHRoZSBuZXh0IGNvbm5lY3QgYXR0 ZW1wdCAocmxvZ2luKS4KKyovCisgICAgdHRpYnAgPSAwOworICAgIHR0aWJuID0gMDsKKyNlbmRp ZiAvKiBUQ1BJUExJQiAqLworI2lmZGVmIENLX0tFUkJFUk9TCisgICAgLyogSWYgd2UgYXJlIGF1 dG9tYXRpY2FsbHkgZGVzdHJveWluZyBLZXJiZXJvcyBjcmVkZW50aWFscyBvbiBDbG9zZSAqLwor ICAgIC8qIGRvIGl0IG5vdy4gKi8KKyNpZmRlZiBLUkI0CisgICAgaWYgKGtyYjRfYXV0b2RlbCA9 PSBLUkJfREVMX0NMKSB7CisgICAgICAgIGV4dGVybiBzdHJ1Y3Qga3JiX29wX2RhdGEga3JiX29w OworICAgICAgICBrcmJfb3AudmVyc2lvbiA9IDQ7CisgICAgICAgIGtyYl9vcC5jYWNoZSA9IE5V TEw7CisgICAgICAgIGNrX2tyYjRfZGVzdHJveSgma3JiX29wKTsKKyAgICB9CisjZW5kaWYgLyog S1JCNCAqLworI2lmZGVmIEtSQjUKKyAgICBpZiAoa3JiNV9hdXRvZGVsID09IEtSQl9ERUxfQ0wp IHsKKyAgICAgICAgZXh0ZXJuIHN0cnVjdCBrcmJfb3BfZGF0YSBrcmJfb3A7CisgICAgICAgIGV4 dGVybiBjaGFyICoga3JiNV9kX2NjOworICAgICAgICBrcmJfb3AudmVyc2lvbiA9IDU7CisgICAg ICAgIGtyYl9vcC5jYWNoZSA9IGtyYjVfZF9jYzsKKyAgICAgICAgY2tfa3JiNV9kZXN0cm95KCZr cmJfb3ApOworICAgIH0KKyNlbmRpZiAvKiBLUkI1ICovCisjZW5kaWYgLyogQ0tfS0VSQkVST1Mg Ki8KKyAgICBjbG9zZV9pbl9wcm9ncmVzcyA9IDA7ICAgICAgICAgICAgICAvKiBSZW1lbWJlciB3 ZSBhcmUgZG9uZS4gKi8KKyAgICByZXR1cm4oeCk7Cit9CisKKyNpZmRlZiBPUzIKK2ludAorb3My c29ja2V0ZXJyb3IoIGludCBzX2Vycm5vICkgeworI2lmZGVmIE9TMk9OTFkKKyAgICBpZiAoc19l cnJubyA+IDAgJiYgc19lcnJubyA8PSBTT0NCQVNFRVJSKSB7CisgICAgICAgIC8qIGluIE9TLzIs IHRoZXJlIGlzIGEgcHJvYmxlbSB3aXRoIHRocmVhZGluZyBpbiB0aGF0CisgICAgICAgICAqIHRo ZSB2YWx1ZSBvZiBlcnJubyBpcyBub3QgdGhyZWFkIHNhZmUuICBJdCBjYW4gYmUKKyAgICAgICAg ICogc2V0IHRvIGEgdmFsdWUgZnJvbSBhIHByZXZpb3VzIGxpYnJhcnkgY2FsbCBhbmQgaWYKKyAg ICAgICAgICogaXQgd2FzIG5vdCBjbGVhcmVkIGl0IHdpbGwgYXBwZWFyIGhlcmUuICBPbmx5IHRy ZWF0CisgICAgICAgICAqIHZhbGlkIHNvY2tldCBlcnJvciBjb2RlcyBhcyBlcnJvcnMgaW4gdGhp cyBmdW5jdGlvbi4KKyAgICAgICAgICovCisgICAgICAgIGRlYnVnKEYxMDAsIm9zMnNvY2tldGVy cm9yIGVycm5vLmgiLCIiLDApOworICAgICAgICBzb2NrZXRfZXJybm8gPSAwOworICAgICAgICBy ZXR1cm4oMCk7CisgICAgfQorI2VuZGlmIC8qIE9TMk9OTFkgKi8KKworICAgIHN3aXRjaCAoc19l cnJubykgeworICAgICAgY2FzZSAwOiAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5PIEVS Uk9SICovCisgICAgICAgIGRlYnVnKEYxMDAsIm9zMnNvY2tldGVycm9yIE5PRVJST1IiLCIiLDAp OworICAgICAgICByZXR1cm4oMCk7CisjaWZkZWYgTlQKKyAgICAgIGNhc2UgV1NBRUNPTk5SRVNF VDoKKyNlbHNlIC8qIE5UICovCisgICAgICBjYXNlIFNPQ0VDT05OUkVTRVQ6CisgICAgICBjYXNl IFNPQ0VDT05OUkVTRVQgLSBTT0NCQVNFRVJSOgorI2VuZGlmIC8qIE5UICovCisgICAgICAgIGRl YnVnKEYxMDAsIm9zMnNvY2tldGVycm9yIEVDT05SRVNFVCIsIiIsMCk7CisgICAgICAgIHRuX2Rl YnVnKCJFQ09OUkVTRVQiKTsKKyAgICAgICAgbmV0Y2xvcygpOyAgICAgICAgICAgICAgLyogKioq ICoqKiAqLworICAgICAgICByZXR1cm4oLTEpOyAgICAgICAgICAgICAvKiBDb25uZWN0aW9uIGlz IGJyb2tlbi4gKi8KKyNpZmRlZiBOVAorICAgICAgY2FzZSBXU0FFQ09OTkFCT1JURUQ6CisjZWxz ZSAvKiBOVCAqLworICAgICAgY2FzZSBTT0NFQ09OTkFCT1JURUQ6CisgICAgICBjYXNlIFNPQ0VD T05OQUJPUlRFRCAtIFNPQ0JBU0VFUlI6CisjZW5kaWYgLyogTlQgKi8KKyAgICAgICAgZGVidWco RjEwMCwib3Myc29ja2V0ZXJyb3IgRUNPTk5BQk9SVEVEIiwiIiwwKTsKKyAgICAgICAgdG5fZGVi dWcoIkVDT05OQUJPUlRFRCIpOworICAgICAgICBuZXRjbG9zKCk7ICAgICAgICAgICAgICAvKiAq KiogKioqICovCisgICAgICAgIHJldHVybigtMSk7ICAgICAgICAgICAgIC8qIENvbm5lY3Rpb24g aXMgYnJva2VuLiAqLworI2lmZGVmIE5UCisgICAgICBjYXNlIFdTQUVORVRSRVNFVDoKKyNlbHNl IC8qIE5UICovCisgICAgICBjYXNlIFNPQ0VORVRSRVNFVDoKKyAgICAgIGNhc2UgU09DRU5FVFJF U0VUIC0gU09DQkFTRUVSUjoKKyNlbmRpZiAvKiBOVCAqLworICAgICAgICBkZWJ1ZyhGMTAwLCJv czJzb2NrZXRlcnJvciBFTkVUUkVTRVQiLCIiLDApOworICAgICAgICB0bl9kZWJ1ZygiRU5FVFJF U0VUIik7CisgICAgICAgIG5ldGNsb3MoKTsgICAgICAgICAgICAgIC8qICoqKiAqKiogKi8KKyAg ICAgICAgcmV0dXJuKC0xKTsgICAgICAgICAgICAgLyogQ29ubmVjdGlvbiBpcyBicm9rZW4uICov CisjaWZkZWYgTlQKKyAgICAgIGNhc2UgV1NBRU5PVENPTk46CisjZWxzZSAvKiBOVCAqLworICAg ICAgY2FzZSBTT0NFTk9UQ09OTjoKKyAgICAgIGNhc2UgU09DRU5PVENPTk4gLSBTT0NCQVNFRVJS OgorI2VuZGlmIC8qIE5UICovCisgICAgICAgIGRlYnVnKEYxMDAsIm9zMnNvY2tldGVycm9yIEVO T1RDT05OIiwiIiwwKTsKKyAgICAgICAgdG5fZGVidWcoIkVOT1RDT05OIik7CisgICAgICAgIG5l dGNsb3MoKTsgICAgICAgICAgICAgICAgICAgICAgLyogKioqICoqKiAqLworICAgICAgICByZXR1 cm4oLTEpOyAgICAgICAgICAgICAgICAgICAgIC8qIENvbm5lY3Rpb24gaXMgYnJva2VuLiAqLwor I2lmZGVmIE5UCisgICAgICBjYXNlIFdTQUVTSFVURE9XTjoKKyAgICAgICAgZGVidWcoRjEwMCwi b3Myc29ja2V0ZXJyb3IgRVNIVVRET1dOIiwiIiwwKTsKKyAgICAgICAgdG5fZGVidWcoIkVTSFVU RE9XTiIpOworICAgICAgICBuZXRjbG9zKCk7ICAgICAgICAgICAgICAgICAgICAgIC8qICoqKiAq KiogKi8KKyAgICAgICAgcmV0dXJuKC0xKTsgICAgICAgICAgICAgICAgICAgICAvKiBDb25uZWN0 aW9uIGlzIGJyb2tlbi4gKi8KKyNlbmRpZiAvKiBOVCAqLworI2lmZGVmIE5UCisgICAgICBjYXNl IFdTQUVXT1VMREJMT0NLOgorI2Vsc2UKKyAgICAgIGNhc2UgU09DRVdPVUxEQkxPQ0s6CisgICAg ICBjYXNlIFNPQ0VXT1VMREJMT0NLIC0gU09DQkFTRUVSUjoKKyNlbmRpZiAvKiBOVCAqLworICAg ICAgICBkZWJ1ZyhGMTAwLCJvczJzb2NrZXRlcnJvciBFV09VTERCTE9DSyIsIiIsMCk7CisgICAg ICAgIHJldHVybigwKTsKKyNpZmRlZiBOVAorICAgICAgY2FzZSBFUlJPUl9JT19JTkNPTVBMRVRF OgorICAgICAgY2FzZSBFUlJPUl9JT19QRU5ESU5HOgorICAgICAgY2FzZSBFUlJPUl9PUEVSQVRJ T05fQUJPUlRFRDoKKyAgICAgICAgcmV0dXJuKDApOworI2VuZGlmIC8qIE5UICovCisgICAgICBk ZWZhdWx0OgorICAgICAgICByZXR1cm4oLTIpOworICAgIH0KKyAgICByZXR1cm4oMCk7Cit9Cisj ZW5kaWYgLyogT1MyICovCisKKy8qICBOIEUgVCBUIEMgSCBLICAtLSAgQ2hlY2sgaWYgbmV0d29y ayB1cCwgYW5kIGhvdyBtYW55IGJ5dGVzIGNhbiBiZSByZWFkICovCisvKgorICBSZXR1cm5zIG51 bWJlciBvZiBieXRlcyB3YWl0aW5nLCBvciAtMSBpZiBjb25uZWN0aW9uIGhhcyBiZWVuIGRyb3Bw ZWQuCisqLworaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENoZWNr IGhvdyBtYW55IGJ5dGVzIGFyZSByZWFkeSAqLworbmV0dGNoaygpIHsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIGZvciByZWFkaW5nIGZyb20gbmV0d29yayAqLworI2lmZGVmIFRDUElQ TElCCisgICAgbG9uZyBjb3VudCA9IDA7CisgICAgaW50IHggPSAwLCB6OworICAgIGxvbmcgeTsK KyAgICBjaGFyIGM7CisgICAgaW50IHJjOworI2lmZGVmIE5UCisgICAgZXh0ZXJuIGludCBpb25v YmxvY2s7ICAgICAgICAgICAgICAgLyogRm9yIE92ZXJsYXBwZWQgSS9PICovCisjZW5kaWYgLyog TlQgKi8KKworICAgIGRlYnVnKEYxMDEsIm5ldHRjaGsgZW50cnkgdHRpYm4iLCIiLHR0aWJuKTsK KyAgICBkZWJ1ZyhGMTAxLCJuZXR0Y2hrIGVudHJ5IHR0aWJwIiwiIix0dGlicCk7CisKKyNpZmRl ZiBORVRMRUJVRgorICAgIHsKKyAgICAgICAgaW50IG4gPSAwOworICAgICAgICBpZiAodHRwdXNo ID49IDApCisgICAgICAgICAgbisrOworICAgICAgICBuICs9IGxlX2luYnVmKCk7CisgICAgICAg IGlmIChuID4gMCkKKyAgICAgICAgICByZXR1cm4obik7CisgICAgfQorI2VuZGlmIC8qIE5FVExF QlVGICovCisKKyNpZm5kZWYgT1MyCisjaWZuZGVmIEJFQk9YCisgICAgc29ja2V0X2Vycm5vID0g MDsgLyogVGhpcyBpcyBhIGZ1bmN0aW9uIGNhbGwgaW4gTlQsIGFuZCBCZU9TICovCisjZW5kaWYg LyogQkVCT1ggKi8KKyNlbmRpZiAvKiBPUzIgKi8KKworICAgIGlmICh0dHlmZCA9PSAtMSkgewor ICAgICAgICBkZWJ1ZyhGMTAwLCJuZXR0Y2hrIHNvY2tldCBpcyBjbG9zZWQiLCIiLDApOworICAg ICAgICByZXR1cm4oLTEpOworICAgIH0KKy8qCisgIE5vdGU6IHRoaXMgc29ja2V0X2lvY3RsKCkg Y2FsbCBkb2VzIE5PVCByZXR1cm4gYW4gZXJyb3IgaWYgdGhlCisgIGNvbm5lY3Rpb24gaGFzIGJl ZW4gYnJva2VuLiAgKEF0IGxlYXN0IG5vdCBpbiBNdWx0aU5ldC4pCisqLworI2lmZGVmIENPTU1F TlQKKy8qICBBbm90aGVyIHRyaWNrIHRoYXQgY2FuIGJlIHRyaWVkIGhlcmUgaXMgc29tZXRoaW5n IGxpa2UgdGhpczogKi8KKworICAgIGlmICh0dG5ldCA9PSBORVRfVENQQikgeworICAgICAgICBj aGFyIGR1bW15OworICAgICAgICB4ID0gcmVhZCh0dHlmZCwmZHVtbXksMCk7ICAgICAgIC8qIFRy eSB0byByZWFkIG5vdGhpbmcgKi8KKyAgICAgICAgaWYgKHggPCAwKSB7ICAgICAgICAgICAgICAg ICAgICAvKiAiQ29ubmVjdGlvbiByZXNldCBieSBwZWVyIiAqLworICAgICAgICAgICAgcGVycm9y KCJUQ1AvSVAiKTsgICAgICAgICAgIC8qIG9yIHNvbWVzdWNoLi4uICovCisgICAgICAgICAgICB0 dGNsb3MoMCk7ICAgICAgICAgICAgICAgICAgLyogQ2xvc2Ugb3VyIGVuZCB0b28uICovCisgICAg ICAgICAgICByZXR1cm4oLTEpOworICAgICAgICB9CisgICAgfQorI2VuZGlmIC8qIENPTU1FTlQg Ki8KKworCisjaWZkZWYgQ0tfU1NMCisgICAgaWYgKHNzbF9hY3RpdmVfZmxhZykgeworI2lmbmRl ZiBJS1NET05MWQorI2lmZGVmIE9TMgorICAgICAgICBpZiAoIElzQ29ubmVjdE1vZGUoKSApIHsK KyAgICAgICAgICAgIGRlYnVnKEYxMDEsIm5ldHRjaGsgKHNzbF9hY3RpdmVfZmxhZykgcmV0dXJu cyIsIiIsY291bnQpOworICAgICAgICAgICAgcmV0dXJuKDApOworICAgICAgICB9CisjZW5kaWYg LyogT1MyICovCisjZW5kaWYgLyogSUtTRE9OTFkgKi8KKyAgICAgICAgY291bnQgPSBTU0xfcGVu ZGluZyhzc2xfY29uKTsKKyAgICAgICAgaWYgKGNvdW50IDwgMCkgeworICAgICAgICAgICAgZGVi dWcoRjExMSwibmV0dGNoayIsIlNTTF9wZW5kaW5nIGVycm9yIixjb3VudCk7CisgICAgICAgICAg ICBuZXRjbG9zKCk7CisgICAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICB9CisgICAgICAg IGlmICggY291bnQgPiAwICkKKyAgICAgICAgICAgIHJldHVybihjb3VudCk7ICAgICAgICAgICAg ICAgICAgLyogRG9uJ3QgcGVyZm9ybSBhIHJlYWQgKi8KKyAgICB9IGVsc2UgaWYgKHRsc19hY3Rp dmVfZmxhZykgeworI2lmbmRlZiBJS1NET05MWQorI2lmZGVmIE9TMgorICAgICAgICBpZiAoIElz Q29ubmVjdE1vZGUoKSApIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMDEsIm5ldHRjaGsgKHRsc19h Y3RpdmVfZmxhZykgcmV0dXJucyIsIiIsY291bnQpOworICAgICAgICAgICAgcmV0dXJuKDApOwor ICAgICAgICB9CisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogSUtTRE9OTFkgKi8KKyAgICAg ICAgY291bnQgPSBTU0xfcGVuZGluZyh0bHNfY29uKTsKKyAgICAgICAgaWYgKGNvdW50IDwgMCkg eworICAgICAgICAgICAgZGVidWcoRjExMSwibmV0dGNoayIsIlRMU19wZW5kaW5nIGVycm9yIixj b3VudCk7CisgICAgICAgICAgICBuZXRjbG9zKCk7CisgICAgICAgICAgICByZXR1cm4oLTEpOwor ICAgICAgICB9CisgICAgICAgIGlmICggY291bnQgPiAwICkKKyAgICAgICAgICAgIHJldHVybihj b3VudCk7ICAgICAgICAgICAgICAgICAgLyogRG9uJ3QgcGVyZm9ybSBhIHJlYWQgKi8KKyAgICB9 IGVsc2UKKyNlbmRpZiAvKiBDS19TU0wgKi8KKworICAgIGlmIChzb2NrZXRfaW9jdGwodHR5ZmQs RklPTlJFQUQsCisjaWZkZWYgQ09NTUVOVAorICAgIC8qIE5vdyB3ZSd2ZSBjaGFuZ2VkIHRoZSBp b2N0bCguLiwuLix4KSBwcm90b3R5cGUgZm9yIERFQ0MgdG8gKHZvaWQgKikgKi8KKyNpZmRlZiBf X0RFQ0MKKyAgICAvKiBOT1RFOiAiJmNvdW50IiBtaWdodCBuZWVkIHRvIGJlICIoY2hhciAqKSZj b3VudCIgaW4gc29tZSBzZXR0aW5ncy4gKi8KKyAgICAgICAgICAgICAgICAgICAgIC8qIENhc3Qg bmVlZGVkIGZvciBERUNDIDQuMSAmIGxhdGVyPyAqLworICAgICAgICAgICAgICAgICAgICAgLyog TWF5YmUsIGJ1dCBfX0RFQ0NfVkVSIG9ubHkgZXhpc3RzIGluIDUuMCBhbmQgbGF0ZXIgKi8KKyAg ICAgICAgICAgICAgICAgICAgIChjaGFyICopCisjZW5kaWYgLyogX19ERUNDICovCisjZW5kaWYg LyogQ09NTUVOVCAqLworICAgICAgICAgICAgICAgICAgICAgJmNvdW50CisgICAgICAgICAgICAg ICAgICAgICApIDwgMCkgeworICAgICAgICBkZWJ1ZyhGMTAxLCJuZXR0Y2hrIHNvY2tldF9pb2N0 bCBlcnJvciIsIiIsc29ja2V0X2Vycm5vKTsKKyAgICAgICAgLyogSWYgdGhlIGNvbm5lY3Rpb24g aXMgZ29uZSwgdGhlIGNvbm5lY3Rpb24gaXMgZ29uZS4gKi8KKyAgICAgICAgbmV0Y2xvcygpOwor I2lmZGVmIE5UX1RDUF9PVkVSTEFQUEVECisgICAgICAgIC8qIElzIHRoZXJlIGFueXRoaW5nIGlu IHRoZSBvdmVybGFwcGVkIEkvTyBidWZmZXJzPyAqLworICAgICAgICBjb3VudCArPSBPdmVybGFw cGVkRGF0YVdhaXRpbmcoKTsKKyNlbmRpZiAvKiBOVF9UQ1BfT1ZFUkxBUFBFRCAqLworICAgICAg ICBjb3VudCArPSB0dGlibjsKKyAgICAgICAgcmV0dXJuKGNvdW50PjA/Y291bnQ6LTEpOworICAg IH0KKyAgICBkZWJ1ZyhGMTAxLCJuZXR0Y2hrIGNvdW50IiwiIixjb3VudCk7CisjaWZkZWYgTlRf VENQX09WRVJMQVBQRUQKKyAgICAvKiBJcyB0aGVyZSBhbnl0aGluZyBpbiB0aGUgb3ZlcmxhcHBl ZCBJL08gYnVmZmVycz8gKi8KKyAgICBjb3VudCArPSBPdmVybGFwcGVkRGF0YVdhaXRpbmcoKTsK KyAgICBkZWJ1ZyhGMTAxLCJuZXR0Y2hrIGNvdW50IHcvb3ZlcmxhcHBlZCIsIiIsY291bnQpOwor I2VuZGlmIC8qIE5UX1RDUF9PVkVSTEFQUEVEICovCisKKyNpZmRlZiBPUzIKKyNpZm5kZWYgSUtT RE9OTFkKKyAgICBpZiAoIElzQ29ubmVjdE1vZGUoKSApIHsKKyAgICAgICAgZGVidWcoRjEwMSwi bmV0dGNoayAoRklPTlJFQUQpIHJldHVybnMiLCIiLGNvdW50KTsKKyAgICAgICAgcmV0dXJuKGNv dW50KTsKKyAgICB9CisjZW5kaWYgLyogSUtTRE9OTFkgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKwor LyogRm9yIHRoZSBzYWtlIG9mIGVmZmljaWVuY3ksIGlmIHRoZXJlIGlzIHN0aWxsIGRhdGEgaW4g dGhlIHR0aWJ1ZiAqLworLyogZG8gbm90IGdvIHRvIHRoZSBib3RoZXIgb2YgY2hlY2tpbmcgdG8g c2VlIG9mIHRoZSBjb25uZWN0aW9uIGlzICAqLworLyogc3RpbGwgdmFsaWQuICBUaGUgaGFuZGxl IGlzIHN0aWxsIGdvb2QsIHNvIGp1c3QgcmV0dXJuIHRoZSBjb3VudCAqLworLyogb2YgdGhlIGJ5 dGVzIHRoYXQgd2UgYWxyZWFkeSBoYXZlIGxlZnQgdG8gcHJvY2Vzcy4gICAgICAgICAgICAgICAq LworI2lmZGVmIE9TMgorICAgIGlmICggY291bnQgPiAwIHx8IHR0aWJuID4gMCApIHsKKyAgICAg ICAgY291bnQrPXR0aWJuOworICAgICAgICBkZWJ1ZyhGMTAxLCJuZXR0Y2hrIChjb3VudCt0dGli biA+IDApIHJldHVybnMiLCIiLGNvdW50KTsKKyAgICAgICAgcmV0dXJuKGNvdW50KTsKKyAgICB9 IGVsc2UgeworICAgICAgICBSZXF1ZXN0VENQSVBNdXRleChTRU1fSU5ERUZJTklURV9XQUlUKTsK KyAgICAgICAgaWYgKCB0dGlibiA9PSAwICkKKyAgICAgICAgICAgIHR0aWJwID0gMDsgICAgICAv KiByZXNldCBmb3IgbmV4dCByZWFkICovCisgICAgfQorI2Vsc2UgLyogT1MyICovCisgICAgaWYg KCBjb3VudCA+IDAgfHwgdHRpYm4gPiAwICkgeworICAgICAgICBkZWJ1ZyhGMTAxLCJuZXR0Y2hr IHJldHVybnMiLCIiLGNvdW50K3R0aWJuKTsKKyAgICAgICAgcmV0dXJuKGNvdW50K3R0aWJuKTsK KyAgICB9CisgICAgdHRpYm4gPSB0dGlicCA9IDA7CisjZW5kaWYgLyogT1MyICovCisKKy8qCisg IFRoZSBmb2xsb3dpbmcgY29kZSB3b3JrcyB3ZWxsIGluIG1vc3Qgc2V0dGluZ3MsIGJ1dCBtZXNz ZXMgdGhpbmdzIHVwIGluCisgIG90aGVycywgaW5jbHVkaW5nIENNVS9UZWsgVENQL0lQIGFuZCBV Q1ggMi4wLCB3aGVyZSBpdCBzb21laG93IG1hbmFnZXMgdG8KKyAgbWFrZSBpdCBpbXBvc3NpYmxl IHRvIGV2ZXIgbWFrZSBhIG5ldyBjb25uZWN0aW9uIHRvIHRoZSBzYW1lIGhvc3QgYWdhaW4gd2l0 aAorICBDT05ORUNULCBvbmNlIGl0IGhhcyBiZWVuIGxvZ2dlZCBvdXQgZnJvbSB0aGUgZmlyc3Qg dGltZS4gIE5vdCBldmVuIGlmIHlvdQorICBIQU5HVVAgZmlyc3QsIG9yIFNFVCBIT1NUPENSPiwg b3IgU0VUIExJTkU8Q1I+LiAgUmVwb3J0ZWRseSwgaG93ZXZlciwgaXQKKyAgZG9lcyB3b3JrIE9L IGluIGxhdGVyIHJlbGVhc2VzIG9mIFVDWC4gIEJ1dCB0aGVyZSBpcyBubyB3YXkgd2UgY2FuCisg IGFjY29tbW9kYXRlIGJvdGggb2xkIGFuZCBuZXcgLS0gd2UgbWlnaHQgaGF2ZSBzdGF0aWMgbGlu a2luZyBvciBkeW5hbWljCisgIGxpbmtpbmcsIGV0YyBldGMuICBJZiB3ZSBoYXZlIHN0YXRpYywg SSBvbmx5IGhhdmUgYWNjZXNzIHRvIDIuMCwgd2hlcmUgdGhpcworICBkb2Vzbid0IHdvcmssIGV0 YyBldGMgYmxhaCBibGFoLgorCisgIEluIHRoZSBmb2xsb3dpbmcgbGluZXMsIHdlIGRlZmluZSBh IHN5bWJvbCBOT0NPVU5UIGZvciBidWlsZHMgd2hlcmUgd2Ugd2FudAorICB0byBvbWl0IHRoaXMg Y29kZS4gIEJ5IGRlZmF1bHQsIGl0IGlzIG9taXR0ZWQgZm9yIENNVS9UZWsuICBZb3UgY2FuIGZv cmNlCisgIG9taXNzaW9uIG9mIGl0IGZvciBvdGhlciBjb21iaW5hdGlvbnMgYnkgZGVmaW5pbmcg Tk9DT1VOVCBpbiBDRkxBR1MuICBZb3UKKyAgY2FuIGZvcmNlIGluY2x1c2lvbiBvZiB0aGlzIGNv ZGUsIGV2ZW4gZm9yIENNVS9UZWssIGJ5IGluY2x1ZGluZyBOT05PQ09VTlQKKyAgaW4gQ0ZMQUdT LgorKi8KKyNpZmRlZiBOT05PQ09VTlQKKyNpZmRlZiBOT0NPVU5UCisjdW5kZWYgTk9DT1VOVAor I2VuZGlmIC8qIE5PQ09VTlQgKi8KKyNlbHNlCisjaWZuZGVmIE5PQ09VTlQKKyNpZmRlZiBDTVVf VENQSVAKKyNkZWZpbmUgTk9DT1VOVAorI2VuZGlmIC8qIENNVV9UQ1BJUCAqLworI2VuZGlmIC8q IE5PQ09VTlQgKi8KKyNlbmRpZiAvKiBOT05PQ09VTlQgKi8KKworCisgICAgLyogRnJvbSB0aGlz IHBvaW50IGZvcndhcmQgd2UgaGF2ZSBhIHBvc3NpYmxlIHJhY2UgY29uZGl0aW9uIGluIEs5NQor ICAgICAqIGR1ZSB0byBpdHMgdXNlIG9mIG11bHRpcGxlIHRocmVhZHMuICBUaGVyZWZvcmUsIHdl IG11c3QgZW5zdXJlCisgICAgICogdGhhdCBvbmx5IG9uZSB0aHJlYWQgYXR0ZW1wdCB0byByZWFk L3dyaXRlIGZyb20gdGhlIHNvY2tldCBhdCBhCisgICAgICogdGltZS4gIE90aGVyd2lzZSwgaXQg aXMgcG9zc2libGUgZm9yIGEgYnVmZmVyIHRvIGJlIG92ZXJ3cml0dGVuLgorICAgICAqLworICAg IC8qIHdlIGtub3cgbm93IHRoYXQgY291bnQgPj0gMCBhbmQgdGhhdCB0dGlibiA9PSAwICovCisK KyAgICBpZiAoY291bnQgPT0gMAorI2lmZGVmIFJMT0dDT0RFCisjaWZkZWYgQ0tfS0VSQkVST1MK KyAgICAgICAgJiYgdHRucHJvdG8gIT0gTlBfRUs0TE9HSU4gJiYgdHRucHJvdG8gIT0gTlBfRUs1 TE9HSU4KKyNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLworI2VuZGlmIC8qIFJMT0dDT0RFICovCisg ICAgICAgICkgeworICAgICAgICBpbnQgc19lcnJubyA9IDA7CisjaWZuZGVmIE5PQ09VTlQKKy8q CisgIEhlcmUgd2UgbmVlZCB0byB0ZWxsIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYSAwIGNvdW50 IG9uIGFuIGFjdGl2ZQorICBjb25uZWN0aW9uLCBhbmQgYSAwIGNvdW50IGJlY2F1c2UgdGhlIHJl bW90ZSBlbmQgb2YgdGhlIHNvY2tldCBicm9rZSB0aGUKKyAgY29ubmVjdGlvbi4gIFRoZXJlIGlz IG5vIG1lY2hhbmlzbSBpbiBUR1YgTXVsdGlOZXQgKG9yIFdJTi9UQ1A/KSB0byBxdWVyeQorICB0 aGUgc3RhdHVzIG9mIHRoZSBjb25uZWN0aW9uLCBzbyB3ZSBoYXZlIHRvIGRvIGEgcmVhZC4gIC0x IG1lYW5zIHRoZXJlIHdhcworICBubyBkYXRhIGF2YWlsYWJsZSAoc29ja2V0X2Vycm5vID09IEVX T1VMREJMT0NLKSwgMCBtZWFucyB0aGUgY29ubmVjdGlvbiBpcworICBkb3duLiAgQnV0IGlmLCBi eSBjaGFuY2UsIHdlIGFjdHVhbGx5IGdldCBhIGNoYXJhY3Rlciwgd2UgaGF2ZSB0byBwdXQgaXQK KyAgd2hlcmUgaXQgd29uJ3QgYmUgbG9zdC4KKyovCisjaWZuZGVmIE5PTl9CTE9DS19JTworI2lm ZGVmIE9TMgorI2lmZGVmIENLX1NTTAorICAgICAgICBSZXF1ZXN0U1NMTXV0ZXgoU0VNX0lOREVG SU5JVEVfV0FJVCk7CisjZW5kaWYgLyogQ0tfU1NMICovCisjZW5kaWYgLyogT1MyICovCisgICAg ICAgIHkgPSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVHVybiBvbiBub25ibG9ja2lu ZyByZWFkcyAqLworICAgICAgICB6ID0gc29ja2V0X2lvY3RsKHR0eWZkLEZJT05CSU8sJnkpOwor ICAgICAgICBkZWJ1ZyhGMTExLCJuZXR0Y2hrIEZJT05CSU8iLCJvbiIseik7CisjaWZkZWYgT1My CisjaWZkZWYgQ0tfU1NMCisgICAgICAgIFJlbGVhc2VTU0xNdXRleCgpOworI2VuZGlmIC8qIENL X1NTTCAqLworI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIE5PTl9CTE9DS19JTyAqLworI2lm ZGVmIE5UX1RDUF9PVkVSTEFQUEVECisgICAgICAgIGlvbm9ibG9jayA9IDE7ICAgICAgICAgICAg ICAgICAgLyogRm9yIE92ZXJsYXBwZWQgSS9PICovCisjZW5kaWYgLyogTlRfVENQX09WRVJMQVBQ RUQgKi8KKyNpZmRlZiBDS19TU0wKKyAgICAgICAgaWYgKCBzc2xfYWN0aXZlX2ZsYWcgfHwgdGxz X2FjdGl2ZV9mbGFnICkgeworI2lmZGVmIE9TMgorCSAgc3NsX3JlYWQ6CisgICAgICAgICAgICB4 ID0gU1NMX3JlYWQoIHNzbF9hY3RpdmVfZmxhZz9zc2xfY29uOnRsc19jb24sCisgICAgICAgICAg ICAgICAgICAgICAgICAgICZ0dGlidWZbdHRpYnArdHRpYm5dLAorICAgICAgICAgICAgICAgICAg ICAgICAgICBUVElCVUZMLXR0aWJwLXR0aWJuICk7CisgICAgICAgICAgICBzd2l0Y2ggKFNTTF9n ZXRfZXJyb3Ioc3NsX2FjdGl2ZV9mbGFnP3NzbF9jb246dGxzX2Nvbix4KSkgeworICAgICAgICAg ICAgY2FzZSBTU0xfRVJST1JfTk9ORToKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJuZXR0 Y2hrIFNTTF9FUlJPUl9OT05FIiwieCIseCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICAgICBjYXNlIFNTTF9FUlJPUl9XQU5UX1dSSVRFOgorICAgICAgICAgICAgICAgIGRlYnVn KEYxMDAsIm5ldHRjaGsgU1NMX0VSUk9SX1dBTlRfV1JJVEUiLCIiLDApOworICAgICAgICAgICAg ICAgIHggPSAtMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgU1NM X0VSUk9SX1dBTlRfUkVBRDoKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJuZXR0Y2hrIFNT TF9FUlJPUl9XQU5UX1JFQUQiLCIiLDApOworICAgICAgICAgICAgICAgIHggPSAtMTsKKyAgICAg ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgU1NMX0VSUk9SX1NZU0NBTEw6Cisg ICAgICAgICAgICAgICAgaWYgKCB4ID09IDAgKSB7IC8qIEVPRiAqLworICAgICAgICAgICAgICAg ICAgICBuZXRjbG9zKCk7CisgICAgICAgICAgICAgICAgICAgIHJjID0gLTE7CisgICAgICAgICAg ICAgICAgICAgIGdvdG8gbmV0dGNoa19yZXR1cm47CisgICAgICAgICAgICAgIH0gZWxzZSB7Cisj aWZkZWYgTlQKKyAgICAgICAgICAgICAgICAgIGludCBnbGUgPSBHZXRMYXN0RXJyb3IoKTsKKyNl bmRpZiAvKiBOVCAqLworI2lmbmRlZiBOT05fQkxPQ0tfSU8KKyNpZmRlZiBPUzIKKyNpZmRlZiBD S19TU0wKKwkJICBSZXF1ZXN0U1NMTXV0ZXgoU0VNX0lOREVGSU5JVEVfV0FJVCk7CisjZW5kaWYg LyogQ0tfU1NMICovCisjZW5kaWYgLyogT1MyICovCisJCSAgeSA9IDA7ICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBUdXJuIG9mZiBub25ibG9ja2luZyByZWFkcyAqLworCQkgIHogPSBzb2Nr ZXRfaW9jdGwodHR5ZmQsRklPTkJJTywmeSk7CisJCSAgZGVidWcoRjExMSwibmV0dGNoayBGSU9O QklPIiwib2ZmIix6KTsKKyNpZmRlZiBPUzIKKyNpZmRlZiBDS19TU0wKKwkJICBSZWxlYXNlU1NM TXV0ZXgoKTsKKyNlbmRpZiAvKiBDS19TU0wgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAv KiBOT05fQkxPQ0tfSU8gKi8KKyNpZmRlZiBOVF9UQ1BfT1ZFUkxBUFBFRAorCQkgIGlvbm9ibG9j ayA9IDA7ICAgICAgICAgICAgICAgICAgLyogRm9yIE92ZXJsYXBwZWQgSS9PICovCisjZW5kaWYg LyogTlRfVENQX09WRVJMQVBQRUQgKi8KKyNpZmRlZiBOVAorICAgICAgICAgICAgICAgICAgZGVi dWcoRjExMSwibmV0dGNoayBTU0xfRVJST1JfU1lTQ0FMTCIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgIkdldExhc3RFcnJvcigpIixnbGUpOworICAgICAgICAgICAgICAgICAgcmMgPSBvczJz b2NrZXRlcnJvcihnbGUpOworICAgICAgICAgICAgICAgICAgaWYgKHJjID09IC0xKQorICAgICAg ICAgICAgICAgICAgICAgIHJjID0gLTI7CisgICAgICAgICAgICAgICAgICBlbHNlIGlmICggcmMg PT0gLTIgKQorICAgICAgICAgICAgICAgICAgICAgIHJjID0gLTE7CisJCSAgZ290byBuZXR0Y2hr X3JldHVybjsKKyNlbmRpZiAvKiBOVCAqLworICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICAgICAgIH0KKyAgICAgICAgICBjYXNlIFNTTF9FUlJPUl9XQU5UX1g1MDlfTE9PS1VQOgor ICAgICAgICAgICAgICAgIGRlYnVnKEYxMDAsIm5ldHRjaGsgU1NMX0VSUk9SX1dBTlRfWDUwOV9M T09LVVAiLCIiLDApOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBT U0xfRVJST1JfU1NMOgorICAgICAgICAgICAgICAgIGlmIChiaW9fZXJyIT1OVUxMKSB7CisgICAg ICAgICAgICAgICAgICAgIGludCBsZW47CisgICAgICAgICAgICAgICAgICAgIGV4dGVybiBjaGFy IHNzbF9lcnJbXTsKKyAgICAgICAgICAgICAgICAgICAgQklPX3ByaW50ZihiaW9fZXJyLCJuZXR0 Y2hrKCkgU1NMX0VSUk9SX1NTTFxuIik7CisgICAgICAgICAgICAgICAgICAgIEVSUl9wcmludF9l cnJvcnMoYmlvX2Vycik7CisgICAgICAgICAgICAgICAgICAgIGxlbiA9IEJJT19yZWFkKGJpb19l cnIsc3NsX2VycixTU0xfRVJSX0JGU1opOworICAgICAgICAgICAgICAgICAgICBzc2xfZXJyW2xl biA8IFNTTF9FUlJfQkZTWiA/IGxlbiA6IFNTTF9FUlJfQkZTWl0gPSAnXDAnOworICAgICAgICAg ICAgICAgICAgICBkZWJ1ZyhGMTEwLCJuZXR0Y2hrIFNTTF9FUlJPUl9TU0wiLHNzbF9lcnIsMCk7 CisgICAgICAgICAgICAgICAgICAgIGlmIChzc2xfZGVidWdfZmxhZykKKyAgICAgICAgICAgICAg ICAgICAgICAgIHByaW50Zihzc2xfZXJyKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNz bF9kZWJ1Z19mbGFnKSB7CisgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDAsIm5ldHRjaGsg U1NMX0VSUk9SX1NTTCIsIiIsMCk7CisgICAgICAgICAgICAgICAgICAgIGZmbHVzaChzdGRlcnIp OworICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwibmV0dGNoaygpIFNTTF9FUlJP Ul9TU0xcbiIpOworICAgICAgICAgICAgICAgICAgICBFUlJfcHJpbnRfZXJyb3JzX2ZwKHN0ZGVy cik7CisgICAgICAgICAgICAgICAgfQorI2lmZGVmIENPTU1FTlQKKyAgICAgICAgICAgICAgICBu ZXRjbG9zKCk7CisgICAgICAgICAgICAgICAgcmMgPSAtMTsKKwkJZ290byBuZXR0Y2hrX3JldHVy bjsKKyNlbHNlCisgICAgICAgICAgICAgICAgeCA9IC0xOworCQlicmVhazsKKyNlbmRpZgorICAg ICAgICAgIGNhc2UgU1NMX0VSUk9SX1pFUk9fUkVUVVJOOgorICAgICAgICAgICAgICAgIGRlYnVn KEYxMDAsIm5ldHRjaGsgU1NMX0VSUk9SX1pFUk9fUkVUVVJOIiwiIiwwKTsKKyAgICAgICAgICAg ICAgICBuZXRjbG9zKCk7CisgICAgICAgICAgICAgICAgcmMgPSAtMTsKKyAgICAgICAgICAgICAg ICBnb3RvIG5ldHRjaGtfcmV0dXJuOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg ICAgICBkZWJ1ZyhGMTAwLCJuZXR0Y2hrIFNTTF9FUlJPUl8/Pz8/PyIsIiIsMCk7CisgICAgICAg ICAgICAgICAgbmV0Y2xvcygpOworICAgICAgICAgICAgICAgIHJjID0gLTE7CisgICAgICAgICAg ICAgICAgZ290byBuZXR0Y2hrX3JldHVybjsKKyAgICAgICAgICAgIH0KKyNlbHNlIC8qIE9TMiAq LworCSAgICAvKiBEbyBub3QgYmxvY2sgKi8KKwkgICAgeCA9IC0xOworI2VuZGlmIC8qIE9TMiAq LworICAgICAgICB9IGVsc2UKKyNlbmRpZiAvKiBDS19TU0wgKi8KKyAgICAgICAgeworI2lmZGVm IE9TMgorICAgICAgICB4ID0gc29ja2V0X3JlYWQodHR5ZmQsJnR0aWJ1Zlt0dGlicCt0dGlibl0s CisgICAgICAgICAgICAgICAgICAgICAgICAgVFRJQlVGTC10dGlicC10dGlibik7ICAvKiBSZXR1 cm5zIC0xIGlmIG5vIGRhdGEgKi8KKyNlbHNlIC8qIE9TMiAqLworICAgICAgICB4ID0gc29ja2V0 X3JlYWQodHR5ZmQsJmMsMSk7ICAgIC8qIFJldHVybnMgLTEgaWYgbm8gZGF0YSAqLworI2VuZGlm IC8qIE9TMiAqLworICAgICAgICB9CisgICAgICAgIHNfZXJybm8gPSBzb2NrZXRfZXJybm87ICAg ICAgICAgLyogc29ja2V0X2Vycm5vIG1heSBiZSBhIGZ1bmN0aW9uICovCisgICAgICAgIGRlYnVn KEYxMDEsIm5ldHRjaGsgc29ja2V0X3JlYWQiLCIiLHgpOworCisjaWZuZGVmIE5PTl9CTE9DS19J TworI2lmZGVmIE9TMgorI2lmZGVmIENLX1NTTAorICAgICAgICBSZXF1ZXN0U1NMTXV0ZXgoU0VN X0lOREVGSU5JVEVfV0FJVCk7CisjZW5kaWYgLyogQ0tfU1NMICovCisjZW5kaWYgLyogT1MyICov CisgICAgICAgIHkgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVHVybiBvZmYgbm9u YmxvY2tpbmcgcmVhZHMgKi8KKyAgICAgICAgeiA9IHNvY2tldF9pb2N0bCh0dHlmZCxGSU9OQklP LCZ5KTsKKyAgICAgICAgZGVidWcoRjExMSwibmV0dGNoayBGSU9OQklPIiwib2ZmIix6KTsKKyNp ZmRlZiBPUzIKKyNpZmRlZiBDS19TU0wKKyAgICAgICAgUmVsZWFzZVNTTE11dGV4KCk7CisjZW5k aWYgLyogQ0tfU1NMICovCisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogTk9OX0JMT0NLX0lP ICovCisjaWZkZWYgTlRfVENQX09WRVJMQVBQRUQKKyAgICAgICAgaW9ub2Jsb2NrID0gMDsgICAg ICAgICAgICAgICAgICAvKiBGb3IgT3ZlcmxhcHBlZCBJL08gKi8KKyNlbmRpZiAvKiBOVF9UQ1Bf T1ZFUkxBUFBFRCAqLworCisgICAgICAgIGlmICh4ID09IC0xKSB7CisgICAgICAgICAgICBkZWJ1 ZyhGMTAxLCJuZXR0Y2hrIHNvY2tldF9yZWFkIGVycm5vIiwiIixzX2Vycm5vKTsKKyNpZmRlZiBP UzIKKyAgICAgICAgICAgIGlmIChvczJzb2NrZXRlcnJvcihzX2Vycm5vKSA8IDApIHsKKyAgICAg ICAgICAgICAgICByYyA9IC0xOworICAgICAgICAgICAgICAgIGdvdG8gbmV0dGNoa19yZXR1cm47 CisgICAgICAgICAgICB9CisjZW5kaWYgLyogT1MyICovCisgICAgICAgIH0gZWxzZSBpZiAoeCA9 PSAwKSB7CisgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJuZXR0Y2hrIGNvbm5lY3Rpb24gY2xvc2Vk IiwiIiwwKTsKKyAgICAgICAgICAgIG5ldGNsb3MoKTsgICAgICAgICAgICAgICAgICAvKiAqKiog KioqICovCisgICAgICAgICAgICByYyA9IC0xOworICAgICAgICAgICAgZ290byBuZXR0Y2hrX3Jl dHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAoeCA+PSAxKSB7ICAgICAgICAgICAgICAgICAg IC8qIE9vcHMsIGFjdHVhbGx5IGdvdCBhIGJ5dGU/ICovCisjaWZkZWYgT1MyCisgICAgICAgICAg ICAvKiBJbiBPUy8yIHdlIHJlYWQgZGlyZWN0bHkgaW50byB0dGlidWZbXSAqLworICAgICAgICAg ICAgY2toZXhkdW1wKCJuZXR0Y2hrIGdvdCByZWFsIGRhdGEiLCZ0dGlidWZbdHRpYnArdHRpYm5d LHgpOworICAgICAgICAgICAgdHRpYm4gKz0geDsKKyNlbHNlIC8qIE9TMiAqLworI2lmZGVmIENL X1NTTAorCSAgICBpZiAoIHNzbF9hY3RpdmVfZmxhZyB8fCB0bHNfYWN0aXZlX2ZsYWcgKSB7CisJ CWNraGV4ZHVtcCgibmV0dGNoayBnb3QgcmVhbCBkYXRhIiwmdHRpYnVmW3R0aWJwK3R0aWJuXSx4 KTsKKwkJdHRpYm4gKz0geDsKKwkgICAgfSBlbHNlIAorI2VuZGlmIC8qIENLX1NTTCAqLworCSAg ICB7CisJCWRlYnVnKEYxMDEsIm5ldHRjaGsgc29ja2V0X3JlYWQgY2hhciIsIiIsYyk7CisJCWRl YnVnKEYxMDEsIm5ldHRjaGsgdHRpYnAiLCIiLHR0aWJwKTsKKwkJZGVidWcoRjEwMSwibmV0dGNo ayB0dGlibiIsIiIsdHRpYm4pOworLyoKKyAgSW4gdGhlIGNhc2Ugb2YgT3ZlcmxhcHBlZCBJL08g dGhlIGNoYXJhY3RlciB3b3VsZCBoYXZlIGNvbWUgZnJvbQorICB0aGUgYmVnaW5uaW5nIG9mIHRo ZSBidWZmZXIsIHNvIHB1dCBpdCBiYWNrLgorKi8KKwkJaWYgKHR0aWJwID4gMCkgeworCQkgICAg dHRpYnAtLTsKKwkJICAgIHR0aWJ1Zlt0dGlicF0gPSBjOworCQkgICAgdHRpYm4rKzsKKwkJfSBl bHNlIHsKKwkJICAgIHR0aWJ1Zlt0dGlicCt0dGlibl0gPSBjOworCQkgICAgdHRpYm4rKzsKKwkJ fQorCSAgICB9CisjZW5kaWYgLyogT1MyICovCisgICAgICAgIH0KKyNlbHNlIC8qIE5PQ09VTlQg Ki8KKyAgICAgICAgaWYgKHR0bmV0ID09IE5FVF9UQ1BCKSB7CisgICAgICAgICAgICBjaGFyIGR1 bW15OworICAgICAgICAgICAgeCA9IHJlYWQodHR5ZmQsJmR1bW15LDApOyAgIC8qIFRyeSB0byBy ZWFkIG5vdGhpbmcgKi8KKyAgICAgICAgICAgIGlmICh4IDwgMCkgeyAgICAgICAgICAgICAgICAv KiAiQ29ubmVjdGlvbiByZXNldCBieSBwZWVyIiAqLworICAgICAgICAgICAgICAgIHBlcnJvcigi VENQL0lQIik7ICAgICAgIC8qIG9yIHNvbWVzdWNoLi4uICovCisgICAgICAgICAgICAgICAgdHRj bG9zKDApOyAgICAgICAgICAgICAgLyogQ2xvc2Ugb3VyIGVuZCB0b28uICovCisgICAgICAgICAg ICAgICAgcmMgPSAtMTsKKyAgICAgICAgICAgICAgICBnb3RvIG5ldHRjaGtfcmV0dXJuOworICAg ICAgICAgICAgfQorICAgICAgICB9CisjZW5kaWYgLyogTk9DT1VOVCAqLworICAgIH0KKyNpZmRl ZiBDS19LRVJCRVJPUworI2lmZGVmIEtSQjQKKyNpZmRlZiBSTE9HQ09ERQorICAgIGlmICh0dG5w cm90byA9PSBOUF9FSzRMT0dJTikKKyAgICAgIGNvdW50ICs9IGtyYjRfZGVzX2F2YWlsKHR0eWZk KTsKKyNlbmRpZiAvKiBSTE9HQ09ERSAqLworI2VuZGlmIC8qIEtSQjQgKi8KKyNpZmRlZiBLUkI1 CisjaWZkZWYgUkxPR0NPREUKKyAgICBpZiAodHRucHJvdG8gPT0gTlBfRUs1TE9HSU4pCisgICAg ICBjb3VudCArPSBrcmI1X2Rlc19hdmFpbCh0dHlmZCk7CisjZW5kaWYgLyogUkxPR0NPREUgKi8K KyNpZmRlZiBLUkI1X1UyVQorICAgIGlmICh0dG5wcm90byA9PSBOUF9LNVUyVSkKKyAgICAgIGNv dW50ICs9IGtyYjVfdTJ1X2F2YWlsKHR0eWZkKTsKKyNlbmRpZiAvKiBLUkI1X1UyVSAqLworI2Vu ZGlmIC8qIEtSQjUgKi8KKyNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLworCisgICAgZGVidWcoRjEw MSwibmV0dGNoayByZXR1cm5zIiwiIixjb3VudCt0dGlibik7CisgICAgcmMgPSBjb3VudCArIHR0 aWJuOworCisgIG5ldHRjaGtfcmV0dXJuOgorI2lmZGVmIE9TMgorICAgIFJlbGVhc2VUQ1BJUE11 dGV4KCk7CisjZW5kaWYgLyogT1MyICovCisgICAgcmV0dXJuKHJjKTsKKworI2Vsc2UgLyogTm90 IFRDUElQTElCICovCisvKgorICBVTklYIGp1c3QgdXNlcyB0dGNoaygpLCBpbiB3aGljaCB0aGUg aW9jdGwoKSBjYWxscyBvbiB0aGUgZmlsZSBkZXNjcmlwdG9yCisgIHNlZW0gdG8gd29yayBPSy4K KyovCisgICAgcmV0dXJuKHR0Y2hrKCkpOworI2VuZGlmIC8qIFRDUElQTElCICovCisvKgorICBC dXQgd2hhdCBhYm91dCBYLjI1PworKi8KK30KKworI2lmbmRlZiBPUzIKK1ZPSUQKK25ldHRvdXQo aSkgaW50IGk7IHsgICAgICAgICAgICAgICAgICAgICAvKiBDYXRjaCB0aGUgYWxhcm0gaW50ZXJy dXB0cyAqLworICAgIGRlYnVnKEYxMDAsIm5ldHRvdXQgY2F1Z2h0IHRpbWVvdXQiLCIiLDApOwor ICAgIHR0aW1vZmYoKTsKKyAgICBja2xvbmdqbXAobmpidWYsIC0xKTsKK30KKyNlbmRpZiAvKiAh T1MyICovCisKKyNpZmRlZiBUQ1BJUExJQgorCitWT0lECisjaWZkZWYgQ0tfQU5TSUMKK2RvbmV0 aW5jKHZvaWQgKiB0aHJlYWRpbmZvKQorI2Vsc2UgLyogQ0tfQU5TSUMgKi8KK2RvbmV0aW5jKHRo cmVhZGluZm8pIFZPSUQgKiB0aHJlYWRpbmZvOworI2VuZGlmIC8qIENLX0FOU0lDICovCisvKiBk b25ldGluYyAqLyB7CisjaWZkZWYgTlRTSUcKKyAgICBleHRlcm4gaW50IFRsc0luZGV4OworICAg IHNldGludCgpOworICAgIGlmICh0aHJlYWRpbmZvKSB7ICAgICAgICAgICAgICAgICAgIC8qIFRo cmVhZCBsb2NhbCBzdG9yYWdlLi4uICovCisgICAgICAgIFRsc1NldFZhbHVlKFRsc0luZGV4LHRo cmVhZGluZm8pOworICAgIH0KKyNlbmRpZiAvKiBOVFNJRyAqLworI2lmZGVmIENLX0xPR0lOCisj aWZkZWYgTlQKKyNpZmRlZiBJS1NECisgICAgaWYgKGluc2VydmVyKQorICAgICAgc2V0bnRjcmVk cygpOworI2VuZGlmIC8qIElLU0QgKi8KKyNlbmRpZiAvKiBOVCAqLworI2VuZGlmIC8qIENLX0xP R0lOICovCisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgaWYgKHR0YnVmcigpIDwgMCkgICAgICAg ICAgICAgICAvKiBLZWVwIHRyeWluZyB0byByZWZpbGwgaXQuICovCisgICAgICAgICAgYnJlYWs7 ICAgICAgICAgICAgICAgICAgICAgICAgLyogVGlsbCB3ZSBnZXQgYW4gZXJyb3IuICovCisgICAg ICAgIGlmICh0dGlibiA+IDApICAgICAgICAgICAgICAgICAgLyogT3Igd2UgZ2V0IGEgY2hhcmFj dGVyLiAqLworICAgICAgICAgIGJyZWFrOworICAgIH0KK30KKyNlbmRpZiAvKiBUQ1BJUExJQiAq LworCitWT0lECisjaWZkZWYgQ0tfQU5TSUMKK2ZhaWxuZXRpbmModm9pZCAqIHRocmVhZGluZm8p CisjZWxzZSAvKiBDS19BTlNJQyAqLworZmFpbG5ldGluYyh0aHJlYWRpbmZvKSBWT0lEICogdGhy ZWFkaW5mbzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogZmFpbG5ldGluYyAqLyB7CisgICAg OyAvKiBOb3RoaW5nIHRvIGRvIG9uIGFuIGVycm9yICovCit9CisKKy8qIE4gRSBUIFggSSBOIC0t IElucHV0IGJsb2NrIG9mIGNoYXJhY3RlcnMgZnJvbSBuZXR3b3JrICovCisKK2ludAorbmV0eGlu KG4sYnVmKSBpbnQgbjsgQ0hBUiAqIGJ1ZjsgeworICAgIGludCBsZW4sIGksIGo7CisjaWZkZWYg VENQSVBMSUIKKyAgICBpbnQgcmM7CisjZW5kaWYgLyogVENQSVBMSUIgKi8KKworICAgIGlmICh0 dHlmZCA9PSAtMSkgeworICAgICAgICBkZWJ1ZyhGMTAwLCJuZXR4aW4gc29ja2V0IGlzIGNsb3Nl ZCIsIiIsMCk7CisgICAgICAgIHJldHVybigtMik7CisgICAgfQorI2lmZGVmIENLX0tFUkJFUk9T CisjaWZkZWYgS1JCNAorI2lmZGVmIFJMT0dDT0RFCisgICAgaWYgKHR0bnByb3RvID09IE5QX0VL NExPR0lOKSB7CisgICAgICAgIGlmICgobGVuID0ga3JiNF9kZXNfcmVhZCh0dHlmZCxidWYsbikp IDwgMCkKKyAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICBlbHNlCisgICAgICAgICAgcmV0 dXJuKGxlbik7CisgICAgfQorI2VuZGlmIC8qIFJMT0dDT0RFICovCisjZW5kaWYgLyogS1JCNCAq LworI2lmZGVmIEtSQjUKKyNpZmRlZiBSTE9HQ09ERQorICAgIGlmICh0dG5wcm90byA9PSBOUF9F SzVMT0dJTikgeworICAgICAgICBpZiAoKGxlbiA9IGtyYjVfZGVzX3JlYWQodHR5ZmQsKGNoYXIg KilidWYsbiwwKSkgPCAwKQorICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAgIGVsc2UKKyAg ICAgICAgICByZXR1cm4obGVuKTsKKyAgICB9CisjZW5kaWYgLyogUkxPR0NPREUgKi8KKyNpZmRl ZiBLUkI1X1UyVQorICAgIGlmICh0dG5wcm90byA9PSBOUF9LNVUyVSkgeworICAgICAgICBpZiAo KGxlbiA9IGtyYjVfdTJ1X3JlYWQodHR5ZmQsKGNoYXIgKilidWYsbikpIDwgMCkKKyAgICAgICAg ICByZXR1cm4oLTEpOworICAgICAgICBlbHNlCisgICAgICAgICAgcmV0dXJuKGxlbik7CisgICAg fQorI2VuZGlmIC8qIEtSQjVfVTJVICovCisjZW5kaWYgLyogS1JCNSAqLworI2VuZGlmIC8qIENL X0tFUkJFUk9TICovCisKKyNpZmRlZiBUQ1BJUExJQgorI2lmZGVmIE9TMgorICAgIFJlcXVlc3RU Q1BJUE11dGV4KFNFTV9JTkRFRklOSVRFX1dBSVQpOworI2VuZGlmIC8qIE9TMiAqLworICAgIGlm ICh0dGlibiA9PSAwKQorICAgICAgaWYgKChyYyA9IHR0YnVmcigpKSA8PSAwKSB7CisjaWZkZWYg T1MyCisgICAgICAgIFJlbGVhc2VUQ1BJUE11dGV4KCk7CisjZW5kaWYgLyogT1MyICovCisgICAg ICAgIHJldHVybihyYyk7CisgICAgICB9CisKKyAgICBpZiAodHRpYm4gPD0gbikgeworICAgICAg ICBsZW4gPSB0dGlibjsKKyAgICAgICAgbWVtY3B5KGJ1ZiwmdHRpYnVmW3R0aWJwXSxsZW4pOyAg ICAgICAgIC8qIHNhZmUgKi8KKyAgICAgICAgdHRpYnAgKz0gbGVuOworICAgICAgICB0dGlibiA9 IDA7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbWVtY3B5KGJ1ZiwmdHRpYnVmW3R0aWJwXSxuKTsg ICAgICAgICAgIC8qIHNhZmUgKi8KKyAgICAgICAgdHRpYnAgKz0gbjsKKyAgICAgICAgdHRpYm4g LT0gbjsKKyAgICAgICAgbGVuID0gbjsKKyAgICB9CisjaWZkZWYgT1MyCisgICAgUmVsZWFzZVRD UElQTXV0ZXgoKTsKKyNlbmRpZiAvKiBPUzIgKi8KKyNlbHNlIC8qIFRDUElQTElCICovCisgICAg Zm9yIChpID0gMDsgaSA8IG47IGkrKykgeworICAgICAgICBpZiAoKGogPSBuZXRpbmMoMCkpIDwg MCkgeworICAgICAgICAgICAgaWYgKGogPCAtMSkKKyAgICAgICAgICAgICAgcmV0dXJuKGopOwor ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg ICBidWZbaV0gPSBqOworICAgIH0KKyAgICBsZW4gPSBpOworI2VuZGlmIC8qIFRDUElQTElCICov CisKKyNpZmRlZiBDT01NRU5UCisjaWZkZWYgQ0tfRU5DUllQVElPTgorICAgIC8qIFRoaXMgd291 bGQgYmUgZ3JlYXQgaWYgaXQgd29ya2VkLiAgQnV0IHdoYXQgaWYgdGhlIGJ1ZmZlciB3ZSByZWFk ICAqLworICAgIC8qIGNvbnRhaW5zIGEgdGVsbmV0IG5lZ290aWF0aW9uIHRoYXQgY2hhbmdlcyB0 aGUgc3RhdGUgb2YgdGhlICAgICAgICAqLworICAgIC8qIGVuY3J5cHRpb24uICBJZiBzbywgd2Ug d291bGQgYmUgZWl0aGVyIGRlY3J5cHRpbmcgdW5lbmNyeXB0ZWQgdGV4dCAqLworICAgIC8qIG9y IG5vdCBkZWNyeXB0aW5nIGVuY3J5cHRlZCB0ZXh0LiAgU28gd2UgbXVzdCBtb3ZlIHRoaXMgY2Fs bCB0byAgICAqLworICAgIC8qIGFsbCBmdW5jdGlvbnMgdGhhdCBjYWxsIHR0eGluKCkuICBJbiBP UzIgdGhhdCBtZWFucyBvczJfbmV0eGluKCkgICAqLworICAgIC8qIHdoZXJlIHRoZSBUZWxuZXQg TmVnb3RpYXRpb25zIGFyZSBoYW5kbGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAg IGlmICh1X2VuY3J5cHQpCisgICAgICBja190bl9kZWNyeXB0KGJ1ZixsZW4pOworI2VuZGlmIC8q IENLX0VOQ1JZUFRJT04gKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisKKyAgICByZXR1cm4obGVu KTsKK30KKworLyogIE4gRSBUIEkgTiBDIC0tICBJbnB1dCBjaGFyYWN0ZXIgZnJvbSBuZXR3b3Jr ICovCisKKyNpZmRlZiBORVRMRUJVRgorI2RlZmluZSBMRUJVRgorI2VuZGlmIC8qIE5FVExFQlVG ICovCisjaWZkZWYgVFRMRUJVRgorI2RlZmluZSBMRUJVRgorI2VuZGlmIC8qIFRUTEVCVUYgKi8K KyNpZm5kZWYgTEVCVUYKKyNpZmRlZiBPUzIKKyNkZWZpbmUgTEVCVUYKKyNlbmRpZiAvKiBPUzIg Ki8KKyNlbmRpZiAvKiBMRUJVRiAqLworCitpbnQKK25ldGluYyh0aW1vKSBpbnQgdGltbzsgewor I2lmZGVmIFRDUElQTElCCisgICAgaW50IHg7IHVuc2lnbmVkIGNoYXIgYzsgICAgICAgICAgICAg LyogVGhlIGxvY2Fscy4gKi8KKworI2lmZGVmIE5FVExFQlVGCisgICAgaWYgKHR0cHVzaCA+PSAw KSB7CisgICAgICAgIGRlYnVnKEYxMTEsIm5ldGluYyIsInR0cHVzaCIsdHRwdXNoKTsKKyAgICAg ICAgYyA9IHR0cHVzaDsKKyAgICAgICAgdHRwdXNoID0gLTE7CisgICAgICAgIHJldHVybihjKTsK KyAgICB9CisgICAgaWYgKGxlX2RhdGEpIHsKKyAgICAgICAgaWYgKGxlX2dldGNoYXIoKENIQVIg KikmYykgPiAwKSB7CisgICAgICAgICAgICBkZWJ1ZyhGMTExLCJuZXRpbmMgbGVfZ2V0Y2hhciIs ImMiLGMpOworICAgICAgICAgICAgcmV0dXJuKGMpOworICAgICAgICB9CisgICAgfQorI2VuZGlm IC8qIE5FVExFQlVGICovCisKKyAgICBpZiAodHR5ZmQgPT0gLTEpIHsKKyAgICAgICAgZGVidWco RjEwMCwibmV0aW5jIHNvY2tldCBpcyBjbG9zZWQiLCIiLDApOworICAgICAgICByZXR1cm4oLTIp OworICAgIH0KKworI2lmZGVmIENLX0tFUkJFUk9TCisjaWZkZWYgS1JCNAorI2lmZGVmIFJMT0dD T0RFCisgICAgaWYgKHR0bnByb3RvID09IE5QX0VLNExPR0lOKSB7CisgICAgICAgIGlmICgoeCA9 IGtyYjRfZGVzX3JlYWQodHR5ZmQsJmMsMSkpID09IDApCisgICAgICAgICAgcmV0dXJuKC0xKTsK KyAgICAgICAgZWxzZSBpZiAoeCA8IDApCisgICAgICAgICAgcmV0dXJuKC0yKTsKKyAgICAgICAg ZWxzZQorICAgICAgICAgIHJldHVybihjKTsKKyAgICB9CisjZW5kaWYgLyogUkxPR0NPREUgKi8K KyNlbmRpZiAvKiBLUkI0ICovCisjaWZkZWYgS1JCNQorI2lmZGVmIFJMT0dDT0RFCisgICAgaWYg KHR0bnByb3RvID09IE5QX0VLNUxPR0lOKSB7CisgICAgICAgIGlmICgoeCA9IGtyYjVfZGVzX3Jl YWQodHR5ZmQsJmMsMSwwKSkgPT0gMCkKKyAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICBl bHNlIGlmICh4IDwgMCkKKyAgICAgICAgICByZXR1cm4oLTIpOworICAgICAgICBlbHNlCisgICAg ICAgICAgcmV0dXJuKGMpOworICAgIH0KKyNlbmRpZiAvKiBSTE9HQ09ERSAqLworI2lmZGVmIEtS QjVfVTJVCisgICAgaWYgKHR0bnByb3RvID09IE5QX0s1VTJVKSB7CisgICAgICAgIGlmICgoeCA9 IGtyYjVfdTJ1X3JlYWQodHR5ZmQsJmMsMSkpID09IDApCisgICAgICAgICAgcmV0dXJuKC0xKTsK KyAgICAgICAgZWxzZSBpZiAoeCA8IDApCisgICAgICAgICAgcmV0dXJuKC0yKTsKKyAgICAgICAg ZWxzZQorICAgICAgICAgIHJldHVybihjKTsKKyAgICB9CisjZW5kaWYgLyogS1JCNV9VMlUgKi8K KyNlbmRpZiAvKiBLUkI1ICovCisjZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KKworI2lmZGVmIE9T MgorICAgIFJlcXVlc3RUQ1BJUE11dGV4KFNFTV9JTkRFRklOSVRFX1dBSVQpOworI2VuZGlmIC8q IE9TMiAqLworICAgIGlmICh0dGlibiA+IDApIHsgICAgICAgICAgICAgICAgICAgIC8qIFNvbWV0 aGluZyBpbiBpbnRlcm5hbCBidWZmZXI/ICovCisjaWZkZWYgQ09NTUVOVAorICAgICAgICBkZWJ1 ZyhGMTAwLCJuZXRpbmMgY2hhciBpbiBidWYiLCIiLDApOyAvKiBZZXMuICovCisjZW5kaWYgLyog Q09NTUVOVCAqLworICAgICAgICB4ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFN1 Y2Nlc3MuICovCisgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRWxz ZSBtdXN0IHJlYWQgZnJvbSBuZXR3b3JrLiAqLworICAgICAgICB4ID0gLTE7ICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIEFzc3VtZSBmYWlsdXJlLiAqLworI2lmZGVmIERFQlVHCisgICAgICAg IGRlYnVnKEYxMDEsIm5ldGluYyBnb2VzIHRvIG5ldCwgdGltbyIsIiIsdGltbyk7CisjZW5kaWYg LyogREVCVUcgKi8KKyNpZmRlZiBDS19TU0wKKyAgICAgICAgLyoKKyAgICAgICAgICogSW4gdGhl IGNhc2Ugb2YgT3BlblNTTCwgaXQgaXMgcG9zc2libGUgdGhhdCB0aGVyZSBpcyBzdGlsbAorICAg ICAgICAgKiBkYXRhIHdhaXRpbmcgaW4gdGhlIFNTTCBzZXNzaW9uIGJ1ZmZlcnMgdGhhdCBoYXMg bm90IHlldAorICAgICAgICAgKiBiZWVuIHJlYWQgYnkgS2VybWl0LiAgSWYgdGhpcyBpcyB0aGUg Y2FzZSB3ZSBtdXN0IHByb2Nlc3MKKyAgICAgICAgICogaXQgd2l0aG91dCBjYWxsaW5nIHNlbGVj dCgpIGJlY2F1c2Ugc2VsZWN0KCkgd2lsbCBub3QgcmV0dXJuCisgICAgICAgICAqIHdpdGggYW4g aW5kaWNhdGlvbiB0aGF0IHRoZXJlIGlzIGRhdGEgdG8gYmUgcmVhZCBmcm9tIHRoZQorICAgICAg ICAgKiBzb2NrZXQuICBJZiB0aGVyZSBpcyBubyBkYXRhIHBlbmRpbmcgaW4gdGhlIFNTTCBzZXNz aW9uCisgICAgICAgICAqIGJ1ZmZlcnMgdGhlbiBmYWxsIHRocm91Z2ggdG8gdGhlIHNlbGVjdCgp IGNvZGUgYW5kIHdhaXQgZm9yCisgICAgICAgICAqIHNvbWUgZGF0YSB0byBhcnJpdmUuCisgICAg ICAgICAqLworICAgICAgICBpZiAoc3NsX2FjdGl2ZV9mbGFnKSB7CisgICAgICAgICAgICB4ID0g U1NMX3BlbmRpbmcoc3NsX2Nvbik7CisgICAgICAgICAgICBpZiAoeCA8IDApIHsKKyAgICAgICAg ICAgICAgICBkZWJ1ZyhGMTExLCJuZXRpbmMiLCJTU0xfcGVuZGluZyBlcnJvciIseCk7CisgICAg ICAgICAgICAgICAgbmV0Y2xvcygpOworI2lmZGVmIE9TMgorICAgICAgICAgICAgICAgIFJlbGVh c2VUQ1BJUE11dGV4KCk7CisjZW5kaWYgLyogT1MyICovCisgICAgICAgICAgICAgICAgcmV0dXJu KC0xKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoIHggPiAwICkgeworICAgICAgICAgICAgICAg IGlmICggdHRidWZyKCkgPj0gMCApIHsKKyAgICAgICAgICAgICAgICAgICAgeCA9IG5ldGluYyh0 aW1vKTsKKyNpZmRlZiBPUzIKKyAgICAgICAgICAgICAgICAgICAgUmVsZWFzZVRDUElQTXV0ZXgo KTsKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHgpOworICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHggPSAtMTsKKyAgICAg ICAgfSBlbHNlIGlmICh0bHNfYWN0aXZlX2ZsYWcpIHsKKyAgICAgICAgICAgIHggPSBTU0xfcGVu ZGluZyh0bHNfY29uKTsKKyAgICAgICAgICAgIGlmICh4IDwgMCkgeworICAgICAgICAgICAgICAg IGRlYnVnKEYxMTEsIm5ldGluYyIsIlRMU19wZW5kaW5nIGVycm9yIix4KTsKKyAgICAgICAgICAg ICAgICBuZXRjbG9zKCk7CisjaWZkZWYgT1MyCisgICAgICAgICAgICAgICAgUmVsZWFzZVRDUElQ TXV0ZXgoKTsKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAgICAgICAgICByZXR1cm4oLTEpOwor ICAgICAgICAgICAgfSBlbHNlIGlmICggeCA+IDAgKSB7CisgICAgICAgICAgICAgICAgaWYgKCB0 dGJ1ZnIoKSA+PSAwICkgeworICAgICAgICAgICAgICAgICAgICB4ID0gbmV0aW5jKHRpbW8pOwor I2lmZGVmIE9TMgorICAgICAgICAgICAgICAgICAgICBSZWxlYXNlVENQSVBNdXRleCgpOworI2Vu ZGlmIC8qIE9TMiAqLworICAgICAgICAgICAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgeCA9IC0xOworICAgICAgICB9Cisj ZW5kaWYgLyogQ0tfU1NMICovCisjaWZuZGVmIExFQlVGCisgICAgICAgIGlmICh0aW1vID09IDAp IHsgICAgICAgICAgICAgICAgLyogVW50aW1lZCBjYXNlLiAqLworICAgICAgICAgICAgd2hpbGUg KDEpIHsgICAgICAgICAgICAgICAgIC8qIFdhaXQgZm9yZXZlciBpZiBuZWNlc3NhcnkuICovCisg ICAgICAgICAgICAgICAgaWYgKHR0YnVmcigpIDwgMCkgICAgICAgLyogUmVmaWxsIGJ1ZmZlci4g Ki8KKyAgICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAvKiBFcnJvciwgZmFp bC4gKi8KKyAgICAgICAgICAgICAgICBpZiAodHRpYm4gPiAwKSB7ICAgICAgICAvKiBTdWNjZXNz LiAqLworICAgICAgICAgICAgICAgICAgICB4ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgYnJl YWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIFRpbWVkIGNhc2UuLi4gKi8KKyNlbmRpZiAvKiBMRUJV RiAqLworICAgICAgICAgIHsKKyNpZmRlZiBOVF9UQ1BfT1ZFUkxBUFBFRAorICAgICAgICAgICAg LyogVGhpcyBjb2RlIGlzIGZvciB1c2Ugb24gTlQgd2hlbiB3ZSBhcmUgdXNpbmcgKi8KKyAgICAg ICAgICAgIC8qIE92ZXJsYXBwZWQgSS9PIHRvIGhhbmRsZSByZWFkcy4gIEluIHRoZSBjYXNlICov CisgICAgICAgICAgICAvKiBvZiBvdXRzdGFuZGluZyByZWFkcyBzZWxlY3QoKSBkb2Vzbid0IHdv cmsgICAqLworCisgICAgICAgICAgICBpZiAoV2FpdEZvck92ZXJsYXBwZWRSZWFkRGF0YSh0aW1v KSkgeworICAgICAgICAgICAgICAgIHdoaWxlICgxKSB7CisgICAgICAgICAgICAgICAgICAgIGlm ICh0dGJ1ZnIoKSA8IDApICAgLyogS2VlcCB0cnlpbmcgdG8gcmVmaWxsIGl0LiAqLworICAgICAg ICAgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgIC8qIFRpbGwgd2UgZ2V0IGFuIGVycm9y LiAqLworICAgICAgICAgICAgICAgICAgICBpZiAodHRpYm4gPiAwKSB7ICAgIC8qIE9yIHdlIGdl dCBhIGNoYXJhY3Rlci4gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIHggPSAwOworICAgICAg ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICB9CisjZWxzZSAvKiBOVF9UQ1BfT1ZFUkxBUFBFRCAqLwor I2lmZGVmIEJTRFNFTEVDVAorICAgICAgICAgICAgZmRfc2V0IHJmZHM7CisgICAgICAgICAgICBz dHJ1Y3QgdGltZXZhbCB0djsKKyAgICAgICAgICAgIGludCB0aW1lb3V0ID0gdGltbyA8IDAgPyAt dGltbyA6IDEwMDAgKiB0aW1vOworICAgICAgICAgICAgZGVidWcoRjEwMSwibmV0aW5jIEJTRFNF TEVDVCIsIiIsdGltbyk7CisKKyAgICAgICAgICAgIGZvciAoIDsgdGltZW91dCA+PSAwOyB0aW1l b3V0IC09ICh0aW1vID8gMTAwIDogMCkpIHsKKyAgICAgICAgICAgICAgICBpbnQgcmM7CisgICAg ICAgICAgICAgICAgZGVidWcoRjExMSwibmV0aW5jIiwidGltZW91dCIsdGltZW91dCk7CisgICAg ICAgICAgICAgICAgLyogRG9uJ3QgbW92ZSBzZWxlY3QoKSBpbml0aWFsaXphdGlvbiBvdXQgb2Yg dGhlIGxvb3AuICovCisgICAgICAgICAgICAgICAgRkRfWkVSTygmcmZkcyk7CisgICAgICAgICAg ICAgICAgRkRfU0VUKHR0eWZkLCAmcmZkcyk7CisgICAgICAgICAgICAgICAgdHYudHZfc2VjICA9 IHR2LnR2X3VzZWMgPSAwTDsKKyAgICAgICAgICAgICAgICBpZiAodGltbykKKyAgICAgICAgICAg ICAgICAgIHR2LnR2X3VzZWMgPSAobG9uZykgMTAwMDAwTDsKKyAgICAgICAgICAgICAgICBlbHNl CisgICAgICAgICAgICAgICAgICB0di50dl9zZWMgPSAzMDsKKyNpZmRlZiBOVAorICAgICAgICAg ICAgICAgIFdTQVNhZmVUb0NhbmNlbCA9IDE7CisjZW5kaWYgLyogTlQgKi8KKyAgICAgICAgICAg ICAgICByYyA9IHNlbGVjdChGRF9TRVRTSVpFLAorI2lmZGVmIF9fREVDQworI2lmZGVmIElOVFNF TEVDVAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQgKikKKyNlbHNlIC8qIGRlZiBJ TlRTRUxFQ1QgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmRfc2V0ICopCisjZW5k aWYgLyogZGVmIElOVFNFTEVDVCBbZWxzZV0gKi8KKyNlbHNlIC8qIGRlZiBfX0RFQ0MgKi8KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoZmRfc2V0ICopCisjZW5kaWYgLyogZGVmIF9fREVD QyBbZWxzZV0gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcmZkcywgTlVMTCwgTlVM TCwgJnR2KTsKKyAgICAgICAgICAgICAgICBpZiAocmMgPCAwKSB7CisgICAgICAgICAgICAgICAg ICAgIGludCBzX2Vycm5vID0gc29ja2V0X2Vycm5vOworICAgICAgICAgICAgICAgICAgICBkZWJ1 ZyhGMTExLCJuZXRpbmMiLCJzZWxlY3QiLHJjKTsKKyAgICAgICAgICAgICAgICAgICAgZGVidWco RjExMSwibmV0aW5jIiwic29ja2V0X2Vycm5vIixzX2Vycm5vKTsKKyAgICAgICAgICAgICAgICAg ICAgaWYgKHNfZXJybm8pIHsKKyNpZmRlZiBPUzIKKyAgICAgICAgICAgICAgICAgICAgICAgIFJl bGVhc2VUQ1BJUE11dGV4KCk7CisjZW5kaWYgLyogT1MyICovCisgICAgICAgICAgICAgICAgICAg ICAgICByZXR1cm4oLTEpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg fQorICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsIm5ldGluYyIsInNlbGVjdCIscmMpOworI2lm ZGVmIE5UCisgICAgICAgICAgICAgICAgV1NBU2FmZVRvQ2FuY2VsID0gMDsKKyNlbmRpZiAvKiBO VCAqLworICAgICAgICAgICAgICAgIGlmICghRkRfSVNTRVQodHR5ZmQsICZyZmRzKSkgeworI2lm ZGVmIExFQlVGCisgICAgICAgICAgICAgICAgICAgIGlmIChsZV9pbmJ1ZigpID4gMCkgeworICAg ICAgICAgICAgICAgICAgICAgICAgdGltZW91dCA9IC0xOworICAgICAgICAgICAgICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBMRUJVRiAqLworICAg ICAgICAgICAgICAgICAgICAvKiBJZiB3YWl0aW5nIGZvcmV2ZXIgd2UgaGF2ZSBubyB3YXkgb2Yg a25vd2luZyBpZiB0aGUgKi8KKyAgICAgICAgICAgICAgICAgICAgLyogc29ja2V0IGNsb3NlZCBz byB0cnkgd3JpdGluZyBhIDAtbGVuZ3RoIFRDUCBwYWNrZXQgICovCisgICAgICAgICAgICAgICAg ICAgIC8qIHdoaWNoIHNob3VsZCBmb3JjZSBhbiBlcnJvciBpZiB0aGUgc29ja2V0IGlzIGNsb3Nl ZCAqLworICAgICAgICAgICAgICAgICAgICBpZiAoIXRpbW8pIHsKKyAgICAgICAgICAgICAgICAg ICAgICAgIGlmICgocmMgPSBzb2NrZXRfd3JpdGUodHR5ZmQsIiIsMCkpIDwgMCkgeworICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGludCBzX2Vycm5vID0gc29ja2V0X2Vycm5vOworICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsIm5ldGluYyBzb2NrZXRfd3JpdGUgZXJy b3IiLCIiLHNfZXJybm8pOworI2lmZGVmIE9TMgorICAgICAgICAgICAgICAgICAgICAgICAgICAg IGlmIChvczJzb2NrZXRlcnJvcihzX2Vycm5vKSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFJlbGVhc2VUQ1BJUE11dGV4KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICByZXR1cm4oLTIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICBSZWxlYXNlVENQSVBNdXRleCgpOworI2VuZGlmIC8qIE9TMiAq LworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybigtMSk7IC8qIENhbGwgaXQgYW4g aS9vIGVycm9yICovCisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICAgIHdoaWxlICgxKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh0dGJ1 ZnIoKSA8IDApIHsgLyogS2VlcCB0cnlpbmcgdG8gcmVmaWxsIGl0LiAqLworICAgICAgICAgICAg ICAgICAgICAgICAgdGltZW91dCA9IC0xOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7 ICAgICAgICAgIC8qIFRpbGwgd2UgZ2V0IGFuIGVycm9yLiAqLworICAgICAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICAgICAgICAgIGlmICh0dGlibiA+IDApIHsgICAgLyogT3Igd2UgZ2V0 IGEgY2hhcmFjdGVyLiAqLworICAgICAgICAgICAgICAgICAgICAgICAgeCA9IDA7CisgICAgICAg ICAgICAgICAgICAgICAgICB0aW1lb3V0ID0gLTE7CisgICAgICAgICAgICAgICAgICAgICAgICBi cmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIH0KKyNpZmRlZiBOVAorICAgICAgICAgICAgV1NBU2FmZVRvQ2FuY2VsID0gMDsKKyNlbmRp ZiAvKiBOVCAqLworI2Vsc2UgLyogIUJTRFNFTEVDVCAqLworI2lmZGVmIElCTVNFTEVDVAorLyoK KyAgV2FzIHVzZWQgYnkgT1MvMiwgY3VycmVudGx5IG5vdCB1c2VkLCBidXQgbWlnaHQgY29tZSBp biBoYW5keSBzb21lIGRheS4uLgorICAuLi4gYW5kIGl0IGNhbWUgaW4gaGFuZHkhICBGb3Igb3Vy IFRDUC9JUCBsYXllciwgaXQgYXZvaWRzIGFsbCB0aGUgZmRfc2V0CisgIGFuZCB0aW1ldmFsIHN0 dWZmIHNpbmNlIHRoaXMgaXMgdGhlIG9ubHkgcGxhY2Ugd2hlcmUgaXQgaXMgdXNlZC4KKyovCisg ICAgICAgICAgICBpbnQgc29ja2V0ID0gdHR5ZmQ7CisgICAgICAgICAgICBpbnQgdGltZW91dCA9 IHRpbW8gPCAwID8gLXRpbW8gOiAxMDAwICogdGltbzsKKworICAgICAgICAgICAgZGVidWcoRjEw MSwibmV0aW5jIElCTVNFTEVDVCIsIiIsdGltbyk7CisgICAgICAgICAgICBmb3IgKCA7IHRpbWVv dXQgPj0gMDsgdGltZW91dCAtPSAodGltbyA/IDEwMCA6IDApKSB7CisgICAgICAgICAgICAgICAg aWYgKHNlbGVjdCgmc29ja2V0LCAxLCAwLCAwLCAxMDBMKSA9PSAxKSB7CisgICAgICAgICAgICAg ICAgICAgIHdoaWxlICgxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHRidWZyKCkg PCAwKSB7IC8qIEtlZXAgdHJ5aW5nIHRvIHJlZmlsbCBpdC4gKi8KKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICB0aW1lb3V0ID0gLTE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl YWs7ICAgICAgLyogVGlsbCB3ZSBnZXQgYW4gZXJyb3IuICovCisgICAgICAgICAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHRpYm4gPiAwKSB7IC8qIE9yIHdl IGdldCBhIGNoYXJhY3Rlci4gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ID0gMDsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0ID0gLTE7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisjaWZkZWYgTEVCVUYKKyAgICAgICAg ICAgICAgICBlbHNlIGlmIChsZV9pbmJ1ZigpID4gMCkgIHsKKyAgICAgICAgICAgICAgICAgICAg dGltZW91dCA9IC0xOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg ICB9CisjZW5kaWYgLyogTEVCVUYgKi8KKyAgICAgICAgICAgIH0KKyNlbHNlIC8qICFJQk1TRUxF Q1QgKi8KKyNpZmRlZiBXSU5TT0NLCisgICAgICAgLyogQWN0dWFsbHksIHVuZGVyIFdpblNvY2sg d2UgaGF2ZSBhIGJldHRlciBtZWNoYW5pc20gdGhhbiBzZWxlY3QoKSAqLworICAgICAgIC8qIGZv ciBzZXR0aW5nIHRpbWVvdXRzIChTT19SQ1ZUSU1FTywgU09fU05EVElNRU8pICovCisgICAgICAg ICAgICBTT0NLRVQgc29ja2V0ID0gdHR5ZmQ7CisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJuZXRp bmMgTlRTRUxFQ1QiLCIiLHRpbW8pOworICAgICAgICAgICAgaWYgKHNldHNvY2tvcHQoc29ja2V0 LCBTT0xfU09DS0VULCBTT19SQ1ZUSU1FTywgKGNoYXIgKikmdGltbywKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzaXplb2YodGltbykpICA9PSBOT19FUlJPUikKKyAgICAgICAgICAgICAg d2hpbGUgKDEpIHsKKyAgICAgICAgICAgICAgICAgIGlmICh0dGJ1ZnIoKSA8IDApICAgICAvKiBL ZWVwIHRyeWluZyB0byByZWZpbGwgaXQuICovCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAg ICAgICAgICAgICAgLyogVGlsbCB3ZSBnZXQgYW4gZXJyb3IuICovCisgICAgICAgICAgICAgICAg ICBpZiAodHRpYm4gPiAwKSB7ICAgICAgLyogT3Igd2UgZ2V0IGEgY2hhcmFjdGVyLiAqLworICAg ICAgICAgICAgICAgICAgICAgIHggPSAwOworICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9CisjZWxzZSAvKiBXSU5TT0NLICov CisvKgorICBJZiB3ZSBjYW4ndCB1c2Ugc2VsZWN0KCksIHRoZW4gd2UgdXNlIHRoZSByZWd1bGFy IGFsYXJtKCkvc2lnbmFsKCkKKyAgdGltZW91dCBtZWNoYW5pc20uCisqLworICAgICAgICAgICAg ZGVidWcoRjEwMSwibmV0aW5jIGFsYXJtIiwiIix0aW1vKTsKKyAgICAgICAgICAgIHggPSBhbHJt X2V4ZWN1dGUoY2tqYWRkcihuamJ1ZiksdGltbyxuZXR0b3V0LGRvbmV0aW5jLGZhaWxuZXRpbmMp OworICAgICAgICAgICAgdHRpbW9mZigpOyAgICAgICAgICAgICAgICAgIC8qIFRpbWVyIG9mZi4g Ki8KKyNlbmRpZiAvKiBXSU5TT0NLICovCisjZW5kaWYgLyogSUJNU0VMRUNUICovCisjZW5kaWYg LyogQlNEU0VMRUNUICovCisjZW5kaWYgLyogTlRfVENQX09WRVJMQVBQRUQgKi8KKyAgICAgICAg fQorICAgIH0KKworI2lmZGVmIExFQlVGCisgICAgaWYgKGxlX2luYnVmKCkgPiAwKSB7ICAgICAg ICAgICAgICAgLyogSWYgZGF0YSB3YXMgaW5zZXJ0ZWQgaW50byB0aGUgKi8KKyAgICAgICAgaWYg KGxlX2dldGNoYXIoKENIQVIgKikmYykgPiAwKSB7LyogTG9jYWwgRWNobyBidWZmZXIgd2hpbGUg dGhlICAgKi8KKyNpZmRlZiBPUzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogd2Fz IHRha2luZyBwbGFjZSBkbyBub3QgbWl4ICAgKi8KKyAgICAgICAgICBSZWxlYXNlVENQSVBNdXRl eCgpOyAgICAgICAgICAgLyogdGhlIGxlIGRhdGEgd2l0aCB0aGUgbmV0IGRhdGEgKi8KKyNlbmRp ZiAvKiBPUzIgKi8KKyAgICAgICAgICByZXR1cm4oYyk7CisgICAgICAgIH0KKyAgICB9CisjZW5k aWYgLyogTEVCVUYgKi8KKyAgICBpZiAoeCA8IDApIHsgICAgICAgICAgICAgICAgICAgICAgICAv KiBSZXR1cm4gLTEgaWYgd2UgZmFpbGVkLiAqLworICAgICAgICBkZWJ1ZyhGMTAwLCJuZXRpbmMg dGltZWQgb3V0IiwiIiwwKTsKKyNpZmRlZiBPUzIKKyAgICAgICAgUmVsZWFzZVRDUElQTXV0ZXgo KTsKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9IGVsc2UgeyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBPdGhlcndpc2UgKi8KKyAgICAgICAgYyA9IHR0 aWJ1Zlt0dGlicF07ICAgICAgICAgICAgICAvKiBSZXR1cm4gdGhlIGZpcnN0IGNoYXIgaW4gdHRp YnVmW10gKi8KKyAgICAgICAgaWYgKGRlYmxvZykgeworI2lmbmRlZiBDT01NRU5UCisgICAgICAg ICAgICBkZWJ1ZyhGMTAxLCJuZXRpbmMgcmV0dXJuaW5nIiwiIixjKTsKKyNlbmRpZiAvKiBDT01N RU5UICovCisgICAgICAgICAgICBpZiAoYyA9PSAwKSB7CisgICAgICAgICAgICAgICAgZGVidWco RjEwMSwibmV0aW5jIDAgdHRpYm4iLCIiLHR0aWJuKTsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhG MTAxLCJuZXRpbmMgMCB0dGlicCIsIiIsdHRpYnApOworI2lmZGVmIEJFVEFERUJVRworICAgICAg ICAgICAgICAgIHsKKyNpZmRlZiBPUzIKKyAgICAgICAgICAgICAgICAgICAgZXh0ZXJuIGludCB0 dF90eXBlX21vZGU7CisgICAgICAgICAgICAgICAgICAgIGlmICggIUlTVlROVCh0dF90eXBlX21v ZGUpICkKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAgICAgICAgICAgICAgY2toZXhkdW1wKCJu ZXRpbmMgJnR0YnVmW3R0aWJwXSIsJnR0aWJ1Zlt0dGlicF0sdHRpYm4pOworICAgICAgICAgICAg ICAgIH0KKyNlbmRpZiAvKiBCRVRBREVCVUcgKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor ICAgICAgICB0dGlicCsrOworICAgICAgICB0dGlibi0tOworI2lmZGVmIE9TMgorICAgICAgICBS ZWxlYXNlVENQSVBNdXRleCgpOworI2VuZGlmIC8qIE9TMiAqLworI2lmZGVmIENLX0VOQ1JZUFRJ T04KKyAgICAgICAgaWYgKFRFTE9QVF9VKFRFTE9QVF9FTkNSWVBUSU9OKSkKKyAgICAgICAgICBj a190bl9kZWNyeXB0KCZjLDEpOworI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KKyAgICAgICAg cmV0dXJuKGMpOworICAgIH0KKyNlbHNlIC8qIE5vdCB1c2luZyBUQ1BJUExJQiAqLworICAgIHJl dHVybigtMSk7CisjZW5kaWYgLyogVENQSVBMSUIgKi8KK30KKworLyogIE4gRSBUIFQgTyBMICAt LSAgT3V0cHV0IGEgc3RyaW5nIG9mIGJ5dGVzIHRvIHRoZSBuZXR3b3JrICAqLworLyoKKyAgQ2Fs bCB3aXRoIHMgPSBwb2ludGVyIHRvIHN0cmluZywgbiA9IGxlbmd0aC4KKyAgUmV0dXJucyBudW1i ZXIgb2YgYnl0ZXMgYWN0dWFsbHkgd3JpdHRlbiBvbiBzdWNjZXNzLCBvcgorICAtMSBvbiBpL28g ZXJyb3IsIC0yIGlmIGNhbGxlZCBpbXByb3Blcmx5LgorKi8KKworaW50CituZXR0b2wocyxuKSBD SEFSICpzOyBpbnQgbjsgeworI2lmZGVmIFRDUElQTElCCisgICAgaW50IGNvdW50ID0gMDsKKyAg ICBpbnQgbGVuID0gbjsKKyAgICBpbnQgdHJ5ID0gMDsKKworICAgIGlmICh0dHlmZCA9PSAtMSkg eworICAgICAgICBkZWJ1ZyhGMTAwLCJuZXR0b2wgc29ja2V0IGlzIGNsb3NlZCIsIiIsMCk7Cisg ICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgZGVidWcoRjEwMSwibmV0dG9sIFRDUElQTElC IHR0bmV0IiwiIix0dG5ldCk7CisjaWZkZWYgQ09NTUVOVAorICAgIGNraGV4ZHVtcCgibmV0dG9s IixzLG4pOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKworI2lmZGVmIENLX0tFUkJFUk9TCisjaWZk ZWYgS1JCNAorI2lmZGVmIFJMT0dDT0RFCisgICAgaWYgKHR0bnByb3RvID09IE5QX0VLNExPR0lO KSB7CisgICAgICAgIHJldHVybihrcmI0X2Rlc193cml0ZSh0dHlmZCxzLG4pKTsKKyAgICB9Cisj ZW5kaWYgLyogUkxPR0NPREUgKi8KKyNlbmRpZiAvKiBLUkI0ICovCisjaWZkZWYgS1JCNQorI2lm ZGVmIFJMT0dDT0RFCisgICAgaWYgKHR0bnByb3RvID09IE5QX0VLNUxPR0lOKSB7CisgICAgICAg IHJldHVybihrcmI1X2Rlc193cml0ZSh0dHlmZCxzLG4sMCkpOworICAgIH0KKyNlbmRpZiAvKiBS TE9HQ09ERSAqLworI2lmZGVmIEtSQjVfVTJVCisgICAgaWYgKHR0bnByb3RvID09IE5QX0s1VTJV KSB7CisgICAgICAgIHJldHVybihrcmI1X3UydV93cml0ZSh0dHlmZCxzLG4pKTsKKyAgICB9Cisj ZW5kaWYgLyogS1JCNV9VMlUgKi8KKyNlbmRpZiAvKiBLUkI1ICovCisjZW5kaWYgLyogQ0tfS0VS QkVST1MgKi8KKworI2lmZGVmIENLX0VOQ1JZUFRJT04KKyAgICBpZiAoVEVMT1BUX01FKFRFTE9Q VF9FTkNSWVBUSU9OKSkKKyAgICAgIGNrX3RuX2VuY3J5cHQocyxuKTsKKyNlbmRpZiAvKiBDS19F TkNSWVBUSU9OICovCisKKyNpZmRlZiBDS19TU0wKKyAgICBpZiAoc3NsX2FjdGl2ZV9mbGFnIHx8 IHRsc19hY3RpdmVfZmxhZykgeworICAgICAgICBpbnQgZXJyb3IsIHI7CisgICAgICAgIC8qIFdy aXRlIHVzaW5nIFNTTCAqLworICAgICAgc3NsX3JldHJ5OgorICAgICAgICBpZiAoc3NsX2FjdGl2 ZV9mbGFnKQorICAgICAgICAgIHIgPSBTU0xfd3JpdGUoc3NsX2NvbiwgcywgbGVuIC8qID4xMDI0 PzEwMjQ6bGVuICovKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIHIgPSBTU0xfd3JpdGUodGxz X2NvbiwgcywgbGVuIC8qID4xMDI0PzEwMjQ6bGVuICovKTsKKyAgICAgICAgc3dpdGNoIChTU0xf Z2V0X2Vycm9yKHNzbF9hY3RpdmVfZmxhZz9zc2xfY29uOnRsc19jb24scikpIHsKKyAgICAgICAg ICBjYXNlIFNTTF9FUlJPUl9OT05FOgorICAgICAgICAgICAgZGVidWcoRjExMSwibmV0dG9sIiwi U1NMX3dyaXRlIixyKTsKKyAgICAgICAgICAgIGlmICggciA9PSBsZW4gKQorICAgICAgICAgICAg ICAgIHJldHVybihuKTsKKyAgICAgICAgICAgICBzICs9IHI7CisgICAgICAgICAgICAgbGVuIC09 IHI7CisgICAgICAgICAgICAgZ290byBzc2xfcmV0cnk7CisgICAgICAgICAgY2FzZSBTU0xfRVJS T1JfV0FOVF9XUklURToKKyAgICAgICAgICAgIGRlYnVnKEYxMDAsIm5ldHRvbCBTU0xfRVJST1Jf V0FOVF9XUklURSIsIiIsMCk7CisgICAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICAgIGNh c2UgU1NMX0VSUk9SX1dBTlRfUkVBRDoKKyAgICAgICAgICAgIGRlYnVnKEYxMDAsIm5ldHRvbCBT U0xfRVJST1JfV0FOVF9SRUFEIiwiIiwwKTsKKyAgICAgICAgICAgIHJldHVybigtMSk7CisgICAg ICAgICAgY2FzZSBTU0xfRVJST1JfU1lTQ0FMTDoKKyAgICAgICAgICAgICAgaWYgKCByID09IDAg KSB7IC8qIEVPRiAqLworICAgICAgICAgICAgICAgICAgbmV0Y2xvcygpOworICAgICAgICAgICAg ICAgICAgcmV0dXJuKC0yKTsKKyAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg ICAgIGludCByYyA9IC0xOworI2lmZGVmIE5UCisgICAgICAgICAgICAgICAgICBpbnQgZ2xlID0g R2V0TGFzdEVycm9yKCk7CisgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJuZXR0b2wgU1NM X0VSUk9SX1NZU0NBTEwiLAorICAgICAgICAgICAgICAgICAgICAgICAgICJHZXRMYXN0RXJyb3Io KSIsZ2xlKTsKKyAgICAgICAgICAgICAgICAgIHJjID0gb3Myc29ja2V0ZXJyb3IoZ2xlKTsKKyAg ICAgICAgICAgICAgICAgIGlmIChyYyA9PSAtMSkKKyAgICAgICAgICAgICAgICAgICAgICByYyA9 IC0yOworICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIHJjID09IC0yICkKKyAgICAgICAgICAg ICAgICAgICAgICByYyA9IC0xOworI2VuZGlmIC8qIE5UICovCisgICAgICAgICAgICAgICAgICBy ZXR1cm4ocmMpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgY2FzZSBTU0xfRVJST1JfV0FO VF9YNTA5X0xPT0tVUDoKKyAgICAgICAgICAgIGRlYnVnKEYxMDAsIm5ldHRvbCBTU0xfRVJST1Jf V0FOVF9YNTA5X0xPT0tVUCIsIiIsMCk7CisgICAgICAgICAgICBuZXRjbG9zKCk7CisgICAgICAg ICAgICByZXR1cm4oLTIpOworICAgICAgICAgIGNhc2UgU1NMX0VSUk9SX1NTTDoKKyAgICAgICAg ICAgIGRlYnVnKEYxMDAsIm5ldHRvbCBTU0xfRVJST1JfU1NMIiwiIiwwKTsKKyAgICAgICAgICAg ICAgaWYgKGJpb19lcnIhPU5VTEwpIHsKKyAgICAgICAgICAgICAgICAgIGludCBsZW47CisgICAg ICAgICAgICAgICAgICBleHRlcm4gY2hhciBzc2xfZXJyW107CisgICAgICAgICAgICAgICAgICBC SU9fcHJpbnRmKGJpb19lcnIsIm5ldHRvbCgpIFNTTF9FUlJPUl9TU0xcbiIpOworICAgICAgICAg ICAgICAgICAgRVJSX3ByaW50X2Vycm9ycyhiaW9fZXJyKTsKKyAgICAgICAgICAgICAgICAgIGxl biA9IEJJT19yZWFkKGJpb19lcnIsc3NsX2VycixTU0xfRVJSX0JGU1opOworICAgICAgICAgICAg ICAgICAgc3NsX2VycltsZW4gPCBTU0xfRVJSX0JGU1ogPyBsZW4gOiBTU0xfRVJSX0JGU1pdID0g J1wwJzsKKyAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsIm5ldHRvbCBTU0xfRVJST1JfU1NM Iixzc2xfZXJyLDApOworICAgICAgICAgICAgICAgICAgaWYgKHNzbF9kZWJ1Z19mbGFnKQorICAg ICAgICAgICAgICAgICAgICAgIHByaW50Zihzc2xfZXJyKTsKKyAgICAgICAgICAgICAgfSBlbHNl IGlmIChzc2xfZGVidWdfZmxhZykgeworICAgICAgICAgICAgICAgICAgZGVidWcoRjEwMCwibmV0 dG9sIFNTTF9FUlJPUl9TU0wiLCIiLDApOworICAgICAgICAgICAgICAgICAgZmZsdXNoKHN0ZGVy cik7CisgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwibmV0dG9sKCkgU1NMX0VSUk9S X1NTTFxuIik7CisgICAgICAgICAgICAgICAgICBFUlJfcHJpbnRfZXJyb3JzX2ZwKHN0ZGVycik7 CisgICAgICAgICAgICAgIH0KKyNpZmRlZiBDT01NRU5UCisgICAgICAgICAgICAgIG5ldGNsb3Mo KTsKKyAgICAgICAgICAgICAgcmV0dXJuKC0yKTsKKyNlbHNlCisgICAgICAgICAgICAgIHJldHVy bigtMSk7CisjZW5kaWYKKyAgICAgICAgICBjYXNlIFNTTF9FUlJPUl9aRVJPX1JFVFVSTjoKKyAg ICAgICAgICAgIGRlYnVnKEYxMDAsIm5ldHRvbCBTU0xfRVJST1JfWkVST19SRVRVUk4iLCIiLDAp OworICAgICAgICAgICAgbmV0Y2xvcygpOworICAgICAgICAgICAgcmV0dXJuKC0yKTsKKyAgICAg ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgZGVidWcoRjEwMCwibmV0dG9sIFNTTF9FUlJPUl8/ Pz8/PyIsIiIsMCk7CisgICAgICAgICAgICBuZXRjbG9zKCk7CisgICAgICAgICAgICByZXR1cm4o LTIpOworICAgICAgICB9CisgICAgfQorI2VuZGlmIC8qIENLX1NTTCAqLworCisgIG5ldHRvbF9y ZXRyeToKKyAgICB0cnkrKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJbmNyZWFz ZSB0aGUgdHJ5IGNvdW50ZXIgKi8KKworICAgIGlmICh0dG5ldCA9PSBORVRfVENQQikgeworI2lm ZGVmIEJTRFNFTEVDVAorICAgICAgICBmZF9zZXQgd2ZkczsKKyAgICAgICAgc3RydWN0IHRpbWV2 YWwgdHY7CisKKyAgICAgICAgZGVidWcoRjEwMSwibmV0dG9sIEJTRFNFTEVDVCIsIiIsMCk7Cisg ICAgICAgIHR2LnR2X3VzZWMgPSAwTDsKKyAgICAgICAgdHYudHZfc2VjPTMwOworI2lmZGVmIE5U CisgICAgICAgIFdTQVNhZmVUb0NhbmNlbCA9IDE7CisjZW5kaWYgLyogTlQgKi8KKyNpZmRlZiBT VFJFQU1JTkcKKyAgICAgIGRvX3NlbGVjdDoKKyNlbmRpZiAvKiBTVFJFQU1JTkcgKi8KKyAgICAg ICAgRkRfWkVSTygmd2Zkcyk7CisgICAgICAgIEZEX1NFVCh0dHlmZCwgJndmZHMpOworICAgICAg ICBpZiAoc2VsZWN0KEZEX1NFVFNJWkUsIE5VTEwsCisjaWZkZWYgX19ERUNDCisjaWZuZGVmIF9f REVDQ19WRVIKKyAgICAgICAgICAgICAgICAgICAgKGludCAqKQorI2VuZGlmIC8qIF9fREVDQ19W RVIgKi8KKyNlbmRpZiAvKiBfX0RFQ0MgKi8KKyAgICAgICAgICAgICAgICAgICAmd2ZkcywgTlVM TCwgJnR2KSA8IDApIHsKKyAgICAgICAgICAgIGludCBzX2Vycm5vID0gc29ja2V0X2Vycm5vOwor ICAgICAgICAgICAgZGVidWcoRjEwMSwibmV0dG9sIHNlbGVjdCBmYWlsZWQiLCIiLHNfZXJybm8p OworI2lmZGVmIEJFVEFERUJVRworICAgICAgICAgICAgcHJpbnRmKCJuZXR0b2wgc2VsZWN0IGZh aWxlZDogJWRcbiIsIHNfZXJybm8pOworI2VuZGlmIC8qIEJFVEFERUJVRyAqLworI2lmZGVmIE5U CisgICAgICAgICAgICBXU0FTYWZlVG9DYW5jZWwgPSAwOworICAgICAgICAgICAgaWYgKCF3aW45 NXNlbGVjdGJ1ZykKKyNlbmRpZiAvKiBOVCAqLworICAgICAgICAgICAgICByZXR1cm4oLTEpOwor ICAgICAgICB9CisgICAgICAgIGlmICghRkRfSVNTRVQodHR5ZmQsICZ3ZmRzKSkgeworI2lmZGVm IFNUUkVBTUlORworICAgICAgICAgICAgaWYgKHN0cmVhbWluZykKKyAgICAgICAgICAgICAgZ290 byBkb19zZWxlY3Q7CisjZW5kaWYgLyogU1RSRUFNSU5HICovCisgICAgICAgICAgICBkZWJ1ZyhG MTExLCJuZXR0b2wiLCIhRkRfSVNTRVQiLHR0eWZkKTsKKyNpZmRlZiBOVAorICAgICAgICAgICAg V1NBU2FmZVRvQ2FuY2VsID0gMDsKKyAgICAgICAgICAgIGlmICghd2luOTVzZWxlY3RidWcpCisj ZW5kaWYgLyogTlQgKi8KKyAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgfQorI2lm ZGVmIE5UCisgICAgICAgIFdTQVNhZmVUb0NhbmNlbCA9IDA7CisjZW5kaWYgLyogTlQgKi8KKyNl bHNlIC8qIEJTRFNFTEVDVCAqLworI2lmZGVmIElCTVNFTEVDVAorICAgICAgICB7CisgICAgICAg ICAgICBpbnQgdHJpZXMgPSAwOworICAgICAgICAgICAgZGVidWcoRjEwMSwibmV0dG9sIElCTVNF TEVDVCIsIiIsMCk7CisgICAgICAgICAgICB3aGlsZSAoc2VsZWN0KCZ0dHlmZCwgMCwgMSwgMCwg MTAwMCkgIT0gMSkgeworICAgICAgICAgICAgICAgIGludCBjb3VudDsKKyAgICAgICAgICAgICAg ICBpZiAodHJpZXMrKyA+PSA2MCkgeworICAgICAgICAgICAgICAgICAgICAvKiBpZiBhZnRlciA2 MCBzZWNvbmRzIHdlIGNhbid0IGdldCBwZXJtaXNzaW9uIHRvIHdyaXRlICovCisgICAgICAgICAg ICAgICAgICAgIGRlYnVnKEYxMDEsIm5ldHRvbCBzZWxlY3QgZmFpbGVkIiwiIixzb2NrZXRfZXJy bm8pOworICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgICBpZiAoKGNvdW50ID0gbmV0dGNoaygpKSA8IDApIHsKKyAgICAgICAg ICAgICAgICAgICAgZGVidWcoRjExMSwibmV0dG9sIiwibmV0dGNoaygpIixjb3VudCk7CisgICAg ICAgICAgICAgICAgICAgIHJldHVybihjb3VudCk7CisgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgfQorICAgICAgICB9CisjZW5kaWYgLyogSUJNU0VMRUNUICovCisjZW5kaWYgLyogQlNE U0VMRUNUICovCisgICAgICAgIGlmICgoY291bnQgPSBzb2NrZXRfd3JpdGUodHR5ZmQscyxuKSkg PCAwKSB7CisgICAgICAgICAgICBpbnQgc19lcnJubyA9IHNvY2tldF9lcnJubzsgLyogbWF5YmUg YSBmdW5jdGlvbiAqLworICAgICAgICAgICAgZGVidWcoRjEwMSwibmV0dG9sIHNvY2tldF93cml0 ZSBlcnJvciIsIiIsc19lcnJubyk7CisjaWZkZWYgT1MyCisgICAgICAgICAgICBpZiAob3Myc29j a2V0ZXJyb3Ioc19lcnJubykgPCAwKQorICAgICAgICAgICAgICByZXR1cm4oLTIpOworI2VuZGlm IC8qIE9TMiAqLworICAgICAgICAgICAgcmV0dXJuKC0xKTsgICAgICAgICAgICAgICAgIC8qIENh bGwgaXQgYW4gaS9vIGVycm9yICovCisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvdW50IDwgbikg eworICAgICAgICAgICAgZGVidWcoRjExMSwibmV0dG9sIHNvY2tldF93cml0ZSIscyxjb3VudCk7 CisgICAgICAgICAgICBpZiAodHJ5ID4gMjUpIHsKKyAgICAgICAgICAgICAgICAvKiBkb24ndCB0 cnkgbW9yZSB0aGFuIDI1IHRpbWVzICovCisgICAgICAgICAgICAgICAgZGVidWcoRjEwMCwibmV0 dG9sIHRyaWVkIG1vcmUgdGhhbiAyNSB0aW1lcyIsIiIsMCk7CisgICAgICAgICAgICAgICAgcmV0 dXJuKC0xKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjb3VudCA+IDApIHsKKyAg ICAgICAgICAgICAgICBzICs9IGNvdW50OworICAgICAgICAgICAgICAgIG4gLT0gY291bnQ7Cisg ICAgICAgICAgICB9CisgICAgICAgICAgICBkZWJ1ZyhGMTExLCJuZXR0b2wgcmV0cnkiLHMsbik7 CisgICAgICAgICAgICBnb3RvIG5ldHRvbF9yZXRyeTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg ICAgICAgIGRlYnVnKEYxMTEsIm5ldHRvbCBzb2NrZXRfd3JpdGUiLHMsY291bnQpOworICAgICAg ICAgICAgcmV0dXJuKGxlbik7IC8qIHN1Y2Nlc3MgLSByZXR1cm4gdG90YWwgbGVuZ3RoICovCisg ICAgICAgIH0KKyAgICB9IGVsc2UKKyAgICAgIHJldHVybigtMik7CisjZWxzZQorICAgIGRlYnVn KEYxMDAsIm5ldHRvbCBUQ1BJUExJQiBub3QgZGVmaW5lZCIsIiIsMCk7CisgICAgcmV0dXJuKC0y KTsKKyNlbmRpZiAvKiBUQ1BJUExJQiAqLworfQorCisvKiAgTiBFIFQgVCBPIEMgIC0tICAgT3V0 cHV0IGNoYXJhY3RlciB0byBuZXR3b3JrICovCisvKgorICBDYWxsIHdpdGggY2hhcmFjdGVyIHRv IGJlIHRyYW5zbWl0dGVkLgorICBSZXR1cm5zIDAgaWYgdHJhbnNtaXNzaW9uIHdhcyBzdWNjZXNz ZnVsLCBvcgorICAtMSB1cG9uIGkvbyBlcnJvciwgb3IgLTIgaWYgY2FsbGVkIGltcHJvcGVybHku CisqLworaW50CisjaWZkZWYgQ0tfQU5TSUMKK25ldHRvYyhDSEFSIGMpCisjZWxzZQorbmV0dG9j KGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogbmV0dG9jICovIHsKKyNpZmRl ZiBVTklYCisgICAgcmV0dXJuKHR0b2MoYykpOworI2Vsc2UKKyNpZmRlZiBUQ1BJUExJQgorICAg IHVuc2lnbmVkIGNoYXIgY2M7CisgICAgaWYgKHR0eWZkID09IC0xKSB7CisgICAgICAgIGRlYnVn KEYxMDAsIm5ldHRvYyBzb2NrZXQgaXMgY2xvc2VkIiwiIiwwKTsKKyAgICAgICAgcmV0dXJuIC0x OworICAgIH0KKyAgICBjYyA9IGM7CisgICAgZGVidWcoRjEwMSwibmV0dG9jIGNjIiwiIixjYyk7 CisKKyNpZmRlZiBDS19LRVJCRVJPUworI2lmZGVmIEtSQjQKKyNpZmRlZiBSTE9HQ09ERQorICAg IGlmICh0dG5wcm90byA9PSBOUF9FSzRMT0dJTikgeworICAgICAgICByZXR1cm4oa3JiNF9kZXNf d3JpdGUodHR5ZmQsJmNjLDEpPT0xPzA6LTEpOworICAgIH0KKyNlbmRpZiAvKiBSTE9HQ09ERSAq LworI2VuZGlmIC8qIEtSQjQgKi8KKyNpZmRlZiBLUkI1CisjaWZkZWYgUkxPR0NPREUKKyAgICBp ZiAodHRucHJvdG8gPT0gTlBfRUs1TE9HSU4pIHsKKyAgICAgICAgcmV0dXJuKGtyYjVfZGVzX3dy aXRlKHR0eWZkLCZjYywxLDApPT0xPzA6LTEpOworICAgIH0KKyNlbmRpZiAvKiBSTE9HQ09ERSAq LworI2lmZGVmIEtSQjVfVTJVCisgICAgaWYgKHR0bnByb3RvID09IE5QX0s1VTJVKSB7CisgICAg ICAgIHJldHVybihrcmI1X3UydV93cml0ZSh0dHlmZCwmY2MsMSk9PTE/MDotMSk7CisgICAgfQor I2VuZGlmIC8qIEtSQjVfVTJVICovCisjZW5kaWYgLyogS1JCNSAqLworI2VuZGlmIC8qIENLX0tF UkJFUk9TICovCisKKyNpZmRlZiBDS19FTkNSWVBUSU9OCisgICAgICAgIGlmICggVEVMT1BUX01F KFRFTE9QVF9FTkNSWVBUSU9OKSApCisgICAgICAgICAgICBja190bl9lbmNyeXB0KCZjYywxKTsK KyNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCisjaWZkZWYgQ0tfU1NMCisgICAgaWYgKHNzbF9h Y3RpdmVfZmxhZyB8fCB0bHNfYWN0aXZlX2ZsYWcpIHsKKyAgICAgICAgaW50IGxlbiwgZXJyb3I7 CisgICAgICAgIC8qIFdyaXRlIHVzaW5nIFNTTCAqLworICAgICAgc3NsX3JldHJ5OgorICAgICAg ICBpZiAoc3NsX2FjdGl2ZV9mbGFnKQorICAgICAgICAgIGxlbiA9IFNTTF93cml0ZShzc2xfY29u LCAmY2MsIDEpOworICAgICAgICBlbHNlCisgICAgICAgICAgbGVuID0gU1NMX3dyaXRlKHRsc19j b24sICZjYywgMSk7CisgICAgICAgIHN3aXRjaCAoU1NMX2dldF9lcnJvcihzc2xfYWN0aXZlX2Zs YWc/c3NsX2Nvbjp0bHNfY29uLGxlbikpIHsKKyAgICAgICAgICBjYXNlIFNTTF9FUlJPUl9OT05F OgorICAgICAgICAgICAgZGVidWcoRjExMSwibmV0dG9jIiwiU1NMX3dyaXRlIixsZW4pOworICAg ICAgICAgICAgcmV0dXJuKGxlbiA9PSAxID8gMCA6IC0xKTsKKyAgICAgICAgICBjYXNlIFNTTF9F UlJPUl9XQU5UX1dSSVRFOgorICAJICBjYXNlIFNTTF9FUlJPUl9XQU5UX1JFQUQ6CisgICAgICAg ICAgICByZXR1cm4oLTEpOworICAgICAgICAgIGNhc2UgU1NMX0VSUk9SX1NZU0NBTEw6CisgICAg ICAgICAgICAgIGlmICggbGVuID09IDAgKSB7IC8qIEVPRiAqLworICAgICAgICAgICAgICAgICAg bmV0Y2xvcygpOworICAgICAgICAgICAgICAgICAgcmV0dXJuKC0yKTsKKyAgICAgICAgICAgICAg fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgIGludCByYyA9IC0xOworI2lmZGVmIE5UCisgICAg ICAgICAgICAgICAgICBpbnQgZ2xlID0gR2V0TGFzdEVycm9yKCk7CisgICAgICAgICAgICAgICAg ICBkZWJ1ZyhGMTExLCJuZXR0b2MgU1NMX0VSUk9SX1NZU0NBTEwiLAorICAgICAgICAgICAgICAg ICAgICAgICAgICJHZXRMYXN0RXJyb3IoKSIsZ2xlKTsKKyAgICAgICAgICAgICAgICAgIHJjID0g b3Myc29ja2V0ZXJyb3IoZ2xlKTsKKyAgICAgICAgICAgICAgICAgIGlmIChyYyA9PSAtMSkKKyAg ICAgICAgICAgICAgICAgICAgICByYyA9IC0yOworICAgICAgICAgICAgICAgICAgZWxzZSBpZiAo IHJjID09IC0yICkKKyAgICAgICAgICAgICAgICAgICAgICByYyA9IC0xOworI2VuZGlmIC8qIE5U ICovCisgICAgICAgICAgICAgICAgICByZXR1cm4ocmMpOworICAgICAgICAgICAgICB9CisgICAg ICAgIGNhc2UgU1NMX0VSUk9SX1NTTDoKKyAgICAgICAgICAgICAgaWYgKGJpb19lcnIhPU5VTEwp IHsKKyAgICAgICAgICAgICAgICAgIGludCBsZW47CisgICAgICAgICAgICAgICAgICBleHRlcm4g Y2hhciBzc2xfZXJyW107CisgICAgICAgICAgICAgICAgICBCSU9fcHJpbnRmKGJpb19lcnIsIm5l dHRvYygpIFNTTF9FUlJPUl9TU0xcbiIpOworICAgICAgICAgICAgICAgICAgRVJSX3ByaW50X2Vy cm9ycyhiaW9fZXJyKTsKKyAgICAgICAgICAgICAgICAgIGxlbiA9IEJJT19yZWFkKGJpb19lcnIs c3NsX2VycixTU0xfRVJSX0JGU1opOworICAgICAgICAgICAgICAgICAgc3NsX2VycltsZW4gPCBT U0xfRVJSX0JGU1ogPyBsZW4gOiBTU0xfRVJSX0JGU1pdID0gJ1wwJzsKKyAgICAgICAgICAgICAg ICAgIGRlYnVnKEYxMTAsIm5ldHRvYyBTU0xfRVJST1JfU1NMIixzc2xfZXJyLDApOworICAgICAg ICAgICAgICAgICAgaWYgKHNzbF9kZWJ1Z19mbGFnKQorICAgICAgICAgICAgICAgICAgICAgIHBy aW50Zihzc2xfZXJyKTsKKyAgICAgICAgICAgICAgfSBlbHNlIGlmIChzc2xfZGVidWdfZmxhZykg eworICAgICAgICAgICAgICAgICAgZGVidWcoRjEwMCwibmV0dG9jIFNTTF9FUlJPUl9TU0wiLCIi LDApOworICAgICAgICAgICAgICAgICAgZmZsdXNoKHN0ZGVycik7CisgICAgICAgICAgICAgICAg ICBmcHJpbnRmKHN0ZGVyciwibmV0dG9jKCkgU1NMX0VSUk9SX1NTTFxuIik7CisgICAgICAgICAg ICAgICAgICBFUlJfcHJpbnRfZXJyb3JzX2ZwKHN0ZGVycik7CisgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg Y2FzZSBTU0xfRVJST1JfV0FOVF9YNTA5X0xPT0tVUDoKKyAgICAgICAgICBjYXNlIFNTTF9FUlJP Ul9aRVJPX1JFVFVSTjoKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgbmV0Y2xvcygp OworICAgICAgICAgICAgcmV0dXJuKC0yKTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBD S19TU0wgKi8KKyAgICBpZiAodHRuZXQgPT0gTkVUX1RDUEIpIHsKKyNpZmRlZiBCU0RTRUxFQ1QK KyAgICAgICAgZmRfc2V0IHdmZHM7CisgICAgICAgIHN0cnVjdCB0aW1ldmFsIHR2OworCisgICAg ICAgIGRlYnVnKEYxMDEsIm5ldHRvYyBCU0RTRUxFQ1QiLCIiLDApOworICAgICAgICB0di50dl91 c2VjID0gMEw7CisgICAgICAgIHR2LnR2X3NlYyA9IDMwOworCisjaWZkZWYgU1RSRUFNSU5HCisg ICAgICBkb19zZWxlY3Q6CisjZW5kaWYgLyogU1RSRUFNSU5HICovCisKKyAgICAgICAgRkRfWkVS Tygmd2Zkcyk7CisgICAgICAgIEZEX1NFVCh0dHlmZCwgJndmZHMpOworICAgICAgICBpZiAoc2Vs ZWN0KEZEX1NFVFNJWkUsIE5VTEwsCisjaWZkZWYgX19ERUNDCisjaWZuZGVmIF9fREVDQ19WRVIK KyAgICAgICAgICAgICAgICAgICAoaW50ICopCisjZW5kaWYgLyogX19ERUNDX1ZFUiAqLworI2Vu ZGlmIC8qIF9fREVDQyAqLworICAgICAgICAgICAgICAgICAgICZ3ZmRzLCBOVUxMLCAmdHYpIDwg MCkgeworICAgICAgICAgICAgaW50IHNfZXJybm8gPSBzb2NrZXRfZXJybm87CisgICAgICAgICAg ICBkZWJ1ZyhGMTAxLCJuZXR0b2Mgc2VsZWN0IGZhaWxlZCIsIiIsc19lcnJubyk7CisjaWZkZWYg QkVUQURFQlVHCisgICAgICAgICAgICBwcmludGYoIm5ldHRvYyBzZWxlY3QgZmFpbGVkOiAlZFxu Iiwgc19lcnJubyk7CisjZW5kaWYgLyogQkVUQURFQlVHICovCisjaWZkZWYgTlQKKyAgICAgICAg ICAgIFdTQVNhZmVUb0NhbmNlbCA9IDA7CisgICAgICAgICAgICBpZiAoIXdpbjk1c2VsZWN0YnVn KQorI2VuZGlmIC8qIE5UICovCisgICAgICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAgIH0K KyAgICAgICAgaWYgKCFGRF9JU1NFVCh0dHlmZCwgJndmZHMpKSB7CisjaWZkZWYgU1RSRUFNSU5H CisgICAgICAgICAgICBpZiAoc3RyZWFtaW5nKQorICAgICAgICAgICAgICBnb3RvIGRvX3NlbGVj dDsKKyNlbmRpZiAvKiBTVFJFQU1JTkcgKi8KKyAgICAgICAgICAgIGRlYnVnKEYxMTEsIm5ldHRv YyIsIiFGRF9JU1NFVCIsdHR5ZmQpOworI2lmZGVmIE5UCisgICAgICAgICAgICBXU0FTYWZlVG9D YW5jZWwgPSAwOworICAgICAgICAgICAgaWYgKCF3aW45NXNlbGVjdGJ1ZykKKyNlbmRpZiAvKiBO VCAqLworICAgICAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICB9CisjaWZkZWYgTlQKKyAg ICAgICAgV1NBU2FmZVRvQ2FuY2VsID0gMDsKKyNlbmRpZiAvKiBOVCAqLworI2Vsc2UgLyogQlNE U0VMRUNUICovCisjaWZkZWYgSUJNU0VMRUNUCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCB0 cmllcyA9IDA7CisgICAgICAgICAgICB3aGlsZSAoc2VsZWN0KCZ0dHlmZCwgMCwgMSwgMCwgMTAw MCkgIT0gMSkgeworICAgICAgICAgICAgICAgIGludCBjb3VudDsKKyAgICAgICAgICAgICAgICBp ZiAodHJpZXMrKyA+PSA2MCkgeworICAgICAgICAgICAgICAgICAgICAvKiBpZiBhZnRlciA2MCBz ZWNvbmRzIHdlIGNhbid0IGdldCBwZXJtaXNzaW9uIHRvIHdyaXRlICovCisgICAgICAgICAgICAg ICAgICAgIGRlYnVnKEYxMDEsIm5ldHRvYyBzZWxlY3QgZmFpbGVkIiwiIixzb2NrZXRfZXJybm8p OworICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgICBpZiAoKGNvdW50ID0gbmV0dGNoaygpKSA8IDApIHsKKyAgICAgICAgICAg ICAgICAgICAgZGVidWcoRjExMSwibmV0dG9jIiwibmV0dGNoaygpIixjb3VudCk7CisgICAgICAg ICAgICAgICAgICAgIHJldHVybihjb3VudCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgfQorICAgICAgICB9CisjZW5kaWYgLyogSUJNU0VMRUNUICovCisjZW5kaWYgLyogQlNEU0VM RUNUICovCisgICAgICAgIGlmIChzb2NrZXRfd3JpdGUodHR5ZmQsJmNjLDEpIDwgMSkgeworICAg ICAgICAgICAgaW50IHNfZXJybm8gPSBzb2NrZXRfZXJybm87ICAgICAgICAgLyogbWF5YmUgYSBm dW5jdGlvbiAqLworICAgICAgICAgICAgZGVidWcoRjEwMSwibmV0dG9jIHNvY2tldF93cml0ZSBl cnJvciIsIiIsc19lcnJubyk7CisjaWZkZWYgT1MyCisgICAgICAgICAgICBpZiAob3Myc29ja2V0 ZXJyb3Ioc19lcnJubykgPCAwKQorICAgICAgICAgICAgICByZXR1cm4oLTIpOworI2VuZGlmIC8q IE9TMiAqLworICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgfQorICAgICAgICBkZWJ1 ZyhGMTAxLCJuZXR0b2Mgc29ja2V0X3dyaXRlIiwiIiwgY2MpOworICAgICAgICByZXR1cm4oMCk7 CisgICAgfSBlbHNlIHJldHVybigtMik7CisjZWxzZQorICAgIHJldHVybigtMik7CisjZW5kaWYg LyogVENQSVBMSUIgKi8KKyNlbmRpZiAvKiBVTklYICovCit9CisKKy8qICBOIEUgVCBGIEwgVSBJ ICAtLSAgRmx1c2ggbmV0d29yayBpbnB1dCBidWZmZXIgICovCisKKyNpZmRlZiBUTkNPREUKK3N0 YXRpYyBpbnQKKyNpZmRlZiBDS19BTlNJQworbmV0Z2V0YyhpbnQgdGltbykgICAgICAgICAgICAg ICAgICAgICAgIC8qIElucHV0IGZ1bmN0aW9uIHRvIHBvaW50IHRvLi4uICovCisjZWxzZSAgLyog Q0tfQU5TSUMgKi8KK25ldGdldGModGltbykgaW50IHRpbW87CisjZW5kaWYgLyogQ0tfQU5TSUMg Ki8KK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAuLi5pbiB0aGUg dG5fZG9vcCgpIGNhbGwgKi8KKyNpZmRlZiBUQ1BJUExJQgorICAgIHJldHVybiBuZXRpbmModGlt byk7CisjZWxzZSAvKiBUQ1BJUExJQiAqLworICAgIHJldHVybiB0dGluYyh0aW1vKTsKKyNlbmRp ZiAvKiBUQ1BJUExJQiAqLworfQorI2VuZGlmIC8qIFROQ09ERSAqLworCitpbnQKK25ldGZsdWko KSB7CisgICAgaW50IG47CisgICAgaW50IGNoOworI2lmZGVmIE5FVExFQlVGCisgICAgdHRwdXNo ID0gLTE7ICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2xlYXIgdGhlIHBlZWstYWhlYWQgY2hh ciAqLworICAgIHdoaWxlIChsZV9kYXRhICYmIChsZV9pbmJ1ZigpID4gMCkpIHsKKyAgICAgICAg Q0hBUiBjaCA9ICdcMCc7CisgICAgICAgIGlmIChsZV9nZXRjaGFyKCZjaCkgPiAwKSB7CisgICAg ICAgICAgICBkZWJ1ZyhGMTAxLCJ0dGZsdWkgbGVfaW5idWYgY2giLCIiLGNoKTsKKyAgICAgICAg fQorICAgIH0KKyNlbmRpZiAvKiBORVRMRUJVRiAqLworCisjaWZkZWYgVENQSVBMSUIKKyNpZmRl ZiBPUzIKKyAgICBSZXF1ZXN0VENQSVBNdXRleChTRU1fSU5ERUZJTklURV9XQUlUKTsKKyNlbmRp ZiAvKiBPUzIgKi8KKyNpZmRlZiBUTkNPREUKKyAgICBpZiAodHRucHJvdG8gPT0gTlBfVEVMTkVU KSB7CisgICAgICAgIC8qIE5ldGZsdWkgbXVzdCBwcm9jZXNzIFRlbG5ldCBuZWdvdGlhdGlvbnMg b3IgZ2V0IG91dCBvZiBzeW5jICovCisgICAgICAgIGlmICgobiA9IG5ldHRjaGsoKSkgPD0gMCkK KyAgICAgICAgICBnb3RvIGV4aXRfZmx1aTsKKyAgICAgICAgd2hpbGUgKG4tLSA+IDApIHsKKyAg ICAgICAgICAgIGNoID0gbmV0aW5jKDEpOworICAgICAgICAgICAgaWYgKGNoID09IElBQykgewor ICAgICAgICAgICAgICAgIGV4dGVybiBpbnQgZHVwbGV4OyAgLyogdGhpcyByZWFsbHkgc2hvdWxk bid0IGJlIGhlcmUgYnV0IC4uLiAqLworICAgICAgICAgICAgICAgIGludCB0eCA9IHRuX2Rvb3Ao KENIQVIpKGNoICYgMHhmZiksZHVwbGV4LG5ldGdldGMpOworICAgICAgICAgICAgICAgIGlmICh0 eCA9PSAxKSBkdXBsZXggPSAxOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR4ID09IDIpIGR1 cGxleCA9IDA7CisgICAgICAgICAgICAgICAgbiA9IG5ldHRjaGsoKTsKKyAgICAgICAgICAgIH0K KyAgICAgICAgfQorICAgIH0gZWxzZQorI2VuZGlmIC8qIFROQ09ERSAqLworICAgIHsKKyAgICAg ICAgdHRpYnVmW3R0aWJwK3R0aWJuXSA9ICdcMCc7CisgICAgICAgIGRlYnVnKEYxMTEsIm5ldGZs dWkgMSIsdHRpYnVmLHR0aWJuKTsKKyNpZmRlZiBDS19FTkNSWVBUSU9OCisgICAgICAgIGlmIChU RUxPUFRfVShURUxPUFRfRU5DUllQVElPTikpIHsKKyAgICAgICAgICAgIGNrX3RuX2RlY3J5cHQo JnR0aWJ1Zlt0dGlicF0sdHRpYm4pOworICAgICAgICB9CisjZW5kaWYgLyogQ0tfRU5DUllQVElP TiAqLworICAgICAgICB0dGlibiA9IHR0aWJwID0gMDsgICAgICAgICAgICAgIC8qIEZsdXNoIGlu dGVybmFsIGJ1ZmZlciAqRklSU1QqICovCisgICAgICAgIGlmICh0dHlmZCA8IDEpCisgICAgICAg ICAgZ290byBleGl0X2ZsdWk7CisgICAgICAgIGlmICgobiA9IG5ldHRjaGsoKSkgPiAwKSB7ICAg ICAgLyogTm93IHNlZSB3aGF0J3Mgd2FpdGluZyBvbiB0aGUgbmV0ICovCisgICAgICAgICAgICBp ZiAobiA+IFRUSUJVRkwpIG4gPSBUVElCVUZMOyAgICAgICAvKiBhbmQgc3BvbmdlIGl0IHVwICov CisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJuZXRmbHVpIDIiLCIiLG4pOyAgICAgICAvKiAuLi4g Ki8KKyAgICAgICAgICAgIG4gPSBzb2NrZXRfcmVhZCh0dHlmZCx0dGlidWYsbik7IC8qIGludG8g b3VyIGJ1ZmZlciAqLworICAgICAgICAgICAgaWYgKG4gPj0gMCkgdHRpYnVmW25dID0gJ1wwJzsK KyAgICAgICAgICAgIGRlYnVnKEYxMTEsIm5ldGZsdWkgMyIsdHRpYnVmLG4pOworI2lmZGVmIENL X0VOQ1JZUFRJT04KKyAgICAgICAgICAgIGlmIChURUxPUFRfVShURUxPUFRfRU5DUllQVElPTikp IHsKKyAgICAgICAgICAgICAgICBja190bl9kZWNyeXB0KCZ0dGlidWZbdHRpYnBdLG4pOworICAg ICAgICAgICAgfQorI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KKyAgICAgICAgICAgIHR0aWJ1 ZlswXSA9ICdcMCc7CisgICAgICAgIH0KKyAgICB9CisjZWxzZSAgLyogIVRDUElQTElCICovCisg ICAgaWYgKHR0eWZkIDwgMSkKKyAgICAgIGdvdG8gZXhpdF9mbHVpOworI2lmZGVmIFROQ09ERQor ICAgIGlmICh0dG5wcm90byA9PSBOUF9URUxORVQpIHsKKyAgICAgICAgaWYgKChuID0gdHRjaGso KSkgPD0gMCkKKyAgICAgICAgICBnb3RvIGV4aXRfZmx1aTsKKyAgICAgICAgd2hpbGUgKG4tLSA+ PSAwKSB7CisgICAgICAgICAgICAvKiBOZXRmbHVpIG11c3QgcHJvY2VzcyBUZWxuZXQgbmVnb3Rp YXRpb25zIG9yIGdldCBvdXQgb2Ygc3luYyAqLworICAgICAgICAgICAgY2ggPSB0dGluYygxKTsK KyAgICAgICAgICAgIGlmIChjaCA9PSBJQUMpIHsKKyAgICAgICAgICAgICAgICBleHRlcm4gaW50 IGR1cGxleDsgIC8qIHRoaXMgcmVhbGx5IHNob3VsZG4ndCBiZSBoZXJlIGJ1dCAuLi4gKi8KKyAg ICAgICAgICAgICAgICBpbnQgdHggPSB0bl9kb29wKChDSEFSKShjaCAmIDB4ZmYpLGR1cGxleCxu ZXRnZXRjKTsKKyAgICAgICAgICAgICAgICBpZiAodHggPT0gMSkgZHVwbGV4ID0gMTsKKyAgICAg ICAgICAgICAgICBlbHNlIGlmICh0eCA9PSAyKSBkdXBsZXggPSAwOworICAgICAgICAgICAgICAg IG4gPSB0dGNoaygpOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0gZWxzZQorI2Vu ZGlmIC8qIFROQ09ERSAqLworICAgIGlmICgobiA9IHR0Y2hrKCkpID4gMCkgeworICAgICAgICBk ZWJ1ZyhGMTAxLCJuZXRmbHVpIG5vbi1UQ1BJUExJQiIsIiIsbik7CisgICAgICAgIHdoaWxlICgo bi0tKSAmJiB0dGluYygxKSA+IC0xKSAgLyogRG9uJ3Qgd29ycnksIHR0aW5jKCkgaXMgYnVmZmVy ZWQgKi8KKyAgICAgICAgICA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhbmQgaXQg aGFuZGxlcyB0aGUgZGVjcnlwdGlvbi4uLiAqLworICAgIH0KKyNlbmRpZiAvKiBUQ1BJUExJQiAq LworICBleGl0X2ZsdWk6CisjaWZkZWYgT1MyCisgICAgUmVsZWFzZVRDUElQTXV0ZXgoKTsKKyNl bmRpZiAvKiBPUzIgKi8KKyAgICByZXR1cm4oMCk7Cit9CisKKyNpZmRlZiBDS19LRVJCRVJPUwor LyogVGhlIGZvbGxvd2luZyB0d28gZnVuY3Rpb25zIGFyZSByZXF1aXJlZCBmb3IgZW5jcnlwdGVk IHJsb2dpbiAqLworLyogVGhleSBhcmUgY2FsbGVkIHdpdGggbmV0dG9jKCkgb3IgbmV0dG9sKCkg YXJlIHRyYW5zbWl0dGluZyAgICAqLworLyogZW5jcnlwdGVkIGRhdGEuICBUaGV5IGNhbGwgYSBm dW5jdGlvbiB0byBlbmNyeXB0IHRoZSBkYXRhICAgICAqLworLyogYW5kIHRoYXQgZnVuY3Rpb24g bmVlZHMgdG8gYmUgYWJsZSB0byB3cml0ZSB0by9yZWFkIGZyb20gdGhlICAqLworLyogbmV0d29y ayBpbiBhbiB1bmltcGVkZWQgbWFubmVyLiAgSGVuY2UsIHRoZXNlIHR3byBzaW1wbGUgZm5zLiAq LworaW50CituZXRfd3JpdGUoZmQsIGJ1ZiwgbGVuKQorICAgIGludCBmZDsKKyAgICByZWdpc3Rl ciBjb25zdCBjaGFyICpidWY7CisgICAgaW50IGxlbjsKK3sKKyAgICBpbnQgY2M7CisgICAgcmVn aXN0ZXIgaW50IHdybGVuID0gbGVuOworICAgIGRvIHsKKyNpZmRlZiBUQ1BJUExJQgorICAgICAg ICBjYyA9IHNvY2tldF93cml0ZShmZCwgYnVmLCB3cmxlbik7CisjZWxzZQorICAgICAgICBjYyA9 IHdyaXRlKGZkLGJ1Zix3cmxlbik7CisjZW5kaWYgLyogVENQSVBMSUIgKi8KKyAgICAgICAgaWYg KGNjIDwgMCkgeworICAgICAgICAgICAgaW50IHNfZXJybm8gPSBzb2NrZXRfZXJybm87CisgICAg ICAgICAgICBkZWJ1ZyhGMTAxLCJuZXRfd3JpdGUgZXJyb3IiLCIiLHNfZXJybm8pOworI2lmZGVm IE9TMgorICAgICAgICAgICAgaWYgKG9zMnNvY2tldGVycm9yKHNfZXJybm8pIDwgMCkKKyAgICAg ICAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg IGNvbnRpbnVlOworI2Vsc2UgLyogT1MyICovCisgICAgICAgICAgICBpZiAoZXJybm8gPT0gRUlO VFIpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICByZXR1cm4oLTEpOwor I2VuZGlmIC8qIE9TMiAqLworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAg YnVmICs9IGNjOworICAgICAgICAgICAgd3JsZW4gLT0gY2M7CisgICAgICAgIH0KKyAgICB9IHdo aWxlICh3cmxlbiA+IDApOworICAgIHJldHVybihsZW4pOworfQoraW50CituZXRfcmVhZChmZCwg YnVmLCBsZW4pCisgICAgaW50IGZkOworICAgIHJlZ2lzdGVyIGNoYXIgKmJ1ZjsKKyAgICByZWdp c3RlciBpbnQgbGVuOworeworICAgIGludCBjYywgbGVuMiA9IDA7CisKKyAgICBkbyB7CisjaWZk ZWYgVENQSVBMSUIKKyAgICAgICAgY2MgPSBzb2NrZXRfcmVhZChmZCwgYnVmLCBsZW4pOworI2Vs c2UKKyAgICAgICAgY2MgPSByZWFkKGZkLGJ1ZixsZW4pOworI2VuZGlmCisgICAgICAgIGlmIChj YyA8IDApIHsKKyAgICAgICAgICAgIGludCBzX2Vycm5vID0gc29ja2V0X2Vycm5vOworICAgICAg ICAgICAgZGVidWcoRjEwMSwibmV0X3JlYWQgZXJyb3IiLCIiLHNfZXJybm8pOworI2lmZGVmIE9T MgorICAgICAgICAgICAgaWYgKG9zMnNvY2tldGVycm9yKHNfZXJybm8pIDwgMCkKKyAgICAgICAg ICAgICAgICByZXR1cm4oLTEpOworI2VuZGlmIC8qIE9TMiAqLworICAgICAgICAgICAgcmV0dXJu KGNjKTsgICAgICAgICAgLyogZXJybm8gaXMgYWxyZWFkeSBzZXQgKi8KKyAgICAgICAgfQorICAg ICAgICBlbHNlIGlmIChjYyA9PSAwKSB7CisgICAgICAgICAgICBuZXRjbG9zKCk7CisgICAgICAg ICAgICByZXR1cm4obGVuMik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBidWYgKz0g Y2M7CisgICAgICAgICAgICBsZW4yICs9IGNjOworICAgICAgICAgICAgbGVuIC09IGNjOworICAg ICAgICB9CisgICAgfSB3aGlsZSAobGVuID4gMCk7CisgICAgcmV0dXJuKGxlbjIpOworfQorI2Vu ZGlmIC8qIENLX0tFUkJFUk9TICovCisjZW5kaWYgLyogTk9ORVQgKi8KKworLyogZ2V0bG9jYWxp cGFkZHIoKSBhdHRlbXB0cyB0byByZXNvbHZlIGFuIElQIEFkZHJlc3MgZm9yIHRoZSBsb2NhbCBt YWNoaW5lLgorICogICBJZiB0aGUgaG9zdCBpcyBtdWx0aS1ob21lZCBpdCByZXR1cm5zIG9ubHkg b25lIGFkZHJlc3MuCisgKgorICogVHdvIHRlY2huaXF1ZXMgYXJlIHVzZWQuCisgKiAoMSkgZ2V0 IHRoZSBsb2NhbCBob3N0IG5hbWUgYW5kIHBlcmZvcm0gYSBETlMgbG9va3VwLCB0aGVuIHRha2UK KyAqICAgICB0aGUgZmlyc3QgZW50cnk7CisgKiAoMikgb3BlbiBhIFVEUCBzb2NrZXQsIHVzZSBp dCB0byBjb25uZWN0IHRvIGEgZmljdGl0aW91cyBob3N0IChpdCdzIE9LLAorICogICAgbm8gZGF0 YSBpcyBzZW50KSwgdGhlbiByZXRyaWV2ZSB0aGUgbG9jYWwgYWRkcmVzcyBmcm9tIHRoZSBzb2Nr ZXQuCisgKiBOb3RlOiB0aGUgc2Vjb25kIHRlY2huaXF1ZSB3b24ndCB3b3JrIG9uIE1pY3Jvc29m dCBzeXN0ZW1zLiAgU2VlCisgKiBBcnRpY2xlIElEOiBRMTI5MDY1IFBSQjogR2V0c29ja25hbWUo KSBSZXR1cm5zIElQIEFkZHJlc3MgMC4wLjAuMCBmb3IgVURQCisgKi8KKworLyogVGVjaG5pcXVl IG51bWJlciBvbmUgY2Fubm90IHdvcmsgcmVsaWFibHkgaWYgdGhlIG1hY2hpbmUgaXMgYSBsYXB0 b3AKKyAqIGFuZCB0aGUgaG9zdG5hbWUgaXMgYXNzb2NpYXRlZCB3aXRoIGEgcGh5c2ljYWwgYWRh cHRlciB3aGljaCBpcyBub3QKKyAqIGluc3RhbGxlZCBhbmQgYSBQUFAgY29ubmVjdGlvbiBpcyBi ZWluZyB1c2VkIGluc3RlYWQuICBUaGlzIGlzIGJlY2F1c2UKKyAqIHRoZSBob3N0bmFtZSBETlMg bG9va3VwIHdpbGwgc3VjY2VlZCBmb3IgdGhlIHBoeXNpY2FsIGFkYXB0ZXIgZXZlbiB0aG91Z2gK KyAqIGl0IHdvdWxkIGJlIGltcG9zc2libGUgdG8gdXNlIGl0LiAgSW4gTlQ0IFNQNCwgdGhlIGdl dGhvc3RieW5hbWUoKQorICogd2hlbiBnaXZlbiB0aGUgcmVzdWx0IG9mIGdldGhvc3RuYW1lKCkg cmV0dXJucyBub3QgdGhlIHJlYWwgRE5TIGVudHJpZXMKKyAqIGZvciB0aGF0IG5hbWUrZG9tYWlu LiAgSW5zdGVhZCBpdCByZXR1cm5zIGFsbCBvZiB0aGUgc3RhdGljIGFuZCBkeW5hbWljCisgKiBJ UCBhZGRyZXNzZXMgYXNzaWduZWQgdG8gYW55IHBoeXNpY2FsIG9yIHZpcnR1YWwgYWRhcHRlciBk ZWZpbmVkIGluIHRoZQorICogc3lzdGVtIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBvciBub3QgaXQg aXMgaW5zdGFsbGVkLiAgVGhlIG9yZGVyIG9mIHRoZQorICogYWRkcmVzc2VzIGlzIGZpeGVkIGFj Y29yZGluZyB0byB0aGUgYmluZGluZyBvcmRlciBpbiB0aGUgTlQgcmVnaXN0cnkuCisgKi8KKwor LyoKKyAqIEl0IGFwcGVhcnMgdGhhdCBjYWxsaW5nIGdldGhvc3RieW5hbWUoTlVMTCkgaXMgbW9y ZSByZWxpYWJsZSB0aGFuCisgKiBjYWxsaW5nIGdldGhvc3RieW5hbWUoZ2V0aG9zdG5hbWUoKSkg b24gV2luZG93cy4gIFNvIG9uIFdpbmRvd3Mgd2Ugd2lsbAorICogb25seSBjYWxsIGdldGhvc3Ri eW5hbWUoTlVMTCkuCisgKi8KKworaW50CitnZXRsb2NhbGlwYWRkcigpIHsKKyNpZm5kZWYgZGF0 YWdlbmVyYWwKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gbF9zYTsKKyAgICBzdHJ1Y3Qgc29ja2Fk ZHJfaW4gcl9zYTsKKyAgICBHU09DS05BTUVfVCBzbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRk cl9pbik7CisgICAgaW50IHNvY2s7CisgICAgaW50IHJjOworICAgIHN0cnVjdCBpbl9hZGRyIGxh ZGRyOworCisgICAgLyogaWYgc3RpbGwgbm90IHJlc29sdmVkLCB0aGVuIHRyeSBzZWNvbmQgc3Ry YXRlZ3kgKi8KKyAgICAvKiBUaGlzIHNlY29uZCBzdHJhdGVneSBkb2VzIG5vdCB3b3JrIG9uIFdp bmRvd3MgKi8KKworICAgIGRlYnVnKEYxMDAsImdldGxvY2FsaXBhZGRyIiwiIiwwKTsKKyAgICBt ZW1zZXQoJmxfc2EsMCxzbGVuKTsKKyAgICBtZW1zZXQoJnJfc2EsMCxzbGVuKTsKKworICAgIC8q IGdldCBhIFVEUCBzb2NrZXQgKi8KKyAgICBzb2NrID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfREdS QU0sIDApOworICAgIGlmIChzb2NrICE9IC0xKSB7CisgICAgICAgIC8qIGNvbm5lY3QgdG8gYXJi aXJhcnkgcG9ydCBhbmQgYWRkcmVzcyAoTk9UIGxvb3BiYWNrKSAqLworICAgICAgICByX3NhLnNp bl9mYW1pbHkgPSBBRl9JTkVUOworICAgICAgICByX3NhLnNpbl9wb3J0ID0gaHRvbnMoSVBQT1JU X0VDSE8pOworCisgICAgICAgIC8qIFRoZSBmb2xsb3dpbmcgaXMgYW4gImlsbGVnYWwgY29udmVy c2lvbiIgaW4gQU9TL1ZTICovCisgICAgICAgIC8qIChhbmQgd2hvIGtub3dzIHdoZXJlIGVsc2Up ICovCisKKyNpZmRlZiBJTkFERFJYCisgICAgICAgIGluYWRkcnggPSBpbmV0X2FkZHIoIjEyOC4x MjcuNTAuMSIpOworICAgICAgICByX3NhLnNpbl9hZGRyLnNfYWRkciA9ICoodW5zaWduZWQgbG9u ZyAqKSZpbmFkZHJ4OworI2Vsc2UKKyAgICAgICAgcl9zYS5zaW5fYWRkci5zX2FkZHIgPSBpbmV0 X2FkZHIoIjEyOC4xMjcuNTAuMSIpOworI2VuZGlmIC8qIElOQUREUlggKi8KKyAgICAgICAgcmMg PSBjb25uZWN0KHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikgJnJfc2EsIHNpemVvZihzdHJ1Y3Qg c29ja2FkZHIpKTsKKyAgICAgICAgaWYgKCFyYykgeyAgICAgICAgICAgICAgICAgICAgICAvKiBn ZXQgbG9jYWwgYWRkcmVzcyAqLworICAgICAgICAgICAgZ2V0c29ja25hbWUoc29jaywoc3RydWN0 IHNvY2thZGRyICopJmxfc2EsJnNsZW4pOworI2lmZGVmIFRDUElQTElCCisgICAgICAgICAgICBz b2NrZXRfY2xvc2Uoc29jayk7ICAgICAgICAgLyogV2UncmUgZG9uZSB3aXRoIHRoZSBzb2NrZXQg Ki8KKyNlbHNlCisgICAgICAgICAgICBjbG9zZShzb2NrKTsKKyNlbmRpZiAvKiBUQ1BJUExJQiAq LworICAgICAgICAgICAgaWYgKGxfc2Euc2luX2FkZHIuc19hZGRyICE9IElOQUREUl9BTlkpIHsK KyAgICAgICAgICAgICAgICBteXhpcGFkZHIgPSBudG9obChsX3NhLnNpbl9hZGRyLnNfYWRkcik7 CisgICAgICAgICAgICAgICAgY2tzdHJuY3B5KG15aXBhZGRyLChjaGFyICopaW5ldF9udG9hKGxf c2Euc2luX2FkZHIpLDIwKTsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJnZXRsb2NhbGlw YWRkciBzZXR0aW5nIGJ1ZiB0byIsbXlpcGFkZHIsMCk7CisgICAgICAgICAgICAgICAgcmV0dXJu KDApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBnZXRsb2Nh bGlwYWRkcnMobXlpcGFkZHIsc2l6ZW9mKG15aXBhZGRyKSwwKTsKKyNlbHNlIC8qIGRhdGFnZW5l cmFsICovCisgICAgcmV0dXJuKC0xKTsKKyNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLworfQorCitp bnQKK2dldGxvY2FsaXBhZGRycyhidWYsYnVmc3osaW5kZXgpCisgICAgY2hhciAqIGJ1ZjsKKyAg ICBpbnQgICAgYnVmc3o7CisgICAgaW50ICAgIGluZGV4OworLyogZ2V0bG9jYWxpcGFkZHJzICov IHsKKyNpZm5kZWYgZGF0YWdlbmVyYWwKKyAgICBjaGFyIGxvY2FsaG9zdFsyNTZdOworICAgIHN0 cnVjdCBob3N0ZW50ICogaG9zdD1OVUxMOworICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBsX3NhOwor ICAgIHN0cnVjdCBzb2NrYWRkcl9pbiByX3NhOworICAgIEdTT0NLTkFNRV9UIHNsZW4gPSBzaXpl b2Yoc3RydWN0IHNvY2thZGRyX2luKTsKKyAgICBpbnQgcmM7CisjaWZkZWYgQ09NTUVOVAorICAg IGludCBzb2NrOworICAgIGNoYXIgbWVzc2FnZUJ1Zls2MF07CisgICAgc3RydWN0IGluX2FkZHIg bGFkZHI7CisjZW5kaWYgLyogQ09NTUVOVCAqLworCisgICAgZGVidWcoRjEwMCwiZ2V0bG9jYWxp cGFkZHJzIiwiIiwwKTsKKyAgICBtZW1zZXQoJmxfc2EsMCxzbGVuKTsKKyAgICBtZW1zZXQoJnJf c2EsMCxzbGVuKTsKKworICAgIC8qIGluaXQgbG9jYWwgYWRkcmVzcyAodG8gemVybykgKi8KKyAg ICBsX3NhLnNpbl9hZGRyLnNfYWRkciA9IElOQUREUl9BTlk7CisKKyNpZmRlZiBDS0dITkxIT1NU CisgICAgcmMgPSBnZXRob3N0bmFtZShsb2NhbGhvc3QsIDI1Nik7CisgICAgZGVidWcoRjExMCwi Z2V0bG9jYWxpcGFkZHJzIGxvY2FsaG9zdCIsbG9jYWxob3N0LDApOworI2Vsc2UKKyAgICAvKiBU aGlzIGRvZXNuJ3Qgd29yayBvbiBzb21lIHBsYXRmb3JtcywgZS5nLiBTb2xhcmlzICovCisgICAg cmMgPSAwOworICAgIGxvY2FsaG9zdFswXSA9ICdcMCc7CisjaWZkZWYgTlQKKyAgICBpZiAoIHdp bnNvY2tfdmVyc2lvbiA8IDIwICkgeworICAgICAgICByYyA9IGdldGhvc3RuYW1lKGxvY2FsaG9z dCwgMjU2KTsKKyAgICAgICAgZGVidWcoRjExMCwiZ2V0bG9jYWxpcGFkZHJzIGxvY2FsaG9zdCIs bG9jYWxob3N0LDApOworICAgIH0KKyNlbmRpZiAvKiBOVCAqLworI2VuZGlmIC8qIENLR0hOTEhP U1QgKi8KKyAgICBpZiAoIXJjKSB7CisgICAgICAgIC8qIHJlc29sdmUgaG9zdCBuYW1lIGZvciBs b2NhbCBhZGRyZXNzICovCisgICAgICAgIGRlYnVnKEYxMTAsImdldGxvY2FsaXBhZGRycyIsImNh bGxpbmcgZ2V0aG9zdGJ5bmFtZSgpIiwwKTsKKyAgICAgICAgaG9zdCA9IGdldGhvc3RieW5hbWUo bG9jYWxob3N0KTsKKyAgICAgICAgLyogZGVidWcoRjExMSwiZ2V0bG9jYWxpcGFkZHJzIiwiZ2V0 aG9zdGJ5bmFtZSgpIHJldHVybmVkIixob3N0KTsgKi8KKyAgICAgICAgaWYgKGhvc3QpIHsKKyNp ZmRlZiBIQUREUkxJU1QKKyAgICAgICAgICAgIGhvc3QgPSBja19jb3B5aG9zdGVudChob3N0KTsK KyAgICAgICAgICAgIGlmICggaW5kZXggPCAwIHx8IGluZGV4ID4gNjMgfHwgIWhvc3QtPmhfYWRk cl9saXN0W2luZGV4XSApIHsKKyAgICAgICAgICAgICAgICBidWZbMF0gPSAnXDAnOworICAgICAg ICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBsX3NhLnNp bl9hZGRyLnNfYWRkciA9CisgICAgICAgICAgICAgICooKHVuc2lnbmVkIGxvbmcgKikgKGhvc3Qt PmhfYWRkcl9saXN0W2luZGV4XSkpOworICAgICAgICAgICAgY2tzdHJuY3B5KGJ1ZiwoY2hhciAq KWluZXRfbnRvYShsX3NhLnNpbl9hZGRyKSwyMCk7CisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJn ZXRsb2NhbGlwYWRkcnMgc2V0dGluZyBidWYgdG8iLGJ1ZiwwKTsKKworI2lmZGVmIENPTU1FTlQK KyAgICAgICAgICAgIC8qIFRoaXMgaXMgZm9yIHJlcG9ydGluZyBtdWx0aXBsZSBJUCBBZGRyZXNz ICovCisgICAgICAgICAgICB3aGlsZSAoaG9zdC0+aF9hZGRyX2xpc3QgJiYgaG9zdC0+aF9hZGRy X2xpc3RbMF0pIHsKKyAgICAgICAgICAgICAgICBsX3NhLnNpbl9hZGRyLnNfYWRkciA9CisgICAg ICAgICAgICAgICAgICAqKCh1bnNpZ25lZCBsb25nICopIChob3N0LT5oX2FkZHJfbGlzdFswXSkp OworICAgICAgICAgICAgICAgIGNrc3RybmNweShtZXNzYWdlQnVmLAorICAgICAgICAgICAgICAg ICAgICAgICAgKGNoYXIgKilpbmV0X250b2EobF9zYS5zaW5fYWRkciksNjApOworICAgICAgICAg ICAgICAgIGlmICh0Y3BfYWRkcmVzcykgeworICAgICAgICAgICAgICAgICAgICBpZiAoIXN0cmNt cChtZXNzYWdlQnVmLHRjcF9hZGRyZXNzKSkKKyAgICAgICAgICAgICAgICAgICAgICBja3N0cm5j cHkobXlpcGFkZHIsdGNwX2FkZHJlc3MsMjApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgICAgICBkZWJ1ZyhGMTEwLCJnZXRsb2NhbGlwYWRkcnMgaXAgYWRkcmVzcyBsaXN0IiwgbWVz c2FnZUJ1ZiwgMCk7CisgICAgICAgICAgICAgICAgaG9zdC0+aF9hZGRyX2xpc3QrKzsKKyAgICAg ICAgICAgIH0KKyNlbmRpZiAvKiBDT01NRU5UICovCisjZWxzZSAgIC8qIEhBRERSTElTVCAqLwor ICAgICAgICAgICAgaWYgKGluZGV4ICE9IDApIHsKKyAgICAgICAgICAgICAgICBidWZbMF0gPSAn XDAnOworICAgICAgICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAgICAgICB9CisgICAgICAg ICAgICBsX3NhLnNpbl9hZGRyLnNfYWRkciA9ICooKHVuc2lnbmVkIGxvbmcgKikgKGhvc3QtPmhf YWRkcikpOworICAgICAgICAgICAgY2tzdHJuY3B5KGJ1ZiwoY2hhciAqKWluZXRfbnRvYShsX3Nh LnNpbl9hZGRyKSxidWZzeik7CisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJnZXRsb2NhbGlwYWRk cnMgc2V0dGluZyBidWYgdG8iLGJ1ZiwwKTsKKyNlbmRpZiAgLyogSEFERFJMSVNUICovCisgICAg ICAgICAgICByZXR1cm4oMCk7CisgICAgICAgIH0gZWxzZSBkZWJ1ZyhGMTEwLAorICAgICAgICAg ICAgICAgICAgICAgImdldGxvY2FsaXBhZGRyczogZ2V0aG9zdGJ5bmFtZSgpIGZhaWxlZCIsCisg ICAgICAgICAgICAgICAgICAgICBsb2NhbGhvc3QsCisgICAgICAgICAgICAgICAgICAgICAwCisg ICAgICAgICAgICAgICAgICAgICApOworICAgIH0KKyNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLwor ICAgIHJldHVybigtMSk7Cit9CisKKyNpZmRlZiBSTE9HQ09ERSAgICAgICAgICAgICAgICAgLyog VENQL0lQIFJMT0dJTiBwcm90b2NvbCBzdXBwb3J0IGNvZGUgKi8KK2ludAorcmxvZ19uYXdzKCkg eworICAgIHN0cnVjdCBybG9nX25hd3MgeworICAgICAgICB1bnNpZ25lZCBjaGFyIGlkWzRdOwor ICAgICAgICB1bnNpZ25lZCBzaG9ydCByb3dzLCBjb2xzLCB5cGl4LCB4cGl4OworICAgIH0gbmF3 c2J1ZjsKKworICAgIGlmICh0dG5ldCAhPSBORVRfVENQQikKKyAgICAgIHJldHVybiAwOworICAg IGlmICh0dG5wcm90byAhPSBOUF9STE9HSU4KKyNpZmRlZiBDS19LRVJCRVJPUworICAgICAgICAm JiB0dG5wcm90byAhPSBOUF9LNExPR0lOCisgICAgICAgICYmIHR0bnByb3RvICE9IE5QX0VLNExP R0lOCisgICAgICAgICYmIHR0bnByb3RvICE9IE5QX0s1TE9HSU4KKyAgICAgICAgJiYgdHRucHJv dG8gIT0gTlBfRUs1TE9HSU4KKyNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLworICAgICAgICAgKQor ICAgICAgcmV0dXJuIDA7CisgICAgaWYgKCFURUxPUFRfTUUoVEVMT1BUX05BV1MpKQorICAgICAg cmV0dXJuIDA7CisKKyAgICBkZWJ1ZyhGMTAwLCJybG9naW4gV2luZG93IFNpemUgc2VudCIsIiIs MCk7CisKKyAgICBuYXdzYnVmLmlkWzBdID0gbmF3c2J1Zi5pZFsxXSA9IDAzNzc7CisgICAgbmF3 c2J1Zi5pZFsyXSA9IG5hd3NidWYuaWRbM10gPSAncyc7CisjaWZkZWYgT1MyCisgICAgbmF3c2J1 Zi5yb3dzID0gaHRvbnMoKHVuc2lnbmVkIHNob3J0KSAoVnNjcm5HZXRIZWlnaHQoVlRFUk0pCisg ICAgICAgICAgICAgICAgICAgICAgICAgIC0odHRfc3RhdHVzW1ZURVJNXT8xOjApKSk7CisgICAg bmF3c2J1Zi5jb2xzID0gaHRvbnMoKHVuc2lnbmVkIHNob3J0KSBWc2NybkdldFdpZHRoKFZURVJN KSk7CisjZWxzZSAvKiBPUzIgKi8KKyAgICBuYXdzYnVmLnJvd3MgPSBodG9ucygodW5zaWduZWQg c2hvcnQpIHR0X3Jvd3MpOworICAgIG5hd3NidWYuY29scyA9IGh0b25zKCh1bnNpZ25lZCBzaG9y dCkgdHRfY29scyk7CisjZW5kaWYgLyogT1MyICovCisgICAgbmF3c2J1Zi55cGl4ID0gaHRvbnMo MCk7ICAgICAgICAgICAgLyogeSBwaXhlbHMgKi8KKworICAgIG5hd3NidWYueHBpeCA9IGh0b25z KDApOyAgICAgICAgICAgIC8qIHggcGl4ZWxzICovCisgICAgaWYgKHR0b2woKENIQVIgKikoJm5h d3NidWYpLCBzaXplb2YobmF3c2J1ZikpIDwgMCkKKyAgICAgIHJldHVybigtMSk7CisgICAgcmV0 dXJuKDApOworfQorCisjaWZkZWYgT1MyT1JVTklYCisjZGVmaW5lIFJMT0dPVVRCVUYKKyNlbmRp ZiAvKiBPUzIgKi8KK3N0YXRpYyBpbnQKKyNpZmRlZiBDS19BTlNJQworcmxvZ19pbmkoQ0hBUiAq IGhvc3RuYW1lLCBpbnQgcG9ydCwKKyAgICAgICAgIHN0cnVjdCBzb2NrYWRkcl9pbiAqIGxfYWRk ciwgc3RydWN0IHNvY2thZGRyX2luICogcl9hZGRyKQorI2Vsc2UgLyogQ0tfQU5TSUMgKi8KK3Js b2dfaW5pKGhvc3RuYW1lLCBwb3J0LCBsX2FkZHIsIHJfYWRkcikKKyAgICBDSEFSICogaG9zdG5h bWU7CisgICAgaW50IHBvcnQ7CisgICAgc3RydWN0IHNvY2thZGRyX2luICogbF9hZGRyOworICAg IHN0cnVjdCBzb2NrYWRkcl9pbiAqIHJfYWRkcjsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyog cmxvZ19pbmkgKi8geworCisjaWZkZWYgUkxPR09VVEJVRgorICAgIGNoYXIgb3V0YnVmWzUxMl07 CisgICAgaW50ICBvdXRieXRlcz0wOworI2VuZGlmIC8qIFJMT0dPVVRCVUYgKi8KKyAgICBpbnQg ZmxhZyA9IDA7CisjZGVmaW5lIFRFUk1MRU4gMTYKKyNkZWZpbmUgQ09OU1BETEVOIDE2CisgICAg Q0hBUiBsb2NhbHVzZXJbVUlEQlVGTEVOKzFdOworICAgIENIQVIgcmVtb3RldXNlcltVSURCVUZM RU4rMV07CisgICAgaW50IHVzZXJsZW4gPSAwOworICAgIENIQVIgdGVybV9zcGVlZFtURVJNTEVO K0NPTlNQRExFTisxXTsKKyNpZmRlZiBDT05HU1BECisgICAgbG9uZyBjb25zcGQgPSAtMUw7Cisj ZW5kaWYgLyogQ09OR1NQRCAqLworI2lmZGVmIE9TMgorICAgIGV4dGVybiBpbnQgdHRfdHlwZSwg bWF4X3R0OworICAgIGV4dGVybiBzdHJ1Y3QgdHRfaW5mb19yZWMgdHRfaW5mb1tdOworI2VuZGlm IC8qIE9TMiAqLworICAgIGludCBpLCBuOworCisgICAgaW50IHJjID0gMDsKKyAgICB0bl9yZXNl dCgpOyAgICAgICAgICAgICAgICAgLyogVGhpcyBjYWxsIHdpbGwgcmVzZXQgYWxsIG9mIHRoZSBU ZWxuZXQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogb3B0aW9ucyBhbmQg dGhlbiBxdWl0LiAgV2UgbmVlZCB0byBkbyAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogdGhpcyBzaW5jZSB3ZSB1c2UgdGhlIFRlbG5ldCBvcHRpb25zICAgKi8KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdG8gaG9sZCB2YXJpb3VzIHN0YXRlIGluZm9y bWF0aW9uICAgICAgKi8KKyAgICBkdXBsZXggPSAwOyAgICAgICAgICAgICAgICAgLyogUmxvZ2lu IGlzIGFsd2F5cyByZW1vdGUgZWNobyAqLworICAgIHJsb2dfaW5iYW5kID0gMDsKKworI2lmZGVm IENLX1RUR1dTSVoKKy8qCisgIEJ1dCBjb21wdXRlIHRoZSB2YWx1ZXMgYW55d2F5IGJlZm9yZSB0 aGUgZmlyc3QgcmVhZCBzaW5jZSB0aGUgb3V0LQorICBvZi1iYW5kIE5BV1MgcmVxdWVzdCB3b3Vs ZCBhcnJpdmUgYmVmb3JlIHRoZSBmaXJzdCBkYXRhIGJ5dGUgKE5VTEwpLgorKi8KKyNpZmRlZiBP UzIKKyAgICAvKiBDb25zb2xlIHRlcm1pbmFsIHNjcmVlbiByb3dzIGFuZCBjb2x1bW5zICovCisg ICAgZGVidWcoRjEwMSwicmxvZ19pbmkgdHRfcm93cyAxIiwiIixWc2NybkdldEhlaWdodChWVEVS TSkKKyAgICAgICAgICAgLSh0dF9zdGF0dXNbVlRFUk1dPzE6MCkpOworICAgIGRlYnVnKEYxMDEs InJsb2dfaW5pIHR0X2NvbHMgMSIsIiIsVnNjcm5HZXRXaWR0aChWVEVSTSkpOworICAgIC8qIE5v dCBrbm93biB5ZXQgKi8KKyAgICBpZiAoVnNjcm5HZXRXaWR0aChWVEVSTSkgPCAwIHx8CisgICAg ICAgIFZzY3JuR2V0SGVpZ2h0KFZURVJNKS0odHRfc3RhdHVzW1ZURVJNXT8xOjApIDwgMCkgewor ICAgICAgICB0dGd3c2l6KCk7ICAgICAgICAgICAgICAgICAgICAgIC8qIFRyeSB0byBnZXQgc2Ny ZWVuIGRpbWVuc2lvbnMgKi8KKyAgICB9CisgICAgZGVidWcoRjEwMSwKKyAgICAgICAgICAicmxv Z19pbmkgdHRfcm93cyAyIiwKKyAgICAgICAgICAiIiwKKyAgICAgICAgICBWc2NybkdldEhlaWdo dChWVEVSTSktKHR0X3N0YXR1c1tWVEVSTV0/MTowKQorICAgICAgICAgICk7CisgICAgZGVidWco RjEwMSwicmxvZ19pbmkgdHRfY29scyAyIiwiIixWc2NybkdldFdpZHRoKFZURVJNKSk7CisjZWxz ZSAvKiBPUzIgKi8KKyAgICBkZWJ1ZyhGMTAxLCJybG9nX2luaSB0dF9yb3dzIDEiLCIiLHR0X3Jv d3MpOworICAgIGRlYnVnKEYxMDEsInJsb2dfaW5pIHR0X2NvbHMgMSIsIiIsdHRfY29scyk7Cisg ICAgaWYgKHR0X3Jvd3MgPCAwIHx8IHR0X2NvbHMgPCAwKSB7ICAgLyogTm90IGtub3duIHlldCAq LworICAgICAgICB0dGd3c2l6KCk7ICAgICAgICAgICAgICAgICAgICAgIC8qIFRyeSB0byBmaW5k IG91dCAqLworICAgIH0KKyAgICBkZWJ1ZyhGMTAxLCJybG9nX2luaSB0dF9yb3dzIDIiLCIiLHR0 X3Jvd3MpOworICAgIGRlYnVnKEYxMDEsInJsb2dfaW5pIHR0X2NvbHMgMiIsIiIsdHRfY29scyk7 CisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogQ0tfVFRHV1NJWiAqLworCisgICAgdHRmbHVp KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU3RhcnQgYnkgZmx1c2hpbmcgdGhlIGJ1 ZmZlcnMgKi8KKworICAgIHJsb2dfbW9kZSA9IFJMX0NPT0tFRDsKKworICAgIC8qIERldGVybWlu ZSB0aGUgdXNlcidzIGxvY2FsIHVzZXJuYW1lIC4uLiAqLworCisgICAgbG9jYWx1c2VyWzBdID0g J1wwJzsKKyNpZmRlZiBOVAorICAgIHsKKyAgICAgICAgY2hhciBsb2NhbHVpZFtVSURCVUZMRU4r MV07CisgICAgICAgIGNrc3RybmNweSgoY2hhciAqKWxvY2FsdXNlciwoY2hhciAqKUdldExvY2Fs VXNlcigpLFVJREJVRkxFTik7CisgICAgfQorCisgICAgaWYgKCAhbG9jYWx1c2VyWzBdICkKKyNl bmRpZiAvKiBOVCAqLworICAgIHsKKyAgICAgICAgY2hhciAqIHVzZXIgPSBnZXRlbnYoIlVTRVIi KTsKKyAgICAgICAgaWYgKCF1c2VyKQorICAgICAgICAgIHVzZXIgPSAiIjsKKyAgICAgICAgdXNl cmxlbiA9IHN0cmxlbih1c2VyKTsKKyAgICAgICAgZGVidWcoRjExMSwicmxvZ2luIGdldGVudihV U0VSKSIsdXNlcix1c2VybGVuKTsKKyAgICAgICAgY2tzdHJuY3B5KChjaGFyICopbG9jYWx1c2Vy LHVzZXIsVUlEQlVGTEVOKTsKKyAgICAgICAgZGVidWcoRjExMCwicmxvZ19pbmkgbG9jYWx1c2Vy IDEiLGxvY2FsdXNlciwwKTsKKyAgICB9CisgICAgaWYgKCAhbG9jYWx1c2VyWzBdICkKKyAgICAg ICAgc3RyY3B5KChjaGFyICopbG9jYWx1c2VyLCJ1bmtub3duIik7CisgICAgZWxzZSBpZiAoY2tf bGNuYW1lKSB7CisgICAgICAgIGNrbG93ZXIoKGNoYXIgKilsb2NhbHVzZXIpOworICAgICAgICBk ZWJ1ZyhGMTEwLCJybG9nX2luaSBsb2NhbHVzZXIgMiIsbG9jYWx1c2VyLDApOworICAgIH0KKwor ICAgIC8qIEFuZCB0aGUgdXNlcm5hbWUgdG8gbG9naW4gd2l0aCAqLworICAgIGlmICh1aWRidWZb MF0pIHsKKyAgICAgICAgY2tzdHJuY3B5KChjaGFyICopcmVtb3RldXNlcix1aWRidWYsVUlEQlVG TEVOKTsKKyAgICAgICAgZGVidWcoRjExMCwicmxvZ19pbmkgcmVtb3RldXNlciAxIixyZW1vdGV1 c2VyLDApOworICAgIH0gZWxzZSBpZiAobG9jYWx1c2VyWzBdKSB7CisgICAgICAgIGNrc3RybmNw eSgoY2hhciAqKXJlbW90ZXVzZXIsKGNoYXIgKilsb2NhbHVzZXIsVUlEQlVGTEVOKTsKKyAgICAg ICAgZGVidWcoRjExMCwicmxvZ19pbmkgcmVtb3RldXNlciAyIixyZW1vdGV1c2VyLDApOworICAg IH0gZWxzZSB7CisgICAgICAgIHJlbW90ZXVzZXJbMF0gPSAnXDAnOworICAgICAgICBkZWJ1ZyhG MTEwLCJybG9nX2luaSByZW1vdGV1c2VyIDMiLHJlbW90ZXVzZXIsMCk7CisgICAgfQorICAgIGlm IChja19sY25hbWUpCisgICAgICBja2xvd2VyKChjaGFyICopcmVtb3RldXNlcik7CisgICAgZGVi dWcoRjExMCwicmxvZ19pbmkgcmVtb3RldXNlciA0IixyZW1vdGV1c2VyLDApOworCisgICAgLyog VGhlIGNvbW1hbmQgdG8gaXNzdWUgaXMgdGhlIHRlcm1pbmFsIHR5cGUgYW5kIHNwZWVkICovCisg ICAgdGVybV9zcGVlZFswXSA9ICdcMCc7CisgICAgaWYgKHRuX3Rlcm0pIHsgICAgICAgICAgICAg ICAgICAgICAgLyogU0VUIFRFTE5FVCBURVJNSU5BTC1UWVBFIHZhbHVlICovCisgICAgICAgIGlm ICgqdG5fdGVybSkgeyAgICAgICAgICAgICAgICAgLyogKGlmIGFueSkgdGFrZXMgcHJlY2VkZW5j ZS4gKi8KKyAgICAgICAgICAgIGNrc3RybmNweSgoY2hhciAqKXRlcm1fc3BlZWQsIHRuX3Rlcm0s IFRFUk1MRU4pOworICAgICAgICAgICAgZmxhZyA9IDE7CisgICAgICAgIH0KKyAgICB9IGVsc2Ug eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBPdGhlcndpc2UgdGhlIGxvY2FsIHRlcm1p bmFsIHR5cGUgKi8KKyNpZmRlZiBPUzIKKyAgICAgICAgLyogSW4gdGVybWluYWwtZW11bGF0aW5n IHZlcnNpb25zLCBpdCdzIHRoZSBTRVQgVEVSTSBUWVBFIHZhbHVlICovCisgICAgICAgIGNrc3Ry bmNweSh0ZXJtX3NwZWVkLCAodHRfdHlwZSA+PSAwICYmIHR0X3R5cGUgPD0gbWF4X3R0KSA/Cisg ICAgICAgICAgICAgICAgdHRfaW5mb1t0dF90eXBlXS54X25hbWUgOiAibmV0d29yayIsIFRFUk1M RU4pOworI2Vsc2UKKyAgICAgICAgLyogSW4gdGhlIG90aGVycywgd2UganVzdCBsb29rIGF0IHRo ZSBURVJNIGVudmlyb25tZW50IHZhcmlhYmxlICovCisgICAgICAgIHsKKyAgICAgICAgICAgIGNo YXIgKnAgPSBnZXRlbnYoIlRFUk0iKTsKKyAgICAgICAgICAgIGlmIChwKQorICAgICAgICAgICAg ICBja3N0cm5jcHkoKGNoYXIgKil0ZXJtX3NwZWVkLHAsVEVSTUxFTik7CisgICAgICAgICAgICBl bHNlCisgICAgICAgICAgICAgIHRlcm1fc3BlZWRbMF0gPSAnXDAnOworI2lmZGVmIFZNUworICAg ICAgICAgICAgZm9yIChwID0gKGNoYXIgKikgdGVybV9zcGVlZDsgKnA7IHArKykgeworICAgICAg ICAgICAgICAgIGlmICgqcCA9PSAnLScgJiYgKCFzdHJjbXAocCwiLTgwIikgfHwgIXN0cmNtcChw LCItMTMyIikpKQorICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZWxz ZSBpZiAoaXN1cHBlcigqcCkpCisgICAgICAgICAgICAgICAgICAqcCA9IHRvbG93ZXIoKnApOwor ICAgICAgICAgICAgfQorICAgICAgICAgICAgKnAgPSAnXDAnOworI2VuZGlmIC8qIFZNUyAqLwor ICAgICAgICB9CisjZW5kaWYgLyogT1MyICovCisgICAgfQorICAgIG4gPSBzdHJsZW4oKGNoYXIg Kil0ZXJtX3NwZWVkKTsKKyAgICBpZiAobiA+IDApIHsgICAgICAgICAgICAgICAgICAgICAgICAv KiBXZSBoYXZlIGEgdGVybWluYWwgdHlwZSAqLworICAgICAgICBpZiAoIWZsYWcpIHsgICAgICAg ICAgICAgICAgICAgIC8qIElmIG5vdCB1c2VyLXNwZWNpZmllZCAqLworICAgICAgICAgICAgZm9y IChpID0gMDsgaSA8IG47IGkrKykgICAgIC8qIHRoZW4gbG93ZXJjYXNlIGl0LiAgICAqLworICAg ICAgICAgICAgICBpZiAoaXN1cHBlcih0ZXJtX3NwZWVkW2ldKSkKKyAgICAgICAgICAgICAgICB0 ZXJtX3NwZWVkW2ldID0gdG9sb3dlcih0ZXJtX3NwZWVkW2ldKTsKKyAgICAgICAgfQorICAgICAg ICBkZWJ1ZyhGMTEwLCJybG9nX2luaSB0ZXJtX3NwZWVkIDEiLHRlcm1fc3BlZWQsMCk7CisKKyNp ZmRlZiBDT05HU1BECisgICAgICAgIC8qIGNvbnNwZCgpIGlzIG5vdCB5ZXQgZGVmaW5lZCBpbiBh bGwgY2sqdGlvLmMgbW9kdWxlcyAqLworICAgICAgICBjb25zcGQgPSBjb25nc3BkKCk7CisgICAg ICAgIGlmIChjb25zcGQgPiAwTCkgeworICAgICAgICAgICAgY2tzdHJuY2F0KChjaGFyICopdGVy bV9zcGVlZCwiLyIsc2l6ZW9mKHRlcm1fc3BlZWQpKTsKKyAgICAgICAgICAgIGNrc3RybmNhdCgo Y2hhciAqKXRlcm1fc3BlZWQsY2tsdG9hKGNvbnNwZCksc2l6ZW9mKHRlcm1fc3BlZWQpKTsKKyAg ICAgICAgfSBlbHNlCisjZW5kaWYgLyogQ09OR1NQRCAqLworICAgICAgICAgIGNrc3RybmNhdCgo Y2hhciAqKXRlcm1fc3BlZWQsIi8xOTIwMCIsc2l6ZW9mKHRlcm1fc3BlZWQpKTsKKyAgICAgICAg ZGVidWcoRjExMCwicmxvZ19pbmkgdGVybV9zcGVlZCAyIix0ZXJtX3NwZWVkLDApOworICAgIH0g ZWxzZSB7CisgICAgICAgIHRlcm1fc3BlZWRbMF0gPSAnXDAnOworICAgICAgICBkZWJ1ZyhGMTEw LCJybG9nX2luaSB0ZXJtX3NwZWVkIDMiLHRlcm1fc3BlZWQsMCk7CisgICAgfQorCisjaWZkZWYg Q0tfS0VSQkVST1MKKyAgICBpZiAodHRucHJvdG8gPT0gTlBfSzRMT0dJTiB8fCB0dG5wcm90byA9 PSBOUF9FSzRMT0dJTiB8fAorICAgICAgICB0dG5wcm90byA9PSBOUF9LNUxPR0lOIHx8IHR0bnBy b3RvID09IE5QX0VLNUxPR0lOKSB7CisgICAgICAgIGludCBrdmVyLCBlbmNyeXB0LCByYzsKKyAg ICAgICAgc3dpdGNoICh0dG5wcm90bykgeworICAgICAgICAgIGNhc2UgTlBfSzRMT0dJTjoKKyAg ICAgICAgICAgIGt2ZXIgPSA0OworICAgICAgICAgICAgZW5jcnlwdCA9IDA7CisgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgICBjYXNlIE5QX0VLNExPR0lOOgorICAgICAgICAgICAga3ZlciA9 IDQ7CisgICAgICAgICAgICBlbmNyeXB0ID0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg ICAgIGNhc2UgTlBfSzVMT0dJTjoKKyAgICAgICAgICAgIGt2ZXIgPSA1OworICAgICAgICAgICAg ZW5jcnlwdCA9IDA7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIE5QX0VLNUxP R0lOOgorICAgICAgICAgICAga3ZlciA9IDU7CisgICAgICAgICAgICBlbmNyeXB0ID0gMTsKKyAg ICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAga3ZlciA9IDA7 CisgICAgICAgICAgICBlbmNyeXB0ID0gMDsKKyAgICAgICAgfQorICAgICAgICByYyA9IGNrX2ty Yl9ybG9naW4oaG9zdG5hbWUsIHBvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2Nh bHVzZXIsIHJlbW90ZXVzZXIsIHRlcm1fc3BlZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICBsX2FkZHIsIHJfYWRkciwga3ZlciwgZW5jcnlwdCk7CisgICAgICAgIGlmICghcmMpIHsgICAg ICAgICAgICAgICAgICAgICAgLyogc3VjY2VzcyAqLworICAgICAgICAgICAgVEVMT1BUX01FKFRF TE9QVF9OQVdTKSA9IDE7CisgICAgICAgICAgICByYyA9IHJsb2dfbmF3cygpOworICAgICAgICB9 CisgICAgICAgIHJldHVybihyYyk7CisgICAgfSBlbHNlCisjZW5kaWYgLyogQ0tfS0VSQkVST1Mg Ki8KKyAgICBpZiAodHRucHJvdG8gPT0gTlBfUkxPR0lOKSB7CisjaWZkZWYgUkxPR09VVEJVRgor ICAgICAgICAvKgorICAgICAgICAgKiAgVGhlIHJjbWRzIHN0YXJ0IHRoZSBjb25uZWN0aW9uIHdp dGggYSBzZXJpZXMgb2YgaW5pdCBkYXRhOgorICAgICAgICAgKgorICAgICAgICAgKiAgICBhIHBv cnQgbnVtYmVyIHVwb24gd2hpY2ggY2xpZW50IGlzIGxpc3RlbmluZyBmb3Igc3RkZXJyIGRhdGEK KyAgICAgICAgICogICAgdGhlIHVzZXIncyBuYW1lIG9uIHRoZSBjbGllbnQgbWFjaGluZQorICAg ICAgICAgKiAgICB0aGUgdXNlcidzIG5hbWUgb24gdGhlIHNlcnZlciBtYWNoaW5lCisgICAgICAg ICAqICAgIHRoZSB0ZXJtaW5hbF90eXBlL3NwZWVkIG9yIGNvbW1hbmQgdG8gZXhlY3V0ZQorICAg ICAgICAgKi8KKyAgICAgICAgb3V0YnVmW291dGJ5dGVzKytdID0gMDsKKyAgICAgICAgc3RyY3B5 KChjaGFyICopb3V0YnVmK291dGJ5dGVzLChjaGFyICopbG9jYWx1c2VyKTsKKyAgICAgICAgb3V0 Ynl0ZXMgKz0gc3RybGVuKChjaGFyICopbG9jYWx1c2VyKSArIDE7CisgICAgICAgIHN0cmNweSgo Y2hhciAqKW91dGJ1ZitvdXRieXRlcywoY2hhciAqKXJlbW90ZXVzZXIpOworICAgICAgICBvdXRi eXRlcyArPSBzdHJsZW4oKGNoYXIgKilyZW1vdGV1c2VyKSArIDE7CisgICAgICAgIHN0cmNweSgo Y2hhciAqKW91dGJ1ZitvdXRieXRlcywoY2hhciAqKXRlcm1fc3BlZWQpOworICAgICAgICBvdXRi eXRlcyArPSBzdHJsZW4oKGNoYXIgKil0ZXJtX3NwZWVkKSArIDE7CisgICAgICAgIHJjID0gdHRv bCgoQ0hBUiAqKW91dGJ1ZixvdXRieXRlcyk7CisjZWxzZSAvKiBSTE9HT1VUQlVGICovCisgICAg ICAgIHR0b2MoMCk7ICAgICAgICAgICAgICAgICAgICAgICAgLyogU2VuZCBhbiBpbml0aWFsIE5V TCBhcyB3YWtlLXVwICovCisgICAgICAgIC8qIFNlbmQgZWFjaCB2YXJpYWJsZSB3aXRoIHRoZSB0 cmFpbGluZyBOVUwgKi8KKyAgICAgICAgcmMgPSB0dG9sKGxvY2FsdXNlcixzdHJsZW4oKGNoYXIg Kilsb2NhbHVzZXIpKzEpOworICAgICAgICBpZiAocmMgPiAwKQorICAgICAgICAgIHJjID0gdHRv bChyZW1vdGV1c2VyLHN0cmxlbigoY2hhciAqKXJlbW90ZXVzZXIpKzEpOworICAgICAgICBpZiAo cmMgPiAwKQorICAgICAgICAgIHJjID0gdHRvbCh0ZXJtX3NwZWVkLHN0cmxlbigoY2hhciAqKXRl cm1fc3BlZWQpKzEpOworI2VuZGlmIC8qIFJMT0dPVVRCVUYgKi8KKworICAgICAgICAvKiBOb3cg d2UgYXJlIHN1cHBvc2VkIHRvIGdldCBiYWNrIGEgc2luZ2xlIE5VTCBhcyBjb25maXJtYXRpb24g Ki8KKyAgICAgICAgZXJybm8gPSAwOworICAgICAgICByYyA9IHR0aW5jKDYwKTsKKyAgICAgICAg ZGVidWcoRjEwMSwicmxvZ2luIGZpcnN0IHR0aW5jIiwiIixyYyk7CisgICAgICAgIGlmIChyYyA+ IDApIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMDEsInJsb2dpbiB0dGluYyAxIiwiIixyYyk7Cisg ICAgICAgICAgICBwcmludGYoCisgICAgICAgICAgICAgICAiUmxvZ2luIHByb3RvY29sIGVycm9y IC0gMHgleCByZWNlaXZlZCBpbnN0ZWFkIG9mIDB4MDBcbiIsIHJjKTsKKyAgICAgICAgICAgIHJl dHVybigtMSk7CisgICAgICAgIH0gZWxzZSBpZiAocmMgPCAwKSB7CisgICAgICAgICAgICBkZWJ1 ZyhGMTAxLCJybG9naW4gdHRpbmMgZXJybm8iLCIiLGVycm5vKTsKKyAgICAgICAgICAgIC8qIHBy aW50ZigiTmV0d29yayBlcnJvcjogJWRcbiIsIGVycm5vKTsgKi8KKyAgICAgICAgICAgIHJldHVy bigtMSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuKDApOworfQorCisvKiB0d28gY29u dHJvbCBtZXNzYWdlcyBhcmUgZGVmaW5lZDoKKworICAgYSBkb3VibGUgZmxhZyBieXRlIG9mICdv JyBpbmRpY2F0ZXMgYSBvbmUtYnl0ZSBtZXNzYWdlIHdoaWNoIGlzCisgICBpZGVudGljYWwgdG8g d2hhdCB3YXMgb25jZSBjYXJyaWVkIG91dCBvZiBiYW5kLgorCisgICBhIGRvdWJsZSBmbGFnIGJ5 dGUgb2YgJ3EnIGluZGljYXRlcyBhIHplcm8tYnl0ZSBtZXNzYWdlLiAgVGhpcworICAgbWVzc2Fn ZSBpcyBpbnRlcnByZXRlZCBhcyB0d28gXDM3NyBkYXRhIGJ5dGVzLiAgVGhpcyBpcyBqdXN0IGEK KyAgIHF1b3RlIHJ1bGUgc28gdGhhdCBiaW5hcnkgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIgZG9lcyBu b3QgY29uZnVzZSB0aGUKKyAgIGNsaWVudC4gICovCisKK2ludCAKK3Jsb2dfY3RybChjcCwgbikK KyAgICAgdW5zaWduZWQgY2hhciAqY3A7CisgICAgIGludCBuOworeworICAgIGlmICgobiA+PSA1 KSAmJiAoY3BbMl0gPT0gJ28nKSAmJiAoY3BbM10gPT0gJ28nKSkgeworICAgICAgICBpZiAocmxv Z19vb2IoJmNwWzRdLDEpKQorICAgICAgICAgICAgcmV0dXJuKC01KTsKKyAgICAgICAgcmV0dXJu KDUpOworICAgIH0gZWxzZSBpZiAoKG4gPj0gNCkgJiYgKGNwWzJdID09ICdxJykgJiYgKGNwWzNd ID09ICdxJykpIHsKKyAgICAgICAgLyogdGhpcyBpcyBzb21ld2hhdCBvZiBhIGhhY2sgKi8KKyAg ICAgICAgY3BbMl0gPSAnXDM3Nyc7CisgICAgICAgIGNwWzNdID0gJ1wzNzcnOworICAgICAgICBy ZXR1cm4oMik7CisgICAgfQorICAgIHJldHVybigwKTsKK30KKworc3RhdGljIGludAorcmxvZ19v b2Iob29iZGF0YSwgY291bnQpIENIQVIgKiBvb2JkYXRhOyBpbnQgY291bnQ7IHsKKyAgICBpbnQg aTsKKyAgICBpbnQgZmx1c2ggPSAwOworCisgICAgZGVidWcoRjExMSwicmxvZ2luIG91dF9vZl9i YW5kIiwiY291bnQiLGNvdW50KTsKKworICAgIGZvciAoaSA9IDA7IGk8Y291bnQ7IGkrKykgICB7 CisgICAgICAgIGRlYnVnKEYxMDEsInJsb2dpbiBvdXRfb2ZfYmFuZCIsIiIsb29iZGF0YVtpXSk7 CisgICAgICAgICAgICAgICAgaWYgKG9vYmRhdGFbaV0gJiAweDAxKQorICAgICAgICAgICAgICAg ICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKG9vYmRhdGFbaV0gJiAweDAyKSB7IC8q IEZsdXNoIEJ1ZmZlcmVkIERhdGEgbm90IHlldCBkaXNwbGF5ZWQgKi8KKyAgICAgICAgICAgIGRl YnVnKEYxMDEsInJsb2dpbiBGbHVzaCBCdWZmZXJlZCBEYXRhIGNvbW1hbmQiLCIiLG9vYmRhdGFb aV0pOworCisgICAgICAgICAgICAvKiBPbmx5IGZsdXNoIHRoZSBkYXRhIGlmIGluIGZhY3Qgd2Ug YXJlIGluIGEgbW9kZSB0aGF0IHdvbid0ICovCisgICAgICAgICAgICAvKiBnZXQgb3V0IG9mIHN5 bmMuICBJZSwgbm90IHdoZW4gd2UgYXJlIGluIHByb3RvY29sIG1vZGUuICAgICovCisgICAgICAg ICAgICBzd2l0Y2ggKCB3aGF0ICkgeworICAgICAgICAgICAgY2FzZSBXX05PVEhJTkc6CisgICAg ICAgICAgICBjYXNlIFdfQ09OTkVDVDoKKyAgICAgICAgICAgIGNhc2UgV19DT01NQU5EOgorICAg ICAgICAgICAgICAgIGlmICggcmxvZ19pbmJhbmQgKQorICAgICAgICAgICAgICAgICAgICBmbHVz aCA9IDE7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB0dGZsdWko KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg ICAgICBpZiAob29iZGF0YVtpXSAmIDB4MTApIHsgICAgICAgIC8qIFN3aXRjaCB0byBSQVcgbW9k ZSAqLworICAgICAgICAgICAgZGVidWcoRjEwMSwicmxvZ2luIFJhdyBNb2RlIGNvbW1hbmQiLCIi LG9vYmRhdGFbaV0pOworICAgICAgICAgICAgcmxvZ19tb2RlID0gUkxfUkFXOworICAgICAgICB9 CisKKyAgICAgICAgaWYgKG9vYmRhdGFbaV0gJiAweDIwKSB7ICAgICAgICAvKiBTd2l0Y2ggdG8g Q09PS0VEIG1vZGUgKi8KKyAgICAgICAgICAgIGRlYnVnKEYxMDEsInJsb2dpbiBDb29rZWQgTW9k ZSBjb21tYW5kIiwiIixvb2JkYXRhW2ldKTsKKyAgICAgICAgICAgIHJsb2dfbW9kZSA9IFJMX0NP T0tFRDsKKyAgICAgICAgfQorICAgICAgICBpZiAob29iZGF0YVtpXSAmIDB4ODApCisgICAgICAg IHsgICAgICAgIC8qIFNlbmQgV2luZG93IFNpemUgSW5mbyAqLworICAgICAgICAgICAgZGVidWco RjEwMSwicmxvZ2luIFdpbmRvdyBTaXplIGNvbW1hbmQiLCIiLG9vYmRhdGFbaV0pOworICAgICAg ICAgICAgLyogUmVtZW1iZXIgdG8gc2VuZCBXUyBJbmZvIHdoZW4gV2luZG93IFNpemUgY2hhbmdl cyAqLworICAgICAgICAgICAgaWYgKCAhVEVMT1BUX01FKFRFTE9QVF9OQVdTKSApIHsKKyAgICAg ICAgICAgICAgICBURUxPUFRfTUUoVEVMT1BUX05BV1MpID0gMTsKKyAgICAgICAgICAgICAgICBy bG9nX25hd3MoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4o Zmx1c2gpOworfQorI2lmbmRlZiBUQ1BJUExJQgorc3RhdGljIFNJR1RZUAorcmxvZ29vYmgoc2ln KSBpbnQgc2lnOyB7CisjaWZkZWYgU09MQVJJUworICAgIGNoYXIgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIE9yIHNob3VsZCBpdCBiZSBjaGFyIGZvciBhbGw/ICovCisjZWxzZQor ICAgIENIQVIKKyNlbmRpZiAvKiBTT0xBUklTICovCisgICAgICBvb2JkYXRhOworCisgICAgLyog aW50ICBjb3VudCA9IDA7ICovIC8qIChub3QgdXNlZCkgKi8KKworICAgIHdoaWxlIChyZWN2KHR0 eWZkLCAmb29iZGF0YSwgMSwgTVNHX09PQikgPCAwKSB7CisgICAgICAvKgorICAgICAgICogV2Ug bmVlZCB0byBkbyBzb21lIHNwZWNpYWwgcHJvY2Vzc2luZyBoZXJlLgorICAgICAgICogSnVzdCBp biBjYXNlIHRoZSBzb2NrZXQgaXMgYmxvY2tlZCBmb3IgaW5wdXQKKyAgICAgICAqCisgICAgICAg Ki8KKyAgICAgICAgc3dpdGNoIChlcnJubykgeworICAgICAgICAgIGNhc2UgRVdPVUxEQkxPQ0s6 CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0 dXJuOworICAgICAgICB9CisgICAgfQorICAgIGRlYnVnKEYxMDEsInJsb2dpbiBvdXRfb2ZfYmFu ZCIsIiIsb29iZGF0YSk7CisgICAgaWYgKG9vYmRhdGEgPT0gMHgwMikgeyAgICAgIC8qIEZsdXNo IEJ1ZmZlcmVkIERhdGEgbm90IHlldCBkaXNwbGF5ZWQgKi8KKyAgICAgICAgZGVidWcoRjEwMSwi cmxvZ2luIEZsdXNoIEJ1ZmZlcmVkIERhdGEgY29tbWFuZCIsIiIsb29iZGF0YSk7CisgICAgICAg IG5ldGZsdWkoKTsKKyAgICB9CisgICAgaWYgKG9vYmRhdGEgJiAweDEwKSB7ICAgICAgICAgICAg ICAgLyogU3dpdGNoIHRvIHJhdyBtb2RlICovCisgICAgICAgIGRlYnVnKEYxMDEsInJsb2dpbiBS YXcgTW9kZSBjb21tYW5kIiwiIixvb2JkYXRhKTsKKyAgICAgICAgcmxvZ19tb2RlID0gUkxfUkFX OworICAgIH0KKyAgICBpZiAob29iZGF0YSAmIDB4MjApIHsgICAgICAgICAgICAgICAvKiBTd2l0 Y2ggdG8gY29va2VkIG1vZGUgKi8KKyAgICAgICAgZGVidWcoRjEwMSwicmxvZ2luIENvb2tlZCBN b2RlIGNvbW1hbmQiLCIiLG9vYmRhdGEpOworICAgICAgICBybG9nX21vZGUgPSBSTF9DT09LRUQ7 CisgICAgfQorICAgIGlmIChvb2JkYXRhICYgMHg4MCkgeyAgICAgICAgICAgICAgICAgLyogU2Vu ZCBXaW5kb3cgU2l6ZSBJbmZvICovCisgICAgICAgIGRlYnVnKEYxMDEsInJsb2dpbiBXaW5kb3cg U2l6ZSBjb21tYW5kIiwiIixvb2JkYXRhKTsKKyAgICAgICAgLyogUmVtZW1iZXIgdG8gc2VuZCBX UyBJbmZvIHdoZW4gV2luZG93IFNpemUgY2hhbmdlcyAqLworICAgICAgICBpZiAoICFURUxPUFRf TUUoVEVMT1BUX05BV1MpICkgeworICAgICAgICAgICAgVEVMT1BUX01FKFRFTE9QVF9OQVdTKSA9 IDE7CisgICAgICAgICAgICBybG9nX25hd3MoKTsKKyAgICAgICAgfQorICAgIH0KK30KKyNlbmRp ZiAvKiBUQ1BJUExJQiAqLworI2VuZGlmIC8qIFJMT0dDT0RFICovCisKKy8qIFNlbmQgbmV0d29y ayBCUkVBSyAqLworLyoKKyAgUmV0dXJucyAtMSBvbiBlcnJvciwgMCBpZiBub3RoaW5nIGhhcHBl bnMsIDEgaWYgQlJFQUsgc2VudCBzdWNjZXNzZnVsbHkuCisqLworaW50CituZXRicmVhaygpIHsK KyAgICBDSEFSIGJ1ZlszXTsKKyAgICBpZiAodHRuZXQgPT0gTkVUX1RDUEIpIHsKKyAgICAgICAg aWYgKHR0bnByb3RvID09IE5QX1RFTE5FVCkgeworI2lmZGVmIFROQ09ERQorICAgICAgICAgICAg YnVmWzBdID0gKENIQVIpIElBQzsgYnVmWzFdID0gKENIQVIpIEJSRUFLOyBidWZbMl0gPSAoQ0hB UikgMDsKKyAgICAgICAgICAgIGlmICgKKyNpZmRlZiBPUzIKKyAgICAgICAgICAgICAgICBuZXR0 b2woKGNoYXIgKikgYnVmLCAyKQorI2Vsc2UKKyAgICAgICAgICAgICAgICB0dG9sKGJ1ZiwgMikK KyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAgICAgICAgICA8IDIpCisgICAgICAgICAgICAgIHJl dHVybigtMSk7CisgICAgICAgICAgICBpZiAodG5fZGViIHx8IGRlYnNlcyB8fCBkZWJsb2cpIHsK KyAgICAgICAgICAgICAgICBleHRlcm4gY2hhciB0bl9tc2dbXTsKKyAgICAgICAgICAgICAgICBj a21ha21zZyh0bl9tc2csVE5fTVNHX0xFTiwiVEVMTkVUIFNFTlQgIixURUxDTUQoQlJFQUspLAor ICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLE5VTEwpOworICAgICAgICAgICAgICAgIGRl YnVnKEYxMDEsdG5fbXNnLCIiLEJSRUFLKTsKKyAgICAgICAgICAgICAgICBpZiAoZGVic2VzIHx8 IHRuX2RlYikgdG5fZGVidWcodG5fbXNnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJl dHVybigxKTsKKyNlbHNlCisgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJuZXRicmVhayBubyBUTkNP REUiLCIiLDApOworICAgICAgICAgICAgcmV0dXJuKDApOworI2VuZGlmIC8qIFROQ09ERSAqLwor ICAgICAgICB9CisgICAgICAgIC8qIEluc2VydCBvdGhlciBUQ1AvSVAgcHJvdG9jb2xzIGhlcmUg Ki8KKyAgICB9CisgICAgLyogSW5zZXJ0IG90aGVyIG5ldHdvcmtzIGhlcmUgKi8KKyAgICByZXR1 cm4oMCk7Cit9CisjZW5kaWYgLyogTkVUQ09OTiAqLworCisKKyNpZmRlZiBORVRDT05OCisjaWZk ZWYgU1VOWDI1CisvKgorICBTdW5MaW5rIFguMjUgc3VwcG9ydCBieSBNYXJjZWxsbyBGcnV0aWcs IENhdGhvbGljIFVuaXZlcnNpdHksCisgIFJpbyBkZSBKYW5laXJvLCBCcmF6aWwsIDE5OTAuCisq LworCisvKiBQQUQgWC4zLCBYLjI4IGFuZCBYLjI5IHN1cHBvcnQgKi8KKworc3RhdGljIENIQVIg eDI5ZXJyW01BWFBBRFBBUk1TKzNdID0geyBYMjlfRVJST1IsIElOVkFMSURfUEFEX1BBUk0sICdc MCcgfTsKKworLyogSW5pdGlhbGl6ZSBQQUQgKi8KKworZXh0ZXJuIENIQVIgcGFkcGFybXNbXTsK KworVk9JRAoraW5pdHBhZCgpIHsKKyAgcGFkcGFybXNbUEFEX0JSRUFLX0NIQVJBQ1RFUl0gICAg ICAgID0gMDsgIC8qIEJyZWFrIGNoYXJhY3RlciAqLworICBwYWRwYXJtc1tQQURfRVNDQVBFXSAg ICAgICAgICAgICAgICAgPSAxOyAgLyogRXNjYXBlIHBlcm1pdHRlZCAqLworICBwYWRwYXJtc1tQ QURfRUNIT10gICAgICAgICAgICAgICAgICAgPSAxOyAgLyogS2VybWl0IFBBRCBkb2VzIGVjaG8g Ki8KKyAgcGFkcGFybXNbUEFEX0RBVEFfRk9SV0FSRF9DSEFSXSAgICAgID0gMjsgIC8qIGZvcndh cmQgY2hhcmFjdGVyIENSICovCisgIHBhZHBhcm1zW1BBRF9EQVRBX0ZPUldBUkRfVElNRU9VVF0g ICA9IDA7ICAvKiBubyB0aW1lb3V0IGZvcndhcmQgY29uZGl0aW9uICovCisgIHBhZHBhcm1zW1BB RF9GTE9XX0NPTlRST0xfQllfUEFEXSAgICA9IDA7ICAvKiBub3QgdXNlZCAqLworICBwYWRwYXJt c1tQQURfU1VQUFJFU1NJT05fT0ZfU0lHTkFMU10gPSAxOyAgLyogYWxsb3cgUEFEIHNlcnZpY2Ug c2lnbmFscyAqLworICBwYWRwYXJtc1tQQURfQlJFQUtfQUNUSU9OXSAgICAgICAgICAgPSAyMTsg LyogYnJrIGFjdGlvbjogSU5UIHBrICsgYnJrIGluZCovCisgIHBhZHBhcm1zW1BBRF9TVVBQUkVT U0lPTl9PRl9EQVRBXSAgICA9IDA7ICAvKiBubyBzdXByZXNzaW9uIG9mIHVzZXIgZGF0YSAqLwor ICBwYWRwYXJtc1tQQURfUEFERElOR19BRlRFUl9DUl0gICAgICAgPSAwOyAgLyogbm8gcGFkZGlu ZyBhZnRlciBDUiAqLworICBwYWRwYXJtc1tQQURfTElORV9GT0xESU5HXSAgICAgICAgICAgPSAw OyAgLyogbm8gbGluZSBmb2xkICovCisgIHBhZHBhcm1zW1BBRF9MSU5FX1NQRUVEXSAgICAgICAg ICAgICA9IDA7ICAvKiBsaW5lIHNwZWVkIC0gZG9uJ3QgY2FyZSAqLworICBwYWRwYXJtc1tQQURf RkxPV19DT05UUk9MX0JZX1VTRVJdICAgPSAwOyAgLyogZmxvdyBjb250IG9mIFBBRCAtIG5vdCB1 c2VkICovCisgIHBhZHBhcm1zW1BBRF9MRl9BRlRFUl9DUl0gICAgICAgICAgICA9IDA7ICAvKiBu byBMRiBpbnNlcnRpb24gYWZ0ZXIgQ1IgKi8KKyAgcGFkcGFybXNbUEFEX1BBRERJTkdfQUZURVJf TEZdICAgICAgID0gMDsgIC8qIG5vIHBhZGRpbmcgYWZ0ZXIgTEYgKi8KKyAgcGFkcGFybXNbUEFE X0VESVRJTkddICAgICAgICAgICAgICAgID0gMTsgIC8qIGNhbiBlZGl0ICovCisgIHBhZHBhcm1z W1BBRF9DSEFSX0RFTEVURV9DSEFSXSAgICAgICA9IDg7ICAvKiBjaGFyYWN0ZXIgZGVsZXRlIGNo YXJhY3RlciAqLworICBwYWRwYXJtc1tQQURfQlVGRkVSX0RFTEVURV9DSEFSXSAgICAgPSAyMTsg LyogYnVmZmVyIGRlbGV0ZSBjaGFyYWN0ZXIgKi8KKyAgcGFkcGFybXNbUEFEX0JVRkZFUl9ESVNQ TEFZX0NIQVJdICAgID0gMTg7IC8qIGJ1ZmZlciBkaXNwbGF5IGNoYXJhY3RlciAqLworfQorCisv KiBTZXQgUEFEIHBhcmFtZXRlcnMgKi8KKworVk9JRAorc2V0cGFkKHMsbikgQ0hBUiAqczsgaW50 IG47IHsKKyAgICBpbnQgaTsKKyAgICBDSEFSICpwcyA9IHM7CisKKyAgICBpZiAobiA8IDEpIHsK KyAgICAgICAgaW5pdHBhZCgpOworICAgIH0gZWxzZSB7CisgICAgICAgIGZvciAoaSA9IDA7IGkg PCBuOyBpKyspIHsKKyAgICAgICAgICAgIGlmICgqcHMgPiBNQVhQQURQQVJNUykKKyAgICAgICAg ICAgICAgeDI5ZXJyW2krMl0gPSAqcHM7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg IHBhZHBhcm1zWypwc10gPSAqKHBzKzEpOworICAgICAgICAgICAgcHMgKz0gMjsKKyAgICAgICAg fQorICAgIH0KK30KKworLyogUmVhZCBQQUQgcGFyYW1ldGVycyAqLworCitWT0lECityZWFkcGFk KHMsbixyKSBDSEFSICpzOyBpbnQgbjsgQ0hBUiAqcjsgeworICAgIGludCBpOworICAgIENIQVIg KnBzID0gczsKKyAgICBDSEFSICpwciA9IHI7CisKKyAgICAqcHIrKyA9IFgyOV9QQVJBTUVURVJf SU5ESUNBVElPTjsKKyAgICBpZiAobiA+IDApIHsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IG47 IGkrKywgcHMrKykgeworICAgICAgICAgICAgaWYgKCpwcyA+IE1BWFBBRFBBUk1TKSB7CisgICAg ICAgICAgICAgICAgeDI5ZXJyW2krMl0gPSAqcHMrKzsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg ICAgICAgICAgICAgICAgKnByKysgPSAqcHM7CisgICAgICAgICAgICAgICAgKnByKysgPSBwYWRw YXJtc1sqcHMrK107CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAg ICAgICBmb3IgKGkgPSAxOyBpIDwgTUFYUEFEUEFSTVM7IGkrKykgeworICAgICAgICAgICAgKnBy KysgPSBpOworICAgICAgICAgICAgKnByKysgPSBwYWRwYXJtc1tpXTsKKyAgICAgICAgfQorICAg IH0KK30KKworaW50CitxYml0cGt0KHMsbikgQ0hBUiAqczsgaW50IG47IHsKKyAgICBDSEFSICpw cyA9IHM7CisgICAgaW50IHgyOWNtZCA9ICpwczsKKyAgICBDSEFSICpwc2EgPSBzKzE7CisgICAg Q0hBUiB4MjlyZXNwWyhNQVhQQURQQVJNUyoyKSsxXTsKKworICAgIHN3aXRjaCAoeDI5Y21kKSB7 CisKKyAgICAgICAgY2FzZSBYMjlfU0VUX1BBUk1TOgorICAgICAgICAgICAgc2V0cGFkIChwcysx LG4vMik7CisgICAgICAgICAgICBpZiAoKGludClzdHJsZW4oKGNoYXIgKil4MjllcnIpID4gMikg eworICAgICAgICAgICAgICAgIHR0b2woeDI5ZXJyLChpbnQpc3RybGVuKChjaGFyICopeDI5ZXJy KSk7CisgICAgICAgICAgICAgICAgeDI5ZXJyWzJdID0gJ1wwJzsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIHJldHVybiAoLTIpOworICAgICAgICBjYXNlIFgyOV9SRUFEX1BBUk1TOgorICAg ICAgICAgICAgcmVhZHBhZCAocHMrMSxuLzIseDI5cmVzcCk7CisgICAgICAgICAgICBzZXRxYml0 ICgpOworICAgICAgICAgICAgdHRvbCh4MjlyZXNwLChuPjEpPyhuKzEpOigyKk1BWFBBRFBBUk1T KzEpKTsKKyAgICAgICAgICAgIGlmICgoaW50KXN0cmxlbigoY2hhciAqKXgyOWVycikgPiAyKSB7 CisgICAgICAgICAgICAgICAgdHRvbCh4MjllcnIsKGludClzdHJsZW4oKGNoYXIgKil4MjllcnIp KTsKKyAgICAgICAgICAgICAgICB4MjllcnJbMl0gPSAnXDAnOworICAgICAgICAgICAgfQorICAg ICAgICAgICAgcmVzZXRxYml0KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBY MjlfU0VUX0FORF9SRUFEX1BBUk1TOgorICAgICAgICAgICAgc2V0cGFkIChwcysxLG4vMik7Cisg ICAgICAgICAgICByZWFkcGFkIChwcysxLG4vMix4MjlyZXNwKTsKKyAgICAgICAgICAgIHNldHFi aXQoKTsKKyAgICAgICAgICAgIHR0b2woeDI5cmVzcCwobj4xKT8obisxKTooMipNQVhQQURQQVJN UysxKSk7CisgICAgICAgICAgICBpZiAoKGludClzdHJsZW4oKGNoYXIgKil4MjllcnIpID4gMikg eworICAgICAgICAgICAgICAgIHR0b2wgKHgyOWVyciwoaW50KXN0cmxlbigoY2hhciAqKXgyOWVy cikpOworICAgICAgICAgICAgICAgIHgyOWVyciBbMl0gPSAnXDAnOworICAgICAgICAgICAgfQor ICAgICAgICAgICAgcmVzZXRxYml0KCk7CisgICAgICAgICAgICByZXR1cm4gKC0yKTsKKyAgICAg ICAgY2FzZSBYMjlfSU5WSVRBVElPTl9UT19DTEVBUjoKKyAgICAgICAgICAgIChWT0lEKSB4MjVj bGVhcigpOworICAgICAgICAgICAgcmV0dXJuICgtMSk7CisgICAgICAgIGNhc2UgWDI5X0lORElD QVRJT05fT0ZfQlJFQUs6CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuICgw KTsKK30KKworLyogUEFEIGJyZWFrIGFjdGlvbiBwcm9jZXNzb3IgKi8KKworVk9JRAorYnJlYWth Y3QoKSB7CisgICAgZXh0ZXJuIGNoYXIgeDI1b2J1ZltNQVhPWDI1XTsKKyAgICBleHRlcm4gaW50 IG9idWZsOworICAgIGV4dGVybiBpbnQgYWN0aXZlOworICAgIGV4dGVybiB1bnNpZ25lZCBjaGFy IHRvc2VuZDsKKyAgICBzdGF0aWMgQ0hBUiBpbmRicmtbM10gPSB7CisgICAgICAgIFgyOV9JTkRJ Q0FUSU9OX09GX0JSRUFLLAorICAgICAgICBQQURfU1VQUFJFU1NJT05fT0ZfREFUQSwKKyAgICAg ICAgMQorICAgIH07CisgICAgQ0hBUiBpbnR1ZGF0LCBjYXVzZSwgZGlhZzsKKworICAgIGlmICh4 MjVzdGF0KCkgPCAwKSByZXR1cm47ICAvKiBJZ25vcmUgaWYgbm8gdmlydHVhbCBjYWxsIGVzdGFi bGlzaGVkICovCisKKyAgICBpZiAocGFkcGFybXNbUEFEX0JSRUFLX0FDVElPTl0gIT0gMCkgLyog Rm9yd2FyZCBjb25kaXRpb24gKi8KKyAgICAgICAgaWYgKHR0b2woKENIQVIgKil4MjVvYnVmLG9i dWZsKSA8IDApIHsKKyAgICAgICAgICAgIHBlcnJvciAoIlxyXG5DYW4ndCBzZW5kIGNoYXJhY3Rl cnMiKTsKKyAgICAgICAgICAgIGFjdGl2ZSA9IDA7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg ICAgICBiemVybyAoeDI1b2J1ZixzaXplb2YoeDI1b2J1ZikpOworICAgICAgICAgICAgb2J1Zmwg PSAwOworICAgICAgICAgICAgdG9zZW5kID0gMDsKKyAgICAgICAgfTsKKworICAgIHN3aXRjaCAo cGFkcGFybXNbUEFEX0JSRUFLX0FDVElPTl0pIHsKKworICAgICAgIGNhc2UgMCA6IGJyZWFrOyAg ICAgICAgICAgICAgICAgIC8qIGRvIG5vdGhpbmcgKi8KKyAgICAgICBjYXNlIDEgOiAvKiBzZW5k IGludGVycnVwdCBwYWNrZXQgd2l0aCBpbnRlcnJ1cHQgdXNlciBkYXRhIGZpZWxkID0gMSAqLwor ICAgICAgICAgICAgICAgIGludHVkYXQgPSAxOworICAgICAgICAgICAgICAgIHgyNWludHIgKGlu dHVkYXQpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgIGNhc2UgMiA6IC8qIHNlbmQg cmVzZXQgcGFja2V0IHdpdGggY2F1c2UgYW5kIGRpYWcgPSAwICovCisgICAgICAgICAgICAgICAg Y2F1c2UgPSBkaWFnID0gMDsKKyAgICAgICAgICAgICAgICB4MjVyZXNldCAoY2F1c2UsZGlhZyk7 CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgY2FzZSA1IDogLyogc2VuZCBpbnRlcnJ1 cHQgcGFja2V0IHdpdGggaW50ZXJydXB0IHVzZXIgZGF0YSBmaWVsZCA9IDAgKi8KKyAgICAgICAg ICAgICAgICBpbnR1ZGF0ID0gMDsKKyAgICAgICAgICAgICAgICB4MjVpbnRyIChpbnR1ZGF0KTsK KyAgICAgICAgICAgICAgICBzZXRxYml0ICgpOworICAgICAgICAgICAgICAgIC8qIHNlbmQgaW5k aWNhdGlvbiBvZiBicmVhayB3aXRob3V0IGEgcGFyYW1ldGVyIGZpZWxkICovCisgICAgICAgICAg ICAgICAgdHRvYyhYMjlfSU5ESUNBVElPTl9PRl9CUkVBSyk7CisgICAgICAgICAgICAgICAgcmVz ZXRxYml0ICgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgIGNhc2UgOCA6IGFjdGl2 ZSA9IDA7ICAgICAgICAgICAgIC8qIGxlYXZlIGRhdGEgdHJhbnNmZXIgKi8KKyAgICAgICAgICAg ICAgICBjb25vbCAoIlxyXG4iKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICBjYXNl IDIxOiAvKiBzZW5kIGludGVycnVwdCBwYWNrZXQgd2l0aCBpbnRlcnJ1cHQgdXNlciBkYXRhIGZp ZWxkID0gMCAqLworICAgICAgICAgICAgICAgIGludHVkYXQgPSAwOworICAgICAgICAgICAgICAg IHgyNWludHIgKGludHVkYXQpOworICAgICAgICAgICAgICAgIHNldHBhZCAoaW5kYnJrKzEsMik7 ICAgIC8qIHNldCBwYWQgdG8gZGlzY2FyZCBpbnB1dCAqLworICAgICAgICAgICAgICAgIHNldHFi aXQgKCk7CisgICAgICAgICAgICAgICAgLyogc2VuZCBpbmRpY2F0aW9uIG9mIGJyZWFrIHdpdGgg cGFyYW1ldGVyIGZpZWxkICovCisgICAgICAgICAgICAgICAgdHRvbCAoaW5kYnJrLHNpemVvZihp bmRicmspKTsKKyAgICAgICAgICAgICAgICByZXNldHFiaXQgKCk7CisgICAgICAgICAgICAgICAg YnJlYWs7CisgICAgIH0KK30KKworLyogWC4yNSBzdXBwb3J0IGZ1bmN0aW9ucyAqLworCitYMjVf Q0FVU0VfRElBRyBkaWFnOworCisvKgorICBDb252ZXJ0IGEgbnVsbC10ZXJtaW5hdGVkIHN0cmlu ZyByZXByZXNlbnRpbmcgYW4gWC4xMjEgYWRkcmVzcworICB0byBhIHBhY2tlZCBCQ0QgZm9ybS4K KyovCitpbnQKK3BreDEyMShzdHIsYmNkKSBjaGFyICpzdHI7IENIQVIgKmJjZDsgeworICAgIGlu dCBpLCBqOworICAgIHVfY2hhciBjOworCisgICAgaSA9IGogPSAwOworICAgIHdoaWxlIChzdHJb aV0pIHsKKyAgICAgICAgaWYgKGkgPj0gMTUgfHwgc3RyIFtpXSA8ICcwJyB8fCBzdHIgW2ldID4g JzknKQorICAgICAgICAgIHJldHVybiAoLTEpOworICAgICAgICBjID0gc3RyIFtpXSAtICcwJzsK KyAgICAgICAgaWYgKGkgJiAxKQorICAgICAgICAgIGJjZCBbaisrXSB8PSBjOworICAgICAgICBl bHNlCisgICAgICAgICAgYmNkIFtqXSA9IGMgPDwgNDsKKyAgICAgICAgaSsrOworICAgIH0KKyAg ICByZXR1cm4gKGkpOworfQorCisvKiBSZWFkcyBhbmQgcHJpbnRzIFguMjUgZGlhZ25vc3RpYyAq LworCitpbnQKK3gyNWRpYWcgKCkgeworICAgIGludCBpOworCisgICAgYnplcm8gKChjaGFyICop JmRpYWcsc2l6ZW9mKGRpYWcpKTsKKyAgICBpZiAoaW9jdGwodHR5ZmQsWDI1X1JEX0NBVVNFX0RJ QUcsJmRpYWcpKSB7CisgICAgICAgIHBlcnJvciAoIlJlYWRpbmcgWC4yNSBkaWFnbm9zdGljIik7 CisgICAgICAgIHJldHVybigtMSk7CisgICAgfQorICAgIGlmIChkaWFnLmRhdGFsZW4gPiAwKSB7 CisgICAgICAgIHByaW50ZiAoIlguMjUgRGlhZ25vc3RpYyA6Iik7CisgICAgICAgIGZvciAoaSA9 IDA7IGkgPCAoaW50KWRpYWcuZGF0YWxlbjsgaSsrKQorICAgICAgICAgIHByaW50ZigiICUwMmgi LGRpYWcuZGF0YVtpXSkrCisgICAgICAgIHByaW50ZiAoIlxyXG4iKTsKKyAgICB9CisgICAgcmV0 dXJuKDApOworfQorCisvKiBYLjI1IE91dC1vZi1CYW5kIFNpZ25hbCBIYW5kbGVyICovCisKK1NJ R1RZUAoreDI1b29iaChmb28pIGludCBmb287IHsKKyAgICBpbnQgb29idHlwZTsKKyAgICB1X2No YXIgb29iZGF0YTsKKyAgICBpbnQgdDsKKworICAgIChWT0lEKSBzaWduYWwoU0lHVVJHLHgyNW9v YmgpOworICAgIGRvIHsKKyAgICAgICAgaWYgKGlvY3RsKHR0eWZkLFgyNV9PT0JfVFlQRSwmb29i dHlwZSkpIHsKKyAgICAgICAgICAgIHBlcnJvciAoIkdldHRpbmcgc2lnbmFsIHR5cGUiKTsKKyAg ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBzd2l0Y2ggKG9vYnR5cGUpIHsK KyAgICAgICAgICBjYXNlIElOVF9EQVRBOgorICAgICAgICAgICAgaWYgKHJlY3YodHR5ZmQsKGNo YXIgKikmb29iZGF0YSwxLE1TR19PT0IpIDwgMCkgeworICAgICAgICAgICAgICAgIHBlcnJvciAo IlJlY2VpdmluZyBYLjI1IGludGVycnVwdCBkYXRhIik7CisgICAgICAgICAgICAgICAgcmV0dXJu OworICAgICAgICAgICAgfQorICAgICAgICAgICAgdCA9IG9vYmRhdGE7CisgICAgICAgICAgICBw cmludGYgKCJcclxuSW50ZXJydXB0IHJlY2VpdmVkLCBkYXRhID0gJWRcclxuIiwgdCk7CisgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIFZDX1JFU0VUOgorICAgICAgICAgICAgcHJp bnRmICgiXHJcblZpcnR1YWwgY2lyY3VpdCByZXNldFxyXG4iKTsKKyAgICAgICAgICAgIHgyNWRp YWcgKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIE5fUkVTRVRTOgorICAg ICAgICAgICAgcHJpbnRmICgiXHJcblJlc2V0IHRpbWVvdXRcclxuIik7CisgICAgICAgICAgICBi cmVhazsKKyAgICAgICAgICBjYXNlIE5fQ0xFQVJTOgorICAgICAgICAgICAgcHJpbnRmICgiXHJc bkNsZWFyIHRpbWVvdXRcclxuIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNl IE1TR19UT09fTE9ORzoKKyAgICAgICAgICAgIHByaW50ZiAoIlxyXG5NZXNzYWdlIGRpc2NhcmRl ZCwgdG9vIGxvbmdcclxuIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0 OgorICAgICAgICAgICAgaWYgKG9vYnR5cGUpIHByaW50ZigiXHJcblVua25vd24gb29iIHR5cGUg JWRcclxuIixvb2J0eXBlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfSB3 aGlsZSAob29idHlwZSk7Cit9CisKKy8qIFNlbmQgYSBYLjI1IGludGVycnVwdCBwYWNrZXQgKi8K KworaW50CisjaWZkZWYgQ0tfQU5TSUMKK3gyNWludHIoY2hhciBpbnRyKQorI2Vsc2UKK3gyNWlu dHIoaW50cikgY2hhciBpbnRyOworI2VuZGlmIC8qIENLX0FOU0lDICovCisvKiB4MjVpbnRyICov IHsKKyAgICBpZiAoc2VuZCh0dHlmZCwmaW50ciwxLE1TR19PT0IpIDwgMCkgcmV0dXJuKC0xKTsK KyAgICBkZWJ1ZyhGMTAwLCJYLjI1IGludHIiLCIiLDApOworICAgIHJldHVybigwKTsKK30KKwor LyogUmVzZXQgWC4yNSB2aXJ0dWFsIGNpcmN1aXQgKi8KK2ludAorI2lmZGVmIENLX0FOU0lDCit4 MjVyZXNldChjaGFyIGNhdXNlLCBjaGFyIGRpYWduKQorI2Vsc2UKK3gyNXJlc2V0KGNhdXNlLCBk aWFnbikgY2hhciBjYXVzZTsgY2hhciBkaWFnbjsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyog eDI1cmVzZXQgKi8geworICAgIGJ6ZXJvICgoY2hhciAqKSZkaWFnLHNpemVvZihkaWFnKSk7Cisg ICAgZGlhZy5mbGFncyAgID0gMDsKKyAgICBkaWFnLmRhdGFsZW4gPSAyOworICAgIGRpYWcuZGF0 YVswXSA9IGNhdXNlOworICAgIGRpYWcuZGF0YVsxXSA9IGRpYWduOworICAgIGlmIChpb2N0bCh0 dHlmZCxYMjVfV1JfQ0FVU0VfRElBRywmZGlhZykgPCAwKQorICAgICAgcmV0dXJuKC0xKTsKKyAg ICBkZWJ1ZyhGMTAwLCJYLjI1IHJlc2V0IiwiIiwwKTsKKyAgICByZXR1cm4oMCk7Cit9CisKKy8q IENsZWFyIFguMjUgdmlydHVhbCBjaXJjdWl0ICovCitpbnQKK3gyNWNsZWFyKCkgeworICAgIGlu dCBpOworICAgIGRlYnVnKEYxMDAsIlguMjUgY2xlYXIiLCIiLDApOworICAgIGJ6ZXJvICgoY2hh ciAqKSZkaWFnLHNpemVvZihkaWFnKSk7CisgICAgZGlhZy5mbGFncyA9ICgxIDw8IERJQUdfVFlQ RSk7CisgICAgZGlhZy5kYXRhbGVuID0gMjsKKyAgICBkaWFnLmRhdGFbMF0gPSAwOworICAgIGRp YWcuZGF0YVsxXSA9IDA7CisgICAgaW9jdGwgKHR0eWZkLFgyNV9XUl9DQVVTRV9ESUFHLCZkaWFn KTsgLyogU2VuZCBDbGVhciBSZXF1ZXN0ICovCisgICAgcmV0dXJuKHR0Y2xvcygwKSk7ICAgICAg ICAgICAgICAgICAgLyogQ2xvc2Ugc29ja2V0ICovCit9CisKKy8qIFguMjUgc3RhdHVzICovCitp bnQKK3gyNXN0YXQoKSB7CisgICAgaWYgKHR0eWZkID09IC0xKSByZXR1cm4gKC0xKTsKKyAgICBy ZXR1cm4oMCk7Cit9CisKKy8qIFNldCBRX0JJVCBvbiAqLworVk9JRAorc2V0cWJpdCgpIHsKKyAg ICBzdGF0aWMgaW50IHFiaXRvbiA9IDEgPDwgUV9CSVQ7CisgICAgaW9jdGwgKHR0eWZkLFgyNV9T RU5EX1RZUEUsJnFiaXRvbik7Cit9CisKKy8qIFNldCBRX0JJVCBvZmYgKi8KK1ZPSUQKK3Jlc2V0 cWJpdCgpIHsKKyAgICBzdGF0aWMgaW50IHFiaXRvZmYgPSAwOworICAgIGlvY3RsICh0dHlmZCxY MjVfU0VORF9UWVBFLCZxYml0b2ZmKTsKK30KKworLyogUmVhZCBuIGNoYXJhY3RlcnMgZnJvbSBY LjI1IGNpcmN1aXQgaW50byBidWYgKi8KKworaW50Cit4MjV4aW4obixidWYpIGludCBuOyBDSEFS ICpidWY7IHsKKyAgICByZWdpc3RlciBpbnQgeCwgYzsKKyAgICBpbnQgcXBrdDsKKworICAgIGRv IHsKKyAgICAgICAgeCA9IHJlYWQodHR5ZmQsYnVmLG4pOworICAgICAgICBpZiAoYnVmWzBdICYg KDEgPDwgUV9CSVQpKSB7IC8qIElmIFFfQklUIHBhY2tldCwgcHJvY2VzcyBpdCAqLworICAgICAg ICAgICAgLyogSWYgcmV0dXJuIC0xIDogaW52aXRhdGlvbiB0byBjbGVhcjsgLTIgOiBQQUQgY2hh bmdlcyAqLworICAgICAgICAgICAgaWYgKChjPXFiaXRwa3QoYnVmKzEseC0yKSkgPCAwKSByZXR1 cm4oYyk7CisgICAgICAgICAgICBxcGt0ID0gMTsKKyAgICAgICAgfSBlbHNlIHFwa3QgPSAwOwor ICAgIH0gd2hpbGUgKHFwa3QpOworCisjaWZkZWYgQ09NTUVOVCAgICAgICAgICAgICAgICAgIC8q IERpc2FibGVkIGJ5IFN0ZXBoZW4gUmllaG0gMTkuMTIuOTcgKi8KKyAgICAvKiBCVUchCisgICAg ICogaWYgYnVmW10gaXMgZnVsbCwgdGhlbiB0aGlzIG51bGwgbGFuZHMgaW4gbmlydmFuYSEKKyAg ICAgKiBJIHdhcyB1bmFibGUgdG8gZmluZCBhbnkgY29kZSB3aGljaCBuZWVkcyBhIHRyYWlsaW5n IG51bGwgaW4gYnVmW10KKyAgICAgKi8KKyAgICBpZiAoeCA+IDApIGJ1Zlt4XSA9ICdcMCc7Cisj ZW5kaWYgLyogQ09NTUVOVCAqLworICAgIGlmICh4IDwgMSkgeCA9IC0xOworICAgIGRlYnVnKEYx MDEsIngyNXhpbiB4IiwiIix4KTsKKworICAgIHJldHVybih4KTsKK30KKworI2lmZGVmIENPTU1F TlQgLyogTk8gTE9OR0VSIE5FRURFRCEgKi8KKy8qIFguMjUgcmVhZCBhIGxpbmUgKi8KKworaW50 CisjaWZkZWYgUEFSU0VOU0UKKyNpZmRlZiBDS19BTlNJQworeDI1aW5sKENIQVIgKmRlc3QsIGlu dCBtYXgsaW50IHRpbW8sIENIQVIgZW9sLCBDSEFSIHN0YXJ0KQorI2Vsc2UKK3gyNWlubChkZXN0 LG1heCx0aW1vLGVvbCxzdGFydCkgaW50IG1heCx0aW1vOyBDSEFSICpkZXN0LCBlb2wsIHN0YXJ0 OworI2VuZGlmIC8qIENLX0FOU0lDICovCisjZWxzZSAvKiBub3QgUEFSU0VOU0UgKi8KKyNpZmRl ZiBDS19BTlNJQworeDI1aW5sKENIQVIgKmRlc3QsIGludCBtYXgsaW50IHRpbW8sIENIQVIgZW9s KQorI2Vsc2UKK3gyNWlubChkZXN0LG1heCx0aW1vLGVvbCkgaW50IG1heCx0aW1vOyBDSEFSICpk ZXN0LCBlb2w7CisjZW5kaWYgLyogX19TRFRDX18gKi8KKyNlbmRpZiAvKlBBUlNFTlNFICovCisg LyogeDI1aW5sICovIHsKKyAgICBDSEFSICpwZGVzdDsKKyAgICBpbnQgcGt0eXBlLCBnb3Rlb2ws IHJlc3QsIG47CisgICAgaW50IGksIGZsYWcgPSAwOworICAgIGV4dGVybiBpbnQgdHRwcnR5LCB0 dHBmbGc7CisgICAgaW50IHR0cG1zazsKKworICAgIHR0cG1zayA9ICh0dHBydHkpID8gMDE3NyA6 IDAzNzc7ICAgIC8qIFNldCBwYXJpdHkgc3RyaXBwaW5nIG1hc2sgKi8KKworICAgIGRlYnVnKEYx MDEsIngyNWlubCBtYXgiLCIiLG1heCk7CisgICAgZGVidWcoRjEwMSwieDI1aW5sIGVvbCIsIiIs ZW9sKTsKKyAgICBwZGVzdCAgPSBkZXN0OworICAgIHJlc3QgICA9IG1heDsKKyAgICBnb3Rlb2wg PSAwOworICAgIGRvIHsKKyAgICAgICAgbiA9IHJlYWQodHR5ZmQscGRlc3QscmVzdCk7CisgICAg ICAgIG4tLTsKKyAgICAgICAgcGt0eXBlID0gKnBkZXN0ICYgMHg3ZjsKKyAgICAgICAgc3dpdGNo IChwa3R5cGUpIHsKKyAgICAgICAgICBjYXNlIDEgPDwgUV9CSVQ6CisgICAgICAgICAgICBpZiAo cWJpdHBrdChwZGVzdCsxLC0tbikgPCAwKSByZXR1cm4oLTIpOworICAgICAgICAgICAgYnJlYWs7 CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGlmIChmbGFnID09IDApIHsgLyogaWYg bm90IGluIHBhY2tldCwgc2VhcmNoIHN0YXJ0ICovCisgICAgICAgICAgICAgICAgZm9yIChpID0g MTsgKGkgPCBuKSAmJgorICAgICAgICAgICAgICAgICAgICAgIShmbGFnID0gKChkZXN0W2ldICYg MHg3ZikgPT0gc3RhcnQpKTsKKyAgICAgICAgICAgICAgICAgICAgIGkrKyk7CisgICAgICAgICAg ICAgICAgaWYgKGZsYWcgPT0gMCkgeyAvKiBub3QgZm91bmQsIGRpc2NhcmQganVuayAqLworICAg ICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJ4MjVpbmwgc2tpcHBpbmciLCIiLG4pOworICAg ICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeyAgICAg ICAgICAgICAgICAvKiBmb3VuZCwgZGlzY2FyZCBqdW5rIGJlZm9yZSBzdGFydCAqLworICAgICAg ICAgICAgICAgICAgICBpbnQgazsKKyAgICAgICAgICAgICAgICAgICAgbiA9IG4gLSBpICsgMTsK KyAgICAgICAgICAgICAgICAgICAgZm9yIChrID0gMTsgayA8PSBuOyBrKyssIGkrKykgZGVzdFtr XSA9IGRlc3RbaV07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAg ICAgZm9yIChpID0gMDsgKGkgPCBuKSAmJiAvKiBzZWFyY2ggZm9yIGVvbCAqLworICAgICAgICAg ICAgICAgICAhKGdvdGVvbD0oKCgqcGRlc3QgPSAqKHBkZXN0KzEpJnR0cG1zaykmMHg3Zik9PSBl b2wpKTsKKyAgICAgICAgICAgICAgICAgaSsrLHBkZXN0KyspOworICAgICAgICAgICAgKnBkZXN0 ID0gJ1wwJzsKKyAgICAgICAgICAgIHJlc3QgLT0gbjsKKyAgICAgICAgfQorICAgIH0gd2hpbGUg KChyZXN0ID4gMCkgJiYgKCFnb3Rlb2wpKTsKKworICAgIGlmIChnb3Rlb2wpIHsKKyAgICAgICAg biA9IG1heCAtIHJlc3Q7CisgICAgICAgIGRlYnVnIChGMTExLCJ4MjVpbmwgWC4yNSBnb3QiLChj aGFyICopIGRlc3Qsbik7CisgICAgICAgIGlmICh0aW1vKSB0dGltb2ZmKCk7CisgICAgICAgIGlm ICh0dHBmbGcrKyA9PSAwICYmIHR0cHJ0eSA9PSAwKSB7CisgICAgICAgICAgICBpZiAoKHR0cHJ0 eSA9IHBhcmNoayhkZXN0LHN0YXJ0LG4pKSA+IDApIHsKKyAgICAgICAgICAgICAgICBpbnQgajsK KyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJ4MjVpbmwgc2Vuc2VzIHBhcml0eSIsIiIsdHRw cnR5KTsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJ4MjVpbmwgcGFja2V0IGJlZm9yZSIs KGNoYXIgKilkZXN0LDApOworICAgICAgICAgICAgICAgIHR0cG1zayA9IDB4N2Y7CisgICAgICAg ICAgICAgICAgZm9yIChqID0gMDsgaiA8IG47IGorKykKKyAgICAgICAgICAgICAgICAgIGRlc3Rb al0gJj0gMHg3ZjsgLyogU3RyaXAgcGFyaXR5IGZyb20gcGFja2V0ICovCisgICAgICAgICAgICAg ICAgZGVidWcoRjExMCwieDI1aW5sIHBhY2tldCBhZnRlciAiLGRlc3QsMCk7CisgICAgICAgICAg ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsInBhcmNoayIsIiIsdHRwcnR5 KTsKKyAgICAgICAgICAgICAgICBpZiAodHRwcnR5IDwgMCkgeyB0dHBydHkgPSAwOyBuID0gLTE7 IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB0dGltb2ZmKCk7CisgICAgICAg IHJldHVybihuKTsKKyAgICB9CisgICAgdHRpbW9mZigpOworICAgIHJldHVybigtMSk7Cit9Cisj ZW5kaWYgLyogQ09NTUVOVCAqLworI2VuZGlmIC8qIFNVTlgyNSAqLworCisjaWZkZWYgSUJNWDI1 CisvKgorICogSUJNIFgyNSBzdXBwb3J0IC0gdXNpbmcgdGhlIE5QSSBzdHJlYW1zIGludGVyZmFj ZQorICogd3JpdHRlbiBieSBTdGVwaGVuIFJpZWhtLCBwYy1wbHVzLCBNdW5pY2ggR2VybWFueQor ICovCisKKy8qIHJpZWhtOiBtaXNzaW5nIGZ1bmN0aW9ucyAvIFRPRE8gbGlzdCAqLworCisvKgor ICB4MjVpbnRyKCkgLSBTZW5kIGFuIGludGVycnVwdCBwYWNrZXQKKyovCisKKy8qIHJldHVybiBh biBlcnJvciBtZXNzYWdlIGRlcGVuZGluZyBvbiBwYWNrZXQgdHlwZSAqLworY2hhciAqCit4MjVl cnIobikgaW50IG47IHsKKyAgICBzdGF0aWMgY2hhciBidWZbMzBdOworICAgIHN3aXRjaCAobikg eworICAgICAgY2FzZSBOQkFEQUREUjogICAgIHJldHVybiAiaW52YWxpZCBhZGRyZXNzIjsKKyAg ICAgIGNhc2UgTkJBRE9QVDogICAgICByZXR1cm4gImludmFsaWQgb3B0aW9ucyI7CisgICAgICBj YXNlIE5BQ0NFU1M6ICAgICAgcmV0dXJuICJubyBwZXJtaXNzaW9uIjsKKyAgICAgIGNhc2UgTk5P QUREUjogICAgICByZXR1cm4gInVuYWJsZSB0byBhbGxvY2F0ZSBhZGRyZXNzIjsKKyAgICAgIGNh c2UgTk9VVFNUQVRFOiAgICByZXR1cm4gImludmFsaWQgc3RhdGUiOworICAgICAgY2FzZSBOQkFE U0VROiAgICAgIHJldHVybiAiaW52YWxpZCBzZXF1ZW5jZSBudW1iZXIiOworICAgICAgY2FzZSBO U1lTRVJSOiAgICAgIHJldHVybiAic3lzdGVtIGVycm9yIjsKKyAgICAgIGNhc2UgTkJBRERBVEE6 ICAgICByZXR1cm4gImludmFsaWQgZGF0YSBzaXplIjsKKyAgICAgIGNhc2UgTkJBREZMQUc6ICAg ICByZXR1cm4gImludmFsaWQgZmxhZyI7CisgICAgICBjYXNlIE5OT1RTVVBQT1JUOiAgcmV0dXJu ICJ1bnN1cHBvcnRlZCBwcmltaXRpdmUiOworICAgICAgY2FzZSBOQk9VTkQ6ICAgICAgIHJldHVy biAiYWRkcmVzcyBpbiB1c2UiOworICAgICAgY2FzZSBOQkFEUU9TUEFSQU06IHJldHVybiAiYmFk IFFPUyBwYXJhbWV0ZXJzIjsKKyAgICAgIGNhc2UgTkJBRFFPU1RZUEU6ICByZXR1cm4gImJhZCBR T1MgdHlwZSI7CisgICAgICBjYXNlIE5CQURUT0tFTjogICAgcmV0dXJuICJiYWQgdG9rZW4gdmFs dWUiOworICAgICAgY2FzZSBOTk9QUk9UT0lEOiAgIHJldHVybiAicHJvdG9jb2wgaWQgY291bGQg bm90IGJlIGFsbG9jYXRlZCI7CisgICAgICBjYXNlIE5PRERDVUQ6ICAgICAgcmV0dXJuICJvZGQg bGVuZ3RoIGNhbGwgdXNlciBkYXRhIjsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGNrbWFrbXNn KGJ1ZixzaXplb2YoYnVmKSwiVW5rbm93biBOUEkgZXJyb3IgIixja2l0b2EobiksTlVMTCxOVUxM KTsKKyAgICAgICAgcmV0dXJuIGJ1ZjsKKyAgICB9Cit9CisKKy8qIHR1cm4gYSBtZWFuaW5nbGVz cyBwcmltaXRpdmUgbnVtYmVyIGludG8gYSBtZWFuaW5nZnVsIHByaW1pdGl2ZSBuYW1lICovCitj aGFyICoKK3gyNXByaW0obikgaW50IG47IHsKKyAgICBzdGF0aWMgY2hhciBidWZbMzBdOworICAg IHN3aXRjaChuKSB7CisgICAgICBjYXNlIE5fQklORF9BQ0s6ICAgICByZXR1cm4gIk5fQklORF9B Q0siOworICAgICAgY2FzZSBOX0JJTkRfUkVROiAgICAgcmV0dXJuICJOX0JJTkRfUkVRIjsKKyAg ICAgIGNhc2UgTl9DT05OX0NPTjogICAgIHJldHVybiAiTl9DT05OX0NPTiI7CisgICAgICBjYXNl IE5fQ09OTl9JTkQ6ICAgICByZXR1cm4gIk5fQ09OTl9JTkQiOworICAgICAgY2FzZSBOX0NPTk5f UkVROiAgICAgcmV0dXJuICJOX0NPTk5fUkVRIjsKKyAgICAgIGNhc2UgTl9DT05OX1JFUzogICAg IHJldHVybiAiTl9DT05OX1JFUyI7CisgICAgICBjYXNlIE5fREFUQUNLX0lORDogICByZXR1cm4g Ik5fREFUQUFDS19JTkQiOworICAgICAgY2FzZSBOX0RBVEFDS19SRVE6ICAgcmV0dXJuICJOX0RB VEFBQ0tfUkVRIjsKKyAgICAgIGNhc2UgTl9EQVRBX0lORDogICAgIHJldHVybiAiTl9EQVRBX0lO RCI7CisgICAgICBjYXNlIE5fREFUQV9SRVE6ICAgICByZXR1cm4gIk5fREFUQV9SRVEiOworICAg ICAgY2FzZSBOX0RJU0NPTl9JTkQ6ICAgcmV0dXJuICJOX0RJU0NPTl9JTkQiOworICAgICAgY2Fz ZSBOX0RJU0NPTl9SRVE6ICAgcmV0dXJuICJOX0RJU0NPTl9SRVEiOworICAgICAgY2FzZSBOX0VS Uk9SX0FDSzogICAgcmV0dXJuICJOX0VSUk9SX0FDSyI7CisgICAgICBjYXNlIE5fRVhEQVRBX0lO RDogICByZXR1cm4gIk5fRVhEQVRBX0lORCI7CisgICAgICBjYXNlIE5fRVhEQVRBX1JFUTogICBy ZXR1cm4gIk5fRVhEQVRBX1JFUSI7CisgICAgICBjYXNlIE5fSU5GT19BQ0s6ICAgICByZXR1cm4g Ik5fSU5GT19BQ0siOworICAgICAgY2FzZSBOX0lORk9fUkVROiAgICAgcmV0dXJuICJOX0lORk9f UkVRIjsKKyAgICAgIGNhc2UgTl9PS19BQ0s6ICAgICAgIHJldHVybiAiTl9PS19BQ0siOworICAg ICAgY2FzZSBOX09QVE1HTVRfUkVROiAgcmV0dXJuICJOX09QVE1HTVRfUkVRIjsKKyAgICAgIGNh c2UgTl9SRVNFVF9DT046ICAgIHJldHVybiAiTl9SRVNFVF9DT04iOworICAgICAgY2FzZSBOX1JF U0VUX0lORDogICAgcmV0dXJuICJOX1JFU0VUX0lORCI7CisgICAgICBjYXNlIE5fUkVTRVRfUkVR OiAgICByZXR1cm4gIk5fUkVTRVRfUkVRIjsKKyAgICAgIGNhc2UgTl9SRVNFVF9SRVM6ICAgIHJl dHVybiAiTl9SRVNFVF9SRVMiOworICAgICAgY2FzZSBOX1VERVJST1JfSU5EOiAgcmV0dXJuICJO X1VERVJST1JfSU5EIjsKKyAgICAgIGNhc2UgTl9VTkJJTkRfUkVROiAgIHJldHVybiAiTl9VTkJJ TkRfUkVRIjsKKyAgICAgIGNhc2UgTl9VTklUREFUQV9SRVE6IHJldHVybiAiTl9VTklUREFUQV9S RVEiOworICAgICAgY2FzZSBOX1VOSVREQVRBX0lORDogcmV0dXJuICJOX1VOSVREQVRBX0lORCI7 CisgICAgICBkZWZhdWx0OgorICAgICAgICBja21ha21zZyhidWYsc2l6ZW9mKGJ1ZiksIlVOS05P V04gKCIsY2tpdG9hKG4pLCIpIixOVUxMKTsKKyAgICAgICAgcmV0dXJuIGJ1ZjsKKyAgICB9Cit9 CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKgorICogRnVuY3Rpb246IHgyNWdldG1zZygpCisgKiBE ZXNjcmlwdGlvbjogZ2V0IGEgU1RSRUFNUyBtZXNzYWdlLCBhbmQgY2hlY2sgaXQgZm9yIGVycm9y cworICoKKyAqIFBhcmFtZXRlcnM6CisgKiBmZCAgICAgICAgICAgLSBmaWxlIGRlc2NyaXB0b3Ig dG8geDI1IGRldmljZSAob3BlbmVkKQorICogY29udHJvbCAgICAgIC0gY29udHJvbCBidWZmZXIg KHByZS1hbGxvY2F0ZWQpCisgKiBjdGxfc2l6ZSAgICAgLSBzaXplIG9mIGNvbnRyb2wgYnVmZmVy CisgKiBkYXRhICAgICAgICAgLSBkYXRhIGJ1ZmZlciAocHJlLWFsbG9jYXRlZCkKKyAqIGRhdGFf c2l6ZSAgICAtIHNpemUgb2YgZGF0YSBidWZmZXIKKyAqIGZsYWdzICAgICAgICAtIGZsYWdzIGZv ciBnZXRtc2coKQorICogZXhwZWN0ZWQgICAgIC0gZXhwZWN0ZWQgUHJpbWl0aXZlIHR5cGUKKyAq CisgKiBSZXR1cm4gVmFsdWU6CisgKiAgICAgID49IDAgICAgT0sgKHNpemUgb2YgZGF0YSByZXR1 cm5lZCkKKyAqICAgICAgLTEgICAgICBlcnJvcgorICoKKyAqLworaW50Cit4MjVnZXRtc2coIGZk LCBjb250cm9sLCBjdGxfc2l6ZSwgZGF0YSwgZGF0YV9zaXplLCBnZXRfZmxhZ3MsIGV4cGVjdGVk ICkKKyAgICBpbnQgICAgICAgICAgICAgICAgIGZkOyAgICAgICAgICAgICAvKiBYMjUgZGV2aWNl IChvcGVuZWQpICovCisgICAgTl9ucGlfY3RsX3QgICAgICAgICAqY29udHJvbDsgICAgICAgLyog Y29udHJvbCBidWZmZXIgKHByZS1hbGxvY2F0ZWQpICovCisgICAgaW50ICAgICAgICAgICAgICAg ICBjdGxfc2l6ZTsgICAgICAgLyogc2l6ZSBvZiBjb250cm9sIGJ1ZmZlciAqLworICAgIE5fbnBp X2RhdGFfdCAgICAgICAgKmRhdGE7ICAgICAgICAgIC8qIGRhdGEgYnVmZmVyIChwcmUtYWxsb2Nh dGVkKSAqLworICAgIGludCAgICAgICAgICAgICAgICAgZGF0YV9zaXplOyAgICAgIC8qIHNpemUg b2YgZGF0YSBidWZmZXIgKi8KKyAgICBpbnQgICAgICAgICAgICAgICAgICpnZXRfZmxhZ3M7ICAg ICAvKiBnZXRtc2coKSBmbGFncyAqLworICAgIGludCAgICAgICAgICAgICAgICAgZXhwZWN0ZWQ7 ICAgICAgIC8qIGV4cGVjdGVkIHByaW1pdGl2ZSB0eXBlICovCisvKiB4MjVnZXRtc2cgKi8gewor ICAgIGludCAgICAgICAgICAgICAgICAgcmMgPSAwOyAgICAgICAgIC8qIHJldHVybiBjb2RlICov CisgICAgc3RydWN0IHN0cmJ1ZiAgICAgICAqZ2V0X2N0bD1OVUxMOyAgLyogZ2V0bXNnIGNvbnRy b2wgKi8KKyAgICBzdHJ1Y3Qgc3RyYnVmICAgICAgICpnZXRfZGF0YT1OVUxMOyAvKiBnZXRtc2cg ZGF0YSAqLworICAgIGludCAgICAgICAgICAgICAgICAgbW9yZSA9IDA7ICAgICAgIC8qIGZsYWcg Zm9yIG1vcmUgZGF0YSBldGMgKi8KKyAgICBpbnQgICAgICAgICAgICAgICAgIGZpbGVfc3RhdHVz ID0gLTE7IC8qIGZpbGUgYXN5bmMgc3RhdHVzICovCisgICAgTl9ucGlfY3RsX3QgICAgICAgICAq IHJlc3VsdDsgICAgICAgLyogcG9pbnRlciB0byBzaW1wbGlmeSBzd2l0Y2goKSAqLworICAgIGlu dCAgICAgICAgICAgICAgICAgcGFja2V0X3R5cGUgPSAtMTsgLyogdW5rbm93biBwYWNrZXQgdGh1 cyBmYXIgKi8KKworI2lmZGVmIFRSQUNFCisgICAgcHJpbnRmKCAiVFJBQ0U6IGVudGVyaW5nIHgy NWdldG1zZ1xuIiApOworI2VuZGlmIC8qIFRSQUNFICovCisKKyAgICBkZWJ1ZyggRjExMCwgIngy NWdldG1zZyB3YWl0aW5nIGZvciBwYWNrZXQgIiwgeDI1cHJpbSggZXhwZWN0ZWQgKSwgMCk7Cisg ICAgLyogcHJlcGFyZSB0aGUgY29udHJvbCBzdHJ1Y3R1cmVzIGZvciBnZXRtc2cgKi8KKyAgICBp ZiAoY29udHJvbCkgeworICAgICAgICBpZiAoKGdldF9jdGwgPSAoc3RydWN0IHN0cmJ1ZiopbWFs bG9jKHNpemVvZihzdHJ1Y3Qgc3RyYnVmKSkpID09IE5VTEwpCisgICAgICAgICAgeworICAgICAg ICAgICAgICBwZXJyb3IoImtlcm1pdCB4MjVnZXRtc2coKTogZ2V0X2N0bCBtYWxsb2MgZmFpbGVk XG4iKTsKKyAgICAgICAgICAgICAgZGVidWcoIEYxMDAsICJ4MjVnZXRtc2cgbWFsbG9jIGZhaWxl ZCBmb3IgZ2V0X2N0bFxuIiwgIiIsIDApOworICAgICAgICAgICAgICByZXR1cm4oLTEpOworICAg ICAgICAgIH0KKyAgICAgICAgLyogYWxsb3cgZ2V0bXNnIHRvIHJldHVybiBhbiB1bmV4cGVjdGVk IHBhY2tldCB0eXBlICh3aGljaCBtYXkgYmUKKyAgICAgICAgICogbGFyZ2VyIHRoYW4gdGhlIGV4 cGVjdGVkIG9uZSkKKyAgICAgICAgICovCisgICAgICAgIGdldF9jdGwtPm1heGxlbiA9IE5QSV9N QVhfQ1RMOworICAgICAgICBnZXRfY3RsLT5sZW4gPSAwOworICAgICAgICBnZXRfY3RsLT5idWYg PSAoY2hhciAqKWNvbnRyb2w7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcHJpbnRmKAorICJrZXJt aXQgeDI1Z2V0bXNnKCk6IGludGVybmFsIGVycm9yLiBjb250cm9sIGJ1ZmZlciBNVVNUIGJlIHBy ZS1hbGxvY2F0ZWQhXG4iCisgICAgICAgICAgICAgICApOworICAgICAgICBkZWJ1ZyhGMTAwLCJ4 MjVnZXRtc2cgaW50ZXJuYWwgZXJyb3IuIG5vIGJ1ZmZlciBwcmUtYWxsb2NhdGVkIiwiIiwwKTsK KyAgICAgICAgcmV0dXJuKCAtMSApOworICAgIH0KKyAgICBpZiAoZGF0YSkgeworICAgICAgICBp ZiAoKGdldF9kYXRhID0gKHN0cnVjdCBzdHJidWYqKW1hbGxvYyhzaXplb2Yoc3RydWN0IHN0cmJ1 ZikpKSA9PSBOVUxMKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIHBlcnJvcigia2VybWl0IHgy NWdldG1zZygpOiBnZXRfZGF0YSBtYWxsb2MgZmFpbGVkXG4iKTsKKyAgICAgICAgICAgIGRlYnVn KCBGMTAwLCAieDI1Z2V0bXNnIG1hbGxvYyBmYWlsZWQgZm9yIGdldF9kYXRhXG4iLCAiIiwgMCk7 CisgICAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICB9CisgICAgICAgIGdldF9kYXRhLT5t YXhsZW4gPSAoTlBJX01BWF9EQVRBIDwgZGF0YV9zaXplICkgPworICAgICAgICAgIE5QSV9NQVhf REFUQSA6CisgICAgICAgICAgICBkYXRhX3NpemU7CisgICAgICAgIGdldF9kYXRhLT5sZW4gPSAw OworICAgICAgICBnZXRfZGF0YS0+YnVmID0gKGNoYXIgKilkYXRhOworICAgIH0KKworICAgIC8q IGdldCBhbiBYLjI1IHBhY2tldCAtCisgICAgICogaXQgbWF5IGJlIGFueSBraW5kIG9mIHBhY2tl dCwgc28gY2hlY2sgZm9yIHNwZWNpYWwgY2FzZXMKKyAgICAgKiBpdCBtYXkgYmUgc3BsaXQgaW50 byBtdWx0aXBsZSBwYXJ0cyAtIHNvIGxvb3AgaWYgbmVjZXNzYXJ5CisgICAgICovCisgICAgZG8g eworI2lmZGVmIERFQlVHCisgICAgICAgIHByaW50ZiggImtlcm1pdDogeDI1Z2V0bXNnKCk6IGdl dHRpbmcgYSBtZXNzYWdlXG4iICk7CisjZW5kaWYgLyogREVCVUcgKi8KKyAgICAgICAgZXJybm8g PSAwOworICAgICAgICBpZiAoKG1vcmUgPSBnZXRtc2coZmQsIGdldF9jdGwsIGdldF9kYXRhLCBn ZXRfZmxhZ3MpKSA8IDApIHsKKyNpZmRlZiBERUJVRworICAgICAgICAgICAgcHJpbnRmKCAia2Vy bWl0OiB4MjVnZXRtc2coKTogZ2V0bXNnIHJldHVybmVkIGFuIGVycm9yXG4iICk7CisgICAgICAg ICAgICBwZXJyb3IoICJnZXRtc2cgZXJyb3Igd2FzIiApOworI2VuZGlmIC8qIERFQlVHICovCisg ICAgICAgICAgICBkZWJ1ZyhGMTAxLCAieDI1Z2V0bXNnIGdldG1zZyByZXR1cm5lZCBhbiBlcnJv clxuIiwgIiIsIGVycm5vKTsKKyAgICAgICAgICAgIGlmICgoZXJybm8gPT0gRUFHQUlOKSAmJiAo Z2V0X2RhdGEgJiYgKGdldF9kYXRhLT5sZW4gPiAwKSkgKSB7CisgICAgICAgICAgICAgICAgLyog d2FzIGluIG5vbi1ibG9ja2luZyBtb2RlLCBub3RoaW5nIHRvIGdldCwgYnV0IHdlJ3JlCisgICAg ICAgICAgICAgICAgICogYWxyZWFkeSB3YWl0aW5nIGZvciB0aGUgcmVzdCBvZiB0aGUgcGFja2V0 IC0KKyAgICAgICAgICAgICAgICAgKiBzd2l0Y2ggdG8gYmxvY2tpbmcgbW9kZSBmb3IgdGhlIG5l eHQgcmVhZC4KKyAgICAgICAgICAgICAgICAgKiBmaWxlX3N0YXR1cyB1c2VkIHRvIHJlc2V0IGZp bGUgc3RhdHVzIGJlZm9yZSByZXR1cm5pbmcKKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAg ICAgICAgICBpZiAoKGZpbGVfc3RhdHVzID0gZmNudGwoZmQsIEZfR0VURkwsIDApKSA8IDAKKyAg ICAgICAgICAgICAgICAgICAgfHwgZmNudGwoZmQsIEZfU0VURkwsIGZpbGVfc3RhdHVzICYgfk9f TkRFTEFZKSA8IDApCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAg cGVycm9yKCJ4MjVnZXRtc2coKTogY291bGRuJ3QgY2hhbmdlIHgyNSBibG9ja2luZyBtb2RlIik7 CisgICAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEwMSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAieDI1Z2V0bXNnIGZjbnRsIHJldHVybmVkIGFuIGVycm9yXG4iLCAiIiwgZXJybm8p OworICAgICAgICAgICAgICAgICAgICAgIC8qIG5ldGNsb3MoKTsgKi8KKyAgICAgICAgICAgICAg ICAgICAgICByYyA9IC0xOworICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAvKiBsb29wIGFnYWluIGlu dG8gYSBibG9ja2luZyBnZXRtc2coKSAqLworICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl OworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg ICAgICAvKiBubyBkYXRhIHRvIGdldCBpbiBub24tYmxvY2tpbmcgbW9kZSAtIHJldHVybiBlbXB0 eSBoYW5kZWQgKi8KKyAgICAgICAgICAgICAgICBwZXJyb3IoICJ4MjVnZXRtc2coKTogZ2V0bXNn IGZhaWxlZCIgKTsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJ4MjVnZXRtc2cgZ2V0bXNn IHJldHVybmVkIGFuIGVycm9yXG4iLCAiIiwgZXJybm8pOworICAgICAgICAgICAgICAgIHJjID0g LTE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxz ZSBpZiAobW9yZSAmIE1PUkVDVEwpIHsKKyAgICAgICAgICAgIC8qIHBhbmljIC0gdGhlIGNvbnRy b2wgaW5mb3JtYXRpb24gd2FzIGxhcmdlciB0aGFuIHRoZQorICAgICAgICAgICAgICogbWF4aW11 bSBjb250cm9sIGJ1ZmZlciBzaXplIQorICAgICAgICAgICAgICovCisgICAgICAgICAgICAvKiBy aWVobTogY2xvc2UgY29ubmVjdGlvbj8gKi8KKyNpZmRlZiBERUJVRworICAgICAgICAgICAgcHJp bnRmKCJ4MjVnZXRtc2coKTogcmVjZWl2ZWQgcGFydGlhbCBjb250cm9sIHBhY2tldCAtIHBhbmlj XG4iKTsKKyNlbmRpZiAvKiBERUJVRyAqLworICAgICAgICAgICAgZGVidWcoIEYxMDEsICJ4MjVn ZXRtc2cgZ2V0bXNnIGJhZCBjb250cm9sIGJsb2NrXG4iLCAiIiwgZXJybm8pOworICAgICAgICAg ICAgcmMgPSAtMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYg KHJlc3VsdCA9IChOX25waV9jdGxfdCAqKWNvbnRyb2wpIHsKKyAgICAgICAgICAgIHBhY2tldF90 eXBlID0gcmVzdWx0LT5iaW5kX2Fjay5QUklNX3R5cGU7CisgICAgICAgICAgICBpZiAocGFja2V0 X3R5cGUgIT0gTl9PS19BQ0spIHsKKyAgICAgICAgICAgICAgICB4MjVsYXN0bXNnID0gcGFja2V0 X3R5cGU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyNpZmRlZiBERUJVRworICAgICAgICAv KiBwcmludGYoICJrZXJtaXQ6IHgyNWdldG1zZygpOiBnZXR0aW5nICIgKTsgKi8KKyAgICAgICAg aWYgKGdldF9jdGwtPmxlbiA+IDApIHsKKyAgICAgICAgICAgIHgyNWR1bXBfcHJpbShyZXN1bHQp OworICAgICAgICB9CisgICAgICAgIGRlYnVnKEYxMTAsCisgICAgICAgICAgICAgICJ4MjVnZXRt c2cgZ290IHBhY2tldCAiLAorICAgICAgICAgICAgICB4MjVwcmltKCByZXN1bHQtPmJpbmRfYWNr LlBSSU1fdHlwZSApLAorICAgICAgICAgICAgICAwCisgICAgICAgICAgICAgICk7CisjZW5kaWYg LyogREVCVUcgKi8KKworICAgICAgICBpZiAoZ2V0X2N0bC0+bGVuID49IChpbnQpc2l6ZW9mKHJl c3VsdC0+YmluZF9hY2suUFJJTV90eXBlKSkgeworICAgICAgICAgICAgLyogbm90IGFzIHByZXR0 eSBhcyBhIHN3aXRjaCgpLCBidXQgc3dpdGNoIGNhbid0IGhhbmRsZQorICAgICAgICAgICAgICog cnVudGltZSB2YXJpYWJsZSB2YWx1ZXMgOi0oCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAg IGlmIChwYWNrZXRfdHlwZSA9PSBleHBlY3RlZCApIHsKKyAgICAgICAgICAgICAgICAvKiBnb3Qg d2hhdCB3ZSB3YW50ZWQsIHNwZWNpYWwgY2FzZSBmb3IgREFUQV9JTkQKKyAgICAgICAgICAgICAg ICAgKiBwYWNrZXRzIHRob3VnaCAqLworICAgICAgICAgICAgICAgIC8qIHJpZWhtOiBjaGVjayBR LWJpdCA/ICovCisjaWZkZWYgREVCVUcKKyAgICAgICAgICAgICAgICBwcmludGYoIngyNWdldG1z ZygpOiBnb3QgZXhwZWN0ZWQgcGFja2V0XG5yYyBpcyAlZFxuIiwgcmMpOworI2VuZGlmIC8qIERF QlVHICovCisgICAgICAgICAgICAgICAgaWYgKHBhY2tldF90eXBlID09IE5fREFUQV9JTkQgKSB7 CisgICAgICAgICAgICAgICAgICAgIC8qIGRhdGEgcmVjZWl2ZWQuIE1heSBiZSBpbmNvbXBsZXRl LCBldmVuIHRob3VnaAorICAgICAgICAgICAgICAgICAgICAgKiBnZXRtc2cgcmV0dXJuZWQgT0sK KyAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQt PmRhdGFfaW5kLkRBVEFfeGZlcl9mbGFncyAmIE5fTU9SRV9EQVRBX0ZMQUcpCisgICAgICAgICAg ICAgICAgICAgICAgICBtb3JlIHw9IE1PUkVEQVRBOworICAgICAgICAgICAgICAgICAgICBpZiAo cmVzdWx0LT5kYXRhX2luZC5EQVRBX3hmZXJfZmxhZ3MgJiBOX1JDX0ZMQUcpCisgICAgICAgICAg ICAgICAgICAgICAgICBwcmludGYoICJ4MjVnZXRtc2coKTogZGF0YSBwYWNrZXQgd2FudHMgYWNr XG4iICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmKCBwYWNrZXRf dHlwZSA9PSBOX0RJU0NPTl9JTkQpIHsKKyAgICAgICAgICAgICAgICBwcmludGYoICJYMjUgZGlj b25uZWN0ZWRcbiIgKTsKKyAgICAgICAgICAgICAgICAvKiByaWVobTogbmVlZCB0byBhY2tub3ds ZWRnZSBhIGRpc2Nvbm5lY3Rpb24/ICovCisgICAgICAgICAgICAgICAgeDI1Y2xlYXIoKTsKKyAg ICAgICAgICAgICAgICAvKiB4MjV1bmJpbmQoIHR0eWZkICk7ICovCisgICAgICAgICAgICAgICAg cmMgPSAtMTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiggcGFja2V0X3R5cGUgPT0gTl9FUlJPUl9B Q0spIHsKKyAgICAgICAgICAgICAgICBlcnJubyA9IHJlc3VsdC0+ZXJyb3JfYWNrLlVOSVhfZXJy b3I7CisgICAgICAgICAgICAgICAgcGVycm9yKCAiWDI1IGVycm9yIHJlY2VpdmVkIiApOworICAg ICAgICAgICAgICAgIHJjID0gLTE7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg ICAgIHByaW50ZigieDI1Z2V0bXNnKCk6IGZhaWxlZCAlc1xuIiwgeDI1ZXJyKHBhY2tldF90eXBl KSk7CisgICAgICAgICAgICAgICAgcmMgPSAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor I2lmZGVmIENPTU1FTlQKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvKiBQYW5pYyAtIG5v IGNvbnRyb2wgZGF0YSAqLworICAgICAgICAgICAgcHJpbnRmKCAia2VybWl0OiB4MjVnZXRtc2co KTogbm8gY29udHJvbCBkYXRhIHdpdGggcGFja2V0XG4iICk7CisgICAgICAgICAgICByYyA9IC0x OworICAgICAgICB9CisjZW5kaWYgLyogQ09NTUVOVCAqLworCisgICAgICAgIGlmIChnZXRfZGF0 YSAmJiAoZ2V0X2RhdGEtPmxlbiA+PSAwKSkgeworICAgICAgICAgICAgZ2V0X2RhdGEtPmJ1ZiAr PSBnZXRfZGF0YS0+bGVuOworICAgICAgICAgICAgZ2V0X2RhdGEtPm1heGxlbiAtPSBnZXRfZGF0 YS0+bGVuOworICAgICAgICB9CisgICAgfSB3aGlsZSAoKHJjID09IDApCisgICAgICAgICAgICAg JiYgKGdldF9kYXRhICYmIChnZXRfZGF0YS0+bWF4bGVuID4gMCkpCisgICAgICAgICAgICAgJiYg KG1vcmUgJiBNT1JFREFUQSkKKyAgICAgICAgICAgICApOworCisgICAgLyogcmV0dXJuIHRoZSBm aWxlIHN0YXR1cyB0byBpdHMgb3JpZ2luYWwgdmFsdWUsIHVubGVzcyBpdHMgc3RpbGwKKyAgICAg KiBzZXQgdG8gLTEsIG9yIG9uZSBvZiB0aGUgZmNudGwncyBmYWlsZWQgKi8KKyAgICBpZiAoKGZp bGVfc3RhdHVzID49IDApICYmIGZjbnRsKGZkLCBGX1NFVEZMLCBmaWxlX3N0YXR1cykgPCAwKQor ICAgICAgICByYyA9IC0xOworCisgICAgLyoKKyAgICAgKiBWZXJpZnkgdGhhdCB3ZSByZWNlaXZl ZCBhbiBleHBlY3RlZCBwcmltaXRpdmUKKyAgICAgKiB0aGVyZSBpcyBhcHBhcmFudGx5IGFuIGVy cm9yIGNhc2Ugd2hlcmUgdGhlIHByaW1pdGl2ZSBpcyBzZXQKKyAgICAgKiBjb3JyZWN0bHksIGJ1 dCB0aGVyZSBpcyBub3QgZW5vdWdoIGRhdGEgaW4gdGhlIGNvbnRyb2wgc3RydWN0dXJlCisgICAg ICovCisgICAgaWYgKChwYWNrZXRfdHlwZSAhPSBleHBlY3RlZCkgJiYgKGdldF9jdGwtPmxlbiA+ PSBjdGxfc2l6ZSkgKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLAorICAgICAgICAgICAgICAg ICJ4MjVnZXRtc2coKTogJXMgTk9UIHJlY2VpdmVkLiBQcmltaXRpdmUgcmVjZWl2ZWQgd2FzICVz XG4iLAorICAgICAgICAgICAgICAgIHgyNXByaW0oIGV4cGVjdGVkICksIHgyNXByaW0oIHBhY2tl dF90eXBlICkpOworICAgICAgICBkZWJ1ZyhGMTEwLCAieDI1Z2V0bXNnIGdvdCBhbiB1bmV4cGVj dGVkIHBhY2tldCAiLAorICAgICAgICAgICAgICB4MjVwcmltKHBhY2tldF90eXBlKSwKKyAgICAg ICAgICAgICAgMAorICAgICAgICAgICAgICApOworICAgICAgICByYyA9IC0xOworICAgIH0KKwor ICAgIGlmIChyYyA9PSAwKSB7CisgICAgICAgIGlmIChnZXRfZGF0YSAmJiAoIGdldF9kYXRhLT5s ZW4gPj0gMCkpIHsKKyAgICAgICAgICAgIHJjID0gZ2V0X2RhdGEtPmxlbjsKKyAgICAgICAgfQor ICAgIH0KKworICAgIGlmIChnZXRfY3RsKSAgeyBmcmVlKGdldF9jdGwpOyBnZXRfY3RsID0gTlVM TDsgfQorICAgIGlmIChnZXRfZGF0YSkgeyBmcmVlKGdldF9kYXRhKTsgZ2V0X2RhdGEgPSBOVUxM OyB9CisKKyNpZmRlZiBDT01NRU5UCisjaWZkZWYgREVCVUcKKyAgICBwcmludGYoICJrZXJtaXQg eDI1Z2V0bXNnKCk6IHJldHVybmluZyAlZFxuIiwgcmMgKTsKKyNlbmRpZiAvKiBERUJVRyAqLwor I2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICBkZWJ1ZyhGMTEwLCAieDI1Z2V0bXNnIHJldHVybmlu ZyBwYWNrZXQgIiwgeDI1cHJpbSggcGFja2V0X3R5cGUgKSwgMCk7CisKKyNpZmRlZiBUUkFDRQor ICAgIHByaW50ZiggIlRSQUNFOiBsZWF2aW5nIHgyNWdldG1zZ1xuIiApOworI2VuZGlmIC8qIFRS QUNFICovCisgICAgcmV0dXJuKHJjKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBG dW5jdGlvbjogeDI1cHV0bXNnKCkKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgc2VuZCBh IG1lc3NhZ2UgdG8gYSBYMjUgU1RSRUFNCisgKgorICogUGFyYW1ldGVyczoKKyAqICAgICAgZmQg ICAgICAgICAgICAgIC0gZmlsZSBkZXNjcmlwdG9yIHRvIHgyNSBkZXZpY2UgKG9wZW5lZCkKKyAq ICAgICAgY29udHJvbCAgICAgICAgIC0gY29udHJvbCBidWZmZXIgKHByZS1hbGxvY2F0ZWQpCisg KiAgICAgIGRhdGEgICAgICAgICAgICAtIGRhdGEgYnVmZmVyIChwcmUtYWxsb2NhdGVkKQorICog ICAgICBkYXRhX2xlbiAgICAgICAgLSBsZW5ndGggb2YgZGF0YSB0byBiZSB0cmFuc21pdHRlZAor ICogICAgICBwdXRfZmxhZ3MgICAgICAgLSBmbGFncyBmb3IgcHV0bXNnKCkKKyAqCisgKiBSZXR1 cm4gVmFsdWU6CisgKiAgICAgID49IDAgICAgbnVtYmVyIG9mIGJ5dGVzIHRyYW5zbWl0dGVkCisg KiAgICAgIC0xICAgICAgZXJyb3IKKyAqLworaW50Cit4MjVwdXRtc2coZmQsIGNvbnRyb2wsIGRh dGEsIGRhdGFfbGVuLCBwdXRfZmxhZ3MpCisgICAgaW50ICAgICAgICAgICAgICAgICBmZDsgICAg ICAgICAgICAgLyogWDI1IGRldmljZSAob3BlbmVkKSAqLworICAgIE5fbnBpX2N0bF90ICAgICAg ICAgKmNvbnRyb2w7ICAgICAgIC8qIGNvbnRyb2wgYnVmZmVyIChwcmUtYWxsb2NhdGVkKSAqLwor ICAgIE5fbnBpX2RhdGFfdCAgICAgICAgKmRhdGE7ICAgICAgICAgIC8qIGRhdGEgYnVmZmVyIChw cmUtYWxsb2NhdGVkKSAqLworICAgIGludCAgICAgICAgICAgICAgICAgZGF0YV9sZW47ICAgICAg IC8qIGxlbmd0aCBvZiBkYXRhIChub3QgdGhlIHNpemUgb2YKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB0aGUgYnVmZmVyKSAqLworICAgIGludCAgICAgICAgICAg ICAgICAgKnB1dF9mbGFnczsgICAgIC8qIHB1dG1zZygpIGZsYWdzICovCisvKiB4MjVwdXRtc2cg Ki8geworICAgIGludCAgICAgICAgICAgICAgICAgcmMgPSAwOyAgICAgICAgIC8qIHJldHVybiBj b2RlICovCisgICAgdWxvbmcgICAgICAgICAgICAgICB0eXBlOyAgICAgICAgICAgLyogcHJpbWl0 aXZlIHR5cGUgKi8KKyAgICBzdHJ1Y3Qgc3RyYnVmICAgICAgICpwdXRfY3RsID0gTlVMTDsgLyog cHV0bXNnIGNvbnRyb2wgKi8KKyAgICBzdHJ1Y3Qgc3RyYnVmICAgICAgICpwdXRfZGF0YSA9IE5V TEw7IC8qIHB1dG1zZyBkYXRhICovCisKKyNpZmRlZiBUUkFDRQorICAgIHByaW50ZiggIlRSQUNF OiBlbnRlcmluZyB4MjVwdXRtc2dcbiIgKTsKKyNlbmRpZiAvKiBUUkFDRSAqLworCisjaWZkZWYg REVCVUcKKyAgICBwcmludGYoICJrZXJtaXQ6IHgyNXB1dG1zZygpOiBwdXR0aW5nICIgKTsKKyAg ICB4MjVkdW1wX3ByaW0oIGNvbnRyb2wgKTsKKyAgICBwcmludGYoICJcdGRhdGE6XHRcdCIgKTsK KyAgICB4MjVkdW1wX2RhdGEoIGRhdGEsIDAsIGRhdGFfbGVuICk7CisgICAgZGVidWcoRjExMCwi eDI1cHV0bXNnOiBwdXR0aW5nIHBhY2tldCAiLHgyNXByaW0oY29udHJvbC0+UFJJTV90eXBlKSww KTsKKyNlbmRpZiAvKiBERUJVRyAqLworCisgICAgaWYgKGNvbnRyb2wpIHsKKyAgICAgICAgcHV0 X2N0bCA9IChzdHJ1Y3Qgc3RyYnVmICopbWFsbG9jKCBzaXplb2YoIHN0cnVjdCBzdHJidWYgKSAp OworICAgICAgICBpZiAocHV0X2N0bCA9PSBOVUxMKSB7CisgICAgICAgICAgICBwZXJyb3IoImtl cm1pdCB4MjVwdXRtc2coKTogcHV0X2N0bCBtYWxsb2MgZmFpbGVkXG4iKTsKKyAgICAgICAgICAg IHJldHVybigtMSk7CisgICAgICAgIH0KKyAgICAgICAgcHV0X2N0bC0+bWF4bGVuID0gMDsgICAg ICAgICAgICAgICAgICAgIC8qIHVudXNlZCBieSBwdXRtc2cgKi8KKyAgICAgICAgcHV0X2N0bC0+ bGVuID0gTlBJX01BWF9DVEw7CisgICAgICAgIHB1dF9jdGwtPmJ1ZiA9IChjaGFyICopY29udHJv bDsKKyAgICB9CisgICAgaWYgKGRhdGEgJiYgKCBkYXRhX2xlbiA+IDApKSB7CisgICAgICAgIHB1 dF9kYXRhID0gKHN0cnVjdCBzdHJidWYgKiltYWxsb2MoIHNpemVvZiggc3RydWN0IHN0cmJ1ZiAp ICk7CisgICAgICAgIGlmKCBwdXRfZGF0YSA9PSBOVUxMKSB7CisgICAgICAgICAgICBwZXJyb3Io Imtlcm1pdCB4MjVwdXRtc2coKTogcHV0X2RhdGEgbWFsbG9jIGZhaWxlZFxuIik7CisgICAgICAg ICAgICByZXR1cm4oLTEpOworICAgICAgICB9CisgICAgICAgIHB1dF9kYXRhLT5tYXhsZW4gPSAw OyAgICAgICAgICAgICAgICAgICAvKiB1bnVzZWQgYnkgcHV0bXNnICovCisgICAgICAgIHB1dF9k YXRhLT5sZW4gPSBkYXRhX2xlbjsKKyAgICAgICAgcHV0X2RhdGEtPmJ1ZiA9IChjaGFyICopZGF0 YTsKKyAgICB9CisKKyAgICBlcnJubyA9IDA7CisgICAgcmMgPSBwdXRtc2cgKGZkLCBwdXRfY3Rs LCBwdXRfZGF0YSwgMCk7CisgICAgaWYgKHJjIDwgMCkgeworICAgICAgICBwcmludGYoIngyNXB1 dG1zZygpOiBjb3VsZG4ndCBwdXQgJXNcbiIseDI1cHJpbShjb250cm9sLT5QUklNX3R5cGUpKTsK KyAgICAgICAgcGVycm9yKCJrZXJtaXQ6IHgyNXB1dG1zZygpOiBwdXRtc2cgZmFpbGVkIik7Cisg ICAgICAgIHJldHVybigtMSk7CisgICAgfQorCisgICAgLyogcmllaG06IHRoaXMgc2hvdWxkIHBl cmhhcHMgYmUgZGlzY291bnRlZCEgKi8KKyAgICB4MjVsYXN0bXNnID0gY29udHJvbC0+UFJJTV90 eXBlOworCisjaWZkZWYgQ09NTUVOVAorI2lmZGVmIERFQlVHCisgICAgcHJpbnRmKCAia2VybWl0 IGRlYnVnOiB4MjVwdXRtc2coKSByZXR1cm5pbmcgJWRcbiIsIGRhdGFfbGVuICk7CisjZW5kaWYg LyogREVCVUcgKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgZGVidWcoIEYxMDEsICJ4MjVw dXRtc2cgYmxvY2sgc2l6ZSBwdXQgIiwgIiIsIGRhdGFfbGVuKTsKKworI2lmZGVmIFRSQUNFCisg ICAgcHJpbnRmKCAiVFJBQ0U6IGxlYXZpbmcgeDI1cHV0bXNnXG4iICk7CisjZW5kaWYgLyogVFJB Q0UgKi8KKworICAgIHJldHVybiggZGF0YV9sZW4gKTsKK30KKworLyoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqCisqIEZ1bmN0aW9uOiB4MjViaW5kCisqIERlc2NyaXB0aW9uOiAgVGhlIGJpbmQgc3VibWl0 dGVkIHRvIE5QSSBwcm92aWRlcyB0aGUgaW5mb3JtYXRpb24gcmVxdWlyZWQKKyogICAgICAgICAg ICAgICBieSB0aGUgcGFja2V0IGxheWVyIGZvciBpdCB0byBsaXN0ZW4gZm9yIHN1aXRhYmxlIGlu Y29taW5nCisqICAgICAgICAgICAgICAgY2FsbHMuCisqCisqIFdBUk5JTkc6CisqCisqIFRoaXMg cm91dGluZSBuZWVkcyB0byBiZSBjYWxsZWQgaW4gYSBjb21wbGV0ZWx5IGRpZmZlcmVudCBtYW5u ZXIgZm9yCisqIHRoZSBjbGllbnQgYW5kIHNlcnZlciBzaWRlLiBXaGVuIHN0YXJ0aW5nIGEgY2xp ZW50LCB0aGUKKyogbnVtX3dhaXRpbmdfY2FsbHMgYW5kIENVRCBpbmZvcm1hdGlvbiBzaG91bGQg YWxsIGJlIHNldCB0byAwISBUaGUKKyogY2xpZW50J3MgQ1VEIG11c3QgYmUgaW5zZXJ0ZWQgaW4g dGhlIENPTk5fUkVRIGRhdGEgYmxvY2suCisqIFdoZW4gc3RhcnRpbmcgYSBzZXJ2ZXIsIHRoZSBD VUQgbXVzdCBiZSBzZXQgdG8gYSBDVUQgcGF0dGVybiwgYW5kCisqIHRoZSBudW1iZXIgb2Ygd2Fp dGluZyBjYWxscyBzaG91bGQgYmUgc2V0IHRvIGEgbnVtYmVyIG90aGVyIHRoYW4gMC4KKyogKG51 bSB3YWl0aW5nIGNhbGxzIGlzIHRoZSBudW1iZXIgb2YgaW5jb21taW5nIGNhbGxzIHdoaWNoIGFy ZSB0byBiZQorKiBwdXQgb24gaG9sZCB3aGlsZSB0aGUgc2VydmVyIGlzIHNlcnZpY2luZyBhbm90 aGVyIGNsaWVudC4pCisqCisqIFdobyBpbnZlbnRlZCB0aGlzIGNyYXA/CisqCisqIFBhcmFtZXRl cnM6CisqICAgICAgIGZkICAgICAgICAgICAgICAtIFgyNSBkZXZpY2UgKG9wZW5lZCkKKyogICAg ICAgYWRkciAgICAgICAgICAgIC0gbG9jYWwgYWRkcmVzcworKiAgICAgICBjdWQgICAgICAgICAg ICAgLSBVc2VyIERhdGEgKG51bGwgdGVybWluYXRlZCkKKyogICAgICAgY3VkX2xlbiAgICAgICAg IC0gVXNlciBEYXRhIGxlbmd0aAorKiAgICAgICBudW1fd2FpdGluZ19jYWxscyAtIG51bWJlciBv ZiBvdXRzdGFuZGluZyBjYWxscyBhbGxvd2VkIG9uIHRoaXMgc3RyZWFtCisqICAgICAgIGxpbmUg ICAgICAgICAgICAtIGxvZ2ljYWwgcG9ydCBudW1iZXIgKDEpCisqICAgICAgIGZsYWdzICAgICAg ICAgICAtIDAsIERFRkFVTFRfTElTVEVORVIgb3IgVE9LRU5fUkVRVUVTVAorKgorKiBSZXR1cm4g VmFsdWU6CisqICAgICAgIGlmIGJpbmRpbmcgaXMgc3VjY2Vzc2Z1bCwgMCBpcyByZXR1cm5lZCBm b3IgYSBjbGllbnQsIGFuZCBhIHRva2VuIGlzCisqICAgICAgIHJldHVybmVkIGZvciBhIHNlcnZl cgorKgorKiBSZXR1cm4gY29kZTogMCBpZiBzdWNjZXNzZnVsCisqICAgICAgICAgICAgICAtMSBp ZiB1bnN1Y2Nlc3NmdWwKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit1bG9uZworeDI1YmluZChm ZCwgYWRkciwgY3VkLCBjdWRfbGVuLCBudW1fd2FpdGluZ19jYWxscywgbGluZSwgYmluZF9mbGFn cykKKyAgICBpbnQgZmQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBYMjUgZGV2aWNl IChvcGVuZWQpICovCisgICAgY2hhciAqIGFkZHI7ICAgICAgICAgICAgICAgICAgICAgICAgLyog bG9jYWwgYWRkcmVzcyAqLworICAgIGNoYXIgKiBjdWQ7ICAgICAgICAgICAgICAgICAgICAgICAg IC8qIENhbGwgVXNlciBEYXRhIChudWxsIHRlcm1pbmF0ZWQpICovCisgICAgaW50IGN1ZF9sZW47 ICAgICAgICAgICAgICAgICAgICAgICAgLyogVXNlciBEYXRhIGxlbmd0aCAqLworICAgIGludCBu dW1fd2FpdGluZ19jYWxsczsgICAgICAgICAgICAgIC8qIE91dHN0YW5kaW5nIGNhbGxzIGFsbG93 ZWQgKi8KKyAgICBpbnQgbGluZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsb2dpY2Fs IHBvcnQgbnVtYmVyICovCisgICAgdWxvbmcgYmluZF9mbGFnczsgICAgICAgICAgIC8qIDAsIERF RkFVTFRfTElTVEVORVIgb3IgVE9LRU5fUkVRVUVTVCAqLworLyogeDI1YmluZCAqLyB7CisgICAg dWxvbmcgcmM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcmV0dXJuIGNvZGUgKi8KKyAg ICBpbnQgZ2V0X2ZsYWdzOyAgICAgICAgICAgICAgICAgICAgICAvKiBwcmlvcml0eSBmbGFnIHBh c3NlZCB0byBnZXRtc2cgKi8KKyAgICBpbnQgcHV0X2ZsYWdzID0gMDsgICAgICAgICAgICAgICAg ICAvKiBvdXRwdXQgZmxhZ3MgZm9yIHB1dG1zZywgYWx3YXlzIDAgKi8KKyAgICB1bG9uZyB0eXBl OyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwcmltaXRpdmUgdHlwZSAqLworICAgIE5fYmlu ZF9yZXFfdCAqYmluZF9yZXE7ICAgICAgICAgICAgIC8qIHBvaW50ZXIgdG8gTl9CSU5EX1JFUSBw cmltaXRpdmUgKi8KKyAgICBOX2JpbmRfYWNrX3QgKmJpbmRfYWNrOyAgICAgICAgICAgICAvKiBw b2ludGVyIHRvIE5fQklORF9BQ0sgcHJpbWl0aXZlICovCisgICAgY2hhciAqYWRkdGxfaW5mbzsg ICAgICAgICAgICAgICAgICAgLyogcG9pbnRlciB0byBpbmZvIGluIGFkZGl0aW9uIHRvCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogdGhlIE5fQklORF9SRVEgcHJp bWl0aXZlIHRoYXQgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KiBwYXNzZWQgaW4gdGhlIGNvbnRyb2wgc3RydWN0dXJlCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICogdG8gcHV0bXNnICovCisgICAgaW50IGFkZHJfbGVuID0gMDsg ICAgICAgICAgICAgICAgICAgLyogbGVuZ3RoIG9mIGFkZHJlc3Mgc3RyaW5nICovCisgICAgdWxv bmcgYmluZF9yZXFfdF9zaXplOyAgICAgICAgICAgICAgLyogZm9yIGRlYnVnZ2luZyBvbmx5ICov CisKKyNpZmRlZiBUUkFDRQorICAgIHByaW50ZigiVFJBQ0U6IGVudGVyaW5nIHgyNWJpbmRcbiIg KTsKKyNlbmRpZiAvKiBUUkFDRSAqLworCisjaWZkZWYgREVCVUcKKyAgICBwcmludGYoIlRSQUNF OiB4MjViaW5kKCAlZCwgJXMsICVzLCAlZCwgJWQgKVxuIiwKKyAgICAgICAgICAgZmQsIGFkZHIs IGN1ZCwgbGluZSwgYmluZF9mbGFncworICAgICAgICAgICApOworI2VuZGlmIC8qIERFQlVHICov CisKKyAgICAvKgorICAgICAqIEFsbG9jYXRlICBhbmQgemVybyBvdXQgc3BhY2UgdG8gaG9sZCB0 aGUgY29udHJvbCBwb3J0aW9uIG9mIHRoZQorICAgICAqIG1lc3NhZ2UgcGFzc2VkIHRvIHB1dG1z Zy4gVGhpcyB3aWxsIGNvbnRhaW4gdGhlIE5fQklORF9SRVEKKyAgICAgKiBwcmltaXRpdmUgYW5k IGFueSBhZGRpdGlvbmFsIGluZm8gcmVxdWlyZWQgZm9yIHRoYXQuCisgICAgICoKKyAgICAgKiBO b3RlOiBhbGxvY2F0ZWQgc3BhY2UgaXMgdGhlIHNpemUgb2YgdGhlIHVuaW9uIHR5cGVkZWYKKyAg ICAgKiBOX25waV9jdGxfdCB0byBhbGxvdyB0aGUgdXNlIGZvIHRoZSBnZW5lcmljIHgyNXB1dG1z ZyByb3V0aW5lLgorICAgICAqLworICAgIGJpbmRfcmVxID0gKE5fYmluZF9yZXFfdCAqKSBtYWxs b2Moc2l6ZW9mKCBOX25waV9jdGxfdCkpOworICAgIGlmIChiaW5kX3JlcSA9PSBOVUxMKSB7Cisg ICAgICAgIHBlcnJvcigia2VybWl0OiB4MjViaW5kKCk6IGJpbmRfcmVxIG1hbGxvYyBmYWlsZWQi KTsKKyAgICAgICAgZGVidWcoRjEwMCwgIngyNWJpbmQgYmluZF9yZXEgbWFsbG9jIGZhaWxlZCIs ICIiLCAwKTsKKyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9CisgICAgYnplcm8oKGNoYXIgKili aW5kX3JlcSwgc2l6ZW9mKE5fbnBpX2N0bF90KSk7CisKKyAgICAvKiBCdWlsZCB0aGUgQmluZCBS ZXF1ZXN0IFByaW1pdGl2ZSAqLworICAgIGJpbmRfcmVxLT5QUklNX3R5cGUgPSAodWxvbmcpIE5f QklORF9SRVE7CisKKyAgICAvKiBOb3RlIHRoYXQgdGhlIGFkZHJlc3MgbGVuZ3RoIGlzIG4rMiBh bmQgTk9UIG4uIFR3byBieXRlcyBNVVNUIHByZWNlZWQKKyAgICAgKiB0aGUgYWN0dWFsIGFkZHJl c3MgaW4gYW4gTl9CSU5EX1JFUS4gVGhlIGZpcnN0IGJ5dGUgY29udGFpbnMgdGhlCisgICAgICog bGluZSBudW1iZXIgYmVpbmcgdXNlZCB3aXRoIHRoaXMgYWRkcmVzcywgYW5kIHRoZSBzZWNvbmQg Ynl0ZSBpcyB0aGUKKyAgICAgKiBYLjEyMSBhZGRyZXNzIHByZWZpeCwgd2hpY2ggbXVzdCBiZSB6 ZXJvLgorICAgICAqLworICAgIGFkZHJfbGVuID0gc3RybGVuKGFkZHIpOworICAgIGJpbmRfcmVx LT5BRERSX2xlbmd0aCA9ICh1bG9uZykgKGFkZHJfbGVuICsgMik7CisgICAgYmluZF9yZXEtPkFE RFJfb2Zmc2V0ID0gKHVsb25nKShzaXplb2YoTl9iaW5kX3JlcV90KSk7CisgICAgYmluZF9yZXEt PkNPTklORF9udW1iZXIgPSAodWxvbmcpbnVtX3dhaXRpbmdfY2FsbHM7IC8qIHNlcnZlciBvbmx5 ICovCisgICAgYmluZF9yZXEtPkJJTkRfZmxhZ3MgPSAodWxvbmcpIGJpbmRfZmxhZ3M7IC8qIDAg aW4gY2xpZW50ICovCisgICAgYmluZF9yZXEtPlBST1RPSURfbGVuZ3RoID0gKHVsb25nKSBjdWRf bGVuOyAvKiAwIGluIGNsaWVudCAqLworICAgIGlmIChjdWRfbGVuID09IDApIHsKKyAgICAgICAg YmluZF9yZXEtPlBST1RPSURfb2Zmc2V0ID0gKHVsb25nKSAwOworICAgIH0gZWxzZSB7CisgICAg ICAgIC8qIG5lZWQgdG8gcmVtZW1iZXIgdGhlIHRyYWlsaW5nIE5VTEwgaW4gdGhlIGFkZHJlc3Mg LSBub3QKKyAgICAgICAgICogY291bnRlZCBpbiB0aGUgYWRkcmVzcyBsZW5ndGgKKyAgICAgICAg ICovCisgICAgICAgIGJpbmRfcmVxLT5QUk9UT0lEX29mZnNldAorICAgICAgICAgID0gKHVsb25n KSAoc2l6ZW9mKE5fYmluZF9yZXFfdCkgKyBiaW5kX3JlcS0+QUREUl9sZW5ndGgpOworICAgIH0K KworICAgIC8qCisgICAgICogTm93IGZpbGwgaW4gdGhlIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24g cmVxdWlyZWQgd2l0aCB0aGlzIHByaW1pdGl2ZQorICAgICAqIChhZGRyZXNzIGFuZCBwcm90b2Nv bCBpbmZvcm1hdGlvbiAoQ2FsbCBVc2VyIERhdGEpKQorICAgICAqLworICAgIGFkZHRsX2luZm8g PSAoY2hhciAqKSAoKHZvaWQgKiliaW5kX3JlcSArIGJpbmRfcmVxLT5BRERSX29mZnNldCk7Cisg ICAgLyoKKyAgICAgKiBUaGUgYml0d2lzZSAiJiIgZW5zdXJlcyB0aGF0IHRoZSBsaW5lIG51bWJl ciBpcyBvbmx5IG9uZSBieXRlIGxvbmcKKyAgICAgKi8KKyAgICAqYWRkdGxfaW5mbysrID0gKGNo YXIpIGxpbmUgJiAweGZmOworICAgICphZGR0bF9pbmZvKysgPSAoY2hhcikgMDsgLyogWC4xMjEg Zm9ybWF0ICovCisgICAgYmNvcHkoIGFkZHIsIGFkZHRsX2luZm8sIGFkZHJfbGVuICk7IC8qIGlu Y2x1ZGUgdHJhaWxpbmcgbnVsbCAqLworICAgIGFkZHRsX2luZm8gKz0gYWRkcl9sZW47CisgICAg aWYgKGN1ZF9sZW4gPiAwKQorICAgICAgYmNvcHkoIGN1ZCwgYWRkdGxfaW5mbywgY3VkX2xlbiAp OworICAgIC8qCisgICAgICogQ2FsbCBwdXRtc2coKSB0byBwdXQgdGhlIGJpbmQgcmVxdWVzdCBt ZXNzYWdlIG9uIHRoZSBzdHJlYW0KKyAgICAgKi8KKyAgICBpZiAoeDI1cHV0bXNnKGZkLAorICAg ICAgICAgICAgICAgICAgKE5fbnBpX2N0bF90KiliaW5kX3JlcSwKKyAgICAgICAgICAgICAgICAg IChOX25waV9kYXRhX3QgKilOVUxMLAorICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAg ICAgICAgICZwdXRfZmxhZ3MKKyAgICAgICAgICAgICAgICAgICkgPCAwKSB7CisgICAgICAgIHBy aW50ZiggImtlcm1pdDogeDI1YmluZCgpOiB4MjVwdXRtc2cgZmFpbGVkXG4iICk7CisgICAgICAg IHJldHVybigtMSk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBBbGxvY2F0ZSBhbmQgemVybyBv dXQgc3BhY2UgZm9yIHRoZSBOX0JJTkRfQUNLIHByaW1pdGl2ZQorICAgICAqLworICAgIGJpbmRf YWNrID0gKE5fYmluZF9hY2tfdCAqKSBtYWxsb2Moc2l6ZW9mKE5fbnBpX2N0bF90KSk7CisgICAg aWYgKGJpbmRfYWNrID09IE5VTEwpeworICAgICAgICBwZXJyb3IoImtlcm1pdDogeDI1YmluZCgp OiBiaW5kX2FjayBtYWxsb2MgZmFpbGVkIik7CisgICAgICAgIHJldHVybigtMSk7CisgICAgfQor ICAgIGJ6ZXJvKGJpbmRfYWNrLCBzaXplb2YoTl9ucGlfY3RsX3QpKTsKKyAgICAvKgorICAgICAq IEluaXRpYWxpemUgdGhlIGNvbnRyb2wgc3RydWN0dXJlIGFuZCBmbGFnIHZhcmlhYmxlIHNlbnQg dG8gZ2V0bXNnCisgICAgICovCisgICAgZ2V0X2ZsYWdzPTA7CisKKyAgICAvKiBnZXQgdGhlIEFD SyBmb3IgdGhlIGJpbmQgKi8KKyNpZmRlZiBERUJVRworICAgIHByaW50ZiggImtlcm1pdDogeDI1 YmluZCgpIHRyeWluZyB0byBnZXQgYSBCSU5EX0FDS1xuIiApOworI2VuZGlmIC8qIERFQlVHICov CisgICAgcmMgPSAodWxvbmcpeDI1Z2V0bXNnKCBmZCwgKE5fbnBpX2N0bF90KiliaW5kX2FjaywK KyAgICAgICAgICAgIChpbnQpc2l6ZW9mKCBOX2JpbmRfYWNrX3QgKSwgKE5fbnBpX2RhdGFfdCop TlVMTCwgMCwgJmdldF9mbGFncywKKyAgICAgICAgICAgIE5fQklORF9BQ0sgKTsKKworICAgIC8q IHR1cm4gcXVhbnRpdGl2ZSByZXR1cm4gY29kZSBpbnRvIGEgcXVhbGl0YXRpdmUgb25lICovCisg ICAgaWYgKHJjID4gMCkgcmMgPSAwOworCisgICAgLyogaWYgYWxsIHdlbnQgd2VsbCwgZ2V0IHRo ZSB0b2tlbiBmcm9tIHRoZSBhY2tub3dsZWRnZW1lbnQgcGFja2V0ICovCisgICAgaWYgKChiaW5k X2ZsYWdzICYgVE9LRU5fUkVRVUVTVCApICYmICggcmMgPj0gMCkpIHsKKyAgICAgICAgcmMgPSBi aW5kX2Fjay0+VE9LRU5fdmFsdWU7CisgICAgfQorCisgICAgLyogZnJlZSB1cCB0aGUgbWVtb3J5 IHdlIGFsbG9jYXRlZCBlYXJsaWVyICovCisgICAgZnJlZShiaW5kX3JlcSk7CisgICAgZnJlZShi aW5kX2Fjayk7CisKKyNpZmRlZiBUUkFDRQorICAgIHByaW50ZiggIlRSQUNFOiBsZWF2aW5nIHgy NWJpbmRcbiIgKTsKKyNlbmRpZiAvKiBUUkFDRSAqLworCisgICAgcmV0dXJuKCByYyApOworfQor CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioKKyogRnVuY3Rpb246IHgyNWNhbGwKKyogRGVzY3JpcHRp b246ICBUaGlzIHJvdXRpbmUgYnVpbGRzIGFuZCBzZW5kcyBhbiBOX0NPTk5fUkVRIHByaW1pdGl2 ZSwgdGhlbgorKiAgICAgICAgICAgICAgIGNoZWNrcyBmb3IgYW4gTl9DT05OX0NPTiBwcmltaXRp dmUgaW4gcmV0dXJuLgorKgorKiBQYXJhbWV0ZXJzOgorKiBmZCAgICAtIGZpbGUgZGVzY3JpcHRv ciBvZiBzdHJlYW0KKyogY2FkZHIgLSBjYWxsZWQgYWRkcmVzcyAocmVtb3RlIGFkZHJlc3MpCisq CisqIEZ1bmN0aW9ucyBSZWZlcmVuY2VkOgorKiBtYWxsb2MoKQorKiBiemVybygpCisqIGdldG1z ZygpCisqIHB1dG1zZygpCisqCisqIFJldHVybiBjb2RlOgorKiAwIC0gaWYgc3VjY2Vzc2Z1bAor KiAtMSBpZiBub3Qgc3VjY2Vzc2Z1bAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQKK3gyNWNh bGwoZmQsIHJlbW90ZV9udWEsIGN1ZCkKKyAgICBpbnQgZmQ7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBYMjUgZGV2aWNlIChvcGVuZWQpICovCisgICAgY2hhciAqIHJlbW90ZV9udWE7 ICAgICAgICAgICAgICAgICAgLyogcmVtb3RlIGFkZHJlc3MgdG8gY2FsbCAqLworICAgIGNoYXIg KiBjdWQ7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNhbGwgdXNlciBkYXRhICovCisvKiB4 MjVjYWxsICovIHsKKyAgICBpbnQgcmM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBy ZXR1cm4gY29kZSAqLworICAgIGludCBmbGFnczsgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IENvbm5lY3Rpb24gZmxhZ3MgKi8KKyAgICBpbnQgZ2V0X2ZsYWdzOyAgICAgICAgICAgICAgICAg ICAgICAvKiBwcmlvcml0eSBmbGFncyBmb3IgZ2V0bXNnICovCisgICAgdWxvbmcgdHlwZTsgICAg ICAgICAgICAgICAgICAgICAgICAgLyogcHJpbWl0aXZlIHR5cGUgKi8KKyAgICBOX2Nvbm5fcmVx X3QgKmNvbm5yZXFfY3RsOyAgICAgICAgICAvKiBwb2ludGVyIHRvIE5fQ09OTl9SRVEgcHJpbWl0 aXZlICovCisgICAgTl9ucGlfZGF0YV90ICpjb25ucmVxX2RhdGE7ICAgICAgICAgLyogcG9pbnRl ciB0byBOX0NPTk5fUkVRIGRhdGEgKENVRCkgKi8KKyAgICBpbnQgY29ubnJlcV9kYXRhX2xlbjsg ICAgICAgICAgICAgICAvKiBsZW5ndGggb2YgZmlsbGVkIGRhdGEgYnVmZmVyICovCisgICAgTl9j b25uX2Nvbl90ICpjb25uY29uX2N0bDsgICAgICAgICAgLyogcG9pbnRlciB0byBOX0NPTk5fQ09O IHByaW1pdGl2ZSAqLworICAgIE5fbnBpX2RhdGFfdCAqY29ubmNvbl9kYXRhOyAgICAgICAgIC8q IHBvaW50ZXIgdG8gYW55IGRhdGEgYXNzb2NpYXRlZCB3aXRoCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICogdGhlIE5fQ09OTl9DT04gcHJpbWl0aXZlICovCisgICAg Y2hhciAqYWRkdGxfaW5mbzsgICAgICAgICAgICAgICAgICAgLyogcG9pbnRlciB0byBhZGRpdGlv bmFsIGluZm8gbmVlZGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICogZm9yIE5fQ09OTl9SRVEgcHJpbWl0aXZlICovCisgICAgaW50IGFkZHJfbGVuOyAgICAgICAg ICAgICAgICAgICAgICAgLyogbGVuZ3RoIG9mIGFkZHJlc3MgKi8KKworI2lmZGVmIFRSQUNFCisg ICAgcHJpbnRmKCAiVFJBQ0U6IGVudGVyaW5nIHgyNWNhbGxcbiIgKTsKKyNlbmRpZiAvKiBUUkFD RSAqLworCisjaWZkZWYgREVCVUcKKyAgICBwcmludGYoICJ4MjVjYWxsKCAlZCwgJXMgKVxuIiwg ZmQsIHJlbW90ZV9udWEgKTsKKyAgICBwcmludGYoICJjb25uZWN0aW5nIHRvICVzIG9uIGZkICVk XG4iLCByZW1vdGVfbnVhLCBmZCApOworI2VuZGlmIC8qIERFQlVHICovCisKKyAgICAvKgorICAg ICAqIEFsbG9jYXRlIGFuZCB6ZXJvIG91dCBzcGFjZSBmb3IgdGhlIE5fQ09OTl9SRVEgcHJpbWl0 aXZlCisgICAgICogdXNlIHRoZSBzaXplIG9mIHRoZSBnZW5lcmljIE5QSSBwcmltaXRpdmUgY29u dHJvbCBidWZmZXIKKyAgICAgKi8KKyAgICBjb25ucmVxX2N0bCAgPSAoTl9jb25uX3JlcV90ICop IG1hbGxvYyhzaXplb2YoTl9ucGlfY3RsX3QpKTsKKyAgICBpZiAoY29ubnJlcV9jdGwgPT0gTlVM TCl7CisgICAgICAgIHBlcnJvcigia2VybWl0OiB4MjVjYWxsKCk6IGNvbm5yZXFfY3RsIG1hbGxv YyBmYWlsZWQiKTsKKyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9CisgICAgYnplcm8oY29ubnJl cV9jdGwsc2l6ZW9mKE5fbnBpX2N0bF90KSk7CisgICAgLyoKKyAgICAgKiBCdWlsZCB0aGUgQ29u bmVjdGlvbiBSZXF1ZXN0IFByaW1pdGl2ZQorICAgICAqLworICAgIGZsYWdzID0gMDsKKyAgICBj b25ucmVxX2N0bC0+UFJJTV90eXBlID0gKHVsb25nKSBOX0NPTk5fUkVROworCisgICAgLyogTm90 ZSB0aGF0IHRoZSBhZGRyZXNzIGxlbmd0aCBpcyBuY2hhaSsxIGFuZCBub3QgbisyLiBUaGUgbGlu ZSBudW1iZXIKKyAgICAgKiBpcyBvbmx5IHBhc3NlZCB3aXRoIHRoZSBhZGRyZXNzIGZvciB0aGUg YmluZC4gVGhlIGZpcnN0IGJ5dGUgb2YKKyAgICAgKiB0aGUgYWRkcmVzcyBmb3IgdGhlIE5fQ09O TiBwcmltaXRpdmVzIGNvbnRhaW5zIHRoZSBYLjEyMQorICAgICAqIGFkZHJlc3MgcHJlZml4LCB3 aGljaCBtdXN0IGJlIHplcm8uIFRoZSByZW1haW5pbmcgYnl0ZXMgYXJlIHRoZQorICAgICAqIGFk ZHJlc3MgaXRzZWxmLgorICAgICAqLworICAgIGFkZHJfbGVuID0gc3RybGVuKCByZW1vdGVfbnVh ICk7CisgICAgY29ubnJlcV9jdGwtPkRFU1RfbGVuZ3RoID0gKHVsb25nKSAoYWRkcl9sZW4gKyAx KTsKKyAgICBjb25ucmVxX2N0bC0+REVTVF9vZmZzZXQgPSAodWxvbmcpIHNpemVvZihOX2Nvbm5f cmVxX3QpOworICAgIC8qIGNvbm5yZXFfY3RsLT5DT05OX2ZsYWdzID0gKHVsb25nKUVYX0RBVEFf T1BUIHwgUkVDX0NPTkZfT1BUOyAqLworICAgIGNvbm5yZXFfY3RsLT5DT05OX2ZsYWdzID0gKHVs b25nKSAwOworICAgIGNvbm5yZXFfY3RsLT5RT1NfbGVuZ3RoID0gKHVsb25nKSAwOyAgICAgICAg LyogdW5zdXBwb3J0ZWQgaW4gQUlYIDQuMSAqLworICAgIGNvbm5yZXFfY3RsLT5RT1Nfb2Zmc2V0 ID0gKHVsb25nKSAwOyAgICAgICAgLyogdW5zdXBwb3J0ZWQgaW4gQUlYIDQuMSAqLworCisgICAg YWRkdGxfaW5mbyA9IChjaGFyICopICgodm9pZCopY29ubnJlcV9jdGwgKyBjb25ucmVxX2N0bC0+ REVTVF9vZmZzZXQpOworICAgICphZGR0bF9pbmZvKysgPSAoY2hhcikgMDsgLyogWC4xMjEgZm9y bWF0ICovCisgICAgYmNvcHkoIHJlbW90ZV9udWEsIGFkZHRsX2luZm8sIGFkZHJfbGVuICk7CisK KyAgICAvKgorICAgICAqIHNldHVwIHRoZSBkYXRhIGJ1ZmZlciBmb3IgdGhlIGNvbm5lY3Rpb24g cmVxdWVzdAorICAgICAqLworICAgIGNvbm5yZXFfZGF0YSAgPSAoTl9ucGlfZGF0YV90ICopIG1h bGxvYyhzaXplb2YoTl9ucGlfZGF0YV90KSk7CisgICAgaWYgKGNvbm5yZXFfZGF0YSA9PSBOVUxM KXsKKyAgICAgICAgcGVycm9yKCJrZXJtaXQ6IHgyNWNhbGwoKTogY29ubnJlcV9kYXRhIG1hbGxv YyBmYWlsZWQiKTsKKyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9CisgICAgYnplcm8oY29ubnJl cV9kYXRhLHNpemVvZihOX25waV9kYXRhX3QpKTsKKworICAgIC8qIGZhY2lsaXR5IHNlbGVjdGlv biBuZWVkcyB0byBiZSBwdXQgaW4gdGhlIGZyb250IG9mIGNvbm5yZXFfZGF0YSAqLworICAgIGNv bm5yZXFfZGF0YV9sZW4gPSAwOworICAgIGNvbm5yZXFfZGF0YV9sZW4gKz0geDI1ZmFjaWxpdGll cyggKGNoYXIgKiljb25ucmVxX2RhdGEgKTsKKyAgICBpZiAoY3VkICYmICpjdWQpIHsKKyAgICAg ICAgYmNvcHkoY3VkLAorICAgICAgICAgICAgICAoY2hhciAqKSgoY2hhciAqKWNvbm5yZXFfZGF0 YSArIGNvbm5yZXFfZGF0YV9sZW4pLAorICAgICAgICAgICAgICBzdHJsZW4oY3VkKQorICAgICAg ICAgICAgICApOworICAgICAgICBjb25ucmVxX2RhdGFfbGVuICs9IHN0cmxlbiggY3VkICk7Cisg ICAgICAgIH0KKworICAgIC8qCisgICAgICogQ2FsbCBwdXRtc2coKSB0byBwdXQgdGhlIGNvbm5l Y3Rpb24gcmVxdWVzdCBtZXNzYWdlIG9uIHRoZSBzdHJlYW0KKyAgICAgKi8KKyAgICByYyA9IHgy NXB1dG1zZyggZmQsIChOX25waV9jdGxfdCopY29ubnJlcV9jdGwsIGNvbm5yZXFfZGF0YSwKKyAg ICAgICAgICAgIGNvbm5yZXFfZGF0YV9sZW4sICZmbGFncyApOworICAgIGlmIChyYyA8IDApIHsK KyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIEFsbG9jYXRlIGFu ZCB6ZXJvIG91dCBzcGFjZSBmb3IgdGhlIE5fQ09OTl9DT04gcHJpbWl0aXZlCisgICAgICovCisg ICAgaWYgKChjb25uY29uX2N0bCA9IChOX2Nvbm5fY29uX3QgKikgbWFsbG9jKHNpemVvZihOX25w aV9jdGxfdCkpKSA9PSBOVUxMKSB7CisgICAgICAgIHBlcnJvcigia2VybWl0OiB4MjVjYWxsKCk6 IGNvbm5jb25fY3RsIG1hbGxvYyBmYWlsZWQiKTsKKyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9 CisgICAgYnplcm8oY29ubmNvbl9jdGwsIHNpemVvZihOX25waV9jdGxfdCkpOworCisgICAgLyoK KyAgICAgKiBBbGxvY2F0ZSBhbmQgemVybyBvdXQgc3BhY2UgZm9yIGFueSBkYXRhIGFzc29jaWF0 ZWQgd2l0aCBOX0NPTk5fQ09OCisgICAgICovCisgICAgaWYgKCAoY29ubmNvbl9kYXRhID0gKE5f bnBpX2RhdGFfdCAqKSBtYWxsb2MoTlBJX01BWF9EQVRBKSkgPT0gTlVMTCkgeworICAgICAgICBw ZXJyb3IoImtlcm1pdDogeDI1Y2FsbCgpOiBjb25uY29uX2RhdGEgbWFsbG9jIGZhaWxlZCIpOwor ICAgICAgICByZXR1cm4oLTEpOworICAgIH0KKyAgICBiemVybyhjb25uY29uX2RhdGEsIE5QSV9N QVhfREFUQSk7CisKKyAgICAvKiBJbml0aWFsaXplIGFuZCBidWlsZCB0aGUgc3RydWN0dXJlcyBm b3IgZ2V0bXNnICovCisgICAgZ2V0X2ZsYWdzPTA7CisKKyAgICByYyA9IHgyNWdldG1zZyggZmQs IChOX25waV9jdGxfdCopY29ubmNvbl9jdGwsIChpbnQpc2l6ZW9mKCBOX2Nvbm5fY29uX3QgKSwK KyAgICAgICAgICAgIGNvbm5jb25fZGF0YSwgTlBJX01BWF9EQVRBLCAmZ2V0X2ZsYWdzLCBOX0NP Tk5fQ09OICk7CisKKyAgICAvKiB0dXJuIHF1YW50aXRpdmUgcmV0dXJuIGNvZGUgaW50byBhIHF1 YWxpdGF0aXZlIG9uZSAqLworICAgIGlmIChyYyA+IDApIHJjID0gMDsKKworICAgIC8qIEZyZWUg dGhlIHNwYWNlIHRoYXQgd2Ugbm8gbG9uZ2VyIG5lZWQgKi8KKyAgICBpZiAoY29ubnJlcV9jdGwp IHsgZnJlZShjb25ucmVxX2N0bCk7IGNvbm5yZXFfY3RsID0gTlVMTDsgfQorICAgIGlmIChjb25u Y29uX2N0bCkgeyBmcmVlKGNvbm5jb25fY3RsKTsgY29ubmNvbl9jdGwgPSBOVUxMOyB9CisgICAg aWYgKGNvbm5jb25fZGF0YSkgeyBmcmVlKGNvbm5jb25fZGF0YSk7IGNvbm5jb25fZGF0YSA9IE5V TEw7IH0KKworI2lmZGVmIFRSQUNFCisgICAgcHJpbnRmKCAiVFJBQ0U6IGxlYXZpbmcgeDI1Y2Fs bFxuIiApOworI2VuZGlmIC8qIFRSQUNFICovCisKKyAgICByZXR1cm4ocmMpOworfQorCisvKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioKKyAqIEZ1bmN0aW9uOiB4MjVnZXRjYWxsCisgKgorICogRGVzY3Jp cHRpb246IFRoaXMgcm91dGluZSBjaGVja3MgZm9yIGFuIGluY29tbWluZyBjYWxsLCB2ZXJpZmll ZAorICogdGhhdCBpdCBpcyBhIENPTk5JTkQgKGNvbm5lY3Rpb24gaW5kaWNhdGlvbikgbWVzc2Fn ZSwgYW5kIHRoZW4KKyAqIGFjY2VwdHMgdGhlIGNhbGwgYW5kIHJldHVybnMgdGhlIGZpbGUgZGVz Y3JpcHRvciBvZiB0aGUgbmV3IHN0cmVhbQorICoKKyAqIFBhcmFtZXRlcnM6CisgKiBmZCAgIC0g ZmlsZSBkZXNjcmlwdG9yIG9mIGxpc3RlbmluZyBzdHJlYW0KKyAqCisgKiBSZXR1cm4gQ29kZXM6 CisgKiBjYWxsZmQgICAgICAgLSBmaWxlIGRlc2NyaXB0b3Igb2YgY29ubmVjdGVkIGluY29tbWlu ZyBjYWxsLgorICogICAgICAgICAgICAgIC0gc2V0IHRvIC0xIGlmIGFuIGVycm9yIG9jY3VyZWQK KyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQKK3gyNWdldGNhbGwoZmQpIGludCBmZDsg eworICAgIGludCB4MjVjYWxsZmQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIGZkIG9mIGluY29t bWluZyBjYWxsICovCisgICAgTl9jb25uX2luZF90ICpjb25uaW5kX2N0bDsgICAgICAgICAgLyog Y29ubmluZCBjb250cm9sbCBidWZmZXIgKi8KKyAgICBOX25waV9kYXRhX3QgKmNvbm5pbmRfZGF0 YTsgICAgICAgICAvKiBjb25uaW5kIGRhdGEgYnVmZmVyICovCisgICAgaW50IGdldF9mbGFnczsg ICAgICAgICAgICAgICAgICAgICAgLyogZmxhZ3MgZm9yIGdldG1zZyAqLworICAgIHVsb25nIGZs YWdzOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbm5lY3Rpb24gZmxhZ3MgKi8KKyAgICBp bnQgcmM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiByZXR1cm4gY29kZSAqLworCisg ICAgZXh0ZXJuIHgyNWFkZHJfdCByZW1vdGVfbnVhOyAgICAgICAgLyogcmVtb3RlIFguMjUgYWRk ciBnbG9iYWwgdmFyICovCisKKyNpZmRlZiBUUkFDRQorICAgIHByaW50ZiggIlRSQUNFOiBlbnRl cmluZyB4MjVnZXRjYWxsXG4iICk7CisjZW5kaWYgLyogVFJBQ0UgKi8KKworICAgIC8qIGFsbG9j YXRlIHNwYWNlIGZvciBjb25uZWN0aW9uIGluZGljYXRpb24gYnVmZmVycyAqLworICAgIGlmICgo Y29ubmluZF9jdGwgPSAoTl9jb25uX2luZF90ICopbWFsbG9jKHNpemVvZihOX25waV9jdGxfdCkp KSA9PSBOVUxMKSB7CisgICAgICAgIHBlcnJvcigia2VybWl0OiB4MjVnZXRjYWxsKCk6IGNvbm5p bmRfY3RsIG1hbGxvYyBmYWlsZWQiKTsKKyAgICAgICAgcmV0dXJuICgtMSk7CisgICAgfQorICAg IGJ6ZXJvKGNvbm5pbmRfY3RsLCBzaXplb2YoTl9ucGlfY3RsX3QpKTsKKworICAgIGlmICgoY29u bmluZF9kYXRhID0gKE5fbnBpX2RhdGFfdCAqKW1hbGxvYyhOUElfTUFYX0RBVEEpKSA9PSBOVUxM KSB7CisgICAgICAgIHBlcnJvcigia2VybWl0OiB4MjVnZXRjYWxsKCk6IGNvbm5pbmRfZGF0YSBt YWxsb2MgZmFpbGVkIik7CisgICAgICAgIHJldHVybiAoLTEpOworICAgIH0KKyAgICBiemVybyhj b25uaW5kX2RhdGEsIE5QSV9NQVhfREFUQSk7CisKKyAgICAvKiBpbml0aWFsaXNlIGNvbnRyb2wg c3RydWN0dXJlcyAqLworICAgIGdldF9mbGFncyA9IDA7CisKKyAgICAvKiBjYWxsIGdldG1zZyB0 byBjaGVjayBmb3IgYSBjb25uZWN0aW9uIGluZGljYXRpb24gKi8KKyAgICBpZiAoeDI1Z2V0bXNn KGZkLAorICAgICAgICAgICAgICAgICAgKE5fbnBpX2N0bF90Kiljb25uaW5kX2N0bCwKKyAgICAg ICAgICAgICAgICAgIChpbnQpc2l6ZW9mKE5fY29ubl9pbmRfdCksCisgICAgICAgICAgICAgICAg ICBjb25uaW5kX2RhdGEsCisgICAgICAgICAgICAgICAgICBOUElfTUFYX0RBVEEsCisgICAgICAg ICAgICAgICAgICAmZ2V0X2ZsYWdzLAorICAgICAgICAgICAgICAgICAgTl9DT05OX0lORAorICAg ICAgICAgICAgICAgICAgKSA8IDApIHsKKyNpZmRlZiBERUJVRworICAgICAgICBwcmludGYoICJ4 MjVnZXRjYWxsKCk6IGVycm5vIGlzOiAlZFxuIiwgZXJybm8gKTsKKyNlbmRpZiAvKiBERUJVRyAq LworICAgICAgICBwZXJyb3IgKCJ4MjVnZXRjYWxsKCk6IGdldG1zZyBmYWlsZWQiKTsKKyAgICAg ICAgcmV0dXJuKC0xKTsKKyAgICB9CisKKyAgICAvKiBhIGNvbm5lY3Rpb24gaW5kaWNhdGlvbiB3 YXMgcmVjZWl2ZWQKKyAgICAgKiAtIHB1bGwgaXQgdG8gYml0cyBhbmQgYW5zd2VyIHRoZSBjYWxs CisgICAgICovCisgICAgeDI1c2Vxbm8gPSBjb25uaW5kX2N0bC0+U0VRX251bWJlcjsKKyAgICBm bGFncyA9IGNvbm5pbmRfY3RsLT5DT05OX2ZsYWdzOworI2lmZGVmIERFQlVHCisgICAgcHJpbnRm KCAic2V0dGluZyByZW1vdGVfbnVhIHRvIGEgbmV3IHZhbHVlIGR1ZSB0byBpbmNvbW1pbmcgY2Fs bFxuIiApOworI2VuZGlmIC8qIERFQlVHICovCisgICAgLyoKKyAgICAgKiBubyBndWFyYW50ZWUg dGhhdCB0aGUgYWRkcmVzcyBpcyBudWxsIHRlcm1pbmF0ZWQsIGVuc3VyZSB0aGF0CisgICAgICog YWZ0ZXIgY29weWluZyB0aGF0IGl0IGlzIChhc3N1bXB0aW9uOiByZW1vdGVfbnVhIGlzIGxvbmdl ciB0aGFuCisgICAgICogdGhlIGFkZHJlc3MgKyAxKQorICAgICAqLworICAgIGJ6ZXJvKHJlbW90 ZV9udWEsIHNpemVvZihyZW1vdGVfbnVhKSk7CisgICAgLyogbm90ZTogY29ubmluZF9jdGwgY29u dGFpbnMgYSB4MTIxIGFkZHJlc3MsIHdoaWNoIGhhcyBhIG51bGwgYXMKKyAgICAgKiB0aGUgRklS U1QgY2hhcmFjdGVyIC0gc3RyaXAgaXQgb2ZmIQorICAgICAqLworICAgIGNrc3RybmNweShyZW1v dGVfbnVhLAorICAgICAgICAgICAgKGNoYXIqKSgoY2hhciopY29ubmluZF9jdGwgKyBjb25uaW5k X2N0bC0+U1JDX29mZnNldCArIDEpLAorICAgICAgICAgICAgY29ubmluZF9jdGwtPlNSQ19sZW5n dGggLSAxCisgICAgICAgICAgICApOworI2lmZGVmIERFQlVHCisgICAgcHJpbnRmKCAicmVtb3Rl X251YSBzZXQgdG8gbmV3IHZhbHVlIG9mICVzXG4iLCByZW1vdGVfbnVhICk7CisjZW5kaWYgLyog REVCVUcgKi8KKworICAgIC8qIGVycm9ycyBoYW5kbGVkIGJ5IGNhbGxlZSAqLworICAgIHgyNWNh bGxmZCA9IHgyNWFjY2VwdCh4MjVzZXFubywgZmxhZ3MpOworCisgICAgLyogZnJlZSB0aGUgbWFs bG9jJ2QgYnVmZmVycyAqLworICAgIGlmIChjb25uaW5kX2N0bCkgeyBmcmVlKGNvbm5pbmRfY3Rs KTsgY29ubmluZF9jdGwgPSBOVUxMOyB9CisgICAgaWYgKGNvbm5pbmRfZGF0YSkgeyBmcmVlKGNv bm5pbmRfZGF0YSk7IGNvbm5pbmRfZGF0YSA9IE5VTEw7IH0KKworI2lmZGVmIFRSQUNFCisgICAg cHJpbnRmKCAiVFJBQ0U6IGxlYXZpbmcgeDI1Z2V0Y2FsbFxuIiApOworI2VuZGlmIC8qIFRSQUNF ICovCisKKyAgICAvKiByZXR1cm4gdGhlIGZpbGUgZGVzY3JpcHRvciAob3IgZXJyb3IgaWYgPCAw KSAqLworICAgIHJldHVybiggeDI1Y2FsbGZkICk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KgorICogRnVuY3Rpb246IHgyNWFjY2VwdAorICoKKyAqIERlc2NyaXB0aW9uOiBhY2NlcHQgYW4g aW5jb21taW5nIGNhbGwKKyAqICAgICAgICAgICAgICBUaGlzIGVzc2VudGlhbGx5IG1lYW5zIG9w ZW5pbmcgYSBuZXcgU1RSRUFNIGFuZCBzZW5kaW5nCisgKiAgICAgICAgICAgICAgYW4gYWNrbm93 bGVkZ2UgYmFjayB0byB0aGUgY2FsbGVyLgorICoKKyAqIFBhcmFtZXRlcnM6CisgKiAgICAgIHNl cW5vICAgLSBzZXF1ZW5jZSBudW1iZXIgZm9yIGFja25vd2xlZGdlbWVudAorICogICAgICBmbGFn cyAgIC0gZmxhZ3MgcGFzc2VkIHRvIHVzIGJ5IHRoZSBjYWxsZXIKKyAqCisgKiBSZXR1cm4gQ29k ZXM6CisgKiAgICAgIGZkICAgICAgLSBmaWxlIGRlc2NyaXB0b3Igb2YgbmV3IFNUUkVBTQorICog ICAgICAgICAgICAgICAgc2V0IHRvIC0xIGlmIGFuIGVycm9yIG9jY3VyZWQKKyAqCisgKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiovCitpbnQKK3gyNWFjY2VwdChzZXFubyxmbGFncykKKyAgICB1bG9uZyBz ZXFubzsgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb25uZWN0aW9uIHNlcXVlbmNlIG51bWJl ciAqLworICAgIHVsb25nIGZsYWdzOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbm5lY3Rp b24gZmxhZ3MgKi8KKy8qIHgyNWFjY2VwdCAqLyB7CisgICAgaW50IHgyNWNhbGxmZDsgICAgICAg ICAgICAgICAgICAgICAgLyogZmQgZm9yIGluY29tbWluZyBjYWxsICovCisgICAgaW50IGdldF9m bGFnczsgICAgICAgICAgICAgICAgICAgICAgLyogcHJpb3JpdHkgZmxhZ3MgZm9yIGdldG1zZyAq LworICAgIGludCBwdXRfZmxhZ3MgPSAwOyAgICAgICAgICAgICAgICAgIC8qIGZsYWdzIGZvciBw dXRtc2csIGFsd2F5cyAwICovCisgICAgaW50IGFkZHJfbGVuOyAgICAgICAgICAgICAgICAgICAg ICAgLyogbGVuZ3RoIG9mIGxvY2FsIGFkZHJlc3MgKi8KKyAgICB1bG9uZyB0b2tlbjsgICAgICAg ICAgICAgICAgICAgICAgICAvKiBjb25uZWN0aW9uIHRva2VuICovCisgICAgTl9jb25uX3Jlc190 ICpjb25uX3JlczsgICAgICAgICAgICAgLyogTl9DT05OX1JFUyBwcmltaXRpdmUgKi8KKyAgICBO X29rX2Fja190ICpva19hY2s7ICAgICAgICAgICAgICAgICAvKiBOX09LX0FDSyBwcmltaXRpdmUg Ki8KKyAgICBjaGFyICphZGR0bF9pbmZvOyAgICAgICAgICAgICAgICAgICAvKiB0ZW1wIHBvaW50 ZXIgKi8KKyAgICBpbnQgcmM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0ZW1wb3Jh cnkgcmV0dXJuIGNvZGUgKi8KKworLyogZ2xvYmFsIHZhcmlhYmxlcyBmcm9tIGNrY21haS5jICov CisgICAgZXh0ZXJuIGludCByZXZjYWxsLCBjbG9zZ3IsIGN1ZGF0YTsKKyAgICBleHRlcm4gY2hh ciB1ZGF0YVtdOworICAgIGV4dGVybiB4MjVhZGRyX3QgbG9jYWxfbnVhOyAgICAgICAgIC8qIGxv Y2FsIFguMjUgYWRkcmVzcyAqLworICAgIGV4dGVybiBjaGFyIHgyNW5hbWVbXTsgICAgICAgICAg ICAgIC8qIHgyNSBkZXZpY2UgbmFtZSAoc3gyNWEwKSAqLworICAgIGV4dGVybiBjaGFyIHgyNWRl dltdOyAgICAgICAgICAgICAgIC8qIHgyNSBkZXZpY2UgZmlsZSAvZGV2L3gyNXBrdCAqLworICAg IGV4dGVybiBpbnQgeDI1cG9ydDsgICAgICAgICAgICAgICAgIC8qIGxvZ2ljYWwgcG9ydCB0byB1 c2UgKi8KKyAgICB1bG9uZyBiaW5kX2ZsYWdzID0gMDsgICAgICAgICAgICAgICAvKiBmbGFncyBm b3IgYmluZGluZyB0aGUgWDI1IHN0cmVhbSAqLworCisjaWZkZWYgVFJBQ0UKKyAgICBwcmludGYo ICJUUkFDRTogZW50ZXJpbmcgeDI1YWNjZXB0XG4iICk7CisjZW5kaWYgLyogVFJBQ0UgKi8KKwor ICAgIC8qIG9wZW4gYSBuZXcgcGFja2V0IGxldmVsIHN0cmVhbSAqLworICAgIGlmICgoeDI1Y2Fs bGZkID0gb3Blbih4MjVkZXYsIE9fUkRXUikpIDwgMCkgeworICAgICAgICBwZXJyb3IgKCJrZXJt aXQ6IHgyNWFjY2VwdCgpOiBYLjI1IGRldmljZSBvcGVuIGVycm9yIik7CisgICAgICAgIGRlYnVn KEYxMDEsIngyNWFjY2VwdCgpIGRldmljZSBvcGVuIGVycm9yIiwiIixlcnJubyk7CisgICAgICAg IHJldHVybigtMSk7CisgICAgfQorCisgICAgLyogcHVzaCB0aGUgTlBJIG9udG8gdGhlIFNUUkVB TSAqLworICAgIGlmIChpb2N0bCh4MjVjYWxsZmQsSV9QVVNILCJucGkiKSA8IDApIHsKKyAgICAg ICAgcGVycm9yKCAia2VybWl0OiB4MjVhY2NlcHQoKTogY291bGRuJ3QgcHVzaCBucGkgb24gdGhl IFgyNSBzdHJlYW0iICk7CisgICAgICAgIGRlYnVnKEYxMDEsIngyNWFjY2VwdCBjYW4ndCBwdXNo IG5waSBvbiB0aGUgWDI1IHN0cmVhbSIsIiIsZXJybm8pOworICAgICAgICByZXR1cm4gKC0xKTsK KyAgICB9CisKKyAgICAvKiBiaW5kIGtlcm1pdCBzZXJ2ZXIgdG8gdGhlIGxvY2FsIFgyNSBhZGRy ZXNzICovCisgICAgLyogdGFrZW4gZnJvbSAvdXNyL3NhbXBsZXMvc3gyNS9ucGkvbnBpc2VydmVy LmMgKEFJWCA0KSAqLworICAgIGJpbmRfZmxhZ3MgfD0gVE9LRU5fUkVRVUVTVDsKKyAgICB0b2tl biA9IHgyNWJpbmQoeDI1Y2FsbGZkLGxvY2FsX251YSwoY2hhciAqKU5VTEwsMCwwLHgyNXBvcnQs YmluZF9mbGFncyk7CisgICAgaWYgKHRva2VuIDwgMCkgeworICAgICAgICBwcmludGYoICJrZXJt aXQ6IHgyNWFjY2VwdCgpOiBjb3VsZG4ndCBiaW5kIHRvIGxvY2FsIFgyNSBhZGRyZXNzXG4iICk7 CisgICAgICAgIG5ldGNsb3MoKTsKKyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9CisKKyAgICAv KiBhbGxvY2F0ZSBjb25uZWN0aW9uIHJlc3BvbnNlIHByaW1pdGl2ZSAqLworICAgIGlmICgoY29u bl9yZXMgPSAoTl9jb25uX3Jlc190ICopbWFsbG9jKCBOUElfTUFYX0NUTCApKSA9PSBOVUxMKSB7 CisgICAgICAgIHBlcnJvcigia2VybWl0OiB4MjVhY2NlcHQoKTogY29ubl9yZXMgbWFsbG9jIGZh aWxlZCIpOworICAgICAgICByZXR1cm4gKC0xKTsKKyAgICB9CisgICAgYnplcm8oKGNoYXIgKilj b25uX3JlcywgTlBJX01BWF9DVEwpOworCisgICAgLyogc2V0dXAgY29ubmVjdGlvbiByZXNwb25z ZSBwcmltaXRpdmUgKi8KKyAgICBhZGRyX2xlbiA9IHN0cmxlbiggbG9jYWxfbnVhICk7CisgICAg Y29ubl9yZXMtPlBSSU1fdHlwZSA9ICh1bG9uZylOX0NPTk5fUkVTOworICAgIGNvbm5fcmVzLT5U T0tFTl92YWx1ZSA9IHRva2VuOworICAgIC8qIG5vdGUgYWRkcmVzcyBsZW5ndGggaXMgbisxIHRv IGFjY29tb2RhdGUgdGhlIFguMTIxIGFkZHJlc3MgcHJlZml4ICovCisgICAgY29ubl9yZXMtPlJF U19sZW5ndGggPSAodWxvbmcpKGFkZHJfbGVuICsgMSk7CisgICAgY29ubl9yZXMtPlJFU19vZmZz ZXQgPSAodWxvbmcpc2l6ZW9mKCBOX2Nvbm5fcmVzX3QgKTsKKyAgICBjb25uX3Jlcy0+U0VRX251 bWJlciA9IHNlcW5vOworICAgIGNvbm5fcmVzLT5DT05OX2ZsYWdzID0gMDsKKyAgICBjb25uX3Jl cy0+UU9TX2xlbmd0aCA9IDA7ICAgICAgICAgICAvKiB1bnN1cHBvcnRlZCAtIG11c3QgYmUgMCAo IT8pICovCisgICAgY29ubl9yZXMtPlFPU19vZmZzZXQgPSAwOworCisgICAgYWRkdGxfaW5mbyA9 IChjaGFyICopKChjaGFyICopY29ubl9yZXMgKyBjb25uX3Jlcy0+UkVTX29mZnNldCk7CisgICAg KmFkZHRsX2luZm8rKyA9IChjaGFyKTA7ICAgIC8qIFguMTIxIGFkZHJlc3MgcHJlZml4ICovCisg ICAgYmNvcHkoIGxvY2FsX251YSwgYWRkdGxfaW5mbywgYWRkcl9sZW4gKTsKKworICAgIC8qCisg ICAgICogc2VuZCBvZmYgdGhlIGNvbm5lY3QgcmVzcG9uc2UKKyAgICAgKi8KKyAgICBpZiAoeDI1 cHV0bXNnKHgyNWNhbGxmZCwKKyAgICAgICAgICAgICAgICAgIChOX25waV9jdGxfdCopY29ubl9y ZXMsCisgICAgICAgICAgICAgICAgICAoTl9ucGlfZGF0YV90ICopTlVMTCwKKyAgICAgICAgICAg ICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAmcHV0X2ZsYWdzCisgICAgICAgICAgICAgICAg ICApIDwgMCApIHsKKyAgICAgICAgcGVycm9yKCJrZXJtaXQ6IHgyNWFjY2VwdCgpOiBwdXRtc2cg Y29ubmVjdCByZXNwb25zZSBmYWlsZWQiKTsKKyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9CisK KyAgICAvKgorICAgICAqIEFsbG9jYXRlIGFuZCB6ZXJvIG91dCBzcGFjZSBmb3IgdGhlIE9LX0FD SyBwcmltaXRpdmUKKyAgICAgKi8KKyAgICBpZiAoKG9rX2FjayA9IChOX29rX2Fja190ICopIG1h bGxvYyhzaXplb2YoTl9ucGlfY3RsX3QpKSkgPT0gTlVMTCkgeworICAgICAgICBwZXJyb3IoImtl cm1pdDogeDI1Y2FsbCgpOiBva19hY2sgbWFsbG9jIGZhaWxlZCIpOworICAgICAgICByZXR1cm4o LTEpOworICAgIH0KKyAgICBiemVybyhva19hY2ssIHNpemVvZihOX25waV9jdGxfdCkpOworCisg ICAgLyogSW5pdGlhbGl6ZSBhbmQgYnVpbGQgdGhlIHN0cnVjdHVyZXMgZm9yIGdldG1zZyAqLwor ICAgIGdldF9mbGFncz0wOworCisgICAgcmMgPSAoaW50KXgyNWdldG1zZyh4MjVjYWxsZmQsCisg ICAgICAgICAgICAgICAgICAgICAgICAoTl9ucGlfY3RsX3QqKW9rX2FjaywKKyAgICAgICAgICAg ICAgICAgICAgICAgIChpbnQpc2l6ZW9mKE5fb2tfYWNrX3QpLAorICAgICAgICAgICAgICAgICAg ICAgICAgKE5fbnBpX2RhdGFfdCopTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgIDAsCisg ICAgICAgICAgICAgICAgICAgICAgICAmZ2V0X2ZsYWdzLAorICAgICAgICAgICAgICAgICAgICAg ICAgTl9PS19BQ0sKKyAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgaWYgKHJjID09IDAp IHsKKyAgICAgICAgLyogc2VxdWVuY2UgbnVtYmVyIGlzIG9ubHkgZm9yIGRpc2Nvbm5lY3Rpbmcg d2hlbiBub3QgY29ubmVjdGVkICE/ICovCisgICAgICAgIHgyNXNlcW5vID0gMDsKKyAgICB9CisK KyAgICAvKiBmcmVlIHVwIG1hbGxvYydlZCBidWZmZXIgc3BhY2UgKi8KKyAgICBpZiAoY29ubl9y ZXMpIHsgZnJlZShjb25uX3Jlcyk7IGNvbm5fcmVzID0gTlVMTDsgfQorICAgIGlmIChva19hY2sp IHsgZnJlZShva19hY2spOyBva19hY2sgPSBOVUxMOyB9CisKKyNpZmRlZiBUUkFDRQorICAgIHBy aW50ZiggIlRSQUNFOiBsZWF2aW5nIHgyNWFjY2VwdFxuIiApOworI2VuZGlmIC8qIFRSQUNFICov CisKKyAgICByZXR1cm4oICggcmMgPj0gMCApID8geDI1Y2FsbGZkIDogLTEgKTsKK30KKworLyoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqCisgKiBGdW5jdGlvbjogeDI1dW5iaW5kCisgKgorICogRGVzY3Jp cHRpb246ICBUaGlzIHN1YnJvdXRpbmUgYnVpbGRzIGFuZCBzZW5kcyBhbiB1bmJpbmQgcmVxdWVz dCBhbmQgZ2V0cworICogdGhlIGFja25vd2xlZGdlbWVudCBmb3IgaXQuCisgKgorICogUGFyYW1l dGVyczoKKyAqIGZkIC0gRmlsZSBkZXNjcmlwdG9yIG9mIHRoZSBzdHJlYW0KKyAqCisgKiBGdW5j dGlvbnMgUmVmZXJlbmNlZDoKKyAqIGdldG1zZygpCisgKiBwdXRtc2coKQorICogbWFsbG9jKCkK KyAqIGJ6ZXJvKCkKKyAqCisgKiBSZXR1cm4gY29kZToKKyAqIDAgLSBpZiBzdWNjZXNzZnVsCisg KiAtMSAtIGlmIG5vdCBzdWNjZXNzZnVsCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQKK3gy NXVuYmluZChmZCkgaW50IGZkOyB7ICAgICAgICAgICAgICAgICAvKiBYMjUgZGV2aWNlIChvcGVu ZWQpICovCisgICAgaW50IHJjOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcmV0dXJu IGNvZGUgKi8KKyAgICBpbnQgZmxhZ3M7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBiaW5k IGZsYWdzICovCisgICAgaW50IGdldF9mbGFnczsgICAgICAgICAgICAgICAgICAgICAgLyogcHJp b3JpdHkgZmxhZyBmb3IgZ2V0bXNnICovCisgICAgdWxvbmcgdHlwZTsgICAgICAgICAgICAgICAg ICAgICAgICAgLyogcHJpbWl0aXZlIHR5cGUgKi8KKyAgICBOX3VuYmluZF9yZXFfdCAqdW5iaW5k X3JlcTsgICAgICAgICAvKiBwb2ludGVyIHRvIE5fVU5CSU5EX1JFUSAqLworICAgIE5fb2tfYWNr X3QgKm9rX2FjazsgICAgICAgICAgICAgICAgIC8qIHBvaW50ZXIgdG8gTl9PS19BQ0sgKi8KKwor I2lmZGVmIFRSQUNFCisgICAgcHJpbnRmKCAiVFJBQ0U6IGVudGVyaW5nIHgyNXVuYmluZFxuIiAp OworI2VuZGlmIC8qIFRSQUNFICovCisKKyNpZmRlZiBERUJVRworICAgIC8qIHByaW50ZiggIngy NXVuYmluZCggJWQgKVxuIiwgZmQgKTsgKi8KKyNlbmRpZiAvKiBERUJVRyAqLworICAgIGRlYnVn KEYxMDEsIngyNXVuYmluZCBjbG9zaW5nIHgyNSBjb25uZWN0aW9uICMiLCIiLGZkKTsKKworICAg IC8qIEFsbG9jYXRlIGFuZCB6ZXJvIG91dCBzcGFjZSB0byBob2xkIHRoZSBOX1VOQklORF9SRVEg cHJpbWl0aXZlICovCisgICAgdW5iaW5kX3JlcSA9IChOX3VuYmluZF9yZXFfdCAqKSBtYWxsb2Mo c2l6ZW9mKE5fbnBpX2N0bF90KSk7CisgICAgaWYgKHVuYmluZF9yZXEgPT0gTlVMTCkgeworICAg ICAgICBwZXJyb3IoImtlcm1pdDogeDI1dW5iaW5kKCk6IHVuYmluZF9yZXEgbWFsbG9jIGZhaWxl ZCIpOworICAgICAgICByZXR1cm4oLTEpOworICAgIH0KKyAgICBiemVybyh1bmJpbmRfcmVxLCBz aXplb2YoTl9ucGlfY3RsX3QpKTsKKworICAgIC8qCisgICAgICogQnVpbGQgdGhlIFVuYmluZCBS ZXF1ZXN0IFByaW1pdGl2ZQorICAgICAqLworICAgIGZsYWdzID0gMDsKKyAgICB1bmJpbmRfcmVx LT5QUklNX3R5cGUgPSAodWxvbmcpIE5fVU5CSU5EX1JFUTsKKworICAgIC8qCisgICAgICogQ2Fs bCBwdXRtc2coKSB0byBwdXQgdGhlIGJpbmQgcmVxdWVzdCBtZXNzYWdlIG9uIHRoZSBzdHJlYW0K KyAgICAgKi8KKyAgICBpZiAoeDI1cHV0bXNnKGZkLAorICAgICAgICAgICAgICAgICAgKE5fbnBp X2N0bF90Kil1bmJpbmRfcmVxLAorICAgICAgICAgICAgICAgICAgKE5fbnBpX2RhdGFfdCAqKU5V TEwsCisgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgJmZsYWdzCisgICAg ICAgICAgICAgICAgICApIDwgMCkgeworICAgICAgICBwZXJyb3IgKCJrZXJtaXQ6IHgyNXVuYmlu ZCgpOiBwdXRtc2cgZmFpbGVkIik7CisgICAgICAgIHJldHVybigtMSk7CisgICAgfQorCisgICAg LyogQWxsb2NhdGUgYW5kIFplcm8gb3V0IHNwYWNlIGZvciB0aGUgTl9PS19BQ0sgcHJpbWl0aXZl ICovCisgICAgb2tfYWNrID0gKE5fb2tfYWNrX3QgKikgbWFsbG9jKHNpemVvZihOX25waV9jdGxf dCkpOworICAgIGlmIChva19hY2sgPT0gTlVMTCkgeworICAgICAgICBwZXJyb3IoImtlcm1pdCB4 MjV1bmJpbmQoKTogb2tfYWNrIG1hbGxvYyBmYWlsZWRcbiIpOworICAgICAgICByZXR1cm4oLTEp OworICAgIH0KKyAgICBiemVybyhva19hY2ssIHNpemVvZihOX25waV9jdGxfdCkpOworCisgICAg LyogSW5pdGlhbGl6ZSBhbmQgYnVpbGQgdGhlIGNvbnRyb2wgc3RydWN0dXJlIGZvciBnZXRtc2cg Ki8KKyAgICBnZXRfZmxhZ3M9MDsKKworICAgIC8qIENhbGwgZ2V0bXNnKCkgdG8gY2hlY2sgZm9y IGFuIGFja25vd2xlZGdlbWVudCAqLworICAgIHJjID0geDI1Z2V0bXNnKGZkLAorICAgICAgICAg ICAgICAgICAgIChOX25waV9jdGxfdCopb2tfYWNrLAorICAgICAgICAgICAgICAgICAgIChpbnQp c2l6ZW9mKE5fb2tfYWNrX3QpLAorICAgICAgICAgICAgICAgICAgIChOX25waV9kYXRhX3QqKU5V TEwsCisgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAmZ2V0X2ZsYWdz LAorICAgICAgICAgICAgICAgICAgIE5fT0tfQUNLCisgICAgICAgICAgICAgICAgICAgKTsKKyAg ICBpZiAocmMgPCAwKSB7CisgICAgICAgIHBlcnJvciAoImtlcm1pdDogeDI1dW5iaW5kOiBnZXRt c2cgZmFpbGVkIik7CisgICAgICAgIHJldHVybigtMSk7CisgICAgfQorCisgICAgLyogRnJlZSB1 cCB0aGUgc3BhY2UgdGhhdCB3ZSBubyBsb25nZXIgbmVlZCAqLworICAgIGlmICh1bmJpbmRfcmVx KSB7IGZyZWUodW5iaW5kX3JlcSk7IHVuYmluZF9yZXEgPSBOVUxMOyB9CisgICAgaWYgKG9rX2Fj aykgeyBmcmVlKG9rX2Fjayk7IG9rX2FjayA9IE5VTEw7IH0KKworI2lmZGVmIFRSQUNFCisgICAg cHJpbnRmKCAiVFJBQ0U6IGxlYXZpbmcgeDI1dW5iaW5kXG4iICk7CisjZW5kaWYgLyogVFJBQ0Ug Ki8KKworICAgIHJldHVybigwKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGdW5j dGlvbjogeDI1eGluCisgKgorICogRGVzY3JpcHRpb246CisgKiAgICAgIFJlYWQgbiBjaGFyYWN0 ZXJzIGZyb20gWC4yNSBjaXJjdWl0IGludG8gYnVmIChBSVggb25seSkKKyAqCisgKiBQYXJhbWV0 ZXJzOgorICogICAgICBkYXRhX2J1Zl9sZW4gICAgbWF4aW11bSBzaXplIG9mIGRhdGEgYnVmZmVy CisgKiAgICAgIGRhdGFfYnVmICAgICAgICBwb2ludGVyIHRvIHByZS1hbGxvY2F0ZWQgYnVmZmVy IHNwYWNlCisgKgorICogUmV0dXJuIFZhbHVlOgorICogICAgICB0aGUgbnVtYmVyIG9mIGNoYXJh Y3RlcnMgYWN0dWFsbHkgcmVhZAorICovCitpbnQKK3gyNXhpbihkYXRhX2J1Zl9sZW4sZGF0YV9i dWYpIGludCBkYXRhX2J1Zl9sZW47IENIQVIgKmRhdGFfYnVmOyB7CisgICAgc3RydWN0IHN0cmJ1 ZiBnZXRtc2dfY3RsOyAgICAgICAgICAgLyogc3RyZWFtcyBjb250cm9sIHN0cnVjdHVyZSAqLwor ICAgIHN0cnVjdCBzdHJidWYgZ2V0bXNnX2RhdGE7ICAgICAgICAgIC8qIHN0cmVhbXMgZGF0YSBz dHJ1Y3R1cmUgKi8KKyAgICBpbnQgcmMgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBy ZXR1cm4gY29kZSAqLworICAgIGludCBnZXRtc2dfZmxhZ3M7ICAgICAgICAgICAgICAgICAgIC8q IHBhY2tldCBwcmlvcml0eSBmbGFncyAqLworICAgIGNoYXIgKiBjdGxfYnVmOyAgICAgICAgICAg ICAgICAgICAgIC8qIG5waSBjb250cm9sIGJ1ZmZlciAqLworICAgIE5fbnBpX2N0bF90ICogcmVz dWx0OyAgICAgICAgICAgICAgIC8qIHBvaW50ZXIgdG8gc2ltcGxpZnkgc3dpdGNoKCkgKi8KKwor I2lmZGVmIFRSQUNFCisgICAgcHJpbnRmKCAiVFJBQ0U6IGVudGVyaW5nIHgyNXhpblxuIiApOwor I2VuZGlmIC8qIFRSQUNFICovCisKKyAgICAvKiBlbnN1cmUgdGhhdCBubyBtYXhpbXVtJ3MgYXJl IG92ZXJyaWRkZW4gKi8KKyAgICBkYXRhX2J1Zl9sZW4gPSAoTlBJX01BWF9EQVRBIDwgZGF0YV9i dWZfbGVuKSA/IE5QSV9NQVhfREFUQSA6IGRhdGFfYnVmX2xlbjsKKworICAgIC8qIGFsbG9jYXRl IHNwYWNlIGZvciBwYWNrZXQgY29udHJvbCBpbmZvICovCisgICAgaWYgKChjdGxfYnVmID0gKGNo YXIgKiltYWxsb2MoTlBJX01BWF9DVEwpKSA9PSBOVUxMKSB7CisgICAgICAgIHBlcnJvciggImtl cm1pdDogeDI1eGluKCk6IGN0bF9idWYgbWFsbG9jIiApOworICAgICAgICByZXR1cm4oLTEpOwor ICAgIH0KKyNpZmRlZiBDT01NRU5UCisgICAgLyogcmllaG06IG5lZWQgemVyb2VkIGJ1ZmZlciBm b3IgZ2V0bXNnPyAqLworICAgIGJ6ZXJvKCBjdGxfYnVmLCBOUElfTUFYX0NUTCApOworICAgIC8q IGNsZWFyIGRhdGEgYnVmZmVyICovCisgICAgYnplcm8oIGRhdGFfYnVmLCBkYXRhX2J1Zl9sZW4g KTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisKKyAgICBnZXRtc2dfZmxhZ3MgPSAwOyAgICAgICAg ICAgICAgICAgICAvKiBnZXQgdGhlIGZpcnN0IHBhY2tldCBhdmFpbGFibGUgKi8KKworICAgIHJj ID0geDI1Z2V0bXNnKHR0eWZkLAorICAgICAgICAgICAgICAgICAgIGN0bF9idWYsCisgICAgICAg ICAgICAgICAgICAgTlBJX01BWF9DVEwsCisgICAgICAgICAgICAgICAgICAgZGF0YV9idWYsCisg ICAgICAgICAgICAgICAgICAgZGF0YV9idWZfbGVuLAorICAgICAgICAgICAgICAgICAgICZnZXRt c2dfZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgTl9EQVRBX0lORAorICAgICAgICAgICAgICAg ICAgICk7CisjaWZkZWYgQ09NTUVOVAorI2lmZGVmIERFQlVHCisgICAgaWYgKHJjID49IDApIHsK KyAgICAgICAgcHJpbnRmKCAia2VybWl0OiB4MjV4aW4oKTogZ290ICIgKTsKKyAgICAgICAgeDI1 ZHVtcF9kYXRhKCBkYXRhX2J1ZiwgMCwgcmMgKTsKKyAgICB9IGVsc2UgeworICAgICAgICBwcmlu dGYoICJ4MjV4aW4oKTogYXR0ZW1wdCB0byBnZXQgZGF0YSByZXN1bHRlZCBpbiBhbiBlcnJvclxu IiApOworICAgIH0KKyNlbmRpZiAvKiBERUJVRyAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKwor ICAgIC8qIGZyZWUgYnVmZmVycyAqLworICAgIGlmIChjdGxfYnVmKSB7IGZyZWUoY3RsX2J1Zik7 IGN0bF9idWYgPSBOVUxMOyB9CisKKyNpZmRlZiBUUkFDRQorICAgIHByaW50ZiggIlRSQUNFOiBs ZWF2aW5nIHgyNXhpXG4iICk7CisjZW5kaWYgLyogVFJBQ0UgKi8KKworICAgIHJldHVybihyYyk7 Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRnVuY3Rpb246IHgyNXdyaXRlCisgKgor ICogRGVzY3JpcHRpb246CisgKiAgICAgIHdyaXRlIGEgYmxvY2sgb2YgY2hhcmFjdGVycyB0byB0 aGUgWDI1IFNUUkVBTSAoQUlYKQorICoKKyAqIFBhcmFtZXRlcnM6CisgKiAgICAgIGZkICAgICAg ICAgICAgICBmaWxlIGRlc2NyaXB0b3IgdG8gd3JpdGUgdG8KKyAqICAgICAgZGF0YWJ1ZiAgICAg ICAgIGJ1ZmZlciBjb250YWluaW5nIGRhdGEgdG8gd3JpdGUKKyAqICAgICAgZGF0YWJ1ZnNpemUg ICAgICAgICAgICAgc2l6ZSBvZiB0aGUgYnVmZmVyIHRvIHdyaXRlCisgKgorICogUmV0dXJuIFZh bHVlOgorICogICAgICBzaXplICAgICAgICAgICAgdGhlIG51bWJlciBvZiBieXRlcyBhY3R1YWxs eSB0cmFuc21pdHRlZAorICovCitpbnQKK3gyNXdyaXRlKGZkLCBkYXRhYnVmLCBkYXRhYnVmc2l6 ZSkKKyAgICBpbnQgICAgICAgICBmZDsgICAgICAgICAgICAgICAgICAvKiBYMjUgU1RSRUFNUyBm aWxlIGRlc2NyaXB0b3IgKHR0eWZkKSAqLworICAgIGNoYXIgICAgICAgICpkYXRhYnVmOyAgICAg ICAgICAgICAgIC8qIGJ1ZmZlciB0byB3cml0ZSAqLworICAgIGludCAgICAgICAgIGRhdGFidWZz aXplOyAgICAgICAgICAgIC8qIGJ1ZmZlciBzaXplICovCisvKiB4MjV3cml0ZSAqLyB7CisgICAg Tl9kYXRhX3JlcV90ICpkYXRhX3JlcV9jdGw7CisgICAgaW50IHJjOyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogcmV0dXJuIGNvZGUgKHNpemUgdHJhbnNtaXR0ZWQpICovCisgICAgaW50 IHdyaXRlX2ZsYWdzID0gMDsgICAgICAgICAgICAgICAgLyogYWx3YXlzIDAgIT8gKi8KKworI2lm ZGVmIFRSQUNFCisgICAgcHJpbnRmKCAiVFJBQ0U6IGVudGVyaW5nIHgyNXdyaXRlXG4iICk7Cisj ZW5kaWYgLyogVFJBQ0UgKi8KKworICAgIGlmICgoZGF0YV9yZXFfY3RsID0gKE5fZGF0YV9yZXFf dCAqKW1hbGxvYyhOUElfTUFYX0NUTCkgKSA9PSBOVUxMKSB7CisgICAgICAgIHBlcnJvciggImtl cm1pdDogeDI1d3JpdGUoKTogZGF0YV9yZXFfY3RsIG1hbGxvYyIgKTsKKyAgICAgICAgcmV0dXJu KC0xKTsKKyAgICB9CisgICAgZGF0YV9yZXFfY3RsLT5QUklNX3R5cGUgPSBOX0RBVEFfUkVROwor ICAgIGRhdGFfcmVxX2N0bC0+REFUQV94ZmVyX2ZsYWdzID0gMDsKKworICAgIC8qIHJpZWhtOiBw b3NzaWJsZSBleHRlbnNpb24KKyAgICAgKiBwb3NzaWJseSBuZWVkIHRvIHRoaW5rIGFib3V0IHNw bGl0dGluZyB1cCB0aGUgZGF0YSBidWZmZXIKKyAgICAgKiBpbnRvIG11bHRpcGxlIHBhcnRzIGlm IGRhdGFidWZzaXplID4gTlBJX01BWF9EQVRBCisgICAgICovCisKKyNpZmRlZiBDT01NRU5UCisj aWZkZWYgREVCVUcKKyAgICBwcmludGYoICJrZXJtaXQ6IHgyNXdyaXRlKCk6IHdyaXRpbmcgZGF0 YSB0byB4MjUgc3RyZWFtXG4iICk7CisgICAgcHJpbnRmKCAiXHRkYXRhOlx0IiApOworICAgIHgy NWR1bXBfZGF0YShkYXRhYnVmLCAwLCBkYXRhYnVmc2l6ZSk7CisjZW5kaWYgLyogREVCVUcgKi8K KyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgcmMgPSB4MjVwdXRtc2coZmQsCisgICAgICAgICAg ICAgICAgICAgKE5fbnBpX2N0bF90KilkYXRhX3JlcV9jdGwsCisgICAgICAgICAgICAgICAgICAg KE5fbnBpX2RhdGFfdCopZGF0YWJ1ZiwKKyAgICAgICAgICAgICAgICAgICBkYXRhYnVmc2l6ZSwK KyAgICAgICAgICAgICAgICAgICAmd3JpdGVfZmxhZ3MKKyAgICAgICAgICAgICAgICAgICApOwor ICAgIGlmIChkYXRhX3JlcSkgeyBmcmVlKGRhdGFfcmVxX2N0bCk7ICBkYXRhX3JlcSA9IE5VTEw7 IH0KKworI2lmZGVmIFRSQUNFCisgICAgcHJpbnRmKCAiVFJBQ0U6IGxlYXZpbmcgeDI1d3JpdGVc biIgKTsKKyNlbmRpZiAvKiBUUkFDRSAqLworCisgICAgcmV0dXJuKHJjKTsKK30KKworLyoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqCisgKiBGdW5jdGlvbjogeDI1bG9jYWxfbnVhCisgKgorICogRGVzY3Jp cHRpb246CisgKiAgICAgIFRoaXMgcm91dGluZSBpcyBvbmx5IGludGVyZXN0aW5nIGZvciBJQk0g Y29tcHV0ZXJzLiBJbiBvcmRlcgorICogICAgICB0byBzZXQgdXAgYSBjb25uZWN0aW9uIChzZWUg eDI1YmluZCgpKSB5b3UgbmVlZCB0byBrbm93IHRoZQorICogICAgICBsb2NhbCBOVUEgKHgyNSBh ZGRyZXNzKS4gVW5mb3J0dW5hdGVseSwgeW91IG5lZWQgYWxsIHRoaXMgY29kZQorICogICAgICB0 byBmaW5kIHRoYXQgb3V0LCBJIGp1c3QgaG9wZSB0aGlzIHdvcmtzIGZvciBldmVyeW9uZSBlbHNl IQorICoKKyAqIFBhcmFtZXRlcnM6CisgKiAgICAgIGEgcHJlLWFsbG9jYXRlZCBjaGFyYWN0ZXIg YnVmZmVyLCBsb25nIGVub3VnaCB0byBob2xkIGFuIFguMjUgYWRkcmVzcworICogICAgICBhbmQg dGhlIHRhaWxpbmcgbnVsbC4KKyAqCisgKiBSZXR1cm4gVmFsdWU6CisgKiAgICAgIHRoZSBsZW5n dGggb2YgdGhlIGFkZHJlc3Mgc3RyaW5nLgorICogICAgICAwID0gZXJyb3IKKyAqLworaW50Cit4 MjVsb2NhbF9udWEoY2hhciAqYnVmKSB7CisgICAgc3RydWN0IEN1QXQgKnJlc3BvbnNlOyAgICAg IC8qIHN0cnVjdHVyZSB0byBmaWxsIHdpdGggaW5mbyBmcm9tIE9ETSAqLworICAgIENMQVNTX1NZ TUJPTCByZXRDbGFzczsgICAgICAvKiBPRE0gY2xhc3MgKi8KKyAgICBjaGFyIHF1ZXJ5WzY0XTsg ICAgICAgICAgICAgLyogb2RtIGRhdGFiYXNlIHF1ZXJ5ICovCisgICAgaW50IHJjID0gMDsgICAg ICAgICAgICAgICAgIC8qIHJldHVybiB2YWx1ZSAobGVuZ3RoIG9mIGxvY2FsIE5VQSkgKi8KKyAg ICBleHRlcm4gY2hhciB4MjVuYW1lW107ICAgICAgLyogeDI1IGRldmljZSBuYW1lIChzeDI1YTAp ICovCisKKyNpZmRlZiBUUkFDRQorICAgIHByaW50ZiggIlRSQUNFOiBlbnRlcmluZyB4MjVsb2Nh bF9udWFcbiIgKTsKKyNlbmRpZiAvKiBUUkFDRSAqLworCisgICAgLyogc2V0IHVwIHF1ZXJ5IHN0 cmluZyAqLworICAgIGlmICh4MjVuYW1lWzBdID09ICdcMCcpIHsKKyNpZmRlZiBERUJVRworICAg ICAgICBwcmludGYoICJrZXJtaXQ6IHgyNWxvY2FsX251YSgpOiBObyB4MjUgZGV2aWNlIHNldCwg dHJ5aW5nIHN4MjVhMFxuIiApOworI2VuZGlmIC8qIERFQlVHICovCisgICAgICAgIHN0cmNweSgg eDI1bmFtZSwgInN4MjVhMCIgKTsKKyAgICB9CisgICAgY2ttYWttc2cocXVlcnksIHNpemVvZihx dWVyeSksICJuYW1lIGxpa2UgIix4MjVuYW1lLAorICAgICAgICAgICAgICIgYW5kIGF0dHJpYnV0 ZSBsaWtlIGxvY2FsX251YSIpOworCisgICAgLyogaW5pdGlhbGlzZSBPRE0gZGF0YWJhc2UgKi8K KyAgICBvZG1lcnJubyA9IDA7CisgICAgaWYgKG9kbV9pbml0aWFsaXplKCkgPT0gLTEpIHsKKyAg ICAgICAgcHJpbnRmKCAieDI1bG9jYWxfbnVhKCk6IGNhbid0IGluaXRpYWxpemUgT0RNIGRhdGFi YXNlIik7CisgICAgICAgIHN3aXRjaCAob2RtZXJybm8pIHsKKyAgICAgICAgICBjYXNlIE9ETUlf SU5WQUxJRF9QQVRIOgorICAgICAgICAgICAgcHJpbnRmKCAiaW52YWxpZCBwYXRoXG4iICk7Cisg ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIE9ETUlfTUFMTE9DX0VSUjoKKyAgICAg ICAgICAgIHByaW50ZiggIm1hbGxvYyBmYWlsZWRcbiIgKTsKKyAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBwcmludGYoICJ1bmtub3duIGVycm9yICVk XG5QbGVhc2UgY2FsbCBJQk1cbiIsIG9kbWVycm5vICk7CisgICAgICAgIH0KKyAgICAgICAgcmV0 dXJuKHJjKTsKKyAgICB9CisKKyAgICAvKiBvcGVuIHRoZSBDdUF0IGNsYXNzICovCisgICAgcmV0 Q2xhc3MgPSBvZG1fb3Blbl9jbGFzcyhDdUF0X0NMQVNTKTsKKyAgICBpZiAoKChpbnQpcmV0Q2xh c3MpID09IC0xKSB7CisgICAgICAgIHByaW50ZiggImtlcm1pdDogeDI1bG9jYWxfbnVhKCk6IGNh bid0IG9wZW4gQ3VBdCBjbGFzcyBpbiBvZG0uICIgKTsKKyAgICAgICAgc3dpdGNoIChvZG1lcnJu bykgeworICAgICAgICAgIGNhc2UgT0RNSV9DTEFTU19ETkU6CisgICAgICAgICAgICBwcmludGYo ICJDdUF0IGNsYXNzIGRvZXNuJ3QgZXhpc3RcbiIgKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg ICAgICAgIGNhc2UgT0RNSV9DTEFTU19QRVJNUzoKKyAgICAgICAgICAgIHByaW50ZiggInBlcm1p c3Npb24gdG8gQ3VBdCBjbGFzcyBmaWxlIGRlbmllZFxuIiApOworICAgICAgICAgICAgYnJlYWs7 CisgICAgICAgICAgY2FzZSBPRE1JX01BR0lDTk9fRVJSOgorICAgICAgICAgICAgcHJpbnRmKCAi Q3VBdCBpcyBhbiBpbnZhbGlkIE9ETSBvYmplY3QgY2xhc3NcbiIgKTsKKyAgICAgICAgICAgIGJy ZWFrOworICAgICAgICAgIGNhc2UgT0RNSV9PUEVOX0VSUjoKKyAgICAgICAgICAgIHByaW50Zigg ImNhbm5vdCBvcGVuIEN1QXQgY2xhc3MgLSBhbmQgZG9uJ3Qga25vdyB3aHkhXG4iICk7CisgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIE9ETUlfSU5WQUxJRF9QQVRIOgorICAgICAg ICAgICAgcHJpbnRmKCAiaW52YWxpZCBwYXRoXG4iICk7CisgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgICBjYXNlIE9ETUlfVE9PTUFOWUNMQVNTRVM6CisgICAgICAgICAgICBwcmludGYoICJ0 b28gbWFueSBvYmplY3QgY2xhc3NlcyBoYXZlIGJlZW4gb3BlbmVkXG4iICk7CisgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcHJpbnRmKCAidW5rbm93 biBlcnJvciAlZFxuUGxlYXNlIGNhbGwgSUJNXG4iLCBvZG1lcnJubyApOworICAgICAgICB9Cisg ICAgICAgIHJldHVybihyYyk7CisgICAgfQorCisjaWZkZWYgREVCVUcKKyAgICBwcmludGYoInJl dENsYXNzPSAlZFxuIiwgcmV0Q2xhc3MpOworI2VuZGlmIC8qIERFQlVHICovCisKKyAgICByZXNw b25zZSA9IChzdHJ1Y3QgQ3VBdCAqKW9kbV9nZXRfZmlyc3QoIHJldENsYXNzLCBxdWVyeSwgTlVM TCApOworICAgIGlmICgoKGludClyZXNwb25zZSkgPT0gLTEpIHsKKyAgICAgICAgcHJpbnRmKCAi a2VybWl0OiB4MjVsb2NhbF9udWEoKTogb2RtIHF1ZXJ5IGZhaWxlZCAiICk7CisgICAgICAgIHN3 aXRjaCAob2RtZXJybm8pIHsKKyAgICAgICAgICBjYXNlIE9ETUlfQkFEX0NSSVQ6ICAgICAgICAg ICAvKiBQcm9ncmFtbWluZyBlcnJvciAqLworICAgICAgICAgICAgcHJpbnRmKCAiYmFkIHNlYXJj aCBjcml0ZXJpYVxuIiApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBPRE1J X0NMQVNTX0RORToKKyAgICAgICAgICAgIHByaW50ZiggIkN1QXQgY2xhc3MgZG9lc24ndCBleGlz dFxuIiApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBPRE1JX0NMQVNTX1BF Uk1TOgorICAgICAgICAgICAgcHJpbnRmKCAicGVybWlzc2lvbiB0byBDdUF0IGNsYXNzIGZpbGUg ZGVuaWVkXG4iICk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIE9ETUlfSU5U RVJOQUxfRVJSOgorICAgICAgICAgICAgcHJpbnRmKCJvZG0gaW50ZXJuYWwgZXJyb3JcblBsZWFz ZSBjb250YWN0IHlvdXIgYWRtaW5pc3RyYXRvclxuIiApOworICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgICAgY2FzZSBPRE1JX0lOVkFMSURfQ0xYTjoKKyAgICAgICAgICAgIHByaW50ZigiQ3VB dCBpcyBpbnZhbGlkIG9yIGluY29uc2lzdGVudCBvZG0gY2xhc3MgY29sbGVjdGlvblxuIik7Cisg ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIE9ETUlfSU5WQUxJRF9QQVRIOgorICAg ICAgICAgICAgcHJpbnRmKCAiaW52YWxpZCBwYXRoXG4iICk7CisgICAgICAgICAgICBicmVhazsK KyAgICAgICAgICBjYXNlIE9ETUlfTUFHSUNOT19FUlI6CisgICAgICAgICAgICBwcmludGYoICJD dUF0IGlzIGFuIGludmFsaWQgT0RNIG9iamVjdCBjbGFzc1xuIiApOworICAgICAgICAgICAgYnJl YWs7CisgICAgICAgICAgY2FzZSBPRE1JX01BTExPQ19FUlI6CisgICAgICAgICAgICBwcmludGYo ICJtYWxsb2MgZmFpbGVkXG4iICk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNl IE9ETUlfT1BFTl9FUlI6CisgICAgICAgICAgICBwcmludGYoICJjYW5ub3Qgb3BlbiBDdUF0IGNs YXNzIC0gYW5kIGRvbid0IGtub3cgd2h5IVxuIiApOworICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICAgY2FzZSBPRE1JX1RPT01BTllDTEFTU0VTOgorICAgICAgICAgICAgcHJpbnRmKCAidG9v IG1hbnkgb2JqZWN0IGNsYXNzZXMgaGF2ZSBiZWVuIG9wZW5lZFxuIiApOworICAgICAgICAgICAg YnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHByaW50ZiggInVua25vd24g ZXJyb3IgJWRcblBsZWFzZSBjYWxsIElCTVxuIiwgb2RtZXJybm8gKTsKKyAgICAgICAgfQorICAg ICAgICByZXR1cm4ocmMpOworICAgIH0KKworICAgIC8qIGNoZWNrIGZvciBhIG1lYW5pbmdmdWxs IHJlc3BvbnNlICovCisgICAgaWYgKHJlc3BvbnNlICE9IE5VTEwpIHsKKyAgICAgICAgaWYgKHJl c3BvbnNlLT52YWx1ZSAhPSBOVUxMKSB7CisgICAgICAgICAgICBzdHJjcHkoYnVmLCByZXNwb25z ZS0+dmFsdWUpOworICAgICAgICAgICAgcmMgPSBzdHJsZW4oIGJ1ZiApOworI2lmZGVmIERFQlVH CisvKgorICAgICAgICAgICAgcHJpbnRmKCAiYXR0cmlidXRlIG5hbWUgaXM6ICVzXG4iLCAoY2hh ciAqKXJlc3BvbnNlLT5hdHRyaWJ1dGUgKTsKKyAgICAgICAgICAgIHByaW50ZiggIkkgdGhpbmsg bXkgYWRkcmVzcyBpcyAlc1xuIiwgKGNoYXIqKXJlc3BvbnNlLT52YWx1ZSApOworKi8KKyNlbmRp ZiAvKiBERUJVRyAqLworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcHJpbnRmKCAia2Vy bWl0OiB4MjVsb2NhbF9udWEoKTogY291bGRuJ3QgZmluZCB0aGUgbG9jYWwgTlVBXG4iICk7Cisg ICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBzd2l0Y2ggKG9kbWVycm5vKSB7CisgICAg ICAgICAgY2FzZSBPRE1JX0JBRF9DUklUOgorICAgICAgICAgICAgcHJpbnRmKCAiRXJyb3I6IE9E TUlfQkFEX0NSSVQgLSBiYWQgY3JpdGVyaWFcbiIgKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg ICAgICAgIGNhc2UgT0RNSV9DTEFTU19ETkU6CisgICAgICAgICAgICBwcmludGYoICJFcnJvcjog T0RNSV9DTEFTU19ETkUgLSBjbGFzcyBkb2Vzbid0IGV4aXN0XG4iICk7CisgICAgICAgICAgICBi cmVhazsKKyAgICAgICAgICBjYXNlIE9ETUlfQ0xBU1NfUEVSTVM6CisgICAgICAgICAgICBwcmlu dGYoICJFcnJvcjogT0RNSV9DTEFTU19QRVJNUyAtIGNsYXNzIHBlcm1pc3Npb25zXG4iICk7Cisg ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIE9ETUlfSU5URVJOQUxfRVJSOgorICAg ICAgICAgICAgcHJpbnRmKCAiRXJyb3I6IE9ETUlfSU5URVJOQUxfRVJSIC0gcGFuaWNcbiIgKTsK KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgT0RNSV9JTlZBTElEX0NMWE46Cisg ICAgICAgICAgICBwcmludGYoICJFcnJvcjogT0RNSV9JTlZBTElEX0NMWE4gLSBpbnZhbGlkIGNv bGxlY3Rpb25cbiIgKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgT0RNSV9J TlZBTElEX1BBVEg6CisgICAgICAgICAgICBwcmludGYoICJFcnJvcjogT0RNSV9JTlZBTElEX1BB VEggLSBpbnZhbGlkIHBhdGggLSB3aGF0IHBhdGg/XG4iICk7CisgICAgICAgICAgICBicmVhazsK KyAgICAgICAgICBjYXNlIE9ETUlfTUFHSUNOT19FUlI6CisgICAgICAgICAgICBwcmludGYoICJF cnJvcjogT0RNSV9NQUdJQ05PX0VSUiAtIGludmFsaWQgb2JqZWN0IG1hZ2ljXG4iICk7CisgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIE9ETUlfTUFMTE9DX0VSUjoKKyAgICAgICAg ICAgIHByaW50ZiggIkVycm9yOiBPRE1JX01BTExPQ19FUlIgLSBtYWxsb2MgZmFpbGVkXG4iICk7 CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIE9ETUlfT1BFTl9FUlI6CisgICAg ICAgICAgICBwcmludGYoICJFcnJvcjogT0RNSV9PUEVOX0VSUiAtIGNhbm5vdCBvcGVuIGNsYXNz XG4iICk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIE9ETUlfVE9PTUFOWUNM QVNTRVM6CisgICAgICAgICAgICBwcmludGYoICJFcnJvcjogT0RNSV9UT09NQU5ZQ0xBU1NFUyAt IHRvbyBtYW55IGNsYXNzZXNcbiIgKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRl ZmF1bHQ6CisgICAgICAgICAgICBwcmludGYoICJVbmtub3duIGVycm9yIVxuIiApOworICAgICAg ICB9CisgICAgICAgIHJldHVybihyYyk7CisgICAgfQorCisgICAgLyogY2xvc2UgdGhlIGRhdGFi YXNlIGFnYWluICovCisgICAgb2RtX2Nsb3NlX2NsYXNzKCByZXRDbGFzcyApOworCisgICAgLyog Zm9yZ2V0IGFib3V0IE9ETSBhbGwgdG9nZXRoZXIgKi8KKyAgICBvZG1fdGVybWluYXRlKCk7CisK KyNpZmRlZiBUUkFDRQorICAgIHByaW50ZiggIlRSQUNFOiBsZWF2aW5nIHgyNWxvY2FsX251YVxu IiApOworI2VuZGlmIC8qIFRSQUNFICovCisKKyAgICBkZWJ1ZyhGMTEwLCAieDI1bG9jYWxfbnVh IGxvY2FsIGFkZHJlc3MgaXMgIiwgYnVmLCAwKTsKKyAgICByZXR1cm4ocmMpOworfQorCisvKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioKKyAqIEZ1bmN0aW9uOiB4MjVmYWNpbGl0aWVzCisgKgorICogRGVz Y3JpcHRpb246CisgKiAgICAgIGJ1aWxkIHVwIHRoZSBmYWNpbGl0aWVzIGRhdGEgcGFja2V0IGZv ciBhIGNvbm5lY3Rpb24gcmVxdWVzdAorICoKKyAqIFBhcmFtZXRlcnM6CisgKiAgICAgIGEgcHJl LWFsbG9jYXRlZCBjaGFyIGJ1ZmZlciwgbm9ybWFsbHkgTlBJX01BWF9EQVRBIGJpZy4KKyAqCisg KiBSZXR1cm4gVmFsdWU6CisgKiAgICAgIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBpbnNlcnRl ZCBpbnRvIHRoZSBidWZmZXIKKyAqLworaW50Cit4MjVmYWNpbGl0aWVzKGJ1ZmZlcikgY2hhciAq YnVmZmVyOyB7CisgICAgZXh0ZXJuIGludCByZXZjYWxsOworICAgIGV4dGVybiBpbnQgY2xvc2dy OworICAgIGNoYXIgKnA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRlbXAgcG9pbnRl ciAqLworICAgIGNoYXIgKnN0YXJ0OyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRlbXAgcG9p bnRlciAqLworCisjaWZkZWYgVFJBQ0UKKyAgICBwcmludGYoICJUUkFDRTogZW50ZXJpbmcgeDI1 ZmFjaWxpdGllc1xuIiApOworI2VuZGlmIC8qIFRSQUNFICovCisKKyAgICBwID0gYnVmZmVyICsg MTsKKyAgICBzdGFydCA9IHA7CisKKyNpZmRlZiBERUJVRworICAgIHByaW50ZiggImtlcm1pdDog eDI1ZmFjaWxpdGllcygpOiBnZXR0aW5nIFgyNSBmYWNpbGl0aWVzXG4iICk7CisjZW5kaWYgLyog REVCVUcgKi8KKworICAgIGlmIChyZXZjYWxsICE9IDApIHsKKyNpZmRlZiBERUJVRworICAgICAg ICBwcmludGYoInJldmVyc2UgY2hhcmdlOiAlZFxuIiwgcmV2Y2FsbCApOworI2VuZGlmIC8qIERF QlVHICovCisgICAgICAgICorK3AgPSAweDAxOworICAgICAgICAqKytwID0gcmV2Y2FsbDsKKyAg ICB9CisgICAgaWYgKGNsb3NnciA+IDApIHsKKyNpZmRlZiBERUJVRworICAgICAgICBwcmludGYo ImNsb3NlZCB1c2VyIGdyb3VwOiAlZFxuIiwgY2xvc2dyICk7CisjZW5kaWYgLyogREVCVUcgKi8K KyAgICAgICAgKisrcCA9IDB4MDM7CisgICAgICAgICorK3AgPSBjbG9zZ3I7CisgICAgfQorCisj aWZkZWYgREVCVUcKKyAgICBpZiAocCA9PSBzdGFydCkgeworICAgICAgICBwcmludGYoICJubyBm YWNpbGl0aWVzXG4iICk7CisgICAgfQorI2VuZGlmIC8qIERFQlVHICovCisKKyAgICAvKiBzZXQg dGhlIHNpemUgb2YgdGhlIGZhY2lsaXRpZXMgYnVmZmVyICovCisgICAgKmJ1ZmZlciA9IChjaGFy KSggcCAtIHN0YXJ0ICkgJiAweGZmOworCisjaWZkZWYgREVCVUcKKyAgICBwcmludGYoICJrZXJt aXQ6IHgyNWZhY2lsaXRpZXMoKTogcmV0dXJuaW5nICVkXG4iLCAoaW50KShwIC0gYnVmZmVyKSAg KTsKKyNlbmRpZiAvKiBERUJVRyAqLworCisjaWZkZWYgVFJBQ0UKKyAgICBwcmludGYoICJUUkFD RTogbGVhdmluZyB4MjVmYWNpbGl0aWVzXG4iICk7CisjZW5kaWYgLyogVFJBQ0UgKi8KKworICAg IC8qIHJldHVybiB0aGUgc2l6ZSBvZiB0aGUgZmFjaWxpdGllcyB3aXRoIHNpemUgYnl0ZSAqLwor ICAgIC8qIDEgPT0gbm8gZmFjaWxpdGllcywgMCBieXRlIHJldHVybmVkIGFzIGZhY2lsaXRpZXMg c2l6ZSAqLworICAgIHJldHVybiggKGludCkocCAtIGJ1ZmZlcikgKTsKK30KKworLyoKKyAqIHJl c2V0IHRoZSBjb25uZWN0aW9uCisgKi8KK2ludAoreDI1cmVzZXQoY2F1c2UsIGRpYWduKSBjaGFy IGNhdXNlOyBjaGFyIGRpYWduOyB7CisgICAgLyogbm90IGltcGxlbWVudGVkICovCisKKyNpZmRl ZiBUUkFDRQorICAgIHByaW50ZiggIlRSQUNFOiBlbnRlcmluZyB4MjVyZXNldFxuIiApOworI2Vu ZGlmIC8qIFRSQUNFICovCisKKyNpZmRlZiBUUkFDRQorICAgIHByaW50ZiggIlRSQUNFOiBsZWF2 aW5nIHgyNXJlc2V0XG4iICk7CisjZW5kaWYgLyogVFJBQ0UgKi8KKworICAgIHJldHVybigwKTsK K30KKworLyoKKyAqIGNsZWFyIHRoZSB4MjUgY29ubmVjdGlvbiAtIGllOiBoYW5nIHVwCisgKi8K K2ludAoreDI1Y2xlYXIoKSB7CisgICAgaW50IGdldF9mbGFncyA9IDA7ICAgICAgICAgICAgICAg ICAgLyogcHJpb3JpdHkgZmxhZyBmb3IgZ2V0bXNnICovCisgICAgaW50IHB1dF9mbGFncyA9IDA7 ICAgICAgICAgICAgICAgICAgLyogc2VuZCBmbGFncywgYWx3YXlzIDAgKi8KKyAgICB1bG9uZyB0 eXBlOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwcmltaXRpdmUgdHlwZSAqLworICAgIE5f ZGlzY29uX3JlcV90ICpkaXNjb25fcmVxOyAgICAgICAgIC8qIHBvaW50ZXIgdG8gTl9ESVNDT05f UkVRICovCisgICAgTl9kaXNjb25faW5kX3QgKmRpc2Nvbl9pbmQ7ICAgICAgICAgLyogcG9pbnRl ciB0byBOX0RJU0NPTl9JTkQgKi8KKyAgICBOX25waV9kYXRhX3QgKmRpc2Nvbl9kYXRhOyAgICAg ICAgICAvKiBwb2ludGVyIHRvIE5fRElTQ09OX0lORCBkYXRhICovCisgICAgaW50IHJjID0gMDsg ICAgICAgICAgICAgICAgICAgICAgICAgLyogcmV0dXJuIGNvZGUgKi8KKworI2lmZGVmIFRSQUNF CisgICAgcHJpbnRmKCAiVFJBQ0U6IGVudGVyaW5nIHgyNWNsZWFyXG4iICk7CisjZW5kaWYgLyog VFJBQ0UgKi8KKworI2lmZGVmIERFQlVHCisgICAgLyogcHJpbnRmKCAieDI1Y2xlYXIoKTogY2hl Y2tpbmcgbGFzdCBtc2c6ICVzXG4iLCB4MjVwcmltKHgyNWxhc3Rtc2cpKTsgKi8KKyNlbmRpZiAv KiBERUJVRyAqLworCisgICAgLyoKKyAgICAqIFRoZSBmb2xsb3dpbmcgY2hlY2tzIGFyZSB1c2Vk IHRvIGVuc3VyZSB0aGF0IHdlIGRvbid0IGRpc2Nvbm5lY3QKKyAgICAqIG9yIHVuYmluZCB0d2lj ZSAtIHRoaXMgc2VlbXMgdG8gdGhyb3cgdGhlIE5QSSBpbnRlcmZhY2UgcmlnaHQgb3V0IG9mCisg ICAgKiBraWx0ZXIuCisgICAgKi8KKyAgICBzd2l0Y2goeDI1bGFzdG1zZykgeworICAgICAgY2Fz ZSBOX0JJTkRfQUNLOgorICAgICAgY2FzZSBOX0NPTk5fQ09OOgorICAgICAgY2FzZSBOX0NPTk5f UkVROgorICAgICAgY2FzZSBOX0RBVEFfUkVROgorICAgICAgY2FzZSBOX0RBVEFfSU5EOgorICAg ICAgICB7CisjaWZkZWYgREVCVUcKKyAgICAgICAgICAgIC8qIHByaW50ZigieDI1Y2xlYXIoKTog YWN0aXZlbHkgZGlzY29ubmVjdGluZ1xuIik7ICovCisjZW5kaWYgLyogREVCVUcgKi8KKworICAg ICAgICAgICAgICAgIGRpc2Nvbl9yZXEgPSAoTl9kaXNjb25fcmVxX3QgKiltYWxsb2MoTlBJX01B WF9DVEwpOworICAgICAgICAgICAgICAgIGlmIChkaXNjb25fcmVxID09IE5VTEwpIHsKKyAgICAg ICAgICAgICAgICAgICAgcGVycm9yKCJrZXJtaXQgeDI1Y2xlYXIoKTogZGlzY29uX3JlcSBtYWxs b2MgZmFpbGVkXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgLyogZmFsbHRocm91Z2gsIHRyeSB0 byB1bmJpbmQgdGhlIE5QSSBhbnl3YXkgKi8KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg ICAgICAgICAgICAgICAgICBkaXNjb25fcmVxLT5QUklNX3R5cGUgPSBOX0RJU0NPTl9SRVE7Cisg ICAgICAgICAgICAgICAgICAgIGRpc2Nvbl9yZXEtPkRJU0NPTl9yZWFzb24gPSAwOyAgICAgIC8q IG5vdCB1c2VkIGJ5IEFJWCAqLworICAgICAgICAgICAgICAgICAgICBkaXNjb25fcmVxLT5SRVNf bGVuZ3RoID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZGlzY29uX3JlcS0+UkVTX29mZnNldCA9 ICh1bG9uZykoc2l6ZW9mKE5fZGlzY29uX3JlcV90KSk7CisgICAgICAgICAgICAgICAgICAgIGRp c2Nvbl9yZXEtPlNFUV9udW1iZXIgPSB4MjVzZXFubzsgIC8qIGdsb2JhbCAqLworCisgICAgICAg ICAgICAgICAgICAgIGlmICh4MjVwdXRtc2codHR5ZmQsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKE5fbnBpX2N0bF90KilkaXNjb25fcmVxLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChOX25waV9kYXRhX3QqKU5VTEwsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHV0 X2ZsYWdzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA8IDApIHsKKyAgICAg ICAgICAgICAgICAgICAgICAgIHBlcnJvcigieDI1cHV0bXNnIGZhaWxlZCBpbiB4MjVjbGVhcigp Iik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZGlzY29uX2lu ZCA9IChOX2Rpc2Nvbl9pbmRfdCAqKW1hbGxvYyhOUElfTUFYX0NUTCk7CisgICAgICAgICAgICAg ICAgICAgIGRpc2Nvbl9kYXRhID0gKE5fbnBpX2RhdGFfdCAqKW1hbGxvYyhOUElfTUFYX0RBVEEp OworICAgICAgICAgICAgICAgICAgICBpZigoZGlzY29uX2luZCA9PSBOVUxMKSB8fCAoZGlzY29u X2RhdGEgPT0gTlVMTCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBlcnJvcigieDI1Y2xl YXIoKTogZGlzY29uX2luZCBtYWxsb2MgZmFpbGVkXG4iKTsKKyAgICAgICAgICAgICAgICAgICAg ICAgIC8qIGZhbGx0aHJvdWdoLCB0cnkgdG8gdW5iaW5kIHRoZSBOUEkgYW55d2F5ICovCisgICAg ICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZih4MjVn ZXRtc2codHR5ZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKE5fbnBp X2N0bF90KilkaXNjb25faW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IE5QSV9NQVhfQ1RMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChOX25w aV9kYXRhX3QqKWRpc2Nvbl9kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIE5QSV9NQVhfREFUQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm Z2V0X2ZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5fT0tfQUNL CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA8IDAgKSB7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcGVycm9yKCJ4MjVnZXRtc2cgZmFpbGVkIGluIHgyNWNsZWFy KCkiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmYWxsdGhyb3VnaCwgdHJ5IHRv IHVuYmluZCB0aGUgTlBJIGFueXdheSAqLworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJy ZWFrOworICAgICAgICAgICAgfQorICAgIH0KKworICAgIGlmICh4MjVsYXN0bXNnICE9IE5fVU5C SU5EX1JFUSkgeworICAgICAgICByYyA9IHgyNXVuYmluZCh0dHlmZCk7CisgICAgfQorCisjaWZk ZWYgVFJBQ0UKKyAgICBwcmludGYoICJUUkFDRTogbGVhdmluZyB4MjVjbGVhclxuIiApOworI2Vu ZGlmIC8qIFRSQUNFICovCisKKyAgICByZXR1cm4ocmMpOworfQorCisjaWZkZWYgREVCVUcKKy8q CisgKiBvbmx5IGZvciBkZWJ1Z2dpbmcKKyAqCisgKiB0dXJuIHRoZSBpbnRlcm5hbCByZXByZXNl bnRhdGlvbiBvZiBhIGRhdGFibG9jayBpbnRvIHNvbWV0aGluZworICogaGFsZi13YXkgcmVhZGFi bGUuIEJlY2F1c2UgdGhlIGxlbmd0aCBpcyBrbm93biwgd2UgY2FuIHByaW50CisgKiB0aGUgc3Ry aW5nIGluY2x1ZGluZyBudWxsJ3MgZXRjIChpbXBvcnRhbnQsIGJlY2F1c2UgdGhlIGZpcnN0KCEp CisgKiBieXRlIG9mIGFuIFgxMjEgYWRkcmVzcyBpcyBhIG51bGwhIChYMTIxIGFkZHIgPT0gMCAr IFgyNSBhZGRyKQorICovCit4MjVkdW1wX2RhdGEoY2hhciAqYWRkciwgdWxvbmcgb2Zmc2V0LCB1 bG9uZyBsZW5ndGgpIHsKKyAgICBjaGFyICpwdHIgPSBhZGRyICsgb2Zmc2V0OworICAgIHVsb25n IGkgPSBsZW5ndGg7CisgICAgLyogYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgYWxsIHVucHJp bnRhYmxlIGNoYXJzICovCisgICAgY2hhciAqYnVmID0gKGNoYXIgKiltYWxsb2MoIGxlbmd0aCAq IDQgKTsKKyAgICBjaGFyICpicHRyID0gYnVmOyAgIC8qIHBvaW50ZXIgdG8gY3VycmVudCBwbGFj ZSBpbiB0aGUgcHJpbnQgYnVmZmVyICovCisKKyAgICB3aGlsZSAoaSA+IDApIHsKKyAgICAgICAg aWYgKGlzcHJpbnQoKnB0cikpIHsKKyAgICAgICAgICAgICpicHRyKysgPSAqcHRyOworICAgICAg ICB9IGVsc2UgeworICAgICAgICAgICAgKmJwdHIrKyA9ICdbJzsKKyAgICAgICAgICAgIHN0cmNw eShicHRyLGNrY3RveCgqcHRyLDEpKTsgYnB0ciArPSAyOworICAgICAgICAgICAgKmJwdHIrKyA9 ICddJzsKKyAgICAgICAgfQorICAgICAgICBwdHIrKzsKKyAgICAgICAgaS0tOworICAgIH0KKyAg ICBpZiAobGVuZ3RoID4gMCkgeworICAgICAgICAqYnB0ciA9ICdcMCc7CisgICAgICAgIHByaW50 ZiggIiVzIiwgYnVmICk7CisgICAgfQorICAgIHByaW50ZiggIiAoJWQrJWQpXG4iLCBvZmZzZXQs IGxlbmd0aCApOworCisgICAgaWYgKGJ1ZikgeyBmcmVlKGJ1Zik7IGJ1ZiA9IE5VTEw7IH0KKyAg ICByZXR1cm47Cit9CisKKy8qCisgKiBvbmx5IGZvciBkZWJ1Z2dpbmcKKyAqIHByaW50IGFzIG11 Y2ggdXNlZnVsIGluZm9ybWF0aW9uIGFib3V0IGEgcGFja2V0IGFzIHBvc3NpYmxlCisgKi8KK3gy NWR1bXBfcHJpbShwcmltaXRpdmUpICAgIE5fbnBpX2N0bF90ICpwcmltaXRpdmU7IHsKKyAgICBw cmludGYoIlByaW1pdGl2ZSIpOworICAgIHN3aXRjaCAocHJpbWl0aXZlLT5QUklNX3R5cGUpIHsK KyAgICAgIGNhc2UgTl9CSU5EX0FDSzoKKyAgICAgICAgcHJpbnRmKCAiXHROX0JJTkRfQUNLXG5c dGFkZHJlc3M6XHQiICk7CisgICAgICAgIHgyNWR1bXBfZGF0YSggKGNoYXIgKilwcmltaXRpdmUs CisgICAgICAgICAgICAgICAgICAgICBwcmltaXRpdmUtPmJpbmRfYWNrLkFERFJfb2Zmc2V0LAor ICAgICAgICAgICAgICAgICAgICAgcHJpbWl0aXZlLT5iaW5kX2Fjay5BRERSX2xlbmd0aCApOwor ICAgICAgICBwcmludGYoICJcdHByb3RvIGlkOlx0IiApOworICAgICAgICB4MjVkdW1wX2RhdGEo IChjaGFyICopcHJpbWl0aXZlLAorICAgICAgICAgICAgICAgICAgICAgcHJpbWl0aXZlLT5iaW5k X2Fjay5QUk9UT0lEX29mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgIHByaW1pdGl2ZS0+Ymlu ZF9hY2suUFJPVE9JRF9sZW5ndGggKTsKKyAgICAgICAgcHJpbnRmKCAiXHRjb25uaW5kOlx0JWRc blx0dG9rZW46XHRcdCVkXG4iLAorICAgICAgICAgICAgICAgcHJpbWl0aXZlLT5iaW5kX2Fjay5D T05JTkRfbnVtYmVyLAorICAgICAgICAgICAgICAgcHJpbWl0aXZlLT5iaW5kX2Fjay5UT0tFTl92 YWx1ZSApOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBOX0JJTkRfUkVROgorICAgICAg ICBwcmludGYoICJcdE5fQklORF9SRVFcblx0YWRkcmVzczpcdCIgKTsKKyAgICAgICAgeDI1ZHVt cF9kYXRhKCAoY2hhciAqKXByaW1pdGl2ZSwKKyAgICAgICAgICAgICAgICAgICAgIHByaW1pdGl2 ZS0+YmluZF9yZXEuQUREUl9vZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICBwcmltaXRpdmUt PmJpbmRfcmVxLkFERFJfbGVuZ3RoICk7CisgICAgICAgIHByaW50ZiggIlx0cHJvdG8gaWQ6XHQi ICk7CisgICAgICAgIHgyNWR1bXBfZGF0YSggKGNoYXIgKilwcmltaXRpdmUsCisgICAgICAgICAg ICAgICAgICAgICBwcmltaXRpdmUtPmJpbmRfcmVxLlBST1RPSURfb2Zmc2V0LAorICAgICAgICAg ICAgICAgICAgICAgcHJpbWl0aXZlLT5iaW5kX3JlcS5QUk9UT0lEX2xlbmd0aCApOworICAgICAg ICBwcmludGYoICJcdGNvbm5pbmQ6XHQlZFxuXHRmbGFnczpcdFx0JWRcbiIsCisgICAgICAgICAg ICAgICBwcmltaXRpdmUtPmJpbmRfcmVxLkNPTklORF9udW1iZXIsCisgICAgICAgICAgICAgICBw cmltaXRpdmUtPmJpbmRfcmVxLkJJTkRfZmxhZ3MgKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAg IGNhc2UgTl9DT05OX0NPTjoKKyAgICAgICAgcHJpbnRmKCAiXHROX0NPTk5fQ09OXG4iICk7Cisg ICAgICAgIHByaW50ZiggIlx0UkVTXHRcdCIgKTsKKyAgICAgICAgeDI1ZHVtcF9kYXRhKCAoY2hh ciAqKXByaW1pdGl2ZSwKKyAgICAgICAgICAgICAgICAgICAgIHByaW1pdGl2ZS0+Y29ubl9jb24u UkVTX29mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgIHByaW1pdGl2ZS0+Y29ubl9jb24uUkVT X2xlbmd0aCApOworICAgICAgICBwcmludGYoICJcdGZsYWdzOlx0JWRcbiIsIHByaW1pdGl2ZS0+ Y29ubl9jb24uQ09OTl9mbGFncyApOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBOX0NP Tk5fSU5EOgorICAgICAgICBwcmludGYoICJcdE5fQ09OTl9JTkRcbiIgKTsKKyAgICAgICAgcHJp bnRmKCAiXHRzb3VyY2U6XHRcdCIgKTsKKyAgICAgICAgeDI1ZHVtcF9kYXRhKCAoY2hhciAqKXBy aW1pdGl2ZSwKKyAgICAgICAgICAgICAgICAgICAgIHByaW1pdGl2ZS0+Y29ubl9pbmQuU1JDX29m ZnNldCwKKyAgICAgICAgICAgICAgICAgICAgIHByaW1pdGl2ZS0+Y29ubl9pbmQuU1JDX2xlbmd0 aCApOworICAgICAgICBwcmludGYoICJcdGRlc3RpbmF0aW9uOlx0IiApOworICAgICAgICB4MjVk dW1wX2RhdGEoIChjaGFyICopcHJpbWl0aXZlLAorICAgICAgICAgICAgICAgICAgICAgcHJpbWl0 aXZlLT5jb25uX2luZC5ERVNUX29mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgIHByaW1pdGl2 ZS0+Y29ubl9pbmQuREVTVF9sZW5ndGggKTsKKyAgICAgICAgcHJpbnRmKCAiXHRTRVFfbnVtYmVy Olx0JWRcbiIsIHByaW1pdGl2ZS0+Y29ubl9pbmQuU0VRX251bWJlciApOworICAgICAgICBwcmlu dGYoICJcdGZsYWdzOlx0JWRcbiIsIHByaW1pdGl2ZS0+Y29ubl9pbmQuQ09OTl9mbGFncyApOwor ICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBOX0NPTk5fUkVROgorICAgICAgICBwcmludGYo ICJcdE5fQ09OTl9SRVFcblx0ZGVzdGluYXRpb246XHQiICk7CisgICAgICAgIHgyNWR1bXBfZGF0 YSggKGNoYXIgKilwcmltaXRpdmUsCisgICAgICAgICAgICAgICAgICAgICBwcmltaXRpdmUtPmNv bm5fcmVxLkRFU1Rfb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgcHJpbWl0aXZlLT5jb25u X3JlcS5ERVNUX2xlbmd0aCApOworICAgICAgICBwcmludGYoICJcdGZsYWdzOlx0JWRcbiIsIHBy aW1pdGl2ZS0+Y29ubl9yZXEuQ09OTl9mbGFncyApOworICAgICAgICBicmVhazsKKworICAgICAg Y2FzZSBOX0NPTk5fUkVTOgorICAgICAgICBwcmludGYoICJcdE5fQ09OTl9SRVNcbiIgKTsKKyAg ICAgICAgcHJpbnRmKCAiXHRUT0tFTl92YWx1ZVx0JWRcbiIsIHByaW1pdGl2ZS0+Y29ubl9yZXMu VE9LRU5fdmFsdWUgKTsKKyAgICAgICAgcHJpbnRmKCAiXHRTRVFfbnVtYmVyXHQlZFxuIiwgcHJp bWl0aXZlLT5jb25uX3Jlcy5TRVFfbnVtYmVyICk7CisgICAgICAgIHByaW50ZiggIlx0Q09OTl9m bGFnc1x0JWRcbiIsIHByaW1pdGl2ZS0+Y29ubl9yZXMuQ09OTl9mbGFncyApOworICAgICAgICBw cmludGYoICJcdFJFU1x0XHQiICk7CisgICAgICAgIHgyNWR1bXBfZGF0YSggKGNoYXIgKilwcmlt aXRpdmUsCisgICAgICAgICAgICAgICAgICAgICBwcmltaXRpdmUtPmNvbm5fcmVzLlJFU19vZmZz ZXQsCisgICAgICAgICAgICAgICAgICAgICBwcmltaXRpdmUtPmNvbm5fcmVzLlJFU19sZW5ndGgg KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgTl9EQVRBQ0tfSU5EOgorICAgICAgICBw cmludGYoICJcdE5fREFUQUNLX0lORFxuIiApOworICAgICAgICBicmVhazsKKworICAgICAgY2Fz ZSBOX0RBVEFDS19SRVE6CisgICAgICAgIHByaW50ZiggIlx0Tl9EQVRBQ0tfUkVRXG4iICk7Cisg ICAgICAgIHByaW50ZiggIlx0ZmxhZ3M6XHQlZFxuIiwgcHJpbWl0aXZlLT5kYXRhX3JlcS5EQVRB X3hmZXJfZmxhZ3MgKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgTl9EQVRBX0lORDoK KyAgICAgICAgcHJpbnRmKCAiXHROX0RBVEFfSU5EXG4iICk7CisgICAgICAgIHByaW50ZiggIlx0 ZmxhZ3M6XHQlZFxuIiwgcHJpbWl0aXZlLT5kYXRhX2luZC5EQVRBX3hmZXJfZmxhZ3MgKTsKKyAg ICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgTl9EQVRBX1JFUToKKyAgICAgICAgcHJpbnRmKCAi XHROX0RBVEFfUkVRXG4iICk7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIE5fRElTQ09O X0lORDoKKyAgICAgICAgcHJpbnRmKCAiXHROX0RJU0NPTl9JTkRcbiIgKTsKKyAgICAgICAgcHJp bnRmKCAiXHRvcmlnaW46XHQlZFxuIiwgcHJpbWl0aXZlLT5kaXNjb25faW5kLkRJU0NPTl9vcmln ICk7CisgICAgICAgIHByaW50ZiggIlx0cmVhc29uOlx0XHQlZFxuIiwgcHJpbWl0aXZlLT5kaXNj b25faW5kLkRJU0NPTl9yZWFzb24gKTsKKyAgICAgICAgcHJpbnRmKCAiXHRzZXEgbm86XHRcdCVk XG4iLCBwcmltaXRpdmUtPmRpc2Nvbl9pbmQuU0VRX251bWJlciApOworICAgICAgICBwcmludGYo ICJcdFJFUzpcdCIgKTsKKyAgICAgICAgeDI1ZHVtcF9kYXRhKCAoY2hhciAqKXByaW1pdGl2ZSwK KyAgICAgICAgICAgICAgICAgICAgIHByaW1pdGl2ZS0+ZGlzY29uX2luZC5SRVNfb2Zmc2V0LAor ICAgICAgICAgICAgICAgICAgICAgcHJpbWl0aXZlLT5kaXNjb25faW5kLlJFU19sZW5ndGggKTsK KyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgTl9ESVNDT05fUkVROgorICAgICAgICBwcmlu dGYoICJcdE5fRElTQ09OX1JFUVxuIiApOworICAgICAgICBwcmludGYoICJcdERJU0NPTl9yZWFz b246XHQlZFxuIiwKKyAgICAgICAgICAgICAgIHByaW1pdGl2ZS0+ZGlzY29uX3JlcS5ESVNDT05f cmVhc29uICk7CisgICAgICAgIHByaW50ZiggIlx0UkVTOlx0IiApOworICAgICAgICB4MjVkdW1w X2RhdGEoIChjaGFyICopcHJpbWl0aXZlLAorICAgICAgICAgICAgICAgICAgICAgcHJpbWl0aXZl LT5kaXNjb25fcmVxLlJFU19vZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICBwcmltaXRpdmUt PmRpc2Nvbl9yZXEuUkVTX2xlbmd0aCApOworICAgICAgICBwcmludGYoICJcdFNFUV9udW1iZXI6 XHQlZFxuIiwgcHJpbWl0aXZlLT5kaXNjb25fcmVxLlNFUV9udW1iZXIgKTsKKyAgICAgICAgYnJl YWs7CisKKyAgICAgIGNhc2UgTl9FUlJPUl9BQ0s6CisgICAgICAgIHByaW50ZiggIlx0Tl9FUlJP Ul9BQ0tcbiIgKTsKKyAgICAgICAgcHJpbnRmKCAiXHRDYXVzZWQgYnk6XHQlc1xuIiwKKyAgICAg ICAgICAgICAgIHgyNXByaW0oIHByaW1pdGl2ZS0+ZXJyb3JfYWNrLkVSUk9SX3ByaW0gKSApOwor ICAgICAgICBwcmludGYoICJcdE5QSSBlcnJvcjpcdCVzXG4iLAorICAgICAgICAgICAgICAgeDI1 ZXJyKCBwcmltaXRpdmUtPmVycm9yX2Fjay5OUElfZXJyb3IgKSk7CisgICAgICAgIGVycm5vID0g cHJpbWl0aXZlLT5lcnJvcl9hY2suVU5JWF9lcnJvcjsKKyAgICAgICAgcGVycm9yKCAiXHQiICk7 CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIE5fRVhEQVRBX0lORDoKKyAgICAgICAgcHJp bnRmKCAiXHROX0VYREFUQV9BQ0tcbiIgKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2Ug Tl9FWERBVEFfUkVROgorICAgICAgICBwcmludGYoICJcdE5fRVhEQVRBX1JFUVxuIiApOworICAg ICAgICBicmVhazsKKworICAgICAgY2FzZSBOX0lORk9fQUNLOgorICAgICAgICBwcmludGYoICJc dE5fSU5GT19BQ0tcbiIgKTsKKyAgICAgICAgcHJpbnRmKCAiXHROU0RVIHNpemU6XHQlZFxuIiwg cHJpbWl0aXZlLT5pbmZvX2Fjay5OU0RVX3NpemUgKTsKKyAgICAgICAgcHJpbnRmKCAiXHRFTlNE VSBzaXplOlx0JWRcbiIsIHByaW1pdGl2ZS0+aW5mb19hY2suRU5TRFVfc2l6ZSApOworICAgICAg ICBwcmludGYoICJcdENEQVRBIHNpemU6XHQlZFxuIiwgcHJpbWl0aXZlLT5pbmZvX2Fjay5DREFU QV9zaXplICk7CisgICAgICAgIHByaW50ZiggIlx0RERBVEEgc2l6ZTpcdCVkXG4iLCBwcmltaXRp dmUtPmluZm9fYWNrLkREQVRBX3NpemUgKTsKKyAgICAgICAgcHJpbnRmKCAiXHRBRERSIHNpemU6 XHQlZFxuIiwgcHJpbWl0aXZlLT5pbmZvX2Fjay5BRERSX3NpemUgKTsKKyAgICAgICAgcHJpbnRm KCAiXHROSURVIHNpemU6XHQlZFxuIiwgcHJpbWl0aXZlLT5pbmZvX2Fjay5OSURVX3NpemUgKTsK KyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgTl9JTkZPX1JFUToKKyAgICAgICAgcHJpbnRm KCAiXHROX0lORk9fUkVRXG4iICk7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIE5fT0tf QUNLOgorICAgICAgICBwcmludGYoICJcdE5fT0tfQUNLXG4iICk7CisgICAgICAgIGJyZWFrOwor CisgICAgICBjYXNlIE5fT1BUTUdNVF9SRVE6CisgICAgICAgIHByaW50ZiggIlx0Tl9PUFRNR01U X1JFUVxuIiApOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBOX1JFU0VUX0NPTjoKKyAg ICAgICAgcHJpbnRmKCAiXHROX1JFU0VUX0NPTlxuIiApOworICAgICAgICBicmVhazsKKworICAg ICAgY2FzZSBOX1JFU0VUX0lORDoKKyAgICAgICAgcHJpbnRmKCAiXHROX1JFU0VUX0lORFxuIiAp OworICAgICAgICBwcmludGYoICJcdHJlYXNvbjpcdFx0JWRcbiIsIHByaW1pdGl2ZS0+cmVzZXRf aW5kLlJFU0VUX3JlYXNvbiApOworICAgICAgICBwcmludGYoICJcdG9yaWdpbjpcdFx0JWRcbiIs IHByaW1pdGl2ZS0+cmVzZXRfaW5kLlJFU0VUX29yaWcgKTsKKyAgICAgICAgYnJlYWs7CisKKyAg ICAgIGNhc2UgTl9SRVNFVF9SRVE6CisgICAgICAgIHByaW50ZiggIlx0Tl9SRVNFVF9SRVFcbiIg KTsKKyAgICAgICAgcHJpbnRmKCAiXHRyZWFzb246XHRcdCVkXG4iLCBwcmltaXRpdmUtPnJlc2V0 X3JlcS5SRVNFVF9yZWFzb24gKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgTl9SRVNF VF9SRVM6CisgICAgICAgIHByaW50ZiggIlx0Tl9SRVNFVF9SRVNcbiIgKTsKKyAgICAgICAgYnJl YWs7CisKKyAgICAgIGNhc2UgTl9VREVSUk9SX0lORDoKKyAgICAgICAgcHJpbnRmKCAiXHROX1VE RVJST1JfSU5EXG4iICk7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIE5fVU5CSU5EX1JF UToKKyAgICAgICAgcHJpbnRmKCAiXHROX1VOQklORF9SRVFcbiIgKTsKKyAgICAgICAgYnJlYWs7 CisKKyAgICAgIGNhc2UgTl9VTklUREFUQV9SRVE6CisgICAgICAgIHByaW50ZiggIlx0Tl9VTklU REFUQV9SRVFcbiIgKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgTl9VTklUREFUQV9J TkQ6CisgICAgICAgIHByaW50ZiggIlx0Tl9VTklUREFUQV9JTkRcbiIgKTsKKyAgICAgICAgYnJl YWs7CisKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgICh2b2lkKSBwcmludGYoICJVbmtub3duIE5Q SSBlcnJvciAlZCIsIHByaW1pdGl2ZS0+UFJJTV90eXBlICk7CisgICAgICAgIHJldHVybiAwOwor ICAgIH0KK30KKyNlbmRpZiAvKiBERUJVRyAqLworCisvKiBpdCBsb29rcyBsaWtlIHNpZ25hbCBo YW5kbGluZyBpcyBub3QgbmVlZGVkIHdpdGggc3RyZWFtcyEgKi8KKy8qIHgyNW9vYmgoKSAgICAt IGhhbmRsZSBTSUdVUkcgc2lnbmFscyAtIHRha2UgZnJvbSBpc29kZSA/ICovCisKKyNlbmRpZiAv KiBJQk1YMjUgKi8KKworI2lmbmRlZiBOT0hUVFAKKy8qCisgIFdoaWNoIHRpbWUuaCBmaWxlcyB0 byBpbmNsdWRlLi4uIFNlZSBja2NkZWIuaCBmb3IgZGVmYXVsdHMuCisgIE5vdGUgdGhhdCAwLCAx LCAyLCBvciBhbGwgMyBvZiB0aGVzZSBjYW4gYmUgaW5jbHVkZWQgYWNjb3JkaW5nIHRvCisgIHRo ZSBzeW1ib2wgZGVmaW5pdGlvbnMuCisqLworI2lmbmRlZiBOT1RJTUVICisjaWZkZWYgVElNRUgK KyNpbmNsdWRlIDx0aW1lLmg+CisjZW5kaWYgLyogVElNRUggKi8KKyNlbmRpZiAvKiBOT1RJTUVI ICovCisKKyNpZm5kZWYgTk9TWVNUSU1FSAorI2lmZGVmIFNZU1RJTUVICisjaW5jbHVkZSA8c3lz L3RpbWUuaD4KKyNlbmRpZiAvKiBTWVNUSU1FSCAqLworI2VuZGlmIC8qIE5PU1lTVElNRUggKi8K KworI2lmbmRlZiBOT1NZU1RJTUVCSAorI2lmZGVmIFNZU1RJTUVCSAorI2luY2x1ZGUgPHN5cy90 aW1lYi5oPgorI2VuZGlmIC8qIFNZU1RJTUVCSCAqLworI2VuZGlmIC8qIE5PU1lTVElNRUJIICov CisKKyNpZm5kZWYgVElNRUgKKyNpZm5kZWYgU1lTVElNRUgKKyNpZm5kZWYgU1lTVElNRUJICisj aWZkZWYgUGxhbjkKKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2Vsc2UKKyNpZmRlZiBBSVg0MQor I2luY2x1ZGUgPHRpbWUuaD4KKyNlbHNlCisjaWZkZWYgU1VOT1M0CisjaW5jbHVkZSA8c3lzL3Rp bWUuaD4KKyNlbHNlCisjaWZkZWYgU1lTVElNRUgKKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2Vs c2UKKyNpZmRlZiBQT1NJWAorI2luY2x1ZGUgPHBvc2l4L3RpbWUuaD4KKyNlbHNlCisjaWZkZWYg Q0xJWAorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjZWxzZQorI2lmZGVmIE9TMgorI2luY2x1ZGUg PHRpbWUuaD4KKyNlbHNlCisjaW5jbHVkZSA8dGltZS5oPgorLyogI2luY2x1ZGUgPHV0aW1lLmg+ ICovCisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogQ0xJWCAqLworI2VuZGlmIC8qIFBPU0lY ICovCisjZW5kaWYgLyogU1lTVElNRUggKi8KKyNlbmRpZiAvKiBTVU5PUzQgKi8KKyNlbmRpZiAv KiBBSVg0MSAqLworI2VuZGlmIC8qIFBsYW45ICovCisjZW5kaWYKKyNlbmRpZgorI2VuZGlmCisK KyNpZmRlZiBPUzIKKyNpbmNsdWRlIDxzeXMvdXRpbWUuaD4KKyNpZmRlZiBOVAorI2RlZmluZSB1 dGltYnVmIF91dGltYnVmCisjZW5kaWYgLyogTlQgKi8KKyNkZWZpbmUgdXRpbWUgICBfdXRpbWUK KyNlbHNlCisjaWZkZWYgU1lTVVRJTUVIICAgICAgICAgICAgICAgICAgICAgICAgLyogPHN5cy91 dGltZS5oPiBpZiByZXF1ZXN0ZWQsICAqLworI2luY2x1ZGUgPHN5cy91dGltZS5oPiAgICAgICAg ICAgICAgICAgIC8qIGZvciBleHRyYSBmaWVsZHMgcmVxdWlyZWQgYnkgKi8KKyNlbHNlICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA4OE9wZW4gc3BlYy4gKi8KKyNpZmRlZiBV VElNRUggICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBvciA8dXRpbWUuaD4gaWYgcmVxdWVz dGVkICovCisjaW5jbHVkZSA8dXRpbWUuaD4gICAgICAgICAgICAgICAgICAgICAgLyogKFNWUjQs IFBPU0lYKSAqLworI2RlZmluZSBTWVNVVElNRUggICAgICAgICAgICAgICAgICAgICAgIC8qIFVz ZSB0aGlzIGZvciBib3RoIGNhc2VzLiAqLworI2VuZGlmIC8qIFVUSU1FSCAqLworI2VuZGlmIC8q IFNZU1VUSU1FSCAqLworI2VuZGlmIC8qIE9TMiAqLworCisjaWZkZWYgVk1TCQkJCS8qIFNNUyAy MDA3LzAyLzE1ICovCisjaW5jbHVkZSAiY2t2cnRsLmgiCisjZW5kaWYgLyogZGVmIFZNUyAqLwor CisjaWZuZGVmIEhUVFBfVkVSU0lPTgorI2RlZmluZSBIVFRQX1ZFUlNJT04gIkhUVFAvMS4xIgor I2VuZGlmIC8qIEhUVFBfVkVSU0lPTiAqLworCisjaWZkZWYgQ01EQVRFMlRNCit0aW1lX3QKKyNp ZmRlZiBDS19BTlNJQworaHR0cF9kYXRlKGNoYXIgKiBkYXRlKQorI2Vsc2UKK2h0dHBfZGF0ZShk YXRlKSBjaGFyICogZGF0ZTsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogaHR0cF9kYXRlICov IHsKKyAgICAvKiBIVFRQIGRhdGVzIGFyZSBvZiB0aGUgZm9ybTogICJTdW4sIDA2IE9jdCAxOTk3 IDIwOjExOjQ3IEdNVCIgKi8KKyAgICAvKiBUaGVyZSBhcmUgdHdvIG9sZGVyIGZvcm1hdHMgd2hp Y2ggd2UgYXJlIHJlcXVpcmVkIHRvIHBhcnNlCisgICAgICogdGhhdCB3ZSBjdXJyZW50bHkgZG8g bm90OgorICAgICAqCisgICAgICogUkZDIDg1MDogICAiU3VuZGF5LCAwNi1PY3QtOTcgMjA6MTE6 NDcgR01UIgorICAgICAqIGFzY3RpbWUoKTogIlN1biBOb3YgIDYgMjA6MTE6NDcgMTk5NyIKKyAg ICAgKgorICAgICAqIEhvd2V2ZXIsIGl0IGlzIHJlcXVpcmVkIHRoYXQgYWxsIGRhdGVzIGJlIHNl bnQgaW4gdGhlIGZvcm0gd2UKKyAgICAgKiBkbyBhY2NlcHQuICBUaGUgb3RoZXIgdHdvIGZvcm1h dHMgYXJlIGZvciBjb21wYXRpYmlsaXR5IHdpdGgKKyAgICAgKiByZWFsbHkgb2xkIHNlcnZlcnMu CisgICAgICovCisgICAgZXh0ZXJuIGNoYXIgY21kYXRlYnVmWzE4XTsKKyAgICBzdHJ1Y3QgdG0g dF90bTsKKyAgICB0aW1lX3QgdDsKKyAgICBjaGFyIGxkYXRlWzMyXTsKKyAgICBpbnQgajsKKwor ICAgIGogPSBja2luZGV4KCIsIixkYXRlLDAsMCwwKTsKKyAgICBja3N0cm5jcHkobGRhdGUsJmRh dGVbaisxXSwyNSk7CisKKyAgICB7ICAgLyoKKyAgICAgICAgICAgY21jdnRhdGUoKSBkYXRlIGNo YW5nZWQgdG8gcmV0dXJuIGEgc3RyaW5nIHBvaW50ZXIuCisgICAgICAgICAgIGZkYywgMTIgQXVn IDIwMDEuCisgICAgICAgICovCisgICAgICAgIGNoYXIgKiBkcDsKKyAgICAgICAgZHAgPSAoY2hh ciAqKWNtY3Z0ZGF0ZShsZGF0ZSwwKTsgLyogQ29udmVydCB0byBub3JtYWwgZm9ybSAqLworICAg ICAgICBpZiAoIWRwKQorICAgICAgICAgIHJldHVybigwKTsKKyAgICAgICAgdF90bSA9ICpjbWRh dGUydG0oZHAsMSk7CisgICAgfQorLyoKKyAgRnJvbSBMdWNhcyBIYXJ0LCA1IERlYyAyMDAxOgor ICAiT24gdGhlIHN5c3RlbXMgdG8gd2hpY2ggSSBoYXZlIGFjY2VzcyAoU3VuT1MgNC4xLjEsIFNv bGFyaXMgOCwgYW5kIFRydTY0KSwKKyAgc2V0dGluZyB0bV9pc2RzdCB0byAtMSBtYWludGFpbnMg dGhlIGNvcnJlY3QgdGltZXpvbmUgb2Zmc2V0cywgaS5lLiwgd3JpdGVzCisgIHRoZSBzcGVjaWZp ZWQgKEdNVCkgdGltZSBpZiB0aGUgYnVmZmVyIHNpemUgaXMgMjEsIG9yIHRoZSBjb250ZW1wb3Jh bmVvdXMKKyAgbG9jYWx0aW1lIGlmIHRoZSBidWZmZXIgc2l6ZSBpcyAyNS4gIFBlcmhhcHMgdG1f aXNkc3Qgc2hvdWxkIGJlIHNldCBpbgorICBjbWRhdGUydG0oKSwgcmF0aGVyIHRoYW4gb25seSBp biBodHRwX2RhdGUuIgorKi8KKyNpZm5kZWYgTk9UTV9JU0RTVCAgICAgICAgICAgICAgICAgICAg ICAvKiBGb3IgcGxhdGZvcm1zIHdoZXJlICovCisgICAgdF90bS50bV9pc2RzdCA9IC0xOyAgICAg ICAgICAgICAgICAgLyogdG1faXNkc3QgZG9lc24ndCBleGlzdC4gKi8KKyNlbmRpZiAvKiBOT1RN X0lTRFNUICovCisKKyAgICB0ID0gbWt0aW1lKCZ0X3RtKTsgICAgICAgICAgICAgICAgICAvKiBO T1QgUE9SVEFCTEUgKi8KKworI2lmZGVmIFhYX1RJTUVaT05FCisgICAgdCAtPSBfdGltZXpvbmU7 CisjZW5kaWYgLyogWFhfVElNRVpPTkUgKi8KKworICAgIHJldHVybih0KTsKK30KKyNlbmRpZiAv KiBDTURBVEUyVE0gKi8KKworY2hhciAqCitodHRwX25vdygpIHsKKyAgICBzdGF0aWMgY2hhciBu b3dzdHJbMzJdOworI2lmZGVmIENNREFURTJUTQorICAgIHN0cnVjdCB0bSAgKmdtdDsKKyAgICB0 aW1lX3QgbHRpbWU7ICAgICAgICAgICAgICAgICAgICAgICAvKiBOT1QgUE9SVEFCTEUgKi8KKwor ICAgIHRpbWUoJmx0aW1lKTsKKworICAgIGdtdCA9IGdtdGltZSgmbHRpbWUpOyAgICAgICAgICAg ICAgIC8qIFBST0JBQkxZIE5PVCBQT1JUQUJMRSAqLworICAgIHN0cmZ0aW1lKG5vd3N0ciwzMiwi JWEsICVkICViICVZICVIOiVNOiVTIEdNVCIsZ210KTsgLyogTk9UIFBPUlRBQkxFICovCisgICAg Lyogbm90IG9ubHkgaXMgaXQgbm90IHBvcnRhYmxlIGJ1dCBpdCdzIGxvY2FsZS1kZXBlbmRlbnQg Ki8KKyNlbHNlCisvKgorICBUaGlzIGlzIGhvcGVsZXNzLiAgRmlyc3Qgb2YgYWxsLCBpdCBzZWVt cyB0aGF0IEhUVFAgd2FudHMgRGF5IGFuZCBNb250aAorICBOQU1FUz8gIEluIEVuZ2xpc2g/ICBX aG9zZSBpZGVhIHdhcyB0aGF0PyAgRXZlbiB3b3JzZSwgdGhlIGRhdGUvdGltZSBtdXN0IGJlCisg IGV4cHJlc3NlZCBpbiBadWx1IChVVEMgKEdNVCkpLCBhbmQgY29udmVydGluZyBmcm9tIGxvY2Fs IHRpbWUgdG8gR01UIGlzIGEKKyAgbmlnaHRtYXJlLiAgRXZlcnkgcGxhdGZvcm0gZG9lcyBpdCBk aWZmZXJlbnRseSwgaWYgYXQgYWxsIC0tIGV2ZW4gaWYgd2UKKyAgcmVzdHJpY3Qgb3Vyc2VsdmVz IHRvIFVOSVguICBGb3IgZXhhbXBsZSAocXVvdGluZyBmcm9tIHJlY2VudCBDLUtlcm1pdCBlZGl0 CisgIGhpc3RvcnkpLCAiRml4ZWQgYSBsb25nc3RhbmRpbmcgYnVnIGluIHRoZSBCU0RJIHZlcnNp b24sIGluIHdoaWNoIGluY29taW5nCisgIGZpbGUgZGF0ZXMgd2VyZSBzZXQgaW4gR01UIHJhdGhl ciB0aGFuIGxvY2FsIHRpbWUuICBJdCBzZWVtcyBpbiA0LjRCU0QsCisgIGxvY2FsdGltZSgpIGRv ZXMgbm90IHJldHVybiB0aGUgbG9jYWwgdGltZSwgYnV0IHJhdGhlciBaZXJvIE1lcmlkaWFuICha dWx1KQorICB0aW1lIChHTVQpLCBhbmQgbXVzdCBiZSBhZGp1c3RlZCBieSB0aGUgdG1fZ210b2Zm IHZhbHVlLiIgIFN3ZWxsLiAgRm9yCisgIGdyZWF0ZXIgYXBwcmVjaWF0aW9uIG9mIHRoZSBzY29w ZSBvZiB0aGUgcHJvYmxlbSwganVzdCB0YWtlIGEgbG9vayBhdCB0aGUKKyAgdGltZS1yZWxhdGVk ICNpZmRlZnMgaW4gY2t1dGlvLmMuICBUaGUgb25seSByaWdodCB3YXkgdG8gZG8gdGhpcyBpcyB0 byBhZGQKKyAgb3VyIG93biBwb3J0YWJsZSBBUEkgZm9yIGNvbnZlcnRpbmcgYmV0d2VlbiBsb2Nh bCB0aW1lIGFuZCBHTVQvVVRDL1p1bHUKKyAgdGhhdCBzaGllbGRzIHVzIG5vdCBvbmx5IGZyb20g VU5JWGlzbXMgbGlrZSB0aW1lX3QgYW5kIHN0cnVjdCB0bSwgYnV0IGFsc28KKyAgdGhlIHVuYmVs aWV2YWJsZSBhbW91bnQgb2YgZGlmZmVyZW5jZXMgaW4gdGltZS1yZWxhdGVkIEFQSXMgLS0gZS5n LiBpcworICAidGltZXpvbmUiIGFuIGV4dGVybmFsIHZhcmlhYmxlIG9yIGEgZnVuY3Rpb247IHdo aWNoIGhlYWRlciBmaWxlKHMpIGRvIHdlCisgIGluY2x1ZGUsIGV0YyBldGMgZXRjLiAgSXQncyBh IG1ham9yIHByb2plY3QuCisqLworICAgIGludCB4OworICAgIHggPSBjbWN2dGRhdGUoIiIsMSk7 CisKK0V2aWRlbnRseSB0aGlzIGNvZGUgaXMgbm90IHVzZWQgLS0gaWYgaXQgaXMsIGl0IG11c3Qg YmUgZml4ZWQgdG8gdXNlCituZXcgKGF1ZyAyMDAxKSBjbWN2dGRhdGUoKSBjYWxsaW5nIGNvbnZl bnRpb25zLgorCisgICAgaWYgKHggPCAwKQorICAgICAgcmV0dXJuKCIiKTsKKy8qICB5eXl5bW1k ZCBoaDptbTpzcyAqLworLyogIDAxMjM0NTY3ODkwMTIzNDU2ICovCisgICAgbm93c3RyWzBdICA9 ICdYJzsgICAgICAgICAgICAgICAgICAgLyogMXN0IGxldHRlciBvZiBkYXkgKi8KKyAgICBub3dz dHJbMV0gID0gJ3gnOyAgICAgICAgICAgICAgICAgICAvKiAybmQgbGV0dGVyIG9mIGRheSAqLwor ICAgIG5vd3N0clsyXSAgPSAneCc7ICAgICAgICAgICAgICAgICAgIC8qIDNyZCBsZXR0ZXIgb2Yg ZGF5ICovCisgICAgbm93c3RyWzNdICA9ICcsJzsKKyAgICBub3dzdHJbNF0gID0gJyAnOworICAg IG5vd3N0cls1XSAgPSBjbWRhdGVbNl07CisgICAgbm93c3RyWzZdICA9IGNtZGF0ZVs3XTsKKyAg ICBub3dzdHJbN10gID0gJyAnOworICAgIG5vd3N0cls4XSAgPSAnICc7ICAgICAgICAgICAgICAg ICAgIC8qIGZpcnN0IGxldHRlciBvZiBtb250aCAqLworICAgIG5vd3N0cls5XSAgPSAnICc7ICAg ICAgICAgICAgICAgICAgIC8qIHNlY29uZCBsZXR0ZXIgb2YgbW9udGggKi8KKyAgICBub3dzdHJb MTBdID0gJyAnOyAgICAgICAgICAgICAgICAgICAvKiB0aGlyZCBsZXR0ZXIgb2YgbW9udGggKi8K KyAgICBub3dzdHJbMTFdID0gJyAnOworICAgIG5vd3N0clsxMl0gPSBjbWRhdGVbMF07CisgICAg bm93c3RyWzEzXSA9IGNtZGF0ZVsxXTsKKyAgICBub3dzdHJbMTRdID0gY21kYXRlWzJdOworICAg IG5vd3N0clsxNV0gPSBjbWRhdGVbM107CisgICAgbm93c3RyWzE2XSA9ICcgJzsKKyAgICBub3dz dHJbMTddID0gY21kYXRlWzldOworICAgIG5vd3N0clsxOF0gPSBjbWRhdGVbMTBdOworICAgIG5v d3N0clsxOV0gPSBjbWRhdGVbMTFdOworICAgIG5vd3N0clsyMF0gPSBjbWRhdGVbMTJdOworICAg IG5vd3N0clsyMV0gPSBjbWRhdGVbMTNdOworICAgIG5vd3N0clsyMl0gPSBjbWRhdGVbMTRdOwor ICAgIG5vd3N0clsyM10gPSBjbWRhdGVbMTVdOworICAgIG5vd3N0clsyNF0gPSBjbWRhdGVbMTZd OworICAgIG5vd3N0clsyNV0gPSAnICc7CisgICAgbm93c3RyWzI2XSA9ICdHJzsKKyAgICBub3dz dHJbMjddID0gJ00nOworICAgIG5vd3N0clsyOF0gPSAnVCc7CisgICAgbm93c3RyWzI5XSA9ICdc MCc7CisjZW5kaWYgLyogQ01EQVRFMlRNICovCisgICAgcmV0dXJuKG5vd3N0cik7Cit9CisKKyNp Zm5kZWYgT1MyCisjaWZuZGVmIENLX0FVVEhFTlRJQ0FUSU9OCisvKiBmcm9tIGNrdXVzci5oLCB3 aGljaCB0aGlzIG1vZHVsZSBub3JtYWxseSBkb2Vzbid0IGluY2x1ZGUgKi8KK19QUk9UT1RZUCgg aW50IGRjbGFycmF5LCAoY2hhciwgaW50KSApOworI2VuZGlmIC8qIENLX0FVVEhFTlRJQ0FUSU9O ICovCisjZW5kaWYgLyogT1MyICovCisvKgorICBBc3NpZ24gaHR0cCByZXNwb25zZSBwYWlycyB0 byBnaXZlbiBhcnJheS4KKyAgRm9yIGJlc3QgcmVzdWx0cywgcmVzcG9uc2UgcGFpcnMgc2hvdWxk IGNvbnRhaW4gbm8gc3BhY2VzLgorCisgIENhbGwgd2l0aDoKKyAgICByZXNwICA9ICBwb2ludGVy IHRvIHJlc3BvbnNlIGxpc3QuCisgICAgbiAgICAgPSAgc2l6ZSBvZiByZXNwb25zZSBsaXN0Lgor ICAgIGFycmF5ID0gIGFycmF5IGxldHRlci4KKyAgUmV0dXJuczoKKyAgICAwIG9uIGZhaWx1cmUu CisgICAgPj0gMSwgc2l6ZSBvZiBhcnJheSwgb24gc3VjY2Vzcy4KKyovCitzdGF0aWMgaW50Cisj aWZkZWYgQ0tfQU5TSUMKK2h0dHBfbWthcnJheShjaGFyICoqIHJlc3AsIGludCBuLCBjaGFyIGFy cmF5KQorI2Vsc2UKK2h0dHBfbWthcnJheShyZXNwLCBuLCBhcnJheSkgY2hhciAqKiByZXNwOyBp bnQgbjsgY2hhciBhcnJheTsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworI2lmbmRlZiBOT1NQ TAorICAgIGludCBpLCB4OworICAgIGNoYXIgKiogYXA7CisgICAgZXh0ZXJuIGNoYXIgKiogYV9w dHJbXTsKKyAgICBleHRlcm4gaW50IGFfZGltW107CisKKyAgICBpZiAoIWFycmF5IHx8IG4gPD0g MCkKKyAgICAgIHJldHVybigwKTsKKyAgICBpZiAoKHggPSBkY2xhcnJheShhcnJheSxuKSkgPCAw KSB7CisgICAgICAgIHByaW50ZigiP0FycmF5IGRlY2xhcmF0aW9uIGZhaWx1cmVcbiIpOworICAg ICAgICByZXR1cm4oLTkpOworICAgIH0KKyAgICAvKiBOb3RlOiBhcmd1bWVudCBhcnJheSBpcyAw LWJhc2VkIGJ1dCBLZXJtaXQgYXJyYXkgaXMgMS1iYXNlZCAqLworICAgIGFwID0gYV9wdHJbeF07 CisgICAgYXBbMF0gPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHRoIGVsZW1lbnQg aXMgZW1wdHkgKi8KKyAgICBmb3IgKGkgPSAxOyBpIDw9IG47IGkrKykgeworICAgICAgICBhcFtp XSA9IHJlc3BbaS0xXTsgICAgICAgICAgICAgIC8qIElmIHJlc3AgZWxlbWVudHMgd2VyZSBtYWxs b2MnZCAqLworICAgICAgICByZXNwW2ktMV0gPSBOVUxMOworICAgIH0KKyAgICBhX2RpbVt4XSA9 IG47CisgICAgcmV0dXJuKG4pOworI2Vsc2UKKyAgICByZXR1cm4oMCk7CisjZW5kaWYgLyogTk9T UEwgKi8KK30KKworI2RlZmluZSBIVFRQSEVBRENOVCA2NAoraW50CitodHRwX2dldF9jaHVua19s ZW4oKQoreworICAgIGludCBsZW4gPSAwOworICAgIGludCBpID0gMCwgaiA9IC0xOworICAgIGNo YXIgYnVmWzI0XTsKKyAgICBpbnQgY2g7CisKKyAgICB3aGlsZSAoKGNoID0gaHR0cF9pbmMoMCkp ID49IDAgJiYgaSA8IDI0KSB7CisgICAgICAgIGJ1ZltpXSA9IGNoOworICAgICAgICBpZiAoIGJ1 ZltpXSA9PSAnOycgKSAgICAgICAgICAgIC8qIEZpbmQgY2h1bmstZXh0ZW5zaW9uIChpZiBhbnkp ICovCisgICAgICAgICAgICBqID0gaTsKKyAgICAgICAgaWYgKCBidWZbaV0gPT0gMTAgKSB7ICAg ICAgICAgICAvKiBmb3VuZCBlbmQgb2YgbGluZSAqLworICAgICAgICAgICAgaWYgKGkgPiAwICYm IGJ1ZltpLTFdID09IDEzKQorICAgICAgICAgICAgICAgIGktLTsKKyAgICAgICAgICAgIGJ1Zltp XSA9ICdcMCc7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpKys7Cisg ICAgfQorICAgIGlmICggaSA8IDI0ICkgeyAgICAgICAgICAgICAgICAgICAgIC8qIGJ1ZiBub3cg Y29udGFpbnMgbGVuIGluIEhleCAqLworICAgICAgICBsZW4gPSBoZXh0b3Vsb25nKGJ1ZiwgaiA9 PSAtMSA/IGkgOiBqLTEpOworICAgIH0KKworICAgIHJldHVybihsZW4pOworfQorCitpbnQKK2h0 dHBfaXNjb25uZWN0ZWQoKQoreworICAgIHJldHVybihodHRwZmQgIT0gLTEpOworfQorCitjaGFy ICoKK2h0dHBfaG9zdCgpCit7CisgICAgcmV0dXJuKGh0dHBmZCAhPSAtMSA/IGh0dHBfaG9zdF9w b3J0IDogIiIpOworfQorCitjaGFyICoKK2h0dHBfc2VjdXJpdHkoKQoreworICAgIGlmICggaHR0 cGZkID09IC0xICkKKyAgICAgICAgcmV0dXJuKCJOVUxMIik7CisjaWZkZWYgQ0tfU1NMCisgICAg aWYgKHRsc19odHRwX2FjdGl2ZV9mbGFnKSB7CisgICAgICAgIFNTTF9DSVBIRVIgKiBjaXBoZXI7 CisgICAgICAgIGNvbnN0IGNoYXIgKmNpcGhlcl9saXN0OworICAgICAgICBzdGF0aWMgY2hhciBi dWZbMTI4XTsKKyAgICAgICAgYnVmWzBdID0gTlVMOworICAgICAgICBjaXBoZXIgPSBTU0xfZ2V0 X2N1cnJlbnRfY2lwaGVyKHRsc19odHRwX2Nvbik7CisgICAgICAgIGNpcGhlcl9saXN0ID0gU1NM X0NJUEhFUl9nZXRfbmFtZShjaXBoZXIpOworICAgICAgICBTU0xfQ0lQSEVSX2Rlc2NyaXB0aW9u KGNpcGhlcixidWYsc2l6ZW9mKGJ1ZikpOworICAgICAgICByZXR1cm4oYnVmKTsKKyAgICB9Cisj ZW5kaWYgLyogQ0tfU1NMICovCisgICAgcmV0dXJuKCJOVUxMIik7Cit9CisKK2ludAoraHR0cF9y ZW9wZW4oKQoreworICAgIGludCByYyA9IDA7CisgICAgY2hhciAqIHMgPSBOVUxMOyAgICAgICAg ICAgICAgICAgICAgLyogc3RyZHVwIGlzIG5vdCBwb3J0YWJsZSAqLworICAgIGlmICggdGNwX2h0 dHBfcHJveHkgKSB7CisgICAgICAgIGNoYXIgKiBwOworICAgICAgICBtYWtlc3RyKCZzLChjaGFy ICopaHR0cF9ob3N0X3BvcnQpOworICAgICAgICBwID0gczsKKyAgICAgICAgd2hpbGUgKCpwICE9 ICdcMCcgJiYgKnAgIT0gJzonKSBwKys7IC8qIExvb2sgZm9yIGNvbG9uICovCisgICAgICAgIGlm ICgqcCA9PSAnOicpIHsgICAgICAgICAgICAgICAgICAgICAvKiBIYXZlIGEgY29sb24gKi8KKyAg ICAgICAgICAgICpwKysgPSAnXDAnOyAgICAgICAgICAgICAgICAgICAgIC8qIEdldCBzZXJ2aWNl IG5hbWUgb3IgbnVtYmVyICovCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwPSJodHRw IjsKKyAgICAgICAgfQorICAgICAgICByYyA9IGh0dHBfb3BlbihzLHAsaHR0cF9zc2wsTlVMTCww LGh0dHBfYWdlbnQpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1ha2VzdHIoJnMsKGNoYXIgKilo dHRwX2lwKTsKKyAgICAgICAgcmMgPSBodHRwX29wZW4ocyxja3VpdG9hKGh0dHBfcG9ydCksaHR0 cF9zc2wsTlVMTCwwLGh0dHBfYWdlbnQpOworICAgIH0KKyAgICBmcmVlKHMpOworICAgIHJldHVy bihyYyk7Cit9CisKKworaW50CisjaWZkZWYgQ0tfQU5TSUMKK2h0dHBfb3BlbihjaGFyICogaG9z dG5hbWUsIGNoYXIgKiBzdmNuYW1lLCBpbnQgdXNlX3NzbCwgY2hhciAqIHJkbnNfbmFtZSwKKyAg ICAgICAgICBpbnQgcmRuc19sZW4sIGNoYXIgKiBhZ2VudCkKKyNlbHNlIC8qIENLX0FOU0lDICov CitodHRwX29wZW4oaG9zdG5hbWUsIHN2Y25hbWUsIHVzZV9zc2wsIHJkbnNfbmFtZSwgcmRuc19s ZW4sIGFnZW50KQorICAgIGNoYXIgKiBob3N0bmFtZTsKKyAgICBjaGFyICogc3ZjbmFtZTsKKyAg ICBpbnQgICAgdXNlX3NzbDsKKyAgICBjaGFyICogcmRuc19uYW1lOworICAgIGludCAgICByZG5z X2xlbjsKKyAgICBjaGFyICogYWdlbnQ7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAgICBj aGFyIG5hbWVjb3B5W05BTUVDUFlMXTsKKyAgICBjaGFyICpwOworICAgIGludCBpLCB4LCBkbnMg PSAwOworI2lmZGVmIFRDUFNPQ0tFVAorICAgIGludCBpc2Nvbm5lY3QgPSAwOworI2lmZGVmIFNP X09PQklOTElORQorICAgIGludCBvbiA9IDE7CisjZW5kaWYgLyogU09fT09CSU5MSU5FICovCisg ICAgc3RydWN0IHNlcnZlbnQgKnNlcnZpY2U9TlVMTDsKKyAgICBzdHJ1Y3QgaG9zdGVudCAqaG9z dD1OVUxMOworICAgIHN0cnVjdCBzb2NrYWRkcl9pbiByX2FkZHI7CisgICAgc3RydWN0IHNvY2th ZGRyX2luIHNpbjsKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gbF9hZGRyOworICAgIEdTT0NLTkFN RV9UIGxfc2xlbjsKKyNpZmRlZiBFWENFTEFOCisgICAgc3RydWN0IHNvY2thZGRyX2luIHNlbmRf c29ja2V0OworI2VuZGlmIC8qIEVYQ0VMQU4gKi8KKworI2lmZGVmIElOQUREUlgKKy8qIGluZXRf YWRkcigpIGlzIG9mIHR5cGUgc3RydWN0IGluX2FkZHIgKi8KKyNpZmRlZiBkYXRhZ2VuZXJhbAor ICAgIGV4dGVybiBzdHJ1Y3QgaW5fYWRkciBpbmV0X2FkZHIoKTsKKyNlbHNlCisjaWZkZWYgSFBV WDVXSU5UQ1AKKyAgICBleHRlcm4gc3RydWN0IGluX2FkZHIgaW5ldF9hZGRyKCk7CisjZW5kaWYg LyogSFBVWDVXSU5UQ1AgKi8KKyNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLworICAgIHN0cnVjdCBp bl9hZGRyIGlheDsKKyNlbHNlCisjaWZkZWYgSU5BRERSX05PTkUKKyAgICBzdHJ1Y3QgaW5fYWRk ciBpYXg7CisjZWxzZSAvKiBJTkFERFJfTk9ORSAqLworICAgIGxvbmcgaWF4OworI2VuZGlmIC8q IElOQUREUl9OT05FICovCisjZW5kaWYgLyogSU5BRERSWCAqLworCisgICAgaWYgKCByZG5zX25h bWUgPT0gTlVMTCB8fCByZG5zX2xlbiA8IDAgKQorICAgICAgICByZG5zX2xlbiA9IDA7CisKKyAg ICAqaHR0cF9pcCA9ICdcMCc7ICAgICAgICAgICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSBJUCBh ZGRyZXNzIHN0cmluZyAqLworICAgIG5hbWVjb3B5WzBdID0gJ1wwJzsKKworI2lmZGVmIERFQlVH CisgICAgaWYgKGRlYmxvZykgeworICAgICAgICBkZWJ1ZyhGMTEwLCJodHRwX29wZW4gaG9zdG5h bWUiLGhvc3RuYW1lLDApOworICAgICAgICBkZWJ1ZyhGMTEwLCJodHRwX29wZW4gc3ZjbmFtZSIs c3ZjbmFtZSwwKTsKKyAgICB9CisjZW5kaWYgLyogREVCVUcgKi8KKyAgICBpZiAoIWhvc3RuYW1l KSBob3N0bmFtZSA9ICIiOworICAgIGlmICghc3ZjbmFtZSkgc3ZjbmFtZSA9ICIiOworICAgIGlm ICghKmhvc3RuYW1lIHx8ICEqc3ZjbmFtZSkgcmV0dXJuKC0xKTsKKworICAgIAorICAgIHNlcnZp Y2UgPSBja2dldHNlcnZpY2UoaG9zdG5hbWUsc3ZjbmFtZSxodHRwX2lwLDIwKTsKKworICAgIGlm IChzZXJ2aWNlID09IE5VTEwpIHsKKyAgICAgICAgaWYgKCAhcXVpZXQgKQorICAgICAgICAgICAg cHJpbnRmKCI/SW52YWxpZCBzZXJ2aWNlOiAlc1xyXG4iLHN2Y25hbWUpOworICAgICAgICByZXR1 cm4oLTEpOworICAgIH0KKworICAgIC8qIEZvciBIVFRQIGNvbm5lY3Rpb25zIHdlIG11c3QgcHJl c2VydmUgdGhlIG9yaWdpbmFsIGhvc3RuYW1lIGFuZCAqLworICAgIC8qIHNlcnZpY2UgcmVxdWVz dGVkIHNvIHdlIGNhbiBpbmNsdWRlIHRoZW0gaW4gdGhlIEhvc3QgaGVhZGVyLiAgICAqLworICAg IGNrbWFrbXNnKGh0dHBfaG9zdF9wb3J0LHNpemVvZihodHRwX2hvc3RfcG9ydCksaG9zdG5hbWUs IjoiLAorICAgICAgICAgICAgICBja3VpdG9hKG50b2hzKHNlcnZpY2UtPnNfcG9ydCkpLE5VTEwp OworICAgIGh0dHBfcG9ydCA9IG50b2hzKHNlcnZpY2UtPnNfcG9ydCk7CisgICAgaHR0cF9zc2wg PSB1c2Vfc3NsOworICAgIGRlYnVnKEYxMTEsImh0dHBfb3BlbiIsaHR0cF9ob3N0X3BvcnQsaHR0 cF9wb3J0KTsKKworICAgIC8qICdodHRwX2lwJyBjb250YWlucyB0aGUgSVAgYWRkcmVzcyB0byB3 aGljaCB3ZSB3YW50IHRvIGNvbm5lY3QgICAgICAgICovCisgICAgLyogJ3N2Y25hbScgICBjb250 YWlucyB0aGUgc2VydmljZSBuYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8K KyAgICAvKiAnc2VydmljZS0+c19wb3J0JyBjb250YWlucyB0aGUgcG9ydCBudW1iZXIgaW4gbmV0 d29yayBieXRlIG9yZGVyICAgICAqLworCisgICAgLyogSWYgd2UgYXJlIHVzaW5nIGFuIGh0dHAg cHJveHksIHdlIG5lZWQgdG8gY3JlYXRlIGEgYnVmZmVyIGNvbnRhaW5pbmcgKi8KKyAgICAvKiAg IGhvc3RuYW1lOnBvcnQtbnVtYmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAqLworICAgIC8qIHRvIHBhc3MgdG8gdGhlIGh0dHBfY29ubmVjdCgpIGZ1bmN0 aW9uLiAgVGhlbiB3ZSBuZWVkIHRvIHJlcGxhY2UgICAgICovCisgICAgLyogJ25hbWVjb3B5JyB3 aXRoIHRoZSBuYW1lIG9mIHRoZSBwcm94eSBzZXJ2ZXIgYW5kIHRoZSBzZXJ2aWNlLT5zX3BvcnQg Ki8KKyAgICAvKiB3aXRoIHRoZSBwb3J0IG51bWJlciBvZiB0aGUgcHJveHkgKGRlZmF1bHQgcG9y dCA4MCkuICAgICAgICAgICAgICAgICAqLworCisgICAgaWYgKCB0Y3BfaHR0cF9wcm94eSApIHsK KworICAgICAgICBja21ha21zZyhwcm94eWNvcHksc2l6ZW9mKHByb3h5Y29weSksaG9zdG5hbWUs IjoiLAorICAgICAgICAgICAgICAgICBja3VpdG9hKG50b2hzKHNlcnZpY2UtPnNfcG9ydCkpLE5V TEwpOworICAgICAgICBja3N0cm5jcHkobmFtZWNvcHksdGNwX2h0dHBfcHJveHksTkFNRUNQWUwp OworCisgICAgICAgIHAgPSBuYW1lY29weTsgICAgICAgICAgICAgICAgICAgICAgIC8qIFdhcyBh IHNlcnZpY2UgcmVxdWVzdGVkPyAqLworICAgICAgICB3aGlsZSAoKnAgIT0gJ1wwJyAmJiAqcCAh PSAnOicpIHArKzsgLyogTG9vayBmb3IgY29sb24gKi8KKyAgICAgICAgaWYgKCpwID09ICc6Jykg eyAgICAgICAgICAgICAgICAgICAgLyogSGF2ZSBhIGNvbG9uICovCisgICAgICAgICAgICBkZWJ1 ZyhGMTEwLCJodHRwX29wZW4gbmFtZSBoYXMgY29sb24iLG5hbWVjb3B5LDApOworICAgICAgICAg ICAgKnArKyA9ICdcMCc7ICAgICAgICAgICAgICAgICAgICAvKiBHZXQgc2VydmljZSBuYW1lIG9y IG51bWJlciAqLworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3RyY3B5KCsrcCwiaHR0 cCIpOworICAgICAgICB9CisKKyAgICAgICAgc2VydmljZSA9IGNrZ2V0c2VydmljZShuYW1lY29w eSxwLGh0dHBfaXAsMjApOworICAgICAgICBpZiAoIXNlcnZpY2UpIHsKKyAgICAgICAgICAgIGZw cmludGYoc3RkZXJyLCAiQ2FuJ3QgZmluZCBwb3J0IGZvciBzZXJ2aWNlICVzXG4iLCBwKTsKKyNp ZmRlZiBUR1ZPUldJTgorICAgICAgICAgICAgZGVidWcoRjEwMSwiaHR0cF9vcGVuIGNhbid0IGdl dCBzZXJ2aWNlIGZvciBwcm94eSIsIiIsc29ja2V0X2Vycm5vKTsKKyNlbHNlCisgICAgICAgICAg ICBkZWJ1ZyhGMTAxLCJodHRwX29wZW4gY2FuJ3QgZ2V0IHNlcnZpY2UgZm9yIHByb3h5IiwiIixl cnJubyk7CisjZW5kaWYgLyogVEdWT1JXSU4gKi8KKyAgICAgICAgICAgIGVycm5vID0gMDsgICAg ICAgICAgICAgICAgICAvKiAocmF0aGVyIHRoYW4gbWlzbGVhZCkgKi8KKyAgICAgICAgICAgIHJl dHVybigtMSk7CisgICAgICAgIH0KKworICAgICAgICAvKiBjb3B5IHRoZSBwcm94eW5hbWUgYW5k IHJlbW92ZSB0aGUgc2VydmljZSBpZiBhbnkgc28gd2UgY2FuIHVzZSAKKyAgICAgICAgICogaXQg YXMgdGhlIGhvc3RuYW1lIAorICAgICAgICAgKi8KKyAgICAgICAgY2tzdHJuY3B5KG5hbWVjb3B5 LHRjcF9odHRwX3Byb3h5LE5BTUVDUFlMKTsKKyAgICAgICAgcCA9IG5hbWVjb3B5OyAgICAgICAg ICAgICAgICAgICAgICAgLyogV2FzIGEgc2VydmljZSByZXF1ZXN0ZWQ/ICovCisgICAgICAgIHdo aWxlICgqcCAhPSAnXDAnICYmICpwICE9ICc6JykgcCsrOyAvKiBMb29rIGZvciBjb2xvbiAqLwor ICAgICAgICBpZiAoKnAgPT0gJzonKSB7ICAgICAgICAgICAgICAgICAgICAvKiBIYXZlIGEgY29s b24gKi8KKyAgICAgICAgICAgICpwID0gJ1wwJzsgICAgICAgICAgICAgICAgICAgICAgLyogdGVy bWluYXRlIHN0cmluZyAqLworICAgICAgICB9ICAgICAgICAKKyAgICAgICAgaG9zdG5hbWUgPSBu YW1lY29weTsgICAgICAgICAgICAgICAgLyogdXNlIHByb3h5IGFzIGhvc3RuYW1lICovCisgICAg fQorCisgICAgLyogU2V0IHVwIHNvY2tldCBzdHJ1Y3R1cmUgYW5kIGdldCBob3N0IGFkZHJlc3Mg Ki8KKyAgICBiemVybygoY2hhciAqKSZyX2FkZHIsIHNpemVvZihyX2FkZHIpKTsKKyAgICBkZWJ1 ZyhGMTAwLCJodHRwX29wZW4gYnplcm8gb2siLCIiLDApOworCisjaWZkZWYgSU5BRERSX05PTkUK KyAgICBkZWJ1ZyhGMTAxLCJodHRwX29wZW4gSU5BRERSX05PTkUgZGVmaW5lZCIsIiIsSU5BRERS X05PTkUpOworI2Vsc2UgLyogSU5BRERSX05PTkUgKi8KKyAgICBkZWJ1ZyhGMTAwLCJodHRwX29w ZW4gSU5BRERSX05PTkUgbm90IGRlZmluZWQiLCIiLDApOworI2VuZGlmIC8qIElOQUREUl9OT05F ICovCisjaWZkZWYgSU5BRERSWAorICAgIGRlYnVnKEYxMDAsImh0dHBfb3BlbiBJTkFERFJYIGRl ZmluZWQiLCIiLDApOworI2Vsc2UgLyogSU5BRERSWCAqLworICAgIGRlYnVnKEYxMDAsImh0dHBf b3BlbiBJTkFERFJYIG5vdCBkZWZpbmVkIiwiIiwwKTsKKyNlbmRpZiAvKiBJTkFERFJYICovCisK KyNpZm5kZWYgTk9NSEhPU1QKKyNpZmRlZiBJTkFERFJYCisgICAgaWF4ID0gaW5ldF9hZGRyKGh0 dHBfaXBbMF0/aHR0cF9pcDpob3N0bmFtZSk7CisgICAgZGVidWcoRjExMSwiaHR0cF9vcGVuIGlu ZXRfYWRkciIsaHR0cF9pcFswXT9odHRwX2lwOmhvc3RuYW1lLGlheC5zX2FkZHIpOworI2Vsc2Ug LyogSU5BRERSWCAqLworI2lmZGVmIElOQUREUl9OT05FCisgICAgaWF4LnNfYWRkciA9IGluZXRf YWRkcihodHRwX2lwWzBdP2h0dHBfaXA6aG9zdG5hbWUpOworICAgIGRlYnVnKEYxMTEsImh0dHBf b3BlbiBpbmV0X2FkZHIiLGh0dHBfaXBbMF0/aHR0cF9pcDpob3N0bmFtZSxpYXguc19hZGRyKTsK KyNlbHNlIC8qIElOQUREUl9OT05FICovCisjaWZuZGVmIGRhdGFnZW5lcmFsCisgICAgaWF4ID0g KHVuc2lnbmVkIGludCkgaW5ldF9hZGRyKGh0dHBfaXBbMF0/aHR0cF9pcDpob3N0bmFtZSk7Cisj ZWxzZQorICAgIGlheCA9IC0xTDsKKyNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLworICAgIGRlYnVn KEYxMTEsImh0dHBfb3BlbiBpbmV0X2FkZHIiLGh0dHBfaXBbMF0/aHR0cF9pcDpob3N0bmFtZSxp YXgpOworI2VuZGlmIC8qIElOQUREUl9OT05FICovCisjZW5kaWYgLyogSU5BRERSWCAqLworCisg ICAgZG5zID0gMDsKKyAgICBpZiAoCisjaWZkZWYgSU5BRERSX05PTkUKKy8qIFRoaXMgbWlnaHQg Z2l2ZSB3YXJuaW5ncyBvbiA2NC1iaXQgcGxhdGZvcm1zIGJ1dCB0aGV5IHNob3VsZCBiZSBoYXJt bGVzcyAqLworLyogYmVjYXVzZSBJTkFERFJfTk9ORSBzaG91bGQgYmUgYWxsIDEncyBhbnl3YXks IHRodXMgdGhlIE9SIHBhcnQgaXMgKi8KKy8qIHByb2JhYmx5IHN1cGVyZmx1b3VzIC0tIG5vdCBz dXJlIHdoeSBpdCdzIGV2ZW4gdGhlcmUsIG1heWJlIGl0IHNob3VsZCBiZSAqLworLyogcmVtb3Zl ZC4gKi8KKyAgICAgICAgaWF4LnNfYWRkciA9PSBJTkFERFJfTk9ORSAvKiB8fCBpYXguc19hZGRy ID09ICh1bnNpZ25lZCBsb25nKSAtMUwgKi8KKyNlbHNlIC8qIElOQUREUl9OT05FICovCisgICAg ICAgIGlheCA9PSAtMQorI2VuZGlmIC8qIElOQUREUl9OT05FICovCisgICAgICAgICkgeworICAg ICAgICBpZiAoIXF1aWV0KSB7CisgICAgICAgICAgICBwcmludGYoIiBETlMgTG9va3VwLi4uICIp OworICAgICAgICAgICAgZmZsdXNoKHN0ZG91dCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCho b3N0ID0gZ2V0aG9zdGJ5bmFtZShodHRwX2lwWzBdID8gaHR0cF9pcCA6IGhvc3RuYW1lKSkgIT0g TlVMTCkgeworICAgICAgICAgICAgZGVidWcoRjEwMCwiaHR0cF9vcGVuIGdldGhvc3RieW5hbWUg IT0gTlVMTCIsIiIsMCk7CisgICAgICAgICAgICBob3N0ID0gY2tfY29weWhvc3RlbnQoaG9zdCk7 CisgICAgICAgICAgICBkbnMgPSAxOyAgICAgICAgICAgICAgICAgICAgLyogUmVtZW1iZXIgd2Ug cGVyZm9ybWVkIGRucyBsb29rdXAgKi8KKyAgICAgICAgICAgIHJfYWRkci5zaW5fZmFtaWx5ID0g aG9zdC0+aF9hZGRydHlwZTsKKyAgICAgICAgICAgIGlmICh0Y3BfcmRucyAmJiBob3N0LT5oX25h bWUgJiYgaG9zdC0+aF9uYW1lWzBdICYmIChyZG5zX2xlbiA+IDApCisgICAgICAgICAgICAgICAg ICYmICh0Y3BfaHR0cF9wcm94eSA9PSBOVUxMKQorICAgICAgICAgICAgICAgICApCisgICAgICAg ICAgICAgICAgY2ttYWttc2cocmRuc19uYW1lLHJkbnNfbGVuLGhvc3QtPmhfbmFtZSwiOiIsc3Zj bmFtZSxOVUxMKTsKKworI2lmZGVmIEhBRERSTElTVAorI2lmZGVmIGhfYWRkcgorICAgICAgICAg ICAgLyogVGhpcyBpcyBmb3IgdHJ5aW5nIG11bHRpcGxlIElQIGFkZHJlc3NlcyAtIHNlZSA8bmV0 ZGIuaD4gKi8KKyAgICAgICAgICAgIGlmICghKGhvc3QtPmhfYWRkcl9saXN0KSkKKyAgICAgICAg ICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgICAgIGJjb3B5KGhvc3QtPmhfYWRkcl9saXN0WzBd LAorICAgICAgICAgICAgICAgICAgKGNhZGRyX3QpJnJfYWRkci5zaW5fYWRkciwKKyAgICAgICAg ICAgICAgICAgIGhvc3QtPmhfbGVuZ3RoCisgICAgICAgICAgICAgICAgICApOworI2Vsc2UKKyAg ICAgICAgICAgIGJjb3B5KGhvc3QtPmhfYWRkciwgKGNhZGRyX3QpJnJfYWRkci5zaW5fYWRkciwg aG9zdC0+aF9sZW5ndGgpOworI2VuZGlmIC8qIGhfYWRkciAqLworI2Vsc2UgIC8qIEhBRERSTElT VCAqLworICAgICAgICAgICAgYmNvcHkoaG9zdC0+aF9hZGRyLCAoY2FkZHJfdCkmcl9hZGRyLnNp bl9hZGRyLCBob3N0LT5oX2xlbmd0aCk7CisjZW5kaWYgLyogSEFERFJMSVNUICovCisjaWZkZWYg Q09NTUVOVAorI2lmbmRlZiBFWENFTEFOCisgICAgICAgICAgICBkZWJ1ZyhGMTExLCJCQ09QWSIs Imhvc3QtPmhfYWRkciIsaG9zdC0+aF9hZGRyKTsKKyNlbmRpZiAvKiBFWENFTEFOICovCisgICAg ICAgICAgICBkZWJ1ZyhGMTExLCJCQ09QWSIsIiAoY2FkZHJfdCkmcl9hZGRyLnNpbl9hZGRyIiwK KyAgICAgICAgICAgICAgICAgIChjYWRkcl90KSZyX2FkZHIuc2luX2FkZHIpOworICAgICAgICAg ICAgZGVidWcoRjExMSwiQkNPUFkiLCIgcl9hZGRyLnNpbl9hZGRyLnNfYWRkciIsCisgICAgICAg ICAgICAgICAgICByX2FkZHIuc2luX2FkZHIuc19hZGRyKTsKKyNlbmRpZgkvKiBDT01NRU5UICov CisgICAgICAgICAgICBkZWJ1ZyhGMTExLCJCQ09QWSIsImhvc3QtPmhfbGVuZ3RoIixob3N0LT5o X2xlbmd0aCk7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgLyogTk9NSEhPU1QgKi8KKworICAg IGlmICghZG5zKSB7CisjaWZkZWYgSU5BRERSWAorLyogaW5ldF9hZGRyKCkgaXMgb2YgdHlwZSBz dHJ1Y3QgaW5fYWRkciAqLworICAgICAgICBzdHJ1Y3QgaW5fYWRkciBpbmE7CisgICAgICAgIHVu c2lnbmVkIGxvbmcgdXU7CisgICAgICAgIGRlYnVnKEYxMDAsImh0dHBfb3BlbiBnZXRob3N0Ynlu YW1lID09IE5VTEw6IElOQUREUlgiLCIiLDApOworICAgICAgICBpbmEgPSBpbmV0X2FkZHIoaHR0 cF9pcFswXT9odHRwX2lwOmhvc3RuYW1lKTsKKyAgICAgICAgdXUgPSAqKHVuc2lnbmVkIGludCAq KSZpbmE7CisjZWxzZSAvKiBOb3QgSU5BRERSWCAqLworLyogaW5ldF9hZGRyKCkgaXMgdW5zaWdu ZWQgbG9uZyAqLworICAgICAgICB1bnNpZ25lZCBsb25nIHV1OworICAgICAgICBkZWJ1ZyhGMTAw LCJodHRwX29wZW4gZ2V0aG9zdGJ5bmFtZSA9PSBOVUxMOiBOb3QgSU5BRERSWCIsIiIsMCk7Cisg ICAgICAgIHV1ID0gaW5ldF9hZGRyKGh0dHBfaXBbMF0/aHR0cF9pcDpob3N0bmFtZSk7CisjZW5k aWYgLyogSU5BRERSWCAqLworICAgICAgICBkZWJ1ZyhGMTAxLCJodHRwX29wZW4gdXUiLCIiLHV1 KTsKKyAgICAgICAgaWYgKAorI2lmZGVmIElOQUREUl9OT05FCisgICAgICAgICAgICAhKHV1ID09 IElOQUREUl9OT05FIHx8IHV1ID09ICh1bnNpZ25lZCBpbnQpIC0xTCkKKyNlbHNlICAgLyogSU5B RERSX05PTkUgKi8KKyAgICAgICAgICAgIHV1ICE9ICgodW5zaWduZWQgbG9uZyktMSkKKyNlbmRp ZiAvKiBJTkFERFJfTk9ORSAqLworICAgICAgICAgICAgKSB7CisgICAgICAgICAgICByX2FkZHIu c2luX2FkZHIuc19hZGRyID0gdXU7CisgICAgICAgICAgICByX2FkZHIuc2luX2ZhbWlseSA9IEFG X0lORVQ7CisgICAgICAgIH0gZWxzZSB7CisjaWZkZWYgVk1TCisgICAgICAgICAgICBmcHJpbnRm KHN0ZG91dCwgIlxyXG4iKTsgICAgLyogY29tcGxldGUgYW55IHByZXZpb3VzIG1lc3NhZ2UgKi8K KyNlbmRpZiAvKiBWTVMgKi8KKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ2FuJ3QgZ2V0 IGFkZHJlc3MgZm9yICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgaHR0cF9pcFswXT9odHRw X2lwOmhvc3RuYW1lKTsKKyNpZmRlZiBUR1ZPUldJTgorICAgICAgICAgICAgZGVidWcoRjEwMSwi aHR0cF9vcGVuIGNhbid0IGdldCBhZGRyZXNzIiwiIixzb2NrZXRfZXJybm8pOworI2Vsc2UKKyAg ICAgICAgICAgIGRlYnVnKEYxMDEsImh0dHBfb3BlbiBjYW4ndCBnZXQgYWRkcmVzcyIsIiIsZXJy bm8pOworI2VuZGlmIC8qIFRHVk9SV0lOICovCisgICAgICAgICAgICBlcnJubyA9IDA7ICAgICAg ICAgICAgICAgICAgLyogUmF0aGVyIHRoYW4gbWlzbGVhZCAqLworICAgICAgICAgICAgcmV0dXJu KC0xKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIEdldCBhIGZpbGUgZGVzY3JpcHRvciBm b3IgdGhlIGNvbm5lY3Rpb24uICovCisKKyAgICByX2FkZHIuc2luX3BvcnQgPSBzZXJ2aWNlLT5z X3BvcnQ7CisgICAgY2tzdHJuY3B5KGh0dHBfaXAsKGNoYXIgKilpbmV0X250b2Eocl9hZGRyLnNp bl9hZGRyKSwyMCk7CisgICAgZGVidWcoRjExMCwiaHR0cF9vcGVuIHRyeWluZyIsaHR0cF9pcCww KTsKKyAgICBpZiAoIXF1aWV0ICYmICpodHRwX2lwKSB7CisgICAgICAgIHByaW50ZigiIFRyeWlu ZyAlcy4uLiAiLCBodHRwX2lwKTsKKyAgICAgICAgZmZsdXNoKHN0ZG91dCk7CisgICAgfQorCisg ICAgLyogTG9vcCB0byB0cnkgYWRkaXRpb25hbCBJUCBhZGRyZXNzZXMsIGlmIGFueS4gKi8KKwor ICAgIGRvIHsKKyNpZmRlZiBFWENFTEFOCisgICAgICAgIHNlbmRfc29ja2V0LnNpbl9mYW1pbHkg PSBBRl9JTkVUOworICAgICAgICBzZW5kX3NvY2tldC5zaW5fYWRkci5zX2FkZHIgPSAwOworICAg ICAgICBzZW5kX3NvY2tldC5zaW5fcG9ydCA9IDA7CisgICAgICAgIGlmICgoaHR0cGZkID0gc29j a2V0KFNPQ0tfU1RSRUFNLCAoc3RydWN0IHNvY2twcm90byAqKTAsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJnNlbmRfc29ja2V0LCBTT19SRVVTRUFERFIpKSA8IDApCisjZWxzZSAgLyog RVhDRUxBTiAqLworICAgICAgICBpZiAoKGh0dHBmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NU UkVBTSwgMCkpIDwgMCkKKyNlbmRpZiAvKiBFWENFTEFOICovCisgICAgICAgICAgICB7CisjaWZk ZWYgRVhDRUxBTgorICAgICAgICAgICAgICAgIGV4cGVycm9yKCJUQ1Agc29ja2V0IGVycm9yIik7 CisjZWxzZQorI2lmZGVmIFRHVk9SV0lOCisjaWZkZWYgT0xEX1RXRworICAgICAgICAgICAgICAg IGVycm5vID0gc29ja2V0X2Vycm5vOworI2VuZGlmIC8qIE9MRF9UV0cgKi8KKyAgICAgICAgICAg ICAgICBzb2NrZXRfcGVycm9yKCJUQ1Agc29ja2V0IGVycm9yIik7CisgICAgICAgICAgICAgICAg ZGVidWcoRjEwMSwiaHR0cF9vcGVuIHNvY2tldCBlcnJvciIsIiIsc29ja2V0X2Vycm5vKTsKKyNl bHNlCisgICAgICAgICAgICAgICAgcGVycm9yKCJUQ1Agc29ja2V0IGVycm9yIik7CisgICAgICAg ICAgICAgICAgZGVidWcoRjEwMSwiaHR0cF9vcGVuIHNvY2tldCBlcnJvciIsIiIsZXJybm8pOwor I2VuZGlmIC8qIFRHVk9SV0lOICovCisjZW5kaWYgLyogRVhDRUxBTiAqLworICAgICAgICAgICAg ICAgIHJldHVybiAoLTEpOworICAgICAgICAgICAgfQorICAgICAgICBlcnJubyA9IDA7CisKKyAg ICAgICAvKiBJZiBhIHNwZWNpZmljIFRDUCBhZGRyZXNzIG9uIHRoZSBsb2NhbCBob3N0IGlzIGRl c2lyZWQgd2UgKi8KKyAgICAgICAvKiBtdXN0IGJpbmQgaXQgdG8gdGhlIHNvY2tldC4gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNpZm5kZWYgZGF0YWdlbmVyYWwKKyAgICAgICAg IGlmICh0Y3BfYWRkcmVzcykgeworICAgICAgICAgICAgIGludCBzX2Vycm5vOworCisgICAgICAg ICAgICAgZGVidWcoRjExMCwiaHR0cF9vcGVuIGJpbmRpbmcgc29ja2V0IHRvIix0Y3BfYWRkcmVz cywwKTsKKyAgICAgICAgICAgICBiemVybygoY2hhciAqKSZzaW4sc2l6ZW9mKHNpbikpOworICAg ICAgICAgICAgIHNpbi5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyNpZmRlZiBJTkFERFJYCisgICAg ICAgICAgICAgaW5hZGRyeCA9IGluZXRfYWRkcih0Y3BfYWRkcmVzcyk7CisgICAgICAgICAgICAg c2luLnNpbl9hZGRyLnNfYWRkciA9ICoodW5zaWduZWQgbG9uZyAqKSZpbmFkZHJ4OworI2Vsc2UK KyAgICAgICAgICAgICBzaW4uc2luX2FkZHIuc19hZGRyID0gaW5ldF9hZGRyKHRjcF9hZGRyZXNz KTsKKyNlbmRpZiAvKiBJTkFERFJYICovCisgICAgICAgICAgICAgc2luLnNpbl9wb3J0ID0gMDsK KyAgICAgICAgICAgICBpZiAoYmluZChodHRwZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2luLCBz aXplb2Yoc2luKSkgPCAwKSB7CisgICAgICAgICAgICAgICAgIHNfZXJybm8gPSBzb2NrZXRfZXJy bm87IC8qIFNhdmUgZXJyb3IgY29kZSAqLworI2lmZGVmIFRDUElQTElCCisgICAgICAgICAgICAg ICAgIHNvY2tldF9jbG9zZShodHRwZmQpOworI2Vsc2UgLyogVENQSVBMSUIgKi8KKyAgICAgICAg ICAgICAgICAgY2xvc2UoaHR0cGZkKTsKKyNlbmRpZiAvKiBUQ1BJUExJQiAqLworICAgICAgICAg ICAgICAgICBodHRwZmQgPSAtMTsKKyAgICAgICAgICAgICAgICAgZXJybm8gPSBzX2Vycm5vOyAg ICAgICAvKiBhbmQgcmVwb3J0IHRoaXMgZXJyb3IgKi8KKyAgICAgICAgICAgICAgICAgZGVidWco RjEwMSwiaHR0cF9vcGVuIGJpbmQgZXJybm8iLCIiLGVycm5vKTsKKyAgICAgICAgICAgICAgICAg cmV0dXJuKC0xKTsKKyAgICAgICAgICAgICB9CisgICAgICAgICB9CisjZW5kaWYgLyogZGF0YWdl bmVyYWwgKi8KKworLyogTm93IGNvbm5lY3QgdG8gdGhlIHNvY2tldCBvbiB0aGUgb3RoZXIgZW5k LiAqLworCisjaWZkZWYgRVhDRUxBTgorICAgICAgICBpZiAoY29ubmVjdChodHRwZmQsICZyX2Fk ZHIpIDwgMCkKKyNlbHNlCisjaWZkZWYgTlQKKyAgICAgICAgICBXU0FTYWZlVG9DYW5jZWwgPSAx OworI2VuZGlmIC8qIE5UICovCisgICAgICAgIGlmIChjb25uZWN0KGh0dHBmZCwgKHN0cnVjdCBz b2NrYWRkciAqKSZyX2FkZHIsIHNpemVvZihyX2FkZHIpKSA8IDApCisjZW5kaWYgLyogRVhDRUxB TiAqLworICAgICAgICAgIHsKKyNpZmRlZiBOVAorICAgICAgICAgICAgICBXU0FTYWZlVG9DYW5j ZWwgPSAwOworI2VuZGlmIC8qIE5UICovCisjaWZkZWYgT1MyCisgICAgICAgICAgICAgIGkgPSBz b2NrZXRfZXJybm87CisjZWxzZSAvKiBPUzIgKi8KKyNpZmRlZiBUR1ZPUldJTgorICAgICAgICAg ICAgICBpID0gc29ja2V0X2Vycm5vOworI2Vsc2UKKyAgICAgICAgICAgICAgaSA9IGVycm5vOyAg ICAgICAgICAgICAgICAvKiBTYXZlIGVycm9yIGNvZGUgKi8KKyNlbmRpZiAvKiBUR1ZPUldJTiAq LworI2VuZGlmIC8qIE9TMiAqLworI2lmZGVmIEhBRERSTElTVAorI2lmZGVmIGhfYWRkcgorICAg ICAgICAgICAgICBpZiAoaG9zdCAmJiBob3N0LT5oX2FkZHJfbGlzdCAmJiBob3N0LT5oX2FkZHJf bGlzdFsxXSkgeworICAgICAgICAgICAgICAgICAgcGVycm9yKCIiKTsKKyAgICAgICAgICAgICAg ICAgIGhvc3QtPmhfYWRkcl9saXN0Kys7CisgICAgICAgICAgICAgICAgICBiY29weShob3N0LT5o X2FkZHJfbGlzdFswXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIChjYWRkcl90KSZyX2FkZHIu c2luX2FkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICBob3N0LT5oX2xlbmd0aCk7CisKKyAg ICAgICAgICAgICAgICAgIGNrc3RybmNweShodHRwX2lwLChjaGFyICopaW5ldF9udG9hKHJfYWRk ci5zaW5fYWRkciksMjApOworICAgICAgICAgICAgICAgICAgZGVidWcoRjExMCwiaHR0cF9vcGVu IGhfYWRkcl9saXN0IixodHRwX2lwLDApOworICAgICAgICAgICAgICAgICAgaWYgKCFxdWlldCAm JiAqaHR0cF9pcCkgeworICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiIFRyeWluZyAlcy4u LiAiLCBodHRwX2lwKTsKKyAgICAgICAgICAgICAgICAgICAgICBmZmx1c2goc3Rkb3V0KTsKKyAg ICAgICAgICAgICAgICAgIH0KKyNpZmRlZiBUQ1BJUExJQgorICAgICAgICAgICAgICAgICAgc29j a2V0X2Nsb3NlKGh0dHBmZCk7IC8qIENsb3NlIGl0LiAqLworI2Vsc2UKKyAgICAgICAgICAgICAg ICAgIGNsb3NlKGh0dHBmZCk7CisjZW5kaWYgLyogVENQSVBMSUIgKi8KKyAgICAgICAgICAgICAg ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICB9CisjZW5kaWYgLyogaF9hZGRyICovCisjZW5k aWYgIC8qIEhBRERSTElTVCAqLworICAgICAgICAgICAgICBodHRwX2Nsb3NlKCk7CisgICAgICAg ICAgICAgIGh0dHBmZCA9IC0xOworICAgICAgICAgICAgICBlcnJubyA9IGk7ICAgICAgICAgICAg ICAgIC8qIEFuZCByZXBvcnQgdGhpcyBlcnJvciAqLworI2lmZGVmIEVYQ0VMQU4KKyAgICAgICAg ICAgICAgaWYgKGVycm5vKSBleHBlcnJvcigiaHR0cF9vcGVuIGNvbm5lY3QiKTsKKyNlbHNlCisj aWZkZWYgVEdWT1JXSU4KKyAgICAgICAgICAgICAgZGVidWcoRjEwMSwiaHR0cF9vcGVuIGNvbm5l Y3QgZXJyb3IiLCIiLHNvY2tldF9lcnJubyk7CisgICAgICAgICAgICAgIC8qIGlmIChlcnJubykg c29ja2V0X3BlcnJvcigiaHR0cF9vcGVuIGNvbm5lY3QiKTsgKi8KKyNpZmRlZiBPTERfVFdHCisg ICAgICAgICAgICAgIGVycm5vID0gc29ja2V0X2Vycm5vOworI2VuZGlmIC8qIE9MRF9UV0cgKi8K KyAgICAgICAgICAgICAgaWYgKCFxdWlldCkKKyAgICAgICAgICAgICAgICBzb2NrZXRfcGVycm9y KCJodHRwX29wZW4gY29ubmVjdCIpOworI2Vsc2UgLyogVEdWT1JXSU4gKi8KKyAgICAgICAgICAg ICAgZGVidWcoRjEwMSwiaHR0cF9vcGVuIGNvbm5lY3QgZXJybm8iLCIiLGVycm5vKTsKKyNpZmRl ZiBWTVMKKyAgICAgICAgICAgICAgaWYgKCFxdWlldCkKKyAgICAgICAgICAgICAgICBwZXJyb3Io IlxyXG5GYWlsZWQiKTsKKyNlbHNlCisgICAgICAgICAgICAgIGlmICghcXVpZXQpCisgICAgICAg ICAgICAgICAgcGVycm9yKCJGYWlsZWQiKTsKKyNlbmRpZiAvKiBWTVMgKi8KKyNpZmRlZiBERUNf VENQSVAKKyAgICAgICAgICAgICAgaWYgKCFxdWlldCkKKyAgICAgICAgICAgICAgICBwZXJyb3Io Imh0dHBfb3BlbiBjb25uZWN0Iik7CisjZW5kaWYgLyogREVDX1RDUElQICovCisjaWZkZWYgQ01V X1RDUElQCisgICAgICAgICAgICAgIGlmICghcXVpZXQpCisgICAgICAgICAgICAgICAgcGVycm9y KCJodHRwX29wZW4gY29ubmVjdCIpOworI2VuZGlmIC8qIENNVV9UQ1BJUCAqLworI2VuZGlmIC8q IFRHVk9SV0lOICovCisjZW5kaWYgLyogRVhDRUxBTiAqLworICAgICAgICAgICAgICByZXR1cm4o LTEpOworICAgICAgICAgIH0KKyNpZmRlZiBOVAorICAgICAgICBXU0FTYWZlVG9DYW5jZWwgPSAw OworI2VuZGlmIC8qIE5UICovCisgICAgICAgIGlzY29ubmVjdCA9IDE7CisgICAgfSB3aGlsZSAo IWlzY29ubmVjdCk7CisKKyNpZmRlZiBOT05fQkxPQ0tfSU8KKyAgICBvbiA9IDE7CisgICAgeCA9 IHNvY2tldF9pb2N0bChodHRwZmQsRklPTkJJTywmb24pOworICAgIGRlYnVnKEYxMDEsImh0dHBf b3BlbiBGSU9OQklPIiwiIix4KTsKKyNlbmRpZiAvKiBOT05fQkxPQ0tfSU8gKi8KKworICAgIC8q IFdlIGhhdmUgc3VjY2VlZGVkIGluIGNvbm5lY3RpbmcgdG8gdGhlIEhUVFAgUFJPWFkuICBTbyBu b3cgd2UgICAqLworICAgIC8qIG5lZWQgdG8gYXR0ZW1wdCB0byBjb25uZWN0IHRocm91Z2ggdGhl IHByb3h5IHRvIHRoZSBhY3R1YWwgaG9zdCAqLworICAgIC8qIElmIHRoYXQgaXMgc3VjY2Vzc2Z1 bCwgd2UgaGF2ZSB0byBwcmV0ZW5kIHRoYXQgd2UgbWFkZSBhIGRpcmVjdCAqLworICAgIC8qIGNv bm5lY3Rpb24gdG8gdGhlIGFjdHVhbCBob3N0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAqLworCisgICAgaWYgKCB0Y3BfaHR0cF9wcm94eSApIHsKKyNpZmRlZiBPUzIKKyAgICAg ICAgaWYgKCFhZ2VudCkgCisJICBhZ2VudCA9ICJLZXJtaXQgOTUiOwkvKiBEZWZhdWx0IHVzZXIg YWdlbnQgKi8KKyNlbHNlCisgICAgICAgIGlmICghYWdlbnQpIAorCSAgYWdlbnQgPSAiQy1LZXJt aXQiOworI2VuZGlmIC8qIE9TMiAqLworCisgICAgICAgIGlmIChodHRwX2Nvbm5lY3QoaHR0cGZk LAorICAgICAgICAgICAgICAgICAgICAgICAgIHRjcF9odHRwX3Byb3h5X2FnZW50ID8gdGNwX2h0 dHBfcHJveHlfYWdlbnQgOiBhZ2VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAor ICAgICAgICAgICAgICAgICAgICAgICAgIHRjcF9odHRwX3Byb3h5X3VzZXIsCisgICAgICAgICAg ICAgICAgICAgICAgICAgdGNwX2h0dHBfcHJveHlfcHdkLAorICAgICAgICAgICAgICAgICAgICAg ICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgcHJveHljb3B5CisgICAgICAgICAgICAg ICAgICAgICAgICAgKSA8IDApIHsKKyAgICAgICAgICAgIGh0dHBfY2xvc2UoKTsKKyAgICAgICAg ICAgIHJldHVybigtMSk7CisgICAgICAgIH0KKyAgICB9CisKKyNpZmRlZiBTT19PT0JJTkxJTkUK KyAgICAvKiBTZWUgbm90ZSBvbiBTT19PT0JJTkxJTkUgaW4gbmV0b3BlbigpICovCisjaWZkZWYg ZGF0YWdlbmVyYWwKKyAgICBzZXRzb2Nrb3B0KGh0dHBmZCwgU09MX1NPQ0tFVCwgU09fT09CSU5M SU5FLChjaGFyICopICZvbiwgc2l6ZW9mIG9uKTsKKyNlbHNlCisjaWZkZWYgQlNENDMKKyAgICBz ZXRzb2Nrb3B0KGh0dHBmZCwgU09MX1NPQ0tFVCwgU09fT09CSU5MSU5FLChjaGFyICopICZvbiwg c2l6ZW9mIG9uKTsKKyNlbHNlCisjaWZkZWYgT1NGMQorICAgIHNldHNvY2tvcHQoaHR0cGZkLCBT T0xfU09DS0VULCBTT19PT0JJTkxJTkUsKGNoYXIgKikgJm9uLCBzaXplb2Ygb24pOworI2Vsc2UK KyNpZmRlZiBQT1NJWAorICAgIHNldHNvY2tvcHQoaHR0cGZkLCBTT0xfU09DS0VULCBTT19PT0JJ TkxJTkUsKGNoYXIgKikgJm9uLCBzaXplb2Ygb24pOworI2Vsc2UKKyNpZmRlZiBNT1RTVjg4UjQK KyAgICBzZXRzb2Nrb3B0KGh0dHBmZCwgU09MX1NPQ0tFVCwgU09fT09CSU5MSU5FLChjaGFyICop ICZvbiwgc2l6ZW9mIG9uKTsKKyNlbHNlCisjaWZkZWYgU09MQVJJUworLyoKKyAgTWF5YmUgdGhp cyBhcHBsaWVzIHRvIGFsbCBTVlI0IHZlcnNpb25zLCBidXQgdGhlIG90aGVyIChlbHNlKSB3YXkg aGFzIGJlZW4KKyAgY29tcGlsaW5nIGFuZCB3b3JraW5nIGZpbmUgb24gYWxsIHRoZSBvdGhlcnMs IHNvIGJlc3Qgbm90IHRvIGNoYW5nZSBpdC4KKyovCisgICAgc2V0c29ja29wdChodHRwZmQsIFNP TF9TT0NLRVQsIFNPX09PQklOTElORSwoY2hhciAqKSAmb24sIHNpemVvZiBvbik7CisjZWxzZQor I2lmZGVmIE9TSworICAgIHNldHNvY2tvcHQoaHR0cGZkLCBTT0xfU09DS0VULCBTT19PT0JJTkxJ TkUsKGNoYXIgKikgJm9uLCBzaXplb2Ygb24pOworI2Vsc2UKKyNpZmRlZiBPUzIKKyAgICB7Cisg ICAgICAgIGludCByYzsKKyAgICAgICAgcmMgPSBzZXRzb2Nrb3B0KGh0dHBmZCwKKyAgICAgICAg ICAgICAgICAgICAgICAgIFNPTF9TT0NLRVQsCisgICAgICAgICAgICAgICAgICAgICAgICBTT19P T0JJTkxJTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSAmb24sCisgICAgICAg ICAgICAgICAgICAgICAgICBzaXplb2Ygb24KKyAgICAgICAgICAgICAgICAgICAgICAgICk7Cisg ICAgICAgIGRlYnVnKEYxMTEsInNldHNvY2tvcHQgU09fT09CSU5MSU5FIixvbiA/ICJvbiIgOiAi b2ZmIiAscmMpOworICAgIH0KKyNlbHNlCisjaWZkZWYgVk1TIC8qIG9yLCBhdCBsZWFzdCwgVk1T IHdpdGggZ2NjICovCisgICAgc2V0c29ja29wdChodHRwZmQsIFNPTF9TT0NLRVQsIFNPX09PQklO TElORSwoY2hhciAqKSAmb24sIHNpemVvZiBvbik7CisjZWxzZQorI2lmZGVmIENMSVgKKyAgICBz ZXRzb2Nrb3B0KGh0dHBmZCwgU09MX1NPQ0tFVCwgU09fT09CSU5MSU5FLChjaGFyICopICZvbiwg c2l6ZW9mIG9uKTsKKyNlbHNlCisgICAgc2V0c29ja29wdChodHRwZmQsIFNPTF9TT0NLRVQsIFNP X09PQklOTElORSwgJm9uLCBzaXplb2Ygb24pOworI2VuZGlmIC8qIENMSVggKi8KKyNlbmRpZiAv KiBWTVMgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBPU0sgKi8KKyNlbmRpZiAvKiBT T0xBUklTICovCisjZW5kaWYgLyogTU9UU1Y4OFI0ICovCisjZW5kaWYgLyogUE9TSVggKi8KKyNl bmRpZiAvKiBCU0Q0MyAqLworI2VuZGlmIC8qIE9TRjEgKi8KKyNlbmRpZiAvKiBkYXRhZ2VuZXJh bCAqLworI2VuZGlmIC8qIFNPX09PQklOTElORSAqLworCisjaWZuZGVmIE5PVENQT1BUUworI2lm bmRlZiBkYXRhZ2VuZXJhbAorI2lmZGVmIFNPTF9TT0NLRVQKKyNpZmRlZiBUQ1BfTk9ERUxBWQor ICAgIG5vX2RlbGF5KHR0eWZkLHRjcF9ub2RlbGF5KTsKKyNlbmRpZiAvKiBUQ1BfTk9ERUxBWSAq LworI2lmZGVmIFNPX0tFRVBBTElWRQorICAgIGtlZXBhbGl2ZSh0dHlmZCx0Y3Bfa2VlcGFsaXZl KTsKKyNlbmRpZiAvKiBTT19LRUVQQUxJVkUgKi8KKyNpZmRlZiBTT19MSU5HRVIKKyAgICBja19s aW5nZXIodHR5ZmQsdGNwX2xpbmdlciwgdGNwX2xpbmdlcl90bW8pOworI2VuZGlmIC8qIFNPX0xJ TkdFUiAqLworI2lmZGVmIFNPX1NOREJVRgorICAgIHNlbmRidWYodHR5ZmQsdGNwX3NlbmRidWYp OworI2VuZGlmIC8qIFNPX1NOREJVRiAqLworI2lmZGVmIFNPX1JDVkJVRgorICAgIHJlY3ZidWYo dHR5ZmQsdGNwX3JlY3ZidWYpOworI2VuZGlmIC8qIFNPX1JDVkJVRiAqLworI2VuZGlmIC8qIFNP TF9TT0NLRVQgKi8KKyNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLworI2VuZGlmIC8qIE5PVENQT1BU UyAqLworCisjaWZuZGVmIGRhdGFnZW5lcmFsCisgICAgLyogRmluZCBvdXQgb3VyIG93biBJUCBh ZGRyZXNzLiAqLworICAgIC8qIFdlIG5lZWQgdGhlIGxfYWRkciBzdHJ1Y3R1cmUgZm9yIFtFXUtM T0dJTi4gKi8KKyAgICBsX3NsZW4gPSBzaXplb2YobF9hZGRyKTsKKyAgICBiemVybygoY2hhciAq KSZsX2FkZHIsIGxfc2xlbik7CisjaWZuZGVmIEVYQ0VMQU4KKyAgICBpZiAoIWdldHNvY2tuYW1l KGh0dHBmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZsX2FkZHIsICZsX3NsZW4pKSB7CisgICAgICAg IGNoYXIgKiBzID0gKGNoYXIgKilpbmV0X250b2EobF9hZGRyLnNpbl9hZGRyKTsKKyAgICAgICAg Y2tzdHJuY3B5KG15aXBhZGRyLCBzLCAyMCk7CisgICAgICAgIGRlYnVnKEYxMTAsImdldHNvY2tu YW1lIixteWlwYWRkciwwKTsKKyAgICB9CisjZW5kaWYgLyogRVhDRUxBTiAqLworI2VuZGlmIC8q IGRhdGFnZW5lcmFsICovCisKKy8qIFNlZSBub3RlIGluIG5ldG9wZW4oKSBvbiBSZXZlcnNlIERO UyBsb29rdXBzICovCisgICAgIGlmICh0Y3BfcmRucyA9PSBTRVRfT04pIHsKKyNpZmRlZiBOVAor ICAgICAgICBpZiAoaXNXaW45NSgpKQorICAgICAgICAgIHNsZWVwKDEpOworI2VuZGlmIC8qIE5U ICovCisgICAgICAgIGlmICghcXVpZXQpIHsKKyAgICAgICAgICAgIHByaW50ZigiIFJldmVyc2Ug RE5TIExvb2t1cC4uLiAiKTsKKyAgICAgICAgICAgIGZmbHVzaChzdGRvdXQpOworICAgICAgICB9 CisgICAgICAgIGlmIChob3N0ID0gZ2V0aG9zdGJ5YWRkcigoY2hhciAqKSZyX2FkZHIuc2luX2Fk ZHIsNCxQRl9JTkVUKSkgeworICAgICAgICAgICAgY2hhciAqIHM7CisgICAgICAgICAgICBob3N0 ID0gY2tfY29weWhvc3RlbnQoaG9zdCk7CisgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJodHRwX29w ZW4gZ2V0aG9zdGJ5bmFtZSAhPSBOVUxMIiwiIiwwKTsKKyAgICAgICAgICAgIGlmICghcXVpZXQp IHsKKyAgICAgICAgICAgICAgICBwcmludGYoIihPSylcbiIpOworICAgICAgICAgICAgICAgIGZm bHVzaChzdGRvdXQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcyA9IGhvc3QtPmhfbmFt ZTsKKyAgICAgICAgICAgIGlmICghcykgeyAgICAgICAgICAgICAgICAgICAvKiBUaGlzIGNhbiBo YXBwZW4uLi4gKi8KKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJodHRwX29wZW4gaG9zdC0+ aF9uYW1lIGlzIE5VTEwiLCIiLDApOworICAgICAgICAgICAgICAgIHMgPSAiIjsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgICAgIC8qIFNvbWV0aGluZyBpcyB3cm9uZyB3aXRoIGluZXRfbnRvYSgp IG9uIEhQVVggMTAueHggKi8KKyAgICAgICAgICAgIC8qIFRoZSBjb21waWxlciBzYXlzICJJbnRl Z3JhbCB2YWx1ZSBpbXBsaWNpdGx5IGNvbnZlcnRlZCB0byAqLworICAgICAgICAgICAgLyogcG9p bnRlciBpbiBhc3NpZ25tZW50LiIgIFRoZSBwcm90b3R5cGUgaXMgcmlnaHQgdGhlcmUgKi8KKyAg ICAgICAgICAgIC8qIGluIDxhcnBhL2luZXQuaD4gc28gd2hhdCdzIHRoZSBwcm9ibGVtPyAqLwor ICAgICAgICAgICAgLyogRGl0dG8gaW4gSFAtVVggNS54LCBidXQgbm90IDgueCBvciA5LnguLi4g Ki8KKyAgICAgICAgICAgIGlmICghKnMpIHsgICAgICAgICAgICAgICAgICAvKiBObyBuYW1lIHNv IHN1YnN0aXR1dGUgdGhlIGFkZHJlc3MgKi8KKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJo dHRwX29wZW4gaG9zdC0+aF9uYW1lIGlzIGVtcHR5IiwiIiwwKTsKKyAgICAgICAgICAgICAgICBz ID0gaW5ldF9udG9hKHJfYWRkci5zaW5fYWRkcik7IC8qIENvbnZlcnQgYWRkcmVzcyB0byBzdHJp bmcgKi8KKyAgICAgICAgICAgICAgICBpZiAoIXMpICAgICAgICAgICAgICAgICAvKiBUcnVzdCBO byAxICovCisgICAgICAgICAgICAgICAgICBzID0gIiI7CisgICAgICAgICAgICAgICAgaWYgKCpz KSB7ICAgICAgICAgICAgICAgLyogSWYgaXQgd29ya2VkLCB1c2UgdGhpcyBzdHJpbmcgKi8KKyAg ICAgICAgICAgICAgICAgICAgY2tzdHJuY3B5KGh0dHBfaXAscywyMCk7CisgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICAgIHMgPSBodHRwX2lwOyAgICAgICAgICAgICAvKiBPdGhlcndp c2Ugc3RpY2sgd2l0aCB0aGUgSVAgKi8KKyAgICAgICAgICAgICAgICBpZiAoISpzKSAgICAgICAg ICAgICAgICAgLyogb3IgZmFpbGluZyB0aGF0ICovCisgICAgICAgICAgICAgICAgICBzID0gaHR0 cF9ob3N0X3BvcnQ7ICAgIC8qIHRoZSBuYW1lIHdlIHdlcmUgY2FsbGVkIHdpdGguICovCisgICAg ICAgICAgICB9CisgICAgICAgICAgICBpZiAoKnMpICAgICAgICAgICAgICAgICAgICAgLyogcmV0 dXJuIHRoZSByZG5zIG5hbWUgKi8KKyAgICAgICAgICAgICAgICBja21ha21zZyhyZG5zX25hbWUs cmRuc19sZW4scywiOiIsc3ZjbmFtZSxOVUxMKTsKKworICAgICAgICAgICAgaWYgKCFxdWlldCAm JiAqcworI2lmbmRlZiBOT0lDUAorICAgICAgICAgICAgICAgICYmICFkb2NvbngKKyNlbmRpZiAv KiBOT0lDUCAqLworICAgICAgICAgICAgICAgICkgeworICAgICAgICAgICAgICAgIHByaW50Zigi ICVzIGNvbm5lY3RlZCBvbiBwb3J0ICVzXG4iLHMsCisgICAgICAgICAgICAgICAgICAgICAgIGNr dWl0b2EobnRvaHMoc2VydmljZS0+c19wb3J0KSkpOworI2lmZGVmIEJFVEFERUJVRworICAgICAg ICAgICAgICAgIC8qIFRoaXMgaXMgc2ltcGx5IGZvciB0ZXN0aW5nIHRoZSBETlMgZW50cmllcyAq LworICAgICAgICAgICAgICAgIGlmIChob3N0LT5oX2FsaWFzZXMpIHsKKyAgICAgICAgICAgICAg ICAgICAgY2hhciAqKiBhID0gaG9zdC0+aF9hbGlhc2VzOworICAgICAgICAgICAgICAgICAgICB3 aGlsZSAoKmEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiIGFsaWFzID0+ICVz XG4iLCphKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGErKzsKKyAgICAgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBCRVRBREVCVUcgKi8KKyAgICAgICAg ICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICghcXVpZXQpIHByaW50Zigi RmFpbGVkLlxuIik7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKCFxdWlldCkgcHJpbnRmKCIo T0spXG4iKTsKKyAgICBpZiAoIXF1aWV0KSBmZmx1c2goc3Rkb3V0KTsKKworCisgICAgaWYgKCB0 Y3BfaHR0cF9wcm94eSApIHsKKyAgICAgICAgLyogRXJhc2UgdGhlIElQIGFkZHJlc3Mgc2luY2Ug d2UgY2Fubm90IHJldXNlIGl0ICovCisgICAgICAgIGh0dHBfaXBbMF0gPSAnXDAnOworICAgIH0g ZWxzZSB7CisgICAgICAgIC8qIFRoaXMgc2hvdWxkIGFscmVhZHkgaGF2ZSBiZWVuIGRvbmUgYnV0 IGp1c3QgaW4gY2FzZSAqLworICAgICAgICBja3N0cm5jcHkoaHR0cF9pcCwoY2hhciAqKWluZXRf bnRvYShyX2FkZHIuc2luX2FkZHIpLDIwKTsKKyAgICB9CisgICAgbWFrZXN0cigmaHR0cF9hZ2Vu dCxhZ2VudCk7CisKKyNpZmRlZiBDS19TU0wKKyAgICBpZiAodXNlX3NzbCAmJiBja19zc2xlYXlf aXNfaW5zdGFsbGVkKCkpIHsKKyAgICAgICAgaWYgKCFzc2xfaHR0cF9pbml0KGhvc3RuYW1lKSkg eworICAgICAgICAgICAgaWYgKGJpb19lcnIhPU5VTEwpIHsKKyAgICAgICAgICAgICAgICBCSU9f cHJpbnRmKGJpb19lcnIsInNzbF90bl9pbml0KCkgZmFpbGVkXG4iKTsKKyAgICAgICAgICAgICAg ICBFUlJfcHJpbnRfZXJyb3JzKGJpb19lcnIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg ICAgICAgICAgICBmZmx1c2goc3RkZXJyKTsKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVy ciwic3NsX3RuX2luaXQoKSBmYWlsZWRcbiIpOworICAgICAgICAgICAgICAgIEVSUl9wcmludF9l cnJvcnNfZnAoc3RkZXJyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGh0dHBfY2xvc2Uo KTsKKyAgICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAgIH0gZWxzZSBpZiAoIGNrX3NzbF9o dHRwX2NsaWVudChodHRwZmQsaG9zdG5hbWUpIDwgMCApIHsKKyAgICAgICAgICAgIGh0dHBfY2xv c2UoKTsKKyAgICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYg LyogQ0tfU1NMICovCisjZW5kaWYgLyogVENQU09DS0VUICovCisKKyAgICByZXR1cm4oMCk7ICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBEb25lLiAqLworfQorCitpbnQKKyNpZmRlZiBDS19B TlNJQworaHR0cF9jbG9zZShWT0lEKQorI2Vsc2UgLyogQ0tfQU5TSUMgKi8KK2h0dHBfY2xvc2Uo KQorI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgaW50IHggPSAwOworICAgIGRlYnVnKEYx MDEsImh0dHBfY2xvc2UiLCIiLGh0dHBmZCk7CisKKyNpZmRlZiBIVFRQX0JVRkZFUklORworICAg IGh0dHBfY291bnQgPSAwOworICAgIGh0dHBfYnVmcCA9IDA7CisjZW5kaWYJLyogSFRUUF9CVUZG RVJJTkcgKi8KKworICAgIGlmIChodHRwZmQgPT0gLTEpICAgICAgICAgICAgICAgICAgICAvKiBX YXMgb3Blbj8gKi8KKyAgICAgIHJldHVybigwKTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBX YXNuJ3QuICovCisKKyNpZm5kZWYgT1MyCisgICAgaWYgKGh0dHBmZCA+IC0xKSAgICAgICAgICAg ICAgICAgICAgIC8qIFdhcy4gKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgIHsKKyNpZmRlZiBD S19TU0wKKyAgICAgICAgICBpZiAodGxzX2h0dHBfYWN0aXZlX2ZsYWcpIHsKKyAgICAgICAgICAg ICAgaWYgKHNzbF9kZWJ1Z19mbGFnKQorICAgICAgICAgICAgICAgIEJJT19wcmludGYoYmlvX2Vy ciwiY2FsbGluZyBTU0xfc2h1dGRvd25cbiIpOworICAgICAgICAgICAgICBTU0xfc2h1dGRvd24o dGxzX2h0dHBfY29uKTsKKyAgICAgICAgICAgICAgdGxzX2h0dHBfYWN0aXZlX2ZsYWcgPSAwOwor ICAgICAgICAgIH0KKyNlbmRpZiAvKiBDS19TU0wgKi8KKyNpZmRlZiBUQ1BJUExJQgorICAgICAg ICAgIHggPSBzb2NrZXRfY2xvc2UoaHR0cGZkKTsgICAgICAvKiBDbG9zZSBpdC4gKi8KKyNlbHNl CisjaWZuZGVmIE9TMgorICAgICAgICAgIHggPSBjbG9zZShodHRwZmQpOworI2VuZGlmIC8qIE9T MiAqLworI2VuZGlmIC8qIFRDUElQTElCICovCisgICAgICB9CisgICAgaHR0cGZkID0gLTE7ICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBNYXJrIGl0IGFzIGNsb3NlZC4gKi8KKyAgICAvKiBk byBub3QgZXJhc2UgaHR0cF9ob3N0X3BvcnQsIGh0dHBfaXAsIGh0dHBfcG9ydCBzbyB0aGV5ICov CisgICAgLyogY2FuIGJlIHVzZWQgYnkgaHR0cF9yZW9wZW4oKSAqLworICAgIHJldHVybih4KTsK K30KKworCisvKiBodHRwX3RvbCgpCisgKiBDYWxsIHdpdGggcyA9IHBvaW50ZXIgdG8gc3RyaW5n LCBuID0gbGVuZ3RoLgorICogUmV0dXJucyBudW1iZXIgb2YgYnl0ZXMgYWN0dWFsbHkgd3JpdHRl biBvbiBzdWNjZXNzLCBvcgorICogLTEgb24gaS9vIGVycm9yLCAtMiBpZiBjYWxsZWQgaW1wcm9w ZXJseS4KKyAqLworCitpbnQKK2h0dHBfdG9sKHMsbikgQ0hBUiAqczsgaW50IG47IHsKKyAgICBp bnQgY291bnQgPSAwOworICAgIGludCBsZW4gPSBuOworICAgIGludCB0cnkgPSAwOworCisgICAg aWYgKGh0dHBmZCA9PSAtMSkgeworICAgICAgICBkZWJ1ZyhGMTAwLCJodHRwX3RvbCBzb2NrZXQg aXMgY2xvc2VkIiwiIiwwKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBkZWJ1ZyhG MTAxLCJodHRwX3RvbCBUQ1BJUExJQiB0dG5ldCIsIiIsdHRuZXQpOworI2lmZGVmIENPTU1FTlQK KyAgICBja2hleGR1bXAoImh0dHBfdG9sIixzLG4pOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKwor I2lmZGVmIENLX1NTTAorICAgIGlmICh0bHNfaHR0cF9hY3RpdmVfZmxhZykgeworICAgICAgICBp bnQgZXJyb3IsIHI7CisgICAgICAgIC8qIFdyaXRlIHVzaW5nIFNTTCAqLworICAgICAgc3NsX3Jl dHJ5OgorICAgICAgICAgIHIgPSBTU0xfd3JpdGUodGxzX2h0dHBfY29uLCBzLCBsZW4gLyogPjEw MjQ/MTAyNDpsZW4gKi8pOworICAgICAgICBzd2l0Y2ggKFNTTF9nZXRfZXJyb3IodGxzX2h0dHBf Y29uLHIpKSB7CisgICAgICAgICAgY2FzZSBTU0xfRVJST1JfTk9ORToKKyAgICAgICAgICAgIGRl YnVnKEYxMTEsImh0dHBfdG9sIiwiU1NMX3dyaXRlIixyKTsKKyAgICAgICAgICAgIGlmICggciA9 PSBsZW4gKQorICAgICAgICAgICAgICAgIHJldHVybihuKTsKKyAgICAgICAgICAgICBzICs9IHI7 CisgICAgICAgICAgICAgbGVuIC09IHI7CisgICAgICAgICAgICAgZ290byBzc2xfcmV0cnk7Cisg ICAgICAgICAgY2FzZSBTU0xfRVJST1JfV0FOVF9XUklURToKKyAgICAgICAgICAgIGRlYnVnKEYx MDAsImh0dHBfdG9sIFNTTF9FUlJPUl9XQU5UX1dSSVRFIiwiIiwwKTsKKwkgICAgICByZXR1cm4o LTEpOworICAgICAgICAgIGNhc2UgU1NMX0VSUk9SX1dBTlRfUkVBRDoKKyAgICAgICAgICAgIGRl YnVnKEYxMDAsImh0dHBfdG9sIFNTTF9FUlJPUl9XQU5UX1JFQUQiLCIiLDApOworICAgICAgICAg ICAgcmV0dXJuKC0xKTsKKyAgICAgICAgICBjYXNlIFNTTF9FUlJPUl9TWVNDQUxMOgorICAgICAg ICAgICAgICBpZiAoIHIgPT0gMCApIHsgLyogRU9GICovCisgICAgICAgICAgICAgICAgICBodHRw X2Nsb3NlKCk7CisgICAgICAgICAgICAgICAgICByZXR1cm4oLTIpOworICAgICAgICAgICAgICB9 IGVsc2UgeworICAgICAgICAgICAgICAgICAgaW50IHJjID0gLTE7CisjaWZkZWYgTlQKKyAgICAg ICAgICAgICAgICAgIGludCBnbGUgPSBHZXRMYXN0RXJyb3IoKTsKKyAgICAgICAgICAgICAgICAg IGRlYnVnKEYxMTEsImh0dHBfdG9sIFNTTF9FUlJPUl9TWVNDQUxMIiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAiR2V0TGFzdEVycm9yKCkiLGdsZSk7CisgICAgICAgICAgICAgICAgICByYyA9 IG9zMnNvY2tldGVycm9yKGdsZSk7CisgICAgICAgICAgICAgICAgICBpZiAocmMgPT0gLTEpCisg ICAgICAgICAgICAgICAgICAgICAgcmMgPSAtMjsKKyAgICAgICAgICAgICAgICAgIGVsc2UgaWYg KCByYyA9PSAtMiApCisgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworI2VuZGlmIC8q IE5UICovCisgICAgICAgICAgICAgICAgICByZXR1cm4ocmMpOworICAgICAgICAgICAgICB9Cisg ICAgICAgICAgY2FzZSBTU0xfRVJST1JfV0FOVF9YNTA5X0xPT0tVUDoKKyAgICAgICAgICAgIGRl YnVnKEYxMDAsImh0dHBfdG9sIFNTTF9FUlJPUl9XQU5UX1g1MDlfTE9PS1VQIiwiIiwwKTsKKyAg ICAgICAgICAgIGh0dHBfY2xvc2UoKTsKKyAgICAgICAgICAgIHJldHVybigtMik7CisgICAgICAg ICAgY2FzZSBTU0xfRVJST1JfU1NMOgorICAgICAgICAgICAgZGVidWcoRjEwMCwiaHR0cF90b2wg U1NMX0VSUk9SX1NTTCIsIiIsMCk7CisgICAgICAgICAgICBodHRwX2Nsb3NlKCk7CisgICAgICAg ICAgICByZXR1cm4oLTIpOworICAgICAgICAgIGNhc2UgU1NMX0VSUk9SX1pFUk9fUkVUVVJOOgor ICAgICAgICAgICAgZGVidWcoRjEwMCwiaHR0cF90b2wgU1NMX0VSUk9SX1pFUk9fUkVUVVJOIiwi IiwwKTsKKyAgICAgICAgICAgIGh0dHBfY2xvc2UoKTsKKyAgICAgICAgICAgIHJldHVybigtMik7 CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGRlYnVnKEYxMDAsImh0dHBfdG9sIFNT TF9FUlJPUl8/Pz8/PyIsIiIsMCk7CisgICAgICAgICAgICBodHRwX2Nsb3NlKCk7CisgICAgICAg ICAgICByZXR1cm4oLTIpOworICAgICAgICB9CisgICAgfQorI2VuZGlmIC8qIENLX1NTTCAqLwor CisgIGh0dHBfdG9sX3JldHJ5OgorICAgIHRyeSsrOyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIEluY3JlYXNlIHRoZSB0cnkgY291bnRlciAqLworCisgICAgeworI2lmZGVmIEJTRFNF TEVDVAorICAgICAgICBmZF9zZXQgd2ZkczsKKyAgICAgICAgc3RydWN0IHRpbWV2YWwgdHY7CisK KyAgICAgICAgZGVidWcoRjEwMSwiaHR0cF90b2wgQlNEU0VMRUNUIiwiIiwwKTsKKyAgICAgICAg dHYudHZfdXNlYyA9IDBMOworICAgICAgICB0di50dl9zZWM9MzA7CisjaWZkZWYgTlQKKyAgICAg ICAgV1NBU2FmZVRvQ2FuY2VsID0gMTsKKyNlbmRpZiAvKiBOVCAqLworI2lmZGVmIFNUUkVBTUlO RworICAgICAgZG9fc2VsZWN0OgorI2VuZGlmIC8qIFNUUkVBTUlORyAqLworICAgICAgICBGRF9a RVJPKCZ3ZmRzKTsKKyAgICAgICAgRkRfU0VUKGh0dHBmZCwgJndmZHMpOworICAgICAgICBpZiAo c2VsZWN0KEZEX1NFVFNJWkUsIE5VTEwsCisjaWZkZWYgX19ERUNDCisjaWZuZGVmIF9fREVDQ19W RVIKKyAgICAgICAgICAgICAgICAgICAgKGludCAqKQorI2VuZGlmIC8qIF9fREVDQ19WRVIgKi8K KyNlbmRpZiAvKiBfX0RFQ0MgKi8KKyAgICAgICAgICAgICAgICAgICAmd2ZkcywgTlVMTCwgJnR2 KSA8IDApIHsKKyAgICAgICAgICAgIGludCBzX2Vycm5vID0gc29ja2V0X2Vycm5vOworICAgICAg ICAgICAgZGVidWcoRjEwMSwiaHR0cF90b2wgc2VsZWN0IGZhaWxlZCIsIiIsc19lcnJubyk7Cisj aWZkZWYgQkVUQURFQlVHCisgICAgICAgICAgICBwcmludGYoImh0dHBfdG9sIHNlbGVjdCBmYWls ZWQ6ICVkXG4iLCBzX2Vycm5vKTsKKyNlbmRpZiAvKiBCRVRBREVCVUcgKi8KKyNpZmRlZiBOVAor ICAgICAgICAgICAgV1NBU2FmZVRvQ2FuY2VsID0gMDsKKyAgICAgICAgICAgIGlmICghd2luOTVz ZWxlY3RidWcpCisjZW5kaWYgLyogTlQgKi8KKyAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAg ICAgICAgfQorICAgICAgICBpZiAoIUZEX0lTU0VUKGh0dHBmZCwgJndmZHMpKSB7CisjaWZkZWYg U1RSRUFNSU5HCisgICAgICAgICAgICBpZiAoc3RyZWFtaW5nKQorICAgICAgICAgICAgICBnb3Rv IGRvX3NlbGVjdDsKKyNlbmRpZiAvKiBTVFJFQU1JTkcgKi8KKyAgICAgICAgICAgIGRlYnVnKEYx MTEsImh0dHBfdG9sIiwiIUZEX0lTU0VUIix0dHlmZCk7CisjaWZkZWYgTlQKKyAgICAgICAgICAg IFdTQVNhZmVUb0NhbmNlbCA9IDA7CisgICAgICAgICAgICBpZiAoIXdpbjk1c2VsZWN0YnVnKQor I2VuZGlmIC8qIE5UICovCisgICAgICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAgIH0KKyNp ZmRlZiBOVAorICAgICAgICBXU0FTYWZlVG9DYW5jZWwgPSAwOworI2VuZGlmIC8qIE5UICovCisj ZWxzZSAvKiBCU0RTRUxFQ1QgKi8KKyNpZmRlZiBJQk1TRUxFQ1QKKyAgICAgICAgeworICAgICAg ICAgICAgaW50IHRyaWVzID0gMDsKKyAgICAgICAgICAgIGRlYnVnKEYxMDEsImh0dHBfdG9sIElC TVNFTEVDVCIsIiIsMCk7CisgICAgICAgICAgICB3aGlsZSAoc2VsZWN0KCZodHRwZmQsIDAsIDEs IDAsIDEwMDApICE9IDEpIHsKKyAgICAgICAgICAgICAgICBpbnQgY291bnQ7CisgICAgICAgICAg ICAgICAgaWYgKHRyaWVzKysgPj0gNjApIHsKKyAgICAgICAgICAgICAgICAgICAgLyogaWYgYWZ0 ZXIgNjAgc2Vjb25kcyB3ZSBjYW4ndCBnZXQgcGVybWlzc2lvbiB0byB3cml0ZSAqLworICAgICAg ICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJodHRwX3RvbCBzZWxlY3QgZmFpbGVkIiwiIixzb2Nr ZXRfZXJybm8pOworICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICAgICAg ICAgIH0KKyNpZmRlZiBDT01NRU5UCisgICAgICAgICAgICAgICAgaWYgKChjb3VudCA9IGh0dHBf dGNoaygpKSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgZGVidWcoRjExMSwiaHR0cF90b2wi LCJodHRwX3RjaGsoKSIsY291bnQpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4oY291bnQp OworICAgICAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgICAgICAgICB9 CisgICAgICAgIH0KKyNlbmRpZiAvKiBJQk1TRUxFQ1QgKi8KKyNlbmRpZiAvKiBCU0RTRUxFQ1Qg Ki8KKyNpZmRlZiBUQ1BJUExJQgorICAgICAgICBpZiAoKGNvdW50ID0gc29ja2V0X3dyaXRlKGh0 dHBmZCxzLG4pKSA8IDApIHsKKyAgICAgICAgICAgIGludCBzX2Vycm5vID0gc29ja2V0X2Vycm5v OyAvKiBtYXliZSBhIGZ1bmN0aW9uICovCisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJodHRwX3Rv bCBzb2NrZXRfd3JpdGUgZXJyb3IiLCIiLHNfZXJybm8pOworI2lmZGVmIE9TMgorICAgICAgICAg ICAgaWYgKG9zMnNvY2tldGVycm9yKHNfZXJybm8pIDwgMCkKKyAgICAgICAgICAgICAgcmV0dXJu KC0yKTsKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAgICAgIHJldHVybigtMSk7ICAgICAgICAg ICAgICAgICAvKiBDYWxsIGl0IGFuIGkvbyBlcnJvciAqLworICAgICAgICB9CisjZWxzZSAvKiBU Q1BJUExJQiAqLworICAgICAgICBpZiAoKGNvdW50ID0gd3JpdGUoaHR0cGZkLHMsbikpIDwgMCkg eworICAgICAgICAgICAgZGVidWcoRjEwMSwiaHR0cF90b2wgc29ja2V0X3dyaXRlIGVycm9yIiwi IixlcnJubyk7CisgICAgICAgICAgICByZXR1cm4oLTEpOyAgICAgICAgICAgICAgICAgLyogQ2Fs bCBpdCBhbiBpL28gZXJyb3IgKi8KKyAgICAgICAgfQorI2VuZGlmIC8qIFRDUElQTElCICovCisg ICAgICAgIGlmIChjb3VudCA8IG4pIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMTEsImh0dHBfdG9s IHNvY2tldF93cml0ZSIscyxjb3VudCk7CisgICAgICAgICAgICBpZiAodHJ5ID4gMjUpIHsKKyAg ICAgICAgICAgICAgICAvKiBkb24ndCB0cnkgbW9yZSB0aGFuIDI1IHRpbWVzICovCisgICAgICAg ICAgICAgICAgZGVidWcoRjEwMCwiaHR0cF90b2wgdHJpZWQgbW9yZSB0aGFuIDI1IHRpbWVzIiwi IiwwKTsKKyAgICAgICAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICAgICAgfQorICAgICAg ICAgICAgaWYgKGNvdW50ID4gMCkgeworICAgICAgICAgICAgICAgIHMgKz0gY291bnQ7CisgICAg ICAgICAgICAgICAgbiAtPSBjb3VudDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlYnVn KEYxMTEsImh0dHBfdG9sIHJldHJ5IixzLG4pOworICAgICAgICAgICAgZ290byBodHRwX3RvbF9y ZXRyeTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMTEsImh0dHBfdG9s IHNvY2tldF93cml0ZSIscyxjb3VudCk7CisgICAgICAgICAgICByZXR1cm4obGVuKTsgLyogc3Vj Y2VzcyAtIHJldHVybiB0b3RhbCBsZW5ndGggKi8KKyAgICAgICAgfQorICAgIH0KK30KKworaW50 CitodHRwX2luYyh0aW1vKSBpbnQgdGltbzsgeworICAgIGludCB4PS0xOyB1bnNpZ25lZCBjaGFy IGM7ICAgICAgICAgICAgIC8qIFRoZSBsb2NhbHMuICovCisKKyAgICBpZiAoaHR0cGZkID09IC0x KSB7CisjaWZkZWYgSFRUUF9CVUZGRVJJTkcKKwlodHRwX2NvdW50ID0gMDsKKyAgCWh0dHBfYnVm cCA9IDA7CisjZW5kaWYJLyogSFRUUF9CVUZGRVJJTkcgKi8KKyAgICAgICAgZGVidWcoRjEwMCwi aHR0cF9pbmMgc29ja2V0IGlzIGNsb3NlZCIsIiIsMCk7CisgICAgICAgIHJldHVybigtMik7Cisg ICAgfQorCisjaWZkZWYgQ0tfU1NMCisgICAgLyoKKyAgICAgKiBJbiB0aGUgY2FzZSBvZiBPcGVu U1NMLCBpdCBpcyBwb3NzaWJsZSB0aGF0IHRoZXJlIGlzIHN0aWxsCisgICAgICogZGF0YSB3YWl0 aW5nIGluIHRoZSBTU0wgc2Vzc2lvbiBidWZmZXJzIHRoYXQgaGFzIG5vdCB5ZXQKKyAgICAgKiBi ZWVuIHJlYWQgYnkgS2VybWl0LiAgSWYgdGhpcyBpcyB0aGUgY2FzZSB3ZSBtdXN0IHByb2Nlc3MK KyAgICAgKiBpdCB3aXRob3V0IGNhbGxpbmcgc2VsZWN0KCkgYmVjYXVzZSBzZWxlY3QoKSB3aWxs IG5vdCByZXR1cm4KKyAgICAgKiB3aXRoIGFuIGluZGljYXRpb24gdGhhdCB0aGVyZSBpcyBkYXRh IHRvIGJlIHJlYWQgZnJvbSB0aGUKKyAgICAgKiBzb2NrZXQuICBJZiB0aGVyZSBpcyBubyBkYXRh IHBlbmRpbmcgaW4gdGhlIFNTTCBzZXNzaW9uCisgICAgICogYnVmZmVycyB0aGVuIGZhbGwgdGhy b3VnaCB0byB0aGUgc2VsZWN0KCkgY29kZSBhbmQgd2FpdCBmb3IKKyAgICAgKiBzb21lIGRhdGEg dG8gYXJyaXZlLgorICAgICAqLworICAgIGlmICh0bHNfaHR0cF9hY3RpdmVfZmxhZykgeworICAg ICAgICBpbnQgZXJyb3I7CisKKyAgICAgICAgeCA9IFNTTF9wZW5kaW5nKHRsc19odHRwX2Nvbik7 CisgICAgICAgIGlmICh4IDwgMCkgeworICAgICAgICAgICAgZGVidWcoRjExMSwiaHR0cF9pbmMi LCJTU0xfcGVuZGluZyBlcnJvciIseCk7CisgICAgICAgICAgICBodHRwX2Nsb3NlKCk7CisgICAg ICAgICAgICByZXR1cm4oLTEpOworICAgICAgICB9IGVsc2UgaWYgKCB4ID4gMCApIHsKKwkgIHNz bF9yZWFkOgorICAgICAgICAgICAgeCA9IFNTTF9yZWFkKHRsc19odHRwX2NvbiwgJmMsIDEpOwor ICAgICAgICAgICAgZXJyb3IgPSBTU0xfZ2V0X2Vycm9yKHRsc19odHRwX2Nvbix4KTsKKyAgICAg ICAgICAgIHN3aXRjaCAoZXJyb3IpIHsKKyAgICAgICAgICAgIGNhc2UgU1NMX0VSUk9SX05PTkU6 CisgICAgICAgICAgICAgICAgZGVidWcoRjExMSwiaHR0cF9pbmMgU1NMX0VSUk9SX05PTkUiLCJ4 Iix4KTsKKyAgICAgICAgICAgICAgICBpZiAoeCA+IDApIHsKKyNpZmRlZiBPUzIKKyAgICAgICAg ICAgICAgICAgICAgUmVsZWFzZVRDUElQTXV0ZXgoKTsKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAg ICAgICAgICAgICAgICAgcmV0dXJuKGMpOyAgICAgICAgICAvKiBSZXR1cm4gY2hhcmFjdGVyLiAq LworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoeCA8IDApIHsKKyNpZmRlZiBPUzIKKyAgICAg ICAgICAgICAgICAgICAgUmVsZWFzZVRDUElQTXV0ZXgoKTsKKyNlbmRpZiAvKiBPUzIgKi8KKyAg ICAgICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgICAgICAgICB9IGVsc2Ugewor ICAgICAgICAgICAgICAgICAgICBodHRwX2Nsb3NlKCk7CisjaWZkZWYgT1MyCisgICAgICAgICAg ICAgICAgICAgIFJlbGVhc2VUQ1BJUE11dGV4KCk7CisjZW5kaWYgLyogT1MyICovCisgICAgICAg ICAgICAgICAgICAgIHJldHVybigtMik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg Y2FzZSBTU0xfRVJST1JfV0FOVF9XUklURToKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJo dHRwX2luYyBTU0xfRVJST1JfV0FOVF9XUklURSIsIiIsMCk7CisjaWZkZWYgT1MyCisgICAgICAg ICAgICAgICAgUmVsZWFzZVRDUElQTXV0ZXgoKTsKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAg ICAgICAgICByZXR1cm4oLTEpOworICAgICAgICAgICAgY2FzZSBTU0xfRVJST1JfV0FOVF9SRUFE OgorICAgICAgICAgICAgICAgIGRlYnVnKEYxMDAsImh0dHBfaW5jIFNTTF9FUlJPUl9XQU5UX1JF QUQiLCIiLDApOworI2lmZGVmIE9TMgorICAgICAgICAgICAgICAgIFJlbGVhc2VUQ1BJUE11dGV4 KCk7CisjZW5kaWYgLyogT1MyICovCisgICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAg ICAgICAgIGNhc2UgU1NMX0VSUk9SX1NZU0NBTEw6CisgICAgICAgICAgICAgICAgaWYgKCB4ID09 IDAgKSB7IC8qIEVPRiAqLworICAgICAgICAgICAgICAgICAgICBodHRwX2Nsb3NlKCk7CisjaWZk ZWYgT1MyCisgICAgICAgICAgICAgICAgICAgIFJlbGVhc2VUQ1BJUE11dGV4KCk7CisjZW5kaWYg LyogT1MyICovCisgICAgICAgICAgICAgICAgICAgIHJldHVybigtMik7CisgICAgICAgICAgICAg ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IHJjID0gLTE7CisjaWZkZWYgTlQK KyAgICAgICAgICAgICAgICAgICAgaW50IGdsZSA9IEdldExhc3RFcnJvcigpOworICAgICAgICAg ICAgICAgICAgICBkZWJ1ZyhGMTExLCJodHRwX2luYyBTU0xfRVJST1JfU1lTQ0FMTCIsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAiR2V0TGFzdEVycm9yKCkiLGdsZSk7CisgICAgICAgICAg ICAgICAgICAgIHJjID0gb3Myc29ja2V0ZXJyb3IoZ2xlKTsKKyAgICAgICAgICAgICAgICAgICAg aWYgKHJjID09IC0xKQorICAgICAgICAgICAgICAgICAgICAgICAgcmMgPSAtMjsKKyAgICAgICAg ICAgICAgICAgICAgZWxzZSBpZiAoIHJjID09IC0yICkKKyAgICAgICAgICAgICAgICAgICAgICAg IHJjID0gLTE7CisjZW5kaWYgLyogTlQgKi8KKyNpZmRlZiBPUzIKKyAgICAgICAgICAgICAgICAg ICAgUmVsZWFzZVRDUElQTXV0ZXgoKTsKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAgICAgICAg ICAgICAgcmV0dXJuKHJjKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIFNT TF9FUlJPUl9XQU5UX1g1MDlfTE9PS1VQOgorICAgICAgICAgICAgICAgIGRlYnVnKEYxMDAsImh0 dHBfaW5jIFNTTF9FUlJPUl9XQU5UX1g1MDlfTE9PS1VQIiwiIiwwKTsKKyAgICAgICAgICAgICAg ICBodHRwX2Nsb3NlKCk7CisjaWZkZWYgT1MyCisgICAgICAgICAgICAgICAgUmVsZWFzZVRDUElQ TXV0ZXgoKTsKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAgICAgICAgICByZXR1cm4oLTIpOwor ICAgICAgICAgICAgY2FzZSBTU0xfRVJST1JfU1NMOgorICAgICAgICAgICAgICAgIGRlYnVnKEYx MDAsImh0dHBfaW5jIFNTTF9FUlJPUl9TU0wiLCIiLDApOworI2lmZGVmIENPTU1FTlQKKyAgICAg ICAgICAgICAgICBodHRwX2Nsb3NlKCk7CisjZW5kaWYgLyogQ09NTUVOVCAqLworI2lmZGVmIE9T MgorICAgICAgICAgICAgICAgIFJlbGVhc2VUQ1BJUE11dGV4KCk7CisjZW5kaWYgLyogT1MyICov CisgICAgICAgICAgICAgICAgcmV0dXJuKC0yKTsKKyAgICAgICAgICAgIGNhc2UgU1NMX0VSUk9S X1pFUk9fUkVUVVJOOgorICAgICAgICAgICAgICAgIGRlYnVnKEYxMDAsImh0dHBfaW5jIFNTTF9F UlJPUl9aRVJPX1JFVFVSTiIsIiIsMCk7CisgICAgICAgICAgICAgICAgaHR0cF9jbG9zZSgpOwor I2lmZGVmIE9TMgorICAgICAgICAgICAgICAgIFJlbGVhc2VUQ1BJUE11dGV4KCk7CisjZW5kaWYg LyogT1MyICovCisgICAgICAgICAgICAgICAgcmV0dXJuKC0yKTsKKyAgICAgICAgICAgIGRlZmF1 bHQ6CisgICAgICAgICAgICAgICAgZGVidWcoRjEwMCwiaHR0cF9pbmMgU1NMX0VSUk9SXz8/Pz8/ IiwiIiwwKTsKKyAgICAgICAgICAgICAgICBodHRwX2Nsb3NlKCk7CisjaWZkZWYgT1MyCisgICAg ICAgICAgICAgICAgUmVsZWFzZVRDUElQTXV0ZXgoKTsKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAg ICAgICAgICAgICByZXR1cm4oLTIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor I2VuZGlmIC8qIENLX1NTTCAqLworCisjaWZkZWYgSFRUUF9CVUZGRVJJTkcKKyAgICAvKiBTa2lw IGFsbCB0aGUgc2VsZWN0KCkgc3R1ZmYgaWYgd2UgaGF2ZSBieXRlcyBidWZmZXJlZCBsb2NhbGx5 ICovCisgICAgaWYgKGh0dHBfY291bnQgPiAwKQorICAgICAgZ290byBnZXRmcm9tYnVmZmVyOwor I2VuZGlmCS8qIEhUVFBfQlVGRkVSSU5HICovCisKKyAgICB7CisjaWZkZWYgQlNEU0VMRUNUCisg ICAgICAgIGZkX3NldCByZmRzOworICAgICAgICBzdHJ1Y3QgdGltZXZhbCB0djsKKyAgICAgICAg aW50IHRpbWVvdXQgPSB0aW1vIDwgMCA/IC10aW1vIDogMTAwMCAqIHRpbW87CisgICAgICAgIGRl YnVnKEYxMDEsImh0dHBfaW5jIEJTRFNFTEVDVCIsIiIsdGltbyk7CisKKyAgICAgICAgZm9yICgg OyB0aW1lb3V0ID49IDA7IHRpbWVvdXQgLT0gKHRpbW8gPyAxMDAgOiAwKSkgeworICAgICAgICAg ICAgaW50IHJjOworICAgICAgICAgICAgZGVidWcoRjExMSwiaHR0cF9pbmMiLCJ0aW1lb3V0Iix0 aW1lb3V0KTsKKyAgICAgICAgICAgIC8qIERvbid0IG1vdmUgc2VsZWN0KCkgaW5pdGlhbGl6YXRp b24gb3V0IG9mIHRoZSBsb29wLiAqLworICAgICAgICAgICAgRkRfWkVSTygmcmZkcyk7CisgICAg ICAgICAgICBGRF9TRVQoaHR0cGZkLCAmcmZkcyk7CisgICAgICAgICAgICB0di50dl9zZWMgID0g dHYudHZfdXNlYyA9IDBMOworICAgICAgICAgICAgaWYgKHRpbW8pCisgICAgICAgICAgICAgICAg dHYudHZfdXNlYyA9IChsb25nKSAxMDAwMDBMOworICAgICAgICAgICAgZWxzZQorICAgICAgICAg ICAgICAgIHR2LnR2X3NlYyA9IDMwOworI2lmZGVmIE5UCisgICAgICAgICAgICBXU0FTYWZlVG9D YW5jZWwgPSAxOworI2VuZGlmIC8qIE5UICovCisgICAgICAgICAgICByYyA9IHNlbGVjdChGRF9T RVRTSVpFLAorI2lmbmRlZiBfX0RFQ0MKKyAgICAgICAgICAgICAgICAgICAgICAgICAoZmRfc2V0 ICopCisjZW5kaWYgLyogX19ERUNDICovCisgICAgICAgICAgICAgICAgICAgICAgICAgJnJmZHMs IE5VTEwsIE5VTEwsICZ0dik7CisgICAgICAgICAgICBpZiAocmMgPCAwKSB7CisgICAgICAgICAg ICAgICAgaW50IHNfZXJybm8gPSBzb2NrZXRfZXJybm87CisgICAgICAgICAgICAgICAgZGVidWco RjExMSwiaHR0cF9pbmMiLCJzZWxlY3QiLHJjKTsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEx LCJodHRwX2luYyIsInNvY2tldF9lcnJubyIsc19lcnJubyk7CisjaWZkZWYgSFRUUF9CVUZGRVJJ TkcKKwkJaHR0cF9jb3VudCA9IDA7CisJCWh0dHBfYnVmcCA9IDA7CisjZW5kaWYJLyogSFRUUF9C VUZGRVJJTkcgKi8KKyAgICAgICAgICAgICAgICBpZiAoc19lcnJubykKKyAgICAgICAgICAgICAg ICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlYnVnKEYxMTEs Imh0dHBfaW5jIiwic2VsZWN0IixyYyk7CisjaWZkZWYgTlQKKyAgICAgICAgICAgIFdTQVNhZmVU b0NhbmNlbCA9IDA7CisjZW5kaWYgLyogTlQgKi8KKyAgICAgICAgICAgIGlmIChGRF9JU1NFVCho dHRwZmQsICZyZmRzKSkgeworICAgICAgICAgICAgICAgIHggPSAwOworICAgICAgICAgICAgICAg IGJyZWFrOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvKiBJZiB3YWl0 aW5nIGZvcmV2ZXIgd2UgaGF2ZSBubyB3YXkgb2Yga25vd2luZyBpZiB0aGUgKi8KKyAgICAgICAg ICAgICAgICAvKiBzb2NrZXQgY2xvc2VkIHNvIHRyeSB3cml0aW5nIGEgMC1sZW5ndGggVENQIHBh Y2tldCAgKi8KKyAgICAgICAgICAgICAgICAvKiB3aGljaCBzaG91bGQgZm9yY2UgYW4gZXJyb3Ig aWYgdGhlIHNvY2tldCBpcyBjbG9zZWQgKi8KKyAgICAgICAgICAgICAgICBpZiAoIXRpbW8pIHsK KyNpZmRlZiBUQ1BJUExJQgorICAgICAgICAgICAgICAgICAgICBpZiAoKHJjID0gc29ja2V0X3dy aXRlKGh0dHBmZCwiIiwwKSkgPCAwKSB7CisjaWZkZWYgSFRUUF9CVUZGRVJJTkcKKwkJCWh0dHBf Y291bnQgPSAwOworCQkJaHR0cF9idWZwID0gMDsKKyNlbmRpZgkvKiBIVFRQX0JVRkZFUklORyAq LworICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNfZXJybm8gPSBzb2NrZXRfZXJybm87Cisg ICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJodHRwX2luYyBzb2NrZXRfd3JpdGUg ZXJyb3IiLCIiLHNfZXJybm8pOworI2lmZGVmIE9TMgorICAgICAgICAgICAgICAgICAgICAgICAg aWYgKG9zMnNvY2tldGVycm9yKHNfZXJybm8pIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICByZXR1cm4oLTIpOworI2VuZGlmIC8qIE9TMiAqLworICAgICAgICAgICAgICAgICAgICAg ICAgcmV0dXJuKC0xKTsgLyogQ2FsbCBpdCBhbiBpL28gZXJyb3IgKi8KKyAgICAgICAgICAgICAg ICAgICAgfQorI2Vsc2UgLyogVENQSVBMSUIgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKChy YyA9IHdyaXRlKGh0dHBmZCwiIiwwKSkgPCAwKSB7CisjaWZkZWYgSFRUUF9CVUZGRVJJTkcKKwkJ CWh0dHBfY291bnQgPSAwOworCQkJaHR0cF9idWZwID0gMDsKKyNlbmRpZgkvKiBIVFRQX0JVRkZF UklORyAqLworICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEwMSwiaHR0cF9pbmMgc29j a2V0X3dyaXRlIGVycm9yIiwiIixlcnJubyk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1 cm4oLTEpOyAvKiBDYWxsIGl0IGFuIGkvbyBlcnJvciAqLworICAgICAgICAgICAgICAgICAgICB9 CisjZW5kaWYgLyogVENQSVBMSUIgKi8KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg ICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyNpZmRlZiBOVAorICAgICAg ICBXU0FTYWZlVG9DYW5jZWwgPSAwOworI2VuZGlmIC8qIE5UICovCisjZWxzZSAvKiAhQlNEU0VM RUNUICovCisjaWZkZWYgSUJNU0VMRUNUCisgLyoKKyAgV2FzIHVzZWQgYnkgT1MvMiwgY3VycmVu dGx5IG5vdCB1c2VkLCBidXQgbWlnaHQgY29tZSBpbiBoYW5keSBzb21lIGRheS4uLgorICAuLi4g YW5kIGl0IGNhbWUgaW4gaGFuZHkhICBGb3Igb3VyIFRDUC9JUCBsYXllciwgaXQgYXZvaWRzIGFs bCB0aGUgZmRfc2V0CisgIGFuZCB0aW1ldmFsIHN0dWZmIHNpbmNlIHRoaXMgaXMgdGhlIG9ubHkg cGxhY2Ugd2hlcmUgaXQgaXMgdXNlZC4KKyAqLworICAgICAgICBpbnQgc29ja2V0ID0gaHR0cGZk OworICAgICAgICBpbnQgdGltZW91dCA9IHRpbW8gPCAwID8gLXRpbW8gOiAxMDAwICogdGltbzsK KworICAgICAgICBkZWJ1ZyhGMTAxLCJodHRwX2luYyBJQk1TRUxFQ1QiLCIiLHRpbW8pOworICAg ICAgICBmb3IgKCA7IHRpbWVvdXQgPj0gMDsgdGltZW91dCAtPSAodGltbyA/IDEwMCA6IDApKSB7 CisgICAgICAgICAgICBpZiAoc2VsZWN0KCZzb2NrZXQsIDEsIDAsIDAsIDEwMEwpID09IDEpIHsK KyAgICAgICAgICAgICAgICB4ID0gMDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgfQorI2Vsc2UgLyogIUlCTVNFTEVDVCAqLworICAgICAgICBTRUxFQ1Qg aXMgcmVxdWlyZWQgZm9yIHRoaXMgY29kZQorI2VuZGlmIC8qIElCTVNFTEVDVCAqLworI2VuZGlm IC8qIEJTRFNFTEVDVCAqLworICAgIH0KKworICAgIGlmICh0aW1vICYmIHggPCAwKSB7ICAgICAg ICAvKiBzZWxlY3QoKSB0aW1lZCBvdXQgKi8KKyNpZmRlZiBIVFRQX0JVRkZFUklORworCWh0dHBf Y291bnQgPSAwOworCWh0dHBfYnVmcCA9IDA7CisjZW5kaWYJLyogSFRUUF9CVUZGRVJJTkcgKi8K KyAgICAgICAgZGVidWcoRjEwMCwiaHR0cF9pbmMgc2VsZWN0KCkgdGltZWQgb3V0IiwiIiwwKTsK KyAgICAgICAgcmV0dXJuKC0xKTsgLyogQ2FsbCBpdCBhbiBpL28gZXJyb3IgKi8KKyAgICB9CisK KyNpZmRlZiBDS19TU0wKKyAgICAgICAgaWYgKCB0bHNfaHR0cF9hY3RpdmVfZmxhZyApIHsKKyAg ICAgICAgICAgIGludCBlcnJvcjsKKwkgIHNzbF9yZWFkMjoKKyAgICAgICAgICAgIHggPSBTU0xf cmVhZCh0bHNfaHR0cF9jb24sICZjLCAxKTsKKyAgICAgICAgICAgIGVycm9yID0gU1NMX2dldF9l cnJvcih0bHNfaHR0cF9jb24seCk7CisgICAgICAgICAgICBzd2l0Y2ggKGVycm9yKSB7CisgICAg ICAgICAgICBjYXNlIFNTTF9FUlJPUl9OT05FOgorICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEs Imh0dHBfaW5jIFNTTF9FUlJPUl9OT05FIiwieCIseCk7CisgICAgICAgICAgICAgICAgaWYgKHgg PiAwKSB7CisjaWZkZWYgT1MyCisgICAgICAgICAgICAgICAgICAgIFJlbGVhc2VUQ1BJUE11dGV4 KCk7CisjZW5kaWYgLyogT1MyICovCisgICAgICAgICAgICAgICAgICAgIHJldHVybihjKTsgICAg ICAgICAgLyogUmV0dXJuIGNoYXJhY3Rlci4gKi8KKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYg KHggPCAwKSB7CisjaWZkZWYgT1MyCisgICAgICAgICAgICAgICAgICAgIFJlbGVhc2VUQ1BJUE11 dGV4KCk7CisjZW5kaWYgLyogT1MyICovCisgICAgICAgICAgICAgICAgICAgIHJldHVybigtMSk7 CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaHR0cF9jbG9z ZSgpOworI2lmZGVmIE9TMgorICAgICAgICAgICAgICAgICAgICBSZWxlYXNlVENQSVBNdXRleCgp OworI2VuZGlmIC8qIE9TMiAqLworICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTIpOworICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgU1NMX0VSUk9SX1dBTlRfV1JJVEU6Cisg ICAgICAgICAgICAgICAgZGVidWcoRjEwMCwiaHR0cF9pbmMgU1NMX0VSUk9SX1dBTlRfV1JJVEUi LCIiLDApOworI2lmZGVmIE9TMgorICAgICAgICAgICAgICAgIFJlbGVhc2VUQ1BJUE11dGV4KCk7 CisjZW5kaWYgLyogT1MyICovCisgICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAg ICAgIGNhc2UgU1NMX0VSUk9SX1dBTlRfUkVBRDoKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAw LCJodHRwX2luYyBTU0xfRVJST1JfV0FOVF9SRUFEIiwiIiwwKTsKKyNpZmRlZiBPUzIKKyAgICAg ICAgICAgICAgICBSZWxlYXNlVENQSVBNdXRleCgpOworI2VuZGlmIC8qIE9TMiAqLworICAgICAg ICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAgICAgICBjYXNlIFNTTF9FUlJPUl9TWVNDQUxM OgorICAgICAgICAgICAgICAgIGlmICggeCA9PSAwICkgeyAvKiBFT0YgKi8KKyAgICAgICAgICAg ICAgICAgICAgaHR0cF9jbG9zZSgpOworI2lmZGVmIE9TMgorICAgICAgICAgICAgICAgICAgICBS ZWxlYXNlVENQSVBNdXRleCgpOworI2VuZGlmIC8qIE9TMiAqLworICAgICAgICAgICAgICAgICAg ICByZXR1cm4oLTIpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg ICAgIGludCByYyA9IC0xOworI2lmZGVmIE5UCisgICAgICAgICAgICAgICAgICAgIGludCBnbGUg PSBHZXRMYXN0RXJyb3IoKTsKKyAgICAgICAgICAgICAgICAgICAgZGVidWcoRjExMSwiaHR0cF9p bmMgU1NMX0VSUk9SX1NZU0NBTEwiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIkdldExh c3RFcnJvcigpIixnbGUpOworICAgICAgICAgICAgICAgICAgICByYyA9IG9zMnNvY2tldGVycm9y KGdsZSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChyYyA9PSAtMSkKKyAgICAgICAgICAgICAg ICAgICAgICAgIHJjID0gLTI7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCByYyA9PSAt MiApCisgICAgICAgICAgICAgICAgICAgICAgICByYyA9IC0xOworI2VuZGlmIC8qIE5UICovCisj aWZkZWYgT1MyCisgICAgICAgICAgICAgICAgICAgIFJlbGVhc2VUQ1BJUE11dGV4KCk7CisjZW5k aWYgLyogT1MyICovCisgICAgICAgICAgICAgICAgICAgIHJldHVybihyYyk7CisgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgY2FzZSBTU0xfRVJST1JfV0FOVF9YNTA5X0xPT0tVUDoKKyAg ICAgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJodHRwX2luYyBTU0xfRVJST1JfV0FOVF9YNTA5X0xP T0tVUCIsIiIsMCk7CisgICAgICAgICAgICAgICAgaHR0cF9jbG9zZSgpOworI2lmZGVmIE9TMgor ICAgICAgICAgICAgICAgIFJlbGVhc2VUQ1BJUE11dGV4KCk7CisjZW5kaWYgLyogT1MyICovCisg ICAgICAgICAgICAgICAgcmV0dXJuKC0yKTsKKyAgICAgICAgICAgIGNhc2UgU1NMX0VSUk9SX1NT TDoKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJodHRwX2luYyBTU0xfRVJST1JfU1NMIiwi IiwwKTsKKyNpZmRlZiBDT01NRU5UCisgICAgICAgICAgICAgICAgaHR0cF9jbG9zZSgpOworI2Vu ZGlmIC8qIENPTU1FTlQgKi8KKyNpZmRlZiBPUzIKKyAgICAgICAgICAgICAgICBSZWxlYXNlVENQ SVBNdXRleCgpOworI2VuZGlmIC8qIE9TMiAqLworICAgICAgICAgICAgICAgIHJldHVybigtMik7 CisgICAgICAgICAgICBjYXNlIFNTTF9FUlJPUl9aRVJPX1JFVFVSTjoKKyAgICAgICAgICAgICAg ICBkZWJ1ZyhGMTAwLCJodHRwX2luYyBTU0xfRVJST1JfWkVST19SRVRVUk4iLCIiLDApOworICAg ICAgICAgICAgICAgIGh0dHBfY2xvc2UoKTsKKyNpZmRlZiBPUzIKKyAgICAgICAgICAgICAgICBS ZWxlYXNlVENQSVBNdXRleCgpOworI2VuZGlmIC8qIE9TMiAqLworICAgICAgICAgICAgICAgIHJl dHVybigtMik7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGRlYnVnKEYx MDAsImh0dHBfaW5jIFNTTF9FUlJPUl8/Pz8/PyIsIiIsMCk7CisgICAgICAgICAgICAgICAgaHR0 cF9jbG9zZSgpOworI2lmZGVmIE9TMgorICAgICAgICAgICAgICAgIFJlbGVhc2VUQ1BJUE11dGV4 KCk7CisjZW5kaWYgLyogT1MyICovCisgICAgICAgICAgICAgICAgcmV0dXJuKC0yKTsKKyAgICAg ICAgICAgIH0KKyAgICAgICAgfQorI2VuZGlmIC8qIENLX1NTTCAqLworCisjaWZkZWYgSFRUUF9C VUZGRVJJTkcKKy8qCisgIEJ1ZmZlcmluZyBjb2RlIGFkZGVkIGJ5IGZkYyAxNSBEZWMgMjAwNSBm b3Igbm9uLVNTTCBjYXNlIG9ubHkgYmVjYXVzZSBIVFRQCisgIEdFVHMgd2VyZSBvcmRlcnMgb2Yg bWFnbml0dWRlIHRvbyBzbG93IGR1ZSB0byB0aGUgc2luZ2xlLWJ5dGUgcmVhZCgpcy4gIFRoZQor ICBmaWxlLWRlc2NyaXB0b3Igc3dhcHBpbmcgaXMgcHJldHR5IGdyb3NzLCBidXQgdGhlIG1vcmUg ZWxlZ2FudCBzb2x1dGlvbgorICAoY2FsbGluZyBhIG5ldHRjaGsoKSBsaWtlIHJvdXRpbmUgd2l0 aCB0aGUgZmQgYXMgYSBwYXJhbWV0ZXIpIGRvZXNuJ3Qgd29yaywKKyAgYmVjYXVzZSBuZXR0Y2hr KCkgcmVsaWVzIG9uIHRvbyBtYW55IG90aGVyIHJvdXRpbmVzIHRoYXQsIGxpa2UgaXRzZWxmLCBh cmUKKyAgaGFyZHdpcmVkIGZvciB0dHlmZC4KKyovCisgIGdldGZyb21idWZmZXI6CisJaWYgKC0t aHR0cF9jb3VudCA+PSAwKSB7CisJICAgIGMgPSBodHRwX2luYnVmW2h0dHBfYnVmcCsrXTsKKwkg ICAgeCA9IDE7CisJfSBlbHNlIHsKKwkgICAgaW50IHNhdmVmZDsKKwkgICAgc2F2ZWZkID0gdHR5 ZmQ7CisJICAgIHR0eWZkID0gaHR0cGZkOworCSAgICB4ID0gbmV0dGNoaygpOworCSAgICB0dHlm ZCA9IHNhdmVmZDsJCQorCSAgICBkZWJ1ZyhGMTAxLCJodHRwX2luYyBuZXR0Y2hrIiwiIix4KTsK KwkgICAgaWYgKHggPiBIVFRQX0lOQlVGTEVOKQorCSAgICAgIHggPSBIVFRQX0lOQlVGTEVOOwor I2lmZGVmIFRDUElQTElCCisJICAgIHggPSBzb2NrZXRfcmVhZChodHRwZmQsaHR0cF9pbmJ1Zix4 KTsKKyNlbHNlICAvKiBOb3QgVENQSVBMSUIgKi8KKwkgICAgeCA9IHJlYWQoaHR0cGZkLGh0dHBf aW5idWYseCk7CisjZW5kaWYJLyogVENQSVBMSUIgKi8KKwkgICAgaHR0cF9jb3VudCA9IDA7CisJ ICAgIGh0dHBfYnVmcCA9IDA7CisJICAgIGlmICh4ID4gMCkgeworCQljID0gaHR0cF9pbmJ1Zlto dHRwX2J1ZnArK107CisJCWh0dHBfY291bnQgPSB4IC0gMTsKKwkgICAgfQorCX0KKyNlbHNlICAv KiBOb3QgSFRUUF9CVUZGRVJJTkcgKi8KKyNpZmRlZiBUQ1BJUExJQgorICAgICAgICB4ID0gc29j a2V0X3JlYWQoaHR0cGZkLCZjLDEpOworI2Vsc2UgIC8qIE5vdCBUQ1BJUExJQiAqLworICAgICAg ICB4ID0gcmVhZChodHRwZmQsJmMsMSk7CisjZW5kaWYJLyogVENQSVBMSUIgKi8KKyNlbmRpZgkv KiBIVFRQX0JVRkZFUklORyAqLworCisgICAgICAgIGlmICh4IDw9IDApIHsKKyAgICAgICAgICAg IGludCBzX2Vycm5vID0gc29ja2V0X2Vycm5vOworICAgICAgICAgICAgZGVidWcoRjEwMSwidHRi dWZyIHNvY2tldF9yZWFkIiwiIix4KTsKKyAgICAgICAgICAgIGRlYnVnKEYxMDEsInR0YnVmciBz b2NrZXRfZXJybm8iLCIiLHNfZXJybm8pOworI2lmZGVmIE9TMgorICAgICAgICAgICAgaWYgKHgg PT0gMCB8fCBvczJzb2NrZXRlcnJvcihzX2Vycm5vKSA8IDApIHsKKyAgICAgICAgICAgICAgICBo dHRwX2Nsb3NlKCk7CisgICAgICAgICAgICAgICAgUmVsZWFzZVRDUElQTXV0ZXgoKTsKKyAgICAg ICAgICAgICAgICByZXR1cm4oLTIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgUmVsZWFz ZVRDUElQTXV0ZXgoKTsKKyAgICAgICAgICAgIHJldHVybigtMSk7CisjZWxzZSAvKiBPUzIgKi8K KyAgICAgICAgICAgIGh0dHBfY2xvc2UoKTsgICAgICAgICAgICAgICAgICAgICAgLyogKioqICoq KiAqLworICAgICAgICAgICAgcmV0dXJuKC0yKTsKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAg fQorICAgICAgICByZXR1cm4oYyk7Cit9CisKK3ZvaWQKKyNpZmRlZiBDS19BTlNJQworaHR0cF9z ZXRfY29kZV9yZXBseShjaGFyICogbXNnKQorI2Vsc2UKK2h0dHBfc2V0X2NvZGVfcmVwbHkobXNn KQorICAgIGNoYXIgKiBtc2c7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAgICBjaGFyICog cCA9IG1zZzsKKyAgICBjaGFyIGJ1ZlsxNl07CisgICAgaW50IGk9MDsKKworICAgIHdoaWxlICgg KnAgIT0gU1AgJiYgKnAgIT0gTlVMICkgeworICAgICAgICBidWZbaV0gPSAqcDsKKyAgICAgICAg cCsrOworICAgICAgICBpKys7CisgICAgfQorCisgICAgaHR0cF9jb2RlID0gYXRvaShidWYpOwor CisgICAgd2hpbGUgKCAqcCA9PSBTUCApCisgICAgICAgIHArKzsKKworICAgIGNrc3RybmNweSho dHRwX3JlcGx5X3N0cixwLEhUVFBCVUZMRU4pOworfQorCitpbnQKKyNpZmRlZiBDS19BTlNJQwor aHR0cF9nZXQoY2hhciAqIGFnZW50LCBjaGFyICoqIGhkcmxpc3QsIGNoYXIgKiB1c2VyLAorICAg ICAgICAgY2hhciAqIHB3ZCwgY2hhciBhcnJheSwgY2hhciAqIGxvY2FsLCBjaGFyICogcmVtb3Rl LAorICAgICAgICAgaW50IHN0ZGlvKQorI2Vsc2UKK2h0dHBfZ2V0KGFnZW50LCBoZHJsaXN0LCB1 c2VyLCBwd2QsIGFycmF5LCBsb2NhbCwgcmVtb3RlLCBzdGRpbykKKyAgICBjaGFyICogYWdlbnQ7 IGNoYXIgKiogaGRybGlzdDsgY2hhciAqIHVzZXI7CisgICAgY2hhciAqIHB3ZDsgY2hhciBhcnJh eTsgY2hhciAqIGxvY2FsOyBjaGFyICogcmVtb3RlOworICAgIGludCBzdGRpbzsKKyNlbmRpZiAv KiBDS19BTlNJQyAqLworeworICAgIGNoYXIgKiByZXF1ZXN0ID0gTlVMTDsKKyAgICBpbnQgICAg aSwgaiwgbGVuID0gMCwgaGRjbnQgPSAwLCByYyA9IDA7CisgICAgaW50ICAgIGNoOworICAgIGlu dCAgICBodHRwX2ZuZCA9IDA7CisgICAgY2hhciAgIGJ1ZltIVFRQQlVGTEVOXSwgKnA7CisgICAg aW50ICAgIG51bGxsaW5lOworI2lmZGVmIE9TMgorICAgIHN0cnVjdCB1dGltYnVmIHVfdDsKKyNl bHNlIC8qIE9TMiAqLworI2lmZGVmIFNZU1VUSU1FSAorICAgIHN0cnVjdCB1dGltYnVmIHVfdDsK KyNlbHNlCisgICAgc3RydWN0IHV0aW1idWYgeworICAgICAgICB0aW1lX3QgYXRpbWU7CisgICAg ICAgIHRpbWVfdCBtdGltZTsKKyAgICB9IHVfdDsKKyNlbmRpZiAvKiBTWVNVVElNSCAqLworI2Vu ZGlmIC8qIE9TMiAqLworICAgIHRpbWVfdCBtb2RfdCA9IDA7CisgICAgdGltZV90IHNydl90ID0g MDsKKyAgICB0aW1lX3QgbG9jYWxfdCA9IDA7CisgICAgY2hhciBwYXNzd2RbNjRdOworICAgIGNo YXIgYjY0aW5bMTI4XTsKKyAgICBjaGFyIGI2NG91dFsyNTZdOworICAgIGNoYXIgKiBoZWFkZXJz W0hUVFBIRUFEQ05UXTsKKyAgICBpbnQgY2xvc2Vjb24gPSAwOworICAgIGludCBjaHVua2VkID0g MDsKKyAgICBpbnQgemZpbGUgPSAwOworICAgIGludCBmaXJzdCA9IDE7CisKKyNpZmRlZiBERUJV RworICAgIGlmIChkZWJsb2cpIHsKKyAgICAgICAgZGVidWcoRjEwMSwiaHR0cF9nZXQgaHR0cGZk IiwiIixodHRwZmQpOworICAgICAgICBkZWJ1ZyhGMTEwLCJodHRwX2FnZW50IixhZ2VudCwwKTsK KyAgICAgICAgZGVidWcoRjExMCwiaHR0cF91c2VyIix1c2VyLDApOworICAgICAgICBkZWJ1ZyhG MTEwLCJodHRwX2xvY2FsIixsb2NhbCwwKTsKKyAgICAgICAgZGVidWcoRjExMCwiaHR0cF9yZW1v dGUiLHJlbW90ZSwwKTsKKyAgICB9CisjZW5kaWYgLyogREVCVUcgKi8KKyAgICBpZiAoIXJlbW90 ZSkgcmVtb3RlID0gIiI7CisKKyAgICBpZiAoaHR0cGZkID09IC0xKQorICAgICAgcmV0dXJuKC0x KTsKKworICAgIGlmIChhcnJheSkgeworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgSFRUUEhFQURD TlQ7IGkrKykKKyAgICAgICAgICBoZWFkZXJzW2ldID0gTlVMTDsKKyAgICB9CisgICAgbGVuID0g ODsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogR0VUICovCisgICAgbGVuICs9IHN0cmxl bihIVFRQX1ZFUlNJT04pOworICAgIGxlbiArPSBzdHJsZW4ocmVtb3RlKTsKKyAgICBsZW4gKz0g MTY7CisKKyAgICBpZiAoaGRybGlzdCkgeworICAgICAgICBmb3IgKGkgPSAwOyBoZHJsaXN0W2ld OyBpKyspCisgICAgICAgICAgICBsZW4gKz0gc3RybGVuKGhkcmxpc3RbaV0pICsgMjsKKyAgICB9 CisgICAgbGVuICs9IChpbnQpIHN0cmxlbihodHRwX2hvc3RfcG9ydCkgKyA4OworCisgICAgaWYg KGFnZW50KQorICAgICAgbGVuICs9IDEzICsgc3RybGVuKGFnZW50KTsKKyAgICBpZiAodXNlcikg eworICAgICAgICBpZiAoIXB3ZCkgeworICAgICAgICAgICAgcmVhZHBhc3MoIlBhc3N3b3JkOiAi LHBhc3N3ZCw2NCk7CisgICAgICAgICAgICBwd2QgPSBwYXNzd2Q7CisgICAgICAgIH0KKyAgICAg ICAgY2ttYWttc2coYjY0aW4sc2l6ZW9mKGI2NGluKSx1c2VyLCI6Iixwd2QsTlVMTCk7CisgICAg ICAgIGogPSBiOHRvYjY0KGI2NGluLHN0cmxlbihiNjRpbiksYjY0b3V0LDI1Nik7CisgICAgICAg IG1lbXNldChwd2QsMCxzdHJsZW4ocHdkKSk7ICAgICAgLyogTk9UIFBPUlRBQkxFICovCisgICAg ICAgIGlmIChqIDwgMCkKKyAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICBiNjRvdXRbal0g PSAnXDAnOworICAgICAgICBsZW4gKz0gaiArIDI0OworICAgIH0KKyNpZmRlZiBIVFRQX0NMT1NF CisgICAgbGVuICs9IDE5OyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ29ubmVjdGlvbjog Y2xvc2UgKi8KKyNlbmRpZgorICAgIGxlbiArPSAzOyAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIGJsYW5rIGxpbmUgKyBudWxsICovCisKKyAgICByZXF1ZXN0ID0gbWFsbG9jKGxlbik7Cisg ICAgaWYgKCFyZXF1ZXN0KQorICAgICAgcmV0dXJuKC0xKTsKKworICAgIHNwcmludGYocmVxdWVz dCwiR0VUICVzICVzXHJcbiIscmVtb3RlLEhUVFBfVkVSU0lPTik7ICAgICAgIC8qIHNhZmUgKi8K KyAgICBja3N0cm5jYXQocmVxdWVzdCwiSG9zdDogIiwgbGVuKTsKKyAgICBja3N0cm5jYXQocmVx dWVzdCxodHRwX2hvc3RfcG9ydCwgbGVuKTsKKyAgICBja3N0cm5jYXQocmVxdWVzdCwiXHJcbiIs bGVuKTsKKyAgICBpZiAoYWdlbnQpIHsKKyAgICAgICAgY2tzdHJuY2F0KHJlcXVlc3QsIlVzZXIt YWdlbnQ6ICIsbGVuKTsKKyAgICAgICAgY2tzdHJuY2F0KHJlcXVlc3QsYWdlbnQsbGVuKTsKKyAg ICAgICAgY2tzdHJuY2F0KHJlcXVlc3QsIlxyXG4iLGxlbik7CisgICAgfQorICAgIGlmICh1c2Vy KSB7CisgICAgICAgIGNrc3RybmNhdChyZXF1ZXN0LCJBdXRob3JpemF0aW9uOiBCYXNpYyAiLGxl bik7CisgICAgICAgIGNrc3RybmNhdChyZXF1ZXN0LGI2NG91dCxsZW4pOworICAgICAgICBja3N0 cm5jYXQocmVxdWVzdCwiXHJcbiIsbGVuKTsKKyAgICB9CisgICAgaWYgKCBoZHJsaXN0ICkgewor ICAgICAgICBmb3IgKGkgPSAwOyBoZHJsaXN0W2ldOyBpKyspIHsKKyAgICAgICAgICAgIGNrc3Ry bmNhdChyZXF1ZXN0LGhkcmxpc3RbaV0sbGVuKTsKKyAgICAgICAgICAgIGNrc3RybmNhdChyZXF1 ZXN0LCJcclxuIixsZW4pOworICAgICAgICB9CisgICAgfQorI2lmZGVmIEhUVFBfQ0xPU0UKKyAg ICBja3N0cm5jYXQocmVxdWVzdCwiQ29ubmVjdGlvbjogY2xvc2VcclxuIixsZW4pOworI2VuZGlm CisgICAgY2tzdHJuY2F0KHJlcXVlc3QsIlxyXG4iLGxlbik7CisKKyAgZ2V0cmVxOgorICAgIGlm IChodHRwX3RvbCgoQ0hBUiAqKXJlcXVlc3Qsc3RybGVuKHJlcXVlc3QpKSA8IDApCisgICAgewor ICAgICAgICBodHRwX2Nsb3NlKCk7CisgICAgICAgIGlmICggZmlyc3QgKSB7CisgICAgICAgICAg ICBmaXJzdC0tOworICAgICAgICAgICAgaHR0cF9yZW9wZW4oKTsKKyAgICAgICAgICAgIGdvdG8g Z2V0cmVxOworICAgICAgICB9CisgICAgICAgIHJjID0gLTE7CisgICAgICAgIGdvdG8gZ2V0ZXhp dDsKKyAgICB9CisKKyAgICAvKiBQcm9jZXNzIHRoZSBoZWFkZXJzICovCisgICAgbG9jYWxfdCA9 IHRpbWUoTlVMTCk7CisgICAgbnVsbGxpbmUgPSAwOworICAgIGkgPSAwOworICAgIGxlbiA9IC0x OworICAgIHdoaWxlICghbnVsbGxpbmUgJiYgKGNoID0gaHR0cF9pbmMoMCkpID49IDAgJiYgaSA8 IEhUVFBCVUZMRU4pIHsKKyAgICAgICAgYnVmW2ldID0gY2g7CisgICAgICAgIGlmICggYnVmW2ld ID09IDEwICkgeyAvKiBmb3VuZCBlbmQgb2YgbGluZSAqLworICAgICAgICAgICAgaWYgKGkgPiAw ICYmIGJ1ZltpLTFdID09IDEzKQorICAgICAgICAgICAgICBpLS07CisgICAgICAgICAgICBpZiAo aSA8IDEpCisgICAgICAgICAgICAgIG51bGxsaW5lID0gMTsKKyAgICAgICAgICAgIGJ1ZltpXSA9 ICdcMCc7CisgICAgICAgICAgICBpZiAoYXJyYXkgJiYgIW51bGxsaW5lICYmIGhkY250IDwgSFRU UEhFQURDTlQpCisgICAgICAgICAgICAgIG1ha2VzdHIoJmhlYWRlcnNbaGRjbnQrK10sYnVmKTsK KyAgICAgICAgICAgIGlmICghY2tzdHJjbXAoYnVmLCJIVFRQIiw0LDApKSB7CisgICAgICAgICAg ICAgICAgaHR0cF9mbmQgPSAxOworICAgICAgICAgICAgICAgIGogPSBja2luZGV4KCIgIixidWYs MCwwLDApOworICAgICAgICAgICAgICAgIHAgPSAmYnVmW2pdOworICAgICAgICAgICAgICAgIHdo aWxlICggaXNzcGFjZSgqcCkgKQorICAgICAgICAgICAgICAgICAgcCsrOworICAgICAgICAgICAg ICAgIHN3aXRjaCAoIHBbMF0gKSB7CisgICAgICAgICAgICAgICAgICBjYXNlICcxJzogICAgICAg ICAgICAgLyogSW5mb3JtYXRpb25hbCBtZXNzYWdlICovCisgICAgICAgICAgICAgICAgICAgIGJy ZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSAnMic6ICAgICAgICAgICAgIC8qIFN1Y2Nlc3Mg Ki8KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlICcz JzogICAgICAgICAgICAgLyogUmVkaXJlY3Rpb24gKi8KKyAgICAgICAgICAgICAgICAgIGNhc2Ug JzQnOiAgICAgICAgICAgICAvKiBDbGllbnQgZmFpbHVyZSAqLworICAgICAgICAgICAgICAgICAg Y2FzZSAnNSc6ICAgICAgICAgICAgIC8qIFNlcnZlciBmYWlsdXJlICovCisgICAgICAgICAgICAg ICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgLyogVW5rbm93biAqLworICAgICAgICAgICAgICAg ICAgICBpZiAoIXF1aWV0KQorICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiRmFpbHVyZTog U2VydmVyIHJlcG9ydHMgJXNcbiIscCk7CisgICAgICAgICAgICAgICAgICAgIHJjID0gLTE7Cisg ICAgICAgICAgICAgICAgICAgIGxvY2FsID0gTlVMTDsKKyAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgICAgaHR0cF9zZXRfY29kZV9yZXBseShwKTsKKyNpZmRlZiBDTURBVEUyVE0KKyAg ICAgICAgICAgIH0gZWxzZSBpZiAoIWNrc3RyY21wKGJ1ZiwiTGFzdC1Nb2RpZmllZCIsMTMsMCkp IHsKKyAgICAgICAgICAgICAgICBtb2RfdCA9IGh0dHBfZGF0ZSgmYnVmWzE1XSk7CisgICAgICAg ICAgICB9IGVsc2UgaWYgKCFja3N0cmNtcChidWYsIkRhdGUiLDQsMCkpIHsKKyAgICAgICAgICAg ICAgICBzcnZfdCA9IGh0dHBfZGF0ZSgmYnVmWzRdKTsKKyNlbmRpZiAvKiBDTURBVEUyVE0gKi8K KyAgICAgICAgICAgIH0gZWxzZSBpZiAoIWNrc3RyY21wKGJ1ZiwiQ29ubmVjdGlvbjoiLDExLDAp KSB7CisgICAgICAgICAgICAgICAgaWYgKCBja2luZGV4KCJjbG9zZSIsYnVmLDExLDAsMCkgIT0g MCApCisgICAgICAgICAgICAgICAgICAgIGNsb3NlY29uID0gMTsKKyAgICAgICAgICAgIH0gZWxz ZSBpZiAoIWNrc3RyY21wKGJ1ZiwiQ29udGVudC1MZW5ndGg6IiwxNSwwKSkgeworICAgICAgICAg ICAgICAgIGxlbiA9IGF0b2koJmJ1ZlsxNl0pOworICAgICAgICAgICAgfSBlbHNlIGlmICghY2tz dHJjbXAoYnVmLCJUcmFuc2Zlci1FbmNvZGluZzoiLDE4LDApKSB7CisgICAgICAgICAgICAgICAg aWYgKCBja2luZGV4KCJjaHVua2VkIixidWYsMTgsMCwwKSAhPSAwICkKKyAgICAgICAgICAgICAg ICAgICAgY2h1bmtlZCA9IDE7CisJCWRlYnVnKEYxMDEsImh0dHBfZ2V0IGNodW5rZWQiLCIiLGNo dW5rZWQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaSA9IDA7CisgICAgICAgIH0gZWxz ZSB7CisgICAgICAgICAgICBpKys7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGNoIDwgMCAm JiBmaXJzdCkgeworICAgICAgICBmaXJzdC0tOworICAgICAgICBodHRwX2Nsb3NlKCk7CisgICAg ICAgIGh0dHBfcmVvcGVuKCk7CisgICAgICAgIGdvdG8gZ2V0cmVxOworICAgIH0KKyAgICBpZiAo aHR0cF9mbmQgPT0gMCkgeworICAgICAgICByYyA9IC0xOworICAgICAgICBjbG9zZWNvbiA9IDE7 CisgICAgICAgIGdvdG8gZ2V0ZXhpdDsKKyAgICB9CisKKyAgICAvKiBOb3cgd2UgaGF2ZSB0aGUg Y29udGVudHMgb2YgdGhlIGZpbGUgKi8KKyAgICBpZiAoIGxvY2FsICYmIGxvY2FsWzBdICkgewor ICAgICAgICBpZiAoem9wZW5vKFpPRklMRSxsb2NhbCxOVUxMLE5VTEwpKQorICAgICAgICAgICAg emZpbGUgPSAxOworICAgICAgICBlbHNlCisgICAgICAgICAgICByYyA9IC0xOworICAgIH0KKwor ICAgIGlmICggY2h1bmtlZCApIHsKKyAgICAgICAgd2hpbGUgKChsZW4gPSBodHRwX2dldF9jaHVu a19sZW4oKSkgPiAwKSB7CisgICAgICAgICAgICB3aGlsZSAobGVuICYmIChjaCA9IGh0dHBfaW5j KDApKSA+PSAwKSB7CisgICAgICAgICAgICAgICAgbGVuLS07CisgICAgICAgICAgICAgICAgaWYg KCB6ZmlsZSApCisgICAgICAgICAgICAgICAgICAgIHpjaG91dChaT0ZJTEUsKENIQVIpY2gpOwor ICAgICAgICAgICAgICAgIGlmICggc3RkaW8gKQorICAgICAgICAgICAgICAgICAgICBjb25vYygo Q0hBUiljaCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoKGNoID0gaHR0cF9pbmMo MCkpICE9IENSKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKChjaCA9 IGh0dHBfaW5jKDApKSAhPSBMRikKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor ICAgIH0gZWxzZSB7CisgICAgICAgIHdoaWxlIChsZW4gJiYgKGNoID0gaHR0cF9pbmMoMCkpID49 IDApIHsKKyAgICAgICAgICAgIGxlbi0tOworICAgICAgICAgICAgaWYgKCB6ZmlsZSApCisgICAg ICAgICAgICAgICAgemNob3V0KFpPRklMRSwoQ0hBUiljaCk7CisgICAgICAgICAgICBpZiAoIHN0 ZGlvICkKKyAgICAgICAgICAgICAgICBjb25vYygoQ0hBUiljaCk7CisgICAgICAgIH0KKyAgICB9 CisKKyAgICBpZiAoIHpmaWxlICkKKyAgICAgICAgemNsb3NlKFpPRklMRSk7CisKKyAgICBpZiAo IGNodW5rZWQgKSB7ICAgICAgICAgICAgLyogUGFyc2UgVHJhaWxpbmcgSGVhZGVycyAqLworICAg ICAgICBudWxsbGluZSA9IDA7CisgICAgICAgIHdoaWxlICghbnVsbGxpbmUgJiYgKGNoID0gaHR0 cF9pbmMoMCkpID49IDAgJiYgaSA8IEhUVFBCVUZMRU4pIHsKKyAgICAgICAgICAgIGJ1ZltpXSA9 IGNoOworICAgICAgICAgICAgaWYgKCBidWZbaV0gPT0gMTAgKSB7IC8qIGZvdW5kIGVuZCBvZiBs aW5lICovCisgICAgICAgICAgICAgICAgaWYgKGkgPiAwICYmIGJ1ZltpLTFdID09IDEzKQorICAg ICAgICAgICAgICAgICAgaS0tOworICAgICAgICAgICAgICAgIGlmIChpIDwgMSkKKyAgICAgICAg ICAgICAgICAgIG51bGxsaW5lID0gMTsKKyAgICAgICAgICAgICAgICBidWZbaV0gPSAnXDAnOwor ICAgICAgICAgICAgICAgIGlmIChhcnJheSAmJiAhbnVsbGxpbmUgJiYgaGRjbnQgPCBIVFRQSEVB RENOVCkKKyAgICAgICAgICAgICAgICAgICAgbWFrZXN0cigmaGVhZGVyc1toZGNudCsrXSxidWYp OworI2lmZGVmIENNREFURTJUTQorICAgICAgICAgICAgICAgIGlmICghY2tzdHJjbXAoYnVmLCJM YXN0LU1vZGlmaWVkIiwxMywwKSkgeworICAgICAgICAgICAgICAgICAgICBtb2RfdCA9IGh0dHBf ZGF0ZSgmYnVmWzE1XSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghY2tzdHJjbXAoYnVm LCJEYXRlIiw0LDApKSB7CisgICAgICAgICAgICAgICAgICAgIHNydl90ID0gaHR0cF9kYXRlKCZi dWZbNF0pOworICAgICAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBDTURBVEUyVE0gKi8KKyAgICAg ICAgICAgICAgICBlbHNlIGlmICghY2tzdHJjbXAoYnVmLCJDb25uZWN0aW9uOiIsMTEsMCkpIHsK KyAgICAgICAgICAgICAgICAgICAgaWYgKCBja2luZGV4KCJjbG9zZSIsYnVmLDExLDAsMCkgIT0g MCApCisgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZWNvbiA9IDE7CisgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICAgIGkgPSAwOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg ICAgICAgICAgICBpKys7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBp ZiAoIHpmaWxlICkgeyAgICAgICAgICAgICAgLyogU2V0IHRpbWVzdGFtcCAqLworI2lmbmRlZiBO T1NFVFRJTUUKKyNpZmRlZiBPUzIKKyAgICAgICAgdV90LmFjdGltZSA9IHNydl90ID8gc3J2X3Qg OiBsb2NhbF90OworICAgICAgICB1X3QubW9kdGltZSA9IG1vZF90ID8gbW9kX3QgOiBsb2NhbF90 OworI2Vsc2UgLyogT1MyICovCisjaWZkZWYgU1lTVVRJTUVICisgICAgICAgIHVfdC5hY3RpbWUg PSBzcnZfdCA/IHNydl90IDogbG9jYWxfdDsKKyAgICAgICAgdV90Lm1vZHRpbWUgPSBtb2RfdCA/ IG1vZF90IDogbG9jYWxfdDsKKyNlbHNlCisjaWZkZWYgQlNENDQKKyAgICAgICAgdV90WzBdLnR2 X3NlYyA9IHNydl90ID8gc3J2X3QgOiBsb2NhbF90OworICAgICAgICB1X3RbMV0udHZfc2VjID0g bW9kX3QgPyBtb2RfdCA6IGxvY2FsX3Q7CisjZWxzZQorICAgICAgICB1X3QubXRpbWUgPSBzcnZf dCA/IHNydl90IDogbG9jYWxfdDsKKyAgICAgICAgdV90LmF0aW1lID0gbW9kX3QgPyBtb2RfdCA6 IGxvY2FsX3Q7CisjZW5kaWYgLyogQlNENDQgKi8KKyNlbmRpZiAvKiBTWVNVVElNRUggKi8KKyNl bmRpZiAvKiBPUzIgKi8KKyAgICAgICAgICAgIHV0aW1lKGxvY2FsLCZ1X3QpOworI2VuZGlmIC8q IE5PU0VUVElNRSAqLworICAgIH0KKworICBnZXRleGl0OgorICAgIGlmIChhcnJheSkKKyAgICAg IGh0dHBfbWthcnJheShoZWFkZXJzLGhkY250LGFycmF5KTsKKworICAgIGlmICggY2xvc2Vjb24g KQorICAgICAgICBodHRwX2Nsb3NlKCk7CisgICAgZnJlZShyZXF1ZXN0KTsKKyAgICBmb3IgKGkg PSAwOyBpIDwgaGRjbnQ7IGkrKykgeworICAgICAgICBpZiAoaGVhZGVyc1tpXSkKKyAgICAgICAg ICBmcmVlKGhlYWRlcnNbaV0pOworICAgIH0KKyAgICByZXR1cm4ocmMpOworfQorCitpbnQKKyNp ZmRlZiBDS19BTlNJQworaHR0cF9oZWFkKGNoYXIgKiBhZ2VudCwgY2hhciAqKiBoZHJsaXN0LCBj aGFyICogdXNlciwKKyAgICAgICAgICBjaGFyICogcHdkLCBjaGFyIGFycmF5LCBjaGFyICogbG9j YWwsIGNoYXIgKiByZW1vdGUsCisgICAgICAgICAgaW50IHN0ZGlvKQorI2Vsc2UKK2h0dHBfaGVh ZChhZ2VudCwgaGRybGlzdCwgdXNlciwgcHdkLCBhcnJheSwgbG9jYWwsIHJlbW90ZSwgc3RkaW8p CisgICAgY2hhciAqIGFnZW50OyBjaGFyICoqIGhkcmxpc3Q7IGNoYXIgKiB1c2VyOworICAgIGNo YXIgKiBwd2Q7IGNoYXIgYXJyYXk7IGNoYXIgKiBsb2NhbDsgY2hhciAqIHJlbW90ZTsKKyAgICBp bnQgc3RkaW87CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAgICBjaGFyICogcmVxdWVzdCA9 IE5VTEw7CisgICAgaW50ICAgIGksIGosIGxlbiA9IDAsIGhkY250ID0gMCwgcmMgPSAwOworICAg IGludCAgICBjaDsKKyAgICBpbnQgICAgaHR0cF9mbmQgPSAwOworICAgIGNoYXIgICBidWZbSFRU UEJVRkxFTl0sICpwOworICAgIGludCAgICBudWxsbGluZTsKKyAgICB0aW1lX3QgbW9kX3Q7Cisg ICAgdGltZV90IHNydl90OworICAgIHRpbWVfdCBsb2NhbF90OworICAgIGNoYXIgcGFzc3dkWzY0 XTsKKyAgICBjaGFyIGI2NGluWzEyOF07CisgICAgY2hhciBiNjRvdXRbMjU2XTsKKyAgICBjaGFy ICogaGVhZGVyc1tIVFRQSEVBRENOVF07CisgICAgaW50ICBjbG9zZWNvbiA9IDA7CisgICAgaW50 ICBmaXJzdCA9IDE7CisKKyAgICBpZiAoaHR0cGZkID09IC0xKQorICAgICAgcmV0dXJuKC0xKTsK KworICAgIGlmIChhcnJheSkgeworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgSFRUUEhFQURDTlQ7 IGkrKykKKyAgICAgICAgICBoZWFkZXJzW2ldID0gTlVMTDsKKyAgICB9CisgICAgbGVuID0gOTsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSEVBRCAqLworICAgIGxlbiArPSBzdHJsZW4o SFRUUF9WRVJTSU9OKTsKKyAgICBsZW4gKz0gc3RybGVuKHJlbW90ZSk7CisgICAgbGVuICs9IDE2 OworCisgICAgaWYgKCBoZHJsaXN0ICkgeworICAgICAgICBmb3IgKGkgPSAwOyBoZHJsaXN0W2ld OyBpKyspCisgICAgICAgICAgICBsZW4gKz0gc3RybGVuKGhkcmxpc3RbaV0pICsgMjsKKyAgICB9 CisgICAgbGVuICs9IHN0cmxlbihodHRwX2hvc3RfcG9ydCkgKyA4OworCisgICAgaWYgKGFnZW50 KQorICAgICAgbGVuICs9IDEzICsgc3RybGVuKGFnZW50KTsKKyAgICBpZiAodXNlcikgeworICAg ICAgICBpZiAoIXB3ZCkgeworICAgICAgICAgICAgcmVhZHBhc3MoIlBhc3N3b3JkOiAiLHBhc3N3 ZCw2NCk7CisgICAgICAgICAgICBwd2QgPSBwYXNzd2Q7CisgICAgICAgIH0KKyAgICAgICAgY2tt YWttc2coYjY0aW4sc2l6ZW9mKGI2NGluKSx1c2VyLCI6Iixwd2QsTlVMTCk7CisgICAgICAgIGog PSBiOHRvYjY0KGI2NGluLHN0cmxlbihiNjRpbiksYjY0b3V0LDI1Nik7CisgICAgICAgIG1lbXNl dChwd2QsMCxzdHJsZW4ocHdkKSk7ICAgICAgLyogTk9UIFBPUlRBQkxFICovCisgICAgICAgIGlm IChqIDwgMCkKKyAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICBiNjRvdXRbal0gPSAnXDAn OworICAgICAgICBsZW4gKz0gaiArIDI0OworICAgIH0KKyNpZmRlZiBIVFRQX0NMT1NFCisgICAg bGVuICs9IDE5OyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ29ubmVjdGlvbjogY2xvc2Ug Ki8KKyNlbmRpZgorICAgIGxlbiArPSAzOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGJs YW5rIGxpbmUgKyBudWxsICovCisKKyAgICByZXF1ZXN0ID0gKGNoYXIgKiltYWxsb2MobGVuKTsK KyAgICBpZiAoIXJlcXVlc3QpCisgICAgICByZXR1cm4oLTEpOworCisgICAgc3ByaW50ZihyZXF1 ZXN0LCJIRUFEICVzICVzXHJcbiIscmVtb3RlLEhUVFBfVkVSU0lPTik7CisgICAgY2tzdHJuY2F0 KHJlcXVlc3QsIkhvc3Q6ICIsIGxlbik7CisgICAgY2tzdHJuY2F0KHJlcXVlc3QsaHR0cF9ob3N0 X3BvcnQsIGxlbik7CisgICAgY2tzdHJuY2F0KHJlcXVlc3QsIlxyXG4iLGxlbik7CisgICAgaWYg KGFnZW50KSB7CisgICAgICAgIGNrc3RybmNhdChyZXF1ZXN0LCJVc2VyLWFnZW50OiAiLGxlbik7 CisgICAgICAgIGNrc3RybmNhdChyZXF1ZXN0LGFnZW50LGxlbik7CisgICAgICAgIGNrc3RybmNh dChyZXF1ZXN0LCJcclxuIixsZW4pOworICAgIH0KKyAgICBpZiAodXNlcikgeworICAgICAgICBj a3N0cm5jYXQocmVxdWVzdCwiQXV0aG9yaXphdGlvbjogQmFzaWMgIixsZW4pOworICAgICAgICBj a3N0cm5jYXQocmVxdWVzdCxiNjRvdXQsbGVuKTsKKyAgICAgICAgY2tzdHJuY2F0KHJlcXVlc3Qs IlxyXG4iLGxlbik7CisgICAgfQorICAgIGlmICggaGRybGlzdCApIHsKKyAgICAgICAgZm9yIChp ID0gMDsgaGRybGlzdFtpXTsgaSsrKSB7CisgICAgICAgICAgICBja3N0cm5jYXQocmVxdWVzdCxo ZHJsaXN0W2ldLGxlbik7CisgICAgICAgICAgICBja3N0cm5jYXQocmVxdWVzdCwiXHJcbiIsbGVu KTsKKyAgICAgICAgfQorICAgIH0KKyNpZmRlZiBIVFRQX0NMT1NFCisgICAgY2tzdHJuY2F0KHJl cXVlc3QsIkNvbm5lY3Rpb246IGNsb3NlXHJcbiIsbGVuKTsKKyNlbmRpZgorICAgIGNrc3RybmNh dChyZXF1ZXN0LCJcclxuIixsZW4pOworCisgICAgaWYgKCBsb2NhbCAmJiBsb2NhbFswXSApIHsK KyAgICAgICAgaWYgKCF6b3Blbm8oWk9GSUxFLGxvY2FsLE5VTEwsTlVMTCkpIHsKKyAgICAgICAg ICAgIGZyZWUocmVxdWVzdCk7CisgICAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICB9Cisg ICAgfQorCisgIGhlYWRyZXE6CisgICAgaWYgKGh0dHBfdG9sKChDSEFSICopcmVxdWVzdCxzdHJs ZW4ocmVxdWVzdCkpIDwgMCkKKyAgICB7CisgICAgICAgIGh0dHBfY2xvc2UoKTsKKyAgICAgICAg aWYgKCBmaXJzdCApIHsKKyAgICAgICAgICAgIGZpcnN0LS07CisgICAgICAgICAgICBodHRwX3Jl b3BlbigpOworICAgICAgICAgICAgZ290byBoZWFkcmVxOworICAgICAgICB9CisgICAgICAgIHJj ID0gLTE7CisgICAgICAgIGdvdG8gaGVhZGV4aXQ7CisgICAgfQorCisgICAgLyogUHJvY2VzcyB0 aGUgaGVhZGVycyAqLworCisgICAgbG9jYWxfdCA9IHRpbWUoTlVMTCk7CisgICAgbnVsbGxpbmUg PSAwOworICAgIGkgPSAwOworICAgIHdoaWxlICghbnVsbGxpbmUgJiYgKGNoID0gaHR0cF9pbmMo MCkpID49IDAgJiYgaSA8IEhUVFBCVUZMRU4pIHsKKyAgICAgICAgYnVmW2ldID0gY2g7CisgICAg ICAgIGlmIChidWZbaV0gPT0gMTApIHsgICAgICAgICAgICAgLyogZm91bmQgZW5kIG9mIGxpbmUg Ki8KKyAgICAgICAgICAgIGlmIChpID4gMCAmJiBidWZbaS0xXSA9PSAxMykKKyAgICAgICAgICAg ICAgaS0tOworICAgICAgICAgICAgaWYgKGkgPCAxKQorICAgICAgICAgICAgICBudWxsbGluZSA9 IDE7CisgICAgICAgICAgICBidWZbaV0gPSAnXDAnOworICAgICAgICAgICAgaWYgKGFycmF5ICYm ICFudWxsbGluZSAmJiBoZGNudCA8IEhUVFBIRUFEQ05UKQorICAgICAgICAgICAgICBtYWtlc3Ry KCZoZWFkZXJzW2hkY250KytdLGJ1Zik7CisgICAgICAgICAgICBpZiAoIWNrc3RyY21wKGJ1Ziwi SFRUUCIsNCwwKSkgeworICAgICAgICAgICAgICAgIGh0dHBfZm5kID0gMTsKKyAgICAgICAgICAg ICAgICBqID0gY2tpbmRleCgiICIsYnVmLDAsMCwwKTsKKyAgICAgICAgICAgICAgICBwID0gJmJ1 ZltqXTsKKyAgICAgICAgICAgICAgICB3aGlsZSAoaXNzcGFjZSgqcCkpCisgICAgICAgICAgICAg ICAgICBwKys7CisgICAgICAgICAgICAgICAgc3dpdGNoIChwWzBdKSB7CisgICAgICAgICAgICAg ICAgICBjYXNlICcxJzogICAgICAgICAgICAgLyogSW5mb3JtYXRpb25hbCBtZXNzYWdlICovCisg ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSAnMic6ICAg ICAgICAgICAgIC8qIFN1Y2Nlc3MgKi8KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICAgICAgICAgICBjYXNlICczJzogICAgICAgICAgICAgLyogUmVkaXJlY3Rpb24gKi8KKyAg ICAgICAgICAgICAgICAgIGNhc2UgJzQnOiAgICAgICAgICAgICAvKiBDbGllbnQgZmFpbHVyZSAq LworICAgICAgICAgICAgICAgICAgY2FzZSAnNSc6ICAgICAgICAgICAgIC8qIFNlcnZlciBmYWls dXJlICovCisgICAgICAgICAgICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgLyogVW5rbm93 biAqLworICAgICAgICAgICAgICAgICAgICBpZiAoIXF1aWV0KQorICAgICAgICAgICAgICAgICAg ICAgIHByaW50ZigiRmFpbHVyZTogU2VydmVyIHJlcG9ydHMgJXNcbiIscCk7CisgICAgICAgICAg ICAgICAgICAgIHJjID0gLTE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGh0 dHBfc2V0X2NvZGVfcmVwbHkocCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg ICAgIGlmICghY2tzdHJjbXAoYnVmLCJDb25uZWN0aW9uOiIsMTEsMCkpIHsKKyAgICAgICAgICAg ICAgICAgICAgaWYgKCBja2luZGV4KCJjbG9zZSIsYnVmLDExLDAsMCkgIT0gMCApCisgICAgICAg ICAgICAgICAgICAgICAgICBjbG9zZWNvbiA9IDE7CisgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICAgIGlmICggbG9jYWwgJiYgbG9jYWxbMF0gKSB7CisgICAgICAgICAgICAgICAgICAg IHpzb3V0KFpPRklMRSxidWYpOworICAgICAgICAgICAgICAgICAgICB6c291dChaT0ZJTEUsIlxy XG4iKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHN0ZGlvKQorICAg ICAgICAgICAgICAgICAgICBwcmludGYoIiVzXHJcbiIsYnVmKTsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIGkgPSAwOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaSsrOworICAg ICAgICB9CisgICAgfQorICAgIGlmIChjaCA8IDAgJiYgZmlyc3QpIHsKKyAgICAgICAgZmlyc3Qt LTsKKyAgICAgICAgaHR0cF9jbG9zZSgpOworICAgICAgICBodHRwX3Jlb3BlbigpOworICAgICAg ICBnb3RvIGhlYWRyZXE7CisgICAgfQorICAgIGlmICggaHR0cF9mbmQgPT0gMCApCisgICAgICAg IHJjID0gLTE7CisKKyAgICBpZiAoYXJyYXkpCisgICAgICBodHRwX21rYXJyYXkoaGVhZGVycyxo ZGNudCxhcnJheSk7CisKKyAgaGVhZGV4aXQ6CisgICAgaWYgKCBsb2NhbCAmJiBsb2NhbFswXSAp CisgICAgICAgIHpjbG9zZShaT0ZJTEUpOworICAgIGlmIChjbG9zZWNvbikKKyAgICAgICAgaHR0 cF9jbG9zZSgpOworICAgIGZyZWUocmVxdWVzdCk7CisgICAgZm9yIChpID0gMDsgaSA8IGhkY250 OyBpKyspIHsKKyAgICAgICAgaWYgKGhlYWRlcnNbaV0pCisgICAgICAgICAgZnJlZShoZWFkZXJz W2ldKTsKKyAgICB9CisgICAgcmV0dXJuKHJjKTsKK30KKworaW50CisjaWZkZWYgQ0tfQU5TSUMK K2h0dHBfaW5kZXgoY2hhciAqIGFnZW50LCBjaGFyICoqIGhkcmxpc3QsIGNoYXIgKiB1c2VyLCBj aGFyICogcHdkLAorICAgICAgICAgICAgIGNoYXIgYXJyYXksIGNoYXIgKiBsb2NhbCwgY2hhciAq IHJlbW90ZSwgaW50IHN0ZGlvKQorI2Vsc2UKK2h0dHBfaW5kZXgoYWdlbnQsIGhkcmxpc3QsIHVz ZXIsIHB3ZCwgYXJyYXksIGxvY2FsLCByZW1vdGUsIHN0ZGlvKQorICAgIGNoYXIgKiBhZ2VudDsg Y2hhciAqKiBoZHJsaXN0OyBjaGFyICogdXNlcjsgY2hhciAqIHB3ZDsKKyAgICBjaGFyIGFycmF5 OyBjaGFyICogbG9jYWw7IGNoYXIgKiByZW1vdGU7IGludCBzdGRpbzsKKyNlbmRpZiAvKiBDS19B TlNJQyAqLworeworICAgIGNoYXIgKiByZXF1ZXN0ID0gTlVMTDsKKyAgICBpbnQgICAgaSwgaiwg bGVuID0gMCwgaGRjbnQgPSAwLCByYyA9IDA7CisgICAgaW50ICAgIGNoOworICAgIGludCAgICBo dHRwX2ZuZCA9IDA7CisgICAgY2hhciAgIGJ1ZltIVFRQQlVGTEVOXSwgKnA7CisgICAgaW50ICAg IG51bGxsaW5lOworICAgIHRpbWVfdCBtb2RfdDsKKyAgICB0aW1lX3Qgc3J2X3Q7CisgICAgdGlt ZV90IGxvY2FsX3Q7CisgICAgY2hhciBwYXNzd2RbNjRdOworICAgIGNoYXIgYjY0aW5bMTI4XTsK KyAgICBjaGFyIGI2NG91dFsyNTZdOworICAgIGNoYXIgKiBoZWFkZXJzW0hUVFBIRUFEQ05UXTsK KyAgICBpbnQgIGNsb3NlY29uID0gMDsKKyAgICBpbnQgIGNodW5rZWQgPSAwOworICAgIGludCAg emZpbGUgPSAwOworICAgIGludCAgZmlyc3QgPSAxOworCisgICAgaWYgKGh0dHBmZCA9PSAtMSkK KyAgICAgIHJldHVybigtMSk7CisKKyAgICBpZiAoYXJyYXkpIHsKKyAgICAgICAgZm9yIChpID0g MDsgaSA8IEhUVFBIRUFEQ05UOyBpKyspCisgICAgICAgICAgaGVhZGVyc1tpXSA9IE5VTEw7Cisg ICAgfQorICAgIGxlbiA9IDEwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJTkRFWCAq LworICAgIGxlbiArPSBzdHJsZW4oSFRUUF9WRVJTSU9OKTsKKyAgICBsZW4gKz0gc3RybGVuKHJl bW90ZSk7CisgICAgbGVuICs9IDE2OworCisgICAgaWYgKCBoZHJsaXN0ICkgeworICAgICAgICBm b3IgKGkgPSAwOyBoZHJsaXN0W2ldOyBpKyspCisgICAgICAgICAgICBsZW4gKz0gc3RybGVuKGhk cmxpc3RbaV0pICsgMjsKKyAgICB9CisgICAgbGVuICs9IHN0cmxlbihodHRwX2hvc3RfcG9ydCkg KyA4OworCisgICAgaWYgKGFnZW50KQorICAgICAgICBsZW4gKz0gMTMgKyBzdHJsZW4oYWdlbnQp OworICAgIGlmICh1c2VyKSB7CisgICAgICAgIGlmICghcHdkKSB7CisgICAgICAgICAgICByZWFk cGFzcygiUGFzc3dvcmQ6ICIscGFzc3dkLDY0KTsKKyAgICAgICAgICAgIHB3ZCA9IHBhc3N3ZDsK KyAgICAgICAgfQorICAgICAgICBja21ha21zZyhiNjRpbixzaXplb2YoYjY0aW4pLHVzZXIsIjoi LHB3ZCxOVUxMKTsKKyAgICAgICAgaiA9IGI4dG9iNjQoYjY0aW4sc3RybGVuKGI2NGluKSxiNjRv dXQsMjU2KTsKKyAgICAgICAgbWVtc2V0KHB3ZCwwLHN0cmxlbihwd2QpKTsKKyAgICAgICAgaWYg KGogPCAwKQorICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAgIGI2NG91dFtqXSA9ICdcMCc7 CisgICAgICAgIGxlbiArPSBqICsgMjQ7CisgICAgfQorI2lmZGVmIEhUVFBfQ0xPU0UKKyAgICBs ZW4gKz0gMTk7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDb25uZWN0aW9uOiBjbG9zZSAq LworI2VuZGlmCisgICAgbGVuICs9IDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYmxh bmsgbGluZSArIG51bGwgKi8KKworICAgIHJlcXVlc3QgPSBtYWxsb2MobGVuKTsKKyAgICBpZiAo IXJlcXVlc3QpCisgICAgICByZXR1cm4oLTEpOworCisgICAgc3ByaW50ZihyZXF1ZXN0LCJJTkRF WCAlc1xyXG4iLEhUVFBfVkVSU0lPTik7CisgICAgY2tzdHJuY2F0KHJlcXVlc3QsIkhvc3Q6ICIs IGxlbik7CisgICAgY2tzdHJuY2F0KHJlcXVlc3QsaHR0cF9ob3N0X3BvcnQsIGxlbik7CisgICAg Y2tzdHJuY2F0KHJlcXVlc3QsIlxyXG4iLGxlbik7CisgICAgaWYgKGFnZW50KSB7CisgICAgICAg IGNrc3RybmNhdChyZXF1ZXN0LCJVc2VyLWFnZW50OiAiLGxlbik7CisgICAgICAgIGNrc3RybmNh dChyZXF1ZXN0LGFnZW50LGxlbik7CisgICAgICAgIGNrc3RybmNhdChyZXF1ZXN0LCJcclxuIixs ZW4pOworICAgIH0KKyAgICBpZiAodXNlcikgeworICAgICAgICBja3N0cm5jYXQocmVxdWVzdCwi QXV0aG9yaXphdGlvbjogQmFzaWMgIixsZW4pOworICAgICAgICBja3N0cm5jYXQocmVxdWVzdCxi NjRvdXQsbGVuKTsKKyAgICAgICAgY2tzdHJuY2F0KHJlcXVlc3QsIlxyXG4iLGxlbik7CisgICAg fQorICAgIGlmICggaGRybGlzdCApIHsKKyAgICAgICAgZm9yIChpID0gMDsgaGRybGlzdFtpXTsg aSsrKSB7CisgICAgICAgICAgICBja3N0cm5jYXQocmVxdWVzdCxoZHJsaXN0W2ldLGxlbik7Cisg ICAgICAgICAgICBja3N0cm5jYXQocmVxdWVzdCwiXHJcbiIsbGVuKTsKKyAgICAgICAgfQorICAg IH0KKyNpZmRlZiBIVFRQX0NMT1NFCisgICAgY2tzdHJuY2F0KHJlcXVlc3QsIkNvbm5lY3Rpb246 IGNsb3NlXHJcbiIsbGVuKTsKKyNlbmRpZgorICAgIGNrc3RybmNhdChyZXF1ZXN0LCJcclxuIixs ZW4pOworICBpbmRleHJlcToKKyAgICBpZiAoaHR0cF90b2woKENIQVIgKilyZXF1ZXN0LHN0cmxl bihyZXF1ZXN0KSkgPCAwKQorICAgIHsKKyAgICAgICAgaHR0cF9jbG9zZSgpOworICAgICAgICBp ZiAoIGZpcnN0ICkgeworICAgICAgICAgICAgZmlyc3QtLTsKKyAgICAgICAgICAgIGh0dHBfcmVv cGVuKCk7CisgICAgICAgICAgICBnb3RvIGluZGV4cmVxOworICAgICAgICB9CisgICAgICAgIHJj ID0gLTE7CisgICAgICAgIGdvdG8gaW5kZXhleGl0OworICAgIH0KKworICAgIC8qIFByb2Nlc3Mg dGhlIGhlYWRlcnMgKi8KKyAgICBsb2NhbF90ID0gdGltZShOVUxMKTsKKyAgICBudWxsbGluZSA9 IDA7CisgICAgaSA9IDA7CisgICAgbGVuID0gLTE7CisgICAgd2hpbGUgKCFudWxsbGluZSAmJiAo Y2ggPSBodHRwX2luYygwKSkgPj0gMCAmJiBpIDwgSFRUUEJVRkxFTikgeworICAgICAgICBidWZb aV0gPSBjaDsKKyAgICAgICAgaWYgKGJ1ZltpXSA9PSAxMCkgeyAgICAgICAgICAgICAvKiBmb3Vu ZCBlbmQgb2YgbGluZSAqLworICAgICAgICAgICAgaWYgKGkgPiAwICYmIGJ1ZltpLTFdID09IDEz KQorICAgICAgICAgICAgICBpLS07CisgICAgICAgICAgICBpZiAoaSA8IDEpCisgICAgICAgICAg ICAgIG51bGxsaW5lID0gMTsKKyAgICAgICAgICAgIGJ1ZltpXSA9ICdcMCc7CisgICAgICAgICAg ICBpZiAoYXJyYXkgJiYgIW51bGxsaW5lICYmIGhkY250IDwgSFRUUEhFQURDTlQpCisgICAgICAg ICAgICAgIG1ha2VzdHIoJmhlYWRlcnNbaGRjbnQrK10sYnVmKTsKKyAgICAgICAgICAgIGlmICgh Y2tzdHJjbXAoYnVmLCJIVFRQIiw0LDApKSB7CisgICAgICAgICAgICAgICAgaHR0cF9mbmQgPSAx OworICAgICAgICAgICAgICAgIGogPSBja2luZGV4KCIgIixidWYsMCwwLDApOworICAgICAgICAg ICAgICAgIHAgPSAmYnVmW2pdOworICAgICAgICAgICAgICAgIHdoaWxlIChpc3NwYWNlKCpwKSkK KyAgICAgICAgICAgICAgICAgIHArKzsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKCBwWzBdICkg eworICAgICAgICAgICAgICAgICAgY2FzZSAnMSc6ICAgICAgICAgICAgIC8qIEluZm9ybWF0aW9u YWwgbWVzc2FnZSAqLworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg ICAgIGNhc2UgJzInOiAgICAgICAgICAgICAvKiBTdWNjZXNzICovCisgICAgICAgICAgICAgICAg ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSAnMyc6ICAgICAgICAgICAgIC8qIFJl ZGlyZWN0aW9uICovCisgICAgICAgICAgICAgICAgICBjYXNlICc0JzogICAgICAgICAgICAgLyog Q2xpZW50IGZhaWx1cmUgKi8KKyAgICAgICAgICAgICAgICAgIGNhc2UgJzUnOiAgICAgICAgICAg ICAvKiBTZXJ2ZXIgZmFpbHVyZSAqLworICAgICAgICAgICAgICAgICAgZGVmYXVsdDogICAgICAg ICAgICAgIC8qIFVua25vd24gKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKCFxdWlldCkKKyAg ICAgICAgICAgICAgICAgICAgICBwcmludGYoIkZhaWx1cmU6IFNlcnZlciByZXBvcnRzICVzXG4i LHApOworICAgICAgICAgICAgICAgICAgICByYyA9IC0xOworICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgICBodHRwX3NldF9jb2RlX3JlcGx5KHApOworICAgICAgICAgICAgfSBlbHNl IGlmICggIW51bGxsaW5lICkgeworICAgICAgICAgICAgICAgIGlmICghY2tzdHJjbXAoYnVmLCJD b25uZWN0aW9uOiIsMTEsMCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBja2luZGV4KCJj bG9zZSIsYnVmLDExLDAsMCkgIT0gMCApCisgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZWNv biA9IDE7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghY2tzdHJjbXAoYnVmLCJDb250ZW50 LUxlbmd0aDoiLDE1LDApKSB7CisgICAgICAgICAgICAgICAgICAgIGxlbiA9IGF0b2koJmJ1Zlsx Nl0pOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWNrc3RyY21wKGJ1ZiwiVHJhbnNmZXIt RW5jb2Rpbmc6IiwxOCwwKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIGNraW5kZXgoImNo dW5rZWQiLGJ1ZiwxOCwwLDApICE9IDAgKQorICAgICAgICAgICAgICAgICAgICAgICAgY2h1bmtl ZCA9IDE7CisJCSAgICBkZWJ1ZyhGMTAxLCJodHRwX2luZGV4IGNodW5rZWQiLCIiLGNodW5rZWQp OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwcmludGYoIiVzXG4iLGJ1Zik7 CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpID0gMDsKKyAgICAgICAgfSBlbHNlIHsKKyAg ICAgICAgICAgIGkrKzsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChjaCA8IDAgJiYgZmly c3QpIHsKKyAgICAgICAgZmlyc3QtLTsKKyAgICAgICAgaHR0cF9jbG9zZSgpOworICAgICAgICBo dHRwX3Jlb3BlbigpOworICAgICAgICBnb3RvIGluZGV4cmVxOworICAgIH0KKyAgICBpZiAoIGh0 dHBfZm5kID09IDAgKSB7CisgICAgICAgIHJjID0gLTE7CisgICAgICAgIGNsb3NlY29uID0gMTsK KyAgICAgICAgZ290byBpbmRleGV4aXQ7CisgICAgfQorCisgICAgLyogTm93IHdlIGhhdmUgdGhl IGNvbnRlbnRzIG9mIHRoZSBmaWxlICovCisgICAgaWYgKCBsb2NhbCAmJiBsb2NhbFswXSApIHsK KyAgICAgICAgaWYgKHpvcGVubyhaT0ZJTEUsbG9jYWwsTlVMTCxOVUxMKSkKKyAgICAgICAgICAg IHpmaWxlID0gMTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmMgPSAtMTsKKyAgICB9CisK KyAgICBpZiAoIGNodW5rZWQgKSB7CisgICAgICAgIHdoaWxlICgobGVuID0gaHR0cF9nZXRfY2h1 bmtfbGVuKCkpID4gMCkgeworICAgICAgICAgICAgd2hpbGUgKGxlbiAmJiAoY2ggPSBodHRwX2lu YygwKSkgPj0gMCkgeworICAgICAgICAgICAgICAgIGxlbi0tOworICAgICAgICAgICAgICAgIGlm ICggemZpbGUgKQorICAgICAgICAgICAgICAgICAgICB6Y2hvdXQoWk9GSUxFLChDSEFSKWNoKTsK KyAgICAgICAgICAgICAgICBpZiAoIHN0ZGlvICkKKyAgICAgICAgICAgICAgICAgICAgY29ub2Mo KENIQVIpY2gpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKChjaCA9IGh0dHBfaW5j KDApKSAhPSBDUikKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmICgoY2gg PSBodHRwX2luYygwKSkgIT0gTEYpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K KyAgICB9IGVsc2UgeworICAgICAgICB3aGlsZSAobGVuICYmIChjaCA9IGh0dHBfaW5jKDApKSA+ PSAwKSB7CisgICAgICAgICAgICBsZW4tLTsKKyAgICAgICAgICAgIGlmICggemZpbGUgKQorICAg ICAgICAgICAgICAgIHpjaG91dChaT0ZJTEUsKENIQVIpY2gpOworICAgICAgICAgICAgaWYgKCBz dGRpbyApCisgICAgICAgICAgICAgICAgY29ub2MoKENIQVIpY2gpOworICAgICAgICB9CisgICAg fQorCisgICAgaWYgKCB6ZmlsZSApCisgICAgICAgIHpjbG9zZShaT0ZJTEUpOworCisgICAgaWYg KCBjaHVua2VkICkgeyAgICAgICAgICAgIC8qIFBhcnNlIFRyYWlsaW5nIEhlYWRlcnMgKi8KKyAg ICAgICAgbnVsbGxpbmUgPSAwOworICAgICAgICB3aGlsZSAoIW51bGxsaW5lICYmIChjaCA9IGh0 dHBfaW5jKDApKSA+PSAwICYmIGkgPCBIVFRQQlVGTEVOKSB7CisgICAgICAgICAgICBidWZbaV0g PSBjaDsKKyAgICAgICAgICAgIGlmICggYnVmW2ldID09IDEwICkgeyAvKiBmb3VuZCBlbmQgb2Yg bGluZSAqLworICAgICAgICAgICAgICAgIGlmIChpID4gMCAmJiBidWZbaS0xXSA9PSAxMykKKyAg ICAgICAgICAgICAgICAgIGktLTsKKyAgICAgICAgICAgICAgICBpZiAoaSA8IDEpCisgICAgICAg ICAgICAgICAgICBudWxsbGluZSA9IDE7CisgICAgICAgICAgICAgICAgYnVmW2ldID0gJ1wwJzsK KyAgICAgICAgICAgICAgICBpZiAoYXJyYXkgJiYgIW51bGxsaW5lICYmIGhkY250IDwgSFRUUEhF QURDTlQpCisgICAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJmhlYWRlcnNbaGRjbnQrK10sYnVm KTsKKyAgICAgICAgICAgICAgICBpZiAoIWNrc3RyY21wKGJ1ZiwiQ29ubmVjdGlvbjoiLDExLDAp KSB7CisgICAgICAgICAgICAgICAgICAgIGlmICggY2tpbmRleCgiY2xvc2UiLGJ1ZiwxMSwwLDAp ICE9IDAgKQorICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2Vjb24gPSAxOworICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgICBpID0gMDsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg ICAgICAgICAgICAgICAgaSsrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAg IHJjID0gMDsKKworICBpbmRleGV4aXQ6CisgICAgaWYgKGFycmF5KQorICAgICAgaHR0cF9ta2Fy cmF5KGhlYWRlcnMsaGRjbnQsYXJyYXkpOworCisgICAgaWYgKGNsb3NlY29uKQorICAgICAgICBo dHRwX2Nsb3NlKCk7CisgICAgZnJlZShyZXF1ZXN0KTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgaGRj bnQ7IGkrKykgeworICAgICAgICBpZiAoaGVhZGVyc1tpXSkKKyAgICAgICAgICBmcmVlKGhlYWRl cnNbaV0pOworICAgIH0KKyAgICByZXR1cm4ocmMpOworfQorCitpbnQKKyNpZmRlZiBDS19BTlNJ QworaHR0cF9wdXQoY2hhciAqIGFnZW50LCBjaGFyICoqIGhkcmxpc3QsIGNoYXIgKiBtaW1lLCBj aGFyICogdXNlciwKKyAgICAgICAgIGNoYXIgKiBwd2QsIGNoYXIgYXJyYXksIGNoYXIgKiBsb2Nh bCwgY2hhciAqIHJlbW90ZSwKKyAgICAgICAgIGNoYXIgKiBkZXN0LCBpbnQgc3RkaW8pCisjZWxz ZQoraHR0cF9wdXQoYWdlbnQsIGhkcmxpc3QsIG1pbWUsIHVzZXIsIHB3ZCwgYXJyYXksIGxvY2Fs LCByZW1vdGUsIGRlc3QsIHN0ZGlvKQorICAgIGNoYXIgKiBhZ2VudDsgY2hhciAqKiBoZHJsaXN0 OyBjaGFyICogbWltZTsgY2hhciAqIHVzZXI7CisgICAgY2hhciAqIHB3ZDsgY2hhciBhcnJheTsg Y2hhciAqIGxvY2FsOyBjaGFyICogcmVtb3RlOyBjaGFyICogZGVzdDsKKyAgICBpbnQgc3RkaW87 CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAgICBjaGFyICogcmVxdWVzdD1OVUxMOworICAg IGludCAgICBpLCBqLCBsZW4gPSAwLCBoZGNudCA9IDAsIHJjID0gMDsKKyAgICBpbnQgICAgY2g7 CisgICAgaW50ICAgIGh0dHBfZm5kID0gMDsKKyAgICBjaGFyICAgYnVmW0hUVFBCVUZMRU5dLCAq cDsKKyAgICBpbnQgICAgbnVsbGxpbmU7CisgICAgdGltZV90IG1vZF90OworICAgIHRpbWVfdCBz cnZfdDsKKyAgICB0aW1lX3QgbG9jYWxfdDsKKyAgICBjaGFyIHBhc3N3ZFs2NF07CisgICAgY2hh ciBiNjRpblsxMjhdOworICAgIGNoYXIgYjY0b3V0WzI1Nl07CisgICAgaW50ICBmaWxlbGVuOwor ICAgIGNoYXIgKiBoZWFkZXJzW0hUVFBIRUFEQ05UXTsKKyAgICBpbnQgIGNsb3NlY29uID0gMDsK KyAgICBpbnQgIGNodW5rZWQgPSAwOworICAgIGludCAgZmlyc3QgPSAxOworICAgIGludCAgemZp bGUgPSAwOworCisgICAgaWYgKGh0dHBmZCA9PSAtMSkKKyAgICAgIHJldHVybigtMSk7CisgICAg aWYgKCFtaW1lKSBtaW1lID0gIiI7CisgICAgaWYgKCFyZW1vdGUpIHJlbW90ZSA9ICIiOworICAg IGlmICghbG9jYWwpIGxvY2FsID0gIiI7CisgICAgaWYgKCEqbG9jYWwpIHJldHVybigtMSk7CisK KyAgICBpZiAoYXJyYXkpIHsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IEhUVFBIRUFEQ05UOyBp KyspCisgICAgICAgICAgaGVhZGVyc1tpXSA9IE5VTEw7CisgICAgfQorICAgIGZpbGVsZW4gPSB6 Y2hraShsb2NhbCk7CisgICAgaWYgKGZpbGVsZW4gPCAwKQorICAgICAgcmV0dXJuKC0xKTsKKwor ICAgIC8qIENvbXB1dGUgbGVuZ3RoIG9mIHJlcXVlc3QgaGVhZGVyICovCisgICAgbGVuID0gODsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUFVUICovCisgICAgbGVuICs9IHN0cmxlbihI VFRQX1ZFUlNJT04pOworICAgIGxlbiArPSBzdHJsZW4ocmVtb3RlKTsKKyAgICBsZW4gKz0gMTY7 CisKKyAgICBpZiAoIGhkcmxpc3QgKSB7CisgICAgICAgIGZvciAoaSA9IDA7IGhkcmxpc3RbaV07 IGkrKykKKyAgICAgICAgICAgIGxlbiArPSBzdHJsZW4oaGRybGlzdFtpXSkgKyAyOworICAgIH0K KyAgICBsZW4gKz0gc3RybGVuKGh0dHBfaG9zdF9wb3J0KSArIDg7CisKKyAgICBpZiAoYWdlbnQp CisgICAgICBsZW4gKz0gMTMgKyBzdHJsZW4oYWdlbnQpOworICAgIGlmICh1c2VyKSB7CisgICAg ICAgIGlmICghcHdkKSB7CisgICAgICAgICAgICByZWFkcGFzcygiUGFzc3dvcmQ6ICIscGFzc3dk LDY0KTsKKyAgICAgICAgICAgIHB3ZCA9IHBhc3N3ZDsKKyAgICAgICAgfQorICAgICAgICBja21h a21zZyhiNjRpbixzaXplb2YoYjY0aW4pLHVzZXIsIjoiLHB3ZCxOVUxMKTsKKyAgICAgICAgaiA9 IGI4dG9iNjQoYjY0aW4sc3RybGVuKGI2NGluKSxiNjRvdXQsMjU2KTsKKyAgICAgICAgbWVtc2V0 KHB3ZCwwLHN0cmxlbihwd2QpKTsKKyAgICAgICAgaWYgKGogPCAwKQorICAgICAgICAgIHJldHVy bigtMSk7CisgICAgICAgIGI2NG91dFtqXSA9ICdcMCc7CisgICAgICAgIGxlbiArPSBqICsgMjQ7 CisgICAgfQorICAgIGxlbiArPSAxNiArIHN0cmxlbihtaW1lKTsgICAgICAgICAgIC8qIENvbnRl bnQtdHlwZTogKi8KKyAgICBsZW4gKz0gMzI7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBD b250ZW50LWxlbmd0aDogKi8KKyAgICBsZW4gKz0gMzI7ICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBEYXRlOiAqLworI2lmZGVmIEhUVFBfQ0xPU0UKKyAgICBsZW4gKz0gMTk7ICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBDb25uZWN0aW9uOiBjbG9zZSAqLworI2VuZGlmCisgICAgbGVu ICs9IDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYmxhbmsgbGluZSArIG51bGwgKi8K KworICAgIHJlcXVlc3QgPSBtYWxsb2MobGVuKTsKKyAgICBpZiAoIXJlcXVlc3QpCisgICAgICBy ZXR1cm4oLTEpOworCisgICAgc3ByaW50ZihyZXF1ZXN0LCJQVVQgJXMgJXNcclxuIixyZW1vdGUs SFRUUF9WRVJTSU9OKTsKKyAgICBja3N0cm5jYXQocmVxdWVzdCwiRGF0ZTogIixsZW4pOworI2lm ZGVmIENNREFURTJUTQorICAgIGNrc3RybmNhdChyZXF1ZXN0LGh0dHBfbm93KCksbGVuKTsKKyNl bHNlCisgICAgY2tzdHJuY2F0KHJlcXVlc3QsLi4uLGxlbik7CisjZW5kaWYgLyogQ01EQVRFMlRN ICovCisgICAgY2tzdHJuY2F0KHJlcXVlc3QsIlxyXG4iLGxlbik7CisgICAgY2tzdHJuY2F0KHJl cXVlc3QsIkhvc3Q6ICIsIGxlbik7CisgICAgY2tzdHJuY2F0KHJlcXVlc3QsaHR0cF9ob3N0X3Bv cnQsIGxlbik7CisgICAgY2tzdHJuY2F0KHJlcXVlc3QsIlxyXG4iLGxlbik7CisgICAgaWYgKGFn ZW50KSB7CisgICAgICAgIGNrc3RybmNhdChyZXF1ZXN0LCJVc2VyLWFnZW50OiAiLGxlbik7Cisg ICAgICAgIGNrc3RybmNhdChyZXF1ZXN0LGFnZW50LGxlbik7CisgICAgICAgIGNrc3RybmNhdChy ZXF1ZXN0LCJcclxuIixsZW4pOworICAgIH0KKyAgICBpZiAodXNlcikgeworICAgICAgICBja3N0 cm5jYXQocmVxdWVzdCwiQXV0aG9yaXphdGlvbjogQmFzaWMgIixsZW4pOworICAgICAgICBja3N0 cm5jYXQocmVxdWVzdCxiNjRvdXQsbGVuKTsKKyAgICAgICAgY2tzdHJuY2F0KHJlcXVlc3QsIlxy XG4iLGxlbik7CisgICAgfQorICAgIGlmICggaGRybGlzdCApIHsKKyAgICAgICAgZm9yIChpID0g MDsgaGRybGlzdFtpXTsgaSsrKSB7CisgICAgICAgICAgICBja3N0cm5jYXQocmVxdWVzdCxoZHJs aXN0W2ldLGxlbik7CisgICAgICAgICAgICBja3N0cm5jYXQocmVxdWVzdCwiXHJcbiIsbGVuKTsK KyAgICAgICAgfQorICAgIH0KKyAgICBja3N0cm5jYXQocmVxdWVzdCwiQ29udGVudC10eXBlOiAi LGxlbik7CisgICAgY2tzdHJuY2F0KHJlcXVlc3QsbWltZSxsZW4pOworICAgIGNrc3RybmNhdChy ZXF1ZXN0LCJcclxuIixsZW4pOworICAgIHNwcmludGYoYnVmLCJDb250ZW50LWxlbmd0aDogJWRc clxuIixmaWxlbGVuKTsgLyogc2FmZSAqLworICAgIGNrc3RybmNhdChyZXF1ZXN0LGJ1ZixsZW4p OworI2lmZGVmIEhUVFBfQ0xPU0UKKyAgICBja3N0cm5jYXQocmVxdWVzdCwiQ29ubmVjdGlvbjog Y2xvc2VcclxuIixsZW4pOworI2VuZGlmCisgICAgY2tzdHJuY2F0KHJlcXVlc3QsIlxyXG4iLGxl bik7CisKKyAgICAvKiBOb3cgd2UgaGF2ZSB0aGUgY29udGVudHMgb2YgdGhlIGZpbGUgKi8KKyAg ICBpZiAoem9wZW5pKFpJRklMRSxsb2NhbCkpIHsKKworICAgICAgcHV0cmVxOgkJCQkvKiBTZW5k IHJlcXVlc3QgKi8KKyAgICAgICAgaWYgKGh0dHBfdG9sKChDSEFSICopcmVxdWVzdCxzdHJsZW4o cmVxdWVzdCkpIDw9IDApIHsKKyAgICAgICAgICAgIGh0dHBfY2xvc2UoKTsKKyAgICAgICAgICAg IGlmICggZmlyc3QgKSB7CisgICAgICAgICAgICAgICAgZmlyc3QtLTsKKyAgICAgICAgICAgICAg ICBodHRwX3Jlb3BlbigpOworICAgICAgICAgICAgICAgIGdvdG8gcHV0cmVxOworICAgICAgICAg ICAgfQorICAgICAgICAgICAgemNsb3NlKFpJRklMRSk7CisgICAgICAgICAgICByYyA9IC0xOwor ICAgICAgICAgICAgZ290byBwdXRleGl0OworICAgICAgICB9CisgICAgICAgIC8qIFJlcXVlc3Qg aGVhZGVycyBoYXZlIGJlZW4gc2VudCAqLworCisgICAgICAgIGkgPSAwOworICAgICAgICB3aGls ZSAoemNoaW4oWklGSUxFLCZjaCkgPT0gMCkgeworICAgICAgICAgICAgYnVmW2krK10gPSBjaDsK KyAgICAgICAgICAgIGlmIChpID09IEhUVFBCVUZMRU4pIHsKKyAgICAgICAgICAgICAgICBpZiAo aHR0cF90b2woKENIQVIgKilidWYsSFRUUEJVRkxFTikgPD0gMCkgeworICAgICAgICAgICAgICAg ICAgICBodHRwX2Nsb3NlKCk7CisgICAgICAgICAgICAgICAgICAgIGlmICggZmlyc3QgKSB7Cisg ICAgICAgICAgICAgICAgICAgICAgICBmaXJzdC0tOworICAgICAgICAgICAgICAgICAgICAgICAg aHR0cF9yZW9wZW4oKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gcHV0cmVxOworICAg ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGkg PSAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChpID4gMCkgeworICAg ICAgICAgICAgaWYgKGh0dHBfdG9sKChDSEFSICopYnVmLGkpIDwgMCkgeworICAgICAgICAgICAg ICAgIGh0dHBfY2xvc2UoKTsKKyAgICAgICAgICAgICAgICBpZiAoIGZpcnN0ICkgeworICAgICAg ICAgICAgICAgICAgICBmaXJzdC0tOworICAgICAgICAgICAgICAgICAgICBodHRwX3Jlb3Blbigp OworICAgICAgICAgICAgICAgICAgICBnb3RvIHB1dHJlcTsKKyAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgemNsb3NlKFpJRklMRSk7CisKKyAgICAg ICAgLyogUHJvY2VzcyB0aGUgcmVzcG9uc2UgaGVhZGVycyAqLworICAgICAgICBsb2NhbF90ID0g dGltZShOVUxMKTsKKyAgICAgICAgbnVsbGxpbmUgPSAwOworICAgICAgICBpID0gMDsKKyAgICAg ICAgbGVuID0gLTE7CisgICAgICAgIHdoaWxlICghbnVsbGxpbmUgJiYgKGNoID0gaHR0cF9pbmMo MCkpID49IDAgJiYgaSA8IEhUVFBCVUZMRU4pIHsKKyAgICAgICAgICAgIGJ1ZltpXSA9IGNoOwor ICAgICAgICAgICAgaWYgKGJ1ZltpXSA9PSAxMCkgeyAgICAgICAgIC8qIGZvdW5kIGVuZCBvZiBs aW5lICovCisgICAgICAgICAgICAgICAgaWYgKGkgPiAwICYmIGJ1ZltpLTFdID09IDEzKQorICAg ICAgICAgICAgICAgICAgaS0tOworICAgICAgICAgICAgICAgIGlmIChpIDwgMSkKKyAgICAgICAg ICAgICAgICAgIG51bGxsaW5lID0gMTsKKyAgICAgICAgICAgICAgICBidWZbaV0gPSAnXDAnOwor ICAgICAgICAgICAgICAgIGlmIChhcnJheSAmJiAhbnVsbGxpbmUgJiYgaGRjbnQgPCBIVFRQSEVB RENOVCkKKyAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJmhlYWRlcnNbaGRjbnQrK10sYnVmKTsK KyAgICAgICAgICAgICAgICBpZiAoIWNrc3RyY21wKGJ1ZiwiSFRUUCIsNCwwKSkgeworICAgICAg ICAgICAgICAgICAgICBodHRwX2ZuZCA9IDE7CisgICAgICAgICAgICAgICAgICAgIGogPSBja2lu ZGV4KCIgIixidWYsMCwwLDApOworICAgICAgICAgICAgICAgICAgICBwID0gJmJ1ZltqXTsKKyAg ICAgICAgICAgICAgICAgICAgd2hpbGUgKGlzc3BhY2UoKnApKQorICAgICAgICAgICAgICAgICAg ICAgIHArKzsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChwWzBdKSB7CisgICAgICAgICAg ICAgICAgICAgICAgY2FzZSAnMSc6ICAgICAgICAgLyogSW5mb3JtYXRpb25hbCBtZXNzYWdlICov CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBj YXNlICcyJzogICAgICAgICAvKiBTdWNjZXNzICovCisgICAgICAgICAgICAgICAgICAgICAgICBi cmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlICczJzogICAgICAgICAvKiBSZWRpcmVj dGlvbiAqLworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzQnOiAgICAgICAgIC8qIENsaWVu dCBmYWlsdXJlICovCisgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnNSc6ICAgICAgICAgLyog U2VydmVyIGZhaWx1cmUgKi8KKyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiAgICAgICAg ICAvKiBVbmtub3duICovCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXF1aWV0KQorICAg ICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIkZhaWx1cmU6IFNlcnZlciByZXBvcnRzICVz XG4iLHApOworICAgICAgICAgICAgICAgICAgICAgICAgcmMgPSAtMTsKKyAgICAgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICAgICAgICBodHRwX3NldF9jb2RlX3JlcGx5KHApOworICAg ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghY2tzdHJjbXAo YnVmLCJDb25uZWN0aW9uOiIsMTEsMCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg Y2tpbmRleCgiY2xvc2UiLGJ1ZiwxMSwwLDApICE9IDAgKQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNsb3NlY29uID0gMTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghY2tz dHJjbXAoYnVmLCJDb250ZW50LUxlbmd0aDoiLDE1LDApKSB7CisgICAgICAgICAgICAgICAgICAg ICAgICBsZW4gPSBhdG9pKCZidWZbMTZdKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlm ICghY2tzdHJjbXAoYnVmLCJUcmFuc2Zlci1FbmNvZGluZzoiLDE4LDApKSB7CisgICAgICAgICAg ICAgICAgICAgICAgICBpZiAoIGNraW5kZXgoImNodW5rZWQiLGJ1ZiwxOCwwLDApICE9IDAgKQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rZWQgPSAxOworCQkJZGVidWcoRjEwMSwi aHR0cF9wdXQgY2h1bmtlZCIsIiIsY2h1bmtlZCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgICAgICAgaWYgKCBzdGRpbyApCisgICAgICAgICAgICAgICAgICAgICAgICBw cmludGYoIiVzXG4iLGJ1Zik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGkg PSAwOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpKys7CisgICAgICAg ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNoIDwgMCAmJiBmaXJzdCkgeworICAgICAg ICAgICAgZmlyc3QtLTsKKyAgICAgICAgICAgIGh0dHBfY2xvc2UoKTsKKyAgICAgICAgICAgIGh0 dHBfcmVvcGVuKCk7CisgICAgICAgICAgICBnb3RvIHB1dHJlcTsKKyAgICAgICAgfQorICAgICAg ICBpZiAoIGh0dHBfZm5kID09IDAgKSB7CisgICAgICAgICAgICBjbG9zZWNvbiA9IDE7CisgICAg ICAgICAgICByYyA9IC0xOworICAgICAgICAgICAgZ290byBwdXRleGl0OworICAgICAgICB9CisK KyAgICAgICAgLyogQW55IHJlc3BvbnNlIGRhdGE/ICovCisgICAgICAgIGlmICggZGVzdCAmJiBk ZXN0WzBdICkgeworICAgICAgICAgICAgaWYgKHpvcGVubyhaT0ZJTEUsZGVzdCxOVUxMLE5VTEwp KQorICAgICAgICAgICAgICAgIHpmaWxlID0gMTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg ICAgICAgICByYyA9IC0xOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCBjaHVua2VkICkgewor ICAgICAgICAgICAgd2hpbGUgKChsZW4gPSBodHRwX2dldF9jaHVua19sZW4oKSkgPiAwKSB7Cisg ICAgICAgICAgICAgICAgd2hpbGUgKGxlbiAmJiAoY2ggPSBodHRwX2luYygwKSkgPj0gMCkgewor ICAgICAgICAgICAgICAgICAgICBsZW4tLTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCB6Zmls ZSApCisgICAgICAgICAgICAgICAgICAgICAgICB6Y2hvdXQoWk9GSUxFLChDSEFSKWNoKTsKKyAg ICAgICAgICAgICAgICAgICAgaWYgKCBzdGRpbyApCisgICAgICAgICAgICAgICAgICAgICAgICBj b25vYygoQ0hBUiljaCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICgo Y2ggPSBodHRwX2luYygwKSkgIT0gQ1IpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg ICAgICAgICAgICAgIGlmICgoY2ggPSBodHRwX2luYygwKSkgIT0gTEYpCisgICAgICAgICAgICAg ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAg ICAgd2hpbGUgKGxlbiAmJiAoY2ggPSBodHRwX2luYygwKSkgPj0gMCkgeworICAgICAgICAgICAg ICAgIGxlbi0tOworICAgICAgICAgICAgICAgIGlmICggemZpbGUgKQorICAgICAgICAgICAgICAg ICAgICB6Y2hvdXQoWk9GSUxFLChDSEFSKWNoKTsKKyAgICAgICAgICAgICAgICBpZiAoIHN0ZGlv ICkKKyAgICAgICAgICAgICAgICAgICAgY29ub2MoKENIQVIpY2gpOworICAgICAgICAgICAgfQor ICAgICAgICB9CisKKyAgICAgICAgaWYgKCB6ZmlsZSApCisgICAgICAgICAgICB6Y2xvc2UoWk9G SUxFKTsKKworICAgICAgICBpZiAoIGNodW5rZWQgKSB7ICAgICAgICAgICAgLyogUGFyc2UgVHJh aWxpbmcgSGVhZGVycyAqLworICAgICAgICAgICAgbnVsbGxpbmUgPSAwOworICAgICAgICAgICAg d2hpbGUgKCFudWxsbGluZSAmJiAoY2ggPSBodHRwX2luYygwKSkgPj0gMCAmJiBpIDwgSFRUUEJV RkxFTikgeworICAgICAgICAgICAgICAgIGJ1ZltpXSA9IGNoOworICAgICAgICAgICAgICAgIGlm ICggYnVmW2ldID09IDEwICkgeyAvKiBmb3VuZCBlbmQgb2YgbGluZSAqLworICAgICAgICAgICAg ICAgICAgICBpZiAoaSA+IDAgJiYgYnVmW2ktMV0gPT0gMTMpCisgICAgICAgICAgICAgICAgICAg ICAgaS0tOworICAgICAgICAgICAgICAgICAgICBpZiAoaSA8IDEpCisgICAgICAgICAgICAgICAg ICAgICAgbnVsbGxpbmUgPSAxOworICAgICAgICAgICAgICAgICAgICBidWZbaV0gPSAnXDAnOwor ICAgICAgICAgICAgICAgICAgICBpZiAoYXJyYXkgJiYgIW51bGxsaW5lICYmIGhkY250IDwgSFRU UEhFQURDTlQpCisgICAgICAgICAgICAgICAgICAgICAgICBtYWtlc3RyKCZoZWFkZXJzW2hkY250 KytdLGJ1Zik7CisgICAgICAgICAgICAgICAgICAgIGlmICghY2tzdHJjbXAoYnVmLCJDb25uZWN0 aW9uOiIsMTEsMCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY2tpbmRleCgiY2xv c2UiLGJ1ZiwxMSwwLDApICE9IDAgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3Nl Y29uID0gMTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpID0g MDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpKys7Cisg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSBlbHNlIHsK KyAgICAgICAgcmMgPSAtMTsKKyAgICB9CisKKyAgcHV0ZXhpdDoKKyAgICBpZiAoIGFycmF5ICkK KyAgICAgICAgaHR0cF9ta2FycmF5KGhlYWRlcnMsaGRjbnQsYXJyYXkpOworCisgICAgaWYgKGNs b3NlY29uKQorICAgICAgICBodHRwX2Nsb3NlKCk7CisgICAgZnJlZShyZXF1ZXN0KTsKKyAgICBm b3IgKGkgPSAwOyBpIDwgaGRjbnQ7IGkrKykgeworICAgICAgICBpZiAoaGVhZGVyc1tpXSkKKyAg ICAgICAgICBmcmVlKGhlYWRlcnNbaV0pOworICAgIH0KKyAgICByZXR1cm4ocmMpOworfQorCitp bnQKKyNpZmRlZiBDS19BTlNJQworaHR0cF9kZWxldGUoY2hhciAqIGFnZW50LCBjaGFyICoqIGhk cmxpc3QsIGNoYXIgKiB1c2VyLAorICAgICAgICAgIGNoYXIgKiBwd2QsIGNoYXIgYXJyYXksIGNo YXIgKiByZW1vdGUpCisjZWxzZQoraHR0cF9kZWxldGUoYWdlbnQsIGhkcmxpc3QsIHVzZXIsIHB3 ZCwgYXJyYXksIHJlbW90ZSkKKyAgICBjaGFyICogYWdlbnQ7IGNoYXIgKiogaGRybGlzdDsgY2hh ciAqIHVzZXI7CisgICAgY2hhciAqIHB3ZDsgY2hhciBhcnJheTsgY2hhciAqIHJlbW90ZTsKKyNl bmRpZiAvKiBDS19BTlNJQyAqLworeworICAgIGNoYXIgKiByZXF1ZXN0PU5VTEw7CisgICAgaW50 ICAgIGksIGosIGxlbiA9IDAsIGhkY250ID0gMCwgcmMgPSAwOworICAgIGludCAgICBjaDsKKyAg ICBpbnQgICAgaHR0cF9mbmQgPSAwOworICAgIGNoYXIgICBidWZbSFRUUEJVRkxFTl0sICpwOwor ICAgIGludCAgICBudWxsbGluZTsKKyAgICB0aW1lX3QgbW9kX3Q7CisgICAgdGltZV90IHNydl90 OworICAgIHRpbWVfdCBsb2NhbF90OworICAgIGNoYXIgcGFzc3dkWzY0XTsKKyAgICBjaGFyIGI2 NGluWzEyOF07CisgICAgY2hhciBiNjRvdXRbMjU2XTsKKyAgICBjaGFyICogaGVhZGVyc1tIVFRQ SEVBRENOVF07CisgICAgaW50ICBjbG9zZWNvbiA9IDA7CisgICAgaW50ICBjaHVua2VkID0gMDsK KyAgICBpbnQgIGZpcnN0ID0gMTsKKworICAgIGlmIChodHRwZmQgPT0gLTEpCisgICAgICByZXR1 cm4oLTEpOworCisgICAgaWYgKGFycmF5KSB7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBIVFRQ SEVBRENOVDsgaSsrKQorICAgICAgICAgIGhlYWRlcnNbaV0gPSBOVUxMOworICAgIH0KKworICAg IC8qIENvbXB1dGUgbGVuZ3RoIG9mIHJlcXVlc3QgaGVhZGVyICovCisgICAgbGVuID0gMTE7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERFTEVURSAqLworICAgIGxlbiArPSBzdHJsZW4o SFRUUF9WRVJTSU9OKTsKKyAgICBsZW4gKz0gc3RybGVuKHJlbW90ZSk7CisgICAgbGVuICs9IDE2 OworCisgICAgaWYgKCBoZHJsaXN0ICkgeworICAgICAgICBmb3IgKGkgPSAwOyBoZHJsaXN0W2ld OyBpKyspCisgICAgICAgICAgICBsZW4gKz0gc3RybGVuKGhkcmxpc3RbaV0pICsgMjsKKyAgICB9 CisgICAgbGVuICs9IHN0cmxlbihodHRwX2hvc3RfcG9ydCkgKyA4OworCisgICAgaWYgKGFnZW50 KQorICAgICAgbGVuICs9IDEzICsgc3RybGVuKGFnZW50KTsKKyAgICBpZiAodXNlcikgeworICAg ICAgICBpZiAoIXB3ZCkgeworICAgICAgICAgICAgcmVhZHBhc3MoIlBhc3N3b3JkOiAiLHBhc3N3 ZCw2NCk7CisgICAgICAgICAgICBwd2QgPSBwYXNzd2Q7CisgICAgICAgIH0KKyAgICAgICAgY2tt YWttc2coYjY0aW4sc2l6ZW9mKGI2NGluKSx1c2VyLCI6Iixwd2QsTlVMTCk7CisgICAgICAgIGog PSBiOHRvYjY0KGI2NGluLHN0cmxlbihiNjRpbiksYjY0b3V0LDI1Nik7CisgICAgICAgIG1lbXNl dChwd2QsMCxzdHJsZW4ocHdkKSk7CisgICAgICAgIGlmIChqIDwgMCkKKyAgICAgICAgICByZXR1 cm4oLTEpOworICAgICAgICBiNjRvdXRbal0gPSAnXDAnOworICAgICAgICBsZW4gKz0gaiArIDI0 OworICAgIH0KKyAgICBsZW4gKz0gMzI7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEYXRl OiAqLworI2lmZGVmIEhUVFBfQ0xPU0UKKyAgICBsZW4gKz0gMTk7ICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBDb25uZWN0aW9uOiBjbG9zZSAqLworI2VuZGlmCisgICAgbGVuICs9IDM7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogYmxhbmsgbGluZSArIG51bGwgKi8KKworICAgIHJl cXVlc3QgPSBtYWxsb2MobGVuKTsKKyAgICBpZiAoIXJlcXVlc3QpCisgICAgICByZXR1cm4oLTEp OworCisgICAgc3ByaW50ZihyZXF1ZXN0LCJERUxFVEUgJXMgJXNcclxuIixyZW1vdGUsSFRUUF9W RVJTSU9OKTsKKyAgICBja3N0cm5jYXQocmVxdWVzdCwiRGF0ZTogIixsZW4pOworI2lmZGVmIENN REFURTJUTQorICAgIGNrc3RybmNhdChyZXF1ZXN0LGh0dHBfbm93KCksbGVuKTsKKyNlbHNlCisg ICAgY2tzdHJuY2F0KHJlcXVlc3QsLi4uLGxlbik7CisjZW5kaWYgLyogQ01EQVRFMlRNICovCisg ICAgY2tzdHJuY2F0KHJlcXVlc3QsIlxyXG4iLGxlbik7CisgICAgY2tzdHJuY2F0KHJlcXVlc3Qs Ikhvc3Q6ICIsIGxlbik7CisgICAgY2tzdHJuY2F0KHJlcXVlc3QsaHR0cF9ob3N0X3BvcnQsIGxl bik7CisgICAgY2tzdHJuY2F0KHJlcXVlc3QsIlxyXG4iLGxlbik7CisgICAgaWYgKGFnZW50KSB7 CisgICAgICAgIGNrc3RybmNhdChyZXF1ZXN0LCJVc2VyLWFnZW50OiAiLGxlbik7CisgICAgICAg IGNrc3RybmNhdChyZXF1ZXN0LGFnZW50LGxlbik7CisgICAgICAgIGNrc3RybmNhdChyZXF1ZXN0 LCJcclxuIixsZW4pOworICAgIH0KKyAgICBpZiAodXNlcikgeworICAgICAgICBja3N0cm5jYXQo cmVxdWVzdCwiQXV0aG9yaXphdGlvbjogQmFzaWMgIixsZW4pOworICAgICAgICBja3N0cm5jYXQo cmVxdWVzdCxiNjRvdXQsbGVuKTsKKyAgICAgICAgY2tzdHJuY2F0KHJlcXVlc3QsIlxyXG4iLGxl bik7CisgICAgfQorICAgIGlmICggaGRybGlzdCApIHsKKyAgICAgICAgZm9yIChpID0gMDsgaGRy bGlzdFtpXTsgaSsrKSB7CisgICAgICAgICAgICBja3N0cm5jYXQocmVxdWVzdCxoZHJsaXN0W2ld LGxlbik7CisgICAgICAgICAgICBja3N0cm5jYXQocmVxdWVzdCwiXHJcbiIsbGVuKTsKKyAgICAg ICAgfQorICAgIH0KKyNpZmRlZiBIVFRQX0NMT1NFCisgICAgY2tzdHJuY2F0KHJlcXVlc3QsIkNv bm5lY3Rpb246IGNsb3NlXHJcbiIsbGVuKTsKKyNlbmRpZgorICAgIGNrc3RybmNhdChyZXF1ZXN0 LCJcclxuIixsZW4pOworICBkZWxyZXE6CisgICAgaWYgKGh0dHBfdG9sKChDSEFSICopcmVxdWVz dCxzdHJsZW4ocmVxdWVzdCkpIDwgMCkKKyAgICB7CisgICAgICAgIGh0dHBfY2xvc2UoKTsKKyAg ICAgICAgaWYgKCBmaXJzdCApIHsKKyAgICAgICAgICAgIGZpcnN0LS07CisgICAgICAgICAgICBo dHRwX3Jlb3BlbigpOworICAgICAgICAgICAgZ290byBkZWxyZXE7CisgICAgICAgIH0KKyAgICAg ICAgcmMgPSAtMTsKKyAgICAgICAgZ290byBkZWxleGl0OworICAgIH0KKworICAgIC8qIFByb2Nl c3MgdGhlIHJlc3BvbnNlIGhlYWRlcnMgKi8KKyAgICBsb2NhbF90ID0gdGltZShOVUxMKTsKKyAg ICBudWxsbGluZSA9IDA7CisgICAgaSA9IDA7CisgICAgbGVuID0gLTE7CisgICAgd2hpbGUgKCFu dWxsbGluZSAmJiAoY2ggPSBodHRwX2luYygwKSkgPj0gMCAmJiBpIDwgSFRUUEJVRkxFTikgewor ICAgICAgICBidWZbaV0gPSBjaDsKKyAgICAgICAgaWYgKGJ1ZltpXSA9PSAxMCkgeyAgICAgICAg IC8qIGZvdW5kIGVuZCBvZiBsaW5lICovCisgICAgICAgICAgICBpZiAoaSA+IDAgJiYgYnVmW2kt MV0gPT0gMTMpCisgICAgICAgICAgICAgIGktLTsKKyAgICAgICAgICAgIGlmIChpIDwgMSkKKyAg ICAgICAgICAgICAgbnVsbGxpbmUgPSAxOworICAgICAgICAgICAgYnVmW2ldID0gJ1wwJzsKKyAg ICAgICAgICAgIGlmIChhcnJheSAmJiAhbnVsbGxpbmUgJiYgaGRjbnQgPCBIVFRQSEVBRENOVCkK KyAgICAgICAgICAgICAgICBtYWtlc3RyKCZoZWFkZXJzW2hkY250KytdLGJ1Zik7CisgICAgICAg ICAgICBpZiAoIWNrc3RyY21wKGJ1ZiwiSFRUUCIsNCwwKSkgeworICAgICAgICAgICAgICAgIGh0 dHBfZm5kID0gMTsKKyAgICAgICAgICAgICAgICBqID0gY2tpbmRleCgiICIsYnVmLDAsMCwwKTsK KyAgICAgICAgICAgICAgICBwID0gJmJ1ZltqXTsKKyAgICAgICAgICAgICAgICB3aGlsZSAoaXNz cGFjZSgqcCkpCisgICAgICAgICAgICAgICAgICBwKys7CisgICAgICAgICAgICAgICAgc3dpdGNo IChwWzBdKSB7CisgICAgICAgICAgICAgICAgICBjYXNlICcxJzogICAgICAgICAgICAgLyogSW5m b3JtYXRpb25hbCBtZXNzYWdlICovCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg ICAgICAgICAgICAgY2FzZSAnMic6ICAgICAgICAgICAgIC8qIFN1Y2Nlc3MgKi8KKyAgICAgICAg ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlICczJzogICAgICAgICAg ICAgLyogUmVkaXJlY3Rpb24gKi8KKyAgICAgICAgICAgICAgICAgIGNhc2UgJzQnOiAgICAgICAg ICAgICAvKiBDbGllbnQgZmFpbHVyZSAqLworICAgICAgICAgICAgICAgICAgY2FzZSAnNSc6ICAg ICAgICAgICAgIC8qIFNlcnZlciBmYWlsdXJlICovCisgICAgICAgICAgICAgICAgICBkZWZhdWx0 OiAgICAgICAgICAgICAgLyogVW5rbm93biAqLworICAgICAgICAgICAgICAgICAgICBpZiAoIXF1 aWV0KQorICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiRmFpbHVyZTogU2VydmVyIHJlcG9y dHMgJXNcbiIscCk7CisgICAgICAgICAgICAgICAgICAgIHJjID0gLTE7CisgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICAgIGh0dHBfc2V0X2NvZGVfcmVwbHkocCk7CisgICAgICAgICAg ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmICghY2tzdHJjbXAoYnVmLCJDb25uZWN0aW9u OiIsMTEsMCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBja2luZGV4KCJjbG9zZSIsYnVm LDExLDAsMCkgIT0gMCApCisgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZWNvbiA9IDE7Cisg ICAgICAgICAgICAgICAgfSBlbHNlIGlmICghY2tzdHJjbXAoYnVmLCJDb250ZW50LUxlbmd0aDoi LDE1LDApKSB7CisgICAgICAgICAgICAgICAgICAgIGxlbiA9IGF0b2koJmJ1ZlsxNl0pOworICAg ICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWNrc3RyY21wKGJ1ZiwiVHJhbnNmZXItRW5jb2Rpbmc6 IiwxOCwwKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIGNraW5kZXgoImNodW5rZWQiLGJ1 ZiwxOCwwLDApICE9IDAgKQorICAgICAgICAgICAgICAgICAgICAgICAgY2h1bmtlZCA9IDE7CisJ CSAgICBkZWJ1ZyhGMTAxLCJodHRwX2RlbGV0ZSBjaHVua2VkIiwiIixjaHVua2VkKTsKKyAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcHJpbnRmKCIlc1xuIixidWYpOworICAgICAg ICAgICAgfQorICAgICAgICAgICAgaSA9IDA7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg ICBpKys7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGNoIDwgMCAmJiBmaXJzdCkgeworICAg ICAgICBmaXJzdC0tOworICAgICAgICBodHRwX2Nsb3NlKCk7CisgICAgICAgIGh0dHBfcmVvcGVu KCk7CisgICAgICAgIGdvdG8gZGVscmVxOworICAgIH0KKyAgICBpZiAoIGh0dHBfZm5kID09IDAg KSB7CisgICAgICAgIHJjID0gLTE7CisgICAgICAgIGNsb3NlY29uID0gMTsKKyAgICAgICAgZ290 byBkZWxleGl0OworICAgIH0KKworICAgIC8qIEFueSByZXNwb25zZSBkYXRhPyAqLworICAgIGlm ICggY2h1bmtlZCApIHsKKyAgICAgICAgd2hpbGUgKChsZW4gPSBodHRwX2dldF9jaHVua19sZW4o KSkgPiAwKSB7CisgICAgICAgICAgICB3aGlsZSAobGVuICYmIChjaCA9IGh0dHBfaW5jKDApKSA+ PSAwKSB7CisgICAgICAgICAgICAgICAgbGVuLS07CisgICAgICAgICAgICAgICAgY29ub2MoKENI QVIpY2gpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKChjaCA9IGh0dHBfaW5jKDAp KSAhPSBDUikKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmICgoY2ggPSBo dHRwX2luYygwKSkgIT0gTEYpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg ICB9IGVsc2UgeworICAgICAgICB3aGlsZSAobGVuICYmIChjaCA9IGh0dHBfaW5jKDApKSA+PSAw KSB7CisgICAgICAgICAgICBsZW4tLTsKKyAgICAgICAgICAgIGNvbm9jKChDSEFSKWNoKTsKKyAg ICAgICAgfQorICAgIH0KKworICAgIGlmICggY2h1bmtlZCApIHsgICAgICAgICAgICAvKiBQYXJz ZSBUcmFpbGluZyBIZWFkZXJzICovCisgICAgICAgIG51bGxsaW5lID0gMDsKKyAgICAgICAgd2hp bGUgKCFudWxsbGluZSAmJiAoY2ggPSBodHRwX2luYygwKSkgPj0gMCAmJiBpIDwgSFRUUEJVRkxF TikgeworICAgICAgICAgICAgYnVmW2ldID0gY2g7CisgICAgICAgICAgICBpZiAoIGJ1ZltpXSA9 PSAxMCApIHsgLyogZm91bmQgZW5kIG9mIGxpbmUgKi8KKyAgICAgICAgICAgICAgICBpZiAoaSA+ IDAgJiYgYnVmW2ktMV0gPT0gMTMpCisgICAgICAgICAgICAgICAgICBpLS07CisgICAgICAgICAg ICAgICAgaWYgKGkgPCAxKQorICAgICAgICAgICAgICAgICAgbnVsbGxpbmUgPSAxOworICAgICAg ICAgICAgICAgIGJ1ZltpXSA9ICdcMCc7CisgICAgICAgICAgICAgICAgaWYgKGFycmF5ICYmICFu dWxsbGluZSAmJiBoZGNudCA8IEhUVFBIRUFEQ05UKQorICAgICAgICAgICAgICAgICAgICBtYWtl c3RyKCZoZWFkZXJzW2hkY250KytdLGJ1Zik7CisgICAgICAgICAgICAgICAgaWYgKCFja3N0cmNt cChidWYsIkNvbm5lY3Rpb246IiwxMSwwKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIGNr aW5kZXgoImNsb3NlIixidWYsMTEsMCwwKSAhPSAwICkKKyAgICAgICAgICAgICAgICAgICAgICAg IGNsb3NlY29uID0gMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaSA9IDA7 CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICAg IH0KKyAgICAgICAgfQorICAgIH0KKworICBkZWxleGl0OgorICAgIGlmIChhcnJheSkKKyAgICAg ICAgaHR0cF9ta2FycmF5KGhlYWRlcnMsaGRjbnQsYXJyYXkpOworCisgICAgaWYgKGNsb3NlY29u KQorICAgICAgICBodHRwX2Nsb3NlKCk7CisgICAgZnJlZShyZXF1ZXN0KTsKKyAgICBmb3IgKGkg PSAwOyBpIDwgaGRjbnQ7IGkrKykgeworICAgICAgICBpZiAoaGVhZGVyc1tpXSkKKyAgICAgICAg ICBmcmVlKGhlYWRlcnNbaV0pOworICAgIH0KKyAgICByZXR1cm4ocmMpOworfQorCitpbnQKKyNp ZmRlZiBDS19BTlNJQworaHR0cF9wb3N0KGNoYXIgKiBhZ2VudCwgY2hhciAqKiBoZHJsaXN0LCBj aGFyICogbWltZSwgY2hhciAqIHVzZXIsCisgICAgICAgICAgY2hhciAqIHB3ZCwgY2hhciBhcnJh eSwgY2hhciAqIGxvY2FsLCBjaGFyICogcmVtb3RlLAorICAgICAgICAgIGNoYXIgKiBkZXN0LCBp bnQgc3RkaW8pCisjZWxzZQoraHR0cF9wb3N0KGFnZW50LCBoZHJsaXN0LCBtaW1lLCB1c2VyLCBw d2QsIGFycmF5LCBsb2NhbCwgcmVtb3RlLCBkZXN0LAorICAgICAgICAgIHN0ZGlvKQorICAgIGNo YXIgKiBhZ2VudDsgY2hhciAqKiBoZHJsaXN0OyBjaGFyICogbWltZTsgY2hhciAqIHVzZXI7Cisg ICAgY2hhciAqIHB3ZDsgY2hhciBhcnJheTsgY2hhciAqIGxvY2FsOyBjaGFyICogcmVtb3RlOyBj aGFyICogZGVzdDsKKyAgICBpbnQgc3RkaW87CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAg ICBjaGFyICogcmVxdWVzdD1OVUxMOworICAgIGludCAgICBpLCBqLCBsZW4gPSAwLCBoZGNudCA9 IDAsIHJjID0gMDsKKyAgICBpbnQgICAgY2g7CisgICAgaW50ICAgIGh0dHBfZm5kID0gMDsKKyAg ICBjaGFyICAgYnVmW0hUVFBCVUZMRU5dLCAqcDsKKyAgICBpbnQgICAgbnVsbGxpbmU7CisgICAg dGltZV90IG1vZF90OworICAgIHRpbWVfdCBzcnZfdDsKKyAgICB0aW1lX3QgbG9jYWxfdDsKKyAg ICBjaGFyIHBhc3N3ZFs2NF07CisgICAgY2hhciBiNjRpblsxMjhdOworICAgIGNoYXIgYjY0b3V0 WzI1Nl07CisgICAgaW50ICBmaWxlbGVuOworICAgIGNoYXIgKiBoZWFkZXJzW0hUVFBIRUFEQ05U XTsKKyAgICBpbnQgIGNsb3NlY29uID0gMDsKKyAgICBpbnQgIGNodW5rZWQgPSAwOworICAgIGlu dCAgemZpbGUgPSAwOworICAgIGludCAgZmlyc3QgPSAxOworCisgICAgaWYgKGh0dHBmZCA9PSAt MSkKKyAgICAgIHJldHVybigtMSk7CisKKyAgICBpZiAoYXJyYXkpIHsKKyAgICAgICAgZm9yIChp ID0gMDsgaSA8IEhUVFBIRUFEQ05UOyBpKyspCisgICAgICAgICAgaGVhZGVyc1tpXSA9IE5VTEw7 CisgICAgfQorICAgIGZpbGVsZW4gPSB6Y2hraShsb2NhbCk7CisgICAgaWYgKGZpbGVsZW4gPCAw KQorICAgICAgcmV0dXJuKC0xKTsKKworICAgIC8qIENvbXB1dGUgbGVuZ3RoIG9mIHJlcXVlc3Qg aGVhZGVyICovCisgICAgbGVuID0gOTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUE9T VCAqLworICAgIGxlbiArPSBzdHJsZW4oSFRUUF9WRVJTSU9OKTsKKyAgICBsZW4gKz0gc3RybGVu KHJlbW90ZSk7CisgICAgbGVuICs9IDE2OworCisgICAgaWYgKCBoZHJsaXN0ICkgeworICAgICAg ICBmb3IgKGkgPSAwOyBoZHJsaXN0W2ldOyBpKyspCisgICAgICAgICAgICBsZW4gKz0gc3RybGVu KGhkcmxpc3RbaV0pICsgMjsKKyAgICB9CisgICAgbGVuICs9IHN0cmxlbihodHRwX2hvc3RfcG9y dCkgKyA4OworCisgICAgaWYgKGFnZW50KQorICAgICAgbGVuICs9IDEzICsgc3RybGVuKGFnZW50 KTsKKyAgICBpZiAodXNlcikgeworICAgICAgICBpZiAoIXB3ZCkgeworICAgICAgICAgICAgcmVh ZHBhc3MoIlBhc3N3b3JkOiAiLHBhc3N3ZCw2NCk7CisgICAgICAgICAgICBwd2QgPSBwYXNzd2Q7 CisgICAgICAgIH0KKyAgICAgICAgY2ttYWttc2coYjY0aW4sc2l6ZW9mKGI2NGluKSx1c2VyLCI6 Iixwd2QsTlVMTCk7CisgICAgICAgIGogPSBiOHRvYjY0KGI2NGluLHN0cmxlbihiNjRpbiksYjY0 b3V0LDI1Nik7CisgICAgICAgIG1lbXNldChwd2QsMCxzdHJsZW4ocHdkKSk7CisgICAgICAgIGlm IChqIDwgMCkKKyAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICBiNjRvdXRbal0gPSAnXDAn OworICAgICAgICBsZW4gKz0gaiArIDI0OworICAgIH0KKyAgICBsZW4gKz0gMTYgKyBzdHJsZW4o bWltZSk7ICAgICAgICAgICAvKiBDb250ZW50LXR5cGU6ICovCisgICAgbGVuICs9IDMyOyAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogQ29udGVudC1sZW5ndGg6ICovCisgICAgbGVuICs9IDMy OyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRGF0ZTogKi8KKyNpZmRlZiBIVFRQX0NMT1NF CisgICAgbGVuICs9IDE5OyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ29ubmVjdGlvbjog Y2xvc2UgKi8KKyNlbmRpZgorICAgIGxlbiArPSAzOyAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIGJsYW5rIGxpbmUgKyBudWxsICovCisKKyAgICByZXF1ZXN0ID0gbWFsbG9jKGxlbik7Cisg ICAgaWYgKCFyZXF1ZXN0KQorICAgICAgcmV0dXJuKC0xKTsKKworICAgIHNwcmludGYocmVxdWVz dCwiUE9TVCAlcyAlc1xyXG4iLHJlbW90ZSxIVFRQX1ZFUlNJT04pOworICAgIGNrc3RybmNhdChy ZXF1ZXN0LCJEYXRlOiAiLGxlbik7CisgICAgY2tzdHJuY2F0KHJlcXVlc3QsaHR0cF9ub3coKSxs ZW4pOworICAgIGNrc3RybmNhdChyZXF1ZXN0LCJcclxuIixsZW4pOworICAgIGNrc3RybmNhdChy ZXF1ZXN0LCJIb3N0OiAiLCBsZW4pOworICAgIGNrc3RybmNhdChyZXF1ZXN0LGh0dHBfaG9zdF9w b3J0LCBsZW4pOworICAgIGNrc3RybmNhdChyZXF1ZXN0LCJcclxuIixsZW4pOworICAgIGlmIChh Z2VudCkgeworICAgICAgICBja3N0cm5jYXQocmVxdWVzdCwiVXNlci1hZ2VudDogIixsZW4pOwor ICAgICAgICBja3N0cm5jYXQocmVxdWVzdCxhZ2VudCxsZW4pOworICAgICAgICBja3N0cm5jYXQo cmVxdWVzdCwiXHJcbiIsbGVuKTsKKyAgICB9CisgICAgaWYgKHVzZXIpIHsKKyAgICAgICAgY2tz dHJuY2F0KHJlcXVlc3QsIkF1dGhvcml6YXRpb246IEJhc2ljICIsbGVuKTsKKyAgICAgICAgY2tz dHJuY2F0KHJlcXVlc3QsYjY0b3V0LGxlbik7CisgICAgICAgIGNrc3RybmNhdChyZXF1ZXN0LCJc clxuIixsZW4pOworICAgIH0KKyAgICBpZiAoIGhkcmxpc3QgKSB7CisgICAgICAgIGZvciAoaSA9 IDA7IGhkcmxpc3RbaV07IGkrKykgeworICAgICAgICAgICAgY2tzdHJuY2F0KHJlcXVlc3QsaGRy bGlzdFtpXSxsZW4pOworICAgICAgICAgICAgY2tzdHJuY2F0KHJlcXVlc3QsIlxyXG4iLGxlbik7 CisgICAgICAgIH0KKyAgICB9CisgICAgY2tzdHJuY2F0KHJlcXVlc3QsIkNvbnRlbnQtdHlwZTog IixsZW4pOworICAgIGNrc3RybmNhdChyZXF1ZXN0LG1pbWUsbGVuKTsKKyAgICBja3N0cm5jYXQo cmVxdWVzdCwiXHJcbiIsbGVuKTsKKyNpZmRlZiBIVFRQX0NMT1NFCisgICAgY2tzdHJuY2F0KHJl cXVlc3QsIkNvbm5lY3Rpb246IGNsb3NlXHJcbiIsbGVuKTsKKyNlbmRpZgorICAgIHNwcmludGYo YnVmLCJDb250ZW50LWxlbmd0aDogJWRcclxuIixmaWxlbGVuKTsgLyogc2FmZSAqLworICAgIGNr c3RybmNhdChyZXF1ZXN0LGJ1ZixsZW4pOworICAgIGNrc3RybmNhdChyZXF1ZXN0LCJcclxuIixs ZW4pOworI2lmZGVmIENPTU1FTlQKKyAgICAvKiBUaGlzIGlzIGFwcGFyZW50bHkgYSBtaXN0YWtl IC0gdGhlIHByZXZpb3VzIGNrc3RybmNhdCgpIGFscmVhZHkgICovCisgICAgLyogYXBwZW5kZWQg YSBibGFuayBsaW5lIHRvIHRoZSByZXF1ZXN0LiAgVGhlcmUgc2hvdWxkIG9ubHkgYmUgb25lLiAq LworICAgIC8qIFNlcnZlcnMgYXJlIG5vdCByZXF1aXJlZCBieSBSRkMgMjYxNiB0byBpZ25vcmUg ZXh0cmFuZW91cyBlbXB0eSAgKi8KKyAgICAvKiBsaW5lcy4gIC1mZGMsIDI4IEF1ZyAyMDA1LiAq LworICAgIGNrc3RybmNhdChyZXF1ZXN0LCJcclxuIixsZW4pOworI2VuZGlmCS8qIENPTU1FTlQg Ki8KKworICAgIC8qIE5vdyB3ZSBoYXZlIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZSAqLworICBw b3N0b3BlbjoKKyAgICBpZiAoem9wZW5pKFpJRklMRSxsb2NhbCkpIHsKKyAgICAgIHBvc3RyZXE6 CisgICAgICAgIGlmIChodHRwX3RvbCgoQ0hBUiAqKXJlcXVlc3Qsc3RybGVuKHJlcXVlc3QpKSA8 IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGh0dHBfY2xvc2UoKTsKKyAgICAgICAgICAgIGlm ICggZmlyc3QgKSB7CisgICAgICAgICAgICAgICAgZmlyc3QtLTsKKyAgICAgICAgICAgICAgICBo dHRwX3Jlb3BlbigpOworICAgICAgICAgICAgICAgIGdvdG8gcG9zdHJlcTsKKyAgICAgICAgICAg IH0KKyAgICAgICAgICAgIHJjID0gLTE7CisgICAgICAgICAgICB6Y2xvc2UoWklGSUxFKTsKKyAg ICAgICAgICAgIGdvdG8gcG9zdGV4aXQ7CisgICAgICAgIH0KKworICAgICAgICBpID0gMDsKKyAg ICAgICAgd2hpbGUgKHpjaGluKFpJRklMRSwmY2gpID09IDApIHsKKyAgICAgICAgICAgIGJ1Zltp KytdID0gY2g7CisgICAgICAgICAgICBpZiAoaSA9PSBIVFRQQlVGTEVOKSB7CisgICAgICAgICAg ICAgICAgaHR0cF90b2woKENIQVIgKilidWYsSFRUUEJVRkxFTik7CisgICAgICAgICAgICAgICAg aSA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGkgPiAwKQorICAg ICAgICAgIGh0dHBfdG9sKChDSEFSICopYnVmLEhUVFBCVUZMRU4pOworICAgICAgICB6Y2xvc2Uo WklGSUxFKTsKKworICAgICAgICAvKiBQcm9jZXNzIHRoZSByZXNwb25zZSBoZWFkZXJzICovCisg ICAgICAgIGxvY2FsX3QgPSB0aW1lKE5VTEwpOworICAgICAgICBudWxsbGluZSA9IDA7CisgICAg ICAgIGkgPSAwOworICAgICAgICBsZW4gPSAtMTsKKyAgICAgICAgd2hpbGUgKCFudWxsbGluZSAm JiAoY2ggPSBodHRwX2luYygwKSkgPj0gMCAmJiBpIDwgSFRUUEJVRkxFTikgeworICAgICAgICAg ICAgYnVmW2ldID0gY2g7CisgICAgICAgICAgICBpZiAoYnVmW2ldID09IDEwKSB7ICAgICAgICAg LyogZm91bmQgZW5kIG9mIGxpbmUgKi8KKyAgICAgICAgICAgICAgICBpZiAoaSA+IDAgJiYgYnVm W2ktMV0gPT0gMTMpCisgICAgICAgICAgICAgICAgICBpLS07CisgICAgICAgICAgICAgICAgaWYg KGkgPCAxKQorICAgICAgICAgICAgICAgICAgbnVsbGxpbmUgPSAxOworICAgICAgICAgICAgICAg IGJ1ZltpXSA9ICdcMCc7CisgICAgICAgICAgICAgICAgaWYgKGFycmF5ICYmICFudWxsbGluZSAm JiBoZGNudCA8IEhUVFBIRUFEQ05UKQorICAgICAgICAgICAgICAgICAgbWFrZXN0cigmaGVhZGVy c1toZGNudCsrXSxidWYpOworICAgICAgICAgICAgICAgIGlmICghY2tzdHJjbXAoYnVmLCJIVFRQ Iiw0LDApKSB7CisgICAgICAgICAgICAgICAgICAgIGh0dHBfZm5kID0gMTsKKyAgICAgICAgICAg ICAgICAgICAgaiA9IGNraW5kZXgoIiAiLGJ1ZiwwLDAsMCk7CisgICAgICAgICAgICAgICAgICAg IHAgPSAmYnVmW2pdOworICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaXNzcGFjZSgqcCkpCisg ICAgICAgICAgICAgICAgICAgICAgcCsrOworICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHBb MF0pIHsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlICcxJzogICAgICAgICAvKiBJbmZvcm1h dGlvbmFsIG1lc3NhZ2UgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg ICAgICAgICAgICAgICAgIGNhc2UgJzInOiAgICAgICAgIC8qIFN1Y2Nlc3MgKi8KKyAgICAgICAg ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzMnOiAg ICAgICAgIC8qIFJlZGlyZWN0aW9uICovCisgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnNCc6 ICAgICAgICAgLyogQ2xpZW50IGZhaWx1cmUgKi8KKyAgICAgICAgICAgICAgICAgICAgICBjYXNl ICc1JzogICAgICAgICAvKiBTZXJ2ZXIgZmFpbHVyZSAqLworICAgICAgICAgICAgICAgICAgICAg IGRlZmF1bHQ6ICAgICAgICAgIC8qIFVua25vd24gKi8KKyAgICAgICAgICAgICAgICAgICAgICAg IGlmICghcXVpZXQpCisgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiRmFpbHVyZTog U2VydmVyIHJlcG9ydHMgJXNcbiIscCk7CisgICAgICAgICAgICAgICAgICAgICAgICByYyA9IC0x OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGh0dHBfc2V0X2Nv ZGVfcmVwbHkocCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAg ICAgaWYgKCFja3N0cmNtcChidWYsIkNvbm5lY3Rpb246IiwxMSwwKSkgeworICAgICAgICAgICAg ICAgICAgICAgICAgaWYgKCBja2luZGV4KCJjbG9zZSIsYnVmLDExLDAsMCkgIT0gMCApCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2Vjb24gPSAxOworICAgICAgICAgICAgICAgICAg ICB9IGVsc2UgaWYgKCFja3N0cmNtcChidWYsIkNvbnRlbnQtTGVuZ3RoOiIsMTUsMCkpIHsKKyAg ICAgICAgICAgICAgICAgICAgICAgIGxlbiA9IGF0b2koJmJ1ZlsxNl0pOworICAgICAgICAgICAg ICAgICAgICB9IGVsc2UgaWYgKCFja3N0cmNtcChidWYsIlRyYW5zZmVyLUVuY29kaW5nOiIsMTgs MCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY2tpbmRleCgiY2h1bmtlZCIsYnVm LDE4LDAsMCkgIT0gMCApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2h1bmtlZCA9IDE7 CisJCQlkZWJ1ZyhGMTAxLCJodHRwX3Bvc3QgY2h1bmtlZCIsIiIsY2h1bmtlZCk7CisgICAgICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0ZGlvKQorICAgICAgICAg ICAgICAgICAgICAgICAgcHJpbnRmKCIlc1xuIixidWYpOworICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgICBpID0gMDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg ICAgaSsrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChjaCA8IDAgJiYg Zmlyc3QpIHsKKyAgICAgICAgICAgIGZpcnN0LS07CisgICAgICAgICAgICBodHRwX2Nsb3NlKCk7 CisgICAgICAgICAgICBodHRwX3Jlb3BlbigpOworICAgICAgICAgICAgZ290byBwb3N0b3BlbjsK KyAgICAgICAgfQorICAgICAgICBpZiAoaHR0cF9mbmQgPT0gMCkgeworICAgICAgICAgICAgcmMg PSAtMTsKKyAgICAgICAgICAgIGNsb3NlY29uID0gMTsKKyAgICAgICAgICAgIGdvdG8gcG9zdGV4 aXQ7CisgICAgICAgIH0KKworICAgICAgICAvKiBBbnkgcmVzcG9uc2UgZGF0YT8gKi8KKyAgICAg ICAgaWYgKCBkZXN0ICYmIGRlc3RbMF0gKSB7CisgICAgICAgICAgICBpZiAoem9wZW5vKFpPRklM RSxkZXN0LE5VTEwsTlVMTCkpCisgICAgICAgICAgICAgICAgemZpbGUgPSAxOworICAgICAgICAg ICAgZWxzZQorICAgICAgICAgICAgICAgIHJjID0gLTE7CisgICAgICAgIH0KKworICAgICAgICBp ZiAoIGNodW5rZWQgKSB7CisgICAgICAgICAgICB3aGlsZSAoKGxlbiA9IGh0dHBfZ2V0X2NodW5r X2xlbigpKSA+IDApIHsKKyAgICAgICAgICAgICAgICB3aGlsZSAobGVuICYmIChjaCA9IGh0dHBf aW5jKDApKSA+PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIGxlbi0tOworICAgICAgICAgICAg ICAgICAgICBpZiAoIHpmaWxlICkKKyAgICAgICAgICAgICAgICAgICAgICAgIHpjaG91dChaT0ZJ TEUsKENIQVIpY2gpOworICAgICAgICAgICAgICAgICAgICBpZiAoIHN0ZGlvICkKKyAgICAgICAg ICAgICAgICAgICAgICAgIGNvbm9jKChDSEFSKWNoKTsKKyAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgICAgaWYgKChjaCA9IGh0dHBfaW5jKDApKSAhPSBDUikKKyAgICAgICAgICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgaWYgKChjaCA9IGh0dHBfaW5jKDApKSAhPSBM RikKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0g ZWxzZSB7CisgICAgICAgICAgICB3aGlsZSAobGVuICYmIChjaCA9IGh0dHBfaW5jKDApKSA+PSAw KSB7CisgICAgICAgICAgICAgICAgbGVuLS07CisgICAgICAgICAgICAgICAgaWYgKCB6ZmlsZSAp CisgICAgICAgICAgICAgICAgICAgIHpjaG91dChaT0ZJTEUsKENIQVIpY2gpOworICAgICAgICAg ICAgICAgIGlmICggc3RkaW8gKQorICAgICAgICAgICAgICAgICAgICBjb25vYygoQ0hBUiljaCk7 CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoIHpmaWxlICkKKyAgICAg ICAgICAgIHpjbG9zZShaT0ZJTEUpOworCisgICAgICAgIGlmICggY2h1bmtlZCApIHsgICAgICAg ICAgICAvKiBQYXJzZSBUcmFpbGluZyBIZWFkZXJzICovCisgICAgICAgICAgICBudWxsbGluZSA9 IDA7CisgICAgICAgICAgICB3aGlsZSAoIW51bGxsaW5lICYmIChjaCA9IGh0dHBfaW5jKDApKSA+ PSAwICYmIGkgPCBIVFRQQlVGTEVOKSB7CisgICAgICAgICAgICAgICAgYnVmW2ldID0gY2g7Cisg ICAgICAgICAgICAgICAgaWYgKCBidWZbaV0gPT0gMTAgKSB7IC8qIGZvdW5kIGVuZCBvZiBsaW5l ICovCisgICAgICAgICAgICAgICAgICAgIGlmIChpID4gMCAmJiBidWZbaS0xXSA9PSAxMykKKyAg ICAgICAgICAgICAgICAgICAgICBpLS07CisgICAgICAgICAgICAgICAgICAgIGlmIChpIDwgMSkK KyAgICAgICAgICAgICAgICAgICAgICBudWxsbGluZSA9IDE7CisgICAgICAgICAgICAgICAgICAg IGJ1ZltpXSA9ICdcMCc7CisgICAgICAgICAgICAgICAgICAgIGlmIChhcnJheSAmJiAhbnVsbGxp bmUgJiYgaGRjbnQgPCBIVFRQSEVBRENOVCkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1ha2Vz dHIoJmhlYWRlcnNbaGRjbnQrK10sYnVmKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFja3N0 cmNtcChidWYsIkNvbm5lY3Rpb246IiwxMSwwKSkgeworICAgICAgICAgICAgICAgICAgICAgICAg aWYgKCBja2luZGV4KCJjbG9zZSIsYnVmLDExLDAsMCkgIT0gMCApCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY2xvc2Vjb24gPSAxOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgICAgICAgIGkgPSAwOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg ICAgICAgICAgIGkrKzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg IH0KKyAgICB9IGVsc2UgeworICAgICAgICByYyA9IC0xOworICAgIH0KKworICBwb3N0ZXhpdDoK KyAgICBpZiAoYXJyYXkpCisgICAgICAgIGh0dHBfbWthcnJheShoZWFkZXJzLGhkY250LGFycmF5 KTsKKyAgICBpZiAoY2xvc2Vjb24pCisgICAgICAgIGh0dHBfY2xvc2UoKTsKKyAgICBmcmVlKHJl cXVlc3QpOworICAgIGZvciAoaSA9IDA7IGkgPCBoZGNudDsgaSsrKSB7CisgICAgICAgIGlmICho ZWFkZXJzW2ldKQorICAgICAgICAgIGZyZWUoaGVhZGVyc1tpXSk7CisgICAgfQorICAgIHJldHVy bihyYyk7Cit9CisKK2ludAorI2lmZGVmIENLX0FOU0lDCitodHRwX2Nvbm5lY3QoaW50IHNvY2tl dCwgY2hhciAqIGFnZW50LCBjaGFyICoqIGhkcmxpc3QsIGNoYXIgKiB1c2VyLAorICAgICAgICAg ICAgIGNoYXIgKiBwd2QsIGNoYXIgYXJyYXksIGNoYXIgKiBob3N0X3BvcnQpCisjZWxzZQoraHR0 cF9jb25uZWN0KHNvY2tldCwgYWdlbnQsIGhkcmxpc3QsIHVzZXIsIHB3ZCwgYXJyYXksIGhvc3Rf cG9ydCkKKyAgICBpbnQgc29ja2V0OworICAgIGNoYXIgKiBhZ2VudDsgY2hhciAqKiBoZHJsaXN0 OyBjaGFyICogdXNlcjsKKyAgICBjaGFyICogcHdkOyBjaGFyIGFycmF5OyBjaGFyICogaG9zdF9w b3J0OworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgY2hhciAqIHJlcXVlc3Q9TlVMTDsK KyAgICBpbnQgICAgaSwgaiwgbGVuID0gMCwgaGRjbnQgPSAwLCByYyA9IDA7CisgICAgaW50ICAg IGh0dHBfZm5kID0gMDsKKyAgICBjaGFyICAgYnVmW0hUVFBCVUZMRU5dLCAqcCwgY2g7CisgICAg aW50ICAgIG51bGxsaW5lOworICAgIHRpbWVfdCBtb2RfdDsKKyAgICB0aW1lX3Qgc3J2X3Q7Cisg ICAgdGltZV90IGxvY2FsX3Q7CisgICAgY2hhciBwYXNzd2RbNjRdOworICAgIGNoYXIgYjY0aW5b MTI4XTsKKyAgICBjaGFyIGI2NG91dFsyNTZdOworICAgIGNoYXIgKiBoZWFkZXJzW0hUVFBIRUFE Q05UXTsKKyAgICBpbnQgICAgY29ubmVjdGVkID0gMDsKKworICAgIHRjcF9odHRwX3Byb3h5X2Vy cm5vID0gMDsKKworICAgIGlmIChzb2NrZXQgPT0gLTEpCisgICAgICByZXR1cm4oLTEpOworCisg ICAgaWYgKGFycmF5KSB7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBIVFRQSEVBRENOVDsgaSsr KQorICAgICAgICAgIGhlYWRlcnNbaV0gPSBOVUxMOworICAgIH0KKworICAgIC8qIENvbXB1dGUg bGVuZ3RoIG9mIHJlcXVlc3QgaGVhZGVyICovCisgICAgbGVuID0gMTI7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIENPTk5FQ1QgKi8KKyAgICBsZW4gKz0gc3RybGVuKEhUVFBfVkVSU0lP Tik7CisgICAgbGVuICs9IHN0cmxlbihob3N0X3BvcnQpOworICAgIGxlbiArPSAoaW50KSBzdHJs ZW4oaHR0cF9ob3N0X3BvcnQpICsgODsKKyAgICBsZW4gKz0gMTY7CisgICAgbGVuICs9IHN0cmxl bigiUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZVxyXG4iKTsKKyAgICBpZiAoIGhkcmxpc3Qg KSB7CisgICAgICAgIGZvciAoaSA9IDA7IGhkcmxpc3RbaV07IGkrKykKKyAgICAgICAgICAgIGxl biArPSBzdHJsZW4oaGRybGlzdFtpXSkgKyAyOworICAgIH0KKyAgICBpZiAoYWdlbnQgJiYgYWdl bnRbMF0pCisgICAgICBsZW4gKz0gMTMgKyBzdHJsZW4oYWdlbnQpOworICAgIGlmICh1c2VyICYm IHVzZXJbMF0pIHsKKyAgICAgICAgaWYgKCFwd2QpIHsKKyAgICAgICAgICAgIHJlYWRwYXNzKCJQ YXNzd29yZDogIixwYXNzd2QsNjQpOworICAgICAgICAgICAgcHdkID0gcGFzc3dkOworICAgICAg ICB9CisgICAgICAgIGNrbWFrbXNnKGI2NGluLHNpemVvZihiNjRpbiksdXNlciwiOiIscHdkLE5V TEwpOworICAgICAgICBqID0gYjh0b2I2NChiNjRpbixzdHJsZW4oYjY0aW4pLGI2NG91dCwyNTYp OworICAgICAgICBtZW1zZXQocHdkLDAsc3RybGVuKHB3ZCkpOworICAgICAgICBpZiAoaiA8IDAp CisgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgYjY0b3V0W2pdID0gJ1wwJzsKKyAgICAg ICAgbGVuICs9IGogKyA3MjsKKyAgICB9CisgICAgbGVuICs9IDMyOyAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogRGF0ZTogKi8KKyAgICBsZW4gKz0gMzsgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBibGFuayBsaW5lICsgbnVsbCAqLworCisgICAgcmVxdWVzdCA9IG1hbGxvYyhsZW4p OworICAgIGlmICghcmVxdWVzdCkKKyAgICAgIHJldHVybigtMSk7CisKKyAgICBzcHJpbnRmKHJl cXVlc3QsIkNPTk5FQ1QgJXMgJXNcclxuIixob3N0X3BvcnQsSFRUUF9WRVJTSU9OKTsKKyAgICBj a3N0cm5jYXQocmVxdWVzdCwiRGF0ZTogIixsZW4pOworI2lmZGVmIENNREFURTJUTQorICAgIGNr c3RybmNhdChyZXF1ZXN0LGh0dHBfbm93KCksbGVuKTsKKyNlbHNlCisgICAgc3RyY2F0KHJlcXVl c3QsLi4uKTsKKyNlbmRpZiAvKiBDTURBVEUyVE0gKi8KKyAgICBja3N0cm5jYXQocmVxdWVzdCwi XHJcbiIsbGVuKTsKKyAgICBja3N0cm5jYXQocmVxdWVzdCwiSG9zdDogIiwgbGVuKTsKKyAgICBj a3N0cm5jYXQocmVxdWVzdCxodHRwX2hvc3RfcG9ydCwgbGVuKTsKKyAgICBja3N0cm5jYXQocmVx dWVzdCwiXHJcbiIsbGVuKTsKKyAgICBpZiAoYWdlbnQgJiYgYWdlbnRbMF0pIHsKKyAgICAgICAg Y2tzdHJuY2F0KHJlcXVlc3QsIlVzZXItYWdlbnQ6ICIsbGVuKTsKKyAgICAgICAgY2tzdHJuY2F0 KHJlcXVlc3QsYWdlbnQsbGVuKTsKKyAgICAgICAgY2tzdHJuY2F0KHJlcXVlc3QsIlxyXG4iLGxl bik7CisgICAgfQorICAgIGlmICh1c2VyICYmIHVzZXJbMF0pIHsKKyAgICAgICAgY2tzdHJuY2F0 KHJlcXVlc3QsIlByb3h5LWF1dGhvcml6YXRpb246IEJhc2ljICIsbGVuKTsKKyAgICAgICAgY2tz dHJuY2F0KHJlcXVlc3QsYjY0b3V0LGxlbik7CisgICAgICAgIGNrc3RybmNhdChyZXF1ZXN0LCJc clxuIixsZW4pOworICAgICAgICBja3N0cm5jYXQocmVxdWVzdCwiRXh0ZW5zaW9uOiBTZWN1cml0 eS9SZW1vdGUtUGFzc3BocmFzZVxyXG4iLGxlbik7CisgICAgfQorICAgIGNrc3RybmNhdChyZXF1 ZXN0LCJQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlXHJcbiIsbGVuKTsKKyAgICBpZiAoIGhk cmxpc3QgKSB7CisgICAgICAgIGZvciAoaSA9IDA7IGhkcmxpc3RbaV07IGkrKykgeworICAgICAg ICAgICAgY2tzdHJuY2F0KHJlcXVlc3QsaGRybGlzdFtpXSxsZW4pOworICAgICAgICAgICAgY2tz dHJuY2F0KHJlcXVlc3QsIlxyXG4iLGxlbik7CisgICAgICAgIH0KKyAgICB9CisgICAgY2tzdHJu Y2F0KHJlcXVlc3QsIlxyXG4iLGxlbik7CisgICAgbGVuID0gc3RybGVuKHJlcXVlc3QpOworCisj aWZkZWYgVENQSVBMSUIKKyAgICAvKiBTZW5kIHJlcXVlc3QgKi8KKyAgICBpZiAoc29ja2V0X3dy aXRlKHNvY2tldCwoQ0hBUiAqKXJlcXVlc3Qsc3RybGVuKHJlcXVlc3QpKSA8IDApIHsKKyAgICAg IHJjID0gLTE7CisgICAgICBnb3RvIGNvbm5leGl0OworICAgIH0KKyNlbHNlCisgICAgaWYgKHdy aXRlKHNvY2tldCwoQ0hBUiAqKXJlcXVlc3Qsc3RybGVuKHJlcXVlc3QpKSA8IDApIHsgLyogU2Vu ZCByZXF1ZXN0ICovCisgICAgICAgIHJjID0gLTE7CisgICAgICAgIGdvdG8gY29ubmV4aXQ7Cisg ICAgfQorI2VuZGlmIC8qIFRDUElQTElCICovCisKKyAgICAvKiBQcm9jZXNzIHRoZSByZXNwb25z ZSBoZWFkZXJzICovCisgICAgbG9jYWxfdCA9IHRpbWUoTlVMTCk7CisgICAgbnVsbGxpbmUgPSAw OworICAgIGkgPSAwOworICAgIHdoaWxlICghbnVsbGxpbmUgJiYKKyNpZmRlZiBUQ1BJUExJQgor ICAgICAgICAgICAoc29ja2V0X3JlYWQoc29ja2V0LCZjaCwxKSA9PSAxKSAmJgorI2Vsc2UKKyAg ICAgICAgICAgKHJlYWQoc29ja2V0LCZjaCwxKSA9PSAxKSAmJgorI2VuZGlmIC8qIFRDUElQTElC ICovCisgICAgICAgICAgIGkgPCBIVFRQQlVGTEVOKSB7CisgICAgICAgIGJ1ZltpXSA9IGNoOwor ICAgICAgICBpZiAoYnVmW2ldID09IDEwKSB7ICAgICAgICAgLyogZm91bmQgZW5kIG9mIGxpbmUg Ki8KKyAgICAgICAgICAgIGlmIChpID4gMCAmJiBidWZbaS0xXSA9PSAxMykKKyAgICAgICAgICAg ICAgaS0tOworICAgICAgICAgICAgaWYgKGkgPCAxKQorICAgICAgICAgICAgICBudWxsbGluZSA9 IDE7CisgICAgICAgICAgICBidWZbaV0gPSAnXDAnOworCisgICAgICAgICAgICBpZiAoYXJyYXkg JiYgIW51bGxsaW5lICYmIGhkY250IDwgSFRUUEhFQURDTlQpCisgICAgICAgICAgICAgICAgbWFr ZXN0cigmaGVhZGVyc1toZGNudCsrXSxidWYpOworICAgICAgICAgICAgaWYgKCFja3N0cmNtcChi dWYsIkhUVFAiLDQsMCkpIHsKKyAgICAgICAgICAgICAgICBodHRwX2ZuZCA9IDE7CisgICAgICAg ICAgICAgICAgaiA9IGNraW5kZXgoIiAiLGJ1ZiwwLDAsMCk7CisgICAgICAgICAgICAgICAgcCA9 ICZidWZbal07CisgICAgICAgICAgICAgICAgd2hpbGUgKGlzc3BhY2UoKnApKQorICAgICAgICAg ICAgICAgICAgcCsrOworICAgICAgICAgICAgICAgIHRjcF9odHRwX3Byb3h5X2Vycm5vID0gYXRv aShwKTsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHBbMF0pIHsKKyAgICAgICAgICAgICAgICAg IGNhc2UgJzEnOiAgICAgICAgICAgICAvKiBJbmZvcm1hdGlvbmFsIG1lc3NhZ2UgKi8KKyAgICAg ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlICcyJzogICAgICAg ICAgICAgLyogU3VjY2VzcyAqLworICAgICAgICAgICAgICAgICAgICBjb25uZWN0ZWQgPSAxOwor ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgJzMnOiAg ICAgICAgICAgICAvKiBSZWRpcmVjdGlvbiAqLworICAgICAgICAgICAgICAgICAgY2FzZSAnNCc6 ICAgICAgICAgICAgIC8qIENsaWVudCBmYWlsdXJlICovCisgICAgICAgICAgICAgICAgICBjYXNl ICc1JzogICAgICAgICAgICAgLyogU2VydmVyIGZhaWx1cmUgKi8KKyAgICAgICAgICAgICAgICAg IGRlZmF1bHQ6ICAgICAgICAgICAgICAvKiBVbmtub3duICovCisgICAgICAgICAgICAgICAgICAg IGlmICghcXVpZXQpCisgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJGYWlsdXJlOiBTZXJ2 ZXIgcmVwb3J0cyAlc1xuIixwKTsKKyAgICAgICAgICAgICAgICAgICAgcmMgPSAtMTsKKyAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaHR0cF9zZXRfY29kZV9yZXBseShwKTsKKyAg ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCIlc1xuIixidWYpOwor ICAgICAgICAgICAgfQorICAgICAgICAgICAgaSA9IDA7CisgICAgICAgIH0gZWxzZSB7CisgICAg ICAgICAgICBpKys7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKCBodHRwX2ZuZCA9PSAwICkK KyAgICAgICAgcmMgPSAtMTsKKworICAgIGlmIChhcnJheSkKKyAgICAgICAgaHR0cF9ta2FycmF5 KGhlYWRlcnMsaGRjbnQsYXJyYXkpOworCisgIGNvbm5leGl0OgorICAgIGlmICggIWNvbm5lY3Rl ZCApIHsKKyAgICAgICAgaWYgKCBzb2NrZXQgPT0gdHR5ZmQgKSB7CisgICAgICAgICAgICB0dGNs b3MoMCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoIHNvY2tldCA9PSBodHRwZmQgKSB7 CisgICAgICAgICAgICBodHRwX2Nsb3NlKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmcmVl KHJlcXVlc3QpOworICAgIGZvciAoaSA9IDA7IGkgPCBoZGNudDsgaSsrKSB7CisgICAgICAgIGlm IChoZWFkZXJzW2ldKQorICAgICAgICAgIGZyZWUoaGVhZGVyc1tpXSk7CisgICAgfQorICAgIHJl dHVybihyYyk7Cit9CisjZW5kaWYgLyogTk9IVFRQICovCisKKyNpZmRlZiBDS19ETlNfU1JWCisK KyNkZWZpbmUgSU5DUl9DSEVDSyh4LHkpIHggKz0geTsgaWYgKHggPiBzaXplICsgYW5zd2VyLmJ5 dGVzKSBnb3RvIGRuc291dAorI2RlZmluZSBDSEVDSyh4LHkpIGlmICh4ICsgeSA+IHNpemUgKyBh bnN3ZXIuYnl0ZXMpIGdvdG8gZG5zb3V0CisjZGVmaW5lIE5UT0hTUCh4LHkpIHhbMF0gPDwgOCB8 IHhbMV07IHggKz0geQorCisjaWZuZGVmIENLUVVFUllUWVBFCisjaWZkZWYgVU5JWFdBUkUKKyNp Zm5kZWYgVVc3CisjZGVmaW5lIENLUVVFUllUWVBFIENIQVIKKyNlbmRpZiAvKiBVVzcgKi8KKyNl bmRpZiAvKiBVTklYV0FSRSAqLworI2VuZGlmIC8qIENLUVVFUllUWVBFICovCisKKyNpZm5kZWYg Q0tRVUVSWVRZUEUKKyNkZWZpbmUgQ0tRVUVSWVRZUEUgY2hhcgorI2VuZGlmIC8qIENLUVVFUllU WVBFICovCisKKy8qIDEgaXMgc3VjY2VzcywgMCBpcyBmYWlsdXJlICovCitpbnQKK2xvY2F0ZV9z cnZfZG5zKGhvc3QsIHNlcnZpY2UsIHByb3RvY29sLCBhZGRyX3BwLCBuYWRkcnMpCisgICAgY2hh ciAqaG9zdDsKKyAgICBjaGFyICpzZXJ2aWNlOworICAgIGNoYXIgKnByb3RvY29sOworICAgIHN0 cnVjdCBzb2NrYWRkciAqKmFkZHJfcHA7CisgICAgaW50ICpuYWRkcnM7Cit7CisgICAgaW50IG5v dXQsIGosIGNvdW50OworICAgIHVuaW9uIHsKKyAgICAgICAgdW5zaWduZWQgY2hhciBieXRlc1sy MDQ4XTsKKyAgICAgICAgSEVBREVSIGhkcjsKKyAgICB9IGFuc3dlcjsKKyAgICB1bnNpZ25lZCBj aGFyICpwPU5VTEw7CisgICAgQ0tRVUVSWVRZUEUgcXVlcnlbTUFYX0ROU19OQU1FTEVOXTsKKyNp ZmRlZiBDS19BTlNJQworICAgIGNvbnN0IGNoYXIgKiBoOworI2Vsc2UKKyAgICBjaGFyICogaDsK KyNlbmRpZiAvKiBDS19BTlNJQyAqLworICAgIHN0cnVjdCBzb2NrYWRkciAqYWRkciA9IE5VTEw7 CisgICAgc3RydWN0IHNvY2thZGRyX2luICpzaW4gPSBOVUxMOworICAgIHN0cnVjdCBob3N0ZW50 ICpocCA9IE5VTEw7CisgICAgaW50IHR5cGUsIGNsYXNzOworICAgIGludCBwcmlvcml0eSwgd2Vp Z2h0LCBzaXplLCBsZW4sIG51bWFuc3dlcnMsIG51bXF1ZXJpZXMsIHJkbGVuOworICAgIHVuc2ln bmVkIHNob3J0IHBvcnQ7CisjaWZkZWYgQ0tfQU5TSUMKKyAgICBjb25zdAorI2VuZGlmIC8qIENL X0FOU0lDICovCisgICAgICBpbnQgaGRyc2l6ZSA9IHNpemVvZihIRUFERVIpOworICAgIHN0cnVj dCBzcnZfZG5zX2VudHJ5IHsKKyAgICAgICAgc3RydWN0IHNydl9kbnNfZW50cnkgKm5leHQ7Cisg ICAgICAgIGludCBwcmlvcml0eTsKKyAgICAgICAgaW50IHdlaWdodDsKKyAgICAgICAgdW5zaWdu ZWQgc2hvcnQgcG9ydDsKKyAgICAgICAgY2hhciAqaG9zdDsKKyAgICB9OworICAgIHN0cnVjdCBz cnZfZG5zX2VudHJ5ICpoZWFkID0gTlVMTDsKKyAgICBzdHJ1Y3Qgc3J2X2Ruc19lbnRyeSAqc3J2 ID0gTlVMTCwgKmVudHJ5ID0gTlVMTDsKKyAgICBjaGFyICogcyA9IE5VTEw7CisKKyAgICBub3V0 ID0gMDsKKyAgICBhZGRyID0gKHN0cnVjdCBzb2NrYWRkciAqKSBtYWxsb2Moc2l6ZW9mKHN0cnVj dCBzb2NrYWRkcikpOworICAgIGlmIChhZGRyID09IE5VTEwpCisgICAgICByZXR1cm4gMDsKKwor ICAgIGNvdW50ID0gMTsKKworICAgIC8qCisgICAgICogRmlyc3QgYnVpbGQgYSBxdWVyeSBvZiB0 aGUgZm9ybToKKyAgICAgKgorICAgICAqICAgc2VydmljZS5wcm90b2NvbC5ob3N0CisgICAgICoK KyAgICAgKiB3aGljaCB3aWxsIG1vc3QgbGlrZWx5IGJlIHNvbWV0aGluZyBsaWtlOgorICAgICAq CisgICAgICogICBfdGVsbmV0Ll90Y3AuaG9zdAorICAgICAqCisgICAgICovCisgICAgaWYgKCgo aW50KXN0cmxlbihzZXJ2aWNlKSArIHN0cmxlbihwcm90b2NvbCkgKyBzdHJsZW4oaG9zdCkgKyA1 KQorICAgICAgICA+IE1BWF9ETlNfTkFNRUxFTgorICAgICAgICApCisgICAgICBnb3RvIGRuc291 dDsKKworICAgIC8qIFJlYWxtIG5hbWVzIGRvbid0IChub3JtYWxseSkgZW5kIHdpdGggIi4iLCBi dXQgaWYgdGhlIHF1ZXJ5CisgICAgICAgZG9lc24ndCBlbmQgd2l0aCAiLiIgYW5kIGRvZXNuJ3Qg Z2V0IGFuIGFuc3dlciBhcyBpcywgdGhlCisgICAgICAgcmVzb2x2IGNvZGUgd2lsbCB0cnkgYXBw ZW5kaW5nIHRoZSBsb2NhbCBkb21haW4uICBTaW5jZSB0aGUKKyAgICAgICByZWFsbSBuYW1lcyBh cmUgYWJzb2x1dGVzLCBsZXQncyBzdG9wIHRoYXQuCisKKyAgICAgICBCdXQgb25seSBpZiBhIG5h bWUgaGFzIGJlZW4gc3BlY2lmaWVkLiAgSWYgd2UgYXJlIHBlcmZvcm1pbmcKKyAgICAgICBhIHNl YXJjaCBvbiB0aGUgcHJlZml4IGFsb25lIHRoZW4gdGhlIGludGVudGlvbiBpcyB0byBhbGxvdwor ICAgICAgIHRoZSBsb2NhbCBkb21haW4gb3IgZG9tYWluIHNlYXJjaCBsaXN0cyB0byBiZSBleHBh bmRlZC4KKyAgICAqLworICAgIGggPSBob3N0ICsgc3RybGVuIChob3N0KTsKKyAgICBja21ha3ht c2cocXVlcnksIHNpemVvZihxdWVyeSksICJfIixzZXJ2aWNlLCIuXyIscHJvdG9jb2wsIi4iLCBo b3N0LAorICAgICAgICAgICAgICAoKGggPiBob3N0KSAmJiAoaFstMV0gIT0gJy4nKT8iLiI6TlVM TCksCisgICAgICAgICAgICAgICBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwpOworCisgICAgc2l6 ZSA9IHJlc19zZWFyY2gocXVlcnksIENfSU4sIFRfU1JWLCBhbnN3ZXIuYnl0ZXMsIHNpemVvZihh bnN3ZXIuYnl0ZXMpKTsKKworICAgIGlmIChzaXplIDwgaGRyc2l6ZSkKKyAgICAgIGdvdG8gZG5z b3V0OworCisgICAgLyogV2UgZ290IGEgcmVwbHkgLSBTZWUgaG93IG1hbnkgYW5zd2VycyBpdCBj b250YWlucy4gKi8KKworICAgIHAgPSBhbnN3ZXIuYnl0ZXM7CisKKyAgICBudW1xdWVyaWVzID0g bnRvaHMoYW5zd2VyLmhkci5xZGNvdW50KTsKKyAgICBudW1hbnN3ZXJzID0gbnRvaHMoYW5zd2Vy Lmhkci5hbmNvdW50KTsKKworICAgIHAgKz0gc2l6ZW9mKEhFQURFUik7CisKKyAgICAvKgorICAg ICAqIFdlIG5lZWQgdG8gc2tpcCBvdmVyIGFsbCBvZiB0aGUgcXVlc3Rpb25zLCBzbyB3ZSBoYXZl IHRvIGl0ZXJhdGUKKyAgICAgKiBvdmVyIGV2ZXJ5IHF1ZXJ5IHJlY29yZC4gIGRuX2V4cGFuZCgp IGlzIGFibGUgdG8gdGVsbCB1cyB0aGUgc2l6ZQorICAgICAqIG9mIGNvbXByZXNzZWQgRE5TIG5h bWVzLCBzbyB3ZSB1c2UgaXQuCisgICAgICovCisgICAgd2hpbGUgKG51bXF1ZXJpZXMtLSkgewor ICAgICAgICBsZW4gPSBkbl9leHBhbmQoYW5zd2VyLmJ5dGVzLGFuc3dlci5ieXRlcytzaXplLHAs cXVlcnksc2l6ZW9mKHF1ZXJ5KSk7CisgICAgICAgIGlmIChsZW4gPCAwKQorICAgICAgICAgIGdv dG8gZG5zb3V0OworICAgICAgICBJTkNSX0NIRUNLKHAsIGxlbiArIDQpOworICAgIH0KKworICAg IC8qCisgICAgICogV2UncmUgbm93IHBvaW50aW5nIGF0IHRoZSBhbnN3ZXIgcmVjb3Jkcy4gIE9u bHkgcHJvY2VzcyB0aGVtIGlmCisgICAgICogdGhleSdyZSBhY3R1YWxseSBUX1NSViByZWNvcmRz ICh0aGV5IG1pZ2h0IGJlIENOQU1FIHJlY29yZHMsCisgICAgICogZm9yIGluc3RhbmNlKS4KKyAg ICAgKgorICAgICAqIEJ1dCBpbiBhIEROUyByZXBseSwgaWYgeW91IGdldCBhIENOQU1FIHlvdSBh bHdheXMgZ2V0IHRoZSBhc3NvY2lhdGVkCisgICAgICogInJlYWwiIFJSIGZvciB0aGF0IENOQU1F LiAgUkZDIDEwMzQsIDMuNi4yOgorICAgICAqCisgICAgICogQ05BTUUgUlJzIGNhdXNlIHNwZWNp YWwgYWN0aW9uIGluIEROUyBzb2Z0d2FyZS4gIFdoZW4gYSBuYW1lIHNlcnZlcgorICAgICAqIGZh aWxzIHRvIGZpbmQgYSBkZXNpcmVkIFJSIGluIHRoZSByZXNvdXJjZSBzZXQgYXNzb2NpYXRlZCB3 aXRoIHRoZQorICAgICAqIGRvbWFpbiBuYW1lLCBpdCBjaGVja3MgdG8gc2VlIGlmIHRoZSByZXNv dXJjZSBzZXQgY29uc2lzdHMgb2YgYSBDTkFNRQorICAgICAqIHJlY29yZCB3aXRoIGEgbWF0Y2hp bmcgY2xhc3MuICBJZiBzbywgdGhlIG5hbWUgc2VydmVyIGluY2x1ZGVzIHRoZSBDTkFNRQorICAg ICAqIHJlY29yZCBpbiB0aGUgcmVzcG9uc2UgYW5kIHJlc3RhcnRzIHRoZSBxdWVyeSBhdCB0aGUg ZG9tYWluIG5hbWUKKyAgICAgKiBzcGVjaWZpZWQgaW4gdGhlIGRhdGEgZmllbGQgb2YgdGhlIENO QU1FIHJlY29yZC4gIFRoZSBvbmUgZXhjZXB0aW9uIHRvCisgICAgICogdGhpcyBydWxlIGlzIHRo YXQgcXVlcmllcyB3aGljaCBtYXRjaCB0aGUgQ05BTUUgdHlwZSBhcmUgbm90IHJlc3RhcnRlZC4K KyAgICAgKgorICAgICAqIEluIG90aGVyIHdvcmRzLCBDTkFNRXMgZG8gbm90IG5lZWQgdG8gYmUg ZXhwYW5kZWQgYnkgdGhlIGNsaWVudC4KKyAgICAgKi8KKyAgICB3aGlsZSAobnVtYW5zd2Vycy0t KSB7CisKKyAgICAgICAgLyogRmlyc3QgaXMgdGhlIG5hbWU7IHVzZSBkbl9leHBhbmQoKSB0byBn ZXQgdGhlIGNvbXByZXNzZWQgc2l6ZS4gKi8KKyAgICAgICAgbGVuID0gZG5fZXhwYW5kKGFuc3dl ci5ieXRlcyxhbnN3ZXIuYnl0ZXMrc2l6ZSxwLHF1ZXJ5LHNpemVvZihxdWVyeSkpOworICAgICAg ICBpZiAobGVuIDwgMCkKKyAgICAgICAgICBnb3RvIGRuc291dDsKKyAgICAgICAgSU5DUl9DSEVD SyhwLCBsZW4pOworCisgICAgICAgIENIRUNLKHAsMik7ICAgICAgICAgICAgICAgICAgICAgLyog UXVlcnkgdHlwZSAqLworICAgICAgICB0eXBlID0gTlRPSFNQKHAsMik7CisKKyAgICAgICAgQ0hF Q0socCwgNik7ICAgICAgICAgICAgICAgICAgICAvKiBRdWVyeSBjbGFzcyAqLworICAgICAgICBj bGFzcyA9IE5UT0hTUChwLDYpOyAgICAgICAgICAgIC8qIEFsc28gc2tpcCBvdmVyIDQtYnl0ZSBU VEwgKi8KKworICAgICAgICBDSEVDSyhwLDIpOyAgICAgICAgICAgICAgICAgICAgIC8qIFJlY29y ZCBkYXRhIGxlbmd0aCAqLworICAgICAgICByZGxlbiA9IE5UT0hTUChwLDIpOworICAgICAgICAv KgorICAgICAgICAgKiBJZiB0aGlzIGlzIGFuIFNSViByZWNvcmQsIHByb2Nlc3MgaXQuICBSZWNv cmQgZm9ybWF0IGlzOgorICAgICAgICAgKgorICAgICAgICAgKiBQcmlvcml0eQorICAgICAgICAg KiBXZWlnaHQKKyAgICAgICAgICogUG9ydAorICAgICAgICAgKiBTZXJ2ZXIgbmFtZQorICAgICAg ICAgKi8KKyAgICAgICAgaWYgKGNsYXNzID09IENfSU4gJiYgdHlwZSA9PSBUX1NSVikgeworICAg ICAgICAgICAgQ0hFQ0socCwyKTsKKyAgICAgICAgICAgIHByaW9yaXR5ID0gTlRPSFNQKHAsMik7 CisgICAgICAgICAgICBDSEVDSyhwLCAyKTsKKyAgICAgICAgICAgIHdlaWdodCA9IE5UT0hTUChw LDIpOworICAgICAgICAgICAgQ0hFQ0socCwgMik7CisgICAgICAgICAgICBwb3J0ID0gTlRPSFNQ KHAsMik7CisgICAgICAgICAgICBsZW4gPSBkbl9leHBhbmQoYW5zd2VyLgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGJ5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuc3dl ci5ieXRlcyArIHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICBxdWVyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBz aXplb2YocXVlcnkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAg IGlmIChsZW4gPCAwKQorICAgICAgICAgICAgICBnb3RvIGRuc291dDsKKyAgICAgICAgICAgIElO Q1JfQ0hFQ0socCwgbGVuKTsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBXZSBnb3Qg ZXZlcnl0aGluZy4gIEluc2VydCBpdCBpbnRvIG91ciBsaXN0LCBidXQgbWFrZSBzdXJlCisgICAg ICAgICAgICAgKiBpdCdzIGluIHRoZSByaWdodCBvcmRlci4gIFJpZ2h0IG5vdyB3ZSBkb24ndCBk byBhbnl0aGluZworICAgICAgICAgICAgICogd2l0aCB0aGUgd2VpZ2h0IGZpZWxkCisgICAgICAg ICAgICAgKi8KKyAgICAgICAgICAgIHNydiA9IChzdHJ1Y3Qgc3J2X2Ruc19lbnRyeSAqKW1hbGxv YyhzaXplb2Yoc3RydWN0IHNydl9kbnNfZW50cnkpKTsKKyAgICAgICAgICAgIGlmIChzcnYgPT0g TlVMTCkKKyAgICAgICAgICAgICAgZ290byBkbnNvdXQ7CisKKyAgICAgICAgICAgIHNydi0+cHJp b3JpdHkgPSBwcmlvcml0eTsKKyAgICAgICAgICAgIHNydi0+d2VpZ2h0ID0gd2VpZ2h0OworICAg ICAgICAgICAgc3J2LT5wb3J0ID0gcG9ydDsKKyAgICAgICAgICAgIG1ha2VzdHIoJnMsKGNoYXIg KilxdWVyeSk7ICAvKiBzdHJkdXAoKSBpcyBub3QgcG9ydGFibGUgKi8KKyAgICAgICAgICAgIHNy di0+aG9zdCA9IHM7CisKKyAgICAgICAgICAgIGlmIChoZWFkID09IE5VTEwgfHwgaGVhZC0+cHJp b3JpdHkgPiBzcnYtPnByaW9yaXR5KSB7CisgICAgICAgICAgICAgICAgc3J2LT5uZXh0ID0gaGVh ZDsKKyAgICAgICAgICAgICAgICBoZWFkID0gc3J2OworICAgICAgICAgICAgfSBlbHNlCisgICAg ICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiBDb25mdXNpbmcuICBJbnNlcnQgYW4g ZW50cnkgaW50byB0aGlzIHNwb3Qgb25seSBpZjoKKyAgICAgICAgICAgICAgICAgKiAgLiBUaGUg bmV4dCBwZXJzb24gaGFzIGEgaGlnaGVyIHByaW9yaXR5IChsb3dlcgorICAgICAgICAgICAgICAg ICAqICAgIHByaW9yaXRpZXMgYXJlIHByZWZlcnJlZCksIG9yOgorICAgICAgICAgICAgICAgICAq ICAuIFRoZXJlIGlzIG5vIG5leHQgZW50cnkgKHdlJ3JlIGF0IHRoZSBlbmQpCisgICAgICAgICAg ICAgICAgICovCisgICAgICAgICAgICAgIGZvciAoZW50cnkgPSBoZWFkOyBlbnRyeSAhPSBOVUxM OyBlbnRyeSA9IGVudHJ5LT5uZXh0KQorICAgICAgICAgICAgICAgIGlmICgoZW50cnktPm5leHQg JiYKKyAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5uZXh0LT5wcmlvcml0eSA+IHNydi0+cHJp b3JpdHkpIHx8CisgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5uZXh0ID09IE5VTEwpIHsKKyAg ICAgICAgICAgICAgICAgICAgc3J2LT5uZXh0ID0gZW50cnktPm5leHQ7CisgICAgICAgICAgICAg ICAgICAgIGVudHJ5LT5uZXh0ID0gc3J2OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAgIElOQ1JfQ0hFQ0socCwg cmRsZW4pOworICAgIH0KKworICAgIC8qCisgICAgICogTm93IHdlJ3ZlIGdvdCBhIGxpbmtlZCBs aXN0IG9mIGVudHJpZXMgc29ydGVkIGJ5IHByaW9yaXR5LgorICAgICAqIFN0YXJ0IGxvb2tpbmcg dXAgQSByZWNvcmRzIGFuZCByZXR1cm5pbmcgYWRkcmVzc2VzLgorICAgICAqLworICAgIGlmICho ZWFkID09IE5VTEwpCisgICAgICBnb3RvIGRuc291dDsKKworICAgIGZvciAoZW50cnkgPSBoZWFk OyBlbnRyeSAhPSBOVUxMOyBlbnRyeSA9IGVudHJ5LT5uZXh0KSB7CisgICAgICAgIGhwID0gZ2V0 aG9zdGJ5bmFtZShlbnRyeS0+aG9zdCk7CisgICAgICAgIGlmIChocCAhPSAwKSB7CisKKyAgICAg ICAgICAgIC8qIFdhdGNoIG91dCAtIG1lbXNldCgpIGFuZCBtZW1jcHkoKSBhcmUgbm90IHBvcnRh YmxlLi4uICovCisKKyAgICAgICAgICAgIHN3aXRjaCAoaHAtPmhfYWRkcnR5cGUpIHsKKyAgICAg ICAgICAgICAgY2FzZSBBRl9JTkVUOgorICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGhwLT5o X2FkZHJfbGlzdFtqXTsgaisrKSB7CisgICAgICAgICAgICAgICAgICAgIHNpbiA9IChzdHJ1Y3Qg c29ja2FkZHJfaW4gKikgJmFkZHJbbm91dCsrXTsKKyAgICAgICAgICAgICAgICAgICAgbWVtc2V0 ICgoY2hhciAqKSBzaW4sIDAsIHNpemVvZiAoc3RydWN0IHNvY2thZGRyKSk7CisgICAgICAgICAg ICAgICAgICAgIHNpbi0+c2luX2ZhbWlseSA9IGhwLT5oX2FkZHJ0eXBlOworICAgICAgICAgICAg ICAgICAgICBzaW4tPnNpbl9wb3J0ID0gaHRvbnMoZW50cnktPnBvcnQpOworICAgICAgICAgICAg ICAgICAgICBtZW1jcHkoKGNoYXIgKikgJnNpbi0+c2luX2FkZHIsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAoY2hhciAqKSBocC0+aF9hZGRyX2xpc3Rbal0sCisgICAgICAgICAgICAgICAg ICAgICAgICAgICBzaXplb2Yoc3RydWN0IGluX2FkZHIpKTsgICAgICAgICAgICAgLyogc2FmZSAq LworICAgICAgICAgICAgICAgICAgICBpZiAobm91dCArIDEgPj0gY291bnQpIHsKKyAgICAgICAg ICAgICAgICAgICAgICAgIGNvdW50ICs9IDU7CisgICAgICAgICAgICAgICAgICAgICAgICBhZGRy ID0gKHN0cnVjdCBzb2NrYWRkciAqKQorICAgICAgICAgICAgICAgICAgICAgICAgICByZWFsbG9j KChjaGFyICopIGFkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9m KHN0cnVjdCBzb2NrYWRkcikgKiBjb3VudCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo IWFkZHIpCisgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZG5zb3V0OworICAgICAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg ICAgfQorICAgICAgICB9CisgICAgfQorICAgIGZvciAoZW50cnkgPSBoZWFkOyBlbnRyeSAhPSBO VUxMOykgeworICAgICAgICBmcmVlKGVudHJ5LT5ob3N0KTsKKyAgICAgICAgZW50cnktPmhvc3Qg PSBOVUxMOworICAgICAgICBzcnYgPSBlbnRyeTsKKyAgICAgICAgZW50cnkgPSBlbnRyeS0+bmV4 dDsKKyAgICAgICAgZnJlZShzcnYpOworICAgICAgICBzcnYgPSBOVUxMOworICAgIH0KKworICBk bnNvdXQ6CisgICAgaWYgKHNydikKKyAgICAgIGZyZWUoc3J2KTsKKworICAgIGlmIChub3V0ID09 IDApIHsgICAgICAgICAgICAgICAgICAgIC8qIE5vIGdvb2Qgc2VydmVycyAqLworICAgICAgICBp ZiAoYWRkcikKKyAgICAgICAgICBmcmVlKGFkZHIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9 CisgICAgKmFkZHJfcHAgPSBhZGRyOworICAgICpuYWRkcnMgPSBub3V0OworICAgIHJldHVybiAx OworfQorI3VuZGVmIElOQ1JfQ0hFQ0sKKyN1bmRlZiBDSEVDSworI3VuZGVmIE5UT0hTUAorCisj ZGVmaW5lIElOQ1JfQ0hFQ0soeCwgeSkgeCArPSB5OyBpZiAoeCA+IHNpemUgKyBhbnN3ZXIuYnl0 ZXMpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMAorI2RlZmluZSBDSEVDSyh4 LCB5KSBpZiAoeCArIHkgPiBzaXplICsgYW5zd2VyLmJ5dGVzKSBcCisgICAgICAgICAgICAgICAg ICAgICAgICAgcmV0dXJuIDAKKyNkZWZpbmUgTlRPSFNQKHgsIHkpIHhbMF0gPDwgOCB8IHhbMV07 IHggKz0geQorCitpbnQKK2xvY2F0ZV90eHRfcnIocHJlZml4LCBuYW1lLCByZXRzdHIpCisgICAg Y2hhciAqcHJlZml4LCAqbmFtZTsKKyAgICBjaGFyICoqcmV0c3RyOworeworICAgIHVuaW9uIHsK KyAgICAgICAgdW5zaWduZWQgY2hhciBieXRlc1syMDQ4XTsKKyAgICAgICAgSEVBREVSIGhkcjsK KyAgICB9IGFuc3dlcjsKKyAgICB1bnNpZ25lZCBjaGFyICpwOworICAgIGNoYXIgaG9zdFtNQVhf RE5TX05BTUVMRU5dLCAqaDsKKyAgICBpbnQgc2l6ZTsKKyAgICBpbnQgdHlwZSwgY2xhc3MsIG51 bWFuc3dlcnMsIG51bXF1ZXJpZXMsIHJkbGVuLCBsZW47CisKKyAgICAvKgorICAgICAqIEZvcm0g b3VyIHF1ZXJ5LCBhbmQgc2VuZCBpdCB2aWEgRE5TCisgICAgICovCisKKyAgICBpZiAobmFtZSA9 PSBOVUxMIHx8IG5hbWVbMF0gPT0gJ1wwJykgeworICAgICAgICBzdHJjcHkoaG9zdCxwcmVmaXgp OworICAgIH0gZWxzZSB7CisgICAgICAgIGlmICggc3RybGVuKHByZWZpeCkgKyBzdHJsZW4obmFt ZSkgKyAzID4gTUFYX0ROU19OQU1FTEVOICkKKyAgICAgICAgICAgIHJldHVybiAwOworCisgICAg ICAgIC8qIFJlYWxtIG5hbWVzIGRvbid0IChub3JtYWxseSkgZW5kIHdpdGggIi4iLCBidXQgaWYg dGhlIHF1ZXJ5CisgICAgICAgICAgIGRvZXNuJ3QgZW5kIHdpdGggIi4iIGFuZCBkb2Vzbid0IGdl dCBhbiBhbnN3ZXIgYXMgaXMsIHRoZQorICAgICAgICAgICByZXNvbHYgY29kZSB3aWxsIHRyeSBh cHBlbmRpbmcgdGhlIGxvY2FsIGRvbWFpbi4gIFNpbmNlIHRoZQorICAgICAgICAgICByZWFsbSBu YW1lcyBhcmUgYWJzb2x1dGVzLCBsZXQncyBzdG9wIHRoYXQuCisKKyAgICAgICAgICAgQnV0IG9u bHkgaWYgYSBuYW1lIGhhcyBiZWVuIHNwZWNpZmllZC4gIElmIHdlIGFyZSBwZXJmb3JtaW5nCisg ICAgICAgICAgIGEgc2VhcmNoIG9uIHRoZSBwcmVmaXggYWxvbmUgdGhlbiB0aGUgaW50ZW50aW9u IGlzIHRvIGFsbG93CisgICAgICAgICAgIHRoZSBsb2NhbCBkb21haW4gb3IgZG9tYWluIHNlYXJj aCBsaXN0cyB0byBiZSBleHBhbmRlZC4KKyAgICAgICAgKi8KKyAgICAgICAgaCA9IGhvc3QgKyBz dHJsZW4gKGhvc3QpOworICAgICAgICBja21ha21zZyhob3N0LHNpemVvZihob3N0KSxwcmVmaXgs ICIuIiwgbmFtZSwKKyAgICAgICAgICAgICAgICAgKChoID4gaG9zdCkgJiYgKGhbLTFdICE9ICcu JykpPyIuIjpOVUxMKTsKKworICAgIH0KKyAgICBzaXplID0gcmVzX3NlYXJjaChob3N0LCBDX0lO LCBUX1RYVCwgYW5zd2VyLmJ5dGVzLCBzaXplb2YoYW5zd2VyLmJ5dGVzKSk7CisKKyAgICBpZiAo c2l6ZSA8IDApCisgICAgICAgIHJldHVybiAwOworCisgICAgcCA9IGFuc3dlci5ieXRlczsKKwor ICAgIG51bXF1ZXJpZXMgPSBudG9ocyhhbnN3ZXIuaGRyLnFkY291bnQpOworICAgIG51bWFuc3dl cnMgPSBudG9ocyhhbnN3ZXIuaGRyLmFuY291bnQpOworCisgICAgcCArPSBzaXplb2YoSEVBREVS KTsKKworICAgIC8qCisgICAgICogV2UgbmVlZCB0byBza2lwIG92ZXIgdGhlIHF1ZXN0aW9ucyBi ZWZvcmUgd2UgY2FuIGdldCB0byB0aGUgYW5zd2VycywKKyAgICAgKiB3aGljaCBtZWFucyB3ZSBo YXZlIHRvIGl0ZXJhdGUgb3ZlciBldmVyeSBxdWVyeSByZWNvcmQuICBXZSB1c2UKKyAgICAgKiBk bl9leHBhbmQgdG8gdGVsbCB1cyBob3cgbG9uZyBlYWNoIGNvbXByZXNzZWQgbmFtZSBpcy4KKyAg ICAgKi8KKworICAgIHdoaWxlIChudW1xdWVyaWVzLS0pIHsKKyAgICAgICAgbGVuID0gZG5fZXhw YW5kKGFuc3dlci5ieXRlcywgYW5zd2VyLmJ5dGVzICsgc2l6ZSwgcCwgaG9zdCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICBzaXplb2YoaG9zdCkpOworICAgICAgICBpZiAobGVuIDwgMCkKKyAg ICAgICAgICAgIHJldHVybiAwOworICAgICAgICBJTkNSX0NIRUNLKHAsIGxlbiArIDQpOyAgICAg ICAgIC8qIE5hbWUgcGx1cyB0eXBlIHBsdXMgY2xhc3MgKi8KKyAgICB9CisKKyAgICAvKgorICAg ICAqIFdlJ3JlIG5vdyBwb2ludGluZyBhdCB0aGUgYW5zd2VyIHJlY29yZHMuICBQcm9jZXNzIHRo ZSBmaXJzdAorICAgICAqIFRYVCByZWNvcmQgd2UgZmluZC4KKyAgICAgKi8KKworICAgIHdoaWxl IChudW1hbnN3ZXJzLS0pIHsKKworICAgICAgICAvKiBGaXJzdCB0aGUgbmFtZTsgdXNlIGRuX2V4 cGFuZCB0byBnZXQgdGhlIGNvbXByZXNzZWQgc2l6ZSAqLworICAgICAgICBsZW4gPSBkbl9leHBh bmQoYW5zd2VyLmJ5dGVzLCBhbnN3ZXIuYnl0ZXMgKyBzaXplLCBwLAorICAgICAgICAgICAgICAg ICAgICAgICAgaG9zdCwgc2l6ZW9mKGhvc3QpKTsKKyAgICAgICAgaWYgKGxlbiA8IDApCisgICAg ICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgSU5DUl9DSEVDSyhwLCBsZW4pOworCisgICAgICAg IC8qIE5leHQgaXMgdGhlIHF1ZXJ5IHR5cGUgKi8KKyAgICAgICAgQ0hFQ0socCwgMik7CisgICAg ICAgIHR5cGUgPSBOVE9IU1AocCwyKTsKKworICAgICAgICAvKiBOZXh0IGlzIHRoZSBxdWVyeSBj bGFzczsgYWxzbyBza2lwIG92ZXIgNCBieXRlIFRUTCAqLworICAgICAgICBDSEVDSyhwLDYpOwor ICAgICAgICBjbGFzcyA9IE5UT0hTUChwLDYpOworCisgICAgICAgIC8qIFJlY29yZCBkYXRhIGxl bmd0aCAtIG1ha2Ugc3VyZSB3ZSBhcmVuJ3QgdHJ1bmNhdGVkICovCisKKyAgICAgICAgQ0hFQ0so cCwyKTsKKyAgICAgICAgcmRsZW4gPSBOVE9IU1AocCwyKTsKKworICAgICAgICBpZiAocCArIHJk bGVuID4gYW5zd2VyLmJ5dGVzICsgc2l6ZSkKKyAgICAgICAgICAgIHJldHVybiAwOworCisgICAg ICAgIC8qCisgICAgICAgICAqIElmIHRoaXMgaXMgYSBUWFQgcmVjb3JkLCByZXR1cm4gdGhlIHN0 cmluZy4gIE5vdGUgdGhhdCB0aGUKKyAgICAgICAgICogc3RyaW5nIGhhcyBhIDEtYnl0ZSBsZW5n dGggaW4gdGhlIGZyb250CisgICAgICAgICAqLworICAgICAgICAvKiBYWFggV2hhdCBhYm91dCBm bGFnZ2luZyBtdWx0aXBsZSBUWFQgcmVjb3JkcyBhcyBhbiBlcnJvcj8gICovCisKKyAgICAgICAg aWYgKGNsYXNzID09IENfSU4gJiYgdHlwZSA9PSBUX1RYVCkgeworICAgICAgICAgICAgbGVuID0g KnArKzsKKyAgICAgICAgICAgIGlmIChwICsgbGVuID4gYW5zd2VyLmJ5dGVzICsgc2l6ZSkKKyAg ICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICpyZXRzdHIgPSBtYWxsb2MobGVu ICsgMSk7CisgICAgICAgICAgICBpZiAoKnJldHN0ciA9PSBOVUxMKQorICAgICAgICAgICAgICAg IHJldHVybiBFTk9NRU07CisgICAgICAgICAgICBzdHJuY3B5KCpyZXRzdHIsIChjaGFyICopIHAs IGxlbik7CisgICAgICAgICAgICAoKnJldHN0cilbbGVuXSA9ICdcMCc7CisgICAgICAgICAgICAv KiBBdm9pZCBhIGNvbW1vbiBlcnJvci4gKi8KKyAgICAgICAgICAgIGlmICggKCpyZXRzdHIpW2xl bi0xXSA9PSAnLicgKQorICAgICAgICAgICAgICAgICgqcmV0c3RyKVtsZW4tMV0gPSAnXDAnOwor ICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gMDsK K30KKyN1bmRlZiBJTkNSX0NIRUNLCisjdW5kZWYgQ0hFQ0sKKyN1bmRlZiBOVE9IU1AKKyNlbmRp ZiAvKiBDS19ETlNfU1JWICovCisKKyNpZmRlZiBUTkNPREUKKyNpZmRlZiBDS19GT1JXQVJEX1gK KyNpZmRlZiBVTklYCisjaW5jbHVkZSA8c3lzL3VuLmg+CisjZGVmaW5lIEZXRFhfVU5JWF9TT0NL CisjaWZuZGVmIEFGX0xPQ0FMCisjZGVmaW5lIEFGX0xPQ0FMIEFGX1VOSVgKKyNlbmRpZgorI2lm bmRlZiBQRl9MT0NBTAorI2RlZmluZSBQRl9MT0NBTCBQRl9VTklYCisjZW5kaWYKKyNpZm5kZWYg U1VOX0xFTgorLyogRXZhbHVhdGUgdG8gYWN0dWFsIGxlbmd0aCBvZiB0aGUgYHNvY2thZGRyX3Vu JyBzdHJ1Y3R1cmUuICAqLworI2RlZmluZSBTVU5fTEVOKHB0cikgKChzaXplX3QpICgoKHN0cnVj dCBzb2NrYWRkcl91biAqKSAwKS0+c3VuX3BhdGgpICAgICAgICAgXAorICAgICAgICAgICAgICAg ICAgICAgICsgc3RybGVuICgocHRyKS0+c3VuX3BhdGgpKQorI2VuZGlmCisjZW5kaWYgLyogVU5J WCAqLworaW50Citmd2R4X2NyZWF0ZV9saXN0ZW5fc29ja2V0KHNjcmVlbikgaW50IHNjcmVlbjsg eworI2lmZGVmIE5PUFVURU5WCisgICAgcmV0dXJuKC0xKTsKKyNlbHNlIC8qIE5PUFVURU5WICov CisgICAgc3RydWN0IHNvY2thZGRyX2luIHNhZGRyOworICAgIGludCBkaXNwbGF5LCBwb3J0LCBz b2NrPS0xLCBpOworICAgIHN0YXRpYyBjaGFyIGVudls1MTJdOworCisgICAgLyoKKyAgICAgKiBY IFdpbmRvd3MgU2VydmVycyBzdXBwb3J0IG11bHRpcGxlIGRpc3BsYXlzIGJ5IGxpc3RlbmluZyBv bgorICAgICAqIG9uZSBzb2NrZXQgcGVyIGRpc3BsYXkuICBEaXNwbGF5IDAgaXMgcG9ydCA2MDAw OyBEaXNwbGF5IDEgaXMKKyAgICAgKiBwb3J0IDYwMDE7IGV0Yy4KKyAgICAgKgorICAgICAqIFdl IHN0YXJ0IGJ5IHRyeWluZyB0byBvcGVuIHBvcnQgNjAwMSBzbyB0aGF0IGRpc3BsYXkgMCBpcwor ICAgICAqIHJlc2VydmVkIGZvciB0aGUgbG9jYWwgWCBXaW5kb3dzIFNlcnZlci4KKyAgICAgKi8K KworICAgIGZvciAoIGRpc3BsYXk9MTsgZGlzcGxheSA8IDEwMDAgOyBkaXNwbGF5KysgICkgewor CisgICAgICAgIGlmICgoc29jayA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgMCkpIDwg MCkgeworICAgICAgICAgICAgZGVidWcoRjExMSwiZndkeF9jcmVhdGVfbGlzdGVuX3NvY2tldCgp Iiwic29ja2V0KCkgPCAwIixzb2NrKTsKKyAgICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAg IH0KKworICAgICAgICBwb3J0ID0gNjAwMCArIGRpc3BsYXk7CisgICAgICAgIGJ6ZXJvKChjaGFy ICopJnNhZGRyLCBzaXplb2Yoc2FkZHIpKTsKKyAgICAgICAgc2FkZHIuc2luX2ZhbWlseSA9IEFG X0lORVQ7CisgICAgICAgIHNhZGRyLnNpbl9hZGRyLnNfYWRkciA9IGluZXRfYWRkcihteWlwYWRk cik7CisgICAgICAgIHNhZGRyLnNpbl9wb3J0ID0gaHRvbnMocG9ydCk7CisKKyAgICAgICAgaWYg KGJpbmQoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSZzYWRkciwgc2l6ZW9mKHNhZGRyKSkgPCAw KSB7CisgICAgICAgICAgICBpID0gZXJybm87ICAgICAgICAgICAgICAgICAgLyogU2F2ZSBlcnJv ciBjb2RlICovCisjaWZkZWYgVENQSVBMSUIKKyAgICAgICAgICAgIHNvY2tldF9jbG9zZShzb2Nr KTsKKyNlbHNlIC8qIFRDUElQTElCICovCisgICAgICAgICAgICBjbG9zZShzb2NrKTsKKyNlbmRp ZiAvKiBUQ1BJUExJQiAqLworICAgICAgICAgICAgc29jayA9IC0xOworICAgICAgICAgICAgZGVi dWcoRjExMCwiZndkeF9jcmVhdGVfbGlzdGVuX3NvY2tldCgpIiwiYmluZCgpIDwgMCIsMCk7Cisg ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGRlYnVnKEYxMDAsImZk d3hfY3JlYXRlX2xpc3Rlbl9zb2NrZXQoKSBiaW5kIE9LIiwiIiwwKTsKKyAgICAgICAgYnJlYWs7 CisgICAgfQorCisgICAgaWYgKCBkaXNwbGF5ID4gMTAwMCApIHsKKyAgICAgICAgZGVidWcoRjEw MCwiZndkeF9jcmVhdGVfbGlzdGVuX3NvY2tldCgpIE91dCBvZiBEaXNwbGF5cyIsIiIsMCk7Cisg ICAgICAgIHJldHVybigtMSk7CisgICAgfQorCisgICAgaWYgKGxpc3Rlbihzb2NrLCA1KSA8IDAp IHsKKyAgICAgICAgaSA9IGVycm5vOyAgICAgICAgICAgICAgICAgIC8qIFNhdmUgZXJyb3IgY29k ZSAqLworI2lmZGVmIFRDUElQTElCCisgICAgICAgIHNvY2tldF9jbG9zZShzb2NrKTsKKyNlbHNl IC8qIFRDUElQTElCICovCisgICAgICAgIGNsb3NlKHNvY2spOworI2VuZGlmIC8qIFRDUElQTElC ICovCisgICAgICAgIGRlYnVnKEYxMDEsImZkd3hfY3JlYXRlX2xpc3Rlbl9zb2NrZXQoKSBsaXN0 ZW4oKSBlcnJubyIsIiIsZXJybm8pOworICAgICAgICByZXR1cm4oLTEpOworICAgIH0KKyAgICBk ZWJ1ZyhGMTAwLCJmd2R4X2NyZWF0ZV9saXN0ZW5fc29ja2V0KCkgbGlzdGVuIE9LIiwiIiwwKTsK KworICAgIFRFTE9QVF9TQihURUxPUFRfRk9SV0FSRF9YKS5mb3J3YXJkX3gubGlzdGVuX3NvY2tl dCA9IHNvY2s7CisgICAgaWYgKCFteWlwYWRkclswXSkKKyAgICAgICAgZ2V0bG9jYWxpcGFkZHIo KTsKKyAgICBpZiAoIG15aXBhZGRyWzBdICkKKyAgICAgICAgY2ttYWt4bXNnKGVudixzaXplb2Yo ZW52KSwiRElTUExBWT0iLG15aXBhZGRyLCI6IiwKKyAgICAgICAgICAgICAgICAgIGNrdWl0b2Eo ZGlzcGxheSksIjoiLGNrdWl0b2Eoc2NyZWVuKSwKKyAgICAgICAgICAgICAgICAgIE5VTEwsTlVM TCxOVUxMLE5VTEwsTlVMTCxOVUxMKTsKKyAgICBlbHNlCisgICAgICAgIGNrbWFrbXNnKGVudixz aXplb2YoZW52KSwiRElTUExBWT0iLGNrdWl0b2EoZGlzcGxheSksIjoiLAorICAgICAgICAgICAg ICAgICBja3VpdG9hKHNjcmVlbikpOworICAgIHB1dGVudihlbnYpOworICAgIHJldHVybigwKTsK KyNlbmRpZiAvKiBOT1BVVEVOViAqLworfQorCisKK2ludAorZndkeF9vcGVuX2NsaWVudF9jaGFu bmVsKGNoYW5uZWwpIGludCBjaGFubmVsOyB7CisgICAgY2hhciAqIGVudjsKKyAgICBzdHJ1Y3Qg c29ja2FkZHJfaW4gc2FkZHI7CisjaWZkZWYgRldEWF9VTklYX1NPQ0sKKyAgICBzdHJ1Y3Qgc29j a2FkZHJfdW4gc2FkZHJfdW4gPSB7IEFGX0xPQ0FMIH07CisjZW5kaWYgLyogRldEWF9VTklYX1NP Q0sgKi8KKyAgICBpbnQgY29sb24sIGRvdCwgZGlzcGxheSwgcG9ydCwgc29jaywgaSwgc2NyZWVu OworICAgIGludCBmYW1pbHk7CisgICAgY2hhciBidWZbMjU2XSwgKiBob3N0PU5VTEwsICogcmVz dD1OVUxMOworI2lmZGVmIFRDUF9OT0RFTEFZCisgICAgaW50IG9uPTE7CisjZW5kaWYgLyogVENQ X05PREVMQVkgKi8KKworICAgIGRlYnVnKEYxMTEsImZ3ZHhfY3JlYXRlX2NsaWVudF9jaGFubmVs KCkiLCJjaGFubmVsIixjaGFubmVsKTsKKworICAgIGZvciAoIGk9MDsgaTxNQVhGV0RYIDsgaSsr ICkgeworICAgICAgICBpZiAoVEVMT1BUX1NCKFRFTE9QVF9GT1JXQVJEX1gpLmZvcndhcmRfeC5j aGFubmVsW2ldLmlkID09IGNoYW5uZWwpIHsKKyAgICAgICAgICAgIC8qIEFscmVhZHkgb3BlbiAq LworICAgICAgICAgICAgZGVidWcoRjExMCwiZndkeF9jcmVhdGVfY2xpZW50X2NoYW5uZWwoKSIs ImFscmVhZHkgb3BlbiIsMCk7CisgICAgICAgICAgICByZXR1cm4oMCk7CisgICAgICAgIH0KKyAg ICB9CisKKyAgICBlbnYgPSBnZXRlbnYoIkRJU1BMQVkiKTsKKyAgICBpZiAoICFlbnYgKQorICAg ICAgZW52ID0gKGNoYXIgKil0bl9nZXRfZGlzcGxheSgpOworICAgIGlmICggZW52ICkKKyAgICAg IGNrc3RybmNweShidWYsZW52LDI1Nik7CisgICAgZWxzZQorICAgICAgY2tzdHJuY3B5KGJ1Ziwi MTI3LjAuMC4xOjAuMCIsMjU2KTsKKworICAgIGJ6ZXJvKChjaGFyICopJnNhZGRyLHNpemVvZihz YWRkcikpOworICAgIHNhZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworCisgICAgaWYgKCFmd2R4 X3BhcnNlX2Rpc3BsYXluYW1lKGJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg JmZhbWlseSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmhvc3QsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICZkaXNwbGF5LAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAmc2NyZWVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcmVz dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICkgeworICAgICAg ICBpZiAoIGhvc3QgKSBmcmVlKGhvc3QpOworICAgICAgICBpZiAoIHJlc3QgKSBmcmVlKHJlc3Qp OworICAgICAgICByZXR1cm4oMCk7CisgICAgfQorICAgIGlmIChyZXN0KSBmcmVlKHJlc3QpOwor CisjaWZuZGVmIEZXRFhfVU5JWF9TT0NLCisgIC8qIGlmICRESVNQTEFZIGluZGljYXRlcyB1c2Ug b2YgdW5peCBkb21haW4gc29ja2V0cywgYnV0IHdlIGRvbid0IHN1cHBvcnQgaXQsCisgICAqIHdl IGNoYW5nZSB0aGluZ3MgdG8gdXNlIGluZXQgc29ja2V0cyBvbiB0aGUgaXAgbG9vcGJhY2sgaW50 ZXJmYWNlIGluc3RlYWQsCisgICAqIGFuZCBob3BlIHRoYXQgaXQgd29ya3MuCisgICAqLworICAg IGlmIChmYW1pbHkgPT0gRmFtaWx5TG9jYWwpIHsKKyAgICAgICAgZGVidWcoRjEwMCwiZndkeF9j cmVhdGVfY2xpZW50X2NoYW5uZWwoKSBGYW1pbHlMb2NhbCIsIiIsMCk7CisgICAgICAgIGZhbWls eSA9IEZhbWlseUludGVybmV0OworICAgICAgICBpZiAoaG9zdCkgZnJlZShob3N0KTsKKyAgICAg ICAgaWYgKGhvc3QgPSBtYWxsb2Moc3RybGVuKCJsb2NhbGhvc3QiKSArIDEpKQorICAgICAgICAg ICAgc3RyY3B5KGhvc3QsICJsb2NhbGhvc3QiKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAg ICByZXR1cm4oLTEpOworICAgICAgICB9CisgICAgfQorI2Vsc2UgLyogRldEWF9VTklYX1NPQ0sg Ki8KKyAgICBpZiAoZmFtaWx5ID09IEZhbWlseUxvY2FsKSB7CisgICAgICAgIGlmIChob3N0KSBm cmVlKGhvc3QpOworICAgICAgICBzb2NrID0gc29ja2V0KFBGX0xPQ0FMLCBTT0NLX1NUUkVBTSwg MCk7CisgICAgICAgIGlmIChzb2NrIDwgMCkKKyAgICAgICAgICAgIHJldHVybigtMSk7CisKKyAg ICAgICAgY2ttYWttc2coYnVmLHNpemVvZihidWYpLCIvdG1wLy5YMTEtdW5peC9YIixja2l0b2Eo ZGlzcGxheSksTlVMTCxOVUxMKTsKKyAgICAgICAgc3RybmNweShzYWRkcl91bi5zdW5fcGF0aCwg YnVmLCBzaXplb2Yoc2FkZHJfdW4uc3VuX3BhdGgpKTsKKyAgICAgICAgaWYgKGNvbm5lY3Qoc29j aywoc3RydWN0IHNvY2thZGRyICopJnNhZGRyX3VuLCBTVU5fTEVOKCZzYWRkcl91bikpIDwgMCkK KyAgICAgICAgICByZXR1cm4oLTEpOworICAgIH0gZWxzZQorI2VuZGlmICAvKiBGV0RYX1VOSVhf U09DSyAqLworICAgIHsKKyAgICAgICAgLyogT3RoZXJ3aXNlLCB3ZSBhcmUgYXNzdW1pbmcgRmFt aWx5SW50ZXJuZXQgKi8KKyAgICAgICAgaWYgKGhvc3QpIHsKKyAgICAgICAgICAgIGNrc3RybmNw eShidWYsaG9zdCxzaXplb2YoYnVmKSk7CisgICAgICAgICAgICBmcmVlKGhvc3QpOworICAgICAg ICB9IGVsc2UKKyAgICAgICAgICAgIGNrc3RybmNweShidWYsbXlpcGFkZHIsc2l6ZW9mKGJ1Zikp OworCisgICAgICAgIGRlYnVnKEYxMTEsImZ3ZHhfY3JlYXRlX2NsaWVudF9jaGFubmVsKCkiLCJk aXNwbGF5IixkaXNwbGF5KTsKKworICAgICAgICBwb3J0ID0gNjAwMCArIGRpc3BsYXk7CisgICAg ICAgIHNhZGRyLnNpbl9wb3J0ID0gaHRvbnMocG9ydCk7CisKKyAgICAgICAgZGVidWcoRjExMCwi ZndkeF9jcmVhdGVfY2xpZW50X2NoYW5uZWwoKSBpcC1hZGRyZXNzIixidWYsMCk7CisgICAgICAg IHNhZGRyLnNpbl9hZGRyLnNfYWRkciA9IGluZXRfYWRkcihidWYpOworICAgICAgICBpZiAoIHNh ZGRyLnNpbl9hZGRyLnNfYWRkciA9PSAodW5zaWduZWQgbG9uZykgLTEKKyNpZmRlZiBJTkFERFJf Tk9ORQorICAgICAgICAgICAgIHx8IHNhZGRyLnNpbl9hZGRyLnNfYWRkciA9PSBJTkFERFJfTk9O RQorI2VuZGlmIC8qIElOQUREUl9OT05FICovCisgICAgICAgICAgICAgKQorICAgICAgICB7Cisg ICAgICAgICAgICBzdHJ1Y3QgaG9zdGVudCAqaG9zdDsKKyAgICAgICAgICAgIGhvc3QgPSBnZXRo b3N0YnluYW1lKGJ1Zik7CisgICAgICAgICAgICBpZiAoIGhvc3QgPT0gTlVMTCApCisgICAgICAg ICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgICAgIGhvc3QgPSBja19jb3B5aG9zdGVudCho b3N0KTsKKyNpZmRlZiBIQUREUkxJU1QKKyNpZmRlZiBoX2FkZHIKKyAgICAgICAgICAgIC8qIFRo aXMgaXMgZm9yIHRyeWluZyBtdWx0aXBsZSBJUCBhZGRyZXNzZXMgLSBzZWUgPG5ldGRiLmg+ICov CisgICAgICAgICAgICBpZiAoIShob3N0LT5oX2FkZHJfbGlzdCkpCisgICAgICAgICAgICAgICAg cmV0dXJuKC0xKTsKKyAgICAgICAgICAgIGJjb3B5KGhvc3QtPmhfYWRkcl9saXN0WzBdLAorICAg ICAgICAgICAgICAgICAgIChjYWRkcl90KSZzYWRkci5zaW5fYWRkciwKKyAgICAgICAgICAgICAg ICAgICBob3N0LT5oX2xlbmd0aAorICAgICAgICAgICAgICAgICAgICk7CisjZWxzZQorICAgICAg ICAgICAgYmNvcHkoaG9zdC0+aF9hZGRyLCAoY2FkZHJfdCkmc2FkZHIuc2luX2FkZHIsIGhvc3Qt PmhfbGVuZ3RoKTsKKyNlbmRpZiAvKiBoX2FkZHIgKi8KKyNlbHNlICAvKiBIQUREUkxJU1QgKi8K KyAgICAgICAgICAgIGJjb3B5KGhvc3QtPmhfYWRkciwgKGNhZGRyX3QpJnNhZGRyLnNpbl9hZGRy LCBob3N0LT5oX2xlbmd0aCk7CisjZW5kaWYgLyogSEFERFJMSVNUICovCisgICAgICAgIH0KKwor ICAgICAgICBpZiAoKHNvY2sgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19TVFJFQU0sIDApKSA8IDAp IHsKKyAgICAgICAgICAgIGRlYnVnKEYxMTEsImZ3ZHhfY3JlYXRlX2NsaWVudF9jaGFubmVsKCki LCJzb2NrZXQoKSA8IDAiLHNvY2spOworICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAg fQorCisgICAgICAgIGlmICggY29ubmVjdChzb2NrLCAoc3RydWN0IHNvY2thZGRyICopJnNhZGRy LCBzaXplb2Yoc2FkZHIpKSA8IDApIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMTAsImZ3ZHhfY3Jl YXRlX2NsaWVudF9jaGFubmVsKCkiLCJjb25uZWN0KCkgZmFpbGVkIiwwKTsKKyNpZmRlZiBUQ1BJ UExJQgorICAgICAgICAgICAgc29ja2V0X2Nsb3NlKHNvY2spOworI2Vsc2UgLyogVENQSVBMSUIg Ki8KKyAgICAgICAgICAgIGNsb3NlKHNvY2spOworI2VuZGlmIC8qIFRDUElQTElCICovCisgICAg ICAgICAgICByZXR1cm4oLTEpOworICAgICAgICB9CisKKyNpZmRlZiBUQ1BfTk9ERUxBWQorICAg ICAgICBzZXRzb2Nrb3B0KHNvY2ssSVBQUk9UT19UQ1AsVENQX05PREVMQVksKGNoYXIgKikmb24s c2l6ZW9mKG9uKSk7CisjZW5kaWYgLyogVENQX05PREVMQVkgKi8KKyAgICB9CisKKyAgICBmb3Ig KGkgPSAwOyBpIDwgTUFYRldEWDsgaSsrKSB7CisgICAgIGlmIChURUxPUFRfU0IoVEVMT1BUX0ZP UldBUkRfWCkuZm9yd2FyZF94LmNoYW5uZWxbaV0uaWQgPT0gLTEpIHsKKyAgICAgICAgIFRFTE9Q VF9TQihURUxPUFRfRk9SV0FSRF9YKS5mb3J3YXJkX3guY2hhbm5lbFtpXS5mZCA9IHNvY2s7Cisg ICAgICAgICBURUxPUFRfU0IoVEVMT1BUX0ZPUldBUkRfWCkuZm9yd2FyZF94LmNoYW5uZWxbaV0u aWQgPSBjaGFubmVsOworICAgICAgIFRFTE9QVF9TQihURUxPUFRfRk9SV0FSRF9YKS5mb3J3YXJk X3guY2hhbm5lbFtpXS5uZWVkX3RvX3NlbmRfeGF1dGggPSAxOworICAgICAgICAgZGVidWcoRjEx MSwiZndkeF9jcmVhdGVfY2xpZW50X2NoYW5uZWwoKSIsInNvY2tldCIsc29jayk7CisgICAgICAg ICByZXR1cm4oMCk7CisgICAgIH0KKyAgICB9CisgICAgcmV0dXJuKC0xKTsKK30KKworaW50Citm d2R4X3NlcnZlcl9hdmFpbCgpIHsKKyAgICBjaGFyICogZW52OworICAgIHN0cnVjdCBzb2NrYWRk cl9pbiBzYWRkcjsKKyNpZmRlZiBGV0RYX1VOSVhfU09DSworICAgIHN0cnVjdCBzb2NrYWRkcl91 biBzYWRkcl91biA9IHsgQUZfTE9DQUwgfTsKKyNlbmRpZiAgLyogRldEWF9VTklYX1NPQ0sgKi8K KyAgICBpbnQgY29sb24sIGRvdCwgZGlzcGxheSwgcG9ydCwgc29jaywgaSwgc2NyZWVuOworICAg IGNoYXIgYnVmWzI1Nl0sICpob3N0PU5VTEwsICpyZXN0PU5VTEw7CisjaWZkZWYgVENQX05PREVM QVkKKyAgICBpbnQgb249MTsKKyNlbmRpZiAvKiBUQ1BfTk9ERUxBWSAqLworICAgIGludCBmYW1p bHk7CisKKyAgICBlbnYgPSBnZXRlbnYoIkRJU1BMQVkiKTsKKyAgICBpZiAoICFlbnYgKQorICAg ICAgZW52ID0gKGNoYXIgKil0bl9nZXRfZGlzcGxheSgpOworICAgIGlmICggZW52ICkKKyAgICAg IGNrc3RybmNweShidWYsZW52LDI1Nik7CisgICAgZWxzZQorICAgICAgY2tzdHJuY3B5KGJ1Ziwi MTI3LjAuMC4xOjAuMCIsMjU2KTsKKworICAgIGJ6ZXJvKChjaGFyICopJnNhZGRyLHNpemVvZihz YWRkcikpOworICAgIHNhZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworCisgICAgaWYgKCFmd2R4 X3BhcnNlX2Rpc3BsYXluYW1lKGJ1ZiwmZmFtaWx5LCZob3N0LCZkaXNwbGF5LCZzY3JlZW4sJnJl c3QpKSB7CisgICAgICAgIGlmICggaG9zdCApIGZyZWUoaG9zdCk7CisgICAgICAgIGlmICggcmVz dCApIGZyZWUocmVzdCk7CisgICAgICAgIHJldHVybigwKTsKKyAgICB9CisgICAgaWYgKHJlc3Qp IGZyZWUocmVzdCk7CisKKyNpZm5kZWYgRldEWF9VTklYX1NPQ0sKKyAgLyogaWYgJERJU1BMQVkg aW5kaWNhdGVzIHVzZSBvZiB1bml4IGRvbWFpbiBzb2NrZXRzLCBidXQgd2UgZG9uJ3Qgc3VwcG9y dCBpdCwKKyAgICogd2UgY2hhbmdlIHRoaW5ncyB0byB1c2UgaW5ldCBzb2NrZXRzIG9uIHRoZSBp cCBsb29wYmFjayBpbnRlcmZhY2UgaW5zdGVhZCwKKyAgICogYW5kIGhvcGUgdGhhdCBpdCB3b3Jr cy4KKyAgICovCisgICAgaWYgKGZhbWlseSA9PSBGYW1pbHlMb2NhbCkgeworICAgICAgICBmYW1p bHkgPSBGYW1pbHlJbnRlcm5ldDsKKyAgICAgICAgaWYgKGhvc3QpIGZyZWUoaG9zdCk7CisgICAg ICAgIGlmIChob3N0ID0gbWFsbG9jKHN0cmxlbigibG9jYWxob3N0IikgKyAxKSkKKyAgICAgICAg ICAgIHN0cmNweShob3N0LCAibG9jYWxob3N0Iik7CisgICAgICAgIGVsc2UgeworICAgICAgICAg ICAgcmV0dXJuKC0xKTsKKyAgICAgICAgfQorICAgIH0KKyNlbHNlIC8qIEZXRFhfVU5JWF9TT0NL ICovCisgICAgaWYgKGZhbWlseSA9PSBGYW1pbHlMb2NhbCkgeworICAgICAgICBkZWJ1ZyhGMTAw LCJmd2R4X3NlcnZlcl9hdmFpbCgpIEZhbWlseUxvY2FsIiwiIiwwKTsKKyAgICAgICAgaWYgKGhv c3QpIGZyZWUoaG9zdCk7CisgICAgICAgIHNvY2sgPSBzb2NrZXQoUEZfTE9DQUwsIFNPQ0tfU1RS RUFNLCAwKTsKKyAgICAgICAgaWYgKHNvY2sgPCAwKQorICAgICAgICAgICAgcmV0dXJuKDApOwor CisgICAgICAgIGNrbWFrbXNnKGJ1ZixzaXplb2YoYnVmKSwiL3RtcC8uWDExLXVuaXgvWCIsY2tp dG9hKGRpc3BsYXkpLE5VTEwsTlVMTCk7CisgICAgICAgIHN0cm5jcHkoc2FkZHJfdW4uc3VuX3Bh dGgsIGJ1Ziwgc2l6ZW9mKHNhZGRyX3VuLnN1bl9wYXRoKSk7CisgICAgICAgIGlmIChjb25uZWN0 KHNvY2ssKHN0cnVjdCBzb2NrYWRkciAqKSZzYWRkcl91bixTVU5fTEVOKCZzYWRkcl91bikpIDwg MCkKKyAgICAgICAgICAgIHJldHVybigwKTsKKyAgICAgICAgY2xvc2Uoc29jayk7CisgICAgICAg IHJldHVybigxKTsKKyAgICB9CisjZW5kaWYgIC8qIEZXRFhfVU5JWF9TT0NLICovCisKKyAgICAv KiBPdGhlcndpc2UsIHdlIGFyZSBhc3N1bWluZyBGYW1pbHlJbnRlcm5ldCAqLworICAgIGlmICho b3N0KSB7CisgICAgICAgIGNrc3RybmNweShidWYsaG9zdCxzaXplb2YoYnVmKSk7CisgICAgICAg IGZyZWUoaG9zdCk7CisgICAgfSBlbHNlCisgICAgICAgIGNrc3RybmNweShidWYsbXlpcGFkZHIs c2l6ZW9mKGJ1ZikpOworCisgICAgZGVidWcoRjExMSwiZndkeF9zZXJ2ZXJfYXZhaWwoKSIsImRp c3BsYXkiLGRpc3BsYXkpOworCisgICAgcG9ydCA9IDYwMDAgKyBkaXNwbGF5OworICAgIHNhZGRy LnNpbl9wb3J0ID0gaHRvbnMocG9ydCk7CisKKyAgICBkZWJ1ZyhGMTEwLCJmd2R4X3NlcnZlcl9h dmFpbCgpIGlwLWFkZHJlc3MiLGJ1ZiwwKTsKKyAgICBzYWRkci5zaW5fYWRkci5zX2FkZHIgPSBp bmV0X2FkZHIoYnVmKTsKKyAgICBpZiAoIHNhZGRyLnNpbl9hZGRyLnNfYWRkciA9PSAodW5zaWdu ZWQgbG9uZykgLTEKKyNpZmRlZiBJTkFERFJfTk9ORQorICAgICAgICAgfHwgc2FkZHIuc2luX2Fk ZHIuc19hZGRyID09IElOQUREUl9OT05FCisjZW5kaWYgLyogSU5BRERSX05PTkUgKi8KKyAgICAg ICAgICkKKyAgICB7CisgICAgICAgIHN0cnVjdCBob3N0ZW50ICpob3N0OworICAgICAgICBob3N0 ID0gZ2V0aG9zdGJ5bmFtZShidWYpOworICAgICAgICBpZiAoIGhvc3QgPT0gTlVMTCApIHsKKyAg ICAgICAgICAgIGRlYnVnKEYxMTAsImZ3ZHhfc2VydmVyX2F2YWlsKCkgZ2V0aG9zdGJ5bmFtZSgp IGZhaWxlZCIsCisgICAgICAgICAgICAgICAgICAgbXlpcGFkZHIsMCk7CisgICAgICAgICAgICBy ZXR1cm4oLTEpOworICAgICAgICB9CisgICAgICAgIGhvc3QgPSBja19jb3B5aG9zdGVudChob3N0 KTsKKyNpZmRlZiBIQUREUkxJU1QKKyNpZmRlZiBoX2FkZHIKKyAgICAgICAgLyogVGhpcyBpcyBm b3IgdHJ5aW5nIG11bHRpcGxlIElQIGFkZHJlc3NlcyAtIHNlZSA8bmV0ZGIuaD4gKi8KKyAgICAg ICAgaWYgKCEoaG9zdC0+aF9hZGRyX2xpc3QpKQorICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAg ICAgICAgYmNvcHkoaG9zdC0+aF9hZGRyX2xpc3RbMF0sCisgICAgICAgICAgICAgICAoY2FkZHJf dCkmc2FkZHIuc2luX2FkZHIsCisgICAgICAgICAgICAgICBob3N0LT5oX2xlbmd0aAorICAgICAg ICAgICAgICAgKTsKKyNlbHNlCisgICAgICAgIGJjb3B5KGhvc3QtPmhfYWRkciwgKGNhZGRyX3Qp JnNhZGRyLnNpbl9hZGRyLCBob3N0LT5oX2xlbmd0aCk7CisjZW5kaWYgLyogaF9hZGRyICovCisj ZWxzZSAgLyogSEFERFJMSVNUICovCisgICAgICAgIGJjb3B5KGhvc3QtPmhfYWRkciwgKGNhZGRy X3QpJnNhZGRyLnNpbl9hZGRyLCBob3N0LT5oX2xlbmd0aCk7CisjZW5kaWYgLyogSEFERFJMSVNU ICovCisgICAgfQorCisgICAgaWYgKChzb2NrID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFN LCAwKSkgPCAwKSB7CisgICAgICAgIGRlYnVnKEYxMTEsImZ3ZHhfc2VydmVyX2F2YWlsKCkiLCJz b2NrZXQoKSA8IDAiLHNvY2spOworICAgICAgICByZXR1cm4oMCk7CisgICAgfQorCisgICAgaWYg KCBjb25uZWN0KHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2FkZHIsIHNpemVvZihzYWRkcikp IDwgMCkgeworICAgICAgICBkZWJ1ZyhGMTEwLCJmd2R4X3NlcnZlcl9hdmFpbCgpIiwiY29ubmVj dCgpIGZhaWxlZCIsMCk7CisjaWZkZWYgVENQSVBMSUIKKyAgICAgICAgc29ja2V0X2Nsb3NlKHNv Y2spOworI2Vsc2UgLyogVENQSVBMSUIgKi8KKyAgICAgICAgY2xvc2Uoc29jayk7CisjZW5kaWYg LyogVENQSVBMSUIgKi8KKyAgICAgICAgcmV0dXJuKDApOworICAgIH0KKworI2lmZGVmIFRDUElQ TElCCisgICAgc29ja2V0X2Nsb3NlKHNvY2spOworI2Vsc2UgLyogVENQSVBMSUIgKi8KKyAgICBj bG9zZShzb2NrKTsKKyNlbmRpZiAvKiBUQ1BJUExJQiAqLworICAgIHJldHVybigxKTsKK30KKwor aW50Citmd2R4X29wZW5fc2VydmVyX2NoYW5uZWwoKSB7CisgICAgaW50IHNvY2ssIHJlYWR5X3Rv X2FjY2VwdCwgc29jazIsY2hhbm5lbCxpOworI2lmZGVmIFRDUF9OT0RFTEFZCisgICAgaW50IG9u PTE7CisjZW5kaWYgLyogVENQX05PREVMQVkgKi8KKyNpZmRlZiBVQ1g1MAorICAgIHN0YXRpYyB1 X2ludCBzYWRkcmxlbjsKKyNlbHNlCisgICAgc3RhdGljIFNPQ0tPUFRfVCBzYWRkcmxlbjsKKyNl bmRpZiAvKiBVQ1g1MCAqLworICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBzYWRkcjsKKyAgICBjaGFy IHNiWzhdOworICAgIGV4dGVybiBjaGFyIHRuX21zZ1tdOworI2lmZGVmIEJTRFNFTEVDVAorICAg IGZkX3NldCByZmRzOworICAgIHN0cnVjdCB0aW1ldmFsIHR2OworI2Vsc2UKKyNpZmRlZiBCRUxM U0VMQ1QKKyAgICBmZF9zZXQgcmZkczsKKyNlbHNlCisgICAgZmRfc2V0IHJmZHM7CisgICAgc3Ry dWN0IHRpbWV2YWwgeworICAgICAgICBsb25nIHR2X3NlYzsKKyAgICAgICAgbG9uZyB0dl91c2Vj OworICAgIH0gdHY7CisjZW5kaWYgLyogQkVMTFNFTEVDVCAqLworI2VuZGlmIC8qIEJTRFNFTEVD VCAqLworICAgIHVuc2lnbmVkIHNob3J0IG5jaGFubmVsOworICAgIHVuc2lnbmVkIGNoYXIgKiBw OworCisgICAgc29jayA9IFRFTE9QVF9TQihURUxPUFRfRk9SV0FSRF9YKS5mb3J3YXJkX3gubGlz dGVuX3NvY2tldDsKKworICB0cnlfYWdhaW46CisKKyNpZmRlZiBCU0RTRUxFQ1QKKyAgICB0di50 dl9zZWMgID0gdHYudHZfdXNlYyA9IDBMOworICAgIHR2LnR2X3VzZWMgPSA1MDsKKyAgICBGRF9a RVJPKCZyZmRzKTsKKyAgICBGRF9TRVQoc29jaywgJnJmZHMpOworICAgIHJlYWR5X3RvX2FjY2Vw dCA9CisgICAgICAgICgoc2VsZWN0KEZEX1NFVFNJWkUsCisjaWZkZWYgSFBVWAorI2lmZGVmIEhQ VVgxMDEwCisgICAgICAgICAgICAgICAgICAoZmRfc2V0ICopCisjZWxzZQorCisgICAgICAgICAg ICAgICAgICAoaW50ICopCisjZW5kaWYgLyogSFBVWDEwMTAgKi8KKyNlbHNlCisjaWZkZWYgX19E RUNDCisgICAgICAgICAgICAgICAgICAoZmRfc2V0ICopCisjZW5kaWYgLyogX19ERUNDICovCisj ZW5kaWYgLyogSFBVWCAqLworICAgICAgICAgICAgICAgICAgJnJmZHMsIE5VTEwsIE5VTEwsICZ0 dikgPiAwKSAmJgorICAgICAgICAgIEZEX0lTU0VUKHNvY2ssICZyZmRzKSk7CisjZWxzZSAvKiBC U0RTRUxFQ1QgKi8KKyNpZmRlZiBJQk1TRUxFQ1QKKyAgICByZWFkeV90b19hY2NlcHQgPSAoc2Vs ZWN0KCZzb2NrLCAxLCAwLCAwLCA1MCkgPT0gMSk7CisjZWxzZQorI2lmZGVmIEJFTExTRUxFQ1QK KyAgICBGRF9aRVJPKHJmZHMpOworICAgIEZEX1NFVChzb2NrLCByZmRzKTsKKyAgICByZWFkeV90 b19hY2NlcHQgPQorICAgICAgICAoKHNlbGVjdCgxMjgsIHJmZHMsIE5VTEwsIE5VTEwsIDUwKSA+ IDApICYmCisgICAgICAgICAgRkRfSVNTRVQoc29jaywgcmZkcykpOworI2Vsc2UKKy8qIFRyeSB0 aGlzIC0gd2hhdCdzIHRoZSB3b3JzdCB0aGF0IGNhbiBoYXBwZW4uLi4gKi8KKworICAgIHR2LnR2 X3NlYyAgPSB0di50dl91c2VjID0gMEw7CisgICAgdHYudHZfdXNlYyA9IDUwOworICAgIEZEX1pF Uk8oJnJmZHMpOworICAgIEZEX1NFVChzb2NrLCAmcmZkcyk7CisgICAgcmVhZHlfdG9fYWNjZXB0 ID0KKyAgICAgICAgKChzZWxlY3QoRkRfU0VUU0laRSwKKyAgICAgICAgICAgICAgICAgIChmZF9z ZXQgKikgJnJmZHMsIE5VTEwsIE5VTEwsICZ0dikgPiAwKSAmJgorICAgICAgICAgIEZEX0lTU0VU KHNvY2ssICZyZmRzKSk7CisjZW5kaWYgLyogQkVMTFNFTEVDVCAqLworI2VuZGlmIC8qIElCTVNF TEVDVCAqLworI2VuZGlmIC8qIEJTRFNFTEVDVCAqLworCisgICAgaWYgKCAhcmVhZHlfdG9fYWNj ZXB0ICkKKyAgICAgICAgcmV0dXJuKDApOworCisgICAgaWYgKChzb2NrMiA9IGFjY2VwdChzb2Nr LChzdHJ1Y3Qgc29ja2FkZHIgKikmc2FkZHIsJnNhZGRybGVuKSkgPCAwKSB7CisgICAgICAgIGlu dCBpID0gZXJybm87ICAgICAgICAgICAgICAgICAgLyogc2F2ZSBlcnJvciBjb2RlICovCisgICAg ICAgIGRlYnVnKEYxMDEsInRjcHNydl9vcGVuIGFjY2VwdCBlcnJubyIsIiIsaSk7CisgICAgICAg IHJldHVybigtMSk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBOb3cgd2UgaGF2ZSB0aGUgb3Bl biBzb2NrZXQuICBXZSBtdXN0IG5vdyBmaW5kIGEgY2hhbm5lbCB0byBzdG9yZQorICAgICAqIGl0 IGluLCBhbmQgdGhlbiBub3RpZnkgdGhlIGNsaWVudC4KKyAgICAgKi8KKworICAgIGZvciAoIGNo YW5uZWw9MDtjaGFubmVsPE1BWEZXRFg7Y2hhbm5lbCsrICkgeworICAgICAgICBpZiAoIFRFTE9Q VF9TQihURUxPUFRfRk9SV0FSRF9YKS5mb3J3YXJkX3guY2hhbm5lbFtjaGFubmVsXS5mZCA9PSAt MSApCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAoIGNoYW5uZWwgPT0gTUFY RldEWCApIHsKKyNpZmRlZiBUQ1BJUExJQgorICAgICAgICBzb2NrZXRfY2xvc2Uoc29jazIpOwor I2Vsc2UgLyogVENQSVBMSUIgKi8KKyAgICAgICAgY2xvc2Uoc29jazIpOworI2VuZGlmIC8qIFRD UElQTElCICovCisgICAgICAgIHJldHVybigtMSk7CisgICAgfQorCisgICAgaWYgKCBmd2R4X3Nl bmRfb3BlbihjaGFubmVsKSA8IDAgKSB7CisjaWZkZWYgVENQSVBMSUIKKyAgICAgICAgc29ja2V0 X2Nsb3NlKHNvY2syKTsKKyNlbHNlIC8qIFRDUElQTElCICovCisgICAgICAgIGNsb3NlKHNvY2sy KTsKKyNlbmRpZiAvKiBUQ1BJUExJQiAqLworICAgIH0KKworI2lmZGVmIFRDUF9OT0RFTEFZCisg ICAgc2V0c29ja29wdChzb2NrMixJUFBST1RPX1RDUCxUQ1BfTk9ERUxBWSwoY2hhciAqKSZvbixz aXplb2Yob24pKTsKKyNlbmRpZiAvKiBUQ1BfTk9ERUxBWSAqLworCisgICAgVEVMT1BUX1NCKFRF TE9QVF9GT1JXQVJEX1gpLmZvcndhcmRfeC5jaGFubmVsW2NoYW5uZWxdLmZkID0gc29jazI7Cisg ICAgVEVMT1BUX1NCKFRFTE9QVF9GT1JXQVJEX1gpLmZvcndhcmRfeC5jaGFubmVsW2NoYW5uZWxd LmlkID0gY2hhbm5lbDsKKyAgICBnb3RvIHRyeV9hZ2FpbjsKKworICAgIHJldHVybigwKTsgIC8q IG5ldmVyIHJlYWNoZWQgKi8KK30KKworaW50Citmd2R4X2Nsb3NlX2NoYW5uZWwoY2hhbm5lbCkg aW50IGNoYW5uZWw7IHsKKyAgICBpbnQgaSxmZDsKKworICAgIGZvciAoIGk9MDsgaTxNQVhGV0RY IDsgaSsrICkgeworICAgICAgICBpZiAoVEVMT1BUX1NCKFRFTE9QVF9GT1JXQVJEX1gpLmZvcndh cmRfeC5jaGFubmVsW2ldLmlkID09IGNoYW5uZWwpCisgICAgICAgICAgICBicmVhazsKKyAgICB9 CisgICAgaWYgKCBpID09IE1BWEZXRFggKQorICAgICAgICByZXR1cm4oLTEpOworCisgICAgZmQg PSBURUxPUFRfU0IoVEVMT1BUX0ZPUldBUkRfWCkuZm9yd2FyZF94LmNoYW5uZWxbaV0uZmQ7Cisg ICAgVEVMT1BUX1NCKFRFTE9QVF9GT1JXQVJEX1gpLmZvcndhcmRfeC5jaGFubmVsW2ldLmZkID0g LTE7CisgICAgVEVMT1BUX1NCKFRFTE9QVF9GT1JXQVJEX1gpLmZvcndhcmRfeC5jaGFubmVsW2ld LmlkID0gLTE7CisgICAgVEVMT1BUX1NCKFRFTE9QVF9GT1JXQVJEX1gpLmZvcndhcmRfeC5jaGFu bmVsW2ldLm5lZWRfdG9fc2VuZF94YXV0aCA9IDA7CisKKyNpZmRlZiBUQ1BJUExJQgorICAgIHNv Y2tldF9jbG9zZShmZCk7CisjZWxzZSAvKiBUQ1BJUExJQiAqLworICAgIGNsb3NlKGZkKTsKKyNl bmRpZiAvKiBUQ1BJUExJQiAqLworICAgIHJldHVybigwKTsKK30KKworaW50Citmd2R4X2Nsb3Nl X2FsbCgpIHsKKyAgICBpbnQgeCxmZDsKKworICAgIGRlYnVnKEYxMTEsImZ3ZHhfY2xvc2VfYWxs KCkiLAorICAgICAgICAgICJURUxPUFRfU0IoVEVMT1BUX0ZPUldBUkRfWCkuZm9yd2FyZF94Lmxp c3Rlbl9zb2NrZXQiLAorICAgICAgICAgIFRFTE9QVF9TQihURUxPUFRfRk9SV0FSRF9YKS5mb3J3 YXJkX3gubGlzdGVuX3NvY2tldCk7CisKKyAgICBpZiAoIFRFTE9QVF9TQihURUxPUFRfRk9SV0FS RF9YKS5mb3J3YXJkX3gubGlzdGVuX3NvY2tldCAhPSAtMSApIHsKKyNpZmRlZiBUQ1BJUExJQgor ICAgICAgICBzb2NrZXRfY2xvc2UoVEVMT1BUX1NCKFRFTE9QVF9GT1JXQVJEX1gpLmZvcndhcmRf eC5saXN0ZW5fc29ja2V0KTsKKyNlbHNlIC8qIFRDUElQTElCICovCisgICAgICAgIGNsb3NlKFRF TE9QVF9TQihURUxPUFRfRk9SV0FSRF9YKS5mb3J3YXJkX3gubGlzdGVuX3NvY2tldCk7CisjZW5k aWYgLyogVENQSVBMSUIgKi8KKyAgICAgICAgVEVMT1BUX1NCKFRFTE9QVF9GT1JXQVJEX1gpLmZv cndhcmRfeC5saXN0ZW5fc29ja2V0ID0gLTE7CisgICAgfQorCisgICAgZm9yICh4ID0gMDsgeCA8 IE1BWEZXRFg7IHgrKykgeworICAgICBpZiAoVEVMT1BUX1NCKFRFTE9QVF9GT1JXQVJEX1gpLmZv cndhcmRfeC5jaGFubmVsW3hdLmZkICE9IC0xKSB7CisgICAgICBmZCA9IFRFTE9QVF9TQihURUxP UFRfRk9SV0FSRF9YKS5mb3J3YXJkX3guY2hhbm5lbFt4XS5mZDsKKyAgICAgIFRFTE9QVF9TQihU RUxPUFRfRk9SV0FSRF9YKS5mb3J3YXJkX3guY2hhbm5lbFt4XS5mZCA9IC0xOworICAgICAgVEVM T1BUX1NCKFRFTE9QVF9GT1JXQVJEX1gpLmZvcndhcmRfeC5jaGFubmVsW3hdLmlkID0gLTE7Cisg ICAgICBURUxPUFRfU0IoVEVMT1BUX0ZPUldBUkRfWCkuZm9yd2FyZF94LmNoYW5uZWxbeF0ubmVl ZF90b19zZW5kX3hhdXRoID0gMDsKKyAgICAgIFRFTE9QVF9TQihURUxPUFRfRk9SV0FSRF9YKS5m b3J3YXJkX3guY2hhbm5lbFt4XS5zdXNwZW5kID0gMDsKKyNpZmRlZiBUQ1BJUExJQgorICAgICAg c29ja2V0X2Nsb3NlKGZkKTsKKyNlbHNlIC8qIFRDUElQTElCICovCisgICAgICBjbG9zZShmZCk7 CisjZW5kaWYgLyogVENQSVBMSUIgKi8KKyAgICAgfQorICAgIH0KKyAgICByZXR1cm4oMCk7Cit9 CisKKy8qIFRoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbnMgYXJlIGZvciBVbml4ICovCisjaWZuZGVm IHNvY2tldF93cml0ZQorI2RlZmluZSBzb2NrZXRfd3JpdGUoZixzLG4pICAgIHdyaXRlKGYscyxu KQorI2VuZGlmIC8qIHNvY2tldF93cml0ZSAqLworI2lmbmRlZiBzb2NrZXRfcmVhZAorI2RlZmlu ZSBzb2NrZXRfcmVhZChmLHMsbikgICAgIHJlYWQoZixzLG4pCisjZW5kaWYgLyogc29ja2V0X3Jl YWQgKi8KKworaW50Citmd2R4X3dyaXRlX2RhdGFfdG9fY2hhbm5lbChjaGFubmVsLCBkYXRhLCBs ZW4pCisgICAgaW50IGNoYW5uZWw7IGNoYXIgKiBkYXRhOyBpbnQgbGVuOworeworICAgIGludCBz b2NrLCBjb3VudCwgdHJ5PTAsIGxlbmd0aCA9IGxlbiwgaTsKKworICAgIGlmICggbGVuIDw9IDAg KQorICAgICAgICByZXR1cm4oMCk7CisKKyAgICBmb3IgKCBpPTA7IGk8TUFYRldEWCA7IGkrKyAp IHsKKyAgICAgICAgaWYgKFRFTE9QVF9TQihURUxPUFRfRk9SV0FSRF9YKS5mb3J3YXJkX3guY2hh bm5lbFtpXS5pZCA9PSBjaGFubmVsKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGlm ICggaSA9PSBNQVhGV0RYICkgeworICAgICAgICBkZWJ1ZyhGMTEwLCJmd2R4X3dyaXRlX2RhdGFf dG9fY2hhbm5lbCIsCisgICAgICAgICAgICAgICAiYXR0ZW1wdGluZyB0byB3cml0ZSB0byBjbG9z ZWQgY2hhbm5lbCIsMCk7CisgICAgICAgIHJldHVybigtMSk7CisgICAgfQorCisgICAgc29jayA9 IFRFTE9QVF9TQihURUxPUFRfRk9SV0FSRF9YKS5mb3J3YXJkX3guY2hhbm5lbFtpXS5mZDsKKyAg ICBkZWJ1ZyhGMTExLCJmd2R4X3dyaXRlX2RhdGFfdG9fY2hhbm5lbCIsInNvY2tldCIsc29jayk7 CisgICAgY2toZXhkdW1wKCJmd2R4X3dyaXRlX2RhdGFfdG9fY2hhbm5lbCIsZGF0YSxsZW4pOwor CisgIGZ3ZHhfd3JpdGVfZGF0YV90b19jaGFubmVsX3JldHJ5OgorCisgICAgaWYgKChjb3VudCA9 IHNvY2tldF93cml0ZShzb2NrLGRhdGEsbGVuKSkgPCAwKSB7CisgICAgICAgIGludCBzX2Vycm5v ID0gc29ja2V0X2Vycm5vOyAvKiBtYXliZSBhIGZ1bmN0aW9uICovCisgICAgICAgIGRlYnVnKEYx MDEsImZ3ZHhfd3JpdGVfZGF0YV90b19jaGFubmVsIHNvY2tldF93cml0ZSBlcnJvciIsIiIsc19l cnJubyk7CisjaWZkZWYgQkVUQVRFU1QKKyAgICAgICAgcHJpbnRmKCJmd2R4X3dyaXRlX2RhdGFf dG9fY2hhbm5lbCBlcnJvclxyXG4iKTsKKyNlbmRpZiAvKiBCRVRBVEVTVCAqLworI2lmZGVmIE9T MgorICAgICAgICBpZiAob3Myc29ja2V0ZXJyb3Ioc19lcnJubykgPCAwKQorICAgICAgICAgICAg cmV0dXJuKC0yKTsKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAgcmV0dXJuKC0xKTsgICAgICAg ICAgICAgICAgIC8qIENhbGwgaXQgYW4gaS9vIGVycm9yICovCisgICAgfQorICAgIGlmIChjb3Vu dCA8IGxlbikgeworICAgICAgICBkZWJ1ZyhGMTExLCJmd2R4X3dyaXRlX2RhdGFfdG9fY2hhbm5l bCBzb2NrZXRfd3JpdGUiLGRhdGEsY291bnQpOworICAgICAgICBpZiAoY291bnQgPiAwKSB7Cisg ICAgICAgICAgICBkYXRhICs9IGNvdW50OworICAgICAgICAgICAgbGVuIC09IGNvdW50OworICAg ICAgICB9CisgICAgICAgIGRlYnVnKEYxMTEsImZ3ZHhfd3JpdGVfZGF0YV90b19jaGFubmVsIHJl dHJ5IixkYXRhLGxlbik7CisgICAgICAgIGlmICggbGVuID4gMCApCisgICAgICAgICAgICBnb3Rv IGZ3ZHhfd3JpdGVfZGF0YV90b19jaGFubmVsX3JldHJ5OworICAgIH0KKworICAgIGRlYnVnKEYx MTEsImZ3ZHhfd3JpdGVfZGF0YV90b19jaGFubmVsIGNvbXBsZXRlIixkYXRhLGxlbmd0aCk7Cisg ICAgcmV0dXJuKGxlbmd0aCk7IC8qIHN1Y2Nlc3MgLSByZXR1cm4gdG90YWwgbGVuZ3RoICovCit9 CisKK1ZPSUQKK2Z3ZHhfY2hlY2tfc29ja2V0cyhmZF9zZXQgKmliaXRzKQoreworICAgIGludCB4 LCBzb2NrLCBjaGFubmVsLCBieXRlczsKKyAgICBzdGF0aWMgY2hhciBidWZmZXJbMzIwMDBdOwor CisgICAgZGVidWcoRjEwMCwiZndkeF9jaGVja19zb2NrZXRzKCkiLCIiLDApOworICAgIGlmICgg c3N0ZWxuZXQgJiYgIVRFTE9QVF9NRShURUxPUFRfRk9SV0FSRF9YKSB8fAorICAgICAgICAgIXNz dGVsbmV0ICYmICFURUxPUFRfVShURUxPUFRfRk9SV0FSRF9YKSkgeworICAgICAgICBkZWJ1ZyhG MTEwLCJmd2R4X2NoZWNrX3NvY2tldHMoKSIsIlRFTE9QVF9GT1JXQVJEX1ggbm90IG5lZ290aWF0 ZWQiLDApOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZm9yICh4ID0gMDsgeCA8IE1B WEZXRFg7IHgrKykgeworICAgICAgICBpZiAoIFRFTE9QVF9TQihURUxPUFRfRk9SV0FSRF9YKS5m b3J3YXJkX3guY2hhbm5lbFt4XS5mZCA9PSAtMSB8fAorICAgICAgICAgICAgIFRFTE9QVF9TQihU RUxPUFRfRk9SV0FSRF9YKS5mb3J3YXJkX3guY2hhbm5lbFt4XS5zdXNwZW5kICkKKyAgICAgICAg ICAgIGNvbnRpbnVlOworCisgICAgICAgIHNvY2sgPSBURUxPUFRfU0IoVEVMT1BUX0ZPUldBUkRf WCkuZm9yd2FyZF94LmNoYW5uZWxbeF0uZmQ7CisgICAgICAgIGlmIChGRF9JU1NFVChzb2NrLCBp Yml0cykpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNoYW5uZWwgPSBURUxPUFRfU0IoVEVMT1BU X0ZPUldBUkRfWCkuZm9yd2FyZF94LmNoYW5uZWxbeF0uaWQ7CisgICAgICAgICAgICBkZWJ1ZyhG MTExLCJmd2R4X2NoZWNrX3NvY2tldHMoKSIsImNoYW5uZWwgc2V0IixjaGFubmVsKTsKKworICAg ICAgICAgICAgYnl0ZXMgPSBzb2NrZXRfcmVhZChzb2NrLCBidWZmZXIsIHNpemVvZihidWZmZXIp KTsKKyAgICAgICAgICAgIGlmIChieXRlcyA+IDApCisgICAgICAgICAgICAgICAgZndkeF9zZW5k X2RhdGFfZnJvbV9jaGFubmVsKGNoYW5uZWwsIGJ1ZmZlciwgYnl0ZXMpOworICAgICAgICAgICAg ZWxzZSBpZiAoYnl0ZXMgPT0gMCkgeworICAgICAgICAgICAgICAgIGZ3ZHhfY2xvc2VfY2hhbm5l bChjaGFubmVsKTsKKyAgICAgICAgICAgICAgICBmd2R4X3NlbmRfY2xvc2UoY2hhbm5lbCk7Cisg ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK2ludAorZndkeF9pbml0X2ZkX3Nl dChmZF9zZXQgKmliaXRzKQoreworICAgIGludCB4LHNldD0wLGNudD0wOworCisgICAgaWYgKCBz c3RlbG5ldCAmJiAhVEVMT1BUX01FKFRFTE9QVF9GT1JXQVJEX1gpIHx8CisgICAgICAgICAhc3N0 ZWxuZXQgJiYgIVRFTE9QVF9VKFRFTE9QVF9GT1JXQVJEX1gpKSB7CisgICAgICAgIGRlYnVnKEYx MTAsImZ3ZHhfaW5pdF9mZF9zZXQoKSIsIlRFTE9QVF9GT1JXQVJEX1ggbm90IG5lZ290aWF0ZWQi LDApOworICAgICAgICByZXR1cm4oMCk7CisgICAgfQorCisgICAgaWYgKFRFTE9QVF9TQihURUxP UFRfRk9SV0FSRF9YKS5mb3J3YXJkX3gubGlzdGVuX3NvY2tldCAhPSAtMSkgeworICAgICAgICBz ZXQrKzsKKyAgICAgICAgRkRfU0VUKFRFTE9QVF9TQihURUxPUFRfRk9SV0FSRF9YKS5mb3J3YXJk X3gubGlzdGVuX3NvY2tldCwgaWJpdHMpOworICAgIH0KKyAgICBmb3IgKHggPSAwOyB4IDwgTUFY RldEWDsgeCsrKSB7CisgICAgICAgIGlmIChURUxPUFRfU0IoVEVMT1BUX0ZPUldBUkRfWCkuZm9y d2FyZF94LmNoYW5uZWxbeF0uZmQgIT0gLTEpIHsKKyAgICAgICAgICAgIGNudCsrOworICAgICAg ICAgICAgaWYgKFRFTE9QVF9TQihURUxPUFRfRk9SV0FSRF9YKS5mb3J3YXJkX3guY2hhbm5lbFt4 XS5zdXNwZW5kKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgc2V0Kys7 CisgICAgICAgICAgICBGRF9TRVQoVEVMT1BUX1NCKFRFTE9QVF9GT1JXQVJEX1gpLmZvcndhcmRf eC5jaGFubmVsW3hdLmZkLCBpYml0cyk7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKHNldCAr IGNudCA9PSAwKSB7CisgICAgICAgIHJldHVybigtMSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg cmV0dXJuKHNldCk7CisgICAgfQorfQorCisjaWZkZWYgTlQKK1ZPSUQKK2Z3ZHhfdGhyZWFkKCBW T0lEICogZHVtbXkgKQoreworICAgIGZkX3NldCBpZmRzOworICAgIHN0cnVjdCB0aW1ldmFsIHR2 OworICAgIGV4dGVybiBpbnQgcHJpb3JpdHk7CisgICAgaW50IG47CisKKyAgICBzZXRpbnQoKTsK KyAgICBTZXRUaHJlYWRQcnR5KHByaW9yaXR5LGlzV2luOTUoKSA/IDMgOiAxMSk7CisKKyAgICB3 aGlsZSAoICFzc3RlbG5ldCAmJiBURUxPUFRfVShURUxPUFRfRk9SV0FSRF9YKSB8fAorICAgICAg ICAgICAgc3N0ZWxuZXQgJiYgVEVMT1BUX01FKFRFTE9QVF9GT1JXQVJEX1gpKQorICAgIHsKKyAg ICAgICAgRkRfWkVSTygmaWZkcyk7CisgICAgICAgIG4gPSBmd2R4X2luaXRfZmRfc2V0KCZpZmRz KTsKKyAgICAgICAgaWYgKG4gPiAwKSB7CisgICAgICAgICAgICB0di50dl9zZWMgPSAwOworICAg ICAgICAgICAgdHYudHZfdXNlYyA9IDI1MDA7CisgICAgICAgICAgICBpZiAoIHNlbGVjdChGRF9T RVRTSVpFLCAmaWZkcywgTlVMTCwgTlVMTCwgJnR2KSA+IDAgKQorICAgICAgICAgICAgICAgIGZ3 ZHhfY2hlY2tfc29ja2V0cygmaWZkcyk7CisKKyAgICAgICAgfSBlbHNlIGlmIChuIDwgMCkgewor ICAgICAgICAgICAgVEVMT1BUX1NCKFRFTE9QVF9GT1JXQVJEX1gpLmZvcndhcmRfeC50aHJlYWRf c3RhcnRlZCA9IDA7CisgICAgICAgICAgICBja1RocmVhZEVuZChOVUxMKTsKKyAgICAgICAgfSBl bHNlIHsKKyAgICAgICAgICAgIHNsZWVwKDEpOworICAgICAgICB9CisgICAgfQorfQorI2VuZGlm IC8qIE5UICovCisjZW5kaWYgLyogQ0tfRk9SV0FSRF9YICovCisjZW5kaWYgLyogVE5DT0RFICov CisjZW5kaWYgLyogTkVUQ09OTiAqLwoKZGlmZiAtLWdpdCBhL2NrZXJtaXQtOS4wLjMwMi1idWls ZC9ja2VybWl0LTkuMC4zMDIvY2tjbmV0LmggYi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1p dC05LjAuMzAyL2NrY25ldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0 MGJjNzQKLS0tIC9kZXYvbnVsbAorKysgYi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05 LjAuMzAyL2NrY25ldC5oCkBAIC0wLDAgKzEsMTUwOSBAQAorLyogY2tjbmV0LmggLS0gU3ltYm9s IGFuZCBtYWNybyBkZWZpbml0aW9ucyBmb3IgQy1LZXJtaXQgbmV0d29yayBzdXBwb3J0ICovCisK Ky8qCisgIEF1dGhvcjogRnJhbmsgZGEgQ3J1eiA8ZmRjQGNvbHVtYmlhLmVkdT4KKyAgQ29sdW1i aWEgVW5pdmVyc2l0eSBBY2FkZW1pYyBJbmZvcm1hdGlvbiBTeXN0ZW1zLCBOZXcgWW9yayBDaXR5 LgorCisgIENvcHlyaWdodCAoQykgMTk4NSwgMjAwOSwKKyAgICBUcnVzdGVlcyBvZiBDb2x1bWJp YSBVbml2ZXJzaXR5IGluIHRoZSBDaXR5IG9mIE5ldyBZb3JrLgorICAgIEFsbCByaWdodHMgcmVz ZXJ2ZWQuICBTZWUgdGhlIEMtS2VybWl0IENPUFlJTkcuVFhUIGZpbGUgb3IgdGhlCisgICAgY29w eXJpZ2h0IHRleHQgaW4gdGhlIGNrY21haS5jIG1vZHVsZSBmb3IgZGlzY2xhaW1lciBhbmQgcGVy bWlzc2lvbnMuCisqLworI2lmbmRlZiBDS0NORVRfSAorI2RlZmluZSBDS0NORVRfSAorCisvKiBO ZXR3b3JrIHR5cGVzICovCisKKyNkZWZpbmUgTkVUX05PTkUgMCAgICAgICAgICAgICAgICAgICAg ICAvKiBOb25lICovCisjZGVmaW5lIE5FVF9UQ1BCIDEgICAgICAgICAgICAgICAgICAgICAgLyog VENQL0lQIEJlcmtlbGV5IChzb2NrZXQpICovCisjZGVmaW5lIE5FVF9UQ1BBIDIgICAgICAgICAg ICAgICAgICAgICAgLyogVENQL0lQIEFUJlQgKHN0cmVhbXMpICovCisjZGVmaW5lIE5FVF9TWDI1 IDMgICAgICAgICAgICAgICAgICAgICAgLyogU1VOT1MgU3VuTGluayBYLjI1ICovCisjZGVmaW5l IE5FVF9ERUMgIDQgICAgICAgICAgICAgICAgICAgICAgLyogREVDbmV0ICovCisjZGVmaW5lIE5F VF9WUFNJIDUgICAgICAgICAgICAgICAgICAgICAgLyogVkFYIFBTSSAqLworI2RlZmluZSBORVRf UElQRSA2ICAgICAgICAgICAgICAgICAgICAgIC8qIExBTiBNYW5hZ2VyIE5hbWVkIFBpcGUgKi8K KyNkZWZpbmUgTkVUX1ZYMjUgNyAgICAgICAgICAgICAgICAgICAgICAvKiBTdHJhdHVzIFZPUyBY LjI1ICovCisjZGVmaW5lIE5FVF9CSU9TIDggICAgICAgICAgICAgICAgICAgICAgLyogSUJNIE5l dEJpb3MgKi8KKyNkZWZpbmUgTkVUX1NMQVQgOSAgICAgICAgICAgICAgICAgICAgICAvKiBNZXJp ZGlhbiBUZWNobm9sb2dpZXMnIFN1cGVyTEFUICovCisjZGVmaW5lIE5FVF9GSUxFIDEwICAgICAg ICAgICAgICAgICAgICAgLyogUmVhZCBmcm9tIGEgZmlsZSAqLworI2RlZmluZSBORVRfQ01EICAx MSAgICAgICAgICAgICAgICAgICAgIC8qIFJlYWQgZnJvbSBhIHN1Yi1wcm9jZXNzICovCisjZGVm aW5lIE5FVF9ETEwgIDEyICAgICAgICAgICAgICAgICAgICAgLyogTG9hZCBhIERMTCBmb3IgdXNl IGFzIGNvbW0gY2hhbm5lbCovCisjZGVmaW5lIE5FVF9JWDI1IDEzICAgICAgICAgICAgICAgICAg ICAgLyogSUJNIEFJWCA0LjEgWC4yNSAqLworI2RlZmluZSBORVRfSFgyNSAxNCAgICAgICAgICAg ICAgICAgICAgIC8qIEhQLVVYIDEwIFguMjUgKi8KKyNkZWZpbmUgTkVUX1BUWSAgMTUgICAgICAg ICAgICAgICAgICAgICAvKiBQc2V1ZG90ZXJtaW5hbCAqLworI2RlZmluZSBORVRfU1NIICAxNiAg ICAgICAgICAgICAgICAgICAgIC8qIFNTSCAqLworCisjaWZkZWYgT1MyICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogSW4gT1MvMiwgb25seSB0aGUgMzItYml0ICovCisjaWZuZGVmIF9f MzJCSVRfXyAgICAgICAgICAgICAgICAgICAgICAgLyogdmVyc2lvbiBnZXRzIE5FVEJJT1MgKi8K KyNpZmRlZiBDS19ORVRCSU9TCisjdW5kZWYgQ0tfTkVUQklPUworI2VuZGlmIC8qIENLX05FVEJJ T1MgKi8KKyNlbmRpZiAvKiBfXzMyQklUX18gKi8KKyNlbmRpZiAvKiBPUzIgKi8KKworI2lmZGVm IF9NX1BQQworI2lmZGVmIFNVUEVSTEFUCisjdW5kZWYgU1VQRVJMQVQKKyNlbmRpZiAvKiBTVVBF UkxBVCAqLworI2VuZGlmIC8qIF9NX1BQQyAqLworCisjaWZkZWYgTlBJUEUgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogRm9yIGl0ZW1zIGluIGNvbW1vbiB0byAqLworI2RlZmluZSBOUElQ RU9SQklPUyAgICAgICAgICAgICAgICAgICAgIC8qIE5hbWVkIFBpcGVzIGFuZCBORVRCSU9TICov CisjZW5kaWYgLyogTlBJUEUgKi8KKyNpZmRlZiBDS19ORVRCSU9TCisjaWZuZGVmIE5QSVBFT1JC SU9TCisjZGVmaW5lIE5QSVBFT1JCSU9TCisjZW5kaWYgLyogTlBJUEVPUkJJT1MgKi8KKyNlbmRp ZiAvKiBDS19ORVRCSU9TICovCisKKy8qIE5ldHdvcmsgdmlydHVhbCB0ZXJtaW5hbCBwcm90b2Nv bHMgKGZvciBTRVQgSE9TVCBjb25uZWN0aW9ucykgKi8KKy8qIEZUUCwgSFRUUCBhbmQgU1NIIGhh dmUgdGhlaXIgb3duIHN0YWNrcyAgICAgICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBO UF9ERUZBVUxUICAgIDI1NQorI2RlZmluZSBOUF9OT05FICAgICAgICAgMCAgICAgICAgICAgICAg IC8qIE5vbmUgKGFzeW5jKSAqLworI2RlZmluZSBOUF9URUxORVQgICAgICAgMSAgICAgICAgICAg ICAgIC8qIFRDUC9JUCB0ZWxuZXQgKi8KKyNkZWZpbmUgTlBfVlRQICAgICAgICAgIDIgICAgICAg ICAgICAgICAvKiBJU08gVmlydHVhbCBUZXJtaW5hbCBQcm90b2NvbCAqLworI2RlZmluZSBOUF9Y MyAgICAgICAgICAgMyAgICAgICAgICAgICAgIC8qIENDSVRUIFguMyAqLworI2RlZmluZSBOUF9Y MjggICAgICAgICAgNCAgICAgICAgICAgICAgIC8qIENDSVRUIFguMjggKi8KKyNkZWZpbmUgTlBf WDI5ICAgICAgICAgIDUgICAgICAgICAgICAgICAvKiBDQ0lUVCBYLjI5ICovCisjZGVmaW5lIE5Q X1JMT0dJTiAgICAgICA2ICAgICAgICAgICAgICAgLyogVENQL0lQIFJlbW90ZSBsb2dpbiAqLwor I2RlZmluZSBOUF9LRVJNSVQgICAgICAgNyAgICAgICAgICAgICAgIC8qIFRDUC9JUCBLZXJtaXQg Ki8KKyNkZWZpbmUgTlBfVENQUkFXICAgICAgIDggICAgICAgICAgICAgICAvKiBUQ1AvSVAgUmF3 IHNvY2tldCAqLworI2RlZmluZSBOUF9UQ1BVTksgICAgICAgOSAgICAgICAgICAgICAgIC8qIFRD UC9JUCBVbmtub3duICovCisjZGVmaW5lIE5QX1NTTCAgICAgICAgIDEwICAgICAgICAgICAgICAg LyogVENQL0lQIFNTTHYyMyAqLworI2RlZmluZSBOUF9UTFMgICAgICAgICAxMSAgICAgICAgICAg ICAgIC8qIFRDUC9JUCBUTFN2MSAqLworI2RlZmluZSBOUF9TU0xfVEVMTkVUICAxMiAgICAgICAg ICAgICAgIC8qIFRDUC9JUCBUZWxuZXQgb3ZlciBTU0x2MjMgKi8KKyNkZWZpbmUgTlBfVExTX1RF TE5FVCAgMTMgICAgICAgICAgICAgICAvKiBUQ1AvSVAgVGVsbmV0IG92ZXIgVExTdjEgKi8KKyNk ZWZpbmUgTlBfSzRMT0dJTiAgICAgMTQgICAgICAgICAgICAgICAvKiBUQ1AvSVAgS2VyYmVyaXpl ZCByZW1vdGUgbG9naW4gKi8KKyNkZWZpbmUgTlBfRUs0TE9HSU4gICAgMTUgICAgICAgICAgICAg ICAvKiBUQ1AvSVAgRW5jcnlwdGVkIEtlcmJlcml6ZWQgLi4uICovCisjZGVmaW5lIE5QX0s1TE9H SU4gICAgIDE2ICAgICAgICAgICAgICAgLyogVENQL0lQIEtlcmJlcml6ZWQgcmVtb3RlIGxvZ2lu ICovCisjZGVmaW5lIE5QX0VLNUxPR0lOICAgIDE3ICAgICAgICAgICAgICAgLyogVENQL0lQIEVu Y3J5cHRlZCBLZXJiZXJpemVkIC4uLiAqLworI2RlZmluZSBOUF9LNVUyVSAgICAgICAxOCAgICAg ICAgICAgICAgIC8qIFRDUC9JUCBLZXJiZXJvcyA1IFVzZXIgdG8gVXNlciAqLworI2RlZmluZSBO UF9DVEVSTSAgICAgICAxOSAgICAgICAgICAgICAgIC8qIERFQyBDVEVSTSAqLworI2RlZmluZSBO UF9MQVQgICAgICAgICAyMCAgICAgICAgICAgICAgIC8qIERFQyBMQVQgKi8KKyNkZWZpbmUgTlBf U1NMX1JBVyAgICAgMjEJCS8qIFNTTCB3aXRoIG5vIFRlbG5ldCBwZXJtaXR0ZWQgKi8KKyNkZWZp bmUgTlBfVExTX1JBVyAgICAgMjIJCS8qIFRMUyB3aXRoIG5vIFRlbG5ldCBwZXJtaXR0ZWQgKi8K KworLyogb3RoZXJzIGhlcmUuLi4gKi8KKworI2lmZGVmIENLX1NTTAorI2RlZmluZSBJU19URUxO RVQoKSAgICAgIChuZXR0eXBlID09IE5FVF9UQ1BCICYmICh0dG5wcm90byA9PSBOUF9URUxORVQg XAorICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHR0bnByb3RvID09IE5QX1NTTF9URUxORVQg XAorICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHR0bnByb3RvID09IE5QX1RMU19URUxORVQg XAorICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHR0bnByb3RvID09IE5QX0tFUk1JVCkpCisj ZWxzZSAvKiBDS19TU0wgKi8KKyNkZWZpbmUgSVNfVEVMTkVUKCkgICAgICAobmV0dHlwZSA9PSBO RVRfVENQQiAmJiAodHRucHJvdG8gPT0gTlBfVEVMTkVUIFwKKyAgICAgICAgICAgICAgICAgICAg ICAgICB8fCB0dG5wcm90byA9PSBOUF9LRVJNSVQpKQorI2VuZGlmIC8qIENLX1NTTCAqLworCisj aWZkZWYgQ0tfS0VSQkVST1MKKyNpZmRlZiBLUkI1CisjaWZkZWYgS1JCNAorI2RlZmluZSBJU19S TE9HSU4oKSAgICAgIChuZXR0eXBlID09IE5FVF9UQ1BCICYmICh0dG5wcm90byA9PSBOUF9STE9H SU4gXAorICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHR0bnByb3RvID09IE5QX0s1TE9HSU4g XAorICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHR0bnByb3RvID09IE5QX0VLNUxPR0lOIFwK KyAgICAgICAgICAgICAgICAgICAgICAgICB8fCB0dG5wcm90byA9PSBOUF9LNExPR0lOIFwKKyAg ICAgICAgICAgICAgICAgICAgICAgICB8fCB0dG5wcm90byA9PSBOUF9FSzRMT0dJTiBcCisgICAg ICAgICAgICAgICAgICAgICAgICAgKSkKKyNlbHNlIC8qIEtSQjQgKi8KKyNkZWZpbmUgSVNfUkxP R0lOKCkgICAgICAobmV0dHlwZSA9PSBORVRfVENQQiAmJiAodHRucHJvdG8gPT0gTlBfUkxPR0lO IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICB8fCB0dG5wcm90byA9PSBOUF9LNUxPR0lOIFwK KyAgICAgICAgICAgICAgICAgICAgICAgICB8fCB0dG5wcm90byA9PSBOUF9FSzVMT0dJTiBcCisg ICAgICAgICAgICAgICAgICAgICAgICAgKSkKKyNlbmRpZiAvKiBLUkI0ICovCisjZWxzZSAvKiBL UkI1ICovCisjaWZkZWYgS1JCNAorI2RlZmluZSBJU19STE9HSU4oKSAgICAgIChuZXR0eXBlID09 IE5FVF9UQ1BCICYmICh0dG5wcm90byA9PSBOUF9STE9HSU4gXAorICAgICAgICAgICAgICAgICAg ICAgICAgIHx8IHR0bnByb3RvID09IE5QX0s0TE9HSU4gXAorICAgICAgICAgICAgICAgICAgICAg ICAgIHx8IHR0bnByb3RvID09IE5QX0VLNExPR0lOIFwKKyAgICAgICAgICAgICAgICAgICAgICAg ICApKQorI2Vsc2UgLyogS1JCNCAqLworS0VSQkVST1MgZGVmaW5lZCB3aXRob3V0IGVpdGhlciBL UkI0IG9yIEtSQjUKKyNlbmRpZiAvKiBLUkI0ICovCisjZW5kaWYgLyogS1JCNSAqLworI2Vsc2Ug LyogQ0tfS0VSQkVST1MgKi8KKyNkZWZpbmUgSVNfUkxPR0lOKCkgICAgICAobmV0dHlwZSA9PSBO RVRfVENQQiAmJiAodHRucHJvdG8gPT0gTlBfUkxPR0lOKSkKKyNlbmRpZiAvKiBDS19LRVJCRVJP UyAqLworCisjZGVmaW5lIElTX1NTSCgpICAgICAgICAgKG5ldHR5cGUgPT0gTkVUX1NTSCkKKwor LyogUkxPR0lOIE1vZGVzICovCisjZGVmaW5lICAgIFJMX1JBVyAgICAgMCAgICAgICAgICAgICAg ICAgLyogIERvIE5vdCBQcm9jZXNzIFhPTi9YT0ZGICovCisjZGVmaW5lICAgIFJMX0NPT0tFRCAg MSAgICAgICAgICAgICAgICAgLyogIERvIFByb2Nlc3MgWE9OL1hPRkYgKi8KKworLyogRW5jcnlw dGlvbiB0eXBlcyAqLworCisjZGVmaW5lIENYX05PTkUgICAgOTk5CisKKyNpZmRlZiBFTkNUWVBF X0FOWQorI2RlZmluZSBDWF9BVVRPIEVOQ1RZUEVfQU5ZCisjZWxzZQorI2RlZmluZSBDWF9BVVRP IDAKKyNlbmRpZiAvKiBFTkNUWVBFX0FOWSAqLworCisjaWZkZWYgRU5DVFlQRV9ERVNfQ0ZCNjQK KyNkZWZpbmUgQ1hfREVTQzY0IEVOQ1RZUEVfREVTX0NGQjY0CisjZWxzZQorI2RlZmluZSBDWF9E RVNDNjQgMQorI2VuZGlmIC8qIEVOQ1RZUEVfREVTX0NGQjY0ICovCisKKyNpZmRlZiBFTkNUWVBF X0RFU19PRkI2NAorI2RlZmluZSBDWF9ERVNPNjQgRU5DVFlQRV9ERVNfT0ZCNjQKKyNlbHNlCisj ZGVmaW5lIENYX0RFU082NCAyCisjZW5kaWYgLyogRU5DVFlQRV9ERVNfT0ZCNjQgKi8KKworI2lm ZGVmIEVOQ1RZUEVfREVTM19DRkI2NAorI2RlZmluZSBDWF9ERVMzQzY0IEVOQ1RZUEVfREVTM19D RkI2NAorI2Vsc2UKKyNkZWZpbmUgQ1hfREVTM0M2NCAzCisjZW5kaWYgLyogRU5DVFlQRV9ERVNf Q0ZCNjQgKi8KKworI2lmZGVmIEVOQ1RZUEVfREVTM19PRkI2NAorI2RlZmluZSBDWF9ERVNPNjQg RU5DVFlQRV9ERVMzX09GQjY0CisjZWxzZQorI2RlZmluZSBDWF9ERVMzTzY0IDQKKyNlbmRpZiAv KiBFTkNUWVBFX0RFU19PRkI2NCAqLworCisjaWZkZWYgRU5DVFlQRV9DQVNUNV80MF9DRkI2NAor I2RlZmluZSBDWF9DNTQwQzY0IEVOQ1RZUEVfQ0FTVDVfNDBfQ0ZCNjQKKyNlbHNlCisjZGVmaW5l IENYX0M1NDBDNjQgOAorI2VuZGlmIC8qIEVOQ1RZUEVfQ0FTVDVfNDBfQ0ZCNjQgKi8KKworI2lm ZGVmIEVOQ1RZUEVfQ0FTVDVfNDBfT0ZCNjQKKyNkZWZpbmUgQ1hfQzU0ME82NCBFTkNUWVBFX0NB U1Q1XzQwX09GQjY0CisjZWxzZQorI2RlZmluZSBDWF9DNTQwTzY0IDkKKyNlbmRpZiAvKiBFTkNU WVBFX0NBU1Q1XzQwX09GQjY0ICovCisKKyNpZmRlZiBFTkNUWVBFX0NBU1QxMjhfQ0ZCNjQKKyNk ZWZpbmUgQ1hfQzEyOEM2NCBFTkNUWVBFX0NBU1QxMjhfQ0ZCNjQKKyNlbHNlCisjZGVmaW5lIENY X0MxMjhDNjQgMTAKKyNlbmRpZiAvKiBFTkNUWVBFX0NBU1QxMjhfQ0ZCNjQgKi8KKworI2lmZGVm IEVOQ1RZUEVfQ0FTVDEyOF9PRkI2NAorI2RlZmluZSBDWF9DMTI4TzY0IEVOQ1RZUEVfQ0FTVDEy OF9PRkI2NAorI2Vsc2UKKyNkZWZpbmUgQ1hfQzEyOE82NCAxMQorI2VuZGlmIC8qIEVOQ1RZUEVf Q0FTVDEyOF9PRkI2NCAqLworCisvKiBCYXNpYyBuZXR3b3JrIGZ1bmN0aW9uIHByb3RvdHlwZXMs IGNvbW1vbiB0byBhbGwuICovCisKK19QUk9UT1RZUCggaW50IG5ldG9wZW4sIChjaGFyICosIGlu dCAqLCBpbnQpICk7CitfUFJPVE9UWVAoIGludCBuZXRjbG9zLCAodm9pZCkgKTsKK19QUk9UT1RZ UCggaW50IG5ldGZsdWksICh2b2lkKSApOworX1BST1RPVFlQKCBpbnQgbmV0dGNoaywgKHZvaWQp ICk7CitfUFJPVE9UWVAoIGludCBuZXR4Y2hrLCAoaW50KSApOworX1BST1RPVFlQKCBpbnQgbmV0 YnJlYWssICh2b2lkKSApOworX1BST1RPVFlQKCBpbnQgbmV0aW5jLCAoaW50KSApOworX1BST1RP VFlQKCBpbnQgbmV0eGluLCAoaW50LCBDSEFSICopICk7CitfUFJPVE9UWVAoIGludCBuZXR0b2ws IChDSEFSICosIGludCkgKTsKK19QUk9UT1RZUCggaW50IG5ldHRvYywgKENIQVIpICk7CisjaWZk ZWYgVENQU09DS0VUCitfUFJPVE9UWVAoIGludCBnZXR0Y3Bwb3J0LCAodm9pZCkgKTsKK19QUk9U T1RZUCggaW50IGdldHRjcHBvcnQsICh2b2lkKSApOworI2VuZGlmCS8qIFRDUFNPQ0tFVCAqLwor CisvKgorICBTdW5MaW5rIFguMjUgc3VwcG9ydCBieSBNYXJjZWxsbyBGcnV0aWcsIENhdGhvbGlj IFVuaXZlcnNpdHksCisgIFJpbyBkZSBKYW5laXJvLCBCcmF6aWwsIDE5OTAuCisKKyAgTWF5YmUg dGhpcyBjYW4gYmUgYWRhcHRlZCB0byBWQVggUFNJIGFuZCBvdGhlciBYLjI1IHByb2R1Y3RzIHRv by4KKyovCisjaWZuZGVmIFNVTk9TNCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogT25seSB2 YWxpZCBmb3IgU1VOT1M0ICovCisjaWZuZGVmIFNPTEFSSVMKKyNpZmRlZiBTVU5YMjUKKyN1bmRl ZiBTVU5YMjUKKyNlbmRpZiAvKiBTVU5YMjUgKi8KKyNlbmRpZiAvKiBTT0xBUklTICovCisjZW5k aWYgLyogU1VOT1M0ICovCisKKyNpZmRlZiBTVFJBVFVTWDI1CisjZGVmaW5lIEFOWVgyNQorI2Rl ZmluZSBNQVhfVVNFUl9EQVRBIDEyOCAvKiBTVU4gZGVmaW5lcyB0aGlzIGluIGEgaGVhZGVyIGZp bGUsIEkgYmVsaWV2ZS4gKi8KKyNlbmRpZiAvKiBTVFJBVFVTWDI1ICovCisKKyNpZmRlZiBTVU5Y MjUKKyNkZWZpbmUgQU5ZWDI1CisjZW5kaWYgLyogU1VOWDI1ICovCisKKyNpZmRlZiBJQk1YMjUg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBSVggNC4xIFguMjUgKi8KKyNpZm5kZWYgQUlY NDEKKyN1bmRlZiBJQk1YMjUKKyNlbHNlIC8qIEFJWDQxICovCisjZGVmaW5lIEFOWVgyNQorI2Rl ZmluZSBNQVhfVVNFUl9EQVRBIE5QSV9NQVhfREFUQSAgICAgIC8qIHVzZWQgZm9yIGJ1ZmZlciBz aXplcyAqLworI2VuZGlmIC8qIEFJWDQxICovCisjZW5kaWYgLyogSUJNWDI1ICovCisKKyNpZmRl ZiBIUFgyNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBIUC1VWCAxMC4qIFguMjUgKi8K KyNpZm5kZWYgSFBVWDEwCisjdW5kZWYgSFBYMjUKKyNlbHNlIC8qIEhQVVgxMCAqLworI2RlZmlu ZSBBTllYMjUKKyNlbmRpZiAvKiBIUFVYMTAgKi8KKyNlbmRpZiAvKiBIUFgyNSAqLworCisjaWZk ZWYgQU5ZWDI1CisjaWZuZGVmIE5FVENPTk4gICAgICAgICAgICAgICAgICAgICAgICAgLyogQU5Z WDI1IGltcGxpZXMgTkVUQ09OTiAqLworI2RlZmluZSBORVRDT05OCisjZW5kaWYgLyogTkVUQ09O TiAqLworCisjZGVmaW5lIE1BWFBBRFBBUk1TICAgICAgICAgICAgICAgIDIyICAgLyogTnVtYmVy IG9mIFBBRCBwYXJhbWV0ZXJzICovCisjZGVmaW5lIE1BWENVREFUQSAgICAgICAgICAgICAgICAg IDEyICAgLyogTWF4IGxlbmd0aCBvZiBYLjI1IGNhbGwgdXNlciBkYXRhICovCisjZGVmaW5lIFgy OVBJRCAgICAgICAgICAgICAgICAgICAgICAxICAgLyogWC4yOSBwcm90b2NvbCBJRCAqLworI2Rl ZmluZSBYMjlQSURMRU4gICAgICAgICAgICAgICAgICAgNCAgIC8qIFguMjkgcHJvdG9jb2wgSUQg bGVuZ3RoICovCisKKyNkZWZpbmUgWDI5X1NFVF9QQVJNUyAgICAgICAgICAgICAgIDIKKyNkZWZp bmUgWDI5X1JFQURfUEFSTVMgICAgICAgICAgICAgIDQKKyNkZWZpbmUgWDI5X1NFVF9BTkRfUkVB RF9QQVJNUyAgICAgIDYKKyNkZWZpbmUgWDI5X0lOVklUQVRJT05fVE9fQ0xFQVIgICAgIDEKKyNk ZWZpbmUgWDI5X1BBUkFNRVRFUl9JTkRJQ0FUSU9OICAgIDAKKyNkZWZpbmUgWDI5X0lORElDQVRJ T05fT0ZfQlJFQUsgICAgIDMKKyNkZWZpbmUgWDI5X0VSUk9SICAgICAgICAgICAgICAgICAgIDUK KworI2RlZmluZSBJTlZBTElEX1BBRF9QQVJNICAgICAgICAgICAgMQorCisjZGVmaW5lIFBBRF9C UkVBS19DSEFSQUNURVIgICAgICAgICAwCisKKyNkZWZpbmUgUEFEX0VTQ0FQRSAgICAgICAgICAg ICAgICAgIDEKKyNkZWZpbmUgUEFEX0VDSE8gICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUg UEFEX0RBVEFfRk9SV0FSRF9DSEFSICAgICAgIDMKKyNkZWZpbmUgUEFEX0RBVEFfRk9SV0FSRF9U SU1FT1VUICAgIDQKKyNkZWZpbmUgUEFEX0ZMT1dfQ09OVFJPTF9CWV9QQUQgICAgIDUKKyNkZWZp bmUgUEFEX1NVUFBSRVNTSU9OX09GX1NJR05BTFMgIDYKKyNkZWZpbmUgUEFEX0JSRUFLX0FDVElP TiAgICAgICAgICAgIDcKKyNkZWZpbmUgUEFEX1NVUFBSRVNTSU9OX09GX0RBVEEgICAgIDgKKyNk ZWZpbmUgUEFEX1BBRERJTkdfQUZURVJfQ1IgICAgICAgIDkKKyNkZWZpbmUgUEFEX0xJTkVfRk9M RElORyAgICAgICAgICAgMTAKKyNkZWZpbmUgUEFEX0xJTkVfU1BFRUQgICAgICAgICAgICAgMTEK KyNkZWZpbmUgUEFEX0ZMT1dfQ09OVFJPTF9CWV9VU0VSICAgMTIKKyNkZWZpbmUgUEFEX0xGX0FG VEVSX0NSICAgICAgICAgICAgMTMKKyNkZWZpbmUgUEFEX1BBRERJTkdfQUZURVJfTEYgICAgICAg MTQKKyNkZWZpbmUgUEFEX0VESVRJTkcgICAgICAgICAgICAgICAgMTUKKyNkZWZpbmUgUEFEX0NI QVJfREVMRVRFX0NIQVIgICAgICAgMTYKKyNkZWZpbmUgUEFEX0JVRkZFUl9ERUxFVEVfQ0hBUiAg ICAgMTcKKyNkZWZpbmUgUEFEX0JVRkZFUl9ESVNQTEFZX0NIQVIgICAgMTgKKworI2RlZmluZSBN QVhJWDI1IE1BWF9VU0VSX0RBVEEqNworI2RlZmluZSBNQVhPWDI1IE1BWF9VU0VSX0RBVEEKKyNl bmRpZiAvKiBBTllYMjUgKi8KKworI2lmZGVmIFNVTlgyNQorI2lmZGVmIFNPTEFSSVMyNSAgICAg ICAgICAgICAgICAgICAgICAgIC8qIGFuZCBwcmVzdW1hYmx5IFN1bkxpbmsgOS54eCAqLworI2lu Y2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzeXMvaW9jY29t Lmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2lu Y2x1ZGUgPHN5cy9zb2NraW8uaD4KKyNpbmNsdWRlIDxzdW5kZXYvc3luY3N0YXQuaD4KKyNpbmNs dWRlIDxuZXR4MjUveDI1X3BrLmg+CisjaW5jbHVkZSA8bmV0eDI1L3gyNV9jdGwuaD4KKyNpbmNs dWRlIDxuZXR4MjUveDI1X2lvY3RsLmg+CisjZWxzZQorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPiAg ICAgICAgICAgICAgICAgIC8qIFguMjUgaW5jbHVkZXMsIFN1biBvbmx5ICovCisjaW5jbHVkZSA8 c3lzL3N5c3RtLmg+CisjaWZuZGVmIFNPTEFSSVMKKyNpbmNsdWRlIDxzeXMvbWJ1Zi5oPgorI2Vu ZGlmIC8qIFNPTEFSSVMgKi8KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8c3lz L3Byb3Rvc3cuaD4KKyNpZmRlZiBTT0xBUklTCisjaW5jbHVkZSA8c3lzL3NvY2tpby5oPgorI2Vs c2UKKyNpbmNsdWRlIDxzeXMvZG9tYWluLmg+CisjZW5kaWYgLyogU09MQVJJUyAqLworI2luY2x1 ZGUgPHN5cy9zb2NrZXR2YXIuaD4KKyNpbmNsdWRlIDxuZXQvaWYuaD4KKyNpbmNsdWRlIDxzdW5k ZXYvc3luY3N0YXQuaD4KKyNpbmNsdWRlIDxuZXR4MjUveDI1X3BrLmg+CisjaW5jbHVkZSA8bmV0 eDI1L3gyNV9jdGwuaD4KKyNpbmNsdWRlIDxuZXR4MjUveDI1X2lvY3RsLmg+CisjZW5kaWYgLyog U09MQVJJUzI1ICovCisjZW5kaWYgLyogU1VOWDI1ICovCisKKyNpZmRlZiBBTllYMjUKKworI2lm ZGVmIElCTVgyNSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFguMjUgaW5jbHVkZXMsIEFJ WCBvbmx5ICovCisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzeXMvdHd0eXBlcy5oPgor I2luY2x1ZGUgPHN5cy90d2xpYi5oPgorCisjaW5jbHVkZSA8c3lzL3N0cmVhbS5oPgorI2luY2x1 ZGUgPHN0cm9wdHMuaD4KKworI2RlZmluZSBOUElfMjAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIHJlcXVpcmVkIHRvIGluY2x1ZGUgdGhlIHdob2xlIE5QSSAqLworI2luY2x1ZGUgPHN5cy9u cGlfMjAuaD4KKyNpbmNsdWRlIDxzeXMvbnBpYXBpLmg+CisjaW5jbHVkZSA8c3lzL3BrdGludGYu aD4KKworI2luY2x1ZGUgPG9kbWkuaD4gICAgICAgICAgICAgICAgICAgICAgIC8qIHJlcXVpcmVk IGZvciBhY2Nlc3MgdG8gdGhlIE9ETSAgICovCisjaW5jbHVkZSA8c3lzL2NmZ29kbS5oPiAgICAg ICAgICAgICAgICAgLyogZGF0YWJhc2UsIG5lZWRlZCB0byBmaW5kIG91dCB0aGUgKi8KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsb2NhbCBOVUEuIHNlZSB4MjVs b2NhbF9udWEoKSAgICAqLworCisKKy8qIElCTSBYMjUgTlBJIGdlbmVyaWMgcHJpbWl0aXZlIHR5 cGUgKi8KK3R5cGVkZWYgdW5pb24gTl9ucGlfY3RsX3QgeworICAgIHVsb25nICAgICAgICAgICAg ICAgUFJJTV90eXBlOyAgICAgICAgICAgICAgLyogZ2VuZXJpYyBwcmltaXRpdmUgdHlwZSAqLwor ICAgIGNoYXIgICAgICAgICAgICAgICAgYnVmZmVyW05QSV9NQVhfQ1RMXTsgICAgLyogbWF4aW11 bSBwcmltaXRpdmUgc2l6ZSAqLworICAgIE5fYmluZF9hY2tfdCAgICAgICAgYmluZF9hY2s7Cisg ICAgTl9iaW5kX3JlcV90ICAgICAgICBiaW5kX3JlcTsKKyAgICBOX2Nvbm5fY29uX3QgICAgICAg IGNvbm5fY29uOworICAgIE5fY29ubl9pbmRfdCAgICAgICAgY29ubl9pbmQ7CisgICAgTl9jb25u X3JlcV90ICAgICAgICBjb25uX3JlcTsKKyAgICBOX2Nvbm5fcmVzX3QgICAgICAgIGNvbm5fcmVz OworICAgIE5fZGF0YV9yZXFfdCAgICAgICAgZGF0YV9yZXE7CisgICAgTl9kYXRhX2luZF90ICAg ICAgICBkYXRhX2luZDsKKyAgICBOX2Rpc2Nvbl9pbmRfdCAgICAgIGRpc2Nvbl9pbmQ7CisgICAg Tl9kaXNjb25fcmVxX3QgICAgICBkaXNjb25fcmVxOworICAgIE5fZXJyb3JfYWNrX3QgICAgICAg ZXJyb3JfYWNrOworICAgIE5fZXhkYXRhX2luZF90ICAgICAgZXhkYXRhX2luZDsKKyAgICBOX2lu Zm9fYWNrX3QgICAgICAgIGluZm9fYWNrOworICAgIE5fb2tfYWNrX3QgICAgICAgICAgb2tfYWNr OworICAgIE5fcmVzZXRfY29uX3QgICAgICAgcmVzZXRfY29uOworICAgIE5fcmVzZXRfcmVxX3Qg ICAgICAgcmVzZXRfcmVxOworICAgIE5fcmVzZXRfaW5kX3QgICAgICAgcmVzZXRfaW5kOworfSBO X25waV9jdGxfdDsKKworLyogc29tZSBleHRyYSBkZWZpbml0aW9ucyB0byBoZWxwIG91dCAqLwor dHlwZWRlZiBjaGFyICAgIHgyNWFkZHJfdFs0NV07ICAgICAgICAgIC8qIG1heCA0MCBkZWZpbmVk IGJ5IENDSVRUICovCit0eXBlZGVmIGNoYXIgICAgTl9ucGlfZGF0YV90W05QSV9NQVhfREFUQV07 CisKKy8qIGZkIG9yIHNlcnZlciB3YWl0aW5nIGZvciBjb25uZWN0aW9ucywgdXNlZCBieSBuZXRj bG9zIGFuZCBuZXRvcGVuICovCitleHRlcm4gaW50IHgyNXNlcnZlcmZkOworCisjZW5kaWYgLyog SUJNWDI1ICovCisKKyNpZmRlZiBIUFgyNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBY LjI1IGluY2x1ZGVzLCBIUC1VWCBvbmx5ICovCisjaW5jbHVkZSA8eDI1L2NjaXR0cHJvdG8uaD4K KyNpbmNsdWRlIDx4MjUveDI1Lmg+CisjaW5jbHVkZSA8eDI1L3gyNWFkZHJzdHIuaD4KKyNpbmNs dWRlIDx4MjUveDI1Y29kZXMuaD4KKyNpbmNsdWRlIDx4MjUveDI1aGRfaW9jdGwuaD4KKyNpbmNs dWRlIDx4MjUveDI1aW9jdGxzLmg+CisjaW5jbHVkZSA8eDI1L3gyNXN0ci5oPgorI2luY2x1ZGUg PHN5cy9pb2N0bC5oPgorI2VuZGlmIC8qIEhQWDI1ICovCisKKy8qIEMtS2VybWl0IFguMyAvIFgu MjUgLyBYLjI5IC8gWC4xMjEgc3VwcG9ydCBmdW5jdGlvbnMgKi8KKworLyogKHJpZWhtOiB0aGlz IGxpc3Qgb2YgZnVuY3Rpb25zIGlzbid0IHF1aXRlIHJpZ2h0IGZvciBBSVgpICovCisKK19QUk9U T1RZUCggaW50IHNob3BhZCwgKGludCkgKTsKK19QUk9UT1RZUCggaW50IHNob3gyNSwgKGludCkg KTsKK19QUk9UT1RZUCggVk9JRCBpbml0cGFkLCAodm9pZCkgKTsKK19QUk9UT1RZUCggVk9JRCBz ZXRwYWQsIChDSEFSICosIGludCkgKTsKK19QUk9UT1RZUCggVk9JRCByZWFkcGFkLCAoQ0hBUiAq LCBpbnQsIENIQVIgKikgKTsKK19QUk9UT1RZUCggaW50IHFiaXRwa3QsIChDSEFSICosIGludCkg KTsKK19QUk9UT1RZUCggVk9JRCBzZXRxYml0LCAodm9pZCkgKTsKK19QUk9UT1RZUCggVk9JRCBy ZXNldHFiaXQsICh2b2lkKSApOworX1BST1RPVFlQKCBWT0lEIGJyZWFrYWN0LCAodm9pZCkgKTsK K19QUk9UT1RZUCggaW50IHBreDEyMSwgKGNoYXIgKiwgQ0hBUiAqKSApOworX1BST1RPVFlQKCBT SUdUWVAgeDI1b29iaCwgKGludCkgKTsKK19QUk9UT1RZUCggaW50IHgyNWRpYWcsICh2b2lkKSAp OworX1BST1RPVFlQKCBpbnQgeDI1aW50ciwgKGNoYXIpICk7CitfUFJPVE9UWVAoIGludCB4MjVy ZXNldCwgKGNoYXIsIGNoYXIpICk7CitfUFJPVE9UWVAoIGludCB4MjVjbGVhciwgKHZvaWQpICk7 CitfUFJPVE9UWVAoIGludCB4MjVzdGF0LCAodm9pZCkgKTsKK19QUk9UT1RZUCggaW50IHgyNWlu LCAoaW50LCBDSEFSICopICk7CitfUFJPVE9UWVAoIGludCBzZXRwYWRwLCAodm9pZCkgKTsKK19Q Uk9UT1RZUCggaW50IHNldHgyNSwgKHZvaWQpICk7CitfUFJPVE9UWVAoIGludCB4MjV4aW4sIChp bnQsIENIQVIgKikgKTsKK19QUk9UT1RZUCggaW50IHgyNWlubCwgKENIQVIgKiwgaW50LCBpbnQs IENIQVIpICk7CisKKyNpZmRlZiBJQk1YMjUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBzZXR1cCB4MjUgKi8KK19QUk9UT1RZUCggdWxvbmcgeDI1YmluZCwgKGlu dCwgY2hhciAqLCBjaGFyICosIGludCwgaW50LCBpbnQsIHVsb25nKSApOworX1BST1RPVFlQKCBp bnQgeDI1Y2FsbCwgKGludCwgY2hhciAqLCBjaGFyICopICk7IC8qIGNvbm5lY3QgdG8gcmVtb3Rl ICovCitfUFJPVE9UWVAoIGludCB4MjV1bmJpbmQsIChpbnQpICk7ICAgICAgLyogZGlzY29ubmVj dCAqLworX1BST1RPVFlQKCBjaGFyICp4MjVwcmltLCAoaW50KSApOyAgICAgIC8qIGRpc3BsYXkg cHJpbWl0aXZlcyAqLworX1BST1RPVFlQKCBpbnQgeDI1bG9jYWxfbnVhLCAoY2hhciAqKSApOyAv KiBmaW5kIGxvY2FsIE5VQSAqLworI2VuZGlmIC8qIElCTVgyNSAqLworCisjZW5kaWYgLyogQU5Z WDI1ICovCisKKy8qIENNVS1PcGVuVk1TL0lQICovCisKKyNpZmRlZiBDTVVfVENQSVAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBDTVVfVENQSVAgaW1wbGllcyBUQ1BTT0NLRVQgKi8KKyNpZm5k ZWYgVENQU09DS0VUCisjZGVmaW5lIFRDUFNPQ0tFVAorI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLwor I2lmbmRlZiBUQ1BJUExJQgorI2RlZmluZSBUQ1BJUExJQgorI2VuZGlmIC8qIFRDUElQTElCICov CisjZW5kaWYgLyogQ01VX1RDUElQICovCisKKy8qIERFQyBUQ1AvSVAgZm9yIChPcGVuKVZNUywg cHJldmlvdXNseSBrbm93biBhcyBVQ1ggKi8KKworI2lmZGVmIERFQ19UQ1BJUCAgICAgICAgICAg ICAgICAgICAgICAgIC8qIERFQ19UQ1BJUCBpbXBsaWVzIFRDUFNPQ0tFVCAqLworI2lmbmRlZiBU Q1BTT0NLRVQKKyNkZWZpbmUgVENQU09DS0VUCisjZW5kaWYgLyogVENQU09DS0VUICovCisjaWZu ZGVmIFRDUElQTElCCisjZGVmaW5lIFRDUElQTElCCisjZW5kaWYgLyogVENQSVBMSUIgKi8KKyNl bmRpZiAvKiBERUNfVENQSVAgKi8KKworLyogU1JJL1RHVi9DaXNjby9Qcm9jZXNzIE11bHRpTmV0 LCBUQ1AvSVAgZm9yIFZBWC9WTVMgKi8KKworI2lmZGVmIE1VTFRJTkVUICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIE1VTFRJTkVUIGltcGxpZXMgVENQU09DS0VUICovCisjaWZuZGVmIFRDUFNP Q0tFVAorI2RlZmluZSBUQ1BTT0NLRVQKKyNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KKyNpZm5kZWYg VENQSVBMSUIKKyNkZWZpbmUgVENQSVBMSUIKKyNlbmRpZiAvKiBUQ1BJUExJQiAqLworI2lmbmRl ZiBUR1ZPUldJTiAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1VTFRJTkVUIGFuZCBXSU5UQ1Ag Ki8KKyNkZWZpbmUgVEdWT1JXSU4gICAgICAgICAgICAgICAgICAgICAgICAvKiBzaGFyZSBhIGxv dCBvZiBjb2RlLi4uICovCisjZW5kaWYgLyogVEdWT1JXSU4gKi8KKyNlbmRpZiAvKiBNVUxUSU5F VCAqLworCisvKiBXb2xsb25nb25nIFRDUC9JUCBmb3IgVkFYL1ZNUyAqLworCisjaWZkZWYgV0lO VENQICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogV0lOVENQIGltcGxpZXMgVENQU09DS0VU ICovCisjaWZuZGVmIFRDUFNPQ0tFVAorI2RlZmluZSBUQ1BTT0NLRVQKKyNlbmRpZiAvKiBUQ1BT T0NLRVQgKi8KKyNpZm5kZWYgVENQSVBMSUIKKyNkZWZpbmUgVENQSVBMSUIKKyNlbmRpZiAvKiBU Q1BJUExJQiAqLworI2lmbmRlZiBUR1ZPUldJTiAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdJ TlRDUCBhbmQgTVVMVElORVQgKi8KKyNkZWZpbmUgVEdWT1JXSU4gICAgICAgICAgICAgICAgICAg ICAgICAvKiBzaGFyZSBhIGxvdCBvZiBjb2RlLi4uICovCisjZW5kaWYgLyogVEdWT1JXSU4gKi8K KyNlbmRpZiAvKiBXSU5UQ1AgKi8KKworLyogV29sbG9uZ29uZyBUQ1AvSVAgZm9yIEFUJlQgU3lz IFYgKi8KKworI2lmZGVmIFdPTExPTkdPTkcgICAgICAgICAgICAgICAgICAgICAgIC8qIFdPTExP TkdPTkcgaW1wbGllcyBUQ1BTT0NLRVQgKi8KKyNpZm5kZWYgVENQU09DS0VUICAgICAgICAgICAg ICAgICAgICAgICAvKiBEb24ndCBjb25mdXNlIFdPTExPTkdPTkcgKi8KKyNkZWZpbmUgVENQU09D S0VUICAgICAgICAgICAgICAgICAgICAgICAvKiAod2hpY2ggaXMgZm9yIFVOSVgpIHdpdGggKi8K KyNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8gICAgICAgICAgICAgICAgICAvKiBXSU5UQ1AsIHdoaWNo IGlzIGZvciBWTVMhICovCisjZW5kaWYgLyogV09MTE9OR09ORyAqLworCisjaWZkZWYgRVhDRUxB TiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRVhDRUxBTiBpbXBsaWVzIFRDUFNPQ0tFVCAq LworI2lmbmRlZiBUQ1BTT0NLRVQKKyNkZWZpbmUgVENQU09DS0VUCisjZW5kaWYgLyogVENQU09D S0VUICovCisjZW5kaWYgLyogRVhDRUxBTiAqLworCisjaWZkZWYgSU5URVJMQU4gICAgICAgICAg ICAgICAgICAgICAgICAgLyogSU5URVJMQU4gaW1wbGllcyBUQ1BTT0NLRVQgKi8KKyNpZm5kZWYg VENQU09DS0VUCisjZGVmaW5lIFRDUFNPQ0tFVAorI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLworI2Vu ZGlmIC8qIElOVEVSTEFOICovCisKKyNpZmRlZiBCRUJPWAorI2lmbmRlZiBUQ1BTT0NLRVQKKyNk ZWZpbmUgVENQU09DS0VUCisjZW5kaWYgLyogVENQU09DS0VUICovCisjaWZuZGVmIFRDUElQTElC CisjZGVmaW5lIFRDUElQTElCCisjZW5kaWYgLyogVENQSVBMSUIgKi8KKyNkZWZpbmUgc29ja2V0 X2Vycm5vICAgIGhfZXJybm8KKyNkZWZpbmUgc29ja2V0X3JlYWQoeCx5LHopICAgICAgcmVjdih4 LHksc2l6ZW9mKGNoYXIpLHopCisjZGVmaW5lIHNvY2tldF93cml0ZSh4LHkseikgICAgIHNlbmQo eCx5LHNpemVvZihjaGFyKSx6KQorI2RlZmluZSBzb2NrZXRfaW9jdGwgICAgaW9jdGwKKyNkZWZp bmUgc29ja2V0X2Nsb3NlKHgpICAgICAgICAgY2xvc2Vzb2NrZXQoeCkKKyNpZm5kZWYgRklPTkJJ TworI2RlZmluZSBGSU9OQklPIDIKKyNlbmRpZiAvKiBGSU9OQklPICovCisjaWZuZGVmIEZJT05S RUFECisjZGVmaW5lIEZJT05SRUFEICAgICAgIDEKKyNlbmRpZiAvKiBGSU9OUkVBRCAqLworI2lm bmRlZiBTSU9DQVRNQVJLCisjZGVmaW5lIFNJT0NBVE1BUksgICAgIDMKKyNlbmRpZiAvKiBTSU9D QVRNQVJLICovCisjZW5kaWYgLyogQkVCT1ggKi8KKworI2lmZGVmIENPTU1FTlQgLyogbm8gbG9u Z2VyIHVzZWQgYnV0IG1pZ2h0IGNvbWUgaW4gaGFuZHkgYWdhaW4gbGF0ZXIuLi4gKi8KKy8qCisg IENLX1JFQUQwIGNhbiAoYW5kIHNob3VsZCkgYmUgZGVmaW5lZCBpZiBhbmQgb25seSBpZjoKKyAg KGEpIHJlYWQoZmQsJngsMCkgY2FuIGJlIHVzZWQgaGFybWxlc3NseSBvbiBhIFRDUC9JUCBzb2Nr ZXQgY29ubmVjdGlvbi4KKyAgKGIpIHJlYWQoZmQsJngsMCkgcmV0dXJucyAwIGlmIHRoZSBjb25u ZWN0aW9uIGlzIHVwLCAtMSBpZiBpdCBpcyBkb3duLgorKi8KKyNpZm5kZWYgQ0tfUkVBRDAKKyNp ZmRlZiBUQ1BTT0NLRVQKKyNpZmRlZiBTVU5PUzQxICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBJdCB3b3JrcyBpbiBTdW5PUyA0LjEgKi8KKyNkZWZpbmUgQ0tfUkVBRDAKKyNlbHNlCisjaWZk ZWYgTkVYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYW5kIE5lWFRTVEVQICovCisj ZGVmaW5lIENLX1JFQUQwCisjZW5kaWYgLyogTkVYVCAqLworI2VuZGlmIC8qIFNVTk9TNDEgKi8K KyNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KKyNlbmRpZiAvKiBDS19SRUFEMCAqLworI2VuZGlmIC8q IENPTU1FTlQgKi8KKworLyogVGVsbmV0IHByb3RvY29sICovCisKKyNpZmRlZiBUQ1BTT0NLRVQg ICAgICAgICAgICAgICAgICAgICAgICAvKiBUQ1BTT0NLRVQgaW1wbGllcyBUTkNPREUgKi8KKyNp Zm5kZWYgVE5DT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXaGljaCBtZWFucy4uLiAq LworI2RlZmluZSBUTkNPREUgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvbXBpbGUgaW4g dGVsbmV0IGNvZGUgKi8KKyNlbmRpZiAvKiBUTkNPREUgKi8KKworLyoKKyAgIFBsYXRmb3JtcyB3 aGVyZSB3ZSBtdXN0IGNhbGwgZ2V0aG9zdG5hbWUoYnVmLGxlbikgYW5kIHRoZW4KKyAgIGdldGhv c3RieW5hbWUoYnVmKSB0byBnZXQgbG9jYWwgSVAgYWRkcmVzcywgcmF0aGVyIHRoYW4gY2FsbGlu ZworICAgZ2V0aG9zdGJ5bmFtZSgiIikuCisqLworI2lmbmRlZiBDS0dITkxIT1NUCisjaWZkZWYg ZGF0YWdlbmVyYWwKKyNkZWZpbmUgQ0tHSE5MSE9TVAorI2Vsc2UKKyNpZmRlZiBTT0xBUklTCisj ZGVmaW5lIENLR0hOTEhPU1QKKyNlbHNlCisjaWZkZWYgU1VOT1M0CisjZGVmaW5lIENLR0hOTEhP U1QKKyNlbHNlCisjaWZkZWYgVU5JWFdBUkUKKyNkZWZpbmUgQ0tHSE5MSE9TVAorI2Vsc2UKKyNp ZmRlZiBTSU5JWAorI2RlZmluZSBDS0dITkxIT1NUCisjZW5kaWYgLyogU0lOSVggKi8KKyNlbmRp ZiAvKiBVTklYV0FSRSAqLworI2VuZGlmIC8qIFNVTk9TNCAqLworI2VuZGlmIC8qIFNPTEFSSVMg Ki8KKyNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLworI2VuZGlmIC8qIENLR0hOTEhPU1QgKi8KKwor I2lmbmRlZiBSTE9HQ09ERSAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdoYXQgYWJvdXQgUmxv Z2luPyAqLworI2lmbmRlZiBOT1JMT0dJTgorLyoKKyAgUmxvZ2luIGNhbiBiZSBlbmFibGVkIG9u bHkgZm9yIFVOSVggdmVyc2lvbnMgdGhhdCBoYXZlIGJvdGggU0lHVVJHCisgIChTQ08gZG9lc24n dCkgYW5kIENLX1RUR1dTSVogKE9TRi8xIGRvZXNuJ3QpLCBzbyB3ZSBkb24ndCBhc3N1bWUgdGhh dAorICBhbnkgb3RoZXJzIGhhdmUgdGhlc2Ugd2l0aG91dCB2ZXJpZnlpbmcgZmlyc3QuICBOb3Qg dGhhdCBpdCByZWFsbHkgbWFrZXMKKyAgbXVjaCBkaWZmZXJlbmNlIHNpbmNlIHlvdSBjYW4gb25s eSB1c2UgUmxvZ2luIGlmIHlvdSBhcmUgcm9vdC4uLgorKi8KKyNpZmRlZiBTVU5PUzQxCisjZGVm aW5lIFJMT0dDT0RFCisjZWxzZQorI2lmZGVmIFNPTEFSSVMKKyNkZWZpbmUgUkxPR0NPREUKKyNl bHNlCisjaWZkZWYgSFBVWDkKKyNkZWZpbmUgUkxPR0NPREUKKyNlbHNlCisjaWZkZWYgSFBVWDEw CisjZGVmaW5lIFJMT0dDT0RFCisjZWxzZQorI2lmZGVmIE9TRjQwCisjZGVmaW5lIFJMT0dDT0RF CisjZWxzZQorI2lmZGVmIE5FWFQKKyNkZWZpbmUgUkxPR0NPREUKKyNlbHNlCisjaWZkZWYgQUlY NDEKKyNkZWZpbmUgUkxPR0NPREUKKyNlbHNlCisjaWZkZWYgVU5JWFdBUkUKKyNkZWZpbmUgUkxP R0NPREUKKyNlbHNlCisjaWZkZWYgSVJJWDUxCisjZGVmaW5lIFJMT0dDT0RFCisjZWxzZQorI2lm ZGVmIElSSVg2MAorI2RlZmluZSBSTE9HQ09ERQorI2Vsc2UKKyNpZmRlZiBRTlgKKyNkZWZpbmUg UkxPR0NPREUKKyNlbHNlCisjaWZkZWYgX19saW51eF9fCisjZGVmaW5lIFJMT0dDT0RFCisjZWxz ZQorI2lmZGVmIEJTRDQ0CisjZGVmaW5lIFJMT0dDT0RFCisjZW5kaWYgLyogQlNENDQgKi8KKyNl bmRpZiAvKiBfX2xpbnV4X18gKi8KKyNlbmRpZiAvKiBRTlggKi8KKyNlbmRpZiAvKiBJUklYNjAg Ki8KKyNlbmRpZiAvKiBJUklYNTEgKi8KKyNlbmRpZiAvKiBVTklYV0FSRSAqLworI2VuZGlmIC8q IEFJWDQxICovCisjZW5kaWYgLyogTkVYVCAqLworI2VuZGlmIC8qIE9TRjQwICovCisjZW5kaWYg LyogSFBVWDEwICovCisjZW5kaWYgLyogSFBVWDkgKi8KKyNlbmRpZiAvKiBTT0xBUklTICovCisj ZW5kaWYgLyogU1VOT1M0MSAqLworI2VuZGlmIC8qIE5PUkxPR0lOICovCisjaWZkZWYgVk1TICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVk1TICovCisjZGVmaW5lIFJMT0dDT0RFCisj ZW5kaWYgLyogVk1TICovCisjZW5kaWYgLyogUkxPR0NPREUgKi8KKyNlbmRpZiAvKiBUQ1BTT0NL RVQgKi8KKworI2lmZGVmIFROQ09ERQorLyoKKyAgVGVsbmV0IGxvY2FsLWVjaG8gYnVmZmVyLCB1 c2VkIGZvciBzYXZpbmcgdXAgdXNlciBkYXRhIHRoYXQgY2FuJ3QgYmUKKyAgcHJvcGVybHkgZGlz cGxheWVkIGFuZC9vciBldmFsdWF0ZWQgdW50aWwgcGVuZGluZyBUZWxuZXQgbmVnb3RpYXRpb25z IGFyZQorICBjb21wbGV0ZS4gIFRUTEVCVUYgaXMgZGVmaW5lZCBmb3IgcGxhdGZvcm1zIChsaWtl IFVOSVgpIHdoZXJlIG5ldCBpL28gaXMKKyAgZG9uZSBieSB0aGUgc2FtZSByb3V0aW5lcyB0aGF0 IGRvIHNlcmlhbCBpL28gKGluIHdoaWNoIGNhc2UgdGhlIHJlbGV2YW50CisgIGNvZGUgZ29lcyBp bnRvIHRoZSBjaz90aW8uYyBtb2R1bGUsIGluIHRoZSB0dGluYygpLCB0dGNoaygpLCBldGMsIHJv dXRpbmVzKTsKKyAgTkVUTEVUQlVGIGlzIGRlZmluZWQgZm9yIHBsYXRmb3JtcyAobGlrZSBWTVMp IHRoYXQgdXNlIGRpZmZlcmVudCBBUElzIGZvcgorICBuZXR3b3JrIGFuZCBzZXJpYWwgaS9vLCBh bmQgZW5hYmxlcyB0aGUgY29waWVzIG9mIHRoZSBzYW1lIHJvdXRpbmVzIHRoYXQKKyAgYXJlIGlu IGNrY25ldC5jLgorKi8KKyNpZm5kZWYgVFRMRUJVRgorI2lmZGVmIFVOSVgKKyNkZWZpbmUgVFRM RUJVRgorI2Vsc2UKKyNpZmRlZiBkYXRhZ2VuZXJhbAorI2RlZmluZSBUVExFQlVGCisjZW5kaWYg LyogZGF0YWdlbmVyYWwgKi8KKyNlbmRpZiAvKiBVTklYICovCisjZW5kaWYgLyogVFRMRUJVRiAq LworCisjaWZuZGVmIE5FVExFQlVGCisjaWZkZWYgVk1TCisjZGVmaW5lIE5FVExFQlVGCisjZW5k aWYgLyogVk1TICovCisjZW5kaWYgLyogTkVUTEVCVUYgKi8KKyNlbmRpZiAvKiBUTkNPREUgKi8K KworI2lmZGVmIFNVTlgyNSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNVTlgyNSBpbXBs aWVzIFRDUFNPQ0tFVCAqLworI2lmbmRlZiBUQ1BTT0NLRVQgICAgICAgICAgICAgICAgICAgICAg IC8qIEJ1dCBkb2Vzbid0IGltcGx5IFROQ09ERSAqLworI2RlZmluZSBUQ1BTT0NLRVQKKyNlbmRp ZiAvKiBUQ1BTT0NLRVQgKi8KKyNlbmRpZiAvKiBTVU5YMjUgKi8KKworI2lmbmRlZiBUQ1BTT0NL RVQKKyNpZm5kZWYgTk9fRE5TX1NSVgorI2RlZmluZSBOT19ETlNfU1JWCisjZW5kaWYgLyogTk9f RE5TX1NSViAqLworI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLworCisvKiBUaGlzIGlzIGFub3RoZXIg VENQU09DS0VUIHNlY3Rpb24uLi4gKi8KKworI2lmZGVmIFRDUFNPQ0tFVAorI2lmbmRlZiBORVRD T05OICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRDUFNPQ0tFVCBpbXBsaWVzIE5FVENPTk4g Ki8KKyNkZWZpbmUgTkVUQ09OTgorI2VuZGlmIC8qIE5FVENPTk4gKi8KKworI2lmbmRlZiBOT19E TlNfU1JWCisjaWZkZWYgTk9MT0NBTAorI2RlZmluZSBOT19ETlNfU1JWCisjZW5kaWYgLyogTk9M T0NBTCAqLworI2lmZGVmIE9TMk9OTFkKKyNkZWZpbmUgTk9fRE5TX1NSVgorI2VuZGlmIC8qIE9T Mk9OTFkgKi8KKyNpZmRlZiBOVAorI2lmZGVmIF9NX1BQQworI2RlZmluZSBOT19ETlNfU1JWCisj ZW5kaWYgLyogX01fRE5TICovCisjZW5kaWYgLyogTk9fRE5TX1NSViAqLworI2lmZGVmIFZNUwor I2RlZmluZSBOT19ETlNfU1JWCisjZW5kaWYgLyogVk1TICovCisjaWZkZWYgU1RSQVRVUworI2Rl ZmluZSBOT19ETlNfU1JWCisjZW5kaWYgLyogU1RSQVRVUyAqLworI2lmZGVmIGRhdGFnZW5lcmFs CisjZGVmaW5lIE5PX0ROU19TUlYKKyNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLworI2lmZGVmIHVs dHJpeAorI2RlZmluZSBOT19ETlNfU1JWCisjZW5kaWYgLyogdWx0cml4ICovCisjaWZkZWYgTkVY VAorI2RlZmluZSBOT19ETlNfU1JWCisjZW5kaWYgLyogTkVYVCAqLworI2VuZGlmIC8qIE5PX0RO U19TUlYgKi8KKworI2lmbmRlZiBDS19ETlNfU1JWICAgICAgICAgICAgICAgICAgICAgIC8qIFVz ZSBETlMgU1JWIHJlY29yZHMgdG8gZGV0ZXJtaW5lICovCisjaWZuZGVmIE5PX0ROU19TUlYgICAg ICAgICAgICAgICAgICAgICAgLyogaG9zdCBhbmQgcG9ydHMgKi8KKyNkZWZpbmUgQ0tfRE5TX1NS VgorI2VuZGlmIC8qIE5PX0ROU19TUlYgKi8KKyNlbmRpZiAvKiBDS19ETlNfU1JWICovCisKKyNp Zm5kZWYgTk9MSVNURU4gICAgICAgICAgICAgICAgICAgICAgICAvKiBzZWxlY3QoKSBpcyByZXF1 aXJlZCB0byBzdXBwb3J0ICovCisjaWZuZGVmIFNFTEVDVCAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogaW5jb21pbmcgY29ubmVjdGlvbnMuICovCisjaWZuZGVmIFZNUworI2lmbmRlZiBPUzIK KyNkZWZpbmUgTk9MSVNURU4KKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKyNl bmRpZiAvKiBTRUxFQ1QgKi8KKyNlbmRpZiAvKiBOT0xJU1RFTiAqLworCisvKiBCU0Qgc29ja2V0 cyBsaWJyYXJ5IGhlYWRlciBmaWxlcyAqLworCisjaWZkZWYgVk1TCisvKgorICBCZWNhdXNlIGJ6 ZXJvKCkgYW5kIGJjb3B5KCkgYXJlIG5vdCBwb3J0YWJsZSBhbW9uZyBWTVMgdmVyc2lvbnMsCisg IG9yIGNvbXBpbGVycywgb3IgVENQL0lQIHByb2R1Y3RzLCBldGMuCisqLworI2lmbmRlZiBiemVy bworI2RlZmluZSBiemVybyhzLG4pIG1lbXNldChzLDAsbikKKyNlbmRpZiAvKiBiemVybyAqLwor I2lmbmRlZiBiY29weQorI2RlZmluZSBiY29weShoLGEsbCkgbWVtY3B5KGEsaCxsKQorI2VuZGlm IC8qIGJjb3B5ICovCisjZW5kaWYgLyogVk1TICovCisKKyNpZmRlZiBIUFVYNgorLyogVGhlc2Ug YXJlIG1pc3NpbmcgaW4gSFAtVVggNi54eCAqLworI2lmbmRlZiBiemVybworI2RlZmluZSBiemVy byhzLG4pIG1lbXNldChzLDAsbikKKyNlbmRpZiAvKiBiemVybyAqLworI2lmbmRlZiBiY29weQor I2RlZmluZSBiY29weShoLGEsbCkgbWVtY3B5KGEsaCxsKQorI2VuZGlmIC8qIGJjb3B5ICovCisj ZW5kaWYgLyogSFBVWDYgKi8KKworI2lmZGVmIFVOSVggICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIFVOSVggc2VjdGlvbiAqLworCisjaWZkZWYgU1ZSNAorLyoKKyAgVGhlc2Ugc3VnZ2Vz dGVkIGJ5IFJvYiBIZWFsZXksIHJoZWFsZXlAa2FzLmhlbGlvcy5tbi5vcmcsIHRvIGF2b2lkCisg IGJ1Z3MgaW4gQmVya2VsZXkgY29tcGF0aWJpbGl0eSBsaWJyYXJ5IG9uIFN5cyBWIFI0IHN5c3Rl bXMsIGJ1dCB1bnRlc3RlZAorICBieSBtZSAoZmRjKS4gIFJlbW92ZSB0aGlzIGJpdCBpZiBpdCBn aXZlcyB5b3UgdHJvdWJsZS4KKyAgKExhdGVyIGNvcnJlY3RlZCBieSBNYXJjIEJvdWNoZXIgPG1i b3VjaGVyQGlyby51bW9udHJlYWwuY2E+IGJlY2F1c2UKKyAgYnplcm8vYmNvcHkgYXJlIG5vdCBh cmd1bWVudC1jb21wYXRpYmxlIHdpdGggbWVtc2V0L21lbWNweXxtZW1tb3ZlLikKKyovCisjaWZu ZGVmIGJ6ZXJvCisjZGVmaW5lIGJ6ZXJvKHMsbikgbWVtc2V0KHMsMCxuKQorI2VuZGlmCisjaWZk ZWYgU09MQVJJUworI2lmZGVmIFNVTlgyNQorI3VuZGVmIGJ6ZXJvCisvKgorICBXT1VMRCBZT1Ug QkVMSUVWRS4uLiBUaGF0IHRoZSBTb2xhcmlzIFguMjUgL29wdC9TVU5XY29tbS9saWIvbGlic29j a3gyNQorICBsaWJyYXJ5IHJlZmVyZW5jZXMgYnplcm8sIGV2ZW4gdGhvdWdoIHRoZSB1c2Ugb2Yg Ynplcm8gaXMgZm9yYmlkZGVuIGluCisgIFNvbGFyaXM/ICBMb29rIGZvciB0aGUgZnVuY3Rpb24g ZGVmaW5pdGlvbiBpbiBja2NuZXQuYy4KKyovCitfUFJPVE9UWVAoIHZvaWQgYnplcm8sIChjaGFy ICosIGludCkgKTsKKyNlbmRpZiAvKiBTVU5YMjUgKi8KKyNpZm5kZWYgYmNvcHkKKyNkZWZpbmUg YmNvcHkoaCxhLGwpIG1lbWNweShhLGgsbCkKKyNlbmRpZgorI2Vsc2UKKyNpZm5kZWYgYmNvcHkK KyNkZWZpbmUgYmNvcHkoaCxhLGwpIG1lbW1vdmUoYSxoLGwpCisjZW5kaWYKKyNlbmRpZiAvKiBT T0xBUklTICovCisjZWxzZSAvKiAhU1ZSNCAqLworI2lmZGVmIFBUWCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIFNlcXVlbnQgRFlOSVggUFRYIDEuMyAqLworI2lmbmRlZiBiemVybwor I2RlZmluZSBiemVybyhzLG4pIG1lbXNldChzLDAsbikKKyNlbmRpZgorI2lmbmRlZiBiY29weQor I2RlZmluZSBiY29weShoLGEsbCkgbWVtY3B5KGEsaCxsKQorI2VuZGlmCisjZW5kaWYgLyogUFRY ICovCisjZW5kaWYgLyogU1ZSNCAqLworCisjaWZkZWYgSU5URVJMQU4gICAgICAgICAgICAgICAg ICAgICAgICAgLyogUmFjYWwtSW50ZXJsYW4gVENQL0lQICovCisjaW5jbHVkZSA8aW50ZXJsYW4v c29ja2V0Lmg+CisjaW5jbHVkZSA8aW50ZXJsYW4vaWxfdHlwZXMuaD4KKyNpbmNsdWRlIDxpbnRl cmxhbi90ZWxuZXQuaD4KKyNpbmNsdWRlIDxpbnRlcmxhbi9pbF9lcnJuby5oPgorI2luY2x1ZGUg PGludGVybGFuL2luLmg+CisjaW5jbHVkZSA8aW50ZXJsYW4vdGVsbmV0Lmg+ICAgICAgICAgICAg LyogV2h5IHR3aWNlID8gPyA/ICovCisjZWxzZSAvKiBOb3QgSW50ZXJsYW4gKi8KKyNpZmRlZiBC RUJPWAorI2luY2x1ZGUgPHNvY2tldC5oPgorI2Vsc2UgLyogTm90IEJFQk9YICovICAgICAgICAg ICAgICAgICAgIC8qIE5vcm1hbCBCU0QgVENQL0lQIGxpYnJhcnkgKi8KKyNpZmRlZiBDT01NRU5U CisjaWZuZGVmIEhQVVgKKyNpbmNsdWRlIDxhcnBhL3RlbG5ldC5oPgorI2VuZGlmIC8qIEhQVVgg Ki8KKyNlbmRpZiAvKiBDT01NRU5UICovCisjaWZkZWYgU0NPMjM0CisjaW5jbHVkZSA8c3lzL2Vy cm5vLnRjcC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy50Y3AuaD4KKyNlbmRpZiAvKiBTQ08yMzQg Ki8KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaWZkZWYgV09MTE9OR09ORworI2luY2x1ZGUg PHN5cy9pbi5oPgorI2Vsc2UKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaWZuZGVmIFNWNjhS M1Y2ICAgICAgICAgICAgICAgIC8qIChtYXliZSB0aGlzIHNob3VsZCBiZSBTVlIzIGluIGdlbmVy YWwpICovCisjaW5jbHVkZSA8bmV0aW5ldC90Y3AuaD4gICAgICAgIC8qIEFkZGVkIEp1bmUgMjAw MSAqLworI2VuZGlmIC8qIFNWNjhSM1Y2ICovCisjZW5kaWYgLyogV09MTE9OR09ORyAqLworI2Vu ZGlmIC8qIEJFQk9YICovCisjZW5kaWYgLyogSU5URVJMQU4gKi8KKworI2lmbmRlZiBFWENFTEFO CisjaW5jbHVkZSA8bmV0ZGIuaD4KKyNpZm5kZWYgSU5URVJMQU4KKyNpZmRlZiBXT0xMT05HT05H CisjZGVmaW5lIG1pbm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRG8gbm90IGluY2x1 ZGUgPHN5cy9tYWNyb3MuaD4gKi8KKyNpbmNsdWRlIDxzeXMvaW5ldC5oPgorI2Vsc2UKKyNpZm5k ZWYgT1hPUworI2lmbmRlZiBIUFVYCisjaWZuZGVmIEJFQk9YCisjaW5jbHVkZSA8YXJwYS9pbmV0 Lmg+CisjZW5kaWYgLyogQkVCT1ggKi8KKyNlbmRpZiAvKiBIUFVYICovCisjZWxzZSAvKiBPWE9T ICovCisvKiBJbiB0b28gbWFueSByZWxlYXNlcyBvZiBYL09TLCA8YXJwYS9pbmV0Lmg+IGRlY2xh cmVzIGluZXRfYWRkcigpIGFzCisgKiBgYHN0cnVjdCBpbl9hZGRyJycuICBUaGlzIGlzIGRlZmlu aXRpdmVseSB3cm9uZywgYW5kIGNvdWxkIGNhdXNlCisgKiBjb3JlIGR1bXBzLiAgSW5zdGVhZCBv ZiBpbmNsdWRpbmcgdGhhdCBiYWQgZmlsZSwgaW5ldF9hZGRyKCkgaXMKKyAqIGNvcnJlY3RseSBk ZWNsYXJlZCBoZXJlLiAgT2YgY291cnNlLCBhbGwgdGhlIGRlY2xhcmF0aW9ucyBkb25lIHRoZXJl CisgKiBoYXMgYmVlbiBjb3BpZWQgaGVyZS4KKyAqLwordW5zaWduZWQgbG9uZyBpbmV0X2FkZHIo KTsKK2NoYXIgICAgKmluZXRfbnRvYSgpOworc3RydWN0ICBpbl9hZGRyIGluZXRfbWFrZWFkZHIo KTsKK3Vuc2lnbmVkIGxvbmcgaW5ldF9uZXR3b3JrKCk7CisjZW5kaWYgLyogT1hPUyAqLworI2Vu ZGlmIC8qIFdPTExPTkdPTkcgKi8KKyNlbmRpZiAvKiBJTlRFUkxBTiAqLworI2VuZGlmIC8qIEVY Q0VMQU4gKi8KKworI2lmZGVmIEVYQ0VMQU4gICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEV4 Y2VsYW4gVENQL0lQICovCisjaWZuZGVmIGJ6ZXJvCisjZGVmaW5lIGJ6ZXJvKHMsbikgbWVtc2V0 KHMsMCxuKQorI2VuZGlmIC8qIGJ6ZXJvICovCisjaWZuZGVmIGJjb3B5CisjZGVmaW5lIGJjb3B5 KGgsYSxsKSBtZW1jcHkoYSxoLGwpCisjZW5kaWYgLyogYmNvcHkgKi8KKyNpbmNsdWRlIDxleF9l cnJuby5oPgorI2VuZGlmIC8qIEVYQ0VMQU4gKi8KKworI2lmZGVmIEkzODZJWCAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIEludGVyYWN0aXZlIFN5cyBWIFIzIG5ldHdvcmsuICovCisvKiAj ZGVmaW5lIFRFTE9QVFMgKi8gICAgICAgICAgICAgICAgICAgLyogVGhpcyBtaWdodCBuZWVkIGRl ZmluaW5nLiAqLworI2RlZmluZSBPUkdfTkxPTkcgRU5BTUVUT09MT05HICAgICAgICAgIC8qIFJl c29sdmUgY29uZmxpY3Rpbmcgc3ltYm9scyAqLworI3VuZGVmIEVOQU1FVE9PTE9ORyAgICAgICAg ICAgICAgICAgICAgIC8qIGluIDxlcnJuby5oPiBhbmQgPG5ldC9lcnJuby5oPiAqLworI2RlZmlu ZSBPUkdfTkVNUFRZIEVOT1RFTVBUWQorI3VuZGVmIEVOT1RFTVBUWQorI2luY2x1ZGUgPG5ldC9l cnJuby5oPgorI3VuZGVmIEVOQU1FVE9PTE9ORworI2RlZmluZSBFTkFNRVRPT0xPTkcgT1JHX05M T05HCisjdW5kZWYgRU5PVEVNUFRZCisjZGVmaW5lIEVOT1RFTVBUWSBPUkdfTkVNUFRZCisjaW5j bHVkZSA8bmV0aW5ldC90Y3AuaD4gICAgICAgICAgICAgICAgLyogZm9yIGluZXRfYWRkcigpICov CisjZW5kaWYgLyogSTM4NklYICovCisvKgorICBEYXRhIHR5cGUgb2YgdGhlIGluZXRfYWRkcigp IGZ1bmN0aW9uLi4uCisgIFdlIGRlZmluZSBJTkFERFJYIGlmIGl0IGlzIG9mIHR5cGUgc3RydWN0 IGluYWRkci4KKyAgSWYgaXQgaXMgdW5kZWZpbmVkLCB1bnNpZ25lZCBsb25nIGlzIGFzc3VtZWQu CisgIExvb2sgYXQgPGFycGEvaW5ldC5oPiB0byBmaW5kIG91dC4gIFRoZSBmb2xsb3dpbmcga25v d24gY2FzZXMgYXJlCisgIGhhbmRsZWQgaGVyZS4gIE90aGVyIHN5c3RlbXMgdGhhdCBuZWVkIGl0 IGNhbiBiZSBhZGRlZCBoZXJlLCBvciBlbHNlCisgIC1ESU5BRERSWCBjYW4gYmUgaW5jbHVkZWQg aW4gdGhlIENGTEFHUyBvbiB0aGUgY2MgY29tbWFuZCBsaW5lLgorKi8KKyNpZm5kZWYgTk9JTkFE RFJYCisjaWZkZWYgRFUyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogREVDIFVsdHJp eCAyLjAgKi8KKyNkZWZpbmUgSU5BRERSWAorI2VuZGlmIC8qIERVMiAqLworI2VuZGlmIC8qIE5P SU5BRERSWCAqLworCisjZWxzZSAvKiBOb3QgVU5JWCAqLworCisjaWZkZWYgVk1TICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogKE9wZW4pVk1TIHNlY3Rpb24gKi8KKworI2lmZGVmIE1V TFRJTkVUICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRHViBNdWx0aU5ldCAqLworLyoKKyAg SW4gQy1LZXJtaXQgNy4wIEJldGEuMDggd2Ugc3RhcnRlZCBnZXR0aW5nIHNjYWRzIG9mIGNvbXBp bGUgdGltZSB3YXJuaW5ncworICBpbiBNdWx0aW5ldCBidWlsZHM6ICJibGFoIiBpcyBpbXBsaWNp dGx5IGRlY2xhcmVkIGFzIGEgZnVuY3Rpb24sIHdoZXJlIGJsYWgKKyAgaXMgc29ja2V0X3JlYWQv d3JpdGUvY2xvc2UsIG50b2hzLCBodG9ucywgZ2V0cGVlcm5hbWUsIGFjY2VwdCwgc2VsZWN0LCBl dGMuCisgIEkgaGF2ZSBubyBpZGVhIHdoeSAtLSB0aGVzZSByb3V0aW5lcyBhcmUgZGVjbGFyZWQg aW4gdGhlIGhlYWRlciBmaWxlcyBiZWxvdywKKyAgYW5kIHRoZSBpbmNsdWRlcyBoYXZlbid0IGNo YW5nZWQuICBUaGUgZXhlY3V0YWJsZSBzdGlsbCBzZWVtcyB0byB3b3JrIE9LLgorICBNZXNzaW5n IHdpdGggdGhlIG9yZGVyIG9mIHRoZSBmb2xsb3dpbmcgaW5jbHVkZXMgaXMgZGlzYXN0cm91cy4K KyovCisjaWZkZWYgTVVMVElORVRfTk9fUFJPVE9UWVBFUworI3VuZGVmIE1VTFRJTkVUX05PX1BS T1RPVFlQRVMKKyNlbmRpZiAvKiBNVUxUSU5FVF9OT19QUk9UT1RZUEVTICovCisKKyNpZmRlZiAg X19jcGx1c3BsdXMKKyN1bmRlZiAgX19jcGx1c3BsdXMKKyNlbmRpZiAvKiAgX19jcGx1c3BsdXMg Ki8KKworI2luY2x1ZGUgIm11bHRpbmV0X3Jvb3Q6W211bHRpbmV0LmluY2x1ZGVdZXJybm8uaCIK KyNpbmNsdWRlICJtdWx0aW5ldF9yb290OlttdWx0aW5ldC5pbmNsdWRlLnN5c110eXBlcy5oIgor I2luY2x1ZGUgIm11bHRpbmV0X3Jvb3Q6W211bHRpbmV0LmluY2x1ZGUuc3lzXXNvY2tldC5oIgor I2luY2x1ZGUgIm11bHRpbmV0X3Jvb3Q6W211bHRpbmV0LmluY2x1ZGVdbmV0ZGIuaCIKKyNpbmNs dWRlICJtdWx0aW5ldF9yb290OlttdWx0aW5ldC5pbmNsdWRlLm5ldGluZXRdaW4uaCIKKyNpbmNs dWRlICJtdWx0aW5ldF9yb290OlttdWx0aW5ldC5pbmNsdWRlLmFycGFdaW5ldC5oIgorI2luY2x1 ZGUgIm11bHRpbmV0X3Jvb3Q6W211bHRpbmV0LmluY2x1ZGUuc3lzXWlvY3RsLmgiCisKKyNpZmRl ZiBDT01NRU5UCisvKgorICBObyBsb25nZXIgbmVlZGVkIGJlY2F1c2Ugbm93IGJ6ZXJvL2Jjb3B5 IGFyZSBtYWNyb3MgZGVmaW5lZCBhcworICBtZW1zZXQvbWVtbW92ZSBpbiBhbGwgVk1TIGJ1aWxk cy4KKyovCisvKgorICBXZSBzaG91bGQgYmUgYWJsZSB0byBwaWNrIHRoZXNlIHVwIGZyb20gPHN0 cmluZ3MuaD4gYnV0IGl0J3MKKyAgbm90IHBvcnRhYmxlIGJldHdlZW4gVkFYQyBhbmQgREVDQy4g IEFuZCBldmVuIHdpdGggREVDQyA1Lnggd2UgaGF2ZSBhCisgIGRpZmZlcmVuY2UgYmV0d2VlbiBW QVggYW5kIEFscGhhLiAgV2UgZ2V0IHdhcm5pbmdzIGhlcmUgb24gdGhlIFZBWAorICB3aXRoIERF Q0MgNS42LTAwMyBidXQgdGhleSBhcmUgbm90IGZhdGFsLgorKi8KKyNpZm5kZWYgX19ERUNDX1ZF UgorI2lmbmRlZiBiemVybworX1BST1RPVFlQKCB2b2lkIGJ6ZXJvLCAoY2hhciAqLCBpbnQpICk7 CisjZW5kaWYgLyogYnplcm8gKi8KKyNpZm5kZWYgYmNvcHkKK19QUk9UT1RZUCggdm9pZCBiY29w eSwgKGNoYXIgKiwgY2hhciAqLCBpbnQpICk7CisjZW5kaWYgLyogYmNvcHkgKi8KKyNlbmRpZiAv KiBfX0RFQ0NfVkVSICovCisjZW5kaWYgLyogQ09NTUVOVCAqLworCisjaWZkZWYgX19ERUNDCisv KgorICAgSWYgY29tcGlsaW5nIHVuZGVyIERFQyBDIHRoZSBzb2NrZXQgY2FsbHMgbXVzdCBub3Qg YmUgcHJlZml4ZWQgd2l0aAorICAgREVDQyQuICBUaGlzIGlzIGRvbmUgYnkgdXNpbmcgdGhlIGNv bXBpbGVyIHN3aXRjaCAvUHJlZml4PUFuc2lfQzg5LgorICAgSG93ZXZlciwgdGhpcyBjYXVzZXMg c29tZSBjYWxscyB0aGF0IHNob3VsZCBiZSBwcmVmaXhlZCB0byBub3QgYmUKKyAgICh3aGljaCBJ IHRoaW5rIGlzIGEgYnVnIGluIHRoZSBjb21waWxlciAtIEkndmUgYmVlbiB0b2xkIHRoZXNlIGNh bGxzCisgICBhcmUgcHJlc2VudCBpbiBBTlNJIGNvbXBpbGVycykuICBBdCBhbnkgcmF0ZSwgc3Vj aCBjYWxscyBhcmUgZml4ZWQKKyAgIGhlcmUgYnkgZXhwbGljaXRseSBwcmVmaXhpbmcgdGhlbS4K KyovCisjaWZkZWYgQ09NTUVOVAorLyoKKyAgIEJ1dCB0aGlzIGNhdXNlcyBlcnJvcnMgd2l0aCBW TVMgNi4yIC8gREVDIEMgNS4zLTAwNiAvIE11bHRpTmV0IDQuMEEgb24KKyAgIGEgVkFYIChidXQg bm90IG9uIGFuIEFscGhhKS4gIFNvIG5vdyB3aGF0IGhhcHBlbnMgaWYgd2Ugc2tpcCBkb2luZyB0 aGlzPworKi8KKyNkZWZpbmUgY2xvc2UgZGVjYyRjbG9zZQorI2RlZmluZSBhbGFybSBkZWNjJGFs YXJtCisjZW5kaWYgLyogQ09NTUVOVCAqLworI2VuZGlmIC8qIF9fREVDQyAqLworCisjZWxzZSAv KiBOb3QgTVVMVElORVQgKi8KKworI2lmZGVmIFdJTlRDUCAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIFdJTi9UQ1AgPSBQYXRoV2F5IGZvciBWTVMgKi8KKyNpZmRlZiBPTERfVFdHCisjaW5j bHVkZSAidHdnJHRjcDpbbmV0ZGlzdC5pbmNsdWRlLnN5c11lcnJuby5oIgorI2luY2x1ZGUgInR3 ZyR0Y3A6W25ldGRpc3QuaW5jbHVkZS5zeXNddHlwZXMyLmgiIC8qIGF2b2lkIHNvbWUgZHVwbGlj YXRlcyAqLworI2Vsc2UKKyNpbmNsdWRlICJ0d2ckdGNwOltuZXRkaXN0LmluY2x1ZGVdc29ja2V0 X2FsaWFzZXMuaCIKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgInR3ZyR0Y3A6W25ldGRp c3QuaW5jbHVkZS5zeXNddHlwZXMuaCIKKyNlbmRpZiAvKiBPTERfVFdHICovCisjaW5jbHVkZSAi dHdnJHRjcDpbbmV0ZGlzdC5pbmNsdWRlLnN5c11zb2NrZXQuaCIKKyNpbmNsdWRlICJ0d2ckdGNw OltuZXRkaXN0LmluY2x1ZGVdbmV0ZGIuaCIKKyNpbmNsdWRlICJ0d2ckdGNwOltuZXRkaXN0Lmlu Y2x1ZGUuc3lzXWRvbWFpbi5oIgorI2luY2x1ZGUgInR3ZyR0Y3A6W25ldGRpc3QuaW5jbHVkZS5z eXNdcHJvdG9zdy5oIgorI2luY2x1ZGUgInR3ZyR0Y3A6W25ldGRpc3QuaW5jbHVkZS5uZXRpbmV0 XWluLmgiCisjaW5jbHVkZSAidHdnJHRjcDpbbmV0ZGlzdC5pbmNsdWRlLmFycGFdaW5ldC5oIgor I2luY2x1ZGUgInR3ZyR0Y3A6W25ldGRpc3QuaW5jbHVkZS5zeXNdaW9jdGwuaCIKKworI2Vsc2Ug LyogTm90IFdJTlRDUCAqLworCisjaWZkZWYgREVDX1RDUElQCisjaWZkZWYgVUNYNTAKKyNpZm5k ZWYgSUZfRE9UX0gKKyNkZWZpbmUgSUZfRE9UX0gKKyNlbmRpZiAvKiAgSUZfRE9UX0ggKi8KKyNl bmRpZiAvKiBVQ1g1MCAqLworCisjaWZkZWYgSUZfRE9UX0gKKyNpbmNsdWRlIDxpZi5oPiAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBOZWVkZWQgdG8gcHV0IHVwIHVfaW50IHR5cGVkZWYgKi8K KyNlbHNlCisjaWZkZWYgTkVFRFVJTlQKK3R5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50OworI2Vu ZGlmIC8qIE5FRURVSU5UICovCisjZW5kaWYgLyogSUZfRE9UX0ggKi8KKworI2luY2x1ZGUgPGlu Lmg+CisjaWZkZWYgVk1TCisjaW5jbHVkZSA8aW5ldC5oPgkJCS8qIChTTVMgMjAwNy8wMi8xNSkg Ki8KKyNlbmRpZgkvKiBWTVMgKi8KKyNpbmNsdWRlIDxuZXRkYi5oPgorI2luY2x1ZGUgPHNvY2tl dC5oPgorI2luY2x1ZGUgImNrdmlvYy5oIgorI2RlZmluZSBzb2NrZXRfZXJybm8gZXJybm8KKwor I2lmZGVmIENPTU1FTlQKKy8qCisgIE5vIGxvbmdlciBuZWVkZWQgYmVjYXVzZSBub3cgYnplcm8v YmNvcHkgYXJlIG1hY3JvcyBkZWZpbmVkIGFzCisgIG1lbXNldC9tZW1tb3ZlIGluIGFsbCBWTVMg YnVpbGRzLgorKi8KKy8qCisgIFRyYW5zbGF0aW9uOiBJbiA8c3RyaW5ncy5oPiwgd2hpY2ggZXhp c3RzIG9ubHkgZm9yIERFQ0MgPj0gNS4yLCBiemVybygpCisgIGFuZCBiY29weSgpIGFyZSBkZWNs YXJlZCBvbmx5IGZvciBPcGVuVk1TID49IDcuMC4gIFRoaXMgc3RpbGwgbWlnaHQgbmVlZAorICBh ZGp1c3RtZW50IGZvciBERUNDIDUuMCBhbmQgaGlnaGVyLgorKi8KKyNpZmRlZiBfX0RFQ0NfVkVS CisjaWZkZWYgVk1TVjcwCisvKgorICBOb3RlOiB5b3UgY2FuJ3QgdXNlICIjaWYgKF9fVk1TX1ZF Uj49NzAwMDAwMDApIiBiZWNhdXNlIHRoYXQgaXMgbm90CisgIHBvcnRhYmxlIGFuZCBraWxscyBu b24tVk1TIGJ1aWxkcy4KKyovCisjaW5jbHVkZSA8c3RyaW5ncy5oPgorI2Vsc2UKKyNpZm5kZWYg Ynplcm8KKyNkZWZpbmUgYnplcm8ocyxuKSBtZW1zZXQocywwLG4pCisjZW5kaWYKKyNpZm5kZWYg YmNvcHkKKyNkZWZpbmUgYmNvcHkoaCxhLGwpIG1lbW1vdmUoYSxoLGwpCisjZW5kaWYKKyNlbmRp ZiAvKiBWTVNWNzAgKi8KKyNlbHNlCisjaWZuZGVmIGJ6ZXJvCisjZGVmaW5lIGJ6ZXJvKHMsbikg bWVtc2V0KHMsMCxuKQorI2VuZGlmCisjaWZuZGVmIGJjb3B5CisjZGVmaW5lIGJjb3B5KGgsYSxs KSBtZW1tb3ZlKGEsaCxsKQorI2VuZGlmCisjZW5kaWYgLyogX19ERUNDX1ZFUiAqLworI2VuZGlm IC8qIENPTU1FTlQgKi8KKworI2RlZmluZSBzb2NrZXRfcmVhZCAgICAgcmVhZAorI2RlZmluZSBz b2NrZXRfd3JpdGUgICAgd3JpdGUKKyNkZWZpbmUgc29ja2V0X2lvY3RsICAgIGlvY3RsCisjZGVm aW5lIHNvY2tldF9jbG9zZSAgICBjbG9zZQorCisjaWZkZWYgX19ERUNDCitpbnQgaW9jdGwgKGlu dCBkLCBpbnQgcmVxdWVzdCwgdm9pZCAqYXJncCk7CisjZWxzZQoraW50IGlvY3RsIChpbnQgZCwg aW50IHJlcXVlc3QsIGNoYXIgKmFyZ3ApOworI2VuZGlmIC8qIERFQ0MgKi8KKy8qCisgIFVDWCBz dXBwb3J0cyBzZWxlY3QoKSwgYnV0IGRvZXMgbm90IHByb3ZpZGUgdGhlIG5lZWRlZCBzeW1ib2wg YW5kCisgIHN0cnVjdHVyZSBkZWZpbml0aW9ucyBpbiBhbnkgaGVhZGVyIGZpbGUsIHNvIC4uLgor Ki8KKyNpbmNsdWRlIDx0eXBlcy5oPgorI2lmbmRlZiBOQkJZCisvKi0KKyAqIENvcHlyaWdodCAo YykgMTk4MiwgMTk4NiwgMTk5MSwgMTk5MworICogICAgICBUaGUgUmVnZW50cyBvZiB0aGUgVW5p dmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq IDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ug b2YgdGhpcyBzb2Z0d2FyZQorICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93 bGVkZ2VtZW50OgorICogICAgICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxv cGVkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mCisgKiAgICAgIENhbGlmb3JuaWEsIEJlcmtlbGV5IGFu ZCBpdHMgY29udHJpYnV0b3JzLgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVy c2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2Vk IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2Fy ZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVU T1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UK KyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09O VFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElO Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP T0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV U0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFks IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB TlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiAgICAgIEAo Iyl0eXBlcy5oICAgICA4LjEgKEJlcmtlbGV5KSA2LzIvOTMKKyAqLworCisjZGVmaW5lIE5CQlkg ICAgOCAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBiaXRzIGluIGEgYnl0ZSAqLworCisvKgor ICogU2VsZWN0IHVzZXMgYml0IG1hc2tzIG9mIGZpbGUgZGVzY3JpcHRvcnMgaW4gbG9uZ3MuICBU aGVzZSBtYWNyb3MKKyAqIG1hbmlwdWxhdGUgc3VjaCBiaXQgZmllbGRzICh0aGUgZmlsZXN5c3Rl bSBtYWNyb3MgdXNlIGNoYXJzKS4KKyAqIEZEX1NFVFNJWkUgbWF5IGJlIGRlZmluZWQgYnkgdGhl IHVzZXIsIGJ1dCB0aGUgZGVmYXVsdCBoZXJlIHNob3VsZAorICogYmUgZW5vdWdoIGZvciBtb3N0 IHVzZXMuCisgKi8KKyNpZm5kZWYgRkRfU0VUU0laRQorI2RlZmluZSBGRF9TRVRTSVpFICAgICAg MjU2CisjZW5kaWYKKwordHlwZWRlZiBsb25nICAgIGZkX21hc2s7CisjZGVmaW5lIE5GREJJVFMg KHNpemVvZihmZF9tYXNrKSAqIE5CQlkpICAgICAgICAvKiBiaXRzIHBlciBtYXNrICovCisKKyNp Zm5kZWYgaG93bWFueQorI2RlZmluZSBob3dtYW55KHgsIHkpICAgKCgoeCkrKCh5KS0xKSkvKHkp KQorI2VuZGlmCisKK3R5cGVkZWYgc3RydWN0IGZkX3NldCB7CisgICAgICAgIGZkX21hc2sgZmRz X2JpdHNbaG93bWFueShGRF9TRVRTSVpFLCBORkRCSVRTKV07Cit9IGZkX3NldDsKKworI2RlZmlu ZSBGRF9TRVQobiwgcCkgICAgKChwKS0+ZmRzX2JpdHNbKG4pL05GREJJVFNdIHw9ICgxIDw8ICgo bikgJSBORkRCSVRTKSkpCisjZGVmaW5lIEZEX0NMUihuLCBwKSAgICAoKHApLT5mZHNfYml0c1so bikvTkZEQklUU10gJj0gfigxIDw8ICgobikgJSBORkRCSVRTKSkpCisjZGVmaW5lIEZEX0lTU0VU KG4sIHApICAoKHApLT5mZHNfYml0c1sobikvTkZEQklUU10gJiAoMSA8PCAoKG4pICUgTkZEQklU UykpKQorI2RlZmluZSBGRF9DT1BZKGYsIHQpICAgYmNvcHkoZiwgdCwgc2l6ZW9mKCooZikpKQor I2RlZmluZSBGRF9aRVJPKHApICAgICAgYnplcm8ocCwgc2l6ZW9mKCoocCkpKQorI2VuZGlmIC8q ICFOQkJZICovCisKKyNlbHNlICAvKiBOb3QgREVDX1RDUElQICovCisKKyNpZmRlZiBDTVVfVENQ SVAKKyNpbmNsdWRlIDx0eXBlcy5oPgorI2luY2x1ZGUgPGluLmg+CisjaW5jbHVkZSA8bmV0ZGIu aD4KKyNpbmNsdWRlIDxzb2NrZXQuaD4KKyNpbmNsdWRlIDxpbmV0Lmg+CisjaW5jbHVkZSA8aW9j dGwuaD4KKyNpbmNsdWRlICJja3Zpb2MuaCIKKyNkZWZpbmUgc29ja2V0X2Vycm5vIGVycm5vCisK Ky8qCisgKiBSb3V0aW5lcyBzdXBwbGllZCBpbiBMSUJDTVUuT0xCCisgKi8KKyNkZWZpbmUgc29j a2V0X2lvY3RsICAgIGlvY3RsCisjZGVmaW5lIHNvY2tldF9yZWFkICAgICBjbXVfcmVhZAorI2Rl ZmluZSBzb2NrZXRfd3JpdGUgICAgY211X3dyaXRlCisjZGVmaW5lIHNvY2tldF9jbG9zZSAgICBj bXVfY2xvc2UKKworI2VuZGlmIC8qIENNVV9UQ1BJUCAqLworI2VuZGlmIC8qIERFQ19UQ1BJUCAq LworI2VuZGlmIC8qIFdJTlRDUCAqLworI2VuZGlmIC8qIE1VTFRJTkVUICovCisKKyNlbHNlIC8q IE5vdCBWTVMgKi8KKworI2lmZGVmIE9TMgorI2luY2x1ZGUgImNrb25ldC5oIgorI2lmbmRlZiBO VAorI2luY2x1ZGUgPG5lcnJuby5oPgorI2VuZGlmCisjZW5kaWYgLyogT1MyICovCisKKyNpZmRl ZiBTVFJBVFVTICAvKiBTdHJhdHVzIFZPUyB1c2luZyBPUyBUQ1AvSVAgcHJvZHVjdHMgUzIzNSwg UzIzNiwgUzIzNyAqLworI2luY2x1ZGUgPHRjcF9zb2NrZXQuaD4KKy8qIFRoaXMgZ2V0cyB1c2Vk IHNvbWUgcGxhY2VzIHdoZW4gVENQU09DS0VUIGlzIGRlZmluZWQuICovCisvKiBPUyBUQ1AgcHJv dmlkZXMgYnplcm8oKSwgYnV0IG5vdCBiY29weSgpLi4uIGdvIGZpZ3VyZS4gKi8KKyNkZWZpbmUg YmNvcHkocyxkLHopIG1lbWNweShkLHMseikKKyNlbmRpZiAvKiBTVFJBVFVTICovCisKKyNpZmRl ZiBPU0sKKyNpZm5kZWYgT1NLWFhDCisjaW5jbHVkZSA8aW5ldC9pbi5oPgorI2luY2x1ZGUgPGlu ZXQvbmV0ZGIuaD4KKyNpbmNsdWRlIDxpbmV0L3NvY2tldC5oPgorI2Vsc2UKKyNpbmNsdWRlIDxJ TkVUL2luLmg+CisjaW5jbHVkZSA8SU5FVC9uZXRkYi5oPgorI2luY2x1ZGUgPElORVQvc29ja2V0 Lmg+CisjZW5kaWYgLyogT1NLWFhDICovCisjaWZuZGVmIGJ6ZXJvCisjZGVmaW5lIGJ6ZXJvKHMs bikgbWVtc2V0KHMsMCxuKQorI2VuZGlmCisjaWZuZGVmIGJjb3B5CisjZGVmaW5lIGJjb3B5KGgs YSxsKSBtZW1jcHkoYSxoLGwpCisjZW5kaWYKK3R5cGVkZWYgY2hhciAqIGNhZGRyX3Q7IC8qIGNv cmUgYWRkcmVzcyB0eXBlICovCisjZW5kaWYgLyogT1NLICovCisKKyNlbmRpZiAvKiBWTVMgKi8K KyNlbmRpZiAvKiBVTklYICovCisjZW5kaWYgLyogVENQU09DS0VUICovCisKKyNpZm5kZWYgTk9J TkFERFJYCQkgICAgICAvKiAzMDEgLSBOZWVkZWQgZm9yIFNvbGFyaXMgMTAgYW5kIDExICovCisj aWZkZWYgU09MQVJJUworI2RlZmluZSBOT0lOQUREUlgKKyNpZmRlZiBJTkFERFJfTk9ORQorI3Vu ZGVmIElOQUREUl9OT05FCisjZW5kaWYJLyogSU5BRERSX05PTkUgKi8KKyNlbmRpZgkvKiBTT0xB UklTICovCisjZW5kaWYJLyogTk9JTkFERFJYICovCisKKyNpZmRlZiBOT0lOQUREUlgKKyNpZmRl ZiBJTkFERFJYCisjdW5kZWYgSU5BRERSWAorI2VuZGlmCS8qIElOQUREUlggKi8KKyNlbmRpZgkv KiBOT0lOQUREUlggKi8KKworI2lmZGVmIFRDUFNPQ0tFVAorI2lmbmRlZiBOT0hBRERSTElTVAor I2lmbmRlZiBIQUREUkxJU1QKKyNpZmRlZiBTVU5PUzQxCisjZGVmaW5lIEhBRERSTElTVAorI2Vu ZGlmIC8qIFNVTk9TNDEgKi8KKyNpZmRlZiBTT0xBUklTCisjZGVmaW5lIEhBRERSTElTVAorI2Vu ZGlmIC8qIFNPTEFSSVMgKi8KKyNpZmRlZiBMSU5VWAorI2RlZmluZSBIQUREUkxJU1QKKyNlbmRp ZiAvKiBMSU5VWCAqLworI2lmZGVmIEFJWFJTCisjZGVmaW5lIEhBRERSTElTVAorI2VuZGlmIC8q IEFJWFJTICovCisjaWZkZWYgSFBVWAorI2RlZmluZSBIQUREUkxJU1QKKyNlbmRpZiAvKiBIUFVY ICovCisjaWZkZWYgSVJJWAorI2RlZmluZSBIQUREUkxJU1QKKyNlbmRpZiAvKiBJUklYICovCisj aWZkZWYgSTM4NklYCisjZGVmaW5lIEhBRERSTElTVAorI2VuZGlmIC8qIEkzODZJWCAqLworI2Vu ZGlmIC8qIEhBRERSTElTVCAqLworLyogQSBzeXN0ZW0gdGhhdCBkZWZpbmVzIGhfYWRkciBhcyBo X2FkZHJfbGlzdFswXSBzaG91bGQgYmUgSEFERFJMSVNUICovCisjaWZuZGVmIEhBRERSTElTVAor I2lmZGVmIGhfYWRkcgorI2RlZmluZSBIQUREUkxJU1QKKyNlbmRpZiAvKiBoX2FkZHIgKi8KKyNl bmRpZiAvKiBIQUREUkxJU1QgKi8KKyNlbmRpZiAvKiBOT0hBRERSTElTVCAqLworI2VuZGlmIC8q IFRDUFNPQ0tFVCAqLworCisjaWZkZWYgVE5DT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogSWYgd2UncmUgY29tcGlsaW5nIHRlbG5ldCBjb2RlLi4uICovCisjaWZuZGVmIElLU19PUFRJ T04KKyNpZm5kZWYgU1RSQVRVUworI2RlZmluZSBJS1NfT1BUSU9OCisjZW5kaWYgLyogU1RSQVRV UyAqLworI2VuZGlmIC8qIElLU19PUFRJT04gKi8KKyNpbmNsdWRlICJja2N0ZWwuaCIKKyNlbHNl CitleHRlcm4gaW50IHNzdGVsbmV0OworI2lmZGVmIElLU0QKKyN1bmRlZiBJS1NECisjZW5kaWYg LyogSUtTRCAqLworI2lmbmRlZiBOT0lLU0QKKyNkZWZpbmUgTk9JS1NECisjZW5kaWYgLyogTk9J S1NEICovCisjaWZkZWYgSUtTX09QVElPTgorI3VuZGVmIElLU19PUFRJT04KKyNlbmRpZiAvKiBJ S1NfT1BUSU9OICovCisjZW5kaWYgLyogVE5DT0RFICovCisKKyNpZm5kZWYgTk9UQ1BPUFRTCisv KgorICBBdXRvbWF0aWNhbGx5IGRlZmluZSBOT1RDUE9QVFMgZm9yIGNvbmZpZ3VyYXRpb25zIHdo ZXJlIHRoZXkgY2FuJ3QgYmUKKyAgdXNlZCBhdCBydW50aW1lIG9yIGNhdXNlIHRvbyBtdWNoIHRy b3VibGUgYXQgY29tcGlsZSB0aW1lLgorKi8KKyNpZmRlZiBDTVVfVENQSVAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBDTVUvVGVrICovCisjZGVmaW5lIE5PVENQT1BUUworI2VuZGlmIC8qIENN VV9UQ1BJUCAqLworI2lmZGVmIE1VTFRJTkVUICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE11 bHRpbmV0IG9uIEFscGhhICovCisjaWZkZWYgX19hbHBoYQorI2RlZmluZSBOT1RDUE9QVFMKKyNl bmRpZiAvKiBfX2FscGhhICovCisjZW5kaWYgLyogTVVMVElORVQgKi8KKyNlbmRpZiAvKiBOT1RD UE9QVFMgKi8KKworI2lmZGVmIE5PVENQT1BUUworI2lmZGVmIFRDUF9OT0RFTEFZCisjdW5kZWYg VENQX05PREVMQVkKKyNlbmRpZiAvKiBUQ1BfTk9ERUxBWSAqLworI2lmZGVmIFNPX0xJTkdFUgor I3VuZGVmIFNPX0xJTkdFUgorI2VuZGlmIC8qIFNPX0xJTkdFUiAqLworI2lmZGVmIFNPX0tFRVBB TElWRQorI3VuZGVmIFNPX0tFRVBBTElWRQorI2VuZGlmIC8qIFNPX0tFRVBBTElWRSAqLworI2lm ZGVmIFNPX1NOREJVRgorI3VuZGVmIFNPX1NOREJVRgorI2VuZGlmIC8qIFNPX1NOREJVRiAqLwor I2lmZGVmIFNPX1JDVkJVRgorI3VuZGVmIFNPX1JDVkJVRgorI2VuZGlmIC8qIFNPX1JDVkJVRiAq LworI2VuZGlmIC8qIE5PVENQT1BUUyAqLworCisvKiBUaGlzIGZ1bmN0aW9uIGlzIGRlY2xhcmVk IGV2ZW4gd2hlbiBUQ1BTT0NLRVQgaXMgbm90IGF2YWlsYWJsZSAqLworX1BST1RPVFlQKCBjaGFy ICogY2tnZXRwZWVyLCAoVk9JRCkpOworCisjaWZkZWYgVENQU09DS0VUCisjaWZkZWYgU09MX1NP Q0tFVAorI2lmZGVmIFRDUF9OT0RFTEFZCitfUFJPVE9UWVAoIGludCBub19kZWxheSwgKGludCwg aW50KSApOworI2VuZGlmIC8qIFRDUF9OT0RFTEFZICovCisjaWZkZWYgU09fS0VFUEFMSVZFCitf UFJPVE9UWVAoIGludCBrZWVwYWxpdmUsIChpbnQsIGludCkgKSA7CisjZW5kaWYgLyogU09fS0VF UEFMSVZFICovCisjaWZkZWYgU09fTElOR0VSCitfUFJPVE9UWVAoIGludCBja19saW5nZXIsIChp bnQsIGludCwgaW50KSApIDsKKyNlbmRpZiAvKiBTT19MSU5HRVIgKi8KKyNpZmRlZiBTT19TTkRC VUYKK19QUk9UT1RZUCggaW50IHNlbmRidWYsKGludCwgaW50KSApIDsKKyNlbmRpZiAvKiBTT19T TkRCVUYgKi8KKyNpZmRlZiBTT19SQ1ZCVUYKK19QUk9UT1RZUCggaW50IHJlY3ZidWYsIChpbnQs IGludCkgKSA7CisjZW5kaWYgLyogU09fUkNWQlVGICovCisjaWZkZWYgU09fRE9OVFJPVVRFCitf UFJPVE9UWVAoaW50IGRvbnRyb3V0ZSwgKGludCwgaW50KSk7CisjZW5kaWYgLyogU09fRE9OVFJP VVRFICovCisjZW5kaWYgLyogU09MX1NPQ0tFVCAqLworX1BST1RPVFlQKCBpbnQgZ2V0bG9jYWxp cGFkZHIsIChWT0lEKSk7CitfUFJPVE9UWVAoIGludCBnZXRsb2NhbGlwYWRkcnMsIChjaGFyICos aW50LGludCkpOworX1BST1RPVFlQKCBjaGFyICogY2tnZXRmcWhvc3RuYW1lLChjaGFyICopKTsK K19QUk9UT1RZUCggc3RydWN0IGhvc3RlbnQgKiBja19jb3B5aG9zdGVudCwoc3RydWN0IGhvc3Rl bnQgKikpOworX1BST1RPVFlQKCBjaGFyICogY2tuYW1lMmFkZHIsIChjaGFyICopKTsKK19QUk9U T1RZUCggY2hhciAqIGNrYWRkcjJuYW1lLCAoY2hhciAqKSk7CisKKy8qIEFJWCAqLworCisjaWZk ZWYgQUlYUlMKKyNpZm5kZWYgVENQX05PREVMQVkKKyNkZWZpbmUgVENQX05PREVMQVkgMHgxCisj ZW5kaWYgLyogVENQX05PREVMQVkgKi8KKyNpZm5kZWYgVENQX01BWFNFRworI2RlZmluZSBUQ1Bf TUFYU0VHIDB4MgorI2VuZGlmIC8qIFRDUF9NQVhTRUcgKi8KKyNpZm5kZWYgVENQX0tFRVBBTElW RQorI2RlZmluZSBUQ1BfS0VFUEFMSVZFIDB4OAorI2VuZGlmIC8qIFRDUF9LRUVQQUxJVkUgKi8K KyNlbmRpZiAvKiBBSVhSUyAqLworI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLworCisjaWZkZWYgUkxP R0NPREUKKyNpZm5kZWYgQ0tfVFRHV1NJWgorU09SUllfUkxPR0lOX1JFUVVJUkVTX1RUR1dTSVpf c2VlX2NrY3BsbS5kb2MKKyNlbmRpZiAvKiBDS19UVEdXU0laICovCisjZW5kaWYgLyogUkxPR0NP REUgKi8KKworI2lmZGVmIENLX05BV1MKKyNpZm5kZWYgQ0tfVFRHV1NJWgorU09SUllfQ0tfTkFX U19SRVFVSVJFU19UVEdXU0laX3NlZV9ja2NwbG0uZG9jCisjZW5kaWYgLyogQ0tfVFRHV1NJWiAq LworI2VuZGlmIC8qIENLX05BV1MgKi8KKworI2lmbmRlZiBQRl9JTkVUCisjaWZkZWYgIEFGX0lO RVQKKyNkZWZpbmUgUEZfSU5FVCBBRl9JTkVUCisjZW5kaWYgLyogQUZfSU5FVCAqLworI2VuZGlm IC8qIFBGX0lORVQgKi8KKworI2lmbmRlZiBJUFBPUlRfRUNITworI2RlZmluZSBJUFBPUlRfRUNI TyA3CisjZW5kaWYgLyogSVBQT1JUX0VDSE8gKi8KKworI2lmZGVmIENLX0tFUkJFUk9TCisjaWZk ZWYgUkxPR0NPREUKK19QUk9UT1RZUChpbnQgY2tfa3JiX3Jsb2dpbiwoQ0hBUiAqLCBpbnQsIENI QVIgKiwgQ0hBUiAqLCBDSEFSICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1 Y3Qgc29ja2FkZHJfaW4gKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBz b2NrYWRkcl9pbiAqLCBpbnQsIGludCkpOworI2VuZGlmIC8qIFJMT0dDT0RFICovCisjZW5kaWYg LyogQ0tfS0VSQkVST1MgKi8KKworX1BST1RPVFlQKCBWT0lEIGluaV9rZXJiLCAoIHZvaWQgKSAp OyAgIC8qIEtlcmJlcm9zIGluaXRpYWxpemF0aW9uIHJvdXRpbmUgKi8KK19QUk9UT1RZUCggaW50 IGRvYXV0aCwgKGludCkgKTsgICAgICAgICAvKiBBVVRIRU5USUNBVEUgYWN0aW9uIHJvdXRpbmUg Ki8KKworI2lmZGVmIENLX0ROU19TUlYKK19QUk9UT1RZUChpbnQgbG9jYXRlX3Nydl9kbnMsKGNo YXIgKmhvc3QsIGNoYXIgKnNlcnZpY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj aGFyICpwcm90b2NvbCwgc3RydWN0IHNvY2thZGRyICoqYWRkcl9wcCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGludCAqbmFkZHJzKSk7CisjZW5kaWYgLyogQ0tfRE5TX1NSViAqLwor CisjaWZuZGVmIE5PSFRUUAorX1BST1RPVFlQKGludCBodHRwX29wZW4sIChjaGFyICosIGNoYXIg KiwgaW50LCBjaGFyICosIGludCwgY2hhciAqKSk7CitfUFJPVE9UWVAoaW50IGh0dHBfcmVvcGVu LCAoVk9JRCkpOworX1BST1RPVFlQKGludCBodHRwX2Nsb3NlLCAoVk9JRCkpOworX1BST1RPVFlQ KGludCBodHRwX2dldCwgKGNoYXIgKixjaGFyICoqLGNoYXIgKixjaGFyICosY2hhcixjaGFyICos Y2hhciAqLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCkpOworX1BST1RPVFlQKGludCBo dHRwX2hlYWQsIChjaGFyICosY2hhciAqKixjaGFyICosY2hhciAqLGNoYXIsY2hhciAqLGNoYXIg KiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KSk7CitfUFJPVE9UWVAoaW50IGh0dHBf cHV0LCAoY2hhciAqLGNoYXIgKiosY2hhciAqLGNoYXIgKixjaGFyICosY2hhcixjaGFyICosCisg ICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqLCBjaGFyICosIGludCkpOworX1BST1RPVFlQ KGludCBodHRwX2RlbGV0ZSwgKGNoYXIgKixjaGFyICoqLGNoYXIgKixjaGFyICosY2hhcixjaGFy ICopKTsKK19QUk9UT1RZUChpbnQgaHR0cF9jb25uZWN0LCAoaW50LCBjaGFyICosY2hhciAqKixj aGFyICosY2hhciAqLGNoYXIsY2hhciAqKSk7CitfUFJPVE9UWVAoaW50IGh0dHBfcG9zdCwgKGNo YXIgKixjaGFyICoqLGNoYXIgKixjaGFyICosY2hhciAqLGNoYXIsY2hhciAqLAorICAgICAgICAg ICAgICAgICAgY2hhciAqLGNoYXIgKiwgaW50KSk7CitfUFJPVE9UWVAoaW50IGh0dHBfaW5kZXgs IChjaGFyICosY2hhciAqKixjaGFyICosY2hhciAqLGNoYXIsY2hhciAqLGNoYXIgKiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIGludCkpOworX1BST1RPVFlQKGludCBodHRwX2luYywgKGlu dCkpOworX1BST1RPVFlQKGludCBodHRwX2lzY29ubmVjdGVkLCAodm9pZCkpOworCitleHRlcm4g Y2hhciAqIHRjcF9odHRwX3Byb3h5OyAgICAgICAgICAgLyogTmFtZVs6cG9ydF0gb2YgaHR0cCBw cm94eSBzZXJ2ZXIgKi8KK2V4dGVybiBpbnQgICAgdGNwX2h0dHBfcHJveHlfZXJybm87ICAgICAv KiBSZXR1cm4gdmFsdWUgZnJvbSBzZXJ2ZXIgKi8KK2V4dGVybiBjaGFyICogdGNwX2h0dHBfcHJv eHlfdXNlcjsgICAgICAvKiBOYW1lIG9mIHVzZXIgZm9yIGF1dGhlbnRpY2F0aW9uICovCitleHRl cm4gY2hhciAqIHRjcF9odHRwX3Byb3h5X3B3ZDsgICAgICAgLyogUGFzc3dvcmQgb2YgdXNlciAq LworI2VuZGlmIC8qIE5PSFRUUCAqLworCisjaWZkZWYgVENQU09DS0VUCisKKy8qIFR5cGUgbmVl ZGVkIGFzIDV0aCBhcmd1bWVudCAobGVuZ3RoKSB0byBnZXQvc2V0c29ja29wdCgpICovCisKKyNp ZmRlZiBUUlU2NAorLyogVGhleSBzYXkgaXQgdGhlbXNlbHZlcyAtIHRoaXMgZG9lcyBub3QgY29u Zm9ybSB0byBzdGFuZGFyZHMgKi8KKyNkZWZpbmUgc29ja2xlbl90IGludAorI2Vsc2UKKyNpZmRl ZiBIUFVYCisjZGVmaW5lIHNvY2tsZW5fdCBpbnQKKyNlbmRpZgkvKiBIUFVYICovCisjZW5kaWYJ LyogVFJVNjQgKi8KKworI2lmbmRlZiBTT0NLT1BUX1QKKyNpZmRlZiBDS182NEJJVAorI2RlZmlu ZSBTT0NLT1BUX1Qgc29ja2xlbl90CisjZW5kaWYJLyogQ0tfNjRCSVQgKi8KKyNlbmRpZgkvKiBT T0NLT1BUX1QgKi8KKworI2lmbmRlZiBTT0NLT1BUX1QKKyNkZWZpbmUgU09DS09QVF9UIGludAor I2lmZGVmIE1BQ09TWDEwCisjdW5kZWYgU09DS09QVF9UCisjZGVmaW5lIFNPQ0tPUFRfVCB1bnNp Z25lZCBpbnQKKyNlbHNlCisjaWZkZWYgQUlYNDIKKyN1bmRlZiBTT0NLT1BUX1QKKyNkZWZpbmUg U09DS09QVF9UIHVuc2lnbmVkIGxvbmcKKyNlbHNlCisjaWZkZWYgUFRYCisjdW5kZWYgU09DS09Q VF9UCisjZGVmaW5lIFNPQ0tPUFRfVCBzaXplX3QKKyNlbHNlCisjaWZkZWYgTlQKKyN1bmRlZiBT T0NLT1BUX1QKKyNkZWZpbmUgU09DS09QVF9UIGludAorI2Vsc2UgLyogTlQgKi8KKyNpZmRlZiBV TklYV0FSRQorI3VuZGVmIFNPQ0tPUFRfVAorI2RlZmluZSBTT0NLT1BUX1Qgc2l6ZV90CisjZWxz ZSAvKiBVTklYV0FSRSAqLworI2lmZGVmIFZNUworI2lmZGVmIERFQ19UQ1BJUAorI2lmZGVmIF9f REVDQ19WRVIKKyN1bmRlZiBTT0NLT1BUX1QKKyNkZWZpbmUgU09DS09QVF9UIHNpemVfdAorI2Vu ZGlmIC8qIF9fREVDQ19WRVIgKi8KKyNlbmRpZiAvKiBERUNfVENQSVAgKi8KKyNlbmRpZiAvKiBW TVMgKi8KKyNlbmRpZiAvKiBVTklYV0FSRSAqLworI2VuZGlmIC8qIE5UICovCisjZW5kaWYgLyog UFRYICovCisjZW5kaWYgLyogQUlYNDIgKi8KKyNlbmRpZiAvKiBNQUNPU1gxMCAqLworI2VuZGlm IC8qIFNPQ0tPUFRfVCAqLworCisvKiBEaXR0byBmb3IgZ2V0c29ja25hbWUoKSAqLworCisjaWZu ZGVmIEdTT0NLTkFNRV9UCisjaWZkZWYgQ0tfNjRCSVQKKyNkZWZpbmUgR1NPQ0tOQU1FX1Qgc29j a2xlbl90CisjZW5kaWYJLyogQ0tfNjRCSVQgKi8KKyNlbmRpZgkvKiBHU09DS05BTUVfVCAqLwor CisjaWZuZGVmIEdTT0NLTkFNRV9UCisjZGVmaW5lIEdTT0NLTkFNRV9UIGludAorI2lmZGVmIE1B Q09TWDEwCisjdW5kZWYgR1NPQ0tOQU1FX1QKKyNkZWZpbmUgR1NPQ0tOQU1FX1QgdW5zaWduZWQg aW50CisjZWxzZQorI2lmZGVmIFBUWAorI3VuZGVmIEdTT0NLTkFNRV9UCisjZGVmaW5lIEdTT0NL TkFNRV9UIHNpemVfdAorI2Vsc2UKKyNpZmRlZiBBSVg0MiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBzaXplX3QgaW4gNC4yKyssIGludCBpbiA0LjEtLSAqLworI3VuZGVmIEdTT0NLTkFN RV9UCisjZGVmaW5lIEdTT0NLTkFNRV9UIHNpemVfdAorI2Vsc2UKKyNpZmRlZiBVTklYV0FSRQor I3VuZGVmIEdTT0NLTkFNRV9UCisjZGVmaW5lIEdTT0NLTkFNRV9UIHNpemVfdAorI2Vsc2UKKyNp ZmRlZiBWTVMKKyNpZmRlZiBERUNfVENQSVAKKyNpZmRlZiBfX0RFQ0NfVkVSCisjdW5kZWYgR1NP Q0tOQU1FX1QKKyNkZWZpbmUgR1NPQ0tOQU1FX1Qgc2l6ZV90CisjZW5kaWYgLyogX19ERUNDX1ZF UiAqLworI2VuZGlmIC8qIERFQ19UQ1BJUCAqLworI2VuZGlmIC8qIFZNUyAqLworI2VuZGlmIC8q IFVOSVhXQVJFICovCisjZW5kaWYgLyogQUlYNDEgKi8KKyNlbmRpZiAvKiBQVFggKi8KKyNlbmRp ZiAvKiBNQUNPU1gxMCAqLworI2VuZGlmIC8qIEdTT0NLTkFNRV9UICovCisKKyNlbmRpZiAvKiBU Q1BTT0NLRVQgKi8KKworI2lmZGVmIE1BQ09TWDEwCisjaWZkZWYgYmNvcHkKKyN1bmRlZiBiY29w eQorI2VuZGlmCisjaWZkZWYgYnplcm8KKyN1bmRlZiBiemVybworI2VuZGlmCisjZW5kaWYgLyog TUFDT1NYMTAgKi8KKworI2VuZGlmIC8qIENLQ05FVF9IICovCgpkaWZmIC0tZ2l0IGEvY2tlcm1p dC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2NwbG0udHh0IGIvY2tlcm1pdC05LjAu MzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2NwbG0udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAuLmUwMGVkZGUKLS0tIC9kZXYvbnVsbAorKysgYi9ja2VybWl0LTkuMC4z MDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrY3BsbS50eHQKQEAgLTAsMCArMSwzMTEzIEBACisK KyAgIFsxXVRoZSBDb2x1bWJpYSBDcm93biBUaGUgS2VybWl0IFByb2plY3QgfCBDb2x1bWJpYSBV bml2ZXJzaXR5CisgICA2MTIgV2VzdCAxMTV0aCBTdHJlZXQsIE5ldyBZb3JrIE5ZIDEwMDI1IFVT QSBvIFsyXWtlcm1pdEBjb2x1bWJpYS5lZHUKKyAgIC4uLnNpbmNlIDE5ODEKKyAgIFszXUhvbWUg WzRdS2VybWl0IDk1IFs1XUMtS2VybWl0IFs2XVNjcmlwdHMgWzddQ3VycmVudCBbOF1OZXcgWzld RkFRCisgICBbMTBdU3VwcG9ydAorCitDLUtlcm1pdCBQcm9ncmFtIExvZ2ljIE1hbnVhbAorCisg ICAgIEZyYW5rIGRhIENydXoKKyAgICAgWzExXVRoZSBLZXJtaXQgUHJvamVjdAorCisgICBBcyBv ZjogQy1LZXJtaXQgOS4wLjMwMCwgMzAgSnVuZSAyMDExCisgICBMYXN0IHVwZGF0ZTogRnJpIEp1 bCAxIDE1OjQ3OjM0IDIwMTEKKworICAgICBJRiBZT1UgQVJFIFJFQURJTkcgQSBQTEFJTi1URVhU IHZlcnNpb24gb2YgdGhpcyBkb2N1bWVudCwgbm90ZSB0aGF0CisgICAgIHRoaXMgZmlsZSBpcyBh IHBsYWluLXRleHQgZHVtcCBvZiBhIFdlYiBwYWdlLiBZb3UgY2FuIHZpc2l0IHRoZQorICAgICBv cmlnaW5hbCAoYW5kIHBvc3NpYmx5IG1vcmUgdXAtdG8tZGF0ZSkgV2ViIHBhZ2UgaGVyZToKKwor ICBbMTJdaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY3BsbS5odG1sCisKK0NPTlRF TlRTCisKKyAgMS4gWzEzXUlOVFJPRFVDVElPTgorICAyLiBbMTRdRklMRVMKKyAgMy4gWzE1XVNP VVJDRSBDT0RFIFBPUlRBQklMSVRZIEFORCBTVFlMRQorICA0LiBbMTZdTU9EVUxFUworICAgICA0 LkEuIFsxN11Hcm91cCBBOiBMaWJyYXJ5IFJvdXRpbmVzCisgICAgIDQuQi4gWzE4XUdyb3VwIEI6 IEtlcm1pdCBGaWxlIFRyYW5zZmVyCisgICAgIDQuQy4gWzE5XUdyb3VwIEM6IENoYXJhY3Rlci1T ZXQgQ29udmVyc2lvbgorICAgICA0LkQuIFsyMF1Hcm91cCBEOiBVc2VyIEludGVyZmFjZQorICAg ICA0LkUuIFsyMV1Hcm91cCBFOiBQbGF0Zm9ybS1EZXBlbmRlbnQgSS9PCisgICAgIDQuRi4gWzIy XUdyb3VwIEY6IE5ldHdvcmsgU3VwcG9ydAorICAgICA0LkcuIFsyM11Hcm91cCBHOiBGb3JtYXR0 ZWQgU2NyZWVuIFN1cHBvcnQKKyAgICAgNC5ILiBbMjRdR3JvdXAgSDogUHNldWRvdGVybWluYWwg U3VwcG9ydAorICAgICA0LkkuIFsyNV1Hcm91cCBJOiBTZWN1cml0eQorICBJLiBbMjZdQVBQRU5E SVggSTogRklMRSBQRVJNSVNTSU9OUworCisxLiBJTlRST0RVQ1RJT04KKworICAgVGhlIEtlcm1p dCBQcm90b2NvbCBpcyBzcGVjaWZpZWQgaW4gdGhlIGJvb2sgWzI3XUtlcm1pdCwgQSBGaWxlCisg ICBUcmFuc2ZlciBQcm90b2NvbCBieSBGcmFuayBkYSBDcnV6LCBEaWdpdGFsIFByZXNzIC8gQnV0 dGVyd29ydGgKKyAgIEhlaW5lbWFubiwgTmV3dG9uLCBNQSwgVVNBICgxOTg3KSwgMzc5IHBhZ2Vz LCBJU0JOIDAtOTMyMzc2LTg4LTYuIEl0IGlzCisgICBhc3N1bWVkIHRoZSByZWFkZXIgaXMgZmFt aWxpYXIgd2l0aCB0aGUgS2VybWl0IHByb3RvY29sIHNwZWNpZmljYXRpb24uCisKKyAgIFRoaXMg ZmlsZSBkZXNjcmliZXMgdGhlIHJlbGF0aW9uc2hpcCBhbW9uZyB0aGUgbW9kdWxlcyBhbmQgZnVu Y3Rpb25zIG9mCisgICBDLUtlcm1pdCA1QSBhbmQgbGF0ZXIsIGFuZCBvdGhlciBwcm9ncmFtbWlu ZyBjb25zaWRlcmF0aW9ucy4gQy1LZXJtaXQKKyAgIGlzIGRlc2lnbmVkIHRvIGJlIHBvcnRhYmxl IHRvIGFueSBraW5kIG9mIGNvbXB1dGVyIHRoYXQgaGFzIGEgQworICAgY29tcGlsZXIuIFRoZSBz b3VyY2UgY29kZSBpcyBicm9rZW4gaW50byBtYW55IGZpbGVzIHRoYXQgYXJlIGdyb3VwZWQKKyAg IGFjY29yZGluZyB0byB0aGVpciBmdW5jdGlvbiwgYXMgc2hvd24gaW4gdGhlIFsyOF1Db250ZW50 cy4KKworICAgQy1LZXJtaXQgaGFzIHNlZW4gY29uc3RhbnQgZGV2ZWxvcG1lbnQgc2luY2UgMTk4 NS4gVGhyb3VnaG91dCBpdHMKKyAgIGhpc3RvcnksIHRoZXJlIGhhcyBiZWVuIGEgbmV2ZXJlbmRp bmcgdHVnLW9mLXdhciBhbW9uZzoKKworICAgIGEuIEZ1bmN0aW9uYWxpdHk6IGFkZGluZyBuZXcg ZmVhdHVyZXMsIGZpeGluZyBidWdzLCBpbXByb3ZpbmcKKyAgICAgICBwZXJmb3JtYW5jZS4KKyAg ICBiLiBBZGRpbmcgc3VwcG9ydCBmb3IgbmV3IHBsYXRmb3JtcyBvciBjb21tdW5pY2F0aW9uIG1l dGhvZHMuCisgICAgYy4gIkJ1enp3b3JkIDEuMCBjb21wbGlhbmNlIi4KKworICAgVGhlIGxhdHRl ciBjYXRlZ29yeSBpcyB0aGUgbW9zdCBmcnVzdHJhdGluZywgc2luY2UgaXQgZ2VuZXJhbGx5Cisg ICBpbnZvbHZlcyBtYXNzaXZlIGNoYW5nZXMganVzdCB0byBrZWVwIHRoZSBzb2Z0d2FyZSBkb2lu ZyB3aGF0IGl0IGRpZAorICAgYmVmb3JlIGluIHNvbWUgbmV3IHNldHRpbmc6IGUuZy4gdGhlIEsm Ui10by1BTlNJQyBjb252ZXJzaW9uICh3aGljaCBoYWQKKyAgIHRvIGJlIGRvbmUsIG9mIGNvdXJz ZSwgd2l0aG91dCBicmVha2luZyBLJlIpOyBZMksgKG5vdCBhIGJpZyBkZWFsIGluCisgICBvdXIg Y2FzZSk7IHRoZSBtYW55IGFuZCB2YXJpZWQgVU5JWCBhbmQgb3RoZXIgQVBJICJzdGFuZGFyZHMi IHdpdGgKKyAgIHdoaWNoIHRvICJjb21wbHkiLgorCisgICBVcG9uIGZpcnN0IGdsYW5jZSBhdCB0 aGUgc291cmNlIGNvZGUsIHlvdSB3aWxsIHByb2JhYmx5IGJlIGFwcGFsbGVkLgorICAgTWFueSB3 aWxsIGJlIHRlbXB0ZWQgdG8gY2xlYW4gaXQgdXAgYW5kIG1vZGVybml6ZSBpdC4gQnV0IGFzIHNv b24gYXMKKyAgIHlvdSBkbywgeW91IGFyZSBzdXJlIHRvIGJyZWFrIHNvbWV0aGluZy4gUmVtZW1i ZXIgdGhhdCBhYm92ZSBhbGwgZWxzZSwKKyAgIHRoZSBDLUtlcm1pdCBjb2RlIGlzIHBvcnRhYmxl IHRvIGV2ZXJ5IFVuaXggcGxhdGZvcm0gdGhhdCBldmVyIGV4aXN0ZWQsCisgICBnb2luZyBiYWNr IFVuaXggVjcgKDE5NzkpKiwgYW5kIHRvIHNldmVyYWwgb3RoZXIgY29tcGxldGVseSBkaWZmZXJl bnQKKyAgIGFuZCB1bnJlbGF0ZWQgb3BlcmF0aW5nLXN5c3RlbSBmYW1pbGllcyBzdWNoIGFzIERF Qy9IUCBWTVMsIERHIEFPUy9WUywKKyAgIGFuZCBTdHJhdHVzIFZPUywgYXMgd2VsbCBhcyB0byBz b21lIFVuaXggb2Zmc2hvb3RzIGxpa2UgT1MtOSBhbmQgUGxhbiA5CisgICAoZnJvbSBPdXRlciBT cGFjZSkuIEV2ZXJ5IHJlbGVhc2Ugb2YgS2VybWl0IGhhcyBiZWVuIGNoZWNrZWQgb24gZXZlcnkK KyAgIHBsYXRmb3JtIGF2YWlsYWJsZSAtLSB0aGUgb2xkZXIgdGhlIGJldHRlciEgLS0gdG8gbWFr ZSBzdXJlIGl0IHN0aWxsCisgICBidWlsZHMgYW5kIHJ1bnMuIEV2ZW4gdG9kYXkgKDIwMTEpLCB0 aGVyZSBhcmUgbW9kZXJuIFVuaXggc3lzdGVtcyB0aGF0CisgICBoYXZlIG5vbi1BTlNJIEMgY29t cGlsZXJzLCBmb3JlbW9zdCBhbW9uZyB0aGVtIEhQLVVYICh3aGVyZSBhbiBBTlNJCisgICBvcHRp bWl6aW5nIEMgY29tcGlsZXIgaXMgYXZhaWxhYmxlLCBidXQgb25seSBhcyBhbiBleHBlbnNpdmUg YWRkLW9uKS4KKyAgIEluIGEgd2F5LCBwb3J0YWJpbGl0eSBpcyB0aGUgbW9zdCBpbXBvcnRhbnQg ZmVhdHVyZSBvZiBDLUtlcm1pdCBhbmQKKyAgIGV2ZXJ5IGVmZm9ydCBzaG91bGQgYmUgbWFkZSB0 byBwcmVzZXJ2ZSBpdCB0aHJvdWdoIGZ1dHVyZSByZWxlYXNlcy4KKworICAgVm9sdW1pbm91cyBl ZGl0IGhpc3RvcmllcyBhcmUgYXZhaWxhYmxlIGdvaW5nIGJhY2sgdG8gTWF5IDE5ODUuIFRoZQor ICAgZmlyc3QgdmVyc2lvbnMgb2YgQy1LZXJtaXQgd2VyZSBkb25lIG9uIG91ciBbMjldREVDIFZB WC0xMS83NTAgd2l0aAorICAgVWx0cml4IDEuMCBhbmQgMi4wIChhcyB3ZWxsIGFzIGRlcGFydG1l bnRhbCA3NTBzIHdpdGggNC4yQlNEKiopLCBERUMKKyAgIFByby0zODAgd29ya3N0YXRpb25zIChk ZXNrdG9wIFBEUC0xMXMpIHJ1bm5pbmcgMi45QlNELCB3aGljaCB3YXMKKyAgIFszMF1wb3J0ZWQg dG8gdGhlIDM4MCBieSB1cy4gTGF0ZXIgKDE5ODggb3Igc28pIG9uIGEgYmlnIFZBWCA4NjUwIHdp dGgKKyAgIFVsdHJpeCwgd2hpY2ggYmVjYW1lIGFuIDg3MDAgKHRoZXNlIG5vIGRvdWJ0IHdlaWdo ZWQgc2V2ZXJhbCB0b25zKSwgYW5kCisgICBmaW5hbGx5IGEgc3VjY2Vzc2lvbiBvZiBub24tREVD IGVxdWlwbWVudDogYW4gRW5jb3JlIE11bHRpbWF4LCAyNSB5ZWFycworICAgd29ydGggb2YgU3Vu cywgYW5kIG5vdyBMaW51eCBvbiBbMzFdSFAgQmxhZGVzLiBXZSBhbHNvIGhhZCBvdXIgb3duIFZN UworICAgZGV2ZWxvcG1lbnQgc3lzdGVtcyBmb3Igc29tZSB5ZWFycy4gQWxsIHRoaXMgcGx1cyBh IGdlbmVyb3VzIGFzc29ydG1lbnQKKyAgIG9mIGRlcGFydG1lbnRhbCBhbmQgb2Zmc2l0ZSBndWVz dCBhY2NvdW50cyBvbiBhIG11bHRpdHVkZSBvZiBwbGF0Zm9ybXMuCisgICBBbnl3YXksIHRoZSBl ZGl0IGhpc3RvcmllczoKKworICAgICBbMzJdY2tjMDRlLnR4dCBDLUtlcm1pdCA0LjIoMDMwKSBN YXkgMTk4NSB0byA0RSgwNzIpIEphbiAxOTg5LgorICAgICBbMzNdY2tjMDRmLnR4dCBDLUtlcm1p dCA0RigwNzcpIEFycCAxOTg5IHRvIDRGKDA5NSkgQXVnIDE5ODkuCisgICAgIFszNF1ja2MxNjgu dHh0IFVwZGF0ZXMgdG8gQy1LZXJtaXQgNUEoMTY4KSBmb3IgVk1TIE5vdiAxOTkxCisgICAgIFsz NV1ja2MxNzgudHh0IEMtS2VybWl0IDVBKDEwMCkgSnVsIDE5ODkgdG8gNUEoMTc4KSBKYW4gMTk5 MgorICAgICBbMzZdY2tjMTg4LnR4dCBDLUtlcm1pdCA1QSgxODgpIGRldmVsb3BtZW50LCAxOTky CisgICAgIFszN11ja2MxODkudHh0IEMtS2VybWl0IDVBKDE4OSkgZGV2ZWxvcG1lbnQsIDE5OTMK KyAgICAgWzM4XWNrYzE5Mi50eHQgQy1LZXJtaXQgNi4wKDE5MikgZGV2ZWxvcG1lbnQsIDE5OTgK KyAgICAgWzM5XWNrYzE5Ny50eHQgQy1LZXJtaXQgNy4wKDE5NykgZGV2ZWxvcG1lbnQsIDIwMDAK KyAgICAgWzQwXWNrYzIwMC50eHQgQy1LZXJtaXQgOC4wLjIwMCBkZXZlbG9wbWVudCwgMjAwMQor ICAgICBbNDFdY2tjMjExLnR4dCBDLUtlcm1pdCA4LjAuMjAxIHRocm91Z2ggOC4wLjIwOSAyMDAx LTIwMDQKKyAgICAgWzQyXWNrYzMwMC50eHQgQy1LZXJtaXQgOS4wLjMwMCBKdW5lIDIwMTEKKwor ICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisgICAqIEMtS2VybWl0IDYuMCB3 YXMgdGhlIGxhc3Qgb25lIHRvIGJlIGJ1aWx0IG9uIFY3LCBhcyBJIHJlY2FsbC4gVGhlCisgICBj b2RlIHNob3VsZCBzdGlsbCBiZSBnb29kIGZvciBWNyBidXQgaXQgcHJvYmFibHkgaGFzIG91dGdy b3duIHRoZQorICAgMTYtYml0IGFkZHJlc3Mgc3BhY2UuIEluIGFueSBjYXNlIHRoZXJlIGlzIHN0 aWxsIGEgVjcgbWFrZWZpbGUgdGFyZ2V0CisgICBhbmQgYSBWNyBwYXRoIHRocm91Z2ggdGhlIGZv cmVzdCBvZiAjaWZkZWZzIGluIHRoZSBjb2RlIGlmIGFueWJvZHkgaXMKKyAgIHJ1bm5pbmcgVjcg b24gYW4gZW11bGF0b3IgYW5kIHdvdWxkIGxpa2UgdG8gdHJ5IGJ1aWxkaW5nIEMtS2VybWl0Lgor ICAgVGhlcmUgaXMgbm8gc3VwcG9ydCBmb3IgVjYgYnV0IHRoYXQgaXMgb25seSBiZWNhdXNlIG5v IFY2IHN5c3RlbSB3YXMKKyAgIGV2ZXIgZm91bmQgZm9yIGRldmVsb3BtZW50LiBOb3RpY2UgdGhh dCBzb21lIG90aGVyIDE2LWJpdCBVbml4ZXMgYXJlCisgICBzdXBwb3J0ZWQgaW4gdGhlIGNvZGUs IGluY2x1ZGluZyAyLjlCU0QgYW5kIFRhbmR5IFhlbml4IDMuMCwgYnV0IGhhdmUKKyAgIG5vdCBi ZWVuIHRyaWVkIHNpbmNlIEMtS2VybWl0IDYuMAorCisgICAqKiAgQy1LZXJtaXQgOS4wLjMwMCB3 YXMgYnVpbHQgc3VjY2Vzc2Z1bGx5IG9uIDQuMkJTRCBhYm91dCAyNSB5ZWFycworICAgbGF0ZXIs IGluIEp1bmUgMjAxMS4KKworICAgWyBbNDNdQ29udGVudHMgXSBbIFs0NF1DLUtlcm1pdCBdIFsg WzQ1XUtlcm1pdCBIb21lIF0KKworMi4gRklMRVMKKworICAgQy1LZXJtaXQgc291cmNlIGZpbGVz IGJlZ2luIHdpdGggdGhlIHR3byBsZXR0ZXJzICJjayIsIGZvciBleGFtcGxlCisgICBja3V0aW8u Yy4gRmlsZW5hbWVzIGFyZSBrZXB0IHNob3J0ICg2LjMpIGZvciBtYXhpbXVtIHBvcnRhYmlsaXR5 IGFuZAorICAgKG9idmlvdXNseSBJIGhvcGUpIGRvIG5vdCBjb250YWluIHNwYWNlcyBvciBtb3Jl IHRoYW4gb25lIHBlcmlvZC4gVGhlCisgICB0aGlyZCBjaGFyYWN0ZXIgaW4gdGhlIG5hbWUgZGVu b3RlcyBzb21ldGhpbmcgYWJvdXQgdGhlIGZ1bmN0aW9uIGdyb3VwCisgICBhbmQgdGhlIGV4cGVj dGVkIGxldmVsIG9mIHBvcnRhYmlsaXR5OgorCisgICAgIGEgICAgIEdlbmVyYWwgZGVzY3JpcHRp dmUgbWF0ZXJpYWwgYW5kIGRvY3VtZW50YXRpb24gKHRleHQpCisgICAgIGIgICAgIEJPTyBmaWxl IGVuY29kZXJzIGFuZCBkZWNvZGVycyAob2Jzb2xldGUpCisgICAgIGMgICAgIEFsbCBwbGF0Zm9y bXMgd2l0aCBDIGNvbXBpbGVycyAoKikKKyAgICAgZCAgICAgRGF0YSBHZW5lcmFsIEFPUy9WUwor ICAgICBlICAgICBSZXNlcnZlZCBmb3IgImNrZXJtaXQiIGZpbGVzLCBsaWtlIGNrZXJtaXQuaW5p LCBja2VybWl0Mi50eHQKKyAgICAgZiAgICAgKHJlc2VydmVkKQorICAgICBnICAgICAocmVzZXJ2 ZWQpCisgICAgIGggICAgIChyZXNlcnZlZCkKKyAgICAgaSAgICAgQ29tbW9kb3JlIEFtaWdhIChJ bnR1aXRpb24pCisgICAgIGogICAgICh1bnVzZWQpCisgICAgIGsgICAgICh1bnVzZWQpCisgICAg IGwgICAgIFN0cmF0dXMgVk9TCisgICAgIG0gICAgIE1hY2ludG9zaCB3aXRoIE1hYyBPUyAxLTkK KyAgICAgbiAgICAgKHVudXNlZCkKKyAgICAgbyAgICAgT1MvMiBhbmQgTWljcm9zb2Z0IFdpbmRv d3MgOXgvTUUvTlQvMjAwMC9YUC9WaXN0YS9ldGMKKyAgICAgcCAgICAgUGxhbiA5IGZyb20gQmVs bCBMYWJzCisgICAgIHEgICAgIChyZXNlcnZlZCkKKyAgICAgciAgICAgREVDIFBEUC0xMSB3aXRo IFJTVFMvRSAobmV2ZXIgdXNlZCwgb3BlbiBmb3IgcmVhc3NpZ25tZW50KQorICAgICBzICAgICBB dGFyaSBTVCBHRU1ET1MgKGxhc3Qgc3VwcG9ydGVkIGluIHZlcnNpb24gNUEoMTg5KSkKKyAgICAg dCAgICAgREVDIFBEUC0xMSB3aXRoIFJULTExIChuZXZlciB1c2VkLCBvcGVuIGZvciByZWFzc2ln bm1lbnQpCisgICAgIHUgICAgIFVuaXgtYmFzZWQgb3BlcmF0aW5nIHN5c3RlbXMgKCopCisgICAg IHYgICAgIFZNUyBhbmQgT3BlblZNUworICAgICB3ICAgICBXYXJ0IChMZXgtbGlrZSBwcmVwcm9j ZXNzb3IsIHBsYXRmb3JtIGluZGVwZW5kZW50KQorICAgICB4ICAgICAocmVzZXJ2ZWQpCisgICAg IHkgICAgIChyZXNlcnZlZCkKKyAgICAgeiAgICAgKHJlc2VydmVkKQorICAgICAwLTMgICAocmVz ZXJ2ZWQpCisgICAgIDQgICAgIElCTSBBUy80MDAKKyAgICAgNS04ICAgKHJlc2VydmVkKQorICAg ICA5ICAgICBNaWNyb3dhcmUgT1MtOQorICAgICBfICAgICAodW5kZXJzY29yZSkgRW5jcnlwdGlv biBtb2R1bGVzCisKKyAgICgqKSBJbiBmYWN0IHRoZXJlIGlzIGxpdHRsZSBkaXN0aW5jdGlvbiBi ZXR3ZWVuIHRoZSBja2MqLiogYW5kIGNrdSouKgorICAgY2F0ZWdvcmllcy4gSXQgd291bGQgbWFr ZSBtb3JlIHNlbnNlIGZvciBhbGwgY2t1Ki4qIG1vZHVsZXMgdG8gYmUKKyAgIGNrYyouKiBvbmVz LCBleGNlcHQgY2t1ZmlvLmMsIGNrdXRpby5jLCBja3Vjb24uYywgY2t1Y25zLmMsIGFuZAorICAg Y2t1cHR5LmMsIHdoaWNoIHRydWx5IGFyZSBzcGVjaWZpYyB0byBVbml4LiBUaGUgcmVzdCAoY2t1 dXMqLmMsCisgICBja3VjbWQuYywgZXRjKSBhcmUgcXVpdGUgcG9ydGFibGUuCisKKyAgIE9uZSBo aW50IGJlZm9yZSBwcm9jZWVkaW5nOiBmdW5jdGlvbnMgYXJlIHNjYXR0ZXJlZCBhbGwgb3ZlciB0 aGUgY2tjKi5jCisgICBhbmQgY2t1Ki5jIG1vZHVsZXMsIHdoZXJlIGZ1bmN0aW9uIHNpemUgaGFz IGJlZ3VuIHRvIHRha2UgcHJlY2VkZW5jZQorICAgb3ZlciB0aGUgZGVzaXJhYmlsaXR5IG9mIGdy b3VwaW5nIHJlbGF0ZWQgZnVuY3Rpb25zIHRvZ2V0aGVyLCB0aGUgYWltCisgICBiZWluZyB0byBr ZWVwIGFueSBwYXJ0aWN1bGFyIG1vZHVsZSBmcm9tIGdyb3dpbmcgZGlzcHJvcG9ydGlvbmF0ZWx5 CisgICBsYXJnZS4gVGhlIGVhc2llc3Qgd2F5IChpbiBVTklYKSB0byBmaW5kIG91dCBpbiB3aGF0 IHNvdXJjZSBmaWxlIGEKKyAgIGdpdmVuIGZ1bmN0aW9uIGlzIGRlZmluZWQgaXMgbGlrZSB0aGlz ICh3aGVyZSB0aGUgZGVzaXJlZCBmdW5jdGlvbiBpcworICAgZm9vKCkuLi4pOgorCisgIGdyZXAg XmZvb1woIGNrKi5jCisKKyAgIFRoaXMgd29ya3MgYmVjYXVzZSB0aGUgY29kaW5nIGNvbnZlbnRp b24gaGFzIGJlZW4gdG8gbWFrZSBmdW5jdGlvbgorICAgbmFtZXMgYWx3YXlzIHN0YXJ0IG9uIHRo ZSBsZWZ0IG1hcmdpbiB3aXRoIHRoZWlyIGNvbnRlbnRzIGluZGVudGVkLCBmb3IKKyAgIGV4YW1w bGU6CisKK3N0YXRpYyBjaGFyICoKK2Zvbyh4LHkpIGludCB4LCB5OyB7CisgICAgLi4uCit9CisK KyAgIEFsc28gbm90ZSB0aGUgc3R5bGUgZm9yIGJyYWNrZXQgcGxhY2VtZW50LiBUaGlzIGFsbG93 cyBicmFja2V0LW1hdGNoaW5nCisgICB0ZXh0IGVkaXRvcnMgKHN1Y2ggYXMgRU1BQ1MpIHRvIGhl bHAgeW91IG1ha2Ugc3VyZSB5b3Uga25vdyB3aGljaAorICAgb3BlbmluZyBicmFja2V0IGEgY2xv c2luZyBicmFja2V0IG1hdGNoZXMsIHBhcnRpY3VsYXJseSB3aGVuIHRoZQorICAgb3BlbmluZyBi cmFja2V0IGlzIGFib3ZlIHRoZSB2aXNpYmxlIHNjcmVlbiwgYW5kIGl0IGFsc28gbWFrZXMgaXQg ZWFzeQorICAgdG8gZmluZCB0aGUgZW5kIG9mIGEgZnVuY3Rpb24gKHNlYXJjaCBmb3IgJ30nIG9u IHRoZSBsZWZ0IG1hcmdpbikuCisKKyAgIE9mIGNvdXJzZSBFTUFDUyB0YWdzIHdvcmsgbmljZWx5 IHdpdGggdGhpcyBmb3JtYXQgdG9vOgorCisgICQgY2Qga2VybWl0LXNvdXJjZS1kaXJlY3RvcnkK KyAgJCBldGFncyBja1tjdV0qLmMKKyAgJCBlbWFjcworICBFc2MtWCBWaXNpdC1UYWdzLVRhYmxl PENSPjxDUj4KKworICAgKGJ1dCByZW1lbWJlciB0aGF0IHRoZSBzb3VyY2UgZmlsZSBmb3IgY2tj cHJvLmMgaXMgWzQ2XWNrY3Byby53ISkKKworICAgQWxzbzoKKworICAgICAqIFRhYnMgc2hvdWxk IGJlIHNldCBldmVyeSA4IHNwYWNlcywgYXMgb24gYSBWVDEwMC4KKyAgICAgKiBBbGwgbGluZXMg bXVzdCBubyBtb3JlIHRoYW4gNzkgY2hhcmFjdGVycyB3aWRlIGFmdGVyIHRhYiBleHBhbnNpb24u CisgICAgICogTm90ZSB0aGUgZGlzdGluY3Rpb24gYmV0d2VlbiBwaHlzaWNhbCB0YWJzIChBU0NJ SSA5KSBhbmQgdGhlCisgICAgICAgaW5kZW50YXRpb24gY29udmVudGlvbnMsIHdoaWNoIGFyZTog NCBmb3IgYmxvY2sgY29udGVudHMsIDIgZm9yCisgICAgICAgbW9zdCBvdGhlciBzdHVmZiAob2J2 aW91c2x5IHRoaXMgaXMgbm90IGEgcG9ydGFiaWxpdHkgaXNzdWUsIGp1c3QKKyAgICAgICBzdHls ZSkuCisKKyAgIFsgWzQ3XUNvbnRlbnRzIF0gWyBbNDhdQy1LZXJtaXQgXSBbIFs0OV1LZXJtaXQg SG9tZSBdCisKKzMuIFNPVVJDRSBDT0RFIFBPUlRBQklMSVRZIEFORCBTVFlMRQorCisgICBDLUtl cm1pdCB3YXMgZGVzaWduZWQgaW4gMTk4NSBhcyBhIHBsYXRmb3JtLWluZGVwZW5kZW50IHJlcGxh Y2VtZW50IGZvcgorICAgdGhlIGVhcmxpZXIgVW5peCBLZXJtaXQuIEMtS2VybWl0J3MgZGVzaWdu IHdhcyBleHBlY3RlZCB0byBwcm9tb3RlCisgICBwb3J0YWJpbGl0eSwgYW5kIGp1ZGdpbmcgZnJv bSB0aGUgbnVtYmVyIG9mIHBsYXRmb3JtcyB0byB3aGljaCBpdCBoYXMKKyAgIGJlZW4gYWRhcHRl ZCBzaW5jZSB0aGVuLCB0aGUgbW9kZWwgaXMgZWZmZWN0aXZlLCBpZiBub3QgaWRlYWwKKyAgIChv YnZpb3VzbHkgaWYgd2UgaGFkIGl0IGFsbCB0byBkbyBvdmVyLCB3ZSdkIGNoYW5nZSBhIGZldyB0 aGluZ3MpLiBUbworICAgYW5zd2VyIHRoZSBvZnQtcmVwZWF0ZWQgcXVlc3Rpb246ICJXaHkgYXJl IHRoZXJlIHNvIG1hbnkgI2lmZGVmcz8iLAorICAgaXQncyBiZWNhdXNlOgorCisgICAgICogTWFu eSBvZiB0aGVtIGFyZSByZWxhdGVkIHRvIGZlYXR1cmUgc2VsZWN0aW9uIGFuZCBwcm9ncmFtIHNp emUsIGFuZAorICAgICAgIHNvIG5lZWQgdG8gYmUgdGhlcmUgYW55d2F5LgorICAgICAqIFRob3Nl IHRoYXQgdHJlYXQgY29tcGlsZXIsIGxpYnJhcnksIHBsYXRmb3JtLCBoZWFkZXItZmlsZSwgYW5k CisgICAgICAgc2ltaWxhciBkaWZmZXJlbmNlcyBoYXZlIGJ1aWx0IHVwIG92ZXIgdGltZSBhcyBo dW5kcmVkcyBvZiBwZW9wbGUKKyAgICAgICBhbGwgb3ZlciB0aGUgd29ybGQgYWRhcHRlZCBDLUtl cm1pdCB0byB0aGVpciBwYXJ0aWN1bGFyCisgICAgICAgZW52aXJvbm1lbnRzIGFuZCBzZW50IGJh Y2sgdGhlaXIgY2hhbmdlcy4gVGhlcmUgbWlnaHQgYmUgbW9yZQorICAgICAgIHBvbGl0aWNhbGx5 LWNvcnJlY3Qgd2F5cyB0byBhY2hpZXZlIHBvcnRhYmlsaXR5LCBidXQgdGhpcyBvbmUgaXMKKyAg ICAgICBuYXR1cmFsIGFuZCBwcm92ZW4uIFRoZSBiYXNpYyBpZGVhIGlzIHRvIGludHJvZHVjZSBj aGFuZ2VzIHRoYXQgY2FuCisgICAgICAgYmUgc2VsZWN0ZWQgYnkgZGVmaW5pbmcgYSBzeW1ib2ws IHdoaWNoLCBpZiBub3QgZGVmaW5lZCwgbGVhdmVzIHRoZQorICAgICAgIHByb2dyYW0gZXhhY3Rs eSBhcyBpdCB3YXMgYmVmb3JlIHRoZSBjaGFuZ2VzLgorICAgICAqIEFsdGhvdWdoIGl0IG1pZ2h0 IGJlIHBvc3NpYmxlIHRvICJjbGVhbiB1cCIgdGhlICIjaWZkZWYgbWVzcyIsCisgICAgICAgbm9i b2R5IGhhcyBhY2Nlc3MgdG8gYWxsIHRoZSBodW5kcmVkcyBvZiBwbGF0Zm9ybXMgc2VydmVkIGJ5 IHRoZQorICAgICAgICNpZmRlZnMgdG8gY2hlY2sgdGhlIHJlc3VsdHMuCisKKyAgIEFuZCB0byBh bnN3ZXIgdGhlIHNlY29uZC1tb3N0LW9mdC1yZXBlYXRlZCBxdWVzdGlvbjogIldoeSBkb24ndCB5 b3UKKyAgIGp1c3QgdXNlIEdOVSBhdXRvY29uZmlnIC8gYXV0b21ha2UgLyBhdXRvd2hhdGV2ZXIg aW5zdGVhZCBvZgorICAgaGFyZC1jb2RpbmcgYWxsIHRob3NlICNpZmRlZnM/IiBBbnN3ZXJzOgor CisgICAgICogVGhlIEdOVSB0b29scyBhcmUgbm90IGF2YWlsYWJsZSBvbiBhbGwgdGhlIHBsYXRm b3JtcyB3aGVyZSBDLUtlcm1pdAorICAgICAgIG11c3QgYmUgYnVpbHQgYW5kIEkgd291bGRuJ3Qg bmVjZXNzYXJpbHkgdHJ1c3QgdGhlbSBpZiB0aGV5IHdlcmUuCisgICAgICogRWFjaCBwbGF0Zm9y bSBpcyBhIG1vdmluZyB0YXJnZXQsIHNvIHRoZSB0b29scyB0aGVtc2VsdmVzIHdvdWxkCisgICAg ICAgbmVlZCB0byB1cGRhdGVkIGJlZm9yZSBLZXJtaXQgY291bGQgYmUgdXBkYXRlZC4KKyAgICAg KiBJdCB3b3VsZCBvbmx5IGFkZCBhbm90aGVyIGxheWVyIG9mIGNvbXBsZXhpdHkgdG8gYW4gYWxy ZWFkeSBjb21wbGV4CisgICAgICAgcHJvY2Vzcy4KKyAgICAgKiBDb252ZXJzaW9uIGF0IHRoaXMg cG9pbnQgd291bGQgbm90IGJlIHByYWN0aWNhbCB1bmxlc3MgdGhlcmUgd2FzIGEKKyAgICAgICB3 YXkgdG8gdGVzdCB0aGUgcmVzdWx0cyBvbiBhbGwgdGhlIGh1bmRyZWRzIG9mIHBsYXRmb3JtcyB3 aGVyZQorICAgICAgIEMtS2VybWl0IGlzIHN1cHBvc2VkIHRvIGJ1aWxkLgorCisgICBXaGVuIHdy aXRpbmcgY29kZSBmb3IgdGhlIHN5c3RlbS1pbmRlcGVuZGVudCBDLUtlcm1pdCBtb2R1bGVzLCBw bGVhc2UKKyAgIHN0aWNrIHRvIHRoZSBmb2xsb3dpbmcgY29kaW5nIGNvbnZlbnRpb25zIHRvIGVu c3VyZSBwb3J0YWJpbGl0eSB0byB0aGUKKyAgIHdpZGVzdCBwb3NzaWJsZSB2YXJpZXR5IG9mIEMg cHJlcHJvY2Vzc29ycywgY29tcGlsZXJzLCBhbmQgbGlua2VycywgYXMKKyAgIHdlbGwgYXMgY2Vy dGFpbiBuZXR3b3JrIGFuZC9vciBlbWFpbCB0cmFuc3BvcnRzLiBUaGUgc2FtZSBob2xkcyB0cnVl CisgICBmb3IgbWFueSBvZiB0aGUgInN5c3RlbSBkZXBlbmRlbnQiIG1vZHVsZXMgdG9vOyBwYXJ0 aWN1bGFybHkgdGhlIFVuaXgKKyAgIG9uZXMsIHNpbmNlIHRoZXkgbXVzdCBiZSBidWlsZGFibGUg YnkgYSB3aWRlIHZhcmlldHkgb2YgY29tcGlsZXJzIGFuZAorICAgbGlua2VycywgbmV3IGFuZCBv bGQuCisKKyAgIFRoaXMgbGlzdCBkb2VzIG5vdCBwdXJwb3J0IHRvIGJlIGNvbXByZWhlbnNpdmUs IGFuZCBhbHRob3VnaCBzb21lIGl0ZW1zCisgICBvbiBpdCBtaWdodCBzZWVtIGZhci1mZXRjaGVk LCB0aGV5IHdvdWxkIG5vdCBiZSBsaXN0ZWQgdW5sZXNzIEkgaGFkCisgICBlbmNvdW50ZXJlZCB0 aGVtIHNvbWV3aGVyZSwgc29tZSB0aW1lLiBJIHdpc2ggSSBoYWQga2VwdCBiZXR0ZXIgcmVjb3Jk cworICAgc28gSSBjb3VsZCBjaXRlIHNwZWNpZmljIHBsYXRmb3JtcyBhbmQgY29tcGlsZXJzLgor CisgICAgICogVHJ5IHRvIGtlZXAgdmFyaWFibGUgYW5kIGZ1bmN0aW9uIG5hbWVzIHVuaXF1ZSB3 aXRoaW4gNiBjaGFyYWN0ZXJzLAorICAgICAgIGVzcGVjaWFsbHkgaWYgdGhleSBhcmUgdXNlZCBh Y3Jvc3MgbW9kdWxlcywgc2luY2UgNiBpcyB0aGUgbWF4aW11bQorICAgICAgIGZvciBzb21lIG9s ZCBsaW5rZXJzIChhY3R1YWxseSwgdGhpcyBnb2VzIGJhY2sgdG8gVE9QUy0xMCBhbmQgLTIwCisg ICAgICAgYW5kIG90aGVyIG9sZCBERUMgT1MncyB3aGVyZSBDLUtlcm1pdCBuZXZlciByYW4gYW55 d2F5OyBhIG1vcmUKKyAgICAgICByZWFsaXN0aWMgbWF4aW11bSBpcyBwcm9iYWJseSBzb21ld2hl cmUgYmV0d2VlbiA4IGFuZCAxNikuIFdlIGtub3cKKyAgICAgICBmb3IgY2VydGFpbiB0aGF0IFZB WCBDIGhhcyBhIDMxLWNoYXJhY3RlciBtYXggYmVjYXVzZSBpdCBjb21wbGFpbnMKKyAgICAgICAt LSBvdGhlcnMgbWlnaHQgbm90IGNvbXBsYWluLCBidXQganVzdCBzaWxlbnRseSB0cnVuY2F0ZSwg dGh1cworICAgICAgIGZvbGRpbmcgdHdvIG9yIG1vcmUgcm91dGluZXMvdmFyaWFibGVzIGludG8g b25lLgorICAgICAqIEtlZXAgcHJlcHJvY2Vzc29yIHN5bWJvbHMgdW5pcXVlIHdpdGhpbiA4IGNo YXJhY3RlcnM7IHRoYXQncyB0aGUKKyAgICAgICBtYXggZm9yIHNvbWUgcHJlcHJvY2Vzc29ycyAo c29ycnksIEkgY2FuJ3QgZ2l2ZSBhIHNwZWNpZmljIGV4YW1wbGUsCisgICAgICAgYnV0IGluIDE5 ODggb3IgdGhlcmVhYm91dHMsIEkgaGFkIHRvIGNoYW5nZSBjaGFyYWN0ZXItc2V0IHN5bWJvbHMK KyAgICAgICBsaWtlIFRDX0xBVElOMSBhbmQgVENfTEFUSU4yIHRvIFRDXzFMQVRJTiBhbmQgVENf MkxBVElOIGJlY2F1c2UgdGhlCisgICAgICAgZGlnaXRzIHdlcmUgYmVpbmcgdHJ1bmNhdGVkIGFu ZCBpZ25vcmVkIG9uIGEgcGxhdGZvcm0gd2hlcmUgSQorICAgICAgIGFjdHVhbGx5IGhhZCB0byBi dWlsZCBDLUtlcm1pdCA1QTsgdW5mb3J0dW5hdGVseSBJIGRpZG4ndCBub3RlCisgICAgICAgd2hp Y2ggcGxhdGZvcm0gLS0gbWF5YmUgc29tZSBlYXJseSBVbHRyaXggdmVyc2lvbj8pCisgICAgICog RG9uJ3QgY3JlYXRlIHByZXByb2Nlc3NvciBzeW1ib2xzLCBvciB2YXJpYWJsZSBvciBmdW5jdGlv biBuYW1lcywKKyAgICAgICB0aGF0IHN0YXJ0IHdpdGggdW5kZXJzY29yZSAoXykuIFRoZXNlIGFy ZSB1c3VhbGx5IHJlc2VydmVkIGZvcgorICAgICAgIGludGVybmFsIHVzZSBieSB0aGUgY29tcGls ZXIgYW5kIGhlYWRlciBmaWxlcy4KKyAgICAgKiBEb24ndCBwdXQgI2luY2x1ZGUgZGlyZWN0aXZl cyBpbnNpZGUgZnVuY3Rpb25zIG9yIHsgYmxvY2tzIH0uCisgICAgICogRG9uJ3QgdXNlIHRoZSAj aWYgb3IgI2VsaWYgcHJlcHJvY2Vzc29yIGNvbnN0cnVjdGlvbnMsIG9ubHkgdXNlCisgICAgICAg I2lmZGVmLCAjaWZuZGVmLCAjZGVmaW5lLCAjdW5kZWYsIGFuZCAjZW5kaWYuCisgICAgICogUHV0 IHRva2VucyBhZnRlciAjZW5kaWYgaW4gY29tbWVudCBicmFja2V0cywgZS5nLiAjZW5kaWYgLyog Rk9PICovLgorICAgICAqIERvbid0IGluZGVudCBwcmVwcm9jZXNzb3Igc3RhdGVtZW50cyAtICMg bXVzdCBhbHdheXMgYmUgZmlyc3QgY2hhcgorICAgICAgIG9uIGxpbmUuCisgICAgICogRG9uJ3Qg cHV0IHdoaXRlc3BhY2UgYWZ0ZXIgIyBpbiBwcmVwcm9jZXNzb3Igc3RhdGVtZW50cy4KKyAgICAg KiBEb24ndCB1c2UgI3ByYWdtYSwgZXZlbiB3aXRoaW4gI2lmZGVmcyAtLSBpdCBtYWtlcyBzb21l CisgICAgICAgcHJlcHJvY2Vzc29ycyBnaXZlIHVwLgorICAgICAqIFNhbWUgZ29lcyBmb3IgI21v ZHVsZSwgI2lmLCBldGMgLSAjaWZkZWZzIGRvIE5PVCBwcm90ZWN0IHRoZW0uCisgICAgICogRG9u J3QgdXNlIGxvZ2ljYWwgb3BlcmF0b3JzIGluIHByZXByb2Nlc3NvciBjb25zdHJ1Y3Rpb25zLgor ICAgICAqIEF2b2lkICNpZmRlZnMgaW5zaWRlIGFyZ3VtZW50IGxpc3QgdG8gZnVuY3Rpb24gY2Fs bHMgKEkgY2FuJ3QKKyAgICAgICByZW1lbWJlciB3aHkgdGhpcyBvbmUgaXMgaGVyZSwgYnV0IHBy b2JhYmx5IG5lZWRuJ3QgYmU7IHdlIGRvIHRoaXMKKyAgICAgICBhbGwgdGhlIHRpbWUpLgorICAg ICAqIEFsd2F5cyBjYXN0IHN0cmxlbigpIGluIGV4cHJlc3Npb25zIHRvIGludDoKKyAgICAgICBp ZiAoKGludClzdHJsZW4oZm9vKSA8IHgpLi4uCisgICAgICogQXZvaWQgdHlwZWRlZnM7IHRoZXkg bWlnaHQgYmUgcG9ydGFibGUgYnV0IHRoZXkgYXJlIHZlcnkgY29uZnVzaW5nCisgICAgICAgYW5k IHRoZXJlJ3Mgbm8gd2F5IHRvIHRlc3QgZm9yIHRoZWlyIHByZXNlbmNlIG9yIGFic2VuY2UgYXQg Y29tcGlsZQorICAgICAgIHRpbWUuIFVzZSBwcmVwcm9jZXNzb3Igc3ltYm9scyBpbnN0ZWFkIGlm IHBvc3NpYmxlOyBhdCBsZWFzdCB5b3UKKyAgICAgICBjYW4gdGVzdCB0aGVpciBkZWZpbml0aW9u cy4KKyAgICAgKiBVbnNpZ25lZCBsb25nIGlzIG5vdCBwb3J0YWJsZTsgdXNlIGEgcHJlcHJvY2Vz c29yIHN5bWJvbCAoS2VybWl0CisgICAgICAgdXNlcyBVTE9ORyBmb3IgdGhpcykuCisgICAgICog TG9uZyBsb25nIGlzIG5vdCBwb3J0YWJsZS4gSWYgeW91IHJlYWxseSBuZWVkIGl0LCBiZSBjcmVh dGl2ZS4KKyAgICAgKiBTaW1pbGFybHkgMTIzNExMIGlzIG5vdCBwb3J0YWJsZSwgbm9yIGFsbW9z dCBhbnkgb3RoZXIgY29uc3RhbnQKKyAgICAgICBtb2RpZmllciBvdGhlciB0aGFuIEwuCisgICAg ICogVW5zaWduZWQgY2hhciBpcyBub3QgcG9ydGFibGUsIHVzZSBDSEFSIChhIHByZXByb2Nlc3Nv ciBzeW1ib2wKKyAgICAgICBkZWZpbmVkIGluIHRoZSBLZXJtaXQgaGVhZGVyIGZpbGVzKSBhbmQg YWx3YXlzIHRha2UgcHJlY2F1dGlvbnMKKyAgICAgICBhZ2FpbnN0IGNoYXJhY3RlciBzaWduYWdl IChtb3JlIGFib3V0IHRoaXMgWzUwXWJlbG93KS4KKyAgICAgKiBEb24ndCB1c2UgaW5pdGlhbGl6 ZXJzIHdpdGggYXV0b21hdGljIGFycmF5cyBvciBzdHJ1Y3RzOiBpdCdzIG5vdAorICAgICAgIHBv cnRhYmxlLgorICAgICAqIERvbid0IHVzZSBiaWcgYXV0b21hdGljIGFycmF5cyBvciBzdHJ1Y3Rz IGluIGZ1bmN0aW9ucyB0aGF0IG1pZ2h0CisgICAgICAgYmUgY2FsbGVkIHJlY3Vyc2l2ZWx5OyBz b21lIHBsYXRmb3JtcyBoYXZlIGZpeGVkLXNpemUgc3RhY2tzIChlLmcuCisgICAgICAgV2luZG93 cyA5eDogMjU2SykgYW5kIHJlY3Vyc2l2ZSBmdW5jdGlvbnMgY3Jhc2ggd2l0aCBzdGFjaworICAg ICAgIG92ZXJmbG93LiBFdmVuIHdoZW4gdGhlcmUgaXMgbm90IGEgY29tcGlsZXIgbGltaXRhdGlv biwgdGhpcyBjYXVzZXMKKyAgICAgICBtZW1vcnkgdG8gYmUgY29uc3VtZWQgd2l0aG91dCBib3Vu ZCwgYW5kIGNhbiBlbmQgdXAgZmlsbGluZyBzd2FwCisgICAgICAgc3BhY2UuCisgICAgICogRG9u J3QgYXNzdW1lIHRoYXQgc3RydWN0IGFzc2lnbm1lbnQgcGVyZm9ybXMgYSBjb3B5LCBvciB0aGF0 IGl0CisgICAgICAgZXZlbiBleGlzdHMuCisgICAgICogRG9uJ3QgdXNlIHNpemVvZiB0byBnZXQg dGhlIHNpemUgb2YgYW4gYXJyYXk7IHNvbWVvbmUgbWlnaHQgY29tZQorICAgICAgIGFsb25nIGxh dGVyIGFuZCBhbmQgY2hhbmdlIGl0IGZyb20gc3RhdGljIHRvIG1hbGxvYydkLiBBbHdheXMgdXNl IGEKKyAgICAgICBzeW1ib2wgdG8gcmVmZXIgdG8gdGhlIGFycmF5J3Mgc2l6ZS4KKyAgICAgKiBE b24ndCBwdXQgcHJvdG90eXBlcyBmb3Igc3RhdGljIGZ1bmN0aW9ucyBpbnRvIGhlYWRlciBmaWxl cyB0aGF0CisgICAgICAgYXJlIHVzZWQgYnkgbW9kdWxlcyB0aGF0IGRvbid0IGNvbnRhaW4gdGhh dCBmdW5jdGlvbjsgdGhlIGxpbmsgc3RlcAorICAgICAgIGNhbiBmYWlsIHdpdGggdW5yZXNvbHZl ZCByZWZlcmVuY2VzIChlLmcuIG9uIEFPUy9WUykuCisgICAgICogQXZvaWQgdGhlIGNvbnN0cnVj dGlvbiAqKytwICh0aGUgb3JkZXIgb2YgZXZhbHVhdGlvbiB2YXJpZXM7IGl0CisgICAgICAgc2hv dWxkbid0IGJ1dCBhdCBsZWFzdCBvbmUgY29tcGlsZXIgaGFkIGEgYnVnIHRoYXQgbWFkZSBtZSBp bmNsdWRlCisgICAgICAgdGhpcyBpdGVtKS4KKyAgICAgKiBEb24ndCB1c2UgdHJpcGxlIGFzc2ln bm1lbnRzLCBsaWtlIGEgPSBiID0gYyA9IDA7IChvciBxdWFkcnVwbGUsCisgICAgICAgZXRjKS4g U29tZSBjb21waWxlcnMgZ2VuZXJhdGUgYmFkIGNvZGUgZm9yIHRoZXNlLCBvciBjcmFzaCwgZXRj CisgICAgICAgKHNvbWUgdmVyc2lvbiBvZiBERUMgQyBhcyBJIHJlY2FsbCkuCisgICAgICogU29t ZSBjb21waWxlcnMgZG9uJ3QgYWxsb3cgc3RydWN0dXJlIG1lbWJlcnMgdG8gaGF2ZSB0aGUgc2Ft ZSBuYW1lcworICAgICAgIGFzIG90aGVyIGlkZW50aWZpZXJzLiBUcnkgdG8gZ2l2ZSBzdHJ1Y3R1 cmUgbWVtYmVycyB1bmlxdWUgbmFtZXMuCisgICAgICogRG9uJ3QgYXNzdW1lIGFueXRoaW5nIGFi b3V0IG9yZGVyIG9mIGV2YWx1YXRpb24gaW4gYm9vbGVhbgorICAgICAgIGV4cHJlc3Npb25zLCBv ciB0aGF0IHRoZXkgd2lsbCBzdG9wIGVhcmx5IGlmIGEgcmVxdWlyZWQgY29uZGl0aW9uCisgICAg ICAgaXMgbm90IHRydWUsIGUuZy46CisgIGlmIChpID4gMCAmJiBwW2ktMV0gPT0gYmxhaCkKKwor ICAgICAgIGNhbiBzdGlsbCBkdW1wIGNvcmUgaWYgaSA9PSAwIChob3BlZnVsbHkgdGhpcyBpcyBu b3QgdHJ1ZSBvZiBhbnkKKyAgICAgICBtb2Rlcm4gY29tcGlsZXIsIGJ1dCBJIHdvdWxkIG5vdCBo YXZlIHNhaWQgdGhpcyBpZiBpdCBkaWQgbm90CisgICAgICAgYWN0dWFsbHkgaGFwcGVuIHNvbWV3 aGVyZSkuCisgICAgICogRG9uJ3QgaGF2ZSBhIHN3aXRjaCgpIHN0YXRlbWVudCB3aXRoIG5vIGNh c2VzIChlLmcuIGJlY2F1c2Ugb2YKKyAgICAgICAjaWZkZWZzKTsgdGhpcyBpcyBhIGZhdGFsIGVy cm9yIGluIHNvbWUgY29tcGlsZXJzLgorICAgICAqIERvbid0IHB1dCBsb3RzIG9mIGNvZGUgaW4g YSBzd2l0Y2ggY2FzZTsgbW92ZSBpdCBvdXQgdG8gYSBzZXBhcmF0ZQorICAgICAgIGZ1bmN0aW9u OyBzb21lIGNvbXBpbGVycyBydW4gb3V0IG9mIG1lbW9yeSB3aGVuIHByZXNlbnRlZCB3aXRoIGEK KyAgICAgICBodWdlIHN3aXRjaCgpIHN0YXRlbWVudCAtLSBpdCdzIG5vdCB0aGUgbnVtYmVyIG9m IGNhc2VzIHRoYXQKKyAgICAgICBtYXR0ZXJzOyBpdCdzIHRoZSBvdmVyYWxsIGFtb3VudCBvZiBj b2RlLgorICAgICAqIFNvbWUgY29tcGlsZXJzIG1pZ2h0IGFsc28gbGltaXQgdGhlIG51bWJlciBv ZiBzd2l0Y2goKSBjYXNlcywgZS5nLgorICAgICAgIHRvIDI1NC4KKyAgICAgKiBEb24ndCBwdXQg YW55dGhpbmcgYmV0d2VlbiAic3dpdGNoKCkgeyIgYW5kICJjYXNlOiIgLS0gc3dpdGNoCisgICAg ICAgYmxvY2tzIGFyZSBub3QgbGlrZSBvdGhlciBibG9ja3MuCisgICAgICogRG9uJ3QganVtcCBp bnRvIG9yIG91dCBvZiBzd2l0Y2hlcy4KKyAgICAgKiBEb24ndCBtYWtlIGNoYXJhY3Rlci1zdHJp bmcgY29uc3RhbnRzIGxvbmdlciB0aGFuIGFib3V0IDI1MCBieXRlcy4KKyAgICAgICBMb25nZXIg c3RyaW5ncyBzaG91bGQgYmUgYnJva2VuIHVwIGludG8gYXJyYXlzIG9mIHN0cmluZ3MuCisgICAg ICogRG9uJ3Qgd3JpdGUgaW50byBjaGFyYWN0ZXItc3RyaW5nIGNvbnN0YW50cyAob2J2aW91c2x5 KS4gRXZlbiB3aGVuCisgICAgICAgeW91IGtub3cgeW91IGFyZSBub3Qgd3JpdGluZyBwYXN0IHRo ZSBlbmQ7IHRoZSBjb21waWxlciBvciBsaW5rZXIKKyAgICAgICBtaWdodCBoYXZlIHB1dCB0aGVt IGludG8gcmVhZC1vbmx5IGFuZC9vciBzaGFyZWQgbWVtb3J5LCBhbmQvb3IKKyAgICAgICBjb2Fs ZXNjZWQgbXVsdGlwbGUgZXF1YWwgY29uc3RhbnRzIHNvIGlmIHlvdSBjaGFuZ2Ugb25lIHlvdSBj aGFuZ2UKKyAgICAgICB0aGVtIGFsbC4KKyAgICAgKiBEb24ndCBkZXBlbmQgb24gJ1xyJyBiZWlu ZyBjYXJyaWFnZSByZXR1cm4uCisgICAgICogRG9uJ3QgZGVwZW5kIG9uICdcbicgYmVpbmcgbGlu ZWZlZWQgb3IgZm9yIHRoYXQgbWF0dGVyIGFueSBTSU5HTEUKKyAgICAgICBjaGFyYWN0ZXIuCisg ICAgICogRG9uJ3QgZGVwZW5kIG9uICdccicgYW5kICdcbicgYmVpbmcgZGlmZmVyZW50IChlLmcu IGFzIHNlcGFyYXRlCisgICAgICAgc3dpdGNoKCkgY2FzZXMpLgorICAgICAqIEluIG90aGVyIHdv cmRzLCBkb24ndCB1c2UgXG4gb3IgXHIgdG8gc3RhbmQgZm9yIHNwZWNpZmljCisgICAgICAgY2hh cmFjdGVyczsgdXNlIFwwMTIgYW5kIFwwMTUgaW5zdGVhZC4KKyAgICAgKiBEb24ndCBjb2RlIGZv ciAiYnV6endvcmQgMS4wIGNvbXBsaWFuY2UiLCB1bmxlc3MgImJ1enp3b3JkIiBpcyBLJlIKKyAg ICAgICBhbmQgIjEuMCIgaXMgdGhlIGZpcnN0IGVkaXRpb24uCisgICAgICogRG9uJ3QgdXNlIG9y IGRlcGVuZCBvbiBhbnl0aGluZ190IChzaXplX3QsIHBpZF90LCBldGMpLCBleGNlcHQKKyAgICAg ICB0aW1lX3QsIHdpdGhvdXQgI2lmZGVmIHByb3RlY3Rpb24gKHRpbWVfdCBpcyB0aGUgb25seSBv bmUgSSd2ZQorICAgICAgIGZvdW5kIHRoYXQgaXMgYWNjZXB0ZWQgZXZlcnl3aGVyZSkuIFRoaXMg aXMgYSB0b3VnaCBvbmUgYmVjYXVzZSB0aGUKKyAgICAgICBzYW1lIGZ1bmN0aW9uIG1pZ2h0IHJl cXVpcmUgKHNheSkgYSBzaXplX3QgYXJnIG9uIG9uZSBwbGF0Zm9ybSwKKyAgICAgICB3aGVyZWFz IHNpemVfdCBpcyB1bmhlYXJkIG9mIG9uIGFub3RoZXI7IG9yIHdvcnNlLCBpdCBtaWdodCByZXF1 aXJlCisgICAgICAgYSB0b3RhbGx5IGRpZmZlcmVudCBkYXRhIHR5cGUsIGxpa2UgaW50IG9yIGxv bmcgb3Igc29tZSBvdGhlcgorICAgICAgIHR5cGVkZWYnZCB0aGluZy4gSXQgaGFzIG9mdGVuIHBy b3ZlZCBuZWNlc3NhcnkgdG8gZGVmaW5lIGEgc3ltYm9sCisgICAgICAgdG8gc3RhbmQgZm9yIHRo ZSB0eXBlIG9mIGEgcGFydGljdWxhciBhcmd1bWVudCB0byBhIHBhcnRpY3VsYXIKKyAgICAgICBs aWJyYXJ5IG9yIHN5c3RlbSBmdW5jdGlvbiB0byBnZXQgYXJvdW5kIHRoaXMgcHJvYmxlbS4KKyAg ICAgKiBEb24ndCB1c2Ugb3IgZGVwZW5kIG9uIGludGVybmF0aW9uYWxpemF0aW9uICgiaTE4biIp IGZlYXR1cmVzLAorICAgICAgIHdjaGFyX3QsIGxvY2FsZXMsIGV0YywgaW4gcG9ydGFibGUgY29k ZTsgdGhleSBhcmUgbm90IHBvcnRhYmxlLgorICAgICAgIEFueXdheSwgbG9jYWxlcyBhcmUgbm90 IHRoZSByaWdodCBtb2RlbCBmb3IgS2VybWl0J3MKKyAgICAgICBtdWx0aS1jaGFyYWN0ZXItc2V0 IHN1cHBvcnQuIEtlcm1pdCBkb2VzIGFsbCBjaGFyYWN0ZXItc2V0CisgICAgICAgY29udmVyc2lv biBpdHNlbGYgYW5kIGRvZXMgbm90IHVzZSBhbnkgZXh0ZXJuYWwgbGlicmFyaWVzIG9yCisgICAg ICAgZnVuY3Rpb25zLgorICAgICAqIEluIHBhcnRpY3VsYXIsIGRvbid0IHVzZSBhbnkgbGlicmFy eSBmdW5jdGlvbnMgdGhhdCBkZWFsIHdpdGggd2lkZQorICAgICAgIGNoYXJhY3RlcnMgb3IgVW5p Y29kZSBpbiBhbnkgZm9ybS4gVGhlc2UgYXJlIG5vdCBvbmx5IG5vbnBvcnRhYmxlLAorICAgICAg IGJ1dCBhIGNvbnN0YW50bHkgc2hpZnRpbmcgdGFyZ2V0IChlLmcuIHRoZSBvbmVzIGluIGdsaWJj KS4KKyAgICAgKiBEb24ndCBtYWtlIGFueSBhc3N1bXB0aW9uIGFib3V0IHNpZ25hbCBoYW5kbGVy IHR5cGUuIEl0IGNhbiBiZQorICAgICAgIHZvaWQsIGludCwgbG9uZywgb3IgYW55dGhpbmcgZWxz ZS4gQWx3YXlzIGRlY2xhcmUgc2lnbmFsIGhhbmRsZXJzCisgICAgICAgYXMgU0lHVFlQIChzZWUg ZGVmaW5pdGlvbiBpbiBja2NkZWIuaCBhbmQgYXVnbWVudCBpdCBpZiBuZWNlc3NhcnkpCisgICAg ICAgYW5kIGFsd2F5cyB1c2UgU0lHUkVUVVJOIGF0IGV4aXQgcG9pbnRzIGZyb20gc2lnbmFsIGhh bmRsZXJzLgorICAgICAqIFNpZ25hbHMgc2hvdWxkIGFsd2F5cyBiZSByZS1hcm1lZCB0byBiZSB1 c2VkIGFnYWluICh0aGlzIGJhcmVseQorICAgICAgIHNjcmF0Y2hlcyB0aGUgc3VyZmFjZSAtLSB0 aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiBCU0QvVjcgYW5kIFN5c3RlbQorICAgICAgIFYgYW5kIFBP U0lYIHNpZ25hbCBoYW5kbGluZyBhcmUgbnVtZXJvdXMsIGFuZCBzb21lIHBsYXRmb3JtcyBkbyBu b3QKKyAgICAgICBldmVuIHN1cHBvcnQgc2lnbmFscywgYWxhcm1zLCBvciBsb25nam1wcyBjb3Jy ZWN0bHkgb3IgYXQgYWxsIC0tCisgICAgICAgYXZvaWQgYWxsIG9mIHRoaXMgaWYgeW91IGNhbiku CisgICAgICogT24gdGhlIG90aGVyIGhhbmQsIGRvbid0IGFzc3VtZSB0aGF0IHNpZ25hbHMgYXJl IGRpc2FybWVkIGFmdGVyCisgICAgICAgYmVpbmcgcmFpc2VkLiBJbiBzb21lIHBsYXRmb3JtcyB5 b3UgaGF2ZSB0byByZS1hcm0gdGhlbSwgaW4gb3RoZXJzCisgICAgICAgdGhleSBzdGF5IGFybWVk LgorICAgICAqIERvbid0IGNhbGwgbWFsbG9jKCkgYW5kIGZyaWVuZHMgZnJvbSBhIHNpZ25hbCBo YW5kbGVyOyBkb24ndCBkbworICAgICAgIGFueXRoaW5nIGJ1dCBzZXR0aW5nIGludGVnZXIgZ2xv YmFsIHZhcmlhYmxlcyBpbiBhIHNpZ25hbCBoYW5kbGVyLgorICAgICAqIG1hbGxvYygpIGRvZXMg bm90IGluaXRpYWxpemUgYWxsb2NhdGVkIG1lbW9yeSAtLSBpdCBuZXZlciBzYWlkIGl0CisgICAg ICAgZGlkLiBEb24ndCBleHBlY3QgaXQgdG8gYmUgYWxsIDAncy4KKyAgICAgKiBEaWQgWW91IEtu b3c6IG1hbGxvYygpIGNhbiBzdWNjZWVkIGFuZCB0aGUgcHJvZ3JhbSBjYW4gc3RpbGwgZHVtcAor ICAgICAgIGNvcmUgbGF0ZXIgd2hlbiBpdCBhdHRlbXB0cyB0byB1c2UgdGhlIG1hbGxvYydkIG1l bW9yeT8gKFRoaXMKKyAgICAgICBoYXBwZW5zIHdoZW4gYWxsb2NhdGlvbiBpcyBkZWZlcnJlZCB1 bnRpbCB1c2UgYW5kIHN3YXAgc3BhY2UgaXMKKyAgICAgICBmdWxsLikKKyAgICAgKiBtZW1zZXQo KSwgbWVtbW92ZSgpLCBhbmQgbWVtY3B5KCkgYXJlIG5vdCBwb3J0YWJsZSwgZG9uJ3QgdXNlIHRo ZW0KKyAgICAgICB3aXRob3V0IHByb3RlY3RpbmcgdGhlbSBpbiBpZmRlZnMgKHdlIGhhdmUgVVNF X01FTUNQWSBmb3IgdGhpcykuCisgICAgICAgYnplcm8oKS9iY29weSgpIHRvbywgZXhjZXB0IHdl J3JlIGd1YXJhbnRlZWQgdG8gaGF2ZQorICAgICAgIGJ6ZXJvKCkvYmNvcHkoKSB3aGVuIHVzaW5n IHRoZSBzb2NrZXRzIGxpYnJhcnkgKG5vdCByZWFsbHkpLiBTZWUKKyAgICAgICBleGFtcGxlcyBp biB0aGUgc291cmNlLgorICAgICAqIERvbid0IGFzc3VtZSB0aGF0IHN0cm5jcHkoKSBzdG9wcyBv biB0aGUgZmlyc3QgbnVsbCBieXRlIC0tIG1vc3QKKyAgICAgICB2ZXJzaW9ucyBhbHdheXMgY29w eSB0aGUgbnVtYmVyIG9mIGJ5dGVzIGdpdmVuIGluIGFyZyAzLCBwYWRkaW5nCisgICAgICAgb3V0 IHdpdGggMCdzIGFuZCBvdmVyd3JpdGluZyB3aGF0ZXZlciB3YXMgdGhlcmUgYmVmb3JlLiBVc2UK KyAgICAgICBDLUtlcm1pdCBja3N0cm5jcHkoKSBpZiB5b3Ugd2FudCBwcmVkaWN0YWJsZSBub24t cGFkZGluZyBiZWhhdmlvciwKKyAgICAgICBndWFyYW50ZWVkIE5VTC10ZXJtaW5hdGlvbiwgYW5k IGEgdXNlZnVsIHJldHVybiBjb2RlLgorICAgICAqIERJRCBZT1UgS05PVy4uIHRoYXQgc29tZSB2 ZXJzaW9ucyBvZiBpbmV0X2JsYWgoKSByb3V0aW5lcyByZXR1cm4gSVAKKyAgICAgICBhZGRyZXNz ZXMgaW4gbmV0d29yayBieXRlIG9yZGVyLCB3aGlsZSBvdGhlcnMgcmV0dXJuIHRoZW0gbG9jYWwK KyAgICAgICBtYWNoaW5lIGJ5dGUgb3JkZXI/IFNvIHBhc3NpbmcgdGhlbSB0byBudG9ocygpIG9y IHdoYXRldmVyIGlzIG5vdAorICAgICAgIGFsd2F5cyB0aGUgcmlnaHQgdGhpbmcgdG8gZG8uCisg ICAgICogRG9uJ3QgdXNlIEFOU0ktZm9ybWF0IGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyB3aXRob3V0 ICNpZmRlZgorICAgICAgIENLX0FOU0lDLCBhbmQgYWx3YXlzIHByb3ZpZGUgYW4gI2Vsc2UgZm9y IHRoZSBub24tQU5TSSBjYXNlLgorICAgICAqIFVzZSB0aGUgS2VybWl0IF9QUk9UT1RZUCgpIG1h Y3JvIGZvciBkZWNsYXJpbmcgZnVuY3Rpb24gcHJvdG90eXBlczsKKyAgICAgICBpdCB3b3JrcyBp biBib3RoIHRoZSBBTlNJIGFuZCBub24tQU5TSSBjYXNlcy4KKyAgICAgKiBEb24ndCBkZXBlbmQg b24gYW55IG90aGVyIEFOU0kgcHJlcHJvY2Vzc29yIGZlYXR1cmVzIGxpa2UgInBhc3RpbmciCisg ICAgICAgLS0gdGhleSBhcmUgb2Z0ZW4gbWlzc2luZyBvciBub25vcGVyYXRpb25hbC4KKyAgICAg KiBEb24ndCBhc3N1bWUgYW55IEMrKyBzeW50YXggb3Igc2VtYW50aWNzLgorICAgICAqIERvbid0 IHVzZSAvLyBhcyBhIGNvbW1lbnQgaW50cm9kdWNlci4gQyBpcyBub3QgQysrLgorICAgICAqIERv bid0IGRlY2xhcmUgYSBzdHJpbmcgYXMgImNoYXIgZm9vW10iIGluIG9uZSBtb2R1bGUgYW5kICJl eHRlcm4KKyAgICAgICBjaGFyICogZm9vIiBpbiBhbm90aGVyLCBvciB2aWNlLXZlcnNhOiB0aGlz IGNhdXNlcyBjb3JlIGR1bXBzLgorICAgICAqIFdpdGggY29tcGlsZXIgbWFrZXJzIGZhbGxpbmcg YWxsIG92ZXIgdGhlbXNlbHZlcyB0cnlpbmcgdG8gb3V0ZG8KKyAgICAgICBlYWNoIG90aGVyIGlu IEFOU0kgc3RyaWN0bmVzcywgaXQgaGFzIGJlY29tZSBpbmNyZWFzaW5nbHkgbmVjZXNzYXJ5Cisg ICAgICAgdG8gY2FzdCBFVkVSWVRISU5HLiBFc3BlY2lhbGx5IGNoYXIgdnMgdW5zaWduZWQgY2hh ci4gV2UgbmVlZCB0bworICAgICAgIHVzZSB1bnNpZ25lZCBjaGFycyBpZiB3ZSB3YW50IHRvIGRl YWwgd2l0aCA4LWJpdCBjaGFyYWN0ZXIgc2V0cywKKyAgICAgICBidXQgbW9zdCBjaGFyYWN0ZXIt IGFuZCBzdHJpbmctb3JpZW50ZWQgQVBJcyB3YW50IChzaWduZWQpIGNoYXIKKyAgICAgICBhcmd1 bWVudHMsIHNvIGV4cGxpY2l0IGNhc3RzIGFyZSBuZWNlc3NhcnkuIEl0IHdvdWxkIGJlIG5pY2Ug aWYKKyAgICAgICBldmVyeSBjb21waWxlciBoYWQgYSAtZnVuc2lnbmVkLWNoYXIgb3B0aW9uIChh cyBnY2MgZG9lcyksIGJ1dCB0aGV5CisgICAgICAgZG9uJ3QuCisgICAgICogYVt4XSwgd2hlcmUg eCBpcyBhbiB1bnNpZ25lZCBjaGFyLCBjYW4gcHJvZHVjZSBhIHdpbGQgbWVtb3J5CisgICAgICAg cmVmZXJlbmNlIGlmIHgsIHdoZW4gcHJvbW90ZWQgdG8gYW4gaW50LCBiZWNvbWVzIG5lZ2F0aXZl LiBDYXN0IGl0CisgICAgICAgdG8gKHVuc2lnbmVkKSwgZXZlbiB0aG91Z2ggaXQgQUxSRUFEWSBJ UyB1bnNpZ25lZC4KKyAgICAgKiBCZSBjYXJlZnVsIGhvdyB5b3UgZGVjbGFyZSBmdW5jdGlvbnMg dGhhdCBoYXZlIGNoYXIgb3IgbG9uZworICAgICAgIGFyZ3VtZW50czsgZm9yIEFOU0kgY29tcGls ZXJzIHlvdSBNVVNUIHVzZSBBTlNJIGRlY2xhcmF0aW9ucyB0bworICAgICAgIGF2b2lkIHByb21v dGlvbiBwcm9ibGVtcywgYnV0IHlvdSBjYW4ndCB1c2UgQU5TSSBkZWNsYXJhdGlvbnMgd2l0aAor ICAgICAgIG5vbi1BTlNJIGNvbXBpbGVycy4gVGh1cyBkZWNsYXJhdGlvbnMgb2Ygc3VjaCBmdW5j dGlvbnMgbXVzdCBiZQorICAgICAgIGhpZGVvdXNseSBlbnR3aW5lZCBpbiAjaWZkZWZzLiBFeGFt cGxlOgorICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICBQdXQgY2hhcmFjdGVyIGlu IHNlcnZlciBjb21tYW5kIGJ1ZmZlciAgKi8KKyAgI2lmZGVmIENLX0FOU0lDCisgIHB1dHNydihj aGFyIGMpCisgICNlbHNlCisgIHB1dHNydihjKSBjaGFyIGM7CisgICNlbmRpZiAvKiBDS19BTlNJ QyAqLworICAvKiBwdXRzcnYgKi8geworICAgICAgKnNydnB0cisrID0gYzsKKyAgICAgICpzcnZw dHIgPSAnXDAnOyAgICAgICAgICAgLyogTWFrZSBzdXJlIGJ1ZmZlciBpcyBudWxsLXRlcm1pbmF0 ZWQgKi8KKyAgICAgIHJldHVybigwKTsKKyAgfQorCisgICAgICogQmUgY2FyZWZ1bCBob3cgeW91 IHJldHVybiBjaGFyYWN0ZXJzIGZyb20gZnVuY3Rpb25zIHRoYXQgcmV0dXJuIGludAorICAgICAg IHZhbHVlcyAtLSAiZ2V0Yy1saWtlIGZ1bmN0aW9ucyIgLS0gaW4gdGhlIEFOU0kgd29ybGQuIFVu bGVzcyB5b3UKKyAgICAgICBleHBsaWNpdGx5IGNhc3QgdGhlIHJldHVybiB2YWx1ZSB0byAodW5z aWduZWQpLCBpdCBpcyBsaWtlbHkgdG8gYmUKKyAgICAgICAicHJvbW90ZWQiIHRvIGFuIGludCBh bmQgaGF2ZSBpdHMgc2lnbiBleHRlbmRlZC4KKyAgICAgKiBBdCBsZWFzdCBvbmUgY29tcGlsZXIg KHRoZSBvbmUgb24gREVDIE9TRi8xIDEuMykgdHJlYXRzICIvKiIgYW5kCisgICAgICAgIiovIiB3 aXRoaW4gc3RyaW5nIGNvbnN0YW50cyBhcyBjb21tZW50IGJlZ2luIGFuZCBlbmQuIE5vIGFtb3Vu dCBvZgorICAgICAgICNpZmRlZnMgd2lsbCBnZXQgYXJvdW5kIHRoaXMgb25lLiBZb3Ugc2ltcGx5 IGNhbid0IHB1dCB0aGVzZQorICAgICAgIHNlcXVlbmNlcyBpbiBhIHN0cmluZyBjb25zdGFudCwg ZS5nLiAiL3Vzci9sb2NhbC9kb2MvKi4qIi4KKyAgICAgKiBBdm9pZCBwdXR0aW5nIG11bHRpcGxl IG1hY3JvIHJlZmVyZW5jZXMgb24gYSBzaW5nbGUgbGluZSwgZS5nLjoKKyAgcHV0Y2hhcihCUyk7 IHB1dGNoYXIoU1ApOyBwdXRjaGFyKEJTKQorCisgICBUaGlzIG92ZXJmbG93cyB0aGUgQ1BQIG91 dHB1dCBidWZmZXIgb2YgbW9yZSB0aGFuIGEgZmV3IEMgcHJlcHJvY2Vzc29ycworICAgKHRoaXMg aGFwcGVuZWQsIGZvciBleGFtcGxlLCB3aXRoIFN1bk9TIDQuMSBjYywgd2hpY2ggZXZpZGVudGx5 IGhhcyBhCisgICAxSyBtYWNybyBleHBhbnNpb24gYnVmZmVyKS4KKworICAgQy1LZXJtaXQgbmVl ZHMgY29uc3RhbnQgYWRqdXN0bWVudCB0byBuZXcgT1MgYW5kIGNvbXBpbGVyIHJlbGVhc2VzLgor ICAgRXZlcnkgbmV3IE9TIHJlbGVhc2Ugc2h1ZmZsZXMgaGVhZGVyIGZpbGVzIG9yIHRoZWlyIGNv bnRlbnRzLCBvcgorICAgcHJvdG90eXBlcywgb3IgZGF0YSB0eXBlcywgb3IgbGV2ZWxzIG9mIEFO U0kgc3RyaWN0bmVzcywgZXRjLiBFdmVyeQorICAgdGltZSB5b3UgbWFrZSBhbiBhZGp1c3RtZW50 IHRvIHJlbW92ZSBhIG5ldyBjb21waWxhdGlvbiBlcnJvciwgQkUgVkVSWQorICAgQ0FSRUZVTCB0 byAjaWZkZWYgaXQgb24gYSBzeW1ib2wgdW5pcXVlIHRvIHRoZSBuZXcgY29uZmlndXJhdGlvbiBz bworICAgdGhhdCB0aGUgcHJldmlvdXMgY29uZmlndXJhdGlvbiAoYW5kIGFsbCBvdGhlciBjb25m aWd1cmF0aW9ucyBvbiBhbGwKKyAgIG90aGVyIHBsYXRmb3JtcykgcmVtYWluIGFzIGJlZm9yZS4K KworICAgQXNzdW1lIG5vdGhpbmcuIERvbid0IGFzc3VtZSBoZWFkZXIgZmlsZXMgYXJlIHdoZXJl IHRoZXkgYXJlIHN1cHBvc2VkCisgICB0byBiZSwgdGhhdCB0aGV5IGNvbnRhaW4gd2hhdCB5b3Ug dGhpbmsgdGhleSBjb250YWluLCB0aGF0IHRoZXkgZGVmaW5lCisgICBzcGVjaWZpYyBzeW1ib2xz IHRvIGhhdmUgY2VydGFpbiB2YWx1ZXMgLS0gb3IgZGVmaW5lIHRoZW0gYXQgYWxsISBEb24ndAor ICAgYXNzdW1lIHN5c3RlbSBoZWFkZXIgZmlsZXMgcHJvdGVjdCB0aGVtc2VsdmVzIGFnYWluc3Qg bXVsdGlwbGUKKyAgIGluY2x1c2lvbi4gRG9uJ3QgYXNzdW1lIHRoYXQgcGFydGljdWxhciBzeXN0 ZW0gb3IgbGlicmFyeSBjYWxscyBhcmUKKyAgIGF2YWlsYWJsZSwgb3IgdGhhdCB0aGUgYXJndW1l bnRzIGFyZSB3aGF0IHlvdSB0aGluayB0aGV5IGFyZSAtLSBvcmRlciwKKyAgIGRhdGEgdHlwZSwg cGFzc2VkIGJ5IHJlZmVyZW5jZSB2cyB2YWx1ZSwgZXRjLiBCZSBjb25zZXJ2YXRpdmUgd2hlbgor ICAgYXR0ZW1wdGluZyB0byB3cml0ZSBwb3J0YWJsZSBjb2RlLiBBdm9pZCBhbGwgYWR2YW5jZWQg ZmVhdHVyZXMuCisKKyAgIElmIHlvdSBzZWUgc29tZXRoaW5nIHRoYXQgZG9lcyBub3QgbWFrZSBz ZW5zZSwgZG9uJ3QgYXNzdW1lIGl0J3MgYQorICAgbWlzdGFrZSAtLSBpdCBtaWdodCBiZSB0aGVy ZSBmb3IgYSByZWFzb24sIGFuZCBjaGFuZ2luZyBpdCBvciByZW1vdmluZworICAgaXMgbGlrZWx5 IHRvIGNhdXNlIGNvbXBpbGF0aW9uLCBsaW5raW5nLCBvciBydW50aW1lIGZhaWx1cmVzIHNvbWV0 aW1lLAorICAgc29tZXdoZXJlLiBTb21lIGh1Z2UgcGVyY2VudGFnZSBvZiB0aGUgY29kZSwgZXNw ZWNpYWxseSBpbiB0aGUKKyAgIHBsYXRmb3JtLWRlcGVuZGVudCBtb2R1bGVzLCBpcyB3b3JrYXJv dW5kcyBmb3IgY29tcGlsZXIsIGxpbmtlciwgb3IgQVBJCisgICBidWdzLgorCisgICBCdXQgZmlu YWxseS4uLiBmZWVsIGZyZWUgdG8gdmlvbGF0ZSBhbnkgb3IgYWxsIG9mIHRoZXNlIHJ1bGVzIGlu CisgICBwbGF0Zm9ybS1zcGVjaWZpYyBtb2R1bGVzIGZvciBlbnZpcm9ubWVudHMgaW4gd2hpY2gg dGhlIHJ1bGVzIGFyZQorICAgY2VydGFpbiBub3QgdG8gYXBwbHkuIEZvciBleGFtcGxlLCBpbiBW TVMtc3BlY2lmaWMgY29kZSwgaXQgaXMgT0sgdG8KKyAgIHVzZSAjaWYsIGJlY2F1c2UgVkFYIEMs IERFQyBDLCBhbmQgVk1TIEdDQyBhbGwgc3VwcG9ydCBpdC4KKworICAgWyBbNTFdQ29udGVudHMg XSBbIFs1Ml1DLUtlcm1pdCBdIFsgWzUzXUtlcm1pdCBIb21lIF0KKworMy4xLiBNZW1vcnkgTGVh a3MKKworICAgVGhlIEMgbGFuZ3VhZ2UgYW5kIHN0YW5kYXJkIEMgbGlicmFyeSBhcmUgbm90b3Jp b3VzbHkgaW5hZGVxdWF0ZSBhbmQKKyAgIHVuc2FmZS4gU3RyaW5ncyBhcmUgYXJyYXlzIG9mIGNo YXJhY3RlcnMsIHVzdWFsbHkgcmVmZXJlbmNlZCB0aHJvdWdoCisgICBwb2ludGVycy4gVGhlcmUg aXMgbm8gbmF0aXZlIHN0cmluZyBkYXRhdHlwZS4gQnVmZmVycyBhcmUgZml4ZWQgc2l6ZSwKKyAg IGFuZCBDIHByb3ZpZGVzIG5vIHJ1bnRpbWUgYm91bmRzIGNoZWNraW5nLCB0aHVzIGFsbG93aW5n IG92ZXJ3cml0aW5nIG9mCisgICBvdGhlciBkYXRhIG9yIGV2ZW4gcHJvZ3JhbSBjb2RlLiBXaXRo IHRoZSBwb3B1bGFyaXphdGlvbiBvZiB0aGUKKyAgIEludGVybmV0LCB0aGUgImJ1ZmZlciBleHBs b2l0IiBoYXMgYmVjb21lIGEgcHJlZmVycmVkIG1ldGhvZCBmb3IKKyAgIGhhY2tlcnMgdG8gaGlq YWNrIHByaXZpbGVnZWQgcHJvZ3JhbXM7IGxvbmcgZGF0YSBzdHJpbmdzIGFyZSBmZWQgdG8gYQor ICAgcHJvZ3JhbSBpbiBob3BlcyB0aGF0IGl0IHVzZXMgdW5zYWZlIEMgbGlicmFyeSBjYWxscyBz dWNoIGFzIHN0cmNweSgpCisgICBvciBzcHJpbnRmKCkgdG8gY29weSBzdHJpbmdzIGludG8gYXV0 b21hdGljIGFycmF5cywgdGh1cyBvdmVyd3JpdGluZworICAgdGhlIGNhbGwgc3RhY2ssIGFuZCB0 aGVyZWZvcmUgdGhlIHJvdXRpbmUncyByZXR1cm4gYWRkcmVzcy4gV2hlbiBzdWNoIGEKKyAgIGhv bGUgaXMgZGlzY292ZXJlZCwgYSAic3RyaW5nIiBjYW4gYmUgY29uc3RydWN0ZWQgdGhhdCBjb250 YWlucyBtYWNoaW5lCisgICBjb2RlIHRvIGhpamFjayB0aGUgcHJvZ3JhbSdzIHByaXZpbGVnZXMg YW5kIHBlbmV0cmF0ZSB0aGUgc3lzdGVtLgorCisgICBUaGlzIHByb2JsZW0gaXMgcGFydGlhbGx5 IGFkZHJlc3NlZCBieSB0aGUgc3Rybi4uLigpIHJvdXRpbmVzLCB3aGljaAorICAgc2hvdWxkIGFs d2F5cyBiZSB1c2VkIGluIHByZWZlcmVuY2UgdG8gdGhlaXIgc3RyLi4uKCkgZXF1aXZhbGVudHMK KyAgIChleGNlcHQgd2hlbiB0aGUgY29weSBvcGVyYXRpb24gaGFzIGFscmVhZHkgYmVlbiBwcmVj aGVja2VkLCBvciB0aGVyZQorICAgaXMgYSBnb29kIHJlYXNvbiBmb3Igbm90IHVzaW5nIHRoZW0s IGUuZy4gdGhlIHNvbWV0aW1lcyB1bmRlc2lyYWJsZQorICAgc2lkZSBlZmZlY3Qgb2Ygc3RybmNw eSgpIHplcm9pbmcgdGhlIHJlbWFpbmRlciBvZiB0aGUgYnVmZmVyKS4gVGhlIG1vc3QKKyAgIGdh cGluZyB3aG9sZSwgaG93ZXZlciwgaXMgc3ByaW50ZigpLCB3aGljaCBwZXJmb3JtcyBubyBsZW5n dGggY2hlY2tpbmcKKyAgIG9uIGl0cyBkZXN0aW5hdGlvbiBidWZmZXIsIGFuZCBpcyBub3QgZWFz eSB0byByZXBsYWNlLiBBbHRob3VnaAorICAgc25wcmludGYoKSByb3V0aW5lcyBhcmUgc3RhcnRp bmcgdG8gYXBwZWFyLCB0aGV5IGFyZSBub3QgeWV0CisgICB3aWRlc3ByZWFkLCBhbmQgY2VydGFp bmx5IG5vdCB1bml2ZXJzYWwsIG5vciBhcmUgdGhleSBlc3BlY2lhbGx5CisgICBwb3J0YWJsZSwg b3IgZXZlbiBmdWxsLWZlYXR1cmVkLgorCisgICBGb3IgdGhlc2UgcmVhc29ucywgd2UgaGF2ZSBz dGFydGVkIHRvIGJ1aWxkIHVwIG91ciBvd24gbGl0dGxlIGxpYnJhcnkKKyAgIG9mIEMgTGlicmFy eSByZXBsYWNlbWVudHMsIGNrY2xpYi5bY2hdLiBUaGVzZSBhcmUgc2FmZSBhbmQgaGlnaGx5Cisg ICBwb3J0YWJsZSBwcmltaXRpdmVzIGZvciBtZW1vcnkgbWFuYWdlbWVudCBhbmQgc3RyaW5nIG1h bmlwdWxhdGlvbiwgc3VjaAorICAgYXM6CisKKyAgIGNrc3RybmNweSgpCisgICAgICAgICAgTGlr ZSBzdHJuY3B5IGJ1dCByZXR1cm5zIGEgdXNlZnVsIHZhbHVlLCBkb2Vzbid0IHplcm8gYnVmZmVy LgorCisgICBja2l0b2EoKQorICAgICAgICAgIE9wcG9zaXRlIG9mIGF0b2koKQorCisgICBja2x0 b2EoKQorICAgICAgICAgIE9wcG9zaXRlIG9mIGF0b2woKQorCisgICBja2N0b2EoKQorICAgICAg ICAgIFJldHVybnMgY2hhcmFjdGVyIGFzIHN0cmluZworCisgICBja21ha21zZygpCisgICAgICAg ICAgVXNlZCB3aXRoIGNrP3RvPygpIGFzIGEgc2FmZSBzcHJpbnRmKCkgcmVwbGFjZW1lbnQgZm9y IHVwIHRvIDQKKyAgICAgICAgICBpdGVtcworCisgICBja21ha3htc2coKQorICAgICAgICAgIExp a2UgY2ttYWttc2coKSBidXQgYWNjZXB0cyB1cCB0byAxMiBpdGVtcworCisgICBNb3JlIGFib3V0 IGxpYnJhcnkgZnVuY3Rpb25zIGluIFs1NF1TZWN0aW9uIDQuQS4KKworICAgWyBbNTVdQ29udGVu dHMgXSBbIFs1Nl1DLUtlcm1pdCBdIFsgWzU3XUtlcm1pdCBIb21lIF0KKworMy4yLiBUaGUgImNo YXIiIHZzICJ1bnNpZ25lZCBjaGFyIiBEaWxlbW1hCisKKyAgIFRoaXMgaXMgb25lIG9mIHRoZSBt b3N0IGFnZ3JhdmF0aW5nIGFuZCB2ZXhpbmcgY2hhcmFjdGVyaXN0aWNzIG9mIHRoZSBDCisgICBs YW5ndWFnZS4gQnkgZGVzaWduLCBjaGFycyAoYW5kIGNoYXIgKidzKSBhcmUgU0lHTkVELiBCdXQg aW4gdGhlIG1vZGVybgorICAgZXJhLCBob3dldmVyLCB3ZSBuZWVkIHRvIHByb2Nlc3MgY2hhcmFj dGVycyB0aGF0IGNhbiBoYXZlIChvciBpbmNsdWRlKQorICAgOC1iaXQgdmFsdWVzLCBhcyBpbiB0 aGUgSVNPIExhdGluLTEsIElCTSBDUCA4NTAsIG9yIFVURi04IGNoYXJhY3RlcgorICAgc2V0cywg c28gdGhpcyBkYXRhIG11c3QgYmUgdHJlYXRlZCBhcyB1bnNpZ25lZC4gQnV0IHNvbWUgQyBjb21w aWxlcnMKKyAgIChzdWNoIGFzIHRob3NlIGJhc2VkIG9uIHRoZSBCZWxsIFVOSVggVjcgY29tcGls ZXIpIGRvIG5vdCBzdXBwb3J0CisgICAidW5zaWduZWQgY2hhciIgYXMgYSBkYXRhIHR5cGUuIFRo ZXJlZm9yZSB3ZSBoYXZlIHRoZSBtYWNybyBvciB0eXBlZGVmCisgICBDSEFSLCB3aGljaCB3ZSB1 c2Ugd2hlbiB3ZSBuZWVkIGNoYXJzIHRvIGJlIHVuc2lnbmVkLCBidXQgd2hpY2gsCisgICB1bmZv cnR1bmF0ZWx5LCByZXNvbHZlcyBpdHNlbGYgdG8gImNoYXIiIG9uIHRob3NlIGNvbXBpbGVycyB0 aGF0IGRvbid0CisgICBzdXBwb3J0ICJ1bnNpZ25lZCBjaGFyIi4gQU5EIFNPLi4uIFdlIGhhdmUg dG8gZG8gYSBsb3Qgb2YgZmlkZGxpbmcgYXQKKyAgIHJ1bnRpbWUgdG8gYXZvaWQgc2lnbiBleHRl bnNpb24gYW5kIHNvIGZvcnRoLgorCisgICBTb21lIG1vZGVybiBjb21waWxlcnMgKGUuZy4gSUJN LCBERUMsIE1pY3Jvc29mdCkgaGF2ZSBvcHRpb25zIHRoYXQgc2F5CisgICAibWFrZSBhbGwgY2hh cnMgYmUgdW5zaWduZWQiIChlLmcuIEdDQyAiLWZ1bnNpZ25lZC1jaGFyIikgYW5kIHdlIHVzZQor ICAgdGhlbSB3aGVuIHRoZXkgYXJlIGF2YWlsYWJsZS4gT3RoZXIgY29tcGlsZXJzIGRvbid0IGhh dmUgdGhpcyBvcHRpb24sCisgICBhbmQgYXQgdGhlIHNhbWUgdGltZSwgYXJlIGJlY29taW5nIGlu Y3JlYXNpbmdseSBzdHJpY3QgYWJvdXQgdHlwZQorICAgbWlzbWF0Y2hlcywgYW5kIHNwZXcgb3V0 IHRvcnJlbnRzIG9mIHdhcm5pbmdzIHdoZW4gd2UgdXNlIGEgQ0hBUiB3aGVyZQorICAgYSBjaGFy IGlzIGV4cGVjdGVkLCBvciB2aWNlIHZlcnNhLiBXZSBmaXggdGhlc2Ugb25lIGJ5IG9uZSB1c2lu ZyBjYXN0cywKKyAgIGFuZCB0aGUgY29kZSBiZWNvbWVzIGluY3JlYXNpbmdseSB1Z2x5LiBCdXQg dGhlcmUgcmVtYWlucyBhIHNlcmlvdXMKKyAgIHByb2JsZW0sIG5hbWVseSB0aGF0IGNlcnRhaW4g bGlicmFyeSBhbmQga2VybmVsIGZ1bmN0aW9ucyBoYXZlCisgICBhcmd1bWVudHMgdGhhdCBhcmUg ZGVjbGFyZWQgYXMgc2lnbmVkIGNoYXJzIChvciBwb2ludGVycyB0byB0aGVtKSwKKyAgIHdoZXJl YXMgb3VyIGNoYXJhY3RlciBkYXRhIGlzIHVuc2lnbmVkLiBGaW5lLCB3ZSBjYW4gY2FuIHVzZSBj YXN0cyBoZXJlCisgICB0b28gLS0gYnV0IHdobyBrbm93cyB3aGF0IGhhcHBlbnMgaW5zaWRlIHRo ZXNlIHJvdXRpbmVzLgorCisgICBbIFs1OF1Db250ZW50cyBdIFsgWzU5XUMtS2VybWl0IF0gWyBb NjBdS2VybWl0IEhvbWUgXQorCis0LiBNT0RVTEVTCisKKyAgIFdoZW4gQy1LZXJtaXQgaXMgb24g dGhlIGZhciBlbmQgb2YgYSBjb25uZWN0aW9uLCBpdCBpcyBzYWlkIHRvIGJlIGluCisgICByZW1v dGUgbW9kZS4gV2hlbiBDLUtlcm1pdCBoYXMgbWFkZSBhIGNvbm5lY3Rpb24gdG8gYW5vdGhlciBj b21wdXRlciwKKyAgIGl0IGlzIGluIGxvY2FsIG1vZGUuIChJZiBDLUtlcm1pdCBpcyAiaW4gdGhl IG1pZGRsZSIgb2YgYSBtdWx0aWhvcAorICAgY29ubmVjdGlvbiwgaXQgaXMgc3RpbGwgaW4gbG9j YWwgbW9kZS4pCisKKyAgIE9uIGFub3RoZXIgYXhpcywgQy1LZXJtaXQgY2FuIGJlIGluIGFueSBv ZiBzZXZlcmFsIG1ham9yIHN0YXRlczoKKworICAgQ29tbWFuZCBTdGF0ZQorICAgICAgICAgIFJl YWRpbmcgYW5kIHdyaXRpbmcgZnJvbSB0aGUgam9iJ3MgY29udHJvbGxpbmcgdGVybWluYWwgb3IK KyAgICAgICAgICAiY29uc29sZSIuIEluIHRoaXMgbW9kZSwgYWxsIGkvbyBpcyBoYW5kbGVkIGJ5 IHRoZSBHcm91cCBFCisgICAgICAgICAgY29ueHh4KCkgKGNvbnNvbGUgaS9vKSByb3V0aW5lcy4K KworICAgUHJvdG9jb2wgU3RhdGUKKyAgICAgICAgICBSZWFkaW5nIGFuZCB3cml0aW5nIGZyb20g dGhlIGNvbW11bmljYXRpb25zIGRldmljZS4gSW4gdGhpcworICAgICAgICAgIG1vZGUsIGFsbCBp L28gaXMgaGFuZGxlZCBieSB0aGUgR3JvdXAgRSB0dHh4eCgpICh0ZXJtaW5hbCBpL28pCisgICAg ICAgICAgcm91dGluZXMuCisKKyAgIFRlcm1pbmFsIFN0YXRlCisgICAgICAgICAgUmVhZGluZyBm cm9tIHRoZSBrZXlib2FyZCB3aXRoIGNvbnh4eCgpIHJvdXRpbmVzIGFuZCB3cml0aW5nIHRvCisg ICAgICAgICAgdGhlIGNvbW11bmljYXRpb25zIGRldmljZSB3aXRoIHR0eHh4KCkgcm91dGluZXMg QU5EIHZpY2UtdmVyc2EuCisKKyAgIFdoZW4gaW4gbG9jYWwgbW9kZSwgdGhlIGNvbnNvbGUgYW5k IGNvbW11bmljYXRpb25zIGRldmljZSBhcmUgZGlzdGluY3QuCisgICBEdXJpbmcgZmlsZSB0cmFu c2ZlciwgS2VybWl0IG1heSBwdXQgdXAgYSBmaWxlLXRyYW5zZmVyIGRpc3BsYXkgb24gdGhlCisg ICBjb25zb2xlIGFuZCBzYW1wbGUgdGhlIGNvbnNvbGUgZm9yIGludGVycnVwdGlvbiBzaWduYWxz LgorCisgICBXaGVuIGluIHJlbW90ZSBtb2RlLCB0aGUgY29uc29sZSBhbmQgY29tbXVuaWNhdGlv bnMgZGV2aWNlIGFyZSB0aGUKKyAgIHNhbWUsIGFuZCB0aGVyZWZvcmUgdGhlcmUgY2FuIGJlIG5v IGZpbGUtdHJhbnNmZXIgZGlzcGxheSBvbiB0aGUKKyAgIGNvbnNvbGUgb3IgaW50ZXJydXB0aW9u cyBmcm9tIGl0IChleGNlcHQgZm9yICJpbi1iYW5kIiBpbnRlcnJ1cHRpb25zCisgICBzdWNoIGFz IF5DXkNeQykuCisKKyAgIFsgWzYxXUNvbnRlbnRzIF0gWyBbNjJdQy1LZXJtaXQgXSBbIFs2M11L ZXJtaXQgSG9tZSBdCisKKzQuQS4gR3JvdXAgQTogTGlicmFyeSBGdW5jdGlvbnMKKworICAgTGli cmFyeSBmdW5jdGlvbnMsIHN0cmljdGx5IHBvcnRhYmxlLCBjYW4gYmUgdXNlZCBieSBhbGwgbW9k dWxlcyBvbiBhbGwKKyAgIHBsYXRmb3JtczogWzY0XWNrY2xpYi5oLCBbNjVdY2tjbGliLmMuCisK KyAgIChUbyBiZSBmaWxsZWQgaW4uLi4gRm9yIG5vdywgc2VlIFs2Nl1TZWN0aW9uIDMuMSBhbmQg dGhlIGNvbW1lbnRzIGluCisgICBja2NsaWIuYy4pCisKKyAgIFsgWzY3XUNvbnRlbnRzIF0gWyBb NjhdQy1LZXJtaXQgXSBbIFs2OV1LZXJtaXQgSG9tZSBdCisKKzQuQi4gR3JvdXAgQjogS2VybWl0 IEZpbGUgVHJhbnNmZXIKKworICAgVGhlIEtlcm1pdCBwcm90b2NvbCBrZXJuZWwuIFRoZXNlIGZp bGVzLCB3aG9zZSBuYW1lcyBzdGFydCB3aXRoICJja2MKKyAgIGFyZSBzdXBwb3NlZCB0byBiZSB0 b3RhbGx5IHBvcnRhYmxlIEMsIGFuZCBhcmUgZXhwZWN0ZWQgdG8gY29tcGlsZQorICAgY29ycmVj dGx5IG9uIGFueSBwbGF0Zm9ybSB3aXRoIGFueSBDIGNvbXBpbGVyLiAiUG9ydGFibGUiIGRvZXMg bm90IG1lYW4KKyAgIHRoZSBzYW1lIGFzIGFzICJBTlNJIiAtLSB0aGVzZSBtb2R1bGVzIG11c3Qg Y29tcGlsZSBvbiAxMC0gYW5kIDIwLXllYXIKKyAgIG9sZCBjb21wdXRlcnMsIHdpdGggQyBwcmVw cm9jZXNzb3JzLCBjb21waWxlcnMsIGFuZC9vciBsaW5rZXJzIHRoYXQKKyAgIGhhdmUgYWxsIHNv cnRzIG9mIHJlc3RyaWN0aW9ucy4gVGhlIEdyb3VwIEIgbW9kdWxlcyBkbyBub3QgaW5jbHVkZSBh bnkKKyAgIGhlYWRlciBmaWxlcyBvdGhlciB0aGFuIHRob3NlIHRoYXQgY29tZSB3aXRoIEtlcm1p dCBpdHNlbGYuIFRoZXkgZG8gbm90CisgICBjb250YWluIGFueSBsaWJyYXJ5IGNhbGxzIGV4Y2Vw dCBmcm9tIHRoZSBzdGFuZGFyZCBDIGxpYnJhcnkgKGUuZy4KKyAgIHByaW50ZigpKS4gVGhleSBt b3N0IGNlcnRhaW5seSBkbyBub3QgY29udGFpbiBhbnkgc3lzdGVtIGNhbGxzLiBGaWxlczoKKwor ICAgWzcwXWNrY3N5bS5oCisgICAgICAgICAgRm9yIHVzZSBieSBDIGNvbXBpbGVycyB0aGF0IGRv bid0IGFsbG93IC1EIG9uIHRoZSBjb21tYW5kIGxpbmUuCisKKyAgIFs3MV1ja2Nhc2MuaAorICAg ICAgICAgIEFTQ0lJIGNoYXJhY3RlciBzeW1ib2wgZGVmaW5pdGlvbnMuCisKKyAgIFs3Ml1ja2Nz aWcuaAorICAgICAgICAgIFN5c3RlbS1pbmRlcGVuZGVudCBzaWduYWwtaGFuZGxpbmcgZGVmaW5p dGlvbnMgYW5kIHByb3RvdHlwZXMuCisKKyAgIFs3M11ja2NkZWIuaAorICAgICAgICAgIE9yaWdp bmFsbHksIGRlYnVnZ2luZyBkZWZpbml0aW9ucy4gTm93IHRoaXMgZmlsZSBhbHNvIGNvbnRhaW5z CisgICAgICAgICAgYWxsIGRlZmluaXRpb25zIGFuZCBwcm90b3R5cGVzIHRoYXQgYXJlIHNoYXJl ZCBieSBhbGwgbW9kdWxlcyBpbgorICAgICAgICAgIGFsbCBncm91cHMuCisKKyAgIFs3NF1ja2Nr ZXIuaAorICAgICAgICAgIEtlcm1pdCBwcm90b2NvbCBzeW1ib2wgZGVmaW5pdGlvbnMuCisKKyAg IFs3NV1ja2N4bGEuaAorICAgICAgICAgIENoYXJhY3Rlci1zZXQtcmVsYXRlZCBzeW1ib2wgZGVm aW5pdGlvbnMgKHNlZSBuZXh0IHNlY3Rpb24pLgorCisgICBbNzZdY2tjbWFpLmMKKyAgICAgICAg ICBUaGUgbWFpbiBwcm9ncmFtLiBUaGlzIG1vZHVsZSBjb250YWlucyB0aGUgZGVjbGFyYXRpb25z IG9mIGFsbAorICAgICAgICAgIHRoZSBwcm90b2NvbC1yZWxhdGVkIGdsb2JhbCB2YXJpYWJsZXMg dGhhdCBhcmUgc2hhcmVkIGFtb25nIHRoZQorICAgICAgICAgIG90aGVyIG1vZHVsZXMuCisKKyAg IFs3N11ja2Nwcm8udworICAgICAgICAgIFRoZSBwcm90b2NvbCBtb2R1bGUgaXRzZWxmLCB3cml0 dGVuIGluICJ3YXJ0IiwgYSBsZXgtbGlrZQorICAgICAgICAgIHByZXByb2Nlc3NvciB0aGF0IGlz IGRpc3RyaWJ1dGVkIHdpdGggS2VybWl0IHVuZGVyIHRoZSBuYW1lCisgICAgICAgICAgQ0tXQVJU LkMuCisKKyAgIFs3OF1ja2NmbnMuYywgWzc5XWNrY2ZuMi5jLCBbODBdY2tjZm4zLmMKKyAgICAg ICAgICBUaGUgcHJvdG9jb2wgc3VwcG9ydCBmdW5jdGlvbnMgdXNlZCBieSB0aGUgcHJvdG9jb2wg bW9kdWxlLgorCisgICBbODFdR3JvdXAgQiBtb2R1bGVzIG1heSBjYWxsIHVwb24gZnVuY3Rpb25z IGZyb20gWzgyXUdyb3VwIEUsIGJ1dCBub3QKKyAgIGZyb20gWzgzXUdyb3VwIEQgbW9kdWxlcyAo d2l0aCB0aGUgc2luZ2xlIGV4Y2VwdGlvbiB0aGF0IHRoZSBtYWluCisgICBwcm9ncmFtIGludm9r ZXMgdGhlIHVzZXIgaW50ZXJmYWNlLCB3aGljaCBpcyBpbiBHcm91cCBEKS4gKFRoaXMgbGFzdAor ICAgYXNzZXJ0aW9uIGlzIHJlYWxseSBvbmx5IGEgY29uamVjdHVyZS4pCisKKyAgIFsgWzg0XUNv bnRlbnRzIF0gWyBbODVdQy1LZXJtaXQgXSBbIFs4Nl1LZXJtaXQgSG9tZSBdCisKKzQuQy4gR3Jv dXAgQzogQ2hhcmFjdGVyLVNldCBDb252ZXJzaW9uCisKKyAgIENoYXJhY3RlciBzZXQgdHJhbnNs YXRpb24gdGFibGVzIGFuZCBmdW5jdGlvbnMuIFVzZWQgYnkgdGhlIFs4N11Hcm91cAorICAgQiwg cHJvdG9jb2wgbW9kdWxlcywgYnV0IG1heSBiZSBzcGVjaWZpYyB0byBkaWZmZXJlbnQgY29tcHV0 ZXJzLiAoU28KKyAgIGZhciwgYWxsIGNoYXJhY3RlciBjaGFyYWN0ZXIgc2V0cyBzdXBwb3J0ZWQg YnkgQy1LZXJtaXQgYXJlIHN1cHBvcnRlZAorICAgaW4gWzg4XWNrdXhsYS5jIGFuZCBbODldY2t1 eGxhLmgsIGluY2x1ZGluZyBNYWNpbnRvc2ggYW5kIElCTSBjaGFyYWN0ZXIKKyAgIHNldHMpLiBU aGVzZSBtb2R1bGVzIHNob3VsZCBiZSBjb21wbGV0ZWx5IHBvcnRhYmxlLCBhbmQgbm90IHJlbHkg b24gYW55CisgICBraW5kIG9mIHN5c3RlbSBvciBsaWJyYXJ5IHNlcnZpY2VzLgorCisgICBbOTBd Y2tjeGxhLmgKKyAgICAgICAgICBDaGFyYWN0ZXItc2V0IGRlZmluaXRpb25zIHVzYWJsZSBieSBh bGwgdmVyc2lvbnMgb2YgQy1LZXJtaXQuCisKKyAgIGNrP3hsYS5oCisgICAgICAgICAgQ2hhcmFj dGVyLXNldCBkZWZpbml0aW9ucyBmb3IgY29tcHV0ZXIgIj8iLCBlLmcuIFs5MV1ja3V4bGEuaAor ICAgICAgICAgIGZvciBVTklYLCBbOTJdY2tteGxhLmggZm9yIE1hY2ludG9zaC4KKworICAgWzkz XWNrP3hsYQorICAgICAgICAgIENoYXJhY3Rlci1zZXQgdHJhbnNsYXRpb24gdGFibGVzIGFuZCBm dW5jdGlvbnMgZm9yIGNvbXB1dGVyICI/IiwKKyAgICAgICAgICBGb3IgZXhhbXBsZSwgQ0tVWExB LkMgZm9yIFVOSVgsIENLTVhMQS5DIGZvciBNYWNpbnRvc2guIFNvIGZhciwKKyAgICAgICAgICB0 aGVzZSBhcmUgdGhlIG9ubHkgdHdvIHN1Y2ggbW9kdWxlcy4gVGhlIFVOSVggbW9kdWxlIGlzIHVz ZWQgZm9yCisgICAgICAgICAgYWxsIHZlcnNpb25zIG9mIEMtS2VybWl0IGV4Y2VwdCB0aGUgTWFj aW50b3NoIHZlcnNpb24uCisKKyAgIFs5NF1ja2N1bmkuaAorICAgICAgICAgIFVuaWNvZGUgZGVm aW5pdGlvbnMKKworICAgWzk1XWNrY3VuaS5jCisgICAgICAgICAgVW5pY29kZSBtb2R1bGUKKwor ICAgSGVyZSdzIGhvdyB0byBhZGQgYSBuZXcgZmlsZSBjaGFyYWN0ZXIgc2V0IGluIHRoZSBvcmln aW5hbCAobm9uLVVuaWNvZGUKKyAgIG1vZHVsZXMpLiBBc3N1bWluZyBpdCBpcyBiYXNlZCBvbiB0 aGUgUm9tYW4gKExhdGluKSBhbHBoYWJldC4gTGV0J3MKKyAgIGNhbGwgaXQgIkJhcmJhcmlhbiIu IEZpcnN0LCBpbiBjaz94bGEuaCwgYWRkIGEgZGVmaW5pdGlvbiBmb3IgRkNfQkFSQkEKKyAgICg4 IGNoYXJzIG1heGltdW0gbGVuZ3RoKSBhbmQgaW5jcmVhc2UgTUFYRkNTRVRTIGJ5IDEuIFRoZW4s IGluCisgICBjaz94bGEuYzoKKworICAgICAqIEFkZCBhIGJhcmJhcmlhbiBlbnRyeSBpbnRvIHRo ZSBmY3NpbmZvIGFycmF5LgorICAgICAqIEFkZCBhICJiYXJiYXJpYW4iIGVudHJ5IHRvIGZpbGUg Y2hhcmFjdGVyIHNldCBrZXl3b3JkIHRhYmxlLAorICAgICAgIGZjc3RhYi4KKyAgICAgKiBBZGQg YSAiYmFyYmFyaWFuIiBlbnRyeSB0byB0ZXJtaW5hbCBjaGFyYWN0ZXIgc2V0IGtleXdvcmQgdGFi bGUsCisgICAgICAgdHRjc3RhYi4KKyAgICAgKiBBZGQgYSB0cmFuc2xhdGlvbiB0YWJsZSBmcm9t IExhdGluLTEgdG8gYmFyYmFyaWFuOiB5bDFiYVtdLgorICAgICAqIEFkZCBhIHRyYW5zbGF0aW9u IHRhYmxlIGZyb20gYmFyYmFyaWFuIHRvIExhdGluLTE6IHliYWwxW10uCisgICAgICogQWRkIGEg dHJhbnNsYXRpb24gZnVuY3Rpb24gZnJvbSBCYXJiYXJpYW4gdG8gQVNDSUk6IHhiYWFzKCkuCisg ICAgICogQWRkIGEgdHJhbnNsYXRpb24gZnVuY3Rpb24gZnJvbSBCYXJiYXJpYW4gdG8gTGF0aW4t MTogeGJhbDEoKS4KKyAgICAgKiBBZGQgYSB0cmFuc2xhdGlvbiBmdW5jdGlvbiBmcm9tIExhdGlu LTEgdG8gQmFyYmFyaWFuOiB4bDFiYSgpLgorICAgICAqIGV0YyBldGMgZm9yIGVhY2ggdHJhbnNm ZXIgY2hhcmFjdGVyIHNldC4uLgorICAgICAqIEFkZCB0cmFuc2xhdGlvbiBmdW5jdGlvbiBwb2lu dGVycyB0byB0aGUgeGxzIGFuZCB4bHIgdGFibGVzLgorCisgICBPdGhlciB0cmFuc2xhdGlvbnMg aW52b2x2aW5nIEJhcmJhcmlhbiAoZS5nLiBmcm9tIEJhcmJhcmlhbiB0bworICAgTGF0aW4tQ3ly aWxsaWMpIGFyZSBwZXJmb3JtZWQgdGhyb3VnaCB0aGVzZSB0YWJsZXMgYW5kIGZ1bmN0aW9ucy4g U2VlCisgICBja3V4bGEuaCBhbmQgY2t1eGxhLmMgZm9yIGV4dGVuc2l2ZSBleGFtcGxlcy4KKwor ICAgVG8gYWRkIGEgbmV3IFRyYW5zZmVyIENoYXJhY3RlciBTZXQsIGUuZy4gTGF0aW4gQWxwaGFi ZXQgOSAoZm9yIHRoZQorICAgRXVybyBzeW1ib2wpLCBhZ2FpbiBpbiB0aGUgIm9sZCIgY2hhcmFj dGVyLXNldCBtb2R1bGVzOgorCisgICBJbiBja2N4bGEuaDoKKworICAgICAgICAgICsgQWRkIGEg VENfeHh4eCBkZWZpbml0aW9uIGFuZCBpbmNyZWFzZSBNQVhUQ1NFVFMgYWNjb3JkaW5nbHkuCisK KyAgIEluIGNrP3hsYS5oIChzaW5jZSBhbnkgdHJhbnNmZXIgY2hhcnNldCBpcyBhbHNvIGEgZmls ZSBjaGFyc2V0KToKKworICAgICAgICAgICsgQWRkIGFuIEZDX3h4eHggZGVmaW5pdGlvbiBhbmQg aW5jcmVhc2UgTUFYRkNTRVRTIGFjY29yZGluZ2x5LgorCisgICBJbiBjaz94bGEuYzoKKworICAg ICAgICAgICsgQWRkIGEgdGNzaW5mb1tdIGVudHJ5LgorICAgICAgICAgICsgTWFrZSBhIHRjc3Rh YltdIGtleXdvcmQgdGFibGUgZW50cnkuCisgICAgICAgICAgKyBNYWtlIGFuIGZjc2luZm9bXSB0 YWJsZSBlbnRyeS4KKyAgICAgICAgICArIE1ha2UgYW4gZmNzdGFiW10ga2V5d29yZCB0YWJsZSBl bnRyeS4KKyAgICAgICAgICArIE1ha2UgYSB0Y3N0YWJbXSBrZXl3b3JkIHRhYmxlIGVudHJ5Lgor ICAgICAgICAgICsgSWYgbmVjZXNzYXJ5LCBtYWtlIGEgbGFuZ2luZm9bXSB0YWJsZSBlbnRyeS4K KyAgICAgICAgICArIE1ha2UgZW50cmllcyBpbiB0aGUgZnVuY3Rpb24gcG9pbnRlciBhcnJheXMu CisgICAgICAgICAgKyBQcm92aWRlIGFueSBuZWVkZWQgZnVuY3Rpb25zLgorCisgICBBcyBvZiBD LUtlcm1pdCA3LjAsIGNoYXJhY3RlciBzZXRzIGFyZSBhbHNvIGhhbmRsZWQgaW4gcGFyYWxsZWwg YnkgdGhlCisgICBuZXcgKGFuZCB2ZXJ5IGxhcmdlKSBVbmljb2RlIG1vZHVsZSwgY2tjdW5pLltj aF0uIEV2ZW50dWFsbHkgd2Ugc2hvdWxkCisgICBwaGFzZSBvdXQgdGhlIG9sZCB3YXksIGRlc2Ny aWJlZCBqdXN0IGFib3ZlLCBhbmQgb3BlcmF0ZSBlbnRpcmVseSBpbgorICAgKGFuZCB0aHJvdWdo KSBVbmljb2RlLiBUaGUgYWR2YW50YWdlcyBhcmUgbWFueS4gVGhlIGRpc2FkdmFudGFnZXMgYXJl CisgICBzaXplIGFuZCBwZXJmb3JtYW5jZS4gVG8gYWRkIGEgY2hhcmFjdGVyIHRvIHRoZSBVbmlj b2RlIG1vZHVsZXM6CisKKyAgIEluIGNrY3VuaS5oOgorCisgICAgICAgICAgKyAoVG8gYmUgZmls bGVkIGluLi4uKQorCisgICBJbiBja2N1bmkuYzoKKworICAgICAgICAgICsgKFRvIGJlIGZpbGxl ZCBpbi4uLikKKworICAgWyBbOTZdQ29udGVudHMgXSBbIFs5N11DLUtlcm1pdCBdIFsgWzk4XUtl cm1pdCBIb21lIF0KKworNC5ELiBHcm91cCBEOiBVc2VyIEludGVyZmFjZQorCisgICBUaGlzIGlz IHRoZSBjb2RlIHRoYXQgY29tbXVuaWNhdGVzIHdpdGggdGhlIHVzZXIsIGdldHMgaGVyIGNvbW1h bmRzLAorICAgaW5mb3JtcyBoZXIgb2YgdGhlIHJlc3VsdHMuIEl0IG1heSBiZSBjb21tYW5kLWxp bmUgb3JpZW50ZWQsCisgICBpbnRlcmFjdGl2ZSBwcm9tcHRpbmcgZGlhbG9nLCBtZW51cyBhbmQg YXJyb3cga2V5cywgd2luZG93cyBhbmQgbWljZSwKKyAgIHNwZWVjaCByZWNvZ25pdGlvbiwgdGVs ZXBhdGh5LCBldGMuIFRoZSBvbmUgcHJvdmlkZWQgaXMgY29tbWFuZC1hbmQKKyAgIHByb21wdCwg d2l0aCB0aGUgYWJpbGl0eSB0byByZWFkIGNvbW1hbmRzIGZyb20gdmFyaW91cyBzb3VyY2VzOiB0 aGUKKyAgIGNvbnNvbGUga2V5Ym9hcmQsIGEgZmlsZSwgb3IgYSBtYWNybyBkZWZpbml0aW9uLiBU aGUgdXNlciBpbnRlcmZhY2UgaGFzCisgICB0aHJlZSBtYWpvciBmdW5jdGlvbnM6CisKKyAgICAx LiBTZXRzIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZmlsZSB0cmFuc2ZlciBhbmQgdGhlbiBzdGFy dHMgaXQuIFRoaXMKKyAgICAgICBpcyBkb25lIGJ5IHNldHRpbmcgY2VydGFpbiAobWFueSkgZ2xv YmFsIHZhcmlhYmxlcywgc3VjaCBhcyB0aGUKKyAgICAgICBwcm90b2NvbCBtYWNoaW5lIHN0YXJ0 IHN0YXRlLCB0aGUgZmlsZSBzcGVjaWZpY2F0aW9uLCBmaWxlIHR5cGUsCisgICAgICAgY29tbXVu aWNhdGlvbiBwYXJhbWV0ZXJzLCBwYWNrZXQgbGVuZ3RoLCB3aW5kb3cgc2l6ZSwgY2hhcmFjdGVy CisgICAgICAgc2V0LCBldGMuCisgICAgMi4gRGlzcGxheXMgbWVzc2FnZXMgb24gdGhlIHVzZXIn cyBzY3JlZW4gZHVyaW5nIHRoZSBmaWxlIHRyYW5zZmVyLAorICAgICAgIHVzaW5nIHRoZSBzY3Jl ZW4oKSBmdW5jdGlvbiwgd2hpY2ggaXMgY2FsbGVkIGJ5IHRoZSBncm91cC0xCisgICAgICAgbW9k dWxlcy4KKyAgICAzLiBFeGVjdXRlcyBhbnkgY29tbWFuZHMgZGlyZWN0bHkgdGhhdCBkbyBub3Qg cmVxdWlyZSBLZXJtaXQgcHJvdG9jb2wsCisgICAgICAgc3VjaCBhcyB0aGUgQ09OTkVDVCBjb21t YW5kLCBsb2NhbCBmaWxlIG1hbmFnZW1lbnQgY29tbWFuZHMsCisgICAgICAgcGFyYW1ldGVyLXNl dHRpbmcgY29tbWFuZHMsIEZUUCBjbGllbnQgY29tbWFuZHMsIGV0Yy4KKworICAgSWYgeW91IHBs YW4gdG8gZW1iZWQgdGhlIFs5OV1Hcm91cCBCLCBmaWxlcyBpbnRvIGEgcHJvZ3JhbSB3aXRoIGEK KyAgIGRpZmZlcmVudCB1c2VyIGludGVyZmFjZSwgeW91ciBpbnRlcmZhY2UgbXVzdCBzdXBwbHkg YW4gYXBwcm9wcmlhdGUKKyAgIHNjcmVlbigpIGZ1bmN0aW9uLCBwbHVzIGEgY291cGxlIHJlbGF0 ZWQgb25lcyBsaWtlIGNoa2ludCgpIGFuZAorICAgaW50bXNnKCkgZm9yIGhhbmRsaW5nIGtleWJv YXJkIChvciBtb3VzZSwgZXRjKSBpbnRlcnJ1cHRpb25zIGR1cmluZworICAgZmlsZSB0cmFuc2Zl ci4gVGhlIGJlc3Qgd2F5IHRvIGZpbmQgb3V0IGFib3V0IHRoaXMgaXMgdG8gbGluayBhbGwgdGhl CisgICBDLUtlcm1pdCBtb2R1bGVzIHRvZ2V0aGVyIGV4Y2VwdCB0aGUgY2t1dSoubyBhbmQgY2t1 Y29uLm8gbW9kdWxlcywgYW5kCisgICBzZWUgd2hpY2ggbWlzc2luZyBzeW1ib2xzIHR1cm4gdXAu CisKKyAgIEMtS2VybWl0J3MgY2hhcmFjdGVyLW9yaWVudGVkIHVzZXIgaW50ZXJmYWNlIChhcyBv cHBvc2VkIHRvIHRoZQorICAgTWFjaW50b3NoIHZlcnNpb24ncyBncmFwaGljYWwgdXNlciBpbnRl cmZhY2UpIGNvbnNpc3RzIG9mIHRoZSBmb2xsb3dpbmcKKyAgIG1vZHVsZXMuIEMtS2VybWl0IGNh biBiZSBidWlsdCB3aXRoIGFuIGludGVyYWN0aXZlIGNvbW1hbmQgcGFyc2VyLCBhCisgICBjb21t YW5kLWxpbmUtb3B0aW9uLW9ubHkgcGFyc2VyLCBhIGdyYXBoaWNhbCB1c2VyIGludGVyZmFjZSwg b3IgYW55CisgICBjb21iaW5hdGlvbiwgYW5kIGl0IGNhbiBldmVuIGJlIGJ1aWx0IHdpdGggbm8g dXNlciBpbnRlcmZhY2UgYXQgYWxsIChpbgorICAgd2hpY2ggY2FzZSBpdCBydW5zIGFzIGEgcmVt b3RlLW1vZGUgS2VybWl0IHNlcnZlcikuCisKKyAgIFsxMDBdY2t1Y21kLmgKKyAgIFsxMDFdY2t1 Y21kLmMKKyAgICAgICAgICBUaGUgY29tbWFuZCBwYXJzaW5nIHByaW1pdGl2ZXMgdXNlZCBieSB0 aGUgaW50ZXJhY3RpdmUgY29tbWFuZAorICAgICAgICAgIHBhcnNlciB0byBwYXJzZSBrZXl3b3Jk cywgbnVtYmVycywgZmlsZW5hbWVzLCBldGMsIGFuZCB0byBnaXZlCisgICAgICAgICAgaGVscCwg Y29tcGxldGUgZmllbGRzLCBzdXBwbHkgZGVmYXVsdHMsIGFsbG93IGFiYnJldmlhdGlvbnMgYW5k CisgICAgICAgICAgZWRpdGluZywgZXRjLiBUaGlzIHBhY2thZ2UgaXMgdG90YWxseSBpbmRlcGVu ZGVudCBvZiBLZXJtaXQsIGJ1dAorICAgICAgICAgIGRvZXMgZGVwZW5kIG9uIHRoZSBbMTAyXUdy b3VwIEUgZnVuY3Rpb25zLgorCisgICBbMTAzXWNrdXVzci5oCisgICAgICAgICAgRGVmaW5pdGlv bnMgb2Ygc3ltYm9scyB1c2VkIGluIEtlcm1pdCdzIGNvbW1hbmRzLgorCisgICBja3V1cyouYwor ICAgICAgICAgIEtlcm1pdCdzIGludGVyYWN0aXZlIGNvbW1hbmQgcGFyc2VyLCBpbmNsdWRpbmcg dGhlIHNjcmlwdAorICAgICAgICAgIHByb2dyYW1taW5nIGxhbmd1YWdlOiBbMTA0XWNrdXVzci5j IChpbmNsdWRlcyB0b3AtbGV2ZWwga2V5d29yZAorICAgICAgICAgIHRhYmxlcyk7IFsxMDVdY2t1 dXMyLmMgKEhFTFAgY29tbWFuZCB0ZXh0KTsgWzEwNl1ja3V1czMuYyAobW9zdAorICAgICAgICAg IG9mIHRoZSBTRVQgY29tbWFuZCk7IFsxMDddY2t1dXM0LmMgKGluY2x1ZGVzIHZhcmlhYmxlcyBh bmQKKyAgICAgICAgICBmdW5jdGlvbnMpOyBja3V1c1s1NjddLmMgKG1pc2NlbGxhbmVvdXMpOwor CisgICBbMTA4XWNrdXVzeS5jCisgICAgICAgICAgVGhlIGNvbW1hbmQtbGluZS1vcHRpb24gcGFy c2VyLgorCisgICBbMTA5XWNrdXVzeC5jCisgICAgICAgICAgVXNlciBpbnRlcmZhY2UgZnVuY3Rp b25zIGNvbW1vbiB0byBib3RoIHRoZSBpbnRlcmFjdGl2ZSBhbmQKKyAgICAgICAgICBjb21tYW5k LWxpbmUgcGFyc2Vycy4KKworICAgWzExMF1ja3V2ZXIuaAorICAgICAgICAgIFZlcnNpb24gaGVy YWxkcyBmb3IgZGlmZmVyZW50IGltcGxlbWVudGF0aW9ucy4KKworICAgWzExMV1ja3VzY3IuYwor ICAgICAgICAgIFRoZSAob2xkLCB1dWNwLWxpa2UpIFNDUklQVCBjb21tYW5kCisKKyAgIFsxMTJd Y2t1ZGlhLmMKKyAgICAgICAgICBUaGUgRElBTCBjb21tYW5kLiBJbmNsdWRlcyBzcGVjaWZpYyBr bm93bGVkZ2Ugb2YgbWFueSB0eXBlcyBvZgorICAgICAgICAgIG1vZGVtcy4KKworICAgTm90ZSB0 aGF0IG5vbmUgb2YgdGhlIGFib3ZlIGZpbGVzIGlzIGFjdHVhbGx5IFVuaXgtc3BlY2lmaWMuIE92 ZXIgdGltZQorICAgdGhleSBoYXZlIHByb3ZlbiB0byBiZSBwb3J0YWJsZSBhbW9uZyBhbGwgcGxh dGZvcm1zIHdoZXJlIEMtS2VybWl0IGlzCisgICBidWlsdDogVW5peCwgVk1TLCBBT1MvVlMsIEFt aWdhLCBPUy05LCBWT1MsIGV0YyBldGMuIFRodXMgdGhlIHRoaXJkCisgICBsZXR0ZXIgc2hvdWxk IG1vcmUgcHJvcGVybHkgYmUgImMiLCBidXQgY2hhbmdpbmcgaXQgd291bGQgYmUgdG9vCisgICBj b25mdXNpbmcuCisKKyAgIGNrP2Nvbi5jLCBja3VjbnMuYworICAgICAgICAgIFRoZSBDT05ORUNU IGNvbW1hbmQuIFRlcm1pbmFsIGNvbm5lY3Rpb24sIGFuZCBpbiBzb21lIGNhc2VzCisgICAgICAg ICAgKE1hY2ludG9zaCwgV2luZG93cykgYWxzbyB0ZXJtaW5hbCBlbXVsYXRpb24uIE5PVEU6IEFz IG9mCisgICAgICAgICAgQy1LZXJtaXQgNy4wLCB0aGVyZSBhcmUgdHdvIGRpZmZlcmVudCBDT05O RUNUIG1vZHVsZXMgZm9yIFVOSVg6CisgICAgICAgICAgWzExM11ja3Vjb24uYyAtLSB0aGUgdHJh ZGl0aW9uYWwsIHBvcnRhYmxlLCBmb3JrKCktYmFzZWQgdmVyc2lvbgorICAgICAgICAgIC0tIGFu ZCBbMTE0XWNrdWNucy5jLCBhIG5ldyB2ZXJzaW9uIHRoYXQgdXNlcyBzZWxlY3QoKSByYXRoZXIK KyAgICAgICAgICB0aGFuIGZvcmtzIHNvIGl0IGNhbiBoYW5kbGUgZW5jcnlwdGlvbi4gY2t1Y25z LmMgaXMgdGhlCisgICAgICAgICAgcHJlZmVycmVkIHZlcnNpb24gZm9yIFVuaXg7IGNrdWNvbi5j IGlzIG5vdCBsaWtlbHkgdG8ga2VlcCBwYWNlCisgICAgICAgICAgd2l0aCBpdCBpbiB0ZXJtcyBv ZiB1cGdyYWRlcywgZXRjLiBIb3dldmVyLCBzaW5jZSBzZWxlY3QoKSBpcworICAgICAgICAgIG5v dCBwb3J0YWJsZSB0byBldmVyeSBwbGF0Zm9ybSwgY2t1Y29uLmMgd2lsbCBiZSBrZXB0CisgICAg ICAgICAgaW5kZWZpbml0ZWx5IGZvciB0aG9zZSBwbGF0Zm9ybXMgdGhhdCBjYW4ndCB1c2UgY2t1 Y25zLmMuIE5PVEU6CisgICAgICAgICAgU3VuTGluayBYLjI1IHN1cHBvcnQgaXMgYXZhaWxhYmxl IG9ubHkgaW4gY2t1Y29uLmMuCisKKyAgIGNrXyouKiwgY2t1YXQqLioKKyAgICAgICAgICBNb2R1 bGVzIGhhdmluZyB0byBkbyB3aXRoIGF1dGhlbnRpY2F0aW9uIGFuZCBlbmNyeXB0aW9uLiBTaW5j ZQorICAgICAgICAgIHRoZSByZWxheGF0aW9uIG9mIFVTQSBleHBvcnQgbGF3cywgdGhleSBhcmUg aW5jbHVkZWQgd2l0aCB0aGUKKyAgICAgICAgICBnZW5lcmFsIHNvdXJjZS1jb2RlIGRpc3RyaWJ1 dGlvbi4gU2VjdXJlIEMtS2VybWl0IGJpbmFyaWVzIGNhbgorICAgICAgICAgIGJlIGJ1aWx0IHVz aW5nIHNwZWNpYWwgdGFyZ2V0cyBpbiB0aGUgc3RhbmRhcmQgbWFrZWZpbGUuCisgICAgICAgICAg SG93ZXZlciwgc2VjdXJlIHByZWJ1aWx0IGJpbmFyaWVzIG1heSBub3QgYmUgZGlzdHJpYnV0ZWQu CisKKyAgIEZvciBvdGhlciBpbXBsZW1lbnRhdGlvbnMsIHRoZSBmaWxlcyBtYXksIGFuZCBwcm9i YWJseSBkbywgaGF2ZQorICAgZGlmZmVyZW50IG5hbWVzLiBGb3IgZXhhbXBsZSwgdGhlIE1hY2lu dG9zaCBncmFwaGljYWwgdXNlciBpbnRlcmZhY2UKKyAgIGZpbGVuYW1lcyBzdGFydCB3aXRoICJj a20iLiBLZXJtaXQgOTUgdXNlcyB0aGUgY2t1Y21kIGFuZCBja3V1cyoKKyAgIG1vZHVsZXMsIGJ1 dCBoYXMgaXRzIG93biBDT05ORUNUIGNvbW1hbmQgbW9kdWxlcy4gQW5kIHNvIG9uLgorCisgICBI ZXJlIGlzIGEgYnJpZWYgZGVzY3JpcHRpb24gb2YgQy1LZXJtaXQncyAidXNlciBpbnRlcmZhY2Ug aW50ZXJmYWNlIiwKKyAgIGZyb20gY2t1dXNyLmMuIEl0IGlzIG5vd2hlcmUgbmVhciBjb21wbGV0 ZTsgaW4gcGFydGljdWxhciwgaHVuZHJlZHMgb2YKKyAgIGdsb2JhbCB2YXJpYWJsZXMgYXJlIHNo YXJlZCBhbW9uZyB0aGUgbWFueSBtb2R1bGVzLiBUaGVzZSBzaG91bGQsIHNvbWUKKyAgIGRheSwg YmUgY29sbGVjdGVkIGludG8gY2xhc3NlcyBvciBzdHJ1Y3R1cmVzIHRoYXQgY2FuIGJlIHBhc3Nl ZCBhcm91bmQKKyAgIGFzIG5lZWRlZDsgbm90IG9ubHkgZm9yIHB1cml0eSdzIHNha2UsIGJ1dCBh bHNvIHRvIGFsbG93IGZvciBtdWx0aXBsZQorICAgc2ltdWx0YW5lb3VzIGNvbW11bmljYXRpb24g c2Vzc2lvbnMgYW5kIG9yIHVzZXIgaW50ZXJmYWNlcy4gT3VyIGxpc3Qgb2YKKyAgIHRoaW5ncyB0 byBkbyBpcyBlbmRsZXNzLCBhbmQgcmVvcmdhbml6aW5nIHRoZSBzb3VyY2UgaXMgYWxtb3N0IGFs d2F5cworICAgYXQgdGhlIGJvdHRvbS4KKworICAgVGhlIGNrdXVzKi5jIG1vZHVsZXMgKGxpa2Ug bWFueSBvZiB0aGUgY2tjKi5jIG1vZHVsZXMpIGRlcGVuZCBvbiB0aGUKKyAgIGV4aXN0ZW5jZSBv ZiBDIGxpYnJhcnkgZmVhdHVyZXMgbGlrZSBmb3BlbiwgZmdldHMsIGZlb2YsIChmKXByaW50ZiwK KyAgIGFyZ3YvYXJnYywgZXRjLiBPdGhlciBmdW5jdGlvbnMgdGhhdCBhcmUgbGlrZWx5IHRvIHZh cnkgYW1vbmcgb3BlcmF0aW5nCisgICBzeXN0ZW1zIC0tIGxpa2Ugc2V0dGluZyB0ZXJtaW5hbCBt b2RlcyBvciBpbnRlcnJ1cHRzIC0tIGFyZSBpbnZva2VkIHZpYQorICAgY2FsbHMgdG8gZnVuY3Rp b25zIHRoYXQgYXJlIGRlZmluZWQgaW4gdGhlIFsxMTVdR3JvdXAgRQorICAgcGxhdGZvcm0tZGVw ZW5kZW50IG1vZHVsZXMsIGNrP1tmdF1pby5jLiBUaGUgY29tbWFuZCBsaW5lIHBhcnNlcgorICAg cHJvY2Vzc2VzIGFueSBhcmd1bWVudHMgZm91bmQgb24gdGhlIGNvbW1hbmQgbGluZSwgYXMgcGFz c2VkIHRvIG1haW4oKQorICAgdmlhIGFyZ3YvYXJnYy4gVGhlIGludGVyYWN0aXZlIHBhcnNlciB1 c2VzIHRoZSBmYWNpbGl0aWVzIG9mIHRoZSBjbWQKKyAgIHBhY2thZ2UgKGRldmVsb3BlZCBmb3Ig dGhpcyBwcm9ncmFtLCBidXQsIGluIHRoZW9yeSwgdXNhYmxlIGJ5IGFueQorICAgcHJvZ3JhbSku IEFueSBjb21tYW5kIHBhcnNlciBtYXkgYmUgc3Vic3RpdHV0ZWQgZm9yIHRoaXMgb25lLiBUaGUg b25seQorICAgcmVxdWlyZW1lbnRzIGZvciB0aGUgS2VybWl0IGNvbW1hbmQgcGFyc2VyIGFyZSB0 aGVzZToKKworICAgIDEuIFNldCBwYXJhbWV0ZXJzIHZpYSBnbG9iYWwgdmFyaWFibGVzIGxpa2Ug ZHVwbGV4LCBzcGVlZCwgdHRuYW1lLAorICAgICAgIGV0Yy4gU2VlIFsxMTZdY2tjbWFpLmMgZm9y IHRoZSBkZWNsYXJhdGlvbnMgYW5kIGRlc2NyaXB0aW9ucyBvZgorICAgICAgIHRoZXNlIHZhcmlh Ymxlcy4KKyAgICAyLiBJZiBhIGNvbW1hbmQgY2FuIGJlIGV4ZWN1dGVkIHdpdGhvdXQgdGhlIHVz ZSBvZiBLZXJtaXQgcHJvdG9jb2wsCisgICAgICAgdGhlbiBleGVjdXRlIHRoZSBjb21tYW5kIGRp cmVjdGx5IGFuZCBzZXQgdGhlIHNzdGF0ZSAoc3RhcnQgc3RhdGUpCisgICAgICAgdmFyaWFibGUg dG8gMC4gRXhhbXBsZXMgaW5jbHVkZSBTRVQgY29tbWFuZHMsIGxvY2FsIGRpcmVjdG9yeQorICAg ICAgIGxpc3RpbmdzLCB0aGUgQ09OTkVDVCBjb21tYW5kLgorICAgIDMuIElmIGEgY29tbWFuZCBy ZXF1aXJlcyB0aGUgS2VybWl0IHByb3RvY29sLCBzZXQgdGhlIGZvbGxvd2luZworICAgICAgIHZh cmlhYmxlczoKKyBzc3RhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyBkYXRh CisgICAneCcgKGVudGVyIHNlcnZlciBtb2RlKSAgICAgICAgICAgIChub25lKQorICAgJ3InIChz ZW5kIGEgJ2dldCcgY29tbWFuZCkgICAgICAgICBjbWFyZywgY21hcmcyCisgICAndicgKGVudGVy IHJlY2VpdmUgbW9kZSkgICAgICAgICAgIGNtYXJnMgorICAgJ2cnIChzZW5kIGEgZ2VuZXJpYyBj b21tYW5kKSAgICAgICBjbWFyZworICAgJ3MnIChzZW5kIGZpbGVzKSAgICAgICAgICAgICAgICAg ICBuZmlscywgY21hcmcgJiBjbWFyZzIgT1IgY21saXN0CisgICAnYycgKHNlbmQgYSByZW1vdGUg aG9zdCBjb21tYW5kKSAgIGNtYXJnCisKKworICAgICAgIGNtbGlzdCBpcyBhbiBhcnJheSBvZiBw b2ludGVycyB0byBzdHJpbmdzLgorICAgICAgIGNtYXJnLCBjbWFyZzIgYXJlIHBvaW50ZXJzIHRv IHN0cmluZ3MuCisgICAgICAgbmZpbHMgaXMgYW4gaW50ZWdlciAoaG1tbSwgcHJvYmFibHkgc2hv dWxkIGJlIGFuIHVuc2lnbmVkIGxvbmcpLgorCisgICAgICAgIGNtYXJnIGNhbiBiZToKKyAgICAg ICAgICAgICAgICBBIGZpbGVuYW1lIHN0cmluZyAocG9zc2libHkgd2lsZCksIG9yOgorICAgICAg ICAgICAgICAgIGEgcG9pbnRlciB0byBhIHByZWZhYnJpY2F0ZWQgZ2VuZXJpYyBjb21tYW5kIHN0 cmluZywgb3I6CisgICAgICAgICAgICAgICAgYSBwb2ludGVyIHRvIGEgaG9zdCBjb21tYW5kIHN0 cmluZy4KKworICAgICAgICBjbWFyZzIgaXM6CisgICAgICAgICAgICAgICAgVGhlIG5hbWUgdG8g c2VuZCBhIHNpbmdsZSBmaWxlIHVuZGVyLCBvcjoKKyAgICAgICAgICAgICAgICB0aGUgbmFtZSB1 bmRlciB3aGljaCB0byBzdG9yZSBhbiBpbmNvbWluZyBmaWxlOyBtdXN0IG5vdAorICAgICAgICAg ICAgICAgIGJlIHdpbGQuCisgICAgICAgICAgICAgICAgSWYgaXQncyB0aGUgbmFtZSBmb3IgcmVj ZWl2aW5nLCBhIG51bGwgdmFsdWUgbWVhbnMgdG8KKyAgICAgICAgICAgICAgICBzdG9yZSB0aGUg ZmlsZSB1bmRlciB0aGUgbmFtZSBpdCBhcnJpdmVzIHdpdGguCisKKyAgICAgICAgY21saXN0IGlz OgorICAgICAgICAgICAgICAgIEEgbGlzdCBvZiBub253aWxkIGZpbGVuYW1lcywgc3VjaCBhcyBw YXNzZWQgdmlhIGFyZ3YuCisKKyAgICAgICAgbmZpbHMgaXMgYW4gaW50ZWdlciwgaW50ZXJwcmV0 ZWQgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAtMTogZmlsZXNwZWMgKHBvc3NpYmx5IHdp bGQpIGluIGNtYXJnLCBtdXN0IGJlIGV4cGFuZGVkCisgICAgICAgICAgICAgICAgaW50ZXJuYWxs eS4KKyAgICAgICAgICAgICAgICAwOiBzZW5kIGZyb20gc3RkaW4gKHN0YW5kYXJkIGlucHV0KS4K KyAgICAgICAgICAgICAgICA+MDogbnVtYmVyIG9mIGZpbGVzIHRvIHNlbmQsIGZyb20gY21saXN0 LgorCisgICBUaGUgc2NyZWVuKCkgZnVuY3Rpb24gaXMgdXNlZCB0byB1cGRhdGUgdGhlIHNjcmVl biBkdXJpbmcgZmlsZQorICAgdHJhbnNmZXIuIFRoZSB0bG9nKCkgZnVuY3Rpb24gd3JpdGVzIHRv IGEgdHJhbnNhY3Rpb24gbG9nIChpZiBUTE9HIGlzCisgICBkZWZpbmVkKS4gVGhlIGRlYnVnKCkg ZnVuY3Rpb24gd3JpdGVzIHRvIGEgZGVidWdnaW5nIGxvZyAoaWYgREVCVUcgaXMKKyAgIGRlZmlu ZWQpLiBUaGUgaW50bXNnKCkgYW5kIGNoa2ludCgpIGZ1bmN0aW9ucyBwcm92aWRlIHRoZSB1c2Vy IGkvbyBmb3IKKyAgIGludGVycnVwdGluZyBmaWxlIHRyYW5zZmVycy4KKworICAgWyBbMTE3XUNv bnRlbnRzIF0gWyBbMTE4XUMtS2VybWl0IF0gWyBbMTE5XUtlcm1pdCBIb21lIF0KKworNC5FLiBH cm91cCBFOiBQbGF0Zm9ybS1EZXBlbmRlbnQgSS9PCisKKyAgIFBsYXRmb3JtLWRlcGVuZGVudCBm dW5jdGlvbiBkZWZpbml0aW9ucy4gQWxsIHRoZSBLZXJtaXQgbW9kdWxlcywKKyAgIGluY2x1ZGlu ZyB0aGUgY29tbWFuZCBwYWNrYWdlLCBjYWxsIHVwb24gdGhlc2UgZnVuY3Rpb25zLCB3aGljaCBh cmUKKyAgIGRlc2lnbmVkIHRvIHByb3ZpZGUgc3lzdGVtLWluZGVwZW5kZW50IHByaW1pdGl2ZXMg Zm9yIGNvbnRyb2xsaW5nIGFuZAorICAgbWFuaXB1bGF0aW5nIGRldmljZXMgYW5kIGZpbGVzLiBG b3IgVW5peCwgdGhlc2UgZnVuY3Rpb25zIGFyZSBkZWZpbmVkCisgICBpbiB0aGUgZmlsZXMgWzEy MF1ja3VmaW8uYyAoZmlsZXMpLCBbMTIxXWNrdXRpby5jIChjb21tdW5pY2F0aW9ucyksIGFuZAor ICAgWzEyMl1ja3VzaWcuYyAoc2lnbmFsIGhhbmRsaW5nKS4KKworICAgRm9yIFZNUywgdGhlIGZp bGVzIGFyZSBbMTIzXWNrdmZpby5jLCBja3Z0aW8uYywgYW5kIFsxMjRdY2t1c2lnLmMgKFZNUwor ICAgY2FuIHVzZSB0aGUgc2FtZSBzaWduYWwgaGFuZGxpbmcgcm91dGluZXMgYXMgVW5peCkuIEl0 IGRvZXNuJ3QgcmVhbGx5CisgICBtYXR0ZXIgd2hhdCB0aGUgZmlsZXMgYXJlIGNhbGxlZCwgZXhj ZXB0IGZvciBLZXJtaXQgZGlzdHJpYnV0aW9uCisgICBwdXJwb3NlcyAoZ3JvdXBpbmcgcmVsYXRl ZCBmaWxlcyB0b2dldGhlciBhbHBoYWJldGljYWxseSksIG9ubHkgdGhhdAorICAgZWFjaCBmdW5j dGlvbiBpcyBwcm92aWRlZCB3aXRoIHRoZSBuYW1lIGluZGljYXRlZCwgb2JzZXJ2ZXMgdGhlIHNh bWUKKyAgIGNhbGxpbmcgYW5kIHJldHVybiBjb252ZW50aW9ucywgYW5kIGhhcyB0aGUgc2FtZSB0 eXBlLgorCisgICBUaGUgR3JvdXAgRSBtb2R1bGVzIGNvbnRhaW4gYm90aCBmdW5jdGlvbnMgYW5k IGdsb2JhbCB2YXJpYWJsZXMgdGhhdAorICAgYXJlIGFjY2Vzc2VkIGJ5IG1vZHVsZXMgaW4gdGhl IG90aGVyIGdyb3Vwcy4gVGhlc2UgYXJlIG5vdyBkZXNjcmliZWQuCisKKyAgIChCeSB0aGUgd2F5 LCBJIGdvdCB0aGlzIGxpc3QgYnkgbGlua2luZyBhbGwgdGhlIEMtS2VybWl0IG1vZHVsZXMKKyAg IHRvZ2V0aGVyIGV4Y2VwdCBja3V0aW8gYW5kIGNrdWZpby4gVGhlc2UgYXJlIHRoZSBzeW1ib2xz IHRoYXQgbGQKKyAgIHJlcG9ydGVkIGFzIHVuZGVmaW5lZC4gQnV0IHRoYXQgd2FzIGEgbG9uZyB0 aW1lIGFnbywgcHJvYmFibHkgY2lyY2EKKyAgIFZlcnNpb24gNi4pCisKKzQuRS4xLiBHbG9iYWwg VmFyaWFibGVzCisKKyAgIGNoYXIgKkRFTENNRDsKKyAgICAgICAgICBQb2ludGVyIHRvIHN0cmlu ZyBjb250YWluaW5nIGNvbW1hbmQgZm9yIGRlbGV0aW5nIGZpbGVzLgorICAgICAgICAgIEV4YW1w bGU6IGNoYXIgKkRFTENNRCA9ICJybSAtZiAiOyAoVU5JWCkKKyAgICAgICAgICBFeGFtcGxlOiBj aGFyICpERUxDTUQgPSAiZGVsZXRlICI7IChWTVMpCisgICAgICAgICAgTm90ZSB0cmFpbGluZyBz cGFjZS4gRmlsZW5hbWUgaXMgY29uY2F0ZW5hdGVkIHRvIGVuZCBvZiB0aGlzCisgICAgICAgICAg c3RyaW5nLiBOT1RFOiBERUxDTUQgaXMgdXNlZCBvbmx5IGluIHZlcnNpb25zIHRoYXQgZG8gbm90 CisgICAgICAgICAgcHJvdmlkZSB0aGVpciBvd24gYnVpbHQtaW4gREVMRVRFIGNvbW1hbmQuCisK KyAgIGNoYXIgKkRJUkNNRDsKKyAgICAgICAgICBQb2ludGVyIHRvIHN0cmluZyBjb250YWluaW5n IGNvbW1hbmQgZm9yIGxpc3RpbmcgZmlsZXMgd2hlbiBhCisgICAgICAgICAgZmlsZXNwZWMgaXMg Z2l2ZW4uCisgICAgICAgICAgRXhhbXBsZTogY2hhciAqRElSQ01EID0gIi9iaW4vbHMgLWwgIjsg KFVOSVgpCisgICAgICAgICAgRXhhbXBsZTogY2hhciAqRElSQ01EID0gImRpcmVjdG9yeSAiOyAo Vk1TKQorICAgICAgICAgIE5vdGUgdHJhaWxpbmcgc3BhY2UuIEZpbGVuYW1lIGlzIGNvbmNhdGVu YXRlZCB0byBlbmQgb2YgdGhpcworICAgICAgICAgIHN0cmluZy4gTk9URTogRElSQ01EIGlzIHVz ZWQgb25seSBpbiB2ZXJzaW9ucyB0aGF0IGRvIG5vdAorICAgICAgICAgIHByb3ZpZGUgdGhlaXIg b3duIGJ1aWx0LWluIERJUkVDVE9SWSBjb21tYW5kLgorCisgICBjaGFyICpESVJDTTI7CisgICAg ICAgICAgUG9pbnRlciB0byBzdHJpbmcgY29udGFpbmluZyBjb21tYW5kIGZvciBsaXN0aW5nIGZp bGVzIHdoZW4gYQorICAgICAgICAgIGZpbGVzcGVjIGlzIG5vdCBnaXZlbi4gKGN1cnJlbnRseSBu b3QgdXNlZCwgaGFuZGxlZCBpbiBhbm90aGVyCisgICAgICAgICAgd2F5LikKKyAgICAgICAgICBF eGFtcGxlOiBjaGFyICpESVJDTUQyID0gIi9iaW4vbHMgLWxkICoiOworICAgICAgICAgIE5PVEU6 IERJUkNNRDIgaXMgdXNlZCBvbmx5IGluIHZlcnNpb25zIHRoYXQgZG8gbm90IHByb3ZpZGUgdGhl aXIKKyAgICAgICAgICBvd24gYnVpbHQtaW4gRElSRUNUT1JZIGNvbW1hbmQuCisKKyAgIGNoYXIg KlBXRENNRDsKKyAgICAgICAgICBQb2ludGVyIHRvIHN0cmluZyBjb250YWluaW5nIGNvbW1hbmQg dG8gZGlzcGxheSBjdXJyZW50CisgICAgICAgICAgZGlyZWN0b3J5LgorICAgICAgICAgIEV4YW1w bGU6IGNoYXIgKlBXRENNRCA9ICJwd2QgIjsKKyAgICAgICAgICBOT1RFOiBQV0RDTUQgaXMgdXNl ZCBvbmx5IGluIHZlcnNpb25zIHRoYXQgZG8gbm90IHByb3ZpZGUgdGhlaXIKKyAgICAgICAgICBv d24gYnVpbHQtaW4gUFdEIGNvbW1hbmQuCisKKyAgIGNoYXIgKlNQQUNNRDsKKyAgICAgICAgICBQ b2ludGVyIHRvIGNvbW1hbmQgdG8gZGlzcGxheSBmcmVlIGRpc2sgc3BhY2UgaW4gY3VycmVudAor ICAgICAgICAgIGRldmljZS9kaXJlY3RvcnkuCisgICAgICAgICAgRXhhbXBsZTogY2hhciAqU1BB Q01EID0gImRmIC4iOworICAgICAgICAgIE5PVEU6IFNQQUNNRCBpcyB1c2VkIG9ubHkgaW4gdmVy c2lvbnMgdGhhdCBkbyBub3QgcHJvdmlkZSB0aGVpcgorICAgICAgICAgIG93biBidWlsdC1pbiBT UEFDRSBjb21tYW5kLgorCisgICBjaGFyICpTUEFDTTI7CisgICAgICAgICAgUG9pbnRlciB0byBj b21tYW5kIHRvIGRpc3BsYXkgZnJlZSBkaXNrIHNwYWNlIGluIGFub3RoZXIKKyAgICAgICAgICBk ZXZpY2UvZGlyZWN0b3J5LgorICAgICAgICAgIEV4YW1wbGU6IGNoYXIgKlNQQUNNMiA9ICJkZiAi OworICAgICAgICAgIE5vdGUgdHJhaWxpbmcgc3BhY2UuIERldmljZSBvciBkaXJlY3RvcnkgbmFt ZSBpcyBhZGRlZCB0byB0aGlzCisgICAgICAgICAgc3RyaW5nLiBOT1RFOiBTUEFDTUQyIGlzIHVz ZWQgb25seSBpbiB2ZXJzaW9ucyB0aGF0IGRvIG5vdAorICAgICAgICAgIHByb3ZpZGUgdGhlaXIg b3duIGJ1aWx0LWluIFNQQUNFIGNvbW1hbmQuCisKKyAgIGNoYXIgKlRZUENNRDsKKyAgICAgICAg ICBQb2ludGVyIHRvIGNvbW1hbmQgZm9yIGRpc3BsYXlpbmcgdGhlIGNvbnRlbnRzIG9mIGEgZmls ZS4KKyAgICAgICAgICBFeGFtcGxlOiBjaGFyICpUWVBDTUQgPSAiY2F0ICI7CisgICAgICAgICAg Tm90ZSB0cmFpbGluZyBzcGFjZS4gRGV2aWNlIG9yIGRpcmVjdG9yeSBuYW1lIGlzIGFkZGVkIHRv IHRoaXMKKyAgICAgICAgICBzdHJpbmcuIE5PVEU6IFRZUENNRCBpcyB1c2VkIG9ubHkgaW4gdmVy c2lvbnMgdGhhdCBkbyBub3QKKyAgICAgICAgICBwcm92aWRlIHRoZWlyIG93biBidWlsdC1pbiBU WVBFIGNvbW1hbmQuCisKKyAgIGNoYXIgKldIT0NNRDsKKyAgICAgICAgICBQb2ludGVyIHRvIGNv bW1hbmQgZm9yIGRpc3BsYXlpbmcgbG9nZ2VkLWluIHVzZXJzLgorICAgICAgICAgIEV4YW1wbGU6 IGNoYXIgKldIT0NNRCA9ICJ3aG8gIjsKKyAgICAgICAgICBOb3RlIHRyYWlsaW5nIHNwYWNlLiBT cGVjaWZpYyB1c2VyIG5hbWUgbWF5IGJlIGFkZGVkIHRvIHRoaXMKKyAgICAgICAgICBzdHJpbmcu CisKKyAgIGludCBiYWNrZ3JkID0gMDsKKyAgICAgICAgICBGbGFnIGZvciB3aGV0aGVyIHByb2dy YW0gaXMgcnVubmluZyBpbiBmb3JlZ3JvdW5kICgwKSBvcgorICAgICAgICAgIGJhY2tncm91bmQg KG5vbnplcm8pLiBCYWNrZ3JvdW5kIG9wZXJhdGlvbiBpbXBsaWVzIHRoYXQgc2NyZWVuCisgICAg ICAgICAgb3V0cHV0IHNob3VsZCBub3QgYmUgZG9uZSBhbmQgdGhhdCBhbGwgZXJyb3JzIHNob3Vs ZCBiZSBmYXRhbC4KKworICAgaW50IGNreGVjaDsKKyAgICAgICAgICBGbGFnIGZvciB3aG8gaXMg dG8gZWNobyBjb25zb2xlIHR5cGVpbjoKKyAgICAgICAgICAxOiBUaGUgcHJvZ3JhbSAoc3lzdGVt IGlzIG5vdCBlY2hvaW5nKS4KKyAgICAgICAgICAwOiBUaGUgT1MsIGZyb250IGVuZCwgdGVybWlu YWwsIGV0YyAobm90IHRoaXMgcHJvZ3JhbSkuCisKKyAgIGNoYXIgKmNreHN5czsKKyAgICAgICAg ICBQb2ludGVyIHRvIHN0cmluZyB0aGF0IG5hbWVzIHRoZSBjb21wdXRlciBhbmQgb3BlcmF0aW5n IHN5c3RlbS4KKyAgICAgICAgICBFeGFtcGxlOiBjaGFyICpja3hzeXMgPSAiIE5lWFQgTWFjaCAx LjAiOworICAgICAgICAgIFRlbGxzIHdoYXQgY29tcHV0ZXIgc3lzdGVtIGNreHYgYXBwbGllcyB0 by4gSW4gVU5JWCBLZXJtaXQsIHRoaXMKKyAgICAgICAgICB2YXJpYWJsZSBpcyBhbHNvIHVzZWQg dG8gcHJpbnQgdGhlIHByb2dyYW0gaGVyYWxkLCBhbmQgaW4gdGhlCisgICAgICAgICAgU0hPVyBW RVJTSU9OIGNvbW1hbmQuCisKKyAgIGNoYXIgKmNreHY7CisgICAgICAgICAgUG9pbnRlciB0byB2 ZXJzaW9uL2VkaXQgaW5mbyBvZiBjaz90aW8uYyBtb2R1bGUuCisgICAgICAgICAgRXhhbXBsZTog Y2hhciAqY2t4diA9ICJVTklYIENvbW11bmljYXRpb25zIFN1cHBvcnQsIDYuMC4xNjksIDYKKyAg ICAgICAgICBTZXAgOTYiOworICAgICAgICAgIFVzZWQgYnkgU0hPVyBWRVJTSU9OIGNvbW1hbmQu CisKKyAgIGNoYXIgKmNrenN5czsKKyAgICAgICAgICBMaWtlIGNreHN5cywgYnV0IGJyaWVmZXIu CisgICAgICAgICAgRXhhbXBsZTogY2hhciAqY2t6c3lzID0gIiA0LjMgQlNEIjsKKyAgICAgICAg ICBUZWxscyB3aGF0IHBsYXRmb3JtIGNrenYgYXBwbGllcyB0by4gVXNlZCBieSB0aGUgU0hPVyBW RVJTSU9OCisgICAgICAgICAgY29tbWFuZC4KKworICAgY2hhciAqY2t6djsKKyAgICAgICAgICBQ b2ludGVyIHRvIHZlcnNpb24vZWRpdCBpbmZvIG9mIGNrP2Zpby5jIG1vZHVsZS4KKyAgICAgICAg ICBFeGFtcGxlOiBjaGFyICpja3p2ID0gIlVOSVggRmlsZSBzdXBwb3J0LCA2LjAuMTEzLCA2IFNl cCA5NiI7CisgICAgICAgICAgVXNlZCBieSBTSE9XIFZFUlNJT04gY29tbWFuZC4KKworICAgaW50 IGRmZmxvdzsKKyAgICAgICAgICBEZWZhdWx0IGZsb3cgY29udHJvbC4gMCA9IG5vbmUsIDEgPSBY b24vWG9mZiwgLi4uIChzZWUgRkxPX3h4eAorICAgICAgICAgIHN5bWJvbHMgaW4gY2tjZGViLmgp CisgICAgICAgICAgU2V0IGJ5IEdyb3VwIEUgbW9kdWxlLiBVc2VkIGJ5IFsxMjVdY2tjbWFpLmMg dG8gaW5pdGlhbGl6ZSBmbG93CisgICAgICAgICAgY29udHJvbCB2YXJpYWJsZS4KKworICAgaW50 IGRmbG9jOworICAgICAgICAgIERlZmF1bHQgbG9jYXRpb24uIDAgPSByZW1vdGUsIDEgPSBsb2Nh bC4gU2V0IGJ5IEdyb3VwIEUgbW9kdWxlLgorICAgICAgICAgIFVzZWQgYnkgY2tjbWFpLmMgdG8g aW5pdGlhbGl6ZSBsb2NhbCB2YXJpYWJsZS4gVXNlZCBpbiB2YXJpb3VzCisgICAgICAgICAgcGxh Y2VzIGluIHRoZSB1c2VyIGludGVyZmFjZS4KKworICAgaW50IGRmcHJ0eTsKKyAgICAgICAgICBE ZWZhdWx0IHBhcml0eS4gMCA9IG5vbmUsICdlJyA9IGV2ZW4sICdvJyA9IG9kZCwgJ20nID0gbWFy aywgJ3MnCisgICAgICAgICAgPSBzcGFjZS4gU2V0IGJ5IEdyb3VwIEUgbW9kdWxlLiBVc2VkIGJ5 IGNrY21haS5jIHRvIGluaXRpYWxpemUKKyAgICAgICAgICBwYXJpdHkgdmFyaWFibGUuCisKKyAg IGNoYXIgKmRmdHR5OworICAgICAgICAgIERlZmF1bHQgY29tbXVuaWNhdGlvbiBkZXZpY2UuIFNl dCBieSBHcm91cCBFIG1vZHVsZS4gVXNlZCBpbgorICAgICAgICAgIG1hbnkgcGxhY2VzLiBUaGlz IHZhcmlhYmxlIHNob3VsZCBiZSBpbml0aWFsaXplZCB0aGUgc3ltYm9sCisgICAgICAgICAgQ1RU TkFNLCB3aGljaCBpcyBkZWZpbmVkIGluIGNrY2RlYi5oLCBlLmcuIGFzICIvZGV2L3R0eSIgZm9y CisgICAgICAgICAgVU5JWCwgIlRUOiIgZm9yIFZNUywgZXRjLiBFeGFtcGxlOiBjaGFyICpkZnR0 eSA9IENUVE5BTTsKKworICAgY2hhciAqbXRjaHNbXTsKKyAgICAgICAgICBBcnJheSBvZiBzdHJp bmcgcG9pbnRlcnMgdG8gZmlsZW5hbWVzIHRoYXQgbWF0Y2hlZCB0aGUgbW9zdAorICAgICAgICAg IHJlY2VudCB3aWxkY2FyZCBtYXRjaCwgaS5lLiB0aGUgbW9zdCByZWNlbnQgY2FsbCB0byB6eHBh bmQoKS4KKyAgICAgICAgICBVc2VkIChhdCBsZWFzdCkgYnkgY29tbWFuZCBwYXJzaW5nIHBhY2th Z2UgZm9yIHBhcnRpYWwgZmlsZW5hbWUKKyAgICAgICAgICBjb21wbGV0aW9uLgorCisgICBpbnQg dGlsZGVfZXhwYW5kOworICAgICAgICAgIEZsYWcgZm9yIHdoZXRoZXIgdG8gYXR0ZW1wdCB0byBl eHBhbmQgbGVhZGluZyB0aWxkZXMgaW4KKyAgICAgICAgICBkaXJlY3RvcnkgbmFtZXMgKHVzZWQg aW4gVU5JWCBvbmx5LCBhbmQgdGhlbiBvbmx5IHdoZW4gdGhlCisgICAgICAgICAgc3ltYm9sIERU SUxERSBpcyBkZWZpbmVkLgorCisgICBpbnQgdHRucHJvdG87CisgICAgICAgICAgVGhlIHByb3Rv Y29sIGJlaW5nIHVzZWQgdG8gY29tbXVuaWNhdGUgb3ZlciBhIG5ldHdvcmsgZGV2aWNlLgorICAg ICAgICAgIFZhbHVlcyBhcmUgZGVmaW5lZCBpbiBja2NuZXQuaC4gRXhhbXBsZTogTlBfVEVMTkVU IGlzIG5ldHdvcmsKKyAgICAgICAgICBwcm90b2NvbCAidGVsbmV0Ii4KKworICAgaW50IG1heG5h bTsKKyAgICAgICAgICBUaGUgbWF4aW11bSBsZW5ndGggZm9yIGEgZmlsZW5hbWUsIGV4Y2x1c2l2 ZSBvZiBhbnkgZGV2aWNlIG9yCisgICAgICAgICAgZGlyZWN0b3J5IGluZm9ybWF0aW9uLCBpbiB0 aGUgZm9ybWF0IG9mIHRoZSBob3N0IG9wZXJhdGluZworICAgICAgICAgIHN5c3RlbS4KKworICAg aW50IG1heHBhdGg7CisgICAgICAgICAgVGhlIG1heGltdW0gbGVuZ3RoIGZvciBhIGZ1bGx5IHNw ZWNpZmllZCBmaWxlbmFtZSwgaW5jbHVkaW5nCisgICAgICAgICAgZGV2aWNlIGRlc2lnbmF0b3Is IGRpcmVjdG9yeSBuYW1lLCBuZXR3b3JrIG5vZGUgbmFtZSwgZXRjLCBpbgorICAgICAgICAgIHRo ZSBmb3JtYXQgb2YgdGhlIGhvc3Qgb3BlcmF0aW5nIHN5c3RlbSwgYW5kIGluY2x1ZGluZyBhbGwK KyAgICAgICAgICBwdW5jdHVhdGlvbi4KKworICAgaW50IHR0eWZkOworICAgICAgICAgIEZpbGUg ZGVzY3JpcHRvciBvZiB0aGUgY29tbXVuaWNhdGlvbiBkZXZpY2UuIC0xIGlmIHRoZXJlIGlzIG5v CisgICAgICAgICAgb3BlbiBvciB1c2FibGUgY29ubmVjdGlvbiwgaW5jbHVkaW5nIHdoZW4gQy1L ZXJtaXQgaXMgaW4gcmVtb3RlCisgICAgICAgICAgbW9kZS4gU2luY2UgdGhpcyBpcyBub3QgaW1w bGVtZW50ZWQgZXZlcnl3aGVyZSwgcmVmZXJlbmNlcyB0byBpdAorICAgICAgICAgIGFyZSBpbiAj aWZkZWYgQ0tfVFRZRkQuLiNlbmRpZi4KKworICAgWyBbMTI2XUNvbnRlbnRzIF0gWyBbMTI3XUMt S2VybWl0IF0gWyBbMTI4XUtlcm1pdCBIb21lIF0KKworNC5FLjIuIEZ1bmN0aW9ucworCisgICBU aGVzZSBhcmUgZGl2aWRlZCBpbnRvIHRocmVlIGNhdGVnb3JpZXM6IGZpbGUtcmVsYXRlZCBmdW5j dGlvbnMgKEIuMSksCisgICBjb21tdW5pY2F0aW9uIGZ1bmN0aW9ucyAoQi4yKSwgYW5kIG1pc2Nl bGxhbmVvdXMgZnVuY3Rpb25zIChCLjMpLgorCis0LkUuMi4xLiBGaWxlLVJlbGF0ZWQgRnVuY3Rp b25zCisKKyAgIEluIG1vc3QgaW1wbGVtZW50YXRpb25zLCB0aGVzZSBhcmUgY29sbGVjdGVkIHRv Z2V0aGVyIGludG8gYSBtb2R1bGUKKyAgIGNhbGxlZCBjaz9maW8uYywgd2hlcmUgPyA9ICJ1IiAo WzEyOV1ja3V0aW8uYyBmb3IgVW5peCksICJ2IgorICAgKFsxMzBdY2t2dGlvLmMgZm9yIFZNUyks IFsxMzFdZXRjLiBUbyBiZSB0b3RhbGx5IHBsYXRmb3JtLWluZGVwZW5kZW50LAorICAgQy1LZXJt aXQgbWFpbnRhaW5zIGl0cyBvd24gZmlsZSBudW1iZXJzLCBhbmQgcHJvdmlkZXMgdGhlIGZ1bmN0 aW9ucworICAgZGVzY3JpYmVkIGluIHRoaXMgc2VjdGlvbiB0byBkZWFsIHdpdGggdGhlIGZpbGVz IGFzc29jaWF0ZWQgd2l0aCB0aGVtLgorICAgVGhlIGZpbGUgbnVtYmVycyBhcmUgcmVmZXJyZWQg dG8gc3ltYm9saWNhbGx5LCBhbmQgYXJlIGRlZmluZWQgYXMKKyAgIGZvbGxvd3MgaW4gY2tja2Vy Lmg6CisKKyAgI2RlZmluZSBaQ1RFUk0gICAgICAwICAgICAgICAgICAvKiBDb25zb2xlIHRlcm1p bmFsICovCisgICNkZWZpbmUgWlNURElPICAgICAgMSAgICAgICAgICAgLyogU3RhbmRhcmQgaW5w dXQvb3V0cHV0ICovCisgICNkZWZpbmUgWklGSUxFICAgICAgMiAgICAgICAgICAgLyogQ3VycmVu dCBpbnB1dCBmaWxlIGZvciBTRU5EIGNvbW1hbmQgKi8KKyAgI2RlZmluZSBaT0ZJTEUgICAgICAz ICAgICAgICAgICAvKiBDdXJyZW50IG91dHB1dCBmaWxlIGZvciBSRUNFSVZFIGNvbW1hbmQgKi8K KyAgI2RlZmluZSBaREZJTEUgICAgICA0ICAgICAgICAgICAvKiBDdXJyZW50IGRlYnVnZ2luZyBs b2cgZmlsZSAqLworICAjZGVmaW5lIFpURklMRSAgICAgIDUgICAgICAgICAgIC8qIEN1cnJlbnQg dHJhbnNhY3Rpb24gbG9nIGZpbGUgKi8KKyAgI2RlZmluZSBaUEZJTEUgICAgICA2ICAgICAgICAg ICAvKiBDdXJyZW50IHBhY2tldCBsb2cgZmlsZSAqLworICAjZGVmaW5lIFpTRklMRSAgICAgIDcg ICAgICAgICAgIC8qIEN1cnJlbnQgc2Vzc2lvbiBsb2cgZmlsZSAqLworICAjZGVmaW5lIFpTWVNG TiAgICAgIDggICAgICAgICAgIC8qIElucHV0IGZyb20gYSBzeXN0ZW0gZnVuY3Rpb24gKHBpcGUp ICovCisgICNkZWZpbmUgWlJGSUxFICAgICAgOSAgICAgICAgICAgLyogTG9jYWwgZmlsZSBmb3Ig UkVBRCBjb21tYW5kICovICAoTkVXKQorICAjZGVmaW5lIFpXRklMRSAgICAgMTAgICAgICAgICAg IC8qIExvY2FsIGZpbGUgZm9yIFdSSVRFIGNvbW1hbmQgKi8gKE5FVykKKyAgI2RlZmluZSBaTUZJ TEUgICAgIDExICAgICAgICAgICAvKiBBdXhpbGlhcnkgZmlsZSBmb3IgaW50ZXJuYWwgdXNlICov IChORVcpCisgICNkZWZpbmUgWk5GSUxTICAgICAxMiAgICAgICAgICAgLyogSG93IG1hbnkgZGVm aW5lZCBmaWxlIG51bWJlcnMgKi8KKworICAgSW4gdGhlIGRlc2NyaXB0aW9ucyBiZWxvdywgZm4g cmVmZXJzIHRvIGEgZmlsZW5hbWUsIGFuZCBuIHJlZmVycyB0byBvbmUKKyAgIG9mIHRoZXNlIGZp bGUgbnVtYmVycy4gRnVuY3Rpb25zIGFyZSBvZiB0eXBlIGludCB1bmxlc3Mgb3RoZXJ3aXNlCisg ICBub3RlZCwgYW5kIGFyZSBsaXN0ZWQgbW9zdGx5IGFscGhhYmV0aWNhbGx5LgorCisgICBpbnQK KyAgICAgICAgICBjaGtmbihuKSBpbnQgbjsKKyAgICAgICAgICBDaGVja3MgdGhlIGZpbGUgbnVt YmVyIG4uIFJldHVybnM6CisgICAgICAgICAgIC0xOiBGaWxlIG51bWJlciBuIGlzIG91dCBvZiBy YW5nZQorICAgICAgICAgICAgMDogbiBpcyBpbiByYW5nZSwgYnV0IGZpbGUgaXMgbm90IG9wZW4K KyAgICAgICAgICAgIDE6IG4gaW4gcmFuZ2UgYW5kIGZpbGUgaXMgb3BlbgorCisgICBpbnQKKyAg ICAgICAgICBpc3dpbGQoZmlsc3BlYykgY2hhciAqZmlsZXNwZWM7CisgICAgICAgICAgQ2hlY2tz IGlmIHRoZSBmaWxlIHNwZWNpZmljYXRpb24gaXMgIndpbGQiLCBpLmUuIGNvbnRhaW5zCisgICAg ICAgICAgbWV0YWNoYXJhY3RlcnMgb3Igb3RoZXIgbm90YXRpb25zIGludGVuZGVkIHRvIG1hdGNo IG11bHRpcGxlCisgICAgICAgICAgZmlsZW5hbWVzLiBSZXR1cm5zOgorICAgICAgICAgICAgMDog bm90IHdpbGQKKyAgICAgICAgICAgIDE6IHdpbGQuCisKKyAgIGludAorICAgICAgICAgIGlzZGly KHN0cmluZykgY2hhciAqc3RyaW5nOworICAgICAgICAgIENoZWNrcyBpZiB0aGUgc3RyaW5nIGlz IHRoZSBuYW1lIG9mIGFuIGV4aXN0aW5nIGRpcmVjdG9yeS4gVGhlCisgICAgICAgICAgaWRlYSBp cyB0byBjaGVjayB3aGV0aGVyIHRoZSBzdHJpbmcgY2FuIGJlICJjZCdkIiB0bywgc28gaW4gc29t ZQorICAgICAgICAgIGNhc2VzIChlLmcuIERPUykgaXQgbWlnaHQgYWxzbyBpbmRpY2F0ZSBhbnkg ZmlsZSBzdHJ1Y3R1cmVkCisgICAgICAgICAgZGV2aWNlLCBzdWNoIGFzIGEgZGlzayBkcml2ZSAo bGlrZSBBOikuIE90aGVyIG5vbnplcm8gcmV0dXJucworICAgICAgICAgIGluZGljYXRlIHN5c3Rl bS1kZXBlbmRlbnQgaW5mb3JtYXRpb247IGUuZy4gaW4gVk1TCisgICAgICAgICAgaXNkaXIoIlsu Rk9PXSIpIHJldHVybnMgMSBidXQgaXNkaXIoIkZPTy5ESVI7MSIpIHJldHVybnMgMiB0bworICAg ICAgICAgIGluZGljYXRlIHRoZSBkaXJlY3RvcnktZmlsZSBuYW1lIGlzIGluIGEgZm9ybWF0IHRo YXQgbmVlZHMKKyAgICAgICAgICBjb252ZXJzaW9uIGJlZm9yZSBpdCBjYW4gYmUgY29tYmluZWQg d2l0aCBhIGZpbGVuYW1lLiBSZXR1cm5zOgorICAgICAgICAgICAgMDogbm90IGEgZGlyZWN0b3J5 IChpbmNsdWRpbmcgYW55IGtpbmQgb2YgZXJyb3IpCisgICAgICAgICAgICAxOiBpdCBpcyBhbiBl eGlzdGluZyBkaXJlY3RvcnkKKworICAgY2hhciAqCisgICAgICAgICAgemZjZGF0KG5hbWUpIGNo YXIgKm5hbWU7CisgICAgICAgICAgUmV0dXJucyBtb2RpZmljYXRpb24gKHByZWZlcmFibHksIG90 aGVyd2lzZSBjcmVhdGlvbikgZGF0ZS90aW1lCisgICAgICAgICAgb2YgZmlsZSB3aG9zZSBuYW1l IGlzIGdpdmVuIGluIHRoZSBhcmd1bWVudCBzdHJpbmcuIFJldHVybiB2YWx1ZQorICAgICAgICAg IGlzIGEgcG9pbnRlciB0byBhIHN0cmluZyBvZiB0aGUgZm9ybSB5eXl5bW1kZCBoaDptbTpzcywg Zm9yCisgICAgICAgICAgZXhhbXBsZSAxOTkzMTIzMSAyMzo1OTo1OSwgd2hpY2ggcmVwcmVzZW50 cyB0aGUgbG9jYWwgdGltZSAobm8KKyAgICAgICAgICB0aW1lem9uZSBvciBkYXlsaWdodCBzYXZp bmdzIHRpbWUgZmluYWdsaW5nIHJlcXVpcmVkKS4gUmV0dXJucworICAgICAgICAgIHRoZSBudWxs IHN0cmluZyAoIiIpIG9uIGZhaWx1cmUuIFRoZSB0ZXh0IHBvaW50ZWQgdG8gYnkgdGhlCisgICAg ICAgICAgc3RyaW5nIHBvaW50ZXIgbWlnaHQgYmUgaW4gYSBzdGF0aWMgYnVmZmVyLCBhbmQgc28g c2hvdWxkIGJlCisgICAgICAgICAgY29waWVkIHRvIGEgc2FmZSBwbGFjZSBieSB0aGUgY2FsbGVy IGJlZm9yZSBhbnkgc3Vic2VxdWVudCBjYWxscworICAgICAgICAgIHRvIHRoaXMgZnVuY3Rpb24u CisKKyAgIHN0cnVjdCB6Zm5mcCAqCisgICAgICAgICAgemZucWZwKGZuLCBidWZsZW4sIGJ1Zikg Y2hhciAqIGZuOyBpbnQgYnVmbGVuOyBjaGFyICogYnVmOworICAgICAgICAgIEdpdmVuIHRoZSBm aWxlbmFtZSBmbiwgdGhlIGNvcnJlc3BvbmRpbmcgZnVsbHkgcXVhbGlmaWVkLAorICAgICAgICAg IGFic29sdXRlIGZpbGVuYW1lIGlzIHBsYWNlZCBpbnRvIHRoZSBidWZmZXIgYnVmLCB3aG9zZSBs ZW5ndGggaXMKKyAgICAgICAgICBidWZsZW4uIE9uIGZhaWx1cmUgcmV0dXJucyBhIE5VTEwgcG9p bnRlci4gT24gc3VjY2VzcyByZXR1cm5zIGEKKyAgICAgICAgICBwb2ludGVyIHRvIGEgc3RydWN0 IHpmbmZwIGNvbnRhaW5pbmcgcG9pbnRlcnMgdG8gdGhlIGZ1bGwKKyAgICAgICAgICBwYXRobmFt ZSBhbmQgdG8ganVzdCB0aGUgZmlsZW5hbWUsIGFuZCBhbiBpbnQgZ2l2aW5nIHRoZSBsZW5ndGgK KyAgICAgICAgICBvZiB0aGUgZnVsbCBwYXRobmFtZS4gQWxsIHJlZmVyZW5jZXMgdG8gdGhpcyBm dW5jdGlvbiBpbgorICAgICAgICAgIG1haW5saW5lIGNvZGUgbXVzdCBiZSBwcm90ZWN0ZWQgYnkg I2lmZGVmIFpGTlFGUC4uI2VuZGlmLAorICAgICAgICAgIGJlY2F1c2UgaXQgaXMgbm90IHByZXNl bnQgaW4gYWxsIG9mIHRoZSBjaypmaW8uYyBtb2R1bGVzLiBTbyBpZgorICAgICAgICAgIHlvdSBp bXBsZW1lbnQgdGhpcyBmdW5jdGlvbiBpbiBhIHZlcnNpb24gdGhhdCBkaWQgbm90IGhhdmUgaXQK KyAgICAgICAgICBiZWZvcmUsIGJlIHN1cmUgdG8gYWRkICNkZWZpbmUgWkZOUUZQIGluIHRoZSBh cHByb3ByaWF0ZSBzcG90IGluCisgICAgICAgICAgY2tjZGViLmggb3IgaW4gdGhlIGJ1aWxkLXBy b2NlZHVyZSBDRkxBR1MuCisKKyAgIGludAorICAgICAgICAgIHpjbXBmbihzMSxzMikgY2hhciAq IHMyLCAqIHMyOworICAgICAgICAgIENvbXBhcmVzIHR3byBmaWxlbmFtZXMgdG8gc2VlIGlmIHRo ZXkgcmVmZXIgdG8gdGhlIHNhbWUuCisgICAgICAgICAgSW50ZXJuYWxseSwgdGhlIGFyZ3VtZW50 cyBjYW4gYmUgY29udmVydGVkIHRvIGZ1bGx5IHF1YWxpZmllZAorICAgICAgICAgIHBhdGhuYW1l cywgZS5nLiB3aXRoIHpmbnFmcCgpLCByZWFscGF0aCgpLCBvciBzb21lc3VjaC4gSW4gVW5peAor ICAgICAgICAgIG9yIG90aGVyIHN5c3RlbXMgd2hlcmUgc3ltYm9saWMgbGlua3MgZXhpc3QsIHRo ZSBsaW5rIHNob3VsZCBiZQorICAgICAgICAgIHJlc29sdmVkIGJlZm9yZSBtYWtpbmcgdGhlIGNv bXBhcmlzb24gb3IgbG9va2luZyBhdCB0aGUgaW5vZGVzLgorICAgICAgICAgIFJldHVybnM6Cisg ICAgICAgICAgICAwOiBGaWxlcyBhcmUgbm90IGlkZW50aWNhbC4KKyAgICAgICAgICAgIDE6IEZp bGVzIGFyZSBpZGVudGljYWwuCisKKyAgIGludAorICAgICAgICAgIHpmc2Vlayhwb3MpIGxvbmcg cG9zOworICAgICAgICAgIFBvc2l0aW9ucyB0aGUgaW5wdXQgcG9pbnRlciBvbiB0aGUgY3VycmVu dCBpbnB1dCBmaWxlIHRvIHRoZQorICAgICAgICAgIGdpdmVuIHBvc2l0aW9uLiBUaGUgcG9zIGFy Z3VtZW50IGlzIDAtYmFzZWQsIHRoZSBvZmZzZXQKKyAgICAgICAgICAoZGlzdGFuY2UgaW4gYnl0 ZXMpIGZyb20gYmVnaW5uaW5nIG9mIHRoZSBmaWxlLiBOZWVkZWQgZm9yCisgICAgICAgICAgUkVT RU5ELCBQU0VORCwgYW5kIG90aGVyIHJlY292ZXJ5IG9wZXJhdGlvbnMuIFRoaXMgZnVuY3Rpb24g aXMKKyAgICAgICAgICBub3QgbmVjZXNzYXJpbHkgcG9zc2libGUgb24gYWxsIHN5c3RlbXMsIGUu Zy4gcmVjb3JkLW9yaWVudGVkCisgICAgICAgICAgc3lzdGVtcy4gSXQgc2hvdWxkIG9ubHkgYmUg dXNlZCBvbiBiaW5hcnkgZmlsZXMgKGkuZS4gZmlsZXMgd2UKKyAgICAgICAgICBhcmUgc2VuZGlu ZyBpbiBiaW5hcnkgbW9kZSkgYW5kIHN0cmVhbS1vcmllbnRlZCBmaWxlIHN5c3RlbXMuCisgICAg ICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgLTE6IG9uIGZhaWx1cmUuCisgICAgICAgICAgICAw OiBPbiBzdWNjZXNzLgorCisgICBpbnQKKyAgICAgICAgICB6Y2hkaXIoZGlybmFtKSBjaGFyICpk aXJuYW07CisgICAgICAgICAgQ2hhbmdlcyBjdXJyZW50IG9yIGRlZmF1bHQgZGlyZWN0b3J5IHRv IHRoZSBvbmUgZ2l2ZW4gaW4gZGlybmFtLgorICAgICAgICAgIFJldHVybnM6CisgICAgICAgICAg ICAwOiBPbiBmYWlsdXJlLgorICAgICAgICAgICAgMTogb24gc3VjY2Vzcy4KKworICAgbG9uZwor ICAgICAgICAgIHpjaGtpKGZuKSBjaGFyICpmbjsKKyAgICAgICAgICBDaGVjayB0byBzZWUgaWYg ZmlsZSB3aXRoIG5hbWUgZm4gaXMgYSByZWd1bGFyLCByZWFkYWJsZSwKKyAgICAgICAgICBleGlz dGluZyBmaWxlLCBzdWl0YWJsZSBmb3IgS2VybWl0IHRvIHNlbmQgLS0gbm90IGEgZGlyZWN0b3J5 LAorICAgICAgICAgIG5vdCBhIHN5bWJvbGljIGxpbmssIGV0Yy4gUmV0dXJuczoKKyAgICAgICAg ICAgLTM6IGlmIGZpbGUgZXhpc3RzIGJ1dCBpcyBub3QgYWNjZXNzaWJsZSAoZS5nLiByZWFkLXBy b3RlY3RlZCk7CisgICAgICAgICAgIC0yOiBpZiBmaWxlIGV4aXN0cyBidXQgaXMgbm90IG9mIGEg cmVhZGFibGUgdHlwZSAoZS5nLiBhCisgICAgICAgICAgZGlyZWN0b3J5KTsKKyAgICAgICAgICAg LTE6IG9uIGVycm9yIChlLmcuIGZpbGUgZG9lcyBub3QgZXhpc3QsIG9yIGZuIGlzIGdhcmJhZ2Up OworICAgICAgICAgID49MDogKGxlbmd0aCBvZiBmaWxlKSBpZiBmaWxlIGV4aXN0cyBhbmQgaXMg cmVhZGFibGUuCisgICAgICAgICAgQWxzbyBzZWUgaXNkaXIoKSwgemdldGZzKCkuCisKKyAgIGlu dAorICAgICAgICAgIHpjaGtwaWQocGlkKSB1bnNpZ25lZCBsb25nIHBpZDsKKyAgICAgICAgICBS ZXR1cm5zOgorICAgICAgICAgICAgMTogSWYgdGhlIGdpdmVuIHByb2Nlc3MgSUQgKGUuZy4gcGlk IGluIFVOSVgpIGlzIHZhbGlkIGFuZAorICAgICAgICAgIGFjdGl2ZQorICAgICAgICAgICAgMDog b3RoZXJ3aXNlLgorCisgICBsb25nCisgICAgICAgICAgemdldGZzKGZuKSBjaGFyICpmbjsKKyAg ICAgICAgICBHZXRzIHRoZSBzaXplIG9mIHRoZSBnaXZlbiBmaWxlLCByZWdhcmRsZXNzIG9mIGFj Y2Vzc2liaWxpdHkuCisgICAgICAgICAgVXNlZCBmb3IgZGlyZWN0b3J5IGxpc3RpbmdzLiBVbmxp a2UgemNoa2koKSwgc2hvdWxkIHJldHVybiB0aGUKKyAgICAgICAgICBzaXplIG9mIGFueSBraW5k IG9mIGZpbGUsIGV2ZW4gYSBkaXJlY3RvcnkuIHpnZXRmcygpIGFsc28gc2hvdWxkCisgICAgICAg ICAgc2VydmUgYXMgYSBtaW5pICJnZXQgZmlsZSBpbmZvIiBmdW5jdGlvbiB0aGF0IGNhbiBiZSB1 c2VkIHVudGlsCisgICAgICAgICAgd2UgZGVzaWduIGEgYmV0dGVyIG9uZSwgYnkgYWxzbyBzZXR0 aW5nIHNvbWUgZ2xvYmFsIHZhcmlhYmxlczoKKyAgICAgICAgICAgIGludCB6Z2ZzX2xpbmsgICA9 IDEvMCA9IGZpbGUgaXMgKG5vdCkgYSBzeW1ib2xpYyBsaW5rLgorICAgICAgICAgICAgaW50IHpn ZnNfZGlyICAgID0gMS8wID0gZmlsZSBpcyAobm90KSBhIGRpcmVjdG9yeS4KKyAgICAgICAgICAg IGNoYXIgbGlua25hbWVbXSA9IGlmIHpnZnNfbGluayAhPSAwLCBuYW1lIG9mIGZpbGUgbGluayBw b2ludHMKKyAgICAgICAgICB0by4KKyAgICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAtMTog b24gZXJyb3IgKGUuZy4gZmlsZSBkb2VzIG5vdCBleGlzdCwgb3IgZm4gaXMgZ2FyYmFnZSk7Cisg ICAgICAgICAgPj0wOiAobGVuZ3RoIG9mIGZpbGUpIGlmIGZpbGUgZXhpc3RzIGFuZCBpcyByZWFk YWJsZS4KKworICAgaW50CisgICAgICAgICAgemNoa28oZm4pIGNoYXIgKmZuOworICAgICAgICAg IENoZWNrcyB0byBzZWUgaWYgYSBmaWxlIG9mIHRoZSBnaXZlbiBuYW1lIGNhbiBiZSBjcmVhdGVk LgorICAgICAgICAgIFJldHVybnM6CisgICAgICAgICAgIC0xOiBpZiBmaWxlIGNhbm5vdCBiZSBj cmVhdGVkLCBvciBvbiBhbnkga2luZCBvZiBlcnJvci4KKyAgICAgICAgICAgIDA6IGlmIGZpbGUg Y2FuIGJlIGNyZWF0ZWQuCisKKyAgIGludAorICAgICAgICAgIHpjaGtzcGEoZm4sbGVuKSBjaGFy ICpmOyBsb25nIGxlbjsKKyAgICAgICAgICBDaGVja3MgdG8gc2VlIGlmIHRoZXJlIGlzIHN1ZmZp Y2llbnQgc3BhY2UgdG8gc3RvcmUgdGhlIGZpbGUKKyAgICAgICAgICBuYW1lZCBmbiwgd2hpY2gg aXMgbGVuIGJ5dGVzIGxvbmcuIElmIHlvdSBjYW4ndCB3cml0ZSBhIGZ1bmN0aW9uCisgICAgICAg ICAgdG8gZG8gdGhpcywgdGhlbiBqdXN0IG1ha2UgYSBkdW1teSB0aGF0IGFsd2F5cyByZXR1cm5z IDE7IGhpZ2hlcgorICAgICAgICAgIGxldmVsIGNvZGUgd2lsbCByZWNvdmVyIGZyb20gZGlzay1m dWxsIGVycm9ycy4gVGhlIHJlY2VpdmluZworICAgICAgICAgIEtlcm1pdCB1c2VzIHRoaXMgZnVu Y3Rpb24gdG8gcmVmdXNlIGFuIGluY29taW5nIGZpbGUgYmFzZWQgb24KKyAgICAgICAgICBpdHMg c2l6ZSwgdmlhIHRoZSBhdHRyaWJ1dGUgbWVjaGFuaXNtLiBSZXR1cm5zOgorICAgICAgICAgICAt MTogb24gZXJyb3IuCisgICAgICAgICAgICAwOiBpZiB0aGVyZSBpcyBub3QgZW5vdWdoIHNwYWNl LgorICAgICAgICAgICAgMTogaWYgdGhlcmUgaXMgZW5vdWdoIHNwYWNlLgorCisgICBpbnQKKyAg ICAgICAgICB6Y2hpbihuLGMpIGludCBuOyBpbnQgKmM7CisgICAgICAgICAgR2V0cyBhIGNoYXJh Y3RlciBmcm9tIGZpbGUgbnVtYmVyIG4sIHJldHVybiBpdCBpbiBjIChjYWxsIHdpdGgKKyAgICAg ICAgICAmYykuIFJldHVybnM6CisgICAgICAgICAgIC0xOiBvbiBmYWlsdXJlLCBpbmNsdWRpbmcg RU9GLgorICAgICAgICAgICAgMDogb24gc3VjY2VzcyB3aXRoIGNoYXJhY3RlciBpbiBjLgorCisg ICBpbnQKKyAgICAgICAgICB6Y2hvdXQobixjKSBpbnQgbjsgY2hhciBjOworICAgICAgICAgIFdy aXRlcyB0aGUgY2hhcmFjdGVyIGMgdG8gZmlsZSBudW1iZXIgbi4gUmV0dXJuczoKKyAgICAgICAg ICAgLTE6IG9uIGVycm9yLgorICAgICAgICAgICAgMDogb24gc3VjY2Vzcy4KKworICAgaW50Cisg ICAgICAgICAgemNsb3NlKG4pIGludCBuOworICAgICAgICAgIENsb3NlcyBmaWxlIG51bWJlciBu LiBSZXR1cm5zOgorICAgICAgICAgICAtMTogb24gZXJyb3IuCisgICAgICAgICAgICAxOiBvbiBz dWNjZXNzLgorCisgICBpbnQKKyAgICAgICAgICB6ZGVsZXQoZm4pIGNoYXIgKm5hbWU7CisgICAg ICAgICAgQXR0ZW1wdHMgdG8gZGVsZXRlIChyZW1vdmUsIGVyYXNlKSB0aGUgbmFtZWQgZmlsZS4g UmV0dXJuczoKKyAgICAgICAgICAgLTE6IG9uIGVycm9yLgorICAgICAgICAgICAgMTogaWYgZmls ZSB3YXMgZGVsZXRlZCBzdWNjZXNzZnVsbHkuCisKKyAgIGNoYXIgKgorICAgICAgICAgIHpncGVy bShjaGFyICogZikKKyAgICAgICAgICBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgc3lzdGVtLWRl cGVuZGVudCBudW1lcmljCisgICAgICAgICAgcGVybWlzc2lvbnMvcHJvdGVjdGlvbiBzdHJpbmcg Zm9yIGZpbGUgZiwgb3IgTlVMTCB1cG9uIGZhaWx1cmUuCisgICAgICAgICAgVXNlZCBpZiBDS19Q RVJNUyBpcyBkZWZpbmVkLgorCisgICBjaGFyICoKKyAgICAgICAgICB6aXBlcm0oY2hhciAqIGYp CisgICAgICAgICAgUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIHN5c3RlbS1kZXBlbmRlbnQgc3lt Ym9saWMKKyAgICAgICAgICBwZXJtaXNzaW9ucy9wcm90ZWN0aW9uIHN0cmluZyBmb3IgZmlsZSBm LCBvciBOVUxMIHVwb24gZmFpbHVyZS4KKyAgICAgICAgICBVc2VkIGlmIENLX1BFUk1TIGlzIGRl ZmluZWQuIEV4YW1wbGU6IEluIFVOSVggemdwZXJtKGYpIG1pZ2h0CisgICAgICAgICAgcmV0dXJu ICIxMDA3NzAiLCBidXQgemlwZXJtKCkgbWlnaHQgcmV0dXJuICItcnd4cnd4LS0tIi4gSW4gVk1T LAorICAgICAgICAgIHpncGVybSgpIHdvdWxkIHJldHVybiBhIGhleGFkZWNpbWFsIHN0cmluZywg YnV0IHppcGVybSgpIHdvdWxkCisgICAgICAgICAgcmV0dXJuIHNvbWV0aGluZyBsaWtlICIoUldF RCxSV0VELFJFLCkiLgorCisgICBjaGFyICoKKyAgICAgICAgICB6Z3RkaXIoKQorICAgICAgICAg IFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IGRpcmVjdG9yeSwg Zm9sZGVyLAorICAgICAgICAgIGV0Yywgb3IgYSBOVUxMIHBvaW50ZXIgaWYgdGhlIGN1cnJlbnQg ZGlyZWN0b3J5IGNhbm5vdCBiZQorICAgICAgICAgIGRldGVybWluZWQuIElmIHBvc3NpYmxlLCB0 aGUgZGlyZWN0b3J5IHNwZWNpZmljYXRpb24gc2hvdWxkIGJlCisgICAgICAgICAgKGEpIGZ1bGx5 IHNwZWNpZmllZCwgZS5nLiBhcyBhIGNvbXBsZXRlIHBhdGhuYW1lLCBhbmQgKGIpIGJlCisgICAg ICAgICAgc3VpdGFibGUgZm9yIGFwcGVuZGluZyBhIGZpbGVuYW1lLiBUaHVzLCBmb3IgZXhhbXBs ZSwgVW5peAorICAgICAgICAgIGRpcmVjdG9yeSBuYW1lcyBzaG91bGQgZW5kIHdpdGggJy8nLiBW TVMgZGlyZWN0b3J5IG5hbWVzIHNob3VsZAorICAgICAgICAgIGxvb2sgbGlrZSBERVY6W05BTUVd IChyYXRoZXIgdGhhbiwgc2F5LCBOQU1FLkRJUjsxKS4KKworICAgY2hhciAqCisgICAgICAgICAg emhvbWUoKQorICAgICAgICAgIFJldHVybnMgYSBwb2ludGVyIHRvIGEgc3RyaW5nIGNvbnRhaW5p bmcgdGhlIHVzZXIncyBob21lCisgICAgICAgICAgZGlyZWN0b3J5LCBvciBOVUxMIHVwb24gZXJy b3IuIFNob3VsZCBiZSBmb3JtYXR0ZWQgbGlrZSB6Z3RkaXIoKQorICAgICAgICAgIChxLnYuKS4K KworICAgaW50CisgICAgICAgICAgemluZmlsbCgpCisgICAgICAgICAgRmlsbCBidWZmZXIgZnJv bSBpbnB1dCBmaWxlLiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgYnkgdGhlIG1hY3JvCisgICAgICAg ICAgem1pbmNoYXIoKSwgd2hpY2ggaXMgZGVmaW5lZCBpbiBja2NrZXIuaC4gem1pbmNoYXIoKSBt YW5hZ2VzIGl0cworICAgICAgICAgIG93biBidWZmZXIsIGFuZCBjYWxscyB6aW5maWxsKCkgdG8g ZmlsbCBpdCB3aGVuZXZlciBpdCBiZWNvbWVzCisgICAgICAgICAgZW1wdHkuIEl0IGlzIHVzZWQg b25seSBmb3Igc2VuZGluZyBmaWxlcywgYW5kIHJlYWRzIGNoYXJhY3RlcnMKKyAgICAgICAgICBv bmx5IGZyb20gZmlsZSBudW1iZXIgWklGSUxFLiB6aW5maWxsKCkgcmV0dXJucyAtMSB1cG9uIGVu ZCBvZgorICAgICAgICAgIGZpbGUsIC0yIHVwb24gZmF0YWwgZXJyb3IsIGFuZCAtMyB1cG9uIHRp bWVvdXQgKGUuZy4gd2hlbgorICAgICAgICAgIHJlYWRpbmcgZnJvbSBhIHBpcGUpOyBvdGhlcndp c2UgaXQgcmV0dXJucyB0aGUgZmlyc3QgY2hhcmFjdGVyCisgICAgICAgICAgZnJvbSB0aGUgYnVm ZmVyIGl0IGp1c3QgcmVhZC4KKworICAgaW50CisgICAgICAgICAgemtzZWxmKCkKKyAgICAgICAg ICBLaWxscyB0aGUgY3VycmVudCBqb2IsIHNlc3Npb24sIHByb2Nlc3MsIGV0YywgbG9ncyBvdXQs CisgICAgICAgICAgZGlzYXBwZWFycy4gVXNlZCBieSB0aGUgS2VybWl0IHNlcnZlciB3aGVuIGl0 IHJlY2VpdmVzIGEgQllFCisgICAgICAgICAgY29tbWFuZC4gT24gZmFpbHVyZSwgcmV0dXJucyAt MS4gT24gc3VjY2VzcywgZG9lcyBub3QgcmV0dXJuIGF0CisgICAgICAgICAgYWxsISBUaGlzIGZ1 bmN0aW9uIHNob3VsZCBub3QgYmUgY2FsbGVkIHVudGlsIGFsbCBvdGhlciBzdGVwcworICAgICAg ICAgIGhhdmUgYmVlbiB0YWtlbiB0byBjbG9zZSBmaWxlcywgZXRjLgorCisgICBWT0lECisgICAg ICAgICAgenN0cmlwKGZuLCZmbjIpIGNoYXIgKmZuMSwgKipmbjI7CisgICAgICAgICAgU3RyaXBz IGRldmljZSBhbmQgZGlyZWN0b3J5LCBldGMsIGZyb20gZmlsZSBzcGVjaWZpY2F0aW9uIGZuLAor ICAgICAgICAgIGxlYXZpbmcgb25seSB0aGUgZmlsZW5hbWUgKGluY2x1ZGluZyAiZXh0ZW5zaW9u IiBvciAiZmlsZXR5cGUiCisgICAgICAgICAgLS0gdGhlIHBhcnQgYWZ0ZXIgdGhlIGRvdCkuIEZv ciBleGFtcGxlIERVQTA6W1BST0dSQU1TXU9PRkEuQzszCisgICAgICAgICAgYmVjb21lcyBPT0ZB LkMsIG9yIC91c3IvZmRjL29vZmEuYyBiZWNvbWVzIG9vZmEuYy4gUmV0dXJucyBhCisgICAgICAg ICAgcG9pbnRlciB0byByZXN1bHQgaW4gZm4yLgorCisgICBpbnQKKyAgICAgICAgICB6c2V0cGVy bShjaGFyICogZmlsZSwgdW5zaWduZWQgaW50IGNvZGUpCisgICAgICAgICAgU2V0IHBlcm1pc3Np b25zIG9mIGZpbGUgdG8gZ2l2ZW4gc3lzdGVtLWRlcGVuZGVudCBjb2RlLiAgIDA6IE9uCisgICAg ICAgICAgZmFpbHVyZS4KKyAgICAgICAgICAgIDE6IG9uIHN1Y2Nlc3MuCisKKyAgIGludAorICAg ICAgICAgIHpzZXRyb290KGNoYXIgKiBkaXIpCisgICAgICAgICAgU2V0cyB0aGUgcm9vdCBmb3Ig dGhlIHVzZXIncyBmaWxlIGFjY2VzcywgbGlrZSBVbml4IGNocm9vdCgpLAorICAgICAgICAgIGJ1 dCBkb2VzIG5vdCByZXF1aXJlIHByaXZpbGVnZS4gSW4gVW5peCwgdGhpcyBtdXN0IGJlCisgICAg ICAgICAgaW1wbGVtZW50ZWQgZW50aXJlbHkgYnkgS2VybWl0J3Mgb3duIGZpbGUgYWNjZXNzIHJv dXRpbmVzLgorICAgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICAxOiBTdWNjZXNzCisgICAg ICAgICAgIC0xOiBJbnZhbGlkIGFyZ3VtZW50CisgICAgICAgICAgIC0yOgorICAgICAgICAgICAt MzogSW50ZXJuYWwgZXJyb3IKKyAgICAgICAgICAgLTQ6IEFjY2VzcyB0byBnaXZlbiBkaXJlY3Rv cnkgZGVuaWVkCisgICAgICAgICAgIC01OiBOZXcgcm9vdCBub3Qgd2l0aGluIG9sZCByb290CisK KyAgIGludAorICAgICAgICAgIHppbnJvb3QoY2hhciAqIGZpbGUpCisgICAgICAgICAgSWYgbm8g cm9vdCBpcyBzZXQgKHpzZXRyb290KCkpLCByZXR1cm5zIDEuCisgICAgICAgICAgT3RoZXJ3aXNl LCBpZiBnaXZlbiBmaWxlIGlzIGluIHRoZSByb290LCByZXR1cm5zIDEuCisgICAgICAgICAgT3Ro ZXJ3aXNlLCByZXR1cm5zIDAuCisKKyAgIFZPSUQKKyAgICAgICAgICB6bHRvcihmbixmbjIpIGNo YXIgKmZuMSwgKmZuMjsKKyAgICAgICAgICBMb2NhbC1Uby1SZW1vdGUgZmlsZW5hbWUgdHJhbnNs YXRpb24uIE9CU09MRVRFOiByZXBsYWNlZCBieQorICAgICAgICAgIG56bHRvcigpIChxLnYuKS4g VHJhbnNsYXRlcyB0aGUgbG9jYWwgZmlsZW5hbWUgZm4gaW50byBhIGZvcm1hdAorICAgICAgICAg IHN1aXRhYmxlIGZvciB0cmFuc21pc3Npb24gdG8gYW4gYXJiaXRyYXJ5IHR5cGUgb2YgY29tcHV0 ZXIsIGFuZAorICAgICAgICAgIGNvcGllcyB0aGUgcmVzdWx0IGludG8gdGhlIGJ1ZmZlciBwb2lu dGVkIHRvIGJ5IGZuMi4gVHJhbnNsYXRpb24KKyAgICAgICAgICBtYXkgaW52b2x2ZSAoYSkgc3Ry aXBwaW5nIHRoZSBkZXZpY2UgYW5kL29yIGRpcmVjdG9yeS9wYXRoIG5hbWUsCisgICAgICAgICAg KGIpIGNvbnZlcnRpbmcgbG93ZXJjYXNlIHRvIHVwcGVyY2FzZSwgKGMpIHJlbW92aW5nIHNwYWNl cyBhbmQKKyAgICAgICAgICBzdHJhbmdlIGNoYXJhY3RlcnMsIG9yIGNvbnZlcnRpbmcgdGhlbSB0 byBzb21lIGlubm9jdW91cworICAgICAgICAgIGFscGhhYmV0aWMgY2hhcmFjdGVyIGxpa2UgWCwg KGQpIGRpc2NhcmRpbmcgb3IgY29udmVydGluZyBleHRyYQorICAgICAgICAgIHBlcmlvZHMgKHRo ZXJlIHNob3VsZCBub3QgYmUgbW9yZSB0aGFuIG9uZSkuIERvZXMgaXRzIGJlc3QuCisgICAgICAg ICAgUmV0dXJucyBubyB2YWx1ZS4gbmFtZTIgaXMgYSBwb2ludGVyIHRvIGEgYnVmZmVyLCBmdXJu aXNoZWQgYnkKKyAgICAgICAgICB0aGUgY2FsbGVyLCBpbnRvIHdoaWNoIHpsdG9yKCkgd3JpdGVz IHRoZSByZXN1bHRpbmcgbmFtZS4gTm8KKyAgICAgICAgICBsZW5ndGggY2hlY2tpbmcgaXMgZG9u ZS4KKworICAgI2lmZGVmIE5aTFRPUgorICAgICAgICAgIFZPSUQKKyAgICAgICAgICBuemx0b3Io Zm4sZm4yLGNvbnZlcnQscGF0aG5hbWVzLG1heCkgY2hhciAqZm4xLCpmbjI7IGludAorICAgICAg ICAgIGNvbnZlcnQscGF0aG5hbWVzLG1heDsKKyAgICAgICAgICBSZXBsYWNlcyB6bHRvcigpLiBU aGlzIG5ldyB2ZXJzaW9uIGhhbmRsZXMgcGF0aG5hbWVzIGFuZCBjaGVja3MKKyAgICAgICAgICBs ZW5ndGguIGZuMSBhbmQgZm4yIGFyZSBhcyBpbiB6bHRvcigpLiBUaGlzIHZlcnNpb24gaXMgY2Fs bGVkCisgICAgICAgICAgdW5jb25kaXRpb25hbGx5IGZvciBlYWNoIGZpbGUsIHJhdGhlciB0aGFu IG9ubHkgd2hlbiBmaWxlbmFtZQorICAgICAgICAgIGNvbnZlcnNpb24gaXMgZW5hYmxlZC4gUGF0 aG5hbWVzIGNhbiBoYXZlIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorCisgICAgICAgICAgICBQQVRI X09GRjogUGF0aG5hbWUsIGlmIGFueSwgaXMgdG8gYmUgc3RyaXBwZWQKKyAgICAgICAgICAgIFBB VEhfUkVMOiBUaGUgcmVsYXRpdmUgcGF0aG5hbWUgaXMgdG8gYmUgaW5jbHVkZWQKKyAgICAgICAg ICAgIFBBVEhfQUJTOiBUaGUgZnVsbCBwYXRobmFtZSBpcyB0byBiZSBpbmNsdWRlZAorCisgICAg ICAgICAgQWZ0ZXIgaGFuZGxpbmcgcGF0aG5hbWVzLCBjb252ZXJzaW9uIGlzIGRvbmUgdG8gdGhl IHJlc3VsdCBhcyBpbgorICAgICAgICAgIHRoZSB6bHRvcigpIGRlc2NyaXB0aW9uIGlmIGNvbnZl cnQgIT0gMDsgaWYgcmVsYXRpdmUgb3IgYWJzb2x1dGUKKyAgICAgICAgICBwYXRobmFtZXMgYXJl IGluY2x1ZGVkLCB0aGV5IGFyZSBjb252ZXJ0ZWQgdG8gVU5JWCBmb3JtYXQsIGkuZS4KKyAgICAg ICAgICB3aXRoIHNsYXNoICgvKSBhcyB0aGUgZGlyZWN0b3J5IHNlcGFyYXRvci4gVGhlIG1heCBw YXJhbWV0ZXIKKyAgICAgICAgICBzcGVjaWZpZXMgdGhlIG1heGltdW0gc2l6ZSBvZiBmbjIuIElm IGNvbnZlcnQgPiAwLCB0aGUgcmVndWxhcgorICAgICAgICAgIGNvbnZlcnNpb25zIGFyZSBkb25l OyBpZiBjb252ZXJ0IDwgMCwgbWluaW1hbCBjb252ZXJzaW9ucyBhcmUKKyAgICAgICAgICBkb25l ICh3ZSBza2lwIHVwcGVyY2FzaW5nIHRoZSBsZXR0ZXJzLCB3ZSBhbGxvdyBtb3JlIHRoYW4gb25l CisgICAgICAgICAgcGVyaW9kLCBldGM7IHRoaXMgY2FuIGJlIHVzZWQgd2hlbiB3ZSBrbm93IG91 ciBwYXJ0bmVyIGlzIFVOSVgKKyAgICAgICAgICBvciBzaW1pbGFyKS4KKworICAgI2VuZGlmIC8q IE5aTFRPUiAqLworCisgICBpbnQKKyAgICAgICAgICBuenhwYW5kKGZuLGZsYWdzKSBjaGFyICpm bjsgaW50IGZsYWdzOworICAgICAgICAgIFJlcGxhY2VzIHp4cGFuZCgpLCB3aGljaCBpcyBvYnNv bGV0ZSBhcyBvZiBDLUtlcm1pdCA3LjAuCisgICAgICAgICAgQ2FsbCB3aXRoOgorICAgICAgICAg ICAgZm4gPSBQb2ludGVyIHRvIGZpbGVuYW1lIG9yIHBhdHRlcm4uCisgICAgICAgICAgICBmbGFn cyA9IG9wdGlvbiBiaXRzOgorICAgICAgICAgICAgICBmbGFncyAmIFpYX0ZJTE9OTFkgIE1hdGNo IHJlZ3VsYXIgZmlsZXMKKyAgICAgICAgICAgICAgZmxhZ3MgJiBaWF9ESVJPTkxZICBNYXRjaCBk aXJlY3RvcmllcworICAgICAgICAgICAgICBmbGFncyAmIFpYX1JFQ1VSU0UgIERlc2NlbmQgdGhy b3VnaCBkaXJlY3RvcnkgdHJlZQorICAgICAgICAgICAgICBmbGFncyAmIFpYX01BVENIRE9UIE1h dGNoICJkb3QgZmlsZXMiCisgICAgICAgICAgICAgIGZsYWdzICYgWlhfTk9CQUNLVVAgRG9uJ3Qg bWF0Y2ggImJhY2t1cCBmaWxlcyIKKyAgICAgICAgICAgICAgZmxhZ3MgJiBaWF9OT0xJTktTICBE b24ndCBmb2xsb3cgc3ltbGlua3MuCisKKyAgICAgICAgICBSZXR1cm5zIHRoZSBudW1iZXIgb2Yg ZmlsZXMgdGhhdCBtYXRjaCBmbiwgd2l0aCBkYXRhIHN0cnVjdHVyZXMKKyAgICAgICAgICBzZXQg dXAgc28gdGhlIGZpcnN0IGZpbGUgKGlmIGFueSkgd2lsbCBiZSByZXR1cm5lZCBieSB0aGUgbmV4 dAorICAgICAgICAgIHpuZXh0KCkgY2FsbC4gSWYgWlhfRklMT05MWSBhbmQgWlhfRElST05MWSBh cmUgYm90aCBzZXQsIG9yCisgICAgICAgICAgbmVpdGhlciBvbmUgaXMgc2V0LCBmaWxlcyBhbmQg ZGlyZWN0b3JpZXMgYXJlIG1hdGNoZWQuIE5vdGVzOgorCisgICAgICAgICAxLiBJdCBpcyBlc3Nl bnRpYWwgdGhhdCB0aGUgbnVtYmVyIHJldHVybmVkIGJ5IG56eHBhbmQoKSByZWZsZWN0CisgICAg ICAgICAgICB0aGUgYWN0dWFsIG51bWJlciBvZiBmaWxlbmFtZXMgdGhhdCB3aWxsIGJlIHJldHVy bmVkIGJ5CisgICAgICAgICAgICB6bmV4dCgpIGNhbGxzLiBJbiBvdGhlciB3b3JkczoKKyAgZm9y IChuID0gbnp4cGFuZChzdHJpbmcsZmxhZ3MpOyBuID4gMDsgbi0tKSB7CisgICAgICB6bmV4dChi dWYpOworICAgICAgcHJpbnRmKCIlc1xuIiwgYnVmKTsKKyAgfQorCisgICAgICAgICAgICBzaG91 bGQgcHJpbnQgYWxsIHRoZSBmaWxlIG5hbWVzOyBubyBtb3JlLCBubyBsZXNzLgorICAgICAgICAg Mi4gSW4gVU5JWCwgRE9TLCBPUy05LCBldGMsIHdoZXJlIGRpcmVjdG9yaWVzIGNvbnRhaW4gZW50 cmllcyBmb3IKKyAgICAgICAgICAgIHRoZW1zZWx2ZXMgKC4pIGFuZCB0aGUgc3VwZXJpb3IgZGly ZWN0b3J5ICguLiksIHRoZXNlIHNob3VsZAorICAgICAgICAgICAgTk9UIGJlIGluY2x1ZGVkIGlu IHRoZSBsaXN0IHVuZGVyIGFueSBjaXJjdW1zdGFuY2VzLCBpbmNsdWRpbmcKKyAgICAgICAgICAg IHdoZW4gWlhfTUFUQ0hET1QgaXMgc2V0LgorICAgICAgICAgMy4gQWRkaXRpb25hbCBvcHRpb24g Yml0cyBtaWdodCBiZSBhZGRlZCBpbiB0aGUgZnV0dXJlLCBlLmcuIGZvcgorICAgICAgICAgICAg c29ydGluZyAoc29ydCBieSBkYXRlL25hbWUvc2l6ZSwgcmV2ZXJzZS9hc2NlbmRpbmcsIGV0Yyku CisgICAgICAgICAgICBDdXJyZW50bHkgdGhpcyBpcyBkb25lIG9ubHkgaW4gaGlnaGVyIGxldmVs IGNvZGUgKHRocm91Z2ggYQorICAgICAgICAgICAgaGFjayBpbiB3aGljaCB0aGUgbnp4cGFuZCgp IGV4cG9ydHMgaXRzIGZpbGVuYW1lIGFycmF5LCB3aGljaAorICAgICAgICAgICAgaXMgbm90IHBv cnRhYmxlIGJlY2F1c2Ugbm90IGFsbCBPUydzIGNhbiB1c2UgdGhpcyBtZWNoYW5pc20pLgorCisg ICBpbnQKKyAgICAgICAgICB6bWFpbChhZGRyLGZuKSBjaGFyICphZGRyLCBmbjsKKyAgICAgICAg ICBTZW5kIHRoZSBsb2NhbCwgZXhpc3RpbmcgZmlsZSBmbiBhcyBlLW1haWwgdG8gdGhlIGFkZHJl c3MgYWRkci4KKyAgICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgMDogb24gc3VjY2Vzcwor ICAgICAgICAgICAgMjogaWYgbWFpbCBkZWxpdmVyZWQgYnV0IHRlbXAgZmlsZSBjYW4ndCBiZSBk ZWxldGVkCisgICAgICAgICAgIC0yOiBpZiBtYWlsIGNhbid0IGJlIGRlbGl2ZXJlZAorCisgICBp bnQKKyAgICAgICAgICB6bWtkaXIocGF0aCkgY2hhciAqcGF0aDsKKyAgICAgICAgICBUaGUgcGF0 aCBjYW4gYmUgYSBmaWxlIHNwZWNpZmljYXRpb24gdGhhdCBtaWdodCBjb250YWluCisgICAgICAg ICAgZGlyZWN0b3J5IGluZm9ybWF0aW9uLCBpbiB3aGljaCB0aGUgZmlsZW5hbWUgaXMgZXhwZWN0 ZWQgdG8gYmUKKyAgICAgICAgICBpbmNsdWRlZCwgb3IgYW4gdW5hbWJpZ3VvdXMgZGlyZWN0b3J5 IHNwZWNpZmljYXRpb24gKGUuZy4gaW4KKyAgICAgICAgICBVTklYIGl0IG11c3QgZW5kIHdpdGgg Ii8iKS4gVGhpcyByb3V0aW5lIGF0dGVtcHRzIHRvIGNyZWF0ZSBhbnkKKyAgICAgICAgICBkaXJl Y3RvcmllcyBpbiB0aGUgZ2l2ZW4gcGF0aCB0aGF0IGRvbid0IGFscmVhZHkgZXhpc3QuIFJldHVy bnMKKyAgICAgICAgICAwIG9yIGdyZWF0ZXIgc3VjY2Vzczogbm8gZGlyZWN0b3JpZXMgbmVlZGVk IGNyZWF0aW9uLCBvciBlbHNlCisgICAgICAgICAgYWxsIGRpcmVjdG9yaWVzIHRoYXQgbmVlZGVk IGNyZWF0aW9uIHdlcmUgY3JlYXRlZCBzdWNjZXNzZnVsbHk7CisgICAgICAgICAgdGhlIHJldHVy biBjb2RlIGlzIHRoZSBudW1iZXIgb2YgZGlyZWN0b3JpZXMgdGhhdCB3ZXJlIGNyZWF0ZWQuCisg ICAgICAgICAgUmV0dXJucyAtMSBvbiBmYWlsdXJlIHRvIGNyZWF0ZSBhbnkgb2YgdGhlIG5lZWRl ZCBkaXJlY3Rvcmllcy4KKworICAgaW50CisgICAgICAgICAgenJtZGlyKHBhdGgpIGNoYXIgKnBh dGg7CisgICAgICAgICAgQXR0ZW1wdHMgdG8gcmVtb3ZlIHRoZSBnaXZlbiBkaXJlY3RvcnkuIFJl dHVybnMgMCBvbiBzdWNjZXNzLCAtMQorICAgICAgICAgIG9uIGZhaWx1cmUuIFRoZSBkZXRhaWxl ZCBzZW1hbnRpY3MgYXJlIG9wZW4gLS0gc2hvdWxkIGl0IGZhaWwgaWYKKyAgICAgICAgICB0aGUg ZGlyZWN0b3J5IGNvbnRhaW5zIGFueSBmaWxlcyBvciBzdWJkaXJlY3RvcmllcywgZXRjLiBJdCBp cworICAgICAgICAgIHByb2JhYmx5IGJlc3QgZm9yIHRoaXMgcm91dGluZSB0byBiZWhhdmUgaW4g d2hhdGV2ZXIgbWFubmVyIGlzCisgICAgICAgICAgY3VzdG9tYXJ5IG9uIHRoZSB1bmRlcmx5aW5n IHBsYXRmb3JtOyBlLmcuIGluIFVOSVgsIFZNUywgRE9TLAorICAgICAgICAgIGV0Yywgd2hlcmUg ZGlyZWN0b3JpZXMgY2FuIG5vdCBiZSByZW1vdmVkIHVubGVzcyB0aGV5IGFyZSBlbXB0eS4KKwor ICAgVk9JRAorICAgICAgICAgIHpuZXduKGZuLHMpIGNoYXIgKmZuLCAqKnM7CisgICAgICAgICAg VHJhbnNmb3JtcyB0aGUgbmFtZSBmbiBpbnRvIGEgZmlsZW5hbWUgdGhhdCBpcyBndWFyYW50ZWVk IHRvIGJlCisgICAgICAgICAgdW5pcXVlLiBJZiB0aGUgZmlsZSBmbiBkb2VzIG5vdCBleGlzdCwg dGhlbiB0aGUgbmV3IG5hbWUgaXMgdGhlCisgICAgICAgICAgc2FtZSBhcyBmbjsgT3RoZXJ3aXNl LCBpdCdzIGRpZmZlcmVudC4gdGhpcyBmdW5jdGlvbiBkb2VzIGl0cworICAgICAgICAgIGJlc3Qs IHJldHVybnMgbm8gdmFsdWUuIE5ldyBuYW1lIGlzIGNyZWF0ZWQgaW4gY2FsbGVyJ3Mgc3BhY2Uu CisgICAgICAgICAgQ2FsbCBsaWtlIHRoaXM6IHpuZXduKG9sZCwmbmV3KTsuIFRoZSBzZWNvbmQg cGFyYW1ldGVyIGlzIGEKKyAgICAgICAgICBwb2ludGVyIHRvIHRoZSBuZXcgbmFtZS4gVGhpcyBw b2ludGVyIGlzIHNldCBieSB6bmV3bigpIHRvIHBvaW50CisgICAgICAgICAgdG8gYSBzdGF0aWMg c3RyaW5nIGluIGl0cyBvd24gc3BhY2UsIHNvIGJlIHN1cmUgdG8gdGhlIHJlc3VsdCB0bworICAg ICAgICAgIGEgc2FmZSBwbGFjZSBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIGFnYWluLgor CisgICBpbnQKKyAgICAgICAgICB6bmV4dChmbikgY2hhciAqZm47CisgICAgICAgICAgQ29waWVz IHRoZSBuZXh0IGZpbGUgbmFtZSBmcm9tIGEgZmlsZSBsaXN0IGNyZWF0ZWQgYnkgenhwYW5kKCkK KyAgICAgICAgICBpbnRvIHRoZSBzdHJpbmcgcG9pbnRlZCB0byBieSBmbiAoc2VlIHp4cGFuZCku IElmIG5vIG1vcmUgZmlsZXMsCisgICAgICAgICAgdGhlbiB0aGUgbnVsbCBzdHJpbmcgaXMgcGxh Y2VkIHRoZXJlLiBSZXR1cm5zIDAgaWYgdGhlcmUgYXJlIG5vCisgICAgICAgICAgbW9yZSBmaWxl bmFtZXMsIHdpdGggMHRoIGVsZW1lbnQgdGhlIGFycmF5IHBvaW50ZWQgdG8gYnkgZm4gc2V0Cisg ICAgICAgICAgdG8gTlVMLiBJZiB0aGVyZSBpcyBhIGZpbGVuYW1lLCBpdCBpcyBzdG9yZWQgaW4g dGhlIGFycmF5CisgICAgICAgICAgcG9pbnRlZCB0byBieSBmbiBhbmQgYSBwb3NpdGl2ZSBudW1i ZXIgaXMgcmV0dXJuZWQuIE5PVEU6IFRoaXMKKyAgICAgICAgICBpcyBhIGNoYW5nZSBmcm9tIGVh cmxpZXIgZGVmaW5pdGlvbnMgb2YgdGhpcyBmdW5jdGlvbgorICAgICAgICAgIChwcmUtMTk5OSks IHdoaWNoIHJldHVybmVkIHRoZSBudW1iZXIgb2YgZmlsZXMgcmVtYWluaW5nOyB0aHVzIDAKKyAg ICAgICAgICB3YXMgdGhlIHJldHVybiB2YWx1ZSB3aGVuIHJldHVybmluZyB0aGUgZmluYWwgZmls ZS4gSG93ZXZlciwgbm8KKyAgICAgICAgICBtYWlubGluZSBjb2RlIGV2ZXIgZGVwZW5kZWQgb24g dGhlIHJldHVybiB2YWx1ZSwgc28gdGhpcyBjaGFuZ2UKKyAgICAgICAgICBzaG91bGQgYmUgc2Fm ZS4KKworICAgaW50CisgICAgICAgICAgem9wZW5pKG4sZm4pIGludCBuOyBjaGFyICpmbjsKKyAg ICAgICAgICBPcGVucyB0aGUgZmlsZSBuYW1lZCBmbiBmb3IgaW5wdXQgYXMgZmlsZSBudW1iZXIg bi4gUmV0dXJuczoKKyAgICAgICAgICAgIDA6IG9uIGZhaWx1cmUuCisgICAgICAgICAgICAxOiBv biBzdWNjZXNzLgorCisgICBpbnQKKyAgICAgICAgICB6b3Blbm8obixmbix6eixmY2IpIGludCBu OyBjaGFyICpuYW1lOyBzdHJ1Y3QgemF0dHIgKnp6OyBzdHJ1Y3QKKyAgICAgICAgICBmaWxpbmZv ICpmY2I7CisgICAgICAgICAgQXR0ZW1wdHMgdG8gb3BlbiB0aGUgbmFtZWQgZmlsZSBmb3Igb3V0 cHV0IGFzIGZpbGUgbnVtYmVyIG4uIHp6CisgICAgICAgICAgaXMgYSBLZXJtaXQgZmlsZSBhdHRy aWJ1dGUgc3RydWN0dXJlIGFzIGRlZmluZWQgaW4gY2tjZGViLmgsCisgICAgICAgICAgY29udGFp bmluZyB2YXJpb3VzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBmaWxlLCBpbmNsdWRpbmcgaXRzCisg ICAgICAgICAgc2l6ZSwgY3JlYXRpb24gZGF0ZSwgYW5kIHNvIGZvcnRoLiBUaGlzIGZ1bmN0aW9u IHNob3VsZCBhdHRlbXB0CisgICAgICAgICAgdG8gaG9ub3IgYXMgbWFueSBvZiB0aGVzZSBhcyBw b3NzaWJsZS4gZmNiIGlzIGEgImZpbGUgY29udHJvbAorICAgICAgICAgIGJsb2NrIiBpbiB0aGUg dHJhZGl0aW9uYWwgc2Vuc2UsIGRlZmluZWQgaW4gY2tjZGViLmgsIGNvbnRhaW5pbmcKKyAgICAg ICAgICBpbmZvcm1hdGlvbiByZWxldmFudCB0byBjb21wbGljYXRlZCBmaWxlIHN5c3RlbXMgbGlr ZSBWTVMgKFJNUyksCisgICAgICAgICAgSUJNIE1WUywgZXRjLCBsaWtlIGJsb2Nrc2l6ZSwgcmVj b3JkIGxlbmd0aCwgb3JnYW5pemF0aW9uLAorICAgICAgICAgIHJlY29yZCBmb3JtYXQsIGNhcnJp YWdlIGNvbnRyb2wsIGV0Yy4gUmV0dXJuczoKKyAgICAgICAgICAgIDA6IG9uIGZhaWx1cmUuCisg ICAgICAgICAgICAxOiBvbiBzdWNjZXNzLgorCisgICBpbnQKKyAgICAgICAgICB6b3V0ZHVtcCgp CisgICAgICAgICAgRHVtcHMgYSBmaWxlIG91dHB1dCBidWZmZXIuIFVzZWQgd2l0aCB0aGUgbWFj cm8gem1jaG91dCgpCisgICAgICAgICAgZGVmaW5lZCBpbiBja2NrZXIuaC4gVXNlZCBvbmx5IHdp dGggZmlsZSBudW1iZXIgWk9GSUxFLCBpLmUuIHRoZQorICAgICAgICAgIGZpbGUgdGhhdCBpcyBi ZWluZyByZWNlaXZlZCBieSBLZXJtaXQgZHVyaW5nIGZpbGUgdHJhbnNmZXIuCisgICAgICAgICAg UmV0dXJuczoKKyAgICAgICAgICAgLTE6IG9uIGZhaWx1cmUuCisgICAgICAgICAgICAwOiBvbiBz dWNjZXNzLgorCisgICBpbnQKKyAgICAgICAgICB6cHJpbnQocCxmbikgY2hhciAqcCwgKmY7Cisg ICAgICAgICAgUHJpbnRzIHRoZSBmaWxlIHdpdGggbmFtZSBmbiBvbiBhIGxvY2FsIHByaW50ZXIs IHdpdGggb3B0aW9ucyBwLgorICAgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICAwOiBvbiBz dWNjZXNzCisgICAgICAgICAgICAzOiBpZiBmaWxlIHNlbnQgdG8gcHJpbnRlciBidXQgY2FuJ3Qg YmUgZGVsZXRlZAorICAgICAgICAgICAtMzogaWYgZmlsZSBjYW4ndCBiZSBwcmludGVkCisKKyAg IGludAorICAgICAgICAgIHpyZW5hbWUoZm4sZm4yKSBjaGFyICpmbiwgKmZuMjsKKyAgICAgICAg ICBDaGFuZ2VzIHRoZSBuYW1lIG9mIGZpbGUgZm4gdG8gZm4yLiBJZiBmbjIgaXMgdGhlIG5hbWUg b2YgYW4KKyAgICAgICAgICBleGlzdGluZyBkaXJlY3RvcnksIG9yIGEgZmlsZS1zdHJ1Y3R1cmVk IGRldmljZSwgdGhlbiBmaWxlIGZuIGlzCisgICAgICAgICAgbW92ZWQgdG8gdGhhdCBkaXJlY3Rv cnkgb3IgZGV2aWNlLCBrZWVwaW5nIGl0cyBvcmlnaW5hbCBuYW1lLiBJZgorICAgICAgICAgIGZu MiBsYWNrcyBhIGRpcmVjdG9yeSBzZXBhcmF0b3Igd2hlbiBwYXNzZWQgdG8gdGhpcyBmdW5jdGlv biwgYW4KKyAgICAgICAgICBhcHByb3ByaWF0ZSBvbmUgaXMgc3VwcGxpZWQuIFJldHVybnM6Cisg ICAgICAgICAgIC0xOiBvbiBmYWlsdXJlLgorICAgICAgICAgICAgMDogb24gc3VjY2Vzcy4KKwor ICAgaW50CisgICAgICAgICAgemNvcHkoc291cmNlLGRlc3QpIGNoYXIgKiBzb3VyY2UsICogZGVz dDsKKyAgICAgICAgICBDb3BpZXMgdGhlIHNvdXJjZSBmaWxlIHRvIHRoZSBkZXN0aW5hdGlvbi4g T25lIGZpbGUgb25seS4gTm8KKyAgICAgICAgICB3aWxkY2FyZHMuIFRoZSBkZXN0aW5hdGlvbiBz dHJpbmcgbWF5IGJlIGEgZmlsZW5hbWUgb3IgYQorICAgICAgICAgIGRpcmVjdG9yeSBuYW1lLiBS ZXR1cm5zOgorICAgICAgICAgICAgMDogb24gc3VjY2Vzcy4KKyAgICAgICAgICAgPDA6IG9uIGZh aWx1cmU6CisgICAgICAgICAgICAtMjogc291cmNlIGZpbGUgaXMgbm90IGEgcmVndWxhciBmaWxl LgorICAgICAgICAgICAgLTM6IHNvdXJjZSBmaWxlIG5vdCBmb3VuZC4KKyAgICAgICAgICAgIC00 OiBwZXJtaXNzaW9uIGRlbmllZC4KKyAgICAgICAgICAgIC01OiBzb3VyY2UgYW5kIGRlc3RpbmF0 aW9uIGFyZSB0aGUgc2FtZSBmaWxlLgorICAgICAgICAgICAgLTY6IGkvbyBlcnJvci4KKyAgICAg ICAgICAgIC0xOiBvdGhlciBlcnJvci4KKworICAgY2hhciAqCisgICAgICAgICAgemxvY2FsdGlt ZShjaGFyICopCisgICAgICAgICAgQ2FsbCB3aXRoOiAieXl5eW1tZGQgaGg6bW06c3MiIEdNVC9V VEMgZGF0ZS10aW1lLiBSZXR1cm5zCisgICAgICAgICAgcG9pbnRlciB0byBsb2NhbCBkYXRlLXRp bWUgc3RyaW5nICJ5eXl5bW1kZCBoaDptbTpzcyIgb24KKyAgICAgICAgICBzdWNjZXNzLCBOVUxM IG9uIGZhaWx1cmUuCisKKyAgIFZPSUQKKyAgICAgICAgICB6cnRvbChmbixmbjIpIGNoYXIgKmZu LCAqZm4yOworICAgICAgICAgIFJlbW90ZS1Uby1Mb2NhbCBmaWxlbmFtZSB0cmFuc2xhdGlvbi4g T0JTT0xFVEU6IHJlcGxhY2VkIGJ5CisgICAgICAgICAgbnpydG9sKCkuIFRyYW5zbGF0ZXMgYSAi c3RhbmRhcmQiIGZpbGVuYW1lIHRvIGEgbG9jYWwgZmlsZW5hbWUuCisgICAgICAgICAgRm9yIGV4 YW1wbGUsIGluIFVuaXggdGhpcyBmdW5jdGlvbiBtaWdodCBjb252ZXJ0IGFuCisgICAgICAgICAg YWxsLXVwcGVyY2FzZSBuYW1lIHRvIGxvd2VyY2FzZSwgYnV0IGxlYXZlIGxvd2VyLSBvciBtaXgt Y2FzZQorICAgICAgICAgIG5hbWVzIGFsb25lLiBEb2VzIGl0cyBiZXN0LCByZXR1cm5zIG5vIHZh bHVlLiBOZXcgbmFtZSBpcyBpbgorICAgICAgICAgIHN0cmluZyBwb2ludGVkIHRvIGJ5IGZuMi4g Tm8gbGVuZ3RoIGNoZWNraW5nIGlzIGRvbmUuCisKKyAgICNpZmRlZiBOWkxUT1IKKyAgIGludAor ICAgICAgICAgIG56cnRvbChmbixmbjIsY29udmVydCxwYXRobmFtZXMsbWF4KSBjaGFyICpmbjEs KmZuMjsgaW50CisgICAgICAgICAgY29udmVydCxwYXRobmFtZXMsbWF4OworICAgICAgICAgIFJl cGxhY2VzIHpydG9sLiBMaWtlIHpydG9sIGJ1dCBoYW5kbGVzIHBhdGhuYW1lcyBhbmQgY2hlY2tz CisgICAgICAgICAgbGVuZ3RoLiBTZWUgbnpsdG9yIGZvciBkZXRhaWxlZCBkZXNjcmlwdGlvbiBv ZiBwYXJhbWV0ZXJzLgorCisgICAjZW5kaWYgLyogTlpMVE9SICovCisKKyAgIGludAorICAgICAg ICAgIHpzYXR0cih4eCkgc3RydWN0IHphdHRyICp4eDsKKyAgICAgICAgICBGaWxscyBpbiBhIEtl cm1pdCBmaWxlIGF0dHJpYnV0ZSBzdHJ1Y3R1cmUgZm9yIHRoZSBmaWxlIHdoaWNoIGlzCisgICAg ICAgICAgdG8gYmUgc2VudCwgbmFtZWx5IHRoZSBjdXJyZW50bHkgb3BlbiBaSUZJTEUuIE5vdGUg dGhhdCB0aGlzIGlzCisgICAgICAgICAgbm90IGEgdmVyeSBnb29kIGRlc2lnbiwgYnV0IHdlJ3Jl IHN0dWNrIHdpdGggaXQuIENhbGxlcnMgbXVzdAorICAgICAgICAgIGVuc3VyZSB0aGF0IHpzYXR0 cigpIGlzIGNhbGxlZCBvbmx5IG9uIHJlYWwgZmlsZXMsIG5vdCBvbiBwaXBlcywKKyAgICAgICAg ICBpbnRlcm5hbGx5IGdlbmVyYXRlZCBmaWxlLWxpa2Ugb2JqZWN0cyBzdWNoIGFzIHNlcnZlciBS RU1PVEUKKyAgICAgICAgICBjb21tYW5kIHJlc3BvbnNlcywgZXRjLiBSZXR1cm5zOgorICAgICAg ICAgICAtMTogb24gZmFpbHVyZS4KKyAgICAgICAgICAgIDA6IG9uIHN1Y2Nlc3Mgd2l0aCB0aGUg c3RydWN0dXJlIGZpbGxlZCBpbi4KKyAgICAgICAgICBJZiBhbnkgc3RyaW5nIG1lbWJlciBpcyBu dWxsLCBpdCBzaG91bGQgYmUgaWdub3JlZCBieSB0aGUKKyAgICAgICAgICBjYWxsZXIuCisgICAg ICAgICAgSWYgYW55IG51bWVyaWMgbWVtYmVyIGlzIC0xLCBpdCBzaG91bGQgYmUgaWdub3JlZCBi eSB0aGUgY2FsbGVyLgorCisgICBpbnQKKyAgICAgICAgICB6c2hjbWQocykgY2hhciAqczsKKyAg ICAgICAgICBzIGNvbnRhaW5zIHRvIHBvaW50ZXIgdG8gYSBjb21tYW5kIHRvIGJlIGV4ZWN1dGVk IGJ5IHRoZSBob3N0CisgICAgICAgICAgY29tcHV0ZXIncyBzaGVsbCwgY29tbWFuZCBwYXJzZXIs IG9yIG9wZXJhdGluZyBzeXN0ZW0uIElmIHRoZQorICAgICAgICAgIHN5c3RlbSBhbGxvd3MgdGhl IHVzZXIgdG8gY2hvb3NlIGZyb20gYSB2YXJpZXR5IG9mIGNvbW1hbmQKKyAgICAgICAgICBwcm9j ZXNzb3JzIChzaGVsbHMpLCB0aGVuIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGVtcGxveSB0aGUgdXNl cidzCisgICAgICAgICAgcHJlZmVycmVkIHNoZWxsLiBJZiBwb3NzaWJsZSwgdGhlIHVzZXIncyBq b2IgKGVudmlyb25tZW50LAorICAgICAgICAgIHByb2Nlc3MsIGV0Yykgc2hvdWxkIGJlIHNldCB1 cCB0byBjYXRjaCBrZXlib2FyZCBpbnRlcnJ1cHRpb24KKyAgICAgICAgICBzaWduYWxzIHRvIGFs bG93IHRoZSB1c2VyIHRvIGhhbHQgdGhlIHN5c3RlbSBjb21tYW5kIGFuZCByZXR1cm4KKyAgICAg ICAgICB0byBLZXJtaXQuIFRoZSBjb21tYW5kIG11c3QgcnVuIGluIG9yZGluYXJ5LCB1bnByaXZp bGVnZWQgdXNlcgorICAgICAgICAgIG1vZGUuIElmIHBvc3NpYmxlLCB0aGlzIGZ1bmN0aW9uIHNo b3VsZCByZXR1cm4gLTEgb24gZmFpbHVyZSB0bworICAgICAgICAgIHN0YXJ0IHRoZSBjb21tYW5k LCBvciBlbHNlIGl0IHNob3VsZCByZXR1cm4gMSBpZiB0aGUgY29tbWFuZAorICAgICAgICAgIHN1 Y2NlZWRlZCBhbmQgMCBpZiBpdCBmYWlsZWQuCisKKyAgIGludAorICAgICAgICAgIHBleGl0c3Rh dHVzCisgICAgICAgICAgenNoY21kKCkgYW5kIHpzeXNjbWQoKSBzaG91bGQgc2V0IHRoaXMgdG8g dGhlIGNvbW1hbmQncyBhY3R1YWwKKyAgICAgICAgICBleGl0IHN0YXR1cyBjb2RlIGlmIHBvc3Np YmxlLgorCisgICBpbnQKKyAgICAgICAgICB6c3lzY21kKHMpIGNoYXIgKnM7CisgICAgICAgICAg cyBjb250YWlucyB0byBwb2ludGVyIHRvIGEgY29tbWFuZCB0byBiZSBleGVjdXRlZCBieSB0aGUg aG9zdAorICAgICAgICAgIGNvbXB1dGVyJ3Mgc2hlbGwsIGNvbW1hbmQgcGFyc2VyLCBvciBvcGVy YXRpbmcgc3lzdGVtLiBJZiB0aGUKKyAgICAgICAgICBzeXN0ZW0gYWxsb3dzIHRoZSB1c2VyIHRv IGNob29zZSBmcm9tIGEgdmFyaWV0eSBvZiBjb21tYW5kCisgICAgICAgICAgcHJvY2Vzc29ycyAo c2hlbGxzKSwgdGhlbiB0aGlzIGZ1bmN0aW9uIHNob3VsZCBlbXBsb3kgdGhlIHN5c3RlbQorICAg ICAgICAgIHN0YW5kYXJkIHNoZWxsIChlLmcuIC9iaW4vc2ggZm9yIFVuaXgpLCBzbyB0aGF0IHRo ZSByZXN1bHRzIHdpbGwKKyAgICAgICAgICBhbHdheXMgYmUgdGhlIHNhbWUgZm9yIGV2ZXJ5Ym9k eS4gSWYgcG9zc2libGUsIHRoZSB1c2VyJ3Mgam9iCisgICAgICAgICAgKGVudmlyb25tZW50LCBw cm9jZXNzLCBldGMpIHNob3VsZCBiZSBzZXQgdXAgdG8gY2F0Y2gga2V5Ym9hcmQKKyAgICAgICAg ICBpbnRlcnJ1cHRpb24gc2lnbmFscyB0byBhbGxvdyB0aGUgdXNlciB0byBoYWx0IHRoZSBzeXN0 ZW0KKyAgICAgICAgICBjb21tYW5kIGFuZCByZXR1cm4gdG8gS2VybWl0LiBUaGUgY29tbWFuZCBt dXN0IHJ1biBpbiBvcmRpbmFyeSwKKyAgICAgICAgICB1bnByaXZpbGVnZWQgdXNlciBtb2RlLiBJ ZiBwb3NzaWJsZSwgdGhpcyBmdW5jdGlvbiBzaG91bGQgcmV0dXJuCisgICAgICAgICAgLTEgb24g ZmFpbHVyZSB0byBzdGFydCB0aGUgY29tbWFuZCwgb3IgZWxzZSBpdCBzaG91bGQgcmV0dXJuIDEK KyAgICAgICAgICBpZiB0aGUgY29tbWFuZCBzdWNjZWVkZWQgYW5kIDAgaWYgaXQgZmFpbGVkLgor CisgICBWT0lECisgICAgICAgICAgel9leGVjKHMsYXJncykgY2hhciAqIHM7IGNoYXIgKiBhcmdz W107CisgICAgICAgICAgVGhpcyBvbmUgZXhlY3V0ZXMgdGhlIGNvbW1hbmQgcyAod2hpY2ggaXMg c2VhcmNoZWQgZm9yIHVzaW5nIHRoZQorICAgICAgICAgIHN5c3RlbSdzIG5vcm1hbCBzZWFyY2hp bmcgbWVjaGFuaXNtLCBzdWNoIGFzIFBBVEggaW4gVU5JWCksIHdpdGgKKyAgICAgICAgICB0aGUg Z2l2ZW4gYXJndW1lbnQgdmVjdG9yLCB3aGljaCBmb2xsb3dzIHRoZSBjb252ZW50aW9ucyBvZiBV TklYCisgICAgICAgICAgYXJndltdOiB0aGUgbmFtZSBvZiB0aGUgY29tbWFuZCBwb2ludGVkIHRv IGJ5IGVsZW1lbnQgMCwgdGhlCisgICAgICAgICAgZmlyc3QgYXJnIGJ5IGVsZW1lbnQgMSwgYW5k IHNvIG9uLiBBIG51bGwgYXJnc1tdIHBvaW50ZXIKKyAgICAgICAgICBpbmRpY2F0ZXMgdGhlIGVu ZCBvZiB0aGUgYXJndW1lbnQgbGlzdC4gQWxsIG9wZW4gZmlsZXMgbXVzdAorICAgICAgICAgIHJl bWFpbiBvcGVuIHNvIHRoZSBleGVjJ2QgcHJvY2VzcyBjYW4gdXNlIHRoZW0uIFJldHVybnMgb25s eSBpZgorICAgICAgICAgIHVuc3VjY2Vzc2Z1bC4KKworICAgaW50CisgICAgICAgICAgenNpbmwo bixzLHgpIGludCBuLCB4OyBjaGFyICpzOworICAgICAgICAgIFJlYWRzIGEgbGluZSBmcm9tIGZp bGUgbnVtYmVyIG4uIFdyaXRlcyB0aGUgbGluZSBpbnRvIHRoZQorICAgICAgICAgIGFkZHJlc3Mg cyBwcm92aWRlZCBieSB0aGUgY2FsbGVyLiBXcml0aW5nIHRlcm1pbmF0ZXMgd2hlbgorICAgICAg ICAgIG5ld2xpbmUgaXMgcmVhZCwgYnV0IHdpdGggbmV3bGluZSBkaXNjYXJkZWQuIFdyaXRpbmcg YWxzbworICAgICAgICAgIHRlcm1pbmF0ZXMgdXBvbiBFT0Ygb3IgaWYgbGVuZ3RoIHggaXMgZXho YXVzdGVkLiBSZXR1cm5zOgorICAgICAgICAgICAtMTogb24gRU9GIG9yIGVycm9yLgorICAgICAg ICAgICAgMDogb24gc3VjY2Vzcy4KKworICAgaW50CisgICAgICAgICAgenNvdXQobixzKSBpbnQg bjsgY2hhciAqczsKKyAgICAgICAgICBXcml0ZXMgdGhlIHN0cmluZyBzIG91dCB0byBmaWxlIG51 bWJlciBuLiBSZXR1cm5zOgorICAgICAgICAgICAtMTogb24gZmFpbHVyZS4KKyAgICAgICAgICAg IDA6IG9uIHN1Y2Nlc3MuCisKKyAgIGludAorICAgICAgICAgIHpzb3V0bChuLHMpIGludCBuOyBj aGFyICpzOworICAgICAgICAgIFdyaXRlcyB0aGUgc3RyaW5nIHMgb3V0IHRvIGZpbGUgbnVtYmVy IG4gYW5kIGFkZHMgYSBsaW5lCisgICAgICAgICAgKHJlY29yZCkgdGVybWluYXRvciAoYm91bmRh cnkpIGFwcHJvcHJpYXRlIGZvciB0aGUgc3lzdGVtIGFuZAorICAgICAgICAgIHRoZSBmaWxlIGZv cm1hdC4gUmV0dXJuczoKKyAgICAgICAgICAgLTE6IG9uIGZhaWx1cmUuCisgICAgICAgICAgICAw OiBvbiBzdWNjZXNzLgorCisgICBpbnQKKyAgICAgICAgICB6c291dHgobixzLHgpIGludCBuLCB4 OyBjaGFyICpzOworICAgICAgICAgIFdyaXRlcyBleGFjdGx5IHggY2hhcmFjdGVycyBmcm9tIHN0 cmluZyBzIHRvIGZpbGUgbnVtYmVyIG4uIElmIHMKKyAgICAgICAgICBoYXMgZmV3ZXIgdGhhbiB4 IGNoYXJhY3RlcnMsIHRoZW4gdGhlIGVudGlyZSBzdHJpbmcgcyBpcworICAgICAgICAgIHdyaXR0 ZW4uIFJldHVybnM6CisgICAgICAgICAgIC0xOiBvbiBmYWlsdXJlLgorICAgICAgICAgID49IDA6 IG9uIHN1Y2Nlc3MsIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBhY3R1YWxseSB3cml0dGVuLgor CisgICBpbnQKKyAgICAgICAgICB6c3RpbWUoZm4seXkseCkgY2hhciAqZm47IHN0cnVjdCB6YXR0 ciAqeXk7IGludCB4OworICAgICAgICAgIFNldHMgdGhlIGNyZWF0aW9uIGRhdGUgKGFuZCBvdGhl ciBhdHRyaWJ1dGVzKSBvZiBhbiBleGlzdGluZworICAgICAgICAgIGZpbGUsIG9yIGNvbXBhcmVz IGEgZmlsZSdzIGNyZWF0aW9uIGRhdGUgd2l0aCBhIGdpdmVuIGRhdGUuIENhbGwKKyAgICAgICAg ICB3aXRoOgorCisgICBmbjogcG9pbnRlciB0byBuYW1lIG9mIGV4aXN0aW5nIGZpbGUuCisgICB5 eTogUG9pbnRlciB0byBhIEtlcm1pdCBmaWxlIGF0dHJpYnV0ZSBzdHJ1Y3R1cmUgaW4gd2hpY2gg eXktPmRhdGUudmFsCisgICBpcyBhIGRhdGUgb2YgdGhlIGZvcm0geXl5eW1tZGQgaGg6bW06c3Ms IGUuZy4gMTk5MDAyMDggMTM6MDA6MDAsIHdoaWNoCisgICBpcyB0byBiZSB1c2VkIGZvciBzZXR0 aW5nIG9yIGNvbXBhcmluZyB0aGUgZmlsZSBkYXRlLiBPdGhlciBhdHRyaWJ1dGVzCisgICBpbiB0 aGUgc3RydWN0IGNhbiBhbHNvIGJlIHNldCwgc3VjaCBhcyB0aGUgcHJvdGVjdGlvbi9wZXJtaXNz aW9uIChTZWUKKyAgIFsxMzJdQXBwZW5kaXggSSksIHdoZW4gaXQgbWFrZXMgc2Vuc2UgKGUuZy4g Inl5LT5scHJvdGVjdC52YWwiIGNhbiBiZQorICAgc2V0IGlmIHRoZSByZW1vdGUgc3lzdGVtIElE IG1hdGNoZXMgdGhlIGxvY2FsIG9uZSkuCisgICAgeDogQSBmdW5jdGlvbiBjb2RlOiAwIG1lYW5z IHRvIHNldCB0aGUgZmlsZSdzIGNyZWF0aW9uIGRhdGUgYXMgZ2l2ZW4uCisgICAxIG1lYW5zIGNv bXBhcmUgdGhlIGRhdGUgZnJvbSB0aGUgeXkgc3RydWN0IHdpdGggdGhlIGZpbGUncyBkYXRlLgor CisgICAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgLTE6IG9uIGFueSBraW5kIG9mIGVycm9y LgorICAgICAgICAgICAgMDogaWYgeCBpcyAwIGFuZCB0aGUgZmlsZSBkYXRlIHdhcyBzZXQgc3Vj Y2Vzc2Z1bGx5LgorICAgICAgICAgICAgMDogaWYgeCBpcyAxIGFuZCBkYXRlIGZyb20gYXR0cmli dXRlIHN0cnVjdHVyZSA+IGZpbGUgY3JlYXRpb24KKyAgICAgICAgICBkYXRlLgorICAgICAgICAg ICAgMTogaWYgeCBpcyAxIGFuZCBkYXRlIGZyb20gYXR0cmlidXRlIHN0cnVjdHVyZSA8PSBmaWxl CisgICAgICAgICAgY3JlYXRpb24gZGF0ZS4KKworICAgVk9JRAorICAgICAgICAgIHpzdHJpcChu YW1lLG5hbWUyKSBjaGFyICpuYW1lLCAqKm5hbWUyOworICAgICAgICAgIFN0cmlwcyBwYXRobmFt ZSBmcm9tIGZpbGVuYW1lICJuYW1lIi4gQ29uc3RydWN0cyB0aGUgcmVzdWx0aW5nCisgICAgICAg ICAgc3RyaW5nIGluIGEgc3RhdGljIGJ1ZmZlciBpbiBpdHMgb3duIHNwYWNlIGFuZCByZXR1cm5z IGEgcG9pbnRlcgorICAgICAgICAgIHRvIGl0IGluIG5hbWUyLiBBbHNvIHN0cmlwcyBkZXZpY2Ug bmFtZSwgZmlsZSB2ZXJzaW9uIG51bWJlcnMsCisgICAgICAgICAgYW5kIG90aGVyICJub24tbmFt ZSIgbWF0ZXJpYWwuCisKKyAgIGludAorICAgICAgICAgIHp4Y21kKG4scykgY2hhciAqczsKKyAg ICAgICAgICBSdW5zIGEgc3lzdGVtIGNvbW1hbmQgc28gaXRzIG91dHB1dCBjYW4gYmUgYWNjZXNz ZWQgYXMgaWYgaXQKKyAgICAgICAgICB3ZXJlIGZpbGUgbi4gVGhlIGNvbW1hbmQgaXMgcnVuIGlu IG9yZGluYXJ5LCB1bnByaXZpbGVnZWQgdXNlcgorICAgICAgICAgIG1vZGUuCisgICAgICAgICAg SWYgbiBpcyBaU1RESU8gb3IgWkNURVJNLCByZXR1cm5zIC0xLgorICAgICAgICAgIElmIG4gaXMg WklGSUxFIG9yIFpSRklMRSwgdGhlbiBLZXJtaXQgcmVhZHMgZnJvbSB0aGUgY29tbWFuZCwKKyAg ICAgICAgICBvdGhlcndpc2UgS2VybWl0IHdyaXRlcyB0byB0aGUgY29tbWFuZC4KKyAgICAgICAg ICBSZXR1cm5zIDAgb24gZXJyb3IsIDEgb24gc3VjY2Vzcy4KKworICAgaW50CisgICAgICAgICAg enhwYW5kKGZuKSBjaGFyICpmbjsKKyAgICAgICAgICBPQlNPTEVURTogUmVwbGFjZWQgYnkgbnp4 cGFuZCgpLCBxLnYuCisKKyAgICNpZmRlZiBaWFJFV0lORAorICAgaW50CisgICAgICAgICAgenhy ZXdpbmQoKQorICAgICAgICAgIFJldHVybnMgdGhlIG51bWJlciBvZiBmaWxlcyByZXR1cm5lZCBi eSB0aGUgbW9zdCByZWNlbnQKKyAgICAgICAgICBuenhwYW5kKCkgY2FsbCwgYW5kIHJlc2V0cyB0 aGUgbGlzdCB0byB0aGUgYmVnaW5uaW5nIHNvIHRoZSBuZXh0CisgICAgICAgICAgem5leHQoKSBj YWxsIHJldHVybnMgdGhlIGZpcnN0IGZpbGUuIFJldHVybnMgLTEgaWYgenhwYW5kIGhhcworICAg ICAgICAgIG5vdCB5ZXQgYmVlbiBjYWxsZWQuIElmIHRoaXMgZnVuY3Rpb24gaXMgYXZhaWxhYmxl LCBaWFJFV0lORAorICAgICAgICAgIHNob3VsZCBiZSBkZWZpbmVkOyBvdGhlcndpc2UgaXQgc2hv dWxkIG5vdCBiZSByZWZlcmVuY2VkLgorCisgICAjZW5kaWYgLyogWlhSRVdJTkQgKi8KKworICAg aW50CisgICAgICAgICAgeHN5c3RlbShjbWQpIGNoYXIgKmNtZDsKKyAgICAgICAgICBFeGVjdXRl cyB0aGUgc3lzdGVtIGNvbW1hbmQgd2l0aG91dCByZWRpcmVjdGluZyBhbnkgb2YgaXRzIGkvbywK KyAgICAgICAgICBzaW1pbGFyICh3ZWxsLCBpZGVudGljYWwpIHRvIHN5c3RlbSgpIGluIFVuaXgu IEJ1dCBiZWZvcmUKKyAgICAgICAgICBwYXNzaW5nIHRoZSBjb21tYW5kIHRvIHRoZSBzeXN0ZW0s IHhzeXN0ZW0oKSBlbnN1cmVzIHRoYXQgYWxsCisgICAgICAgICAgcHJpdmlsZWdlcyBhcmUgdHVy bmVkIG9mZiwgc28gdGhhdCB0aGUgc3lzdGVtIGNvbW1hbmQgZXhlY3V0ZXMKKyAgICAgICAgICBp biBvcmRpbmFyeSB1bnByaXZpbGVnZWQgdXNlciBtb2RlLiBJZiBwb3NzaWJsZSwgeHN5c3RlbSgp CisgICAgICAgICAgcmV0dXJucyB0aGUgcmV0dXJuIGNvZGUgb2YgdGhlIGNvbW1hbmQgdGhhdCB3 YXMgZXhlY3V0ZWQuCisKKzQuRS4yLjIuIElLU0QgVmFyaWFibGVzIGFuZCBGdW5jdGlvbnMKKwor ICAgVGhlc2UgbXVzdCBiZSBpbXBsZW1lbnRlZCBpbiBhbnkgQy1LZXJtaXQgdmVyc2lvbiB0aGF0 IGlzIHRvIGJlCisgICBpbnN0YWxsZWQgYXMgYW4gSW50ZXJuZXQgS2VybWl0IFNlcnZpY2UgRGFl bW9uIChJS1NEKS4gSUtTRCBpcyBleHBlY3RlZAorICAgdG8gYmUgc3RhcnRlZCBieSB0aGUgSW50 ZXJuZXQgRGFlbW9uIChlLmcuIGluZXRkKSB3aXRoIGl0cyBzdGFuZGFyZCBpL28KKyAgIHJlZGly ZWN0ZWQgdG8gdGhlIGluY29taW5nIGNvbm5lY3Rpb24uCisKKyAgIGludCBja3hhbm9uOworICAg ICAgICAgIE5vbnplcm8gaWYgYW5vbnltb3VzIGxvZ2lucyBhbGxvd2VkLgorCisgICBleHRlcm4g aW50IGluc2VydmVyOworICAgICAgICAgIE5vbnplcm8gaWYgc3RhcnRlZCBpbiBJS1NEIG1vZGUu CisKKyAgIGV4dGVybiBpbnQgaXNndWVzdDsKKyAgICAgICAgICBOb256ZXJvIGlmIElLU0QgYW5k IHVzZXIgbG9nZ2VkIGluIGFub255bW91c2x5LgorCisgICBleHRlcm4gY2hhciAqIGhvbWRpcjsK KyAgICAgICAgICBQb2ludGVyIHRvIHVzZXIncyBob21lIGRpcmVjdG9yeS4KKworICAgZXh0ZXJu IGNoYXIgKiBhbm9ucm9vdDsKKyAgICAgICAgICBQb2ludGVyIHRvIGZpbGUtc3lzdGVtIHJvb3Qg Zm9yIGFub255bW91cyB1c2Vycy4KKworICAgRXhpc3RpbmcgZnVuY3Rpb25zIG11c3QgbWFrZSAi aWYgKGluc2VydmVyICYmIGlzZ3Vlc3QpIiBjaGVja3MgZm9yCisgICBhY3Rpb25zIHRoYXQgd291 bGQgbm90IGJlIGxlZ2FsIGZvciBndWVzdHM6IHpkZWxldGUoKSwgenJtZGlyKCksCisgICB6cHJp bnQoKSwgem1haWwoKSwgZXRjLgorCisgICBpbnQKKyAgICAgICAgICB6dnVzZXIobmFtZSkgY2hh ciAqIG5hbWU7CisgICAgICAgICAgVmVyaWZpZXMgdGhhdCB1c2VyICJuYW1lIiBleGlzdHMgYW5k IGlzIGFsbG93ZWQgdG8gbG9nIGluLiBJZgorICAgICAgICAgIHRoZSBuYW1lIGlzICJmdHAiIG9y ICJhbm9ueW1vdXMiIGFuZCBja3hhbm9uICE9IDAsIGEgZ3Vlc3QgbG9naW4KKyAgICAgICAgICBp cyBzZXQgdXAuIFJldHVybnMgMCBpZiB1c2VyIG5vdCBhbGxvd2VkIHRvIGxvZyBpbiwgbm9uemVy byBpZgorICAgICAgICAgIHVzZXIgbWF5IGxvZyBpbi4KKworICAgaW50CisgICAgICAgICAgenZw YXNzKHN0cmluZykgY2hhciAqIHN0cmluZzsKKyAgICAgICAgICBWZXJpZmllcyBwYXNzd29yZCBv ZiB0aGUgdXNlciBmcm9tIHRoZSBtb3N0IHJlY2VudCB6dnVzZXIoKQorICAgICAgICAgIGNhbGwu IFJldHVybnMgbm9uemVybyBpZiBwYXNzd29yZCBpcyB2YWxpZCBmb3IgdXNlciwgMCBpZiBpdAor ICAgICAgICAgIGlzbid0LiBNYWtlcyBhbnkgYXBwcm9wcmlhdGUgc3lzdGVtIGxvZyBlbnRyaWVz IChJS1NEIGxvZ2lucywKKyAgICAgICAgICBmYWlsZWQgbG9naW4gYXR0ZW1wdHMsIGV0YykuIElm IHBhc3N3b3JkIGlzIHZhbGlkLCBsb2dzIHRoZSB1c2VyCisgICAgICAgICAgaW4gYXMgaGVyc2Vs ZiAoaWYgcmVhbCB1c2VyKSwgb3Igc2V0cyB1cCByZXN0cmljdGVkIGFub255bW91cworICAgICAg ICAgIGFjY2VzcyBpZiB1c2VyIGlzIGd1ZXN0IChlLmcuIGNoYW5nZXMgZmlsZS1zeXN0ZW0gcm9v dCB0bworICAgICAgICAgIGFub25yb290IGFuZCBzZXRzIGlzZ3Vlc3QgPSAxKS4KKworICAgVk9J RAorICAgICAgICAgIHpzeXNsb2coKQorICAgICAgICAgIEJlZ2lucyBhbnkgZGVzaXJlZCBzeXN0 ZW0gbG9nZ2luZyBvZiBhbiBJS1NEIHNlc3Npb24uCisKKyAgIFZPSUQKKyAgICAgICAgICB6dmxv Z291dCgpCisgICAgICAgICAgVGVybWluYXRlcyBhbiBJS1NEIHNlc3Npb24uIEluIG1vc3QgY2Fz ZXMgdGhpcyBpcyBzaW1wbHkgYQorICAgICAgICAgIHdyYXBwZXIgZm9yIGV4aXQoKSBvciBkb2V4 aXQoKSwgd2l0aCBzb21lIHN5c3RlbSBsb2dnaW5nIGFkZGVkLgorCis0LkUuMi4zLiBQcml2aWxl Z2UgRnVuY3Rpb25zCisKKyAgIFRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZCBieSBDLUtlcm1pdCB0 byBhZGFwdCBpdHNlbGYgdG8gb3BlcmF0aW5nCisgICBzeXN0ZW1zIHdoZXJlIHRoZSBwcm9ncmFt IGNhbiBiZSBtYWRlIHRvIHJ1biBpbiBhICJwcml2aWxlZ2VkIiBtb2RlLAorICAgZS5nLiBzZXR1 aWQgb3Igc2V0Z2lkIGluIFVuaXguIEMtS2VybWl0IHNob3VsZCBOT1QgcmVhZCBhbmQgd3JpdGUg ZmlsZXMKKyAgIG9yIHN0YXJ0IHN1YnByb2Nlc3NlcyBhcyBhIHByaXZpbGVnZWQgcHJvZ3JhbS4g VGhpcyB3b3VsZCBwcmVzZW50IGEKKyAgIHNlcmlvdXMgdGhyZWF0IHRvIHN5c3RlbSBzZWN1cml0 eS4gVGhlIHNlY3VyaXR5IHBhY2thZ2UgaGFzIGJlZW4KKyAgIGluc3RhbGxlZCB0byBwcmV2ZW50 IHN1Y2ggc2VjdXJpdHkgYnJlYWNoZXMgYnkgdHVybmluZyBvZmYgdGhlCisgICBwcm9ncmFtJ3Mg c3BlY2lhbCBwcml2aWxlZ2VzIGF0IGFsbCB0aW1lcyBleGNlcHQgd2hlbiB0aGV5IGFyZSBuZWVk ZWQuCisKKyAgIEluIFVOSVgsIHRoZSBvbmx5IG5lZWQgS2VybWl0IGhhcyBmb3IgcHJpdmlsZWdl ZCBzdGF0dXMgaXMgYWNjZXNzIHRvCisgICB0aGUgVVVDUCBsb2NrZmlsZSBkaXJlY3RvcnksIGlu IG9yZGVyIHRvIHJlYWQsIGNyZWF0ZSwgYW5kIGRlc3Ryb3kKKyAgIGxvY2tmaWxlcywgYW5kIHRv IG9wZW4gY29tbXVuaWNhdGlvbiBkZXZpY2VzIHRoYXQgYXJlIG5vcm1hbGx5CisgICBwcm90ZWN0 ZWQgYWdhaW5zdCB0aGUgdXNlciAoc2VlIHRoZSBbMTMzXVVuaXggQy1LZXJtaXQgSW5zdGFsbGF0 aW9uCisgICBJbnN0cnVjdGlvbnMgZm9yIGRpc2N1c3Npb24pLiBUaGVyZWZvcmUsIHByaXZpbGVn ZXMgc2hvdWxkIG9ubHkgYmUKKyAgIGVuYWJsZWQgZm9yIHRoZXNlIG9wZXJhdGlvbnMgYW5kIGRp c2FibGVkIGF0IGFsbCBvdGhlciB0aW1lcy4gVGhpcworICAgcmVsaWV2ZXMgdGhlIHByb2dyYW1t ZXIgb2YgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHB1dHRpbmcgZXhwZW5zaXZlIGFuZAorICAgdW5y ZWxpYWJsZSBhY2Nlc3MgY2hlY2tzIGFyb3VuZCBldmVyeSBmaWxlIGFjY2VzcyBhbmQgc3VicHJv Y2VzcworICAgY3JlYXRpb24uCisKKyAgIFN0cmljdGx5IHNwZWFraW5nLCB0aGVzZSBmdW5jdGlv bnMgYXJlIG5vdCByZXF1aXJlZCBpbiBhbGwgQy1LZXJtaXQKKyAgIGltcGxlbWVudGF0aW9ucywg YmVjYXVzZSB0aGVpciB1c2UgKHNvIGZhciwgYXQgbGVhc3QpIGlzIGludGVybmFsIHRvCisgICB0 aGUgR3JvdXAgRSBtb2R1bGVzLiBIb3dldmVyLCB0aGV5IHNob3VsZCBiZSBpbmNsdWRlZCBpbiBh bGwgQy1LZXJtaXQKKyAgIGltcGxlbWVudGF0aW9ucyBmb3Igb3BlcmF0aW5nIHN5c3RlbXMgdGhh dCBzdXBwb3J0IHRoZSBub3Rpb24gb2YgYQorICAgcHJpdmlsZWdlZCBwcm9ncmFtIChVTklYLCBS U1RTL0UsIHdoYXQgb3RoZXJzPykuCisKKyAgIGludAorICAgICAgICAgIHByaXZfaW5pKCkKKyAg ICAgICAgICBEZXRlcm1pbmUgd2hldGhlciB0aGUgcHJvZ3JhbSBpcyBydW5uaW5nIGluIHByaXZp bGVnZWQgc3RhdHVzLgorICAgICAgICAgIElmIHNvLCB0dXJuIG9mZiB0aGUgcHJpdmlsZWdlcywg aW4gc3VjaCBhIHdheSB0aGF0IHRoZXkgY2FuIGJlCisgICAgICAgICAgdHVybmVkIG9uIGFnYWlu IHdoZW4gbmVlZGVkLiBDYWxsZWQgZnJvbSBzeXNpbml0KCkgYXQgcHJvZ3JhbQorICAgICAgICAg IHN0YXJ0dXAgdGltZS4gUmV0dXJuczoKKyAgICAgICAgICAgIDAgb24gc3VjY2VzcworICAgICAg ICAgICAgbm9uemVybyBvbiBmYWlsdXJlLCBpbiB3aGljaCBjYXNlIHRoZSBwcm9ncmFtIHNob3Vs ZCBoYWx0CisgICAgICAgICAgaW1tZWRpYXRlbHkuCisKKyAgIGludAorICAgICAgICAgIHByaXZf b24oKQorICAgICAgICAgIElmIHRoZSBwcm9ncmFtIGlzIG5vdCBwcml2aWxlZ2VkLCB0aGlzIGZ1 bmN0aW9uIGRvZXMgbm90aGluZy4gSWYKKyAgICAgICAgICB0aGUgcHJvZ3JhbSBpcyBwcml2aWxl Z2VkLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgaXQgdG8KKyAgICAgICAgICBwcml2aWxlZ2VkIHN0 YXR1cy4gcHJpdl9pbmkoKSBtdXN0IGhhdmUgYmVlbiBjYWxsZWQgZmlyc3QuCisgICAgICAgICAg UmV0dXJuczoKKyAgICAgICAgICAgIDAgb24gc3VjY2VzcworICAgICAgICAgICAgbm9uemVybyBv biBmYWlsdXJlCisKKyAgIGludAorICAgICAgICAgIHByaXZfb2ZmKCkKKyAgICAgICAgICBUdXJu cyBwcml2aWxlZ2VzIG9mZiAoaWYgdGhleSBhcmUgb24pIGluIHN1Y2ggYSB3YXkgdGhhdCB0aGV5 CisgICAgICAgICAgY2FuIGJlIHR1cm5lZCBiYWNrIG9uIGFnYWluLiBSZXR1cm5zOgorICAgICAg ICAgICAgMCBvbiBzdWNjZXNzCisgICAgICAgICAgICBub256ZXJvIG9uIGZhaWx1cmUKKworICAg aW50CisgICAgICAgICAgcHJpdl9jYW4oKQorICAgICAgICAgIFR1cm5zIHByaXZpbGVnZXMgb2Zm IGluIHN1Y2ggYSB3YXkgdGhhdCB0aGV5IGNhbm5vdCBiZSB0dXJuZWQKKyAgICAgICAgICBiYWNr IG9uLiBSZXR1cm5zOgorICAgICAgICAgICAgMCBvbiBzdWNjZXNzCisgICAgICAgICAgICBub256 ZXJvIG9uIGZhaWx1cmUKKworICAgaW50CisgICAgICAgICAgcHJpdl9jaGsoKQorICAgICAgICAg IEF0dGVtcHRzIHRvIHR1cm5zIHByaXZpbGVnZXMgb2ZmIGluIHN1Y2ggYSB3YXkgdGhhdCB0aGV5 IGNhbiBiZQorICAgICAgICAgIHR1cm5lZCBvbiBhZ2FpbiBsYXRlci4gVGhlbiBjaGVja3MgdG8g bWFrZSBzdXJlIHRoYXQgdGhleSB3ZXJlCisgICAgICAgICAgcmVhbGx5IHR1cm5lZCBvZmYuIElm IHRoZXkgd2VyZSBub3QgcmVhbGx5IHR1cm5lZCBvZmYsIHRoZW4gdGhleQorICAgICAgICAgIGFy ZSBjYW5jZWxlZCBwZXJtYW5lbnRseS4gUmV0dXJuczoKKyAgICAgICAgICAgIDAgb24gc3VjY2Vz cworICAgICAgICAgICAgbm9uemVybyBvbiBmYWlsdXJlCisKKzQuRS4yLjQuIENvbnNvbGUtUmVs YXRlZCBGdW5jdGlvbnMKKworICAgVGhlc2UgcmVsYXRlIHRvIHRoZSBwcm9ncmFtJ3MgImNvbnNv bGUiLCBvciBjb250cm9sbGluZyB0ZXJtaW5hbCwgaS5lLgorICAgdGhlIHRlcm1pbmFsIHRoYXQg dGhlIHVzZXIgaXMgbG9nZ2VkIGluIG9uIGFuZCB0eXBlcyBjb21tYW5kcyBhdCwgb3Igb24KKyAg IGEgUEMgb3Igd29ya3N0YXRpb24sIHRoZSBhY3R1YWwga2V5Ym9hcmQgYW5kIHNjcmVlbi4KKwor ICAgaW50CisgICAgICAgICAgY29uYmluKGVzYykgY2hhciBlc2M7CisgICAgICAgICAgUHV0cyB0 aGUgY29uc29sZSBpbnRvICJiaW5hcnkiIG1vZGUsIHNvIHRoYXQgS2VybWl0J3MgY29tbWFuZAor ICAgICAgICAgIHBhcnNlciBjYW4gY29udHJvbCBlY2hvaW5nIGFuZCBvdGhlciB0cmVhdG1lbnQg b2YgY2hhcmFjdGVycworICAgICAgICAgIHRoYXQgdGhlIHVzZXIgdHlwZXMuIGVzYyBpcyB0aGUg Y2hhcmFjdGVyIHRoYXQgd2lsbCBiZSB1c2VkIHRvCisgICAgICAgICAgZ2V0IEtlcm1pdCdzIGF0 dGVudGlvbiBkdXJpbmcgcGFja2V0IG1vZGU7IHB1dHMgdGhpcyBpbiBhIGdsb2JhbAorICAgICAg ICAgIHBsYWNlLiBTZXRzIHRoZSBja3hlY2ggdmFyaWFibGUuIFJldHVybnM6CisgICAgICAgICAg IC0xOiBvbiBlcnJvci4KKyAgICAgICAgICAgIDA6IG9uIHN1Y2Nlc3MuCisKKyAgIGludAorICAg ICAgICAgIGNvbmNiKGVzYykgY2hhciBlc2M7CisgICAgICAgICAgUHV0IGNvbnNvbGUgaW4gImNi cmVhayIgKHNpbmdsZS1jaGFyYWN0ZXIgd2FrZXVwKSBtb2RlLiBUaGF0IGlzLAorICAgICAgICAg IGVuc3VyZSB0aGF0IGVhY2ggY29uc29sZSBjaGFyYWN0ZXIgaXMgYXZhaWxhYmxlIHRvIHRoZSBw cm9ncmFtCisgICAgICAgICAgaW1tZWRpYXRlbHkgd2hlbiB0aGUgdXNlciB0eXBlcyBpdC4gT3Ro ZXJ3aXNlIGp1c3QgbGlrZQorICAgICAgICAgIGNvbmJpbigpLiBSZXR1cm5zOgorICAgICAgICAg ICAtMTogb24gZXJyb3IuCisgICAgICAgICAgICAwOiBvbiBzdWNjZXNzLgorCisgICBpbnQKKyAg ICAgICAgICBjb25jaGsoKQorICAgICAgICAgIFJldHVybnMgYSBudW1iZXIsIDAgb3IgZ3JlYXRl ciwgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHdhaXRpbmcKKyAgICAgICAgICB0byBiZSByZWFk IGZyb20gdGhlIGNvbnNvbGUsIGkuZS4gdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRoYXQKKyAg ICAgICAgICB0aGUgdXNlciBoYXMgdHlwZWQgdGhhdCBoYXZlIG5vdCBiZWVuIHJlYWQgeWV0IGJ5 IEtlcm1pdC4KKworICAgbG9uZworICAgICAgICAgIGNvbmdzcGQoKTsKKyAgICAgICAgICBSZXR1 cm5zIHRoZSBzcGVlZCAoImJhdWQgcmF0ZSIpIG9mIHRoZSBjb250cm9sbGluZyB0ZXJtaW5hbCwg aWYKKyAgICAgICAgICBrbm93biwgb3RoZXJ3aXNlIC0xTC4KKworICAgaW50CisgICAgICAgICAg Y29uZ2tzKHRpbW8pIGludCB0aW1vOworICAgICAgICAgIEdldCBLZXlib2FyZCBTY2FuY29kZS4g UmVhZHMgYSBrZXlib2FyZCBzY2FuIGNvZGUgZnJvbSB0aGUKKyAgICAgICAgICBwaHlzaWNhbCBj b25zb2xlIGtleWJvYXJkLiBJZiB0aGUgdGltbyBwYXJhbWV0ZXIgaXMgZ3JlYXRlciB0aGFuCisg ICAgICAgICAgemVybywgdGhlbiB0aW1lcyBvdXQgYW5kIHJldHVybnMgLTIgaWYgbm8gY2hhcmFj dGVyIGFwcGVhcnMKKyAgICAgICAgICB3aXRoaW4gdGhlIGdpdmVuIG51bWJlciBvZiBzZWNvbmRz LiBVcG9uIGFueSBvdGhlciBraW5kIG9mCisgICAgICAgICAgZXJyb3IsIHJldHVybnMgLTEuIFVw b24gc3VjY2VzcyByZXR1cm5zIGEgc2NhbiBjb2RlLCB3aGljaCBtYXkKKyAgICAgICAgICBiZSBh bnkgcG9zaXRpdmUgaW50ZWdlci4gRm9yIHNpdHVhdGlvbnMgd2hlcmUgc2NhbiBjb2RlcyBjYW5u b3QKKyAgICAgICAgICBiZSByZWFkIChmb3IgZXhhbXBsZSwgd2hlbiBhbiBBU0NJSSB0ZXJtaW5h bCBpcyB1c2VkIGFzIHRoZQorICAgICAgICAgIGpvYidzIGNvbnRyb2xsaW5nIHRlcm1pbmFsKSwg dGhpcyBmdW5jdGlvbiBpcyBpZGVudGljYWwgdG8KKyAgICAgICAgICBjb25pbmMoKSwgaS5lLiBp dCByZXR1cm5zIGFuIDgtYml0IGNoYXJhY3RlciB2YWx1ZS4gY29uZ2tzKCkgaXMKKyAgICAgICAg ICBmb3IgdXNlIHdpdGggd29ya3N0YXRpb25zIHdob3NlIGtleWJvYXJkcyBoYXZlIEFsdGVybmF0 ZSwKKyAgICAgICAgICBDb21tYW5kLCBPcHRpb24sIGFuZCBzaW1pbGFyIG1vZGlmaWVyIGtleXMs IGFuZCBGdW5jdGlvbiBrZXlzCisgICAgICAgICAgdGhhdCBnZW5lcmF0ZSBjb2RlcyBncmVhdGVy IHRoYW4gMjU1LgorCisgICBpbnQKKyAgICAgICAgICBjb25nbSgpCisgICAgICAgICAgQ29uc29s ZSBnZXQgbW9kZXMuIEdldHMgdGhlIGN1cnJlbnQgY29uc29sZSB0ZXJtaW5hbCBtb2RlcyBhbmQK KyAgICAgICAgICBzYXZlcyB0aGVtIHNvIHRoYXQgY29ucmVzKCkgY2FuIHJlc3RvcmUgdGhlbSBs YXRlci4gUmV0dXJucyAxIGlmCisgICAgICAgICAgaXQgZ290IHRoZSBtb2RlcyBPSywgMCBpZiBp dCBkaWQgbm90aGluZyAoZS5nLiBiZWNhdXNlIEtlcm1pdCBpcworICAgICAgICAgIG5vdCBjb25u ZWN0ZWQgd2l0aCBhbnkgdGVybWluYWwpLCAtMSBvbiBlcnJvci4KKworICAgaW50CisgICAgICAg ICAgY29uaW5jKHRpbW8pIGludCB0aW1vOworICAgICAgICAgIENvbnNvbGUgSW5wdXQgQ2hhcmFj dGVyLiBSZWFkcyBhIGNoYXJhY3RlciBmcm9tIHRoZSBjb25zb2xlLiBJZgorICAgICAgICAgIHRo ZSB0aW1vIHBhcmFtZXRlciBpcyBncmVhdGVyIHRoYW4gemVybywgdGhlbiBjb25pbmMoKSB0aW1l cyBvdXQKKyAgICAgICAgICBhbmQgcmV0dXJucyAtMiBpZiBubyBjaGFyYWN0ZXIgYXBwZWFycyB3 aXRoaW4gdGhlIGdpdmVuIG51bWJlcgorICAgICAgICAgIG9mIHNlY29uZHMuIFVwb24gYW55IG90 aGVyIGtpbmQgb2YgZXJyb3IsIHJldHVybnMgLTEuIFVwb24KKyAgICAgICAgICBzdWNjZXNzLCBy ZXR1cm5zIHRoZSBjaGFyYWN0ZXIgaXRzZWxmLCB3aXRoIGEgdmFsdWUgaW4gdGhlIHJhbmdlCisg ICAgICAgICAgMC0yNTUgZGVjaW1hbC4KKworICAgVk9JRAorICAgICAgICAgIGNvbmludChmLHMp IFNJR1RZUCAoKmYpKCksICgqcykoKTsKKyAgICAgICAgICBTZXRzIHRoZSBjb25zb2xlIHRvIGdl bmVyYXRlIGFuIGludGVycnVwdCBpZiB0aGUgdXNlciB0eXBlcyBhCisgICAgICAgICAga2V5Ym9h cmQgaW50ZXJydXB0IGNoYXJhY3RlciwgYW5kIHRvIHRyYW5zZmVyIGNvbnRyb2wgdGhlCisgICAg ICAgICAgc2lnbmFsLWhhbmRsaW5nIGZ1bmN0aW9uIGYuIEZvciBzeXN0ZW1zIHdpdGggam9iIGNv bnRyb2wsIHMgaXMKKyAgICAgICAgICB0aGUgYWRkcmVzcyBvZiB0aGUgZnVuY3Rpb24gdGhhdCBz dXNwZW5kcyB0aGUgam9iLiBTZXRzIHRoZQorICAgICAgICAgIGdsb2JhbCB2YXJpYWJsZSAiYmFj a2dyZCIgdG8gemVybyBpZiBLZXJtaXQgaXMgcnVubmluZyBpbiB0aGUKKyAgICAgICAgICBmb3Jl Z3JvdW5kLCBhbmQgdG8gbm9uemVybyBpZiBLZXJtaXQgaXMgcnVubmluZyBpbiB0aGUKKyAgICAg ICAgICBiYWNrZ3JvdW5kLiBTZWUgY2tjZGViLmggZm9yIHRoZSBkZWZpbml0aW9uIG9mIFNJR1RZ UC4gTm8gcmV0dXJuCisgICAgICAgICAgdmFsdWUuCisKKyAgIFZPSUQKKyAgICAgICAgICBjb25u b2koKQorICAgICAgICAgIENvbnNvbGUgbm8gaW50ZXJydXB0cy4gRGlzYWJsZSBrZXlib2FyZCBp bnRlcnJ1cHRzIG9uIHRoZQorICAgICAgICAgIGNvbnNvbGUuIE5vIHJldHVybiB2YWx1ZS4KKwor ICAgaW50CisgICAgICAgICAgY29ub2MoYykgY2hhciBjOworICAgICAgICAgIFdyaXRlcyBjaGFy YWN0ZXIgYyB0byB0aGUgY29uc29sZSB0ZXJtaW5hbC4gUmV0dXJuczoKKyAgICAgICAgICAwIG9u IGZhaWx1cmUsIDEgb24gc3VjY2Vzcy4KKworICAgaW50CisgICAgICAgICAgY29ub2wocykgY2hh ciAqczsKKyAgICAgICAgICBXcml0ZXMgc3RyaW5nIHMgdG8gdGhlIGNvbnNvbGUuIFJldHVybnMg LTEgb24gZXJyb3IsIDAgb3IKKyAgICAgICAgICBncmVhdGVyIG9uIHN1Y2Nlc3MuCisKKyAgIGlu dAorICAgICAgICAgIGNvbm9sYShzKSBjaGFyICpzW107IHsKKyAgICAgICAgICBXcml0ZXMgYW4g YXJyYXkgb2Ygc3RyaW5ncyB0byB0aGUgY29uc29sZS4gUmV0dXJucyAtMSBvbiBlcnJvciwKKyAg ICAgICAgICAwIG9yIGdyZWF0ZXIgb24gc3VjY2Vzcy4KKworICAgaW50CisgICAgICAgICAgY29u b2xsKHMpIGNoYXIgKnM7CisgICAgICAgICAgV3JpdGVzIHN0cmluZyBzIHRvIHRoZSBjb25zb2xl LCBmb2xsb3dlZCBieSB0aGUgbmVjZXNzYXJ5IGxpbmUKKyAgICAgICAgICB0ZXJtaW5hdGlvbiBj aGFyYWN0ZXJzIHRvIHB1dCB0aGUgY29uc29sZSBjdXJzb3IgYXQgdGhlCisgICAgICAgICAgYmVn aW5uaW5nIG9mIHRoZSBuZXh0IGxpbmUuIFJldHVybnMgLTEgb24gZXJyb3IsIDAgb3IgZ3JlYXRl ciBvbgorICAgICAgICAgIHN1Y2Nlc3MuCisKKyAgIGludAorICAgICAgICAgIGNvbnJlcygpCisg ICAgICAgICAgUmVzdG9yZXMgdGhlIGNvbnNvbGUgdGVybWluYWwgdG8gdGhlIG1vZGVzIG9idGFp bmVkIGJ5IGNvbmdtKCkuCisgICAgICAgICAgUmV0dXJuczogLTEgb24gZXJyb3IsIDAgb24gc3Vj Y2Vzcy4KKworICAgaW50CisgICAgICAgICAgY29ueG8oeCxzKSBpbnQgeDsgY2hhciAqczsKKyAg ICAgICAgICBXcml0ZSB4IGNoYXJhY3RlcnMgZnJvbSBzdHJpbmcgcyB0byB0aGUgY29uc29sZS4g UmV0dXJucyAwIG9yCisgICAgICAgICAgZ3JlYXRlciBvbiBzdWNjZXNzLCAtMSBvbiBlcnJvci4K KworICAgY2hhciAqCisgICAgICAgICAgY29ua2JnKCk7CisgICAgICAgICAgUmV0dXJucyBhIHBv aW50ZXIgdG8gdGhlIGRlc2lnbmF0b3Igb2YgdGhlIGNvbnNvbGUga2V5Ym9hcmQKKyAgICAgICAg ICB0eXBlLiBGb3IgZXhhbXBsZSwgb24gYSBQQywgdGhpcyBmdW5jdGlvbiB3b3VsZCByZXR1cm4g Ijg4IiwKKyAgICAgICAgICAiMTAxIiwgZXRjLiBVcG9uIGZhaWx1cmUsIHJldHVybnMgYSBwb2lu dGVyIHRvIHRoZSBlbXB0eSBzdHJpbmcuCisKKzQuRS4yLjUuIENvbW11bmljYXRpb25zIEZ1bmN0 aW9ucworCisgICBUaGUgY29tbXVuaWNhdGlvbiBkZXZpY2UgaXMgdGhlIGRldmljZSB1c2VkIGZv ciB0ZXJtaW5hbCBlbXVsYXRpb24gYW5kCisgICBmaWxlIHRyYW5zZmVyLiBJdCBtYXkgb3IgbWF5 IG5vdCBiZSB0aGUgc2FtZSBkZXZpY2UgYXMgdGhlIGNvbnNvbGUsIGFuZAorICAgaXQgbWF5IG9y IG1heSBub3QgYmUgYSB0ZXJtaW5hbCAoc2VyaWFsLXBvcnQpIGRldmljZTsgaXQgY291bGQgYWxz byBiZQorICAgYSBuZXR3b3JrIGNvbm5lY3Rpb24uIEZvciBicmV2aXR5LCB0aGUgY29tbXVuaWNh dGlvbiBkZXZpY2UgaXMgcmVmZXJyZWQKKyAgIHRvIGhlcmUgYXMgdGhlICJ0dHkiLiBXaGVuIHRo ZSBjb21tdW5pY2F0aW9uIGRldmljZSBpcyB0aGUgc2FtZSBhcyB0aGUKKyAgIGNvbnNvbGUgZGV2 aWNlLCBLZXJtaXQgaXMgc2FpZCB0byBiZSBpbiByZW1vdGUgbW9kZS4gV2hlbiB0aGUgdHdvCisg ICBkZXZpY2VzIGFyZSBkaWZmZXJlbnQsIEtlcm1pdCBpcyBpbiBsb2NhbCBtb2RlLgorCisgICBp bnQKKyAgICAgICAgICB0dGNoaygpCisgICAgICAgICAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGNo YXJhY3RlcnMgdGhhdCBoYXZlIGFycml2ZWQgYXQgdGhlCisgICAgICAgICAgY29tbXVuaWNhdGlv biBkZXZpY2UgYnV0IGhhdmUgbm90IHlldCBiZWVuIHJlYWQgYnkgdHRpbmMoKSwKKyAgICAgICAg ICB0dGlubCgpLCBhbmQgZnJpZW5kcy4gSWYgY29tbXVuaWNhdGlvbiBpbnB1dCBpcyBidWZmZXJl ZCAoYW5kIGl0CisgICAgICAgICAgc2hvdWxkIGJlKSwgdGhpcyBpcyB0aGUgc3VtIG9mIHRoZSBu dW1iZXIgb2YgdW5yZWFkIGNoYXJhY3RlcnMKKyAgICAgICAgICBpbiBLZXJtaXQncyBidWZmZXIg UExVUyB0aGUgbnVtYmVyIG9mIHVucmVhZCBjaGFyYWN0ZXJzIGluIHRoZQorICAgICAgICAgIG9w ZXJhdGluZyBzeXN0ZW0ncyBpbnRlcm5hbCBidWZmZXIuIFRoZSBjYWxsIG11c3QgYmUKKyAgICAg ICAgICBub25kZXN0cnVjdGl2ZSBhbmQgbm9uYmxvY2tpbmcsIGFuZCBhcyBpbmV4cGVuc2l2ZSBh cyBwb3NzaWJsZS4KKyAgICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgMDogb3IgZ3JlYXRl ciBvbiBzdWNjZXNzLAorICAgICAgICAgICAgMDogaW4gY2FzZSBvZiBpbnRlcm5hbCBlcnJvciwK KyAgICAgICAgICAgLTE6IG9yIGxlc3Mgd2hlbiBpdCBkZXRlcm1pbmVzIHRoZSBjb25uZWN0aW9u IGhhcyBiZWVuIGJyb2tlbiwKKyAgICAgICAgICBvciB0aGVyZSBpcyBubyBjb25uZWN0aW9uLgor CisgICAgICAgICAgVGhhdCBpcywgYSBuZWdhdGl2ZSByZXR1cm4gZnJvbSB0dGNoaygpIHNob3Vs ZCByZWxpYWJseSBpbmRpY2F0ZQorICAgICAgICAgIHRoYXQgdGhlcmUgaXMgbm8gdXNhYmxlIGNv bm5lY3Rpb24uIEZ1cnRoZXJtb3JlLCB0dGNoaygpIHNob3VsZAorICAgICAgICAgIGJlIGNhbGxh YmxlIGF0IGFueSB0aW1lIHRvIHNlZSBpZiB0aGUgY29ubmVjdGlvbiBpcyBvcGVuLiBXaGVuCisg ICAgICAgICAgdGhlIGNvbm5lY3Rpb24gaXMgb3BlbiwgZXZlcnkgZWZmb3J0IG11c3QgYmUgbWFk ZSB0byBlbnN1cmUgdGhhdAorICAgICAgICAgIHR0Y2hrIHJldHVybnMgYW4gYWNjdXJhdGUgbnVt YmVyIG9mIGNoYXJhY3RlcnMgd2FpdGluZyB0byBiZQorICAgICAgICAgIHJlYWQsIHJhdGhlciB0 aGFuIGp1c3QgMCAobm8gY2hhcmFjdGVycykgb3IgMSAoMSBvciBtb3JlCisgICAgICAgICAgY2hh cmFjdGVycyksIGFzIHdvdWxkIGJlIHRoZSBjYXNlIHdoZW4gd2UgdXNlIHNlbGVjdCgpLiBUaGlz CisgICAgICAgICAgYXNwZWN0IG9mIHR0Y2hrJ3Mgb3BlcmF0aW9uIGlzIGNyaXRpY2FsIHRvIHN1 Y2Nlc3NmdWwgb3BlcmF0aW9uCisgICAgICAgICAgb2Ygc2xpZGluZyB3aW5kb3dzIGFuZCBzdHJl YW1pbmcsIGJ1dCAibm9uZGVzdHJ1Y3RpdmUgYnVmZmVyCisgICAgICAgICAgcGVla2luZyIgaXMg YW4gb2JzY3VyZSBvcGVyYXRpbmcgc3lzdGVtIGZlYXR1cmUsIGFuZCBzbyB3aGVuIGl0CisgICAg ICAgICAgaXMgbm90IGF2YWlsYWJsZSwgd2UgaGF2ZSB0byBkbyBpdCBvdXJzZWx2ZXMgYnkgbWFu YWdpbmcgb3VyIG93bgorICAgICAgICAgIGludGVybmFsIGJ1ZmZlciBhdCBhIGxldmVsIGJlbG93 IHR0aW5jKCksIHR0aW5sKCksIGV0YywgYXMgaW4KKyAgICAgICAgICB0aGUgVU5JWCB2ZXJzaW9u IChub24tRklPTlJFQUQgY2FzZSkuCisKKyAgICAgICAgICBBbiBleHRlcm5hbCBnbG9iYWwgdmFy aWFibGUsIGNsc29uZGlzYywgaWYgbm9uemVybywgbWVhbnMgdGhhdAorICAgICAgICAgIGlmIGEg c2VyaWFsIGNvbm5lY3Rpb24gZHJvcHMgKGNhcnJpZXIgb24tdG8tb2ZmIHRyYW5zaXRpb24KKyAg ICAgICAgICBkZXRlY3RlZCBieSB0dGNoaygpKSwgdGhlIGRldmljZSBzaG91bGQgYmUgY2xvc2Vk IGFuZCByZWxlYXNlZAorICAgICAgICAgIGF1dG9tYXRpY2FsbHkuCisKKyAgIGludAorICAgICAg ICAgIHR0Y2xvcygpCisgICAgICAgICAgQ2xvc2VzIHRoZSBjb21tdW5pY2F0aW9uIGRldmljZSAo dHR5IG9yIG5ldHdvcmspLiBJZiB0aGVyZSB3ZXJlCisgICAgICAgICAgYW55IGtpbmQgb2YgZXhj bHVzaXZlIGFjY2VzcyBsb2NrcyBjb25uZWN0ZWQgd2l0aCB0aGUgdHR5LCB0aGVzZQorICAgICAg ICAgIGFyZSByZWxlYXNlZC4gSWYgdGhlIHR0eSBoYXMgYSBtb2RlbSBjb25uZWN0aW9uLCBpdCBp cyBodW5nIHVwLgorICAgICAgICAgIEZvciB0cnVlIHR0eSBkZXZpY2VzLCB0aGUgb3JpZ2luYWwg dHR5IGRldmljZSBtb2RlcyBhcmUKKyAgICAgICAgICByZXN0b3JlZC4gUmV0dXJuczoKKyAgICAg ICAgICAgLTE6IG9uIGZhaWx1cmUuCisgICAgICAgICAgICAwOiBvbiBzdWNjZXNzLgorCisgICBp bnQKKyAgICAgICAgICB0dGZsdWkoKQorICAgICAgICAgIEZsdXNoIGNvbW11bmljYXRpb25zIGlu cHV0IGJ1ZmZlci4gSWYgYW55IGNoYXJhY3RlcnMgaGF2ZQorICAgICAgICAgIGFycml2ZWQgYnV0 IGhhdmUgbm90IHlldCBiZWVuIHJlYWQsIGRpc2NhcmQgdGhlc2UgY2hhcmFjdGVycy4gSWYKKyAg ICAgICAgICBjb21tdW5pY2F0aW9ucyBpbnB1dCBpcyBidWZmZXJlZCBieSBLZXJtaXQgKGFuZCBp dCBzaG91bGQgYmUpLAorICAgICAgICAgIHRoaXMgZnVuY3Rpb24gZmx1c2hlcyBLZXJtaXQncyBi dWZmZXIgYXMgd2VsbCBhcyB0aGUgb3BlcmF0aW5nCisgICAgICAgICAgc3lzdGVtJ3MgaW50ZXJu YWwgaW5wdXQgYnVmZmVyLiBSZXR1cm5zOgorICAgICAgICAgICAtMTogb24gZmFpbHVyZS4KKyAg ICAgICAgICAgIDA6IG9uIHN1Y2Nlc3MuCisKKyAgIGludAorICAgICAgICAgIHR0Zmx1bygpCisg ICAgICAgICAgRmx1c2ggdHR5IG91dHB1dCBidWZmZXIuIElmIGFueSBjaGFyYWN0ZXJzIGhhdmUg YmVlbiB3cml0dGVuIGJ1dAorICAgICAgICAgIG5vdCBhY3R1YWxseSB0cmFuc21pdHRlZCAoZS5n LiBiZWNhdXNlIHRoZSBzeXN0ZW0gaGFzIGJlZW4KKyAgICAgICAgICBmbG93LWNvbnRyb2xsZWQp LCByZW1vdmUgdGhlbSBmcm9tIHRoZSBzeXN0ZW0ncyBvdXRwdXQgYnVmZmVyLgorICAgICAgICAg IChOb3RlLCB0aGlzIGZ1bmN0aW9uIGlzIG5vdCBhY3R1YWxseSB1c2VkLCBidXQgaXQgaXMgcmVj b21tZW5kZWQKKyAgICAgICAgICB0aGF0IGFsbCBDLUtlcm1pdCBwcm9ncmFtbWVycyBhZGQgaXQg Zm9yIGZ1dHVyZSB1c2UsIGV2ZW4gaWYgaXQKKyAgICAgICAgICBpcyBvbmx5IGEgZHVtbXkgZnVu Y3Rpb24gdGhhdCByZXR1cm5zIDAgYWx3YXlzLikKKworICAgaW50CisgICAgICAgICAgdHRnbWRt KCkKKyAgICAgICAgICBMb29rcyBmb3IgdGhlIG1vZGVtIHNpZ25hbHMgQ1RTLCBEU1IsIGFuZCBD VFMsIGFuZCByZXR1cm5zIHRob3NlCisgICAgICAgICAgdGhhdCBhcmUgb24gaW4gYXMgaXRzIHJl dHVybiB2YWx1ZSwgaW4gYSBiaXQgbWFzayBhcyBkZXNjcmliZWQKKyAgICAgICAgICBmb3IgdHR3 bWRtLCBpbiB3aGljaCBhIGJpdCBpcyBvbiAoMSkgb3Igb2ZmICgwKSBhY2NvcmRpbmcgdG8KKyAg ICAgICAgICB3aGV0aGVyIHRoZSBjb3JyZXNwb25kaW5nIHNpZ25hbCBpcyBvbiAoYXNzZXJ0ZWQp IG9yIG9mZiAobm90CisgICAgICAgICAgYXNzZXJ0ZWQpLiBSZXR1cm4gdmFsdWVzOgorICAgICAg ICAgICAtMzogTm90IGltcGxlbWVudGVkCisgICAgICAgICAgIC0yOiBpZiB0aGUgbGluZSBkb2Vz IG5vdCBoYXZlIG1vZGVtIGNvbnRyb2wKKyAgICAgICAgICAgLTE6IG9uIGVycm9yCisgICAgICAg ICAgPj0wOiBvbiBzdWNjZXNzLCB3aXRoIGJpdCBtYXNrIGNvbnRhaW5pbmcgdGhlIG1vZGVtIHNp Z25hbHMuCisKKyAgIGxvbmcKKyAgICAgICAgICB0dGdzcGQoKQorICAgICAgICAgIFJldHVybnMg dGhlIGN1cnJlbnQgdHR5IHNwZWVkIGluIEJJVFMgKG5vdCBDSEFSQUNURVJTKSBwZXIKKyAgICAg ICAgICBzZWNvbmQsIG9yIC0xIGlmIGl0IGlzIG5vdCBrbm93biBvciBpZiB0aGUgdHR5IGlzIHJl YWxseSBhCisgICAgICAgICAgbmV0d29yaywgb3IgdXBvbiBhbnkga2luZCBvZiBlcnJvci4gT24g c3VjY2VzcywgdGhlIHNwZWVkCisgICAgICAgICAgcmV0dXJuZWQgaXMgdGhlIGFjdHVhbCBudW1i ZXIgb2YgYml0cyBwZXIgc2Vjb25kLCBsaWtlIDEyMDAsCisgICAgICAgICAgOTYwMCwgMTkyMDAs IGV0Yy4KKworICAgaW50CisgICAgICAgICAgdHRnd3NpeigpCisgICAgICAgICAgR2V0IHRlcm1p bmFsIHdpbmRvdyBzaXplLiBSZXR1cm5zIC0xIG9uIGVycm9yLCAwIGlmIHRoZSB3aW5kb3cKKyAg ICAgICAgICBzaXplIGNhbid0IGJlIG9idGFpbmVkLCAxIGlmIHRoZSB3aW5kb3cgc2l6ZSBoYXMg YmVlbgorICAgICAgICAgIHN1Y2Nlc3NmdWxseSBvYnRhaW5lZC4gVXBvbiBzdWNjZXNzLCB0aGUg ZXh0ZXJuYWwgZ2xvYmFsCisgICAgICAgICAgdmFyaWFibGVzIHR0X3Jvd3MgYW5kIHR0X2NvbHMg YXJlIHNldCB0byB0aGUgbnVtYmVyIG9mIHNjcmVlbgorICAgICAgICAgIHJvd3MgYW5kIG51bWJl ciBvZiBzY3JlZW4gY29sdW1ucywgcmVzcGVjdGl2ZWx5LiBBcyB0aGlzCisgICAgICAgICAgZnVu Y3Rpb24gaXMgbm90IGltcGxlbWVudGVkIGluIGFsbCBjayp0aW8uYyBtb2R1bGVzLCBjYWxscyB0 byBpdAorICAgICAgICAgIG11c3QgYmUgd3JhcHBlZCBpbiAjaWZkZWYgQ0tfVFRHV1NJWi4uI2Vu ZGlmLiBOT1RFOiBUaGlzCisgICAgICAgICAgZnVuY3Rpb24gbXVzdCBiZSBhdmFpbGFibGUgdG8g dXNlIHRoZSBURUxORVQgTkFXUyBmZWF0dXJlCisgICAgICAgICAgKE5lZ290aWF0ZSBBYm91dCBX aW5kb3cgU2l6ZSkgYXMgd2VsbCBhcyBSbG9naW4uCisKKyAgIGludAorICAgICAgICAgIHR0aGFu ZygpCisgICAgICAgICAgSGFuZyB1cCB0aGUgY3VycmVudCB0dHkgZGV2aWNlLiBGb3IgcmVhbCB0 dHkgZGV2aWNlcywgdHVybiBvZmYKKyAgICAgICAgICBEVFIgZm9yIGFib3V0IDEvMy0xLzIgc2Vj b25kIChvciBvdGhlciBsZW5ndGggb2YgdGltZSwgZGVwZW5kaW5nCisgICAgICAgICAgb24gdGhl IHN5c3RlbSkuIElmIHRoZSB0dHkgaXMgcmVhbGx5IGEgbmV0d29yayBjb25uZWN0aW9uLCBjbG9z ZQorICAgICAgICAgIGl0LiBSZXR1cm5zOgorICAgICAgICAgICAtMTogb24gZmFpbHVyZS4KKyAg ICAgICAgICAgIDA6IGlmIGl0IGRvZXMgbm90IGV2ZW4gdHJ5IHRvIGhhbmcgdXAuCisgICAgICAg ICAgICAxOiBpZiBpdCBiZWxpZXZlcyBpdCBodW5nIHVwIHN1Y2Nlc3NmdWxseS4KKworICAgVk9J RAorICAgICAgICAgIHR0aW1vZmYoKQorICAgICAgICAgIFR1cm5zIG9mZiBhbGwgcGVuZGluZyB0 aW1lciBpbnRlcnJ1cHRzLgorCisgICBpbnQKKyAgICAgICAgICB0dGluYyh0aW1vKSBpbnQgdGlt bzsgKGZ1bmN0aW9uIGlzIG9sZCwgcmV0dXJuIGNvZGVzIGFyZSBuZXcpCisgICAgICAgICAgUmVh ZHMgb25lIGNoYXJhY3RlciBmcm9tIHRoZSBjb21tdW5pY2F0aW9uIGRldmljZS4gSWYgdGltbyBp cworICAgICAgICAgIGdyZWF0ZXIgdGhhbiB6ZXJvLCB3YWl0IHRoZSBnaXZlbiBudW1iZXIgb2Yg c2Vjb25kcyBhbmQgdGhlbgorICAgICAgICAgIHRpbWUgb3V0IGlmIG5vIGNoYXJhY3RlciBhcnJp dmVzLCBvdGhlcndpc2Ugd2FpdCBmb3JldmVyIGZvciBhCisgICAgICAgICAgY2hhcmFjdGVyLiBS ZXR1cm5zOgorICAgICAgICAgICAtMzogaW50ZXJuYWwgZXJyb3IgKGUuZy4gdHR5IG1vZGVzIHNl dCB3cm9uZykKKyAgICAgICAgICAgLTI6IGNvbW11bmljYXRpb25zIGRpc2Nvbm5lY3QKKyAgICAg ICAgICAgLTE6IHRpbWVvdXQgb3Igb3RoZXIgZXJyb3IKKyAgICAgICAgICA+PTA6IHRoZSBjaGFy YWN0ZXIgdGhhdCB3YXMgcmVhZC4KKyAgICAgICAgICBJdCBpcyBISUdITFkgUkVDT01NRU5ERUQg dGhhdCB0dGluYygpIGJlIGludGVybmFsbHkgYnVmZmVyZWQgc28KKyAgICAgICAgICB0aGF0IGNh bGxzIHRvIGl0IGFyZSByZWxhdGl2ZWx5IGluZXhwZW5zaXZlLiBJZiBpdCBpcyBwb3NzaWJsZQor ICAgICAgICAgIHRvIHRvIGltcGxlbWVudCB0dGluYygpIGFzIGEgbWFjcm8sIGFsbCB0aGUgYmV0 dGVyLCBmb3IgZXhhbXBsZQorICAgICAgICAgIHNvbWV0aGluZyBsaWtlOgorCisgICNkZWZpbmUg dHRpbmModCkgKCAoLS10eGJ1Zm4gPj0gMCkgPyB0eGJ1Zlt0dGJ1ZnArK10gOiB0eGJ1ZnIodCkg KQorCisgICAgICAgICAgKHNlZSBkZXNjcmlwdGlvbiBvZiB0eGJ1ZnIoKSBiZWxvdykKKworICAg aW50CisgICAgICAgICAgdHRpbmwoZGVzdCxtYXgsdGltbyxlb2wsc3RhcnQsdHVybikgaW50IG1h eCx0aW1vLHR1cm47IENIQVIKKyAgICAgICAgICAqZGVzdCwgZW9sLCBzdGFydDsKKyAgICAgICAg ICB0dGlubCgpIGlzIEtlcm1pdCdzIHBhY2tldCByZWFkZXIuIFJlYWRzIGEgcGFja2V0IGZyb20g dGhlCisgICAgICAgICAgY29tbXVuaWNhdGlvbnMgZGV2aWNlLCBvciB1cCB0byBtYXggY2hhcmFj dGVycywgd2hpY2hldmVyIG9jY3VycworICAgICAgICAgIGZpcnN0LiBBIGxpbmUgaXMgYSBzdHJp bmcgb2YgY2hhcmFjdGVycyBzdGFydGluZyB3aXRoIHRoZSBzdGFydAorICAgICAgICAgIGNoYXJh Y3RlciB1cCB0byBhbmQgaW5jbHVkaW5nIHRoZSBjaGFyYWN0ZXIgZ2l2ZW4gaW4gZW9sIG9yCisg ICAgICAgICAgdW50aWwgdGhlIGxlbmd0aCBpcyBleGhhdXN0ZWQsIG9yLCBpZiB0dXJuICE9IDAs IHVudGlsIHRoZSBsaW5lCisgICAgICAgICAgdHVybmFyb3VuZCBjaGFyYWN0ZXIgKHR1cm4pIGlz IHJlYWQuIElmIHR1cm4gaXMgMCwgdHRpbmwoKQorICAgICAgICAgICpzaG91bGQqIHVzZSB0aGUg cGFja2V0IGxlbmd0aCBmaWVsZCB0byBkZXRlY3QgdGhlIGVuZCwgdG8gYWxsb3cKKyAgICAgICAg ICBmb3IgdGhlIHBvc3NpYmlsaXR5IHRoYXQgdGhlIGVvbCBjaGFyYWN0ZXIgYXBwZWFycyB1bnBy ZWZpeGVkIGluCisgICAgICAgICAgdGhlIHBhY2tldCBkYXRhLiAoVGhlIHR1cm5hcm91bmQgY2hh cmFjdGVyIGlzIGZvciBoYWxmLWR1cGxleAorICAgICAgICAgIGxpbmVtb2RlIGNvbm5lY3Rpb25z LikKKworICAgICAgICAgIElmIHRpbW8gaXMgZ3JlYXRlciB0aGFuIHplcm8sIHR0aW5sKCkgdGlt ZXMgb3V0IGlmIHRoZSBlb2wKKyAgICAgICAgICBjaGFyYWN0ZXIgaXMgbm90IGVuY291bnRlcmVk IHdpdGhpbiB0aGUgZ2l2ZW4gbnVtYmVyIG9mIHNlY29uZHMKKyAgICAgICAgICBhbmQgcmV0dXJu cyAtMS4KKworICAgICAgICAgIFRoZSBjaGFyYWN0ZXJzIHRoYXQgd2VyZSBpbnB1dCBhcmUgY29w aWVkIGludG8gImRlc3QiIHdpdGggdGhlaXIKKyAgICAgICAgICBwYXJpdHkgYml0cyBzdHJpcHBl ZCBpZiBwYXJpdHkgaXMgbm90IG5vbmUuIFRoZSBmaXJzdCBjaGFyYWN0ZXIKKyAgICAgICAgICBj b3BpZWQgaW50byBkZXN0IHNob3VsZCBiZSB0aGUgc3RhcnQgY2hhcmFjdGVyLCBhbmQgdGhlIGxh c3QKKyAgICAgICAgICBzaG91bGQgYmUgdGhlIGZpbmFsIGNoYXJhY3RlciBvZiB0aGUgcGFja2V0 ICh0aGUgbGFzdCBibG9jaworICAgICAgICAgIGNoZWNrIGNoYXJhY3RlcikuIHR0aW5sKCkgc2hv dWxkIGFsc28gYWJzb3JiIGFuZCBkaXNjYXJkIHRoZSBlb2wKKyAgICAgICAgICBhbmQgdHVybiBj aGFyYWN0ZXJzLCBhbmQgYW55IG90aGVyIGNoYXJhY3RlcnMgdGhhdCBhcmUgd2FpdGluZworICAg ICAgICAgIHRvIGJlIHJlYWQsIHVwIHVudGlsIHRoZSBuZXh0IHN0YXJ0IGNoYXJhY3Rlciwgc28g dGhhdAorICAgICAgICAgIHN1YnNlcXVlbnQgY2FsbHMgdG8gdHRjaGsoKSB3aWxsIG5vdCBzdWNj ZWVkIHNpbXBseSBiZWNhdXNlCisgICAgICAgICAgdGhlcmUgYXJlIHNvbWUgdGVybWluYXRvcnMg c3RpbGwgc2l0dGluZyBpbiB0aGUgYnVmZmVyIHRoYXQKKyAgICAgICAgICB0dGlubCgpIGRpZG4n dCByZWFkLiBUaGlzIG9wZXJhdGlvbiwgaWYgcGVyZm9ybWVkLCBNVVNUIE5PVAorICAgICAgICAg IEJMT0NLIChzbyBpZiBpdCBjYW4ndCBiZSBwZXJmb3JtZWQgaW4gYSBndWFyYW50ZWVkIG5vbmJs b2NraW5nCisgICAgICAgICAgd2F5LCBkb24ndCBkbyBpdCkuCisKKyAgICAgICAgICBPbiBzdWNj ZXNzLCB0dGlubCgpIHJldHVybnMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHJlYWQuCisgICAg ICAgICAgT3B0aW9uYWxseSwgdHRpbmwoKSBjYW4gc2Vuc2UgdGhlIHBhcml0eSBvZiBpbmNvbWlu ZyBwYWNrZXRzLiBJZgorICAgICAgICAgIGl0IGRvZXMgdGhpcywgdGhlbiBpdCBzaG91bGQgc2V0 IHRoZSBnbG9iYWwgdmFyaWFibGUgdHRwcnR5CisgICAgICAgICAgYWNjb3JkaW5nbHkuIHR0aW5s KCkgc2hvdWxkIGJlIGNvZGVkIHRvIGJlIGFzIGVmZmljaWVudCBhcworICAgICAgICAgIHBvc3Np YmxlLCBzaW5jZSBpdCBpcyBhdCB0aGUgImlubmVyIGxvb3AiIG9mIHBhY2tldCByZWNlcHRpb24u CisgICAgICAgICAgdHRpbmwoKSByZXR1cm5zOgorICAgICAgICAgICAtMTogVGltZW91dCBvciBv dGhlciBwb3NzaWJseSBjb3JyZWN0YWJsZSBlcnJvci4KKyAgICAgICAgICAgLTI6IEludGVycnVw dGVkIGZyb20ga2V5Ym9hcmQuCisgICAgICAgICAgIC0zOiBVbmNvcnJlY3RhYmxlIGkvbyBlcnJv ciAtLSBjb25uZWN0aW9uIGxvc3QsIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICBwcm9ibGVtLCBl dGMuCisgICAgICAgICAgPj0wOiBvbiBzdWNjZXNzLCB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMg dGhhdCB3ZXJlIGFjdHVhbGx5CisgICAgICAgICAgcmVhZCBhbmQgcGxhY2VkIGluIHRoZSBkZXN0 IGJ1ZmZlciwgbm90IGNvdW50aW5nIHRoZSB0cmFpbGluZworICAgICAgICAgIG51bGwuCisKKyAg IGludAorICAgICAgICAgIHR0b2MoYykgY2hhciBjOworICAgICAgICAgIE91dHB1dHMgdGhlIGNo YXJhY3RlciBjIHRvIHRoZSBjb21tdW5pY2F0aW9uIGxpbmUuIElmIHRoZQorICAgICAgICAgIG9w ZXJhdGlvbiBmYWlscyB0byBjb21wbGV0ZSB3aXRoaW4gdHdvIHNlY29uZHMsIHRoaXMgZnVuY3Rp b24KKyAgICAgICAgICByZXR1cm5zIC0xLiBPdGhlcndpc2UgaXQgcmV0dXJucyB0aGUgbnVtYmVy IG9mIGNoYXJhY3RlcnMKKyAgICAgICAgICBhY3R1YWxseSB3cml0dGVuIHRvIHRoZSB0dHkgKDAg b3IgMSkuIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkKKyAgICAgICAgICBiZSB1c2VkIGZvciBp bnRlcmFjdGl2ZSwgY2hhcmFjdGVyLW1vZGUgb3BlcmF0aW9ucywgbGlrZQorICAgICAgICAgIHRl cm1pbmFsIGNvbm5lY3Rpb24sIHNjcmlwdCBleGVjdXRpb24sIGRpYWxlciBpL28sIHdoZXJlIHRo ZQorICAgICAgICAgIG92ZXJoZWFkIG9mIHRoZSBzaWduYWxzIGFuZCBhbGFybXMgZG9lcyBub3Qg Y3JlYXRlIGEgYm90dGxlbmVjay4KKyAgICAgICAgICAoVEhJUyBERVNDUklQVElPTiBORUVEUyBJ TVBST1ZFTUVOVCAtLSBJZiB0aGUgb3BlcmF0aW9uIGZhaWxzCisgICAgICAgICAgd2l0aGluIGEg ImNlcnRhaW4gYW1vdW50IG9mIHRpbWUiLi4uIHdoaWNoIG1pZ2h0IGJlIGRlcGVuZGVudCBvbgor ICAgICAgICAgIHRoZSBjb21tdW5pY2F0aW9uIG1ldGhvZCwgc3BlZWQsIGV0Yy4gSW4gcGFydGlj dWxhciwKKyAgICAgICAgICBmbG93LWNvbnRyb2wgZGVhZGxvY2tzIG11c3QgYmUgYWNjb3VudGVk IGZvciBhbmQgYnJva2VuIG91dCBvZgorICAgICAgICAgIHRvIHByZXZlbnQgdGhlIHByb2dyYW0g ZnJvbSBoYW5naW5nIGluZGVmaW5pdGVseSwgZXRjLikKKworICAgaW50CisgICAgICAgICAgdHRv bChzLG4pIGludCBuOyBjaGFyICpzOworICAgICAgICAgIEtlcm1pdCdzIHBhY2tldCB3cml0ZXIu IFdyaXRlcyB0aGUgbiBjaGFyYWN0ZXJzIG9mIHRoZSBzdHJpbmcKKyAgICAgICAgICBwb2ludGVk IHRvIHRvIGJ5IHMuIE5PVEU6IEl0IGlzIHR0b2wncyByZXNwb25zaWJpbGl0eSB0byB3cml0ZQor ICAgICAgICAgIEFMTCBvZiB0aGUgY2hhcmFjdGVycywgbm90IGp1c3Qgc29tZSBvZiB0aGVtLiBS ZXR1cm5zOgorICAgICAgICAgICAtMTogb24gYSBwb3NzaWJseSBjb3JyZWN0YWJsZSBlcnJvciAo c28gaXQgY2FuIGJlIHJldHJpZWQpLgorICAgICAgICAgICAtMzogb24gYSBmYXRhbCBlcnJvciwg ZS5nLiBjb25uZWN0aW9uIGxvc3QuCisgICAgICAgICAgPj0wOiBvbiBzdWNjZXNzLCB0aGUgYWN0 dWFsIG51bWJlciBvZiBjaGFyYWN0ZXJzIHdyaXR0ZW4gKHRoZQorICAgICAgICAgIHNwZWNpZmlj IG51bWJlciBpcyBub3QgYWN0dWFsbHkgdXNlZCBmb3IgYW55dGhpbmcpLgorCisgICBpbnQKKyAg ICAgICAgICB0dG9wZW4odHRuYW1lLGxjbCxtb2RlbSx0aW1vKSBjaGFyICp0dG5hbWU7IGludCAq bGNsLCBtb2RlbSwKKyAgICAgICAgICB0aW1vOworICAgICAgICAgIE9wZW5zIGEgdHR5IGRldmlj ZSwgaWYgaXQgaXMgbm90IGFscmVhZHkgb3Blbi4gdHRvcGVuIG11c3QgY2hlY2sKKyAgICAgICAg ICB0byBtYWtlIHN1cmUgdGhlIFNBTUUgZGV2aWNlIGlzIG5vdCBhbHJlYWR5IG9wZW47IGlmIGl0 IGlzLAorICAgICAgICAgIHR0b3BlbiByZXR1cm5zIHN1Y2Nlc3NmdWxseSB3aXRob3V0IGRvaW5n IGFueXRoaW5nLiBJZiBhCisgICAgICAgICAgRElGRkVSRU5UIGRldmljZSBpcyBjdXJyZW50bHkg b3BlbiwgdHRvcGVuKCkgbXVzdCBjYWxsIHR0Y2xvcygpCisgICAgICAgICAgdG8gY2xvc2UgaXQg YmVmb3JlIG9wZW5pbmcgdGhlIG5ldyBvbmUuCisKKyAgICAgICAgUGFyYW1ldGVyczoKKworICAg ICAgICAgICAgICB0dG5hbWU6CisgICAgICAgICAgICAgICAgICAgICAgY2hhcmFjdGVyIHN0cmlu ZyAtIGRldmljZSBuYW1lIG9yIG5ldHdvcmsgaG9zdCBuYW1lLgorCisgICAgICAgICAgICAgIGxj bDoKKyAgICAgICAgICAgICAgICAgICAgICBJZiBjYWxsZWQgd2l0aCBsY2wgPCAwLCBzZXRzIHZh bHVlIG9mIGxjbCBhcworICAgICAgICAgICAgICAgICAgICAgIGZvbGxvd3M6CisgICAgICAgICAg ICAgICAgICAgICAgMDogdGhlIHRlcm1pbmFsIG5hbWVkIGJ5IHR0bmFtZSBpcyB0aGUgam9iJ3MK KyAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGluZyB0ZXJtaW5hbC4KKyAgICAgICAgICAg ICAgICAgICAgICAxOiB0aGUgdGVybWluYWwgbmFtZWQgYnkgdHRuYW1lIGlzIG5vdCB0aGUgam9i J3MKKyAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGluZyB0ZXJtaW5hbC4KKyAgICAgICAg ICAgICAgICAgICAgICBJZiB0aGUgZGV2aWNlIGlzIGFscmVhZHkgb3Blbiwgb3IgaWYgdGhlIHJl cXVlc3RlZAorICAgICAgICAgICAgICAgICAgICAgIGRldmljZSBjYW4ndCBiZSBvcGVuZWQsIHRo ZW4gbGNsIHJlbWFpbnMgKGFuZCBpcworICAgICAgICAgICAgICAgICAgICAgIHJldHVybmVkIGFz KSAtMS4KKworICAgICAgICAgICAgICBtb2RlbToKKyAgICAgICAgICAgICAgICAgICAgICBMZXNz IHRoYW4gemVybzogdGhpcyBpcyB0aGUgbmVnYXRpdmUgb2YgdGhlIG5ldHdvcmsKKyAgICAgICAg ICAgICAgICAgICAgICB0eXBlLCBhbmQgdHRuYW1lIGlzIGEgbmV0d29yayBob3N0IG5hbWUuIE5l dHdvcmsKKyAgICAgICAgICAgICAgICAgICAgICB0eXBlcyAoZnJvbSBbMTM0XWNrY25ldC5oOgor CisgIE5FVF9UQ1BCIDEgICBUQ1AvSVAgQmVya2VsZXkgKHNvY2tldCkgIChpbXBsZW1lbnRlZCBp biBbMTM1XWNrdXRpby5jKQorICBORVRfVENQQSAyICAgVENQL0lQIEFUJlQgKHN0cmVhbXMpICAg ICAobm90IHlldCBpbXBsZW1lbnRlZCkKKyAgTkVUX0RFQyAgMyAgIERFQ25ldCAgICAgICAgICAg ICAgICAgICAgKG5vdCB5ZXQgaW1wbGVtZW50ZWQpCisKKyAgICAgICAgICAgICAgICAgICAgICBa ZXJvIG9yIGdyZWF0ZXI6IHR0bmFtZSBpcyBhIHRlcm1pbmFsIGRldmljZSBuYW1lLgorICAgICAg ICAgICAgICAgICAgICAgIFplcm8gbWVhbnMgYSBkaXJlY3QgY29ubmVjdGlvbiAoZG9uJ3QgdXNl IG1vZGVtCisgICAgICAgICAgICAgICAgICAgICAgc2lnbmFscykuIFBvc2l0aXZlIG1lYW5zIHVz ZSBtb2RlbSBzaWduYWxzIGRlcGVuZGluZworICAgICAgICAgICAgICAgICAgICAgIG9uIHRoZSBj dXJyZW50IHNldHRpbmcgb2YgdHRjYXJyIChzZWUgdHRzY2FycigpKS4KKworICAgICAgICAgICAg ICB0aW1vOgorICAgICAgICAgICAgICAgICAgICAgID4gMDogbnVtYmVyIG9mIHNlY29uZHMgdG8g d2FpdCBmb3Igb3BlbigpIHRvIHJldHVybgorICAgICAgICAgICAgICAgICAgICAgIGJlZm9yZSB0 aW1pbmcgb3V0LgorICAgICAgICAgICAgICAgICAgICAgIDw9MDogbm8gdGltZXIsIHdhaXQgZm9y ZXZlciAoZS5nLiBmb3IgaW5jb21pbmcKKyAgICAgICAgICAgICAgICAgICAgICBjYWxsKS4KKyAg ICAgICAgICAgICAgICAgICAgICBGb3IgcmVhbCB0dHkgZGV2aWNlcywgdHRvcGVuKCkgYXR0ZW1w dHMgdG8gZ2FpbgorICAgICAgICAgICAgICAgICAgICAgIGV4Y2x1c2l2ZSBhY2Nlc3MgdG8gdGhl IHR0eSBkZXZpY2UsIGZvciBleGFtcGxlIGluCisgICAgICAgICAgICAgICAgICAgICAgVU5JWCBi eSBjcmVhdGluZyBhICJsb2NrZmlsZSIgKGluIG90aGVyIG9wZXJhdGluZworICAgICAgICAgICAg ICAgICAgICAgIHN5c3RlbXMsIGxpa2UgVk1TLCBleGNsdXNpdmUgYWNjZXNzIHByb2JhYmx5Cisg ICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZXMgbm8gc3BlY2lhbCBhY3Rpb24pLgorCisgICAg ICAgIFNpZGUgZWZmZWN0czoKKyAgICAgICAgICAgICAgICBDb3BpZXMgaXRzIGFyZ3VtZW50cyBh bmQgdGhlIHR0eSBmaWxlIGRlc2NyaXB0b3IgdG8gZ2xvYmFsCisgICAgICAgICAgICAgICAgdmFy aWFibGVzIHRoYXQgYXJlIGF2YWlsYWJsZSB0byB0aGUgb3RoZXIgdHR5LXJlbGF0ZWQKKyAgICAg ICAgICAgICAgICBmdW5jdGlvbnMsIHdpdGggdGhlIGxjbCB2YWx1ZSBhbHRlcmVkIGFzIGRlc2Ny aWJlZCBhYm92ZS4KKyAgICAgICAgICAgICAgICBHZXRzIGFsbCBwYXJhbWV0ZXJzIGFuZCBzZXR0 aW5ncyBhc3NvY2lhdGVkIHdpdGggdGhlIGxpbmUKKyAgICAgICAgICAgICAgICBhbmQgcHV0cyB0 aGVtIGluIGEgZ2xvYmFsIGFyZWEsIHNvIHRoYXQgdGhleSBjYW4gYmUKKyAgICAgICAgICAgICAg ICByZXN0b3JlZCBieSB0dHJlcygpLCBlLmcuIHdoZW4gdGhlIGRldmljZSBpcyBjbG9zZWQuCisK KyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgICAgICAgIDA6IG9uIHN1Y2Nlc3MKKyAgICAg ICAgICAgICAgICAgLTU6IGlmIGRldmljZSBpcyBpbiB1c2UKKyAgICAgICAgICAgICAgICAgLTQ6 IGlmIGFjY2VzcyB0byBkZXZpY2UgaXMgZGVuaWVkCisgICAgICAgICAgICAgICAgIC0zOiBpZiBh Y2Nlc3MgdG8gbG9jayBtZWNoYW5pc20gZGVuaWVkCisgICAgICAgICAgICAgICAgIC0yOiB1cG9u IHRpbWVvdXQgd2FpdGluZyBmb3IgZGV2aWNlIHRvIG9wZW4KKyAgICAgICAgICAgICAgICAgLTE6 IG9uIG90aGVyIGVycm9yCisKKyAgIGludAorICAgICAgICAgIHR0cGt0KHNwZWVkLGZsb3cscGFy aXR5KSBsb25nIHNwZWVkOyBpbnQgZmxvdywgcGFyaXR5OworICAgICAgICAgIFB1dHMgdGhlIGN1 cnJlbnRseSBvcGVuIHR0eSBkZXZpY2UgaW50byB0aGUgYXBwcm9wcmlhdGUgbW9kZXMKKyAgICAg ICAgICBmb3IgdHJhbnNtaXR0aW5nIGFuZCByZWNlaXZpbmcgS2VybWl0IHBhY2tldHMuCisKKyAg ICAgICAgQXJndW1lbnRzOgorCisgICAgICAgICAgICAgIHNwZWVkOgorICAgICAgICAgICAgICAg ICAgICAgIGlmIHNwZWVkID4gLTEsIGFuZCB0aGUgZGV2aWNlIGlzIGEgdHJ1ZSB0dHkgZGV2aWNl LAorICAgICAgICAgICAgICAgICAgICAgIGFuZCBLZXJtaXQgaXMgaW4gbG9jYWwgbW9kZSwgdHRw a3QgYWxzbyBzZXRzIHRoZQorICAgICAgICAgICAgICAgICAgICAgIHNwZWVkLgorCisgICAgICAg ICAgICAgIGZsb3c6CisgICAgICAgICAgICAgICAgICAgICAgaWYgaW4gdGhlIHJhbmdlIDAtMywg dHRwa3Qgc2VsZWN0cyB0aGUgY29ycmVzcG9uZGluZworICAgICAgICAgICAgICAgICAgICAgIHR5 cGUgb2YgZmxvdyBjb250cm9sLiBDdXJyZW50bHkgMCBpcyBkZWZpbmVkIGFzIG5vCisgICAgICAg ICAgICAgICAgICAgICAgZmxvdyBjb250cm9sLCAxIGlzIFhvbi9Yb2ZmLCBhbmQgbm8gb3RoZXIg dHlwZXMgYXJlCisgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lZC4gSWYgKGFuZCB0aGlzIGlz IGEgaG9ycmlibGUgaGFjaywgYnV0IGl0CisgICAgICAgICAgICAgICAgICAgICAgZ29lcyBiYWNr IG1hbnkgeWVhcnMgYW5kIHdpbGwgYmUgaGFyZCB0byBlcmFkaWNhdGUpCisgICAgICAgICAgICAg ICAgICAgICAgZmxvdyBpcyA0LCB0aGVuIHRoZSBhcHByb3ByaWF0ZSB0dHkgbW9kZXMgYXJlIHNl dAorICAgICAgICAgICAgICAgICAgICAgIGZvciBtb2RlbSBkaWFsaW5nLCBhIHNwZWNpYWwgY2Fz ZSBpbiB3aGljaCB3ZSB0YWxrCisgICAgICAgICAgICAgICAgICAgICAgdG8gYSBtb2RlbS1jb250 cm9sbGVkIGxpbmUgd2l0aG91dCByZXF1aXJpbmcKKyAgICAgICAgICAgICAgICAgICAgICBjYXJy aWVyLiBJZiBmbG93IGlzIDUsIHRoZW4gd2UgcmVxdWlyZSBjYXJyaWVyLgorCisgICAgICAgICAg ICAgIHBhcml0eToKKyAgICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIHNpbXBseSBjb3BpZWQg aW50byBhIGdsb2JhbCB2YXJpYWJsZSBzbyB0aGF0CisgICAgICAgICAgICAgICAgICAgICAgb3Ro ZXIgZnVuY3Rpb25zIChsaWtlIHR0aW5sLCB0dGluYywgZXRjKSBjYW4gdXNlIGl0LgorCisgICAg ICAgIFNpZGUgZWZmZWN0czoKKyAgICAgICAgICAgICAgICBDb3BpZXMgaXRzIGFyZ3VtZW50cyB0 byBnbG9iYWwgdmFyaWFibGVzLCBmbHVzaGVzIHRoZQorICAgICAgICAgICAgICAgIHRlcm1pbmFs IGRldmljZSBpbnB1dCBidWZmZXIuCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgICAg ICAgLTE6IG9uIGVycm9yLgorICAgICAgICAgICAgICAgICAgMDogb24gc3VjY2Vzcy4KKworICAg aW50CisgICAgICAgICAgdHRzZXRmbG93KGludCkKKyAgICAgICAgICBFbmFibGVzIHRoZSBnaXZl biB0eXBlIG9mIGZsb3cgY29udHJvbCBvbiB0aGUgb3BlbiBzZXJpYWwKKyAgICAgICAgICBjb21t dW5pY2F0aW9ucyBkZXZpY2UgaW1tZWRpYXRlbHkuIEFyZ3VtZW50cyBhcmUgdGhlIEZMT194eHgK KyAgICAgICAgICB2YWx1ZXMgZnJvbSBja2NkZWIuaCwgZXhjZXB0IEZMT19ESUFMLCBGTE9fRElB WCwgb3IgRkxPX0FVVE8sCisgICAgICAgICAgd2hpY2ggYXJlIG5vdCBhY3R1YWwgZmxvdy1jb250 cm9sIHR5cGVzLiBSZXR1cm5zIDAgb24gc3VjY2VzcywKKyAgICAgICAgICAtMSBvbiBmYWlsdXJl LgorCisgICAjaWZkZWYgVFRTUERMSVNUCisgICBsb25nICoKKyAgICAgICAgICB0dHNwZGxpc3Qo KQorICAgICAgICAgIFJldHVybnMgYSBwb2ludGVyIHRvIGFuIGFycmF5IG9mIGxvbmdzLCBvciBO VUxMIG9uIGZhaWx1cmUuIE9uCisgICAgICAgICAgc3VjY2VzcywgZWxlbWVudCAwIG9mIHRoZSBh cnJheSBjb250YWlucyBudW1iZXIsIG4sIGluZGljYXRpbmcKKyAgICAgICAgICBob3cgbWFueSBm b2xsb3cuIEVsZW1lbnRzIDEtbiBhcmUgc2VyaWFsIHNwZWVkcywgZXhwcmVzc2VkIGluCisgICAg ICAgICAgYml0cyBwZXIgc2Vjb25kLCB0aGF0IGFyZSBsZWdhbCBvbiB0aGlzIHBsYXRmb3JtLiBU aGUgdXNlcgorICAgICAgICAgIGludGVyZmFjZSBtYXkgdXNlIHRoaXMgbGlzdCB0byBjb25zdHJ1 Y3QgYSBtZW51LCBrZXl3b3JkIHRhYmxlLAorICAgICAgICAgIGV0Yy4KKworICAgI2VuZGlmIC8q IFRUU1BETElTVCAqLworCisgICBpbnQKKyAgICAgICAgICB0dHJlcygpCisgICAgICAgICAgUmVz dG9yZXMgdGhlIHR0eSBkZXZpY2UgdG8gdGhlIG1vZGVzIGFuZCBzZXR0aW5ncyB0aGF0IHdlcmUg aW4KKyAgICAgICAgICBlZmZlY3QgYXQgdGhlIHRpbWUgaXQgd2FzIG9wZW5lZCAoc2VlIHR0b3Bl bikuIFJldHVybnM6CisgICAgICAgICAgIC0xOiBvbiBlcnJvci4KKyAgICAgICAgICAgIDA6IG9u IHN1Y2Nlc3MuCisKKyAgIGludAorICAgICAgICAgIHR0cnVuY21kKHN0cmluZykgY2hhciAqIHN0 cmluZzsKKyAgICAgICAgICBSdW5zIHRoZSBnaXZlbiBjb21tYW5kIG9uIHRoZSBsb2NhbCBzeXN0 ZW0sIGJ1dCByZWRpcmVjdHMgaXRzCisgICAgICAgICAgaW5wdXQgYW5kIG91dHB1dCB0byB0aGUg Y29tbXVuaWNhdGlvbiAoU0VUIExJTkUsIFNFVCBQT1JULCBvcgorICAgICAgICAgIFNFVCBIT1NU KSBkZXZpY2UuIFJldHVybnM6CisgICAgICAgICAgICAwOiBvbiBmYWlsdXJlLgorICAgICAgICAg ICAgMTogb24gc3VjY2Vzcy4KKworICAgaW50CisgICAgICAgICAgdHRzY2FycihjYXJyaWVyKSBp bnQgY2FycmllcjsKKyAgICAgICAgICBDb3BpZXMgaXRzIGFyZ3VtZW50IHRvIGEgdmFyaWFibGUg dGhhdCBpcyBnbG9iYWwgdG8gdGhlIG90aGVyCisgICAgICAgICAgdHR5LXJlbGF0ZWQgZnVuY3Rp b25zLCBhbmQgdGhlbiByZXR1cm5zIGl0LiBUaGUgdmFsdWVzIGZvcgorICAgICAgICAgIGNhcnJp ZXIgYXJlIGRlZmluZWQgaW4gY2tjZGViLmg6IENBUl9PTiwgQ0FSX09GRiwgQ0FSX0FVVE8uCisg ICAgICAgICAgdHRvcGVuKCksIHR0cGt0KCksIGFuZCB0dHZ0KCkgdXNlIHRoaXMgdmFyaWFibGUg d2hlbiBkZWNpZGluZworICAgICAgICAgIGhvdyB0byBvcGVuIHRoZSB0dHkgZGV2aWNlIGFuZCB3 aGF0IG1vZGVzIHRvIHNlbGVjdC4gVGhlCisgICAgICAgICAgbWVhbmluZ3MgYXJlIHRoZXNlOgor CisgICBDQVJfT0ZGOiBJZ25vcmUgY2FycmllciBhdCBhbGwgdGltZXMuCisgICBDQVJfT046IFJl cXVpcmUgY2FycmllciBhdCBhbGwgdGltZXMsIGV4Y2VwdCB3aGVuIGRpYWxpbmcuIFRoaXMgbWVh bnMsCisgICBmb3IgZXhhbXBsZSwgdGhhdCB0dG9wZW4oKSBjb3VsZCBoYW5nIGZvcmV2ZXIgd2Fp dGluZyBmb3IgY2FycmllciBpZiBpdAorICAgaXMgbm90IHByZXNlbnQuCisgICBDQVJfQVVUTzog SWYgdGhlIG1vZGVtIHR5cGUgaXMgemVybyAoaS5lLiB0aGUgY29ubmVjdGlvbiBpcyBkaXJlY3Qp LAorICAgdGhpcyBpcyB0aGUgc2FtZSBhcyBDQVJfT0ZGLiBJZiB0aGUgbW9kZW0gdHlwZSBpcyBw b3NpdGl2ZSwgdGhlbiBoZWVkCisgICBjYXJyaWVyIGR1cmluZyBDT05ORUNUICh0dHZ0IG1vZGUp LCBidXQgaWdub3JlIGl0IGF0IG90aGVyIHRpbWVzCisgICAocGFja2V0IG1vZGUsIGR1cmluZyBT RVQgTElORSwgZXRjKS4gQ29tcGF0aWJsZSB3aXRoIHByZS01QSB2ZXJzaW9ucyBvZgorICAgQy1L ZXJtaXQuIFRoaXMgc2hvdWxkIGJlIHRoZSBkZWZhdWx0IGNhcnJpZXIgbW9kZS4KKworICAgICAg ICAgIEtlcm1pdCdzIERJQUwgY29tbWFuZCBpZ25vcmVzIHRoZSBjYXJyaWVyIHNldHRpbmcsIGJ1 dCB0dG9wZW4oKSwKKyAgICAgICAgICB0dHZ0KCksIGFuZCB0dHBrdCgpIGFsbCBob25vciB0aGUg Y2FycmllciBvcHRpb24gaW4gZWZmZWN0IGF0CisgICAgICAgICAgdGhlIHRpbWUgdGhleSBhcmUg Y2FsbGVkLiBOb25lIG9mIHRoaXMgYXBwbGllcyB0byByZW1vdGUgbW9kZQorICAgICAgICAgICh0 aGUgdHR5IGRldmljZSBpcyB0aGUgam9iJ3MgY29udHJvbGxpbmcgdGVybWluYWwpIG9yIHRvIG5l dHdvcmsKKyAgICAgICAgICBob3N0IGNvbm5lY3Rpb25zIChtb2RlbSB0eXBlIGlzIG5lZ2F0aXZl KS4KKworICAgaW50CisgICAgICAgICAgdHRzbmRiKCkKKyAgICAgICAgICBTZW5kcyBhIEJSRUFL IHNpZ25hbCBvbiB0aGUgdHR5IGRldmljZS4gT24gYSByZWFsIHR0eSBkZXZpY2UsCisgICAgICAg ICAgc2VuZCBhIHJlYWwgQlJFQUsgbGFzdGluZyBhcHByb3hpbWF0ZWx5IDI3NSBtaWxsaXNlY29u ZHMuIElmCisgICAgICAgICAgdGhpcyBpcyBub3QgcG9zc2libGUsIHNpbXVsYXRlIGEgQlJFQUsg YnkgKGZvciBleGFtcGxlKSBkcm9wcGluZworICAgICAgICAgIGRvd24gc29tZSB2ZXJ5IGxvdyBi YXVkIHJhdGUsIGxpa2UgNTAsIGFuZCBzZW5kaW5nIGEgYnVuY2ggb2YKKyAgICAgICAgICBudWxs IGNoYXJhY3RlcnMuIE9uIGEgbmV0d29yayBjb25uZWN0aW9uLCBkbyB0aGUgYXBwcm9wcmlhdGUK KyAgICAgICAgICBuZXR3b3JrIHByb3RvY29sIGZvciBCUkVBSy4gUmV0dXJuczoKKyAgICAgICAg ICAgLTE6IG9uIGVycm9yLgorICAgICAgICAgICAgMDogb24gc3VjY2Vzcy4KKworICAgaW50Cisg ICAgICAgICAgdHRzbmRsYigpCisgICAgICAgICAgTGlrZSB0dHNuZGIoKSwgYnV0IHNlbmRzIGEg IkxvbmcgQlJFQUsiIChhcHByb3ggMS41IHNlY29uZHMpLgorICAgICAgICAgIEZvciBuZXR3b3Jr IGNvbm5lY3Rpb25zLCBpdCBpcyBpZGVudGljYWwgdG8gdHRzbmRiKCkuIEN1cnJlbnRseSwKKyAg ICAgICAgICB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgb25seSBpZiBDS19MQlJLIGlzIGRlZmluZWQg KGFzIGl0IGlzIGZvcgorICAgICAgICAgIFVOSVggYW5kIFZNUykuCisKKyAgIGludAorICAgICAg ICAgIHR0c3NwZChjcHMpIGludCBjcHM7CisgICAgICAgICAgRm9yIHNlcmlhbCBkZXZpY2VzIG9u bHksIHNldCB0aGUgZGV2aWNlIHRyYW5zbWlzc2lvbiBzcGVlZCB0bworICAgICAgICAgIChub3Rl IGNhcmVmdWxseSkgVEVOIFRJTUVTIHRoZSBhcmd1bWVudC4gVGhlIGFyZ3VtZW50IGlzIGluCisg ICAgICAgICAgY2hhcmFjdGVycyBwZXIgc2Vjb25kLCBidXQgdHJhbnNtaXNzaW9uIHNwZWVkcyBh cmUgaW4gYml0cyBwZXIKKyAgICAgICAgICBzZWNvbmQuIGNwcyBhcmUgdXNlZCByYXRoZXIgdGhh biBicHMgYmVjYXVzZSBoaWdoIHNwZWVkcyBsaWtlCisgICAgICAgICAgMzg0MDAgYXJlIG5vdCBl eHByZXNzaWJsZSBpbiBhIDE2LWJpdCBpbnQgYnV0IGxvbmdzIGNhbm5vdCBiZQorICAgICAgICAg IHVzZWQgYmVjYXVzZSBrZXl3b3JkLXRhYmxlIHZhbHVlcyBhcmUgaW50cyBhbmQgbm90IGxvbmdz LiBJZiB0aGUKKyAgICAgICAgICBhcmd1bWVudCBpcyA3LCB0aGVuIHRoZSBicHMgaXMgNzUsIG5v dCA3MC4gSWYgdGhlIGFyZ3VtZW50IGlzCisgICAgICAgICAgODg4LCB0aGlzIGlzIGEgc3BlY2lh bCBjb2RlIGZvciA3NS8xMjAwIHNwbGl0LXNwZWVkIG9wZXJhdGlvbgorICAgICAgICAgICg3NSBi cHMgb3V0LCAxMjAwIGJwcyBpbikuIFJldHVybnM6CisgICAgICAgICAgIC0xOiBvbiBlcnJvciwg bWVhbmluZyB0aGUgcmVxdWVzdGVkIHNwZWVkIGlzIG5vdCB2YWxpZCBvcgorICAgICAgICAgIGF2 YWlsYWJsZS4KKyAgICAgICAgICA+PTA6IG9uIHN1Y2Nlc3MgKGRvbid0IHRyeSB0byB1c2UgdGhp cyB2YWx1ZSBmb3IgYW55dGhpbmcpLgorCisgICBpbnQKKyAgICAgICAgICB0dHZ0KHNwZWVkLGZs b3cpIGxvbmcgc3BlZWQ7IGludCBmbG93OworICAgICAgICAgIFB1dHMgdGhlIGN1cnJlbnRseSBv cGVuIHR0eSBkZXZpY2UgaW50byB0aGUgYXBwcm9wcmlhdGUgbW9kZXMKKyAgICAgICAgICBmb3Ig dGVybWluYWwgZW11bGF0aW9uLiBUaGUgYXJndW1lbnRzIGFyZSBpbnRlcnByZXRlZCBhcyBpbgor ICAgICAgICAgIHR0cGt0KCkuIFNpZGUgZWZmZWN0czogdHR2dCgpIHN0b3JlcyBpdHMgYXJndW1l bnRzIGluIGdsb2JhbAorICAgICAgICAgIHZhcmlhYmxlcywgYW5kIHNldHMgYSBmbGFnIHRoYXQg aXQgaGFzIGJlZW4gY2FsbGVkIHNvIHRoYXQKKyAgICAgICAgICBzdWJzZXF1ZW50IGNhbGxzIGNh biBiZSBpZ25vcmVkIHNvIGxvbmcgYXMgdGhlIGFyZ3VtZW50cyBhcmUgdGhlCisgICAgICAgICAg c2FtZSBhcyBpbiB0aGUgbGFzdCBlZmZlY3RpdmUgY2FsbC4gT3RoZXIgZnVuY3Rpb25zLCBzdWNo IGFzCisgICAgICAgICAgdHRvcGVuKCksIHR0Y2xvc2UoKSwgdHRyZXMoKSwgdHR2dCgpLCBldGMs IHRoYXQgY2hhbmdlIHRoZSB0dHkKKyAgICAgICAgICBkZXZpY2UgaW4gYW55IHdheSBtdXN0IHVu c2V0IHRoaXMgZmxhZy4gSW4gVU5JWCBLZXJtaXQsIHRoaXMKKyAgICAgICAgICBmbGFnIGlzIGNh bGxlZCB0dnRmbGcuCisKKyAgIGludAorICAgICAgICAgIHR0d21kbShtZG1zaWcsdGltbykgaW50 IG1kbXNpZywgdGltbzsKKyAgICAgICAgICBXYWl0cyB1cCB0byB0aW1vIHNlY29uZHMgZm9yIGFs bCBvZiB0aGUgZ2l2ZW4gbW9kZW0gc2lnbmFscyB0bworICAgICAgICAgIGFwcGVhci4gbWRtc2ln IGlzIGEgYml0IG1hc2ssIGluIHdoaWNoIGEgYml0IGlzIG9uICgxKSBvciBvZmYKKyAgICAgICAg ICAoMCkgYWNjb3JkaW5nIHRvIHdoZXRoZXIgdGhlIGNvcnJlc3BvbmRpbmcgc2lnbmFsIGlzIHRv IGJlCisgICAgICAgICAgd2FpdGVkIGZvci4gVGhlc2Ugc3ltYm9scyBhcmUgZGVmaW5lZCBpbiBj a2NkZWIuaDoKKyAgICAgICAgICAgIEJNX0NUUyAoYml0IDApIG1lYW5zIHdhaXQgZm9yIENsZWFy IFRvIFNlbmQKKyAgICAgICAgICAgIEJNX0RTUiAoYml0IDEpIG1lYW5zIHdhaXQgZm9yIERhdGEg U2V0IFJlYWR5CisgICAgICAgICAgICBCTV9EQ0QgKGJpdCAyKSBtZWFucyB3YWl0IGZvciBDYXJy aWVyIERldGVjdAorICAgICAgICAgIFJldHVybnM6CisgICAgICAgICAgIC0zOiBOb3QgaW1wbGVt ZW50ZWQuCisgICAgICAgICAgIC0yOiBUaGlzIGxpbmUgZG9lcyBub3QgaGF2ZSBtb2RlbSBjb250 cm9sLgorICAgICAgICAgICAtMTogVGltZW91dDogdGltZSBsaW1pdCBleGNlZWRlZCBiZWZvcmUg YWxsIHNpZ25hbHMgd2VyZQorICAgICAgICAgIGRldGVjdGVkLgorICAgICAgICAgICAgMTogU3Vj Y2Vzcy4KKworICAgaW50CisgICAgICAgICAgdHR4aW4obixidWYpIGludCBuOyBDSEFSICpidWY7 CisgICAgICAgICAgUmVhZHMgeCBjaGFyYWN0ZXJzIGZyb20gdGhlIHR0eSBkZXZpY2UgaW50byB0 aGUgc3BlY2lmaWVkIGJ1ZiwKKyAgICAgICAgICBzdHJpcHBpbmcgcGFyaXR5IGlmIHBhcml0eSBp cyBub3Qgbm9uZS4gVGhpcyBjYWxsIHdhaXRzIGZvcmV2ZXIsCisgICAgICAgICAgdGhlcmUgaXMg bm8gdGltZW91dC4gVGhpcyBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byBiZSBjYWxsZWQgb25seQor ICAgICAgICAgIHdoZW4geW91IGtub3cgdGhhdCBhdCBsZWFzdCB4IGNoYXJhY3RlcnMgYXJlIHdh aXRpbmcgdG8gYmUgcmVhZAorICAgICAgICAgIChhcyBkZXRlcm1pbmVkLCBmb3IgZXhhbXBsZSwg YnkgdHRjaGsoKSkuIFRoaXMgZnVuY3Rpb24gc2hvdWxkCisgICAgICAgICAgdXNlIHRoZSBzYW1l IGJ1ZmZlciBhcyB0dGluYygpLgorCisgICBpbnQKKyAgICAgICAgICB0eGJ1ZnIodGltbykgaW50 IHRpbW87CisgICAgICAgICAgUmVhZHMgY2hhcmFjdGVycyBpbnRvIHRoZSBpbnRlcm5hbCBjb21t dW5pY2F0aW9ucyBpbnB1dCBidWZmZXIuCisgICAgICAgICAgdGltbyBpcyBhIHRpbWVvdXQgaW50 ZXJ2YWwsIGluIHNlY29uZHMuIDAgbWVhbnMgbm8gdGltZW91dCwgd2FpdAorICAgICAgICAgIGZv cmV2ZXIuIENhbGxlZCBieSB0dGluYygpIChhbmQgcG9zc2libHkgdHR4aW4oKSBhbmQgdHRpbmwo KSkKKyAgICAgICAgICB3aGVuIHRoZSBjb21tdW5pY2F0aW9ucyBpbnB1dCBidWZmZXIgaXMgZW1w dHkuIFRoZSBidWZmZXIgc2hvdWxkCisgICAgICAgICAgYmUgY2FsbGVkIHR0eGJ1ZltdLCBpdHMg bGVuZ3RoIGlzIGRlZmluZWQgYnkgdGhlIHN5bWJvbCBUWEJVRkwuCisgICAgICAgICAgVGhlIGds b2JhbCB2YXJpYWJsZSB0eGJ1Zm4gaXMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGF2YWlsYWJs ZQorICAgICAgICAgIHRvIGJlIHJlYWQgZnJvbSB0dHhidWZbXSwgYW5kIHR4YnVmcCBpcyB0aGUg aW5kZXggb2YgdGhlIG5leHQKKyAgICAgICAgICBjaGFyYWN0ZXIgdG8gYmUgcmVhZC4gU2hvdWxk IG5vdCBiZSBjYWxsZWQgaWYgdHhidWZuID4gMCwgaW4KKyAgICAgICAgICB3aGljaCBjYXNlIHRo ZSBidWZmZXIgZG9lcyBub3QgbmVlZCByZWZpbGxpbmcuIFRoaXMgcm91dGluZQorICAgICAgICAg IHJldHVybnM6CisgICAgICAgICAgICAtMjogQ29tbXVuaWNhdGlvbnMgZGlzY29ubmVjdAorICAg ICAgICAgICAgLTE6IFRpbWVvdXQKKyAgICAgICAgICA+PTA6IEEgY2hhcmFjdGVyICgwIC0gMjU1 KSBPbiBzdWNjZXNzLCB0aGUgZmlyc3QgY2hhcmFjdGVyIHRoYXQKKyAgICAgICAgICB3YXMgcmVh ZCwgd2l0aCB0aGUgdmFyaWFibGVzIHR4YnVmbiBhbmQgdHhidWZwIHNldCBhcHByb3ByaWF0ZWx5 CisgICAgICAgICAgZm9yIGFueSByZW1haW5pbmcgY2hhcmFjdGVycy4KKyAgICAgICAgICBOT1RF OiBDdXJyZW50bHkgdGhpcyByb3V0aW5lIGlzIHVzZWQgaW50ZXJuYWxseSBvbmx5IGJ5IHRoZSBV TklYCisgICAgICAgICAgYW5kIFZNUyB2ZXJzaW9ucy4gVGhlIGFpbSBpcyB0byBtYWtlIGl0IGF2 YWlsYWJsZSB0byBhbGwKKyAgICAgICAgICB2ZXJzaW9ucyBzbyB0aGVyZSBpcyBvbmUgc2luZ2xl IGNvaGVyZW50IGFuZCBlZmZpY2llbnQgd2F5IG9mCisgICAgICAgICAgcmVhZGluZyBmcm9tIHRo ZSBjb21tdW5pY2F0aW9ucyBkZXZpY2Ugb3IgbmV0d29yay4KKworNC5FLjIuNi4gTWlzY2VsbGFu ZW91cyBzeXN0ZW0tZGVwZW5kZW50IGZ1bmN0aW9ucworCisgICBWT0lECisgICAgICAgICAgenRp bWUocykgY2hhciAqKnM7CisgICAgICAgICAgUmV0dXJucyBhIHBvaW50ZXIsIHMsIHRvIHRoZSBj dXJyZW50IGRhdGUtYW5kLXRpbWUgc3RyaW5nIGluIHMuCisgICAgICAgICAgVGhpcyBzdHJpbmcg bXVzdCBiZSBpbiB0aGUgZml4ZWQtZmllbGQgZm9ybWF0IGFzc29jaWF0ZWQgd2l0aAorICAgICAg ICAgIHRoZSBDIHJ1bnRpbWUgYXNjdGltZSgpIGZ1bmN0aW9uLCBsaWtlOiAiU3VuIFNlcCAxNiAx MzoyMzo0NQorICAgICAgICAgIDE5NzNcbiIgc28gdGhhdCBjYWxsZXJzIG9mIHRoaXMgZnVuY3Rp b24gY2FuIGV4dHJhY3QgdGhlCisgICAgICAgICAgZGlmZmVyZW50IGZpZWxkcy4gVGhlIHBvaW50 ZXIgdmFsdWUgaXMgZmlsbGVkIGluIGJ5IHp0aW1lLCBhbmQKKyAgICAgICAgICB0aGUgZGF0YSBp dCBwb2ludHMgdG8gaXMgbm90IHNhZmUsIHNvIHNob3VsZCBiZSBjb3BpZWQgdG8gYSBzYWZlCisg ICAgICAgICAgcGxhY2UgYmVmb3JlIHVzZS4genRpbWUoKSBoYXMgbm8gcmV0dXJuIHZhbHVlLiBB cyBhIHNpZGUgZWZmZWN0LAorICAgICAgICAgIHRoaXMgcm91dGluZSBjYW4gYWxzbyBmaWxsIGlu IHRoZSBmb2xsb3dpbmcgdHdvIGV4dGVybmFsCisgICAgICAgICAgdmFyaWFibGVzICh3aGljaCBt dXN0IGJlIGRlZmluZWQgaW4gdGhlIHN5c3RlbS1kZXBlbmRlbnQgbW9kdWxlcworICAgICAgICAg IGZvciBlYWNoIHBsYXRmb3JtKToKKyAgICAgICAgICAgIGxvbmcgenR1c2VjOiBGcmFjdGlvbiBv ZiBzZWNvbmRzIG9mIGNsb2NrIHRpbWUsIG1pY3Jvc2Vjb25kcy4KKyAgICAgICAgICAgIGxvbmcg enRtc2VjOiBGcmFjdGlvbiBvZiBzZWNvbmRzIG9mIGNsb2NrIHRpbWUsIG1pbGxpc2Vjb25kcy4K KyAgICAgICAgICBJZiB0aGVzZSB2YXJpYWJsZXMgYXJlIG5vdCBzZXQgYnkgenN0aW1lKCksIHRo ZXkgcmVtYWluIGF0IHRoZWlyCisgICAgICAgICAgaW5pdGlhbCB2YWx1ZSBvZiAtMUwuCisKKyAg IGludAorICAgICAgICAgIGd0aW1lcigpCisgICAgICAgICAgUmV0dXJucyB0aGUgY3VycmVudCB2 YWx1ZSBvZiB0aGUgZWxhcHNlZCB0aW1lIGNvdW50ZXIgaW4gc2Vjb25kcworICAgICAgICAgIChz ZWUgcnRpbWVyKSwgb3IgMCBvbiBhbnkga2luZCBvZiBlcnJvci4KKworICAgI2lmZGVmIEdGVElN RVIKKyAgICAgICAgICBDS0ZMT0FUCisgICAgICAgICAgZ2Z0aW1lcigpCisgICAgICAgICAgUmV0 dXJucyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZWxhcHNlZCB0aW1lIGNvdW50ZXIgaW4KKyAg ICAgICAgICBzZWNvbmRzLCBhcyBhIGZsb2F0aW5nIHBvaW50IG51bWJlciwgY2FwYWJsZSBvZiBy ZXByZXNlbnRpbmcgbm90CisgICAgICAgICAgb25seSB3aG9sZSBzZWNvbmRzLCBidXQgYWxzbyB0 aGUgZnJhY3Rpb25hbCBwYXJ0LCB0byB0aGUKKyAgICAgICAgICBtaWxsaXNlY29uZCBvciBtaWNy b3NlY29uZCBsZXZlbCwgd2hhdGV2ZXIgcHJlY2lzaW9uIGlzCisgICAgICAgICAgYXZhaWxhYmxl LiBSZXF1aXJlcyBhIGZ1bmN0aW9uIHRvIGdldCB0aW1lcyBhdCBzdWJzZWNvbmQKKyAgICAgICAg ICBwcmVjaXNpb24sIGFzIHdlbGwgYXMgZmxvYXRpbmctcG9pbnQgc3VwcG9ydC4gVGhhdCdzIHdo eSBpdCdzCisgICAgICAgICAgI2lmZGVmJ2QuCisKKyAgICNlbmRpZiAvKiBHRlRJTUVSICovCisK KyAgIGludAorICAgICAgICAgIG1zbGVlcChtKSBpbnQgbTsKKyAgICAgICAgICBTbGVlcHMgKHBh dXNlcywgZG9lcyBub3RoaW5nKSBmb3IgbSBtaWxsaXNlY29uZHMgKGEgbWlsbGlzZWNvbmQKKyAg ICAgICAgICBpcyBvbmUgdGhvdXNhbmR0aCBvZiBhIHNlY29uZCkuIFJldHVybnM6CisgICAgICAg ICAgIC0xOiBvbiBmYWlsdXJlLgorICAgICAgICAgICAgMDogb24gc3VjY2Vzcy4KKworICAgVk9J RAorICAgICAgICAgIHJ0aW1lcigpCisgICAgICAgICAgU2V0cyB0aGUgZWxhcHNlZCB0aW1lIGNv dW50ZXIgdG8gemVyby4gSWYgeW91IHdhbnQgdG8gdGltZSBob3cKKyAgICAgICAgICBsb25nIGFu IG9wZXJhdGlvbiB0YWtlcywgY2FsbCBydGltZXIoKSB3aGVuIGl0IHN0YXJ0cyBhbmQgZ3RpbWVy CisgICAgICAgICAgd2hlbiBpdCBlbmRzLiBydGltZXIoKSBoYXMgbm8gcmV0dXJuIHZhbHVlLgor CisgICAjaWZkZWYgR0ZUSU1FUgorICAgICAgICAgIFZPSUQKKyAgICAgICAgICByZnRpbWVyKCkK KyAgICAgICAgICBTZXRzIHRoZSBlbGFwc2VkIHRpbWUgY291bnRlciB0byB6ZXJvLiBJZiB5b3Ug d2FudCB0byB0aW1lIGhvdworICAgICAgICAgIGxvbmcgYW4gb3BlcmF0aW9uIHRha2VzLCBjYWxs IHJmdGltZXIoKSB3aGVuIGl0IHN0YXJ0cyBhbmQKKyAgICAgICAgICBnZnRpbWVyIHdoZW4gaXQg ZW5kcy4gcmZ0aW1lcigpIGhhcyBubyByZXR1cm4gdmFsdWUuIE5vdGU6CisgICAgICAgICAgcmZ0 aW1lcigpIGlzIHRvIGJlIHVzZWQgd2l0aCBnZnRpbWVyKCkgYW5kIHJ0aW1lcigpIGlzIHRvIGJl CisgICAgICAgICAgdXNlZCB3aXRoIGd0aW1lcigpLiBTZWUgdGhlIHJmdGltZXIoKSBkZXNjcmlw dGlvbi4KKworICAgI2VuZGlmIC8qIEdGVElNRVIgKi8KKworICAgaW50CisgICAgICAgICAgc3lz aW5pdCgpCisgICAgICAgICAgRG9lcyB3aGF0ZXZlciBuZWVkcyBkb2luZyB1cG9uIHByb2dyYW0g c3RhcnQuIEluIHBhcnRpY3VsYXIsIGlmCisgICAgICAgICAgdGhlIHByb2dyYW0gaXMgcnVubmlu ZyBpbiBhbnkga2luZCBvZiBwcml2aWxlZ2VkIG1vZGUsIHR1cm5zIG9mZgorICAgICAgICAgIHRo ZSBwcml2aWxlZ2VzIChzZWUgcHJpdl9pbmkoKSkuIFJldHVybnM6CisgICAgICAgICAgIC0xOiBv biBlcnJvci4KKyAgICAgICAgICAgIDA6IG9uIHN1Y2Nlc3MuCisKKyAgIGludAorICAgICAgICAg IHN5c2NsZWFudXAoKQorICAgICAgICAgIERvZXMgd2hhdGV2ZXIgbmVlZHMgZG9pbmcgdXBvbiBw cm9ncmFtIGV4aXQuIFJldHVybnM6CisgICAgICAgICAgIC0xOiBvbiBlcnJvci4KKyAgICAgICAg ICAgIDA6IG9uIHN1Y2Nlc3MuCisKKyAgIGludAorICAgICAgICAgIHBzdXNwZW5kKCkKKyAgICAg ICAgICBTdXNwZW5kcyB0aGUgS2VybWl0IHByb2Nlc3MsIHB1dHMgaXQgaW4gdGhlIGJhY2tncm91 bmQgc28gaXQgY2FuCisgICAgICAgICAgYmUgY29udGludWVkICgiZm9yZWdyb3VuZGVkIikgbGF0 ZXIuIFJldHVybnM6CisgICAgICAgICAgIC0xOiBpZiB0aGlzIGZ1bmN0aW9uIGlzIG5vdCBzdXBw b3J0ZWQuCisgICAgICAgICAgICAwOiBvbiBzdWNjZXNzLgorCisgICBbIFsxMzZdQ29udGVudHMg XSBbIFsxMzddQy1LZXJtaXQgXSBbIFsxMzhdS2VybWl0IEhvbWUgXQorCis0LkYuIEdyb3VwIEY6 IE5ldHdvcmsgU3VwcG9ydAorCisgICBBcyBvZiB2ZXJzaW9uIDVBLCBDLUtlcm1pdCBpbmNsdWRl cyBzdXBwb3J0IGZvciBzZXZlcmFsIG5ldHdvcmtzLgorICAgT3JpZ2luYWxseSwgdGhpcyB3YXMg anVzdCB3b3JrZWQgaW50byB0aGUgdHRvcGVuKCksIHR0Y2xvcygpLCB0dGluYygpLAorICAgdHRp bmwoKSwgYW5kIHNpbWlsYXIgcm91dGluZXMgaW4gWzEzOV1ja3V0aW8uYy4gQnV0IHRoaXMgbWFk ZSBpdAorICAgaW1wb3NzaWJsZSB0byBzaGFyZSB0aGlzIGNvZGUgd2l0aCBub24tVU5JWCB2ZXJz aW9ucywgbGlrZSBWTVMsIEFPUy9WUywKKyAgIE9TLzIsIGV0Yy4gU28gYXMgb2YgZWRpdCAxNjgs IG5ldHdvcmsgY29kZSBoYXMgYmVlbiBzZXBhcmF0ZWQgb3V0IGludG8KKyAgIGl0cyBvd24gbW9k dWxlIGFuZCBoZWFkZXIgZmlsZSwgY2tjbmV0LmMgYW5kIGNrY25ldC5oOgorCisgICAgIFsxNDBd Y2tjbmV0Lmg6IE5ldHdvcmstcmVsYXRlZCBzeW1ib2wgZGVmaW5pdGlvbnMuCisgICAgIFsxNDFd Y2tjbmV0LmM6IE5ldHdvcmsgaS9vIChUQ1AvSVAsIFguMjUsIGV0YyksIHNoYXJlZCBieSBtb3N0 CisgICBwbGF0Zm9ybXMuCisgICAgIFsxNDJdY2tsbmV0LmM6IE5ldHdvcmsgaS9vIChUQ1AvSVAs IFguMjUsIGV0Yykgc3BlY2lmaWMgdG8gU3RyYXR1cworICAgVk9TLgorCisgICBUaGUgcm91dGlu ZXMgYW5kIHZhcmlhYmxlcyBpbiB0aGVzZSBtb2R1bGVzIGZhbGwgaW50byB0d28gY2F0ZWdvcmll czoKKworICAgIDEuIFN1cHBvcnQgZm9yIHNwZWNpZmljIG5ldHdvcmsgcGFja2FnZXMgbGlrZSBT dW5MaW5rIFguMjUgYW5kIFRHVgorICAgICAgIE11bHRpTmV0LCBhbmQ6CisgICAgMi4gc3VwcG9y dCBmb3Igc3BlY2lmaWMgbmV0d29yayB2aXJ0dWFsIHRlcm1pbmFsIHByb3RvY29scyBsaWtlIEND SVRUCisgICAgICAgWC4zIGFuZCBUQ1AvSVAgVGVsbmV0LgorCisgICBDYXRlZ29yeSAoMSkgZnVu Y3Rpb25zIGFyZSBhbmFsb2dzIHRvIHRoZSB0dCooKSBmdW5jdGlvbnMsIGFuZCBoYXZlCisgICBu YW1lcyBsaWtlIG5ldG9wZW4sIG5ldGNsb3MsIG5ldHRpbmMsIGV0Yy4gR3JvdXAgQS1EIG1vZHVs ZXMgZG8gbm90CisgICAoYW5kIG11c3Qgbm90KSBrbm93IGFueXRoaW5nIGFib3V0IHRoZXNlIGZ1 bmN0aW9ucyAtLSB0aGV5IGNvbnRpbnVlIHRvCisgICBjYWxsIHRoZSBvbGQgR3JvdXAgRSBmdW5j dGlvbnMgKHR0b3BlbiwgdHRpbmMsIGV0YykuIENhdGVnb3J5ICgyKQorICAgZnVuY3Rpb25zIGFy ZSBwcm90b2NvbCBzcGVjaWZpYyBhbmQgaGF2ZSBuYW1lcyBwcmVmaXhlZCBieSBhIHByb3RvY29s CisgICBpZGVudGlmaWVyLCBsaWtlIHRuIGZvciB0ZWxuZXQgeDI1IGZvciBYLjI1LgorCisgICBj a2NuZXQuaCBjb250YWlucyBwcm90b3R5cGVzIGZvciBhbGwgdGhlc2UgZnVuY3Rpb25zLCBhcyB3 ZWxsIGFzIHN5bWJvbAorICAgZGVmaW5pdGlvbnMgZm9yIG5ldHdvcmsgdHlwZXMsIHByb3RvY29s cywgYW5kIG5ldHdvcmstIGFuZCBwcm90b2NvbC0KKyAgIHNwZWNpZmljIHN5bWJvbHMsIGFzIHdl bGwgYXMgI2luY2x1ZGVzIGZvciB0aGUgaGVhZGVyIGZpbGVzIG5lY2Vzc2FyeQorICAgZm9yIGVh Y2ggbmV0d29yayBhbmQgcHJvdG9jb2wuCisKKyAgIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFy ZSB0byBiZSBwcm92aWRlZCBmb3IgbmV0d29ya3MgdGhhdCBkbyBub3QgdXNlCisgICBub3JtYWwg c3lzdGVtIGkvbyAob3BlbiwgcmVhZCwgd3JpdGUsIGNsb3NlKToKKworICAgaW50CisgICAgICAg ICAgbmV0b3BlbigpCisgICAgICAgICAgVG8gYmUgY2FsbGVkIGZyb20gd2l0aGluIHR0b3Blbigp IHdoZW4gYSBuZXR3b3JrIGNvbm5lY3Rpb24gaXMKKyAgICAgICAgICByZXF1ZXN0ZWQuIENhbGxp bmcgY29udmVudGlvbnMgYW5kIHB1cnBvc2Ugc2FtZSBhcyBHcm91cCBFCisgICAgICAgICAgdHRv cGVuKCkuCisKKyAgIGludAorICAgICAgICAgIG5ldGNsb3MoKQorICAgICAgICAgIFRvIGJlIGNh bGxlZCBmcm9tIHdpdGhpbiB0dGNsb3MoKSB3aGVuIGEgbmV0d29yayBjb25uZWN0aW9uIGlzCisg ICAgICAgICAgYmVpbmcgY2xvc2VkLiBDYWxsaW5nIGNvbnZlbnRpb25zIGFuZCBwdXJwb3NlIHNh bWUgYXMgR3JvdXAgRQorICAgICAgICAgIHR0Y2xvcygpLgorCisgICBpbnQKKyAgICAgICAgICBu ZXR0Y2hrKCkKKyAgICAgICAgICBUbyBiZSBjYWxsZWQgZnJvbSB3aXRoaW4gdHRjaGsoKS4gQ2Fs bGluZyBjb252ZW50aW9ucyBhbmQKKyAgICAgICAgICBwdXJwb3NlIHNhbWUgYXMgR3JvdXAgRSB0 dGNoaygpLgorCisgICBpbnQKKyAgICAgICAgICBuZXRmbHVpKCkKKyAgICAgICAgICBUbyBiZSBj YWxsZWQgZnJvbSB3aXRoaW4gdHRmbHVpKCkuIENhbGxpbmcgY29udmVudGlvbnMgYW5kCisgICAg ICAgICAgcHVycG9zZSBzYW1lIGFzIEdyb3VwIEUgdHRmbHVpKCkuCisKKyAgIGludAorICAgICAg ICAgIG5ldGJyZWFrKCkKKyAgICAgICAgICBUbyBzZW5kIGEgbmV0d29yayBicmVhayAoYXR0ZW50 aW9uKSBzaWduYWwuIENhbGxpbmcgY29udmVudGlvbnMKKyAgICAgICAgICBhbmQgcHVycG9zZSBz YW1lIGFzIEdyb3VwIEUgdHRzbmRicmsoKS4KKworICAgaW50CisgICAgICAgICAgbmV0aW5jKCkK KyAgICAgICAgICBUbyBnZXQgYSBjaGFyYWN0ZXIgZnJvbSB0aGUgbmV0d29yay4gQ2FsbGluZyBj b252ZW50aW9ucyBzYW1lIGFzCisgICAgICAgICAgR3JvdXAgRSB0dHNuZGJyaygpLgorCisgICBp bnQKKyAgICAgICAgICBuZXR0b2MoKQorICAgICAgICAgIFNlbmQgYSAiY2hhcmFjdGVyIiAoYnl0 ZSkgdG8gdGhlIG5ldHdvcmsuIENhbGxpbmcgY29udmVudGlvbnMKKyAgICAgICAgICBzYW1lIGFz IEdyb3VwIEUgdHRvYygpLgorCisgICBpbnQKKyAgICAgICAgICBuZXR0b2woKQorICAgICAgICAg IFNlbmQgYSAibGluZSIgKHNlcXVlbmNlIG9mIGJ5dGVzKSB0byB0aGUgbmV0d29yay4gQ2FsbGlu ZworICAgICAgICAgIGNvbnZlbnRpb25zIHNhbWUgYXMgR3JvdXAgRSB0dG9sKCkuCisKKyAgIENv bmNlaXZhYmx5LCBzb21lIHN5c3RlbXMgc3VwcG9ydCBuZXR3b3JrIGNvbm5lY3Rpb25zIHNpbXBs eSBieSBsZXR0aW5nCisgICB5b3Ugb3BlbiBhIGRldmljZSBvZiBhIGNlcnRhaW4gbmFtZSBhbmQg bGV0dGluZyB5b3UgZG8gaS9vIHRvIGl0LgorICAgT3RoZXJzIChsaWtlIHRoZSBCZXJrZWxleSBz b2NrZXRzIFRDUC9JUCBsaWJyYXJ5IG9uIFVOSVgpIHJlcXVpcmUgeW91CisgICB0byBvcGVuIHRo ZSBjb25uZWN0aW9uIGluIGEgc3BlY2lhbCB3YXksIGJ1dCB0aGVuIGRvIG5vcm1hbCBpL28gKHJl YWQsCisgICB3cml0ZSkuIEluIHN1Y2ggYSBjYXNlLCB5b3Ugd291bGQgdXNlIG5ldG9wZW4oKSwg YnV0IHlvdSB3b3VsZCBub3QgdXNlCisgICBuZXR0aW5jLCBuZXR0b2MsIGV0Yy4KKworICAgVk1T IFRDUC9JUCBwcm9kdWN0cyBoYXZlIHRoZWlyIG93biBzZXQgb2YgZnVuY3Rpb25zIGZvciBhbGwg bmV0d29yaworICAgb3BlcmF0aW9ucywgc28gaW4gdGhhdCBjYXNlIHRoZSBmdWxsIHJhbmdlIG9m IG5ldHh4eCgpIGZ1bmN0aW9ucyBpcworICAgdXNlZC4KKworICAgVGhlIHRlY2huaXF1ZSBpcyB0 byBwdXQgYSB0ZXN0IGluIGVhY2ggY29ycmVzcG9uZGluZyB0dHh4eCgpIGZ1bmN0aW9uCisgICB0 byBzZWUgaWYgYSBuZXR3b3JrIGNvbm5lY3Rpb24gaXMgYWN0aXZlIChvciBpcyBiZWluZyByZXF1 ZXN0ZWQpLCB0ZXN0CisgICBmb3Igd2hpY2gga2luZCBvZiBuZXR3b3JrIGl0IGlzLCBhbmQgaWYg bmVjZXNzYXJ5IHJvdXRlIHRoZSBjYWxsIHRvIHRoZQorICAgY29ycmVzcG9uZGluZyBuZXR4eHgo KSBmdW5jdGlvbi4gVGhlIG5ldHh4eCgpIGZ1bmN0aW9uIG11c3QgYWxzbworICAgY29udGFpbiBj b2RlIHRvIHRlc3QgZm9yIHRoZSBuZXR3b3JrIHR5cGUsIHdoaWNoIGlzIGF2YWlsYWJsZSB2aWEg dGhlCisgICBnbG9iYWwgdmFyaWFibGUgdHRuZXQuCisKKyAgIFsgWzE0M11Db250ZW50cyBdIFsg WzE0NF1DLUtlcm1pdCBdIFsgWzE0NV1LZXJtaXQgSG9tZSBdCisKKzQuRi4xLiBUZWxuZXQgUHJv dG9jb2wKKworICAgKFRoaXMgc2VjdGlvbiBuZWVkcyBhIGdyZWF0IGRlYWwgb2YgdXBkYXRpbmcu Li4pCisKKyAgIEFzIG9mIGVkaXQgMTk1LCBUZWxuZXQgcHJvdG9jb2wgaXMgc3BsaXQgb3V0IGlu dG8gaXRzIG93biBmaWxlcywgc2luY2UKKyAgIGl0IGNhbiBiZSBpbXBsZW1lbnRlZCBpbiByZW1v dGUgbW9kZSwgd2hpY2ggZG9lcyBub3QgaGF2ZSBhIG5ldHdvcmsKKyAgIGNvbm5lY3Rpb246CisK KyAgICAgIFsxNDZdY2tjdGVsLmg6IFRlbG5ldCBwcm90b2NvbCBzeW1ib2wgZGVmaW5pdGlvbnMu CisgICAgICBbMTQ3XWNrY3RlbC5jOiBUZWxuZXQgcHJvdG9jb2wuCisKKyAgIFRoZSBUZWxuZXQg cHJvdG9jb2wgaXMgc3VwcG9ydGVkIGJ5IHRoZSBmb2xsb3dpbmcgdmFyaWFibGVzIGFuZAorICAg cm91dGluZXM6CisKKyAgIGludCB0bl9pbml0CisgICAgICAgICAgTm9uemVybyBpZiB0ZWxuZXQg cHJvdG9jb2wgaW5pdGlhbGl6ZWQsIHplcm8gb3RoZXJ3aXNlLgorCisgICBpbnQKKyAgICAgICAg ICB0bl9pbml0KCkKKyAgICAgICAgICBJbml0aWFsaXplIHRoZSB0ZWxuZXQgcHJvdG9jb2wgKHNl bmQgaW5pdGlhbCBvcHRpb25zKS4KKworICAgaW50CisgICAgICAgICAgdG5fc29wdCgpCisgICAg ICAgICAgU2VuZCBhIHRlbG5ldCBvcHRpb24uCisKKyAgIGludAorICAgICAgICAgIHRuX2Rvb3Ao KQorICAgICAgICAgIFJlY2VpdmUgYW5kIGFjdCBvbiBhIHRlbG5ldCBvcHRpb24gZnJvbSB0aGUg cmVtb3RlLgorCisgICBpbnQKKyAgICAgICAgICB0bl9zdHR5cCgpCisgICAgICAgICAgU2VuZCB0 ZXJtaW5hbCB0eXBlIHVzaW5nIHRlbG5ldCBwcm90b2NvbC4KKworNC5GLjIuIEZUUCBQcm90b2Nv bAorCisgICAoVG8gYmUgZmlsbGVkIGluLi4uKSBTZWUgdGhlIFsxNDhdc291cmNlIGZpbGUKKwor NC5GLjMuIEhUVFAgUHJvdG9jb2wKKworICAgKFRvIGJlIGZpbGxlZCBpbi4uLikKKworNC5GLjQu IFguMjUgTmV0d29ya3MKKworICAgVGhlc2Ugcm91dGluZXMgd2VyZSB3cml0dGVuIFN1bkxpbmsg WC4yNSBhbmQgaGF2ZSBzaW5jZSBiZWVuIGFkYXB0ZWQgdG8KKyAgIGF0IGxlYXN0IG9uIG9uZSBv dGhlcjogSUJNIEFJWExpbmsvWC4yNS4KKworICAgaW50CisgICAgICAgICAgeDI1ZGlhZygpCisg ICAgICAgICAgUmVhZHMgYW5kIHByaW50cyBYLjI1IGRpYWdub3N0aWNzCisKKyAgIGludAorICAg ICAgICAgIHgyNW9vYmgoKQorICAgICAgICAgIFguMjUgb3V0IG9mIGJhbmQgc2lnbmFsIGhhbmRs ZXIKKworICAgaW50CisgICAgICAgICAgeDI1aW50cigpCisgICAgICAgICAgU2VuZHMgWC4yNSBp bnRlcnJ1cHQgcGFja2V0CisKKyAgIGludAorICAgICAgICAgIHgyNXJlc2V0KCkKKyAgICAgICAg ICBSZXNldHMgWC4yNSB2aXJ0dWFsIGNpcmN1aXQKKworICAgaW50CisgICAgICAgICAgeDI1Y2xl YXIoKQorICAgICAgICAgIENsZWFyIFguMjUgdmlydHVhbCBjaXJjdWl0CisKKyAgIGludAorICAg ICAgICAgIHgyNXN0YXQoKQorICAgICAgICAgIFguMjUgc3RhdHVzCisKKyAgIGludAorICAgICAg ICAgIHNldHFiaXQoKQorICAgICAgICAgIFNldHMgWC4yNSBRLWJpdAorCisgICBpbnQKKyAgICAg ICAgICByZXNldHFiaXQoKQorICAgICAgICAgIFJlc2V0cyBYLjI1IFEtYml0CisKKyAgIGludAor ICAgICAgICAgIHgyNXhpbigpCisgICAgICAgICAgUmVhZHMgbiBjaGFyYWN0ZXJzIGZyb20gWC4y NSBjaXJjdWl0LgorCisgICBpbnQKKyAgICAgICAgICB4MjVpbmwoKQorICAgICAgICAgIFJlYWQg YSBLZXJtaXQgcGFja2V0IGZyb20gWC4yNSBjaXJjdWl0LgorCisgICBbIFsxNDldQ29udGVudHMg XSBbIFsxNTBdQy1LZXJtaXQgXSBbIFsxNTFdS2VybWl0IEhvbWUgXQorCis0LkYuNS4gQWRkaW5n IE5ldyBOZXR3b3JrIFR5cGVzCisKKyAgIEV4YW1wbGU6IEFkZGluZyBzdXBwb3J0IGZvciBJQk0g WC4yNSBhbmQgSGV3bGV0dCBQYWNrYXJkIFguMjUuIEZpcnN0LAorICAgYWRkIG5ldyBuZXR3b3Jr IHR5cGUgc3ltYm9scyBmb3IgZWFjaCBvbmUuIFRoZXJlIGFyZSBhbHJlYWR5IHNvbWUKKyAgIG5l dHdvcmsgdHlwZXMgZGVmaW5lZCBmb3Igb3RoZXIgWC4yNSBwYWNrYWdlczoKKworICBORVRfU1gy NSBpcyB0aGUgbmV0d29yay10eXBlIElEIGZvciBTdW5MaW5rIFguMjUuCisgIE5FVF9WWDI1IGlz IHRoZSBuZXR3b3JrLXR5cGUgSUQgZm9yIFZPUyBYLjI1LgorCisgICBTbyBmaXJzdCB5b3Ugc2hv dWxkIG5ldyBzeW1ib2xzIGZvciB0aGUgbmV3IG5ldHdvcmsgdHlwZXMsIGdpdmluZyB0aGVtCisg ICB0aGUgbmV4dCBudW1iZXJzIGluIHRoZSBzZXF1ZW5jZSwgZS5nLjoKKworI2RlZmluZSBORVRf SFgyNSAxMSAgICAgICAgICAgICAgICAgICAgIC8qIEhld2xldHQtUGFja2FyZCBYLjI1ICovCisj ZGVmaW5lIE5FVF9JWDI1IDEyICAgICAgICAgICAgICAgICAgICAgLyogSUJNIFguMjUgKi8KKwor ICAgVGhpcyBpcyBpbiBja2NuZXQuaC4KKworICAgVGhlbiB3ZSBuZWVkIHN5bWJvbHMgdG8gc2F5 IHRoYXQgd2UgYXJlIGFjdHVhbGx5IGNvbXBpbGluZyBpbiB0aGUgY29kZQorICAgZm9yIHRoZXNl IHBsYXRmb3Jtcy4gVGhlc2Ugd291bGQgYmUgZGVmaW5lZCBvbiB0aGUgY2MgY29tbWFuZCBsaW5l OgorCisgIC1ESUJNWDI1ICAoZm9yIElCTSkKKyAgLURIUFgyNSAgIChmb3IgSFApCisKKyAgIFNv IHdlIGNhbiBidWlsZCBDLUtlcm1pdCB2ZXJzaW9ucyBmb3IgQUlYIGFuZCBIUC1VWCBib3RoIHdp dGggYW5kCisgICB3aXRob3V0IFguMjUgc3VwcG9ydCAoc2luY2Ugbm90IGFsbCBBSVggYW5kIElC TSBzeXN0ZW1zIGhhdmUgdGhlIG5lZWRlZAorICAgbGlicmFyaWVzLCBhbmQgc28gYW4gZXhlY3V0 YWJsZSB0aGF0IHdhcyBsaW5rZWQgd2l0aCB0aGVtIG1pZ2h0IG5vCisgICBsb2FkKS4KKworICAg VGhlbiBpbiBja2NuZXQuaDoKKworI2lmZGVmIElCTVgyNQorI2RlZmluZSBBTllYMjUKKyNlbmRp ZiAvKiBJQk1YMjUgKi8KKworI2lmZGVmIEhQWDI1CisjZGVmaW5lIEFOWVgyNQorI2VuZGlmIC8q IEhQWDI1ICovCisKKyAgIEFuZCB0aGVuIHVzZSBBTllYMjUgZm9yIGNvZGUgdGhhdCBpcyBjb21t b24gdG8gYWxsIG9mIHRoZW0sIGFuZCBJQk1YMjUKKyAgIG9yIEhQWDI1IGZvciBjb2RlIHNwZWNp ZmljIHRvIElCTSBvciBIUC4KKworICAgSXQgbWlnaHQgYWxzbyBoYXBwZW4gdGhhdCBzb21lIGNv ZGUgY2FuIGJlIHNoYXJlZCBiZXR3ZWVuIHR3byBvciBtb3JlCisgICBvZiB0aGVzZSwgYnV0IG5v dCB0aGUgb3RoZXJzLiBTdXBwb3NlLCBmb3IgZXhhbXBsZSwgdGhhdCB5b3Ugd3JpdGUgY29kZQor ICAgdGhhdCBhcHBsaWVzIHRvIGJvdGggSUJNIGFuZCBIUCwgYnV0IG5vdCBTdW4gb3IgVk9TIFgu MjUuIFRoZW4geW91IGFkZAorICAgdGhlIGZvbGxvd2luZyBkZWZpbml0aW9uIHRvIGNrY25ldC5o OgorCisjaWZuZGVmIEhQT1JJQk1YMjUKKyNpZmRlZiBIUFgyNQorI2RlZmluZSBIUE9SSUJNWDI1 CisjZWxzZQorI2lmZGVmIElCTVgyNQorI2RlZmluZSBIUE9SSUJNWDI1CisjZW5kaWYgLyogSUJN WDI1ICovCisjZW5kaWYgLyogSFBYMjUgKi8KKyNlbmRpZiAvKiBIUE9SSUJNWDI1ICovCisKKyAg IFlvdSBjYW4gTk9UIHVzZSBjb25zdHJ1Y3Rpb25zIGxpa2UgIiNpZiBkZWZpbmVkIChIUFgyNSB8 fCBJQk1YMjUpIjsKKyAgIHRoZXkgYXJlIG5vdCBwb3J0YWJsZS4KKworICAgWyBbMTUyXUNvbnRl bnRzIF0gWyBbMTUzXUMtS2VybWl0IF0gWyBbMTU0XUtlcm1pdCBIb21lIF0KKworNC5HLiBHcm91 cCBHOiBGb3JtYXR0ZWQgU2NyZWVuIFN1cHBvcnQKKworICAgU28gZmFyLCB0aGlzIGlzIHVzZWQg b25seSBmb3IgdGhlIGZ1bGxzY3JlZW4gbG9jYWwtbW9kZSBmaWxlIHRyYW5zZmVyCisgICBkaXNw bGF5LiBJbiB0aGUgZnV0dXJlLCBpdCBtaWdodCBiZSBleHRlbmRlZCB0byBvdGhlciB1c2VzLiBU aGUKKyAgIGZ1bGxzY3JlZW4gZGlzcGxheSBjb2RlIGlzIGluIGFuZCBhcm91bmQgdGhlIHJvdXRp bmUgc2NyZWVuYygpIGluCisgICBbMTU1XWNrdXVzeC5jLgorCisgICBJbiB0aGUgVU5JWCB2ZXJz aW9uLCB3ZSB1c2UgdGhlIGN1cnNlcyBsaWJyYXJ5LCBwbHVzIG9uZSBjYWxsIGZyb20gdGhlCisg ICB0ZXJtY2FwIGxpYnJhcnkuIEluIG90aGVyIHZlcnNpb25zIChPUy8yLCBWTVMsIGV0Yykgd2Ug aW5zZXJ0IGR1bW15CisgICByb3V0aW5lcyB0aGF0IGhhdmUgdGhlIHNhbWUgbmFtZXMgYXMgY3Vy c2VzIHJvdXRpbmVzLiBTbyBmYXIsIHRoZXJlIGFyZQorICAgdHdvIG1ldGhvZHMgZm9yIHNpbXVs YXRpbmcgY3Vyc2VzIHJvdXRpbmVzOgorCisgICAgMS4gSW4gVk1TLCB3ZSB1c2UgdGhlIFNjcmVl biBNYW5hZ2VtZW50IExpYnJhcnkgKFNNRyksIGFuZCBpbnNlcnQKKyAgICAgICBzdHVicyB0byBj b252ZXJ0IGN1cnNlcyBjYWxscyBpbnRvIFNNRyBjYWxscy4KKyAgICAyLiBJbiBPUy8yLCB3ZSB1 c2UgdGhlIE1ZQ1VSU0VTIGNvZGUsIGluIHdoaWNoIHRoZSBzdHViIHJvdXRpbmVzCisgICAgICAg YWN0dWFsbHkgZW1pdCB0aGUgYXBwcm9wcmlhdGUgZXNjYXBlIHNlcXVlbmNlcyB0aGVtc2VsdmVz LgorCisgICBIZXJlIGFyZSB0aGUgc3R1YiByb3V0aW5lczoKKworICAgaW50CisgICAgICAgICAg dGdldGVudChjaGFyICpidWYsIGNoYXIgKnRlcm0pCisgICAgICAgICAgQXJndW1lbnRzIGFyZSBp Z25vcmVkLiBSZXR1cm5zIDEgaWYgdGhlIHVzZXIgaGFzIGEgc3VwcG9ydGVkCisgICAgICAgICAg dGVybWluYWwgdHlwZSwgMCBvdGhlcndpc2UuIFNldHMgYSBnbG9iYWwgdmFyaWFibGUgKGZvciBl eGFtcGxlLAorICAgICAgICAgICJpc3Z0NTIiIG9yICJpc2Rhc2hlciIpIHRvIGluZGljYXRlIHRo ZSB0ZXJtaW5hbCB0eXBlLgorCisgICBWT0lECisgICAgICAgICAgbW92ZShpbnQgcm93LCBpbnQg Y29sKQorICAgICAgICAgIFNlbmRzIHRoZSBlc2NhcGUgc2VxdWVuY2UgdG8gcG9zaXRpb24gdGhl IGN1cnNvciBhdCB0aGUKKyAgICAgICAgICBpbmRpY2F0ZWQgcm93IGFuZCBjb2x1bW4uIFRoZSBu dW1iZXJzIGFyZSAwLWJhc2VkLCBlLmcuIHRoZSBob21lCisgICAgICAgICAgcG9zaXRpb24gaXMg MCwwLgorCisgICBpbnQKKyAgICAgICAgICBjbGVhcigpCisgICAgICAgICAgU2VuZHMgdGhlIGVz Y2FwZSBzZXF1ZW5jZSB0byBjbGVhciB0aGUgc2NyZWVuLgorCisgICBpbnQKKyAgICAgICAgICBj bHJ0b2VvbCgpCisgICAgICAgICAgU2VuZHMgdGhlIGVzY2FwZSBzZXF1ZW5jZSB0byBjbGVhciBm cm9tIHRoZSBjdXJyZW50IGN1cnNvcgorICAgICAgICAgIHBvc2l0aW9uIHRvIHRoZSBlbmQgb2Yg dGhlIGxpbmUuCisKKyAgIEluIHRoZSBNWUNVUlNFUyBjYXNlLCBjb2RlIG11c3QgYmUgYWRkZWQg dG8gZWFjaCBvZiB0aGUgbGFzdCB0aHJlZQorICAgcm91dGluZXMgdG8gZW1pdCB0aGUgYXBwcm9w cmlhdGUgZXNjYXBlIHNlcXVlbmNlcyBmb3IgYSBuZXcgdGVybWluYWwKKyAgIHR5cGUuCisKKyAg IGNsZWFyb2soY3Vyc2NyKSwgd3JlZnJlc2goKQorICAgICAgICAgIEluIHJlYWwgY3Vyc2VzLCB0 aGVzZSB0d28gY2FsbHMgYXJlIHJlcXVpcmVkIHRvIHJlZnJlc2ggdGhlCisgICAgICAgICAgc2Ny ZWVuLCBmb3IgZXhhbXBsZSBhZnRlciBpdCB3YXMgZnJhY3R1cmVkIGJ5IGEgYnJvYWRjYXN0Cisg ICAgICAgICAgbWVzc2FnZS4gVGhlc2UgYXJlIHVzZWZ1bCBvbmx5IGlmIHRoZSB1bmRlcmx5aW5n IHNjcmVlbgorICAgICAgICAgIG1hbmFnZW1lbnQgc2VydmljZSBrZWVwcyBhIGNvcHkgb2YgdGhl IGVudGlyZSBzY3JlZW4sIGFzIGN1cnNlcworICAgICAgICAgIGFuZCBTTUcgZG8uIEMtS2VybWl0 IGRvZXMgbm90IGRvIHRoaXMgaXRzZWxmLgorCisgICBbIFsxNTZdQ29udGVudHMgXSBbIFsxNTdd Qy1LZXJtaXQgXSBbIFsxNThdS2VybWl0IEhvbWUgXQorCis0LkguIEdyb3VwIEg6IFBzZXVkb3Rl cm1pbmFsIFN1cHBvcnQKKworICAgKFRvIGJlIGZpbGxlZCBpbi4uLikgQnV0IHNlZTogWzE1OV10 aGVzZSBjb21tZW50cywgYW5kIHRoZSBzb3VyY2UgZmlsZXMKKyAgIFsxNjBdY2t1cHR5LmggYW5k IFsxNjFdY2t1cHR5LmMuCisKKzQuSS4gR3JvdXAgSTogU2VjdXJpdHkKKworICAgKFRvIGJlIGZp bGxlZCBpbi4uLikgTWVhbndoaWxlLCBzZWUgWzE2Ml1zZWN1cml0eS5odG1sLgorCisgICBbIFsx NjNdQ29udGVudHMgXSBbIFsxNjRdQy1LZXJtaXQgXSBbIFsxNjVdS2VybWl0IEhvbWUgXQorCitB UFBFTkRJWCBJLiBGSUxFIFBFUk1JU1NJT05TCisKK0kuMS4gRm9ybWF0IG9mIFN5c3RlbS1EZXBl bmRlbnQgRmlsZSBQZXJtaXNzaW9ucyBpbiBBLVBhY2tldHMKKworICAgVGhlIGZvcm1hdCBvZiB0 aGlzIGZpZWxkICh0aGUgIiwiIGF0dHJpYnV0ZSkgaXMgaW50ZXJwcmV0ZWQgYWNjb3JkaW5nCisg ICB0byB0aGUgU3lzdGVtIElEICgiLiIgQXR0cmlidXRlKS4KKworICAgRm9yIFVOSVggKFN5c3Rl bSBJRCA9IFUxKSwgaXQncyB0aGUgZmFtaWxpYXIgMy1kaWdpdCBvY3RhbCBudW1iZXIsIHRoZQor ICAgbG93LW9yZGVyIDkgYml0cyBvZiB0aGUgZmlsZW1vZGU6IE93bmVyLCBHcm91cCwgV29ybGQs IGUuZy4gNjYwID0KKyAgIHJlYWQvd3JpdGUgYWNjZXNzIGZvciBvd25lciBhbmQgZ3JvdXAsIG5v bmUgZm9yIHdvcmxkLCByZWNvcmRlZCBhcyBhCisgICAzLWRpZ2l0IG9jdGFsIHN0cmluZy4gSGln aC1vcmRlciBVTklYIHBlcm1pc3Npb24gYml0cyBhcmUgbm90CisgICB0cmFuc21pdHRlZC4KKwor ICAgRm9yIFZNUyAoU3lzdGVtIElEID0gRDcpLCBpdCdzIGEgNC1kaWdpdCBoZXggc3RyaW5nLCBy ZXByZXNlbnRpbmcgdGhlCisgICAxNi1iaXQgZmlsZSBwcm90ZWN0aW9uIFdHT1MgZmllbGRzIChX b3JsZCxHcm91cCxPd25lcixTeXN0ZW0pLCBpbiB0aGF0CisgICBvcmRlciAod2hpY2ggaXMgdGhl IHJldmVyc2Ugb2YgaG93IHRoZXkncmUgc2hvd24gaW4gYSBkaXJlY3RvcnkKKyAgIGxpc3Rpbmcp OyBpbiBlYWNoIGZpZWxkLCBCaXQgMCA9IFJlYWQsIDEgPSBXcml0ZSwgMiA9IEV4ZWN1dGUsIDMg PQorICAgRGVsZXRlLiBBIGJpdCB2YWx1ZSBvZiAwIG1lYW5zIHBlcm1pc3Npb24gaXMgZ3JhbnRl ZCwgMSBtZWFucworICAgcGVybWlzc2lvbiBpcyBkZW5pZWQuIFNhbXBsZToKKworICByLTAxLTAw LV5BLyFGV0VSTUlULkVYRSciCisgIHMtMDEtMDAtXkFFIVkvYW1kL3dhdHN1bi93L2ZkYy9uZXcv d2VybWl0LmV4ZS5EVgorICByLTAyLTAxLV5BXSJBLiJENyIiQjgjMTE5OTgwMTAxIDE4OjE0OjA1 ISM4NTMxJjg3Mjk2MCwkQTIwQi0hNygjNTEyQCAjLlkKKyAgcy0wMi0wMS1eQSUiWS41IQorCisg ICBBIFZNUyBkaXJlY3RvcnkgbGlzdGluZyBzaG93cyB0aGUgZmlsZSdzIHByb3RlY3Rpb24gYXMg KEUsUldFRCxSRUQsUkUpCisgICB3aGljaCByZWFsbHkgbWVhbnMgKFM9RSxPPVJXRUQsRz1SRUQs Vz1SRSksIHdoaWNoIGlzIHJldmVyc2Ugb3JkZXIgZnJvbQorICAgdGhlIGludGVybmFsIHN0b3Jh Z2UsIHNvIChSRSxSRUQsUldFRCxFKS4gTm93IHRyYW5zbGF0ZSBlYWNoIGxldHRlciB0bworICAg aXRzIGNvcnJlc3BvbmRpbmcgYml0OgorCisgIFJFPTAxMDEsIFJFRD0xMTAxLCBSV0VEPTExMTEs IEU9MDAxMAorCisgICBOb3cgcmV2ZXJzZSB0aGUgYml0czoKKworICBSRT0xMDEwLCBSRUQ9MDAx MCwgUldFRD0wMDAwLCBFPTExMDEKKworICAgVGhpcyBnaXZlcyB0aGUgMTYtYml0IHF1YW50aXR5 OgorCisgIDEwMTAwMDEwMDAwMDExMDEKKworICAgVGhpcyBpcyB0aGUgaW50ZXJuYWwgcmVwcmVz ZW50YXRpb24gb2YgdGhlIFZNUyBmaWxlIHBlcm1pc3Npb247IGluIGhleDoKKworICBBMjBCCisK KyAgIGFzIHNob3duIGluIHRoZSBzYW1wbGUgcGFja2V0IGFib3ZlLgorCisgICBUaGUgVk1TIGZv cm1hdCBwcm9iYWJseSB3b3VsZCBhbHNvIGFwcGx5IHRvIFJTWCBvciBhbnkgb3RoZXIgRklMRVMt MTEKKyAgIHN5c3RlbS4KKworSS4yLiBIYW5kbGluZyBvZiBHZW5lcmljIFByb3RlY3Rpb24KKwor ICAgVG8gYmUgdXNlZCB3aGVuIHRoZSB0d28gc3lzdGVtcyBhcmUgZGlmZmVyZW50IChhbmQvb3Ig ZG8gbm90IHJlY29nbml6ZQorICAgb3IgdW5kZXJzdGFuZCBlYWNoIG90aGVyJ3MgbG9jYWwgcHJv dGVjdGlvbiBjb2RlcykuCisKKyAgIEZpcnN0IG9mIGFsbCwgdGhlIGJvb2sgaXMgd3JvbmcuIFRo aXMgc2hvdWxkIG5vdCBiZSB0aGUgV29ybGQKKyAgIHByb3RlY3Rpb24sIGJ1dCB0aGUgT3duZXIg cHJvdGVjdGlvbi4gVGhlIG90aGVyIGZpZWxkcyBzaG91bGQgYmUgc2V0CisgICBhY2NvcmRpbmcg dG8gc3lzdGVtIGRlZmF1bHRzIChlLmcuIFVOSVggdW1hc2ssIFZNUyBkZWZhdWx0IHByb3RlY3Rp b24sCisgICBldGMpLCBleGNlcHQgdGhhdCBubyBub24tT3duZXIgZmllbGQgc2hvdWxkIGdpdmUg bW9yZSBwZXJtaXNzaW9ucyB0aGFuCisgICB0aGUgT3duZXIgZmllbGQuCisKKyAgIFsgWzE2Nl1U b3AgXSBbIFsxNjddQ29udGVudHMgXSBbIFsxNjhdQy1LZXJtaXQgSG9tZSBdIFsgWzE2OV1LZXJt aXQKKyAgIEhvbWUgXQorICAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKworCisgICAgQy1LZXJtaXQgUHJvZ3JhbSBM b2dpYyBNYW51YWwgLyBbMTcwXVRoZSBLZXJtaXQgUHJvamVjdCAvCisgICAgWzE3MV1rZXJtaXRA Y29sdW1iaWEuZWR1IC8gMzAgSnVuZSAyMDExCisKK1JlZmVyZW5jZXMKKworICAgMS4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUvCisgICAyLiBtYWlsdG86a2VybWl0QGNvbHVtYmlhLmVkdQorICAg My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0bWwKKyAgIDQuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9rOTUuaHRtbAorICAgNS4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAorICAgNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2Nrc2NyaXB0cy5odG1sCisgICA3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY3VycmVudC5odG1sCisgICA4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv d2hhdHNuZXcuaHRtbAorICAgOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZmFx Lmh0bWwKKyAgMTAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9zdXBwb3J0Lmh0bWwK KyAgMTEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC8KKyAgMTIuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2NwbG0uaHRtbAorICAxMy4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrY3BsbS5odG1sI3gxCisgIDE0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tjcGxtLmh0bWwjeDIKKyAgMTUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2NwbG0uaHRtbCN4MworICAxNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrY3BsbS5odG1sI3g0CisgIDE3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tj cGxtLmh0bWwjeDQuQQorICAxOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY3Bs bS5odG1sI3g0LkIKKyAgMTkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NwbG0u aHRtbCN4NC5DCisgIDIwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjcGxtLmh0 bWwjeDQuRAorICAyMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY3BsbS5odG1s I3g0LkUKKyAgMjIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NwbG0uaHRtbCN4 NC5GCisgIDIzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjcGxtLmh0bWwjeDQu RworICAyNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY3BsbS5odG1sI3g0LkgK KyAgMjUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NwbG0uaHRtbCN4NC5JCisg IDI2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjcGxtLmh0bWwjeGExCisgIDI3 LiBodHRwOi8vd3d3LmFtYXpvbi5jb20vZ3AvcHJvZHVjdC8wOTMyMzc2ODg2P2llPVVURjgmdGFn PWFsZWlkbW9yZWxkb20tMjAmbGlua0NvZGU9YXMyJmNhbXA9MTc4OSZjcmVhdGl2ZT05MzI1JmNy ZWF0aXZlQVNJTj0wOTMyMzc2ODg2CisgIDI4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tjcGxtLmh0bWwjY29udGVudHMKKyAgMjkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC92YXhfMTEtNzUwLmpwZworICAzMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUvY3UvY29t cHV0aW5naGlzdG9yeS9oZXJtaXQuaHRtbAorICAzMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2N1ZG9jcy9pbG9zZXR1cC5odG1sCisgIDMyLiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEu ZWR1L2tlcm1pdC9mL2NrYzA0ZS50eHQKKyAgMzMuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUv a2VybWl0L2YvY2tjMDRmLnR4dAorICAzNC4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJt aXQvZi9ja2MxNjgudHh0CisgIDM1LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9m L2NrYzE3OC50eHQKKyAgMzYuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2YvY2tj MTg4LnR4dAorICAzNy4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvZi9ja2MxODku dHh0CisgIDM4LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9mL2NrYzE5Mi50eHQK KyAgMzkuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2YvY2tjMTk3LnR4dAorICA0 MC4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvZi9ja2MyMDAudHh0CisgIDQxLiBm dHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9mL2NrYzIxMS50eHQKKyAgNDIuIGZ0cDov L2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2YvY2tjMzAwLnR4dAorICA0My4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY3BsbS5odG1sI2NvbnRlbnRzCisgIDQ0LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCisgIDQ1LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRtbAorICA0Ni4gZnRwOi8va2VybWl0LmNvbHVtYmlh LmVkdS9rZXJtaXQvYy1rZXJtaXQvY2tjcHJvLncKKyAgNDcuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2NwbG0uaHRtbCNjb250ZW50cworICA0OC4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAorICA0OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2luZGV4Lmh0bWwKKyAgNTAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2NwbG0uaHRtbCN4My4yCisgIDUxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tj cGxtLmh0bWwjY29udGVudHMKKyAgNTIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2VybWl0Lmh0bWwKKyAgNTMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5o dG1sCisgIDU0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjcGxtLmh0bWwjeDQu QQorICA1NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY3BsbS5odG1sI2NvbnRl bnRzCisgIDU2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCisg IDU3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRtbAorICA1OC4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY3BsbS5odG1sI2NvbnRlbnRzCisgIDU5LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCisgIDYwLiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRtbAorICA2MS4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrY3BsbS5odG1sI2NvbnRlbnRzCisgIDYyLiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCisgIDYzLiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvaW5kZXguaHRtbAorICA2NC4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9r ZXJtaXQvYy1rZXJtaXQvY2tjbGliLmgKKyAgNjUuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUv a2VybWl0L2Mta2VybWl0L2NrY2xpYi5jCisgIDY2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tjcGxtLmh0bWwjeDMuMQorICA2Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrY3BsbS5odG1sI2NvbnRlbnRzCisgIDY4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tlcm1pdC5odG1sCisgIDY5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv aW5kZXguaHRtbAorICA3MC4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJt aXQvY2tjc3ltLmgKKyAgNzEuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2Vy bWl0L2NrY2FzYy5oCisgIDcyLiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtl cm1pdC9ja2NzaWcuaAorICA3My4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1r ZXJtaXQvY2tjZGViLmgKKyAgNzQuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mt a2VybWl0L2NrY2tlci5oCisgIDc1LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9j LWtlcm1pdC9ja2N4bGEuaAorICA3Ni4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQv Yy1rZXJtaXQvY2tjbWFpLmMKKyAgNzcuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0 L2Mta2VybWl0L2NrY3Byby53CisgIDc4LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1p dC9jLWtlcm1pdC9ja2NmbnMuYworICA3OS4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJt aXQvYy1rZXJtaXQvY2tjZm4yLmMKKyAgODAuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2Vy bWl0L2Mta2VybWl0L2NrY2ZuMy5jCisgIDgxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tjcGxtLmh0bWwjeDQuQgorICA4Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrY3BsbS5odG1sI3g0LkUKKyAgODMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2NwbG0uaHRtbCN4NC5ECisgIDg0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tj cGxtLmh0bWwjY29udGVudHMKKyAgODUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2VybWl0Lmh0bWwKKyAgODYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5o dG1sCisgIDg3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjcGxtLmh0bWwjeDQu QgorICA4OC4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2t1eGxh LmMKKyAgODkuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrdXhs YS5oCisgIDkwLiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja2N4 bGEuaAorICA5MS4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2t1 eGxhLmgKKyAgOTIuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2Nr bXhsYS5oCisgIDkzLiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9j az94bGEKKyAgOTQuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2Nr Y3VuaS5oCisgIDk1LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9j a2N1bmkuYworICA5Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY3BsbS5odG1s I2NvbnRlbnRzCisgIDk3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5o dG1sCisgIDk4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRtbAorICA5 OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY3BsbS5odG1sI3g0LkIKKyAxMDAu IGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrdWNtZC5oCisgMTAx LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja3VjbWQuYworIDEw Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY3BsbS5odG1sI3g0LkUKKyAxMDMu IGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrdXVzci5oCisgMTA0 LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja3V1c3IuYworIDEw NS4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2t1dXMyLmMKKyAx MDYuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrdXVzMy5jCisg MTA3LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja3V1czQuYwor IDEwOC4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2t1dXN5LmMK KyAxMDkuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrdXVzeC5j CisgMTEwLiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja3V2ZXIu aAorIDExMS4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2t1c2Ny LmMKKyAxMTIuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrdWRp YS5jCisgMTEzLiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja3Vj b24uYworIDExNC4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2t1 Y25zLmMKKyAxMTUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NwbG0uaHRtbCN4 NC5FCisgMTE2LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja2Nt YWkuYworIDExNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY3BsbS5odG1sI2Nv bnRlbnRzCisgMTE4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1s CisgMTE5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRtbAorIDEyMC4g ZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2t1ZmlvLmMKKyAxMjEu IGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrdXRpby5jCisgMTIy LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja3VzaWcuYworIDEy My4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2t2ZmlvLmMKKyAx MjQuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrdXNpZy5jCisg MTI1LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja2NtYWkuYwor IDEyNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY3BsbS5odG1sI2NvbnRlbnRz CisgMTI3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCisgMTI4 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRtbAorIDEyOS4gZnRwOi8v a2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2t1dGlvLmMKKyAxMzAuIGZ0cDov L2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrdnRpby5jCisgMTMxLiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjcGxtLmh0bWwjeDIKKyAxMzIuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NwbG0uaHRtbCN4YTEKKyAxMzMuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbAorIDEzNC4gZnRwOi8va2VybWl0LmNvbHVt YmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2tjbmV0LmgKKyAxMzUuIGZ0cDovL2tlcm1pdC5jb2x1 bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrdXRpby5jCisgMTM2LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tjcGxtLmh0bWwjY29udGVudHMKKyAxMzcuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKKyAxMzguIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9pbmRleC5odG1sCisgMTM5LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tl cm1pdC9jLWtlcm1pdC9ja3V0aW8uYworIDE0MC4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9r ZXJtaXQvYy1rZXJtaXQvY2tjbmV0LmgKKyAxNDEuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUv a2VybWl0L2Mta2VybWl0L2NrY25ldC5jCisgMTQyLiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1 L2tlcm1pdC9jLWtlcm1pdC9ja2xuZXQuYworIDE0My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrY3BsbS5odG1sI2NvbnRlbnRzCisgMTQ0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tlcm1pdC5odG1sCisgMTQ1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvaW5kZXguaHRtbAorIDE0Ni4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1r ZXJtaXQvY2tjdGVsLmgKKyAxNDcuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mt a2VybWl0L2NrY3RlbC5jCisgMTQ4LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9j LWtlcm1pdC9ja2NmdHAuYworIDE0OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr Y3BsbS5odG1sI2NvbnRlbnRzCisgMTUwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tlcm1pdC5odG1sCisgMTUxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXgu aHRtbAorIDE1Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY3BsbS5odG1sI2Nv bnRlbnRzCisgMTUzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1s CisgMTU0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRtbAorIDE1NS4g ZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2t1dXN4LmMKKyAxNTYu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NwbG0uaHRtbCNjb250ZW50cworIDE1 Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAorIDE1OC4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0bWwKKyAxNTkuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0OTAuaHRtbCNMb29zZUVuZAorIDE2MC4gZnRwOi8v a2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvZi9ja3VwdHkuaAorIDE2MS4gZnRwOi8va2VybWl0 LmNvbHVtYmlhLmVkdS9rZXJtaXQvZi9ja3VwdHkuYworIDE2Mi4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L3NlY3VyaXR5Lmh0bWwKKyAxNjMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2NwbG0uaHRtbCNjb250ZW50cworIDE2NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaXQuaHRtbAorIDE2NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2luZGV4Lmh0bWwKKyAxNjYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Nw bG0uaHRtbCN0b3AKKyAxNjcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NwbG0u aHRtbCNjb250ZW50cworIDE2OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQuaHRtbAorIDE2OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0bWwK KyAxNzAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5odG1sCisgMTcxLiBt YWlsdG86a2VybWl0QGNvbHVtYmlhLmVkdQoKZGlmZiAtLWdpdCBhL2NrZXJtaXQtOS4wLjMwMi1i dWlsZC9ja2VybWl0LTkuMC4zMDIvY2tjcHJvLmMgYi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tl cm1pdC05LjAuMzAyL2NrY3Byby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu LjNjNTFiNmIKLS0tIC9kZXYvbnVsbAorKysgYi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1p dC05LjAuMzAyL2NrY3Byby5jCkBAIC0wLDAgKzEsMzgxNCBAQAorCisvKiBXQVJOSU5HIC0tIFRo aXMgQyBzb3VyY2UgcHJvZ3JhbSBnZW5lcmF0ZWQgYnkgV2FydCBwcmVwcm9jZXNzb3IuICovCisv KiBEbyBub3QgZWRpdCB0aGlzIGZpbGU7IGVkaXQgdGhlIFdhcnQtZm9ybWF0IHNvdXJjZSBmaWxl IGluc3RlYWQsICovCisvKiBhbmQgdGhlbiBydW4gaXQgdGhyb3VnaCBXYXJ0IHRvIHByb2R1Y2Ug YSBuZXcgQyBzb3VyY2UgZmlsZS4gICAgICovCisKKy8qIFdhcnQgVmVyc2lvbiBJbmZvOiAqLwor Y2hhciAqd2FydHYgPSAiV2FydCBWZXJzaW9uIDIuMTQsIDEwIE5vdiAxOTk5IjsKKworY2hhciAq cHJvdHYgPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogLSotQy0qLSAqLworIkMtS2VybWl0IFByb3RvY29sIE1vZHVsZSA4LjAuMTYwLCAxMiBB dWcgMjAwNyI7CisKK2ludCBrYWN0aXZlID0gMDsJCQkvKiBLZXJtaXQgcHJvdG9jb2wgaXMgYWN0 aXZlICovCisKKyNkZWZpbmUgUEtUWkVST0hBQ0sKKworLyogQyBLIEMgUCBSIE8gIC0tIEMtS2Vy bWl0IFByb3RvY29sIE1vZHVsZSwgaW4gV2FydCBwcmVwcm9jZXNzb3Igbm90YXRpb24uICovCisv KgorICBBdXRob3I6IEZyYW5rIGRhIENydXogPGZkY0Bjb2x1bWJpYS5lZHU+LAorICBDb2x1bWJp YSBVbml2ZXJzaXR5IEFjYWRlbWljIEluZm9ybWF0aW9uIFN5c3RlbXMsIE5ldyBZb3JrIENpdHku CisKKyAgQ29weXJpZ2h0IChDKSAxOTg1LCAyMDA3LAorICAgIFRydXN0ZWVzIG9mIENvbHVtYmlh IFVuaXZlcnNpdHkgaW4gdGhlIENpdHkgb2YgTmV3IFlvcmsuCisgICAgQWxsIHJpZ2h0cyByZXNl cnZlZC4gIFNlZSB0aGUgQy1LZXJtaXQgQ09QWUlORy5UWFQgZmlsZSBvciB0aGUKKyAgICBjb3B5 cmlnaHQgdGV4dCBpbiB0aGUgY2tjbWFpLmMgbW9kdWxlIGZvciBkaXNjbGFpbWVyIGFuZCBwZXJt aXNzaW9ucy4KKyovCisjaWZuZGVmIE5PWEZFUgorI2luY2x1ZGUgImNrY3N5bS5oIgorI2luY2x1 ZGUgImNrY2RlYi5oIgorI2luY2x1ZGUgImNrY2FzYy5oIgorI2luY2x1ZGUgImNrY2tlci5oIgor I2lmZGVmIE9TMgorI2lmbmRlZiBOVAorI2RlZmluZSBJTkNMX05PUE0KKyNkZWZpbmUgSU5DTF9W SU8JCQkvKiBOZWVkZWQgZm9yIGNrb2Nvbi5oICovCisjaW5jbHVkZSA8b3MyLmg+CisjdW5kZWYg Q09NTUVOVAorI2VuZGlmIC8qIE5UICovCisjaW5jbHVkZSAiY2tvY29uLmgiCisjZW5kaWYgLyog T1MyICovCisKKy8qCisgTm90ZSAtLSBUaGlzIGZpbGUgbWF5IGFsc28gYmUgcHJlcHJvY2Vzc2Vk IGJ5IHRoZSBVTklYIExleCBwcm9ncmFtLCBidXQKKyB5b3UgbXVzdCBpbmRlbnQgdGhlIGFib3Zl ICNpbmNsdWRlIHN0YXRlbWVudHMgYmVmb3JlIHVzaW5nIExleCwgYW5kIHRoZW4KKyByZXN0b3Jl IHRoZW0gdG8gdGhlIGxlZnQgbWFyZ2luIGluIHRoZSByZXN1bHRpbmcgQyBwcm9ncmFtIGJlZm9y ZSBjb21waWxhdGlvbi4KKyBBbHNvLCB0aGUgaW52b2NhdGlvbiBvZiB0aGUgIndhcnQoKSIgZnVu Y3Rpb24gYmVsb3cgbXVzdCBiZSByZXBsYWNlZCBieSBhbgorIGludm9jYXRpb24gIG9mIHRoZSAi eXlsZXgoKSIgZnVuY3Rpb24uICBJdCBtaWdodCBhbHNvIGJlIG5lY2Vzc2FyeSB0byByZW1vdmUK KyBjb21tZW50cyBpbiB0aGUgKCUpKCUpLi4uKCUpKCUpIHNlY3Rpb24uCisqLworCisvKiBTdGF0 ZSBkZWZpbml0aW9ucyBmb3IgV2FydCAob3IgTGV4KSAqLworI2RlZmluZSBpcGt0IDEKKyNkZWZp bmUgcmZpbGUgMgorI2RlZmluZSByYXR0ciAzCisjZGVmaW5lIHJkcGt0IDQKKyNkZWZpbmUgc3Np bml0IDUKKyNkZWZpbmUgc3NmaWxlIDYKKyNkZWZpbmUgc3NhdHRyIDcKKyNkZWZpbmUgc3NkYXRh IDgKKyNkZWZpbmUgc3Nlb2YgOQorI2RlZmluZSBzc2VvdCAxMAorI2RlZmluZSBzZXJ2ZSAxMQor I2RlZmluZSBnZW5lcmljIDEyCisjZGVmaW5lIGdldCAxMworI2RlZmluZSByZ2VuIDE0CisjZGVm aW5lIHNzb3BrdCAxNQorI2RlZmluZSByb3BrdCAxNgorCitfUFJPVE9UWVAoc3RhdGljIFZPSUQg eHhwcm90bywodm9pZCkpOworX1BST1RPVFlQKHN0YXRpYyBWT0lEIHdoZXJlbXNnLCh2b2lkKSk7 CitfUFJPVE9UWVAoaW50IHdhcnQsKHZvaWQpKTsKK19QUk9UT1RZUChzdGF0aWMgaW50IHNnZXRp bml0LChpbnQsaW50KSk7CitfUFJPVE9UWVAoaW50IHNuZHNwYWNlLChpbnQpKTsKKworLyogRXh0 ZXJuYWwgQy1LZXJtaXQgdmFyaWFibGUgZGVjbGFyYXRpb25zICovCisgIGV4dGVybiBjaGFyICp2 ZXJzaW8sICpzcnZ0eHQsICpjbWFyZywgKmNtYXJnMiwgKipjbWxpc3QsICpyZl9lcnI7CisgIGV4 dGVybiBjaGFyICogcmZzcGVjLCAqIHNmc3BlYywgKiBzcmZzcGVjLCAqIHJyZnNwZWM7CisgIGV4 dGVybiBjaGFyICogcHJmc3BlYywgKiBwc2ZzcGVjLCAqIHBzcmZzcGVjLCAqIHBycmZzcGVjOwor ICBleHRlcm4gY2hhciAqY2Rtc2dmaWxlW107CisgIGV4dGVybiBjaGFyICogc25kX21vdmUsICog c25kX3JlbmFtZSwgKiBzcmltc2c7CisgIGV4dGVybiBjaGFyIGZpbG5hbVtdLCBvZmlsbmFtW10s IGZzcGVjW10sIHR0bmFtZVtdLCBvZm4xW107CisgIGV4dGVybiBDSEFSIHNzdGF0ZSwgKnNydnB0 ciwgKmRhdGE7CisgIGV4dGVybiBpbnQgdGltaW50LCBydGltbywgbmZpbHMsIGhjZmxnLCB4Zmxn LCBmbG93LCBtZG10eXAsIG5ldHdvcms7CisgIGV4dGVybiBpbnQgb29wdHMsIG9tb2RlLCBvbmFt ZSwgb3BhdGgsIG5vcHVzaCwgaXNndWVzdCwgeGNtZHNyYywgcmNkYWN0aXZlOworICBleHRlcm4g aW50IHJlamVjdGlvbiwgbW92aW5nLCBmbmNhY3QsIGJ5ZV9hY3RpdmUsIHVyc2VydmVyLCBmYXRh bGlvOworICBleHRlcm4gaW50IHByb3RvY29sLCBwcmVmaXhpbmcsIGZpbGNudCwgY2Fycmllciwg Zm5zcGF0aCwgaW50ZXJydXB0ZWQ7CisgIGV4dGVybiBpbnQgcmVjdXJzaXZlLCBpbnNlcnZlciwg bnp4b3B0cywgaWRsZXRtbywgc3J2aWRsLCB4ZnJpbnQ7CisgIGV4dGVybiBzdHJ1Y3QgY2tfcCBw dGFiW107CisgIGV4dGVybiBpbnQgcmVtZmlsZSwgcmVtcGlwZSwgeGZlcnN0YXQsIGZpbGVzdGF0 dXMsIHdlYXJlYWxpa2UsIGZhY2twYXRoOworICBleHRlcm4gaW50IHBhdHRlcm5zLCBmaWxlcGVl aywgZ25mZXJyb3I7CisgIGV4dGVybiBjaGFyICogcmVtZGVzdDsKKworI2lmZGVmIFBLVFpFUk9I QUNLCisjZGVmaW5lIFBLVFpFUk9MRU4gMzIKK3N0YXRpYyBjaGFyIGlwa3RhY2tbUEtUWkVST0xF Tl07CitzdGF0aWMgaW50IGlwa3RsZW4gPSAwOworI2VuZGlmIC8qIFBLVFpFUk9IQUNLICovCisK K3N0YXRpYyBpbnQgc190aW1pbnQgPSAtMTsJCS8qIEZvciBzYXZpbmcgdGltZW91dCB2YWx1ZSAq Lworc3RhdGljIGludCBteWpvYiA9IDA7CitzdGF0aWMgaW50IGhhdmVmcyA9IDA7CisjaWZkZWYg Q0tfTE9HSU4KK3N0YXRpYyBpbnQgbG9ndHJpZXMgPSAwOworI2VuZGlmIC8qIENLX0xPR0lOICov CisKK3N0YXRpYyBpbnQgY2FuY2VsID0gMDsKK2ludCBmYWNrYnVnID0gMDsKKworI2lmZGVmIFNU UkVBTUlORworZXh0ZXJuIGludCBzdHJlYW1pbmcsIHN0cmVhbW9rOworCitzdGF0aWMgVk9JRAor c3RyZWFtb24oKSB7CisgICAgaWYgKHN0cmVhbW9rKSB7CisJZGVidWcoRjEwMCwic3RyZWFtb24i LCIiLDApOworCXN0cmVhbWluZyA9IDE7CisJdGltaW50ID0gMDsJCQkvKiBObyB0aW1lb3V0cyB3 aGlsZSBzdHJlYW1pbmcuICovCisgICAgfQorfQorCisjaWZkZWYgQ09NTUVOVAkJCQkvKiAobm90 IHVzZWQpICovCitzdGF0aWMgVk9JRAorc3RyZWFtb2ZmKCkgeworICAgIGlmIChzdHJlYW1pbmcp IHsKKwlkZWJ1ZyhGMTAwLCJzdHJlYW1vZmYiLCIiLDApOworCXN0cmVhbWluZyA9IDA7CisJdGlt aW50ID0gc190aW1pbnQ7CQkvKiBSZXN0b3JlIHRpbWVvdXQgKi8KKyAgICB9Cit9CisjZW5kaWYg LyogQ09NTUVOVCAqLworI2Vsc2UgLyogU1RSRUFNSU5HICovCisjZGVmaW5lIHN0cmVhbW9uKCkK KyNkZWZpbmUgc3RyZWFtb2ZmKCkKKyNlbmRpZiAvKiBTVFJFQU1JTkcgKi8KKworI2lmbmRlZiBO T1NQTAorX1BST1RPVFlQKCBpbnQgYWRkbWFjLCAoY2hhciAqLCBjaGFyICopICk7CitfUFJPVE9U WVAoIGludCB6enN0cmluZywgKGNoYXIgKiwgY2hhciAqKiwgaW50ICopICk7CisjZW5kaWYgLyog Tk9TUEwgKi8KKyNpZm5kZWYgTk9JQ1AKK19QUk9UT1RZUCggaW50IGNtZHNyYywgKHZvaWQpICk7 CisjZW5kaWYgLyogTk9JQ1AgKi8KKworI2lmbmRlZiBOT1NFUlZFUgorICBleHRlcm4gY2hhciAq IHhfdXNlciwgKiB4X3Bhc3N3ZCwgKiB4X2FjY3Q7CisgIGV4dGVybiBpbnQgeF9sb2dpbiwgeF9s b2dnZWQ7CisjZW5kaWYgLyogTk9TRVJWRVIgKi8KKworI2luY2x1ZGUgImNrY25ldC5oIgorCisj aWZkZWYgVE5DT0RFCisgIGV4dGVybiBpbnQgdHRucHJvdG87CQkJLyogTmV0d29yayBwcm90b2Nv bCAqLworI2VuZGlmIC8qIFROQ09ERSAqLworCisjaWZkZWYgQ0tfU1BFRUQKKyAgZXh0ZXJuIHNo b3J0IGN0bHBbXTsJCQkvKiBDb250cm9sLWNoYXJhY3RlciBwcmVmaXggdGFibGUgKi8KKyNlbmRp ZiAvKiBDS19TUEVFRCAqLworCisjaWZkZWYgVE5DT0RFCisgIGV4dGVybiBpbnQgdG5fYl9ubG0s IHRuX2JfeGZlciwgdG5fbmxtOworI2lmZGVmIENLX0VOQ1JZUFRJT04KKyAgZXh0ZXJuIGludCB0 bl9ub19lbmNyeXB0X3hmZXI7CisjZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLworI2VuZGlmIC8q IFROQ09ERSAqLworCisjaWZkZWYgVENQU09DS0VUCisjaWZuZGVmIE5PTElTVEVOCisgIGV4dGVy biBpbnQgdGNwc3JmZDsKKyNlbmRpZiAvKiBOT0xJU1RFTiAqLworI2VuZGlmIC8qIFRDUFNPQ0tF VCAqLworCisgIGV4dGVybiBpbnQgY3hzZWVuLCBjenNlZW4sIHNlcnZlciwgc3J2ZGlzLCBsb2Nh bCwgZGlzcGxhLCBiY3R1LCBiY3RyLCBiY3RsOworICBleHRlcm4gaW50IHF1aWV0LCB0c2Vjcywg cGFyaXR5LCBiYWNrZ3JkLCBuYWtzdGF0ZSwgYXRjYXB1LCB3c2xvdG4sIHdpbmxvOworICBleHRl cm4gaW50IHdzbG90cywgc3VjY2VzcywgeGl0c3RhLCBycHJpbnRmLCBkaXNjYXJkLCBjZHRpbW8s IGtlZXAsIGZkaXNwbGE7CisgIGV4dGVybiBpbnQgdGltZWYsIHN0ZGluZiwgcnNjYXB1LCBzZW5k bW9kZSwgZXBrdGZsZywgZXBrdHJjdmQsIGVwa3RzZW50OworICBleHRlcm4gaW50IGJpbmFyeSwg Zm5jbnY7CisgIGV4dGVybiBsb25nIHNwZWVkLCBmZmMsIGNyYzE2LCBjYWxpYnJhdGUsIGRlc3Q7 CisjaWZkZWYgQ09NTUVOVAorICBleHRlcm4gY2hhciAqVFlQQ01ELCAqRElSQ01ELCAqRElSQ00y OworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyNpZm5kZWYgT1MyCisgIGV4dGVybiBjaGFyICpTUEFD TUQsICpTUEFDTTIsICpXSE9DTUQ7CisjZW5kaWYgLyogT1MyICovCisgIGV4dGVybiBDSEFSICpy ZGF0YXA7CisgIGV4dGVybiBzdHJ1Y3QgemF0dHIgaWF0dHI7CisKKyNpZmRlZiBWTVMKKyAgZXh0 ZXJuIGludCBiYXRjaDsKKyNlbmRpZiAvKiBWTVMgKi8KKworI2lmZGVmIEdGVElNRVIKKyAgZXh0 ZXJuIENLRkxPQVQgZnB0c2VjczsKKyNlbmRpZiAvKiBHRlRJTUVSICovCisKKyAgZXh0ZXJuIENI QVIgKnNydmNtZDsKKyAgZXh0ZXJuIENIQVIgKmVwa3Rtc2c7CisKKyNpZmRlZiBDS19UTVBESVIK K2V4dGVybiBpbnQgZl90bXBkaXI7CQkJLyogRGlyZWN0b3J5IGNoYW5nZWQgdGVtcG9yYXJpbHkg Ki8KK2V4dGVybiBjaGFyIHNhdmRpcltdOwkJCS8qIEZvciBzYXZpbmcgY3VycmVudCBkaXJlY3Rv cnkgKi8KK2V4dGVybiBjaGFyICogZGxkaXI7CisjZW5kaWYgLyogQ0tfVE1QRElSICovCisKKyAg ZXh0ZXJuIGludCBxdWVyeTsJCQkvKiBRdWVyeS1hY3RpdmUgZmxhZyAqLworI2lmbmRlZiBOT1NQ TAorICBleHRlcm4gaW50IGNtZGx2bDsKKyAgY2hhciBxdWVyeWJ1ZltRQlVGTCsxXSA9IHsgTlVM LCBOVUwgfTsgLyogUVVFUlkgcmVzcG9uc2UgYnVmZmVyICovCisgIGNoYXIgKnFidWZwID0gcXVl cnlidWY7CQkvKiBQb2ludGVyIHRvIGl0ICovCisgIGludCBxYnVmbiA9IDA7CQkJLyogTGVuZ3Ro IG9mIGRhdGEgaW4gaXQgKi8KKyNlbHNlCisgIGV4dGVybiBpbnQgdGxldmVsOworI2VuZGlmIC8q IE5PU1BMICovCisKKyNpZm5kZWYgTk9JQ1AKKyAgZXh0ZXJuIGludCBlc2NhcGU7CisjZW5kaWYg LyogTk9JQ1AgKi8KKy8qCisgIElmIHRoZSBmb2xsb3dpbmcgZmxhZyBpcyBub256ZXJvIHdoZW4g dGhlIHByb3RvY29sIG1vZHVsZSBpcyBlbnRlcmVkLAorICB0aGVuIHNlcnZlciBtb2RlIHBlcnNp c3RzIGZvciBleGFjdGx5IG9uZSB0cmFuc2FjdGlvbiwgcmF0aGVyIHRoYW4KKyAgbG9vcGluZyB1 bnRpbCBCWUUgb3IgRklOSVNIIGlzIHJlY2VpdmVkLgorKi8KK2V4dGVybiBpbnQganVzdG9uZTsK Kworc3RhdGljIGludCByX3NhdmUgPSAtMTsKK3N0YXRpYyBpbnQgcF9zYXZlID0gLTE7CisKKy8q IEZ1bmN0aW9uIHRvIGxldCByZW1vdGUtbW9kZSB1c2VyIGtub3cgd2hlcmUgdGhlaXIgZmlsZShz KSB3ZW50ICovCisKK2ludCB3aGVyZWZsZyA9IDE7CQkJLyogVW5zZXQgd2l0aCBTRVQgWEZFUiBS RVBPUlQgKi8KKworc3RhdGljIFZPSUQKK3doZXJlbXNnKCkgeworICAgIGV4dGVybiBpbnQgcXVp ZXQsIGZpbHJlajsKKyAgICBpbnQgbjsKKyAgICBuID0gZmlsY250IC0gZmlscmVqOworICAgIGRl YnVnKEYxMDEsIndoZXJlbXNnIG4iLCIiLG4pOworCisgICAgZGVidWcoRjExMCwid2hlcmVtc2cg cHJmc3BlYyIscHJmc3BlYywwKTsKKyAgICBkZWJ1ZyhGMTEwLCJ3aGVyZW1zZyByZnNwZWMiLHJm c3BlYywwKTsKKyAgICBkZWJ1ZyhGMTEwLCJ3aGVyZW1zZyBwc2ZzcGVjIixwc2ZzcGVjLDApOwor ICAgIGRlYnVnKEYxMTAsIndoZXJlbXNnIHNmc3BlYyIsc2ZzcGVjLDApOworCisgICAgZGVidWco RjExMCwid2hlcmVtc2cgcHJyZnNwZWMiLHBycmZzcGVjLDApOworICAgIGRlYnVnKEYxMTAsIndo ZXJlbXNnIHJyZnNwZWMiLHJyZnNwZWMsMCk7CisgICAgZGVidWcoRjExMCwid2hlcmVtc2cgcHNy ZnNwZWMiLHBzcmZzcGVjLDApOworICAgIGRlYnVnKEYxMTAsIndoZXJlbXNnIHNyZnNwZWMiLHNy ZnNwZWMsMCk7CisKKyAgICBpZiAoIXF1aWV0ICYmICFsb2NhbCkgeworCWlmIChuID09IDEpIHsK KwkgICAgc3dpdGNoIChteWpvYikgeworCSAgICAgIGNhc2UgJ3MnOgorCQlpZiAoc2ZzcGVjKSB7 CisJCSAgICBwcmludGYoIiBTRU5UOiBbJXNdIixzZnNwZWMpOworCQkgICAgaWYgKHNyZnNwZWMp CisJCSAgICAgIHByaW50ZigiIFRvOiBbJXNdIixzcmZzcGVjKTsKKwkJICAgIHByaW50ZigiICgl cylcclxuIiwgc3VjY2VzcyA/ICJPSyIgOiAiRkFJTEVEIik7CisJCX0KKwkJYnJlYWs7CisJICAg ICAgY2FzZSAncic6CisJICAgICAgY2FzZSAndic6CisJCWlmIChycmZzcGVjKSB7CisJCSAgICBw cmludGYoIiBSQ1ZEOiBbJXNdIixycmZzcGVjKTsKKwkJICAgIGlmIChyZnNwZWMpCisJCSAgICAg IHByaW50ZigiIFRvOiBbJXNdIixyZnNwZWMpOworCQkgICAgcHJpbnRmKCIgKCVzKVxyXG4iLCBz dWNjZXNzID8gIk9LIiA6ICJGQUlMRUQiKTsKKwkJfQorCSAgICB9CisJfSBlbHNlIGlmIChuID4g MSkgeworCSAgICBzd2l0Y2ggKG15am9iKSB7CisJICAgICAgY2FzZSAncyc6CisJCWlmIChzZnNw ZWMpIHsKKwkJICAgIHByaW50ZigiIFNFTlQ6ICglZCBmaWxlcykiLG4pOworCQkgICAgaWYgKHNy ZnNwZWMpCisJCSAgICAgIHByaW50ZigiIExhc3Q6IFslc10iLHNyZnNwZWMpOworCQkgICAgcHJp bnRmKCIgKCVzKVxyXG4iLCBzdWNjZXNzID8gIk9LIiA6ICJGQUlMRUQiKTsKKwkJfQorCQlicmVh azsKKwkgICAgICBjYXNlICdyJzoKKwkgICAgICBjYXNlICd2JzoKKwkJaWYgKHJyZnNwZWMpIHsK KwkJICAgIHByaW50ZigiIFJDVkQ6ICglZCBmaWxlcykiLG4pOworCQkgICAgaWYgKHJmc3BlYykK KwkJICAgICAgcHJpbnRmKCIgTGFzdDogWyVzXSIscmZzcGVjKTsKKwkJICAgIHByaW50ZigiICgl cylcclxuIiwgc3VjY2VzcyA/ICJPSyIgOiAiRkFJTEVEIik7CisJCX0KKwkgICAgfQorCX0gZWxz ZSBpZiAobiA9PSAwKSB7CisJICAgIGlmIChteWpvYiA9PSAncycpCisJICAgICAgcHJpbnRmKCIg U0VOVDogKDAgZmlsZXMpICAgICAgICAgIFxyXG4iKTsKKwkgICAgZWxzZSBpZiAobXlqb2IgPT0g J3InIHx8IG15am9iID09ICd2JykKKwkgICAgICBwcmludGYoIiBSQ1ZEOiAoMCBmaWxlcykgICAg ICAgICAgXHJcbiIpOworCX0KKyAgICB9Cit9CisKK3N0YXRpYyBWT0lECityZGVidWcoKSB7Cisg ICAgaWYgKHNlcnZlcikKKyAgICAgIGRlYnVnKEYxMTEsIlJFU1VNRSIsInNlcnZlcj0xIixqdXN0 b25lKTsKKyAgICBlbHNlCisgICAgICBkZWJ1ZyhGMTExLCJSRVNVTUUiLCJzZXJ2ZXI9MCIsanVz dG9uZSk7Cit9CisKKy8qIEZsYWdzIGZvciB0aGUgRU5BQkxFIGFuZCBESVNBQkxFIGNvbW1hbmRz ICovCitleHRlcm4gaW50CisgIGVuX2NweSwgZW5fY3dkLCBlbl9kZWwsIGVuX2RpciwgZW5fZmlu LCBlbl9nZXQsIGVuX2J5ZSwgZW5fbWFpLCBlbl9wcmksCisgIGVuX2hvcywgZW5fcmVuLCBlbl9z ZW4sIGVuX3NwYSwgZW5fc2V0LCBlbl90eXAsIGVuX3dobywgZW5fcmV0LCBlbl94aXQsCisgIGVu X21rZCwgZW5fcm1kOworI2lmbmRlZiBOT1NQTAorZXh0ZXJuIGludCBlbl9hc2csIGVuX3F1ZTsK KyNlbmRpZiAvKiBOT1NQTCAqLworZXh0ZXJuIGludCB3aGF0LCBsYXN0eGZlcjsKKworLyogR2xv YmFsIHZhcmlhYmxlcyBkZWNsYXJlZCBoZXJlICovCisKKyAgaW50IHdoYXRydSA9IDA7CQkJLyog V2hhdCBhcmUgeW91LiAqLworICBpbnQgd2hhdHJ1MiA9IDA7CQkJLyogV2hhdCBhcmUgeW91LCBj b250J2QuICovCisKKy8qIExvY2FsIHZhcmlhYmxlcyAqLworCisgIHN0YXRpYyBjaGFyIHZzdGF0 ZSA9IDA7ICAJCS8qIFNhdmVkIFN0YXRlICAgKi8KKyAgc3RhdGljIGNoYXIgdmNtZCA9IDA7ICAg IAkJLyogU2F2ZWQgQ29tbWFuZCAqLworICBzdGF0aWMgaW50IHJlZ2V0ID0gMDsJCQkvKiBGbGFn IGZvciBleGVjdXRpbmcgUkVHRVQgKi8KKyAgc3RhdGljIGludCByZXRyaWV2ZSA9IDA7CQkvKiBG bGFnIGZvciBleGVjdXRpbmcgUkVUUklFVkUgKi8KKyAgc3RhdGljIGludCBvcGt0ID0gMDsJCQkv KiBTZW5kIEV4dGVuZGVkIEdFVCBwYWNrZXQgKi8KKworICBzdGF0aWMgaW50IHg7CQkJCS8qIEdl bmVyYWwtcHVycG9zZSBpbnRlZ2VyICovCisgIHN0YXRpYyBjaGFyICpzOwkJCS8qIEdlbmVyYWwt cHVycG9zZSBzdHJpbmcgcG9pbnRlciAqLworCisvKiBNYWNyb3MgLSBOb3RlLCBCRUdJTiBpcyBw cmVkZWZpbmVkIGJ5IFdhcnQgKGFuZCBMZXgpIGFzICJzdGF0ZSA9ICIsICovCisvKiBCRUdJTiBp cyBOT1QgYSBHT1RPISAqLworI2RlZmluZSBUSU5JVCBpZiAodGluaXQoMSkgPCAwKSByZXR1cm4o LTkpCisjZGVmaW5lIFNFUlZFIHsgVElOSVQ7IHJlc2V0YygpOyBuYWtzdGF0ZT0xOyB3aGF0PVdf Tk9USElORzsgY21hcmcyPSIiOyBcCitzZW5kbW9kZT1TTV9TRU5EOyBoYXZlZnM9MDsgcmVjdXJz aXZlPXJfc2F2ZTsgZm5zcGF0aD1wX3NhdmU7IEJFR0lOIHNlcnZlOyB9CisjZGVmaW5lIFJFU1VN RSB7IHJkZWJ1ZygpOyBpZiAoIXNlcnZlcikgeyB3aGVyZW1zZygpOyByZXR1cm4oMCk7IH0gZWxz ZSBcCitpZiAoanVzdG9uZSkgeyBqdXN0b25lPTA7IHdoZXJlbXNnKCk7IHJldHVybigwKTsgfSBl bHNlIHsgU0VSVkU7IH0gfQorCisjaWZkZWYgR0ZUSU1FUgorI2RlZmluZSBRVUlUIHg9cXVpZXQ7 IHF1aWV0PTE7IGNsc2lmKCk7IGNsc29mKDEpOyB0c2Vjcz1ndGltZXIoKTsgXAorIGZwdHNlY3M9 Z2Z0aW1lcigpOyBxdWlldD14OyByZXR1cm4oc3VjY2VzcykKKyNlbHNlCisjZGVmaW5lIFFVSVQg eD1xdWlldDsgcXVpZXQ9MTsgY2xzaWYoKTsgY2xzb2YoMSk7IHRzZWNzPWd0aW1lcigpOyBxdWll dD14OyBcCisgcmV0dXJuKHN1Y2Nlc3MpCisjZW5kaWYgLyogR0ZUSU1FUiAqLworCisvKgorICBC eSBsYXRlIDE5OTksIHRoZSBiaWcgc3dpdGNoKCkgc3RhdGVtZW50IGdlbmVyYXRlZCBmcm9tIHRo ZSBmb2xsb3dpbmcgc3RhdGUKKyAgdGFibGUgYmVnYW4gY2hva2luZyBldmVuIGdjYywgc28gaGVy ZSB3ZSBleHRyYWN0IHRoZSBjb2RlIGZyb20gdGhlIGxhcmdlcgorICBzdGF0ZXMgaW50byBzdGF0 aWMgcm91dGluZXMgdG8gcmVkdWNlIHRoZSBzaXplIG9mIHRoZSBjYXNlcyBhbmQgdGhlCisgIHN3 aXRjaCgpIG92ZXJhbGwuICBUaGUgcm91dGluZXMgZm9sbG93IHRoZSBzdGF0ZSB0YWJsZTsgdGhl IHByb3RvdHlwZXMgYXJlCisgIGhlcmUuICBFYWNoIG9mIHRoZXNlIHJvdXRpbmVzIHNpbXBseSBj b250YWlucyB0aGUgdGV4dCBmcm9tIHRoZQorICBjb3JyZXNwb25kaW5nIGNhc2UsIGJ1dCB3aXRo IHJldHVybigtMSkgYWRkZWQgaW4gYXBwcm9wcmlhdGUgcGxhY2VzOyBzZWUKKyAgaW5zdHJ1Y3Rp b25zIGFmdGVyIHRoZSBzdGF0ZSB0YWJsZSBzd2l0Y2hlci4KKyovCitzdGF0aWMgaW50IHJjOwkJ CQkvKiBSZXR1cm4gY29kZSBmb3IgdGhlc2Ugcm91dGluZXMgKi8KK3N0YXRpYyBpbnQgcmN2X3Nf cGt0KCk7CQkJLyogUmVjZWl2ZWQgYW4gUyBwYWNrZXQgKi8KK3N0YXRpYyBpbnQgcmN2X2ZpcnN0 ZGF0YSgpOwkJLyogUmVjZWl2ZWQgZmlyc3QgRGF0YSBwYWNrZXQgKi8KK3N0YXRpYyBpbnQgcmN2 X3Nob3J0cmVwbHkoKTsJCS8qIFNob3J0IHJlcGx5IHRvIGEgUkVNT1RFIGNvbW1hbmQgICovCitz dGF0aWMgaW50IHNydl9xdWVyeSgpOwkJCS8qIFNlcnZlciBhbnN3ZXJzIGFuIHF1ZXJ5ICovCitz dGF0aWMgaW50IHNydl9jb3B5KCk7CQkJLyogU2VydmVyIGV4ZWN1dGVzIFJFTU9URSBDT1BZICov CitzdGF0aWMgaW50IHNydl9yZW5hbWUoKTsJCS8qIFNlcnZlciBleGVjdXRlcyBSRU1PVEUgUkVO QU1FICovCitzdGF0aWMgaW50IHNydl9sb2dpbigpOwkJCS8qIFNlcnZlciBleGVjdXRlcyBSRU1P VEUgTE9HSU4gKi8KK3N0YXRpYyBpbnQgc3J2X3RpbWVvdXQoKTsJCS8qIFNlcnZlciB0aW1lcyBv dXQgKi8KKworCisjZGVmaW5lIEJFR0lOIHN0YXRlID0KKworaW50IHN0YXRlID0gMDsKKworaW50 Cit3YXJ0KCkKK3sKKyAgICBpbnQgYyxhY3RubzsKKyAgICBleHRlcm4gY2hhciB0YmxbXTsKKyAg ICB3aGlsZSAoMSkgeworCWMgPSBpbnB1dCgpIC0gMzI7CisJZGVidWcoRjAwMCwiUFJPVE8gaW5w dXQiLGNraXRvYShzdGF0ZSksYyszMik7CisJaWYgKGMgPCAwIHx8IGMgPiA5NSkgYyA9IDA7CisJ aWYgKChhY3RubyA9IHRibFtjICsgc3RhdGUqOTZdKSAhPSAtMSkKKwkgICAgc3dpdGNoKGFjdG5v KSB7CitjYXNlIDE6CisgICAgeyBUSU5JVDsJCQkJLyogU2VuZCBmaWxlKHMpICovCisgICAgaWYg KHNpbml0KCkgPiAwKSBCRUdJTiBzc2luaXQ7CisgICAgICAgZWxzZSBSRVNVTUU7IH0KKyAgICBi cmVhazsKK2Nhc2UgMjoKKyAgICB7IFRJTklUOyBuYWtzdGF0ZSA9IDE7IEJFR0lOIGdldDsgfQor ICAgIGJyZWFrOworY2FzZSAzOgorICAgIHsJCQkJCS8qIENsaWVudCBzZW5kcyBhIEdFVCBjb21t YW5kICovCisgICAgVElOSVQ7CisgICAgdnN0YXRlID0gZ2V0OworICAgIHJlZ2V0ID0gMDsKKyAg ICByZXRyaWV2ZSA9IDA7CisgICAgb3BrdCA9IDA7CisgICAgdmNtZCA9IDA7CisjaWZkZWYgUEtU WkVST0hBQ0sKKyAgICBpcGt0YWNrWzBdID0gTlVMOworI2VuZGlmIC8qIFBLVFpFUk9IQUNLICov CisgICAgaWYgKHNpcGt0KCdJJykgPj0gMCkKKyAgICAgIEJFR0lOIGlwa3Q7CisgICAgZWxzZQor ICAgICAgUkVTVU1FOworfQorICAgIGJyZWFrOworY2FzZSA0OgorICAgIHsJCQkJCS8qIENsaWVu dCBzZW5kcyBhIFJFVFJJRVZFIGNvbW1hbmQgKi8KKyAgICBUSU5JVDsKKyAgICB2c3RhdGUgPSBn ZXQ7CisgICAgcmVnZXQgPSAwOworICAgIHJldHJpZXZlID0gMTsKKyAgICBvcGt0ID0gMDsKKyAg ICB2Y21kID0gMDsKKyAgICBpZiAoc2lwa3QoJ0knKSA+PSAwKQorICAgICAgQkVHSU4gaXBrdDsK KyAgICBlbHNlCisgICAgICBSRVNVTUU7Cit9CisgICAgYnJlYWs7CitjYXNlIDU6CisgICAgewkJ CQkJLyogQ2xpZW50IHNlbmRzIGEgUkVHRVQgY29tbWFuZCAqLworICAgIFRJTklUOworICAgIHZz dGF0ZSA9IGdldDsKKyAgICByZWdldCA9IDE7CisgICAgcmV0cmlldmUgPSAwOworICAgIG9wa3Qg PSAwOworICAgIHZjbWQgPSAwOworICAgIGlmIChzaXBrdCgnSScpID49IDApCisgICAgICBCRUdJ TiBpcGt0OworICAgIGVsc2UKKyAgICAgIFJFU1VNRTsKK30KKyAgICBicmVhazsKK2Nhc2UgNjoK KyAgICB7CQkJCQkvKiBDbGllbnQgc2VuZHMgRXh0ZW5kZWQgR0VUIFBhY2tldCAqLworICAgIFRJ TklUOworICAgIHZzdGF0ZSA9IGdldDsKKyAgICByZWdldCA9IG9vcHRzICYgR09QVF9SRVM7Cisg ICAgcmV0cmlldmUgPSBvb3B0cyAmIEdPUFRfREVMOworICAgIG9wa3QgPSAxOworICAgIHZjbWQg PSAwOworICAgIGlmIChzaXBrdCgnSScpID49IDApCisgICAgICBCRUdJTiBpcGt0OworICAgIGVs c2UKKyAgICAgIFJFU1VNRTsKK30KKyAgICBicmVhazsKK2Nhc2UgNzoKKyAgICB7CQkJCQkvKiBD bGllbnQgc2VuZHMgYSBIb3N0IGNvbW1hbmQgKi8KKyAgICBUSU5JVDsKKyAgICB2c3RhdGUgPSBy Z2VuOworICAgIHZjbWQgPSAnQyc7CisgICAgaWYgKHNpcGt0KCdJJykgPj0gMCkKKyAgICAgIEJF R0lOIGlwa3Q7CisgICAgZWxzZQorICAgICAgUkVTVU1FOworfQorICAgIGJyZWFrOworY2FzZSA4 OgorICAgIHsgVElOSVQ7CQkJCS8qIENsaWVudCBzZW5kcyBhIEtlcm1pdCBjb21tYW5kICovCisg ICAgdnN0YXRlID0gcmdlbjsKKyAgICB2Y21kID0gJ0snOworICAgIGlmIChzaXBrdCgnSScpID49 IDApCisgICAgICBCRUdJTiBpcGt0OworICAgIGVsc2UKKyAgICAgIFJFU1VNRTsKK30KKyAgICBi cmVhazsKK2Nhc2UgOToKKyAgICB7CQkJCQkvKiBDbGllbnQgc2VuZHMgYSBSRU1PVEUgY29tbWFu ZCAqLworICAgIFRJTklUOworICAgIHZzdGF0ZSA9IHJnZW47CisgICAgdmNtZCA9ICdHJzsKKyAg ICBpZiAoc2lwa3QoJ0knKSA+PSAwKQorICAgICAgQkVHSU4gaXBrdDsKKyAgICBlbHNlCisgICAg ICBSRVNVTUU7Cit9CisgICAgYnJlYWs7CitjYXNlIDEwOgorICAgIHsJCQkJCS8qIEVudGVyIHNl cnZlciBtb2RlICovCisgICAgaW50IHg7CisgICAgeCA9IGp1c3RvbmU7CisgICAgaWYgKCFFTkFC TEVEKGVuX2RlbCkpIHsJCS8qIElmIERFTEVURSBpcyBkaXNhYmxlZCAqLworCWlmIChmbmNhY3Qg PT0gWFlGWF9CIHx8CQkvKiB1bmRvIGFueSBmaWxlIGNvbGxpc2lvbiBhY3Rpb24gKi8KKwkgICAg Zm5jYWN0ID09IFhZRlhfVSB8fAkJLyogdGhhdCBjb3VsZCByZXN1bHQgaW4gZGVsZXRpb24gb3Ig Ki8KKwkgICAgZm5jYWN0ID09IFhZRlhfQSB8fAkJLyogbW9kaWZpY2F0aW9uIG9mIGV4aXN0aW5n IGZpbGVzLiAqLworCSAgICBmbmNhY3QgPT0gWFlGWF9YKSB7CisjaWZuZGVmIE5PSUNQCisJICAg IGV4dGVybiBpbnQgZ19mbmNhY3Q7CisJICAgIGdfZm5jYWN0ID0gZm5jYWN0OwkJLyogU2F2ZSBj dXJyZW50IHNldHRpbmcgKi8KKyNlbmRpZiAvKiBOT0lDUCAqLworCSAgICBmbmNhY3QgPSBYWUZY X1I7CQkvKiBDaGFuZ2UgdG8gUkVOQU1FICovCisJICAgIGRlYnVnKEYxMDEsInNlcnZlciBERUxF VEUgZGlzYWJsZWQgc28gZm5jYWN0IFJFTkFNRSIsIiIsZm5jYWN0KTsKKwl9CisgICAgfQorICAg IFNFUlZFOwkJCQkvKiB0aW5pdCgpIGNsZWFycyBqdXN0b25lLi4uICovCisgICAganVzdG9uZSA9 IHg7CisjaWZkZWYgSUtTREIKKyAgICBpZiAoaWtkYm9wZW4pIHNsb3RzdGF0ZSh3aGF0LCAiU0VS VkVSIiwgIiIsICIiKTsKKyNlbmRpZiAvKiBJS1NEQiAqLworfQorICAgIGJyZWFrOworY2FzZSAx MToKKyAgICB7CisgICAgaW50IGIxID0gMCwgYjIgPSAwOworICAgIGlmICghZGF0YSkgVElOSVQ7 CQkJLyogIkFCRU5EIiAtLSBUZWxsIG90aGVyIHNpZGUuICovCisjaWZuZGVmIHBkcDExCisgICAg aWYgKGVwa3RmbGcpIHsJCQkvKiBJZiBiZWNhdXNlIG9mIEUtUEFDS0VUIGNvbW1hbmQgKi8KKwli MSA9IGJjdGw7IGIyID0gYmN0dTsJCS8qIFNhdmUgYmxvY2sgY2hlY2sgdHlwZSAqLworCWJjdGwg PSBiY3R1ID0gMTsJCS8qIHNldCBpdCB0byAxICovCisgICAgfQorI2VuZGlmIC8qIHBkcDExICov CisgICAgZXJycGt0KChDSEFSICopIlVzZXIgY2FuY2VsbGVkIik7CS8qIFNlbmQgdGhlIHBhY2tl dCAqLworI2lmbmRlZiBwZHAxMQorICAgIGlmIChlcGt0ZmxnKSB7CQkJLyogUmVzdG9yZSB0aGUg YmxvY2sgY2hlY2sgKi8KKwllcGt0ZmxnID0gMDsKKwliY3RsID0gYjE7IGJjdHUgPSBiMjsKKyAg ICB9CisjZW5kaWYgLyogcGRwMTEgKi8KKyAgICBzdWNjZXNzID0gMDsKKyAgICByZXR1cm4oMCk7 CQkJCS8qIFJldHVybiBmcm9tIHByb3RvY29sLiAqLworfQorICAgIGJyZWFrOworY2FzZSAxMjoK KyAgICB7CQkvKiBSZWNlaXZlIFNlbmQtSW5pdCBwYWNrZXQuICovCisgICAgcmMgPSByY3Zfc19w a3QoKTsKKyAgICBjYW5jZWwgPSAwOwkJCQkvKiBSZXNldCBjYW5jZWxsYXRpb24gY291bnRlciAq LworICAgIGRlYnVnKEYxMDEsInJjdl9zX3BrdCIsIiIscmMpOworICAgIGlmIChyYyA+IC0xKSBy ZXR1cm4ocmMpOwkJLyogKHNlZSBiZWxvdykgKi8KK30KKyAgICBicmVhazsKK2Nhc2UgMTM6Cisg ICAgewkJCQkvKiBHZXQgYWNrIGZvciBJLXBhY2tldCAqLworICAgIGludCB4ID0gMDsKKyNpZmRl ZiBQS1RaRVJPSEFDSworICAgIGNrc3RybmNweShpcGt0YWNrLChjaGFyICopcmRhdGFwLFBLVFpF Uk9MRU4pOyAvKiBTYXZlIGEgY29weSBvZiB0aGUgQUNLICovCisgICAgaXBrdGxlbiA9IHN0cmxl bihpcGt0YWNrKTsKKyNlbmRpZiAvKiBQS1RaRVJPSEFDSyAqLworICAgIHNwYXIocmRhdGFwKTsJ CQkvKiBTZXQgcGFyYW1ldGVycyAqLworICAgIGNhbmNlbCA9IDA7CisgICAgd2lubG8gPSAwOwkJ CQkvKiBTZXQgd2luZG93LWxvdyBiYWNrIHRvIHplcm8gKi8KKyAgICBkZWJ1ZyhGMTAxLCI8aXBr dD5ZIHdpbmxvIiwiIix3aW5sbyk7CisgICAgdXJzZXJ2ZXIgPSAxOwkJCS8qIFNvIEkga25vdyBJ J20gdGFsa2luZyB0byBhIHNlcnZlciAqLworICAgIGlmICh2Y21kKSB7CQkJCS8qIElmIHNlbmRp bmcgYSBnZW5lcmljIGNvbW1hbmQgKi8KKwlpZiAodGluaXQoMCkgPCAwKSByZXR1cm4oLTkpOwkv KiBJbml0aWFsaXplIG1hbnkgdGhpbmdzICovCisJeCA9IHNjbWQodmNtZCwoQ0hBUiAqKWNtYXJn KTsJLyogRG8gdGhhdCAqLworCWlmICh4ID49IDApIHggPSAwOwkJLyogKGJlY2F1c2Ugb2YgTy1Q YWNrZXQpICovCisJZGVidWcoRjEwMSwicHJvdG8gRyBwYWNrZXQgc2NtZCIsIiIseCk7CisJdmNt ZCA9IDA7CQkJLyogYW5kIHRoZW4gdW4tcmVtZW1iZXIgaXQuICovCisgICAgfSBlbHNlIGlmICh2 c3RhdGUgPT0gZ2V0KSB7CisJZGVidWcoRjEwMSwiUkVHRVQgc3N0YXRlIiwiIixzc3RhdGUpOwor CXggPSBzcmluaXQocmVnZXQsIHJldHJpZXZlLCBvcGt0KTsgLyogR0VUIG9yIFJFR0VULCBldGMg Ki8KKyAgICB9CisgICAgaWYgKHggPCAwKSB7CQkJLyogSWYgY29tbWFuZCB3YXMgdG9vIGxvbmcg Ki8KKwlpZiAoIXNyaW1zZykKKwkgIHNyaW1zZyA9ICJFcnJvciBzZW5kaW5nIHN0cmluZyI7CisJ ZXJycGt0KChDSEFSICopc3JpbXNnKTsJCS8qIGNhbmNlbCBib3RoIHNpZGVzLiAqLworCXN1Y2Nl c3MgPSAwOworCVJFU1VNRTsKKyAgICB9IGVsc2UgaWYgKHggPiAwKSB7CQkJLyogTmVlZCB0byBz ZW5kIG1vcmUgTy1QYWNrZXRzICovCisJQkVHSU4gc3NvcGt0OworICAgIH0gZWxzZSB7CisJcnRp bWVyKCk7CQkJLyogUmVzZXQgdGhlIGVsYXBzZWQgc2Vjb25kcyB0aW1lci4gKi8KKyNpZmRlZiBH RlRJTUVSCisJcmZ0aW1lcigpOworI2VuZGlmIC8qIEdGVElNRVIgKi8KKwl3aW5sbyA9IDA7CQkJ LyogV2luZG93IGJhY2sgdG8gMCwgYWdhaW4uICovCisJZGVidWcoRjEwMSwiPGlwa3Q+WSB2c3Rh dGUiLCIiLHZzdGF0ZSk7CisJbmFrc3RhdGUgPSAxOwkJCS8qIENhbiBzZW5kIE5BS3MgZnJvbSBo ZXJlLiAqLworCUJFR0lOIHZzdGF0ZTsJCQkvKiBTd2l0Y2ggdG8gZGVzaXJlZCBzdGF0ZSAqLwor ICAgIH0KK30KKyAgICBicmVhazsKK2Nhc2UgMTQ6CisgICAgewkJCQkvKiBHb3QgQUNLIHRvIE8t UGFja2V0ICovCisgICAgZGVidWcoRjEwMCwiQ1BDUFJPIDxzc29wa3Q+WSIsIiIsMCk7CisgICAg eCA9IHNvcGt0KCk7CisgICAgZGVidWcoRjEwMSwiQ1BDUFJPIDxzc29wa3Q+WSB4IiwiIix4KTsK KyAgICBpZiAoeCA8IDApIHsJCQkvKiBJZiBlcnJvciAqLworCWVycnBrdCgoQ0hBUiAqKXNyaW1z Zyk7CQkvKiBjYW5jZWwgYm90aCBzaWRlcy4gKi8KKwlzdWNjZXNzID0gMDsKKwlSRVNVTUU7Cisg ICAgfSBlbHNlIGlmICh4ID09IDApIHsJCS8qIFRoaXMgd2FzIHRoZSBsYXN0IE8tUGFja2V0ICov CisJcnRpbWVyKCk7CQkJLyogUmVzZXQgdGhlIGVsYXBzZWQgc2Vjb25kcyB0aW1lci4gKi8KKyNp ZmRlZiBHRlRJTUVSCisJcmZ0aW1lcigpOworI2VuZGlmIC8qIEdGVElNRVIgKi8KKwl3aW5sbyA9 IDA7CQkJLyogV2luZG93IGJhY2sgdG8gMCwgYWdhaW4uICovCisJZGVidWcoRjEwMSwiPHNzb3Br dD5ZIHdpbmxvIiwiIix3aW5sbyk7CisJbmFrc3RhdGUgPSAxOwkJCS8qIENhbiBzZW5kIE5BS3Mg ZnJvbSBoZXJlLiAqLworCUJFR0lOIHZzdGF0ZTsJCQkvKiBTd2l0Y2ggdG8gZGVzaXJlZCBzdGF0 ZSAqLworICAgIH0KKyAgICBkZWJ1ZyhGMTAxLCJDUENQUk8gPHNzb3BrdD5ZIG5vdCBjaGFuZ2lu ZyBzdGF0ZSIsIiIseCk7Cit9CisgICAgYnJlYWs7CitjYXNlIDE1OgorICAgIHsJCQkJLyogSWdu b3JlIEVycm9yIHJlcGx5IHRvIEkgcGFja2V0ICovCisgICAgaW50IHggPSAwOworICAgIHdpbmxv ID0gMDsJCQkJLyogU2V0IHdpbmRvdy1sb3cgYmFjayB0byB6ZXJvICovCisgICAgZGVidWcoRjEw MSwiPGlwa3Q+RSB3aW5sbyIsIiIsd2lubG8pOworICAgIGlmICh2Y21kKSB7CQkJCS8qIEluIGNh c2Ugb3RoZXIgS2VybWl0IGRvZXNuJ3QgKi8KKwlpZiAodGluaXQoMCkgPCAwKSByZXR1cm4oLTkp OworCXggPSBzY21kKHZjbWQsKENIQVIgKiljbWFyZyk7CS8qIHVuZGVyc3RhbmQgSS1wYWNrZXRz LiAqLworCWlmICh4ID49IDApIHggPSAwOwkJLyogKGJlY2F1c2Ugb2YgTy1QYWNrZXQpICovCisJ dmNtZCA9IDA7CQkJLyogT3RoZXJ3aXNlIGFjdCBhcyBhYm92ZS4uLiAqLworICAgIH0gZWxzZSBp ZiAodnN0YXRlID09IGdldCkgeCA9IHNyaW5pdChyZWdldCwgcmV0cmlldmUsIG9wa3QpOworICAg IGlmICh4IDwgMCkgewkJCS8qIElmIGNvbW1hbmQgd2FzIHRvbyBsb25nICovCisJZXJycGt0KChD SEFSICopc3JpbXNnKTsJCS8qIGNhbmNlbCBib3RoIHNpZGVzLiAqLworCXN1Y2Nlc3MgPSAwOwor CVJFU1VNRTsKKyAgICB9IGVsc2UgaWYgKHggPiAwKSB7CQkJLyogTmVlZCB0byBzZW5kIG1vcmUg Ty1QYWNrZXRzICovCisJQkVHSU4gc3NvcGt0OworICAgIH0gZWxzZSB7CisJZnJlZXJwa3Qod2lu bG8pOwkJLyogRGlzY2FyZCB0aGUgRXJyb3IgcGFja2V0LiAqLworCWRlYnVnKEYxMDEsIjxpcGt0 PkUgd2lubG8iLCIiLHdpbmxvKTsKKwl3aW5sbyA9IDA7CQkJLyogQmFjayB0byBwYWNrZXQgMCBh Z2Fpbi4gKi8KKwluYWtzdGF0ZSA9IDE7CQkJLyogQ2FuIHNlbmQgTkFLcyBmcm9tIGhlcmUuICov CisJQkVHSU4gdnN0YXRlOworICAgIH0KK30KKyAgICBicmVhazsKK2Nhc2UgMTY6CisgICAgewkJ LyogUmVzZW5kIG9mIHByZXZpb3VzIEktcGt0IEFDSywgc2FtZSBzZXEgbnVtYmVyICovCisgICAg ZnJlZXJwa3QoMCk7CQkJLyogRnJlZSB0aGUgQUNLJ3MgcmVjZWl2ZSBidWZmZXIgKi8KKyAgICBy ZXNlbmQoMCk7CQkJCS8qIFNlbmQgdGhlIEdFVCBwYWNrZXQgYWdhaW4uICovCit9CisgICAgYnJl YWs7CitjYXNlIDE3OgorICAgIHsJCQkJLyogR2V0IEktcGFja2V0ICovCisjaWZuZGVmIE5PU0VS VkVSCisgICAgc3BhcihyZGF0YXApOwkJCS8qIFNldCBwYXJhbWV0ZXJzIGZyb20gaXQgKi8KKyAg ICBhY2sxKHJwYXIoKSk7CQkJLyogUmVzcG9uZCB3aXRoIG91ciBvd24gcGFyYW1ldGVycyAqLwor I2lmZGVmIENPTU1FTlQKKyAgICBwa3Rpbml0KCk7CQkJCS8qIFJlaW5pdGlhbGl6ZSBwYWNrZXQg bnVtYmVycyAqLworI2Vsc2UKKyNpZmRlZiBDT01NRU5UCisgICAgLyogVGhpcyBjYW4ndCBiZSBy aWdodCAtIGl0IHVuZG9lcyB0aGUgc3R1ZmYgd2UganVzdCBuZWdvdGlhdGVkICovCisgICAgeCA9 IGp1c3RvbmU7CisgICAgdGluaXQoMSk7CQkJCS8qIFJlaW5pdGlhbGl6ZSBFVkVSWVRISU5HICov CisgICAganVzdG9uZSA9IHg7CQkJLyogQnV0IHRoaXMuLi4gKi8KKyNlbHNlCisgICAgdGluaXQo MCk7CQkJCS8qIEluaXRpYWxpemUgbW9zdCB0aGluZ3MgKi8KKyNlbmRpZiAvKiBDT01NRU5UICov CisjZW5kaWYgLyogQ09NTUVOVCAqLworI2VuZGlmIC8qIE5PU0VSVkVSICovCisgICAgY2FuY2Vs ID0gMDsJCQkJLyogUmVzZXQgY2FuY2VsbGF0aW9uIGNvdW50ZXIgKi8KK30KKyAgICBicmVhazsK K2Nhc2UgMTg6CisgICAgewkJCQkvKiBHRVQgKi8KKyNpZm5kZWYgTk9TRVJWRVIKKyAgICBpZiAo eF9sb2dpbiAmJiAheF9sb2dnZWQpIHsKKwllcnJwa3QoKENIQVIgKikiTG9naW4gcmVxdWlyZWQi KTsKKwlTRVJWRTsKKyAgICB9IGVsc2UgaWYgKHNnZXRpbml0KDAsMCkgPCAwKSB7CisJUkVTVU1F OworICAgIH0gZWxzZSB7CisjaWZkZWYgQ0tTWVNMT0cKKwlpZiAoY2t4c3lzbG9nID49IFNZU0xH X1BSICYmIGNreGxvZ2dpbmcpCisJICBja3N5c2xvZyhTWVNMR19QUiwgMSwgInNlcnZlciIsICJH RVQiLCAoY2hhciAqKXNydmNtZCk7CisjZW5kaWYgLyogQ0tTWVNMT0cgKi8KKwlCRUdJTiBzc2lu aXQ7CisgICAgfQorI2VuZGlmIC8qIE5PU0VSVkVSICovCit9CisgICAgYnJlYWs7CitjYXNlIDE5 OgorICAgIHsJCQkJLyogR0VUIC9ERUxFVEUgKFJFVFJJRVZFKSAqLworI2lmbmRlZiBOT1NFUlZF UgorICAgIGlmICh4X2xvZ2luICYmICF4X2xvZ2dlZCkgeworCWVycnBrdCgoQ0hBUiAqKSJMb2dp biByZXF1aXJlZCIpOworCVJFU1VNRTsKKyAgICB9IGVsc2UgaWYgKCFFTkFCTEVEKGVuX2RlbCkp IHsKKwllcnJwa3QoKENIQVIgKikiRGVsZXRpbmcgZmlsZXMgaXMgZGlzYWJsZWQiKTsKKwlSRVNV TUU7CisgICAgfSBlbHNlIGlmIChzZ2V0aW5pdCgwLDApIDwgMCkgeworCVJFU1VNRTsKKyAgICB9 IGVsc2UgeworCW1vdmluZyA9IDE7CisjaWZkZWYgQ0tTWVNMT0cKKwlpZiAoY2t4c3lzbG9nID49 IFNZU0xHX1BSICYmIGNreGxvZ2dpbmcpCisJICBja3N5c2xvZyhTWVNMR19QUiwgMSwgInNlcnZl ciIsICJHRVQgL0RFTEVURSIsIChjaGFyICopc3J2Y21kKTsKKyNlbmRpZiAvKiBDS1NZU0xPRyAq LworCUJFR0lOIHNzaW5pdDsKKyAgICB9CisjZW5kaWYgLyogTk9TRVJWRVIgKi8KK30KKyAgICBi cmVhazsKK2Nhc2UgMjA6CisgICAgewkJCQkvKiBHRVQgL1JFQ1VSU0lWRSAqLworI2lmbmRlZiBO T1NFUlZFUgorICAgIHJlY3Vyc2l2ZSA9IDE7CQkJLyogU2V0IHRoZXNlIGJlZm9yZSBzZ2V0aW5p dCgpICovCisgICAgaWYgKGZuc3BhdGggPT0gUEFUSF9PRkYpCisgICAgICBmbnNwYXRoID0gUEFU SF9SRUw7CQkvKiBEb24ndCB3b3JyeSwgdGhleSB3aWxsIGJlICovCisgICAgaWYgKHhfbG9naW4g JiYgIXhfbG9nZ2VkKSB7CQkvKiByZXNldCBuZXh0IHRpbWUgdGhyb3VnaC4gKi8KKwllcnJwa3Qo KENIQVIgKikiTG9naW4gcmVxdWlyZWQiKTsKKwlSRVNVTUU7CisgICAgfSBlbHNlIGlmIChzZ2V0 aW5pdCgwLDApIDwgMCkgeworCVJFU1VNRTsKKyAgICB9IGVsc2UgeworI2lmZGVmIENLU1lTTE9H CisJaWYgKGNreHN5c2xvZyA+PSBTWVNMR19QUiAmJiBja3hsb2dnaW5nKQorCSAgY2tzeXNsb2co U1lTTEdfUFIsIDEsICJzZXJ2ZXIiLCAiR0VUIC9SRUNVUlNJVkUiLCAoY2hhciAqKXNydmNtZCk7 CisjZW5kaWYgLyogQ0tTWVNMT0cgKi8KKwlCRUdJTiBzc2luaXQ7CisgICAgfQorI2VuZGlmIC8q IE5PU0VSVkVSICovCit9CisgICAgYnJlYWs7CitjYXNlIDIxOgorICAgIHsJCQkJLyogR0VUIC9S RUNVUlNJVkUgL0RFTEVURSAqLworI2lmbmRlZiBOT1NFUlZFUgorICAgIHJlY3Vyc2l2ZSA9IDE7 CQkJLyogU2V0IHRoZXNlIGJlZm9yZSBzZ2V0aW5pdCgpICovCisgICAgaWYgKGZuc3BhdGggPT0g UEFUSF9PRkYpCisgICAgICBmbnNwYXRoID0gUEFUSF9SRUw7CQkvKiBEb24ndCB3b3JyeSwgdGhl eSB3aWxsIGJlICovCisgICAgbW92aW5nID0gMTsJCQkJLyogcmVzZXQgbmV4dCB0aW1lIHRocm91 Z2guICovCisgICAgaWYgKHhfbG9naW4gJiYgIXhfbG9nZ2VkKSB7CisJZXJycGt0KChDSEFSICop IkxvZ2luIHJlcXVpcmVkIik7CisJUkVTVU1FOworICAgIH0gZWxzZSBpZiAoIUVOQUJMRUQoZW5f ZGVsKSkgeworCWVycnBrdCgoQ0hBUiAqKSJEZWxldGluZyBmaWxlcyBpcyBkaXNhYmxlZCIpOwor CVJFU1VNRTsKKyAgICB9IGVsc2UgaWYgKHNnZXRpbml0KDAsMCkgPCAwKSB7CisJUkVTVU1FOwor ICAgIH0gZWxzZSB7CisjaWZkZWYgQ0tTWVNMT0cKKwlpZiAoY2t4c3lzbG9nID49IFNZU0xHX1BS ICYmIGNreGxvZ2dpbmcpCisJICBja3N5c2xvZyhTWVNMR19QUiwxLCJzZXJ2ZXIiLAorCQkgICAi R0VUIC9SRUNVUlNJVkUgL0RFTEVURSIsKGNoYXIgKilzcnZjbWQpOworI2VuZGlmIC8qIENLU1lT TE9HICovCisJQkVHSU4gc3Npbml0OworICAgIH0KKyNlbmRpZiAvKiBOT1NFUlZFUiAqLworfQor ICAgIGJyZWFrOworY2FzZSAyMjoKKyAgICB7CQkJCS8qIEdFVCAvUkVDT1ZFUiAoUkVHRVQpICov CisjaWZuZGVmIE5PU0VSVkVSCisgICAgaWYgKHhfbG9naW4gJiYgIXhfbG9nZ2VkKSB7CisJZXJy cGt0KChDSEFSICopIkxvZ2luIHJlcXVpcmVkIik7CisJU0VSVkU7CisgICAgfSBlbHNlIGlmIChz Z2V0aW5pdCgxLDApIDwgMCkgeworCVJFU1VNRTsKKyAgICB9IGVsc2UgeworI2lmZGVmIENLU1lT TE9HCisJaWYgKGNreHN5c2xvZyA+PSBTWVNMR19QUiAmJiBja3hsb2dnaW5nKQorCSAgY2tzeXNs b2coU1lTTEdfUFIsIDEsICJzZXJ2ZXIiLCAiR0VUIC9SRUNPVkVSIiwgKGNoYXIgKilzcnZjbWQp OworI2VuZGlmIC8qIENLU1lTTE9HICovCisJQkVHSU4gc3Npbml0OworICAgIH0KKyNlbmRpZiAv KiBOT1NFUlZFUiAqLworfQorICAgIGJyZWFrOworY2FzZSAyMzoKKyAgICB7CQkJCS8qIEV4dGVu ZGVkIEdFVCAqLworI2lmbmRlZiBOT1NFUlZFUgorICAgIGlmICh4X2xvZ2luICYmICF4X2xvZ2dl ZCkgewkJLyogKGFueSBjb21iaW5hdGlvbiBvZiBvcHRpb25zKSAqLworCWVycnBrdCgoQ0hBUiAq KSJMb2dpbiByZXF1aXJlZCIpOworCVNFUlZFOworICAgIH0gZWxzZSBpZiAoKHggPSBzZ2V0aW5p dCgwLDEpKSA8IDApIHsKKwlkZWJ1ZyhGMTAxLCJDS0NQUk8gPHNlcnZlPk8gc2dldGluaXQgZmFp bCIsIiIseCk7CisJUkVTVU1FOworICAgIH0gZWxzZSBpZiAoeCA9PSAwKSB7CisJZGVidWcoRjEw MSwiQ0tDUFJPIDxzZXJ2ZT5PIHNnZXRpbml0IGRvbmUiLCIiLHgpOworI2lmZGVmIENLU1lTTE9H CisJaWYgKGNreHN5c2xvZyA+PSBTWVNMR19QUiAmJiBja3hsb2dnaW5nKQorCSAgY2tzeXNsb2co U1lTTEdfUFIsIDEsICJzZXJ2ZXIiLCAiRVhURU5ERUQgR0VUIiwgKGNoYXIgKilzcnZjbWQpOwor I2VuZGlmIC8qIENLU1lTTE9HICovCisJQkVHSU4gc3Npbml0OworICAgIH0gZWxzZSB7CQkJCS8q IE90aGVyd2lzZSBzdGF5IGluIHRoaXMgc3RhdGUgKi8KKwlkZWJ1ZyhGMTAxLCJDS0NQUk8gPHNl cnZlPk8gc2dldGluaXQgVEJDIiwiIix4KTsKKwlhY2soKTsKKwlCRUdJTiByb3BrdDsKKyAgICB9 CisjZW5kaWYgLyogTk9TRVJWRVIgKi8KK30KKyAgICBicmVhazsKK2Nhc2UgMjQ6CisgICAgewor I2lmbmRlZiBOT1NFUlZFUgorICAgIGlmICh4X2xvZ2luICYmICF4X2xvZ2dlZCkgewkJLyogKGFu eSBjb21iaW5hdGlvbiBvZiBvcHRpb25zKSAqLworCWVycnBrdCgoQ0hBUiAqKSJMb2dpbiByZXF1 aXJlZCIpOworCVNFUlZFOworICAgIH0gZWxzZSBpZiAoKHggPSBzZ2V0aW5pdCgwLDEpKSA8IDAp IHsKKwlkZWJ1ZyhGMTAxLCJDS0NQUk8gPHJvcGt0Pk8gc2dldGluaXQgZmFpbCIsIiIseCk7CisJ UkVTVU1FOworICAgIH0gZWxzZSBpZiAoeCA9PSAwKSB7CisJZGVidWcoRjEwMSwiQ0tDUFJPIDxy b3BrdD5PIHNnZXRpbml0IGRvbmUiLCIiLHgpOworI2lmZGVmIENLU1lTTE9HCisJaWYgKGNreHN5 c2xvZyA+PSBTWVNMR19QUiAmJiBja3hsb2dnaW5nKQorCSAgY2tzeXNsb2coU1lTTEdfUFIsIDEs ICJzZXJ2ZXIiLCAiRVhURU5ERUQgR0VUIiwgKGNoYXIgKilzcnZjbWQpOworI2VuZGlmIC8qIENL U1lTTE9HICovCisJQkVHSU4gc3Npbml0OworICAgIH0gZWxzZSB7CQkJCS8qIE90aGVyd2lzZSBz dGF5IGluIHRoaXMgc3RhdGUgKi8KKwlkZWJ1ZyhGMTAxLCJDS0NQUk8gPHJvcGt0Pk8gc2dldGlu aXQgVEJDIiwiIix4KTsKKwlhY2soKTsKKyAgICB9CisjZW5kaWYgLyogTk9TRVJWRVIgKi8KK30K KyAgICBicmVhazsKK2Nhc2UgMjU6CisgICAgewkJCQkvKiBHZW5lcmljIHNlcnZlciBjb21tYW5k ICovCisjaWZuZGVmIE5PU0VSVkVSCisgICAgc3J2cHRyID0gc3J2Y21kOwkJCS8qIFBvaW50IHRv IGNvbW1hbmQgYnVmZmVyICovCisgICAgZGVjb2RlKHJkYXRhcCxwdXRzcnYsMCk7CQkvKiBEZWNv ZGUgcGFja2V0IGRhdGEgaW50byBpdCAqLworICAgIHB1dHNydihOVUwpOwkJCS8qIEluc2VydCBh IGNvdXBsZSBudWxscyAqLworICAgIHB1dHNydihOVUwpOwkJCS8qIGZvciB0ZXJtaW5hdGlvbiAq LworICAgIGlmIChzcnZjbWRbMF0pIHsKKwlzc3RhdGUgPSBzcnZjbWRbMF07CQkvKiBTZXQgcmVx dWVzdGVkIHN0YXJ0IHN0YXRlICovCisJaWYgKHhfbG9naW4gJiYgIXhfbG9nZ2VkICYmCS8qIExv Z2luIHJlcXVpcmVkPyAqLworCSAgICAvKiBMb2dpbiwgTG9nb3V0LCBhbmQgSGVscCBhcmUgYWxs b3dlZCB3aGVuIG5vdCBsb2dnZWQgaW4gKi8KKwkgICAgc3N0YXRlICE9ICdJJyAmJiBzc3RhdGUg IT0gJ0wnICYmIHNzdGF0ZSAhPSAnSCcpIHsKKwkgICAgZXJycGt0KChDSEFSICopIkxvZ2luIHJl cXVpcmVkIik7CisJICAgIFNFUlZFOworCX0gZWxzZSB7CisJICAgIG5ha3N0YXRlID0gMDsJCS8q IE5vdyBJJ20gdGhlIHNlbmRlci4gKi8KKwkgICAgd2hhdCA9IFdfUkVNTzsJCS8qIERvaW5nIGEg UkVNT1RFIGNvbW1hbmQuICovCisjaWZkZWYgU1RSRUFNSU5HCisJICAgIGlmICghc3RyZWFtaW5n KQorI2VuZGlmIC8qIFNUUkVBTUlORyAqLworCSAgICAgIGlmICh0aW1pbnQgPCAxKQorCQl0aW1p bnQgPSBjaGt0aW1vKHJ0aW1vLHRpbWVmKTsgLyogU3dpdGNoIHRvIHBlci1wYWNrZXQgdGltZXIg Ki8KKwkgICAgYmluYXJ5ID0gWFlGVF9UOwkJLyogU3dpdGNoIHRvIHRleHQgbW9kZSAqLworCSAg ICBCRUdJTiBnZW5lcmljOwkJLyogU3dpdGNoIHRvIGdlbmVyaWMgY29tbWFuZCBzdGF0ZSAqLwor CX0KKyAgICB9IGVsc2UgeworCWVycnBrdCgoQ0hBUiAqKSJCYWRseSBmb3JtZWQgc2VydmVyIGNv bW1hbmQiKTsgLyogcmVwb3J0IGVycm9yICovCisJUkVTVU1FOwkJCS8qICYgZ28gYmFjayB0byBz ZXJ2ZXIgY29tbWFuZCB3YWl0ICovCisgICAgfQorI2VuZGlmIC8qIE5PU0VSVkVSICovCit9Cisg ICAgYnJlYWs7CitjYXNlIDI2OgorICAgIHsJCQkJLyogUmVjZWl2ZSBIb3N0IGNvbW1hbmQgKi8K KyNpZm5kZWYgTk9TRVJWRVIKKyAgICBpZiAoeF9sb2dpbiAmJiAheF9sb2dnZWQpIHsKKwllcnJw a3QoKENIQVIgKikiTG9naW4gcmVxdWlyZWQiKTsKKwlTRVJWRTsKKyAgICB9IGVsc2UgaWYgKCFF TkFCTEVEKGVuX2hvcykpIHsKKwllcnJwa3QoKENIQVIgKikiUkVNT1RFIEhPU1QgZGlzYWJsZWQi KTsKKwlSRVNVTUU7CisgICAgfSBlbHNlIGlmIChub3B1c2gpIHsKKwllcnJwa3QoKENIQVIgKiki SE9TVCBjb21tYW5kcyBub3QgYXZhaWxhYmxlIik7CisJUkVTVU1FOworICAgIH0gZWxzZSB7CisJ c3J2cHRyID0gc3J2Y21kOwkJLyogUG9pbnQgdG8gY29tbWFuZCBidWZmZXIgKi8KKwlkZWNvZGUo cmRhdGFwLHB1dHNydiwwKTsJLyogRGVjb2RlIGNvbW1hbmQgcGFja2V0IGludG8gaXQgKi8KKwlw dXRzcnYoTlVMKTsJCQkvKiBOdWxsLXRlcm1pbmF0ZSAqLworCW5ha3N0YXRlID0gMDsJCQkvKiBO b3cgc2VuZGluZywgbm90IHJlY2VpdmluZyAqLworCWJpbmFyeSA9IFhZRlRfVDsJCS8qIFN3aXRj aCB0byB0ZXh0IG1vZGUgKi8KKwlpZiAoc3lzY21kKChjaGFyICopc3J2Y21kLCIiKSkgeyAvKiBU cnkgdG8gZXhlY3V0ZSB0aGUgY29tbWFuZCAqLworCSAgICB3aGF0ID0gV19SRU1POwkJLyogRG9p bmcgYSBSRU1PVEUgY29tbWFuZC4gKi8KKyNpZmRlZiBTVFJFQU1JTkcKKwkgICAgaWYgKCFzdHJl YW1pbmcpCisjZW5kaWYgLyogU1RSRUFNSU5HICovCisJICAgICAgaWYgKHRpbWludCA8IDEpCisJ CXRpbWludCA9IGNoa3RpbW8ocnRpbW8sdGltZWYpOyAvKiBTd2l0Y2ggdG8gcGVyLXBhY2tldCB0 aW1lciAqLworI2lmZGVmIENLU1lTTE9HCisJICAgIGlmIChja3hzeXNsb2cgPj0gU1lTTEdfUFIg JiYgY2t4bG9nZ2luZykKKwkgICAgICBja3N5c2xvZyhTWVNMR19QUiwgMSwgInNlcnZlciIsICJS RU1PVEUgSE9TVCIsIChjaGFyICopc3J2Y21kKTsKKyNlbmRpZiAvKiBDS1NZU0xPRyAqLworCSAg ICBCRUdJTiBzc2luaXQ7CQkvKiBJZiBPSywgc2VuZCBiYWNrIGl0cyBvdXRwdXQgKi8KKwl9IGVs c2UgewkJCS8qIE90aGVyd2lzZSAqLworCSAgICBlcnJwa3QoKENIQVIgKikiQ2FuJ3QgZG8gc3lz dGVtIGNvbW1hbmQiKTsgLyogcmVwb3J0IGVycm9yICovCisJICAgIFJFU1VNRTsJCQkvKiAmIGdv IGJhY2sgdG8gc2VydmVyIGNvbW1hbmQgd2FpdCAqLworCX0KKyAgICB9CisjZW5kaWYgLyogTk9T RVJWRVIgKi8KK30KKyAgICBicmVhazsKK2Nhc2UgMjc6CisgICAgewkJCQkvKiBJbnRlcnJ1cHRl ZCBvciBjb25uZWN0aW9uIGxvc3QgKi8KKyAgICByYyA9IHNydl90aW1lb3V0KCk7CisgICAgZGVi dWcoRjEwMSwic3J2X3RpbWVvdXQiLCIiLHJjKTsKKyAgICBpZiAocmMgPiAtMSkgcmV0dXJuKHJj KTsJCS8qIChzZWUgYmVsb3cpICovCit9CisgICAgYnJlYWs7CitjYXNlIDI4OgorICAgIHsJCQkJ LyogU2VydmVyIGdvdCBhIE5BSyBpbiBjb21tYW5kLXdhaXQgKi8KKyNpZm5kZWYgTk9TRVJWRVIK KyAgICBlcnJwa3QoKENIQVIgKikiRGlkIHlvdSBzYXkgUkVDRUlWRSBpbnN0ZWFkIG9mIEdFVD8i KTsKKyAgICBSRVNVTUU7CisjZW5kaWYgLyogTk9TRVJWRVIgKi8KK30KKyAgICBicmVhazsKK2Nh c2UgMjk6CisgICAgewkJCQkvKiBBbnkgb3RoZXIgY29tbWFuZCBpbiB0aGlzIHN0YXRlICovCisj aWZuZGVmIE5PU0VSVkVSCisgICAgaWYgKGMgIT0gKCdFJyAtIFNQKSAmJiBjICE9ICgnWScgLSBT UCkpIC8qIGV4Y2VwdCBFIGFuZCBZIHBhY2tldHMuICovCisgICAgICBlcnJwa3QoKENIQVIgKiki VW5pbXBsZW1lbnRlZCBzZXJ2ZXIgZnVuY3Rpb24iKTsKKyAgICAvKiBJZiB3ZSBhbnN3ZXIgYW4g RSB3aXRoIGFuIEUsIHdlIGdldCBhbiBpbmZpbml0ZSBsb29wLiAqLworICAgIC8qIEEgWSAoQUNL KSBjYW4gc2hvdyB1cCBoZXJlIGlmIHdlIHNlbnQgYmFjayBhIHNob3J0LWZvcm0gcmVwbHkgdG8g Ki8KKyAgICAvKiBhIEcgcGFja2V0IGFuZCBpdCB3YXMgZWNob2VkLiAgQUNLcyBjYW4gYmUgc2Fm ZWx5IGlnbm9yZWQgaGVyZS4gKi8KKyAgICBSRVNVTUU7CQkJCS8qIEdvIGJhY2sgdG8gc2VydmVy IGNvbW1hbmQgd2FpdC4gKi8KKyNlbmRpZiAvKiBOT1NFUlZFUiAqLworfQorICAgIGJyZWFrOwor Y2FzZSAzMDoKKyAgICB7CQkJCS8qIExvZ2luL091dCAqLworICAgIHJjID0gc3J2X2xvZ2luKCk7 CisgICAgZGVidWcoRjEwMSwiPGdlbmVyaWM+SSBzcnZfbG9naW4iLCIiLHJjKTsKKyAgICBpZiAo cmMgPiAtMSkgcmV0dXJuKHJjKTsJCS8qIChzZWUgYmVsb3cpICovCit9CisgICAgYnJlYWs7Citj YXNlIDMxOgorICAgIHsJCQkJLyogR290IFJFTU9URSBDRCBjb21tYW5kICovCisjaWZuZGVmIE5P U0VSVkVSCisjaWZkZWYgQ0tTWVNMT0cKKyAgICBpZiAoY2t4c3lzbG9nID49IFNZU0xHX1BSICYm IGNreGxvZ2dpbmcpCisgICAgICBja3N5c2xvZyhTWVNMR19QUiwgMSwgInNlcnZlciIsICJSRU1P VEUgQ0QiLCAoY2hhciAqKXNydmNtZCk7CisjZW5kaWYgLyogQ0tTWVNMT0cgKi8KKyAgICBpZiAo IUVOQUJMRUQoZW5fY3dkKSkgeworCWVycnBrdCgoQ0hBUiAqKSJSRU1PVEUgQ0QgZGlzYWJsZWQi KTsKKwlSRVNVTUU7CisgICAgfSBlbHNlIHsKKwljaGFyICogcCA9IE5VTEw7CisJeCA9IGN3ZCgo Y2hhciAqKShzcnZjbWQrMSkpOwkvKiBUcnkgdG8gY2hhbmdlIGRpcmVjdG9yeSAqLworI2lmZGVm IElLU0RCCisJaWYgKGlrZGJvcGVuKSBzbG90c3RhdGUod2hhdCwiUkVNT1RFIENEIiwgKGNoYXIg Kikoc3J2Y21kKzIpLCAiIik7CisjZW5kaWYgLyogSUtTREIgKi8KKwlpZiAoIXgpIHsJCQkvKiBG YWlsZWQgKi8KKwkgICAgZXJycGt0KChDSEFSICopIkNhbid0IGNoYW5nZSBkaXJlY3RvcnkiKTsK KwkgICAgUkVTVU1FOwkJCS8qIEJhY2sgdG8gc2VydmVyIGNvbW1hbmQgd2FpdCAqLworCX0gZWxz ZSBpZiAoeCA9PSAyKSB7CQkvKiBVc2VyIHdhbnRzIG1lc3NhZ2UgKi8KKwkgICAgaWYgKCFFTkFC TEVEKGVuX3R5cCkpIHsJLyogTWVzc2FnZXMgKFJFTU9URSBUWVBFKSBkaXNhYmxlZD8gKi8KKwkJ ZXJycGt0KChDSEFSICopIlJFTU9URSBUWVBFIGRpc2FibGVkIik7CisJCVJFU1VNRTsKKwkgICAg fSBlbHNlIHsJCQkvKiBUWVBFIGlzIGVuYWJsZWQgKi8KKwkJaW50IGk7CisJCWZvciAoaSA9IDA7 IGkgPCA4OyBpKyspIHsKKwkJICAgIGlmICh6Y2hraShjZG1zZ2ZpbGVbaV0pID4gLTEpIHsKKwkJ CWJyZWFrOworCQkgICAgfQorCQl9CisJCWJpbmFyeSA9IFhZRlRfVDsJLyogVXNlIHRleHQgbW9k ZSBmb3IgdGhpcy4gKi8KKwkJaWYgKGkgPCA4ICYmIHNuZHR5cGUoY2Rtc2dmaWxlW2ldKSkgeyAv KiBIYXZlIHJlYWRtZSBmaWxlPyAqLworCQkgICAgQkVHSU4gc3Npbml0OwkvKiBPSyAqLworCQl9 IGVsc2UgewkJLyogbm90IE9LICovCisJCSAgICBwID0gemd0ZGlyKCk7CisJCSAgICBpZiAoIXAp IHAgPSAiIjsKKwkJICAgIHN1Y2Nlc3MgPSAoKnApID8gMSA6IDA7CisJCSAgICBhY2sxKChDSEFS ICopcCk7CS8qIEFDSyB3aXRoIG5ldyBkaXJlY3RvcnkgbmFtZSAqLworCQkgICAgc3VjY2VzcyA9 IDE7CisJCSAgICBSRVNVTUU7CQkvKiB3YWl0IGZvciBuZXh0IHNlcnZlciBjb21tYW5kICovCisJ CX0KKwkgICAgfQorCX0gZWxzZSB7CQkJLyogVXNlciBkb2Vzbid0IHdhbnQgbWVzc2FnZSAqLwor CSAgICBwID16Z3RkaXIoKTsKKwkgICAgaWYgKCFwKSBwID0gIiI7CisJICAgIHN1Y2Nlc3MgPSAo KnApID8gMSA6IDA7CisJICAgIGFjazEoKENIQVIgKilwKTsKKwkgICAgc3VjY2VzcyA9IDE7CisJ ICAgIFJFU1VNRTsJCQkvKiBXYWl0IGZvciBuZXh0IHNlcnZlciBjb21tYW5kICovCisJfQorICAg IH0KKyNlbmRpZiAvKiBOT1NFUlZFUiAqLworfQorICAgIGJyZWFrOworY2FzZSAzMjoKKyAgICB7 CQkJCS8qIEdvdCBSRU1PVEUgUFdEIGNvbW1hbmQgKi8KKyNpZm5kZWYgTk9TRVJWRVIKKyNpZmRl ZiBDS1NZU0xPRworICAgIGlmIChja3hzeXNsb2cgPj0gU1lTTEdfUFIgJiYgY2t4bG9nZ2luZykK KyAgICAgIGNrc3lzbG9nKFNZU0xHX1BSLCAxLCAic2VydmVyIiwgIlJFTU9URSBQV0QiLCBOVUxM KTsKKyNlbmRpZiAvKiBDS1NZU0xPRyAqLworICAgIGlmICghRU5BQkxFRChlbl9jd2QpKSB7CisJ ZXJycGt0KChDSEFSICopIlJFTU9URSBDRCBkaXNhYmxlZCIpOworCVJFU1VNRTsKKyAgICB9IGVs c2UgeworCWlmIChlbmNzdHIoKENIQVIgKil6Z3RkaXIoKSkgPiAtMSkgeyAvKiBFbmNvZGUgY3Vy cmVudCBkaXJlY3RvcnkgKi8KKwkgICAgYWNrMShkYXRhKTsJCQkvKiBJZiBpdCBmaXRzLCBzZW5k IGl0IGJhY2sgaW4gQUNLICovCisJICAgIHN1Y2Nlc3MgPSAxOworCX0gZWxzZSB7CQkJLyogRmFp bGVkICovCisJICAgIGFjaygpOwkJCS8qIFNlbmQgZW1wdHkgQUNLICovCisJICAgIHN1Y2Nlc3Mg PSAwOwkJLyogYW5kIGluZGljYXRlIGZhaWx1cmUgbG9jYWxseSAqLworCX0KKwlSRVNVTUU7CQkJ CS8qIEJhY2sgdG8gc2VydmVyIGNvbW1hbmQgd2FpdCAqLworICAgIH0KKyNlbmRpZiAvKiBOT1NF UlZFUiAqLworfQorICAgIGJyZWFrOworY2FzZSAzMzoKKyAgICB7CQkJCS8qIFJFTU9URSBESVJF Q1RPUlkgY29tbWFuZCAqLworI2lmbmRlZiBOT1NFUlZFUgorICAgIGNoYXIgKm4yOworI2lmZGVm IENLU1lTTE9HCisgICAgaWYgKGNreHN5c2xvZyA+PSBTWVNMR19QUiAmJiBja3hsb2dnaW5nKQor ICAgICAgY2tzeXNsb2coU1lTTEdfUFIsIDEsICJzZXJ2ZXIiLCAiUkVNT1RFIERJUkVDVE9SWSIs IChjaGFyICopc3J2Y21kKTsKKyNlbmRpZiAvKiBDS1NZU0xPRyAqLworICAgIGlmICghRU5BQkxF RChlbl9kaXIpKSB7CQkvKiBJZiBESVIgaXMgZGlzYWJsZWQsICovCisJZXJycGt0KChDSEFSICop IlJFTU9URSBESVJFQ1RPUlkgZGlzYWJsZWQiKTsgLyogcmVmdXNlLiAqLworCVJFU1VNRTsKKyAg ICB9IGVsc2UgewkJCQkvKiBESVIgaXMgZW5hYmxlZC4gKi8KKyNpZmRlZiBJS1NEQgorCWlmIChp a2Rib3Blbikgc2xvdHN0YXRlKHdoYXQsIlJFTU9URSBESVIiLCAoY2hhciAqKShzcnZjbWQrMiks ICIiKTsKKyNlbmRpZiAvKiBJS1NEQiAqLworCWlmICghRU5BQkxFRChlbl9jd2QpKSB7CQkvKiBC dXQgQ1dEIGlzIGRpc2FibGVkICovCisJICAgIHpzdHJpcCgoY2hhciAqKShzcnZjbWQrMiksJm4y KTsgLyogYW5kIHRoZXkgaW5jbHVkZWQgYSBwYXRobmFtZSwgKi8KKwkgICAgaWYgKHN0cmNtcCgo Y2hhciAqKShzcnZjbWQrMiksbjIpKSB7IC8qIHNvIHJlZnVzZS4gKi8KKwkJZXJycGt0KChDSEFS ICopIkFjY2VzcyBkZW5pZWQiKTsKKwkJUkVTVU1FOwkJCS8qIFJlbWVtYmVyLCB0aGlzIGlzIG5v dCBhIGdvdG8hICovCisJICAgIH0KKwl9CisJaWYgKHN0YXRlID09IGdlbmVyaWMpIHsJCQkvKiBJ dCdzIE9LIHRvIGdvIGFoZWFkLiAqLworI2lmZGVmIENPTU1FTlQKKwkgICAgbjIgPSAoKihzcnZj bWQrMikpID8gRElSQ01EIDogRElSQ00yOworCSAgICBpZiAoc3lzY21kKG4yLChjaGFyICopKHNy dmNtZCsyKSkpICAvKiBJZiBpdCBjYW4gYmUgZG9uZSAqLworI2Vsc2UKKwkgICAgaW50IHg7CisJ ICAgIGlmICgoeCA9IHNuZGRpcigoY2hhciopKHNydmNtZCsyKSkpID4gMCkKKyNlbmRpZiAvKiBD T01NRU5UICovCisJICAgIHsKKwkJQkVHSU4gc3Npbml0OwkJLyogc2VuZCB0aGUgcmVzdWx0cyBi YWNrOyAqLworCSAgICB9IGVsc2UgewkJCS8qIG90aGVyd2lzZSAqLworCQlpZiAoeCA8IDApCisJ CSAgZXJycGt0KChDSEFSICopIk5vIGZpbGVzIG1hdGNoIik7CisJCWVsc2UKKwkJICBlcnJwa3Qo KENIQVIgKikiQ2FuJ3QgbGlzdCBkaXJlY3RvcnkiKTsKKwkJUkVTVU1FOwkJCS8qIHJldHVybiB0 byBzZXJ2ZXIgY29tbWFuZCB3YWl0ICovCisJICAgIH0KKwl9CisgICAgfQorI2VuZGlmIC8qIE5P U0VSVkVSICovCit9CisgICAgYnJlYWs7CitjYXNlIDM0OgorICAgIHsJCQkJLyogUkVNT1RFIERF TEVURSAoRXJhc2UpICovCisjaWZuZGVmIE5PU0VSVkVSCisgICAgY2hhciAqbjI7CisjaWZkZWYg Q0tTWVNMT0cKKyAgICBpZiAoY2t4c3lzbG9nID49IFNZU0xHX1BSICYmIGNreGxvZ2dpbmcpCisg ICAgICBja3N5c2xvZyhTWVNMR19QUiwgMSwgInNlcnZlciIsICJSRU1PVEUgREVMRVRFIiwgKGNo YXIgKilzcnZjbWQpOworI2VuZGlmIC8qIENLU1lTTE9HICovCisgICAgaWYgKCFFTkFCTEVEKGVu X2RlbCkpIHsKKwllcnJwa3QoKENIQVIgKikiUkVNT1RFIERFTEVURSBkaXNhYmxlZCIpOworCVJF U1VNRTsKKyAgICB9IGVsc2UgewkJCQkvKiBERUxFVEUgaXMgZW5hYmxlZCAqLworI2lmZGVmIElL U0RCCisJaWYgKGlrZGJvcGVuKSBzbG90c3RhdGUod2hhdCwiUkVNT1RFIERFTEVURSIsIChjaGFy ICopKHNydmNtZCsyKSwgIiIpOworI2VuZGlmIC8qIElLU0RCICovCisJaWYgKCFFTkFCTEVEKGVu X2N3ZCkpIHsJCS8qIGJ1dCBDV0QgaXMgZGlzYWJsZWQgKi8KKwkgICAgenN0cmlwKChjaGFyICop KHNydmNtZCsyKSwmbjIpOyAvKiBhbmQgdGhleSBpbmNsdWRlZCBhIHBhdGhuYW1lLCAqLworCSAg ICBpZiAoc3RyY21wKChjaGFyICopKHNydmNtZCsyKSxuMikpIHsgLyogc28gcmVmdXNlLiAqLwor CQllcnJwa3QoKENIQVIgKikiQWNjZXNzIGRlbmllZCIpOworCQlSRVNVTUU7CQkJLyogUmVtZW1i ZXIsIHRoaXMgaXMgbm90IGEgZ290byEgKi8KKwkgICAgfQorCX0gZWxzZSBpZiAoaXNkaXIoKGNo YXIgKikoc3J2Y21kKzIpKSkgeyAvKiBBIGRpcmVjdG9yeSBuYW1lPyAqLworCSAgICBlcnJwa3Qo KENIQVIgKikiSXQncyBhIGRpcmVjdG9yeSIpOworCSAgICBSRVNVTUU7CisJfQorCWlmIChzdGF0 ZSA9PSBnZW5lcmljKSB7CQkvKiBJdCdzIE9LIHRvIGdvIGFoZWFkLiAqLworCSAgICBpbnQgeDsK KwkgICAgaWYgKCh4ID0gc25kZGVsKChjaGFyKikoc3J2Y21kKzIpKSkgPiAwKSB7CisJCUJFR0lO IHNzaW5pdDsJCS8qIElmIE9LIHNlbmQgcmVzdWx0cyBiYWNrICovCisJICAgIH0gZWxzZSB7CQkJ Lyogb3RoZXJ3aXNlICovCisJCWlmICh4IDwgMCkKKwkJICBlcnJwa3QoKENIQVIgKikiRmlsZSBu b3QgZm91bmQiKTsgLyogcmVwb3J0IGZhaWx1cmUgKi8KKwkJZWxzZQorCQkgIGVycnBrdCgoQ0hB UiAqKSJERUxFVEUgZmFpbGVkIik7CisJCVJFU1VNRTsJCQkvKiAmIHJldHVybiB0byBzZXJ2ZXIg Y29tbWFuZCB3YWl0ICovCisJICAgIH0KKwl9CisgICAgfQorI2VuZGlmIC8qIE5PU0VSVkVSICov Cit9CisgICAgYnJlYWs7CitjYXNlIDM1OgorICAgIHsJCQkJLyogRklOSVNIICovCisjaWZuZGVm IE5PU0VSVkVSCisjaWZkZWYgQ0tTWVNMT0cKKyAgICBpZiAoY2t4c3lzbG9nID49IFNZU0xHX1BS ICYmIGNreGxvZ2dpbmcpCisgICAgICBja3N5c2xvZyhTWVNMR19QUiwgMSwgInNlcnZlciIsICJG SU5JU0giLCBOVUxMKTsKKyNlbmRpZiAvKiBDS1NZU0xPRyAqLworI2lmZGVmIElLU0RCCisgICAg aWYgKGlrZGJvcGVuKSBzbG90c3RhdGUod2hhdCwiU0VSVkVSIEZJTklTSCIsICIiLCAiIik7Cisj ZW5kaWYgLyogSUtTREIgKi8KKyAgICBpZiAoIUVOQUJMRUQoZW5fZmluKSkgeworCWVycnBrdCgo Q0hBUiAqKSJGSU5JU0ggZGlzYWJsZWQiKTsKKwlSRVNVTUU7CisgICAgfSBlbHNlIHsKKwlhY2so KTsJCQkJLyogQWNrbm93bGVkZ2UgKi8KKwl4eHNjcmVlbihTQ1JfVEMsMCwwTCwiIik7CS8qIERp c3BsYXkgKi8KKwlzdWNjZXNzID0gMTsKKwlyZXR1cm4oMCk7CQkJLyogRG9uZSAqLworICAgIH0K KyNlbmRpZiAvKiBOT1NFUlZFUiAqLworfQorICAgIGJyZWFrOworY2FzZSAzNjoKKyAgICB7CQkJ CS8qIEVYSVQgKi8KKyNpZm5kZWYgTk9TRVJWRVIKKyNpZmRlZiBDS1NZU0xPRworICAgIGlmIChj a3hzeXNsb2cgPj0gU1lTTEdfUFIgJiYgY2t4bG9nZ2luZykKKyAgICAgIGNrc3lzbG9nKFNZU0xH X1BSLCAxLCAic2VydmVyIiwgIlJFTU9URSBFWElUIiwgTlVMTCk7CisjZW5kaWYgLyogQ0tTWVNM T0cgKi8KKyNpZmRlZiBJS1NEQgorICAgIGlmIChpa2Rib3Blbikgc2xvdHN0YXRlKHdoYXQsIlJF TU9URSBFWElUIiwgIiIsICIiKTsKKyNlbmRpZiAvKiBJS1NEQiAqLworICAgIGlmICghRU5BQkxF RChlbl94aXQpKSB7CisJZXJycGt0KChDSEFSICopIkVYSVQgZGlzYWJsZWQiKTsKKwlSRVNVTUU7 CisgICAgfSBlbHNlIHsKKwlhY2soKTsJCQkJLyogQWNrbm93bGVkZ2UgKi8KKwl4eHNjcmVlbihT Q1JfVEMsMCwwTCwiIik7CS8qIERpc3BsYXkgKi8KKwlkb2V4aXQoR09PRF9FWElULHhpdHN0YSk7 CisgICAgfQorI2VuZGlmIC8qIE5PU0VSVkVSICovCit9CisgICAgYnJlYWs7CitjYXNlIDM3Ogor ICAgIHsJCQkJLyogQllFIChMb2dvdXQpICovCisjaWZuZGVmIE5PU0VSVkVSCisjaWZkZWYgQ0tT WVNMT0cKKyAgICBpZiAoY2t4c3lzbG9nID49IFNZU0xHX1BSICYmIGNreGxvZ2dpbmcpCisgICAg ICBja3N5c2xvZyhTWVNMR19QUiwgMSwgInNlcnZlciIsICJCWUUiLCBOVUxMKTsKKyNlbmRpZiAv KiBDS1NZU0xPRyAqLworI2lmZGVmIElLU0RCCisgICAgaWYgKGlrZGJvcGVuKSBzbG90c3RhdGUo d2hhdCwiU0VSVkVSIEJZRSIsICIiLCAiIik7CisjZW5kaWYgLyogSUtTREIgKi8KKyAgICBpZiAo IUVOQUJMRUQoZW5fYnllKSkgeworCWVycnBrdCgoQ0hBUiAqKSJCWUUgZGlzYWJsZWQiKTsKKwlS RVNVTUU7CisgICAgfSBlbHNlIHsKKwlhY2soKTsJCQkJLyogQWNrbm93bGVkZ2UgKi8KKwlzdWNj ZXNzID0gMTsKKwltc2xlZXAoNzUwKTsJCQkvKiBHaXZlIHRoZSBBQ0sgdGltZSB0byBnZXQgb3V0 ICovCisJaWYgKGxvY2FsKQorCSAgdHRyZXMoKTsJCQkvKiBSZXNldCB0aGUgdGVybWluYWwgKi8K Kwl4eHNjcmVlbihTQ1JfVEMsMCwwTCwiIik7CS8qIERpc3BsYXkgKi8KKwlkb2NsZWFuKDEpOwkJ CS8qIENsZWFuIHVwIGZpbGVzLCBldGMgKi8KKyNpZmRlZiBERUJVRworCWRlYnVnKEYxMDAsIkMt S2VybWl0IEJZRSAtIExvZ2dpbiBvdXQuLi4iLCIiLDApOworCXpjbG9zZShaREZJTEUpOworI2Vu ZGlmIC8qIERFQlVHICovCisjaWZkZWYgSUtTRAorI2lmZGVmIENLX0xPR0lOCisJaWYgKGluc2Vy dmVyKQorCSAgY2t4bG9nb3V0KCk7CisJZWxzZQorI2VuZGlmIC8qIENLX0xPR0lOICovCisjZW5k aWYgLyogSUtTRCAqLworI2lmZGVmIFRDUFNPQ0tFVAorI2lmbmRlZiBOT0xJU1RFTgorCSAgaWYg KG5ldHdvcmsgJiYgdGNwc3JmZCA+IDAgJiYgIWluc2VydmVyKQorCSAgICBkb2V4aXQoR09PRF9F WElULHhpdHN0YSk7CisJZWxzZQorI2VuZGlmIC8qIE5PTElTVEVOICovCisjZW5kaWYgLyogVENQ U09DS0VUICovCisJICByZXR1cm4oemtzZWxmKCkpOwkJLyogVHJ5IHRvIGxvZyBzZWxmIG91dCAq LworICAgIH0KKyNlbmRpZiAvKiBOT1NFUlZFUiAqLworfQorICAgIGJyZWFrOworY2FzZSAzODoK KyAgICB7CQkJCS8qIFJFTU9URSBIRUxQICovCisjaWZkZWYgQ0tTWVNMT0cKKyAgICBpZiAoY2t4 c3lzbG9nID49IFNZU0xHX1BSICYmIGNreGxvZ2dpbmcpCisgICAgICBja3N5c2xvZyhTWVNMR19Q UiwgMSwgInNlcnZlciIsICJSRU1PVEUgSEVMUCIsIE5VTEwpOworI2VuZGlmIC8qIENLU1lTTE9H ICovCisjaWZkZWYgSUtTREIKKyAgICBpZiAoaWtkYm9wZW4pIHNsb3RzdGF0ZSh3aGF0LCJSRU1P VEUgSEVMUCIsICIiLCAiIik7CisjZW5kaWYgLyogSUtTREIgKi8KKyNpZm5kZWYgTk9TRVJWRVIK KyAgICBpZiAoc25kaGxwKCkpIHsKKwlCRUdJTiBzc2luaXQ7CQkJLyogdHJ5IHRvIHNlbmQgaXQg Ki8KKyAgICB9IGVsc2UgewkJCQkvKiBJZiBub3Qgb2ssICovCisJZXJycGt0KChDSEFSICopIkNh bid0IHNlbmQgaGVscCIpOyAvKiBzZW5kIGVycm9yIG1lc3NhZ2UgaW5zdGVhZCAqLworCVJFU1VN RTsJCQkJLyogYW5kIHJldHVybiB0byBzZXJ2ZXIgY29tbWFuZCB3YWl0ICovCisgICAgfQorI2Vu ZGlmIC8qIE5PU0VSVkVSICovCit9CisgICAgYnJlYWs7CitjYXNlIDM5OgorICAgIHsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogUkVNT1RFIFJFTkFNRSAqLworICAgIHJjID0gc3J2X3Jl bmFtZSgpOworICAgIGRlYnVnKEYxMDEsInNydl9yZW5hbWUiLCIiLHJjKTsKKyAgICBpZiAocmMg PiAtMSkgcmV0dXJuKHJjKTsJCS8qIChzZWUgYmVsb3cpICovCit9CisgICAgYnJlYWs7CitjYXNl IDQwOgorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUkVNT1RFIENPUFkgKi8K KyAgICByYyA9IHNydl9jb3B5KCk7CisgICAgZGVidWcoRjEwMSwic3J2X2NvcHkiLCIiLHJjKTsK KyAgICBpZiAocmMgPiAtMSkgcmV0dXJuKHJjKTsJCS8qIChzZWUgYmVsb3cpICovCit9CisgICAg YnJlYWs7CitjYXNlIDQxOgorICAgIHsJCQkJLyogUkVNT1RFIFNFVCAqLworI2lmZGVmIENLU1lT TE9HCisgICAgaWYgKGNreHN5c2xvZyA+PSBTWVNMR19QUiAmJiBja3hsb2dnaW5nKQorICAgICAg Y2tzeXNsb2coU1lTTEdfUFIsIDEsICJzZXJ2ZXIiLCAiUkVNT1RFIFNFVCIsIChjaGFyICopc3J2 Y21kKTsKKyNlbmRpZiAvKiBDS1NZU0xPRyAqLworI2lmbmRlZiBOT1NFUlZFUgorI2lmZGVmIElL U0RCCisgICAgaWYgKGlrZGJvcGVuKSBzbG90c3RhdGUod2hhdCwiUkVNT1RFIFNFVCIsIChjaGFy ICopKHNydmNtZCsxKSwgIiIpOworI2VuZGlmIC8qIElLU0RCICovCisgICAgaWYgKCFFTkFCTEVE KGVuX3NldCkpIHsKKwllcnJwa3QoKENIQVIgKikiUkVNT1RFIFNFVCBkaXNhYmxlZCIpOworCVJF U1VNRTsKKyAgICB9IGVsc2UgeworCWlmIChyZW1zZXQoKGNoYXIgKikoc3J2Y21kKzEpKSkgeyAv KiBUcnkgdG8gZG8gd2hhdCB0aGV5IGFzayAqLworCSAgICBzdWNjZXNzID0gMTsKKwkgICAgYWNr KCk7CQkJLyogSWYgT0ssIHRoZW4gYWNrbm93bGVkZ2UgKi8KKwl9IGVsc2UJCQkJLyogT3RoZXJ3 aXNlICovCisJICBlcnJwa3QoKENIQVIgKikiVW5rbm93biBSRU1PVEUgU0VUIHBhcmFtZXRlciIp OyAvKiBnaXZlIGVycm9yIG1zZyAqLworCVJFU1VNRTsJCQkJLyogUmV0dXJuIHRvIHNlcnZlciBj b21tYW5kIHdhaXQgKi8KKyAgICB9CisjZW5kaWYgLyogTk9TRVJWRVIgKi8KK30KKyAgICBicmVh azsKK2Nhc2UgNDI6CisgICAgewkJCQkvKiBSRU1PVEUgVFlQRSAqLworI2lmbmRlZiBOT1NFUlZF UgorICAgIGNoYXIgKm4yOworI2lmZGVmIENLU1lTTE9HCisgICAgaWYgKGNreHN5c2xvZyA+PSBT WVNMR19QUiAmJiBja3hsb2dnaW5nKQorICAgICAgY2tzeXNsb2coU1lTTEdfUFIsIDEsICJzZXJ2 ZXIiLCAiUkVNT1RFIFRZUEUiLCAoY2hhciAqKXNydmNtZCk7CisjZW5kaWYgLyogQ0tTWVNMT0cg Ki8KKyAgICBpZiAoIUVOQUJMRUQoZW5fdHlwKSkgeworCWVycnBrdCgoQ0hBUiAqKSJSRU1PVEUg VFlQRSBkaXNhYmxlZCIpOworCVJFU1VNRTsKKyAgICB9IGVsc2UgeworI2lmZGVmIElLU0RCCisJ aWYgKGlrZGJvcGVuKSBzbG90c3RhdGUod2hhdCwiUkVNT1RFIFRZUEUiLCAoY2hhciAqKShzcnZj bWQrMiksICIiKTsKKyNlbmRpZiAvKiBJS1NEQiAqLworCWlmICghRU5BQkxFRChlbl9jd2QpKSB7 CQkvKiBJZiBDV0QgZGlzYWJsZWQgKi8KKwkgICAgenN0cmlwKChjaGFyICopKHNydmNtZCsyKSwm bjIpOyAvKiBhbmQgdGhleSBpbmNsdWRlZCBhIHBhdGhuYW1lLCAqLworCSAgICBpZiAoc3RyY21w KChjaGFyICopKHNydmNtZCsyKSxuMikpIHsgLyogcmVmdXNlLiAqLworCQllcnJwa3QoKENIQVIg KikiQWNjZXNzIGRlbmllZCIpOworCQlSRVNVTUU7CQkJLyogUmVtZW1iZXIsIHRoaXMgaXMgbm90 IGEgZ290byEgKi8KKwkgICAgfQorCX0KKwlpZiAoc3RhdGUgPT0gZ2VuZXJpYykgewkJLyogSXQn cyBPSyB0byBnbyBhaGVhZC4gKi8KKwkgICAgYmluYXJ5ID0gWFlGVF9UOwkJLyogVXNlIHRleHQg bW9kZSBmb3IgdGhpcy4gKi8KKwkgICAgaWYgKAkJCS8qIChSRVNVTUUgZGlkbid0IGNoYW5nZSBz dGF0ZSkgKi8KKyNpZmRlZiBDT01NRU5UCisJICAgICAgc3lzY21kKFRZUENNRCwoY2hhciAqKShz cnZjbWQrMikpCS8qIE9sZCB3YXkgKi8KKyNlbHNlCisJICAgICAgc25kdHlwZSgoY2hhciAqKShz cnZjbWQrMikpIC8qIE5ldyB3YXkgKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisJCSkKKwkgICAg ICBCRUdJTiBzc2luaXQ7CQkvKiBPSyAqLworCSAgICBlbHNlIHsJCQkvKiBub3QgT0sgKi8KKwkJ ZXJycGt0KChDSEFSICopIkNhbid0IHR5cGUgZmlsZSIpOyAvKiBnaXZlIGVycm9yIG1lc3NhZ2Ug Ki8KKwkJUkVTVU1FOwkJCS8qIHdhaXQgZm9yIG5leHQgc2VydmVyIGNvbW1hbmQgKi8KKwkgICAg fQorCX0KKyAgICB9CisjZW5kaWYgLyogTk9TRVJWRVIgKi8KK30KKyAgICBicmVhazsKK2Nhc2Ug NDM6CisgICAgewkJCQkvKiBSRU1PVEUgTUtESVIgKi8KKyNpZm5kZWYgTk9TRVJWRVIKKyNpZmRl ZiBDS19NS0RJUgorI2lmZGVmIENLU1lTTE9HCisgICAgaWYgKGNreHN5c2xvZyA+PSBTWVNMR19Q UiAmJiBja3hsb2dnaW5nKQorICAgICAgY2tzeXNsb2coU1lTTEdfUFIsIDEsICJzZXJ2ZXIiLCAi UkVNT1RFIE1LRElSIiwgKGNoYXIgKilzcnZjbWQpOworI2VuZGlmIC8qIENLU1lTTE9HICovCisj aWZkZWYgSUtTREIKKyAgICBpZiAoaWtkYm9wZW4pIHNsb3RzdGF0ZSh3aGF0LCJSRU1PVEUgTUtE SVIiLCAoY2hhciAqKShzcnZjbWQrMiksICIiKTsKKyNlbmRpZiAvKiBJS1NEQiAqLworICAgIGlm ICghRU5BQkxFRChlbl9ta2QpKSB7CisJZXJycGt0KChDSEFSICopIlJFTU9URSBNS0RJUiBkaXNh YmxlZCIpOworCVJFU1VNRTsKKyAgICB9IGVsc2UgaWYgKCFFTkFCTEVEKGVuX2N3ZCkpIHsJLyog SWYgQ1dEIGRpc2FibGVkICovCisJZXJycGt0KChDSEFSICopIkRpcmVjdG9yeSBhY2Nlc3MgcmVz dHJpY3RlZCIpOworCVJFU1VNRTsJCQkJLyogUmVtZW1iZXIsIHRoaXMgaXMgbm90IGEgZ290byEg Ki8KKyAgICB9CisgICAgaWYgKHN0YXRlID09IGdlbmVyaWMpIHsJCS8qIE9LIHRvIGdvIGFoZWFk LiAqLworCWNoYXIgKnAgPSBOVUxMOworCXggPSBja21rZGlyKDAsKGNoYXIgKikoc3J2Y21kKzIp LCZwLDAsMSk7IC8qIE1ha2UgdGhlIGRpcmVjdG9yeSAqLworCWlmICghcCkgcCA9ICIiOworCWlm ICh4ID4gLTEpIHsKKwkgICAgZW5jc3RyKChDSEFSICopcCk7CQkvKiBPSyAtIGVuY29kZSB0aGUg bmFtZSAqLworCSAgICBhY2sxKGRhdGEpOwkJCS8qIFNlbmQgc2hvcnQtZm9ybSByZXNwb25zZSAq LworCSAgICBzdWNjZXNzID0gMTsKKwkgICAgUkVTVU1FOworCX0gZWxzZSB7CQkJLyogbm90IE9L ICovCisJICAgIGlmICghKnApIHAgPSAiRGlyZWN0b3J5IGNyZWF0aW9uIGZhaWx1cmUiOworCSAg ICBlcnJwa3QoKENIQVIgKilwKTsJCS8qIGdpdmUgZXJyb3IgbWVzc2FnZSAqLworCSAgICBSRVNV TUU7CQkJLyogV2FpdCBmb3IgbmV4dCBzZXJ2ZXIgY29tbWFuZCAqLworCX0KKyAgICB9CisjZWxz ZQorICAgIGVycnBrdCgoQ0hBUiAqKSJSRU1PVEUgTUtESVIgbm90IGF2YWlsYWJsZSIpOworICAg IFJFU1VNRTsKKyNlbmRpZiAvKiBDS19NS0RJUiAqLworI2VuZGlmIC8qIE5PU0VSVkVSICovCit9 CisgICAgYnJlYWs7CitjYXNlIDQ0OgorICAgIHsJCQkJLyogUkVNT1RFIFJNRElSICovCisjaWZu ZGVmIE5PU0VSVkVSCisjaWZkZWYgQ0tfTUtESVIKKyNpZmRlZiBDS1NZU0xPRworICAgIGlmIChj a3hzeXNsb2cgPj0gU1lTTEdfUFIgJiYgY2t4bG9nZ2luZykKKyAgICAgIGNrc3lzbG9nKFNZU0xH X1BSLCAxLCAic2VydmVyIiwgIlJFTU9URSBSTURJUiIsIChjaGFyICopc3J2Y21kKTsKKyNlbmRp ZiAvKiBDS1NZU0xPRyAqLworI2lmZGVmIElLU0RCCisgICAgaWYgKGlrZGJvcGVuKSBzbG90c3Rh dGUod2hhdCwiUkVNT1RFIFJNRElSIiwgKGNoYXIgKikoc3J2Y21kKzIpLCAiIik7CisjZW5kaWYg LyogSUtTREIgKi8KKyAgICBpZiAoIUVOQUJMRUQoZW5fcm1kKSkgeworCWVycnBrdCgoQ0hBUiAq KSJSRU1PVEUgUk1ESVIgZGlzYWJsZWQiKTsKKwlSRVNVTUU7CisgICAgfSBlbHNlIGlmICghRU5B QkxFRChlbl9jd2QpKSB7CS8qIElmIENXRCBkaXNhYmxlZCAqLworCWVycnBrdCgoQ0hBUiAqKSJE aXJlY3RvcnkgYWNjZXNzIHJlc3RyaWN0ZWQiKTsKKwlSRVNVTUU7CQkJCS8qIFJlbWVtYmVyLCB0 aGlzIGlzIG5vdCBhIGdvdG8hICovCisgICAgfQorICAgIGlmIChzdGF0ZSA9PSBnZW5lcmljKSB7 CQkvKiBPSyB0byBnbyBhaGVhZC4gKi8KKwljaGFyICpwID0gTlVMTDsKKwl4ID0gY2tta2Rpcigx LChjaGFyICopKHNydmNtZCsyKSwmcCwwLDEpOworCWlmICghcCkgcCA9ICIiOworCWlmICh4ID4g LTEpIHsKKwkgICAgZW5jc3RyKChDSEFSICopcCk7CQkvKiBPSyAtIGVuY29kZSB0aGUgbmFtZSAq LworCSAgICBhY2sxKGRhdGEpOwkJCS8qIFNlbmQgc2hvcnQtZm9ybSByZXNwb25zZSAqLworCSAg ICBzdWNjZXNzID0gMTsKKwkgICAgUkVTVU1FOworCX0gZWxzZSB7CQkJLyogbm90IE9LICovCisJ ICAgIGlmICghKnApIHAgPSAiRGlyZWN0b3J5IHJlbW92YWwgZmFpbHVyZSI7CisJICAgIGVycnBr dCgoQ0hBUiAqKXApOwkJLyogZ2l2ZSBlcnJvciBtZXNzYWdlICovCisJICAgIFJFU1VNRTsJCQkv KiBXYWl0IGZvciBuZXh0IHNlcnZlciBjb21tYW5kICovCisJfQorICAgIH0KKyNlbHNlCisgICAg ZXJycGt0KChDSEFSICopIlJFTU9URSBSTURJUiBub3QgYXZhaWxhYmxlIik7CisgICAgUkVTVU1F OworI2VuZGlmIC8qIENLX01LRElSICovCisjZW5kaWYgLyogTk9TRVJWRVIgKi8KK30KKyAgICBi cmVhazsKK2Nhc2UgNDU6CisgICAgewkJCQkvKiBSRU1PVEUgU1BBQ0UgKi8KKyNpZm5kZWYgTk9T RVJWRVIKKyNpZmRlZiBDS1NZU0xPRworICAgIGlmIChja3hzeXNsb2cgPj0gU1lTTEdfUFIgJiYg Y2t4bG9nZ2luZykKKyAgICAgIGNrc3lzbG9nKFNZU0xHX1BSLCAxLCAic2VydmVyIiwgIlJFTU9U RSBTUEFDRSIsIChjaGFyICopc3J2Y21kKTsKKyNlbmRpZiAvKiBDS1NZU0xPRyAqLworICAgIGlm ICghRU5BQkxFRChlbl9zcGEpKSB7CisJZXJycGt0KChDSEFSICopIlJFTU9URSBTUEFDRSBkaXNh YmxlZCIpOworCVJFU1VNRTsKKyAgICB9IGVsc2UgeworCXggPSBzcnZjbWRbMV07CQkJLyogR2V0 IGFyZWEgdG8gY2hlY2sgKi8KKwl4ID0gKCh4ID09IE5VTCkgfHwgKHggPT0gU1ApCisjaWZkZWYg T1MyCisJICAgICB8fCAoeCA9PSAnIScpIHx8IChzcnZjbWRbM10gPT0gJzonKQorI2VuZGlmIC8q IE9TMiAqLworCSAgICAgKTsKKyNpZmRlZiBJS1NEQgorCWlmIChpa2Rib3Blbikgc2xvdHN0YXRl KHdoYXQsCisJCQkgICAgICAiUkVNT1RFIFNQQUNFIiwKKwkJCSAgICAgICh4ID8gIiIgOiAoY2hh ciAqKXNydmNtZCksCisJCQkgICAgICAiIgorCQkJICAgICAgKTsKKyNlbmRpZiAvKiBJS1NEQiAq LworCWlmICgheCAmJiAhRU5BQkxFRChlbl9jd2QpKSB7CS8qIENXRCBkaXNhYmxlZCAqLworCSAg ICBlcnJwa3QoKENIQVIgKikiQWNjZXNzIGRlbmllZCIpOyAvKiBhbmQgbm9uLWRlZmF1bHQgYXJl YSBnaXZlbiwgKi8KKwkgICAgUkVTVU1FOwkJCS8qIHJlZnVzZS4gKi8KKwl9IGVsc2UgeworI2lm ZGVmIE9TMgorX1BST1RPVFlQKGludCBzbmRzcGFjZSwoaW50KSk7CisJICAgIGlmIChzbmRzcGFj ZSh4ID8gdG91cHBlcihzcnZjbWRbMl0pIDogMCkpIHsKKwkJQkVHSU4gc3Npbml0OwkJLyogc2Vu ZCB0aGUgcmVwb3J0LiAqLworCSAgICB9IGVsc2UgewkJCS8qIElmIG5vdCBvaywgKi8KKwkJZXJy cGt0KChDSEFSICopIkNhbid0IHNlbmQgc3BhY2UiKTsgLyogc2VuZCBlcnJvciBtZXNzYWdlICov CisJCVJFU1VNRTsJCQkvKiBhbmQgcmV0dXJuIHRvIHNlcnZlciBjb21tYW5kIHdhaXQgKi8KKwkg ICAgfQorI2Vsc2UKKyAgICAgICAgICAgIGlmIChub3B1c2gpCisgICAgICAgICAgICAgIHggPSAw OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICB4ID0gKHggPyBzeXNjbWQoU1BBQ01E LCIiKSA6IHN5c2NtZChTUEFDTTIsKGNoYXIgKikoc3J2Y21kKzIpKSk7CisJICAgIGlmICh4KSB7 CQkJLyogSWYgd2UgZ290IHRoZSBpbmZvICovCisJCUJFR0lOIHNzaW5pdDsJCS8qIHNlbmQgaXQg Ki8KKwkgICAgfSBlbHNlIHsJCQkvKiBvdGhlcndpc2UgKi8KKwkJZXJycGt0KChDSEFSICopIkNh bid0IGNoZWNrIHNwYWNlIik7IC8qIHNlbmQgZXJyb3IgbWVzc2FnZSAqLworCQlSRVNVTUU7CQkJ LyogYW5kIGF3YWl0IG5leHQgc2VydmVyIGNvbW1hbmQgKi8KKwkgICAgfQorI2VuZGlmIC8qIE9T MiAqLworCX0KKyAgICB9CisjZW5kaWYgLyogTk9TRVJWRVIgKi8KK30KKyAgICBicmVhazsKK2Nh c2UgNDY6CisgICAgewkJCQkvKiBSRU1PVEUgV0hPICovCisjaWZuZGVmIE5PU0VSVkVSCisjaWZk ZWYgQ0tTWVNMT0cKKyAgICBpZiAoY2t4c3lzbG9nID49IFNZU0xHX1BSICYmIGNreGxvZ2dpbmcp CisgICAgICBja3N5c2xvZyhTWVNMR19QUiwgMSwgInNlcnZlciIsICJSRU1PVEUgV0hPIiwgKGNo YXIgKilzcnZjbWQpOworI2VuZGlmIC8qIENLU1lTTE9HICovCisjaWZkZWYgSUtTREIKKyAgICBp ZiAoaWtkYm9wZW4pIHNsb3RzdGF0ZSh3aGF0LCJSRU1PVEUgV0hPIiwgKGNoYXIgKikoc3J2Y21k KzIpLCAiIik7CisjZW5kaWYgLyogSUtTREIgKi8KKyAgICBpZiAoIUVOQUJMRUQoZW5fd2hvKSkg eworCWVycnBrdCgoQ0hBUiAqKSJSRU1PVEUgV0hPIGRpc2FibGVkIik7CisJUkVTVU1FOworICAg IH0gZWxzZSB7CisjaWZkZWYgT1MyCitfUFJPVE9UWVAoaW50IHNuZHdobywoY2hhciAqKSk7CisJ ICAgIGlmIChzbmR3aG8oKGNoYXIgKikoc3J2Y21kKzIpKSkgeworCQlCRUdJTiBzc2luaXQ7CQkv KiB0cnkgdG8gc2VuZCBpdCAqLworCSAgICB9IGVsc2UgewkJCS8qIElmIG5vdCBvaywgKi8KKwkJ ZXJycGt0KChDSEFSICopIkNhbid0IGRvIHdobyBjb21tYW5kIik7IC8qIHNlbmQgZXJyb3IgbXNn ICovCisJCVJFU1VNRTsJCQkvKiBhbmQgcmV0dXJuIHRvIHNlcnZlciBjb21tYW5kIHdhaXQgKi8K KwkgICAgfQorI2Vsc2UKKwlpZiAoc3lzY21kKFdIT0NNRCwoY2hhciAqKShzcnZjbWQrMikpKSB7 CisJICAgIEJFR0lOIHNzaW5pdDsKKwl9IGVsc2UgeworCSAgICBlcnJwa3QoKENIQVIgKikiQ2Fu J3QgZG8gd2hvIGNvbW1hbmQiKTsKKwkgICAgUkVTVU1FOworCX0KKyNlbmRpZiAvKiBPUzIgKi8K KyAgICB9CisjZW5kaWYgLyogTk9TRVJWRVIgKi8KK30KKyAgICBicmVhazsKK2Nhc2UgNDc6Cisg ICAgewkJCQkvKiBWYXJpYWJsZSBxdWVyeSBvciBzZXQgKi8KKyAgICByYyA9IHNydl9xdWVyeSgp OworICAgIGRlYnVnKEYxMDEsInNydl9xdWVyeSIsIiIscmMpOworICAgIGlmIChyYyA+IC0xKSBy ZXR1cm4ocmMpOworfQorICAgIGJyZWFrOworY2FzZSA0ODoKKyAgICB7CQkJCS8qIFJFTU9URSBN RVNTQUdFIGNvbW1hbmQgKi8KKyNpZm5kZWYgTk9TRVJWRVIKKyAgICBkZWJ1ZyhGMTEwLCJSTVNH IiwoY2hhciAqKXNydmNtZCsyLDApOworICAgIHh4c2NyZWVuKFNDUl9NUywwLDBMLChjaGFyICop KHNydmNtZCsyKSk7CisgICAgYWNrKCk7CisgICAgUkVTVU1FOworI2VuZGlmCS8qIE5PU0VSVkVS ICovCit9CisgICAgYnJlYWs7CitjYXNlIDQ5OgorICAgIHsJCQkJLyogSW50ZXJydXB0ZWQgb3Ig Y29ubmVjdGlvbiBsb3N0ICovCisjaWZuZGVmIE5PU0VSVkVSCisgICAgaWYgKGZhdGFsaW8pIHsJ CQkvKiBDb25uZWN0aW9uIGxvc3QgKi8KKyNpZmRlZiBDS1NZU0xPRworCWlmIChja3hzeXNsb2cg Pj0gU1lTTEdfUFIgJiYgY2t4bG9nZ2luZykKKwkgIGNrc3lzbG9nKFNZU0xHX1BSLCAxLCAic2Vy dmVyIiwgIkludGVycnVwdGVkIiwgTlVMTCk7CisjZW5kaWYgLyogQ0tTWVNMT0cgKi8KKwlzdWNj ZXNzID0gMDsKKwl4aXRzdGEgfD0gKHdoYXQgJiBXX0tFUk1JVCk7CisJUVVJVDsKKyAgICB9IGVs c2UgaWYgKGludGVycnVwdGVkKSB7CisJaWYgKCFFTkFCTEVEKGVuX2ZpbikpIHsJCS8qIEN0cmwt QyB0eXBlZCAqLworCSAgICBlcnJwa3QoKENIQVIgKikiUVVJVCBkaXNhYmxlZCIpOworCSAgICBS RVNVTUU7CisJfSBlbHNlIHsKKyNpZmRlZiBDS1NZU0xPRworCSAgICBpZiAoY2t4c3lzbG9nID49 IFNZU0xHX1BSICYmIGNreGxvZ2dpbmcpCisJICAgICAgY2tzeXNsb2coU1lTTEdfUFIsIDEsICJz ZXJ2ZXIiLCAiSW50ZXJydXB0ZWQiLCBOVUxMKTsKKyNlbmRpZiAvKiBDS1NZU0xPRyAqLworCSAg ICBzdWNjZXNzID0gMDsKKwkgICAgeGl0c3RhIHw9ICh3aGF0ICYgV19LRVJNSVQpOworCSAgICBR VUlUOworCX0KKyAgICB9IGVsc2UgewkJCQkvKiBTaG91bGRuJ3QgaGFwcGVuICovCisJZGVidWco RjEwMCwiU0VSVkVSIChnZW5lcmljKSBHT1QgVU5FWFBFQ1RFRCAncSciLCIiLDApOworCVFVSVQ7 CisgICAgfQorI2VuZGlmIC8qIE5PU0VSVkVSICovCit9CisgICAgYnJlYWs7CitjYXNlIDUwOgor ICAgIHsJCQkJLyogQW55dGhpbmcgZWxzZSBpbiB0aGlzIHN0YXRlLi4uICovCisjaWZuZGVmIE5P U0VSVkVSCisgICAgZXJycGt0KChDSEFSICopIlVuaW1wbGVtZW50ZWQgUkVNT1RFIGNvbW1hbmQi KTsgLyogQ29tcGxhaW4gKi8KKyAgICBSRVNVTUU7CQkJCS8qIGFuZCByZXR1cm4gdG8gc2VydmVy IGNvbW1hbmQgd2FpdCAqLworI2VuZGlmIC8qIE5PU0VSVkVSICovCit9CisgICAgYnJlYWs7Citj YXNlIDUxOgorICAgIHsJCQkJLyogU2VudCBCWUUgYW5kIGNvbm5lY3Rpb24gYnJva2VuICovCisg ICAgaWYgKGJ5ZV9hY3RpdmUgJiYgdHRjaGsoKSA8IDApIHsKKwltc2xlZXAoNTAwKTsKKwlieWVf YWN0aXZlID0gMDsKKwl0dGNsb3MoMCk7CQkJLyogQ2xvc2Ugb3VyIGVuZCBvZiB0aGUgY29ubmVj dGlvbiAqLworCWNsc29mKDApOworCXJldHVybihzdWNjZXNzID0gMSk7CisgICAgfSBlbHNlIHsJ CQkJLyogT3RoZXIgZ2VuZXJpYyBjb21tYW5kICovCisJcmV0dXJuKHN1Y2Nlc3MgPSAwKTsJCS8q IG9yIGNvbm5lY3Rpb24gbm90IGJyb2tlbiAqLworICAgIH0KK30KKyAgICBicmVhazsKK2Nhc2Ug NTI6CisgICAgewkJCQkvKiBTaG9ydC1Gb3JtIHJlcGx5ICovCisgICAgcmMgPSByY3Zfc2hvcnRy ZXBseSgpOworICAgIGRlYnVnKEYxMDEsIjxyZ2VuPlkgcmN2X3Nob3J0cmVwbHkiLCIiLHJjKTsK KyAgICBpZiAocmMgPiAtMSkgcmV0dXJuKHJjKTsKK30KKyAgICBicmVhazsKK2Nhc2UgNTM6Cisg ICAgewkJCQkvKiBGaWxlIGhlYWRlciAqLworICAgIC8qIGNoYXIgKm4yOyAqLworICAgIGV4dGVy biBpbnQgcnNuOworICAgIGRlYnVnKEYxMDEsIjxyZmlsZT5GIHdpbmxvIDEiLCIiLHdpbmxvKTsK KyAgICB4ZmxnID0gMDsJCQkJLyogTm90IHNjcmVlbiBkYXRhICovCisgICAgaWYgKCFjenNlZW4p CisgICAgICBjYW5jZWwgPSAwOwkJCS8qIFJlc2V0IGNhbmNlbGxhdGlvbiBjb3VudGVyICovCisj aWZkZWYgQ0FMSUJSQVRFCisgICAgaWYgKGRlc3QgPT0gREVTVF9OKQorICAgICAgY2FsaWJyYXRl ID0gMTsKKyNlbmRpZiAvKiBDQUxJQlJBVEUgKi8KKyAgICBpZiAoIXJjdmZpbChmaWxuYW0pKSB7 CQkvKiBGaWd1cmUgb3V0IGxvY2FsIGZpbGVuYW1lICovCisJZXJycGt0KChDSEFSICopcmZfZXJy KTsJCS8qIFRyb3VibGUgKi8KKwlSRVNVTUU7CisgICAgfSBlbHNlIHsJCQkJLyogUmVhbCBmaWxl LCBPSyB0byByZWNlaXZlICovCisJY2hhciAqIGZucDsKKwlkZWJ1ZyhGMTExLCI8cmZpbGU+RiB3 aW5sbyAyIixmc3BlYyx3aW5sbyk7CisJaWYgKGZpbGNudCA9PSAxKQkJLyogcmN2ZmlsIHNldCB0 aGlzIHRvIDEgZm9yIDFzdCBmaWxlICovCisJICBjcmMxNiA9IDBMOwkJCS8qIENsZWFyIGZpbGUg Q1JDICovCisJZm5wID0gZnNwZWM7CQkJLyogVGhpcyBpcyB0aGUgZnVsbCBwYXRoICovCisJaWYg KHNlcnZlciAmJiAhRU5BQkxFRChlbl9jd2QpIHx8IC8qIGlmIERJU0FCTEUgQ0QgKi8KKwkgICAg IWZhY2twYXRoCQkJICAvKiBvciBGLUFDSy1QQVRIIE9GRiAqLworCSAgICApIHsKKwkgICAgenN0 cmlwKGZzcGVjLCZmbnApOwkJLyogZG9uJ3Qgc2VuZCBiYWNrIGZ1bGwgcGF0aCAqLworCX0KKwll bmNzdHIoKENIQVIgKilmbnApOworCWlmIChmYWNrYnVnKQorCSAgYWNrKCk7CisJZWxzZQorCSAg YWNrMShkYXRhKTsJCQkvKiBTZW5kIGl0IGJhY2sgaW4gQUNLICovCisJaW5pdGF0dHIoJmlhdHRy KTsJCS8qIENsZWFyIGZpbGUgYXR0cmlidXRlIHN0cnVjdHVyZSAqLworCXN0cmVhbW9uKCk7CisJ aWYgKHdpbmRvdyh3c2xvdG4pIDwgMCkgewkvKiBBbGxvY2F0ZSBuZWdvdGlhdGVkIHdpbmRvdyBz bG90cyAqLworCSAgICBlcnJwa3QoKENIQVIgKikiQ2FuJ3Qgb3BlbiB3aW5kb3ciKTsKKwkgICAg UkVTVU1FOworCX0KKyNpZmRlZiBJS1NEQgorCWlmIChpa2Rib3Blbikgc2xvdHN0YXRlKHdoYXQs CisJCQkgICAgICBzZXJ2ZXIgPyAiU0VSVkVSIiA6ICIiLAorCQkJICAgICAgIlJFQ0VJVkUiLAor CQkJICAgICAgZnNwZWMKKwkJCSAgICAgICk7CisjZW5kaWYgLyogSUtTREIgKi8KKwlCRUdJTiBy YXR0cjsJCQkvKiBOb3cgZXhwZWN0IEF0dHJpYnV0ZSBwYWNrZXRzICovCisgICAgfQorfQorICAg IGJyZWFrOworY2FzZSA1NDoKKyAgICB7CQkJCS8qIFgtcGFja2V0IGluc3RlYWQgb2YgZmlsZSBo ZWFkZXIgKi8KKyAgICB4ZmxnID0gMTsJCQkJLyogU2NyZWVuIGRhdGEgKi8KKyAgICBpZiAoIWN6 c2VlbikKKyAgICAgIGNhbmNlbCA9IDA7CQkJLyogUmVzZXQgY2FuY2VsbGF0aW9uIGNvdW50ZXIg Ki8KKyAgICBhY2soKTsJCQkJLyogQWNrbm93bGVkZ2UgdGhlIFgtcGFja2V0ICovCisgICAgaW5p dGF0dHIoJmlhdHRyKTsJCQkvKiBJbml0aWFsaXplIGF0dHJpYnV0ZSBzdHJ1Y3R1cmUgKi8KKyAg ICBzdHJlYW1vbigpOworICAgIGlmICh3aW5kb3cod3Nsb3RuKSA8IDApIHsJCS8qIGFsbG9jYXRl IG5lZ290aWF0ZWQgd2luZG93IHNsb3RzICovCisJZXJycGt0KChDSEFSICopIkNhbid0IG9wZW4g d2luZG93Iik7CisJUkVTVU1FOworICAgIH0KKyNpZm5kZWYgTk9TUEwKKyAgICBpZiAocXVlcnkp IHsJCQkvKiBJZiB0aGlzIGlzIHRoZSByZXNwb25zZSB0byAqLworCXFidWZwID0gcXVlcnlidWY7 CQkvKiBhIHF1ZXJ5IHRoYXQgd2Ugc2VudCwgaW5pdGlhbGl6ZSAqLworCXFidWZuID0gMDsJCQkv KiB0aGUgcmVzcG9uc2UgYnVmZmVyICovCisJcXVlcnlidWZbMF0gPSBOVUw7CisgICAgfQorI2Vu ZGlmIC8qIE5PU1BMICovCisgICAgd2hhdCA9IFdfUkVNTzsJCQkvKiB3ZSdyZSBkb2luZyBhIFJF TU9URSBjb21tYW5kICovCisjaWZkZWYgSUtTREIKKyAgICBpZiAoaWtkYm9wZW4pIHNsb3RzdGF0 ZSh3aGF0LAorCQkJICBzZXJ2ZXIgPyAiU0VSVkVSIiA6ICIiLAorCQkJICAiUkVDRUlWRSIsCisJ CQkgIGZzcGVjCisJCQkgICk7CisjZW5kaWYgLyogSUtTREIgKi8KKyAgICBCRUdJTiByYXR0cjsJ CQkvKiBFeHBlY3QgQXR0cmlidXRlIHBhY2tldHMgKi8KK30KKyAgICBicmVhazsKK2Nhc2UgNTU6 CisgICAgewkJCQkvKiBBdHRyaWJ1dGUgcGFja2V0ICovCisgICAgaWYgKGdhdHRyKHJkYXRhcCwm aWF0dHIpID09IDApIHsJLyogUmVhZCBpbnRvIGF0dHJpYnV0ZSBzdHJ1Y3R1cmUgKi8KKyNpZmRl ZiBDS19SRVNFTkQKKwlhY2sxKChDSEFSICopaWF0dHIucmVwbHkudmFsKTsJLyogUmVwbHkgd2l0 aCBkYXRhICovCisjZWxzZQorCWFjaygpOwkJCQkvKiBJZiBPSywgYWNrbm93bGVkZ2UgKi8KKyNl bmRpZiAvKiBDS19SRVNFTkQgKi8KKyAgICB9IGVsc2UgewkJCQkvKiBPdGhlcndpc2UgKi8KKwll eHRlcm4gbG9uZyBmc2l6ZTsKKwljaGFyICpyOworCXIgPSBnZXRyZWFzb24oaWF0dHIucmVwbHku dmFsKTsKKwlhY2sxKChDSEFSICopaWF0dHIucmVwbHkudmFsKTsJLyogcmVmdXNlIHRvIGFjY2Vw dCB0aGUgZmlsZSAqLworCXh4c2NyZWVuKFNDUl9TVCxTVF9SRUZVLDBMLHIpOwkvKiByZWFzb24g Ki8KKyNpZmRlZiBUTE9HCisJaWYgKHRyYWxvZyAmJiAhdGxvZ2ZtdCkKKwkgIGRveGxvZyh3aGF0 LGZpbG5hbSxmc2l6ZSxiaW5hcnksMSxyKTsKKyNlbmRpZiAvKiBUTE9HICovCisgICAgfQorfQor ICAgIGJyZWFrOworY2FzZSA1NjoKKyAgICB7CQkJCS8qIEZpcnN0IGRhdGEgcGFja2V0ICovCisg ICAgZGVidWcoRjEwMCwiPHJhdHRyPiBEIGZpcnN0ZGF0YSIsIiIsMCk7CisgICAgcmMgPSByY3Zf Zmlyc3RkYXRhKCk7CisgICAgZGVidWcoRjEwMSwicmN2X2ZpcnN0ZGF0YSByYyIsIiIscmMpOwor ICAgIGlmIChyYyA+IC0xKSByZXR1cm4ocmMpOwkJLyogKHNlZSBiZWxvdykgKi8KK30KKyAgICBi cmVhazsKK2Nhc2UgNTc6CisgICAgewkJCQkvKiBFT1QsIG5vIG1vcmUgZmlsZXMgKi8KKyAgICBh Y2soKTsJCQkJLyogQWNrbm93bGVkZ2UgdGhlIEIgcGFja2V0ICovCisgICAgcmVvdCgpOwkJCQkv KiBEbyBFT1QgdGhpbmdzICovCisjaWZkZWYgQ0tfVE1QRElSCisvKiBJZiB3ZSB3ZXJlIGNkJ2Qg dGVtcG9yYXJpbHkgdG8gYW5vdGhlciBkZXZpY2Ugb3IgZGlyZWN0b3J5IC4uLiAqLworICAgIGlm IChmX3RtcGRpcikgeworCWludCB4OworCXggPSB6Y2hkaXIoKGNoYXIgKikgc2F2ZGlyKTsJLyog Li4uIHJlc3RvcmUgcHJldmlvdXMgZGlyZWN0b3J5ICovCisJZl90bXBkaXIgPSAwOwkJCS8qIGFu ZCByZW1lbWJlciB3ZSBkaWQgaXQuICovCisJZGVidWcoRjExMSwiY2tjcHJvLncgQiB0bXBkaXIg cmVzdG9yaW5nIixzYXZkaXIseCk7CisgICAgfQorI2VuZGlmIC8qIENLX1RNUERJUiAqLworICAg IFJFU1VNRTsJCQkJLyogYW5kIHF1aXQgKi8KK30KKyAgICBicmVhazsKK2Nhc2UgNTg6CisgICAg ewkJCQkvKiBHb3QgRGF0YSBwYWNrZXQgKi8KKyAgICBkZWJ1ZyhGMTAxLCI8cmRwa3Q+RCBjeHNl ZW4iLCIiLGN4c2Vlbik7CisgICAgZGVidWcoRjEwMSwiPHJkcGt0PkQgY3pzZWVuIiwiIixjenNl ZW4pOworICAgIGlmIChjeHNlZW4gfHwgY3pzZWVuIHx8IGRpc2NhcmQpIHsJLyogSWYgZmlsZSBv ciBncm91cCBpbnRlcnJ1cHRpb24gKi8KKwlDSEFSICogbXNnOworCW1zZyA9IGN6c2VlbiA/IChD SEFSICopIloiIDogKENIQVIgKikiWCI7CisjaWZkZWYgU1RSRUFNSU5HCisJaWYgKHN0cmVhbWlu ZykgewkJLyogTmVlZCB0byBjYW5jZWwgKi8KKwkgICAgZGVidWcoRjExMSwiPHJkcGt0PkQgc3Ry ZWFtaW5nIGNhbmNlbCIsbXNnLGNhbmNlbCk7CisJICAgIGlmIChjYW5jZWwrKyA9PSAwKSB7CS8q IE9ubHkgZG8gdGhpcyBvbmNlICovCisJCWFjazEobXNnKTsJCS8qIFB1dCAiWCIgb3IgIloiIGlu IEFDSyAqLworCSAgICB9IGVsc2UgaWYgKGN6c2VlbikgeworCQllcnJwa3QoKENIQVIgKikiVXNl ciBjYW5jZWxlZCIpOworCQlSRVNVTUU7CisJICAgIH0gZWxzZSB7CisJCWZhc3RhY2soKTsKKwkg ICAgfQorCX0gZWxzZQorI2VuZGlmIC8qIFNUUkVBTUlORyAqLworCSAgYWNrMShtc2cpOworICAg IH0gZWxzZSB7CQkJCS8qIE5vIGludGVycnVwdGlvbiAqLworCWludCByYywgcWY7CisjaWZuZGVm IE5PU1BMCisJcWYgPSBxdWVyeTsKKyNlbHNlCisJcWYgPSAwOworI2VuZGlmIC8qIE5PU1BMICov CisjaWZkZWYgQ0tUVU5JTkcKKwlyYyA9IChiaW5hcnkgJiYgIXBhcml0eSkgPworCSAgYmRlY29k ZShyZGF0YXAscHV0ZmlsKToKKwkgICAgZGVjb2RlKHJkYXRhcCwgcWYgPyBwdXR0cm0gOiBwdXRm aWwsIDEpOworI2Vsc2UKKwlyYyA9IGRlY29kZShyZGF0YXAsIHFmID8gcHV0dHJtIDogcHV0Zmls LCAxKTsKKyNlbmRpZiAvKiBDS1RVTklORyAqLworCWlmIChyYyA8IDApIHsKKwkgICAgZGlzY2Fy ZCA9IChrZWVwID09IDAgfHwgKGtlZXAgPT0gU0VUX0FVVE8gJiYgYmluYXJ5ICE9IFhZRlRfVCkp OworCSAgICBlcnJwa3QoKENIQVIgKikiRXJyb3Igd3JpdGluZyBkYXRhIik7IC8qIElmIGZhaWx1 cmUsICovCisJICAgIFJFU1VNRTsKKwl9IGVsc2UJCQkJLyogRGF0YSB3cml0dGVuIE9LLCBzZW5k IEFDSyAqLworI2lmZGVmIFNUUkVBTUlORworCSAgaWYgKHN0cmVhbWluZykKKwkgICAgZmFzdGFj aygpOworCWVsc2UKKyNlbmRpZiAvKiBTVFJFQU1JTkcgKi8KKwkgIGFjaygpOworICAgIH0KK30K KyAgICBicmVhazsKK2Nhc2UgNTk6CisgICAgewkJCQkvKiBFT0YgaW1tZWRpYXRlbHkgYWZ0ZXIg QS1QYWNrZXQuICovCisgICAgcmZfZXJyID0gIkNhbid0IGNyZWF0ZSBmaWxlIjsKKyAgICB0aW1p bnQgPSBzX3RpbWludDsKKyAgICBpZiAoZGlzY2FyZCkgewkJCS8qIERpc2NhcmRpbmcgYSByZWFs IGZpbGUuLi4gKi8KKwl4ID0gMTsKKyAgICB9IGVsc2UgaWYgKHhmbGcpIHsJCQkvKiBJZiBzY3Jl ZW4gZGF0YSAqLworCWlmIChyZW1maWxlKSB7CQkJLyogcmVkaXJlY3RlZCB0byBmaWxlICovCisJ ICAgIGlmIChyZW1waXBlKQkJLyogb3IgcGlwZSAqLworCSAgICAgIHggPSBvcGVuYyhaT0ZJTEUs cmVtZGVzdCk7IC8qIFBpcGU6IHN0YXJ0IGNvbW1hbmQgKi8KKwkgICAgZWxzZQorCSAgICAgIHgg PSBvcGVuYShyZW1kZXN0LCZpYXR0cik7IC8qIEZpbGU6IG9wZW4gd2l0aCBhdHRyaWJ1dGVzICov CisJfSBlbHNlIHsJCQkvKiBvdGhlcndpc2UgKi8KKwkgICAgeCA9IG9wZW50KCZpYXR0cik7CQkv KiAib3BlbiIgdGhlIHNjcmVlbiAqLworCX0KKyNpZmRlZiBDQUxJQlJBVEUKKyAgICB9IGVsc2Ug aWYgKGNhbGlicmF0ZSkgewkJLyogSWYgY2FsaWJyYXRpb24gcnVuICovCisJeCA9IGNrb3Blbngo JmlhdHRyKTsJCS8qIGRvIHRoaXMgKi8KKyNlbmRpZiAvKiBDQUxJQlJBVEUgKi8KKyAgICB9IGVs c2UgewkJCQkvKiBvdGhlcndpc2UgKi8KKwl4ID0gb3BlbmEoZmlsbmFtLCZpYXR0cik7CS8qIG9w ZW4gdGhlIGZpbGUsIHdpdGggYXR0cmlidXRlcyAqLworCWlmICh4ID09IC0xNykgewkJCS8qIFJF R0VUIHNraXBwZWQgYmVjYXVzZSBzYW1lIHNpemUgKi8KKwkgICAgZGlzY2FyZCA9IDE7CisJICAg IHJlamVjdGlvbiA9IDE7CisJfQorICAgIH0KKyAgICBpZiAoIXggfHwgcmVvZihmaWxuYW0sICZp YXR0cikgPCAwKSB7IC8qIENsb3NlIG91dHB1dCBmaWxlICovCisJZXJycGt0KChDSEFSICopIHJm X2Vycik7CS8qIElmIHByb2JsZW0sIHNlbmQgZXJyb3IgbXNnICovCisJUkVTVU1FOwkJCQkvKiBh bmQgcXVpdCAqLworICAgIH0gZWxzZSB7CQkJCS8qIG90aGVyd2lzZSAqLworCWlmICh4ID09IC0x NykKKwkgIHh4c2NyZWVuKFNDUl9TVCxTVF9TS0lQLFNLUF9SRVMsIiIpOworCWFjaygpOwkJCQkv KiBhY2tub3dsZWRnZSB0aGUgRU9GIHBhY2tldCAqLworCUJFR0lOIHJmaWxlOwkJCS8qIGFuZCBh d2FpdCBhbm90aGVyIGZpbGUgKi8KKyAgICB9Cit9CisgICAgYnJlYWs7CitjYXNlIDYwOgorICAg IHsgIAkJCQkvKiBDdHJsLUMgb3IgY29ubmVjdGlvbiBsb3NzLiAqLworICAgIHRpbWludCA9IHNf dGltaW50OworICAgIHdpbmRvdygxKTsJCQkJLyogU2V0IHdpbmRvdyBzaXplIGJhY2sgdG8gMS4u LiAqLworICAgIGN4c2VlbiA9IDE7CisgICAgeCA9IGNsc29mKDEpOwkJCS8qIENsb3NlIGZpbGUg Ki8KKyAgICByZXR1cm4oc3VjY2VzcyA9IDApOwkJLyogRmFpbGVkICovCit9CisgICAgYnJlYWs7 CitjYXNlIDYxOgorICAgIHsJCQkJLyogRW5kIE9mIEZpbGUgKEVPRikgUGFja2V0ICovCisvKiAg d3Nsb3RzID0gMTsJKi8JCQkvKiAoZG9uJ3Qgc2V0KSBXaW5kb3cgc2l6ZSBiYWNrIHRvIDEgKi8K KyNpZm5kZWYgQ09IRVJFTlQgLyogQ29oZXJlbnQgY29tcGlsZXIgYmxvd3MgdXAgb24gdGhpcyBz d2l0Y2goKSBzdGF0ZW1lbnQuICovCisgICAgeCA9IHJlb2YoZmlsbmFtLCAmaWF0dHIpOwkJLyog SGFuZGxlIHRoZSBFT0YgcGFja2V0ICovCisgICAgc3dpdGNoICh4KSB7CQkJLyogcmVvZigpIHNl dHMgdGhlIHN1Y2Nlc3MgZmxhZyAqLworICAgICAgY2FzZSAtNToJCQkJLyogSGFuZGxlIHByb2Js ZW1zICovCisJZXJycGt0KChDSEFSICopIlJFTkFNRSBmYWlsZWQiKTsgLyogRmF0YWwgKi8KKwlS RVNVTUU7CisJYnJlYWs7CisgICAgICBjYXNlIC00OgorCWVycnBrdCgoQ0hBUiAqKSJNT1ZFIGZh aWxlZCIpOwkvKiBGYXRhbCAqLworCVJFU1VNRTsKKwlicmVhazsKKyAgICAgIGNhc2UgLTM6CQkJ CS8qIElmIHByb2JsZW0sIHNlbmQgZXJyb3IgbXNnICovCisJZXJycGt0KChDSEFSICopIkNhbid0 IHByaW50IGZpbGUiKTsgLyogRmF0YWwgKi8KKwlSRVNVTUU7CisJYnJlYWs7CisgICAgICBjYXNl IC0yOgorCWVycnBrdCgoQ0hBUiAqKSJDYW4ndCBtYWlsIGZpbGUiKTsgLyogRmF0YWwgKi8KKwlS RVNVTUU7CisJYnJlYWs7CisgICAgICBjYXNlIDI6CQkJCS8qIE5vdCBmYXRhbCAqLworICAgICAg Y2FzZSAzOgorCXh4c2NyZWVuKFNDUl9FTSwwLDBMLCJSZWNlaXZlciBjYW4ndCBkZWxldGUgdGVt cCBmaWxlIik7CisJUkVTVU1FOworCWJyZWFrOworICAgICAgZGVmYXVsdDoKKwlpZiAoeCA8IDAp IHsJCQkvKiBGYXRhbCAqLworCSAgICBlcnJwa3QoKENIQVIgKikiQ2FuJ3QgY2xvc2UgZmlsZSIp OworCSAgICBSRVNVTUU7CisJfSBlbHNlIHsJCQkvKiBTdWNjZXNzICovCisjaWZuZGVmIE5PU1BM CisJICAgIGlmIChxdWVyeSkJCQkvKiBRdWVyeSByZXBvbnNlcyBnZW5lcmFsbHkgKi8KKwkgICAg ICBjb25vbGwoIiIpOwkJLyogZG9uJ3QgaGF2ZSBsaW5lIHRlcm1pbmF0b3JzICovCisjZW5kaWYg LyogTk9TUEwgKi8KKwkgICAgaWYgKGN6c2VlbikgewkJLyogQmF0Y2ggY2FuY2VsZWQ/ICovCisJ CWlmIChjYW5jZWwrKyA9PSAwKSB7CS8qIElmIHdlIGhhdmVuJ3QgdHJpZWQgdGhpcyB5ZXQgKi8K KwkJICAgIGFjazEoKENIQVIgKikiWiIpOwkvKiBUcnkgaXQgb25jZSAqLworCQl9IGVsc2UgewkJ LyogT3RoZXJ3aXNlICovCisJCSAgICBlcnJwa3QoKENIQVIgKikiVXNlciBjYW5jZWxlZCIpOyAv KiBxdWl0ZSB3aXRoIEVycm9yICovCisJCSAgICBSRVNVTUU7CisJCX0KKwkgICAgfSBlbHNlCisJ ICAgICAgYWNrKCk7CQkJLyogQWNrbm93bGVkZ2UgdGhlIEVPRiBwYWNrZXQgKi8KKwkgICAgQkVH SU4gcmZpbGU7CQkvKiBhbmQgYXdhaXQgYW5vdGhlciBmaWxlICovCisJfQorICAgIH0KKyNlbHNl CisgICAgaWYgKHJlb2YoZmlsbmFtLCAmaWF0dHIpIDwgMCkgewkvKiBDbG9zZSB0aGUgZmlsZSAq LworCWVycnBrdCgoQ0hBUiAqKSJFcnJvciBhdCBlbmQgb2YgZmlsZSIpOworCVJFU1VNRTsKKyAg ICB9IGVsc2UgewkJCQkvKiByZW9mKCkgc2V0cyBzdWNjZXNzIGZsYWcgKi8KKwlhY2soKTsKKwlC RUdJTiByZmlsZTsKKyAgICB9CisjZW5kaWYgLyogQ09IRVJFTlQgKi8KK30KKyAgICBicmVhazsK K2Nhc2UgNjI6CisgICAgewkJCQkvKiBBQ0sgZm9yIFNlbmQtSW5pdCAqLworICAgIHNwYXIocmRh dGFwKTsJCQkvKiBzZXQgcGFyYW1ldGVycyBmcm9tIGl0ICovCisgICAgY2FuY2VsID0gMDsKKyAg ICBiY3R1ID0gYmN0cjsJCQkvKiBzd2l0Y2ggdG8gYWdyZWVkLXVwb24gYmxvY2sgY2hlY2sgKi8K KyAgICBiY3RsID0gKGJjdHUgPT0gNCkgPyAyIDogYmN0dTsJLyogU2V0IGJsb2NrLWNoZWNrIGxl bmd0aCAqLworI2lmZGVmIENLX1JFU0VORAorICAgIGlmICgoc2VuZG1vZGUgPT0gU01fUkVTRU5E KSAmJiAoIWF0Y2FwdSB8fCAhcnNjYXB1KSkgeyAvKiBSRVNFTkQgKi8KKwllcnJwa3QoKENIQVIg KikgIlJFU0VORCBjYXBhYmlsaXRpZXMgbm90IG5lZ290aWF0ZWQiKTsKKwlSRVNVTUU7CisgICAg fSBlbHNlIHsKKyNlbmRpZiAvKiBDS19SRVNFTkQgKi8KKwl3aGF0ID0gV19TRU5EOwkJCS8qIFJl bWVtYmVyIHdlJ3JlIHNlbmRpbmcgKi8KKwlsYXN0eGZlciA9IFdfU0VORDsKKwl4ID0gc2ZpbGUo eGZsZyk7CQkvKiBTZW5kIFggb3IgRiBoZWFkZXIgcGFja2V0ICovCisJY2FuY2VsID0gMDsJCQkv KiBSZXNldCBjYW5jZWxsYXRpb24gY291bnRlciAqLworCWlmICh4KSB7CQkJLyogSWYgdGhlIHBh Y2tldCB3YXMgc2VudCBPSyAqLworCSAgICBpZiAoIXhmbGcgJiYgZmlsY250ID09IDEpCS8qIGFu ZCBpdCdzIGEgcmVhbCBmaWxlICovCisJICAgICAgY3JjMTYgPSAwTDsJCS8qIENsZWFyIHRoZSBm aWxlIENSQyAqLworCSAgICByZXNldGMoKTsJCQkvKiByZXNldCBwZXItdHJhbnNhY3Rpb24gY291 bnRlcnMgKi8KKwkgICAgcnRpbWVyKCk7CQkJLyogcmVzZXQgdGltZXJzICovCisjaWZkZWYgR0ZU SU1FUgorCSAgICByZnRpbWVyKCk7CisjZW5kaWYgLyogR0ZUSU1FUiAqLworCSAgICBzdHJlYW1v bigpOwkJCS8qIHR1cm4gb24gc3RyZWFtaW5nICovCisjaWZkZWYgSUtTREIKKwkgICAgaWYgKGlr ZGJvcGVuKSBzbG90c3RhdGUod2hhdCwKKwkJCQkgIChzZXJ2ZXIgPyAiU0VSVkVSIiA6ICIiKSwK KwkJCQkgICJTRU5EIiwKKwkJCQkgIGZpbG5hbQorCQkJCSAgKTsKKyNlbmRpZiAvKiBJS1NEQiAq LworCSAgICBCRUdJTiBzc2ZpbGU7CQkvKiBhbmQgc3dpdGNoIHRvIHJlY2VpdmUtZmlsZSBzdGF0 ZSAqLworCX0gZWxzZSB7CQkJLyogb3RoZXJ3aXNlIHNlbmQgZXJyb3IgbXNnICYgcXVpdCAqLwor CSAgICBzID0geGZsZyA/ICJDYW4ndCBleGVjdXRlIGNvbW1hbmQiIDogKGNoYXIgKillcGt0bXNn OworCSAgICBpZiAoISpzKSBzID0gIkNhbid0IG9wZW4gZmlsZSI7CisJICAgIGVycnBrdCgoQ0hB UiAqKXMpOworCSAgICBSRVNVTUU7CisJfQorI2lmZGVmIENLX1JFU0VORAorICAgIH0KKyNlbmRp ZiAvKiBDS19SRVNFTkQgKi8KK30KKyAgICBicmVhazsKK2Nhc2UgNjM6CisgICAgewkJCQkvKiBS IHBhY2tldCB3YXMgcmV0cmFuc21pdHRlZC4gKi8KKyAgICB4c2luaXQoKTsJCQkJLyogUmVzZW5k IHBhY2tldCAwICovCit9CisgICAgYnJlYWs7CitjYXNlIDY0OgorICAgIHsJCQkJLyogU2FtZSBk ZWFsIGlmIEcgcGFja2V0IGNvbWVzIGFnYWluICovCisgICAgeHNpbml0KCk7Cit9CisgICAgYnJl YWs7CitjYXNlIDY1OgorICAgIHsJCQkJLyogU2FtZSBkZWFsIGlmIEMgcGFja2V0IGNvbWVzIGFn YWluICovCisgICAgeHNpbml0KCk7Cit9CisgICAgYnJlYWs7CitjYXNlIDY2OgorICAgIHsJCQkJ LyogQUNLIGZvciBGIG9yIFggcGFja2V0ICovCisgICAgc3J2cHRyID0gc3J2Y21kOwkJCS8qIFBv aW50IHRvIHN0cmluZyBidWZmZXIgKi8KKyAgICBkZWNvZGUocmRhdGFwLHB1dHNydiwwKTsJCS8q IERlY29kZSBkYXRhIGZpZWxkLCBpZiBhbnkgKi8KKyAgICBwdXRzcnYoTlVMKTsJCQkvKiBUZXJt aW5hdGUgd2l0aCBudWxsICovCisgICAgZmZjID0gMEw7CQkJCS8qIFJlc2V0IGZpbGUgYnl0ZSBj b3VudGVyICovCisgICAgZGVidWcoRjEwMSwiPHNzZmlsZT5ZIGN4c2VlbiIsIiIsY3hzZWVuKTsK KyAgICBpZiAoKnNydmNtZCkgewkJCS8qIElmIHJlbW90ZSBuYW1lIHdhcyByZWNvcmRlZCAqLwor ICAgICAgICBpZiAoc2VuZG1vZGUgIT0gU01fUkVTRU5EKSB7CisJICAgIGlmIChmZGlzcGxhID09 IFhZRkRfQyB8fCBmZGlzcGxhID09IFhZRkRfUykKKwkgICAgICB4eHNjcmVlbihTQ1JfQU4sMCww TCwoY2hhciAqKXNydmNtZCk7CisJICAgIHRsb2coRjExMCwiIHJlbW90ZSBuYW1lOiIsKGNoYXIg Kikgc3J2Y21kLDBMKTsKKwkgICAgbWFrZXN0cigmcHNyZnNwZWMsKGNoYXIgKilzcnZjbWQpOwor ICAgICAgICB9CisgICAgfQorICAgIGlmIChjeHNlZW58fGN6c2VlbikgewkJLyogSW50ZXJydXB0 ZWQ/ICovCisJZGVidWcoRjEwMSwiPHNzZmlsZT5ZIGNhbmNlbGluZyIsIiIsMCk7CisJeCA9IGNs c2lmKCk7CQkJLyogQ2xvc2UgaW5wdXQgZmlsZSAqLworCXN4ZW9mKDEpOwkJCS8qIFNlbmQgRU9G KEQpICovCisJQkVHSU4gc3Nlb2Y7CQkJLyogYW5kIHN3aXRjaCB0byBFT0Ygc3RhdGUuICovCisg ICAgfSBlbHNlIGlmIChhdGNhcHUpIHsJCS8qIElmIGF0dHJpYnV0ZXMgYXJlIHRvIGJlIHVzZWQg Ki8KKwlpZiAoc2F0dHIoeGZsZyB8IHN0ZGluZiwgMSkgPCAwKSB7IC8qIHNlbmQgdGhlbSAqLwor CSAgICBlcnJwa3QoKENIQVIgKikiQ2FuJ3Qgc2VuZCBhdHRyaWJ1dGVzIik7IC8qIGlmIHByb2Js ZW0sIHNheSBzbyAqLworCSAgICBSRVNVTUU7CQkJLyogYW5kIHF1aXQgKi8KKwl9IGVsc2UgQkVH SU4gc3NhdHRyOwkJLyogaWYgb2ssIHN3aXRjaCB0byBhdHRyaWJ1dGUgc3RhdGUgKi8KKyAgICB9 IGVsc2UgewkJCQkvKiBBdHRyaWJ1dGVzIG5vdCBuZWdvdGlhdGVkICovCisJaWYgKHdpbmRvdyh3 c2xvdG4pIDwgMCkgewkvKiBPcGVuIHdpbmRvdyAqLworCSAgICBlcnJwa3QoKENIQVIgKikiQ2Fu J3Qgb3BlbiB3aW5kb3ciKTsKKwkgICAgUkVTVU1FOworCX0gZWxzZSBpZiAoKHggPSBzZGF0YSgp KSA9PSAtMikgeyAvKiBTZW5kIGZpcnN0IGRhdGEgcGFja2V0IGRhdGEgKi8KKwkgICAgd2luZG93 KDEpOwkJCS8qIENvbm5lY3Rpb24gbG9zdCwgcmVzZXQgd2luZG93ICovCisJICAgIHggPSBjbHNp ZigpOwkJLyogQ2xvc2UgaW5wdXQgZmlsZSAqLworCSAgICByZXR1cm4oc3VjY2VzcyA9IDApOwkv KiBSZXR1cm4gZmFpbHVyZSAqLworCX0gZWxzZSBpZiAoeCA9PSAtOSkgewkJLyogVXNlciBpbnRl cnJ1cHRlZCAqLworCSAgICBlcnJwa3QoKENIQVIgKikiVXNlciBjYW5jZWxsZWQiKTsgLyogU2Vu ZCBFcnJvciBwYWNrZXQgKi8KKwkgICAgd2luZG93KDEpOwkJCS8qIFNldCB3aW5kb3cgc2l6ZSBi YWNrIHRvIDEuLi4gKi8KKwkgICAgdGltaW50ID0gc190aW1pbnQ7CQkvKiBSZXN0b3JlIHRpbWVv dXQgKi8KKwkgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsJLyogRmFpbGVkICovCisJfSBlbHNlIGlm ICh4IDwgMCkgewkJLyogRU9GIChlbXB0eSBmaWxlKSBvciBpbnRlcnJ1cHRlZCAqLworCSAgICB3 aW5kb3coMSk7CQkJLyogcHV0IHdpbmRvdyBzaXplIGJhY2sgdG8gMSwgKi8KKwkgICAgZGVidWco RjEwMSwiPHNzZmlsZT5ZIGN4c2VlbiIsIiIsY3hzZWVuKTsKKwkgICAgeCA9IGNsc2lmKCk7CQkv KiBJZiBub3Qgb2ssIGNsb3NlIGlucHV0IGZpbGUsICovCisJICAgIGlmICh4IDwgMCkJCQkvKiB0 cmVhdGluZyBmYWlsdXJlIGFzIGludGVycnVwdGlvbiAqLworCSAgICAgIGN4c2VlbiA9IDE7CQkv KiBTZW5kIEVPRiBwYWNrZXQgKi8KKwkgICAgc2VvZihjeHNlZW58fGN6c2Vlbik7CisJICAgIEJF R0lOIHNzZW9mOwkJLyogYW5kIHN3aXRjaCB0byBFT0Ygc3RhdGUuICovCisJfSBlbHNlIHsJCQkv KiBGaXJzdCBkYXRhIHNlbnQgT0sgKi8KKwkgICAgQkVHSU4gc3NkYXRhOwkJLyogQWxsIG9rLCBz d2l0Y2ggdG8gc2VuZC1kYXRhIHN0YXRlICovCisJfQorICAgIH0KK30KKyAgICBicmVhazsKK2Nh c2UgNjc6CisgICAgewkJCQkvKiBHb3QgQUNLIHRvIEEgcGFja2V0ICovCisgICAgZmZjID0gMEw7 CQkJCS8qIFJlc2V0IGZpbGUgYnl0ZSBjb3VudGVyICovCisgICAgZGVidWcoRjEwMSwiPHNzYXR0 cj5ZIGN4c2VlbiIsIiIsY3hzZWVuKTsKKyAgICBpZiAoY3hzZWVufHxjenNlZW4pIHsJCS8qIElu dGVycnVwdGVkPyAqLworCWRlYnVnKEYxMDEsIjxzYXR0cj5ZIGNhbmNlbGluZyIsIiIsMCk7CisJ eCA9IGNsc2lmKCk7CQkJLyogQ2xvc2UgaW5wdXQgZmlsZSAqLworCXN4ZW9mKDEpOwkJCS8qIFNl bmQgRU9GKEQpICovCisJQkVHSU4gc3Nlb2Y7CQkJLyogYW5kIHN3aXRjaCB0byBFT0Ygc3RhdGUu ICovCisgICAgfSBlbHNlIGlmIChyc2F0dHIocmRhdGFwKSA8IDApIHsJLyogV2FzIHRoZSBmaWxl IHJlZnVzZWQ/ICovCisJZGlzY2FyZCA9IDE7CQkJLyogU2V0IHRoZSBkaXNjYXJkIGZsYWcgKi8K KwljbHNpZigpOwkJCS8qIENsb3NlIHRoZSBmaWxlICovCisJc3hlb2YoMSk7CQkJLyogc2VuZCBF T0Ygd2l0aCAiZGlzY2FyZCIgY29kZSAqLworCUJFR0lOIHNzZW9mOwkJCS8qIHN3aXRjaCB0byBz ZW5kLUVPRiBzdGF0ZSAqLworICAgIH0gZWxzZSBpZiAoKHggPSBzYXR0cih4ZmxnIHwgc3RkaW5m LCAwKSkgPCAwKSB7IC8qIFNlbmQgbW9yZT8gKi8KKwllcnJwa3QoKENIQVIgKikiQ2FuJ3Qgc2Vu ZCBhdHRyaWJ1dGVzIik7IC8qIFRyb3VibGUuLi4gKi8KKwlSRVNVTUU7CisgICAgfSBlbHNlIGlm ICh4ID09IDApIHsJCS8qIE5vIG1vcmUgdG8gc2VuZCBzbyBub3cgdGhlIGRhdGEgKi8KKwlpZiAo d2luZG93KHdzbG90bikgPCAwKSB7CS8qIEFsbG9jYXRlIG5lZ290aWF0ZWQgd2luZG93IHNsb3Rz ICovCisJICAgIGVycnBrdCgoQ0hBUiAqKSJDYW4ndCBvcGVuIHdpbmRvdyIpOworCSAgICBSRVNV TUU7CisJfQorCWlmICgoeCA9IHNkYXRhKCkpID09IC0yKSB7CS8qIEZpbGUgYWNjZXB0ZWQsIHNl bmQgZmlyc3QgZGF0YSAqLworCSAgICB3aW5kb3coMSk7CQkJLyogQ29ubmVjdGlvbiBicm9rZW4g Ki8KKwkgICAgeCA9IGNsc2lmKCk7CQkvKiBDbG9zZSBmaWxlICovCisJICAgIHJldHVybihzdWNj ZXNzID0gMCk7CS8qIFJldHVybiBmYWlsdXJlICovCisJfSBlbHNlIGlmICh4ID09IC05KSB7CQkv KiBVc2VyIGludGVycnVwdGVkICovCisJICAgIGVycnBrdCgoQ0hBUiAqKSJVc2VyIGNhbmNlbGxl ZCIpOyAvKiBTZW5kIEVycm9yIHBhY2tldCAqLworCSAgICB3aW5kb3coMSk7CQkJLyogU2V0IHdp bmRvdyBzaXplIGJhY2sgdG8gMS4uLiAqLworCSAgICB0aW1pbnQgPSBzX3RpbWludDsJCS8qIFJl c3RvcmUgdGltZW91dCAqLworCSAgICByZXR1cm4oc3VjY2VzcyA9IDApOwkvKiBGYWlsZWQgKi8K Kwl9IGVsc2UgaWYgKHggPCAwKSB7CQkvKiBJZiBkYXRhIHdhcyBub3Qgc2VudCAqLworCSAgICB3 aW5kb3coMSk7CQkJLyogcHV0IHdpbmRvdyBzaXplIGJhY2sgdG8gMSwgKi8KKwkgICAgZGVidWco RjEwMSwiPHNzYXR0cj5ZIGN4c2VlbiIsIiIsY3hzZWVuKTsKKwkgICAgaWYgKGNsc2lmKCkgPCAw KQkJLyogQ2xvc2UgaW5wdXQgZmlsZSAqLworCSAgICAgIGN4c2VlbiA9IDE7CQkvKiBTZW5kIEVP RiBwYWNrZXQgKi8KKwkgICAgc2VvZihjeHNlZW58fGN6c2Vlbik7CisJICAgIEJFR0lOIHNzZW9m OwkJLyogYW5kIHN3aXRjaCB0byBFT0Ygc3RhdGUuICovCisJfSBlbHNlIHsKKwkgICAgQkVHSU4g c3NkYXRhOwkJLyogQWxsIG9rLCBzd2l0Y2ggdG8gc2VuZC1kYXRhIHN0YXRlICovCisJfQorICAg IH0KK30KKyAgICBicmVhazsKK2Nhc2UgNjg6CisgICAgeyAgCQkJCS8qIEN0cmwtQyBvciBjb25u ZWN0aW9uIGxvc3MuICovCisgICAgd2luZG93KDEpOwkJCQkvKiBTZXQgd2luZG93IHNpemUgYmFj ayB0byAxLi4uICovCisgICAgY3hzZWVuID0gMTsJCQkJLyogVG8gaW5kaWNhdGUgaW50ZXJydXB0 aW9uICovCisgICAgeCA9IGNsc2lmKCk7CQkJLyogQ2xvc2UgZmlsZSAqLworICAgIHJldHVybihz dWNjZXNzID0gMCk7CQkvKiBGYWlsZWQgKi8KK30KKyAgICBicmVhazsKK2Nhc2UgNjk6CisgICAg ewkJCQkvKiBHb3QgQUNLIHRvIERhdGEgcGFja2V0ICovCisgICAgY2FubmVkKHJkYXRhcCk7CQkJ LyogQ2hlY2sgaWYgZmlsZSB0cmFuc2ZlciBjYW5jZWxsZWQgKi8KKyAgICBkZWJ1ZyhGMTExLCI8 c3NkYXRhPlkgY3hzZWVuIixyZGF0YXAsY3hzZWVuKTsKKyAgICBkZWJ1ZyhGMTExLCI8c3NkYXRh PlkgY3pzZWVuIixyZGF0YXAsY3pzZWVuKTsKKyAgICBpZiAoKHggPSBzZGF0YSgpKSA9PSAtMikg ewkJLyogVHJ5IHRvIHNlbmQgbmV4dCBkYXRhICovCisJd2luZG93KDEpOwkJCS8qIENvbm5lY3Rp b24gbG9zdCwgcmVzZXQgd2luZG93ICovCisJeCA9IGNsc2lmKCk7CQkJLyogQ2xvc2UgZmlsZSAq LworCXJldHVybihzdWNjZXNzID0gMCk7CQkvKiBGYWlsZWQgKi8KKyAgICB9IGVsc2UgaWYgKHgg PT0gLTkpIHsJCS8qIFVzZXIgaW50ZXJydXB0ZWQgKi8KKwllcnJwa3QoKENIQVIgKikiVXNlciBj YW5jZWxsZWQiKTsgLyogU2VuZCBFcnJvciBwYWNrZXQgKi8KKwl3aW5kb3coMSk7CQkJLyogU2V0 IHdpbmRvdyBzaXplIGJhY2sgdG8gMS4uLiAqLworCXRpbWludCA9IHNfdGltaW50OwkJLyogUmVz dG9yZSBvcmlnaW5hbCB0aW1lb3V0ICovCisJcmV0dXJuKHN1Y2Nlc3MgPSAwKTsJCS8qIEZhaWxl ZCAqLworICAgIH0gZWxzZSBpZiAoeCA8IDApIHsJCQkvKiBFT0YgLSBmaW5pc2hlZCBzZW5kaW5n IGRhdGEgKi8KKwlkZWJ1ZyhGMTAxLCI8c3NkYXRhPlkgY3hzZWVuIiwiIixjeHNlZW4pOworCXdp bmRvdygxKTsJCQkvKiBTZXQgd2luZG93IHNpemUgYmFjayB0byAxLi4uICovCisJaWYgKGNsc2lm KCkgPCAwKQkJLyogQ2xvc2UgaW5wdXQgZmlsZSAqLworCSAgY3hzZWVuID0gMTsJCQkvKiBTZW5k IEVPRiBwYWNrZXQgKi8KKwlkZWJ1ZyhGMTAxLCI8c3NkYXRhPlkgQ0FMTElORyBTRU9GKCkiLCIi LGN4c2Vlbik7CisJc2VvZihjeHNlZW58fGN6c2Vlbik7CisJQkVHSU4gc3Nlb2Y7CQkJLyogYW5k IGVudGVyIHNlbmQtZW9mIHN0YXRlICovCisgICAgfQorICAgIC8qIE5PVEU6IElmIHggPT0gMCBp dCBtZWFucyB3ZSdyZSBkcmFpbmluZzogc2VlIHNkYXRhKCkhICovCit9CisgICAgYnJlYWs7Citj YXNlIDcwOgorICAgIHsJCQkJLyogR290IEFDSyB0byBFT0YgKi8KKyAgICBpbnQgZywgeGRpc2Nh cmQ7CisgICAgY2FubmVkKHJkYXRhcCk7CQkJLyogQ2hlY2sgaWYgZmlsZSB0cmFuc2ZlciBjYW5j ZWxsZWQgKi8KKyAgICBkZWJ1ZyhGMTExLCI8c3Nlb2Y+WSBjeHNlZW4iLHJkYXRhcCxjeHNlZW4p OworICAgIGRlYnVnKEYxMTEsIjxzc2VvZj5ZIGN6c2VlbiIscmRhdGFwLGN6c2Vlbik7CisgICAg ZGVidWcoRjExMSwiPHNzZW9mPlkgZGlzY2FyZCIscmRhdGFwLGRpc2NhcmQpOworICAgIHhkaXNj YXJkID0gZGlzY2FyZDsKKyAgICBkaXNjYXJkID0gMDsKKyAgICBzdWNjZXNzID0gKGN4c2VlbiA9 PSAwICYmIGN6c2VlbiA9PSAwKTsgLyogVHJhbnNmZXIgc3RhdHVzLi4uICovCisgICAgZGVidWco RjEwMSwiPHNzZW9mPlkgc3VjY2VzcyIsIiIsc3VjY2Vzcyk7CisgICAgaWYgKHN1Y2Nlc3MgJiYg cmVqZWN0aW9uID4gMCkJICAgIC8qIElmIHJlamVjdGVkLCBzdWNjZWVkIGlmICovCisgICAgICBp ZiAocmVqZWN0aW9uICE9ICcjJyAmJgkJICAgIC8qIHJlYXNvbiB3YXMgZGF0ZSAqLworCSAgcmVq ZWN0aW9uICE9IDEgJiYgcmVqZWN0aW9uICE9ICc/JykgLyogb3IgbmFtZTsgKi8KKwlzdWNjZXNz ID0gMDsJCQkgICAgLyogZmFpbCBvdGhlcndpc2UuICovCisgICAgY3hzZWVuID0gMDsJCQkJLyog VGhpcyBnb2VzIGJhY2sgdG8gemVyby4gKi8KKyAgICBpZiAoc3VjY2VzcykgewkJCS8qIE9ubHkg aWYgdHJhbnNmZXIgc3VjY2VlZGVkLi4uICovCisJeHhzY3JlZW4oU0NSX1NULFNUX09LLDBMLCIi KTsKKwlpZiAoIXhkaXNjYXJkKSB7CisJICAgIG1ha2VzdHIoJnNmc3BlYyxwc2ZzcGVjKTsJLyog UmVjb3JkIGZpbGVuYW1lcyBmb3IgV0hFUkUgKi8KKwkgICAgbWFrZXN0cigmc3Jmc3BlYyxwc3Jm c3BlYyk7CisJfQorCWlmIChtb3ZpbmcpIHsJCQkvKiBJZiBNT1ZFJ2luZyAqLworCSAgICB4ID0g emRlbGV0KGZpbG5hbSk7CQkvKiBUcnkgdG8gZGVsZXRlIHRoZSBzb3VyY2UgZmlsZSAqLworI2lm ZGVmIFRMT0cKKwkgICAgaWYgKHRyYWxvZykgeworCQlpZiAoeCA+IC0xKSB7CisJCSAgICB0bG9n KEYxMTAsIiBkZWxldGVkIixmaWxuYW0sMCk7CisJCX0gZWxzZSB7CisJCSAgICB0bG9nKEYxMTAs IiBkZWxldGUgZmFpbGVkOiIsY2tfZXJyc3RyKCksMCk7CisJCX0KKwkgICAgfQorI2VuZGlmIC8q IFRMT0cgKi8KKwl9IGVsc2UgaWYgKHNuZF9tb3ZlKSB7CQkvKiBPciBtb3ZlIGl0ICovCisJICAg IGludCB4OworCSAgICB4ID0genJlbmFtZShmaWxuYW0sc25kX21vdmUpOworI2lmZGVmIFRMT0cK KwkgICAgaWYgKHRyYWxvZykgeworCQlpZiAoeCA+IC0xKSB7CisJCSAgICB0bG9nKEYxMTAsIiBt b3ZlZCB0byAiLHNuZF9tb3ZlLDApOworCQl9IGVsc2UgeworCQkgICAgdGxvZyhGMTEwLCIgbW92 ZSBmYWlsZWQ6Iixja19lcnJzdHIoKSwwKTsKKwkJfQorCSAgICB9CisjZW5kaWYgLyogVExPRyAq LworCX0gZWxzZSBpZiAoc25kX3JlbmFtZSkgewkvKiBPciByZW5hbWUgaXQgKi8KKwkgICAgY2hh ciAqcyA9IHNuZF9yZW5hbWU7CS8qIFJlbmFtaW5nIHN0cmluZyAqLworI2lmbmRlZiBOT1NQTAor CSAgICBpbnQgeTsJCQkvKiBQYXNzIGl0IHRocnUgdGhlIGV2YWx1YXRvciAqLworCSAgICBleHRl cm4gaW50IGNtZF9xdW90aW5nOwkvKiBmb3IgXHYoZmlsZW5hbWUpICovCisJICAgIGlmIChjbWRf cXVvdGluZykgewkJLyogQnV0IG9ubHkgaWYgY21kX3F1b3RpbmcgaXMgb24gKi8KKwkJeSA9IE1B WFJQOworCQlzID0gKGNoYXIgKilzcnZjbWQ7CisJCXp6c3RyaW5nKHNuZF9yZW5hbWUsJnMsJnkp OworCQlzID0gKGNoYXIgKilzcnZjbWQ7CisJICAgIH0KKyNlbmRpZiAvKiBOT1NQTCAqLworCSAg ICBpZiAocykgaWYgKCpzKSB7CisJCWludCB4OworCQl4ID0genJlbmFtZShmaWxuYW0scyk7Cisj aWZkZWYgVExPRworCSAgICBpZiAodHJhbG9nKSB7CisJCWlmICh4ID4gLTEpIHsKKwkJICAgIHRs b2coRjExMCwiIHJlbmFtZWQgdG8iLHMsMCk7CisJCX0gZWxzZSB7CisJCSAgICB0bG9nKEYxMTAs IiByZW5hbWUgZmFpbGVkOiIsY2tfZXJyc3RyKCksMCk7CisJCX0KKwkgICAgfQorI2VuZGlmIC8q IFRMT0cgKi8KKyNpZmRlZiBDT01NRU5UCisJCSpzID0gTlVMOworI2VuZGlmIC8qIENPTU1FTlQg Ki8KKwkgICAgfQorCX0KKyAgICB9CisgICAgaWYgKGN6c2VlbikgewkJCS8qIENoZWNrIGdyb3Vw IGludGVycnVwdGlvbiBmbGFnICovCisJZyA9IDA7CQkJCS8qIE5vIG1vcmUgZmlsZXMgaWYgaW50 ZXJydXB0ZWQgKi8KKyAgICB9IGVsc2UgewkJCQkvKiBPdGhlcndpc2UuLi4gKi8KKyNpZmRlZiBD T01NRU5UCisJLyogVGhpcyBjb2RlIG1ha2VzIGFueSBvcGVuIGVycm9yIGZhdGFsIHRvIGEgZmls ZS1ncm91cCB0cmFuc2Zlci4gKi8KKwlnID0gZ25maWxlKCk7CisJZGVidWcoRjExMSwiPHNzZW9m PlkgZ25maWxlIixmaWxuYW0sZyk7CisJaWYgKGcgPiAwKSB7CQkJLyogQW55IG1vcmUgZmlsZXMg dG8gc2VuZD8gKi8KKwkgICAgaWYgKHNmaWxlKHhmbGcpKQkJLyogWWVzLCB0cnkgdG8gc2VuZCBu ZXh0IGZpbGUgaGVhZGVyICovCisJICAgICAgQkVHSU4gc3NmaWxlOwkJLyogaWYgb2ssIGVudGVy IHNlbmQtZmlsZSBzdGF0ZSAqLworCSAgICBlbHNlIHsJCQkvKiBvdGhlcndpc2UgKi8KKwkJcyA9 IHhmbGcgPyAiQ2FuJ3QgZXhlY3V0ZSBjb21tYW5kIiA6IChjaGFyICopZXBrdG1zZzsKKwkJaWYg KCEqcykgcyA9ICJDYW4ndCBvcGVuIGZpbGUiOworCQllcnJwa3QoKENIQVIgKilzKTsJLyogc2Vu ZCBlcnJvciBtZXNzYWdlICovCisJCVJFU1VNRTsJCQkvKiBhbmQgcXVpdCAqLworCSAgICB9CisJ fSBlbHNlIHsJCQkvKiBObyBuZXh0IGZpbGUgKi8KKwkgICAgdHNlY3MgPSBndGltZXIoKTsJCS8q IGdldCBzdGF0aXN0aWNzIHRpbWVycyAqLworI2lmZGVmIEdGVElNRVIKKwkgICAgZnB0c2VjcyA9 IGdmdGltZXIoKTsKKyNlbmRpZiAvKiBHRlRJTUVSICovCisJICAgIHNlb3QoKTsJCQkvKiBzZW5k IEVPVCBwYWNrZXQgKi8KKwkgICAgQkVHSU4gc3Nlb3Q7CQkvKiBlbnRlciBzZW5kLWVvdCBzdGF0 ZSAqLworCX0KKyNlbHNlICAvKiBDT01NRU5UICovCisJd2hpbGUgKDEpIHsJCQkvKiBLZWVwIHRy eWluZy4uLiAqLworCSAgICBnID0gZ25maWxlKCk7CQkvKiBHZXQgbmV4dCBmaWxlICovCisJICAg IGRlYnVnKEYxMTEsIjxzc2VvZj5ZIGduZmlsZSIsZmlsbmFtLGcpOworCSAgICBpZiAoZyA9PSAw ICYmIGduZmVycm9yID09IDApIC8qIE5vIG1vcmUsIHN0b3AgdHJ5aW5nICovCisJICAgICAgYnJl YWs7CisJICAgIGlmIChnID4gMCkgewkJLyogSGF2ZSBvbmUgKi8KKwkJaWYgKHNmaWxlKHhmbGcp KSB7CS8qIFRyeSB0byBvcGVuIGFuZCBzZW5kIEYgcGFja2V0ICovCisJCSAgICBCRUdJTiBzc2Zp bGU7CS8qIElmIE9LLCBlbnRlciBzZW5kLWZpbGUgc3RhdGUgKi8KKwkJICAgIGJyZWFrOwkJLyog YW5kIGJyZWFrIG91dCBvZiBsb29wLiAqLworCQl9CisJICAgIH0gLyogT3RoZXJ3aXNlIGtlZXAg dHJ5aW5nIHRvIGdldCBvbmUgd2UgY2FuIHNlbmQuLi4gKi8KKwl9CisgICAgfQorICAgIGlmIChn ID09IDApIHsKKwlkZWJ1ZyhGMTAxLCI8c3Nlb2Y+WSBubyBtb3JlIGZpbGVzIiwiIixjenNlZW4p OworCXRzZWNzID0gZ3RpbWVyKCk7CQkvKiBHZXQgc3RhdGlzdGljcyB0aW1lcnMgKi8KKyNpZmRl ZiBHRlRJTUVSCisJZnB0c2VjcyA9IGdmdGltZXIoKTsKKyNlbmRpZiAvKiBHRlRJTUVSICovCisJ c2VvdCgpOwkJCQkvKiBTZW5kIEVPVCBwYWNrZXQgKi8KKwlCRUdJTiBzc2VvdDsJCQkvKiBFbnRl ciBzZW5kLWVvdCBzdGF0ZSAqLworICAgIH0KKyNlbmRpZiAvKiBDT01NRU5UICovCit9CisgICAg YnJlYWs7CitjYXNlIDcxOgorICAgIHsJCQkJLyogR290IEFDSyB0byBFT1QgKi8KKyAgICBkZWJ1 ZyhGMTAxLCJzc2VvdCBqdXN0b25lIiwiIixqdXN0b25lKTsKKyAgICBSRVNVTUU7CQkJCS8qIEFs bCBkb25lLCBqdXN0IHF1aXQgKi8KK30KKyAgICBicmVhazsKK2Nhc2UgNzI6CisgICAgewkJCQkJ LyogR290IEVycm9yIHBhY2tldCwgaW4gYW55IHN0YXRlICovCisgICAgY2hhciAqcyA9ICIiOwor ICAgIHdpbmRvdygxKTsJCQkJLyogQ2xvc2Ugd2luZG93ICovCisgICAgdGltaW50ID0gc190aW1p bnQ7CQkJLyogUmVzdG9yZSBvcmlnaW5hbCB0aW1lb3V0ICovCisgICAgaWYgKCplcGt0bXNnKQkJ CS8qIE1lc3NhZ2UgZnJvbSBFcnJvciBwYWNrZXQgKi8KKyAgICAgIHMgPSAoY2hhciAqKWVwa3Rt c2c7CisgICAgaWYgKCEqcykgewkJCQkvKiBJZiBub3QgdGhlcmUgdGhlbiBtYXliZSBoZXJlICov CisJcyA9IChjaGFyICopcmRhdGFwOworCWNrc3RybmNweSgoY2hhciAqKWVwa3Rtc2csKGNoYXIg KilyZGF0YXAsUEtUTVNHTEVOKTsKKyAgICB9CisgICAgaWYgKCEqcykJCQkJLyogSG9wZWZ1bGx5 IHdlJ2xsIG5ldmVyIHNlZSB0aGlzLiAqLworICAgICAgcyA9ICJVbmtub3duIGVycm9yIjsKKyAg ICBzdWNjZXNzID0gMDsJCQkvKiBGb3IgSUYgU1VDQ0VTUy9GQUlMLiAqLworICAgIGRlYnVnKEYx MDEsImNrY3Byby53IGp1c3RvbmUgYXQgRSBwa3QiLCIiLGp1c3RvbmUpOworCisgICAgc3VjY2Vz cyA9IDA7CQkJLyogVHJhbnNmZXIgZmFpbGVkICovCisgICAgeGZlcnN0YXQgPSBzdWNjZXNzOwkJ CS8qIFJlbWVtYmVyIHRyYW5zZmVyIHN0YXR1cyAqLworICAgIGlmICghZXBrdHNlbnQpIHsKKwl4 ID0gcXVpZXQ7IHF1aWV0ID0gMTsJCS8qIENsb3NlIGZpbGVzIHNpbGVudGx5LCAqLworCWVwa3Ry Y3ZkID0gMTsJCQkvKiBQcmV2ZW50IG1lc3NhZ2VzIGZyb20gY2xzb2YoKSAqLworCWNsc2lmKCk7 CisJY2xzb2YoMSk7IAkJCS8qIGRpc2NhcmRpbmcgYW55IG91dHB1dCBmaWxlLiAqLworCWVybXNn KHMpOwkJCS8qIElzc3VlIHRoZSBtZXNzYWdlIChjYWxscyBzY3JlZW4pLiAqLworCXF1aWV0ID0g eDsJCQkvKiBSZXN0b3JlIHF1aWV0IHN0YXRlICovCisgICAgfQorICAgIHRzdGF0cygpOwkJCQkv KiBHZXQgc3RhdHMgKi8KKy8qCisgIElmIHdlIGFyZSBleGVjdXRpbmcgY29tbWFuZHMgZnJvbSBh IGNvbW1hbmQgZmlsZSBvciBtYWNybywgbGV0IHRoZSBjb21tYW5kCisgIGZpbGUgb3IgbWFjcm8g ZGVjaWRlIHdoZXRoZXIgdG8gZXhpdCwgYmFzZWQgb24gU0VUIHsgVEFLRSwgTUFDUk8gfSBFUlJP Ui4KKyovCisgICAgaWYgKAorI2lmbmRlZiBOT0lDUAorCSF4Y21kc3JjICYmCisjZW5kaWYgLyog Tk9JQ1AgKi8KKwliYWNrZ3JkICYmICFzZXJ2ZXIpCisgICAgICBmYXRhbCgiUHJvdG9jb2wgZXJy b3IiKTsKKyAgICB4aXRzdGEgfD0gKHdoYXQgJiBXX0tFUk1JVCk7CS8qIFNhdmUgdGhpcyBmb3Ig ZG9leGl0KCkuICovCisjaWZkZWYgQ0tfVE1QRElSCisvKiBJZiB3ZSB3ZXJlIGNkJ2QgdGVtcG9y YXJpbHkgdG8gYW5vdGhlciBkZXZpY2Ugb3IgZGlyZWN0b3J5IC4uLiAqLworICAgIGlmIChmX3Rt cGRpcikgeworCWludCB4OworCXggPSB6Y2hkaXIoKGNoYXIgKikgc2F2ZGlyKTsJLyogLi4uIHJl c3RvcmUgcHJldmlvdXMgZGlyZWN0b3J5ICovCisJZl90bXBkaXIgPSAwOwkJCS8qIGFuZCByZW1l bWJlciB3ZSBkaWQgaXQuICovCisJZGVidWcoRjExMSwiY2tjcHJvLncgRSB0bXBkaXIgcmVzdG9y ZWQiLHNhdmRpcix4KTsKKyAgICB9CisjZW5kaWYgLyogQ0tfVE1QRElSICovCisjaWZkZWYgSUtT REIKKyAgICBpZiAoaWtkYm9wZW4pIHNsb3RzdGF0ZSh3aGF0LCJFUlJPUiIsIChjaGFyICopZXBr dG1zZywgIiIpOworI2VuZGlmIC8qIElLU0RCICovCisgICAgUkVTVU1FOworfQorICAgIGJyZWFr OworY2FzZSA3MzoKKyAgICB7IHN1Y2Nlc3MgPSAwOyBRVUlUOyB9CisgICAgYnJlYWs7CitjYXNl IDc0OgorICAgIHsJCQkJCS8qIEFueXRoaW5nIG5vdCBhY2NvdW50ZWQgZm9yIGFib3ZlICovCisg ICAgZXJycGt0KChDSEFSICopIlVuZXhwZWN0ZWQgcGFja2V0IHR5cGUiKTsgLyogR2l2ZSBlcnJv ciBtZXNzYWdlICovCisgICAgd2luZG93KDEpOworICAgIHhpdHN0YSB8PSAod2hhdCAmIFdfS0VS TUlUKTsJLyogU2F2ZSB0aGlzIGZvciBkb2V4aXQoKS4gKi8KKyAgICBSRVNVTUU7CQkJCS8qIGFu ZCBxdWl0ICovCit9CisgICAgYnJlYWs7CisKKwkgICAgfQorICAgIH0KK30KKworY2hhciB0Ymxb XSA9IHsKKyAtMSwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3 NCwgNzQsIDc0LCA3NCwKKyA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwg NzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwKKyA3NCwgNzQsIDc0LCA3NCwgNzQsIDcyLCA3NCwgNzQs IDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwKKyA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0 LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwKKyA3NCwgMTEsIDc0LCAg NywgNzQsIDc0LCA3NCwgIDksICA0LCA3NCwgIDUsICA4LCA3NCwgNzQsIDc0LCAgNiwKKyA3NCwg NzMsICAzLCAgMSwgNzQsIDc0LCAgMiwgNzQsIDEwLCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3 NCwKKyAtMSwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwg NzQsIDc0LCA3NCwKKyA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQs IDc0LCA3NCwgNzQsIDc0LCA3NCwKKyA3NCwgNzQsIDc0LCA3NCwgNzQsIDE1LCA3NCwgNzQsIDc0 LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwKKyA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3 NCwgNzQsIDc0LCAxMywgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwKKyA3NCwgMTEsIDc0LCAgNywg NzQsIDc0LCA3NCwgIDksICA0LCA3NCwgIDUsICA4LCA3NCwgNzQsIDc0LCAgNiwKKyA3NCwgNzMs ICAzLCAgMSwgNzQsIDc0LCAgMiwgNzQsIDEwLCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwK KyAtMSwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQs IDc0LCA3NCwKKyA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0 LCA3NCwgNzQsIDc0LCA3NCwKKyA3NCwgNzQsIDU3LCA3NCwgNzQsIDcyLCA1MywgNzQsIDc0LCA3 NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwKKyA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwg NzQsIDU0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwKKyA3NCwgMTEsIDc0LCAgNywgNzQs IDc0LCA3NCwgIDksICA0LCA3NCwgIDUsICA4LCA3NCwgNzQsIDc0LCAgNiwKKyA3NCwgNzMsICAz LCAgMSwgNzQsIDc0LCAgMiwgNzQsIDEwLCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwKKyAt MSwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0 LCA3NCwKKyA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3 NCwgNzQsIDc0LCA3NCwKKyA3NCwgNTUsIDc0LCA3NCwgNTYsIDcyLCA3NCwgNzQsIDc0LCA3NCwg NzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwKKyA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQs IDc0LCA3NCwgNTksIDc0LCA3NCwgNzQsIDc0LCA3NCwKKyA3NCwgMTEsIDc0LCAgNywgNzQsIDc0 LCA3NCwgIDksICA0LCA3NCwgIDUsICA4LCA3NCwgNzQsIDc0LCAgNiwKKyA3NCwgNzMsICAzLCAg MSwgNzQsIDc0LCAgMiwgNzQsIDEwLCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwKKyAtMSwg NzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3 NCwKKyA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwg NzQsIDc0LCA3NCwKKyA3NCwgNzQsIDc0LCA3NCwgNTgsIDcyLCA3NCwgNzQsIDc0LCA3NCwgNzQs IDc0LCA3NCwgNzQsIDc0LCA3NCwKKyA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0 LCA3NCwgNjEsIDc0LCA3NCwgNzQsIDc0LCA3NCwKKyA3NCwgMTEsIDc0LCAgNywgNzQsIDc0LCA3 NCwgIDksICA0LCA3NCwgIDUsICA4LCA3NCwgNzQsIDc0LCAgNiwKKyA3NCwgNjAsICAzLCAgMSwg NzQsIDc0LCAgMiwgNzQsIDEwLCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwKKyAtMSwgNzQs IDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwK KyA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQs IDc0LCA3NCwKKyA3NCwgNzQsIDc0LCA2NSwgNzQsIDcyLCA3NCwgNjQsIDc0LCA3NCwgNzQsIDc0 LCA3NCwgNzQsIDc0LCA3NCwKKyA3NCwgNzQsIDYzLCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA2 MiwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwKKyA3NCwgMTEsIDc0LCAgNywgNzQsIDc0LCA3NCwg IDksICA0LCA3NCwgIDUsICA4LCA3NCwgNzQsIDc0LCAgNiwKKyA3NCwgNzMsICAzLCAgMSwgNzQs IDc0LCAgMiwgNzQsIDEwLCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwKKyAtMSwgNzQsIDc0 LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwKKyA3 NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0 LCA3NCwKKyA3NCwgNzQsIDc0LCA3NCwgNzQsIDcyLCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3 NCwgNzQsIDc0LCA3NCwKKyA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA2Niwg NzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwKKyA3NCwgMTEsIDc0LCAgNywgNzQsIDc0LCA3NCwgIDks ICA0LCA3NCwgIDUsICA4LCA3NCwgNzQsIDc0LCAgNiwKKyA3NCwgNzMsICAzLCAgMSwgNzQsIDc0 LCAgMiwgNzQsIDEwLCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwKKyAtMSwgNzQsIDc0LCA3 NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwKKyA3NCwg NzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3 NCwKKyA3NCwgNzQsIDc0LCA3NCwgNzQsIDcyLCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwg NzQsIDc0LCA3NCwKKyA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA2NywgNzQs IDc0LCA3NCwgNzQsIDc0LCA3NCwKKyA3NCwgMTEsIDc0LCAgNywgNzQsIDc0LCA3NCwgIDksICA0 LCA3NCwgIDUsICA4LCA3NCwgNzQsIDc0LCAgNiwKKyA3NCwgNzMsICAzLCAgMSwgNzQsIDc0LCAg MiwgNzQsIDEwLCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwKKyAtMSwgNzQsIDc0LCA3NCwg NzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwKKyA3NCwgNzQs IDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwK KyA3NCwgNzQsIDc0LCA3NCwgNzQsIDcyLCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQs IDc0LCA3NCwKKyA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA2OSwgNzQsIDc0 LCA3NCwgNzQsIDc0LCA3NCwKKyA3NCwgMTEsIDc0LCAgNywgNzQsIDc0LCA3NCwgIDksICA0LCA3 NCwgIDUsICA4LCA3NCwgNzQsIDc0LCAgNiwKKyA3NCwgNjgsICAzLCAgMSwgNzQsIDc0LCAgMiwg NzQsIDEwLCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwKKyAtMSwgNzQsIDc0LCA3NCwgNzQs IDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwKKyA3NCwgNzQsIDc0 LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwKKyA3 NCwgNzQsIDc0LCA3NCwgNzQsIDcyLCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0 LCA3NCwKKyA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3MCwgNzQsIDc0LCA3 NCwgNzQsIDc0LCA3NCwKKyA3NCwgMTEsIDc0LCAgNywgNzQsIDc0LCA3NCwgIDksICA0LCA3NCwg IDUsICA4LCA3NCwgNzQsIDc0LCAgNiwKKyA3NCwgNzMsICAzLCAgMSwgNzQsIDc0LCAgMiwgNzQs IDEwLCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwKKyAtMSwgNzQsIDc0LCA3NCwgNzQsIDc0 LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwKKyA3NCwgNzQsIDc0LCA3 NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwKKyA3NCwg NzQsIDc0LCA3NCwgNzQsIDcyLCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3 NCwKKyA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3MSwgNzQsIDc0LCA3NCwg NzQsIDc0LCA3NCwKKyA3NCwgMTEsIDc0LCAgNywgNzQsIDc0LCA3NCwgIDksICA0LCA3NCwgIDUs ICA4LCA3NCwgNzQsIDc0LCAgNiwKKyA3NCwgNzMsICAzLCAgMSwgNzQsIDc0LCAgMiwgNzQsIDEw LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwKKyAtMSwgMjksIDI5LCAyOSwgMjksIDI5LCAy OSwgMjksIDI5LCAyOSwgMjksIDI5LCAyOSwgMjksIDI5LCAyOSwKKyAyOSwgMjksIDI5LCAyOSwg MjksIDI5LCAyOSwgMjksIDI5LCAyOSwgMjksIDI5LCAyOSwgMjksIDI5LCAyOSwKKyAyOSwgMjks IDI5LCAyNiwgMjksIDI5LCAyOSwgMjUsIDE5LCAxNywgMjIsIDI5LCAyOSwgMjksIDI4LCAyMywK KyAyOSwgMjksIDE4LCAxMiwgMjksIDI5LCAyMCwgMjEsIDI5LCAyOSwgMjksIDI5LCAyOSwgMjks IDI5LCAyOSwKKyAyOSwgMTEsIDI5LCAgNywgMjksIDI5LCAyOSwgIDksICA0LCAyOSwgIDUsICA4 LCAyOSwgMjksIDI5LCAgNiwKKyAyOSwgMjcsICAzLCAgMSwgMjksIDI5LCAgMiwgMjksIDEwLCAy OSwgMjksIDI5LCAyOSwgMjksIDI5LCAyOSwKKyAtMSwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwg NTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwKKyA1MCwgNTAsIDUwLCA1MCwgNTAs IDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwKKyA1MCwgMzIsIDUw LCAzMSwgMzMsIDM0LCAzNSwgNTAsIDM4LCAzMCwgNTAsIDQwLCAzNywgNDgsIDUwLCA1MCwKKyA1 MCwgNTAsIDM5LCA0MSwgNDIsIDQ1LCA0NywgNDYsIDM2LCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUw LCA1MCwKKyA1MCwgMTEsIDUwLCAgNywgNDQsIDUwLCA1MCwgIDksICA0LCA1MCwgIDUsICA4LCA1 MCwgNDMsIDUwLCAgNiwKKyA1MCwgNDksICAzLCAgMSwgNTAsIDUwLCAgMiwgNTAsIDEwLCA1MCwg NTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwKKyAtMSwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQs IDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwKKyA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0 LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwKKyA3NCwgNzQsIDc0LCA3 NCwgNzQsIDcyLCA3NCwgNzQsIDc0LCAxNywgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwKKyA3NCwg NzQsIDc0LCAxMiwgNzQsIDc0LCA3NCwgNzQsIDc0LCAxNiwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3 NCwKKyA3NCwgMTEsIDc0LCAgNywgNzQsIDc0LCA3NCwgIDksICA0LCA3NCwgIDUsICA4LCA3NCwg NzQsIDc0LCAgNiwKKyA3NCwgNzMsICAzLCAgMSwgNzQsIDc0LCAgMiwgNzQsIDEwLCA3NCwgNzQs IDc0LCA3NCwgNzQsIDc0LCA3NCwKKyAtMSwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0 LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwKKyA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3 NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwKKyA3NCwgNzQsIDc0LCA3NCwg NzQsIDcyLCA1MywgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwKKyA3NCwgNzQs IDc0LCAxMiwgNzQsIDc0LCA3NCwgNzQsIDU0LCA1MiwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwK KyA3NCwgMTEsIDc0LCAgNywgNzQsIDc0LCA3NCwgIDksICA0LCA3NCwgIDUsICA4LCA3NCwgNzQs IDc0LCAgNiwKKyA3NCwgNTEsICAzLCAgMSwgNzQsIDc0LCAgMiwgNzQsIDEwLCA3NCwgNzQsIDc0 LCA3NCwgNzQsIDc0LCA3NCwKKyAtMSwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3 NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwKKyA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwg NzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwKKyA3NCwgNzQsIDc0LCA3NCwgNzQs IDcyLCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwKKyA3NCwgNzQsIDc0 LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCAxNCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwKKyA3 NCwgMTEsIDc0LCAgNywgNzQsIDc0LCA3NCwgIDksICA0LCA3NCwgIDUsICA4LCA3NCwgNzQsIDc0 LCAgNiwKKyA3NCwgNzMsICAzLCAgMSwgNzQsIDc0LCAgMiwgNzQsIDEwLCA3NCwgNzQsIDc0LCA3 NCwgNzQsIDc0LCA3NCwKKyAgMCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwg NzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwKKyA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQs IDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwKKyA3NCwgNzQsIDc0LCA3NCwgNzQsIDcy LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCAyNCwKKyA3NCwgNzQsIDc0LCAx MiwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwKKyA3NCwg MTEsIDc0LCAgNywgNzQsIDc0LCA3NCwgIDksICA0LCA3NCwgIDUsICA4LCA3NCwgNzQsIDc0LCAg NiwKKyA3NCwgNzMsICAzLCAgMSwgNzQsIDc0LCAgMiwgNzQsIDEwLCA3NCwgNzQsIDc0LCA3NCwg NzQsIDc0LDc0Cit9OworCisKKy8qCisgIEZyb20gaGVyZSBkb3duIHRvIHByb3RvKCkgYXJlIHJv dXRpbmVzIHRoYXQgd2VyZSBtb3ZlZCBvdXQgb2YgdGhlIHN0YXRlCisgIHRhYmxlIHN3aXRjaGVy IGJlY2F1c2UgdGhlIHJlc3VsdGluZyBzd2l0Y2goKSBoYWQgYmVjb21lIHRvbyBsYXJnZS4KKyAg VG8gbW92ZSB0aGUgY29udGVudHMgb2YgYSBzdGF0ZS10YWJsZSBjYXNlIHRvIGEgcm91dGluZToK KyAgICAxLiBBZGQgYSBwcm90b3R5cGUgdG8gdGhlIGxpc3QgYWJvdmUgdGhlIHN0YXRlIHRhYmxl IHN3aXRjaGVyLgorICAgIDIuIE1ha2UgYSByb3V0aW5lIHdpdGggYW4gYXBwcm9wcmlhdGUgbmFt ZSwgcmV0dXJuaW5nIGludC4KKyAgICAzLiBNb3ZlIHRoZSBjb2RlIGludG8gaXQuCisgICAgNC4g UHV0IGEgY2FsbCB0byB0aGUgbmV3IHJvdXRpbmUgaW4gdGhlIGZvcm1lciBzcG90OgorICAgICAg ICAgcmMgPSBuYW1lX29mX3JvdXRpbmUoKTsKKyAgICAgICAgIGlmIChyYyA+IC0xKSByZXR1cm4o cmMpOworICAgIDUuIEFkZCAicmV0dXJuKC0xKTsiIGFmdGVyIGV2ZXJ5IFJFU1VNRSwgU0VSVkUs IG9yIEJFR0lOIG1hY3JvIGFuZAorICAgICAgIGF0IHRoZSBlbmQgaWYgdGhlIGNvZGUgaXMgb3Bl bi1lbmRlZC4KKyovCitzdGF0aWMgaW50CityY3ZfZmlyc3RkYXRhKCkgeworICAgIGV4dGVybiBp bnQgZGlzcG9zOworICAgIGRlYnVnKEYxMDEsInJjdl9maXJzdGRhdGEiLCIiLGRpc3Bvcyk7CisK KyAgICBpZiAoZGlzY2FyZCkgewkJCS8qIGlmIHdlJ3JlIGRpc2NhcmRpbmcgdGhlIGZpbGUgKi8K KwlhY2sxKChDSEFSICopIlgiKTsJCS8qIGp1c3QgYWNrIHRoZSBkYXRhIGxpa2UgdGhpcy4gKi8K KwljYW5jZWwrKzsJCQkvKiBhbmQgY291bnQgaXQgKi8KKwlCRUdJTiByZHBrdDsJCQkvKiBhbmQg d2FpdCBmb3IgbW9yZSBkYXRhIHBhY2tldHMuICovCisJcmV0dXJuKC0xKTsKKyAgICB9IGVsc2Ug ewkJCQkvKiBOb3QgZGlzY2FyZGluZy4gKi8KKwlyZl9lcnIgPSAiQ2FuJ3Qgb3BlbiBmaWxlIjsK KwlpZiAoeGZsZykgewkJCS8qIElmIHNjcmVlbiBkYXRhICovCisJICAgIGlmIChyZW1maWxlKSB7 CQkvKiByZWRpcmVjdGVkIHRvIGZpbGUgKi8KKwkJaWYgKHJlbXBpcGUpCQkvKiBvciBwaXBlICov CisJCSAgeCA9IG9wZW5jKFpPRklMRSxyZW1kZXN0KTsgLyogUGlwZTogc3RhcnQgY29tbWFuZCAq LworCQllbHNlCisJCSAgeCA9IG9wZW5hKHJlbWRlc3QsJmlhdHRyKTsgLyogRmlsZTogb3BlbiB3 aXRoIGF0dHJpYnV0ZXMgKi8KKwkgICAgfSBlbHNlIHsJCQkvKiBvdGhlcndpc2UgKi8KKwkJeCA9 IG9wZW50KCZpYXR0cik7CS8qICJvcGVuIiB0aGUgc2NyZWVuICovCisJICAgIH0KKwl9IGVsc2Ug ewkJCS8qIG90aGVyd2lzZSAqLworI2lmZGVmIENBTElCUkFURQorCSAgICBpZiAoY2FsaWJyYXRl KSB7CQkvKiBJZiBjYWxpYnJhdGlvbiBydW4gKi8KKwkJeCA9IGNrb3BlbngoJmlhdHRyKTsJLyog b3BlbiBub3RoaW5nICovCisjaWZkZWYgU1RSRUFNSU5HCisJCWlmIChzdHJlYW1pbmcpCQkvKiBT dHJlYW1pbmcgKi8KKwkJICBmYXN0YWNrKCk7CQkvKiBBQ0sgd2l0aG91dCBBQ0tpbmcuICovCisJ CWVsc2UKKyNlbmRpZiAvKiBTVFJFQU1JTkcgKi8KKwkJICBhY2soKTsJCS8qIFNlbmQgcmVhbCBB Q0sgKi8KKwkJQkVHSU4gcmRwa3Q7CQkvKiBQcm9jZWVkIHRvIG5leHQgc3RhdGUgKi8KKwkJcmV0 dXJuKC0xKTsKKwkgICAgfSBlbHNlCisjZW5kaWYgLyogQ0FMSUJSQVRFICovCisjaWZkZWYgVU5J WAorLyoKKyAgSW4gVU5JWCB3ZSBjYW4gcGlwZSB0aGUgZmlsZSBkYXRhIGludG8gdGhlIG1haWwg cHJvZ3JhbSwgd2hpY2ggaXMgdG8gYmUKKyAgcHJlZmVycmVkIHRvIHdyaXRpbmcgaXQgb3V0IHRv IGEgdGVtcCBmaWxlIGFuZCB0aGVuIG1haWxpbmcgaXQgYWZ0ZXJ3YXJkcy4KKyAgVGhpcyBkZXBl bmRzIHJhdGhlciBoZWF2aWx5IG9uIGFsbCBVTklYZXMgaGF2aW5nIGEgbWFpbCBjb21tYW5kIHRo YXQKKyAgYWNjZXB0cyAnLXMgInN1YmplY3QiJyBvbiB0aGUgY29tbWFuZCBsaW5lLiAgTUFJTENN RCAoZS5nLiBtYWlsLCBNYWlsLCBtYWlseCkKKyAgaXMgZGVmaW5lZCBpbiBja3VmaW8uYy4KKyov CisJICAgIGlmIChkaXNwb3MgPT0gJ00nKSB7CS8qIE1haWwuLi4gKi8KKwkJY2hhciAqczsKKwkJ Y2hhciAqIHRtcCA9IE5VTEw7CisJCWludCBuID0gMDsKKwkJZXh0ZXJuIGNoYXIgKk1BSUxDTUQ7 CisJCXMgPSBpYXR0ci5kaXNwLnZhbCArIDE7CisJCW4gPSAoaW50KXN0cmxlbihNQUlMQ01EKSAr ICAgIC8qIE1haWwgY29tbWFuZCAqLworCQkgIChpbnQpc3RybGVuKHMpICsJICAgICAgLyogYWRk cmVzcyAqLworCQkgIChpbnQpc3RybGVuKG9maWxuYW0pICsgMzI7ICAvKiBzdWJqZWN0ICovCisJ CWlmICh0bXAgPSAoY2hhciAqKW1hbGxvYyhuKSkgeworCQkgICAgY2ttYWt4bXNnKHRtcCxuLAor CQkJICAgICAgTUFJTENNRCwiIC1zIFwiIixvZmlsbmFtLCJcIiAiLHMsCisJCQkgICAgICBOVUxM LE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMKTsKKwkJICAgIGRlYnVnKEYxMTEsInJjdl9m aXJzZGF0YSBtYWlsIix0bXAsKGludClzdHJsZW4odG1wKSk7CisJCSAgICB4ID0gb3BlbmMoWk9G SUxFLChjaGFyICopdG1wKTsKKwkJICAgIGZyZWUodG1wKTsKKwkJfSBlbHNlCisJCSAgeCA9IDA7 CisJICAgIH0gZWxzZSBpZiAoZGlzcG9zID09ICdQJykgeyAvKiBEaXR0byBmb3IgcHJpbnQgKi8K KwkJY2hhciAqIHRtcCA9IE5VTEw7CisJCWludCBuOworCQlleHRlcm4gY2hhciAqUFJJTlRDTUQ7 CisJCW4gPSAoaW50KXN0cmxlbihQUklOVENNRCkgKyAoaW50KXN0cmxlbihpYXR0ci5kaXNwLnZh bCsxKSArIDQ7CisJCWlmICh0bXAgPSAoY2hhciAqKW1hbGxvYyhuKSkgeworCQkgICAgc3ByaW50 Zih0bXAsCS8qIHNhZmUgKHByZWNoZWNrZWQpICovCisJCQkgICAgIiVzICVzIiwgUFJJTlRDTUQs IGlhdHRyLmRpc3AudmFsICsgMSk7CisJCSAgICB4ID0gb3BlbmMoWk9GSUxFLChjaGFyICopdG1w KTsKKwkJICAgIGZyZWUodG1wKTsKKwkJfSBlbHNlCisJCSAgeCA9IDA7CisJICAgIH0gZWxzZQor I2VuZGlmIC8qIFVOSVggKi8KKwkgICAgICB4ID0gb3BlbmEoZmlsbmFtLCZpYXR0cik7CS8qIG9w ZW4gdGhlIGZpbGUsIHdpdGggYXR0cmlidXRlcyAqLworCX0KKwlpZiAoeCkgewkJCS8qIElmIGZp bGUgd2FzIG9wZW5lZCBvayAqLworCSAgICBpbnQgcmMsIHFmOworI2lmbmRlZiBOT1NQTAorCSAg ICBxZiA9IHF1ZXJ5OworI2Vsc2UKKwkgICAgcWYgPSAwOworI2VuZGlmIC8qIE5PU1BMICovCisK KyNpZmRlZiBDS1RVTklORworCSAgICByYyA9IChiaW5hcnkgJiYgIXBhcml0eSkgPworCSAgICAg IGJkZWNvZGUocmRhdGFwLHB1dGZpbCk6CisJICAgICAgIGRlY29kZShyZGF0YXAsIHFmID8gcHV0 dHJtIDogcHV0ZmlsLCAxKTsKKyNlbHNlCisJICAgIHJjID0gZGVjb2RlKHJkYXRhcCwgcWYgPyBw dXR0cm0gOiBwdXRmaWwsIDEpOworI2VuZGlmIC8qIENLVFVOSU5HICovCisJICAgIGlmIChyYyA8 IDApIHsKKwkJZXJycGt0KChDSEFSICopIkVycm9yIHdyaXRpbmcgZGF0YSIpOworCQlSRVNVTUU7 CisJCXJldHVybigtMSk7CisJICAgIH0KKyNpZmRlZiBTVFJFQU1JTkcKKwkgICAgaWYgKHN0cmVh bWluZykJCS8qIFN0cmVhbWluZyB3YXMgbmVnb3RpYXRlZCAqLworCSAgICAgIGZhc3RhY2soKTsJ CS8qIEFDSyB3aXRob3V0IEFDS2luZy4gKi8KKwkgICAgZWxzZQorI2VuZGlmIC8qIFNUUkVBTUlO RyAqLworCSAgICAgIGFjaygpOwkJCS8qIGFja25vd2xlZGdlIGl0ICovCisJICAgIEJFR0lOIHJk cGt0OwkJLyogYW5kIHN3aXRjaCB0byByZWNlaXZlLWRhdGEgc3RhdGUgKi8KKwkgICAgcmV0dXJu KC0xKTsKKwl9IGVsc2UgewkJCS8qIG90aGVyd2lzZSAqLworCSAgICBlcnJwa3QoKENIQVIgKikg cmZfZXJyKTsJLyogc2VuZCBlcnJvciBwYWNrZXQgKi8KKyAgICAJICAgIFJFU1VNRTsJCQkvKiBh bmQgcXVpdC4gKi8KKwkgICAgcmV0dXJuKC0xKTsKKwl9CisgICAgfQorfQorCitzdGF0aWMgaW50 CityY3Zfc2hvcnRyZXBseSgpIHsKKyNpZmRlZiBQS1RaRVJPSEFDSworICAgIHN1Y2Nlc3MgPSAw OworICAgIGRlYnVnKEYxMTEsInJjdl9zaG9ydHJlcGx5IixyZGF0YXAsaXBrdGxlbik7CisgICAg aWYgKGlwa3RhY2tbMF0gJiYgIXN0cm5jbXAoaXBrdGFjaywoY2hhciAqKXJkYXRhcCxpcGt0bGVu KSkgeworCS8qIE5vIGl0J3MgdGhlIEFDSyB0byB0aGUgSSBwYWNrZXQgYWdhaW4gKi8KKwl4ID0g c2NtZCh2Y21kLChDSEFSICopY21hcmcpOwkvKiBTbyBzZW5kIHRoZSBSRU1PVEUgY29tbWFuZCBh Z2FpbiAqLworCS8qIE1heWJlIHRoaXMgc2hvdWxkIGJlIHJlc2VuZCgpICovCisJZGVidWcoRjEx MCwiSVBLVFpFUk9IQUNLIixpcGt0YWNrLHgpOworCWlmICh4IDwgMCkgeworCSAgICBlcnJwa3Qo KENIQVIgKilzcmltc2cpOworCSAgICBSRVNVTUU7CisJICAgIHJldHVybigtMSk7CisJfQorICAg IH0gZWxzZSB7CisJaXBrdGFja1swXSA9IE5VTDsKKyNlbmRpZiAvKiBQS1RaRVJPSEFDSyAqLwor CXVyc2VydmVyID0gMTsKKyNpZm5kZWYgTk9TRVJWRVIKKyNpZm5kZWYgTk9TUEwKKwlpZiAocXVl cnkpIHsJCQkvKiBJZiB0byBxdWVyeSwgKi8KKwkgICAgcWJ1ZnAgPSBxdWVyeWJ1ZjsJCS8qICBp bml0aWFsaXplIHF1ZXJ5IHJlc3BvbnNlIGJ1ZmZlciAqLworCSAgICBxYnVmbiA9IDA7CisJICAg IHF1ZXJ5YnVmWzBdID0gTlVMOworCX0KKyNlbmRpZiAvKiBOT1NQTCAqLworCXggPSAxOworCWlm IChyZW1maWxlKSB7CQkJLyogUmVzcG9uc2UgcmVkaXJlY3RlZCB0byBmaWxlICovCisJICAgIHJm X2VyciA9ICJDYW4ndCBvcGVuIGZpbGUiOworCSAgICBpZiAocmVtcGlwZSkJCS8qIG9yIHBpcGUg Ki8KKwkgICAgICB4ID0KKyNpZm5kZWYgTk9QVVNICisJCXp4Y21kKFpPRklMRSxyZW1kZXN0KQkv KiBQaXBlOiBTdGFydCBjb21tYW5kICovCisjZWxzZQorCQkwCisjZW5kaWYgLyogTk9QVVNIICov CisJCTsKKwkgICAgZWxzZQorCSAgICAgIHggPSBvcGVuYShyZW1kZXN0LCZpYXR0cik7IC8qIEZp bGU6IE9wZW4gd2l0aCBhdHRyaWJ1dGVzICovCisJICAgIGRlYnVnKEYxMTEsInJjdl9zaG9ydHJl cGx5IHJlbWZpbGUiLHJlbWRlc3QseCk7CisJfSBlbHNlIHsKKwkgICAgeCA9IG9wZW50KCZpYXR0 cik7CQkvKiAib3BlbiIgdGhlIHNjcmVlbiAqLworCX0KKwlpZiAoeCkgewkJCS8qIElmIGZpbGUg d2FzIG9wZW5lZCBvayAqLworCSAgICBpZiAoZGVjb2RlKHJkYXRhcCwKKyNpZm5kZWYgTk9TUEwK KwkJICAgICAgIChxdWVyeSB8fCAhcmVtZmlsZSkgPyBwdXR0cm0gOgorI2Vsc2UKKwkJICAgICAg ICFyZW1maWxlID8gcHV0dHJtIDoKKyNlbmRpZiAvKiBOT1NQTCAqLworCQkgICAgICAgenB1dGZp bCwgMSkgPCAwKSB7IC8qIE5vdGU6IHpwdXRmaWwsIG5vdCBwdXRmaWwuICovCisJCWVycnBrdCgo Q0hBUiAqKSJFcnJvciB3cml0aW5nIGRhdGEiKTsKKwkJUkVTVU1FOworCQlyZXR1cm4oLTEpOwor CSAgICB9IGVsc2UgeworCQlpZiAocmRhdGFwKQkJLyogSWYgd2UgaGFkIGRhdGEgKi8KKwkJICBp ZiAoKnJkYXRhcCkJCS8qIGFkZCBhIGxpbmUgdGVybWluYXRvciAqLworCQkgICAgaWYgKHJlbWZp bGUpIHsJLyogdG8gZmlsZSAqLworCQkJenNvdXRsKFpPRklMRSwiIik7CisJCSAgICB9IGVsc2Ug ewkJLyogb3IgdG8gc2NyZWVuLiAqLworI2lmbmRlZiBOT0lDUAorCQkJaWYgKCFxdWVyeSB8fCAh eGNtZHNyYykKKyNlbmRpZiAvKiBOT0lDUCAqLworCQkJICBpZiAoIShxdWlldCAmJiByY2RhY3Rp dmUpKQorCQkJICAgIGNvbm9sbCgiIik7CisJCSAgICB9CisJCWlmIChieWVfYWN0aXZlICYmIG5l dHdvcmspIHsgLyogSSBzZW50IEJZRSBvciBSRU1PVEUgTE9HT1VUICovCisJCSAgICBtc2xlZXAo NTAwKTsJLyogY29tbWFuZCBhbmQgZ290IHRoZSBBQ0suLi4gKi8KKwkJICAgIGJ5ZV9hY3RpdmUg PSAwOworCQkgICAgdHRjbG9zKDApOworCQl9CisJCWNsc29mKDApOworCQlpZiAoIWVwa3RzZW50 ICYmICFlcGt0cmN2ZCkgLyogSWYgbm8gZXJyb3IgcGFja2V0Li4uICovCisJCSAgc3VjY2VzcyA9 IDE7CQkvKiBzdWNjZXNzLiAqLworCQlSRVNVTUU7CisJCXJldHVybigtMSk7CisJICAgIH0KKwl9 IGVsc2UgewkJCS8qIEZpbGUgbm90IG9wZW5lZCBPSyAqLworCSAgICBlcnJwa3QoKENIQVIgKikg cmZfZXJyKTsJLyogc2VuZCBlcnJvciBtZXNzYWdlICovCisJICAgIFJFU1VNRTsJCQkvKiBhbmQg cXVpdC4gKi8KKwkgICAgcmV0dXJuKC0xKTsKKwl9CisjZW5kaWYgLyogTk9TRVJWRVIgKi8KKyNp ZmRlZiBQS1RaRVJPSEFDSworICAgIH0KKyNlbmRpZiAvKiBQS1RaRVJPSEFDSyAqLworICAgIGRl YnVnKEYxMDEsInJjdl9zaG9ydHJlcGx5IGZhbGx0aHJ1IiwiIixzdWNjZXNzKTsKKyAgICByZXR1 cm4oLTEpOworfQorCisKK3N0YXRpYyBpbnQKK3Nydl9xdWVyeSgpIHsKKyNpZm5kZWYgTk9TRVJW RVIKKyNpZm5kZWYgTk9TUEwKKyAgICBjaGFyIGM7CisjaWZkZWYgQ0tTWVNMT0cKKyAgICBpZiAo Y2t4c3lzbG9nID49IFNZU0xHX1BSICYmIGNreGxvZ2dpbmcpCisgICAgICBja3N5c2xvZyhTWVNM R19QUiwgMSwgInNlcnZlciIsICJSRU1PVEUgUVVFUlkiLCAoY2hhciAqKXNydmNtZCk7CisjZW5k aWYgLyogQ0tTWVNMT0cgKi8KKyNpZmRlZiBJS1NEQgorICAgIGlmIChpa2Rib3Blbikgc2xvdHN0 YXRlKHdoYXQsIlJFTU9URSBRVUVSWSIsIChjaGFyICopKHNydmNtZCsyKSwgIiIpOworI2VuZGlm IC8qIElLU0RCICovCisgICAgYyA9ICooc3J2Y21kKzIpOwkJCS8qIFEgPSBRdWVyeSwgUyA9IFNl dCAqLworICAgIGlmIChjID09ICdRJykgewkJCS8qIFF1ZXJ5ICovCisJaWYgKCFFTkFCTEVEKGVu X3F1ZSkpIHsgLyogU2VjdXJpdHkgKi8KKwkgICAgZXJycGt0KChDSEFSICopIlJFTU9URSBRVUVS WSBkaXNhYmxlZCIpOworCSAgICBSRVNVTUU7CisJICAgIHJldHVybigtMSk7CisJfSBlbHNlIHsJ CQkvKiBRdWVyeSBhbGxvd2VkICovCisJICAgIGludCBuOyBjaGFyICpwLCAqcTsKKwkgICAgcWJ1 ZnAgPSBxdWVyeWJ1ZjsJCS8qIFdpcGUgb3V0IG9sZCBzdHVmZiAqLworCSAgICBxYnVmbiA9IDA7 CisJICAgIHF1ZXJ5YnVmWzBdID0gTlVMOworCSAgICBwID0gKGNoYXIgKikgc3J2Y21kICsgMzsJ LyogUG9pbnRlciBmb3IgbWFraW5nIHdyYXBwZXIgKi8KKwkgICAgbiA9IHN0cmxlbigoY2hhciAq KXNydmNtZCk7CS8qIFBvc2l0aW9uIG9mIGVuZCAqLworCSAgICBjID0gKihzcnZjbWQrNCk7CQkv KiBXaGljaCB0eXBlIG9mIHZhcmlhYmxlICovCisKKwkgICAgaWYgKCooc3J2Y21kKzYpID09IENN RFEpIHsJLyogU3RhcnRzIHdpdGggY29tbWFuZCBxdW90ZT8gKi8KKwkJcCA9IChjaGFyICopIHNy dmNtZCArIDY7IC8qIFRha2UgaXQgbGl0ZXJhbGx5ICovCisJCWlmICgqcCA9PSBDTURRKSBwKys7 CisJICAgIH0gZWxzZSB7CQkJLyogVGhleSBwbGF5ZWQgYnkgdGhlIHJ1bGVzICovCisJCWlmIChj ID09ICdLJykgewkJLyogS2VybWl0IHZhcmlhYmxlICovCisJCSAgICBpbnQgazsKKwkJICAgIGsg PSAoaW50KSBzdHJsZW4ocCk7CisJCSAgICBpZiAoayA+IDAgJiYgcFtrLTFdID09ICcpJykgewor CQkJcCA9IChjaGFyICopKHNydmNtZCArIDQpOworCQkJKihzcnZjbWQrNCkgPSBDTURROworCQkJ KihzcnZjbWQrNSkgPSAnZic7IC8qIEZ1bmN0aW9uLCBzbyBtYWtlIGl0IFxmLi4uKCkgKi8KKwkJ ICAgIH0gZWxzZSB7CisJCQkqKHNydmNtZCszKSA9IENNRFE7IC8qIFN0dWZmIHdyYXBwaW5nIGlu dG8gYnVmZmVyICovCisJCQkqKHNydmNtZCs0KSA9ICd2JzsgIC8qIFZhcmlhYmxlLCBzbyBtYWtl IGl0IFx2KC4uLikgKi8KKwkJCSooc3J2Y21kKzUpID0gJygnOyAgLyogYXJvdW5kIHZhcmlhYmxl IG5hbWUgKi8KKwkJCSooc3J2Y21kK24pID0gJyknOworCQkJKihzcnZjbWQrbisxKSA9IE5VTDsK KwkJICAgIH0KKwkJfSBlbHNlIHsKKwkJICAgICooc3J2Y21kKzMpID0gQ01EUTsgLyogU3R1ZmYg d3JhcHBpbmcgaW50byBidWZmZXIgKi8KKwkJICAgICooc3J2Y21kKzQpID0gJ3YnOyAvKiAgVmFy aWFibGUsIHNvIG1ha2UgaXQgXHYoLi4uKSAqLworCQkgICAgKihzcnZjbWQrNSkgPSAnKCc7CS8q IGFyb3VuZCB2YXJpYWJsZSBuYW1lICovCisJCSAgICAqKHNydmNtZCtuKSA9ICcpJzsKKwkJICAg ICooc3J2Y21kK24rMSkgPSBOVUw7CisJCSAgICBpZiAoYyA9PSAnUycpIHsJLyogU3lzdGVtIHZh cmlhYmxlICovCisJCQkqKHNydmNtZCs0KSA9ICckJzsgLyogIHNvIGl0J3MgXCQoLi4uKSAqLwor CQkgICAgfSBlbHNlIGlmIChjID09ICdHJykgeyAvKiBOb24tXCBHbG9iYWwgdmFyaWFibGUgKi8K KwkJCSooc3J2Y21kKzQpID0gJ20nOyAvKiAgc28gd3JhcCBpdCBpbiBcbSguLi4pICovCisJCSAg ICB9CisJCX0KKwkgICAgfQkJCQkvKiBOb3cgZXZhbHVhdGUgaXQgKi8KKwkgICAgbiA9IFFCVUZM OwkJCS8qIE1heCBsZW5ndGggKi8KKwkgICAgcSA9IHF1ZXJ5YnVmOwkJLyogV2hlcmUgdG8gcHV0 IGl0ICovCisJICAgIGlmICh6enN0cmluZyhwLCZxLCZuKSA8IDApIHsKKwkJZXJycGt0KChuID4g MCkgPyAoQ0hBUiAqKSJDYW4ndCBnZXQgdmFsdWUiCisJCSAgICAgICAgICAgICAgIDogKENIQVIg KikiVmFsdWUgdG9vIGxvbmciCisJCSAgICAgICApOworCQlSRVNVTUU7CisJCXJldHVybigtMSk7 CisJICAgIH0gZWxzZSB7CisJCWlmIChlbmNzdHIoKENIQVIgKilxdWVyeWJ1ZikgPiAtMSkgeyAv KiBFbmNvZGUgaXQgKi8KKwkJICAgIGFjazEoZGF0YSk7CQkvKiBJZiBpdCBmaXRzLCBzZW5kIGl0 IGJhY2sgaW4gQUNLICovCisJCSAgICBzdWNjZXNzID0gMTsKKwkJICAgIFJFU1VNRTsKKwkJICAg IHJldHVybigtMSk7CisJCX0gZWxzZSBpZiAoc25kc3RyaW5nKHF1ZXJ5YnVmKSkgeyAvKiBMb25n IGZvcm0gcmVzcG9uc2UgKi8KKwkJICAgIEJFR0lOIHNzaW5pdDsKKwkJICAgIHJldHVybigtMSk7 CisJCX0gZWxzZSB7CQkvKiBzbmRobHAoKSBmYWlscyAqLworCQkgICAgZXJycGt0KChDSEFSICop IkNhbid0IHNlbmQgdmFsdWUiKTsKKwkJICAgIFJFU1VNRTsKKwkJICAgIHJldHVybigtMSk7CisJ CX0KKwkgICAgfQorCX0KKyAgICB9IGVsc2UgaWYgKGMgPT0gJ1MnKSB7CQkvKiBTZXQgKGFzc2ln bikgKi8KKwlpZiAoIUVOQUJMRUQoZW5fYXNnKSkgewkJLyogU2VjdXJpdHkgKi8KKwkgICAgZXJy cGt0KChDSEFSICopIlJFTU9URSBBU1NJR04gZGlzYWJsZWQiKTsKKwkgICAgUkVTVU1FOworCSAg ICByZXR1cm4oLTEpOworCX0gZWxzZSB7CQkJLyogT0sgKi8KKwkgICAgaW50IG47CisJICAgIG4g PSB4dW5jaGFyKCooc3J2Y21kKzMpKTsJLyogTGVuZ3RoIG9mIG5hbWUgKi8KKwkgICAgbiA9IDMg KyBuICsgMTsJCS8qIFBvc2l0aW9uIG9mIGxlbmd0aCBvZiB2YWx1ZSAqLworCSAgICAqKHNydmNt ZCtuKSA9IE5VTDsJCS8qIERvbid0IG5lZWQgaXQgKi8KKwkgICAgaWYgKGFkZG1hYygoY2hhciAq KShzcnZjbWQrNCksKGNoYXIgKikoc3J2Y21kK24rMSkpIDwgMCkKKwkgICAgICBlcnJwa3QoKENI QVIgKikiUkVNT1RFIEFTU0lHTiBmYWlsZWQiKTsKKwkgICAgZWxzZSB7CisJCWFjaygpOworCQlz dWNjZXNzID0gMTsKKwkgICAgfQorCSAgICBSRVNVTUU7CisJICAgIHJldHVybigtMSk7CisJfQor ICAgIH0gZWxzZSB7CisJZXJycGt0KChDSEFSICopIkJhZGx5IGZvcm1lZCBzZXJ2ZXIgY29tbWFu ZCIpOworCVJFU1VNRTsKKwlyZXR1cm4oLTEpOworICAgIH0KKyNlbHNlCisgICAgZXJycGt0KChD SEFSICopIlZhcmlhYmxlIHF1ZXJ5L3NldCBub3QgYXZhaWxhYmxlIik7CisgICAgUkVTVU1FOwor ICAgIHJldHVybigtMSk7CisjZW5kaWYgLyogTk9TUEwgKi8KKyNlbmRpZiAvKiBOT1NFUlZFUiAq LworfQorCitzdGF0aWMgaW50CitzcnZfY29weSgpIHsKKyNpZm5kZWYgTk9TRVJWRVIKKyNpZmRl ZiBDS1NZU0xPRworICAgIGlmIChja3hzeXNsb2cgPj0gU1lTTEdfUFIgJiYgY2t4bG9nZ2luZykK KyAgICAgIGNrc3lzbG9nKFNZU0xHX1BSLCAxLCAic2VydmVyIiwgIlJFTU9URSBDT1BZIiwgKGNo YXIgKilzcnZjbWQpOworI2VuZGlmIC8qIENLU1lTTE9HICovCisjaWZkZWYgWkNPUFkKKyAgICBp ZiAoIUVOQUJMRUQoZW5fY3B5KSkgeworCWVycnBrdCgoQ0hBUiAqKSJSRU1PVEUgQ09QWSBkaXNh YmxlZCIpOworCVJFU1VNRTsKKwlyZXR1cm4oLTEpOworICAgIH0gZWxzZSB7CisJY2hhciAqc3Ry MSwgKnN0cjIsIGYxWzI1Nl0sIGYyWzI1Nl07CisJaW50ICBsZW4xLCBsZW4yOworICAgICAgICBs ZW4xID0geHVuY2hhcihzcnZjbWRbMV0pOwkvKiBTZXBhcmF0ZSB0aGUgcGFyYW1ldGVycyAqLwor ICAgICAgICBsZW4yID0geHVuY2hhcihzcnZjbWRbMitsZW4xXSk7CisgICAgICAgIHN0cm5jcHko ZjEsKGNoYXIgKikoc3J2Y21kKzIpLGxlbjEpOworICAgICAgICBmMVtsZW4xXSA9IE5VTDsKKyAg ICAgICAgc3RybmNweShmMiwoY2hhciAqKShzcnZjbWQrMytsZW4xKSxsZW4yKTsKKyAgICAgICAg ZjJbbGVuMl0gPSBOVUw7CisjaWZkZWYgSUtTREIKKwlpZiAoaWtkYm9wZW4pIHNsb3RzdGF0ZSh3 aGF0LCJSRU1PVEUgQ09QWSIsIGYxLCBmMik7CisjZW5kaWYgLyogSUtTREIgKi8KKwlpZiAoIUVO QUJMRUQoZW5fY3dkKSkgewkJLyogSWYgQ1dEIGlzIGRpc2FibGVkICovCisJICAgIHpzdHJpcChm MSwmc3RyMSk7CQkvKiBhbmQgdGhleSBpbmNsdWRlZCBhIHBhdGhuYW1lLCAqLworICAgICAgICAg ICAgenN0cmlwKGYyLCZzdHIyKTsKKwkgICAgaWYgKHN0cmNtcChmMSxzdHIxKSB8fCBzdHJjbXAo ZjIsc3RyMikpIHsgLyogUmVmdXNlLiAqLworCQllcnJwa3QoKENIQVIgKikiQWNjZXNzIGRlbmll ZCIpOworCQlSRVNVTUU7CQkJLyogUmVtZW1iZXIsIHRoaXMgaXMgbm90IGEgZ290byEgKi8KKwkJ cmV0dXJuKC0xKTsKKwkgICAgfQorCX0KKwlpZiAoc3RhdGUgPT0gZ2VuZXJpYykgewkJLyogSXQn cyBPSyB0byBnbyBhaGVhZC4gKi8KKyAgICAgICAgICAgIGlmICh6Y29weShmMSxmMikpIHsJCS8q IFRyeSAqLworCQllcnJwa3QoKENIQVIgKikiQ2FuJ3QgY29weSBmaWxlIik7IC8qIGdpdmUgZXJy b3IgbWVzc2FnZSAqLworCSAgICB9IGVsc2UgeworCQlzdWNjZXNzID0gMTsKKwkJYWNrKCk7CisJ ICAgIH0KKyAgICAgICAgICAgIFJFU1VNRTsJCQkvKiB3YWl0IGZvciBuZXh0IHNlcnZlciBjb21t YW5kICovCisJICAgIHJldHVybigtMSk7CisJfQorICAgIH0KKyAgICByZXR1cm4oLTEpOworI2Vs c2UgLyogbm8gWkNPUFkgKi8KKyAgICBlcnJwa3QoKENIQVIgKikiUkVNT1RFIENPUFkgbm90IGF2 YWlsYWJsZSIpOyAvKiBnaXZlIGVycm9yIG1lc3NhZ2UgKi8KKyAgICBSRVNVTUU7CQkJCS8qIHdh aXQgZm9yIG5leHQgc2VydmVyIGNvbW1hbmQgKi8KKyAgICByZXR1cm4oLTEpOworI2VuZGlmIC8q IFpDT1BZICovCisjZW5kaWYgLyogTk9TRVJWRVIgKi8KK30KKworc3RhdGljIGludAorc3J2X3Jl bmFtZSgpIHsKKyNpZm5kZWYgTk9TRVJWRVIKKyNpZmRlZiBDS1NZU0xPRworICAgIGlmIChja3hz eXNsb2cgPj0gU1lTTEdfUFIgJiYgY2t4bG9nZ2luZykKKyAgICAgIGNrc3lzbG9nKFNZU0xHX1BS LCAxLCAic2VydmVyIiwgIlJFTU9URSBSRU5BTUUiLCAoY2hhciAqKXNydmNtZCk7CisjZW5kaWYg LyogQ0tTWVNMT0cgKi8KKyNpZmRlZiBaUkVOQU1FCisgICAgaWYgKCFFTkFCTEVEKGVuX3Jlbikp IHsKKwllcnJwa3QoKENIQVIgKikiUkVNT1RFIFJFTkFNRSBkaXNhYmxlZCIpOworCVJFU1VNRTsK KwlyZXR1cm4oLTEpOworICAgIH0gZWxzZSB7CQkJCS8qIFJFTkFNRSBpcyBlbmFibGVkICovCisJ Y2hhciAqc3RyMSwgKnN0cjIsIGYxWzI1Nl0sIGYyWzI1Nl07CisJaW50IGxlbjEsIGxlbjI7CisJ bGVuMSA9IHh1bmNoYXIoc3J2Y21kWzFdKTsJLyogU2VwYXJhdGUgdGhlIHBhcmFtZXRlcnMgKi8K KwlsZW4yID0geHVuY2hhcihzcnZjbWRbMitsZW4xXSk7CisJc3RybmNweShmMSwoY2hhciAqKShz cnZjbWQrMiksbGVuMSk7CisJZjFbbGVuMV0gPSBOVUw7CisJc3RybmNweShmMiwoY2hhciAqKShz cnZjbWQrMytsZW4xKSxsZW4yKTsKKwlmMltsZW4yXSA9IE5VTDsKKwlsZW4yID0geHVuY2hhcihz cnZjbWRbMitsZW4xXSk7CisJc3RybmNweShmMSwoY2hhciAqKShzcnZjbWQrMiksbGVuMSk7CisJ ZjFbbGVuMV0gPSBOVUw7CisJc3RybmNweShmMiwoY2hhciAqKShzcnZjbWQrMytsZW4xKSxsZW4y KTsKKwlmMltsZW4yXSA9IE5VTDsKKyNpZmRlZiBJS1NEQgorCWlmIChpa2Rib3Blbikgc2xvdHN0 YXRlKHdoYXQsIlJFTU9URSBSRU5BTUUiLCBmMSwgZjIpOworI2VuZGlmIC8qIElLU0RCICovCisJ aWYgKCFFTkFCTEVEKGVuX2N3ZCkpIHsJCS8qIElmIENXRCBpcyBkaXNhYmxlZCAqLworCSAgICB6 c3RyaXAoZjEsJnN0cjEpOwkJLyogYW5kIHRoZXkgaW5jbHVkZWQgYSBwYXRobmFtZSwgKi8KKwkg ICAgenN0cmlwKGYyLCZzdHIyKTsKKwkgICAgaWYgKCBzdHJjbXAoZjEsc3RyMSkgfHwgc3RyY21w KGYyLHN0cjIpICkgeyAvKiByZWZ1c2UuICovCisJCWVycnBrdCgoQ0hBUiAqKSJBY2Nlc3MgZGVu aWVkIik7CisJCVJFU1VNRTsJCQkvKiBSZW1lbWJlciwgdGhpcyBpcyBub3QgYSBnb3RvISAqLwor CQlyZXR1cm4oLTEpOworCSAgICB9CisJfQorCWlmIChzdGF0ZSA9PSBnZW5lcmljKSB7CQkvKiBJ dCdzIE9LIHRvIGdvIGFoZWFkLiAqLworCSAgICBpZiAoenJlbmFtZShmMSxmMikpIHsJLyogVHJ5 ICovCisJCWVycnBrdCgoQ0hBUiAqKSJDYW4ndCByZW5hbWUgZmlsZSIpOyAvKiBHaXZlIGVycm9y IG1zZyAqLworCSAgICB9IGVsc2UgeworCQlzdWNjZXNzID0gMTsKKwkJYWNrKCk7CisJICAgIH0K KwkgICAgUkVTVU1FOwkJCS8qIFdhaXQgZm9yIG5leHQgc2VydmVyIGNvbW1hbmQgKi8KKwkgICAg cmV0dXJuKC0xKTsKKwl9CisgICAgfQorICAgIHJldHVybigtMSk7CisjZWxzZSAvKiBubyBaUkVO QU1FICovCisgICAgLyogR2l2ZSBlcnJvciBtZXNzYWdlICovCisgICAgZXJycGt0KChDSEFSICop IlJFTU9URSBSRU5BTUUgbm90IGF2YWlsYWJsZSIpOworICAgIFJFU1VNRTsJCQkJLyogV2FpdCBm b3IgbmV4dCBzZXJ2ZXIgY29tbWFuZCAqLworICAgIHJldHVybigtMSk7CisjZW5kaWYgLyogWlJF TkFNRSAqLworI2VuZGlmIC8qIE5PU0VSVkVSICovCit9CisKK3N0YXRpYyBpbnQKK3Nydl9sb2dp bigpIHsKKyNpZm5kZWYgTk9TRVJWRVIKKyAgICBjaGFyIGYxW0xPR0lOTEVOKzFdLCBmMltMT0dJ TkxFTisxXSwgZjNbTE9HSU5MRU4rMV07CisgICAgQ0hBUiAqcDsKKyAgICBpbnQgbGVuLCBpOwor CisgICAgZGVidWcoRjEwMSwiUkVNT1RFIExPR0lOIHhfbG9naW4iLCIiLHhfbG9naW4pOworICAg IGRlYnVnKEYxMDEsIlJFTU9URSBMT0dJTiB4X2xvZ2dlZCIsIiIseF9sb2dnZWQpOworCisgICAg ZjFbMF0gPSBOVUw7IGYyWzBdID0gTlVMOyBmM1swXSA9IE5VTDsKKyAgICBsZW4gPSAwOworICAg IGlmIChzcnZjbWRbMV0pCQkJLyogRmlyc3QgbGVuZ3RoIGZpZWxkICovCisgICAgICBsZW4gPSB4 dW5jaGFyKHNydmNtZFsxXSk7CQkvKiBTZXBhcmF0ZSB0aGUgcGFyYW1ldGVycyAqLworCisgICAg aWYgKHhfbG9naW4pIHsJCQkvKiBMb2dpbiByZXF1aXJlZCAqLworCWlmICh4X2xvZ2dlZCkgewkJ CS8qIEFuZCBhbHJlYWR5IGxvZ2dlZCBpbiAqLworCSAgICBpZiAobGVuID4gMCkgewkJLyogTG9n Z2luZyBpbiBhZ2FpbiAqLworCQllcnJwa3QoKENIQVIgKikiQWxyZWFkeSBsb2dnZWQgaW4uIik7 CisJICAgIH0gZWxzZSB7CQkJLyogTG9nZ2luZyBvdXQgKi8KKwkJZGVidWcoRjEwMSwiUkVNT1RF IExPR09VVCIsIiIseF9sb2dnZWQpOworI2lmZGVmIENLU1lTTE9HCisJCWlmIChja3hzeXNsb2cg Pj0gU1lTTEdfUFIgJiYgY2t4bG9nZ2luZykKKwkJICBja3N5c2xvZyhTWVNMR19QUiwgMSwgInNl cnZlciIsICJSRU1PVEUgTE9HT1VUIiwgTlVMTCk7CisjZW5kaWYgLyogQ0tTWVNMT0cgKi8KKyNp ZmRlZiBJS1NEQgorCQlpZiAoaWtkYm9wZW4pIHNsb3RzdGF0ZSh3aGF0LCJSRU1PVEUgTE9HT1VU IiwgIiIsICIiKTsKKyNlbmRpZiAvKiBJS1NEQiAqLworCQl0bG9nKEYxMTAsIkxvZ2dlZCBvdXQi LHhfdXNlciwwKTsKKwkJYWNrMSgoQ0hBUiAqKSJMb2dnZWQgb3V0Iik7CisJCXN1Y2Nlc3MgPSAx OworCQltc2xlZXAoNTAwKTsKKyNpZmRlZiBDS19MT0dJTgorCQl4X2xvZ2dlZCA9IDA7CisjaWZk ZWYgSUtTRAorCQlpZiAoaW5zZXJ2ZXIpCisJCSAgY2t4bG9nb3V0KCk7CisjZW5kaWYgLyogSUtT RCAqLworI2VuZGlmIC8qIENLX0xPR0lOICovCisJICAgIH0KKwl9IGVsc2UgewkJCS8qIE5vdCBs b2dnZWQgaW4geWV0ICovCisJICAgIGRlYnVnKEYxMDEsIlJFTU9URSBMT0dJTiBsZW4iLCIiLGxl bik7CisJICAgIGlmIChsZW4gPiAwKSB7CQkvKiBIYXZlIHVzZXJuYW1lICovCisjaWZkZWYgQ0tT WVNMT0cKKwkJaWYgKGNreHN5c2xvZyA+PSBTWVNMR19QUiAmJiBja3hsb2dnaW5nKQorCQkgIGNr c3lzbG9nKFNZU0xHX1BSLCAxLCAic2VydmVyIiwgIlJFTU9URSBMT0dJTiIsIE5VTEwpOworI2Vu ZGlmIC8qIENLU1lTTE9HICovCisJCWlmIChsZW4gPiBMT0dJTkxFTikgeworCQkgICAgZXJycGt0 KChDSEFSICopIlVzZXJuYW1lIHRvbyBsb25nIik7CisJCX0KKwkJcCA9IHNydmNtZCArIDI7CQkv KiBQb2ludCB0byBpdCAqLworCQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIC8qIENvcHkgaXQg Ki8KKwkJICBmMVtpXSA9IHBbaV07CisJCWYxW2xlbl0gPSBOVUw7CQkvKiBUZXJtaW5hdGUgaXQg Ki8KKwkJcCArPSBsZW47CQkvKiBQb2ludCB0byBuZXh0IGxlbmd0aCBmaWVsZCAqLworCQlpZiAo KnApIHsJCS8qIElmIHdlIGhhdmUgb25lICovCisJCSAgICBsZW4gPSB4dW5jaGFyKCpwKyspOyAv KiBkZWNvZGUgaXQgKi8KKwkJICAgIGlmIChsZW4gPiAwICYmIGxlbiA8PSBMT0dJTkxFTikgewor CQkJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSAvKiBTYW1lIGRlYWwgZm9yIHBhc3N3b3JkICov CisJCQkgIGYyW2ldID0gcFtpXTsKKwkJCWYyW2xlbl0gPSBOVUw7CisJCQlwICs9IGxlbjsJLyog QW5kIGFjY291bnQgKi8KKwkJCWlmICgqcCkgeworCQkJICAgIGxlbiA9IHh1bmNoYXIoKnArKyk7 CisJCQkgICAgaWYgKGxlbiA+IDAgJiYgbGVuIDw9IExPR0lOTEVOKSB7CisJCQkJZm9yIChpID0g MDsgaSA8IGxlbjsgaSsrKQorCQkJCSAgZjNbaV0gPSBwW2ldOwkvKiBTZXQgYnV0IG5ldmVyIHVz ZWQgKi8KKwkJCQlmM1tsZW5dID0gTlVMOyAvKiAoYmVjYXVzZSBhY2NvdW50IG5vdCB1c2VkKSAq LworCQkJICAgIH0KKwkJCX0KKwkJICAgIH0KKwkJfQorCQlkZWJ1ZyhGMTAxLCJSRU1PVEUgTE9H SU4gMSIsIiIseF9sb2dnZWQpOworI2lmZGVmIElLU0QKKyNpZmRlZiBDS19MT0dJTgorCQlpZiAo aW5zZXJ2ZXIpIHsJCS8qIExvZyBpbiB0byBzeXN0ZW0gZm9yIHJlYWwgKi8KKwkJICAgIHhfbG9n Z2VkID0gY2t4bG9naW4oKENIQVIgKilmMSwoQ0hBUiAqKWYyLE5VTEwsMCk7CisJCSAgICBkZWJ1 ZyhGMTAxLCJSRU1PVEUgTE9HSU4gMiIsIiIseF9sb2dnZWQpOworCQkgICAgaWYgKHhfbG9nZ2Vk KSB7CS8qIENvdW50IGF0dGVtcHRzICovCisJCQlsb2d0cmllcyA9IDA7CisJCQlqdXN0b25lID0g MTsKKwkJICAgIH0gZWxzZSB7CisJCQlsb2d0cmllcysrOworCQkJc2xlZXAobG9ndHJpZXMpOwor CQkgICAgfQorCQl9IGVsc2UKKyNlbmRpZiAvKiBDS19MT0dJTiAqLworI2VuZGlmIC8qIElLU0Qg Ki8KKwkJICBpZiAoeF91c2VyICYmIHhfcGFzc3dkKSB7IC8qIFVzZXIgYW5kIHBhc3N3b3JkIG11 c3QgbWF0Y2ggKi8KKwkJICAgICAgaWYgKCFzdHJjbXAoeF91c2VyLGYxKSkgLyogU0VUIFNFUlZF UiBMT0dJTiAqLworCQkJaWYgKCFzdHJjbXAoeF9wYXNzd2QsZjIpKQorCQkJICB4X2xvZ2dlZCA9 IDE7CisJCSAgICAgIGRlYnVnKEYxMDEsIlJFTU9URSBMT0dJTiAzIiwiIix4X2xvZ2dlZCk7CisJ CSAgfSBlbHNlIGlmICh4X3VzZXIpIHsJLyogT25seSB1c2VybmFtZSBnaXZlbiwgbm8gcGFzc3dv cmQgKi8KKwkJICAgICAgaWYgKCFzdHJjbXAoeF91c2VyLGYxKSkgLyogc28gb25seSB1c2VybmFt ZSBtdXN0IG1hdGNoICovCisJCQl4X2xvZ2dlZCA9IDE7CisJCSAgICAgIGRlYnVnKEYxMDEsIlJF TU9URSBMT0dJTiA0IiwiIix4X2xvZ2dlZCk7CisJCSAgfQorI2lmZGVmIENLX0xPR0lOIAorICAg ICAgICAgICAgICAgIGVsc2UgeworCQkgICAgeF9sb2dnZWQgPSBja3hsb2dpbigoQ0hBUiAqKWYx LChDSEFSICopZjIsTlVMTCwwKTsKKwkJICAgIGRlYnVnKEYxMDEsIlJFTU9URSBMT0dJTiA1Iiwi Iix4X2xvZ2dlZCk7CisgICAgICAgICAgICAgICAgfQorI2VuZGlmIC8qIENLX0xPR0lOICovCisJ CWlmICh4X2xvZ2dlZCkgewkJLyogTG9nZ2VkIGluPyAqLworCQkgICAgdGxvZyhGMTEwLCJMb2dn ZWQgaW4iLCB4X3VzZXIsIDApOworCQkgICAgaWYgKGlzZ3Vlc3QpCisJCSAgICAgIGFjazEoKENI QVIgKikiTG9nZ2VkIGluIGFzIGd1ZXN0IC0gcmVzdHJpY3Rpb25zIGFwcGx5Iik7CisJCSAgICBl bHNlCisJCSAgICAgIGFjazEoKENIQVIgKikiTG9nZ2VkIGluIik7CisJCSAgICBzdWNjZXNzID0g MTsKKwkJfSBlbHNlIHsKKwkJICAgIHRsb2coRjExMCwiTG9naW4gZmFpbGVkIiwgZjEsIDApOwor CQkgICAgZXJycGt0KChDSEFSICopIkFjY2VzcyBkZW5pZWQuIik7CisjaWZkZWYgSUtTRAorI2lm ZGVmIENLX0xPR0lOCisJCSAgICBpZiAoaW5zZXJ2ZXIgJiYgbG9ndHJpZXMgPiAyKQorCQkgICAg ICBja3hsb2dvdXQoKTsKKyNlbmRpZiAvKiBDS19MT0dJTiAqLworI2VuZGlmIC8qIElLU0QgKi8K KwkJfQorCSAgICB9IGVsc2UgewkJCS8qIExPR09VVCAqLworCQllcnJwa3QoKENIQVIgKikiTG9n b3V0IGlnbm9yZWQiKTsKKwkgICAgfQorCX0KKyAgICB9IGVsc2UgewkJCQkvKiBMb2dpbiBub3Qg cmVxdWlyZWQgKi8KKwlpZiAobGVuID4gMCkKKwkgIGVycnBrdCgoQ0hBUiAqKSJMb2dpbiBpZ25v cmVkLiIpOworCWVsc2UKKwkgIGVycnBrdCgoQ0hBUiAqKSJMb2dvdXQgaWdub3JlZC4iKTsKKyAg ICB9CisjZW5kaWYgLyogTk9TRVJWRVIgKi8KKyAgICBSRVNVTUU7CisgICAgcmV0dXJuKC0xKTsK K30KKworc3RhdGljIGludAorc3J2X3RpbWVvdXQoKSB7CisgICAgLyogSzk1IGRvZXMgdGhpcyBp dHMgb3duIHdheSAqLworICAgIGlmIChpZGxldG1vKSB7CisjaWZkZWYgSUtTRAorICAgICAgICBp ZiAoaW5zZXJ2ZXIpIHsKKyAgICAgICAgICAgcHJpbnRmKCJcclxuSUtTRCBJRExFIFRJTUVPVVQ6 ICVkIHNlY1xyXG4iLCBzcnZpZGwpOworICAgICAgICAgICBkb2V4aXQoR09PRF9FWElULHhpdHN0 YSk7CisgICAgICAgIH0KKyNlbmRpZiAvKiBJS1NEICovCisJaWRsZXRtbyA9IDA7CisJcHJpbnRm KCJcclxuU0VSVkVSIElETEUgVElNRU9VVDogJWQgc2VjXHJcbiIsIHNydmlkbCk7CisJeGl0c3Rh IHw9ICh3aGF0ICYgV19LRVJNSVQpOworCVFVSVQ7CisgICAgfQorI2lmbmRlZiBOT1NFUlZFUgor ICAgIGVsc2UgaWYgKGZhdGFsaW8pIHsJCQkvKiBDb25uZWN0aW9uIGxvc3QgKi8KKyNpZmRlZiBD S1NZU0xPRworCSAgaWYgKGNreHN5c2xvZyA+PSBTWVNMR19QUiAmJiBja3hsb2dnaW5nKQorCSAg ICBja3N5c2xvZyhTWVNMR19QUiwgMSwgInNlcnZlciIsICJDb25uZWN0aW9uIGxvc3QiLCBOVUxM KTsKKyNlbmRpZiAvKiBDS1NZU0xPRyAqLworI2lmZGVmIElLU0RCCisJICBpZiAoaWtkYm9wZW4p IHNsb3RzdGF0ZSh3aGF0LCJTRVJWRVIgRElTQ09OTkVDVCIsKGNoYXIgKilzcnZjbWQsICIiKTsK KyNlbmRpZiAvKiBJS1NEQiAqLworCXhpdHN0YSB8PSB3aGF0OworCVFVSVQ7CisgICAgfSBlbHNl IGlmIChpbnRlcnJ1cHRlZCkgewkJLyogSW50ZXJydXB0ZWQgYnkgaGFuZCAqLworCWlmICghRU5B QkxFRChlbl9maW4pKSB7CisJICAgIGVycnBrdCgoQ0hBUiAqKSJRVUlUIGRpc2FibGVkIik7CisJ ICAgIFJFU1VNRTsKKwkgICAgcmV0dXJuKC0xKTsKKwl9IGVsc2UgeworCSAgICBpZiAod2hhdCA9 PSBXX1NFTkQgfHwgd2hhdCA9PSBXX1JFQ1YgfHwgd2hhdCA9PSBXX1JFTU8pIHsKKwkJc3VjY2Vz cyA9IDA7CisjaWZkZWYgQ0tTWVNMT0cKKwkJaWYgKGNreHN5c2xvZyA+PSBTWVNMR19QUiAmJiBj a3hsb2dnaW5nKQorCQkgIGNrc3lzbG9nKFNZU0xHX1BSLCAxLCAic2VydmVyIiwgIkludGVycnVw dGVkIiwgTlVMTCk7CisjZW5kaWYgLyogQ0tTWVNMT0cgKi8KKwkgICAgfSBlbHNlIGlmICh3aGF0 ID09IFdfTk9USElORyAmJiBmaWxjbnQgPT0gMCkgeworCQlzdWNjZXNzID0gMTsKKwkgICAgfSAv KiBPdGhlcndpc2UgbGVhdmUgc3VjY2VzcyBhbG9uZSAqLworCSAgICB4aXRzdGEgfD0gKHdoYXQg JiBXX0tFUk1JVCk7CisJICAgIFFVSVQ7CisJfQorICAgIH0gZWxzZSB7CQkJCS8qIFNob3VsZG4n dCBoYXBwZW4gKi8KKwlkZWJ1ZyhGMTAwLCJTRVJWRVIgKHRvcCkgR09UIFVORVhQRUNURUQgJ3En IiwiIiwwKTsKKwlRVUlUOworICAgIH0KKyNlbmRpZiAvKiBOT1NFUlZFUiAqLworfQorCitzdGF0 aWMgaW50CityY3Zfc19wa3QoKSB7CisjaWZuZGVmIE5PU0VSVkVSCisgICAgaWYgKHN0YXRlID09 IHJnZW4pCisgICAgICB1cnNlcnZlciA9IDE7CisgICAgaWYgKC8qIHN0YXRlID09IHNlcnZlICYm ICovIHhfbG9naW4gJiYgIXhfbG9nZ2VkKSB7CisJZXJycGt0KChDSEFSICopIkxvZ2luIHJlcXVp cmVkIik7CisJU0VSVkU7CisgICAgfSBlbHNlCisjZW5kaWYgLyogTk9TRVJWRVIgKi8KKyAgICAg IGlmIChzdGF0ZSA9PSBzZXJ2ZSAmJiAhRU5BQkxFRChlbl9zZW4pKSB7IC8qIE5vdCBpbiBzZXJ2 ZXIgbW9kZSAqLworCWVycnBrdCgoQ0hBUiAqKSJTRU5EIGRpc2FibGVkIik7IC8qIHdoZW4gU0VO RCBpcyBkaXNhYmxlZC4gKi8KKwlSRVNVTUU7CisJcmV0dXJuKC0xKTsKKyAgICB9IGVsc2UgewkJ CQkvKiBPSyB0byBnbyBhaGVhZC4gKi8KKyNpZmRlZiBDS19UTVBESVIKKwlpZiAoZGxkaXIgJiYg IWZfdG1wZGlyKSB7CS8qIElmIHRoZXkgaGF2ZSBhIGRvd25sb2FkIGRpcmVjdG9yeSAqLworCSAg ICBkZWJ1ZyhGMTEwLCJyZWNlaXZlIGRvd25sb2FkIGRpciIsZGxkaXIsMCk7CisJICAgIGlmIChz ID0gemd0ZGlyKCkpIHsJCS8qIEdldCBjdXJyZW50IGRpcmVjdG9yeSAqLworCQlkZWJ1ZyhGMTEw LCJyZWNlaXZlIGN1cnJlbnQgZGlyIixzLDApOworCQlpZiAoemNoZGlyKGRsZGlyKSkgewkvKiBD aGFuZ2UgdG8gZG93bmxvYWQgZGlyZWN0b3J5ICovCisJCSAgICBkZWJ1ZyhGMTAwLCJyZWNlaXZl IHpjaGRpciBvayIsIiIsMCk7CisJCSAgICBja3N0cm5jcHkoc2F2ZGlyLHMsVE1QRElSTEVOKTsK KwkJICAgIGZfdG1wZGlyID0gMTsJLyogUmVtZW1iZXIgdGhhdCB3ZSBkaWQgdGhpcyAqLworCQl9 IGVsc2UKKwkJICBkZWJ1ZyhGMTAwLCJyZWNlaXZlIHpjaGRpciBmYWlsZWQiLCIiLDApOworCSAg ICB9CisJfQorI2VuZGlmIC8qIENLX1RNUERJUiAqLworCW5ha3N0YXRlID0gMTsJCQkvKiBDYW4g c2VuZCBOQUtzIGZyb20gaGVyZS4gKi8KKwlyaW5pdChyZGF0YXApOwkJCS8qIFNldCBwYXJhbWV0 ZXJzICovCisJYmN0dSA9IGJjdHI7CQkJLyogU3dpdGNoIHRvIGFncmVlZC11cG9uIGJsb2NrIGNo ZWNrICovCisJYmN0bCA9IChiY3R1ID09IDQpID8gMiA6IGJjdHU7CS8qIFNldCBibG9jay1jaGVj ayBsZW5ndGggKi8KKwl3aGF0ID0gV19SRUNWOwkJCS8qIFJlbWVtYmVyIHdlJ3JlIHJlY2Vpdmlu ZyAqLworCWxhc3R4ZmVyID0gV19SRUNWOworCXJlc2V0YygpOwkJCS8qIFJlc2V0IGNvdW50ZXJz ICovCisJcnRpbWVyKCk7CQkJLyogUmVzZXQgdGltZXIgKi8KKyNpZmRlZiBHRlRJTUVSCisJcmZ0 aW1lcigpOworI2VuZGlmIC8qIEdGVElNRVIgKi8KKwlzdHJlYW1vbigpOworCUJFR0lOIHJmaWxl OwkJCS8qIEdvIGludG8gcmVjZWl2ZS1maWxlIHN0YXRlICovCisgICAgfQorICAgIHJldHVybigt MSk7Cit9CisKKworLyogRU5EIE9GIFJPVVRJTkVTIE1PVkVEIE9VVCBPRiBTVEFURSBNQUNISU5F ICovCisKKworLyogIFAgUiBPIFQgTyAgLS0gIFByb3RvY29sIGVudHJ5IGZ1bmN0aW9uICAqLwor CitzdGF0aWMgaW50IGlzX3RuID0gMDsJCQkvKiBJdCdzIGEgVGVsbmV0IGNvbm5lY3Rpb24gKi8K KworI2lmZGVmIENLX1NQRUVECitpbnQgZl9jdGxwID0gMDsJCQkJLyogQ29udHJvbC1jaGFyYWN0 ZXIgcHJlZml4IHRhYmxlICovCisjaWZkZWYgQ09NTUVOVAorc2hvcnQgc19jdGxwWzI1Nl07Cisj ZW5kaWYgLyogQ09NTUVOVCAqLworI2VuZGlmIC8qIENLX1NQRUVEICovCisKKy8qCisgIFRoaXMg aXMgc2ltcGx5IGEgd3JhcHBlciBmb3IgdGhlIHJlYWwgcHJvdG9jb2wgZnVuY3Rpb24ganVzdCBi ZWxvdywKKyAgdGhhdCBzYXZlcyBhbnkgaXRlbXMgdGhhdCBtaWdodCBiZSBjaGFuZ2VkIGF1dG9t YXRpY2FsbHkgYnkgcHJvdG9jb2wKKyAgbmVnb3RpYXRpb25zIGFuZCB0aGVuIHJlc3RvcmVzIHRo ZW0gdXBvbiBleGl0IGZyb20gcHJvdG9jb2wgbW9kZS4KKyovCitWT0lECitwcm90bygpIHsKKyAg ICBleHRlcm4gaW50IGJfc2F2ZSwgZl9zYXZlLCBjX3NhdmUsIHNzX3NhdmUsIHNsb3N0YXJ0LCBy ZWxpYWJsZSwgdXJjbGVhcjsKKyNpZm5kZWYgTk9DU0VUUworICAgIGV4dGVybiBpbnQgZmNoYXJz ZXQsIGZjc19zYXZlLCB0Y2hhcnNldCwgdGNzX3NhdmU7CisjZW5kaWYgLyogTk9DU0VUUyAqLwor CisjaWZkZWYgUElQRVNFTkQKKyAgICBleHRlcm4gaW50IHBpcGVzZW5kOworI2VuZGlmIC8qIFBJ UEVTRU5EICovCisjaWZuZGVmIE5PTE9DQUwKKyNpZmRlZiBPUzIKKyAgICBleHRlcm4gaW50IGN1 cnNvcmVuYVtdLCBjdXJzb3Jfc2F2ZSwgdGVybV9pbzsKKyAgICBleHRlcm4gQllURSB2bW9kZTsK KyAgICBleHRlcm4gaW50IGRpc3BsYXlfZGVtbzsKKyAgICBpbnQgdGVybV9pb19zYXZlOworI2Vu ZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIE5PTE9DQUwgKi8KKyNpZmRlZiBUTkNPREUKKyAgICBp bnQgX3VfYmluPTAsIF9tZV9iaW4gPSAwOworI2lmZGVmIElLU19PUFRJT04KKyAgICBpbnQgLyog X3Vfc3RhcnQ9MCwgKi8gX21lX3N0YXJ0ID0gMDsKKyNlbmRpZiAvKiBJS1NfT1BUSU9OICovCisj ZW5kaWYgLyogVE5DT0RFICovCisjaWZkZWYgUEFUVEVSTlMKKyAgICBpbnQgcGFfc2F2ZTsKKyAg ICBpbnQgaTsKKyNlbmRpZiAvKiBQQVRURVJOUyAqLworICAgIGludCBzY2FuX3NhdmU7CisKKyNp ZmRlZiBQQVRURVJOUworICAgIHBhX3NhdmUgPSBwYXR0ZXJuczsKKyNlbmRpZiAvKiBQQVRURVJO UyAqLworICAgIHNjYW5fc2F2ZSA9IGZpbGVwZWVrOworCisgICAgbXlqb2IgPSBzc3RhdGU7CisK KyNpZmRlZiBDS19MT0dJTgorICAgIGlmIChpc2d1ZXN0KSB7CQkJLyogSWYgdXNlciBpcyBhbm9u eW1vdXMgKi8KKwllbl9wcmkgPSAwOwkJCS8qIGRpc2FibGUgcHJpbnRpbmcgKi8KKwllbl9tYWkg PSAwOwkJCS8qIGFuZCBkaXNhYmxlIGVtYWlsICovCisJZW5fZGVsID0gMDsJCQkvKiBhbmQgZmls ZSBkZWxldGlvbiAqLworICAgIH0KKyNlbmRpZiAvKiBDS19MT0dJTiAqLworCisjaWZuZGVmIE5P TE9DQUwKKyNpZmRlZiBPUzIKKyAgICBjdXJzb3Jfc2F2ZSA9IGN1cnNvcmVuYVt2bW9kZV07Cisg ICAgY3Vyc29yZW5hW3Ztb2RlXSA9IDA7CisgICAgdGVybV9pb19zYXZlID0gdGVybV9pbzsKKyAg ICB0ZXJtX2lvID0gMDsKKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBOT0xPQ0FMICovCisg ICAgYl9zYXZlID0gYmluYXJ5OwkJCS8qIFNFVCBGSUxFIFRZUEUgKi8KKyAgICBmX3NhdmUgPSBm bmNudjsJCQkvKiBTRVQgRklMRSBOQU1FUyAqLworICAgIGNfc2F2ZSA9IGJjdHI7CisgICAgcF9z YXZlID0gZm5zcGF0aDsKKyAgICByX3NhdmUgPSByZWN1cnNpdmU7CisgICAgc190aW1pbnQgPSB0 aW1pbnQ7CisgICAgc3Nfc2F2ZSA9IHNsb3N0YXJ0OworI2lmbmRlZiBOT0NTRVRTCisgICAgZmNz X3NhdmUgPSBmY2hhcnNldDsKKyAgICB0Y3Nfc2F2ZSA9IHRjaGFyc2V0OworI2VuZGlmIC8qIE5P Q1NFVFMgKi8KKworI2lmZGVmIENPTU1FTlQKKy8qIERvbid0IGRvIHRoaXMgYmVjYXVzZSB0aGVu IHVzZXIgY2FuIG5ldmVyIGZpbmQgb3V0IHdoYXQgaGFwcGVuZWQuICovCisjaWZkZWYgQ0tfU1BF RUQKKyAgICBmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspCisgICAgICBzX2N0bHBbaV0gPSBjdGxw W2ldOworICAgIGZfY3RscCA9IDE7CisjZW5kaWYgLyogQ0tfU1BFRUQgKi8KKyNlbmRpZiAvKiBD T01NRU5UICovCisgICAgaWYgKHJlbGlhYmxlID09IFNFVF9PTikKKyAgICAgIHNsb3N0YXJ0ID0g MDsKKyAgICBpc190biA9ICghbG9jYWwgJiYgc3N0ZWxuZXQpCisjaWZkZWYgVE5DT0RFCisgICAg ICB8fCAobG9jYWwgJiYgbmV0d29yayAmJiB0dG5wcm90byA9PSBOUF9URUxORVQpCisjZW5kaWYg LyogVE5DT0RFICovCisJOworI2lmZGVmIFROQ09ERQorICAgIGlmIChpc190bikgeworICAgICAg ICBpZiAodG5fYl94ZmVyICYmICEoc3N0ZWxuZXQgfHwgaW5zZXJ2ZXIpKSB7CisJICAgIC8qIFNh dmUgdGhlIGN1cnJlbnQgc3RhdGUgb2YgVGVsbmV0IEJpbmFyeSAqLworCSAgICBfdV9iaW4gPSBU RUxPUFRfVShURUxPUFRfQklOQVJZKTsKKwkgICAgX21lX2JpbiA9IFRFTE9QVF9NRShURUxPUFRf QklOQVJZKTsKKworCSAgICAvKiBJZiBlaXRoZXIgZGlyZWN0aW9uIGlzIG5vdCBCaW5hcnkgYXR0 ZW1wdCB0byBuZWdvdGlhdGUgaXQgKi8KKwkgICAgaWYgKCFfdV9iaW4gJiYgVEVMT1BUX1VfTU9E RShURUxPUFRfQklOQVJZKSAhPSBUTl9OR19SRikgeworCQl0bl9zb3B0KERPLFRFTE9QVF9CSU5B UlkpOworCQlURUxPUFRfVU5BTlNXRVJFRF9ETyhURUxPUFRfQklOQVJZKSA9IDE7CisJICAgIH0K KwkgICAgaWYgKCFfbWVfYmluICYmIFRFTE9QVF9NRV9NT0RFKFRFTE9QVF9CSU5BUlkpICE9IFRO X05HX1JGKSB7CisJCXRuX3NvcHQoV0lMTCxURUxPUFRfQklOQVJZKTsKKwkJVEVMT1BUX1VOQU5T V0VSRURfV0lMTChURUxPUFRfQklOQVJZKSA9IDE7CisJICAgIH0KKwkgICAgaWYgKCEoX21lX2Jp biAmJiBfdV9iaW4pKQorCSAgICAgIHRuX3dhaXQoInByb3RvIHNldCBiaW5hcnkgbW9kZSIpOwor ICAgICAgICB9CisjaWZkZWYgSUtTX09QVElPTgorI2lmZGVmIENLX1hZWgorICAgICAgICBpZiAo cHJvdG9jb2wgIT0gUFJPVE9fSykgewkvKiBOb24tS2VybWl0IHByb3RvY29sIHNlbGVjdGVkICov CisgICAgICAgICAgICBpZiAoVEVMT1BUX1UoVEVMT1BUX0tFUk1JVCkgJiYKKyAgICAgICAgICAg ICAgICBURUxPUFRfU0IoVEVMT1BUX0tFUk1JVCkua2VybWl0LnVfc3RhcnQpIHsKKyAgICAgICAg ICAgICAgICBpa3Nfd2FpdChLRVJNSVRfUkVRX1NUT1AsMCk7IC8qIFN0b3AgdGhlIG90aGVyIFNl cnZlciAqLworCQkvKiBfdV9zdGFydCA9IDE7ICovCisgICAgICAgICAgICB9CisgICAgICAgICAg ICBpZiAoVEVMT1BUX01FKFRFTE9QVF9LRVJNSVQpICYmCisgICAgICAgICAgICAgICAgVEVMT1BU X1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1pdC5tZV9zdGFydCkgeworICAgICAgICAgICAgICAgIHRu X3Npa3MoS0VSTUlUX1NUT1ApOwkvKiBJJ20gbm90IHNlcnZlcmluZyAqLworCSAJVEVMT1BUX1NC KFRFTE9QVF9LRVJNSVQpLmtlcm1pdC5tZV9zdGFydCA9IDA7CisJCV9tZV9zdGFydCA9IDE7Cisg ICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZQorI2VuZGlmIC8qIENLX1hZWiAqLworICAgICAg ICBpZiAoc3N0YXRlID09ICd4JyB8fCBzc3RhdGUgPT0gJ3YnKSB7IC8qIFJlc3BvbmRpbmcgdG8g YSByZXF1ZXN0ICovCisgICAgICAgICAgICBpZiAoIWluc2VydmVyICYmIFRFTE9QVF9VKFRFTE9Q VF9LRVJNSVQpICYmCisgICAgICAgICAgICAgICAgVEVMT1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtl cm1pdC51X3N0YXJ0KSB7CisgICAgICAgICAgICAgICAgaWtzX3dhaXQoS0VSTUlUX1JFUV9TVE9Q LDApOyAvKiBTdG9wIHRoZSBvdGhlciBTZXJ2ZXIgKi8KKwkJLyogX3Vfc3RhcnQgPSAxOyAqLwor ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKFRFTE9QVF9NRShURUxPUFRfS0VSTUlUKSAm JgorICAgICAgICAgICAgICAgICFURUxPUFRfU0IoVEVMT1BUX0tFUk1JVCkua2VybWl0Lm1lX3N0 YXJ0KSB7CisgICAgICAgICAgICAgICAgdG5fc2lrcyhLRVJNSVRfU1RBUlQpOwkvKiBTZW5kIEtl cm1pdC1TZXJ2ZXIgU3RhcnQgKi8KKwkgCVRFTE9QVF9TQihURUxPUFRfS0VSTUlUKS5rZXJtaXQu bWVfc3RhcnQgPSAxOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgewkJCS8qIEluaXRp YXRpbmcgYSByZXF1ZXN0ICovCisgICAgICAgICAgICBpZiAoVEVMT1BUX01FKFRFTE9QVF9LRVJN SVQpICYmCisgICAgICAgICAgICAgICAgVEVMT1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1pdC5t ZV9zdGFydCkgeworICAgICAgICAgICAgICAgIHRuX3Npa3MoS0VSTUlUX1NUT1ApOwkvKiBJJ20g bm90IHNlcnZlcmluZyAqLworCSAJVEVMT1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1pdC5tZV9z dGFydCA9IDA7CisJCV9tZV9zdGFydCA9IDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp ZiAoVEVMT1BUX1UoVEVMT1BUX0tFUk1JVCkgJiYKKwkgICAgICAgICFURUxPUFRfU0IoVEVMT1BU X0tFUk1JVCkua2VybWl0LnVfc3RhcnQpIHsKKwkJLyogU2VuZCBSZXEtU2VydmVyLVN0YXJ0ICov CisgICAgICAgICAgICAgICAgaWYgKCFpa3Nfd2FpdChLRVJNSVRfUkVRX1NUQVJULDApKSB7Cisg ICAgICAgICAgICAgICAgICAgIGlmIChzc3RhdGUgIT0gJ3MnKSB7CisJCQlzdWNjZXNzID0gMDsJ LyogT3RoZXIgS2VybWl0IHJlZnVzZWQgdG8gc2VydmUgKi8KKwkJCWlmIChsb2NhbCkKKwkJCSAg cHJpbnRmKCJBIEtlcm1pdCBTZXJ2ZXIgaXMgbm90IGF2YWlsYWJsZVxyXG4iKTsKKwkJCWRlYnVn KEYxMTAsInByb3RvKCkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQSBLZXJtaXQg U2VydmVyIGlzIG5vdCBhdmFpbGFibGUiLDApOworCQkJdGxvZyhGMTEwLCJJS1MgY2xpZW50L3Nl cnZlciBmYWlsdXJlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkEgS2VybWl0IFNl cnZlciBpcyBub3QgYXZhaWxhYmxlIiwwKTsKKwkJCWdvdG8geHhwcm90b3g7CisgICAgICAgICAg ICAgICAgICAgIH0KKwkJfQorICAgICAgICAgICAgfQorICAgICAgICB9CisjZW5kaWYgLyogSUtT X09QVElPTiAqLworI2lmZGVmIENLX0VOQ1JZUFRJT04KKyAgICAgICAgaWYgKHRuX25vX2VuY3J5 cHRfeGZlciAmJiAhKHNzdGVsbmV0IHx8IGluc2VydmVyKSkgeworICAgICAgICAgICAgY2tfdG5f ZW5jX3N0b3AoKTsKKyAgICAgICAgfQorI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KKyAgICB9 CisjZW5kaWYgLyogVE5DT0RFICovCisKKyAgICBpZiAoIXhmcmludCkgY29ubm9pKCk7CisgICAg eHhwcm90bygpOwkJCQkvKiBDYWxsIHRoZSByZWFsIHByb3RvY29sIGZ1bmN0aW9uICovCisKKyNp ZmRlZiBJS1NfT1BUSU9OCisgIHh4cHJvdG94OgorI2VuZGlmIC8qIElLU19PUFRJT04gKi8KKyAg ICB4ZmVyc3RhdCA9IHN1Y2Nlc3M7CQkJLyogUmVtZW1iZXIgdHJhbnNmZXIgc3RhdHVzICovCisg ICAga2FjdGl2ZSA9IDA7CisKKyNpZmRlZiBUTkNPREUKKyNpZmRlZiBDS19FTkNSWVBUSU9OCisg ICAgICAgIGlmICh0bl9ub19lbmNyeXB0X3hmZXIgJiYgIShzc3RlbG5ldCB8fCBpbnNlcnZlcikp IHsKKyAgICAgICAgICAgIGNrX3RuX2VuY19zdGFydCgpOworICAgICAgICB9CisjZW5kaWYgLyog Q0tfRU5DUllQVElPTiAqLworI2lmZGVmIElLU19PUFRJT04KKyAgICBpZiAoVEVMT1BUX01FKFRF TE9QVF9LRVJNSVQpICYmCisgICAgICAgIFRFTE9QVF9TQihURUxPUFRfS0VSTUlUKS5rZXJtaXQu bWVfc3RhcnQgJiYgIV9tZV9zdGFydCkgeworICAgICAgICB0bl9zaWtzKEtFUk1JVF9TVE9QKTsJ CS8qIFNlcnZlciBpcyBzdG9wcGVkICovCisgCVRFTE9QVF9TQihURUxPUFRfS0VSTUlUKS5rZXJt aXQubWVfc3RhcnQgPSAwOworICAgIH0KKyNlbmRpZiAvKiBJS1NfT1BUSU9OICovCisgICAgaWYg KGlzX3RuICYmIHRuX2JfeGZlciAmJiAhKHNzdGVsbmV0IHx8IGluc2VydmVyKSkgeworICAgICAg ICAvKiBpZiB3ZSBuZWdvdGlhdGVkIEJpbmFyeSBtb2RlIHRyeSB0byByZXNldCBpdCAqLworICAg ICAgICBpZiAoIV91X2JpbikgeworICAgICAgICAgICAgLyogQ2hlY2sgdG8gc2VlIGlmIHRoZSBz dGF0ZSBjaGFuZ2VkIGR1cmluZyB0aGUgdHJhbnNmZXIgKi8KKwkgICAgaWYgKFRFTE9QVF9VKFRF TE9QVF9CSU5BUlkpKSB7CisJCXRuX3NvcHQoRE9OVCxURUxPUFRfQklOQVJZKTsKKwkJVEVMT1BU X1VOQU5TV0VSRURfRE9OVChURUxPUFRfQklOQVJZKSA9IDE7CisJICAgIH0gZWxzZQorCSAgICAg IF91X2JpbiA9IDE7CQkvKiBTbyB3ZSBkb24ndCBjYWxsIHRuX3dhaXQoKSAqLworICAgICAgICB9 CisgICAgICAgIGlmICghX21lX2JpbikgeworICAgICAgICAgICAgLyogQ2hlY2sgdG8gc2VlIGlm IHRoZSBzdGF0ZSBjaGFuZ2VkIGR1cmluZyB0aGUgdHJhbnNmZXIgKi8KKwkgICAgaWYgKFRFTE9Q VF9NRShURUxPUFRfQklOQVJZKSkgeworCQl0bl9zb3B0KFdPTlQsVEVMT1BUX0JJTkFSWSk7CisJ CVRFTE9QVF9VTkFOU1dFUkVEX1dPTlQoVEVMT1BUX0JJTkFSWSkgPSAxOworCSAgICB9IGVsc2UK KwkgICAgICBfbWVfYmluID0gMTsJCS8qIFNvIHdlIGRvbid0IGNhbGwgdG5fd2FpdCgpICovCisJ fQorCWlmICghKF9tZV9iaW4gJiYgX3VfYmluKSkKKwkgIHRuX3dhaXQoInByb3RvIHJlc2V0IGJp bmFyeSBtb2RlIik7CisgICAgfQorI2VuZGlmIC8qIFROQ09ERSAqLworCisjaWZkZWYgUEFUVEVS TlMKKyAgICBwYXR0ZXJucyA9IHBhX3NhdmU7CisjZW5kaWYgLyogUEFUVEVSTlMgKi8KKyAgICBm aWxlcGVlayA9IHNjYW5fc2F2ZTsKKworI2lmZGVmIFNUUkVBTUlORworICAgIHN0cmVhbWluZyA9 IDA7CisgICAgLyogc3RyZWFtb2sgPSAwOyAqLworI2VuZGlmIC8qIFNUUkVBTUlORyAqLworI2lm ZGVmIENPTU1FTlQKKyNpZmRlZiBDS19TUEVFRAorICAgIGZvciAoaSA9IDA7IGkgPCAyNTY7IGkr KykKKyAgICAgIGN0bHBbaV0gPSBzX2N0bHBbaV07CisgICAgZl9jdGxwID0gMDsKKyNlbmRpZiAv KiBDS19TUEVFRCAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICB1cmNsZWFyID0gMDsKKyAg ICBpZiAoIXN1Y2Nlc3MpIHsKKwl4aXRzdGEgfD0gKHdoYXQgJiBXX0tFUk1JVCk7CisJdGxvZyhG MTEwLCIgZmFpbGVkOiIsKGNoYXIgKillcGt0bXNnLDApOworICAgIH0KKyAgICBkZWJ1ZyhGMTEx LCJwcm90byB4ZmVyc3RhdCIsZXBrdG1zZyx4ZmVyc3RhdCk7CisgICAgc2xvc3RhcnQgPSBzc19z YXZlOworICAgIGlmIChzX3RpbWludCA+IC0xKSB7CQkvKiBCZWNhdXNlIG9mIFJFTU9URSBTRVQg Ki8KKwl0aW1pbnQgPSBzX3RpbWludDsKKwlzX3RpbWludCA9IC0xOworICAgIH0KKyAgICByZWN1 cnNpdmUgPSByX3NhdmU7CisgICAgZm5zcGF0aCA9IHBfc2F2ZTsKKyAgICBpZiAoY19zYXZlID4g LTEpIHsJCQkvKiBCZWNhdXNlIG9mIFJFTU9URSBTRVQgKi8KKwliY3RyID0gY19zYXZlOworCWNf c2F2ZSA9IC0xOworICAgIH0KKyAgICBmbmNudiAgID0gZl9zYXZlOworICAgIGJpbmFyeSAgPSBi X3NhdmU7CisjaWZkZWYgUElQRVNFTkQKKyAgICBwaXBlc2VuZCA9IDA7ICAgIAkJCS8qIE5leHQg dGltZSBtaWdodCBub3QgYmUgcGlwZXNlbmQgKi8KKyNlbmRpZiAvKiBQSVBFU0VORCAqLworI2lm bmRlZiBOT0xPQ0FMCisjaWZkZWYgT1MyCisgICAgY3Vyc29yZW5hW3Ztb2RlXSA9IGN1cnNvcl9z YXZlOworICAgIHRlcm1faW8gPSB0ZXJtX2lvX3NhdmU7CisgICAgZGlzcGxheV9kZW1vID0gMTsK KyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBOT0xPQ0FMICovCit9CisKK3N0YXRpYyBWT0lE Cit4eHByb3RvKCkgeworICAgIGludCB4OworICAgIGxvbmcgbHg7CisjaWZkZWYgQ0tfWFlaCisj aWZkZWYgWFlaX0lOVEVSTkFMCitfUFJPVE9UWVAoIGludCBweHl6LCAoaW50KSApOworI2VuZGlm IC8qIFhZWl9JTlRFUk5BTCAqLworI2VuZGlmIC8qIENLX1hZWiAqLworCisgICAgY2hhciB4c3Nb Ml07CQkJLyogU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHNzdGF0ZSAqLworICAgIHhzc1swXSA9 IHNzdGF0ZTsKKyAgICB4c3NbMV0gPSBOVUw7CisgICAgc190aW1pbnQgPSB0aW1pbnQ7CisKKyAg ICBkZWJ1ZyhGMTAxLCJ4eHByb3RvIGVudHJ5IGp1c3RvbmUiLCIiLGp1c3RvbmUpOworICAgIHN1 Y2Nlc3MgPSAwOworCisgICAgcmV0cmlldmUgPSAwOwkJCS8qIFJlc2V0IHRoZXNlIC4uLiAqLwor ICAgIHJlZ2V0ID0gMDsKKyAgICBvcGt0ID0gMDsKKworICAgIGlmIChsb2NhbCAmJiB0dGNoaygp IDwgMCkgewkJLyogR2l2aW5nIEJZRSBvciBGSU4gKi8KKwlpZiAoYnllX2FjdGl2ZSkgewkJLyog YnV0IHRoZXJlIGlzIG5vIGNvbm5lY3Rpb24gKi8KKwkgICAgdHRjbG9zKDApOworCSAgICBzdWNj ZXNzID0gMTsKKwkgICAgcmV0dXJuOworCX0KKwkvKiBEaXR0byBmb3IgYW55IFJFTU9URSBjb21t YW5kICovCisJaWYgKHNzdGF0ZSA9PSAnZycgJiYgY21hcmcgKSB7CisJICAgIGlmICgqY21hcmcg PT0gJ0wnIHx8ICpjbWFyZyA9PSAnRicgfHwgKmNtYXJnID09ICdYJykKKwkgICAgICBzdWNjZXNz ID0gMTsKKwkgICAgZWxzZQorCSAgICAgIHByaW50ZigiP05vIGNvbm5lY3Rpb25cclxuIik7CisJ ICAgIHJldHVybjsKKwl9CisgICAgfQorCisvKiBTZXQgdXAgdGhlIGNvbW11bmljYXRpb24gbGlu ZSBmb3IgZmlsZSB0cmFuc2Zlci4gKi8KKy8qIE5PVEU6IEFsbCBvZiB0aGUgeHhzY3JlZW4oKSBj YWxscyBwcmlvciB0byB0aGUgd2FydCgpIGludm9jYXRpb24gKi8KKy8qIGNvdWxkIGp1c3QgYXMg ZWFzaWx5IGJlIHByaW50ZidzIG9yLCBmb3IgdGhhdCBtYXR0ZXIsIGhpbnRzLiAqLworCisgICAg aWYgKGxvY2FsICYmIChzcGVlZCA8IDBMKSAmJiAobmV0d29yayA9PSAwKSkgeworCXh4c2NyZWVu KFNDUl9FTSwwLDBMLCJTb3JyeSwgeW91IG11c3QgJ3NldCBzcGVlZCcgZmlyc3QiKTsKKwlyZXR1 cm47CisgICAgfQorICAgIHggPSAtMTsKKyAgICBpZiAodHRvcGVuKHR0bmFtZSwmeCxtZG10eXAs Y2R0aW1vKSA8IDApIHsKKwlkZWJ1ZyhGMTExLCJmYWlsZWQ6IHByb3RvIHR0b3BlbiBsb2NhbCIs dHRuYW1lLGxvY2FsKTsKKwl4eHNjcmVlbihTQ1JfRU0sMCwwTCwiQ2FuJ3Qgb3BlbiBsaW5lIik7 CisJcmV0dXJuOworICAgIH0KKyAgICBpZiAoeCA+IC0xKSBsb2NhbCA9IHg7CisgICAgZGVidWco RjExMSwicHJvdG8gdHRvcGVuIGxvY2FsIix0dG5hbWUsbG9jYWwpOworCisgICAgbHggPSAobG9j YWwgJiYgIW5ldHdvcmspID8gc3BlZWQgOiAtMTsKKyNpZmRlZiBORVRDT05OCisjaWZkZWYgQ0tf U1BFRUQKKyAgICBpZiAoaXNfdG4pIHsKKwljdGxwWyh1bnNpZ25lZCkyNTVdID0gY3RscFtDUl0g PSAxOworCWlmIChwYXJpdHkgPT0gJ2UnIHx8IHBhcml0eSA9PSAnbScpIGN0bHBbMTI3XSA9IDE7 CisJaWYgKGZsb3cgPT0gRkxPX1hPTlgpIHsJCS8qIEFsc28gd2F0Y2ggb3V0IGZvciBYb24vWG9m ZiAqLworCSAgICBjdGxwWzE3XSA9IGN0bHBbMTldID0gMTsKKwkgICAgY3RscFsxNysxMjhdID0g Y3RscFsxOSsxMjhdID0gMTsKKwl9CisgICAgfQorI2VuZGlmIC8qIENLX1NQRUVEICovCisjZW5k aWYgLyogTkVUQ09OTiAqLworICAgIGlmICh0dHBrdChseCxmbG93LHBhcml0eSkgPCAwKSB7CS8q IFB1dCBsaW5lIGluIHBhY2tldCBtb2RlLCAqLworCXh4c2NyZWVuKFNDUl9FTSwwLDBMLCJDYW4n dCBjb25kaXRpb24gbGluZSIpOworCXJldHVybjsKKyAgICB9CisgICAgaWYgKGxvY2FsICYmICFu ZXR3b3JrICYmIGNhcnJpZXIgIT0gQ0FSX09GRikgeworCWludCB4OwkJCQkvKiBTZXJpYWwgY29u bmVjdGlvbiAqLworCXggPSB0dGdtZG0oKTsJCQkvKiB3aXRoIGNhcnJpZXIgY2hlY2tpbmcgKi8K KwlpZiAoeCA+IC0xKSB7CisJICAgIGlmICghKHggJiBCTV9EQ0QpKSB7CisJCWRlYnVnKEYxMDEs InByb3RvIHR0Z21kbSIsIiIsMCk7CisJCXh4c2NyZWVuKFNDUl9FTSwwLDBMLCJDYXJyaWVyIHJl cXVpcmVkIGJ1dCBub3QgZGV0ZWN0ZWQiKTsKKwkJcmV0dXJuOworCSAgICB9CisJfQorICAgIH0K KyAgICAvKiBTZW5kIHJlbW90ZSBzaWRlJ3MgInJlY2VpdmUiIG9yICJzZXJ2ZXIiIHN0YXJ0dXAg c3RyaW5nLCBpZiBhbnkgKi8KKyAgICBpZiAobG9jYWwgJiYgY2tpbmRleCgoY2hhciAqKXhzcywi c3JnY2poayIsMCwwLDEpKSB7CisJY2hhciAqcyA9IE5VTEw7CisgICAgICAgIGlmICgKKyNpZmRl ZiBJS1NfT1BUSU9OCisJICAgIC8qIERvbid0IHNlbmQgYXV0by1ibGFoIHN0cmluZyBpZiB3ZSBr bm93IG90aGVyIHNpZGUgaXMgc2VydmluZyAqLworCSAgICAhVEVMT1BUX1UoVEVMT1BUX0tFUk1J VCkgfHwKKwkgICAgIVRFTE9QVF9TQihURUxPUFRfS0VSTUlUKS5rZXJtaXQudV9zdGFydAorI2Vs c2UKKwkgICAgMQorI2VuZGlmIC8qIElLU19PUFRJT04gKi8KKwkgICAgKSB7CisJICAgIGlmIChz c3RhdGUgPT0gJ3MnKSB7CS8qIFNlbmRpbmcgZmlsZShzKSAqLworCQlzID0gYmluYXJ5ID8gcHRh Yltwcm90b2NvbF0uaF9iX2luaXQgOiBwdGFiW3Byb3RvY29sXS5oX3RfaW5pdDsKKwkgICAgfSBl bHNlIGlmIChwcm90b2NvbCA9PSBQUk9UT19LKSB7IC8qIENvbW1hbmQgZm9yIHNlcnZlciAqLwor CQlzID0gcHRhYltwcm90b2NvbF0uaF94X2luaXQ7CisJICAgIH0KKwl9CisjaWZkZWYgQ0tfU1BF RUQKKyNpZm5kZWYgVU5QUkVGSVhaRVJPCisJaWYgKHByb3RvY29sID09IFBST1RPX0spCS8qIEJl Y2F1c2Ugb2YgQy1zdHJpbmdzLi4uICovCisJICBjdGxwWzBdID0gMTsKKyNlbmRpZiAvKiBVTlBS RUZJWFpFUk8gKi8KKyNlbmRpZiAvKiBDS19TUEVFRCAqLworCWlmIChzKSBpZiAoKnMpIHsJCS8q IElmIHdlIGhhdmUgYSBjb21tYW5kIHRvIHNlbmQuLi4gKi8KKwkgICAgY2hhciB0bXBidWZbMzU2 XTsKKwkgICAgaW50IHRtcGJ1ZnNpeiA9IDM1NjsKKwkgICAgaW50IHN0dWZmID0gLTEsIHN0dWZm MiA9IC0xLCBsZW4gPSAwOworCSAgICBleHRlcm4gaW50IHRubG07CisJICAgIGlmIChzc3RhdGUg PT0gJ3MnKSB7CS8qIFNlbmRpbmcgZmlsZShzKSAqLworI2lmZGVmIENLX1hZWgorCQlpZiAocHJv dG9jb2wgPT0gUFJPVE9fWCkgeworCQkgICAgY2hhciAqIHMyOworCQkgICAgczIgPSBjbWFyZzJb MF0gPyBjbWFyZzIgOiBjbWFyZzsKKwkJICAgIGlmICgoaW50KXN0cmxlbihzKSArIChpbnQpc3Ry bGVuKHMyKSArIDQgPCAzNTYpCisJCSAgICAgIHNwcmludGYodG1wYnVmLCBzLCBzMik7CisJCSAg ICBlbHNlCisJCSAgICAgIHRtcGJ1ZlswXSA9IE5VTDsKKwkJfSBlbHNlIHsKKyNlbmRpZiAvKiBD S19YWVogKi8KKwkJICAgIGNrbWFrbXNnKHRtcGJ1ZiwgMzU2LCBzLCBOVUxMLCBOVUxMLCBOVUxM KTsKKyNpZmRlZiBDS19YWVoKKwkJfQorI2VuZGlmIC8qIENLX1hZWiAqLworCSAgICB9IGVsc2Ug ewkJCS8qIENvbW1hbmQgZm9yIHNlcnZlciAqLworCQlja3N0cm5jcHkodG1wYnVmLHMsMzU2KTsK KwkgICAgfQorCSAgICBja3N0cm5jYXQodG1wYnVmLCAiXDAxNSIsc2l6ZW9mKHRtcGJ1ZikpOwor CSAgICBpZiAodG5sbSkJCQkvKiBURVJNSU5BTCBORVdMSU5FIE9OICovCisJICAgICAgc3R1ZmYg PSBMRjsJCS8qIFN0dWZmIExGICovCisjaWZkZWYgVE5DT0RFCisJICAgIC8qIFRFTE5FVCBORVdM SU5FIE1PREUgKi8KKwkgICAgaWYgKGlzX3RuKSB7CisJCXN3aXRjaCAoVEVMT1BUX01FKFRFTE9Q VF9CSU5BUlkpID8gdG5fYl9ubG0gOiB0bl9ubG0pIHsKKwkJICBjYXNlIFROTF9DUjoKKwkJICAg IGJyZWFrOworCQkgIGNhc2UgVE5MX0NSTlVMOgorCQkgICAgYnJlYWs7CisJCSAgY2FzZSBUTkxf Q1JMRjoKKwkJICAgIHN0dWZmMiA9IHN0dWZmOworCQkgICAgc3R1ZmYgPSBMRjsKKwkJICAgIGJy ZWFrOworCQl9CisJICAgIH0KKyNlbmRpZiAvKiBUTkNPREUgKi8KKworI2lmZGVmIE5FVENPTk4K KyNpZmRlZiBUQ1BTT0NLRVQKKyNpZmRlZiBSTE9HQ09ERQorCSAgICBpZiAobmV0d29yayAmJiB0 dG5wcm90byA9PSBOUF9STE9HSU4pIHsKKwkJc3dpdGNoICh0bl9iX25sbSkgeyAvKiBBbHdheXMg QklOQVJZICovCisJCSAgY2FzZSBUTkxfQ1I6CisJCSAgICBicmVhazsKKwkJICBjYXNlIFROTF9D Uk5VTDoKKwkJICAgIHN0dWZmMiA9IHN0dWZmOworCQkgICAgc3R1ZmYgID0gTlVMOworCQkgICAg YnJlYWs7CisJCSAgY2FzZSBUTkxfQ1JMRjoKKwkJICAgIHN0dWZmMiA9IHN0dWZmOworCQkgICAg c3R1ZmYgPSBMRjsKKwkJICAgIGJyZWFrOworCQl9CisJICAgIH0KKyNlbmRpZiAvKiBSTE9HQ09E RSAqLworI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLworI2VuZGlmIC8qIE5FVENPTk4gKi8KKworCSAg ICBsZW4gPSBzdHJsZW4odG1wYnVmKTsKKwkgICAgaWYgKHN0dWZmID49IDAgJiYgbGVuIDwgdG1w YnVmc2l6IC0gMSkgeworCQl0bXBidWZbbGVuKytdID0gc3R1ZmY7CisJCWlmIChzdHVmZjIgPj0g MCAmJiBsZW4gPCB0bXBidWZzaXogLSAxKQorCQkgIHRtcGJ1ZltsZW4rK10gPSBzdHVmZjI7CisJ CXRtcGJ1ZltsZW5dID0gTlVMOworCSAgICB9CisJICAgIHR0b2woKENIQVIgKil0bXBidWYsbGVu KTsKKwkgICAgaWYgKHByb3RvY29sID09IFBST1RPX0spCS8qIEdpdmUgcmVtb3RlIEtlcm1pdCB0 aW1lIHRvIHN0YXJ0ICovCisJICAgICAgbXNsZWVwKDQwMCk7CisJfQorICAgIH0KKworI2lmZGVm IENLX1hZWgorICAgIGlmIChwcm90b2NvbCAhPSBQUk9UT19LKSB7CQkvKiBOb24tS2VybWl0IHBy b3RvY29sIHNlbGVjdGVkICovCisJY2hhciB0bXBidWZbMzU2XTsKKwlpbnQgdG1wYnVmc2l6ID0g MzU2OworCWNoYXIgKiBzID0gIiI7CisKKyNpZmRlZiBDS19UTVBESVIKKwlpZiAoc3N0YXRlID09 ICd2JykgewkJLyogSWYgcmVjZWl2aW5nIGFuZC4uLiAqLworCSAgICBpZiAoZGxkaXIgJiYgIWZf dG1wZGlyKSB7CS8qIGlmIHRoZXkgaGF2ZSBhIGRvd25sb2FkIGRpcmVjdG9yeSAqLworCQlpZiAo cyA9IHpndGRpcigpKSB7CS8qIEdldCBjdXJyZW50IGRpcmVjdG9yeSAqLworCQkgICAgaWYgKHpj aGRpcihkbGRpcikpIHsgLyogQ2hhbmdlIHRvIGRvd25sb2FkIGRpcmVjdG9yeSAqLworCQkJY2tz dHJuY3B5KHNhdmRpcixzLFRNUERJUkxFTik7CisJCQlmX3RtcGRpciA9IDE7CS8qIFJlbWVtYmVy IHRoYXQgd2UgZGlkIHRoaXMgKi8KKwkJICAgIH0KKwkJfQorCSAgICB9CisJfQorI2VuZGlmIC8q IENLX1RNUERJUiAqLworCisjaWZkZWYgWFlaX0lOVEVSTkFMCQkJLyogSW50ZXJuYWwgKi8KKwlz dWNjZXNzID0gIXB4eXooc3N0YXRlKTsKKyNlbHNlCisjaWZkZWYgQ0tfUkVESVIJCQkJLyogRXh0 ZXJuYWwgKi8KKwlzd2l0Y2ggKHNzdGF0ZSkgeworCSAgY2FzZSAncyc6CQkJLyogJ1RpcyBiZXR0 ZXIgdG8gU0VORC4uLiAqLworCSAgICBzID0gYmluYXJ5ID8gcHRhYltwcm90b2NvbF0ucF9iX3Nj bWQgOiBwdGFiW3Byb3RvY29sXS5wX3Rfc2NtZDsKKwkgICAgYnJlYWs7CisJICBjYXNlICd2JzoJ CQkvKiAuLi4gdGhhbiBSRUNFSVZFICovCisJICAgIHMgPSBiaW5hcnkgPyBwdGFiW3Byb3RvY29s XS5wX2JfcmNtZCA6IHB0YWJbcHJvdG9jb2xdLnBfdF9yY21kOworCSAgICBicmVhazsKKwl9CisJ aWYgKCFzKSBzID0gIiI7CisJaWYgKCpzKSB7CisJICAgIGlmIChzc3RhdGUgPT0gJ3MnKSB7CS8q IFNlbmRpbmcgKi8KKwkJZXh0ZXJuIGludCB4ZmVybW9kZTsKKwkJaW50IGsgPSAwLCB4ID0gMCwg YiA9IGJpbmFyeTsKKwkJLyoKKwkJICBJZiBqdXN0IG9uZSBmaWxlIHdlIGNhbiBzY2FuIGl0IHRv IHNldCB0aGUgeGZlciBtb2RlLgorCQkgIE90aGVyd2lzZSBpdCdzIHVwIHRvIHRoZSBleHRlcm5h bCBwcm90b2NvbCBwcm9ncmFtLgorCQkqLworCQlpZiAocGF0dGVybnMgJiYgeGZlcm1vZGUgPT0g WE1PREVfQSAmJiAhaXN3aWxkKGZzcGVjKSkgeworCQkgICAgZXh0ZXJuIGludCBuc2NhbmZpbGU7 CisJCSAgICBrID0gc2NhbmZpbGUoZnNwZWMsJngsbnNjYW5maWxlKTsKKwkJICAgIGlmIChrID4g LTEpIHsKKwkJCWIgPSAoayA9PSBGVF9CSU4pID8gWFlGVF9CIDogWFlGVF9UOworCQkJcyA9IGIg PworCQkJICAgIHB0YWJbcHJvdG9jb2xdLnBfYl9zY21kIDoKKwkJCSAgICBwdGFiW3Byb3RvY29s XS5wX3Rfc2NtZDsKKwkJICAgIH0KKwkJfQorCQlpZiAoKGludClzdHJsZW4ocykgKyAoaW50KXN0 cmxlbihmc3BlYykgPCB0bXBidWZzaXopIHsKKwkJICAgIHNwcmludGYodG1wYnVmLHMsZnNwZWMp OyAvKiBzYWZlIChwcmVjaGVja2VkKSAqLworCQkgICAgdGxvZyhGMTEwLCJTZW5kaW5nIixmc3Bl YywwTCk7CisJCX0KKwkgICAgfSBlbHNlIHsJCQkvKiBSZWNlaXZpbmcgKi8KKwkJaWYgKChpbnQp c3RybGVuKHMpICsgKGludClzdHJsZW4oY21hcmcyKSA8IHRtcGJ1ZnNpeikgeworCQkgICAgc3By aW50Zih0bXBidWYscyxjbWFyZzIpOyAvKiBzYWZlIChwcmVjaGVja2VkKSAqLworCQkgICAgdGxv ZyhGMTEwLCJSZWNlaXZpbmciLGNtYXJnMiwwTCk7CisJCX0KKwkgICAgfQorCSAgICB0bG9nKEYx MTAsIiB2aWEgZXh0ZXJuYWwgcHJvdG9jb2w6Iix0bXBidWYsMCk7CisJICAgIGRlYnVnKEYxMTAs ImNrY3BybyB0dHJ1bmNtZCIsdG1wYnVmLDApOworCSAgICBzdWNjZXNzID0gdHRydW5jbWQodG1w YnVmKTsKKwkgICAgdGxvZyhGMTEwLCIgc3RhdHVzOiIsc3VjY2VzcyA/ICJPSyIgOiAiRkFJTEVE IiwgMCk7CisJfSBlbHNlIHsKKwkgICAgcHJpbnRmKCI/U29ycnksIG5vIGV4dGVybmFsIHByb3Rv Y29sIGRlZmluZWQgZm9yICVzXHJcbiIsCisJCSAgIHB0YWJbcHJvdG9jb2xdLnBfbmFtZQorCQkg ICApOworCX0KKyNlbHNlCisJcHJpbnRmKAorIlNvcnJ5LCBvbmx5IEtlcm1pdCBwcm90b2NvbCBp cyBzdXBwb3J0ZWQgaW4gdGhpcyB2ZXJzaW9uIG9mIEtlcm1pdFxuIgorCSAgICAgICApOworI2Vu ZGlmIC8qIENLX1JFRElSICovCisjZW5kaWYgLyogWFlaX0lOVEVSTkFMICovCisJcmV0dXJuOwor ICAgIH0KKyNlbmRpZiAvKiBDS19YWVogKi8KKworI2lmZGVmIE5UU0lHWAorICAgIGNvbnJhdygp OworICAgIGNvbm5vaSgpOworI2Vsc2UKKyAgICBpZiAoIWxvY2FsKQorICAgICAgY29ubm9pKCk7 CQkJCS8qIE5vIGNvbnNvbGUgaW50ZXJydXB0cyBpZiByZW1vdGUgKi8KKyNlbmRpZiAvKiBOVFNJ RyAqLworCisgICAga2FjdGl2ZSA9IDE7CisgICAgaWYgKHNzdGF0ZSA9PSAneCcpIHsJCS8qIElm IGVudGVyaW5nIHNlcnZlciBtb2RlLCAqLworCWV4dGVybiBpbnQgaG93Y2FsbGVkOworCXNlcnZl ciA9IDE7CQkJLyogc2V0IGZsYWcsICovCisJZGVidWcoRjEwMSwic2VydmVyIGJhY2tncmQiLCIi LGJhY2tncmQpOworCWRlYnVnKEYxMDEsInNlcnZlciBxdWlldCIsIiIscXVpZXQpOworCWRlYnVn KEYxMDAsIlNIT1VMRCBOT1QgU0VFIFRISVMgSUYgSU4gQkFDS0dST1VORCEiLCIiLDApOworCWlm IChob3djYWxsZWQgPT0gSV9BTV9TU0hTVUIpIHsJLyogYW5kIGlzc3VlIGFwcHJvcHJpYXRlIG1l c3NhZ2UuICovCisJICAgIHR0b2woKENIQVIgKikiS0VSTUlUIFJFQURZIFRPIFNFUlZFLi4uXDAx NVwwMTIiLDI2KTsKKwl9IGVsc2UgaWYgKCFsb2NhbCkgeworCSAgICBpZiAoIXF1aWV0ICYmICFi YWNrZ3JkCisjaWZkZWYgSUtTX09QVElPTgorICAgICAgICAgICAgICAgICYmICFURUxPUFRfTUUo VEVMT1BUX0tFUk1JVCkgLyogVXNlciB3YXMgdG9sZCBieSBuZWdvdGlhdGlvbiAqLworI2VuZGlm IC8qIElLU19PUFRJT04gKi8KKwkJKSB7CisJCWNvbm9sbChzcnZ0eHQpOworCQljb25vbGwoIktF Uk1JVCBSRUFEWSBUTyBTRVJWRS4uLiIpOworCSAgICB9CisJfSBlbHNlIHsKKwkgICAgY29ub2wo IkVudGVyaW5nIHNlcnZlciBtb2RlIG9uICIpOworCSAgICBjb25vbGwodHRuYW1lKTsKKwkgICAg Y29ub2xsKCJUeXBlIEN0cmwtQyB0byBxdWl0LiIpOworCSAgICBpZiAoc3J2ZGlzKSBpbnRtc2co LTFMKTsKKyNpZmRlZiBUQ1BTT0NLRVQKKyNpZm5kZWYgTk9MSVNURU4KKwkgICAgaWYgKG5ldHdv cmsgJiYgdGNwc3JmZCA+IDApCisJICAgICAgdHRvbCgoQ0hBUiAqKSJLRVJNSVQgUkVBRFkgVE8g U0VSVkUuLi5cMDE1XDAxMiIsMjYpOworI2VuZGlmIC8qIE5PTElTVEVOICovCisjZW5kaWYgLyog VENQU09DS0VUICovCisJfQorICAgIH0gZWxzZQorICAgICAgc2VydmVyID0gMDsKKyNpZmRlZiBW TVMKKyAgICBpZiAoIXF1aWV0ICYmICFiYWNrZ3JkKSAgICAvKiBTbyBtZXNzYWdlIGRvZXNuJ3Qg b3ZlcndyaXRlIHByb21wdCAqLworICAgICAgY29ub2xsKCIiKTsKKyAgICBpZiAobG9jYWwpIGNv bnJlcygpOyAgICAgICAvKiBTbyBDdHJsLUMgd2lsbCB3b3JrICovCisjZW5kaWYgLyogVk1TICov CisvKgorICBJZiBpbiByZW1vdGUgbW9kZSwgbm90IHNodXNoZWQsIG5vdCBpbiBiYWNrZ3JvdW5k LCBhbmQgYXQgdG9wIGNvbW1hbmQgbGV2ZWwsCisgIGlzc3VlIGEgaGVscGZ1bCBtZXNzYWdlIHRl bGxpbmcgd2hhdCB0byBkby4uLgorKi8KKyAgICBpZiAoIWxvY2FsICYmICFxdWlldCAmJiAhYmFj a2dyZCkgeworCWlmIChzc3RhdGUgPT0gJ3YnKSB7CisJICAgIGNvbm9sbCgiUmV0dXJuIHRvIHlv dXIgbG9jYWwgS2VybWl0IGFuZCBnaXZlIGEgU0VORCBjb21tYW5kLiIpOworCSAgICBjb25vbGwo IiIpOworCSAgICBjb25vbGwoIktFUk1JVCBSRUFEWSBUTyBSRUNFSVZFLi4uIik7CisJfSBlbHNl IGlmIChzc3RhdGUgPT0gJ3MnKSB7CisJICAgIGNvbm9sbCgiUmV0dXJuIHRvIHlvdXIgbG9jYWwg S2VybWl0IGFuZCBnaXZlIGEgUkVDRUlWRSBjb21tYW5kLiIpOworCSAgICBjb25vbGwoIiIpOwor CSAgICBjb25vbGwoIktFUk1JVCBSRUFEWSBUTyBTRU5ELi4uIik7CisJfSBlbHNlIGlmICggc3N0 YXRlID09ICdnJyB8fCBzc3RhdGUgPT0gJ3InIHx8IHNzdGF0ZSA9PSAnaCcgfHwKKwkJICAgIHNz dGF0ZSA9PSAnaicgfHwgc3N0YXRlID09ICdjJyApIHsKKwkgICAgY29ub2xsKCJSZXR1cm4gdG8g eW91ciBsb2NhbCBLZXJtaXQgYW5kIGdpdmUgYSBTRVJWRVIgY29tbWFuZC4iKTsKKwkgICAgY29u b2xsKCIiKTsKKwkgICAgY29ub2xsKChzc3RhdGUgPT0gJ3InIHx8IHNzdGF0ZSA9PSAnaicgfHwg c3N0YXRlID09ICdoJykgPworCQkgICAiS0VSTUlUIFJFQURZIFRPIEdFVC4uLiIgOgorCQkgICAi S0VSTUlUIFJFQURZIFRPIFNFTkQgU0VSVkVSIENPTU1BTkQuLi4iKTsKKwl9CisgICAgfQorI2lm ZGVmIENPTU1FTlQKKyAgICBpZiAoIWxvY2FsKSBzbGVlcCgxKTsKKyNlbmRpZiAvKiBDT01NRU5U ICovCisvKgorICBUaGUgJ3dhcnQoKScgZnVuY3Rpb24gaXMgZ2VuZXJhdGVkIGJ5IHRoZSB3YXJ0 IHByb2dyYW0uICBJdCBnZXRzIGEKKyAgY2hhcmFjdGVyIGZyb20gdGhlIGlucHV0KCkgcm91dGlu ZSBhbmQgdGhlbiBiYXNlZCBvbiB0aGF0IGNoYXJhY3RlciBhbmQKKyAgdGhlIGN1cnJlbnQgc3Rh dGUsIHNlbGVjdHMgdGhlIGFwcHJvcHJpYXRlIGFjdGlvbiwgYWNjb3JkaW5nIHRvIHRoZSBzdGF0 ZQorICB0YWJsZSBhYm92ZSwgd2hpY2ggaXMgdHJhbnNmb3JtZWQgYnkgdGhlIHdhcnQgcHJvZ3Jh bSBpbnRvIGEgYmlnIGNhc2UKKyAgc3RhdGVtZW50LiAgVGhlIGZ1bmN0aW9uIGlzIGFjdGl2ZSBm b3Igb25lIHRyYW5zYWN0aW9uLgorKi8KKyAgICBydGltZXIoKTsJCQkJLyogUmVzZXQgZWxhcHNl ZC10aW1lIHRpbWVyICovCisjaWZkZWYgR0ZUSU1FUgorICAgIHJmdGltZXIoKTsKKyNlbmRpZiAv KiBHRlRJTUVSICovCisgICAgcmVzZXRjKCk7CQkJCS8qICYgb3RoZXIgcGVyLXRyYW5zYWN0aW9u IGNvdW50ZXJzLiAqLworCisgICAgZGVidWcoRjEwMSwicHJvdG8gY2FsbGluZyB3YXJ0LCBqdXN0 b25lIiwiIixqdXN0b25lKTsKKworICAgIHdhcnQoKTsJCQkJLyogRW50ZXIgdGhlIHN0YXRlIHRh YmxlIHN3aXRjaGVyLiAqLworLyoKKyAgTm90ZTogdGhlIGZvbGxvd2luZyBpcyBuZWNlc3Nhcnkg aW4gY2FzZSB3ZSBoYXZlIGp1c3QgZG9uZSBhIHJlbW90ZS1tb2RlCisgIGZpbGUgdHJhbnNmZXIs IGluIHdoaWNoIGNhc2UgdGhlIGNvbnRyb2xsaW5nIHRlcm1pbmFsIG1vZGVzIGhhdmUgYmVlbgor ICBjaGFuZ2VkIGJ5IHR0cGt0KCkuICBJbiBwYXJ0aWN1bGFyLCBzcGVjaWFsIGNoYXJhY3RlcnMg bGlrZSBDdHJsLUMgYW5kCisgIEN0cmwtXCBtaWdodCBoYXZlIGJlZW4gdHVybmVkIG9mZiAoc2Vl IHR0cGt0KS4gIFNvIHRoaXMgY2FsbCB0byB0dHJlcygpIGlzCisgIGVzc2VudGlhbC4gIElNUE9S VEFOVDogcmVzdG9yZSBpbnRlcnJ1cHQgaGFuZGxlcnMgZmlyc3QsIG90aGVyd2lzZSBhbnkKKyAg dGVybWluYWwgaW50ZXJydXB0cyB0aGF0IG9jY3VyIGJlZm9yZSB0aGlzIGlzIGRvbmUgaW4gdGhl IG5vcm1hbCBwbGFjZQorICBsYXRlciB3aWxsIGNhdXNlIGEgY3Jhc2guCisqLworI2lmZGVmIE9T MgorICAgIHR0cmVzKCk7CQkJCS8qIFJlc2V0IHRoZSBjb21tdW5pY2F0aW9uIGRldmljZSAqLwor I2Vsc2UKKyAgICBpZiAoIWxvY2FsKSB7CisJc2V0aW50KCk7CQkJLyogQXJtIGludGVycnVwdCBo YW5kbGVycyBGSVJTVCAqLworCW1zbGVlcCg1MDApOworCXR0cmVzKCk7CQkJLyogVGhlbiByZXN0 b3JlIHRlcm1pbmFsLiAqLworICAgIH0KKyNlbmRpZiAvKiBPUzIgKi8KKyAgICB4eHNjcmVlbihT Q1JfVEMsMCwwTCwiIik7CQkvKiBUcmFuc2FjdGlvbiBjb21wbGV0ZSAqLworICAgIHggPSBxdWll dDsKKyAgICBxdWlldD0xOworICAgIGNsc2lmKCk7CQkJCS8qIEZhaWxzYWZlIGluIGNhc2Ugd2Ug bWlzc2VkICovCisgICAgY2xzb2YoMSk7CQkJCS8qIGEgY2FzZSBpbiB0aGUgc3RhdGUgbWFjaGlu ZS4gKi8KKyAgICBxdWlldCA9IHg7CisKKyAgICBpZiAoc2VydmVyKSB7CQkJLyogQmFjayBmcm9t IHBhY2tldCBwcm90b2NvbC4gKi8KKyAgICAJaWYgKCFxdWlldCAmJiAhYmFja2dyZAorI2lmZGVm IElLU0QKKwkgICAgJiYgIWluc2VydmVyCisjZW5kaWYgLyogSUtTRCAqLworCSAgICApIHsJCQkJ LyogR2l2ZSBhcHByb3ByaWF0ZSBtZXNzYWdlICovCisJICAgIGNvbm9sbCgiIik7CisJICAgIGNv bm9sbCgiQy1LZXJtaXQgc2VydmVyIGRvbmUiKTsKKyAgICAgICAgfQorICAgICAgICBzZXJ2ZXIg PSAwOwkJCS8qIE5vdCBhIHNlcnZlciBhbnkgbW9yZSAqLworICAgIH0KK30KKworLyogIFMgRyBF IFQgSSBOIEkgVCAgLS0gIEhhbmRsZSBpbmNvbWluZyBHRVQtQ2xhc3MgcGFja2V0cyAgKi8KKwor LyoKKyAgUmV0dXJuczoKKyAgIC0xOiBPbiBlcnJvcgorICAgIDA6IEdFVCBwYWNrZXQgcHJvY2Vz c2VkIE9LIC0gcmVhZHkgdG8gU2VuZC4KKyAgICAxOiBFeHRlbmRlZCBHRVQgcHJvY2Vzc2VkIE9L IC0gd2FpdCBmb3IgYW5vdGhlci4KKyovCitzdGF0aWMgaW50CitzZ2V0aW5pdChyZWdldCx4Z2V0 KSBpbnQgcmVnZXQsIHhnZXQ7IHsJLyogU2VydmVyIGVuZCBvZiBHRVQgY29tbWFuZCAqLworICAg IGNoYXIgKiBmcyA9IE5VTEw7CQkJLyogUG9pbnRlciB0byBmaWxlc3BlYyAqLworICAgIGludCBp LCBuLCBkb25lID0gMDsKKyNpZmRlZiBQSVBFU0VORAorICAgIGV4dGVybiBpbnQgdXNlcGlwZXMs IHBpcGVzZW5kOworI2VuZGlmIC8qIFBJUEVTRU5EICovCisgICAgZXh0ZXJuIGludCBub2xpbmtz OworCisgICAgaWYgKCFFTkFCTEVEKGVuX2dldCkpIHsJCS8qIE9ubHkgaWYgbm90IGRpc2FibGVk ISAgKi8KKwllcnJwa3QoKENIQVIgKikiR0VUIGRpc2FibGVkIik7CisJcmV0dXJuKC0xKTsKKyAg ICB9CisKKyAgICAvKiBPSyB0byBwcm9jZWVkICovCisKKyAgICBub2xpbmtzID0gcmVjdXJzaXZl OworICAgIGZpbGNudCA9IDA7CisKKyNpZmRlZiBXSEFUQU1JCisgICAgLyogSWYgdGhleSBhcmUg YWxpa2UgdGhpcyB3YXMgYWxyZWFkeSBkb25lIGluIHdob2FyZXdlKCkgKi8KKyAgICBkZWJ1ZyhG MTAxLCJzZ2V0aW5pdCB3aGF0cnUiLCIiLHdoYXRydSk7CisgICAgaWYgKHdoYXRydSAmIFdNSV9G TEFHKSB7CQkvKiBEaWQgd2UgZ2V0IFdIQVRBTUkgaW5mbz8gKi8KKwlkZWJ1ZyhGMTAxLCJzZ2V0 aW5pdCBiaW5hcnkgKDEpIiwiIixiaW5hcnkpOworI2lmZGVmIFZNUworCWlmIChiaW5hcnkgIT0g WFlGVF9JICYmIGJpbmFyeSAhPSBYWUZUX0wpCisjZWxzZQorI2lmZGVmIE9TMgorCSAgaWYgKGJp bmFyeSAhPSBYWUZUX0wpCisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogVk1TICovCisJICAg IGJpbmFyeSA9ICh3aGF0cnUgJiBXTUlfRk1PREUpID8gLyogWWVzLCBzZXQgZmlsZSB0eXBlICov CisJICAgICAgWFlGVF9CIDogWFlGVF9UOwkvKiBhdXRvbWF0aWNhbGx5ICovCisJZGVidWcoRjEw MSwic2dldGluaXQgYmluYXJ5ICgyKSIsIiIsYmluYXJ5KTsKKwlpZiAoIXdlYXJlYWxpa2UpCisJ ICBmbmNudiA9ICh3aGF0cnUgJiBXTUlfRk5BTUUpID8gMSA6IDA7IC8qIEFuZCBuYW1lIGNvbnZl cnNpb24gKi8KKyAgICB9CisjZW5kaWYgLyogV0hBVEFNSSAqLworCisgICAgZnMgPSAoY2hhciAq KXNydmNtZDsKKyAgICBzcnZwdHIgPSBzcnZjbWQ7CQkJLyogUG9pbnQgdG8gc2VydmVyIGNvbW1h bmQgYnVmZmVyICovCisgICAgZGVjb2RlKHJkYXRhcCxwdXRzcnYsMCk7CQkvKiBEZWNvZGUgdGhl IEdFVCBjb21tYW5kIGludG8gaXQgKi8KKyAgICAvKiBBY2NlcHQgbXVsdGlwbGUgZmlsZXNwZWNz ICovCisgICAgY21hcmcyID0gIiI7CQkJLyogRG9uJ3QgdXNlIGNtYXJnMiAqLworICAgIGNtYXJn ID0gIiI7CQkJCS8qIERvbid0IHVzZSBjbWFyZyAqLworCisgICAgZG9uZSA9IDE7CQkJCS8qIE9u bHkgMSBwYWNrZXQgbmVlZGVkLi4uICovCisgICAgaWYgKHhnZXQpIHsJCQkJLyogU3BlY2lhbCBk ZWNvZGluZyBmb3IgRXh0ZW5kZWQgR0VUICovCisJY2hhciBMLCBuZXh0LCBjOwkJLyogUExWIGl0 ZW1zICovCisJaW50IGxlbiwgdmFsOwkJCS8qIE1vcmUgUExWIGl0ZW1zICovCisJY2hhciAqIHAg PSAoY2hhciAqKXNydmNtZDsJLyogU3RyaW5nIHRvIGRlY29kZSAqLworCisJZG9uZSA9IDA7CQkJ LyogTWF5YmUgbW9yZSBwYWNrZXRzIG5lZWRlZCAqLworCWZzID0gTlVMTDsJCQkvKiBXZSBkb24n dCBrbm93IHRoZSBmaWxlc3BlYyB5ZXQgKi8KKwljID0gKnArKzsJCQkvKiBHZXQgZmlyc3QgcGFy YW1ldGVyICovCisKKwl3aGlsZSAoYykgewkJCS8qIEZvciBhbGwgcGFyYW1ldGVycy4uLiAqLwor CSAgICBkZWJ1ZyhGMDAwLCJzZ2V0aW5pdCBjIiwiIixjKTsKKwkgICAgTCA9ICpwKys7CQkJLyog R2V0IGxlbmd0aCAqLworCSAgICBpZiAoTCA+PSBTUCkJCS8qIERlY29kZSBsZW5ndGggKi8KKwkg ICAgICBsZW4gPSB4dW5jaGFyKEwpOworCSAgICBlbHNlIGlmIChjID09ICdAJykgewkvKiBBbGxv dyBtaXNzaW5nIEVPUCBsZW5ndGggZmllbGQgKi8KKwkJbGVuID0gMDsKKwkgICAgfSBlbHNlIHsK KwkJbGVuID0gKHh1bmNoYXIoKnArKykgKiA5NSk7CisJCWxlbiArPSB4dW5jaGFyKCpwKyspOwor CSAgICB9CisJICAgIGRlYnVnKEYxMDEsInNnZXRpbml0IGxlbiIsIiIsbGVuKTsKKwkgICAgbmV4 dCA9ICoocCtsZW4pOwkJLyogR2V0IG5leHQgcGFyYW1ldGVyICovCisJICAgICoocCtsZW4pID0g TlVMOwkJLyogWmVybyBpdCBvdXQgdG8gdGVybWluYWwgdmFsdWUgKi8KKwkgICAgZGVidWcoRjEx MCwic2dldGluaXQgcCIscCwwKTsKKwkgICAgc3dpdGNoIChjKSB7CQkvKiBEbyB0aGUgcGFyYW1l dGVyICovCisJICAgICAgY2FzZSAnTyc6CQkJLyogR0VUIE9wdGlvbnMgKi8KKwkJdmFsID0gYXRv aShwKTsJCS8qIENvbnZlcnQgdG8gaW50ICovCisJCWRlYnVnKEYxMDEsInNnZXRpbml0IE8gdmFs IiwiIix2YWwpOworCQlpZiAodmFsICYgR09QVF9ERUwpIG1vdmluZyA9IDE7CisJCWlmICh2YWwg JiBHT1BUX1JFUykgcmVnZXQgPSAxOworCQlpZiAodmFsICYgR09QVF9SRUMpIHsKKwkJICAgIHJl Y3Vyc2l2ZSA9IDE7CisJCSAgICBub2xpbmtzID0gMjsKKwkJICAgIGlmIChmbnNwYXRoID09IFBB VEhfT0ZGKQorCQkgICAgICBmbnNwYXRoID0gUEFUSF9SRUw7CisJCX0KKwkJYnJlYWs7CisJICAg ICAgY2FzZSAnTSc6CQkJLyogVHJhbnNmZXIgTW9kZSAqLworCQl2YWwgPSBhdG9pKHApOworCQlk ZWJ1ZyhGMTAxLCJzZ2V0aW5pdCBNIHZhbCIsIiIsdmFsKTsKKwkJaWYgKHZhbCA8IDEpCisJCSAg YnJlYWs7CisJCXBhdHRlcm5zID0gMDsJCS8qIFRha2VzIHByZWNlZGVuY2Ugb3ZlciBwYXR0ZXJu cyAqLworCQlmaWxlcGVlayA9IDA7CQkvKiBhbmQgRklMRSBTQ0FOICovCisJCWlmICh2YWwgPT0g R01PRF9UWFQpIGJpbmFyeSA9IFhZRlRfVDsgLyogVGV4dCAqLworCQlpZiAodmFsID09IEdNT0Rf QklOKSBiaW5hcnkgPSBYWUZUX0I7IC8qIEJpbmFyeSAqLworCQlpZiAodmFsID09IEdNT0RfTEJM KSBiaW5hcnkgPSBYWUZUX0w7IC8qIExhYmVsZWQgKi8KKwkJYnJlYWs7CisJICAgICAgY2FzZSAn Ric6CQkJLyogRmlsZW5hbWUgKi8KKwkJZnMgPSBwOworCQlkZWJ1ZyhGMTEwLCJzZ2V0aW5pdCBm aWxlbmFtZSIsZnMsMCk7CisJCWJyZWFrOworCSAgICAgIGNhc2UgJ0AnOgkJCS8qIEVuZCBPZiBQ YXJhbWV0ZXJzICovCisJCWRvbmUgPSAxOworCQlkZWJ1ZyhGMTAwLCJzZ2V0aW5pdCBFT1AiLCIi LDApOworCQlicmVhazsKKwkgICAgICBkZWZhdWx0OgorCQllcnJwa3QoKENIQVIgKikiVW5rbm93 biBHRVQgUGFyYW1ldGVyIik7CisJCWRlYnVnKEYxMDAsInNnZXRpbml0IHVua25vd24gcGFyYW1l dGVyIiwiIiwwKTsKKwkJcmV0dXJuKC0xKTsKKwkgICAgfQorCSAgICBwICs9IChsZW4gKyAxKTsK KwkgICAgYyA9IG5leHQ7CisJfQorICAgIH0KKyAgICBpZiAoIWZzKSBmcyA9ICIiOwkJCS8qIEEg ZmlsZW5hbWUgaXMgcmVxdWlyZWQgKi8KKyAgICBpZiAoKmZzKSB7CisJaGF2ZWZzID0gMTsKKwlu ID0gMDsJCQkJLyogQ2hlY2sgZm9yIHF1b3RlZCBuYW1lICovCisJaWYgKChuID0gc3RybGVuKGZz KSkgPiAxKSB7CisJICAgIC8qIE5vdGU6IHRoaXMgZG9lcyBub3QgYWxsb3cgZm9yIG11bHRpcGxl IHF1b3RlZCBuYW1lcyAqLworCSAgICBpZiAoKGZzWzBdID09ICd7JyAmJiBmc1tuLTFdID09ICd9 JykgfHwKKwkJKGZzWzBdID09ICciJyAmJiBmc1tuLTFdID09ICciJykpIHsKKwkJZnNbbi0xXSA9 ICdcMCc7CisJCWZzKys7CisJCWRlYnVnKEYxMTEsInNnZXRpbml0IHVucXVvdGVkIGZpbGVuYW1l IixmcyxuKTsKKwkgICAgfSBlbHNlCisJICAgICAgbiA9IDA7CQkJLyogVGhpcyBtZWFucyBubyBx dW90aW5nICovCisJfQorCisjaWZkZWYgUElQRVNFTkQKKwlkZWJ1ZyhGMTExLCJzZ2V0aW5pdCIs ZnMsdXNlcGlwZXMpOworCWlmICh1c2VwaXBlcyAmJiBFTkFCTEVEKGVuX2hvcykgJiYgKmZzID09 ICchJykgeworCSAgICBjbWFyZyA9IGZzICsgMTsJCS8qIFBvaW50IHBhc3QgdGhlIGJhbmcgKi8K KwkgICAgKmZzID0gTlVMOworCSAgICBuZmlscyA9IC0xOworCSAgICBwaXBlc2VuZCA9IDE7CisJ ICAgIGRlYnVnKEYxMTEsInNnZXRpbml0IHBpcGVzZW5kIixjbWFyZyxwaXBlc2VuZCk7CisJfQor CWlmICghcGlwZXNlbmQpIHsJCS8qIElmIGl0J3Mgbm90IGEgcGlwZSAqLworI2VuZGlmIC8qIFBJ UEVTRU5EICovCisJICAgIGlmIChuID09IDApIHsJCS8qIElmIHRoZSBuYW1lIHdhcyBub3QgcXVv dGVkICovCisjaWZuZGVmIE5PTVNFTkQKKwkJbmZpbHMgPSBmbnBhcnNlKGZzKTsJLyogQWxsb3cg aXQgdG8gYmUgYSBsaXN0IG9mIG5hbWVzICovCisJCWRlYnVnKEYxMTEsInNnZXRpbml0IEEiLGZz LG5maWxzKTsKKyNpZmRlZiBDT01NRU5UCisvKiBUaGlzIGRvZXNuJ3Qgd29yayBpZiBhIEdFVC1Q QVRIIGlzIHNldC4gKi8KKwkJaWYgKG5maWxzID09IDEgJiYgIWlzd2lsZChmcykpIHsgLyogU2lu Z2xlIGZpbGUgKi8KKwkJICAgIGNoYXIgKiBtOworCQkgICAgaWYgKCh4ID0gemNoa2koZnMpKSA8 IDApIHsgLyogQ2hlY2sgaWYgaXQncyBzZW5kYWJsZSAqLworCQkJc3dpdGNoICh4KSB7CisJCQkg IGNhc2UgLTE6IG0gPSAiRmlsZSBub3QgZm91bmQiOyBicmVhazsKKwkJCSAgY2FzZSAtMjogbSA9 ICJOb3QgYSByZWd1bGFyIGZpbGUiOyBicmVhazsKKwkJCSAgY2FzZSAtMzogbSA9ICJSZWFkIGFj Y2VzcyBkZW5pZWQiOyBicmVhazsKKwkJCX0KKwkJCWVycnBrdCgoQ0hBUiAqKW0pOworCQkJcmV0 dXJuKC0xKTsKKwkJICAgIH0KKwkJfQorI2VuZGlmIC8qIENPTU1FTlQgKi8KKwkgICAgfSBlbHNl IHsJCQkvKiBJZiBpdCB3YXMgcXVvdGVkICovCisjZW5kaWYgLyogTk9NU0VORCAqLworCQluenhv cHRzID0gMDsKKyNpZmRlZiBVTklYT1JPU0sKKwkJaWYgKG1hdGNoZG90KSAgbnp4b3B0cyB8PSBa WF9NQVRDSERPVDsKKyNlbmRpZiAvKiBVTklYT1JPU0sgKi8KKwkJaWYgKHJlY3Vyc2l2ZSkgbnp4 b3B0cyB8PSBaWF9SRUNVUlNFOworCQkvKiBUcmVhdCBhcyBhIHNpbmdsZSBmaWxlc3BlYyAqLwor CQluZmlscyA9IDAgLSBuenhwYW5kKGZzLG56eG9wdHMpOworCQlkZWJ1ZyhGMTExLCJzZ2V0aW5p dCBCIixmcyxuZmlscyk7CisJCWNtYXJnID0gZnM7CisJICAgIH0KKyNpZmRlZiBQSVBFU0VORAor CX0KKyNlbmRpZiAvKiBQSVBFU0VORCAqLworICAgIH0KKyAgICBpZiAoIWRvbmUpIHsJCQkvKiBO ZWVkIG1vcmUgTyBwYWNrZXRzLi4uICovCisJZGVidWcoRjEwMCwic2dldGluaXQgTy1QYWNrZXQg VEJDIiwiIiwwKTsgLyogVG8gQmUgQ29udGludWVkICovCisJcmV0dXJuKDEpOworICAgIH0KKyAg ICBkZWJ1ZyhGMTAwLCJzZ2V0aW5pdCBPLVBhY2tldCBkb25lIC0gaGF2ZWZzIiwiIixoYXZlZnMp OworICAgIGlmICghaGF2ZWZzKSB7CQkJLyogRG9uZSAtIG1ha2Ugc3VyZSB3ZSBoYXZlIGZpbGVu YW1lICovCisJZXJycGt0KChDSEFSICopIkdFVCB3aXRob3V0IGZpbGVuYW1lIik7CisJcmV0dXJu KC0xKTsKKyAgICB9CisgICAgZnJlZXJwa3Qod2lubG8pOworICAgIHdpbmxvID0gMDsJCQkJLyog QmFjayB0byBwYWNrZXQgMCBhZ2Fpbi4gKi8KKyAgICBkZWJ1ZyhGMTAxLCJzZ2V0aW5pdCB3aW5s byIsIiIsd2lubG8pOworICAgIG5ha3N0YXRlID0gMDsJCQkvKiBOb3cgSSdtIHRoZSBzZW5kZXIh ICovCisgICAgaWYgKHJlZ2V0KSBzZW5kbW9kZSA9IFNNX1JFU0VORDsKKyAgICBpZiAoc2luaXQo KSA+IDApIHsJCQkvKiBTZW5kIFNlbmQtSW5pdCAqLworI2lmZGVmIFNUUkVBTUlORworCWlmICgh c3RyZWFtaW5nKQorI2VuZGlmIC8qIFNUUkVBTUlORyAqLworCSAgdGltaW50ID0gY2hrdGltbyhy dGltbyx0aW1lZik7IC8qIFN3aXRjaCB0byBwZXItcGFja2V0IHRpbWVyICovCisJcmV0dXJuKDAp OwkJCS8qIElmIHN1Y2Nlc3NmdWwsIHN3aXRjaCBzdGF0ZSAqLworICAgIH0gZWxzZSByZXR1cm4o LTEpOwkJCS8qIEVsc2UgYmFjayB0byBzZXJ2ZXIgY29tbWFuZCB3YWl0ICovCit9CisKKyNlbHNl ICAvKiBOT1hGRVIgKi8KKworI2luY2x1ZGUgImNrY2RlYi5oIgorCitWT0lECitwcm90bygpIHsK KyAgICBleHRlcm4gaW50IHN1Y2Nlc3M7CisgICAgc3VjY2VzcyA9IDA7Cit9CisjZW5kaWYgLyog Tk9YRkVSICovCgpkaWZmIC0tZ2l0IGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4w LjMwMi9ja2Nwcm8udyBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2tj cHJvLncKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTZiNWY0OAotLS0gL2Rl di9udWxsCisrKyBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2tjcHJv LncKQEAgLTAsMCArMSwzNjMzIEBACitjaGFyICpwcm90diA9ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtKi1DLSotICovCisiQy1LZXJtaXQg UHJvdG9jb2wgTW9kdWxlIDkuMC4xNjAsIDE2IE9jdCAyMDA5IjsKKworaW50IGthY3RpdmUgPSAw OwkJCS8qIEtlcm1pdCBwcm90b2NvbCBpcyBhY3RpdmUgKi8KKworI2RlZmluZSBQS1RaRVJPSEFD SworCisvKiBDIEsgQyBQIFIgTyAgLS0gQy1LZXJtaXQgUHJvdG9jb2wgTW9kdWxlLCBpbiBXYXJ0 IHByZXByb2Nlc3NvciBub3RhdGlvbi4gKi8KKy8qCisgIEF1dGhvcjogRnJhbmsgZGEgQ3J1eiA8 ZmRjQGNvbHVtYmlhLmVkdT4sCisgIENvbHVtYmlhIFVuaXZlcnNpdHkgQWNhZGVtaWMgSW5mb3Jt YXRpb24gU3lzdGVtcywgTmV3IFlvcmsgQ2l0eS4KKworICBDb3B5cmlnaHQgKEMpIDE5ODUsIDIw MDksCisgICAgVHJ1c3RlZXMgb2YgQ29sdW1iaWEgVW5pdmVyc2l0eSBpbiB0aGUgQ2l0eSBvZiBO ZXcgWW9yay4KKyAgICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgU2VlIHRoZSBDLUtlcm1pdCBDT1BZ SU5HLlRYVCBmaWxlIG9yIHRoZQorICAgIGNvcHlyaWdodCB0ZXh0IGluIHRoZSBja2NtYWkuYyBt b2R1bGUgZm9yIGRpc2NsYWltZXIgYW5kIHBlcm1pc3Npb25zLgorKi8KKyNpZm5kZWYgTk9YRkVS CisjaW5jbHVkZSAiY2tjc3ltLmgiCisjaW5jbHVkZSAiY2tjZGViLmgiCisjaW5jbHVkZSAiY2tj YXNjLmgiCisjaW5jbHVkZSAiY2tja2VyLmgiCisjaWZkZWYgT1MyCisjaWZuZGVmIE5UCisjZGVm aW5lIElOQ0xfTk9QTQorI2RlZmluZSBJTkNMX1ZJTwkJCS8qIE5lZWRlZCBmb3IgY2tvY29uLmgg Ki8KKyNpbmNsdWRlIDxvczIuaD4KKyN1bmRlZiBDT01NRU5UCisjZW5kaWYgLyogTlQgKi8KKyNp bmNsdWRlICJja29jb24uaCIKKyNlbmRpZiAvKiBPUzIgKi8KKworLyoKKyBOb3RlIC0tIFRoaXMg ZmlsZSBtYXkgYWxzbyBiZSBwcmVwcm9jZXNzZWQgYnkgdGhlIFVOSVggTGV4IHByb2dyYW0sIGJ1 dAorIHlvdSBtdXN0IGluZGVudCB0aGUgYWJvdmUgI2luY2x1ZGUgc3RhdGVtZW50cyBiZWZvcmUg dXNpbmcgTGV4LCBhbmQgdGhlbgorIHJlc3RvcmUgdGhlbSB0byB0aGUgbGVmdCBtYXJnaW4gaW4g dGhlIHJlc3VsdGluZyBDIHByb2dyYW0gYmVmb3JlIGNvbXBpbGF0aW9uLgorIEFsc28sIHRoZSBp bnZvY2F0aW9uIG9mIHRoZSAid2FydCgpIiBmdW5jdGlvbiBiZWxvdyBtdXN0IGJlIHJlcGxhY2Vk IGJ5IGFuCisgaW52b2NhdGlvbiAgb2YgdGhlICJ5eWxleCgpIiBmdW5jdGlvbi4gIEl0IG1pZ2h0 IGFsc28gYmUgbmVjZXNzYXJ5IHRvIHJlbW92ZQorIGNvbW1lbnRzIGluIHRoZSAoJSkoJSkuLi4o JSkoJSkgc2VjdGlvbi4KKyovCisKKy8qIFN0YXRlIGRlZmluaXRpb25zIGZvciBXYXJ0IChvciBM ZXgpICovCislc3RhdGVzIGlwa3QgcmZpbGUgcmF0dHIgcmRwa3Qgc3Npbml0IHNzZmlsZSBzc2F0 dHIgc3NkYXRhIHNzZW9mIHNzZW90Cislc3RhdGVzIHNlcnZlIGdlbmVyaWMgZ2V0IHJnZW4gc3Nv cGt0IHJvcGt0CisKK19QUk9UT1RZUChzdGF0aWMgVk9JRCB4eHByb3RvLCh2b2lkKSk7CitfUFJP VE9UWVAoc3RhdGljIFZPSUQgd2hlcmVtc2csKHZvaWQpKTsKK19QUk9UT1RZUChpbnQgd2FydCwo dm9pZCkpOworX1BST1RPVFlQKHN0YXRpYyBpbnQgc2dldGluaXQsKGludCxpbnQpKTsKK19QUk9U T1RZUChpbnQgc25kc3BhY2UsKGludCkpOworCisvKiBFeHRlcm5hbCBDLUtlcm1pdCB2YXJpYWJs ZSBkZWNsYXJhdGlvbnMgKi8KKyAgZXh0ZXJuIGNoYXIgKnZlcnNpbywgKnNydnR4dCwgKmNtYXJn LCAqY21hcmcyLCAqKmNtbGlzdCwgKnJmX2VycjsKKyAgZXh0ZXJuIGNoYXIgKiByZnNwZWMsICog c2ZzcGVjLCAqIHNyZnNwZWMsICogcnJmc3BlYzsKKyAgZXh0ZXJuIGNoYXIgKiBwcmZzcGVjLCAq IHBzZnNwZWMsICogcHNyZnNwZWMsICogcHJyZnNwZWM7CisgIGV4dGVybiBjaGFyICpjZG1zZ2Zp bGVbXTsKKyAgZXh0ZXJuIGNoYXIgKiBzbmRfbW92ZSwgKiBzbmRfcmVuYW1lLCAqIHNyaW1zZzsK KyAgZXh0ZXJuIGNoYXIgZmlsbmFtW10sIG9maWxuYW1bXSwgZnNwZWNbXSwgdHRuYW1lW10sIG9m bjFbXTsKKyAgZXh0ZXJuIENIQVIgc3N0YXRlLCAqc3J2cHRyLCAqZGF0YTsKKyAgZXh0ZXJuIGlu dCB0aW1pbnQsIHJ0aW1vLCBuZmlscywgaGNmbGcsIHhmbGcsIGZsb3csIG1kbXR5cCwgbmV0d29y azsKKyAgZXh0ZXJuIGludCBvb3B0cywgb21vZGUsIG9uYW1lLCBvcGF0aCwgbm9wdXNoLCBpc2d1 ZXN0LCB4Y21kc3JjLCByY2RhY3RpdmU7CisgIGV4dGVybiBpbnQgcmVqZWN0aW9uLCBtb3Zpbmcs IGZuY2FjdCwgYnllX2FjdGl2ZSwgdXJzZXJ2ZXIsIGZhdGFsaW87CisgIGV4dGVybiBpbnQgcHJv dG9jb2wsIHByZWZpeGluZywgZmlsY250LCBjYXJyaWVyLCBmbnNwYXRoLCBpbnRlcnJ1cHRlZDsK KyAgZXh0ZXJuIGludCByZWN1cnNpdmUsIGluc2VydmVyLCBuenhvcHRzLCBpZGxldG1vLCBzcnZp ZGwsIHhmcmludDsKKyAgZXh0ZXJuIHN0cnVjdCBja19wIHB0YWJbXTsKKyAgZXh0ZXJuIGludCBy ZW1maWxlLCByZW1waXBlLCB4ZmVyc3RhdCwgZmlsZXN0YXR1cywgd2VhcmVhbGlrZSwgZmFja3Bh dGg7CisgIGV4dGVybiBpbnQgcGF0dGVybnMsIGZpbGVwZWVrLCBnbmZlcnJvcjsKKyAgZXh0ZXJu IGNoYXIgKiByZW1kZXN0OworCisjaWZkZWYgUEtUWkVST0hBQ0sKKyNkZWZpbmUgUEtUWkVST0xF TiAzMgorc3RhdGljIGNoYXIgaXBrdGFja1tQS1RaRVJPTEVOXTsKK3N0YXRpYyBpbnQgaXBrdGxl biA9IDA7CisjZW5kaWYgLyogUEtUWkVST0hBQ0sgKi8KKworc3RhdGljIGludCBzX3RpbWludCA9 IC0xOwkJLyogRm9yIHNhdmluZyB0aW1lb3V0IHZhbHVlICovCitzdGF0aWMgaW50IG15am9iID0g MDsKK3N0YXRpYyBpbnQgaGF2ZWZzID0gMDsKKyNpZmRlZiBDS19MT0dJTgorc3RhdGljIGludCBs b2d0cmllcyA9IDA7CisjZW5kaWYgLyogQ0tfTE9HSU4gKi8KKworc3RhdGljIGludCBjYW5jZWwg PSAwOworaW50IGZhY2tidWcgPSAwOworCisjaWZkZWYgU1RSRUFNSU5HCitleHRlcm4gaW50IHN0 cmVhbWluZywgc3RyZWFtb2s7CisKK3N0YXRpYyBWT0lECitzdHJlYW1vbigpIHsKKyAgICBpZiAo c3RyZWFtb2spIHsKKwlkZWJ1ZyhGMTAwLCJzdHJlYW1vbiIsIiIsMCk7CisJc3RyZWFtaW5nID0g MTsKKwl0aW1pbnQgPSAwOwkJCS8qIE5vIHRpbWVvdXRzIHdoaWxlIHN0cmVhbWluZy4gKi8KKyAg ICB9Cit9CisKKyNpZmRlZiBDT01NRU5UCQkJCS8qIChub3QgdXNlZCkgKi8KK3N0YXRpYyBWT0lE CitzdHJlYW1vZmYoKSB7CisgICAgaWYgKHN0cmVhbWluZykgeworCWRlYnVnKEYxMDAsInN0cmVh bW9mZiIsIiIsMCk7CisJc3RyZWFtaW5nID0gMDsKKwl0aW1pbnQgPSBzX3RpbWludDsJCS8qIFJl c3RvcmUgdGltZW91dCAqLworICAgIH0KK30KKyNlbmRpZiAvKiBDT01NRU5UICovCisjZWxzZSAv KiBTVFJFQU1JTkcgKi8KKyNkZWZpbmUgc3RyZWFtb24oKQorI2RlZmluZSBzdHJlYW1vZmYoKQor I2VuZGlmIC8qIFNUUkVBTUlORyAqLworCisjaWZuZGVmIE5PU1BMCitfUFJPVE9UWVAoIGludCBh ZGRtYWMsIChjaGFyICosIGNoYXIgKikgKTsKK19QUk9UT1RZUCggaW50IHp6c3RyaW5nLCAoY2hh ciAqLCBjaGFyICoqLCBpbnQgKikgKTsKKyNlbmRpZiAvKiBOT1NQTCAqLworI2lmbmRlZiBOT0lD UAorX1BST1RPVFlQKCBpbnQgY21kc3JjLCAodm9pZCkgKTsKKyNlbmRpZiAvKiBOT0lDUCAqLwor CisjaWZuZGVmIE5PU0VSVkVSCisgIGV4dGVybiBjaGFyICogeF91c2VyLCAqIHhfcGFzc3dkLCAq IHhfYWNjdDsKKyAgZXh0ZXJuIGludCB4X2xvZ2luLCB4X2xvZ2dlZDsKKyNlbmRpZiAvKiBOT1NF UlZFUiAqLworCisjaW5jbHVkZSAiY2tjbmV0LmgiCisKKyNpZmRlZiBUTkNPREUKKyAgZXh0ZXJu IGludCB0dG5wcm90bzsJCQkvKiBOZXR3b3JrIHByb3RvY29sICovCisjZW5kaWYgLyogVE5DT0RF ICovCisKKyNpZmRlZiBDS19TUEVFRAorICBleHRlcm4gc2hvcnQgY3RscFtdOwkJCS8qIENvbnRy b2wtY2hhcmFjdGVyIHByZWZpeCB0YWJsZSAqLworI2VuZGlmIC8qIENLX1NQRUVEICovCisKKyNp ZmRlZiBUTkNPREUKKyAgZXh0ZXJuIGludCB0bl9iX25sbSwgdG5fYl94ZmVyLCB0bl9ubG07Cisj aWZkZWYgQ0tfRU5DUllQVElPTgorICBleHRlcm4gaW50IHRuX25vX2VuY3J5cHRfeGZlcjsKKyNl bmRpZiAvKiBDS19FTkNSWVBUSU9OICovCisjZW5kaWYgLyogVE5DT0RFICovCisKKyNpZmRlZiBU Q1BTT0NLRVQKKyNpZm5kZWYgTk9MSVNURU4KKyAgZXh0ZXJuIGludCB0Y3BzcmZkOworI2VuZGlm IC8qIE5PTElTVEVOICovCisjZW5kaWYgLyogVENQU09DS0VUICovCisKKyAgZXh0ZXJuIGludCBj eHNlZW4sIGN6c2Vlbiwgc2VydmVyLCBzcnZkaXMsIGxvY2FsLCBkaXNwbGEsIGJjdHUsIGJjdHIs IGJjdGw7CisgIGV4dGVybiBpbnQgYmN0ZjsKKyAgZXh0ZXJuIGludCBxdWlldCwgdHNlY3MsIHBh cml0eSwgYmFja2dyZCwgbmFrc3RhdGUsIGF0Y2FwdSwgd3Nsb3RuLCB3aW5sbzsKKyAgZXh0ZXJu IGludCB3c2xvdHMsIHN1Y2Nlc3MsIHhpdHN0YSwgcnByaW50ZiwgZGlzY2FyZCwgY2R0aW1vLCBr ZWVwLCBmZGlzcGxhOworICBleHRlcm4gaW50IHRpbWVmLCBzdGRpbmYsIHJzY2FwdSwgc2VuZG1v ZGUsIGVwa3RmbGcsIGVwa3RyY3ZkLCBlcGt0c2VudDsKKyAgZXh0ZXJuIGludCBiaW5hcnksIGZu Y252OworICBleHRlcm4gbG9uZyBzcGVlZCwgZmZjLCBjcmMxNiwgY2FsaWJyYXRlLCBkZXN0Owor I2lmZGVmIENPTU1FTlQKKyAgZXh0ZXJuIGNoYXIgKlRZUENNRCwgKkRJUkNNRCwgKkRJUkNNMjsK KyNlbmRpZiAvKiBDT01NRU5UICovCisjaWZuZGVmIE9TMgorICBleHRlcm4gY2hhciAqU1BBQ01E LCAqU1BBQ00yLCAqV0hPQ01EOworI2VuZGlmIC8qIE9TMiAqLworICBleHRlcm4gQ0hBUiAqcmRh dGFwOworICBleHRlcm4gc3RydWN0IHphdHRyIGlhdHRyOworCisjaWZkZWYgVk1TCisgIGV4dGVy biBpbnQgYmF0Y2g7CisjZW5kaWYgLyogVk1TICovCisKKyNpZmRlZiBHRlRJTUVSCisgIGV4dGVy biBDS0ZMT0FUIGZwdHNlY3M7CisjZW5kaWYgLyogR0ZUSU1FUiAqLworCisgIGV4dGVybiBDSEFS ICpzcnZjbWQ7CisgIGV4dGVybiBDSEFSICplcGt0bXNnOworCisjaWZkZWYgQ0tfVE1QRElSCitl eHRlcm4gaW50IGZfdG1wZGlyOwkJCS8qIERpcmVjdG9yeSBjaGFuZ2VkIHRlbXBvcmFyaWx5ICov CitleHRlcm4gY2hhciBzYXZkaXJbXTsJCQkvKiBGb3Igc2F2aW5nIGN1cnJlbnQgZGlyZWN0b3J5 ICovCitleHRlcm4gY2hhciAqIGRsZGlyOworI2VuZGlmIC8qIENLX1RNUERJUiAqLworCisgIGV4 dGVybiBpbnQgcXVlcnk7CQkJLyogUXVlcnktYWN0aXZlIGZsYWcgKi8KKyNpZm5kZWYgTk9TUEwK KyAgZXh0ZXJuIGludCBjbWRsdmw7CisgIGNoYXIgcXVlcnlidWZbUUJVRkwrMV0gPSB7IE5VTCwg TlVMIH07IC8qIFFVRVJZIHJlc3BvbnNlIGJ1ZmZlciAqLworICBjaGFyICpxYnVmcCA9IHF1ZXJ5 YnVmOwkJLyogUG9pbnRlciB0byBpdCAqLworICBpbnQgcWJ1Zm4gPSAwOwkJCS8qIExlbmd0aCBv ZiBkYXRhIGluIGl0ICovCisjZWxzZQorICBleHRlcm4gaW50IHRsZXZlbDsKKyNlbmRpZiAvKiBO T1NQTCAqLworCisjaWZuZGVmIE5PSUNQCisgIGV4dGVybiBpbnQgZXNjYXBlOworI2VuZGlmIC8q IE5PSUNQICovCisvKgorICBJZiB0aGUgZm9sbG93aW5nIGZsYWcgaXMgbm9uemVybyB3aGVuIHRo ZSBwcm90b2NvbCBtb2R1bGUgaXMgZW50ZXJlZCwKKyAgdGhlbiBzZXJ2ZXIgbW9kZSBwZXJzaXN0 cyBmb3IgZXhhY3RseSBvbmUgdHJhbnNhY3Rpb24sIHJhdGhlciB0aGFuCisgIGxvb3BpbmcgdW50 aWwgQllFIG9yIEZJTklTSCBpcyByZWNlaXZlZC4KKyovCitleHRlcm4gaW50IGp1c3RvbmU7CisK K3N0YXRpYyBpbnQgcl9zYXZlID0gLTE7CitzdGF0aWMgaW50IHBfc2F2ZSA9IC0xOworCisvKiBG dW5jdGlvbiB0byBsZXQgcmVtb3RlLW1vZGUgdXNlciBrbm93IHdoZXJlIHRoZWlyIGZpbGUocykg d2VudCAqLworCitpbnQgd2hlcmVmbGcgPSAxOwkJCS8qIFVuc2V0IHdpdGggU0VUIFhGRVIgUkVQ T1JUICovCisKK3N0YXRpYyBWT0lECit3aGVyZW1zZygpIHsKKyAgICBleHRlcm4gaW50IHF1aWV0 LCBmaWxyZWo7CisgICAgaW50IG47CisgICAgbiA9IGZpbGNudCAtIGZpbHJlajsKKyAgICBkZWJ1 ZyhGMTAxLCJ3aGVyZW1zZyBuIiwiIixuKTsKKworICAgIGRlYnVnKEYxMTAsIndoZXJlbXNnIHBy ZnNwZWMiLHByZnNwZWMsMCk7CisgICAgZGVidWcoRjExMCwid2hlcmVtc2cgcmZzcGVjIixyZnNw ZWMsMCk7CisgICAgZGVidWcoRjExMCwid2hlcmVtc2cgcHNmc3BlYyIscHNmc3BlYywwKTsKKyAg ICBkZWJ1ZyhGMTEwLCJ3aGVyZW1zZyBzZnNwZWMiLHNmc3BlYywwKTsKKworICAgIGRlYnVnKEYx MTAsIndoZXJlbXNnIHBycmZzcGVjIixwcnJmc3BlYywwKTsKKyAgICBkZWJ1ZyhGMTEwLCJ3aGVy ZW1zZyBycmZzcGVjIixycmZzcGVjLDApOworICAgIGRlYnVnKEYxMTAsIndoZXJlbXNnIHBzcmZz cGVjIixwc3Jmc3BlYywwKTsKKyAgICBkZWJ1ZyhGMTEwLCJ3aGVyZW1zZyBzcmZzcGVjIixzcmZz cGVjLDApOworCisgICAgaWYgKCFxdWlldCAmJiAhbG9jYWwpIHsKKwlpZiAobiA9PSAxKSB7CisJ ICAgIHN3aXRjaCAobXlqb2IpIHsKKwkgICAgICBjYXNlICdzJzoKKwkJaWYgKHNmc3BlYykgewor CQkgICAgcHJpbnRmKCIgU0VOVDogWyVzXSIsc2ZzcGVjKTsKKwkJICAgIGlmIChzcmZzcGVjKQor CQkgICAgICBwcmludGYoIiBUbzogWyVzXSIsc3Jmc3BlYyk7CisJCSAgICBwcmludGYoIiAoJXMp XHJcbiIsIHN1Y2Nlc3MgPyAiT0siIDogIkZBSUxFRCIpOworCQl9CisJCWJyZWFrOworCSAgICAg IGNhc2UgJ3InOgorCSAgICAgIGNhc2UgJ3YnOgorCQlpZiAocnJmc3BlYykgeworCQkgICAgcHJp bnRmKCIgUkNWRDogWyVzXSIscnJmc3BlYyk7CisJCSAgICBpZiAocmZzcGVjKQorCQkgICAgICBw cmludGYoIiBUbzogWyVzXSIscmZzcGVjKTsKKwkJICAgIHByaW50ZigiICglcylcclxuIiwgc3Vj Y2VzcyA/ICJPSyIgOiAiRkFJTEVEIik7CisJCX0KKwkgICAgfQorCX0gZWxzZSBpZiAobiA+IDEp IHsKKwkgICAgc3dpdGNoIChteWpvYikgeworCSAgICAgIGNhc2UgJ3MnOgorCQlpZiAoc2ZzcGVj KSB7CisJCSAgICBwcmludGYoIiBTRU5UOiAoJWQgZmlsZXMpIixuKTsKKwkJICAgIGlmIChzcmZz cGVjKQorCQkgICAgICBwcmludGYoIiBMYXN0OiBbJXNdIixzcmZzcGVjKTsKKwkJICAgIHByaW50 ZigiICglcylcclxuIiwgc3VjY2VzcyA/ICJPSyIgOiAiRkFJTEVEIik7CisJCX0KKwkJYnJlYWs7 CisJICAgICAgY2FzZSAncic6CisJICAgICAgY2FzZSAndic6CisJCWlmIChycmZzcGVjKSB7CisJ CSAgICBwcmludGYoIiBSQ1ZEOiAoJWQgZmlsZXMpIixuKTsKKwkJICAgIGlmIChyZnNwZWMpCisJ CSAgICAgIHByaW50ZigiIExhc3Q6IFslc10iLHJmc3BlYyk7CisJCSAgICBwcmludGYoIiAoJXMp XHJcbiIsIHN1Y2Nlc3MgPyAiT0siIDogIkZBSUxFRCIpOworCQl9CisJICAgIH0KKwl9IGVsc2Ug aWYgKG4gPT0gMCkgeworCSAgICBpZiAobXlqb2IgPT0gJ3MnKQorCSAgICAgIHByaW50ZigiIFNF TlQ6ICgwIGZpbGVzKSAgICAgICAgICBcclxuIik7CisJICAgIGVsc2UgaWYgKG15am9iID09ICdy JyB8fCBteWpvYiA9PSAndicpCisJICAgICAgcHJpbnRmKCIgUkNWRDogKDAgZmlsZXMpICAgICAg ICAgIFxyXG4iKTsKKwl9CisgICAgfQorfQorCitzdGF0aWMgVk9JRAorcmRlYnVnKCkgeworICAg IGlmIChzZXJ2ZXIpCisgICAgICBkZWJ1ZyhGMTExLCJSRVNVTUUiLCJzZXJ2ZXI9MSIsanVzdG9u ZSk7CisgICAgZWxzZQorICAgICAgZGVidWcoRjExMSwiUkVTVU1FIiwic2VydmVyPTAiLGp1c3Rv bmUpOworfQorCisvKiBGbGFncyBmb3IgdGhlIEVOQUJMRSBhbmQgRElTQUJMRSBjb21tYW5kcyAq LworZXh0ZXJuIGludAorICBlbl9jcHksIGVuX2N3ZCwgZW5fZGVsLCBlbl9kaXIsIGVuX2Zpbiwg ZW5fZ2V0LCBlbl9ieWUsIGVuX21haSwgZW5fcHJpLAorICBlbl9ob3MsIGVuX3JlbiwgZW5fc2Vu LCBlbl9zcGEsIGVuX3NldCwgZW5fdHlwLCBlbl93aG8sIGVuX3JldCwgZW5feGl0LAorICBlbl9t a2QsIGVuX3JtZDsKKyNpZm5kZWYgTk9TUEwKK2V4dGVybiBpbnQgZW5fYXNnLCBlbl9xdWU7Cisj ZW5kaWYgLyogTk9TUEwgKi8KK2V4dGVybiBpbnQgd2hhdCwgbGFzdHhmZXI7CisKKy8qIEdsb2Jh bCB2YXJpYWJsZXMgZGVjbGFyZWQgaGVyZSAqLworCisgIGludCB3aGF0cnUgPSAwOwkJCS8qIFdo YXQgYXJlIHlvdS4gKi8KKyAgaW50IHdoYXRydTIgPSAwOwkJCS8qIFdoYXQgYXJlIHlvdSwgY29u dCdkLiAqLworCisvKiBMb2NhbCB2YXJpYWJsZXMgKi8KKworICBzdGF0aWMgY2hhciB2c3RhdGUg PSAwOyAgCQkvKiBTYXZlZCBTdGF0ZSAgICovCisgIHN0YXRpYyBjaGFyIHZjbWQgPSAwOyAgICAJ CS8qIFNhdmVkIENvbW1hbmQgKi8KKyAgc3RhdGljIGludCByZWdldCA9IDA7CQkJLyogRmxhZyBm b3IgZXhlY3V0aW5nIFJFR0VUICovCisgIHN0YXRpYyBpbnQgcmV0cmlldmUgPSAwOwkJLyogRmxh ZyBmb3IgZXhlY3V0aW5nIFJFVFJJRVZFICovCisgIHN0YXRpYyBpbnQgb3BrdCA9IDA7CQkJLyog U2VuZCBFeHRlbmRlZCBHRVQgcGFja2V0ICovCisKKyAgc3RhdGljIGludCB4OwkJCQkvKiBHZW5l cmFsLXB1cnBvc2UgaW50ZWdlciAqLworICBzdGF0aWMgY2hhciAqczsJCQkvKiBHZW5lcmFsLXB1 cnBvc2Ugc3RyaW5nIHBvaW50ZXIgKi8KKworLyogTWFjcm9zIC0gTm90ZSwgQkVHSU4gaXMgcHJl ZGVmaW5lZCBieSBXYXJ0IChhbmQgTGV4KSBhcyAic3RhdGUgPSAiLCAqLworLyogQkVHSU4gaXMg Tk9UIGEgR09UTyEgKi8KKyNkZWZpbmUgVElOSVQgaWYgKHRpbml0KDEpIDwgMCkgcmV0dXJuKC05 KQorI2RlZmluZSBTRVJWRSB7IFRJTklUOyByZXNldGMoKTsgbmFrc3RhdGU9MTsgd2hhdD1XX05P VEhJTkc7IGNtYXJnMj0iIjsgXAorc2VuZG1vZGU9U01fU0VORDsgaGF2ZWZzPTA7IHJlY3Vyc2l2 ZT1yX3NhdmU7IGZuc3BhdGg9cF9zYXZlOyBCRUdJTiBzZXJ2ZTsgfQorI2RlZmluZSBSRVNVTUUg eyByZGVidWcoKTsgaWYgKCFzZXJ2ZXIpIHsgd2hlcmVtc2coKTsgcmV0dXJuKDApOyB9IGVsc2Ug XAoraWYgKGp1c3RvbmUpIHsganVzdG9uZT0wOyB3aGVyZW1zZygpOyByZXR1cm4oMCk7IH0gZWxz ZSB7IFNFUlZFOyB9IH0KKworI2lmZGVmIEdGVElNRVIKKyNkZWZpbmUgUVVJVCB4PXF1aWV0OyBx dWlldD0xOyBjbHNpZigpOyBjbHNvZigxKTsgdHNlY3M9Z3RpbWVyKCk7IFwKKyBmcHRzZWNzPWdm dGltZXIoKTsgcXVpZXQ9eDsgcmV0dXJuKHN1Y2Nlc3MpCisjZWxzZQorI2RlZmluZSBRVUlUIHg9 cXVpZXQ7IHF1aWV0PTE7IGNsc2lmKCk7IGNsc29mKDEpOyB0c2Vjcz1ndGltZXIoKTsgcXVpZXQ9 eDsgXAorIHJldHVybihzdWNjZXNzKQorI2VuZGlmIC8qIEdGVElNRVIgKi8KKworLyoKKyAgQnkg bGF0ZSAxOTk5LCB0aGUgYmlnIHN3aXRjaCgpIHN0YXRlbWVudCBnZW5lcmF0ZWQgZnJvbSB0aGUg Zm9sbG93aW5nIHN0YXRlCisgIHRhYmxlIGJlZ2FuIGNob2tpbmcgZXZlbiBnY2MsIHNvIGhlcmUg d2UgZXh0cmFjdCB0aGUgY29kZSBmcm9tIHRoZSBsYXJnZXIKKyAgc3RhdGVzIGludG8gc3RhdGlj IHJvdXRpbmVzIHRvIHJlZHVjZSB0aGUgc2l6ZSBvZiB0aGUgY2FzZXMgYW5kIHRoZQorICBzd2l0 Y2goKSBvdmVyYWxsLiAgVGhlIHJvdXRpbmVzIGZvbGxvdyB0aGUgc3RhdGUgdGFibGU7IHRoZSBw cm90b3R5cGVzIGFyZQorICBoZXJlLiAgRWFjaCBvZiB0aGVzZSByb3V0aW5lcyBzaW1wbHkgY29u dGFpbnMgdGhlIHRleHQgZnJvbSB0aGUKKyAgY29ycmVzcG9uZGluZyBjYXNlLCBidXQgd2l0aCBy ZXR1cm4oLTEpIGFkZGVkIGluIGFwcHJvcHJpYXRlIHBsYWNlczsgc2VlCisgIGluc3RydWN0aW9u cyBhZnRlciB0aGUgc3RhdGUgdGFibGUgc3dpdGNoZXIuCisqLworc3RhdGljIGludCByYzsJCQkJ LyogUmV0dXJuIGNvZGUgZm9yIHRoZXNlIHJvdXRpbmVzICovCitzdGF0aWMgaW50IHJjdl9zX3Br dCgpOwkJCS8qIFJlY2VpdmVkIGFuIFMgcGFja2V0ICovCitzdGF0aWMgaW50IHJjdl9maXJzdGRh dGEoKTsJCS8qIFJlY2VpdmVkIGZpcnN0IERhdGEgcGFja2V0ICovCitzdGF0aWMgaW50IHJjdl9z aG9ydHJlcGx5KCk7CQkvKiBTaG9ydCByZXBseSB0byBhIFJFTU9URSBjb21tYW5kICAqLworc3Rh dGljIGludCBzcnZfcXVlcnkoKTsJCQkvKiBTZXJ2ZXIgYW5zd2VycyBhbiBxdWVyeSAqLworc3Rh dGljIGludCBzcnZfY29weSgpOwkJCS8qIFNlcnZlciBleGVjdXRlcyBSRU1PVEUgQ09QWSAqLwor c3RhdGljIGludCBzcnZfcmVuYW1lKCk7CQkvKiBTZXJ2ZXIgZXhlY3V0ZXMgUkVNT1RFIFJFTkFN RSAqLworc3RhdGljIGludCBzcnZfbG9naW4oKTsJCQkvKiBTZXJ2ZXIgZXhlY3V0ZXMgUkVNT1RF IExPR0lOICovCitzdGF0aWMgaW50IHNydl90aW1lb3V0KCk7CQkvKiBTZXJ2ZXIgdGltZXMgb3V0 ICovCisKKyUlCisKKy8qCisgIFByb3RvY29sIGVudHJ5IHBvaW50cywgb25lIGZvciBlYWNoIHN0 YXJ0IHN0YXRlIChzc3RhdGUpLgorICBUaGUgbG93ZXJjYXNlIGxldHRlcnMgYXJlIGludGVybmFs ICJpbnB1dHMiIGZyb20gdGhlIHVzZXIgaW50ZXJmYWNlLgorICBOT1RFOiBUaGUgc3RhcnQgc3Rh dGUgbGV0dGVycyB0aGF0IGFwcGVhciBvbiB0aGUgbGVmdCBtYXJnaW4gaW1tZWRpYXRlbHkKKyAg YmVsb3cgY2FuIE5PVCBiZSB1c2VkIGFzIHBhY2tldCB0eXBlcyBPUiBhcyBHLXBhY2tldCBzdWJj b2Rlcy4KKyovCisKK3MgeyBUSU5JVDsJCQkJLyogU2VuZCBmaWxlKHMpICovCisgICAgaWYgKHNp bml0KCkgPiAwKSBCRUdJTiBzc2luaXQ7CisgICAgICAgZWxzZSBSRVNVTUU7IH0KKwordiB7IFRJ TklUOyBuYWtzdGF0ZSA9IDE7IEJFR0lOIGdldDsgfQkvKiBSZWNlaXZlIGZpbGUocykgKi8KKwor ciB7CQkJCQkvKiBDbGllbnQgc2VuZHMgYSBHRVQgY29tbWFuZCAqLworICAgIFRJTklUOworICAg IHZzdGF0ZSA9IGdldDsKKyAgICByZWdldCA9IDA7CisgICAgcmV0cmlldmUgPSAwOworICAgIG9w a3QgPSAwOworICAgIHZjbWQgPSAwOworI2lmZGVmIFBLVFpFUk9IQUNLCisgICAgaXBrdGFja1sw XSA9IE5VTDsKKyNlbmRpZiAvKiBQS1RaRVJPSEFDSyAqLworICAgIGlmIChzaXBrdCgnSScpID49 IDApCisgICAgICBCRUdJTiBpcGt0OworICAgIGVsc2UKKyAgICAgIFJFU1VNRTsKK30KKworaCB7 CQkJCQkvKiBDbGllbnQgc2VuZHMgYSBSRVRSSUVWRSBjb21tYW5kICovCisgICAgVElOSVQ7Cisg ICAgdnN0YXRlID0gZ2V0OworICAgIHJlZ2V0ID0gMDsKKyAgICByZXRyaWV2ZSA9IDE7CisgICAg b3BrdCA9IDA7CisgICAgdmNtZCA9IDA7CisgICAgaWYgKHNpcGt0KCdJJykgPj0gMCkKKyAgICAg IEJFR0lOIGlwa3Q7CisgICAgZWxzZQorICAgICAgUkVTVU1FOworfQoraiB7CQkJCQkvKiBDbGll bnQgc2VuZHMgYSBSRUdFVCBjb21tYW5kICovCisgICAgVElOSVQ7CisgICAgdnN0YXRlID0gZ2V0 OworICAgIHJlZ2V0ID0gMTsKKyAgICByZXRyaWV2ZSA9IDA7CisgICAgb3BrdCA9IDA7CisgICAg dmNtZCA9IDA7CisgICAgaWYgKHNpcGt0KCdJJykgPj0gMCkKKyAgICAgIEJFR0lOIGlwa3Q7Cisg ICAgZWxzZQorICAgICAgUkVTVU1FOworfQorbyB7CQkJCQkvKiBDbGllbnQgc2VuZHMgRXh0ZW5k ZWQgR0VUIFBhY2tldCAqLworICAgIFRJTklUOworICAgIHZzdGF0ZSA9IGdldDsKKyAgICByZWdl dCA9IG9vcHRzICYgR09QVF9SRVM7CisgICAgcmV0cmlldmUgPSBvb3B0cyAmIEdPUFRfREVMOwor ICAgIG9wa3QgPSAxOworICAgIHZjbWQgPSAwOworICAgIGlmIChzaXBrdCgnSScpID49IDApCisg ICAgICBCRUdJTiBpcGt0OworICAgIGVsc2UKKyAgICAgIFJFU1VNRTsKK30KK2MgewkJCQkJLyog Q2xpZW50IHNlbmRzIGEgSG9zdCBjb21tYW5kICovCisgICAgVElOSVQ7CisgICAgdnN0YXRlID0g cmdlbjsKKyAgICB2Y21kID0gJ0MnOworICAgIGlmIChzaXBrdCgnSScpID49IDApCisgICAgICBC RUdJTiBpcGt0OworICAgIGVsc2UKKyAgICAgIFJFU1VNRTsKK30KK2sgeyBUSU5JVDsJCQkJLyog Q2xpZW50IHNlbmRzIGEgS2VybWl0IGNvbW1hbmQgKi8KKyAgICB2c3RhdGUgPSByZ2VuOworICAg IHZjbWQgPSAnSyc7CisgICAgaWYgKHNpcGt0KCdJJykgPj0gMCkKKyAgICAgIEJFR0lOIGlwa3Q7 CisgICAgZWxzZQorICAgICAgUkVTVU1FOworfQorZyB7CQkJCQkvKiBDbGllbnQgc2VuZHMgYSBS RU1PVEUgY29tbWFuZCAqLworICAgIFRJTklUOworICAgIHZzdGF0ZSA9IHJnZW47CisgICAgdmNt ZCA9ICdHJzsKKyAgICBpZiAoc2lwa3QoJ0knKSA+PSAwKQorICAgICAgQkVHSU4gaXBrdDsKKyAg ICBlbHNlCisgICAgICBSRVNVTUU7Cit9Cit4IHsJCQkJCS8qIEVudGVyIHNlcnZlciBtb2RlICov CisgICAgaW50IHg7CisgICAgeCA9IGp1c3RvbmU7CisgICAgaWYgKCFFTkFCTEVEKGVuX2RlbCkp IHsJCS8qIElmIERFTEVURSBpcyBkaXNhYmxlZCAqLworCWlmIChmbmNhY3QgPT0gWFlGWF9CIHx8 CQkvKiB1bmRvIGFueSBmaWxlIGNvbGxpc2lvbiBhY3Rpb24gKi8KKwkgICAgZm5jYWN0ID09IFhZ RlhfVSB8fAkJLyogdGhhdCBjb3VsZCByZXN1bHQgaW4gZGVsZXRpb24gb3IgKi8KKwkgICAgZm5j YWN0ID09IFhZRlhfQSB8fAkJLyogbW9kaWZpY2F0aW9uIG9mIGV4aXN0aW5nIGZpbGVzLiAqLwor CSAgICBmbmNhY3QgPT0gWFlGWF9YKSB7CisjaWZuZGVmIE5PSUNQCisJICAgIGV4dGVybiBpbnQg Z19mbmNhY3Q7CisJICAgIGdfZm5jYWN0ID0gZm5jYWN0OwkJLyogU2F2ZSBjdXJyZW50IHNldHRp bmcgKi8KKyNlbmRpZiAvKiBOT0lDUCAqLworCSAgICBmbmNhY3QgPSBYWUZYX1I7CQkvKiBDaGFu Z2UgdG8gUkVOQU1FICovCisJICAgIGRlYnVnKEYxMDEsInNlcnZlciBERUxFVEUgZGlzYWJsZWQg c28gZm5jYWN0IFJFTkFNRSIsIiIsZm5jYWN0KTsKKwl9CisgICAgfQorICAgIFNFUlZFOwkJCQkv KiB0aW5pdCgpIGNsZWFycyBqdXN0b25lLi4uICovCisgICAganVzdG9uZSA9IHg7CisjaWZkZWYg SUtTREIKKyAgICBpZiAoaWtkYm9wZW4pIHNsb3RzdGF0ZSh3aGF0LCAiU0VSVkVSIiwgIiIsICIi KTsKKyNlbmRpZiAvKiBJS1NEQiAqLworfQorCithIHsKKyAgICBpbnQgYjEgPSAwLCBiMiA9IDA7 CisgICAgaWYgKCFkYXRhKSBUSU5JVDsJCQkvKiAiQUJFTkQiIC0tIFRlbGwgb3RoZXIgc2lkZS4g Ki8KKworICAgIGlmICghYmN0ZikgewkJICAgICAvKiBCbG9jayBjaGVjayAzIGZvcmNlZCBvbiBh bGwgcGFja2V0cyAqLworI2lmbmRlZiBwZHAxMQorCWlmIChlcGt0ZmxnKSB7CQkJLyogSWYgYmVj YXVzZSBvZiBFLVBBQ0tFVCBjb21tYW5kICovCisJICAgIGIxID0gYmN0bDsgYjIgPSBiY3R1Owkv KiBTYXZlIGJsb2NrIGNoZWNrIHR5cGUgKi8KKwkgICAgYmN0bCA9IGJjdHUgPSAxOwkJLyogc2V0 IGl0IHRvIDEgKi8KKwl9CisjZW5kaWYgLyogcGRwMTEgKi8KKyAgICB9CisgICAgZXJycGt0KChD SEFSICopIlVzZXIgY2FuY2VsbGVkIik7CS8qIFNlbmQgdGhlIHBhY2tldCAqLworICAgIGlmICgh YmN0ZikgewkJICAgICAvKiBCbG9jayBjaGVjayAzIGZvcmNlZCBvbiBhbGwgcGFja2V0cyAqLwor I2lmbmRlZiBwZHAxMQorCWlmIChlcGt0ZmxnKSB7CQkJLyogUmVzdG9yZSB0aGUgYmxvY2sgY2hl Y2sgKi8KKwkgICAgZXBrdGZsZyA9IDA7CisJICAgIGJjdGwgPSBiMTsgYmN0dSA9IGIyOworCX0K KyAgICB9CisjZW5kaWYgLyogcGRwMTEgKi8KKyAgICBzdWNjZXNzID0gMDsKKyAgICByZXR1cm4o MCk7CQkJCS8qIFJldHVybiBmcm9tIHByb3RvY29sLiAqLworfQorCisvKgorICBEeW5hbWljIHN0 YXRlczogPGN1cnJlbnQtc3RhdGVzPmlucHV0LWNoYXJhY3RlciB7IGFjdGlvbiB9CisgIG5ha3N0 YXRlICE9IDAgbWVhbnMgd2UncmUgaW4gYSByZWNlaXZpbmcgc3RhdGUsIGluIHdoaWNoIHdlIHNl bmQgQUNLcyAmIE5BS3MuCisqLworCis8cmdlbixnZXQsc2VydmUscm9wa3Q+UyB7CQkvKiBSZWNl aXZlIFNlbmQtSW5pdCBwYWNrZXQuICovCisgICAgcmMgPSByY3Zfc19wa3QoKTsKKyAgICBjYW5j ZWwgPSAwOwkJCQkvKiBSZXNldCBjYW5jZWxsYXRpb24gY291bnRlciAqLworICAgIGRlYnVnKEYx MDEsInJjdl9zX3BrdCIsIiIscmMpOworICAgIGlmIChyYyA+IC0xKSByZXR1cm4ocmMpOwkJLyog KHNlZSBiZWxvdykgKi8KK30KKworLyogU3RhdGVzIGluIHdoaWNoIHdlIGdldCByZXBsaWVzIGJh Y2sgZnJvbSBjb21tYW5kcyBzZW50IHRvIGEgc2VydmVyLiAqLworLyogQ29tcGxpY2F0ZWQgYmVj YXVzZSBkaXJlY3Rpb24gb2YgcHJvdG9jb2wgY2hhbmdlcywgcGFja2V0IG51bWJlciAgICAqLwor Lyogc3RheXMgYXQgemVybyB0aHJvdWdoIEktRy1TIHNlcXVlbmNlLCBhbmQgY29tcGxpY2F0ZWQg ZXZlbiBtb3JlIGJ5ICAqLworLyogc2xpZGluZyB3aW5kb3dzIGJ1ZmZlciBhbGxvY2F0aW9uLiAq LworCis8aXBrdD5ZIHsJCQkJLyogR2V0IGFjayBmb3IgSS1wYWNrZXQgKi8KKyAgICBpbnQgeCA9 IDA7CisjaWZkZWYgUEtUWkVST0hBQ0sKKyAgICBja3N0cm5jcHkoaXBrdGFjaywoY2hhciAqKXJk YXRhcCxQS1RaRVJPTEVOKTsgLyogU2F2ZSBhIGNvcHkgb2YgdGhlIEFDSyAqLworICAgIGlwa3Rs ZW4gPSBzdHJsZW4oaXBrdGFjayk7CisjZW5kaWYgLyogUEtUWkVST0hBQ0sgKi8KKyAgICBzcGFy KHJkYXRhcCk7CQkJLyogU2V0IHBhcmFtZXRlcnMgKi8KKyAgICBjYW5jZWwgPSAwOworICAgIHdp bmxvID0gMDsJCQkJLyogU2V0IHdpbmRvdy1sb3cgYmFjayB0byB6ZXJvICovCisgICAgZGVidWco RjEwMSwiPGlwa3Q+WSB3aW5sbyIsIiIsd2lubG8pOworICAgIHVyc2VydmVyID0gMTsJCQkvKiBT byBJIGtub3cgSSdtIHRhbGtpbmcgdG8gYSBzZXJ2ZXIgKi8KKyAgICBpZiAodmNtZCkgewkJCQkv KiBJZiBzZW5kaW5nIGEgZ2VuZXJpYyBjb21tYW5kICovCisJaWYgKHRpbml0KDApIDwgMCkgcmV0 dXJuKC05KTsJLyogSW5pdGlhbGl6ZSBtYW55IHRoaW5ncyAqLworCXggPSBzY21kKHZjbWQsKENI QVIgKiljbWFyZyk7CS8qIERvIHRoYXQgKi8KKwlpZiAoeCA+PSAwKSB4ID0gMDsJCS8qIChiZWNh dXNlIG9mIE8tUGFja2V0KSAqLworCWRlYnVnKEYxMDEsInByb3RvIEcgcGFja2V0IHNjbWQiLCIi LHgpOworCXZjbWQgPSAwOwkJCS8qIGFuZCB0aGVuIHVuLXJlbWVtYmVyIGl0LiAqLworICAgIH0g ZWxzZSBpZiAodnN0YXRlID09IGdldCkgeworCWRlYnVnKEYxMDEsIlJFR0VUIHNzdGF0ZSIsIiIs c3N0YXRlKTsKKwl4ID0gc3Jpbml0KHJlZ2V0LCByZXRyaWV2ZSwgb3BrdCk7IC8qIEdFVCBvciBS RUdFVCwgZXRjICovCisgICAgfQorICAgIGlmICh4IDwgMCkgewkJCS8qIElmIGNvbW1hbmQgd2Fz IHRvbyBsb25nICovCisJaWYgKCFzcmltc2cpCisJICBzcmltc2cgPSAiRXJyb3Igc2VuZGluZyBz dHJpbmciOworCWVycnBrdCgoQ0hBUiAqKXNyaW1zZyk7CQkvKiBjYW5jZWwgYm90aCBzaWRlcy4g Ki8KKwlzdWNjZXNzID0gMDsKKwlSRVNVTUU7CisgICAgfSBlbHNlIGlmICh4ID4gMCkgewkJCS8q IE5lZWQgdG8gc2VuZCBtb3JlIE8tUGFja2V0cyAqLworCUJFR0lOIHNzb3BrdDsKKyAgICB9IGVs c2UgeworCXJ0aW1lcigpOwkJCS8qIFJlc2V0IHRoZSBlbGFwc2VkIHNlY29uZHMgdGltZXIuICov CisjaWZkZWYgR0ZUSU1FUgorCXJmdGltZXIoKTsKKyNlbmRpZiAvKiBHRlRJTUVSICovCisJd2lu bG8gPSAwOwkJCS8qIFdpbmRvdyBiYWNrIHRvIDAsIGFnYWluLiAqLworCWRlYnVnKEYxMDEsIjxp cGt0PlkgdnN0YXRlIiwiIix2c3RhdGUpOworCW5ha3N0YXRlID0gMTsJCQkvKiBDYW4gc2VuZCBO QUtzIGZyb20gaGVyZS4gKi8KKwlCRUdJTiB2c3RhdGU7CQkJLyogU3dpdGNoIHRvIGRlc2lyZWQg c3RhdGUgKi8KKyAgICB9Cit9CisKKzxzc29wa3Q+WSB7CQkJCS8qIEdvdCBBQ0sgdG8gTy1QYWNr ZXQgKi8KKyAgICBkZWJ1ZyhGMTAwLCJDUENQUk8gPHNzb3BrdD5ZIiwiIiwwKTsKKyAgICB4ID0g c29wa3QoKTsKKyAgICBkZWJ1ZyhGMTAxLCJDUENQUk8gPHNzb3BrdD5ZIHgiLCIiLHgpOworICAg IGlmICh4IDwgMCkgewkJCS8qIElmIGVycm9yICovCisJZXJycGt0KChDSEFSICopc3JpbXNnKTsJ CS8qIGNhbmNlbCBib3RoIHNpZGVzLiAqLworCXN1Y2Nlc3MgPSAwOworCVJFU1VNRTsKKyAgICB9 IGVsc2UgaWYgKHggPT0gMCkgewkJLyogVGhpcyB3YXMgdGhlIGxhc3QgTy1QYWNrZXQgKi8KKwly dGltZXIoKTsJCQkvKiBSZXNldCB0aGUgZWxhcHNlZCBzZWNvbmRzIHRpbWVyLiAqLworI2lmZGVm IEdGVElNRVIKKwlyZnRpbWVyKCk7CisjZW5kaWYgLyogR0ZUSU1FUiAqLworCXdpbmxvID0gMDsJ CQkvKiBXaW5kb3cgYmFjayB0byAwLCBhZ2Fpbi4gKi8KKwlkZWJ1ZyhGMTAxLCI8c3NvcGt0Plkg d2lubG8iLCIiLHdpbmxvKTsKKwluYWtzdGF0ZSA9IDE7CQkJLyogQ2FuIHNlbmQgTkFLcyBmcm9t IGhlcmUuICovCisJQkVHSU4gdnN0YXRlOwkJCS8qIFN3aXRjaCB0byBkZXNpcmVkIHN0YXRlICov CisgICAgfQorICAgIGRlYnVnKEYxMDEsIkNQQ1BSTyA8c3NvcGt0Plkgbm90IGNoYW5naW5nIHN0 YXRlIiwiIix4KTsKK30KKworPGlwa3Q+RSB7CQkJCS8qIElnbm9yZSBFcnJvciByZXBseSB0byBJ IHBhY2tldCAqLworICAgIGludCB4ID0gMDsKKyAgICB3aW5sbyA9IDA7CQkJCS8qIFNldCB3aW5k b3ctbG93IGJhY2sgdG8gemVybyAqLworICAgIGRlYnVnKEYxMDEsIjxpcGt0PkUgd2lubG8iLCIi LHdpbmxvKTsKKyAgICBpZiAodmNtZCkgewkJCQkvKiBJbiBjYXNlIG90aGVyIEtlcm1pdCBkb2Vz bid0ICovCisJaWYgKHRpbml0KDApIDwgMCkgcmV0dXJuKC05KTsKKwl4ID0gc2NtZCh2Y21kLChD SEFSICopY21hcmcpOwkvKiB1bmRlcnN0YW5kIEktcGFja2V0cy4gKi8KKwlpZiAoeCA+PSAwKSB4 ID0gMDsJCS8qIChiZWNhdXNlIG9mIE8tUGFja2V0KSAqLworCXZjbWQgPSAwOwkJCS8qIE90aGVy d2lzZSBhY3QgYXMgYWJvdmUuLi4gKi8KKyAgICB9IGVsc2UgaWYgKHZzdGF0ZSA9PSBnZXQpIHgg PSBzcmluaXQocmVnZXQsIHJldHJpZXZlLCBvcGt0KTsKKyAgICBpZiAoeCA8IDApIHsJCQkvKiBJ ZiBjb21tYW5kIHdhcyB0b28gbG9uZyAqLworCWVycnBrdCgoQ0hBUiAqKXNyaW1zZyk7CQkvKiBj YW5jZWwgYm90aCBzaWRlcy4gKi8KKwlzdWNjZXNzID0gMDsKKwlSRVNVTUU7CisgICAgfSBlbHNl IGlmICh4ID4gMCkgewkJCS8qIE5lZWQgdG8gc2VuZCBtb3JlIE8tUGFja2V0cyAqLworCUJFR0lO IHNzb3BrdDsKKyAgICB9IGVsc2UgeworCWZyZWVycGt0KHdpbmxvKTsJCS8qIERpc2NhcmQgdGhl IEVycm9yIHBhY2tldC4gKi8KKwlkZWJ1ZyhGMTAxLCI8aXBrdD5FIHdpbmxvIiwiIix3aW5sbyk7 CisJd2lubG8gPSAwOwkJCS8qIEJhY2sgdG8gcGFja2V0IDAgYWdhaW4uICovCisJbmFrc3RhdGUg PSAxOwkJCS8qIENhbiBzZW5kIE5BS3MgZnJvbSBoZXJlLiAqLworCUJFR0lOIHZzdGF0ZTsKKyAg ICB9Cit9CisKKzxnZXQ+WSB7CQkvKiBSZXNlbmQgb2YgcHJldmlvdXMgSS1wa3QgQUNLLCBzYW1l IHNlcSBudW1iZXIgKi8KKyAgICBmcmVlcnBrdCgwKTsJCQkvKiBGcmVlIHRoZSBBQ0sncyByZWNl aXZlIGJ1ZmZlciAqLworICAgIHJlc2VuZCgwKTsJCQkJLyogU2VuZCB0aGUgR0VUIHBhY2tldCBh Z2Fpbi4gKi8KK30KKworLyogU3RhdGVzIGluIHdoaWNoIHdlJ3JlIGJlaW5nIGEgc2VydmVyICov CisKKzxzZXJ2ZSxnZXQ+SSB7CQkJCS8qIEdldCBJLXBhY2tldCAqLworI2lmbmRlZiBOT1NFUlZF UgorICAgIHNwYXIocmRhdGFwKTsJCQkvKiBTZXQgcGFyYW1ldGVycyBmcm9tIGl0ICovCisgICAg YWNrMShycGFyKCkpOwkJCS8qIFJlc3BvbmQgd2l0aCBvdXIgb3duIHBhcmFtZXRlcnMgKi8KKyNp ZmRlZiBDT01NRU5UCisgICAgcGt0aW5pdCgpOwkJCQkvKiBSZWluaXRpYWxpemUgcGFja2V0IG51 bWJlcnMgKi8KKyNlbHNlCisjaWZkZWYgQ09NTUVOVAorICAgIC8qIFRoaXMgY2FuJ3QgYmUgcmln aHQgLSBpdCB1bmRvZXMgdGhlIHN0dWZmIHdlIGp1c3QgbmVnb3RpYXRlZCAqLworICAgIHggPSBq dXN0b25lOworICAgIHRpbml0KDEpOwkJCQkvKiBSZWluaXRpYWxpemUgRVZFUllUSElORyAqLwor ICAgIGp1c3RvbmUgPSB4OwkJCS8qIEJ1dCB0aGlzLi4uICovCisjZWxzZQorICAgIHRpbml0KDAp OwkJCQkvKiBJbml0aWFsaXplIG1vc3QgdGhpbmdzICovCisjZW5kaWYgLyogQ09NTUVOVCAqLwor I2VuZGlmIC8qIENPTU1FTlQgKi8KKyNlbmRpZiAvKiBOT1NFUlZFUiAqLworICAgIGNhbmNlbCA9 IDA7CQkJCS8qIFJlc2V0IGNhbmNlbGxhdGlvbiBjb3VudGVyICovCit9CisKKzxzZXJ2ZT5SIHsJ CQkJLyogR0VUICovCisjaWZuZGVmIE5PU0VSVkVSCisgICAgaWYgKHhfbG9naW4gJiYgIXhfbG9n Z2VkKSB7CisJZXJycGt0KChDSEFSICopIkxvZ2luIHJlcXVpcmVkIik7CisJU0VSVkU7CisgICAg fSBlbHNlIGlmIChzZ2V0aW5pdCgwLDApIDwgMCkgeworCVJFU1VNRTsKKyAgICB9IGVsc2Ugewor I2lmZGVmIENLU1lTTE9HCisJaWYgKGNreHN5c2xvZyA+PSBTWVNMR19QUiAmJiBja3hsb2dnaW5n KQorCSAgY2tzeXNsb2coU1lTTEdfUFIsIDEsICJzZXJ2ZXIiLCAiR0VUIiwgKGNoYXIgKilzcnZj bWQpOworI2VuZGlmIC8qIENLU1lTTE9HICovCisJQkVHSU4gc3Npbml0OworICAgIH0KKyNlbmRp ZiAvKiBOT1NFUlZFUiAqLworfQorCis8c2VydmU+SCB7CQkJCS8qIEdFVCAvREVMRVRFIChSRVRS SUVWRSkgKi8KKyNpZm5kZWYgTk9TRVJWRVIKKyAgICBpZiAoeF9sb2dpbiAmJiAheF9sb2dnZWQp IHsKKwllcnJwa3QoKENIQVIgKikiTG9naW4gcmVxdWlyZWQiKTsKKwlSRVNVTUU7CisgICAgfSBl bHNlIGlmICghRU5BQkxFRChlbl9kZWwpKSB7CisJZXJycGt0KChDSEFSICopIkRlbGV0aW5nIGZp bGVzIGlzIGRpc2FibGVkIik7CisJUkVTVU1FOworICAgIH0gZWxzZSBpZiAoc2dldGluaXQoMCww KSA8IDApIHsKKwlSRVNVTUU7CisgICAgfSBlbHNlIHsKKwltb3ZpbmcgPSAxOworI2lmZGVmIENL U1lTTE9HCisJaWYgKGNreHN5c2xvZyA+PSBTWVNMR19QUiAmJiBja3hsb2dnaW5nKQorCSAgY2tz eXNsb2coU1lTTEdfUFIsIDEsICJzZXJ2ZXIiLCAiR0VUIC9ERUxFVEUiLCAoY2hhciAqKXNydmNt ZCk7CisjZW5kaWYgLyogQ0tTWVNMT0cgKi8KKwlCRUdJTiBzc2luaXQ7CisgICAgfQorI2VuZGlm IC8qIE5PU0VSVkVSICovCit9CisKKzxzZXJ2ZT5WIHsJCQkJLyogR0VUIC9SRUNVUlNJVkUgKi8K KyNpZm5kZWYgTk9TRVJWRVIKKyAgICByZWN1cnNpdmUgPSAxOwkJCS8qIFNldCB0aGVzZSBiZWZv cmUgc2dldGluaXQoKSAqLworICAgIGlmIChmbnNwYXRoID09IFBBVEhfT0ZGKQorICAgICAgZm5z cGF0aCA9IFBBVEhfUkVMOwkJLyogRG9uJ3Qgd29ycnksIHRoZXkgd2lsbCBiZSAqLworICAgIGlm ICh4X2xvZ2luICYmICF4X2xvZ2dlZCkgewkJLyogcmVzZXQgbmV4dCB0aW1lIHRocm91Z2guICov CisJZXJycGt0KChDSEFSICopIkxvZ2luIHJlcXVpcmVkIik7CisJUkVTVU1FOworICAgIH0gZWxz ZSBpZiAoc2dldGluaXQoMCwwKSA8IDApIHsKKwlSRVNVTUU7CisgICAgfSBlbHNlIHsKKyNpZmRl ZiBDS1NZU0xPRworCWlmIChja3hzeXNsb2cgPj0gU1lTTEdfUFIgJiYgY2t4bG9nZ2luZykKKwkg IGNrc3lzbG9nKFNZU0xHX1BSLCAxLCAic2VydmVyIiwgIkdFVCAvUkVDVVJTSVZFIiwgKGNoYXIg KilzcnZjbWQpOworI2VuZGlmIC8qIENLU1lTTE9HICovCisJQkVHSU4gc3Npbml0OworICAgIH0K KyNlbmRpZiAvKiBOT1NFUlZFUiAqLworfQorCis8c2VydmU+VyB7CQkJCS8qIEdFVCAvUkVDVVJT SVZFIC9ERUxFVEUgKi8KKyNpZm5kZWYgTk9TRVJWRVIKKyAgICByZWN1cnNpdmUgPSAxOwkJCS8q IFNldCB0aGVzZSBiZWZvcmUgc2dldGluaXQoKSAqLworICAgIGlmIChmbnNwYXRoID09IFBBVEhf T0ZGKQorICAgICAgZm5zcGF0aCA9IFBBVEhfUkVMOwkJLyogRG9uJ3Qgd29ycnksIHRoZXkgd2ls bCBiZSAqLworICAgIG1vdmluZyA9IDE7CQkJCS8qIHJlc2V0IG5leHQgdGltZSB0aHJvdWdoLiAq LworICAgIGlmICh4X2xvZ2luICYmICF4X2xvZ2dlZCkgeworCWVycnBrdCgoQ0hBUiAqKSJMb2dp biByZXF1aXJlZCIpOworCVJFU1VNRTsKKyAgICB9IGVsc2UgaWYgKCFFTkFCTEVEKGVuX2RlbCkp IHsKKwllcnJwa3QoKENIQVIgKikiRGVsZXRpbmcgZmlsZXMgaXMgZGlzYWJsZWQiKTsKKwlSRVNV TUU7CisgICAgfSBlbHNlIGlmIChzZ2V0aW5pdCgwLDApIDwgMCkgeworCVJFU1VNRTsKKyAgICB9 IGVsc2UgeworI2lmZGVmIENLU1lTTE9HCisJaWYgKGNreHN5c2xvZyA+PSBTWVNMR19QUiAmJiBj a3hsb2dnaW5nKQorCSAgY2tzeXNsb2coU1lTTEdfUFIsMSwic2VydmVyIiwKKwkJICAgIkdFVCAv UkVDVVJTSVZFIC9ERUxFVEUiLChjaGFyICopc3J2Y21kKTsKKyNlbmRpZiAvKiBDS1NZU0xPRyAq LworCUJFR0lOIHNzaW5pdDsKKyAgICB9CisjZW5kaWYgLyogTk9TRVJWRVIgKi8KK30KKworPHNl cnZlPkogewkJCQkvKiBHRVQgL1JFQ09WRVIgKFJFR0VUKSAqLworI2lmbmRlZiBOT1NFUlZFUgor ICAgIGlmICh4X2xvZ2luICYmICF4X2xvZ2dlZCkgeworCWVycnBrdCgoQ0hBUiAqKSJMb2dpbiBy ZXF1aXJlZCIpOworCVNFUlZFOworICAgIH0gZWxzZSBpZiAoc2dldGluaXQoMSwwKSA8IDApIHsK KwlSRVNVTUU7CisgICAgfSBlbHNlIHsKKyNpZmRlZiBDS1NZU0xPRworCWlmIChja3hzeXNsb2cg Pj0gU1lTTEdfUFIgJiYgY2t4bG9nZ2luZykKKwkgIGNrc3lzbG9nKFNZU0xHX1BSLCAxLCAic2Vy dmVyIiwgIkdFVCAvUkVDT1ZFUiIsIChjaGFyICopc3J2Y21kKTsKKyNlbmRpZiAvKiBDS1NZU0xP RyAqLworCUJFR0lOIHNzaW5pdDsKKyAgICB9CisjZW5kaWYgLyogTk9TRVJWRVIgKi8KK30KKwor PHNlcnZlPk8gewkJCQkvKiBFeHRlbmRlZCBHRVQgKi8KKyNpZm5kZWYgTk9TRVJWRVIKKyAgICBp ZiAoeF9sb2dpbiAmJiAheF9sb2dnZWQpIHsJCS8qIChhbnkgY29tYmluYXRpb24gb2Ygb3B0aW9u cykgKi8KKwllcnJwa3QoKENIQVIgKikiTG9naW4gcmVxdWlyZWQiKTsKKwlTRVJWRTsKKyAgICB9 IGVsc2UgaWYgKCh4ID0gc2dldGluaXQoMCwxKSkgPCAwKSB7CisJZGVidWcoRjEwMSwiQ0tDUFJP IDxzZXJ2ZT5PIHNnZXRpbml0IGZhaWwiLCIiLHgpOworCVJFU1VNRTsKKyAgICB9IGVsc2UgaWYg KHggPT0gMCkgeworCWRlYnVnKEYxMDEsIkNLQ1BSTyA8c2VydmU+TyBzZ2V0aW5pdCBkb25lIiwi Iix4KTsKKyNpZmRlZiBDS1NZU0xPRworCWlmIChja3hzeXNsb2cgPj0gU1lTTEdfUFIgJiYgY2t4 bG9nZ2luZykKKwkgIGNrc3lzbG9nKFNZU0xHX1BSLCAxLCAic2VydmVyIiwgIkVYVEVOREVEIEdF VCIsIChjaGFyICopc3J2Y21kKTsKKyNlbmRpZiAvKiBDS1NZU0xPRyAqLworCUJFR0lOIHNzaW5p dDsKKyAgICB9IGVsc2UgewkJCQkvKiBPdGhlcndpc2Ugc3RheSBpbiB0aGlzIHN0YXRlICovCisJ ZGVidWcoRjEwMSwiQ0tDUFJPIDxzZXJ2ZT5PIHNnZXRpbml0IFRCQyIsIiIseCk7CisJYWNrKCk7 CisJQkVHSU4gcm9wa3Q7CisgICAgfQorI2VuZGlmIC8qIE5PU0VSVkVSICovCit9CisKKzxyb3Br dD5PIHsKKyNpZm5kZWYgTk9TRVJWRVIKKyAgICBpZiAoeF9sb2dpbiAmJiAheF9sb2dnZWQpIHsJ CS8qIChhbnkgY29tYmluYXRpb24gb2Ygb3B0aW9ucykgKi8KKwllcnJwa3QoKENIQVIgKikiTG9n aW4gcmVxdWlyZWQiKTsKKwlTRVJWRTsKKyAgICB9IGVsc2UgaWYgKCh4ID0gc2dldGluaXQoMCwx KSkgPCAwKSB7CisJZGVidWcoRjEwMSwiQ0tDUFJPIDxyb3BrdD5PIHNnZXRpbml0IGZhaWwiLCIi LHgpOworCVJFU1VNRTsKKyAgICB9IGVsc2UgaWYgKHggPT0gMCkgeworCWRlYnVnKEYxMDEsIkNL Q1BSTyA8cm9wa3Q+TyBzZ2V0aW5pdCBkb25lIiwiIix4KTsKKyNpZmRlZiBDS1NZU0xPRworCWlm IChja3hzeXNsb2cgPj0gU1lTTEdfUFIgJiYgY2t4bG9nZ2luZykKKwkgIGNrc3lzbG9nKFNZU0xH X1BSLCAxLCAic2VydmVyIiwgIkVYVEVOREVEIEdFVCIsIChjaGFyICopc3J2Y21kKTsKKyNlbmRp ZiAvKiBDS1NZU0xPRyAqLworCUJFR0lOIHNzaW5pdDsKKyAgICB9IGVsc2UgewkJCQkvKiBPdGhl cndpc2Ugc3RheSBpbiB0aGlzIHN0YXRlICovCisJZGVidWcoRjEwMSwiQ0tDUFJPIDxyb3BrdD5P IHNnZXRpbml0IFRCQyIsIiIseCk7CisJYWNrKCk7CisgICAgfQorI2VuZGlmIC8qIE5PU0VSVkVS ICovCit9CisKKzxzZXJ2ZT5HIHsJCQkJLyogR2VuZXJpYyBzZXJ2ZXIgY29tbWFuZCAqLworI2lm bmRlZiBOT1NFUlZFUgorICAgIHNydnB0ciA9IHNydmNtZDsJCQkvKiBQb2ludCB0byBjb21tYW5k IGJ1ZmZlciAqLworICAgIGRlY29kZShyZGF0YXAscHV0c3J2LDApOwkJLyogRGVjb2RlIHBhY2tl dCBkYXRhIGludG8gaXQgKi8KKyAgICBwdXRzcnYoTlVMKTsJCQkvKiBJbnNlcnQgYSBjb3VwbGUg bnVsbHMgKi8KKyAgICBwdXRzcnYoTlVMKTsJCQkvKiBmb3IgdGVybWluYXRpb24gKi8KKyAgICBp ZiAoc3J2Y21kWzBdKSB7CisJc3N0YXRlID0gc3J2Y21kWzBdOwkJLyogU2V0IHJlcXVlc3RlZCBz dGFydCBzdGF0ZSAqLworCWlmICh4X2xvZ2luICYmICF4X2xvZ2dlZCAmJgkvKiBMb2dpbiByZXF1 aXJlZD8gKi8KKwkgICAgLyogTG9naW4sIExvZ291dCwgYW5kIEhlbHAgYXJlIGFsbG93ZWQgd2hl biBub3QgbG9nZ2VkIGluICovCisJICAgIHNzdGF0ZSAhPSAnSScgJiYgc3N0YXRlICE9ICdMJyAm JiBzc3RhdGUgIT0gJ0gnKSB7CisJICAgIGVycnBrdCgoQ0hBUiAqKSJMb2dpbiByZXF1aXJlZCIp OworCSAgICBTRVJWRTsKKwl9IGVsc2UgeworCSAgICBuYWtzdGF0ZSA9IDA7CQkvKiBOb3cgSSdt IHRoZSBzZW5kZXIuICovCisJICAgIHdoYXQgPSBXX1JFTU87CQkvKiBEb2luZyBhIFJFTU9URSBj b21tYW5kLiAqLworI2lmZGVmIFNUUkVBTUlORworCSAgICBpZiAoIXN0cmVhbWluZykKKyNlbmRp ZiAvKiBTVFJFQU1JTkcgKi8KKwkgICAgICBpZiAodGltaW50IDwgMSkKKwkJdGltaW50ID0gY2hr dGltbyhydGltbyx0aW1lZik7IC8qIFN3aXRjaCB0byBwZXItcGFja2V0IHRpbWVyICovCisJICAg IGJpbmFyeSA9IFhZRlRfVDsJCS8qIFN3aXRjaCB0byB0ZXh0IG1vZGUgKi8KKwkgICAgQkVHSU4g Z2VuZXJpYzsJCS8qIFN3aXRjaCB0byBnZW5lcmljIGNvbW1hbmQgc3RhdGUgKi8KKwl9CisgICAg fSBlbHNlIHsKKwllcnJwa3QoKENIQVIgKikiQmFkbHkgZm9ybWVkIHNlcnZlciBjb21tYW5kIik7 IC8qIHJlcG9ydCBlcnJvciAqLworCVJFU1VNRTsJCQkvKiAmIGdvIGJhY2sgdG8gc2VydmVyIGNv bW1hbmQgd2FpdCAqLworICAgIH0KKyNlbmRpZiAvKiBOT1NFUlZFUiAqLworfQorCis8c2VydmU+ QyB7CQkJCS8qIFJlY2VpdmUgSG9zdCBjb21tYW5kICovCisjaWZuZGVmIE5PU0VSVkVSCisgICAg aWYgKHhfbG9naW4gJiYgIXhfbG9nZ2VkKSB7CisJZXJycGt0KChDSEFSICopIkxvZ2luIHJlcXVp cmVkIik7CisJU0VSVkU7CisgICAgfSBlbHNlIGlmICghRU5BQkxFRChlbl9ob3MpKSB7CisJZXJy cGt0KChDSEFSICopIlJFTU9URSBIT1NUIGRpc2FibGVkIik7CisJUkVTVU1FOworICAgIH0gZWxz ZSBpZiAobm9wdXNoKSB7CisJZXJycGt0KChDSEFSICopIkhPU1QgY29tbWFuZHMgbm90IGF2YWls YWJsZSIpOworCVJFU1VNRTsKKyAgICB9IGVsc2UgeworCXNydnB0ciA9IHNydmNtZDsJCS8qIFBv aW50IHRvIGNvbW1hbmQgYnVmZmVyICovCisJZGVjb2RlKHJkYXRhcCxwdXRzcnYsMCk7CS8qIERl Y29kZSBjb21tYW5kIHBhY2tldCBpbnRvIGl0ICovCisJcHV0c3J2KE5VTCk7CQkJLyogTnVsbC10 ZXJtaW5hdGUgKi8KKwluYWtzdGF0ZSA9IDA7CQkJLyogTm93IHNlbmRpbmcsIG5vdCByZWNlaXZp bmcgKi8KKwliaW5hcnkgPSBYWUZUX1Q7CQkvKiBTd2l0Y2ggdG8gdGV4dCBtb2RlICovCisJaWYg KHN5c2NtZCgoY2hhciAqKXNydmNtZCwiIikpIHsgLyogVHJ5IHRvIGV4ZWN1dGUgdGhlIGNvbW1h bmQgKi8KKwkgICAgd2hhdCA9IFdfUkVNTzsJCS8qIERvaW5nIGEgUkVNT1RFIGNvbW1hbmQuICov CisjaWZkZWYgU1RSRUFNSU5HCisJICAgIGlmICghc3RyZWFtaW5nKQorI2VuZGlmIC8qIFNUUkVB TUlORyAqLworCSAgICAgIGlmICh0aW1pbnQgPCAxKQorCQl0aW1pbnQgPSBjaGt0aW1vKHJ0aW1v LHRpbWVmKTsgLyogU3dpdGNoIHRvIHBlci1wYWNrZXQgdGltZXIgKi8KKyNpZmRlZiBDS1NZU0xP RworCSAgICBpZiAoY2t4c3lzbG9nID49IFNZU0xHX1BSICYmIGNreGxvZ2dpbmcpCisJICAgICAg Y2tzeXNsb2coU1lTTEdfUFIsIDEsICJzZXJ2ZXIiLCAiUkVNT1RFIEhPU1QiLCAoY2hhciAqKXNy dmNtZCk7CisjZW5kaWYgLyogQ0tTWVNMT0cgKi8KKwkgICAgQkVHSU4gc3Npbml0OwkJLyogSWYg T0ssIHNlbmQgYmFjayBpdHMgb3V0cHV0ICovCisJfSBlbHNlIHsJCQkvKiBPdGhlcndpc2UgKi8K KwkgICAgZXJycGt0KChDSEFSICopIkNhbid0IGRvIHN5c3RlbSBjb21tYW5kIik7IC8qIHJlcG9y dCBlcnJvciAqLworCSAgICBSRVNVTUU7CQkJLyogJiBnbyBiYWNrIHRvIHNlcnZlciBjb21tYW5k IHdhaXQgKi8KKwl9CisgICAgfQorI2VuZGlmIC8qIE5PU0VSVkVSICovCit9CisKKzxzZXJ2ZT5x IHsJCQkJLyogSW50ZXJydXB0ZWQgb3IgY29ubmVjdGlvbiBsb3N0ICovCisgICAgcmMgPSBzcnZf dGltZW91dCgpOworICAgIGRlYnVnKEYxMDEsInNydl90aW1lb3V0IiwiIixyYyk7CisgICAgaWYg KHJjID4gLTEpIHJldHVybihyYyk7CQkvKiAoc2VlIGJlbG93KSAqLworfQorCis8c2VydmU+TiB7 CQkJCS8qIFNlcnZlciBnb3QgYSBOQUsgaW4gY29tbWFuZC13YWl0ICovCisjaWZuZGVmIE5PU0VS VkVSCisgICAgZXJycGt0KChDSEFSICopIkRpZCB5b3Ugc2F5IFJFQ0VJVkUgaW5zdGVhZCBvZiBH RVQ/Iik7CisgICAgUkVTVU1FOworI2VuZGlmIC8qIE5PU0VSVkVSICovCit9CisKKzxzZXJ2ZT4u IHsJCQkJLyogQW55IG90aGVyIGNvbW1hbmQgaW4gdGhpcyBzdGF0ZSAqLworI2lmbmRlZiBOT1NF UlZFUgorICAgIGlmIChjICE9ICgnRScgLSBTUCkgJiYgYyAhPSAoJ1knIC0gU1ApKSAvKiBleGNl cHQgRSBhbmQgWSBwYWNrZXRzLiAqLworICAgICAgZXJycGt0KChDSEFSICopIlVuaW1wbGVtZW50 ZWQgc2VydmVyIGZ1bmN0aW9uIik7CisgICAgLyogSWYgd2UgYW5zd2VyIGFuIEUgd2l0aCBhbiBF LCB3ZSBnZXQgYW4gaW5maW5pdGUgbG9vcC4gKi8KKyAgICAvKiBBIFkgKEFDSykgY2FuIHNob3cg dXAgaGVyZSBpZiB3ZSBzZW50IGJhY2sgYSBzaG9ydC1mb3JtIHJlcGx5IHRvICovCisgICAgLyog YSBHIHBhY2tldCBhbmQgaXQgd2FzIGVjaG9lZC4gIEFDS3MgY2FuIGJlIHNhZmVseSBpZ25vcmVk IGhlcmUuICovCisgICAgUkVTVU1FOwkJCQkvKiBHbyBiYWNrIHRvIHNlcnZlciBjb21tYW5kIHdh aXQuICovCisjZW5kaWYgLyogTk9TRVJWRVIgKi8KK30KKworPGdlbmVyaWM+SSB7CQkJCS8qIExv Z2luL091dCAqLworICAgIHJjID0gc3J2X2xvZ2luKCk7CisgICAgZGVidWcoRjEwMSwiPGdlbmVy aWM+SSBzcnZfbG9naW4iLCIiLHJjKTsKKyAgICBpZiAocmMgPiAtMSkgcmV0dXJuKHJjKTsJCS8q IChzZWUgYmVsb3cpICovCit9CisKKzxnZW5lcmljPkMgewkJCQkvKiBHb3QgUkVNT1RFIENEIGNv bW1hbmQgKi8KKyNpZm5kZWYgTk9TRVJWRVIKKyNpZmRlZiBDS1NZU0xPRworICAgIGlmIChja3hz eXNsb2cgPj0gU1lTTEdfUFIgJiYgY2t4bG9nZ2luZykKKyAgICAgIGNrc3lzbG9nKFNZU0xHX1BS LCAxLCAic2VydmVyIiwgIlJFTU9URSBDRCIsIChjaGFyICopc3J2Y21kKTsKKyNlbmRpZiAvKiBD S1NZU0xPRyAqLworICAgIGlmICghRU5BQkxFRChlbl9jd2QpKSB7CisJZXJycGt0KChDSEFSICop IlJFTU9URSBDRCBkaXNhYmxlZCIpOworCVJFU1VNRTsKKyAgICB9IGVsc2UgeworCWNoYXIgKiBw ID0gTlVMTDsKKwl4ID0gY3dkKChjaGFyICopKHNydmNtZCsxKSk7CS8qIFRyeSB0byBjaGFuZ2Ug ZGlyZWN0b3J5ICovCisjaWZkZWYgSUtTREIKKwlpZiAoaWtkYm9wZW4pIHNsb3RzdGF0ZSh3aGF0 LCJSRU1PVEUgQ0QiLCAoY2hhciAqKShzcnZjbWQrMiksICIiKTsKKyNlbmRpZiAvKiBJS1NEQiAq LworCWlmICgheCkgewkJCS8qIEZhaWxlZCAqLworCSAgICBlcnJwa3QoKENIQVIgKikiQ2FuJ3Qg Y2hhbmdlIGRpcmVjdG9yeSIpOworCSAgICBSRVNVTUU7CQkJLyogQmFjayB0byBzZXJ2ZXIgY29t bWFuZCB3YWl0ICovCisJfSBlbHNlIGlmICh4ID09IDIpIHsJCS8qIFVzZXIgd2FudHMgbWVzc2Fn ZSAqLworCSAgICBpZiAoIUVOQUJMRUQoZW5fdHlwKSkgewkvKiBNZXNzYWdlcyAoUkVNT1RFIFRZ UEUpIGRpc2FibGVkPyAqLworCQllcnJwa3QoKENIQVIgKikiUkVNT1RFIFRZUEUgZGlzYWJsZWQi KTsKKwkJUkVTVU1FOworCSAgICB9IGVsc2UgewkJCS8qIFRZUEUgaXMgZW5hYmxlZCAqLworCQlp bnQgaTsKKwkJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCQkgICAgaWYgKHpjaGtpKGNkbXNn ZmlsZVtpXSkgPiAtMSkgeworCQkJYnJlYWs7CisJCSAgICB9CisJCX0KKwkJYmluYXJ5ID0gWFlG VF9UOwkvKiBVc2UgdGV4dCBtb2RlIGZvciB0aGlzLiAqLworCQlpZiAoaSA8IDggJiYgc25kdHlw ZShjZG1zZ2ZpbGVbaV0pKSB7IC8qIEhhdmUgcmVhZG1lIGZpbGU/ICovCisJCSAgICBCRUdJTiBz c2luaXQ7CS8qIE9LICovCisJCX0gZWxzZSB7CQkvKiBub3QgT0sgKi8KKwkJICAgIHAgPSB6Z3Rk aXIoKTsKKwkJICAgIGlmICghcCkgcCA9ICIiOworCQkgICAgc3VjY2VzcyA9ICgqcCkgPyAxIDog MDsKKwkJICAgIGFjazEoKENIQVIgKilwKTsJLyogQUNLIHdpdGggbmV3IGRpcmVjdG9yeSBuYW1l ICovCisJCSAgICBzdWNjZXNzID0gMTsKKwkJICAgIFJFU1VNRTsJCS8qIHdhaXQgZm9yIG5leHQg c2VydmVyIGNvbW1hbmQgKi8KKwkJfQorCSAgICB9CisJfSBlbHNlIHsJCQkvKiBVc2VyIGRvZXNu J3Qgd2FudCBtZXNzYWdlICovCisJICAgIHAgPSB6Z3RkaXIoKTsKKwkgICAgaWYgKCFwKSBwID0g IiI7CisJICAgIHN1Y2Nlc3MgPSAoKnApID8gMSA6IDA7CisJICAgIGFjazEoKENIQVIgKilwKTsK KwkgICAgc3VjY2VzcyA9IDE7CisJICAgIFJFU1VNRTsJCQkvKiBXYWl0IGZvciBuZXh0IHNlcnZl ciBjb21tYW5kICovCisJfQorICAgIH0KKyNlbmRpZiAvKiBOT1NFUlZFUiAqLworfQorCis8Z2Vu ZXJpYz5BIHsJCQkJLyogR290IFJFTU9URSBQV0QgY29tbWFuZCAqLworI2lmbmRlZiBOT1NFUlZF UgorI2lmZGVmIENLU1lTTE9HCisgICAgaWYgKGNreHN5c2xvZyA+PSBTWVNMR19QUiAmJiBja3hs b2dnaW5nKQorICAgICAgY2tzeXNsb2coU1lTTEdfUFIsIDEsICJzZXJ2ZXIiLCAiUkVNT1RFIFBX RCIsIE5VTEwpOworI2VuZGlmIC8qIENLU1lTTE9HICovCisgICAgaWYgKCFFTkFCTEVEKGVuX2N3 ZCkpIHsKKwllcnJwa3QoKENIQVIgKikiUkVNT1RFIENEIGRpc2FibGVkIik7CisJUkVTVU1FOwor ICAgIH0gZWxzZSB7CisJaWYgKGVuY3N0cigoQ0hBUiAqKXpndGRpcigpKSA+IC0xKSB7IC8qIEVu Y29kZSBjdXJyZW50IGRpcmVjdG9yeSAqLworCSAgICBhY2sxKGRhdGEpOwkJCS8qIElmIGl0IGZp dHMsIHNlbmQgaXQgYmFjayBpbiBBQ0sgKi8KKwkgICAgc3VjY2VzcyA9IDE7CisJfSBlbHNlIHsJ CQkvKiBGYWlsZWQgKi8KKwkgICAgYWNrKCk7CQkJLyogU2VuZCBlbXB0eSBBQ0sgKi8KKwkgICAg c3VjY2VzcyA9IDA7CQkvKiBhbmQgaW5kaWNhdGUgZmFpbHVyZSBsb2NhbGx5ICovCisJfQorCVJF U1VNRTsJCQkJLyogQmFjayB0byBzZXJ2ZXIgY29tbWFuZCB3YWl0ICovCisgICAgfQorI2VuZGlm IC8qIE5PU0VSVkVSICovCit9CisKKzxnZW5lcmljPkQgewkJCQkvKiBSRU1PVEUgRElSRUNUT1JZ IGNvbW1hbmQgKi8KKyNpZm5kZWYgTk9TRVJWRVIKKyAgICBjaGFyICpuMjsKKyNpZmRlZiBDS1NZ U0xPRworICAgIGlmIChja3hzeXNsb2cgPj0gU1lTTEdfUFIgJiYgY2t4bG9nZ2luZykKKyAgICAg IGNrc3lzbG9nKFNZU0xHX1BSLCAxLCAic2VydmVyIiwgIlJFTU9URSBESVJFQ1RPUlkiLCAoY2hh ciAqKXNydmNtZCk7CisjZW5kaWYgLyogQ0tTWVNMT0cgKi8KKyAgICBpZiAoIUVOQUJMRUQoZW5f ZGlyKSkgewkJLyogSWYgRElSIGlzIGRpc2FibGVkLCAqLworCWVycnBrdCgoQ0hBUiAqKSJSRU1P VEUgRElSRUNUT1JZIGRpc2FibGVkIik7IC8qIHJlZnVzZS4gKi8KKwlSRVNVTUU7CisgICAgfSBl bHNlIHsJCQkJLyogRElSIGlzIGVuYWJsZWQuICovCisjaWZkZWYgSUtTREIKKwlpZiAoaWtkYm9w ZW4pIHNsb3RzdGF0ZSh3aGF0LCJSRU1PVEUgRElSIiwgKGNoYXIgKikoc3J2Y21kKzIpLCAiIik7 CisjZW5kaWYgLyogSUtTREIgKi8KKwlpZiAoIUVOQUJMRUQoZW5fY3dkKSkgewkJLyogQnV0IENX RCBpcyBkaXNhYmxlZCAqLworCSAgICB6c3RyaXAoKGNoYXIgKikoc3J2Y21kKzIpLCZuMik7IC8q IGFuZCB0aGV5IGluY2x1ZGVkIGEgcGF0aG5hbWUsICovCisJICAgIGlmIChzdHJjbXAoKGNoYXIg Kikoc3J2Y21kKzIpLG4yKSkgeyAvKiBzbyByZWZ1c2UuICovCisJCWVycnBrdCgoQ0hBUiAqKSJB Y2Nlc3MgZGVuaWVkIik7CisJCVJFU1VNRTsJCQkvKiBSZW1lbWJlciwgdGhpcyBpcyBub3QgYSBn b3RvISAqLworCSAgICB9CisJfQorCWlmIChzdGF0ZSA9PSBnZW5lcmljKSB7CQkJLyogSXQncyBP SyB0byBnbyBhaGVhZC4gKi8KKyNpZmRlZiBDT01NRU5UCisJICAgIG4yID0gKCooc3J2Y21kKzIp KSA/IERJUkNNRCA6IERJUkNNMjsKKwkgICAgaWYgKHN5c2NtZChuMiwoY2hhciAqKShzcnZjbWQr MikpKSAgLyogSWYgaXQgY2FuIGJlIGRvbmUgKi8KKyNlbHNlCisJICAgIGludCB4OworCSAgICBp ZiAoKHggPSBzbmRkaXIoKGNoYXIqKShzcnZjbWQrMikpKSA+IDApCisjZW5kaWYgLyogQ09NTUVO VCAqLworCSAgICB7CisJCUJFR0lOIHNzaW5pdDsJCS8qIHNlbmQgdGhlIHJlc3VsdHMgYmFjazsg Ki8KKwkgICAgfSBlbHNlIHsJCQkvKiBvdGhlcndpc2UgKi8KKwkJaWYgKHggPCAwKQorCQkgIGVy cnBrdCgoQ0hBUiAqKSJObyBmaWxlcyBtYXRjaCIpOworCQllbHNlCisJCSAgZXJycGt0KChDSEFS ICopIkNhbid0IGxpc3QgZGlyZWN0b3J5Iik7CisJCVJFU1VNRTsJCQkvKiByZXR1cm4gdG8gc2Vy dmVyIGNvbW1hbmQgd2FpdCAqLworCSAgICB9CisJfQorICAgIH0KKyNlbmRpZiAvKiBOT1NFUlZF UiAqLworfQorCis8Z2VuZXJpYz5FIHsJCQkJLyogUkVNT1RFIERFTEVURSAoRXJhc2UpICovCisj aWZuZGVmIE5PU0VSVkVSCisgICAgY2hhciAqbjI7CisjaWZkZWYgQ0tTWVNMT0cKKyAgICBpZiAo Y2t4c3lzbG9nID49IFNZU0xHX1BSICYmIGNreGxvZ2dpbmcpCisgICAgICBja3N5c2xvZyhTWVNM R19QUiwgMSwgInNlcnZlciIsICJSRU1PVEUgREVMRVRFIiwgKGNoYXIgKilzcnZjbWQpOworI2Vu ZGlmIC8qIENLU1lTTE9HICovCisgICAgaWYgKCFFTkFCTEVEKGVuX2RlbCkpIHsKKwllcnJwa3Qo KENIQVIgKikiUkVNT1RFIERFTEVURSBkaXNhYmxlZCIpOworCVJFU1VNRTsKKyAgICB9IGVsc2Ug ewkJCQkvKiBERUxFVEUgaXMgZW5hYmxlZCAqLworI2lmZGVmIElLU0RCCisJaWYgKGlrZGJvcGVu KSBzbG90c3RhdGUod2hhdCwiUkVNT1RFIERFTEVURSIsIChjaGFyICopKHNydmNtZCsyKSwgIiIp OworI2VuZGlmIC8qIElLU0RCICovCisJaWYgKCFFTkFCTEVEKGVuX2N3ZCkpIHsJCS8qIGJ1dCBD V0QgaXMgZGlzYWJsZWQgKi8KKwkgICAgenN0cmlwKChjaGFyICopKHNydmNtZCsyKSwmbjIpOyAv KiBhbmQgdGhleSBpbmNsdWRlZCBhIHBhdGhuYW1lLCAqLworCSAgICBpZiAoc3RyY21wKChjaGFy ICopKHNydmNtZCsyKSxuMikpIHsgLyogc28gcmVmdXNlLiAqLworCQllcnJwa3QoKENIQVIgKiki QWNjZXNzIGRlbmllZCIpOworCQlSRVNVTUU7CQkJLyogUmVtZW1iZXIsIHRoaXMgaXMgbm90IGEg Z290byEgKi8KKwkgICAgfQorCX0gZWxzZSBpZiAoaXNkaXIoKGNoYXIgKikoc3J2Y21kKzIpKSkg eyAvKiBBIGRpcmVjdG9yeSBuYW1lPyAqLworCSAgICBlcnJwa3QoKENIQVIgKikiSXQncyBhIGRp cmVjdG9yeSIpOworCSAgICBSRVNVTUU7CisJfQorCWlmIChzdGF0ZSA9PSBnZW5lcmljKSB7CQkv KiBJdCdzIE9LIHRvIGdvIGFoZWFkLiAqLworCSAgICBpbnQgeDsKKwkgICAgaWYgKCh4ID0gc25k ZGVsKChjaGFyKikoc3J2Y21kKzIpKSkgPiAwKSB7CisJCUJFR0lOIHNzaW5pdDsJCS8qIElmIE9L IHNlbmQgcmVzdWx0cyBiYWNrICovCisJICAgIH0gZWxzZSB7CQkJLyogb3RoZXJ3aXNlICovCisJ CWlmICh4IDwgMCkKKwkJICBlcnJwa3QoKENIQVIgKikiRmlsZSBub3QgZm91bmQiKTsgLyogcmVw b3J0IGZhaWx1cmUgKi8KKwkJZWxzZQorCQkgIGVycnBrdCgoQ0hBUiAqKSJERUxFVEUgZmFpbGVk Iik7CisJCVJFU1VNRTsJCQkvKiAmIHJldHVybiB0byBzZXJ2ZXIgY29tbWFuZCB3YWl0ICovCisJ ICAgIH0KKwl9CisgICAgfQorI2VuZGlmIC8qIE5PU0VSVkVSICovCit9CisKKzxnZW5lcmljPkYg ewkJCQkvKiBGSU5JU0ggKi8KKyNpZm5kZWYgTk9TRVJWRVIKKyNpZmRlZiBDS1NZU0xPRworICAg IGlmIChja3hzeXNsb2cgPj0gU1lTTEdfUFIgJiYgY2t4bG9nZ2luZykKKyAgICAgIGNrc3lzbG9n KFNZU0xHX1BSLCAxLCAic2VydmVyIiwgIkZJTklTSCIsIE5VTEwpOworI2VuZGlmIC8qIENLU1lT TE9HICovCisjaWZkZWYgSUtTREIKKyAgICBpZiAoaWtkYm9wZW4pIHNsb3RzdGF0ZSh3aGF0LCJT RVJWRVIgRklOSVNIIiwgIiIsICIiKTsKKyNlbmRpZiAvKiBJS1NEQiAqLworICAgIGlmICghRU5B QkxFRChlbl9maW4pKSB7CisJZXJycGt0KChDSEFSICopIkZJTklTSCBkaXNhYmxlZCIpOworCVJF U1VNRTsKKyAgICB9IGVsc2UgeworCWFjaygpOwkJCQkvKiBBY2tub3dsZWRnZSAqLworCXh4c2Ny ZWVuKFNDUl9UQywwLDBMLCIiKTsJLyogRGlzcGxheSAqLworCXN1Y2Nlc3MgPSAxOworCXJldHVy bigwKTsJCQkvKiBEb25lICovCisgICAgfQorI2VuZGlmIC8qIE5PU0VSVkVSICovCit9CisKKzxn ZW5lcmljPlggewkJCQkvKiBFWElUICovCisjaWZuZGVmIE5PU0VSVkVSCisjaWZkZWYgQ0tTWVNM T0cKKyAgICBpZiAoY2t4c3lzbG9nID49IFNZU0xHX1BSICYmIGNreGxvZ2dpbmcpCisgICAgICBj a3N5c2xvZyhTWVNMR19QUiwgMSwgInNlcnZlciIsICJSRU1PVEUgRVhJVCIsIE5VTEwpOworI2Vu ZGlmIC8qIENLU1lTTE9HICovCisjaWZkZWYgSUtTREIKKyAgICBpZiAoaWtkYm9wZW4pIHNsb3Rz dGF0ZSh3aGF0LCJSRU1PVEUgRVhJVCIsICIiLCAiIik7CisjZW5kaWYgLyogSUtTREIgKi8KKyAg ICBpZiAoIUVOQUJMRUQoZW5feGl0KSkgeworCWVycnBrdCgoQ0hBUiAqKSJFWElUIGRpc2FibGVk Iik7CisJUkVTVU1FOworICAgIH0gZWxzZSB7CisJYWNrKCk7CQkJCS8qIEFja25vd2xlZGdlICov CisJeHhzY3JlZW4oU0NSX1RDLDAsMEwsIiIpOwkvKiBEaXNwbGF5ICovCisJZG9leGl0KEdPT0Rf RVhJVCx4aXRzdGEpOworICAgIH0KKyNlbmRpZiAvKiBOT1NFUlZFUiAqLworfQorCis8Z2VuZXJp Yz5MIHsJCQkJLyogQllFIChMb2dvdXQpICovCisjaWZuZGVmIE5PU0VSVkVSCisjaWZkZWYgQ0tT WVNMT0cKKyAgICBpZiAoY2t4c3lzbG9nID49IFNZU0xHX1BSICYmIGNreGxvZ2dpbmcpCisgICAg ICBja3N5c2xvZyhTWVNMR19QUiwgMSwgInNlcnZlciIsICJCWUUiLCBOVUxMKTsKKyNlbmRpZiAv KiBDS1NZU0xPRyAqLworI2lmZGVmIElLU0RCCisgICAgaWYgKGlrZGJvcGVuKSBzbG90c3RhdGUo d2hhdCwiU0VSVkVSIEJZRSIsICIiLCAiIik7CisjZW5kaWYgLyogSUtTREIgKi8KKyAgICBpZiAo IUVOQUJMRUQoZW5fYnllKSkgeworCWVycnBrdCgoQ0hBUiAqKSJCWUUgZGlzYWJsZWQiKTsKKwlS RVNVTUU7CisgICAgfSBlbHNlIHsKKwlhY2soKTsJCQkJLyogQWNrbm93bGVkZ2UgKi8KKwlzdWNj ZXNzID0gMTsKKwltc2xlZXAoNzUwKTsJCQkvKiBHaXZlIHRoZSBBQ0sgdGltZSB0byBnZXQgb3V0 ICovCisJaWYgKGxvY2FsKQorCSAgdHRyZXMoKTsJCQkvKiBSZXNldCB0aGUgdGVybWluYWwgKi8K Kwl4eHNjcmVlbihTQ1JfVEMsMCwwTCwiIik7CS8qIERpc3BsYXkgKi8KKwlkb2NsZWFuKDEpOwkJ CS8qIENsZWFuIHVwIGZpbGVzLCBldGMgKi8KKyNpZmRlZiBERUJVRworCWRlYnVnKEYxMDAsIkMt S2VybWl0IEJZRSAtIExvZ2dpbmcgb3V0Li4uIiwiIiwwKTsKKwl6Y2xvc2UoWkRGSUxFKTsKKyNl bmRpZiAvKiBERUJVRyAqLworI2lmZGVmIElLU0QKKyNpZmRlZiBDS19MT0dJTgorCWlmIChpbnNl cnZlcikKKwkgIGNreGxvZ291dCgpOworCWVsc2UKKyNlbmRpZiAvKiBDS19MT0dJTiAqLworI2Vu ZGlmIC8qIElLU0QgKi8KKyNpZmRlZiBUQ1BTT0NLRVQKKyNpZm5kZWYgTk9MSVNURU4KKwkgIGlm IChuZXR3b3JrICYmIHRjcHNyZmQgPiAwICYmICFpbnNlcnZlcikKKwkgICAgZG9leGl0KEdPT0Rf RVhJVCx4aXRzdGEpOworCWVsc2UKKyNlbmRpZiAvKiBOT0xJU1RFTiAqLworI2VuZGlmIC8qIFRD UFNPQ0tFVCAqLworCSAgcmV0dXJuKHprc2VsZigpKTsJCS8qIFRyeSB0byBsb2cgc2VsZiBvdXQg Ki8KKyAgICB9CisjZW5kaWYgLyogTk9TRVJWRVIgKi8KK30KKworPGdlbmVyaWM+SCB7CQkJCS8q IFJFTU9URSBIRUxQICovCisjaWZkZWYgQ0tTWVNMT0cKKyAgICBpZiAoY2t4c3lzbG9nID49IFNZ U0xHX1BSICYmIGNreGxvZ2dpbmcpCisgICAgICBja3N5c2xvZyhTWVNMR19QUiwgMSwgInNlcnZl ciIsICJSRU1PVEUgSEVMUCIsIE5VTEwpOworI2VuZGlmIC8qIENLU1lTTE9HICovCisjaWZkZWYg SUtTREIKKyAgICBpZiAoaWtkYm9wZW4pIHNsb3RzdGF0ZSh3aGF0LCJSRU1PVEUgSEVMUCIsICIi LCAiIik7CisjZW5kaWYgLyogSUtTREIgKi8KKyNpZm5kZWYgTk9TRVJWRVIKKyAgICBpZiAoc25k aGxwKCkpIHsKKwlCRUdJTiBzc2luaXQ7CQkJLyogdHJ5IHRvIHNlbmQgaXQgKi8KKyAgICB9IGVs c2UgewkJCQkvKiBJZiBub3Qgb2ssICovCisJZXJycGt0KChDSEFSICopIkNhbid0IHNlbmQgaGVs cCIpOyAvKiBzZW5kIGVycm9yIG1lc3NhZ2UgaW5zdGVhZCAqLworCVJFU1VNRTsJCQkJLyogYW5k IHJldHVybiB0byBzZXJ2ZXIgY29tbWFuZCB3YWl0ICovCisgICAgfQorI2VuZGlmIC8qIE5PU0VS VkVSICovCit9CisKKzxnZW5lcmljPlIgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBS RU1PVEUgUkVOQU1FICovCisgICAgcmMgPSBzcnZfcmVuYW1lKCk7CisgICAgZGVidWcoRjEwMSwi c3J2X3JlbmFtZSIsIiIscmMpOworICAgIGlmIChyYyA+IC0xKSByZXR1cm4ocmMpOwkJLyogKHNl ZSBiZWxvdykgKi8KK30KKworPGdlbmVyaWM+SyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIFJFTU9URSBDT1BZICovCisgICAgcmMgPSBzcnZfY29weSgpOworICAgIGRlYnVnKEYxMDEs InNydl9jb3B5IiwiIixyYyk7CisgICAgaWYgKHJjID4gLTEpIHJldHVybihyYyk7CQkvKiAoc2Vl IGJlbG93KSAqLworfQorCis8Z2VuZXJpYz5TIHsJCQkJLyogUkVNT1RFIFNFVCAqLworI2lmZGVm IENLU1lTTE9HCisgICAgaWYgKGNreHN5c2xvZyA+PSBTWVNMR19QUiAmJiBja3hsb2dnaW5nKQor ICAgICAgY2tzeXNsb2coU1lTTEdfUFIsIDEsICJzZXJ2ZXIiLCAiUkVNT1RFIFNFVCIsIChjaGFy ICopc3J2Y21kKTsKKyNlbmRpZiAvKiBDS1NZU0xPRyAqLworI2lmbmRlZiBOT1NFUlZFUgorI2lm ZGVmIElLU0RCCisgICAgaWYgKGlrZGJvcGVuKSBzbG90c3RhdGUod2hhdCwiUkVNT1RFIFNFVCIs IChjaGFyICopKHNydmNtZCsxKSwgIiIpOworI2VuZGlmIC8qIElLU0RCICovCisgICAgaWYgKCFF TkFCTEVEKGVuX3NldCkpIHsKKwllcnJwa3QoKENIQVIgKikiUkVNT1RFIFNFVCBkaXNhYmxlZCIp OworCVJFU1VNRTsKKyAgICB9IGVsc2UgeworCWlmIChyZW1zZXQoKGNoYXIgKikoc3J2Y21kKzEp KSkgeyAvKiBUcnkgdG8gZG8gd2hhdCB0aGV5IGFzayAqLworCSAgICBzdWNjZXNzID0gMTsKKwkg ICAgYWNrKCk7CQkJLyogSWYgT0ssIHRoZW4gYWNrbm93bGVkZ2UgKi8KKwl9IGVsc2UJCQkJLyog T3RoZXJ3aXNlICovCisJICBlcnJwa3QoKENIQVIgKikiVW5rbm93biBSRU1PVEUgU0VUIHBhcmFt ZXRlciIpOyAvKiBnaXZlIGVycm9yIG1zZyAqLworCVJFU1VNRTsJCQkJLyogUmV0dXJuIHRvIHNl cnZlciBjb21tYW5kIHdhaXQgKi8KKyAgICB9CisjZW5kaWYgLyogTk9TRVJWRVIgKi8KK30KKwor PGdlbmVyaWM+VCB7CQkJCS8qIFJFTU9URSBUWVBFICovCisjaWZuZGVmIE5PU0VSVkVSCisgICAg Y2hhciAqbjI7CisjaWZkZWYgQ0tTWVNMT0cKKyAgICBpZiAoY2t4c3lzbG9nID49IFNZU0xHX1BS ICYmIGNreGxvZ2dpbmcpCisgICAgICBja3N5c2xvZyhTWVNMR19QUiwgMSwgInNlcnZlciIsICJS RU1PVEUgVFlQRSIsIChjaGFyICopc3J2Y21kKTsKKyNlbmRpZiAvKiBDS1NZU0xPRyAqLworICAg IGlmICghRU5BQkxFRChlbl90eXApKSB7CisJZXJycGt0KChDSEFSICopIlJFTU9URSBUWVBFIGRp c2FibGVkIik7CisJUkVTVU1FOworICAgIH0gZWxzZSB7CisjaWZkZWYgSUtTREIKKwlpZiAoaWtk Ym9wZW4pIHNsb3RzdGF0ZSh3aGF0LCJSRU1PVEUgVFlQRSIsIChjaGFyICopKHNydmNtZCsyKSwg IiIpOworI2VuZGlmIC8qIElLU0RCICovCisJaWYgKCFFTkFCTEVEKGVuX2N3ZCkpIHsJCS8qIElm IENXRCBkaXNhYmxlZCAqLworCSAgICB6c3RyaXAoKGNoYXIgKikoc3J2Y21kKzIpLCZuMik7IC8q IGFuZCB0aGV5IGluY2x1ZGVkIGEgcGF0aG5hbWUsICovCisJICAgIGlmIChzdHJjbXAoKGNoYXIg Kikoc3J2Y21kKzIpLG4yKSkgeyAvKiByZWZ1c2UuICovCisJCWVycnBrdCgoQ0hBUiAqKSJBY2Nl c3MgZGVuaWVkIik7CisJCVJFU1VNRTsJCQkvKiBSZW1lbWJlciwgdGhpcyBpcyBub3QgYSBnb3Rv ISAqLworCSAgICB9CisJfQorCWlmIChzdGF0ZSA9PSBnZW5lcmljKSB7CQkvKiBJdCdzIE9LIHRv IGdvIGFoZWFkLiAqLworCSAgICBiaW5hcnkgPSBYWUZUX1Q7CQkvKiBVc2UgdGV4dCBtb2RlIGZv ciB0aGlzLiAqLworCSAgICBpZiAoCQkJLyogKFJFU1VNRSBkaWRuJ3QgY2hhbmdlIHN0YXRlKSAq LworI2lmZGVmIENPTU1FTlQKKwkgICAgICBzeXNjbWQoVFlQQ01ELChjaGFyICopKHNydmNtZCsy KSkJLyogT2xkIHdheSAqLworI2Vsc2UKKwkgICAgICBzbmR0eXBlKChjaGFyICopKHNydmNtZCsy KSkgLyogTmV3IHdheSAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKwkJKQorCSAgICAgIEJFR0lO IHNzaW5pdDsJCS8qIE9LICovCisJICAgIGVsc2UgewkJCS8qIG5vdCBPSyAqLworCQllcnJwa3Qo KENIQVIgKikiQ2FuJ3QgdHlwZSBmaWxlIik7IC8qIGdpdmUgZXJyb3IgbWVzc2FnZSAqLworCQlS RVNVTUU7CQkJLyogd2FpdCBmb3IgbmV4dCBzZXJ2ZXIgY29tbWFuZCAqLworCSAgICB9CisJfQor ICAgIH0KKyNlbmRpZiAvKiBOT1NFUlZFUiAqLworfQorCis8Z2VuZXJpYz5tIHsJCQkJLyogUkVN T1RFIE1LRElSICovCisjaWZuZGVmIE5PU0VSVkVSCisjaWZkZWYgQ0tfTUtESVIKKyNpZmRlZiBD S1NZU0xPRworICAgIGlmIChja3hzeXNsb2cgPj0gU1lTTEdfUFIgJiYgY2t4bG9nZ2luZykKKyAg ICAgIGNrc3lzbG9nKFNZU0xHX1BSLCAxLCAic2VydmVyIiwgIlJFTU9URSBNS0RJUiIsIChjaGFy ICopc3J2Y21kKTsKKyNlbmRpZiAvKiBDS1NZU0xPRyAqLworI2lmZGVmIElLU0RCCisgICAgaWYg KGlrZGJvcGVuKSBzbG90c3RhdGUod2hhdCwiUkVNT1RFIE1LRElSIiwgKGNoYXIgKikoc3J2Y21k KzIpLCAiIik7CisjZW5kaWYgLyogSUtTREIgKi8KKyAgICBpZiAoIUVOQUJMRUQoZW5fbWtkKSkg eworCWVycnBrdCgoQ0hBUiAqKSJSRU1PVEUgTUtESVIgZGlzYWJsZWQiKTsKKwlSRVNVTUU7Cisg ICAgfSBlbHNlIGlmICghRU5BQkxFRChlbl9jd2QpKSB7CS8qIElmIENXRCBkaXNhYmxlZCAqLwor CWVycnBrdCgoQ0hBUiAqKSJEaXJlY3RvcnkgYWNjZXNzIHJlc3RyaWN0ZWQiKTsKKwlSRVNVTUU7 CQkJCS8qIFJlbWVtYmVyLCB0aGlzIGlzIG5vdCBhIGdvdG8hICovCisgICAgfQorICAgIGlmIChz dGF0ZSA9PSBnZW5lcmljKSB7CQkvKiBPSyB0byBnbyBhaGVhZC4gKi8KKwljaGFyICpwID0gTlVM TDsKKwl4ID0gY2tta2RpcigwLChjaGFyICopKHNydmNtZCsyKSwmcCwwLDEpOyAvKiBNYWtlIHRo ZSBkaXJlY3RvcnkgKi8KKwlpZiAoIXApIHAgPSAiIjsKKwlpZiAoeCA+IC0xKSB7CisJICAgIGVu Y3N0cigoQ0hBUiAqKXApOwkJLyogT0sgLSBlbmNvZGUgdGhlIG5hbWUgKi8KKwkgICAgYWNrMShk YXRhKTsJCQkvKiBTZW5kIHNob3J0LWZvcm0gcmVzcG9uc2UgKi8KKwkgICAgc3VjY2VzcyA9IDE7 CisJICAgIFJFU1VNRTsKKwl9IGVsc2UgewkJCS8qIG5vdCBPSyAqLworCSAgICBpZiAoISpwKSBw ID0gIkRpcmVjdG9yeSBjcmVhdGlvbiBmYWlsdXJlIjsKKwkgICAgZXJycGt0KChDSEFSICopcCk7 CQkvKiBnaXZlIGVycm9yIG1lc3NhZ2UgKi8KKwkgICAgUkVTVU1FOwkJCS8qIFdhaXQgZm9yIG5l eHQgc2VydmVyIGNvbW1hbmQgKi8KKwl9CisgICAgfQorI2Vsc2UKKyAgICBlcnJwa3QoKENIQVIg KikiUkVNT1RFIE1LRElSIG5vdCBhdmFpbGFibGUiKTsKKyAgICBSRVNVTUU7CisjZW5kaWYgLyog Q0tfTUtESVIgKi8KKyNlbmRpZiAvKiBOT1NFUlZFUiAqLworfQorCis8Z2VuZXJpYz5kIHsJCQkJ LyogUkVNT1RFIFJNRElSICovCisjaWZuZGVmIE5PU0VSVkVSCisjaWZkZWYgQ0tfTUtESVIKKyNp ZmRlZiBDS1NZU0xPRworICAgIGlmIChja3hzeXNsb2cgPj0gU1lTTEdfUFIgJiYgY2t4bG9nZ2lu ZykKKyAgICAgIGNrc3lzbG9nKFNZU0xHX1BSLCAxLCAic2VydmVyIiwgIlJFTU9URSBSTURJUiIs IChjaGFyICopc3J2Y21kKTsKKyNlbmRpZiAvKiBDS1NZU0xPRyAqLworI2lmZGVmIElLU0RCCisg ICAgaWYgKGlrZGJvcGVuKSBzbG90c3RhdGUod2hhdCwiUkVNT1RFIFJNRElSIiwgKGNoYXIgKiko c3J2Y21kKzIpLCAiIik7CisjZW5kaWYgLyogSUtTREIgKi8KKyAgICBpZiAoIUVOQUJMRUQoZW5f cm1kKSkgeworCWVycnBrdCgoQ0hBUiAqKSJSRU1PVEUgUk1ESVIgZGlzYWJsZWQiKTsKKwlSRVNV TUU7CisgICAgfSBlbHNlIGlmICghRU5BQkxFRChlbl9jd2QpKSB7CS8qIElmIENXRCBkaXNhYmxl ZCAqLworCWVycnBrdCgoQ0hBUiAqKSJEaXJlY3RvcnkgYWNjZXNzIHJlc3RyaWN0ZWQiKTsKKwlS RVNVTUU7CQkJCS8qIFJlbWVtYmVyLCB0aGlzIGlzIG5vdCBhIGdvdG8hICovCisgICAgfQorICAg IGlmIChzdGF0ZSA9PSBnZW5lcmljKSB7CQkvKiBPSyB0byBnbyBhaGVhZC4gKi8KKwljaGFyICpw ID0gTlVMTDsKKwl4ID0gY2tta2RpcigxLChjaGFyICopKHNydmNtZCsyKSwmcCwwLDEpOworCWlm ICghcCkgcCA9ICIiOworCWlmICh4ID4gLTEpIHsKKwkgICAgZW5jc3RyKChDSEFSICopcCk7CQkv KiBPSyAtIGVuY29kZSB0aGUgbmFtZSAqLworCSAgICBhY2sxKGRhdGEpOwkJCS8qIFNlbmQgc2hv cnQtZm9ybSByZXNwb25zZSAqLworCSAgICBzdWNjZXNzID0gMTsKKwkgICAgUkVTVU1FOworCX0g ZWxzZSB7CQkJLyogbm90IE9LICovCisJICAgIGlmICghKnApIHAgPSAiRGlyZWN0b3J5IHJlbW92 YWwgZmFpbHVyZSI7CisJICAgIGVycnBrdCgoQ0hBUiAqKXApOwkJLyogZ2l2ZSBlcnJvciBtZXNz YWdlICovCisJICAgIFJFU1VNRTsJCQkvKiBXYWl0IGZvciBuZXh0IHNlcnZlciBjb21tYW5kICov CisJfQorICAgIH0KKyNlbHNlCisgICAgZXJycGt0KChDSEFSICopIlJFTU9URSBSTURJUiBub3Qg YXZhaWxhYmxlIik7CisgICAgUkVTVU1FOworI2VuZGlmIC8qIENLX01LRElSICovCisjZW5kaWYg LyogTk9TRVJWRVIgKi8KK30KKworPGdlbmVyaWM+VSB7CQkJCS8qIFJFTU9URSBTUEFDRSAqLwor I2lmbmRlZiBOT1NFUlZFUgorI2lmZGVmIENLU1lTTE9HCisgICAgaWYgKGNreHN5c2xvZyA+PSBT WVNMR19QUiAmJiBja3hsb2dnaW5nKQorICAgICAgY2tzeXNsb2coU1lTTEdfUFIsIDEsICJzZXJ2 ZXIiLCAiUkVNT1RFIFNQQUNFIiwgKGNoYXIgKilzcnZjbWQpOworI2VuZGlmIC8qIENLU1lTTE9H ICovCisgICAgaWYgKCFFTkFCTEVEKGVuX3NwYSkpIHsKKwllcnJwa3QoKENIQVIgKikiUkVNT1RF IFNQQUNFIGRpc2FibGVkIik7CisJUkVTVU1FOworICAgIH0gZWxzZSB7CisJeCA9IHNydmNtZFsx XTsJCQkvKiBHZXQgYXJlYSB0byBjaGVjayAqLworCXggPSAoKHggPT0gTlVMKSB8fCAoeCA9PSBT UCkKKyNpZmRlZiBPUzIKKwkgICAgIHx8ICh4ID09ICchJykgfHwgKHNydmNtZFszXSA9PSAnOicp CisjZW5kaWYgLyogT1MyICovCisJICAgICApOworI2lmZGVmIElLU0RCCisJaWYgKGlrZGJvcGVu KSBzbG90c3RhdGUod2hhdCwKKwkJCSAgICAgICJSRU1PVEUgU1BBQ0UiLAorCQkJICAgICAgKHgg PyAiIiA6IChjaGFyICopc3J2Y21kKSwKKwkJCSAgICAgICIiCisJCQkgICAgICApOworI2VuZGlm IC8qIElLU0RCICovCisJaWYgKCF4ICYmICFFTkFCTEVEKGVuX2N3ZCkpIHsJLyogQ1dEIGRpc2Fi bGVkICovCisJICAgIGVycnBrdCgoQ0hBUiAqKSJBY2Nlc3MgZGVuaWVkIik7IC8qIGFuZCBub24t ZGVmYXVsdCBhcmVhIGdpdmVuLCAqLworCSAgICBSRVNVTUU7CQkJLyogcmVmdXNlLiAqLworCX0g ZWxzZSB7CisjaWZkZWYgT1MyCitfUFJPVE9UWVAoaW50IHNuZHNwYWNlLChpbnQpKTsKKwkgICAg aWYgKHNuZHNwYWNlKHggPyB0b3VwcGVyKHNydmNtZFsyXSkgOiAwKSkgeworCQlCRUdJTiBzc2lu aXQ7CQkvKiBzZW5kIHRoZSByZXBvcnQuICovCisJICAgIH0gZWxzZSB7CQkJLyogSWYgbm90IG9r LCAqLworCQllcnJwa3QoKENIQVIgKikiQ2FuJ3Qgc2VuZCBzcGFjZSIpOyAvKiBzZW5kIGVycm9y IG1lc3NhZ2UgKi8KKwkJUkVTVU1FOwkJCS8qIGFuZCByZXR1cm4gdG8gc2VydmVyIGNvbW1hbmQg d2FpdCAqLworCSAgICB9CisjZWxzZQorICAgICAgICAgICAgaWYgKG5vcHVzaCkKKyAgICAgICAg ICAgICAgeCA9IDA7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIHggPSAoeCA/IHN5 c2NtZChTUEFDTUQsIiIpIDogc3lzY21kKFNQQUNNMiwoY2hhciAqKShzcnZjbWQrMikpKTsKKwkg ICAgaWYgKHgpIHsJCQkvKiBJZiB3ZSBnb3QgdGhlIGluZm8gKi8KKwkJQkVHSU4gc3Npbml0OwkJ Lyogc2VuZCBpdCAqLworCSAgICB9IGVsc2UgewkJCS8qIG90aGVyd2lzZSAqLworCQllcnJwa3Qo KENIQVIgKikiQ2FuJ3QgY2hlY2sgc3BhY2UiKTsgLyogc2VuZCBlcnJvciBtZXNzYWdlICovCisJ CVJFU1VNRTsJCQkvKiBhbmQgYXdhaXQgbmV4dCBzZXJ2ZXIgY29tbWFuZCAqLworCSAgICB9Cisj ZW5kaWYgLyogT1MyICovCisJfQorICAgIH0KKyNlbmRpZiAvKiBOT1NFUlZFUiAqLworfQorCis8 Z2VuZXJpYz5XIHsJCQkJLyogUkVNT1RFIFdITyAqLworI2lmbmRlZiBOT1NFUlZFUgorI2lmZGVm IENLU1lTTE9HCisgICAgaWYgKGNreHN5c2xvZyA+PSBTWVNMR19QUiAmJiBja3hsb2dnaW5nKQor ICAgICAgY2tzeXNsb2coU1lTTEdfUFIsIDEsICJzZXJ2ZXIiLCAiUkVNT1RFIFdITyIsIChjaGFy ICopc3J2Y21kKTsKKyNlbmRpZiAvKiBDS1NZU0xPRyAqLworI2lmZGVmIElLU0RCCisgICAgaWYg KGlrZGJvcGVuKSBzbG90c3RhdGUod2hhdCwiUkVNT1RFIFdITyIsIChjaGFyICopKHNydmNtZCsy KSwgIiIpOworI2VuZGlmIC8qIElLU0RCICovCisgICAgaWYgKCFFTkFCTEVEKGVuX3dobykpIHsK KwllcnJwa3QoKENIQVIgKikiUkVNT1RFIFdITyBkaXNhYmxlZCIpOworCVJFU1VNRTsKKyAgICB9 IGVsc2UgeworI2lmZGVmIE9TMgorX1BST1RPVFlQKGludCBzbmR3aG8sKGNoYXIgKikpOworCSAg ICBpZiAoc25kd2hvKChjaGFyICopKHNydmNtZCsyKSkpIHsKKwkJQkVHSU4gc3Npbml0OwkJLyog dHJ5IHRvIHNlbmQgaXQgKi8KKwkgICAgfSBlbHNlIHsJCQkvKiBJZiBub3Qgb2ssICovCisJCWVy cnBrdCgoQ0hBUiAqKSJDYW4ndCBkbyB3aG8gY29tbWFuZCIpOyAvKiBzZW5kIGVycm9yIG1zZyAq LworCQlSRVNVTUU7CQkJLyogYW5kIHJldHVybiB0byBzZXJ2ZXIgY29tbWFuZCB3YWl0ICovCisJ ICAgIH0KKyNlbHNlCisJaWYgKHN5c2NtZChXSE9DTUQsKGNoYXIgKikoc3J2Y21kKzIpKSkgewor CSAgICBCRUdJTiBzc2luaXQ7CisJfSBlbHNlIHsKKwkgICAgZXJycGt0KChDSEFSICopIkNhbid0 IGRvIHdobyBjb21tYW5kIik7CisJICAgIFJFU1VNRTsKKwl9CisjZW5kaWYgLyogT1MyICovCisg ICAgfQorI2VuZGlmIC8qIE5PU0VSVkVSICovCit9CisKKzxnZW5lcmljPlYgewkJCQkvKiBWYXJp YWJsZSBxdWVyeSBvciBzZXQgKi8KKyAgICByYyA9IHNydl9xdWVyeSgpOworICAgIGRlYnVnKEYx MDEsInNydl9xdWVyeSIsIiIscmMpOworICAgIGlmIChyYyA+IC0xKSByZXR1cm4ocmMpOworfQor Cis8Z2VuZXJpYz5NIHsJCQkJLyogUkVNT1RFIE1FU1NBR0UgY29tbWFuZCAqLworI2lmbmRlZiBO T1NFUlZFUgorICAgIGRlYnVnKEYxMTAsIlJNU0ciLChjaGFyICopc3J2Y21kKzIsMCk7CisgICAg eHhzY3JlZW4oU0NSX01TLDAsMEwsKGNoYXIgKikoc3J2Y21kKzIpKTsKKyAgICBhY2soKTsKKyAg ICBSRVNVTUU7CisjZW5kaWYJLyogTk9TRVJWRVIgKi8KK30KKworPGdlbmVyaWM+cSB7CQkJCS8q IEludGVycnVwdGVkIG9yIGNvbm5lY3Rpb24gbG9zdCAqLworI2lmbmRlZiBOT1NFUlZFUgorICAg IGlmIChmYXRhbGlvKSB7CQkJLyogQ29ubmVjdGlvbiBsb3N0ICovCisjaWZkZWYgQ0tTWVNMT0cK KwlpZiAoY2t4c3lzbG9nID49IFNZU0xHX1BSICYmIGNreGxvZ2dpbmcpCisJICBja3N5c2xvZyhT WVNMR19QUiwgMSwgInNlcnZlciIsICJJbnRlcnJ1cHRlZCIsIE5VTEwpOworI2VuZGlmIC8qIENL U1lTTE9HICovCisJc3VjY2VzcyA9IDA7CisJeGl0c3RhIHw9ICh3aGF0ICYgV19LRVJNSVQpOwor CVFVSVQ7CisgICAgfSBlbHNlIGlmIChpbnRlcnJ1cHRlZCkgeworCWlmICghRU5BQkxFRChlbl9m aW4pKSB7CQkvKiBDdHJsLUMgdHlwZWQgKi8KKwkgICAgZXJycGt0KChDSEFSICopIlFVSVQgZGlz YWJsZWQiKTsKKwkgICAgUkVTVU1FOworCX0gZWxzZSB7CisjaWZkZWYgQ0tTWVNMT0cKKwkgICAg aWYgKGNreHN5c2xvZyA+PSBTWVNMR19QUiAmJiBja3hsb2dnaW5nKQorCSAgICAgIGNrc3lzbG9n KFNZU0xHX1BSLCAxLCAic2VydmVyIiwgIkludGVycnVwdGVkIiwgTlVMTCk7CisjZW5kaWYgLyog Q0tTWVNMT0cgKi8KKwkgICAgc3VjY2VzcyA9IDA7CisJICAgIHhpdHN0YSB8PSAod2hhdCAmIFdf S0VSTUlUKTsKKwkgICAgUVVJVDsKKwl9CisgICAgfSBlbHNlIHsJCQkJLyogU2hvdWxkbid0IGhh cHBlbiAqLworCWRlYnVnKEYxMDAsIlNFUlZFUiAoZ2VuZXJpYykgR09UIFVORVhQRUNURUQgJ3En IiwiIiwwKTsKKwlRVUlUOworICAgIH0KKyNlbmRpZiAvKiBOT1NFUlZFUiAqLworfQorCis8Z2Vu ZXJpYz4uIHsJCQkJLyogQW55dGhpbmcgZWxzZSBpbiB0aGlzIHN0YXRlLi4uICovCisjaWZuZGVm IE5PU0VSVkVSCisgICAgZXJycGt0KChDSEFSICopIlVuaW1wbGVtZW50ZWQgUkVNT1RFIGNvbW1h bmQiKTsgLyogQ29tcGxhaW4gKi8KKyAgICBSRVNVTUU7CQkJCS8qIGFuZCByZXR1cm4gdG8gc2Vy dmVyIGNvbW1hbmQgd2FpdCAqLworI2VuZGlmIC8qIE5PU0VSVkVSICovCit9CisKKzxyZ2VuPnEg ewkJCQkvKiBTZW50IEJZRSBhbmQgY29ubmVjdGlvbiBicm9rZW4gKi8KKyAgICBpZiAoYnllX2Fj dGl2ZSAmJiB0dGNoaygpIDwgMCkgeworCW1zbGVlcCg1MDApOworCWJ5ZV9hY3RpdmUgPSAwOwor CXR0Y2xvcygwKTsJCQkvKiBDbG9zZSBvdXIgZW5kIG9mIHRoZSBjb25uZWN0aW9uICovCisJY2xz b2YoMCk7CisJcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKyAgICB9IGVsc2UgewkJCQkvKiBPdGhlciBn ZW5lcmljIGNvbW1hbmQgKi8KKwlyZXR1cm4oc3VjY2VzcyA9IDApOwkJLyogb3IgY29ubmVjdGlv biBub3QgYnJva2VuICovCisgICAgfQorfQorCis8cmdlbj5ZIHsJCQkJLyogU2hvcnQtRm9ybSBy ZXBseSAqLworICAgIHJjID0gcmN2X3Nob3J0cmVwbHkoKTsKKyAgICBkZWJ1ZyhGMTAxLCI8cmdl bj5ZIHJjdl9zaG9ydHJlcGx5IiwiIixyYyk7CisgICAgaWYgKHJjID4gLTEpIHJldHVybihyYyk7 Cit9CisKKzxyZ2VuLHJmaWxlPkYgewkJCQkvKiBGaWxlIGhlYWRlciAqLworICAgIC8qIGNoYXIg Km4yOyAqLworICAgIGV4dGVybiBpbnQgcnNuOworICAgIGRlYnVnKEYxMDEsIjxyZmlsZT5GIHdp bmxvIDEiLCIiLHdpbmxvKTsKKyAgICB4ZmxnID0gMDsJCQkJLyogTm90IHNjcmVlbiBkYXRhICov CisgICAgaWYgKCFjenNlZW4pCisgICAgICBjYW5jZWwgPSAwOwkJCS8qIFJlc2V0IGNhbmNlbGxh dGlvbiBjb3VudGVyICovCisjaWZkZWYgQ0FMSUJSQVRFCisgICAgaWYgKGRlc3QgPT0gREVTVF9O KQorICAgICAgY2FsaWJyYXRlID0gMTsKKyNlbmRpZiAvKiBDQUxJQlJBVEUgKi8KKyAgICBpZiAo IXJjdmZpbChmaWxuYW0pKSB7CQkvKiBGaWd1cmUgb3V0IGxvY2FsIGZpbGVuYW1lICovCisJZXJy cGt0KChDSEFSICopcmZfZXJyKTsJCS8qIFRyb3VibGUgKi8KKwlSRVNVTUU7CisgICAgfSBlbHNl IHsJCQkJLyogUmVhbCBmaWxlLCBPSyB0byByZWNlaXZlICovCisJY2hhciAqIGZucDsKKwlkZWJ1 ZyhGMTExLCI8cmZpbGU+RiB3aW5sbyAyIixmc3BlYyx3aW5sbyk7CisJaWYgKGZpbGNudCA9PSAx KQkJLyogcmN2ZmlsIHNldCB0aGlzIHRvIDEgZm9yIDFzdCBmaWxlICovCisJICBjcmMxNiA9IDBM OwkJCS8qIENsZWFyIGZpbGUgQ1JDICovCisJZm5wID0gZnNwZWM7CQkJLyogVGhpcyBpcyB0aGUg ZnVsbCBwYXRoICovCisJaWYgKHNlcnZlciAmJiAhRU5BQkxFRChlbl9jd2QpIHx8IC8qIGlmIERJ U0FCTEUgQ0QgKi8KKwkgICAgIWZhY2twYXRoCQkJICAvKiBvciBGLUFDSy1QQVRIIE9GRiAqLwor CSAgICApIHsKKwkgICAgenN0cmlwKGZzcGVjLCZmbnApOwkJLyogZG9uJ3Qgc2VuZCBiYWNrIGZ1 bGwgcGF0aCAqLworCX0KKwllbmNzdHIoKENIQVIgKilmbnApOworCWlmIChmYWNrYnVnKQorCSAg YWNrKCk7CisJZWxzZQorCSAgYWNrMShkYXRhKTsJCQkvKiBTZW5kIGl0IGJhY2sgaW4gQUNLICov CisJaW5pdGF0dHIoJmlhdHRyKTsJCS8qIENsZWFyIGZpbGUgYXR0cmlidXRlIHN0cnVjdHVyZSAq LworCXN0cmVhbW9uKCk7CisJaWYgKHdpbmRvdyh3c2xvdG4pIDwgMCkgewkvKiBBbGxvY2F0ZSBu ZWdvdGlhdGVkIHdpbmRvdyBzbG90cyAqLworCSAgICBlcnJwa3QoKENIQVIgKikiQ2FuJ3Qgb3Bl biB3aW5kb3ciKTsKKwkgICAgUkVTVU1FOworCX0KKyNpZmRlZiBJS1NEQgorCWlmIChpa2Rib3Bl bikgc2xvdHN0YXRlKHdoYXQsCisJCQkgICAgICBzZXJ2ZXIgPyAiU0VSVkVSIiA6ICIiLAorCQkJ ICAgICAgIlJFQ0VJVkUiLAorCQkJICAgICAgZnNwZWMKKwkJCSAgICAgICk7CisjZW5kaWYgLyog SUtTREIgKi8KKwlCRUdJTiByYXR0cjsJCQkvKiBOb3cgZXhwZWN0IEF0dHJpYnV0ZSBwYWNrZXRz ICovCisgICAgfQorfQorCis8cmdlbixyZmlsZT5YIHsJCQkJLyogWC1wYWNrZXQgaW5zdGVhZCBv ZiBmaWxlIGhlYWRlciAqLworICAgIHhmbGcgPSAxOwkJCQkvKiBTY3JlZW4gZGF0YSAqLworICAg IGlmICghY3pzZWVuKQorICAgICAgY2FuY2VsID0gMDsJCQkvKiBSZXNldCBjYW5jZWxsYXRpb24g Y291bnRlciAqLworICAgIGFjaygpOwkJCQkvKiBBY2tub3dsZWRnZSB0aGUgWC1wYWNrZXQgKi8K KyAgICBpbml0YXR0cigmaWF0dHIpOwkJCS8qIEluaXRpYWxpemUgYXR0cmlidXRlIHN0cnVjdHVy ZSAqLworICAgIHN0cmVhbW9uKCk7CisgICAgaWYgKHdpbmRvdyh3c2xvdG4pIDwgMCkgewkJLyog YWxsb2NhdGUgbmVnb3RpYXRlZCB3aW5kb3cgc2xvdHMgKi8KKwllcnJwa3QoKENIQVIgKikiQ2Fu J3Qgb3BlbiB3aW5kb3ciKTsKKwlSRVNVTUU7CisgICAgfQorI2lmbmRlZiBOT1NQTAorICAgIGlm IChxdWVyeSkgewkJCS8qIElmIHRoaXMgaXMgdGhlIHJlc3BvbnNlIHRvICovCisJcWJ1ZnAgPSBx dWVyeWJ1ZjsJCS8qIGEgcXVlcnkgdGhhdCB3ZSBzZW50LCBpbml0aWFsaXplICovCisJcWJ1Zm4g PSAwOwkJCS8qIHRoZSByZXNwb25zZSBidWZmZXIgKi8KKwlxdWVyeWJ1ZlswXSA9IE5VTDsKKyAg ICB9CisjZW5kaWYgLyogTk9TUEwgKi8KKyAgICB3aGF0ID0gV19SRU1POwkJCS8qIHdlJ3JlIGRv aW5nIGEgUkVNT1RFIGNvbW1hbmQgKi8KKyNpZmRlZiBJS1NEQgorICAgIGlmIChpa2Rib3Blbikg c2xvdHN0YXRlKHdoYXQsCisJCQkgIHNlcnZlciA/ICJTRVJWRVIiIDogIiIsCisJCQkgICJSRUNF SVZFIiwKKwkJCSAgZnNwZWMKKwkJCSAgKTsKKyNlbmRpZiAvKiBJS1NEQiAqLworICAgIEJFR0lO IHJhdHRyOwkJCS8qIEV4cGVjdCBBdHRyaWJ1dGUgcGFja2V0cyAqLworfQorCis8cmF0dHI+QSB7 CQkJCS8qIEF0dHJpYnV0ZSBwYWNrZXQgKi8KKyAgICBpZiAoZ2F0dHIocmRhdGFwLCZpYXR0cikg PT0gMCkgewkvKiBSZWFkIGludG8gYXR0cmlidXRlIHN0cnVjdHVyZSAqLworI2lmZGVmIENLX1JF U0VORAorCWFjazEoKENIQVIgKilpYXR0ci5yZXBseS52YWwpOwkvKiBSZXBseSB3aXRoIGRhdGEg Ki8KKyNlbHNlCisJYWNrKCk7CQkJCS8qIElmIE9LLCBhY2tub3dsZWRnZSAqLworI2VuZGlmIC8q IENLX1JFU0VORCAqLworICAgIH0gZWxzZSB7CQkJCS8qIE90aGVyd2lzZSAqLworCWV4dGVybiBs b25nIGZzaXplOworCWNoYXIgKnI7CisJciA9IGdldHJlYXNvbihpYXR0ci5yZXBseS52YWwpOwor CWFjazEoKENIQVIgKilpYXR0ci5yZXBseS52YWwpOwkvKiByZWZ1c2UgdG8gYWNjZXB0IHRoZSBm aWxlICovCisJeHhzY3JlZW4oU0NSX1NULFNUX1JFRlUsMEwscik7CS8qIHJlYXNvbiAqLworI2lm ZGVmIFRMT0cKKwlpZiAodHJhbG9nICYmICF0bG9nZm10KQorCSAgZG94bG9nKHdoYXQsZmlsbmFt LGZzaXplLGJpbmFyeSwxLHIpOworI2VuZGlmIC8qIFRMT0cgKi8KKyAgICB9Cit9CisKKzxyYXR0 cj5EIHsJCQkJLyogRmlyc3QgZGF0YSBwYWNrZXQgKi8KKyAgICBkZWJ1ZyhGMTAwLCI8cmF0dHI+ IEQgZmlyc3RkYXRhIiwiIiwwKTsKKyAgICByYyA9IHJjdl9maXJzdGRhdGEoKTsKKyAgICBkZWJ1 ZyhGMTAxLCJyY3ZfZmlyc3RkYXRhIHJjIiwiIixyYyk7CisgICAgaWYgKHJjID4gLTEpIHJldHVy bihyYyk7CQkvKiAoc2VlIGJlbG93KSAqLworfQorCis8cmZpbGU+QiB7CQkJCS8qIEVPVCwgbm8g bW9yZSBmaWxlcyAqLworICAgIGFjaygpOwkJCQkvKiBBY2tub3dsZWRnZSB0aGUgQiBwYWNrZXQg Ki8KKyAgICByZW90KCk7CQkJCS8qIERvIEVPVCB0aGluZ3MgKi8KKyNpZmRlZiBDS19UTVBESVIK Ky8qIElmIHdlIHdlcmUgY2QnZCB0ZW1wb3JhcmlseSB0byBhbm90aGVyIGRldmljZSBvciBkaXJl Y3RvcnkgLi4uICovCisgICAgaWYgKGZfdG1wZGlyKSB7CisJaW50IHg7CisJeCA9IHpjaGRpcigo Y2hhciAqKSBzYXZkaXIpOwkvKiAuLi4gcmVzdG9yZSBwcmV2aW91cyBkaXJlY3RvcnkgKi8KKwlm X3RtcGRpciA9IDA7CQkJLyogYW5kIHJlbWVtYmVyIHdlIGRpZCBpdC4gKi8KKwlkZWJ1ZyhGMTEx LCJja2Nwcm8udyBCIHRtcGRpciByZXN0b3JpbmciLHNhdmRpcix4KTsKKyAgICB9CisjZW5kaWYg LyogQ0tfVE1QRElSICovCisgICAgUkVTVU1FOwkJCQkvKiBhbmQgcXVpdCAqLworfQorCis8cmRw a3Q+RCB7CQkJCS8qIEdvdCBEYXRhIHBhY2tldCAqLworICAgIGRlYnVnKEYxMDEsIjxyZHBrdD5E IGN4c2VlbiIsIiIsY3hzZWVuKTsKKyAgICBkZWJ1ZyhGMTAxLCI8cmRwa3Q+RCBjenNlZW4iLCIi LGN6c2Vlbik7CisgICAgaWYgKGN4c2VlbiB8fCBjenNlZW4gfHwgZGlzY2FyZCkgewkvKiBJZiBm aWxlIG9yIGdyb3VwIGludGVycnVwdGlvbiAqLworCUNIQVIgKiBtc2c7CisJbXNnID0gY3pzZWVu ID8gKENIQVIgKikiWiIgOiAoQ0hBUiAqKSJYIjsKKyNpZmRlZiBTVFJFQU1JTkcKKwlpZiAoc3Ry ZWFtaW5nKSB7CQkvKiBOZWVkIHRvIGNhbmNlbCAqLworCSAgICBkZWJ1ZyhGMTExLCI8cmRwa3Q+ RCBzdHJlYW1pbmcgY2FuY2VsIixtc2csY2FuY2VsKTsKKwkgICAgaWYgKGNhbmNlbCsrID09IDAp IHsJLyogT25seSBkbyB0aGlzIG9uY2UgKi8KKwkJYWNrMShtc2cpOwkJLyogUHV0ICJYIiBvciAi WiIgaW4gQUNLICovCisJICAgIH0gZWxzZSBpZiAoY3pzZWVuKSB7CisJCWVycnBrdCgoQ0hBUiAq KSJVc2VyIGNhbmNlbGVkIik7CisJCVJFU1VNRTsKKwkgICAgfSBlbHNlIHsKKwkJZmFzdGFjaygp OworCSAgICB9CisJfSBlbHNlCisjZW5kaWYgLyogU1RSRUFNSU5HICovCisJICBhY2sxKG1zZyk7 CisgICAgfSBlbHNlIHsJCQkJLyogTm8gaW50ZXJydXB0aW9uICovCisJaW50IHJjLCBxZjsKKyNp Zm5kZWYgTk9TUEwKKwlxZiA9IHF1ZXJ5OworI2Vsc2UKKwlxZiA9IDA7CisjZW5kaWYgLyogTk9T UEwgKi8KKyNpZmRlZiBDS1RVTklORworCXJjID0gKGJpbmFyeSAmJiAhcGFyaXR5KSA/CisJICBi ZGVjb2RlKHJkYXRhcCxwdXRmaWwpOgorCSAgICBkZWNvZGUocmRhdGFwLCBxZiA/IHB1dHRybSA6 IHB1dGZpbCwgMSk7CisjZWxzZQorCXJjID0gZGVjb2RlKHJkYXRhcCwgcWYgPyBwdXR0cm0gOiBw dXRmaWwsIDEpOworI2VuZGlmIC8qIENLVFVOSU5HICovCisJaWYgKHJjIDwgMCkgeworCSAgICBk aXNjYXJkID0gKGtlZXAgPT0gMCB8fCAoa2VlcCA9PSBTRVRfQVVUTyAmJiBiaW5hcnkgIT0gWFlG VF9UKSk7CisJICAgIGVycnBrdCgoQ0hBUiAqKSJFcnJvciB3cml0aW5nIGRhdGEiKTsgLyogSWYg ZmFpbHVyZSwgKi8KKwkgICAgUkVTVU1FOworCX0gZWxzZQkJCQkvKiBEYXRhIHdyaXR0ZW4gT0ss IHNlbmQgQUNLICovCisjaWZkZWYgU1RSRUFNSU5HCisJICBpZiAoc3RyZWFtaW5nKQorCSAgICBm YXN0YWNrKCk7CisJZWxzZQorI2VuZGlmIC8qIFNUUkVBTUlORyAqLworCSAgYWNrKCk7CisgICAg fQorfQorCis8cmF0dHI+WiB7CQkJCS8qIEVPRiBpbW1lZGlhdGVseSBhZnRlciBBLVBhY2tldC4g Ki8KKyAgICByZl9lcnIgPSAiQ2FuJ3QgY3JlYXRlIGZpbGUiOworICAgIHRpbWludCA9IHNfdGlt aW50OworICAgIGlmIChkaXNjYXJkKSB7CQkJLyogRGlzY2FyZGluZyBhIHJlYWwgZmlsZS4uLiAq LworCXggPSAxOworICAgIH0gZWxzZSBpZiAoeGZsZykgewkJCS8qIElmIHNjcmVlbiBkYXRhICov CisJaWYgKHJlbWZpbGUpIHsJCQkvKiByZWRpcmVjdGVkIHRvIGZpbGUgKi8KKwkgICAgaWYgKHJl bXBpcGUpCQkvKiBvciBwaXBlICovCisJICAgICAgeCA9IG9wZW5jKFpPRklMRSxyZW1kZXN0KTsg LyogUGlwZTogc3RhcnQgY29tbWFuZCAqLworCSAgICBlbHNlCisJICAgICAgeCA9IG9wZW5hKHJl bWRlc3QsJmlhdHRyKTsgLyogRmlsZTogb3BlbiB3aXRoIGF0dHJpYnV0ZXMgKi8KKwl9IGVsc2Ug ewkJCS8qIG90aGVyd2lzZSAqLworCSAgICB4ID0gb3BlbnQoJmlhdHRyKTsJCS8qICJvcGVuIiB0 aGUgc2NyZWVuICovCisJfQorI2lmZGVmIENBTElCUkFURQorICAgIH0gZWxzZSBpZiAoY2FsaWJy YXRlKSB7CQkvKiBJZiBjYWxpYnJhdGlvbiBydW4gKi8KKwl4ID0gY2tvcGVueCgmaWF0dHIpOwkJ LyogZG8gdGhpcyAqLworI2VuZGlmIC8qIENBTElCUkFURSAqLworICAgIH0gZWxzZSB7CQkJCS8q IG90aGVyd2lzZSAqLworCXggPSBvcGVuYShmaWxuYW0sJmlhdHRyKTsJLyogb3BlbiB0aGUgZmls ZSwgd2l0aCBhdHRyaWJ1dGVzICovCisJaWYgKHggPT0gLTE3KSB7CQkJLyogUkVHRVQgc2tpcHBl ZCBiZWNhdXNlIHNhbWUgc2l6ZSAqLworCSAgICBkaXNjYXJkID0gMTsKKwkgICAgcmVqZWN0aW9u ID0gMTsKKwl9CisgICAgfQorICAgIGlmICgheCB8fCByZW9mKGZpbG5hbSwgJmlhdHRyKSA8IDAp IHsgLyogQ2xvc2Ugb3V0cHV0IGZpbGUgKi8KKwllcnJwa3QoKENIQVIgKikgcmZfZXJyKTsJLyog SWYgcHJvYmxlbSwgc2VuZCBlcnJvciBtc2cgKi8KKwlSRVNVTUU7CQkJCS8qIGFuZCBxdWl0ICov CisgICAgfSBlbHNlIHsJCQkJLyogb3RoZXJ3aXNlICovCisJaWYgKHggPT0gLTE3KQorCSAgeHhz Y3JlZW4oU0NSX1NULFNUX1NLSVAsU0tQX1JFUywiIik7CisJYWNrKCk7CQkJCS8qIGFja25vd2xl ZGdlIHRoZSBFT0YgcGFja2V0ICovCisJQkVHSU4gcmZpbGU7CQkJLyogYW5kIGF3YWl0IGFub3Ro ZXIgZmlsZSAqLworICAgIH0KK30KKworPHJkcGt0PnEgeyAgCQkJCS8qIEN0cmwtQyBvciBjb25u ZWN0aW9uIGxvc3MuICovCisgICAgdGltaW50ID0gc190aW1pbnQ7CisgICAgd2luZG93KDEpOwkJ CQkvKiBTZXQgd2luZG93IHNpemUgYmFjayB0byAxLi4uICovCisgICAgY3hzZWVuID0gMTsKKyAg ICB4ID0gY2xzb2YoMSk7CQkJLyogQ2xvc2UgZmlsZSAqLworICAgIHJldHVybihzdWNjZXNzID0g MCk7CQkvKiBGYWlsZWQgKi8KK30KKworPHJkcGt0PlogewkJCQkvKiBFbmQgT2YgRmlsZSAoRU9G KSBQYWNrZXQgKi8KKy8qICB3c2xvdHMgPSAxOwkqLwkJCS8qIChkb24ndCBzZXQpIFdpbmRvdyBz aXplIGJhY2sgdG8gMSAqLworI2lmbmRlZiBDT0hFUkVOVCAvKiBDb2hlcmVudCBjb21waWxlciBi bG93cyB1cCBvbiB0aGlzIHN3aXRjaCgpIHN0YXRlbWVudC4gKi8KKyAgICB4ID0gcmVvZihmaWxu YW0sICZpYXR0cik7CQkvKiBIYW5kbGUgdGhlIEVPRiBwYWNrZXQgKi8KKyAgICBzd2l0Y2ggKHgp IHsJCQkvKiByZW9mKCkgc2V0cyB0aGUgc3VjY2VzcyBmbGFnICovCisgICAgICBjYXNlIC01OgkJ CQkvKiBIYW5kbGUgcHJvYmxlbXMgKi8KKwllcnJwa3QoKENIQVIgKikiUkVOQU1FIGZhaWxlZCIp OyAvKiBGYXRhbCAqLworCVJFU1VNRTsKKwlicmVhazsKKyAgICAgIGNhc2UgLTQ6CisJZXJycGt0 KChDSEFSICopIk1PVkUgZmFpbGVkIik7CS8qIEZhdGFsICovCisJUkVTVU1FOworCWJyZWFrOwor ICAgICAgY2FzZSAtMzoJCQkJLyogSWYgcHJvYmxlbSwgc2VuZCBlcnJvciBtc2cgKi8KKwllcnJw a3QoKENIQVIgKikiQ2FuJ3QgcHJpbnQgZmlsZSIpOyAvKiBGYXRhbCAqLworCVJFU1VNRTsKKwli cmVhazsKKyAgICAgIGNhc2UgLTI6CisJZXJycGt0KChDSEFSICopIkNhbid0IG1haWwgZmlsZSIp OyAvKiBGYXRhbCAqLworCVJFU1VNRTsKKwlicmVhazsKKyAgICAgIGNhc2UgMjoJCQkJLyogTm90 IGZhdGFsICovCisgICAgICBjYXNlIDM6CisJeHhzY3JlZW4oU0NSX0VNLDAsMEwsIlJlY2VpdmVy IGNhbid0IGRlbGV0ZSB0ZW1wIGZpbGUiKTsKKwlSRVNVTUU7CisJYnJlYWs7CisgICAgICBkZWZh dWx0OgorCWlmICh4IDwgMCkgewkJCS8qIEZhdGFsICovCisJICAgIGVycnBrdCgoQ0hBUiAqKSJD YW4ndCBjbG9zZSBmaWxlIik7CisJICAgIFJFU1VNRTsKKwl9IGVsc2UgewkJCS8qIFN1Y2Nlc3Mg Ki8KKyNpZm5kZWYgTk9TUEwKKwkgICAgaWYgKHF1ZXJ5KQkJCS8qIFF1ZXJ5IHJlcG9uc2VzIGdl bmVyYWxseSAqLworCSAgICAgIGNvbm9sbCgiIik7CQkvKiBkb24ndCBoYXZlIGxpbmUgdGVybWlu YXRvcnMgKi8KKyNlbmRpZiAvKiBOT1NQTCAqLworCSAgICBpZiAoY3pzZWVuKSB7CQkvKiBCYXRj aCBjYW5jZWxlZD8gKi8KKwkJaWYgKGNhbmNlbCsrID09IDApIHsJLyogSWYgd2UgaGF2ZW4ndCB0 cmllZCB0aGlzIHlldCAqLworCQkgICAgYWNrMSgoQ0hBUiAqKSJaIik7CS8qIFRyeSBpdCBvbmNl ICovCisJCX0gZWxzZSB7CQkvKiBPdGhlcndpc2UgKi8KKwkJICAgIGVycnBrdCgoQ0hBUiAqKSJV c2VyIGNhbmNlbGVkIik7IC8qIHF1aXRlIHdpdGggRXJyb3IgKi8KKwkJICAgIFJFU1VNRTsKKwkJ fQorCSAgICB9IGVsc2UKKwkgICAgICBhY2soKTsJCQkvKiBBY2tub3dsZWRnZSB0aGUgRU9GIHBh Y2tldCAqLworCSAgICBCRUdJTiByZmlsZTsJCS8qIGFuZCBhd2FpdCBhbm90aGVyIGZpbGUgKi8K Kwl9CisgICAgfQorI2Vsc2UKKyAgICBpZiAocmVvZihmaWxuYW0sICZpYXR0cikgPCAwKSB7CS8q IENsb3NlIHRoZSBmaWxlICovCisJZXJycGt0KChDSEFSICopIkVycm9yIGF0IGVuZCBvZiBmaWxl Iik7CisJUkVTVU1FOworICAgIH0gZWxzZSB7CQkJCS8qIHJlb2YoKSBzZXRzIHN1Y2Nlc3MgZmxh ZyAqLworCWFjaygpOworCUJFR0lOIHJmaWxlOworICAgIH0KKyNlbmRpZiAvKiBDT0hFUkVOVCAq LworfQorCis8c3Npbml0PlkgewkJCQkvKiBBQ0sgZm9yIFNlbmQtSW5pdCAqLworICAgIHNwYXIo cmRhdGFwKTsJCQkvKiBzZXQgcGFyYW1ldGVycyBmcm9tIGl0ICovCisgICAgY2FuY2VsID0gMDsK KyAgICBpZiAoYmN0ZikgeworCWJjdHUgPSAzOworCWJjdGwgPSAzOworICAgIH0gZWxzZSB7CisJ YmN0dSA9IGJjdHI7CQkJLyogc3dpdGNoIHRvIGFncmVlZC11cG9uIGJsb2NrIGNoZWNrICovCisJ YmN0bCA9IChiY3R1ID09IDQpID8gMiA6IGJjdHU7CS8qIFNldCBibG9jay1jaGVjayBsZW5ndGgg Ki8KKyAgICB9CisKKyNpZmRlZiBDS19SRVNFTkQKKyAgICBpZiAoKHNlbmRtb2RlID09IFNNX1JF U0VORCkgJiYgKCFhdGNhcHUgfHwgIXJzY2FwdSkpIHsgLyogUkVTRU5EICovCisJZXJycGt0KChD SEFSICopICJSRVNFTkQgY2FwYWJpbGl0aWVzIG5vdCBuZWdvdGlhdGVkIik7CisJUkVTVU1FOwor ICAgIH0gZWxzZSB7CisjZW5kaWYgLyogQ0tfUkVTRU5EICovCisJd2hhdCA9IFdfU0VORDsJCQkv KiBSZW1lbWJlciB3ZSdyZSBzZW5kaW5nICovCisJbGFzdHhmZXIgPSBXX1NFTkQ7CisJeCA9IHNm aWxlKHhmbGcpOwkJLyogU2VuZCBYIG9yIEYgaGVhZGVyIHBhY2tldCAqLworCWNhbmNlbCA9IDA7 CQkJLyogUmVzZXQgY2FuY2VsbGF0aW9uIGNvdW50ZXIgKi8KKwlpZiAoeCkgewkJCS8qIElmIHRo ZSBwYWNrZXQgd2FzIHNlbnQgT0sgKi8KKwkgICAgaWYgKCF4ZmxnICYmIGZpbGNudCA9PSAxKQkv KiBhbmQgaXQncyBhIHJlYWwgZmlsZSAqLworCSAgICAgIGNyYzE2ID0gMEw7CQkvKiBDbGVhciB0 aGUgZmlsZSBDUkMgKi8KKwkgICAgcmVzZXRjKCk7CQkJLyogcmVzZXQgcGVyLXRyYW5zYWN0aW9u IGNvdW50ZXJzICovCisJICAgIHJ0aW1lcigpOwkJCS8qIHJlc2V0IHRpbWVycyAqLworI2lmZGVm IEdGVElNRVIKKwkgICAgcmZ0aW1lcigpOworI2VuZGlmIC8qIEdGVElNRVIgKi8KKwkgICAgc3Ry ZWFtb24oKTsJCQkvKiB0dXJuIG9uIHN0cmVhbWluZyAqLworI2lmZGVmIElLU0RCCisJICAgIGlm IChpa2Rib3Blbikgc2xvdHN0YXRlKHdoYXQsCisJCQkJICAoc2VydmVyID8gIlNFUlZFUiIgOiAi IiksCisJCQkJICAiU0VORCIsCisJCQkJICBmaWxuYW0KKwkJCQkgICk7CisjZW5kaWYgLyogSUtT REIgKi8KKwkgICAgQkVHSU4gc3NmaWxlOwkJLyogYW5kIHN3aXRjaCB0byByZWNlaXZlLWZpbGUg c3RhdGUgKi8KKwl9IGVsc2UgewkJCS8qIG90aGVyd2lzZSBzZW5kIGVycm9yIG1zZyAmIHF1aXQg Ki8KKwkgICAgcyA9IHhmbGcgPyAiQ2FuJ3QgZXhlY3V0ZSBjb21tYW5kIiA6IChjaGFyICopZXBr dG1zZzsKKwkgICAgaWYgKCEqcykgcyA9ICJDYW4ndCBvcGVuIGZpbGUiOworCSAgICBlcnJwa3Qo KENIQVIgKilzKTsKKwkgICAgUkVTVU1FOworCX0KKyNpZmRlZiBDS19SRVNFTkQKKyAgICB9Cisj ZW5kaWYgLyogQ0tfUkVTRU5EICovCit9CisKKy8qCisgIFRoZXNlIHN0YXRlcyBhcmUgbmVjZXNz YXJ5IHRvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB3ZSBnZXQgYSBzZXJ2ZXIgY29tbWFuZAorICBw YWNrZXQgKFIsIEcsIG9yIEMpIHJlcGx5IHdpdGggYW4gUyBwYWNrZXQsIGJ1dCB0aGUgY2xpZW50 IHJldHJhbnNtaXRzIHRoZQorICBjb21tYW5kIHBhY2tldC4gIFRoZSBpbnB1dCgpIGZ1bmN0aW9u IGRvZXNuJ3QgY2F0Y2ggdGhpcyBiZWNhdXNlIHRoZSBwYWNrZXQKKyAgbnVtYmVyIGlzIHN0aWxs IHplcm8uCisqLworPHNzaW5pdD5SIHsJCQkJLyogUiBwYWNrZXQgd2FzIHJldHJhbnNtaXR0ZWQu ICovCisgICAgeHNpbml0KCk7CQkJCS8qIFJlc2VuZCBwYWNrZXQgMCAqLworfQorCis8c3Npbml0 PkcgewkJCQkvKiBTYW1lIGRlYWwgaWYgRyBwYWNrZXQgY29tZXMgYWdhaW4gKi8KKyAgICB4c2lu aXQoKTsKK30KKworLyogc2hvdWxkIHByb2JhYmx5IGFkZCBjYXNlcyBmb3IgTywgVywgViwgSCwg SiwgLi4uICovCisKKzxzc2luaXQ+QyB7CQkJCS8qIFNhbWUgZGVhbCBpZiBDIHBhY2tldCBjb21l cyBhZ2FpbiAqLworICAgIHhzaW5pdCgpOworfQorCis8c3NmaWxlPlkgewkJCQkvKiBBQ0sgZm9y IEYgb3IgWCBwYWNrZXQgKi8KKyAgICBzcnZwdHIgPSBzcnZjbWQ7CQkJLyogUG9pbnQgdG8gc3Ry aW5nIGJ1ZmZlciAqLworICAgIGRlY29kZShyZGF0YXAscHV0c3J2LDApOwkJLyogRGVjb2RlIGRh dGEgZmllbGQsIGlmIGFueSAqLworICAgIHB1dHNydihOVUwpOwkJCS8qIFRlcm1pbmF0ZSB3aXRo IG51bGwgKi8KKyAgICBmZmMgPSAwTDsJCQkJLyogUmVzZXQgZmlsZSBieXRlIGNvdW50ZXIgKi8K KyAgICBkZWJ1ZyhGMTAxLCI8c3NmaWxlPlkgY3hzZWVuIiwiIixjeHNlZW4pOworICAgIGlmICgq c3J2Y21kKSB7CQkJLyogSWYgcmVtb3RlIG5hbWUgd2FzIHJlY29yZGVkICovCisgICAgICAgIGlm IChzZW5kbW9kZSAhPSBTTV9SRVNFTkQpIHsKKwkgICAgaWYgKGZkaXNwbGEgPT0gWFlGRF9DIHx8 IGZkaXNwbGEgPT0gWFlGRF9TKQorCSAgICAgIHh4c2NyZWVuKFNDUl9BTiwwLDBMLChjaGFyICop c3J2Y21kKTsKKwkgICAgdGxvZyhGMTEwLCIgcmVtb3RlIG5hbWU6IiwoY2hhciAqKSBzcnZjbWQs MEwpOworCSAgICBtYWtlc3RyKCZwc3Jmc3BlYywoY2hhciAqKXNydmNtZCk7CisgICAgICAgIH0K KyAgICB9CisgICAgaWYgKGN4c2Vlbnx8Y3pzZWVuKSB7CQkvKiBJbnRlcnJ1cHRlZD8gKi8KKwlk ZWJ1ZyhGMTAxLCI8c3NmaWxlPlkgY2FuY2VsaW5nIiwiIiwwKTsKKwl4ID0gY2xzaWYoKTsJCQkv KiBDbG9zZSBpbnB1dCBmaWxlICovCisJc3hlb2YoMSk7CQkJLyogU2VuZCBFT0YoRCkgKi8KKwlC RUdJTiBzc2VvZjsJCQkvKiBhbmQgc3dpdGNoIHRvIEVPRiBzdGF0ZS4gKi8KKyAgICB9IGVsc2Ug aWYgKGF0Y2FwdSkgewkJLyogSWYgYXR0cmlidXRlcyBhcmUgdG8gYmUgdXNlZCAqLworCWlmIChz YXR0cih4ZmxnIHwgc3RkaW5mLCAxKSA8IDApIHsgLyogc2VuZCB0aGVtICovCisJICAgIGVycnBr dCgoQ0hBUiAqKSJDYW4ndCBzZW5kIGF0dHJpYnV0ZXMiKTsgLyogaWYgcHJvYmxlbSwgc2F5IHNv ICovCisJICAgIFJFU1VNRTsJCQkvKiBhbmQgcXVpdCAqLworCX0gZWxzZSBCRUdJTiBzc2F0dHI7 CQkvKiBpZiBvaywgc3dpdGNoIHRvIGF0dHJpYnV0ZSBzdGF0ZSAqLworICAgIH0gZWxzZSB7CQkJ CS8qIEF0dHJpYnV0ZXMgbm90IG5lZ290aWF0ZWQgKi8KKwlpZiAod2luZG93KHdzbG90bikgPCAw KSB7CS8qIE9wZW4gd2luZG93ICovCisJICAgIGVycnBrdCgoQ0hBUiAqKSJDYW4ndCBvcGVuIHdp bmRvdyIpOworCSAgICBSRVNVTUU7CisJfSBlbHNlIGlmICgoeCA9IHNkYXRhKCkpID09IC0yKSB7 IC8qIFNlbmQgZmlyc3QgZGF0YSBwYWNrZXQgZGF0YSAqLworCSAgICB3aW5kb3coMSk7CQkJLyog Q29ubmVjdGlvbiBsb3N0LCByZXNldCB3aW5kb3cgKi8KKwkgICAgeCA9IGNsc2lmKCk7CQkvKiBD bG9zZSBpbnB1dCBmaWxlICovCisJICAgIHJldHVybihzdWNjZXNzID0gMCk7CS8qIFJldHVybiBm YWlsdXJlICovCisJfSBlbHNlIGlmICh4ID09IC05KSB7CQkvKiBVc2VyIGludGVycnVwdGVkICov CisJICAgIGVycnBrdCgoQ0hBUiAqKSJVc2VyIGNhbmNlbGxlZCIpOyAvKiBTZW5kIEVycm9yIHBh Y2tldCAqLworCSAgICB3aW5kb3coMSk7CQkJLyogU2V0IHdpbmRvdyBzaXplIGJhY2sgdG8gMS4u LiAqLworCSAgICB0aW1pbnQgPSBzX3RpbWludDsJCS8qIFJlc3RvcmUgdGltZW91dCAqLworCSAg ICByZXR1cm4oc3VjY2VzcyA9IDApOwkvKiBGYWlsZWQgKi8KKwl9IGVsc2UgaWYgKHggPCAwKSB7 CQkvKiBFT0YgKGVtcHR5IGZpbGUpIG9yIGludGVycnVwdGVkICovCisJICAgIHdpbmRvdygxKTsJ CQkvKiBwdXQgd2luZG93IHNpemUgYmFjayB0byAxLCAqLworCSAgICBkZWJ1ZyhGMTAxLCI8c3Nm aWxlPlkgY3hzZWVuIiwiIixjeHNlZW4pOworCSAgICB4ID0gY2xzaWYoKTsJCS8qIElmIG5vdCBv aywgY2xvc2UgaW5wdXQgZmlsZSwgKi8KKwkgICAgaWYgKHggPCAwKQkJCS8qIHRyZWF0aW5nIGZh aWx1cmUgYXMgaW50ZXJydXB0aW9uICovCisJICAgICAgY3hzZWVuID0gMTsJCS8qIFNlbmQgRU9G IHBhY2tldCAqLworCSAgICBzZW9mKGN4c2Vlbnx8Y3pzZWVuKTsKKwkgICAgQkVHSU4gc3Nlb2Y7 CQkvKiBhbmQgc3dpdGNoIHRvIEVPRiBzdGF0ZS4gKi8KKwl9IGVsc2UgewkJCS8qIEZpcnN0IGRh dGEgc2VudCBPSyAqLworCSAgICBCRUdJTiBzc2RhdGE7CQkvKiBBbGwgb2ssIHN3aXRjaCB0byBz ZW5kLWRhdGEgc3RhdGUgKi8KKwl9CisgICAgfQorfQorCis8c3NhdHRyPlkgewkJCQkvKiBHb3Qg QUNLIHRvIEEgcGFja2V0ICovCisgICAgZmZjID0gMEw7CQkJCS8qIFJlc2V0IGZpbGUgYnl0ZSBj b3VudGVyICovCisgICAgZGVidWcoRjEwMSwiPHNzYXR0cj5ZIGN4c2VlbiIsIiIsY3hzZWVuKTsK KyAgICBpZiAoY3hzZWVufHxjenNlZW4pIHsJCS8qIEludGVycnVwdGVkPyAqLworCWRlYnVnKEYx MDEsIjxzYXR0cj5ZIGNhbmNlbGluZyIsIiIsMCk7CisJeCA9IGNsc2lmKCk7CQkJLyogQ2xvc2Ug aW5wdXQgZmlsZSAqLworCXN4ZW9mKDEpOwkJCS8qIFNlbmQgRU9GKEQpICovCisJQkVHSU4gc3Nl b2Y7CQkJLyogYW5kIHN3aXRjaCB0byBFT0Ygc3RhdGUuICovCisgICAgfSBlbHNlIGlmIChyc2F0 dHIocmRhdGFwKSA8IDApIHsJLyogV2FzIHRoZSBmaWxlIHJlZnVzZWQ/ICovCisJZGlzY2FyZCA9 IDE7CQkJLyogU2V0IHRoZSBkaXNjYXJkIGZsYWcgKi8KKwljbHNpZigpOwkJCS8qIENsb3NlIHRo ZSBmaWxlICovCisJc3hlb2YoMSk7CQkJLyogc2VuZCBFT0Ygd2l0aCAiZGlzY2FyZCIgY29kZSAq LworCUJFR0lOIHNzZW9mOwkJCS8qIHN3aXRjaCB0byBzZW5kLUVPRiBzdGF0ZSAqLworICAgIH0g ZWxzZSBpZiAoKHggPSBzYXR0cih4ZmxnIHwgc3RkaW5mLCAwKSkgPCAwKSB7IC8qIFNlbmQgbW9y ZT8gKi8KKwllcnJwa3QoKENIQVIgKikiQ2FuJ3Qgc2VuZCBhdHRyaWJ1dGVzIik7IC8qIFRyb3Vi bGUuLi4gKi8KKwlSRVNVTUU7CisgICAgfSBlbHNlIGlmICh4ID09IDApIHsJCS8qIE5vIG1vcmUg dG8gc2VuZCBzbyBub3cgdGhlIGRhdGEgKi8KKwlpZiAod2luZG93KHdzbG90bikgPCAwKSB7CS8q IEFsbG9jYXRlIG5lZ290aWF0ZWQgd2luZG93IHNsb3RzICovCisJICAgIGVycnBrdCgoQ0hBUiAq KSJDYW4ndCBvcGVuIHdpbmRvdyIpOworCSAgICBSRVNVTUU7CisJfQorCWlmICgoeCA9IHNkYXRh KCkpID09IC0yKSB7CS8qIEZpbGUgYWNjZXB0ZWQsIHNlbmQgZmlyc3QgZGF0YSAqLworCSAgICB3 aW5kb3coMSk7CQkJLyogQ29ubmVjdGlvbiBicm9rZW4gKi8KKwkgICAgeCA9IGNsc2lmKCk7CQkv KiBDbG9zZSBmaWxlICovCisJICAgIHJldHVybihzdWNjZXNzID0gMCk7CS8qIFJldHVybiBmYWls dXJlICovCisJfSBlbHNlIGlmICh4ID09IC05KSB7CQkvKiBVc2VyIGludGVycnVwdGVkICovCisJ ICAgIGVycnBrdCgoQ0hBUiAqKSJVc2VyIGNhbmNlbGxlZCIpOyAvKiBTZW5kIEVycm9yIHBhY2tl dCAqLworCSAgICB3aW5kb3coMSk7CQkJLyogU2V0IHdpbmRvdyBzaXplIGJhY2sgdG8gMS4uLiAq LworCSAgICB0aW1pbnQgPSBzX3RpbWludDsJCS8qIFJlc3RvcmUgdGltZW91dCAqLworCSAgICBy ZXR1cm4oc3VjY2VzcyA9IDApOwkvKiBGYWlsZWQgKi8KKwl9IGVsc2UgaWYgKHggPCAwKSB7CQkv KiBJZiBkYXRhIHdhcyBub3Qgc2VudCAqLworCSAgICB3aW5kb3coMSk7CQkJLyogcHV0IHdpbmRv dyBzaXplIGJhY2sgdG8gMSwgKi8KKwkgICAgZGVidWcoRjEwMSwiPHNzYXR0cj5ZIGN4c2VlbiIs IiIsY3hzZWVuKTsKKwkgICAgaWYgKGNsc2lmKCkgPCAwKQkJLyogQ2xvc2UgaW5wdXQgZmlsZSAq LworCSAgICAgIGN4c2VlbiA9IDE7CQkvKiBTZW5kIEVPRiBwYWNrZXQgKi8KKwkgICAgc2VvZihj eHNlZW58fGN6c2Vlbik7CisJICAgIEJFR0lOIHNzZW9mOwkJLyogYW5kIHN3aXRjaCB0byBFT0Yg c3RhdGUuICovCisJfSBlbHNlIHsKKwkgICAgQkVHSU4gc3NkYXRhOwkJLyogQWxsIG9rLCBzd2l0 Y2ggdG8gc2VuZC1kYXRhIHN0YXRlICovCisJfQorICAgIH0KK30KKworPHNzZGF0YT5xIHsgIAkJ CQkvKiBDdHJsLUMgb3IgY29ubmVjdGlvbiBsb3NzLiAqLworICAgIHdpbmRvdygxKTsJCQkJLyog U2V0IHdpbmRvdyBzaXplIGJhY2sgdG8gMS4uLiAqLworICAgIGN4c2VlbiA9IDE7CQkJCS8qIFRv IGluZGljYXRlIGludGVycnVwdGlvbiAqLworICAgIHggPSBjbHNpZigpOwkJCS8qIENsb3NlIGZp bGUgKi8KKyAgICByZXR1cm4oc3VjY2VzcyA9IDApOwkJLyogRmFpbGVkICovCit9CisKKzxzc2Rh dGE+WSB7CQkJCS8qIEdvdCBBQ0sgdG8gRGF0YSBwYWNrZXQgKi8KKyAgICBjYW5uZWQocmRhdGFw KTsJCQkvKiBDaGVjayBpZiBmaWxlIHRyYW5zZmVyIGNhbmNlbGxlZCAqLworICAgIGRlYnVnKEYx MTEsIjxzc2RhdGE+WSBjeHNlZW4iLHJkYXRhcCxjeHNlZW4pOworICAgIGRlYnVnKEYxMTEsIjxz c2RhdGE+WSBjenNlZW4iLHJkYXRhcCxjenNlZW4pOworICAgIGlmICgoeCA9IHNkYXRhKCkpID09 IC0yKSB7CQkvKiBUcnkgdG8gc2VuZCBuZXh0IGRhdGEgKi8KKwl3aW5kb3coMSk7CQkJLyogQ29u bmVjdGlvbiBsb3N0LCByZXNldCB3aW5kb3cgKi8KKwl4ID0gY2xzaWYoKTsJCQkvKiBDbG9zZSBm aWxlICovCisJcmV0dXJuKHN1Y2Nlc3MgPSAwKTsJCS8qIEZhaWxlZCAqLworICAgIH0gZWxzZSBp ZiAoeCA9PSAtOSkgewkJLyogVXNlciBpbnRlcnJ1cHRlZCAqLworCWVycnBrdCgoQ0hBUiAqKSJV c2VyIGNhbmNlbGxlZCIpOyAvKiBTZW5kIEVycm9yIHBhY2tldCAqLworCXdpbmRvdygxKTsJCQkv KiBTZXQgd2luZG93IHNpemUgYmFjayB0byAxLi4uICovCisJdGltaW50ID0gc190aW1pbnQ7CQkv KiBSZXN0b3JlIG9yaWdpbmFsIHRpbWVvdXQgKi8KKwlyZXR1cm4oc3VjY2VzcyA9IDApOwkJLyog RmFpbGVkICovCisgICAgfSBlbHNlIGlmICh4IDwgMCkgewkJCS8qIEVPRiAtIGZpbmlzaGVkIHNl bmRpbmcgZGF0YSAqLworCWRlYnVnKEYxMDEsIjxzc2RhdGE+WSBjeHNlZW4iLCIiLGN4c2Vlbik7 CisJd2luZG93KDEpOwkJCS8qIFNldCB3aW5kb3cgc2l6ZSBiYWNrIHRvIDEuLi4gKi8KKwlpZiAo Y2xzaWYoKSA8IDApCQkvKiBDbG9zZSBpbnB1dCBmaWxlICovCisJICBjeHNlZW4gPSAxOwkJCS8q IFNlbmQgRU9GIHBhY2tldCAqLworCWRlYnVnKEYxMDEsIjxzc2RhdGE+WSBDQUxMSU5HIFNFT0Yo KSIsIiIsY3hzZWVuKTsKKwlzZW9mKGN4c2Vlbnx8Y3pzZWVuKTsKKwlCRUdJTiBzc2VvZjsJCQkv KiBhbmQgZW50ZXIgc2VuZC1lb2Ygc3RhdGUgKi8KKyAgICB9CisgICAgLyogTk9URTogSWYgeCA9 PSAwIGl0IG1lYW5zIHdlJ3JlIGRyYWluaW5nOiBzZWUgc2RhdGEoKSEgKi8KK30KKworPHNzZW9m PlkgewkJCQkvKiBHb3QgQUNLIHRvIEVPRiAqLworICAgIGludCBnLCB4ZGlzY2FyZDsKKyAgICBj YW5uZWQocmRhdGFwKTsJCQkvKiBDaGVjayBpZiBmaWxlIHRyYW5zZmVyIGNhbmNlbGxlZCAqLwor ICAgIGRlYnVnKEYxMTEsIjxzc2VvZj5ZIGN4c2VlbiIscmRhdGFwLGN4c2Vlbik7CisgICAgZGVi dWcoRjExMSwiPHNzZW9mPlkgY3pzZWVuIixyZGF0YXAsY3pzZWVuKTsKKyAgICBkZWJ1ZyhGMTEx LCI8c3Nlb2Y+WSBkaXNjYXJkIixyZGF0YXAsZGlzY2FyZCk7CisgICAgeGRpc2NhcmQgPSBkaXNj YXJkOworICAgIGRpc2NhcmQgPSAwOworICAgIHN1Y2Nlc3MgPSAoY3hzZWVuID09IDAgJiYgY3pz ZWVuID09IDApOyAvKiBUcmFuc2ZlciBzdGF0dXMuLi4gKi8KKyAgICBkZWJ1ZyhGMTAxLCI8c3Nl b2Y+WSBzdWNjZXNzIiwiIixzdWNjZXNzKTsKKyAgICBpZiAoc3VjY2VzcyAmJiByZWplY3Rpb24g PiAwKQkgICAgLyogSWYgcmVqZWN0ZWQsIHN1Y2NlZWQgaWYgKi8KKyAgICAgIGlmIChyZWplY3Rp b24gIT0gJyMnICYmCQkgICAgLyogcmVhc29uIHdhcyBkYXRlICovCisJICByZWplY3Rpb24gIT0g MSAmJiByZWplY3Rpb24gIT0gJz8nKSAvKiBvciBuYW1lOyAqLworCXN1Y2Nlc3MgPSAwOwkJCSAg ICAvKiBmYWlsIG90aGVyd2lzZS4gKi8KKyAgICBjeHNlZW4gPSAwOwkJCQkvKiBUaGlzIGdvZXMg YmFjayB0byB6ZXJvLiAqLworICAgIGlmIChzdWNjZXNzKSB7CQkJLyogT25seSBpZiB0cmFuc2Zl ciBzdWNjZWVkZWQuLi4gKi8KKwl4eHNjcmVlbihTQ1JfU1QsU1RfT0ssMEwsIiIpOworCWlmICgh eGRpc2NhcmQpIHsKKwkgICAgbWFrZXN0cigmc2ZzcGVjLHBzZnNwZWMpOwkvKiBSZWNvcmQgZmls ZW5hbWVzIGZvciBXSEVSRSAqLworCSAgICBtYWtlc3RyKCZzcmZzcGVjLHBzcmZzcGVjKTsKKwl9 CisJaWYgKG1vdmluZykgewkJCS8qIElmIE1PVkUnaW5nICovCisJICAgIHggPSB6ZGVsZXQoZmls bmFtKTsJCS8qIFRyeSB0byBkZWxldGUgdGhlIHNvdXJjZSBmaWxlICovCisjaWZkZWYgVExPRwor CSAgICBpZiAodHJhbG9nKSB7CisJCWlmICh4ID4gLTEpIHsKKwkJICAgIHRsb2coRjExMCwiIGRl bGV0ZWQiLGZpbG5hbSwwKTsKKwkJfSBlbHNlIHsKKwkJICAgIHRsb2coRjExMCwiIGRlbGV0ZSBm YWlsZWQ6Iixja19lcnJzdHIoKSwwKTsKKwkJfQorCSAgICB9CisjZW5kaWYgLyogVExPRyAqLwor CX0gZWxzZSBpZiAoc25kX21vdmUpIHsJCS8qIE9yIG1vdmUgaXQgKi8KKwkgICAgaW50IHg7CisJ ICAgIHggPSB6cmVuYW1lKGZpbG5hbSxzbmRfbW92ZSk7CisjaWZkZWYgVExPRworCSAgICBpZiAo dHJhbG9nKSB7CisJCWlmICh4ID4gLTEpIHsKKwkJICAgIHRsb2coRjExMCwiIG1vdmVkIHRvICIs c25kX21vdmUsMCk7CisJCX0gZWxzZSB7CisJCSAgICB0bG9nKEYxMTAsIiBtb3ZlIGZhaWxlZDoi LGNrX2VycnN0cigpLDApOworCQl9CisJICAgIH0KKyNlbmRpZiAvKiBUTE9HICovCisJfSBlbHNl IGlmIChzbmRfcmVuYW1lKSB7CS8qIE9yIHJlbmFtZSBpdCAqLworCSAgICBjaGFyICpzID0gc25k X3JlbmFtZTsJLyogUmVuYW1pbmcgc3RyaW5nICovCisjaWZuZGVmIE5PU1BMCisJICAgIGludCB5 OwkJCS8qIFBhc3MgaXQgdGhydSB0aGUgZXZhbHVhdG9yICovCisJICAgIGV4dGVybiBpbnQgY21k X3F1b3Rpbmc7CS8qIGZvciBcdihmaWxlbmFtZSkgKi8KKwkgICAgaWYgKGNtZF9xdW90aW5nKSB7 CQkvKiBCdXQgb25seSBpZiBjbWRfcXVvdGluZyBpcyBvbiAqLworCQl5ID0gTUFYUlA7CisJCXMg PSAoY2hhciAqKXNydmNtZDsKKwkJenpzdHJpbmcoc25kX3JlbmFtZSwmcywmeSk7CisJCXMgPSAo Y2hhciAqKXNydmNtZDsKKwkgICAgfQorI2VuZGlmIC8qIE5PU1BMICovCisJICAgIGlmIChzKSBp ZiAoKnMpIHsKKwkJaW50IHg7CisJCXggPSB6cmVuYW1lKGZpbG5hbSxzKTsKKyNpZmRlZiBUTE9H CisJICAgIGlmICh0cmFsb2cpIHsKKwkJaWYgKHggPiAtMSkgeworCQkgICAgdGxvZyhGMTEwLCIg cmVuYW1lZCB0byIscywwKTsKKwkJfSBlbHNlIHsKKwkJICAgIHRsb2coRjExMCwiIHJlbmFtZSBm YWlsZWQ6Iixja19lcnJzdHIoKSwwKTsKKwkJfQorCSAgICB9CisjZW5kaWYgLyogVExPRyAqLwor I2lmZGVmIENPTU1FTlQKKwkJKnMgPSBOVUw7CisjZW5kaWYgLyogQ09NTUVOVCAqLworCSAgICB9 CisJfQorICAgIH0KKyAgICBpZiAoY3pzZWVuKSB7CQkJLyogQ2hlY2sgZ3JvdXAgaW50ZXJydXB0 aW9uIGZsYWcgKi8KKwlnID0gMDsJCQkJLyogTm8gbW9yZSBmaWxlcyBpZiBpbnRlcnJ1cHRlZCAq LworICAgIH0gZWxzZSB7CQkJCS8qIE90aGVyd2lzZS4uLiAqLworI2lmZGVmIENPTU1FTlQKKwkv KiBUaGlzIGNvZGUgbWFrZXMgYW55IG9wZW4gZXJyb3IgZmF0YWwgdG8gYSBmaWxlLWdyb3VwIHRy YW5zZmVyLiAqLworCWcgPSBnbmZpbGUoKTsKKwlkZWJ1ZyhGMTExLCI8c3Nlb2Y+WSBnbmZpbGUi LGZpbG5hbSxnKTsKKwlpZiAoZyA+IDApIHsJCQkvKiBBbnkgbW9yZSBmaWxlcyB0byBzZW5kPyAq LworCSAgICBpZiAoc2ZpbGUoeGZsZykpCQkvKiBZZXMsIHRyeSB0byBzZW5kIG5leHQgZmlsZSBo ZWFkZXIgKi8KKwkgICAgICBCRUdJTiBzc2ZpbGU7CQkvKiBpZiBvaywgZW50ZXIgc2VuZC1maWxl IHN0YXRlICovCisJICAgIGVsc2UgewkJCS8qIG90aGVyd2lzZSAqLworCQlzID0geGZsZyA/ICJD YW4ndCBleGVjdXRlIGNvbW1hbmQiIDogKGNoYXIgKillcGt0bXNnOworCQlpZiAoISpzKSBzID0g IkNhbid0IG9wZW4gZmlsZSI7CisJCWVycnBrdCgoQ0hBUiAqKXMpOwkvKiBzZW5kIGVycm9yIG1l c3NhZ2UgKi8KKwkJUkVTVU1FOwkJCS8qIGFuZCBxdWl0ICovCisJICAgIH0KKwl9IGVsc2UgewkJ CS8qIE5vIG5leHQgZmlsZSAqLworCSAgICB0c2VjcyA9IGd0aW1lcigpOwkJLyogZ2V0IHN0YXRp c3RpY3MgdGltZXJzICovCisjaWZkZWYgR0ZUSU1FUgorCSAgICBmcHRzZWNzID0gZ2Z0aW1lcigp OworI2VuZGlmIC8qIEdGVElNRVIgKi8KKwkgICAgc2VvdCgpOwkJCS8qIHNlbmQgRU9UIHBhY2tl dCAqLworCSAgICBCRUdJTiBzc2VvdDsJCS8qIGVudGVyIHNlbmQtZW90IHN0YXRlICovCisJfQor I2Vsc2UgIC8qIENPTU1FTlQgKi8KKwl3aGlsZSAoMSkgewkJCS8qIEtlZXAgdHJ5aW5nLi4uICov CisJICAgIGcgPSBnbmZpbGUoKTsJCS8qIEdldCBuZXh0IGZpbGUgKi8KKwkgICAgZGVidWcoRjEx MSwiPHNzZW9mPlkgZ25maWxlIixmaWxuYW0sZyk7CisJICAgIGlmIChnID09IDAgJiYgZ25mZXJy b3IgPT0gMCkgLyogTm8gbW9yZSwgc3RvcCB0cnlpbmcgKi8KKwkgICAgICBicmVhazsKKwkgICAg aWYgKGcgPiAwKSB7CQkvKiBIYXZlIG9uZSAqLworCQlpZiAoc2ZpbGUoeGZsZykpIHsJLyogVHJ5 IHRvIG9wZW4gYW5kIHNlbmQgRiBwYWNrZXQgKi8KKwkJICAgIEJFR0lOIHNzZmlsZTsJLyogSWYg T0ssIGVudGVyIHNlbmQtZmlsZSBzdGF0ZSAqLworCQkgICAgYnJlYWs7CQkvKiBhbmQgYnJlYWsg b3V0IG9mIGxvb3AuICovCisJCX0KKwkgICAgfSAvKiBPdGhlcndpc2Uga2VlcCB0cnlpbmcgdG8g Z2V0IG9uZSB3ZSBjYW4gc2VuZC4uLiAqLworCX0KKyAgICB9CisgICAgaWYgKGcgPT0gMCkgewor CWRlYnVnKEYxMDEsIjxzc2VvZj5ZIG5vIG1vcmUgZmlsZXMiLCIiLGN6c2Vlbik7CisJdHNlY3Mg PSBndGltZXIoKTsJCS8qIEdldCBzdGF0aXN0aWNzIHRpbWVycyAqLworI2lmZGVmIEdGVElNRVIK KwlmcHRzZWNzID0gZ2Z0aW1lcigpOworI2VuZGlmIC8qIEdGVElNRVIgKi8KKwlzZW90KCk7CQkJ CS8qIFNlbmQgRU9UIHBhY2tldCAqLworCUJFR0lOIHNzZW90OwkJCS8qIEVudGVyIHNlbmQtZW90 IHN0YXRlICovCisgICAgfQorI2VuZGlmIC8qIENPTU1FTlQgKi8KK30KKworPHNzZW90PlkgewkJ CQkvKiBHb3QgQUNLIHRvIEVPVCAqLworICAgIGRlYnVnKEYxMDEsInNzZW90IGp1c3RvbmUiLCIi LGp1c3RvbmUpOworICAgIFJFU1VNRTsJCQkJLyogQWxsIGRvbmUsIGp1c3QgcXVpdCAqLworfQor CitFIHsJCQkJCS8qIEdvdCBFcnJvciBwYWNrZXQsIGluIGFueSBzdGF0ZSAqLworICAgIGNoYXIg KnMgPSAiIjsKKyAgICB3aW5kb3coMSk7CQkJCS8qIENsb3NlIHdpbmRvdyAqLworICAgIHRpbWlu dCA9IHNfdGltaW50OwkJCS8qIFJlc3RvcmUgb3JpZ2luYWwgdGltZW91dCAqLworICAgIGlmICgq ZXBrdG1zZykJCQkvKiBNZXNzYWdlIGZyb20gRXJyb3IgcGFja2V0ICovCisgICAgICBzID0gKGNo YXIgKillcGt0bXNnOworICAgIGlmICghKnMpIHsJCQkJLyogSWYgbm90IHRoZXJlIHRoZW4gbWF5 YmUgaGVyZSAqLworCXMgPSAoY2hhciAqKXJkYXRhcDsKKwlja3N0cm5jcHkoKGNoYXIgKillcGt0 bXNnLChjaGFyICopcmRhdGFwLFBLVE1TR0xFTik7CisgICAgfQorICAgIGlmICghKnMpCQkJCS8q IEhvcGVmdWxseSB3ZSdsbCBuZXZlciBzZWUgdGhpcy4gKi8KKyAgICAgIHMgPSAiVW5rbm93biBl cnJvciI7CisgICAgc3VjY2VzcyA9IDA7CQkJLyogRm9yIElGIFNVQ0NFU1MvRkFJTC4gKi8KKyAg ICBkZWJ1ZyhGMTAxLCJja2Nwcm8udyBqdXN0b25lIGF0IEUgcGt0IiwiIixqdXN0b25lKTsKKwor ICAgIHN1Y2Nlc3MgPSAwOwkJCS8qIFRyYW5zZmVyIGZhaWxlZCAqLworICAgIHhmZXJzdGF0ID0g c3VjY2VzczsJCQkvKiBSZW1lbWJlciB0cmFuc2ZlciBzdGF0dXMgKi8KKyAgICBpZiAoIWVwa3Rz ZW50KSB7CisJeCA9IHF1aWV0OyBxdWlldCA9IDE7CQkvKiBDbG9zZSBmaWxlcyBzaWxlbnRseSwg Ki8KKwllcGt0cmN2ZCA9IDE7CQkJLyogUHJldmVudCBtZXNzYWdlcyBmcm9tIGNsc29mKCkgKi8K KwljbHNpZigpOworCWNsc29mKDEpOyAJCQkvKiBkaXNjYXJkaW5nIGFueSBvdXRwdXQgZmlsZS4g Ki8KKwllcm1zZyhzKTsJCQkvKiBJc3N1ZSB0aGUgbWVzc2FnZSAoY2FsbHMgc2NyZWVuKS4gKi8K KwlxdWlldCA9IHg7CQkJLyogUmVzdG9yZSBxdWlldCBzdGF0ZSAqLworICAgIH0KKyAgICB0c3Rh dHMoKTsJCQkJLyogR2V0IHN0YXRzICovCisvKgorICBJZiB3ZSBhcmUgZXhlY3V0aW5nIGNvbW1h bmRzIGZyb20gYSBjb21tYW5kIGZpbGUgb3IgbWFjcm8sIGxldCB0aGUgY29tbWFuZAorICBmaWxl IG9yIG1hY3JvIGRlY2lkZSB3aGV0aGVyIHRvIGV4aXQsIGJhc2VkIG9uIFNFVCB7IFRBS0UsIE1B Q1JPIH0gRVJST1IuCisqLworICAgIGlmICgKKyNpZm5kZWYgTk9JQ1AKKwkheGNtZHNyYyAmJgor I2VuZGlmIC8qIE5PSUNQICovCisJYmFja2dyZCAmJiAhc2VydmVyKQorICAgICAgZmF0YWwoIlBy b3RvY29sIGVycm9yIik7CisgICAgeGl0c3RhIHw9ICh3aGF0ICYgV19LRVJNSVQpOwkvKiBTYXZl IHRoaXMgZm9yIGRvZXhpdCgpLiAqLworI2lmZGVmIENLX1RNUERJUgorLyogSWYgd2Ugd2VyZSBj ZCdkIHRlbXBvcmFyaWx5IHRvIGFub3RoZXIgZGV2aWNlIG9yIGRpcmVjdG9yeSAuLi4gKi8KKyAg ICBpZiAoZl90bXBkaXIpIHsKKwlpbnQgeDsKKwl4ID0gemNoZGlyKChjaGFyICopIHNhdmRpcik7 CS8qIC4uLiByZXN0b3JlIHByZXZpb3VzIGRpcmVjdG9yeSAqLworCWZfdG1wZGlyID0gMDsJCQkv KiBhbmQgcmVtZW1iZXIgd2UgZGlkIGl0LiAqLworCWRlYnVnKEYxMTEsImNrY3Byby53IEUgdG1w ZGlyIHJlc3RvcmVkIixzYXZkaXIseCk7CisgICAgfQorI2VuZGlmIC8qIENLX1RNUERJUiAqLwor I2lmZGVmIElLU0RCCisgICAgaWYgKGlrZGJvcGVuKSBzbG90c3RhdGUod2hhdCwiRVJST1IiLCAo Y2hhciAqKWVwa3Rtc2csICIiKTsKKyNlbmRpZiAvKiBJS1NEQiAqLworICAgIFJFU1VNRTsKK30K KworcSB7IHN1Y2Nlc3MgPSAwOyBRVUlUOyB9CQkvKiBDdHJsLUMgb3IgY29ubmVjdGlvbiBsb3Nz LiAqLworCisuIHsJCQkJCS8qIEFueXRoaW5nIG5vdCBhY2NvdW50ZWQgZm9yIGFib3ZlICovCisg ICAgZXJycGt0KChDSEFSICopIlVuZXhwZWN0ZWQgcGFja2V0IHR5cGUiKTsgLyogR2l2ZSBlcnJv ciBtZXNzYWdlICovCisgICAgd2luZG93KDEpOworICAgIHhpdHN0YSB8PSAod2hhdCAmIFdfS0VS TUlUKTsJLyogU2F2ZSB0aGlzIGZvciBkb2V4aXQoKS4gKi8KKyAgICBSRVNVTUU7CQkJCS8qIGFu ZCBxdWl0ICovCit9CisKKyUlCisKKy8qCisgIEZyb20gaGVyZSBkb3duIHRvIHByb3RvKCkgYXJl IHJvdXRpbmVzIHRoYXQgd2VyZSBtb3ZlZCBvdXQgb2YgdGhlIHN0YXRlCisgIHRhYmxlIHN3aXRj aGVyIGJlY2F1c2UgdGhlIHJlc3VsdGluZyBzd2l0Y2goKSBoYWQgYmVjb21lIHRvbyBsYXJnZS4K KyAgVG8gbW92ZSB0aGUgY29udGVudHMgb2YgYSBzdGF0ZS10YWJsZSBjYXNlIHRvIGEgcm91dGlu ZToKKyAgICAxLiBBZGQgYSBwcm90b3R5cGUgdG8gdGhlIGxpc3QgYWJvdmUgdGhlIHN0YXRlIHRh YmxlIHN3aXRjaGVyLgorICAgIDIuIE1ha2UgYSByb3V0aW5lIHdpdGggYW4gYXBwcm9wcmlhdGUg bmFtZSwgcmV0dXJuaW5nIGludC4KKyAgICAzLiBNb3ZlIHRoZSBjb2RlIGludG8gaXQuCisgICAg NC4gUHV0IGEgY2FsbCB0byB0aGUgbmV3IHJvdXRpbmUgaW4gdGhlIGZvcm1lciBzcG90OgorICAg ICAgICAgcmMgPSBuYW1lX29mX3JvdXRpbmUoKTsKKyAgICAgICAgIGlmIChyYyA+IC0xKSByZXR1 cm4ocmMpOworICAgIDUuIEFkZCAicmV0dXJuKC0xKTsiIGFmdGVyIGV2ZXJ5IFJFU1VNRSwgU0VS VkUsIG9yIEJFR0lOIG1hY3JvIGFuZAorICAgICAgIGF0IHRoZSBlbmQgaWYgdGhlIGNvZGUgaXMg b3Blbi1lbmRlZC4KKyovCitzdGF0aWMgaW50CityY3ZfZmlyc3RkYXRhKCkgeworICAgIGV4dGVy biBpbnQgZGlzcG9zOworICAgIGRlYnVnKEYxMDEsInJjdl9maXJzdGRhdGEiLCIiLGRpc3Bvcyk7 CisKKyAgICBpZiAoZGlzY2FyZCkgewkJCS8qIGlmIHdlJ3JlIGRpc2NhcmRpbmcgdGhlIGZpbGUg Ki8KKwlhY2sxKChDSEFSICopIlgiKTsJCS8qIGp1c3QgYWNrIHRoZSBkYXRhIGxpa2UgdGhpcy4g Ki8KKwljYW5jZWwrKzsJCQkvKiBhbmQgY291bnQgaXQgKi8KKwlCRUdJTiByZHBrdDsJCQkvKiBh bmQgd2FpdCBmb3IgbW9yZSBkYXRhIHBhY2tldHMuICovCisJcmV0dXJuKC0xKTsKKyAgICB9IGVs c2UgewkJCQkvKiBOb3QgZGlzY2FyZGluZy4gKi8KKwlyZl9lcnIgPSAiQ2FuJ3Qgb3BlbiBmaWxl IjsKKwlpZiAoeGZsZykgewkJCS8qIElmIHNjcmVlbiBkYXRhICovCisJICAgIGlmIChyZW1maWxl KSB7CQkvKiByZWRpcmVjdGVkIHRvIGZpbGUgKi8KKwkJaWYgKHJlbXBpcGUpCQkvKiBvciBwaXBl ICovCisJCSAgeCA9IG9wZW5jKFpPRklMRSxyZW1kZXN0KTsgLyogUGlwZTogc3RhcnQgY29tbWFu ZCAqLworCQllbHNlCisJCSAgeCA9IG9wZW5hKHJlbWRlc3QsJmlhdHRyKTsgLyogRmlsZTogb3Bl biB3aXRoIGF0dHJpYnV0ZXMgKi8KKwkgICAgfSBlbHNlIHsJCQkvKiBvdGhlcndpc2UgKi8KKwkJ eCA9IG9wZW50KCZpYXR0cik7CS8qICJvcGVuIiB0aGUgc2NyZWVuICovCisJICAgIH0KKwl9IGVs c2UgewkJCS8qIG90aGVyd2lzZSAqLworI2lmZGVmIENBTElCUkFURQorCSAgICBpZiAoY2FsaWJy YXRlKSB7CQkvKiBJZiBjYWxpYnJhdGlvbiBydW4gKi8KKwkJeCA9IGNrb3BlbngoJmlhdHRyKTsJ Lyogb3BlbiBub3RoaW5nICovCisjaWZkZWYgU1RSRUFNSU5HCisJCWlmIChzdHJlYW1pbmcpCQkv KiBTdHJlYW1pbmcgKi8KKwkJICBmYXN0YWNrKCk7CQkvKiBBQ0sgd2l0aG91dCBBQ0tpbmcuICov CisJCWVsc2UKKyNlbmRpZiAvKiBTVFJFQU1JTkcgKi8KKwkJICBhY2soKTsJCS8qIFNlbmQgcmVh bCBBQ0sgKi8KKwkJQkVHSU4gcmRwa3Q7CQkvKiBQcm9jZWVkIHRvIG5leHQgc3RhdGUgKi8KKwkJ cmV0dXJuKC0xKTsKKwkgICAgfSBlbHNlCisjZW5kaWYgLyogQ0FMSUJSQVRFICovCisjaWZkZWYg VU5JWAorLyoKKyAgSW4gVU5JWCB3ZSBjYW4gcGlwZSB0aGUgZmlsZSBkYXRhIGludG8gdGhlIG1h aWwgcHJvZ3JhbSwgd2hpY2ggaXMgdG8gYmUKKyAgcHJlZmVycmVkIHRvIHdyaXRpbmcgaXQgb3V0 IHRvIGEgdGVtcCBmaWxlIGFuZCB0aGVuIG1haWxpbmcgaXQgYWZ0ZXJ3YXJkcy4KKyAgVGhpcyBk ZXBlbmRzIHJhdGhlciBoZWF2aWx5IG9uIGFsbCBVTklYZXMgaGF2aW5nIGEgbWFpbCBjb21tYW5k IHRoYXQKKyAgYWNjZXB0cyAnLXMgInN1YmplY3QiJyBvbiB0aGUgY29tbWFuZCBsaW5lLiAgTUFJ TENNRCAoZS5nLiBtYWlsLCBNYWlsLCBtYWlseCkKKyAgaXMgZGVmaW5lZCBpbiBja3VmaW8uYy4K KyovCisJICAgIGlmIChkaXNwb3MgPT0gJ00nKSB7CS8qIE1haWwuLi4gKi8KKwkJY2hhciAqczsK KwkJY2hhciAqIHRtcCA9IE5VTEw7CisJCWludCBuID0gMDsKKwkJZXh0ZXJuIGNoYXIgKk1BSUxD TUQ7CisJCXMgPSBpYXR0ci5kaXNwLnZhbCArIDE7CisJCW4gPSAoaW50KXN0cmxlbihNQUlMQ01E KSArICAgIC8qIE1haWwgY29tbWFuZCAqLworCQkgIChpbnQpc3RybGVuKHMpICsJICAgICAgLyog YWRkcmVzcyAqLworCQkgIChpbnQpc3RybGVuKG9maWxuYW0pICsgMzI7ICAvKiBzdWJqZWN0ICov CisJCWlmICh0bXAgPSAoY2hhciAqKW1hbGxvYyhuKSkgeworCQkgICAgY2ttYWt4bXNnKHRtcCxu LAorCQkJICAgICAgTUFJTENNRCwiIC1zIFwiIixvZmlsbmFtLCJcIiAiLHMsCisJCQkgICAgICBO VUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMKTsKKwkJICAgIGRlYnVnKEYxMTEsInJj dl9maXJzZGF0YSBtYWlsIix0bXAsKGludClzdHJsZW4odG1wKSk7CisJCSAgICB4ID0gb3BlbmMo Wk9GSUxFLChjaGFyICopdG1wKTsKKwkJICAgIGZyZWUodG1wKTsKKwkJfSBlbHNlCisJCSAgeCA9 IDA7CisJICAgIH0gZWxzZSBpZiAoZGlzcG9zID09ICdQJykgeyAvKiBEaXR0byBmb3IgcHJpbnQg Ki8KKwkJY2hhciAqIHRtcCA9IE5VTEw7CisJCWludCBuOworCQlleHRlcm4gY2hhciAqUFJJTlRD TUQ7CisJCW4gPSAoaW50KXN0cmxlbihQUklOVENNRCkgKyAoaW50KXN0cmxlbihpYXR0ci5kaXNw LnZhbCsxKSArIDQ7CisJCWlmICh0bXAgPSAoY2hhciAqKW1hbGxvYyhuKSkgeworCQkgICAgc3By aW50Zih0bXAsCS8qIHNhZmUgKHByZWNoZWNrZWQpICovCisJCQkgICAgIiVzICVzIiwgUFJJTlRD TUQsIGlhdHRyLmRpc3AudmFsICsgMSk7CisJCSAgICB4ID0gb3BlbmMoWk9GSUxFLChjaGFyICop dG1wKTsKKwkJICAgIGZyZWUodG1wKTsKKwkJfSBlbHNlCisJCSAgeCA9IDA7CisJICAgIH0gZWxz ZQorI2VuZGlmIC8qIFVOSVggKi8KKwkgICAgICB4ID0gb3BlbmEoZmlsbmFtLCZpYXR0cik7CS8q IG9wZW4gdGhlIGZpbGUsIHdpdGggYXR0cmlidXRlcyAqLworCX0KKwlpZiAoeCkgewkJCS8qIElm IGZpbGUgd2FzIG9wZW5lZCBvayAqLworCSAgICBpbnQgcmMsIHFmOworI2lmbmRlZiBOT1NQTAor CSAgICBxZiA9IHF1ZXJ5OworI2Vsc2UKKwkgICAgcWYgPSAwOworI2VuZGlmIC8qIE5PU1BMICov CisKKyNpZmRlZiBDS1RVTklORworCSAgICByYyA9IChiaW5hcnkgJiYgIXBhcml0eSkgPworCSAg ICAgIGJkZWNvZGUocmRhdGFwLHB1dGZpbCk6CisJICAgICAgIGRlY29kZShyZGF0YXAsIHFmID8g cHV0dHJtIDogcHV0ZmlsLCAxKTsKKyNlbHNlCisJICAgIHJjID0gZGVjb2RlKHJkYXRhcCwgcWYg PyBwdXR0cm0gOiBwdXRmaWwsIDEpOworI2VuZGlmIC8qIENLVFVOSU5HICovCisJICAgIGlmIChy YyA8IDApIHsKKwkJZXJycGt0KChDSEFSICopIkVycm9yIHdyaXRpbmcgZGF0YSIpOworCQlSRVNV TUU7CisJCXJldHVybigtMSk7CisJICAgIH0KKyNpZmRlZiBTVFJFQU1JTkcKKwkgICAgaWYgKHN0 cmVhbWluZykJCS8qIFN0cmVhbWluZyB3YXMgbmVnb3RpYXRlZCAqLworCSAgICAgIGZhc3RhY2so KTsJCS8qIEFDSyB3aXRob3V0IEFDS2luZy4gKi8KKwkgICAgZWxzZQorI2VuZGlmIC8qIFNUUkVB TUlORyAqLworCSAgICAgIGFjaygpOwkJCS8qIGFja25vd2xlZGdlIGl0ICovCisJICAgIEJFR0lO IHJkcGt0OwkJLyogYW5kIHN3aXRjaCB0byByZWNlaXZlLWRhdGEgc3RhdGUgKi8KKwkgICAgcmV0 dXJuKC0xKTsKKwl9IGVsc2UgewkJCS8qIG90aGVyd2lzZSAqLworCSAgICBlcnJwa3QoKENIQVIg KikgcmZfZXJyKTsJLyogc2VuZCBlcnJvciBwYWNrZXQgKi8KKyAgICAJICAgIFJFU1VNRTsJCQkv KiBhbmQgcXVpdC4gKi8KKwkgICAgcmV0dXJuKC0xKTsKKwl9CisgICAgfQorfQorCitzdGF0aWMg aW50CityY3Zfc2hvcnRyZXBseSgpIHsKKyNpZmRlZiBQS1RaRVJPSEFDSworICAgIHN1Y2Nlc3Mg PSAwOworICAgIGRlYnVnKEYxMTEsInJjdl9zaG9ydHJlcGx5IixyZGF0YXAsaXBrdGxlbik7Cisg ICAgaWYgKGlwa3RhY2tbMF0gJiYgIXN0cm5jbXAoaXBrdGFjaywoY2hhciAqKXJkYXRhcCxpcGt0 bGVuKSkgeworCS8qIE5vIGl0J3MgdGhlIEFDSyB0byB0aGUgSSBwYWNrZXQgYWdhaW4gKi8KKwl4 ID0gc2NtZCh2Y21kLChDSEFSICopY21hcmcpOwkvKiBTbyBzZW5kIHRoZSBSRU1PVEUgY29tbWFu ZCBhZ2FpbiAqLworCS8qIE1heWJlIHRoaXMgc2hvdWxkIGJlIHJlc2VuZCgpICovCisJZGVidWco RjExMCwiSVBLVFpFUk9IQUNLIixpcGt0YWNrLHgpOworCWlmICh4IDwgMCkgeworCSAgICBlcnJw a3QoKENIQVIgKilzcmltc2cpOworCSAgICBSRVNVTUU7CisJICAgIHJldHVybigtMSk7CisJfQor ICAgIH0gZWxzZSB7CisJaXBrdGFja1swXSA9IE5VTDsKKyNlbmRpZiAvKiBQS1RaRVJPSEFDSyAq LworCXVyc2VydmVyID0gMTsKKyNpZm5kZWYgTk9TRVJWRVIKKyNpZm5kZWYgTk9TUEwKKwlpZiAo cXVlcnkpIHsJCQkvKiBJZiB0byBxdWVyeSwgKi8KKwkgICAgcWJ1ZnAgPSBxdWVyeWJ1ZjsJCS8q ICBpbml0aWFsaXplIHF1ZXJ5IHJlc3BvbnNlIGJ1ZmZlciAqLworCSAgICBxYnVmbiA9IDA7CisJ ICAgIHF1ZXJ5YnVmWzBdID0gTlVMOworCX0KKyNlbmRpZiAvKiBOT1NQTCAqLworCXggPSAxOwor CWlmIChyZW1maWxlKSB7CQkJLyogUmVzcG9uc2UgcmVkaXJlY3RlZCB0byBmaWxlICovCisJICAg IHJmX2VyciA9ICJDYW4ndCBvcGVuIGZpbGUiOworCSAgICBpZiAocmVtcGlwZSkJCS8qIG9yIHBp cGUgKi8KKwkgICAgICB4ID0KKyNpZm5kZWYgTk9QVVNICisJCXp4Y21kKFpPRklMRSxyZW1kZXN0 KQkvKiBQaXBlOiBTdGFydCBjb21tYW5kICovCisjZWxzZQorCQkwCisjZW5kaWYgLyogTk9QVVNI ICovCisJCTsKKwkgICAgZWxzZQorCSAgICAgIHggPSBvcGVuYShyZW1kZXN0LCZpYXR0cik7IC8q IEZpbGU6IE9wZW4gd2l0aCBhdHRyaWJ1dGVzICovCisJICAgIGRlYnVnKEYxMTEsInJjdl9zaG9y dHJlcGx5IHJlbWZpbGUiLHJlbWRlc3QseCk7CisJfSBlbHNlIHsKKwkgICAgeCA9IG9wZW50KCZp YXR0cik7CQkvKiAib3BlbiIgdGhlIHNjcmVlbiAqLworCX0KKwlpZiAoeCkgewkJCS8qIElmIGZp bGUgd2FzIG9wZW5lZCBvayAqLworCSAgICBpZiAoZGVjb2RlKHJkYXRhcCwKKyNpZm5kZWYgTk9T UEwKKwkJICAgICAgIChxdWVyeSB8fCAhcmVtZmlsZSkgPyBwdXR0cm0gOgorI2Vsc2UKKwkJICAg ICAgICFyZW1maWxlID8gcHV0dHJtIDoKKyNlbmRpZiAvKiBOT1NQTCAqLworCQkgICAgICAgenB1 dGZpbCwgMSkgPCAwKSB7IC8qIE5vdGU6IHpwdXRmaWwsIG5vdCBwdXRmaWwuICovCisJCWVycnBr dCgoQ0hBUiAqKSJFcnJvciB3cml0aW5nIGRhdGEiKTsKKwkJUkVTVU1FOworCQlyZXR1cm4oLTEp OworCSAgICB9IGVsc2UgeworCQlpZiAocmRhdGFwKQkJLyogSWYgd2UgaGFkIGRhdGEgKi8KKwkJ ICBpZiAoKnJkYXRhcCkJCS8qIGFkZCBhIGxpbmUgdGVybWluYXRvciAqLworCQkgICAgaWYgKHJl bWZpbGUpIHsJLyogdG8gZmlsZSAqLworCQkJenNvdXRsKFpPRklMRSwiIik7CisJCSAgICB9IGVs c2UgewkJLyogb3IgdG8gc2NyZWVuLiAqLworI2lmbmRlZiBOT0lDUAorCQkJaWYgKCFxdWVyeSB8 fCAheGNtZHNyYykKKyNlbmRpZiAvKiBOT0lDUCAqLworCQkJICBpZiAoIShxdWlldCAmJiByY2Rh Y3RpdmUpKQorCQkJICAgIGNvbm9sbCgiIik7CisJCSAgICB9CisJCWlmIChieWVfYWN0aXZlICYm IG5ldHdvcmspIHsgLyogSSBzZW50IEJZRSBvciBSRU1PVEUgTE9HT1VUICovCisJCSAgICBtc2xl ZXAoNTAwKTsJLyogY29tbWFuZCBhbmQgZ290IHRoZSBBQ0suLi4gKi8KKwkJICAgIGJ5ZV9hY3Rp dmUgPSAwOworCQkgICAgdHRjbG9zKDApOworCQl9CisJCWNsc29mKDApOworCQlpZiAoIWVwa3Rz ZW50ICYmICFlcGt0cmN2ZCkgLyogSWYgbm8gZXJyb3IgcGFja2V0Li4uICovCisJCSAgc3VjY2Vz cyA9IDE7CQkvKiBzdWNjZXNzLiAqLworCQlSRVNVTUU7CisJCXJldHVybigtMSk7CisJICAgIH0K Kwl9IGVsc2UgewkJCS8qIEZpbGUgbm90IG9wZW5lZCBPSyAqLworCSAgICBlcnJwa3QoKENIQVIg KikgcmZfZXJyKTsJLyogc2VuZCBlcnJvciBtZXNzYWdlICovCisJICAgIFJFU1VNRTsJCQkvKiBh bmQgcXVpdC4gKi8KKwkgICAgcmV0dXJuKC0xKTsKKwl9CisjZW5kaWYgLyogTk9TRVJWRVIgKi8K KyNpZmRlZiBQS1RaRVJPSEFDSworICAgIH0KKyNlbmRpZiAvKiBQS1RaRVJPSEFDSyAqLworICAg IGRlYnVnKEYxMDEsInJjdl9zaG9ydHJlcGx5IGZhbGx0aHJ1IiwiIixzdWNjZXNzKTsKKyAgICBy ZXR1cm4oLTEpOworfQorCisKK3N0YXRpYyBpbnQKK3Nydl9xdWVyeSgpIHsKKyNpZm5kZWYgTk9T RVJWRVIKKyNpZm5kZWYgTk9TUEwKKyAgICBjaGFyIGM7CisjaWZkZWYgQ0tTWVNMT0cKKyAgICBp ZiAoY2t4c3lzbG9nID49IFNZU0xHX1BSICYmIGNreGxvZ2dpbmcpCisgICAgICBja3N5c2xvZyhT WVNMR19QUiwgMSwgInNlcnZlciIsICJSRU1PVEUgUVVFUlkiLCAoY2hhciAqKXNydmNtZCk7Cisj ZW5kaWYgLyogQ0tTWVNMT0cgKi8KKyNpZmRlZiBJS1NEQgorICAgIGlmIChpa2Rib3Blbikgc2xv dHN0YXRlKHdoYXQsIlJFTU9URSBRVUVSWSIsIChjaGFyICopKHNydmNtZCsyKSwgIiIpOworI2Vu ZGlmIC8qIElLU0RCICovCisgICAgYyA9ICooc3J2Y21kKzIpOwkJCS8qIFEgPSBRdWVyeSwgUyA9 IFNldCAqLworICAgIGlmIChjID09ICdRJykgewkJCS8qIFF1ZXJ5ICovCisJaWYgKCFFTkFCTEVE KGVuX3F1ZSkpIHsgLyogU2VjdXJpdHkgKi8KKwkgICAgZXJycGt0KChDSEFSICopIlJFTU9URSBR VUVSWSBkaXNhYmxlZCIpOworCSAgICBSRVNVTUU7CisJICAgIHJldHVybigtMSk7CisJfSBlbHNl IHsJCQkvKiBRdWVyeSBhbGxvd2VkICovCisJICAgIGludCBuOyBjaGFyICpwLCAqcTsKKwkgICAg cWJ1ZnAgPSBxdWVyeWJ1ZjsJCS8qIFdpcGUgb3V0IG9sZCBzdHVmZiAqLworCSAgICBxYnVmbiA9 IDA7CisJICAgIHF1ZXJ5YnVmWzBdID0gTlVMOworCSAgICBwID0gKGNoYXIgKikgc3J2Y21kICsg MzsJLyogUG9pbnRlciBmb3IgbWFraW5nIHdyYXBwZXIgKi8KKwkgICAgbiA9IHN0cmxlbigoY2hh ciAqKXNydmNtZCk7CS8qIFBvc2l0aW9uIG9mIGVuZCAqLworCSAgICBjID0gKihzcnZjbWQrNCk7 CQkvKiBXaGljaCB0eXBlIG9mIHZhcmlhYmxlICovCisKKwkgICAgaWYgKCooc3J2Y21kKzYpID09 IENNRFEpIHsJLyogU3RhcnRzIHdpdGggY29tbWFuZCBxdW90ZT8gKi8KKwkJcCA9IChjaGFyICop IHNydmNtZCArIDY7IC8qIFRha2UgaXQgbGl0ZXJhbGx5ICovCisJCWlmICgqcCA9PSBDTURRKSBw Kys7CisJICAgIH0gZWxzZSB7CQkJLyogVGhleSBwbGF5ZWQgYnkgdGhlIHJ1bGVzICovCisJCWlm IChjID09ICdLJykgewkJLyogS2VybWl0IHZhcmlhYmxlICovCisJCSAgICBpbnQgazsKKwkJICAg IGsgPSAoaW50KSBzdHJsZW4ocCk7CisJCSAgICBpZiAoayA+IDAgJiYgcFtrLTFdID09ICcpJykg eworCQkJcCA9IChjaGFyICopKHNydmNtZCArIDQpOworCQkJKihzcnZjbWQrNCkgPSBDTURROwor CQkJKihzcnZjbWQrNSkgPSAnZic7IC8qIEZ1bmN0aW9uLCBzbyBtYWtlIGl0IFxmLi4uKCkgKi8K KwkJICAgIH0gZWxzZSB7CisJCQkqKHNydmNtZCszKSA9IENNRFE7IC8qIFN0dWZmIHdyYXBwaW5n IGludG8gYnVmZmVyICovCisJCQkqKHNydmNtZCs0KSA9ICd2JzsgIC8qIFZhcmlhYmxlLCBzbyBt YWtlIGl0IFx2KC4uLikgKi8KKwkJCSooc3J2Y21kKzUpID0gJygnOyAgLyogYXJvdW5kIHZhcmlh YmxlIG5hbWUgKi8KKwkJCSooc3J2Y21kK24pID0gJyknOworCQkJKihzcnZjbWQrbisxKSA9IE5V TDsKKwkJICAgIH0KKwkJfSBlbHNlIHsKKwkJICAgICooc3J2Y21kKzMpID0gQ01EUTsgLyogU3R1 ZmYgd3JhcHBpbmcgaW50byBidWZmZXIgKi8KKwkJICAgICooc3J2Y21kKzQpID0gJ3YnOyAvKiAg VmFyaWFibGUsIHNvIG1ha2UgaXQgXHYoLi4uKSAqLworCQkgICAgKihzcnZjbWQrNSkgPSAnKCc7 CS8qIGFyb3VuZCB2YXJpYWJsZSBuYW1lICovCisJCSAgICAqKHNydmNtZCtuKSA9ICcpJzsKKwkJ ICAgICooc3J2Y21kK24rMSkgPSBOVUw7CisJCSAgICBpZiAoYyA9PSAnUycpIHsJLyogU3lzdGVt IHZhcmlhYmxlICovCisJCQkqKHNydmNtZCs0KSA9ICckJzsgLyogIHNvIGl0J3MgXCQoLi4uKSAq LworCQkgICAgfSBlbHNlIGlmIChjID09ICdHJykgeyAvKiBOb24tXCBHbG9iYWwgdmFyaWFibGUg Ki8KKwkJCSooc3J2Y21kKzQpID0gJ20nOyAvKiAgc28gd3JhcCBpdCBpbiBcbSguLi4pICovCisJ CSAgICB9CisJCX0KKwkgICAgfQkJCQkvKiBOb3cgZXZhbHVhdGUgaXQgKi8KKwkgICAgbiA9IFFC VUZMOwkJCS8qIE1heCBsZW5ndGggKi8KKwkgICAgcSA9IHF1ZXJ5YnVmOwkJLyogV2hlcmUgdG8g cHV0IGl0ICovCisJICAgIGlmICh6enN0cmluZyhwLCZxLCZuKSA8IDApIHsKKwkJZXJycGt0KChu ID4gMCkgPyAoQ0hBUiAqKSJDYW4ndCBnZXQgdmFsdWUiCisJCSAgICAgICAgICAgICAgIDogKENI QVIgKikiVmFsdWUgdG9vIGxvbmciCisJCSAgICAgICApOworCQlSRVNVTUU7CisJCXJldHVybigt MSk7CisJICAgIH0gZWxzZSB7CisJCWlmIChlbmNzdHIoKENIQVIgKilxdWVyeWJ1ZikgPiAtMSkg eyAvKiBFbmNvZGUgaXQgKi8KKwkJICAgIGFjazEoZGF0YSk7CQkvKiBJZiBpdCBmaXRzLCBzZW5k IGl0IGJhY2sgaW4gQUNLICovCisJCSAgICBzdWNjZXNzID0gMTsKKwkJICAgIFJFU1VNRTsKKwkJ ICAgIHJldHVybigtMSk7CisJCX0gZWxzZSBpZiAoc25kc3RyaW5nKHF1ZXJ5YnVmKSkgeyAvKiBM b25nIGZvcm0gcmVzcG9uc2UgKi8KKwkJICAgIEJFR0lOIHNzaW5pdDsKKwkJICAgIHJldHVybigt MSk7CisJCX0gZWxzZSB7CQkvKiBzbmRobHAoKSBmYWlscyAqLworCQkgICAgZXJycGt0KChDSEFS ICopIkNhbid0IHNlbmQgdmFsdWUiKTsKKwkJICAgIFJFU1VNRTsKKwkJICAgIHJldHVybigtMSk7 CisJCX0KKwkgICAgfQorCX0KKyAgICB9IGVsc2UgaWYgKGMgPT0gJ1MnKSB7CQkvKiBTZXQgKGFz c2lnbikgKi8KKwlpZiAoIUVOQUJMRUQoZW5fYXNnKSkgewkJLyogU2VjdXJpdHkgKi8KKwkgICAg ZXJycGt0KChDSEFSICopIlJFTU9URSBBU1NJR04gZGlzYWJsZWQiKTsKKwkgICAgUkVTVU1FOwor CSAgICByZXR1cm4oLTEpOworCX0gZWxzZSB7CQkJLyogT0sgKi8KKwkgICAgaW50IG47CisJICAg IG4gPSB4dW5jaGFyKCooc3J2Y21kKzMpKTsJLyogTGVuZ3RoIG9mIG5hbWUgKi8KKwkgICAgbiA9 IDMgKyBuICsgMTsJCS8qIFBvc2l0aW9uIG9mIGxlbmd0aCBvZiB2YWx1ZSAqLworCSAgICAqKHNy dmNtZCtuKSA9IE5VTDsJCS8qIERvbid0IG5lZWQgaXQgKi8KKwkgICAgaWYgKGFkZG1hYygoY2hh ciAqKShzcnZjbWQrNCksKGNoYXIgKikoc3J2Y21kK24rMSkpIDwgMCkKKwkgICAgICBlcnJwa3Qo KENIQVIgKikiUkVNT1RFIEFTU0lHTiBmYWlsZWQiKTsKKwkgICAgZWxzZSB7CisJCWFjaygpOwor CQlzdWNjZXNzID0gMTsKKwkgICAgfQorCSAgICBSRVNVTUU7CisJICAgIHJldHVybigtMSk7CisJ fQorICAgIH0gZWxzZSB7CisJZXJycGt0KChDSEFSICopIkJhZGx5IGZvcm1lZCBzZXJ2ZXIgY29t bWFuZCIpOworCVJFU1VNRTsKKwlyZXR1cm4oLTEpOworICAgIH0KKyNlbHNlCisgICAgZXJycGt0 KChDSEFSICopIlZhcmlhYmxlIHF1ZXJ5L3NldCBub3QgYXZhaWxhYmxlIik7CisgICAgUkVTVU1F OworICAgIHJldHVybigtMSk7CisjZW5kaWYgLyogTk9TUEwgKi8KKyNlbmRpZiAvKiBOT1NFUlZF UiAqLworfQorCitzdGF0aWMgaW50CitzcnZfY29weSgpIHsKKyNpZm5kZWYgTk9TRVJWRVIKKyNp ZmRlZiBDS1NZU0xPRworICAgIGlmIChja3hzeXNsb2cgPj0gU1lTTEdfUFIgJiYgY2t4bG9nZ2lu ZykKKyAgICAgIGNrc3lzbG9nKFNZU0xHX1BSLCAxLCAic2VydmVyIiwgIlJFTU9URSBDT1BZIiwg KGNoYXIgKilzcnZjbWQpOworI2VuZGlmIC8qIENLU1lTTE9HICovCisjaWZkZWYgWkNPUFkKKyAg ICBpZiAoIUVOQUJMRUQoZW5fY3B5KSkgeworCWVycnBrdCgoQ0hBUiAqKSJSRU1PVEUgQ09QWSBk aXNhYmxlZCIpOworCVJFU1VNRTsKKwlyZXR1cm4oLTEpOworICAgIH0gZWxzZSB7CisJY2hhciAq c3RyMSwgKnN0cjIsIGYxWzI1Nl0sIGYyWzI1Nl07CisJaW50ICBsZW4xLCBsZW4yOworICAgICAg ICBsZW4xID0geHVuY2hhcihzcnZjbWRbMV0pOwkvKiBTZXBhcmF0ZSB0aGUgcGFyYW1ldGVycyAq LworICAgICAgICBsZW4yID0geHVuY2hhcihzcnZjbWRbMitsZW4xXSk7CisgICAgICAgIHN0cm5j cHkoZjEsKGNoYXIgKikoc3J2Y21kKzIpLGxlbjEpOworICAgICAgICBmMVtsZW4xXSA9IE5VTDsK KyAgICAgICAgc3RybmNweShmMiwoY2hhciAqKShzcnZjbWQrMytsZW4xKSxsZW4yKTsKKyAgICAg ICAgZjJbbGVuMl0gPSBOVUw7CisjaWZkZWYgSUtTREIKKwlpZiAoaWtkYm9wZW4pIHNsb3RzdGF0 ZSh3aGF0LCJSRU1PVEUgQ09QWSIsIGYxLCBmMik7CisjZW5kaWYgLyogSUtTREIgKi8KKwlpZiAo IUVOQUJMRUQoZW5fY3dkKSkgewkJLyogSWYgQ1dEIGlzIGRpc2FibGVkICovCisJICAgIHpzdHJp cChmMSwmc3RyMSk7CQkvKiBhbmQgdGhleSBpbmNsdWRlZCBhIHBhdGhuYW1lLCAqLworICAgICAg ICAgICAgenN0cmlwKGYyLCZzdHIyKTsKKwkgICAgaWYgKHN0cmNtcChmMSxzdHIxKSB8fCBzdHJj bXAoZjIsc3RyMikpIHsgLyogUmVmdXNlLiAqLworCQllcnJwa3QoKENIQVIgKikiQWNjZXNzIGRl bmllZCIpOworCQlSRVNVTUU7CQkJLyogUmVtZW1iZXIsIHRoaXMgaXMgbm90IGEgZ290byEgKi8K KwkJcmV0dXJuKC0xKTsKKwkgICAgfQorCX0KKwlpZiAoc3RhdGUgPT0gZ2VuZXJpYykgewkJLyog SXQncyBPSyB0byBnbyBhaGVhZC4gKi8KKyAgICAgICAgICAgIGlmICh6Y29weShmMSxmMikpIHsJ CS8qIFRyeSAqLworCQllcnJwa3QoKENIQVIgKikiQ2FuJ3QgY29weSBmaWxlIik7IC8qIGdpdmUg ZXJyb3IgbWVzc2FnZSAqLworCSAgICB9IGVsc2UgeworCQlzdWNjZXNzID0gMTsKKwkJYWNrKCk7 CisJICAgIH0KKyAgICAgICAgICAgIFJFU1VNRTsJCQkvKiB3YWl0IGZvciBuZXh0IHNlcnZlciBj b21tYW5kICovCisJICAgIHJldHVybigtMSk7CisJfQorICAgIH0KKyAgICByZXR1cm4oLTEpOwor I2Vsc2UgLyogbm8gWkNPUFkgKi8KKyAgICBlcnJwa3QoKENIQVIgKikiUkVNT1RFIENPUFkgbm90 IGF2YWlsYWJsZSIpOyAvKiBnaXZlIGVycm9yIG1lc3NhZ2UgKi8KKyAgICBSRVNVTUU7CQkJCS8q IHdhaXQgZm9yIG5leHQgc2VydmVyIGNvbW1hbmQgKi8KKyAgICByZXR1cm4oLTEpOworI2VuZGlm IC8qIFpDT1BZICovCisjZW5kaWYgLyogTk9TRVJWRVIgKi8KK30KKworc3RhdGljIGludAorc3J2 X3JlbmFtZSgpIHsKKyNpZm5kZWYgTk9TRVJWRVIKKyNpZmRlZiBDS1NZU0xPRworICAgIGlmIChj a3hzeXNsb2cgPj0gU1lTTEdfUFIgJiYgY2t4bG9nZ2luZykKKyAgICAgIGNrc3lzbG9nKFNZU0xH X1BSLCAxLCAic2VydmVyIiwgIlJFTU9URSBSRU5BTUUiLCAoY2hhciAqKXNydmNtZCk7CisjZW5k aWYgLyogQ0tTWVNMT0cgKi8KKyNpZmRlZiBaUkVOQU1FCisgICAgaWYgKCFFTkFCTEVEKGVuX3Jl bikpIHsKKwllcnJwa3QoKENIQVIgKikiUkVNT1RFIFJFTkFNRSBkaXNhYmxlZCIpOworCVJFU1VN RTsKKwlyZXR1cm4oLTEpOworICAgIH0gZWxzZSB7CQkJCS8qIFJFTkFNRSBpcyBlbmFibGVkICov CisJY2hhciAqc3RyMSwgKnN0cjIsIGYxWzI1Nl0sIGYyWzI1Nl07CisJaW50IGxlbjEsIGxlbjI7 CisJbGVuMSA9IHh1bmNoYXIoc3J2Y21kWzFdKTsJLyogU2VwYXJhdGUgdGhlIHBhcmFtZXRlcnMg Ki8KKwlsZW4yID0geHVuY2hhcihzcnZjbWRbMitsZW4xXSk7CisJc3RybmNweShmMSwoY2hhciAq KShzcnZjbWQrMiksbGVuMSk7CisJZjFbbGVuMV0gPSBOVUw7CisJc3RybmNweShmMiwoY2hhciAq KShzcnZjbWQrMytsZW4xKSxsZW4yKTsKKwlmMltsZW4yXSA9IE5VTDsKKwlsZW4yID0geHVuY2hh cihzcnZjbWRbMitsZW4xXSk7CisJc3RybmNweShmMSwoY2hhciAqKShzcnZjbWQrMiksbGVuMSk7 CisJZjFbbGVuMV0gPSBOVUw7CisJc3RybmNweShmMiwoY2hhciAqKShzcnZjbWQrMytsZW4xKSxs ZW4yKTsKKwlmMltsZW4yXSA9IE5VTDsKKyNpZmRlZiBJS1NEQgorCWlmIChpa2Rib3Blbikgc2xv dHN0YXRlKHdoYXQsIlJFTU9URSBSRU5BTUUiLCBmMSwgZjIpOworI2VuZGlmIC8qIElLU0RCICov CisJaWYgKCFFTkFCTEVEKGVuX2N3ZCkpIHsJCS8qIElmIENXRCBpcyBkaXNhYmxlZCAqLworCSAg ICB6c3RyaXAoZjEsJnN0cjEpOwkJLyogYW5kIHRoZXkgaW5jbHVkZWQgYSBwYXRobmFtZSwgKi8K KwkgICAgenN0cmlwKGYyLCZzdHIyKTsKKwkgICAgaWYgKCBzdHJjbXAoZjEsc3RyMSkgfHwgc3Ry Y21wKGYyLHN0cjIpICkgeyAvKiByZWZ1c2UuICovCisJCWVycnBrdCgoQ0hBUiAqKSJBY2Nlc3Mg ZGVuaWVkIik7CisJCVJFU1VNRTsJCQkvKiBSZW1lbWJlciwgdGhpcyBpcyBub3QgYSBnb3RvISAq LworCQlyZXR1cm4oLTEpOworCSAgICB9CisJfQorCWlmIChzdGF0ZSA9PSBnZW5lcmljKSB7CQkv KiBJdCdzIE9LIHRvIGdvIGFoZWFkLiAqLworCSAgICBpZiAoenJlbmFtZShmMSxmMikpIHsJLyog VHJ5ICovCisJCWVycnBrdCgoQ0hBUiAqKSJDYW4ndCByZW5hbWUgZmlsZSIpOyAvKiBHaXZlIGVy cm9yIG1zZyAqLworCSAgICB9IGVsc2UgeworCQlzdWNjZXNzID0gMTsKKwkJYWNrKCk7CisJICAg IH0KKwkgICAgUkVTVU1FOwkJCS8qIFdhaXQgZm9yIG5leHQgc2VydmVyIGNvbW1hbmQgKi8KKwkg ICAgcmV0dXJuKC0xKTsKKwl9CisgICAgfQorICAgIHJldHVybigtMSk7CisjZWxzZSAvKiBubyBa UkVOQU1FICovCisgICAgLyogR2l2ZSBlcnJvciBtZXNzYWdlICovCisgICAgZXJycGt0KChDSEFS ICopIlJFTU9URSBSRU5BTUUgbm90IGF2YWlsYWJsZSIpOworICAgIFJFU1VNRTsJCQkJLyogV2Fp dCBmb3IgbmV4dCBzZXJ2ZXIgY29tbWFuZCAqLworICAgIHJldHVybigtMSk7CisjZW5kaWYgLyog WlJFTkFNRSAqLworI2VuZGlmIC8qIE5PU0VSVkVSICovCit9CisKK3N0YXRpYyBpbnQKK3Nydl9s b2dpbigpIHsKKyNpZm5kZWYgTk9TRVJWRVIKKyAgICBjaGFyIGYxW0xPR0lOTEVOKzFdLCBmMltM T0dJTkxFTisxXSwgZjNbTE9HSU5MRU4rMV07CisgICAgQ0hBUiAqcDsKKyAgICBpbnQgbGVuLCBp OworCisgICAgZGVidWcoRjEwMSwiUkVNT1RFIExPR0lOIHhfbG9naW4iLCIiLHhfbG9naW4pOwor ICAgIGRlYnVnKEYxMDEsIlJFTU9URSBMT0dJTiB4X2xvZ2dlZCIsIiIseF9sb2dnZWQpOworCisg ICAgZjFbMF0gPSBOVUw7IGYyWzBdID0gTlVMOyBmM1swXSA9IE5VTDsKKyAgICBsZW4gPSAwOwor ICAgIGlmIChzcnZjbWRbMV0pCQkJLyogRmlyc3QgbGVuZ3RoIGZpZWxkICovCisgICAgICBsZW4g PSB4dW5jaGFyKHNydmNtZFsxXSk7CQkvKiBTZXBhcmF0ZSB0aGUgcGFyYW1ldGVycyAqLworCisg ICAgaWYgKHhfbG9naW4pIHsJCQkvKiBMb2dpbiByZXF1aXJlZCAqLworCWlmICh4X2xvZ2dlZCkg ewkJCS8qIEFuZCBhbHJlYWR5IGxvZ2dlZCBpbiAqLworCSAgICBpZiAobGVuID4gMCkgewkJLyog TG9nZ2luZyBpbiBhZ2FpbiAqLworCQllcnJwa3QoKENIQVIgKikiQWxyZWFkeSBsb2dnZWQgaW4u Iik7CisJICAgIH0gZWxzZSB7CQkJLyogTG9nZ2luZyBvdXQgKi8KKwkJZGVidWcoRjEwMSwiUkVN T1RFIExPR09VVCIsIiIseF9sb2dnZWQpOworI2lmZGVmIENLU1lTTE9HCisJCWlmIChja3hzeXNs b2cgPj0gU1lTTEdfUFIgJiYgY2t4bG9nZ2luZykKKwkJICBja3N5c2xvZyhTWVNMR19QUiwgMSwg InNlcnZlciIsICJSRU1PVEUgTE9HT1VUIiwgTlVMTCk7CisjZW5kaWYgLyogQ0tTWVNMT0cgKi8K KyNpZmRlZiBJS1NEQgorCQlpZiAoaWtkYm9wZW4pIHNsb3RzdGF0ZSh3aGF0LCJSRU1PVEUgTE9H T1VUIiwgIiIsICIiKTsKKyNlbmRpZiAvKiBJS1NEQiAqLworCQl0bG9nKEYxMTAsIkxvZ2dlZCBv dXQiLHhfdXNlciwwKTsKKwkJYWNrMSgoQ0hBUiAqKSJMb2dnZWQgb3V0Iik7CisJCXN1Y2Nlc3Mg PSAxOworCQltc2xlZXAoNTAwKTsKKyNpZmRlZiBDS19MT0dJTgorCQl4X2xvZ2dlZCA9IDA7Cisj aWZkZWYgSUtTRAorCQlpZiAoaW5zZXJ2ZXIpCisJCSAgY2t4bG9nb3V0KCk7CisjZW5kaWYgLyog SUtTRCAqLworI2VuZGlmIC8qIENLX0xPR0lOICovCisJICAgIH0KKwl9IGVsc2UgewkJCS8qIE5v dCBsb2dnZWQgaW4geWV0ICovCisJICAgIGRlYnVnKEYxMDEsIlJFTU9URSBMT0dJTiBsZW4iLCIi LGxlbik7CisJICAgIGlmIChsZW4gPiAwKSB7CQkvKiBIYXZlIHVzZXJuYW1lICovCisjaWZkZWYg Q0tTWVNMT0cKKwkJaWYgKGNreHN5c2xvZyA+PSBTWVNMR19QUiAmJiBja3hsb2dnaW5nKQorCQkg IGNrc3lzbG9nKFNZU0xHX1BSLCAxLCAic2VydmVyIiwgIlJFTU9URSBMT0dJTiIsIE5VTEwpOwor I2VuZGlmIC8qIENLU1lTTE9HICovCisJCWlmIChsZW4gPiBMT0dJTkxFTikgeworCQkgICAgZXJy cGt0KChDSEFSICopIlVzZXJuYW1lIHRvbyBsb25nIik7CisJCX0KKwkJcCA9IHNydmNtZCArIDI7 CQkvKiBQb2ludCB0byBpdCAqLworCQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIC8qIENvcHkg aXQgKi8KKwkJICBmMVtpXSA9IHBbaV07CisJCWYxW2xlbl0gPSBOVUw7CQkvKiBUZXJtaW5hdGUg aXQgKi8KKwkJcCArPSBsZW47CQkvKiBQb2ludCB0byBuZXh0IGxlbmd0aCBmaWVsZCAqLworCQlp ZiAoKnApIHsJCS8qIElmIHdlIGhhdmUgb25lICovCisJCSAgICBsZW4gPSB4dW5jaGFyKCpwKysp OyAvKiBkZWNvZGUgaXQgKi8KKwkJICAgIGlmIChsZW4gPiAwICYmIGxlbiA8PSBMT0dJTkxFTikg eworCQkJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSAvKiBTYW1lIGRlYWwgZm9yIHBhc3N3b3Jk ICovCisJCQkgIGYyW2ldID0gcFtpXTsKKwkJCWYyW2xlbl0gPSBOVUw7CisJCQlwICs9IGxlbjsJ LyogQW5kIGFjY291bnQgKi8KKwkJCWlmICgqcCkgeworCQkJICAgIGxlbiA9IHh1bmNoYXIoKnAr Kyk7CisJCQkgICAgaWYgKGxlbiA+IDAgJiYgbGVuIDw9IExPR0lOTEVOKSB7CisJCQkJZm9yIChp ID0gMDsgaSA8IGxlbjsgaSsrKQorCQkJCSAgZjNbaV0gPSBwW2ldOwkvKiBTZXQgYnV0IG5ldmVy IHVzZWQgKi8KKwkJCQlmM1tsZW5dID0gTlVMOyAvKiAoYmVjYXVzZSBhY2NvdW50IG5vdCB1c2Vk KSAqLworCQkJICAgIH0KKwkJCX0KKwkJICAgIH0KKwkJfQorCQlkZWJ1ZyhGMTAxLCJSRU1PVEUg TE9HSU4gMSIsIiIseF9sb2dnZWQpOworI2lmZGVmIElLU0QKKyNpZmRlZiBDS19MT0dJTgorCQlp ZiAoaW5zZXJ2ZXIpIHsJCS8qIExvZyBpbiB0byBzeXN0ZW0gZm9yIHJlYWwgKi8KKwkJICAgIHhf bG9nZ2VkID0gY2t4bG9naW4oKENIQVIgKilmMSwoQ0hBUiAqKWYyLE5VTEwsMCk7CisJCSAgICBk ZWJ1ZyhGMTAxLCJSRU1PVEUgTE9HSU4gMiIsIiIseF9sb2dnZWQpOworCQkgICAgaWYgKHhfbG9n Z2VkKSB7CS8qIENvdW50IGF0dGVtcHRzICovCisJCQlsb2d0cmllcyA9IDA7CisJCQlqdXN0b25l ID0gMTsKKwkJICAgIH0gZWxzZSB7CisJCQlsb2d0cmllcysrOworCQkJc2xlZXAobG9ndHJpZXMp OworCQkgICAgfQorCQl9IGVsc2UKKyNlbmRpZiAvKiBDS19MT0dJTiAqLworI2VuZGlmIC8qIElL U0QgKi8KKwkJICBpZiAoeF91c2VyICYmIHhfcGFzc3dkKSB7IC8qIFVzZXIgYW5kIHBhc3N3b3Jk IG11c3QgbWF0Y2ggKi8KKwkJICAgICAgaWYgKCFzdHJjbXAoeF91c2VyLGYxKSkgLyogU0VUIFNF UlZFUiBMT0dJTiAqLworCQkJaWYgKCFzdHJjbXAoeF9wYXNzd2QsZjIpKQorCQkJICB4X2xvZ2dl ZCA9IDE7CisJCSAgICAgIGRlYnVnKEYxMDEsIlJFTU9URSBMT0dJTiAzIiwiIix4X2xvZ2dlZCk7 CisJCSAgfSBlbHNlIGlmICh4X3VzZXIpIHsJLyogT25seSB1c2VybmFtZSBnaXZlbiwgbm8gcGFz c3dvcmQgKi8KKwkJICAgICAgaWYgKCFzdHJjbXAoeF91c2VyLGYxKSkgLyogc28gb25seSB1c2Vy bmFtZSBtdXN0IG1hdGNoICovCisJCQl4X2xvZ2dlZCA9IDE7CisJCSAgICAgIGRlYnVnKEYxMDEs IlJFTU9URSBMT0dJTiA0IiwiIix4X2xvZ2dlZCk7CisJCSAgfQorI2lmZGVmIENLX0xPR0lOIAor ICAgICAgICAgICAgICAgIGVsc2UgeworCQkgICAgeF9sb2dnZWQgPSBja3hsb2dpbigoQ0hBUiAq KWYxLChDSEFSICopZjIsTlVMTCwwKTsKKwkJICAgIGRlYnVnKEYxMDEsIlJFTU9URSBMT0dJTiA1 IiwiIix4X2xvZ2dlZCk7CisgICAgICAgICAgICAgICAgfQorI2VuZGlmIC8qIENLX0xPR0lOICov CisJCWlmICh4X2xvZ2dlZCkgewkJLyogTG9nZ2VkIGluPyAqLworCQkgICAgdGxvZyhGMTEwLCJM b2dnZWQgaW4iLCB4X3VzZXIsIDApOworCQkgICAgaWYgKGlzZ3Vlc3QpCisJCSAgICAgIGFjazEo KENIQVIgKikiTG9nZ2VkIGluIGFzIGd1ZXN0IC0gcmVzdHJpY3Rpb25zIGFwcGx5Iik7CisJCSAg ICBlbHNlCisJCSAgICAgIGFjazEoKENIQVIgKikiTG9nZ2VkIGluIik7CisJCSAgICBzdWNjZXNz ID0gMTsKKwkJfSBlbHNlIHsKKwkJICAgIHRsb2coRjExMCwiTG9naW4gZmFpbGVkIiwgZjEsIDAp OworCQkgICAgZXJycGt0KChDSEFSICopIkFjY2VzcyBkZW5pZWQuIik7CisjaWZkZWYgSUtTRAor I2lmZGVmIENLX0xPR0lOCisJCSAgICBpZiAoaW5zZXJ2ZXIgJiYgbG9ndHJpZXMgPiAyKQorCQkg ICAgICBja3hsb2dvdXQoKTsKKyNlbmRpZiAvKiBDS19MT0dJTiAqLworI2VuZGlmIC8qIElLU0Qg Ki8KKwkJfQorCSAgICB9IGVsc2UgewkJCS8qIExPR09VVCAqLworCQllcnJwa3QoKENIQVIgKiki TG9nb3V0IGlnbm9yZWQiKTsKKwkgICAgfQorCX0KKyAgICB9IGVsc2UgewkJCQkvKiBMb2dpbiBu b3QgcmVxdWlyZWQgKi8KKwlpZiAobGVuID4gMCkKKwkgIGVycnBrdCgoQ0hBUiAqKSJMb2dpbiBp Z25vcmVkLiIpOworCWVsc2UKKwkgIGVycnBrdCgoQ0hBUiAqKSJMb2dvdXQgaWdub3JlZC4iKTsK KyAgICB9CisjZW5kaWYgLyogTk9TRVJWRVIgKi8KKyAgICBSRVNVTUU7CisgICAgcmV0dXJuKC0x KTsKK30KKworc3RhdGljIGludAorc3J2X3RpbWVvdXQoKSB7CisgICAgLyogSzk1IGRvZXMgdGhp cyBpdHMgb3duIHdheSAqLworICAgIGlmIChpZGxldG1vKSB7CisjaWZkZWYgSUtTRAorICAgICAg ICBpZiAoaW5zZXJ2ZXIpIHsKKyAgICAgICAgICAgcHJpbnRmKCJcclxuSUtTRCBJRExFIFRJTUVP VVQ6ICVkIHNlY1xyXG4iLCBzcnZpZGwpOworICAgICAgICAgICBkb2V4aXQoR09PRF9FWElULHhp dHN0YSk7CisgICAgICAgIH0KKyNlbmRpZiAvKiBJS1NEICovCisJaWRsZXRtbyA9IDA7CisJcHJp bnRmKCJcclxuU0VSVkVSIElETEUgVElNRU9VVDogJWQgc2VjXHJcbiIsIHNydmlkbCk7CisJeGl0 c3RhIHw9ICh3aGF0ICYgV19LRVJNSVQpOworCVFVSVQ7CisgICAgfQorI2lmbmRlZiBOT1NFUlZF UgorICAgIGVsc2UgaWYgKGZhdGFsaW8pIHsJCQkvKiBDb25uZWN0aW9uIGxvc3QgKi8KKyNpZmRl ZiBDS1NZU0xPRworCSAgaWYgKGNreHN5c2xvZyA+PSBTWVNMR19QUiAmJiBja3hsb2dnaW5nKQor CSAgICBja3N5c2xvZyhTWVNMR19QUiwgMSwgInNlcnZlciIsICJDb25uZWN0aW9uIGxvc3QiLCBO VUxMKTsKKyNlbmRpZiAvKiBDS1NZU0xPRyAqLworI2lmZGVmIElLU0RCCisJICBpZiAoaWtkYm9w ZW4pIHNsb3RzdGF0ZSh3aGF0LCJTRVJWRVIgRElTQ09OTkVDVCIsKGNoYXIgKilzcnZjbWQsICIi KTsKKyNlbmRpZiAvKiBJS1NEQiAqLworCXhpdHN0YSB8PSB3aGF0OworCVFVSVQ7CisgICAgfSBl bHNlIGlmIChpbnRlcnJ1cHRlZCkgewkJLyogSW50ZXJydXB0ZWQgYnkgaGFuZCAqLworCWlmICgh RU5BQkxFRChlbl9maW4pKSB7CisJICAgIGVycnBrdCgoQ0hBUiAqKSJRVUlUIGRpc2FibGVkIik7 CisJICAgIFJFU1VNRTsKKwkgICAgcmV0dXJuKC0xKTsKKwl9IGVsc2UgeworCSAgICBpZiAod2hh dCA9PSBXX1NFTkQgfHwgd2hhdCA9PSBXX1JFQ1YgfHwgd2hhdCA9PSBXX1JFTU8pIHsKKwkJc3Vj Y2VzcyA9IDA7CisjaWZkZWYgQ0tTWVNMT0cKKwkJaWYgKGNreHN5c2xvZyA+PSBTWVNMR19QUiAm JiBja3hsb2dnaW5nKQorCQkgIGNrc3lzbG9nKFNZU0xHX1BSLCAxLCAic2VydmVyIiwgIkludGVy cnVwdGVkIiwgTlVMTCk7CisjZW5kaWYgLyogQ0tTWVNMT0cgKi8KKwkgICAgfSBlbHNlIGlmICh3 aGF0ID09IFdfTk9USElORyAmJiBmaWxjbnQgPT0gMCkgeworCQlzdWNjZXNzID0gMTsKKwkgICAg fSAvKiBPdGhlcndpc2UgbGVhdmUgc3VjY2VzcyBhbG9uZSAqLworCSAgICB4aXRzdGEgfD0gKHdo YXQgJiBXX0tFUk1JVCk7CisJICAgIFFVSVQ7CisJfQorICAgIH0gZWxzZSB7CQkJCS8qIFNob3Vs ZG4ndCBoYXBwZW4gKi8KKwlkZWJ1ZyhGMTAwLCJTRVJWRVIgKHRvcCkgR09UIFVORVhQRUNURUQg J3EnIiwiIiwwKTsKKwlRVUlUOworICAgIH0KKyNlbmRpZiAvKiBOT1NFUlZFUiAqLworfQorCitz dGF0aWMgaW50CityY3Zfc19wa3QoKSB7CisjaWZuZGVmIE5PU0VSVkVSCisgICAgaWYgKHN0YXRl ID09IHJnZW4pCisgICAgICB1cnNlcnZlciA9IDE7CisgICAgaWYgKC8qIHN0YXRlID09IHNlcnZl ICYmICovIHhfbG9naW4gJiYgIXhfbG9nZ2VkKSB7CisJZXJycGt0KChDSEFSICopIkxvZ2luIHJl cXVpcmVkIik7CisJU0VSVkU7CisgICAgfSBlbHNlCisjZW5kaWYgLyogTk9TRVJWRVIgKi8KKyAg ICAgIGlmIChzdGF0ZSA9PSBzZXJ2ZSAmJiAhRU5BQkxFRChlbl9zZW4pKSB7IC8qIE5vdCBpbiBz ZXJ2ZXIgbW9kZSAqLworCWVycnBrdCgoQ0hBUiAqKSJTRU5EIGRpc2FibGVkIik7IC8qIHdoZW4g U0VORCBpcyBkaXNhYmxlZC4gKi8KKwlSRVNVTUU7CisJcmV0dXJuKC0xKTsKKyAgICB9IGVsc2Ug ewkJCQkvKiBPSyB0byBnbyBhaGVhZC4gKi8KKyNpZmRlZiBDS19UTVBESVIKKwlpZiAoZGxkaXIg JiYgIWZfdG1wZGlyKSB7CS8qIElmIHRoZXkgaGF2ZSBhIGRvd25sb2FkIGRpcmVjdG9yeSAqLwor CSAgICBkZWJ1ZyhGMTEwLCJyZWNlaXZlIGRvd25sb2FkIGRpciIsZGxkaXIsMCk7CisJICAgIGlm IChzID0gemd0ZGlyKCkpIHsJCS8qIEdldCBjdXJyZW50IGRpcmVjdG9yeSAqLworCQlkZWJ1ZyhG MTEwLCJyZWNlaXZlIGN1cnJlbnQgZGlyIixzLDApOworCQlpZiAoemNoZGlyKGRsZGlyKSkgewkv KiBDaGFuZ2UgdG8gZG93bmxvYWQgZGlyZWN0b3J5ICovCisJCSAgICBkZWJ1ZyhGMTAwLCJyZWNl aXZlIHpjaGRpciBvayIsIiIsMCk7CisJCSAgICBja3N0cm5jcHkoc2F2ZGlyLHMsVE1QRElSTEVO KTsKKwkJICAgIGZfdG1wZGlyID0gMTsJLyogUmVtZW1iZXIgdGhhdCB3ZSBkaWQgdGhpcyAqLwor CQl9IGVsc2UKKwkJICBkZWJ1ZyhGMTAwLCJyZWNlaXZlIHpjaGRpciBmYWlsZWQiLCIiLDApOwor CSAgICB9CisJfQorI2VuZGlmIC8qIENLX1RNUERJUiAqLworCW5ha3N0YXRlID0gMTsJCQkvKiBD YW4gc2VuZCBOQUtzIGZyb20gaGVyZS4gKi8KKwlyaW5pdChyZGF0YXApOwkJCS8qIFNldCBwYXJh bWV0ZXJzICovCisJaWYgKGJjdGYpIHsKKwkgICAgYmN0dSA9IDM7CisJICAgIGJjdGwgPSAzOwor CX0gZWxzZSB7CisJICAgIGJjdHUgPSBiY3RyOwkgICAgICAgLyogc3dpdGNoIHRvIGFncmVlZC11 cG9uIGJsb2NrIGNoZWNrICovCisJICAgIGJjdGwgPSAoYmN0dSA9PSA0KSA/IDIgOiBiY3R1OyAv KiBTZXQgYmxvY2stY2hlY2sgbGVuZ3RoICovCisJfQorCXdoYXQgPSBXX1JFQ1Y7CQkJLyogUmVt ZW1iZXIgd2UncmUgcmVjZWl2aW5nICovCisJbGFzdHhmZXIgPSBXX1JFQ1Y7CisJcmVzZXRjKCk7 CQkJLyogUmVzZXQgY291bnRlcnMgKi8KKwlydGltZXIoKTsJCQkvKiBSZXNldCB0aW1lciAqLwor I2lmZGVmIEdGVElNRVIKKwlyZnRpbWVyKCk7CisjZW5kaWYgLyogR0ZUSU1FUiAqLworCXN0cmVh bW9uKCk7CisJQkVHSU4gcmZpbGU7CQkJLyogR28gaW50byByZWNlaXZlLWZpbGUgc3RhdGUgKi8K KyAgICB9CisgICAgcmV0dXJuKC0xKTsKK30KKworCisvKiBFTkQgT0YgUk9VVElORVMgTU9WRUQg T1VUIE9GIFNUQVRFIE1BQ0hJTkUgKi8KKworCisvKiAgUCBSIE8gVCBPICAtLSAgUHJvdG9jb2wg ZW50cnkgZnVuY3Rpb24gICovCisKK3N0YXRpYyBpbnQgaXNfdG4gPSAwOwkJCS8qIEl0J3MgYSBU ZWxuZXQgY29ubmVjdGlvbiAqLworCisjaWZkZWYgQ0tfU1BFRUQKK2ludCBmX2N0bHAgPSAwOwkJ CQkvKiBDb250cm9sLWNoYXJhY3RlciBwcmVmaXggdGFibGUgKi8KKyNpZmRlZiBDT01NRU5UCitz aG9ydCBzX2N0bHBbMjU2XTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisjZW5kaWYgLyogQ0tfU1BF RUQgKi8KKworLyoKKyAgVGhpcyBpcyBzaW1wbHkgYSB3cmFwcGVyIGZvciB0aGUgcmVhbCBwcm90 b2NvbCBmdW5jdGlvbiBqdXN0IGJlbG93LAorICB0aGF0IHNhdmVzIGFueSBpdGVtcyB0aGF0IG1p Z2h0IGJlIGNoYW5nZWQgYXV0b21hdGljYWxseSBieSBwcm90b2NvbAorICBuZWdvdGlhdGlvbnMg YW5kIHRoZW4gcmVzdG9yZXMgdGhlbSB1cG9uIGV4aXQgZnJvbSBwcm90b2NvbCBtb2RlLgorKi8K K1ZPSUQKK3Byb3RvKCkgeworICAgIGV4dGVybiBpbnQgYl9zYXZlLCBmX3NhdmUsIGNfc2F2ZSwg c3Nfc2F2ZSwgc2xvc3RhcnQsIHJlbGlhYmxlLCB1cmNsZWFyOworI2lmbmRlZiBOT0NTRVRTCisg ICAgZXh0ZXJuIGludCBmY2hhcnNldCwgZmNzX3NhdmUsIHRjaGFyc2V0LCB0Y3Nfc2F2ZTsKKyNl bmRpZiAvKiBOT0NTRVRTICovCisKKyNpZmRlZiBQSVBFU0VORAorICAgIGV4dGVybiBpbnQgcGlw ZXNlbmQ7CisjZW5kaWYgLyogUElQRVNFTkQgKi8KKyNpZm5kZWYgTk9MT0NBTAorI2lmZGVmIE9T MgorICAgIGV4dGVybiBpbnQgY3Vyc29yZW5hW10sIGN1cnNvcl9zYXZlLCB0ZXJtX2lvOworICAg IGV4dGVybiBCWVRFIHZtb2RlOworICAgIGV4dGVybiBpbnQgZGlzcGxheV9kZW1vOworICAgIGlu dCB0ZXJtX2lvX3NhdmU7CisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogTk9MT0NBTCAqLwor I2lmZGVmIFROQ09ERQorICAgIGludCBfdV9iaW49MCwgX21lX2JpbiA9IDA7CisjaWZkZWYgSUtT X09QVElPTgorICAgIGludCAvKiBfdV9zdGFydD0wLCAqLyBfbWVfc3RhcnQgPSAwOworI2VuZGlm IC8qIElLU19PUFRJT04gKi8KKyNlbmRpZiAvKiBUTkNPREUgKi8KKyNpZmRlZiBQQVRURVJOUwor ICAgIGludCBwYV9zYXZlOworICAgIGludCBpOworI2VuZGlmIC8qIFBBVFRFUk5TICovCisgICAg aW50IHNjYW5fc2F2ZTsKKworI2lmZGVmIFBBVFRFUk5TCisgICAgcGFfc2F2ZSA9IHBhdHRlcm5z OworI2VuZGlmIC8qIFBBVFRFUk5TICovCisgICAgc2Nhbl9zYXZlID0gZmlsZXBlZWs7CisKKyAg ICBteWpvYiA9IHNzdGF0ZTsKKworI2lmZGVmIENLX0xPR0lOCisgICAgaWYgKGlzZ3Vlc3QpIHsJ CQkvKiBJZiB1c2VyIGlzIGFub255bW91cyAqLworCWVuX3ByaSA9IDA7CQkJLyogZGlzYWJsZSBw cmludGluZyAqLworCWVuX21haSA9IDA7CQkJLyogYW5kIGRpc2FibGUgZW1haWwgKi8KKwllbl9k ZWwgPSAwOwkJCS8qIGFuZCBmaWxlIGRlbGV0aW9uICovCisgICAgfQorI2VuZGlmIC8qIENLX0xP R0lOICovCisKKyNpZm5kZWYgTk9MT0NBTAorI2lmZGVmIE9TMgorICAgIGN1cnNvcl9zYXZlID0g Y3Vyc29yZW5hW3Ztb2RlXTsKKyAgICBjdXJzb3JlbmFbdm1vZGVdID0gMDsKKyAgICB0ZXJtX2lv X3NhdmUgPSB0ZXJtX2lvOworICAgIHRlcm1faW8gPSAwOworI2VuZGlmIC8qIE9TMiAqLworI2Vu ZGlmIC8qIE5PTE9DQUwgKi8KKyAgICBiX3NhdmUgPSBiaW5hcnk7CQkJLyogU0VUIEZJTEUgVFlQ RSAqLworICAgIGZfc2F2ZSA9IGZuY252OwkJCS8qIFNFVCBGSUxFIE5BTUVTICovCisgICAgY19z YXZlID0gYmN0cjsKKyAgICBwX3NhdmUgPSBmbnNwYXRoOworICAgIHJfc2F2ZSA9IHJlY3Vyc2l2 ZTsKKyAgICBzX3RpbWludCA9IHRpbWludDsKKyAgICBzc19zYXZlID0gc2xvc3RhcnQ7CisjaWZu ZGVmIE5PQ1NFVFMKKyAgICBmY3Nfc2F2ZSA9IGZjaGFyc2V0OworICAgIHRjc19zYXZlID0gdGNo YXJzZXQ7CisjZW5kaWYgLyogTk9DU0VUUyAqLworCisjaWZkZWYgQ09NTUVOVAorLyogRG9uJ3Qg ZG8gdGhpcyBiZWNhdXNlIHRoZW4gdXNlciBjYW4gbmV2ZXIgZmluZCBvdXQgd2hhdCBoYXBwZW5l ZC4gKi8KKyNpZmRlZiBDS19TUEVFRAorICAgIGZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKKyAg ICAgIHNfY3RscFtpXSA9IGN0bHBbaV07CisgICAgZl9jdGxwID0gMTsKKyNlbmRpZiAvKiBDS19T UEVFRCAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICBpZiAocmVsaWFibGUgPT0gU0VUX09O KQorICAgICAgc2xvc3RhcnQgPSAwOworICAgIGlzX3RuID0gKCFsb2NhbCAmJiBzc3RlbG5ldCkK KyNpZmRlZiBUTkNPREUKKyAgICAgIHx8IChsb2NhbCAmJiBuZXR3b3JrICYmIHR0bnByb3RvID09 IE5QX1RFTE5FVCkKKyNlbmRpZiAvKiBUTkNPREUgKi8KKwk7CisjaWZkZWYgVE5DT0RFCisgICAg aWYgKGlzX3RuKSB7CisgICAgICAgIGlmICh0bl9iX3hmZXIgJiYgIShzc3RlbG5ldCB8fCBpbnNl cnZlcikpIHsKKwkgICAgLyogU2F2ZSB0aGUgY3VycmVudCBzdGF0ZSBvZiBUZWxuZXQgQmluYXJ5 ICovCisJICAgIF91X2JpbiA9IFRFTE9QVF9VKFRFTE9QVF9CSU5BUlkpOworCSAgICBfbWVfYmlu ID0gVEVMT1BUX01FKFRFTE9QVF9CSU5BUlkpOworCisJICAgIC8qIElmIGVpdGhlciBkaXJlY3Rp b24gaXMgbm90IEJpbmFyeSBhdHRlbXB0IHRvIG5lZ290aWF0ZSBpdCAqLworCSAgICBpZiAoIV91 X2JpbiAmJiBURUxPUFRfVV9NT0RFKFRFTE9QVF9CSU5BUlkpICE9IFROX05HX1JGKSB7CisJCXRu X3NvcHQoRE8sVEVMT1BUX0JJTkFSWSk7CisJCVRFTE9QVF9VTkFOU1dFUkVEX0RPKFRFTE9QVF9C SU5BUlkpID0gMTsKKwkgICAgfQorCSAgICBpZiAoIV9tZV9iaW4gJiYgVEVMT1BUX01FX01PREUo VEVMT1BUX0JJTkFSWSkgIT0gVE5fTkdfUkYpIHsKKwkJdG5fc29wdChXSUxMLFRFTE9QVF9CSU5B UlkpOworCQlURUxPUFRfVU5BTlNXRVJFRF9XSUxMKFRFTE9QVF9CSU5BUlkpID0gMTsKKwkgICAg fQorCSAgICBpZiAoIShfbWVfYmluICYmIF91X2JpbikpCisJICAgICAgdG5fd2FpdCgicHJvdG8g c2V0IGJpbmFyeSBtb2RlIik7CisgICAgICAgIH0KKyNpZmRlZiBJS1NfT1BUSU9OCisjaWZkZWYg Q0tfWFlaCisgICAgICAgIGlmIChwcm90b2NvbCAhPSBQUk9UT19LKSB7CS8qIE5vbi1LZXJtaXQg cHJvdG9jb2wgc2VsZWN0ZWQgKi8KKyAgICAgICAgICAgIGlmIChURUxPUFRfVShURUxPUFRfS0VS TUlUKSAmJgorICAgICAgICAgICAgICAgIFRFTE9QVF9TQihURUxPUFRfS0VSTUlUKS5rZXJtaXQu dV9zdGFydCkgeworICAgICAgICAgICAgICAgIGlrc193YWl0KEtFUk1JVF9SRVFfU1RPUCwwKTsg LyogU3RvcCB0aGUgb3RoZXIgU2VydmVyICovCisJCS8qIF91X3N0YXJ0ID0gMTsgKi8KKyAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIGlmIChURUxPUFRfTUUoVEVMT1BUX0tFUk1JVCkgJiYKKyAg ICAgICAgICAgICAgICBURUxPUFRfU0IoVEVMT1BUX0tFUk1JVCkua2VybWl0Lm1lX3N0YXJ0KSB7 CisgICAgICAgICAgICAgICAgdG5fc2lrcyhLRVJNSVRfU1RPUCk7CS8qIEknbSBub3Qgc2VydmVy aW5nICovCisJIAlURUxPUFRfU0IoVEVMT1BUX0tFUk1JVCkua2VybWl0Lm1lX3N0YXJ0ID0gMDsK KwkJX21lX3N0YXJ0ID0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisjZW5kaWYg LyogQ0tfWFlaICovCisgICAgICAgIGlmIChzc3RhdGUgPT0gJ3gnIHx8IHNzdGF0ZSA9PSAndicp IHsgLyogUmVzcG9uZGluZyB0byBhIHJlcXVlc3QgKi8KKyAgICAgICAgICAgIGlmICghaW5zZXJ2 ZXIgJiYgVEVMT1BUX1UoVEVMT1BUX0tFUk1JVCkgJiYKKyAgICAgICAgICAgICAgICBURUxPUFRf U0IoVEVMT1BUX0tFUk1JVCkua2VybWl0LnVfc3RhcnQpIHsKKyAgICAgICAgICAgICAgICBpa3Nf d2FpdChLRVJNSVRfUkVRX1NUT1AsMCk7IC8qIFN0b3AgdGhlIG90aGVyIFNlcnZlciAqLworCQkv KiBfdV9zdGFydCA9IDE7ICovCisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoVEVMT1BU X01FKFRFTE9QVF9LRVJNSVQpICYmCisgICAgICAgICAgICAgICAgIVRFTE9QVF9TQihURUxPUFRf S0VSTUlUKS5rZXJtaXQubWVfc3RhcnQpIHsKKyAgICAgICAgICAgICAgICB0bl9zaWtzKEtFUk1J VF9TVEFSVCk7CS8qIFNlbmQgS2VybWl0LVNlcnZlciBTdGFydCAqLworCSAJVEVMT1BUX1NCKFRF TE9QVF9LRVJNSVQpLmtlcm1pdC5tZV9zdGFydCA9IDE7CisgICAgICAgICAgICB9CisgICAgICAg IH0gZWxzZSB7CQkJLyogSW5pdGlhdGluZyBhIHJlcXVlc3QgKi8KKyAgICAgICAgICAgIGlmIChU RUxPUFRfTUUoVEVMT1BUX0tFUk1JVCkgJiYKKyAgICAgICAgICAgICAgICBURUxPUFRfU0IoVEVM T1BUX0tFUk1JVCkua2VybWl0Lm1lX3N0YXJ0KSB7CisgICAgICAgICAgICAgICAgdG5fc2lrcyhL RVJNSVRfU1RPUCk7CS8qIEknbSBub3Qgc2VydmVyaW5nICovCisJIAlURUxPUFRfU0IoVEVMT1BU X0tFUk1JVCkua2VybWl0Lm1lX3N0YXJ0ID0gMDsKKwkJX21lX3N0YXJ0ID0gMTsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgICAgIGlmIChURUxPUFRfVShURUxPUFRfS0VSTUlUKSAmJgorCSAgICAg ICAgIVRFTE9QVF9TQihURUxPUFRfS0VSTUlUKS5rZXJtaXQudV9zdGFydCkgeworCQkvKiBTZW5k IFJlcS1TZXJ2ZXItU3RhcnQgKi8KKyAgICAgICAgICAgICAgICBpZiAoIWlrc193YWl0KEtFUk1J VF9SRVFfU1RBUlQsMCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNzdGF0ZSAhPSAncycp IHsKKwkJCXN1Y2Nlc3MgPSAwOwkvKiBPdGhlciBLZXJtaXQgcmVmdXNlZCB0byBzZXJ2ZSAqLwor CQkJaWYgKGxvY2FsKQorCQkJICBwcmludGYoIkEgS2VybWl0IFNlcnZlciBpcyBub3QgYXZhaWxh YmxlXHJcbiIpOworCQkJZGVidWcoRjExMCwicHJvdG8oKSIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICJBIEtlcm1pdCBTZXJ2ZXIgaXMgbm90IGF2YWlsYWJsZSIsMCk7CisJCQl0bG9n KEYxMTAsIklLUyBjbGllbnQvc2VydmVyIGZhaWx1cmUiLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAiQSBLZXJtaXQgU2VydmVyIGlzIG5vdCBhdmFpbGFibGUiLDApOworCQkJZ290byB4 eHByb3RveDsKKyAgICAgICAgICAgICAgICAgICAgfQorCQl9CisgICAgICAgICAgICB9CisgICAg ICAgIH0KKyNlbmRpZiAvKiBJS1NfT1BUSU9OICovCisjaWZkZWYgQ0tfRU5DUllQVElPTgorICAg ICAgICBpZiAodG5fbm9fZW5jcnlwdF94ZmVyICYmICEoc3N0ZWxuZXQgfHwgaW5zZXJ2ZXIpKSB7 CisgICAgICAgICAgICBja190bl9lbmNfc3RvcCgpOworICAgICAgICB9CisjZW5kaWYgLyogQ0tf RU5DUllQVElPTiAqLworICAgIH0KKyNlbmRpZiAvKiBUTkNPREUgKi8KKworICAgIGlmICgheGZy aW50KSBjb25ub2koKTsKKyAgICB4eHByb3RvKCk7CQkJCS8qIENhbGwgdGhlIHJlYWwgcHJvdG9j b2wgZnVuY3Rpb24gKi8KKworI2lmZGVmIElLU19PUFRJT04KKyAgeHhwcm90b3g6CisjZW5kaWYg LyogSUtTX09QVElPTiAqLworICAgIHhmZXJzdGF0ID0gc3VjY2VzczsJCQkvKiBSZW1lbWJlciB0 cmFuc2ZlciBzdGF0dXMgKi8KKyAgICBrYWN0aXZlID0gMDsKKworI2lmZGVmIFROQ09ERQorI2lm ZGVmIENLX0VOQ1JZUFRJT04KKyAgICAgICAgaWYgKHRuX25vX2VuY3J5cHRfeGZlciAmJiAhKHNz dGVsbmV0IHx8IGluc2VydmVyKSkgeworICAgICAgICAgICAgY2tfdG5fZW5jX3N0YXJ0KCk7Cisg ICAgICAgIH0KKyNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCisjaWZkZWYgSUtTX09QVElPTgor ICAgIGlmIChURUxPUFRfTUUoVEVMT1BUX0tFUk1JVCkgJiYKKyAgICAgICAgVEVMT1BUX1NCKFRF TE9QVF9LRVJNSVQpLmtlcm1pdC5tZV9zdGFydCAmJiAhX21lX3N0YXJ0KSB7CisgICAgICAgIHRu X3Npa3MoS0VSTUlUX1NUT1ApOwkJLyogU2VydmVyIGlzIHN0b3BwZWQgKi8KKyAJVEVMT1BUX1NC KFRFTE9QVF9LRVJNSVQpLmtlcm1pdC5tZV9zdGFydCA9IDA7CisgICAgfQorI2VuZGlmIC8qIElL U19PUFRJT04gKi8KKyAgICBpZiAoaXNfdG4gJiYgdG5fYl94ZmVyICYmICEoc3N0ZWxuZXQgfHwg aW5zZXJ2ZXIpKSB7CisgICAgICAgIC8qIGlmIHdlIG5lZ290aWF0ZWQgQmluYXJ5IG1vZGUgdHJ5 IHRvIHJlc2V0IGl0ICovCisgICAgICAgIGlmICghX3VfYmluKSB7CisgICAgICAgICAgICAvKiBD aGVjayB0byBzZWUgaWYgdGhlIHN0YXRlIGNoYW5nZWQgZHVyaW5nIHRoZSB0cmFuc2ZlciAqLwor CSAgICBpZiAoVEVMT1BUX1UoVEVMT1BUX0JJTkFSWSkpIHsKKwkJdG5fc29wdChET05ULFRFTE9Q VF9CSU5BUlkpOworCQlURUxPUFRfVU5BTlNXRVJFRF9ET05UKFRFTE9QVF9CSU5BUlkpID0gMTsK KwkgICAgfSBlbHNlCisJICAgICAgX3VfYmluID0gMTsJCS8qIFNvIHdlIGRvbid0IGNhbGwgdG5f d2FpdCgpICovCisgICAgICAgIH0KKyAgICAgICAgaWYgKCFfbWVfYmluKSB7CisgICAgICAgICAg ICAvKiBDaGVjayB0byBzZWUgaWYgdGhlIHN0YXRlIGNoYW5nZWQgZHVyaW5nIHRoZSB0cmFuc2Zl ciAqLworCSAgICBpZiAoVEVMT1BUX01FKFRFTE9QVF9CSU5BUlkpKSB7CisJCXRuX3NvcHQoV09O VCxURUxPUFRfQklOQVJZKTsKKwkJVEVMT1BUX1VOQU5TV0VSRURfV09OVChURUxPUFRfQklOQVJZ KSA9IDE7CisJICAgIH0gZWxzZQorCSAgICAgIF9tZV9iaW4gPSAxOwkJLyogU28gd2UgZG9uJ3Qg Y2FsbCB0bl93YWl0KCkgKi8KKwl9CisJaWYgKCEoX21lX2JpbiAmJiBfdV9iaW4pKQorCSAgdG5f d2FpdCgicHJvdG8gcmVzZXQgYmluYXJ5IG1vZGUiKTsKKyAgICB9CisjZW5kaWYgLyogVE5DT0RF ICovCisKKyNpZmRlZiBQQVRURVJOUworICAgIHBhdHRlcm5zID0gcGFfc2F2ZTsKKyNlbmRpZiAv KiBQQVRURVJOUyAqLworICAgIGZpbGVwZWVrID0gc2Nhbl9zYXZlOworCisjaWZkZWYgU1RSRUFN SU5HCisgICAgc3RyZWFtaW5nID0gMDsKKyAgICAvKiBzdHJlYW1vayA9IDA7ICovCisjZW5kaWYg LyogU1RSRUFNSU5HICovCisjaWZkZWYgQ09NTUVOVAorI2lmZGVmIENLX1NQRUVECisgICAgZm9y IChpID0gMDsgaSA8IDI1NjsgaSsrKQorICAgICAgY3RscFtpXSA9IHNfY3RscFtpXTsKKyAgICBm X2N0bHAgPSAwOworI2VuZGlmIC8qIENLX1NQRUVEICovCisjZW5kaWYgLyogQ09NTUVOVCAqLwor ICAgIHVyY2xlYXIgPSAwOworICAgIGlmICghc3VjY2VzcykgeworCXhpdHN0YSB8PSAod2hhdCAm IFdfS0VSTUlUKTsKKwl0bG9nKEYxMTAsIiBmYWlsZWQ6IiwoY2hhciAqKWVwa3Rtc2csMCk7Cisg ICAgfQorICAgIGRlYnVnKEYxMTEsInByb3RvIHhmZXJzdGF0IixlcGt0bXNnLHhmZXJzdGF0KTsK KyAgICBzbG9zdGFydCA9IHNzX3NhdmU7CisgICAgaWYgKHNfdGltaW50ID4gLTEpIHsJCS8qIEJl Y2F1c2Ugb2YgUkVNT1RFIFNFVCAqLworCXRpbWludCA9IHNfdGltaW50OworCXNfdGltaW50ID0g LTE7CisgICAgfQorICAgIHJlY3Vyc2l2ZSA9IHJfc2F2ZTsKKyAgICBmbnNwYXRoID0gcF9zYXZl OworICAgIGlmIChjX3NhdmUgPiAtMSkgewkJCS8qIEJlY2F1c2Ugb2YgUkVNT1RFIFNFVCAqLwor CWJjdHIgPSBjX3NhdmU7CisJY19zYXZlID0gLTE7CisgICAgfQorICAgIGZuY252ICAgPSBmX3Nh dmU7CisgICAgYmluYXJ5ICA9IGJfc2F2ZTsKKyNpZmRlZiBQSVBFU0VORAorICAgIHBpcGVzZW5k ID0gMDsgICAgCQkJLyogTmV4dCB0aW1lIG1pZ2h0IG5vdCBiZSBwaXBlc2VuZCAqLworI2VuZGlm IC8qIFBJUEVTRU5EICovCisjaWZuZGVmIE5PTE9DQUwKKyNpZmRlZiBPUzIKKyAgICBjdXJzb3Jl bmFbdm1vZGVdID0gY3Vyc29yX3NhdmU7CisgICAgdGVybV9pbyA9IHRlcm1faW9fc2F2ZTsKKyAg ICBkaXNwbGF5X2RlbW8gPSAxOworI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIE5PTE9DQUwg Ki8KK30KKworc3RhdGljIFZPSUQKK3h4cHJvdG8oKSB7CisgICAgaW50IHg7CisgICAgbG9uZyBs eDsKKyNpZmRlZiBDS19YWVoKKyNpZmRlZiBYWVpfSU5URVJOQUwKK19QUk9UT1RZUCggaW50IHB4 eXosIChpbnQpICk7CisjZW5kaWYgLyogWFlaX0lOVEVSTkFMICovCisjZW5kaWYgLyogQ0tfWFla ICovCisKKyAgICBjaGFyIHhzc1syXTsJCQkvKiBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2Ygc3N0 YXRlICovCisgICAgeHNzWzBdID0gc3N0YXRlOworICAgIHhzc1sxXSA9IE5VTDsKKyAgICBzX3Rp bWludCA9IHRpbWludDsKKworICAgIGRlYnVnKEYxMDEsInh4cHJvdG8gZW50cnkganVzdG9uZSIs IiIsanVzdG9uZSk7CisgICAgc3VjY2VzcyA9IDA7CisKKyAgICByZXRyaWV2ZSA9IDA7CQkJLyog UmVzZXQgdGhlc2UgLi4uICovCisgICAgcmVnZXQgPSAwOworICAgIG9wa3QgPSAwOworCisgICAg aWYgKGxvY2FsICYmIHR0Y2hrKCkgPCAwKSB7CQkvKiBHaXZpbmcgQllFIG9yIEZJTiAqLworCWlm IChieWVfYWN0aXZlKSB7CQkvKiBidXQgdGhlcmUgaXMgbm8gY29ubmVjdGlvbiAqLworCSAgICB0 dGNsb3MoMCk7CisJICAgIHN1Y2Nlc3MgPSAxOworCSAgICByZXR1cm47CisJfQorCS8qIERpdHRv IGZvciBhbnkgUkVNT1RFIGNvbW1hbmQgKi8KKwlpZiAoc3N0YXRlID09ICdnJyAmJiBjbWFyZyAp IHsKKwkgICAgaWYgKCpjbWFyZyA9PSAnTCcgfHwgKmNtYXJnID09ICdGJyB8fCAqY21hcmcgPT0g J1gnKQorCSAgICAgIHN1Y2Nlc3MgPSAxOworCSAgICBlbHNlCisJICAgICAgcHJpbnRmKCI/Tm8g Y29ubmVjdGlvblxyXG4iKTsKKwkgICAgcmV0dXJuOworCX0KKyAgICB9CisKKy8qIFNldCB1cCB0 aGUgY29tbXVuaWNhdGlvbiBsaW5lIGZvciBmaWxlIHRyYW5zZmVyLiAqLworLyogTk9URTogQWxs IG9mIHRoZSB4eHNjcmVlbigpIGNhbGxzIHByaW9yIHRvIHRoZSB3YXJ0KCkgaW52b2NhdGlvbiAq LworLyogY291bGQganVzdCBhcyBlYXNpbHkgYmUgcHJpbnRmJ3Mgb3IsIGZvciB0aGF0IG1hdHRl ciwgaGludHMuICovCisKKyAgICBpZiAobG9jYWwgJiYgKHNwZWVkIDwgMEwpICYmIChuZXR3b3Jr ID09IDApKSB7CisJeHhzY3JlZW4oU0NSX0VNLDAsMEwsIlNvcnJ5LCB5b3UgbXVzdCAnc2V0IHNw ZWVkJyBmaXJzdCIpOworCXJldHVybjsKKyAgICB9CisgICAgeCA9IC0xOworICAgIGlmICh0dG9w ZW4odHRuYW1lLCZ4LG1kbXR5cCxjZHRpbW8pIDwgMCkgeworCWRlYnVnKEYxMTEsImZhaWxlZDog cHJvdG8gdHRvcGVuIGxvY2FsIix0dG5hbWUsbG9jYWwpOworCXh4c2NyZWVuKFNDUl9FTSwwLDBM LCJDYW4ndCBvcGVuIGxpbmUiKTsKKwlyZXR1cm47CisgICAgfQorICAgIGlmICh4ID4gLTEpIGxv Y2FsID0geDsKKyAgICBkZWJ1ZyhGMTExLCJwcm90byB0dG9wZW4gbG9jYWwiLHR0bmFtZSxsb2Nh bCk7CisKKyAgICBseCA9IChsb2NhbCAmJiAhbmV0d29yaykgPyBzcGVlZCA6IC0xOworI2lmZGVm IE5FVENPTk4KKyNpZmRlZiBDS19TUEVFRAorICAgIGlmIChpc190bikgeworCWN0bHBbKHVuc2ln bmVkKTI1NV0gPSBjdGxwW0NSXSA9IDE7CisJaWYgKHBhcml0eSA9PSAnZScgfHwgcGFyaXR5ID09 ICdtJykgY3RscFsxMjddID0gMTsKKwlpZiAoZmxvdyA9PSBGTE9fWE9OWCkgewkJLyogQWxzbyB3 YXRjaCBvdXQgZm9yIFhvbi9Yb2ZmICovCisJICAgIGN0bHBbMTddID0gY3RscFsxOV0gPSAxOwor CSAgICBjdGxwWzE3KzEyOF0gPSBjdGxwWzE5KzEyOF0gPSAxOworCX0KKyAgICB9CisjZW5kaWYg LyogQ0tfU1BFRUQgKi8KKyNlbmRpZiAvKiBORVRDT05OICovCisgICAgaWYgKHR0cGt0KGx4LGZs b3cscGFyaXR5KSA8IDApIHsJLyogUHV0IGxpbmUgaW4gcGFja2V0IG1vZGUsICovCisJeHhzY3Jl ZW4oU0NSX0VNLDAsMEwsIkNhbid0IGNvbmRpdGlvbiBsaW5lIik7CisJcmV0dXJuOworICAgIH0K KyAgICBpZiAobG9jYWwgJiYgIW5ldHdvcmsgJiYgY2FycmllciAhPSBDQVJfT0ZGKSB7CisJaW50 IHg7CQkJCS8qIFNlcmlhbCBjb25uZWN0aW9uICovCisJeCA9IHR0Z21kbSgpOwkJCS8qIHdpdGgg Y2FycmllciBjaGVja2luZyAqLworCWlmICh4ID4gLTEpIHsKKwkgICAgaWYgKCEoeCAmIEJNX0RD RCkpIHsKKwkJZGVidWcoRjEwMSwicHJvdG8gdHRnbWRtIiwiIiwwKTsKKwkJeHhzY3JlZW4oU0NS X0VNLDAsMEwsIkNhcnJpZXIgcmVxdWlyZWQgYnV0IG5vdCBkZXRlY3RlZCIpOworCQlyZXR1cm47 CisJICAgIH0KKwl9CisgICAgfQorICAgIC8qIFNlbmQgcmVtb3RlIHNpZGUncyAicmVjZWl2ZSIg b3IgInNlcnZlciIgc3RhcnR1cCBzdHJpbmcsIGlmIGFueSAqLworICAgIGlmIChsb2NhbCAmJiBj a2luZGV4KChjaGFyICopeHNzLCJzcmdjamhrIiwwLDAsMSkpIHsKKwljaGFyICpzID0gTlVMTDsK KyAgICAgICAgaWYgKAorI2lmZGVmIElLU19PUFRJT04KKwkgICAgLyogRG9uJ3Qgc2VuZCBhdXRv LWJsYWggc3RyaW5nIGlmIHdlIGtub3cgb3RoZXIgc2lkZSBpcyBzZXJ2aW5nICovCisJICAgICFU RUxPUFRfVShURUxPUFRfS0VSTUlUKSB8fAorCSAgICAhVEVMT1BUX1NCKFRFTE9QVF9LRVJNSVQp Lmtlcm1pdC51X3N0YXJ0CisjZWxzZQorCSAgICAxCisjZW5kaWYgLyogSUtTX09QVElPTiAqLwor CSAgICApIHsKKwkgICAgaWYgKHNzdGF0ZSA9PSAncycpIHsJLyogU2VuZGluZyBmaWxlKHMpICov CisJCXMgPSBiaW5hcnkgPyBwdGFiW3Byb3RvY29sXS5oX2JfaW5pdCA6IHB0YWJbcHJvdG9jb2xd LmhfdF9pbml0OworCSAgICB9IGVsc2UgaWYgKHByb3RvY29sID09IFBST1RPX0spIHsgLyogQ29t bWFuZCBmb3Igc2VydmVyICovCisJCXMgPSBwdGFiW3Byb3RvY29sXS5oX3hfaW5pdDsKKwkgICAg fQorCX0KKyNpZmRlZiBDS19TUEVFRAorI2lmbmRlZiBVTlBSRUZJWFpFUk8KKwlpZiAocHJvdG9j b2wgPT0gUFJPVE9fSykJLyogQmVjYXVzZSBvZiBDLXN0cmluZ3MuLi4gKi8KKwkgIGN0bHBbMF0g PSAxOworI2VuZGlmIC8qIFVOUFJFRklYWkVSTyAqLworI2VuZGlmIC8qIENLX1NQRUVEICovCisJ aWYgKHMpIGlmICgqcykgewkJLyogSWYgd2UgaGF2ZSBhIGNvbW1hbmQgdG8gc2VuZC4uLiAqLwor CSAgICBjaGFyIHRtcGJ1ZlszNTZdOworCSAgICBpbnQgdG1wYnVmc2l6ID0gMzU2OworCSAgICBp bnQgc3R1ZmYgPSAtMSwgc3R1ZmYyID0gLTEsIGxlbiA9IDA7CisJICAgIGV4dGVybiBpbnQgdG5s bTsKKwkgICAgaWYgKHNzdGF0ZSA9PSAncycpIHsJLyogU2VuZGluZyBmaWxlKHMpICovCisjaWZk ZWYgQ0tfWFlaCisJCWlmIChwcm90b2NvbCA9PSBQUk9UT19YKSB7CisJCSAgICBjaGFyICogczI7 CisJCSAgICBzMiA9IGNtYXJnMlswXSA/IGNtYXJnMiA6IGNtYXJnOworCQkgICAgaWYgKChpbnQp c3RybGVuKHMpICsgKGludClzdHJsZW4oczIpICsgNCA8IDM1NikKKwkJICAgICAgc3ByaW50Zih0 bXBidWYsIHMsIHMyKTsKKwkJICAgIGVsc2UKKwkJICAgICAgdG1wYnVmWzBdID0gTlVMOworCQl9 IGVsc2UgeworI2VuZGlmIC8qIENLX1hZWiAqLworCQkgICAgY2ttYWttc2codG1wYnVmLCAzNTYs IHMsIE5VTEwsIE5VTEwsIE5VTEwpOworI2lmZGVmIENLX1hZWgorCQl9CisjZW5kaWYgLyogQ0tf WFlaICovCisJICAgIH0gZWxzZSB7CQkJLyogQ29tbWFuZCBmb3Igc2VydmVyICovCisJCWNrc3Ry bmNweSh0bXBidWYscywzNTYpOworCSAgICB9CisJICAgIGNrc3RybmNhdCh0bXBidWYsICJcMDE1 IixzaXplb2YodG1wYnVmKSk7CisJICAgIGlmICh0bmxtKQkJCS8qIFRFUk1JTkFMIE5FV0xJTkUg T04gKi8KKwkgICAgICBzdHVmZiA9IExGOwkJLyogU3R1ZmYgTEYgKi8KKyNpZmRlZiBUTkNPREUK KwkgICAgLyogVEVMTkVUIE5FV0xJTkUgTU9ERSAqLworCSAgICBpZiAoaXNfdG4pIHsKKwkJc3dp dGNoIChURUxPUFRfTUUoVEVMT1BUX0JJTkFSWSkgPyB0bl9iX25sbSA6IHRuX25sbSkgeworCQkg IGNhc2UgVE5MX0NSOgorCQkgICAgYnJlYWs7CisJCSAgY2FzZSBUTkxfQ1JOVUw6CisJCSAgICBi cmVhazsKKwkJICBjYXNlIFROTF9DUkxGOgorCQkgICAgc3R1ZmYyID0gc3R1ZmY7CisJCSAgICBz dHVmZiA9IExGOworCQkgICAgYnJlYWs7CisJCX0KKwkgICAgfQorI2VuZGlmIC8qIFROQ09ERSAq LworCisjaWZkZWYgTkVUQ09OTgorI2lmZGVmIFRDUFNPQ0tFVAorI2lmZGVmIFJMT0dDT0RFCisJ ICAgIGlmIChuZXR3b3JrICYmIHR0bnByb3RvID09IE5QX1JMT0dJTikgeworCQlzd2l0Y2ggKHRu X2JfbmxtKSB7IC8qIEFsd2F5cyBCSU5BUlkgKi8KKwkJICBjYXNlIFROTF9DUjoKKwkJICAgIGJy ZWFrOworCQkgIGNhc2UgVE5MX0NSTlVMOgorCQkgICAgc3R1ZmYyID0gc3R1ZmY7CisJCSAgICBz dHVmZiAgPSBOVUw7CisJCSAgICBicmVhazsKKwkJICBjYXNlIFROTF9DUkxGOgorCQkgICAgc3R1 ZmYyID0gc3R1ZmY7CisJCSAgICBzdHVmZiA9IExGOworCQkgICAgYnJlYWs7CisJCX0KKwkgICAg fQorI2VuZGlmIC8qIFJMT0dDT0RFICovCisjZW5kaWYgLyogVENQU09DS0VUICovCisjZW5kaWYg LyogTkVUQ09OTiAqLworCisJICAgIGxlbiA9IHN0cmxlbih0bXBidWYpOworCSAgICBpZiAoc3R1 ZmYgPj0gMCAmJiBsZW4gPCB0bXBidWZzaXogLSAxKSB7CisJCXRtcGJ1ZltsZW4rK10gPSBzdHVm ZjsKKwkJaWYgKHN0dWZmMiA+PSAwICYmIGxlbiA8IHRtcGJ1ZnNpeiAtIDEpCisJCSAgdG1wYnVm W2xlbisrXSA9IHN0dWZmMjsKKwkJdG1wYnVmW2xlbl0gPSBOVUw7CisJICAgIH0KKwkgICAgdHRv bCgoQ0hBUiAqKXRtcGJ1ZixsZW4pOworCSAgICBpZiAocHJvdG9jb2wgPT0gUFJPVE9fSykJLyog R2l2ZSByZW1vdGUgS2VybWl0IHRpbWUgdG8gc3RhcnQgKi8KKwkgICAgICBtc2xlZXAoNDAwKTsK Kwl9CisgICAgfQorCisjaWZkZWYgQ0tfWFlaCisgICAgaWYgKHByb3RvY29sICE9IFBST1RPX0sp IHsJCS8qIE5vbi1LZXJtaXQgcHJvdG9jb2wgc2VsZWN0ZWQgKi8KKwljaGFyIHRtcGJ1ZlszNTZd OworCWludCB0bXBidWZzaXogPSAzNTY7CisJY2hhciAqIHMgPSAiIjsKKworI2lmZGVmIENLX1RN UERJUgorCWlmIChzc3RhdGUgPT0gJ3YnKSB7CQkvKiBJZiByZWNlaXZpbmcgYW5kLi4uICovCisJ ICAgIGlmIChkbGRpciAmJiAhZl90bXBkaXIpIHsJLyogaWYgdGhleSBoYXZlIGEgZG93bmxvYWQg ZGlyZWN0b3J5ICovCisJCWlmIChzID0gemd0ZGlyKCkpIHsJLyogR2V0IGN1cnJlbnQgZGlyZWN0 b3J5ICovCisJCSAgICBpZiAoemNoZGlyKGRsZGlyKSkgeyAvKiBDaGFuZ2UgdG8gZG93bmxvYWQg ZGlyZWN0b3J5ICovCisJCQlja3N0cm5jcHkoc2F2ZGlyLHMsVE1QRElSTEVOKTsKKwkJCWZfdG1w ZGlyID0gMTsJLyogUmVtZW1iZXIgdGhhdCB3ZSBkaWQgdGhpcyAqLworCQkgICAgfQorCQl9CisJ ICAgIH0KKwl9CisjZW5kaWYgLyogQ0tfVE1QRElSICovCisKKyNpZmRlZiBYWVpfSU5URVJOQUwJ CQkvKiBJbnRlcm5hbCAqLworCXN1Y2Nlc3MgPSAhcHh5eihzc3RhdGUpOworI2Vsc2UKKyNpZmRl ZiBDS19SRURJUgkJCQkvKiBFeHRlcm5hbCAqLworCXN3aXRjaCAoc3N0YXRlKSB7CisJICBjYXNl ICdzJzoJCQkvKiAnVGlzIGJldHRlciB0byBTRU5ELi4uICovCisJICAgIHMgPSBiaW5hcnkgPyBw dGFiW3Byb3RvY29sXS5wX2Jfc2NtZCA6IHB0YWJbcHJvdG9jb2xdLnBfdF9zY21kOworCSAgICBi cmVhazsKKwkgIGNhc2UgJ3YnOgkJCS8qIC4uLiB0aGFuIFJFQ0VJVkUgKi8KKwkgICAgcyA9IGJp bmFyeSA/IHB0YWJbcHJvdG9jb2xdLnBfYl9yY21kIDogcHRhYltwcm90b2NvbF0ucF90X3JjbWQ7 CisJICAgIGJyZWFrOworCX0KKwlpZiAoIXMpIHMgPSAiIjsKKwlpZiAoKnMpIHsKKwkgICAgaWYg KHNzdGF0ZSA9PSAncycpIHsJLyogU2VuZGluZyAqLworCQlleHRlcm4gaW50IHhmZXJtb2RlOwor CQlpbnQgayA9IDAsIHggPSAwLCBiID0gYmluYXJ5OworCQkvKgorCQkgIElmIGp1c3Qgb25lIGZp bGUgd2UgY2FuIHNjYW4gaXQgdG8gc2V0IHRoZSB4ZmVyIG1vZGUuCisJCSAgT3RoZXJ3aXNlIGl0 J3MgdXAgdG8gdGhlIGV4dGVybmFsIHByb3RvY29sIHByb2dyYW0uCisJCSovCisJCWlmIChwYXR0 ZXJucyAmJiB4ZmVybW9kZSA9PSBYTU9ERV9BICYmICFpc3dpbGQoZnNwZWMpKSB7CisJCSAgICBl eHRlcm4gaW50IG5zY2FuZmlsZTsKKwkJICAgIGsgPSBzY2FuZmlsZShmc3BlYywmeCxuc2NhbmZp bGUpOworCQkgICAgaWYgKGsgPiAtMSkgeworCQkJYiA9IChrID09IEZUX0JJTikgPyBYWUZUX0Ig OiBYWUZUX1Q7CisJCQlzID0gYiA/CisJCQkgICAgcHRhYltwcm90b2NvbF0ucF9iX3NjbWQgOgor CQkJICAgIHB0YWJbcHJvdG9jb2xdLnBfdF9zY21kOworCQkgICAgfQorCQl9CisJCWlmICgoaW50 KXN0cmxlbihzKSArIChpbnQpc3RybGVuKGZzcGVjKSA8IHRtcGJ1ZnNpeikgeworCQkgICAgc3By aW50Zih0bXBidWYscyxmc3BlYyk7IC8qIHNhZmUgKHByZWNoZWNrZWQpICovCisJCSAgICB0bG9n KEYxMTAsIlNlbmRpbmciLGZzcGVjLDBMKTsKKwkJfQorCSAgICB9IGVsc2UgewkJCS8qIFJlY2Vp dmluZyAqLworCQlpZiAoKGludClzdHJsZW4ocykgKyAoaW50KXN0cmxlbihjbWFyZzIpIDwgdG1w YnVmc2l6KSB7CisJCSAgICBzcHJpbnRmKHRtcGJ1ZixzLGNtYXJnMik7IC8qIHNhZmUgKHByZWNo ZWNrZWQpICovCisJCSAgICB0bG9nKEYxMTAsIlJlY2VpdmluZyIsY21hcmcyLDBMKTsKKwkJfQor CSAgICB9CisJICAgIHRsb2coRjExMCwiIHZpYSBleHRlcm5hbCBwcm90b2NvbDoiLHRtcGJ1Ziww KTsKKwkgICAgZGVidWcoRjExMCwiY2tjcHJvIHR0cnVuY21kIix0bXBidWYsMCk7CisJICAgIHN1 Y2Nlc3MgPSB0dHJ1bmNtZCh0bXBidWYpOworCSAgICB0bG9nKEYxMTAsIiBzdGF0dXM6IixzdWNj ZXNzID8gIk9LIiA6ICJGQUlMRUQiLCAwKTsKKwl9IGVsc2UgeworCSAgICBwcmludGYoIj9Tb3Jy eSwgbm8gZXh0ZXJuYWwgcHJvdG9jb2wgZGVmaW5lZCBmb3IgJXNcclxuIiwKKwkJICAgcHRhYltw cm90b2NvbF0ucF9uYW1lCisJCSAgICk7CisJfQorI2Vsc2UKKwlwcmludGYoCisiU29ycnksIG9u bHkgS2VybWl0IHByb3RvY29sIGlzIHN1cHBvcnRlZCBpbiB0aGlzIHZlcnNpb24gb2YgS2VybWl0 XG4iCisJICAgICAgICk7CisjZW5kaWYgLyogQ0tfUkVESVIgKi8KKyNlbmRpZiAvKiBYWVpfSU5U RVJOQUwgKi8KKwlyZXR1cm47CisgICAgfQorI2VuZGlmIC8qIENLX1hZWiAqLworCisjaWZkZWYg TlRTSUdYCisgICAgY29ucmF3KCk7CisgICAgY29ubm9pKCk7CisjZWxzZQorICAgIGlmICghbG9j YWwpCisgICAgICBjb25ub2koKTsJCQkJLyogTm8gY29uc29sZSBpbnRlcnJ1cHRzIGlmIHJlbW90 ZSAqLworI2VuZGlmIC8qIE5UU0lHICovCisKKyAgICBrYWN0aXZlID0gMTsKKyAgICBpZiAoc3N0 YXRlID09ICd4JykgewkJLyogSWYgZW50ZXJpbmcgc2VydmVyIG1vZGUsICovCisJZXh0ZXJuIGlu dCBob3djYWxsZWQ7CisJc2VydmVyID0gMTsJCQkvKiBzZXQgZmxhZywgKi8KKwlkZWJ1ZyhGMTAx LCJzZXJ2ZXIgYmFja2dyZCIsIiIsYmFja2dyZCk7CisJZGVidWcoRjEwMSwic2VydmVyIHF1aWV0 IiwiIixxdWlldCk7CisJZGVidWcoRjEwMCwiU0hPVUxEIE5PVCBTRUUgVEhJUyBJRiBJTiBCQUNL R1JPVU5EISIsIiIsMCk7CisJaWYgKGhvd2NhbGxlZCA9PSBJX0FNX1NTSFNVQikgewkvKiBhbmQg aXNzdWUgYXBwcm9wcmlhdGUgbWVzc2FnZS4gKi8KKwkgICAgdHRvbCgoQ0hBUiAqKSJLRVJNSVQg UkVBRFkgVE8gU0VSVkUuLi5cMDE1XDAxMiIsMjYpOworCX0gZWxzZSBpZiAoIWxvY2FsKSB7CisJ ICAgIGlmICghcXVpZXQgJiYgIWJhY2tncmQKKyNpZmRlZiBJS1NfT1BUSU9OCisgICAgICAgICAg ICAgICAgJiYgIVRFTE9QVF9NRShURUxPUFRfS0VSTUlUKSAvKiBVc2VyIHdhcyB0b2xkIGJ5IG5l Z290aWF0aW9uICovCisjZW5kaWYgLyogSUtTX09QVElPTiAqLworCQkpIHsKKwkJY29ub2xsKHNy dnR4dCk7CisJCWNvbm9sbCgiS0VSTUlUIFJFQURZIFRPIFNFUlZFLi4uIik7CisJICAgIH0KKwl9 IGVsc2UgeworCSAgICBjb25vbCgiRW50ZXJpbmcgc2VydmVyIG1vZGUgb24gIik7CisJICAgIGNv bm9sbCh0dG5hbWUpOworCSAgICBjb25vbGwoIlR5cGUgQ3RybC1DIHRvIHF1aXQuIik7CisJICAg IGlmIChzcnZkaXMpIGludG1zZygtMUwpOworI2lmZGVmIFRDUFNPQ0tFVAorI2lmbmRlZiBOT0xJ U1RFTgorCSAgICBpZiAobmV0d29yayAmJiB0Y3BzcmZkID4gMCkKKwkgICAgICB0dG9sKChDSEFS ICopIktFUk1JVCBSRUFEWSBUTyBTRVJWRS4uLlwwMTVcMDEyIiwyNik7CisjZW5kaWYgLyogTk9M SVNURU4gKi8KKyNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KKwl9CisgICAgfSBlbHNlCisgICAgICBz ZXJ2ZXIgPSAwOworI2lmZGVmIFZNUworICAgIGlmICghcXVpZXQgJiYgIWJhY2tncmQpICAgIC8q IFNvIG1lc3NhZ2UgZG9lc24ndCBvdmVyd3JpdGUgcHJvbXB0ICovCisgICAgICBjb25vbGwoIiIp OworICAgIGlmIChsb2NhbCkgY29ucmVzKCk7ICAgICAgIC8qIFNvIEN0cmwtQyB3aWxsIHdvcmsg Ki8KKyNlbmRpZiAvKiBWTVMgKi8KKy8qCisgIElmIGluIHJlbW90ZSBtb2RlLCBub3Qgc2h1c2hl ZCwgbm90IGluIGJhY2tncm91bmQsIGFuZCBhdCB0b3AgY29tbWFuZCBsZXZlbCwKKyAgaXNzdWUg YSBoZWxwZnVsIG1lc3NhZ2UgdGVsbGluZyB3aGF0IHRvIGRvLi4uCisqLworICAgIGlmICghbG9j YWwgJiYgIXF1aWV0ICYmICFiYWNrZ3JkKSB7CisJaWYgKHNzdGF0ZSA9PSAndicpIHsKKwkgICAg Y29ub2xsKCJSZXR1cm4gdG8geW91ciBsb2NhbCBLZXJtaXQgYW5kIGdpdmUgYSBTRU5EIGNvbW1h bmQuIik7CisJICAgIGNvbm9sbCgiIik7CisJICAgIGNvbm9sbCgiS0VSTUlUIFJFQURZIFRPIFJF Q0VJVkUuLi4iKTsKKwl9IGVsc2UgaWYgKHNzdGF0ZSA9PSAncycpIHsKKwkgICAgY29ub2xsKCJS ZXR1cm4gdG8geW91ciBsb2NhbCBLZXJtaXQgYW5kIGdpdmUgYSBSRUNFSVZFIGNvbW1hbmQuIik7 CisJICAgIGNvbm9sbCgiIik7CisJICAgIGNvbm9sbCgiS0VSTUlUIFJFQURZIFRPIFNFTkQuLi4i KTsKKwl9IGVsc2UgaWYgKCBzc3RhdGUgPT0gJ2cnIHx8IHNzdGF0ZSA9PSAncicgfHwgc3N0YXRl ID09ICdoJyB8fAorCQkgICAgc3N0YXRlID09ICdqJyB8fCBzc3RhdGUgPT0gJ2MnICkgeworCSAg ICBjb25vbGwoIlJldHVybiB0byB5b3VyIGxvY2FsIEtlcm1pdCBhbmQgZ2l2ZSBhIFNFUlZFUiBj b21tYW5kLiIpOworCSAgICBjb25vbGwoIiIpOworCSAgICBjb25vbGwoKHNzdGF0ZSA9PSAncicg fHwgc3N0YXRlID09ICdqJyB8fCBzc3RhdGUgPT0gJ2gnKSA/CisJCSAgICJLRVJNSVQgUkVBRFkg VE8gR0VULi4uIiA6CisJCSAgICJLRVJNSVQgUkVBRFkgVE8gU0VORCBTRVJWRVIgQ09NTUFORC4u LiIpOworCX0KKyAgICB9CisjaWZkZWYgQ09NTUVOVAorICAgIGlmICghbG9jYWwpIHNsZWVwKDEp OworI2VuZGlmIC8qIENPTU1FTlQgKi8KKy8qCisgIFRoZSAnd2FydCgpJyBmdW5jdGlvbiBpcyBn ZW5lcmF0ZWQgYnkgdGhlIHdhcnQgcHJvZ3JhbS4gIEl0IGdldHMgYQorICBjaGFyYWN0ZXIgZnJv bSB0aGUgaW5wdXQoKSByb3V0aW5lIGFuZCB0aGVuIGJhc2VkIG9uIHRoYXQgY2hhcmFjdGVyIGFu ZAorICB0aGUgY3VycmVudCBzdGF0ZSwgc2VsZWN0cyB0aGUgYXBwcm9wcmlhdGUgYWN0aW9uLCBh Y2NvcmRpbmcgdG8gdGhlIHN0YXRlCisgIHRhYmxlIGFib3ZlLCB3aGljaCBpcyB0cmFuc2Zvcm1l ZCBieSB0aGUgd2FydCBwcm9ncmFtIGludG8gYSBiaWcgY2FzZQorICBzdGF0ZW1lbnQuICBUaGUg ZnVuY3Rpb24gaXMgYWN0aXZlIGZvciBvbmUgdHJhbnNhY3Rpb24uCisqLworICAgIHJ0aW1lcigp OwkJCQkvKiBSZXNldCBlbGFwc2VkLXRpbWUgdGltZXIgKi8KKyNpZmRlZiBHRlRJTUVSCisgICAg cmZ0aW1lcigpOworI2VuZGlmIC8qIEdGVElNRVIgKi8KKyAgICByZXNldGMoKTsJCQkJLyogJiBv dGhlciBwZXItdHJhbnNhY3Rpb24gY291bnRlcnMuICovCisKKyAgICBkZWJ1ZyhGMTAxLCJwcm90 byBjYWxsaW5nIHdhcnQsIGp1c3RvbmUiLCIiLGp1c3RvbmUpOworCisgICAgd2FydCgpOwkJCQkv KiBFbnRlciB0aGUgc3RhdGUgdGFibGUgc3dpdGNoZXIuICovCisvKgorICBOb3RlOiB0aGUgZm9s bG93aW5nIGlzIG5lY2Vzc2FyeSBpbiBjYXNlIHdlIGhhdmUganVzdCBkb25lIGEgcmVtb3RlLW1v ZGUKKyAgZmlsZSB0cmFuc2ZlciwgaW4gd2hpY2ggY2FzZSB0aGUgY29udHJvbGxpbmcgdGVybWlu YWwgbW9kZXMgaGF2ZSBiZWVuCisgIGNoYW5nZWQgYnkgdHRwa3QoKS4gIEluIHBhcnRpY3VsYXIs IHNwZWNpYWwgY2hhcmFjdGVycyBsaWtlIEN0cmwtQyBhbmQKKyAgQ3RybC1cIG1pZ2h0IGhhdmUg YmVlbiB0dXJuZWQgb2ZmIChzZWUgdHRwa3QpLiAgU28gdGhpcyBjYWxsIHRvIHR0cmVzKCkgaXMK KyAgZXNzZW50aWFsLiAgSU1QT1JUQU5UOiByZXN0b3JlIGludGVycnVwdCBoYW5kbGVycyBmaXJz dCwgb3RoZXJ3aXNlIGFueQorICB0ZXJtaW5hbCBpbnRlcnJ1cHRzIHRoYXQgb2NjdXIgYmVmb3Jl IHRoaXMgaXMgZG9uZSBpbiB0aGUgbm9ybWFsIHBsYWNlCisgIGxhdGVyIHdpbGwgY2F1c2UgYSBj cmFzaC4KKyovCisjaWZkZWYgT1MyCisgICAgdHRyZXMoKTsJCQkJLyogUmVzZXQgdGhlIGNvbW11 bmljYXRpb24gZGV2aWNlICovCisjZWxzZQorICAgIGlmICghbG9jYWwpIHsKKwlzZXRpbnQoKTsJ CQkvKiBBcm0gaW50ZXJydXB0IGhhbmRsZXJzIEZJUlNUICovCisJbXNsZWVwKDUwMCk7CisJdHRy ZXMoKTsJCQkvKiBUaGVuIHJlc3RvcmUgdGVybWluYWwuICovCisgICAgfQorI2VuZGlmIC8qIE9T MiAqLworICAgIHh4c2NyZWVuKFNDUl9UQywwLDBMLCIiKTsJCS8qIFRyYW5zYWN0aW9uIGNvbXBs ZXRlICovCisgICAgeCA9IHF1aWV0OworICAgIHF1aWV0PTE7CisgICAgY2xzaWYoKTsJCQkJLyog RmFpbHNhZmUgaW4gY2FzZSB3ZSBtaXNzZWQgKi8KKyAgICBjbHNvZigxKTsJCQkJLyogYSBjYXNl IGluIHRoZSBzdGF0ZSBtYWNoaW5lLiAqLworICAgIHF1aWV0ID0geDsKKworICAgIGlmIChzZXJ2 ZXIpIHsJCQkvKiBCYWNrIGZyb20gcGFja2V0IHByb3RvY29sLiAqLworICAgIAlpZiAoIXF1aWV0 ICYmICFiYWNrZ3JkCisjaWZkZWYgSUtTRAorCSAgICAmJiAhaW5zZXJ2ZXIKKyNlbmRpZiAvKiBJ S1NEICovCisJICAgICkgewkJCQkvKiBHaXZlIGFwcHJvcHJpYXRlIG1lc3NhZ2UgKi8KKwkgICAg Y29ub2xsKCIiKTsKKwkgICAgY29ub2xsKCJDLUtlcm1pdCBzZXJ2ZXIgZG9uZSIpOworICAgICAg ICB9CisgICAgICAgIHNlcnZlciA9IDA7CQkJLyogTm90IGEgc2VydmVyIGFueSBtb3JlICovCisg ICAgfQorfQorCisvKiAgUyBHIEUgVCBJIE4gSSBUICAtLSAgSGFuZGxlIGluY29taW5nIEdFVC1D bGFzcyBwYWNrZXRzICAqLworCisvKgorICBSZXR1cm5zOgorICAgLTE6IE9uIGVycm9yCisgICAg MDogR0VUIHBhY2tldCBwcm9jZXNzZWQgT0sgLSByZWFkeSB0byBTZW5kLgorICAgIDE6IEV4dGVu ZGVkIEdFVCBwcm9jZXNzZWQgT0sgLSB3YWl0IGZvciBhbm90aGVyLgorKi8KK3N0YXRpYyBpbnQK K3NnZXRpbml0KHJlZ2V0LHhnZXQpIGludCByZWdldCwgeGdldDsgewkvKiBTZXJ2ZXIgZW5kIG9m IEdFVCBjb21tYW5kICovCisgICAgY2hhciAqIGZzID0gTlVMTDsJCQkvKiBQb2ludGVyIHRvIGZp bGVzcGVjICovCisgICAgaW50IGksIG4sIGRvbmUgPSAwOworI2lmZGVmIFBJUEVTRU5ECisgICAg ZXh0ZXJuIGludCB1c2VwaXBlcywgcGlwZXNlbmQ7CisjZW5kaWYgLyogUElQRVNFTkQgKi8KKyAg ICBleHRlcm4gaW50IG5vbGlua3M7CisKKyAgICBpZiAoIUVOQUJMRUQoZW5fZ2V0KSkgewkJLyog T25seSBpZiBub3QgZGlzYWJsZWQhICAqLworCWVycnBrdCgoQ0hBUiAqKSJHRVQgZGlzYWJsZWQi KTsKKwlyZXR1cm4oLTEpOworICAgIH0KKworICAgIC8qIE9LIHRvIHByb2NlZWQgKi8KKworICAg IG5vbGlua3MgPSByZWN1cnNpdmU7CisgICAgZmlsY250ID0gMDsKKworI2lmZGVmIFdIQVRBTUkK KyAgICAvKiBJZiB0aGV5IGFyZSBhbGlrZSB0aGlzIHdhcyBhbHJlYWR5IGRvbmUgaW4gd2hvYXJl d2UoKSAqLworICAgIGRlYnVnKEYxMDEsInNnZXRpbml0IHdoYXRydSIsIiIsd2hhdHJ1KTsKKyAg ICBpZiAod2hhdHJ1ICYgV01JX0ZMQUcpIHsJCS8qIERpZCB3ZSBnZXQgV0hBVEFNSSBpbmZvPyAq LworCWRlYnVnKEYxMDEsInNnZXRpbml0IGJpbmFyeSAoMSkiLCIiLGJpbmFyeSk7CisjaWZkZWYg Vk1TCisJaWYgKGJpbmFyeSAhPSBYWUZUX0kgJiYgYmluYXJ5ICE9IFhZRlRfTCkKKyNlbHNlCisj aWZkZWYgT1MyCisJICBpZiAoYmluYXJ5ICE9IFhZRlRfTCkKKyNlbmRpZiAvKiBPUzIgKi8KKyNl bmRpZiAvKiBWTVMgKi8KKwkgICAgYmluYXJ5ID0gKHdoYXRydSAmIFdNSV9GTU9ERSkgPyAvKiBZ ZXMsIHNldCBmaWxlIHR5cGUgKi8KKwkgICAgICBYWUZUX0IgOiBYWUZUX1Q7CS8qIGF1dG9tYXRp Y2FsbHkgKi8KKwlkZWJ1ZyhGMTAxLCJzZ2V0aW5pdCBiaW5hcnkgKDIpIiwiIixiaW5hcnkpOwor CWlmICghd2VhcmVhbGlrZSkKKwkgIGZuY252ID0gKHdoYXRydSAmIFdNSV9GTkFNRSkgPyAxIDog MDsgLyogQW5kIG5hbWUgY29udmVyc2lvbiAqLworICAgIH0KKyNlbmRpZiAvKiBXSEFUQU1JICov CisKKyAgICBmcyA9IChjaGFyICopc3J2Y21kOworICAgIHNydnB0ciA9IHNydmNtZDsJCQkvKiBQ b2ludCB0byBzZXJ2ZXIgY29tbWFuZCBidWZmZXIgKi8KKyAgICBkZWNvZGUocmRhdGFwLHB1dHNy diwwKTsJCS8qIERlY29kZSB0aGUgR0VUIGNvbW1hbmQgaW50byBpdCAqLworICAgIC8qIEFjY2Vw dCBtdWx0aXBsZSBmaWxlc3BlY3MgKi8KKyAgICBjbWFyZzIgPSAiIjsJCQkvKiBEb24ndCB1c2Ug Y21hcmcyICovCisgICAgY21hcmcgPSAiIjsJCQkJLyogRG9uJ3QgdXNlIGNtYXJnICovCisKKyAg ICBkb25lID0gMTsJCQkJLyogT25seSAxIHBhY2tldCBuZWVkZWQuLi4gKi8KKyAgICBpZiAoeGdl dCkgewkJCQkvKiBTcGVjaWFsIGRlY29kaW5nIGZvciBFeHRlbmRlZCBHRVQgKi8KKwljaGFyIEws IG5leHQsIGM7CQkvKiBQTFYgaXRlbXMgKi8KKwlpbnQgbGVuLCB2YWw7CQkJLyogTW9yZSBQTFYg aXRlbXMgKi8KKwljaGFyICogcCA9IChjaGFyICopc3J2Y21kOwkvKiBTdHJpbmcgdG8gZGVjb2Rl ICovCisKKwlkb25lID0gMDsJCQkvKiBNYXliZSBtb3JlIHBhY2tldHMgbmVlZGVkICovCisJZnMg PSBOVUxMOwkJCS8qIFdlIGRvbid0IGtub3cgdGhlIGZpbGVzcGVjIHlldCAqLworCWMgPSAqcCsr OwkJCS8qIEdldCBmaXJzdCBwYXJhbWV0ZXIgKi8KKworCXdoaWxlIChjKSB7CQkJLyogRm9yIGFs bCBwYXJhbWV0ZXJzLi4uICovCisJICAgIGRlYnVnKEYwMDAsInNnZXRpbml0IGMiLCIiLGMpOwor CSAgICBMID0gKnArKzsJCQkvKiBHZXQgbGVuZ3RoICovCisJICAgIGlmIChMID49IFNQKQkJLyog RGVjb2RlIGxlbmd0aCAqLworCSAgICAgIGxlbiA9IHh1bmNoYXIoTCk7CisJICAgIGVsc2UgaWYg KGMgPT0gJ0AnKSB7CS8qIEFsbG93IG1pc3NpbmcgRU9QIGxlbmd0aCBmaWVsZCAqLworCQlsZW4g PSAwOworCSAgICB9IGVsc2UgeworCQlsZW4gPSAoeHVuY2hhcigqcCsrKSAqIDk1KTsKKwkJbGVu ICs9IHh1bmNoYXIoKnArKyk7CisJICAgIH0KKwkgICAgZGVidWcoRjEwMSwic2dldGluaXQgbGVu IiwiIixsZW4pOworCSAgICBuZXh0ID0gKihwK2xlbik7CQkvKiBHZXQgbmV4dCBwYXJhbWV0ZXIg Ki8KKwkgICAgKihwK2xlbikgPSBOVUw7CQkvKiBaZXJvIGl0IG91dCB0byB0ZXJtaW5hbCB2YWx1 ZSAqLworCSAgICBkZWJ1ZyhGMTEwLCJzZ2V0aW5pdCBwIixwLDApOworCSAgICBzd2l0Y2ggKGMp IHsJCS8qIERvIHRoZSBwYXJhbWV0ZXIgKi8KKwkgICAgICBjYXNlICdPJzoJCQkvKiBHRVQgT3B0 aW9ucyAqLworCQl2YWwgPSBhdG9pKHApOwkJLyogQ29udmVydCB0byBpbnQgKi8KKwkJZGVidWco RjEwMSwic2dldGluaXQgTyB2YWwiLCIiLHZhbCk7CisJCWlmICh2YWwgJiBHT1BUX0RFTCkgbW92 aW5nID0gMTsKKwkJaWYgKHZhbCAmIEdPUFRfUkVTKSByZWdldCA9IDE7CisJCWlmICh2YWwgJiBH T1BUX1JFQykgeworCQkgICAgcmVjdXJzaXZlID0gMTsKKwkJICAgIG5vbGlua3MgPSAyOworCQkg ICAgaWYgKGZuc3BhdGggPT0gUEFUSF9PRkYpCisJCSAgICAgIGZuc3BhdGggPSBQQVRIX1JFTDsK KwkJfQorCQlicmVhazsKKwkgICAgICBjYXNlICdNJzoJCQkvKiBUcmFuc2ZlciBNb2RlICovCisJ CXZhbCA9IGF0b2kocCk7CisJCWRlYnVnKEYxMDEsInNnZXRpbml0IE0gdmFsIiwiIix2YWwpOwor CQlpZiAodmFsIDwgMSkKKwkJICBicmVhazsKKwkJcGF0dGVybnMgPSAwOwkJLyogVGFrZXMgcHJl Y2VkZW5jZSBvdmVyIHBhdHRlcm5zICovCisJCWZpbGVwZWVrID0gMDsJCS8qIGFuZCBGSUxFIFND QU4gKi8KKwkJaWYgKHZhbCA9PSBHTU9EX1RYVCkgYmluYXJ5ID0gWFlGVF9UOyAvKiBUZXh0ICov CisJCWlmICh2YWwgPT0gR01PRF9CSU4pIGJpbmFyeSA9IFhZRlRfQjsgLyogQmluYXJ5ICovCisJ CWlmICh2YWwgPT0gR01PRF9MQkwpIGJpbmFyeSA9IFhZRlRfTDsgLyogTGFiZWxlZCAqLworCQli cmVhazsKKwkgICAgICBjYXNlICdGJzoJCQkvKiBGaWxlbmFtZSAqLworCQlmcyA9IHA7CisJCWRl YnVnKEYxMTAsInNnZXRpbml0IGZpbGVuYW1lIixmcywwKTsKKwkJYnJlYWs7CisJICAgICAgY2Fz ZSAnQCc6CQkJLyogRW5kIE9mIFBhcmFtZXRlcnMgKi8KKwkJZG9uZSA9IDE7CisJCWRlYnVnKEYx MDAsInNnZXRpbml0IEVPUCIsIiIsMCk7CisJCWJyZWFrOworCSAgICAgIGRlZmF1bHQ6CisJCWVy cnBrdCgoQ0hBUiAqKSJVbmtub3duIEdFVCBQYXJhbWV0ZXIiKTsKKwkJZGVidWcoRjEwMCwic2dl dGluaXQgdW5rbm93biBwYXJhbWV0ZXIiLCIiLDApOworCQlyZXR1cm4oLTEpOworCSAgICB9CisJ ICAgIHAgKz0gKGxlbiArIDEpOworCSAgICBjID0gbmV4dDsKKwl9CisgICAgfQorICAgIGlmICgh ZnMpIGZzID0gIiI7CQkJLyogQSBmaWxlbmFtZSBpcyByZXF1aXJlZCAqLworICAgIGlmICgqZnMp IHsKKwloYXZlZnMgPSAxOworCW4gPSAwOwkJCQkvKiBDaGVjayBmb3IgcXVvdGVkIG5hbWUgKi8K KwlpZiAoKG4gPSBzdHJsZW4oZnMpKSA+IDEpIHsKKwkgICAgLyogTm90ZTogdGhpcyBkb2VzIG5v dCBhbGxvdyBmb3IgbXVsdGlwbGUgcXVvdGVkIG5hbWVzICovCisJICAgIGlmICgoZnNbMF0gPT0g J3snICYmIGZzW24tMV0gPT0gJ30nKSB8fAorCQkoZnNbMF0gPT0gJyInICYmIGZzW24tMV0gPT0g JyInKSkgeworCQlmc1tuLTFdID0gJ1wwJzsKKwkJZnMrKzsKKwkJZGVidWcoRjExMSwic2dldGlu aXQgdW5xdW90ZWQgZmlsZW5hbWUiLGZzLG4pOworCSAgICB9IGVsc2UKKwkgICAgICBuID0gMDsJ CQkvKiBUaGlzIG1lYW5zIG5vIHF1b3RpbmcgKi8KKwl9CisKKyNpZmRlZiBQSVBFU0VORAorCWRl YnVnKEYxMTEsInNnZXRpbml0Iixmcyx1c2VwaXBlcyk7CisJaWYgKHVzZXBpcGVzICYmIEVOQUJM RUQoZW5faG9zKSAmJiAqZnMgPT0gJyEnKSB7CisJICAgIGNtYXJnID0gZnMgKyAxOwkJLyogUG9p bnQgcGFzdCB0aGUgYmFuZyAqLworCSAgICAqZnMgPSBOVUw7CisJICAgIG5maWxzID0gLTE7CisJ ICAgIHBpcGVzZW5kID0gMTsKKwkgICAgZGVidWcoRjExMSwic2dldGluaXQgcGlwZXNlbmQiLGNt YXJnLHBpcGVzZW5kKTsKKwl9CisJaWYgKCFwaXBlc2VuZCkgewkJLyogSWYgaXQncyBub3QgYSBw aXBlICovCisjZW5kaWYgLyogUElQRVNFTkQgKi8KKwkgICAgaWYgKG4gPT0gMCkgewkJLyogSWYg dGhlIG5hbWUgd2FzIG5vdCBxdW90ZWQgKi8KKyNpZm5kZWYgTk9NU0VORAorCQluZmlscyA9IGZu cGFyc2UoZnMpOwkvKiBBbGxvdyBpdCB0byBiZSBhIGxpc3Qgb2YgbmFtZXMgKi8KKwkJZGVidWco RjExMSwic2dldGluaXQgQSIsZnMsbmZpbHMpOworI2lmZGVmIENPTU1FTlQKKy8qIFRoaXMgZG9l c24ndCB3b3JrIGlmIGEgR0VULVBBVEggaXMgc2V0LiAqLworCQlpZiAobmZpbHMgPT0gMSAmJiAh aXN3aWxkKGZzKSkgeyAvKiBTaW5nbGUgZmlsZSAqLworCQkgICAgY2hhciAqIG07CisJCSAgICBp ZiAoKHggPSB6Y2hraShmcykpIDwgMCkgeyAvKiBDaGVjayBpZiBpdCdzIHNlbmRhYmxlICovCisJ CQlzd2l0Y2ggKHgpIHsKKwkJCSAgY2FzZSAtMTogbSA9ICJGaWxlIG5vdCBmb3VuZCI7IGJyZWFr OworCQkJICBjYXNlIC0yOiBtID0gIk5vdCBhIHJlZ3VsYXIgZmlsZSI7IGJyZWFrOworCQkJICBj YXNlIC0zOiBtID0gIlJlYWQgYWNjZXNzIGRlbmllZCI7IGJyZWFrOworCQkJfQorCQkJZXJycGt0 KChDSEFSICopbSk7CisJCQlyZXR1cm4oLTEpOworCQkgICAgfQorCQl9CisjZW5kaWYgLyogQ09N TUVOVCAqLworCSAgICB9IGVsc2UgewkJCS8qIElmIGl0IHdhcyBxdW90ZWQgKi8KKyNlbmRpZiAv KiBOT01TRU5EICovCisJCW56eG9wdHMgPSAwOworI2lmZGVmIFVOSVhPUk9TSworCQlpZiAobWF0 Y2hkb3QpICBuenhvcHRzIHw9IFpYX01BVENIRE9UOworI2VuZGlmIC8qIFVOSVhPUk9TSyAqLwor CQlpZiAocmVjdXJzaXZlKSBuenhvcHRzIHw9IFpYX1JFQ1VSU0U7CisJCS8qIFRyZWF0IGFzIGEg c2luZ2xlIGZpbGVzcGVjICovCisJCW5maWxzID0gMCAtIG56eHBhbmQoZnMsbnp4b3B0cyk7CisJ CWRlYnVnKEYxMTEsInNnZXRpbml0IEIiLGZzLG5maWxzKTsKKwkJY21hcmcgPSBmczsKKwkgICAg fQorI2lmZGVmIFBJUEVTRU5ECisJfQorI2VuZGlmIC8qIFBJUEVTRU5EICovCisgICAgfQorICAg IGlmICghZG9uZSkgewkJCS8qIE5lZWQgbW9yZSBPIHBhY2tldHMuLi4gKi8KKwlkZWJ1ZyhGMTAw LCJzZ2V0aW5pdCBPLVBhY2tldCBUQkMiLCIiLDApOyAvKiBUbyBCZSBDb250aW51ZWQgKi8KKwly ZXR1cm4oMSk7CisgICAgfQorICAgIGRlYnVnKEYxMDAsInNnZXRpbml0IE8tUGFja2V0IGRvbmUg LSBoYXZlZnMiLCIiLGhhdmVmcyk7CisgICAgaWYgKCFoYXZlZnMpIHsJCQkvKiBEb25lIC0gbWFr ZSBzdXJlIHdlIGhhdmUgZmlsZW5hbWUgKi8KKwllcnJwa3QoKENIQVIgKikiR0VUIHdpdGhvdXQg ZmlsZW5hbWUiKTsKKwlyZXR1cm4oLTEpOworICAgIH0KKyAgICBmcmVlcnBrdCh3aW5sbyk7Cisg ICAgd2lubG8gPSAwOwkJCQkvKiBCYWNrIHRvIHBhY2tldCAwIGFnYWluLiAqLworICAgIGRlYnVn KEYxMDEsInNnZXRpbml0IHdpbmxvIiwiIix3aW5sbyk7CisgICAgbmFrc3RhdGUgPSAwOwkJCS8q IE5vdyBJJ20gdGhlIHNlbmRlciEgKi8KKyAgICBpZiAocmVnZXQpIHNlbmRtb2RlID0gU01fUkVT RU5EOworICAgIGlmIChzaW5pdCgpID4gMCkgewkJCS8qIFNlbmQgU2VuZC1Jbml0ICovCisjaWZk ZWYgU1RSRUFNSU5HCisJaWYgKCFzdHJlYW1pbmcpCisjZW5kaWYgLyogU1RSRUFNSU5HICovCisJ ICB0aW1pbnQgPSBjaGt0aW1vKHJ0aW1vLHRpbWVmKTsgLyogU3dpdGNoIHRvIHBlci1wYWNrZXQg dGltZXIgKi8KKwlyZXR1cm4oMCk7CQkJLyogSWYgc3VjY2Vzc2Z1bCwgc3dpdGNoIHN0YXRlICov CisgICAgfSBlbHNlIHJldHVybigtMSk7CQkJLyogRWxzZSBiYWNrIHRvIHNlcnZlciBjb21tYW5k IHdhaXQgKi8KK30KKworI2Vsc2UgIC8qIE5PWEZFUiAqLworCisjaW5jbHVkZSAiY2tjZGViLmgi CisKK1ZPSUQKK3Byb3RvKCkgeworICAgIGV4dGVybiBpbnQgc3VjY2VzczsKKyAgICBzdWNjZXNz ID0gMDsKK30KKyNlbmRpZiAvKiBOT1hGRVIgKi8KCmRpZmYgLS1naXQgYS9ja2VybWl0LTkuMC4z MDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrY3NpZy5oIGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxk L2NrZXJtaXQtOS4wLjMwMi9ja2NzaWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwLi5mMGJhODVjCi0tLSAvZGV2L251bGwKKysrIGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2Nr ZXJtaXQtOS4wLjMwMi9ja2NzaWcuaApAQCAtMCwwICsxLDIxNCBAQAorLyogIEMgSyBDIFMgSSBH IC4gSCAgKi8KKworLyogIERlZmluaXRpb25zIGFuZCBwcm90b3R5cGVzIGZvciBzaWduYWwgaGFu ZGxpbmcgICovCisKKy8qCisgIEF1dGhvcjogSmVmZnJleSBFIEFsdG1hbiAoamFsdG1hbkBzZWN1 cmUtZW5kcG9pbnRzLmNvbSksCisgIFNlY3VyZSBFbmRwb2ludHMgSW5jLiwgTmV3IFlvcmsgQ2l0 eS4KKworICBDb3B5cmlnaHQgKEMpIDE5ODUsIDIwMDksCisgICAgVHJ1c3RlZXMgb2YgQ29sdW1i aWEgVW5pdmVyc2l0eSBpbiB0aGUgQ2l0eSBvZiBOZXcgWW9yay4KKyAgICBBbGwgcmlnaHRzIHJl c2VydmVkLiAgU2VlIHRoZSBDLUtlcm1pdCBDT1BZSU5HLlRYVCBmaWxlIG9yIHRoZQorICAgIGNv cHlyaWdodCB0ZXh0IGluIHRoZSBja2NtYWkuYyBtb2R1bGUgZm9yIGRpc2NsYWltZXIgYW5kIHBl cm1pc3Npb25zLgorKi8KKyNpZmRlZiBPUzIKKyNpZm5kZWYgTlQKKyNpZm5kZWYgX19IRVZfXyAg ICAgICAgICAgICAgICAgLyogSU5DTF9TRU1BUEhPUkUgbWF5IGFsc28gZGVmaW5lIEhFViAqLwor I2RlZmluZSBfX0hFVl9fCit0eXBlZGVmICBVTE9ORyAgICBIRVY7ICAgICAgICAgICAgICAgICAg LyogaGV2ICovCit0eXBlZGVmICBIRVYgICAgICAqUEhFVjsKKyNlbmRpZiAvKiBfX0hFVl9fICov CisjZW5kaWYgLyogTlQgKi8KK3N0cnVjdCBfdGhyZWFkaW5mbyB7CisgICAgaW50IGludXNlOwor ICAgIGludCBjaGlsZDsKKyAgICBpbnQgc2libGluZzsKKyNpZmRlZiBOVAorICAgIEhBTkRMRSBp ZDsKKyAgICBIQU5ETEUgaGFuZGxlOworICAgIEhBTkRMRSBwYXJlbnQ7CisgICAgSEFORExFIENv bXBsZXRpb25TZW0gOworICAgIEhBTkRMRSBEaWVTZW0gOworI2Vsc2UgLyogTlQgKi8KKyAgICBU SUQgaWQ7CisgICAgVElEIHBhcmVudDsKKyAgICBIRVYgQ29tcGxldGlvblNlbTsKKyAgICBIRVYg RGllU2VtOworI2VuZGlmIC8qIE5UICovCit9OworI2VuZGlmIC8qIE9TMiAqLworCisjaWZkZWYg Q0tfQU5TSUMKK3R5cGVkZWYgU0lHVFlQICgqY2tfc2lnZnVuYykodm9pZCAqKTsKK3R5cGVkZWYg U0lHVFlQICgqY2tfc2lnaGFuZCkoaW50KTsKKyNlbHNlCit0eXBlZGVmIFNJR1RZUCAoKmNrX3Np Z2Z1bmMpKCk7Cit0eXBlZGVmIFNJR1RZUCAoKmNrX3NpZ2hhbmQpKCk7CisjZW5kaWYgLyogQ0tf QU5TSUMgKi8KKworLyogTWFjcm9zIGZvciBQT1NJWCB2cyBvbGQtc3R5bGUgc2lnbmFsIGhhbmRs aW5nLiAqLworCisjaWZkZWYgQ0tfUE9TSVhfU0lHCit0eXBlZGVmIHNpZ2ptcF9idWYgY2tqbXBi dWY7CisjZWxzZQorI2lmZGVmIE5UCisjZGVmaW5lIE5PQ1JZUFQKKyNpbmNsdWRlIDx3aW5kb3dz Lmg+CisjaWZkZWYgTlRBU00KK3R5cGVkZWYgc3RydWN0IHsKKyAgICBDT05URVhUIGNvbnRleHQ7 CisgICAgRFdPUkQgcmV0Y29kZTsKK30gY2tqbXBidWY7CisjZWxzZSAvKiBOVEFTTSAqLwordHlw ZWRlZiBqbXBfYnVmIGNram1wYnVmOworI2VuZGlmIC8qIE5UQVNNICovCisjZWxzZQordHlwZWRl ZiBqbXBfYnVmIGNram1wYnVmOworI2VuZGlmCisjZW5kaWYgLyogQ0tfUE9TSVhfU0lHICovCisv KgorICBTdXBwb3NlIHlvdSB3YW50IHRvIHBhc3MgdGhlIGFkZHJlc3Mgb2YgYSBqbXBfYnVmIGJh ciB0byBhIGZ1bmN0aW9uIGZvby4KKyAgU2luY2Ugam1wX2J1ZiBpcyBub3JtYWxseSBkZWZpbmVk ICh0eXBlZGVmJ2QpIGFzIGFuIGFycmF5LCB5b3Ugd291bGQgZG8KKyAgaXQgbGlrZSB0aGlzOiAg Zm9vKGJhciksIHdoZXJlIGZvbyA9IGZvbyhqbXBfYnVmIGJhcikuICBCdXQgc3VwcG9zZSBhCisg IGptcF9idWYgaXMgKHNheSkgYSBzdHJ1Y3QgcmF0aGVyIHRoYW4gYW4gYXJyYXkuICBUaGVuIHlv dSBtdXN0IGRvCisgIGZvbygmYmFyKSB3aGVyZSBmb28gaXMgZm9vKGptcF9idWYgKiBiYXIpLiAg VGhpcyBpcyBjb250cm9sbGVkIGhlcmUgaW4KKyAgdGhlIHRyYWRpdGlvbmFsIGZhc2hpb24sIGJ5 IGlmZGVmcy4gIEJ5IGRlZmF1bHQsIHdlIGFzc3VtZSB0aGF0IGptcF9idWYKKyAgaXMgYW4gYXJy YXkuICBEZWZpbmUgdGhlIHN5bWJvbCBKQk5PVEFSUkFZIGlmIGptcF9idWYgaXMgbm90IGFuIGFy cmF5LgorKi8KKyNpZm5kZWYgSkJOT1RBUlJBWQorI2lmZGVmIE5UCisjZGVmaW5lIEpCTk9UQVJS QVkKKyNlbmRpZiAvKiBOVCAqLworI2VuZGlmIC8qIEpCTk9UQVJSQVkgKi8KKworI2lmZGVmIEpC Tk9UQVJSQVkKK3R5cGVkZWYgY2tqbXBidWYgKiBja2pwdHI7CisjZGVmaW5lIGNramFkZHIoeCkg JiB4CisjZGVmaW5lIGNramRyZWYoeCkgKiB4CisjaWZkZWYgQ0tfUE9TSVhfU0lHCisjZGVmaW5l IGNrc2V0am1wKHgpIHNpZ3NldGptcCh4LDEpCisjZGVmaW5lIGNrbG9uZ2ptcCh4LHkpIHNpZ2xv bmdqbXAoeCx5KQorI2Vsc2UKKyNpZmRlZiBOVAorX19pbmxpbmUgaW50Citja19paCh2b2lkKSB7 CisgICAgZXh0ZXJuIGludCBUbHNJbmRleDsKKyNpZmRlZiBOVFNJRworICAgIHN0cnVjdCBfdGhy ZWFkaW5mbyAqIHRocmVhZGluZm87CisgICAgdGhyZWFkaW5mbyA9IChzdHJ1Y3QgX3RocmVhZGlu Zm8gKikgVGxzR2V0VmFsdWUoVGxzSW5kZXgpOworICAgIGlmICh0aHJlYWRpbmZvKSB7CisgICAg ICAgIGlmIChXYWl0QW5kUmVzZXRTZW0odGhyZWFkaW5mby0+RGllU2VtLDApKSB7CisgICAgICAg ICAgICBja1RocmVhZERpZSh0aHJlYWRpbmZvKTsKKyAgICAgICAgICAgIHJldHVybiAxOyAgICAg ICAgICAgICAgICAgICAvKiBUaGlzIHNob3VsZCBuZXZlciBleGVjdXRlICovCisgICAgICAgIH0K KyAgICB9CisjaWZkZWYgQ09NTUVOVAorICAgIGVsc2UgZGVidWcoIEYxMDAsICJja19paCgpIHRo cmVhZGluZm8gaXMgTlVMTCIsIiIsMCk7CisjZW5kaWYgLyogQ09NTUVOVCAqLworI2VuZGlmIC8q IE5UU0lHICovCisgICAgcmV0dXJuIDA7Cit9CisjaWZkZWYgTlRTSUcKKyNkZWZpbmUgY2tzZXRq bXAoeCkgc2V0am1wKHgpCisjZGVmaW5lIGNrbG9uZ2ptcCh4LHkpIGxvbmdqbXAoeCx5KQorI2Vs c2UgLyogTlRTSUcgKi8KKyNpZmRlZiBOVEFTTQorX19pbmxpbmUgRFdPUkQKK2Nrc2V0am1wKCBj a2pwdHIgam1wICkgeworICAgIGV4dGVybiBpbnQgaXNpbnRlcnJ1cHRlZDsKKyAgICBqbXAtPnJl dGNvZGUgPSAwOworICAgIG1lbXNldCggJmptcC0+Y29udGV4dCwgMCwgc2l6ZW9mKENPTlRFWFQp ICk7CisgICAgam1wLT5jb250ZXh0LkNvbnRleHRGbGFncyA9IENPTlRFWFRfRlVMTCA7CisgICAg aWYgKCAhR2V0VGhyZWFkQ29udGV4dCggR2V0Q3VycmVudFRocmVhZCgpLCAmam1wLT5jb250ZXh0 ICkgKQorICAgICAgZGVidWcoIEYxMDEsICJja3NldGptcCBHZXRUaHJlYWRDb250ZXh0IGZhaWxl ZCIsIiIsR2V0TGFzdEVycm9yKCkpOworICAgIGRlYnVnKEYxMDEsImNrc2V0am1wIHJldHVybnMi LCIiLGptcC0+cmV0Y29kZSk7CisgICAgaXNpbnRlcnJ1cHRlZCA9IDA7CisgICAgcmV0dXJuIChq bXAtPnJldGNvZGUpOworfQorCitfX2lubGluZSB2b2lkCitja2xvbmdqbXAoIGNranB0ciBqbXAs IGludCByZXR2YWwgKSB7CisgICAgZXh0ZXJuIEhBTkRMRSB0aWRDb21tYW5kOworICAgIGV4dGVy biBpbnQgdHR5ZmQsIG1kbXR5cCA7CisgICAgZXh0ZXJuIERXT1JEIENvbW1hbmRJRDsKKyAgICBl eHRlcm4gaW50IGlzaW50ZXJydXB0ZWQ7CisKKyAgICBjb25ub2koKTsKKyAgICBpc2ludGVycnVw dGVkID0gMTsKKyAgICBqbXAtPnJldGNvZGUgPSAoIHJldHZhbCA/IHJldHZhbCA6IDEgKTsKKyAg ICBkZWJ1ZyhGMTAxLCJhYm91dCB0byBTZXRUaHJlYWRDb250ZXh0IGZvciB0aHJlYWQiLCIiLCBD b21tYW5kSUQpOworICAgIGRlYnVnKEYxMDEsImZyb20gVGhyZWFkIiwiIixHZXRDdXJyZW50VGhy ZWFkSWQoKSk7CisgICAgaWYgKCBtZG10eXAgPj0gMCApIHsKKyAgICAgICAgUHVyZ2VDb21tKCAo SEFORExFKSB0dHlmZCwgUFVSR0VfVFhBQk9SVCB8IFBVUkdFX1JYQUJPUlQgKTsKKyAgICB9Cisg ICAgaWYgKFNldFRocmVhZENvbnRleHQoIHRpZENvbW1hbmQsICZqbXAtPmNvbnRleHQgKSkKKyAg ICAgIGRlYnVnKEYxMDAsImNrbG9uZ2ptcCBTZXRUaHJlYWRDb250ZXh0IHN1Y2Nlc3MiLCIiLDAp OworICAgIGVsc2UKKyAgICAgIGRlYnVnKEYxMDEsImNrbG9uZ2ptcCBTZXRUaHJlYWRDb250ZXh0 IGZhaWxlZCIsIiIsR2V0TGFzdEVycm9yKCkpOworICAgIG1zbGVlcCg1MCk7CisgICAgY21pbmko MSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVzZXQgY29tbWFuZCBwYXJzZXIgKi8K KyAgICBwdXRrZXkoMTMpOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTdHVmZiBhIGNhcnJp YWdlIHJldHVybiAqLworICAgLyogUG9zdEV2ZW50QXZhaWxTZW0oKTsgKi8KK30KKyNlbHNlIC8q IE5UQVNNICovCit2b2lkIGNyYXNoKCB2b2lkICkgOworI2RlZmluZSBja3NldGptcCh4KSBzZXRq bXAoeCkKK19faW5saW5lIHZvaWQKK2NrbG9uZ2ptcCggY2tqcHRyIGptcCwgaW50IHJldHZhbCAp IHsKKyAgICBleHRlcm4gSEFORExFIHRpZENvbW1hbmQ7CisgICAgZXh0ZXJuIGludCB0dHlmZCwg bWRtdHlwOworICAgIGV4dGVybiBEV09SRCBDb21tYW5kSUQ7CisgICAgQ09OVEVYVCBjb250ZXh0 OworCisgICAgaWYgKCBtZG10eXAgPj0gMCApIHsKKyAgICAgICAgUHVyZ2VDb21tKCAoSEFORExF KSB0dHlmZCwgUFVSR0VfVFhBQk9SVCB8IFBVUkdFX1JYQUJPUlQgKSA7CisgICAgfQorICAgIG1l bXNldCggJmNvbnRleHQsIDAsIHNpemVvZihDT05URVhUKSApOworICAgIGNvbnRleHQuQ29udGV4 dEZsYWdzID0gQ09OVEVYVF9GVUxMOworICAgIGlmICggIUdldFRocmVhZENvbnRleHQoIHRpZENv bW1hbmQsICZjb250ZXh0ICkgKQorICAgICAgZGVidWcoIEYxMDEsICJja2xvbmdqbXAgR2V0VGhy ZWFkQ29udGV4dCBmYWlsZWQiLCIiLEdldExhc3RFcnJvcigpKTsKKworICAgIC8qIEludmFsaWRh dGUgdGhlIGluc3RydWN0aW9uIHBvaW50ZXIgKi8KKyAgICBjb250ZXh0LkVpcCA9ICAodW5zaWdu ZWQgbG9uZykgY3Jhc2g7CisKKyAgICBkZWJ1ZyhGMTAxLCJhYm91dCB0byBTZXRUaHJlYWRDb250 ZXh0IGZvciB0aHJlYWQiLCIiLCBDb21tYW5kSUQpOworICAgIGRlYnVnKEYxMDEsImZyb20gVGhy ZWFkIiwiIixHZXRDdXJyZW50VGhyZWFkSWQoKSk7CisgICAgaWYgKFNldFRocmVhZENvbnRleHQo IHRpZENvbW1hbmQsICZjb250ZXh0ICkpCisgICAgICBkZWJ1ZyhGMTAwLCJja2xvbmdqbXAgU2V0 VGhyZWFkQ29udGV4dCBzdWNjZXNzIiwiIiwwKTsKKyAgICBlbHNlCisgICAgICBkZWJ1ZyhGMTAx LCJja2xvbmdqbXAgU2V0VGhyZWFkQ29udGV4dCBmYWlsZWQiLCIiLEdldExhc3RFcnJvcigpKTsK K30KKyNlbmRpZiAvKiBOVEFTTSAqLworI2VuZGlmIC8qIE5UU0lHICovCisjZWxzZSAvKiBOVCAq LworI2RlZmluZSBja3NldGptcCh4KSBzZXRqbXAoeCkKKyNkZWZpbmUgY2tsb25nam1wKHgseSkg bG9uZ2ptcCh4LHkpCisjZW5kaWYgLyogTlQgKi8KKyNlbmRpZiAvKiBDS19QT1NJWF9TSUcgKi8K KyNlbHNlICAvKiBqbXBfYnVmIGlzIGFuIGFycmF5ICovCit0eXBlZGVmIGNram1wYnVmIGNranB0 cjsKKyNkZWZpbmUgY2tqYWRkcih4KSB4CisjZGVmaW5lIGNramRyZWYoeCkgeAorI2lmZGVmIENL X1BPU0lYX1NJRworI2RlZmluZSBja3NldGptcCh4KSBzaWdzZXRqbXAoeCwxKQorI2RlZmluZSBj a2xvbmdqbXAoeCx5KSBzaWdsb25nam1wKHgseSkKKyNlbHNlCisjZGVmaW5lIGNrc2V0am1wKHgp IHNldGptcCh4KQorI2RlZmluZSBja2xvbmdqbXAoeCx5KSBsb25nam1wKHgseSkKKyNlbmRpZiAv KiBDS19QT1NJWF9TSUcgKi8KKyNlbmRpZiAvKiBKQk5PVEFSUkFZICovCisKK19QUk9UT1RZUCgg aW50IGNjX2V4ZWN1dGUsIChja2pwdHIsIGNrX3NpZ2Z1bmMsIGNrX3NpZ2Z1bmMpICk7CitfUFJP VE9UWVAoIGludCBhbHJtX2V4ZWN1dGUsCisgICAgICAgICAgKGNranB0ciwKKyAgICAgICAgICAg aW50IC8qIHRpbW8gKi8sCisgICAgICAgICAgIGNrX3NpZ2hhbmQgLyogaGFuZGxlciAqLywKKyAg ICAgICAgICAgY2tfc2lnZnVuYywgY2tfc2lnZnVuYykgKTsKK19QUk9UT1RZUCggaW50IGNjX2Fs cm1fZXhlY3V0ZSwKKyAgICAgICAgICAoY2tqcHRyLAorICAgICAgICAgICBpbnQgLyogdGltbyAq LywKKyAgICAgICAgICAgY2tfc2lnaGFuZCAvKiBoYW5kbGVyICovLAorICAgICAgICAgICBja19z aWdmdW5jLAorICAgICAgICAgICBja19zaWdmdW5jKSApOworCisvKiBFbmQgb2YgY2t1c2lnLmgg Ki8KCmRpZmYgLS1naXQgYS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2Nr Y3NzbC5oIGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2Nzc2wuaApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTMxZjEyCi0tLSAvZGV2L251bGwK KysrIGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2Nzc2wuaApAQCAt MCwwICsxLDEyNiBAQAorI2lmZGVmIENLX1NTTAorI2lmbmRlZiBDS19BTlNJQworI2RlZmluZSBO T1BST1RPCisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKyNpbmNsdWRlICJiaW8uaCIKKyNpbmNsdWRl ICJidWZmZXIuaCIKKyNpbmNsdWRlICJ4NTA5LmgiCisjaW5jbHVkZSAicGVtLmgiCisjaW5jbHVk ZSAic3NsLmgiCisKK2V4dGVybiBCSU8gKmJpb19lcnI7CitleHRlcm4gU1NMICpzc2xfY29uOwor ZXh0ZXJuIFNTTF9DVFggKnNzbF9jdHg7CitleHRlcm4gaW50IHNzbF9kZWJ1Z19mbGFnOworZXh0 ZXJuIGludCBzc2xfb25seV9mbGFnOworZXh0ZXJuIGludCBzc2xfYWN0aXZlX2ZsYWc7CitleHRl cm4gaW50IHNzbF92ZXJpZnlfZmxhZzsKK2V4dGVybiBpbnQgc3NsX3NlY3VyZV9mbGFnOworZXh0 ZXJuIGludCBzc2xfdmVyYm9zZV9mbGFnOworZXh0ZXJuIGludCBzc2xfZGlzYWJsZWRfZmxhZzsK K2V4dGVybiBpbnQgc3NsX2NlcnRfcmVxdWlyZWQ7CitleHRlcm4gaW50IHNzbF9jZXJ0c29rX2Zs YWc7CitleHRlcm4gaW50IHNzbF9kdW1teV9mbGFnOworCitleHRlcm4gY2hhciAqc3NsX2xvZ19m aWxlOworZXh0ZXJuIGNoYXIgKnNzbF9yc2FfY2VydF9maWxlOworZXh0ZXJuIGNoYXIgKnNzbF9y c2Ffa2V5X2ZpbGU7CitleHRlcm4gY2hhciAqc3NsX2RzYV9jZXJ0X2ZpbGU7CitleHRlcm4gY2hh ciAqc3NsX2RoX2tleV9maWxlOworZXh0ZXJuIGNoYXIgKnNzbF9jaXBoZXJfbGlzdDsKKworZXh0 ZXJuIFNTTF9DVFggKnRsc19jdHg7CitleHRlcm4gU1NMICp0bHNfY29uOworZXh0ZXJuIGludCB0 bHNfb25seV9mbGFnOworZXh0ZXJuIGludCB0bHNfYWN0aXZlX2ZsYWc7CitleHRlcm4gaW50IHRs c19zZWN1cmVfZmxhZzsKKworX1BST1RPVFlQKGludCBzc2xfZG9faW5pdCwoaW50KSk7CitfUFJP VE9UWVAoaW50IHNzbF9kaXNwbGF5X2Nvbm5lY3RfZGV0YWlscywoU1NMICosaW50KSk7CitfUFJP VE9UWVAoaW50IHNzbF9zZXJ2ZXJfdmVyaWZ5X2NhbGxiYWNrLChpbnQsIFg1MDlfU1RPUkVfQ1RY ICopKTsKK19QUk9UT1RZUChpbnQgc3NsX2NsaWVudF92ZXJpZnlfY2FsbGJhY2ssKGludCwgWDUw OV9TVE9SRV9DVFggKikpOworCisjaWZkZWYgT1MyCisjZGVmaW5lIFNTTF9nZXRfZXJyb3IgICAg ICAgICAgICAgICAgICAgIGNrX1NTTF9nZXRfZXJyb3IKKyNkZWZpbmUgU1NMX3JlYWQgICAgICAg ICAgICAgICAgICAgICAgICAgY2tfU1NMX3JlYWQKKyNkZWZpbmUgU1NMX3BlZWsgICAgICAgICAg ICAgICAgICAgICAgICAgY2tfU1NMX3BlZWsKKyNkZWZpbmUgU1NMX2Nvbm5lY3QgICAgICAgICAg ICAgICAgICAgICAgY2tfU1NMX2Nvbm5lY3QKKyNkZWZpbmUgU1NMX3NldF9mZCAgICAgICAgICAg ICAgICAgICAgICAgY2tfU1NMX3NldF9mZAorI2RlZmluZSBTU0xfZnJlZSAgICAgICAgICAgICAg ICAgICAgICAgICBja19TU0xfZnJlZQorI2RlZmluZSBTU0xfc2h1dGRvd24gICAgICAgICAgICAg ICAgICAgICBja19TU0xfc2h1dGRvd24KKyNkZWZpbmUgU1NMX3dyaXRlICAgICAgICAgICAgICAg ICAgICAgICAgY2tfU1NMX3dyaXRlCisjZGVmaW5lIFNTTF9wZW5kaW5nICAgICAgICAgICAgICAg ICAgICAgIGNrX1NTTF9wZW5kaW5nCisjZGVmaW5lIFNTTF9sb2FkX2Vycm9yX3N0cmluZ3MgICAg ICAgICAgIGNrX1NTTF9sb2FkX2Vycm9yX3N0cmluZ3MKKyNkZWZpbmUgU1NMX2dldF9wZWVyX2Nl cnRpZmljYXRlICAgICAgICAgY2tfU1NMX2dldF9wZWVyX2NlcnRpZmljYXRlCisjZGVmaW5lIFNT TF9DSVBIRVJfZ2V0X25hbWUgICAgICAgICAgICAgIGNrX1NTTF9DSVBIRVJfZ2V0X25hbWUKKyNk ZWZpbmUgU1NMX2dldF9jdXJyZW50X2NpcGhlciAgICAgICAgICAgY2tfU1NMX2dldF9jdXJyZW50 X2NpcGhlcgorI2RlZmluZSBTU0xfZ2V0X3NoYXJlZF9jaXBoZXJzICAgICAgICAgICBja19TU0xf Z2V0X3NoYXJlZF9jaXBoZXJzCisjZGVmaW5lIFNTTF9nZXRfY2lwaGVycyAgICAgICAgICAgICAg ICAgIGNrX1NTTF9nZXRfY2lwaGVycworI2RlZmluZSBTU0xfZ2V0X2NpcGhlcl9saXN0ICAgICAg ICAgICAgICBja19TU0xfZ2V0X2NpcGhlcl9saXN0CisjZGVmaW5lIFNTTF9DVFhfc2V0X2RlZmF1 bHRfdmVyaWZ5X3BhdGhzIGNrX1NTTF9DVFhfc2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzCisjZGVm aW5lIFNTTF91c2VfUlNBUHJpdmF0ZUtleV9maWxlICAgICAgIGNrX1NTTF91c2VfUlNBUHJpdmF0 ZUtleV9maWxlCisjZGVmaW5lIFNTTF91c2VfRFNBUHJpdmF0ZUtleV9maWxlICAgICAgIGNrX1NT TF91c2VfRFNBUHJpdmF0ZUtleV9maWxlCisjZGVmaW5lIFNTTF91c2VfUHJpdmF0ZUtleV9maWxl ICAgICAgICAgIGNrX1NTTF91c2VfUHJpdmF0ZUtleV9maWxlCisjZGVmaW5lIFNTTF91c2VfY2Vy dGlmaWNhdGVfZmlsZSAgICAgICAgIGNrX1NTTF91c2VfY2VydGlmaWNhdGVfZmlsZQorI2RlZmlu ZSBTU0xfQ1RYX3VzZV9Qcml2YXRlS2V5X2ZpbGUgICAgICBja19TU0xfQ1RYX3VzZV9Qcml2YXRl S2V5X2ZpbGUKKyNkZWZpbmUgU1NMX0NUWF91c2VfY2VydGlmaWNhdGVfZmlsZSAgICAgY2tfU1NM X0NUWF91c2VfY2VydGlmaWNhdGVfZmlsZQorI2RlZmluZSBTU0xfc2V0X3ZlcmlmeSAgICAgICAg ICAgICAgICAgICBja19TU0xfc2V0X3ZlcmlmeQorI2RlZmluZSBTU0xfbmV3ICAgICAgICAgICAg ICAgICAgICAgICAgICBja19TU0xfbmV3CisjZGVmaW5lIFNTTF9DVFhfY3RybCAgICAgICAgICAg ICAgICAgICAgIGNrX1NTTF9DVFhfY3RybAorI2RlZmluZSBTU0xfQ1RYX25ldyAgICAgICAgICAg ICAgICAgICAgICBja19TU0xfQ1RYX25ldworI2RlZmluZSBTU0xfQ1RYX2ZyZWUgICAgICAgICAg ICAgICAgICAgICBja19TU0xfQ1RYX2ZyZWUKKyNkZWZpbmUgU1NMX0NUWF9zZXRfZGVmYXVsdF9w YXNzd2RfY2IgICAgY2tfU1NMX0NUWF9zZXRfZGVmYXVsdF9wYXNzd2RfY2IKKyNkZWZpbmUgU1NM djIzX21ldGhvZCAgICAgICAgICAgICAgICAgICAgY2tfU1NMdjIzX21ldGhvZAorI2RlZmluZSBT U0x2M19tZXRob2QgICAgICAgICAgICAgICAgICAgICBja19TU0x2M19tZXRob2QKKyNkZWZpbmUg VExTdjFfbWV0aG9kICAgICAgICAgICAgICAgICAgICAgY2tfVExTdjFfbWV0aG9kCisjZGVmaW5l IFNTTHYyM19jbGllbnRfbWV0aG9kICAgICAgICAgICAgIGNrX1NTTHYyM19jbGllbnRfbWV0aG9k CisjZGVmaW5lIFNTTHYzX2NsaWVudF9tZXRob2QgICAgICAgICAgICAgIGNrX1NTTHYzX2NsaWVu dF9tZXRob2QKKyNkZWZpbmUgVExTdjFfY2xpZW50X21ldGhvZCAgICAgICAgICAgICAgY2tfVExT djFfY2xpZW50X21ldGhvZAorI2RlZmluZSBTU0x2MjNfc2VydmVyX21ldGhvZCAgICAgICAgICAg ICBja19TU0x2MjNfc2VydmVyX21ldGhvZAorI2RlZmluZSBTU0x2M19zZXJ2ZXJfbWV0aG9kICAg ICAgICAgICAgICBja19TU0x2M19zZXJ2ZXJfbWV0aG9kCisjZGVmaW5lIFRMU3YxX3NlcnZlcl9t ZXRob2QgICAgICAgICAgICAgIGNrX1RMU3YxX3NlcnZlcl9tZXRob2QKKyNkZWZpbmUgU1NMX2xp YnJhcnlfaW5pdCAgICAgICAgICAgICAgICAgY2tfU1NMX2xpYnJhcnlfaW5pdAorI2RlZmluZSBT U0xfc3RhdGVfc3RyaW5nICAgICAgICAgICAgICAgICBja19TU0xfc3RhdGVfc3RyaW5nCisjZGVm aW5lIFNTTF9zdGF0ZV9zdHJpbmdfbG9uZyAgICAgICAgICAgIGNrX1NTTF9zdGF0ZV9zdHJpbmdf bG9uZworI2RlZmluZSBTU0xfYWNjZXB0ICAgICAgICAgICAgICAgICAgICAgICBja19TU0xfYWNj ZXB0CisjZGVmaW5lIFNTTF9zZXRfY2lwaGVyX2xpc3QgICAgICAgICAgICAgIGNrX1NTTF9zZXRf Y2lwaGVyX2xpc3QKKworI2RlZmluZSBFUlJfcHJpbnRfZXJyb3JzICAgICAgICAgICAgICAgICBj a19FUlJfcHJpbnRfZXJyb3JzCisjZGVmaW5lIEVSUl9wcmludF9lcnJvcnNfZnAgICAgICAgICAg ICAgIGNrX0VSUl9wcmludF9lcnJvcnNfZnAKKyNkZWZpbmUgRVJSX2Vycm9yX3N0cmluZyAgICAg ICAgICAgICAgICAgY2tfRVJSX2Vycm9yX3N0cmluZworI2RlZmluZSBFUlJfZ2V0X2Vycm9yICAg ICAgICAgICAgICAgICAgICBja19FUlJfZ2V0X2Vycm9yCisKKyNkZWZpbmUgQklPX3ByaW50ZiAg ICAgICAgICAgICAgICAgICAgICAgY2tfQklPX3ByaW50ZgorI2RlZmluZSBCSU9fY3RybCAgICAg ICAgICAgICAgICAgICAgICAgICBja19CSU9fY3RybAorI2RlZmluZSBCSU9fbmV3ICAgICAgICAg ICAgICAgICAgICAgICAgICBja19CSU9fbmV3CisjZGVmaW5lIEJJT19zX2ZpbGUgICAgICAgICAg ICAgICAgICAgICAgIGNrX0JJT19zX2ZpbGUKKyNkZWZpbmUgQklPX3NfbWVtICAgICAgICAgICAg ICAgICAgICAgICAgY2tfQklPX3NfbWVtCisjZGVmaW5lIEJJT19zX251bGwgICAgICAgICAgICAg ICAgICAgICAgIGNrX0JJT19zX251bGwKKyNkZWZpbmUgQklPX3JlYWQgICAgICAgICAgICAgICAg ICAgICAgICAgY2tfQklPX3JlYWQKKyNkZWZpbmUgQklPX25ld19maWxlICAgICAgICAgICAgICAg ICAgICAgY2tfQklPX25ld19maWxlCisjZGVmaW5lIEJJT19mcmVlICAgICAgICAgICAgICAgICAg ICAgICAgIGNrX0JJT19mcmVlCisKKyNkZWZpbmUgWDUwOV9nZXRfaXNzdWVyX25hbWUgICAgICAg ICAgICAgY2tfWDUwOV9nZXRfaXNzdWVyX25hbWUKKyNkZWZpbmUgWDUwOV92ZXJpZnlfY2VydF9l cnJvcl9zdHJpbmcgICAgY2tfWDUwOV92ZXJpZnlfY2VydF9lcnJvcl9zdHJpbmcKKyNkZWZpbmUg WDUwOV9OQU1FX29uZWxpbmUgICAgICAgICAgICAgICAgY2tfWDUwOV9OQU1FX29uZWxpbmUKKyNk ZWZpbmUgWDUwOV9nZXRfc3ViamVjdF9uYW1lICAgICAgICAgICAgY2tfWDUwOV9nZXRfc3ViamVj dF9uYW1lCisjZGVmaW5lIFg1MDlfU1RPUkVfQ1RYX2dldF9jdXJyZW50X2NlcnQgIGNrX1g1MDlf U1RPUkVfQ1RYX2dldF9jdXJyZW50X2NlcnQKKyNkZWZpbmUgWDUwOV9nZXRfZGVmYXVsdF9jZXJ0 X2RpciAgICAgICAgY2tfWDUwOV9nZXRfZGVmYXVsdF9jZXJ0X2RpcgorI2RlZmluZSBYNTA5X2Zy ZWUgICAgICAgICAgICAgICAgICAgICAgICBja19YNTA5X2ZyZWUKKworI2RlZmluZSBSU0FfZnJl ZSAgICAgICAgICAgICAgICAgICAgICAgICBja19SU0FfZnJlZQorI2RlZmluZSBSU0FfZ2VuZXJh dGVfa2V5ICAgICAgICAgICAgICAgICBja19SU0FfZ2VuZXJhdGVfa2V5CisKKyNkZWZpbmUgREhf bmV3ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2tfREhfbmV3CisjZGVmaW5lIERIX2ZyZWUg ICAgICAgICAgICAgICAgICAgICAgICAgIGNrX0RIX2ZyZWUKKyNkZWZpbmUgREhfZ2VuZXJhdGVf a2V5ICAgICAgICAgICAgICAgICAgY2tfREhfZ2VuZXJhdGVfa2V5CisjZGVmaW5lIERIX2dlbmVy YXRlX3BhcmFtZXRlcnMgICAgICAgICAgIGNrX0RIX2dlbmVyYXRlX3BhcmFtZXRlcnMKKworI2Rl ZmluZSBEU0FfZnJlZSAgICAgICAgICAgICAgICAgICAgICAgICBja19EU0FfZnJlZQorI2RlZmlu ZSBEU0FfZ2VuZXJhdGVfa2V5ICAgICAgICAgICAgICAgICBja19EU0FfZ2VuZXJhdGVfa2V5Cisj ZGVmaW5lIERTQV9nZW5lcmF0ZV9wYXJhbWV0ZXJzICAgICAgICAgIGNrX0RTQV9nZW5lcmF0ZV9w YXJhbWV0ZXJzCisKKyNkZWZpbmUgUEVNX3JlYWRfYmlvX0RIcGFyYW1zICAgICAgICAgICAgY2tf UEVNX3JlYWRfYmlvX0RIcGFyYW1zCisjZGVmaW5lIEJOX2JpbjJibiAgICAgICAgICAgICAgICAg ICAgICAgIGNrX0JOX2JpbjJibgorI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIENLX1NTTCAq LwoKZGlmZiAtLWdpdCBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2tj c3ltLmggYi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrY3N5bS5oCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzNDBjYTMKLS0tIC9kZXYvbnVsbAor KysgYi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrY3N5bS5oCkBAIC0w LDAgKzEsNSBAQAorLyogVGhpcyBmaWxlIGlzIGZvciB1c2Ugd2l0aCBjb21waWxlcnMgdGhhdCBk b24ndCBoYXZlIHRoZSBjYXBhYmlsaXR5IHRvCisgKiAjZGVmaW5lIHN5bWJvbHMgb24gdGhlIEMg Y29tcGlsZXIgY29tbWFuZCBsaW5lLiAgVGhpcyBmaWxlIG11c3QKKyAqIGJlICNpbmNsdWRlJ2Qg YmVmb3JlIGFsbCBvdGhlciBjayouaCBmaWxlcyBzbyB0aGF0IHRoZSBzeW1ib2xzICNkZWZpbmUn ZAorICogaGVyZSBjYW4gYmUgdXNlZCBmb3IgYW55IHN1YnNlcXVlbnQgY29uZGl0aW9uYWwgY29k ZS4KKyAqLwoKZGlmZiAtLWdpdCBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4z MDIvY2tjdGVsLmMgYi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrY3Rl bC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5ZjEyOTUKLS0tIC9kZXYv bnVsbAorKysgYi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrY3RlbC5j CkBAIC0wLDAgKzEsOTAxNSBAQAorY2hhciAqY2t0ZWx2ID0gIlRlbG5ldCBzdXBwb3J0LCA5LjAu Mjc0LCAxNiBNYXIgMjAxMCI7CisjZGVmaW5lIENLQ1RFTF9DCisKK2ludCBzc3RlbG5ldCA9IDA7 ICAgICAgICAgICAgICAgICAgICAgICAvKiBEbyBzZXJ2ZXItc2lkZSBUZWxuZXQgbmVnb3RpYXRp b24gKi8KKworLyogIEMgSyBDIFQgRSBMICAtLSAgVGVsbmV0IHN1cHBvcnQgICovCisKKy8qCisg IEF1dGhvcnM6CisgICAgVGVsbmV0IHByb3RvY29sIGJ5IEZyYW5rIGRhIENydXogYW5kIEplZmZy ZXkgQWx0bWFuLgorICAgIFRlbG5ldCBGb3J3YXJkIFggYnkgSmVmZnJleSBBbHRtYW4KKyAgICBU ZWxuZXQgU1RBUlRfVExTIHN1cHBvcnQgYnkgSmVmZnJleSBBbHRtYW4KKyAgICBUZWxuZXQgQVVU SCBhbmQgRU5DUllQVCBzdXBwb3J0IGJ5IEplZmZyZXkgQWx0bWFuCisgICAgVGVsbmV0IENPTVBP UlQgc3VwcG9ydCBieSBKZWZmcmV5IEFsdG1hbgorICAgIFRlbG5ldCBORVctRU5WSVJPTk1FTlQg c3VwcG9ydCBieSBKZWZmcmV5IEFsdG1hbgorICAgIFRlbG5ldCBOQVdTIHN1cHBvcnQgYnkgRnJh bmsgZGEgQ3J1eiBhbmQgSmVmZnJleSBBbHRtYW4KKyAgICBUZWxuZXQgVEVSTVRZUEUgc3VwcG9y dCBieSBKZWZmcmV5IEFsdG1hbgorICAgIFRlbG5ldCBLRVJNSVQgc3VwcG9ydCBieSBKZWZmcmV5 IEFsdG1hbgorICAgIE90aGVyIGNvbnRyaWJ1dGlvbnMgYXMgaW5kaWNhdGVkIGluIHRoZSBjb2Rl LgorCisgIENvcHlyaWdodCAoQykgMTk4NSwgMjAxMCwKKyAgICBUcnVzdGVlcyBvZiBDb2x1bWJp YSBVbml2ZXJzaXR5IGluIHRoZSBDaXR5IG9mIE5ldyBZb3JrLgorICAgIEFsbCByaWdodHMgcmVz ZXJ2ZWQuICBTZWUgdGhlIEMtS2VybWl0IENPUFlJTkcuVFhUIGZpbGUgb3IgdGhlCisgICAgY29w eXJpZ2h0IHRleHQgaW4gdGhlIGNrY21haS5jIG1vZHVsZSBmb3IgZGlzY2xhaW1lciBhbmQgcGVy bWlzc2lvbnMuCisqLworCisvKgorICBOT1RFIFRPIENPTlRSSUJVVE9SUzogVGhpcyBmaWxlLCBh bmQgYWxsIHRoZSBvdGhlciBzaGFyZWQgKGNrYyBhbmQgY2t1KQorICBDLUtlcm1pdCBzb3VyY2Ug ZmlsZXMsIG11c3QgYmUgY29tcGF0aWJsZSB3aXRoIEMgcHJlcHJvY2Vzc29ycyB0aGF0IHN1cHBv cnQKKyAgb25seSAjaWZkZWYsICNlbHNlLCAjZW5kaWYsICNkZWZpbmUsIGFuZCAjdW5kZWYuICBQ bGVhc2UgZG8gbm90IHVzZSAjaWYsCisgIGxvZ2ljYWwgb3BlcmF0b3JzLCBvciBvdGhlciBwcmVw cm9jZXNzb3IgZmVhdHVyZXMgaW4gdGhpcyBtb2R1bGUuICBBbHNvLAorICBkb24ndCB1c2UgYW55 IEFOU0kgQyBjb25zdHJ1Y3RzIGV4Y2VwdCB3aXRoaW4gI2lmZGVmIENLX0FOU0lDLi4jZW5kaWYu CisqLworCisjaW5jbHVkZSAiY2tjc3ltLmgiCisjaW5jbHVkZSAiY2tjZGViLmgiCisKKyNpZmRl ZiBUTkNPREUKKyNpbmNsdWRlICJja2NrZXIuaCIKKyNkZWZpbmUgVEVMQ01EUyAgICAgICAgICAg ICAgICAgICAgICAgICAvKiB0byBkZWZpbmUgbmFtZSBhcnJheSAqLworI2RlZmluZSBURUxPUFRT ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRvIGRlZmluZSBuYW1lIGFycmF5ICovCisjZGVm aW5lIFNMQ19OQU1FUyAgICAgICAgICAgICAgICAgICAgICAgLyogdG8gZGVmaW5lIG5hbWUgYXJy YXkgKi8KKyNkZWZpbmUgRU5DUllQVF9OQU1FUworI2RlZmluZSBBVVRIX05BTUVTCisjZGVmaW5l IFRFTE9QVF9TVEFURVMKKyNkZWZpbmUgVEVMT1BUX01PREVTCisjZGVmaW5lIFROQ19OQU1FUwor I2luY2x1ZGUgImNrY25ldC5oIgorI2luY2x1ZGUgImNrY3RlbC5oIgorI2lmZGVmIENLX0FVVEhF TlRJQ0FUSU9OCisjaW5jbHVkZSAiY2t1YXRoLmgiCisjZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJ T04gKi8KKyNpZmRlZiBDS19TU0wKKyNpbmNsdWRlICJja19zc2wuaCIKKyNlbmRpZiAvKiBDS19T U0wgKi8KKworI2lmbmRlZiBOT1RFUk0KKyNpZmRlZiBPUzIgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBGb3IgdGVybWluYWwgdHlwZSBuYW1lIHN0cmluZyAqLworI2luY2x1ZGUgImNr dXVzci5oIgorI2lmbmRlZiBOVAorI2luY2x1ZGUgPG9zMi5oPgorI3VuZGVmIENPTU1FTlQKKyNl bHNlCisjZGVmaW5lIGlzYXNjaWkgX19pc2FzY2lpCisjZW5kaWYgLyogTlQgKi8KKyNpbmNsdWRl ICJja29jb24uaCIKK2V4dGVybiBpbnQgdHRfdHlwZSwgbWF4X3R0OworZXh0ZXJuIHN0cnVjdCB0 dF9pbmZvX3JlYyB0dF9pbmZvW107CisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogTk9URVJN ICovCisKKyNpZmRlZiBPUzIKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpZmRlZiBOVAorI2luY2x1 ZGUgPHNldGptcGV4Lmg+CisjZWxzZSAvKiBOVCAqLworI2luY2x1ZGUgPHNldGptcC5oPgorI2Vu ZGlmIC8qIE5UICovCisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSAiY2tjc2lnLmgiCisj aW5jbHVkZSAiY2tvc3luLmgiCisjZW5kaWYgLyogT1MyICovCisKKyNpZmRlZiBDS19OQVdTICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBOZWdvdGlhdGUgQWJvdXQgV2luZG93IFNpemUgKi8K KyNpZmRlZiBSTE9HQ09ERQorX1BST1RPVFlQKCBpbnQgcmxvZ19uYXdzLCAodm9pZCkgKTsKKyNl bmRpZiAvKiBSTE9HQ09ERSAqLworI2VuZGlmIC8qIENLX05BV1MgKi8KKworaW50IHRuX2luaXQg PSAwOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRlbG5ldCBwcm90b2NvbCBpbml0aWFsaXpl ZCBmbGFnICovCitpbnQgdG5fYmVndW4gPSAwOyAgICAgICAgICAgICAgICAgICAgICAgLyogVGVs bmV0IHByb3RvY29sIHN0YXJ0ZWQgZmxhZyAqLworc3RhdGljIGludCB0bl9maXJzdCA9IDE7ICAg ICAgICAgICAgICAgIC8qIEZpcnN0IHRpbWUgaW5pdCBmbGFnICovCitleHRlcm4gaW50IHRuX2V4 aXQ7ICAgICAgICAgICAgICAgICAgICAgLyogRXhpdCBvbiBkaXNjb25uZWN0ICovCitleHRlcm4g aW50IG5ldHR5cGU7CitleHRlcm4gaW50IGluc2VydmVyOyAgICAgICAgICAgICAgICAgICAgLyog UnVubmluZyBhcyBJS1NEICovCitjaGFyICp0bl90ZXJtID0gTlVMTDsgICAgICAgICAgICAgICAg ICAgLyogVGVybWluYWwgdHlwZSBvdmVycmlkZSAqLworCisjaWZkZWYgQ0tfU05ETE9DCitjaGFy ICp0bl9sb2MgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgLyogTG9jYXRpb24gb3ZlcnJpZGUg Ki8KKyNlbmRpZiAvKiBDS19TTkRMT0MgKi8KK2ludCB0bl9ubG0gPSBUTkxfQ1JMRjsgICAgICAg ICAgICAgICAgICAvKiBUZWxuZXQgQ1IgLT4gQ1IgTEYgbW9kZSAqLworaW50IHRuX2JfbmxtID0g VE5MX0NSOyAgICAgICAgICAgICAgICAgIC8qIFRlbG5ldCBCaW5hcnkgQ1IgUkFXIG1vZGUgKi8K K2ludCB0bl9iX21ldSA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAvKiBUZWxuZXQgQmluYXJ5 IE1FIG1lYW5zIFUgdG9vICovCitpbnQgdG5fYl91bWUgPSAwOyAgICAgICAgICAgICAgICAgICAg ICAgLyogVGVsbmV0IEJpbmFyeSBVIG1lYW5zIE1FIHRvbyAqLworaW50IHRuX3dhaXRfZmxnID0g MTsgICAgICAgICAgICAgICAgICAgIC8qIFRlbG5ldCBXYWl0IGZvciBOZWdvdGlhdGlvbnMgKi8K K2ludCB0bl9pbmZpbml0ZSA9IDA7ICAgICAgICAgICAgICAgICAgICAvKiBUZWxuZXQgQnVnIElu ZmluaXRlLUxvb3AtQ2hlY2sgKi8KK2ludCB0bl9yZW1fZWNobyA9IDE7ICAgICAgICAgICAgICAg ICAgICAvKiBXZSB3aWxsIGVjaG8gaWYgV0lMTCBFQ0hPICovCitpbnQgdG5fYl94ZmVyID0gMDsg ICAgICAgICAgICAgICAgICAgICAgLyogVGVsbmV0IEJpbmFyeSBmb3IgWGZlcnM/ICovCitpbnQg dG5fc2JfYnVnID0gMTsgICAgICAgICAgICAgICAgICAgICAgLyogVGVsbmV0IEJVRyAtIFNCIHcv byBXSUxMIG9yIERPICovCitpbnQgdG5fYXV0aF9rcmI1X2Rlc19idWcgPSAxOyAgICAgICAgICAg LyogVGVsbmV0IEJVRyAtIEFVVEggS1JCNSBERVMgKi8KKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiAgICAgICAgICAgICAgdHJ1bmNhdGVzIGxvbmcga2V5cyAqLwor aW50IHRuX25vX2VuY3J5cHRfeGZlciA9IDA7ICAgICAgICAgICAgIC8qIFR1cm4gb2ZmIFRlbG5l dCBFbmNyeXB0PyAqLworaW50IHRuX2RlbGF5X3NiID0gMTsgICAgICAgICAgICAgICAgICAgIC8q IERlbGF5IFNCcyB1bnRpbCBzYWZlICovCitpbnQgdG5fYXV0aF9ob3cgPSBUTl9BVVRIX0hPV19B Tlk7CitpbnQgdG5fYXV0aF9lbmMgPSBUTl9BVVRIX0VOQ19BTlk7CitpbnQgdG5fZGViID0gMDsg ICAgICAgICAgICAgICAgICAgICAgICAgLyogVGVsbmV0IERlYnVnIG1vZGUgKi8KK2ludCB0bl9z ZnUgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBNaWNyb3NvZnQgU0ZVIGNvbXBhdGli aWxpdHkgKi8KKyNpZmRlZiBDS19GT1JXQVJEX1gKK2NoYXIgKiB0bl9md2R4X3hhdXRob3JpdHkg PSBOVUxMOyAgICAgICAvKiBYYXV0aG9yaXR5IEZpbGUgKi8KK2ludCAgICBmd2R4X25vX2VuY3J5 cHQgPSAwOyAgICAgICAgICAgICAvKiBGb3J3YXJkLVggcmVxdWlyZXMgZW5jcnlwdGlvbiAqLwor I2VuZGlmIC8qIENLX0ZPUldBUkRfWCAqLworCisjaWZkZWYgT1MyCitpbnQgdHRudW0gPSAtMTsg ICAgICAgICAgICAgICAgICAgICAgICAgLyogTGFzdCBUZWxuZXQgVGVybWluYWwgVHlwZSBzZW50 ICovCitpbnQgdHRudW1lbmQgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgLyogSGFzIGVuZCBv ZiBsaXN0IGJlZW4gZm91bmQgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKworY2hhciB0bl9tc2dbVE5f TVNHX0xFTl07ICAgICAgICAgICAgICAgIC8qIFRlbG5ldCBkYXRhIGNhbiBiZSByYXRoZXIgbG9u ZyAqLworY2hhciBoZXhidWZbVE5fTVNHX0xFTl07CitjaGFyIHRuX21zZ19vdXRbVE5fTVNHX0xF Tl07CisjaWZkZWYgQ0tfRk9SV0FSRF9YCitDSEFSIGZ3ZHhfbXNnX291dFtUTl9NU0dfTEVOXTsK KyNlbmRpZiAvKiBDS19GT1JXQVJEX1ggKi8KKworLyoKKyAgSW4gb3JkZXIgdG8gcHJldmVudCBh biBpbmZpbml0ZSB0ZWxuZXQgbmVnb3RpYXRpb24gbG9vcCB3ZSBtYWludGFpbiBhCisgIGNvdW50 IG9mIHRoZSBudW1iZXIgb2YgdGltZXMgdGhlIHNhbWUgdGVsbmV0IG5lZ290aWF0aW9uIG1lc3Nh Z2UgaXMKKyAgc2VudC4gV2hlbiB0aGlzIGNvdW50IGhpdHMgTUFYVE5DTlQsIHdlIGRvIG5vdCBz ZW5kIGFueSBtb3JlIG9mIHRoZQorICBtZXNzYWdlLiBUaGUgY291bnQgaXMgc3RvcmVkIGluIHRo ZSB0bmNudHNbXVtdIGFycmF5LgorCisgIFRoZSB0bmNudHNbXVtdIGFycmF5IGlzIGluZGV4ZWQg YnkgbmVnb3RpYXRpb24gb3B0aW9uIChTVVBQUkVTUyBHTyBBSEVBRCwKKyAgVEVSTUlOQUwgVFlQ RSwgTkFXUywgZXRjLiAtIHNlZSB0aGUgdG5vcHRzW10gYXJyYXkpIGFuZCB0aGUgZm91cgorICBu ZWdvdGlhdGlvbiBtZXNzYWdlIHR5cGVzIChXSUxMLCBXT05ULCBETywgRE9OVCkuICBBbGwgdGVs bmV0IG5lZ290aWF0aW9ucworICBhcmUga2VwdCB0cmFjayBvZiBpbiB0aGlzIHdheS4KKworICBU aGUgY291bnQgZm9yIGEgbWVzc2FnZSBpcyB6ZXJvZWQgd2hlbiB0aGUgIm9wcG9zaXRlIiBtZXNz YWdlIGlzIHNlbnQuCisgIFdJTEwgaXMgdGhlIG9wcG9zaXRlIG9mIFdPTlQsIGFuZCBETyBpcyB0 aGUgb3Bwb3NpdGUgb2YgRE9OVC4KKyAgRm9yIGV4YW1wbGUgc2VuZGluZyAiV0lMTCBTR0EiIGlu Y3JlbWVudHMgdG5jbnRzW1RFTE9QVF9TR0FdWzBdCisgIGFuZCB6ZXJvZXMgdG5jbnRzW1RFTE9Q VF9TR0FdWzFdLgorCisgIFRoZSBjb2RlIHRoYXQgZG9lcyB0aGlzIGlzIGluIHRuX3NvcHQoKS4K KworICByb2dlcnNoQGZzai5jby5qcCwgMTgvMy8xOTk1CisKKyAgOC8xNi8xOTk4IC0gd2l0aCB0 aGUgcmVjZW50IHJld3JpdGUgb2YgdGhlIHRlbG5ldCBzdGF0ZSBtYWNoaW5lIEkgZG9uJ3QKKyAg dGhpbmsgdGhpcyBjb2RlIGlzIG5lY2Vzc2FyeSBhbnltb3JlLiAgSG93ZXZlciwgaXQgY2FuJ3Qg ZG8gYW55IGhhcm0gc28KKyAgSSBhbSBsZWF2aW5nIGl0IGluLiAgICAtIEplZmYKKworICAxMi8y OC8xOTk4IC0gYWxsIHJlZmVyZW5jZXMgdG8gdG5jbnRzW10gbXVzdCBiZSBkb25lIHdpdGggVEVM T1BUX0lOREVYKG9wdCkKKyAgYmVjYXVzZSB0aGUgVGVsbmV0IG9wdGlvbiBsaXN0IGlzIG5vIGxv bmdlciBjb250aWd1b3VzLiAgV2UgYWxzbyBtdXN0CisgIGFsbG9jYXRlIE5URUxPUFRTICsgMSBi ZWNhdXNlIHRoZSBURUxPUFRfSU5ERVgoKSBtYWNybyByZXR1cm5zIE5URUxPUFRTCisgIGZvciBh biBpbnZhbGlkIG9wdGlvbiBudW1iZXIuCisqLworCisjZGVmaW5lIE1BWFROQ05UIDQgICAgICAv KiBQZXJtaXRzIDQgaW50ZXJtZWRpYXRlIHRlbG5ldCBmaXJld2FsbHMvZ2F0ZXdheXMgKi8KKwor Y2hhciB0bmNudHNbTlRFTE9QVFMrMV1bNF07ICAgICAgICAgICAgIC8qIENvdW50cyAqLworY2hh ciB0bm9wcHNbNF0gPSB7IDEsMCwzLDIgfTsgICAgICAgICAgIC8qIE9wcG9zaXRlcyAqLworCisj aWZkZWYgQ0tfRU5WSVJPTk1FTlQKKyNpZmRlZiBDS19GT1JXQVJEX1gKKyNkZWZpbmUgVFNCVUZT SVogMjA1NgorI2Vsc2UgLyogQ0tfRk9SV0FSRF9YICovCisjZGVmaW5lIFRTQlVGU0laIDEwMjQK KyNlbmRpZiAvKiBDS19GT1JXQVJEX1ggKi8KK2NoYXIgdG5fZW52X2FjY3RbNjRdOworY2hhciB0 bl9lbnZfZGlzcFs2NF07CitjaGFyIHRuX2Vudl9qb2JbNjRdOworY2hhciB0bl9lbnZfcHJudFs2 NF07CitjaGFyIHRuX2Vudl9zeXNbNjRdOworY2hhciAqIHRuX2Vudl91c2VydmFyWzhdWzJdOwor aW50IHRuX2Vudl9mbGcgPSAxOworI2Vsc2UgLyogQ0tfRU5WSVJPTk1FTlQgKi8KKyNkZWZpbmUg VFNCVUZTSVogNDEKK2ludCB0bl9lbnZfZmxnID0gMDsKKyNlbmRpZiAvKiBDS19FTlZJUk9OTUVO VCAqLworCisjaWZkZWYgQ09NTUVOVAorLyogU0lHV0lOQ0ggaGFuZGxlciBtb3ZlZCB0byBja3V1 c3guYyAqLworI2lmbmRlZiBOT1NJR1dJTkNICisjaWZkZWYgQ0tfTkFXUyAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogV2luZG93IHNpemUgYnVzaW5lc3MgKi8KKyNpZmRlZiBVTklYCisjaW5j bHVkZSA8c2lnbmFsLmg+CisjZW5kaWYgLyogVU5JWCAqLworI2VuZGlmIC8qIENLX05BV1MgKi8K KyNlbmRpZiAvKiBOT1NJR1dJTkNIICovCisjZW5kaWYgLyogQ09NTUVOVCAqLworCitDSEFSIHNi W1RTQlVGU0laXTsgICAgICAgICAgICAgICAgICAgICAgLyogQnVmZmVyIC0gaW5jb21pbmcgc3Vi bmVnb3RpYXRpb25zICovCitDSEFSIHNiX291dFtUU0JVRlNJWl07ICAgICAgICAgICAgICAgICAg LyogQnVmZmVyIC0gb3V0Z29pbmcgc3VibmVnb3RpYXRpb25zICovCisKK2ludCB0bl9kdXBsZXgg PSAxOyAgICAgICAgICAgICAgICAgICAgICAvKiBMb2NhbCBlY2hvICovCisKK2V4dGVybiBjaGFy IHVpZGJ1ZltdOyAgICAgICAgICAgICAgICAgICAvKiBVc2VyIElEIGJ1ZmZlciAqLworZXh0ZXJu IGludCBxdWlldCwgdHRuZXQsIHR0bnByb3RvLCBkZWJzZXMsIHdoYXQsIGR1cGxleCwgb2xkcGxl eCwgbG9jYWw7CitleHRlcm4gaW50IHNlc2xvZywgc2Vzc2Z0LCB3aHljbG9zZWQ7CisjaWZkZWYg T1MyCisjaWZuZGVmIE5PVEVSTQorZXh0ZXJuIGludCB0dF9yb3dzW10sIHR0X2NvbHNbXTsKK2V4 dGVybiBpbnQgdHRfc3RhdHVzW1ZOVU1dOworZXh0ZXJuIGludCBzY3JuaW5pdGlhbGl6ZWRbXTsK KyNlbmRpZiAvKiBOT1RFUk0gKi8KKyNlbHNlIC8qIE9TMiAqLworZXh0ZXJuIGludCB0dF9yb3dz LCB0dF9jb2xzOyAgICAgICAgICAgIC8qIEV2ZXJ5Ym9keSBoYXMgdGhpcyAqLworI2VuZGlmIC8q IE9TMiAqLworZXh0ZXJuIGludCBjbWRfY29scywgY21kX3Jvd3M7CitleHRlcm4gY2hhciBuYW1l Y29weVtdOworZXh0ZXJuIGNoYXIgbXlpcGFkZHJbXTsgICAgICAgICAgICAgLyogR2xvYmFsIGNv cHkgb2YgbXkgSVAgYWRkcmVzcyAqLworCisjaWZuZGVmIFRFTE9QVF9NQUNSTworaW50Cit0ZWxv cHRfaW5kZXgob3B0KSBpbnQgb3B0OyB7CisgICAgaWYgKG9wdCA+PSAwICYmIG9wdCA8PSBURUxP UFRfU1RERVJSKQorICAgICAgcmV0dXJuKG9wdCk7CisgICAgZWxzZSBpZiAob3B0ID49IFRFTE9Q VF9QUkFHTUFfTE9HT04gJiYgb3B0IDw9IFRFTE9QVF9QUkFHTUFfSEVBUlRCRUFUKQorICAgICAg cmV0dXJuKG9wdC04OCk7CisgICAgZWxzZSBpZiAob3B0ID09IFRFTE9QVF9JQk1fU0FLKQorICAg ICAgcmV0dXJuKG9wdC0xNDcpOworICAgIGVsc2UKKyAgICAgIHJldHVybihOVEVMT1BUUyk7Cit9 CisKK2ludAordGVsb3B0X29rKG9wdCkgaW50IG9wdDsgeworICAgIHJldHVybigob3B0ID49IFRF TE9QVF9CSU5BUlkgJiYgb3B0IDw9IFRFTE9QVF9TVERFUlIpIHx8CisgICAgICAgICAgIChvcHQg Pj0gVEVMT1BUX1BSQUdNQV9MT0dPTiAmJiBvcHQgPD0gVEVMT1BUX1BSQUdNQV9IRUFSVEJFQVQp IHx8CisgICAgICAgICAgIChvcHQgPT0gVEVMT1BUX0lCTV9TQUspKTsKK30KKworQ0hBUiAqCit0 ZWxvcHQob3B0KSBpbnQgb3B0OyB7CisgICAgaWYgKHRlbG9wdF9vayhvcHQpKQorICAgICAgcmV0 dXJuKChDSEFSICopdGVsb3B0c1t0ZWxvcHRfaW5kZXgob3B0KV0pOworICAgIGVsc2UKKyAgICAg IHJldHVybigoQ0hBUiAqKSJVTktOT1dOIik7Cit9CisKK2ludAordGVsb3B0X21vZGVfb2sob3B0 KSBpbnQgb3B0OyB7CisgICAgcmV0dXJuKCh1bnNpZ25lZCBpbnQpKG9wdCkgPD0gVE5fTkdfTVUp OworfQorCitDSEFSICoKK3RlbG9wdF9tb2RlKG9wdCkgaW50IG9wdDsgeworICAgIGlmICh0ZWxv cHRfbW9kZV9vayhvcHQpKQorICAgICAgcmV0dXJuKChDSEFSICopdGVsb3B0X21vZGVzW29wdC1U Tl9OR19SRl0pOworICAgIGVsc2UKKyAgICAgIHJldHVybigoQ0hBUiAqKSJVTktOT1dOIik7Cit9 CisjZW5kaWYgLyogVEVMT1BUX01BQ1JPICovCisKK3N0YXRpYyBpbnQKK3RuX291dHN0KG5vdHF1 aWV0KSBpbnQgbm90cXVpZXQ7IHsKKyAgICBpbnQgb3V0c3RhbmRpbmcgPSAwOworICAgIGludCB4 ID0gMDsKKyNpZmRlZiBDS19FTkNSWVBUSU9OCisgICAgaW50IGUgPSAwOworICAgIGludCBkID0g MDsKKyNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCisKKyAgICBpZiAodG5fd2FpdF9mbGcpIHsK KyAgICAgICAgZm9yICh4ID0gVEVMT1BUX0ZJUlNUOyB4IDw9IFRFTE9QVF9MQVNUOyB4KyspIHsK KyAgICAgICAgICAgIGlmIChURUxPUFRfT0soeCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoVEVM T1BUX1VOQU5TV0VSRURfV0lMTCh4KSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIG5vdHF1 aWV0ICkKKyAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIj9UZWxuZXQgd2FpdGluZyBmb3Ig cmVzcG9uc2UgdG8gV0lMTCAlc1xyXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBU RUxPUFQoeCkpOworICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJ0bl9vdXRzdCIsInVu YW5zd2VyZWQgV0lMTCIseCk7CisgICAgICAgICAgICAgICAgICAgIG91dHN0YW5kaW5nID0gMTsK KyAgICAgICAgICAgICAgICAgICAgaWYgKCAhbm90cXVpZXQgKQorICAgICAgICAgICAgICAgICAg ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoVEVMT1BU X1VOQU5TV0VSRURfRE8oeCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBub3RxdWlldCAp CisgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/VGVsbmV0IHdhaXRpbmcgZm9yIHJlc3Bv bnNlIHRvIERPICVzXHJcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRFTE9QVCh4 KSk7CisgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsInRuX291dHN0IiwidW5hbnN3ZXJl ZCBETyIseCk7CisgICAgICAgICAgICAgICAgICAgIG91dHN0YW5kaW5nID0gMTsKKyAgICAgICAg ICAgICAgICAgICAgaWYgKCAhbm90cXVpZXQgKQorICAgICAgICAgICAgICAgICAgICAgIGJyZWFr OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoVEVMT1BUX1VOQU5TV0VS RURfV09OVCh4KSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIG5vdHF1aWV0ICkKKyAgICAg ICAgICAgICAgICAgICAgICBwcmludGYoIj9UZWxuZXQgd2FpdGluZyBmb3IgcmVzcG9uc2UgdG8g V09OVCAlc1xyXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBURUxPUFQoeCkpOwor ICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJ0bl9vdXRzdCIsInVuYW5zd2VyZWQgV09O VCIseCk7CisgICAgICAgICAgICAgICAgICAgIG91dHN0YW5kaW5nID0gMTsKKyAgICAgICAgICAg ICAgICAgICAgaWYgKCAhbm90cXVpZXQgKQorICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoVEVMT1BUX1VOQU5TV0VSRURf RE9OVCh4KSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIG5vdHF1aWV0ICkKKyAgICAgICAg ICAgICAgICAgICAgICBwcmludGYoIj9UZWxuZXQgd2FpdGluZyBmb3IgcmVzcG9uc2UgdG8gRE9O VCAlc1xyXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBURUxPUFQoeCkpOworICAg ICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJ0bl9vdXRzdCIsInVuYW5zd2VyZWQgRE9OVCIs eCk7CisgICAgICAgICAgICAgICAgICAgIG91dHN0YW5kaW5nID0gMTsKKyAgICAgICAgICAgICAg ICAgICAgaWYgKCAhbm90cXVpZXQgKQorICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoVEVMT1BUX1VOQU5TV0VSRURfU0Io eCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBub3RxdWlldCApCisgICAgICAgICAgICAg ICAgICAgICAgcHJpbnRmKCI/VGVsbmV0IHdhaXRpbmcgZm9yIHJlc3BvbnNlIHRvIFNCICVzXHJc biIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRFTE9QVCh4KSk7CisgICAgICAgICAg ICAgICAgICAgIGRlYnVnKEYxMTEsInRuX291dHN0IiwidW5hbnN3ZXJlZCBTQiIseCk7CisgICAg ICAgICAgICAgICAgICAgIG91dHN0YW5kaW5nID0gMTsKKyAgICAgICAgICAgICAgICAgICAgaWYg KCAhbm90cXVpZXQgKQorICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorI2lmZGVmIENLX0FVVEhFTlRJQ0FUSU9O CisgICAgICAgIGlmIChja190bl9hdXRoX2luX3Byb2dyZXNzKCkpIHsKKyAgICAgICAgICAgIGlm IChURUxPUFRfTUUoVEVMT1BUX0FVVEhFTlRJQ0FUSU9OKSkgeworICAgICAgICAgICAgICAgIGlm IChub3RxdWlldCkKKyAgICAgICAgICAgICAgICAgIHByaW50ZigiP1RlbG5ldCB3YWl0aW5nIGZv ciBXSUxMICVzIHN1Ym5lZ290aWF0aW9uXHJcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAg VEVMT1BUKFRFTE9QVF9BVVRIRU5USUNBVElPTikpOworICAgICAgICAgICAgICAgIGRlYnVnKEYx MTEsCisgICAgICAgICAgICAgICAgICAgICAgInRuX291dHN0IiwKKyAgICAgICAgICAgICAgICAg ICAgICAiTUUgYXV0aGVudGljYXRpb24gaW4gcHJvZ3Jlc3MiLAorICAgICAgICAgICAgICAgICAg ICAgIFRFTE9QVF9BVVRIRU5USUNBVElPTgorICAgICAgICAgICAgICAgICAgICAgICk7CisgICAg ICAgICAgICAgICAgb3V0c3RhbmRpbmcgPSAxOworICAgICAgICAgICAgfSBlbHNlIGlmIChURUxP UFRfVShURUxPUFRfQVVUSEVOVElDQVRJT04pKSB7CisgICAgICAgICAgICAgICAgaWYgKG5vdHF1 aWV0KQorICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/VGVsbmV0IHdhaXRpbmcgZm9yIERPICVz IHN1Ym5lZ290aWF0aW9uXHJcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgVEVMT1BUKFRF TE9QVF9BVVRIRU5USUNBVElPTikpOworICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsCisgICAg ICAgICAgICAgICAgICAgICAgInRuX291dHN0IiwKKyAgICAgICAgICAgICAgICAgICAgICAiVSBh dXRoZW50aWNhdGlvbiBpbiBwcm9ncmVzcyIsCisgICAgICAgICAgICAgICAgICAgICAgVEVMT1BU X0FVVEhFTlRJQ0FUSU9OCisgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAg ICBvdXRzdGFuZGluZyA9IDE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyNlbmRpZiAvKiBD S19BVVRIRU5USUNBVElPTiAqLworI2lmZGVmIENLX0VOQ1JZUFRJT04KKyAgICAgICAgaWYgKCFv dXRzdGFuZGluZykgeworICAgICAgICAgICAgZSA9IGNrX3RuX2VuY3J5cHRpbmcoKTsKKyAgICAg ICAgICAgIGQgPSBja190bl9kZWNyeXB0aW5nKCk7CisgICAgICAgICAgICBpZiAoVEVMT1BUX01F KFRFTE9QVF9FTkNSWVBUSU9OKSkgeworICAgICAgICAgICAgICAgIGlmIChURUxPUFRfU0IoVEVM T1BUX0VOQ1JZUFRJT04pLmVuY3J5cHQuc3RvcCAmJiBlIHx8CisgICAgICAgICAgICAgICAgICAg ICFURUxPUFRfU0IoVEVMT1BUX0VOQ1JZUFRJT04pLmVuY3J5cHQuc3RvcCAmJiAhZQorICAgICAg ICAgICAgICAgICAgICApIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBub3RxdWlldCApCisg ICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/VGVsbmV0IHdhaXRpbmcgZm9yIFdJTEwgJXMg c3VibmVnb3RpYXRpb25cclxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEVMT1BU KFRFTE9QVF9FTkNSWVBUSU9OKSk7CisgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICJ0bl9vdXRzdCIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICJlbmNyeXB0aW9uIG1vZGUgc3dpdGNoIiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgVEVMT1BUX0VOQ1JZUFRJT04KKyAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAg ICAgICAgICAgICAgICAgb3V0c3RhbmRpbmcgPSAxOworICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIGlmIChURUxPUFRfVShURUxPUFRfRU5DUllQVElPTikpIHsK KyAgICAgICAgICAgICAgICBpZiAoVEVMT1BUX1NCKFRFTE9QVF9FTkNSWVBUSU9OKS5lbmNyeXB0 LnN0b3AgJiYgZCB8fAorICAgICAgICAgICAgICAgICAgICAhVEVMT1BUX1NCKFRFTE9QVF9FTkNS WVBUSU9OKS5lbmNyeXB0LnN0b3AgJiYgIWQKKyAgICAgICAgICAgICAgICAgICAgKSB7CisgICAg ICAgICAgICAgICAgICAgIGlmICggbm90cXVpZXQgKQorICAgICAgICAgICAgICAgICAgICAgIHBy aW50ZigiP1RlbG5ldCB3YWl0aW5nIGZvciBETyAlcyBzdWJuZWdvdGlhdGlvblxyXG4iLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBURUxPUFQoVEVMT1BUX0VOQ1JZUFRJT04pKTsKKyAg ICAgICAgICAgICAgICAgICAgZGVidWcoRjExMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg InRuX291dHN0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgImRlY3J5cHRpb24gbW9kZSBz d2l0Y2giLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgVEVMT1BUX0VOQ1JZUFRJT04KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICAgICAgb3V0c3RhbmRp bmcgPSAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorI2Vu ZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KKyAgICB9IC8qIGlmICh0bl93YWl0X2ZsZykgKi8KKwor I2lmZGVmIElLU19PUFRJT04KKyAgICAvKiBFdmVuIGlmIHdlIGFyZSBub3Qgd2FpdGluZyBmb3Ig VGVsbmV0IG9wdGlvbnMgd2UgbXVzdCB3YWl0IGZvciAqLworICAgIC8qIEtlcm1pdCBUZWxuZXQg U3VibmVnb3RpYXRpb25zIGlmIHdlIGhhdmUgc2VudCBhIHJlcXVlc3QgdG8gdGhlICovCisgICAg Lyogb3RoZXIgZ3V5LiAgT3RoZXJ3aXNlIHdlIHdpbGwgZ2V0IG91dCBvZiBzeW5jLiAgICAgICAg ICAgICAgICAgKi8KKyAgICBpZiAoIW91dHN0YW5kaW5nKSB7CisgICAgICAgIGlmIChURUxPUFRf VShURUxPUFRfS0VSTUlUKSAmJgorICAgICAgICAgICAgKFRFTE9QVF9TQihURUxPUFRfS0VSTUlU KS5rZXJtaXQubWVfcmVxX3N0YXJ0IHx8CisgICAgICAgICAgICAgVEVMT1BUX1NCKFRFTE9QVF9L RVJNSVQpLmtlcm1pdC5tZV9yZXFfc3RvcCB8fAorICAgICAgICAgICAgICFURUxPUFRfU0IoVEVM T1BUX0tFUk1JVCkua2VybWl0LnNvcCkKKyAgICAgICAgICAgICkgeworICAgICAgICAgICAgaWYg KCBub3RxdWlldCApCisgICAgICAgICAgICAgIHByaW50ZigiP1RlbG5ldCB3YWl0aW5nIGZvciBT QiAlcyBuZWdvdGlhdGlvblxyXG4iLAorICAgICAgICAgICAgICAgICAgICAgVEVMT1BUKFRFTE9Q VF9LRVJNSVQpKTsKKyAgICAgICAgICAgIGRlYnVnKEYxMTEsInRuX291dHN0IiwiVSBrZXJtaXQg aW4gcHJvZ3Jlc3MiLFRFTE9QVF9LRVJNSVQpOworICAgICAgICAgICAgb3V0c3RhbmRpbmcgPSAx OworICAgICAgICB9CisgICAgfQorI2VuZGlmIC8qIElLU19PUFRJT04gKi8KKworI2lmZGVmIFRO X0NPTVBPUlQKKyAgICBpZiAoIW91dHN0YW5kaW5nKSB7CisgICAgICAgIGlmIChURUxPUFRfTUUo VEVMT1BUX0NPTVBPUlQpKSB7CisgICAgICAgICAgICBpZiAoVEVMT1BUX1NCKFRFTE9QVF9DT01Q T1JUKS5jb21wb3J0LndhaXRfZm9yX3NiKSB7CisgICAgICAgICAgICAgICAgaWYgKG5vdHF1aWV0 KQorICAgICAgICAgICAgICAgICAgICBwcmludGYoIj9UZWxuZXQgd2FpdGluZyBmb3IgU0IgJXMg bmVnb3RpYXRpb25cclxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBURUxPUFQoVEVM T1BUX0NPTVBPUlQpKTsKKyAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsInRuX291dHN0IiwiQ29t UG9ydCBTQiBpbiBwcm9ncmVzcyIsVEVMT1BUX0NPTVBPUlQpOworICAgICAgICAgICAgICAgb3V0 c3RhbmRpbmcgPSAxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKFRFTE9QVF9TQihU RUxPUFRfQ09NUE9SVCkuY29tcG9ydC53YWl0X2Zvcl9tcykgeworICAgICAgICAgICAgICAgIGlm IChub3RxdWlldCkKKyAgICAgICAgICAgICAgcHJpbnRmKCI/VGVsbmV0IHdhaXRpbmcgZm9yIFNC ICVzIE1PREVNX1NUQVRVUyBuZWdvdGlhdGlvblxyXG4iLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFRFTE9QVChURUxPUFRfQ09NUE9SVCkpOworICAgICAgICAgICAgZGVidWcoRjExMSwi dG5fb3V0c3QiLCJDb21Qb3J0IFNCIE1TIGluIHByb2dyZXNzIixURUxPUFRfQ09NUE9SVCk7Cisg ICAgICAgICAgICAgICBvdXRzdGFuZGluZyA9IDE7CisgICAgICAgICAgICB9CisgICAgICAgIH0K KyAgICB9CisjZW5kaWYgLyogVE5fQ09NUE9SVCAqLworICAgIHJldHVybihvdXRzdGFuZGluZyk7 Cit9CisKK2ludAoraXN0bmNvbXBvcnQoKSB7CisjaWZkZWYgVE5fQ09NUE9SVAorICAgIGlmICgh bG9jYWwpIHJldHVybigwKTsKKyAgICBpZiAodHRuZXQgIT0gTkVUX1RDUEIpIHJldHVybigwKTsK KyAgICBpZiAodHRucHJvdG8gIT0gTlBfVEVMTkVUKSByZXR1cm4oMCk7CisgICAgaWYgKFRFTE9Q VF9NRShURUxPUFRfQ09NUE9SVCkpCisgICAgICByZXR1cm4oMSk7CisgICAgZWxzZQorI2VuZGlm IC8qIFROX0NPTVBPUlQgKi8KKyAgICAgIHJldHVybigwKTsKK30KKworLyogdG5fd2FpdCgpIC0t IFdhaXQgZm9yIHJlc3BvbnNlIHRvIFRlbG5ldCBuZWdvdGlhdGlvbi4gKi8KKy8qCisgIFdhaXQg Zm9yIHVwIHRvIDx0aW1lb3V0PiBzZWNvbmRzIGZvciB0aGUgcmVzcG9uc2UgdG8gYXJyaXZlLgor ICBQbGFjZSBhbGwgbm9uLXRlbG5ldCBkYXRhIGludG8gVGVsbmV0IFdhaXQgQnVmZmVyLgorICBJ ZiByZXNwb25zZSBkb2VzIGFycml2ZSByZXR1cm4gMSwgZWxzZSByZXR1cm4gMC4KKyovCisjaWZu ZGVmIFROX1dBSVRfQlVGX1NaCisjZGVmaW5lIFROX1dBSVRfQlVGX1NaIDQwOTYKKyNlbmRpZiAv KiBUTl9XQUlUX0JVRl9TWiAqLworc3RhdGljIGNoYXIgdG5fd2FpdF9idWZbVE5fV0FJVF9CVUZf U1pdOworc3RhdGljIGludCAgdG5fd2FpdF9pZHggPSAwOworI2lmbmRlZiBUTl9USU1FT1VUCisj ZGVmaW5lIFROX1RJTUVPVVQgMTIwCisjZW5kaWYgLyogVE5fVElNRU9VVCAqLworc3RhdGljIGlu dCB0bl93YWl0X3RtbyA9IFROX1RJTUVPVVQ7CisKKyNpZmRlZiBDS1NQSU5ORVIKK1ZPSUQKK3By dHdhaXQoc3RhdGUpIGludCBzdGF0ZTsgeworICAgIHN3aXRjaCAoc3RhdGUgJSA0KSB7CisgICAg ICBjYXNlIDA6CisgICAgICAgIHByaW50ZigiLyIpOworICAgICAgICBicmVhazsKKyAgICAgIGNh c2UgMToKKyAgICAgICAgcHJpbnRmKCItIik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAy OgorICAgICAgICBwcmludGYoIlxcIik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAzOgor ICAgICAgICBwcmludGYoInwiKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorI2VuZGlmIC8q IENLU1BJTk5FUiAqLworCitzdGF0aWMgaW50IG5mbGFnID0gMDsKKworaW50CisjaWZkZWYgQ0tf QU5TSUMKK3RuX3dhaXQoY2hhciAqIHdoZXJlKQorI2Vsc2UKK3RuX3dhaXQod2hlcmUpIGNoYXIg KiB3aGVyZTsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogdG5fd2FpdCAqLyB7CisgICAgZXh0 ZXJuIGludCBja3hlY2gsIGxvY2FsOworICAgIGludCBjaCA9IDAsIGNvdW50ID0gMDsKKyNpZm5k ZWYgTk9ISU5UUworICAgIGludCBub2hpbnRnaXZlbiA9IDE7CisgICAgZXh0ZXJuIGludCBoaW50 czsKKyNlbmRpZiAvKiBOT0hJTlRTICovCisgICAgaW50IG91dHN0YW5kaW5nOworI2lmZGVmIFRO X0NPTVBPUlQKKyAgICBpbnQgc2F2Y2FycjsKKyAgICBleHRlcm4gaW50IHR0Y2FycjsKKyNlbmRp ZiAvKiBUTl9DT01QT1JUICovCisKKyAgICAvKiBpZiAoIUlTX1RFTE5FVCgpKSByZXR1cm4oMSk7 ICovCisKKyAgICBydGltZXIoKTsKKworICAgIGRlYnVnKEYxMTAsInRuX3dhaXQgd2FpdGluZyBm b3IiLHdoZXJlLDApOworICAgIHRuX3dhaXRfdG1vID0gVE5fVElNRU9VVDsKKyAgICBkZWJ1ZyhG MTExLCJ0bl93YWl0IiwidGltZW91dCIsdG5fd2FpdF90bW8pOworICAgIG91dHN0YW5kaW5nID0g dG5fb3V0c3QoMCk7CisgICAgZGVidWcoRjExMSwidG5fd2FpdCIsIm91dHN0YW5kaW5nIixvdXRz dGFuZGluZyk7CisgICAgZGVidWcoRjExMSwidG5fd2FpdCIsInRuX3dhaXRfZmxnIix0bl93YWl0 X2ZsZyk7CisKKyAgICAvKiBUaGUgZm9sbG93aW5nIGlzIG1lYW50IHRvIGJlICEofHwpLiAgV2Ug b25seSB3YW50IHRvIHJldHVybiAqLworICAgIC8qIGltbWVkaWF0ZWx5IGlmIGJvdGggdGhlIHRu X3dhaXRfZmxnICYmIHRuX291dHN0KCkgYXJlIGZhbHNlICovCisgICAgaWYgKCEob3V0c3RhbmRp bmcgfHwgdG5fd2FpdF9mbGcpKSAgLyogSWYgbm8gbmVlZCB0byB3YWl0ICovCisgICAgICByZXR1 cm4oMSk7ICAgICAgICAgICAgICAgICAgICAgICAgLyogRG9uJ3QuICovCisKKyAgICBpZiAodG5f ZGViIHx8IGRlYnNlcykgdG5fZGVidWcoIjx3YWl0IGZvciBvdXRzdGFuZGluZyBuZWdvdGlhdGlv bnM+Iik7CisKKyNpZmRlZiBDS1NQSU5ORVIKKyAgICBpZiAoIXNzdGVsbmV0ICYmICFxdWlldCkK KyAgICAgICAgcHJ0d2FpdCgwKTsKKyNlbmRpZiAvKiBDS1NQSU5ORVIgKi8KKworICAgIC8qIFdh aXQgdXAgdG8gVE5fVElNRU9VVCBzZWMgZm9yIHJlc3BvbnNlcyB0byBvdXRzdGFuZGluZyB0ZWxu ZXQgbmVncyAqLworICAgIGRvIHsKKyNpZmRlZiBOVFNJRworICAgICAgICBja19paCgpOworI2Vu ZGlmIC8qIE5UU0lHICovCisgICAgICAgIGNoID0gdHRpbmMoMSk7CisgICAgICAgIGlmIChjaCA9 PSAtMSkgeyAgICAgICAgICAgICAgICAgLyogVGltZWQgb3V0ICovCisgICAgICAgICAgICBpZiAo IXNzdGVsbmV0ICYmICFxdWlldCkgeyAgLyogTGV0IHVzZXIga25vdy4uLiAqLworI2lmZGVmIENL U1BJTk5FUgorICAgICAgICAgICAgICAgIHByaW50ZigiXGIiKTsKKyAgICAgICAgICAgICAgICBw cnR3YWl0KGd0aW1lcigpKTsKKyNlbHNlCisgICAgICAgICAgICAgICAgaWYgKG5mbGFnID09IDAp IHsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIgTmVnb3RpYXRpb25zLiIpOworICAgICAg ICAgICAgICAgICAgICBuZmxhZysrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ICBpZiAobmZsYWcgPiAwKSB7CisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiLiIpOworICAg ICAgICAgICAgICAgICAgICBuZmxhZysrOworICAgICAgICAgICAgICAgICAgICBmZmx1c2goc3Rk b3V0KTsKKyAgICAgICAgICAgICAgICB9CisjZW5kaWYgLyogQ0tTUElOTkVSICovCisgICAgICAg ICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoY2ggPCAtMSkgeworICAgICAgICAgICAgcHJpbnRm KCJcclxuP0Nvbm5lY3Rpb24gY2xvc2VkIGJ5IHBlZXIuXHJcbiIpOworICAgICAgICAgICAgaWYg KHRuX2RlYiB8fCBkZWJzZXMpIHRuX2RlYnVnKCI8Y29ubmVjdGlvbiBjbG9zZWQgYnkgcGVlcj4i KTsKKyAgICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICBzd2l0 Y2ggKGNoKSB7CisgICAgICAgICAgY2FzZSBJQUM6CisjaWZkZWYgQ0tTUElOTkVSCisgICAgICAg ICAgICBpZiAoIXNzdGVsbmV0ICYmICFxdWlldCkKKyAgICAgICAgICAgICAgcHJpbnRmKCJcYiIp OworI2VuZGlmIC8qIENLU1BJTk5FUiAqLworICAgICAgICAgICAgY2ggPSB0bl9kb29wKChDSEFS KShjaCAmIDB4ZmYpLGluc2VydmVyP2NreGVjaDpkdXBsZXgsdHRpbmMpOworI2lmZGVmIENLU1BJ Tk5FUgorICAgICAgICAgICAgaWYgKCFzc3RlbG5ldCAmJiAhcXVpZXQpIHsKKyAgICAgICAgICAg ICAgICBwcnR3YWl0KGd0aW1lcigpKTsKKyAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBDS1NQSU5O RVIgKi8KKyAgICAgICAgICAgIGRlYnVnKEYxMDEsInRuX3dhaXQgdG5fZG9vcCIsIiIsY2gpOwor ICAgICAgICAgICAgc3dpdGNoIChjaCkgeworICAgICAgICAgICAgICBjYXNlIDE6CisgICAgICAg ICAgICAgICAgZHVwbGV4ID0gMTsgICAgICAgICAgICAgLyogVHVybiBvbiBlY2hvaW5nICovCisg ICAgICAgICAgICAgICAgaWYgKGluc2VydmVyKQorICAgICAgICAgICAgICAgICAgY2t4ZWNoID0g MTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSAyOgorICAgICAg ICAgICAgICAgIGR1cGxleCA9IDA7ICAgICAgICAgICAgIC8qIFR1cm4gb2ZmIGVjaG9pbmcgKi8K KyAgICAgICAgICAgICAgICBpZiAoaW5zZXJ2ZXIpCisgICAgICAgICAgICAgICAgICBja3hlY2gg PSAwOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDM6CisgICAg ICAgICAgICAgICAgdG5fd2FpdF9idWZbdG5fd2FpdF9pZHgrK10gPSBJQUM7CisgICAgICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgNDogICAgICAgICAgICAgICAgICAgLyog SUtTIGV2ZW50ICovCisgICAgICAgICAgICAgIGNhc2UgNjogICAgICAgICAgICAgICAgICAgLyog TG9nb3V0ICovCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgLTE6 CisJCWlmICghcXVpZXQpCisgICAgICAgICAgICAgICAgcHJpbnRmKCI/VGVsbmV0IE9wdGlvbiBu ZWdvdGlhdGlvbiBlcnJvci5cbiIpOworICAgICAgICAgICAgICAgIGlmICh0bl9kZWIgfHwgZGVi c2VzKQorICAgICAgICAgICAgICAgICAgdG5fZGVidWcoIjxUZWxuZXQgT3B0aW9uIG5lZ290aWF0 aW9uIGVycm9yPiIpOworICAgICAgICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAgICAgICAg IGNhc2UgLTI6CisgICAgICAgICAgICAgICAgcHJpbnRmKCI/Q29ubmVjdGlvbiBjbG9zZWQgYnkg cGVlci5cbiIpOworICAgICAgICAgICAgICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKSB0bl9kZWJ1 ZygiPENvbm5lY3Rpb24gY2xvc2VkIGJ5IHBlZXI+Iik7CisJCXR0Y2xvcygwKTsKKyAgICAgICAg ICAgICAgICByZXR1cm4oLTIpOworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg ICAgIGlmIChjaCA8IDApIHsKKyAgICAgICAgICAgICAgICAgIGlmICh0bl9kZWIgfHwgZGVic2Vz KSB0bl9kZWJ1ZygiPFVua25vd24gY29ubmVjdGlvbiBlcnJvcj4iKTsKKyAgICAgICAgICAgICAg ICAgIHJldHVybihjaCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSAvKiBzd2l0 Y2ggKi8KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisjaWZkZWYgQ0tT UElOTkVSCisgICAgICAgICAgICBpZiAoIXNzdGVsbmV0ICYmICFxdWlldCkgeworICAgICAgICAg ICAgICAgIHByaW50ZigiXGIiKTsKKyAgICAgICAgICAgICAgICBwcnR3YWl0KGd0aW1lcigpKTsK KyAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBDS1NQSU5ORVIgKi8KKyAgICAgICAgICAgIHRuX3dh aXRfYnVmW3RuX3dhaXRfaWR4KytdID0gKENIQVIpKGNoICYgMHhmZik7CisgICAgICAgIH0gLyog c3dpdGNoICovCisKKyAgICAgICAgb3V0c3RhbmRpbmcgPSB0bl9vdXRzdCgwKTsKKworICAgICAg ICBpZiAoIG91dHN0YW5kaW5nICYmIGNoICE9IElBQyApIHsKKyAgICAgICAgICAgIGludCB0aW1l ciA9IGd0aW1lcigpOworICAgICAgICAgICAgaWYgKCB0aW1lciA+IHRuX3dhaXRfdG1vICkgewor ICAgICAgICAgICAgICAgIGlmICghc3N0ZWxuZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgcHJp bnRmKAorICAgICAgICAgICAgICAgICAgICAiXHJcbj9UZWxuZXQgUHJvdG9jb2wgVGltZW91dCAt IGNvbm5lY3Rpb24gY2xvc2VkXHJcbiIpOworICAgICAgICAgICAgICAgICAgICBpZiAodG5fZGVi IHx8IGRlYnNlcykKKyAgICAgICAgICAgICAgICAgICAgICAgIHRuX2RlYnVnKAorICAgICAgICAg ICAgICAgICAgICAgICAgIjx0ZWxuZXQgcHJvdG9jb2wgdGltZW91dCAtIGNvbm5lY3Rpb24gY2xv c2VkPiIpOworICAgICAgICAgICAgICAgICAgICB0bl9vdXRzdCgxKTsKKyAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICAgICAgLyogaWYgd2UgZG8gbm90IGNsb3NlIHRoZSBjb25uZWN0aW9u LCB0aGVuIHdlIHdpbGwgYmxvY2sgKi8KKyAgICAgICAgICAgICAgICAvKiB0aGUgbmV4dCB0aW1l IHdlIGhpdCBhIHdhaXQuICBhbmQgaWYgd2UgZG9uJ3Qgd2Ugd2lsbCAqLworICAgICAgICAgICAg ICAgIC8qIGRvIHRoZSB3cm9uZyB0aGluZyBpZiB0aGUgaG9zdCBzZW5kcyAweEZGIGFuZCBkb2Vz ICAgICovCisgICAgICAgICAgICAgICAgLyogbm90IGludGVuZCBpdCB0byBiZSBhbiBJQUMuICAg ICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICB0dGNsb3MoMCk7Cisg ICAgICAgICAgICAgICAgd2h5Y2xvc2VkID0gV0NfVEVMT1BUOworICAgICAgICAgICAgICAgIHJl dHVybigtMSk7CisgICAgICAgICAgICB9CisjaWZuZGVmIE5PSElOVFMKKyAgICAgICAgICAgIGVs c2UgaWYgKCBoaW50cyAmJiB0aW1lciA+IDMwICYmIG5vaGludGdpdmVuICYmICFpbnNlcnZlciAp IHsKKyNpZmRlZiBDS1NQSU5ORVIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJp bnRmKCJcYiIpOworI2Vsc2UgLyogQ0tTUElOTkVSICovCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHByaW50ZigiXHJcbiIpOworI2VuZGlmIC8qIENLU1BJTk5FUiAqLworICAgICAg cHJpbnRmKCIqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbiIpOworICAgICAgICBwcmludGYo IlRoZSBUZWxuZXQgJXMgaXMgbm90IHNlbmRpbmcgcmVxdWlyZWQgcmVzcG9uc2VzLlxyXG5cclxu IiwKKyAgICAgICAgICAgICAgICBzc3RlbG5ldD8iY2xpZW50Ijoic2VydmVyIik7CisgICAgICB0 bl9vdXRzdCgxKTsKKyAgICAgIHByaW50ZigiXG5Zb3UgY2FuIGNvbnRpbnVlIHRvIHdhaXQgb3Ig eW91IGNhbiBjYW5jZWwgd2l0aCBDdHJsLUMuXHJcbiIpOworICAgICAgcHJpbnRmKCJJbiBjYXNl IHRoZSBUZWxuZXQgc2VydmVyIG5ldmVyIHJlc3BvbmRzIGFzIHJlcXVpcmVkLFxyXG4iKTsKKyAg ICAgIHByaW50ZigieW91IGNhbiB0cnkgY29ubmVjdGluZyB0byB0aGlzIGhvc3Qgd2l0aCBURUxO RVQgL05PV0FJVC5cclxuIik7CisgICAgICBwcmludGYoIlVzZSBTRVQgSElOVFMgT0ZGIHRvIHN1 cHByZXNzIGZ1cnRoZXIgaGludHMuXHJcbiIpOworICAgICAgcHJpbnRmKCIqKioqKioqKioqKioq KioqKioqKioqKioqXHJcbiIpOworICAgICAgbm9oaW50Z2l2ZW4gPSAwOworICAgICAgICAgICAg fQorI2VuZGlmIC8qIE5PSElOVFMgKi8KKyAgICAgICAgfQorCisjaWZkZWYgVE5fQ09NUE9SVAor ICAgICAgICAvKiBNdXN0IGRpc2FibGUgY2FycmllciBkZXRlY3QgY2hlY2sgaWYgd2UgYXJlIHVz aW5nIFRlbG5ldCBDb21wb3J0ICovCisgICAgICAgIHNhdmNhcnIgPSB0dGNhcnI7CisgICAgICAg IHR0c2NhcnIoQ0FSX09GRik7CisgICAgICAgIGNvdW50ID0gdHRjaGsoKTsKKyAgICAgICAgdHRz Y2FycihzYXZjYXJyKTsKKyNlbHNlIC8qIFROX0NPTVBPUlQgKi8KKyAgICAgICAgY291bnQgPSB0 dGNoaygpOworI2VuZGlmIC8qIFROX0NPTVBPUlQgKi8KKyAgICB9IHdoaWxlICgodG5fd2FpdF9p ZHggPCBUTl9XQUlUX0JVRl9TWikgJiYKKyAgICAgICAgICAgICAob3V0c3RhbmRpbmcgJiYgY291 bnQgPj0gMCkpOworCisgICAgaWYgKHRuX3dhaXRfaWR4ID09IFROX1dBSVRfQlVGX1NaKSB7Cisg ICAgICBpZiAodG5fZGViIHx8IGRlYnNlcykgdG5fZGVidWcoIjxUZWxuZXQgV2FpdCBCdWZmZXIg ZmlsbGVkPiIpOworICAgICAgcmV0dXJuKDApOworICAgIH0KKworICAgIGlmICghc3N0ZWxuZXQg JiYgIXF1aWV0KSB7CisjaWZkZWYgQ0tTUElOTkVSCisgICAgICAgIHByaW50ZigiXGIgXGIiKTsK KyNlbHNlCisgICAgICAgIGlmIChuZmxhZyA+IDApIHsKKyAgICAgICAgICAgIHByaW50ZigiIChP SylcbiIpOworICAgICAgICAgICAgbmZsYWcgPSAtMTsKKyAgICAgICAgfQorI2VuZGlmIC8qIENL U1BJTk5FUiAqLworICAgIH0KKyAgICBpZiAodG5fZGViIHx8IGRlYnNlcykgdG5fZGVidWcoIjxu byBvdXRzdGFuZGluZyBuZWdvdGlhdGlvbnM+Iik7CisgICAgcmV0dXJuKDApOworfQorCisvKiBQ dXNoIGRhdGEgZnJvbSB0aGUgVGVsbmV0IFdhaXQgQnVmZmVyIGludG8gdGhlIEkvTyBRdWV1ZSAq LworLyogUmV0dXJuIDEgb24gc3VjY2VzcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKi8KKworaW50Cit0bl9wdXNoKCkgeworI2lmZGVmIE5FVExFQlVGCisgICAgZXh0ZXJu IGludCB0dF9wdXNoX2luaXRlZDsKKyNlbmRpZiAvKiBORVRMRUJVRiAqLworICAgIC8qIGlmICgh SVNfVEVMTkVUKCkpIHJldHVybigxKTsgKi8KKworICAgIGlmICh0bl93YWl0X2lkeCkgeworICAg ICAgICBja2hleGR1bXAoKENIQVIgKikidG5fcHVzaCIsdG5fd2FpdF9idWYsdG5fd2FpdF9pZHgp OworI2lmZGVmIE5FVExFQlVGCisgICAgICAgIGlmICghdHRfcHVzaF9pbml0ZWQpICAgICAgICAg ICAgLyogTG9jYWwgaGFuZGxpbmcgKi8KKyAgICAgICAgICBsZV9pbml0KCk7CisgICAgICAgIGxl X3B1dHMoKENIQVIgKil0bl93YWl0X2J1Zix0bl93YWl0X2lkeCk7CisjZWxzZSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogRXh0ZXJuYWwgaGFuZGxpbmcuLi4gKi8KKyNpZmRl ZiBPUzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBLOTUgaGFzIGl0cyBvd24gd2F5 ICovCisgICAgICAgIGxlX3B1dHMoKENIQVIgKil0bl93YWl0X2J1Zix0bl93YWl0X2lkeCk7Cisj ZWxzZQorI2lmZGVmIFRUTEVCVUYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVOSVgsIGV0 YyAqLworICAgICAgICBsZV9wdXRzKChDSEFSICopdG5fd2FpdF9idWYsdG5fd2FpdF9pZHgpOwor I2Vsc2UKKy8qCisgIElmIHlvdSBzZWUgdGhpcyBtZXNzYWdlIGluIEFPUy9WUywgT1MtOSwgVk9T LCBldGMsIHlvdSBuZWVkIHRvIGNvcHkKKyAgdGhlICNpZmRlZiBUVExFQlVGLi4jZW5kaWYgY29k ZSBmcm9tIGNrdXRpby5jIHRvIHRoZSBjb3JyZXNwb25kaW5nCisgIHBsYWNlcyBpbiB5b3VyIGNr P3Rpby5jIG1vZHVsZS4KKyovCisgICAgICAgIHByaW50ZigidG5fcHVzaCBjYWxsZWQgYnV0IG5v dCBpbXBsZW1lbnRlZCAtIGRhdGEgbG9zdC5cbiIpOworI2VuZGlmIC8qIFRUTEVCVUYgKi8KKyNl bmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBORVRMRUJVRiAqLworICAgICAgICB0bl93YWl0X2lk eCA9IDA7CisgICAgfQorICAgIHRuX3dhaXRfdG1vID0gVE5fVElNRU9VVDsgICAgICAgICAgIC8q IFJlc2V0IHdhaXQgdGltZXIgc3RhdHMgKi8KKyAgICByZXR1cm4oMSk7Cit9CisKKy8qICBUIE4g XyBTIE8gUCBUICAqLworLyoKKyAgIFNlbmRzIGEgdGVsbmV0IG9wdGlvbiwgYXZvaWRzIGxvb3Bz LgorICAgUmV0dXJucyAxIGlmIGNvbW1hbmQgd2FzIHNlbnQsIDAgaWYgbm90LCAtMSBvbiBlcnJv ci4KKyovCitpbnQKK3RuX3NvcHQoY21kLG9wdCkgaW50IGNtZCwgb3B0OyB7ICAgICAgICAvKiBU RUxORVQgU0VORCBPUFRJT04gKi8KKyAgICBDSEFSIGJ1Zls1XTsKKyAgICBjaGFyIG1zZ1sxMjhd OworICAgIGludCByYzsKKyAgICBpZiAodHRuZXQgIT0gTkVUX1RDUEIpIHJldHVybigtMSk7ICAv KiBNdXN0IGJlIFRDUC9JUCAqLworICAgIGlmICh0dG5wcm90byAhPSBOUF9URUxORVQpIHJldHVy bigtMSk7IC8qIE11c3QgYmUgdGVsbmV0IHByb3RvY29sICovCisgICAgaWYgKCFURUxDTURfT0so Y21kKSkgcmV0dXJuKC0xKTsKKyAgICBpZiAoVEVMT1BUX09LKG9wdCkpIHsKKyAgICAgICAgaWYg KGNtZCA9PSBETyAmJiBURUxPUFRfVU5BTlNXRVJFRF9ETyhvcHQpKSByZXR1cm4oMCk7CisgICAg ICAgIGlmIChjbWQgPT0gV0lMTCAmJiBURUxPUFRfVU5BTlNXRVJFRF9XSUxMKG9wdCkpIHJldHVy bigwKTsKKyAgICAgICAgaWYgKGNtZCA9PSBET05UICYmIFRFTE9QVF9VTkFOU1dFUkVEX0RPTlQo b3B0KSkgcmV0dXJuKDApOworICAgICAgICBpZiAoY21kID09IFdPTlQgJiYgVEVMT1BUX1VOQU5T V0VSRURfV09OVChvcHQpKSByZXR1cm4oMCk7CisgICAgfQorI2lmZGVmIENLX1NTTAorICAgIGlm IChURUxPUFRfU0IoVEVMT1BUX1NUQVJUX1RMUykuc3RhcnRfdGxzLm1lX2ZvbGxvd3MpIHsKKyAg ICAgICAgcmV0dXJuKDApOworICAgIH0KKyNlbmRpZiAvKiBDS19TU0wgKi8KKworICAgIGlmIChj bWQgPT0gRE8gJiYgb3B0ID09IFRFTE9QVF9BVVRIRU5USUNBVElPTikKKyAgICAgIGJ1ZlswXSA9 IDA7CisKKyAgICBpZiAodG5faW5maW5pdGUgJiYgVEVMT1BUX09LKG9wdCkpIHsgLyogU2VlIGNv bW1lbnQgYWJvdmUgYWJvdXQgICAqLworICAgICAgICBpbnQgaW5kZXggPSBURUxPUFRfSU5ERVgo b3B0KTsgICAvKiBwcmV2ZW50aW5nIGluZmluaXRlIGxvb3BzICovCisgICAgICAgIGludCBtID0g Y21kIC0gV0lMTDsKKworICAgICAgICBpZiAodG5jbnRzW2luZGV4XVttXSA+IE1BWFROQ05UKSB7 CisjaWZkZWYgREVCVUcKKyAgICAgICAgICAgIGlmICh0bl9kZWIgfHwgZGVic2VzIHx8IGRlYmxv ZykgeworICAgICAgICAgICAgICAgIGNrbWFrbXNnKG1zZyxzaXplb2YobXNnKSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICJURUxORVQgbmVnb3RpYXRpb24gbG9vcCAiLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgVEVMQ01EKGNtZCksICIgIiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIFRFTE9QVChvcHQpKTsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLG1zZywiIixv cHQpOworICAgICAgICAgICAgICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKSB0bl9kZWJ1Zyhtc2cp OworICAgICAgICAgICAgfQorI2VuZGlmIC8qIERFQlVHICovCisgICAgICAgICAgICByZXR1cm4o MCk7CisgICAgICAgIH0KKyAgICAgICAgdG5jbnRzW2luZGV4XVttXSsrOworICAgICAgICB0bmNu dHNbaW5kZXhdW3Rub3Bwc1ttXV0gPSAwOworICAgIH0KKyAgICBidWZbMF0gPSAoQ0hBUikgSUFD OworICAgIGJ1ZlsxXSA9IChDSEFSKSAoY21kICYgMHhmZik7CisgICAgYnVmWzJdID0gKENIQVIp IChvcHQgJiAweGZmKTsKKyAgICBidWZbM10gPSAoQ0hBUikgMDsKKyNpZmRlZiBERUJVRworICAg IGlmICgodG5fZGViIHx8IGRlYnNlcyB8fCBkZWJsb2cpICYmIGNtZCAhPSBTQikKKyAgICAgICAg Y2ttYWttc2cobXNnLHNpemVvZihtc2cpLCJURUxORVQgU0VOVCAiLFRFTENNRChjbWQpLCIgIiwK KyAgICAgICAgICAgICAgICAgIFRFTE9QVChvcHQpKTsKKyNlbmRpZiAvKiBERUJVRyAqLworI2lm ZGVmIE9TMgorICAgIFJlcXVlc3RUZWxuZXRNdXRleCggU0VNX0lOREVGSU5JVEVfV0FJVCApOwor I2VuZGlmCisgICAgZGVidWcoRjEwMSxtc2csIiIsb3B0KTsKKyAgICBpZiAoKHRuX2RlYiB8fCBk ZWJzZXMpICYmIGNtZCAhPSBTQikKKyAgICAgIHRuX2RlYnVnKG1zZyk7CisgICAgcmMgPSAodHRv bChidWYsMykgPCAzKTsKKyNpZmRlZiBPUzIKKyAgICBSZWxlYXNlVGVsbmV0TXV0ZXgoKTsKKyNl bmRpZgorICAgIGlmIChyYykKKyAgICAgICAgcmV0dXJuKC0xKTsKKworCisgICAgaWYgKFRFTE9Q VF9PSyhvcHQpKSB7CisgICAgICAgIGlmIChjbWQgPT0gRE9OVCAmJiBURUxPUFRfVU5BTlNXRVJF RF9ETyhvcHQpKQorICAgICAgICAgIFRFTE9QVF9VTkFOU1dFUkVEX0RPKG9wdCkgPSAwOworICAg ICAgICBpZiAoY21kID09IFdPTlQgJiYgVEVMT1BUX1VOQU5TV0VSRURfV0lMTChvcHQpKQorICAg ICAgICAgIFRFTE9QVF9VTkFOU1dFUkVEX1dJTEwob3B0KSA9IDA7CisgICAgICAgIGlmIChjbWQg PT0gRE8gJiYgVEVMT1BUX1VOQU5TV0VSRURfRE9OVChvcHQpKQorICAgICAgICAgIFRFTE9QVF9V TkFOU1dFUkVEX0RPTlQob3B0KSA9IDA7CisgICAgICAgIGlmIChjbWQgPT0gV0lMTCAmJiBURUxP UFRfVU5BTlNXRVJFRF9XT05UKG9wdCkpCisgICAgICAgICAgVEVMT1BUX1VOQU5TV0VSRURfV09O VChvcHQpID0gMDsKKyAgICB9CisgICAgcmV0dXJuKDEpOworfQorCisvKiBTZW5kIGEgdGVsbmV0 IHN1Yi1vcHRpb24gKi8KKy8qIFJldHVybnMgMSBpZiBjb21tYW5kIHdhcyBzZW50LCAwIGlmIG5v dCwgLTEgb24gZXJyb3IgKi8KKworaW50Cit0bl9zc2JvcHQob3B0LHN1YixkYXRhLGxlbikgaW50 IG9wdCwgc3ViOyBDSEFSICogZGF0YTsgaW50IGxlbjsgeworICAgIENIQVIgYnVmWzI1Nl07Cisg ICAgaW50IG4sbSxyYzsKKworICAgIGlmICh0dG5ldCAhPSBORVRfVENQQikgcmV0dXJuKDApOyAg IC8qIE11c3QgYmUgVENQL0lQICovCisgICAgaWYgKHR0bnByb3RvICE9IE5QX1RFTE5FVCkgcmV0 dXJuKDApOyAvKiBNdXN0IGJlIHRlbG5ldCBwcm90b2NvbCAqLworICAgIGlmICghVEVMT1BUX09L KG9wdCkpIHJldHVybigtMSk7CisgICAgaWYgKGxlbiA8IDAgfHwgbGVuID4gMjUwKSB7CisgICAg ICAgIGRlYnVnKEYxMTEsIlVuYWJsZSB0byBTZW5kIFRFTE5FVCBTQiAtIGRhdGEgdG9vIGxvbmci LCJsZW4iLGxlbik7CisgICAgICAgIHJldHVybigtMSk7ICAgICAgICAgICAgICAgICAgICAgLyog RGF0YSB0b28gbG9uZyAqLworICAgIH0KKyNpZmRlZiBDS19TU0wKKyAgICBpZiAoVEVMT1BUX1NC KFRFTE9QVF9TVEFSVF9UTFMpLnN0YXJ0X3Rscy5tZV9mb2xsb3dzKSB7CisgICAgICAgIGlmICh0 dGNoaygpIDwgMCkKKyAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICBlbHNlCisgICAgICAg ICAgcmV0dXJuKDEpOworICAgIH0KKyNlbmRpZiAvKiBDS19TU0wgKi8KKworICAgIGlmICghZGF0 YSkgbGVuID0gMDsKKworICAgIGJ1ZlswXSA9IChDSEFSKSBJQUM7CisgICAgYnVmWzFdID0gKENI QVIpIChTQiAmIDB4ZmYpOworICAgIGJ1ZlsyXSA9IChDSEFSKSAob3B0ICYgMHhmZik7CisgICAg YnVmWzNdID0gKENIQVIpIChzdWIgJiAweGZmKTsKKyAgICBpZiAoZGF0YSAmJiBsZW4gPiAwKSB7 CisgICAgICAgIG1lbWNweSgmYnVmWzRdLGRhdGEsbGVuKTsKKyAgICB9CisgICAgYnVmWzQrbGVu XSA9IChDSEFSKSBJQUM7CisgICAgYnVmWzUrbGVuXSA9IChDSEFSKSBTRTsKKworI2lmZGVmIERF QlVHCisgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMgfHwgZGVibG9nKSB7CisgICAgICAgIGlmIChv cHQgPT0gVEVMT1BUX1NUQVJUX1RMUyAmJiBzdWIgPT0gMSkKKyAgICAgICAgICBja21ha21zZyh0 bl9tc2dfb3V0LFROX01TR19MRU4sIlRFTE5FVCBTRU5UIFNCICIsCisgICAgICAgICAgICAgICAg ICAgIFRFTE9QVChvcHQpLCIgRk9MTE9XUyBJQUMgU0UiLE5VTEwpOworICAgICAgICBlbHNlIGlm IChvcHQgPT0gVEVMT1BUX1RUWVBFICYmIHN1YiA9PSAxKQorICAgICAgICAgIGNrbWFrbXNnKHRu X21zZ19vdXQsVE5fTVNHX0xFTiwiVEVMTkVUIFNFTlQgU0IgIiwgVEVMT1BUKG9wdCksCisgICAg ICAgICAgICAgICAgICAgICIgU0VORCBJQUMgU0UiLE5VTEwpOworICAgICAgICBlbHNlIGlmIChv cHQgPT0gVEVMT1BUX1RUWVBFICYmIHN1YiA9PSAwKQorICAgICAgICAgIGNrbWFreG1zZyh0bl9t c2dfb3V0LFROX01TR19MRU4sIlRFTE5FVCBTRU5UIFNCICIsVEVMT1BUKG9wdCksIiBJUyAiLAor ICAgICAgICAgICAgICAgICAgICAoY2hhciAqKWRhdGEsIiBJQUMgU0UiLE5VTEwsTlVMTCxOVUxM LE5VTEwsTlVMTCxOVUxMLE5VTEwpOworICAgICAgICBlbHNlIGlmIChvcHQgPT0gVEVMT1BUX05F V0VOVklST04pIHsKKyAgICAgICAgICAgIGludCBpLCBxdW90ZTsKKyAgICAgICAgICAgIGNrbWFr bXNnKHRuX21zZ19vdXQsVE5fTVNHX0xFTiwiVEVMTkVUIFNFTlQgU0IgIiwKKyAgICAgICAgICAg ICAgICAgICAgIFRFTE9QVChURUxPUFRfTkVXRU5WSVJPTiksIiAiLAorICAgICAgICAgICAgICAg ICAgICAgc3ViID09IFRFTFFVQUxfU0VORCA/ICJTRU5EIiA6CisgICAgICAgICAgICAgICAgICAg ICBzdWIgPT0gVEVMUVVBTF9JUyA/ICJJUyIgOgorICAgICAgICAgICAgICAgICAgICAgc3ViID09 IFRFTFFVQUxfSU5GTyA/IklORk8iIDogIlVOS05PV04iICk7CisgICAgICAgICAgICBmb3IgKGkg PSAwLCBxdW90ZSA9IDA7IGkgPCBsZW47IGkrKykgeworICAgICAgICAgICAgICAgIGlmIChxdW90 ZSkgeworICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKGhleGJ1ZiwiJTAyeCIsZGF0YVtpXSk7 IC8qIHNhZmUgYnV0IHVnbHkgKi8KKyAgICAgICAgICAgICAgICAgICAgY2tzdHJuY2F0KHRuX21z Z19vdXQsaGV4YnVmLFROX01TR19MRU4pOworICAgICAgICAgICAgICAgICAgICBxdW90ZSA9IDA7 CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChk YXRhW2ldKSB7CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSBURUxfRU5WX1VTRVJWQVI6Cisg ICAgICAgICAgICAgICAgICAgICAgICBja3N0cm5jYXQodG5fbXNnX291dCwiIFVTRVJWQVIgIixU Tl9NU0dfTEVOKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg ICAgICAgICAgIGNhc2UgVEVMX0VOVl9WQVI6CisgICAgICAgICAgICAgICAgICAgICAgICBja3N0 cm5jYXQodG5fbXNnX291dCwiIFZBUiAiLFROX01TR19MRU4pOworICAgICAgICAgICAgICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSBURUxfRU5WX1ZBTFVFOgor ICAgICAgICAgICAgICAgICAgICAgICAgY2tzdHJuY2F0KHRuX21zZ19vdXQsIiBWQUxVRSAiLFRO X01TR19MRU4pOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg ICAgICAgICAgY2FzZSBURUxfRU5WX0VTQzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNrc3Ry bmNhdCh0bl9tc2dfb3V0LCIgRVNDICIsVE5fTVNHX0xFTik7CisgICAgICAgICAgICAgICAgICAg ICAgICBxdW90ZSA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg ICAgICAgICAgICAgICBjYXNlIElBQzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNrc3RybmNh dCh0bl9tc2dfb3V0LCIgSUFDICIsVE5fTVNHX0xFTik7CisgICAgICAgICAgICAgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg ICAgICAgICAgc3ByaW50ZihoZXhidWYsIiVjIixkYXRhW2ldKTsgLyogc2FmZSBidXQgdWdseSAq LworICAgICAgICAgICAgICAgICAgICAgICAgY2tzdHJuY2F0KHRuX21zZ19vdXQsaGV4YnVmLFRO X01TR19MRU4pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgfQorICAgICAgICAgICAgY2tzdHJuY2F0KHRuX21zZ19vdXQsIiBJQUMgU0UiLFRO X01TR19MRU4pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3ByaW50ZihoZXhidWYs IiUwMngiLHN1Yik7ICAgICAgICAgICAgIC8qIHNhZmUgYnV0IHVnbHkgKi8KKyAgICAgICAgICAg IGNrbWFreG1zZyh0bl9tc2dfb3V0LFROX01TR19MRU4sCisgICAgICAgICAgICAgICAgICAgICAg IlRFTE5FVCBTRU5UIFNCICIsVEVMT1BUKG9wdCksCisgICAgICAgICAgICAgICAgICAgICAgIiAi LAorICAgICAgICAgICAgICAgICAgICAgIGhleGJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAi IDxkYXRhPiBJQUMgU0UiLAorICAgICAgICAgICAgICAgICAgICAgICBOVUxMLE5VTEwsTlVMTCxO VUxMLE5VTEwsTlVMTCxOVUxMCisgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgfQor ICAgIH0KKyNlbmRpZiAvKiBERUJVRyAqLworI2lmZGVmIE9TMgorICAgIFJlcXVlc3RUZWxuZXRN dXRleCggU0VNX0lOREVGSU5JVEVfV0FJVCApOworI2VuZGlmIC8qIE9TMiAqLworI2lmZGVmIERF QlVHCisgICAgZGVidWcoRjEwMSx0bl9tc2dfb3V0LCIiLG9wdCk7CisgICAgaWYgKHRuX2RlYiB8 fCBkZWJzZXMpCisgICAgICB0bl9kZWJ1Zyh0bl9tc2dfb3V0KTsKKyNlbmRpZiAvKiBERUJVRyAq LworICAgIHJjID0gKHR0b2woYnVmLDYrbGVuKSA8IDYrbGVuKTsKKyNpZmRlZiBPUzIKKyAgICBS ZWxlYXNlVGVsbmV0TXV0ZXgoKTsKKyNlbmRpZgorCisgICAgaWYgKHJjKQorICAgICAgcmV0dXJu KC0xKTsKKyAgICByZXR1cm4oMSk7Cit9CisKKy8qCisgIHRuX2ZsdWkoKSAtLSBQcm9jZXNzZXMg YWxsIHdhaXRpbmcgZGF0YSBmb3IgVGVsbmV0IGNvbW1hbmRzLgorICBBbGwgbm9uLVRlbG5ldCBk YXRhIGlzIHRvIGJlIHN0b3JlZCBpbnRvIHRoZSBUZWxuZXQgV2FpdCBCdWZmZXIuCisgIFJldHVy bnMgMSBvbiBzdWNjZXNzLgorKi8KK2ludAordG5fZmx1aSgpIHsKKyAgICBleHRlcm4gaW50IGNr eGVjaDsKKyAgICBpbnQgeCA9IDA7CisKKyAgICAvKiBpZiAoIUlTX1RFTE5FVCgpKSByZXR1cm4o MCk7ICovCisKKyAgICAvKiBXYWl0IHVwIHRvIDUgc2VjIGZvciByZXNwb25zZXMgdG8gb3V0c3Rh bmRpbmcgdGVsbmV0IG5lZ290aWF0aW9ucyAqLworICAgIHdoaWxlICh4ID49IDAgJiYgdHRjaGso KSA+IDAgICYmIHRuX3dhaXRfaWR4IDwgVE5fV0FJVF9CVUZfU1opIHsKKyAgICAgICAgeCA9IHR0 aW5jKDEpOworICAgICAgICBzd2l0Y2ggKHgpIHsKKyAgICAgICAgICBjYXNlIElBQzoKKyAgICAg ICAgICAgIHggPSB0bl9kb29wKChDSEFSKSh4ICYgMHhmZiksaW5zZXJ2ZXI/Y2t4ZWNoOmR1cGxl eCx0dGluYyk7CisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJ0bl9mbHVpIHRuX2Rvb3AiLCIiLHgp OworICAgICAgICAgICAgc3dpdGNoICh4KSB7CisgICAgICAgICAgICAgIGNhc2UgMTogICAgICAg ICAgICAgICAgICAgLyogVHVybiBvbiBlY2hvaW5nICovCisgICAgICAgICAgICAgICAgZHVwbGV4 ID0gMTsKKyAgICAgICAgICAgICAgICBpZiAoaW5zZXJ2ZXIpCisgICAgICAgICAgICAgICAgICBj a3hlY2ggPSAxOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDI6 ICAgICAgICAgICAgICAgICAgIC8qIFR1cm4gb2ZmIGVjaG9pbmcgKi8KKyAgICAgICAgICAgICAg ICBkdXBsZXggPSAwOworICAgICAgICAgICAgICAgIGlmIChpbnNlcnZlcikKKyAgICAgICAgICAg ICAgICAgIGNreGVjaCA9IDA7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg IGNhc2UgMzoKKyAgICAgICAgICAgICAgICB0bl93YWl0X2J1Zlt0bl93YWl0X2lkeCsrXSA9IElB QzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSA0OiAgICAgICAg ICAgICAgICAgICAvKiBJS1MgZXZlbnQgKi8KKyAgICAgICAgICAgICAgY2FzZSA2OiAgICAgICAg ICAgICAgICAgICAvKiBMb2dvdXQgKi8KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg ICBpZiAoeCA+PSAwKQorICAgICAgICAgICAgICB0bl93YWl0X2J1Zlt0bl93YWl0X2lkeCsrXSA9 IHg7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuKDEpOworfQorCit1bnNpZ25lZCBjaGFy ICoKK3RuX2dldF9kaXNwbGF5KCkKK3sKKyAgICBjaGFyICogZGlzcCA9IE5VTEw7CisgICAgc3Rh dGljIGNoYXIgdG1wbG9jWzI1Nl07CisKKyAgICAvKiBNdXN0IGNvbXB1dGUgdGhlIERJU1BMQVkg c3RyaW5nIHdlIGFyZSBnb2luZyB0byBzZW5kIHRvIHRoZSBob3N0ICovCisgICAgLyogSWYgb25l IGlzIG5vdCBhc3NpZ25lZCwgZG8gbm90IHNlbmQgYSBzdHJpbmcgdW5sZXNzIHRoZSB1c2VyIGhh cyAqLworICAgIC8qIGV4cGxpY2l0ZWRseSByZXF1ZXN0ZWQgd2UgdHJ5IHRvIHNlbmQgb25lIHZp YSBYLURpc3BsYXkgTG9jYXRpb24gKi8KKyAgICAvKiBCdXQgZG8gbm90IHNlbmQgYSBzdHJpbmcg YXQgYWxsIGlmIEZPUldBUkRfWCBpcyBpbiB1c2UuICAgICAgICAgICovCisKKyAgICAvKiBpZiAo IUlTX1RFTE5FVCgpKSByZXR1cm4oMCk7ICovCisKKyAgICBkZWJ1ZyhGMTEwLCJ0bl9nZXRfZGlz cGxheSgpIG15aXBhZGRyIixteWlwYWRkciwwKTsKKyNpZmRlZiBDS19FTlZJUk9OTUVOVAorICAg IGRlYnVnKEYxMTAsInRuX2dldF9kaXNwbGF5KCkgdG5fZW52X2Rpc3AiLHRuX2Vudl9kaXNwLDAp OworICAgIGlmICh0bl9lbnZfZGlzcFswXSkgeworICAgICAgICBpbnQgY29sb24gPSBja2luZGV4 KCI6Iix0bl9lbnZfZGlzcCwwLDAsMSk7CisgICAgICAgIGlmICggIWNvbG9uICkgeworICAgICAg ICAgICAgY2ttYWttc2codG1wbG9jLDI1NixteWlwYWRkciwiOiIsdG5fZW52X2Rpc3AsTlVMTCk7 CisgICAgICAgICAgICBkaXNwID0gdG1wbG9jOworICAgICAgICB9IGVsc2UgaWYgKCBja2luZGV4 KCJsb2NhbGhvc3Q6Iix0bl9lbnZfZGlzcCwwLDAsMCkgfHwKKyAgICAgICAgICAgICAgICAgICAg Y2tpbmRleCgidW5peDoiLHRuX2Vudl9kaXNwLDAsMCwwKSB8fAorICAgICAgICAgICAgICAgICAg ICBja2luZGV4KCIxMjcuMC4wLjE6Iix0bl9lbnZfZGlzcCwwLDAsMCkgfHwKKyAgICAgICAgICAg ICAgICAgICAgIWNrc3RyY21wKCIwOiIsdG5fZW52X2Rpc3AsMiwxKSB8fAorICAgICAgICAgICAg ICAgICAgICB0bl9lbnZfZGlzcFswXSA9PSAnOicgKSB7CisgICAgICAgICAgICBja21ha21zZyh0 bXBsb2MsMjU2LG15aXBhZGRyLCI6IiwmdG5fZW52X2Rpc3BbY29sb25dLE5VTEwpOworICAgICAg ICAgICAgZGlzcCA9IHRtcGxvYzsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBkaXNwID0g dG5fZW52X2Rpc3A7CisgICAgfQorICAgIGVsc2UKKyNlbmRpZiAvKiBDS19FTlZJUk9OTUVOVCAq LworICAgICAgICBpZiAoVEVMT1BUX01FKFRFTE9QVF9YRElTUExPQykgfHwKKyAgICAgICAgICAg ICAgVEVMT1BUX1UoVEVMT1BUX0ZPUldBUkRfWCkpIHsKKyAgICAgICAgY2ttYWttc2codG1wbG9j LDI1NixteWlwYWRkciwiOjAuMCIsTlVMTCxOVUxMKTsKKyAgICAgICAgZGlzcCA9IHRtcGxvYzsK KyAgICB9CisgICAgZGVidWcoRjExMCwidG5fZ2V0X2Rpc3BsYXkoKSByZXR1cm5zIixkaXNwLDAp OworICAgIHJldHVybigoQ0hBUiAqKWRpc3ApOworfQorCisjaWZkZWYgQ0tfRk9SV0FSRF9YCitz dGF0aWMgWGF1dGggZmFrZV94YXV0aCA9IHswLDAsTlVMTCwwLE5VTEwsMCxOVUxMLDAsTlVMTH07 CitzdGF0aWMgWGF1dGggKnJlYWxfeGF1dGg9TlVMTDsKKworLyoKKyAqIEF1dGhvcjogIEppbSBG dWx0b24sIE1JVCBYIENvbnNvcnRpdW0KKyAqCisgKiBmd2R4X3BhcnNlX2Rpc3BsYXluYW1lIC0K KyAqIGRpc3BsYXkgYSBkaXNwbGF5IHN0cmluZyB1cCBpbnRvIGl0cyBjb21wb25lbnQgcGFydHMK KyAqLworI2lmZGVmIFVOSVgKKyNkZWZpbmUgVU5JWF9DT05ORUNUSU9OICJ1bml4IgorI2RlZmlu ZSBVTklYX0NPTk5FQ1RJT05fTEVOR1RIIDQKKyNlbmRpZgorCisvKgorICogcHJpdmF0ZSB1dGls aXR5IHJvdXRpbmVzCisgKi8KKworc3RhdGljIGludAorI2lmZGVmIENLX0FOU0lDCitYbXVHZXRI b3N0bmFtZSAoY2hhciAqYnVmLCBpbnQgbWF4bGVuKQorI2Vsc2UKK1htdUdldEhvc3RuYW1lIChi dWYsIG1heGxlbikKKyAgICBjaGFyICpidWY7CisgICAgaW50IG1heGxlbjsKKyNlbmRpZiAvKiBD S19BTlNJQyAqLworeworICAgIGludCBsZW47CisKKyNpZmRlZiBORUVEX1VUU05BTUUKKyAgICAv KgorICAgICAqIHNhbWUgaG9zdCBuYW1lIGNyb2NrIGFzIGluIHNlcnZlciBhbmQgeGluaXQuCisg ICAgICovCisgICAgc3RydWN0IHV0c25hbWUgbmFtZTsKKworICAgIHVuYW1lICgmbmFtZSk7Cisg ICAgbGVuID0gc3RybGVuIChuYW1lLm5vZGVuYW1lKTsKKyAgICBpZiAobGVuID49IG1heGxlbikg bGVuID0gbWF4bGVuIC0gMTsKKyAgICBzdHJuY3B5IChidWYsIG5hbWUubm9kZW5hbWUsIGxlbik7 CisgICAgYnVmW2xlbl0gPSAnXDAnOworI2Vsc2UKKyAgICBidWZbMF0gPSAnXDAnOworICAgICh2 b2lkKSBnZXRob3N0bmFtZSAoYnVmLCBtYXhsZW4pOworICAgIGJ1ZiBbbWF4bGVuIC0gMV0gPSAn XDAnOworICAgIGxlbiA9IHN0cmxlbihidWYpOworI2VuZGlmIC8qIGhwdXggKi8KKyAgICByZXR1 cm4gbGVuOworfQorCitzdGF0aWMgY2hhciAqCisjaWZkZWYgQ0tfQU5TSUMKK2NvcHlzdHJpbmcg KGNoYXIgKnNyYywgaW50IGxlbikKKyNlbHNlCitjb3B5c3RyaW5nIChzcmMsIGxlbikKKyAgICBj aGFyICpzcmM7CisgICAgaW50IGxlbjsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworICAgIGNo YXIgKmNwOworCisgICAgaWYgKCFzcmMgJiYgbGVuICE9IDApIHJldHVybiBOVUxMOworICAgIGNw ID0gbWFsbG9jIChsZW4gKyAxKTsKKyAgICBpZiAoY3ApIHsKKyAgICAgICAgaWYgKHNyYykgc3Ry bmNweSAoY3AsIHNyYywgbGVuKTsKKyAgICAgICAgY3BbbGVuXSA9ICdcMCc7CisgICAgfQorICAg IHJldHVybiBjcDsKK30KKworc3RhdGljIGNoYXIgKgorI2lmZGVmIENLX0FOU0lDCitnZXRfbG9j YWxfaG9zdG5hbWUgKGNoYXIgKmJ1ZiwgaW50IG1heGxlbikKKyNlbHNlCitnZXRfbG9jYWxfaG9z dG5hbWUgKGJ1ZiwgbWF4bGVuKQorICAgIGNoYXIgKmJ1ZjsKKyAgICBpbnQgbWF4bGVuOworI2Vu ZGlmCit7CisgICAgYnVmWzBdID0gJ1wwJzsKKyAgICAodm9pZCkgWG11R2V0SG9zdG5hbWUgKGJ1 ZiwgbWF4bGVuKTsKKyAgICByZXR1cm4gKGJ1ZlswXSA/IGJ1ZiA6IE5VTEwpOworfQorCisjaWZu ZGVmIFVOSVgKK3N0YXRpYyBjaGFyICoKK2NvcHlob3N0bmFtZSAoKQoreworICAgIGNoYXIgYnVm WzI1Nl07CisKKyAgICByZXR1cm4gKGdldF9sb2NhbF9ob3N0bmFtZSAoYnVmLCBzaXplb2YgYnVm KSA/CisgICAgICAgICAgICBjb3B5c3RyaW5nIChidWYsIHN0cmxlbiAoYnVmKSkgOiBOVUxMKTsK K30KKyNlbmRpZgorCisKK2ludAorI2lmZGVmIENLX0FOU0lDCitmd2R4X3BhcnNlX2Rpc3BsYXlu YW1lIChjaGFyICpkaXNwbGF5bmFtZSwgaW50ICpmYW1pbHlwLCBjaGFyICoqaG9zdHAsCisgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgKmRweW51bXAsIGludCAqc2NybnVtcCwgY2hhciAqKnJl c3RwKQorI2Vsc2UKK2Z3ZHhfcGFyc2VfZGlzcGxheW5hbWUgKGRpc3BsYXluYW1lLCBmYW1pbHlw LCBob3N0cCwgZHB5bnVtcCwgc2NybnVtcCwgcmVzdHApCisgICAgY2hhciAqZGlzcGxheW5hbWU7 CisgICAgaW50ICpmYW1pbHlwOyAgICAgICAgICAgICAgICAgICAgICAgLyogcmV0dXJuICovCisg ICAgY2hhciAqKmhvc3RwOyAgICAgICAgICAgICAgICAgICAgICAgLyogcmV0dXJuICovCisgICAg aW50ICpkcHludW1wLCAqc2NybnVtcDsgICAgICAgICAgICAgLyogcmV0dXJuICovCisgICAgY2hh ciAqKnJlc3RwOyAgICAgICAgICAgICAgICAgICAgICAgLyogcmV0dXJuICovCisjZW5kaWYgLyog Q0tfQU5TSUMgKi8KK3sKKyAgICBjaGFyICpwdHI7ICAgICAgICAgICAgICAgICAgICAgICAgICAv KiB3b3JrIHZhcmlhYmxlcyAqLworICAgIGludCBsZW47ICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIHdvcmsgdmFyaWFibGUgKi8KKyAgICBpbnQgZmFtaWx5ID0gLTE7ICAgICAgICAgICAg ICAgICAgICAvKiB2YWx1ZSB0byBiZSByZXR1cm5lZCAqLworICAgIGNoYXIgKmhvc3QgPSBOVUxM OyAgICAgICAgICAgICAgICAgIC8qIG11c3QgZnJlZSBpZiBzZXQgYW5kIGVycm9yIHJldHVybiAq LworICAgIGludCBkcHludW0gPSAtMTsgICAgICAgICAgICAgICAgICAgIC8qIHZhbHVlIHRvIGJl IHJldHVybmVkICovCisgICAgaW50IHNjcm51bSA9IDA7ICAgICAgICAgICAgICAgICAgICAgLyog dmFsdWUgdG8gYmUgcmV0dXJuZWQgKi8KKyAgICBjaGFyICpyZXN0ID0gTlVMTDsgICAgICAgICAg ICAgICAgICAvKiBtdXN0IGZyZWUgaWYgc2V0IGFuZCBlcnJvciByZXR1cm4gKi8KKyAgICBpbnQg ZG5ldCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAvKiBpZiAxIHRoZW4gdXNpbmcgREVDbmV0 ICovCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjaGVjayB0 aGUgbmFtZSAqLworICAgIGlmICghZGlzcGxheW5hbWUgfHwgIWRpc3BsYXluYW1lWzBdKQorICAg ICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBtdXN0IGhhdmUgYXQgbGVhc3QgOm51bWJlciAqLworICAgIHB0ciA9IChjaGFyICopc3RyY2hy KGRpc3BsYXluYW1lLCAnOicpOworICAgIGlmICghcHRyIHx8ICFwdHJbMV0pIHJldHVybiAwOwor ICAgIGlmIChwdHJbMV0gPT0gJzonKSB7CisgICAgICAgIGlmIChwdHJbMl0gPT0gJ1wwJykgcmV0 dXJuIDA7CisgICAgICAgIGRuZXQgPSAxOworICAgIH0KKworICAgIC8qCisgICAgICogZ2V0IHRo ZSBob3N0IHN0cmluZzsgaWYgbm9uZSBpcyBnaXZlbiwgdXNlIHRoZSBtb3N0IGVmZmllY2llbnQg cGF0aAorICAgICAqLworCisgICAgbGVuID0gKHB0ciAtIGRpc3BsYXluYW1lKTsgIC8qIGxlbmd0 aCBvZiBob3N0IG5hbWUgKi8KKyAgICBpZiAobGVuID09IDApIHsgICAgICAgICAgICAgICAgICAg ICAvKiBjaG9vc2UgbW9zdCBlZmZpY2llbnQgcGF0aCAqLworI2lmZGVmIFVOSVgKKyAgICAgICAg aG9zdCA9IGNvcHlzdHJpbmcgKFVOSVhfQ09OTkVDVElPTiwgVU5JWF9DT05ORUNUSU9OX0xFTkdU SCk7CisgICAgICAgIGZhbWlseSA9IEZhbWlseUxvY2FsOworI2Vsc2UKKyAgICAgICAgaWYgKGRu ZXQpIHsKKyAgICAgICAgICAgIGhvc3QgPSBjb3B5c3RyaW5nICgiMCIsIDEpOworICAgICAgICAg ICAgZmFtaWx5ID0gRmFtaWx5REVDbmV0OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg aG9zdCA9IGNvcHlob3N0bmFtZSAoKTsKKyAgICAgICAgICAgIGZhbWlseSA9IEZhbWlseUludGVy bmV0OworICAgICAgICB9CisjZW5kaWYKKyAgICB9IGVsc2UgeworICAgICAgICBob3N0ID0gY29w eXN0cmluZyAoZGlzcGxheW5hbWUsIGxlbik7CisgICAgICAgIGlmIChkbmV0KSB7CisgICAgICAg ICAgICBmYW1pbHkgPSBkbmV0OworICAgICAgICB9IGVsc2UgeworI2lmZGVmIFVOSVgKKyAgICAg ICAgICAgIGlmIChob3N0ICYmIHN0cmNtcCAoaG9zdCwgVU5JWF9DT05ORUNUSU9OKSA9PSAwKQor ICAgICAgICAgICAgICBmYW1pbHkgPSBGYW1pbHlMb2NhbDsKKyAgICAgICAgICAgIGVsc2UKKyNl bmRpZgorICAgICAgICAgICAgICBmYW1pbHkgPSBGYW1pbHlJbnRlcm5ldDsKKyAgICAgICAgfQor ICAgIH0KKworICAgIGlmICghaG9zdCkgcmV0dXJuIDA7CisKKworICAgIC8qCisgICAgICogZ2V0 IHRoZSBkaXNwbGF5IG51bWJlcjsgd2Uga25vdyB0aGF0IHRoZXJlIGlzIHNvbWV0aGluZyBhZnRl ciB0aGUKKyAgICAgKiBjb2xvbiAob3IgY29sb25zKSBmcm9tIGFib3ZlLiAgbm90ZSB0aGF0IGhv c3QgaXMgbm93IHNldCBhbmQgbXVzdAorICAgICAqIGJlIGZyZWVkIGlmIHRoZXJlIGlzIGFuIGVy cm9yLgorICAgICAqLworCisgICAgaWYgKGRuZXQpIHB0cisrOyAgICAgICAgICAgICAgICAgICAg Lyogc2tpcCB0aGUgZXh0cmEgREVDbmV0IGNvbG9uICovCisgICAgcHRyKys7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogbW92ZSB0byBzdGFydCBvZiBkaXNwbGF5IG51bSAqLworICAg IHsKKyAgICAgICAgcmVnaXN0ZXIgY2hhciAqY3A7CisKKyAgICAgICAgZm9yIChjcCA9IHB0cjsg KmNwICYmIGlzYXNjaWkoKmNwKSAmJiBpc2RpZ2l0KCpjcCk7IGNwKyspIDsKKyAgICAgICAgbGVu ID0gKGNwIC0gcHRyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBjaGVjayBwcmVzZW50IGFuZCB2YWxpZCBmb2xsb3cgKi8KKyAgICAgICAgaWYgKGxlbiA9PSAw IHx8ICgqY3AgJiYgKmNwICE9ICcuJykpIHsKKyAgICAgICAgICAgIGZyZWUgKGhvc3QpOworICAg ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKworICAgICAgICBkcHludW0gPSBhdG9pIChw dHIpOyAgICAgICAgICAgIC8qIGl0IHdpbGwgaGFuZGxlIG51bS4gYXMgd2VsbCAqLworICAgICAg ICBwdHIgPSBjcDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIG5vdyBnZXQgc2NyZWVuIG51bWJl ciBpZiBnaXZlbjsgcHRyIG1heSBwb2ludCB0byBudWwgYXQgdGhpcyBwb2ludAorICAgICAqLwor ICAgIGlmIChwdHJbMF0gPT0gJy4nKSB7CisgICAgICAgIHJlZ2lzdGVyIGNoYXIgKmNwOworCisg ICAgICAgIHB0cisrOworICAgICAgICBmb3IgKGNwID0gcHRyOyAqY3AgJiYgaXNhc2NpaSgqY3Ap ICYmIGlzZGlnaXQoKmNwKTsgY3ArKykgOworICAgICAgICBsZW4gPSAoY3AgLSBwdHIpOworICAg ICAgICBpZiAobGVuID09IDAgfHwgKCpjcCAmJiAqY3AgIT0gJy4nKSkgeyAgLyogYWxsIHByb3Ag bmFtZSAqLworICAgICAgICAgICAgZnJlZSAoaG9zdCk7CisgICAgICAgICAgICByZXR1cm4gMDsK KyAgICAgICAgfQorCisgICAgICAgIHNjcm51bSA9IGF0b2kgKHB0cik7ICAgICAgICAgICAgLyog aXQgd2lsbCBoYW5kbGUgbnVtLiBhcyB3ZWxsICovCisgICAgICAgIHB0ciA9IGNwOworICAgIH0K KworICAgIC8qCisgICAgICogYW5kIGZpbmFsbHksIGdldCBhbnkgYWRkaXRpb25hbCBzdHVmZiB0 aGF0IG1pZ2h0IGJlIGZvbGxvd2luZyB0aGUKKyAgICAgKiB0aGUgc2NyZWVuIG51bWJlcjsgcHRy IG11c3QgcG9pbnQgdG8gYSBwZXJpb2QgaWYgdGhlcmUgaXMgYW55dGhpbmcKKyAgICAgKi8KKwor ICAgIGlmIChwdHJbMF0gPT0gJy4nKSB7CisgICAgICAgIHB0cisrOworICAgICAgICBsZW4gPSBz dHJsZW4gKHB0cik7CisgICAgICAgIGlmIChsZW4gPiAwKSB7CisgICAgICAgICAgICByZXN0ID0g Y29weXN0cmluZyAocHRyLCBsZW4pOworICAgICAgICAgICAgaWYgKCFyZXN0KSB7CisgICAgICAg ICAgICAgICAgZnJlZSAoaG9zdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAg ICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKgorICAgICAqIGFuZCB3ZSBhcmUgZG9u ZSEKKyAgICAgKi8KKworICAgIGlmICggZmFtaWx5cCApCisgICAgICAgICpmYW1pbHlwID0gZmFt aWx5OworICAgIGlmICggaG9zdHAgKQorICAgICAgICAqaG9zdHAgPSBob3N0OworICAgIGVsc2UK KyAgICAgICAgZnJlZShob3N0KTsKKyAgICBpZiAoIGRweW51bXAgKQorICAgICAgICAqZHB5bnVt cCA9IGRweW51bTsKKyAgICBpZiAoIHNjcm51bXAgKQorICAgICAgICAqc2NybnVtcCA9IHNjcm51 bTsKKyAgICBpZiAoIHJlc3RwICkKKyAgICAgICAgKnJlc3RwID0gcmVzdDsKKyAgICBlbHNlCisg ICAgICAgIGZyZWUocmVzdCk7CisgICAgcmV0dXJuIDE7Cit9CisKKworaW50CisjaWZkZWYgQ0tf QU5TSUMKK2Z3ZHhfdG5fc2IoIHVuc2lnbmVkIGNoYXIgKiBzYiwgaW50IG4gKQorI2Vsc2UKK2Z3 ZHhfdG5fc2IoIHNiLCBuICkgdW5zaWduZWQgY2hhciAqIHNiOyBpbnQgbjsKKyNlbmRpZiAvKiBD S19BTlNJQyAqLworeworICAgIHVuc2lnbmVkIHNob3J0IGhjaGFubmVsLCBuY2hhbm5lbDsKKyAg ICB1bnNpZ25lZCBjaGFyICogcDsKKyAgICBpbnQgaTsKKyAgICBpbnQgcmMgPSAtMTsKKworICAg IC8qIGNoZWNrIHRvIGVuc3VyZSB3ZSBoYXZlIG5lZ290aWF0ZWQgRm9yd2FyZCBYICovCisgICAg aWYgKCBzc3RlbG5ldCAmJiAhVEVMT1BUX01FKFRFTE9QVF9GT1JXQVJEX1gpIHx8CisgICAgICAg ICAhc3N0ZWxuZXQgJiYgIVRFTE9QVF9VKFRFTE9QVF9GT1JXQVJEX1gpICkgeworICAgICAgICBk ZWJ1ZyhGMTAwLCJmd2R4X3RuX3NiKCkgbm90IG5lZ290aWF0ZWQiLCIiLDApOworICAgICAgICBy ZXR1cm4oMCk7CisgICAgfQorCisjaWZkZWYgQ0tfU1NMCisgICAgaWYgKFRFTE9QVF9TQihURUxP UFRfU1RBUlRfVExTKS5zdGFydF90bHMubWVfZm9sbG93cykgeworICAgICAgICByZXR1cm4oMCk7 CisgICAgfQorI2VuZGlmIC8qIENLX1NTTCAqLworCisgICAgc3dpdGNoIChzYlswXSkgeworICAg IGNhc2UgRldEWF9TQ1JFRU46CisgICAgICAgIGlmIChzc3RlbG5ldCAmJiBuID09IDQpCisgICAg ICAgICAgICByYyA9IGZ3ZHhfY3JlYXRlX2xpc3Rlbl9zb2NrZXQoc2JbMV0pOworICAgICAgICBi cmVhazsKKyAgICBjYXNlIEZXRFhfT1BFTjoKKyAgICAgICAgaWYgKCAhc3N0ZWxuZXQgJiYgbiA+ PSA1ICkgeworICAgICAgICAgICAgcCA9ICh1bnNpZ25lZCBjaGFyICopICZuY2hhbm5lbDsKKyAg ICAgICAgICAgIGkgPSAxOworICAgICAgICAgICAgLyogSUFDIHF1b3RpbmcgaGFzIGJlZW4gc3Ry aXBwZWQgaW4gdG5fc2IoKSAqLworICAgICAgICAgICAgcFswXSA9IHNiW2krK107CisgICAgICAg ICAgICBwWzFdID0gc2JbaSsrXTsKKyAgICAgICAgICAgIGhjaGFubmVsID0gbnRvaHMobmNoYW5u ZWwpOworICAgICAgICAgICAgcmMgPSBmd2R4X29wZW5fY2xpZW50X2NoYW5uZWwoaGNoYW5uZWwp OworICAgICAgICAgICAgaWYgKCByYyA8IDAgKSB7CisgICAgICAgICAgICAgICAgLyogRmFpbGVk OyBTZW5kIENMT1NFIGNoYW5uZWwgKi8KKyAgICAgICAgICAgICAgICBmd2R4X3NlbmRfY2xvc2Uo aGNoYW5uZWwpOworICAgICAgICAgICAgICAgIHJjID0gMDsgICAgICAgICAvKiBEbyBub3QgY29u c2lkZXIgdGhpcyB0byBiZSBhIHRlbG5ldCBlcnJvciAqLworICAgICAgICAgICAgfQorI2lmZGVm IE5UCisgICAgICAgICAgICBpZiAoICFURUxPUFRfU0IoVEVMT1BUX0ZPUldBUkRfWCkuZm9yd2Fy ZF94LnRocmVhZF9zdGFydGVkICkgeworICAgICAgICAgICAgICAgIGNrVGhyZWFkQmVnaW4oICZm d2R4X3RocmVhZCwzMjY1NSwgMCwgRkFMU0UsIDAgKSA7CisgICAgICAgICAgICAgICAgVEVMT1BU X1NCKFRFTE9QVF9GT1JXQVJEX1gpLmZvcndhcmRfeC50aHJlYWRfc3RhcnRlZCA9IDE7CisgICAg ICAgICAgICB9CisjZW5kaWYgLyogTlQgKi8KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAg ICBjYXNlIEZXRFhfQ0xPU0U6CisgICAgICAgIHAgPSAodW5zaWduZWQgY2hhciAqKSAmbmNoYW5u ZWw7CisgICAgICAgIGkgPSAxOworICAgICAgICAvKiBJQUMgcXVvdGluZyBoYXMgYmVlbiBzdHJp cHBlZCBpbiB0bl9zYigpICovCisgICAgICAgIHBbMF0gPSBzYltpKytdOworICAgICAgICBwWzFd ID0gc2JbaSsrXTsKKyAgICAgICAgaGNoYW5uZWwgPSBudG9ocyhuY2hhbm5lbCk7CisgICAgICAg IGZ3ZHhfY2xvc2VfY2hhbm5lbChoY2hhbm5lbCk7CisgICAgICAgIHJjID0gMDsgLyogbm8gZXJy b3JzIHdoZW4gY2xvc2luZyAqLworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZXRFhfREFUQToK KyAgICAgICAgcCA9ICh1bnNpZ25lZCBjaGFyICopICZuY2hhbm5lbDsKKyAgICAgICAgaSA9IDE7 CisgICAgICAgIC8qIElBQyBxdW90aW5nIGhhcyBiZWVuIHN0cmlwcGVkIGluIHRuX3NiKCkgKi8K KyAgICAgICAgcFswXSA9IHNiW2krK107CisgICAgICAgIHBbMV0gPSBzYltpKytdOworICAgICAg ICBoY2hhbm5lbCA9IG50b2hzKG5jaGFubmVsKTsKKyAgICAgICAgcmMgPSBmd2R4X3NlbmRfeGF1 dGhfdG9feHNlcnZlcihoY2hhbm5lbCwoQ0hBUiAqKSZzYlszXSxuLTUpOworICAgICAgICBpZiAo IHJjID49IDAgJiYgbi01LXJjID4gMCkgeworICAgICAgICAgICAgcmMgPSBmd2R4X3dyaXRlX2Rh dGFfdG9fY2hhbm5lbChoY2hhbm5lbCwoY2hhciAqKSZzYlszK3JjXSxuLTUtcmMpOworICAgICAg ICAgICAgaWYgKCByYyA8IDAgKSB7CisgICAgICAgICAgICAgICAgLyogRmFpbGVkOyBTZW5kIENM T1NFIGNoYW5uZWwgKi8KKyAgICAgICAgICAgICAgICByYyA9IGZ3ZHhfc2VuZF9jbG9zZShoY2hh bm5lbCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2Fz ZSBGV0RYX09QVElPTlM6CisgICAgICAgIGlmICggc3N0ZWxuZXQgKSB7CisjaWZuZGVmIEZXRFhf U0VSVkVSCisgICAgICAgICAgICByYyA9IDA7CisjZWxzZQorICAgICAgICAgICAgcmMgPSBmd2R4 X3NlcnZlcl9hY2NlcHRfb3B0aW9ucygoY2hhciopJnNiWzJdLG4tMyk7CisjZW5kaWYKKyAgICAg ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJjID0gZndkeF9jbGllbnRfcmVwbHlfb3B0aW9ucygo Y2hhciAqKSZzYlsyXSxuLTMpOworICAgICAgICAgICAgaWYgKCByYyA+PSAwICkgeworICAgICAg ICAgICAgICAgIHJjID0gdG5fc25kZndkeCgpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg ICAgICAgIGJyZWFrOworICAgIGNhc2UgRldEWF9PUFRfREFUQToKKyAgICAgICAgc3dpdGNoICgg c2JbMV0gKSB7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByYyA9IDA7ICAgICAgICAg ICAgIC8qIHdlIGRvbid0IHJlY29nbml6ZSwgbm90IGFuIGVycm9yICovCisgICAgICAgIH0KKyAg ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZXRFhfWE9GRjoKKyAgICBjYXNlIEZXRFhfWE9OOgor ICAgICAgICBpZiAoICFzc3RlbG5ldCApIHsKKyAgICAgICAgICAgIHAgPSAodW5zaWduZWQgY2hh ciAqKSAmbmNoYW5uZWw7CisgICAgICAgICAgICBpID0gMTsKKyAgICAgICAgICAgIC8qIElBQyBx dW90aW5nIGhhcyBiZWVuIHN0cmlwcGVkIGluIHRuX3NiKCkgKi8KKyAgICAgICAgICAgIHBbMF0g PSBzYltpKytdOworICAgICAgICAgICAgcFsxXSA9IHNiW2krK107CisgICAgICAgICAgICBoY2hh bm5lbCA9IG50b2hzKG5jaGFubmVsKTsKKyAgICAgICAgICAgIFRFTE9QVF9TQihURUxPUFRfRk9S V0FSRF9YKS5mb3J3YXJkX3guY2hhbm5lbFtoY2hhbm5lbF0uc3VzcGVuZCA9CisgICAgICAgICAg ICAgICAgKHNiWzBdID09IEZXRFhfWE9GRik7CisgICAgICAgICAgICByYyA9IDA7CisgICAgICAg IH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybihyYyA8IDAgPyAtMSA6IDApOwor fQorCitpbnQKKyNpZmRlZiBDS19BTlNJQworZndkeF9zZW5kX3hhdXRoX3RvX3hzZXJ2ZXIoaW50 IGNoYW5uZWwsIHVuc2lnbmVkIGNoYXIgKiBkYXRhLCBpbnQgbGVuKQorI2Vsc2UKK2Z3ZHhfc2Vu ZF94YXV0aF90b194c2VydmVyKGNoYW5uZWwsIGRhdGEsIGxlbikKKyAgICBpbnQgY2hhbm5lbDsg dW5zaWduZWQgY2hhciAqIGRhdGE7IGludCBsZW47CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sK KyAgICBpbnQgbmFtZV9sZW4sIGRhdGFfbGVuLCBpOworCisgICAgZm9yIChpID0gMDsgaSA8IE1B WEZXRFggOyBpKyspIHsKKyAgICAgICAgaWYgKFRFTE9QVF9TQihURUxPUFRfRk9SV0FSRF9YKS5m b3J3YXJkX3guY2hhbm5lbFtpXS5pZCA9PSBjaGFubmVsKQorICAgICAgICAgICAgYnJlYWs7Cisg ICAgfQorICAgIGlmICggaSA9PSBNQVhGV0RYICkKKyAgICAgICAgZ290byBhdXRoX2VycjsKKwor ICAgIGlmICghVEVMT1BUX1NCKFRFTE9QVF9GT1JXQVJEX1gpLmZvcndhcmRfeC5jaGFubmVsW2ld Lm5lZWRfdG9fc2VuZF94YXV0aCkKKyAgICAgICAgcmV0dXJuKDApOworCisgICAgaWYgKGxlbiA8 IDEyKQorICAgICAgICBnb3RvIGF1dGhfZXJyOworCisgICAgLyogUGFyc2UgdGhlIGxlbmd0aHMg b2YgdmFyaWFibGUtbGVuZ3RoIGZpZWxkcy4gKi8KKyAgICBpZiAoZGF0YVswXSA9PSAweDQyKSB7 ICAgICAgICAgICAgICAvKiBieXRlIG9yZGVyIE1TQiBmaXJzdC4gKi8KKyAgICAgICAgLyogWGF1 dGggcGFja2V0cyBhcHBlYXIgdG8gYWx3YXlzIGhhdmUgdGhpcyBmb3JtYXQgKi8KKyAgICAgICAg aWYgKCBkYXRhWzFdICE9IDB4MDAgfHwKKyAgICAgICAgICAgICBkYXRhWzJdICE9IDB4MDAgfHwK KyAgICAgICAgICAgICBkYXRhWzNdICE9IDB4MEIgfHwKKyAgICAgICAgICAgICBkYXRhWzRdICE9 IDB4MDAgfHwKKyAgICAgICAgICAgICBkYXRhWzVdICE9IDB4MDAgKQorICAgICAgICAgICAgZ290 byBhdXRoX2VycjsKKworICAgICAgICBuYW1lX2xlbiA9IChkYXRhWzZdIDw8IDgpICsgZGF0YVs3 XTsKKyAgICAgICAgZGF0YV9sZW4gPSAoZGF0YVs4XSA8PCA4KSArIGRhdGFbOV07CisgICAgfSBl bHNlIGlmIChkYXRhWzBdID09IDB4NmMpIHsgICAgICAgLyogQnl0ZSBvcmRlciBMU0IgZmlyc3Qu ICovCisgICAgICAgIC8qIFhhdXRoIHBhY2tldHMgYXBwZWFyIHRvIGFsd2F5cyBoYXZlIHRoaXMg Zm9ybWF0ICovCisgICAgICAgIGlmICggZGF0YVsxXSAhPSAweDAwIHx8CisgICAgICAgICAgICAg ZGF0YVsyXSAhPSAweDBCIHx8CisgICAgICAgICAgICAgZGF0YVszXSAhPSAweDAwIHx8CisgICAg ICAgICAgICAgZGF0YVs0XSAhPSAweDAwIHx8CisgICAgICAgICAgICAgZGF0YVs1XSAhPSAweDAw ICkKKyAgICAgICAgICAgIGdvdG8gYXV0aF9lcnI7CisKKyAgICAgICAgbmFtZV9sZW4gPSBkYXRh WzZdICsgKGRhdGFbN10gPDwgOCk7CisgICAgICAgIGRhdGFfbGVuID0gZGF0YVs4XSArIChkYXRh WzldIDw8IDgpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8qIGJhZCBieXRlIG9yZGVyIGJ5dGUg Ki8KKyAgICAgICAgZ290byBhdXRoX2VycjsKKyAgICB9CisKKyAgICAvKiBDaGVjayBpZiB0aGUg d2hvbGUgcGFja2V0IGlzIGluIGJ1ZmZlci4gKi8KKyAgICBpZiAobGVuIDwgMTIgKyAoKG5hbWVf bGVuICsgMykgJiB+MykgKyAoKGRhdGFfbGVuICsgMykgJiB+MykpCisgICAgICAgIGdvdG8gYXV0 aF9lcnI7CisgICAgLyogSWYgdGhlIFRlbG5ldCBTZXJ2ZXIgYWxsb3dzIGEgcmVhbCBYYXV0aCBt ZXNzYWdlIHRvIGJlIHNlbnQgKi8KKyAgICAvKiBUaGVuIGxldCB0aGUgbWVzc2FnZSBiZSBwcm9j ZXNzZWQgYnkgdGhlIFhzZXJ2ZXIuICAgICAgICAgICAqLworICAgIGlmIChuYW1lX2xlbiArIGRh dGFfbGVuID4gMCkgeworICAgICAgIFRFTE9QVF9TQihURUxPUFRfRk9SV0FSRF9YKS5mb3J3YXJk X3guY2hhbm5lbFtpXS5uZWVkX3RvX3NlbmRfeGF1dGggPSAwOworICAgICAgIHJldHVybigwKTsK KyAgICB9CisgICAgZWxzZQorICAgIC8qIElmIGFuIGVtcHR5IFhhdXRoIG1lc3NhZ2Ugd2FzIHJl Y2VpdmVkLiAgV2UgYXJlIGdvaW5nIHRvICAgKi8KKyAgICAvKiBzZW5kIG91ciBvd24gWGF1dGgg bWVzc2FnZSB1c2luZyB0aGUgcmVhbCBYYXV0aCBkYXRhLiAgQW5kICovCisgICAgLyogdGhlbiBz ZW5kIGFueSBvdGhlciBkYXRhIGluIHRoZSBidWZmZXIuICAgICAgICAgICAgICAgICAgICAqLwor ICAgIHsKKyAgICAgICAgaW50IGMsIGVyciwgZHB5bnVtLCBzY3JudW0sIGZhbWlseSwgc2JfbGVu OworICAgICAgICBjaGFyICpkaXNwbGF5LCAqaG9zdCA9IE5VTEwsICpyZXN0ID0gTlVMTDsKKyAg ICAgICAgdW5zaWduZWQgY2hhciAqc2IsICpwOworCisgICAgICAgIC8qIHBhcnNlIHRoZSBsb2Nh bCBESVNQTEFZIGVudiB2YXIgKi8KKyAgICAgICAgZGlzcGxheSA9IGdldGVudigiRElTUExBWSIp OworICAgICAgICBpZiAoICFkaXNwbGF5ICkKKyAgICAgICAgICAgIGRpc3BsYXkgPSAiMTI3LjAu MC4xOjAuMCI7CisKKyAgICAgICAgaWYgKGZ3ZHhfcGFyc2VfZGlzcGxheW5hbWUoZGlzcGxheSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZhbWlseSwgJmhvc3QsICZkcHlu dW0sICZzY3JudW0sICZyZXN0KSkgeworICAgICAgICAgICAgY2hhciAqIGRpc3Bfbm8gPSBja2l0 b2EoZHB5bnVtKTsgICAgLyogc2hvdWxkIGJlIHVuc2lnbmVkICovCisgICAgICAgICAgICBpZiAo ZmFtaWx5ID09IEZhbWlseUxvY2FsKSB7CisgICAgICAgICAgICAgICAgLyogY2FsbCB3aXRoIGFk ZHJlc3MgPSAiPGxvY2FsIGhvc3QgbmFtZT4iICovCisgICAgICAgICAgICAgICAgY2hhciBhZGRy ZXNzWzMwMF0gPSAibG9jYWxob3N0IjsKKyAgICAgICAgICAgICAgICBnZXRob3N0bmFtZShhZGRy ZXNzLCBzaXplb2YoYWRkcmVzcykgLSAxKTsKKyAgICAgICAgICAgICAgICByZWFsX3hhdXRoID0g WGF1R2V0QXV0aEJ5QWRkcihmYW1pbHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc3RybGVuKGFkZHJlc3MpLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc3RybGVuKGRpc3Bfbm8pLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3Bfbm8sIDAsIE5VTEwpOworICAgICAgICAg ICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoZmFtaWx5ID09IEZhbWlseUludGVybmV0KSB7Cisg ICAgICAgICAgICAgICAgLyogY2FsbCB3aXRoIGFkZHJlc3MgPSA0IGJ5dGVzIG51bWVyaWMgaXAg YWRkciAoTVNCKSAqLworICAgICAgICAgICAgICAgIHN0cnVjdCBob3N0ZW50ICpoaTsKKyAgICAg ICAgICAgICAgICBpZiAoaGkgPSBnZXRob3N0YnluYW1lKGhvc3QpKQorICAgICAgICAgICAgICAg ICAgICByZWFsX3hhdXRoID0gWGF1R2V0QXV0aEJ5QWRkcihmYW1pbHksIDQsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpLT5oX2FkZHIsIHN0cmxl bihkaXNwX25vKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZGlzcF9ubywgMCwgTlVMTCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg ICAgaWYgKGhvc3QpIGZyZWUoaG9zdCk7CisgICAgICAgIGlmIChyZXN0KSBmcmVlKHJlc3QpOwor ICAgICAgICBpZiAoIXJlYWxfeGF1dGgpIHsKKyAgICBURUxPUFRfU0IoVEVMT1BUX0ZPUldBUkRf WCkuZm9yd2FyZF94LmNoYW5uZWxbaV0ubmVlZF90b19zZW5kX3hhdXRoID0gMDsKKyAgICAgICAg ICAgIHJldHVybigwKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghc3RybmNtcChyZWFsX3hh dXRoLT5uYW1lLAorICAgICAgICAgICAgICAgICAgICAgIk1JVC1NQUdJQy1DT09LSUUtMSIsCisg ICAgICAgICAgICAgICAgICAgICByZWFsX3hhdXRoLT5uYW1lX2xlbmd0aCkpIHsKKyAgICAgICAg ICAgIGNoYXIgbXNnWzY0XTsKKworICAgICAgICAgICAgbmFtZV9sZW4gPSByZWFsX3hhdXRoLT5u YW1lX2xlbmd0aDsKKyAgICAgICAgICAgIGRhdGFfbGVuID0gMTY7CisKKyAgICAgICAgICAgIGlm ICggZGF0YVswXSA9PSAweDQyICkgeworICAgICAgICAgICAgICAgIG1zZ1swXSA9IDB4NDI7IC8q IE1TQiBvcmRlciAqLworICAgICAgICAgICAgICAgIG1zZ1sxXSA9IG1zZ1syXSA9IDA7CisgICAg ICAgICAgICAgICAgbXNnWzNdID0gMHgwQjsKKyAgICAgICAgICAgICAgICBtc2dbNF0gPSBtc2db NV0gPSAwOworICAgICAgICAgICAgICAgIG1zZ1s2XSA9IChuYW1lX2xlbiA+PiA4KTsKKyAgICAg ICAgICAgICAgICBtc2dbN10gPSAobmFtZV9sZW4gJiAweEZGKTsKKyAgICAgICAgICAgICAgICBt c2dbOF0gPSAoZGF0YV9sZW4gPj4gOCk7CisgICAgICAgICAgICAgICAgbXNnWzldID0gKGRhdGFf bGVuICYgMHhGRik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1zZ1sw XSA9IDB4NmM7IC8qIExTQiBvcmRlciAqLworICAgICAgICAgICAgICAgIG1zZ1sxXSA9IDA7Cisg ICAgICAgICAgICAgICAgbXNnWzJdID0gMHgwQjsKKyAgICAgICAgICAgICAgICBtc2dbM10gPSBt c2dbNF0gPSBtc2dbNV0gPSAwOworICAgICAgICAgICAgICAgIG1zZ1s2XSA9IChuYW1lX2xlbiAm IDB4RkYpOworICAgICAgICAgICAgICAgIG1zZ1s3XSA9IChuYW1lX2xlbiA+PiA4KTsKKyAgICAg ICAgICAgICAgICBtc2dbOF0gPSAoZGF0YV9sZW4gJiAweEZGKTsKKyAgICAgICAgICAgICAgICBt c2dbOV0gPSAoZGF0YV9sZW4gPj4gOCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtc2db MTBdID0gbXNnWzExXSA9IDA7CisgICAgICAgICAgICBtZW1jcHkoJm1zZ1sxMl0scmVhbF94YXV0 aC0+bmFtZSwxOCk7CisgICAgICAgICAgICBtc2dbMzBdID0gbXNnWzMxXSA9IDA7CisgICAgICAg ICAgICBtZW1jcHkoJm1zZ1szMl0scmVhbF94YXV0aC0+ZGF0YSwxNik7CisKKyAgICAgICAgICAg IGlmIChmd2R4X3dyaXRlX2RhdGFfdG9fY2hhbm5lbChjaGFubmVsLChjaGFyICopbXNnLDQ4KSA8 IDApIHsKKyAgVEVMT1BUX1NCKFRFTE9QVF9GT1JXQVJEX1gpLmZvcndhcmRfeC5jaGFubmVsW2ld Lm5lZWRfdG9fc2VuZF94YXV0aCA9IDA7CisgICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAg ICAgICAgICAgIH0gZWxzZSB7CisgIFRFTE9QVF9TQihURUxPUFRfRk9SV0FSRF9YKS5mb3J3YXJk X3guY2hhbm5lbFtpXS5uZWVkX3RvX3NlbmRfeGF1dGggPSAwOworICAgICAgICAgICAgICAgIHJl dHVybigxMik7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgIFRFTE9QVF9TQihU RUxPUFRfRk9SV0FSRF9YKS5mb3J3YXJkX3guY2hhbm5lbFtpXS5uZWVkX3RvX3NlbmRfeGF1dGgg PSAwOworICAgICAgICAgICAgcmV0dXJuKDApOyAgICAgICAgLyogd2UgZG8gbm90IGtub3cgaG93 IHRvIGhhbmRsZSB0aGlzIHR5cGUgeWV0ICovCisgICAgICAgIH0KKyAgICB9CisKKyAgYXV0aF9l cnI6CisgICAgICAgIGRlYnVnKEYxMDAsImZ3ZHhfc2VuZF94YXV0aF90b194c2VydmVyIGVycm9y IiwiIiwwKTsKKyAgICByZXR1cm4oLTEpOworfQorCisKKyNpZmRlZiBDT01NRU5UCitpbnQKKyNp ZmRlZiBDS19BTlNJQworZndkeF9hdXRob3JpemVfY2hhbm5lbChpbnQgY2hhbm5lbCwgdW5zaWdu ZWQgY2hhciAqIGRhdGEsIGludCBsZW4pCisjZWxzZQorZndkeF9hdXRob3JpemVfY2hhbm5lbChj aGFubmVsLCBkYXRhLCBsZW4pCisgICAgaW50IGNoYW5uZWw7IHVuc2lnbmVkIGNoYXIgKiBkYXRh OyBpbnQgbGVuOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgLyogWFhYIG1heWJlIHdl IHNob3VsZCBoYXZlIHNvbWUgcmV0cnkgaGFuZGxpbmcgaWYgbm90IHRoZSB3aG9sZSBmaXJzdAor ICAgICogYXV0aG9yaXphdGlvbiBwYWNrZXQgYXJyaXZlcyBjb21wbGV0ZQorICAgICovCisgICAg aWYgKCAhVEVMT1BUX1NCKFRFTE9QVF9GT1JXQVJEX1gpLmZvcndhcmRfeC5jaGFubmVsW2NoYW5u ZWxdLmF1dGhvcml6ZWQgKSB7CisgICAgICAgIGludCBuYW1lX2xlbiwgZGF0YV9sZW47CisKKyAg ICAgICAgaWYgKGxlbiA8IDEyKQorICAgICAgICAgICAgZ290byBhdXRoX2VycjsKKworICAgICAg ICAvKiBQYXJzZSB0aGUgbGVuZ3RocyBvZiB2YXJpYWJsZS1sZW5ndGggZmllbGRzLiAqLworICAg ICAgICBpZiAoZGF0YVswXSA9PSAweDQyKSB7ICAgICAgICAgIC8qIGJ5dGUgb3JkZXIgTVNCIGZp cnN0LiAqLworICAgICAgICAgICAgLyogWGF1dGggcGFja2V0cyBhcHBlYXIgdG8gYWx3YXlzIGhh dmUgdGhpcyBmb3JtYXQgKi8KKyAgICAgICAgICAgIGlmICggZGF0YVsxXSAhPSAweDAwIHx8Cisg ICAgICAgICAgICAgICAgIGRhdGFbMl0gIT0gMHgwMCB8fAorICAgICAgICAgICAgICAgICBkYXRh WzNdICE9IDB4MEIgfHwKKyAgICAgICAgICAgICAgICAgZGF0YVs0XSAhPSAweDAwIHx8CisgICAg ICAgICAgICAgICAgIGRhdGFbNV0gIT0gMHgwMCApCisgICAgICAgICAgICAgICAgZ290byBhdXRo X2VycjsKKworICAgICAgICAgICAgbmFtZV9sZW4gPSAoZGF0YVs2XSA8PCA4KSArIGRhdGFbN107 CisgICAgICAgICAgICBkYXRhX2xlbiA9IChkYXRhWzhdIDw8IDgpICsgZGF0YVs5XTsKKyAgICAg ICAgfSBlbHNlIGlmIChkYXRhWzBdID09IDB4NmMpIHsgICAvKiBCeXRlIG9yZGVyIExTQiBmaXJz dC4gKi8KKyAgICAgICAgICAgIC8qIFhhdXRoIHBhY2tldHMgYXBwZWFyIHRvIGFsd2F5cyBoYXZl IHRoaXMgZm9ybWF0ICovCisgICAgICAgICAgICBpZiAoIGRhdGFbMV0gIT0gMHgwMCB8fAorICAg ICAgICAgICAgICAgICBkYXRhWzJdICE9IDB4MEIgfHwKKyAgICAgICAgICAgICAgICAgZGF0YVsz XSAhPSAweDAwIHx8CisgICAgICAgICAgICAgICAgIGRhdGFbNF0gIT0gMHgwMCB8fAorICAgICAg ICAgICAgICAgICBkYXRhWzVdICE9IDB4MDAgKQorICAgICAgICAgICAgICAgIGdvdG8gYXV0aF9l cnI7CisKKyAgICAgICAgICAgIG5hbWVfbGVuID0gZGF0YVs2XSArIChkYXRhWzddIDw8IDgpOwor ICAgICAgICAgICAgZGF0YV9sZW4gPSBkYXRhWzhdICsgKGRhdGFbOV0gPDwgOCk7CisgICAgICAg IH0gZWxzZSB7CisgICAgICAgICAgICAvKiBiYWQgYnl0ZSBvcmRlciBieXRlICovCisgICAgICAg ICAgICBnb3RvIGF1dGhfZXJyOworICAgICAgICB9CisgICAgICAgIC8qIENoZWNrIGlmIGF1dGhl bnRpY2F0aW9uIHByb3RvY29sIG1hdGNoZXMuICovCisgICAgICAgIGlmIChuYW1lX2xlbiAhPSBm YWtlX3hhdXRoLm5hbWVfbGVuZ3RoIHx8CisgICAgICAgICAgICAgbWVtY21wKGRhdGEgKyAxMiwg ZmFrZV94YXV0aC5uYW1lLCBuYW1lX2xlbikgIT0gMCkgeworICAgICAgICAgICAgLyogY29ubmVj dGlvbiB1c2VzIGRpZmZlcmVudCBhdXRoZW50aWNhdGlvbiBwcm90b2NvbCAqLworICAgICAgICAg ICAgZ290byBhdXRoX2VycjsKKyAgICAgICAgfQorICAgICAgICAvKiBDaGVjayBpZiBhdXRoZW50 aWNhdGlvbiBkYXRhIG1hdGNoZXMgb3VyIGZha2UgZGF0YS4gKi8KKyAgICAgICAgaWYgKGRhdGFf bGVuICE9IGZha2VfeGF1dGguZGF0YV9sZW5ndGggfHwKKyAgICAgICAgICAgICBtZW1jbXAoZGF0 YSArIDEyICsgKChuYW1lX2xlbiArIDMpICYgfjMpLAorICAgICAgICAgICAgICAgICAgICAgZmFr ZV94YXV0aC5kYXRhLCBmYWtlX3hhdXRoLmRhdGFfbGVuZ3RoKSAhPSAwKSB7CisgICAgICAgICAg ICAvKiBhdXRoIGRhdGEgZG9lcyBub3QgbWF0Y2ggZmFrZSBkYXRhICovCisgICAgICAgICAgICBn b3RvIGF1dGhfZXJyOworICAgICAgICB9CisgICAgICAgIC8qIHN1YnN0aXR1dGUgdGhlIGZha2Ug ZGF0YSB3aXRoIHJlYWwgZGF0YSBpZiB3ZSBoYXZlIGFueSAqLworICAgICAgICBpZiAocmVhbF94 YXV0aCAmJiByZWFsX3hhdXRoLT5kYXRhKQorICAgICAgICAgICAgbWVtY3B5KGRhdGEgKyAxMiAr ICgobmFtZV9sZW4gKyAzKSAmIH4zKSwKKyAgICAgICAgICAgICAgICAgICByZWFsX3hhdXRoLT5k YXRhLCBkYXRhX2xlbik7CisKKyAgICAgICAgVEVMT1BUX1NCKFRFTE9QVF9GT1JXQVJEX1gpLmZv cndhcmRfeC5jaGFubmVsW2NoYW5uZWxdLmF1dGhvcml6ZWQgPSAxOworICAgIH0KKyAgICByZXR1 cm4oMCk7CisgIGF1dGhfZXJyOgorICAgIHJldHVybigtMSk7Cit9CisjZW5kaWYgLyogQ09NTUVO VCAqLworCitpbnQKKyNpZmRlZiBDS19BTlNJQworZndkeF9zZW5kX2Nsb3NlKGludCBjaGFubmVs KQorI2Vsc2UKK2Z3ZHhfc2VuZF9jbG9zZShjaGFubmVsKSBpbnQgY2hhbm5lbDsKKyNlbmRpZiAv KiBDS19BTlNJQyAqLworeworICAgIHVuc2lnbmVkIHNob3J0IG5jaGFubmVsOworICAgIGludCBp LHJjOworICAgIENIQVIgKiBwOworCisjaWZkZWYgQ0tfU1NMCisgICAgaWYgKFRFTE9QVF9TQihU RUxPUFRfU1RBUlRfVExTKS5zdGFydF90bHMubWVfZm9sbG93cykgeworICAgICAgICByZXR1cm4o MCk7CisgICAgfQorI2VuZGlmIC8qIENLX1NTTCAqLworCisgICAgbmNoYW5uZWwgPSBodG9ucyhj aGFubmVsKTsKKyAgICBwID0gKHVuc2lnbmVkIGNoYXIgKikgJm5jaGFubmVsOworCisgICAgaSA9 IDA7CisgICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgSUFDOyAgICAgICAgICAgICAgIC8qIEkgQW0g YSBDb21tYW5kICovCisgICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgU0I7ICAgICAgICAgICAgICAg IC8qIFN1Ym5lZ290aWF0aW9uICovCisgICAgc2Jfb3V0W2krK10gPSBURUxPUFRfRk9SV0FSRF9Y OyAgICAgICAgIC8qIEZvcndhcmQgWCAqLworICAgIHNiX291dFtpKytdID0gRldEWF9DTE9TRTsg ICAgICAgICAgICAgICAvKiBPcGVuICovCisgICAgc2Jfb3V0W2krK10gPSBwWzBdOyAgICAgICAg ICAgICAgICAgICAgIC8qIEZpcnN0IEJ5dGUgb2YgQ2hhbm5lbCAqLworICAgIGlmICggcFswXSA9 PSBJQUMgKQorICAgICAgICBzYl9vdXRbaSsrXSA9IElBQzsKKyAgICBzYl9vdXRbaSsrXSA9IHBb MV07ICAgICAgICAgICAgICAgICAgICAgLyogU2Vjb25kIEJ5dGUgb2YgQ2hhbm5lbCAqLworICAg IGlmICggcFsxXSA9PSBJQUMgKQorICAgICAgICBzYl9vdXRbaSsrXSA9IElBQzsKKyAgICBzYl9v dXRbaSsrXSA9IChDSEFSKSBJQUM7ICAgICAgICAgICAgICAgLyogRW5kIG9mIFN1Ym5lZ290aWF0 aW9uICovCisgICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgU0U7ICAgICAgICAgICAgICAgIC8qIG1h cmtlZCBieSBJQUMgU0UgKi8KKyNpZmRlZiBERUJVRworICAgIGlmIChkZWJsb2cgfHwgdG5fZGVi IHx8IGRlYnNlcykgeworICAgICAgICBja21ha3htc2coKGNoYXIgKilmd2R4X21zZ19vdXQsVE5f TVNHX0xFTiwiVEVMTkVUIFNFTlQgU0IgIiwKKyAgICAgICAgICAgICAgICAgIFRFTE9QVChURUxP UFRfRk9SV0FSRF9YKSwKKyAgICAgICAgICAgICAgICAgICIgQ0xPU0UgQ0hBTk5FTD0iLGNraXRv YShjaGFubmVsKSwiIElBQyBTRSIsCisgICAgICAgICAgICAgICAgICBOVUxMLE5VTEwsTlVMTCxO VUxMLE5VTEwsTlVMTCxOVUxMCisgICAgICAgICAgICAgICAgICApOworICAgIH0KKyNlbmRpZiAv KiBERUJVRyAqLworI2lmZGVmIE9TMgorICAgIFJlcXVlc3RUZWxuZXRNdXRleCggU0VNX0lOREVG SU5JVEVfV0FJVCApOworI2VuZGlmCisjaWZkZWYgREVCVUcKKyAgICBkZWJ1ZyhGMTAwLChjaGFy ICopZndkeF9tc2dfb3V0LCIiLDApOworICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKSB0bl9kZWJ1 ZygoY2hhciAqKWZ3ZHhfbXNnX291dCk7CisjZW5kaWYgLyogREVCVUcgKi8KKyAgICByYyA9ICh0 dG9sKChDSEFSICopc2Jfb3V0LGkpIDwgMCk7ICAgICAgLyogU2VuZCBpdC4gKi8KKyNpZmRlZiBP UzIKKyAgICBSZWxlYXNlVGVsbmV0TXV0ZXgoKTsKKyNlbmRpZgorICAgIGlmIChyYykKKyAgICAg IHJldHVybigtMSk7CisgICAgcmV0dXJuKDApOworfQorCitpbnQKKyNpZmRlZiBDS19BTlNJQwor ZndkeF9zZW5kX29wZW4oaW50IGNoYW5uZWwpCisjZWxzZSAvKiBDS19BTlNJQyAqLworZndkeF9z ZW5kX29wZW4oY2hhbm5lbCkgaW50IGNoYW5uZWw7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sK KyAgICB1bnNpZ25lZCBzaG9ydCBuY2hhbm5lbDsKKyAgICBpbnQgaSwgcmM7CisgICAgQ0hBUiAq IHA7CisKKyNpZmRlZiBDS19TU0wKKyAgICBpZiAoVEVMT1BUX1NCKFRFTE9QVF9TVEFSVF9UTFMp LnN0YXJ0X3Rscy5tZV9mb2xsb3dzKSB7CisgICAgICAgIHJldHVybigwKTsKKyAgICB9CisjZW5k aWYgLyogQ0tfU1NMICovCisKKyAgICBuY2hhbm5lbCA9IGh0b25zKGNoYW5uZWwpOworICAgIHAg PSAodW5zaWduZWQgY2hhciAqKSAmbmNoYW5uZWw7CisKKyAgICBpID0gMDsKKyAgICBzYl9vdXRb aSsrXSA9IChDSEFSKSBJQUM7ICAgICAgICAgICAgICAgICAvKiBJIEFtIGEgQ29tbWFuZCAqLwor ICAgIHNiX291dFtpKytdID0gKENIQVIpIFNCOyAgICAgICAgICAgICAgICAgIC8qIFN1Ym5lZ290 aWF0aW9uICovCisgICAgc2Jfb3V0W2krK10gPSBURUxPUFRfRk9SV0FSRF9YOyAgICAgICAgICAg LyogRm9yd2FyZCBYICovCisgICAgc2Jfb3V0W2krK10gPSBGV0RYX09QRU47ICAgICAgICAgICAg ICAgICAgLyogT3BlbiAqLworICAgIHNiX291dFtpKytdID0gcFswXTsgICAgICAgICAgICAgICAg ICAgICAgIC8qIEZpcnN0IEJ5dGUgb2YgQ2hhbm5lbCAqLworICAgIGlmICggcFswXSA9PSBJQUMg KQorICAgICAgICBzYl9vdXRbaSsrXSA9IElBQzsKKyAgICBzYl9vdXRbaSsrXSA9IHBbMV07ICAg ICAgICAgICAgICAgICAgICAgICAvKiBTZWNvbmQgQnl0ZSBvZiBDaGFubmVsICovCisgICAgaWYg KCBwWzFdID09IElBQyApCisgICAgICAgIHNiX291dFtpKytdID0gSUFDOworICAgIHNiX291dFtp KytdID0gKENIQVIpIElBQzsgICAgICAgICAgICAgICAgIC8qIEVuZCBvZiBTdWJuZWdvdGlhdGlv biAqLworICAgIHNiX291dFtpKytdID0gKENIQVIpIFNFOyAgICAgICAgICAgICAgICAgIC8qIG1h cmtlZCBieSBJQUMgU0UgKi8KKyNpZmRlZiBERUJVRworICAgIGlmIChkZWJsb2cgfHwgdG5fZGVi IHx8IGRlYnNlcykgeworICAgICAgICBja21ha3htc2coKGNoYXIgKilmd2R4X21zZ19vdXQsVE5f TVNHX0xFTiwiVEVMTkVUIFNFTlQgU0IgIiwKKyAgICAgICAgICAgICAgICAgIFRFTE9QVChURUxP UFRfRk9SV0FSRF9YKSwKKyAgICAgICAgICAgICAgICAgICIgT1BFTiBDSEFOTkVMPSIsY2tpdG9h KGNoYW5uZWwpLCIgSUFDIFNFIiwKKyAgICAgICAgICAgICAgICAgIE5VTEwsTlVMTCxOVUxMLE5V TEwsTlVMTCxOVUxMLE5VTEwpOworICAgIH0KKyNlbmRpZiAvKiBERUJVRyAqLworI2lmZGVmIE9T MgorICAgIFJlcXVlc3RUZWxuZXRNdXRleCggU0VNX0lOREVGSU5JVEVfV0FJVCApOworI2VuZGlm CisjaWZkZWYgREVCVUcKKyAgICBkZWJ1ZyhGMTAwLChjaGFyICopZndkeF9tc2dfb3V0LCIiLDAp OworICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKSB0bl9kZWJ1ZygoY2hhciAqKWZ3ZHhfbXNnX291 dCk7CisjZW5kaWYgLyogREVCVUcgKi8KKyAgICByYyA9ICh0dG9sKChDSEFSICopc2Jfb3V0LGkp IDwgMCk7ICAgICAgICAvKiBTZW5kIGl0LiAqLworI2lmZGVmIE9TMgorICAgIFJlbGVhc2VUZWxu ZXRNdXRleCgpOworI2VuZGlmCisgICAgaWYgKHJjKQorICAgICAgcmV0dXJuKC0xKTsKKyAgICBy ZXR1cm4oMCk7Cit9CisKK2ludAorI2lmZGVmIENLX0FOU0lDCitmd2R4X2NsaWVudF9yZXBseV9v cHRpb25zKGNoYXIgKm9wdHMsIGludCBuKQorI2Vsc2UKK2Z3ZHhfY2xpZW50X3JlcGx5X29wdGlv bnMob3B0cywgbikgY2hhciAqb3B0czsgaW50IG47CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sK KyAgICBpbnQgaSxqLHJjOworCisjaWZkZWYgQ0tfU1NMCisgICAgaWYgKFRFTE9QVF9TQihURUxP UFRfU1RBUlRfVExTKS5zdGFydF90bHMubWVfZm9sbG93cykgeworICAgICAgICByZXR1cm4oMCk7 CisgICAgfQorI2VuZGlmIC8qIENLX1NTTCAqLworCisgICAgaSA9IDA7CisgICAgc2Jfb3V0W2kr K10gPSAoQ0hBUikgSUFDOyAgICAgICAgICAgICAgICAgLyogSSBBbSBhIENvbW1hbmQgKi8KKyAg ICBzYl9vdXRbaSsrXSA9IChDSEFSKSBTQjsgICAgICAgICAgICAgICAgICAvKiBTdWJuZWdvdGlh dGlvbiAqLworICAgIHNiX291dFtpKytdID0gVEVMT1BUX0ZPUldBUkRfWDsgICAgICAgICAgIC8q IEZvcndhcmQgWCAqLworICAgIHNiX291dFtpKytdID0gRldEWF9PUFRJT05TOyAgICAgICAgICAg ICAgIC8qIE9wdGlvbnMgKi8KKworICAgIC8qIExvb2sgZm9yIHRoZSBvcHRpb25zIHdlIHJlY29n bml6ZSBhbmQgd2lsbCBzdXBwb3J0IGZvciB0aGlzIHNlc3Npb24gKi8KKyAgICAvKiBhbmQgcmVw bHkgd2l0aCB0aGVpciBieXRlcyBzZXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICovCisgICAgZm9yIChqPTA7IGo8bjsgaisrLGkrKykgeworICAgICAgICBzYl9vdXRbaV0g PSBGV0RYX09QVF9OT05FOyAgICAgICAgICAvKiBBZGQgemVybyBieXRlIC0gbm8gb3B0aW9ucyAq LworI2lmZGVmIENPTU1FTlQKKyAgICAgICAgLyogSWYgd2UgaGFkIGFueSBvcHRpb25zIHRvIHN1 cHBvcnQsIHRoaXMgaXMgaG93IHdlIHdvdWxkIGRvIGl0ICovCisgICAgICAgIGlmICggaiA9PSAw ICkgeworICAgICAgICAgICAgaWYgKG9wdHNbal0gJiBGV0RYX09QVF9YWFhYKSB7CisgICAgICAg ICAgICAgICAgLyogc2V0IGZsYWcgdG8gcmVtZW1iZXIgb3B0aW9uIGlzIGluIHVzZSAqLworICAg ICAgICAgICAgICAgIGZsYWcgPSAxOworICAgICAgICAgICAgICAgIHNiX291dFtpXSB8PSBGV0RY X09QVF9YWFhYOworICAgICAgICAgICAgfQorICAgICAgICB9CisjZW5kaWYgLyogQ09NTUVOVCAq LworICAgIH0KKyAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBJQUM7ICAgICAgICAgICAgICAgICAv KiBFbmQgb2YgU3VibmVnb3RpYXRpb24gKi8KKyAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBTRTsg ICAgICAgICAgICAgICAgICAvKiBtYXJrZWQgYnkgSUFDIFNFICovCisjaWZkZWYgREVCVUcKKyAg ICBpZiAoZGVibG9nIHx8IHRuX2RlYiB8fCBkZWJzZXMpIHsKKyAgICAgICAgY2ttYWt4bXNnKChj aGFyICopZndkeF9tc2dfb3V0LFROX01TR19MRU4sIlRFTE5FVCBTRU5UIFNCICIsCisgICAgICAg ICAgICAgICAgICBURUxPUFQoVEVMT1BUX0ZPUldBUkRfWCksCisgICAgICAgICAgICAgICAgICAi IE9QVElPTlMgIixja2N0b3goc2Jfb3V0WzRdLDEpLCIgSUFDIFNFIiwKKyAgICAgICAgICAgICAg ICAgIE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwpOworICAgIH0KKyNlbmRpZiAv KiBERUJVRyAqLworI2lmZGVmIE9TMgorICAgIFJlcXVlc3RUZWxuZXRNdXRleCggU0VNX0lOREVG SU5JVEVfV0FJVCApOworI2VuZGlmCisjaWZkZWYgREVCVUcKKyAgICBkZWJ1ZyhGMTAwLChjaGFy ICopZndkeF9tc2dfb3V0LCIiLDApOworICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKSB0bl9kZWJ1 ZygoY2hhciAqKWZ3ZHhfbXNnX291dCk7CisjZW5kaWYgLyogREVCVUcgKi8KKyAgICByYyA9ICh0 dG9sKChDSEFSICopc2Jfb3V0LGkpIDwgMCk7ICAgICAgICAvKiBTZW5kIGl0LiAqLworI2lmZGVm IE9TMgorICAgIFJlbGVhc2VUZWxuZXRNdXRleCgpOworI2VuZGlmCisgICAgaWYgKHJjKQorICAg ICAgcmV0dXJuKC0xKTsKKyAgICByZXR1cm4oMCk7Cit9CisKKworaW50Citmd2R4X3NlbmRfb3B0 aW9ucygpIHsKKyAgICBpbnQgaSwgcmM7CisKKyNpZmRlZiBDS19TU0wKKyAgICBpZiAoVEVMT1BU X1NCKFRFTE9QVF9TVEFSVF9UTFMpLnN0YXJ0X3Rscy5tZV9mb2xsb3dzKSB7CisgICAgICAgIHJl dHVybigwKTsKKyAgICB9CisjZW5kaWYgLyogQ0tfU1NMICovCisKKyAgICBpID0gMDsKKyAgICBz Yl9vdXRbaSsrXSA9IChDSEFSKSBJQUM7ICAgICAgICAgICAgICAgLyogSSBBbSBhIENvbW1hbmQg Ki8KKyAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBTQjsgICAgICAgICAgICAgICAgLyogU3VibmVn b3RpYXRpb24gKi8KKyAgICBzYl9vdXRbaSsrXSA9IFRFTE9QVF9GT1JXQVJEX1g7ICAgICAgICAg LyogRm9yd2FyZCBYICovCisgICAgc2Jfb3V0W2krK10gPSBGV0RYX09QVElPTlM7ICAgICAgICAg ICAgIC8qIE9wdGlvbnMgKi8KKyAgICBzYl9vdXRbaV0gICA9IEZXRFhfT1BUX05PTkU7CisgICAg LyogYWN0aXZhdGUgb3B0aW9ucyBoZXJlICovCisgICAgaSsrOworICAgIHNiX291dFtpKytdID0g KENIQVIpIElBQzsgICAgICAgICAgICAgICAgIC8qIEVuZCBvZiBTdWJuZWdvdGlhdGlvbiAqLwor ICAgIHNiX291dFtpKytdID0gKENIQVIpIFNFOyAgICAgICAgICAgICAgICAgIC8qIG1hcmtlZCBi eSBJQUMgU0UgKi8KKworI2lmZGVmIERFQlVHCisgICAgaWYgKGRlYmxvZyB8fCB0bl9kZWIgfHwg ZGVic2VzKSB7CisgICAgICAgIGNrbWFrbXNnKChjaGFyICopZndkeF9tc2dfb3V0LFROX01TR19M RU4sIlRFTE5FVCBTRU5UIFNCICIsCisgICAgICAgICAgICAgICAgIFRFTE9QVChURUxPUFRfRk9S V0FSRF9YKSwKKyAgICAgICAgICAgICAgICAgIiBPUFRJT05TIDAwIElBQyBTRSIsTlVMTCk7Cisg ICAgfQorI2VuZGlmIC8qIERFQlVHICovCisjaWZkZWYgT1MyCisgICAgUmVxdWVzdFRlbG5ldE11 dGV4KCBTRU1fSU5ERUZJTklURV9XQUlUICk7CisjZW5kaWYKKyNpZmRlZiBERUJVRworICAgIGRl YnVnKEYxMDAsKGNoYXIgKilmd2R4X21zZ19vdXQsIiIsMCk7CisgICAgaWYgKHRuX2RlYiB8fCBk ZWJzZXMpIHRuX2RlYnVnKChjaGFyICopZndkeF9tc2dfb3V0KTsKKyNlbmRpZiAvKiBERUJVRyAq LworICAgIHJjID0gKHR0b2woKENIQVIgKilzYl9vdXQsaSkgPCAwKTsgICAgICAgIC8qIFNlbmQg aXQuICovCisjaWZkZWYgT1MyCisgICAgUmVsZWFzZVRlbG5ldE11dGV4KCk7CisjZW5kaWYKKyAg ICBpZiAocmMpCisgICAgICByZXR1cm4oLTEpOworICAgIHJldHVybigwKTsKK30KKworaW50Cisj aWZkZWYgQ0tfQU5TSUMKK2Z3ZHhfc2VuZF9kYXRhX2Zyb21fY2hhbm5lbChpbnQgY2hhbm5lbCwg Y2hhciAqIGRhdGEsIGludCBsZW4pCisjZWxzZQorZndkeF9zZW5kX2RhdGFfZnJvbV9jaGFubmVs KGNoYW5uZWwsIGRhdGEsIGxlbikKKyAgICBpbnQgY2hhbm5lbDsgY2hhciAqIGRhdGE7IGludCBs ZW47CisjZW5kaWYKK3sKKyAgICB1bnNpZ25lZCBzaG9ydCBuY2hhbm5lbDsKKyAgICAvKiBzdGF0 aWMgKi8gQ0hBUiBzYl9wcml2WzIwNDhdOworICAgIENIQVIgKiBwOworICAgIGludCBpLCBqLCBq X3NhdiwgcmM7CisgICAgdW5zaWduZWQgaW50IHRtcDsKKworICAgIGRlYnVnKEYxMTEsImZ3ZHhf c2VuZF9kYXRhX2Zyb21fY2hhbm5lbCgpIiwiY2hhbm5lbCIsY2hhbm5lbCk7CisKKyNpZmRlZiBD S19TU0wKKyAgICBpZiAoVEVMT1BUX1NCKFRFTE9QVF9TVEFSVF9UTFMpLnN0YXJ0X3Rscy5tZV9m b2xsb3dzKSB7CisgICAgICAgIHJldHVybigwKTsKKyAgICB9CisjZW5kaWYgLyogQ0tfU1NMICov CisKKyAgICBuY2hhbm5lbCA9IGh0b25zKGNoYW5uZWwpOworICAgIHAgPSAodW5zaWduZWQgY2hh ciAqKSAmbmNoYW5uZWw7CisKKyAgICBqID0gMDsKKyAgICBzYl9wcml2W2orK10gPSAoQ0hBUikg SUFDOyAgICAgICAgICAgICAgICAgLyogSSBBbSBhIENvbW1hbmQgKi8KKyAgICBzYl9wcml2W2or K10gPSAoQ0hBUikgU0I7ICAgICAgICAgICAgICAgICAgLyogU3VibmVnb3RpYXRpb24gKi8KKyAg ICBzYl9wcml2W2orK10gPSBURUxPUFRfRk9SV0FSRF9YOyAgICAgICAgICAgLyogRm9yd2FyZCBY ICovCisgICAgc2JfcHJpdltqKytdID0gRldEWF9EQVRBOyAgICAgICAgICAgICAgICAgIC8qIERh dGEgKi8KKyAgICBzYl9wcml2W2orK10gPSBwWzBdOyAgICAgICAgICAgICAgICAgICAgICAgLyog Rmlyc3QgQnl0ZSBvZiBDaGFubmVsICovCisgICAgaWYgKCBwWzBdID09IElBQyApCisgICAgICAg IHNiX3ByaXZbaisrXSA9IElBQzsKKyAgICBzYl9wcml2W2orK10gPSBwWzFdOyAgICAgICAgICAg ICAgICAgICAgICAgLyogU2Vjb25kIEJ5dGUgb2YgQ2hhbm5lbCAqLworICAgIGlmICggcFsxXSA9 PSBJQUMgKQorICAgICAgICBzYl9wcml2W2orK10gPSBJQUM7CisgICAgal9zYXYgPSBqOworCisg ICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisgICAgICAgIHRtcCA9ICh1bnNpZ25lZCBp bnQpZGF0YVtpXTsKKyAgICAgICAgaWYgKCB0bXAgPT0gSUFDICkgeworICAgICAgICAgICAgc2Jf cHJpdltqKytdID0gSUFDOworICAgICAgICAgICAgc2JfcHJpdltqKytdID0gSUFDOworICAgICAg ICB9IGVsc2UgeworICAgICAgICAgICAgc2JfcHJpdltqKytdID0gdG1wOworICAgICAgICB9Cisg ICAgICAgIGlmICggaiA+PSAyMDQ1ICYmIChpIDwgbGVuLTEpICkgeworICAgICAgICAgICAgc2Jf cHJpdltqKytdID0gKENIQVIpIElBQzsgIC8qIEVuZCBvZiBTdWJuZWdvdGlhdGlvbiAqLworICAg ICAgICAgICAgc2JfcHJpdltqKytdID0gKENIQVIpIFNFOyAgIC8qIG1hcmtlZCBieSBJQUMgU0Ug Ki8KKworI2lmZGVmIERFQlVHCisgICAgICAgICAgICBpZiAoZGVibG9nIHx8IHRuX2RlYiB8fCBk ZWJzZXMpIHsKKyAgICAgICAgICAgICAgICBja21ha3htc2coIChjaGFyICopZndkeF9tc2dfb3V0 LFROX01TR19MRU4sIlRFTE5FVCBTRU5UIFNCICIsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICBURUxPUFQoVEVMT1BUX0ZPUldBUkRfWCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAi IERBVEEgQ0hBTk5FTD0iLGNraXRvYShjaGFubmVsKSwiICIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMICk7CisgICAgICAgICAg ICAgICAgdG5faGV4KChDSEFSICopZndkeF9tc2dfb3V0LAorCQkgICAgICAgVE5fTVNHX0xFTiwm c2JfcHJpdltqX3Nhdl0sai0oal9zYXYrMikpOworICAgICAgICAgICAgICAgIGNrc3RybmNhdCgo Y2hhciAqKWZ3ZHhfbXNnX291dCwiIElBQyBTRSIsVE5fTVNHX0xFTik7CisgICAgICAgICAgICB9 CisjZW5kaWYgLyogREVCVUcgKi8KKyNpZmRlZiBPUzIKKyAgICAgICAgICAgIFJlcXVlc3RUZWxu ZXRNdXRleCggU0VNX0lOREVGSU5JVEVfV0FJVCApOworI2VuZGlmCisjaWZkZWYgREVCVUcKKyAg ICAgICAgICAgIGRlYnVnKEYxMDAsKGNoYXIgKilmd2R4X21zZ19vdXQsIiIsMCk7CisgICAgICAg ICAgICBpZiAodG5fZGViIHx8IGRlYnNlcykgdG5fZGVidWcoKGNoYXIgKilmd2R4X21zZ19vdXQp OworI2VuZGlmIC8qIERFQlVHICovCisgICAgICAgICAgICByYyA9ICh0dG9sKHNiX3ByaXYsaikg PCAwKTsgICAgICAgICAgICAgICAgLyogU2VuZCBpdC4gKi8KKyNpZmRlZiBPUzIKKyAgICAgICAg ICAgIFJlbGVhc2VUZWxuZXRNdXRleCgpOworI2VuZGlmCisgICAgICAgICAgICBpZiAocmMpIHsK KyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJmd2R4X3NlbmRfZGF0YV9mcm9tX2NoYW5uZWwo KSIsInR0b2woKSBmYWlsZWQiLDApOworICAgICAgICAgICAgICAgIHJldHVybigtMSk7CisgICAg ICAgICAgICB9CisKKyAgICAgICAgICAgIGogPSAwOworICAgICAgICAgICAgc2JfcHJpdltqKytd ID0gKENIQVIpIElBQzsgICAgICAgICAgICAgICAgIC8qIEkgQW0gYSBDb21tYW5kICovCisgICAg ICAgICAgICBzYl9wcml2W2orK10gPSAoQ0hBUikgU0I7ICAgICAgICAgICAgICAgICAgLyogU3Vi bmVnb3RpYXRpb24gKi8KKyAgICAgICAgICAgIHNiX3ByaXZbaisrXSA9IFRFTE9QVF9GT1JXQVJE X1g7ICAgICAgICAgICAvKiBGb3J3YXJkIFggKi8KKyAgICAgICAgICAgIHNiX3ByaXZbaisrXSA9 IEZXRFhfREFUQTsgICAgICAgICAgICAgICAgICAvKiBEYXRhICovCisgICAgICAgICAgICBzYl9w cml2W2orK10gPSBwWzBdOyAgICAgICAgICAgICAgICAgICAgICAgLyogRmlyc3QgQnl0ZSBvZiBD aGFubmVsICovCisgICAgICAgICAgICBpZiAoIHBbMF0gPT0gSUFDICkKKyAgICAgICAgICAgICAg ICBzYl9wcml2W2orK10gPSBJQUM7CisgICAgICAgICAgICBzYl9wcml2W2orK10gPSBwWzFdOyAg ICAgICAgICAgICAgICAgICAgICAgLyogU2Vjb25kIEJ5dGUgb2YgQ2hhbm5lbCAqLworICAgICAg ICAgICAgaWYgKCBwWzFdID09IElBQyApCisgICAgICAgICAgICAgICAgc2JfcHJpdltqKytdID0g SUFDOworICAgICAgICB9CisgICAgfQorCisgICAgc2JfcHJpdltqKytdID0gKENIQVIpIElBQzsg ICAgICAgICAgICAgICAgIC8qIEVuZCBvZiBTdWJuZWdvdGlhdGlvbiAqLworICAgIHNiX3ByaXZb aisrXSA9IChDSEFSKSBTRTsgICAgICAgICAgICAgICAgICAvKiBtYXJrZWQgYnkgSUFDIFNFICov CisKKyNpZmRlZiBERUJVRworICAgIGlmIChkZWJsb2cgfHwgdG5fZGViIHx8IGRlYnNlcykgewor ICAgICAgICBja21ha3htc2coIChjaGFyICopZndkeF9tc2dfb3V0LFROX01TR19MRU4sCisgICAg ICAgICAgICAgICAgICAgIlRFTE5FVCBTRU5UIFNCICIsVEVMT1BUKFRFTE9QVF9GT1JXQVJEX1gp LAorICAgICAgICAgICAgICAgICAgICIgREFUQSAiLGNrY3RveChwWzBdLDEpLCIgIixja2N0b3go cFsxXSwxKSwiICIsCisgICAgICAgICAgICAgICAgICAgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxM KTsKKyAgICAgICAgdG5faGV4KChDSEFSICopZndkeF9tc2dfb3V0LFROX01TR19MRU4sJnNiX3By aXZbNl0sai04KTsKKyAgICAgICAgY2tzdHJuY2F0KChjaGFyICopZndkeF9tc2dfb3V0LCIgSUFD IFNFIixUTl9NU0dfTEVOKTsKKyAgICB9CisjZW5kaWYgLyogREVCVUcgKi8KKyNpZmRlZiBPUzIK KyAgICBSZXF1ZXN0VGVsbmV0TXV0ZXgoIFNFTV9JTkRFRklOSVRFX1dBSVQgKTsKKyNlbmRpZgor I2lmZGVmIERFQlVHCisgICAgZGVidWcoRjEwMCwoY2hhciAqKWZ3ZHhfbXNnX291dCwiIiwwKTsK KyAgICBpZiAodG5fZGViIHx8IGRlYnNlcykgdG5fZGVidWcoKGNoYXIgKilmd2R4X21zZ19vdXQp OworI2VuZGlmIC8qIERFQlVHICovCisgICAgcmMgPSAodHRvbChzYl9wcml2LGopIDwgMCk7ICAg ICAgICAgICAgICAgIC8qIFNlbmQgaXQuICovCisjaWZkZWYgT1MyCisgICAgUmVsZWFzZVRlbG5l dE11dGV4KCk7CisjZW5kaWYKKyAgICBpZiAoIHJjICkgeworICAgICAgICBkZWJ1ZyhGMTEwLCJm d2R4X3NlbmRfZGF0YV9mcm9tX2NoYW5uZWwoKSIsInR0b2woKSBmYWlsZWQiLDApOworICAgICAg ICByZXR1cm4oLTEpOworICAgIH0KKworCisgICAgcmV0dXJuKDApOworfQorCitzdGF0aWMgdW5z aWduZWQgY2hhciAqCisjaWZkZWYgQ0tfQU5TSUMKK2Z3ZHhfYWRkX3F1b3RlZF90d29ieXRlKHVu c2lnbmVkIGNoYXIgKnAsIHVuc2lnbmVkIHNob3J0IHR3b2J5dGUpCisjZWxzZQorZndkeF9hZGRf cXVvdGVkX3R3b2J5dGUocCwgdHdvYnl0ZSkKKyAgICB1bnNpZ25lZCBjaGFyICpwOyB1bnNpZ25l ZCBzaG9ydCB0d29ieXRlOworI2VuZGlmIC8qIENLX0FOU0lDICovCisvKiBhZGRzIHRoZSBJQUMg cXVvdGVkIChNU0IpIHJlcHJlc2VudGF0aW9uIG9mICdjaGFubmVsJyBhdCBidWZmZXIgcG9pbnRl ciAncCcsCisgKiByZXR1cm5pbmcgcG9pbnRlciB0byBuZXcgYnVmZmVyIHBvc2l0aW9uLiBOTyBP VkVSRkxPVyBDSEVDSyEKKyAqLworeworICAgICpwKysgPSAodW5zaWduZWQgY2hhcikoKHR3b2J5 dGUgPj4gOCkgJiAweEZGKTsKKyAgICBpZiAoKihwIC0gMSkgPT0gMHhGRikKKyAgICAgICAgKnAr KyA9IDB4RkY7CisgICAgKnArKyA9ICh1bnNpZ25lZCBjaGFyKSh0d29ieXRlICYgMHhGRik7Cisg ICAgaWYgKCoocCAtIDEpID09IDB4RkYpCisgICAgICAgICpwKysgPSAweEZGOworICAgIHJldHVy biBwOworfQorCitpbnQKKyNpZmRlZiBDS19BTlNJQworZndkeF9jcmVhdGVfZmFrZV94YXV0aChj aGFyICpuYW1lLCBpbnQgbmFtZV9sZW4sIGludCBkYXRhX2xlbikKKyNlbHNlCitmd2R4X2NyZWF0 ZV9mYWtlX3hhdXRoKG5hbWUsIG5hbWVfbGVuLCBkYXRhX2xlbikKKyAgICBjaGFyICpuYW1lOyBp bnQgbmFtZV9sZW47IGludCBkYXRhX2xlbjsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworICAg IGNoYXIgc3RhY2tkYXRhWzI1Nl07CisgICAgdW5zaWduZWQgaW50IGMsIG47CisKKyAgICBpZiAo IW5hbWVfbGVuIHx8ICFkYXRhX2xlbikKKyAgICAgICAgcmV0dXJuIDE7CisgICAgZmFrZV94YXV0 aC5uYW1lID0gbWFsbG9jKG5hbWVfbGVuKTsKKyAgICBmYWtlX3hhdXRoLmRhdGEgPSBtYWxsb2Mo ZGF0YV9sZW4pOworICAgIGlmICghZmFrZV94YXV0aC5uYW1lIHx8ICFmYWtlX3hhdXRoLmRhdGEp CisgICAgICAgIHJldHVybiAyOworICAgIGZha2VfeGF1dGgubmFtZV9sZW5ndGggPSBuYW1lX2xl bjsKKyAgICBtZW1jcHkoZmFrZV94YXV0aC5uYW1lLCBuYW1lLCBuYW1lX2xlbik7CisgICAgZmFr ZV94YXV0aC5kYXRhX2xlbmd0aCA9IGRhdGFfbGVuOworCisgICAgLyogdHJ5IHRvIG1ha2UgYSBy YW5kb20gdW5zaWduZWQgaW50IHRvIGZlZWQgc3JhbmQoKSAqLworICAgIGMgPSB0aW1lKE5VTEwp OworICAgIGMgKj0gZ2V0cGlkKCk7CisgICAgZm9yIChuID0gMDsgbiA8IHNpemVvZihzdGFja2Rh dGEpOyBuKyspCisgICAgICAgIGMgKz0gc3RhY2tkYXRhW25dOworICAgIHNyYW5kKCh1bnNpZ25l ZCBpbnQpYyk7CisgICAgZm9yIChjID0gMDsgYyA8IGRhdGFfbGVuOyBjKyspCisgICAgICAgIGZh a2VfeGF1dGguZGF0YVtjXSA9ICh1bnNpZ25lZCBjaGFyKXJhbmQoKTsKKyAgICByZXR1cm4gMDsK K30KKworI2lmZGVmIENPTU1FTlQKKy8qIE5vIGxvbmdlciB1c2VkICovCitpbnQKK2Z3ZHhfc2Vu ZF94YXV0aCh2b2lkKQoreworICAgIGludCBjLCBlcnIsIGRweW51bSwgZmFtaWx5LCBzYl9sZW4s IHJjOworICAgIGNoYXIgKmRpc3BsYXksICpob3N0ID0gTlVMTDsKKyAgICB1bnNpZ25lZCBjaGFy ICpzYl9wcml2LCAqcDsKKworICAgIC8qIHBhcnNlIHRoZSBsb2NhbCBESVNQTEFZIGVudiB2YXIg Ki8KKyAgICBpZiAoIShkaXNwbGF5ID0gdG5fZ2V0X2Rpc3BsYXkoKSkpCisgICAgICAgIHJldHVy biAoLTEpOworICAgIGlmIChmd2R4X3BhcnNlX2Rpc3BsYXluYW1lKGRpc3BsYXksICZmYW1pbHks ICZob3N0LCAmZHB5bnVtLCBOVUxMLCBOVUxMKSkgeworICAgICAgICBjaGFyICogZGlzcF9ubyA9 IGNraXRvYShkcHludW0pOworICAgICAgICBpZiAoZmFtaWx5ID09IEZhbWlseUxvY2FsKSB7Cisg ICAgICAgICAgICAvKiBjYWxsIHdpdGggYWRkcmVzcyA9ICI8bG9jYWwgaG9zdCBuYW1lPiIgKi8K KyAgICAgICAgICAgIGNoYXIgYWRkcmVzc1szMDBdID0gImxvY2FsaG9zdCI7CisgICAgICAgICAg ICBnZXRob3N0bmFtZShhZGRyZXNzLCBzaXplb2YoYWRkcmVzcykgLSAxKTsKKyAgICAgICAgICAg IHJlYWxfeGF1dGggPSBYYXVHZXRBdXRoQnlBZGRyKGZhbWlseSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbihhZGRyZXNzKSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4oZGlzcF9ubyksCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwX25vLCAwLCBOVUxMCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICB9CisgICAgICAgIGVsc2Ug aWYgKGZhbWlseSA9PSBGYW1pbHlJbnRlcm5ldCkgeworICAgICAgICAgICAgLyogY2FsbCB3aXRo IGFkZHJlc3MgPSA0IGJ5dGVzIG51bWVyaWMgaXAgYWRkciAoTVNCKSAqLworICAgICAgICAgICAg c3RydWN0IGhvc3RlbnQgKmhpOworICAgICAgICAgICAgaWYgKGhpID0gZ2V0aG9zdGJ5bmFtZSho b3N0KSkKKyAgICAgICAgICAgICAgICByZWFsX3hhdXRoID0gWGF1R2V0QXV0aEJ5QWRkcihmYW1p bHksIDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGkt PmhfYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz dHJsZW4oZGlzcF9ubyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZGlzcF9ubywgMCwgTlVMTAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICk7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGhvc3QpIHsKKyAgICAg ICAgZnJlZShob3N0KTsKKyAgICAgICAgaG9zdCA9IE5VTEw7CisgICAgfQorICAgIGlmIChyZWFs X3hhdXRoKQorICAgICAgICBlcnIgPSBmd2R4X2NyZWF0ZV9mYWtlX3hhdXRoKHJlYWxfeGF1dGgt Pm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhbF94YXV0aC0+ bmFtZV9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhbF94 YXV0aC0+ZGF0YV9sZW5ndGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAp OworICAgIGVsc2UKKyAgICAgIGVyciA9IGZ3ZHhfY3JlYXRlX2Zha2VfeGF1dGgoIk1JVC1NQUdJ Qy1DT09LSUUtMSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbigi TUlULU1BR0lDLUNPT0tJRS0xIiksIDE2KTsKKyAgICBpZiAoZXJyKQorICAgICAgICByZXR1cm4o LTEpOworCisgICAgLyogYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgU0IgYmxvY2ssIGFsbG9jIGZv ciB3b3JzdCBjYXNlICAgICAgICAgICAgICAqLworICAgIC8qIHRoZSBmb2xsb3dpbmcgc3ByaW50 ZigpIGNhbGxzIGFyZSBzYWZlIGR1ZSB0byBsZW5ndGggY2hlY2tpbmcgICAgICAgKi8KKyAgICAv KiBidWZmZXIgaXMgdHdpY2UgYXMgYmlnIGFzIHRoZSBpbnB1dCBqdXN0IGluIGNhc2UgZXZlcnkg Ynl0ZSB3YXMgSUFDICovCisgICAgc2JfbGVuID0gNSArIDIgKyAyICsgZmFrZV94YXV0aC5uYW1l X2xlbmd0aCArIGZha2VfeGF1dGguZGF0YV9sZW5ndGggKyAyOworICAgIGlmICghKHNiX3ByaXYg PSBtYWxsb2MoMiAqIHNiX2xlbikpKQorICAgICAgICByZXR1cm4oLTEpOworICAgIHAgPSBzYl9w cml2OworICAgIHNwcmludGYocCwgIiVjJWMlYyVjJWMiLCBJQUMsIFNCLCBURUxPUFRfRk9SV0FS RF9YLAorICAgICAgICAgICAgRldEWF9PUFRfREFUQSwgRldEWF9PUFRfWEFVVEgpOworICAgIHAg Kz0gNTsKKyAgICBwID0gZndkeF9hZGRfcXVvdGVkX3R3b2J5dGUocCwgZmFrZV94YXV0aC5uYW1l X2xlbmd0aCk7CisgICAgcCA9IGZ3ZHhfYWRkX3F1b3RlZF90d29ieXRlKHAsIGZha2VfeGF1dGgu ZGF0YV9sZW5ndGgpOworICAgIGZvciAoYyA9IDA7IGMgPCBmYWtlX3hhdXRoLm5hbWVfbGVuZ3Ro OyBjKyspIHsKKyAgICAgICAgKnArKyA9IGZha2VfeGF1dGgubmFtZVtjXTsKKyAgICAgICAgaWYg KCh1bnNpZ25lZCBjaGFyKWZha2VfeGF1dGgubmFtZVtjXSA9PSAweEZGKQorICAgICAgICAgICAg KnArKyA9IDB4RkY7CisgICAgfQorICAgIGZvciAoYyA9IDA7IGMgPCBmYWtlX3hhdXRoLmRhdGFf bGVuZ3RoOyBjKyspIHsKKyAgICAgICAgKnArKyA9IGZha2VfeGF1dGguZGF0YVtjXTsKKyAgICAg ICAgaWYgKCh1bnNpZ25lZCBjaGFyKWZha2VfeGF1dGguZGF0YVtjXSA9PSAweEZGKQorICAgICAg ICAgICAgKnArKyA9IDB4RkY7CisgICAgfQorICAgIHNwcmludGYocCwgIiVjJWMiLCBJQUMsIFNF KTsKKyAgICBwICs9IDI7CisKKyNpZmRlZiBERUJVRworICAgIGlmIChkZWJsb2cgfHwgdG5fZGVi IHx8IGRlYnNlcykgeworICAgICAgICBzcHJpbnRmKChjaGFyICopZndkeF9tc2dfb3V0LCJURUxO RVQgU0VOVCBTQiAlcyBPUFRJT05fREFUQSBYQVVUSCAiLAorICAgICAgICAgICAgICAgICBURUxP UFQoVEVMT1BUX0ZPUldBUkRfWCkpOworICAgICAgICB0bl9oZXgoKGNoYXIgKilmd2R4X21zZ19v dXQsVE5fTVNHX0xFTiwmc2JfcHJpdls1XSwocC1zYl9wcml2KS03KTsKKyAgICAgICAgY2tzdHJu Y2F0KChjaGFyICopZndkeF9tc2dfb3V0LCIgSUFDIFNFIixUTl9NU0dfTEVOKTsKKyAgICB9Cisj ZW5kaWYgLyogREVCVUcgKi8KKworICAgIC8qIEFkZCBUZWxuZXQgRGVidWcgaW5mbyBoZXJlICov CisjaWZkZWYgT1MyCisgICAgUmVxdWVzdFRlbG5ldE11dGV4KCBTRU1fSU5ERUZJTklURV9XQUlU ICk7CisjZW5kaWYKKyNpZmRlZiBERUJVRworICAgIGRlYnVnKEYxMDAsKGNoYXIgKilmd2R4X21z Z19vdXQsIiIsMCk7CisgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpIHRuX2RlYnVnKChjaGFyICop ZndkeF9tc2dfb3V0KTsKKyNlbmRpZiAvKiBERUJVRyAqLworICAgIHJjID0gKCB0dG9sKHNiX3By aXYscC1zYl9wcml2KSA8IDAgKTsgICAgICAgICAgICAgICAgLyogU2VuZCBpdC4gKi8KKyNpZmRl ZiBPUzIKKyAgICBSZWxlYXNlVGVsbmV0TXV0ZXgoKTsKKyNlbmRpZgorICAgIGlmIChyYykgewor ICAgICAgICBkZWJ1ZyhGMTEwLCJmd2R4X3NlbmRfeGF1dGgoKSIsInR0b2woKSBmYWlsZWQiLDAp OworICAgICAgICByZXR1cm4oLTEpOworICAgIH0KKworCisgICAgZnJlZShzYl9wcml2KTsKKyAg ICByZXR1cm4oMCk7Cit9CisjZW5kaWYgLyogQ09NTUVOVCAqLworI2lmZGVmIEZXRFhfU0VSVkVS CisvKiBPbmx5IGlmIHdlIGV2ZXIgYmVjb21lIGEgc2VydmVyIC0gbm90IHlldCBwb3J0ZWQgdG8g S2VybWl0ICAgKi8KKy8qIEFuZCBldmVuIHNvIG1vc3Qgb2YgdGhpcyBjb2RlIGRvZXMgbm90IGJl bG9uZyBpbiB0aGlzIG1vZHVsZSAqLworCitpbnQKK2Z3ZHhfd3JpdGVfeGF1dGhmaWxlKHZvaWQp Cit7CisgICAgaW50IGRweW51bSwgc2NybnVtLCBmYW1pbHk7CisgICAgY2hhciBteWhvc3RbMzAw XSwgKmhvc3QsICpyZXN0ID0gTlVMTDsKKyAgICBGSUxFICpmaWxlOworICAgIHN0cnVjdCBzb2Nr YWRkcl9pbiBzYWRkcjsKKyAgICBzdHJ1Y3QgaG9zdGVudCAqaGk7CisKKyAgICBpZiAoIWZ3ZHhf ZGlzcGxheSAmJiAhZndkeF94YXV0aGZpbGUpCisgICAgICAgIHJldHVybiAxOworICAgIGlmICgh cGFyc2VfZGlzcGxheW5hbWUoZndkeF9kaXNwbGF5LAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgJmZhbWlseSwgJmhvc3QsICZkcHludW0sICZzY3JudW0sICZyZXN0KSkKKyAgICAgICAgcmV0 dXJuIDI7CisgICAgaWYgKHJlc3QpIGZyZWUocmVzdCk7CisgICAgaWYgKGhvc3QpIGZyZWUoaG9z dCk7CisgICAgaWYgKGZhbWlseSAhPSBGYW1pbHlJbnRlcm5ldCkKKyAgICAgICAgcmV0dXJuIDM7 IC8qIGV2ZXJ5IHRoaW5nIGJ1dCBGYW1pbHlJbnRlcm5ldCBpcyB1bmV4cGVjdGVkICovCisKKyAg ICAvKiBYIGNvbm5lY3Rpb25zIHRvIGxvY2FsaG9zdDoxIGlzIGFjdHVhbGx5IHRyZWF0ZWQgYXMg bG9jYWwgdW5peCBzb2NrZXRzLAorICAgICAqIHNlZSB0aGUgJ3hhdXRoJyBtYW4gcGFnZS4KKyAg ICAgKi8KKyAgICB4YXV0aC5mYW1pbHkgPSBGYW1pbHlMb2NhbDsKKyAgICBpZiAoZ2V0aG9zdG5h bWUobXlob3N0LCBzaXplb2YobXlob3N0KSAtIDEpKQorICAgICAgICByZXR1cm4gNTsKKyAgICB4 YXV0aC5hZGRyZXNzX2xlbmd0aCA9IHN0cmxlbihteWhvc3QpOworICAgIGlmICghKHhhdXRoLmFk ZHJlc3MgPSBtYWxsb2MoeGF1dGguYWRkcmVzc19sZW5ndGgpKSkKKyAgICAgICAgcmV0dXJuIDU7 CisgICAgbWVtY3B5KHhhdXRoLmFkZHJlc3MsIG15aG9zdCwgeGF1dGguYWRkcmVzc19sZW5ndGgp OworCisgICAgLyogdGhlIGRpc3BsYXkgbnVtYmVyIGlzIHdyaXR0ZW4gYXMgYSBzdHJpbmcsIG5v dCBudW1lcmljICovCisgICAgaWYgKCEoeGF1dGgubnVtYmVyID0gbWFsbG9jKDYpKSkKKyAgICAg ICAgcmV0dXJuIDY7CisgICAgc25wcmludGYoeGF1dGgubnVtYmVyLCA1LCAiJXUiLCBkcHludW0p OworICAgIHhhdXRoLm51bWJlcl9sZW5ndGggPSBzdHJsZW4oeGF1dGgubnVtYmVyKTsKKyAgICBp ZiAoIShmaWxlID0gZm9wZW4oZndkeF94YXV0aGZpbGUsICJ3YiIpKSkKKyAgICAgICAgcmV0dXJu IDc7CisgICAgaWYgKCFYYXVXcml0ZUF1dGgoZmlsZSwgJnhhdXRoKSkKKyAgICAgICAgcmV0dXJu IDg7CisgICAgZmNsb3NlKGZpbGUpOworICAgIHNldGVudigiWEFVVEhPUklUWSIsIGZ3ZHhfeGF1 dGhmaWxlLCAxKTsKKyAgICByZXR1cm4gMDsKK30KKworaW50Citmd2R4X3NldHVwX3hhdXRoKHVu c2lnbmVkIGNoYXIgKnNwLCBpbnQgbGVuKQorLyogY2FsbGVkIHdpdGggJ2xlbicgeGF1dGggYnl0 ZXMsIHN0YXJ0aW5nIGF0ICdzcCcKKyAqIHRoZSBkYXRhIGZvcm1hdCBpczogPHVpbnQxNiBuYW1l X2xlbmd0aD4gPHVpbnQxNiBkYXRhX2xlbmd0aD4gPG5hbWU+IDxkYXRhPgorICovCit7CisgICAg aW50IHhhdXRoZmQ7CisKKyAgICBpZiAoIWZ3ZHhfb3B0aW9uc1tGV0RYX09QVF9YQVVUSF0pCisg ICAgICAgIHJldHVybiAxOworICAgIGlmIChsZW4gPCA0KQorICAgICAgICByZXR1cm4gMjsKKwor ICAgIC8qIHNldHVwIHRoZSB4YXV0aCBzdHJ1Y3QgKi8KKyAgICB4YXV0aC5uYW1lX2xlbmd0aCA9 IChzcFswXSA8PCA4KSArIHNwWzFdOworICAgIHhhdXRoLmRhdGFfbGVuZ3RoID0gKHNwWzJdIDw8 IDgpICsgc3BbM107CisgICAgaWYgKGxlbiAhPSA0ICsgeGF1dGgubmFtZV9sZW5ndGggKyB4YXV0 aC5kYXRhX2xlbmd0aCkKKyAgICAgICAgcmV0dXJuIDM7CisgICAgeGF1dGgubmFtZSA9IG1hbGxv Yyh4YXV0aC5uYW1lX2xlbmd0aCk7CisgICAgeGF1dGguZGF0YSA9IG1hbGxvYyh4YXV0aC5kYXRh X2xlbmd0aCk7CisgICAgaWYgKCF4YXV0aC5uYW1lIHx8ICF4YXV0aC5kYXRhKQorICAgICAgICBy ZXR1cm4gNDsKKyAgICBtZW1jcHkoeGF1dGgubmFtZSwgc3AgKyA0LCB4YXV0aC5uYW1lX2xlbmd0 aCk7CisgICAgbWVtY3B5KHhhdXRoLmRhdGEsIHNwICsgNCArIHhhdXRoLm5hbWVfbGVuZ3RoLCB4 YXV0aC5kYXRhX2xlbmd0aCk7CisKKyAgICAvKiBTZXR1cCB0byBhbHdheXMgaGF2ZSBhIGxvY2Fs IC5YYXV0aG9yaXR5LiAqLworICAgIGZ3ZHhfeGF1dGhmaWxlID0gbWFsbG9jKE1BWFBBVEhMRU4r MSk7CisgICAgc25wcmludGYoZndkeF94YXV0aGZpbGUsIE1BWFBBVEhMRU4sICIvdG1wL1hhdXRo WFhYWFhYIik7CisgICAgaWYgKCh4YXV0aGZkID0gbWtzdGVtcChmd2R4X3hhdXRoZmlsZSkpICE9 IC0xKQorICAgICAgICAvKiB3ZSBjaGFuZ2UgZmlsZSBvd25lcnNoaXAgbGF0ZXIsIHdoZW4gd2Ug a25vdyB3aG8gaXMgdG8gYmUgb3duZXIhICovCisgICAgICAgIGNsb3NlKHhhdXRoZmQpOworICAg IGVsc2UgeworICAgICAgICBmcmVlKGZ3ZHhfeGF1dGhmaWxlKTsKKyAgICAgICAgZndkeF94YXV0 aGZpbGUgPSBOVUxMOworICAgICAgICByZXR1cm4gNTsKKyAgICB9CisvKiBNdXN0IGhhdmUgdGhl IHN1YnNoZWxsJ3MgbmV3IERJU1BMQVkgZW52IHZhciB0byB3cml0ZSB4YXV0aCB0byB4YXV0aGZp bGUgKi8KKyAgICBpZiAoZndkeF9kaXNwbGF5KQorICAgICAgICBpZiAoZndkeF93cml0ZV94YXV0 aGZpbGUoKSkKKyAgICAgICAgICAgIHJldHVybiA2OworCisgICAgcmV0dXJuIDA7Cit9CisKK3Zv aWQgZndkeF9zZXRfeGF1dGhmaWxlX293bmVyKGludCB1aWQpCit7CisgICAgc3RydWN0IHBhc3N3 ZCAqcHdkOworCisgICAgaWYgKCFmd2R4X3hhdXRoZmlsZSB8fCAhKHB3ZCA9IGdldHB3dWlkKHVp ZCkpKQorICAgICAgICByZXR1cm47CisgICAgY2hvd24oZndkeF94YXV0aGZpbGUsIHB3ZC0+cHdf dWlkLCBwd2QtPnB3X2dpZCk7Cit9CisKK2ludAorZndkeF9zZXJ2ZXJfYWNjZXB0X29wdGlvbnMo dW5zaWduZWQgY2hhciAqc3AsIGludCBsZW4pCisvKiBjYWxsZWQgd2l0aCAnbGVuJyBvcHRpb24g Ynl0ZXMsIHN0YXJ0aW5nIGF0ICdzcCcgKi8KK3sKKyAgICBpbnQgYzsKKworICAgIGZvciAoYyA9 IDA7IGMgPCBsZW4tMjsgYysrKSB7CisgICAgICAgIGlmIChjID09IDApIHsKKyAgICAgICAgICAg IGlmIChzcFtjXSAmIEZXRFhfT1BUX1hBVVRIKQorICAgICAgICAgICAgICAgIGZsYWcgPSAxOwor ICAgICAgICB9CisgICAgfQorICAgIHJldHVybigwKTsKK30KKyNlbmRpZiAvKiBGV0RYX1NFUlZF UiAqLworI2VuZGlmIC8qIENLX0ZPUldBUkRfWCAqLworCisjaWZkZWYgSUtTX09QVElPTgorLyoK KyAgaWtzX3dhaXQoKSAtLSBXYWl0IGZvciBhbiBJS1Mgc3VibmVnb3RpYXRpb24gcmVzcG9uc2Uu CisgIHNiIC0gaXMgZWl0aGVyIEtFUk1JVF9SRVFfU1RBUlQgb3IgS0VSTUlUX1JFUV9TVE9QIGRl cGVuZGluZyBvbiB0aGUgZGVzaXJlZAorICAgICAgIHN0YXRlIG9mIHRoZSBwZWVyJ3MgS2VybWl0 IHNlcnZlci4KKyAgZmx1c2hvayAtIHNwZWNpZmllcyB3aGV0aGVyIGl0IGlzIG9rIHRvIHRocm93 IGF3YXkgbm9uLVRlbG5ldCBkYXRhCisgICAgICAgaWYgc28sIHRoZW4gd2UgY2FsbCB0dGZsdWko KSBpbnN0ZWFkIG9mIHRuX2ZsdWkoKS4KKyAgUmV0dXJuczoKKyAgIDEgaWYgdGhlIGRlc2lyZWQg c3RhdGUgaXMgYWNoaWV2ZWQgb3IgaWYgaXQgaXMgdW5rbm93bi4KKyAgIDAgaWYgdGhlIGRlc2ly ZWQgc3RhdGUgaXMgbm90IGFjaGlldmVkLgorKi8KK2ludAorI2lmZGVmIENLX0FOU0lDCitpa3Nf d2FpdChpbnQgc2IsIGludCBmbHVzaG9rKQorI2Vsc2UgLyogQ0tfQU5TSUMgKi8KK2lrc193YWl0 KHNiLGZsdXNob2spIGludCBzYjsgaW50IGZsdXNob2s7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8K K3sKKyAgICBpbnQgdG5fd2FpdF9zYXZlID0gdG5fd2FpdF9mbGc7CisgICAgaW50IHg7CisKKyAg ICBpZiAoVEVMT1BUX1UoVEVMT1BUX0tFUk1JVCkpIHsKKyAgICAgICAgc3dpdGNoIChzYikgewor ICAgICAgICAgIGNhc2UgS0VSTUlUX1JFUV9TVEFSVDoKKyAgICAgICAgICAgIGRlYnVnKEYxMTEs CisgICAgICAgICAgICAgICAgICAiaWtzX3dhaXQgS0VSTUlUX1JFUV9TVEFSVCIsCisgICAgICAg ICAgICAgICAgICAidV9zdGFydCIsCisgICAgICAgICAgICAgICAgICBURUxPUFRfU0IoVEVMT1BU X0tFUk1JVCkua2VybWl0LnVfc3RhcnQKKyAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAg ICB0bl9zaWtzKEtFUk1JVF9SRVFfU1RBUlQpOworICAgICAgICAgICAgdG5fd2FpdF9mbGcgPSAx OyAgICAgICAgICAgIC8qIEtlcm1pdCBPcHRpb24gTVVTVCB3YWl0ICovCisgICAgICAgICAgICBk byB7CisgICAgICAgICAgICAgICAgaWYgKGZsdXNob2spCisgICAgICAgICAgICAgICAgICB0bl93 YWl0X2lkeCA9IDA7CisgICAgICAgICAgICAgICAgeCA9IHRuX3dhaXQoImlrc193YWl0KCkgbWVf aWtzX3JlcV9zdGFydCIpOworICAgICAgICAgICAgfSB3aGlsZSAoeCA9PSAwICYmIGZsdXNob2sg JiYgdG5fd2FpdF9pZHggPT0gVE5fV0FJVF9CVUZfU1opOworICAgICAgICAgICAgdG5fd2FpdF9m bGcgPSB0bl93YWl0X3NhdmU7CisgICAgICAgICAgICBpZiAoZmx1c2hvaykKKyAgICAgICAgICAg ICAgdG5fd2FpdF9pZHggPSAwOworICAgICAgICAgICAgaWYgKHRuX3dhaXRfaWR4ID09IFROX1dB SVRfQlVGX1NaKSB7CisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiBXZSBh cmUgYXR0ZW1wdGluZyB0byBzdGFydCBhIGtlcm1pdCBzZXJ2ZXIgb24gdGhlIHBlZXIKKyAgICAg ICAgICAgICAgICAgKiB0aGUgbW9zdCBsaWtlbHkgcmVhc29uIGlzIGJlY2F1c2Ugd2Ugd2FudCB0 byBwZXJmb3JtIGEKKyAgICAgICAgICAgICAgICAgKiBmaWxlIHRyYW5zZmVyLiAgQnV0IHRoZXJl IGlzIGEgaHVnZSBhbW91bnQgb2Ygbm9uIHRlbG5ldAorICAgICAgICAgICAgICAgICAqIG5lZ290 aWF0aW9uIGRhdGEgY29taW5nIGluIGFuZCBzbyB3ZSBoYXZlIG5vdCBiZWVuIGFibGUKKyAgICAg ICAgICAgICAgICAgKiB0byBmaW5kIHRoZSByZXNwb25zZS4gIFNvIHdlIHdpbGwgbGllIGFuZCBh c3N1bWUgdGhhdAorICAgICAgICAgICAgICAgICAqIHJlc3BvbnNlIGlzICd5ZXMnLiAgVGhlIHdv cnNlIHRoYXQgd2lsbCBoYXBwZW4gaXMgdGhhdAorICAgICAgICAgICAgICAgICAqIGEgUkVTUF9T VE9QIGlzIHJlY2VpdmVkIGFmdGVyIHdlIGVudGVyIHByb3RvY29sIG1vZGUuCisgICAgICAgICAg ICAgICAgICogQW5kIHRoZSBwcm90b2NvbCBvcGVyYXRpb24gd2lsbCBiZSBjYW5jZWxlZC4KKyAg ICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICB0bl9wdXNoKCk7CisgICAgICAgICAg ICAgICAgcmV0dXJuKDEpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB0 bl9wdXNoKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuKFRFTE9QVF9TQihURUxPUFRfS0VSTUlU KS5rZXJtaXQudV9zdGFydCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgY2FzZSBLRVJNSVRf UkVRX1NUT1A6CisgICAgICAgICAgICBkZWJ1ZyhGMTExLAorICAgICAgICAgICAgICAgICAgImlr c193YWl0IEtFUk1JVF9SRVFfU1RPUCIsCisgICAgICAgICAgICAgICAgICAidV9zdGFydCIsCisg ICAgICAgICAgICAgICAgICBURUxPUFRfU0IoVEVMT1BUX0tFUk1JVCkua2VybWl0LnVfc3RhcnQK KyAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICB0bl9zaWtzKEtFUk1JVF9SRVFfU1RP UCk7CisgICAgICAgICAgICB0bl93YWl0X2ZsZyA9IDE7ICAgICAgICAgICAgLyogS2VybWl0IE9w dGlvbiBNVVNUIHdhaXQgKi8KKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICBpZiAo Zmx1c2hvaykKKyAgICAgICAgICAgICAgICAgIHRuX3dhaXRfaWR4ID0gMDsKKyAgICAgICAgICAg ICAgICB4ID0gdG5fd2FpdCgiaWtzX3dhaXQoKSBtZV9pa3NfcmVxX3N0b3AiKTsKKyAgICAgICAg ICAgIH0gd2hpbGUgKHggPT0gMCAmJiBmbHVzaG9rICYmIHRuX3dhaXRfaWR4ID09IFROX1dBSVRf QlVGX1NaKTsKKyAgICAgICAgICAgIHRuX3dhaXRfZmxnID0gdG5fd2FpdF9zYXZlOworICAgICAg ICAgICAgaWYgKGZsdXNob2spCisgICAgICAgICAgICAgIHRuX3dhaXRfaWR4ID0gMDsKKworICAg ICAgICAgICAgaWYgKHRuX3dhaXRfaWR4ID09IFROX1dBSVRfQlVGX1NaKSB7CisgICAgICAgICAg ICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiBXZSBhcmUgYXR0ZW1wdGluZyB0byBzdG9wIGEg a2VybWl0IHNlcnZlciBvbiB0aGUgcGVlcgorICAgICAgICAgICAgICAgICAqIHRoZSBtb3N0IGxp a2VseSByZWFzb24gYmVpbmcgdGhhdCB3ZSB3YW50IHRvIGVudGVyCisgICAgICAgICAgICAgICAg ICogQ09OTkVDVCBtb2RlLiAgQnV0IHRoZXJlIGlzIGEgaHVnZSBhbW91bnQgb2Ygbm9uIHRlbG5l dAorICAgICAgICAgICAgICAgICAqIG5lZ290aWF0aW9uIGRhdGEgY29taW5nIGluIGFuZCBzbyB3 ZSBoYXZlIG5vdCBiZWVuIGFibGUKKyAgICAgICAgICAgICAgICAgKiB0byBmaW5kIHRoZSByZXNw b25zZS4gIFNvIHdlIHdpbGwgbGllIGFuZCBhc3N1bWUgdGhhdAorICAgICAgICAgICAgICAgICAq IHRoZSBhbnN3ZXIgaXMgJ3llcycgYW5kIGFsbG93IHRoZSBDT05ORUNUIGNvbW1hbmQgdG8KKyAg ICAgICAgICAgICAgICAgKiBzdWNjZWVkLiAgVGhlIHdvcnN0IHRoYXQgaGFwcGVucyBpcyB0aGF0 IENPTk5FQ1QgbW9kZQorICAgICAgICAgICAgICAgICAqIHN3YWxsb3dzIHRoZSBpbmNvbWluZyBk YXRhIGRpc3BsYXlpbmcgaXQgdG8gdGhlIHVzZXIKKyAgICAgICAgICAgICAgICAgKiBhbmQgdGhl biBpdCByZXN1bWVzIEtlcm1pdCBjbGllbnQgbW9kZS4KKyAgICAgICAgICAgICAgICAgKi8KKyAg ICAgICAgICAgICAgICB0bl9wdXNoKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuKDEpOworICAg ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB0bl9wdXNoKCk7CisgICAgICAgICAg ICAgICAgcmV0dXJuKCFURUxPUFRfU0IoVEVMT1BUX0tFUk1JVCkua2VybWl0LnVfc3RhcnQpOwor ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHRuX3B1c2goKTsKKyAgICB9CisgICAg cmV0dXJuKDEpOworfQorCitpbnQKKyNpZmRlZiBDS19BTlNJQworaWtzX3RuX3NiKENIQVIgKiBz YiwgaW50IG4pCisjZWxzZQoraWtzX3RuX3NiKHNiLCBuKSBDSEFSICogc2I7IGludCBuOworI2Vu ZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgZXh0ZXJuIGludCBzZXJ2ZXI7CisgICAgZXh0ZXJu IENIQVIgc3N0YXRlOworI2lmZGVmIE5PSUNQCisgICAgZXh0ZXJuIGludCBhdXRvZGw7CisgICAg aW50IGluYXV0b2RsID0gMCwgY21kYWRsID0gMTsKKyNlbHNlCisjaWZkZWYgQ0tfQVVUT0RMCisg ICAgZXh0ZXJuIGludCBhdXRvZGwsIGluYXV0b2RsLCBjbWRhZGw7CisjZW5kaWYgLyogQ0tfQVVU T0RMICovCisjZW5kaWYgLyogTk9JQ1AgKi8KKyAgICBzd2l0Y2ggKHNiWzBdKSB7CisgICAgICBj YXNlIEtFUk1JVF9TVEFSVDogICAgICAgICAgICAgICAgLyogU1RBUlQgKi8KKyAgICAgICAgVEVM T1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1pdC51X3N0YXJ0ID0gMTsKKyAgICAgICAgcmV0dXJu KDQpOworCisgICAgICBjYXNlIEtFUk1JVF9TVE9QOiAgICAgICAgICAgICAgICAgLyogU1RPUCAq LworICAgICAgICBURUxPUFRfU0IoVEVMT1BUX0tFUk1JVCkua2VybWl0LnVfc3RhcnQgPSAwOwor ICAgICAgICByZXR1cm4oNCk7CisKKyAgICAgIGNhc2UgS0VSTUlUX1JFUV9TVEFSVDogICAgICAg ICAgICAvKiBSRVEtU1RBUlQgKi8KKyNpZm5kZWYgTk9YRkVSCisgICAgICAgIGlmIChpbnNlcnZl cikgeworI2lmZGVmIENLX0FVVE9ETAorICAgICAgICAgICAgY21kYWRsID0gMTsgICAgICAgICAg ICAgICAgIC8qIFR1cm4gb24gcGFja2V0IGRldGVjdGlvbiAqLworI2VuZGlmIC8qIENLX0FVVE9E TCAqLworICAgICAgICAgICAgVEVMT1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1pdC5tZV9zdGFy dCA9IDE7CisgICAgICAgICAgICB0bl9zaWtzKEtFUk1JVF9SRVNQX1NUQVJUKTsKKyAgICAgICAg fSBlbHNlIGlmIChURUxPUFRfU0IoVEVMT1BUX0tFUk1JVCkua2VybWl0Lm1lX3N0YXJ0KSB7Cisg ICAgICAgICAgICB0bl9zaWtzKEtFUk1JVF9SRVNQX1NUQVJUKTsKKyAgICAgICAgfSBlbHNlIHsK KyNpZm5kZWYgSUtTRE9OTFkKKyNpZmRlZiBDS19BVVRPREwKKyNpZmRlZiBPUzIKKyAgICAgICAg ICAgIGlmIChsb2NhbCAmJiAoSXNDb25uZWN0TW9kZSgpICYmIGF1dG9kbCkgfHwKKyAgICAgICAg ICAgICAgICAoIUlzQ29ubmVjdE1vZGUoKSAmJiAKKyAgICAgICAgICAgICAgICAgIChpbmF1dG9k bCB8fCBzc3RhdGUgPT0gJ3gnIHx8IHNzdGF0ZSA9PSAndicpKQorICAgICAgICAgICAgICAgICkK KyAgICAgICAgICAgICAgdG5fc2lrcyhLRVJNSVRfUkVTUF9TVEFSVCk7IC8qIFNUQVJUICovCisg ICAgICAgICAgICBlbHNlCisKKyNlbHNlIC8qIE9TMiAqLworICAgICAgICAgICAgaWYgKChsb2Nh bCAmJiB3aGF0ID09IFdfQ09OTkVDVCAmJiBhdXRvZGwpIHx8CisgICAgICAgICAgICAgICAgKGxv Y2FsICYmIHdoYXQgIT0gV19DT05ORUNUICYmCisgICAgICAgICAgICAgICAgICAoaW5hdXRvZGwg fHwgc3N0YXRlID09ICd4JyB8fCBzc3RhdGUgPT0gJ3YnKQorICAgICAgICAgICAgICAgICkpCisg ICAgICAgICAgICAgIHRuX3Npa3MoS0VSTUlUX1JFU1BfU1RBUlQpOyAvKiBTVEFSVCAqLworICAg ICAgICAgICAgZWxzZQorI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIENLX0FVVE9ETCAqLwor I2VuZGlmIC8qIElLU0RPTkxZICovCisgICAgICAgICAgICAgIHRuX3Npa3MoS0VSTUlUX1JFU1Bf U1RPUCk7CisgICAgICAgIH0KKyNlbHNlIC8qIE5PWEZFUiAqLworICAgICAgICAgIHRuX3Npa3Mo S0VSTUlUX1JFU1BfU1RPUCk7CisjZW5kaWYgLyogTk9YRkVSICovCisgICAgICAgIHJldHVybig0 KTsKKworICAgICAgY2FzZSBLRVJNSVRfUkVRX1NUT1A6ICAgICAgICAgICAgIC8qIFJFUS1TVE9Q ICovCisgICAgICAgIC8qIFRoZSBwcm90b2NvbCByZXF1aXJlcyB0aGF0IHRoZSByZXF1ZXN0IGJl IHJlc3BvbmRlZCB0byAqLworICAgICAgICAvKiBlaXRoZXIgYnkgY2hhbmdpbmcgc3RhdGVzIG9y IGJ5IHJlcG9ydGluZyB0aGUgY3VycmVudCAgKi8KKyAgICAgICAgLyogc3RhdGUuICAqLworCisg ICAgICAgIC8qIFdlIG5lZWQgdG8gcHJvdmlkZSB0aGUgdXNlciBzb21lIHdheSBvZiBkaWN0YXRp bmcgd2hhdCAqLworICAgICAgICAvKiB0aGUgcG9saWNpZXMgc2hvdWxkIGJlLiAgRm9yIGluc3Rh bmNlLCBpZiB3ZSBhcmUgaW4gICAgKi8KKyAgICAgICAgLyogQ09OTkVDVCBtb2RlIHdpdGggYXV0 b2Rvd25sb2FkIE9OIGFuZCB3ZSBnZXQgYSBSRVEtU1RPUCovCisgICAgICAgIC8qIHdoYXQgc2hv dWxkIHRoZSBwcm9wZXIgcmVzcG9uc2UgYmU/ICAgICAgICAgICAgICAgICAgICAqLworI2lmbmRl ZiBOT1hGRVIKKyAgICAgICAgaWYgKGluc2VydmVyCisjaWZkZWYgQ0tfQVVUT0RMCisgICAgICAg ICAgICB8fCAhbG9jYWwgJiYgY21kYWRsCisjZW5kaWYgLyogQ0tfQVVUT0RMICovCisgICAgICAg ICAgICApIHsKKyNpZmRlZiBDS19BVVRPREwKKyAgICAgICAgICAgIGNtZGFkbCA9IDA7ICAgICAg ICAgICAgICAgICAvKiBUdXJuIG9mZiBwYWNrZXQgZGV0ZWN0aW9uICovCisjZW5kaWYgLyogQ0tf QVVUT0RMICovCisgICAgICAgICAgICB0bl9zaWtzKEtFUk1JVF9SRVNQX1NUT1ApOworICAgICAg ICB9IGVsc2UgaWYgKHNlcnZlcikgeworICAgICAgICAgICAgZXh0ZXJuIGludCBlbl9maW47Cisg ICAgICAgICAgICBpZiAoZW5fZmluKSB7ICAgICAgICAgICAgICAgLyogSWYgdGhlIHNlcnZlciBp cyBhbGxvd2VkIHRvIHN0b3AgKi8KKyAgICAgICAgICAgICAgICB0bl9zaWtzKEtFUk1JVF9SRVNQ X1NUT1ApOworICAgICAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgIC8qIFdlIGFy ZSBub3QgYWxsb3dlZCB0byBzdG9wICovCisgICAgICAgICAgICAgICAgdG5fc2lrcyhLRVJNSVRf UkVTUF9TVEFSVCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyNpZm5kZWYgSUtTRE9OTFkK KyNpZmRlZiBDS19BVVRPREwKKyNpZmRlZiBPUzIKKyAgICAgICAgZWxzZSBpZiAobG9jYWwgJiYg KElzQ29ubmVjdE1vZGUoKSAmJiBhdXRvZGwpIHx8CisgICAgICAgICAgICAgICAgICAgKCFJc0Nv bm5lY3RNb2RlKCkgJiYgaW5hdXRvZGwpCisgICAgICAgICAgICAgICAgICAgKSB7CisgICAgICAg ICAgICAvKiBJZiB3ZSBhcmUgYSBwc2V1ZG8tc2VydmVyIGFuZCB0aGUgb3RoZXIgc2lkZSByZXF1 ZXN0cyAqLworICAgICAgICAgICAgLyogdGhhdCB3ZSBzdG9wLCB0ZWxsIHRoZW4gdGhhdCB3ZSBo YXZlIGV2ZW4gdGhvdWdoIHdlICAgKi8KKyAgICAgICAgICAgIC8qIGhhdmUgbm90LiAgT3RoZXJ3 aXNlLCB0aGUgb3RoZXIgc2lkZSBtaWdodCByZWZ1c2UgdG8gICovCisgICAgICAgICAgICAvKiBl bnRlciBTRVJWRVIgbW9kZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwor CisgICAgICAgICAgICB0bl9zaWtzKEtFUk1JVF9SRVNQX1NUT1ApOyAgLyogU1RPUCAqLworICAg ICAgICB9CisjZWxzZSAvKiBPUzIgKi8KKyAgICAgICAgZWxzZSBpZiAoKGxvY2FsICYmIHdoYXQg PT0gV19DT05ORUNUICYmIGF1dG9kbCkgfHwKKyAgICAgICAgICAgICAgICAgICAobG9jYWwgJiYg d2hhdCAhPSBXX0NPTk5FQ1QgJiYgaW5hdXRvZGwpCisgICAgICAgICAgICAgICAgICAgKSB7Cisg ICAgICAgICAgICAvKiBJZiB3ZSBhcmUgYSBwc2V1ZG8tc2VydmVyIGFuZCB0aGUgb3RoZXIgc2lk ZSByZXF1ZXN0cyAqLworICAgICAgICAgICAgLyogdGhhdCB3ZSBzdG9wLCB0ZWxsIHRoZW4gdGhh dCB3ZSBoYXZlIGV2ZW4gdGhvdWdoIHdlICAgKi8KKyAgICAgICAgICAgIC8qIGhhdmUgbm90LiAg T3RoZXJ3aXNlLCB0aGUgb3RoZXIgc2lkZSBtaWdodCByZWZ1c2UgdG8gICovCisgICAgICAgICAg ICAvKiBlbnRlciBTRVJWRVIgbW9kZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAqLworCisgICAgICAgICAgICB0bl9zaWtzKEtFUk1JVF9SRVNQX1NUT1ApOyAgLyogU1RPUCAq LworICAgICAgICB9CisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogQ0tfQVVUT0RMICovCisj ZW5kaWYgLyogSUtTRE9OTFkgKi8KKyAgICAgICAgZWxzZQorI2VuZGlmIC8qIE5PWEZFUiAqLwor ICAgICAgICB7CisgICAgICAgICAgICAvKiBJZiB3ZSBhcmUgbm90IGN1cnJlbnRseSBpbiBhbnkg bW9kZSB0aGF0IGFjY2VwdHMgKi8KKyAgICAgICAgICAgIC8qIEtlcm1pdCBwYWNrZXRzIHRoZW4g b2YgY291cnNlIHJlcG9ydCB0aGF0IHdlIGFyZSAqLworICAgICAgICAgICAgLyogbm90IGJlaW5n IGEgS2VybWl0IHNlcnZlci4gICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgICAgICAgICAg IHRuX3Npa3MoS0VSTUlUX1JFU1BfU1RPUCk7ICAvKiBTVE9QICovCisgICAgICAgIH0KKyAgICAg ICAgcmV0dXJuKDQpOworCisgICAgICBjYXNlIEtFUk1JVF9TT1A6IHsgICAgICAgICAgICAgICAg LyogU09QICovCisjaWZuZGVmIE5PWEZFUgorICAgICAgICAgIGV4dGVybiBDSEFSIHN0Y2hyOyAg ICAgICAgICAgIC8qIEluY29taW5nIFNPUCBjaGFyYWN0ZXIgKi8KKyAgICAgICAgICBzdGNociA9 IHNiWzFdOworI2VuZGlmIC8qIE5PWEZFUiAqLworICAgICAgICAgIFRFTE9QVF9TQihURUxPUFRf S0VSTUlUKS5rZXJtaXQuc29wID0gMTsKKyAgICAgICAgICByZXR1cm4oNCk7CisgICAgICB9CisK KyAgICAgIGNhc2UgS0VSTUlUX1JFU1BfU1RBUlQ6ICAgICAgICAgICAvKiBTVEFSVCAqLworICAg ICAgICBURUxPUFRfU0IoVEVMT1BUX0tFUk1JVCkua2VybWl0LnVfc3RhcnQgPSAxOworICAgICAg ICBpZiAoVEVMT1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1pdC5tZV9yZXFfc3RhcnQpIHsKKyAg ICAgICAgICAgIFRFTE9QVF9TQihURUxPUFRfS0VSTUlUKS5rZXJtaXQubWVfcmVxX3N0YXJ0ID0g MDsKKyAgICAgICAgfSBlbHNlIGlmIChURUxPUFRfU0IoVEVMT1BUX0tFUk1JVCkua2VybWl0Lm1l X3JlcV9zdG9wKSB7CisgICAgICAgICAgICAvKiBJZiB3ZSBoYXZlIGlzc3VlZCBhIHJlcXVlc3Qg dG8gc3RvcCBhIEtlcm1pdCBTZXJ2ZXIgKi8KKyAgICAgICAgICAgIC8qIGFuZCB0aGUgcmVzcG9u c2UgaXMgU3RhcnQsIHRoZW4gd2UgbXVzdCByZXBvcnQgdGhpcyAqLworICAgICAgICAgICAgLyog dG8gdGhlIGNhbGxlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisg ICAgICAgICAgICBURUxPUFRfU0IoVEVMT1BUX0tFUk1JVCkua2VybWl0Lm1lX3JlcV9zdG9wID0g MDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4oNCk7CisKKyAgICAgIGNhc2UgS0VSTUlUX1JF U1BfU1RPUDogICAgICAgICAgICAvKiBTVE9QICovCisgICAgICAgIFRFTE9QVF9TQihURUxPUFRf S0VSTUlUKS5rZXJtaXQudV9zdGFydCA9IDA7CisgICAgICAgIGlmIChURUxPUFRfU0IoVEVMT1BU X0tFUk1JVCkua2VybWl0Lm1lX3JlcV9zdGFydCkgeworICAgICAgICAgICAgVEVMT1BUX1NCKFRF TE9QVF9LRVJNSVQpLmtlcm1pdC5tZV9yZXFfc3RhcnQgPSAwOworICAgICAgICAgICAgLyogSWYg d2UgaGF2ZSBpc3N1ZWQgYSByZXF1ZXN0IHRvIHN0YXJ0IGEgS2VybWl0IFNlcnZlciAqLworICAg ICAgICAgICAgLyogYW5kIHRoZSByZXNwb25zZSBpcyBTdG9wLCB0aGVuIHdlIG11c3QgcmVwb3J0 IHRoaXMgICAqLworICAgICAgICAgICAgLyogdG8gdGhlIGNhbGxlci4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICB9IGVsc2UgaWYgKFRFTE9QVF9TQihU RUxPUFRfS0VSTUlUKS5rZXJtaXQubWVfcmVxX3N0b3ApIHsKKyAgICAgICAgICAgIFRFTE9QVF9T QihURUxPUFRfS0VSTUlUKS5rZXJtaXQubWVfcmVxX3N0b3AgPSAwOworICAgICAgICB9CisgICAg ICAgIHJldHVybig0KTsKKworICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuKDApOworCisg ICAgfSAvKiBzd2l0Y2ggKHNiWzBdKSAqLworfQorI2VuZGlmIC8qIElLU19PUFRJT04gKi8KKwor LyogSW5pdGlhbGl6ZSB0ZWxuZXQgc2V0dGluZ3MgLSBzZXQgZGVmYXVsdCB2YWx1ZXMgZm9yIE1F IGFuZCBVIG1vZGVzICovCitpbnQKK3RuX3NldF9tb2RlcygpIHsKKyAgICBpbnQgb3B0LGNtZDsK KyNpZmRlZiBDS19GT1JXQVJEX1gKKyAgICBpbnQgeDsKKyNlbmRpZiAvKiBDS19GT1JXQVJEX1gg Ki8KKyNpZmRlZiBDS19FTlZJUk9OTUVOVAorICAgIHsKKyAgICAgICAgaW50IGksajsKKyAgICAg ICAgZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworICAgICAgICAgICAgdG5fZW52X3VzZXJ2YXJb aV1bMF0gPSBOVUxMOworICAgICAgICAgICAgdG5fZW52X3VzZXJ2YXJbaV1bMV0gPSBOVUxMOwor ICAgICAgICB9CisgICAgfQorI2VuZGlmIC8qIENLX0VOVklST05NRU5UICovCisKKyAgICAvKiBp bml0aWFsaXplIGFsbCBvcHRpb25zIHRvIHJlZnVzZSBpbiBib3RoIGRpcmVjdGlvbnMgKi8KKyAg ICBmb3IgKG9wdCA9IDA7IG9wdCA8IE5URUxPUFRTOyBvcHQrKykgeworICAgICAgICBURUxPUFRf TUUob3B0KSA9IDA7CisgICAgICAgIFRFTE9QVF9VKG9wdCkgID0gMDsKKyAgICAgICAgVEVMT1BU X1VOQU5TV0VSRURfV0lMTChvcHQpID0gMDsKKyAgICAgICAgVEVMT1BUX1VOQU5TV0VSRURfRE8o b3B0KSAgID0gMDsKKyAgICAgICAgVEVMT1BUX1VOQU5TV0VSRURfV09OVChvcHQpID0gMDsKKyAg ICAgICAgVEVMT1BUX1VOQU5TV0VSRURfRE9OVChvcHQpICAgPSAwOworICAgICAgICBURUxPUFRf VU5BTlNXRVJFRF9TQihvcHQpICAgPSAwOworICAgICAgICBURUxPUFRfTUVfTU9ERShvcHQpID0g VE5fTkdfUkY7CisgICAgICAgIFRFTE9QVF9VX01PREUob3B0KSA9IFROX05HX1JGOworICAgICAg ICBURUxPUFRfREVGX1NfTUVfTU9ERShvcHQpID0gVE5fTkdfUkY7CisgICAgICAgIFRFTE9QVF9E RUZfU19VX01PREUob3B0KSA9IFROX05HX1JGOworICAgICAgICBURUxPUFRfREVGX0NfTUVfTU9E RShvcHQpID0gVE5fTkdfUkY7CisgICAgICAgIFRFTE9QVF9ERUZfQ19VX01PREUob3B0KSA9IFRO X05HX1JGOworICAgICAgICBmb3IgKGNtZCA9IDA7IGNtZCA8IDQ7IGNtZCArKykKKyAgICAgICAg ICB0bmNudHNbVEVMT1BUX0lOREVYKG9wdCldW2NtZF0gPSAwOworICAgIH0KKyNpZmRlZiBJS1Nf T1BUSU9OCisgICAgVEVMT1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1pdC5tZV9zdGFydCA9IDA7 CisgICAgVEVMT1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1pdC51X3N0YXJ0ID0gMDsKKyAgICBU RUxPUFRfU0IoVEVMT1BUX0tFUk1JVCkua2VybWl0Lm1lX3JlcV9zdGFydCA9IDA7CisgICAgVEVM T1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1pdC5tZV9yZXFfc3RvcCA9IDA7CisgICAgVEVMT1BU X1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1pdC5zb3AgPSAwOworI2VuZGlmIC8qIElLU19PUFRJT04g Ki8KKworI2lmZGVmIENLX0VOQ1JZUFRJT04KKyAgICBURUxPUFRfU0IoVEVMT1BUX0VOQ1JZUFRJ T04pLmVuY3J5cHQuc3RvcCA9IDA7CisjZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLworCisjaWZk ZWYgIENLX05BV1MKKyAgICBURUxPUFRfU0IoVEVMT1BUX05BV1MpLm5hd3MueCA9IDA7CisgICAg VEVMT1BUX1NCKFRFTE9QVF9OQVdTKS5uYXdzLnkgPSAwOworI2VuZGlmIC8qIENLX05BV1MgKi8K KworI2lmZGVmIENLX1NTTAorICAgIFRFTE9QVF9TQihURUxPUFRfU1RBUlRfVExTKS5zdGFydF90 bHMudV9mb2xsb3dzID0gMDsKKyAgICBURUxPUFRfU0IoVEVMT1BUX1NUQVJUX1RMUykuc3RhcnRf dGxzLm1lX2ZvbGxvd3MgPSAwOworICAgIFRFTE9QVF9TQihURUxPUFRfU1RBUlRfVExTKS5zdGFy dF90bHMuYXV0aF9yZXF1ZXN0ID0gMDsKKyNlbmRpZiAvKiBDS19TU0wgKi8KKworICAgIC8qIE5v dyBzZXQgdGhlIG9uZXMgd2Ugd2FudCB0byBhY2NlcHQgdG8gdGhlIHByb3BlciB2YWx1ZXMgKi8K KyAgICBURUxPUFRfREVGX1NfTUVfTU9ERShURUxPUFRfU0dBKSA9IFROX05HX1JROworICAgIFRF TE9QVF9ERUZfU19VX01PREUoVEVMT1BUX1NHQSkgPSBUTl9OR19SUTsKKyAgICBURUxPUFRfREVG X0NfTUVfTU9ERShURUxPUFRfU0dBKSA9IFROX05HX0FDOworICAgIFRFTE9QVF9ERUZfQ19VX01P REUoVEVMT1BUX1NHQSkgPSBUTl9OR19BQzsKKworICAgIFRFTE9QVF9ERUZfU19NRV9NT0RFKFRF TE9QVF9CSU5BUlkpID0gVE5fTkdfQUM7CisgICAgVEVMT1BUX0RFRl9TX1VfTU9ERShURUxPUFRf QklOQVJZKSA9IFROX05HX0FDOworICAgIFRFTE9QVF9ERUZfQ19NRV9NT0RFKFRFTE9QVF9CSU5B UlkpID0gVE5fTkdfQUM7CisgICAgVEVMT1BUX0RFRl9DX1VfTU9ERShURUxPUFRfQklOQVJZKSA9 IFROX05HX0FDOworCisgICAgVEVMT1BUX0RFRl9TX01FX01PREUoVEVMT1BUX0xPR09VVCkgPSBU Tl9OR19BQzsKKyAgICBURUxPUFRfREVGX1NfVV9NT0RFKFRFTE9QVF9MT0dPVVQpID0gVE5fTkdf QUM7CisgICAgVEVMT1BUX0RFRl9DX01FX01PREUoVEVMT1BUX0xPR09VVCkgPSBUTl9OR19BQzsK KyAgICBURUxPUFRfREVGX0NfVV9NT0RFKFRFTE9QVF9MT0dPVVQpID0gVE5fTkdfQUM7CisKKyNp ZmRlZiBJS1NfT1BUSU9OCisgICAgVEVMT1BUX0RFRl9TX01FX01PREUoVEVMT1BUX0tFUk1JVCkg PSBUTl9OR19SUTsKKyAgICBURUxPUFRfREVGX1NfVV9NT0RFKFRFTE9QVF9LRVJNSVQpID0gVE5f TkdfUlE7CisgICAgVEVMT1BUX0RFRl9DX01FX01PREUoVEVMT1BUX0tFUk1JVCkgPSBUTl9OR19S UTsKKyAgICBURUxPUFRfREVGX0NfVV9NT0RFKFRFTE9QVF9LRVJNSVQpID0gVE5fTkdfUlE7Cisj ZW5kaWYgLyogSUtTX09QVElPTiAqLworCisjaWZkZWYgQ0tfRU5DUllQVElPTgorICAgIFRFTE9Q VF9ERUZfU19VX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pID0gVE5fTkdfUlE7CisgICAgVEVMT1BU X0RFRl9TX01FX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pID0gVE5fTkdfUlE7CisgICAgVEVMT1BU X0RFRl9DX1VfTU9ERShURUxPUFRfRU5DUllQVElPTikgPSBUTl9OR19SUTsKKyAgICBURUxPUFRf REVGX0NfTUVfTU9ERShURUxPUFRfRU5DUllQVElPTikgPSBUTl9OR19SUTsKKyNlbmRpZiAvKiBD S19FTkNSWVBUSU9OICovCisKKyAgICBURUxPUFRfREVGX1NfTUVfTU9ERShURUxPUFRfRUNITykg PSBUTl9OR19SUTsKKyNpZmRlZiBJS1NECisgICAgaWYgKCAhaW5zZXJ2ZXIgKQorI2VuZGlmIC8q IElLU0QgKi8KKyAgICAgIFRFTE9QVF9ERUZfU19VX01PREUoVEVMT1BUX1RUWVBFKSA9IFROX05H X1JROworCisjaWZkZWYgQ0tfRU5WSVJPTk1FTlQKKyAgICBURUxPUFRfREVGX1NfVV9NT0RFKFRF TE9QVF9ORVdFTlZJUk9OKSA9IFROX05HX1JROworI2VuZGlmIC8qIENLX0VOVklST05NRU5UICov CisKKyNpZmRlZiBDS19BVVRIRU5USUNBVElPTgorICAgIFRFTE9QVF9ERUZfU19VX01PREUoVEVM T1BUX0FVVEhFTlRJQ0FUSU9OKSA9IFROX05HX1JROworI2VuZGlmIC8qIENLX0FVVEhFTlRJQ0FU SU9OICovCisKKyNpZmRlZiBDS19TU0wKKyAgICBpZiAoY2tfc3NsZWF5X2lzX2luc3RhbGxlZCgp KSB7CisgICAgICAgIFRFTE9QVF9ERUZfU19VX01PREUoVEVMT1BUX1NUQVJUX1RMUykgPSBUTl9O R19SUTsKKyAgICAgICAgVEVMT1BUX0RFRl9DX01FX01PREUoVEVMT1BUX1NUQVJUX1RMUykgPSBU Tl9OR19BQzsKKyAgICB9CisjZW5kaWYgLyogQ0tfU1NMICovCisKKyNpZmRlZiBDS19OQVdTCisg ICAgVEVMT1BUX0RFRl9TX1VfTU9ERShURUxPUFRfTkFXUykgPSBUTl9OR19SUTsKKyNlbmRpZiAv KiBDS19OQVdTICovCisKKyAgICBURUxPUFRfREVGX0NfVV9NT0RFKFRFTE9QVF9FQ0hPKSA9IFRO X05HX0FDOworICAgIFRFTE9QVF9ERUZfQ19NRV9NT0RFKFRFTE9QVF9UVFlQRSkgPSBUTl9OR19S UTsKKworI2lmZGVmIENLX0VOVklST05NRU5UCisgICAgVEVMT1BUX0RFRl9DX01FX01PREUoVEVM T1BUX05FV0VOVklST04pID0gVE5fTkdfUlE7CisjZW5kaWYgLyogQ0tfRU5WSVJPTk1FTlQgKi8K KworI2lmZGVmIENLX0FVVEhFTlRJQ0FUSU9OCisgICAgVEVMT1BUX0RFRl9DX01FX01PREUoVEVM T1BUX0FVVEhFTlRJQ0FUSU9OKSA9IFROX05HX1JROworI2VuZGlmIC8qIENLX0FVVEhFTlRJQ0FU SU9OICovCisKKyNpZmRlZiBDS19OQVdTCisgICAgVEVMT1BUX0RFRl9DX01FX01PREUoVEVMT1BU X05BV1MpID0gVE5fTkdfUlE7CisjZW5kaWYgLyogQ0tfTkFXUyAqLworCisjaWZkZWYgQ0tfU05E TE9DCisgICAgVEVMT1BUX0RFRl9DX01FX01PREUoVEVMT1BUX1NORExPQykgPSBUTl9OR19SUTsK KyNlbmRpZiAvKiBDS19TTkRMT0MgKi8KKworI2lmZGVmIENLX0ZPUldBUkRfWAorICAgIFRFTE9Q VF9ERUZfQ19VX01PREUoVEVMT1BUX0ZPUldBUkRfWCkgPSBUTl9OR19BQzsKKyAgICBURUxPUFRf U0IoVEVMT1BUX0ZPUldBUkRfWCkuZm9yd2FyZF94Lmxpc3Rlbl9zb2NrZXQgPSAtMTsKKyAgICBm b3IgKHggPSAwOyB4IDwgTUFYRldEWDsgeCsrKSB7CisgICAgICAgVEVMT1BUX1NCKFRFTE9QVF9G T1JXQVJEX1gpLmZvcndhcmRfeC5jaGFubmVsW3hdLmZkID0gLTE7CisgICAgICAgVEVMT1BUX1NC KFRFTE9QVF9GT1JXQVJEX1gpLmZvcndhcmRfeC5jaGFubmVsW3hdLmlkID0gLTE7CisgICAgICAg VEVMT1BUX1NCKFRFTE9QVF9GT1JXQVJEX1gpLmZvcndhcmRfeC5jaGFubmVsW3hdLm5lZWRfdG9f c2VuZF94YXV0aCA9IDA7CisgICAgICAgVEVMT1BUX1NCKFRFTE9QVF9GT1JXQVJEX1gpLmZvcndh cmRfeC5jaGFubmVsW3hdLnN1c3BlbmQgPSAwOworICAgIH0KKyNlbmRpZiAvKiBDS19GT1JXQVJE X1ggKi8KKworI2lmZGVmIFROX0NPTVBPUlQKKyAgICBURUxPUFRfREVGX0NfTUVfTU9ERShURUxP UFRfQ09NUE9SVCkgPSBUTl9OR19SUTsKKyNlbmRpZiAvKiBUTl9DT01QT1JUICovCisKKyAgICAv KiBTZXQgdGhlIGluaXRpYWwgdmFsdWVzIGZvciBjdXJyZW50bHkga25vd24gbW9kZSAqLworICAg IGZvciAob3B0ID0gVEVMT1BUX0ZJUlNUOyBvcHQgPD0gVEVMT1BUX0xBU1Q7IG9wdCsrKSB7Cisg ICAgICAgIGlmIChURUxPUFRfT0sob3B0KSkgeworICAgICAgICAgICAgVEVMT1BUX01FX01PREUo b3B0KSA9IHNzdGVsbmV0ID8KKyAgICAgICAgICAgICAgVEVMT1BUX0RFRl9TX01FX01PREUob3B0 KSA6CisgICAgICAgICAgICAgICAgVEVMT1BUX0RFRl9DX01FX01PREUob3B0KTsKKyAgICAgICAg ICAgIFRFTE9QVF9VX01PREUob3B0KSA9IHNzdGVsbmV0ID8KKyAgICAgICAgICAgICAgVEVMT1BU X0RFRl9TX1VfTU9ERShvcHQpIDoKKyAgICAgICAgICAgICAgICBURUxPUFRfREVGX0NfVV9NT0RF KG9wdCk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuKDEpOworfQorCisKKy8qIFNlbmQg RGVsYXllZCBTdWJuZWdvdGlhdGlvbnMgKi8KKworVk9JRAordG5fc2RzYigpIHsKKyAgICAvKiBp ZiAoIUlTX1RFTE5FVCgpKSByZXR1cm47ICovCisKKyAgICBpZiAoVEVMT1BUX1NCKFRFTE9QVF9U VFlQRSkudGVybS5uZWVkX3RvX3NlbmQpIHsKKyAgICAgICAgdG5fc3R0eXAoKTsKKyAgICAgICAg VEVMT1BUX1NCKFRFTE9QVF9UVFlQRSkudGVybS5uZWVkX3RvX3NlbmQgPSAwOworICAgIH0KKyNp ZmRlZiBDS19FTlZJUk9OTUVOVAorICAgIGlmIChURUxPUFRfU0IoVEVMT1BUX05FV0VOVklST04p LmVudi5uZWVkX3RvX3NlbmQgJiYKKyAgICAgICAgVEVMT1BUX1NCKFRFTE9QVF9ORVdFTlZJUk9O KS5lbnYuc3RyKSB7CisgICAgICAgIHRuX3NuZW52KChDSEFSICopVEVMT1BUX1NCKFRFTE9QVF9O RVdFTlZJUk9OKS5lbnYuc3RyLAorICAgICAgICAgICAgICAgICBURUxPUFRfU0IoVEVMT1BUX05F V0VOVklST04pLmVudi5sZW4pOworICAgICAgICBmcmVlKFRFTE9QVF9TQihURUxPUFRfTkVXRU5W SVJPTikuZW52LnN0cik7CisgICAgICAgIFRFTE9QVF9TQihURUxPUFRfTkVXRU5WSVJPTikuZW52 LnN0cj1OVUxMOworICAgICAgICBURUxPUFRfU0IoVEVMT1BUX05FV0VOVklST04pLmVudi5sZW49 MDsKKyAgICAgICAgVEVMT1BUX1NCKFRFTE9QVF9ORVdFTlZJUk9OKS5lbnYubmVlZF90b19zZW5k ID0gMDsKKyAgICB9CisjaWZkZWYgQ0tfWERJU1BMT0MKKyAgICBpZiAoVEVMT1BUX1NCKFRFTE9Q VF9YRElTUExPQykueGRpc3AubmVlZF90b19zZW5kKSB7CisgICAgICAgIHRuX3N4ZGlzcGxvYygp OworICAgICAgICBURUxPUFRfU0IoVEVMT1BUX1hESVNQTE9DKS54ZGlzcC5uZWVkX3RvX3NlbmQg PSAwOworICAgIH0KKyNlbmRpZiAvKiBDS19YRElTUExPQyAqLworI2VuZGlmIC8qIENLX0VOVklS T05NRU5UICovCisjaWZkZWYgQ0tfTkFXUworICAgIGlmIChURUxPUFRfU0IoVEVMT1BUX05BV1Mp Lm5hd3MubmVlZF90b19zZW5kKSB7CisgICAgICAgIHRuX3NuYXdzKCk7CisgICAgICAgIFRFTE9Q VF9TQihURUxPUFRfTkFXUykubmF3cy5uZWVkX3RvX3NlbmQgPSAwOworICAgIH0KKyNlbmRpZiAv KiBDS19OQVdTICovCisjaWZkZWYgQ0tfU05ETE9DCisgICAgaWYgKFRFTE9QVF9TQihURUxPUFRf U05ETE9DKS5zbmRsb2MubmVlZF90b19zZW5kKSB7CisgICAgICAgIHRuX3NuZGxvYygpOworICAg ICAgICBURUxPUFRfU0IoVEVMT1BUX1NORExPQykuc25kbG9jLm5lZWRfdG9fc2VuZCA9IDA7Cisg ICAgfQorI2VuZGlmIC8qIENLX1NORExPQyAqLworI2lmZGVmIENLX0ZPUldBUkRfWAorICAgIGlm IChURUxPUFRfU0IoVEVMT1BUX0ZPUldBUkRfWCkuZm9yd2FyZF94Lm5lZWRfdG9fc2VuZCkgewor ICAgICAgICBpZiAoIHNzdGVsbmV0ICkKKyAgICAgICAgICAgIGZ3ZHhfc2VuZF9vcHRpb25zKCk7 CisgICAgICAgIFRFTE9QVF9TQihURUxPUFRfRk9SV0FSRF9YKS5mb3J3YXJkX3gubmVlZF90b19z ZW5kID0gMDsKKyAgICB9CisjZW5kaWYgLyogQ0tfRk9SV0FSRF9YICovCisjaWZkZWYgVE5fQ09N UE9SVAorICAgIGlmIChURUxPUFRfU0IoVEVMT1BUX0NPTVBPUlQpLmNvbXBvcnQubmVlZF90b19z ZW5kKSB7CisgICAgICAgIHRuX3NuZGNvbXBvcnQoKTsKKyAgICAgICAgVEVMT1BUX1NCKFRFTE9Q VF9DT01QT1JUKS5jb21wb3J0Lm5lZWRfdG9fc2VuZCA9IDA7CisgICAgfQorI2VuZGlmIC8qIFRO X0NPTVBPUlQgKi8KKworfQorCitpbnQKK3RuX3Jlc2V0KCkgeworICAgIGludCB4LG9wdCxjbWQ7 CisKKyAgICAvKiBpZiAoIUlTX1RFTE5FVCgpKSByZXR1cm4oMSk7ICovCisKKyAgICB0bl93YWl0 X2lkeCA9IDA7ICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciB0aGUgdG5fcHVzaCgpIGJ1ZmZl ciAqLworICAgIHRuX3dhaXRfdG1vID0gVE5fVElNRU9VVDsgICAgICAgICAgIC8qIFJlc2V0IHdh aXQgdGltZXIgc3RhdHMgKi8KKworICAgIG5mbGFnID0gMDsKKworICAgIC8qIFJlc2V0IHRoZSBU RUxORVQgT1BUSU9OUyBjb3VudHMgKi8KKyAgICBmb3IgKG9wdCA9IFRFTE9QVF9GSVJTVDsgb3B0 IDw9IFRFTE9QVF9MQVNUOyBvcHQrKykgeworICAgICAgICBpZiAoVEVMT1BUX09LKG9wdCkpIHsK KyAgICAgICAgICAgIFRFTE9QVF9NRShvcHQpID0gMDsKKyAgICAgICAgICAgIFRFTE9QVF9VKG9w dCkgID0gMDsKKyAgICAgICAgICAgIFRFTE9QVF9VTkFOU1dFUkVEX1dJTEwob3B0KSA9IDA7Cisg ICAgICAgICAgICBURUxPUFRfVU5BTlNXRVJFRF9ETyhvcHQpICAgPSAwOworICAgICAgICAgICAg VEVMT1BUX1VOQU5TV0VSRURfV09OVChvcHQpID0gMDsKKyAgICAgICAgICAgIFRFTE9QVF9VTkFO U1dFUkVEX0RPTlQob3B0KSAgID0gMDsKKyAgICAgICAgICAgIFRFTE9QVF9VTkFOU1dFUkVEX1NC KG9wdCkgICA9IDA7CisgICAgICAgICAgICBURUxPUFRfTUVfTU9ERShvcHQpID0gc3N0ZWxuZXQg PworICAgICAgICAgICAgICBURUxPUFRfREVGX1NfTUVfTU9ERShvcHQpIDoKKyAgICAgICAgICAg ICAgICBURUxPUFRfREVGX0NfTUVfTU9ERShvcHQpOworICAgICAgICAgICAgVEVMT1BUX1VfTU9E RShvcHQpID0gc3N0ZWxuZXQgPworICAgICAgICAgICAgICBURUxPUFRfREVGX1NfVV9NT0RFKG9w dCkgOgorICAgICAgICAgICAgICAgIFRFTE9QVF9ERUZfQ19VX01PREUob3B0KTsKKworI2lmZGVm IERFQlVHCisgICAgICAgICAgICBpZiAoZGVibG9nKSB7CisgICAgICAgICAgICAgICAgc3dpdGNo IChURUxPUFRfTUVfTU9ERShvcHQpKSB7CisgICAgICAgICAgICAgICAgICBjYXNlIFROX05HX1JG OgorICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJ0bl9pbmkgTUUgUkVGVVNFICIsVEVM T1BUKG9wdCksMCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg ICAgY2FzZSBUTl9OR19BQzoKKyAgICAgICAgICAgICAgICAgICAgZGVidWcoRjExMCwidG5faW5p IE1FIEFDQ0VQVCAiLFRFTE9QVChvcHQpLDApOworICAgICAgICAgICAgICAgICAgICBicmVhazsK KyAgICAgICAgICAgICAgICAgIGNhc2UgVE5fTkdfUlE6CisgICAgICAgICAgICAgICAgICAgIGRl YnVnKEYxMTAsInRuX2luaSBNRSBSRVFVRVNUIixURUxPUFQob3B0KSwwKTsKKyAgICAgICAgICAg ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIFROX05HX01VOgorICAgICAg ICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJ0bl9pbmkgTUUgUkVRVUlSRSIsVEVMT1BUKG9wdCks MCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgICBzd2l0Y2ggKFRFTE9QVF9VX01PREUob3B0KSkgeworICAgICAgICAgICAgICAg ICAgY2FzZSBUTl9OR19SRjoKKyAgICAgICAgICAgICAgICAgICAgZGVidWcoRjExMCwidG5faW5p IFUgIFJFRlVTRSAiLFRFTE9QVChvcHQpLDApOworICAgICAgICAgICAgICAgICAgICBicmVhazsK KyAgICAgICAgICAgICAgICAgIGNhc2UgVE5fTkdfQUM6CisgICAgICAgICAgICAgICAgICAgIGRl YnVnKEYxMTAsInRuX2luaSBVICBBQ0NFUFQgIixURUxPUFQob3B0KSwwKTsKKyAgICAgICAgICAg ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIFROX05HX1JROgorICAgICAg ICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJ0bl9pbmkgVSAgUkVRVUVTVCIsVEVMT1BUKG9wdCks MCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSBU Tl9OR19NVToKKyAgICAgICAgICAgICAgICAgICAgZGVidWcoRjExMCwidG5faW5pIFUgIFJFUVVJ UkUiLFRFTE9QVChvcHQpLDApOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICB9CisjZW5kaWYgLyogREVCVUcgKi8KKyAgICAgICAgICAg IGZvciAoY21kID0gMDsgY21kIDwgNDsgY21kICsrKQorICAgICAgICAgICAgICB0bmNudHNbVEVM T1BUX0lOREVYKG9wdCldW2NtZF0gPSAwOworICAgICAgICB9CisgICAgfQorI2lmZGVmIENLX0VO VklST05NRU5UCisgICAgaWYgKCF0bl9lbnZfZmxnKSB7CisgICAgICAgIFRFTE9QVF9NRV9NT0RF KFRFTE9QVF9ORVdFTlZJUk9OKSA9IFROX05HX1JGOworICAgICAgICBURUxPUFRfVV9NT0RFKFRF TE9QVF9ORVdFTlZJUk9OKSA9IFROX05HX1JGOworICAgIH0KKyNlbmRpZiAvKiBDS19FTlZJUk9O TUVOVCAqLworI2lmZGVmIENLX1NORExPQworICAgIGlmICghdG5fbG9jKQorICAgICAgICBURUxP UFRfREVGX0NfTUVfTU9ERShURUxPUFRfU05ETE9DKSA9IFROX05HX1JGOworI2VuZGlmIC8qIENL X1NORExPQyAqLworI2lmZGVmIElLU19PUFRJT04KKyAgICBURUxPUFRfU0IoVEVMT1BUX0tFUk1J VCkua2VybWl0Lm1lX3N0YXJ0ID0gMDsKKyAgICBURUxPUFRfU0IoVEVMT1BUX0tFUk1JVCkua2Vy bWl0LnVfc3RhcnQgPSAwOworICAgIFRFTE9QVF9TQihURUxPUFRfS0VSTUlUKS5rZXJtaXQubWVf cmVxX3N0YXJ0ID0gMDsKKyAgICBURUxPUFRfU0IoVEVMT1BUX0tFUk1JVCkua2VybWl0Lm1lX3Jl cV9zdG9wID0gMDsKKyAgICBURUxPUFRfU0IoVEVMT1BUX0tFUk1JVCkua2VybWl0LnNvcCA9IDA7 CisjZW5kaWYgLyogSUtTX09QVElPTiAqLworI2lmZGVmIENLX0VOQ1JZUFRJT04KKyAgICBURUxP UFRfU0IoVEVMT1BUX0VOQ1JZUFRJT04pLmVuY3J5cHQuc3RvcCA9IDA7CisgICAgVEVMT1BUX1NC KFRFTE9QVF9FTkNSWVBUSU9OKS5lbmNyeXB0Lm5lZWRfdG9fc2VuZCA9IDA7CisjZW5kaWYgLyog Q0tfRU5DUllQVElPTiAqLworI2lmZGVmICBDS19OQVdTCisgICAgVEVMT1BUX1NCKFRFTE9QVF9O QVdTKS5uYXdzLm5lZWRfdG9fc2VuZCA9IDA7CisgICAgVEVMT1BUX1NCKFRFTE9QVF9OQVdTKS5u YXdzLnggPSAwOworICAgIFRFTE9QVF9TQihURUxPUFRfTkFXUykubmF3cy55ID0gMDsKKyNlbmRp ZiAvKiBDS19OQVdTICovCisgICAgVEVMT1BUX1NCKFRFTE9QVF9UVFlQRSkudGVybS5uZWVkX3Rv X3NlbmQgPSAwOworICAgIFRFTE9QVF9TQihURUxPUFRfVFRZUEUpLnRlcm0udHlwZVswXSA9ICdc MCc7CisjaWZkZWYgQ0tfRU5WSVJPTk1FTlQKKyAgICBURUxPUFRfU0IoVEVMT1BUX05FV0VOVklS T04pLmVudi5uZWVkX3RvX3NlbmQgPSAwOworICAgIGlmICh0bl9maXJzdCkKKyAgICAgICAgVEVM T1BUX1NCKFRFTE9QVF9ORVdFTlZJUk9OKS5lbnYuc3RyPU5VTEw7CisgICAgZWxzZSBpZiAoVEVM T1BUX1NCKFRFTE9QVF9ORVdFTlZJUk9OKS5lbnYuc3RyKSB7CisgICAgICAgIGZyZWUoVEVMT1BU X1NCKFRFTE9QVF9ORVdFTlZJUk9OKS5lbnYuc3RyKTsKKyAgICAgICAgVEVMT1BUX1NCKFRFTE9Q VF9ORVdFTlZJUk9OKS5lbnYuc3RyPU5VTEw7CisgICAgfQorICAgIFRFTE9QVF9TQihURUxPUFRf TkVXRU5WSVJPTikuZW52Lmxlbj0wOworI2lmZGVmIENLX1hESVNQTE9DCisgICAgVEVMT1BUX1NC KFRFTE9QVF9YRElTUExPQykueGRpc3AubmVlZF90b19zZW5kID0gMDsKKyNlbmRpZiAvKiBDS19Y RElTUExPQyAqLworI2VuZGlmIC8qIENLX0VOVklST05NRU5UICovCisjaWZkZWYgQ0tfU05ETE9D CisgICAgVEVMT1BUX1NCKFRFTE9QVF9TTkRMT0MpLnNuZGxvYy5uZWVkX3RvX3NlbmQgPSAwOwor I2VuZGlmIC8qIENLX1NORExPQyAqLworI2lmZGVmIENLX0ZPUldBUkRfWAorICAgIFRFTE9QVF9T QihURUxPUFRfRk9SV0FSRF9YKS5mb3J3YXJkX3gubmVlZF90b19zZW5kID0gMDsKKyAgICBURUxP UFRfU0IoVEVMT1BUX0ZPUldBUkRfWCkuZm9yd2FyZF94Lmxpc3Rlbl9zb2NrZXQgPSAtMTsKKyAg ICBmb3IgKHggPSAwOyB4IDwgTUFYRldEWDsgeCsrKSB7CisgICAgICAgVEVMT1BUX1NCKFRFTE9Q VF9GT1JXQVJEX1gpLmZvcndhcmRfeC5jaGFubmVsW3hdLmZkID0gLTE7CisgICAgICAgVEVMT1BU X1NCKFRFTE9QVF9GT1JXQVJEX1gpLmZvcndhcmRfeC5jaGFubmVsW3hdLmlkID0gLTE7CisgICAg ICAgVEVMT1BUX1NCKFRFTE9QVF9GT1JXQVJEX1gpLmZvcndhcmRfeC5jaGFubmVsW3hdLm5lZWRf dG9fc2VuZF94YXV0aCA9IDA7CisgICAgICAgVEVMT1BUX1NCKFRFTE9QVF9GT1JXQVJEX1gpLmZv cndhcmRfeC5jaGFubmVsW3hdLnN1c3BlbmQgPSAwOworICAgIH0KKyAgICAvKiBSZXNldCBYYXV0 aCBkYXRhICovCisgICAgaWYgKCByZWFsX3hhdXRoICkgeworICAgICAgICBYYXVEaXNwb3NlQXV0 aChyZWFsX3hhdXRoKTsKKyAgICAgICAgcmVhbF94YXV0aCA9IE5VTEw7CisgICAgfQorICAgIGlm ICggZmFrZV94YXV0aC5uYW1lICkKKyAgICAgICAgZnJlZShmYWtlX3hhdXRoLm5hbWUpOworICAg IGlmICggZmFrZV94YXV0aC5kYXRhICkKKyAgICAgICAgZnJlZShmYWtlX3hhdXRoLmRhdGEpOwor ICAgIGlmICggZmFrZV94YXV0aC5hZGRyZXNzICkKKyAgICAgICAgZnJlZShmYWtlX3hhdXRoLmFk ZHJlc3MpOworICAgIGlmICggZmFrZV94YXV0aC5udW1iZXIgKQorICAgICAgICBmcmVlKGZha2Vf eGF1dGgubnVtYmVyKTsKKyAgICBtZW1zZXQoJmZha2VfeGF1dGgsMCxzaXplb2YoZmFrZV94YXV0 aCkpOworI2lmZGVmIE5UCisgICAgVEVMT1BUX1NCKFRFTE9QVF9GT1JXQVJEX1gpLmZvcndhcmRf eC50aHJlYWRfc3RhcnRlZCA9IDA7CisjZW5kaWYgLyogTlQgKi8KKyNlbmRpZiAvKiBDS19GT1JX QVJEX1ggKi8KKyNpZmRlZiBDS19TU0wKKyAgICBpZiAodGxzX29ubHlfZmxhZyB8fCBzc2xfb25s eV9mbGFnKSB7CisgICAgICAgIFRFTE9QVF9NRV9NT0RFKFRFTE9QVF9TVEFSVF9UTFMpID0gVE5f TkdfUkY7CisgICAgICAgIFRFTE9QVF9VX01PREUoVEVMT1BUX1NUQVJUX1RMUykgPSBUTl9OR19S RjsKKyAgICB9CisgICAgVEVMT1BUX1NCKFRFTE9QVF9TVEFSVF9UTFMpLnN0YXJ0X3Rscy51X2Zv bGxvd3MgPSAwOworICAgIFRFTE9QVF9TQihURUxPUFRfU1RBUlRfVExTKS5zdGFydF90bHMubWVf Zm9sbG93cyA9IDA7CisgICAgVEVMT1BUX1NCKFRFTE9QVF9TVEFSVF9UTFMpLnN0YXJ0X3Rscy5h dXRoX3JlcXVlc3QgPSAwOworI2VuZGlmIC8qIENLX1NTTCAqLworCisjaWZkZWYgQ0tfRU5DUllQ VElPTgorICAgIGlmICghY2tfY3J5cHRfaXNfaW5zdGFsbGVkKCkKKyNpZmRlZiBDS19TU0wKKyAg ICAgICAgfHwgdGxzX29ubHlfZmxhZyB8fCBzc2xfb25seV9mbGFnCisjZW5kaWYgLyogQ0tfU1NM ICovCisgICAgICAgICkgeworICAgICAgICBURUxPUFRfTUVfTU9ERShURUxPUFRfRU5DUllQVElP TikgPSBUTl9OR19SRjsKKyAgICAgICAgVEVMT1BUX1VfTU9ERShURUxPUFRfRU5DUllQVElPTikg PSBUTl9OR19SRjsKKyAgICB9CisjZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLworCisjaWZkZWYg VE5fQ09NUE9SVAorICAgIFRFTE9QVF9TQihURUxPUFRfQ09NUE9SVCkuY29tcG9ydC5uZWVkX3Rv X3NlbmQgPSAwOworICAgIFRFTE9QVF9TQihURUxPUFRfQ09NUE9SVCkuY29tcG9ydC53YWl0X2Zv cl9zYiA9IDA7CisgICAgVEVMT1BUX1NCKFRFTE9QVF9DT01QT1JUKS5jb21wb3J0LndhaXRfZm9y X21zID0gMDsKKyAgICB0bmNfaW5pdCgpOworI2VuZGlmIC8qIFROX0NPTVBPUlQgKi8KKworICAg IHRuX2ZpcnN0ID0gMDsgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vIGxvbmdlciB0aGUgZmly c3QgdGltZSBpbml0ICovCisKKyNpZmRlZiBPUzIKKyAgICB0dG51bSA9IC0xOyAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBSZXNldCBUZXJtVHlwZSBuZWdvdGlhdGlvbiAqLworICAgIHR0bnVt ZW5kID0gMDsKKyNlbmRpZiAvKiBPUzIgKi8KKworICAgIHJldHVybigwKTsKK30KKworaW50Cit0 bl9zdGFydCgpIHsKKyAgICBpbnQgd2FpdCwgeCwgb3B0OworCisgICAgLyogaWYgKCFJU19URUxO RVQoKSkgcmV0dXJuKDApOyAqLworCisgICAgaWYgKHRuX2luaXQgJiYgdG5fYmVndW4pCisgICAg ICAgIHJldHVybigwKTsKKyAgICB0bl9iZWd1biA9IDE7CisKKyAgICBkZWJ1ZyhGMTExLCJ0bl9z dGFydCIsInNzdGVsbmV0Iixzc3RlbG5ldCk7CisgICAgd2FpdCA9IDA7CisgICAgaWYgKHRuX2R1 cGxleCkgIHsKKyAgICAgICAgb2xkcGxleCA9IGR1cGxleDsgICAgICAgICAgICAgICAvKiBzYXZl IG9sZCBkdXBsZXggdmFsdWUgKi8KKyAgICAgICAgZHVwbGV4ID0gMTsgICAgICAgICAgICAgICAg ICAgICAvKiBhbmQgc2V0IHRvIGhhbGYgZHVwbGV4IGZvciB0ZWxuZXQgKi8KKyAgICB9CisjaWZk ZWYgQ0tfU1NMCisgICAgaWYgKCFURUxPUFRfTUUoVEVMT1BUX1NUQVJUX1RMUykgJiYKKyAgICAg ICAgVEVMT1BUX01FX01PREUoVEVMT1BUX1NUQVJUX1RMUykgPj0gVE5fTkdfUlEpIHsKKyAgICAg ICAgaWYgKHRuX3NvcHQoV0lMTCwgVEVMT1BUX1NUQVJUX1RMUykgPCAwKQorICAgICAgICAgIHJl dHVybigtMSk7CisgICAgICAgIFRFTE9QVF9VTkFOU1dFUkVEX1dJTEwoVEVMT1BUX1NUQVJUX1RM UykgPSAxOworICAgICAgICB3YWl0ID0gMTsKKyAgICB9CisgICAgaWYgKCFURUxPUFRfVShURUxP UFRfU1RBUlRfVExTKSAmJgorICAgICAgICBURUxPUFRfVV9NT0RFKFRFTE9QVF9TVEFSVF9UTFMp ID49IFROX05HX1JRKSB7CisgICAgICAgIGlmICh0bl9zb3B0KERPLCBURUxPUFRfU1RBUlRfVExT KSA8IDApCisgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgVEVMT1BUX1VOQU5TV0VSRURf RE8oVEVMT1BUX1NUQVJUX1RMUykgPSAxOworICAgICAgICB3YWl0ID0gMTsKKyAgICB9CisjZW5k aWYgLyogQ0tfU1NMICovCisKKyNpZmRlZiBDS19BVVRIRU5USUNBVElPTgorICAgIGRlYnVnKEYx MTAsInRuX2luaSgpIENLX0FVVEhFTlRJQ0FUSU9OIiwiIiwwKTsKKyAgICBpZiAodG5faW5pdCkg ICAgICAgICAgICAgICAgLyogdG5faW5pKCkgbWlnaHQgYmUgY2FsbGVkIHJlY3Vyc2l2ZWx5ICov CisgICAgICByZXR1cm4oMCk7CisgICAgaWYgKCFURUxPUFRfTUUoVEVMT1BUX0FVVEhFTlRJQ0FU SU9OKSAmJgorICAgICAgICBURUxPUFRfTUVfTU9ERShURUxPUFRfQVVUSEVOVElDQVRJT04pID49 IFROX05HX1JRKSB7CisgICAgICAgIGlmICh0bl9zb3B0KFdJTEwsIFRFTE9QVF9BVVRIRU5USUNB VElPTikgPCAwKQorICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAgIFRFTE9QVF9VTkFOU1dF UkVEX1dJTEwoVEVMT1BUX0FVVEhFTlRJQ0FUSU9OKSA9IDE7CisgICAgICAgIHdhaXQgPSAxOwor ICAgIH0KKyAgICBpZiAoIVRFTE9QVF9VKFRFTE9QVF9BVVRIRU5USUNBVElPTikgJiYKKyAgICAg ICAgVEVMT1BUX1VfTU9ERShURUxPUFRfQVVUSEVOVElDQVRJT04pID49IFROX05HX1JRKSB7Cisg ICAgICAgIGlmICh0bl9zb3B0KERPLCBURUxPUFRfQVVUSEVOVElDQVRJT04pIDwgMCkKKyAgICAg ICAgICByZXR1cm4oLTEpOworICAgICAgICBURUxPUFRfVU5BTlNXRVJFRF9ETyhURUxPUFRfQVVU SEVOVElDQVRJT04pID0gMTsKKyAgICAgICAgd2FpdCA9IDE7CisgICAgfQorI2lmZGVmIENLX0VO Q1JZUFRJT04KKyAgICBpZiAoVEVMT1BUX1VfTU9ERShURUxPUFRfQVVUSEVOVElDQVRJT04pID09 IFROX05HX1JGICYmCisgICAgICAgICBURUxPUFRfTUVfTU9ERShURUxPUFRfQVVUSEVOVElDQVRJ T04pID09IFROX05HX1JGKSB7CisgICAgICAgIFRFTE9QVF9NRV9NT0RFKFRFTE9QVF9FTkNSWVBU SU9OKSA9IFROX05HX1JGOworICAgICAgICBURUxPUFRfVV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9O KSA9IFROX05HX1JGOworICAgIH0KKyNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCisjZW5kaWYg LyogQ0tfQVVUSEVOVElDQVRJT04gKi8KKworI2lmZGVmIENLX05BV1MKKyNpZm5kZWYgTk9MT0NB TAorICAgIGRlYnVnKEYxMTAsInRuX2luaSgpIENLX05BV1MgIU5PTE9DQUwiLCIiLDApOworICAg IGlmICghc3N0ZWxuZXQpIHsKKyAgICAgICAgLyogQ29uc29sZSB0ZXJtaW5hbCBzY3JlZW4gcm93 cyBhbmQgY29sdW1ucyAqLworI2lmZGVmIE9TMgorICAgICAgICBkZWJ1ZyhGMTAxLAorICAgICAg ICAgICAgICAidG5faW5pIHR0X3Jvd3MgMSIsCisgICAgICAgICAgICAgICIiLAorICAgICAgICAg ICAgICBWc2NybkdldEhlaWdodChWVEVSTSktKHR0X3N0YXR1c1tWVEVSTV0/MTowKQorICAgICAg ICAgICAgICApOworICAgICAgICBkZWJ1ZyhGMTAxLCJ0bl9pbmkgdHRfY29scyAxIiwiIixWc2Ny bkdldFdpZHRoKFZURVJNKSk7CisgICAgICAgIC8qIE5vdCBrbm93biB5ZXQgKi8KKyAgICAgICAg aWYgKFZzY3JuR2V0V2lkdGgoVlRFUk0pIDwgMCB8fAorICAgICAgICAgICAgVnNjcm5HZXRIZWln aHQoVlRFUk0pLSh0dF9zdGF0dXNbVlRFUk1dPzE6MCkgPCAwKSB7CisgICAgICAgICAgICB0dGd3 c2l6KCk7ICAgICAgICAgICAgICAgICAgLyogVHJ5IHRvIGZpbmQgb3V0ICovCisgICAgICAgIH0K KyAgICAgICAgZGVidWcoRjEwMSwKKyAgICAgICAgICAgICAgInRuX2luaSB0dF9yb3dzIDIiLAor ICAgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgICAgVnNjcm5HZXRIZWlnaHQoVlRFUk0pLSh0 dF9zdGF0dXNbVlRFUk1dPzE6MCkKKyAgICAgICAgICAgICAgKTsKKyAgICAgICAgZGVidWcoRjEw MSwidG5faW5pIHR0X2NvbHMgMiIsIiIsVnNjcm5HZXRXaWR0aChWVEVSTSkpOworICAgICAgICAv KiBOb3cgZG8gd2Uga25vdz8gKi8KKyAgICAgICAgaWYgKFZzY3JuR2V0V2lkdGgoVlRFUk0pID4g MCAmJgorICAgICAgICAgICAgVnNjcm5HZXRIZWlnaHQoVlRFUk0pLSh0dF9zdGF0dXNbVlRFUk1d PzE6MCkgPiAwKSB7CisgICAgICAgICAgICBpZiAoIVRFTE9QVF9NRShURUxPUFRfTkFXUykgJiYK KyAgICAgICAgICAgICAgICBURUxPUFRfTUVfTU9ERShURUxPUFRfTkFXUykgPj0gVE5fTkdfUlEp IHsKKyAgICAgICAgICAgICAgICBpZiAodG5fc29wdChXSUxMLCBURUxPUFRfTkFXUykgPCAwKQor ICAgICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgICAgICAgICBURUxPUFRfVU5B TlNXRVJFRF9XSUxMKFRFTE9QVF9OQVdTKSA9IDE7CisgICAgICAgICAgICAgICAgd2FpdCA9IDE7 CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyNlbHNlIC8qIE9TMiAqLworICAgICAgICBkZWJ1 ZyhGMTAxLCJ0bl9pbmkgdHRfcm93cyAxIiwiIix0dF9yb3dzKTsKKyAgICAgICAgZGVidWcoRjEw MSwidG5faW5pIHR0X2NvbHMgMSIsIiIsdHRfY29scyk7CisgICAgICAgIGlmICh0dF9yb3dzIDwg MCB8fCB0dF9jb2xzIDwgMCkgeyAvKiBOb3Qga25vd24geWV0ICovCisgICAgICAgICAgICB0dGd3 c2l6KCk7ICAgICAgICAgICAgICAgICAgLyogVHJ5IHRvIGZpbmQgb3V0ICovCisgICAgICAgIH0K KyAgICAgICAgZGVidWcoRjEwMSwidG5faW5pIHR0X3Jvd3MgMiIsIiIsdHRfcm93cyk7CisgICAg ICAgIGRlYnVnKEYxMDEsInRuX2luaSB0dF9jb2xzIDIiLCIiLHR0X2NvbHMpOworICAgICAgICBp ZiAodHRfcm93cyA+IDAgJiYgdHRfY29scyA+IDApIHsgLyogTm93IGRvIHdlIGtub3c/ICovCisg ICAgICAgICAgICBpZiAoIVRFTE9QVF9NRShURUxPUFRfTkFXUykgJiYKKyAgICAgICAgICAgICAg ICBURUxPUFRfTUVfTU9ERShURUxPUFRfTkFXUykgPj0gVE5fTkdfUlEpIHsKKyAgICAgICAgICAg ICAgICBpZiAodG5fc29wdChXSUxMLCBURUxPUFRfTkFXUykgPCAwKQorICAgICAgICAgICAgICAg ICAgcmV0dXJuKC0xKTsKKyAgICAgICAgICAgICAgICBURUxPUFRfVU5BTlNXRVJFRF9XSUxMKFRF TE9QVF9OQVdTKSA9IDE7CisgICAgICAgICAgICAgICAgd2FpdCA9IDE7CisgICAgICAgICAgICB9 CisgICAgICAgIH0KKyNlbmRpZiAvKiBPUzIgKi8KKyAgICB9IGVsc2UKKyNlbmRpZiAvKiBOT0xP Q0FMICovCisgICAgeworICAgICAgICBpZiAoIVRFTE9QVF9VKFRFTE9QVF9OQVdTKSAmJgorICAg ICAgICAgICAgVEVMT1BUX1VfTU9ERShURUxPUFRfTkFXUykgPj0gVE5fTkdfUlEpIHsKKyAgICAg ICAgICAgIGlmICh0bl9zb3B0KERPLCBURUxPUFRfTkFXUykgPCAwKQorICAgICAgICAgICAgICBy ZXR1cm4oLTEpOworICAgICAgICAgICAgVEVMT1BUX1VOQU5TV0VSRURfRE8oVEVMT1BUX05BV1Mp ID0gMTsKKyAgICAgICAgICAgIHdhaXQgPSAxOworICAgICAgICB9CisgICAgfQorI2VuZGlmIC8q IENLX05BV1MgKi8KKworICAgIGlmICghVEVMT1BUX01FKFRFTE9QVF9TR0EpICYmCisgICAgICAg IFRFTE9QVF9NRV9NT0RFKFRFTE9QVF9TR0EpID49IFROX05HX1JRKSB7CisgICAgICAgIGlmICh0 bl9zb3B0KFdJTEwsIFRFTE9QVF9TR0EpIDwgMCkKKyAgICAgICAgICByZXR1cm4oLTEpOworICAg ICAgICBURUxPUFRfVU5BTlNXRVJFRF9XSUxMKFRFTE9QVF9TR0EpID0gMTsKKyAgICAgICAgd2Fp dCA9IDE7CisgICAgfQorICAgIGlmICghVEVMT1BUX1UoVEVMT1BUX1NHQSkgJiYKKyAgICAgICAg VEVMT1BUX1VfTU9ERShURUxPUFRfU0dBKSA+PSBUTl9OR19SUSkgeworICAgICAgICBpZiAodG5f c29wdChETywgVEVMT1BUX1NHQSkgPCAwKQorICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAg IFRFTE9QVF9VTkFOU1dFUkVEX0RPKFRFTE9QVF9TR0EpID0gMTsKKyAgICAgICAgd2FpdCA9IDE7 CisgICAgfQorICAgIGlmICghdG5fZHVwbGV4KSB7CisgICAgICAgIGlmICghVEVMT1BUX1UoVEVM T1BUX0VDSE8pICYmCisgICAgICAgICAgICBURUxPUFRfVV9NT0RFKFRFTE9QVF9FQ0hPKSA+PSBU Tl9OR19SUSkgeworICAgICAgICAgICAgaWYgKHRuX3NvcHQoRE8sIFRFTE9QVF9FQ0hPKSA8IDAp CisgICAgICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAgICAgICBURUxPUFRfVU5BTlNXRVJF RF9ETyhURUxPUFRfRUNITykgPSAxOworICAgICAgICAgICAgd2FpdCA9IDE7CisgICAgICAgIH0K KyAgICB9CisgICAgaWYgKCFURUxPUFRfTUUoVEVMT1BUX0VDSE8pICYmCisgICAgICAgIFRFTE9Q VF9NRV9NT0RFKFRFTE9QVF9FQ0hPKSA+PSBUTl9OR19SUSkgeworICAgICAgICBpZiAodG5fc29w dChXSUxMLCBURUxPUFRfRUNITykgPCAwKQorICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAg IFRFTE9QVF9VTkFOU1dFUkVEX1dJTEwoVEVMT1BUX0VDSE8pID0gMTsKKyAgICAgICAgd2FpdCA9 IDE7CisgICAgfQorCisgICAgZGVidWcoRjEwMCwidG5faW5pIGFib3V0IHRvIHNlbmQgV0lMTCBU VFlQRSBpZiByZXF1ZXN0ZWQiLCIiLDApOworLyoKKyAgVGFsa2luZyB0byBURUxORVQgcG9ydCwg c28gc2VuZCBXSUxMIFRFUk1JTkFMIFRZUEUgYW5kIERPIFNHQS4KKyAgQWxzbyBzZW5kIFdJTEwg TkFXUyBpZiB3ZSBrbm93IG91ciBzY3JlZW4gZGltZW5zaW9ucy4KKyovCisgICAgaWYgKCFURUxP UFRfTUUoVEVMT1BUX1RUWVBFKSAmJgorICAgICAgICBURUxPUFRfTUVfTU9ERShURUxPUFRfVFRZ UEUpID49IFROX05HX1JRKSB7CisgICAgICAgIGlmICgoeCA9IHRuX3NvcHQoV0lMTCxURUxPUFRf VFRZUEUpKSA8IDApIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMDEsInRuX2luaSB0bl9zb3B0IFdJ TEwgVFRZUEUgZmFpbGVkIiwiIix4KTsKKyAgICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAg IH0KKyAgICAgICAgVEVMT1BUX1VOQU5TV0VSRURfV0lMTChURUxPUFRfVFRZUEUpID0gMTsKKyAg ICAgICAgd2FpdCA9IDE7CisgICAgICAgIGRlYnVnKEYxMDAsInRuX2luaSBzZW50IFdJTEwgVFRZ UEUgb2siLCIiLDApOworICAgIH0KKyAgICBpZiAoIVRFTE9QVF9VKFRFTE9QVF9UVFlQRSkgJiYK KyAgICAgICAgVEVMT1BUX1VfTU9ERShURUxPUFRfVFRZUEUpID49IFROX05HX1JRKSB7CisgICAg ICAgIGlmICgoeCA9IHRuX3NvcHQoRE8sVEVMT1BUX1RUWVBFKSkgPCAwKSB7CisgICAgICAgICAg ICBkZWJ1ZyhGMTAxLCJ0bl9pbmkgdG5fc29wdCBETyBUVFlQRSBmYWlsZWQiLCIiLHgpOworICAg ICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgfQorICAgICAgICBURUxPUFRfVU5BTlNXRVJF RF9ETyhURUxPUFRfVFRZUEUpID0gMTsKKyAgICAgICAgd2FpdCA9IDE7CisgICAgICAgIGRlYnVn KEYxMDAsInRuX2luaSBzZW50IERPIFRUWVBFIG9rIiwiIiwwKTsKKyAgICB9CisgICAgaWYgKCFU RUxPUFRfTUUoVEVMT1BUX0JJTkFSWSkgJiYKKyAgICAgICAgVEVMT1BUX01FX01PREUoVEVMT1BU X0JJTkFSWSkgPj0gVE5fTkdfUlEpIHsKKyAgICAgICAgaWYgKHRuX3NvcHQoV0lMTCwgVEVMT1BU X0JJTkFSWSkgPCAwKQorICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAgIFRFTE9QVF9VTkFO U1dFUkVEX1dJTEwoVEVMT1BUX0JJTkFSWSkgPSAxOworICAgICAgICB3YWl0ID0gMTsKKyAgICB9 CisgICAgaWYgKCFURUxPUFRfVShURUxPUFRfQklOQVJZKSAmJgorICAgICAgICBURUxPUFRfVV9N T0RFKFRFTE9QVF9CSU5BUlkpID49IFROX05HX1JRKSB7CisgICAgICAgIGlmICh0bl9zb3B0KERP LCBURUxPUFRfQklOQVJZKSA8IDApCisgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgVEVM T1BUX1VOQU5TV0VSRURfRE8oVEVMT1BUX0JJTkFSWSkgPSAxOworICAgICAgICB3YWl0ID0gMTsK KyAgICB9CisjaWZkZWYgQ0tfU05ETE9DCisgICAgaWYgKHRuX2xvYykgeworICAgICAgICBpZiAo IVRFTE9QVF9NRShURUxPUFRfU05ETE9DKSAmJgorICAgICAgICAgICAgVEVMT1BUX01FX01PREUo VEVMT1BUX1NORExPQykgPj0gVE5fTkdfUlEpIHsKKyAgICAgICAgICAgIGlmICh0bl9zb3B0KFdJ TEwsIFRFTE9QVF9TTkRMT0MpIDwgMCkKKyAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAg ICAgICAgIFRFTE9QVF9VTkFOU1dFUkVEX1dJTEwoVEVMT1BUX1NORExPQykgPSAxOworICAgICAg ICAgICAgd2FpdCA9IDE7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgLyogQ0tfU05ETE9DICov CisjaWZkZWYgQ0tfRU5WSVJPTk1FTlQKKyNpZmRlZiBDS19GT1JXQVJEX1gKKyAgICBpZiAoIVRF TE9QVF9VKFRFTE9QVF9GT1JXQVJEX1gpICYmCisgICAgICAgICBURUxPUFRfVV9NT0RFKFRFTE9Q VF9GT1JXQVJEX1gpID49IFROX05HX1JRKSB7CisgICAgICAgIGlmICh0bl9zb3B0KFdJTEwsIFRF TE9QVF9GT1JXQVJEX1gpIDwgMCkKKyAgICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAgIFRF TE9QVF9VTkFOU1dFUkVEX1dJTEwoVEVMT1BUX0ZPUldBUkRfWCkgPSAxOworICAgICAgICB3YWl0 ID0gMTsKKyAgICB9CisjZW5kaWYgLyogRk9SV0FSRF9YICovCisjaWZkZWYgQ0tfWERJU1BMT0MK KyAgICBpZiAoIVRFTE9QVF9NRShURUxPUFRfWERJU1BMT0MpICYmCisgICAgICAgICBURUxPUFRf TUVfTU9ERShURUxPUFRfWERJU1BMT0MpID49IFROX05HX1JRKSB7CisgICAgICAgIGlmICh0bl9z b3B0KFdJTEwsIFRFTE9QVF9YRElTUExPQykgPCAwKQorICAgICAgICAgICAgcmV0dXJuKC0xKTsK KyAgICAgICAgVEVMT1BUX1VOQU5TV0VSRURfV0lMTChURUxPUFRfWERJU1BMT0MpID0gMTsKKyAg ICAgICAgd2FpdCA9IDE7CisgICAgfQorI2VuZGlmIC8qIENLX1hESVNQTE9DICovCisgICAgLyog V2lsbCBzZW5kIHRlcm1pbmFsIGVudmlyb25tZW50LiAqLworICAgIGlmICghVEVMT1BUX01FKFRF TE9QVF9ORVdFTlZJUk9OKSAmJgorICAgICAgICBURUxPUFRfTUVfTU9ERShURUxPUFRfTkVXRU5W SVJPTikgPj0gVE5fTkdfUlEpIHsKKyAgICAgICAgaWYgKHRuX3NvcHQoV0lMTCwgVEVMT1BUX05F V0VOVklST04pIDwgMCkKKyAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICBURUxPUFRfVU5B TlNXRVJFRF9XSUxMKFRFTE9QVF9ORVdFTlZJUk9OKSA9IDE7CisgICAgICAgIHdhaXQgPSAxOwor ICAgIH0KKyAgICBpZiAoIVRFTE9QVF9VKFRFTE9QVF9ORVdFTlZJUk9OKSAmJgorICAgICAgICBU RUxPUFRfVV9NT0RFKFRFTE9QVF9ORVdFTlZJUk9OKSA+PSBUTl9OR19SUSkgeworICAgICAgICBp ZiAodG5fc29wdChETywgVEVMT1BUX05FV0VOVklST04pIDwgMCkKKyAgICAgICAgICByZXR1cm4o LTEpOworICAgICAgICBURUxPUFRfVU5BTlNXRVJFRF9ETyhURUxPUFRfTkVXRU5WSVJPTikgPSAx OworICAgICAgICB3YWl0ID0gMTsKKyAgICB9CisjZW5kaWYgLyogQ0tfRU5WSVJPTk1FTlQgKi8K KworICAgIC8qIFRha2UgY2FyZSBvZiBhbnkgb3RoZXIgdGVsbmV0IG9wdGlvbnMgdGhhdCByZXF1 aXJlIGhhbmRsaW5nLiAqLworCisgICAgZm9yIChvcHQgPSBURUxPUFRfRklSU1Q7IG9wdCA8PSBU RUxPUFRfTEFTVDsgb3B0KyspIHsKKyAgICAgICAgc3dpdGNoIChvcHQpIHsKKyAgICAgICAgICBj YXNlIFRFTE9QVF9BVVRIRU5USUNBVElPTjoKKyAgICAgICAgICBjYXNlIFRFTE9QVF9FTkNSWVBU SU9OOgorICAgICAgICAgIGNhc2UgVEVMT1BUX1RUWVBFOgorICAgICAgICAgIGNhc2UgVEVMT1BU X05BV1M6CisgICAgICAgICAgY2FzZSBURUxPUFRfQklOQVJZOgorICAgICAgICAgIGNhc2UgVEVM T1BUX05FV0VOVklST046CisgICAgICAgICAgY2FzZSBURUxPUFRfU05ETE9DOgorICAgICAgICAg IGNhc2UgVEVMT1BUX1hESVNQTE9DOgorICAgICAgICAgIGNhc2UgVEVMT1BUX1NHQToKKyAgICAg ICAgICBjYXNlIFRFTE9QVF9FQ0hPOgorICAgICAgICAgIGNhc2UgVEVMT1BUX0tFUk1JVDoKKyAg ICAgICAgICBjYXNlIFRFTE9QVF9TVEFSVF9UTFM6CisgICAgICAgICAgY2FzZSBURUxPUFRfRk9S V0FSRF9YOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGlmIChURUxPUFRfT0sob3B0KSkgeworICAgICAg ICAgICAgICAgIGlmICghVEVMT1BUX01FKG9wdCkgJiYKKyAgICAgICAgICAgICAgICAgICAgVEVM T1BUX01FX01PREUob3B0KSA+PSBUTl9OR19SUSkgeworICAgICAgICAgICAgICAgICAgICBpZiAo dG5fc29wdChXSUxMLCBvcHQpIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTEp OworICAgICAgICAgICAgICAgICAgICBURUxPUFRfVU5BTlNXRVJFRF9XSUxMKG9wdCkgPSAxOwor ICAgICAgICAgICAgICAgICAgICB3YWl0ID0gMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgICAgaWYgKCFURUxPUFRfVShvcHQpICYmCisgICAgICAgICAgICAgICAgICAgIFRFTE9Q VF9VX01PREUob3B0KSA+PSBUTl9OR19SUSkgeworICAgICAgICAgICAgICAgICAgICBpZiAodG5f c29wdChETywgb3B0KSA8IDApCisgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAg ICAgICAgICAgICAgICAgICAgVEVMT1BUX1VOQU5TV0VSRURfRE8ob3B0KSA9IDE7CisgICAgICAg ICAgICAgICAgICAgIHdhaXQgPSAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K KyAgICAgICAgfQorICAgIH0KKyAgICBpZiAod2FpdCkgeworICAgICAgICBpZiAodG5fd2FpdCgi cHJlLWVuY3J5cHQiKSA8IDApIHsKKyAgICAgICAgICAgIHRuX3B1c2goKTsKKyAgICAgICAgICAg IHJldHVybigtMSk7CisgICAgICAgIH0KKyAgICAgICAgd2FpdCA9IDA7CisgICAgfQorCisjaWZk ZWYgQ0tfRU5DUllQVElPTgorICAgIGlmICh0bl9pbml0KSAgICAgICAgICAgICAgICAvKiB0bl9p bmkoKSBtYXkgYmUgY2FsbGVkIHJlY3Vyc2l2ZWx5ICovCisgICAgICByZXR1cm4oMCk7CisKKyAg ICBpZiAoIVRFTE9QVF9NRShURUxPUFRfRU5DUllQVElPTikgJiYKKyAgICAgICAgVEVMT1BUX01F X01PREUoVEVMT1BUX0VOQ1JZUFRJT04pID49IFROX05HX1JRKSB7CisgICAgICAgIGlmICh0bl9z b3B0KFdJTEwsIFRFTE9QVF9FTkNSWVBUSU9OKSA8IDApCisgICAgICAgICAgcmV0dXJuKC0xKTsK KyAgICAgICAgVEVMT1BUX1VOQU5TV0VSRURfV0lMTChURUxPUFRfRU5DUllQVElPTikgPSAxOwor ICAgICAgICB3YWl0ID0gMTsKKyAgICB9CisgICAgaWYgKCFURUxPUFRfVShURUxPUFRfRU5DUllQ VElPTikgJiYKKyAgICAgICAgVEVMT1BUX1VfTU9ERShURUxPUFRfRU5DUllQVElPTikgPj0gVE5f TkdfUlEpIHsKKyAgICAgICAgaWYgKHRuX3NvcHQoRE8sIFRFTE9QVF9FTkNSWVBUSU9OKSA8IDAp CisgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgVEVMT1BUX1VOQU5TV0VSRURfRE8oVEVM T1BUX0VOQ1JZUFRJT04pID0gMTsKKyAgICAgICAgd2FpdCA9IDE7CisgICAgfQorCisgICAgLyog SWYgd2UgYXJlIGdvaW5nIHRvIGVuY3J5cHQsIHdlIHdhbnQgdG8gZG8gaXQgYmVmb3JlIHdlIHNl bmQgYW55IG1vcmUgKi8KKyAgICAvKiBkYXRhLCBlc3BlY2lhbGx5IHRoZSB0ZXJtaW5hbCB0eXBl IGFuZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMuICAgICAgICAqLworICAgIGlmICh3YWl0KSB7Cisg ICAgICAgIGlmICh0bl93YWl0KCJwb3N0LWVuY3J5cHQiKSA8IDApIHsKKyAgICAgICAgICAgIHRu X3B1c2goKTsKKyAgICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAgIH0KKyAgICAgICAgd2Fp dCA9IDA7CisgICAgfQorI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KKworICAgIHRuX3Nkc2Io KTsKKworICAgIGlmICh0bl9pbml0KSAgICAgICAgICAgICAgICAgICAvKiB0bl9pbmkoKSBtYXkg YmUgY2FsbGVkIHJlY3Vyc2l2ZWx5ICovCisgICAgICAgIHJldHVybigwKTsKKworI2lmZGVmIElL U19PUFRJT04KKyAgICAvKiBLZXJtaXQgU2VydmVyIG5lZ290aWF0aW9uIG11c3QgZ28gbGFzdCAq LworICAgIC8qIFNlbmQgVSBiZWZvcmUgTUUgKi8KKworICAgIGlmICghVEVMT1BUX1UoVEVMT1BU X0tFUk1JVCkgJiYKKyAgICAgICAgVEVMT1BUX1VfTU9ERShURUxPUFRfS0VSTUlUKSA+PSBUTl9O R19SUSkgeworICAgICAgICBpZiAodG5fc29wdChETywgVEVMT1BUX0tFUk1JVCkgPCAwKQorICAg ICAgICAgIHJldHVybigtMSk7CisgICAgICAgIFRFTE9QVF9VTkFOU1dFUkVEX0RPKFRFTE9QVF9L RVJNSVQpID0gMTsKKyAgICAgICAgd2FpdCA9IDE7CisgICAgfQorICAgIGlmICghVEVMT1BUX01F KFRFTE9QVF9LRVJNSVQpICYmCisgICAgICAgIFRFTE9QVF9NRV9NT0RFKFRFTE9QVF9LRVJNSVQp ID49IFROX05HX1JRKSB7CisgICAgICAgIGlmICh0bl9zb3B0KFdJTEwsIFRFTE9QVF9LRVJNSVQp IDwgMCkKKyAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICBURUxPUFRfVU5BTlNXRVJFRF9X SUxMKFRFTE9QVF9LRVJNSVQpID0gMTsKKyAgICAgICAgd2FpdCA9IDE7CisgICAgfQorI2VuZGlm IC8qIElLU19PUFRJT04gKi8KKworICAgIGlmICh3YWl0KSB7CisgICAgICAgIGlmICh0bl93YWl0 KCJlbmQgb2YgdGVsbmV0IG5lZ290aWF0aW9ucyIpIDwgMCkgeworICAgICAgICAgICAgdG5fcHVz aCgpOworICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgfQorICAgICAgICB3YWl0ID0g MDsKKyAgICB9CisKKyAgICB0bl9zZHNiKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBT ZW5kIGRlbGF5ZWQgc3VibmVnb3RpYXRpb25zICovCisgICAgdG5fcHVzaCgpOworICAgIHJldHVy bigwKTsKK30KKworLyogU3RhcnQgYSB0ZWxuZXQgY29ubmVjdGlvbi4gKi8KKy8qIFJldHVybnMg LTEgb24gZXJyb3IsIDAgaWYgbm90aGluZyBoYXBwZW5zLCAxIGlmIGluaXQgbXNncyBzZW50IG9r ICovCisKK2ludAordG5faW5pKCkgeworICAgIGludCB4OworCisgICAgZGVidWcoRjEwMSwidG5f aW5pIHR0bnByb3RvIiwiIix0dG5wcm90byk7CisgICAgZGVidWcoRjEwMSwidG5faW5pIHRuX2lu aXQiLCIiLHRuX2luaXQpOworCisgICAgaWYgKHR0bmV0ICE9IE5FVF9UQ1BCKSAgICAgICAgICAg ICAgLyogTWFrZSBzdXJlIGNvbm5lY3Rpb24gaXMgVENQL0lQICovCisgICAgICByZXR1cm4oMCk7 CisvKgorICAgIGlmICghSVNfVEVMTkVUKCkpCisgICAgICByZXR1cm4oMCk7CisqLworICAgIGlm ICh0bl9pbml0KSAgICAgICAgICAgICAgICAgICAgICAgIC8qIEhhdmUgd2UgZG9uZSB0aGlzIGFs cmVhZHk/ICovCisgICAgICByZXR1cm4oMCk7ICAgICAgICAgICAgICAgICAgICAgICAgLyogRG9u J3QgZG8gaXQgYWdhaW4uICovCisKKyAgICB0bl9yZXNldCgpOyAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBSZXNldCB0ZWxuZXQgcGFyYW1ldGVycyAqLworICAgIHRuX2JlZ3VuID0gMDsgICAg ICAgICAgICAgICAgICAgICAgIC8qIFJlc2V0OyB3aWxsIGJlIHNldCBieSB0bl9zdGFydCgpICov CisKKyAgICBzd2l0Y2ggKCB0dG5wcm90byApIHsKKyAgICAgIGNhc2UgTlBfUkxPR0lOOgorICAg ICAgY2FzZSBOUF9LNExPR0lOOgorICAgICAgY2FzZSBOUF9FSzRMT0dJTjoKKyAgICAgIGNhc2Ug TlBfSzVMT0dJTjoKKyAgICAgIGNhc2UgTlBfRUs1TE9HSU46CisgICAgICBjYXNlIE5QX0s1VTJV OgorICAgICAgICB0bl9pbml0ID0gMTsKKyAgICAgICAgZGVidWcoRjEwMCwidG5faW5pIHRlbG5l dCBuZWdvdGlhdGlvbnMgaWdub3JlZCIsInRuX2luaXQiLHRuX2luaXQpOworICAgICAgICByZXR1 cm4oMCk7CisjaWZkZWYgQ09NTUVOVAorICAgICAgLyogSmVmZidzIGNvZGUgZnJvbSAzMCBEZWMg MjAwNSAtIGRvZXNuJ3Qgd29yayB3aXRoIFNTTCBQT1Agc2VydmVyICovCisgICAgICBjYXNlIE5Q X05PTkU6CisgICAgICBjYXNlIE5QX1NTTDoKKyAgICAgIGNhc2UgTlBfVExTOgorICAgICAgICB0 dG5wcm90byA9IE5QX1RFTE5FVDsgICAgICAgICAgIC8qIHByZXRlbmQgaXQncyB0ZWxuZXQgYW55 d2F5LCAqLworICAgICAgICBvbGRwbGV4ID0gZHVwbGV4OyAgICAgICAgICAgICAgIC8qIHNhdmUg b2xkIGR1cGxleCB2YWx1ZSAqLworICAgICAgICBkdXBsZXggPSAxOyAgICAgICAgICAgICAgICAg ICAgIC8qIGFuZCBzZXQgdG8gaGFsZiBkdXBsZXggZm9yIHRlbG5ldCAqLworICAgICAgICBpZiAo aW5zZXJ2ZXIpCisgICAgICAgICAgZGVidWcoRjEwMCwidG5faW5pIHNraXBwaW5nIHRlbG5ldCBu ZWdvdGlhdGlvbnMiLCIiLDApOworCWVsc2UKKwkgIHRuX3dhaXQoInRuX2luaSAtIHdhaXRpbmcg dG8gc2VlIGlmIHRlbG5ldCBuZWdvdGlhdGlvbnMgd2VyZSBzZW50Iik7CisJdG5fcHVzaCgpOwor ICAgICAgICByZXR1cm4oMCk7CisgICAgICBjYXNlIE5QX1NTTF9SQVc6CisgICAgICBjYXNlIE5Q X1RMU19SQVc6CisgICAgICBjYXNlIE5QX1RDUFJBVzogICAgICAgICAgICAgICAgICAgLyogUmF3 IHNvY2tldCByZXF1ZXN0ZWQuICovCisgICAgICAgIGRlYnVnKEYxMDAsInRuX2luaSB0ZWxuZXQg bmVnb3RpYXRpb25zIGlnbm9yZWQiLCJ0bl9pbml0Iix0bl9pbml0KTsKKyAgICAgICAgcmV0dXJu KDApOworI2Vsc2UKKyAgICAgIC8qIE15IGNvZGUgZnJvbSA0IERlYyAyMDA1IC0gd29ya3Mgd2l0 aCBTU0wgUE9QIHNlcnZlciAqLworICAgICAgY2FzZSBOUF9OT05FOgorICAgICAgY2FzZSBOUF9T U0w6CisgICAgICBjYXNlIE5QX1RMUzogICAgICAgICAgICAgICAgICAgICAgLyogSWYgbm90IHRh bGtpbmcgdG8gYSB0ZWxuZXQgcG9ydCwgKi8KKyAgICAgIGNhc2UgTlBfU1NMX1JBVzoJCQkvKiBT U0wgYW5kIFRMUyB3aXRoIFRlbG5ldCAqLworICAgICAgY2FzZSBOUF9UTFNfUkFXOgkJCS8qIG5l Z290aWF0aW9ucyBkaXNhYmxlZC4gKi8KKyAgICAgICAgdHRucHJvdG8gPSBOUF9URUxORVQ7ICAg ICAgICAgICAvKiBwcmV0ZW5kIGl0J3MgdGVsbmV0IGFueXdheSwgKi8KKyAgICAgICAgb2xkcGxl eCA9IGR1cGxleDsgICAgICAgICAgICAgICAvKiBzYXZlIG9sZCBkdXBsZXggdmFsdWUgKi8KKyAg ICAgICAgZHVwbGV4ID0gMTsgICAgICAgICAgICAgICAgICAgICAvKiBhbmQgc2V0IHRvIGhhbGYg ZHVwbGV4IGZvciB0ZWxuZXQgKi8KKyAgICAgICAgaWYgKGluc2VydmVyKQorICAgICAgICAgIGRl YnVnKEYxMDAsInRuX2luaSBza2lwcGluZyB0ZWxuZXQgbmVnb3RpYXRpb25zIiwiIiwwKTsKKwll bHNlCisJICB0bl93YWl0KCJ0bl9pbmkgLSB3YWl0aW5nIHRvIHNlZSBpZiB0ZWxuZXQgbmVnb3Rp YXRpb25zIHdlcmUgc2VudCIpOworCXRuX3B1c2goKTsKKyAgICAgICAgcmV0dXJuKDApOworICAg ICAgY2FzZSBOUF9UQ1BSQVc6ICAgICAgICAgICAgICAgICAgIC8qIFJhdyBzb2NrZXQgcmVxdWVz dGVkLiAqLworICAgICAgICBkZWJ1ZyhGMTAwLCJ0bl9pbmkgdGVsbmV0IG5lZ290aWF0aW9ucyBp Z25vcmVkIiwidG5faW5pdCIsdG5faW5pdCk7CisgICAgICAgIHJldHVybigwKTsKKyNlbmRpZgkv KiBDT01NRU5UICovCisgICAgICBjYXNlIE5QX0tFUk1JVDogICAgICAgICAgICAgICAgICAgLyog c3dpdGNoaW5nIHRvIFRlbG5ldCBwcm90b2NvbCAqLworICAgICAgY2FzZSBOUF9TU0xfVEVMTkVU OgorICAgICAgY2FzZSBOUF9UTFNfVEVMTkVUOgorICAgICAgICBkZWJ1ZyhGMTAxLCJ0bl9pbmkg c3dpdGNoaW5nIGZyb20gWFhYIHRvIFRlbG5ldCIsIiIsdHRucHJvdG8pOworICAgICAgICB0dG5w cm90byA9IE5QX1RFTE5FVDsKKyAgICAgICAgLyogZmFsbCB0aHJvdWdoICovCisgICAgICBkZWZh dWx0OgorICAgICAgICAvKiBXZSBhcmUgYWxyZWFkeSB1c2luZyBhIHZhcmlhdGlvbiBvbiBUZWxu ZXQgcHJvdG9jb2wgKi8KKyAgICAgICAgOworICAgIH0KKworICAgIHggPSB0bl9zdGFydCgpOwor ICAgIHRuX2luaXQgPSAxOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlbWVtYmVyIHN1Y2Nl c3NmdWwgY29tcGxldGlvbi4gKi8KKworICAgIC8qIERvbid0IHNlbmQgYW55dGhpbmcgZWxzZSEg Ki8KKyAgICBkZWJ1ZyhGMTAxLCJ0bl9pbmkgZHVwbGV4IiwiIixkdXBsZXgpOworICAgIGRlYnVn KEYxMDEsInRuX2luaSBkb25lLCB0bl9pbml0IiwiIix0bl9pbml0KTsKKyAgICByZXR1cm4oeCk7 Cit9CisKK2ludAorI2lmZGVmIENLX0FOU0lDCit0bl9oZXgoQ0hBUiAqIGJ1ZiwgaW50IGJ1Zmxl biwgQ0hBUiAqIGRhdGEsIGludCBkYXRhbGVuKQorI2Vsc2UgLyogQ0tfQU5TSUMgKi8KK3RuX2hl eChidWYsIGJ1ZmxlbiwgZGF0YSwgZGF0YWxlbikKKyAgICBDSEFSICogYnVmOworICAgIGludCBi dWZsZW47CisgICAgQ0hBUiAqIGRhdGE7CisgICAgaW50IGRhdGFsZW47CisjZW5kaWYgLyogQ0tf QU5TSUMgKi8KK3sKKyAgICBpbnQgaSA9IDAsIGogPSAwLCBrID0gMDsKKyAgICBDSEFSIHRtcFsx Nl07CQkvKiBpbiBjYXNlIHZhbHVlIGlzIHRyZWF0ZWQgYXMgbmVnYXRpdmUgKi8KKyNpZmRlZiBD T01NRU5UCisgICAgaW50IHdhc19oZXggPSAxOworCisgICAgZm9yIChrPTA7IGsgPCBkYXRhbGVu OyBrKyspIHsKKyAgICAgICAgaWYgKGRhdGFba10gPCAzMiB8fCBkYXRhW2tdID49IDEyNykgewor ICAgICAgICAgICAgc3ByaW50Zih0bXAsIiVzJTAyWCAiLHdhc19oZXg/IiI6IlwiICIsZGF0YVtr XSk7CisgICAgICAgICAgICB3YXNfaGV4ID0gMTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg ICAgIHNwcmludGYodG1wLCIlcyVjIix3YXNfaGV4PyJcIiI6IiIsZGF0YVtrXSk7CisgICAgICAg ICAgICB3YXNfaGV4ID0gMDsKKyAgICAgICAgfQorICAgICAgICBja3N0cm5jYXQoKGNoYXIgKili dWYsdG1wLGJ1Zmxlbik7CisgICAgfQorICAgIGlmICghd2FzX2hleCkKKyAgICAgICAgY2tzdHJu Y2F0KChjaGFyICopYnVmLCJcIiAiLGJ1Zmxlbik7CisjZWxzZSAvKiBDT01NRU5UICovCisgICAg aWYgKGRhdGFsZW4gPD0gMCB8fCBkYXRhID09IE5VTEwgfHwgYnVmID09IE5VTEwgfHwgYnVmbGVu IDw9IDApCisgICAgICAgIHJldHVybigwKTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBkYXRhbGVu OyBpKyspIHsKKyAgICAgICAgY2tzdHJuY2F0KChjaGFyICopYnVmLCJcclxuICAiLGJ1Zmxlbik7 CisgICAgICAgIGZvciAoaiA9IDAgOyAoaiA8IDE2KTsgaisrKSB7CisgICAgICAgICAgICBpZiAo KGkgKyBqKSA8IGRhdGFsZW4pCisgICAgICAgICAgICAgIHNwcmludGYoKGNoYXIgKil0bXAsCisg ICAgICAgICAgICAgICAgICAgICAgIiVzJTAyeCAiLAorICAgICAgICAgICAgICAgICAgICAgIChq ID09IDggPyAifCAiIDogIiIpLAorICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBpbnQp IGRhdGFbaSArIGpdCisgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIGVsc2UK KyAgICAgICAgICAgICAgc3ByaW50ZigoY2hhciAqKXRtcCwKKyAgICAgICAgICAgICAgICAgICAg ICAiJXMgICAiLAorICAgICAgICAgICAgICAgICAgICAgIChqID09IDggPyAifCAiIDogIiIpCisg ICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIGNrc3RybmNhdCgoY2hhciAqKWJ1 ZiwoY2hhciAqKXRtcCxidWZsZW4pOworICAgICAgICB9CisgICAgICAgIGNrc3RybmNhdCgoY2hh ciAqKWJ1ZiwiICIsYnVmbGVuKTsKKyAgICAgICAgZm9yIChrID0gMDsgKGsgPCAxNikgJiYgKChp ICsgaykgPCBkYXRhbGVuKTsgaysrKSB7CisgICAgICAgICAgICBzcHJpbnRmKChjaGFyICopdG1w LAorICAgICAgICAgICAgICAgICAgICAgIiVzJWMiLAorICAgICAgICAgICAgICAgICAgICAgKGsg PT0gOCA/ICIgIiA6ICIiKSwKKyAgICAgICAgICAgICAgICAgICAgIGlzcHJpbnQoKGNoYXIpKGRh dGFbaStrXSkpID8gZGF0YVtpK2tdIDogJy4nCisgICAgICAgICAgICAgICAgICAgICApOworICAg ICAgICAgICAgY2tzdHJuY2F0KChjaGFyICopYnVmLChjaGFyICopdG1wLGJ1Zmxlbik7CisgICAg ICAgIH0KKyAgICAgICAgaSArPSBqIC0gMTsKKyAgICB9IC8qIGVuZCBmb3IgKi8KKyAgICBja3N0 cm5jYXQoKGNoYXIgKilidWYsIlxyXG4gICIsYnVmbGVuKTsKKyNlbmRpZiAvKiBDT01NRU5UICov CisgICAgcmV0dXJuKHN0cmxlbigoY2hhciAqKWJ1ZikpOworfQorCitWT0lECit0bl9kZWJ1Zyhz KSBjaGFyICpzOyB7CisjaWZkZWYgTk9MT0NBTAorICAgIHJldHVybjsKKyNlbHNlIC8qIE5PTE9D QUwgKi8KKyNpZmRlZiBPUzIKKyAgICB2b2lkIGN3cml0ZSh1bnNpZ25lZCBzaG9ydCk7CisgICAg Y2hhciAqcCA9IHM7CisgICAgX1BST1RPVFlQICh2b2lkIG9zMmJvbGQsICh2b2lkKSk7CisgICAg ZXh0ZXJuIGludCB0dF90eXBlX21vZGU7CisjZW5kaWYgLyogT1MyICovCisKKyAgICBpZiAoISh0 bl9kZWIgfHwgZGVic2VzKSkKKyAgICAgIHJldHVybjsKKyAgICBkZWJ1ZyhGMTExLCJ0bl9kZWJ1 ZyIscyx3aGF0KTsKKyNpZmRlZiBPUzIKKyAgICBpZiAoMSkgeworICAgICAgICBleHRlcm4gdW5z aWduZWQgY2hhciBjb2xvcmNtZDsKKyAgICAgICAgY29sb3JjbWQgXj0gMHg4IDsKKyAgICAgICAg cHJpbnRmKCIlc1xyXG4iLHMpOworICAgICAgICBjb2xvcmNtZCBePSAweDggOworICAgIH0KKyAg ICBpZiAoIXNjcm5pbml0aWFsaXplZFtWVEVSTV0pIHsKKyAgICAgICAgVVNIT1JUIHgseTsKKyAg ICAgICAgY2hlY2tzY3JlZW5tb2RlKCk7CisgICAgICAgIEdldEN1clBvcygmeSwgJngpOworICAg ICAgICBTYXZlQ21kTW9kZSh4KzEseSsxKTsKKyAgICAgICAgc2NybmluaXQoKTsKKyAgICAgICAg UmVzdG9yZUNtZE1vZGUoKTsKKyAgICB9CisKKyAgICBpZiAoIElTVlROVCh0dF90eXBlX21vZGUp ICYmIHR0bnVtICE9IC0xICYmICFkZWJzZXMgKQorICAgICAgICByZXR1cm47CisKKyAgICBSZXF1 ZXN0VnNjcm5NdXRleCggVlRFUk0sIFNFTV9JTkRFRklOSVRFX1dBSVQgKSA7CisKKyAgICBvczJi b2xkKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUb2dnbGUgYm9sZG5lc3MgKi8KKyAg ICB3aGlsZSAoKnApCisgICAgICBjd3JpdGUoKENIQVIpICpwKyspOyAgICAgICAgICAgICAgLyog R28gYm9sZGx5IC4uLiAqLworICAgIG9zMmJvbGQoKTsgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIFRvZ2dsZSBib2xkbmVzcyBiYWNrICovCisgICAgaWYgKGRlYnNlcykgeworICAgICAgICBk ZWJzZXMgPSAwOworICAgICAgICBjd3JpdGUoKENIQVIpICdcMDE1Jyk7CisgICAgICAgIGN3cml0 ZSgoQ0hBUikgJ1wwMTInKTsKKyAgICAgICAgZGVic2VzID0gMTsKKyAgICB9IGVsc2UgeworICAg ICAgICBjd3JpdGUoKENIQVIpICdcMDE1Jyk7CisgICAgICAgIGN3cml0ZSgoQ0hBUikgJ1wwMTIn KTsKKyAgICB9CisgICAgUmVsZWFzZVZzY3JuTXV0ZXgoVlRFUk0pIDsKKyNlbHNlCisgICAgaWYg KHdoYXQgIT0gV19DT05ORUNUICYmIHdoYXQgIT0gV19ESUFMSU5HICYmIAorICAgICAgICB3aGF0 ICE9IFdfQ09NTUFORCAmJiB3aGF0ICE9IFdfTk9USElORykKKyAgICAgIHJldHVybjsgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBDT05ORUNUL2NvbW1hbmQgbXVzdCBiZSBhY3RpdmUgKi8K KyAgICBjb25vbGwocyk7CisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogTk9MT0NBTCAqLwor fQorCisvKgorICBQcm9jZXNzIGluLWJhbmQgVGVsbmV0IG5lZ290aWF0aW9uIGNoYXJhY3RlcnMg ZnJvbSB0aGUgcmVtb3RlIGhvc3QuCisgIENhbGwgd2l0aCB0aGUgdGVsbmV0IElBQyBjaGFyYWN0 ZXIgYW5kIHRoZSBjdXJyZW50IGR1cGxleCBzZXR0aW5nCisgICgwID0gcmVtb3RlIGVjaG8sIDEg PSBsb2NhbCBlY2hvKSwgYW5kIGEgcG9pbnRlciB0byBhIGZ1bmN0aW9uIHRvIGNhbGwKKyAgdG8g cmVhZCBtb3JlIGNoYXJhY3RlcnMuICBSZXR1cm5zOgorICAgIDYgaWYgRE8gTE9HT1VUIHdhcyBy ZWNlaXZlZCBhbmQgYWNjZXB0ZWQKKyAgICA1IGlmIHRoZSBLZXJtaXQgc3RhcnQgb2YgcGFja2V0 IGNoYXJhY3RlciBoYXMgY2hhbmdlZAorICAgIDQgaWYgc3RhdGUgb2YgcmVtb3RlIEludGVybmV0 IEtlcm1pdCBTZXJ2aWNlIGhhcyBjaGFuZ2VkCisgICAgMyBpZiBhIHF1b3RlZCBJQUMgd2FzIHJl Y2VpdmVkCisgICAgMiBpZiBsb2NhbCBlY2hvIG11c3QgYmUgY2hhbmdlZCB0byByZW1vdGUKKyAg ICAxIGlmIHJlbW90ZSBlY2hvIG11c3QgYmUgY2hhbmdlZCB0byBsb2NhbAorICAgIDAgaWYgbm90 aGluZyBoYXBwZW5zIG9yIG5vIGFjdGlvbiBuZWNlc3NhcnkKKyAgIC0xIG9uIGZhaWx1cmUgKD0g aW50ZXJuYWwgb3IgaS9vIGVycm9yKQorKi8KKyNpZmRlZiBJS1NfT1BUSU9OCitpbnQKK3RuX3Np a3MoY21kKSBpbnQgY21kOyB7ICAgICAgICAgLyogVEVMTkVUIFNFTkQgSUtTIFNVQiAqLworICAg IENIQVIgYnVmWzhdOworI2lmbmRlZiBOT1hGRVIKKyAgICBleHRlcm4gQ0hBUiBteXN0Y2g7ICAg ICAgICAgICAgICAgICAvKiBPdXRnb2luZyBTdGFydCBvZiBQYWNrZXQgQ2hhciAqLworI2Vsc2UK KyAgICBDSEFSIG15c3RjaCA9ICdcMSc7CisjZW5kaWYgLyogTk9YRkVSICovCisgICAgaW50IG4s bSxyYzsKKworICAgIGlmICh0dG5ldCAhPSBORVRfVENQQikgcmV0dXJuKDApOyAgIC8qIE11c3Qg YmUgVENQL0lQICovCisgICAgaWYgKHR0bnByb3RvICE9IE5QX1RFTE5FVCkgcmV0dXJuKDApOyAv KiBNdXN0IGJlIHRlbG5ldCBwcm90b2NvbCAqLworCisgICAgaWYgKGNtZCA8IEtFUk1JVF9TVEFS VCB8fCBjbWQgPiBLRVJNSVRfUkVTUF9TVE9QKSAvKiBJbGxlZ2FsIHN1YmNvbW1hbmQgKi8KKyAg ICAgIHJldHVybigtMSk7CisKKyNpZmRlZiBDS19TU0wKKyAgICBpZiAoVEVMT1BUX1NCKFRFTE9Q VF9TVEFSVF9UTFMpLnN0YXJ0X3Rscy5tZV9mb2xsb3dzKSB7CisgICAgICAgIHJldHVybigwKTsK KyAgICB9CisjZW5kaWYgLyogQ0tfU1NMICovCisgICAgaWYgKGNtZCA9PSBLRVJNSVRfU1RBUlQg fHwgY21kID09IEtFUk1JVF9SRVNQX1NUQVJUKSB7CisgICAgICAgIFRFTE9QVF9TQihURUxPUFRf S0VSTUlUKS5rZXJtaXQubWVfc3RhcnQgPSAxOworICAgIH0gZWxzZSBpZiAoY21kID09IEtFUk1J VF9TVE9QIHx8IGNtZCA9PSBLRVJNSVRfUkVTUF9TVE9QKSB7CisgICAgICAgIFRFTE9QVF9TQihU RUxPUFRfS0VSTUlUKS5rZXJtaXQubWVfc3RhcnQgPSAwOworICAgIH0gZWxzZSBpZiAoY21kID09 IEtFUk1JVF9SRVFfU1RPUCkKKyAgICAgIFRFTE9QVF9TQihURUxPUFRfS0VSTUlUKS5rZXJtaXQu bWVfcmVxX3N0b3AgPSAxOworICAgIGVsc2UgaWYgKGNtZCA9PSBLRVJNSVRfUkVRX1NUQVJUKQor ICAgICAgVEVMT1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1pdC5tZV9yZXFfc3RhcnQgPSAxOwor CisgICAgaWYgKGNtZCA9PSBLRVJNSVRfU09QKSB7CisgICAgICAgIGJ1ZlswXSA9IChDSEFSKSBJ QUM7CisgICAgICAgIGJ1ZlsxXSA9IChDSEFSKSBTQjsKKyAgICAgICAgYnVmWzJdID0gKENIQVIp IFRFTE9QVF9LRVJNSVQ7CisgICAgICAgIGJ1ZlszXSA9IChDSEFSKSAoY21kICYgMHhmZik7Cisg ICAgICAgIGJ1Zls0XSA9IChDSEFSKSBteXN0Y2g7CisgICAgICAgIGJ1Zls1XSA9IChDSEFSKSBJ QUM7CisgICAgICAgIGJ1Zls2XSA9IChDSEFSKSBTRTsKKyAgICAgICAgYnVmWzddID0gKENIQVIp IDA7CisjaWZkZWYgREVCVUcKKyAgICAgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMgfHwgZGVibG9n KQorICAgICAgICAgICAgY2ttYWttc2coIHRuX21zZ19vdXQsVE5fTVNHX0xFTiwiVEVMTkVUIFNF TlQgU0IgS0VSTUlUIFNPUCAiLAorICAgICAgICAgICAgICAgICAgICAgIGNrY3RveChteXN0Y2gs MSksIiBJQUMgU0UiLE5VTEwpOworI2VuZGlmIC8qIERFQlVHICovCisjaWZkZWYgT1MyCisgICAg ICAgIFJlcXVlc3RUZWxuZXRNdXRleCggU0VNX0lOREVGSU5JVEVfV0FJVCApOworI2VuZGlmCisj aWZkZWYgREVCVUcKKyAgICAgICAgZGVidWcoRjEwMSx0bl9tc2dfb3V0LCIiLGNtZCk7CisgICAg ICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKSB0bl9kZWJ1Zyh0bl9tc2dfb3V0KTsKKyNlbmRpZiAv KiBERUJVRyAqLworICAgICAgICByYyA9ICggdHRvbChidWYsNykgPCA3ICk7ICAgICAgICAgICAg ICAgIC8qIFNlbmQgaXQuICovCisjaWZkZWYgT1MyCisgICAgICAgIFJlbGVhc2VUZWxuZXRNdXRl eCgpOworI2VuZGlmCisgICAgaWYgKHJjKQorICAgICAgICByZXR1cm4oLTEpOworICAgIH0gZWxz ZSB7CisgICAgICAgIGJ1ZlswXSA9IChDSEFSKSBJQUM7CisgICAgICAgIGJ1ZlsxXSA9IChDSEFS KSBTQjsKKyAgICAgICAgYnVmWzJdID0gKENIQVIpIFRFTE9QVF9LRVJNSVQ7CisgICAgICAgIGJ1 ZlszXSA9IChDSEFSKSAoY21kICYgMHhmZik7CisgICAgICAgIGJ1Zls0XSA9IChDSEFSKSBJQUM7 CisgICAgICAgIGJ1Zls1XSA9IChDSEFSKSBTRTsKKyAgICAgICAgYnVmWzZdID0gKENIQVIpIDA7 CisKKyNpZmRlZiBERUJVRworICAgICAgICBpZiAodG5fZGViIHx8IGRlYnNlcyB8fCBkZWJsb2cp IHsKKyAgICAgICAgICAgIGNoYXIgKiBzID0gMDsKKyAgICAgICAgICAgIHN3aXRjaCAoY21kKSB7 CisgICAgICAgICAgICAgIGNhc2UgS0VSTUlUX1NUQVJUOiBzID0gIlNUQVJUIjsgYnJlYWs7Cisg ICAgICAgICAgICAgIGNhc2UgS0VSTUlUX1NUT1A6IHMgPSAiU1RPUCI7IGJyZWFrOworICAgICAg ICAgICAgICBjYXNlIEtFUk1JVF9SRVFfU1RBUlQ6IHMgPSAiUkVRLVNUQVJUIjsgYnJlYWs7Cisg ICAgICAgICAgICAgIGNhc2UgS0VSTUlUX1JFUV9TVE9QOiBzID0gIlJFUS1TVE9QIjsgYnJlYWs7 CisgICAgICAgICAgICAgIGNhc2UgS0VSTUlUX1JFU1BfU1RBUlQ6IHMgPSAiUkVTUC1TVEFSVCI7 IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEtFUk1JVF9SRVNQX1NUT1A6ICBzID0gIlJFU1At U1RPUCI7IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2ttYWttc2coIHRuX21z Z19vdXQsVE5fTVNHX0xFTiwKKyAgICAgICAgICAgICAgICAgICAgICAiVEVMTkVUIFNFTlQgU0Ig a2VybWl0ICIscywiIElBQyBTRSIsTlVMTCk7CisgICAgICAgIH0KKyNlbmRpZiAvKiBERUJVRyAq LworI2lmZGVmIE9TMgorICAgICAgICBSZXF1ZXN0VGVsbmV0TXV0ZXgoIFNFTV9JTkRFRklOSVRF X1dBSVQgKTsKKyNlbmRpZgorI2lmZGVmIERFQlVHCisgICAgICAgIGRlYnVnKEYxMDEsdG5fbXNn X291dCwiIixjbWQpOworICAgICAgICBpZiAodG5fZGViIHx8IGRlYnNlcykgdG5fZGVidWcodG5f bXNnX291dCk7CisjZW5kaWYgLyogREVCVUcgKi8KKyAgICAgICAgcmMgPSAoIHR0b2woYnVmLDYp IDwgNiApOyAgICAgICAgICAgICAgICAvKiBTZW5kIGl0LiAqLworI2lmZGVmIE9TMgorICAgICAg ICBSZWxlYXNlVGVsbmV0TXV0ZXgoKTsKKyNlbmRpZgorICAgICAgICBpZiAocmMpCisgICAgICAg ICAgICByZXR1cm4oLTEpOworICAgIH0KKyAgICByZXR1cm4oMSk7Cit9CisjZW5kaWYgLyogSUtT X09QVElPTiAqLworCisvKiB0bl9zYigpIHBlcmZvcm1zIFRlbG5ldCBTdWJuZWdvdGlhdGlvbiBQ YXJzaW5nIGFuZCBEZWJ1Z2dpbmcgKi8KKy8qIHJldHVybnMgPD0gMCBvbiBlcnJvciwgMSBvbiBz dWNjZXNzICovCisvKiB0aGUgbGVuZ3RoIHJldHVybmVkIGluY2x1ZGVzIHRoZSBJQUMgU0UgYnl0 ZXMgKi8KKworaW50CisjaWZkZWYgQ0tfQU5TSUMgICAgICAgICAgICAgICAgICAgICAgICAgLyog VEVMTkVUIFNCICovCit0bl9zYiggaW50IG9wdCwgaW50ICogbGVuLCBpbnQgKCpmbikoaW50KSAp CisjZWxzZQordG5fc2IoIG9wdCwgbGVuLCBmbiApIGludCBvcHQ7IGludCAqIGxlbjsgaW50ICgq Zm4pKCk7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIHRuX3NiICovIHsKKyAgICBpbnQgYywg eCwgeSwgbiwgbSwgZmxhZzsKKyAgICAvKiBpZiAoIUlTX1RFTE5FVCgpKSByZXR1cm4oMSk7ICov CisKKyAgICBkZWJ1ZyhGMTAwLCJFbnRlcmluZyB0bl9zYigpIiwiIiwwKTsKKyAgICAqbGVuID0g MDsgICAgICAgICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSBMZW4gdG8gMCAqLworICAgIG4gPSBm bGFnID0gMDsgICAgICAgICAgICAgICAvKiBGbGFnIGZvciB3aGVuIGRvbmUgcmVhZGluZyBTQiAq LworICAgIHdoaWxlIChuIDwgVFNCVUZTSVopIHsgICAgICAvKiBMb29wIGxvb2tpbmcgZm9yIElB QyBTRSAqLworICAgICAgICBpZiAoKHkgPSAoKmZuKSgwKSkgPCAwKSAvKiBSZWFkIGEgYnl0ZSAq LworICAgICAgICAgIHJldHVybih5KTsKKyAgICAgICAgeSAmPSAweGZmOyAgICAgICAgICAgICAg LyogTWFrZSBzdXJlIGl0J3MganVzdCA4IGJpdHMuICovCisgICAgICAgIHNiW24rK10gPSAoY2hh cikgeTsgICAgIC8qIERlcG9zaXQgaW4gYnVmZmVyLiAqLworICAgICAgICBpZiAoc2VzbG9nICYm IHNlc3NmdCA9PSBYWUZUX0QpIHsgLyogVGFrZSBjYXJlIG9mIHNlc3Npb24gbG9nICovCisgICAg ICAgICAgICBsb2djaGFyKChjaGFyKSB5KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoeSA9PSBJ QUMpIHsgICAgICAgICAvKiBJZiB0aGlzIGlzIGFuIElBQyAgICAgICAgICAgICAgICAqLworICAg ICAgICAgICAgaWYgKGZsYWcpIHsgICAgICAgICAvKiBJZiBwcmV2aW91cyBjaGFyIHdhcyBJQUMg ICAgICAgICAqLworICAgICAgICAgICAgICAgIG4tLTsgICAgICAgICAgICAvKiBpdCdzIHF1b3Rl ZCwga2VlcCBvbmUgSUFDICAgICAgICAqLworICAgICAgICAgICAgICAgIGZsYWcgPSAwOyAgICAg ICAvKiBhbmQgdHVybiBvZmYgdGhlIGZsYWcuICAgICAgICAgICAqLworICAgICAgICAgICAgfSBl bHNlIGZsYWcgPSAxOyAgICAvKiBPdGhlcndpc2Ugc2V0IHRoZSBmbGFnLiAgICAgICAgICAqLwor ICAgICAgICB9IGVsc2UgaWYgKGZsYWcpIHsgICAgICAvKiBTb21ldGhpbmcgZWxzZSBmb2xsb3dp bmcgSUFDICAgICAqLworICAgICAgICAgICAgaWYgKHkgPT0gU0UpICAgICAgICAvKiBJZiBub3Qg U0UsIGl0J3MgYSBwcm90b2NvbCBlcnJvciAqLworICAgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgICAgIGVsc2UgaWYgKHkgPT0gRE9OVCkgeyAvKiBVc2VkIERPTlQgaW5zdGVhZCBvZiBTRSAq LworICAgICAgICAgICAgICAgIGRlYnVnKEYxMDAsCisgICAgICAgICAgICAgICAgICAgICAgIlRF TE5FVCBTdWJuZWdvdGlhdGlvbiBlcnJvciAtIHVzZWQgRE9OVCBpbnN0ZWFkIG9mIFNFISIsCisg ICAgICAgICAgICAgICAgICAgICAgIiIKKyAgICAgICAgICAgICAgICAgICAgICAsMAorICAgICAg ICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMp CisgICAgICAgICAgICAgICAgICB0bl9kZWJ1ZygKKyAgICAgICAgICAgICAgICAgICAgICJURUxO RVQgU3VibmVnb3RpYXRpb24gZXJyb3IgLSB1c2VkIERPTlQgaW5zdGVhZCBvZiBTRSEiKTsKKyAg ICAgICAgICAgICAgICBmbGFnID0gMzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg ICAgIH0gZWxzZSB7ICAgICAgICAgICAgLyogT3RoZXIgcHJvdG9jb2wgZXJyb3IgKi8KKyAgICAg ICAgICAgICAgICBmbGFnID0gMDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg IH0KKyAgICAgICAgfQorCisjaWZkZWYgQ0tfRk9SV0FSRF9YCisgICAgICAgIGlmICggb3B0ID09 IFRFTE9QVF9GT1JXQVJEX1ggJiYgc2JbMF0gPT0gRldEWF9EQVRBICYmCisgICAgICAgICAgICAg biA+PSAoVFNCVUZTSVotNCkgJiYgIWZsYWcgKSB7CisgICAgICAgICAgICAvKiBkbyBub3QgbGV0 IHRoZSBidWZmZXIgb3ZlciBmbG93ICovCisgICAgICAgICAgICAvKiB3cml0ZSB0aGUgZGF0YSB0 byB0aGUgY2hhbm5lbCBhbmQgY29udGludWUgcHJvY2Vzc2luZyAqLworICAgICAgICAgICAgLyog dGhlIGluY29taW5nIGRhdGEgdW50aWwgSUFDIFNFIGlzIHJlYWNoZWQuICovCisgICAgICAgICAg ICBzYltuKytdID0gSUFDOworICAgICAgICAgICAgc2JbbisrXSA9IFNFOworCisjaWZkZWYgREVC VUcKKyAgICAgICAgICAgIGlmICggZGVibG9nIHx8IHRuX2RlYiB8fCBkZWJzZXMgKSB7CisgICAg ICAgICAgICAgICAgaW50IGk7CisgICAgICAgICAgICAgICAgY2ttYWttc2coIHRuX21zZyxUTl9N U0dfTEVOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiVEVMTkVUIFJDVkQgU0IgIixURUxP UFQob3B0KSwKKwkJCSAgIiBEQVRBKGJ1ZmZlci1mdWxsKSAiLE5VTEwpOworICAgICAgICAgICAg ICAgIHRuX2hleCgoQ0hBUiAqKXRuX21zZyxUTl9NU0dfTEVOLCZzYlsxXSxuLTMpOworICAgICAg ICAgICAgICAgIGlmIChmbGFnID09IDIpCisgICAgICAgICAgICAgICAgICAgIGNrc3RybmNhdCh0 bl9tc2csIiBTRSIsVE5fTVNHX0xFTik7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoZmxhZyA9 PSAzKQorICAgICAgICAgICAgICAgICAgICBja3N0cm5jYXQodG5fbXNnLCIgSUFDIERPTlQiLFRO X01TR19MRU4pOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgY2tz dHJuY2F0KHRuX21zZywiIElBQyBTRSIsVE5fTVNHX0xFTik7CisgICAgICAgICAgICAgICAgZGVi dWcoRjEwMCx0bl9tc2csIiIsMCk7CisgICAgICAgICAgICAgICAgaWYgKHRuX2RlYiB8fCBkZWJz ZXMpCisgICAgICAgICAgICAgICAgICAgIHRuX2RlYnVnKHRuX21zZyk7CisgICAgICAgICAgICB9 CisjZW5kaWYgLyogREVCVUcgKi8KKworICAgICAgICAgICAgaWYgKCBmd2R4X3RuX3NiKHNiLG4p IDwgMCApIHsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJmeGR4X3RuX3NiKCkgZmFpbGVk IiwiIiwwKTsKKyAgICAgICAgICAgICAgICAvKiBXZSBjYW4ndCByZXR1cm4gdGhvdWdoIGJlY2F1 c2UgdGhhdCB3b3VsZCBsZWF2ZSAgKi8KKyAgICAgICAgICAgICAgICAvKiBkYXRhIHRvIGJlIGZv cndhcmRlZCBpbiB0aGUgcXVldWUgdG8gdGhlIGJlIHNlbnQgKi8KKyAgICAgICAgICAgICAgICAv KiB0byB0aGUgdGVybWluYWwgZW11bGF0b3IuICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIC8qIHJlc2V0IGxlYXZlIHRoZSBtc2cgdHlwZSBhbmQg Y2hhbm5lbCBudW1iZXIgaW4gcGxhY2UgKi8KKyAgICAgICAgICAgIG4gPSAzOworICAgICAgICB9 CisjZW5kaWYgLyogQ0tfRk9SV0FSRF9YICovCisgICAgfQorICAgIGRlYnVnKEYxMTEsInRuX3Ni IGVuZCBvZiB3aGlsZSBsb29wIiwiZmxhZyIsZmxhZyk7CisgICAgaWYgKCFmbGFnKSB7ICAgICAg ICAgICAgICAgICAgICAgICAgLyogTWFrZSBzdXJlIHdlIGdvdCBhIHZhbGlkIFNCICovCisgICAg ICAgIGRlYnVnKEYxMTEsICJURUxORVQgU3VibmVnb3RpYXRpb24gcHJlbWF0dXJlbHkgYnJva2Vu Iiwib3B0IixvcHQpOworICAgICAgICBpZiAodG5fZGViIHx8IGRlYnNlcykgeworICAgICAgICAg ICAgY2ttYWttc2coIHRuX21zZywgVE5fTVNHX0xFTiwKKyAgICAgICAgICAgICAgICAgICAgICAi VEVMTkVUICIsIFRFTE9QVChvcHQpLAorICAgICAgICAgICAgICAgICAgICAgICIgU3VibmVnb3Rp YXRpb24gcHJlbWF0dXJlbHkgYnJva2VuIixOVUxMCisgICAgICAgICAgICAgICAgICAgICAgKTsK KworICAgICAgICAgIHRuX2RlYnVnKHRuX21zZyk7CisgICAgICAgIH0KKyAgICAgICAgLyogV2Fz IC0xIGJ1dCB0aGF0IHdvdWxkIGJlIGFuIEkvTyBlcnJvciwgc28gYWJzb3JiIGl0IGFuZCBnbyBv bi4gKi8KKyAgICAgICAgcmV0dXJuKDApOworICAgIH0KKyNpZmRlZiBERUJVRworICAgIGlmIChk ZWJsb2cgfHwgdG5fZGViIHx8IGRlYnNlcykgeworICAgICAgICBpbnQgaTsKKyAgICAgICAgY2hh ciAqIHNbMTZdOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKKyAgICAgICAgICBz W2ldID0gIiI7CisgICAgICAgIGlmIChvcHQgPT0gVEVMT1BUX05BV1MpIHsKKyAgICAgICAgICAg IGkgPSAwOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaSA9IDE7CisgICAgICAgICAg ICBzWzBdID0gIlVOS05PV04iOworCisgICAgICAgICAgICBzd2l0Y2ggKHNiWzBdKSB7CisgICAg ICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICAgICBpZiAob3B0ID09IFRFTE9QVF9GT1JX QVJEX1gpCisgICAgICAgICAgICAgICAgICBzWzBdID0gIlNDUkVFTiI7CisgICAgICAgICAgICAg ICAgZWxzZSBpZiAob3B0ID09IFRFTE9QVF9LRVJNSVQpCisgICAgICAgICAgICAgICAgICBzWzBd ID0gIlNUQVJUIjsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChvcHQgPT0gVEVMT1BUX0xGTE9X KQorICAgICAgICAgICAgICAgICAgc1swXSA9ICJPRkYiOworICAgICAgICAgICAgICAgIGVsc2Ug aWYgKG9wdCA9PSBURUxPUFRfQ09NUE9SVCkKKyAgICAgICAgICAgICAgICAgIHNbMF0gPSAiU0lH TkFUVVJFIjsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICBzWzBdID0g IklTIjsKKyAgICAgICAgICAgICAgICBpZiAob3B0ID09IFRFTE9QVF9FTkNSWVBUSU9OKSB7Cisg ICAgICAgICAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNiWzFdIDwg RU5DVFlQRV9DTlQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNbMV0gPSBlbmN0eXBlX25h bWVzW3NiWzFdXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICAgICAg ICAgICAgICAgIHN3aXRjaChzYlsyXSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNl IDE6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc1syXSA9ICJGQjY0X0lWIjsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg Y2FzZSAyOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNbMl0gPSAiRkI2NF9JVl9PSyI7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg ICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzWzJdID0gIkZCNjRf SVZfQkFEIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNbMl0g PSAiRkI2NF9DSEFMTEVOR0UiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDU6CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc1syXSA9ICJGQjY0X1JFU1BPTlNFIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNbMV0gPSAiVU5LTk9XTiI7CisgICAg ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYg KG9wdCA9PSBURUxPUFRfQVVUSEVOVElDQVRJT04pIHsKKyAgICAgICAgICAgICAgICAgICAgaSAr PSAyOworICAgICAgICAgICAgICAgICAgICBzWzFdID0gQVVUSFRZUEVfTkFNRShzYlsxXSk7Cisg ICAgICAgICAgICAgICAgICAgIHNbMl0gPSBBVVRITU9ERV9OQU1FKHNiWzJdKTsKKyAgICAgICAg ICAgICAgICAgICAgaWYgKHNiWzFdKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpKys7Cisg ICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHNiWzNdKSB7CisgICAgICAgICAgICAgICAg ICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHNi WzFdKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEFVVEhUWVBFX05UTE06 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNbM10gPSAiTlRMTV9BVVRIIjsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzWzNd ID0gIkFVVEgiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoc2JbMV0pIHsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNhc2UgQVVUSFRZUEVfU1NMOgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzWzNdID0gIlNUQVJUIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEFVVEhUWVBF X05UTE06CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNbM10gPSAiTlRMTV9DSEFM TEVOR0UiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHNbM10gPSAiUkVKRUNUIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAg ICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHNiWzFdKSB7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEFVVEhUWVBFX05UTE06CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNbM10gPSAiTlRMTV9SRVNQT05TRSI7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc1szXSA9 ICJBQ0NFUFQiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoc2JbMV0pIHsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNhc2UgQVVUSFRZUEVfTlRMTToKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc1szXSA9ICJOVExNX0FDQ0VQVCI7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAx OiAgIC8qIEtFUkJFUk9TX3Y0ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNl IDU6ICAgLyogU1JQICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNbM10gPSAi Q0hBTExFTkdFIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6ICAgLyogS0VSQkVST1NfdjUgKi8KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc1szXSA9ICJSRVNQT05TRSI7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY2FzZSBBVVRIVFlQRV9TU0w6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNbM10gPSAiUkVKRUNUIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc3dpdGNoIChzYlsxXSkgeworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY2FzZSBBVVRIVFlQRV9OVExNOgorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzWzNdID0gIk5UTE1fUkVKRUNUIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6ICAgLyogS0VS QkVST1NfVjQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNTogICAvKiBT UlAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc1szXSA9ICJSRVNQT05TRSI7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY2FzZSAyOiAgIC8qIEtFUkJFUk9TX1Y1ICovCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHNbM10gPSAiRk9SV0FSRCI7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg Y2FzZSA1OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoc2JbMV0pIHsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNTogICAvKiBTUlAgKi8KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc1szXSA9ICJGT1JXQVJEIjsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj YXNlIDI6ICAgLyogS0VSQkVST1NfVjUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc1szXSA9ICJGT1JXQVJEX0FDQ0VQVCI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA2Ogor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoc2JbMV0pIHsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNhc2UgNTogICAvKiBTUlAgKi8KKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc1szXSA9ICJGT1JXQVJEX0FDQ0VQVCI7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fz ZSAyOiAvKiBLRVJCRVJPU19WNSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz WzNdID0gIkZPUldBUkRfUkVKRUNUIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg YnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDc6CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChzYlsxXSkgeworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY2FzZSA1OiAgIC8qIFNSUCAqLworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzWzNdID0gIkZPUldBUkRfUkVKRUNUIjsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6 IC8qIEtFUkJFUk9TX1Y1ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNbM10g PSAiVExTX1ZFUklGWSI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDg6CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc3dpdGNoIChzYlsxXSkgeworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY2FzZSA1OiAvKiBTUlAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc1szXSA9ICJFWFAiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgOToKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzd2l0Y2ggKHNiWzFdKSB7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjYXNlIDU6IC8qIFNSUCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzWzNdID0gIlBBUkFNUyI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg ICAgICAgY2FzZSAxOgorICAgICAgICAgICAgICAgIHN3aXRjaCAob3B0KSB7CisgICAgICAgICAg ICAgICAgICBjYXNlIFRFTE9QVF9GT1JXQVJEX1g6CisgICAgICAgICAgICAgICAgICAgIHNbMF0g PSAiT1BFTiI7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg Y2FzZSBURUxPUFRfTEZMT1c6CisgICAgICAgICAgICAgICAgICAgIHNbMF0gPSAiT04iOworICAg ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgVEVMT1BUX0tF Uk1JVDoKKyAgICAgICAgICAgICAgICAgICAgc1swXSA9ICJTVE9QIjsKKyAgICAgICAgICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIFRFTE9QVF9DT01QT1JUOgorICAg ICAgICAgICAgICAgICAgICBzWzBdID0gIlNFVC1CQVVEUkFURSI7CisgICAgICAgICAgICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIFRFTE9QVF9BVVRIRU5USUNBVElP TjoKKyAgICAgICAgICAgICAgICAgICAgc1swXSA9ICJTRU5EIjsKKyAgICAgICAgICAgICAgICAg ICAgaGV4YnVmWzBdID0gJ1wwJzsKKyAgICAgICAgICAgICAgICAgICAgZm9yICg7IGkgPCBuLTI7 IGkgKz0gMikgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBBVVRIVFlQRV9OQU1FX09L KHNiW2ldKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVVRITU9ERV9OQU1FX09L KHNiW2ldKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBja21ha21zZyggdG5fbXNnLCBU Tl9NU0dfTEVOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVVRIVFlQ RV9OQU1FKHNiW2ldKSwiICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEFVVEhNT0RFX05BTUUoc2JbaSsxXSksIiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg ICAgICAgICAgICAgIGNrbWFreG1zZyh0bl9tc2csIFROX01TR19MRU4sCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBBVVRIVFlQRV9OQU1FKHNiW2ldKSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICI9IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNraXRvYShzYltpXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAiICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVVRITU9ERV9O QU1FKHNiW2krMV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIj0iLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2tpdG9hKHNiW2krMV0pLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAiLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgTlVMTCxOVUxMLE5VTEwsTlVMTAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNrc3RybmNhdCho ZXhidWYsdG5fbXNnLHNpemVvZihoZXhidWYpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICAgICAgICBzWzFdID0gaGV4YnVmOworICAgICAgICAgICAgICAgICAgICBicmVh azsKKworICAgICAgICAgICAgICAgICAgY2FzZSBURUxPUFRfRU5DUllQVElPTjoKKyAgICAgICAg ICAgICAgICAgICAgc1swXSA9ICJTVVBQT1JUIjsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUg KGkgPCBuLTIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNbaV0gPSBlbmN0eXBlX25hbWVz W3NiW2ldXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgY2Fz ZSBURUxPUFRfU1RBUlRfVExTOgorICAgICAgICAgICAgICAgICAgICBzWzBdID0gIkZPTExPV1Mi OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6 CisgICAgICAgICAgICAgICAgICAgIHNbMF0gPSAiU0VORCI7CisgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAg ICAgICAgICBzd2l0Y2ggKG9wdCkgeworICAgICAgICAgICAgICAgIGNhc2UgVEVMT1BUX0ZPUldB UkRfWDoKKyAgICAgICAgICAgICAgICAgICAgc1swXSA9ICJDTE9TRSI7CisgICAgICAgICAgICAg ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSBURUxPUFRfTEZMT1c6CisgICAg ICAgICAgICAgICAgICAgIHNbMF0gPSAiUkVTVEFSVC1BTlkiOworICAgICAgICAgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgVEVMT1BUX0tFUk1JVDoKKyAgICAgICAg ICAgICAgICAgICAgc1swXSA9ICJSRVEtU1RBUlQiOworICAgICAgICAgICAgICAgICAgICBicmVh azsKKyAgICAgICAgICAgICAgICAgIGNhc2UgVEVMT1BUX0NPTVBPUlQ6CisgICAgICAgICAgICAg ICAgICAgIHNbMF0gPSAiU0VULURBVEFTSVpFIjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7 CisgICAgICAgICAgICAgICAgICBjYXNlIFRFTE9QVF9ORVdFTlZJUk9OOgorICAgICAgICAgICAg ICAgICAgICBzWzBdID0gIklORk8iOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgICAgICAgICAgIGNhc2UgVEVMT1BUX0FVVEhFTlRJQ0FUSU9OOgorICAgICAgICAgICAgICAg ICAgICBzWzBdID0gIlJFUExZIjsKKyAgICAgICAgICAgICAgICAgICAgaT00OworICAgICAgICAg ICAgICAgICAgICBzWzFdID0gQVVUSFRZUEVfTkFNRShzYlsxXSk7CisgICAgICAgICAgICAgICAg ICAgIHNbMl0gPSBBVVRITU9ERV9OQU1FKHNiWzJdKTsKKyAgICAgICAgICAgICAgICAgICAgc3dp dGNoIChzYlszXSkgeworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAg ICAgICAgICAgICAgIHN3aXRjaCAoc2JbMV0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg Y2FzZSBBVVRIVFlQRV9OVExNOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNbM10gPSAi TlRMTV9BVVRIIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBz WzNdID0gIkFVVEgiOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAg ICAgICAgICAgICAgICAgc3dpdGNoIChzYlsxXSkgeworICAgICAgICAgICAgICAgICAgICAgICAg ICBjYXNlIEFVVEhUWVBFX05UTE06CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc1szXSA9 ICJOVExNX0NIQUxMRU5HRSI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc1szXSA9ICJSRUpFQ1QiOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOgor ICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChzYlsxXSkgeworICAgICAgICAgICAgICAg ICAgICAgICAgICBjYXNlIEFVVEhUWVBFX05UTE06CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc1szXSA9ICJOVExNX1JFU1BPTlNFIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBi cmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzWzNdID0gIkFDQ0VQVCI7CisgICAgICAgICAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBj YXNlIDM6CisgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHNiWzFdKSB7CisgICAgICAg ICAgICAgICAgICAgICAgICAgIGNhc2UgQVVUSFRZUEVfTlRMTToKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzWzNdID0gIk5UTE1fQUNDRVBUIjsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBBVVRIVFlQRV9LRVJC RVJPU19WNDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBBVVRIVFlQRV9TUlA6Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc1szXSA9ICJDSEFMTEVOR0UiOworICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNl IEFVVEhUWVBFX0tFUkJFUk9TX1Y1OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNbM10g PSAiUkVTUE9OU0UiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICAgICAgICAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNo IChzYlsxXSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEFVVEhUWVBFX05UTE06 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc1szXSA9ICJOVExNX1JFSkVDVCI7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAg IGNhc2UgQVVUSFRZUEVfS0VSQkVST1NfVjQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgIGNh c2UgQVVUSFRZUEVfU1JQOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNbM10gPSAiUkVT UE9OU0UiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg ICAgICAgICAgICAgICBjYXNlIEFVVEhUWVBFX0tFUkJFUk9TX1Y1OgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHNbM10gPSAiRk9SV0FSRCI7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIDU6CisgICAgICAgICAgICAg ICAgICAgICAgICBzd2l0Y2ggKHNiWzFdKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGNh c2UgQVVUSFRZUEVfU1JQOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNbM10gPSAiRk9S V0FSRCI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg ICAgICAgICAgICAgIGNhc2UgQVVUSFRZUEVfS0VSQkVST1NfVjU6CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc1szXSA9ICJGT1JXQVJEX0FDQ0VQVCI7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIDY6CisgICAgICAg ICAgICAgICAgICAgICAgICBzd2l0Y2ggKHNiWzFdKSB7CisgICAgICAgICAgICAgICAgICAgICAg ICAgIGNhc2UgQVVUSFRZUEVfU1JQOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNbM10g PSAiRk9SV0FSRF9BQ0NFUFQiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEFVVEhUWVBFX0tFUkJFUk9TX1Y1OgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHNbM10gPSAiRk9SV0FSRF9SRUpFQ1QiOworICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgY2Fz ZSA3OgorICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChzYlsxXSkgeworICAgICAgICAg ICAgICAgICAgICAgICAgICBjYXNlIEFVVEhUWVBFX1NSUDoKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzWzNdID0gIkZPUldBUkRfUkVKRUNUIjsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBBVVRIVFlQRV9LRVJC RVJPU19WNToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzWzNdID0gIlRMU19WRVJJRlki OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg ICAgICAgY2FzZSA4OgorICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChzYlsxXSkgewor ICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEFVVEhUWVBFX1NSUDoKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzWzNdID0gIkVYUCI7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIDk6CisgICAgICAgICAgICAg ICAgICAgICAgICBzd2l0Y2ggKHNiWzFdKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGNh c2UgQVVUSFRZUEVfU1JQOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNbM10gPSAiUEFS QU1TIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg Y2FzZSBURUxPUFRfRU5DUllQVElPTjoKKyAgICAgICAgICAgICAgICAgICAgc1swXSA9ICJSRVBM WSI7CisgICAgICAgICAgICAgICAgICAgIHNbMV0gPSBlbmN0eXBlX25hbWVzW3NiWzFdXTsKKyAg ICAgICAgICAgICAgICAgICAgaSsrOworICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHNiWzJd KSB7CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgICAgICAgICAg ICAgaSsrOworICAgICAgICAgICAgICAgICAgICAgICAgc1syXSA9ICJGQjY0X0lWIjsKKyAgICAg ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjoK KyAgICAgICAgICAgICAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNb Ml0gPSAiRkI2NF9JVl9PSyI7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgICAgICAgICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgICAgICAgICAgICBpKys7Cisg ICAgICAgICAgICAgICAgICAgICAgICBzWzJdID0gIkZCNjRfSVZfQkFEIjsKKyAgICAgICAgICAg ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDoKKyAgICAg ICAgICAgICAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNbMl0gPSAi RkI2NF9DSEFMTEVOR0UiOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg ICAgICAgICAgICAgICAgY2FzZSA1OgorICAgICAgICAgICAgICAgICAgICAgICAgaSsrOworICAg ICAgICAgICAgICAgICAgICAgICAgc1syXSA9ICJGQjY0X1JFU1BPTlNFIjsKKyAgICAgICAgICAg ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsK KyAgICAgICAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgICAgIHN3aXRjaCAob3B0KSB7Cisg ICAgICAgICAgICAgICAgICBjYXNlIFRFTE9QVF9GT1JXQVJEX1g6CisgICAgICAgICAgICAgICAg ICAgIHNbMF0gPSAiREFUQSI7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg ICAgICAgICAgY2FzZSBURUxPUFRfTEZMT1c6CisgICAgICAgICAgICAgICAgICAgIHNbMF0gPSAi UkVTVEFSVC1YT04iOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg ICAgIGNhc2UgVEVMT1BUX0tFUk1JVDoKKyAgICAgICAgICAgICAgICAgICAgc1swXSA9ICJSRVEt U1RPUCI7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgY2Fz ZSBURUxPUFRfQ09NUE9SVDoKKyAgICAgICAgICAgICAgICAgICAgICBzWzBdID0gIlNFVC1QQVJJ VFkiOworICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgY2Fz ZSBURUxPUFRfQVVUSEVOVElDQVRJT046CisgICAgICAgICAgICAgICAgICAgIHNbMF0gPSAiTkFN RSI7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSBU RUxPUFRfRU5DUllQVElPTjoKKyAgICAgICAgICAgICAgICAgICAgc1swXSA9ICJTVEFSVCI7Cisg ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgICAgIHN3aXRj aCAob3B0KSB7CisgICAgICAgICAgICAgICAgICBjYXNlIFRFTE9QVF9GT1JXQVJEX1g6CisgICAg ICAgICAgICAgICAgICAgIHNbMF0gPSAiT1BUSU9OUyI7CisgICAgICAgICAgICAgICAgICAgIGJy ZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSBURUxPUFRfS0VSTUlUOgorICAgICAgICAgICAg ICAgICAgICBzWzBdID0gIlNPUCI7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg ICAgICAgICAgICAgY2FzZSBURUxPUFRfQ09NUE9SVDoKKyAgICAgICAgICAgICAgICAgICAgICBz WzBdID0gIlNFVC1TVE9QU0laRSI7CisgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICAgICAgICAgICBjYXNlIFRFTE9QVF9FTkNSWVBUSU9OOgorICAgICAgICAgICAgICAgICAg ICBzWzBdID0gIkVORCI7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSA1OgorICAg ICAgICAgICAgICAgIHN3aXRjaCAob3B0KSB7CisgICAgICAgICAgICAgICAgY2FzZSBURUxPUFRf Rk9SV0FSRF9YOgorICAgICAgICAgICAgICAgICAgICBzWzBdID0gIk9QVElPTl9EQVRBIjsKKyAg ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBURUxPUFRfRU5D UllQVElPTjoKKyAgICAgICAgICAgICAgICAgICAgc1swXSA9ICJSRVFVRVNULVNUQVJUIjsKKyAg ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBURUxPUFRfQ09N UE9SVDoKKyAgICAgICAgICAgICAgICAgICAgc1swXSA9ICJTRVQtQ09OVFJPTCI7CisgICAgICAg ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBi cmVhazsKKyAgICAgICAgICAgICAgY2FzZSA2OgorICAgICAgICAgICAgICAgIHN3aXRjaCAob3B0 KSB7CisgICAgICAgICAgICAgICAgICBjYXNlIFRFTE9QVF9GT1JXQVJEX1g6CisgICAgICAgICAg ICAgICAgICAgIHNbMF0gPSAiWE9GRiI7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg ICAgICAgICAgICAgICAgY2FzZSBURUxPUFRfRU5DUllQVElPTjoKKyAgICAgICAgICAgICAgICAg ICAgc1swXSA9ICJSRVFVRVNULUVORCI7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg ICAgICAgICAgICAgICAgY2FzZSBURUxPUFRfQ09NUE9SVDoKKyAgICAgICAgICAgICAgICAgICAg ICBzWzBdID0gIk5PVElGWS1MSU5FU1RBVEUiOworICAgICAgICAgICAgICAgICAgICAgIGJyZWFr OworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg ICAgICBjYXNlIDc6CisgICAgICAgICAgICAgICAgc3dpdGNoIChvcHQpIHsKKyAgICAgICAgICAg ICAgICAgIGNhc2UgVEVMT1BUX0ZPUldBUkRfWDoKKyAgICAgICAgICAgICAgICAgICAgc1swXSA9 ICJYT04iOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNh c2UgVEVMT1BUX0VOQ1JZUFRJT046CisgICAgICAgICAgICAgICAgICAgIHNbMF0gPSAiRU5DLUtF WUlEIjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNl IFRFTE9QVF9DT01QT1JUOgorICAgICAgICAgICAgICAgICAgICAgIHNbMF0gPSAiTk9USUZZLU1P REVNU1RBVEUiOworICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDg6CisgICAg ICAgICAgICAgICAgc3dpdGNoIChvcHQpIHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgVEVMT1BU X0tFUk1JVDoKKyAgICAgICAgICAgICAgICAgICAgc1swXSA9ICJSRVNQLVNUQVJUIjsKKyAgICAg ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIFRFTE9QVF9FTkNS WVBUSU9OOgorICAgICAgICAgICAgICAgICAgICBzWzBdID0gIkRFQy1LRVlJRCI7CisgICAgICAg ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSBURUxPUFRfQ09NUE9S VDoKKyAgICAgICAgICAgICAgICAgICAgICBzWzBdID0gIkZMT1dDT05UUk9MLVNVU1BFTkQiOwor ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDk6CisgICAgICAgICAgICAgICAg c3dpdGNoIChvcHQpIHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgVEVMT1BUX0tFUk1JVDoKKyAg ICAgICAgICAgICAgICAgICAgc1swXSA9ICJSRVNQLVNUT1AiOworICAgICAgICAgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgVEVMT1BUX0NPTVBPUlQ6CisgICAgICAg ICAgICAgICAgICAgICAgc1swXSA9ICJGTE9XQ09OVFJPTC1SRVNVTUUiOworICAgICAgICAgICAg ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJy ZWFrOworICAgICAgICAgICAgICBjYXNlIDEwOgorICAgICAgICAgICAgICAgICAgc3dpdGNoIChv cHQpIHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgVEVMT1BUX0NPTVBPUlQ6CisgICAgICAgICAg ICAgICAgICAgIHNbMF0gPSAiU0VULUxJTkVTVEFURS1NQVNLIjsKKyAgICAgICAgICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICBicmVhazsK KyAgICAgICAgICAgIGNhc2UgMTE6CisgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG9wdCkgewor ICAgICAgICAgICAgICAgICAgY2FzZSBURUxPUFRfQ09NUE9SVDoKKyAgICAgICAgICAgICAgICAg ICAgICBzWzBdID0gIlNFVC1NT0RFTVNUQVRFLU1BU0siOworICAgICAgICAgICAgICAgICAgICAg IGJyZWFrOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgICAgICBjYXNlIDEyOgorICAgICAgICAgICAgICAgICAgc3dpdGNoIChvcHQpIHsKKyAg ICAgICAgICAgICAgICAgIGNhc2UgVEVMT1BUX0NPTVBPUlQ6CisgICAgICAgICAgICAgICAgICAg ICAgc1swXSA9ICJQVVJHRS1EQVRBIjsKKyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIGJyZWFrOworCisKKyAgICAgICAg ICAgIGNhc2UgMTAwOgorICAgICAgICAgICAgICAgICAgc3dpdGNoIChvcHQpIHsKKyAgICAgICAg ICAgICAgICAgIGNhc2UgVEVMT1BUX0NPTVBPUlQ6CisgICAgICAgICAgICAgICAgICAgICAgc1sw XSA9ICJTX1NJR05BVFVSRSI7CisgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug MTAxOgorICAgICAgICAgICAgICAgICAgc3dpdGNoIChvcHQpIHsKKyAgICAgICAgICAgICAgICAg IGNhc2UgVEVMT1BUX0NPTVBPUlQ6CisgICAgICAgICAgICAgICAgICAgICAgc1swXSA9ICJTX1NF VC1CQVVEUkFURSI7CisgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMTAyOgor ICAgICAgICAgICAgICAgICAgc3dpdGNoIChvcHQpIHsKKyAgICAgICAgICAgICAgICAgIGNhc2Ug VEVMT1BUX0NPTVBPUlQ6CisgICAgICAgICAgICAgICAgICAgICAgc1swXSA9ICJTX1NFVC1EQVRB U0laRSI7CisgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMTAzOgorICAgICAg ICAgICAgICAgICAgc3dpdGNoIChvcHQpIHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgVEVMT1BU X0NPTVBPUlQ6CisgICAgICAgICAgICAgICAgICAgICAgc1swXSA9ICJTX1NFVC1QQVJJVFkiOwor ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDEwNDoKKyAgICAgICAgICAgICAg ICAgIHN3aXRjaCAob3B0KSB7CisgICAgICAgICAgICAgICAgICBjYXNlIFRFTE9QVF9DT01QT1JU OgorICAgICAgICAgICAgICAgICAgICAgIHNbMF0gPSAiU19TRVQtU1RPUFNJWkUiOworICAgICAg ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDEwNToKKyAgICAgICAgICAgICAgICAgIHN3 aXRjaCAob3B0KSB7CisgICAgICAgICAgICAgICAgICBjYXNlIFRFTE9QVF9DT01QT1JUOgorICAg ICAgICAgICAgICAgICAgICAgIHNbMF0gPSAiU19TRVQtQ09OVFJPTCI7CisgICAgICAgICAgICAg ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICBi cmVhazsKKyAgICAgICAgICAgIGNhc2UgMTA2OgorICAgICAgICAgICAgICAgICAgc3dpdGNoIChv cHQpIHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgVEVMT1BUX0NPTVBPUlQ6CisgICAgICAgICAg ICAgICAgICAgICAgc1swXSA9ICJTX05PVElGWS1MSU5FU1RBVEUiOworICAgICAgICAgICAgICAg ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgYnJl YWs7CisgICAgICAgICAgICBjYXNlIDEwNzoKKyAgICAgICAgICAgICAgICAgIHN3aXRjaCAob3B0 KSB7CisgICAgICAgICAgICAgICAgICBjYXNlIFRFTE9QVF9DT01QT1JUOgorICAgICAgICAgICAg ICAgICAgICAgIHNbMF0gPSAiU19OT1RJRlktTU9ERU1TVEFURSI7CisgICAgICAgICAgICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICBicmVh azsKKyAgICAgICAgICAgIGNhc2UgMTA4OgorICAgICAgICAgICAgICAgICAgc3dpdGNoIChvcHQp IHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgVEVMT1BUX0NPTVBPUlQ6CisgICAgICAgICAgICAg ICAgICAgICAgc1swXSA9ICJTX0ZMT1dDT05UUk9MLVNVU1BFTkQiOworICAgICAgICAgICAgICAg ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgYnJl YWs7CisgICAgICAgICAgICBjYXNlIDEwOToKKyAgICAgICAgICAgICAgICAgIHN3aXRjaCAob3B0 KSB7CisgICAgICAgICAgICAgICAgICBjYXNlIFRFTE9QVF9DT01QT1JUOgorICAgICAgICAgICAg ICAgICAgICAgIHNbMF0gPSAiU19GTE9XQ09OVFJPTC1SRVNVTUUiOworICAgICAgICAgICAgICAg ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgYnJl YWs7CisgICAgICAgICAgICBjYXNlIDExMDoKKyAgICAgICAgICAgICAgICAgIHN3aXRjaCAob3B0 KSB7CisgICAgICAgICAgICAgICAgICBjYXNlIFRFTE9QVF9DT01QT1JUOgorICAgICAgICAgICAg ICAgICAgICAgIHNbMF0gPSAiU19TRVQtTElORVNUQVRFLU1BU0siOworICAgICAgICAgICAgICAg ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgYnJl YWs7CisgICAgICAgICAgICBjYXNlIDExMToKKyAgICAgICAgICAgICAgICAgIHN3aXRjaCAob3B0 KSB7CisgICAgICAgICAgICAgICAgICBjYXNlIFRFTE9QVF9DT01QT1JUOgorICAgICAgICAgICAg ICAgICAgICAgIHNbMF0gPSAiU19TRVQtTU9ERU1TVEFURS1NQVNLIjsKKyAgICAgICAgICAgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIGJy ZWFrOworICAgICAgICAgICAgY2FzZSAxMTI6CisgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG9w dCkgeworICAgICAgICAgICAgICAgICAgY2FzZSBURUxPUFRfQ09NUE9SVDoKKyAgICAgICAgICAg ICAgICAgICAgICBzWzBdID0gIlNfUFVSR0UtREFUQSI7CisgICAgICAgICAgICAgICAgICAgICAg YnJlYWs7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgICAgICAgfQorICAgICAgICB9CisjaWZkZWYgTV9YRU5JWAorICAgICAgICB7CisgICAg ICAgICAgaW50IGxlbiwgcGFyYW0sIHBhcmFtX2xlbjsKKyAgICAgICAgICBja21ha21zZyggdG5f bXNnLCBUTl9NU0dfTEVOLAorICAgICAgICAgICAgICAgICAgICAiVEVMTkVUIFJDVkQgU0IgIiwK KyAgICAgICAgICAgICAgICAgICAgVEVMT1BUKG9wdCksIiAiLE5VTEwpOworICAgICAgICAgIGxl biA9IHN0cmxlbih0bl9tc2cpOworICAgICAgICAgIGZvciAocGFyYW0gPSAwOyBwYXJhbSA8PSAx NTsgcGFyYW0rKykgeworICAgICAgICAgICAgcGFyYW1fbGVuID0gc3RybGVuKHNbcGFyYW1dKTsK KyAgICAgICAgICAgIGlmIChwYXJhbV9sZW4gPiAwKSB7CisgICAgICAgICAgICAgIHN0cmNweSgm dG5fbXNnW2xlbl0sIHNbcGFyYW1dKTsKKyAgICAgICAgICAgICAgbGVuICs9IHBhcmFtX2xlbjsK KyAgICAgICAgICAgICAgdG5fbXNnW2xlbisrXSA9ICcgJzsKKyAgICAgICAgICAgIH0KKyAgICAg ICAgICB9CisgICAgICAgICAgdG5fbXNnW2xlbl0gPSAnXDAnOworICAgICAgICB9CisjZWxzZSAv KiBNX1hFTklYICovCisgICAgICAgIGNrbWFreG1zZyh0bl9tc2csVE5fTVNHX0xFTiwiVEVMTkVU IFJDVkQgU0IgIixURUxPUFQob3B0KSwiICIsCisgICAgICAgICAgICAgICAgICBOVUxMLE5VTEws TlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCk7CisgICAgICAgIHsKKyAgICAgICAg ICAgIGludCBpOworICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKKyAgICAg ICAgICAgICAgICBpZiAoc1tpXVswXSkgeworICAgICAgICAgICAgICAgICAgICBja3N0cm5jYXQo dG5fbXNnLHNbaV0sVE5fTVNHX0xFTik7CisgICAgICAgICAgICAgICAgICAgIGNrc3RybmNhdCh0 bl9tc2csIiAiLFROX01TR19MRU4pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K KyAgICAgICAgfQorI2VuZGlmIC8qIE1fWEVOSVggKi8KKyAgICAgICAgdG5faGV4KChDSEFSICop dG5fbXNnLFROX01TR19MRU4sJnNiW2ldLG4tMi1pKTsKKyAgICAgICAgaWYgKGZsYWcgPT0gMikK KyAgICAgICAgICBja3N0cm5jYXQodG5fbXNnLCIgU0UiLFROX01TR19MRU4pOworICAgICAgICBl bHNlIGlmIChmbGFnID09IDMpCisgICAgICAgICAgY2tzdHJuY2F0KHRuX21zZywiIElBQyBET05U IixUTl9NU0dfTEVOKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIGNrc3RybmNhdCh0bl9tc2cs IiBJQUMgU0UiLFROX01TR19MRU4pOworICAgICAgICBkZWJ1ZyhGMTAwLHRuX21zZywiIiwwKTsK KyAgICAgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpCisgICAgICAgICAgdG5fZGVidWcodG5fbXNn KTsKKyAgICB9CisgICAgZGVidWcoRjExMSwidG5fc2IiLCJsZW4iLG4pOworI2VuZGlmIC8qIERF QlVHICovCisgICAgKmxlbiA9IG47ICAgICAgICAgICAvKiByZXR1cm4gbGVuZ3RoICovCisgICAg cmV0dXJuKDEpOyAgICAgICAgICAvKiBzdWNjZXNzICovCit9CisKK3N0YXRpYyBjaGFyIHJvd3Nf YnVmWzE2XSA9IHsgMCwgMCB9OyAvKiBMSU5FUyBFbnZpcm9ubWVudCB2YXJpYWJsZSAqLworc3Rh dGljIGNoYXIgY29sc19idWZbMTZdID0geyAwLCAwIH07IC8qIENPTFVNTlMgRW52aW9ybm1lbnQg dmFyaWFibGUgKi8KK3N0YXRpYyBjaGFyIHRlcm1fYnVmWzY0XSA9IHsgMCwgMCB9OyAvKiBURVJN IEVudmlyb25tZW50IHZhcmlhYmxlICovCisKKyNpZmRlZiBDS19DVVJTRVMKKyNpZm5kZWYgVk1T CisjaWZuZGVmIENPSEVSRU5UCitfUFJPVE9UWVAoaW50IHRnZXRlbnQsKGNoYXIgKiwgY2hhciAq KSk7CisjZW5kaWYgLyogQ09IRVJFTlQgKi8KKyNlbHNlCisjaWZkZWYgX19ERUNDCitfUFJPVE9U WVAoaW50IHRnZXRlbnQsKGNoYXIgKiwgY2hhciAqKSk7CisjZW5kaWYgLyogX19ERUNDICovCisj ZW5kaWYgLyogVk1TICovCitleHRlcm4gY2hhciAqIHRybWJ1ZjsgICAgICAgICAgICAgICAgICAg LyogUmVhbCBjdXJzZXMgKi8KKyNlbmRpZiAvKiBDS19DVVJTRVMgKi8KKworI2lmZGVmIENLX0VO Q1JZUFRJT04KK3N0YXRpYyBpbnQKK3RuX25vX2VuY3J5cHQoKQoreworICAgIC8qIFByZXZlbnQg RW5jcnlwdGlvbiBmcm9tIGJlaW5nIG5lZ290aWF0ZWQgKi8KKyAgICBURUxPUFRfTUVfTU9ERShU RUxPUFRfRU5DUllQVElPTikgPSBUTl9OR19SRjsKKyAgICBURUxPUFRfVV9NT0RFKFRFTE9QVF9F TkNSWVBUSU9OKSA9IFROX05HX1JGOworCisgICAgLyogQ2FuY2VsIGFueSBuZWdvdGlhdGlvbiB0 aGF0IG1pZ2h0IGhhdmUgc3RhcnRlZCAqLworICAgIGNrX3RuX2VuY19zdG9wKCk7CisKKyAgICBp ZiAoVEVMT1BUX01FKFRFTE9QVF9FTkNSWVBUSU9OKSB8fAorICAgICAgICAgVEVMT1BUX1VOQU5T V0VSRURfV0lMTChURUxPUFRfRU5DUllQVElPTikpIHsKKyAgICAgICAgVEVMT1BUX01FKFRFTE9Q VF9FTkNSWVBUSU9OKSA9IDA7CisgICAgICAgIGlmICh0bl9zb3B0KFdPTlQsVEVMT1BUX0VOQ1JZ UFRJT04pIDwgMCkKKyAgICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAgIFRFTE9QVF9VTkFO U1dFUkVEX1dPTlQoVEVMT1BUX0VOQ1JZUFRJT04pID0gMTsKKyAgICB9CisgICAgaWYgKFRFTE9Q VF9VKFRFTE9QVF9FTkNSWVBUSU9OKSB8fAorICAgICAgICAgVEVMT1BUX1VOQU5TV0VSRURfRE8o VEVMT1BUX0VOQ1JZUFRJT04pKSB7CisgICAgICAgIFRFTE9QVF9VKFRFTE9QVF9FTkNSWVBUSU9O KSA9IDA7CisgICAgICAgIGlmICh0bl9zb3B0KERPTlQsVEVMT1BUX0VOQ1JZUFRJT04pIDwgMCkK KyAgICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAgIFRFTE9QVF9VTkFOU1dFUkVEX0RPTlQo VEVMT1BUX0VOQ1JZUFRJT04pID0gMTsKKyAgICB9CisgICAgcmV0dXJuKDApOworfQorI2VuZGlm IC8qIENLX0VOQ1JZUFRJT04gKi8KKworLyogVGhlIGZvbGxvd2luZyBub3RlIGNhbWUgZnJvbSB0 aGUgb2xkIFNHQSBuZWdvdGlhdGlvbiBjb2RlLiAgVGhpcyBzaG91bGQgKi8KKy8qIG5vIGxvbmdl ciBiZSBuZWNlc3Nhcnkgd2l0aCB0aGUgTmV3IFRlbG5ldCBuZWdvdGlhdGlvbiBzdGF0ZSBtYWNo aW5lLiAgICovCisvKgorICBOb3RlOiBUaGUgZm9sbG93aW5nIGlzIHByb3BlciBiZWhhdmlvciwg YW5kIHJlcXVpcmVkIGZvciB0YWxraW5nIHRvIHRoZQorICBBcGVydHVzIGludGVyZmFjZSB0byB0 aGUgTk9USVMgbGlicmFyeSBzeXN0ZW0sIGUuZy4gYXQgSW93YSBTdGF0ZSBVOgorICBzY2hvbGFy Lmlhc3RhdGUuZWR1LiAgV2l0aG91dCB0aGlzIHJlcGx5LCB0aGUgc2VydmVyIGhhbmdzIGZvcmV2 ZXIuICBUaGlzCisgIGNvZGUgc2hvdWxkIG5vdCBiZSBsb29wLWluZHVjaW5nLCBzaW5jZSBDLUtl cm1pdCBuZXZlciBzZW5kcyBXSUxMIFNHQSBhcworICBhbiBpbml0aWFsIGJpZCwgc28gaWYgRE8g U0dBIGNvbWVzLCBpdCBpcyBuZXZlciBhbiBBQ0suCisqLworLyoKKyAgUmV0dXJuIHZhbHVlczoK KyAgLTEgPSBUZWxuZXQgT3B0aW9uIG5lZ290aWF0aW9uIGVycm9yCisgIC0yID0gQ29ubmVjdGlv biBjbG9zZWQgYnkgcGVlcgorICAtMyA9IENvbm5lY3Rpb24gY2xvc2VkIGJ5IHVzCisgIDAgID0g U3VjY2VzcworICAxICA9IEVjaG9pbmcgb24KKyAgMiAgPSBFY2hvaW5nIG9mZgorICAzICA9IFF1 b3RlZCBJQUMKKyAgNCAgPSBJS1MgRXZlbnQKKyAgNSAgPSAodW5hc3NpZ25lZCkKKyAgNiAgPSBM b2dvdXQKKyovCisKK3N0YXRpYyBpbnQKKyNpZmRlZiBDS19BTlNJQyAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBURUxORVQgRE8gT1BUSU9OICovCit0bl94ZG9vcChDSEFSIHosIGludCBlY2hv LCBpbnQgKCpmbikoaW50KSkKKyNlbHNlCit0bl94ZG9vcCh6LCBlY2hvLCBmbikgQ0hBUiB6OyBp bnQgZWNobzsgaW50ICgqZm4pKCk7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIHRuX3hkb29w ICovIHsKKyAgICBpbnQgYywgeCwgeSwgbiwgbTsKKyNpZmRlZiBJS1NfT1BUSU9OCisgICAgZXh0 ZXJuIGludCBzZXJ2ZXI7CisjaWZkZWYgTk9JQ1AKKyAgICBleHRlcm4gaW50IGF1dG9kbDsKKyAg ICBpbnQgaW5hdXRvZGwgPSAwLCBjbWRhZGwgPSAxOworI2Vsc2UKKyNpZmRlZiBDS19BVVRPREwK KyAgICBleHRlcm4gaW50IGF1dG9kbCwgaW5hdXRvZGwsIGNtZGFkbDsKKyNlbmRpZiAvKiBDS19B VVRPREwgKi8KKyNlbmRpZiAvKiBOT0lDUCAqLworI2VuZGlmIC8qIElLU19PUFRJT04gKi8KKwor ICAgIC8qIGlmICghSVNfVEVMTkVUKCkpIHJldHVybig3KTsgKi8KKworLyogSGF2ZSBJQUMsIHJl YWQgY29tbWFuZCBjaGFyYWN0ZXIuICovCisKKyAgICB3aGlsZSAoKGMgPSAoKmZuKSgwKSkgPT0g LTEpOyAgICAgICAvKiBSZWFkIGNvbW1hbmQgY2hhcmFjdGVyICovCisgICAgaWYgKGMgPCAwKQor ICAgICAgcmV0dXJuKGMpOworICAgIGMgJj0gMHhGRjsgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIFN0cmlwIGhpZ2ggYml0cyAqLworCisgICAgaWYgKCFURUxDTURfT0soYykpIHsKKyNpZmRl ZiBERUJVRworICAgICAgICBpZiAodG5fZGViIHx8IGRlYnNlcyB8fCBkZWJsb2cpIHsKKyAgICAg ICAgICAgIGNrbWFrbXNnKHRuX21zZyxUTl9NU0dfTEVOLCJURUxORVQgUkNWRCBVTktOT1dOICgi LAorICAgICAgICAgICAgICAgICAgICAgY2tpdG9hKGMpLCIpIixOVUxMKTsKKyAgICAgICAgICAg IGRlYnVnKEYxMDEsdG5fbXNnLCIiLGMpOworICAgICAgICAgICAgaWYgKHRuX2RlYiB8fCBkZWJz ZXMpCisgICAgICAgICAgICAgIHRuX2RlYnVnKHRuX21zZyk7CisgICAgICAgIH0KKyNlbmRpZiAv KiBERUJVRyAqLworICAgICAgICByZXR1cm4oMCk7CisgICAgfQorICAgIGlmICh0dG5wcm90byA9 PSBOUF9OT05FKSB7CisgICAgICAgIGRlYnVnKEYxMDAsInRuX2Rvb3AgZGlzY292ZXJlZCBhIFRl bG5ldCBjb21tYW5kIiwKKyAgICAgICAgICAgICAgInR0bnByb3RvID0gTlBfVEVMTkVUIiwwKTsK KyAgICAgICAgdHRucHJvdG8gPSBOUF9URUxORVQ7CisgICAgfQorICAgIGlmIChzZXNsb2cgJiYg c2Vzc2Z0ID09IFhZRlRfRCkgeyAgIC8qIENvcHkgdG8gc2Vzc2lvbiBsb2csIGlmIGFueS4gKi8K KyAgICAgICAgbG9nY2hhcigoY2hhcil6KTsKKyAgICAgICAgbG9nY2hhcigoY2hhciljKTsKKyAg ICB9CisKKyAgICBpZiAoYyA9PSAoQ0hBUikgSUFDKSAgICAgICAgICAgICAgICAvKiBRdW90ZWQg SUFDICovCisgICAgICByZXR1cm4oMyk7CisKKyAgICBpZiAoYyA8IFNCKSB7ICAgICAgICAgICAg ICAgICAgICAgICAvKiBPdGhlciBjb21tYW5kIHdpdGggbm8gYXJndW1lbnRzLiAqLworI2lmZGVm IERFQlVHCisgICAgICAgIGlmIChkZWJsb2cgfHwgdG5fZGViIHx8IGRlYnNlcykgeworICAgICAg ICAgICAgY2ttYWttc2codG5fbXNnLFROX01TR19MRU4sIlRFTE5FVCBSQ1ZEICIsVEVMQ01EKGMp LE5VTEwsTlVMTCk7CisgICAgICAgICAgICBkZWJ1ZyhGMTAxLHRuX21zZywiIixjKTsKKyAgICAg ICAgICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKSB0bl9kZWJ1Zyh0bl9tc2cpOworICAgICAgICB9 CisjZW5kaWYgLyogREVCVUcgKi8KKyAgICAgICAgc3dpdGNoIChjKSB7ICAgICAgICAgICAgICAg ICAgICAvKiBXaGF0IHdlIHdvdWxkIGxpa2UgdG8gZG8gaGVyZSAgICAqLworICAgICAgICAgIGNh c2UgVE5fR0E6ICAgICAgICAgICAgICAgICAgIC8qIElzIHN1YnN0aXR1dGUgQVNDSUkgY2hhcmFj dGVycyAgICovCisgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgLyogZm9y IHRoZSBUZWxuZXQgQ29tbWFuZCBzbyB0aGF0ICAgKi8KKyAgICAgICAgICBjYXNlIFROX0VMOiAg ICAgICAgICAgICAgICAgICAvKiB0aGUgY29tbWFuZCBtYXkgYmUgcHJvY2Vzc2VkIGJ5ICAqLwor ICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgIC8qIGVpdGhlciB0aGUgaW50 ZXJuYWwgZW11bGF0b3Igb3IgICovCisgICAgICAgICAgY2FzZSBUTl9FQzogICAgICAgICAgICAg ICAgICAgLyogYnkgdGhlIHN1cGVyaW9yIHByb2Nlc3Mgb3Igc2hlbGwgKi8KKyAgICAgICAgICAg IGJyZWFrOworICAgICAgICAgIGNhc2UgVE5fQVlUOgorI2lmZGVmIE9TMgorICAgICAgICAgICAg UmVxdWVzdFRlbG5ldE11dGV4KCBTRU1fSU5ERUZJTklURV9XQUlUICk7CisjZW5kaWYKKyAgICAg ICAgICAgIHR0b2woKENIQVIgKikiW1llc11cMDE1XDAxMiIsNyk7CisjaWZkZWYgT1MyCisgICAg ICAgICAgICBSZWxlYXNlVGVsbmV0TXV0ZXgoKTsKKyNlbmRpZgorICAgICAgICAgICAgYnJlYWs7 CisgICAgICAgICAgY2FzZSBUTl9BTzoKKyNpZmRlZiBCRVRBREVCVUcKKyAgICAgICAgICAgIGJs ZWVwKEJQX05PVEUpOworI2VuZGlmIC8qIEJFVEFERUJVRyAqLworICAgICAgICAgICAgYnJlYWs7 CisgICAgICAgICAgY2FzZSBUTl9JUDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNh c2UgQlJFQUs6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIFROX0RNOgorICAg ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBUTl9OT1A6CisgICAgICAgICAgICBicmVh azsKKyAgICAgICAgICBjYXNlIFNFOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2Fz ZSBUTl9FT1I6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIFROX0FCT1JUOgor ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBUTl9TVVNQOgorICAgICAgICAgICAg YnJlYWs7CisgICAgICAgICAgY2FzZSBUTl9FT0Y6CisgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgICBjYXNlIFROX1NBSzoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg IHJldHVybigwKTsKKyAgICB9CisKKy8qIFNCLCBXSUxMLCBXT05ULCBETywgb3IgRE9OVCBuZWVk IG1vcmUgYnl0ZXMuLi4gKi8KKworICAgIGlmICgoeCA9ICgqZm4pKDApKSA8IDApICAgICAgICAg ICAgIC8qIEdldCB0aGUgb3B0aW9uLiAqLworICAgICAgcmV0dXJuKHgpOworICAgIHggJj0gMHhm ZjsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRyaW0gdG8gOCBiaXRzLiAqLworCisgICAg aWYgKHNlc2xvZyAmJiBzZXNzZnQgPT0gWFlGVF9EKSB7ICAgLyogU2Vzc2lvbiBsb2cgKi8KKyAg ICAgICAgbG9nY2hhcigoY2hhcikgeCk7CisgICAgfQorI2lmZGVmIERFQlVHCisgICAgaWYgKChk ZWJsb2cgfHwgdG5fZGViIHx8IGRlYnNlcykgJiYgYyAhPSBTQikgeworICAgICAgICBja21ha21z Zyh0bl9tc2csVE5fTVNHX0xFTiwiVEVMTkVUIFJDVkQgIixURUxDTUQoYyksIiAiLFRFTE9QVCh4 KSk7CisgICAgICAgIGRlYnVnKEYxMDEsdG5fbXNnLCIiLHgpOworICAgICAgICBpZiAodG5fZGVi IHx8IGRlYnNlcykgdG5fZGVidWcodG5fbXNnKTsKKyAgICB9CisjZW5kaWYgLyogREVCVUcgKi8K KyAgICAvKiBOb3cgaGFuZGxlIHRoZSBjb21tYW5kICovCisgICAgc3dpdGNoIChjKSB7CisgICAg ICBjYXNlIFdJTEw6CisjaWZkZWYgQ0tfU1NMCisgICAgICAgIGlmIChURUxPUFRfU0IoVEVMT1BU X1NUQVJUX1RMUykuc3RhcnRfdGxzLm1lX2ZvbGxvd3MpCisgICAgICAgICAgICByZXR1cm4oMCk7 CisjZW5kaWYgLyogQ0tfU1NMICovCisjaWZkZWYgQ0tfRk9SV0FSRF9YCisgICAgICAgICAgaWYg KHggPT0gVEVMT1BUX0ZPUldBUkRfWCkgeworICAgICAgICAgICAgICBpZiAoIWZ3ZHhfc2VydmVy X2F2YWlsKCkgfHwgIShmd2R4X25vX2VuY3J5cHQgfHwKKyNpZmRlZiBDS19TU0wKKyAgICAgICAg ICAgICAgICAgKHNzbF9hY3RpdmVfZmxhZyB8fCB0bHNfYWN0aXZlX2ZsYWcpCisjZWxzZSAvKiBD S19TU0wgKi8KKyAgICAgICAgICAgICAgICAgMAorI2VuZGlmIC8qIENLX1NTTCAqLworICAgICAg ICAgICAgICAgICB8fAorI2lmZGVmIENLX0VOQ1JZUFRJT04KKyAgICAgICAgICAgICAgICAgKGNr X3RuX2VuY3J5cHRpbmcoKSAmJiBja190bl9kZWNyeXB0aW5nKCkpCisjZWxzZSAvKiBDS19FTkNS WVBUSU9OICovCisgICAgICAgICAgICAgICAgIDAKKyNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICov CisgICAgICAgICAgICAgICAgICkpIHsKKyAgICAgICAgICAgICAgICAgIFRFTE9QVF9VX01PREUo VEVMT1BUX0ZPUldBUkRfWCkgPSBUTl9OR19SRjsKKyAgICAgICAgICAgICAgICAgIFRFTE9QVF9N RV9NT0RFKFRFTE9QVF9GT1JXQVJEX1gpID0gVE5fTkdfUkY7CisgICAgICAgICAgICAgIH0KKyAg ICAgICAgICB9CisjZW5kaWYgLyogQ0tfRk9SV0FSRF9YICovCisgICAgICAgIGlmICghVEVMT1BU X09LKHgpIHx8IFRFTE9QVF9VX01PREUoeCkgPT0gVE5fTkdfUkYpIHsKKyAgICAgICAgICAgIGlm ICh0bl9zb3B0KERPTlQseCkgPCAwKQorICAgICAgICAgICAgICByZXR1cm4oLTEpOworICAgICAg ICAgICAgaWYgKFRFTE9QVF9VTkFOU1dFUkVEX0RPKHgpKQorICAgICAgICAgICAgICAgIFRFTE9Q VF9VTkFOU1dFUkVEX0RPKHgpID0gMDsKKyAgICAgICAgfSBlbHNlIGlmICghVEVMT1BUX1UoeCkp IHsKKyAgICAgICAgICAgIGlmICghVEVMT1BUX1VOQU5TV0VSRURfRE8oeCkpIHsKKyAgICAgICAg ICAgICAgICBpZiAodG5fc29wdChETyx4KSA8IDApCisgICAgICAgICAgICAgICAgICByZXR1cm4g LTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoVEVMT1BUX1VOQU5TV0VSRURfRE8o eCkpCisgICAgICAgICAgICAgICAgVEVMT1BUX1VOQU5TV0VSRURfRE8oeCkgPSAwOworICAgICAg ICAgICAgVEVMT1BUX1UoeCkgPSAxOworCisgICAgICAgICAgICBzd2l0Y2ggKHgpIHsKKyNpZmRl ZiBDS19TU0wKKyAgICAgICAgICAgICAgY2FzZSBURUxPUFRfU1RBUlRfVExTOgorICAgICAgICAg ICAgICAgIC8qCisgICAgICAgICAgICAgICAgICAgSWYgbXkgcHJvcG9zYWwgaXMgYWNjZXB0ZWQs IGF0IHRoaXMgcG9pbnQgdGhlIFRlbG5ldAorICAgICAgICAgICAgICAgICAgIHByb3RvY29sIGlz IHR1cm5lZCBvZmYgYW5kIGEgVExTIG5lZ290aWF0aW9uIHRha2VzCisgICAgICAgICAgICAgICAg ICAgcGxhY2UuCisKKyAgICAgICAgICAgICAgICAgICBTdGFydCBieSBzZW5kaW5nIFNCIFNUQVJU X1RMUyBGT0xMT1dTICB0byBzaWduYWwKKyAgICAgICAgICAgICAgICAgICB3ZSBhcmUgcmVhZHku ICBXYWl0IGZvciB0aGUgcGVlciB0byBzZW5kIHRoZSBzYW1lCisgICAgICAgICAgICAgICAgICAg YW5kIHRoZW4gc3RhcnQgdGhlIFRMUyBuZWdvdGlhdGlvbi4KKworICAgICAgICAgICAgICAgICAg IElmIHRoZSBUTFMgbmVnb3RpYXRpb24gc3VjY2VlZHMgd2UgY2FsbCB0bl9pbmkoKQorICAgICAg ICAgICAgICAgICAgIGFnYWluIHRvIHJlc2V0IHRoZSB0ZWxuZXQgc3RhdGUgbWFjaGluZSBhbmQg cmVzdGFydAorICAgICAgICAgICAgICAgICAgIHRoZSBuZWdvdGlhdGlvbiBwcm9jZXNzIG92ZXIg dGhlIG5vdyBzZWN1cmUgbGluay4KKworICAgICAgICAgICAgICAgICAgIElmIHRoZSBUTFMgbmVn b3RpYXRpb24gZmFpbHMsIHdlIGNhbGwgdHRjbG9zKCkKKyAgICAgICAgICAgICAgICAgICB0byB0 ZXJtaW5hdGUgdGhlIGNvbm5lY3Rpb24uCisKKyAgICAgICAgICAgICAgICAgICBPbmx5IHRoZSBz ZXJ2ZXIgc2hvdWxkIHJlY2VpdmUgYSBXSUxMIFNUQVJUX1RMUworICAgICAgICAgICAgICAgICAq LworICAgICAgICAgICAgICAgIHRuX3NzYm9wdChURUxPUFRfU1RBUlRfVExTLDEsTlVMTCwwKTsK KyAgICAgICAgICAgICAgICBURUxPUFRfU0IoVEVMT1BUX1NUQVJUX1RMUykuc3RhcnRfdGxzLm1l X2ZvbGxvd3MgPSAxOworICAgICAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIENLX1NTTCAq LworCisjaWZkZWYgQ0tfQVVUSEVOVElDQVRJT04KKyAgICAgICAgICAgICAgY2FzZSBURUxPUFRf QVVUSEVOVElDQVRJT046IHsKKyAgICAgICAgICAgICAgICAgIC8qIFdlIG5vdyBoYXZlIHRvIHBl cmZvcm0gYSBTQiBTRU5EIHRvIGlkZW50aWZ5IHRoZSAgKi8KKyAgICAgICAgICAgICAgICAgIC8q IHN1cHBvcnRlZCBhdXRoZW50aWNhdGlvbiB0eXBlcyB0byB0aGUgb3RoZXIgc2lkZS4gKi8KKyAg ICAgICAgICAgICAgICAgIGV4dGVybiBpbnQgYXV0aGVudGljYXRpb25fdmVyc2lvbjsKKworI2lm ZGVmIENLX1NTTAorICAgICAgICAgICAgICAgICAgLyogaWYgd2UgaGF2ZSBhbiBvdXRzdGFuZGlu ZyBETyBTVEFSVF9UTFMgdGhlbiB3ZSBtdXN0IAorICAgICAgICAgICAgICAgICAgICogd2FpdCBm b3IgdGhlIHJlc3BvbnNlIGJlZm9yZSB3ZSBkZXRlcm1pbmUgd2hhdCB0byBkbworICAgICAgICAg ICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICBpZiAoVEVMT1BUX1VOQU5TV0VSRURfRE8o VEVMT1BUX1NUQVJUX1RMUykpIHsKKyAgICAgICAgICAgICAgICAgICAgICBURUxPUFRfU0IoVEVM T1BUX1NUQVJUX1RMUykuc3RhcnRfdGxzLmF1dGhfcmVxdWVzdCA9IDE7CisgICAgICAgICAgICAg ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICB9CisjZW5kaWYgLyogQ0tfU1NMICov CisgICAgICAgICAgICAgICAgICBhdXRoZW50aWNhdGlvbl92ZXJzaW9uID0gQVVUSFRZUEVfQVVU TzsKKyAgICAgICAgICAgICAgICAgIGNrX3RuX2F1dGhfcmVxdWVzdCgpOworICAgICAgICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBDS19BVVRIRU5USUNBVElP TiAqLworI2lmZGVmIENLX0VOQ1JZUFRJT04KKyAgICAgICAgICAgICAgY2FzZSBURUxPUFRfRU5D UllQVElPTjoKKyAgICAgICAgICAgICAgICBpZiAoIShURUxPUFRfTUUoVEVMT1BUX0FVVEhFTlRJ Q0FUSU9OKSB8fAorICAgICAgICAgICAgICAgICAgICAgIFRFTE9QVF9VKFRFTE9QVF9BVVRIRU5U SUNBVElPTikpCisgICAgICAgICAgICAgICAgICAgICkgeworICAgICAgICAgICAgICAgICAgICBp ZiAodG5fc29wdChET05ULHgpIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTEp OworICAgICAgICAgICAgICAgICAgICBURUxPUFRfVSh4KSA9IDA7CisgICAgICAgICAgICAgICAg fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNrX3RuX2F1dGhfaW5fcHJvZ3Jlc3Mo KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgVEVMT1BUX1NCKFRFTE9QVF9FTkNSWVBUSU9O KS5lbmNyeXB0Lm5lZWRfdG9fc2VuZCA9IDE7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7 CisgICAgICAgICAgICAgICAgICAgICAgICAvKiBQZXJmb3JtIHN1Ym5lZ290aWF0aW9uICovCisg ICAgICAgICAgICAgICAgICAgICAgICBja19lbmNyeXB0X3NlbmRfc3VwcG9ydCgpOworICAgICAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICghKFRFTE9QVF9NRSh4KSB8 fCBURUxPUFRfVU5BTlNXRVJFRF9XSUxMKHgpKQorICAgICAgICAgICAgICAgICAgICAgICAgJiYg VEVMT1BUX01FX01PREUoeCkgIT0gVE5fTkdfUkYpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg IGlmICh0bl9zb3B0KFdJTEwsIHgpIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0 dXJuKC0xKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFRFTE9QVF9VTkFOU1dFUkVEX1dJTEwo eCkgPSAxOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KKyNpZmRlZiBJS1Nf T1BUSU9OCisgICAgICAgICAgICAgIGNhc2UgVEVMT1BUX0tFUk1JVDoKKyAgICAgICAgICAgICAg ICBpZiAoIVRFTE9QVF9NRSh4KSkgeworICAgICAgICAgICAgICAgICAgICAvKiBUZWxsIHRoZSBv dGhlciBzaWRlIHdoYXQgU3RhcnQgb2YgUGFja2V0IENoYXJhY3RlciAqLworICAgICAgICAgICAg ICAgICAgICB0bl9zaWtzKEtFUk1JVF9TT1ApOyAvKiBTT1AgKi8KKworICAgICAgICAgICAgICAg ICAgICBpZiAoIVRFTE9QVF9VTkFOU1dFUkVEX1dJTEwoeCkgJiYKKyAgICAgICAgICAgICAgICAg ICAgICAgIFRFTE9QVF9NRV9NT0RFKHgpICE9IFROX05HX1JGKSB7CisgICAgICAgICAgICAgICAg ICAgICAgICBpZiAodG5fc29wdChXSUxMLCB4KSA8IDApCisgICAgICAgICAgICAgICAgICAgICAg ICAgIHJldHVybigtMSk7CisgICAgICAgICAgICAgICAgICAgICAgICBURUxPUFRfVU5BTlNXRVJF RF9XSUxMKHgpID0gMTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBJS1NfT1BUSU9OICovCisgICAgICAg ICAgICAgIGNhc2UgVEVMT1BUX0JJTkFSWToKKyAgICAgICAgICAgICAgICBpZiAoIVRFTE9QVF9N RSh4KSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIVRFTE9QVF9VTkFOU1dFUkVEX1dJTEwo eCkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIFRFTE9QVF9NRV9NT0RFKHgpID49IFROX05H X1JRKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodG5fc29wdChXSUxMLCB4KSA8IDAp CisgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAgICAgICAgICAg ICAgICAgICBURUxPUFRfVU5BTlNXRVJFRF9XSUxMKHgpID0gMTsKKyAgICAgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg ICAgICAgY2FzZSBURUxPUFRfRUNITzoKKyAgICAgICAgICAgICAgICBpZiAoZWNobykgeworICAg ICAgICAgICAgICAgICAgICBpZiAoVEVMT1BUX1VOQU5TV0VSRURfRE8oeCkpCisgICAgICAgICAg ICAgICAgICAgICAgVEVMT1BUX1VOQU5TV0VSRURfRE8oeCkgPSAwOworICAgICAgICAgICAgICAg ICAgICByZXR1cm4oMik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFr OworICAgICAgICAgICAgICBjYXNlIFRFTE9QVF9UVFlQRToKKyAgICAgICAgICAgICAgICAvKiBT QiBUVFlQRSBTRU5EICovCisgICAgICAgICAgICAgICAgdG5fc3Nib3B0KFRFTE9QVF9UVFlQRSxU RUxRVUFMX1NFTkQsTlVMTCwwKTsKKyAgICAgICAgICAgICAgICBURUxPUFRfVU5BTlNXRVJFRF9T QihURUxPUFRfVFRZUEUpPTE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisjaWZkZWYgQ0tfRU5W SVJPTk1FTlQKKyAgICAgICAgICAgICAgY2FzZSBURUxPUFRfTkVXRU5WSVJPTjogICAvKiBTQiBO RVctRU5WSVJPTiBTRU5EICovCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg Y2hhciByZXF1ZXN0WzZdOyAgICAgIC8qIHJlcXVlc3QgaXQgKi8KKyAgICAgICAgICAgICAgICAg IHNwcmludGYocmVxdWVzdCwiJWNVU0VSIixURUxfRU5WX1ZBUik7ICAgICAgICAvKiBzYWZlICov CisgICAgICAgICAgICAgICAgICB0bl9zc2JvcHQoVEVMT1BUX05FV0VOVklST04sVEVMUVVBTF9T RU5ELHJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybGVuKHJlcXVlc3Qp KTsKKyAgICAgICAgICAgICAgICAgIFRFTE9QVF9VTkFOU1dFUkVEX1NCKFRFTE9QVF9ORVdFTlZJ Uk9OKT0xOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyNlbmRp ZiAvKiBDS19FTlZJUk9OTUVOVCAqLworICAgICAgICAgICAgfSAvKiBzd2l0Y2ggKi8KKyAgICAg ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChURUxPUFRfVU5BTlNXRVJFRF9ETyh4KSkKKyAg ICAgICAgICAgICAgICBURUxPUFRfVU5BTlNXRVJFRF9ETyh4KSA9IDA7CisgICAgICAgIH0KKyAg ICAgICAgYnJlYWs7CisgICAgICBjYXNlIFdPTlQ6CisjaWZkZWYgQ0tfU1NMCisgICAgICAgIGlm IChURUxPUFRfU0IoVEVMT1BUX1NUQVJUX1RMUykuc3RhcnRfdGxzLm1lX2ZvbGxvd3MpCisgICAg ICAgICAgICByZXR1cm4oMCk7CisjZW5kaWYgLyogQ0tfU1NMICovCisgICAgICAgIGlmIChURUxP UFRfVSh4KSB8fCBURUxPUFRfVU5BTlNXRVJFRF9ETyh4KSkgeworICAgICAgICAgICAgLyogRGF2 aWQgQm9ybWFuIHNheXMgd2Ugc2hvdWxkIG5vdCByZXNwb25kIERPTlQgd2hlbgorICAgICAgICAg ICAgICogdGhlIFdPTlQgaXMgYSByZXNwb25zZSB0byBhIERPIHRoYXQgd2Ugc2VudC4KKyAgICAg ICAgICAgICAqIE5vciBzaG91bGQgd2Ugc2VuZCBvbmUgaWYgdGhlIHN0YXRlIGlzIGFscmVhZHkg V09OVAorICAgICAgICAgICAgICogc3VjaCBhcyB3aGVuIHdlIGRvIG5vdCByZWNvZ25pemUgdGhl IG9wdGlvbiBzaW5jZQorICAgICAgICAgICAgICogb3B0aW9ucyBhcmUgaW5pdGlhbGl6ZWQgaW4g dGhlIFdPTlQvRE9OVCBzdGF0ZS4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgaWYgKCEo VEVMT1BUX1VOQU5TV0VSRURfRE8oeCkgfHwgVEVMT1BUX1VOQU5TV0VSRURfRE9OVCh4KSkpCisg ICAgICAgICAgICAgIGlmICh0bl9zb3B0KERPTlQseCkgPCAwKQorICAgICAgICAgICAgICAgIHJl dHVybigtMSk7CisgICAgICAgICAgICBpZiAoVEVMT1BUX1VOQU5TV0VSRURfRE9OVCh4KSkKKyAg ICAgICAgICAgICAgICBURUxPUFRfVU5BTlNXRVJFRF9ET05UKHgpID0gMDsKKyAgICAgICAgICAg IGlmIChURUxPUFRfVU5BTlNXRVJFRF9ETyh4KSkKKyAgICAgICAgICAgICAgICBURUxPUFRfVU5B TlNXRVJFRF9ETyh4KSA9IDA7CisgICAgICAgICAgICBpZiAoVEVMT1BUX1UoeCkpIHsKKyAgICAg ICAgICAgICAgICBURUxPUFRfVSh4KSA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBz d2l0Y2goeCkgeworI2lmZGVmIENLX1NTTAorICAgICAgICAgICAgY2FzZSBURUxPUFRfU1RBUlRf VExTOgorICAgICAgICAgICAgICAgIGlmIChzc3RlbG5ldCkgeworICAgICAgICAgICAgICAgICAg ICBpZiAoVEVMT1BUX1VfTU9ERSh4KSA9PSBUTl9OR19NVSkgeworICAgICAgICAgICAgICAgICAg ICAgICAgcHJpbnRmKCJUZWxuZXQgU3RhcnQtVExTIHJlZnVzZWQuXG4iKTsKKyAgICAgICAgICAg ICAgICAgICAgICAgIHR0Y2xvcygwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdoeWNsb3Nl ZCA9IFdDX1RFTE9QVDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybigtMyk7CisgICAg ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKFRFTE9QVF9TQih4KS5z dGFydF90bHMuYXV0aF9yZXF1ZXN0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBleHRlcm4g aW50IGF1dGhlbnRpY2F0aW9uX3ZlcnNpb247CisgICAgICAgICAgICAgICAgICAgICAgICBURUxP UFRfU0IoeCkuc3RhcnRfdGxzLmF1dGhfcmVxdWVzdCA9IDA7CisgICAgICAgICAgICAgICAgICAg ICAgICBhdXRoZW50aWNhdGlvbl92ZXJzaW9uID0gQVVUSFRZUEVfQVVUTzsKKyAgICAgICAgICAg ICAgICAgICAgICAgIGNrX3RuX2F1dGhfcmVxdWVzdCgpOworICAgICAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIENL X1NTTCAqLworI2lmZGVmIENLX0FVVEhFTlRJQ0FUSU9OCisgICAgICAgICAgICAgIGNhc2UgVEVM T1BUX0FVVEhFTlRJQ0FUSU9OOgorICAgICAgICAgICAgICAgIGlmIChzc3RlbG5ldCAmJiBURUxP UFRfVV9NT0RFKHgpID09IFROX05HX01VKSB7CisgICAgICAgICAgICAgICAgICAgIHByaW50Zigi VGVsbmV0IGF1dGhlbnRpY2F0aW9uIHJlZnVzZWQuXG4iKTsKKyAgICAgICAgICAgICAgICAgICAg dHRjbG9zKDApOworICAgICAgICAgICAgICAgICAgICB3aHljbG9zZWQgPSBXQ19URUxPUFQ7Cisg ICAgICAgICAgICAgICAgICAgIHJldHVybigtMyk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlm IChURUxPUFRfVV9NT0RFKHgpID09IFROX05HX1JRKSB7CisgICAgICAgICAgICAgICAgICAgIFRF TE9QVF9VX01PREUoeCkgPSBUTl9OR19BQzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgICAgaWYgKGNrX3RuX2F1dGhfaW5fcHJvZ3Jlc3MoKSkKKyAgICAgICAgICAgICAgICAgIHBy aW50ZigiVGVsbmV0IGF1dGhlbnRpY2F0aW9uIHJlZnVzZWQuXG4iKTsKKyNpZmRlZiBDS19FTkNS WVBUSU9OCisgICAgICAgICAgICAgICAgaWYgKHNzdGVsbmV0KSB7CisgICAgICAgICAgICAgICAg ICAgIGlmICh0bl9ub19lbmNyeXB0KCk8MCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy bigtMSk7CisgICAgICAgICAgICAgICAgfQorI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KKyAg ICAgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBDS19BVVRIRU5USUNBVElPTiAqLworI2lm ZGVmIENLX0VOQ1JZUFRJT04KKyAgICAgICAgICAgICAgY2FzZSBURUxPUFRfRU5DUllQVElPTjoK KyAgICAgICAgICAgICAgICBja190bl9lbmNfc3RvcCgpOworICAgICAgICAgICAgICAgIGJyZWFr OworI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KKyNpZmRlZiBJS1NfT1BUSU9OCisgICAgICAg ICAgICAgIGNhc2UgVEVMT1BUX0tFUk1JVDoKKyAgICAgICAgICAgICAgICBURUxPUFRfU0IoeCku a2VybWl0LnVfc3RhcnQgPSAwOworICAgICAgICAgICAgICAgIFRFTE9QVF9TQih4KS5rZXJtaXQu bWVfcmVxX3N0YXJ0ID0gMDsKKyAgICAgICAgICAgICAgICBURUxPUFRfU0IoeCkua2VybWl0Lm1l X3JlcV9zdG9wID0gMDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBJS1NfT1BU SU9OICovCisgICAgICAgICAgICAgIGNhc2UgVEVMT1BUX05BV1M6IHsKKyAgICAgICAgICAgICAg ICAgIC8qIFRoZSBjbGllbnQgZG9lcyBub3Qgc3VwcG9ydCBOQVdTLiAqLworICAgICAgICAgICAg ICAgICAgLyogQXNzdW1lIGEgaGVpZ2h0IG9mIDI0IGFuZCBhIHdpZHRoIG9mIDgwICovCisgICAg ICAgICAgICAgICAgICBpZiAoc3N0ZWxuZXQKKyNpZmRlZiBJS1NECisgICAgICAgICAgICAgICAg ICAgfHwgaW5zZXJ2ZXIKKyNlbmRpZiAvKiBJS1NEICovCisgICAgICAgICAgICAgICAgICAgKSB7 CisgICAgICAgICAgICAgICAgICAgICAgaW50IHcgPSA4MCwgaCA9IDI0OworI2lmbmRlZiBOT0xP Q0FMCisgICAgICAgICAgICAgICAgICAgICAgaWYgKHRjcF9pbmNvbWluZykgeworI2lmZGVmIE9T MgorICAgICAgICAgICAgICAgICAgICAgICAgICB0dF9jb2xzW1ZURVJNXSA9IHc7CisgICAgICAg ICAgICAgICAgICAgICAgICAgIHR0X3Jvd3NbVlRFUk1dID0gaDsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgVnNjcm5TZXRXaWR0aChWVEVSTSwgdyk7CisgICAgICAgICAgICAgICAgICAgICAg ICAgIFZzY3JuU2V0SGVpZ2h0KFZURVJNLCBoKyh0dF9zdGF0dXNbVlRFUk1dPzE6MCkpOworI2Vs c2UgLyogT1MyICovCisgICAgICAgICAgICAgICAgICAgICAgICAgIHR0X2NvbHMgPSB3OworICAg ICAgICAgICAgICAgICAgICAgICAgICB0dF9yb3dzID0gaDsKKyNlbmRpZiAvKiBPUzIgKi8KKyAg ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworI2lmZGVmIE9TMgorICAgICAgICAgICAgICAg ICAgICAgICAgICB0dF9jb2xzW1ZDTURdID0gdzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg dHRfcm93c1tWQ01EXSA9IGg7CisgICAgICAgICAgICAgICAgICAgICAgICAgIFZzY3JuU2V0V2lk dGgoVkNNRCwgdyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIFZzY3JuU2V0SGVpZ2h0KFZD TUQsIGgpOworI2VuZGlmIC8qIE9TMiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICBjbWRf Y29scyA9IHc7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZF9yb3dzID0gaDsKKyAgICAg ICAgICAgICAgICAgICAgICB9CisjZWxzZSAvKiBOT0xPQ0FMICovCisgICAgICAgICAgICAgICAg ICAgICAgY21kX2NvbHMgPSB3OworICAgICAgICAgICAgICAgICAgICAgIGNtZF9yb3dzID0gaDsK KyNlbmRpZiAvKiBOT0xPQ0FMICovCisgICAgICAgICAgICAgICAgICAgICAgLyogQWRkIExJTkVT IGFuZCBDT0xVTU5TIHRvIHRoZSBlbnZpcm9ubWVudCAqLworICAgICAgICAgICAgICAgICAgICAg IGNrbWFrbXNnKChjaGFyICopcm93c19idWYsMTYsIkxJTkVTPSIsY2tpdG9hKGgpLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLE5VTEwpOworICAgICAgICAgICAgICAgICAg ICAgIGNrbWFrbXNnKChjaGFyICopY29sc19idWYsMTYsIkNPTFVNTlM9Iixja2l0b2EodyksCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsTlVMTCk7CisjaWZkZWYgT1MyT1JV TklYCisjaWZuZGVmIE5PUFVURU5WCisgICAgICAgICAgICAgICAgICAgICAgcHV0ZW52KHJvd3Nf YnVmKTsKKyAgICAgICAgICAgICAgICAgICAgICBwdXRlbnYoY29sc19idWYpOworI2VuZGlmIC8q IE5PUFVURU5WICovCisjZW5kaWYgLyogT1MyT1JVTklYICovCisgICAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAg ICBjYXNlIFRFTE9QVF9FQ0hPOgorICAgICAgICAgICAgICAgIGlmICghZWNobykgeworICAgICAg ICAgICAgICAgICAgICBpZiAoVEVMT1BUX1VOQU5TV0VSRURfRE8oeCkpCisgICAgICAgICAgICAg ICAgICAgICAgVEVMT1BUX1VOQU5TV0VSRURfRE8oeCkgPSAwOworICAgICAgICAgICAgICAgICAg ICByZXR1cm4oMSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKFRFTE9QVF9V TkFOU1dFUkVEX0RPTlQoeCkpCisgICAgICAgICAgICAgICAgVEVMT1BUX1VOQU5TV0VSRURfRE9O VCh4KSA9IDA7CisgICAgICAgICAgICBpZiAoVEVMT1BUX1VOQU5TV0VSRURfRE8oeCkpCisgICAg ICAgICAgICAgICAgVEVMT1BUX1VOQU5TV0VSRURfRE8oeCkgPSAwOworICAgICAgICB9CisgICAg ICAgIGlmIChURUxPUFRfVV9NT0RFKHgpID09IFROX05HX01VKSB7CisgICAgICAgICAgICBja21h a21zZyggdG5fbXNnLFROX01TR19MRU4sCisgICAgICAgICAgICAgICAgICAgICAgIlBlZXIgcmVm dXNlcyBURUxORVQgRE8gIixURUxPUFQoeCksCisgICAgICAgICAgICAgICAgICAgICAgIiBuZWdv dGlhdGlvbnMgLSB0ZXJtaW5hdGluZyBjb25uZWN0aW9uIixOVUxMCisgICAgICAgICAgICAgICAg ICAgICk7CisgICAgICAgICAgICBkZWJ1ZyhGMTAwLHRuX21zZywiIiwwKTsKKyAgICAgICAgICAg IGlmICh0bl9kZWIgfHwgZGVic2VzKSB0bl9kZWJ1Zyh0bl9tc2cpOworICAgICAgICAgICAgcHJp bnRmKCIlc1xuIix0bl9tc2cpOworICAgICAgICAgICAgdHRjbG9zKDApOworICAgICAgICAgICAg d2h5Y2xvc2VkID0gV0NfVEVMT1BUOworICAgICAgICAgICAgcmV0dXJuKC0zKTsKKyAgICAgICAg fQorI2lmZGVmIENPTU1FTlQKKyAgICAgICAgaWYgKHggPT0gVEVMT1BUX0VDSE8gJiYgIWVjaG8p IC8qIFNwZWNpYWwgaGFuZGxpbmcgZm9yIGVjaG8gKi8KKyAgICAgICAgICByZXR1cm4oMSk7ICAg ICAgICAgICAgICAgICAgIC8qIGJlY2F1c2Ugd2UgYWxsb3cgJ2R1cGxleCcgKi8KKyNlbmRpZiAv KiBDT01NRU5UICovCisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIERPOgorI2lmZGVmIENL X1NTTAorICAgICAgICBpZiAoVEVMT1BUX1NCKFRFTE9QVF9TVEFSVF9UTFMpLnN0YXJ0X3Rscy5t ZV9mb2xsb3dzKQorICAgICAgICAgICAgcmV0dXJuKDApOworI2VuZGlmIC8qIENLX1NTTCAqLwor ICAgICAgICBpZiAoIVRFTE9QVF9PSyh4KSB8fCBURUxPUFRfTUVfTU9ERSh4KSA9PSBUTl9OR19S RikgeworICAgICAgICAgICAgaWYgKHRuX3NvcHQoV09OVCx4KSA8IDApCisgICAgICAgICAgICAg IHJldHVybigtMSk7CisgICAgICAgICAgICBpZiAoVEVMT1BUX1VOQU5TV0VSRURfV0lMTCh4KSkK KyAgICAgICAgICAgICAgICBURUxPUFRfVU5BTlNXRVJFRF9XSUxMKHgpID0gMDsKKyAgICAgICAg fSBlbHNlIGlmICghVEVMT1BUX01FKHgpKSB7CisgICAgICAgICAgICBpZiAoIVRFTE9QVF9VTkFO U1dFUkVEX1dJTEwoeCkpIHsKKyAgICAgICAgICAgICAgICBpZiAodG5fc29wdChXSUxMLHgpIDwg MCkKKyAgICAgICAgICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAgICAgICB9CisgICAgICAg ICAgICBpZiAoVEVMT1BUX1VOQU5TV0VSRURfV0lMTCh4KSkKKyAgICAgICAgICAgICAgICBURUxP UFRfVU5BTlNXRVJFRF9XSUxMKHgpID0gMDsKKyAgICAgICAgICAgIFRFTE9QVF9NRSh4KSA9IDE7 CisKKyAgICAgICAgICAgIHN3aXRjaCAoeCkgeworI2lmZGVmIENLX1NTTAorICAgICAgICAgICAg ICBjYXNlIFRFTE9QVF9TVEFSVF9UTFM6CisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAg ICAgICAgICBJZiBteSBwcm9wb3NhbCBpcyBhY2NlcHRlZCBhdCB0aGlzIHBvaW50IHRoZSBUZWxu ZXQKKyAgICAgICAgICAgICAgICAgICBwcm90b2NvbCBpcyB0dXJuZWQgb2ZmIGFuZCBhIFRMUyBu ZWdvdGlhdGlvbiB0YWtlcworICAgICAgICAgICAgICAgICAgIHBsYWNlLgorCisgICAgICAgICAg ICAgICAgICAgU3RhcnQgYnkgc2VuZGluZyBTQiBTVEFSVF9UTFMgRk9MTE9XUyAgdG8gc2lnbmFs CisgICAgICAgICAgICAgICAgICAgd2UgYXJlIHJlYWR5LiAgV2FpdCBmb3IgdGhlIHBlZXIgdG8g c2VuZCB0aGUgc2FtZQorICAgICAgICAgICAgICAgICAgIGFuZCB0aGVuIHN0YXJ0IHRoZSBUTFMg bmVnb3RpYXRpb24uCisKKyAgICAgICAgICAgICAgICAgICBJZiB0aGUgVExTIG5lZ290aWF0aW9u IHN1Y2NlZWRzIHdlIGNhbGwgdG5faW5pKCkKKyAgICAgICAgICAgICAgICAgICBhZ2FpbiB0byBy ZXNldCB0aGUgdGVsbmV0IHN0YXRlIG1hY2hpbmUgYW5kIHJlc3RhcnQKKyAgICAgICAgICAgICAg ICAgICB0aGUgbmVnb3RpYXRpb24gcHJvY2VzcyBvdmVyIHRoZSBub3cgc2VjdXJlIGxpbmsuCisK KyAgICAgICAgICAgICAgICAgICBJZiB0aGUgVExTIG5lZ290aWF0aW9uIGZhaWxzLCB3ZSBjYWxs IHR0Y2xvcygpCisgICAgICAgICAgICAgICAgICAgdG8gdGVybWluYXRlIHRoZSBjb25uZWN0aW9u LiAgVGhlbiB3ZSBzZXQgdGhlCisgICAgICAgICAgICAgICAgICAgVV9NT0RFIGFuZCBNRV9NT0RF IGZvciBURUxPUFRfU1RBUlRfVExTIHRvIFJFRlVTRQorICAgICAgICAgICAgICAgICAgIGFuZCB0 aGVuIGNhbGwgdHRvcGVuKCkgdG8gY3JlYXRlIGEgbmV3IGNvbm5lY3Rpb24KKyAgICAgICAgICAg ICAgICAgICB0byB0aGUgc2FtZSBob3N0IGJ1dCB0aGlzIHRpbWUgZG8gbm90IGF0dGVtcHQKKyAg ICAgICAgICAgICAgICAgICBUTFMgc2VjdXJpdHkuCisKKyAgICAgICAgICAgICAgICAgICBPbmx5 IHRoZSBjbGllbnQgc2hvdWxkIHJlY2VpdmUgRE8gU1RBUlRfVExTLgorICAgICAgICAgICAgICAg ICovCisgICAgICAgICAgICAgICAgdG5fc3Nib3B0KFRFTE9QVF9TVEFSVF9UTFMsMSxOVUxMLDAp OworICAgICAgICAgICAgICAgIFRFTE9QVF9TQihURUxPUFRfU1RBUlRfVExTKS5zdGFydF90bHMu bWVfZm9sbG93cyA9IDE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogQ0tfU1NM ICovCisKKyNpZmRlZiBDS19BVVRIRU5USUNBVElPTgorICAgICAgICAgICAgICBjYXNlIFRFTE9Q VF9BVVRIRU5USUNBVElPTjogeworICAgICAgICAgICAgICAgICAgLyogV2UgZG9uJ3Qga25vdyB3 aGF0IGF1dGhlbnRpY2F0aW9uIHdlIGFyZSB1c2luZyB5ZXQgKi8KKyAgICAgICAgICAgICAgICAg IC8qIGJ1dCBpdCBpcyBub3QgTlVMTCB1bnRpbCBhIGZhaWx1cmUgaXMgZGV0ZWN0ZWQgc28gKi8K KyAgICAgICAgICAgICAgICAgIC8qIHVzZSBBVVRPIGluIHRoZSBtZWFudGltZS4gKi8KKyAgICAg ICAgICAgICAgICAgIGV4dGVybiBpbnQgYXV0aGVudGljYXRpb25fdmVyc2lvbjsKKyAgICAgICAg ICAgICAgICAgIGF1dGhlbnRpY2F0aW9uX3ZlcnNpb24gPSBBVVRIVFlQRV9BVVRPOworICAgICAg ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBDS19BVVRIRU5U SUNBVElPTiAqLworI2lmZGVmIENLX0VOQ1JZUFRJT04KKyAgICAgICAgICAgICAgY2FzZSBURUxP UFRfRU5DUllQVElPTjoKKyAgICAgICAgICAgICAgICBpZiAoIShURUxPUFRfTUUoVEVMT1BUX0FV VEhFTlRJQ0FUSU9OKSB8fAorICAgICAgICAgICAgICAgICAgICAgIFRFTE9QVF9VKFRFTE9QVF9B VVRIRU5USUNBVElPTikpCisgICAgICAgICAgICAgICAgICAgICkgeworICAgICAgICAgICAgICAg ICAgICBpZiAodG5fc29wdChXT05ULHgpIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgICByZXR1 cm4oLTEpOworICAgICAgICAgICAgICAgICAgICBURUxPUFRfTUUoeCkgPSAwOworICAgICAgICAg ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghKFRFTE9QVF9VKHgpIHx8 IFRFTE9QVF9VTkFOU1dFUkVEX0RPKHgpKQorICAgICAgICAgICAgICAgICAgICAgICAgJiYgVEVM T1BUX1VfTU9ERSh4KSAhPSBUTl9OR19SRikgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYg KHRuX3NvcHQoRE8sIHgpIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC0x KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFRFTE9QVF9VTkFOU1dFUkVEX0RPKHgpID0gMTsK KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ICBicmVhazsKKyNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCisjaWZkZWYgSUtTX09QVElPTgor ICAgICAgICAgICAgICBjYXNlIFRFTE9QVF9LRVJNSVQ6CisvKiBJZiBjdXJyZW50bHkgcHJvY2Vz c2luZyBLZXJtaXQgc2VydmVyIHBhY2tldHMsIG11c3QgdGVsbCB0aGUgb3RoZXIgc2lkZSAqLwor CisgICAgICAgICAgICAgICAgZGVidWcoRjExMSwidG5fZG9vcCIsIndoYXQiLHdoYXQpOworICAg ICAgICAgICAgICAgIGRlYnVnKEYxMTEsInRuX2Rvb3AiLCJzZXJ2ZXIiLHNlcnZlcik7CisjaWZk ZWYgQ0tfQVVUT0RMCisgICAgICAgICAgICAgICAgZGVidWcoRjExMSwidG5fZG9vcCIsImF1dG9k bCIsYXV0b2RsKTsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJ0bl9kb29wIiwiaW5hdXRv ZGwiLGluYXV0b2RsKTsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJ0bl9kb29wIiwiY21k YWRsIixjbWRhZGwpOworI2VuZGlmIC8qIENLX0FVVE9ETCAqLworCisgICAgICAgICAgICAgICAg aWYgKHNlcnZlcgorI2lmZGVmIENLX0FVVE9ETAorICAgICAgICAgICAgICAgICAgICB8fCAobG9j YWwgJiYgKCh3aGF0ID09IFdfQ09OTkVDVCAmJiBhdXRvZGwpIHx8CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKHdoYXQgIT0gV19DT05ORUNUICYmIGluYXV0b2RsKSkpCisgICAg ICAgICAgICAgICAgICAgIHx8ICghbG9jYWwgJiYgY21kYWRsKQorI2VuZGlmIC8qIENLX0FVVE9E TCAqLworICAgICAgICAgICAgICAgICAgICApIHsKKyAgICAgICAgICAgICAgICAgICAgdG5fc2lr cyhLRVJNSVRfU1RBUlQpOyAgICAgIC8qIFNUQVJUICovCisgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICAgIGlmICghVEVMT1BUX1UoeCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLyog VGVsbCB0aGUgb3RoZXIgc2lkZSB3aGF0IFN0YXJ0IG9mIFBhY2tldCBDaGFyYWN0ZXIgKi8KKyAg ICAgICAgICAgICAgICAgICAgdG5fc2lrcyhLRVJNSVRfU09QKTsgICAgICAgICAgICAgLyogU09Q ICovCisgICAgICAgICAgICAgICAgICAgIGlmICghVEVMT1BUX1VOQU5TV0VSRURfRE8oeCkgJiYK KyAgICAgICAgICAgICAgICAgICAgICAgIFRFTE9QVF9VX01PREUoeCkgIT0gVE5fTkdfUkYpIHsK KyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0bl9zb3B0KERPLCB4KSA8IDApCisgICAgICAg ICAgICAgICAgICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAgICAgICAgICAgICAgICAgICBU RUxPUFRfVU5BTlNXRVJFRF9ETyh4KSA9IDE7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogSUtTX09QVElP TiAqLworCisgICAgICAgICAgICAgIGNhc2UgVEVMT1BUX0JJTkFSWToKKyAgICAgICAgICAgICAg ICBpZiAoIVRFTE9QVF9VKHgpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghVEVMT1BUX1VO QU5TV0VSRURfRE8oeCkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIFRFTE9QVF9VX01PREUo eCkgPj0gVE5fTkdfUlEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0bl9zb3B0KERP LCB4KSA8IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAg ICAgICAgICAgICAgICAgICBURUxPUFRfVU5BTlNXRVJFRF9ETyh4KSA9IDE7CisgICAgICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgICAgICAgIGNhc2UgVEVMT1BUX05BV1M6CisjaWZkZWYgQ0tfTkFXUworICAgICAgICAg ICAgICAgIGlmICggIXRuX2RlbGF5X3NiIHx8ICF0bl9vdXRzdCgwKSB8fCB0bl9pbml0ICkgewor ICAgICAgICAgICAgICAgICAgICBpZiAodG5fc25hd3MoKSA8IDApCisgICAgICAgICAgICAgICAg ICAgICAgICByZXR1cm4oLTEpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg ICAgICAgICAgIFRFTE9QVF9TQihURUxPUFRfTkFXUykubmF3cy5uZWVkX3RvX3NlbmQgPSAxOwor ICAgICAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBDS19OQVdTICovCisgICAgICAgICAgICAgICAg YnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgVEVMT1BUX0xPR09VVDoKKyAgICAgICAgICAgICAg ICB0dGNsb3MoMCk7ICAgICAgICAgICAgICAvKiBBbmQgdGhlbiBoYW5ndXAgKi8KKyAgICAgICAg ICAgICAgICB3aHljbG9zZWQgPSBXQ19URUxPUFQ7CisgICAgICAgICAgICAgICAgcmV0dXJuKDYp OworI2lmZGVmIENLX1NORExPQworICAgICAgICAgICAgICAgY2FzZSBURUxPUFRfU05ETE9DOgor ICAgICAgICAgICAgICAgICAgaWYgKCAhdG5fZGVsYXlfc2IgfHwgIXRuX291dHN0KDApIHx8IHRu X2luaXQgKSB7CisgICAgICAgICAgICAgICAgICAgICAgaWYgKHRuX3NuZGxvYygpIDwgMCkKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgICAgICAgICAgIH0g ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgVEVMT1BUX1NCKFRFTE9QVF9TTkRMT0MpLnNu ZGxvYy5uZWVkX3RvX3NlbmQgPSAxOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg ICAgICAgYnJlYWs7CisjZW5kaWYgLyogQ0tfU05ETE9DICovCisjaWZkZWYgQ0tfRk9SV0FSRF9Y CisgICAgICAgICAgICAgICBjYXNlIFRFTE9QVF9GT1JXQVJEX1g6CisgICAgICAgICAgICAgICAg ICBpZiAoICF0bl9kZWxheV9zYiB8fCAhdG5fb3V0c3QoMCkgfHwgdG5faW5pdCApIHsKKyAgICAg ICAgICAgICAgICAgICAgICBpZiAoZndkeF9zZW5kX29wdGlvbnMoKSA8IDApIHsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgaWYgKHRuX3NvcHQoRE9OVCx4KSA8IDApCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICAgICAgICAgICAgICAgICAgICBU RUxPUFRfVU5BTlNXRVJFRF9ET05UKHgpID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgIFRFTE9QVF9T QihURUxPUFRfRk9SV0FSRF9YKS5mb3J3YXJkX3gubmVlZF90b19zZW5kID0gMTsKKyAgICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIENLX0ZPUldB UkRfWCAqLworI2lmZGVmIFROX0NPTVBPUlQKKyAgICAgICAgICAgICAgY2FzZSBURUxPUFRfQ09N UE9SVDogeworICAgICAgICAgICAgICAgIGV4dGVybiBpbnQgcmVsaWFibGU7CisgICAgICAgICAg ICAgICAgaWYgKCF0bl9kZWxheV9zYiB8fCAhdG5fb3V0c3QoMCkgfHwgdG5faW5pdCkgeworICAg ICAgICAgICAgICAgICAgICBpZiAodG5fc25kY29tcG9ydCgpIDwgMCkKKyAgICAgICAgICAgICAg ICAgICAgICByZXR1cm4oLTEpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg ICAgICAgICAgIFRFTE9QVF9TQihURUxPUFRfQ09NUE9SVCkuY29tcG9ydC5uZWVkX3RvX3NlbmQg PSAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvKiBUZWxuZXQgLT4gU2Vy aWFsIC0+ID8/PyBpcyBub3QgYSByZWxpYWJsZSBjb25uZWN0aW9uLiAqLworICAgICAgICAgICAg ICAgIHJlbGlhYmxlID0gU0VUX09GRjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg ICAgICAgfQorI2VuZGlmIC8qIFROX0NPTVBPUlQgKi8KKyAgICAgICAgICAgIH0gLyogc3dpdGNo ICovCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgaWYgKFRFTE9QVF9VTkFOU1dFUkVEX1dJ TEwoeCkpCisgICAgICAgICAgICBURUxPUFRfVU5BTlNXRVJFRF9XSUxMKHgpID0gMDsKKyAgICAg ICAgfQorICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBET05UOgorI2lmZGVmIENLX1NTTAor ICAgICAgICBpZiAoVEVMT1BUX1NCKFRFTE9QVF9TVEFSVF9UTFMpLnN0YXJ0X3Rscy5tZV9mb2xs b3dzKQorICAgICAgICAgICAgcmV0dXJuKDApOworI2VuZGlmIC8qIENLX1NTTCAqLworICAgICAg ICBpZiAoVEVMT1BUX01FKHgpIHx8IFRFTE9QVF9VTkFOU1dFUkVEX1dJTEwoeCkpIHsKKyAgICAg ICAgICAgIC8qIERhdmlkIEJvcm1hbiBzYXlzIHdlIHNob3VsZCBub3QgcmVzcG9uZCBXT05UIHdo ZW4KKyAgICAgICAgICAgICAqIHRoZSBET05UIGlzIGEgcmVzcG9uc2UgdG8gYSBXSUxMIHRoYXQg d2Ugc2VudC4KKyAgICAgICAgICAgICAqIE5vciBzaG91bGQgd2Ugc2VuZCBvbmUgaWYgdGhlIHN0 YXRlIGlzIGFscmVhZHkgV09OVAorICAgICAgICAgICAgICogc3VjaCBhcyB3aGVuIHdlIGRvIG5v dCByZWNvZ25pemUgdGhlIG9wdGlvbiBzaW5jZQorICAgICAgICAgICAgICogb3B0aW9ucyBhcmUg aW5pdGlhbGl6ZWQgaW4gdGhlIFdPTlQvRE9OVCBzdGF0ZS4KKyAgICAgICAgICAgICAqLworICAg ICAgICAgICAgaWYgKCEoVEVMT1BUX1VOQU5TV0VSRURfV0lMTCh4KSB8fCBURUxPUFRfVU5BTlNX RVJFRF9XT05UKHgpKSkKKyAgICAgICAgICAgICAgaWYgKHRuX3NvcHQoV09OVCx4KSA8IDApCisg ICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKKworICAgICAgICAgICAgaWYgKFRFTE9QVF9VTkFO U1dFUkVEX1dJTEwoeCkpCisgICAgICAgICAgICAgICAgVEVMT1BUX1VOQU5TV0VSRURfV0lMTCh4 KSA9IDA7CisgICAgICAgICAgICBpZiAoVEVMT1BUX1VOQU5TV0VSRURfV09OVCh4KSkKKyAgICAg ICAgICAgICAgICBURUxPUFRfVU5BTlNXRVJFRF9XT05UKHgpID0gMDsKKyAgICAgICAgICAgIGlm IChURUxPUFRfTUUoeCkpCisgICAgICAgICAgICAgIFRFTE9QVF9NRSh4KSA9IDA7CisKKyAgICAg ICAgICAgIHN3aXRjaCAoeCkgeworI2lmZGVmIENLX1NTTAorICAgICAgICAgICAgY2FzZSBURUxP UFRfU1RBUlRfVExTOgorICAgICAgICAgICAgICAgIGlmICghc3N0ZWxuZXQgJiYgVEVMT1BUX01F X01PREUoeCkgPT0gVE5fTkdfTVUpIHsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJUZWxu ZXQgU3RhcnQtVExTIHJlZnVzZWQuXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgdHRjbG9zKDAp OworICAgICAgICAgICAgICAgICAgICB3aHljbG9zZWQgPSBXQ19URUxPUFQ7CisgICAgICAgICAg ICAgICAgICAgIHJldHVybigtMyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg IGJyZWFrOworI2VuZGlmIC8qIENLX1NTTCAqLworI2lmZGVmIENLX0FVVEhFTlRJQ0FUSU9OCisg ICAgICAgICAgICAgIGNhc2UgVEVMT1BUX0FVVEhFTlRJQ0FUSU9OOgorICAgICAgICAgICAgICAg IGlmICghc3N0ZWxuZXQgJiYgVEVMT1BUX01FX01PREUoeCkgPT0gVE5fTkdfTVUpIHsKKyNpZmRl ZiBDS19TU0wKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRsc19hY3RpdmVfZmxhZykgeworICAg ICAgICAgICAgICAgICAgICAgICAgVEVMT1BUX01FX01PREUoeCkgPSBUTl9OR19BQzsKKyAgICAg ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UKKyNl bmRpZiAvKiBDS19TU0wgKi8KKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg ICAgICAgICAgcHJpbnRmKCJUZWxuZXQgYXV0aGVudGljYXRpb24gcmVmdXNlZC5cbiIpOworICAg ICAgICAgICAgICAgICAgICAgICAgdHRjbG9zKDApOworICAgICAgICAgICAgICAgICAgICAgICAg d2h5Y2xvc2VkID0gV0NfVEVMT1BUOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC0z KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoVEVM T1BUX01FX01PREUoeCkgPT0gVE5fTkdfUlEpIHsKKyAgICAgICAgICAgICAgICAgICAgVEVMT1BU X01FX01PREUoeCkgPSBUTl9OR19BQzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg ICAgaWYgKGNrX3RuX2F1dGhfaW5fcHJvZ3Jlc3MoKSkKKyAgICAgICAgICAgICAgICAgIHByaW50 ZigiVGVsbmV0IGF1dGhlbnRpY2F0aW9uIHJlZnVzZWQuXG4iKTsKKyNpZmRlZiBDS19FTkNSWVBU SU9OCisgICAgICAgICAgICAgICAgaWYgKCFzc3RlbG5ldCkgeworICAgICAgICAgICAgICAgICAg ICBpZiAodG5fbm9fZW5jcnlwdCgpPDApCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4o LTEpOworICAgICAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCisgICAg ICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJT04gKi8KKyAgICAg ICAgICAgICAgY2FzZSBURUxPUFRfRU5DUllQVElPTjoKKyNpZmRlZiBDS19FTkNSWVBUSU9OCisg ICAgICAgICAgICAgICAgY2tfdG5fZW5jX3N0b3AoKTsKKyNlbmRpZiAvKiBDS19FTkNSWVBUSU9O ICovCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgVEVMT1BUX0tF Uk1JVDoKKyNpZmRlZiBJS1NfT1BUSU9OCisgICAgICAgICAgICAgICAgVEVMT1BUX1NCKHgpLmtl cm1pdC5tZV9zdGFydCA9IDA7CisjZW5kaWYgLyogSUtTX09QVElPTiAqLworICAgICAgICAgICAg ICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFr OworICAgICAgICAgICAgfSAvKiBzd2l0Y2ggKi8KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg ICBpZiAoVEVMT1BUX1VOQU5TV0VSRURfV0lMTCh4KSkKKyAgICAgICAgICAgICAgVEVMT1BUX1VO QU5TV0VSRURfV0lMTCh4KSA9IDA7CisgICAgICAgICAgaWYgKFRFTE9QVF9VTkFOU1dFUkVEX1dP TlQoeCkpCisgICAgICAgICAgICAgIFRFTE9QVF9VTkFOU1dFUkVEX1dPTlQoeCkgPSAwOworICAg ICAgICB9CisgICAgICAgIGlmIChURUxPUFRfTUVfTU9ERSh4KSA9PSBUTl9OR19NVSkgeworICAg ICAgICAgICAgY2ttYWttc2coIHRuX21zZyxUTl9NU0dfTEVOLAorICAgICAgICAgICAgICAgICAg ICAgICJQZWVyIHJlZnVzZXMgVEVMTkVUIFdJTEwgIixURUxPUFQoeCksCisgICAgICAgICAgICAg ICAgICAgICAgIiBuZWdvdGlhdGlvbnMgLSB0ZXJtaW5hdGluZyBjb25uZWN0aW9uIiwKKyAgICAg ICAgICAgICAgICAgICAgICBOVUxMCisgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAg ICAgIGRlYnVnKEYxMDAsdG5fbXNnLCIiLDApOworICAgICAgICAgICAgaWYgKHRuX2RlYiB8fCBk ZWJzZXMpIHRuX2RlYnVnKHRuX21zZyk7CisgICAgICAgICAgICBwcmludGYoIiVzXG4iLHRuX21z Zyk7CisgICAgICAgICAgICB0dGNsb3MoMCk7CisgICAgICAgICAgICB3aHljbG9zZWQgPSBXQ19U RUxPUFQ7CisgICAgICAgICAgICByZXR1cm4oLTMpOworICAgICAgICB9CisgICAgICAgIGJyZWFr OworICAgICAgY2FzZSBTQjoKKyAgICAgICAgaWYgKCh5ID0gdG5fc2IoeCwmbixmbikpIDw9IDAp CisgICAgICAgICAgcmV0dXJuKHkpOworCisjaWZkZWYgQ0tfU1NMCisgICAgICAgIC8qIERvIG5v dCBwcm9jZXNzIHN1Ym5lZ290aWF0aW9ucyBvdGhlciB0aGFuIFNUQVJUX1RMUyBhZnRlciB3ZSAq LworICAgICAgICAvKiBoYXZlIGFncmVlZCB0byBiZWdpbiB0aGUgVExTIG5lZ290aWF0aW9uIHNl cXVlbmNlLiAgICAgICAgICAgKi8KKyAgICAgICAgaWYgKFRFTE9QVF9TQihURUxPUFRfU1RBUlRf VExTKS5zdGFydF90bHMubWVfZm9sbG93cyAmJgorICAgICAgICAgICAgIHggIT0gVEVMT1BUX1NU QVJUX1RMUykKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIENLX1NTTCAqLworCisgICAg ICAgIGlmICghVEVMT1BUX09LKHgpKSB7CisgICAgICAgICAgICBja2hleGR1bXAoInVua25vd24g dGVsbmV0IHN1Ym5lZ290aWF0aW9uIixzYixuKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg ICB9IGVsc2UgaWYgKCAhKFRFTE9QVF9NRSh4KSB8fCBURUxPUFRfVSh4KSkgKSB7CisgICAgICAg ICAgICBja2hleGR1bXAoInRlbG5ldCBvcHRpb24gbm90IG5lZ290aWF0ZWQiLHNiLG4pOworICAg ICAgICAgICAgaWYgKCF0bl9zYl9idWcpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg ICAgICBpZiAoVEVMT1BUX1VOQU5TV0VSRURfV0lMTCh4KSkgeworICAgICAgICAgICAgICAgIFRF TE9QVF9VTkFOU1dFUkVEX1dJTEwoeCkgPSAwOworICAgICAgICAgICAgICAgIFRFTE9QVF9VKHgp ID0gMTsKKyAgICAgICAgICAgICAgICBja21ha21zZyh0bl9tc2csVE5fTVNHX0xFTiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAiVEVMTkVUIERPICIsVEVMT1BUKHgpLAorICAgICAgICAgICAg ICAgICAgICAgICAgICIoaW1wbGllZCBieSByZWNlaXB0IG9mIFNCIC0gcHJvdG9jb2wgZXJyb3Ig aWdub3JlZCkiLAorICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwKKyAgICAgICAgICAgICAg ICAgICAgICAgICApOworICAgICAgICAgICAgICAgIGRlYnVnKEYxMDAsdG5fbXNnLCIiLDApOwor ICAgICAgICAgICAgICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKSB0bl9kZWJ1Zyh0bl9tc2cpOwor ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKFRFTE9QVF9VTkFOU1dFUkVEX0RPKHgpKSB7 CisgICAgICAgICAgICAgICAgVEVMT1BUX1VOQU5TV0VSRURfRE8oeCkgPSAwOworICAgICAgICAg ICAgICAgIFRFTE9QVF9NRSh4KSA9IDE7CisgICAgICAgICAgICAgICAgY2ttYWttc2codG5fbXNn LFROX01TR19MRU4sIlRFTE5FVCBXSUxMICIsVEVMT1BUKHgpLAorICAgICAgICAgICAgICAgICAg ICAgICAgIiAoaW1wbGllZCBieSByZWNlaXB0IG9mIFNCIC0gcHJvdG9jb2wgZXJyb3IgaWdub3Jl ZCkiLAorICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgICAgICAgICAgICAgZGVi dWcoRjEwMCx0bl9tc2csIiIsMCk7CisgICAgICAgICAgICAgICAgaWYgKHRuX2RlYiB8fCBkZWJz ZXMpIHRuX2RlYnVnKHRuX21zZyk7CisgICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg ICAgVEVMT1BUX1VOQU5TV0VSRURfU0IoeCk9MDsKKyAgICAgICAgc3dpdGNoICh4KSB7CisjaWZk ZWYgQ0tfRk9SV0FSRF9YCisgICAgICAgICAgY2FzZSBURUxPUFRfRk9SV0FSRF9YOgorICAgICAg ICAgICAgcmV0dXJuKGZ3ZHhfdG5fc2Ioc2IsIG4pKTsKKyNlbmRpZiAvKiBDS19GT1JXQVJEX1gg Ki8KKyNpZmRlZiBDS19TU0wKKyAgICAgICAgICBjYXNlIFRFTE9QVF9TVEFSVF9UTFM6IHsKKyAg ICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgdGhlIG90aGVyIHNpZGUgaXMgc2F5aW5n IFNCIFNUQVJUX1RMUyBGT0xMT1dTCisgICAgICAgICAgICAgICAgIHRoZSBpbmNvbWluZyBjaGFu bmVsIGlzIG5vdyByZWFkeSBmb3Igc3RhcnRpbmcgdGhlCisgICAgICAgICAgICAgICAgIFRMUyBu ZWdvdGlhdGlvbi4KKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgaW50IGRlZl90 bHNfdV9tb2RlLCBkZWZfdGxzX21lX21vZGU7CisgICAgICAgICAgICAgIGludCBkZWZfZW5jX3Vf bW9kZSwgZGVmX2VuY19tZV9tb2RlOworICAgICAgICAgICAgICBpbnQgcmMgPSAwOworCisgICAg ICAgICAgICAgICAgICAgICAgICAgIGlmIChzYlswXSAhPSAxKSB7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKwor ICAgICAgICAgICAgICBURUxPUFRfU0IoVEVMT1BUX1NUQVJUX1RMUykuc3RhcnRfdGxzLnVfZm9s bG93cyA9IDE7CisgICAgICAgICAgICAgIC8qIFByZXNlcnZlIHRoZSBkZWZhdWx0IG1vZGVzIGFu ZCBtYWtlIHN1cmUgd2Ugd2lsbCAqLworICAgICAgICAgICAgICAvKiByZWZ1c2UgU1RBUlRfVExT IHdoZW4gd2UgcmV0cnkuICovCisgICAgICAgICAgICAgIGlmIChzc3RlbG5ldCkgeworICAgICAg ICAgICAgICAgICAgZGVmX3Rsc191X21vZGUgPSBURUxPUFRfREVGX1NfVV9NT0RFKFRFTE9QVF9T VEFSVF9UTFMpOworICAgICAgICAgICAgICAgICAgZGVmX3Rsc19tZV9tb2RlID0gVEVMT1BUX0RF Rl9TX01FX01PREUoVEVMT1BUX1NUQVJUX1RMUyk7CisgICAgICAgICAgICAgICAgICBURUxPUFRf REVGX1NfVV9NT0RFKFRFTE9QVF9TVEFSVF9UTFMpID0gVE5fTkdfUkY7CisgICAgICAgICAgICAg ICAgICBURUxPUFRfREVGX1NfTUVfTU9ERShURUxPUFRfU1RBUlRfVExTKT0gVE5fTkdfUkY7Cisj aWZkZWYgQ0tfRU5DUllQVElPTgorICAgICAgICAgICAgICAgICAgZGVmX2VuY191X21vZGUgPSBU RUxPUFRfREVGX1NfVV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKTsKKyAgICAgICAgICAgICAgICAg IGRlZl9lbmNfbWVfbW9kZSA9IFRFTE9QVF9ERUZfU19NRV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9O KTsKKyAgICAgICAgICAgICAgICAgIFRFTE9QVF9ERUZfU19VX01PREUoVEVMT1BUX0VOQ1JZUFRJ T04pID0gVE5fTkdfUkY7CisgICAgICAgICAgICAgICAgICBURUxPUFRfREVGX1NfTUVfTU9ERShU RUxPUFRfRU5DUllQVElPTik9IFROX05HX1JGOworI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8K KyAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgIGRlZl90bHNfdV9tb2Rl ID0gVEVMT1BUX0RFRl9DX1VfTU9ERShURUxPUFRfU1RBUlRfVExTKTsKKyAgICAgICAgICAgICAg ICAgIGRlZl90bHNfbWVfbW9kZSA9IFRFTE9QVF9ERUZfQ19NRV9NT0RFKFRFTE9QVF9TVEFSVF9U TFMpOworICAgICAgICAgICAgICAgICAgVEVMT1BUX0RFRl9DX1VfTU9ERShURUxPUFRfU1RBUlRf VExTKSA9IFROX05HX1JGOworICAgICAgICAgICAgICAgICAgVEVMT1BUX0RFRl9DX01FX01PREUo VEVMT1BUX1NUQVJUX1RMUyk9IFROX05HX1JGOworI2lmZGVmIENLX0VOQ1JZUFRJT04KKyAgICAg ICAgICAgICAgICAgIGRlZl9lbmNfdV9tb2RlID0gVEVMT1BUX0RFRl9DX1VfTU9ERShURUxPUFRf RU5DUllQVElPTik7CisgICAgICAgICAgICAgICAgICBkZWZfZW5jX21lX21vZGUgPSBURUxPUFRf REVGX0NfTUVfTU9ERShURUxPUFRfRU5DUllQVElPTik7CisgICAgICAgICAgICAgICAgICBURUxP UFRfREVGX0NfVV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9IFROX05HX1JGOworICAgICAgICAg ICAgICAgICAgVEVMT1BUX0RFRl9DX01FX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pPSBUTl9OR19S RjsKKyNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCisgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgICAgLyogTmVnb3RpYXRlIFRMUyAqLworICAgICAgICAgICAgICB0dG5wcm90byA9IE5QX1RM UzsKKyAgICAgICAgICAgICAgdG5faW5pdCA9IDA7CisgICAgICAgICAgICAgIHRuX2JlZ3VuID0g MDsKKyAgICAgICAgICAgICAgaWYgKGNrX3RuX3Rsc19uZWdvdGlhdGUoKTwwKSB7CisgICAgICAg ICAgICAgICAgICAvKiB3ZSBmYWlsZWQuICBkaXNjb25uZWN0IGFuZCBpZiB3ZSBhcmUgdGhlIGNs aWVudCAqLworICAgICAgICAgICAgICAgICAgLyogdGhlbiByZWNvbm5lY3QgYW5kIHRyeSB3aXRo b3V0IFNUQVJUX1RMUy4gICAgICAgKi8KKyAgICAgICAgICAgICAgICAgIGV4dGVybiBjaGFyICog bGluZTsKKyAgICAgICAgICAgICAgICAgIGludCB4ID0gLTE7CisgICAgICAgICAgICAgICAgICBl eHRlcm4gaW50IG1kbXR5cDsKKworICAgICAgICAgICAgICAgICAgaWYgKHNzdGVsbmV0KSB7Cisg ICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJUTFMgZmFpbGVkOiAgRGlzY29ubmVjdGluZy5c biIpOworICAgICAgICAgICAgICAgICAgICAgIFRFTE9QVF9ERUZfU19VX01PREUoVEVMT1BUX1NU QVJUX1RMUykgID0gZGVmX3Rsc191X21vZGU7CisgICAgICAgICAgICAgICAgICAgICAgVEVMT1BU X0RFRl9TX01FX01PREUoVEVMT1BUX1NUQVJUX1RMUykgPSBkZWZfdGxzX21lX21vZGU7CisjaWZk ZWYgQ0tfRU5DUllQVElPTgorICAgICAgICAgICAgICAgICAgICAgVEVMT1BUX0RFRl9TX1VfTU9E RShURUxPUFRfRU5DUllQVElPTikgID0gZGVmX2VuY191X21vZGU7CisgICAgICAgICAgICAgICAg ICAgICBURUxPUFRfREVGX1NfTUVfTU9ERShURUxPUFRfRU5DUllQVElPTikgPSBkZWZfZW5jX21l X21vZGU7CisjZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLworICAgICAgICAgICAgICAgICAgICAg IHR0Y2xvcygwKTsKKyAgICAgICAgICAgICAgICAgICAgICB3aHljbG9zZWQgPSBXQ19URUxPUFQ7 CisgICAgICAgICAgICAgICAgICAgICAgdHRucHJvdG8gPSBOUF9URUxORVQ7CisgICAgICAgICAg ICAgICAgICAgICAgcmMgPSAtMzsKKyAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisjaWZuZGVm IE5PTE9DQUwKKyAgICAgICAgICAgICAgICAgICAgICBleHRlcm4gaW50IHRsc19ub3Jlc3RvcmU7 CisjZW5kaWYgLyogTk9MT0NBTCAqLworICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiVExT IGZhaWxlZDogIERpc2Nvbm5lY3RpbmcuLi5cbiIpOworI2lmZGVmIENLX0VOQ1JZUFRJT04KKyAg ICAgICAgICAgICAgICAgICAgIFRFTE9QVF9ERUZfQ19VX01PREUoVEVMT1BUX0VOQ1JZUFRJT04p ICA9IGRlZl9lbmNfdV9tb2RlOworICAgICAgICAgICAgICAgICAgICAgVEVMT1BUX0RFRl9DX01F X01PREUoVEVMT1BUX0VOQ1JZUFRJT04pID0gZGVmX2VuY19tZV9tb2RlOworI2VuZGlmIC8qIENL X0VOQ1JZUFRJT04gKi8KKyAgICAgICAgICAgICAgICAgICAgICAvKiBpZiBTVEFSVF9UTFMgaXMg bm90IFJFUVVJUkVELCB0aGVuIHJldHJ5IHdpdGhvdXQgaXQgKi8KKyAgICAgICAgICAgICAgICAg ICAgICBpZiAoIGRlZl90bHNfbWVfbW9kZSAhPSBUTl9OR19NVSApIHsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgZXh0ZXJuIGNoYXIgdHRuYW1lW107CisjaWZuZGVmIE5PTE9DQUwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgdGxzX25vcmVzdG9yZSA9IDE7CisjZW5kaWYgLyogTk9MT0NB TCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICB0dGNsb3MoMCk7CisgICAgICAgICAgICAg ICAgICAgICAgICAgIHdoeWNsb3NlZCA9IFdDX1RFTE9QVDsKKyNpZm5kZWYgTk9MT0NBTAorICAg ICAgICAgICAgICAgICAgICAgICAgICB0bHNfbm9yZXN0b3JlID0gMDsKKyNlbmRpZiAvKiBOT0xP Q0FMICovCisgICAgICAgICAgICAgICAgICAgICAgICAgIHR0bnByb3RvID0gTlBfVEVMTkVUOwor ICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIlJlY29ubmVjdGluZyB3aXRob3V0IFRM Uy5cbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICBzbGVlcCgyKTsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgaWYgKHR0b3Blbih0dG5hbWUsJngsbWRtdHlwLDApPDApCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICByYyA9IC0zOworICAgICAgICAgICAgICAgICAgICAgIH0g ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgIFRFTE9QVF9ERUZfQ19VX01PREUoVEVM T1BUX1NUQVJUX1RMUykgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZl90bHNfdV9t b2RlOworICAgICAgICAgICAgICAgICAgICAgICAgICBURUxPUFRfREVGX0NfTUVfTU9ERShURUxP UFRfU1RBUlRfVExTKSA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmX3Rsc19tZV9t b2RlOworICAgICAgICAgICAgICAgICAgICAgICAgICB0dGNsb3MoMCk7CisgICAgICAgICAgICAg ICAgICAgICAgICAgIHdoeWNsb3NlZCA9IFdDX1RFTE9QVDsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgdHRucHJvdG8gPSBOUF9URUxORVQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgIHJj ID0gLTM7CisgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICB9IGVsc2UgeworI2lmZGVmIENLX0FVVEhFTlRJQ0FUSU9OCisgICAgICAgICAg ICAgICAgICAvKiB3ZSBzdWNjZWVkZWQuICByZXN0YXJ0IHRlbG5ldCBuZWdvdGlhdGlvbnMgZnJv bSAqLworICAgICAgICAgICAgICAgICAgLyogdGhlIGJlZ2lubmluZy4gIEhvd2V2ZXIsIGlmIHdl IGhhdmUgcmVjZWl2ZWQgYSAgKi8KKyAgICAgICAgICAgICAgICAgIC8qIGNsaWVudCBjZXJ0aWZp Y2F0ZSBhbmQgd2UgYXJlIGEgc2VydmVyLCB0aGVuIGRvICovCisgICAgICAgICAgICAgICAgICAv KiBub3Qgb2ZmZXIgVEVMT1BUX0FVVEguICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAg ICAgICAgICAgICAgICAgaWYgKCBja190bl9hdXRoX3ZhbGlkKCkgPT0gQVVUSF9WQUxJRCApIHsK KyAgICAgICAgICAgICAgICAgICAgICBURUxPUFRfREVGX1NfVV9NT0RFKFRFTE9QVF9BVVRIRU5U SUNBVElPTikgPSBUTl9OR19BQzsKKyAgICAgICAgICAgICAgICAgICAgICBURUxPUFRfREVGX1Nf TUVfTU9ERShURUxPUFRfQVVUSEVOVElDQVRJT04pPSBUTl9OR19BQzsKKyAgICAgICAgICAgICAg ICAgIH0KKyNlbmRpZiAvKiBDS19BVVRIRU5USUNBVElPTiAqLworICAgICAgICAgICAgICAgICAg dHRucHJvdG8gPSBOUF9URUxORVQ7CisgICAgICAgICAgICAgICAgICBpZiAodG5faW5pKCkgPCAw KQorICAgICAgICAgICAgICAgICAgICBpZiAodHRjaGsoKSA8IDApCisgICAgICAgICAgICAgICAg ICAgICAgcmMgPSAtMTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAvKiBSZXN0b3Jl IHRoZSBkZWZhdWx0IG1vZGVzICovCisgICAgICAgICAgICAgIGlmIChzc3RlbG5ldCkgeworICAg ICAgICAgICAgICAgICAgVEVMT1BUX0RFRl9TX1VfTU9ERShURUxPUFRfU1RBUlRfVExTKSAgPSBk ZWZfdGxzX3VfbW9kZTsKKyAgICAgICAgICAgICAgICAgIFRFTE9QVF9ERUZfU19NRV9NT0RFKFRF TE9QVF9TVEFSVF9UTFMpID0gZGVmX3Rsc19tZV9tb2RlOworI2lmZGVmIENLX0VOQ1JZUFRJT04K KyAgICAgICAgICAgICAgICAgIFRFTE9QVF9ERUZfU19VX01PREUoVEVMT1BUX0VOQ1JZUFRJT04p ICA9IGRlZl9lbmNfdV9tb2RlOworICAgICAgICAgICAgICAgICAgVEVMT1BUX0RFRl9TX01FX01P REUoVEVMT1BUX0VOQ1JZUFRJT04pID0gZGVmX2VuY19tZV9tb2RlOworI2VuZGlmIC8qIENLX0VO Q1JZUFRJT04gKi8KKyAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgIFRF TE9QVF9ERUZfQ19VX01PREUoVEVMT1BUX1NUQVJUX1RMUykgID0gZGVmX3Rsc191X21vZGU7Cisg ICAgICAgICAgICAgICAgICBURUxPUFRfREVGX0NfTUVfTU9ERShURUxPUFRfU1RBUlRfVExTKSA9 IGRlZl90bHNfbWVfbW9kZTsKKyNpZmRlZiBDS19FTkNSWVBUSU9OCisgICAgICAgICAgICAgICAg ICBURUxPUFRfREVGX0NfVV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSAgPSBkZWZfZW5jX3VfbW9k ZTsKKyAgICAgICAgICAgICAgICAgIFRFTE9QVF9ERUZfQ19NRV9NT0RFKFRFTE9QVF9FTkNSWVBU SU9OKSA9IGRlZl9lbmNfbWVfbW9kZTsKKyNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCisgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgcmV0dXJuKHJjKTsKKyAgICAgICAgICB9CisjZW5k aWYgLyogQ0tfU1NMICovCisjaWZkZWYgQ0tfQVVUSEVOVElDQVRJT04KKyAgICAgICAgICBjYXNl IFRFTE9QVF9BVVRIRU5USUNBVElPTjoKKyAgICAgICAgICAgIGlmIChja190bl9zYl9hdXRoKChj aGFyICopc2IsbikgPCAwKSB7CisgICAgICAgICAgICAgICAgaWYgKHNzdGVsbmV0ICYmIFRFTE9Q VF9VX01PREUoeCkgPT0gVE5fTkdfTVUpIHsKKyAgICAgICAgICAgICAgICAgICAgdHRjbG9zKDAp OworICAgICAgICAgICAgICAgICAgICB3aHljbG9zZWQgPSBXQ19URUxPUFQ7CisgICAgICAgICAg ICAgICAgICAgIHJldHVybigtMyk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghc3N0ZWxu ZXQgJiYgVEVMT1BUX01FX01PREUoeCkgPT0gVE5fTkdfTVUpIHsKKyAgICAgICAgICAgICAgICAg ICAgdHRjbG9zKDApOworICAgICAgICAgICAgICAgICAgICB3aHljbG9zZWQgPSBXQ19URUxPUFQ7 CisgICAgICAgICAgICAgICAgICAgIHJldHVybigtMyk7CisgICAgICAgICAgICAgICAgfSBlbHNl IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKFRFTE9QVF9NRV9NT0RFKHgpID09IFROX05HX1JR KQorICAgICAgICAgICAgICAgICAgICAgIFRFTE9QVF9NRV9NT0RFKHgpID0gVE5fTkdfQUM7Cisg ICAgICAgICAgICAgICAgICAgIGlmIChURUxPUFRfVV9NT0RFKHgpID09IFROX05HX1JRKQorICAg ICAgICAgICAgICAgICAgICAgIFRFTE9QVF9VX01PREUoeCkgPSBUTl9OR19BQzsKKyAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKFRFTE9QVF9NRSh4KSkgeworICAgICAgICAg ICAgICAgICAgICBURUxPUFRfTUUoeCkgPSAwOworICAgICAgICAgICAgICAgICAgICBpZiAodG5f c29wdChXT05ULHgpIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTEpOworICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoVEVMT1BUX1UoeCkpIHsKKyAgICAg ICAgICAgICAgICAgICAgVEVMT1BUX1UoeCkgPSAwOworICAgICAgICAgICAgICAgICAgICBpZiAo dG5fc29wdChET05ULHgpIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTEpOwor ICAgICAgICAgICAgICAgIH0KKyNpZmRlZiBDS19FTkNSWVBUSU9OCisgICAgICAgICAgICAgICAg aWYgKHRuX25vX2VuY3J5cHQoKTwwKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTEpOwor I2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KKyAgICAgICAgICAgIH0gZWxzZSB7CisjaWZkZWYg Q0tfRU5DUllQVElPTgorICAgICAgICAgICAgICAgIGlmICghY2tfdG5fYXV0aF9pbl9wcm9ncmVz cygpKSB7IC8qIHdlIGFyZSBmaW5pc2hlZCAqLworICAgICAgICAgICAgICAgICAgICBpZiAoY2tf dG5fYXV0aGVudGljYXRlZCgpID09IEFVVEhUWVBFX1NTTCkgeworICAgICAgICAgICAgICAgICAg ICAgICAgLyogVExTIHdhcyBzdWNjZXNzZnVsLiAgRGlzYWJsZSBFTkNSWVBUSU9OICovCisgICAg ICAgICAgICAgICAgICAgICAgICBURUxPUFRfVV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9IFRO X05HX1JGOworICAgICAgICAgICAgICAgICAgICAgICAgVEVMT1BUX01FX01PREUoVEVMT1BUX0VO Q1JZUFRJT04pID0gVE5fTkdfUkY7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg ICAgICAgICAgaWYgKFRFTE9QVF9TQihURUxPUFRfRU5DUllQVElPTikuZW5jcnlwdC5uZWVkX3Rv X3NlbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNrX2VuY3J5cHRfc2VuZF9zdXBwb3J0 KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBURUxPUFRfU0IoVEVMT1BUX0VOQ1JZUFRJT04p LmVuY3J5cHQubmVlZF90b19zZW5kID0gMDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICAgIH0KKyNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCisgICAgICAgICAgICB9Cisg ICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBDS19BVVRIRU5USUNBVElPTiAqLworI2lmZGVm IENLX0VOQ1JZUFRJT04KKyAgICAgICAgICBjYXNlIFRFTE9QVF9FTkNSWVBUSU9OOgorICAgICAg ICAgICAgaWYgKGNrX3RuX3NiX2VuY3J5cHQoKGNoYXIgKilzYiwgbikgPCAwKSB7CisgICAgICAg ICAgICAgICAgaWYgKFRFTE9QVF9VX01PREUoeCkgPT0gVE5fTkdfTVUgfHwKKyAgICAgICAgICAg ICAgICAgICAgVEVMT1BUX01FX01PREUoeCkgPT0gVE5fTkdfTVUpCisgICAgICAgICAgICAgICAg ICB7CisgICAgICAgICAgICAgICAgICAgICAgdHRjbG9zKDApOworICAgICAgICAgICAgICAgICAg ICAgIHdoeWNsb3NlZCA9IFdDX1RFTE9QVDsKKyAgICAgICAgICAgICAgICAgICAgICByZXR1cm4o LTMpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChU RUxPUFRfTUVfTU9ERSh4KSA9PSBUTl9OR19SUSkKKyAgICAgICAgICAgICAgICAgICAgICBURUxP UFRfTUVfTU9ERSh4KSA9IFROX05HX0FDOworICAgICAgICAgICAgICAgICAgICBpZiAoVEVMT1BU X1VfTU9ERSh4KSA9PSBUTl9OR19SUSkKKyAgICAgICAgICAgICAgICAgICAgICBURUxPUFRfVV9N T0RFKHgpID0gVE5fTkdfQUM7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlm IChURUxPUFRfTUUoeCkpIHsKKyAgICAgICAgICAgICAgICAgICAgVEVMT1BUX01FKHgpID0gMDsK KyAgICAgICAgICAgICAgICAgICAgaWYgKHRuX3NvcHQoV09OVCx4KSA8IDApCisgICAgICAgICAg ICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg ICAgaWYgKFRFTE9QVF9VKHgpKSB7CisgICAgICAgICAgICAgICAgICAgIFRFTE9QVF9VKHgpID0g MDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRuX3NvcHQoRE9OVCx4KSA8IDApCisgICAgICAg ICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICB9CisgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCisjaWZk ZWYgSUtTX09QVElPTgorICAgICAgICAgIGNhc2UgVEVMT1BUX0tFUk1JVDoKKyAgICAgICAgICAg IHJldHVybihpa3NfdG5fc2Ioc2IsIG4tMikpOworI2VuZGlmIC8qIElLU19PUFRJT04gKi8KKyNp ZmRlZiBUTl9DT01QT1JUCisgICAgICAgICAgY2FzZSBURUxPUFRfQ09NUE9SVDoKKyAgICAgICAg ICAgIHJldHVybih0bmNfdG5fc2Ioc2IsIG4tMikpOworI2VuZGlmIC8qIFROX0NPTVBPUlQgKi8K KyAgICAgICAgICBjYXNlIFRFTE9QVF9UVFlQRToKKyAgICAgICAgICAgIHN3aXRjaCAoc2JbMF0p IHsKKyAgICAgICAgICAgICAgY2FzZSBURUxRVUFMX1NFTkQ6ICAgICAgICAvKiBTRU5EIHRlcm1p bmFsIHR5cGU/ICovCisgICAgICAgICAgICAgICAgaWYgKCAhdG5fZGVsYXlfc2IgfHwgIXRuX291 dHN0KDApIHx8IHRuX2luaXQgKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh0bl9zdHR5cCgp IDwgMCkgLyogWWVzLCBzbyBzZW5kIGl0LiAqLworICAgICAgICAgICAgICAgICAgICAgICAgcmV0 dXJuKC0xKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBU RUxPUFRfU0IoVEVMT1BUX1RUWVBFKS50ZXJtLm5lZWRfdG9fc2VuZCA9IDE7CisgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIFRFTFFV QUxfSVM6IHsgICAgICAgIC8qIElTIHRlcm1pbmFsIHR5cGU/ICovCisgICAgICAgICAgICAgICAg ICAvKiBJUyB0ZXJtaW5hbCB0eXBlIC0tIHJlbW90ZSBnYXZlIHVzIGl0cyBjdXJyZW50IHR5cGUg Ki8KKyAgICAgICAgICAgICAgICAgIGludCBpID0gMDsKKyNpZm5kZWYgT1MyCisgICAgICAgICAg ICAgICAgICBDSEFSIG9sZHRlcm1bNjRdLCAqcDsKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAg ICAgICAgICAgIC8qIElzb2xhdGUgdGhlIHNwZWNpZmllZCB0ZXJtaW5hbCB0eXBlIHN0cmluZyAq LworICAgICAgICAgICAgICAgICAgd2hpbGUgKHNiW2krK10gIT0gSUFDKSB7CisgICAgICAgICAg ICAgICAgICAgICAgaWYgKGkgPT0gNDAgfHwgICAgLyogbWF4IGxlbiBvZiB0ZXJtIHN0cmluZyAt IFJGQyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICBzYltpXSA9PSBJQUMpIHsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgc2JbaV0gPSAnXDAnOworICAgICAgICAgICAgICAgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICB9 CisjaWZkZWYgT1MyCisjaWZuZGVmIE5PVEVSTQorICAgICAgICAgICAgICAgICAgc3RydXByKCYo c2JbMV0pKTsgICAgIC8qIFVwcGVyIGNhc2UgaXQgKi8KKyAgICAgICAgICAgICAgICAgIGZvciAo aSA9IDA7IGkgPD0gbWF4X3R0OyBpKyspIHsgLyogZmluZCBpdCBpbiBvdXIgbGlzdCAqLworICAg ICAgICAgICAgICAgICAgICAgIGlmICghc3RyY21wKCYoc2JbMV0pLHR0X2luZm9baV0ueF9uYW1l KQorICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBpICE9IFRUX1ZUTlQpIC8qIGNhbid0IHN1 cHBvcnQgVlROVCBhcyBzZXJ2ZXIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogU2V0IHRlcm1pbmFsIHR5cGUgdG8gdGhlIG9uZSBjaG9z ZW4gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgIT0gdHRfdHlwZSkKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzZXR0ZXJtdHlwZShpLDApOworICAgICAgICAgICAgICAg ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgICAgICBpZiAoaSA+IG1heF90dCAmJgorICAgICAgICAgICAg ICAgICAgICAgIHN0cmNtcCgmKHNiWzFdKSxURUxPUFRfU0IoVEVMT1BUX1RUWVBFKS50ZXJtLnR5 cGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgLyogQ291bGRuJ3QgZmluZCB0aGUgc3BlY2lm aWVkIHRlcm0gdHlwZSAqLworICAgICAgICAgICAgICAgICAgICAgIHNiWzQwXSA9ICdcMCc7Cisg ICAgICAgICAgICAgICAgICAgICAgc3RyY3B5KFRFTE9QVF9TQihURUxPUFRfVFRZUEUpLnRlcm0u dHlwZSwmKHNiWzFdKSk7CisgICAgICAgICAgICAgICAgICAgICAgLyogU0IgVFRZUEUgU0VORCAq LworICAgICAgICAgICAgICAgICAgICAgIHRuX3NzYm9wdChURUxPUFRfVFRZUEUsVEVMUVVBTF9T RU5ELE5VTEwsMCk7CisgICAgICAgICAgICAgICAgICAgICAgVEVMT1BUX1VOQU5TV0VSRURfU0Io VEVMT1BUX1RUWVBFKT0xOworICAgICAgICAgICAgICAgICAgfQorI2VuZGlmIC8qIE5PVEVSTSAq LworI2Vsc2UgLyogT1MyICovCisgICAgICAgICAgICAgICAgICBwID0gKENIQVIgKikgZ2V0ZW52 KCJURVJNIik7CisgICAgICAgICAgICAgICAgICBpZiAocCkKKyAgICAgICAgICAgICAgICAgICAg Y2tzdHJuY3B5KChjaGFyICopb2xkdGVybSwoY2hhciAqKXAsNjMpOworICAgICAgICAgICAgICAg ICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBvbGR0ZXJtWzBdID0gJ1wwJzsKKyAgICAgICAg ICAgICAgICAgIGNrbG93ZXIoKGNoYXIgKikmKHNiWzFdKSk7IC8qIExvd2VyIGNhc2UgbmV3IHRl cm0gKi8KKyAgICAgICAgICAgICAgICAgIGNrbWFrbXNnKHRlcm1fYnVmLDY0LCJURVJNPSIsKGNo YXIgKikmKHNiWzFdKSxOVUxMLE5VTEwpOworI2lmZGVmIE9TMk9SVU5JWAorI2lmbmRlZiBOT1BV VEVOVgorICAgICAgICAgICAgICAgICAgcHV0ZW52KHRlcm1fYnVmKTsKKyNlbmRpZiAvKiBOT1BV VEVOViAqLworI2VuZGlmIC8qIE9TMk9SVU5JWCAqLworI2lmZGVmIENLX0NVUlNFUworI2lmbmRl ZiBNWUNVUlNFUworI2lmbmRlZiBDT0hFUkVOVAorICAgICAgICAgICAgICAgICAgaWYgKHRybWJ1 ZikgeworICAgICAgICAgICAgICAgICAgICAgIGlmICh0Z2V0ZW50KHRybWJ1ZiwoY2hhciAqKSZz YlsxXSkgPCAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVuc3VwcG9ydGVkIHRl cm1pbmFsLiAgSWYgbmV3IGFuZCBvbGQgdGVybWluYWwgKi8KKyAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogdHlwZXMgZG8gbm90IG1hdGNoLCBhc2sgZm9yIGFub3RoZXIgdHlwZS4gKi8KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmNtcCgoY2hhciAqKW9sZHRlcm0sKGNoYXIg Kikmc2JbMV0pKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTQiBUVFlQRSBT RU5EICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bl9zc2JvcHQoVEVMT1BUX1RU WVBFLFRFTFFVQUxfU0VORCxOVUxMLDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg VEVMT1BUX1VOQU5TV0VSRURfU0IoVEVMT1BUX1RUWVBFKT0xOworICAgICAgICAgICAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgfQor I2VuZGlmIC8qIENPSEVSRU5UICovCisjZW5kaWYgLyogTVlDVVJTRVMgKi8KKyNlbmRpZiAvKiBD S19DVVJTRVMgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgfQorICAgICAgICAgICAgYnJlYWs7CisjaWZkZWYgQ0tfRU5WSVJPTk1FTlQKKyNpZmRlZiBD S19YRElTUExPQworICAgICAgICAgIGNhc2UgVEVMT1BUX1hESVNQTE9DOiAgICAgICAgIC8qIFNl bmQgWC1EaXNwbGF5IExvY2F0aW9uICovCisgICAgICAgICAgICBpZiAoc2JbMF0gPT0gVEVMUVVB TF9TRU5EKSB7LyogU0VORCBYLURpc3BsYXkgTG9jPyAqLworICAgICAgICAgICAgICAgIGlmICgg IXRuX2RlbGF5X3NiIHx8ICF0bl9vdXRzdCgwKSB8fCB0bl9pbml0ICkgeworICAgICAgICAgICAg ICAgICAgICBpZiAodG5fc3hkaXNwbG9jKCkgPCAwKSAgICAgLyogWWVzLCBzbyBzZW5kIGl0LiAq LworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgICAgICAgICB9 IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBURUxPUFRfU0IoVEVMT1BUX1hESVNQTE9DKS54 ZGlzcC5uZWVkX3RvX3NlbmQgPSAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K KyAgICAgICAgICAgIC8qIElTIC0tIFggRGlzcGxheSBMb2NhdGlvbiAobm90IHN1cHBvcnRlZCkg Ki8KKyAgICAgICAgICAgIGVsc2UgaWYgKHNiWzBdID09IFRFTFFVQUxfSVMpIHsKKyAgICAgICAg ICAgICAgICBpbnQgaSA9IDA7CisgICAgICAgICAgICAgICAgLyogSXNvbGF0ZSB0aGUgc3BlY2lm aWVkIFgtZGlzcGxheSBzdHJpbmcgKi8KKyAgICAgICAgICAgICAgICB3aGlsZSAoc2JbaSsrXSAh PSBJQUMpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGkgPj0gVFNCVUZTSVopCisgICAgICAg ICAgICAgICAgICAgICAgcmV0dXJuICgtMSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChzYltp XSA9PSBJQUMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNiW2ldID0gJ1wwJzsKKyAgICAg ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsIlRFTE5FVCBTQiBYRElTUExP QyBJUyIsJnNiWzFdLDApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisjZW5k aWYgLyogQ0tfWERJU1BMT0MgKi8KKyNlbmRpZiAvKiBDS19FTlZJUk9OTUVOVCAqLworICAgICAg ICAgIGNhc2UgVEVMT1BUX05BV1M6CisgICAgICAgICAgICAgIGlmIChzc3RlbG5ldAorI2lmZGVm IElLU0QKKyAgICAgICAgICAgICAgICAgICB8fCBpbnNlcnZlcgorI2VuZGlmIC8qIElLU0QgKi8K KyAgICAgICAgICAgICAgICAgICApIHsKKyAgICAgICAgICAgICAgICAgIGludCB3ID0gMCwgaCA9 IDA7CisgICAgICAgICAgICAgICAgICBpbnQgaSA9IDA7CisgICAgICAgICAgICAgICAgICAvKiBB dCB0aGlzIHBvaW50IHNiW10gc2hvdWxkIGNvbnRhaW4gd2lkdGggYW5kIGhlaWdodCAqLworICAg ICAgICAgICAgICAgICAgaWYgKHNiW2ldID09IElBQykgaSsrOworICAgICAgICAgICAgICAgICAg dyA9IChzYltpKytdIDw8IDgpOyAgIC8qIHNhdmUgdXBwZXIgaGVpZ2h0ICovCisgICAgICAgICAg ICAgICAgICBpZiAoc2JbaV0gPT0gSUFDKSBpKys7CisgICAgICAgICAgICAgICAgICB3ICs9IHNi W2krK107ICAgICAgICAgLyogc2F2ZSB0aGUgd2lkdGggKi8KKyAgICAgICAgICAgICAgICAgIGlm IChzYltpXSA9PSBJQUMpIGkrKzsKKyAgICAgICAgICAgICAgICAgIGggPSAoc2JbaSsrXSA8PCA4 KTsgICAvKiBzYXZlIHVwcGVyIGhlaWdodCAqLworICAgICAgICAgICAgICAgICAgaWYgKHNiW2ld ID09IElBQykgaSsrOworICAgICAgICAgICAgICAgICAgaCArPSBzYltpKytdOworICAgICAgICAg ICAgICAgICAgZGVidWcoRjExMSwidG5fZG9vcCBOQVdTIFNCIiwid2lkdGgiLHcpOworICAgICAg ICAgICAgICAgICAgZGVidWcoRjExMSwidG5fZG9vcCBOQVdTIFNCIiwiaGVpZ2h0IixoKTsKKwor ICAgICAgICAgICAgICAgICAgaWYgKHcgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgdyA9IDgw OworICAgICAgICAgICAgICAgICAgaWYgKGggPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgaCA9 IDI0OworI2lmbmRlZiBOT0xPQ0FMCisgICAgICAgICAgICAgICAgICBpZiAodGNwX2luY29taW5n IHx8IGluc2VydmVyKSB7CisjaWZkZWYgT1MyCisgICAgICAgICAgICAgICAgICAgICAgdHRfY29s c1tWVEVSTV0gPSB3OworICAgICAgICAgICAgICAgICAgICAgIHR0X3Jvd3NbVlRFUk1dID0gaDsK KyAgICAgICAgICAgICAgICAgICAgICBWc2NyblNldFdpZHRoKFZURVJNLCB3KTsKKyAgICAgICAg ICAgICAgICAgICAgICBWc2NyblNldEhlaWdodChWVEVSTSwgaCsodHRfc3RhdHVzW1ZURVJNXT8x OjApKTsKKyNpZmRlZiBJS1NECisgICAgICAgICAgICAgICAgICAgICAgaWYgKGluc2VydmVyKSB7 CisgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZF9jb2xzID0gdHRfY29sc1tWQ01EXSA9IHc7 CisgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZF9yb3dzID0gdHRfcm93c1tWQ01EXSA9IGg7 CisgICAgICAgICAgICAgICAgICAgICAgICAgIFZzY3JuU2V0V2lkdGgoVkNNRCwgdyk7CisgICAg ICAgICAgICAgICAgICAgICAgICAgIFZzY3JuU2V0SGVpZ2h0KFZDTUQsIGgpOworICAgICAgICAg ICAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBJS1NEICovCisjZWxzZSAvKiBPUzIgKi8KKyAgICAg ICAgICAgICAgICAgICAgICB0dF9jb2xzID0gdzsKKyAgICAgICAgICAgICAgICAgICAgICB0dF9y b3dzID0gaDsKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisj aWZkZWYgT1MyCisgICAgICAgICAgICAgICAgICAgICAgdHRfY29sc1tWQ01EXSA9IHc7CisgICAg ICAgICAgICAgICAgICAgICAgdHRfcm93c1tWQ01EXSA9IGg7CisgICAgICAgICAgICAgICAgICAg ICAgVnNjcm5TZXRXaWR0aChWQ01ELCB3KTsKKyAgICAgICAgICAgICAgICAgICAgICBWc2NyblNl dEhlaWdodChWQ01ELCBoKTsKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAgICAgICAgICAgICAg ICBjbWRfY29scyA9IHc7CisgICAgICAgICAgICAgICAgICAgICAgY21kX3Jvd3MgPSBoOworICAg ICAgICAgICAgICAgICAgfQorI2Vsc2UgLyogTk9MT0NBTCAqLworICAgICAgICAgICAgICAgICAg Y21kX2NvbHMgPSB3OworICAgICAgICAgICAgICAgICAgY21kX3Jvd3MgPSBoOworI2VuZGlmIC8q IE5PTE9DQUwgKi8KKworICAgICAgICAgICAgICAgICAgLyogQWRkIExJTkVTIGFuZCBDT0xVTU5T IHRvIHRoZSBlbnZpcm9ubWVudCAqLworICAgICAgICAgICAgICAgICAgY2ttYWttc2coKGNoYXIg Kilyb3dzX2J1ZiwxNiwiTElORVM9Iixja2l0b2EoaCksTlVMTCxOVUxMKTsKKyAgICAgICAgICAg ICAgICAgIGNrbWFrbXNnKChjaGFyICopY29sc19idWYsMTYsIkNPTFVNTlM9Iixja2l0b2Eodyks TlVMTCxOVUxMKTsKKyNpZmRlZiBPUzJPUlVOSVgKKyNpZm5kZWYgTk9QVVRFTlYKKyAgICAgICAg ICAgICAgICAgIHB1dGVudihyb3dzX2J1Zik7CisgICAgICAgICAgICAgICAgICBwdXRlbnYoY29s c19idWYpOworI2VuZGlmIC8qIE5PUFVURU5WICovCisjZW5kaWYgLyogT1MyT1JVTklYICovCisg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgYnJlYWs7CisjaWZkZWYgQ0tfRU5WSVJPTk1F TlQKKyAgICAgICAgICBjYXNlIFRFTE9QVF9ORVdFTlZJUk9OOgorICAgICAgICAgICAgc3dpdGNo IChzYlswXSkgeworICAgICAgICAgICAgICBjYXNlIFRFTFFVQUxfSVM6ICAgICAgICAgICAgICAg ICAgLyogSVMgKi8KKyAgICAgICAgICAgICAgY2FzZSBURUxRVUFMX0lORk86ICAgICAgICAgICAg ICAgIC8qIElORk8gKi8KKyAgICAgICAgICAgICAgICBpZiAoc2JbMF0gPT0gVEVMUVVBTF9JUykK KyAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsInRuX2Rvb3AgTkVXLUVOViBTQiBJUyIsIiIs bi0zKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAx LCJ0bl9kb29wIE5FVy1FTlYgU0IgSU5GTyIsIiIsbi0zKTsKKyAgICAgICAgICAgICAgICBpZiAo c3N0ZWxuZXQgfHwgaW5zZXJ2ZXIpIHsgLyogWWVzLCByZWNlaXZlIGl0LiAqLworICAgICAgICAg ICAgICAgICAgICBpZiAodG5fcm5lbnYoKENIQVIgKikmc2JbMV0sbi0zKSA8IDApCisgICAgICAg ICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgVEVMUVVBTF9TRU5EOiAgICAgICAgLyog U0VORCAqLworICAgICAgICAgICAgICAgIGlmICggc3N0ZWxuZXQgfHwgaW5zZXJ2ZXIgKSAgICAg ICAgIC8qIGlnbm9yZSBpZiBzZXJ2ZXIgKi8KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgICAgICAgICAgLyogV2UgbmVlZCB0byB0YWtlIHRoZSBzYltdIGFuZCBidWlsZCBhIHN0 cnVjdHVyZSAqLworICAgICAgICAgICAgICAgIC8qIGNvbnRhaW5pbmcgYWxsIG9mIHRoZSB2YXJp YWJsZXMgYW5kIHR5cGVzIHRoYXQgKi8KKyAgICAgICAgICAgICAgICAvKiB3ZSBhcmUgc3VwcG9z ZWQgdG8ga2VlcCB0cmFjayBvZiBhbmQgc2VuZCB0byAgICovCisgICAgICAgICAgICAgICAgLyog dGhlIGhvc3QsIHRoZW4gY2FsbCB0bl9zbmVudigpLiAgICAgICAgICAgICAgICAgICovCisgICAg ICAgICAgICAgICAgLyogT3Igd2UgY2FuIHB1bnQgLi4uICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICovCisgICAgICAgICAgICAgICAgaWYgKCAhdG5fZGVsYXlfc2IgfHwgIXRuX291dHN0 KDApIHx8IHRuX2luaXQgKSB7CisgICAgICAgICAgICAgICAgICBpZiAodG5fc25lbnYoKENIQVIg Kikmc2JbMV0sbi0zKSA8IDApIC8qIFllcywgc2VuZCBpdC4gKi8KKyAgICAgICAgICAgICAgICAg ICAgIHJldHVybigtMSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyNpZm5kZWYgVk1TCisg ICAgICAgICAgICAgICAgICBDSEFSICogeHh4OworICAgICAgICAgICAgICAgICAgeHh4ID0gKENI QVIgKikgbWFsbG9jKG4tMSk7CisjZWxzZQorICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hh ciAqIHh4eDsKKyAgICAgICAgICAgICAgICAgIHh4eCA9ICh1bnNpZ25lZCBjaGFyICopIG1hbGxv YyhuLTEpOworI2VuZGlmIC8qIFZNUyAqLworICAgICAgICAgICAgICAgICAgLyogUG9zdHBvbmUg c2VuZGluZyB1bnRpbCBlbmQgb2YgdG5faW5pKCkgKi8KKyAgICAgICAgICAgICAgICAgIFRFTE9Q VF9TQihURUxPUFRfTkVXRU5WSVJPTikuZW52LnN0ciA9IHh4eDsKKyAgICAgICAgICAgICAgICAg IGlmIChURUxPUFRfU0IoVEVMT1BUX05FV0VOVklST04pLmVudi5zdHIpIHsKKyAgICAgICAgICAg ICAgICAgIG1lbWNweSgoY2hhciAqKVRFTE9QVF9TQihURUxPUFRfTkVXRU5WSVJPTikuZW52LnN0 ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSZzYlsxXSxuLTMpOworICAg ICAgICAgICAgICAgICAgVEVMT1BUX1NCKFRFTE9QVF9ORVdFTlZJUk9OKS5lbnYuc3RyW24tM10g PSBJQUM7CisgICAgICAgICAgICAgICAgICBURUxPUFRfU0IoVEVMT1BUX05FV0VOVklST04pLmVu di5zdHJbbi0yXSA9ICdcMCc7CisgICAgICAgICAgICAgICAgICBURUxPUFRfU0IoVEVMT1BUX05F V0VOVklST04pLmVudi5sZW4gPSBuLTM7CisgICAgICAgICAgICAgICAgICBURUxPUFRfU0IoVEVM T1BUX05FV0VOVklST04pLmVudi5uZWVkX3RvX3NlbmQgPSAxOworICAgICAgICAgICAgICAgICAg fQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBDS19FTlZJUk9OTUVOVCAqLwor I2lmZGVmIENLX1NORExPQworICAgICAgICAgIGNhc2UgVEVMT1BUX1NORExPQzogeworICAgICAg ICAgICAgICBpZiAoIGRlYmxvZyApIHsKKyAgICAgICAgICAgICAgICAgIHNiW24tMl0gPSAnXDAn OworICAgICAgICAgICAgICAgICAgZGVidWcoRjExMCwiVEVMTkVUIFNlbmQtTG9jYXRpb24iLHNi LDApOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0K KyNlbmRpZiAvKiBDS19TTkRMT0MgKi8KKyAgICAgICAgICB9IC8qIHN3aXRjaCAqLworICAgICAg ICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuKDApOworfQorCitpbnQKKyNpZmRlZiBDS19BTlNJ QyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBURUxORVQgRE8gT1BUSU9OICovCit0bl9kb29w KENIQVIgeiwgaW50IGVjaG8sIGludCAoKmZuKShpbnQpKQorI2Vsc2UKK3RuX2Rvb3AoeiwgZWNo bywgZm4pIENIQVIgejsgaW50IGVjaG87IGludCAoKmZuKSgpOworI2VuZGlmIC8qIENLX0FOU0lD ICovCisvKiB0bl9kb29wICovIHsKKyAgICBpbnQgeD0wLCB5PTA7CisKKyAgICBkZWJ1ZyhGMTAx LCJ0bl9kb29wIGNoYXIiLCIiLHopOworICAgIGRlYnVnKEYxMDEsInRuX2Rvb3AgdHRucHJvdG8i LCIiLHR0bnByb3RvKTsKKworICAgIGlmICghSVNfVEVMTkVUKCkpIHJldHVybigzKTsKKworI2lm ZGVmIENLX1NTTAorICAgIGRlYnVnKEYxMDEsInRuX2Rvb3Agc3NsX3Jhd19mbGFnIiwiIixzc2xf cmF3X2ZsYWcpOworICAgIGlmIChzc2xfcmF3X2ZsYWcgfHwgdGxzX3Jhd19mbGFnKSByZXR1cm4o Nyk7CisjZW5kaWYJLyogQ0tfU1NMICovCisgICAgZGVidWcoRjEwMCwidG5fZG9vcCB0dG5wcm90 byBwcm9jZWVkaW5nLi4uIiwiIiwwKTsKKworICAgIGlmICh6ICE9IChDSEFSKSBJQUMpIHsKKyAg ICAgICAgZGVidWcoRjEwMSwidG5fZG9vcCBiYWQgY2FsbCIsIiIseik7CisgICAgICAgIHJldHVy bigtMSk7CisgICAgfQorICAgIGlmICh0dG5ldCAhPSBORVRfVENQQikgICAgICAgICAgICAgIC8q IENoZWNrIG5ldHdvcmsgdHlwZSAqLworICAgICAgcmV0dXJuKDApOworICAgIGlmICh0dG5wcm90 byAhPSBOUF9URUxORVQgJiYKKyAgICAgICAgIHR0bnByb3RvICE9IE5QX05PTkUpICAgICAgICAg ICAvKiBDaGVjayBwcm90b2NvbCAqLworICAgICAgICByZXR1cm4oMCk7CisKKyAgICB4ID0gdG5f eGRvb3AoeixlY2hvLGZuKTsKKyAgICBpZiAoeCA+PSAwICYmICF0bl9iZWd1bikgeworICAgICAg ICB5ID0gdG5fc3RhcnQoKTsKKyAgICB9CisgICAgcmV0dXJuKHkgPCAwID8geSA6IHgpOworfQor CisjaWZkZWYgQ0tfRU5WSVJPTk1FTlQKKworLyogVGVsbmV0IHJlY2VpdmUgbmV3IGVudmlyb25t ZW50ICovCisvKiBSZXR1cm5zIC0xIG9uIGVycm9yLCAwIGlmIG5vdGhpbmcgaGFwcGVucywgMSBv biBzdWNjZXNzICovCisvKiBJbiBvcmRlciBmb3IgdGhpcyBjb2RlIHRvIHdvcmssIHNiW2xlbl0g PT0gSUFDICAgICAgICAgICovCisvKiBXZSBjdXJyZW50bHkgb25seSBzdXBwb3J0IHRoZSBVU0VS IGVudmlyb25tZW50IHZhcmlhYmxlICovCisKK2ludAorI2lmZGVmIENLX0FOU0lDCit0bl9ybmVu dihDSEFSICogc2IsIGludCBsZW4pCisjZWxzZQordG5fcm5lbnYoc2IsIGxlbikgQ0hBUiAqIHNi OyBpbnQgbGVuOworI2VuZGlmIC8qIENLX0FOU0lDICovCisvKiB0bl9ybmVudiAqLyB7ICAgICAg ICAgICAgICAgICAgICAgICAgLyogUmVjZWl2ZSBuZXcgZW52aXJvbm1lbnQgKi8KKyAgICBjaGFy IHZhcm5hbWVbMTddOworICAgIGNoYXIgdmFsdWVbNjVdOworICAgIGNoYXIgKiByZXBseSA9IDAs ICogcyA9IDA7CisgICAgaW50IGksaixrLG47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBXb3JrZXIuICovCisgICAgaW50IHR5cGUgPSAwOyAvKiAwIGZvciBOT05FLCAxIGZvciBW QVIsIDIgZm9yIFVTRVJWQVIsICovCisgICAgICAgICAgICAgICAgICAvKiAzIGZvciBWQUxVRSBp biBwcm9ncmVzcyAqLworCisgICAgaWYgKHR0bmV0ICE9IE5FVF9UQ1BCKSByZXR1cm4oMCk7Cisg ICAgaWYgKHR0bnByb3RvICE9IE5QX1RFTE5FVCkgcmV0dXJuKDApOworICAgIGlmIChzYiA9PSBO VUxMKSByZXR1cm4oLTEpOworCisgICAgaWYgKGxlbiA9PSAwKSByZXR1cm4oMSk7CisKKyAgICAv KgorICAgIFBhaXJzIG9mIDx0eXBlPiBbVkFSPTAsIFZBTFVFPTEsIEVTQz0yLCBVU0VSVkFSPTNd IDx2YWx1ZT4gInVudGVybWluYXRlZCIKKyAgICBmb2xsb3cgaGVyZSB1bnRpbCBkb25lLi4uCisg ICAgKi8KKyAgICBmb3IgKGkgPSAwLCBqID0gMCwgayA9IDAsIHR5cGUgPSAwLCB2YXJuYW1lWzBd PSAnXDAnOyBpIDw9IGxlbjsgaSsrKSB7CisgICAgICAgIHN3aXRjaCAoc2JbaV0pIHsKKyAgICAg ICAgY2FzZSBURUxfRU5WX1ZBUjogICAgICAgICAgICAgICAvKiBWQVIgKi8KKyAgICAgICAgY2Fz ZSBURUxfRU5WX1VTRVJWQVI6ICAgICAgICAgICAvKiBVU0VSVkFSICovCisgICAgICAgIGNhc2Ug SUFDOiAgICAgICAgICAgICAgICAgICAgICAgLyogRW5kIG9mIHRoZSBsaXN0ICovCisgICAgICAg ICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgICAgICAgY2FzZSAwOiAgICAgICAgICAgICAg ICAgICAvKiBOb3RoaW5nIGluIHByb2dyZXNzICovCisgICAgICAgICAgICAgICAgLyogSWYgd2Ug Z2V0IElBQyBvbmx5LCB0aGVuIHRoYXQgbWVhbnMgdGhlcmUgd2VyZSAqLworICAgICAgICAgICAg ICAgIC8qIG5vIGVudmlyb25tZW50IHZhcmlhYmxlcyB0byBzZW5kLiAgd2UgYXJlIGRvbmUgKi8K KyAgICAgICAgICAgICAgICBpZiAoaiA9PSAwICYmIHNiW2ldID09IElBQykKKyAgICAgICAgICAg ICAgICAgICAgcmV0dXJuKDEpOworICAgICAgICAgICAgICBjYXNlIDE6ICAgICAgICAgICAgICAg ICAgIC8qIFZBUiBpbiBwcm9ncmVzcyAqLworICAgICAgICAgICAgICBjYXNlIDI6ICAgICAgICAg ICAgICAgICAgIC8qIFVTRVJWQVIgaW4gcHJvZ3Jlc3MgKi8KKyAgICAgICAgICAgICAgY2FzZSAz OiAgICAgICAgICAgICAgICAgICAvKiBWQUxVRSBpbiBwcm9ncmVzcyAqLworICAgICAgICAgICAg ICAgIHZhbHVlW2tdID0gJ1wwJzsKKyAgICAgICAgICAgICAgICB2YXJuYW1lW2pdID0gJ1wwJzsK KyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJ0bl9ybmVudiB2YXJuYW1lIix2YXJuYW1lLHR5 cGUpOworICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsInRuX3JuZW52IHZhbHVlIix2YWx1ZSx0 eXBlKTsKKyAgICAgICAgICAgICAgICBpZiAoIXN0cmNtcCh2YXJuYW1lLCJVU0VSIikpIHsKKyNp ZmRlZiBDS19BVVRIRU5USUNBVElPTgorICAgICAgICAgICAgICAgICAgICBpZiAoY2tfdG5fYXV0 aF92YWxpZCgpICE9IEFVVEhfVkFMSUQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVy biBjaGFyIHN6VXNlck5hbWVSZXF1ZXN0ZWRbXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRl YnVnKEYxMDAsInRuX3JuZW52ICE9IEFVVEhfVkFMSUQiLCIiLDApOworICAgICAgICAgICAgICAg ICAgICAgICAgY2tzdHJuY3B5KHN6VXNlck5hbWVSZXF1ZXN0ZWQsdmFsdWUsVUlEQlVGTEVOKTsK KyAgICAgICAgICAgICAgICAgICAgICAgIGNrc3RybmNweSh1aWRidWYsdmFsdWUsVUlEQlVGTEVO KTsKKyNpZmRlZiBDS19TU0wKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzc2xfYWN0aXZl X2ZsYWcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHRsc19pc191c2VyX3Zh bGlkKHNzbF9jb24sIHVpZGJ1ZikgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGV4dGVybiBjaGFyIHN6VXNlck5hbWVBdXRoZW50aWNhdGVkW107CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNrc3RybmNweShzelVzZXJOYW1lQXV0aGVudGljYXRlZCx1aWRidWYs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUlEQlVGTEVOKTsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0aF9maW5pc2hlZChBVVRIX1ZBTElE KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg ICB9IGVsc2UgaWYgKHRsc19hY3RpdmVfZmxhZykgeworICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGlmICggdGxzX2lzX3VzZXJfdmFsaWQodGxzX2NvbiwgdWlkYnVmKSApIHsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZXJuIGNoYXIgc3pVc2VyTmFtZUF1dGhlbnRpY2F0 ZWRbXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2tzdHJuY3B5KHN6VXNlck5h bWVBdXRoZW50aWNhdGVkLHVpZGJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBVSURCVUZMRU4pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBh dXRoX2ZpbmlzaGVkKEFVVEhfVkFMSUQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBDS19TU0wgKi8KKyAgICAgICAg ICAgICAgICAgICAgfSBlbHNlIHsgICAgLyogQVVUSF9WQUxJRCAqLworICAgICAgICAgICAgICAg ICAgICAgICAgaW50IHggPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoRjExMCwi dG5fcm5lbnYgQVVUSF9WQUxJRCB1aWRidWYiLHVpZGJ1ZiwwKTsKKworI2lmZGVmIE9TMgorICAg ICAgICAgICAgICAgICAgICAgICAgeCA9IGNrc3RyY21wKHZhbHVlLHVpZGJ1ZiwtMSwwKTsgLyog Y2FzZSBpbnNlbnNpdGl2ZSAqLworI2lmZGVmIE5UCisgICAgICAgICAgICAgICAgICAgICAgICAv KiBOVExNIGF1dGhlbnRpY2F0aW9uIHJldHVybnMgbmFtZXMgb2YgdGhlIGZvcm0gKi8KKyAgICAg ICAgICAgICAgICAgICAgICAgIC8qIERPTUFJTlx1c2VyLiAgV2UgbmVlZCB0byBjaGVjayB0byBz ZWUgb2YgdGhlICAqLworICAgICAgICAgICAgICAgICAgICAgICAgLyogVVNFUiBWQVIgY29udGFp bnMgYSBkb21haW4gbmFtZSBvciBub3QuICBJZiAgICovCisgICAgICAgICAgICAgICAgICAgICAg ICAvKiBub3QsIHRoZW4gd2UgZG8gbm90IHdhbnQgdG8gY2hhbmdlIHN0YXRlIGlmICAgKi8KKyAg ICAgICAgICAgICAgICAgICAgICAgIC8qIHRoZSB1aWRidWYgbWF0Y2hlcyB0aGUgVVNFUiBWQVIg d2hlbiB0aGUgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgLyogRE9NQUlOIGlzIGln bm9yZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAg ICAgICBpZiAoIHggJiYgY2tfdG5fYXV0aGVudGljYXRlZCgpID09IEFVVEhUWVBFX05UTE0gKSB7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqIHMxPU5VTEwsICogczI9TlVMTDsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgbGVuMSwgbGVuMiwgaTsKKworICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGxlbjEgPSBzdHJsZW4odmFsdWUpOworICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGZvciAoIGk9bGVuMS0xIDsgaT49MCA7IGktLSkgeworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHZhbHVlW2ldID09ICdcXCcgKSB7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMSA9ICZ2YWx1ZVtpKzFdOyAgIC8qIERP TUFJTiBmb3VuZCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHMxID09IE5VTEwg KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbjIgPSBzdHJsZW4odWlkYnVm KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggaT1sZW4yLTEgOyBpPj0w IDsgaS0tKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHVpZGJ1 ZltpXSA9PSAnXFwnICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHMyID0gJnVpZGJ1ZltpKzFdOyAgIC8qIERPTUFJTiBmb3VuZCAqLworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBzMiApCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB4ID0gY2tzdHJjbXAodmFsdWUsczIsLTEsMCk7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorI2VuZGlmIC8q IE5UICovCisjZWxzZSAvKiBPUzIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIHggPSBja3N0 cmNtcCh2YWx1ZSx1aWRidWYsLTEsMSk7IC8qIGNhc2Ugc2Vuc2l0aXZlICovCisjZW5kaWYgLyog T1MyICovCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHggKSB7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZXh0ZXJuIGNoYXIgc3pVc2VyTmFtZVJlcXVlc3RlZFtdOworICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNrc3RybmNweSh1aWRidWYsdmFsdWUsVUlEQlVGTEVOKTsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBja3N0cm5jcHkoc3pVc2VyTmFtZVJlcXVlc3Rl ZCx2YWx1ZSxVSURCVUZMRU4pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhfZmlu aXNoZWQoQVVUSF9VU0VSKTsKKyNpZmRlZiBDS19TU0wKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpZiAoc3NsX2FjdGl2ZV9mbGFnIHx8IHRsc19hY3RpdmVfZmxhZykgeworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHRsc19pc191c2VyX3ZhbGlkKHNzbF9jb24sIHVp ZGJ1ZikgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0aF9maW5pc2hl ZChBVVRIX1ZBTElEKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisjZW5kaWYgLyog Q0tfU1NMICovCisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg IH0KKyNlbHNlIC8qIENLX0FVVEhFTlRJQ0FUSU9OICovCisgICAgICAgICAgICAgICAgICAgIGNr c3RybmNweSh1aWRidWYsdmFsdWUsVUlEQlVGTEVOKTsKKyNlbmRpZiAvKiBDS19BVVRIRU5USUNB VElPTiAqLworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIHZhcm5hbWVbMF0gPSAnXDAnOworICAgICAgICAgICAgdmFs dWVbMF0gPSAnXDAnOworICAgICAgICAgICAgaiA9IDA7CisgICAgICAgICAgICBrID0gMDsKKyAg ICAgICAgICAgIHR5cGUgPSAoc2JbaV0gPT0gVEVMX0VOVl9VU0VSVkFSID8gMiA6ICAgICAgLyog VVNFUlZBUiAqLworICAgICAgICAgICAgICAgICAgICBzYltpXSA9PSBURUxfRU5WX1ZBUiA/IDEg OiAgLyogVkFSICovCisgICAgICAgICAgICAgICAgICAgICAwCisgICAgICAgICAgICAgICAgICAg ICApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVEVMX0VOVl9WQUxVRTogLyog VkFMVUUgKi8KKyAgICAgICAgICAgIGlmICggdHlwZSA9PSAxIHx8IHR5cGUgPT0gMiApCisgICAg ICAgICAgICAgICAgdHlwZSA9IDM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBU RUxfRU5WX0VTQzogICAgICAgLyogRVNDICovCisgICAgICAgICAgICAvKiBUYWtlIG5leHQgY2hh cmFjdGVyIGxpdGVyYWxseSAqLworICAgICAgICAgICAgaWYgKCArK2kgPj0gbGVuICkKKyAgICAg ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIC8qIG90aGVyd2lzZSwgZmFsbHRocm91Z2gg c28gYnl0ZSB3aWxsIGJlIGFkZGVkIHRvIHN0cmluZy4gKi8KKyAgICAgICAgZGVmYXVsdDoKKyAg ICAgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICAgICAgY2FzZSAxOiAgICAgLyogVkFS IGluIHByb2dyZXNzICovCisgICAgICAgICAgICBjYXNlIDI6ICAgICAvKiBVU0VSVkFSIGluIHBy b2dyZXNzICovCisgICAgICAgICAgICAgICAgaWYgKCBqIDwgMTYgKQorICAgICAgICAgICAgICAg ICAgICB2YXJuYW1lW2orK10gPSBzYltpXTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgICAgICBpZiAoIGsgPCA2NCApCisgICAgICAgICAg ICAgICAgICAgIHZhbHVlW2srK10gPSBzYltpXTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4oMCk7Cit9CisKKy8qIFRo ZXNlIGFyZSBmb3IgTWljcm9zb2Z0IFNGVSB2ZXJzaW9uIDIgVGVsbmV0IFNlcnZlciAqLworI2Rl ZmluZSBTRlVUTE5UVkVSICJTRlVUTE5UVkVSIgorI2RlZmluZSBTRlVUTE5UTU9ERSAiU0ZVVExO VE1PREUiCisjZGVmaW5lIFNGVVRMTlRWRVJfVkFMVUUgICIyIgorI2RlZmluZSBTRlVUTE5UTU9E RV9WQUxVRSAiY29uc29sZSIJLyogVGhlIG90aGVyIHZhbHVlIGlzICJzdHJlYW0iICovCisKKy8q IFRlbG5ldCBzZW5kIG5ldyBlbnZpcm9ubWVudCAqLworLyogUmV0dXJucyAtMSBvbiBlcnJvciwg MCBpZiBub3RoaW5nIGhhcHBlbnMsIDEgb24gc3VjY2VzcyAqLworLyogSW4gb3JkZXIgZm9yIHRo aXMgY29kZSB0byB3b3JrLCBzYltsZW5dID09IElBQyAgICAgICAgICAqLworCitpbnQKKyNpZmRl ZiBDS19BTlNJQwordG5fc25lbnYoQ0hBUiAqIHNiLCBpbnQgbGVuKQorI2Vsc2UKK3RuX3NuZW52 KHNiLCBsZW4pIENIQVIgKiBzYjsgaW50IGxlbjsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyog dG5fc25lbnYgKi8geyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNlbmQgbmV3IGVudmlyb25t ZW50ICovCisgICAgY2hhciB2YXJuYW1lWzE2XTsKKyAgICBjaGFyICogcmVwbHkgPSAwLCAqIHMg PSAwOworICAgIGludCBpLGosbjsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdvcmtlci4g Ki8KKyAgICBpbnQgdHlwZSA9IDA7ICAgICAgIC8qIDAgZm9yIE5PTkUsIDEgZm9yIFZBUiwgMiBm b3IgVVNFUlZBUiBpbiBwcm9ncmVzcyAqLworICAgIGV4dGVybiBpbnQgY2tfbGNuYW1lOworICAg IGNoYXIgbG9jYWx1aWRidWZbVUlEQlVGTEVOXTsJLyogKEluaXRpYWxpemVkIGp1c3QgYmVsb3cp ICovCisgICAgY2hhciAqIHV1ID0gdWlkYnVmOworICAgIGNoYXIgKiBkaXNwID0gTlVMTDsKKwor ICAgIGxvY2FsdWlkYnVmWzBdID0gJ1wwJzsKKyAgICBpZiAodHRuZXQgIT0gTkVUX1RDUEIpIHJl dHVybigwKTsKKyAgICBpZiAodHRucHJvdG8gIT0gTlBfVEVMTkVUKSByZXR1cm4oMCk7CisgICAg aWYgKCFzYikgcmV0dXJuKC0xKTsKKworI2lmZGVmIENLX1NTTAorICAgIGlmIChURUxPUFRfU0Io VEVMT1BUX1NUQVJUX1RMUykuc3RhcnRfdGxzLm1lX2ZvbGxvd3MpIHsKKyAgICAgICAgcmV0dXJu KDApOworICAgIH0KKyNlbmRpZiAvKiBDS19TU0wgKi8KKworI2lmZGVmIENLX0ZPUldBUkRfWAor ICAgIGlmIChURUxPUFRfVShURUxPUFRfRk9SV0FSRF9YKSkgeworICAgICAgICBkaXNwID0gTlVM TDsKKyAgICB9IGVsc2UKKyNlbmRpZiAvKiBDS19GT1JXQVJEX1ggKi8KKyAgICAgICAgZGlzcCA9 IChjaGFyICopdG5fZ2V0X2Rpc3BsYXkoKTsKKworICAgIGlmIChja19sY25hbWUpIHsKKyAgICAg ICAgY2tzdHJuY3B5KGxvY2FsdWlkYnVmLHVpZGJ1ZixVSURCVUZMRU4pOworICAgICAgICBja2xv d2VyKGxvY2FsdWlkYnVmKTsKKyAgICAgICAgdXUgPSBsb2NhbHVpZGJ1ZjsKKyAgICB9CisKKyAg ICBja2hleGR1bXAoKENIQVIgKikidG5fc25lbnYgc2JbXSIsc2IsbGVuKTsKKyAgICBkZWJ1ZyhG MTEwLCJ0bl9zbmVudiB1aWRidWYiLHVpZGJ1ZiwwKTsKKyAgICBkZWJ1ZyhGMTEwLCJ0bl9zbmVu diBsb2NhbHVpZGJ1ZiIsbG9jYWx1aWRidWYsMCk7CisgICAgZGVidWcoRjExMCwidG5fc25lbnYg dG5fZW52X3N5cyIsdG5fZW52X3N5cywwKTsKKyAgICBkZWJ1ZyhGMTEwLCJ0bl9zbmVudiB0bl9l bnZfZGlzcCIsdG5fZW52X2Rpc3AsMCk7CisgICAgZGVidWcoRjExMCwidG5fc25lbnYgZGlzcCIs ZGlzcCwwKTsKKworICAgIC8qIEZpcnN0IGRldGVybWluZSB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVy IHdlIHdpbGwgbmVlZCAqLworICAgIGZvciAoaSA9IDAsIGogPSAwLCBuID0gMCwgdHlwZSA9IDAs IHZhcm5hbWVbMF09ICdcMCc7IGkgPD0gbGVuOyBpKyspIHsKKyAgICAgICAgc3dpdGNoIChzYltp XSkgeworICAgICAgICAgIGNhc2UgVEVMX0VOVl9WQVI6ICAgICAgICAgICAgIC8qIFZBUiAqLwor ICAgICAgICAgIGNhc2UgVEVMX0VOVl9VU0VSVkFSOiAgICAgICAgIC8qIFVTRVJWQVIgKi8KKyAg ICAgICAgY2FzZSBJQUM6ICAgICAgICAgICAgICAgICAgICAgLyogRW5kIG9mIHRoZSBsaXN0ICov CisgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgMDogICAgICAg ICAgICAgICAgICAgLyogTm90aGluZyBpbiBwcm9ncmVzcyAqLworICAgICAgICAgICAgICAgIC8q IElmIHdlIGdldCBJQUMgb25seSwgdGhlbiB0aGF0IG1lYW5zIHNlbmQgYWxsICovCisgICAgICAg ICAgICAgICAgLyogVkFSIGFuZCBVU0VSVkFSLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Ki8KKyAgICAgICAgICAgICAgICBpZiAoIShqID09IDAgJiYgc2JbaV0gPT0gSUFDKSkKKyAgICAg ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAxOiAgICAgICAgICAgICAgICAg ICAvKiBWQVIgaW4gcHJvZ3Jlc3MgKi8KKyAgICAgICAgICAgICAgICB2YXJuYW1lW2pdID0gJ1ww JyA7CisgICAgICAgICAgICAgICAgaWYgKCF2YXJuYW1lWzBdKSB7ICAgICAgLyogU2VuZCBBbGwg Ki8KKyAgICAgICAgICAgICAgICAgICAgaWYgKHV1WzBdKQorICAgICAgICAgICAgICAgICAgICAg IG4gKz0gc3RybGVuKHV1KSArIDQgKyAyOworICAgICAgICAgICAgICAgICAgICBpZiAodG5fZW52 X2pvYlswXSkKKyAgICAgICAgICAgICAgICAgICAgICBuICs9IHN0cmxlbih0bl9lbnZfam9iKSAr IDMgKyAyOworICAgICAgICAgICAgICAgICAgICBpZiAodG5fZW52X2FjY3RbMF0pCisgICAgICAg ICAgICAgICAgICAgICAgbiArPSBzdHJsZW4odG5fZW52X2FjY3QpICsgNCArIDI7CisgICAgICAg ICAgICAgICAgICAgIGlmICh0bl9lbnZfcHJudFswXSkKKyAgICAgICAgICAgICAgICAgICAgICBu ICs9IHN0cmxlbih0bl9lbnZfcHJudCkgKyA3ICsgMjsKKyAgICAgICAgICAgICAgICAgICAgaWYg KHRuX2Vudl9zeXNbMF0pCisgICAgICAgICAgICAgICAgICAgICAgbiArPSBzdHJsZW4odG5fZW52 X3N5cykgKyAxMCArIDI7CisgICAgICAgICAgICAgICAgICAgIGlmIChkaXNwKQorICAgICAgICAg ICAgICAgICAgICAgIG4gKz0gc3RybGVuKGRpc3ApICsgNyArIDI7CisgICAgICAgICAgICAgICAg fSBlbHNlIGlmICghc3RyY21wKHZhcm5hbWUsIlVTRVIiKSAmJiB1dVswXSkKKyAgICAgICAgICAg ICAgICAgIG4gKz0gc3RybGVuKHV1KSArIDQgKyAyOworICAgICAgICAgICAgICAgIGVsc2UgaWYg KCFzdHJjbXAodmFybmFtZSwiSk9CIikgJiYgdG5fZW52X2pvYlswXSkKKyAgICAgICAgICAgICAg ICAgIG4gKz0gc3RybGVuKHRuX2Vudl9qb2IpICsgMyArIDI7CisgICAgICAgICAgICAgICAgZWxz ZSBpZiAoIXN0cmNtcCh2YXJuYW1lLCJBQ0NUIikgJiYgdG5fZW52X2FjY3RbMF0pCisgICAgICAg ICAgICAgICAgICBuICs9IHN0cmxlbih0bl9lbnZfYWNjdCkgKyA0ICsgMjsKKyAgICAgICAgICAg ICAgICBlbHNlIGlmICghc3RyY21wKHZhcm5hbWUsIlBSSU5URVIiKSAmJiB0bl9lbnZfcHJudFsw XSkKKyAgICAgICAgICAgICAgICAgIG4gKz0gc3RybGVuKHRuX2Vudl9wcm50KSArIDcgKyAyOwor ICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFzdHJjbXAodmFybmFtZSwiU1lTVEVNVFlQRSIpICYm IHRuX2Vudl9zeXNbMF0pCisgICAgICAgICAgICAgICAgICBuICs9IHN0cmxlbih0bl9lbnZfc3lz KSArIDEwICsgMjsKKyAgICAgICAgICAgICAgICBlbHNlIGlmICghc3RyY21wKHZhcm5hbWUsIkRJ U1BMQVkiKSAmJiBkaXNwKQorICAgICAgICAgICAgICAgICAgbiArPSBzdHJsZW4oZGlzcCkgKyA3 ICsgMjsKKyAgICAgICAgICAgICAgICAvKiBJZiB3ZSBnZXQgSUFDIG9ubHksIHRoZW4gdGhhdCBt ZWFucyBzZW5kIGFsbCAqLworICAgICAgICAgICAgICAgIC8qIFZBUiBhbmQgVVNFUlZBUi4gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICBpZiAoIShqID09 IDAgJiYgc2JbaV0gPT0gSUFDKSkKKyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgICAgIGNhc2UgMjogICAgICAgICAgICAgICAgICAgLyogVVNFUlZBUiBpbiBwcm9ncmVzcyAq LworICAgICAgICAgICAgICAgIHZhcm5hbWVbal0gPSAnXDAnIDsKKyAgICAgICAgICAgICAgICBp ZiAoIXZhcm5hbWVbMF0pIHsgICAgICAvKiBTZW5kIEFsbCAqLworICAgICAgICAgICAgICAgICAg ICBpbnQgeDsKKyAgICAgICAgICAgICAgICAgICAgZm9yICggeD0wIDsgeDw4IDsgeCsrICkgewor ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0bl9lbnZfdXNlcnZhclt4XVswXSAmJgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB0bl9lbnZfdXNlcnZhclt4XVsxXSApCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbiArPSBzdHJsZW4odG5fZW52X3VzZXJ2YXJbeF1bMF0pCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgc3RybGVuKHRuX2Vudl91c2VydmFyW3hd WzFdKSArIDI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYg KCB0bl9zZnUgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvKiBGb3IgY29tcGF0aWJpbGl0 eSB3aXRoIE1pY3Jvc29mdCBUZWxuZXQgU2VydmVyICovCisgICAgICAgICAgICAgICAgICAgICAg ICBuICs9IHN0cmxlbihTRlVUTE5UVkVSKSArIHN0cmxlbihTRlVUTE5UVkVSX1ZBTFVFKSArIDI7 CisgICAgICAgICAgICAgICAgICAgICAgICBuICs9IHN0cmxlbihTRlVUTE5UTU9ERSkgKworICAg ICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4oU0ZVVExOVE1PREVfVkFMVUUpICsgMjsKKyAg ICAgICAgICAgICAgICAgICAgfQorI2lmZGVmIENLX1NORExPQworICAgICAgICAgICAgICAgICAg ICBpZiAoIHRuX2xvYyAmJiB0bl9sb2NbMF0gKQorICAgICAgICAgICAgICAgICAgICAgICAgbiAr PSBzdHJsZW4oIkxPQ0FUSU9OIikgKyBzdHJsZW4odG5fbG9jKSArIDI7CisjZW5kaWYgLyogQ0tf U05ETE9DICovCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRu X3NmdSAmJiAhc3RyY21wKHZhcm5hbWUsU0ZVVExOVFZFUikpCisgICAgICAgICAgICAgICAgICAg IG4gKz0gc3RybGVuKFNGVVRMTlRWRVIpICsgc3RybGVuKFNGVVRMTlRWRVJfVkFMVUUpICsgMjsK KyAgICAgICAgICAgICAgICBlbHNlIGlmICh0bl9zZnUgJiYgIXN0cmNtcCh2YXJuYW1lLFNGVVRM TlRNT0RFKSkKKyAgICAgICAgICAgICAgICAgICAgbiArPSBzdHJsZW4oU0ZVVExOVE1PREUpICsg c3RybGVuKFNGVVRMTlRNT0RFX1ZBTFVFKSArIDI7CisjaWZkZWYgQ0tfU05ETE9DCisgICAgICAg ICAgICAgICAgZWxzZSBpZiAoIHRuX2xvYyAmJiB0bl9sb2NbMF0gJiYgIXN0cmNtcCh2YXJuYW1l LCJMT0NBVElPTiIpKQorICAgICAgICAgICAgICAgICAgICBuICs9IHN0cmxlbigiTE9DQVRJT04i KSArIHN0cmxlbih0bl9sb2MpICsgMjsKKyNlbmRpZiAvKiBDS19TTkRMT0MgKi8KKyAgICAgICAg ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IHg7CisgICAgICAgICAgICAg ICAgICAgIGZvciAoIHg9MCA7IHg8OCA7IHgrKyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg IGlmICggdG5fZW52X3VzZXJ2YXJbeF1bMF0gJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdG5fZW52X3VzZXJ2YXJbeF1bMV0gJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IXN0cmNtcCh2YXJuYW1lLHRuX2Vudl91c2VydmFyW3hdWzBdKSkKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICBuICs9IHN0cmxlbih0bl9lbnZfdXNlcnZhclt4XVswXSkKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKyBzdHJsZW4odG5fZW52X3VzZXJ2YXJbeF1bMV0pICsgMjsK KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhcm5hbWVbMF0gPSAnXDAnOwor ICAgICAgICAgICAgaiA9IDA7CisgICAgICAgICAgICB0eXBlID0gKHNiW2ldID09IFRFTF9FTlZf VVNFUlZBUiA/IDIgOiAgICAgIC8qIFVTRVJWQVIgKi8KKyAgICAgICAgICAgICAgICAgICAgc2Jb aV0gPT0gVEVMX0VOVl9WQVIgPyAxIDogICAgICAgICAgLyogVkFSICovCisgICAgICAgICAgICAg ICAgICAgIDAKKyAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICAgY2FzZSBURUxfRU5WX1ZBTFVFOiAgICAgICAgICAgLyogVkFMVUUgKi8KKyAgICAgICAg ICAgIC8qIFByb3RvY29sIEVycm9yICovCisgICAgICAgICAgICBkZWJ1ZyhGMTAwLCAiVEVMTkVU IFN1Ym5lZ290aWF0aW9uIGVycm9yIC0gVkFMVUUgaW4gU0VORCIsICIiLDApOworICAgICAgICAg ICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpCisgICAgICAgICAgICAgIHRuX2RlYnVnKCJURUxORVQg U3VibmVnb3RpYXRpb24gZXJyb3IgLSBWQUxVRSBpbiBTRU5EIik7CisgICAgICAgICAgICByZXR1 cm4oMCk7CisgICAgICAgICAgY2FzZSBURUxfRU5WX0VTQzogICAgIC8qIEVTQyAqLworICAgICAg ICAgICAgaWYgKCsraSA+PSBsZW4pCisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRl ZmF1bHQ6CisgICAgICAgICAgICBpZiAoaiA8IDE2ICkKKyAgICAgICAgICAgICAgdmFybmFtZVtq KytdID0gc2JbaV07CisgICAgICAgIH0KKyAgICB9CisgICAgcmVwbHkgPSBtYWxsb2MobiArIDE2 KTsgICAgICAgICAgICAgIC8qIExlYXZlIHJvb20gZm9yIElBQyBzdHVmZiAqLworICAgIGlmICgh cmVwbHkpIHsKKyAgICAgICAgZGVidWcoRjEwMCwgIlRFTE5FVCBTdWJuZWdvdGlhdGlvbiBlcnJv ciAtIG1hbGxvYyBmYWlsZWQiLCAiIiwwKTsKKyAgICAgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMp CisgICAgICAgICAgdG5fZGVidWcoIlRFTE5FVCBTdWJuZWdvdGlhdGlvbiBlcnJvciAtIG1hbGxv YyBmYWlsZWQiKTsKKworICAgICAgICAvKiBTZW5kIGEgcmV0dXJuIHBhY2tldCB3aXRoIG5vIHZh cmlhYmxlcyBzbyB0aGF0IHRoZSBob3N0ICovCisgICAgICAgIC8qIG1heSBjb250aW51ZSB3aXRo IGFkZGl0aW9uYWwgbmVnb3RpYXRpb25zICAgICAgICAgICAgICAgKi8KKyAgICAgICAgaWYgKHRu X3NzYm9wdChURUxPUFRfTkVXRU5WSVJPTixURUxRVUFMX0lTLCIiLDApIDwgMCkKKyAgICAgICAg ICByZXR1cm4oLTEpOworICAgICAgICByZXR1cm4oMCk7CisgICAgfQorCisgICAgLyogTm93IGNv bnN0cnVjdCB0aGUgcmVhbCByZXBseSAqLworCisgICAgbiA9IDA7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogU3RhcnQgYXQgYmVnaW5uaW5nIG9mIGJ1ZmZlciAqLworLyoKKyAgUGFp cnMgb2YgPHR5cGU+IFtWQVI9MCwgVkFMVUU9MSwgRVNDPTIsIFVTRVJWQVI9M10gPHZhbHVlPiAi dW50ZXJtaW5hdGVkIgorICBmb2xsb3cgaGVyZSB1bnRpbCBkb25lLi4uCisqLworICAgIGZvciAo aSA9IDAsIGogPSAwLCB0eXBlID0gMCwgdmFybmFtZVswXT0gJ1wwJzsgaSA8PSBsZW47IGkrKykg eworICAgICAgICBzd2l0Y2ggKHNiW2ldKSB7CisgICAgICAgICAgY2FzZSBURUxfRU5WX1ZBUjog ICAgICAgICAgICAgLyogVkFSICovCisgICAgICAgICAgY2FzZSBURUxfRU5WX1VTRVJWQVI6ICAg ICAgICAgLyogVVNFUlZBUiAqLworICAgICAgICAgIGNhc2UgSUFDOiAgICAgICAgICAgICAgICAg ICAgIC8qIEVuZCBvZiB0aGUgbGlzdCAqLworICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7Cisg ICAgICAgICAgICAgIGNhc2UgMDogICAgICAgICAgICAgICAgICAgLyogTm90aGluZyBpbiBwcm9n cmVzcyAqLworICAgICAgICAgICAgICAgIC8qIElmIHdlIGdldCBJQUMgb25seSwgdGhlbiB0aGF0 IG1lYW5zIHNlbmQgYWxsICovCisgICAgICAgICAgICAgICAgLyogVkFSIGFuZCBVU0VSVkFSLiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBpZiAoIShqID09 IDAgJiYgc2JbaV0gPT0gSUFDKSkKKyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg ICAgICBjYXNlIDE6ICAgICAgICAgICAgICAgICAgIC8qIFZBUiBpbiBwcm9ncmVzcyAqLworICAg ICAgICAgICAgICAgIHZhcm5hbWVbal0gPSAnXDAnOworICAgICAgICAgICAgICAgIGlmICghdmFy bmFtZVswXSkgeworICAgICAgICAgICAgICAgICAgICAvKiBTZW5kIEFsbCAqLworICAgICAgICAg ICAgICAgICAgICBpZiAodXVbMF0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcGx5W25d ID0gVEVMX0VOVl9WQVI7IC8qIFZBUiAqLworICAgICAgICAgICAgICAgICAgICAgICAgc3RyY3B5 KCZyZXBseVtuKzFdLCJVU0VSIik7CisgICAgICAgICAgICAgICAgICAgICAgICByZXBseVtuKzVd ID0gVEVMX0VOVl9WQUxVRTsgICAgICAgICAgICAgLyogVkFMVUUgKi8KKyAgICAgICAgICAgICAg ICAgICAgICAgIHN0cmNweSgmcmVwbHlbbis2XSx1dSk7CisgICAgICAgICAgICAgICAgICAgICAg ICBuICs9IHN0cmxlbih1dSkgKyA0ICsgMjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICAgICAgICBpZiAodG5fZW52X2pvYlswXSkgeworICAgICAgICAgICAgICAgICAgICAg ICAgcmVwbHlbbl0gPSBURUxfRU5WX1ZBUjsgLyogVkFSICovCisgICAgICAgICAgICAgICAgICAg ICAgICBzdHJjcHkoJnJlcGx5W24rMV0sIkpPQiIpOworICAgICAgICAgICAgICAgICAgICAgICAg cmVwbHlbbis0XSA9IFRFTF9FTlZfVkFMVUU7ICAgICAvKiBWQUxVRSAqLworICAgICAgICAgICAg ICAgICAgICAgICAgc3RyY3B5KCZyZXBseVtuKzVdLHRuX2Vudl9qb2IpOworICAgICAgICAgICAg ICAgICAgICAgICAgbiArPSBzdHJsZW4odG5fZW52X2pvYikgKyAzICsgMjsKKyAgICAgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAodG5fZW52X2FjY3RbMF0pIHsKKyAg ICAgICAgICAgICAgICAgICAgICAgIHJlcGx5W25dID0gVEVMX0VOVl9WQVI7IC8qIFZBUiAqLwor ICAgICAgICAgICAgICAgICAgICAgICAgc3RyY3B5KCZyZXBseVtuKzFdLCJBQ0NUIik7CisgICAg ICAgICAgICAgICAgICAgICAgICByZXBseVtuKzVdID0gVEVMX0VOVl9WQUxVRTsgICAgIC8qIFZB TFVFICovCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJjcHkoJnJlcGx5W24rNl0sdG5fZW52 X2FjY3QpOworICAgICAgICAgICAgICAgICAgICAgICAgbiArPSBzdHJsZW4odG5fZW52X2FjY3Qp ICsgNCArIDI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYg KHRuX2Vudl9wcm50WzBdKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXBseVtuXSA9IFRF TF9FTlZfVkFSOyAvKiBWQVIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cmNweSgmcmVw bHlbbisxXSwiUFJJTlRFUiIpOworICAgICAgICAgICAgICAgICAgICAgICAgcmVwbHlbbis4XSA9 IFRFTF9FTlZfVkFMVUU7ICAgICAvKiBWQUxVRSAqLworICAgICAgICAgICAgICAgICAgICAgICAg c3RyY3B5KCZyZXBseVtuKzldLHRuX2Vudl9wcm50KTsKKyAgICAgICAgICAgICAgICAgICAgICAg IG4gKz0gc3RybGVuKHRuX2Vudl9wcm50KSArIDcgKyAyOworICAgICAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgICAgICAgIGlmICh0bl9lbnZfc3lzWzBdKSB7CisgICAgICAgICAgICAg ICAgICAgICAgICByZXBseVtuXSA9IFRFTF9FTlZfVkFSOyAvKiBWQVIgKi8KKyAgICAgICAgICAg ICAgICAgICAgICAgIHN0cmNweSgmcmVwbHlbbisxXSwiU1lTVEVNVFlQRSIpOworICAgICAgICAg ICAgICAgICAgICAgICAgcmVwbHlbbisxMV0gPSBURUxfRU5WX1ZBTFVFOyAvKiBWQUxVRSAqLwor ICAgICAgICAgICAgICAgICAgICAgICAgc3RyY3B5KCZyZXBseVtuKzEyXSx0bl9lbnZfc3lzKTsK KyAgICAgICAgICAgICAgICAgICAgICAgIG4gKz0gc3RybGVuKHRuX2Vudl9zeXMpICsgMTAgKyAy OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChkaXNwKSB7 CisgICAgICAgICAgICAgICAgICAgICAgICByZXBseVtuXSA9IFRFTF9FTlZfVkFSOyAvKiBWQVIg Ki8KKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cmNweSgmcmVwbHlbbisxXSwiRElTUExBWSIp OworICAgICAgICAgICAgICAgICAgICAgICAgcmVwbHlbbis4XSA9IFRFTF9FTlZfVkFMVUU7ICAg ICAvKiBWQUxVRSAqLworICAgICAgICAgICAgICAgICAgICAgICAgc3RyY3B5KCZyZXBseVtuKzld LGRpc3ApOworICAgICAgICAgICAgICAgICAgICAgICAgbiArPSBzdHJsZW4oZGlzcCkgKyA3ICsg MjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXN0 cmNtcCh2YXJuYW1lLCJVU0VSIikgJiYgdXVbMF0pIHsKKyAgICAgICAgICAgICAgICAgICAgcmVw bHlbbl0gPSBURUxfRU5WX1ZBUjsgICAgIC8qIFZBUiAqLworICAgICAgICAgICAgICAgICAgICBz dHJjcHkoJnJlcGx5W24rMV0sIlVTRVIiKTsKKyAgICAgICAgICAgICAgICAgICAgcmVwbHlbbis1 XSA9IFRFTF9FTlZfVkFMVUU7IC8qIFZBTFVFICovCisgICAgICAgICAgICAgICAgICAgIHN0cmNw eSgmcmVwbHlbbis2XSx1dSk7CisgICAgICAgICAgICAgICAgICAgIG4gKz0gc3RybGVuKHV1KSAr IDQgKyAyOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcCh2YXJuYW1lLCJKT0Ii KSAmJiB0bl9lbnZfam9iWzBdKSB7CisgICAgICAgICAgICAgICAgICAgIHJlcGx5W25dID0gVEVM X0VOVl9WQVI7ICAgICAvKiBWQVIgKi8KKyAgICAgICAgICAgICAgICAgICAgc3RyY3B5KCZyZXBs eVtuKzFdLCJKT0IiKTsKKyAgICAgICAgICAgICAgICAgICAgcmVwbHlbbis0XSA9IFRFTF9FTlZf VkFMVUU7IC8qIFZBTFVFICovCisgICAgICAgICAgICAgICAgICAgIHN0cmNweSgmcmVwbHlbbis1 XSx0bl9lbnZfam9iKTsKKyAgICAgICAgICAgICAgICAgICAgbiArPSBzdHJsZW4odG5fZW52X2pv YikgKyAzICsgMjsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAodmFybmFtZSwi QUNDVCIpICYmIHRuX2Vudl9hY2N0WzBdKSB7CisgICAgICAgICAgICAgICAgICAgIHJlcGx5W25d ID0gVEVMX0VOVl9WQVI7ICAgICAvKiBWQVIgKi8KKyAgICAgICAgICAgICAgICAgICAgc3RyY3B5 KCZyZXBseVtuKzFdLCJBQ0NUIik7CisgICAgICAgICAgICAgICAgICAgIHJlcGx5W24rNV0gPSBU RUxfRU5WX1ZBTFVFOyAvKiBWQUxVRSAqLworICAgICAgICAgICAgICAgICAgICBzdHJjcHkoJnJl cGx5W24rNl0sdG5fZW52X2FjY3QpOworICAgICAgICAgICAgICAgICAgICBuICs9IHN0cmxlbih0 bl9lbnZfYWNjdCkgKyA0ICsgMjsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAo dmFybmFtZSwiUFJJTlRFUiIpICYmIHRuX2Vudl9wcm50WzBdKSB7CisgICAgICAgICAgICAgICAg ICAgIHJlcGx5W25dID0gVEVMX0VOVl9WQVI7ICAgICAvKiBWQVIgKi8KKyAgICAgICAgICAgICAg ICAgICAgc3RyY3B5KCZyZXBseVtuKzFdLCJQUklOVEVSIik7CisgICAgICAgICAgICAgICAgICAg IHJlcGx5W24rOF0gPSBURUxfRU5WX1ZBTFVFOyAvKiBWQUxVRSAqLworICAgICAgICAgICAgICAg ICAgICBzdHJjcHkoJnJlcGx5W24rOV0sdG5fZW52X3BybnQpOworICAgICAgICAgICAgICAgICAg ICBuICs9IHN0cmxlbih0bl9lbnZfcHJudCkgKyA3ICsgMjsKKyAgICAgICAgICAgICAgICB9IGVs c2UgaWYgKCFzdHJjbXAodmFybmFtZSwiU1lTVEVNVFlQRSIpICYmIHRuX2Vudl9zeXNbMF0pIHsK KyAgICAgICAgICAgICAgICAgICAgcmVwbHlbbl0gPSBURUxfRU5WX1ZBUjsgICAgIC8qIFZBUiAq LworICAgICAgICAgICAgICAgICAgICBzdHJjcHkoJnJlcGx5W24rMV0sIlNZU1RFTVRZUEUiKTsK KyAgICAgICAgICAgICAgICAgICAgcmVwbHlbbisxMV0gPSBURUxfRU5WX1ZBTFVFOyAgICAgICAg LyogVkFMVUUgKi8KKyAgICAgICAgICAgICAgICAgICAgc3RyY3B5KCZyZXBseVtuKzEyXSx0bl9l bnZfc3lzKTsKKyAgICAgICAgICAgICAgICAgICAgbiArPSBzdHJsZW4odG5fZW52X3N5cykgKyAx MCArIDI7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKHZhcm5hbWUsIkRJU1BM QVkiKSAmJiBkaXNwKSB7CisgICAgICAgICAgICAgICAgICAgIHJlcGx5W25dID0gVEVMX0VOVl9W QVI7ICAgICAvKiBWQVIgKi8KKyAgICAgICAgICAgICAgICAgICAgc3RyY3B5KCZyZXBseVtuKzFd LCJESVNQTEFZIik7CisgICAgICAgICAgICAgICAgICAgIHJlcGx5W24rOF0gPSBURUxfRU5WX1ZB TFVFOyAvKiBWQUxVRSAqLworICAgICAgICAgICAgICAgICAgICBzdHJjcHkoJnJlcGx5W24rOV0s ZGlzcCk7CisgICAgICAgICAgICAgICAgICAgIG4gKz0gc3RybGVuKGRpc3ApICsgNyArIDI7Cisg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgLyogSWYgd2UgZ2V0IElBQyBvbmx5 LCB0aGVuIHRoYXQgbWVhbnMgc2VuZCBhbGwgKi8KKyAgICAgICAgICAgICAgICAgIC8qIFZBUiBh bmQgVVNFUlZBUi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAg ICAgICBpZiAoIShqID09IDAgJiYgc2JbaV0gPT0gSUFDKSkKKyAgICAgICAgICAgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMjogICAgIC8qIFVTRVJWQVIgaW4gcHJvZ3Jlc3Mg Ki8KKyAgICAgICAgICAgICAgICAgIHZhcm5hbWVbal0gPSAnXDAnOworICAgICAgICAgICAgICAg ICAgaWYgKCF2YXJuYW1lWzBdKSB7CisgICAgICAgICAgICAgICAgICAgICAgLyogU2VuZCBBbGwg Ki8KKyAgICAgICAgICAgICAgICAgICAgICBpbnQgeCx5OworICAgICAgICAgICAgICAgICAgICAg IGZvciAoIHg9MCA7IHg8OCA7IHgrKyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg KCB0bl9lbnZfdXNlcnZhclt4XVswXSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHRuX2Vudl91c2VydmFyW3hdWzFdICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cmVwbHlbbl0gPSBURUxfRU5WX1VTRVJWQVI7ICAgICAvKiBWQVIgKi8KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHkgPSBzdHJsZW4odG5fZW52X3VzZXJ2YXJbeF1bMF0pOworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc3RyY3B5KCZyZXBseVtuKzFdLHRuX2Vudl91c2VydmFy W3hdWzBdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGx5W24reSsxXSA9IFRF TF9FTlZfVkFMVUU7IC8qIFZBTFVFICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz dHJjcHkoJnJlcGx5W24reSsyXSx0bl9lbnZfdXNlcnZhclt4XVsxXSk7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBuICs9IHkrc3RybGVuKHRuX2Vudl91c2VydmFyW3hdWzFdKSsyOwor ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICAgICAgICAgIGlmICggdG5fc2Z1ICkgeworICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBDb21wYXRpYmlsaXR5IHdpdGggTWljcm9zb2Z0IFRlbG5ldCBTZXJ2ZXIgKi8KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgcmVwbHlbbl0gPSBURUxfRU5WX1VTRVJWQVI7ICAgICAv KiBWQVIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyY3B5KCZyZXBseVtuKzFdLFNG VVRMTlRWRVIpOworICAgICAgICAgICAgICAgICAgICAgICAgICByZXBseVtuKzExXSA9IFRFTF9F TlZfVkFMVUU7IC8qIFZBTFVFICovCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmNweSgm cmVwbHlbbisxMl0sU0ZVVExOVFZFUl9WQUxVRSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg IG4gKz0gc3RybGVuKFNGVVRMTlRWRVIpK3N0cmxlbihTRlVUTE5UVkVSX1ZBTFVFKSsyOworCisg ICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGx5W25dID0gVEVMX0VOVl9VU0VSVkFSOyAgICAg LyogVkFSICovCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmNweSgmcmVwbHlbbisxXSxT RlVUTE5UTU9ERSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGx5W24rMTJdID0gVEVM X0VOVl9WQUxVRTsgLyogVkFMVUUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyY3B5 KCZyZXBseVtuKzEzXSxTRlVUTE5UTU9ERV9WQUxVRSk7CisgICAgICAgICAgICAgICAgICAgICAg ICAgIG4gKz0gc3RybGVuKFNGVVRMTlRNT0RFKStzdHJsZW4oU0ZVVExOVE1PREVfVkFMVUUpKzI7 CisgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgIGlmICh0bl9s b2MgJiYgdG5fbG9jWzBdKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGx5W25dID0g VEVMX0VOVl9VU0VSVkFSOyAgICAgLyogVkFSICovCisgICAgICAgICAgICAgICAgICAgICAgICAg IHN0cmNweSgmcmVwbHlbbisxXSwiTE9DQVRJT04iKTsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgcmVwbHlbbis5XSA9IFRFTF9FTlZfVkFMVUU7IC8qIFZBTFVFICovCisgICAgICAgICAgICAg ICAgICAgICAgICAgIHN0cmNweSgmcmVwbHlbbisxMF0sdG5fbG9jKTsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgbiArPSBzdHJsZW4oIkxPQ0FUSU9OIikgKyBzdHJsZW4odG5fbG9jKSArIDI7 CisgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgfSAgZWxzZSBpZiAo dG5fc2Z1ICYmICFzdHJjbXAodmFybmFtZSxTRlVUTE5UVkVSKSkgeworICAgICAgICAgICAgICAg ICAgICAgIHJlcGx5W25dID0gVEVMX0VOVl9VU0VSVkFSOyAgICAgLyogVkFSICovCisgICAgICAg ICAgICAgICAgICAgICAgc3RyY3B5KCZyZXBseVtuKzFdLFNGVVRMTlRWRVIpOworICAgICAgICAg ICAgICAgICAgICAgIHJlcGx5W24rMTFdID0gVEVMX0VOVl9WQUxVRTsgLyogVkFMVUUgKi8KKyAg ICAgICAgICAgICAgICAgICAgICBzdHJjcHkoJnJlcGx5W24rMTJdLFNGVVRMTlRWRVJfVkFMVUUp OworICAgICAgICAgICAgICAgICAgICAgIG4gKz0gc3RybGVuKFNGVVRMTlRWRVIpICsgc3RybGVu KFNGVVRMTlRWRVJfVkFMVUUpICsgMjsKKyAgICAgICAgICAgICAgICAgIH0gIGVsc2UgaWYgKHRu X3NmdSAmJiAhc3RyY21wKHZhcm5hbWUsU0ZVVExOVE1PREUpKSB7CisgICAgICAgICAgICAgICAg ICAgICAgcmVwbHlbbl0gPSBURUxfRU5WX1VTRVJWQVI7ICAgICAvKiBWQVIgKi8KKyAgICAgICAg ICAgICAgICAgICAgICBzdHJjcHkoJnJlcGx5W24rMV0sU0ZVVExOVE1PREUpOworICAgICAgICAg ICAgICAgICAgICAgIHJlcGx5W24rMTJdID0gVEVMX0VOVl9WQUxVRTsgLyogVkFMVUUgKi8KKyAg ICAgICAgICAgICAgICAgICAgICBzdHJjcHkoJnJlcGx5W24rMTNdLFNGVVRMTlRNT0RFX1ZBTFVF KTsKKyAgICAgICAgICAgICAgICAgICAgICBuICs9IHN0cmxlbihTRlVUTE5UTU9ERSkgKyBzdHJs ZW4oU0ZVVExOVE1PREVfVkFMVUUpICsgMjsKKyAgICAgICAgICAgICAgICAgIH0KKyNpZmRlZiBD S19TTkRMT0MKKyAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRuX2xvYyAmJiB0bl9sb2NbMF0g JiYgIXN0cmNtcCh2YXJuYW1lLCJMT0NBVElPTiIpKXsKKyAgICAgICAgICAgICAgICAgICAgICBy ZXBseVtuXSA9IFRFTF9FTlZfVVNFUlZBUjsgICAgIC8qIFZBUiAqLworICAgICAgICAgICAgICAg ICAgICAgIHN0cmNweSgmcmVwbHlbbisxXSwiTE9DQVRJT04iKTsKKyAgICAgICAgICAgICAgICAg ICAgICByZXBseVtuKzldID0gVEVMX0VOVl9WQUxVRTsgLyogVkFMVUUgKi8KKyAgICAgICAgICAg ICAgICAgICAgICBzdHJjcHkoJnJlcGx5W24rMTBdLHRuX2xvYyk7CisgICAgICAgICAgICAgICAg ICAgICAgbiArPSBzdHJsZW4oIkxPQ0FUSU9OIikgKyBzdHJsZW4odG5fbG9jKSArIDI7CisgICAg ICAgICAgICAgICAgICB9CisjZW5kaWYgLyogQ0tfU05ETE9DICovCisgICAgICAgICAgICAgICAg ICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICBpbnQgeCx5OworICAgICAgICAgICAgICAg ICAgICAgIGZvciAoIHg9MCA7IHg8OCA7IHgrKyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgaWYgKCB0bl9lbnZfdXNlcnZhclt4XVswXSAmJgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHRuX2Vudl91c2VydmFyW3hdWzFdICYmCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIXN0cmNtcCh2YXJuYW1lLHRuX2Vudl91c2VydmFyW3hdWzBdKSkgeworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcmVwbHlbbl0gPSBURUxfRU5WX1VTRVJWQVI7ICAgICAvKiBW QVIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSBzdHJsZW4odG5fZW52X3Vz ZXJ2YXJbeF1bMF0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyY3B5KCZyZXBs eVtuKzFdLHRuX2Vudl91c2VydmFyW3hdWzBdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHJlcGx5W24reSsxXSA9IFRFTF9FTlZfVkFMVUU7IC8qIFZBTFVFICovCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzdHJjcHkoJnJlcGx5W24reSsyXSx0bl9lbnZfdXNlcnZhclt4 XVsxXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuICs9IHkrc3RybGVuKHRuX2Vu dl91c2VydmFyW3hdWzFdKSsyOworICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJy ZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFybmFtZVswXSA9ICdcMCc7CisgICAg ICAgICAgICBqID0gMDsKKyAgICAgICAgICAgIHR5cGUgPSAoc2JbaV0gPT0gVEVMX0VOVl9VU0VS VkFSID8gMiA6ICAgICAgLyogVVNFUlZBUiAqLworICAgICAgICAgICAgICAgICAgICBzYltpXSA9 PSBURUxfRU5WX1ZBUiA/IDEgOiAgLyogVkFSICovCisgICAgICAgICAgICAgICAgICAgIDAKKyAg ICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBU RUxfRU5WX1ZBTFVFOiAvKiBWQUxVRSAqLworICAgICAgICAgICAgLyogUHJvdG9jb2wgRXJyb3Ig Ki8KKyAgICAgICAgICAgIGRlYnVnKEYxMDAsICJURUxORVQgU3VibmVnb3RpYXRpb24gZXJyb3Ig LSBWQUxVRSBpbiBTRU5EIiwgIiIsMCk7CisgICAgICAgICAgICBpZiAodG5fZGViIHx8IGRlYnNl cykKKyAgICAgICAgICAgICAgdG5fZGVidWcoIlRFTE5FVCBTdWJuZWdvdGlhdGlvbiBlcnJvciAt IFZBTFVFIGluIFNFTkQiKTsKKyAgICAgICAgICAgIHJldHVybigwKTsgIC8qIFdhcyAtMSBidXQg dGhhdCB3b3VsZCBiZSB0YWtlbiBhcyAqLworICAgICAgICAgICAgICAgICAgICAgICAgLyogYW4g SS9PIGVycm9yLCBzbyBhYnNvcmIgaXQgYW5kIGdvIG9uLiAqLworICAgICAgICAgIGNhc2UgVEVM X0VOVl9FU0M6ICAgICAvKiBFU0MgKi8KKyAgICAgICAgICAgIC8qIE5vdCBzdXJlIHdoYXQgdGhp cyBmb3IuICBRdW90ZSBuZXh0IGNoYXJhY3Rlcj8gKi8KKyAgICAgICAgICAgIGJyZWFrOworICAg ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICB2YXJuYW1lW2orK10gPSBzYltpXTsKKyAgICAg ICAgfQorICAgIH0KKyAgICBpZiAodG5fc3Nib3B0KFRFTE9QVF9ORVdFTlZJUk9OLFRFTFFVQUxf SVMscmVwbHksbikgPCAwKSB7CisgICAgICAgIGZyZWUocmVwbHkpOworICAgICAgICByZXR1cm4o LTEpOworICAgIH0KKyAgICBmcmVlKHJlcGx5KTsKKyAgICByZXR1cm4oMSk7Cit9CisjZW5kaWYg LyogQ0tfRU5WSVJPTk1FTlQgKi8KKworLyogVGVsbmV0IHNlbmQgdGVybWluYWwgdHlwZSAqLwor LyogUmV0dXJucyAtMSBvbiBlcnJvciwgMCBpZiBub3RoaW5nIGhhcHBlbnMsIDEgaWYgdHlwZSBz ZW50IHN1Y2Nlc3NmdWxseSAqLworCitpbnQKK3RuX3N0dHlwKCkgeyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBTZW5kIHRlbG5ldCB0ZXJtaW5hbCB0eXBlLiAqLworICAgIGNoYXIgKnR0 bjsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5hbWUgb2YgdGVybWluYWwgdHlwZS4gKi8K KyNpZmRlZiBPUzIKKyAgICBzdGF0aWMgaW50IGFsaWFzID0gLTE7ICAgICAgICAgICAgICAvKiB3 aGljaCBhbGlhcyBhcmUgd2UgdXNpbmcgPyAqLworICAgIGludCBzZXR0eXBlID0gMDsKKyNlbmRp ZiAvKiBPUzIgKi8KKyAgICBpbnQgaSwgcmM7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBX b3JrZXIuICovCisgICAgaW50IHRudGVybWZsZyA9IDA7CisKKyAgICBpZiAodHRuZXQgIT0gTkVU X1RDUEIpIHJldHVybigwKTsKKyAgICBpZiAodHRucHJvdG8gIT0gTlBfVEVMTkVUKSByZXR1cm4o MCk7CisKKyAgICBpZiAoIVRFTE9QVF9NRShURUxPUFRfVFRZUEUpKSByZXR1cm4oMCk7CisKKyNp ZmRlZiBDS19TU0wKKyAgICBpZiAoVEVMT1BUX1NCKFRFTE9QVF9TVEFSVF9UTFMpLnN0YXJ0X3Rs cy5tZV9mb2xsb3dzKSB7CisgICAgICAgIHJldHVybigwKTsKKyAgICB9CisjZW5kaWYgLyogQ0tf U1NMICovCisgICAgdHRuID0gTlVMTDsKKworI2lmbmRlZiBOT1RFUk0KKyNpZmRlZiBPUzIKKyAg ICBpZiAoIXRuX3Rlcm0pIHsKKyAgICAgICAgaWYgKHR0bnVtID09IC0xKSB7CisgICAgICAgICAg ICB0dG51bSA9IHR0X3R5cGU7CisgICAgICAgICAgICBzZXR0eXBlID0gMDsKKyAgICAgICAgICAg IGFsaWFzID0gLTE7CisgICAgICAgIH0gZWxzZSBpZiAodHRudW1lbmQpIHsKKyAgICAgICAgICAg IHR0bnVtZW5kID0gMDsKKyAgICAgICAgICAgIHNldHR5cGUgPSAwOworICAgICAgICB9IGVsc2Ug eworICAgICAgICAgICAgaWYgKHR0X2luZm9bdHRfdHlwZV0ueF9hbGlhc2VzWysrYWxpYXNdID09 IE5VTEwpICB7CisgICAgICAgICAgICAgICAgaWYgKC0tdHRfdHlwZSA8IDApCisgICAgICAgICAg ICAgICAgICB0dF90eXBlID0gbWF4X3R0OworICAgICAgICAgICAgICAgIGlmICh0dG51bSA9PSB0 dF90eXBlKQorICAgICAgICAgICAgICAgICAgdHRudW1lbmQgPSAxOworICAgICAgICAgICAgICAg IHNldHR5cGUgPSAxOworICAgICAgICAgICAgICAgIGFsaWFzID0gLTE7CisgICAgICAgICAgICB9 CisgICAgICAgIH0KKyAgICAgICAgaWYgKHR0X3R5cGUgPj0gMCAmJiB0dF90eXBlIDw9IG1heF90 dCkgeworICAgICAgICAgICAgaWYgKGFsaWFzID09IC0xKQorICAgICAgICAgICAgICB0dG4gPSB0 dF9pbmZvW3R0X3R5cGVdLnhfbmFtZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg dHRuID0gdHRfaW5mb1t0dF90eXBlXS54X2FsaWFzZXNbYWxpYXNdOworICAgICAgICB9IGVsc2UK KyAgICAgICAgICB0dG4gPSBOVUxMOworICAgIH0KKyAgICBlbHNlIHNldHR5cGUgPSAwOworI2Vu ZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIE5PVEVSTSAqLworCisgICAgaWYgKHRuX3Rlcm0pIHsg ICAgICAgICAgICAgICAgICAgICAgLyogVGVybWluYWwgdHlwZSBvdmVycmlkZT8gKi8KKyAgICAg ICAgZGVidWcoRjExMCwidG5fc3R0eXAiLHRuX3Rlcm0sMCk7CisgICAgICAgIGlmICgqdG5fdGVy bSkgeworICAgICAgICAgICAgdHRuID0gdG5fdGVybTsKKyAgICAgICAgICAgIHRudGVybWZsZyA9 IDE7CisgICAgICAgIH0KKyAgICB9IGVsc2UgZGVidWcoRjEwMCwidG5fc3R0eXAgbm8gdGVybSBv dmVycmlkZSIsIiIsMCk7CisKKyNpZm5kZWYgZGF0YWdlbmVyYWwKKyAgICBpZiAoIXR0bikgeyAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBJZiBubyBvdmVycmlkZSwgKi8KKyAgICAgICAgdHRu ID0gZ2V0ZW52KCJURVJNIik7ICAgICAgICAgICAvKiBnZXQgaXQgZnJvbSB0aGUgZW52aXJvbm1l bnQuICovCisgICAgfQorI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCisgICAgaWYgKCh0dG4gPT0g KChjaGFyICopMCkpIHx8ICgoaW50KXN0cmxlbih0dG4pID49IFRTQlVGU0laKSkKKyAgICAgIHR0 biA9ICJVTktOT1dOIjsKKyAgICBzYl9vdXRbMF0gPSAoQ0hBUikgSUFDOyAgICAgICAgICAgICAg ICAgLyogSSBBbSBhIENvbW1hbmQgKi8KKyAgICBzYl9vdXRbMV0gPSAoQ0hBUikgU0I7ICAgICAg ICAgICAgICAgICAgLyogU3VibmVnb3RpYXRpb24gKi8KKyAgICBzYl9vdXRbMl0gPSBURUxPUFRf VFRZUEU7ICAgICAgICAgICAgICAgLyogVGVybWluYWwgVHlwZSAqLworICAgIHNiX291dFszXSA9 IChDSEFSKSAwOyAgICAgICAgICAgICAgICAgICAvKiBJcy4uLiAqLworICAgIGZvciAoaSA9IDQ7 ICp0dG47IHR0bisrLGkrKykgeyAgICAgIC8qIENvcHkgYW5kIHVwcGVyY2FzZSBpdCAqLworI2lm ZGVmIFZNUworICAgICAgICBpZiAoIXRudGVybWZsZyAmJiAqdHRuID09ICctJyAmJgorICAgICAg ICAgICAgKCFzdHJjbXAodHRuLCItODAiKSB8fCAhc3RyY21wKHR0biwiLTEzMiIpKSkKKyAgICAg ICAgICBicmVhazsKKyAgICAgICAgZWxzZQorI2VuZGlmIC8qIFZNUyAqLworICAgICAgICAgIHNi X291dFtpXSA9IChjaGFyKSAoKCF0bnRlcm1mbGcgJiYgaXNsb3dlcigqdHRuKSkgPworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdG91cHBlcigqdHRuKSA6CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAqdHRuKTsKKyAgICB9CisgICAgdHRuID0gKGNoYXIgKilzYl9vdXQ7ICAg ICAgICAgICAgICAgICAgIC8qIFBvaW50IGJhY2sgdG8gYmVnaW5uaW5nICovCisjaWZkZWYgREVC VUcKKyAgICBpZiAoZGVibG9nIHx8IHRuX2RlYiB8fCBkZWJzZXMpIHsKKyAgICAgICAgc2Jfb3V0 W2ldID0gJ1wwJzsgICAgICAgICAgICAgICAgICAgLyogRm9yIGRlYnVnZ2luZyAqLworICAgICAg ICBja21ha3htc2codG5fbXNnX291dCxUTl9NU0dfTEVOLCJURUxORVQgU0VOVCBTQiAiLAorICAg ICAgICAgICAgICAgICBURUxPUFQoVEVMT1BUX1RUWVBFKSwiIElTICIsKGNoYXIgKilzYl9vdXQr NCwiIElBQyBTRSIsCisgICAgICAgICAgICAgICAgIE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxO VUxMLE5VTEwpOworICAgIH0KKyNlbmRpZiAvKiBERUJVRyAqLworICAgIHNiX291dFtpKytdID0g KENIQVIpIElBQzsgICAgICAgICAgICAgICAvKiBFbmQgb2YgU3VibmVnb3RpYXRpb24gKi8KKyAg ICBzYl9vdXRbaSsrXSA9IChDSEFSKSBTRTsgICAgICAgICAgICAgICAgLyogbWFya2VkIGJ5IElB QyBTRSAqLworI2lmZGVmIE9TMgorICAgIFJlcXVlc3RUZWxuZXRNdXRleCggU0VNX0lOREVGSU5J VEVfV0FJVCApOworI2VuZGlmCisjaWZkZWYgREVCVUcKKyAgICBkZWJ1ZyhGMTAwLHRuX21zZ19v dXQsIiIsMCk7CisgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpIHRuX2RlYnVnKHRuX21zZ19vdXQp OworI2VuZGlmIC8qIERFQlVHICovCisgICAgcmMgPSAodHRvbCgoQ0hBUiAqKXNiX291dCxpKSA8 IDApOyAgICAgICAvKiBTZW5kIGl0LiAqLworI2lmZGVmIE9TMgorICAgIFJlbGVhc2VUZWxuZXRN dXRleCgpOworI2VuZGlmCisgICAgaWYgKHJjKQorICAgICAgICByZXR1cm4oLTEpOworI2lmbmRl ZiBOT1RFUk0KKyNpZmRlZiBPUzIKKyAgICBpZiAoc2V0dHlwZSkKKyAgICAgICAgc2V0dGVybXR5 cGUodHRfdHlwZSwwKTsKKyAgICBlbHNlIHsKKyAgICAgICAgaXBhZGwyNSgpOworICAgICAgICBW c2NybklzRGlydHkoVlRFUk0pOworICAgIH0KKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBO T1RFUk0gKi8KKyAgICByZXR1cm4oMSk7Cit9CisKKyNpZmRlZiBDS19FTlZJUk9OTUVOVAorI2lm ZGVmIENLX1hESVNQTE9DCisKKy8qIFRlbG5ldCBzZW5kIHhkaXNwbGF5IGxvY2F0aW9uICovCisv KiBSZXR1cm5zIC0xIG9uIGVycm9yLCAwIGlmIG5vdGhpbmcgaGFwcGVucywgMSBpZiB0eXBlIHNl bnQgc3VjY2Vzc2Z1bGx5ICovCisKK2ludAordG5fc3hkaXNwbG9jKCkgeyAgICAgICAgICAgICAg ICAgICAgICAgIC8qIFNlbmQgdGVsbmV0IFggZGlzcGxheSBsb2NhdGlvbi4gKi8KKyAgICBjaGFy ICogZGlzcD1OVUxMOworICAgIGludCBpLHJjOworCisgICAgaWYgKHR0bmV0ICE9IE5FVF9UQ1BC KSByZXR1cm4oMCk7CisgICAgaWYgKHR0bnByb3RvICE9IE5QX1RFTE5FVCkgcmV0dXJuKDApOwor CisgICAgaWYgKCFURUxPUFRfTUUoVEVMT1BUX1hESVNQTE9DKSkgcmV0dXJuKDApOworCisjaWZk ZWYgQ0tfU1NMCisgICAgaWYgKFRFTE9QVF9TQihURUxPUFRfU1RBUlRfVExTKS5zdGFydF90bHMu bWVfZm9sbG93cykgeworICAgICAgICByZXR1cm4oMCk7CisgICAgfQorI2VuZGlmIC8qIENLX1NT TCAqLworCisjaWZkZWYgQ0tfRk9SV0FSRF9YCisgICAgaWYgKFRFTE9QVF9VKFRFTE9QVF9GT1JX QVJEX1gpKSB7CisgICAgICAgIGRpc3AgPSBOVUxMOworICAgIH0gZWxzZQorI2VuZGlmIC8qIENL X0ZPUldBUkRfWCAqLworICAgICAgICBkaXNwID0gKGNoYXIgKil0bl9nZXRfZGlzcGxheSgpOwor ICAgIGRlYnVnKEYxMTAsInRuX3N4ZGlzcGxvYyIsZGlzcCwwKTsKKworICAgIGlmICghZGlzcCkg eworICAgICAgICAvKiBDYW4ndCBkbyBib3RoLCBzZW5kIFdPTlQgKi8KKyAgICAgICAgaWYgKHRu X3NvcHQoV09OVCxURUxPUFRfWERJU1BMT0MpIDwgMCkKKyAgICAgICAgICAgIHJldHVybigtMSk7 CisgICAgICAgIFRFTE9QVF9VTkFOU1dFUkVEX1dPTlQoVEVMT1BUX1hESVNQTE9DKSA9IDE7Cisg ICAgICAgIHJldHVybigwKTsKKyAgICB9CisKKyAgICBzYl9vdXRbMF0gPSAoQ0hBUikgSUFDOyAg ICAgICAgICAgICAgICAgLyogSSBBbSBhIENvbW1hbmQgKi8KKyAgICBzYl9vdXRbMV0gPSAoQ0hB UikgU0I7ICAgICAgICAgICAgICAgICAgLyogU3VibmVnb3RpYXRpb24gKi8KKyAgICBzYl9vdXRb Ml0gPSBURUxPUFRfWERJU1BMT0M7ICAgICAgICAgICAgLyogWC1EaXNwbGF5IExvY2F0aW9uICov CisgICAgc2Jfb3V0WzNdID0gKENIQVIpIDA7ICAgICAgICAgICAgICAgICAgIC8qIElzLi4uICov CisgICAgZm9yIChpID0gNDsgKmRpc3A7IGRpc3ArKyxpKyspIHsgICAgICAvKiBDb3B5IGFuZCB1 cHBlcmNhc2UgaXQgKi8KKyAgICAgICAgc2Jfb3V0W2ldID0gKGNoYXIpICpkaXNwOworICAgIH0K KyNpZmRlZiBERUJVRworICAgIGlmIChkZWJsb2cgfHwgdG5fZGViIHx8IGRlYnNlcykgeworICAg ICAgICBzYl9vdXRbaV0gPSAnXDAnOyAgICAgICAgICAgICAgICAgICAvKiBGb3IgZGVidWdnaW5n ICovCisgICAgICAgIGNrbWFreG1zZyggdG5fbXNnX291dCxUTl9NU0dfTEVOLAorICAgICAgICAg ICAgICAgICAgIlRFTE5FVCBTRU5UIFNCICIsVEVMT1BUKFRFTE9QVF9YRElTUExPQyksCisgICAg ICAgICAgICAgICAgICAiIElTICIsKGNoYXIgKilzYl9vdXQrNCwiIElBQyBTRSIsCisgICAgICAg ICAgICAgICAgICBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMKTsKKyAgICB9Cisj ZW5kaWYgLyogREVCVUcgKi8KKyAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBJQUM7ICAgICAgICAg ICAgICAgLyogRW5kIG9mIFN1Ym5lZ290aWF0aW9uICovCisgICAgc2Jfb3V0W2krK10gPSAoQ0hB UikgU0U7ICAgICAgICAgICAgICAgIC8qIG1hcmtlZCBieSBJQUMgU0UgKi8KKyNpZmRlZiBPUzIK KyAgICBSZXF1ZXN0VGVsbmV0TXV0ZXgoIFNFTV9JTkRFRklOSVRFX1dBSVQgKTsKKyNlbmRpZgor I2lmZGVmIERFQlVHCisgICAgZGVidWcoRjEwMCx0bl9tc2dfb3V0LCIiLDApOworICAgIGlmICh0 bl9kZWIgfHwgZGVic2VzKSB0bl9kZWJ1Zyh0bl9tc2dfb3V0KTsKKyNlbmRpZiAvKiBERUJVRyAq LworICAgIHJjID0gKHR0b2woKENIQVIgKilzYl9vdXQsaSkgPCAwKTsgICAgICAvKiBTZW5kIGl0 LiAqLworI2lmZGVmIE9TMgorICAgIFJlbGVhc2VUZWxuZXRNdXRleCgpOworI2VuZGlmCisgICAg aWYgKHJjKQorICAgICAgICByZXR1cm4oLTEpOworICAgIHJldHVybigxKTsKK30KKyNlbmRpZiAv KiBDS19YRElTUExPQyAqLworI2VuZGlmIC8qIENLX0VOVklST05NRU5UICovCisKKyNpZmRlZiBD S19GT1JXQVJEX1gKK2ludAordG5fc25kZndkeCgpIHsgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIFNlbmQgRndkIFggU2NyZWVuIG51bWJlciB0byBob3N0ICovCisgICAgdW5zaWduZWQgY2hh ciBzY3JlZW4gPSAwOworICAgIGNoYXIgKiBkaXNwOworICAgIGludCBpLHJjOworCisgICAgLyog aWYgKCFJU19URUxORVQoKSkgcmV0dXJuKDApOyAqLworCisgICAgaWYgKCFURUxPUFRfVShURUxP UFRfRk9SV0FSRF9YKSkgcmV0dXJuKDApOworI2lmZGVmIENLX1NTTAorICAgIGlmIChURUxPUFRf U0IoVEVMT1BUX1NUQVJUX1RMUykuc3RhcnRfdGxzLm1lX2ZvbGxvd3MpIHsKKyAgICAgICAgcmV0 dXJuKDApOworICAgIH0KKyNlbmRpZiAvKiBDS19TU0wgKi8KKworICAgIC8qCisgICAgICogVGhl IGZvcm1hdCBvZiB0aGUgRElTUExBWSB2YXJpYWJsZSBpcyBbPGhvc3Q+Ol08ZGlzcGxheT5bLjxz Y3JlZW4+XQorICAgICAqIHdoZXJlIDxob3N0PiBpcyBhbiBvcHRpb25hbCBETlMgbmFtZSBvciBp cCBhZGRyZXNzIHdpdGggYSBkZWZhdWx0IG9mCisgICAgICogdGhlIGxvY2FsaG9zdDsgdGhlIHNj cmVlbiBkZWZhdWx0cyB0byAwCisgICAgICovCisKKyAgICBkaXNwID0gKGNoYXIgKil0bl9nZXRf ZGlzcGxheSgpOworICAgIGlmIChkaXNwKSB7CisgICAgICAgIGludCBjb2xvbixkb3Q7CisgICAg ICAgIGNvbG9uID0gY2tpbmRleCgiOiIsZGlzcCwwLDAsMSk7CisgICAgICAgIGRvdCAgID0gY2tp bmRleCgiLiIsJmRpc3BbY29sb25dLDAsMCwxKTsKKworICAgICAgICBpZiAoIGRvdCApIHsKKyAg ICAgICAgICAgIHNjcmVlbiA9IGF0b2koJmRpc3BbY29sb24rZG90XSk7CisgICAgICAgIH0KKyAg ICB9IGVsc2UgeworICAgICAgICBzY3JlZW4gPSAwOworICAgIH0KKworICAgIGkgPSAwOworICAg IHNiX291dFtpKytdID0gKENIQVIpIElBQzsgICAgICAgICAgICAgICAgIC8qIEkgQW0gYSBDb21t YW5kICovCisgICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgU0I7ICAgICAgICAgICAgICAgICAgLyog U3VibmVnb3RpYXRpb24gKi8KKyAgICBzYl9vdXRbaSsrXSA9IFRFTE9QVF9GT1JXQVJEX1g7ICAg ICAgICAgICAvKiBGb3J3YXJkIFggKi8KKyAgICBzYl9vdXRbaSsrXSA9IEZXRFhfU0NSRUVOOyAg ICAgICAgICAgICAgICAvKiBTY3JlZW4gKi8KKyAgICBzYl9vdXRbaSsrXSA9IHNjcmVlbjsKKyAg ICBpZiAoIHNjcmVlbiA9PSBJQUMgKQorICAgICAgICBzYl9vdXRbaSsrXSA9IElBQzsKKyAgICBz Yl9vdXRbaSsrXSA9IChDSEFSKSBJQUM7ICAgICAgICAgICAgICAgICAvKiBFbmQgb2YgU3VibmVn b3RpYXRpb24gKi8KKyAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBTRTsgICAgICAgICAgICAgICAg ICAvKiBtYXJrZWQgYnkgSUFDIFNFICovCisjaWZkZWYgREVCVUcKKyAgICBpZiAoZGVibG9nIHx8 IHRuX2RlYiB8fCBkZWJzZXMpIHsKKyAgICAgICAgY2ttYWt4bXNnKCB0bl9tc2dfb3V0LFROX01T R19MRU4sCisgICAgICAgICAgICAgICAgICAgIlRFTE5FVCBTRU5UIFNCICIsVEVMT1BUKFRFTE9Q VF9GT1JXQVJEX1gpLAorICAgICAgICAgICAgICAgICAgICIgU0NSRUVOICIsY2tjdG94KHNjcmVl biwxKSwiIElBQyBTRSIsCisgICAgICAgICAgICAgICAgICAgTlVMTCxOVUxMLE5VTEwsTlVMTCxO VUxMLE5VTEwsTlVMTCk7CisgICAgfQorI2VuZGlmIC8qIERFQlVHICovCisjaWZkZWYgT1MyCisg ICAgUmVxdWVzdFRlbG5ldE11dGV4KCBTRU1fSU5ERUZJTklURV9XQUlUICk7CisjZW5kaWYKKyNp ZmRlZiBERUJVRworICAgIGRlYnVnKEYxMDAsdG5fbXNnX291dCwiIiwwKTsKKyAgICBpZiAodG5f ZGViIHx8IGRlYnNlcykgdG5fZGVidWcodG5fbXNnX291dCk7CisjZW5kaWYgLyogREVCVUcgKi8K KyAgICByYyA9ICh0dG9sKChDSEFSICopc2Jfb3V0LGkpIDwgMCk7ICAgICAgLyogU2VuZCBpdC4g Ki8KKyNpZmRlZiBPUzIKKyAgICBSZWxlYXNlVGVsbmV0TXV0ZXgoKTsKKyNlbmRpZgorICAgIGlm IChyYykKKyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICByZXR1cm4oMCk7Cit9CisjZW5kaWYgLyog Q0tfRk9SV0FSRF9YICovCisKKyNpZmRlZiBDS19TTkRMT0MKK2ludAordG5fc25kbG9jKCkgeyAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNlbmQgbG9jYXRpb24uICovCisgICAgaW50IGks cmM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogV29ya2VyLiAqLworICAgIGNoYXIg KnR0bG9jOworCisgICAgLyogaWYgKCFJU19URUxORVQoKSkgcmV0dXJuKDApOyAqLworCisgICAg aWYgKCFURUxPUFRfTUUoVEVMT1BUX1NORExPQykpIHJldHVybigwKTsKKworI2lmZGVmIENLX1NT TAorICAgIGlmIChURUxPUFRfU0IoVEVMT1BUX1NUQVJUX1RMUykuc3RhcnRfdGxzLm1lX2ZvbGxv d3MpIHsKKyAgICAgICAgcmV0dXJuKDApOworICAgIH0KKyNlbmRpZiAvKiBDS19TU0wgKi8KKyAg ICB0dGxvYyA9ICh0bl9sb2MgPyB0bl9sb2MgOiAiIik7ICAgICAvKiBJbiBjYXNlIHdlIGFyZSBi ZWluZyBjYWxsZWQgZXZlbiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIHRob3VnaCB0aGVyZSBpcyBubyBsb2NhdGlvbi4gKi8KKyAgICBzYl9vdXRbMF0gPSAo Q0hBUikgSUFDOyAgICAgICAgICAgICAgICAgLyogSSBBbSBhIENvbW1hbmQgKi8KKyAgICBzYl9v dXRbMV0gPSAoQ0hBUikgU0I7ICAgICAgICAgICAgICAgICAgLyogU3VibmVnb3RpYXRpb24gKi8K KyAgICBzYl9vdXRbMl0gPSBURUxPUFRfU05ETE9DOyAgICAgICAgICAgICAgLyogTG9jYXRpb24g Ki8KKyAgICBmb3IgKGkgPSAzOyAqdHRsb2MgJiYgaSA8IFRTQlVGU0laOyB0dGxvYysrLGkrKykg LyogQ29weSBpdCAqLworICAgICAgc2Jfb3V0W2ldID0gKGNoYXIpICp0dGxvYzsKKyAgICBzYl9v dXRbaSsrXSA9IChDSEFSKSBJQUM7ICAgICAgICAgICAgICAgLyogRW5kIG9mIFN1Ym5lZ290aWF0 aW9uICovCisgICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgU0U7ICAgICAgICAgICAgICAgIC8qIG1h cmtlZCBieSBJQUMgU0UgKi8KKworI2lmZGVmIERFQlVHCisgICAgaWYgKGRlYmxvZyB8fCB0bl9k ZWIgfHwgZGVic2VzKSB7CisgICAgICAgIGNrbWFreG1zZyh0bl9tc2dfb3V0LFROX01TR19MRU4s CisgICAgICAgICAgICAgICAgICAiVEVMTkVUIFNFTlQgU0IgIixURUxPUFQoVEVMT1BUX1NORExP QyksIiAiLChjaGFyICopc2Jfb3V0KzMsCisgICAgICAgICAgICAgICAgICAiIElBQyBTRSIsIE5V TEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwpOworICAgIH0KKyNlbmRpZiAvKiBERUJV RyAqLworI2lmZGVmIE9TMgorICAgIFJlcXVlc3RUZWxuZXRNdXRleCggU0VNX0lOREVGSU5JVEVf V0FJVCApOworI2VuZGlmCisjaWZkZWYgREVCVUcKKyAgICBkZWJ1ZyhGMTAwLHRuX21zZ19vdXQs IiIsMCk7CisgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpIHRuX2RlYnVnKHRuX21zZ19vdXQpOwor I2VuZGlmIC8qIERFQlVHICovCisgICAgcmMgPSAodHRvbCgoQ0hBUiAqKXNiX291dCxpKSA8IDAp OyAgICAgIC8qIFNlbmQgaXQuICovCisjaWZkZWYgT1MyCisgICAgUmVsZWFzZVRlbG5ldE11dGV4 KCk7CisjZW5kaWYKKyAgICBpZiAocmMpCisgICAgICAgIHJldHVybigtMSk7CisgICAgc2Jfb3V0 W2ktMl0gPSAnXDAnOyAgICAgICAgICAgICAgICAgICAgIC8qIEZvciBkZWJ1Z2dpbmcgKi8KKyAg ICByZXR1cm4oMCk7Cit9CisjZW5kaWYgLyogQ0tfU05ETE9DICovCisKKyNpZmRlZiBDS19OQVdT ICAgICAgICAgICAgICAgICAgLyogIE5BV1MgPSBOZWdvdGlhdGUgQWJvdXQgV2luZG93IFNpemUg ICovCitpbnQKK3RuX3NuYXdzKCkgeyAgICAgICAgICAgICAgICAgICAgLyogIFNlbmQgdGVybWlu YWwgd2lkdGggYW5kIGhlaWdodCwgUkZDIDEwNzMgKi8KKyNpZm5kZWYgTk9MT0NBTAorICAgIENI QVIgc2Jfb3V0WzI0XTsgICAgICAgICAgICAvKiAgbXVsdGlwbGUgdGhyZWFkcyAqLworICAgIGlu dCBpID0gMCxyYzsKKyNpZmRlZiBPUzIKKyAgICBpbnQgeCA9IFZzY3JuR2V0V2lkdGgoVlRFUk0p LAorICAgIHkgPSBWc2NybkdldEhlaWdodChWVEVSTSkgLSAodHRfc3RhdHVzW1ZURVJNXSA/IDEg OiAwKTsKKyNlbHNlIC8qIE9TMiAqLworICAgIGludCB4ID0gdHRfY29scywgeSA9IHR0X3Jvd3M7 CisjZW5kaWYgLyogT1MyICovCisKKyAgICBpZiAodHRuZXQgIT0gTkVUX1RDUEIpIHJldHVybigw KTsKKyAgICBpZiAodHRucHJvdG8gIT0gTlBfVEVMTkVUKSByZXR1cm4oMCk7CisgICAgaWYgKCFU RUxPUFRfTUUoVEVMT1BUX05BV1MpKSByZXR1cm4oMCk7CisKKyNpZmRlZiBDS19TU0wKKyAgICBp ZiAoVEVMT1BUX1NCKFRFTE9QVF9TVEFSVF9UTFMpLnN0YXJ0X3Rscy5tZV9mb2xsb3dzKSB7Cisg ICAgICAgIHJldHVybigwKTsKKyAgICB9CisjZW5kaWYgLyogQ0tfU1NMICovCisgICAgaWYgKHgg PCAwKSB4ID0gMDsKKyAgICBpZiAoeSA8IDApIHkgPSAwOworCisgICAgaWYgKHggPT0gVEVMT1BU X1NCKFRFTE9QVF9OQVdTKS5uYXdzLnggJiYgLyogT25seSBzZW5kIGlmIGNoYW5nZWQgKi8KKyAg ICAgICAgeSA9PSBURUxPUFRfU0IoVEVMT1BUX05BV1MpLm5hd3MueQorICAgICAgICApCisgICAg ICByZXR1cm4oMCk7CisgICAgVEVMT1BUX1NCKFRFTE9QVF9OQVdTKS5uYXdzLnggPSB4OyAgLyog UmVtZW1iZXIgdGhlIHNpemUgICAgICovCisgICAgVEVMT1BUX1NCKFRFTE9QVF9OQVdTKS5uYXdz LnkgPSB5OworCisgICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgSUFDOyAgICAgICAgICAgICAgIC8q IFNlbmQgdGhlIHN1Ym5lZ290aWF0aW9uICovCisgICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgU0I7 CisgICAgc2Jfb3V0W2krK10gPSBURUxPUFRfTkFXUzsKKyAgICBzYl9vdXRbaSsrXSA9IChDSEFS KSAoeCA+PiA4KSAmIDB4ZmY7CisgICAgaWYgKChDSEFSKSBzYl9vdXRbaS0xXSA9PSAoQ0hBUikg SUFDKSAgIC8qIElBQyBpbiBkYXRhIG11c3QgYmUgZG91YmxlZCAqLworICAgICAgc2Jfb3V0W2kr K10gPSAoQ0hBUikgSUFDOworICAgIHNiX291dFtpKytdID0gKENIQVIpICh4ICYgMHhmZik7Cisg ICAgaWYgKChDSEFSKSBzYl9vdXRbaS0xXSA9PSAoQ0hBUikgSUFDKQorICAgICAgc2Jfb3V0W2kr K10gPSAoQ0hBUikgSUFDOworICAgIHNiX291dFtpKytdID0gKENIQVIpICh5ID4+IDgpICYgMHhm ZjsKKyAgICBpZiAoKENIQVIpIHNiX291dFtpLTFdID09IChDSEFSKSBJQUMpCisgICAgICBzYl9v dXRbaSsrXSA9IChDSEFSKSBJQUM7CisgICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgKHkgJiAweGZm KTsKKyAgICBpZiAoKENIQVIpIHNiX291dFtpLTFdID09IChDSEFSKSBJQUMpCisgICAgICBzYl9v dXRbaSsrXSA9IChDSEFSKSBJQUM7CisgICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgSUFDOworICAg IHNiX291dFtpKytdID0gKENIQVIpIFNFOworI2lmZGVmIERFQlVHCisgICAgaWYgKGRlYmxvZyB8 fCB0bl9kZWIgfHwgZGVic2VzKSB7CisgICAgICAgIGNrbWFreG1zZyh0bl9tc2dfb3V0LFROX01T R19MRU4sIlRFTE5FVCBTRU5UIFNCIE5BV1MgIiwKKyAgICAgICAgICAgICAgICAgIGNraXRvYSh4 KSwiICIsY2tpdG9hKHkpLCIgSUFDIFNFIiwKKyAgICAgICAgICAgICAgICAgICBOVUxMLE5VTEws TlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMKTsKKyAgICB9CisjZW5kaWYgLyogREVCVUcgKi8KKyNp ZmRlZiBPUzIKKyAgICBSZXF1ZXN0VGVsbmV0TXV0ZXgoIFNFTV9JTkRFRklOSVRFX1dBSVQgKTsK KyNlbmRpZgorI2lmZGVmIERFQlVHCisgICAgZGVidWcoRjEwMCx0bl9tc2dfb3V0LCIiLDApOwor ICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKSB0bl9kZWJ1Zyh0bl9tc2dfb3V0KTsKKyNlbmRpZiAv KiBERUJVRyAqLworICAgIHJjID0gKHR0b2woKENIQVIgKilzYl9vdXQsaSkgPCAwKTsgICAgICAv KiBTZW5kIGl0LiAqLworI2lmZGVmIE9TMgorICAgIFJlbGVhc2VUZWxuZXRNdXRleCgpOworI2Vu ZGlmCisgICAgaWYgKHJjKQorICAgICAgICByZXR1cm4oLTEpOworI2VuZGlmIC8qIE5PTE9DQUwg Ki8KKyAgICByZXR1cm4gKDApOworfQorI2VuZGlmIC8qIENLX05BV1MgKi8KKworI2lmZGVmIFRO X0NPTVBPUlQKK3N0YXRpYyBjaGFyICogdG5jX3NpZ25hdHVyZSA9IE5VTEw7CitzdGF0aWMgaW50 IHRuY19sc19tYXNrID0gMDsKK3N0YXRpYyBpbnQgdG5jX2xzID0gMDsKK3N0YXRpYyBpbnQgdG5j X21zX21hc2sgPSAyNTU7CitzdGF0aWMgaW50IHRuY19tcyA9IDA7CitzdGF0aWMgaW50IHRuY19v ZmxvdyA9IDA7CitzdGF0aWMgaW50IHRuY19pZmxvdyA9IDA7CitzdGF0aWMgaW50IHRuY19icHMg PSAwOworc3RhdGljIGludCB0bmNfZGF0YXNpemUgPSAwOworc3RhdGljIGludCB0bmNfcGFyaXR5 ID0gMDsKK3N0YXRpYyBpbnQgdG5jX3N0b3BiaXQgPSAwOworc3RhdGljIGludCB0bmNfYnJlYWsg PSAwOworc3RhdGljIGludCB0bmNfZHRyID0gMDsKK3N0YXRpYyBpbnQgdG5jX3J0cyA9IDA7Citz dGF0aWMgaW50IHRuY19zdXNwZW5kX3htaXQgPSAwOworc3RhdGljIGludCB0bmNfYnBzX2luZGV4 ID0gLTE7CisKK2ludAorI2lmZGVmIENLX0FOU0lDCit0bmNfaW5pdCh2b2lkKQorI2Vsc2UgLyog Q0tfQU5TSUMgKi8KK3RuY19pbml0KCkKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogdG5jX2lu aXQgKi8geworICAgIGRlYnVnKEYxMDAsInRuY19pbml0IiwiIiwwKTsKKworICAgIC8qIGlmICgh SVNfVEVMTkVUKCkpIHJldHVybigwKTsgKi8KKworICAgIGlmICh0bmNfc2lnbmF0dXJlKSB7Cisg ICAgICAgIGZyZWUodG5jX3NpZ25hdHVyZSk7CisgICAgICAgIHRuY19zaWduYXR1cmUgPSBOVUxM OworICAgIH0KKyAgICB0bmNfbHNfbWFzayA9IDA7CisgICAgdG5jX2xzID0gMDsKKyAgICB0bmNf bXNfbWFzayA9IDI1NTsKKyAgICB0bmNfbXMgPSAwOworICAgIHRuY19vZmxvdyA9IDA7CisgICAg dG5jX2lmbG93ID0gMDsKKyAgICB0bmNfYnBzID0gMDsKKyAgICB0bmNfZGF0YXNpemUgPSAwOwor ICAgIHRuY19wYXJpdHkgPSAwOworICAgIHRuY19zdG9wYml0ID0gMDsKKyAgICB0bmNfYnJlYWsg PSAwOworICAgIHRuY19kdHIgPSAwOworICAgIHRuY19ydHMgPSAwOworICAgIHRuY19zdXNwZW5k X3htaXQgPSAwOworICAgIHRuY19icHNfaW5kZXggPSAtMTsKKyAgICByZXR1cm4oMCk7Cit9CisK K2ludAorI2lmZGVmIENLX0FOU0lDCit0bl9zbmRjb21wb3J0KHZvaWQpCisjZWxzZSAvKiBDS19B TlNJQyAqLwordG5fc25kY29tcG9ydCgpCisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIHRuX3Nu ZGNvbXBvcnQgKi8geworICAgIGludCBiYXVkLCBkYXRhc2l6ZSwgcGFyaXR5LCBzdG9wc2l6ZSwg b2Zsb3csIGlmbG93OworICAgIENPTlNUIGNoYXIgKiBzaWduYXR1cmU7CisKKyAgICAvKiBpZiAo IUlTX1RFTE5FVCgpKSByZXR1cm4oMCk7ICovCisKKyAgICBkZWJ1ZyhGMTAwLCJ0bmNfc25kY29t cG9ydCIsIiIsMCk7CisgICAgc2lnbmF0dXJlID0gdG5jX2dldF9zaWduYXR1cmUoKTsKKyAgICBi YXVkID0gdG5jX2dldF9iYXVkKCk7CisgICAgZGF0YXNpemUgPSB0bmNfZ2V0X2RhdGFzaXplKCk7 CisgICAgcGFyaXR5ID0gdG5jX2dldF9wYXJpdHkoKTsKKyAgICBzdG9wc2l6ZSA9IHRuY19nZXRf c3RvcHNpemUoKTsKKyAgICBvZmxvdyA9IHRuY19nZXRfb2Zsb3coKTsKKyAgICBpZmxvdyA9IHRu Y19nZXRfaWZsb3coKTsKKyAgICB0bmNfc2V0X2xzX21hc2soMjU1KTsKKyAgICB0bmNfc2V0X21z X21hc2soMjU1KTsKKyAgICByZXR1cm4oMCk7Cit9CisKK2ludAorI2lmZGVmIENLX0FOU0lDCit0 bmNfd2FpdChDSEFSICogbXNnLCBpbnQgbXMpCisjZWxzZSAvKiBDS19BTlNJQyAqLwordG5jX3dh aXQobXNnLCBtcykgQ0hBUiAqIG1zZzsgaW50IG1zOworI2VuZGlmIC8qIENLX0FOU0lDICovCisv KiB0bmNfd2FpdCAqLyB7CisgICAgaW50IHJjLCB0bl93YWl0X3NhdmUgPSB0bl93YWl0X2ZsZzsK KworICAgIC8qIGlmICghSVNfVEVMTkVUKCkpIHJldHVybigwKTsgKi8KKworICAgIGRlYnVnKEYx MTEsInRuY193YWl0IiwiYmVnaW4iLG1zKTsKKyAgICBpZiAoIG1zICkKKyAgICAgICAgVEVMT1BU X1NCKFRFTE9QVF9DT01QT1JUKS5jb21wb3J0LndhaXRfZm9yX21zID0gMTsKKyAgICBlbHNlCisg ICAgICAgIFRFTE9QVF9TQihURUxPUFRfQ09NUE9SVCkuY29tcG9ydC53YWl0X2Zvcl9zYiA9IDE7 CisgICAgdG5fd2FpdF9mbGcgPSAxOworICAgIHJjID0gdG5fd2FpdCgoY2hhciAqKW1zZyk7Cisg ICAgdG5fcHVzaCgpOworICAgIGRlYnVnKEYxMTAsInRuY193YWl0IiwiZW5kIiwwKTsKKyAgICB0 bl93YWl0X2ZsZyA9IHRuX3dhaXRfc2F2ZTsKKyAgICByZXR1cm4ocmMpOworfQorCisvKiBSZXR1 cm5zIC0xIG9uIGVycm9yLCAwIG9uIHN1Y2Nlc3MgKi8KKy8qIEluIG9yZGVyIGZvciB0aGlzIGNv ZGUgdG8gd29yaywgc2JbbGVuXSA9PSBJQUMgICAgICAgICAgKi8KKworaW50CisjaWZkZWYgQ0tf QU5TSUMKK3RuY190bl9zYihDSEFSICogc2IsIGludCBsZW4pCisjZWxzZQordG5jX3RuX3NiKHNi LCBsZW4pIENIQVIgKiBzYjsgaW50IGxlbjsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogdG5j X3RuX3NiICovIHsKKyAgICBpZiAodHRuZXQgIT0gTkVUX1RDUEIpIHJldHVybigwKTsKKyAgICBp ZiAodHRucHJvdG8gIT0gTlBfVEVMTkVUKSByZXR1cm4oMCk7CisgICAgaWYgKCFURUxPUFRfTUUo VEVMT1BUX0NPTVBPUlQpKSByZXR1cm4oMCk7CisKKyAgICBpZiAoIXNiKSByZXR1cm4oLTEpOwor CisjaWZkZWYgQ0tfU1NMCisgICAgaWYgKFRFTE9QVF9TQihURUxPUFRfU1RBUlRfVExTKS5zdGFy dF90bHMubWVfZm9sbG93cykgeworICAgICAgICByZXR1cm4oMCk7CisgICAgfQorI2VuZGlmIC8q IENLX1NTTCAqLworCisgICAgZGVidWcoRjExMSwidG5jX3RuX3NiIiwic2JbMF0iLHNiWzBdKTsK KyAgICBkZWJ1ZyhGMTExLCJ0bmNfdG5fc2IiLCJsZW4iLGxlbik7CisKKyAgICBzd2l0Y2ggKHNi WzBdKSB7CisgICAgICBjYXNlIFROQ19DMlNfU0lHTkFUVVJFOgorICAgICAgY2FzZSBUTkNfUzJD X1NJR05BVFVSRToKKyAgICAgICAgZGVidWcoRjExMSwidG5jX3RuX3NiIiwic2lnbmF0dXJlIixs ZW4pOworICAgICAgICBpZiAobGVuID09IDEpIHsKKyAgICAgICAgICAgIHRuY19zZW5kX3NpZ25h dHVyZSgiS2VybWl0IFRlbG5ldCBDb20gUG9ydCBPcHRpb24iKTsKKyAgICAgICAgfSBlbHNlIHsK KyAgICAgICAgICAgIFRFTE9QVF9TQihURUxPUFRfQ09NUE9SVCkuY29tcG9ydC53YWl0X2Zvcl9z YiA9IDA7CisgICAgICAgICAgICBpZiAodG5jX3NpZ25hdHVyZSkKKyAgICAgICAgICAgICAgZnJl ZSh0bmNfc2lnbmF0dXJlKTsKKyAgICAgICAgICAgIHRuY19zaWduYXR1cmUgPSBtYWxsb2MobGVu KTsKKyAgICAgICAgICAgIGlmICh0bmNfc2lnbmF0dXJlKSB7CisgICAgICAgICAgICAgICAgbWVt Y3B5KHRuY19zaWduYXR1cmUsJnNiWzFdLGxlbi0xKTsKKyAgICAgICAgICAgICAgICB0bmNfc2ln bmF0dXJlW2xlbi0xXSA9ICdcMCc7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg YnJlYWs7CisKKyAgICAgIGNhc2UgVE5DX0MyU19TRVRfQkFVRFJBVEU6CisgICAgICBjYXNlIFRO Q19TMkNfU0VUX0JBVURSQVRFOiB7CisgICAgICAgICAgbG9uZyBiYXVkcmF0ZTsKKyAgICAgICAg ICBjaGFyICogYnIgPSAoY2hhciAqKSZiYXVkcmF0ZTsKKyAgICAgICAgICBURUxPUFRfU0IoVEVM T1BUX0NPTVBPUlQpLmNvbXBvcnQud2FpdF9mb3Jfc2IgPSAwOworICAgICAgICAgIGlmIChsZW4g PT0gMikgeworICAgICAgICAgICAgLyogQWN0dWFsIGJlaGF2aW9yIG9mIHRoZSBBY2Nlc3MgU2Vy dmVyLi4uICovCisgICAgICAgICAgICBkZWJ1ZyhGMTExLCJ0bmNfdG5fc2IiLCJiYXVkcmF0ZSBp bmRleCIsc2JbMV0pOworICAgICAgICAgICAgdG5jX2Jwc19pbmRleCA9IDE7CisgICAgICAgICAg ICBzd2l0Y2ggKHNiWzFdKSB7CisgICAgICAgICAgICBjYXNlIFROQ19CUFNfMzAwOgorICAgICAg ICAgICAgICB0bmNfYnBzID0gMzAwOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg IGNhc2UgVE5DX0JQU182MDA6CisgICAgICAgICAgICAgIHRuY19icHMgPSA2MDA7CisgICAgICAg ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUTkNfQlBTXzEyMDA6CisgICAgICAgICAg ICAgIHRuY19icHMgPSAxMjAwOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNh c2UgVE5DX0JQU18yNDAwOgorICAgICAgICAgICAgICB0bmNfYnBzID0gMjQwMDsKKyAgICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFROQ19CUFNfNDgwMDoKKyAgICAgICAgICAg ICAgdG5jX2JwcyA9IDQ4MDA7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz ZSBUTkNfQlBTXzk2MDA6CisgICAgICAgICAgICAgIHRuY19icHMgPSA5NjAwOworICAgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVE5DX0JQU18xNDQwMDoKKyAgICAgICAgICAg ICAgdG5jX2JwcyA9IDE0NDAwOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNh c2UgVE5DX0JQU18xOTIwMDoKKyAgICAgICAgICAgICAgdG5jX2JwcyA9IDE5MjAwOworICAgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVE5DX0JQU18yODgwMDoKKyAgICAgICAg ICAgICAgdG5jX2JwcyA9IDI4ODAwOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg IGNhc2UgVE5DX0JQU18zODQwMDoKKyAgICAgICAgICAgICAgdG5jX2JwcyA9IDM4NDAwOworICAg ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVE5DX0JQU181NzYwMDoKKyAgICAg ICAgICAgICAgdG5jX2JwcyA9IDU3NjAwOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg ICAgIGNhc2UgVE5DX0JQU18xMTUyMDA6CisgICAgICAgICAgICAgIHRuY19icHMgPSAxMTUyMDA7 CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUTkNfQlBTXzIzMDQwMDoK KyAgICAgICAgICAgICAgdG5jX2JwcyA9IDIzMDQwMDsKKyAgICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgICAgICBjYXNlIFROQ19CUFNfNDYwODAwOgorICAgICAgICAgICAgICB0bmNfYnBzID0g NDYwODAwOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg ICAgICAgICAgIHRuY19icHMgPSAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9IGVsc2Ug aWYgKGxlbiA9PSA1KSB7CisgICAgICAgICAgICAvKiBUaGlzIHNlY3Rpb24gYXR0ZW1wdHMgdG8g Zm9sbG93IFJGQyAyMjE3ICovCisgICAgICAgICAgICAgIHRuY19icHNfaW5kZXggPSAwOworICAg ICAgICAgICAgICBiclswXSA9IHNiWzFdOworICAgICAgICAgICAgICBiclsxXSA9IHNiWzJdOwor ICAgICAgICAgICAgICBiclsyXSA9IHNiWzNdOworICAgICAgICAgICAgICBiclszXSA9IHNiWzRd OworI2lmZGVmIGRhdGFnZW5lcmFsCisgICAgICAgICAgICAgIC8qIEFPUy9WUyBkb2Vzbid0IGhh dmUgbnRvaGwoKSBidXQgTVYncyBhcmUgYmlnLWVuZGlhbiAqLworICAgICAgICAgICAgICB0bmNf YnBzID0gYmF1ZHJhdGU7CisjZWxzZQorICAgICAgICAgICAgICB0bmNfYnBzID0gbnRvaGwoYmF1 ZHJhdGUpOworI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCisgICAgICAgICAgICAgIGRlYnVnKEYx MTEsInRuY190bl9zYiIsImJhdWRyYXRlIHJmYyIsdG5jX2Jwcyk7CisgICAgICAgICAgfSBlbHNl IHsKKyAgICAgICAgICAgICAgZGVidWcoRjExMSwidG5jX3RuX3NiIiwiYmF1ZHJhdGUgaW52YWxp ZCBsZW4iLGxlbik7CisgICAgICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAgICAgfQorICAg ICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgY2FzZSBUTkNfQzJTX1NFVF9EQVRBU0laRToK KyAgICAgIGNhc2UgVE5DX1MyQ19TRVRfREFUQVNJWkU6CisgICAgICAgIFRFTE9QVF9TQihURUxP UFRfQ09NUE9SVCkuY29tcG9ydC53YWl0X2Zvcl9zYiA9IDA7CisgICAgICAgIGlmIChsZW4gPCAy KQorICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAgIHRuY19kYXRhc2l6ZSA9IHNiWzFdOwor ICAgICAgICBkZWJ1ZyhGMTExLCJ0bmNfdG5fc2IiLCJkYXRhc2l6ZSIsc2JbMV0pOworICAgICAg ICBicmVhazsKKworICAgICAgY2FzZSBUTkNfQzJTX1NFVF9QQVJJVFk6CisgICAgICBjYXNlIFRO Q19TMkNfU0VUX1BBUklUWToKKyAgICAgICAgVEVMT1BUX1NCKFRFTE9QVF9DT01QT1JUKS5jb21w b3J0LndhaXRfZm9yX3NiID0gMDsKKyAgICAgICAgaWYgKGxlbiA8IDIpCisgICAgICAgICAgcmV0 dXJuKC0xKTsKKyAgICAgICAgdG5jX3Bhcml0eSA9IHNiWzFdOworICAgICAgICBkZWJ1ZyhGMTEx LCJ0bmNfdG5fc2IiLCJwYXJpdHkiLHNiWzFdKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNh c2UgVE5DX0MyU19TRVRfU1RPUFNJWkU6CisgICAgICBjYXNlIFROQ19TMkNfU0VUX1NUT1BTSVpF OgorICAgICAgICBURUxPUFRfU0IoVEVMT1BUX0NPTVBPUlQpLmNvbXBvcnQud2FpdF9mb3Jfc2Ig PSAwOworICAgICAgICBpZiAobGVuIDwgMikKKyAgICAgICAgICByZXR1cm4oLTEpOworICAgICAg ICB0bmNfc3RvcGJpdCA9IHNiWzFdOworICAgICAgICBkZWJ1ZyhGMTExLCJ0bmNfdG5fc2IiLCJz dG9wc2l6ZSIsc2JbMV0pOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBUTkNfQzJTX1NF VF9DT05UUk9MOgorICAgICAgY2FzZSBUTkNfUzJDX1NFVF9DT05UUk9MOgorICAgICAgICBpZiAo bGVuIDwgMikgeworICAgICAgICAgICAgVEVMT1BUX1NCKFRFTE9QVF9DT01QT1JUKS5jb21wb3J0 LndhaXRfZm9yX3NiID0gMDsKKyAgICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAgIH0KKwor I2lmZGVmIENPTU1FTlQKKyAgICAgICAgLyogVGhpcyBsaW5lIHNob3VsZCBiZSByZW1vdmVkIHdo ZW4gdGVzdGluZyBpcyBjb21wbGV0ZS4gKi8KKyAgICAgICAgVEVMT1BUX1NCKFRFTE9QVF9DT01Q T1JUKS5jb21wb3J0LndhaXRfZm9yX3NiID0gMDsKKyNlbmRpZiAvKiBDT01NRU5UICovCisKKyAg ICAgICAgc3dpdGNoICggc2JbMV0gKSB7CisgICAgICAgICAgY2FzZSBUTkNfQ1RMX09GTE9XX1JF UVVFU1Q6CisgICAgICAgICAgICAvKiBkZXRlcm1pbmUgbG9jYWwgb3V0Ym91bmQgZmxvdyBjb250 cm9sIGFuZCBzZW5kIHRvIHBlZXIgKi8KKwkgICAgLyogQ2lzY28gSU9TIHJldHVybnMgMCAoVE5D X0NUTF9PRkxPV19SRVFVRVNUKSB3aGVuIGF0dGVtcHRpbmcgKi8KKwkgICAgLyogdG8gc2V0IHRo ZSBpbmJvdW5kIGZsb3cgY29udHJvbCBpZiBpdCBpcyBub3Qgc3VwcG9ydGVkICAgICAgKi8KKwkg ICAgLyogc2VwYXJhdGVseSBmcm9tIG91dGJvdW5kIGZsb3cgY29udHJvbC4gIFNvIG11c3QgcmVz ZXQgICAgICAgKi8KKwkgICAgLyogd2FpdCBmb3Igc2IgZmxhZy4gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGRlYnVnKEYxMTAsInRuY190 bl9zYiIsIm9mbG93IHJlcXVlc3QiLDApOworICAgICAgICAgICAgVEVMT1BUX1NCKFRFTE9QVF9D T01QT1JUKS5jb21wb3J0LndhaXRfZm9yX3NiID0gMDsKKyAgICAgICAgICAgIGJyZWFrOworICAg ICAgICAgIGNhc2UgVE5DX0NUTF9PRkxPV19OT05FOgorICAgICAgICAgIGNhc2UgVE5DX0NUTF9P RkxPV19YT05fWE9GRjoKKyAgICAgICAgICBjYXNlIFROQ19DVExfT0ZMT1dfUlRTX0NUUzoKKyAg ICAgICAgICBjYXNlIFROQ19DVExfT0ZMT1dfRENEOgorICAgICAgICAgIGNhc2UgVE5DX0NUTF9P RkxPV19EU1I6CisgICAgICAgICAgICBURUxPUFRfU0IoVEVMT1BUX0NPTVBPUlQpLmNvbXBvcnQu d2FpdF9mb3Jfc2IgPSAwOworICAgICAgICAgICAgdG5jX29mbG93ID0gc2JbMV07CisgICAgICAg ICAgICBkZWJ1ZyhGMTExLCJ0bmNfdG5fc2IiLCJvZmxvdyIsc2JbMV0pOworICAgICAgICAgICAg YnJlYWs7CisgICAgICAgICAgY2FzZSBUTkNfQ1RMX0JSRUFLX1JFUVVFU1Q6CisgICAgICAgICAg ICAvKiBkZXRlcm1pbmUgbG9jYWwgYnJlYWsgc3RhdGUgYW5kIHNlbmQgdG8gcGVlciAqLworICAg ICAgICAgICAgZGVidWcoRjExMCwidG5jX3RuX3NiIiwiYnJlYWsgcmVxdWVzdCIsMCk7CisgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIFROQ19DVExfQlJFQUtfT046CisgICAgICAg ICAgICBURUxPUFRfU0IoVEVMT1BUX0NPTVBPUlQpLmNvbXBvcnQud2FpdF9mb3Jfc2IgPSAwOwor ICAgICAgICAgICAgdG5jX2JyZWFrID0gMTsKKyAgICAgICAgICAgIGRlYnVnKEYxMTAsInRuY190 bl9zYiIsImJyZWFrIG9uIiwwKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2Fz ZSBUTkNfQ1RMX0JSRUFLX09GRjoKKyAgICAgICAgICAgIFRFTE9QVF9TQihURUxPUFRfQ09NUE9S VCkuY29tcG9ydC53YWl0X2Zvcl9zYiA9IDA7CisgICAgICAgICAgICB0bmNfYnJlYWsgPSAwOwor ICAgICAgICAgICAgZGVidWcoRjExMCwidG5jX3RuX3NiIiwiYnJlYWsgb2ZmIiwwKTsKKyAgICAg ICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBUTkNfQ1RMX0RUUl9SRVFVRVNUOgorICAg ICAgICAgICAgLyogZGV0ZXJtaW5lIGxvY2FsIGR0ciBzdGF0ZSBhbmQgc2VuZCB0byBwZWVyICov CisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJ0bmNfdG5fc2IiLCJkdHIgcmVxdWVzdCIsMCk7Cisg ICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgVE5DX0NUTF9EVFJfT046CisgICAg ICAgICAgICBURUxPUFRfU0IoVEVMT1BUX0NPTVBPUlQpLmNvbXBvcnQud2FpdF9mb3Jfc2IgPSAw OworICAgICAgICAgICAgdG5jX2R0ciA9IDE7CisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJ0bmNf dG5fc2IiLCJkdHIgb24iLDApOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNl IFROQ19DVExfRFRSX09GRjoKKyAgICAgICAgICAgIFRFTE9QVF9TQihURUxPUFRfQ09NUE9SVCku Y29tcG9ydC53YWl0X2Zvcl9zYiA9IDA7CisgICAgICAgICAgICB0bmNfZHRyID0gMDsKKyAgICAg ICAgICAgIGRlYnVnKEYxMTAsInRuY190bl9zYiIsImR0ciBvZmYiLDApOworICAgICAgICAgICAg YnJlYWs7CisKKyAgICAgICAgICBjYXNlIFROQ19DVExfUlRTX1JFUVVFU1Q6CisgICAgICAgICAg ICAvKiBkZXRlcm1pbmUgbG9jYWwgcnRzIHN0YXRlIGFuZCBzZW5kIHRvIHBlZXIgKi8KKyAgICAg ICAgICAgIGRlYnVnKEYxMTAsInRuY190bl9zYiIsInJ0cyByZXF1ZXN0IiwwKTsKKyAgICAgICAg ICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBUTkNfQ1RMX1JUU19PTjoKKyAgICAgICAgICAg IFRFTE9QVF9TQihURUxPUFRfQ09NUE9SVCkuY29tcG9ydC53YWl0X2Zvcl9zYiA9IDA7CisgICAg ICAgICAgICB0bmNfcnRzID0gMTsKKyAgICAgICAgICAgIGRlYnVnKEYxMTAsInRuY190bl9zYiIs InJ0cyBvbiIsMCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgVE5DX0NU TF9SVFNfT0ZGOgorICAgICAgICAgICAgVEVMT1BUX1NCKFRFTE9QVF9DT01QT1JUKS5jb21wb3J0 LndhaXRfZm9yX3NiID0gMDsKKyAgICAgICAgICAgIHRuY19ydHMgPSAwOworICAgICAgICAgICAg ZGVidWcoRjExMCwidG5jX3RuX3NiIiwicnRzIG9mZiIsMCk7CisgICAgICAgICAgICBicmVhazsK KworICAgICAgICAgIGNhc2UgVE5DX0NUTF9JRkxPV19SRVFVRVNUOgorICAgICAgICAgICAgLyog ZGV0ZXJtaW5lIGxvY2FsIGluYm91bmQgZmxvdyBjb250cm9sIGFuZCBzZW5kIHRvIHBlZXIgKi8K KyAgICAgICAgICAgIGRlYnVnKEYxMTAsInRuY190bl9zYiIsImlmbG93IHJlcXVlc3QiLDApOwor ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIFROQ19DVExfSUZMT1dfTk9ORToK KyAgICAgICAgICBjYXNlIFROQ19DVExfSUZMT1dfWE9OX1hPRkY6CisgICAgICAgICAgY2FzZSBU TkNfQ1RMX0lGTE9XX1JUU19DVFM6CisgICAgICAgICAgY2FzZSBUTkNfQ1RMX0lGTE9XX0RUUjoK KyAgICAgICAgICAgIFRFTE9QVF9TQihURUxPUFRfQ09NUE9SVCkuY29tcG9ydC53YWl0X2Zvcl9z YiA9IDA7CisgICAgICAgICAgICB0bmNfaWZsb3cgPSBzYlsxXTsKKyAgICAgICAgICAgIGRlYnVn KEYxMTEsInRuY190bl9zYiIsImlmbG93IixzYlsxXSk7CisgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgfQorICAg ICAgICBicmVhazsKKworICAgICAgY2FzZSBUTkNfQzJTX05PVElGWV9MSU5FU1RBVEU6CisgICAg ICBjYXNlIFROQ19TMkNfU0VORF9MUzoKKyAgICAgICAgaWYgKGxlbiA8IDIpCisgICAgICAgICAg cmV0dXJuKC0xKTsKKyAgICAgICAgdG5jX2xzID0gc2JbMV07CisgICAgICAgIGRlYnVnKEYxMTEs InRuY190bl9zYiIsImxpbmVzdGF0ZSIsc2JbMV0pOworICAgICAgICBpZiAodG5fZGViIHx8IGRl YnNlcykgeworICAgICAgICAgICAgaWYgKHRuY19scyAmIFROQ19NU19EQVRBX1JFQURZICkKKyAg ICAgICAgICAgICAgdG5fZGVidWcoIiAgQ29tUG9ydCBMaW5lc3RhdGUgRGF0YSBSZWFkeSIpOwor ICAgICAgICAgICAgaWYgKHRuY19scyAmIFROQ19NU19PVkVSUlVOX0VSUk9SICkKKyAgICAgICAg ICAgICAgdG5fZGVidWcoIiAgQ29tUG9ydCBMaW5lc3RhdGUgT3ZlcnJ1biBFcnJvciIpOworICAg ICAgICAgICAgaWYgKHRuY19scyAmIFROQ19NU19QQVJJVFlfRVJST1IgKQorICAgICAgICAgICAg ICB0bl9kZWJ1ZygiICBDb21Qb3J0IExpbmVzdGF0ZSBQYXJpdHkgRXJyb3IiKTsKKyAgICAgICAg ICAgIGlmICh0bmNfbHMgJiBUTkNfTVNfRlJBTUVfRVJST1IgKQorICAgICAgICAgICAgICB0bl9k ZWJ1ZygiICBDb21Qb3J0IExpbmVzdGF0ZSBGcmFtaW5nIEVycm9yIik7CisgICAgICAgICAgICBp ZiAodG5jX2xzICYgVE5DX01TX0JSRUFLX0VSUk9SICkKKyAgICAgICAgICAgICAgdG5fZGVidWco IiAgQ29tUG9ydCBMaW5lc3RhdGUgQnJlYWsgRGV0ZWN0IEVycm9yIik7CisgICAgICAgICAgICBp ZiAodG5jX2xzICYgVE5DX01TX0hSX0VNUFRZICkKKyAgICAgICAgICAgICAgdG5fZGVidWcoIiAg Q29tUG9ydCBMaW5lc3RhdGUgSG9sZGluZyBSZWdpc3RlciBFbXB0eSIpOworICAgICAgICAgICAg aWYgKHRuY19scyAmIFROQ19NU19TUl9FTVBUWSApCisgICAgICAgICAgICAgIHRuX2RlYnVnKCIg IENvbVBvcnQgTGluZXN0YXRlIFNoaWZ0IFJlZ2lzdGVyIEVtcHR5Iik7CisgICAgICAgICAgICBp ZiAodG5jX2xzICYgVE5DX01TX1RJTUVPVVRfRVJST1IgKQorICAgICAgICAgICAgICB0bl9kZWJ1 ZygiICBDb21Qb3J0IExpbmVzdGF0ZSBUaW1lb3V0IEVycm9yIik7CisgICAgICAgIH0KKyAgICAg ICAgYnJlYWs7CisKKyAgICAgIGNhc2UgVE5DX0MyU19OT1RJRllfTU9ERU1TVEFURToKKyAgICAg IGNhc2UgVE5DX1MyQ19TRU5EX01TOgorICAgICAgICBURUxPUFRfU0IoVEVMT1BUX0NPTVBPUlQp LmNvbXBvcnQud2FpdF9mb3JfbXMgPSAwOworICAgICAgICBpZiAobGVuIDwgMikKKyAgICAgICAg ICByZXR1cm4oLTEpOworICAgICAgICB0bmNfbXMgPSBzYlsxXTsKKyAgICAgICAgZGVidWcoRjEx MSwidG5jX3RuX3NiIiwibW9kZW1zdGF0ZSIsc2JbMV0pOworICAgICAgICBpZiAodG5fZGViIHx8 IGRlYnNlcykgeworICAgICAgICAgICAgaWYgKHRuY19tcyAmIFROQ19NU19DVFNfREVMVEEgKQor ICAgICAgICAgICAgICB0bl9kZWJ1ZygiICBDb21Qb3J0IE1vZGVtc3RhdGUgQ1RTIFN0YXRlIENo YW5nZSIpOworICAgICAgICAgICAgaWYgKHRuY19tcyAmIFROQ19NU19EU1JfREVMVEEgKQorICAg ICAgICAgICAgICB0bl9kZWJ1ZygiICBDb21Qb3J0IE1vZGVtc3RhdGUgRFNSIFN0YXRlIENoYW5n ZSIpOworICAgICAgICAgICAgaWYgKHRuY19tcyAmIFROQ19NU19FREdFX1JJTkcgKQorICAgICAg ICAgICAgICB0bl9kZWJ1ZygiICBDb21Qb3J0IE1vZGVtc3RhdGUgVHJhaWxpbmcgRWRnZSBSaW5n IERldGVjdG9yIE9uIik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIHRuX2RlYnVn KCIgIENvbVBvcnQgTW9kZW1zdGF0ZSBUcmFpbGluZyBFZGdlIFJpbmcgRGV0ZWN0b3IgT2ZmIik7 CisgICAgICAgICAgICBpZiAodG5jX21zICYgVE5DX01TX1JMU0RfREVMVEEgKQorICAgICAgICAg ICAgICB0bl9kZWJ1ZygiICBDb21Qb3J0IE1vZGVtc3RhdGUgUkxTRCBTdGF0ZSBDaGFuZ2UiKTsK KyAgICAgICAgICAgIGlmICh0bmNfbXMgJiBUTkNfTVNfQ1RTX1NJRyApCisgICAgICAgICAgICAg IHRuX2RlYnVnKCIgIENvbVBvcnQgTW9kZW1zdGF0ZSBDVFMgU2lnbmFsIE9uIik7CisgICAgICAg ICAgICBlbHNlCisgICAgICAgICAgICAgIHRuX2RlYnVnKCIgIENvbVBvcnQgTW9kZW1zdGF0ZSBD VFMgU2lnbmFsIE9mZiIpOworICAgICAgICAgICAgaWYgKHRuY19tcyAmIFROQ19NU19EU1JfU0lH ICkKKyAgICAgICAgICAgICAgdG5fZGVidWcoIiAgQ29tUG9ydCBNb2RlbXN0YXRlIERTUiBTaWdu YWwgT24iKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgdG5fZGVidWcoIiAgQ29t UG9ydCBNb2RlbXN0YXRlIERTUiBTaWduYWwgT2ZmIik7CisgICAgICAgICAgICBpZiAodG5jX21z ICYgVE5DX01TX1JJX1NJRyApCisgICAgICAgICAgICAgIHRuX2RlYnVnKCIgIENvbVBvcnQgTW9k ZW1zdGF0ZSBSaW5nIEluZGljYXRvciBPbiIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAg ICAgICB0bl9kZWJ1ZygiICBDb21Qb3J0IE1vZGVtc3RhdGUgUmluZyBJbmRpY2F0b3IgT2ZmIik7 CisgICAgICAgICAgICBpZiAodG5jX21zICYgVE5DX01TX1JMU0RfU0lHICkKKyAgICAgICAgICAg ICAgdG5fZGVidWcoIiAgQ29tUG9ydCBNb2RlbXN0YXRlIFJMU0QgU2lnbmFsIE9uIik7CisgICAg ICAgICAgICBlbHNlCisgICAgICAgICAgICAgIHRuX2RlYnVnKCIgIENvbVBvcnQgTW9kZW1zdGF0 ZSBSTFNEIFNpZ25hbCBPZmYiKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAg Y2FzZSBUTkNfQzJTX0ZMT1dfU1VTUEVORDoKKyAgICAgIGNhc2UgVE5DX1MyQ19GTE9XX1NVU1BF TkQ6CisgICAgICAgIGRlYnVnKEYxMTAsInRuY190bl9zYiIsImZsb3cgc3VzcGVuZCIsMCk7Cisg ICAgICAgIHRuY19zdXNwZW5kX3htaXQgPSAxOworICAgICAgICBicmVhazsKKworICAgICAgY2Fz ZSBUTkNfQzJTX0ZMT1dfUkVTVU1FOgorICAgICAgY2FzZSBUTkNfUzJDX0ZMT1dfUkVTVU1FOgor ICAgICAgICBkZWJ1ZyhGMTEwLCJ0bmNfdG5fc2IiLCJmbG93IHJlc3VtZSIsMCk7CisgICAgICAg IHRuY19zdXNwZW5kX3htaXQgPSAwOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBUTkNf QzJTX1NFVF9MU19NQVNLOgorICAgICAgY2FzZSBUTkNfUzJDX1NFVF9MU19NQVNLOgorICAgICAg ICAgIFRFTE9QVF9TQihURUxPUFRfQ09NUE9SVCkuY29tcG9ydC53YWl0X2Zvcl9zYiA9IDA7Cisg ICAgICAgICAgaWYgKGxlbiA8IDIpCisgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgZGVi dWcoRjExMSwidG5jX3RuX3NiIiwibGluZXN0YXRlIG1hc2siLHNiWzFdKTsKKyAgICAgICAgdG5j X2xzX21hc2sgPSBzYlsxXTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgVE5DX0MyU19T RVRfTVNfTUFTSzoKKyAgICAgIGNhc2UgVE5DX1MyQ19TRVRfTVNfTUFTSzoKKyAgICAgICAgICBU RUxPUFRfU0IoVEVMT1BUX0NPTVBPUlQpLmNvbXBvcnQud2FpdF9mb3Jfc2IgPSAwOworICAgICAg ICAgIGlmIChsZW4gPCAyKQorICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAgIGRlYnVnKEYx MTEsInRuY190bl9zYiIsIm1vZGVtc3RhdGUgbWFzayIsc2JbMV0pOworICAgICAgICB0bmNfbHNf bWFzayA9IHNiWzFdOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBUTkNfQzJTX1BVUkdF OgorICAgICAgY2FzZSBUTkNfUzJDX1BVUkdFOgorICAgICAgICBpZiAobGVuIDwgMikKKyAgICAg ICAgICByZXR1cm4oLTEpOworICAgICAgICBkZWJ1ZyhGMTExLCJ0bmNfdG5fc2IiLCJwdXJnZSIs c2JbMV0pOworICAgICAgICBzd2l0Y2ggKCBzYlsxXSApIHsKKyAgICAgICAgICBjYXNlIFROQ19Q VVJHRV9SRUNFSVZFOgorICAgICAgICAgIGNhc2UgVE5DX1BVUkdFX1RSQU5TTUlUOgorICAgICAg ICAgIGNhc2UgVE5DX1BVUkdFX0JPVEg6CisgICAgICAgICAgICAvKiBwdXJnZSBsb2NhbCBidWZm ZXJzICovCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg ICAgcmV0dXJuKC0xKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6 CisgICAgICAgIHJldHVybigtMSk7CisgICAgfQorICAgIHJldHVybigwKTsKK30KKworQ09OU1Qg Y2hhciAqCisjaWZkZWYgQ0tfQU5TSUMKK3RuY19nZXRfc2lnbmF0dXJlKHZvaWQpCisjZWxzZSAv KiBDS19BTlNJQyAqLwordG5jX2dldF9zaWduYXR1cmUoKQorI2VuZGlmIC8qIENLX0FOU0lDICov CisvKiB0bmNfZ2V0X3NpZ25hdHVyZSAqLyB7CisgICAgLyogc2VuZCBJQUMgU0IgQ09NLVBPUlQg U0lHTkFUVVJFIElBQyBTRSAqLworICAgIC8qIHdhaXQgZm9yIHJlc3BvbnNlICovCisgICAgaW50 IGkgPSAwLCByYzsKKworICAgIGlmICh0dG5ldCAhPSBORVRfVENQQikgcmV0dXJuKE5VTEwpOwor ICAgIGlmICh0dG5wcm90byAhPSBOUF9URUxORVQpIHJldHVybihOVUxMKTsKKworICAgIGlmICgh VEVMT1BUX01FKFRFTE9QVF9DT01QT1JUKSkgcmV0dXJuKE5VTEwpOworCisjaWZkZWYgQ0tfU1NM CisgICAgaWYgKFRFTE9QVF9TQihURUxPUFRfU1RBUlRfVExTKS5zdGFydF90bHMubWVfZm9sbG93 cykgeworICAgICAgICByZXR1cm4oTlVMTCk7CisgICAgfQorI2VuZGlmIC8qIENLX1NTTCAqLwor CisgICAgaWYgKCB0bmNfc2lnbmF0dXJlICkKKyAgICAgICAgcmV0dXJuKHRuY19zaWduYXR1cmUp OworCisgICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgSUFDOyAgICAgICAgICAgLyogSSBBbSBhIENv bW1hbmQgKi8KKyAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBTQjsgICAgICAgICAgICAvKiBTdWJu ZWdvdGlhdGlvbiAqLworICAgIHNiX291dFtpKytdID0gVEVMT1BUX0NPTVBPUlQ7ICAgICAgICAg ICAgICAgLyogQ29tUG9ydCAqLworICAgIHNiX291dFtpKytdID0gVE5DX0MyU19TSUdOQVRVUkU7 ICAgIC8qIFNpZ25hdHVyZSAqLworICAgIHNiX291dFtpKytdID0gKENIQVIpIElBQzsgICAgICAg ICAgICAgICAvKiBFbmQgb2YgU3VibmVnb3RpYXRpb24gKi8KKyAgICBzYl9vdXRbaSsrXSA9IChD SEFSKSBTRTsgICAgICAgICAgICAgICAgLyogbWFya2VkIGJ5IElBQyBTRSAqLworCisjaWZkZWYg REVCVUcKKyAgICBpZiAoZGVibG9nIHx8IHRuX2RlYiB8fCBkZWJzZXMpIHsKKyAgICAgICAgY2tt YWttc2codG5fbXNnX291dCxUTl9NU0dfTEVOLAorICAgICAgICAgICAgICAgICAiVEVMTkVUIFNF TlQgU0IgIixURUxPUFQoVEVMT1BUX0NPTVBPUlQpLAorICAgICAgICAgICAgICAgICAiIFNJR05B VFVSRSBJQUMgU0UiLCBOVUxMKTsKKyAgICB9CisjZW5kaWYgLyogREVCVUcgKi8KKyNpZmRlZiBP UzIKKyAgICBSZXF1ZXN0VGVsbmV0TXV0ZXgoIFNFTV9JTkRFRklOSVRFX1dBSVQgKTsKKyNlbmRp ZgorI2lmZGVmIERFQlVHCisgICAgZGVidWcoRjEwMCx0bl9tc2dfb3V0LCIiLDApOworICAgIGlm ICh0bl9kZWIgfHwgZGVic2VzKSB0bl9kZWJ1Zyh0bl9tc2dfb3V0KTsKKyNlbmRpZiAvKiBERUJV RyAqLworICAgIHJjID0gKHR0b2woKENIQVIgKilzYl9vdXQsaSkgPCAwKTsgICAgICAvKiBTZW5k IGl0LiAqLworI2lmZGVmIE9TMgorICAgIFJlbGVhc2VUZWxuZXRNdXRleCgpOworI2VuZGlmCisg ICAgaWYgKHJjKQorICAgICAgICByZXR1cm4oTlVMTCk7CisKKyAgICBpZiAodG5jX3dhaXQoKENI QVIgKikiY29tcG9ydCBzaWduYXR1cmUgcmVxdWVzdCIsMCkgPCAwKSB7CisgICAgICAgIHRuX3B1 c2goKTsKKyAgICAgICAgcmV0dXJuKE5VTEwpOworICAgIH0KKyAgICBkZWJ1ZyhGMTEwLCJ0bmNf Z2V0X3NpZ25hdHVyZSIsdG5jX3NpZ25hdHVyZSwwKTsKKyAgICByZXR1cm4odG5jX3NpZ25hdHVy ZSk7Cit9CisKK2ludAorI2lmZGVmIENLX0FOU0lDCit0bmNfc2VuZF9zaWduYXR1cmUoY2hhciAq IHNpZ25hdHVyZSkKKyNlbHNlIC8qIENLX0FOU0lDICovCit0bmNfc2VuZF9zaWduYXR1cmUoc2ln bmF0dXJlKSBjaGFyICogc2lnbmF0dXJlOworI2VuZGlmIC8qIENLX0FOU0lDICovCisvKiB0bmNf c2VuZF9zaWduYXR1cmUgKi8geworICAgIC8qIHNlbmQgSUFDIFNCIENPTS1QT1JUIFNJR05BVFVS RSA8dGV4dD4gSUFDIFNFICovCisgICAgaW50IGkgPSAwLCBqID0gMCwgcmM7CisKKyAgICBkZWJ1 ZyhGMTEwLCJ0bmNfc2VuZF9zaWduYXR1cmUiLHNpZ25hdHVyZSwwKTsKKworICAgIGlmICghc2ln bmF0dXJlIHx8ICFzaWduYXR1cmVbMF0pCisgICAgICByZXR1cm4oMCk7CisKKyAgICBpZiAodHRu ZXQgIT0gTkVUX1RDUEIpIHJldHVybigwKTsKKyAgICBpZiAodHRucHJvdG8gIT0gTlBfVEVMTkVU KSByZXR1cm4oMCk7CisKKyAgICBpZiAoIVRFTE9QVF9NRShURUxPUFRfQ09NUE9SVCkpIHJldHVy bigwKTsKKworI2lmZGVmIENLX1NTTAorICAgIGlmIChURUxPUFRfU0IoVEVMT1BUX1NUQVJUX1RM Uykuc3RhcnRfdGxzLm1lX2ZvbGxvd3MpIHsKKyAgICAgICAgcmV0dXJuKDApOworICAgIH0KKyNl bmRpZiAvKiBDS19TU0wgKi8KKworICAgIHNiX291dFtpKytdID0gKENIQVIpIElBQzsgICAgICAg ICAgICAgICAgIC8qIEkgQW0gYSBDb21tYW5kICovCisgICAgc2Jfb3V0W2krK10gPSAoQ0hBUikg U0I7ICAgICAgICAgICAgICAgICAgLyogU3VibmVnb3RpYXRpb24gKi8KKyAgICBzYl9vdXRbaSsr XSA9IFRFTE9QVF9DT01QT1JUOyAgICAgICAgICAgICAvKiBDb21Qb3J0ICovCisgICAgc2Jfb3V0 W2krK10gPSBUTkNfQzJTX1NJR05BVFVSRTsgICAgICAvKiBTaWduYXR1cmUgKi8KKyAgICBmb3Ig KDsgc2lnbmF0dXJlW2pdOyBpKyssaisrKQorICAgICAgc2Jfb3V0W2ldID0gc2lnbmF0dXJlW2pd OworICAgIHNiX291dFtpKytdID0gKENIQVIpIElBQzsgICAgICAgICAgICAgICAvKiBFbmQgb2Yg U3VibmVnb3RpYXRpb24gKi8KKyAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBTRTsgICAgICAgICAg ICAgICAgLyogbWFya2VkIGJ5IElBQyBTRSAqLworCisjaWZkZWYgREVCVUcKKyAgICBpZiAoZGVi bG9nIHx8IHRuX2RlYiB8fCBkZWJzZXMpIHsKKyAgICAgICAgY2ttYWt4bXNnKHRuX21zZ19vdXQs VE5fTVNHX0xFTiwKKyAgICAgICAgICAgICAgICAgICJURUxORVQgU0VOVCBTQiAiLFRFTE9QVChU RUxPUFRfQ09NUE9SVCksCisgICAgICAgICAgICAgICAgICAiIFNJR05BVFVSRSAiLCBzaWduYXR1 cmUsICIgSUFDIFNFIiwgTlVMTCwKKyAgICAgICAgICAgICAgICAgIE5VTEwsTlVMTCxOVUxMLE5V TEwsTlVMTCxOVUxMKTsKKyAgICB9CisjZW5kaWYgLyogREVCVUcgKi8KKyNpZmRlZiBPUzIKKyAg ICBSZXF1ZXN0VGVsbmV0TXV0ZXgoIFNFTV9JTkRFRklOSVRFX1dBSVQgKTsKKyNlbmRpZgorI2lm ZGVmIERFQlVHCisgICAgZGVidWcoRjEwMCx0bl9tc2dfb3V0LCIiLDApOworICAgIGlmICh0bl9k ZWIgfHwgZGVic2VzKSB0bl9kZWJ1Zyh0bl9tc2dfb3V0KTsKKyNlbmRpZiAvKiBERUJVRyAqLwor ICAgIHJjID0gKHR0b2woKENIQVIgKilzYl9vdXQsaSkgPCAwKTsgICAgICAvKiBTZW5kIGl0LiAq LworI2lmZGVmIE9TMgorICAgIFJlbGVhc2VUZWxuZXRNdXRleCgpOworI2VuZGlmCisgICAgaWYg KHJjKQorICAgICAgICByZXR1cm4oLTEpOworICAgIHJldHVybigwKTsKK30KKworaW50CisjaWZk ZWYgQ0tfQU5TSUMKK3RuY19zZXRfYmF1ZCggbG9uZyBiYXVkICkKKyNlbHNlIC8qIENLX0FOU0lD ICovCit0bmNfc2V0X2JhdWQoYmF1ZCkgbG9uZyBiYXVkOworI2VuZGlmIC8qIENLX0FOU0lDICov CisvKiB0bmNfc2V0X2JhdWQgKi8geworICAgIC8qIHNlbmQgSUFDIFNCIENPTS1QT1JUIFNFVC1C QVVEIDx2YWx1ZSg0KT4gSUFDIFNFICAqLworICAgIC8qIHdhaXQgZm9yIHJlc3BvbnNlICovCisg ICAgLyogMCBpcyB1c2VkIHRvIHJlcXVlc3QgdGhlIGN1cnJlbnQgYmF1ZCByYXRlIGFuZCAqLwor ICAgIC8qIG1heSBub3QgYmUgc2VudCBieSB0aGlzIGZ1bmMgKi8KKyAgICAvKiByZXR1cm4gbmV3 IGhvc3QgdmFsdWUgKi8KKworICAgIC8qCisgICAgICogICB0aGUgYWJvdmUgY29tZXMgZnJvbSB0 aGUgUkZDLiAgQnV0IHRoYXQgaXMgbm90IHdoYXQgSSBhbSBzZWVpbmcKKyAgICAgKiAgIGluc3Rl YWQgSSBhcHBlYXIgdG8gYmUgc2VlaW5nIHRvIGZvbGxvd2luZzoKKyAgICAgKgorICAgICAqICAg ICAgVmFsdWUgICAgICAgICAgICAgICBCYXVkCisgICAgICogICAgICAgICAgMSAgICAgICAgICAg ICAgID8KKyAgICAgKiAgICAgICAgICAyICAgICAgICAgICAgICAgPworICAgICAqICAgICAgICAg IDMgICAgICAgICAgICAgICAzMDAKKyAgICAgKiAgICAgICAgICA0ICAgICAgICAgICAgICAgNjAw CisgICAgICogICAgICAgICAgNSAgICAgICAgICAgICAgIDEyMDAKKyAgICAgKiAgICAgICAgICA2 ICAgICAgICAgICAgICAgMjQwMAorICAgICAqICAgICAgICAgIDcgICAgICAgICAgICAgICA0ODAw ICAgICAgPworICAgICAqICAgICAgICAgIDggICAgICAgICAgICAgICA5NjAwCisgICAgICogICAg ICAgICAgOSAgICAgICAgICAgICAgICAgICAgICAgICA/CisgICAgICogICAgICAgICAgMTAgICAg ICAgICAgICAgIDE5MjAwICAgICA/CisgICAgICogICAgICAgICAgMTEgICAgICAgICAgICAgICAg ICAgICAgICA/CisgICAgICogICAgICAgICAgMTIgICAgICAgICAgICAgIDM4NDAwCisgICAgICog ICAgICAgICAgMTMgICAgICAgICAgICAgIDU3NjAwICAgICA/CisgICAgICogICAgICAgICAgMTQg ICAgICAgICAgICAgIDExNTIwMAorICAgICAqICAgICAgICAgIDE1ICAgICAgICAgICAgICAyMzA0 MDAgICAgPworICAgICAqICAgICAgICAgIDE2ICAgICAgICAgICAgICA0NjA4MDAgICAgPworICAg ICAqLworCisgICAgaW50IGkgPSAwLCByYzsKKyNpZmRlZiBkYXRhZ2VuZXJhbAorICAgIC8qIEFP Uy9WUyBkb2Vzbid0IGhhdmUgaHRvbmwoKSBidXQgTVYncyBhcmUgYmlnLWVuZGlhbiAqLworICAg IGxvbmcgbmV0X2JhdWQgPSBiYXVkOworI2Vsc2UKKyAgICBsb25nIG5ldF9iYXVkID0gaHRvbmwo YmF1ZCk7CisjZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KKyAgICBDSEFSIGI7CisKKyAgICBkZWJ1 ZyhGMTExLCJ0bmNfc2V0X2JhdWQiLCJiZWdpbiIsYmF1ZCk7CisKKyAgICBpZiAodHRuZXQgIT0g TkVUX1RDUEIpIHJldHVybigwKTsKKyAgICBpZiAodHRucHJvdG8gIT0gTlBfVEVMTkVUKSByZXR1 cm4oMCk7CisKKyAgICBpZiAoIVRFTE9QVF9NRShURUxPUFRfQ09NUE9SVCkpIHJldHVybigwKTsK KworI2lmZGVmIENLX1NTTAorICAgIGlmIChURUxPUFRfU0IoVEVMT1BUX1NUQVJUX1RMUykuc3Rh cnRfdGxzLm1lX2ZvbGxvd3MpIHsKKyAgICAgICAgcmV0dXJuKDApOworICAgIH0KKyNlbmRpZiAv KiBDS19TU0wgKi8KKworICAgIGlmIChiYXVkIDw9IDApCisgICAgICAgIHJldHVybigwKTsKKwor ICAgIGlmICggbmV0X2JhdWQgIT0gMCAmJiBuZXRfYmF1ZCA9PSB0bmNfYnBzKQorICAgICAgICBy ZXR1cm4odG5jX2Jwcyk7CisKKyAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBJQUM7ICAgICAgICAg ICAgICAgICAvKiBJIEFtIGEgQ29tbWFuZCAqLworICAgIHNiX291dFtpKytdID0gKENIQVIpIFNC OyAgICAgICAgICAgICAgICAgIC8qIFN1Ym5lZ290aWF0aW9uICovCisgICAgc2Jfb3V0W2krK10g PSBURUxPUFRfQ09NUE9SVDsgICAgICAgICAgICAgLyogQ29tUG9ydCAqLworICAgIHNiX291dFtp KytdID0gVE5DX0MyU19TRVRfQkFVRFJBVEU7ICAgLyogU2V0IEJhdWQgUmF0ZSAqLworCisgICAg aWYgKHRuY19icHNfaW5kZXgpIHsKKyAgICAgICAgLyogSU9TIEFjY2VzcyBTZXJ2ZXIgKi8KKyAg ICAgICAgaWYgKGJhdWQgPD0gMzAwKQorICAgICAgICAgICAgYiA9IFROQ19CUFNfMzAwOworICAg ICAgICBlbHNlIGlmIChiYXVkIDw9IDYwMCkKKyAgICAgICAgICAgIGIgPSBUTkNfQlBTXzYwMDsK KyAgICAgICAgZWxzZSBpZiAoYmF1ZCA8PSAxMjAwKQorICAgICAgICAgICAgYiA9IFROQ19CUFNf MTIwMDsKKyAgICAgICAgZWxzZSBpZiAoYmF1ZCA8PSAyNDAwKQorICAgICAgICAgICAgYiA9IFRO Q19CUFNfMjQwMDsKKyAgICAgICAgZWxzZSBpZiAoYmF1ZCA8PSA0ODAwKQorICAgICAgICAgICAg YiA9IFROQ19CUFNfNDgwMDsKKyAgICAgICAgZWxzZSBpZiAoYmF1ZCA8PSA5NjAwKQorICAgICAg ICAgICAgYiA9IFROQ19CUFNfOTYwMDsKKyAgICAgICAgZWxzZSBpZiAoYmF1ZCA8PSAxNDQwMCkK KyAgICAgICAgICAgIGIgPSBUTkNfQlBTXzE0NDAwOworICAgICAgICBlbHNlIGlmIChiYXVkIDw9 IDE5MjAwKQorICAgICAgICAgICAgYiA9IFROQ19CUFNfMTkyMDA7CisgICAgICAgIGVsc2UgaWYg KGJhdWQgPD0gMjg4MDApCisgICAgICAgICAgICBiID0gVE5DX0JQU18yODgwMDsKKyAgICAgICAg ZWxzZSBpZiAoYmF1ZCA8PSAzODQwMCkKKyAgICAgICAgICAgIGIgPSBUTkNfQlBTXzM4NDAwOwor ICAgICAgICBlbHNlIGlmIChiYXVkIDw9IDU3NjAwKQorICAgICAgICAgICAgYiA9IFROQ19CUFNf NTc2MDA7CisgICAgICAgIGVsc2UgaWYgKGJhdWQgPD0gMTE1MjAwKQorICAgICAgICAgICAgYiA9 IFROQ19CUFNfMTE1MjAwOworICAgICAgICBlbHNlIGlmIChiYXVkIDw9IDIzMDQwMCkKKyAgICAg ICAgICAgIGIgPSBUTkNfQlBTXzIzMDQwMDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYiA9 IFROQ19CUFNfNDYwODAwOworICAgICAgICBzYl9vdXRbaSsrXSA9IGI7CisgICAgfSBlbHNlIHsK KyAgICAgICAgLyogUkZDIDIyMTcgKi8KKyAgICAgICAgc2Jfb3V0W2krK10gPSAoKGNoYXIgKikm bmV0X2JhdWQpWzBdOworICAgICAgICBzYl9vdXRbaSsrXSA9ICgoY2hhciAqKSZuZXRfYmF1ZClb MV07CisgICAgICAgIHNiX291dFtpKytdID0gKChjaGFyICopJm5ldF9iYXVkKVsyXTsKKyAgICAg ICAgc2Jfb3V0W2krK10gPSAoKGNoYXIgKikmbmV0X2JhdWQpWzNdOworICAgIH0KKyAgICBzYl9v dXRbaSsrXSA9IChDSEFSKSBJQUM7ICAgICAgICAgICAgICAgICAvKiBFbmQgb2YgU3VibmVnb3Rp YXRpb24gKi8KKyAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBTRTsgICAgICAgICAgICAgICAgICAv KiBtYXJrZWQgYnkgSUFDIFNFICovCisKKyNpZmRlZiBERUJVRworICAgIGlmIChkZWJsb2cgfHwg dG5fZGViIHx8IGRlYnNlcykgeworICAgICAgICBja21ha3htc2codG5fbXNnX291dCxUTl9NU0df TEVOLAorICAgICAgICAgICAgICAgICAgIlRFTE5FVCBTRU5UIFNCICIsVEVMT1BUKFRFTE9QVF9D T01QT1JUKSwKKyAgICAgICAgICAgICAgICAgICIgU0VULUJBVUQtUkFURSAiLCBja2x0b2EoYmF1 ZCksIiBJQUMgU0UiLCBOVUxMLAorICAgICAgICAgICAgICAgICAgTlVMTCxOVUxMLE5VTEwsTlVM TCxOVUxMLE5VTEwpOworICAgIH0KKyNlbmRpZiAvKiBERUJVRyAqLworCisjaWZkZWYgT1MyCisg ICAgUmVxdWVzdFRlbG5ldE11dGV4KCBTRU1fSU5ERUZJTklURV9XQUlUICk7CisjZW5kaWYKKyNp ZmRlZiBERUJVRworICAgIGRlYnVnKEYxMDAsdG5fbXNnX291dCwiIiwwKTsKKyAgICBpZiAodG5f ZGViIHx8IGRlYnNlcykgdG5fZGVidWcodG5fbXNnX291dCk7CisjZW5kaWYgLyogREVCVUcgKi8K KyAgICByYyA9ICh0dG9sKChDSEFSICopc2Jfb3V0LGkpIDwgMCk7ICAgICAgLyogU2VuZCBpdC4g Ki8KKyNpZmRlZiBPUzIKKyAgICBSZWxlYXNlVGVsbmV0TXV0ZXgoKTsKKyNlbmRpZgorICAgIGlm IChyYykKKyAgICAgICAgcmV0dXJuKC0xKTsKKworICAgIGlmICh0bmNfd2FpdCgoQ0hBUiAqKSJj b21wb3J0IHNldCBiYXVkIHJhdGUiLDApIDwgMCkgeworICAgICAgICB0bl9wdXNoKCk7CisgICAg ICAgIHJldHVybigtMSk7CisgICAgfQorICAgIGRlYnVnKEYxMTEsInRuY19zZXRfYmF1ZCIsImVu ZCIsdG5jX2Jwcyk7CisgICAgcmV0dXJuKHRuY19icHMpOworfQorCitpbnQKKyNpZmRlZiBDS19B TlNJQwordG5jX2dldF9iYXVkKHZvaWQpCisjZWxzZSAvKiBDS19BTlNJQyAqLwordG5jX2dldF9i YXVkKCkKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogdG5jX2dldF9iYXVkICovIHsKKyAgICAv KiBzZW5kIElBQyBTQiBDT00tUE9SVCBTRVQtQkFVRCA8dmFsdWUoNCk9MD4gSUFDIFNFICAqLwor ICAgIC8qIHdhaXQgZm9yIHJlc3BvbnNlICovCisgICAgaW50IGkgPSAwLCByYzsKKworICAgIGRl YnVnKEYxMTAsInRuY19nZXRfYmF1ZCIsImJlZ2luIiwwKTsKKworICAgIGlmICh0dG5ldCAhPSBO RVRfVENQQikgcmV0dXJuKDApOworICAgIGlmICh0dG5wcm90byAhPSBOUF9URUxORVQpIHJldHVy bigwKTsKKworICAgIGlmICghVEVMT1BUX01FKFRFTE9QVF9DT01QT1JUKSkgcmV0dXJuKDApOwor CisjaWZkZWYgQ0tfU1NMCisgICAgaWYgKFRFTE9QVF9TQihURUxPUFRfU1RBUlRfVExTKS5zdGFy dF90bHMubWVfZm9sbG93cykgeworICAgICAgICByZXR1cm4oMCk7CisgICAgfQorI2VuZGlmIC8q IENLX1NTTCAqLworCisgICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgSUFDOyAgICAgICAgICAgICAg ICAgLyogSSBBbSBhIENvbW1hbmQgKi8KKyAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBTQjsgICAg ICAgICAgICAgICAgICAvKiBTdWJuZWdvdGlhdGlvbiAqLworICAgIHNiX291dFtpKytdID0gVEVM T1BUX0NPTVBPUlQ7ICAgICAgICAgICAgIC8qIENvbVBvcnQgKi8KKyAgICBzYl9vdXRbaSsrXSA9 IFROQ19DMlNfU0VUX0JBVURSQVRFOyAgIC8qIFNldCBCYXVkIFJhdGUgKi8KKworICAgIGlmICh0 bmNfYnBzX2luZGV4ID4gMCkgeworICAgICAgICAvKiBBY2Nlc3MgU2VydmVyICovCisgICAgICAg IHNiX291dFtpKytdID0gMDsKKyAgICB9IGVsc2UgeworICAgICAgICAvKiBSRkMgMjIxNyAqLwor ICAgICAgICBzYl9vdXRbaSsrXSA9IDA7CisgICAgICAgIHNiX291dFtpKytdID0gMDsKKyAgICAg ICAgc2Jfb3V0W2krK10gPSAwOworICAgICAgICBzYl9vdXRbaSsrXSA9IDA7CisgICAgfQorICAg IHNiX291dFtpKytdID0gKENIQVIpIElBQzsgICAgICAgICAgICAgICAgIC8qIEVuZCBvZiBTdWJu ZWdvdGlhdGlvbiAqLworICAgIHNiX291dFtpKytdID0gKENIQVIpIFNFOyAgICAgICAgICAgICAg ICAgIC8qIG1hcmtlZCBieSBJQUMgU0UgKi8KKworI2lmZGVmIERFQlVHCisgICAgaWYgKGRlYmxv ZyB8fCB0bl9kZWIgfHwgZGVic2VzKSB7CisgICAgICAgIGNrbWFreG1zZyh0bl9tc2dfb3V0LFRO X01TR19MRU4sCisgICAgICAgICAgICAgICAgICAiVEVMTkVUIFNFTlQgU0IgIixURUxPUFQoVEVM T1BUX0NPTVBPUlQpLAorICAgICAgICAgICAgICAgICAgIiBTRVQtQkFVRC1SQVRFICIsIGNrbHRv YSgwKSwiIElBQyBTRSIsIE5VTEwsCisgICAgICAgICAgICAgICAgICBOVUxMLE5VTEwsTlVMTCxO VUxMLE5VTEwsTlVMTCk7CisgICAgfQorI2VuZGlmIC8qIERFQlVHICovCisjaWZkZWYgT1MyCisg ICAgUmVxdWVzdFRlbG5ldE11dGV4KCBTRU1fSU5ERUZJTklURV9XQUlUICk7CisjZW5kaWYKKyNp ZmRlZiBERUJVRworICAgIGRlYnVnKEYxMDAsdG5fbXNnX291dCwiIiwwKTsKKyAgICBpZiAodG5f ZGViIHx8IGRlYnNlcykgdG5fZGVidWcodG5fbXNnX291dCk7CisjZW5kaWYgLyogREVCVUcgKi8K KyAgICByYyA9ICh0dG9sKChDSEFSICopc2Jfb3V0LGkpIDwgMCk7ICAgICAgLyogU2VuZCBpdC4g Ki8KKyNpZmRlZiBPUzIKKyAgICBSZWxlYXNlVGVsbmV0TXV0ZXgoKTsKKyNlbmRpZgorICAgIGlm IChyYykKKyAgICAgICAgcmV0dXJuKC0xKTsKKworICAgIGlmICh0bmNfd2FpdCgoQ0hBUiAqKSJj b21wb3J0IGdldCBiYXVkIHJhdGUiLDApIDwgMCkgeworICAgICAgICB0bl9wdXNoKCk7CisgICAg ICAgIHJldHVybigtMSk7CisgICAgfQorICAgIGRlYnVnKEYxMTEsInRuY19nZXRfYmF1ZCIsImVu ZCIsdG5jX2Jwcyk7CisgICAgcmV0dXJuKHRuY19icHMpOworfQorCitpbnQKKyNpZmRlZiBDS19B TlNJQwordG5jX3NldF9kYXRhc2l6ZShpbnQgZGF0YXNpemUpCisjZWxzZSAvKiBDS19BTlNJQyAq LwordG5jX3NldF9kYXRhc2l6ZShkYXRhc2l6ZSkgaW50IGRhdGFzaXplOworI2VuZGlmIC8qIENL X0FOU0lDICovCisvKiB0bmNfc2V0X2RhdGFzaXplICovIHsKKyAgICAvKiBJQUMgU0IgQ09NLVBP UlQgU0VUX0RBVEFTSVpFIDx2YWx1ZSgxKT4gSUFDIFNFICovCisgICAgLyogVmFsaWQgPHZhbHVl PnMgYXJlIDUgdGhyb3VnaCA4ICovCisgICAgLyogV2FpdCBmb3IgcmVzcG9uc2UgKi8KKyAgICAv KiByZXR1cm4gbmV3IGhvc3QgdmFsdWUgKi8KKworICAgIGludCBpID0gMCwgcmM7CisKKyAgICBk ZWJ1ZyhGMTExLCJ0bmNfc2V0X2RhdGFzaXplIiwiYmVnaW4iLGRhdGFzaXplKTsKKworICAgIGlm ICh0dG5ldCAhPSBORVRfVENQQikgcmV0dXJuKDApOworICAgIGlmICh0dG5wcm90byAhPSBOUF9U RUxORVQpIHJldHVybigwKTsKKworICAgIGlmICghVEVMT1BUX01FKFRFTE9QVF9DT01QT1JUKSkg cmV0dXJuKDApOworCisjaWZkZWYgQ0tfU1NMCisgICAgaWYgKFRFTE9QVF9TQihURUxPUFRfU1RB UlRfVExTKS5zdGFydF90bHMubWVfZm9sbG93cykgeworICAgICAgICByZXR1cm4oMCk7CisgICAg fQorI2VuZGlmIC8qIENLX1NTTCAqLworCisgICAgaWYgKCAhKGRhdGFzaXplID49IDUgJiYgZGF0 YXNpemUgPD0gOCkgKQorICAgICAgICByZXR1cm4oMCk7CisKKyAgICBpZiAoIGRhdGFzaXplICAh PSAwICYmICBkYXRhc2l6ZSA9PSB0bmNfZGF0YXNpemUgKQorICAgICAgICByZXR1cm4odG5jX2Rh dGFzaXplKTsKKworICAgIHNiX291dFtpKytdID0gKENIQVIpIElBQzsgICAgICAgICAgICAgICAg IC8qIEkgQW0gYSBDb21tYW5kICovCisgICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgU0I7ICAgICAg ICAgICAgICAgICAgLyogU3VibmVnb3RpYXRpb24gKi8KKyAgICBzYl9vdXRbaSsrXSA9IFRFTE9Q VF9DT01QT1JUOyAgICAgICAgICAgICAvKiBDb21Qb3J0ICovCisgICAgc2Jfb3V0W2krK10gPSBU TkNfQzJTX1NFVF9EQVRBU0laRTsgICAvKiBTZXQgRGF0YVNpemUgKi8KKyAgICBzYl9vdXRbaSsr XSA9ICh1bnNpZ25lZCBjaGFyKShkYXRhc2l6ZSAmIDB4RkYpOworICAgIHNiX291dFtpKytdID0g KENIQVIpIElBQzsgICAgICAgICAgICAgICAgIC8qIEVuZCBvZiBTdWJuZWdvdGlhdGlvbiAqLwor ICAgIHNiX291dFtpKytdID0gKENIQVIpIFNFOyAgICAgICAgICAgICAgICAgIC8qIG1hcmtlZCBi eSBJQUMgU0UgKi8KKworI2lmZGVmIERFQlVHCisgICAgaWYgKGRlYmxvZyB8fCB0bl9kZWIgfHwg ZGVic2VzKSB7CisgICAgICAgIGNrbWFreG1zZyh0bl9tc2dfb3V0LFROX01TR19MRU4sCisgICAg ICAgICAgICAgICAgICAiVEVMTkVUIFNFTlQgU0IgIixURUxPUFQoVEVMT1BUX0NPTVBPUlQpLAor ICAgICAgICAgICAgICAgICAgIiBTRVQtREFUQVNJWkUgIiwgY2tpdG9hKGRhdGFzaXplKSwiIElB QyBTRSIsIE5VTEwsCisgICAgICAgICAgICAgICAgICBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEws TlVMTCk7CisgICAgfQorI2VuZGlmIC8qIERFQlVHICovCisjaWZkZWYgT1MyCisgICAgUmVxdWVz dFRlbG5ldE11dGV4KCBTRU1fSU5ERUZJTklURV9XQUlUICk7CisjZW5kaWYKKyNpZmRlZiBERUJV RworICAgIGRlYnVnKEYxMDAsdG5fbXNnX291dCwiIiwwKTsKKyAgICBpZiAodG5fZGViIHx8IGRl YnNlcykgdG5fZGVidWcodG5fbXNnX291dCk7CisjZW5kaWYgLyogREVCVUcgKi8KKyAgICByYyA9 ICh0dG9sKChDSEFSICopc2Jfb3V0LGkpIDwgMCk7ICAgICAgLyogU2VuZCBpdC4gKi8KKyNpZmRl ZiBPUzIKKyAgICBSZWxlYXNlVGVsbmV0TXV0ZXgoKTsKKyNlbmRpZgorICAgIGlmIChyYykKKyAg ICAgICAgcmV0dXJuKC0xKTsKKworICAgIGlmICh0bmNfd2FpdCgoQ0hBUiAqKSJjb21wb3J0IHNl dCBkYXRhc2l6ZSIsMCkgPCAwKSB7CisgICAgICAgIHRuX3B1c2goKTsKKyAgICAgICAgcmV0dXJu KC0xKTsKKyAgICB9CisgICAgZGVidWcoRjExMSwidG5jX3NldF9kYXRhc2l6ZSIsImVuZCIsdG5j X2RhdGFzaXplKTsKKyAgICByZXR1cm4odG5jX2RhdGFzaXplKTsKK30KKworaW50CisjaWZkZWYg Q0tfQU5TSUMKK3RuY19nZXRfZGF0YXNpemUodm9pZCkKKyNlbHNlIC8qIENLX0FOU0lDICovCit0 bmNfZ2V0X2RhdGFzaXplKCkKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogdG5jX2dldF9kYXRh c2l6ZSAqLyB7CisgICAgLyogSUFDIFNCIENPTS1QT1JUIFNFVF9EQVRBU0laRSA8dmFsdWUoMSk9 MD4gSUFDIFNFICovCisgICAgLyogV2FpdCBmb3IgcmVzcG9uc2UgKi8KKyAgICBpbnQgaSA9IDAs IHJjOworCisgICAgZGVidWcoRjExMCwidG5jX2dldF9kYXRhc2l6ZSIsImJlZ2luIiwwKTsKKwor ICAgIGlmICh0dG5ldCAhPSBORVRfVENQQikgcmV0dXJuKDApOworICAgIGlmICh0dG5wcm90byAh PSBOUF9URUxORVQpIHJldHVybigwKTsKKworICAgIGlmICghVEVMT1BUX01FKFRFTE9QVF9DT01Q T1JUKSkgcmV0dXJuKDApOworCisjaWZkZWYgQ0tfU1NMCisgICAgaWYgKFRFTE9QVF9TQihURUxP UFRfU1RBUlRfVExTKS5zdGFydF90bHMubWVfZm9sbG93cykgeworICAgICAgICByZXR1cm4oMCk7 CisgICAgfQorI2VuZGlmIC8qIENLX1NTTCAqLworCisgICAgc2Jfb3V0W2krK10gPSAoQ0hBUikg SUFDOyAgICAgICAgICAgICAgICAgLyogSSBBbSBhIENvbW1hbmQgKi8KKyAgICBzYl9vdXRbaSsr XSA9IChDSEFSKSBTQjsgICAgICAgICAgICAgICAgICAvKiBTdWJuZWdvdGlhdGlvbiAqLworICAg IHNiX291dFtpKytdID0gVEVMT1BUX0NPTVBPUlQ7ICAgICAgICAgICAgIC8qIENvbVBvcnQgKi8K KyAgICBzYl9vdXRbaSsrXSA9IFROQ19DMlNfU0VUX0RBVEFTSVpFOyAgIC8qIFNldCBEYXRhU2l6 ZSAqLworICAgIHNiX291dFtpKytdID0gMDsKKyAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBJQUM7 ICAgICAgICAgICAgICAgICAvKiBFbmQgb2YgU3VibmVnb3RpYXRpb24gKi8KKyAgICBzYl9vdXRb aSsrXSA9IChDSEFSKSBTRTsgICAgICAgICAgICAgICAgICAvKiBtYXJrZWQgYnkgSUFDIFNFICov CisKKyNpZmRlZiBERUJVRworICAgIGlmIChkZWJsb2cgfHwgdG5fZGViIHx8IGRlYnNlcykgewor ICAgICAgICBja21ha3htc2codG5fbXNnX291dCxUTl9NU0dfTEVOLAorICAgICAgICAgICAgICAg ICAgIlRFTE5FVCBTRU5UIFNCICIsVEVMT1BUKFRFTE9QVF9DT01QT1JUKSwKKyAgICAgICAgICAg ICAgICAgICIgU0VULURBVEFTSVpFICIsIGNrbHRvYSgwKSwiIElBQyBTRSIsIE5VTEwsCisgICAg ICAgICAgICAgICAgICBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCk7CisgICAgfQorI2Vu ZGlmIC8qIERFQlVHICovCisjaWZkZWYgT1MyCisgICAgUmVxdWVzdFRlbG5ldE11dGV4KCBTRU1f SU5ERUZJTklURV9XQUlUICk7CisjZW5kaWYKKyNpZmRlZiBERUJVRworICAgIGRlYnVnKEYxMDAs dG5fbXNnX291dCwiIiwwKTsKKyAgICBpZiAodG5fZGViIHx8IGRlYnNlcykgdG5fZGVidWcodG5f bXNnX291dCk7CisjZW5kaWYgLyogREVCVUcgKi8KKyAgICByYyA9ICh0dG9sKChDSEFSICopc2Jf b3V0LGkpIDwgMCk7ICAgICAgLyogU2VuZCBpdC4gKi8KKyNpZmRlZiBPUzIKKyAgICBSZWxlYXNl VGVsbmV0TXV0ZXgoKTsKKyNlbmRpZgorICAgIGlmIChyYykKKyAgICAgICAgcmV0dXJuKC0xKTsK KworICAgIGlmICh0bmNfd2FpdCgoQ0hBUiAqKSJjb21wb3J0IGdldCBkYXRhc2l6ZSIsMCkgPCAw KSB7CisgICAgICAgIHRuX3B1c2goKTsKKyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9CisgICAg ZGVidWcoRjExMSwidG5jX2dldF9kYXRhc2l6ZSIsImVuZCIsdG5jX2RhdGFzaXplKTsKKyAgICBy ZXR1cm4odG5jX2RhdGFzaXplKTsKK30KKworaW50CisjaWZkZWYgQ0tfQU5TSUMKK3RuY19zZXRf cGFyaXR5KGludCBwYXJpdHkpCisjZWxzZSAvKiBDS19BTlNJQyAqLwordG5jX3NldF9wYXJpdHko cGFyaXR5KSBpbnQgcGFyaXR5OworI2VuZGlmIC8qIENLX0FOU0lDICovCisvKiB0bmNfc2V0X3Bh cml0eSAqLyB7CisgICAgLyogSUFDIFNCIENPTS1QT1JUIFNFVF9QQVJJVFkgPHZhbHVlKDEpPiBJ QUMgU0UgKi8KKyAgICAvKiAgICAgICAgVmFsdWUgICAgIFBhcml0eQorICAgICAqICAgICAgICAg IDEgICAgICAgTm9uZQorICAgICAqICAgICAgICAgIDIgICAgICAgT2RkCisgICAgICogICAgICAg ICAgMyAgICAgICBFdmVuCisgICAgICogICAgICAgICAgNCAgICAgICBNYXJrCisgICAgICogICAg ICAgICAgNSAgICAgICBTcGFjZQorICAgICAqLworICAgIC8qIFdhaXQgZm9yIHJlc3BvbnNlLiAg UmV0dXJuIG5ldyBob3N0IHZhbHVlLiAqLworICAgIGludCBpID0gMCwgcmM7CisKKyAgICBkZWJ1 ZyhGMTEwLCJ0bmNfc2V0X3Bhcml0eSIsImJlZ2luIixwYXJpdHkpOworCisgICAgaWYgKHR0bmV0 ICE9IE5FVF9UQ1BCKSByZXR1cm4oMCk7CisgICAgaWYgKHR0bnByb3RvICE9IE5QX1RFTE5FVCkg cmV0dXJuKDApOworCisgICAgaWYgKCFURUxPUFRfTUUoVEVMT1BUX0NPTVBPUlQpKSByZXR1cm4o MCk7CisKKyNpZmRlZiBDS19TU0wKKyAgICBpZiAoVEVMT1BUX1NCKFRFTE9QVF9TVEFSVF9UTFMp LnN0YXJ0X3Rscy5tZV9mb2xsb3dzKSB7CisgICAgICAgIHJldHVybigwKTsKKyAgICB9CisjZW5k aWYgLyogQ0tfU1NMICovCisKKyAgICBpZiAoICEocGFyaXR5ID49IDEgJiYgcGFyaXR5IDw9IDUp ICkKKyAgICAgICAgcmV0dXJuKDApOworCisgICAgaWYgKCBwYXJpdHkgIT0gMCAmJiBwYXJpdHkg PT0gdG5jX3Bhcml0eSApCisgICAgICAgIHJldHVybih0bmNfcGFyaXR5KTsKKworICAgIHNiX291 dFtpKytdID0gKENIQVIpIElBQzsgICAgICAgICAgICAgICAgIC8qIEkgQW0gYSBDb21tYW5kICov CisgICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgU0I7ICAgICAgICAgICAgICAgICAgLyogU3VibmVn b3RpYXRpb24gKi8KKyAgICBzYl9vdXRbaSsrXSA9IFRFTE9QVF9DT01QT1JUOyAgICAgICAgICAg ICAvKiBDb21Qb3J0ICovCisgICAgc2Jfb3V0W2krK10gPSBUTkNfQzJTX1NFVF9QQVJJVFk7ICAg ICAvKiBTZXQgUGFyaXR5ICovCisgICAgc2Jfb3V0W2krK10gPSAodW5zaWduZWQgY2hhcikocGFy aXR5ICYgMHhGRik7CisgICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgSUFDOyAgICAgICAgICAgICAg ICAgLyogRW5kIG9mIFN1Ym5lZ290aWF0aW9uICovCisgICAgc2Jfb3V0W2krK10gPSAoQ0hBUikg U0U7ICAgICAgICAgICAgICAgICAgLyogbWFya2VkIGJ5IElBQyBTRSAqLworCisjaWZkZWYgREVC VUcKKyAgICBpZiAoZGVibG9nIHx8IHRuX2RlYiB8fCBkZWJzZXMpIHsKKyAgICAgICAgY2ttYWt4 bXNnKHRuX21zZ19vdXQsVE5fTVNHX0xFTiwKKyAgICAgICAgICAgICAgICAgICJURUxORVQgU0VO VCBTQiAiLFRFTE9QVChURUxPUFRfQ09NUE9SVCksCisgICAgICAgICAgICAgICAgICAiIFNFVC1Q QVJJVFkgIiwgY2tpdG9hKHBhcml0eSksIiBJQUMgU0UiLCBOVUxMLAorICAgICAgICAgICAgICAg ICAgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwpOworICAgIH0KKyNlbmRpZiAvKiBERUJV RyAqLworI2lmZGVmIE9TMgorICAgIFJlcXVlc3RUZWxuZXRNdXRleCggU0VNX0lOREVGSU5JVEVf V0FJVCApOworI2VuZGlmCisjaWZkZWYgREVCVUcKKyAgICBkZWJ1ZyhGMTAwLHRuX21zZ19vdXQs IiIsMCk7CisgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpIHRuX2RlYnVnKHRuX21zZ19vdXQpOwor I2VuZGlmIC8qIERFQlVHICovCisgICAgcmMgPSAodHRvbCgoQ0hBUiAqKXNiX291dCxpKSA8IDAp OyAgICAgIC8qIFNlbmQgaXQuICovCisjaWZkZWYgT1MyCisgICAgUmVsZWFzZVRlbG5ldE11dGV4 KCk7CisjZW5kaWYKKyAgICBpZiAocmMpCisgICAgICAgIHJldHVybigtMSk7CisKKyAgICBpZiAo dG5jX3dhaXQoKENIQVIgKikiY29tcG9ydCBzZXQgcGFyaXR5IiwwKSA8IDApIHsKKyAgICAgICAg dG5fcHVzaCgpOworICAgICAgICByZXR1cm4oLTEpOworICAgIH0KKyAgICBkZWJ1ZyhGMTExLCJ0 bmNfc2V0X3Bhcml0eSIsImVuZCIsdG5jX3Bhcml0eSk7CisgICAgcmV0dXJuKHRuY19wYXJpdHkp OworfQorCitpbnQKKyNpZmRlZiBDS19BTlNJQwordG5jX2dldF9wYXJpdHkodm9pZCkKKyNlbHNl IC8qIENLX0FOU0lDICovCit0bmNfZ2V0X3Bhcml0eSgpCisjZW5kaWYgLyogQ0tfQU5TSUMgKi8K Ky8qIHRuY19nZXRfcGFyaXR5ICovIHsKKyAgICAvKiBJQUMgU0IgQ09NLVBPUlQgU0VUX1BBUklU WSA8dmFsdWUoMSk9MD4gSUFDIFNFICovCisgICAgLyogd2FpdCBmb3IgcmVzcG9uc2UgKi8KKyAg ICBpbnQgaSA9IDAsIHJjOworCisgICAgZGVidWcoRjExMCwidG5jX2dldF9wYXJpdHkiLCJiZWdp biIsMCk7CisgICAgaWYgKHR0bmV0ICE9IE5FVF9UQ1BCKSByZXR1cm4oMCk7CisgICAgaWYgKHR0 bnByb3RvICE9IE5QX1RFTE5FVCkgcmV0dXJuKDApOworCisgICAgaWYgKCFURUxPUFRfTUUoVEVM T1BUX0NPTVBPUlQpKSByZXR1cm4oMCk7CisKKyNpZmRlZiBDS19TU0wKKyAgICBpZiAoVEVMT1BU X1NCKFRFTE9QVF9TVEFSVF9UTFMpLnN0YXJ0X3Rscy5tZV9mb2xsb3dzKSB7CisgICAgICAgIHJl dHVybigwKTsKKyAgICB9CisjZW5kaWYgLyogQ0tfU1NMICovCisKKyAgICBzYl9vdXRbaSsrXSA9 IChDSEFSKSBJQUM7ICAgICAgICAgICAgICAgICAvKiBJIEFtIGEgQ29tbWFuZCAqLworICAgIHNi X291dFtpKytdID0gKENIQVIpIFNCOyAgICAgICAgICAgICAgICAgIC8qIFN1Ym5lZ290aWF0aW9u ICovCisgICAgc2Jfb3V0W2krK10gPSBURUxPUFRfQ09NUE9SVDsgICAgICAgICAgICAgLyogQ29t UG9ydCAqLworICAgIHNiX291dFtpKytdID0gVE5DX0MyU19TRVRfUEFSSVRZOyAgICAgLyogU2V0 IFBhcml0eSAqLworICAgIHNiX291dFtpKytdID0gMDsKKyAgICBzYl9vdXRbaSsrXSA9IChDSEFS KSBJQUM7ICAgICAgICAgICAgICAgICAvKiBFbmQgb2YgU3VibmVnb3RpYXRpb24gKi8KKyAgICBz Yl9vdXRbaSsrXSA9IChDSEFSKSBTRTsgICAgICAgICAgICAgICAgICAvKiBtYXJrZWQgYnkgSUFD IFNFICovCisKKyNpZmRlZiBERUJVRworICAgIGlmIChkZWJsb2cgfHwgdG5fZGViIHx8IGRlYnNl cykgeworICAgICAgICBja21ha3htc2codG5fbXNnX291dCxUTl9NU0dfTEVOLAorICAgICAgICAg ICAgICAgICAgIlRFTE5FVCBTRU5UIFNCICIsVEVMT1BUKFRFTE9QVF9DT01QT1JUKSwKKyAgICAg ICAgICAgICAgICAgICIgU0VULVBBUklUWSAiLCBja2l0b2EoMCksIiBJQUMgU0UiLCBOVUxMLAor ICAgICAgICAgICAgICAgICAgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwpOworICAgIH0K KyNlbmRpZiAvKiBERUJVRyAqLworI2lmZGVmIE9TMgorICAgIFJlcXVlc3RUZWxuZXRNdXRleCgg U0VNX0lOREVGSU5JVEVfV0FJVCApOworI2VuZGlmCisjaWZkZWYgREVCVUcKKyAgICBkZWJ1ZyhG MTAwLHRuX21zZ19vdXQsIiIsMCk7CisgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpIHRuX2RlYnVn KHRuX21zZ19vdXQpOworI2VuZGlmIC8qIERFQlVHICovCisgICAgcmMgPSAodHRvbCgoQ0hBUiAq KXNiX291dCxpKSA8IDApOyAgICAgIC8qIFNlbmQgaXQuICovCisjaWZkZWYgT1MyCisgICAgUmVs ZWFzZVRlbG5ldE11dGV4KCk7CisjZW5kaWYKKyAgICBpZiAocmMpCisgICAgICAgIHJldHVybigt MSk7CisKKyAgICBpZiAodG5jX3dhaXQoKENIQVIgKikiY29tcG9ydCBnZXQgcGFyaXR5IiwwKSA8 IDApIHsKKyAgICAgICAgdG5fcHVzaCgpOworICAgICAgICByZXR1cm4oLTEpOworICAgIH0KKyAg ICBkZWJ1ZyhGMTExLCJ0bmNfZ2V0X3Bhcml0eSIsImVuZCIsdG5jX3Bhcml0eSk7CisgICAgcmV0 dXJuKHRuY19wYXJpdHkpOworfQorCitpbnQKKyNpZmRlZiBDS19BTlNJQwordG5jX3NldF9zdG9w c2l6ZShpbnQgc3RvcHNpemUpCisjZWxzZSAvKiBDS19BTlNJQyAqLwordG5jX3NldF9zdG9wc2l6 ZShzdG9wc2l6ZSkgaW50IHN0b3BzaXplOworI2VuZGlmIC8qIENLX0FOU0lDICovCisvKiB0bmNf c2V0X3N0b3BzaXplICovIHsKKyAgICAvKiBJQUMgU0IgQ09NLVBPUlQgU0VUX1NUT1BTSVpFIDx2 YWx1ZSgxKT4gSUFDIFNFICovCisgICAgLyogICAgICAgIFZhbHVlICAgICBTdG9wIEJpdCBTaXpl CisgICAgICogICAgICAgICAgMSAgICAgICAxCisgICAgICogICAgICAgICAgMiAgICAgICAyCisg ICAgICogICAgICAgICAgMyAgICAgICAxLjUKKyAgICAgKi8KKyAgICAvKiBXYWl0IGZvciByZXNw b25zZS4gIFJldHVybiBuZXcgaG9zdCB2YWx1ZS4gKi8KKyAgICBpbnQgaSA9IDAsIHJjOworCisg ICAgZGVidWcoRjExMSwidG5jX3NldF9zdG9wc2l6ZSIsImJlZ2luIixzdG9wc2l6ZSk7CisgICAg aWYgKHR0bmV0ICE9IE5FVF9UQ1BCKSByZXR1cm4oMCk7CisgICAgaWYgKHR0bnByb3RvICE9IE5Q X1RFTE5FVCkgcmV0dXJuKDApOworCisgICAgaWYgKCFURUxPUFRfTUUoVEVMT1BUX0NPTVBPUlQp KSByZXR1cm4oMCk7CisKKyNpZmRlZiBDS19TU0wKKyAgICBpZiAoVEVMT1BUX1NCKFRFTE9QVF9T VEFSVF9UTFMpLnN0YXJ0X3Rscy5tZV9mb2xsb3dzKSB7CisgICAgICAgIHJldHVybigwKTsKKyAg ICB9CisjZW5kaWYgLyogQ0tfU1NMICovCisKKyAgICBpZiAoIShzdG9wc2l6ZSA+PSAxICYmIHN0 b3BzaXplIDw9IDMpICkKKyAgICAgIHJldHVybigwKTsKKworICAgIGlmICggc3RvcHNpemUgIT0g MCAmJiBzdG9wc2l6ZSA9PSB0bmNfc3RvcGJpdCApCisgICAgICAgIHJldHVybih0bmNfc3RvcGJp dCk7CisKKyAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBJQUM7ICAgICAgICAgICAgICAgICAvKiBJ IEFtIGEgQ29tbWFuZCAqLworICAgIHNiX291dFtpKytdID0gKENIQVIpIFNCOyAgICAgICAgICAg ICAgICAgIC8qIFN1Ym5lZ290aWF0aW9uICovCisgICAgc2Jfb3V0W2krK10gPSBURUxPUFRfQ09N UE9SVDsgICAgICAgICAgICAgLyogQ29tUG9ydCAqLworICAgIHNiX291dFtpKytdID0gVE5DX0My U19TRVRfU1RPUFNJWkU7ICAgLyogU2V0IFN0b3AgQml0cyAqLworICAgIHNiX291dFtpKytdID0g KHVuc2lnbmVkIGNoYXIpKHN0b3BzaXplICYgMHhGRik7CisgICAgc2Jfb3V0W2krK10gPSAoQ0hB UikgSUFDOyAgICAgICAgICAgICAgICAgLyogRW5kIG9mIFN1Ym5lZ290aWF0aW9uICovCisgICAg c2Jfb3V0W2krK10gPSAoQ0hBUikgU0U7ICAgICAgICAgICAgICAgICAgLyogbWFya2VkIGJ5IElB QyBTRSAqLworCisjaWZkZWYgREVCVUcKKyAgICBpZiAoZGVibG9nIHx8IHRuX2RlYiB8fCBkZWJz ZXMpIHsKKyAgICAgICAgY2ttYWt4bXNnKHRuX21zZ19vdXQsVE5fTVNHX0xFTiwKKyAgICAgICAg ICAgICAgICAgICJURUxORVQgU0VOVCBTQiAiLFRFTE9QVChURUxPUFRfQ09NUE9SVCksCisgICAg ICAgICAgICAgICAgICAiIFNFVC1TVE9QU0laRSAiLCBja2l0b2Eoc3RvcHNpemUpLCIgSUFDIFNF IiwgTlVMTCwKKyAgICAgICAgICAgICAgICAgIE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxM KTsKKyAgICB9CisjZW5kaWYgLyogREVCVUcgKi8KKyNpZmRlZiBPUzIKKyAgICBSZXF1ZXN0VGVs bmV0TXV0ZXgoIFNFTV9JTkRFRklOSVRFX1dBSVQgKTsKKyNlbmRpZgorI2lmZGVmIERFQlVHCisg ICAgZGVidWcoRjEwMCx0bl9tc2dfb3V0LCIiLDApOworICAgIGlmICh0bl9kZWIgfHwgZGVic2Vz KSB0bl9kZWJ1Zyh0bl9tc2dfb3V0KTsKKyNlbmRpZiAvKiBERUJVRyAqLworICAgIHJjID0gKHR0 b2woKENIQVIgKilzYl9vdXQsaSkgPCAwKTsgICAgICAvKiBTZW5kIGl0LiAqLworI2lmZGVmIE9T MgorICAgIFJlbGVhc2VUZWxuZXRNdXRleCgpOworI2VuZGlmCisgICAgaWYgKHJjKQorICAgICAg ICByZXR1cm4oLTEpOworCisgICAgaWYgKHRuY193YWl0KChDSEFSICopImNvbXBvcnQgc2V0IHN0 b3BzaXplIiwwKSA8IDApIHsKKyAgICAgICAgdG5fcHVzaCgpOworICAgICAgICByZXR1cm4oLTEp OworICAgIH0KKyAgICBkZWJ1ZyhGMTExLCJ0bmNfc2V0X3N0b3BzaXplIiwiZW5kIix0bmNfc3Rv cGJpdCk7CisgICAgcmV0dXJuKHRuY19zdG9wYml0KTsKK30KKworaW50CisjaWZkZWYgQ0tfQU5T SUMKK3RuY19nZXRfc3RvcHNpemUodm9pZCkKKyNlbHNlIC8qIENLX0FOU0lDICovCit0bmNfZ2V0 X3N0b3BzaXplKCkKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogdG5jX2dldF9zdG9wc2l6ZSAq LyB7CisgICAgLyogSUFDIFNCIENPTS1QT1JUIFNFVF9TVE9QU0laRSA8dmFsdWUoMSk9MD4gSUFD IFNFICovCisgICAgLyogV2FpdCBmb3IgcmVzcG9uc2UgKi8KKyAgICBpbnQgaSA9IDAsIHJjOwor CisgICAgZGVidWcoRjExMCwidG5jX2dldF9zdG9wc2l6ZSIsImJlZ2luIiwwKTsKKyAgICBpZiAo dHRuZXQgIT0gTkVUX1RDUEIpIHJldHVybigwKTsKKyAgICBpZiAodHRucHJvdG8gIT0gTlBfVEVM TkVUKSByZXR1cm4oMCk7CisKKyAgICBpZiAoIVRFTE9QVF9NRShURUxPUFRfQ09NUE9SVCkpIHJl dHVybigwKTsKKworI2lmZGVmIENLX1NTTAorICAgIGlmIChURUxPUFRfU0IoVEVMT1BUX1NUQVJU X1RMUykuc3RhcnRfdGxzLm1lX2ZvbGxvd3MpIHsKKyAgICAgICAgcmV0dXJuKDApOworICAgIH0K KyNlbmRpZiAvKiBDS19TU0wgKi8KKworICAgIHNiX291dFtpKytdID0gKENIQVIpIElBQzsgICAg ICAgICAgICAgICAgIC8qIEkgQW0gYSBDb21tYW5kICovCisgICAgc2Jfb3V0W2krK10gPSAoQ0hB UikgU0I7ICAgICAgICAgICAgICAgICAgLyogU3VibmVnb3RpYXRpb24gKi8KKyAgICBzYl9vdXRb aSsrXSA9IFRFTE9QVF9DT01QT1JUOyAgICAgICAgICAgICAvKiBDb21Qb3J0ICovCisgICAgc2Jf b3V0W2krK10gPSBUTkNfQzJTX1NFVF9TVE9QU0laRTsgICAvKiBTZXQgU3RvcCBCaXRzICovCisg ICAgc2Jfb3V0W2krK10gPSAwOworICAgIHNiX291dFtpKytdID0gKENIQVIpIElBQzsgICAgICAg ICAgICAgICAgIC8qIEVuZCBvZiBTdWJuZWdvdGlhdGlvbiAqLworICAgIHNiX291dFtpKytdID0g KENIQVIpIFNFOyAgICAgICAgICAgICAgICAgIC8qIG1hcmtlZCBieSBJQUMgU0UgKi8KKworI2lm ZGVmIERFQlVHCisgICAgaWYgKGRlYmxvZyB8fCB0bl9kZWIgfHwgZGVic2VzKSB7CisgICAgICAg IGNrbWFreG1zZyh0bl9tc2dfb3V0LFROX01TR19MRU4sCisgICAgICAgICAgICAgICAgICAiVEVM TkVUIFNFTlQgU0IgIixURUxPUFQoVEVMT1BUX0NPTVBPUlQpLAorICAgICAgICAgICAgICAgICAg IiBTRVQtU1RPUFNJWkUgIiwgY2tpdG9hKDApLCIgSUFDIFNFIiwgTlVMTCwKKyAgICAgICAgICAg ICAgICAgIE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMKTsKKyAgICB9CisjZW5kaWYgLyog REVCVUcgKi8KKyNpZmRlZiBPUzIKKyAgICBSZXF1ZXN0VGVsbmV0TXV0ZXgoIFNFTV9JTkRFRklO SVRFX1dBSVQgKTsKKyNlbmRpZgorI2lmZGVmIERFQlVHCisgICAgZGVidWcoRjEwMCx0bl9tc2df b3V0LCIiLDApOworICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKSB0bl9kZWJ1Zyh0bl9tc2dfb3V0 KTsKKyNlbmRpZiAvKiBERUJVRyAqLworICAgIHJjID0gKHR0b2woKENIQVIgKilzYl9vdXQsaSkg PCAwKTsgICAgICAvKiBTZW5kIGl0LiAqLworI2lmZGVmIE9TMgorICAgIFJlbGVhc2VUZWxuZXRN dXRleCgpOworI2VuZGlmCisgICAgaWYgKHJjKQorICAgICAgICByZXR1cm4oLTEpOworCisgICAg aWYgKHRuY193YWl0KChDSEFSICopImNvbXBvcnQgc2V0IHN0b3BzaXplIiwwKSA8IDApIHsKKyAg ICAgICAgdG5fcHVzaCgpOworICAgICAgICByZXR1cm4oLTEpOworICAgIH0KKyAgICBkZWJ1ZyhG MTExLCJ0bmNfZ2V0X3N0b3BzaXplIiwiZW5kIix0bmNfc3RvcGJpdCk7CisgICAgcmV0dXJuKHRu Y19zdG9wYml0KTsKK30KKworaW50CisjaWZkZWYgQ0tfQU5TSUMKK3RuY19zZXRfb2Zsb3coaW50 IGNvbnRyb2wpCisjZWxzZSAvKiBDS19BTlNJQyAqLwordG5jX3NldF9vZmxvdyhjb250cm9sKSBp bnQgY29udHJvbDsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogdG5jX3NldF9vZmxvdyAqLyB7 CisgICAgLyogSUFDIFNCIENPTV9QT1JUIFNFVF9DT05UUk9MIDx2YWx1ZSgxKT4gSUFDIFNFICov CisgICAgLyogICAgICAgIFZhbHVlICAgICBGbG93IENvbnRyb2wKKyAgICAgKiAgICAgICAgICAx ICAgICAgIE5vIEZsb3cgQ29udHJvbAorICAgICAqICAgICAgICAgIDIgICAgICAgWG9uL1hvZmYK KyAgICAgKiAgICAgICAgICAzICAgICAgIFJ0cy9DdHMKKyAgICAgKiAgICAgICAgIDE3ICAgICAg IERDRAorICAgICAqICAgICAgICAgMTkgICAgICAgRFNSCisgICAgICovCisgICAgLyogd2FpdCBm b3IgcmVzcG9uc2UsIHJldHVybiBuZXcgaG9zdCB2YWx1ZS4gKi8KKyAgICBpbnQgaSA9IDAsIHJj OworCisgICAgZGVidWcoRjExMSwidG5jX3NldF9vZmxvdyIsImJlZ2luIixjb250cm9sKTsKKyAg ICBpZiAodHRuZXQgIT0gTkVUX1RDUEIpIHJldHVybigwKTsKKyAgICBpZiAodHRucHJvdG8gIT0g TlBfVEVMTkVUKSByZXR1cm4oMCk7CisKKyAgICBpZiAoIVRFTE9QVF9NRShURUxPUFRfQ09NUE9S VCkpIHJldHVybigwKTsKKworI2lmZGVmIENLX1NTTAorICAgIGlmIChURUxPUFRfU0IoVEVMT1BU X1NUQVJUX1RMUykuc3RhcnRfdGxzLm1lX2ZvbGxvd3MpIHsKKyAgICAgICAgcmV0dXJuKDApOwor ICAgIH0KKyNlbmRpZiAvKiBDS19TU0wgKi8KKworICAgIGlmIChjb250cm9sICE9IDEgJiYgY29u dHJvbCAhPSAyICYmIGNvbnRyb2wgIT0gMyAmJgorICAgICAgICBjb250cm9sICE9IDE3ICYmIGNv bnRyb2wgIT0gMTkpCisgICAgICByZXR1cm4oMCk7CisKKyAgICBpZiAoIGNvbnRyb2wgIT0gMCAm JiBjb250cm9sID09IHRuY19vZmxvdyApCisgICAgICAgIHJldHVybih0bmNfb2Zsb3cpOworCisg ICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgSUFDOyAgICAgICAgICAgICAgICAgLyogSSBBbSBhIENv bW1hbmQgKi8KKyAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBTQjsgICAgICAgICAgICAgICAgICAv KiBTdWJuZWdvdGlhdGlvbiAqLworICAgIHNiX291dFtpKytdID0gVEVMT1BUX0NPTVBPUlQ7ICAg ICAgICAgICAgIC8qIENvbVBvcnQgKi8KKyAgICBzYl9vdXRbaSsrXSA9IFROQ19DMlNfU0VUX0NP TlRST0w7ICAgIC8qIFNldCBDb250cm9sICovCisgICAgc2Jfb3V0W2krK10gPSAodW5zaWduZWQg Y2hhcikoY29udHJvbCAmIDB4RkYpOworICAgIHNiX291dFtpKytdID0gKENIQVIpIElBQzsgICAg ICAgICAgICAgICAgIC8qIEVuZCBvZiBTdWJuZWdvdGlhdGlvbiAqLworICAgIHNiX291dFtpKytd ID0gKENIQVIpIFNFOyAgICAgICAgICAgICAgICAgIC8qIG1hcmtlZCBieSBJQUMgU0UgKi8KKwor I2lmZGVmIERFQlVHCisgICAgaWYgKGRlYmxvZyB8fCB0bl9kZWIgfHwgZGVic2VzKSB7CisgICAg ICAgIGNrbWFreG1zZyh0bl9tc2dfb3V0LFROX01TR19MRU4sCisgICAgICAgICAgICAgICAgICAi VEVMTkVUIFNFTlQgU0IgIixURUxPUFQoVEVMT1BUX0NPTVBPUlQpLAorICAgICAgICAgICAgICAg ICAgIiBTRVQtQ09OVFJPTCAiLCBja2l0b2EoY29udHJvbCksIiBJQUMgU0UiLCBOVUxMLAorICAg ICAgICAgICAgICAgICAgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwpOworICAgIH0KKyNl bmRpZiAvKiBERUJVRyAqLworI2lmZGVmIE9TMgorICAgIFJlcXVlc3RUZWxuZXRNdXRleCggU0VN X0lOREVGSU5JVEVfV0FJVCApOworI2VuZGlmCisjaWZkZWYgREVCVUcKKyAgICBkZWJ1ZyhGMTAw LHRuX21zZ19vdXQsIiIsMCk7CisgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpIHRuX2RlYnVnKHRu X21zZ19vdXQpOworI2VuZGlmIC8qIERFQlVHICovCisgICAgcmMgPSAodHRvbCgoQ0hBUiAqKXNi X291dCxpKSA8IDApOyAgICAgIC8qIFNlbmQgaXQuICovCisjaWZkZWYgT1MyCisgICAgUmVsZWFz ZVRlbG5ldE11dGV4KCk7CisjZW5kaWYKKyAgICBpZiAocmMpCisgICAgICAgIHJldHVybigtMSk7 CisKKyAgICBpZiAodG5jX3dhaXQoKENIQVIgKikiY29tcG9ydCBzZXQgb3V0Ym91bmQgZmxvdyBj b250cm9sIiwwKSA8IDApIHsKKyAgICAgICAgdG5fcHVzaCgpOworICAgICAgICByZXR1cm4oLTEp OworICAgIH0KKyAgICBkZWJ1ZyhGMTExLCJ0bmNfc2V0X29mbG93IiwiZW5kIix0bmNfb2Zsb3cp OworICAgIHJldHVybih0bmNfb2Zsb3cpOworfQorCitpbnQKKyNpZmRlZiBDS19BTlNJQwordG5j X2dldF9vZmxvdyh2b2lkKQorI2Vsc2UgLyogQ0tfQU5TSUMgKi8KK3RuY19nZXRfb2Zsb3coKQor I2VuZGlmIC8qIENLX0FOU0lDICovCisvKiB0bmNfZ2V0X29mbG93ICovIHsKKyAgICAvKiBJQUMg U0IgQ09NX1BPUlQgU0VUX0NPTlRST0wgPHZhbHVlKDEpPTA+IElBQyBTRSAqLworICAgIC8qIHdh aXQgZm9yIHJlc3BvbnNlICovCisgICAgaW50IGkgPSAwLCByYzsKKworICAgIGRlYnVnKEYxMTAs InRuY19nZXRfb2Zsb3ciLCJiZWdpbiIsMCk7CisgICAgaWYgKHR0bmV0ICE9IE5FVF9UQ1BCKSBy ZXR1cm4oMCk7CisgICAgaWYgKHR0bnByb3RvICE9IE5QX1RFTE5FVCkgcmV0dXJuKDApOworCisg ICAgaWYgKCFURUxPUFRfTUUoVEVMT1BUX0NPTVBPUlQpKSByZXR1cm4oMCk7CisKKyNpZmRlZiBD S19TU0wKKyAgICBpZiAoVEVMT1BUX1NCKFRFTE9QVF9TVEFSVF9UTFMpLnN0YXJ0X3Rscy5tZV9m b2xsb3dzKSB7CisgICAgICAgIHJldHVybigwKTsKKyAgICB9CisjZW5kaWYgLyogQ0tfU1NMICov CisKKyAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBJQUM7ICAgICAgICAgICAgICAgICAvKiBJIEFt IGEgQ29tbWFuZCAqLworICAgIHNiX291dFtpKytdID0gKENIQVIpIFNCOyAgICAgICAgICAgICAg ICAgIC8qIFN1Ym5lZ290aWF0aW9uICovCisgICAgc2Jfb3V0W2krK10gPSBURUxPUFRfQ09NUE9S VDsgICAgICAgICAgICAgLyogQ29tUG9ydCAqLworICAgIHNiX291dFtpKytdID0gVE5DX0MyU19T RVRfQ09OVFJPTDsgICAgLyogU2V0IENvbnRyb2wgKi8KKyAgICBzYl9vdXRbaSsrXSA9IFROQ19D VExfT0ZMT1dfUkVRVUVTVDsKKyAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBJQUM7ICAgICAgICAg ICAgICAgICAvKiBFbmQgb2YgU3VibmVnb3RpYXRpb24gKi8KKyAgICBzYl9vdXRbaSsrXSA9IChD SEFSKSBTRTsgICAgICAgICAgICAgICAgICAvKiBtYXJrZWQgYnkgSUFDIFNFICovCisKKyNpZmRl ZiBERUJVRworICAgIGlmIChkZWJsb2cgfHwgdG5fZGViIHx8IGRlYnNlcykgeworICAgICAgICBj a21ha3htc2codG5fbXNnX291dCxUTl9NU0dfTEVOLAorICAgICAgICAgICAgICAgICAgIlRFTE5F VCBTRU5UIFNCICIsVEVMT1BUKFRFTE9QVF9DT01QT1JUKSwKKyAgICAgICAgICAgICAgICAgICIg U0VULUNPTlRST0wgIiwKKyAgICAgICAgICAgICAgICAgICBja2l0b2EoVE5DX0NUTF9PRkxPV19S RVFVRVNUKSwKKyAgICAgICAgICAgICAgICAgICAiIElBQyBTRSIsIE5VTEwsCisgICAgICAgICAg ICAgICAgICBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCk7CisgICAgfQorI2VuZGlmIC8q IERFQlVHICovCisjaWZkZWYgT1MyCisgICAgUmVxdWVzdFRlbG5ldE11dGV4KCBTRU1fSU5ERUZJ TklURV9XQUlUICk7CisjZW5kaWYKKyNpZmRlZiBERUJVRworICAgIGRlYnVnKEYxMDAsdG5fbXNn X291dCwiIiwwKTsKKyAgICBpZiAodG5fZGViIHx8IGRlYnNlcykgdG5fZGVidWcodG5fbXNnX291 dCk7CisjZW5kaWYgLyogREVCVUcgKi8KKyAgICByYyA9ICh0dG9sKChDSEFSICopc2Jfb3V0LGkp IDwgMCk7ICAgICAgLyogU2VuZCBpdC4gKi8KKyNpZmRlZiBPUzIKKyAgICBSZWxlYXNlVGVsbmV0 TXV0ZXgoKTsKKyNlbmRpZgorICAgIGlmIChyYykKKyAgICAgICAgcmV0dXJuKC0xKTsKKworICAg IGlmICh0bmNfd2FpdCgoQ0hBUiAqKSJjb21wb3J0IGdldCBvdXRib3VuZCBmbG93IGNvbnRyb2wi LDApIDwgMCkgeworICAgICAgICB0bl9wdXNoKCk7CisgICAgICAgIHJldHVybigtMSk7CisgICAg fQorICAgIGRlYnVnKEYxMTEsInRuY19nZXRfb2Zsb3ciLCJlbmQiLHRuY19vZmxvdyk7CisgICAg cmV0dXJuKHRuY19vZmxvdyk7Cit9CisKK2ludAorI2lmZGVmIENLX0FOU0lDCit0bmNfc2V0X2lm bG93KGludCBjb250cm9sKQorI2Vsc2UgLyogQ0tfQU5TSUMgKi8KK3RuY19zZXRfaWZsb3coY29u dHJvbCkgaW50IGNvbnRyb2w7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIHRuY19zZXRfaWZs b3cgKi8geworICAgIC8qIElBQyBTQiBDT01fUE9SVCBTRVRfQ09OVFJPTCA8dmFsdWUoMSk+IElB QyBTRSAqLworICAgIC8qICAgICAgICBWYWx1ZSAgICAgRmxvdyBDb250cm9sCisgICAgICogICAg ICAgICAxNCAgICAgICBObyBGbG93IENvbnRyb2wKKyAgICAgKiAgICAgICAgIDE1ICAgICAgIFhv bi9Yb2ZmCisgICAgICogICAgICAgICAxNiAgICAgICBSdHMvQ3RzCisgICAgICogICAgICAgICAx OCAgICAgICBEVFIKKyAgICAgKi8KKyAgICAvKiB3YWl0IGZvciByZXNwb25zZSwgcmV0dXJuIG5l dyBob3N0IHZhbHVlLiAqLworICAgIGludCBpID0gMCwgcmM7CisKKyAgICBkZWJ1ZyhGMTExLCJ0 bmNfc2V0X2lmbG93IiwiYmVnaW4iLGNvbnRyb2wpOworICAgIGlmICh0dG5ldCAhPSBORVRfVENQ QikgcmV0dXJuKDApOworICAgIGlmICh0dG5wcm90byAhPSBOUF9URUxORVQpIHJldHVybigwKTsK KworICAgIGlmICghVEVMT1BUX01FKFRFTE9QVF9DT01QT1JUKSkgcmV0dXJuKDApOworCisjaWZk ZWYgQ0tfU1NMCisgICAgaWYgKFRFTE9QVF9TQihURUxPUFRfU1RBUlRfVExTKS5zdGFydF90bHMu bWVfZm9sbG93cykgeworICAgICAgICByZXR1cm4oMCk7CisgICAgfQorI2VuZGlmIC8qIENLX1NT TCAqLworCisgICAgaWYgKGNvbnRyb2wgIT0gMTQgJiYgY29udHJvbCAhPSAxNSAmJiBjb250cm9s ICE9IDE2ICYmIGNvbnRyb2wgIT0gMTgpCisgICAgICByZXR1cm4oMCk7CisKKyAgICBpZiAoIGNv bnRyb2wgIT0gMCAmJiBjb250cm9sID09IHRuY19pZmxvdyApCisgICAgICAgIHJldHVybih0bmNf aWZsb3cpOworCisgICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgSUFDOyAgICAgICAgICAgICAgICAg LyogSSBBbSBhIENvbW1hbmQgKi8KKyAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBTQjsgICAgICAg ICAgICAgICAgICAvKiBTdWJuZWdvdGlhdGlvbiAqLworICAgIHNiX291dFtpKytdID0gVEVMT1BU X0NPTVBPUlQ7ICAgICAgICAgICAgIC8qIENvbVBvcnQgKi8KKyAgICBzYl9vdXRbaSsrXSA9IFRO Q19DMlNfU0VUX0NPTlRST0w7ICAgIC8qIFNldCBDb250cm9sICovCisgICAgc2Jfb3V0W2krK10g PSAodW5zaWduZWQgY2hhcikoY29udHJvbCAmIDB4RkYpOworICAgIHNiX291dFtpKytdID0gKENI QVIpIElBQzsgICAgICAgICAgICAgICAgIC8qIEVuZCBvZiBTdWJuZWdvdGlhdGlvbiAqLworICAg IHNiX291dFtpKytdID0gKENIQVIpIFNFOyAgICAgICAgICAgICAgICAgIC8qIG1hcmtlZCBieSBJ QUMgU0UgKi8KKworI2lmZGVmIERFQlVHCisgICAgaWYgKGRlYmxvZyB8fCB0bl9kZWIgfHwgZGVi c2VzKSB7CisgICAgICAgIGNrbWFreG1zZyh0bl9tc2dfb3V0LFROX01TR19MRU4sCisgICAgICAg ICAgICAgICAgICAiVEVMTkVUIFNFTlQgU0IgIixURUxPUFQoVEVMT1BUX0NPTVBPUlQpLAorICAg ICAgICAgICAgICAgICAgIiBTRVQtQ09OVFJPTCAiLCBja2l0b2EoY29udHJvbCksIiBJQUMgU0Ui LCBOVUxMLAorICAgICAgICAgICAgICAgICAgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwp OworICAgIH0KKyNlbmRpZiAvKiBERUJVRyAqLworI2lmZGVmIE9TMgorICAgIFJlcXVlc3RUZWxu ZXRNdXRleCggU0VNX0lOREVGSU5JVEVfV0FJVCApOworI2VuZGlmCisjaWZkZWYgREVCVUcKKyAg ICBkZWJ1ZyhGMTAwLHRuX21zZ19vdXQsIiIsMCk7CisgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMp IHRuX2RlYnVnKHRuX21zZ19vdXQpOworI2VuZGlmIC8qIERFQlVHICovCisgICAgcmMgPSAodHRv bCgoQ0hBUiAqKXNiX291dCxpKSA8IDApOyAgICAgIC8qIFNlbmQgaXQuICovCisjaWZkZWYgT1My CisgICAgUmVsZWFzZVRlbG5ldE11dGV4KCk7CisjZW5kaWYKKyAgICBpZiAocmMpCisgICAgICBy ZXR1cm4oLTEpOworCisgICAgaWYgKHRuY193YWl0KChDSEFSICopImNvbXBvcnQgc2V0IGluYm91 bmQgZmxvdyBjb250cm9sIiwwKSA8IDApIHsKKyAgICAgICAgdG5fcHVzaCgpOworICAgICAgICBy ZXR1cm4oLTEpOworICAgIH0KKyAgICBkZWJ1ZyhGMTExLCJ0bmNfc2V0X2lmbG93IiwiZW5kIix0 bmNfaWZsb3cpOworICAgIHJldHVybih0bmNfaWZsb3cpOworfQorCitpbnQKKyNpZmRlZiBDS19B TlNJQwordG5jX2dldF9pZmxvdyh2b2lkKQorI2Vsc2UgLyogQ0tfQU5TSUMgKi8KK3RuY19nZXRf aWZsb3coKQorI2VuZGlmIC8qIENLX0FOU0lDICovCisvKiB0bmNfZ2V0X2lmbG93ICovIHsKKyAg ICAvKiBJQUMgU0IgQ09NX1BPUlQgU0VUX0NPTlRST0wgPHZhbHVlKDEpPTEzPiBJQUMgU0UgKi8K KyAgICAvKiB3YWl0IGZvciByZXNwb25zZSAqLworICAgIGludCBpID0gMCwgcmM7CisKKyAgICBk ZWJ1ZyhGMTEwLCJ0bmNfZ2V0X2lmbG93IiwiYmVnaW4iLDApOworICAgIGlmICh0dG5ldCAhPSBO RVRfVENQQikgcmV0dXJuKDApOworICAgIGlmICh0dG5wcm90byAhPSBOUF9URUxORVQpIHJldHVy bigwKTsKKworICAgIGlmICghVEVMT1BUX01FKFRFTE9QVF9DT01QT1JUKSkgcmV0dXJuKDApOwor CisjaWZkZWYgQ0tfU1NMCisgICAgaWYgKFRFTE9QVF9TQihURUxPUFRfU1RBUlRfVExTKS5zdGFy dF90bHMubWVfZm9sbG93cykgeworICAgICAgICByZXR1cm4oMCk7CisgICAgfQorI2VuZGlmIC8q IENLX1NTTCAqLworCisgICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgSUFDOyAgICAgICAgICAgICAg ICAgLyogSSBBbSBhIENvbW1hbmQgKi8KKyAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBTQjsgICAg ICAgICAgICAgICAgICAvKiBTdWJuZWdvdGlhdGlvbiAqLworICAgIHNiX291dFtpKytdID0gVEVM T1BUX0NPTVBPUlQ7ICAgICAgICAgICAgIC8qIENvbVBvcnQgKi8KKyAgICBzYl9vdXRbaSsrXSA9 IFROQ19DMlNfU0VUX0NPTlRST0w7ICAgIC8qIFNldCBDb250cm9sICovCisgICAgc2Jfb3V0W2kr K10gPSBUTkNfQ1RMX0lGTE9XX1JFUVVFU1Q7CisgICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgSUFD OyAgICAgICAgICAgICAgICAgLyogRW5kIG9mIFN1Ym5lZ290aWF0aW9uICovCisgICAgc2Jfb3V0 W2krK10gPSAoQ0hBUikgU0U7ICAgICAgICAgICAgICAgICAgLyogbWFya2VkIGJ5IElBQyBTRSAq LworCisjaWZkZWYgREVCVUcKKyAgICBpZiAoZGVibG9nIHx8IHRuX2RlYiB8fCBkZWJzZXMpIHsK KyAgICAgICAgY2ttYWt4bXNnKHRuX21zZ19vdXQsVE5fTVNHX0xFTiwKKyAgICAgICAgICAgICAg ICAgICJURUxORVQgU0VOVCBTQiAiLFRFTE9QVChURUxPUFRfQ09NUE9SVCksCisgICAgICAgICAg ICAgICAgICAiIFNFVC1DT05UUk9MICIsCisgICAgICAgICAgICAgICAgICBja2l0b2EoVE5DX0NU TF9JRkxPV19SRVFVRVNUKSwKKyAgICAgICAgICAgICAgICAgICIgSUFDIFNFIiwgTlVMTCwKKyAg ICAgICAgICAgICAgICAgIE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMKTsKKyAgICB9Cisj ZW5kaWYgLyogREVCVUcgKi8KKyNpZmRlZiBPUzIKKyAgICBSZXF1ZXN0VGVsbmV0TXV0ZXgoIFNF TV9JTkRFRklOSVRFX1dBSVQgKTsKKyNlbmRpZgorI2lmZGVmIERFQlVHCisgICAgZGVidWcoRjEw MCx0bl9tc2dfb3V0LCIiLDApOworICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKSB0bl9kZWJ1Zyh0 bl9tc2dfb3V0KTsKKyNlbmRpZiAvKiBERUJVRyAqLworICAgIHJjID0gKHR0b2woKENIQVIgKilz Yl9vdXQsaSkgPCAwKTsgICAgICAvKiBTZW5kIGl0LiAqLworI2lmZGVmIE9TMgorICAgIFJlbGVh c2VUZWxuZXRNdXRleCgpOworI2VuZGlmCisgICAgaWYgKHJjKQorICAgICAgICByZXR1cm4oLTEp OworCisgICAgaWYgKHRuY193YWl0KChDSEFSICopImNvbXBvcnQgZ2V0IGluYm91bmQgZmxvdyBj b250cm9sIiwwKSA8IDApIHsKKyAgICAgICAgdG5fcHVzaCgpOworICAgICAgICByZXR1cm4oLTEp OworICAgIH0KKyAgICBkZWJ1ZyhGMTExLCJ0bmNfZ2V0X2lmbG93IiwiZW5kIix0bmNfaWZsb3cp OworICAgIHJldHVybih0bmNfaWZsb3cpOworfQorCitpbnQKKyNpZmRlZiBDS19BTlNJQwordG5j X3NldF9icmVha19zdGF0ZShpbnQgb25vZmYpCisjZWxzZSAvKiBDS19BTlNJQyAqLwordG5jX3Nl dF9icmVha19zdGF0ZShvbm9mZikgaW50IG9ub2ZmOworI2VuZGlmIC8qIENLX0FOU0lDICovCisv KiB0bmNfc2V0X2JyZWFrX3N0YXRlICovIHsKKyAgICAvKiBJQUMgU0IgQ09NX1BPUlQgU0VUX0NP TlRST0wgPHZhbHVlKDEpPiBJQUMgU0UgKi8KKyAgICAvKiAgICAgICAgVmFsdWUgICAgIEJyZWFr IFN0YXRlCisgICAgICogICAgICAgICAgNSAgICAgICBPbgorICAgICAqICAgICAgICAgIDYgICAg ICAgT2ZmCisgICAgICovCisgICAgLyogd2FpdCBmb3IgcmVzcG9uc2UsIHJldHVybiBuZXcgaG9z dCB2YWx1ZS4gKi8KKyAgICBpbnQgaSA9IDAsIHJjOworCisgICAgZGVidWcoRjExMSwidG5jX3Nl dF9icmVha19zdGF0ZSIsImJlZ2luIixvbm9mZik7CisgICAgaWYgKHR0bmV0ICE9IE5FVF9UQ1BC KSByZXR1cm4oMCk7CisgICAgaWYgKHR0bnByb3RvICE9IE5QX1RFTE5FVCkgcmV0dXJuKDApOwor CisgICAgaWYgKCFURUxPUFRfTUUoVEVMT1BUX0NPTVBPUlQpKSByZXR1cm4oMCk7CisKKyNpZmRl ZiBDS19TU0wKKyAgICBpZiAoVEVMT1BUX1NCKFRFTE9QVF9TVEFSVF9UTFMpLnN0YXJ0X3Rscy5t ZV9mb2xsb3dzKSB7CisgICAgICAgIHJldHVybigwKTsKKyAgICB9CisjZW5kaWYgLyogQ0tfU1NM ICovCisKKyAgICBpZiAoIG9ub2ZmICE9IDAgJiYgb25vZmYgPT0gdG5jX2JyZWFrICkKKyAgICAg ICAgcmV0dXJuKHRuY19icmVhayk7CisKKyAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBJQUM7ICAg ICAgICAgICAgICAgICAvKiBJIEFtIGEgQ29tbWFuZCAqLworICAgIHNiX291dFtpKytdID0gKENI QVIpIFNCOyAgICAgICAgICAgICAgICAgIC8qIFN1Ym5lZ290aWF0aW9uICovCisgICAgc2Jfb3V0 W2krK10gPSBURUxPUFRfQ09NUE9SVDsgICAgICAgICAgICAgLyogQ29tUG9ydCAqLworICAgIHNi X291dFtpKytdID0gVE5DX0MyU19TRVRfQ09OVFJPTDsgICAgLyogU2V0IENvbnRyb2wgKi8KKyAg ICBzYl9vdXRbaSsrXSA9IG9ub2ZmID8KKyAgICAgIFROQ19DVExfQlJFQUtfT04gOiBUTkNfQ1RM X0JSRUFLX09GRjsKKyAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBJQUM7ICAgICAgICAgICAgICAg ICAvKiBFbmQgb2YgU3VibmVnb3RpYXRpb24gKi8KKyAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBT RTsgICAgICAgICAgICAgICAgICAvKiBtYXJrZWQgYnkgSUFDIFNFICovCisKKyNpZmRlZiBERUJV RworICAgIGlmIChkZWJsb2cgfHwgdG5fZGViIHx8IGRlYnNlcykgeworICAgICAgICBja21ha3ht c2codG5fbXNnX291dCxUTl9NU0dfTEVOLAorICAgICAgICAgICAgICAgICAgIlRFTE5FVCBTRU5U IFNCICIsVEVMT1BUKFRFTE9QVF9DT01QT1JUKSwKKyAgICAgICAgICAgICAgICAgICIgU0VULUNP TlRST0wgIiwKKyAgICAgICAgICAgICAgICAgIG9ub2ZmID8gIkJSRUFLLU9OIiA6ICJCUkVBSy1P RkYiLAorICAgICAgICAgICAgICAgICAgIiBJQUMgU0UiLCBOVUxMLAorICAgICAgICAgICAgICAg ICAgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwpOworICAgIH0KKyNlbmRpZiAvKiBERUJV RyAqLworI2lmZGVmIE9TMgorICAgIFJlcXVlc3RUZWxuZXRNdXRleCggU0VNX0lOREVGSU5JVEVf V0FJVCApOworI2VuZGlmCisjaWZkZWYgREVCVUcKKyAgICBkZWJ1ZyhGMTAwLHRuX21zZ19vdXQs IiIsMCk7CisgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpIHRuX2RlYnVnKHRuX21zZ19vdXQpOwor I2VuZGlmIC8qIERFQlVHICovCisgICAgcmMgPSAodHRvbCgoQ0hBUiAqKXNiX291dCxpKSA8IDAp OyAgICAgIC8qIFNlbmQgaXQuICovCisjaWZkZWYgT1MyCisgICAgUmVsZWFzZVRlbG5ldE11dGV4 KCk7CisjZW5kaWYKKyAgICBpZiAocmMpCisgICAgICAgIHJldHVybigtMSk7CisKKyAgICBpZiAo dG5jX3dhaXQoKENIQVIgKikiY29tcG9ydCBzZXQgYnJlYWsgc3RhdGUiLDApIDwgMCkgeworICAg ICAgICB0bl9wdXNoKCk7CisgICAgICAgIHJldHVybigtMSk7CisgICAgfQorICAgIGRlYnVnKEYx MTEsInRuY19zZXRfYnJlYWtfc3RhdGUiLCJlbmQiLHRuY19icmVhayk7CisgICAgcmV0dXJuKHRu Y19icmVhayk7Cit9CisKK2ludAorI2lmZGVmIENLX0FOU0lDCit0bmNfZ2V0X2JyZWFrX3N0YXRl KHZvaWQpCisjZWxzZSAvKiBDS19BTlNJQyAqLwordG5jX2dldF9icmVha19zdGF0ZSgpCisjZW5k aWYgLyogQ0tfQU5TSUMgKi8KKy8qIHRuY19nZXRfYnJlYWtfc3RhdGUgKi8geworICAgIC8qIElB QyBTQiBDT01fUE9SVCBTRVRfQ09OVFJPTCA8dmFsdWUoMSk9ND4gSUFDIFNFICovCisgICAgLyog d2FpdCBmb3IgcmVzcG9uc2UgKi8KKyAgICBpbnQgaSA9IDAsIHJjOworCisgICAgZGVidWcoRjEx MCwidG5jX2dldF9icmVha19zdGF0ZSIsImJlZ2luIiwwKTsKKyAgICBpZiAodHRuZXQgIT0gTkVU X1RDUEIpIHJldHVybigwKTsKKyAgICBpZiAodHRucHJvdG8gIT0gTlBfVEVMTkVUKSByZXR1cm4o MCk7CisKKyAgICBpZiAoIVRFTE9QVF9NRShURUxPUFRfQ09NUE9SVCkpIHJldHVybigwKTsKKwor I2lmZGVmIENLX1NTTAorICAgIGlmIChURUxPUFRfU0IoVEVMT1BUX1NUQVJUX1RMUykuc3RhcnRf dGxzLm1lX2ZvbGxvd3MpIHsKKyAgICAgICAgcmV0dXJuKDApOworICAgIH0KKyNlbmRpZiAvKiBD S19TU0wgKi8KKworICAgIHNiX291dFtpKytdID0gKENIQVIpIElBQzsgICAgICAgICAgICAgICAg IC8qIEkgQW0gYSBDb21tYW5kICovCisgICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgU0I7ICAgICAg ICAgICAgICAgICAgLyogU3VibmVnb3RpYXRpb24gKi8KKyAgICBzYl9vdXRbaSsrXSA9IFRFTE9Q VF9DT01QT1JUOyAgICAgICAgICAgICAvKiBDb21Qb3J0ICovCisgICAgc2Jfb3V0W2krK10gPSBU TkNfQzJTX1NFVF9DT05UUk9MOyAgICAvKiBTZXQgQ29udHJvbCAqLworICAgIHNiX291dFtpKytd ID0gVE5DX0NUTF9CUkVBS19SRVFVRVNUOworICAgIHNiX291dFtpKytdID0gKENIQVIpIElBQzsg ICAgICAgICAgICAgICAgIC8qIEVuZCBvZiBTdWJuZWdvdGlhdGlvbiAqLworICAgIHNiX291dFtp KytdID0gKENIQVIpIFNFOyAgICAgICAgICAgICAgICAgIC8qIG1hcmtlZCBieSBJQUMgU0UgKi8K KworI2lmZGVmIERFQlVHCisgICAgaWYgKGRlYmxvZyB8fCB0bl9kZWIgfHwgZGVic2VzKSB7Cisg ICAgICAgIGNrbWFreG1zZyh0bl9tc2dfb3V0LFROX01TR19MRU4sCisgICAgICAgICAgICAgICAg ICAiVEVMTkVUIFNFTlQgU0IgIixURUxPUFQoVEVMT1BUX0NPTVBPUlQpLAorICAgICAgICAgICAg ICAgICAgIiBTRVQtQ09OVFJPTCAiLAorICAgICAgICAgICAgICAgICAgIkJSRUFLLVJFUVVFU1Qi LAorICAgICAgICAgICAgICAgICAgIiBJQUMgU0UiLCBOVUxMLAorICAgICAgICAgICAgICAgICAg TlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwpOworICAgIH0KKyNlbmRpZiAvKiBERUJVRyAq LworI2lmZGVmIE9TMgorICAgIFJlcXVlc3RUZWxuZXRNdXRleCggU0VNX0lOREVGSU5JVEVfV0FJ VCApOworI2VuZGlmCisjaWZkZWYgREVCVUcKKyAgICBkZWJ1ZyhGMTAwLHRuX21zZ19vdXQsIiIs MCk7CisgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpIHRuX2RlYnVnKHRuX21zZ19vdXQpOworI2Vu ZGlmIC8qIERFQlVHICovCisgICAgcmMgPSAodHRvbCgoQ0hBUiAqKXNiX291dCxpKSA8IDApOyAg ICAgIC8qIFNlbmQgaXQuICovCisjaWZkZWYgT1MyCisgICAgUmVsZWFzZVRlbG5ldE11dGV4KCk7 CisjZW5kaWYKKyAgICBpZiAocmMpCisgICAgICAgIHJldHVybigtMSk7CisKKyAgICBpZiAodG5j X3dhaXQoKENIQVIgKikiY29tcG9ydCBnZXQgYnJlYWsgc3RhdGUiLDApIDwgMCkgeworICAgICAg ICB0bl9wdXNoKCk7CisgICAgICAgIHJldHVybigtMSk7CisgICAgfQorICAgIGRlYnVnKEYxMTEs InRuY19nZXRfYnJlYWtfc3RhdGUiLCJlbmQiLHRuY19icmVhayk7CisgICAgcmV0dXJuKHRuY19i cmVhayk7Cit9CisKK2ludAorI2lmZGVmIENLX0FOU0lDCit0bmNfc2V0X2R0cl9zdGF0ZShpbnQg b25vZmYpCisjZWxzZSAvKiBDS19BTlNJQyAqLwordG5jX3NldF9kdHJfc3RhdGUob25vZmYpIGlu dCBvbm9mZjsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogdG5jX3NldF9kdHJfc3RhdGUgKi8g eworICAgIC8qIElBQyBTQiBDT01fUE9SVCBTRVRfQ09OVFJPTCA8dmFsdWUoMSk+IElBQyBTRSAq LworICAgIC8qICAgICAgICBWYWx1ZSAgICAgRHRyIFN0YXRlCisgICAgICogICAgICAgICAgOCAg ICAgICBPbgorICAgICAqICAgICAgICAgIDkgICAgICAgT2ZmCisgICAgICovCisgICAgLyogd2Fp dCBmb3IgcmVzcG9uc2UsIHJldHVybiBuZXcgaG9zdCB2YWx1ZS4gKi8KKyAgICBpbnQgaSA9IDAs IHJjOworCisgICAgZGVidWcoRjExMSwidG5jX3NldF9kdHJfc3RhdGUiLCJiZWdpbiIsb25vZmYp OworICAgIGlmICh0dG5ldCAhPSBORVRfVENQQikgcmV0dXJuKDApOworICAgIGlmICh0dG5wcm90 byAhPSBOUF9URUxORVQpIHJldHVybigwKTsKKworICAgIGlmICghVEVMT1BUX01FKFRFTE9QVF9D T01QT1JUKSkgcmV0dXJuKDApOworCisjaWZkZWYgQ0tfU1NMCisgICAgaWYgKFRFTE9QVF9TQihU RUxPUFRfU1RBUlRfVExTKS5zdGFydF90bHMubWVfZm9sbG93cykgeworICAgICAgICByZXR1cm4o MCk7CisgICAgfQorI2VuZGlmIC8qIENLX1NTTCAqLworCisgICAgaWYgKCBvbm9mZiAhPSAwICYm IG9ub2ZmID09IHRuY19kdHIgKQorICAgICAgICByZXR1cm4odG5jX2R0cik7CisKKyAgICBzYl9v dXRbaSsrXSA9IChDSEFSKSBJQUM7ICAgICAgICAgICAgICAgICAvKiBJIEFtIGEgQ29tbWFuZCAq LworICAgIHNiX291dFtpKytdID0gKENIQVIpIFNCOyAgICAgICAgICAgICAgICAgIC8qIFN1Ym5l Z290aWF0aW9uICovCisgICAgc2Jfb3V0W2krK10gPSBURUxPUFRfQ09NUE9SVDsgICAgICAgICAg ICAgLyogQ29tUG9ydCAqLworICAgIHNiX291dFtpKytdID0gVE5DX0MyU19TRVRfQ09OVFJPTDsg ICAgLyogU2V0IENvbnRyb2wgKi8KKyAgICBzYl9vdXRbaSsrXSA9IG9ub2ZmID8KKyAgICAgICAg VE5DX0NUTF9EVFJfT04gOiBUTkNfQ1RMX0RUUl9PRkY7CisgICAgc2Jfb3V0W2krK10gPSAoQ0hB UikgSUFDOyAgICAgICAgICAgICAgICAgLyogRW5kIG9mIFN1Ym5lZ290aWF0aW9uICovCisgICAg c2Jfb3V0W2krK10gPSAoQ0hBUikgU0U7ICAgICAgICAgICAgICAgICAgLyogbWFya2VkIGJ5IElB QyBTRSAqLworCisjaWZkZWYgREVCVUcKKyAgICBpZiAoZGVibG9nIHx8IHRuX2RlYiB8fCBkZWJz ZXMpIHsKKyAgICAgICAgY2ttYWt4bXNnKHRuX21zZ19vdXQsVE5fTVNHX0xFTiwKKyAgICAgICAg ICAgICAgICAgICJURUxORVQgU0VOVCBTQiAiLFRFTE9QVChURUxPUFRfQ09NUE9SVCksCisgICAg ICAgICAgICAgICAgICAiIFNFVC1DT05UUk9MICIsCisgICAgICAgICAgICAgICAgICBvbm9mZiA/ ICJEVFItT04iIDogIkRUUi1PRkYiLAorICAgICAgICAgICAgICAgICAgIiBJQUMgU0UiLCBOVUxM LAorICAgICAgICAgICAgICAgICAgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwpOworICAg IH0KKyNlbmRpZiAvKiBERUJVRyAqLworI2lmZGVmIE9TMgorICAgIFJlcXVlc3RUZWxuZXRNdXRl eCggU0VNX0lOREVGSU5JVEVfV0FJVCApOworI2VuZGlmCisjaWZkZWYgREVCVUcKKyAgICBkZWJ1 ZyhGMTAwLHRuX21zZ19vdXQsIiIsMCk7CisgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpIHRuX2Rl YnVnKHRuX21zZ19vdXQpOworI2VuZGlmIC8qIERFQlVHICovCisgICAgcmMgPSAodHRvbCgoQ0hB UiAqKXNiX291dCxpKSA8IDApOyAgICAgIC8qIFNlbmQgaXQuICovCisjaWZkZWYgT1MyCisgICAg UmVsZWFzZVRlbG5ldE11dGV4KCk7CisjZW5kaWYKKyAgICBpZiAocmMpCisgICAgICByZXR1cm4o LTEpOworCisgICAgaWYgKHRuY193YWl0KChDSEFSICopImNvbXBvcnQgc2V0IGR0ciBzdGF0ZSIs MCkgPCAwKSB7CisgICAgICAgIHRuX3B1c2goKTsKKyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9 CisgICAgZGVidWcoRjExMSwidG5jX3NldF9kdHJfc3RhdGUiLCJlbmQiLHRuY19kdHIpOworICAg IHJldHVybih0bmNfZHRyKTsKK30KKworaW50CisjaWZkZWYgQ0tfQU5TSUMKK3RuY19nZXRfZHRy X3N0YXRlKHZvaWQpCisjZWxzZSAvKiBDS19BTlNJQyAqLwordG5jX2dldF9kdHJfc3RhdGUoKQor I2VuZGlmIC8qIENLX0FOU0lDICovCisvKiB0bmNfZ2V0X2R0cl9zdGF0ZSAqLyB7CisgICAgLyog SUFDIFNCIENPTV9QT1JUIFNFVF9DT05UUk9MIDx2YWx1ZSgxKT03PiBJQUMgU0UgKi8KKyAgICAv KiB3YWl0IGZvciByZXNwb25zZSAqLworICAgIGludCBpID0gMCwgcmM7CisKKyAgICBkZWJ1ZyhG MTEwLCJ0bmNfZ2V0X2R0cl9zdGF0ZSIsImJlZ2luIiwwKTsKKyAgICBpZiAodHRuZXQgIT0gTkVU X1RDUEIpIHJldHVybigwKTsKKyAgICBpZiAodHRucHJvdG8gIT0gTlBfVEVMTkVUKSByZXR1cm4o MCk7CisKKyAgICBpZiAoIVRFTE9QVF9NRShURUxPUFRfQ09NUE9SVCkpIHJldHVybigwKTsKKwor I2lmZGVmIENLX1NTTAorICAgIGlmIChURUxPUFRfU0IoVEVMT1BUX1NUQVJUX1RMUykuc3RhcnRf dGxzLm1lX2ZvbGxvd3MpIHsKKyAgICAgICAgcmV0dXJuKDApOworICAgIH0KKyNlbmRpZiAvKiBD S19TU0wgKi8KKworICAgIHNiX291dFtpKytdID0gKENIQVIpIElBQzsgICAgICAgICAgICAgICAg IC8qIEkgQW0gYSBDb21tYW5kICovCisgICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgU0I7ICAgICAg ICAgICAgICAgICAgLyogU3VibmVnb3RpYXRpb24gKi8KKyAgICBzYl9vdXRbaSsrXSA9IFRFTE9Q VF9DT01QT1JUOyAgICAgICAgICAgICAvKiBDb21Qb3J0ICovCisgICAgc2Jfb3V0W2krK10gPSBU TkNfQzJTX1NFVF9DT05UUk9MOyAgICAvKiBTZXQgQ29udHJvbCAqLworICAgIHNiX291dFtpKytd ID0gVE5DX0NUTF9EVFJfUkVRVUVTVDsKKyAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBJQUM7ICAg ICAgICAgICAgICAgICAvKiBFbmQgb2YgU3VibmVnb3RpYXRpb24gKi8KKyAgICBzYl9vdXRbaSsr XSA9IChDSEFSKSBTRTsgICAgICAgICAgICAgICAgICAvKiBtYXJrZWQgYnkgSUFDIFNFICovCisK KyNpZmRlZiBERUJVRworICAgIGlmIChkZWJsb2cgfHwgdG5fZGViIHx8IGRlYnNlcykgeworICAg ICAgICBja21ha3htc2codG5fbXNnX291dCxUTl9NU0dfTEVOLAorICAgICAgICAgICAgICAgICAg IlRFTE5FVCBTRU5UIFNCICIsVEVMT1BUKFRFTE9QVF9DT01QT1JUKSwKKyAgICAgICAgICAgICAg ICAgICIgU0VULUNPTlRST0wgIiwKKyAgICAgICAgICAgICAgICAgICJEVFItUkVRVUVTVCIsCisg ICAgICAgICAgICAgICAgICAiIElBQyBTRSIsIE5VTEwsCisgICAgICAgICAgICAgICAgICBOVUxM LE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCk7CisgICAgfQorI2VuZGlmIC8qIERFQlVHICovCisj aWZkZWYgT1MyCisgICAgUmVxdWVzdFRlbG5ldE11dGV4KCBTRU1fSU5ERUZJTklURV9XQUlUICk7 CisjZW5kaWYKKyNpZmRlZiBERUJVRworICAgIGRlYnVnKEYxMDAsdG5fbXNnX291dCwiIiwwKTsK KyAgICBpZiAodG5fZGViIHx8IGRlYnNlcykgdG5fZGVidWcodG5fbXNnX291dCk7CisjZW5kaWYg LyogREVCVUcgKi8KKyAgICByYyA9ICh0dG9sKChDSEFSICopc2Jfb3V0LGkpIDwgMCk7ICAgICAg LyogU2VuZCBpdC4gKi8KKyNpZmRlZiBPUzIKKyAgICBSZWxlYXNlVGVsbmV0TXV0ZXgoKTsKKyNl bmRpZgorICAgIGlmIChyYykKKyAgICAgIHJldHVybigtMSk7CisKKyAgICBpZiAodG5jX3dhaXQo KENIQVIgKikiY29tcG9ydCBnZXQgZHRyIHN0YXRlIiwwKSA8IDApIHsKKyAgICAgICAgdG5fcHVz aCgpOworICAgICAgICByZXR1cm4oLTEpOworICAgIH0KKyAgICBkZWJ1ZyhGMTExLCJ0bmNfZ2V0 X2R0cl9zdGF0ZSIsImVuZCIsdG5jX2R0cik7CisgICAgcmV0dXJuKHRuY19kdHIpOworfQorCitp bnQKKyNpZmRlZiBDS19BTlNJQwordG5jX3NldF9ydHNfc3RhdGUoaW50IG9ub2ZmKQorI2Vsc2Ug LyogQ0tfQU5TSUMgKi8KK3RuY19zZXRfcnRzX3N0YXRlKG9ub2ZmKSBpbnQgb25vZmY7CisjZW5k aWYgLyogQ0tfQU5TSUMgKi8KKy8qIHRuY19zZXRfcnRzX3N0YXRlICovIHsKKyAgICAvKiBJQUMg U0IgQ09NX1BPUlQgU0VUX0NPTlRST0wgPHZhbHVlKDEpPiBJQUMgU0UgKi8KKyAgICAvKiAgICAg ICAgVmFsdWUgICAgIFJ0cyBTdGF0ZQorICAgICAqICAgICAgICAgIDUgICAgICAgT24KKyAgICAg KiAgICAgICAgICA2ICAgICAgIE9mZgorICAgICAqLworICAgIC8qIHdhaXQgZm9yIHJlc3BvbnNl LCByZXR1cm4gbmV3IGhvc3QgdmFsdWUuICovCisgICAgaW50IGkgPSAwLCByYzsKKworICAgIGRl YnVnKEYxMTEsInRuY19zZXRfcnRzX3N0YXRlIiwiYmVnaW4iLG9ub2ZmKTsKKyAgICBpZiAodHRu ZXQgIT0gTkVUX1RDUEIpIHJldHVybigwKTsKKyAgICBpZiAodHRucHJvdG8gIT0gTlBfVEVMTkVU KSByZXR1cm4oMCk7CisKKyAgICBpZiAoIVRFTE9QVF9NRShURUxPUFRfQ09NUE9SVCkpIHJldHVy bigwKTsKKworI2lmZGVmIENLX1NTTAorICAgIGlmIChURUxPUFRfU0IoVEVMT1BUX1NUQVJUX1RM Uykuc3RhcnRfdGxzLm1lX2ZvbGxvd3MpIHsKKyAgICAgICAgcmV0dXJuKDApOworICAgIH0KKyNl bmRpZiAvKiBDS19TU0wgKi8KKworICAgIGlmICggb25vZmYgIT0gMCAmJiBvbm9mZiA9PSB0bmNf cnRzICkKKyAgICAgICAgcmV0dXJuKHRuY19ydHMpOworCisgICAgc2Jfb3V0W2krK10gPSAoQ0hB UikgSUFDOyAgICAgICAgICAgICAgICAgLyogSSBBbSBhIENvbW1hbmQgKi8KKyAgICBzYl9vdXRb aSsrXSA9IChDSEFSKSBTQjsgICAgICAgICAgICAgICAgICAvKiBTdWJuZWdvdGlhdGlvbiAqLwor ICAgIHNiX291dFtpKytdID0gVEVMT1BUX0NPTVBPUlQ7ICAgICAgICAgICAgIC8qIENvbVBvcnQg Ki8KKyAgICBzYl9vdXRbaSsrXSA9IFROQ19DMlNfU0VUX0NPTlRST0w7ICAgIC8qIFNldCBDb250 cm9sICovCisgICAgc2Jfb3V0W2krK10gPSBvbm9mZiA/CisgICAgICBUTkNfQ1RMX1JUU19PTiA6 IFROQ19DVExfUlRTX09GRjsKKyAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBJQUM7ICAgICAgICAg ICAgICAgICAvKiBFbmQgb2YgU3VibmVnb3RpYXRpb24gKi8KKyAgICBzYl9vdXRbaSsrXSA9IChD SEFSKSBTRTsgICAgICAgICAgICAgICAgICAvKiBtYXJrZWQgYnkgSUFDIFNFICovCisKKyNpZmRl ZiBERUJVRworICAgIGlmIChkZWJsb2cgfHwgdG5fZGViIHx8IGRlYnNlcykgeworICAgICAgICBj a21ha3htc2codG5fbXNnX291dCxUTl9NU0dfTEVOLAorICAgICAgICAgICAgICAgICAgIlRFTE5F VCBTRU5UIFNCICIsVEVMT1BUKFRFTE9QVF9DT01QT1JUKSwKKyAgICAgICAgICAgICAgICAgICIg U0VULUNPTlRST0wgIiwKKyAgICAgICAgICAgICAgICAgIG9ub2ZmID8gIlJUUy1PTiIgOiAiUlRT LU9GRiIsCisgICAgICAgICAgICAgICAgICAiIElBQyBTRSIsIE5VTEwsCisgICAgICAgICAgICAg ICAgICBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCk7CisgICAgfQorI2VuZGlmIC8qIERF QlVHICovCisjaWZkZWYgT1MyCisgICAgUmVxdWVzdFRlbG5ldE11dGV4KCBTRU1fSU5ERUZJTklU RV9XQUlUICk7CisjZW5kaWYKKyNpZmRlZiBERUJVRworICAgIGRlYnVnKEYxMDAsdG5fbXNnX291 dCwiIiwwKTsKKyAgICBpZiAodG5fZGViIHx8IGRlYnNlcykgdG5fZGVidWcodG5fbXNnX291dCk7 CisjZW5kaWYgLyogREVCVUcgKi8KKyAgICByYyA9ICh0dG9sKChDSEFSICopc2Jfb3V0LGkpIDwg MCk7ICAgICAgLyogU2VuZCBpdC4gKi8KKyNpZmRlZiBPUzIKKyAgICBSZWxlYXNlVGVsbmV0TXV0 ZXgoKTsKKyNlbmRpZgorICAgIGlmIChyYykKKyAgICAgIHJldHVybigtMSk7CisKKyAgICBpZiAo dG5jX3dhaXQoKENIQVIgKikiY29tcG9ydCBzZXQgcnRzIHN0YXRlIiwwKSA8IDApIHsKKyAgICAg ICAgdG5fcHVzaCgpOworICAgICAgICByZXR1cm4oLTEpOworICAgIH0KKyAgICBkZWJ1ZyhGMTEx LCJ0bmNfc2V0X3J0c19zdGF0ZSIsImVuZCIsdG5jX3J0cyk7CisgICAgcmV0dXJuKHRuY19ydHMp OworfQorCitpbnQKKyNpZmRlZiBDS19BTlNJQwordG5jX2dldF9ydHNfc3RhdGUodm9pZCkKKyNl bHNlIC8qIENLX0FOU0lDICovCit0bmNfZ2V0X3J0c19zdGF0ZSgpCisjZW5kaWYgLyogQ0tfQU5T SUMgKi8KKy8qIHRuY19nZXRfcnRzX3N0YXRlICovIHsKKyAgICAvKiBJQUMgU0IgQ09NX1BPUlQg U0VUX0NPTlRST0wgPHZhbHVlKDEpPTEwPiBJQUMgU0UgKi8KKyAgICAvKiB3YWl0IGZvciByZXNw b25zZSAqLworICAgIGludCBpID0gMCwgcmM7CisKKyAgICBkZWJ1ZyhGMTEwLCJ0bmNfZ2V0X3J0 c19zdGF0ZSIsImJlZ2luIiwwKTsKKyAgICBpZiAodHRuZXQgIT0gTkVUX1RDUEIpIHJldHVybigw KTsKKyAgICBpZiAodHRucHJvdG8gIT0gTlBfVEVMTkVUKSByZXR1cm4oMCk7CisKKyAgICBpZiAo IVRFTE9QVF9NRShURUxPUFRfQ09NUE9SVCkpIHJldHVybigwKTsKKworI2lmZGVmIENLX1NTTAor ICAgIGlmIChURUxPUFRfU0IoVEVMT1BUX1NUQVJUX1RMUykuc3RhcnRfdGxzLm1lX2ZvbGxvd3Mp IHsKKyAgICAgICAgcmV0dXJuKDApOworICAgIH0KKyNlbmRpZiAvKiBDS19TU0wgKi8KKworICAg IHNiX291dFtpKytdID0gKENIQVIpIElBQzsgICAgICAgICAgICAgICAgIC8qIEkgQW0gYSBDb21t YW5kICovCisgICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgU0I7ICAgICAgICAgICAgICAgICAgLyog U3VibmVnb3RpYXRpb24gKi8KKyAgICBzYl9vdXRbaSsrXSA9IFRFTE9QVF9DT01QT1JUOyAgICAg ICAgICAgICAvKiBDb21Qb3J0ICovCisgICAgc2Jfb3V0W2krK10gPSBUTkNfQzJTX1NFVF9DT05U Uk9MOyAgICAvKiBTZXQgQ29udHJvbCAqLworICAgIHNiX291dFtpKytdID0gVE5DX0NUTF9SVFNf UkVRVUVTVDsKKyAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBJQUM7ICAgICAgICAgICAgICAgICAv KiBFbmQgb2YgU3VibmVnb3RpYXRpb24gKi8KKyAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBTRTsg ICAgICAgICAgICAgICAgICAvKiBtYXJrZWQgYnkgSUFDIFNFICovCisKKyNpZmRlZiBERUJVRwor ICAgIGlmIChkZWJsb2cgfHwgdG5fZGViIHx8IGRlYnNlcykgeworICAgICAgICBja21ha3htc2co dG5fbXNnX291dCxUTl9NU0dfTEVOLAorICAgICAgICAgICAgICAgICAgIlRFTE5FVCBTRU5UIFNC ICIsVEVMT1BUKFRFTE9QVF9DT01QT1JUKSwKKyAgICAgICAgICAgICAgICAgICIgU0VULUNPTlRS T0wgIiwKKyAgICAgICAgICAgICAgICAgICJSVFMtUkVRVUVTVCIsCisgICAgICAgICAgICAgICAg ICAiIElBQyBTRSIsIE5VTEwsCisgICAgICAgICAgICAgICAgICBOVUxMLE5VTEwsTlVMTCxOVUxM LE5VTEwsTlVMTCk7CisgICAgfQorI2VuZGlmIC8qIERFQlVHICovCisjaWZkZWYgT1MyCisgICAg UmVxdWVzdFRlbG5ldE11dGV4KCBTRU1fSU5ERUZJTklURV9XQUlUICk7CisjZW5kaWYKKyNpZmRl ZiBERUJVRworICAgIGRlYnVnKEYxMDAsdG5fbXNnX291dCwiIiwwKTsKKyAgICBpZiAodG5fZGVi IHx8IGRlYnNlcykgdG5fZGVidWcodG5fbXNnX291dCk7CisjZW5kaWYgLyogREVCVUcgKi8KKyAg ICByYyA9ICh0dG9sKChDSEFSICopc2Jfb3V0LGkpIDwgMCk7ICAgICAgLyogU2VuZCBpdC4gKi8K KyNpZmRlZiBPUzIKKyAgICBSZWxlYXNlVGVsbmV0TXV0ZXgoKTsKKyNlbmRpZgorICAgIGlmIChy YykKKyAgICAgICAgcmV0dXJuKC0xKTsKKworICAgIGlmICh0bmNfd2FpdCgoQ0hBUiAqKSJjb21w b3J0IGdldCBydHMgc3RhdGUiLDApIDwgMCkgeworICAgICAgICB0bl9wdXNoKCk7CisgICAgICAg IHJldHVybigtMSk7CisgICAgfQorICAgIGRlYnVnKEYxMTEsInRuY19nZXRfcnRzX3N0YXRlIiwi ZW5kIix0bmNfcnRzKTsKKyAgICByZXR1cm4odG5jX3J0cyk7Cit9CisKK2ludAorI2lmZGVmIENL X0FOU0lDCit0bmNfc2V0X2xzX21hc2soaW50IG1hc2spCisjZWxzZSAvKiBDS19BTlNJQyAqLwor dG5jX3NldF9sc19tYXNrKG1hc2spIGludCBtYXNrOworI2VuZGlmIC8qIENLX0FOU0lDICovCisv KiB0bmNfc2V0X2xzX21hc2sgKi8geworICAgIC8qIElBQyBTQiBDT01fUE9SVCBTRVRfTElORVNU QVRFX01BU0sgPHZhbHVlKDEpPiBJQUMgU0UgKi8KKyAgICAvKiAgICAgICAgQml0ICAgICAgIE1l YW5pbmcKKyAgICAgKiAgICAgICAgICAwICAgICAgIERhdGEgUmVhZHkKKyAgICAgKiAgICAgICAg ICAxICAgICAgIE92ZXJydW4gRXJyb3IKKyAgICAgKiAgICAgICAgICAyICAgICAgIFBhcml0eSBF cnJvcgorICAgICAqICAgICAgICAgIDMgICAgICAgRnJhbWluZyBFcnJvcgorICAgICAqICAgICAg ICAgIDQgICAgICAgQnJlYWsgRGV0ZWN0IEVycm9yCisgICAgICogICAgICAgICAgNSAgICAgICBU cmFuc2ZlciBIb2xkaW5nIFJlZ2lzdGVyIEVtcHR5CisgICAgICogICAgICAgICAgNiAgICAgICBU cmFuc2ZlciBTaGlmdCBSZWdpc3RlciBFbXB0eQorICAgICAqICAgICAgICAgIDcgICAgICAgVGlt ZW91dCBFcnJvcgorICAgICAqLworICAgIGludCBpID0gMCwgcmM7CisKKyAgICBkZWJ1ZyhGMTEx LCJ0bmNfc2V0X2xzX21hc2siLCJiZWdpbiIsbWFzayk7CisgICAgaWYgKHR0bmV0ICE9IE5FVF9U Q1BCKSByZXR1cm4oMCk7CisgICAgaWYgKHR0bnByb3RvICE9IE5QX1RFTE5FVCkgcmV0dXJuKDAp OworCisgICAgaWYgKCFURUxPUFRfTUUoVEVMT1BUX0NPTVBPUlQpKSByZXR1cm4oMCk7CisKKyNp ZmRlZiBDS19TU0wKKyAgICBpZiAoVEVMT1BUX1NCKFRFTE9QVF9TVEFSVF9UTFMpLnN0YXJ0X3Rs cy5tZV9mb2xsb3dzKSB7CisgICAgICAgIHJldHVybigwKTsKKyAgICB9CisjZW5kaWYgLyogQ0tf U1NMICovCisKKyAgICBpZiAoIG1hc2sgIT0gMCAmJiBtYXNrID09IHRuY19sc19tYXNrICkKKyAg ICAgICAgcmV0dXJuKHRuY19sc19tYXNrKTsKKworICAgIHNiX291dFtpKytdID0gKENIQVIpIElB QzsgICAgICAgICAgICAgICAgIC8qIEkgQW0gYSBDb21tYW5kICovCisgICAgc2Jfb3V0W2krK10g PSAoQ0hBUikgU0I7ICAgICAgICAgICAgICAgICAgLyogU3VibmVnb3RpYXRpb24gKi8KKyAgICBz Yl9vdXRbaSsrXSA9IFRFTE9QVF9DT01QT1JUOyAgICAgICAgICAgICAvKiBDb21Qb3J0ICovCisg ICAgc2Jfb3V0W2krK10gPSBUTkNfQzJTX1NFVF9MU19NQVNLOworICAgIHNiX291dFtpKytdID0g KHVuc2lnbmVkIGNoYXIpKG1hc2sgJiAweEZGKTsKKyAgICBpZiAoc2Jfb3V0W2ktMV0gPT0gSUFD ICkKKyAgICAgIHNiX291dFtpKytdID0gSUFDOworICAgIHNiX291dFtpKytdID0gKENIQVIpIElB QzsgICAgICAgICAgICAgICAgIC8qIEVuZCBvZiBTdWJuZWdvdGlhdGlvbiAqLworICAgIHNiX291 dFtpKytdID0gKENIQVIpIFNFOyAgICAgICAgICAgICAgICAgIC8qIG1hcmtlZCBieSBJQUMgU0Ug Ki8KKworI2lmZGVmIERFQlVHCisgICAgaWYgKGRlYmxvZyB8fCB0bl9kZWIgfHwgZGVic2VzKSB7 CisgICAgICAgIGNrbWFreG1zZyh0bl9tc2dfb3V0LFROX01TR19MRU4sCisgICAgICAgICAgICAg ICAgICAiVEVMTkVUIFNFTlQgU0IgIixURUxPUFQoVEVMT1BUX0NPTVBPUlQpLAorICAgICAgICAg ICAgICAgICAgIiBTRVQtTElORVNUQVRFLU1BU0sgIiwKKyAgICAgICAgICAgICAgICAgIGNraXRv YShtYXNrICYgMHhGRiksCisgICAgICAgICAgICAgICAgICAiIElBQyBTRSIsIE5VTEwsCisgICAg ICAgICAgICAgICAgICBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCk7CisgICAgfQorI2Vu ZGlmIC8qIERFQlVHICovCisjaWZkZWYgT1MyCisgICAgUmVxdWVzdFRlbG5ldE11dGV4KCBTRU1f SU5ERUZJTklURV9XQUlUICk7CisjZW5kaWYKKyNpZmRlZiBERUJVRworICAgIGRlYnVnKEYxMDAs dG5fbXNnX291dCwiIiwwKTsKKyAgICBpZiAodG5fZGViIHx8IGRlYnNlcykgdG5fZGVidWcodG5f bXNnX291dCk7CisjZW5kaWYgLyogREVCVUcgKi8KKyAgICByYyA9ICh0dG9sKChDSEFSICopc2Jf b3V0LGkpIDwgMCk7ICAgICAgLyogU2VuZCBpdC4gKi8KKyNpZmRlZiBPUzIKKyAgICBSZWxlYXNl VGVsbmV0TXV0ZXgoKTsKKyNlbmRpZgorICAgIGlmIChyYykKKyAgICAgIHJldHVybigtMSk7CisK KyAgICB0bmNfbHNfbWFzayA9IG1hc2s7CisgICAgZGVidWcoRjExMSwidG5jX3NldF9sc19tYXNr IiwiZW5kIix0bmNfbHNfbWFzayk7CisgICAgcmV0dXJuKDApOworfQorCitpbnQKKyNpZmRlZiBD S19BTlNJQwordG5jX2dldF9sc19tYXNrKHZvaWQpCisjZWxzZSAvKiBDS19BTlNJQyAqLwordG5j X2dldF9sc19tYXNrKCkKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogdG5jX2dldF9sc19tYXNr ICovIHsKKyAgICBkZWJ1ZyhGMTAxLCJ0bmNfZ2V0X2xzX21hc2siLCIiLHRuY19sc19tYXNrKTsK KyAgICByZXR1cm4odG5jX2xzX21hc2spOworfQorCitpbnQKKyNpZmRlZiBDS19BTlNJQwordG5j X2dldF9scyh2b2lkKQorI2Vsc2UgLyogQ0tfQU5TSUMgKi8KK3RuY19nZXRfbHMoKQorI2VuZGlm IC8qIENLX0FOU0lDICovCisvKiB0bmNfZ2V0X2xzICovIHsKKyAgICBpbnQgbHMgPSB0bmNfbHM7 CisgICAgZGVidWcoRjEwMSwidG5jX2dldF9scyIsIiIsdG5jX2xzKTsKKyAgICByZXR1cm4obHMp OworfQorCitpbnQKKyNpZmRlZiBDS19BTlNJQwordG5jX3NldF9tc19tYXNrKGludCBtYXNrKQor I2Vsc2UgLyogQ0tfQU5TSUMgKi8KK3RuY19zZXRfbXNfbWFzayhtYXNrKSBpbnQgbWFzazsKKyNl bmRpZiAvKiBDS19BTlNJQyAqLworLyogdG5jX3NldF9tc19tYXNrICovIHsKKyAgICAvKiBJQUMg U0IgQ09NX1BPUlQgU0VUX01PREVNU1RBVEVfTUFTSyA8dmFsdWUoMSk+IElBQyBTRSAqLworICAg IC8qICAgICAgICBCaXQgICAgICAgTWVhbmluZworICAgICAqICAgICAgICAgIDAgICAgICAgRGVs dGEgQ2xlYXIgVG8gU2VuZAorICAgICAqICAgICAgICAgIDEgICAgICAgRGVsdGEgRGF0YSBTZXQg UmVhZHkKKyAgICAgKiAgICAgICAgICAyICAgICAgIFRyYWlsaW5nIEVkZ2UgUmluZyBEZXRlY3Rv cgorICAgICAqICAgICAgICAgIDMgICAgICAgRGVsdGEgUmVjZWl2ZSBMaW5lIFNpZ25hbCAoQ2Fy cmllcikgRGV0ZWN0CisgICAgICogICAgICAgICAgNCAgICAgICBDbGVhciBUbyBTZW5kIFNpZ25h bCBTdGF0ZQorICAgICAqICAgICAgICAgIDUgICAgICAgRGF0YS1TZXQtUmVhZHkgU2lnbmFsIFN0 YXRlCisgICAgICogICAgICAgICAgNiAgICAgICBSaW5nIEluZGljYXRvcgorICAgICAqICAgICAg ICAgIDcgICAgICAgUmVjZWl2ZSBMaW5lIFNpZ25hbCAoQ2FycmllcikgRGV0ZWN0CisgICAgICov CisKKyAgICBpbnQgaSA9IDAsIHJjOworCisgICAgZGVidWcoRjExMSwidG5jX3NldF9tc19tYXNr IiwiYmVnaW4iLG1hc2spOworICAgIGlmICh0dG5ldCAhPSBORVRfVENQQikgcmV0dXJuKDApOwor ICAgIGlmICh0dG5wcm90byAhPSBOUF9URUxORVQpIHJldHVybigwKTsKKworICAgIGlmICghVEVM T1BUX01FKFRFTE9QVF9DT01QT1JUKSkgcmV0dXJuKDApOworCisjaWZkZWYgQ0tfU1NMCisgICAg aWYgKFRFTE9QVF9TQihURUxPUFRfU1RBUlRfVExTKS5zdGFydF90bHMubWVfZm9sbG93cykgewor ICAgICAgICByZXR1cm4oMCk7CisgICAgfQorI2VuZGlmIC8qIENLX1NTTCAqLworCisgICAgaWYg KCBtYXNrICE9IDAgJiYgbWFzayA9PSB0bmNfbXNfbWFzayApCisgICAgICAgIHJldHVybih0bmNf bXNfbWFzayk7CisKKyAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBJQUM7ICAgICAgICAgICAgICAg ICAvKiBJIEFtIGEgQ29tbWFuZCAqLworICAgIHNiX291dFtpKytdID0gKENIQVIpIFNCOyAgICAg ICAgICAgICAgICAgIC8qIFN1Ym5lZ290aWF0aW9uICovCisgICAgc2Jfb3V0W2krK10gPSBURUxP UFRfQ09NUE9SVDsgICAgICAgICAgICAgLyogQ29tUG9ydCAqLworICAgIHNiX291dFtpKytdID0g VE5DX0MyU19TRVRfTVNfTUFTSzsKKyAgICBzYl9vdXRbaSsrXSA9ICh1bnNpZ25lZCBjaGFyKSht YXNrICYgMHhGRik7CisgICAgaWYgKHNiX291dFtpLTFdID09IElBQyApCisgICAgICBzYl9vdXRb aSsrXSA9IElBQzsKKyAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBJQUM7ICAgICAgICAgICAgICAg ICAvKiBFbmQgb2YgU3VibmVnb3RpYXRpb24gKi8KKyAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBT RTsgICAgICAgICAgICAgICAgICAvKiBtYXJrZWQgYnkgSUFDIFNFICovCisKKyNpZmRlZiBERUJV RworICAgIGlmIChkZWJsb2cgfHwgdG5fZGViIHx8IGRlYnNlcykgeworICAgICAgICBja21ha3ht c2codG5fbXNnX291dCxUTl9NU0dfTEVOLAorICAgICAgICAgICAgICAgICAgIlRFTE5FVCBTRU5U IFNCICIsVEVMT1BUKFRFTE9QVF9DT01QT1JUKSwKKyAgICAgICAgICAgICAgICAgICIgU0VULU1P REVNU1RBVEUtTUFTSyAiLAorICAgICAgICAgICAgICAgICAgY2tpdG9hKG1hc2sgJiAweEZGKSwK KyAgICAgICAgICAgICAgICAgICIgSUFDIFNFIiwgTlVMTCwKKyAgICAgICAgICAgICAgICAgIE5V TEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMKTsKKyAgICB9CisjZW5kaWYgLyogREVCVUcgKi8K KyNpZmRlZiBPUzIKKyAgICBSZXF1ZXN0VGVsbmV0TXV0ZXgoIFNFTV9JTkRFRklOSVRFX1dBSVQg KTsKKyNlbmRpZgorI2lmZGVmIERFQlVHCisgICAgZGVidWcoRjEwMCx0bl9tc2dfb3V0LCIiLDAp OworICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKSB0bl9kZWJ1Zyh0bl9tc2dfb3V0KTsKKyNlbmRp ZiAvKiBERUJVRyAqLworICAgIHJjID0gKHR0b2woKENIQVIgKilzYl9vdXQsaSkgPCAwKTsgICAg ICAvKiBTZW5kIGl0LiAqLworI2lmZGVmIE9TMgorICAgIFJlbGVhc2VUZWxuZXRNdXRleCgpOwor I2VuZGlmCisgICAgaWYgKHJjKQorICAgICAgcmV0dXJuKC0xKTsKKworICAgIHRuY19tc19tYXNr ID0gbWFzazsKKyAgICBkZWJ1ZyhGMTExLCJ0bmNfc2V0X21zX21hc2siLCJlbmQiLHRuY19tc19t YXNrKTsKKyAgICByZXR1cm4oMCk7Cit9CisKK2ludAorI2lmZGVmIENLX0FOU0lDCit0bmNfZ2V0 X21zX21hc2sodm9pZCkKKyNlbHNlIC8qIENLX0FOU0lDICovCit0bmNfZ2V0X21zX21hc2soKQor I2VuZGlmIC8qIENLX0FOU0lDICovCisvKiB0bmNfZ2V0X21zX21hc2sgKi8geworICAgIGRlYnVn KEYxMDEsInRuY19nZXRfZ3NfbWFzayIsIiIsdG5jX21zX21hc2spOworICAgIHJldHVybih0bmNf bXNfbWFzayk7Cit9CisKK2ludAorI2lmZGVmIENLX0FOU0lDCit0bmNfZ2V0X21zKHZvaWQpCisj ZWxzZSAvKiBDS19BTlNJQyAqLwordG5jX2dldF9tcygpCisjZW5kaWYgLyogQ0tfQU5TSUMgKi8K Ky8qIHRuY19nZXRfbXMgKi8geworICAgIGludCBtcyA9IHRuY19tczsKKyAgICBkZWJ1ZyhGMTAx LCJ0bmNfZ2V0X21zIiwiIix0bmNfbXMpOworICAgIHJldHVybihtcyk7Cit9CisKK2ludAorI2lm ZGVmIENLX0FOU0lDCit0bmNfc2VuZF9wdXJnZV9kYXRhKGludCBtb2RlKQorI2Vsc2UgLyogQ0tf QU5TSUMgKi8KK3RuY19zZW5kX3B1cmdlX2RhdGEobW9kZSkgaW50IG1vZGU7CisjZW5kaWYgLyog Q0tfQU5TSUMgKi8KKy8qIHRuY19zZW5kX3B1cmdlX2RhdGEgKi8geworICAgIC8qIElBQyBTQiBD T01fUE9SVCBQVVJHRV9EQVRBIDx2YWx1ZSgxKT4gSUFDIFNFICovCisgICAgLyogICAgICAgIFZh bHVlICAgICBNZWFuaW5nCisgICAgICogICAgICAgICAgMSAgICAgICBQdXJnZSBhY2Nlc3Mgc2Vy dmVyIHJlY2VpdmUgZGF0YSBidWZmZXIKKyAgICAgKiAgICAgICAgICAyICAgICAgIFB1cmdlIGFj Y2VzcyBzZXJ2ZXIgdHJhbnNtaXQgZGF0YSBidWZmZXIKKyAgICAgKiAgICAgICAgICAzICAgICAg IFB1cmdlIGFjY2VzcyBzZXJ2ZXIgcmVjZWl2ZSBhbmQgdHJhbnNtaXQgZGF0YSBidWZmZXJzCisg ICAgICovCisgICAgLyogTm8gcmVzcG9uc2UgKi8KKyAgICBpbnQgaSA9IDAsIHJjOworCisgICAg ZGVidWcoRjExMSwidG5jX3NlbmRfcHVyZ2VfZGF0YSIsImJlZ2luIixtb2RlKTsKKyAgICBpZiAo dHRuZXQgIT0gTkVUX1RDUEIpIHJldHVybigwKTsKKyAgICBpZiAodHRucHJvdG8gIT0gTlBfVEVM TkVUKSByZXR1cm4oMCk7CisKKyAgICBpZiAoIVRFTE9QVF9NRShURUxPUFRfQ09NUE9SVCkpIHJl dHVybigwKTsKKworI2lmZGVmIENLX1NTTAorICAgIGlmIChURUxPUFRfU0IoVEVMT1BUX1NUQVJU X1RMUykuc3RhcnRfdGxzLm1lX2ZvbGxvd3MpIHsKKyAgICAgICAgcmV0dXJuKDApOworICAgIH0K KyNlbmRpZiAvKiBDS19TU0wgKi8KKworICAgIGlmICggIShtb2RlID49IDEgJiYgbW9kZSA8PSAz KSApCisgICAgICAgIHJldHVybigwKTsKKworICAgIHNiX291dFtpKytdID0gKENIQVIpIElBQzsg ICAgICAgICAgICAgICAgIC8qIEkgQW0gYSBDb21tYW5kICovCisgICAgc2Jfb3V0W2krK10gPSAo Q0hBUikgU0I7ICAgICAgICAgICAgICAgICAgLyogU3VibmVnb3RpYXRpb24gKi8KKyAgICBzYl9v dXRbaSsrXSA9IFRFTE9QVF9DT01QT1JUOyAgICAgICAgICAgICAvKiBDb21Qb3J0ICovCisgICAg c2Jfb3V0W2krK10gPSBUTkNfQzJTX1BVUkdFOworICAgIHNiX291dFtpKytdID0gKHVuc2lnbmVk IGNoYXIpKG1vZGUgJiAweEZGKTsKKyAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBJQUM7ICAgICAg ICAgICAgICAgICAvKiBFbmQgb2YgU3VibmVnb3RpYXRpb24gKi8KKyAgICBzYl9vdXRbaSsrXSA9 IChDSEFSKSBTRTsgICAgICAgICAgICAgICAgICAvKiBtYXJrZWQgYnkgSUFDIFNFICovCisKKyNp ZmRlZiBERUJVRworICAgIGlmIChkZWJsb2cgfHwgdG5fZGViIHx8IGRlYnNlcykgeworICAgICAg ICBja21ha3htc2codG5fbXNnX291dCxUTl9NU0dfTEVOLAorICAgICAgICAgICAgICAgICAgIlRF TE5FVCBTRU5UIFNCICIsVEVMT1BUKFRFTE9QVF9DT01QT1JUKSwKKyAgICAgICAgICAgICAgICAg ICIgUFVSR0UtREFUQSAiLAorICAgICAgICAgICAgICAgICAgY2tpdG9hKG1vZGUgJiAweEZGKSwK KyAgICAgICAgICAgICAgICAgICIgSUFDIFNFIiwgTlVMTCwKKyAgICAgICAgICAgICAgICAgIE5V TEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMKTsKKyAgICB9CisjZW5kaWYgLyogREVCVUcgKi8K KyNpZmRlZiBPUzIKKyAgICBSZXF1ZXN0VGVsbmV0TXV0ZXgoIFNFTV9JTkRFRklOSVRFX1dBSVQg KTsKKyNlbmRpZgorI2lmZGVmIERFQlVHCisgICAgZGVidWcoRjEwMCx0bl9tc2dfb3V0LCIiLDAp OworICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKSB0bl9kZWJ1Zyh0bl9tc2dfb3V0KTsKKyNlbmRp ZiAvKiBERUJVRyAqLworICAgIHJjID0gKHR0b2woKENIQVIgKilzYl9vdXQsaSkgPCAwKTsgICAg ICAvKiBTZW5kIGl0LiAqLworI2lmZGVmIE9TMgorICAgIFJlbGVhc2VUZWxuZXRNdXRleCgpOwor I2VuZGlmCisgICAgaWYgKHJjKQorICAgICAgcmV0dXJuKC0xKTsKKyAgICBkZWJ1ZyhGMTEwLCJ0 bmNfc2VuZF9wdXJnZV9kYXRhIiwiZW5kIiwwKTsKKyAgICByZXR1cm4oMCk7Cit9CisKK2ludAor I2lmZGVmIENLX0FOU0lDCit0bmNfZmxvd19zdXNwZW5kZWQodm9pZCkKKyNlbHNlIC8qIENLX0FO U0lDICovCit0bmNfZmxvd19zdXNwZW5kZWQoKQorI2VuZGlmIC8qIENLX0FOU0lDICovCisvKiB0 bmNfZmxvd19zdXNwZW5kZWQgKi8geworICAgIGRlYnVnKEYxMTEsInRuY19mbG93X3N1c3BlbmRl ZCIsIiIsdG5jX3N1c3BlbmRfeG1pdCk7CisgICAgcmV0dXJuKHRuY19zdXNwZW5kX3htaXQpOwor fQorCitpbnQKKyNpZmRlZiBDS19BTlNJQwordG5jX3N1c3BlbmRfZmxvdyh2b2lkKQorI2Vsc2Ug LyogQ0tfQU5TSUMgKi8KK3RuY19zdXNwZW5kX2Zsb3coKQorI2VuZGlmIC8qIENLX0FOU0lDICov CisvKiB0bmNfc3VzcGVuZF9mbG93ICovIHsKKyAgICAvKiBJQUMgU0IgQ09NX1BPUlQgRkxPV0NP TlRST0xfU1VTUEVORCBJQUMgU0UgKi8KKyAgICBpbnQgaSA9IDAsIHJjOworCisgICAgZGVidWco RjExMCwidG5jX3N1c3BlbmRfZmxvdyIsImJlZ2luIiwwKTsKKyAgICBpZiAodHRuZXQgIT0gTkVU X1RDUEIpIHJldHVybigwKTsKKyAgICBpZiAodHRucHJvdG8gIT0gTlBfVEVMTkVUKSByZXR1cm4o MCk7CisKKyAgICBpZiAoIVRFTE9QVF9NRShURUxPUFRfQ09NUE9SVCkpIHJldHVybigwKTsKKwor I2lmZGVmIENLX1NTTAorICAgIGlmIChURUxPUFRfU0IoVEVMT1BUX1NUQVJUX1RMUykuc3RhcnRf dGxzLm1lX2ZvbGxvd3MpIHsKKyAgICAgICAgcmV0dXJuKDApOworICAgIH0KKyNlbmRpZiAvKiBD S19TU0wgKi8KKworICAgIHNiX291dFtpKytdID0gKENIQVIpIElBQzsgICAgICAgICAgICAgICAg IC8qIEkgQW0gYSBDb21tYW5kICovCisgICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgU0I7ICAgICAg ICAgICAgICAgICAgLyogU3VibmVnb3RpYXRpb24gKi8KKyAgICBzYl9vdXRbaSsrXSA9IFRFTE9Q VF9DT01QT1JUOyAgICAgICAgICAgICAvKiBDb21Qb3J0ICovCisgICAgc2Jfb3V0W2krK10gPSBU TkNfQzJTX0ZMT1dfU1VTUEVORDsKKyAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBJQUM7ICAgICAg ICAgICAgICAgICAvKiBFbmQgb2YgU3VibmVnb3RpYXRpb24gKi8KKyAgICBzYl9vdXRbaSsrXSA9 IChDSEFSKSBTRTsgICAgICAgICAgICAgICAgICAvKiBtYXJrZWQgYnkgSUFDIFNFICovCisKKyNp ZmRlZiBERUJVRworICAgIGlmIChkZWJsb2cgfHwgdG5fZGViIHx8IGRlYnNlcykgeworICAgICAg ICBja21ha21zZyh0bl9tc2dfb3V0LFROX01TR19MRU4sCisgICAgICAgICAgICAgICAgICJURUxO RVQgU0VOVCBTQiAiLFRFTE9QVChURUxPUFRfQ09NUE9SVCksCisgICAgICAgICAgICAgICAgICIg RkxPV0NPTlRST0wtU1VTUEVORCBJQUMgU0UiLCBOVUxMKTsKKyAgICB9CisjZW5kaWYgLyogREVC VUcgKi8KKyNpZmRlZiBPUzIKKyAgICBSZXF1ZXN0VGVsbmV0TXV0ZXgoIFNFTV9JTkRFRklOSVRF X1dBSVQgKTsKKyNlbmRpZgorI2lmZGVmIERFQlVHCisgICAgZGVidWcoRjEwMCx0bl9tc2dfb3V0 LCIiLDApOworICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKSB0bl9kZWJ1Zyh0bl9tc2dfb3V0KTsK KyNlbmRpZiAvKiBERUJVRyAqLworICAgIHJjID0gKHR0b2woKENIQVIgKilzYl9vdXQsaSkgPCAw KTsgICAgICAvKiBTZW5kIGl0LiAqLworI2lmZGVmIE9TMgorICAgIFJlbGVhc2VUZWxuZXRNdXRl eCgpOworI2VuZGlmCisgICAgaWYgKHJjKQorICAgICAgICByZXR1cm4oLTEpOworICAgIGRlYnVn KEYxMTAsInRuY19zdXNwZW5kX2Zsb3ciLCJlbmQiLDApOworICAgIHJldHVybigwKTsKK30KKwor aW50CisjaWZkZWYgQ0tfQU5TSUMKK3RuY19yZXN1bWVfZmxvdyh2b2lkKQorI2Vsc2UgLyogQ0tf QU5TSUMgKi8KK3RuY19yZXN1bWVfZmxvdygpCisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIHRu Y19yZXN1bWVfZmxvdyAqLyB7CisgICAgLyogSUFDIFNCIENPTV9QT1JUIEZMT1dDT05UUk9MX1JF U1VNRSBJQUMgU0UgKi8KKyAgICBpbnQgaSA9IDAsIHJjOworCisgICAgZGVidWcoRjExMCwidG5j X3Jlc3VtZV9mbG93IiwiYmVnaW4iLDApOworICAgIGlmICh0dG5ldCAhPSBORVRfVENQQikgcmV0 dXJuKDApOworICAgIGlmICh0dG5wcm90byAhPSBOUF9URUxORVQpIHJldHVybigwKTsKKworICAg IGlmICghVEVMT1BUX01FKFRFTE9QVF9DT01QT1JUKSkgcmV0dXJuKDApOworCisjaWZkZWYgQ0tf U1NMCisgICAgaWYgKFRFTE9QVF9TQihURUxPUFRfU1RBUlRfVExTKS5zdGFydF90bHMubWVfZm9s bG93cykgeworICAgICAgICByZXR1cm4oMCk7CisgICAgfQorI2VuZGlmIC8qIENLX1NTTCAqLwor CisgICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgSUFDOyAgICAgICAgICAgICAgICAgLyogSSBBbSBh IENvbW1hbmQgKi8KKyAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBTQjsgICAgICAgICAgICAgICAg ICAvKiBTdWJuZWdvdGlhdGlvbiAqLworICAgIHNiX291dFtpKytdID0gVEVMT1BUX0NPTVBPUlQ7 ICAgICAgICAgICAgIC8qIENvbVBvcnQgKi8KKyAgICBzYl9vdXRbaSsrXSA9IFROQ19DMlNfRkxP V19SRVNVTUU7CisgICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgSUFDOyAgICAgICAgICAgICAgICAg LyogRW5kIG9mIFN1Ym5lZ290aWF0aW9uICovCisgICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgU0U7 ICAgICAgICAgICAgICAgICAgLyogbWFya2VkIGJ5IElBQyBTRSAqLworCisjaWZkZWYgREVCVUcK KyAgICBpZiAoZGVibG9nIHx8IHRuX2RlYiB8fCBkZWJzZXMpIHsKKyAgICAgICAgY2ttYWttc2co dG5fbXNnX291dCxUTl9NU0dfTEVOLAorICAgICAgICAgICAgICAgICAiVEVMTkVUIFNFTlQgU0Ig IixURUxPUFQoVEVMT1BUX0NPTVBPUlQpLAorICAgICAgICAgICAgICAgICAiIEZMT1dDT05UUk9M LVJFU1VNRSBJQUMgU0UiLCBOVUxMKTsKKyAgICB9CisjZW5kaWYgLyogREVCVUcgKi8KKyNpZmRl ZiBPUzIKKyAgICBSZXF1ZXN0VGVsbmV0TXV0ZXgoIFNFTV9JTkRFRklOSVRFX1dBSVQgKTsKKyNl bmRpZgorI2lmZGVmIERFQlVHCisgICAgZGVidWcoRjEwMCx0bl9tc2dfb3V0LCIiLDApOworICAg IGlmICh0bl9kZWIgfHwgZGVic2VzKSB0bl9kZWJ1Zyh0bl9tc2dfb3V0KTsKKyNlbmRpZiAvKiBE RUJVRyAqLworICAgIHJjID0gKHR0b2woKENIQVIgKilzYl9vdXQsaSkgPCAwKTsgICAgICAvKiBT ZW5kIGl0LiAqLworI2lmZGVmIE9TMgorICAgIFJlbGVhc2VUZWxuZXRNdXRleCgpOworI2VuZGlm CisgICAgaWYgKHJjKQorICAgICAgICByZXR1cm4oLTEpOworICAgIGRlYnVnKEYxMTAsInRuY19y ZXN1bWVfZmxvdyIsImVuZCIsMCk7CisgICAgcmV0dXJuKDApOworfQorCitpbnQKKyNpZmRlZiBD S19BTlNJQwordG5zZXRmbG93KGludCBuZmxvdykKKyNlbHNlCit0bnNldGZsb3cobmZsb3cpIGlu dCBuZmxvdzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogdG5zZXRmbG93ICovIHsKKworICAg IGludCByYyA9IC0xOworCisgICAgZGVidWcoRjExMSwidG5zZXRmbG93IiwiYmVnaW4iLG5mbG93 KTsKKyAgICBpZiAodHRuZXQgIT0gTkVUX1RDUEIgfHwgdHRucHJvdG8gIT0gTlBfVEVMTkVUKQor ICAgICAgICByZXR1cm4oLTEpOworCisgICAgaWYgKFRFTE9QVF9NRShURUxPUFRfQ09NUE9SVCkp IHsKKyAgICAgICAgc3dpdGNoKG5mbG93KSB7CisgICAgICAgICAgY2FzZSBGTE9fWE9OWDoKKyAg ICAgICAgICAgIHJjID0gdG5jX3NldF9vZmxvdygKKyAgICAgICAgICAgICAgICAgVE5DX0NUTF9P RkxPV19YT05fWE9GRgorICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgaWYgKHJjID49 IDApCisgICAgICAgICAgICAgIHJjID0gdG5jX3NldF9pZmxvdygKKyAgICAgICAgICAgICAgICAg ICBUTkNfQ1RMX0lGTE9XX1hPTl9YT0ZGCisgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAg ICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgRkxPX1JUU0M6CisgICAgICAgICAgICByYyA9IHRu Y19zZXRfb2Zsb3coCisgICAgICAgICAgICAgICAgIFROQ19DVExfT0ZMT1dfUlRTX0NUUworICAg ICAgICAgICAgICAgICApOworICAgICAgICAgICAgaWYgKHJjID49IDApCisgICAgICAgICAgICAg IHJjID0gdG5jX3NldF9pZmxvdygKKyAgICAgICAgICAgICAgICAgICBUTkNfQ1RMX0lGTE9XX1JU U19DVFMKKyAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg ICAgY2FzZSBGTE9fS0VFUDoKKyAgICAgICAgICAgIC8qIGxlYXZlIHRoaW5ncyBleGFjdGx5IGFz IHRoZXkgYXJlICovCisgICAgICAgICAgICByYyA9IDA7CisgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgICBjYXNlIEZMT19OT05FOgorICAgICAgICAgIGNhc2UgRkxPX0RJQUw6ICAvKiBkaWFs aW5nIGhhY2sgKi8KKyAgICAgICAgICBjYXNlIEZMT19ESUFYOiAgLyogY2FuY2VsIGRpYWxpbmcg aGFjayAqLworICAgICAgICAgICAgcmMgPSB0bmNfc2V0X29mbG93KAorICAgICAgICAgICAgICAg ICBUTkNfQ1RMX09GTE9XX05PTkUKKyAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIGlm IChyYyA+PSAwKQorICAgICAgICAgICAgICByYyA9IHRuY19zZXRfaWZsb3coCisgICAgICAgICAg ICAgICAgICAgVE5DX0NUTF9JRkxPV19OT05FCisgICAgICAgICAgICAgICAgICAgKTsKKyAgICAg ICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgRkxPX0RUUkM6CisgICAgICAgICAgY2FzZSBG TE9fRVRYQToKKyAgICAgICAgICBjYXNlIEZMT19TVFJHOgorICAgICAgICAgIGNhc2UgRkxPX0RU UlQ6CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIC8qIG5vdCBzdXBwb3J0ZWQgKi8K KyAgICAgICAgICAgIHJjID0gLTE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg IH0KKyAgICBkZWJ1ZyhGMTExLCJ0bnNldGZsb3ciLCJlbmQiLHJjKTsKKyAgICByZXR1cm4ocmMg Pj0gMCA/IDAgOiAtMSk7Cit9CisKK2ludAorI2lmZGVmIENLX0FOU0lDCit0bnNldHRpbmdzKGlu dCBwYXIsIGludCBzdG9wKQorI2Vsc2UKK3Ruc2V0dGluZ3MocGFyLCBzdG9wKSBpbnQgcGFyLCBz dG9wOworI2VuZGlmIC8qIENLX0FOU0lDICovCisvKiB0bnNldHRpbmdzICovIHsKKyAgICBpbnQg cmMgPSAtMTsKKyAgICBpbnQgZGF0YXNpemUgPSAwOworICAgIGV4dGVybiBpbnQgaHdwYXJpdHk7 CisKKyAgICBkZWJ1ZyhGMTExLCJ0bnNldHRpbmdzIGJlZ2luIiwicGFyIixwYXIpOworICAgIGRl YnVnKEYxMTEsInRuc2V0dGluZ3MgYmVnaW4iLCJzdG9wIixzdG9wKTsKKyAgICBpZiAodHRuZXQg IT0gTkVUX1RDUEIgfHwgdHRucHJvdG8gIT0gTlBfVEVMTkVUKQorICAgICAgcmV0dXJuKC0xKTsK KworICAgIGRhdGFzaXplID0gcGFyID8gVE5DX0RTXzcgOiBUTkNfRFNfODsKKyAgICBpZiAoIXBh cikgcGFyID0gaHdwYXJpdHk7CisKKyAgICBpZiAoVEVMT1BUX01FKFRFTE9QVF9DT01QT1JUKSkg eworICAgICAgICBzd2l0Y2ggKHBhcikgeworICAgICAgICAgIGNhc2UgJ2UnOgorICAgICAgICAg ICAgcmMgPSB0bmNfc2V0X3Bhcml0eShUTkNfUEFSX0VWRU4pOworICAgICAgICAgICAgaWYgKHJj ID49IDApCisgICAgICAgICAgICAgIHJjID0gdG5jX3NldF9kYXRhc2l6ZShkYXRhc2l6ZSk7Cisg ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlICdvJzoKKyAgICAgICAgICAgIHJjID0g dG5jX3NldF9wYXJpdHkoVE5DX1BBUl9PREQpOworICAgICAgICAgICAgaWYgKHJjID49IDApCisg ICAgICAgICAgICAgIHJjID0gdG5jX3NldF9kYXRhc2l6ZShkYXRhc2l6ZSk7CisgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgICBjYXNlICdtJzoKKyAgICAgICAgICAgIHJjID0gdG5jX3NldF9w YXJpdHkoVE5DX1BBUl9NQVJLKTsKKyAgICAgICAgICAgIGlmIChyYyA+PSAwKQorICAgICAgICAg ICAgICByYyA9IHRuY19zZXRfZGF0YXNpemUoZGF0YXNpemUpOworICAgICAgICAgICAgYnJlYWs7 CisgICAgICAgICAgY2FzZSAncyc6CisgICAgICAgICAgICByYyA9IHRuY19zZXRfcGFyaXR5KFRO Q19QQVJfU1BBQ0UpOworICAgICAgICAgICAgaWYgKHJjID49IDApCisgICAgICAgICAgICAgIHJj ID0gdG5jX3NldF9kYXRhc2l6ZShkYXRhc2l6ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgICBjYXNlIDA6CisgICAgICAgICAgY2FzZSAnbic6CisgICAgICAgICAgICByYyA9IHRuY19z ZXRfcGFyaXR5KFROQ19QQVJfTk9ORSk7CisgICAgICAgICAgICBpZiAocmMgPj0gMCkKKyAgICAg ICAgICAgICAgcmMgPSB0bmNfc2V0X2RhdGFzaXplKGRhdGFzaXplKTsKKyAgICAgICAgICAgIGJy ZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAvKiBubyBjaGFuZ2UgKi8KKyAg ICAgICAgICAgIHJjID0gMDsKKyAgICAgICAgfQorICAgICAgICBzd2l0Y2goc3RvcCkgeworICAg ICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgIGlmIChyYyA+PSAwKQorICAgICAgICAgICAgICBy YyA9IHRuY19zZXRfc3RvcHNpemUoVE5DX1NCXzIpOworICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICAgY2FzZSAxOgorICAgICAgICAgICAgaWYgKHJjID49IDApCisgICAgICAgICAgICAgIHJj ID0gdG5jX3NldF9zdG9wc2l6ZShUTkNfU0JfMSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgLyogbm8gY2hhbmdlICovCisgICAgICAgICAgICBp ZiAocmMgPj0gMCkKKyAgICAgICAgICAgICAgcmMgPSAwOworICAgICAgICB9CisgICAgfQorICAg IGRlYnVnKEYxMTEsInRuc2V0dGluZ3MiLCJlbmQiLHJjKTsKKyAgICByZXR1cm4oKHJjID49IDAp ID8gMCA6IC0xKTsKK30KKworLyogIFQgTiBHIE0gRCBNICAtLSAgVGVsbmV0IEdldCBtb2RlbSBz aWduYWxzICAqLworLyoKKyBMb29rcyBmb3IgdGhlIG1vZGVtIHNpZ25hbHMgQ1RTLCBEU1IsIGFu ZCBDVFMsIGFuZCByZXR1cm5zIHRob3NlIHRoYXQgYXJlCisgb24gaW4gYXMgaXRzIHJldHVybiB2 YWx1ZSwgaW4gYSBiaXQgbWFzayBhcyBkZXNjcmliZWQgZm9yIHR0d21kbS4KKyBSZXR1cm5zOgor ICAtMyBOb3QgaW1wbGVtZW50ZWQKKyAgLTIgaWYgdGhlIGxpbmUgZG9lcyBub3QgaGF2ZSBtb2Rl bSBjb250cm9sCisgIC0xIG9uIGVycm9yLgorICA+PSAwIG9uIHN1Y2Nlc3MsIHdpdGggYSBiaXQg bWFzayBjb250YWluaW5nIHRoZSBtb2RlbSBzaWduYWxzIHRoYXQgYXJlIG9uLgorKi8KK2ludAor I2lmZGVmIENLX0FOU0lDCit0bmdtZG0odm9pZCkKKyNlbHNlCit0bmdtZG0oKQorI2VuZGlmIC8q IENLX0FOU0lDICovCisvKiB0bmdtZG0gKi8geworCisgICAgaW50IHJjID0gLTE7CisKKyAgICBk ZWJ1ZyhGMTEwLCJ0bmdtZG0iLCJiZWdpbiIsMCk7CisgICAgaWYgKHR0bmV0ICE9IE5FVF9UQ1BC IHx8IHR0bnByb3RvICE9IE5QX1RFTE5FVCkKKyAgICAgIHJldHVybigtMSk7CisKKyAgICBpZiAo VEVMT1BUX01FKFRFTE9QVF9DT01QT1JUKSkgeworICAgICAgICBpbnQgbW9kZW1zdGF0ZSA9IHRu Y19nZXRfbXMoKTsKKyAgICAgICAgaW50IG1vZGVtID0gMDsKKyAgICAgICAgaWYgKG1vZGVtc3Rh dGUgJiBUTkNfTVNfQ1RTX1NJRykKKyAgICAgICAgICBtb2RlbSB8PSBCTV9DVFM7CisgICAgICAg IGlmIChtb2RlbXN0YXRlICYgVE5DX01TX0RTUl9TSUcpCisgICAgICAgICAgbW9kZW0gfD0gQk1f RFNSOworICAgICAgICBpZiAobW9kZW1zdGF0ZSAmIFROQ19NU19SSV9TSUcpCisgICAgICAgICAg bW9kZW0gfD0gQk1fUk5HOworICAgICAgICBpZiAobW9kZW1zdGF0ZSAmIFROQ19NU19STFNEX1NJ RykKKyAgICAgICAgICBtb2RlbSB8PSBCTV9EQ0Q7CisgICAgICAgIGRlYnVnKEYxMTEsInRuZ21k bSIsImVuZCIsbW9kZW0pOworICAgICAgICByZXR1cm4obW9kZW0pOworICAgIH0gZWxzZSB7Cisg ICAgICAgIGRlYnVnKEYxMTEsInRuZ21kbSIsImVuZCIsLTIpOworICAgICAgICByZXR1cm4oLTIp OworICAgIH0KK30KKworaW50CisjaWZkZWYgQ0tfQU5TSUMKK3Ruc25kYihsb25nIHdhaXQpCisj ZWxzZQordG5zbmRiKHdhaXQpIGxvbmcgd2FpdDsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyog dG5zbmRiICovIHsKKyAgICBpbnQgcmMgPSAtMTsKKworICAgIGRlYnVnKEYxMTEsInRuc25kYiIs ImJlZ2luIix3YWl0KTsKKyAgICBpZiAodHRuZXQgIT0gTkVUX1RDUEIgfHwgdHRucHJvdG8gIT0g TlBfVEVMTkVUKQorICAgICAgcmV0dXJuKC0xKTsKKworICAgIGlmIChURUxPUFRfTUUoVEVMT1BU X0NPTVBPUlQpKSB7CisgICAgICAgIHJjICA9IHRuY19zZXRfYnJlYWtfc3RhdGUoMSk7CisgICAg ICAgIGlmIChyYyA+PSAwKSB7CisgICAgICAgICAgICBtc2xlZXAod2FpdCk7ICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIFpaWnp6eiAqLworICAgICAgICAgICAgcmMgPSB0bmNfc2V0X2JyZWFr X3N0YXRlKDApOworICAgICAgICB9CisgICAgfQorICAgIGRlYnVnKEYxMTEsInRuc25kYiIsImVu ZCIscmMpOworICAgIHJldHVybigocmMgPj0gMCkgPyAwIDogLTEpOworfQorI2VuZGlmIC8qIFRO X0NPTVBPUlQgKi8KKyNlbmRpZiAvKiBUTkNPREUgKi8KCmRpZmYgLS1naXQgYS9ja2VybWl0LTku MC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrY3RlbC5oIGIvY2tlcm1pdC05LjAuMzAyLWJ1 aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2N0ZWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi4yNDJlMzk2Ci0tLSAvZGV2L251bGwKKysrIGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxk L2NrZXJtaXQtOS4wLjMwMi9ja2N0ZWwuaApAQCAtMCwwICsxLDEzMzYgQEAKKy8qIGNrY3RlbC5o IC0tIFN5bWJvbCBhbmQgbWFjcm8gZGVmaW5pdGlvbnMgZm9yIEMtS2VybWl0IHRlbG5ldCBzdXBw b3J0ICovCisKKy8qCisgIEF1dGhvcnM6IEplZmZyZXkgRSBBbHRtYW4gPGphbHRtYW5Ac2VjdXJl LWVuZHBvaW50cy5jb20+LAorICAgICAgICAgICAgICBTZWN1cmUgRW5kcG9pbnRzIEluYy4sIE5l dyBZb3JrIENpdHkKKyAgICAgICAgICAgRnJhbmsgZGEgQ3J1eiA8ZmRjQGNvbHVtYmlhLmVkdT4K KyAgQ29sdW1iaWEgVW5pdmVyc2l0eSBBY2FkZW1pYyBJbmZvcm1hdGlvbiBTeXN0ZW1zLCBOZXcg WW9yayBDaXR5LgorCisgIENvcHlyaWdodCAoQykgMTk4NSwgMjAwOSwKKyAgICBUcnVzdGVlcyBv ZiBDb2x1bWJpYSBVbml2ZXJzaXR5IGluIHRoZSBDaXR5IG9mIE5ldyBZb3JrLgorICAgIEFsbCBy aWdodHMgcmVzZXJ2ZWQuICBTZWUgdGhlIEMtS2VybWl0IENPUFlJTkcuVFhUIGZpbGUgb3IgdGhl CisgICAgY29weXJpZ2h0IHRleHQgaW4gdGhlIGNrY21haS5jIG1vZHVsZSBmb3IgZGlzY2xhaW1l ciBhbmQgcGVybWlzc2lvbnMuCisKKyAgTm90ZXM6CisgIC4gVGhpcyBmaWxlIHNob3VsZCBiZSB1 c2VkIGluIHBsYWNlIG9mICJhcnBhL3RlbG5ldC5oIgorICAuIE9ubHkgb25lIHNvdXJjZSBmaWxl IHNob3VsZCBpbmNsdWRlICNkZWZpbmVzIGZvcgorICAgIFRFTENNRFMsIFRFTE9QVFMsIFRFTE9Q VF9TVEFURVMsIFNMQ19OQU1FUywgYW5kIEFVVEhfTkFNRVMuCisqLworCisjaWZuZGVmIENLQ1RF TF9ICisjZGVmaW5lIENLQ1RFTF9ICisjaWZkZWYgVE5DT0RFCisvKgorICBEZWZpbml0aW9ucyBm b3IgdGhlIFRFTE5FVCBwcm90b2NvbC4KKyAgY2FuJ3QgcmVseSBvbiBsaWJyYXJ5IGhlYWRlciBm aWxlcyBmb3IgYW55IG9mIHRoZW0uCisqLworI2lmZGVmIENPTU1FTlQKKy8qIEluIHNvbWUgY29t cGlsZXJzIHRoZXNlIGFyZSBwcm9uZSB0byBzaWduIGV4dGVuc2lvbiAqLworCisjaWZuZGVmIElB QyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRmlyc3QgdGhlIHRlbG5ldCBjb21tYW5k cyAqLworI2RlZmluZSBJQUMgMjU1CisjZW5kaWYgLyogSUFDICovCisjaWZuZGVmIERPTlQKKyNk ZWZpbmUgRE9OVCAyNTQKKyNlbmRpZiAvKiBET05UICovCisjaWZuZGVmIERPCisjZGVmaW5lIERP IDI1MworI2VuZGlmIC8qIERPICovCisjaWZuZGVmIFdPTlQKKyNkZWZpbmUgV09OVCAyNTIKKyNl bmRpZiAvKiBXT05UICovCisjaWZuZGVmIFdJTEwKKyNkZWZpbmUgV0lMTCAyNTEKKyNlbmRpZiAv KiBXSUxMICovCisjaWZuZGVmIFNCCisjZGVmaW5lIFNCIDI1MAorI2VuZGlmIC8qIFNCICovCisj aWZuZGVmIFROX0dBCisjZGVmaW5lIFROX0dBIDI0OQorI2VuZGlmIC8qIFROX0dBICovCisjaWZu ZGVmIFROX0VMCisjZGVmaW5lIFROX0VMIDI0OAorI2VuZGlmIC8qIFROX0VMICovCisjaWZuZGVm IFROX0VDCisjZGVmaW5lIFROX0VDIDI0NworI2VuZGlmIC8qIFROX0VDICovCisjaWZuZGVmIFRO X0FZVAorI2RlZmluZSBUTl9BWVQgMjQ2CisjZW5kaWYgLyogVE5fQVlUICovCisjaWZuZGVmIFRO X0FPCisjZGVmaW5lIFROX0FPIDI0NQorI2VuZGlmIC8qIFROX0FPICovCisjaWZuZGVmIFROX0lQ CisjZGVmaW5lIFROX0lQIDI0NAorI2VuZGlmIC8qIFROX0lQICovCisjaWZuZGVmIEJSRUFLCisj ZGVmaW5lIEJSRUFLIDI0MworI2VuZGlmIC8qIEJSRUFLICovCisjaWZuZGVmIFROX0RNCisjZGVm aW5lIFROX0RNIDI0MgorI2VuZGlmIC8qIFROX0RNICovCisjaWZuZGVmIFROX05PUAorI2RlZmlu ZSBUTl9OT1AgMjQxCisjZW5kaWYgLyogVE5fTk9QICovCisjaWZuZGVmIFNFCisjZGVmaW5lIFNF IDI0MAorI2VuZGlmIC8qIFNFICovCisjaWZuZGVmIFROX0VPUgorI2RlZmluZSBUTl9FT1IgMjM5 CisjZW5kaWYgLyogVE5fRU9SICovCisjaWZuZGVmIFROX0FCT1JUCisjZGVmaW5lIFROX0FCT1JU IDIzOAorI2VuZGlmIC8qIFROX0FCT1JUICovCisjaWZuZGVmIFROX1NVU1AKKyNkZWZpbmUgVE5f U1VTUCAyMzcKKyNlbmRpZiAvKiBUTl9TVVNQICovCisjaWZuZGVmIFROX0VPRgorI2RlZmluZSBU Tl9FT0YgMjM2CisjZW5kaWYgLyogVE5fRU9GICovCisjaWZuZGVmIExBU1RfVE5fQ01ECisjZGVm aW5lIExBU1RfVE5fQ01EIDIzNgorCisjZGVmaW5lIFROX1NBSyAyMDAgICAgICAgICAgICAgIC8q IElCTSBTZWN1cmUgQXR0ZW50aW9uIEtleSAqLworI2VuZGlmIC8qIExBU1RfVE5fQ01EICovCisj ZGVmaW5lIFNZTkNIICAgMjQyICAgICAgICAgICAgIC8qIGZvciB0ZWxmdW5jIGNhbGxzICovCisK KyNlbHNlCisvKiBIZXggbm90YXRpb24gc2VlbXMgdG8gc3VwcHJlc3MgdGhlIHN1Z24gZXh0ZW5z aW9uIGVmZmVjdCAqLworCisKKyNpZm5kZWYgSUFDICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBGaXJzdCB0aGUgdGVsbmV0IGNvbW1hbmRzICovCisjZGVmaW5lIElBQyAweGZmCisjZW5k aWYgLyogSUFDICovCisjaWZuZGVmIERPTlQKKyNkZWZpbmUgRE9OVCAweGZlCQkJLyogMjU0ICov CisjZW5kaWYgLyogRE9OVCAqLworI2lmbmRlZiBETworI2RlZmluZSBETyAweGZkCQkJCS8qIDI1 MyAqLworI2VuZGlmIC8qIERPICovCisjaWZuZGVmIFdPTlQKKyNkZWZpbmUgV09OVCAweGZjCQkJ LyogMjUyICovCisjZW5kaWYgLyogV09OVCAqLworI2lmbmRlZiBXSUxMCisjZGVmaW5lIFdJTEwg MHhmYgkJCS8qIDI1MSAqLworI2VuZGlmIC8qIFdJTEwgKi8KKyNpZm5kZWYgU0IKKyNkZWZpbmUg U0IgMHhmYQkJCQkvKiAyNTAgKi8KKyNlbmRpZiAvKiBTQiAqLworI2lmbmRlZiBUTl9HQQorI2Rl ZmluZSBUTl9HQSAweGY5CQkJLyogMjQ5ICovCisjZW5kaWYgLyogVE5fR0EgKi8KKyNpZm5kZWYg VE5fRUwKKyNkZWZpbmUgVE5fRUwgMHhmOAkJCS8qIDI0OCAqLworI2VuZGlmIC8qIFROX0VMICov CisjaWZuZGVmIFROX0VDCisjZGVmaW5lIFROX0VDIDB4ZjcJCQkvKiAyNDcgKi8KKyNlbmRpZiAv KiBUTl9FQyAqLworI2lmbmRlZiBUTl9BWVQKKyNkZWZpbmUgVE5fQVlUIDB4ZjYJCQkvKiAyNDYg Ki8KKyNlbmRpZiAvKiBUTl9BWVQgKi8KKyNpZm5kZWYgVE5fQU8KKyNkZWZpbmUgVE5fQU8gMHhm NQkJCS8qIDI0NSAqLworI2VuZGlmIC8qIFROX0FPICovCisjaWZuZGVmIFROX0lQCisjZGVmaW5l IFROX0lQIDB4ZjQJCQkvKiAyNDQgKi8KKyNlbmRpZiAvKiBUTl9JUCAqLworI2lmbmRlZiBCUkVB SworI2RlZmluZSBCUkVBSyAweGYzCQkJLyogMjQzICovCisjZW5kaWYgLyogQlJFQUsgKi8KKyNp Zm5kZWYgVE5fRE0KKyNkZWZpbmUgVE5fRE0gMHhmMgkJCS8qIDI0MiAqLworI2VuZGlmIC8qIFRO X0RNICovCisjaWZuZGVmIFROX05PUAorI2RlZmluZSBUTl9OT1AgMHhmMQkJCS8qIDI0MSAqLwor I2VuZGlmIC8qIFROX05PUCAqLworI2lmbmRlZiBTRQorI2RlZmluZSBTRSAweGYwCQkJCS8qIDI0 MCAqLworI2VuZGlmIC8qIFNFICovCisjaWZuZGVmIFROX0VPUgorI2RlZmluZSBUTl9FT1IgMHhl ZgkJCS8qIDIzOSAqLworI2VuZGlmIC8qIFROX0VPUiAqLworI2lmbmRlZiBUTl9BQk9SVAorI2Rl ZmluZSBUTl9BQk9SVCAweGVlCQkJLyogMjM4ICovCisjZW5kaWYgLyogVE5fQUJPUlQgKi8KKyNp Zm5kZWYgVE5fU1VTUAorI2RlZmluZSBUTl9TVVNQIDB4ZWQJCQkvKiAyMzcgKi8KKyNlbmRpZiAv KiBUTl9TVVNQICovCisjaWZuZGVmIFROX0VPRgorI2RlZmluZSBUTl9FT0YgMHhlYwkJCS8qIDIz NiAqLworI2VuZGlmIC8qIFROX0VPRiAqLworI2lmbmRlZiBMQVNUX1ROX0NNRAorI2RlZmluZSBM QVNUX1ROX0NNRCAweGVjCQkvKiAyMzYgKi8KKworI2RlZmluZSBUTl9TQUsgMHhjOAkJCS8qIDIw MCAtIElCTSBTZWN1cmUgQXR0ZW50aW9uIEtleSAqLworI2VuZGlmIC8qIExBU1RfVE5fQ01EICov CisjZGVmaW5lIFNZTkNIIDB4ZjIJCQkvKiAyNDIgLSBmb3IgdGVsZnVuYyBjYWxscyAqLworCisj ZW5kaWYJLyogQ09NTUVOVCAqLworCisjaWZkZWYgVEVMQ01EUworY2hhciAqdGVsY21kc1tdID0g eworICAgICAgICAiRU9GIiwgIlNVU1AiLCAiQUJPUlQiLCAiRU9SIiwKKyAgICAgICAgIlNFIiwg Ik5PUCIsICJETUFSSyIsICJCUksiLCAiSVAiLCAiQU8iLCAiQVlUIiwgIkVDIiwKKyAgICAgICAg IkVMIiwgIkdBIiwgIlNCIiwgIldJTEwiLCAiV09OVCIsICJETyIsICJET05UIiwgIklBQyIsIDAK K307CisjZWxzZSAvKiBURUxDTURTICovCitleHRlcm4gY2hhciAqdGVsY21kc1tdOworI2VuZGlm IC8qIFRFTENNRFMgKi8KKworI2RlZmluZSBURUxDTURfRklSU1QgICAgVE5fRU9GCisjZGVmaW5l IFRFTENNRF9MQVNUICAgICBJQUMKKyNkZWZpbmUgVEVMQ01EX09LKHgpICAgICgodW5zaWduZWQg aW50KSh4KSA8PSBURUxDTURfTEFTVCAmJiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgKHVu c2lnbmVkIGludCkoeCkgPj0gVEVMQ01EX0ZJUlNUIHx8IFwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgKHVuc2lnbmVkIGludCkoeCkgPT0gVE5fU0FLKQorI2RlZmluZSBURUxDTUQoeCkgICAg ICAgKFRFTENNRF9PSyh4KT8gKCh4KSA9PSBUTl9TQUs/IlNBSyI6IFwKKyAgICAgICAgICAgICAg ICAgICAgICAgICB0ZWxjbWRzWyh4KS1URUxDTURfRklSU1RdKToiVU5LTk9XTiIpCisKKy8qIFRo ZW4gdGhlIG9wdGlvbnMgKi8KKy8qIE5COiB0aGUgZm9sbG93aW5nIHBsYXRmb3JtcyBoYXZlIFRF TE9QVF9BVVRIRU5USUNBVElPTiBkZWZpbmVkIGFzICovCisvKiA0NSBpbnN0ZWFkIG9mIDM3LiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2lmZGVm IFRFTE9QVF9BVVRIRU5USUNBVElPTgorI2lmZGVmIF9fb3NmX18KKyN1bmRlZiBURUxPUFRfQVVU SEVOVElDQVRJT04KKyNlbmRpZiAvKiBfX29zZl9fICovCisjaWZuZGVmIElSSVgKKyN1bmRlZiBU RUxPUFRfQVVUSEVOVElDQVRJT04KKyNlbmRpZiAvKiBJUklYICovCisjaWZuZGVmIHVsdHJpeAor I3VuZGVmIFRFTE9QVF9BVVRIRU5USUNBVElPTgorI2VuZGlmIC8qIHVsdHJpeCAqLworI2VuZGlm IC8qIFRFTE9QVF9BVVRIRU5USUNBVElPTiAqLworCisvKiB0ZWxuZXQgb3B0aW9ucyAqLworI2lm bmRlZiBURUxPUFRfQklOQVJZCisjZGVmaW5lIFRFTE9QVF9CSU5BUlkgICAwICAgICAgIC8qIDgt Yml0IGRhdGEgcGF0aCAoUkZDIDg1NikqLworI2VuZGlmCisjaWZuZGVmIFRFTE9QVF9FQ0hPCisj ZGVmaW5lIFRFTE9QVF9FQ0hPICAgICAxICAgICAgIC8qIGVjaG8gKFJGQyA4NTcpKi8KKyNlbmRp ZgorI2lmbmRlZiBURUxPUFRfUkNQCisjZGVmaW5lIFRFTE9QVF9SQ1AgICAgICAyICAgICAgIC8q IHByZXBhcmUgdG8gcmVjb25uZWN0IChOSUMgNTAwMDUpKi8KKyNlbmRpZgorI2lmbmRlZiBURUxP UFRfU0dBCisjZGVmaW5lIFRFTE9QVF9TR0EgICAgICAzICAgICAgIC8qIHN1cHByZXNzIGdvIGFo ZWFkIChSRkMgODU4KSAqLworI2VuZGlmCisjaWZuZGVmIFRFTE9QVF9OQU1TCisjZGVmaW5lIFRF TE9QVF9OQU1TICAgICA0ICAgICAgIC8qIGFwcHJveGltYXRlIG1lc3NhZ2Ugc2l6ZSAoRVRIRVJO RVQpICovCisjZW5kaWYKKyNpZm5kZWYgVEVMT1BUX1NUQVRVUworI2RlZmluZSBURUxPUFRfU1RB VFVTICAgNSAgICAgICAvKiBnaXZlIHN0YXR1cyAoUkZDIDg1OSkgKi8KKyNlbmRpZgorI2lmbmRl ZiBURUxPUFRfVE0KKyNkZWZpbmUgVEVMT1BUX1RNICAgICAgIDYgICAgICAgLyogdGltaW5nIG1h cmsgKFJGQyA4NjApICovCisjZW5kaWYKKyNpZm5kZWYgVEVMT1BUX1JDVEUKKyNkZWZpbmUgVEVM T1BUX1JDVEUgICAgIDcgICAgICAgLyogcmVtb3RlIGNvbnRyb2xsZWQgdHJhbnNtaXNzaW9uIGFu ZCBlY2hvICovCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIChSRkMgNzI2KSAq LworI2lmbmRlZiBURUxPUFRfTkFPTAorI2RlZmluZSBURUxPUFRfTkFPTCAgICAgOCAgICAgICAv KiBuZWdvdGlhdGUgYWJvdXQgb3V0cHV0IGxpbmUgd2lkdGggKi8KKyNlbmRpZiAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogKE5JQyA1MDAwNSkgKi8KKyNpZm5kZWYgVEVMT1BUX05BT1AKKyNk ZWZpbmUgVEVMT1BUX05BT1AgICAgIDkgICAgICAgLyogbmVnb3RpYXRlIGFib3V0IG91dHB1dCBw YWdlIHNpemUgKi8KKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogKE5JQyA1MDAw NSkgKi8KKyNpZm5kZWYgVEVMT1BUX05BT0NSRAorI2RlZmluZSBURUxPUFRfTkFPQ1JEICAgMTAg ICAgICAvKiBuZWdvdGlhdGUgYWJvdXQgQ1IgZGlzcG9zaXRpb24gKFJGQyA2NTIpICovCisjZW5k aWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFtIaXN0b3JpY10gKi8KKyNpZm5kZWYgVEVM T1BUX05BT0hUUworI2RlZmluZSBURUxPUFRfTkFPSFRTICAgMTEgICAgICAvKiBuZWdvdGlhdGUg YWJvdXQgaG9yaXpvbnRhbCB0YWJzdG9wcyAqLworI2VuZGlmICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiAoUkZDIDY1MykgW0hpc3RvcmljXSAqLworI2lmbmRlZiBURUxPUFRfTkFPSFRECisj ZGVmaW5lIFRFTE9QVF9OQU9IVEQgICAxMiAgICAgIC8qIG5lZ290aWF0ZSBhYm91dCBob3JpeiB0 YWIgZGlzcG9zaXRpb24gKi8KKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogKFJG QyA2NTQpIFtIaXN0b3JpY10gKi8KKyNpZm5kZWYgVEVMT1BUX05BT0ZGRAorI2RlZmluZSBURUxP UFRfTkFPRkZEICAgMTMgICAgICAvKiBuZWdvdGlhdGUgYWJvdXQgZm9ybWZlZWQgZGlzcG9zaXRp b24gKi8KKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogKFJGQyA2NTUpIFtIaXN0 b3JpY10gKi8KKyNpZm5kZWYgVEVMT1BUX05BT1ZUUworI2RlZmluZSBURUxPUFRfTkFPVlRTICAg MTQgICAgICAvKiBuZWdvdGlhdGUgYWJvdXQgdmVydGljYWwgdGFiIHN0b3BzICovCisjZW5kaWYg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIChSRkMgNjU2KSBbSGlzdG9yaWNdICovCisjaWZu ZGVmIFRFTE9QVF9OQU9WVEQKKyNkZWZpbmUgVEVMT1BUX05BT1ZURCAgIDE1ICAgICAgLyogbmVn b3RpYXRlIGFib3V0IHZlcnRpY2FsIHRhYiBkaXNwb3NpdGlvbiAqLworI2VuZGlmICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiAoUkZDIDY1NykgW0hpc3RvcmljXSAqLworI2lmbmRlZiBURUxP UFRfTkFPTEZECisjZGVmaW5lIFRFTE9QVF9OQU9MRkQgICAxNiAgICAgIC8qIG5lZ290aWF0ZSBh Ym91dCBvdXRwdXQgTEYgZGlzcG9zaXRpb24gKi8KKyNlbmRpZiAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogKFJGQyA2NTgpIFtIaXN0b3JpY10gKi8KKyNpZm5kZWYgVEVMT1BUX1hBU0NJSQor I2RlZmluZSBURUxPUFRfWEFTQ0lJICAgMTcgICAgICAvKiBleHRlbmRlZCBhc2NpaSBjaGFyYWN0 ZXIgc2V0ICovCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIChSRkMgNjk4KSAq LworI2lmbmRlZiBURUxPUFRfTE9HT1VUCisjZGVmaW5lIFRFTE9QVF9MT0dPVVQgICAxOCAgICAg IC8qIGZvcmNlIGxvZ291dCAoUkZDIDcyNykgKi8KKyNlbmRpZgorI2lmbmRlZiBURUxPUFRfQk0K KyNkZWZpbmUgVEVMT1BUX0JNICAgICAgIDE5ICAgICAgLyogYnl0ZSBtYWNybyAoUkZDIDczNSkg Ki8KKyNlbmRpZgorI2lmbmRlZiBURUxPUFRfREVUCisjZGVmaW5lIFRFTE9QVF9ERVQgICAgICAy MCAgICAgIC8qIGRhdGEgZW50cnkgdGVybWluYWwgKFJGQyAxMDQzLCA3MzIpICovCisjZW5kaWYK KyNpZm5kZWYgVEVMT1BUX1NVUERVUAorI2RlZmluZSBURUxPUFRfU1VQRFVQICAgMjEgICAgICAv KiBzdXBkdXAgcHJvdG9jb2wgKFJGQyA3MzYsIDczNCkgKi8KKyNlbmRpZgorI2lmbmRlZiBURUxP UFRfU1VQRFVQT1VUUFVUCisjZGVmaW5lIFRFTE9QVF9TVVBEVVBPVVRQVVQgMjIgIC8qIHN1cGR1 cCBvdXRwdXQgKFJGQyA3NDkpICovCisjZW5kaWYKKyNpZm5kZWYgVEVMT1BUX1NORExPQworI2Rl ZmluZSBURUxPUFRfU05ETE9DICAgMjMgICAgICAvKiBzZW5kIGxvY2F0aW9uIChSRkMgNzc5KSAq LworI2VuZGlmCisjaWZuZGVmIFRFTE9QVF9UVFlQRQorI2RlZmluZSBURUxPUFRfVFRZUEUgICAg MjQgICAgICAvKiB0ZXJtaW5hbCB0eXBlIChSRkMgMTA5MSkgKi8KKyNlbmRpZgorI2lmbmRlZiBU RUxPUFRfRU9SCisjZGVmaW5lIFRFTE9QVF9FT1IgICAgICAyNSAgICAgIC8qIGVuZCBvZiByZWNv cmQgKFJGQyA4ODUpICovCisjZW5kaWYKKyNpZm5kZWYgVEVMT1BUX1RVSUQKKyNkZWZpbmUgVEVM T1BUX1RVSUQgICAgIDI2ICAgICAgLyogVEFDQUNTIHVzZXIgaWRlbnRpZmljYXRpb24gKFJGQyA5 MjcpICovCisjZW5kaWYKKyNpZm5kZWYgVEVMT1BUX09VVE1SSworI2RlZmluZSBURUxPUFRfT1VU TVJLICAgMjcgICAgICAvKiBvdXRwdXQgbWFya2luZyAoUkZDIDkzMykgKi8KKyNlbmRpZgorI2lm bmRlZiBURUxPUFRfVFRZTE9DCisjZGVmaW5lIFRFTE9QVF9UVFlMT0MgICAyOCAgICAgIC8qIHRl cm1pbmFsIGxvY2F0aW9uIG51bWJlciAoUkZDIDk0NikgKi8KKyNlbmRpZgorI2lmbmRlZiBURUxP UFRfMzI3MFJFR0lNRQorI2RlZmluZSBURUxPUFRfMzI3MFJFR0lNRSAyOSAgICAvKiAzMjcwIHJl Z2ltZSAoUkZDIDEwNDEpICovCisjZW5kaWYKKyNpZm5kZWYgVEVMT1BUX1gzUEFECisjZGVmaW5l IFRFTE9QVF9YM1BBRCAgICAzMCAgICAgIC8qIFguMyBQQUQgKFJGQyAxMDUzKSAqLworI2VuZGlm CisjaWZuZGVmIFRFTE9QVF9OQVdTCisjZGVmaW5lIFRFTE9QVF9OQVdTICAgICAzMSAgICAgIC8q IHdpbmRvdyBzaXplIChSRkMgMTA3MykgKi8KKyNlbmRpZgorI2lmbmRlZiBURUxPUFRfVFNQRUVE CisjZGVmaW5lIFRFTE9QVF9UU1BFRUQgICAzMiAgICAgIC8qIHRlcm1pbmFsIHNwZWVkIChSRkMg MTA3OSkgKi8KKyNlbmRpZgorI2lmbmRlZiBURUxPUFRfTEZMT1cKKyNkZWZpbmUgVEVMT1BUX0xG TE9XICAgIDMzICAgICAgLyogcmVtb3RlIGZsb3cgY29udHJvbCAoUkZDIDEzNzIpICovCisjZW5k aWYKKyNpZm5kZWYgVEVMT1BUX0xJTkVNT0RFCisjZGVmaW5lIFRFTE9QVF9MSU5FTU9ERSAzNCAg ICAgIC8qIExpbmVtb2RlIG9wdGlvbiAoUkZDIDExODQpICovCisjZW5kaWYKKyNpZm5kZWYgVEVM T1BUX1hESVNQTE9DCisjZGVmaW5lIFRFTE9QVF9YRElTUExPQyAzNSAgICAgIC8qIFggRGlzcGxh eSBMb2NhdGlvbiAoUkZDIDEwOTYpICovCisjZW5kaWYKKyNpZm5kZWYgVEVMT1BUX09MRF9FTlZJ Uk9OCisjZGVmaW5lIFRFTE9QVF9PTERfRU5WSVJPTiAzNiAgIC8qIE9sZCAtIEVudmlyb25tZW50 IHZhcmlhYmxlcyAoUkZDIDE0MDgpICovCisjZW5kaWYKKyNpZm5kZWYgVEVMT1BUX0FVVEhFTlRJ Q0FUSU9OCisjZGVmaW5lIFRFTE9QVF9BVVRIRU5USUNBVElPTiAzNy8qIEF1dGhlbnRpY2F0ZSAo UkZDIDI5NDEpICovCisjZW5kaWYKKyNpZm5kZWYgVEVMT1BUX0VOQ1JZUFRJT04KKyNkZWZpbmUg VEVMT1BUX0VOQ1JZUFRJT04gMzggICAgLyogRW5jcnlwdGlvbiBvcHRpb24gKFJGQyAyOTQ2KSAq LworI2VuZGlmCisjaWZuZGVmIFRFTE9QVF9ORVdFTlZJUk9OCisjZGVmaW5lIFRFTE9QVF9ORVdF TlZJUk9OIDM5ICAgIC8qIE5ldyAtIEVudmlyb25tZW50IHZhcmlhYmxlcyAoUkZDIDE1NzIpICov CisjZW5kaWYKKyNpZm5kZWYgVEVMT1BUXzMyNzBFCisjZGVmaW5lIFRFTE9QVF8zMjcwRSAgICA0 MCAgICAgIC8qIDMyNzAgRXh0ZW5kZWQgKFJGQyAxNjQ3KSAqLworI2VuZGlmCisjaWZuZGVmIFRF TE9QVF9YQVVUSAorI2RlZmluZSBURUxPUFRfWEFVVEggICAgNDEgICAgICAvKiA/Pz8gKEVhcmhh cnQpICovCisjZW5kaWYKKyNpZm5kZWYgVEVMT1BUX0NIQVJTRVQKKyNkZWZpbmUgVEVMT1BUX0NI QVJTRVQgIDQyICAgICAgLyogQ2hhcmFjdGVyLXNldCAoUkZDIDIwNjYpICovCisjZW5kaWYKKyNp Zm5kZWYgVEVMT1BUX1JTUAorI2RlZmluZSBURUxPUFRfUlNQICAgICAgNDMgICAgICAvKiBSZW1v dGUgU2VyaWFsIFBvcnQgKEJhcm5lcykgKi8KKyNlbmRpZgorI2lmbmRlZiBURUxPUFRfQ09NUE9S VAorI2RlZmluZSBURUxPUFRfQ09NUE9SVCAgNDQgICAgICAvKiBDb20gUG9ydCBDb250cm9sIChS RkMgMjIxNykgKi8KKyNlbmRpZgorI2lmbmRlZiBURUxPUFRfU0xFCisjZGVmaW5lIFRFTE9QVF9T TEUgICAgICA0NSAgICAgIC8qIFN1cHByZXNzIExvY2FsIEVjaG8gKEF0bWFyKSAtIFtyZWplY3Rl ZF0gKi8KKyNlbmRpZgorI2lmbmRlZiBURUxPUFRfU1RBUlRfVExTCisjZGVmaW5lIFRFTE9QVF9T VEFSVF9UTFMgNDYgICAgIC8qIFRlbG5ldCBvdmVyIFRyYW5zcG9ydCBMYXllciBTZWN1cml0eSAq LworI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAoQm9lKSAqLworI2lmbmRlZiBU RUxPUFRfS0VSTUlUCisjZGVmaW5lIFRFTE9QVF9LRVJNSVQgICA0NyAgICAgIC8qIEtlcm1pdCAo UkZDIDI4NDApICovCisjZW5kaWYKKyNpZm5kZWYgVEVMT1BUX1NFTkRfVVJMCisjZGVmaW5lIFRF TE9QVF9TRU5EX1VSTCA0OCAgICAgIC8qIFNlbmQgVVJMICovCisjZW5kaWYKKworI2lmbmRlZiBU RUxPUFRfRk9SV0FSRF9YCisjZGVmaW5lIFRFTE9QVF9GT1JXQVJEX1ggNDkgICAgIC8qIFggV2lu ZG93cyBGb3J3YXJkaW5nIChBbHRtYW4pICovCisjZW5kaWYgLyogVEVMT1BUX0ZPUldBUkRfWCAq LworCisjaWZuZGVmIFRFTE9QVF9TVERFUlIKKyNkZWZpbmUgVEVMT1BUX1NUREVSUiAgICA1MCAg ICAvKiBSZWRpcmVjdGVkIFN0ZGVyciAoQWx0bWFuKSAqLworI2VuZGlmIC8qIFRFTE9QVF9TVERF UlIgKi8KKworI2lmbmRlZiBURUxPUFRfUFJBR01BX0xPR09OCisjZGVmaW5lIFRFTE9QVF9QUkFH TUFfTE9HT04gMTM4IC8qIEVuY3J5cHRlZCBMb2dvbiBvcHRpb24gKFByYWdtYVN5cykgKi8KKyNl bmRpZgorI2lmbmRlZiBURUxPUFRfU1NQSV9MT0dPTgorI2RlZmluZSBURUxPUFRfU1NQSV9MT0dP TiAxMzkgICAvKiBNUyBTU1BJIExvZ29uIG9wdGlvbiAoUHJhZ21hU3lzKSAqLworI2VuZGlmCisj aWZuZGVmIFRFTE9QVF9QUkFHTUFfSEVBUlRCRUFUCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIFNlcnZlciBTZW5kIEhlYXJ0YmVhdCBvcHRpb24gKFByYWdtYVN5cykgKi8KKyNk ZWZpbmUgVEVMT1BUX1BSQUdNQV9IRUFSVEJFQVQgMTQwCisjZW5kaWYKKworI2RlZmluZSBURUxP UFRfSUJNX1NBSyAyMDAgICAgICAvKiBJQk0gU2VjdXJlIEF0dGVudGlvbiBLZXkgKi8KKworLyoK KyAgSUJNIFNlY3VyZSBBdHRlbnRpb24gS2V5IChTQUspIE9wdGlvbgorCisgIEluIGFkZGl0aW9u IHRvIHRlcm1pbmFsIG5lZ290aWF0aW9uLCB0aGUgdGVsbmV0IGNvbW1hbmQgYWxsb3dzCisgIG5l Z290aWF0aW9uIGZvciB0aGUgU2VjdXJlIEF0dGVudGlvbiBLZXkgKFNBSykKKyAgb3B0aW9uLiBU aGlzIG9wdGlvbiwgd2hlbiBzdXBwb3J0ZWQsIHByb3ZpZGVzIHRoZSBsb2NhbCB1c2VyIHdpdGgK KyAgYSBzZWN1cmUgY29tbXVuaWNhdGlvbiBwYXRoIHRvIHRoZSByZW1vdGUKKyAgaG9zdCBmb3Ig dGFza3Mgc3VjaCBhcyBjaGFuZ2luZyB1c2VyIElEcyBvciBwYXNzd29yZHMuIElmIHRoZSByZW1v dGUKKyAgaG9zdCBzdXBwb3J0cyB0aGUgU0FLIGZ1bmN0aW9uLCBhIHRydXN0ZWQKKyAgc2hlbGwg aXMgb3BlbmVkIG9uIHRoZSByZW1vdGUgaG9zdCB3aGVuIHRoZSB0ZWxuZXQgc2VuZCBzYWsKKyAg c3ViY29tbWFuZCBpcyBpc3N1ZWQuIFRoZSBTQUsgZnVuY3Rpb24gY2FuCisgIGFsc28gYmUgYXNz aWduZWQgdG8gYSBzaW5nbGUga2V5IGF2YWlsYWJsZSBpbiB0ZWxuZXQgaW5wdXQgbW9kZSwKKyAg dXNpbmcgdGhlIHNldCBzYWsgc3ViY29tbWFuZC4KKworICBUTl9TQUsKKworICBTZW5kcyB0aGUg VEVMTkVUIFNBSyAoU2VjdXJlIEF0dGVudGlvbiBLZXkpIHNlcXVlbmNlLCB3aGljaCBjYXVzZXMK KyAgdGhlIHJlbW90ZSBzeXN0ZW0gdG8gaW52b2tlIHRoZSB0cnVzdGVkIHNoZWxsLiBJZiB0aGUg U0FLIGlzIG5vdAorICBzdXBwb3J0ZWQsIHRoZW4gYW4gZXJyb3IgbWVzc2FnZSBpcyBkaXNwbGF5 ZWQgdGhhdCByZWFkczoKKyAgICBSZW1vdGUgc2lkZSBkb2VzIG5vdCBzdXBwb3J0IFNBSy4KKyov CisKKyNpZm5kZWYgVEVMT1BUX0VYT1BMCisjZGVmaW5lIFRFTE9QVF9FWE9QTCAgICAyNTUgICAg IC8qIEV4dGVuZGVkLW9wdGlvbnMtbGlzdCAoUkZDIDg2MSkgKi8KKyNlbmRpZgorCisjaWZkZWYg TlRFTE9QVFMKKyN1bmRlZiBOVEVMT1BUUworI2VuZGlmIC8qIE5URUxPUFRTICovCisvKiBUaGUg VGVsbmV0IE9wdGlvbiBzcGFjZSBpcyBubyBsb25nZXIgYmVpbmcgYWxsb2NhdGVkIGJ5IElDQU5O IGFzIGEgKi8KKy8qIGNvbnRpbnVvdXMgbGlzdC4gIEluIG90aGVyIHdvcmRzIGl0IGlzIGJlY29t aW5nIHNwYXJzZS4gIEJ1dCB3ZSBkbyAqLworLyogbm90IHdhbnQgdG8gaGF2ZSB0byBhbGxvY2F0 ZSBtZW1vcnkgZm9yIGEgbG9uZyBsaXN0IG9mIHN0cmluZ3MgYW5kICovCisvKiBzdHJ1Y3RzIHdo aWNoIHdpbGwgbmV2ZXIgYmUgdXNlZC4gIFRoZXJlZm9yZSwgdGhlIE5URUxPUFRTIGRlZmluZSAg Ki8KKy8qIGNhbiBubyBsb25nZXIgYmUgZXF1YWwgdG8gVEVMT1BUX0xBU1QrMS4gIEluIGZhY3Qs IHRoZSBub3Rpb24gb2YgICAqLworLyogVEVMT1BUX0ZJUlNUIGFuZCBURUxPUFRfTEFTVCBubyBs b25nZXIgbWFrZSBzZW5zZS4gICAgICAgICAgICAgICAgICovCisjZGVmaW5lIE5URUxPUFRTICAg ICAgICA1NQorCisjZGVmaW5lIFRFTE9QVF9GSVJTVCAgICAgVEVMT1BUX0JJTkFSWQorI2RlZmlu ZSBURUxPUFRfTEFTVCAgICAgIFRFTE9QVF9JQk1fU0FLCisKKy8qCisgIFRoZSBmb2xsb3dpbmcg bWFjcm9zIHNwZWVkIHVzIHVwIGF0IHJ1bnRpbWUgYnV0IGFyZSB0b28gY29tcGxleAorICBmb3Ig c29tZSBwcmVwcm9jZXNzb3JzIC8gY29tcGlsZXJzOyBpZiB5b3VyIGNvbXBpbGVyIGJvbWJzIG9u IGNrY3RlbC5jCisgIHdpdGggIkluc3RydWN0aW9uIHRhYmxlIG92ZXJmbG93IiBvciBzb21lc3Vj aCwgcmVidWlsZCB3aXRoIC1ETk9UT01BQ1JPUy4KKyovCisjaWZuZGVmIE5PVE9NQUNST1MKKyNp Zm5kZWYgVEVMT1BUX01BQ1JPCisjZGVmaW5lIFRFTE9QVF9NQUNSTworI2VuZGlmIC8qIFRFTE9Q VF9NQUNSTyAqLworI2VuZGlmIC8qIE5PVE9NQUNST1MgKi8KKworI2lmZGVmIFRFTE9QVF9NQUNS TworI2RlZmluZSBURUxPUFRfSU5ERVgoeCkgKCgoeCk+PTAgJiYgKHgpPD0gVEVMT1BUX1NUREVS Uik/KHgpOlwKKyAgICAgICAgKCh4KT49VEVMT1BUX1BSQUdNQV9MT0dPTiAmJiAoeCk8PVRFTE9Q VF9QUkFHTUFfSEVBUlRCRUFUKT8oeCktODc6IFwKKyAgICAgICAgKCh4KSA9PSBURUxPUFRfSUJN X1NBSyk/KHgpLTE0NjogTlRFTE9QVFMpCisKKyNkZWZpbmUgVEVMT1BUX09LKHgpICAgICgoKHgp ID49IFRFTE9QVF9CSU5BUlkgJiYgKHgpIDw9IFRFTE9QVF9TVERFUlIpIHx8XAorICAgICAgICAg ICAgICgoeCkgPj0gVEVMT1BUX1BSQUdNQV9MT0dPTiAmJiAoeCkgPD0gVEVMT1BUX1BSQUdNQV9I RUFSVEJFQVQpIHx8XAorICAgICAgICAgICAgICgoeCkgPT0gVEVMT1BUX0lCTV9TQUspKQorI2Rl ZmluZSBURUxPUFQoeCkgICAgICAgKFRFTE9QVF9PSyh4KT90ZWxvcHRzW1RFTE9QVF9JTkRFWCh4 KV06IlVOS05PV04iKQorI2Vsc2UgLyogVEVMT1BUX01BQ1JPICovCitfUFJPVE9UWVAoaW50IHRl bG9wdF9pbmRleCwoaW50KSk7CitfUFJPVE9UWVAoaW50IHRlbG9wdF9vaywoaW50KSk7CitfUFJP VE9UWVAoQ0hBUiAqIHRlbG9wdCwgKGludCkpOworCisjZGVmaW5lIFRFTE9QVF9JTkRFWCh4KSB0 ZWxvcHRfaW5kZXgoeCkKKyNkZWZpbmUgVEVMT1BUX09LKHgpICAgIHRlbG9wdF9vayh4KQorI2Rl ZmluZSBURUxPUFQoeCkgICAgICAgdGVsb3B0KHgpCisjZW5kaWYgLyogVEVMT1BUX01BQ1JPICov CisKKyNpZmRlZiBURUxPUFRTCitjaGFyICp0ZWxvcHRzW05URUxPUFRTKzJdID0geworLyogICAw ICovICJCSU5BUlkiLCAgICJFQ0hPIiwgICAgICAgICAiUkNQIiwgICJTVVBQUkVTUy1HTy1BSEVB RCIsCisvKiAgIDQgKi8gIk5BTUUiLCAgICJTVEFUVVMiLCAiVElNSU5HLU1BUksiLCAiUkNURSIs CisvKiAgIDggKi8gIk5BT0wiLCAiTkFPUCIsICAiTkFPQ1JEIiwgIk5BT0hUUyIsCisvKiAgMTIg Ki8gIk5BT0hURCIsICJOQU9GRkQiLCAiTkFPVlRTIiwgICJOQU9WVEQiLAorLyogIDE2ICovICJO QU9MRkQiLCAiRVhURU5ELUFTQ0lJIiwgIkxPR09VVCIsICJCWVRFLU1BQ1JPIiwKKy8qICAyMCAq LyAiREFUQS1FTlRSWS1URVJNSU5BTCIsICJTVVBEVVAiLCAiU1VQRFVQLU9VVFBVVCIsICAiU0VO RC1MT0NBVElPTiIsCisvKiAgMjQgKi8gIlRFUk1JTkFMLVRZUEUiLCAgIkVORC1PRi1SRUNPUkQi LCAiVEFDQUNTLVVJRCIsICJPVVRQVVQtTUFSS0lORyIsCisvKiAgMjggKi8gIlRUWUxPQyIsICIz MjcwLVJFR0lNRSIsICJYLjMtUEFEIiwgIk5BV1MiLAorLyogIDMyICovICJUU1BFRUQiLCAiTEZM T1ciLCAiTElORU1PREUiLCAiWERJU1BMT0MiLAorLyogIDM2ICovICJPTEQtRU5WSVJPTiIsICJB VVRIRU5USUNBVElPTiIsICJFTkNSWVBUSU9OIiwgIk5FVy1FTlZJUk9OTUVOVCIsCisvKiAgNDAg Ki8gIlROMzI3MEUiLCJ4YXV0aCIsIkNIQVJTRVQiLCAicmVtb3RlLXNlcmlhbC1wb3J0IiwKKy8q ICA0NCAqLyAiQ09NLVBPUlQtQ09OVFJPTCIsInN1cHByZXNzLWxvY2FsLWVjaG8iLCJTVEFSVC1U TFMiLCJLRVJNSVQiLAorLyogIDQ4ICovICJzZW5kLXVybCIsIkZPUldBUkQtWCIsInN0ZGVyciIs CisvKiAxMzggKi8gInByYWdtYS1sb2dvbiIsICJzc3BpLWxvZ29uIiwgInByYWdtYS1oZWFydGJl YXQiLAorLyogMjAwICovICJpYm0tc2FrIiwKKyAgICAgICAgICAidW5rbm93biIsCisgICAgICAg IDAKK307CisjZWxzZSAvKlRFTE9QVFMgKi8KK2V4dGVybiBjaGFyICogdGVsb3B0c1tdOworI2Vu ZGlmIC8qIFRFTE9QVFMgKi8KKworLyogVEVMTkVUIE5ld2xpbmUgTW9kZSAqLworCisjZGVmaW5l IFROTF9DUiAgICAgMCAgICAgICAgICAgICAgICAgICAgLyogQ1Igc2VuZHMgYmFyZSBjYXJyaWFn ZSByZXR1cm4gKi8KKyNkZWZpbmUgVE5MX0NSTlVMICAxICAgICAgICAgICAgICAgICAgICAvKiBD UiBhbmQgTlVMICovCisjZGVmaW5lIFROTF9DUkxGICAgMiAgICAgICAgICAgICAgICAgICAgLyog Q1IgYW5kIExGICovCisjZGVmaW5lIFROTF9MRiAgICAgMyAgICAgICAgICAgICAgICAgICAgLyog TEYgaW5zdGVhZCBvZiBDUiAqLworCisvKiBURUxORVQgTmVnb3RpYXRpb24gTW9kZSAqLworCisj ZGVmaW5lICAgIFROX05HX1JGICAwICAgICAgICAgICAgICAgICAgLyogIE5lZ290aWF0aW9uIFJF RlVTRUQgKi8KKyNkZWZpbmUgICAgVE5fTkdfQUMgIDEgICAgICAgICAgICAgICAgICAvKiAgTmVn b3RpYXRpb24gQUNDRVBURUQgKi8KKyNkZWZpbmUgICAgVE5fTkdfUlEgIDIgICAgICAgICAgICAg ICAgICAvKiAgTmVnb3RpYXRpb24gUkVRVUVTVEVEICovCisjZGVmaW5lICAgIFROX05HX01VICAz ICAgICAgICAgICAgICAgICAgLyogIE5lZ290aWF0aW9uIFJFUVVJUkVEIChtdXN0KSAqLworCisK Ky8qIFN5c3RlbXMgd2hlcmUgd2Uga25vdyB3ZSBjYW4gZGVmaW5lIFRFTE5FVCBOQVdTIGF1dG9t YXRpY2FsbHkuICovCisKKyNpZm5kZWYgQ0tfTkFXUyAgICAgICAgICAgICAgICAgICAgICAgICAv KiBJbiBvdGhlciB3b3JkcywgaWYgYm90aCAqLworI2lmZGVmIENLX1RUR1dTSVogICAgICAgICAg ICAgICAgICAgICAgIC8qIFROQ09ERSBhbmQgVFRHV1NJWiBhcmUgZGVmaW5lZCAqLworI2RlZmlu ZSBDS19OQVdTICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRoZW4gd2UgY2FuIGRvIE5BV1Mu ICovCisjZW5kaWYgLyogQ0tfVFRHV1NJWiAqLworI2VuZGlmIC8qIENLX05BV1MgKi8KKworI2lm ZGVmIENLX0ZPUldBUkRfWAorI2lmbmRlZiBNQVhGV0RYCisjZGVmaW5lIE1BWEZXRFggNjQgICAg ICAgICAgICAgICAgICAgICAgLyogTnVtIG9mIFggd2luZG93cyB0byBiZSBmd2QnZCAqLworI2Vu ZGlmIC8qIE1BWEZXRFggKi8KKyNlbmRpZiAvKiBDS19GT1JXQVJEX1ggKi8KKworLyogVGVsbmV0 IFN0YXRlIHN0cnVjdHVyZXMgYW5kIGRlZmluaXRpb25zICovCitzdHJ1Y3QgX3RlbG9wdF9zdGF0 ZSB7CisgIHVuc2lnbmVkIGNoYXIgZGVmX3NlcnZlcl9tZV9tb2RlOyAgIC8qIERlZmF1bHQgTmVn b3RpYXRpb24gTW9kZSAqLworICB1bnNpZ25lZCBjaGFyIGRlZl9zZXJ2ZXJfdV9tb2RlOyAgICAv KiBEZWZhdWx0IE5lZ290aWF0aW9uIE1vZGUgKi8KKyAgdW5zaWduZWQgY2hhciBkZWZfY2xpZW50 X21lX21vZGU7ICAgLyogRGVmYXVsdCBOZWdvdGlhdGlvbiBNb2RlICovCisgIHVuc2lnbmVkIGNo YXIgZGVmX2NsaWVudF91X21vZGU7ICAgIC8qIERlZmF1bHQgTmVnb3RpYXRpb24gTW9kZSAqLwor ICB1bnNpZ25lZCBjaGFyIG1lX21vZGU7ICAgICAgICAgICAgICAvKiBUZWxuZXQgTmVnb3RpYXRp b24gTW9kZSAqLworICB1bnNpZ25lZCBjaGFyIHVfbW9kZTsgICAgICAgICAgICAgICAvKiBUZWxu ZXQgTmVnb3RpYXRpb24gTW9kZSAqLworICB1bnNpZ25lZCBjaGFyIG1lOyAgICAgICAgICAgICAg ICAgICAvKiBBbSBJID8gICAgICAgICAgICAgICAgICAqLworICB1bnNpZ25lZCBjaGFyIHU7ICAg ICAgICAgICAgICAgICAgICAvKiBBcmUgeW91PyAgICAgICAgICAgICAgICAqLworICB1bnNpZ25l ZCBjaGFyIHVuYW5zd2VyZWRfd2lsbDsgICAgICAvKiBTZW50IFdpbGwsIFdhaXRpbmcgZm9yIERP L0RPTlQgKi8KKyAgdW5zaWduZWQgY2hhciB1bmFuc3dlcmVkX2RvOyAgICAgICAgLyogU2VuZCBE TywgV2FpdGluZyBmb3IgV0lMTC9XT05UICovCisgIHVuc2lnbmVkIGNoYXIgdW5hbnN3ZXJlZF93 b250OyAgICAgIC8qIFNlbnQgV09OVCwgV2FpdGluZyBmb3IgRE9OVCAqLworICB1bnNpZ25lZCBj aGFyIHVuYW5zd2VyZWRfZG9udDsgICAgICAvKiBTZW50IERPTlQsIFdhaXRpbmcgZm9yIFdPTlQg Ki8KKyAgdW5zaWduZWQgY2hhciB1bmFuc3dlcmVkX3NiOyAgICAgICAgLyogU2VudCBTQiwgICBX YWl0aW5nIGZvciBTQiAoc2VydmVyKSAqLworICB1bmlvbiB7CisjaWZkZWYgSUtTX09QVElPTgor ICAgIHN0cnVjdCBfdGVsb3B0X2tlcm1pdCB7ICAgICAgICAgLyogS2VybWl0IE9wdGlvbiBTdGF0 ZXMgKi8KKyAgICAgIHVuc2lnbmVkIGNoYXIgbWVfc3RhcnQ7ICAgICAgIC8qIEkgaGF2ZSBhIFNl cnZlciBhY3RpdmUgKi8KKyAgICAgIHVuc2lnbmVkIGNoYXIgbWVfcmVxX3N0YXJ0OyAgIC8qIFNl bnQgUmVxLVN0YXJ0LCBXYWl0aW5nIGZvciByZXNwb25zZSAqLworICAgICAgdW5zaWduZWQgY2hh ciBtZV9yZXFfc3RvcDsgICAgLyogU2VudCBSZXEtU3RvcCwgV2FpdGluZyBmb3IgcmVzcG9uc2Ug ICovCisgICAgICB1bnNpZ25lZCBjaGFyIHVfc3RhcnQ7ICAgICAgICAvKiBZb3UgaGF2ZSBhIFNl cnZlciBhY3RpdmUgKi8KKyAgICAgIHVuc2lnbmVkIGNoYXIgc29wOyAgICAgICAgICAgIC8qIEhh dmUgd2UgcmVjZWl2ZWQgdGhlIFNPUCBjaGFyPyAqLworICAgIH0ga2VybWl0OworI2VuZGlmIC8q IElLU19PUFRJT04gKi8KKyNpZmRlZiBDS19FTkNSWVBUSU9OCisgICAgc3RydWN0IF90ZWxvcHRf ZW5jcnlwdCB7ICAgICAgICAvKiBFbmNyeXB0aW9uIE9wdGlvbiBTdGF0ZXMgKi8KKyAgICAgIHVu c2lnbmVkIGNoYXIgbmVlZF90b19zZW5kOworICAgICAgdW5zaWduZWQgY2hhciAgc3RvcDsgICAg ICAgICAgLyogSXMgZW5jcnlwdGlvbiBzdG9wcGVkPyAgICovCisgICAgfSBlbmNyeXB0OworI2Vu ZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KKyNpZmRlZiBDS19OQVdTCisgICAgc3RydWN0IF90ZWxv cHRfbmF3cyB7ICAgICAgICAgICAvKiBOQVdTIE9wdGlvbiBJbmZvcm1hdGlvbiAgKi8KKyAgICAg IHVuc2lnbmVkIGNoYXIgbmVlZF90b19zZW5kOworICAgICAgaW50IHg7ICAgICAgICAgICAgICAg ICAgICAgICAgLyogTGFzdCBXaWR0aCAgICAgICAgICAgICAgICovCisgICAgICBpbnQgeTsgICAg ICAgICAgICAgICAgICAgICAgICAvKiBMYXN0IEhlaWdodCAgICAgICAgICAgICAgKi8KKyAgICB9 IG5hd3M7CisjZW5kaWYgLyogQ0tfTkFXUyAqLworI2lmZGVmIENLX1NTTAorICAgIHN0cnVjdCBf dGVsb3B0X3N0YXJ0X3RscyB7ICAgICAgLyogU3RhcnQgVExTIE9wdGlvbiAgICAgICAgICAgICAq LworICAgICAgIHVuc2lnbmVkIGNoYXIgdV9mb2xsb3dzOyAgICAgLyogdSByZWFkeSBmb3IgVExT IG5lZ290aWF0aW9uICAqLworICAgICAgIHVuc2lnbmVkIGNoYXIgbWVfZm9sbG93czsgICAgLyog bWUgcmVhZHkgZm9yIFRMUyBuZWdvdGlhdGlvbiAqLworICAgICAgIHVuc2lnbmVkIGNoYXIgYXV0 aF9yZXF1ZXN0OyAgLyogUmN2ZCBXSUxMIEFVVEggYmVmb3JlIFdPTlQgU1RBUlRfVExTICovCisg ICAgfSBzdGFydF90bHM7CisjZW5kaWYgLyogQ0tfU1NMICovCisgICAgc3RydWN0IF90ZWxvcHRf dGVybSB7ICAgICAgICAgIC8qIFRlcm1pbmFsIFR5cGUgICAgICAgICAgICAqLworICAgICAgIHVu c2lnbmVkIGNoYXIgbmVlZF90b19zZW5kOworICAgICAgIHVuc2lnbmVkIGNoYXIgdHlwZVs0MV07 ICAgICAvKiBMYXN0IHRlcm1pbmFsIHR5cGUgICAgICAgKi8KKyAgICB9IHRlcm07CisjaWZkZWYg Q0tfRU5WSVJPTk1FTlQKKyAgICBzdHJ1Y3QgX3RlbG9wdF9uZXdfZW52IHsKKyAgICAgICB1bnNp Z25lZCBjaGFyIG5lZWRfdG9fc2VuZDsKKyAgICAgICB1bnNpZ25lZCBjaGFyICogc3RyOworICAg ICAgIGludCAgICAgICAgICAgICBsZW47CisgICAgfSBlbnY7CisjaWZkZWYgQ0tfWERJU1BMT0MK KyAgICBzdHJ1Y3QgX3RlbG9wdF94ZGlzcCB7CisgICAgICAgdW5zaWduZWQgY2hhciBuZWVkX3Rv X3NlbmQ7CisgICAgfSB4ZGlzcDsKKyNlbmRpZiAvKiBDS19YRElTUExPQyAqLworI2VuZGlmIC8q IENLX0VOVklST05NRU5UICovCisjaWZkZWYgQ0tfU05ETE9DCisgICAgc3RydWN0IF90ZWxvcHRf c25kbG9jIHsKKyAgICAgICB1bnNpZ25lZCBjaGFyIG5lZWRfdG9fc2VuZDsKKyAgICB9IHNuZGxv YzsKKyNlbmRpZiAvKiBDS19TTkRMT0MgKi8KKyNpZmRlZiBDS19GT1JXQVJEX1gKKyAgICBzdHJ1 Y3QgX3RlbG9wdF9md2RfeCB7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgbmVlZF90b19zZW5kOwor ICAgICAgICBpbnQgbGlzdGVuX3NvY2tldDsKKyAgICAgICAgc3RydWN0IF9jaGFubmVsIHsKKyAg ICAgICAgICAgIGludCBmZDsKKyAgICAgICAgICAgIGludCBpZDsKKyAgICAgICAgICAgIHVuc2ln bmVkIGNoYXIgbmVlZF90b19zZW5kX3hhdXRoOworICAgICAgICAgICAgdW5zaWduZWQgY2hhciBz dXNwZW5kOworICAgICAgICB9IGNoYW5uZWxbTUFYRldEWF07CisjaWZkZWYgTlQKKyAgICAgICAg aW50IHRocmVhZF9zdGFydGVkOworI2VuZGlmIC8qIE5UICovCisgICAgfSBmb3J3YXJkX3g7Cisj ZW5kaWYgLyogQ0tfRk9SV0FSRF9YICovCisjaWZkZWYgVE5fQ09NUE9SVAorICAgICAgc3RydWN0 IF90ZWxvcHRfY29tcG9ydCB7CisgICAgICAgICAgdW5zaWduZWQgY2hhciBuZWVkX3RvX3NlbmQ7 CisgICAgICAgICAgdW5zaWduZWQgY2hhciB3YWl0X2Zvcl9zYjsKKyAgICAgICAgICB1bnNpZ25l ZCBjaGFyIHdhaXRfZm9yX21zOworICAgICAgfSBjb21wb3J0OworI2VuZGlmIC8qIFROX0NPTVBP UlQgKi8KKyAgICAvKiBhZGRpdGlvbmFsIG9wdGlvbnMgc3VjaCBhcyBOZXcgRW52aXJvbm1lbnQg b3IgU2VuZCBMb2NhdGlvbiAqLworICB9IHNiOworfTsKK3R5cGVkZWYgc3RydWN0IF90ZWxvcHRf c3RhdGUgdGVsb3B0X3N0YXRlLCAqcF90ZWxvcHRfc3RhdGU7CisKKy8qIHRlbG9wdF9zdGF0ZXNb XSBpcyB0aGUgYXJyYXkgb2Ygc3RydWN0cyB3aGljaCB0aGUgc3RhdGUgb2YgZWFjaCB0ZWxuZXQg Ki8KKy8qIG9wdGlvbiBpcyBzdG9yZWQuICBXZSBhbGxvY2F0ZSBvbmUgbW9yZSB0aGFuIHdlIG5l ZWQgaW4gY2FzZSB3ZSBhcmUgICAgKi8KKy8qIHNlbnQgdGVsbmV0IG9wdGlvbnMgdGhhdCB3ZSBk byBub3QgcmVjb2duaXplLiAgSWYgYnkgc29tZSBjaGFuY2UgdGhlICAgKi8KKy8qIFRFTE9QVF9P SygpIGNoZWNrIGlzIHNraXBwZWQsIFRFTE9QVF9JTkRFWCgpIHdpbGwgZm9yY2UgdGhlIG9wdGlv biB0byAgKi8KKy8qIHVzZSB0aGUgZXh0cmEgY2VsbC4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworI2lmZGVmIFRFTE9QVF9TVEFURVMKK3Rl bG9wdF9zdGF0ZSB0ZWxvcHRfc3RhdGVzW05URUxPUFRTKzFdOworI2Vsc2UgLyogVEVMT1BUX1NU QVRFUyAqLworZXh0ZXJuIHRlbG9wdF9zdGF0ZSB0ZWxvcHRfc3RhdGVzW107CisjZW5kaWYgLyog VEVMT1BUX1NUQVRFUyAqLworCisjZGVmaW5lIFRFTE9QVF9NRSh4KSAodGVsb3B0X3N0YXRlc1tU RUxPUFRfSU5ERVgoeCldLm1lKQorI2RlZmluZSBURUxPUFRfVSh4KSAgKHRlbG9wdF9zdGF0ZXNb VEVMT1BUX0lOREVYKHgpXS51KQorI2RlZmluZSBURUxPUFRfTUVfTU9ERSh4KSBcCisgICAgICAg ICh0ZWxvcHRfc3RhdGVzW1RFTE9QVF9JTkRFWCh4KV0ubWVfbW9kZSkKKyNkZWZpbmUgVEVMT1BU X1VfTU9ERSh4KSAgXAorICAgICAgICAodGVsb3B0X3N0YXRlc1tURUxPUFRfSU5ERVgoeCldLnVf bW9kZSkKKyNkZWZpbmUgVEVMT1BUX1VOQU5TV0VSRURfV0lMTCh4KSBcCisgICAgICAgICh0ZWxv cHRfc3RhdGVzW1RFTE9QVF9JTkRFWCh4KV0udW5hbnN3ZXJlZF93aWxsKQorI2RlZmluZSBURUxP UFRfVU5BTlNXRVJFRF9ETyh4KSAgIFwKKyAgICAgICAgKHRlbG9wdF9zdGF0ZXNbVEVMT1BUX0lO REVYKHgpXS51bmFuc3dlcmVkX2RvKQorI2RlZmluZSBURUxPUFRfVU5BTlNXRVJFRF9XT05UKHgp IFwKKyAgICAgICAgKHRlbG9wdF9zdGF0ZXNbVEVMT1BUX0lOREVYKHgpXS51bmFuc3dlcmVkX3dv bnQpCisjZGVmaW5lIFRFTE9QVF9VTkFOU1dFUkVEX0RPTlQoeCkgICBcCisgICAgICAgICh0ZWxv cHRfc3RhdGVzW1RFTE9QVF9JTkRFWCh4KV0udW5hbnN3ZXJlZF9kb250KQorI2RlZmluZSBURUxP UFRfVU5BTlNXRVJFRF9TQih4KSAgIFwKKyAgICAgICAgKHRlbG9wdF9zdGF0ZXNbVEVMT1BUX0lO REVYKHgpXS51bmFuc3dlcmVkX3NiKQorI2RlZmluZSBURUxPUFRfU0IoeCkgXAorICAgICAgICAo dGVsb3B0X3N0YXRlc1tURUxPUFRfSU5ERVgoeCldLnNiKQorI2RlZmluZSBURUxPUFRfREVGX1Nf TUVfTU9ERSh4KSBcCisgICAgICAgICh0ZWxvcHRfc3RhdGVzW1RFTE9QVF9JTkRFWCh4KV0uZGVm X3NlcnZlcl9tZV9tb2RlKQorI2RlZmluZSBURUxPUFRfREVGX1NfVV9NT0RFKHgpICBcCisgICAg ICAgICh0ZWxvcHRfc3RhdGVzW1RFTE9QVF9JTkRFWCh4KV0uZGVmX3NlcnZlcl91X21vZGUpCisj ZGVmaW5lIFRFTE9QVF9ERUZfQ19NRV9NT0RFKHgpIFwKKyAgICAgICAgKHRlbG9wdF9zdGF0ZXNb VEVMT1BUX0lOREVYKHgpXS5kZWZfY2xpZW50X21lX21vZGUpCisjZGVmaW5lIFRFTE9QVF9ERUZf Q19VX01PREUoeCkgIFwKKyAgICAgICAgKHRlbG9wdF9zdGF0ZXNbVEVMT1BUX0lOREVYKHgpXS5k ZWZfY2xpZW50X3VfbW9kZSkKKworI2lmZGVmIFRFTE9QVF9NT0RFUworY2hhciAqIHRlbG9wdF9t b2Rlc1s0XSA9IHsKKyAgICAiUkVGVVNFRCIsICJBQ0NFUFRFRCIsICJSRVFVRVNURUQiLCAiUkVR VUlSRUQiCit9OworI2Vsc2UgLyogVEVMT1BUX01PREVTICovCitleHRlcm4gY2hhciAqIHRlbG9w dF9tb2Rlc1tdOworI2VuZGlmIC8qIFRFTE9QVF9NT0RFUyAqLworCisjaWZkZWYgVEVMT1BUX01B Q1JPCisjZGVmaW5lIFRFTE9QVF9NT0RFX09LKHgpICgodW5zaWduZWQgaW50KSh4KSA8PSBUTl9O R19NVSkKKyNkZWZpbmUgVEVMT1BUX01PREUoeCkgKFRFTE9QVF9NT0RFX09LKHgpP3RlbG9wdF9t b2Rlc1soeCktVE5fTkdfUkZdOiJVTktOT1dOIikKKyNlbHNlIC8qIFRFTE9QVF9NQUNSTyAqLwor X1BST1RPVFlQKGludCB0ZWxvcHRfbW9kZV9vaywoaW50KSk7CitfUFJPVE9UWVAoQ0hBUiAqIHRl bG9wdF9tb2RlLChpbnQpKTsKKworI2RlZmluZSBURUxPUFRfTU9ERV9PSyh4KSB0ZWxvcHRfbW9k ZV9vayh4KQorI2RlZmluZSBURUxPUFRfTU9ERSh4KSAgICB0ZWxvcHRfbW9kZSh4KQorI2VuZGlm IC8qIFRFTE9QVF9NQUNSTyAqLworCisvKiBTdWItb3B0aW9uIHF1YWxpZmllcnMgKi8KKyNkZWZp bmUgVEVMUVVBTF9JUyAgICAgIDAgICAgICAgLyogb3B0aW9uIGlzLi4uICovCisjZGVmaW5lIFRF TFFVQUxfU0VORCAgICAxICAgICAgIC8qIHNlbmQgb3B0aW9uICovCisjZGVmaW5lIFRFTFFVQUxf SU5GTyAgICAyICAgICAgIC8qIEVOVklST046IGluZm9ybWF0aW9uYWwgdmVyc2lvbiBvZiBJUyAq LworI2RlZmluZSBURUxRVUFMX1JFUExZICAgMiAgICAgICAvKiBBVVRIRU5USUNBVElPTjogY2xp ZW50IHZlcnNpb24gb2YgSVMgKi8KKyNkZWZpbmUgVEVMUVVBTF9OQU1FICAgIDMgICAgICAgLyog QVVUSEVOVElDQVRJT046IGNsaWVudCB2ZXJzaW9uIG9mIElTICovCisKKyNkZWZpbmUgVEVMX0VO Vl9WQVIgICAgIDAKKyNkZWZpbmUgVEVMX0VOVl9WQUxVRSAgIDEKKyNkZWZpbmUgVEVMX0VOVl9F U0MgICAgIDIKKyNkZWZpbmUgVEVMX0VOVl9VU0VSVkFSIDMKKworI2RlZmluZSBMRkxPV19PRkYg ICAgICAgICAgICAgICAwICAgICAgIC8qIERpc2FibGUgcmVtb3RlIGZsb3cgY29udHJvbCAqLwor I2RlZmluZSBMRkxPV19PTiAgICAgICAgICAgICAgICAxICAgICAgIC8qIEVuYWJsZSByZW1vdGUg ZmxvdyBjb250cm9sICovCisjZGVmaW5lIExGTE9XX1JFU1RBUlRfQU5ZICAgICAgIDIgICAgICAg LyogUmVzdGFydCBvdXRwdXQgb24gYW55IGNoYXIgKi8KKyNkZWZpbmUgTEZMT1dfUkVTVEFSVF9Y T04gICAgICAgMyAgICAgICAvKiBSZXN0YXJ0IG91dHB1dCBvbmx5IG9uIFhPTiAqLworCisvKgor ICogTElORU1PREUgc3Vib3B0aW9ucworICovCisKKyNkZWZpbmUgTE1fTU9ERSAgICAgICAgIDEK KyNkZWZpbmUgTE1fRk9SV0FSRE1BU0sgIDIKKyNkZWZpbmUgTE1fU0xDICAgICAgICAgIDMKKwor I2RlZmluZSBNT0RFX0VESVQgICAgICAgMHgwMQorI2RlZmluZSBNT0RFX1RSQVBTSUcgICAgMHgw MgorI2RlZmluZSBNT0RFX0FDSyAgICAgICAgMHgwNAorI2RlZmluZSBNT0RFX1NPRlRfVEFCICAg MHgwOAorI2RlZmluZSBNT0RFX0xJVF9FQ0hPICAgMHgxMAorCisjZGVmaW5lIE1PREVfTUFTSyAg ICAgICAweDFmCisKKy8qIE5vdCBwYXJ0IG9mIHByb3RvY29sLCBidXQgbmVlZGVkIHRvIHNpbXBs aWZ5IHRoaW5ncy4uLiAqLworI2RlZmluZSBNT0RFX0ZMT1cgICAgICAgICAgICAgICAweDAxMDAK KyNkZWZpbmUgTU9ERV9FQ0hPICAgICAgICAgICAgICAgMHgwMjAwCisjZGVmaW5lIE1PREVfSU5C SU4gICAgICAgICAgICAgIDB4MDQwMAorI2RlZmluZSBNT0RFX09VVEJJTiAgICAgICAgICAgICAw eDA4MDAKKyNkZWZpbmUgTU9ERV9GT1JDRSAgICAgICAgICAgICAgMHgxMDAwCisKKyNkZWZpbmUg U0xDX1NZTkNIICAgICAgIDEKKyNkZWZpbmUgU0xDX0JSSyAgICAgICAgIDIKKyNkZWZpbmUgU0xD X0lQICAgICAgICAgIDMKKyNkZWZpbmUgU0xDX0FPICAgICAgICAgIDQKKyNkZWZpbmUgU0xDX0FZ VCAgICAgICAgIDUKKyNkZWZpbmUgU0xDX0VPUiAgICAgICAgIDYKKyNkZWZpbmUgU0xDX0FCT1JU ICAgICAgIDcKKyNkZWZpbmUgU0xDX0VPRiAgICAgICAgIDgKKyNkZWZpbmUgU0xDX1NVU1AgICAg ICAgIDkKKyNkZWZpbmUgU0xDX0VDICAgICAgICAgIDEwCisjZGVmaW5lIFNMQ19FTCAgICAgICAg ICAxMQorI2RlZmluZSBTTENfRVcgICAgICAgICAgMTIKKyNkZWZpbmUgU0xDX1JQICAgICAgICAg IDEzCisjZGVmaW5lIFNMQ19MTkVYVCAgICAgICAxNAorI2RlZmluZSBTTENfWE9OICAgICAgICAg MTUKKyNkZWZpbmUgU0xDX1hPRkYgICAgICAgIDE2CisjZGVmaW5lIFNMQ19GT1JXMSAgICAgICAx NworI2RlZmluZSBTTENfRk9SVzIgICAgICAgMTgKKyNkZWZpbmUgU0xDX01DTCAgICAgICAgIDE5 CisjZGVmaW5lIFNMQ19NQ1IgICAgICAgICAyMAorI2RlZmluZSBTTENfTUNXTCAgICAgICAgMjEK KyNkZWZpbmUgU0xDX01DV1IgICAgICAgIDIyCisjZGVmaW5lIFNMQ19NQ0JPTCAgICAgICAyMwor I2RlZmluZSBTTENfTUNFT0wgICAgICAgMjQKKyNkZWZpbmUgU0xDX0lOU1JUICAgICAgIDI1Cisj ZGVmaW5lIFNMQ19PVkVSICAgICAgICAyNgorI2RlZmluZSBTTENfRUNSICAgICAgICAgMjcKKyNk ZWZpbmUgU0xDX0VXUiAgICAgICAgIDI4CisjZGVmaW5lIFNMQ19FQk9MICAgICAgICAyOQorI2Rl ZmluZSBTTENfRUVPTCAgICAgICAgMzAKKworI2RlZmluZSBOU0xDICAgICAgICAgICAgMzAKKwor LyoKKyAqIEZvciBiYWNrd2FyZHMgY29tcGF0YWJpbGl0eSwgd2UgZGVmaW5lIFNMQ19OQU1FUyB0 byBiZSB0aGUKKyAqIGxpc3Qgb2YgbmFtZXMgaWYgU0xDX05BTUVTIGlzIG5vdCBkZWZpbmVkLgor ICovCisjZGVmaW5lIFNMQ19OQU1FTElTVCAgICAiMCIsICJTWU5DSCIsICJCUksiLCAiSVAiLCAi QU8iLCAiQVlUIiwgIkVPUiIsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICJBQk9SVCIsICJF T0YiLCAiU1VTUCIsICJFQyIsICJFTCIsICJFVyIsICJSUCIsIFwKKyAgICAgICAgICAgICAgICAg ICAgICAgICJMTkVYVCIsICJYT04iLCAiWE9GRiIsICJGT1JXMSIsICJGT1JXMiIsIFwKKyAgICAg ICAgICAgICAgICAgICAgICAgICJNQ0wiLCAiTUNSIiwgIk1DV0wiLCAiTUNXUiIsICJNQ0JPTCIs ICJNQ0VPTCIsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICJJTlNSVCIsICJPVkVSIiwgIkVD UiIsICJFV1IiLCAiRUJPTCIsICJFRU9MIiwgMAorI2lmZGVmICBTTENfTkFNRVMKK2NoYXIgKnNs Y19uYW1lc1tdID0geworICAgICAgICBTTENfTkFNRUxJU1QKK307CisjZWxzZQorZXh0ZXJuIGNo YXIgKnNsY19uYW1lc1tdOworI2RlZmluZSBTTENfTkFNRVMgU0xDX05BTUVMSVNUCisjZW5kaWYK KworI2RlZmluZSBTTENfTkFNRV9PSyh4KSAgKCh1bnNpZ25lZCBpbnQpKHgpIDw9IE5TTEMpCisj ZGVmaW5lIFNMQ19OQU1FKHgpICAgICAoU0xDX05BTUVfT0soeCk/c2xjX25hbWVzW3hdOiJVTktO T1dOIikKKworI2RlZmluZSBTTENfTk9TVVBQT1JUICAgICAgIDAKKyNkZWZpbmUgU0xDX0NBTlRD SEFOR0UgICAgICAxCisjZGVmaW5lIFNMQ19WQVJJQUJMRSAgICAgICAgMgorI2RlZmluZSBTTENf REVGQVVMVCAgICAgICAgIDMKKyNkZWZpbmUgU0xDX0xFVkVMQklUUyAgICAgICAweDAzCisKKyNk ZWZpbmUgU0xDX0ZVTkMgICAgICAgICAgICAwCisjZGVmaW5lIFNMQ19GTEFHUyAgICAgICAgICAg MQorI2RlZmluZSBTTENfVkFMVUUgICAgICAgICAgIDIKKworI2RlZmluZSBTTENfQUNLICAgICAg ICAgICAgIDB4ODAKKyNkZWZpbmUgU0xDX0ZMVVNISU4gICAgICAgICAweDQwCisjZGVmaW5lIFNM Q19GTFVTSE9VVCAgICAgICAgMHgyMAorCisjZGVmaW5lIE9MRF9FTlZfVkFSICAgICAgICAgMQor I2RlZmluZSBPTERfRU5WX1ZBTFVFICAgICAgIDAKKyNkZWZpbmUgTkVXX0VOVl9WQVIgICAgICAg ICAwCisjZGVmaW5lIE5FV19FTlZfVkFMVUUgICAgICAgMQorI2RlZmluZSBFTlZfRVNDICAgICAg ICAgICAgIDIKKyNkZWZpbmUgRU5WX1VTRVJWQVIgICAgICAgICAzCisKKyNkZWZpbmUgRldEWF9T Q1JFRU4gICAgICAgICAwCisjZGVmaW5lIEZXRFhfT1BFTiAgICAgICAgICAgMQorI2RlZmluZSBG V0RYX0NMT1NFICAgICAgICAgIDIKKyNkZWZpbmUgRldEWF9EQVRBICAgICAgICAgICAzCisjZGVm aW5lIEZXRFhfT1BUSU9OUyAgICAgICAgNAorI2RlZmluZSBGV0RYX09QVF9EQVRBICAgICAgIDUK KyNkZWZpbmUgRldEWF9YT0ZGICAgICAgICAgICA2CisjZGVmaW5lIEZXRFhfWE9OICAgICAgICAg ICAgNworCisjZGVmaW5lIEZXRFhfT1BUX05PTkUgICAgICAgMAorI2RlZmluZSBGV0RYX09QVF9Y QVVUSCAgICAgIDEKKworLyoKKyAqIEFVVEhFTlRJQ0FUSU9OIHN1Ym9wdGlvbnMKKyAqLworCisv KgorICogV2hvIGlzIGF1dGhlbnRpY2F0aW5nIHdobyAuLi4KKyAqLworI2RlZmluZSBBVVRIX0NM SUVOVF9UT19TRVJWRVIgICAwICAgICAgIC8qIENsaWVudCBhdXRoZW50aWNhdGluZyBzZXJ2ZXIg Ki8KKyNkZWZpbmUgQVVUSF9TRVJWRVJfVE9fQ0xJRU5UICAgMSAgICAgICAvKiBTZXJ2ZXIgYXV0 aGVudGljYXRpbmcgY2xpZW50ICovCisjZGVmaW5lIEFVVEhfV0hPX01BU0sgICAgICAgICAgIDEK KworLyoKKyAqIGFtb3VudCBvZiBhdXRoZW50aWNhdGlvbiBkb25lCisgKi8KKyNkZWZpbmUgQVVU SF9IT1dfT05FX1dBWSAgICAgICAgMAorI2RlZmluZSBBVVRIX0hPV19NVVRVQUwgICAgICAgICAy CisjZGVmaW5lIEFVVEhfSE9XX01BU0sgICAgICAgICAgIDIKKworLyoKKyAqIHNob3VsZCB3ZSBi ZSBlbmNyeXB0aW5nPworICovCisjZGVmaW5lIEFVVEhfRU5DUllQVF9PRkYgICAgICAgICAgICAg MAorI2RlZmluZSBBVVRIX0VOQ1JZUFRfVVNJTkdfVEVMT1BUICAgIDQKKyNkZWZpbmUgQVVUSF9F TkNSWVBUX0FGVEVSX0VYQ0hBTkdFIDE2CisjZGVmaW5lIEFVVEhfRU5DUllQVF9TVEFSVF9UTFMg ICAgICAyMAorI2RlZmluZSBBVVRIX0VOQ1JZUFRfTUFTSyAgICAgICAgICAgMjAKKworLyoKKyAq IHdpbGwgd2UgYmUgZm9yd2FyZGluZz8KKyAqIGlmIHdlIHdhbnQgdG8gYWN0aXZhdGUgdGhlIHVz ZSBvZiB0aGlzIGZsYWcgdGhlbgorICogICAjZGVmaW5lIFVTRV9JTklfQ1JFRF9GV0QKKyAqLwor I2RlZmluZSBJTklfQ1JFRF9GV0RfT0ZGICAgICAgICAwCisjZGVmaW5lIElOSV9DUkVEX0ZXRF9P TiAgICAgICAgIDgKKyNkZWZpbmUgSU5JX0NSRURfRldEX01BU0sgICAgICAgOAorI2RlZmluZSBV U0VfSU5JX0NSRURfRldECisKKyNkZWZpbmUgQVVUSFRZUEVfTlVMTCAgICAgICAgICAgMAorI2Rl ZmluZSBBVVRIVFlQRV9LRVJCRVJPU19WNCAgICAxCisjZGVmaW5lIEFVVEhUWVBFX0tFUkJFUk9T X1Y1ICAgIDIKKyNkZWZpbmUgQVVUSFRZUEVfU1BYICAgICAgICAgICAgMworI2RlZmluZSBBVVRI VFlQRV9NSU5LICAgICAgICAgICA0CisjZGVmaW5lIEFVVEhUWVBFX1NSUCAgICAgICAgICAgIDUK KyNkZWZpbmUgQVVUSFRZUEVfUlNBICAgICAgICAgICAgNgorI2RlZmluZSBBVVRIVFlQRV9TU0wg ICAgICAgICAgICA3CisjZGVmaW5lIEFVVEhUWVBFX0xPS0kgICAgICAgICAgMTAKKyNkZWZpbmUg QVVUSFRZUEVfU1NBICAgICAgICAgICAxMQorI2RlZmluZSBBVVRIVFlQRV9LRUFfU0ogICAgICAg IDEyCisjZGVmaW5lIEFVVEhUWVBFX0tFQV9JTlRFRyAgICAgMTMKKyNkZWZpbmUgQVVUSFRZUEVf RFNTICAgICAgICAgICAxNAorI2RlZmluZSBBVVRIVFlQRV9OVExNICAgICAgICAgIDE1CisjZGVm aW5lIEFVVEhUWVBFX0dTU0FQSV9LUkI1ICAgMTYgICAgICAgICAgICAgICAvKiBOb3QgYWxsb2Nh dGVkIGJ5IElBTkEgKi8KKyNpZmRlZiBBVVRIVFlQRV9DTlQKKyN1bmRlZiBBVVRIVFlQRV9DTlQK KyNlbmRpZiAvKiBBVVRIVFlQRV9DTlQgKi8KKyNkZWZpbmUgQVVUSFRZUEVfQ05UICAgICAgICAg ICAxNworCisvKgorICogQVVUSFRZUEVzIExhc3QgdXBkYXRlZCAyMSBNYXJjaCAxOTk5CisgKiBm cm9tIGh0dHA6Ly93d3cuaXNpLmVkdS9pbi1ub3Rlcy9pYW5hL2Fzc2lnbm1lbnRzL3RlbG5ldC1v cHRpb25zCisgKi8KKworI2RlZmluZSBBVVRIVFlQRV9BVVRPICAgICAgICAgICA5OQorCisjaWZk ZWYgIEFVVEhfTkFNRVMKK2NoYXIgKmF1dGh0eXBlX25hbWVzW10gPSB7CisgICAgIk5VTEwiLCAg ICAgICAgICAgICAgICAgICAgIC8qIFJGQyAyOTQxICovCisgICAgIktFUkJFUk9TX1Y0IiwgICAg ICAgICAgICAgIC8qIFJGQyAyOTQxIC8gMTQxMSAqLworICAgICJLRVJCRVJPU19WNSIsICAgICAg ICAgICAgICAvKiBSRkMgMjk0MSAqLworICAgICJTUFgiLCAgICAgICAgICAgICAgICAgICAgICAv KiBSRkMgMjk0MSAobm90IEludGVybmV0IFN0YW5kYXJkKSAqLworICAgICJNSU5LIiwgICAgICAg ICAgICAgICAgICAgICAvKiBSRkMgMjk0MSAobm90IEludGVybmV0IFN0YW5kYXJkKSAqLworICAg ICJTUlAiLCAgICAgICAgICAgICAgICAgICAgICAvKiBSRkMgMjk0NCAqLworICAgICJSU0EiLCAg ICAgICAgICAgICAgICAgICAgICAvKiBSRkMgMjk0MSAobm90IEludGVybmV0IFN0YW5kYXJkKSAq LworICAgICJTU0wiLCAgICAgICAgICAgICAgICAgICAgICAvKiBSRkMgMjk0MSAobm90IEludGVy bmV0IFN0YW5kYXJkKSAqLworICAgICJJQU5BXzgiLCAgICAgICAgICAgICAgICAgICAvKiBub3Qg YXNzaWduZWQgYnkgSUFOQSAqLworICAgICJJQU5BXzkiLCAgICAgICAgICAgICAgICAgICAvKiBu b3QgYXNzaWduZWQgYnkgSUFOQSAqLworICAgICJMT0tJIiwgICAgICAgICAgICAgICAgICAgICAv KiBSRkMgMjk0MSAobm90IEludGVybmV0IFN0YW5kYXJkKSAqLworICAgICJTU0EiLCAgICAgICAg ICAgICAgICAgICAgICAvKiBTY2hvY2ggKi8KKyAgICAiS0VBX1NKIiwgICAgICAgICAgICAgICAg ICAgLyogUkZDIDI5NTEgKi8KKyAgICAiS0VBX1NKX0lOVEVHIiwgICAgICAgICAgICAgLyogUkZD IDI5NTEgKi8KKyAgICAiRFNTIiwgICAgICAgICAgICAgICAgICAgICAgLyogUkZDIDI5NDMgKi8K KyAgICAiTlRMTSIsICAgICAgICAgICAgICAgICAgICAgLyogS2FobiA8bG91aXNrQG1pY3Jvc29m dC5jb20+ICovCisgICAgIkdTU0FQSS1LUkI1IiwgICAgICAgICAgICAgIC8qIGV4cGVyaW1lbnRh bCAtIGFsdG1hbiAqLworICAgIDAKK307CitjaGFyICogYXV0aG1vZGVfbmFtZXNbXSA9IHsKKyAg ICAiQ0xJRU5UX1RPX1NFUlZFUnxPTkVfV0FZIiwKKyAgICAiU0VSVkVSX1RPX0NMSUVOVHxPTkVf V0FZIiwKKyAgICAiQ0xJRU5UX1RPX1NFUlZFUnxNVVRVQUwiLAorICAgICJTRVJWRVJfVE9fQ0xJ RU5UfE1VVFVBTCIsCisgICAgIkNMSUVOVF9UT19TRVJWRVJ8T05FX1dBWXxFTkNSWVBUX1VTSU5H X1RFTE9QVCIsCisgICAgIlNFUlZFUl9UT19DTElFTlR8T05FX1dBWXxFTkNSWVBUX1VTSU5HX1RF TE9QVCIsCisgICAgIkNMSUVOVF9UT19TRVJWRVJ8TVVUVUFMfEVOQ1JZUFRfVVNJTkdfVEVMT1BU IiwKKyAgICAiU0VSVkVSX1RPX0NMSUVOVHxNVVRVQUx8RU5DUllQVF9VU0lOR19URUxPUFQiLAor ICAgICJDTElFTlRfVE9fU0VSVkVSfE9ORV9XQVl8Q1JFRF9GV0QiLAorICAgICJTRVJWRVJfVE9f Q0xJRU5UfE9ORV9XQVl8Q1JFRF9GV0QiLAorICAgICJDTElFTlRfVE9fU0VSVkVSfE1VVFVBTHxD UkVEX0ZXRCIsCisgICAgIlNFUlZFUl9UT19DTElFTlR8TVVUVUFMfENSRURfRldEIiwKKyAgICAi Q0xJRU5UX1RPX1NFUlZFUnxPTkVfV0FZfEVOQ1JZUFRfVVNJTkdfVEVMT1BUfENSRURfRldEIiwK KyAgICAiU0VSVkVSX1RPX0NMSUVOVHxPTkVfV0FZfEVOQ1JZUFRfVVNJTkdfVEVMT1BUfENSRURf RldEIiwKKyAgICAiQ0xJRU5UX1RPX1NFUlZFUnxNVVRVQUx8RU5DUllQVF9VU0lOR19URUxPUFR8 Q1JFRF9GV0QiLAorICAgICJTRVJWRVJfVE9fQ0xJRU5UfE1VVFVBTHxFTkNSWVBUX1VTSU5HX1RF TE9QVHxDUkVEX0ZXRCIsCisgICAgIkNMSUVOVF9UT19TRVJWRVJ8T05FX1dBWXxFTkNSWVBUX0FG VEVSX0VYQ0hBTkdFIiwKKyAgICAiU0VSVkVSX1RPX0NMSUVOVHxPTkVfV0FZfEVOQ1JZUFRfQUZU RVJfRVhDSEFOR0UiLAorICAgICJDTElFTlRfVE9fU0VSVkVSfE1VVFVBTHxFTkNSWVBUX0FGVEVS X0VYQ0hBTkdFIiwKKyAgICAiU0VSVkVSX1RPX0NMSUVOVHxNVVRVQUx8RU5DUllQVF9BRlRFUl9F WENIQU5HRSIsCisgICAgIkNMSUVOVF9UT19TRVJWRVJ8T05FX1dBWXxFTkNSWVBUX1NUQVJUX1RM UyIsCisgICAgIlNFUlZFUl9UT19DTElFTlR8T05FX1dBWXxFTkNSWVBUX1NUQVJUX1RMUyIsCisg ICAgIkNMSUVOVF9UT19TRVJWRVJ8TVVUVUFMfEVOQ1JZUFRfU1RBUlRfVExTIiwKKyAgICAiU0VS VkVSX1RPX0NMSUVOVHxNVVRVQUx8RU5DUllQVF9TVEFSVF9UTFMiLAorICAgICJDTElFTlRfVE9f U0VSVkVSfE9ORV9XQVl8RU5DUllQVF9BRlRFUl9FWENIQU5HRXxDUkVEX0ZXRCIsCisgICAgIlNF UlZFUl9UT19DTElFTlR8T05FX1dBWXxFTkNSWVBUX0FGVEVSX0VYQ0hBTkdFfENSRURfRldEIiwK KyAgICAiQ0xJRU5UX1RPX1NFUlZFUnxNVVRVQUx8RU5DUllQVF9BRlRFUl9FWENIQU5HRXxDUkVE X0ZXRCIsCisgICAgIlNFUlZFUl9UT19DTElFTlR8TVVUVUFMfEVOQ1JZUFRfQUZURVJfRVhDSEFO R0V8Q1JFRF9GV0QiLAorICAgICJDTElFTlRfVE9fU0VSVkVSfE9ORV9XQVl8RU5DUllQVF9TVEFS VF9UTFN8Q1JFRF9GV0QiLAorICAgICJTRVJWRVJfVE9fQ0xJRU5UfE9ORV9XQVl8RU5DUllQVF9T VEFSVF9UTFN8Q1JFRF9GV0QiLAorICAgICJDTElFTlRfVE9fU0VSVkVSfE1VVFVBTHxFTkNSWVBU X1NUQVJUX1RMU3xDUkVEX0ZXRCIsCisgICAgIlNFUlZFUl9UT19DTElFTlR8TVVUVUFMfEVOQ1JZ UFRfU1RBUlRfVExTfENSRURfRldEIiwKKyAgICAwCit9OworI2Vsc2UKK2V4dGVybiBjaGFyICph dXRodHlwZV9uYW1lc1tdOworZXh0ZXJuIGNoYXIgKmF1dGhtb2RlX25hbWVzW107CisjZW5kaWYK KyNkZWZpbmUgQVVUSE1PREVfQ05UICAzMgorCisjZGVmaW5lIEFVVEhUWVBFX05BTUVfT0soeCkg ICAgICgodW5zaWduZWQgaW50KSh4KSA8IEFVVEhUWVBFX0NOVCkKKyNkZWZpbmUgQVVUSFRZUEVf TkFNRSh4KSAgICAgIChBVVRIVFlQRV9OQU1FX09LKHgpP2F1dGh0eXBlX25hbWVzW3hdOiJVTktO T1dOIikKKworI2RlZmluZSBBVVRITU9ERV9OQU1FX09LKHgpICAgICAoKHVuc2lnbmVkIGludCko eCkgPCBBVVRITU9ERV9DTlQpCisjZGVmaW5lIEFVVEhNT0RFX05BTUUoeCkgICAgICAoQVVUSE1P REVfTkFNRV9PSyh4KT9hdXRobW9kZV9uYW1lc1t4XToiVU5LTk9XTiIpCisKKy8qIEtlcmJlcm9z IEF1dGhlbnRpY2F0aW9uIE1lc3NhZ2UgSWRlbnRpZmllcnMgKi8KKyNkZWZpbmUgS1JCX0FVVEgg ICAgICAgICAgICAgICAgMCAgICAgICAvKiBBdXRoZW50aWNhdGlvbiBkYXRhIGZvbGxvd3MgKi8K KyNkZWZpbmUgS1JCX1JFSkVDVCAgICAgICAgICAgICAgMSAgICAgICAvKiBSZWplY3RlZCAocmVh c29uIG1pZ2h0IGZvbGxvdykgKi8KKyNkZWZpbmUgS1JCX0FDQ0VQVCAgICAgICAgICAgICAgMiAg ICAgICAvKiBBY2NlcHRlZCAqLworI2RlZmluZSBLUkI0X0NIQUxMRU5HRSAgICAgICAgICAzCisj ZGVmaW5lIEtSQjRfUkVTUE9OU0UgICAgICAgICAgIDQKKyNkZWZpbmUgS1JCNV9SRVNQT05TRSAg ICAgICAgICAgMyAgICAgICAvKiBSZXNwb25zZSBmb3IgbXV0dWFsIGF1dGguICovCisjZGVmaW5l IEtSQjVfRk9SV0FSRCAgICAgICAgICAgIDQgICAgICAgLyogRm9yd2FyZGVkIGNyZWRlbnRpYWxz IGZvbGxvdyAqLworI2RlZmluZSBLUkI1X0ZPUldBUkRfQUNDRVBUICAgICA1ICAgICAgIC8qIEZv cndhcmRlZCBjcmVkZW50aWFscyBhY2NlcHRlZCAqLworI2RlZmluZSBLUkI1X0ZPUldBUkRfUkVK RUNUICAgICA2ICAgICAgIC8qIEZvcndhcmRlZCBjcmVkZW50aWFscyByZWplY3RlZCAqLworI2Rl ZmluZSBLUkI1X1RMU19WRVJJRlkgICAgICAgICA3ICAgICAgIC8qIFRMUyBGaW5pc2hlZCBNc2cg dmVyaWZpZXIgKi8KKworLyogR1NTQVBJLUtSQjUgQXV0aGVudGljYXRpb24gTWVzc2FnZSBJZGVu dGlmaWVycyAqLworI2RlZmluZSBHU1NfQVVUSF9EQVRBICAgICAgICAgICAwICAgICAgIC8qIEF1 dGhlbnRpY2F0aW9uIGRhdGEgZm9sbG93cyAqLworI2RlZmluZSBHU1NfUkVKRUNUICAgICAgICAg ICAgICAxICAgICAgIC8qIFJlamVjdGVkIChyZWFzb24gbWlnaHQgZm9sbG93KSAqLworI2RlZmlu ZSBHU1NfQUNDRVBUICAgICAgICAgICAgICAyICAgICAgIC8qIEFjY2VwdGVkICh1c2VybmFtZSBt aWdodCBmb2xsb3cpICovCisjZGVmaW5lIEdTU19DT05USU5VRSAgICAgICAgICAgIDMKKworLyog U2VjdXJlIFJlbW90ZSBQYXNzd29yZCBBdXRoZW50aWNhdGlvbiBNZXNzYWdlIElkZW50aWZpZXJz ICovCisjZGVmaW5lIFNSUF9BVVRIICAgICAgICAgICAgICAgIDAgICAgICAgLyogQXV0aGVudGlj YXRpb24gZGF0YSBmb2xsb3dzICovCisjZGVmaW5lIFNSUF9SRUpFQ1QgICAgICAgICAgICAgIDEg ICAgICAgLyogUmVqZWN0ZWQgKHJlYXNvbiBtaWdodCBmb2xsb3cpICovCisjZGVmaW5lIFNSUF9B Q0NFUFQgICAgICAgICAgICAgIDIgICAgICAgLyogQWNjZXB0ZWQgKi8KKyNkZWZpbmUgU1JQX0NI QUxMRU5HRSAgICAgICAgICAgMworI2RlZmluZSBTUlBfUkVTUE9OU0UgICAgICAgICAgICA0Cisj ZGVmaW5lIFNSUF9FWFAgICAgICAgICAgICAgICAgIDggICAgICAgLyogKi8KKyNkZWZpbmUgU1JQ X1BBUkFNUyAgICAgICAgICAgICAgOSAgICAgICAvKiAqLworCisvKiBUZWxuZXQgQXV0aCB1c2lu ZyBLRUEgYW5kIFNLSVBKQUNLICovCisKKyNkZWZpbmUgS0VBX0NFUlRBX1JBICAgICAgICAgICAg ICAxCisjZGVmaW5lIEtFQV9DRVJUQl9SQl9JVkJfTk9OQ0VCICAgMgorI2RlZmluZSBLRUFfSVZB X1JFU1BPTlNFQl9OT05DRUEgIDMKKyNkZWZpbmUgS0VBX1JFU1BPTlNFQSAgICAgICAgICAgICA0 CisKKy8qIFRpbSBIdWRzb24ncyBTU0wgQXV0aGVudGljYXRpb24gTWVzc2FnZSBJZGVudGlmaWVy cyAqLworI2RlZmluZSBTU0xfU1RBUlQgICAgIDEKKyNkZWZpbmUgU1NMX0FDQ0VQVCAgICAyCisj ZGVmaW5lIFNTTF9SRUpFQ1QgICAgMworCisvKiBNaWNyb3NvZnQgTlRMTSBBdXRoZW50aWNhdGlv biBNZXNzYWdlIElkZW50aWZpZXJzICovCisjZGVmaW5lIE5UTE1fQVVUSCAgIDAKKyNkZWZpbmUg TlRMTV9DSEFMTEVOR0UgMQorI2RlZmluZSBOVExNX1JFU1BPTlNFICAyCisjZGVmaW5lIE5UTE1f QUNDRVBUIDMKKyNkZWZpbmUgTlRMTV9SRUpFQ1QgNAorCisvKiBHZW5lcmljIENvbnN0YW50cyAq LworI2RlZmluZSBBVVRIX1NVQ0NFU1MgICAgMAorI2RlZmluZSBBVVRIX0ZBSUxVUkUgICAgMjU1 CisKKy8qCisgKiBFTkNSWVBUaW9uIHN1Ym9wdGlvbnMKKyAqLworI2RlZmluZSBFTkNSWVBUX0lT ICAgICAgICAgICAgICAwICAgICAgIC8qIEkgcGljayBlbmNyeXB0aW9uIHR5cGUgLi4uICovCisj ZGVmaW5lIEVOQ1JZUFRfU1VQUE9SVCAgICAgICAgIDEgICAgICAgLyogSSBzdXBwb3J0IGVuY3J5 cHRpb24gdHlwZXMgLi4uICovCisjZGVmaW5lIEVOQ1JZUFRfUkVQTFkgICAgICAgICAgIDIgICAg ICAgLyogSW5pdGlhbCBzZXR1cCByZXNwb25zZSAqLworI2RlZmluZSBFTkNSWVBUX1NUQVJUICAg ICAgICAgICAzICAgICAgIC8qIEFtIHN0YXJ0aW5nIHRvIHNlbmQgZW5jcnlwdGVkICovCisjZGVm aW5lIEVOQ1JZUFRfRU5EICAgICAgICAgICAgIDQgICAgICAgLyogQW0gZW5kaW5nIGVuY3J5cHRl ZCAqLworI2RlZmluZSBFTkNSWVBUX1JFUVNUQVJUICAgICAgICA1ICAgICAgIC8qIFJlcXVlc3Qg eW91IHN0YXJ0IGVuY3J5cHRpbmcgKi8KKyNkZWZpbmUgRU5DUllQVF9SRVFFTkQgICAgICAgICAg NiAgICAgICAvKiBSZXF1ZXN0IHlvdSBzZW5kIGVuY3J5cHRpbmcgKi8KKyNkZWZpbmUgRU5DUllQ VF9FTkNfS0VZSUQgICAgICAgNworI2RlZmluZSBFTkNSWVBUX0RFQ19LRVlJRCAgICAgICA4Cisj ZGVmaW5lIEVOQ1JZUFRfQ05UICAgICAgICAgICAgIDkKKworI2RlZmluZSBFTkNUWVBFX0FOWSAg ICAgICAgICAgICAwCisjZGVmaW5lIEVOQ1RZUEVfREVTX0NGQjY0ICAgICAgIDEKKyNkZWZpbmUg RU5DVFlQRV9ERVNfT0ZCNjQgICAgICAgMgorI2RlZmluZSBFTkNUWVBFX0RFUzNfQ0ZCNjQgICAg ICAzCisjZGVmaW5lIEVOQ1RZUEVfREVTM19PRkI2NCAgICAgIDQKKyNkZWZpbmUgRU5DVFlQRV9D QVNUNV80MF9DRkI2NCAgOAorI2RlZmluZSBFTkNUWVBFX0NBU1Q1XzQwX09GQjY0ICA5CisjZGVm aW5lIEVOQ1RZUEVfQ0FTVDEyOF9DRkI2NCAgIDEwCisjZGVmaW5lIEVOQ1RZUEVfQ0FTVDEyOF9P RkI2NCAgIDExCisjaWZkZWYgRU5DVFlQRV9DTlQKKyN1bmRlZiBFTkNUWVBFX0NOVAorI2VuZGlm CisjZGVmaW5lIEVOQ1RZUEVfQ05UICAgICAgICAgICAgIDEyCisKKyNpZmRlZiAgRU5DUllQVF9O QU1FUworY2hhciAqZW5jcnlwdF9uYW1lc1tdID0geworICAgICAgICAiSVMiLCAiU1VQUE9SVCIs ICJSRVBMWSIsICJTVEFSVCIsICJFTkQiLAorICAgICAgICAiUkVRVUVTVC1TVEFSVCIsICJSRVFV RVNULUVORCIsICJFTkMtS0VZSUQiLCAiREVDLUtFWUlEIiwKKyAgICAgICAgMAorfTsKK2NoYXIg KmVuY3R5cGVfbmFtZXNbXSA9IHsKKyAgICAiQU5ZIiwKKyAgICAiREVTX0NGQjY0IiwgICAgICAg ICAgICAgICAgLyogUkZDIDI5NTIgKi8KKyAgICAiREVTX09GQjY0IiwgICAgICAgICAgICAgICAg LyogUkZDIDI5NTMgKi8KKyAgICAiREVTM19DRkI2NCIsICAgICAgICAgICAgICAgLyogUkZDIDI5 NDcgKi8KKyAgICAiREVTM19PRkI2NCIsICAgICAgICAgICAgICAgLyogUkZDIDI5NDggKi8KKyAg ICAiVU5LTk9XTi01IiwKKyAgICAiVU5LTk9XTi02IiwKKyAgICAiVU5LTk9XTi03IiwKKyAgICAi Q0FTVDVfNDBfQ0ZCNjQiLCAgICAgICAgICAgLyogUkZDIDI5NTAgKi8KKyAgICAiQ0FTVDVfNDBf T0ZCNjQiLCAgICAgICAgICAgLyogUkZDIDI5NDkgKi8KKyAgICAiQ0FTVDEyOF9DRkI2NCIsICAg ICAgICAgICAgLyogUkZDIDI5NTAqLworICAgICJDQVNUMTI4X09GQjY0IiwgICAgICAgICAgICAv KiBSRkMgMjk0OSAqLworICAgIDAKK307CisjZWxzZQorZXh0ZXJuIGNoYXIgKmVuY3J5cHRfbmFt ZXNbXTsKK2V4dGVybiBjaGFyICplbmN0eXBlX25hbWVzW107CisjZW5kaWYKKworI2RlZmluZSBF TkNSWVBUX05BTUVfT0soeCkgICAgICAoKHVuc2lnbmVkIGludCkoeCkgPCBFTkNSWVBUX0NOVCkK KyNkZWZpbmUgRU5DUllQVF9OQU1FKHgpICAgICAgKEVOQ1JZUFRfTkFNRV9PSyh4KT9lbmNyeXB0 X25hbWVzW3hdOiJVTktOT1dOIikKKworI2RlZmluZSBFTkNUWVBFX05BTUVfT0soeCkgICAgICAo KHVuc2lnbmVkIGludCkoeCkgPCBFTkNUWVBFX0NOVCkKKyNkZWZpbmUgRU5DVFlQRV9OQU1FKHgp ICAgICAgKEVOQ1RZUEVfTkFNRV9PSyh4KT9lbmN0eXBlX25hbWVzW3hdOiJVTktOT1dOIikKKwor LyogRm9yIHNldHRpbmcgdGhlIHN0YXRlIG9mIHZhbGlkVXNlciAqLworCisjZGVmaW5lIEFVVEhf UkVKRUNUICAgICAwICAgICAgIC8qIFJlamVjdGVkICovCisjZGVmaW5lIEFVVEhfVU5LTk9XTiAg ICAxICAgICAgIC8qIFdlIGRvbid0IGtub3cgd2hvIGhlIGlzLCBidXQgaGUncyBva2F5ICovCisj ZGVmaW5lIEFVVEhfT1RIRVIgICAgICAyICAgICAgIC8qIFdlIGtub3cgaGltLCBidXQgbm90IGhp cyBuYW1lICovCisjZGVmaW5lIEFVVEhfVVNFUiAgICAgICAzICAgICAgIC8qIFdlIGtub3cgaGUg bmFtZSAqLworI2RlZmluZSBBVVRIX1ZBTElEICAgICAgNCAgICAgICAvKiBXZSBrbm93IGhpbSwg YW5kIGhlIG5lZWRzIG5vIHBhc3N3b3JkICovCisKKy8qIEtlcm1pdCBPcHRpb24gU3VibmVnb3Rp YXRpb25zICovCisKKyNkZWZpbmUgS0VSTUlUX1NUQVJUICAgICAgMAorI2RlZmluZSBLRVJNSVRf U1RPUCAgICAgICAxCisjZGVmaW5lIEtFUk1JVF9SRVFfU1RBUlQgIDIKKyNkZWZpbmUgS0VSTUlU X1JFUV9TVE9QICAgMworI2RlZmluZSBLRVJNSVRfU09QICAgICAgICA0CisjZGVmaW5lIEtFUk1J VF9SRVNQX1NUQVJUIDgKKyNkZWZpbmUgS0VSTUlUX1JFU1BfU1RPUCAgOQorCisvKiBGb3IgU0VU IFRFTE5FVCBBVVRIIEhPVyAgKi8KKyNkZWZpbmUgVE5fQVVUSF9IT1dfQU5ZICAgICAwCisjZGVm aW5lIFROX0FVVEhfSE9XX09ORV9XQVkgMQorI2RlZmluZSBUTl9BVVRIX0hPV19NVVRVQUwgIDIK KworLyogRm9yIFNFVCBURUxORVQgQVVUSCBFTkNSWVBUICovCisjZGVmaW5lIFROX0FVVEhfRU5D X0FOWSAgICAgMAorI2RlZmluZSBUTl9BVVRIX0VOQ19OT05FICAgIDEKKyNkZWZpbmUgVE5fQVVU SF9FTkNfVEVMT1BUICAyCisjZGVmaW5lIFROX0FVVEhfRU5DX0VYQ0ggICAgMyAgLyogbm90IHVz ZWQgaW4gS2VybWl0ICovCisjZGVmaW5lIFROX0FVVEhfRU5DX1RMUyAgICAgNAorCisvKiBUZWxu ZXQgcHJvdG9jb2wgZnVuY3Rpb25zIGRlZmluZWQgaW4gQy1LZXJtaXQgKi8KKworX1BST1RPVFlQ KCBpbnQgdG5faW5pLCAodm9pZCkgKTsgICAgICAgIC8qIFRlbG5ldCBwcm90b2NvbCBzdXBwb3J0 ICovCitfUFJPVE9UWVAoIGludCB0bl9yZXNldCwgKHZvaWQpKTsKK19QUk9UT1RZUCggaW50IHRu X3NldF9tb2RlcywgKHZvaWQpKTsKK19QUk9UT1RZUCggaW50IHRuX3NvcHQsIChpbnQsIGludCkg KTsKK19QUk9UT1RZUCggaW50IHRuX2Rvb3AsIChDSEFSLCBpbnQsIGludCAoKikoaW50KSApICk7 CitfUFJPVE9UWVAoIGludCB0bl9zdHR5cCwgKHZvaWQpICk7CitfUFJPVE9UWVAoIGludCB0bl9z bmVudiwgKENIQVIgKiwgaW50KSApIDsKK19QUk9UT1RZUCggaW50IHRuX3JuZW52LCAoQ0hBUiAq LCBpbnQpICkgOworX1BST1RPVFlQKCBpbnQgdG5fd2FpdCwgKGNoYXIgKikgKSA7CitfUFJPVE9U WVAoIGludCB0bl9wdXNoLCAodm9pZCkgKSA7CitfUFJPVE9UWVAoIGludCB0bnNuZGJyaywgKHZv aWQpICk7CitfUFJPVE9UWVAoIFZPSUQgdG5fZGVidWcsIChjaGFyICopKTsKK19QUk9UT1RZUCgg aW50IHRuX2hleCwgKENIQVIgKiwgaW50LCBDSEFSICosIGludCkpOworX1BST1RPVFlQKCB1bnNp Z25lZCBjaGFyICogdG5fZ2V0X2Rpc3BsYXksICh2b2lkKSk7CisjaWZkZWYgSUtTX09QVElPTgor X1BST1RPVFlQKCBpbnQgdG5fc2lrcywgKGludCkgKTsKK19QUk9UT1RZUCggaW50IGlrc193YWl0 LCAoaW50LCBpbnQpICk7CisjZW5kaWYgLyogSUtTX09QVElPTiAqLworI2lmZGVmIENLX05BV1MK K19QUk9UT1RZUCggaW50IHRuX3NuYXdzLCAodm9pZCkgKTsKKyNlbmRpZiAvKiBDS19OQVdTICov CisjaWZkZWYgQ0tfWERJU1BMT0MKK19QUk9UT1RZUCggaW50IHRuX3N4ZGlzcGxvYywgKHZvaWQp ICk7CisjZW5kaWYgLyogQ0tfWERJU1BMT0MgKi8KKyNpZmRlZiBDS19TTkRMT0MKK19QUk9UT1RZ UCggaW50IHRuX3NuZGxvYywgKHZvaWQpICk7CisjZW5kaWYgLyogQ0tfU05ETE9DICovCisjaWZk ZWYgQ0tfRk9SV0FSRF9YCisvKiBGcm9tIFhhdXRoLmggKi8KK3R5cGVkZWYgc3RydWN0IHhhdXRo IHsKKyAgICB1bnNpZ25lZCBzaG9ydCAgIGZhbWlseTsKKyAgICB1bnNpZ25lZCBzaG9ydCAgIGFk ZHJlc3NfbGVuZ3RoOworICAgIGNoYXIgICAgICAgICAgICAqYWRkcmVzczsKKyAgICB1bnNpZ25l ZCBzaG9ydCAgIG51bWJlcl9sZW5ndGg7CisgICAgY2hhciAgICAgICAgICAgICpudW1iZXI7Cisg ICAgdW5zaWduZWQgc2hvcnQgICBuYW1lX2xlbmd0aDsKKyAgICBjaGFyICAgICAgICAgICAgKm5h bWU7CisgICAgdW5zaWduZWQgc2hvcnQgICBkYXRhX2xlbmd0aDsKKyAgICBjaGFyICAgICAgICAg ICAgKmRhdGE7Cit9IFhhdXRoOworCisjaW5jbHVkZSAgIDxzdGRpby5oPgorCisvKiBmcm9tIFgu aCAqLworI2RlZmluZSBGYW1pbHlJbnRlcm5ldCAgICAgICAgICAwCisjZGVmaW5lIEZhbWlseURF Q25ldCAgICAgICAgICAgIDEKKyNkZWZpbmUgRmFtaWx5Q2hhb3MgICAgICAgICAgICAgMgorCisj IGRlZmluZSBGYW1pbHlMb2NhbCAoMjU2KSAgICAgIC8qIG5vdCBwYXJ0IG9mIFggc3RhbmRhcmQg KGkuZS4gWC5oKSAqLworIyBkZWZpbmUgRmFtaWx5V2lsZCAgKDY1NTM1KQorIyBkZWZpbmUgRmFt aWx5TmV0bmFtZSAgICAoMjU0KSAgIC8qIG5vdCBwYXJ0IG9mIFggc3RhbmRhcmQgKi8KKyMgZGVm aW5lIEZhbWlseUtyYjVQcmluY2lwYWwgKDI1MykgLyogS2VyYmVyb3MgNSBwcmluY2lwYWwgbmFt ZSAqLworIyBkZWZpbmUgRmFtaWx5TG9jYWxIb3N0ICgyNTIpICAvKiBmb3IgbG9jYWwgbm9uLW5l dCBhdXRoZW50aWNhdGlvbiAqLworY2hhciAqWGF1RmlsZU5hbWUoKTsKKworWGF1dGggKlhhdVJl YWRBdXRoKAorRklMRSogICAvKiBhdXRoX2ZpbGUgKi8KKyk7CisKK2ludCBYYXVXcml0ZUF1dGgo CitGSUxFKiAgICAgICAgICAgLyogYXV0aF9maWxlICovLAorWGF1dGgqICAgICAgICAgIC8qIGF1 dGggKi8KKyk7CisKK1hhdXRoICpYYXVHZXRBdXRoQnlOYW1lKAorY29uc3QgY2hhciogICAgIC8q IGRpc3BsYXlfbmFtZSAqLworKTsKKworWGF1dGggKlhhdUdldEF1dGhCeUFkZHIoCit1bnNpZ25l ZCBpbnQgICAgLyogZmFtaWx5ICovLAordW5zaWduZWQgaW50ICAgIC8qIGFkZHJlc3NfbGVuZ3Ro ICovLAorY29uc3QgY2hhciogICAgIC8qIGFkZHJlc3MgKi8sCit1bnNpZ25lZCBpbnQgICAgLyog bnVtYmVyX2xlbmd0aCAqLywKK2NvbnN0IGNoYXIqICAgICAvKiBudW1iZXIgKi8sCit1bnNpZ25l ZCBpbnQgICAgLyogbmFtZV9sZW5ndGggKi8sCitjb25zdCBjaGFyKiAgICAgLyogbmFtZSAqLwor KTsKKwordm9pZCBYYXVEaXNwb3NlQXV0aCgKK1hhdXRoKiAgICAgICAgICAvKiBhdXRoICovCisp OworCisKK19QUk9UT1RZUCggaW50IGZ3ZHhfY3JlYXRlX2xpc3Rlbl9zb2NrZXQsKGludCkpOwor X1BST1RPVFlQKCBpbnQgZndkeF9vcGVuX2NsaWVudF9jaGFubmVsLChpbnQpKTsKK19QUk9UT1RZ UCggaW50IGZ3ZHhfb3Blbl9zZXJ2ZXJfY2hhbm5lbCwoVk9JRCkpOworX1BST1RPVFlQKCBpbnQg ZndkeF9jbG9zZV9jaGFubmVsLChpbnQpKTsKK19QUk9UT1RZUCggaW50IGZ3ZHhfd3JpdGVfZGF0 YV90b19jaGFubmVsLChpbnQsIGNoYXIgKixpbnQpKTsKK19QUk9UT1RZUCggaW50IGZ3ZHhfc2Vu ZF9kYXRhX2Zyb21fY2hhbm5lbCwoaW50LCBjaGFyICosaW50KSk7CitfUFJPVE9UWVAoIGludCBm d2R4X2Nsb3NlX2FsbCwoVk9JRCkpOworX1BST1RPVFlQKCBpbnQgZndkeF90bl9zYiwodW5zaWdu ZWQgY2hhciAqLCBpbnQpKTsKK19QUk9UT1RZUCggaW50IHRuX3NuZGZ3ZHgsICh2b2lkKSk7Citf UFJPVE9UWVAoIGludCBmd2R4X3NlbmRfY2xvc2UsKGludCkpOworX1BST1RPVFlQKCBpbnQgZndk eF9zZW5kX29wZW4sKGludCkpOworX1BST1RPVFlQKCBpbnQgZndkeF9jbGllbnRfcmVwbHlfb3B0 aW9ucywoY2hhciAqLCBpbnQpKTsKK19QUk9UT1RZUCggaW50IGZ3ZHhfc2VuZF9vcHRpb25zLChW T0lEKSk7CitfUFJPVE9UWVAoIFZPSUQgZndkeF9jaGVja19zb2NrZXRzLChmZF9zZXQgKikpOwor X1BST1RPVFlQKCBpbnQgZndkeF9pbml0X2ZkX3NldCwoZmRfc2V0ICopKTsKK19QUk9UT1RZUCgg aW50IGZ3ZHhfYXV0aG9yaXplX2NoYW5uZWwsIChpbnQsIHVuc2lnbmVkIGNoYXIgKiwgaW50KSk7 CitfUFJPVE9UWVAoIGludCBmd2R4X2NyZWF0ZV9mYWtlX3hhdXRoLCAoY2hhciAqLCBpbnQsIGlu dCkpOworX1BST1RPVFlQKCBpbnQgZndkeF9zZW5kX3hhdXRoX3RvX3hzZXJ2ZXIsIChpbnQsIHVu c2lnbmVkIGNoYXIgKiwgaW50IGxlbikpOworX1BST1RPVFlQKCBpbnQgZndkeF9zZXJ2ZXJfYXZh aWwsIChWT0lEKSk7CitfUFJPVE9UWVAoIGludCBmd2R4X3BhcnNlX2Rpc3BsYXluYW1lLCAoY2hh ciAqLCBpbnQgKiwgY2hhciAqKiwgaW50ICosIGludCAqLCBjaGFyICoqKSk7CisKKyNpZmRlZiBO VAorX1BST1RPVFlQKCBWT0lEIGZ3ZHhfdGhyZWFkLChWT0lEICopKTsKKyNlbmRpZiAvKiBOVCAq LworI2VuZGlmIC8qIENLX0ZPUldBUkRfWCAqLworCisjaWZkZWYgVE5fQ09NUE9SVAorI2RlZmlu ZSBUTkNfQzJTX1NJR05BVFVSRSAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBUTkNfQzJTX1NF VF9CQVVEUkFURSAgICAgICAgICAgICAgMQorI2RlZmluZSBUTkNfQzJTX1NFVF9EQVRBU0laRSAg ICAgICAgICAgICAgMgorI2RlZmluZSBUTkNfQzJTX1NFVF9QQVJJVFkgICAgICAgICAgICAgICAg MworI2RlZmluZSBUTkNfQzJTX1NFVF9TVE9QU0laRSAgICAgICAgICAgICAgNAorI2RlZmluZSBU TkNfQzJTX1NFVF9DT05UUk9MICAgICAgICAgICAgICAgNQorI2RlZmluZSBUTkNfQzJTX05PVElG WV9MSU5FU1RBVEUgICAgICAgICAgNgorI2RlZmluZSBUTkNfQzJTX05PVElGWV9NT0RFTVNUQVRF ICAgICAgICAgNworI2RlZmluZSBUTkNfQzJTX0ZMT1dfU1VTUEVORCAgICAgICAgICAgICAgOAor I2RlZmluZSBUTkNfQzJTX0ZMT1dfUkVTVU1FICAgICAgICAgICAgICAgOQorI2RlZmluZSBUTkNf QzJTX1NFVF9MU19NQVNLICAgICAgICAgICAgICAxMAorI2RlZmluZSBUTkNfQzJTX1NFVF9NU19N QVNLICAgICAgICAgICAgICAxMQorI2RlZmluZSBUTkNfQzJTX1BVUkdFICAgICAgICAgICAgICAg ICAgICAxMgorI2RlZmluZSBUTkNfUzJDX1NJR05BVFVSRSAgICAgICAgICAgICAgIDEwMAorI2Rl ZmluZSBUTkNfUzJDX1NFVF9CQVVEUkFURSAgICAgICAgICAgIDEwMQorI2RlZmluZSBUTkNfUzJD X1NFVF9EQVRBU0laRSAgICAgICAgICAgIDEwMgorI2RlZmluZSBUTkNfUzJDX1NFVF9QQVJJVFkg ICAgICAgICAgICAgIDEwMworI2RlZmluZSBUTkNfUzJDX1NFVF9TVE9QU0laRSAgICAgICAgICAg IDEwNAorI2RlZmluZSBUTkNfUzJDX1NFVF9DT05UUk9MICAgICAgICAgICAgIDEwNQorI2RlZmlu ZSBUTkNfUzJDX1NFTkRfTFMgICAgICAgICAgICAgICAgIDEwNgorI2RlZmluZSBUTkNfUzJDX1NF TkRfTVMgICAgICAgICAgICAgICAgIDEwNworI2RlZmluZSBUTkNfUzJDX0ZMT1dfU1VTUEVORCAg ICAgICAgICAgIDEwOAorI2RlZmluZSBUTkNfUzJDX0ZMT1dfUkVTVU1FICAgICAgICAgICAgIDEw OQorI2RlZmluZSBUTkNfUzJDX1NFVF9MU19NQVNLICAgICAgICAgICAgIDExMAorI2RlZmluZSBU TkNfUzJDX1NFVF9NU19NQVNLICAgICAgICAgICAgIDExMQorI2RlZmluZSBUTkNfUzJDX1BVUkdF ICAgICAgICAgICAgICAgICAgIDExMgorCisvKiBUaGUgQ09NUE9SVCB2YWx1ZXMgYXJlIG5vdCBk ZWZpbmVkIGluIFJGQyAyMjE3ICovCisjZGVmaW5lIFROQ19CUFNfUkVRVUVTVCAgICAgICAgICAg ICAgICAgIDAKKyNkZWZpbmUgVE5DX0JQU18zMDAgICAgICAgICAgICAgICAgICAgICAgMworI2Rl ZmluZSBUTkNfQlBTXzYwMCAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIFROQ19CUFNf MTIwMCAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgVE5DX0JQU18yNDAwICAgICAgICAg ICAgICAgICAgICAgNgorI2RlZmluZSBUTkNfQlBTXzQ4MDAgICAgICAgICAgICAgICAgICAgICA3 CisjZGVmaW5lIFROQ19CUFNfOTYwMCAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgVE5D X0JQU18xNDQwMCAgICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSBUTkNfQlBTXzE5MjAwICAg ICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIFROQ19CUFNfMjg4MDAgICAgICAgICAgICAgICAg ICAgMTEKKyNkZWZpbmUgVE5DX0JQU18zODQwMCAgICAgICAgICAgICAgICAgICAxMgorI2RlZmlu ZSBUTkNfQlBTXzU3NjAwICAgICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lIFROQ19CUFNfMTE1 MjAwICAgICAgICAgICAgICAgICAgMTQKKyNkZWZpbmUgVE5DX0JQU18yMzA0MDAgICAgICAgICAg ICAgICAgICAxNQorI2RlZmluZSBUTkNfQlBTXzQ2MDgwMCAgICAgICAgICAgICAgICAgIDE2CisK KyNkZWZpbmUgVE5DX0RTX1JFUVVFU1QgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBUTkNf RFNfNSAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIFROQ19EU182ICAgICAgICAg ICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgVE5DX0RTXzcgICAgICAgICAgICAgICAgICAgICAg ICAgNworI2RlZmluZSBUTkNfRFNfOCAgICAgICAgICAgICAgICAgICAgICAgICA4CisKKyNkZWZp bmUgVE5DX1BBUl9SRVFVRVNUICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBUTkNfUEFSX05P TkUgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIFROQ19QQVJfT0REICAgICAgICAgICAg ICAgICAgICAgIDIKKyNkZWZpbmUgVE5DX1BBUl9FVkVOICAgICAgICAgICAgICAgICAgICAgMwor I2RlZmluZSBUTkNfUEFSX01BUksgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIFROQ19Q QVJfU1BBQ0UgICAgICAgICAgICAgICAgICAgIDUKKworI2RlZmluZSBUTkNfU0JfUkVRVUVTVCAg ICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFROQ19TQl8xICAgICAgICAgICAgICAgICAgICAg ICAgIDEKKyNkZWZpbmUgVE5DX1NCXzFfNSAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmlu ZSBUTkNfU0JfMiAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKyNkZWZpbmUgVE5DX0NUTF9P RkxPV19SRVFVRVNUICAgICAgICAgICAgMAorI2RlZmluZSBUTkNfQ1RMX09GTE9XX05PTkUgICAg ICAgICAgICAgICAxCisjZGVmaW5lIFROQ19DVExfT0ZMT1dfWE9OX1hPRkYgICAgICAgICAgIDIK KyNkZWZpbmUgVE5DX0NUTF9PRkxPV19SVFNfQ1RTICAgICAgICAgICAgMworI2RlZmluZSBUTkNf Q1RMX09GTE9XX0RDRCAgICAgICAgICAgICAgIDE3CisjZGVmaW5lIFROQ19DVExfT0ZMT1dfRFNS ICAgICAgICAgICAgICAgMTkKKworI2RlZmluZSBUTkNfQ1RMX0JSRUFLX1JFUVVFU1QgICAgICAg ICAgICA0CisjZGVmaW5lIFROQ19DVExfQlJFQUtfT04gICAgICAgICAgICAgICAgIDUKKyNkZWZp bmUgVE5DX0NUTF9CUkVBS19PRkYgICAgICAgICAgICAgICAgNgorCisjZGVmaW5lIFROQ19DVExf RFRSX1JFUVVFU1QgICAgICAgICAgICAgIDcKKyNkZWZpbmUgVE5DX0NUTF9EVFJfT04gICAgICAg ICAgICAgICAgICAgOAorI2RlZmluZSBUTkNfQ1RMX0RUUl9PRkYgICAgICAgICAgICAgICAgICA5 CisKKyNkZWZpbmUgVE5DX0NUTF9SVFNfUkVRVUVTVCAgICAgICAgICAgICAxMAorI2RlZmluZSBU TkNfQ1RMX1JUU19PTiAgICAgICAgICAgICAgICAgIDExCisjZGVmaW5lIFROQ19DVExfUlRTX09G RiAgICAgICAgICAgICAgICAgMTIKKworI2RlZmluZSBUTkNfQ1RMX0lGTE9XX1JFUVVFU1QgICAg ICAgICAgIDEzCisjZGVmaW5lIFROQ19DVExfSUZMT1dfTk9ORSAgICAgICAgICAgICAgMTQKKyNk ZWZpbmUgVE5DX0NUTF9JRkxPV19YT05fWE9GRiAgICAgICAgICAxNQorI2RlZmluZSBUTkNfQ1RM X0lGTE9XX1JUU19DVFMgICAgICAgICAgIDE2CisjZGVmaW5lIFROQ19DVExfSUZMT1dfRFRSICAg ICAgICAgICAgICAgMTgKKworI2RlZmluZSBUTkNfTVNfREFUQV9SRUFEWSAgICAgICAgICAgICAg ICAxCisjZGVmaW5lIFROQ19NU19PVkVSUlVOX0VSUk9SICAgICAgICAgICAgIDIKKyNkZWZpbmUg VE5DX01TX1BBUklUWV9FUlJPUiAgICAgICAgICAgICAgNAorI2RlZmluZSBUTkNfTVNfRlJBTUVf RVJST1IgICAgICAgICAgICAgICA4CisjZGVmaW5lIFROQ19NU19CUkVBS19FUlJPUiAgICAgICAg ICAgICAgMTYKKyNkZWZpbmUgVE5DX01TX0hSX0VNUFRZICAgICAgICAgICAgICAgICAzMgorI2Rl ZmluZSBUTkNfTVNfU1JfRU1QVFkgICAgICAgICAgICAgICAgIDY0CisjZGVmaW5lIFROQ19NU19U SU1FT1VUX0VSUk9SICAgICAgICAgICAxMjgKKworI2RlZmluZSBUTkNfTVNfQ1RTX0RFTFRBICAg ICAgICAgICAgICAgICAxCisjZGVmaW5lIFROQ19NU19EU1JfREVMVEEgICAgICAgICAgICAgICAg IDIKKyNkZWZpbmUgVE5DX01TX0VER0VfUklORyAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBU TkNfTVNfUkxTRF9ERUxUQSAgICAgICAgICAgICAgICA4CisjZGVmaW5lIFROQ19NU19DVFNfU0lH ICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgVE5DX01TX0RTUl9TSUcgICAgICAgICAgICAg ICAgICAzMgorI2RlZmluZSBUTkNfTVNfUklfU0lHICAgICAgICAgICAgICAgICAgIDY0CisjZGVm aW5lIFROQ19NU19STFNEX1NJRyAgICAgICAgICAgICAgICAxMjgKKworI2RlZmluZSBUTkNfUFVS R0VfUkVDRUlWRSAgICAgICAgICAgICAgICAxCisjZGVmaW5lIFROQ19QVVJHRV9UUkFOU01JVCAg ICAgICAgICAgICAgIDIKKyNkZWZpbmUgVE5DX1BVUkdFX0JPVEggICAgICAgICAgICAgICAgICAg MworCisjaWZkZWYgIFROQ19OQU1FUworY2hhciAqdG5jX25hbWVzW10gPSB7CisgICAgIlNJR05B VFVSRSIsICJTRVQtQkFVRFJBVEUiLCAiU0VULURBVEFSQVRFIiwgIlNFVC1QQVJJVFkiLCAiU0VU LVNUT1BTSVpFIiwKKyAgICAiU0VULUNPTlRST0wiLCAiTk9USUZZLUxJTkVTVEFURSIsICJOT1RJ RlktTU9ERU1TVEFURSIsCisgICAgIkZMT1dDT05UUk9MLVNVU1BFTkQiLCAiRkxPV0NPTlRST0wt UkVTVU1FIiwgIlNFVC1MSU5FU1RBVEUtTUFTSyIsCisgICAgIlNFVC1NT0RFTVNUQVRFLU1BU0si LCAiUFVSR0UtREFUQSIsCisgICAgMAorfTsKKyNlbHNlCitleHRlcm4gY2hhciAqdG5jX25hbWVz W107CisjZW5kaWYKKworI2RlZmluZSBUTkNfTkFNRV9PSyh4KSAgKCh4KSA+PSAwICYmICh4KSA8 PSAxMiB8fCAoeCkgPj0gMTAwICYmICh4KSA8PSAxMTIpCisjZGVmaW5lIFROQ19OQU1FKHgpIFwK KyAgICAgICAgICAgICAoVE5DX05BTUVfT0soeCk/dG5jX25hbWVzWyh4KT49MTAwPyh4KS0xMDA6 KHgpXToiVU5LTk9XTiIpCisKK19QUk9UT1RZUChpbnQgdG5jX2luaXQsKHZvaWQpKTsKK19QUk9U T1RZUChpbnQgdG5jX3dhaXQsKENIQVIgKiwgaW50KSk7CitfUFJPVE9UWVAoaW50IHRuY190bl9z YiwoQ0hBUiAqLGludCkpOworX1BST1RPVFlQKENPTlNUIGNoYXIgKiB0bmNfZ2V0X3NpZ25hdHVy ZSwgKHZvaWQpKTsKK19QUk9UT1RZUChpbnQgdG5jX3NlbmRfc2lnbmF0dXJlLCAoY2hhciAqKSk7 CitfUFJPVE9UWVAoaW50IHRuY19zZXRfYmF1ZCwobG9uZykpOworX1BST1RPVFlQKGludCB0bmNf Z2V0X2JhdWQsKHZvaWQpKTsKK19QUk9UT1RZUChpbnQgdG5jX3NldF9kYXRhc2l6ZSwoaW50KSk7 CitfUFJPVE9UWVAoaW50IHRuY19nZXRfZGF0YXNpemUsKHZvaWQpKTsKK19QUk9UT1RZUChpbnQg dG5jX3NldF9wYXJpdHksKGludCkpOworX1BST1RPVFlQKGludCB0bmNfZ2V0X3Bhcml0eSwodm9p ZCkpOworX1BST1RPVFlQKGludCB0bmNfc2V0X3N0b3BzaXplLChpbnQpKTsKK19QUk9UT1RZUChp bnQgdG5jX2dldF9zdG9wc2l6ZSwodm9pZCkpOworX1BST1RPVFlQKGludCB0bmNfc2V0X29mbG93 LChpbnQpKTsKK19QUk9UT1RZUChpbnQgdG5jX2dldF9vZmxvdywodm9pZCkpOworX1BST1RPVFlQ KGludCB0bmNfc2V0X2lmbG93LChpbnQpKTsKK19QUk9UT1RZUChpbnQgdG5jX2dldF9pZmxvdywo dm9pZCkpOworX1BST1RPVFlQKGludCB0bmNfc2V0X2JyZWFrX3N0YXRlLChpbnQpKTsKK19QUk9U T1RZUChpbnQgdG5jX2dldF9icmVha19zdGF0ZSwodm9pZCkpOworX1BST1RPVFlQKGludCB0bmNf c2V0X2R0cl9zdGF0ZSwoaW50KSk7CitfUFJPVE9UWVAoaW50IHRuY19nZXRfZHRyX3N0YXRlLCh2 b2lkKSk7CitfUFJPVE9UWVAoaW50IHRuY19zZXRfcnRzX3N0YXRlLChpbnQpKTsKK19QUk9UT1RZ UChpbnQgdG5jX2dldF9ydHNfc3RhdGUsKHZvaWQpKTsKK19QUk9UT1RZUChpbnQgdG5jX3NldF9s c19tYXNrLChpbnQpKTsKK19QUk9UT1RZUChpbnQgdG5jX2dldF9sc19tYXNrLCh2b2lkKSk7Citf UFJPVE9UWVAoaW50IHRuY19nZXRfbHMsKHZvaWQpKTsKK19QUk9UT1RZUChpbnQgdG5jX3NldF9t c19tYXNrLChpbnQpKTsKK19QUk9UT1RZUChpbnQgdG5jX2dldF9tc19tYXNrLCh2b2lkKSk7Citf UFJPVE9UWVAoaW50IHRuY19nZXRfbXMsKHZvaWQpKTsKK19QUk9UT1RZUChpbnQgdG5jX3NlbmRf cHVyZ2VfZGF0YSwoaW50KSk7CitfUFJPVE9UWVAoaW50IHRuY19mbG93X3N1c3BlbmRlZCwodm9p ZCkpOworX1BST1RPVFlQKGludCB0bmNfc3VzcGVuZF9mbG93LCh2b2lkKSk7CitfUFJPVE9UWVAo aW50IHRuY19yZXN1bWVfZmxvdywodm9pZCkpOworCisvKiBUaGUgZm9sbG93aW5nIG1ldGhvZHMg YXJlIHRvIGJlIGNhbGxlZCBieSBjaz90aW8uYyByb3V0aW5lcyAqLworX1BST1RPVFlQKGludCB0 bnNldGZsb3csKGludCkpOworX1BST1RPVFlQKGludCB0bnNldHRpbmdzLChpbnQsaW50KSk7Citf UFJPVE9UWVAoaW50IHRuZ21kbSwodm9pZCkpOworX1BST1RPVFlQKGludCB0bnNuZGIsKGxvbmcp KTsKK19QUk9UT1RZUChpbnQgaXN0bmNvbXBvcnQsKHZvaWQpKTsKK19QUk9UT1RZUChpbnQgdG5f c25kY29tcG9ydCwodm9pZCkpOworI2VuZGlmIC8qIFROX0NPTVBPUlQgKi8KKworI2lmbmRlZiBD S0NURUxfQyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRoZXNlIGFyZSBkZWNsYXJlZCBpbiBj a2N0ZWwuYyAqLworZXh0ZXJuIGludCB0bl9pbml0OyAgICAgICAgICAgICAgICAgICAgIC8qIFRl bG5ldCBwcm90b2NvbCBpbml0aWFsaXplZCBmbGFnICovCitleHRlcm4gY2hhciAqdG5fdGVybTsg ICAgICAgICAgICAgICAgICAgLyogVGVybWluYWwgdHlwZSBvdmVycmlkZSAqLworZXh0ZXJuIGlu dCBzc3RlbG5ldDsgICAgICAgICAgICAgICAgICAgIC8qIFNlcnZlciBzaWRlIHRlbG5ldD8gKi8K K2V4dGVybiBpbnQgdG5fZGViOyAgICAgICAgICAgICAgICAgICAgICAvKiBUZWxuZXQgb3B0aW9u IGRlYnVnZ2luZyBmbGFnICovCitleHRlcm4gaW50IHRuX2F1dGhfa3JiNV9kZXNfYnVnOyAgICAg ICAgLyogVGVsbmV0IEJVRyAqLworI2VuZGlmIC8qIENLQ1RFTF9DICovCisKKyNkZWZpbmUgVE5f TVNHX0xFTiAxMjI5MgorI2VuZGlmIC8qIFROQ09ERSAqLworI2VuZGlmIC8qIENLQ1RFTF9IICov CgpkaWZmIC0tZ2l0IGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2N1 bmkuYyBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2tjdW5pLmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY1ODU0OAotLS0gL2Rldi9udWxsCisr KyBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2tjdW5pLmMKQEAgLTAs MCArMSwxNjE3MyBAQAorY2hhciAqIGNrY3VuaSA9ICJVbmljb2RlIHN1cHBvcnQgOS4wLjExNSwg MTYgT2N0IDIwMDkiOworCisjaWZkZWYgT1MyCisjZGVmaW5lIEtFUk1JVEZPTlQKKyNlbmRpZiAv KiBPUzIgKi8KKworLyogIEMgSyBDIFUgTiBJIC4gQyAgLS0gIFVuaWNvZGUvVGVybWluYWwgY2hh cmFjdGVyLXNldCB0cmFuc2xhdGlvbnMgICovCisKKy8qCisgIENvcHlyaWdodCAoQykgMTk5OSwg MjAwOSwKKyAgICBUcnVzdGVlcyBvZiBDb2x1bWJpYSBVbml2ZXJzaXR5IGluIHRoZSBDaXR5IG9m IE5ldyBZb3JrLgorICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBTZWUgdGhlIEMtS2VybWl0IENP UFlJTkcuVFhUIGZpbGUgb3IgdGhlCisgICAgY29weXJpZ2h0IHRleHQgaW4gdGhlIGNrY21haS5j IG1vZHVsZSBmb3IgZGlzY2xhaW1lciBhbmQgcGVybWlzc2lvbnMuCisKKyAgQXV0aG9yczoKKyAg ICBGcmFuayBkYSBDcnV6IDxmZGNAY29sdW1iaWEuZWR1PgorICAgICAgVGhlIEtlcm1pdCBQcm9q ZWN0LCBDb2x1bWJpYSBVbml2ZXJzaXR5LCBOZXcgWW9yayBDaXR5LgorICAgIEplZmZyZXkgRSBB bHRtYW4gPGphbHRtYW5Ac2VjdXJlLWVuZHBvaW50cy5jb20+CisgICAgICBTZWN1cmUgRW5kcG9p bnRzIEluYy4sIE5ldyBZb3JrIENpdHkKKworICBGdW5jdGlvbnMgdV9ibGFoKCkgdHJhbnNsYXRl IGZyb20gYmxhaCB0byBVbmljb2RlIChpbmNvbWluZyBtYXRlcmlhbCkuCisgIEZ1bmN0aW9ucyB0 eF9ibGFoKCkgdHJhbnNsYXRlIGZyb20gVW5pY29kZSB0byBibGFoIChrZXlzdHJva2VzKS4KKyAg RnVuY3Rpb24gcG9pbnRlcnMgYXJlIGtlcHQgaW4gcGFyYWxsZWwgYXJyYXlzIGluZGV4ZWQgYnkg VFhfYmxhaCB2YWx1ZXMKKyAgZGVmaW5lZCBpbiBja2N1bmkuaC4gICBOT1RFOiB0eF9kZWNzcGVj IGFuZCB0eF9kZWN0ZWNoIGFyZSB1bmRlZmluZWQgc2luY2UKKyAgdGhlc2UgY2hhcmFjdGVyIHNl dHMgYXJlIG5ldmVyIHR5cGVkLCBvbmx5IGRpc3BsYXllZC4KKworICBUaGUgYmxhaF91KCkgcm91 dGluZXMgYWNjZXB0IGFuIHVuc2lnbmVkIGNoYXJhY3RlciB2YWx1ZSBpbiBjaGFyYWN0ZXItc2V0 CisgIGJsYWgsIGFuZCByZXR1cm4gdGhlIFVuaWNvZGUgdHJhbnNsYXRpb24sIG9yIDB4ZmZmZCBp ZiB0aGUgY2hhcmFjdGVyIGlzIG5vdAorICBkZWZpbmVkIGluIFVuaWNvZGUuICBUaGUgOHRoIGJp dCBvZiB0aGUgYXJndW1lbnQgc2hvdWxkIGJlIGlnbm9yZWQsIGFgbGEgSVNPCisgIDQ4NzMgYW5k IDIwMjIuCisKKyAgVGhlIHR4X2JsYWgoKSByb3V0aW5lcyBhY2NlcHQgYSB1bmljb2RlIHZhbHVl IGFuZCByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZQorICBjb3JyZXNwb25kaW5nIGNoYXJhY3RlciBp biBjaGFyYWN0ZXItc2V0IGJsYWgsIG9yIGVsc2UgLTEgaWYgdGhlIGNoYXJhY3RlcgorICBkb2Vz IG5vdCBleGlzdCBpbiBibGFoLiAgSW4gdGhpcyBjYXNlLCB0aGUgZnVsbCA4LWJpdCB2YWx1ZSBp cyByZXR1cm5lZCwKKyAgc2luY2UgSVNPIDIwMjIgb25seSB3b3JrcyBpbiB0aGUgaG9zdC10by10 ZXJtaW5hbCBkaXJlY3Rpb24uCisKKyAgTk9URTogS0VSTUlURk9OVCBzaG91bGQgYmUgZGVmaW5l ZCBvbmx5IGlmIHdlIGFyZSB1c2luZyB0aGUgbmV3IChzdGlsbAorICBoeXBvdGhldGljYWwpIEtl cm1pdCBmb250IHRoYXQgaGFzIGFsbCB0aGUgVlQvSGVhdGgvV3lzZS9UVkkgZ3JhcGhpYworICBj aGFyYWN0ZXJzIGluIGl0LiAgSU1QT1JUQU5UOiBhbGwgS2VybWl0Zm9udCBjb2RlIHBvaW50cyBu ZWVkIHVwZGF0aW5nIHRvCisgIHRoZSB2YWx1ZXMgaW4gdGhlIGZpbmFsIHByb3Bvc2FsIHRvIHRo ZSBVVEMuCisKKyAgTEFURVIgTk9URTogVGhlIG5lZWRlZCBjaGFyYWN0ZXJzIHdlcmUgYXBwcm92 ZWQgZm9yIFVuaWNvZGUgMy4xLCBhbmQKKyAgdGhlcmVmb3JlIG5vdGhpbmcgc3BlY2lhbCBzaG91 bGQgYmUgcmVxdWlyZWQgdG8gdXNlIHRoZW0sIGV4Y2VwdCB0aGF0IGl0CisgIHdpbGwgdGFrZSBz b21lIHRpbWUgZm9yIHRoZW0gdG8gc2hvdyB1cCBpbiBjb21tZXJjaWFsIGZvbnRzLgorCisgIFRP IERPOiBBIGxvdCBvZiB0aGUgZnVuY3Rpb25zIGNhbiBiZSB0aWdodGVuZWQgdXAgLS0gdXNlIHJh bmdlcyB3aGVuCisgIHBvc3NpYmxlLCBzb3J0IHN3aXRjaCBzdGF0ZW1lbnRzIGluIG9yZGVyIG9m IGZyZXF1ZW5jeSwgZXRjLgorKi8KKyNpbmNsdWRlICJja2NzeW0uaCIgICAgICAgICAgICAgICAg ICAgICAvKiBJbmNsdWRlcy4uLiAqLworI2luY2x1ZGUgImNrY2RlYi5oIgorI2luY2x1ZGUgImNr Y2tlci5oIgorI2luY2x1ZGUgImNrdWNtZC5oIgorI2luY2x1ZGUgImNrY3hsYS5oIgorI2luY2x1 ZGUgImNrdXhsYS5oIgorCisjaWZkZWYgVU5JQ09ERQorCisjaWZkZWYgT1MyCisvKgorICBUaGlz IG1hdGVyaWFsIGlzIG5lZWRlZCBmb3IgdGhlIGludGVncmF0aW9uIG9mIFRleHRQUyBpbnRvIEtl cm1pdCA5NS4KKyAgV2hlbiBwcmludGluZyBhIGZpbGUgd2UgdXNlIHRoZSBTRVQgRklMRSBDSEFS QUNURVItU0VUIHZhbHVlIGFzIHRoZSBpbnB1dAorICBjaGFyYWN0ZXItc2V0IGFuZCB0aGVuIGNv bnZlcnQgaXQgdG8gdGhlIHNwZWNpYWwgTGF0aW4xIHNldCBjYWxsZWQKKyAgQ291cmllckxhdGlu MSB1c2luZyB0aGUgVW5pY29kZSB0cmFuc2xhdGlvbiBmdW5jdGlvbnMuCisqLworc3RydWN0IF9w YWlyIHsgaW50IHR4OyBpbnQgZmM7IH0gVFhGQ1tdID0geworICAgIFRYX0FTQ0lJLCAgICAgICBG Q19VU0FTQ0lJLAorICAgIFRYX0JSSVRJU0gsICAgICBGQ19VS0FTQ0lJLAorICAgIFRYX0NOX0ZS RU5DSCwgICBGQ19GQ0FTQ0lJLAorICAgIFRYX0NQNDM3LCAgICAgICBGQ19DUDQzNywKKyAgICBU WF9DUDg1MCwgICAgICAgRkNfQ1A4NTAsCisgICAgVFhfQ1A4NTIsICAgICAgIEZDX0NQODUyLAor ICAgIFRYX0NQODU3LCAgICAgICAtMiwKKyAgICBUWF9DUDg2MiwgICAgICAgRkNfQ1A4NjIsCisg ICAgVFhfQ1A4NjQsICAgICAgIC0yLAorICAgIFRYX0NQODY2LCAgICAgICBGQ19DUDg2NiwKKyAg ICBUWF9DUDg2OSwgICAgICAgLTIsCisgICAgVFhfQ1VCQU4sICAgICAgIC0yLAorICAgIFRYX0Na RUNILCAgICAgICAtMiwKKyAgICBUWF9EQU5JU0gsICAgICAgLTIsCisgICAgVFhfREVDTUNTLCAg ICAgIEZDX0RFQ01DUywKKyAgICBUWF9ERUNTUEVDLCAgICAgLTIsICAgICAgICAgICAgIC8qIHdo aWxlIGRlZmluZWQsIG5vdCBpbiBmY3MgdGFibGVzICovCisgICAgVFhfREVDVEVDSCwgICAgIC0y LCAgICAgICAgICAgICAvKiB3aGlsZSBkZWZpbmVkLCBub3QgaW4gZmNzIHRhYmxlcyAqLworICAg IFRYX0RHSSwgICAgICAgICBGQ19ER01DUywKKyAgICBUWF9EVVRDSCwgICAgICAgRkNfRFVBU0NJ SSwKKyAgICBUWF9GSU5OSVNILCAgICAgRkNfRklBU0NJSSwKKyAgICBUWF9GUkVOQ0gsICAgICAg RkNfRlJBU0NJSSwKKyAgICBUWF9HRVJNQU4sICAgICAgRkNfR0VBU0NJSSwKKyAgICBUWF9IRTcs ICAgICAgICAgRkNfSEU3LAorICAgIFRYX0hQUjgsICAgICAgICBGQ19IUFI4LAorICAgIFRYX0hV TkdBUklBTiwgICBGQ19IVUFTQ0lJLAorICAgIFRYX0lUQUxJQU4sICAgICBGQ19JVEFTQ0lJLAor ICAgIFRYX0oyMDFSLCAgICAgICAtMiwKKyAgICBUWF9KMjAxSywgICAgICAgLTIsCisgICAgVFhf S09JNywgICAgICAgIEZDX0tPSTcsCisgICAgVFhfS09JOCwgICAgICAgIEZDX0tPSTgsCisgICAg VFhfS09JOFIsICAgICAgIEZDX0tPSThSLAorICAgIFRYX0tPSThVLCAgICAgICBGQ19LT0k4VSwK KyAgICBUWF84ODU5XzEsICAgICAgRkNfMUxBVElOLAorICAgIFRYXzg4NTlfMiwgICAgICBGQ18y TEFUSU4sCisgICAgVFhfODg1OV8zLCAgICAgIC0yLAorICAgIFRYXzg4NTlfNCwgICAgICAtMiwK KyAgICBUWF84ODU5XzUsICAgICAgRkNfQ1lSSUxMLAorICAgIFRYXzg4NTlfNiwgICAgICAtMiwK KyAgICBUWF84ODU5XzcsICAgICAgLTIsCisgICAgVFhfODg1OV84LCAgICAgIEZDX0hFQlJFVywK KyAgICBUWF84ODU5XzksICAgICAgLTIsCisgICAgVFhfODg1OV8xMCwgICAgIC0yLAorICAgIFRY Xzg4NTlfMTUsICAgICAtMiwKKyAgICBUWF9NQUNMMSwgICAgICAgRkNfQVBQUUQsCisgICAgVFhf TkVYVCwgICAgICAgIEZDX05FWFQsCisgICAgVFhfTk9SV0VHSUFOLCAgIEZDX05PQVNDSUksCisg ICAgVFhfUE9SVFVHVUVTRSwgIEZDX1BPQVNDSUksCisgICAgVFhfU1BBTklTSCwgICAgIEZDX1NQ QVNDSUksCisgICAgVFhfU1dFRElTSCwgICAgIEZDX1NXQVNDSUksCisgICAgVFhfU1dJU1MsICAg ICAgIEZDX0NIQVNDSUksCisgICAgVFhfSUNFTEFORElDLCAgIC0yLAorICAgIFRYX0pJUzcsICAg ICAgICAtMiwKKyAgICBUWF9TSEpJUywgICAgICAgRkNfU0hKSVMsCisgICAgVFhfSkVVQywgICAg ICAgIEZDX0pFVUMsCisgICAgVFhfSkRFQywgICAgICAgIEZDX0pERUMsCisgICAgVFhfRUxPVDky NywgICAgIEZDX0VMT1QsCisgICAgVFhfREdQQ0dSUEgsICAgIC0yLAorICAgIFRYX0RHTERHUlBI LCAgICAtMiwKKyAgICBUWF9ER1dQR1JQSCwgICAgLTIsCisgICAgVFhfSFBMSU5FLCAgICAgIC0y LAorICAgIFRYX0hQTUFUSCwgICAgICAtMiwKKyAgICBUWF9RTlhHUlBILCAgICAgLTIsCisgICAg VFhfU05JQlJBQ0ssICAgIC0yLAorICAgIFRYX1NOSUVVUk8sICAgICAtMiwKKyAgICBUWF9TTklG QUNFVCwgICAgLTIsCisgICAgVFhfU05JSUJNLCAgICAgIC0yLAorICAgIFRYX1NOSUJMQU5LLCAg ICAtMiwKKyAgICBUWF9DUDEyNTIsICAgICAgLTIsCisgICAgVFhfQ1AxMjUwLCAgICAgIEZDX0NQ MTI1MCwKKyAgICBUWF9DUDEyNTEsICAgICAgRkNfQ1AxMjUxLAorICAgIFRYX0NQMTI1MywgICAg ICAtMiwKKyAgICBUWF9DUDEyNTQsICAgICAgLTIsCisgICAgVFhfQ1AxMjU3LCAgICAgIC0yLAor ICAgIFRYX0NQODU2LCAgICAgICAtMiwKKyAgICBUWF9DUDg1NSwgICAgICAgRkNfQ1A4NTUsCisg ICAgVFhfQ1A4MTksICAgICAgIEZDXzFMQVRJTiwKKyAgICBUWF9DUDkxMiwgICAgICAgRkNfMkxB VElOLAorICAgIFRYX0NQOTEzLCAgICAgICAtMiwKKyAgICBUWF9DUDkxNCwgICAgICAgLTIsCisg ICAgVFhfQ1A5MTUsICAgICAgIEZDX0NZUklMTCwKKyAgICBUWF9DUDEwODksICAgICAgLTIsCisg ICAgVFhfQ1A4MTMsICAgICAgIEZDX0dSRUVLLAorICAgIFRYX0NQOTE2LCAgICAgICBGQ19IRUJS RVcsCisgICAgVFhfQ1A5MjAsICAgICAgIC0yLAorICAgIFRYX0NQMTA1MSwgICAgICAtMiwKKyAg ICBUWF9DUDg1OCwgICAgICAgRkNfQ1A4NTgsCisgICAgVFhfODg1OV8xNSwgICAgIEZDXzlMQVRJ TiwKKyAgICBUWF9DUDkyMywgICAgICAgRkNfQ1A5MjMsCisgICAgVFhfRUxPVDkyOCwgICAgIC0y LAorICAgIFRYX0NQMTAwMDAsICAgICAtMiwKKyAgICBUWF9DUDM3LCAgICAgICAgLTIsCisgICAg VFhfQ1AxMjU1LCAgICAgIC0yLAorICAgIFRYX0NQMTI1NiwgICAgICAtMiwKKyAgICBUWF9DUDEy NTgsICAgICAgLTIsCisgICAgVFhfTUFaT1ZJQSwgICAgIEZDX01BWk9WSUEsCisgICAgVFhfQVBM MSwgICAgICAgIC0yLAorICAgIFRYX0FQTDIsICAgICAgICAtMiwKKyAgICBUWF9BUEwzLCAgICAg ICAgLTIsCisgICAgVFhfQVBMNCwgICAgICAgIC0yLAorICAgIFRYX0FQTDUsICAgICAgICAtMiwK KyAgICBUWF9UUkFOU1AsICAgICAgRkNfVFJBTlNQCit9OworaW50IG5UWEZDID0gc2l6ZW9mKFRY RkMpIC8gc2l6ZW9mKHN0cnVjdCBfcGFpcik7CisKK2ludAorI2lmZGVmIENLX0FOU0lDCitmYzJ0 eChpbnQgZmMpCisjZWxzZQorZmMydHgoaW50IGMpIGludCBmYzsKKyNlbmRpZiAvKiBDS19BTlNJ QyAqLworeworICAgIGludCBpOworICAgIGZvciAoaSA9IDA7IGkgPCBuVFhGQyA7IGkrKykKKyAg ICAgIGlmIChUWEZDW2ldLmZjID09IGZjICYmIFRYRkNbaV0udHggPj0gMCkKKyAgICAgICAgcmV0 dXJuKFRYRkNbaV0udHgpOworICAgIHJldHVybihUWF9BU0NJSSk7Cit9CisKK2ludAorI2lmZGVm IENLX0FOU0lDCit0eDJmYyhpbnQgdHgpCisjZWxzZQordHgyZmMoaW50IHgpIGludCB0eDsKKyNl bmRpZiAvKiBDS19BTlNJQyAqLworeworICAgIGludCBpOworICAgIGZvciAoaSA9IDA7IGkgPCBu VFhGQyA7IGkrKykKKyAgICAgIGlmIChUWEZDW2ldLnR4ID09IHR4ICYmIFRYRkNbaV0uZmMgPj0g MCkKKyAgICAgICAgcmV0dXJuKFRYRkNbaV0uZmMpOworICAgIHJldHVybihGQ19VU0FTQ0lJKTsK K30KKworLyogU0VUIFRFUk1JTkFMIFJFTU9URSBDSEFSQUNURVItU0VUIGtleXdvcmQgdGFibGUg Ki8KKworc3RydWN0IGtleXRhYiB0eHJ0YWJbXSA9IHsKKyAgICAiYXBsMi1pYm0iLCAgICAgICAg IFRYX0FQTDQsICAgICAgIDAsCisgICAgImFwbC0yNzQxIiwgICAgICAgICBUWF9BUEw1LCAgICAg ICAwLAorICAgICJhcGwtZHlhZGljIiwgICAgICAgVFhfQVBMMiwgICAgICAgMCwKKyAgICAiYXBs LWlzbyIsICAgICAgICAgIFRYX0FQTDEsICAgICAgIDAsCisgICAgImFwbC1wbHVzLTIwMDAiLCAg ICBUWF9BUEwzLCAgICAgICAwLCAvKiA9IEFQTC0yMDAwICovCisgICAgImFyYWJpYy1pc28iLCAg ICAgICBUWF84ODU5XzYsICAgICAwLAorICAgICJhc2NpaSIsICAgICAgICAgICAgVFhfQVNDSUks ICAgICAgMCwKKyAgICAiYnJpdGlzaCIsICAgICAgICAgIFRYX0JSSVRJU0gsICAgIDAsCisgICAg ImNhbmFkaWFuLWZyZW5jaCIsICBUWF9DTl9GUkVOQ0gsICAwLAorICAgICJidWxnYXJpYS1wYyIs ICAgICAgVFhfQ1A4NTYsICAgICAgMCwKKyNpZmRlZiBDT01NRU5UCisgICAgImNwMDM3IiwgICAg ICAgICAgICBUWF9DUDM3LCAgICAgICAwLCAvKiBVLlMuIEVCQ0RJQyAqLworI2VuZGlmIC8qIENP TU1FTlQgKi8KKyAgICAiY3AxMDAwMCIsICAgICAgICAgIFRYX0NQMTAwMDAsICAgIDAsIC8qIEFw cGxlIFF1aWNrZHJhdyAqLworICAgICJjcDEwNTEiLCAgICAgICAgICAgVFhfQ1AxMDUxLCAgICAg MCwgLyogU2FtZSBhcyBIUCBSb21hbiA4ICovCisgICAgImNwMTA4OSIsICAgICAgICAgICBUWF9D UDEwODksICAgICAwLCAvKiBTYW1lIGFzIElTTyA4ODU5LTYgKi8KKyAgICAiY3AxMjUwIiwgICAg ICAgICAgIFRYX0NQMTI1MCwgICAgIDAsIC8qIExhdGluLTIgV2luZG93cyAqLworICAgICJjcDEy NTEiLCAgICAgICAgICAgVFhfQ1AxMjUxLCAgICAgMCwgLyogQ3lyaWxsaWMgV2luZG93cyAqLwor ICAgICJjcDEyNTIiLCAgICAgICAgICAgVFhfQ1AxMjUyLCAgICAgMCwgLyogTGF0aW4tMSBXaW5k b3dzICovCisgICAgImNwMTI1MyIsICAgICAgICAgICBUWF9DUDEyNTMsICAgICAwLCAvKiBHcmVl ayBXaW5kb3dzICovCisgICAgImNwMTI1NCIsICAgICAgICAgICBUWF9DUDEyNTQsICAgICAwLCAv KiBUdXJrZXkgV2luZG93cyAqLworICAgICJjcDEyNTUiLCAgICAgICAgICAgVFhfQ1AxMjU1LCAg ICAgMCwgLyogSGVicmV3IFdpbmRvd3MgKi8KKyAgICAiY3AxMjU2IiwgICAgICAgICAgIFRYX0NQ MTI1NiwgICAgIDAsIC8qIEFyYWJpYyBXaW5kb3dzICovCisgICAgImNwMTI1NyIsICAgICAgICAg ICBUWF9DUDEyNTcsICAgICAwLCAvKiBMYXRpbi00IFdpbmRvd3MgKi8KKyAgICAiY3AxMjU4Iiwg ICAgICAgICAgIFRYX0NQMTI1OCwgICAgIDAsIC8qIFZpZXQgTmFtIFdpbmRvd3MgKi8KKyAgICAi Y3A0MzciLCAgICAgICAgICAgIFRYX0NQNDM3LCAgICAgIDAsCisgICAgImNwODEzIiwgICAgICAg ICAgICBUWF9DUDgxMywgICAgICAwLCAvKiBTYW1lIGFzIElTTyA4ODU5LTcgKi8KKyAgICAiY3A4 MTkiLCAgICAgICAgICAgIFRYX0NQODE5LCAgICAgIDAsIC8qIFNhbWUgYXMgSVNPIDg4NTktMSAq LworICAgICJjcDg1MCIsICAgICAgICAgICAgVFhfQ1A4NTAsICAgICAgMCwKKyAgICAiY3A4NTIi LCAgICAgICAgICAgIFRYX0NQODUyLCAgICAgIDAsCisgICAgImNwODU1IiwgICAgICAgICAgICBU WF9DUDg1NSwgICAgICAwLCAvKiBDeXJpbGxpYyAqLworICAgICJjcDg1NiIsICAgICAgICAgICAg VFhfQ1A4NTYsICAgICAgQ01fSU5WLCAvKiBCdWxnYXJpYSAqLworICAgICJjcDg1NyIsICAgICAg ICAgICAgVFhfQ1A4NTcsICAgICAgMCwgLyogTGF0aW4tNSAqLworICAgICJjcDg1OCIsICAgICAg ICAgICAgVFhfQ1A4NTgsICAgICAgMCwgLyogRXVybyBtb2RpZmllZCBjcDg1MCAqLworICAgICJj cDg2Mi1oZWJyZXciLCAgICAgVFhfQ1A4NjIsICAgICAgMCwgLyogSGVicmV3ICovCisgICAgImNw ODY0IiwgICAgICAgICAgICBUWF9DUDg2NCwgICAgICAwLCAvKiBBcmFiaWMgKi8KKyAgICAiY3A4 NjYiLCAgICAgICAgICAgIFRYX0NQODY2LCAgICAgIDAsIC8qIEN5cmlsbGljICovCisgICAgImNw ODY5IiwgICAgICAgICAgICBUWF9DUDg2OSwgICAgICAwLCAvKiBHcmVlayAqLworICAgICJjcDkx MiIsICAgICAgICAgICAgVFhfQ1A5MTIsICAgICAgMCwgLyogU2FtZSBhcyBJU08gODg1OS0yICov CisgICAgImNwOTEzIiwgICAgICAgICAgICBUWF9DUDkxMywgICAgICAwLCAvKiBTYW1lIGFzIElT TyA4ODU5LTMgKi8KKyAgICAiY3A5MTQiLCAgICAgICAgICAgIFRYX0NQOTE0LCAgICAgIDAsIC8q IFNhbWUgYXMgSVNPIDg4NTktNCAqLworICAgICJjcDkxNSIsICAgICAgICAgICAgVFhfQ1A5MTUs ICAgICAgMCwgLyogU2FtZSBhcyBJU08gODg1OS01ICovCisgICAgImNwOTE2IiwgICAgICAgICAg ICBUWF9DUDkxNiwgICAgICAwLCAvKiBTYW1lIGFzIElTTyA4ODU5LTggKi8KKyAgICAiY3A5MjAi LCAgICAgICAgICAgIFRYX0NQOTIwLCAgICAgIDAsIC8qIFNhbWUgYXMgSVNPIDg4NTktOSAqLwor ICAgICJjcDkyMyIsICAgICAgICAgICAgVFhfQ1A5MjMsICAgICAgMCwgLyogU2FtZSBhcyBJU08g ODg1OS0xNSAqLworI2lmZGVmIENPTU1FTlQKKy8qIE5vdCBpbXBsZW1lbnRlZCB5ZXQgKi8KKyAg ICAiY3ViYW4iLCAgICAgICAgICAgIFRYX0NVQkFOLCAgICAgIDAsCisjZW5kaWYgLyogQ09NTUVO VCAqLworICAgICJjeXJpbGxpYy1pc28iLCAgICAgVFhfODg1OV81LCAgICAgMCwKKyNpZmRlZiBD T01NRU5UCisvKiBOb3QgaW1wbGVtZW50ZWQgeWV0ICovCisgICAgImN6ZWNoIiwgICAgICAgICAg ICBUWF9DWkVDSCwgICAgICAwLAorI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAiZGFuaXNoIiwg ICAgICAgICAgIFRYX0RBTklTSCwgICAgIDAsCisgICAgImRlYy1tIiwgICAgICAgICAgICBUWF9E RUNNQ1MsICAgICBDTV9BQlJ8Q01fSU5WLAorICAgICJkZWMtbWNzIiwgICAgICAgICAgVFhfREVD TUNTLCAgICAgQ01fSU5WLAorICAgICJkZWMtbXVsdGluYXRpb25hbCIsVFhfREVDTUNTLCAgICAg MCwKKyNpZmRlZiBDT01NRU5UICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOb3QgaW1wbGVt ZW50ZWQgeWV0ICovCisgICAgImRlYy1rYW5qaSIsICAgICAgICBUWF9KREVDLCAgICAgICAwLAor I2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAiZGVjLXNwZWNpYWwiLCAgICAgIFRYX0RFQ1NQRUMs ICAgIDAsCisgICAgImRlYy10ZWNobmljYWwiLCAgICBUWF9ERUNURUNILCAgICAwLAorICAgICJk Zy1pbnRlcm5hdGlvbmFsIiwgVFhfREdJLCAgICAgICAgMCwKKyAgICAiZGctbGluZWRyYXdpbmci LCAgIFRYX0RHTERHUlBILCAgIDAsCisgICAgImRnLXNwZWNpYWxncmFwaGNzIixUWF9ER1BDR1JQ SCwgICAwLAorICAgICJkZy13b3JkcHJvY2Vzc2luZyIsVFhfREdXUEdSUEgsICAgMCwKKyAgICAi ZHV0Y2giLCAgICAgICAgICAgIFRYX0RVVENILCAgICAgIDAsCisgICAgImVsb3Q5MjctZ3JlZWsi LCAgICBUWF9FTE9UOTI3LCAgICAwLAorICAgICJlbG90OTI4LWdyZWVrIiwgICAgVFhfRUxPVDky OCwgICAgMCwKKyAgICAiZmlubmlzaCIsICAgICAgICAgIFRYX0ZJTk5JU0gsICAgIDAsCisgICAg ImZyZW5jaCIsICAgICAgICAgICBUWF9GUkVOQ0gsICAgICAwLAorICAgICJnZXJtYW4iLCAgICAg ICAgICAgVFhfR0VSTUFOLCAgICAgMCwKKyAgICAiZ3JlZWstaXNvIiwgICAgICAgIFRYXzg4NTlf NywgICAgIDAsCisgICAgImhlYnJldy03IiwgICAgICAgICBUWF9IRTcsICAgICAgICAwLAorICAg ICJoZWJyZXctaXNvIiwgICAgICAgVFhfODg1OV84LCAgICAgMCwKKyAgICAiaHAtbGluZS1kcmF3 aW5nIiwgIFRYX0hQTElORSwgICAgIDAsCisgICAgImhwLW1hdGgvdGVjaG5pY2FsIixUWF9IUE1B VEgsICAgICAwLAorICAgICJocC1yb21hbjgiLCAgICAgICAgVFhfSFBSOCwgICAgICAgMCwKKyAg ICAiaHVuZ2FyaWFuIiwgICAgICAgIFRYX0hVTkdBUklBTiwgIDAsCisgICAgIml0YWxpYW4iLCAg ICAgICAgICBUWF9JVEFMSUFOLCAgICAwLAorICAgICJqYXBhbmVzZS1yb21hbiIsICAgVFhfSjIw MVIsICAgICAgMCwKKyNpZmRlZiBDT01NRU5UICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBO b3QgaW1wbGVtZW50ZWQgeWV0ICovCisgICAgImphcGFuZXNlLWV1YyIsICAgICBUWF9KRVVDLCAg ICAgICAwLAorICAgICJqaXM3LWthbmppIiwgICAgICAgVFhfSklTNywgICAgICAgMCwKKyNlbmRp ZiAvKiBDT01NRU5UICovCisgICAgImthdGFrYW5hIiwgICAgICAgICBUWF9KMjAxSywgICAgICAw LAorICAgICJrbyIsICAgICAgICAgICAgICAgVFhfS09JOCwgICAgICAgQ01fQUJSfENNX0lOViwK KyAgICAia29pIiwgICAgICAgICAgICAgIFRYX0tPSTgsICAgICAgIENNX0FCUnxDTV9JTlYsCisg ICAgImtvaTgiLCAgICAgICAgICAgICBUWF9LT0k4LCAgICAgICAwLAorICAgICJrb2k4LWN5cmls bGljIiwgICAgVFhfS09JOCwgICAgICAgQ01fSU5WLAorICAgICJrb2k4ciIsICAgICAgICAgICAg VFhfS09JOFIsICAgICAgMCwKKyAgICAia29pOHUiLCAgICAgICAgICAgIFRYX0tPSThVLCAgICAg IDAsCisgICAgImwiLCAgICAgICAgICAgICAgICBUWF84ODU5XzEsICAgICBDTV9BQlJ8Q01fSU5W LAorICAgICJsYSIsICAgICAgICAgICAgICAgVFhfODg1OV8xLCAgICAgQ01fQUJSfENNX0lOViwK KyAgICAibGF0IiwgICAgICAgICAgICAgIFRYXzg4NTlfMSwgICAgIENNX0FCUnxDTV9JTlYsCisg ICAgImxhdGkiLCAgICAgICAgICAgICBUWF84ODU5XzEsICAgICBDTV9BQlJ8Q01fSU5WLAorICAg ICJsYXRpbiIsICAgICAgICAgICAgVFhfODg1OV8xLCAgICAgQ01fQUJSfENNX0lOViwKKyAgICAi bGF0aW4xLWlzbyIsICAgICAgIFRYXzg4NTlfMSwgICAgIDAsCisgICAgImxhdGluMi1pc28iLCAg ICAgICBUWF84ODU5XzIsICAgICAwLAorICAgICJsYXRpbjMtaXNvIiwgICAgICAgVFhfODg1OV8z LCAgICAgMCwKKyAgICAibGF0aW40LWlzbyIsICAgICAgIFRYXzg4NTlfNCwgICAgIDAsCisgICAg ImxhdGluNS1pc28iLCAgICAgICBUWF84ODU5XzksICAgICAwLAorICAgICJsYXRpbjYtaXNvIiwg ICAgICAgVFhfODg1OV8xMCwgICAgMCwKKyAgICAibGF0aW45LWlzbyIsICAgICAgIFRYXzg4NTlf MTUsICAgIDAsCisgICAgIm1hY2ludG9zaC1sYXRpbiIsICBUWF9NQUNMMSwgICAgICAwLAorICAg ICJtYXpvdmlhLXBjIiwgICAgICAgVFhfTUFaT1ZJQSwgICAgMCwKKyAgICAibmV4dC1tdWx0aW5h dGlvbmFsIixUWF9ORVhULCAgICAgIDAsCisgICAgIm5vcndlZ2lhbiIsICAgICAgICBUWF9OT1JX RUdJQU4sICAwLAorICAgICJwb3J0dWd1ZXNlIiwgICAgICAgVFhfUE9SVFVHVUVTRSwgMCwKKyAg ICAicW54LWNvbnNvbGUiLCAgICAgIFRYX1FOWEdSUEgsICAgIDAsCisjaWZkZWYgQ09NTUVOVCAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogTm90IGltcGxlbWVudGVkIHlldCAqLworICAgICJz aGlmdC1qaXMiLCAgICAgICAgVFhfU0hKSVMsICAgICAgMCwKKyNlbmRpZiAvKiBDT01NRU5UICov CisgICAgInNob3J0LWtvaSIsICAgICAgICBUWF9LT0k3LCAgICAgICAwLAorICAgICJzbmktYmxh bmtzIiwgICAgICAgVFhfU05JQkxBTkssICAgMCwKKyAgICAic25pLWJyYWNrZXRzIiwgICAgIFRY X1NOSUJSQUNLLCAgIDAsCisgICAgInNuaS1ldXJvIiwgICAgICAgICBUWF9TTklFVVJPLCAgICAw LAorICAgICJzbmktZmFjZXQiLCAgICAgICAgVFhfU05JRkFDRVQsICAgMCwKKyAgICAic25pLWli bSIsICAgICAgICAgIFRYX1NOSUlCTSwgICAgIDAsCisgICAgInNwYW5pc2giLCAgICAgICAgICBU WF9TUEFOSVNILCAgICAwLAorICAgICJzd2VkaXNoIiwgICAgICAgICAgVFhfU1dFRElTSCwgICAg MCwKKyAgICAic3dpc3MiLCAgICAgICAgICAgIFRYX1NXSVNTLCAgICAgIDAsCisgICAgInRyYW5z cGFyZW50IiwgICAgICBUWF9UUkFOU1AsICAgICAwLAorI2lmZGVmIENPTU1FTlQKKyAgICAidXRm NyIsICAgICAgICAgICAgIFRYX1VURjcsICAgICAgIDAsCisjZW5kaWYgLyogQ09NTUVOVCAqLwor ICAgICJ1dGY4IiwgICAgICAgICAgICAgVFhfVVRGOCwgICAgICAgMCwKKyAgICAiIiwgMCwgMAor fTsKK2ludCBudHhydGFiID0gc2l6ZW9mKHR4cnRhYikvc2l6ZW9mKHN0cnVjdCBrZXl0YWIpIC0g MTsKKyNlbmRpZiAvKiBPUzIgKi8KKworI2lmZGVmIEtBTkpJCisvKgorICBBbGwgS2FuamkvVW5p Y29kZSB0cmFuc2xhdGlvbnMgYXJlIGJhc2VkIG9uIHRoZSBVbmljb2RlIDMuMAorICBTaGlmdC1K SVMgbWFwcGluZy4gIE90aGVyIGNoYXJhY3RlciBzZXRzLCBsaWtlIEVVQy1KUCwgSklTLTcsIGV0 YywKKyAgYXJlIHRyYW5zZm9ybWVkIGFsZ29yaXRobWljYWxseSB0by9mcm9tIFNoaWZ0LUpJUyBi ZWZvcmUvYWZ0ZXIKKyAgY29udmVyc2lvbiB0by9mcm9tIFVuaWNvZGUuICBUaGlzIGlzIGJlY2F1 c2UgS2FuamkvVW5pY29kZSBtYXBwaW5nCisgIHRhYmxlcyBhZGQgYWJvdXQgMTIwSyB0byB0aGUg cHJvZ3JhbSwgYW5kIHdlIGRvbid0IHdhbnQgdG8gZG8gdGhpcworICBmb3IgZWFjaCBLYW5qaSBj aGFyYWN0ZXIgc2V0LgorKi8KK3N0YXRpYyBVU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBTaGlmdC1KSVMgdG8gVW5pY29kZSAqLworc2p1XzgxNDBbXSA9IHsgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIDB4ODE0MCB0aHJ1IDB4OWZmYyAqLworICAgIDB4MzAwMCwgMHgzMDAx LCAweDMwMDIsIDB4ZmYwYywgMHhmZjBlLCAweDMwZmIsIDB4ZmYxYSwgMHhmZjFiLAorICAgIDB4 ZmYxZiwgMHhmZjAxLCAweDMwOWIsIDB4MzA5YywgMHgwMGI0LCAweGZmNDAsIDB4MDBhOCwgMHhm ZjNlLAorICAgIDB4ZmZlMywgMHhmZjNmLCAweDMwZmQsIDB4MzBmZSwgMHgzMDlkLCAweDMwOWUs IDB4MzAwMywgMHg0ZWRkLAorICAgIDB4MzAwNSwgMHgzMDA2LCAweDMwMDcsIDB4MzBmYywgMHgy MDE1LCAweDIwMTAsIDB4ZmYwZiwgMHgwMDVjLAorICAgIDB4MzAxYywgMHgyMDE2LCAweGZmNWMs IDB4MjAyNiwgMHgyMDI1LCAweDIwMTgsIDB4MjAxOSwgMHgyMDFjLAorICAgIDB4MjAxZCwgMHhm ZjA4LCAweGZmMDksIDB4MzAxNCwgMHgzMDE1LCAweGZmM2IsIDB4ZmYzZCwgMHhmZjViLAorICAg IDB4ZmY1ZCwgMHgzMDA4LCAweDMwMDksIDB4MzAwYSwgMHgzMDBiLCAweDMwMGMsIDB4MzAwZCwg MHgzMDBlLAorICAgIDB4MzAwZiwgMHgzMDEwLCAweDMwMTEsIDB4ZmYwYiwgMHgyMjEyLCAweDAw YjEsIDB4MDBkNywgMHhmZmZkLAorICAgIDB4MDBmNywgMHhmZjFkLCAweDIyNjAsIDB4ZmYxYywg MHhmZjFlLCAweDIyNjYsIDB4MjI2NywgMHgyMjFlLAorICAgIDB4MjIzNCwgMHgyNjQyLCAweDI2 NDAsIDB4MDBiMCwgMHgyMDMyLCAweDIwMzMsIDB4MjEwMywgMHhmZmU1LAorICAgIDB4ZmYwNCwg MHgwMGEyLCAweDAwYTMsIDB4ZmYwNSwgMHhmZjAzLCAweGZmMDYsIDB4ZmYwYSwgMHhmZjIwLAor ICAgIDB4MDBhNywgMHgyNjA2LCAweDI2MDUsIDB4MjVjYiwgMHgyNWNmLCAweDI1Y2UsIDB4MjVj NywgMHgyNWM2LAorICAgIDB4MjVhMSwgMHgyNWEwLCAweDI1YjMsIDB4MjViMiwgMHgyNWJkLCAw eDI1YmMsIDB4MjAzYiwgMHgzMDEyLAorICAgIDB4MjE5MiwgMHgyMTkwLCAweDIxOTEsIDB4MjE5 MywgMHgzMDEzLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4MjIw OCwgMHgyMjBiLCAweDIyODYsIDB4MjI4NywgMHgyMjgyLCAweDIyODMsIDB4MjIyYSwgMHgyMjI5 LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4MjIyNywgMHgyMjI4LCAweDAwYWMsIDB4MjFkMiwgMHgyMWQ0 LCAweDIyMDAsIDB4MjIwMywgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZk LCAweDIyMjAsIDB4MjJhNSwgMHgyMzEyLCAweDIyMDIsIDB4MjIwNywgMHgyMjYxLAorICAgIDB4 MjI1MiwgMHgyMjZhLCAweDIyNmIsIDB4MjIxYSwgMHgyMjNkLCAweDIyMWQsIDB4MjIzNSwgMHgy MjJiLAorICAgIDB4MjIyYywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4MjEyYiwgMHgyMDMwLCAweDI2NmYsIDB4MjY2ZCwgMHgy NjZhLCAweDIwMjAsIDB4MjAyMSwgMHgwMGI2LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHgyNWVmLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZjEwLAorICAgIDB4ZmYx MSwgMHhmZjEyLCAweGZmMTMsIDB4ZmYxNCwgMHhmZjE1LCAweGZmMTYsIDB4ZmYxNywgMHhmZjE4 LAorICAgIDB4ZmYxOSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmYyMSwgMHhmZjIyLCAweGZmMjMsIDB4ZmYyNCwgMHhmZjI1 LCAweGZmMjYsIDB4ZmYyNywgMHhmZjI4LAorICAgIDB4ZmYyOSwgMHhmZjJhLCAweGZmMmIsIDB4 ZmYyYywgMHhmZjJkLCAweGZmMmUsIDB4ZmYyZiwgMHhmZjMwLAorICAgIDB4ZmYzMSwgMHhmZjMy LCAweGZmMzMsIDB4ZmYzNCwgMHhmZjM1LCAweGZmMzYsIDB4ZmYzNywgMHhmZjM4LAorICAgIDB4 ZmYzOSwgMHhmZjNhLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHhmZjQxLCAweGZmNDIsIDB4ZmY0MywgMHhmZjQ0LCAweGZmNDUs IDB4ZmY0NiwgMHhmZjQ3LAorICAgIDB4ZmY0OCwgMHhmZjQ5LCAweGZmNGEsIDB4ZmY0YiwgMHhm ZjRjLCAweGZmNGQsIDB4ZmY0ZSwgMHhmZjRmLAorICAgIDB4ZmY1MCwgMHhmZjUxLCAweGZmNTIs IDB4ZmY1MywgMHhmZjU0LCAweGZmNTUsIDB4ZmY1NiwgMHhmZjU3LAorICAgIDB4ZmY1OCwgMHhm ZjU5LCAweGZmNWEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHgzMDQxLAorICAg IDB4MzA0MiwgMHgzMDQzLCAweDMwNDQsIDB4MzA0NSwgMHgzMDQ2LCAweDMwNDcsIDB4MzA0OCwg MHgzMDQ5LAorICAgIDB4MzA0YSwgMHgzMDRiLCAweDMwNGMsIDB4MzA0ZCwgMHgzMDRlLCAweDMw NGYsIDB4MzA1MCwgMHgzMDUxLAorICAgIDB4MzA1MiwgMHgzMDUzLCAweDMwNTQsIDB4MzA1NSwg MHgzMDU2LCAweDMwNTcsIDB4MzA1OCwgMHgzMDU5LAorICAgIDB4MzA1YSwgMHgzMDViLCAweDMw NWMsIDB4MzA1ZCwgMHgzMDVlLCAweDMwNWYsIDB4MzA2MCwgMHgzMDYxLAorICAgIDB4MzA2Miwg MHgzMDYzLCAweDMwNjQsIDB4MzA2NSwgMHgzMDY2LCAweDMwNjcsIDB4MzA2OCwgMHgzMDY5LAor ICAgIDB4MzA2YSwgMHgzMDZiLCAweDMwNmMsIDB4MzA2ZCwgMHgzMDZlLCAweDMwNmYsIDB4MzA3 MCwgMHgzMDcxLAorICAgIDB4MzA3MiwgMHgzMDczLCAweDMwNzQsIDB4MzA3NSwgMHgzMDc2LCAw eDMwNzcsIDB4MzA3OCwgMHgzMDc5LAorICAgIDB4MzA3YSwgMHgzMDdiLCAweDMwN2MsIDB4MzA3 ZCwgMHgzMDdlLCAweDMwN2YsIDB4MzA4MCwgMHgzMDgxLAorICAgIDB4MzA4MiwgMHgzMDgzLCAw eDMwODQsIDB4MzA4NSwgMHgzMDg2LCAweDMwODcsIDB4MzA4OCwgMHgzMDg5LAorICAgIDB4MzA4 YSwgMHgzMDhiLCAweDMwOGMsIDB4MzA4ZCwgMHgzMDhlLCAweDMwOGYsIDB4MzA5MCwgMHgzMDkx LAorICAgIDB4MzA5MiwgMHgzMDkzLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4MzBhMSwgMHgzMGEyLCAweDMwYTMsIDB4MzBhNCwgMHgzMGE1LCAweDMw YTYsIDB4MzBhNywgMHgzMGE4LAorICAgIDB4MzBhOSwgMHgzMGFhLCAweDMwYWIsIDB4MzBhYywg MHgzMGFkLCAweDMwYWUsIDB4MzBhZiwgMHgzMGIwLAorICAgIDB4MzBiMSwgMHgzMGIyLCAweDMw YjMsIDB4MzBiNCwgMHgzMGI1LCAweDMwYjYsIDB4MzBiNywgMHgzMGI4LAorICAgIDB4MzBiOSwg MHgzMGJhLCAweDMwYmIsIDB4MzBiYywgMHgzMGJkLCAweDMwYmUsIDB4MzBiZiwgMHgzMGMwLAor ICAgIDB4MzBjMSwgMHgzMGMyLCAweDMwYzMsIDB4MzBjNCwgMHgzMGM1LCAweDMwYzYsIDB4MzBj NywgMHgzMGM4LAorICAgIDB4MzBjOSwgMHgzMGNhLCAweDMwY2IsIDB4MzBjYywgMHgzMGNkLCAw eDMwY2UsIDB4MzBjZiwgMHgzMGQwLAorICAgIDB4MzBkMSwgMHgzMGQyLCAweDMwZDMsIDB4MzBk NCwgMHgzMGQ1LCAweDMwZDYsIDB4MzBkNywgMHgzMGQ4LAorICAgIDB4MzBkOSwgMHgzMGRhLCAw eDMwZGIsIDB4MzBkYywgMHgzMGRkLCAweDMwZGUsIDB4MzBkZiwgMHhmZmZkLAorICAgIDB4MzBl MCwgMHgzMGUxLCAweDMwZTIsIDB4MzBlMywgMHgzMGU0LCAweDMwZTUsIDB4MzBlNiwgMHgzMGU3 LAorICAgIDB4MzBlOCwgMHgzMGU5LCAweDMwZWEsIDB4MzBlYiwgMHgzMGVjLCAweDMwZWQsIDB4 MzBlZSwgMHgzMGVmLAorICAgIDB4MzBmMCwgMHgzMGYxLCAweDMwZjIsIDB4MzBmMywgMHgzMGY0 LCAweDMwZjUsIDB4MzBmNiwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHgwMzkxLAorICAgIDB4MDM5MiwgMHgwMzkz LCAweDAzOTQsIDB4MDM5NSwgMHgwMzk2LCAweDAzOTcsIDB4MDM5OCwgMHgwMzk5LAorICAgIDB4 MDM5YSwgMHgwMzliLCAweDAzOWMsIDB4MDM5ZCwgMHgwMzllLCAweDAzOWYsIDB4MDNhMCwgMHgw M2ExLAorICAgIDB4MDNhMywgMHgwM2E0LCAweDAzYTUsIDB4MDNhNiwgMHgwM2E3LCAweDAzYTgs IDB4MDNhOSwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHgwM2IxLAorICAgIDB4MDNiMiwgMHgwM2IzLCAweDAzYjQs IDB4MDNiNSwgMHgwM2I2LCAweDAzYjcsIDB4MDNiOCwgMHgwM2I5LAorICAgIDB4MDNiYSwgMHgw M2JiLCAweDAzYmMsIDB4MDNiZCwgMHgwM2JlLCAweDAzYmYsIDB4MDNjMCwgMHgwM2MxLAorICAg IDB4MDNjMywgMHgwM2M0LCAweDAzYzUsIDB4MDNjNiwgMHgwM2M3LCAweDAzYzgsIDB4MDNjOSwg MHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 MDQxMCwgMHgwNDExLCAweDA0MTIsIDB4MDQxMywgMHgwNDE0LCAweDA0MTUsIDB4MDQwMSwgMHgw NDE2LAorICAgIDB4MDQxNywgMHgwNDE4LCAweDA0MTksIDB4MDQxYSwgMHgwNDFiLCAweDA0MWMs IDB4MDQxZCwgMHgwNDFlLAorICAgIDB4MDQxZiwgMHgwNDIwLCAweDA0MjEsIDB4MDQyMiwgMHgw NDIzLCAweDA0MjQsIDB4MDQyNSwgMHgwNDI2LAorICAgIDB4MDQyNywgMHgwNDI4LCAweDA0Mjks IDB4MDQyYSwgMHgwNDJiLCAweDA0MmMsIDB4MDQyZCwgMHgwNDJlLAorICAgIDB4MDQyZiwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4MDQzMCwgMHgwNDMxLCAweDA0MzIsIDB4MDQzMywgMHgwNDM0LCAweDA0 MzUsIDB4MDQ1MSwgMHgwNDM2LAorICAgIDB4MDQzNywgMHgwNDM4LCAweDA0MzksIDB4MDQzYSwg MHgwNDNiLCAweDA0M2MsIDB4MDQzZCwgMHhmZmZkLAorICAgIDB4MDQzZSwgMHgwNDNmLCAweDA0 NDAsIDB4MDQ0MSwgMHgwNDQyLCAweDA0NDMsIDB4MDQ0NCwgMHgwNDQ1LAorICAgIDB4MDQ0Niwg MHgwNDQ3LCAweDA0NDgsIDB4MDQ0OSwgMHgwNDRhLCAweDA0NGIsIDB4MDQ0YywgMHgwNDRkLAor ICAgIDB4MDQ0ZSwgMHgwNDRmLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHgyNTAwLAorICAgIDB4MjUwMiwgMHgyNTBjLCAweDI1MTAsIDB4MjUx OCwgMHgyNTE0LCAweDI1MWMsIDB4MjUyYywgMHgyNTI0LAorICAgIDB4MjUzNCwgMHgyNTNjLCAw eDI1MDEsIDB4MjUwMywgMHgyNTBmLCAweDI1MTMsIDB4MjUxYiwgMHgyNTE3LAorICAgIDB4MjUy MywgMHgyNTMzLCAweDI1MmIsIDB4MjUzYiwgMHgyNTRiLCAweDI1MjAsIDB4MjUyZiwgMHgyNTI4 LAorICAgIDB4MjUzNywgMHgyNTNmLCAweDI1MWQsIDB4MjUzMCwgMHgyNTI1LCAweDI1MzgsIDB4 MjU0MiwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHg0ZTljLAorICAgIDB4NTUxNiwgMHg1YTAzLCAweDk2M2YsIDB4NTRjMCwg MHg2MTFiLCAweDYzMjgsIDB4NTlmNiwgMHg5MDIyLAorICAgIDB4ODQ3NSwgMHg4MzFjLCAweDdh NTAsIDB4NjBhYSwgMHg2M2UxLCAweDZlMjUsIDB4NjVlZCwgMHg4NDY2LAorICAgIDB4ODJhNiwg MHg5YmY1LCAweDY4OTMsIDB4NTcyNywgMHg2NWExLCAweDYyNzEsIDB4NWI5YiwgMHg1OWQwLAor ICAgIDB4ODY3YiwgMHg5OGY0LCAweDdkNjIsIDB4N2RiZSwgMHg5YjhlLCAweDYyMTYsIDB4N2M5 ZiwgMHg4OGI3LAorICAgIDB4NWI4OSwgMHg1ZWI1LCAweDYzMDksIDB4NjY5NywgMHg2ODQ4LCAw eDk1YzcsIDB4OTc4ZCwgMHg2NzRmLAorICAgIDB4NGVlNSwgMHg0ZjBhLCAweDRmNGQsIDB4NGY5 ZCwgMHg1MDQ5LCAweDU2ZjIsIDB4NTkzNywgMHg1OWQ0LAorICAgIDB4NWEwMSwgMHg1YzA5LCAw eDYwZGYsIDB4NjEwZiwgMHg2MTcwLCAweDY2MTMsIDB4NjkwNSwgMHg3MGJhLAorICAgIDB4NzU0 ZiwgMHg3NTcwLCAweDc5ZmIsIDB4N2RhZCwgMHg3ZGVmLCAweDgwYzMsIDB4ODQwZSwgMHg4ODYz LAorICAgIDB4OGIwMiwgMHg5MDU1LCAweDkwN2EsIDB4NTMzYiwgMHg0ZTk1LCAweDRlYTUsIDB4 NTdkZiwgMHg4MGIyLAorICAgIDB4OTBjMSwgMHg3OGVmLCAweDRlMDAsIDB4NThmMSwgMHg2ZWEy LCAweDkwMzgsIDB4N2EzMiwgMHg4MzI4LAorICAgIDB4ODI4YiwgMHg5YzJmLCAweDUxNDEsIDB4 NTM3MCwgMHg1NGJkLCAweDU0ZTEsIDB4NTZlMCwgMHg1OWZiLAorICAgIDB4NWYxNSwgMHg5OGYy LCAweDZkZWIsIDB4ODBlNCwgMHg4NTJkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OTY2MiwgMHg5NjcwLCAweDk2 YTAsIDB4OTdmYiwgMHg1NDBiLCAweDUzZjMsIDB4NWI4NywgMHg3MGNmLAorICAgIDB4N2ZiZCwg MHg4ZmMyLCAweDk2ZTgsIDB4NTM2ZiwgMHg5ZDVjLCAweDdhYmEsIDB4NGUxMSwgMHg3ODkzLAor ICAgIDB4ODFmYywgMHg2ZTI2LCAweDU2MTgsIDB4NTUwNCwgMHg2YjFkLCAweDg1MWEsIDB4OWMz YiwgMHg1OWU1LAorICAgIDB4NTNhOSwgMHg2ZDY2LCAweDc0ZGMsIDB4OTU4ZiwgMHg1NjQyLCAw eDRlOTEsIDB4OTA0YiwgMHg5NmYyLAorICAgIDB4ODM0ZiwgMHg5OTBjLCAweDUzZTEsIDB4NTVi NiwgMHg1YjMwLCAweDVmNzEsIDB4NjYyMCwgMHg2NmYzLAorICAgIDB4NjgwNCwgMHg2YzM4LCAw eDZjZjMsIDB4NmQyOSwgMHg3NDViLCAweDc2YzgsIDB4N2E0ZSwgMHg5ODM0LAorICAgIDB4ODJm MSwgMHg4ODViLCAweDhhNjAsIDB4OTJlZCwgMHg2ZGIyLCAweDc1YWIsIDB4NzZjYSwgMHg5OWM1 LAorICAgIDB4NjBhNiwgMHg4YjAxLCAweDhkOGEsIDB4OTViMiwgMHg2OThlLCAweDUzYWQsIDB4 NTE4NiwgMHhmZmZkLAorICAgIDB4NTcxMiwgMHg1ODMwLCAweDU5NDQsIDB4NWJiNCwgMHg1ZWY2 LCAweDYwMjgsIDB4NjNhOSwgMHg2M2Y0LAorICAgIDB4NmNiZiwgMHg2ZjE0LCAweDcwOGUsIDB4 NzExNCwgMHg3MTU5LCAweDcxZDUsIDB4NzMzZiwgMHg3ZTAxLAorICAgIDB4ODI3NiwgMHg4MmQx LCAweDg1OTcsIDB4OTA2MCwgMHg5MjViLCAweDlkMWIsIDB4NTg2OSwgMHg2NWJjLAorICAgIDB4 NmM1YSwgMHg3NTI1LCAweDUxZjksIDB4NTkyZSwgMHg1OTY1LCAweDVmODAsIDB4NWZkYywgMHg2 MmJjLAorICAgIDB4NjVmYSwgMHg2YTJhLCAweDZiMjcsIDB4NmJiNCwgMHg3MzhiLCAweDdmYzEs IDB4ODk1NiwgMHg5ZDJjLAorICAgIDB4OWQwZSwgMHg5ZWM0LCAweDVjYTEsIDB4NmM5NiwgMHg4 MzdiLCAweDUxMDQsIDB4NWM0YiwgMHg2MWI2LAorICAgIDB4ODFjNiwgMHg2ODc2LCAweDcyNjEs IDB4NGU1OSwgMHg0ZmZhLCAweDUzNzgsIDB4NjA2OSwgMHg2ZTI5LAorICAgIDB4N2E0ZiwgMHg5 N2YzLCAweDRlMGIsIDB4NTMxNiwgMHg0ZWVlLCAweDRmNTUsIDB4NGYzZCwgMHg0ZmExLAorICAg IDB4NGY3MywgMHg1MmEwLCAweDUzZWYsIDB4NTYwOSwgMHg1OTBmLCAweDVhYzEsIDB4NWJiNiwg MHg1YmUxLAorICAgIDB4NzlkMSwgMHg2Njg3LCAweDY3OWMsIDB4NjdiNiwgMHg2YjRjLCAweDZj YjMsIDB4NzA2YiwgMHg3M2MyLAorICAgIDB4Nzk4ZCwgMHg3OWJlLCAweDdhM2MsIDB4N2I4Nywg MHg4MmIxLCAweDgyZGIsIDB4ODMwNCwgMHg4Mzc3LAorICAgIDB4ODNlZiwgMHg4M2QzLCAweDg3 NjYsIDB4OGFiMiwgMHg1NjI5LCAweDhjYTgsIDB4OGZlNiwgMHg5MDRlLAorICAgIDB4OTcxZSwg MHg4NjhhLCAweDRmYzQsIDB4NWNlOCwgMHg2MjExLCAweDcyNTksIDB4NzUzYiwgMHg4MWU1LAor ICAgIDB4ODJiZCwgMHg4NmZlLCAweDhjYzAsIDB4OTZjNSwgMHg5OTEzLCAweDk5ZDUsIDB4NGVj YiwgMHg0ZjFhLAorICAgIDB4ODllMywgMHg1NmRlLCAweDU4NGEsIDB4NThjYSwgMHg1ZWZiLCAw eDVmZWIsIDB4NjAyYSwgMHg2MDk0LAorICAgIDB4NjA2MiwgMHg2MWQwLCAweDYyMTIsIDB4NjJk MCwgMHg2NTM5LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OWI0MSwgMHg2NjY2LCAweDY4YjAsIDB4NmQ3NywgMHg3 MDcwLCAweDc1NGMsIDB4NzY4NiwgMHg3ZDc1LAorICAgIDB4ODJhNSwgMHg4N2Y5LCAweDk1OGIs IDB4OTY4ZSwgMHg4YzlkLCAweDUxZjEsIDB4NTJiZSwgMHg1OTE2LAorICAgIDB4NTRiMywgMHg1 YmIzLCAweDVkMTYsIDB4NjE2OCwgMHg2OTgyLCAweDZkYWYsIDB4Nzg4ZCwgMHg4NGNiLAorICAg IDB4ODg1NywgMHg4YTcyLCAweDkzYTcsIDB4OWFiOCwgMHg2ZDZjLCAweDk5YTgsIDB4ODZkOSwg MHg1N2EzLAorICAgIDB4NjdmZiwgMHg4NmNlLCAweDkyMGUsIDB4NTI4MywgMHg1Njg3LCAweDU0 MDQsIDB4NWVkMywgMHg2MmUxLAorICAgIDB4NjRiOSwgMHg2ODNjLCAweDY4MzgsIDB4NmJiYiwg MHg3MzcyLCAweDc4YmEsIDB4N2E2YiwgMHg4OTlhLAorICAgIDB4ODlkMiwgMHg4ZDZiLCAweDhm MDMsIDB4OTBlZCwgMHg5NWEzLCAweDk2OTQsIDB4OTc2OSwgMHg1YjY2LAorICAgIDB4NWNiMywg MHg2OTdkLCAweDk4NGQsIDB4OTg0ZSwgMHg2MzliLCAweDdiMjAsIDB4NmEyYiwgMHhmZmZkLAor ICAgIDB4NmE3ZiwgMHg2OGI2LCAweDljMGQsIDB4NmY1ZiwgMHg1MjcyLCAweDU1OWQsIDB4NjA3 MCwgMHg2MmVjLAorICAgIDB4NmQzYiwgMHg2ZTA3LCAweDZlZDEsIDB4ODQ1YiwgMHg4OTEwLCAw eDhmNDQsIDB4NGUxNCwgMHg5YzM5LAorICAgIDB4NTNmNiwgMHg2OTFiLCAweDZhM2EsIDB4OTc4 NCwgMHg2ODJhLCAweDUxNWMsIDB4N2FjMywgMHg4NGIyLAorICAgIDB4OTFkYywgMHg5MzhjLCAw eDU2NWIsIDB4OWQyOCwgMHg2ODIyLCAweDgzMDUsIDB4ODQzMSwgMHg3Y2E1LAorICAgIDB4NTIw OCwgMHg4MmM1LCAweDc0ZTYsIDB4NGU3ZSwgMHg0ZjgzLCAweDUxYTAsIDB4NWJkMiwgMHg1MjBh LAorICAgIDB4NTJkOCwgMHg1MmU3LCAweDVkZmIsIDB4NTU5YSwgMHg1ODJhLCAweDU5ZTYsIDB4 NWI4YywgMHg1Yjk4LAorICAgIDB4NWJkYiwgMHg1ZTcyLCAweDVlNzksIDB4NjBhMywgMHg2MTFm LCAweDYxNjMsIDB4NjFiZSwgMHg2M2RiLAorICAgIDB4NjU2MiwgMHg2N2QxLCAweDY4NTMsIDB4 NjhmYSwgMHg2YjNlLCAweDZiNTMsIDB4NmM1NywgMHg2ZjIyLAorICAgIDB4NmY5NywgMHg2ZjQ1 LCAweDc0YjAsIDB4NzUxOCwgMHg3NmUzLCAweDc3MGIsIDB4N2FmZiwgMHg3YmExLAorICAgIDB4 N2MyMSwgMHg3ZGU5LCAweDdmMzYsIDB4N2ZmMCwgMHg4MDlkLCAweDgyNjYsIDB4ODM5ZSwgMHg4 OWIzLAorICAgIDB4OGFjYywgMHg4Y2FiLCAweDkwODQsIDB4OTQ1MSwgMHg5NTkzLCAweDk1OTEs IDB4OTVhMiwgMHg5NjY1LAorICAgIDB4OTdkMywgMHg5OTI4LCAweDgyMTgsIDB4NGUzOCwgMHg1 NDJiLCAweDVjYjgsIDB4NWRjYywgMHg3M2E5LAorICAgIDB4NzY0YywgMHg3NzNjLCAweDVjYTks IDB4N2ZlYiwgMHg4ZDBiLCAweDk2YzEsIDB4OTgxMSwgMHg5ODU0LAorICAgIDB4OTg1OCwgMHg0 ZjAxLCAweDRmMGUsIDB4NTM3MSwgMHg1NTljLCAweDU2NjgsIDB4NTdmYSwgMHg1OTQ3LAorICAg IDB4NWIwOSwgMHg1YmM0LCAweDVjOTAsIDB4NWUwYywgMHg1ZTdlLCAweDVmY2MsIDB4NjNlZSwg MHg2NzNhLAorICAgIDB4NjVkNywgMHg2NWUyLCAweDY3MWYsIDB4NjhjYiwgMHg2OGM0LCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAorICAgIDB4NmE1ZiwgMHg1ZTMwLCAweDZiYzUsIDB4NmMxNywgMHg2YzdkLCAweDc1N2YsIDB4 Nzk0OCwgMHg1YjYzLAorICAgIDB4N2EwMCwgMHg3ZDAwLCAweDVmYmQsIDB4ODk4ZiwgMHg4YTE4 LCAweDhjYjQsIDB4OGQ3NywgMHg4ZWNjLAorICAgIDB4OGYxZCwgMHg5OGUyLCAweDlhMGUsIDB4 OWIzYywgMHg0ZTgwLCAweDUwN2QsIDB4NTEwMCwgMHg1OTkzLAorICAgIDB4NWI5YywgMHg2MjJm LCAweDYyODAsIDB4NjRlYywgMHg2YjNhLCAweDcyYTAsIDB4NzU5MSwgMHg3OTQ3LAorICAgIDB4 N2ZhOSwgMHg4N2ZiLCAweDhhYmMsIDB4OGI3MCwgMHg2M2FjLCAweDgzY2EsIDB4OTdhMCwgMHg1 NDA5LAorICAgIDB4NTQwMywgMHg1NWFiLCAweDY4NTQsIDB4NmE1OCwgMHg4YTcwLCAweDc4Mjcs IDB4Njc3NSwgMHg5ZWNkLAorICAgIDB4NTM3NCwgMHg1YmEyLCAweDgxMWEsIDB4ODY1MCwgMHg5 MDA2LCAweDRlMTgsIDB4NGU0NSwgMHg0ZWM3LAorICAgIDB4NGYxMSwgMHg1M2NhLCAweDU0Mzgs IDB4NWJhZSwgMHg1ZjEzLCAweDYwMjUsIDB4NjU1MSwgMHhmZmZkLAorICAgIDB4NjczZCwgMHg2 YzQyLCAweDZjNzIsIDB4NmNlMywgMHg3MDc4LCAweDc0MDMsIDB4N2E3NiwgMHg3YWFlLAorICAg IDB4N2IwOCwgMHg3ZDFhLCAweDdjZmUsIDB4N2Q2NiwgMHg2NWU3LCAweDcyNWIsIDB4NTNiYiwg MHg1YzQ1LAorICAgIDB4NWRlOCwgMHg2MmQyLCAweDYyZTAsIDB4NjMxOSwgMHg2ZTIwLCAweDg2 NWEsIDB4OGEzMSwgMHg4ZGRkLAorICAgIDB4OTJmOCwgMHg2ZjAxLCAweDc5YTYsIDB4OWI1YSwg MHg0ZWE4LCAweDRlYWIsIDB4NGVhYywgMHg0ZjliLAorICAgIDB4NGZhMCwgMHg1MGQxLCAweDUx NDcsIDB4N2FmNiwgMHg1MTcxLCAweDUxZjYsIDB4NTM1NCwgMHg1MzIxLAorICAgIDB4NTM3Ziwg MHg1M2ViLCAweDU1YWMsIDB4NTg4MywgMHg1Y2UxLCAweDVmMzcsIDB4NWY0YSwgMHg2MDJmLAor ICAgIDB4NjA1MCwgMHg2MDZkLCAweDYzMWYsIDB4NjU1OSwgMHg2YTRiLCAweDZjYzEsIDB4NzJj MiwgMHg3MmVkLAorICAgIDB4NzdlZiwgMHg4MGY4LCAweDgxMDUsIDB4ODIwOCwgMHg4NTRlLCAw eDkwZjcsIDB4OTNlMSwgMHg5N2ZmLAorICAgIDB4OTk1NywgMHg5YTVhLCAweDRlZjAsIDB4NTFk ZCwgMHg1YzJkLCAweDY2ODEsIDB4Njk2ZCwgMHg1YzQwLAorICAgIDB4NjZmMiwgMHg2OTc1LCAw eDczODksIDB4Njg1MCwgMHg3YzgxLCAweDUwYzUsIDB4NTJlNCwgMHg1NzQ3LAorICAgIDB4NWRm ZSwgMHg5MzI2LCAweDY1YTQsIDB4NmIyMywgMHg2YjNkLCAweDc0MzQsIDB4Nzk4MSwgMHg3OWJk LAorICAgIDB4N2I0YiwgMHg3ZGNhLCAweDgyYjksIDB4ODNjYywgMHg4ODdmLCAweDg5NWYsIDB4 OGIzOSwgMHg4ZmQxLAorICAgIDB4OTFkMSwgMHg1NDFmLCAweDkyODAsIDB4NGU1ZCwgMHg1MDM2 LCAweDUzZTUsIDB4NTMzYSwgMHg3MmQ3LAorICAgIDB4NzM5NiwgMHg3N2U5LCAweDgyZTYsIDB4 OGVhZiwgMHg5OWM2LCAweDk5YzgsIDB4OTlkMiwgMHg1MTc3LAorICAgIDB4NjExYSwgMHg4NjVl LCAweDU1YjAsIDB4N2E3YSwgMHg1MDc2LCAweDViZDMsIDB4OTA0NywgMHg5Njg1LAorICAgIDB4 NGUzMiwgMHg2YWRiLCAweDkxZTcsIDB4NWM1MSwgMHg1YzQ4LCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4NjM5OCwg MHg3YTlmLCAweDZjOTMsIDB4OTc3NCwgMHg4ZjYxLCAweDdhYWEsIDB4NzE4YSwgMHg5Njg4LAor ICAgIDB4N2M4MiwgMHg2ODE3LCAweDdlNzAsIDB4Njg1MSwgMHg5MzZjLCAweDUyZjIsIDB4NTQx YiwgMHg4NWFiLAorICAgIDB4OGExMywgMHg3ZmE0LCAweDhlY2QsIDB4OTBlMSwgMHg1MzY2LCAw eDg4ODgsIDB4Nzk0MSwgMHg0ZmMyLAorICAgIDB4NTBiZSwgMHg1MjExLCAweDUxNDQsIDB4NTU1 MywgMHg1NzJkLCAweDczZWEsIDB4NTc4YiwgMHg1OTUxLAorICAgIDB4NWY2MiwgMHg1Zjg0LCAw eDYwNzUsIDB4NjE3NiwgMHg2MTY3LCAweDYxYTksIDB4NjNiMiwgMHg2NDNhLAorICAgIDB4NjU2 YywgMHg2NjZmLCAweDY4NDIsIDB4NmUxMywgMHg3NTY2LCAweDdhM2QsIDB4N2NmYiwgMHg3ZDRj LAorICAgIDB4N2Q5OSwgMHg3ZTRiLCAweDdmNmIsIDB4ODMwZSwgMHg4MzRhLCAweDg2Y2QsIDB4 OGEwOCwgMHg4YTYzLAorICAgIDB4OGI2NiwgMHg4ZWZkLCAweDk4MWEsIDB4OWQ4ZiwgMHg4MmI4 LCAweDhmY2UsIDB4OWJlOCwgMHhmZmZkLAorICAgIDB4NTI4NywgMHg2MjFmLCAweDY0ODMsIDB4 NmZjMCwgMHg5Njk5LCAweDY4NDEsIDB4NTA5MSwgMHg2YjIwLAorICAgIDB4NmM3YSwgMHg2ZjU0 LCAweDdhNzQsIDB4N2Q1MCwgMHg4ODQwLCAweDhhMjMsIDB4NjcwOCwgMHg0ZWY2LAorICAgIDB4 NTAzOSwgMHg1MDI2LCAweDUwNjUsIDB4NTE3YywgMHg1MjM4LCAweDUyNjMsIDB4NTVhNywgMHg1 NzBmLAorICAgIDB4NTgwNSwgMHg1YWNjLCAweDVlZmEsIDB4NjFiMiwgMHg2MWY4LCAweDYyZjMs IDB4NjM3MiwgMHg2OTFjLAorICAgIDB4NmEyOSwgMHg3MjdkLCAweDcyYWMsIDB4NzMyZSwgMHg3 ODE0LCAweDc4NmYsIDB4N2Q3OSwgMHg3NzBjLAorICAgIDB4ODBhOSwgMHg4OThiLCAweDhiMTks IDB4OGNlMiwgMHg4ZWQyLCAweDkwNjMsIDB4OTM3NSwgMHg5NjdhLAorICAgIDB4OTg1NSwgMHg5 YTEzLCAweDllNzgsIDB4NTE0MywgMHg1MzlmLCAweDUzYjMsIDB4NWU3YiwgMHg1ZjI2LAorICAg IDB4NmUxYiwgMHg2ZTkwLCAweDczODQsIDB4NzNmZSwgMHg3ZDQzLCAweDgyMzcsIDB4OGEwMCwg MHg4YWZhLAorICAgIDB4OTY1MCwgMHg0ZTRlLCAweDUwMGIsIDB4NTNlNCwgMHg1NDdjLCAweDU2 ZmEsIDB4NTlkMSwgMHg1YjY0LAorICAgIDB4NWRmMSwgMHg1ZWFiLCAweDVmMjcsIDB4NjIzOCwg MHg2NTQ1LCAweDY3YWYsIDB4NmU1NiwgMHg3MmQwLAorICAgIDB4N2NjYSwgMHg4OGI0LCAweDgw YTEsIDB4ODBlMSwgMHg4M2YwLCAweDg2NGUsIDB4OGE4NywgMHg4ZGU4LAorICAgIDB4OTIzNywg MHg5NmM3LCAweDk4NjcsIDB4OWYxMywgMHg0ZTk0LCAweDRlOTIsIDB4NGYwZCwgMHg1MzQ4LAor ICAgIDB4NTQ0OSwgMHg1NDNlLCAweDVhMmYsIDB4NWY4YywgMHg1ZmExLCAweDYwOWYsIDB4Njhh NywgMHg2YThlLAorICAgIDB4NzQ1YSwgMHg3ODgxLCAweDhhOWUsIDB4OGFhNCwgMHg4Yjc3LCAw eDkxOTAsIDB4NGU1ZSwgMHg5YmM5LAorICAgIDB4NGVhNCwgMHg0ZjdjLCAweDRmYWYsIDB4NTAx OSwgMHg1MDE2LCAweDUxNDksIDB4NTE2YywgMHg1MjlmLAorICAgIDB4NTJiOSwgMHg1MmZlLCAw eDUzOWEsIDB4NTNlMywgMHg1NDExLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4NTQwZSwgMHg1NTg5LCAweDU3NTEs IDB4NTdhMiwgMHg1OTdkLCAweDViNTQsIDB4NWI1ZCwgMHg1YjhmLAorICAgIDB4NWRlNSwgMHg1 ZGU3LCAweDVkZjcsIDB4NWU3OCwgMHg1ZTgzLCAweDVlOWEsIDB4NWViNywgMHg1ZjE4LAorICAg IDB4NjA1MiwgMHg2MTRjLCAweDYyOTcsIDB4NjJkOCwgMHg2M2E3LCAweDY1M2IsIDB4NjYwMiwg MHg2NjQzLAorICAgIDB4NjZmNCwgMHg2NzZkLCAweDY4MjEsIDB4Njg5NywgMHg2OWNiLCAweDZj NWYsIDB4NmQyYSwgMHg2ZDY5LAorICAgIDB4NmUyZiwgMHg2ZTlkLCAweDc1MzIsIDB4NzY4Nywg MHg3ODZjLCAweDdhM2YsIDB4N2NlMCwgMHg3ZDA1LAorICAgIDB4N2QxOCwgMHg3ZDVlLCAweDdk YjEsIDB4ODAxNSwgMHg4MDAzLCAweDgwYWYsIDB4ODBiMSwgMHg4MTU0LAorICAgIDB4ODE4Ziwg MHg4MjJhLCAweDgzNTIsIDB4ODg0YywgMHg4ODYxLCAweDhiMWIsIDB4OGNhMiwgMHg4Y2ZjLAor ICAgIDB4OTBjYSwgMHg5MTc1LCAweDkyNzEsIDB4NzgzZiwgMHg5MmZjLCAweDk1YTQsIDB4OTY0 ZCwgMHhmZmZkLAorICAgIDB4OTgwNSwgMHg5OTk5LCAweDlhZDgsIDB4OWQzYiwgMHg1MjViLCAw eDUyYWIsIDB4NTNmNywgMHg1NDA4LAorICAgIDB4NThkNSwgMHg2MmY3LCAweDZmZTAsIDB4OGM2 YSwgMHg4ZjVmLCAweDllYjksIDB4NTE0YiwgMHg1MjNiLAorICAgIDB4NTQ0YSwgMHg1NmZkLCAw eDdhNDAsIDB4OTE3NywgMHg5ZDYwLCAweDllZDIsIDB4NzM0NCwgMHg2ZjA5LAorICAgIDB4ODE3 MCwgMHg3NTExLCAweDVmZmQsIDB4NjBkYSwgMHg5YWE4LCAweDcyZGIsIDB4OGZiYywgMHg2YjY0 LAorICAgIDB4OTgwMywgMHg0ZWNhLCAweDU2ZjAsIDB4NTc2NCwgMHg1OGJlLCAweDVhNWEsIDB4 NjA2OCwgMHg2MWM3LAorICAgIDB4NjYwZiwgMHg2NjA2LCAweDY4MzksIDB4NjhiMSwgMHg2ZGY3 LCAweDc1ZDUsIDB4N2QzYSwgMHg4MjZlLAorICAgIDB4OWI0MiwgMHg0ZTliLCAweDRmNTAsIDB4 NTNjOSwgMHg1NTA2LCAweDVkNmYsIDB4NWRlNiwgMHg1ZGVlLAorICAgIDB4NjdmYiwgMHg2Yzk5 LCAweDc0NzMsIDB4NzgwMiwgMHg4YTUwLCAweDkzOTYsIDB4ODhkZiwgMHg1NzUwLAorICAgIDB4 NWVhNywgMHg2MzJiLCAweDUwYjUsIDB4NTBhYywgMHg1MThkLCAweDY3MDAsIDB4NTRjOSwgMHg1 ODVlLAorICAgIDB4NTliYiwgMHg1YmIwLCAweDVmNjksIDB4NjI0ZCwgMHg2M2ExLCAweDY4M2Qs IDB4NmI3MywgMHg2ZTA4LAorICAgIDB4NzA3ZCwgMHg5MWM3LCAweDcyODAsIDB4NzgxNSwgMHg3 ODI2LCAweDc5NmQsIDB4NjU4ZSwgMHg3ZDMwLAorICAgIDB4ODNkYywgMHg4OGMxLCAweDhmMDks IDB4OTY5YiwgMHg1MjY0LCAweDU3MjgsIDB4Njc1MCwgMHg3ZjZhLAorICAgIDB4OGNhMSwgMHg1 MWI0LCAweDU3NDIsIDB4OTYyYSwgMHg1ODNhLCAweDY5OGEsIDB4ODBiNCwgMHg1NGIyLAorICAg IDB4NWQwZSwgMHg1N2ZjLCAweDc4OTUsIDB4OWRmYSwgMHg0ZjVjLCAweDUyNGEsIDB4NTQ4Yiwg MHg2NDNlLAorICAgIDB4NjYyOCwgMHg2NzE0LCAweDY3ZjUsIDB4N2E4NCwgMHg3YjU2LCAweDdk MjIsIDB4OTMyZiwgMHg2ODVjLAorICAgIDB4OWJhZCwgMHg3YjM5LCAweDUzMTksIDB4NTE4YSwg MHg1MjM3LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4NWJkZiwgMHg2MmY2LCAweDY0YWUsIDB4NjRlNiwgMHg2NzJk LCAweDZiYmEsIDB4ODVhOSwgMHg5NmQxLAorICAgIDB4NzY5MCwgMHg5YmQ2LCAweDYzNGMsIDB4 OTMwNiwgMHg5YmFiLCAweDc2YmYsIDB4NjY1MiwgMHg0ZTA5LAorICAgIDB4NTA5OCwgMHg1M2My LCAweDVjNzEsIDB4NjBlOCwgMHg2NDkyLCAweDY1NjMsIDB4Njg1ZiwgMHg3MWU2LAorICAgIDB4 NzNjYSwgMHg3NTIzLCAweDdiOTcsIDB4N2U4MiwgMHg4Njk1LCAweDhiODMsIDB4OGNkYiwgMHg5 MTc4LAorICAgIDB4OTkxMCwgMHg2NWFjLCAweDY2YWIsIDB4NmI4YiwgMHg0ZWQ1LCAweDRlZDQs IDB4NGYzYSwgMHg0ZjdmLAorICAgIDB4NTIzYSwgMHg1M2Y4LCAweDUzZjIsIDB4NTVlMywgMHg1 NmRiLCAweDU4ZWIsIDB4NTljYiwgMHg1OWM5LAorICAgIDB4NTlmZiwgMHg1YjUwLCAweDVjNGQs IDB4NWUwMiwgMHg1ZTJiLCAweDVmZDcsIDB4NjAxZCwgMHg2MzA3LAorICAgIDB4NjUyZiwgMHg1 YjVjLCAweDY1YWYsIDB4NjViZCwgMHg2NWU4LCAweDY3OWQsIDB4NmI2MiwgMHhmZmZkLAorICAg IDB4NmI3YiwgMHg2YzBmLCAweDczNDUsIDB4Nzk0OSwgMHg3OWMxLCAweDdjZjgsIDB4N2QxOSwg MHg3ZDJiLAorICAgIDB4ODBhMiwgMHg4MTAyLCAweDgxZjMsIDB4ODk5NiwgMHg4YTVlLCAweDhh NjksIDB4OGE2NiwgMHg4YThjLAorICAgIDB4OGFlZSwgMHg4Y2M3LCAweDhjZGMsIDB4OTZjYywg MHg5OGZjLCAweDZiNmYsIDB4NGU4YiwgMHg0ZjNjLAorICAgIDB4NGY4ZCwgMHg1MTUwLCAweDVi NTcsIDB4NWJmYSwgMHg2MTQ4LCAweDYzMDEsIDB4NjY0MiwgMHg2YjIxLAorICAgIDB4NmVjYiwg MHg2Y2JiLCAweDcyM2UsIDB4NzRiZCwgMHg3NWQ0LCAweDc4YzEsIDB4NzkzYSwgMHg4MDBjLAor ICAgIDB4ODAzMywgMHg4MWVhLCAweDg0OTQsIDB4OGY5ZSwgMHg2YzUwLCAweDllN2YsIDB4NWYw ZiwgMHg4YjU4LAorICAgIDB4OWQyYiwgMHg3YWZhLCAweDhlZjgsIDB4NWI4ZCwgMHg5NmViLCAw eDRlMDMsIDB4NTNmMSwgMHg1N2Y3LAorICAgIDB4NTkzMSwgMHg1YWM5LCAweDViYTQsIDB4NjA4 OSwgMHg2ZTdmLCAweDZmMDYsIDB4NzViZSwgMHg4Y2VhLAorICAgIDB4NWI5ZiwgMHg4NTAwLCAw eDdiZTAsIDB4NTA3MiwgMHg2N2Y0LCAweDgyOWQsIDB4NWM2MSwgMHg4NTRhLAorICAgIDB4N2Ux ZSwgMHg4MjBlLCAweDUxOTksIDB4NWMwNCwgMHg2MzY4LCAweDhkNjYsIDB4NjU5YywgMHg3MTZl LAorICAgIDB4NzkzZSwgMHg3ZDE3LCAweDgwMDUsIDB4OGIxZCwgMHg4ZWNhLCAweDkwNmUsIDB4 ODZjNywgMHg5MGFhLAorICAgIDB4NTAxZiwgMHg1MmZhLCAweDVjM2EsIDB4Njc1MywgMHg3MDdj LCAweDcyMzUsIDB4OTE0YywgMHg5MWM4LAorICAgIDB4OTMyYiwgMHg4MmU1LCAweDViYzIsIDB4 NWYzMSwgMHg2MGY5LCAweDRlM2IsIDB4NTNkNiwgMHg1Yjg4LAorICAgIDB4NjI0YiwgMHg2NzMx LCAweDZiOGEsIDB4NzJlOSwgMHg3M2UwLCAweDdhMmUsIDB4ODE2YiwgMHg4ZGEzLAorICAgIDB4 OTE1MiwgMHg5OTk2LCAweDUxMTIsIDB4NTNkNywgMHg1NDZhLCAweDViZmYsIDB4NjM4OCwgMHg2 YTM5LAorICAgIDB4N2RhYywgMHg5NzAwLCAweDU2ZGEsIDB4NTNjZSwgMHg1NDY4LCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4NWI5NywgMHg1YzMxLCAweDVkZGUsIDB4NGZlZSwgMHg2MTAxLCAweDYyZmUsIDB4NmQz MiwgMHg3OWMwLAorICAgIDB4NzljYiwgMHg3ZDQyLCAweDdlNGQsIDB4N2ZkMiwgMHg4MWVkLCAw eDgyMWYsIDB4ODQ5MCwgMHg4ODQ2LAorICAgIDB4ODk3MiwgMHg4YjkwLCAweDhlNzQsIDB4OGYy ZiwgMHg5MDMxLCAweDkxNGIsIDB4OTE2YywgMHg5NmM2LAorICAgIDB4OTE5YywgMHg0ZWMwLCAw eDRmNGYsIDB4NTE0NSwgMHg1MzQxLCAweDVmOTMsIDB4NjIwZSwgMHg2N2Q0LAorICAgIDB4NmM0 MSwgMHg2ZTBiLCAweDczNjMsIDB4N2UyNiwgMHg5MWNkLCAweDkyODMsIDB4NTNkNCwgMHg1OTE5 LAorICAgIDB4NWJiZiwgMHg2ZGQxLCAweDc5NWQsIDB4N2UyZSwgMHg3YzliLCAweDU4N2UsIDB4 NzE5ZiwgMHg1MWZhLAorICAgIDB4ODg1MywgMHg4ZmYwLCAweDRmY2EsIDB4NWNmYiwgMHg2NjI1 LCAweDc3YWMsIDB4N2FlMywgMHg4MjFjLAorICAgIDB4OTlmZiwgMHg1MWM2LCAweDVmYWEsIDB4 NjVlYywgMHg2OTZmLCAweDZiODksIDB4NmRmMywgMHhmZmZkLAorICAgIDB4NmU5NiwgMHg2ZjY0 LCAweDc2ZmUsIDB4N2QxNCwgMHg1ZGUxLCAweDkwNzUsIDB4OTE4NywgMHg5ODA2LAorICAgIDB4 NTFlNiwgMHg1MjFkLCAweDYyNDAsIDB4NjY5MSwgMHg2NmQ5LCAweDZlMWEsIDB4NWViNiwgMHg3 ZGQyLAorICAgIDB4N2Y3MiwgMHg2NmY4LCAweDg1YWYsIDB4ODVmNywgMHg4YWY4LCAweDUyYTks IDB4NTNkOSwgMHg1OTczLAorICAgIDB4NWU4ZiwgMHg1ZjkwLCAweDYwNTUsIDB4OTJlNCwgMHg5 NjY0LCAweDUwYjcsIDB4NTExZiwgMHg1MmRkLAorICAgIDB4NTMyMCwgMHg1MzQ3LCAweDUzZWMs IDB4NTRlOCwgMHg1NTQ2LCAweDU1MzEsIDB4NTYxNywgMHg1OTY4LAorICAgIDB4NTliZSwgMHg1 YTNjLCAweDViYjUsIDB4NWMwNiwgMHg1YzBmLCAweDVjMTEsIDB4NWMxYSwgMHg1ZTg0LAorICAg IDB4NWU4YSwgMHg1ZWUwLCAweDVmNzAsIDB4NjI3ZiwgMHg2Mjg0LCAweDYyZGIsIDB4NjM4Yywg MHg2Mzc3LAorICAgIDB4NjYwNywgMHg2NjBjLCAweDY2MmQsIDB4NjY3NiwgMHg2NzdlLCAweDY4 YTIsIDB4NmExZiwgMHg2YTM1LAorICAgIDB4NmNiYywgMHg2ZDg4LCAweDZlMDksIDB4NmU1OCwg MHg3MTNjLCAweDcxMjYsIDB4NzE2NywgMHg3NWM3LAorICAgIDB4NzcwMSwgMHg3ODVkLCAweDc5 MDEsIDB4Nzk2NSwgMHg3OWYwLCAweDdhZTAsIDB4N2IxMSwgMHg3Y2E3LAorICAgIDB4N2QzOSwg MHg4MDk2LCAweDgzZDYsIDB4ODQ4YiwgMHg4NTQ5LCAweDg4NWQsIDB4ODhmMywgMHg4YTFmLAor ICAgIDB4OGEzYywgMHg4YTU0LCAweDhhNzMsIDB4OGM2MSwgMHg4Y2RlLCAweDkxYTQsIDB4OTI2 NiwgMHg5MzdlLAorICAgIDB4OTQxOCwgMHg5NjljLCAweDk3OTgsIDB4NGUwYSwgMHg0ZTA4LCAw eDRlMWUsIDB4NGU1NywgMHg1MTk3LAorICAgIDB4NTI3MCwgMHg1N2NlLCAweDU4MzQsIDB4NThj YywgMHg1YjIyLCAweDVlMzgsIDB4NjBjNSwgMHg2NGZlLAorICAgIDB4Njc2MSwgMHg2NzU2LCAw eDZkNDQsIDB4NzJiNiwgMHg3NTczLCAweDdhNjMsIDB4ODRiOCwgMHg4YjcyLAorICAgIDB4OTFi OCwgMHg5MzIwLCAweDU2MzEsIDB4NTdmNCwgMHg5OGZlLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4NjJlZCwgMHg2 OTBkLCAweDZiOTYsIDB4NzFlZCwgMHg3ZTU0LCAweDgwNzcsIDB4ODI3MiwgMHg4OWU2LAorICAg IDB4OThkZiwgMHg4NzU1LCAweDhmYjEsIDB4NWMzYiwgMHg0ZjM4LCAweDRmZTEsIDB4NGZiNSwg MHg1NTA3LAorICAgIDB4NWEyMCwgMHg1YmRkLCAweDViZTksIDB4NWZjMywgMHg2MTRlLCAweDYz MmYsIDB4NjViMCwgMHg2NjRiLAorICAgIDB4NjhlZSwgMHg2OTliLCAweDZkNzgsIDB4NmRmMSwg MHg3NTMzLCAweDc1YjksIDB4NzcxZiwgMHg3OTVlLAorICAgIDB4NzllNiwgMHg3ZDMzLCAweDgx ZTMsIDB4ODJhZiwgMHg4NWFhLCAweDg5YWEsIDB4OGEzYSwgMHg4ZWFiLAorICAgIDB4OGY5Yiwg MHg5MDMyLCAweDkxZGQsIDB4OTcwNywgMHg0ZWJhLCAweDRlYzEsIDB4NTIwMywgMHg1ODc1LAor ICAgIDB4NThlYywgMHg1YzBiLCAweDc1MWEsIDB4NWMzZCwgMHg4MTRlLCAweDhhMGEsIDB4OGZj NSwgMHg5NjYzLAorICAgIDB4OTc2ZCwgMHg3YjI1LCAweDhhY2YsIDB4OTgwOCwgMHg5MTYyLCAw eDU2ZjMsIDB4NTNhOCwgMHhmZmZkLAorICAgIDB4OTAxNywgMHg1NDM5LCAweDU3ODIsIDB4NWUy NSwgMHg2M2E4LCAweDZjMzQsIDB4NzA4YSwgMHg3NzYxLAorICAgIDB4N2M4YiwgMHg3ZmUwLCAw eDg4NzAsIDB4OTA0MiwgMHg5MTU0LCAweDkzMTAsIDB4OTMxOCwgMHg5NjhmLAorICAgIDB4NzQ1 ZSwgMHg5YWM0LCAweDVkMDcsIDB4NWQ2OSwgMHg2NTcwLCAweDY3YTIsIDB4OGRhOCwgMHg5NmRi LAorICAgIDB4NjM2ZSwgMHg2NzQ5LCAweDY5MTksIDB4ODNjNSwgMHg5ODE3LCAweDk2YzAsIDB4 ODhmZSwgMHg2Zjg0LAorICAgIDB4NjQ3YSwgMHg1YmY4LCAweDRlMTYsIDB4NzAyYywgMHg3NTVk LCAweDY2MmYsIDB4NTFjNCwgMHg1MjM2LAorICAgIDB4NTJlMiwgMHg1OWQzLCAweDVmODEsIDB4 NjAyNywgMHg2MjEwLCAweDY1M2YsIDB4NjU3NCwgMHg2NjFmLAorICAgIDB4NjY3NCwgMHg2OGYy LCAweDY4MTYsIDB4NmI2MywgMHg2ZTA1LCAweDcyNzIsIDB4NzUxZiwgMHg3NmRiLAorICAgIDB4 N2NiZSwgMHg4MDU2LCAweDU4ZjAsIDB4ODhmZCwgMHg4OTdmLCAweDhhYTAsIDB4OGE5MywgMHg4 YWNiLAorICAgIDB4OTAxZCwgMHg5MTkyLCAweDk3NTIsIDB4OTc1OSwgMHg2NTg5LCAweDdhMGUs IDB4ODEwNiwgMHg5NmJiLAorICAgIDB4NWUyZCwgMHg2MGRjLCAweDYyMWEsIDB4NjVhNSwgMHg2 NjE0LCAweDY3OTAsIDB4NzdmMywgMHg3YTRkLAorICAgIDB4N2M0ZCwgMHg3ZTNlLCAweDgxMGEs IDB4OGNhYywgMHg4ZDY0LCAweDhkZTEsIDB4OGU1ZiwgMHg3OGE5LAorICAgIDB4NTIwNywgMHg2 MmQ5LCAweDYzYTUsIDB4NjQ0MiwgMHg2Mjk4LCAweDhhMmQsIDB4N2E4MywgMHg3YmMwLAorICAg IDB4OGFhYywgMHg5NmVhLCAweDdkNzYsIDB4ODIwYywgMHg4NzQ5LCAweDRlZDksIDB4NTE0OCwg MHg1MzQzLAorICAgIDB4NTM2MCwgMHg1YmEzLCAweDVjMDIsIDB4NWMxNiwgMHg1ZGRkLCAweDYy MjYsIDB4NjI0NywgMHg2NGIwLAorICAgIDB4NjgxMywgMHg2ODM0LCAweDZjYzksIDB4NmQ0NSwg MHg2ZDE3LCAweDY3ZDMsIDB4NmY1YywgMHg3MTRlLAorICAgIDB4NzE3ZCwgMHg2NWNiLCAweDdh N2YsIDB4N2JhZCwgMHg3ZGRhLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4N2U0YSwgMHg3ZmE4LCAweDgxN2EsIDB4 ODIxYiwgMHg4MjM5LCAweDg1YTYsIDB4OGE2ZSwgMHg4Y2NlLAorICAgIDB4OGRmNSwgMHg5MDc4 LCAweDkwNzcsIDB4OTJhZCwgMHg5MjkxLCAweDk1ODMsIDB4OWJhZSwgMHg1MjRkLAorICAgIDB4 NTU4NCwgMHg2ZjM4LCAweDcxMzYsIDB4NTE2OCwgMHg3OTg1LCAweDdlNTUsIDB4ODFiMywgMHg3 Y2NlLAorICAgIDB4NTY0YywgMHg1ODUxLCAweDVjYTgsIDB4NjNhYSwgMHg2NmZlLCAweDY2ZmQs IDB4Njk1YSwgMHg3MmQ5LAorICAgIDB4NzU4ZiwgMHg3NThlLCAweDc5MGUsIDB4Nzk1NiwgMHg3 OWRmLCAweDdjOTcsIDB4N2QyMCwgMHg3ZDQ0LAorICAgIDB4ODYwNywgMHg4YTM0LCAweDk2M2Is IDB4OTA2MSwgMHg5ZjIwLCAweDUwZTcsIDB4NTI3NSwgMHg1M2NjLAorICAgIDB4NTNlMiwgMHg1 MDA5LCAweDU1YWEsIDB4NThlZSwgMHg1OTRmLCAweDcyM2QsIDB4NWI4YiwgMHg1YzY0LAorICAg IDB4NTMxZCwgMHg2MGUzLCAweDYwZjMsIDB4NjM1YywgMHg2MzgzLCAweDYzM2YsIDB4NjNiYiwg MHhmZmZkLAorICAgIDB4NjRjZCwgMHg2NWU5LCAweDY2ZjksIDB4NWRlMywgMHg2OWNkLCAweDY5 ZmQsIDB4NmYxNSwgMHg3MWU1LAorICAgIDB4NGU4OSwgMHg3NWU5LCAweDc2ZjgsIDB4N2E5Mywg MHg3Y2RmLCAweDdkY2YsIDB4N2Q5YywgMHg4MDYxLAorICAgIDB4ODM0OSwgMHg4MzU4LCAweDg0 NmMsIDB4ODRiYywgMHg4NWZiLCAweDg4YzUsIDB4OGQ3MCwgMHg5MDAxLAorICAgIDB4OTA2ZCwg MHg5Mzk3LCAweDk3MWMsIDB4OWExMiwgMHg1MGNmLCAweDU4OTcsIDB4NjE4ZSwgMHg4MWQzLAor ICAgIDB4ODUzNSwgMHg4ZDA4LCAweDkwMjAsIDB4NGZjMywgMHg1MDc0LCAweDUyNDcsIDB4NTM3 MywgMHg2MDZmLAorICAgIDB4NjM0OSwgMHg2NzVmLCAweDZlMmMsIDB4OGRiMywgMHg5MDFmLCAw eDRmZDcsIDB4NWM1ZSwgMHg4Y2NhLAorICAgIDB4NjVjZiwgMHg3ZDlhLCAweDUzNTIsIDB4ODg5 NiwgMHg1MTc2LCAweDYzYzMsIDB4NWI1OCwgMHg1YjZiLAorICAgIDB4NWMwYSwgMHg2NDBkLCAw eDY3NTEsIDB4OTA1YywgMHg0ZWQ2LCAweDU5MWEsIDB4NTkyYSwgMHg2YzcwLAorICAgIDB4OGE1 MSwgMHg1NTNlLCAweDU4MTUsIDB4NTlhNSwgMHg2MGYwLCAweDYyNTMsIDB4NjdjMSwgMHg4MjM1 LAorICAgIDB4Njk1NSwgMHg5NjQwLCAweDk5YzQsIDB4OWEyOCwgMHg0ZjUzLCAweDU4MDYsIDB4 NWJmZSwgMHg4MDEwLAorICAgIDB4NWNiMSwgMHg1ZTJmLCAweDVmODUsIDB4NjAyMCwgMHg2MTRi LCAweDYyMzQsIDB4NjZmZiwgMHg2Y2YwLAorICAgIDB4NmVkZSwgMHg4MGNlLCAweDgxN2YsIDB4 ODJkNCwgMHg4ODhiLCAweDhjYjgsIDB4OTAwMCwgMHg5MDJlLAorICAgIDB4OTY4YSwgMHg5ZWRi LCAweDliZGIsIDB4NGVlMywgMHg1M2YwLCAweDU5MjcsIDB4N2IyYywgMHg5MThkLAorICAgIDB4 OTg0YywgMHg5ZGY5LCAweDZlZGQsIDB4NzAyNywgMHg1MzUzLCAweDU1NDQsIDB4NWI4NSwgMHg2 MjU4LAorICAgIDB4NjI5ZSwgMHg2MmQzLCAweDZjYTIsIDB4NmZlZiwgMHg3NDIyLCAweDhhMTcs IDB4OTQzOCwgMHg2ZmMxLAorICAgIDB4OGFmZSwgMHg4MzM4LCAweDUxZTcsIDB4ODZmOCwgMHg1 M2VhLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4NTNlOSwgMHg0ZjQ2LCAweDkwNTQsIDB4OGZiMCwgMHg1OTZhLCAw eDgxMzEsIDB4NWRmZCwgMHg3YWVhLAorICAgIDB4OGZiZiwgMHg2OGRhLCAweDhjMzcsIDB4NzJm OCwgMHg5YzQ4LCAweDZhM2QsIDB4OGFiMCwgMHg0ZTM5LAorICAgIDB4NTM1OCwgMHg1NjA2LCAw eDU3NjYsIDB4NjJjNSwgMHg2M2EyLCAweDY1ZTYsIDB4NmI0ZSwgMHg2ZGUxLAorICAgIDB4NmU1 YiwgMHg3MGFkLCAweDc3ZWQsIDB4N2FlZiwgMHg3YmFhLCAweDdkYmIsIDB4ODAzZCwgMHg4MGM2 LAorICAgIDB4ODZjYiwgMHg4YTk1LCAweDkzNWIsIDB4NTZlMywgMHg1OGM3LCAweDVmM2UsIDB4 NjVhZCwgMHg2Njk2LAorICAgIDB4NmE4MCwgMHg2YmI1LCAweDc1MzcsIDB4OGFjNywgMHg1MDI0 LCAweDc3ZTUsIDB4NTczMCwgMHg1ZjFiLAorICAgIDB4NjA2NSwgMHg2NjdhLCAweDZjNjAsIDB4 NzVmNCwgMHg3YTFhLCAweDdmNmUsIDB4ODFmNCwgMHg4NzE4LAorICAgIDB4OTA0NSwgMHg5OWIz LCAweDdiYzksIDB4NzU1YywgMHg3YWY5LCAweDdiNTEsIDB4ODRjNCwgMHhmZmZkLAorICAgIDB4 OTAxMCwgMHg3OWU5LCAweDdhOTIsIDB4ODMzNiwgMHg1YWUxLCAweDc3NDAsIDB4NGUyZCwgMHg0 ZWYyLAorICAgIDB4NWI5OSwgMHg1ZmUwLCAweDYyYmQsIDB4NjYzYywgMHg2N2YxLCAweDZjZTgs IDB4ODY2YiwgMHg4ODc3LAorICAgIDB4OGEzYiwgMHg5MTRlLCAweDkyZjMsIDB4OTlkMCwgMHg2 YTE3LCAweDcwMjYsIDB4NzMyYSwgMHg4MmU3LAorICAgIDB4ODQ1NywgMHg4Y2FmLCAweDRlMDEs IDB4NTE0NiwgMHg1MWNiLCAweDU1OGIsIDB4NWJmNSwgMHg1ZTE2LAorICAgIDB4NWUzMywgMHg1 ZTgxLCAweDVmMTQsIDB4NWYzNSwgMHg1ZjZiLCAweDVmYjQsIDB4NjFmMiwgMHg2MzExLAorICAg IDB4NjZhMiwgMHg2NzFkLCAweDZmNmUsIDB4NzI1MiwgMHg3NTNhLCAweDc3M2EsIDB4ODA3NCwg MHg4MTM5LAorICAgIDB4ODE3OCwgMHg4Nzc2LCAweDhhYmYsIDB4OGFkYywgMHg4ZDg1LCAweDhk ZjMsIDB4OTI5YSwgMHg5NTc3LAorICAgIDB4OTgwMiwgMHg5Y2U1LCAweDUyYzUsIDB4NjM1Nywg MHg3NmY0LCAweDY3MTUsIDB4NmM4OCwgMHg3M2NkLAorICAgIDB4OGNjMywgMHg5M2FlLCAweDk2 NzMsIDB4NmQyNSwgMHg1ODljLCAweDY5MGUsIDB4NjljYywgMHg4ZmZkLAorICAgIDB4OTM5YSwg MHg3NWRiLCAweDkwMWEsIDB4NTg1YSwgMHg2ODAyLCAweDYzYjQsIDB4NjlmYiwgMHg0ZjQzLAor ICAgIDB4NmYyYywgMHg2N2Q4LCAweDhmYmIsIDB4ODUyNiwgMHg3ZGI0LCAweDkzNTQsIDB4Njkz ZiwgMHg2ZjcwLAorICAgIDB4NTc2YSwgMHg1OGY3LCAweDViMmMsIDB4N2QyYywgMHg3MjJhLCAw eDU0MGEsIDB4OTFlMywgMHg5ZGI0LAorICAgIDB4NGVhZCwgMHg0ZjRlLCAweDUwNWMsIDB4NTA3 NSwgMHg1MjQzLCAweDhjOWUsIDB4NTQ0OCwgMHg1ODI0LAorICAgIDB4NWI5YSwgMHg1ZTFkLCAw eDVlOTUsIDB4NWVhZCwgMHg1ZWY3LCAweDVmMWYsIDB4NjA4YywgMHg2MmI1LAorICAgIDB4NjMz YSwgMHg2M2QwLCAweDY4YWYsIDB4NmM0MCwgMHg3ODg3LCAweDc5OGUsIDB4N2EwYiwgMHg3ZGUw LAorICAgIDB4ODI0NywgMHg4YTAyLCAweDhhZTYsIDB4OGU0NCwgMHg5MDEzLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4OTBiOCwgMHg5MTJkLCAweDkxZDgsIDB4OWYwZSwgMHg2Y2U1LCAweDY0NTgsIDB4NjRlMiwg MHg2NTc1LAorICAgIDB4NmVmNCwgMHg3Njg0LCAweDdiMWIsIDB4OTA2OSwgMHg5M2QxLCAweDZl YmEsIDB4NTRmMiwgMHg1ZmI5LAorICAgIDB4NjRhNCwgMHg4ZjRkLCAweDhmZWQsIDB4OTI0NCwg MHg1MTc4LCAweDU4NmIsIDB4NTkyOSwgMHg1YzU1LAorICAgIDB4NWU5NywgMHg2ZGZiLCAweDdl OGYsIDB4NzUxYywgMHg4Y2JjLCAweDhlZTIsIDB4OTg1YiwgMHg3MGI5LAorICAgIDB4NGYxZCwg MHg2YmJmLCAweDZmYjEsIDB4NzUzMCwgMHg5NmZiLCAweDUxNGUsIDB4NTQxMCwgMHg1ODM1LAor ICAgIDB4NTg1NywgMHg1OWFjLCAweDVjNjAsIDB4NWY5MiwgMHg2NTk3LCAweDY3NWMsIDB4NmUy MSwgMHg3NjdiLAorICAgIDB4ODNkZiwgMHg4Y2VkLCAweDkwMTQsIDB4OTBmZCwgMHg5MzRkLCAw eDc4MjUsIDB4NzgzYSwgMHg1MmFhLAorICAgIDB4NWVhNiwgMHg1NzFmLCAweDU5NzQsIDB4NjAx MiwgMHg1MDEyLCAweDUxNWEsIDB4NTFhYywgMHhmZmZkLAorICAgIDB4NTFjZCwgMHg1MjAwLCAw eDU1MTAsIDB4NTg1NCwgMHg1ODU4LCAweDU5NTcsIDB4NWI5NSwgMHg1Y2Y2LAorICAgIDB4NWQ4 YiwgMHg2MGJjLCAweDYyOTUsIDB4NjQyZCwgMHg2NzcxLCAweDY4NDMsIDB4NjhiYywgMHg2OGRm LAorICAgIDB4NzZkNywgMHg2ZGQ4LCAweDZlNmYsIDB4NmQ5YiwgMHg3MDZmLCAweDcxYzgsIDB4 NWY1MywgMHg3NWQ4LAorICAgIDB4Nzk3NywgMHg3YjQ5LCAweDdiNTQsIDB4N2I1MiwgMHg3Y2Q2 LCAweDdkNzEsIDB4NTIzMCwgMHg4NDYzLAorICAgIDB4ODU2OSwgMHg4NWU0LCAweDhhMGUsIDB4 OGIwNCwgMHg4YzQ2LCAweDhlMGYsIDB4OTAwMywgMHg5MDBmLAorICAgIDB4OTQxOSwgMHg5Njc2 LCAweDk4MmQsIDB4OWEzMCwgMHg5NWQ4LCAweDUwY2QsIDB4NTJkNSwgMHg1NDBjLAorICAgIDB4 NTgwMiwgMHg1YzBlLCAweDYxYTcsIDB4NjQ5ZSwgMHg2ZDFlLCAweDc3YjMsIDB4N2FlNSwgMHg4 MGY0LAorICAgIDB4ODQwNCwgMHg5MDUzLCAweDkyODUsIDB4NWNlMCwgMHg5ZDA3LCAweDUzM2Ys IDB4NWY5NywgMHg1ZmIzLAorICAgIDB4NmQ5YywgMHg3Mjc5LCAweDc3NjMsIDB4NzliZiwgMHg3 YmU0LCAweDZiZDIsIDB4NzJlYywgMHg4YWFkLAorICAgIDB4NjgwMywgMHg2YTYxLCAweDUxZjgs IDB4N2E4MSwgMHg2OTM0LCAweDVjNGEsIDB4OWNmNiwgMHg4MmViLAorICAgIDB4NWJjNSwgMHg5 MTQ5LCAweDcwMWUsIDB4NTY3OCwgMHg1YzZmLCAweDYwYzcsIDB4NjU2NiwgMHg2YzhjLAorICAg IDB4OGM1YSwgMHg5MDQxLCAweDk4MTMsIDB4NTQ1MSwgMHg2NmM3LCAweDkyMGQsIDB4NTk0OCwg MHg5MGEzLAorICAgIDB4NTE4NSwgMHg0ZTRkLCAweDUxZWEsIDB4ODU5OSwgMHg4YjBlLCAweDcw NTgsIDB4NjM3YSwgMHg5MzRiLAorICAgIDB4Njk2MiwgMHg5OWI0LCAweDdlMDQsIDB4NzU3Nywg MHg1MzU3LCAweDY5NjAsIDB4OGVkZiwgMHg5NmUzLAorICAgIDB4NmM1ZCwgMHg0ZThjLCAweDVj M2MsIDB4NWYxMCwgMHg4ZmU5LCAweDUzMDIsIDB4OGNkMSwgMHg4MDg5LAorICAgIDB4ODY3OSwg MHg1ZWZmLCAweDY1ZTUsIDB4NGU3MywgMHg1MTY1LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4NTk4MiwgMHg1YzNm LCAweDk3ZWUsIDB4NGVmYiwgMHg1OThhLCAweDVmY2QsIDB4OGE4ZCwgMHg2ZmUxLAorICAgIDB4 NzliMCwgMHg3OTYyLCAweDViZTcsIDB4ODQ3MSwgMHg3MzJiLCAweDcxYjEsIDB4NWU3NCwgMHg1 ZmY1LAorICAgIDB4NjM3YiwgMHg2NDlhLCAweDcxYzMsIDB4N2M5OCwgMHg0ZTQzLCAweDVlZmMs IDB4NGU0YiwgMHg1N2RjLAorICAgIDB4NTZhMiwgMHg2MGE5LCAweDZmYzMsIDB4N2QwZCwgMHg4 MGZkLCAweDgxMzMsIDB4ODFiZiwgMHg4ZmIyLAorICAgIDB4ODk5NywgMHg4NmE0LCAweDVkZjQs IDB4NjI4YSwgMHg2NGFkLCAweDg5ODcsIDB4Njc3NywgMHg2Y2UyLAorICAgIDB4NmQzZSwgMHg3 NDM2LCAweDc4MzQsIDB4NWE0NiwgMHg3Zjc1LCAweDgyYWQsIDB4OTlhYywgMHg0ZmYzLAorICAg IDB4NWVjMywgMHg2MmRkLCAweDYzOTIsIDB4NjU1NywgMHg2NzZmLCAweDc2YzMsIDB4NzI0Yywg MHg4MGNjLAorICAgIDB4ODBiYSwgMHg4ZjI5LCAweDkxNGQsIDB4NTAwZCwgMHg1N2Y5LCAweDVh OTIsIDB4Njg4NSwgMHhmZmZkLAorICAgIDB4Njk3MywgMHg3MTY0LCAweDcyZmQsIDB4OGNiNywg MHg1OGYyLCAweDhjZTAsIDB4OTY2YSwgMHg5MDE5LAorICAgIDB4ODc3ZiwgMHg3OWU0LCAweDc3 ZTcsIDB4ODQyOSwgMHg0ZjJmLCAweDUyNjUsIDB4NTM1YSwgMHg2MmNkLAorICAgIDB4NjdjZiwg MHg2Y2NhLCAweDc2N2QsIDB4N2I5NCwgMHg3Yzk1LCAweDgyMzYsIDB4ODU4NCwgMHg4ZmViLAor ICAgIDB4NjZkZCwgMHg2ZjIwLCAweDcyMDYsIDB4N2UxYiwgMHg4M2FiLCAweDk5YzEsIDB4OWVh NiwgMHg1MWZkLAorICAgIDB4N2JiMSwgMHg3ODcyLCAweDdiYjgsIDB4ODA4NywgMHg3YjQ4LCAw eDZhZTgsIDB4NWU2MSwgMHg4MDhjLAorICAgIDB4NzU1MSwgMHg3NTYwLCAweDUxNmIsIDB4OTI2 MiwgMHg2ZThjLCAweDc2N2EsIDB4OTE5NywgMHg5YWVhLAorICAgIDB4NGYxMCwgMHg3ZjcwLCAw eDYyOWMsIDB4N2I0ZiwgMHg5NWE1LCAweDljZTksIDB4NTY3YSwgMHg1ODU5LAorICAgIDB4ODZl NCwgMHg5NmJjLCAweDRmMzQsIDB4NTIyNCwgMHg1MzRhLCAweDUzY2QsIDB4NTNkYiwgMHg1ZTA2 LAorICAgIDB4NjQyYywgMHg2NTkxLCAweDY3N2YsIDB4NmMzZSwgMHg2YzRlLCAweDcyNDgsIDB4 NzJhZiwgMHg3M2VkLAorICAgIDB4NzU1NCwgMHg3ZTQxLCAweDgyMmMsIDB4ODVlOSwgMHg4Y2E5 LCAweDdiYzQsIDB4OTFjNiwgMHg3MTY5LAorICAgIDB4OTgxMiwgMHg5OGVmLCAweDYzM2QsIDB4 NjY2OSwgMHg3NTZhLCAweDc2ZTQsIDB4NzhkMCwgMHg4NTQzLAorICAgIDB4ODZlZSwgMHg1MzJh LCAweDUzNTEsIDB4NTQyNiwgMHg1OTgzLCAweDVlODcsIDB4NWY3YywgMHg2MGIyLAorICAgIDB4 NjI0OSwgMHg2Mjc5LCAweDYyYWIsIDB4NjU5MCwgMHg2YmQ0LCAweDZjY2MsIDB4NzViMiwgMHg3 NmFlLAorICAgIDB4Nzg5MSwgMHg3OWQ4LCAweDdkY2IsIDB4N2Y3NywgMHg4MGE1LCAweDg4YWIs IDB4OGFiOSwgMHg4Y2JiLAorICAgIDB4OTA3ZiwgMHg5NzVlLCAweDk4ZGIsIDB4NmEwYiwgMHg3 YzM4LCAweDUwOTksIDB4NWMzZSwgMHg1ZmFlLAorICAgIDB4Njc4NywgMHg2YmQ4LCAweDc0MzUs IDB4NzcwOSwgMHg3ZjhlLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OWYzYiwgMHg2N2NhLCAweDdhMTcsIDB4NTMz OSwgMHg3NThiLCAweDlhZWQsIDB4NWY2NiwgMHg4MTlkLAorICAgIDB4ODNmMSwgMHg4MDk4LCAw eDVmM2MsIDB4NWZjNSwgMHg3NTYyLCAweDdiNDYsIDB4OTAzYywgMHg2ODY3LAorICAgIDB4NTll YiwgMHg1YTliLCAweDdkMTAsIDB4NzY3ZSwgMHg4YjJjLCAweDRmZjUsIDB4NWY2YSwgMHg2YTE5 LAorICAgIDB4NmMzNywgMHg2ZjAyLCAweDc0ZTIsIDB4Nzk2OCwgMHg4ODY4LCAweDhhNTUsIDB4 OGM3OSwgMHg1ZWRmLAorICAgIDB4NjNjZiwgMHg3NWM1LCAweDc5ZDIsIDB4ODJkNywgMHg5MzI4 LCAweDkyZjIsIDB4ODQ5YywgMHg4NmVkLAorICAgIDB4OWMyZCwgMHg1NGMxLCAweDVmNmMsIDB4 NjU4YywgMHg2ZDVjLCAweDcwMTUsIDB4OGNhNywgMHg4Y2QzLAorICAgIDB4OTgzYiwgMHg2NTRm LCAweDc0ZjYsIDB4NGUwZCwgMHg0ZWQ4LCAweDU3ZTAsIDB4NTkyYiwgMHg1YTY2LAorICAgIDB4 NWJjYywgMHg1MWE4LCAweDVlMDMsIDB4NWU5YywgMHg2MDE2LCAweDYyNzYsIDB4NjU3NywgMHhm ZmZkLAorICAgIDB4NjVhNywgMHg2NjZlLCAweDZkNmUsIDB4NzIzNiwgMHg3YjI2LCAweDgxNTAs IDB4ODE5YSwgMHg4Mjk5LAorICAgIDB4OGI1YywgMHg4Y2EwLCAweDhjZTYsIDB4OGQ3NCwgMHg5 NjFjLCAweDk2NDQsIDB4NGZhZSwgMHg2NGFiLAorICAgIDB4NmI2NiwgMHg4MjFlLCAweDg0NjEs IDB4ODU2YSwgMHg5MGU4LCAweDVjMDEsIDB4Njk1MywgMHg5OGE4LAorICAgIDB4ODQ3YSwgMHg4 NTU3LCAweDRmMGYsIDB4NTI2ZiwgMHg1ZmE5LCAweDVlNDUsIDB4NjcwZCwgMHg3OThmLAorICAg IDB4ODE3OSwgMHg4OTA3LCAweDg5ODYsIDB4NmRmNSwgMHg1ZjE3LCAweDYyNTUsIDB4NmNiOCwg MHg0ZWNmLAorICAgIDB4NzI2OSwgMHg5YjkyLCAweDUyMDYsIDB4NTQzYiwgMHg1Njc0LCAweDU4 YjMsIDB4NjFhNCwgMHg2MjZlLAorICAgIDB4NzExYSwgMHg1OTZlLCAweDdjODksIDB4N2NkZSwg MHg3ZDFiLCAweDk2ZjAsIDB4NjU4NywgMHg4MDVlLAorICAgIDB4NGUxOSwgMHg0Zjc1LCAweDUx NzUsIDB4NTg0MCwgMHg1ZTYzLCAweDVlNzMsIDB4NWYwYSwgMHg2N2M0LAorICAgIDB4NGUyNiwg MHg4NTNkLCAweDk1ODksIDB4OTY1YiwgMHg3YzczLCAweDk4MDEsIDB4NTBmYiwgMHg1OGMxLAor ICAgIDB4NzY1NiwgMHg3OGE3LCAweDUyMjUsIDB4NzdhNSwgMHg4NTExLCAweDdiODYsIDB4NTA0 ZiwgMHg1OTA5LAorICAgIDB4NzI0NywgMHg3YmM3LCAweDdkZTgsIDB4OGZiYSwgMHg4ZmQ0LCAw eDkwNGQsIDB4NGZiZiwgMHg1MmM5LAorICAgIDB4NWEyOSwgMHg1ZjAxLCAweDk3YWQsIDB4NGZk ZCwgMHg4MjE3LCAweDkyZWEsIDB4NTcwMywgMHg2MzU1LAorICAgIDB4NmI2OSwgMHg3NTJiLCAw eDg4ZGMsIDB4OGYxNCwgMHg3YTQyLCAweDUyZGYsIDB4NTg5MywgMHg2MTU1LAorICAgIDB4NjIw YSwgMHg2NmFlLCAweDZiY2QsIDB4N2MzZiwgMHg4M2U5LCAweDUwMjMsIDB4NGZmOCwgMHg1MzA1 LAorICAgIDB4NTQ0NiwgMHg1ODMxLCAweDU5NDksIDB4NWI5ZCwgMHg1Y2YwLCAweDVjZWYsIDB4 NWQyOSwgMHg1ZTk2LAorICAgIDB4NjJiMSwgMHg2MzY3LCAweDY1M2UsIDB4NjViOSwgMHg2NzBi LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4NmNkNSwgMHg2Y2UxLCAweDcwZjksIDB4NzgzMiwgMHg3ZTJiLCAweDgw ZGUsIDB4ODJiMywgMHg4NDBjLAorICAgIDB4ODRlYywgMHg4NzAyLCAweDg5MTIsIDB4OGEyYSwg MHg4YzRhLCAweDkwYTYsIDB4OTJkMiwgMHg5OGZkLAorICAgIDB4OWNmMywgMHg5ZDZjLCAweDRl NGYsIDB4NGVhMSwgMHg1MDhkLCAweDUyNTYsIDB4NTc0YSwgMHg1OWE4LAorICAgIDB4NWUzZCwg MHg1ZmQ4LCAweDVmZDksIDB4NjIzZiwgMHg2NmI0LCAweDY3MWIsIDB4NjdkMCwgMHg2OGQyLAor ICAgIDB4NTE5MiwgMHg3ZDIxLCAweDgwYWEsIDB4ODFhOCwgMHg4YjAwLCAweDhjOGMsIDB4OGNi ZiwgMHg5MjdlLAorICAgIDB4OTYzMiwgMHg1NDIwLCAweDk4MmMsIDB4NTMxNywgMHg1MGQ1LCAw eDUzNWMsIDB4NThhOCwgMHg2NGIyLAorICAgIDB4NjczNCwgMHg3MjY3LCAweDc3NjYsIDB4N2E0 NiwgMHg5MWU2LCAweDUyYzMsIDB4NmNhMSwgMHg2Yjg2LAorICAgIDB4NTgwMCwgMHg1ZTRjLCAw eDU5NTQsIDB4NjcyYywgMHg3ZmZiLCAweDUxZTEsIDB4NzZjNiwgMHhmZmZkLAorICAgIDB4NjQ2 OSwgMHg3OGU4LCAweDliNTQsIDB4OWViYiwgMHg1N2NiLCAweDU5YjksIDB4NjYyNywgMHg2Nzlh LAorICAgIDB4NmJjZSwgMHg1NGU5LCAweDY5ZDksIDB4NWU1NSwgMHg4MTljLCAweDY3OTUsIDB4 OWJhYSwgMHg2N2ZlLAorICAgIDB4OWM1MiwgMHg2ODVkLCAweDRlYTYsIDB4NGZlMywgMHg1M2M4 LCAweDYyYjksIDB4NjcyYiwgMHg2Y2FiLAorICAgIDB4OGZjNCwgMHg0ZmFkLCAweDdlNmQsIDB4 OWViZiwgMHg0ZTA3LCAweDYxNjIsIDB4NmU4MCwgMHg2ZjJiLAorICAgIDB4ODUxMywgMHg1NDcz LCAweDY3MmEsIDB4OWI0NSwgMHg1ZGYzLCAweDdiOTUsIDB4NWNhYywgMHg1YmM2LAorICAgIDB4 ODcxYywgMHg2ZTRhLCAweDg0ZDEsIDB4N2ExNCwgMHg4MTA4LCAweDU5OTksIDB4N2M4ZCwgMHg2 YzExLAorICAgIDB4NzcyMCwgMHg1MmQ5LCAweDU5MjIsIDB4NzEyMSwgMHg3MjVmLCAweDc3ZGIs IDB4OTcyNywgMHg5ZDYxLAorICAgIDB4NjkwYiwgMHg1YTdmLCAweDVhMTgsIDB4NTFhNSwgMHg1 NDBkLCAweDU0N2QsIDB4NjYwZSwgMHg3NmRmLAorICAgIDB4OGZmNywgMHg5Mjk4LCAweDljZjQs IDB4NTllYSwgMHg3MjVkLCAweDZlYzUsIDB4NTE0ZCwgMHg2OGM5LAorICAgIDB4N2RiZiwgMHg3 ZGVjLCAweDk3NjIsIDB4OWViYSwgMHg2NDc4LCAweDZhMjEsIDB4ODMwMiwgMHg1OTg0LAorICAg IDB4NWI1ZiwgMHg2YmRiLCAweDczMWIsIDB4NzZmMiwgMHg3ZGIyLCAweDgwMTcsIDB4ODQ5OSwg MHg1MTMyLAorICAgIDB4NjcyOCwgMHg5ZWQ5LCAweDc2ZWUsIDB4Njc2MiwgMHg1MmZmLCAweDk5 MDUsIDB4NWMyNCwgMHg2MjNiLAorICAgIDB4N2M3ZSwgMHg4Y2IwLCAweDU1NGYsIDB4NjBiNiwg MHg3ZDBiLCAweDk1ODAsIDB4NTMwMSwgMHg0ZTVmLAorICAgIDB4NTFiNiwgMHg1OTFjLCAweDcy M2EsIDB4ODAzNiwgMHg5MWNlLCAweDVmMjUsIDB4NzdlMiwgMHg1Mzg0LAorICAgIDB4NWY3OSwg MHg3ZDA0LCAweDg1YWMsIDB4OGEzMywgMHg4ZThkLCAweDk3NTYsIDB4NjdmMywgMHg4NWFlLAor ICAgIDB4OTQ1MywgMHg2MTA5LCAweDYxMDgsIDB4NmNiOSwgMHg3NjUyLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 OGFlZCwgMHg4ZjM4LCAweDU1MmYsIDB4NGY1MSwgMHg1MTJhLCAweDUyYzcsIDB4NTNjYiwgMHg1 YmE1LAorICAgIDB4NWU3ZCwgMHg2MGEwLCAweDYxODIsIDB4NjNkNiwgMHg2NzA5LCAweDY3ZGEs IDB4NmU2NywgMHg2ZDhjLAorICAgIDB4NzMzNiwgMHg3MzM3LCAweDc1MzEsIDB4Nzk1MCwgMHg4 OGQ1LCAweDhhOTgsIDB4OTA0YSwgMHg5MDkxLAorICAgIDB4OTBmNSwgMHg5NmM0LCAweDg3OGQs IDB4NTkxNSwgMHg0ZTg4LCAweDRmNTksIDB4NGUwZSwgMHg4YTg5LAorICAgIDB4OGYzZiwgMHg5 ODEwLCAweDUwYWQsIDB4NWU3YywgMHg1OTk2LCAweDViYjksIDB4NWViOCwgMHg2M2RhLAorICAg IDB4NjNmYSwgMHg2NGMxLCAweDY2ZGMsIDB4Njk0YSwgMHg2OWQ4LCAweDZkMGIsIDB4NmViNiwg MHg3MTk0LAorICAgIDB4NzUyOCwgMHg3YWFmLCAweDdmOGEsIDB4ODAwMCwgMHg4NDQ5LCAweDg0 YzksIDB4ODk4MSwgMHg4YjIxLAorICAgIDB4OGUwYSwgMHg5MDY1LCAweDk2N2QsIDB4OTkwYSwg MHg2MTdlLCAweDYyOTEsIDB4NmIzMiwgMHhmZmZkLAorICAgIDB4NmM4MywgMHg2ZDc0LCAweDdm Y2MsIDB4N2ZmYywgMHg2ZGMwLCAweDdmODUsIDB4ODdiYSwgMHg4OGY4LAorICAgIDB4Njc2NSwg MHg4M2IxLCAweDk4M2MsIDB4OTZmNywgMHg2ZDFiLCAweDdkNjEsIDB4ODQzZCwgMHg5MTZhLAor ICAgIDB4NGU3MSwgMHg1Mzc1LCAweDVkNTAsIDB4NmIwNCwgMHg2ZmViLCAweDg1Y2QsIDB4ODYy ZCwgMHg4OWE3LAorICAgIDB4NTIyOSwgMHg1NDBmLCAweDVjNjUsIDB4Njc0ZSwgMHg2OGE4LCAw eDc0MDYsIDB4NzQ4MywgMHg3NWUyLAorICAgIDB4ODhjZiwgMHg4OGUxLCAweDkxY2MsIDB4OTZl MiwgMHg5Njc4LCAweDVmOGIsIDB4NzM4NywgMHg3YWNiLAorICAgIDB4ODQ0ZSwgMHg2M2EwLCAw eDc1NjUsIDB4NTI4OSwgMHg2ZDQxLCAweDZlOWMsIDB4NzQwOSwgMHg3NTU5LAorICAgIDB4Nzg2 YiwgMHg3YzkyLCAweDk2ODYsIDB4N2FkYywgMHg5ZjhkLCAweDRmYjYsIDB4NjE2ZSwgMHg2NWM1 LAorICAgIDB4ODY1YywgMHg0ZTg2LCAweDRlYWUsIDB4NTBkYSwgMHg0ZTIxLCAweDUxY2MsIDB4 NWJlZSwgMHg2NTk5LAorICAgIDB4Njg4MSwgMHg2ZGJjLCAweDczMWYsIDB4NzY0MiwgMHg3N2Fk LCAweDdhMWMsIDB4N2NlNywgMHg4MjZmLAorICAgIDB4OGFkMiwgMHg5MDdjLCAweDkxY2YsIDB4 OTY3NSwgMHg5ODE4LCAweDUyOWIsIDB4N2RkMSwgMHg1MDJiLAorICAgIDB4NTM5OCwgMHg2Nzk3 LCAweDZkY2IsIDB4NzFkMCwgMHg3NDMzLCAweDgxZTgsIDB4OGYyYSwgMHg5NmEzLAorICAgIDB4 OWM1NywgMHg5ZTlmLCAweDc0NjAsIDB4NTg0MSwgMHg2ZDk5LCAweDdkMmYsIDB4OTg1ZSwgMHg0 ZWU0LAorICAgIDB4NGYzNiwgMHg0ZjhiLCAweDUxYjcsIDB4NTJiMSwgMHg1ZGJhLCAweDYwMWMs IDB4NzNiMiwgMHg3OTNjLAorICAgIDB4ODJkMywgMHg5MjM0LCAweDk2YjcsIDB4OTZmNiwgMHg5 NzBhLCAweDllOTcsIDB4OWY2MiwgMHg2NmE2LAorICAgIDB4NmI3NCwgMHg1MjE3LCAweDUyYTMs IDB4NzBjOCwgMHg4OGMyLCAweDVlYzksIDB4NjA0YiwgMHg2MTkwLAorICAgIDB4NmYyMywgMHg3 MTQ5LCAweDdjM2UsIDB4N2RmNCwgMHg4MDZmLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ODRlZSwgMHg5MDIzLCAw eDkzMmMsIDB4NTQ0MiwgMHg5YjZmLCAweDZhZDMsIDB4NzA4OSwgMHg4Y2MyLAorICAgIDB4OGRl ZiwgMHg5NzMyLCAweDUyYjQsIDB4NWE0MSwgMHg1ZWNhLCAweDVmMDQsIDB4NjcxNywgMHg2OTdj LAorICAgIDB4Njk5NCwgMHg2ZDZhLCAweDZmMGYsIDB4NzI2MiwgMHg3MmZjLCAweDdiZWQsIDB4 ODAwMSwgMHg4MDdlLAorICAgIDB4ODc0YiwgMHg5MGNlLCAweDUxNmQsIDB4OWU5MywgMHg3OTg0 LCAweDgwOGIsIDB4OTMzMiwgMHg4YWQ2LAorICAgIDB4NTAyZCwgMHg1NDhjLCAweDhhNzEsIDB4 NmI2YSwgMHg4Y2M0LCAweDgxMDcsIDB4NjBkMSwgMHg2N2EwLAorICAgIDB4OWRmMiwgMHg0ZTk5 LCAweDRlOTgsIDB4OWMxMCwgMHg4YTZiLCAweDg1YzEsIDB4ODU2OCwgMHg2OTAwLAorICAgIDB4 NmU3ZSwgMHg3ODk3LCAweDgxNTUsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHg1ZjBjLAorICAgIDB4NGUxMCwgMHg0ZTE1LCAweDRlMmEsIDB4NGUzMSwgMHg0ZTM2LCAweDRl M2MsIDB4NGUzZiwgMHg0ZTQyLAorICAgIDB4NGU1NiwgMHg0ZTU4LCAweDRlODIsIDB4NGU4NSwg MHg4YzZiLCAweDRlOGEsIDB4ODIxMiwgMHg1ZjBkLAorICAgIDB4NGU4ZSwgMHg0ZTllLCAweDRl OWYsIDB4NGVhMCwgMHg0ZWEyLCAweDRlYjAsIDB4NGViMywgMHg0ZWI2LAorICAgIDB4NGVjZSwg MHg0ZWNkLCAweDRlYzQsIDB4NGVjNiwgMHg0ZWMyLCAweDRlZDcsIDB4NGVkZSwgMHg0ZWVkLAor ICAgIDB4NGVkZiwgMHg0ZWY3LCAweDRmMDksIDB4NGY1YSwgMHg0ZjMwLCAweDRmNWIsIDB4NGY1 ZCwgMHg0ZjU3LAorICAgIDB4NGY0NywgMHg0Zjc2LCAweDRmODgsIDB4NGY4ZiwgMHg0Zjk4LCAw eDRmN2IsIDB4NGY2OSwgMHg0ZjcwLAorICAgIDB4NGY5MSwgMHg0ZjZmLCAweDRmODYsIDB4NGY5 NiwgMHg1MTE4LCAweDRmZDQsIDB4NGZkZiwgMHg0ZmNlLAorICAgIDB4NGZkOCwgMHg0ZmRiLCAw eDRmZDEsIDB4NGZkYSwgMHg0ZmQwLCAweDRmZTQsIDB4NGZlNSwgMHg1MDFhLAorICAgIDB4NTAy OCwgMHg1MDE0LCAweDUwMmEsIDB4NTAyNSwgMHg1MDA1LCAweDRmMWMsIDB4NGZmNiwgMHg1MDIx LAorICAgIDB4NTAyOSwgMHg1MDJjLCAweDRmZmUsIDB4NGZlZiwgMHg1MDExLCAweDUwMDYsIDB4 NTA0MywgMHg1MDQ3LAorICAgIDB4NjcwMywgMHg1MDU1LCAweDUwNTAsIDB4NTA0OCwgMHg1MDVh LCAweDUwNTYsIDB4NTA2YywgMHg1MDc4LAorICAgIDB4NTA4MCwgMHg1MDlhLCAweDUwODUsIDB4 NTBiNCwgMHg1MGIyLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4NTBjOSwgMHg1MGNhLCAweDUwYjMsIDB4NTBjMiwg MHg1MGQ2LCAweDUwZGUsIDB4NTBlNSwgMHg1MGVkLAorICAgIDB4NTBlMywgMHg1MGVlLCAweDUw ZjksIDB4NTBmNSwgMHg1MTA5LCAweDUxMDEsIDB4NTEwMiwgMHg1MTE2LAorICAgIDB4NTExNSwg MHg1MTE0LCAweDUxMWEsIDB4NTEyMSwgMHg1MTNhLCAweDUxMzcsIDB4NTEzYywgMHg1MTNiLAor ICAgIDB4NTEzZiwgMHg1MTQwLCAweDUxNTIsIDB4NTE0YywgMHg1MTU0LCAweDUxNjIsIDB4N2Fm OCwgMHg1MTY5LAorICAgIDB4NTE2YSwgMHg1MTZlLCAweDUxODAsIDB4NTE4MiwgMHg1NmQ4LCAw eDUxOGMsIDB4NTE4OSwgMHg1MThmLAorICAgIDB4NTE5MSwgMHg1MTkzLCAweDUxOTUsIDB4NTE5 NiwgMHg1MWE0LCAweDUxYTYsIDB4NTFhMiwgMHg1MWE5LAorICAgIDB4NTFhYSwgMHg1MWFiLCAw eDUxYjMsIDB4NTFiMSwgMHg1MWIyLCAweDUxYjAsIDB4NTFiNSwgMHg1MWJkLAorICAgIDB4NTFj NSwgMHg1MWM5LCAweDUxZGIsIDB4NTFlMCwgMHg4NjU1LCAweDUxZTksIDB4NTFlZCwgMHhmZmZk LAorICAgIDB4NTFmMCwgMHg1MWY1LCAweDUxZmUsIDB4NTIwNCwgMHg1MjBiLCAweDUyMTQsIDB4 NTIwZSwgMHg1MjI3LAorICAgIDB4NTIyYSwgMHg1MjJlLCAweDUyMzMsIDB4NTIzOSwgMHg1MjRm LCAweDUyNDQsIDB4NTI0YiwgMHg1MjRjLAorICAgIDB4NTI1ZSwgMHg1MjU0LCAweDUyNmEsIDB4 NTI3NCwgMHg1MjY5LCAweDUyNzMsIDB4NTI3ZiwgMHg1MjdkLAorICAgIDB4NTI4ZCwgMHg1Mjk0 LCAweDUyOTIsIDB4NTI3MSwgMHg1Mjg4LCAweDUyOTEsIDB4OGZhOCwgMHg4ZmE3LAorICAgIDB4 NTJhYywgMHg1MmFkLCAweDUyYmMsIDB4NTJiNSwgMHg1MmMxLCAweDUyY2QsIDB4NTJkNywgMHg1 MmRlLAorICAgIDB4NTJlMywgMHg1MmU2LCAweDk4ZWQsIDB4NTJlMCwgMHg1MmYzLCAweDUyZjUs IDB4NTJmOCwgMHg1MmY5LAorICAgIDB4NTMwNiwgMHg1MzA4LCAweDc1MzgsIDB4NTMwZCwgMHg1 MzEwLCAweDUzMGYsIDB4NTMxNSwgMHg1MzFhLAorICAgIDB4NTMyMywgMHg1MzJmLCAweDUzMzEs IDB4NTMzMywgMHg1MzM4LCAweDUzNDAsIDB4NTM0NiwgMHg1MzQ1LAorICAgIDB4NGUxNywgMHg1 MzQ5LCAweDUzNGQsIDB4NTFkNiwgMHg1MzVlLCAweDUzNjksIDB4NTM2ZSwgMHg1OTE4LAorICAg IDB4NTM3YiwgMHg1Mzc3LCAweDUzODIsIDB4NTM5NiwgMHg1M2EwLCAweDUzYTYsIDB4NTNhNSwg MHg1M2FlLAorICAgIDB4NTNiMCwgMHg1M2I2LCAweDUzYzMsIDB4N2MxMiwgMHg5NmQ5LCAweDUz ZGYsIDB4NjZmYywgMHg3MWVlLAorICAgIDB4NTNlZSwgMHg1M2U4LCAweDUzZWQsIDB4NTNmYSwg MHg1NDAxLCAweDU0M2QsIDB4NTQ0MCwgMHg1NDJjLAorICAgIDB4NTQyZCwgMHg1NDNjLCAweDU0 MmUsIDB4NTQzNiwgMHg1NDI5LCAweDU0MWQsIDB4NTQ0ZSwgMHg1NDhmLAorICAgIDB4NTQ3NSwg MHg1NDhlLCAweDU0NWYsIDB4NTQ3MSwgMHg1NDc3LCAweDU0NzAsIDB4NTQ5MiwgMHg1NDdiLAor ICAgIDB4NTQ4MCwgMHg1NDc2LCAweDU0ODQsIDB4NTQ5MCwgMHg1NDg2LCAweDU0YzcsIDB4NTRh MiwgMHg1NGI4LAorICAgIDB4NTRhNSwgMHg1NGFjLCAweDU0YzQsIDB4NTRjOCwgMHg1NGE4LCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4NTRhYiwgMHg1NGMyLCAweDU0YTQsIDB4NTRiZSwgMHg1NGJjLCAweDU0ZDgs IDB4NTRlNSwgMHg1NGU2LAorICAgIDB4NTUwZiwgMHg1NTE0LCAweDU0ZmQsIDB4NTRlZSwgMHg1 NGVkLCAweDU0ZmEsIDB4NTRlMiwgMHg1NTM5LAorICAgIDB4NTU0MCwgMHg1NTYzLCAweDU1NGMs IDB4NTUyZSwgMHg1NTVjLCAweDU1NDUsIDB4NTU1NiwgMHg1NTU3LAorICAgIDB4NTUzOCwgMHg1 NTMzLCAweDU1NWQsIDB4NTU5OSwgMHg1NTgwLCAweDU0YWYsIDB4NTU4YSwgMHg1NTlmLAorICAg IDB4NTU3YiwgMHg1NTdlLCAweDU1OTgsIDB4NTU5ZSwgMHg1NWFlLCAweDU1N2MsIDB4NTU4Mywg MHg1NWE5LAorICAgIDB4NTU4NywgMHg1NWE4LCAweDU1ZGEsIDB4NTVjNSwgMHg1NWRmLCAweDU1 YzQsIDB4NTVkYywgMHg1NWU0LAorICAgIDB4NTVkNCwgMHg1NjE0LCAweDU1ZjcsIDB4NTYxNiwg MHg1NWZlLCAweDU1ZmQsIDB4NTYxYiwgMHg1NWY5LAorICAgIDB4NTY0ZSwgMHg1NjUwLCAweDcx ZGYsIDB4NTYzNCwgMHg1NjM2LCAweDU2MzIsIDB4NTYzOCwgMHhmZmZkLAorICAgIDB4NTY2Yiwg MHg1NjY0LCAweDU2MmYsIDB4NTY2YywgMHg1NjZhLCAweDU2ODYsIDB4NTY4MCwgMHg1NjhhLAor ICAgIDB4NTZhMCwgMHg1Njk0LCAweDU2OGYsIDB4NTZhNSwgMHg1NmFlLCAweDU2YjYsIDB4NTZi NCwgMHg1NmMyLAorICAgIDB4NTZiYywgMHg1NmMxLCAweDU2YzMsIDB4NTZjMCwgMHg1NmM4LCAw eDU2Y2UsIDB4NTZkMSwgMHg1NmQzLAorICAgIDB4NTZkNywgMHg1NmVlLCAweDU2ZjksIDB4NTcw MCwgMHg1NmZmLCAweDU3MDQsIDB4NTcwOSwgMHg1NzA4LAorICAgIDB4NTcwYiwgMHg1NzBkLCAw eDU3MTMsIDB4NTcxOCwgMHg1NzE2LCAweDU1YzcsIDB4NTcxYywgMHg1NzI2LAorICAgIDB4NTcz NywgMHg1NzM4LCAweDU3NGUsIDB4NTczYiwgMHg1NzQwLCAweDU3NGYsIDB4NTc2OSwgMHg1N2Mw LAorICAgIDB4NTc4OCwgMHg1NzYxLCAweDU3N2YsIDB4NTc4OSwgMHg1NzkzLCAweDU3YTAsIDB4 NTdiMywgMHg1N2E0LAorICAgIDB4NTdhYSwgMHg1N2IwLCAweDU3YzMsIDB4NTdjNiwgMHg1N2Q0 LCAweDU3ZDIsIDB4NTdkMywgMHg1ODBhLAorICAgIDB4NTdkNiwgMHg1N2UzLCAweDU4MGIsIDB4 NTgxOSwgMHg1ODFkLCAweDU4NzIsIDB4NTgyMSwgMHg1ODYyLAorICAgIDB4NTg0YiwgMHg1ODcw LCAweDZiYzAsIDB4NTg1MiwgMHg1ODNkLCAweDU4NzksIDB4NTg4NSwgMHg1OGI5LAorICAgIDB4 NTg5ZiwgMHg1OGFiLCAweDU4YmEsIDB4NThkZSwgMHg1OGJiLCAweDU4YjgsIDB4NThhZSwgMHg1 OGM1LAorICAgIDB4NThkMywgMHg1OGQxLCAweDU4ZDcsIDB4NThkOSwgMHg1OGQ4LCAweDU4ZTUs IDB4NThkYywgMHg1OGU0LAorICAgIDB4NThkZiwgMHg1OGVmLCAweDU4ZmEsIDB4NThmOSwgMHg1 OGZiLCAweDU4ZmMsIDB4NThmZCwgMHg1OTAyLAorICAgIDB4NTkwYSwgMHg1OTEwLCAweDU5MWIs IDB4NjhhNiwgMHg1OTI1LCAweDU5MmMsIDB4NTkyZCwgMHg1OTMyLAorICAgIDB4NTkzOCwgMHg1 OTNlLCAweDdhZDIsIDB4NTk1NSwgMHg1OTUwLCAweDU5NGUsIDB4NTk1YSwgMHg1OTU4LAorICAg IDB4NTk2MiwgMHg1OTYwLCAweDU5NjcsIDB4NTk2YywgMHg1OTY5LCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4NTk3 OCwgMHg1OTgxLCAweDU5OWQsIDB4NGY1ZSwgMHg0ZmFiLCAweDU5YTMsIDB4NTliMiwgMHg1OWM2 LAorICAgIDB4NTllOCwgMHg1OWRjLCAweDU5OGQsIDB4NTlkOSwgMHg1OWRhLCAweDVhMjUsIDB4 NWExZiwgMHg1YTExLAorICAgIDB4NWExYywgMHg1YTA5LCAweDVhMWEsIDB4NWE0MCwgMHg1YTZj LCAweDVhNDksIDB4NWEzNSwgMHg1YTM2LAorICAgIDB4NWE2MiwgMHg1YTZhLCAweDVhOWEsIDB4 NWFiYywgMHg1YWJlLCAweDVhY2IsIDB4NWFjMiwgMHg1YWJkLAorICAgIDB4NWFlMywgMHg1YWQ3 LCAweDVhZTYsIDB4NWFlOSwgMHg1YWQ2LCAweDVhZmEsIDB4NWFmYiwgMHg1YjBjLAorICAgIDB4 NWIwYiwgMHg1YjE2LCAweDViMzIsIDB4NWFkMCwgMHg1YjJhLCAweDViMzYsIDB4NWIzZSwgMHg1 YjQzLAorICAgIDB4NWI0NSwgMHg1YjQwLCAweDViNTEsIDB4NWI1NSwgMHg1YjVhLCAweDViNWIs IDB4NWI2NSwgMHg1YjY5LAorICAgIDB4NWI3MCwgMHg1YjczLCAweDViNzUsIDB4NWI3OCwgMHg2 NTg4LCAweDViN2EsIDB4NWI4MCwgMHhmZmZkLAorICAgIDB4NWI4MywgMHg1YmE2LCAweDViYjgs IDB4NWJjMywgMHg1YmM3LCAweDViYzksIDB4NWJkNCwgMHg1YmQwLAorICAgIDB4NWJlNCwgMHg1 YmU2LCAweDViZTIsIDB4NWJkZSwgMHg1YmU1LCAweDViZWIsIDB4NWJmMCwgMHg1YmY2LAorICAg IDB4NWJmMywgMHg1YzA1LCAweDVjMDcsIDB4NWMwOCwgMHg1YzBkLCAweDVjMTMsIDB4NWMyMCwg MHg1YzIyLAorICAgIDB4NWMyOCwgMHg1YzM4LCAweDVjMzksIDB4NWM0MSwgMHg1YzQ2LCAweDVj NGUsIDB4NWM1MywgMHg1YzUwLAorICAgIDB4NWM0ZiwgMHg1YjcxLCAweDVjNmMsIDB4NWM2ZSwg MHg0ZTYyLCAweDVjNzYsIDB4NWM3OSwgMHg1YzhjLAorICAgIDB4NWM5MSwgMHg1Yzk0LCAweDU5 OWIsIDB4NWNhYiwgMHg1Y2JiLCAweDVjYjYsIDB4NWNiYywgMHg1Y2I3LAorICAgIDB4NWNjNSwg MHg1Y2JlLCAweDVjYzcsIDB4NWNkOSwgMHg1Y2U5LCAweDVjZmQsIDB4NWNmYSwgMHg1Y2VkLAor ICAgIDB4NWQ4YywgMHg1Y2VhLCAweDVkMGIsIDB4NWQxNSwgMHg1ZDE3LCAweDVkNWMsIDB4NWQx ZiwgMHg1ZDFiLAorICAgIDB4NWQxMSwgMHg1ZDE0LCAweDVkMjIsIDB4NWQxYSwgMHg1ZDE5LCAw eDVkMTgsIDB4NWQ0YywgMHg1ZDUyLAorICAgIDB4NWQ0ZSwgMHg1ZDRiLCAweDVkNmMsIDB4NWQ3 MywgMHg1ZDc2LCAweDVkODcsIDB4NWQ4NCwgMHg1ZDgyLAorICAgIDB4NWRhMiwgMHg1ZDlkLCAw eDVkYWMsIDB4NWRhZSwgMHg1ZGJkLCAweDVkOTAsIDB4NWRiNywgMHg1ZGJjLAorICAgIDB4NWRj OSwgMHg1ZGNkLCAweDVkZDMsIDB4NWRkMiwgMHg1ZGQ2LCAweDVkZGIsIDB4NWRlYiwgMHg1ZGYy LAorICAgIDB4NWRmNSwgMHg1ZTBiLCAweDVlMWEsIDB4NWUxOSwgMHg1ZTExLCAweDVlMWIsIDB4 NWUzNiwgMHg1ZTM3LAorICAgIDB4NWU0NCwgMHg1ZTQzLCAweDVlNDAsIDB4NWU0ZSwgMHg1ZTU3 LCAweDVlNTQsIDB4NWU1ZiwgMHg1ZTYyLAorICAgIDB4NWU2NCwgMHg1ZTQ3LCAweDVlNzUsIDB4 NWU3NiwgMHg1ZTdhLCAweDllYmMsIDB4NWU3ZiwgMHg1ZWEwLAorICAgIDB4NWVjMSwgMHg1ZWMy LCAweDVlYzgsIDB4NWVkMCwgMHg1ZWNmLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4NWVkNiwgMHg1ZWUzLCAweDVl ZGQsIDB4NWVkYSwgMHg1ZWRiLCAweDVlZTIsIDB4NWVlMSwgMHg1ZWU4LAorICAgIDB4NWVlOSwg MHg1ZWVjLCAweDVlZjEsIDB4NWVmMywgMHg1ZWYwLCAweDVlZjQsIDB4NWVmOCwgMHg1ZWZlLAor ICAgIDB4NWYwMywgMHg1ZjA5LCAweDVmNWQsIDB4NWY1YywgMHg1ZjBiLCAweDVmMTEsIDB4NWYx NiwgMHg1ZjI5LAorICAgIDB4NWYyZCwgMHg1ZjM4LCAweDVmNDEsIDB4NWY0OCwgMHg1ZjRjLCAw eDVmNGUsIDB4NWYyZiwgMHg1ZjUxLAorICAgIDB4NWY1NiwgMHg1ZjU3LCAweDVmNTksIDB4NWY2 MSwgMHg1ZjZkLCAweDVmNzMsIDB4NWY3NywgMHg1ZjgzLAorICAgIDB4NWY4MiwgMHg1ZjdmLCAw eDVmOGEsIDB4NWY4OCwgMHg1ZjkxLCAweDVmODcsIDB4NWY5ZSwgMHg1Zjk5LAorICAgIDB4NWY5 OCwgMHg1ZmEwLCAweDVmYTgsIDB4NWZhZCwgMHg1ZmJjLCAweDVmZDYsIDB4NWZmYiwgMHg1ZmU0 LAorICAgIDB4NWZmOCwgMHg1ZmYxLCAweDVmZGQsIDB4NjBiMywgMHg1ZmZmLCAweDYwMjEsIDB4 NjA2MCwgMHhmZmZkLAorICAgIDB4NjAxOSwgMHg2MDEwLCAweDYwMjksIDB4NjAwZSwgMHg2MDMx LCAweDYwMWIsIDB4NjAxNSwgMHg2MDJiLAorICAgIDB4NjAyNiwgMHg2MDBmLCAweDYwM2EsIDB4 NjA1YSwgMHg2MDQxLCAweDYwNmEsIDB4NjA3NywgMHg2MDVmLAorICAgIDB4NjA0YSwgMHg2MDQ2 LCAweDYwNGQsIDB4NjA2MywgMHg2MDQzLCAweDYwNjQsIDB4NjA0MiwgMHg2MDZjLAorICAgIDB4 NjA2YiwgMHg2MDU5LCAweDYwODEsIDB4NjA4ZCwgMHg2MGU3LCAweDYwODMsIDB4NjA5YSwgMHg2 MDg0LAorICAgIDB4NjA5YiwgMHg2MDk2LCAweDYwOTcsIDB4NjA5MiwgMHg2MGE3LCAweDYwOGIs IDB4NjBlMSwgMHg2MGI4LAorICAgIDB4NjBlMCwgMHg2MGQzLCAweDYwYjQsIDB4NWZmMCwgMHg2 MGJkLCAweDYwYzYsIDB4NjBiNSwgMHg2MGQ4LAorICAgIDB4NjE0ZCwgMHg2MTE1LCAweDYxMDYs IDB4NjBmNiwgMHg2MGY3LCAweDYxMDAsIDB4NjBmNCwgMHg2MGZhLAorICAgIDB4NjEwMywgMHg2 MTIxLCAweDYwZmIsIDB4NjBmMSwgMHg2MTBkLCAweDYxMGUsIDB4NjE0NywgMHg2MTNlLAorICAg IDB4NjEyOCwgMHg2MTI3LCAweDYxNGEsIDB4NjEzZiwgMHg2MTNjLCAweDYxMmMsIDB4NjEzNCwg MHg2MTNkLAorICAgIDB4NjE0MiwgMHg2MTQ0LCAweDYxNzMsIDB4NjE3NywgMHg2MTU4LCAweDYx NTksIDB4NjE1YSwgMHg2MTZiLAorICAgIDB4NjE3NCwgMHg2MTZmLCAweDYxNjUsIDB4NjE3MSwg MHg2MTVmLCAweDYxNWQsIDB4NjE1MywgMHg2MTc1LAorICAgIDB4NjE5OSwgMHg2MTk2LCAweDYx ODcsIDB4NjFhYywgMHg2MTk0LCAweDYxOWEsIDB4NjE4YSwgMHg2MTkxLAorICAgIDB4NjFhYiwg MHg2MWFlLCAweDYxY2MsIDB4NjFjYSwgMHg2MWM5LCAweDYxZjcsIDB4NjFjOCwgMHg2MWMzLAor ICAgIDB4NjFjNiwgMHg2MWJhLCAweDYxY2IsIDB4N2Y3OSwgMHg2MWNkLCAweDYxZTYsIDB4NjFl MywgMHg2MWY2LAorICAgIDB4NjFmYSwgMHg2MWY0LCAweDYxZmYsIDB4NjFmZCwgMHg2MWZjLCAw eDYxZmUsIDB4NjIwMCwgMHg2MjA4LAorICAgIDB4NjIwOSwgMHg2MjBkLCAweDYyMGMsIDB4NjIx NCwgMHg2MjFiLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4NjIxZSwgMHg2MjIxLCAweDYyMmEsIDB4NjIyZSwgMHg2 MjMwLCAweDYyMzIsIDB4NjIzMywgMHg2MjQxLAorICAgIDB4NjI0ZSwgMHg2MjVlLCAweDYyNjMs IDB4NjI1YiwgMHg2MjYwLCAweDYyNjgsIDB4NjI3YywgMHg2MjgyLAorICAgIDB4NjI4OSwgMHg2 MjdlLCAweDYyOTIsIDB4NjI5MywgMHg2Mjk2LCAweDYyZDQsIDB4NjI4MywgMHg2Mjk0LAorICAg IDB4NjJkNywgMHg2MmQxLCAweDYyYmIsIDB4NjJjZiwgMHg2MmZmLCAweDYyYzYsIDB4NjRkNCwg MHg2MmM4LAorICAgIDB4NjJkYywgMHg2MmNjLCAweDYyY2EsIDB4NjJjMiwgMHg2MmM3LCAweDYy OWIsIDB4NjJjOSwgMHg2MzBjLAorICAgIDB4NjJlZSwgMHg2MmYxLCAweDYzMjcsIDB4NjMwMiwg MHg2MzA4LCAweDYyZWYsIDB4NjJmNSwgMHg2MzUwLAorICAgIDB4NjMzZSwgMHg2MzRkLCAweDY0 MWMsIDB4NjM0ZiwgMHg2Mzk2LCAweDYzOGUsIDB4NjM4MCwgMHg2M2FiLAorICAgIDB4NjM3Niwg MHg2M2EzLCAweDYzOGYsIDB4NjM4OSwgMHg2MzlmLCAweDYzYjUsIDB4NjM2YiwgMHhmZmZkLAor ICAgIDB4NjM2OSwgMHg2M2JlLCAweDYzZTksIDB4NjNjMCwgMHg2M2M2LCAweDYzZTMsIDB4NjNj OSwgMHg2M2QyLAorICAgIDB4NjNmNiwgMHg2M2M0LCAweDY0MTYsIDB4NjQzNCwgMHg2NDA2LCAw eDY0MTMsIDB4NjQyNiwgMHg2NDM2LAorICAgIDB4NjUxZCwgMHg2NDE3LCAweDY0MjgsIDB4NjQw ZiwgMHg2NDY3LCAweDY0NmYsIDB4NjQ3NiwgMHg2NDRlLAorICAgIDB4NjUyYSwgMHg2NDk1LCAw eDY0OTMsIDB4NjRhNSwgMHg2NGE5LCAweDY0ODgsIDB4NjRiYywgMHg2NGRhLAorICAgIDB4NjRk MiwgMHg2NGM1LCAweDY0YzcsIDB4NjRiYiwgMHg2NGQ4LCAweDY0YzIsIDB4NjRmMSwgMHg2NGU3 LAorICAgIDB4ODIwOSwgMHg2NGUwLCAweDY0ZTEsIDB4NjJhYywgMHg2NGUzLCAweDY0ZWYsIDB4 NjUyYywgMHg2NGY2LAorICAgIDB4NjRmNCwgMHg2NGYyLCAweDY0ZmEsIDB4NjUwMCwgMHg2NGZk LCAweDY1MTgsIDB4NjUxYywgMHg2NTA1LAorICAgIDB4NjUyNCwgMHg2NTIzLCAweDY1MmIsIDB4 NjUzNCwgMHg2NTM1LCAweDY1MzcsIDB4NjUzNiwgMHg2NTM4LAorICAgIDB4NzU0YiwgMHg2NTQ4 LCAweDY1NTYsIDB4NjU1NSwgMHg2NTRkLCAweDY1NTgsIDB4NjU1ZSwgMHg2NTVkLAorICAgIDB4 NjU3MiwgMHg2NTc4LCAweDY1ODIsIDB4NjU4MywgMHg4YjhhLCAweDY1OWIsIDB4NjU5ZiwgMHg2 NWFiLAorICAgIDB4NjViNywgMHg2NWMzLCAweDY1YzYsIDB4NjVjMSwgMHg2NWM0LCAweDY1Y2Ms IDB4NjVkMiwgMHg2NWRiLAorICAgIDB4NjVkOSwgMHg2NWUwLCAweDY1ZTEsIDB4NjVmMSwgMHg2 NzcyLCAweDY2MGEsIDB4NjYwMywgMHg2NWZiLAorICAgIDB4Njc3MywgMHg2NjM1LCAweDY2MzYs IDB4NjYzNCwgMHg2NjFjLCAweDY2NGYsIDB4NjY0NCwgMHg2NjQ5LAorICAgIDB4NjY0MSwgMHg2 NjVlLCAweDY2NWQsIDB4NjY2NCwgMHg2NjY3LCAweDY2NjgsIDB4NjY1ZiwgMHg2NjYyLAorICAg IDB4NjY3MCwgMHg2NjgzLCAweDY2ODgsIDB4NjY4ZSwgMHg2Njg5LCAweDY2ODQsIDB4NjY5OCwg MHg2NjlkLAorICAgIDB4NjZjMSwgMHg2NmI5LCAweDY2YzksIDB4NjZiZSwgMHg2NmJjLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAorICAgIDB4NjZjNCwgMHg2NmI4LCAweDY2ZDYsIDB4NjZkYSwgMHg2NmUwLCAweDY2M2YsIDB4 NjZlNiwgMHg2NmU5LAorICAgIDB4NjZmMCwgMHg2NmY1LCAweDY2ZjcsIDB4NjcwZiwgMHg2NzE2 LCAweDY3MWUsIDB4NjcyNiwgMHg2NzI3LAorICAgIDB4OTczOCwgMHg2NzJlLCAweDY3M2YsIDB4 NjczNiwgMHg2NzQxLCAweDY3MzgsIDB4NjczNywgMHg2NzQ2LAorICAgIDB4Njc1ZSwgMHg2NzYw LCAweDY3NTksIDB4Njc2MywgMHg2NzY0LCAweDY3ODksIDB4Njc3MCwgMHg2N2E5LAorICAgIDB4 Njc3YywgMHg2NzZhLCAweDY3OGMsIDB4Njc4YiwgMHg2N2E2LCAweDY3YTEsIDB4Njc4NSwgMHg2 N2I3LAorICAgIDB4NjdlZiwgMHg2N2I0LCAweDY3ZWMsIDB4NjdiMywgMHg2N2U5LCAweDY3Yjgs IDB4NjdlNCwgMHg2N2RlLAorICAgIDB4NjdkZCwgMHg2N2UyLCAweDY3ZWUsIDB4NjdiOSwgMHg2 N2NlLCAweDY3YzYsIDB4NjdlNywgMHg2YTljLAorICAgIDB4NjgxZSwgMHg2ODQ2LCAweDY4Mjks IDB4Njg0MCwgMHg2ODRkLCAweDY4MzIsIDB4Njg0ZSwgMHhmZmZkLAorICAgIDB4NjhiMywgMHg2 ODJiLCAweDY4NTksIDB4Njg2MywgMHg2ODc3LCAweDY4N2YsIDB4Njg5ZiwgMHg2ODhmLAorICAg IDB4NjhhZCwgMHg2ODk0LCAweDY4OWQsIDB4Njg5YiwgMHg2ODgzLCAweDZhYWUsIDB4NjhiOSwg MHg2ODc0LAorICAgIDB4NjhiNSwgMHg2OGEwLCAweDY4YmEsIDB4NjkwZiwgMHg2ODhkLCAweDY4 N2UsIDB4NjkwMSwgMHg2OGNhLAorICAgIDB4NjkwOCwgMHg2OGQ4LCAweDY5MjIsIDB4NjkyNiwg MHg2OGUxLCAweDY5MGMsIDB4NjhjZCwgMHg2OGQ0LAorICAgIDB4NjhlNywgMHg2OGQ1LCAweDY5 MzYsIDB4NjkxMiwgMHg2OTA0LCAweDY4ZDcsIDB4NjhlMywgMHg2OTI1LAorICAgIDB4NjhmOSwg MHg2OGUwLCAweDY4ZWYsIDB4NjkyOCwgMHg2OTJhLCAweDY5MWEsIDB4NjkyMywgMHg2OTIxLAor ICAgIDB4NjhjNiwgMHg2OTc5LCAweDY5NzcsIDB4Njk1YywgMHg2OTc4LCAweDY5NmIsIDB4Njk1 NCwgMHg2OTdlLAorICAgIDB4Njk2ZSwgMHg2OTM5LCAweDY5NzQsIDB4NjkzZCwgMHg2OTU5LCAw eDY5MzAsIDB4Njk2MSwgMHg2OTVlLAorICAgIDB4Njk1ZCwgMHg2OTgxLCAweDY5NmEsIDB4Njli MiwgMHg2OWFlLCAweDY5ZDAsIDB4NjliZiwgMHg2OWMxLAorICAgIDB4NjlkMywgMHg2OWJlLCAw eDY5Y2UsIDB4NWJlOCwgMHg2OWNhLCAweDY5ZGQsIDB4NjliYiwgMHg2OWMzLAorICAgIDB4Njlh NywgMHg2YTJlLCAweDY5OTEsIDB4NjlhMCwgMHg2OTljLCAweDY5OTUsIDB4NjliNCwgMHg2OWRl LAorICAgIDB4NjllOCwgMHg2YTAyLCAweDZhMWIsIDB4NjlmZiwgMHg2YjBhLCAweDY5ZjksIDB4 NjlmMiwgMHg2OWU3LAorICAgIDB4NmEwNSwgMHg2OWIxLCAweDZhMWUsIDB4NjllZCwgMHg2YTE0 LCAweDY5ZWIsIDB4NmEwYSwgMHg2YTEyLAorICAgIDB4NmFjMSwgMHg2YTIzLCAweDZhMTMsIDB4 NmE0NCwgMHg2YTBjLCAweDZhNzIsIDB4NmEzNiwgMHg2YTc4LAorICAgIDB4NmE0NywgMHg2YTYy LCAweDZhNTksIDB4NmE2NiwgMHg2YTQ4LCAweDZhMzgsIDB4NmEyMiwgMHg2YTkwLAorICAgIDB4 NmE4ZCwgMHg2YWEwLCAweDZhODQsIDB4NmFhMiwgMHg2YWEzLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4NmE5Nywg MHg4NjE3LCAweDZhYmIsIDB4NmFjMywgMHg2YWMyLCAweDZhYjgsIDB4NmFiMywgMHg2YWFjLAor ICAgIDB4NmFkZSwgMHg2YWQxLCAweDZhZGYsIDB4NmFhYSwgMHg2YWRhLCAweDZhZWEsIDB4NmFm YiwgMHg2YjA1LAorICAgIDB4ODYxNiwgMHg2YWZhLCAweDZiMTIsIDB4NmIxNiwgMHg5YjMxLCAw eDZiMWYsIDB4NmIzOCwgMHg2YjM3LAorICAgIDB4NzZkYywgMHg2YjM5LCAweDk4ZWUsIDB4NmI0 NywgMHg2YjQzLCAweDZiNDksIDB4NmI1MCwgMHg2YjU5LAorICAgIDB4NmI1NCwgMHg2YjViLCAw eDZiNWYsIDB4NmI2MSwgMHg2Yjc4LCAweDZiNzksIDB4NmI3ZiwgMHg2YjgwLAorICAgIDB4NmI4 NCwgMHg2YjgzLCAweDZiOGQsIDB4NmI5OCwgMHg2Yjk1LCAweDZiOWUsIDB4NmJhNCwgMHg2YmFh LAorICAgIDB4NmJhYiwgMHg2YmFmLCAweDZiYjIsIDB4NmJiMSwgMHg2YmIzLCAweDZiYjcsIDB4 NmJiYywgMHg2YmM2LAorICAgIDB4NmJjYiwgMHg2YmQzLCAweDZiZGYsIDB4NmJlYywgMHg2YmVi LCAweDZiZjMsIDB4NmJlZiwgMHhmZmZkLAorICAgIDB4OWViZSwgMHg2YzA4LCAweDZjMTMsIDB4 NmMxNCwgMHg2YzFiLCAweDZjMjQsIDB4NmMyMywgMHg2YzVlLAorICAgIDB4NmM1NSwgMHg2YzYy LCAweDZjNmEsIDB4NmM4MiwgMHg2YzhkLCAweDZjOWEsIDB4NmM4MSwgMHg2YzliLAorICAgIDB4 NmM3ZSwgMHg2YzY4LCAweDZjNzMsIDB4NmM5MiwgMHg2YzkwLCAweDZjYzQsIDB4NmNmMSwgMHg2 Y2QzLAorICAgIDB4NmNiZCwgMHg2Y2Q3LCAweDZjYzUsIDB4NmNkZCwgMHg2Y2FlLCAweDZjYjEs IDB4NmNiZSwgMHg2Y2JhLAorICAgIDB4NmNkYiwgMHg2Y2VmLCAweDZjZDksIDB4NmNlYSwgMHg2 ZDFmLCAweDg4NGQsIDB4NmQzNiwgMHg2ZDJiLAorICAgIDB4NmQzZCwgMHg2ZDM4LCAweDZkMTks IDB4NmQzNSwgMHg2ZDMzLCAweDZkMTIsIDB4NmQwYywgMHg2ZDYzLAorICAgIDB4NmQ5MywgMHg2 ZDY0LCAweDZkNWEsIDB4NmQ3OSwgMHg2ZDU5LCAweDZkOGUsIDB4NmQ5NSwgMHg2ZmU0LAorICAg IDB4NmQ4NSwgMHg2ZGY5LCAweDZlMTUsIDB4NmUwYSwgMHg2ZGI1LCAweDZkYzcsIDB4NmRlNiwg MHg2ZGI4LAorICAgIDB4NmRjNiwgMHg2ZGVjLCAweDZkZGUsIDB4NmRjYywgMHg2ZGU4LCAweDZk ZDIsIDB4NmRjNSwgMHg2ZGZhLAorICAgIDB4NmRkOSwgMHg2ZGU0LCAweDZkZDUsIDB4NmRlYSwg MHg2ZGVlLCAweDZlMmQsIDB4NmU2ZSwgMHg2ZTJlLAorICAgIDB4NmUxOSwgMHg2ZTcyLCAweDZl NWYsIDB4NmUzZSwgMHg2ZTIzLCAweDZlNmIsIDB4NmUyYiwgMHg2ZTc2LAorICAgIDB4NmU0ZCwg MHg2ZTFmLCAweDZlNDMsIDB4NmUzYSwgMHg2ZTRlLCAweDZlMjQsIDB4NmVmZiwgMHg2ZTFkLAor ICAgIDB4NmUzOCwgMHg2ZTgyLCAweDZlYWEsIDB4NmU5OCwgMHg2ZWM5LCAweDZlYjcsIDB4NmVk MywgMHg2ZWJkLAorICAgIDB4NmVhZiwgMHg2ZWM0LCAweDZlYjIsIDB4NmVkNCwgMHg2ZWQ1LCAw eDZlOGYsIDB4NmVhNSwgMHg2ZWMyLAorICAgIDB4NmU5ZiwgMHg2ZjQxLCAweDZmMTEsIDB4NzA0 YywgMHg2ZWVjLCAweDZlZjgsIDB4NmVmZSwgMHg2ZjNmLAorICAgIDB4NmVmMiwgMHg2ZjMxLCAw eDZlZWYsIDB4NmYzMiwgMHg2ZWNjCit9OworCitzdGF0aWMgVVNIT1JUICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogU2hpZnQtSklTIHRvIFVuaWNvZGUgKi8KK3NqdV9lMDQwW10gPSB7ICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiAweGUwNDAgdGhydSAweGVhYTQgKi8KKyAgICAweDZm M2UsIDB4NmYxMywgMHg2ZWY3LCAweDZmODYsIDB4NmY3YSwgMHg2Zjc4LCAweDZmODEsIDB4NmY4 MCwKKyAgICAweDZmNmYsIDB4NmY1YiwgMHg2ZmYzLCAweDZmNmQsIDB4NmY4MiwgMHg2ZjdjLCAw eDZmNTgsIDB4NmY4ZSwKKyAgICAweDZmOTEsIDB4NmZjMiwgMHg2ZjY2LCAweDZmYjMsIDB4NmZh MywgMHg2ZmExLCAweDZmYTQsIDB4NmZiOSwKKyAgICAweDZmYzYsIDB4NmZhYSwgMHg2ZmRmLCAw eDZmZDUsIDB4NmZlYywgMHg2ZmQ0LCAweDZmZDgsIDB4NmZmMSwKKyAgICAweDZmZWUsIDB4NmZk YiwgMHg3MDA5LCAweDcwMGIsIDB4NmZmYSwgMHg3MDExLCAweDcwMDEsIDB4NzAwZiwKKyAgICAw eDZmZmUsIDB4NzAxYiwgMHg3MDFhLCAweDZmNzQsIDB4NzAxZCwgMHg3MDE4LCAweDcwMWYsIDB4 NzAzMCwKKyAgICAweDcwM2UsIDB4NzAzMiwgMHg3MDUxLCAweDcwNjMsIDB4NzA5OSwgMHg3MDky LCAweDcwYWYsIDB4NzBmMSwKKyAgICAweDcwYWMsIDB4NzBiOCwgMHg3MGIzLCAweDcwYWUsIDB4 NzBkZiwgMHg3MGNiLCAweDcwZGQsIDB4ZmZmZCwKKyAgICAweDcwZDksIDB4NzEwOSwgMHg3MGZk LCAweDcxMWMsIDB4NzExOSwgMHg3MTY1LCAweDcxNTUsIDB4NzE4OCwKKyAgICAweDcxNjYsIDB4 NzE2MiwgMHg3MTRjLCAweDcxNTYsIDB4NzE2YywgMHg3MThmLCAweDcxZmIsIDB4NzE4NCwKKyAg ICAweDcxOTUsIDB4NzFhOCwgMHg3MWFjLCAweDcxZDcsIDB4NzFiOSwgMHg3MWJlLCAweDcxZDIs IDB4NzFjOSwKKyAgICAweDcxZDQsIDB4NzFjZSwgMHg3MWUwLCAweDcxZWMsIDB4NzFlNywgMHg3 MWY1LCAweDcxZmMsIDB4NzFmOSwKKyAgICAweDcxZmYsIDB4NzIwZCwgMHg3MjEwLCAweDcyMWIs IDB4NzIyOCwgMHg3MjJkLCAweDcyMmMsIDB4NzIzMCwKKyAgICAweDcyMzIsIDB4NzIzYiwgMHg3 MjNjLCAweDcyM2YsIDB4NzI0MCwgMHg3MjQ2LCAweDcyNGIsIDB4NzI1OCwKKyAgICAweDcyNzQs IDB4NzI3ZSwgMHg3MjgyLCAweDcyODEsIDB4NzI4NywgMHg3MjkyLCAweDcyOTYsIDB4NzJhMiwK KyAgICAweDcyYTcsIDB4NzJiOSwgMHg3MmIyLCAweDcyYzMsIDB4NzJjNiwgMHg3MmM0LCAweDcy Y2UsIDB4NzJkMiwKKyAgICAweDcyZTIsIDB4NzJlMCwgMHg3MmUxLCAweDcyZjksIDB4NzJmNywg MHg1MDBmLCAweDczMTcsIDB4NzMwYSwKKyAgICAweDczMWMsIDB4NzMxNiwgMHg3MzFkLCAweDcz MzQsIDB4NzMyZiwgMHg3MzI5LCAweDczMjUsIDB4NzMzZSwKKyAgICAweDczNGUsIDB4NzM0Ziwg MHg5ZWQ4LCAweDczNTcsIDB4NzM2YSwgMHg3MzY4LCAweDczNzAsIDB4NzM3OCwKKyAgICAweDcz NzUsIDB4NzM3YiwgMHg3MzdhLCAweDczYzgsIDB4NzNiMywgMHg3M2NlLCAweDczYmIsIDB4NzNj MCwKKyAgICAweDczZTUsIDB4NzNlZSwgMHg3M2RlLCAweDc0YTIsIDB4NzQwNSwgMHg3NDZmLCAw eDc0MjUsIDB4NzNmOCwKKyAgICAweDc0MzIsIDB4NzQzYSwgMHg3NDU1LCAweDc0M2YsIDB4NzQ1 ZiwgMHg3NDU5LCAweDc0NDEsIDB4NzQ1YywKKyAgICAweDc0NjksIDB4NzQ3MCwgMHg3NDYzLCAw eDc0NmEsIDB4NzQ3NiwgMHg3NDdlLCAweDc0OGIsIDB4NzQ5ZSwKKyAgICAweDc0YTcsIDB4NzRj YSwgMHg3NGNmLCAweDc0ZDQsIDB4NzNmMSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDc0ZTAsIDB4NzRlMywgMHg3 NGU3LCAweDc0ZTksIDB4NzRlZSwgMHg3NGYyLCAweDc0ZjAsIDB4NzRmMSwKKyAgICAweDc0Zjgs IDB4NzRmNywgMHg3NTA0LCAweDc1MDMsIDB4NzUwNSwgMHg3NTBjLCAweDc1MGUsIDB4NzUwZCwK KyAgICAweDc1MTUsIDB4NzUxMywgMHg3NTFlLCAweDc1MjYsIDB4NzUyYywgMHg3NTNjLCAweDc1 NDQsIDB4NzU0ZCwKKyAgICAweDc1NGEsIDB4NzU0OSwgMHg3NTViLCAweDc1NDYsIDB4NzU1YSwg MHg3NTY5LCAweDc1NjQsIDB4NzU2NywKKyAgICAweDc1NmIsIDB4NzU2ZCwgMHg3NTc4LCAweDc1 NzYsIDB4NzU4NiwgMHg3NTg3LCAweDc1NzQsIDB4NzU4YSwKKyAgICAweDc1ODksIDB4NzU4Miwg MHg3NTk0LCAweDc1OWEsIDB4NzU5ZCwgMHg3NWE1LCAweDc1YTMsIDB4NzVjMiwKKyAgICAweDc1 YjMsIDB4NzVjMywgMHg3NWI1LCAweDc1YmQsIDB4NzViOCwgMHg3NWJjLCAweDc1YjEsIDB4NzVj ZCwKKyAgICAweDc1Y2EsIDB4NzVkMiwgMHg3NWQ5LCAweDc1ZTMsIDB4NzVkZSwgMHg3NWZlLCAw eDc1ZmYsIDB4ZmZmZCwKKyAgICAweDc1ZmMsIDB4NzYwMSwgMHg3NWYwLCAweDc1ZmEsIDB4NzVm MiwgMHg3NWYzLCAweDc2MGIsIDB4NzYwZCwKKyAgICAweDc2MDksIDB4NzYxZiwgMHg3NjI3LCAw eDc2MjAsIDB4NzYyMSwgMHg3NjIyLCAweDc2MjQsIDB4NzYzNCwKKyAgICAweDc2MzAsIDB4NzYz YiwgMHg3NjQ3LCAweDc2NDgsIDB4NzY0NiwgMHg3NjVjLCAweDc2NTgsIDB4NzY2MSwKKyAgICAw eDc2NjIsIDB4NzY2OCwgMHg3NjY5LCAweDc2NmEsIDB4NzY2NywgMHg3NjZjLCAweDc2NzAsIDB4 NzY3MiwKKyAgICAweDc2NzYsIDB4NzY3OCwgMHg3NjdjLCAweDc2ODAsIDB4NzY4MywgMHg3Njg4 LCAweDc2OGIsIDB4NzY4ZSwKKyAgICAweDc2OTYsIDB4NzY5MywgMHg3Njk5LCAweDc2OWEsIDB4 NzZiMCwgMHg3NmI0LCAweDc2YjgsIDB4NzZiOSwKKyAgICAweDc2YmEsIDB4NzZjMiwgMHg3NmNk LCAweDc2ZDYsIDB4NzZkMiwgMHg3NmRlLCAweDc2ZTEsIDB4NzZlNSwKKyAgICAweDc2ZTcsIDB4 NzZlYSwgMHg4NjJmLCAweDc2ZmIsIDB4NzcwOCwgMHg3NzA3LCAweDc3MDQsIDB4NzcyOSwKKyAg ICAweDc3MjQsIDB4NzcxZSwgMHg3NzI1LCAweDc3MjYsIDB4NzcxYiwgMHg3NzM3LCAweDc3Mzgs IDB4Nzc0NywKKyAgICAweDc3NWEsIDB4Nzc2OCwgMHg3NzZiLCAweDc3NWIsIDB4Nzc2NSwgMHg3 NzdmLCAweDc3N2UsIDB4Nzc3OSwKKyAgICAweDc3OGUsIDB4Nzc4YiwgMHg3NzkxLCAweDc3YTAs IDB4Nzc5ZSwgMHg3N2IwLCAweDc3YjYsIDB4NzdiOSwKKyAgICAweDc3YmYsIDB4NzdiYywgMHg3 N2JkLCAweDc3YmIsIDB4NzdjNywgMHg3N2NkLCAweDc3ZDcsIDB4NzdkYSwKKyAgICAweDc3ZGMs IDB4NzdlMywgMHg3N2VlLCAweDc3ZmMsIDB4NzgwYywgMHg3ODEyLCAweDc5MjYsIDB4NzgyMCwK KyAgICAweDc5MmEsIDB4Nzg0NSwgMHg3ODhlLCAweDc4NzQsIDB4Nzg4NiwgMHg3ODdjLCAweDc4 OWEsIDB4Nzg4YywKKyAgICAweDc4YTMsIDB4NzhiNSwgMHg3OGFhLCAweDc4YWYsIDB4NzhkMSwg MHg3OGM2LCAweDc4Y2IsIDB4NzhkNCwKKyAgICAweDc4YmUsIDB4NzhiYywgMHg3OGM1LCAweDc4 Y2EsIDB4NzhlYywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDc4ZTcsIDB4NzhkYSwgMHg3OGZkLCAweDc4ZjQsIDB4 NzkwNywgMHg3OTEyLCAweDc5MTEsIDB4NzkxOSwKKyAgICAweDc5MmMsIDB4NzkyYiwgMHg3OTQw LCAweDc5NjAsIDB4Nzk1NywgMHg3OTVmLCAweDc5NWEsIDB4Nzk1NSwKKyAgICAweDc5NTMsIDB4 Nzk3YSwgMHg3OTdmLCAweDc5OGEsIDB4Nzk5ZCwgMHg3OWE3LCAweDlmNGIsIDB4NzlhYSwKKyAg ICAweDc5YWUsIDB4NzliMywgMHg3OWI5LCAweDc5YmEsIDB4NzljOSwgMHg3OWQ1LCAweDc5ZTcs IDB4NzllYywKKyAgICAweDc5ZTEsIDB4NzllMywgMHg3YTA4LCAweDdhMGQsIDB4N2ExOCwgMHg3 YTE5LCAweDdhMjAsIDB4N2ExZiwKKyAgICAweDc5ODAsIDB4N2EzMSwgMHg3YTNiLCAweDdhM2Us IDB4N2EzNywgMHg3YTQzLCAweDdhNTcsIDB4N2E0OSwKKyAgICAweDdhNjEsIDB4N2E2MiwgMHg3 YTY5LCAweDlmOWQsIDB4N2E3MCwgMHg3YTc5LCAweDdhN2QsIDB4N2E4OCwKKyAgICAweDdhOTcs IDB4N2E5NSwgMHg3YTk4LCAweDdhOTYsIDB4N2FhOSwgMHg3YWM4LCAweDdhYjAsIDB4ZmZmZCwK KyAgICAweDdhYjYsIDB4N2FjNSwgMHg3YWM0LCAweDdhYmYsIDB4OTA4MywgMHg3YWM3LCAweDdh Y2EsIDB4N2FjZCwKKyAgICAweDdhY2YsIDB4N2FkNSwgMHg3YWQzLCAweDdhZDksIDB4N2FkYSwg MHg3YWRkLCAweDdhZTEsIDB4N2FlMiwKKyAgICAweDdhZTYsIDB4N2FlZCwgMHg3YWYwLCAweDdi MDIsIDB4N2IwZiwgMHg3YjBhLCAweDdiMDYsIDB4N2IzMywKKyAgICAweDdiMTgsIDB4N2IxOSwg MHg3YjFlLCAweDdiMzUsIDB4N2IyOCwgMHg3YjM2LCAweDdiNTAsIDB4N2I3YSwKKyAgICAweDdi MDQsIDB4N2I0ZCwgMHg3YjBiLCAweDdiNGMsIDB4N2I0NSwgMHg3Yjc1LCAweDdiNjUsIDB4N2I3 NCwKKyAgICAweDdiNjcsIDB4N2I3MCwgMHg3YjcxLCAweDdiNmMsIDB4N2I2ZSwgMHg3YjlkLCAw eDdiOTgsIDB4N2I5ZiwKKyAgICAweDdiOGQsIDB4N2I5YywgMHg3YjlhLCAweDdiOGIsIDB4N2I5 MiwgMHg3YjhmLCAweDdiNWQsIDB4N2I5OSwKKyAgICAweDdiY2IsIDB4N2JjMSwgMHg3YmNjLCAw eDdiY2YsIDB4N2JiNCwgMHg3YmM2LCAweDdiZGQsIDB4N2JlOSwKKyAgICAweDdjMTEsIDB4N2Mx NCwgMHg3YmU2LCAweDdiZTUsIDB4N2M2MCwgMHg3YzAwLCAweDdjMDcsIDB4N2MxMywKKyAgICAw eDdiZjMsIDB4N2JmNywgMHg3YzE3LCAweDdjMGQsIDB4N2JmNiwgMHg3YzIzLCAweDdjMjcsIDB4 N2MyYSwKKyAgICAweDdjMWYsIDB4N2MzNywgMHg3YzJiLCAweDdjM2QsIDB4N2M0YywgMHg3YzQz LCAweDdjNTQsIDB4N2M0ZiwKKyAgICAweDdjNDAsIDB4N2M1MCwgMHg3YzU4LCAweDdjNWYsIDB4 N2M2NCwgMHg3YzU2LCAweDdjNjUsIDB4N2M2YywKKyAgICAweDdjNzUsIDB4N2M4MywgMHg3Yzkw LCAweDdjYTQsIDB4N2NhZCwgMHg3Y2EyLCAweDdjYWIsIDB4N2NhMSwKKyAgICAweDdjYTgsIDB4 N2NiMywgMHg3Y2IyLCAweDdjYjEsIDB4N2NhZSwgMHg3Y2I5LCAweDdjYmQsIDB4N2NjMCwKKyAg ICAweDdjYzUsIDB4N2NjMiwgMHg3Y2Q4LCAweDdjZDIsIDB4N2NkYywgMHg3Y2UyLCAweDliM2Is IDB4N2NlZiwKKyAgICAweDdjZjIsIDB4N2NmNCwgMHg3Y2Y2LCAweDdjZmEsIDB4N2QwNiwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweDdkMDIsIDB4N2QxYywgMHg3ZDE1LCAweDdkMGEsIDB4N2Q0NSwgMHg3ZDRiLCAw eDdkMmUsIDB4N2QzMiwKKyAgICAweDdkM2YsIDB4N2QzNSwgMHg3ZDQ2LCAweDdkNzMsIDB4N2Q1 NiwgMHg3ZDRlLCAweDdkNzIsIDB4N2Q2OCwKKyAgICAweDdkNmUsIDB4N2Q0ZiwgMHg3ZDYzLCAw eDdkOTMsIDB4N2Q4OSwgMHg3ZDViLCAweDdkOGYsIDB4N2Q3ZCwKKyAgICAweDdkOWIsIDB4N2Ri YSwgMHg3ZGFlLCAweDdkYTMsIDB4N2RiNSwgMHg3ZGM3LCAweDdkYmQsIDB4N2RhYiwKKyAgICAw eDdlM2QsIDB4N2RhMiwgMHg3ZGFmLCAweDdkZGMsIDB4N2RiOCwgMHg3ZDlmLCAweDdkYjAsIDB4 N2RkOCwKKyAgICAweDdkZGQsIDB4N2RlNCwgMHg3ZGRlLCAweDdkZmIsIDB4N2RmMiwgMHg3ZGUx LCAweDdlMDUsIDB4N2UwYSwKKyAgICAweDdlMjMsIDB4N2UyMSwgMHg3ZTEyLCAweDdlMzEsIDB4 N2UxZiwgMHg3ZTA5LCAweDdlMGIsIDB4N2UyMiwKKyAgICAweDdlNDYsIDB4N2U2NiwgMHg3ZTNi LCAweDdlMzUsIDB4N2UzOSwgMHg3ZTQzLCAweDdlMzcsIDB4ZmZmZCwKKyAgICAweDdlMzIsIDB4 N2UzYSwgMHg3ZTY3LCAweDdlNWQsIDB4N2U1NiwgMHg3ZTVlLCAweDdlNTksIDB4N2U1YSwKKyAg ICAweDdlNzksIDB4N2U2YSwgMHg3ZTY5LCAweDdlN2MsIDB4N2U3YiwgMHg3ZTgzLCAweDdkZDUs IDB4N2U3ZCwKKyAgICAweDhmYWUsIDB4N2U3ZiwgMHg3ZTg4LCAweDdlODksIDB4N2U4YywgMHg3 ZTkyLCAweDdlOTAsIDB4N2U5MywKKyAgICAweDdlOTQsIDB4N2U5NiwgMHg3ZThlLCAweDdlOWIs IDB4N2U5YywgMHg3ZjM4LCAweDdmM2EsIDB4N2Y0NSwKKyAgICAweDdmNGMsIDB4N2Y0ZCwgMHg3 ZjRlLCAweDdmNTAsIDB4N2Y1MSwgMHg3ZjU1LCAweDdmNTQsIDB4N2Y1OCwKKyAgICAweDdmNWYs IDB4N2Y2MCwgMHg3ZjY4LCAweDdmNjksIDB4N2Y2NywgMHg3Zjc4LCAweDdmODIsIDB4N2Y4NiwK KyAgICAweDdmODMsIDB4N2Y4OCwgMHg3Zjg3LCAweDdmOGMsIDB4N2Y5NCwgMHg3ZjllLCAweDdm OWQsIDB4N2Y5YSwKKyAgICAweDdmYTMsIDB4N2ZhZiwgMHg3ZmIyLCAweDdmYjksIDB4N2ZhZSwg MHg3ZmI2LCAweDdmYjgsIDB4OGI3MSwKKyAgICAweDdmYzUsIDB4N2ZjNiwgMHg3ZmNhLCAweDdm ZDUsIDB4N2ZkNCwgMHg3ZmUxLCAweDdmZTYsIDB4N2ZlOSwKKyAgICAweDdmZjMsIDB4N2ZmOSwg MHg5OGRjLCAweDgwMDYsIDB4ODAwNCwgMHg4MDBiLCAweDgwMTIsIDB4ODAxOCwKKyAgICAweDgw MTksIDB4ODAxYywgMHg4MDIxLCAweDgwMjgsIDB4ODAzZiwgMHg4MDNiLCAweDgwNGEsIDB4ODA0 NiwKKyAgICAweDgwNTIsIDB4ODA1OCwgMHg4MDVhLCAweDgwNWYsIDB4ODA2MiwgMHg4MDY4LCAw eDgwNzMsIDB4ODA3MiwKKyAgICAweDgwNzAsIDB4ODA3NiwgMHg4MDc5LCAweDgwN2QsIDB4ODA3 ZiwgMHg4MDg0LCAweDgwODYsIDB4ODA4NSwKKyAgICAweDgwOWIsIDB4ODA5MywgMHg4MDlhLCAw eDgwYWQsIDB4NTE5MCwgMHg4MGFjLCAweDgwZGIsIDB4ODBlNSwKKyAgICAweDgwZDksIDB4ODBk ZCwgMHg4MGM0LCAweDgwZGEsIDB4ODBkNiwgMHg4MTA5LCAweDgwZWYsIDB4ODBmMSwKKyAgICAw eDgxMWIsIDB4ODEyOSwgMHg4MTIzLCAweDgxMmYsIDB4ODE0YiwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDk2OGIs IDB4ODE0NiwgMHg4MTNlLCAweDgxNTMsIDB4ODE1MSwgMHg4MGZjLCAweDgxNzEsIDB4ODE2ZSwK KyAgICAweDgxNjUsIDB4ODE2NiwgMHg4MTc0LCAweDgxODMsIDB4ODE4OCwgMHg4MThhLCAweDgx ODAsIDB4ODE4MiwKKyAgICAweDgxYTAsIDB4ODE5NSwgMHg4MWE0LCAweDgxYTMsIDB4ODE1Ziwg MHg4MTkzLCAweDgxYTksIDB4ODFiMCwKKyAgICAweDgxYjUsIDB4ODFiZSwgMHg4MWI4LCAweDgx YmQsIDB4ODFjMCwgMHg4MWMyLCAweDgxYmEsIDB4ODFjOSwKKyAgICAweDgxY2QsIDB4ODFkMSwg MHg4MWQ5LCAweDgxZDgsIDB4ODFjOCwgMHg4MWRhLCAweDgxZGYsIDB4ODFlMCwKKyAgICAweDgx ZTcsIDB4ODFmYSwgMHg4MWZiLCAweDgxZmUsIDB4ODIwMSwgMHg4MjAyLCAweDgyMDUsIDB4ODIw NywKKyAgICAweDgyMGEsIDB4ODIwZCwgMHg4MjEwLCAweDgyMTYsIDB4ODIyOSwgMHg4MjJiLCAw eDgyMzgsIDB4ODIzMywKKyAgICAweDgyNDAsIDB4ODI1OSwgMHg4MjU4LCAweDgyNWQsIDB4ODI1 YSwgMHg4MjVmLCAweDgyNjQsIDB4ZmZmZCwKKyAgICAweDgyNjIsIDB4ODI2OCwgMHg4MjZhLCAw eDgyNmIsIDB4ODIyZSwgMHg4MjcxLCAweDgyNzcsIDB4ODI3OCwKKyAgICAweDgyN2UsIDB4ODI4 ZCwgMHg4MjkyLCAweDgyYWIsIDB4ODI5ZiwgMHg4MmJiLCAweDgyYWMsIDB4ODJlMSwKKyAgICAw eDgyZTMsIDB4ODJkZiwgMHg4MmQyLCAweDgyZjQsIDB4ODJmMywgMHg4MmZhLCAweDgzOTMsIDB4 ODMwMywKKyAgICAweDgyZmIsIDB4ODJmOSwgMHg4MmRlLCAweDgzMDYsIDB4ODJkYywgMHg4MzA5 LCAweDgyZDksIDB4ODMzNSwKKyAgICAweDgzMzQsIDB4ODMxNiwgMHg4MzMyLCAweDgzMzEsIDB4 ODM0MCwgMHg4MzM5LCAweDgzNTAsIDB4ODM0NSwKKyAgICAweDgzMmYsIDB4ODMyYiwgMHg4MzE3 LCAweDgzMTgsIDB4ODM4NSwgMHg4MzlhLCAweDgzYWEsIDB4ODM5ZiwKKyAgICAweDgzYTIsIDB4 ODM5NiwgMHg4MzIzLCAweDgzOGUsIDB4ODM4NywgMHg4MzhhLCAweDgzN2MsIDB4ODNiNSwKKyAg ICAweDgzNzMsIDB4ODM3NSwgMHg4M2EwLCAweDgzODksIDB4ODNhOCwgMHg4M2Y0LCAweDg0MTMs IDB4ODNlYiwKKyAgICAweDgzY2UsIDB4ODNmZCwgMHg4NDAzLCAweDgzZDgsIDB4ODQwYiwgMHg4 M2MxLCAweDgzZjcsIDB4ODQwNywKKyAgICAweDgzZTAsIDB4ODNmMiwgMHg4NDBkLCAweDg0MjIs IDB4ODQyMCwgMHg4M2JkLCAweDg0MzgsIDB4ODUwNiwKKyAgICAweDgzZmIsIDB4ODQ2ZCwgMHg4 NDJhLCAweDg0M2MsIDB4ODU1YSwgMHg4NDg0LCAweDg0NzcsIDB4ODQ2YiwKKyAgICAweDg0YWQs IDB4ODQ2ZSwgMHg4NDgyLCAweDg0NjksIDB4ODQ0NiwgMHg4NDJjLCAweDg0NmYsIDB4ODQ3OSwK KyAgICAweDg0MzUsIDB4ODRjYSwgMHg4NDYyLCAweDg0YjksIDB4ODRiZiwgMHg4NDlmLCAweDg0 ZDksIDB4ODRjZCwKKyAgICAweDg0YmIsIDB4ODRkYSwgMHg4NGQwLCAweDg0YzEsIDB4ODRjNiwg MHg4NGQ2LCAweDg0YTEsIDB4ODUyMSwKKyAgICAweDg0ZmYsIDB4ODRmNCwgMHg4NTE3LCAweDg1 MTgsIDB4ODUyYywgMHg4NTFmLCAweDg1MTUsIDB4ODUxNCwKKyAgICAweDg0ZmMsIDB4ODU0MCwg MHg4NTYzLCAweDg1NTgsIDB4ODU0OCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDg1NDEsIDB4ODYwMiwgMHg4NTRi LCAweDg1NTUsIDB4ODU4MCwgMHg4NWE0LCAweDg1ODgsIDB4ODU5MSwKKyAgICAweDg1OGEsIDB4 ODVhOCwgMHg4NTZkLCAweDg1OTQsIDB4ODU5YiwgMHg4NWVhLCAweDg1ODcsIDB4ODU5YywKKyAg ICAweDg1NzcsIDB4ODU3ZSwgMHg4NTkwLCAweDg1YzksIDB4ODViYSwgMHg4NWNmLCAweDg1Yjks IDB4ODVkMCwKKyAgICAweDg1ZDUsIDB4ODVkZCwgMHg4NWU1LCAweDg1ZGMsIDB4ODVmOSwgMHg4 NjBhLCAweDg2MTMsIDB4ODYwYiwKKyAgICAweDg1ZmUsIDB4ODVmYSwgMHg4NjA2LCAweDg2MjIs IDB4ODYxYSwgMHg4NjMwLCAweDg2M2YsIDB4ODY0ZCwKKyAgICAweDRlNTUsIDB4ODY1NCwgMHg4 NjVmLCAweDg2NjcsIDB4ODY3MSwgMHg4NjkzLCAweDg2YTMsIDB4ODZhOSwKKyAgICAweDg2YWEs IDB4ODY4YiwgMHg4NjhjLCAweDg2YjYsIDB4ODZhZiwgMHg4NmM0LCAweDg2YzYsIDB4ODZiMCwK KyAgICAweDg2YzksIDB4ODgyMywgMHg4NmFiLCAweDg2ZDQsIDB4ODZkZSwgMHg4NmU5LCAweDg2 ZWMsIDB4ZmZmZCwKKyAgICAweDg2ZGYsIDB4ODZkYiwgMHg4NmVmLCAweDg3MTIsIDB4ODcwNiwg MHg4NzA4LCAweDg3MDAsIDB4ODcwMywKKyAgICAweDg2ZmIsIDB4ODcxMSwgMHg4NzA5LCAweDg3 MGQsIDB4ODZmOSwgMHg4NzBhLCAweDg3MzQsIDB4ODczZiwKKyAgICAweDg3MzcsIDB4ODczYiwg MHg4NzI1LCAweDg3MjksIDB4ODcxYSwgMHg4NzYwLCAweDg3NWYsIDB4ODc3OCwKKyAgICAweDg3 NGMsIDB4ODc0ZSwgMHg4Nzc0LCAweDg3NTcsIDB4ODc2OCwgMHg4NzZlLCAweDg3NTksIDB4ODc1 MywKKyAgICAweDg3NjMsIDB4ODc2YSwgMHg4ODA1LCAweDg3YTIsIDB4ODc5ZiwgMHg4NzgyLCAw eDg3YWYsIDB4ODdjYiwKKyAgICAweDg3YmQsIDB4ODdjMCwgMHg4N2QwLCAweDk2ZDYsIDB4ODdh YiwgMHg4N2M0LCAweDg3YjMsIDB4ODdjNywKKyAgICAweDg3YzYsIDB4ODdiYiwgMHg4N2VmLCAw eDg3ZjIsIDB4ODdlMCwgMHg4ODBmLCAweDg4MGQsIDB4ODdmZSwKKyAgICAweDg3ZjYsIDB4ODdm NywgMHg4ODBlLCAweDg3ZDIsIDB4ODgxMSwgMHg4ODE2LCAweDg4MTUsIDB4ODgyMiwKKyAgICAw eDg4MjEsIDB4ODgzMSwgMHg4ODM2LCAweDg4MzksIDB4ODgyNywgMHg4ODNiLCAweDg4NDQsIDB4 ODg0MiwKKyAgICAweDg4NTIsIDB4ODg1OSwgMHg4ODVlLCAweDg4NjIsIDB4ODg2YiwgMHg4ODgx LCAweDg4N2UsIDB4ODg5ZSwKKyAgICAweDg4NzUsIDB4ODg3ZCwgMHg4OGI1LCAweDg4NzIsIDB4 ODg4MiwgMHg4ODk3LCAweDg4OTIsIDB4ODhhZSwKKyAgICAweDg4OTksIDB4ODhhMiwgMHg4ODhk LCAweDg4YTQsIDB4ODhiMCwgMHg4OGJmLCAweDg4YjEsIDB4ODhjMywKKyAgICAweDg4YzQsIDB4 ODhkNCwgMHg4OGQ4LCAweDg4ZDksIDB4ODhkZCwgMHg4OGY5LCAweDg5MDIsIDB4ODhmYywKKyAg ICAweDg4ZjQsIDB4ODhlOCwgMHg4OGYyLCAweDg5MDQsIDB4ODkwYywgMHg4OTBhLCAweDg5MTMs IDB4ODk0MywKKyAgICAweDg5MWUsIDB4ODkyNSwgMHg4OTJhLCAweDg5MmIsIDB4ODk0MSwgMHg4 OTQ0LCAweDg5M2IsIDB4ODkzNiwKKyAgICAweDg5MzgsIDB4ODk0YywgMHg4OTFkLCAweDg5NjAs IDB4ODk1ZSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweDg5NjYsIDB4ODk2NCwgMHg4OTZkLCAweDg5NmEsIDB4ODk2 ZiwgMHg4OTc0LCAweDg5NzcsIDB4ODk3ZSwKKyAgICAweDg5ODMsIDB4ODk4OCwgMHg4OThhLCAw eDg5OTMsIDB4ODk5OCwgMHg4OWExLCAweDg5YTksIDB4ODlhNiwKKyAgICAweDg5YWMsIDB4ODlh ZiwgMHg4OWIyLCAweDg5YmEsIDB4ODliZCwgMHg4OWJmLCAweDg5YzAsIDB4ODlkYSwKKyAgICAw eDg5ZGMsIDB4ODlkZCwgMHg4OWU3LCAweDg5ZjQsIDB4ODlmOCwgMHg4YTAzLCAweDhhMTYsIDB4 OGExMCwKKyAgICAweDhhMGMsIDB4OGExYiwgMHg4YTFkLCAweDhhMjUsIDB4OGEzNiwgMHg4YTQx LCAweDhhNWIsIDB4OGE1MiwKKyAgICAweDhhNDYsIDB4OGE0OCwgMHg4YTdjLCAweDhhNmQsIDB4 OGE2YywgMHg4YTYyLCAweDhhODUsIDB4OGE4MiwKKyAgICAweDhhODQsIDB4OGFhOCwgMHg4YWEx LCAweDhhOTEsIDB4OGFhNSwgMHg4YWE2LCAweDhhOWEsIDB4OGFhMywKKyAgICAweDhhYzQsIDB4 OGFjZCwgMHg4YWMyLCAweDhhZGEsIDB4OGFlYiwgMHg4YWYzLCAweDhhZTcsIDB4ZmZmZCwKKyAg ICAweDhhZTQsIDB4OGFmMSwgMHg4YjE0LCAweDhhZTAsIDB4OGFlMiwgMHg4YWY3LCAweDhhZGUs IDB4OGFkYiwKKyAgICAweDhiMGMsIDB4OGIwNywgMHg4YjFhLCAweDhhZTEsIDB4OGIxNiwgMHg4 YjEwLCAweDhiMTcsIDB4OGIyMCwKKyAgICAweDhiMzMsIDB4OTdhYiwgMHg4YjI2LCAweDhiMmIs IDB4OGIzZSwgMHg4YjI4LCAweDhiNDEsIDB4OGI0YywKKyAgICAweDhiNGYsIDB4OGI0ZSwgMHg4 YjQ5LCAweDhiNTYsIDB4OGI1YiwgMHg4YjVhLCAweDhiNmIsIDB4OGI1ZiwKKyAgICAweDhiNmMs IDB4OGI2ZiwgMHg4Yjc0LCAweDhiN2QsIDB4OGI4MCwgMHg4YjhjLCAweDhiOGUsIDB4OGI5MiwK KyAgICAweDhiOTMsIDB4OGI5NiwgMHg4Yjk5LCAweDhiOWEsIDB4OGMzYSwgMHg4YzQxLCAweDhj M2YsIDB4OGM0OCwKKyAgICAweDhjNGMsIDB4OGM0ZSwgMHg4YzUwLCAweDhjNTUsIDB4OGM2Miwg MHg4YzZjLCAweDhjNzgsIDB4OGM3YSwKKyAgICAweDhjODIsIDB4OGM4OSwgMHg4Yzg1LCAweDhj OGEsIDB4OGM4ZCwgMHg4YzhlLCAweDhjOTQsIDB4OGM3YywKKyAgICAweDhjOTgsIDB4NjIxZCwg MHg4Y2FkLCAweDhjYWEsIDB4OGNiZCwgMHg4Y2IyLCAweDhjYjMsIDB4OGNhZSwKKyAgICAweDhj YjYsIDB4OGNjOCwgMHg4Y2MxLCAweDhjZTQsIDB4OGNlMywgMHg4Y2RhLCAweDhjZmQsIDB4OGNm YSwKKyAgICAweDhjZmIsIDB4OGQwNCwgMHg4ZDA1LCAweDhkMGEsIDB4OGQwNywgMHg4ZDBmLCAw eDhkMGQsIDB4OGQxMCwKKyAgICAweDlmNGUsIDB4OGQxMywgMHg4Y2NkLCAweDhkMTQsIDB4OGQx NiwgMHg4ZDY3LCAweDhkNmQsIDB4OGQ3MSwKKyAgICAweDhkNzMsIDB4OGQ4MSwgMHg4ZDk5LCAw eDhkYzIsIDB4OGRiZSwgMHg4ZGJhLCAweDhkY2YsIDB4OGRkYSwKKyAgICAweDhkZDYsIDB4OGRj YywgMHg4ZGRiLCAweDhkY2IsIDB4OGRlYSwgMHg4ZGViLCAweDhkZGYsIDB4OGRlMywKKyAgICAw eDhkZmMsIDB4OGUwOCwgMHg4ZTA5LCAweDhkZmYsIDB4OGUxZCwgMHg4ZTFlLCAweDhlMTAsIDB4 OGUxZiwKKyAgICAweDhlNDIsIDB4OGUzNSwgMHg4ZTMwLCAweDhlMzQsIDB4OGU0YSwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwK KyAgICAweDhlNDcsIDB4OGU0OSwgMHg4ZTRjLCAweDhlNTAsIDB4OGU0OCwgMHg4ZTU5LCAweDhl NjQsIDB4OGU2MCwKKyAgICAweDhlMmEsIDB4OGU2MywgMHg4ZTU1LCAweDhlNzYsIDB4OGU3Miwg MHg4ZTdjLCAweDhlODEsIDB4OGU4NywKKyAgICAweDhlODUsIDB4OGU4NCwgMHg4ZThiLCAweDhl OGEsIDB4OGU5MywgMHg4ZTkxLCAweDhlOTQsIDB4OGU5OSwKKyAgICAweDhlYWEsIDB4OGVhMSwg MHg4ZWFjLCAweDhlYjAsIDB4OGVjNiwgMHg4ZWIxLCAweDhlYmUsIDB4OGVjNSwKKyAgICAweDhl YzgsIDB4OGVjYiwgMHg4ZWRiLCAweDhlZTMsIDB4OGVmYywgMHg4ZWZiLCAweDhlZWIsIDB4OGVm ZSwKKyAgICAweDhmMGEsIDB4OGYwNSwgMHg4ZjE1LCAweDhmMTIsIDB4OGYxOSwgMHg4ZjEzLCAw eDhmMWMsIDB4OGYxZiwKKyAgICAweDhmMWIsIDB4OGYwYywgMHg4ZjI2LCAweDhmMzMsIDB4OGYz YiwgMHg4ZjM5LCAweDhmNDUsIDB4OGY0MiwKKyAgICAweDhmM2UsIDB4OGY0YywgMHg4ZjQ5LCAw eDhmNDYsIDB4OGY0ZSwgMHg4ZjU3LCAweDhmNWMsIDB4ZmZmZCwKKyAgICAweDhmNjIsIDB4OGY2 MywgMHg4ZjY0LCAweDhmOWMsIDB4OGY5ZiwgMHg4ZmEzLCAweDhmYWQsIDB4OGZhZiwKKyAgICAw eDhmYjcsIDB4OGZkYSwgMHg4ZmU1LCAweDhmZTIsIDB4OGZlYSwgMHg4ZmVmLCAweDkwODcsIDB4 OGZmNCwKKyAgICAweDkwMDUsIDB4OGZmOSwgMHg4ZmZhLCAweDkwMTEsIDB4OTAxNSwgMHg5MDIx LCAweDkwMGQsIDB4OTAxZSwKKyAgICAweDkwMTYsIDB4OTAwYiwgMHg5MDI3LCAweDkwMzYsIDB4 OTAzNSwgMHg5MDM5LCAweDhmZjgsIDB4OTA0ZiwKKyAgICAweDkwNTAsIDB4OTA1MSwgMHg5MDUy LCAweDkwMGUsIDB4OTA0OSwgMHg5MDNlLCAweDkwNTYsIDB4OTA1OCwKKyAgICAweDkwNWUsIDB4 OTA2OCwgMHg5MDZmLCAweDkwNzYsIDB4OTZhOCwgMHg5MDcyLCAweDkwODIsIDB4OTA3ZCwKKyAg ICAweDkwODEsIDB4OTA4MCwgMHg5MDhhLCAweDkwODksIDB4OTA4ZiwgMHg5MGE4LCAweDkwYWYs IDB4OTBiMSwKKyAgICAweDkwYjUsIDB4OTBlMiwgMHg5MGU0LCAweDYyNDgsIDB4OTBkYiwgMHg5 MTAyLCAweDkxMTIsIDB4OTExOSwKKyAgICAweDkxMzIsIDB4OTEzMCwgMHg5MTRhLCAweDkxNTYs IDB4OTE1OCwgMHg5MTYzLCAweDkxNjUsIDB4OTE2OSwKKyAgICAweDkxNzMsIDB4OTE3MiwgMHg5 MThiLCAweDkxODksIDB4OTE4MiwgMHg5MWEyLCAweDkxYWIsIDB4OTFhZiwKKyAgICAweDkxYWEs IDB4OTFiNSwgMHg5MWI0LCAweDkxYmEsIDB4OTFjMCwgMHg5MWMxLCAweDkxYzksIDB4OTFjYiwK KyAgICAweDkxZDAsIDB4OTFkNiwgMHg5MWRmLCAweDkxZTEsIDB4OTFkYiwgMHg5MWZjLCAweDkx ZjUsIDB4OTFmNiwKKyAgICAweDkyMWUsIDB4OTFmZiwgMHg5MjE0LCAweDkyMmMsIDB4OTIxNSwg MHg5MjExLCAweDkyNWUsIDB4OTI1NywKKyAgICAweDkyNDUsIDB4OTI0OSwgMHg5MjY0LCAweDky NDgsIDB4OTI5NSwgMHg5MjNmLCAweDkyNGIsIDB4OTI1MCwKKyAgICAweDkyOWMsIDB4OTI5Niwg MHg5MjkzLCAweDkyOWIsIDB4OTI1YSwgMHg5MmNmLCAweDkyYjksIDB4OTJiNywKKyAgICAweDky ZTksIDB4OTMwZiwgMHg5MmZhLCAweDkzNDQsIDB4OTMyZSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDkzMTksIDB4 OTMyMiwgMHg5MzFhLCAweDkzMjMsIDB4OTMzYSwgMHg5MzM1LCAweDkzM2IsIDB4OTM1YywKKyAg ICAweDkzNjAsIDB4OTM3YywgMHg5MzZlLCAweDkzNTYsIDB4OTNiMCwgMHg5M2FjLCAweDkzYWQs IDB4OTM5NCwKKyAgICAweDkzYjksIDB4OTNkNiwgMHg5M2Q3LCAweDkzZTgsIDB4OTNlNSwgMHg5 M2Q4LCAweDkzYzMsIDB4OTNkZCwKKyAgICAweDkzZDAsIDB4OTNjOCwgMHg5M2U0LCAweDk0MWEs IDB4OTQxNCwgMHg5NDEzLCAweDk0MDMsIDB4OTQwNywKKyAgICAweDk0MTAsIDB4OTQzNiwgMHg5 NDJiLCAweDk0MzUsIDB4OTQyMSwgMHg5NDNhLCAweDk0NDEsIDB4OTQ1MiwKKyAgICAweDk0NDQs IDB4OTQ1YiwgMHg5NDYwLCAweDk0NjIsIDB4OTQ1ZSwgMHg5NDZhLCAweDkyMjksIDB4OTQ3MCwK KyAgICAweDk0NzUsIDB4OTQ3NywgMHg5NDdkLCAweDk0NWEsIDB4OTQ3YywgMHg5NDdlLCAweDk0 ODEsIDB4OTQ3ZiwKKyAgICAweDk1ODIsIDB4OTU4NywgMHg5NThhLCAweDk1OTQsIDB4OTU5Niwg MHg5NTk4LCAweDk1OTksIDB4ZmZmZCwKKyAgICAweDk1YTAsIDB4OTVhOCwgMHg5NWE3LCAweDk1 YWQsIDB4OTViYywgMHg5NWJiLCAweDk1YjksIDB4OTViZSwKKyAgICAweDk1Y2EsIDB4NmZmNiwg MHg5NWMzLCAweDk1Y2QsIDB4OTVjYywgMHg5NWQ1LCAweDk1ZDQsIDB4OTVkNiwKKyAgICAweDk1 ZGMsIDB4OTVlMSwgMHg5NWU1LCAweDk1ZTIsIDB4OTYyMSwgMHg5NjI4LCAweDk2MmUsIDB4OTYy ZiwKKyAgICAweDk2NDIsIDB4OTY0YywgMHg5NjRmLCAweDk2NGIsIDB4OTY3NywgMHg5NjVjLCAw eDk2NWUsIDB4OTY1ZCwKKyAgICAweDk2NWYsIDB4OTY2NiwgMHg5NjcyLCAweDk2NmMsIDB4OTY4 ZCwgMHg5Njk4LCAweDk2OTUsIDB4OTY5NywKKyAgICAweDk2YWEsIDB4OTZhNywgMHg5NmIxLCAw eDk2YjIsIDB4OTZiMCwgMHg5NmI0LCAweDk2YjYsIDB4OTZiOCwKKyAgICAweDk2YjksIDB4OTZj ZSwgMHg5NmNiLCAweDk2YzksIDB4OTZjZCwgMHg4OTRkLCAweDk2ZGMsIDB4OTcwZCwKKyAgICAw eDk2ZDUsIDB4OTZmOSwgMHg5NzA0LCAweDk3MDYsIDB4OTcwOCwgMHg5NzEzLCAweDk3MGUsIDB4 OTcxMSwKKyAgICAweDk3MGYsIDB4OTcxNiwgMHg5NzE5LCAweDk3MjQsIDB4OTcyYSwgMHg5NzMw LCAweDk3MzksIDB4OTczZCwKKyAgICAweDk3M2UsIDB4OTc0NCwgMHg5NzQ2LCAweDk3NDgsIDB4 OTc0MiwgMHg5NzQ5LCAweDk3NWMsIDB4OTc2MCwKKyAgICAweDk3NjQsIDB4OTc2NiwgMHg5NzY4 LCAweDUyZDIsIDB4OTc2YiwgMHg5NzcxLCAweDk3NzksIDB4OTc4NSwKKyAgICAweDk3N2MsIDB4 OTc4MSwgMHg5NzdhLCAweDk3ODYsIDB4OTc4YiwgMHg5NzhmLCAweDk3OTAsIDB4OTc5YywKKyAg ICAweDk3YTgsIDB4OTdhNiwgMHg5N2EzLCAweDk3YjMsIDB4OTdiNCwgMHg5N2MzLCAweDk3YzYs IDB4OTdjOCwKKyAgICAweDk3Y2IsIDB4OTdkYywgMHg5N2VkLCAweDlmNGYsIDB4OTdmMiwgMHg3 YWRmLCAweDk3ZjYsIDB4OTdmNSwKKyAgICAweDk4MGYsIDB4OTgwYywgMHg5ODM4LCAweDk4MjQs IDB4OTgyMSwgMHg5ODM3LCAweDk4M2QsIDB4OTg0NiwKKyAgICAweDk4NGYsIDB4OTg0YiwgMHg5 ODZiLCAweDk4NmYsIDB4OTg3MCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDk4NzEsIDB4OTg3NCwgMHg5ODczLCAw eDk4YWEsIDB4OThhZiwgMHg5OGIxLCAweDk4YjYsIDB4OThjNCwKKyAgICAweDk4YzMsIDB4OThj NiwgMHg5OGU5LCAweDk4ZWIsIDB4OTkwMywgMHg5OTA5LCAweDk5MTIsIDB4OTkxNCwKKyAgICAw eDk5MTgsIDB4OTkyMSwgMHg5OTFkLCAweDk5MWUsIDB4OTkyNCwgMHg5OTIwLCAweDk5MmMsIDB4 OTkyZSwKKyAgICAweDk5M2QsIDB4OTkzZSwgMHg5OTQyLCAweDk5NDksIDB4OTk0NSwgMHg5OTUw LCAweDk5NGIsIDB4OTk1MSwKKyAgICAweDk5NTIsIDB4OTk0YywgMHg5OTU1LCAweDk5OTcsIDB4 OTk5OCwgMHg5OWE1LCAweDk5YWQsIDB4OTlhZSwKKyAgICAweDk5YmMsIDB4OTlkZiwgMHg5OWRi LCAweDk5ZGQsIDB4OTlkOCwgMHg5OWQxLCAweDk5ZWQsIDB4OTllZSwKKyAgICAweDk5ZjEsIDB4 OTlmMiwgMHg5OWZiLCAweDk5ZjgsIDB4OWEwMSwgMHg5YTBmLCAweDlhMDUsIDB4OTllMiwKKyAg ICAweDlhMTksIDB4OWEyYiwgMHg5YTM3LCAweDlhNDUsIDB4OWE0MiwgMHg5YTQwLCAweDlhNDMs IDB4ZmZmZCwKKyAgICAweDlhM2UsIDB4OWE1NSwgMHg5YTRkLCAweDlhNWIsIDB4OWE1NywgMHg5 YTVmLCAweDlhNjIsIDB4OWE2NSwKKyAgICAweDlhNjQsIDB4OWE2OSwgMHg5YTZiLCAweDlhNmEs IDB4OWFhZCwgMHg5YWIwLCAweDlhYmMsIDB4OWFjMCwKKyAgICAweDlhY2YsIDB4OWFkMSwgMHg5 YWQzLCAweDlhZDQsIDB4OWFkZSwgMHg5YWRmLCAweDlhZTIsIDB4OWFlMywKKyAgICAweDlhZTYs IDB4OWFlZiwgMHg5YWViLCAweDlhZWUsIDB4OWFmNCwgMHg5YWYxLCAweDlhZjcsIDB4OWFmYiwK KyAgICAweDliMDYsIDB4OWIxOCwgMHg5YjFhLCAweDliMWYsIDB4OWIyMiwgMHg5YjIzLCAweDli MjUsIDB4OWIyNywKKyAgICAweDliMjgsIDB4OWIyOSwgMHg5YjJhLCAweDliMmUsIDB4OWIyZiwg MHg5YjMyLCAweDliNDQsIDB4OWI0MywKKyAgICAweDliNGYsIDB4OWI0ZCwgMHg5YjRlLCAweDli NTEsIDB4OWI1OCwgMHg5Yjc0LCAweDliOTMsIDB4OWI4MywKKyAgICAweDliOTEsIDB4OWI5Niwg MHg5Yjk3LCAweDliOWYsIDB4OWJhMCwgMHg5YmE4LCAweDliYjQsIDB4OWJjMCwKKyAgICAweDli Y2EsIDB4OWJiOSwgMHg5YmM2LCAweDliY2YsIDB4OWJkMSwgMHg5YmQyLCAweDliZTMsIDB4OWJl MiwKKyAgICAweDliZTQsIDB4OWJkNCwgMHg5YmUxLCAweDljM2EsIDB4OWJmMiwgMHg5YmYxLCAw eDliZjAsIDB4OWMxNSwKKyAgICAweDljMTQsIDB4OWMwOSwgMHg5YzEzLCAweDljMGMsIDB4OWMw NiwgMHg5YzA4LCAweDljMTIsIDB4OWMwYSwKKyAgICAweDljMDQsIDB4OWMyZSwgMHg5YzFiLCAw eDljMjUsIDB4OWMyNCwgMHg5YzIxLCAweDljMzAsIDB4OWM0NywKKyAgICAweDljMzIsIDB4OWM0 NiwgMHg5YzNlLCAweDljNWEsIDB4OWM2MCwgMHg5YzY3LCAweDljNzYsIDB4OWM3OCwKKyAgICAw eDljZTcsIDB4OWNlYywgMHg5Y2YwLCAweDlkMDksIDB4OWQwOCwgMHg5Y2ViLCAweDlkMDMsIDB4 OWQwNiwKKyAgICAweDlkMmEsIDB4OWQyNiwgMHg5ZGFmLCAweDlkMjMsIDB4OWQxZiwgMHg5ZDQ0 LCAweDlkMTUsIDB4OWQxMiwKKyAgICAweDlkNDEsIDB4OWQzZiwgMHg5ZDNlLCAweDlkNDYsIDB4 OWQ0OCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweDlkNWQsIDB4OWQ1ZSwgMHg5ZDY0LCAweDlkNTEsIDB4OWQ1MCwg MHg5ZDU5LCAweDlkNzIsIDB4OWQ4OSwKKyAgICAweDlkODcsIDB4OWRhYiwgMHg5ZDZmLCAweDlk N2EsIDB4OWQ5YSwgMHg5ZGE0LCAweDlkYTksIDB4OWRiMiwKKyAgICAweDlkYzQsIDB4OWRjMSwg MHg5ZGJiLCAweDlkYjgsIDB4OWRiYSwgMHg5ZGM2LCAweDlkY2YsIDB4OWRjMiwKKyAgICAweDlk ZDksIDB4OWRkMywgMHg5ZGY4LCAweDlkZTYsIDB4OWRlZCwgMHg5ZGVmLCAweDlkZmQsIDB4OWUx YSwKKyAgICAweDllMWIsIDB4OWUxZSwgMHg5ZTc1LCAweDllNzksIDB4OWU3ZCwgMHg5ZTgxLCAw eDllODgsIDB4OWU4YiwKKyAgICAweDllOGMsIDB4OWU5MiwgMHg5ZTk1LCAweDllOTEsIDB4OWU5 ZCwgMHg5ZWE1LCAweDllYTksIDB4OWViOCwKKyAgICAweDllYWEsIDB4OWVhZCwgMHg5NzYxLCAw eDllY2MsIDB4OWVjZSwgMHg5ZWNmLCAweDllZDAsIDB4OWVkNCwKKyAgICAweDllZGMsIDB4OWVk ZSwgMHg5ZWRkLCAweDllZTAsIDB4OWVlNSwgMHg5ZWU4LCAweDllZWYsIDB4ZmZmZCwKKyAgICAw eDllZjQsIDB4OWVmNiwgMHg5ZWY3LCAweDllZjksIDB4OWVmYiwgMHg5ZWZjLCAweDllZmQsIDB4 OWYwNywKKyAgICAweDlmMDgsIDB4NzZiNywgMHg5ZjE1LCAweDlmMjEsIDB4OWYyYywgMHg5ZjNl LCAweDlmNGEsIDB4OWY1MiwKKyAgICAweDlmNTQsIDB4OWY2MywgMHg5ZjVmLCAweDlmNjAsIDB4 OWY2MSwgMHg5ZjY2LCAweDlmNjcsIDB4OWY2YywKKyAgICAweDlmNmEsIDB4OWY3NywgMHg5Zjcy LCAweDlmNzYsIDB4OWY5NSwgMHg5ZjljLCAweDlmYTAsIDB4NTgyZiwKKyAgICAweDY5YzcsIDB4 OTA1OSwgMHg3NDY0LCAweDUxZGMsIDB4NzE5OQorfTsKKworLyogVW5pY29kZS10by1LYW5qaSB0 YWJsZXMuLi4gKi8KKworc3RhdGljIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IFVuaWNvZGUgdG8gU2hpZnQtSklTICovCit1c2pfMDM5MVtdID0geyAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogMHgwMzkxIHRocnUgMHgwMzljICovCisgICAgMHg4MzlmLCAweDgzYTAsIDB4 ODNhMSwgMHg4M2EyLCAweDgzYTMsIDB4ODNhNCwgMHg4M2E1LCAweDgzYTYsCisgICAgMHg4M2E3 LCAweDgzYTgsIDB4ODNhOSwgMHg4M2FhLCAweDgzYWIsIDB4ODNhYywgMHg4M2FkLCAweDgzYWUs CisgICAgMHg4M2FmLCAweGZmZmQsIDB4ODNiMCwgMHg4M2IxLCAweDgzYjIsIDB4ODNiMywgMHg4 M2I0LCAweDgzYjUsCisgICAgMHg4M2I2LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCisgICAgMHg4M2JmLCAweDgzYzAsIDB4ODNjMSwgMHg4 M2MyLCAweDgzYzMsIDB4ODNjNCwgMHg4M2M1LCAweDgzYzYsCisgICAgMHg4M2M3LCAweDgzYzgs IDB4ODNjOSwgMHg4M2NhLCAweDgzY2IsIDB4ODNjYywgMHg4M2NkLCAweDgzY2UsCisgICAgMHg4 M2NmLCAweGZmZmQsIDB4ODNkMCwgMHg4M2QxLCAweDgzZDIsIDB4ODNkMywgMHg4M2Q0LCAweDgz ZDUsIDB4ODNkNgorfTsKKworc3RhdGljIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIFVuaWNvZGUgdG8gU2hpZnQtSklTICovCit1c2pfMDQwMVtdID0geyAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogMHgwNDAxIHRocnUgMHgwNDUxICovCisgICAgMHg4NDQ2LCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCisgICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDg0 NDAsCisgICAgMHg4NDQxLCAweDg0NDIsIDB4ODQ0MywgMHg4NDQ0LCAweDg0NDUsIDB4ODQ0Nywg MHg4NDQ4LCAweDg0NDksCisgICAgMHg4NDRhLCAweDg0NGIsIDB4ODQ0YywgMHg4NDRkLCAweDg0 NGUsIDB4ODQ0ZiwgMHg4NDUwLCAweDg0NTEsCisgICAgMHg4NDUyLCAweDg0NTMsIDB4ODQ1NCwg MHg4NDU1LCAweDg0NTYsIDB4ODQ1NywgMHg4NDU4LCAweDg0NTksCisgICAgMHg4NDVhLCAweDg0 NWIsIDB4ODQ1YywgMHg4NDVkLCAweDg0NWUsIDB4ODQ1ZiwgMHg4NDYwLCAweDg0NzAsCisgICAg MHg4NDcxLCAweDg0NzIsIDB4ODQ3MywgMHg4NDc0LCAweDg0NzUsIDB4ODQ3NywgMHg4NDc4LCAw eDg0NzksCisgICAgMHg4NDdhLCAweDg0N2IsIDB4ODQ3YywgMHg4NDdkLCAweDg0N2UsIDB4ODQ4 MCwgMHg4NDgxLCAweDg0ODIsCisgICAgMHg4NDgzLCAweDg0ODQsIDB4ODQ4NSwgMHg4NDg2LCAw eDg0ODcsIDB4ODQ4OCwgMHg4NDg5LCAweDg0OGEsCisgICAgMHg4NDhiLCAweDg0OGMsIDB4ODQ4 ZCwgMHg4NDhlLCAweDg0OGYsIDB4ODQ5MCwgMHg4NDkxLCAweGZmZmQsIDB4ODQ3NgorfTsKKwor c3RhdGljIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVuaWNvZGUgdG8gU2hp ZnQtSklTICovCit1c2pfMzAwMFtdID0geyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgz MDAwIHRocnUgMHgzMGZmICovCisgICAgMHg4MTQwLCAweDgxNDEsIDB4ODE0MiwgMHg4MTU2LCAw eGZmZmQsIDB4ODE1OCwgMHg4MTU5LCAweDgxNWEsCisgICAgMHg4MTcxLCAweDgxNzIsIDB4ODE3 MywgMHg4MTc0LCAweDgxNzUsIDB4ODE3NiwgMHg4MTc3LCAweDgxNzgsCisgICAgMHg4MTc5LCAw eDgxN2EsIDB4ODFhNywgMHg4MWFjLCAweDgxNmIsIDB4ODE2YywgMHhmZmZkLCAweGZmZmQsCisg ICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDgxNjAsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsCisgICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsCisgICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCisgICAgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCisgICAgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs CisgICAgMHhmZmZkLCAweDgyOWYsIDB4ODJhMCwgMHg4MmExLCAweDgyYTIsIDB4ODJhMywgMHg4 MmE0LCAweDgyYTUsCisgICAgMHg4MmE2LCAweDgyYTcsIDB4ODJhOCwgMHg4MmE5LCAweDgyYWEs IDB4ODJhYiwgMHg4MmFjLCAweDgyYWQsCisgICAgMHg4MmFlLCAweDgyYWYsIDB4ODJiMCwgMHg4 MmIxLCAweDgyYjIsIDB4ODJiMywgMHg4MmI0LCAweDgyYjUsCisgICAgMHg4MmI2LCAweDgyYjcs IDB4ODJiOCwgMHg4MmI5LCAweDgyYmEsIDB4ODJiYiwgMHg4MmJjLCAweDgyYmQsCisgICAgMHg4 MmJlLCAweDgyYmYsIDB4ODJjMCwgMHg4MmMxLCAweDgyYzIsIDB4ODJjMywgMHg4MmM0LCAweDgy YzUsCisgICAgMHg4MmM2LCAweDgyYzcsIDB4ODJjOCwgMHg4MmM5LCAweDgyY2EsIDB4ODJjYiwg MHg4MmNjLCAweDgyY2QsCisgICAgMHg4MmNlLCAweDgyY2YsIDB4ODJkMCwgMHg4MmQxLCAweDgy ZDIsIDB4ODJkMywgMHg4MmQ0LCAweDgyZDUsCisgICAgMHg4MmQ2LCAweDgyZDcsIDB4ODJkOCwg MHg4MmQ5LCAweDgyZGEsIDB4ODJkYiwgMHg4MmRjLCAweDgyZGQsCisgICAgMHg4MmRlLCAweDgy ZGYsIDB4ODJlMCwgMHg4MmUxLCAweDgyZTIsIDB4ODJlMywgMHg4MmU0LCAweDgyZTUsCisgICAg MHg4MmU2LCAweDgyZTcsIDB4ODJlOCwgMHg4MmU5LCAweDgyZWEsIDB4ODJlYiwgMHg4MmVjLCAw eDgyZWQsCisgICAgMHg4MmVlLCAweDgyZWYsIDB4ODJmMCwgMHg4MmYxLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsCisgICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4MTRhLCAw eDgxNGIsIDB4ODE1NCwgMHg4MTU1LCAweGZmZmQsCisgICAgMHhmZmZkLCAweDgzNDAsIDB4ODM0 MSwgMHg4MzQyLCAweDgzNDMsIDB4ODM0NCwgMHg4MzQ1LCAweDgzNDYsCisgICAgMHg4MzQ3LCAw eDgzNDgsIDB4ODM0OSwgMHg4MzRhLCAweDgzNGIsIDB4ODM0YywgMHg4MzRkLCAweDgzNGUsCisg ICAgMHg4MzRmLCAweDgzNTAsIDB4ODM1MSwgMHg4MzUyLCAweDgzNTMsIDB4ODM1NCwgMHg4MzU1 LCAweDgzNTYsCisgICAgMHg4MzU3LCAweDgzNTgsIDB4ODM1OSwgMHg4MzVhLCAweDgzNWIsIDB4 ODM1YywgMHg4MzVkLCAweDgzNWUsCisgICAgMHg4MzVmLCAweDgzNjAsIDB4ODM2MSwgMHg4MzYy LCAweDgzNjMsIDB4ODM2NCwgMHg4MzY1LCAweDgzNjYsCisgICAgMHg4MzY3LCAweDgzNjgsIDB4 ODM2OSwgMHg4MzZhLCAweDgzNmIsIDB4ODM2YywgMHg4MzZkLCAweDgzNmUsCisgICAgMHg4MzZm LCAweDgzNzAsIDB4ODM3MSwgMHg4MzcyLCAweDgzNzMsIDB4ODM3NCwgMHg4Mzc1LCAweDgzNzYs CisgICAgMHg4Mzc3LCAweDgzNzgsIDB4ODM3OSwgMHg4MzdhLCAweDgzN2IsIDB4ODM3YywgMHg4 MzdkLCAweDgzN2UsCisgICAgMHg4MzgwLCAweDgzODEsIDB4ODM4MiwgMHg4MzgzLCAweDgzODQs IDB4ODM4NSwgMHg4Mzg2LCAweDgzODcsCisgICAgMHg4Mzg4LCAweDgzODksIDB4ODM4YSwgMHg4 MzhiLCAweDgzOGMsIDB4ODM4ZCwgMHg4MzhlLCAweDgzOGYsCisgICAgMHg4MzkwLCAweDgzOTEs IDB4ODM5MiwgMHg4MzkzLCAweDgzOTQsIDB4ODM5NSwgMHg4Mzk2LCAweGZmZmQsCisgICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4MTQ1LCAweDgxNWIsIDB4ODE1MiwgMHg4MTUzLCAweGZm ZmQKK307CisKK3N0YXRpYyBVU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVbmlj b2RlIHRvIFNoaWZ0LUpJUyAqLwordXNqX2ZmMDBbXSA9IHsgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIDB4ZmYwMCB0aHJ1IDB4MGZmOWYgKi8KKyAgICAweGZmZmQsIDB4ODE0OSwgMHhmZmZk LCAweDgxOTQsIDB4ODE5MCwgMHg4MTkzLCAweDgxOTUsIDB4ZmZmZCwKKyAgICAweDgxNjksIDB4 ODE2YSwgMHg4MTk2LCAweDgxN2IsIDB4ODE0MywgMHhmZmZkLCAweDgxNDQsIDB4ODE1ZSwKKyAg ICAweDgyNGYsIDB4ODI1MCwgMHg4MjUxLCAweDgyNTIsIDB4ODI1MywgMHg4MjU0LCAweDgyNTUs IDB4ODI1NiwKKyAgICAweDgyNTcsIDB4ODI1OCwgMHg4MTQ2LCAweDgxNDcsIDB4ODE4MywgMHg4 MTgxLCAweDgxODQsIDB4ODE0OCwKKyAgICAweDgxOTcsIDB4ODI2MCwgMHg4MjYxLCAweDgyNjIs IDB4ODI2MywgMHg4MjY0LCAweDgyNjUsIDB4ODI2NiwKKyAgICAweDgyNjcsIDB4ODI2OCwgMHg4 MjY5LCAweDgyNmEsIDB4ODI2YiwgMHg4MjZjLCAweDgyNmQsIDB4ODI2ZSwKKyAgICAweDgyNmYs IDB4ODI3MCwgMHg4MjcxLCAweDgyNzIsIDB4ODI3MywgMHg4Mjc0LCAweDgyNzUsIDB4ODI3NiwK KyAgICAweDgyNzcsIDB4ODI3OCwgMHg4Mjc5LCAweDgxNmQsIDB4ZmZmZCwgMHg4MTZlLCAweDgx NGYsIDB4ODE1MSwKKyAgICAweDgxNGQsIDB4ODI4MSwgMHg4MjgyLCAweDgyODMsIDB4ODI4NCwg MHg4Mjg1LCAweDgyODYsIDB4ODI4NywKKyAgICAweDgyODgsIDB4ODI4OSwgMHg4MjhhLCAweDgy OGIsIDB4ODI4YywgMHg4MjhkLCAweDgyOGUsIDB4ODI4ZiwKKyAgICAweDgyOTAsIDB4ODI5MSwg MHg4MjkyLCAweDgyOTMsIDB4ODI5NCwgMHg4Mjk1LCAweDgyOTYsIDB4ODI5NywKKyAgICAweDgy OTgsIDB4ODI5OSwgMHg4MjlhLCAweDgxNmYsIDB4ODE2MiwgMHg4MTcwLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4MDBhMSwgMHgwMGEyLCAweDAwYTMsIDB4MDBhNCwgMHgwMGE1LCAw eDAwYTYsIDB4MDBhNywKKyAgICAweDAwYTgsIDB4MDBhOSwgMHgwMGFhLCAweDAwYWIsIDB4MDBh YywgMHgwMGFkLCAweDAwYWUsIDB4MDBhZiwKKyAgICAweDAwYjAsIDB4MDBiMSwgMHgwMGIyLCAw eDAwYjMsIDB4MDBiNCwgMHgwMGI1LCAweDAwYjYsIDB4MDBiNywKKyAgICAweDAwYjgsIDB4MDBi OSwgMHgwMGJhLCAweDAwYmIsIDB4MDBiYywgMHgwMGJkLCAweDAwYmUsIDB4MDBiZiwKKyAgICAw eDAwYzAsIDB4MDBjMSwgMHgwMGMyLCAweDAwYzMsIDB4MDBjNCwgMHgwMGM1LCAweDAwYzYsIDB4 MDBjNywKKyAgICAweDAwYzgsIDB4MDBjOSwgMHgwMGNhLCAweDAwY2IsIDB4MDBjYywgMHgwMGNk LCAweDAwY2UsIDB4MDBjZiwKKyAgICAweDAwZDAsIDB4MDBkMSwgMHgwMGQyLCAweDAwZDMsIDB4 MDBkNCwgMHgwMGQ1LCAweDAwZDYsIDB4MDBkNywKKyAgICAweDAwZDgsIDB4MDBkOSwgMHgwMGRh LCAweDAwZGIsIDB4MDBkYywgMHgwMGRkLCAweDAwZGUsIDB4MDBkZgorfTsKKworLyogTm93IG9u ZSBodW1vbmdvdXMgdGFibGUgZm9yIEthbmppICovCisKK3N0YXRpYyBVU0hPUlQgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBVbmljb2RlIHRvIFNoaWZ0LUpJUyAqLwordXNqXzRlMDBbXSA9 IHsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4NGUwMCB0aHJ1IDB4OWZhMCAqLworICAg IDB4ODhlYSwgMHg5MjlhLCAweGZmZmQsIDB4OGViNSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHg5NjljLAorICAgIDB4OGZlNCwgMHg4ZTRmLCAweDhmZTMsIDB4ODliYSwgMHhmZmZkLCAweDk1 NzMsIDB4OTc1ZSwgMHhmZmZkLAorICAgIDB4OThhMCwgMHg4OTRlLCAweGZmZmQsIDB4ZmZmZCwg MHg4YThlLCAweDk4YTEsIDB4OTBhMiwgMHg5OWMwLAorICAgIDB4OGI3NSwgMHg5NWI4LCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGZlNSwgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHg5N2JjLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTVjMCwgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHhmZmZkLCAweDk4YTIsIDB4ZmZmZCwgMHhmZmZkLCAweDkyODYsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5OGEzLCAweDhiZjgsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4OThhNCwgMHhmZmZkLAorICAgIDB4OGFkYiwgMHg5MjRmLCAweGZmZmQsIDB4OGVl NSwgMHg5OGE1LCAweGZmZmQsIDB4ZmZmZCwgMHg5OGE2LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAw eDk4YTcsIDB4OTQ1NCwgMHhmZmZkLCAweDhiNzYsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4OTQ1NiwgMHhmZmZkLCAweDkzZTEsIDB4OGNjMSwgMHg5NjUy LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU1NjgsIDB4 OThhOCwgMHg4ZmU2LAorICAgIDB4OThhOSwgMHg4OWIzLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweDhiZTMsIDB4OGNlZSwgMHg5NmU3LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDliYTQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHg5NzkwLCAweGZmZmQsIDB4OTNmYiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4OGFhMywgMHhmZmZkLAorICAgIDB4OGI1NCwgMHhmZmZkLCAweDk4YWEsIDB4ZmZmZCwgMHhm ZmZkLCAweDk4YWIsIDB4OTdiOSwgMHhmZmZkLAorICAgIDB4OTc1YywgMHg5MTg4LCAweDk4YWQs IDB4OGU5NiwgMHg5M2YxLCAweGZmZmQsIDB4OThiMCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg4 OTVkLCAweDhjZGQsIDB4ZmZmZCwgMHg4Y2RjLCAweDg4ZTQsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4OTg2YSwgMHg5ODY5LCAweGZmZmQsIDB4OGRiMSwgMHg4ODlmLCAweGZmZmQsIDB4OThiMSwg MHg5OGIyLAorICAgIDB4OThiMywgMHg5NjUzLCAweDk4YjQsIDB4ZmZmZCwgMHg4Y2YwLCAweDg4 ZTUsIDB4OTY5MiwgMHhmZmZkLAorICAgIDB4OGI5YywgMHhmZmZkLCAweGZmZmQsIDB4OGI5ZCwg MHg4YjllLCAweDkyZTAsIDB4OTdiYSwgMHhmZmZkLAorICAgIDB4OThiNSwgMHhmZmZkLCAweGZm ZmQsIDB4OThiNiwgMHhmZmZkLCAweGZmZmQsIDB4OThiNywgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweDkwNmMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4OGY1OSwgMHg5MDZkLCAweDk4YmMsIDB4ZmZmZCwgMHg5OGJhLCAweGZmZmQsIDB4OThi YiwgMHg4Yjc3LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDhkYTEsIDB4ODllZSwgMHhmZmZkLCAw eDk4YjksIDB4OThiOCwgMHg5NWE3LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHg4ZTY1LCAweDhlNjQsIDB4OTFiYywgMHg5OGJkLAorICAgIDB4OTU3NCwgMHg5MGU1LCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDgxNTcsIDB4OThiZSwgMHg5OGMwLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4OTFlMywgMHg5N2RmLCAweDg4YzgsIDB4ZmZmZCwgMHhmZmZk LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk4YmYsIDB4 ODliYywgMHhmZmZkLAorICAgIDB4OGJjMiwgMHhmZmZkLCAweDkyODcsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4OGM4ZiwgMHg5OGMxLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 OTQ0MywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg4YWU5 LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHg5OGMyLCAweDg4YzksIDB4ZmZmZCwgMHhmZmZkLCAweDhjZGUsIDB4OGFlYSwgMHg5 NTlhLAorICAgIDB4OTRiMCwgMHg4Yjc4LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDg5ZWYsIDB4ZmZmZCwgMHg5 OGU1LCAweDkzNjAsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5NDhjLAorICAg IDB4OThjNCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5NGJhLCAweGZmZmQsIDB4OTdlMCwg MHhmZmZkLAorICAgIDB4OTA0YywgMHhmZmZkLCAweDhlNjYsIDB4ZmZmZCwgMHg4ZTk3LCAweDg5 YmUsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTJjZiwg MHhmZmZkLCAweGZmZmQsIDB4OTI0MSwgMHg5OGM4LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDg4Y2EsIDB4OTJlMSwgMHg4ZjVhLAorICAgIDB4OGRiMiwg MHg5NzQzLCAweGZmZmQsIDB4OTFjYywgMHhmZmZkLCAweDg5YmQsIDB4ZmZmZCwgMHg5OGM3LAor ICAgIDB4ZmZmZCwgMHg5NzVkLCAweDk4YzMsIDB4OThjNSwgMHg4ZGVjLCAweDk4YzYsIDB4OWI0 MywgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5OGNlLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5OGQxLAorICAgIDB4OThjZiwgMHhmZmZkLCAw eGZmZmQsIDB4ODljMCwgMHhmZmZkLCAweDk1YjksIDB4OThjOSwgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4OThjZCwgMHg4Y2YxLCAweGZmZmQsIDB4ZmZmZCwgMHg4ZTY3 LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGFhNCwgMHhmZmZkLCAweGZmZmQsIDB4 OThkMiwgMHhmZmZkLAorICAgIDB4OThjYSwgMHhmZmZkLCAweGZmZmQsIDB4OTdlMSwgMHhmZmZk LCAweDhlOTgsIDB4ZmZmZCwgMHg5OGNiLAorICAgIDB4ZmZmZCwgMHg5OGQwLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OThkMywgMHhmZmZkLAorICAgIDB4OThjYywgMHhmZmZk LCAweGZmZmQsIDB4OGI5ZiwgMHhmZmZkLCAweDg4Y2IsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 OGJhMCwgMHg4OWJmLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWI0NCwgMHhmZmZkLCAweDk2OTks IDB4OTU4ZSwgMHg4Y2YyLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweDkwNGUsIDB4OTdiNSwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5NWQ2LAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweDhjNTcsIDB4OTFhMywgMHg4OWUyLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweDhmNzIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OThkNywg MHhmZmZkLAorICAgIDB4OThkYywgMHg5OGRhLCAweGZmZmQsIDB4ZmZmZCwgMHg5OGQ1LCAweGZm ZmQsIDB4ZmZmZCwgMHg5MWFkLAorICAgIDB4OThkOCwgMHhmZmZkLCAweDk4ZGIsIDB4OThkOSwg MHhmZmZkLCAweDk1ZGIsIDB4ZmZmZCwgMHg5OGQ2LAorICAgIDB4ZmZmZCwgMHg5MDRkLCAweGZm ZmQsIDB4OTY5MywgMHg5OGRkLCAweDk4ZGUsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGY0MywgMHg5OGViLAor ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTQ2ZiwgMHhmZmZkLCAweDk1NTUsIDB4OThl NiwgMHhmZmZkLAorICAgIDB4OTVlZSwgMHhmZmZkLCAweDg5YjQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4OThlYSwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweDk4ZTQsIDB4OThlZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5MTcxLCAw eGZmZmQsIDB4OGNjMiwgMHhmZmZkLCAweDk0N2IsIDB4ZmZmZCwgMHhlMGM1LAorICAgIDB4ZmZm ZCwgMHg5OGVjLCAweDkzN2MsIDB4ZmZmZCwgMHg5OGUxLCAweGZmZmQsIDB4OGNmNCwgMHhmZmZk LAorICAgIDB4ZmZmZCwgMHg4Y2YzLCAweDk4ZGYsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHg4ZWQ4LAorICAgIDB4ZmZmZCwgMHg5OGU3LCAweGZmZmQsIDB4OTVlZCwgMHg5MjZj LCAweDk4ZTMsIDB4OGM5MSwgMHhmZmZkLAorICAgIDB4OThlMCwgMHg5OGU4LCAweDk4ZTIsIDB4 OTdjZiwgMHg5OGU5LCAweDk4NjAsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGJlNCwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHg4YzkwLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OThlZSwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHg5OGVmLAorICAgIDB4OThmMywgMHg4OGNjLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5NWNlLAorICAgIDB4OThmMiwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweDk4ZjEsIDB4OThmNSwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweDk4ZjQsIDB4ZmZmZCwgMHg5MmUyLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhjOTIsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5OGY2LCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDhlYzMsIDB4ZmZmZCwg MHg5MWE0LCAweDkyZTMsIDB4OGJmNCwgMHhmZmZkLAorICAgIDB4OThmNywgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhiNTUsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OThmOCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk4ZmEsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk2NTQsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg4Yzg2LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OGU1MCwgMHg5NGY1LCAweDk4ZjksIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4ZGMzLCAweDk3NjIsIDB4ZmZmZCwgMHhmZmZk LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDk4ZmMsIDB4OTk0MiwgMHg5OGZiLCAweDhkYzIsIDB4 ZmZmZCwgMHg4ZjlkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4OGM1OCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDk5NDMsIDB4 ZmZmZCwgMHhmZmZkLCAweDhiY2QsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5OTQw LCAweDk5NDEsIDB4ZmZmZCwgMHhmZmZkLCAweDkzYWQsIDB4ZmZmZCwgMHg5MTljLAorICAgIDB4 ZmZmZCwgMHg4YmExLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk2NmMsIDB4OTk0NCwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDk3YmIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4OTk0NSwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTk0OCwgMHhm ZmZkLCAweDk5NDYsIDB4ZmZmZCwgMHg5MTZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweDk5NDcsIDB4OTk0OSwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk5NGIsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHg5OTRhLCAweGZmZmQsIDB4OTVjNiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4OGI1NiwgMHg5OTRkLCAweDk5NGUsIDB4ZmZmZCwgMHg4OWFkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5OTRjLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDhl ZjIsIDB4ZmZmZCwgMHg5OTUxLCAweDk5NTAsIDB4OTk0ZiwgMHhmZmZkLAorICAgIDB4OThkNCwg MHhmZmZkLCAweDk5NTIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4ZjllLAor ICAgIDB4ZmZmZCwgMHg5OTUzLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDk3NDQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDk2ZDcsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5OTU1LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAw eDk5NTQsIDB4OTk1NywgMHg5OTU2LCAweGZmZmQsIDB4ZmZmZCwgMHg5OTU4LAorICAgIDB4OTk1 OSwgMHg4OGYyLCAweGZmZmQsIDB4OGNiMywgMHg4YzVhLCAweDhmNWIsIDB4OTI5YiwgMHg4YmEy LAorICAgIDB4OTBlNiwgMHg4Y2Y1LCAweGZmZmQsIDB4OGQ4ZSwgMHg5OTViLCAweDk2YzYsIDB4 OTM2NSwgMHhmZmZkLAorICAgIDB4OGU5OSwgMHhmZmZkLCAweDk5NWEsIDB4ZmZmZCwgMHg5OTVj LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDkzN2QsIDB4 ZmZmZCwgMHg4YTk1LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZk LCAweDk5NWQsIDB4ZmZmZCwgMHhmZmZkLCAweDkzZmMsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 OTE1MywgMHg5OTVmLCAweDk5NjAsIDB4OTRhYSwgMHg4Y2Y2LCAweDk4NWEsIDB4OTk2MSwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHg4YmE0LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk1YmEs IDB4OTFiNCwgMHg4YmVmLAorICAgIDB4OTM1NCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4 YzkzLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OTk2MiwgMHhmZmZkLCAweDk5NjMs IDB4ZmZmZCwgMHhmZmZkLCAweDkzZTAsIDB4ODk3ZSwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5 OTY2LCAweDhkZmIsIDB4ZmZmZCwgMHg5OTY1LCAweDhkYzQsIDB4ZmZmZCwgMHg5OTY3LAorICAg IDB4ZTNlYywgMHg5OTY4LCAweDk2NjAsIDB4OTk2OSwgMHhmZmZkLCAweDk5NmEsIDB4OTk2Yiwg MHg4ZmU3LAorICAgIDB4ZmZmZCwgMHg4ZWNhLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OGFhNSwgMHhmZmZkLCAweDk5NmUsIDB4ZmZmZCwg MHg5OTZjLCAweDk2YmIsIDB4OTk2ZCwgMHhmZmZkLAorICAgIDB4OTU3OSwgMHg5OTZmLCAweDk5 NzAsIDB4OTk3MSwgMHg5MzdlLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OTk3NSwg MHg5OTczLCAweDk5NzQsIDB4OTk3MiwgMHg4ZGUxLCAweDk5NzYsIDB4OTZlOCwgMHg5N2UyLAor ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk5NzcsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5MGE2LCAw eDk5NzgsIDB4OGY3OSwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5OTc5LCAweGZmZmQsIDB4OTI5 YywgMHg5N2JkLCAweDkzODAsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTljMywgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4OTk3YSwgMHhlYWEzLCAweDhiYzMsIDB4ZmZmZCwgMHhmZmZk LAorICAgIDB4OTk3YiwgMHg5NjdkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 OGY4OCwgMHg5MWZhLAorICAgIDB4ZmZmZCwgMHg5OTdkLCAweDkzZTIsIDB4ZmZmZCwgMHhmZmZk LCAweDk5N2UsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OTk4MCwgMHg4YTRkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweDk5ODEsIDB4OGJhNSwgMHhmZmZkLAorICAgIDB4OTNjYSwgMHg4OTlh LCAweDhmNmYsIDB4ZmZmZCwgMHhmZmZkLCAweDk0OWYsIDB4OTk4MiwgMHhmZmZkLAorICAgIDB4 OTM4MSwgMHhmZmZkLCAweGZmZmQsIDB4OTA2ZSwgMHg5OTgzLCAweGZmZmQsIDB4OTVhYSwgMHg5 MGQ4LAorICAgIDB4OGFhMCwgMHhmZmZkLCAweDhhYTcsIDB4OTk4NCwgMHhmZmZkLCAweGZmZmQs IDB4OTk4NiwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg4YzU5LCAweGZmZmQsIDB4ZmZmZCwgMHg5 OTg1LCAweGZmZmQsIDB4ZmZmZCwgMHg5N2YxLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweDhmODksIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5NGJiLCAweDk1Y2EsIDB4ZmZmZCwgMHg5OTg3LAorICAg IDB4ZmZmZCwgMHg5Nzk4LCAweDk5ODgsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTk4OSwg MHhmZmZkLAorICAgIDB4OTM5ZSwgMHhmZmZkLCAweGZmZmQsIDB4OTk4YSwgMHhmZmZkLCAweGZm ZmQsIDB4OTBhNywgMHg4ZGZjLAorICAgIDB4OGM5NCwgMHg5OThiLCAweDhlNjgsIDB4OGQ4Ziwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4OTJlNCwgMHg5OThkLCAweGZmZmQsIDB4ZmZmZCwgMHg5MWE1LAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweDhkZWQsIDB4OTk4ZSwgMHg5OThmLCAweDkxNGYsIDB4ZmZmZCwgMHg5OThjLAor ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5OTkxLCAweGZmZmQsIDB4OTY1 NSwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGQ4NCwgMHhmZmZkLCAw eGZmZmQsIDB4OTk5MCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGM5 NSwgMHg4ZGRjLCAweDk0OGQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5OTk0LCAw eDk5OTIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5NTliLAorICAgIDB4OGZl OCwgMHg5OTliLCAweDhhODQsIDB4OTk5NSwgMHg5OTkzLCAweDkxNmUsIDB4ZmZmZCwgMHhmZmZk LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk5OTcsIDB4 ZmZmZCwgMHg5OTk2LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGE2MywgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHg4YzgwLAorICAgIDB4OTk5YywgMHg5N2FiLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweDk5OTgsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5OTlk LCAweDk5OWEsIDB4ZmZmZCwgMHg5OTk5LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTdjZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4 Y2Y3LAorICAgIDB4ODljMSwgMHhmZmZkLCAweGZmZmQsIDB4OTdmMiwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg4Zjk1LCAweDkzNzcsIDB4OGQ4NSwgMHg5 OWEwLCAweDk5YTEsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5N2UzLCAweGZmZmQs IDB4ZmZmZCwgMHg5ODRhLCAweDk5YTMsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg4 Y2Y4LCAweGZmZmQsIDB4ZmZmZCwgMHg5OWEyLCAweGZmZmQsIDB4OGE0ZSwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHg5OWE0LCAweGZmZmQsIDB4OTY3NSwgMHhmZmZkLCAweDkyYmEsIDB4ZmZmZCwg MHg5NzQ1LAorICAgIDB4ZmZmZCwgMHg5NWQ3LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk5 YTUsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU4ZDMsIDB4ZmZmZCwg MHhmZmZkLCAweDkzYWUsIDB4ZmZmZCwgMHg5OWE2LAorICAgIDB4OGFhOCwgMHg5NmIxLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhmOWYsIDB4OTlhNywgMHg5NWU1LAorICAgIDB4OTlhYiwg MHhmZmZkLCAweDkwYTgsIDB4OTlhOCwgMHg4YmNlLCAweGZmZmQsIDB4OTlhOSwgMHg4YWE5LAor ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDhjNGQsIDB4OTlhYywgMHhmZmZkLCAw eDk5YWQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OTlhZSwgMHg5OWFmLCAweDhlZDksIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4OGNmOSwgMHg5NmRjLAorICAgIDB4ZmZmZCwgMHg5NmU2LCAw eDkzZjUsIDB4ZmZmZCwgMHhmZmZkLCAweDk1ZWYsIDB4OTliMCwgMHhmZmZkLAorICAgIDB4OTli MSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk5YjMsIDB4ZmZmZCwgMHg5OWI1 LAorICAgIDB4OTliNCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk5YjYsIDB4 ODliYiwgMHg5NjZiLAorICAgIDB4ZmZmZCwgMHg4ZGZhLCAweDk5YjcsIDB4ZmZmZCwgMHhmZmZk LCAweDkxNzgsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OGZhMCwgMHg4YmE3LCAweGZmZmQsIDB4 OTliOCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZk LCAweDk0ZDksIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5OWI5LAorICAgIDB4 ZmZmZCwgMHg5OWJhLCAweGZmZmQsIDB4OTliYiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4OTliYywgMHg5NTQzLCAweDhiZTYsIDB4ODhlMywgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHg5M2JkLAorICAgIDB4OTliZCwgMHg4ZjVjLCAweGZmZmQsIDB4OTBlNywgMHhm ZmZkLCAweDk5YmYsIDB4OTliZSwgMHg4ZmExLAorICAgIDB4OGNkZiwgMHg5OWMxLCAweDk0YmMs IDB4ZmZmZCwgMHhmZmZkLCAweDk5YzIsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5 NGRhLCAweDkxYjIsIDB4OTFlYywgMHg4YmE2LCAweGZmZmQsIDB4ZmZmZCwgMHg5M2VjLAorICAg IDB4OTI1MCwgMHhmZmZkLCAweDk0OGUsIDB4ZmZmZCwgMHg5NjZkLCAweGZmZmQsIDB4OTljNCwg MHhmZmZkLAorICAgIDB4OTBlOCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4OGM1NCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5OWM1LCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4OTljNiwgMHg4OTRiLAorICAgIDB4ODhmMywgMHg4YWViLCAweGZm ZmQsIDB4OTFhNiwgMHg4YjcwLCAweDk3OTEsIDB4ZmZmZCwgMHg5OWM5LAorICAgIDB4ODliNSwg MHhmZmZkLCAweGZmZmQsIDB4OTljOCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4YmE4LAor ICAgIDB4ZmZmZCwgMHhmZmZkLCAweDk5Y2EsIDB4ZmZmZCwgMHg5NmVmLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4OTljYiwgMHhmZmZkLAorICAgIDB4OTdkMCwgMHhmZmZkLCAw eDhjZmEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4Y2I0LAorICAgIDB4OTlj YywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk5Y2UsIDB4OTljZCwgMHhmZmZk LAorICAgIDB4OTA3ZSwgMHg4OTU4LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDg5N2QsIDB4 OTljZiwgMHhmZmZkLAorICAgIDB4OTlkMCwgMHhmZmZkLCAweGZmZmQsIDB4OGNiNSwgMHhmZmZk LCAweGZmZmQsIDB4OTlkMSwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 OGI4ZSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZk LCAweDhlNTEsIDB4OTlkMiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 OTY5NCwgMHg4ZGIzLCAweDhiNzksIDB4OTc0NiwgMHg5MTZmLCAweDk0YmQsIDB4OGVmYiwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4ZjY2LCAweGZmZmQs IDB4OGVlNiwgMHg4ZWYzLAorICAgIDB4ZmZmZCwgMHg4Zjk2LCAweGZmZmQsIDB4OTRiZSwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5OWQ1LAorICAgIDB4ZmZmZCwgMHg4OTYyLCAweDkxNzAs IDB4OGNmYiwgMHg4Y2MzLCAweDhiZTUsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OTlkOSwgMHg5 MjQwLCAweDkxZmMsIDB4OGJhOSwgMHg4ZmEyLCAweDk5ZGEsIDB4OTlkOCwgMHg4OWMyLAorICAg IDB4OTFlNCwgMHg4ZWI2LCAweDhlNmEsIDB4ODk0NSwgMHhmZmZkLCAweGZmZmQsIDB4OGE5MCwg MHg4ZDg2LAorICAgIDB4OGU2OSwgMHhmZmZkLCAweDk5ZGIsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5OWRjLCAweGZmZmQsIDB4OGI2OCwg MHg4YTY1LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OGQ4NywgMHg4YjY3LCAweDky ZGQsIDB4ODk0NCwgMHg5M2FmLCAweDk2YmMsIDB4OGQ0MCwgMHg5Nzk5LAorICAgIDB4OTM2Niwg MHg4Y2ZjLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGM0ZSwgMHhmZmZkLCAweDk5ZTUsIDB4ZmZm ZCwgMHg4YmUxLAorICAgIDB4OTY2OSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4OTRkYiwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5OWU0LCAweGZmZmQsIDB4OGFk YywgMHg5OWRmLCAweDk5ZTAsIDB4OTllMiwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTllMywgMHhmZmZkLAorICAgIDB4OGI3 YSwgMHg5MDgxLCAweGZmZmQsIDB4OTVhYiwgMHg5OWUxLCAweDk5ZGQsIDB4OGNlMSwgMHhmZmZk LAorICAgIDB4OTlkZSwgMHhmZmZkLCAweDk4NDMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 OTVmMCwgMHhmZmZkLAorICAgIDB4OTJlNiwgMHg4Y2UwLCAweDhkOTAsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4OTllNiwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5M2RiLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5OWVhLAorICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4OGVmYywgMHhmZmZkLCAweDhlZjQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OTllZCwgMHg5OWViLCAweGZmZmQsIDB4OTZhMSwgMHhm ZmZkLCAweDk5ZTgsIDB4OTlmMSwgMHg5OWVjLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4OTllZiwgMHg4Y2M0LCAweDk2YmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OTlmMCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5OWYyLCAweGZmZmQsIDB4OTlmNCwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGRlZSwgMHg5ODYxLCAweGZmZmQsIDB4OTllOSwg MHg5OWU3LAorICAgIDB4OTlmMywgMHhmZmZkLCAweDk5ZWUsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDk5 ZjYsIDB4ZmZmZCwgMHg5YTQyLCAweDk5ZjgsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OTlmYywg MHhmZmZkLCAweGZmZmQsIDB4OWE0MCwgMHg5OWY5LCAweGZmZmQsIDB4ZmZmZCwgMHg5YTVkLAor ICAgIDB4ZmZmZCwgMHhmZmZkLCAweDhkZTcsIDB4OGE1MCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4OTlmNywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5YTQ0LCAw eDg4ZjQsIDB4OWE0MywgMHhmZmZkLAorICAgIDB4ODhhMywgMHg5NTY5LCAweDlhNDEsIDB4ZmZm ZCwgMHg5OWZhLCAweGZmZmQsIDB4ZmZmZCwgMHg5OWY1LAorICAgIDB4OTlmYiwgMHg4ZGM2LCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAorICAgIDB4OWE0NSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg4OGY1LCAweDlhNGUsIDB4ZmZmZCwgMHhmZmZk LCAweDlhNDYsIDB4OWE0NywgMHhmZmZkLAorICAgIDB4OGZhMywgMHg5Njg5LCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweDlhNGMsIDB4OWE0YiwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZk LCAweDkzNGUsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHhmZmZkLCAweDlhNGQsIDB4ZmZmZCwgMHhmZmZkLCAweDlhNGEsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4OTUzLCAweGZmZmQs IDB4OGRiNCwgMHg5MDRmLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5YTQ4LAorICAgIDB4OTM4MiwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHg5YTQ5LCAweGZmZmQsIDB4ODhhMCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4OWE1MywgMHg5NzQyLAorICAgIDB4ZmZmZCwgMHg4ZmE1LCAweGZmZmQsIDB4OWE1OSwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OWE1OCwgMHg5YTRmLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTFjMSwgMHhmZmZkLAorICAgIDB4OWE1MCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5MWVkLCAweDlhNTUsIDB4OGZhNCwgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5YTUyLCAweGZmZmQsIDB4ZmZm ZCwgMHg5NmUyLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGM1YiwgMHhmZmZkLCAw eGZmZmQsIDB4OWE1NiwgMHg5YTU3LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHg5YTU0LCAweDlhNWEsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4OWE1MSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWE2MCwgMHg5YTY1 LCAweGZmZmQsIDB4OWE2MSwgMHhmZmZkLAorICAgIDB4OWE1YywgMHhmZmZkLCAweGZmZmQsIDB4 OWE2NiwgMHg5MTUwLCAweGZmZmQsIDB4ZmZmZCwgMHg5YTY4LAorICAgIDB4ZmZmZCwgMHg4ZDQx LCAweDlhNWUsIDB4OTI5ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4OWE2MiwgMHg5YTViLCAweDhhYWIsIDB4ZmZmZCwgMHg4YWVjLCAweDhhODUs IDB4OWE2MywgMHg5YTVmLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4Yzk2LAorICAgIDB4OWE2OSwgMHg5YTY3LCAweDkxNzIs IDB4OGI2OSwgMHg4YmFhLCAweGZmZmQsIDB4OWE2NCwgMHhmZmZkLAorICAgIDB4OGJmMiwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ODk2MywgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5YTZkLCAweDlh NmIsIDB4ZmZmZCwgMHg5YWE1LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHg5YTcwLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweDlhNmEsIDB4ZmZmZCwgMHg5YTZlLCAweGZmZmQsIDB4ZmZmZCwgMHg5YTZjLAor ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGU2YiwgMHg5YTZmLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5YTcyLAorICAgIDB4ZmZmZCwgMHg5YTc3LCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDlhNzUsIDB4OWE3NCwgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTI1MSwgMHhmZmZk LAorICAgIDB4ZmZmZCwgMHg4OWMzLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5YTcx LCAweGZmZmQsIDB4OWE3MywgMHg4ZmE2LAorICAgIDB4ODk1MiwgMHhmZmZkLCAweGZmZmQsIDB4 OWE3NiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHg4OWRjLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5 YTgyLAorICAgIDB4ZmZmZCwgMHg4ZmZhLCAweDlhN2QsIDB4ZmZmZCwgMHg5YTdiLCAweGZmZmQs IDB4OWE3YywgMHhmZmZkLAorICAgIDB4OWE3ZSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDg5NWMs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5MTU4LCAweGZmZmQsIDB4OWE3OCwgMHhmZmZkLAorICAg IDB4OWE3OSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGE5YSwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHg5YTgxLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OGFlZCwgMHhmZmZkLCAweDlh ODQsIDB4OWE4MCwgMHg5YTgzLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5NWFjLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4OTNkMywgMHhmZmZkLCAweDk0YjYsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4OWE4NiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4OWE4NSwgMHg4YTY0LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDlhODcsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5YThhLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHg5YTg5LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAorICAgIDB4OWE4OCwgMHhmZmZkLCAweDk0NTgsIDB4ZmZmZCwgMHhmZmZkLCAweDlhOGIsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4OWE4YywgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHg5YThlLCAweGZmZmQsIDB4OWE4ZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHg5YTkwLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 OWE5MywgMHg5YTkxLCAweDlhOGYsIDB4OWE5MiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4OWE5NCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4OWE5NSwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5YTk2LCAweGZmZmQsIDB4OWE5NywgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5YTk4LAorICAgIDB4OTk2NCwgMHhmZmZkLCAweDhlZmEs IDB4OGU2YywgMHhmZmZkLCAweGZmZmQsIDB4ODlmMSwgMHhmZmZkLAorICAgIDB4ODhmNiwgMHhm ZmZkLCAweGZmZmQsIDB4OTI2MywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWE5OSwg MHhmZmZkLAorICAgIDB4OGRhMiwgMHhmZmZkLCAweDg4Y2QsIDB4OTA3ZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5YTlhLCAweDhjYzUsIDB4ZmZmZCwg MHhmZmZkLCAweDhkOTEsIDB4ZmZmZCwgMHg5YTljLAorICAgIDB4OWE5YiwgMHhmZmZkLCAweGZm ZmQsIDB4OTVkZSwgMHg5YTlkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OWE5Ziwg MHg5YTllLCAweGZmZmQsIDB4OWFhMCwgMHhmZmZkLCAweDlhYTEsIDB4ZmZmZCwgMHg4Yzk3LAor ICAgIDB4ZmZmZCwgMHhmZmZkLCAweDg5ODAsIDB4OWFhMiwgMHhmZmZkLCAweGZmZmQsIDB4OWFh NCwgMHhmZmZkLAorICAgIDB4OWFhMywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5YWE2LCAw eGZmZmQsIDB4ZmZmZCwgMHg5Mzc5LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4OWFhNywgMHg4OGIzLAorICAgIDB4OGRkZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhjNWMsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OTI2 ZSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5YWE4 LAorICAgIDB4OWFhOSwgMHhmZmZkLCAweGZmZmQsIDB4OWFhYiwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4OWFhYywgMHhmZmZkLCAweDhkZTIsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHg4YmNmLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDk2NTYsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWFhYSwgMHg5YWFkLAorICAgIDB4OGRiZiwgMHg4ZDQy LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHg5YWIxLCAweGZmZmQsIDB4ZmZmZCwgMHg4ZGEzLCAweGZmZmQs IDB4OTI1MiwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5YWFlLCAweDkyZDgsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5YWIyLAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweDkwODIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4OWFiMCwgMHg5YWIzLCAweGZmZmQsIDB4OGM1ZSwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWFiNCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OWFiNSwg MHhmZmZkLCAweDhkNDMsIDB4OGE1ZiwgMHg5YWI3LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHhmZmZkLCAweDlhYjgsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4OWFiOSwgMHhmZmZkLCAweGZmZmQsIDB4OWFiNiwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OWFhZiwgMHhmZmZkLCAw eGZmZmQsIDB4OWFiYSwgMHhmZmZkLCAweGZmZmQsIDB4OWFiYiwgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4OTY4NCwgMHhmZmZkLCAweGZmZmQsIDB4OGZlOSwgMHhmZmZk LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDlhYmQsIDB4OWFiZSwgMHg5YWJjLCAweGZmZmQsIDB4 OWFjMCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5NDU3 LCAweGZmZmQsIDB4ZmZmZCwgMHg4OGU2LAorICAgIDB4OTU3NSwgMHhmZmZkLCAweGZmZmQsIDB4 OWFjMSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4ZmZiLCAweGZmZmQsIDB4ZmZmZCwgMHg4 ZWI3LAorICAgIDB4ZmZmZCwgMHg5NDdjLCAweDhhZWUsIDB4ZmZmZCwgMHg4ZGU5LCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OTY3OCwgMHhmZmZkLCAweDkzYjAsIDB4ZmZmZCwgMHhm ZmZkLCAweDhjOTgsIDB4OTFjZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDlhYmYs IDB4OWFjMiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDkxYzIsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHg5YWMzLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDlhYzQsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5YWM2LCAweGZmZmQsIDB4ZmZmZCwgMHg5MmU3LCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDhhYWMsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlYTlmLAorICAgIDB4ODk4MSwgMHg5NWYxLCAweGZm ZmQsIDB4ZmZmZCwgMHg4ZmVhLCAweDkzNjcsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweDhkZTQsIDB4ZmZmZCwgMHhmZmZkLCAweDlhY2MsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4OTViYiwgMHg5N2RiLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDg5ZjIsIDB4OWFjOCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5MTU5LCAweDlhY2IsIDB4ZmZm ZCwgMHg5MzgzLCAweGZmZmQsIDB4ZmZmZCwgMHg5MzY4LAorICAgIDB4OTM4NCwgMHg5NGI3LCAw eDkyY2IsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGRjNywgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweDlhYzcsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAorICAgIDB4ZmZmZCwgMHg4OTk2LCAweGZmZmQsIDB4OTM1NSwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4OWFjOSwgMHhmZmZkLCAweDlhYzUsIDB4ZmZmZCwgMHhmZmZk LCAweDkwNmYsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5YWNkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGY2ZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4OGJhYiwgMHhmZmZkLCAweDlhY2UsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTVlNiwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHg5MTlkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5 MmM0LCAweGZmZmQsIDB4ZmZmZCwgMHg5YWQwLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OTY2ZSwgMHhm ZmZkLCAweGZmZmQsIDB4OWFkMSwgMHhmZmZkLCAweGZmZmQsIDB4OWFkNiwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTVhZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4OWFkNSwgMHg5YWNmLCAweDlhZDIsIDB4OWFkNCwgMHhmZmZkLCAweGZm ZmQsIDB4OGRhNCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5NWM3LCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweDlhZDcsIDB4ZmZmZCwgMHg5MjY0LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDg5 ZjMsIDB4ZmZmZCwgMHg4ZmViLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHg5YWQ5LCAweGZmZmQsIDB4OWFkOCwgMHhmZmZkLCAweDhkODgsIDB4ZmZmZCwgMHg5YWRhLAor ICAgIDB4OWFkYywgMHg5YWRiLCAweGZmZmQsIDB4ZmZmZCwgMHg5YWRlLCAweGZmZmQsIDB4OWFk MywgMHg5YWUwLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5YWRmLCAw eDlhZGQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGU2 ZCwgMHg5MDcwLCAweGZmZmQsIDB4OTE3MywgMHg5YWUxLAorICAgIDB4OTBiYSwgMHg4OGViLCAw eDk0ODQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5MmQ5LAorICAgIDB4ZmZm ZCwgMHg5YWUzLCAweDlhZTIsIDB4OWFlNCwgMHg5YWU1LCAweDlhZTYsIDB4ZmZmZCwgMHhmZmZk LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDlhZTcsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5NWNmLCAweDlhZTgsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHg4OWM0LAorICAgIDB4OWFlOSwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweDk3NWIsIDB4OGE0ZiwgMHhmZmZkLAorICAgIDB4OTljNywgMHg4ZjY3 LCAweDkxYmQsIDB4OWFlYSwgMHg5NmU5LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHhmZmZkLCAweDk2YjIsIDB4ZmZmZCwgMHhmZmZkLCAweDlhZWMsIDB4ZmZmZCwgMHg5 MWU1LAorICAgIDB4ZmZmZCwgMHg5MzU2LCAweDkxYmUsIDB4OTU3NiwgMHg5YWVkLCAweDlhZWUs IDB4ODk5YiwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg4ZWI4LCAweDlhZWYsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4OGNlLAorICAgIDB4OWFmMCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWFmMSwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4OTgyLCAweGZmZmQsIDB4ZmZmZCwgMHg4YWVmLAorICAg IDB4OTNkZSwgMHg5NWYyLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWFmNSwg MHg5MTc0LAorICAgIDB4OWFmNCwgMHg4YzVmLCAweGZmZmQsIDB4ZmZmZCwgMHg5NjdhLCAweDlh ZjMsIDB4ZmZmZCwgMHg5Mzg1LAorICAgIDB4OWFmNywgMHhmZmZkLCAweDlhZjYsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OWFmOSwgMHhmZmZkLCAweDlh ZjgsIDB4ZmZmZCwgMHhmZmZkLCAweDg5OWMsIDB4ZmZmZCwgMHg5YWZhLAorICAgIDB4OGZhNywg MHg5YWZjLCAweDkyNDQsIDB4ZmZmZCwgMHg5YWZiLCAweGZmZmQsIDB4OTViMSwgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGY5NywgMHg5MzdhLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4OWI0MCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eDhkNDQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5YjQxLCAweDk0NDAsIDB4OTRk YywgMHg5NmNmLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAw eDk0NDQsIDB4ZmZmZCwgMHhmZmZkLCAweDliNGEsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4OGI1NywgMHhmZmZkLCAweGZmZmQsIDB4OTc2NCwgMHhmZmZk LAorICAgIDB4ZmZmZCwgMHg5NmFkLCAweGZmZmQsIDB4OWJhYSwgMHhmZmZkLCAweDliNDIsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWI0NSwgMHhmZmZk LCAweDkxYzMsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OTY1NywgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHg5MzY5LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZk LCAweDliNDYsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHg5Njg1LCAweGZmZmQsIDB4OGRjOCwgMHhmZmZkLCAweGZmZmQsIDB4OGZhOCwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4OWI0NywgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg4ZTZmLCAweGZmZmQsIDB4OGU2ZSwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ODhiNywgMHg4Y2M2LCAweGZmZmQs IDB4OTBhOSwgMHg4OGNmLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5 YjRiLCAweDliNGMsIDB4ZmZmZCwgMHg5YjQ5LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDg5NTcsIDB4OGFhZCwg MHhmZmZkLAorICAgIDB4OWI0OCwgMHhmZmZkLCAweDk2YzMsIDB4OTU1MCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ODhhNiwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ODhmNywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4ZTcwLAorICAgIDB4ZmZmZCwg MHg4OGQwLCAweGZmZmQsIDB4ODhhMSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHg5YjUxLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5YjRmLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OTZiYSwgMHhmZmZkLCAweDliNTIsIDB4ZmZm ZCwgMHg5YjUwLCAweGZmZmQsIDB4ZmZmZCwgMHg5YjRlLAorICAgIDB4OTA1MCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDliNGQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHg5NWQ4LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4Y2Uy LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDliNTYsIDB4 OWI1NywgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4ZmE5 LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OWI1MywgMHg5ODRiLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTQ2YiwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5YjU1 LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDhkYTUsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDliNTgsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4OTU3NywgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDliNTks IDB4ZmZmZCwgMHg5YjU0LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHg5NmI5LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDk0 N2QsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweDliNWEsIDB4OTU1MSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHg5YjViLCAweDliNWYsIDB4OWI1YywgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHg4OWM1LCAweDliNWUsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAorICAgIDB4ZmZmZCwgMHg4ZWI5LCAweGZmZmQsIDB4OWI1ZCwgMHg4Yzk5LCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4OWI2YiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4OWI2NCwgMHg5YjYxLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5Mjg0 LCAweGZmZmQsIDB4OWI2MCwgMHhmZmZkLCAweGZmZmQsIDB4OWI2MiwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHg5YjYzLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDliNjUsIDB4OWI2NiwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg4 YWYwLCAweGZmZmQsIDB4OWI2OCwgMHg5YjY3LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWI2OSwg MHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDhmZWMsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDli NmMsIDB4ZmZmZCwgMHg5MmRhLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ODk2NCwg MHhmZmZkLCAweDliNmEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWI2ZCwgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWI2 ZSwgMHhmZmZkLAorICAgIDB4OWI3MSwgMHhmZmZkLCAweGZmZmQsIDB4OWI2ZiwgMHhmZmZkLCAw eDliNzAsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OGU3MSwgMHg5YjcyLCAw eGZmZmQsIDB4ZmZmZCwgMHg4ZDQ1LCAweDliNzMsIDB4ZmZmZCwgMHg4ZTlhLAorICAgIDB4OTFi NiwgMHhmZmZkLCAweDliNzQsIDB4OWI3NSwgMHg4ZTc5LCAweDhkNDYsIDB4ZmZmZCwgMHg5NmQw LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGI0NywgMHg4Y2M3LCAweDliNzYsIDB4 OGE3NywgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5Yjc3LCAweGZmZmQsIDB4OTFiNywgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OWI3OCwgMHg5YmExLCAweGZmZmQsIDB4 OWI3OSwgMHhmZmZkLCAweDliN2EsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OWI3YiwgMHhmZmZk LCAweDliN2QsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 OWI3ZSwgMHhmZmZkLCAweGZmZmQsIDB4OWI4MCwgMHhmZmZkLCAweDkxZWUsIDB4ZmZmZCwgMHg4 OTQ2LAorICAgIDB4OGVlNywgMHg4OGMwLCAweGZmZmQsIDB4OTE3NiwgMHg4YWFlLCAweDhlYjMs IDB4ZmZmZCwgMHg4ZDQ3LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweDkzODYsIDB4ZmZmZCwgMHg4ZjQwLAorICAgIDB4OGFhZiwgMHg5Mjg4LCAweDkyZTgs IDB4ODhiNiwgMHg4YjU4LCAweDk1ZjMsIDB4ZmZmZCwgMHg4ZWMwLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweDhiNzEsIDB4OTBlOSwgMHg4ZWJhLCAweDk3NDcsIDB4OWI4MSwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGI3Yiwg MHhmZmZkLAorICAgIDB4OGRjOSwgMHhmZmZkLCAweGZmZmQsIDB4OGE1MSwgMHg4OTgzLCAweDhm YWEsIDB4ODljNiwgMHhmZmZkLAorICAgIDB4OWI4MiwgMHg5NzY1LCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4ZjY4LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDhl ZTIsIDB4OWI4MywgMHg4YWYxLCAweDkzZDAsIDB4OTZhNywgMHg5Yjg0LAorICAgIDB4ZmZmZCwg MHg5Yjg1LCAweGZmZmQsIDB4ZmZmZCwgMHg5NTc4LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4OWI4NywgMHhmZmZkLCAweDhhYTYsIDB4OGJmNSwgMHg5Yjg2LCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGFiMCwgMHhmZmZkLCAw eDkwNTEsIDB4OWI4YiwgMHg4ZTQwLAorICAgIDB4ZmZmZCwgMHg4OWM3LCAweDliOGEsIDB4ZmZm ZCwgMHg5Yjg4LCAweDliOGMsIDB4OWI4OSwgMHg5NDRhLAorICAgIDB4OWVjYiwgMHg5MDUyLCAw eGZmZmQsIDB4OWI4ZCwgMHhmZmZkLCAweGZmZmQsIDB4OTdiZSwgMHhmZmZkLAorICAgIDB4OWI4 ZSwgMHhmZmZkLCAweGZmZmQsIDB4OWI5MCwgMHhmZmZkLCAweDkyOWUsIDB4OWI4ZiwgMHhmZmZk LAorICAgIDB4OTBhMSwgMHhmZmZkLCAweDhlOWIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 OTFjZSwgMHg4ZWY1LAorICAgIDB4ZmZmZCwgMHg5NTk1LCAweDkwZWEsIDB4ZmZmZCwgMHg4ZWNi LCAweDliOTEsIDB4OGZhYiwgMHg5YjkyLAorICAgIDB4OWI5MywgMHg4OGQxLCAweDkxYjgsIDB4 OTA3MSwgMHhmZmZkLCAweDliOTQsIDB4OTNiMSwgMHg4ZmFjLAorICAgIDB4ZmZmZCwgMHg4ZmFk LCAweGZmZmQsIDB4OWI5NSwgMHhmZmZkLCAweGZmZmQsIDB4OTBlYiwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHhmZmZkLCAweDhmYWUsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4OWI5NiwgMHhmZmZkLCAweDliOTcsIDB4ZmZmZCwgMHg5NmRlLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OWI5OCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweDhiYzQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg4ZjQxLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OWI5OSwgMHg5 YjlhLCAweDhlZGEsIDB4OTA0YiwgMHg5M2YyLCAweDkwNzMsIDB4OTRmNiwgMHg5NDQxLAorICAg IDB4OGJjNywgMHg5YjliLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhiOGYsIDB4OWI5Yywg MHhmZmZkLAorICAgIDB4OGJmYywgMHhmZmZkLCAweDkzY2QsIDB4ODlhZSwgMHhmZmZkLCAweDhl NzIsIDB4OWI5ZCwgMHg5YmEwLAorICAgIDB4OWI5ZiwgMHg4YmZiLCAweGZmZmQsIDB4OWI5ZSwg MHhmZmZkLCAweDkzNTcsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTFhZSwgMHhmZmZkLAorICAgIDB4OTM2YSwg MHg4ZWM2LCAweGZmZmQsIDB4ZmZmZCwgMHg5MTc3LCAweDk3OWEsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5YmEyLCAweGZmZmQsIDB4OWJh MywgMHg5M2Q0LAorICAgIDB4ZmZmZCwgMHg4ZTUyLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4OWJhNSwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5YmE2LCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5YmE3LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAorICAgIDB4OGFmMiwgMHg5YmE4LCAweGZmZmQsIDB4ZmZmZCwgMHg5YmE5LCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg4OWFhLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OTE1YSwgMHg4YWUy LCAweGZmZmQsIDB4OWJhYiwgMHg5NmE2LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHg5MWQwLCAweGZmZmQsIDB4OGE3OCwgMHhmZmZkLCAweGZmZmQsIDB4OWJhZCwgMHg5 YmFmLAorICAgIDB4OGFkZCwgMHhmZmZkLCAweGZmZmQsIDB4OWJhYywgMHg5YmFlLCAweGZmZmQs IDB4OWJiMSwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweDliYjAsIDB4ZmZmZCwgMHg5YmIyLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHg5YmIzLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4OTNiYiwgMHg4YmFjLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ODllMywgMHg5YmI0LCAweDliYjksIDB4ZmZmZCwg MHhmZmZkLCAweDliYjcsIDB4ZmZmZCwgMHg5NWY1LAorICAgIDB4OTVmNCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTM4NywgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweDliYjYsIDB4OGY3MywgMHhmZmZkLCAweDliYjUsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHg5MDkyLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWJiYSwgMHhmZmZkLCAw eGZmZmQsIDB4OGRlOCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5YmMwLCAweGZmZmQsIDB4ZmZm ZCwgMHg5YmMxLCAweDliYmIsIDB4OGE1MiwgMHg5YmJjLAorICAgIDB4OWJjNSwgMHg5YmM0LCAw eDliYzMsIDB4OWJiZiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5YmJlLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweDliYzIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAorICAgIDB4ZmZmZCwgMHg5NWY2LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWJjOSwgMHg5YmM2LCAweGZmZmQsIDB4OWJjOCwgMHhm ZmZkLAorICAgIDB4OTc5MiwgMHhmZmZkLCAweDliYzcsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5 YmJkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5 MDkzLCAweGZmZmQsIDB4ZmZmZCwgMHg5YmNhLCAweGZmZmQsIDB4ZmZmZCwgMHg4ZGI1LAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWJjYiwgMHhmZmZkLCAweGZmZmQsIDB4OWJjYywg MHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDliY2YsIDB4ZmZmZCwg MHg5YmNlLCAweGZmZmQsIDB4ZmZmZCwgMHg5YmNkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4OTM4OCwgMHg5YmI4LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OWJkNSwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDliZDEsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDliZDAsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHg5YmQyLCAweGZmZmQsIDB4OWJkMywgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5YmQ2LAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweDk3ZTQsIDB4ZmZmZCwgMHg5YmQ3LCAweDliZDQsIDB4ZmZmZCwgMHhmZmZk LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5YmQ4LCAweGZmZmQsIDB4ZmZmZCwgMHg4YWRl LCAweDliZDksIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDliZGIsIDB4 OWJkYSwgMHhmZmZkLCAweGZmZmQsIDB4OWJkYywgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4OWJkZCwgMHhmZmZkLCAweDkwZWMsIDB4OGY0MiwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHg4Zjg0LCAweGZmZmQsIDB4OTE4MywgMHhmZmZkLCAweDhkNDgsIDB4OGRiNiwgMHg4 ZDQ5LAorICAgIDB4OGI5MCwgMHhmZmZkLCAweGZmZmQsIDB4OWJkZSwgMHhmZmZkLCAweGZmZmQs IDB4OGRiNywgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg4Y2M4LCAweDliZGYsIDB4OTZhNCwgMHg5 NDYyLCAweDliZTAsIDB4ZmZmZCwgMHg4ZDRhLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4OGFhYSwgMHhmZmZkLCAweDkyNDYsIDB4OGJkMCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweDhlNzMsIDB4OTU3YSwgMHhmZmZkLCAweGZmZmQsIDB4OTRiZiwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWJlMSwgMHg4YWYzLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5YmU0LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4OTI5ZiwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5YmUzLCAweDliZTIsIDB4OWJlNSwg MHhmZmZkLCAweDkyZTksIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDkwODMsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4OGU3NCwgMHhmZmZkLCAweDkwYzgsIDB4ZmZmZCwgMHg5MWQxLAor ICAgIDB4OGI0MSwgMHhmZmZkLCAweGZmZmQsIDB4OTJhMCwgMHhmZmZkLCAweGZmZmQsIDB4OWJl NiwgMHg5YmU3LAorICAgIDB4OGZlZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eDk2NTgsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OWJlYSwgMHhmZmZkLCAweGZmZmQsIDB4OWJl OSwgMHg5YmU4LCAweDk1OWQsIDB4ZmZmZCwgMHg5YmYxLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHg5Njc5LCAweGZmZmQsIDB4OWJlYiwgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5YmVkLCAweDk2OGIsIDB4ZmZmZCwgMHg5YmVj LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHg5YmVlLAorICAgIDB4ZmZmZCwgMHg5NGE2LCAweDliZWYsIDB4OTViYywgMHg5YmYw LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZk LCAweDhhYjEsIDB4OTViZCwgMHg5NDRlLCAweDliZjIsIDB4OWJmMywgMHhmZmZkLAorICAgIDB4 OGQ0YiwgMHg4YWIyLCAweDliZjQsIDB4OGNiNiwgMHg5NzYzLCAweDk3NDgsIDB4OGFmNCwgMHg5 YmY2LAorICAgIDB4ZmZmZCwgMHg5MmExLCAweGZmZmQsIDB4OGQ0YywgMHg4ZmFmLCAweGZmZmQs IDB4ZmZmZCwgMHg5NGRkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDhmYjAsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4Zjk4LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweDkyZWEsIDB4OTVmNywgMHg5MzU4LAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweDhkNGQsIDB4ZmZmZCwgMHg5NTdiLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4OWJmNywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTM3OCwg MHg4ZGMwLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGNjOSwgMHhmZmZkLCAweDky ZWIsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweDg4YzEsIDB4OGY4ZSwgMHg4ZDRlLAorICAgIDB4OTc2NiwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHg5YmY4LCAweDliZjksIDB4OTQ3MCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4OWJmYSwgMHg5N2Y1LCAweDk4NGMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHg5YmZjLAorICAgIDB4OWJmYiwgMHhmZmZkLCAweGZmZmQsIDB4OGE2NiwgMHhmZmZkLCAw eGZmZmQsIDB4OWM0MCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDljNDMsIDB4OWM0 NCwgMHhmZmZkLCAweDljNDIsIDB4ZmZmZCwgMHg5NTVmLAorICAgIDB4OGZiMSwgMHg5YzQ2LCAw eDljNDUsIDB4OWM0MSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OWM0 NywgMHg5YzQ4LCAweGZmZmQsIDB4ZmZmZCwgMHg5YzQ5LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAorICAgIDB4OWM0YywgMHg5YzRhLCAweGZmZmQsIDB4OWM0YiwgMHg5YzRkLCAweGZmZmQsIDB4 ODk4NCwgMHg5MmVjLAorICAgIDB4OWM0ZSwgMHhmZmZkLCAweDhjOWEsIDB4ODlmNCwgMHg5NDU1 LCAweGZmZmQsIDB4OWM0ZiwgMHg5M2Y5LAorICAgIDB4ZmZmZCwgMHg5NWQ5LCAweGZmZmQsIDB4 OWM1MCwgMHg5ODRkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5YzUx LCAweDk1YmUsIDB4OWM1NCwgMHg5ODlmLCAweDk4YWYsIDB4ZmZmZCwgMHg4ZWFlLAorICAgIDB4 OTNmMywgMHg5YzU1LCAweGZmZmQsIDB4OGI3YywgMHg5MmEyLCAweDg4ZjgsIDB4OWM1NiwgMHg5 NWE0LAorICAgIDB4OGQ0ZiwgMHhmZmZkLCAweGZmZmQsIDB4OTI2ZiwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHg5MmVkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweDk2ZWQsIDB4OGNiNywgMHg4Y2NhLAorICAgIDB4ZmZmZCwgMHg5YzU3LCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweDljNTgsIDB4ZmZmZCwgMHg5YzVlLAorICAgIDB4ZmZmZCwgMHg4 ZWUzLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDkyYTMsIDB4ZmZmZCwgMHg4YmFkLAorICAg IDB4OWM1OSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5NTRhLCAweGZmZmQsIDB4OTI2NSwg MHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5YzVhLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OWM1YiwgMHhmZmZkLCAweDhiYWUsIDB4ZmZmZCwg MHg5YzVjLCAweGZmZmQsIDB4OWM1ZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5YzVmLCAweGZm ZmQsIDB4OTM5NiwgMHhmZmZkLCAweGZmZmQsIDB4OWM2MCwgMHg5YzYxLAorICAgIDB4ZmZmZCwg MHg5YzYyLCAweGZmZmQsIDB4ZmZmZCwgMHg5YzUzLCAweDljNTIsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHg5YzYzLCAweDhjNjAsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTU0 NiwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg4ZGNhLCAweDk1NTYsIDB4OTJhNCwgMHg5NTZhLCAw eDljNjQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OGZiMiwgMHg4OTY1LCAweGZmZmQsIDB4OWM2 NSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5YzY2LAorICAgIDB4ZmZmZCwgMHg5NmYwLCAw eGZmZmQsIDB4ZmZmZCwgMHg5NGRlLCAweGZmZmQsIDB4ZmZmZCwgMHg5YzY5LAorICAgIDB4ODk5 ZCwgMHg5MGFhLCAweDljNjgsIDB4OWM2NywgMHg4YzYxLCAweDkxZDIsIDB4ZmZmZCwgMHg5YzZk LAorICAgIDB4OWM2YiwgMHhmZmZkLCAweDljNmEsIDB4OTdhNSwgMHg4Y2UzLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4OGY5OSwgMHg5YzZjLCAweDkzNmIsIDB4OGY1ZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHg5M2JlLAorICAgIDB4OWM3MCwgMHg5YzZmLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWM2ZSwgMHhmZmZkLAorICAgIDB4OWM3MSwgMHg4Y2U0 LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 OWM3MiwgMHg5NTljLCAweDhmN2EsIDB4ZmZmZCwgMHhmZmZkLCAweDljNzMsIDB4OTRmNywgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTNiZiwgMHg5MmE1LCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5MzRmLCAweGZmZmQsIDB4ZmZmZCwgMHg5 Yzc0LCAweDhiNGEsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4OTA1MywgMHhmZmZkLCAweDk1NGIsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4YWY1LCAweDk0NDUsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWM3NSwg MHg4ZTc1LAorICAgIDB4OTY1OSwgMHg5NjVhLCAweGZmZmQsIDB4ZmZmZCwgMHg4OTllLCAweDlj N2EsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OTI4OSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHg5Yzc3LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ODlmNSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OWNhYiwg MHg5Yzc5LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk0NGYsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4OWM3OCwgMHhmZmZkLCAweGZmZmQsIDB4OWM3NiwgMHhmZmZkLCAweDhkOWEsIDB4ZmZm ZCwgMHg5YzdjLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4OWM4MywgMHg5Yzg5LAorICAgIDB4OWM4MSwgMHhmZmZkLCAw eDkzN2IsIDB4ZmZmZCwgMHhmZmZkLCAweDljODYsIDB4OTU3YywgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHg5YzgwLCAweGZmZmQsIDB4OWM4NSwgMHg5N2U1LCAweDhlNzYsIDB4ZmZmZCwgMHhmZmZk LAorICAgIDB4OTFkMywgMHg5YzdkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhiN2QsIDB4 OWM4OCwgMHg5MGFiLAorICAgIDB4ODk4NSwgMHg5YzgyLCAweDg5ZjYsIDB4OWM4NywgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHg4YmFmLAorICAgIDB4ZmZmZCwgMHg5Yzg0LCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZk LCAweDljOGEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHg5YzhjLCAweDljOTYsIDB4OWM5NCwgMHhmZmZkLCAweGZmZmQsIDB4OWM5MSwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDljOTAsIDB4OTdmNiwgMHhmZmZkLCAweDljOTIs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OGJiMCwgMHhmZmZkLCAweDhkNTAsIDB4ZmZmZCwgMHhm ZmZkLCAweDhmOWEsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5Yzk5LCAweDljOGIs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5YzhmLAorICAgIDB4OWM3ZSwgMHhm ZmZkLCAweDg5ZjgsIDB4OWM5MywgMHg5Yzk1LCAweDkyNzAsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4OGRhNiwgMHg4OWI2LCAweDljOGQsIDB4OWM5OCwgMHg5Yzk3LCAweDhiYjEsIDB4ZmZmZCwg MHg5MWE3LAorICAgIDB4OGE4NiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhj NjIsIDB4ZmZmZCwgMHg5YzhlLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5YzlhLCAweGZm ZmQsIDB4OWM5ZCwgMHg5YzlmLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHg4ZWJiLCAweGZmZmQsIDB4OWNhNSwgMHg5MmVlLCAweDljOWIsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHhmZmZkLCAweDljYTMsIDB4ZmZmZCwgMHg4OWY3LCAweGZmZmQsIDB4OWNh MSwgMHg5Y2EyLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDljOWUsIDB4OWNhMCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHg4Y2U1LAorICAgIDB4OTc0OSwgMHhmZmZkLCAweGZmZmQsIDB4OGFi MywgMHhmZmZkLCAweGZmZmQsIDB4ODk3OCwgMHg5Y2E0LAorICAgIDB4ZmZmZCwgMHg5NDU5LCAw eDg4YWIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweDk0ZGYsIDB4OWM3YiwgMHg5Y2FhLCAweDljYWUsIDB4OTZlMywgMHhmZmZk LAorICAgIDB4OWNhNywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5Mzg5LCAweDljYWMsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweDhmZWUsIDB4OWNhZCwgMHg5M2Q1LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5ODY2 LCAweGZmZmQsIDB4OWNhOSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 OWNhZiwgMHhmZmZkLCAweDhkOWIsIDB4ZmZmZCwgMHg5MGM5LCAweGZmZmQsIDB4ZmZmZCwgMHg4 OGQyLAorICAgIDB4OWNhOCwgMHg5Y2E2LCAweGZmZmQsIDB4OTE3OSwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHg5YzljLAorICAgIDB4OGU1MywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OTFjNCwgMHg5Y2JiLCAweGZmZmQs IDB4OTE3YSwgMHg5Y2I2LCAweGZmZmQsIDB4OWNiMywgMHg5Y2I0LAorICAgIDB4ZmZmZCwgMHg4 ZWU0LCAweDljYjcsIDB4OWNiYSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4OWNiNSwgMHg4ZjQ0LCAweGZmZmQsIDB4OWNiOCwgMHhmZmZkLCAweGZmZmQsIDB4OWNiMiwg MHhmZmZkLAorICAgIDB4OTZmYSwgMHg5NmY5LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDlj YmMsIDB4OWNiZCwgMHg4OGQzLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweDljYjEsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDhi ZjAsIDB4ODhhNCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4YWI0LAorICAgIDB4ZmZmZCwg MHg5Y2I5LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5Y2MxLAor ICAgIDB4OWNjMCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5Y2M1LCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5Y2M2LCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHg5Y2M0LCAweDljYzcsIDB4OWNiZiwgMHg5Y2MzLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAw eDljYzgsIDB4ZmZmZCwgMHg5Y2M5LCAweGZmZmQsIDB4ZmZmZCwgMHg5Y2JlLAorICAgIDB4OGU5 YywgMHhmZmZkLCAweDljYzIsIDB4OTFkNCwgMHg4ZDUxLCAweDljYjAsIDB4OTA1NCwgMHhmZmZk LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWNkNiwgMHhmZmZkLCAweDk1ZTcsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4OWNjYywgMHg5Y2NkLCAweDljY2UsIDB4ZmZmZCwgMHhmZmZk LCAweDljZDUsIDB4ZmZmZCwgMHg5Y2Q0LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDk2OWQsIDB4 OGFiNSwgMHhmZmZkLCAweDljZDIsIDB4ZmZmZCwgMHg4YzY0LAorICAgIDB4OGE1MywgMHhmZmZk LCAweGZmZmQsIDB4OWNjZiwgMHhmZmZkLCAweGZmZmQsIDB4OTdiNiwgMHg5Y2QxLAorICAgIDB4 ODhkNCwgMHg5Y2QzLCAweGZmZmQsIDB4OWNjYSwgMHg5Y2QwLCAweDljZDcsIDB4OGM2MywgMHg5 Y2NiLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4OTc3YywgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDk3NGEsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5Y2RhLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDljZGUs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTE5ZSwgMHhmZmZkLAorICAgIDB4OTdmNywgMHg5 Y2RmLCAweGZmZmQsIDB4ZmZmZCwgMHg5Y2RjLCAweGZmZmQsIDB4OWNkOSwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHg5Y2Q4LCAweDljZGQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5NWFlLCAweGZm ZmQsIDB4ZmZmZCwgMHg5M2IyLAorICAgIDB4ZmZmZCwgMHg4YzY1LCAweGZmZmQsIDB4OWNlMCwg MHg5Y2RiLCAweGZmZmQsIDB4OWNlMSwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDhj OWIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ODlhZiwgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweDljZTksIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGFiNiwgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWNlNywgMHhmZmZkLCAweGZmZmQsIDB4OWNl OCwgMHg4ZGE3LAorICAgIDB4OWNlNiwgMHg5Y2U0LCAweDljZTMsIDB4OWNlYSwgMHg5Y2UyLCAw eDljZWMsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ODlmOSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4OWNlZSwgMHhmZmZkLCAweGZmZmQsIDB4OWNlZCwgMHhmZmZk LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDkyYTYsIDB4ZmZmZCwgMHg5Y2Yx LCAweGZmZmQsIDB4OWNlZiwgMHg5Y2U1LAorICAgIDB4OGM5YywgMHhmZmZkLCAweDljZjAsIDB4 ZmZmZCwgMHg5Y2Y0LCAweDljZjMsIDB4OWNmNSwgMHg5Y2YyLAorICAgIDB4OWNmNiwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 OWNmNywgMHg5Y2Y4LCAweDk1ZTgsIDB4ZmZmZCwgMHg5Y2ZhLCAweDljZjksIDB4OGY1ZSwgMHhm ZmZkLAorICAgIDB4OTBhYywgMHg4OWU0LCAweDg5ZmEsIDB4ZmZmZCwgMHg5Y2ZiLCAweGZmZmQs IDB4ODhiZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDkwY2EsIDB4OWNmYywgMHhm ZmZkLCAweGU2YzEsIDB4OWQ0MCwgMHg4YzgxLAorICAgIDB4ZmZmZCwgMHg5ZDQxLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTBlZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweDlkNDIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWQ0MywgMHg4YjU5LAorICAg IDB4OWQ0NCwgMHhmZmZkLCAweDlkNDUsIDB4OWQ0NiwgMHg5MWQ1LCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4OGNjYiwgMHhmZmZkLCAweGZmZmQsIDB4OTZkZiwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHg5NjViLAorICAgIDB4OGY4YSwgMHg5ZDQ3LCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5MGVlLAorICAgIDB4ZTdiYiwgMHg5NGUwLCAweGZm ZmQsIDB4OGVlOCwgMHhmZmZkLCAweDhkY2IsIDB4OWQ0OCwgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4OTFjNSwgMHhmZmZkLCAweDk1YTUsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4OTFlZiwgMHhmZmZkLCAweGZmZmQsIDB4OWQ0YiwgMHhmZmZkLCAweGZmZmQsIDB4OWQ0 OSwgMHhmZmZkLAorICAgIDB4OWQ0YywgMHhmZmZkLCAweGZmZmQsIDB4OWQ0YSwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OWQ0ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4OTVhZiwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg4OGI1LCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTU3ZCwgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHg5NGUxLCAweGZmZmQsIDB4ZmZmZCwgMHg5ZDRlLCAweGZmZmQsIDB4OWQ1MSwgMHg4ZmIz LAorICAgIDB4OGI1YSwgMHhmZmZkLCAweDlkNGYsIDB4OWQ1NiwgMHg4ZmI0LCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5ZDUwLCAweDk0NjMsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5NzdkLCAweDlkNTIsIDB4 OWQ1MywgMHg5ZDU3LCAweDkzOGEsIDB4OWQ1NCwgMHg4ZDUyLAorICAgIDB4OTBkYywgMHhmZmZk LCAweGZmZmQsIDB4OWQ2NSwgMHg5NGIyLCAweGZmZmQsIDB4OTFmMCwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTRlMiwgMHg5ZGFiLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5NWY4LCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweDkyZWYsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5Njk1LCAweGZmZmQs IDB4OWQ1YSwgMHg4OTlmLCAweDkyOGEsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweDlkNjMsIDB4ZmZmZCwgMHhmZmZkLCAweDkyNTMsIDB4OWQ1ZCwgMHg5ZDY0LAorICAg IDB4OWQ1ZiwgMHg5ZDY2LCAweDlkNjIsIDB4ZmZmZCwgMHg5ZDYxLCAweDk0OGYsIDB4ZmZmZCwg MHg5ZDViLAorICAgIDB4ODlmYiwgMHg5ZDU5LCAweDhiOTEsIDB4OTFmMSwgMHg5ZDU1LCAweGZm ZmQsIDB4ZmZmZCwgMHg5ZDU4LAorICAgIDB4OGQ1MywgMHg5MGQ5LCAweGZmZmQsIDB4OGZiNSwg MHg5ZDYwLCAweDk0NzEsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OGI5MiwgMHg4YTY3LCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4YTg3LCAweDkwNDAsIDB4OWQ2OCwgMHg5ZDZkLAor ICAgIDB4ZmZmZCwgMHg5ZDY5LCAweGZmZmQsIDB4OGM5ZCwgMHhmZmZkLCAweDlkNmUsIDB4OGU0 MSwgMHg4ZDg5LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4OGY0NSwgMHg5ZDVjLAorICAgIDB4ZmZmZCwgMHg4ZTlkLCAweDlkNmIsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4ZTc3LAorICAgIDB4OWQ2YywgMHg4OGMyLCAw eGZmZmQsIDB4ZmZmZCwgMHg5ZDY3LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHg5MmE3LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAorICAgIDB4ZmZmZCwgMHg4YjkzLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHg4YmIyLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHg5ZDZhLAorICAgIDB4ODhhNSwgMHhmZmZkLCAweGZmZmQsIDB4 OGRjMSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5MDU1LAorICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHhmZmZkLCAweDkyZjAsIDB4ZmZmZCwgMHhmZmZkLCAweDk0ZDIsIDB4OWQ3MCwgMHg5 MTdkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5MWE4LCAweGZmZmQsIDB4ZmZmZCwgMHg4 ZTRhLCAweDlkNzEsIDB4ZmZmZCwgMHg5ZDczLAorICAgIDB4OWQ2ZiwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweDk1ZGYsIDB4ZmZmZCwgMHg5MmJiLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5MTdiLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHg5NWY5LAorICAgIDB4OGVjYywgMHg5ZDgwLCAweGZmZmQsIDB4OWQ3ZSwgMHhmZmZkLCAweGZm ZmQsIDB4OTA5OCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDhjOWUsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4OWQ3OCwgMHg4ZmI3LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDkz ZTYsIDB4OTQ1MCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OWQ3Niwg MHhmZmZkLCAweGZmZmQsIDB4OTE3YywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4OGVmNiwgMHg5ZDdiLCAweGZmZmQsIDB4ZmZmZCwgMHg4ZmI2LCAweGZmZmQsIDB4OWQ3 NSwgMHg5ZDdhLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDk0NzIsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4OWQ3NCwgMHhmZmZkLAorICAgIDB4OGM0MCwgMHhmZmZkLCAweGZmZmQsIDB4OGE3 YywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5ZDdjLAorICAgIDB4OTdhOSwgMHg4ZGNjLCAw eDkyNTQsIDB4OWQ3OSwgMHhmZmZkLCAweDkwZGEsIDB4ZmZmZCwgMHg4ZDU0LAorICAgIDB4OTA4 NCwgMHg4OTg2LCAweDkxNWIsIDB4OWQ3NywgMHg4YjY0LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDhjNjYsIDB4ZmZmZCwgMHg5MmNkLCAweDlkN2QsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTE3ZSwgMHhmZmZk LCAweGZmZmQsIDB4OWQ4MSwgMHhmZmZkLAorICAgIDB4OWQ4MywgMHhmZmZkLCAweGZmZmQsIDB4 OTFiNSwgMHg5ZDg5LCAweGZmZmQsIDB4OWQ4NCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5ZDg2 LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5NTYwLAorICAgIDB4 OTJmMSwgMHhmZmZkLCAweDlkODcsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTc0YiwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDk3NjcsIDB4OGFiNywgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg4OGFjLCAweGZmZmQsIDB4OWQ4NSwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5ZDgyLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGFmNiwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4OTg3LCAweGZmZmQsIDB4OWQ4OCwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweDk3NjgsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4OWQ4YywgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweDkxYjksIDB4ZmZmZCwgMHg5ZDkzLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4OWQ4ZCwgMHhmZmZkLCAweGZmZmQsIDB4OWQ4YSwgMHg5ZDkxLAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5ZDcyLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWQ4 ZSwgMHhmZmZkLAorICAgIDB4OWQ5MiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5NGMwLCAw eDkzOGIsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHg5ZDhiLCAweGZmZmQsIDB4OWQ4ZiwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAw eDhjNjcsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGRlZiwgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweDkwZGIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 OWQ5NywgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OTM0NSwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5ZDk0LAorICAgIDB4 ZmZmZCwgMHg5NjgwLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5 ZDk1LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4OWQ5NiwgMHhmZmZkLAorICAgIDB4OTZjYywgMHhmZmZkLCAweDkwYTAsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4OGM4MiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OWQ5ZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweDhlNTQsIDB4OWQ5YSwgMHhmZmZkLCAweDlkOTksIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDk0NTEsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4OTNiMywgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHg5MzUwLCAweDlkOWIsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5ZDljLCAweGZm ZmQsIDB4OTU4ZiwgMHhmZmZkLCAweDk0NjQsIDB4OGU0MiwgMHhmZmZkLAorICAgIDB4OTBlZiwg MHhmZmZkLCAweDk2NmYsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHg4YTY4LCAweGZmZmQsIDB4OWRhMywgMHg5ZDllLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5NzY5LCAweDlkYTUsIDB4ZmZmZCwgMHhmZmZkLCAw eDlkYTEsIDB4ZmZmZCwgMHg5ZGEyLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweDkxODAsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAw eDlkYTAsIDB4ZmZmZCwgMHg5ZDVlLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OWRh NCwgMHhmZmZkLCAweDlkOWYsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAorICAgIDB4OWRhOSwgMHg5ZGFhLCAweDkzNDYsIDB4OWRhYywgMHhmZmZkLCAweGZmZmQsIDB4 OGU0MywgMHg5ZGE3LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4YjVi LCAweGZmZmQsIDB4ZmZmZCwgMHg5ZGFkLAorICAgIDB4ZmZmZCwgMHg5ZGE2LCAweDlkYjEsIDB4 ZmZmZCwgMHg5ZGIwLCAweGZmZmQsIDB4OWRhZiwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZk LCAweDlkYjIsIDB4ZmZmZCwgMHhmZmZkLCAweDlkYjQsIDB4OGZlZiwgMHhmZmZkLAorICAgIDB4 OWRiMywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDlkYjcsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OWRiNSwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHg5ZGI2LCAweDlkOTAsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4OWRiOSwgMHg5ZGI4LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweDlkOTgsIDB4OWRiYSwgMHg5ZGFlLCAweGZmZmQsIDB4ZmZmZCwg MHg4ZTc4LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5ZGJiLCAweDlk YmMsIDB4OWRiZSwgMHg5ZGJkLAorICAgIDB4OWRiZiwgMHg4OWZjLCAweGZmZmQsIDB4OGQ1NSwg MHhmZmZkLCAweGZmZmQsIDB4OTVmYSwgMHg5MGFkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhjY2MsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OWRjMSwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDlkYzQsIDB4ZmZmZCwgMHg5NTcxLAor ICAgIDB4ZmZmZCwgMHg4YjdlLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDlkYzMsIDB4OWRj MiwgMHg5NDczLAorICAgIDB4OWRjNSwgMHg4YmIzLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eDlkYzcsIDB4OWRjNiwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDhhYjgsIDB4OGU1 NSwgMHhmZmZkLCAweGZmZmQsIDB4OTNkNiwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHg4YzY4LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OTA5 NCwgMHhmZmZkLCAweDlkYzgsIDB4ZmZmZCwgMHg5MGFlLCAweDkzNDcsIDB4ZmZmZCwgMHg5NTdl LAorICAgIDB4OWRjOSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDlkY2EsIDB4OWRjYiwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHg5NWI2LAorICAgIDB4OWI3YywgMHg5MGM0LCAweGZmZmQsIDB4 ZmZmZCwgMHg5NTZiLCAweGZmZmQsIDB4OGRkNiwgMHhmZmZkLAorICAgIDB4OTRlMywgMHg5NGMx LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5MzZjLAorICAgIDB4 ZmZmZCwgMHg5N2JmLCAweGZmZmQsIDB4OWRjZCwgMHg4ZWNlLCAweGZmZmQsIDB4ZmZmZCwgMHg5 ZGNlLAorICAgIDB4ZmZmZCwgMHg4OGI0LCAweGZmZmQsIDB4ZmZmZCwgMHg4YmQyLCAweDkwY2Is IDB4ZmZmZCwgMHg5NTgwLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWRjZiwgMHg4 ZTYxLCAweDkyNjYsIDB4ZmZmZCwgMHg4ZTdhLAorICAgIDB4OTA1NiwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5ZGQwLAorICAgIDB4ZmZmZCwgMHg5 NWZiLCAweGZmZmQsIDB4ZmZmZCwgMHg4OTk3LCAweDhlN2IsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHg5ZGQzLCAweGZmZmQsIDB4OWRkMSwgMHg5ZGQ0LCAweDk3YjcsIDB4OWRkMiwg MHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTBmOSwgMHg5ZGQ1LCAweGZm ZmQsIDB4ZmZmZCwgMHg5MWIwLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDlkZDYsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4YWY4LAorICAgIDB4ZmZmZCwgMHg5ZGQ4LCAweGZm ZmQsIDB4OWRkNywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OWRkOSwg MHg5ZGRhLCAweDhhZjksIDB4ZmZmZCwgMHhmZmZkLCAweDkzZmEsIDB4OTI1NSwgMHg4YjhjLAor ICAgIDB4OGU3YywgMHg5MTgxLCAweGZmZmQsIDB4ZmZmZCwgMHg4ZjdiLCAweDg4YWUsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5ZGRiLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDg5YTAsIDB4OWRk ZiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAw eDhkNTYsIDB4OWRkZSwgMHhmZmZkLCAweGZmZmQsIDB4OGRhOSwgMHg4ZmI4LAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweDlkZGQsIDB4ZmZmZCwgMHg4ZmI5LCAweGZmZmQsIDB4OTZiZSwgMHg4ZGE4 LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ODhkNSwgMHg5MGNjLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5ZGU0 LCAweGZmZmQsIDB4ZmZmZCwgMHg5MGFmLAorICAgIDB4ODk2NiwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweDhmNzQsIDB4ZmZmZCwgMHg5Njg2LAorICAgIDB4OGRmMCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhmYmEsIDB4ZmZmZCwgMHg5MGE1LAorICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5ZGUzLCAweDlkZTEsIDB4OWRlMiwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5MjhiLCAweGZmZmQs IDB4ZmZmZCwgMHg5ZTQ1LAorICAgIDB4ZmZmZCwgMHg5ZGU4LCAweDhlOWUsIDB4OGQ1NywgMHg5 ZGU2LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5ZGU3LCAweGZmZmQs IDB4OTA1NywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5ZGU1LAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweDhlNGUsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDlkZWEsIDB4OWRlOSwg MHg5ZGVlLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDlkZWYsIDB4ZmZmZCwgMHg5ZGViLCAweGZm ZmQsIDB4OGE0MSwgMHg5ZGVjLAorICAgIDB4OWRlZCwgMHg5NGQzLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4OTU4MSwgMHg4YzY5LAorICAgIDB4OWRmMCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHg5MGIwLCAweGZmZmQsIDB4OGZiYiwgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweDkyNzEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHg4YmM1LCAweGZmZmQsIDB4OWRmMSwgMHg5ZGY1LCAweGZmZmQsIDB4ZmZm ZCwgMHg4OWM5LAorICAgIDB4OWRmMiwgMHg5ZGY0LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4OWRmMywgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg4ZjhiLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4OTI2NywgMHg4OGMzLAorICAgIDB4OWRmNiwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDlkZjcsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweDkyYTgsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTdlZiwgMHhmZmZk LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGU2MiwgMHhmZmZkLCAweGZmZmQsIDB4 OTVlOSwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5NjVj LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OWU0MSwgMHg5ZGY5LCAweGZmZmQsIDB4 ZmZmZCwgMHg5ZGZjLCAweGZmZmQsIDB4OWRmYiwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5ZGY4 LCAweGZmZmQsIDB4ZmZmZCwgMHg5ZTQwLCAweGZmZmQsIDB4ZmZmZCwgMHg5M2RjLAorICAgIDB4 ZmZmZCwgMHg5ZGZhLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4OWU0MiwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg4ZjhjLCAweDllNDMsIDB4ZmZmZCwgMHg5 NzZhLCAweDk0OTgsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OWU0NCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWU0NiwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5 ZTQ3LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4OWU0OCwgMHhmZmZkLCAweDhiYzgsIDB4ODk2NywgMHg4ZDU4LCAweDllNDksIDB4ZmZmZCwg MHg5ZTRhLAorICAgIDB4OGY5MSwgMHg5MTgyLCAweGZmZmQsIDB4ZmZmZCwgMHg5OWQ2LCAweDkx NWQsIDB4OTE1YywgMHg5MWQ2LAorICAgIDB4OGRjNSwgMHhmZmZkLCAweGZmZmQsIDB4OThmMCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OGM4ZSwgMHg5NzRjLCAweGZm ZmQsIDB4OTVmYywgMHhmZmZkLCAweDk1OWUsIDB4ZmZmZCwgMHg5ZTRiLAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4ZGYxLCAweDkyYmQsIDB4OWU0YywgMHg5ODRlLAor ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTY1ZCwgMHhmZmZkLCAweDkyYTksIDB4OWU0 ZCwgMHg4YWZhLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4OWU0ZSwgMHg5ZTRmLAorICAgIDB4OTZkOCwgMHhmZmZkLCAweDk2YTIsIDB4OTY5 NiwgMHg5NjdiLCAweDhlNDQsIDB4OWU1MSwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg4ZWU5LCAw eGZmZmQsIDB4ZmZmZCwgMHg5NjcwLCAweGZmZmQsIDB4OWU1MywgMHg5ZTU2LAorICAgIDB4OWU1 NSwgMHhmZmZkLCAweDhhZjcsIDB4ZmZmZCwgMHhmZmZkLCAweDhiODAsIDB4ZmZmZCwgMHg5ZTUy LAorICAgIDB4ZmZmZCwgMHg5ZTU0LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 OWU1NywgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5MDk5LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4OTc5YiwgMHg4OGM3LAorICAgIDB4OGRkZSwgMHg5MWJhLCAweGZmZmQsIDB4 OGVkYiwgMHhmZmZkLCAweGZmZmQsIDB4OGZmMSwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5ZTVh LCAweGZmZmQsIDB4ZmZmZCwgMHg5MzZkLCAweGZmZmQsIDB4OWU1OCwgMHg5MWE5LAorICAgIDB4 OWU1OSwgMHg4ZmYwLCAweDk2ZGIsIDB4OWU1YiwgMHg5ZTVjLCAweDk3ODgsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDllNjEsIDB4ZmZmZCwgMHhmZmZkLCAweDhkNTks IDB4ZmZmZCwgMHg5NDc0LAorICAgIDB4OWU1ZSwgMHg5MzhjLCAweDlkZGMsIDB4OWRlMCwgMHhm ZmZkLCAweDhiNmUsIDB4ZmZmZCwgMHg5NDY2LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHg5ZTYwLCAweGZmZmQsIDB4OGZiYywgMHg5NGMyLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDllNjYsIDB4ZmZmZCwgMHg5NGY4LAorICAg IDB4ZmZmZCwgMHg5ZTVkLCAweGZmZmQsIDB4OWU2MywgMHg5ZTYyLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4OTBjZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk2 OGQsIDB4ZmZmZCwgMHg5N2QxLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDk2ODcsIDB4ZmZmZCwg MHg4OWNhLCAweDhlN2QsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OTg2NywgMHg5ZTY1LCAweDkw OTUsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWU2NCwgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHg5ZTVmLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4Y2NkLAor ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWU2YiwgMHg5ZTY5LCAweGZmZmQsIDB4ODlj YiwgMHg5ZTY3LAorICAgIDB4OWU2ZCwgMHg5ZTczLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5MWM2LCAweGZmZmQsIDB4ZmZm ZCwgMHg5NWJmLCAweGZmZmQsIDB4OWU3NSwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAw eDk1NDEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWU3NCwgMHg5NDkwLAorICAgIDB4OTY1 ZSwgMHg4YWI5LCAweGZmZmQsIDB4OTBmNSwgMHg4ZjVmLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAorICAgIDB4OTJkMSwgMHhmZmZkLCAweDk3NGQsIDB4ZmZmZCwgMHhmZmZkLCAweDllNzAsIDB4 OWU2ZiwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDllNzEsIDB4ZmZmZCwgMHg5ZTZl LCAweGZmZmQsIDB4ZmZmZCwgMHg5ZTc2LAorICAgIDB4ZmZmZCwgMHg5ZTZjLCAweGZmZmQsIDB4 ZmZmZCwgMHg5ZTZhLCAweGZmZmQsIDB4OWU3MiwgMHg5ZTY4LAorICAgIDB4ZmZmZCwgMHg5Mjhj LCAweGZmZmQsIDB4OTZmNiwgMHg4ZWM0LCAweDhkZjIsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGRiOCwgMHhmZmZkLCAweGZmZmQsIDB4OTY4ZiwgMHg4 YTYwLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDkyY2MsIDB4OTNjOCwgMHg4OTY4LCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4OTBmMCwgMHhmZmZkLCAweGZmZmQsIDB4OTBiMiwgMHg4YzQ5LAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWU3OCwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHg4ZDVhLCAweDhhOWMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5ZTdhLCAweDhhOTQsIDB4OWU4MSwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDllN2QsIDB4ZmZmZCwg MHg5MGYxLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OGE2YSwgMHg4ZGFhLCAweGZm ZmQsIDB4ZmZmZCwgMHg4YTY5LCAweDhkY2QsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OWU3Yiwg MHg4Yzg1LCAweDhjNmEsIDB4OTM4ZCwgMHhmZmZkLCAweGZmZmQsIDB4OWU3OSwgMHhmZmZkLAor ICAgIDB4ODhjNCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDllN2MsIDB4OWU3 ZSwgMHhmZmZkLAorICAgIDB4OGJjYiwgMHg4YzRiLCAweGZmZmQsIDB4OGFiYSwgMHg4YjZhLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5ZTgyLCAweGZmZmQsIDB4ZmZm ZCwgMHg4ZGY3LCAweDk2OTEsIDB4ZmZmZCwgMHg4ZTU2LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4OWU4MywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5NTRmLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5ZThmLCAweGZmZmQsIDB4 ODliMSwgMHg5ZTg0LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4OWU5NSwgMHg5ZTg1LAorICAgIDB4ZmZmZCwgMHg5N2MwLCAweGZmZmQsIDB4 OWU4YywgMHhmZmZkLCAweDk0N2UsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDllOTQsIDB4ZmZmZCwgMHg5ZTg3LAorICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ODhiMiwgMHg5ZTg5LCAweGZmZmQsIDB4ZmZmZCwgMHg4 ZDViLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWU4YiwgMHhmZmZkLCAweDllOGEs IDB4ZmZmZCwgMHg5ZTg2LAorICAgIDB4OWU5MSwgMHhmZmZkLCAweDhmYmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4OWFlYiwgMHg4Y2U2LAorICAgIDB4OTc5YywgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweDllODgsIDB4ZmZmZCwgMHg5MmYyLAorICAgIDB4OGE0MiwgMHg4 ZGFiLCAweGZmZmQsIDB4OWU4MCwgMHhmZmZkLCAweDllOTAsIDB4OGE4MSwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHg5ZThlLCAweDllOTIsIDB4ZmZmZCwgMHg5MzhlLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4YWZjLCAweGZm ZmQsIDB4OWViMCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5NmM3LCAweDllOTcsIDB4OGFmYiwg MHhmZmZkLCAweDllOWUsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDk2 NWYsIDB4ZmZmZCwgMHg5ZTlmLCAweDllYTEsIDB4ZmZmZCwgMHg5ZWE1LAorICAgIDB4OWU5OSwg MHhmZmZkLCAweDkyNDksIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5MzhmLAor ICAgIDB4OWVhOSwgMHg5ZTljLCAweGZmZmQsIDB4OWVhNiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHg5ZWEwLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4OTA1OCwgMHg5ZWFhLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDkwYjEsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5ZWE4LCAw eDhhYmIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OTg2 ZiwgMHg5ZTk2LCAweGZmZmQsIDB4ZmZmZCwgMHg5ZWE0LCAweDg4ZDYsIDB4ZmZmZCwgMHhmZmZk LAorICAgIDB4OWU5OCwgMHhmZmZkLCAweGZmZmQsIDB4OTZiOCwgMHg5ZTlkLCAweDkwNDEsIDB4 OTJjNSwgMHg5ZTkzLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDllYTMsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5MDlhLCAweDllYWQsIDB4 OGE5MSwgMHg4YzlmLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5ZWFm LCAweDllOWEsIDB4OWVhZSwgMHhmZmZkLCAweDllYTcsIDB4OWU5YiwgMHhmZmZkLAorICAgIDB4 OWVhYiwgMHhmZmZkLCAweDllYWMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4OWViZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5M2NjLCAweGZmZmQs IDB4OWVhMiwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5ZWI5LCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweDllYmIsIDB4ZmZmZCwgMHg5MmQ2LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweDk3NmIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTU5NiwgMHg5ZWI2LCAweDkxYzgsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5ZWJjLCAweDkxNWUsIDB4ZmZmZCwgMHg5ZWIzLCAweDll YzAsIDB4OWViZiwgMHhmZmZkLAorICAgIDB4OTNlZCwgMHg5ZWJlLCAweDkzZTgsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDll YzIsIDB4OWViNSwgMHhmZmZkLCAweDhiYzYsIDB4OWViOCwgMHg4ZjdjLAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4OTQ4MCwgMHg5ZWJhLCAweDhiYzksIDB4ZmZmZCwgMHg5ZWIyLAor ICAgIDB4OWViNCwgMHg5ZWIxLCAweGZmZmQsIDB4ZmZmZCwgMHg5ODRmLCAweDhhNzksIDB4OWVi NywgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5ZWMxLCAweDhhNTQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDhkZTUsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ODk3YywgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5ZWQyLCAw eGZmZmQsIDB4ZmZmZCwgMHg5ODUwLCAweDllZDUsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4OTA1OSwgMHg5ZWQ0LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAorICAgIDB4OWVkMywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHg5ZWQwLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4OWVjNCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5ZWUxLCAweDllYzMsIDB4 ZmZmZCwgMHg5ZWQ2LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4OWVjZSwgMHhmZmZkLCAweGZmZmQsIDB4OWVjOSwgMHg5ZWM2LAorICAgIDB4 ZmZmZCwgMHg5ZWM3LCAweGZmZmQsIDB4OWVjZiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhl YWEwLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDllY2MsIDB4OGQ1YywgMHg5MmM2LCAweDkxODQs IDB4OWVjYSwgMHhmZmZkLAorICAgIDB4OWVjNSwgMHhmZmZkLCAweGZmZmQsIDB4OWVjOCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OTc2YywgMHg5NjhhLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweDllY2QsIDB4OWVkNywgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5ZWRmLAorICAg IDB4OWVkOCwgMHhmZmZkLCAweGZmZmQsIDB4OWVlNSwgMHhmZmZkLCAweDllZTMsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDllZGUsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5ZWRkLCAweGZmZmQsIDB4OTJjZSwg MHhmZmZkLCAweDkxODUsIDB4ZmZmZCwgMHg5ZWRiLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDll ZDksIDB4ZmZmZCwgMHhmZmZkLCAweDllZTAsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweDllZTYsIDB4OTRmMywgMHg5ZWVjLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHhmZmZkLCAweDllZTcsIDB4OWVlYSwgMHg5ZWU0LCAweGZmZmQsIDB4ZmZm ZCwgMHg5Mjk0LAorICAgIDB4ZmZmZCwgMHg5NTU3LCAweGZmZmQsIDB4OWVkYSwgMHhmZmZkLCAw eGZmZmQsIDB4OWVlMiwgMHg4ZmJlLAorICAgIDB4ZmZmZCwgMHg5NmNkLCAweDllZjYsIDB4OWVl OSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg4Y2EwLCAw eDg5YTEsIDB4OGE3ZSwgMHhmZmZkLCAweGZmZmQsIDB4OWVkMSwgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhmYmYsIDB4OWVlZSwgMHhmZmZk LAorICAgIDB4OWVmNSwgMHg4ZWY3LCAweDhhOTIsIDB4ZmZmZCwgMHhmZmZkLCAweDkyNGQsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5ZWVi LCAweGZmZmQsIDB4ZmZmZCwgMHg5ZWYwLAorICAgIDB4OWVmNCwgMHhmZmZkLCAweGZmZmQsIDB4 OGJiNCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 OGI2YiwgMHg5ZWYyLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4 YjQwLAorICAgIDB4ZmZmZCwgMHg5M2M5LCAweDllZjEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4OWVmMywgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDllZWQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OWVlZiwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4YTgwLAorICAg IDB4OTI2OCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5ZWZhLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDll ZjgsIDB4OGNlNywgMHhmZmZkLAorICAgIDB4OWVmNywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5ZjQwLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHg5ZTc3LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OWVmOSwg MHhmZmZkLCAweDllZmIsIDB4OWVmYywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHhmZmZkLCAweDlmNGIsIDB4ZmZmZCwgMHg5ZjQ3LCAweGZmZmQsIDB4OWU4 ZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWY0NiwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OWY0NSwgMHhmZmZkLCAweGZmZmQsIDB4OWY0 MiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5ZWU4LCAw eDlmNDQsIDB4OWY0MywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAorICAgIDB4ZmZmZCwgMHg5ZjQ5LCAweGZmZmQsIDB4OTg0NSwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDlmNGMsIDB4OGJmOSwgMHhmZmZk LCAweGZmZmQsIDB4OWY0OCwgMHg5ZjRhLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OTRhNSwgMHhmZmZk LCAweDlmNGQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDlmNTEsIDB4OWY0ZSwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5 NzkzLCAweDlmNGYsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDllZGMs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweDlmNTIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWY1MywgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDg5NTQsIDB4ZmZmZCwg MHg5ZjU1LAorICAgIDB4OGM4NywgMHg4ZTlmLCAweGZmZmQsIDB4OGJkMywgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHg4OWEyLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDk3 N2UsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5ZjU3LAorICAgIDB4OWY1Niwg MHg5ZjU5LCAweDhiNWMsIDB4ZmZmZCwgMHhmZmZkLCAweDhiZDQsIDB4OGFiYywgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWY1YywgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHg5ZjViLAorICAgIDB4ZmZmZCwgMHg5ZjVkLCAweGZmZmQsIDB4ZmZmZCwgMHg4OWNjLCAw eGZmZmQsIDB4OTI1NiwgMHhmZmZkLAorICAgIDB4OWY1ZSwgMHhmZmZkLCAweGZmZmQsIDB4OGFi ZCwgMHg5ZjYwLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5ZjVmLCAw eGZmZmQsIDB4OWY2MSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5ZjYyLAorICAgIDB4ZmZm ZCwgMHg5ZjYzLCAweDhlN2UsIDB4OTBiMywgMHg4ZDlmLCAweGZmZmQsIDB4OTU5MCwgMHhmZmZk LAorICAgIDB4ZmZmZCwgMHg5NWUwLCAweDk4NjMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHg4ZTk1LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGRjZSwgMHg5N2Yw LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OWY2NCwgMHg5ZjY1LCAweGZmZmQsIDB4 OGU4MCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5ZjY2LAorICAgIDB4OWY2NywgMHhmZmZk LCAweGZmZmQsIDB4OWY2OSwgMHg5ZjY4LCAweGZmZmQsIDB4OTY3NywgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHg4ZjdkLCAweDhlZWEsIDB4OGU2MywgMHhmZmZkLCAweDlmNmEsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDlmNmMs IDB4OTA0MiwgMHhmZmZkLAorICAgIDB4OWY2YiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4OWY2ZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHg5ZjZlLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweDlmNmYsIDB4OWY3MCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5ZjcxLAorICAg IDB4ZmZmZCwgMHg5ZjczLCAweDlmNzIsIDB4OWY3NCwgMHg4OWEzLCAweDkyNjksIDB4ZmZmZCwg MHg5Zjc1LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDhlNDUsIDB4OGE2YiwgMHg5Zjc2LCAweGZm ZmQsIDB4ZmZmZCwgMHg5MzYxLAorICAgIDB4OWFjYSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweDhiNDIsIDB4OWY3NywgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4OWY3OCwgMHhmZmZkLCAweDk1ZWEsIDB4OTY4OCwgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweDkzYzUsIDB4OWY3OSwgMHg5NGU0LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4OTRmOSwgMHhmZmZkLCAweGZmZmQsIDB4OTZkMSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHg5ZjdhLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWY3 YywgMHg5ZjdiLCAweGZmZmQsIDB4ZmZmZCwgMHg5ZjdlLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4OWY3ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4OWY4MSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHg4ZTgxLAorICAgIDB4ZmZmZCwgMHg5NmFmLCAweGZmZmQsIDB4 OWY4MiwgMHg5ZjgzLCAweGZmZmQsIDB4ZmZmZCwgMHg4YjQzLAorICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4OWY4NCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWY4NiwgMHg5Zjg1LCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5 MDg1LCAweGZmZmQsIDB4ZmZmZCwgMHg5NTU4LAorICAgIDB4ODk2OSwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTRjMywgMHhmZmZkLAorICAgIDB4OTJmMywgMHg4 ZjYwLCAweDhiODEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTRjNCwg MHhmZmZkLAorICAgIDB4OGVhYywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDlm ODgsIDB4ZmZmZCwgMHg4YWJlLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDg5OTgsIDB4ZmZmZCwg MHhmZmZkLCAweDkzZjAsIDB4OWY4NywgMHg4ZDVkLAorICAgIDB4OTI3MiwgMHhmZmZkLCAweDlm ODksIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OWY5MSwg MHhmZmZkLCAweDlmOGEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4OTFiZiwgMHhmZmZkLCAweDhiODIsIDB4OWY5MiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDhjODgsIDB4ZmZmZCwgMHhmZmZkLCAw eDhiNDQsIDB4OWY5MCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5ZjhlLCAweDlmOGIsIDB4OTc4 MCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OTJiZSwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHg5M2Q3LCAweDlmOGMsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OWY5 NCwgMHhmZmZkLCAweDlmOTMsIDB4OGM0MiwgMHhmZmZkLCAweGZmZmQsIDB4ODlhYiwgMHhmZmZk LAorICAgIDB4ZmZmZCwgMHg4ZGI5LCAweDlmOGQsIDB4OWY4ZiwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5Njc2LCAweDkxZjIsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 OTY5NywgMHhmZmZkLCAweGZmZmQsIDB4OWY5YywgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5Zjlk LCAweGZmZmQsIDB4ODljZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 OTVhNiwgMHg5NmZiLCAweDlmOWYsIDB4OGVhMSwgMHg4ZmMwLCAweDlmOTgsIDB4OWY5ZSwgMHg4 OTg4LAorICAgIDB4ZmZmZCwgMHg4YmI1LCAweGZmZmQsIDB4ZmZmZCwgMHg5Zjk1LCAweDlmOWEs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5MGYyLCAweDk0OTEsIDB4ZmZmZCwgMHg5 NGU1LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4OWY5NywgMHhmZmZkLCAweDk2NDAsIDB4ZmZmZCwgMHg5Zjk5LAorICAgIDB4ZmZmZCwgMHg5 ZmEyLCAweGZmZmQsIDB4OWZhMCwgMHhmZmZkLCAweDlmOWIsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHg5NjQxLCAweDk0NjcsIDB4OGI4MywgMHhmZmZkLCAweDkzNDQsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4OTI4ZCwgMHhmZmZkLCAweDlmYTMsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHg5ZmExLAorICAgIDB4OTFkNywgMHg5Zjk2LCAweGZmZmQsIDB4ODk2YSwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTc2ZCwgMHg5ZmFlLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDlmYWQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHg5MGY0LAorICAgIDB4ZmZmZCwgMHg5ZmFhLCAweGZmZmQsIDB4OTc4 YywgMHhmZmZkLCAweGZmZmQsIDB4OTNiNCwgMHg5ZmE0LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDkyYzMsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHg4OTZiLCAweDhkNWUsIDB4OWZhNywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDhmNDYsIDB4OWZhYywgMHhmZmZkLCAweDlmYWIsIDB4 OWZhNiwgMHhmZmZkLAorICAgIDB4OWZhOSwgMHhmZmZkLCAweGZmZmQsIDB4OGE4OCwgMHhmZmZk LCAweDlmYTgsIDB4OTQ2OCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5N2FjLCAweGZmZmQsIDB4 ZmZmZCwgMHg4ZmYyLCAweDkwZjMsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHg5ZmI0LCAweDlmYjIsIDB4ZmZmZCwgMHg5NTZjLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWZhZiwgMHg5 ZmIxLCAweGZmZmQsIDB4ODk1OSwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg4ZDVmLCAweDk4NTEs IDB4ZmZmZCwgMHg4YTVjLCAweGZmZmQsIDB4OTU4MiwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5NzgxLCAweGZmZmQsIDB4ZmZmZCwgMHg4YTQzLAorICAg IDB4OTA1YSwgMHg5ZmIzLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDlm YjgsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OGZjMSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHg5NzRmLCAweGZmZmQsIDB4OWZiNSwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4OWZiMCwgMHhmZmZkLCAweDlmYjYsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHg5N2RjLCAweGZmZmQsIDB4OTM5MywgMHg5M2MwLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHg4YTU1LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDg5NzQsIDB4ZmZm ZCwgMHhmZmZkLCAweDlmYmMsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OWZiZiwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHg5N2MxLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OTc4 NCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDlmYzYsIDB4OWZjMCwgMHg5ZmJk LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTdkMiwgMHg5ZmMzLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg4ZjY5LCAweDlmYzUsIDB4ZmZmZCwgMHhmZmZk LCAweDlmY2EsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OTM5MSwgMHg5ZmM4LCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWZjMiwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5MjU3 LCAweGZmZmQsIDB4ZmZmZCwgMHg5ZmM5LCAweGZmZmQsIDB4OWZiZSwgMHhmZmZkLAorICAgIDB4 OWZjNCwgMHhmZmZkLCAweDlmY2IsIDB4ODhmYSwgMHg5ZmMxLCAweGZmZmQsIDB4OWZjYywgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHg5MDViLCAweGZmZmQsIDB4OGY3ZSwgMHhmZmZkLCAweDk1YTMs IDB4ZmZmZCwgMHg4ZGFjLAorICAgIDB4ZmZmZCwgMHg5ZmI5LCAweDlmYzcsIDB4OTM1OSwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweDkwYjQsIDB4ZmZmZCwgMHg4YTg5LAorICAgIDB4OGRjZiwgMHg4 ZmMyLCAweDlmYmIsIDB4OGY2MSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGM2YiwgMHhmZmZkLCAweDlmYmEsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5ZmQwLCAweDhmOGQsIDB4OGNiOCwgMHhmZmZkLCAweDlm ZGYsIDB4ZmZmZCwgMHg5ZmQ5LAorICAgIDB4OGI5NCwgMHg5MzZlLCAweGZmZmQsIDB4OWZkNCwg MHg5ZmRkLCAweDg4YWQsIDB4ODk1MSwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg4OWI3LCAweGZm ZmQsIDB4OWZkNiwgMHg5MWFhLCAweDlmY2QsIDB4OWZjZiwgMHg4ZDYwLAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4OWZlMCwgMHhmZmZkLCAweDlmZGIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWZk MywgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWZkYSwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDk2YTksIDB4ZmZm ZCwgMHhmZmZkLCAweDlmZDgsIDB4OWZkYywgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGNjZSwgMHhmZmZkLAorICAgIDB4OGZj MywgMHhmZmZkLCAweGZmZmQsIDB4OTI1OCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5ZmQy LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHg5NzRlLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWZkNSwgMHhmZmZk LCAweGZmZmQsIDB4OWZjZSwgMHg5MzkyLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDlmZDEsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWZkNywgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTg3MCwgMHg4ZWJjLAorICAgIDB4 OTY5ZSwgMHhmZmZkLCAweDlmZTEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5NGFjLCAweGZmZmQs IDB4ZmZmZCwgMHg5ZmVkLAorICAgIDB4OGNiOSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4OGY4MCwgMHhmZmZkLAorICAgIDB4OWZlMywgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHg5N2FkLCAweDhkNjEsIDB4ZmZmZCwgMHg5ZmYwLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweDg4ZWMsIDB4ZmZmZCwgMHhmZmZkLCAweDlmZWUsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweDlmZTIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHg5ZmU4LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDlmZWEsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4OTc2ZSwgMHg5ZmU1LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDkzNGQsIDB4ZmZmZCwg MHhmZmZkLCAweDlmZTcsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDlm ZWYsIDB4ZmZmZCwgMHg5ZmU5LCAweDk2YzUsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHg5ZmU0LCAweGZmZmQsIDB4OGVhMCwgMHg5ZmZjLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHg4YThhLCAweGZmZmQsIDB4OWZlNiwgMHg5ZmViLCAweDlmZWMsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eDkxZWEsIDB4OTFkOCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHg5ZmY0LCAweGZmZmQsIDB4ZmZmZCwgMHg5ZmZhLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweDlmZjgsIDB4ZmZmZCwgMHg5MzQ4LCAweGZmZmQsIDB4ZmZmZCwgMHhlMDQy LAorICAgIDB4OWZmNSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 OWZmNiwgMHg5ZmRlLAorICAgIDB4ZmZmZCwgMHg4Yjk5LCAweDk1NTksIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4OGViZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg4ZDk3LCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5ODUyLAorICAgIDB4ZmZmZCwgMHg5ZmYy LCAweGZmZmQsIDB4ZTA0MSwgMHg4OTg5LCAweDkxODYsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4OTQ5OSwgMHhmZmZkLCAweDhhYmYsIDB4OTdmOCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTY5ZiwgMHg5 MmQwLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5ZmY5LCAweDlmZmIs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OTE1MSwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTA0MCwgMHg5ZmY3LAorICAg IDB4ZmZmZCwgMHg5ZmYxLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhhYzEsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHg4Yzg5LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZTA0ZSwgMHhmZmZkLCAweGZm ZmQsIDB4ZTA0OSwgMHg5MGY2LCAweGZmZmQsIDB4ZmZmZCwgMHg4YTgzLAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4ZjgxLCAweGZmZmQsIDB4ZTA1MiwgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUwNGIsIDB4OTJh YSwgMHhlMDQ4LAorICAgIDB4OTJkNywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMDZiLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZTA0NSwgMHhmZmZkLCAweGUwNDQsIDB4ZmZm ZCwgMHhlMDRkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZTA0NywgMHhlMDQ2LCAw eGUwNGMsIDB4ZmZmZCwgMHg5MDlmLCAweGZmZmQsIDB4ZTA0MywgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTA0ZiwgMHhmZmZk LAorICAgIDB4ZmZmZCwgMHhlMDUwLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHg4YWMwLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhlMDU1LCAweGZmZmQsIDB4 ZTA1NCwgMHhlMDU2LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZk LCAweGUwNTksIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHg5MzYyLCAweGZmZmQsIDB4ZTA1MywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHhlMDU3LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OGM4MywgMHg5MWY3LCAweGUwNTEsIDB4OTQ1YSwgMHhm ZmZkLCAweGZmZmQsIDB4ZTA1OCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMDVkLCAweGUwNWIsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4ZTA1ZSwgMHhmZmZkLCAweGZmZmQsIDB4ZTA2MSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhlMDVhLAorICAgIDB4OGQ4YSwgMHg5NDQ3LCAweGZmZmQsIDB4ZmZmZCwgMHg5ZmI3LCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTc5NCwg MHhlMDVjLCAweGZmZmQsIDB4ZTA2MCwgMHg5MWYzLAorICAgIDB4ZmZmZCwgMHhlMDVmLCAweGZm ZmQsIDB4ZTA0YSwgMHhmZmZkLCAweGZmZmQsIDB4ZTg4OSwgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweGUwNjQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTA2OCwgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHhlMDY2LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhlMDYyLCAweGZmZmQsIDB4ZTA2MywgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhlMDY3LAorICAgIDB4ZmZmZCwgMHhlMDY1LCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweDk1NmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZTA2ZCwgMHhmZmZkLCAw eGUwNmEsIDB4ZTA2OSwgMHhmZmZkLCAweGUwNmMsIDB4OTNkMiwgMHhlMDZlLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTI5NSwgMHg5MWVi LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5MGEzLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4ZTA2ZiwgMHhmZmZkLCAweGUwNzEsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTA3MCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5ZmYzLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHhlMDcyLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OTNlNSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZTA3MywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ODljZSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5Mzk0LAorICAg IDB4OGE0NCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4OGI4NCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4ZWRjLCAweDhk ZDAsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5ODQ2LCAweDkw ODYsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ODk4YSwgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweGUwNzUsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHhlMDc0LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhlMDc4LCAweDkyNTksIDB4ZTA3YiwgMHhlMDc2LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZTA3YSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZTA3 OSwgMHg5MzVmLCAweDg4ZDcsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4OTdmMywgMHhmZmZkLCAweGZmZmQsIDB4ZTA3ZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHg4OTQ3LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhlMDgw LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUwN2UsIDB4ZmZmZCwgMHhlMDdjLAorICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhlMDc3LCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5NjQyLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGUwODIsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHhlMDgxLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4OThiLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhlMDg0LCAweDk1YjAsIDB4ZmZmZCwg MHhlMDgzLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5NmIzLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGZjNSwgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTE1 MiwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4ZmM0LCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5N2Y5LCAw eGZmZmQsIDB4ZmZmZCwgMHhlMDhhLCAweGZmZmQsIDB4OTBmNywgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUwODYsIDB4ZTA4YiwgMHhmZmZk LAorICAgIDB4ZmZmZCwgMHg4OThjLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGUwODksIDB4ZmZmZCwgMHg5NDgx LCAweGUwODUsIDB4ZTA4OCwgMHg4ZmM2LAorICAgIDB4ZmZmZCwgMHg5NGNmLCAweGZmZmQsIDB4 ZmZmZCwgMHhlMDhjLCAweGZmZmQsIDB4OGVjZiwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDkwZjgsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMDhmLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZTA4NywgMHhmZmZkLCAweDhjNDYsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMDhkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHg5NzZmLCAweGUwOTAsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhl YWE0LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4ZjZlLAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4ZTA5MSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMDkyLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5NDRkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhlMDk0LCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTA5NSwgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4OTQ1MiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4OTM5NSwgMHhlMDk3LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTA5 OSwgMHhmZmZkLAorICAgIDB4OTdkMywgMHhmZmZkLCAweGUwOTYsIDB4ZmZmZCwgMHhlMDk4LCAw eDg5OGQsIDB4ZmZmZCwgMHhlMDkzLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5YTdhLAorICAgIDB4ZTA5YSwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDkxODcsIDB4OGU1NywgMHhlMDljLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMDliLCAweDkwNDMsIDB4OTlkNywgMHhmZmZk LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUwOWQsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhlMDlmLCAweGZmZmQsIDB4ZTA4ZSwgMHhlMDll LCAweGZmZmQsIDB4ZmZmZCwgMHhlMGEwLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTQ5YSwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUwYTEsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 ZTBhMiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTBhMywgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZTBhNCwgMHhmZmZkLCAweDkyZGMs IDB4ZmZmZCwgMHhlMGE2LCAweGUwYTUsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZTBhNywgMHhm ZmZkLCAweGUwYTgsIDB4ZmZmZCwgMHhmZmZkLCAweDhlZGQsIDB4OTU4MywgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweDk2ZWEsIDB4ZTBhOSwgMHhlMGFhLCAweDkxNzUsIDB4OGVhMiwg MHhlMGFiLAorICAgIDB4ZTBhYywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZTBhZCwgMHg5NWQwLAorICAgIDB4OTRjNSwgMHhmZmZkLCAweGZmZmQsIDB4ZTBhZSwg MHg5NDc2LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDky YWIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZTBhZiwg MHg4OWU1LCAweGZmZmQsIDB4OGI4ZCwgMHhmZmZkLCAweDk2YzQsIDB4ZmZmZCwgMHg5NmI0LAor ICAgIDB4ZmZmZCwgMHg4OWIyLCAweDk4NTMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHg5NjcxLAorICAgIDB4ZmZmZCwgMHg5NWE4LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDkwYjUsIDB4ZmZm ZCwgMHhlMGIwLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5M2MxLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhjYTEsIDB4ZTBiMSwgMHhmZmZkLAorICAgIDB4OGRk MiwgMHhlMGIzLCAweGUwYjIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMGI0 LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGUwYjUsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZTBiNiwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OGI1ZCwgMHhmZmZk LCAweGUwYjcsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMGI4LAorICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4Y2EyLCAweGZmZmQsIDB4ZmZmZCwgMHg5 NGM2LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGUwYmEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4OGZmMywgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhlMGI5LCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDhiYjYs IDB4ZTBiYiwgMHhlMGJkLCAweGZmZmQsIDB4ZTBiYywgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTBiZSwgMHhmZmZkLAorICAg IDB4OGNjZiwgMHhmZmZkLCAweGUwYmYsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHg4YmU3LAorICAgIDB4ZmZmZCwgMHg5MTVmLCAweGZmZmQsIDB4OGQ5ZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZTBjMSwgMHhlMGMyLCAweGUwYzAsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg4ZWViLCAweGZm ZmQsIDB4ZmZmZCwgMHg5M2M2LCAweDhiYjcsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMGM0LAor ICAgIDB4OTI0YiwgMHhlMGMzLCAweGZmZmQsIDB4ZmZmZCwgMHg5ODU0LCAweDk0ODIsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGUwYzcsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTBjOSwgMHhlMGM2LAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4OTZkMiwgMHhlMGM4LCAweGUwY2EsIDB4ZmZmZCwgMHg5N2My LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUwY2UsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhlMGNkLCAweDkyOTYsIDB4OTQ0YywgMHhmZmZk LCAweGZmZmQsIDB4OGNhMywgMHhlMGNjLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhlMGNiLCAweGZmZmQsIDB4OTc1MCwgMHg5NzUxLAorICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTBjZiwgMHg4OThlLAorICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4ZDk2LCAweDhlODIsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZTBkMCwgMHhlMGQxLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMGQzLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4OGY2MiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4ZTBkNSwgMHhmZmZkLCAweGUwZDQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4ZTBkNiwgMHhmZmZkLCAweDhhNmMsIDB4ZmZmZCwgMHhmZmZkLCAweGUw ZDgsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZTBkNywgMHhmZmZkLCAweGUwZGEsIDB4ZTBkOSwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHg4Y2JhLCAweGZmZmQsIDB4ZmZmZCwgMHg5N2E2LAorICAgIDB4ZmZmZCwg MHg4YmNhLCAweGZmZmQsIDB4ODlhNCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGJl OCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg4YWRmLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweDk3ZTYsIDB4ZTBkYywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTBkZSwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4ZTBkZiwgMHhmZmZkLCAweDg5Y2YsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZTBkYiwgMHhmZmZkLCAweDhlNTgsIDB4 ZmZmZCwgMHhmZmZkLCAweDkyYmYsIDB4ZTBkZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTBlMiwgMHhm ZmZkLAorICAgIDB4OGVlYywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUwZTAs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDhjNWQsIDB4ZmZmZCwgMHhm ZmZkLCAweDk0YzcsIDB4ZTBlMSwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhlMGZjLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZTBlNywgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGNiYiwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGI4NSwgMHhmZmZkLCAweGUwZTQsIDB4OTc5ZCwg MHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5N2FlLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweDkxZjQsIDB4ZmZmZCwgMHhmZmZkLCAweGUwZTYsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGUwZTgsIDB4OTdkNCwgMHg4YmQ1LCAw eDk0ZmEsIDB4OTQ2OSwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGUwZTksIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMGViLAorICAgIDB4ZmZmZCwgMHhlMGVlLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUwZWEsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhlMGVkLCAweDhjZTgsIDB4ODk2YywgMHhlMGVm LCAweGZmZmQsIDB4OTA5MCwgMHhlMGVjLAorICAgIDB4OTdkYSwgMHhmZmZkLCAweGZmZmQsIDB4 ZTBmMiwgMHhlYWEyLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhlMGYw LCAweGUwZjMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMGU1LAorICAgIDB4 ZTBmMSwgMHhmZmZkLCAweGZmZmQsIDB4OGRiYSwgMHhmZmZkLCAweGZmZmQsIDB4ZTBmNCwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZTBmNSwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTc5ZSwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZTBmNiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTBmNywg MHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGUwZTMsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhlMGY4LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OGFjMiwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhlYTMsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGUwZjksIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhlMGZhLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhlMGZiLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHg4OTVhLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZTE0 MCwgMHhmZmZkLCAweDk1NWEsIDB4ZTE0MSwgMHhmZmZkLCAweGZmZmQsIDB4OGFhMiwgMHhlMTQy LAorICAgIDB4ZmZmZCwgMHhlMTQzLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZTE0NCwgMHhmZmZkLAorICAgIDB4ZTE0NiwgMHhlMTQ3LCAweGUxNDUsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4OTU3MiwgMHhlMTQ5LAorICAgIDB4ZTE0OCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZTE0YiwgMHhlMTRhLCAweGUxNGMsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMTRkLCAweGUxNGYsIDB4ZTE0ZSwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHg4ZDk5LCAweGZmZmQsIDB4ZTE1MSwgMHhmZmZkLCAweGUxNTAs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OGFjMywgMHhmZmZkLCAweDkwNzIsIDB4ZmZmZCwgMHg5 MzViLCAweGZmZmQsIDB4ZTE1MiwgMHg5MGI2LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4OGU1OSwgMHhmZmZkLCAweDg5OTksIDB4ZTE1MywgMHhmZmZkLAorICAgIDB4OTc3MCwgMHhm ZmZkLCAweGZmZmQsIDB4OTVlMSwgMHhlMTU0LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4OTM2MywgMHg5NzUyLCAweDhkNjIsIDB4OTA1YywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHg5MjZhLAorICAgIDB4OTliMiwgMHhmZmZkLCAweDkyYWMsIDB4ODllNiwgMHhlMTU1LCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhlMTU2LCAweGZmZmQsIDB4ZTE1YiwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhlMTU5LCAweGUx NTgsIDB4OWRjMCwgMHg4YTQ1LCAweGUxNTcsIDB4ZmZmZCwgMHg4OGQ4LAorICAgIDB4ZmZmZCwg MHg5NGE4LCAweGZmZmQsIDB4ZmZmZCwgMHg5NGM4LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHg5N2FmLCAweGUxNWMsIDB4ZTE1YSwgMHg5MjdiLCAweDkwYTQsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4OTRhOSwgMHhmZmZkLCAweDk1NGMsIDB4ZmZmZCwgMHhlMTVlLCAw eDk3YWEsIDB4OGM2YywgMHhlMTVmLAorICAgIDB4ZmZmZCwgMHhlMTVkLCAweDk0ZDQsIDB4ZTE2 MCwgMHhmZmZkLCAweGUxNjEsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ODhkOSwgMHhmZmZkLCAw eGZmZmQsIDB4OGZmNCwgMHhlMTY2LCAweGZmZmQsIDB4ZTE2MywgMHg5M2ViLAorICAgIDB4ZTE2 MiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4YjQ1 LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGUxNjksIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZTE2NCwgMHhlMTY1LAorICAgIDB4ZmZmZCwgMHhlMTY4LCAweGUxNjcsIDB4OTU0NCwgMHhmZmZk LCAweGZmZmQsIDB4OTE2MSwgMHg5MTYwLAorICAgIDB4ZmZmZCwgMHg4YjVlLCAweGZmZmQsIDB4 ZmZmZCwgMHhlMTZhLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZk LCAweGUxNmIsIDB4ZmZmZCwgMHhmZmZkLCAweGUxNmMsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTE2ZSwgMHhmZmZkLCAweGUxNmQsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ODk3NSwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhlMTc2LCAweDk0ZTYsIDB4ZTE3MCwgMHhm ZmZkLCAweGUxNzIsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZTE3NCwgMHg5MDVkLCAweGZmZmQs IDB4ZmZmZCwgMHhlMTc1LCAweGUxNzMsIDB4OGViZSwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGUxNmYsIDB4ZTE3MSwgMHhmZmZkLCAweDk1NjEsIDB4ZmZmZCwgMHg4ZmM3LAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweGUxNzgsIDB4ZmZmZCwgMHhmZmZkLCAweGUxNzcsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGUxNzksIDB4ZmZmZCwgMHg4ZWE0LCAweDhk YWQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OTM5NywgMHhlMTdhLCAweGZmZmQsIDB4OTJjOSwg MHhmZmZkLCAweGZmZmQsIDB4ZTE3YywgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDk3 OWYsIDB4ZTE3YiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHg5MTg5LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4ZTE4MiwgMHhmZmZkLCAweGUxODQsIDB4ZTE4NSwgMHg5MjczLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGUxODMsIDB4ZmZmZCwgMHhlMTgwLCAw eGZmZmQsIDB4ZTE3ZCwgMHhlMTdlLAorICAgIDB4ZmZmZCwgMHhlMTgxLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhlMTg4LCAw eGZmZmQsIDB4ZTE4NiwgMHhmZmZkLCAweGUxODcsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhlMTg5LAorICAgIDB4ZTE4YiwgMHhlMThjLCAweGUxOGQsIDB4ZmZmZCwgMHhlMThl LCAweGZmZmQsIDB4ZmZmZCwgMHhlMThhLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZTE5MCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhlMThmLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTE5MSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDk3YzMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZTE5NCwgMHhlMTkyLAorICAgIDB4ZTE5MywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4 YWUwLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDk2ZmMs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTVjOCwgMHhmZmZkLAorICAgIDB4ZTE5NiwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMTk1LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHhlMTk3LCAweGUxOTgsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhlMTljLAorICAgIDB4ZTE5OSwgMHhlMTlhLCAweGUxOWIsIDB4ZmZmZCwgMHhlMTlkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZTE5ZSwgMHhmZmZkLCAweGUxOWYsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZTFhMCwgMHhmZmZkLAorICAgIDB4ZTFhMSwgMHhmZmZkLCAweDk0 YWQsIDB4OTM2ZiwgMHhlMWEyLCAweDk0OTIsIDB4OTU1MywgMHhmZmZkLAorICAgIDB4ZTFhMywg MHhmZmZkLCAweGZmZmQsIDB4ZTFhNCwgMHg5MzQ5LCAweGZmZmQsIDB4OGE0NiwgMHg4ZDYzLAor ICAgIDB4ZTFhNSwgMHhmZmZkLCAweGZmZmQsIDB4ZTFhNiwgMHhmZmZkLCAweGZmZmQsIDB4ZTFh NywgMHhmZmZkLAorICAgIDB4OGU0OCwgMHhmZmZkLCAweGZmZmQsIDB4ZTFhOSwgMHhmZmZkLCAw eGZmZmQsIDB4ZTFhOCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhlMWFhLCAweGUxYWIsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTRlNywgMHhmZmZk LAorICAgIDB4ZTFhYywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMWFkLCAweGZmZmQsIDB4 ZmZmZCwgMHhlYTg5LAorICAgIDB4ZTFhZSwgMHhlMWFmLCAweGUxYjAsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHg4ZTRkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGUxYjEsIDB4 OTQ3NSwgMHhmZmZkLCAweGZmZmQsIDB4OTY3ZSwgMHhmZmZkLAorICAgIDB4ODk2ZCwgMHhmZmZk LCAweDg5NzYsIDB4ZmZmZCwgMHhmZmZkLCAweGUxYjIsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGUxYjQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTFiMywgMHg5 MzkwLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTBiNywgMHg5ZjU4LCAweGZmZmQs IDB4ZTFiNSwgMHg5NmJmLAorICAgIDB4ZmZmZCwgMHhlMWI2LCAweGZmZmQsIDB4OGFjNCwgMHg5 NGQ1LCAweGUxYjcsIDB4ZmZmZCwgMHhlMWI4LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGUxYjks IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTZkYSwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweDk2ZDMsIDB4ZmZmZCwgMHg5MmJjLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4OTE4YSwgMHhmZmZkLCAweGZmZmQsIDB4ZTFiYiwgMHhmZmZkLCAweGZmZmQsIDB4OGY4Miwg MHhmZmZkLAorICAgIDB4ZmZmZCwgMHg4ZmM4LCAweGZmZmQsIDB4ZmZmZCwgMHhlMWJlLCAweGZm ZmQsIDB4ZmZmZCwgMHhlMWJkLAorICAgIDB4ZTFiYywgMHg5NGZiLCAweGZmZmQsIDB4OGFjNSwg MHg4Y2E3LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZTFjNCwgMHhmZmZkLCAweGZmZmQsIDB4ZTFjMSwgMHg5MDVlLAor ICAgIDB4OTZiMCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMWMwLCAweGUxYzIsIDB4ZTFj MywgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhlMWJmLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMWM1LAorICAgIDB4ZTFjNiwgMHhmZmZkLCAw eDkyYWQsIDB4ZmZmZCwgMHg4YWUxLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OTI4 NSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMWM3 LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGUxYzgsIDB4 ZTFjYiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5MDg3 LCAweGZmZmQsIDB4OTNjMiwgMHhmZmZkLCAweGUxY2MsIDB4OTY3MiwgMHhmZmZkLAorICAgIDB4 ZTFjOSwgMHhmZmZkLCAweGZmZmQsIDB4ZTFjYSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhlMWNmLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZTFjZSwgMHhlMWNkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZTFkMSwgMHhmZmZkLCAweGZmZmQsIDB4ZTFkMCwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHhlMWQyLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZTFkNCwgMHhmZmZkLAorICAgIDB4ZTFkMywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweDk1Y2IsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHg4Zjc1LCAweDk3YzQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZTFkNSwg MHhmZmZkLCAweGZmZmQsIDB4OTNiNSwgMHhmZmZkLCAweGZmZmQsIDB4ZTFkNiwgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHhlMWQ3LCAweGZmZmQsIDB4ZTFkYiwgMHhlMWQ5LCAweGUxZGEsIDB4ZmZm ZCwgMHhlMWQ4LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhlMWRjLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGUxZGQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMWRlLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGUxZGYsIDB4OTZiNSwgMHhlMWUwLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDk2ZWUsIDB4ZTFlMSwgMHhmZmZkLCAweDkyNmQsIDB4 ZmZmZCwgMHg5NDhhLAorICAgIDB4ZmZmZCwgMHg4YmU5LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweDkyNWEsIDB4ZTFlMiwgMHg4YmI4LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 OTBjZSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhlMWUzLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHhmZmZkLCAweDhkYmIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMWU0LCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGUxZTUsIDB4ZmZmZCwgMHg4 Y2E0LCAweDhkZDMsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZTFlNywgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDkzNzUsIDB4OGRkNCwgMHg4YjZkLAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDk2NDMsIDB4ZmZmZCwgMHg5NDZhLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDkzNzYsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4ZDdiLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUxZTksIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eDhmYzksIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4OTdiMCwgMHg4ZDY0LCAweGZmZmQsIDB4ZmZmZCwgMHg4Y2E1LAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweDk0YTEsIDB4ZmZmZCwgMHhlMWViLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMWVkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg4Y2U5LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZTFlYywgMHg5MmY0LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhlMWVmLCAweDhhNTYsIDB4ZTFlYSwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5NGU4 LCAweGZmZmQsIDB4ODk0ZiwgMHhmZmZkLCAweDhkZWEsIDB4ZmZmZCwgMHg5ODcxLAorICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGUxZWUsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTFmMCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHg5NWM5LAorICAgIDB4ZmZmZCwgMHg5MGQ3LCAweGUxZjIsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMWYzLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGUxZjEsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweDhhNmQsIDB4ZmZmZCwgMHhlMWY5LCAweGZmZmQsIDB4ZTFmOCwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHg4ZWE1LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUxZmEsIDB4ZTFmNSwg MHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGUxZmIsIDB4ZTFmNiwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OTRkNiwgMHhlMWY0LCAweGZmZmQsIDB4ZmZmZCwg MHhlMWY3LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGUy NDEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMjQwLAor ICAgIDB4OTY4MSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMWZjLCAweGZmZmQsIDB4ZmZm ZCwgMHg4OGU5LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMjQzLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGUyNDIsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg4ZmNhLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMjQ0LAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTE2MiwgMHhmZmZk LAorICAgIDB4ZmZmZCwgMHhlMjQ2LCAweGUyNDUsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhlMjQ3LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTFlNiwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZk LCAweGUxZTgsIDB4ZTI0OSwgMHhlMjQ4LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDhlYTYsIDB4ZmZmZCwgMHg5N2U3LCAweGZmZmQs IDB4OGVkMCwgMHhmZmZkLAorICAgIDB4ZTI0YSwgMHg4YzU2LCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4YjVmLAorICAgIDB4OGI0NiwgMHg4ZTgzLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OTc1MywgMHhm ZmZkLCAweGZmZmQsIDB4ZTI1MCwgMHhmZmZkLCAweGUyNGYsIDB4OTE2MywgMHhlMjRjLAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweGUyNGUsIDB4ZmZmZCwgMHhmZmZkLCAweDhmNmEsIDB4OTA1Ziwg MHhlMjRkLAorICAgIDB4ZTI0YiwgMHhmZmZkLCAweDk0NDksIDB4ZmZmZCwgMHhmZmZkLCAweDhm Y2IsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OTU1YiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweDhkZDUsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5Mzk4LAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweGUyNTEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMjUyLAor ICAgIDB4ZTI2OCwgMHg4YmQ2LCAweGZmZmQsIDB4ZmZmZCwgMHg5ODVjLCAweDkxNTQsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGUyNTMsIDB4ZmZmZCwgMHhmZmZkLCAw eDg5ZDAsIDB4OTJmNSwgMHg5NTlmLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUyNTQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGI5YSwgMHhlMjU1 LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGUyNTcsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZTI1OCwgMHhmZmZkLAorICAgIDB4OTQ0OCwgMHhmZmZkLCAweGZmZmQsIDB4ZTI1OSwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhlMjVhLCAweGUyNWIsIDB4 ZmZmZCwgMHhmZmZkLCAweDhiZDcsIDB4ODlkMSwgMHg5M2MzLAorICAgIDB4OGY0NywgMHg4ZTg0 LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHhlMjVjLCAweGZmZmQsIDB4OGY0OCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHg4OWM4LCAweDk1NjIsIDB4ZmZmZCwgMHhmZmZkLCAweGUyNWQs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OTRlOSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5MTY0LAorICAgIDB4ZmZmZCwgMHhlMjYwLCAweGZmZmQs IDB4ZTI2MSwgMHg5NDg5LCAweGZmZmQsIDB4OTA2MCwgMHhlMjVlLAorICAgIDB4ZmZmZCwgMHg5 MjgxLCAweGZmZmQsIDB4ZmZmZCwgMHhlMjVmLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4OGZjYywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ODhkYSwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OGI0OCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZTI2MiwgMHhmZmZkLCAweGZm ZmQsIDB4OTJmNiwgMHhmZmZkLCAweGUyNjMsIDB4OTBjNSwgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5NmFiLCAweGZmZmQsIDB4ZmZmZCwgMHg5NTQyLAor ICAgIDB4ZTI2NCwgMHhlMjY1LCAweDkyNzQsIDB4ZmZmZCwgMHg5N2M1LCAweGZmZmQsIDB4ZmZm ZCwgMHhlMjY3LAorICAgIDB4ZTI2NiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4OGVlZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhlMjY5LCAw eDg4ZWUsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMjZjLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTI2YSwgMHg4OWQyLCAweDhjNmQsIDB4ZTI2YiwgMHg4ZDY1 LAorICAgIDB4OGQ5MiwgMHhmZmZkLCAweDk1ZTQsIDB4ZTI2ZCwgMHhmZmZkLCAweGZmZmQsIDB4 OTY3MywgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhlMjZmLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweDkwY2YsIDB4ODk2ZSwgMHg4OWI4LAorICAgIDB4ODhhYSwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMjZlLAorICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHhlMjcwLCAweGUyNzEsIDB4OGZmNSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHhlMjcyLCAweGZmZmQsIDB4OGE2ZSwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZTI3NCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4 YzhhLCAweGZmZmQsIDB4OGI4NiwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhlMjc1LCAweDhiZjMs IDB4ZmZmZCwgMHhmZmZkLCAweGUyNzYsIDB4ZmZmZCwgMHg5MGZhLAorICAgIDB4ZmZmZCwgMHg5 M2NiLCAweGZmZmQsIDB4OTBkZSwgMHg4ZGYzLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4ZTI3NywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDkyODIsIDB4OTE4YiwgMHhmZmZkLCAweGUy NzksIDB4ZTI3YiwgMHhlMjc4LAorICAgIDB4ZTI3YSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4YzQxLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHhlMjdjLCAweDhjNDUsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGI4NywgMHg5NzcxLAor ICAgIDB4ZTI3ZSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTI4 MCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDg5NGQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhlMjgzLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGE5 NiwgMHhlMjgyLCAweGUyODEsIDB4ZmZmZCwgMHhlMjg1LAorICAgIDB4ZTI3ZCwgMHhmZmZkLCAw eGUyODYsIDB4OTdhNywgMHhmZmZkLCAweGUyODcsIDB4ZmZmZCwgMHhlMjg4LAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweDlhZjIsIDB4ZTI4YSwgMHhmZmZkLCAweGUyODksIDB4ZmZmZCwgMHhmZmZk LAorICAgIDB4ZmZmZCwgMHhlMjhiLCAweGUyOGMsIDB4ZmZmZCwgMHg5N2IzLCAweGUyOGQsIDB4 ZmZmZCwgMHhlOGVkLAorICAgIDB4OGZjZCwgMHhlMjhlLCAweGUyOGYsIDB4OGY3NiwgMHhmZmZk LCAweDkzYjYsIDB4ZTI5MCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDkyNDcsIDB4 ZmZmZCwgMHhmZmZkLCAweGUyOTEsIDB4ZmZmZCwgMHg5MjViLAorICAgIDB4ZTI5MiwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGJhMywgMHhmZmZkLAorICAgIDB4 OTk1ZSwgMHg5MjdjLCAweDhlYjEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4 YWM2LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGUyOTMsIDB4ZmZmZCwgMHhlMmEwLCAweGZmZmQs IDB4ZTI5NiwgMHhmZmZkLAorICAgIDB4OGI4OCwgMHhmZmZkLCAweGUyOTUsIDB4ZTJhMiwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMjk0LAorICAgIDB4ZmZmZCwgMHg4ZmNlLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZTI5OCwgMHhl Mjk5LCAweGZmZmQsIDB4OTM0YSwgMHhmZmZkLCAweGZmZmQsIDB4ZTI5YSwgMHhmZmZkLAorICAg IDB4OGE3ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDkwNzksIDB4OTU4NCwg MHhmZmZkLAorICAgIDB4ZTI5YywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5MWU2LCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTI5Nywg MHhmZmZkLCAweGUyOWIsIDB4ZTI5ZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg4ZGY5LCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUyYTQsIDB4OTU0ZCwgMHhmZmZkLAor ICAgIDB4OTRhNCwgMHg5Mzk5LCAweGZmZmQsIDB4OGJkOCwgMHhlMmEzLCAweGUyYTEsIDB4ZmZm ZCwgMHg5NGIzLAorICAgIDB4ZTI5ZSwgMHg5MjdkLCAweDkzOWIsIDB4ZmZmZCwgMHg5MzlhLCAw eGZmZmQsIDB4OGRmNCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGUyYjYsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUyYTYsIDB4ZmZmZCwgMHhlMmE4LAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMmFiLCAweGZmZmQsIDB4ZTJhYywgMHhmZmZk LAorICAgIDB4ZTJhOSwgMHhlMmFhLCAweGZmZmQsIDB4ZmZmZCwgMHhlMmE3LCAweGUyYTUsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGUyOWYsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTVjZCwgMHg4OWQzLAorICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZTJiMywgMHhmZmZkLCAweGUyYjAsIDB4ZmZmZCwgMHhlMmI1LAorICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGUyYjQsIDB4ZmZmZCwgMHg5NDkzLCAweDk2YTUsIDB4ZmZmZCwgMHg4 ZTVhLAorICAgIDB4ZTJhZSwgMHhlMmI3LCAweGUyYjIsIDB4ZmZmZCwgMHhlMmIxLCAweGUyYWQs IDB4ZmZmZCwgMHhlMmFmLAorICAgIDB4ZmZmZCwgMHg4YWM3LCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDkyNWMs IDB4ZmZmZCwgMHhmZmZkLCAweDkwZmIsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5 NGEwLCAweGZmZmQsIDB4ZmZmZCwgMHhlMmJjLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4OTRhMiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4OTBkZiwgMHhlMmI5LCAweGZmZmQsIDB4ZmZmZCwgMHg5NGNkLCAweGZm ZmQsIDB4ZTJiZCwgMHg5NWQxLAorICAgIDB4ZmZmZCwgMHg5MjdhLCAweGZmZmQsIDB4ZTJiOCwg MHhlMmJhLCAweGZmZmQsIDB4ZmZmZCwgMHhlMmJiLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUyYmUsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4OGVjMiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5M2M0LCAweGUyYzMsIDB4ZTJj MiwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhlMmJmLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eDk4NTUsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTJj OCwgMHhmZmZkLCAweGZmZmQsIDB4ZTJjYywgMHhlMmM5LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZTJj NSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMmM2 LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUyY2IsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhlMmMwLCAweDk5ZDMsIDB4ZTJjNywgMHhlMmMx LCAweGZmZmQsIDB4ZmZmZCwgMHhlMmNhLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMmQwLAorICAgIDB4ZmZmZCwgMHg4YWM4 LCAweGZmZmQsIDB4ZTJjZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMmNlLAorICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGUyY2YsIDB4ZTJkMiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhlMmQxLAorICAgIDB4OTRmNCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGUyZDMsIDB4OTdmYSwgMHg5NWViLAorICAgIDB4ZTJkOCwgMHhmZmZkLCAweGZmZmQs IDB4ZTJkNSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMmQ0LCAweDkwZDAsIDB4ZmZmZCwgMHhlMmQ3LAorICAg IDB4ZTJkOSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMmQ2LCAweGZmZmQsIDB4ZTJkZCwg MHhmZmZkLAorICAgIDB4ZTJkYSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhlMmRiLAorICAgIDB4ZTJjNCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhlMmRjLCAweGUyZGUsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhlMmRmLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4OTVjNCwgMHhmZmZkLCAweGUyZTAsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTZl MCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg4YmNjLCAweDhjNDgsIDB4ZTJlMSwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5NWIyLCAweGZmZmQsIDB4OTA4 OCwgMHhmZmZkLCAweDk2YWUsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZTJlMiwgMHhmZmZkLCAw eDk3YjEsIDB4ZmZmZCwgMHhmZmZkLCAweDk0OTQsIDB4ZmZmZCwgMHg5MTY1LAorICAgIDB4OTQ1 MywgMHhmZmZkLCAweGZmZmQsIDB4OGY2YywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4OGJl LAorICAgIDB4ZmZmZCwgMHhlMmU3LCAweGUyZTUsIDB4ZmZmZCwgMHhlMmUzLCAweDhhOWYsIDB4 ZmZmZCwgMHg4ZmNmLAorICAgIDB4ZTJlOCwgMHhmZmZkLCAweGZmZmQsIDB4ZTJlNiwgMHhmZmZk LCAweGUyZTQsIDB4ZTJlYywgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhlMmViLCAweGUyZWEsIDB4 ZTJlOSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhlMmVk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUyZWUsIDB4OTBiOCwgMHhmZmZkLAorICAgIDB4 ZTJlZiwgMHhmZmZkLCAweGUyZjEsIDB4ZmZmZCwgMHhmZmZkLCAweGUyZjAsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDhjZDAsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4OTE1NywgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGUyZjMsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4OTM5YywgMHhmZmZkLAorICAgIDB4ZTJmMiwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhlMmY0LCAweGZmZmQsIDB4OTViMywgMHg5MThjLAorICAgIDB4OGQ2NiwgMHhm ZmZkLCAweGUyZjUsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5N2M2LAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhlMmY3LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGUyZjgsIDB4ZmZmZCwgMHhlMmY5LCAweGZm ZmQsIDB4ZTJmYSwgMHhmZmZkLAorICAgIDB4OGU4NSwgMHhmZmZkLCAweGUyZmIsIDB4OGM2ZSwg MHhmZmZkLCAweGZmZmQsIDB4OGI4YSwgMHhmZmZkLAorICAgIDB4OGI0OSwgMHhmZmZkLCAweGUz NDAsIDB4ZmZmZCwgMHg5NmYxLCAweDhkNjcsIDB4ZTJmYywgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweGUzNDMsIDB4OTZlNCwgMHhmZmZkLCAweDk0NWIsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4OTU1MiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4ZjgzLCAweGUzNDIsIDB4ZmZm ZCwgMHg4ZWQxLAorICAgIDB4OGQ2OCwgMHg4ZTg2LCAweDhiODksIDB4OTViNCwgMHhlMzQxLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OTE2NiwgMHg5NjYxLCAweDhkZjUsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4OGU4NywgMHg5MmRiLCAweGZmZmQsIDB4ZTM0NiwgMHg5N2RkLAorICAgIDB4OGRk NywgMHhmZmZkLCAweGUzNDcsIDB4OTA2MSwgMHhmZmZkLCAweGUzNDksIDB4ZmZmZCwgMHhmZmZk LAorICAgIDB4ZmZmZCwgMHg4ZmQwLCAweDhkYWUsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhlMzQ4LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDhmNDksIDB4OGNiYywgMHg5MTY3 LCAweGUzNDQsIDB4ZTM0YSwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZTM0NSwgMHg4YzZmLCAweGZmZmQsIDB4ZTM0ZCwgMHhlMzUxLAorICAgIDB4OGM4YiwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTM0YywgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTM1NSwgMHhmZmZkLCAweGZmZmQsIDB4OGQ2OSwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHg5NzhkLCAweDg4YmEsIDB4ZTM1MiwgMHhmZmZkLCAweGZmZmQs IDB4OGI4YiwgMHhmZmZkLAorICAgIDB4ZTM0ZiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZTM1MCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5MzlkLCAweGUzNGUs IDB4ZTM0YiwgMHhmZmZkLCAweDhhNDcsIDB4OTBlMiwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg4 Y2E2LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUzNTcsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4ZmZmZCwgMHhlMzU0LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhlMzU2LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTM1Mywg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg4YzcwLCAweDkx YjEsIDB4ZTM1OCwgMHg5MThlLCAweGZmZmQsIDB4ZmZmZCwgMHhlMzY1LAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweGUzNjEsIDB4ZTM1YiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTM1ZiwgMHg4ZWY4LCAweDg4ZGIsIDB4ZTM1 YSwgMHhlMzYyLAorICAgIDB4ZTM2NiwgMHg4ZDZhLCAweDk2ZDQsIDB4ZmZmZCwgMHg5MmQ0LCAw eGUzNWMsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZTM2NCwgMHhmZmZkLCAweGUzNTksIDB4OTI1 ZCwgMHhmZmZkLCAweGUzNWUsIDB4ODhiYiwgMHg5NmM4LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMzVkLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweDhiZDksIDB4OTRlYSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5MThk LAorICAgIDB4ZmZmZCwgMHg5N2NlLCAweDhmOGYsIDB4ZmZmZCwgMHhmZmZkLCAweGUzOGUsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4ZTM2NywgMHhmZmZkLCAweDkwZmMsIDB4ZmZmZCwgMHhlMzYz LCAweGUzNjgsIDB4ZTM2YSwgMHhmZmZkLAorICAgIDB4OTJmNywgMHhlMzZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhlMzY5LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OTVkMiwgMHg4YWM5 LCAweGZmZmQsIDB4ZmZmZCwgMHg5NmM5LCAweGZmZmQsIDB4ZmZmZCwgMHg4OGRjLAorICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGUzNmMsIDB4ZmZmZCwgMHg5N2ZiLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTM2YiwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg4OThmLCAweGZmZmQsIDB4ZmZmZCwgMHg5 M2VhLCAweGUzNmUsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhlMzc1LCAweGUzNmYs IDB4ZTM3NiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGUzNzIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTQ5YiwgMHhmZmZkLCAweGZmZmQsIDB4OGVjOCwg MHhlMzc0LAorICAgIDB4ZmZmZCwgMHhlMzcxLCAweGUzNzcsIDB4ZTM3MCwgMHhmZmZkLCAweGZm ZmQsIDB4OGY2MywgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTY0NCwg MHhmZmZkLCAweGZmZmQsIDB4OGY2YiwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhlMzczLCAweGUz ODAsIDB4ZmZmZCwgMHhmZmZkLCAweGUzN2IsIDB4ZmZmZCwgMHhlMzdlLAorICAgIDB4ZmZmZCwg MHhlMzdjLCAweGUzODEsIDB4ZTM3YSwgMHhmZmZkLCAweGUzNjAsIDB4OTBkMSwgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHg5NGM5LCAweGZmZmQsIDB4ZTM3ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTM3 OCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDkxNDAsIDB4OGM3MSwgMHhmZmZkLCAw eDhmNGEsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHg5MDQ0LCAweDkxNTUsIDB4ZTM4NCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhlMzg2LCAw eGUzODcsIDB4ZmZmZCwgMHhmZmZkLCAweGUzODMsIDB4ZTM4NSwgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTM3OSwgMHhlMzgy LAorICAgIDB4ZmZmZCwgMHhlMzhhLCAweGUzODksIDB4ZmZmZCwgMHhmZmZkLCAweDk2OWEsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4OGM0YSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhlMzg4LCAweGZmZmQsIDB4 ZTM4YywgMHhlMzhiLCAweGUzOGYsIDB4ZmZmZCwgMHhlMzkxLAorICAgIDB4ZmZmZCwgMHhmZmZk LCAweDhlNWIsIDB4ZTM4ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 ZTM5MiwgMHhlMzkzLCAweGZmZmQsIDB4ZmZmZCwgMHhlMzk0LCAweGZmZmQsIDB4ZTM5YSwgMHg5 MzVhLAorICAgIDB4ZTM5NiwgMHhmZmZkLCAweGUzOTUsIDB4ZTM5NywgMHhlMzk4LCAweGZmZmQs IDB4ZTM5OSwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTM5YiwgMHhl MzljLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4OGFjYSwgMHhmZmZkLAorICAgIDB4ZTM5ZCwgMHhmZmZkLCAweGUzOWUs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUzOWYsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlM2EwLCAweGUzYTEsIDB4ZTNhMiwg MHhmZmZkLAorICAgIDB4ZTNhMywgMHhlM2E0LCAweGZmZmQsIDB4ZmZmZCwgMHhlM2E2LCAweGUz YTUsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZTNhNywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlM2E4LAorICAgIDB4ZTNhOSwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlM2FjLAorICAgIDB4ZTNhYSwg MHhlM2FiLCAweDhkZGYsIDB4OGM3MiwgMHhmZmZkLCAweGZmZmQsIDB4OTI3NSwgMHhmZmZkLAor ICAgIDB4OTRiMSwgMHhmZmZkLCAweDhmOTAsIDB4ZmZmZCwgMHhmZmZkLCAweDk0NmMsIDB4ZmZm ZCwgMHg5NGViLAorICAgIDB4ZTNhZCwgMHg5Y2ViLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGUzYWUsIDB4ZTNi MCwgMHhmZmZkLCAweDk3ODUsIDB4ZTNhZiwgMHhlM2IyLAorICAgIDB4ZTNiMSwgMHhmZmZkLCAw eDk3NzIsIDB4ZmZmZCwgMHhlM2IzLCAweGZmZmQsIDB4OTRmYywgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlM2I0LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGUzYjcsIDB4ZmZmZCwgMHhmZmZkLCAweGUzYjYsIDB4 ZTNiNSwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTNiOCwgMHg4YzUx LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OTE0MSwgMHg4YjYwLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTNiYywgMHhlM2I5LAorICAgIDB4ZmZmZCwgMHhmZmZk LCAweGUzYmEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTNiZCwgMHhmZmZkLAorICAgIDB4 ZTNiZSwgMHhlM2JiLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDg5NDgsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHg4OWE1LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUzYzAs IDB4ZTNjMSwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGUzYzIsIDB4ZmZmZCwgMHg5 NzgyLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDhmNGIs IDB4ZmZmZCwgMHhlM2M0LCAweGUzYzMsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4OTA4OSwgMHhlM2M1LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTNjNiwg MHhmZmZkLAorICAgIDB4ZmZmZCwgMHhlM2M3LCAweGZmZmQsIDB4OGFlMywgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OGFjYiwgMHhmZmZkLCAweGZmZmQsIDB4ZTNjOCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhlM2M5LCAweGZm ZmQsIDB4OTY3YywgMHg5NzgzLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OTc3Mywg MHg5ODU2LCAweGZmZmQsIDB4OGQ2YywgMHhlM2NjLCAweDhlZDIsIDB4ZTNjYiwgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTNjZCwgMHg4ZWE3LCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4OTFjZiwgMHhmZmZkLCAweGUzY2UsIDB4ZmZmZCwgMHhmZmZkLCAw eDhkNmIsIDB4ZmZmZCwgMHg5NmQ1LAorICAgIDB4ZTNjZiwgMHhlM2QwLCAweGZmZmQsIDB4ZmZm ZCwgMHhlM2QxLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhlM2QyLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZTNk MywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGVhOCwgMHhmZmZkLCAweGZmZmQsIDB4 OTZlYiwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTNkNSwgMHhmZmZk LCAweDkyNWUsIDB4ZmZmZCwgMHhlM2Q0LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTNkNywgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZk LCAweGUzZDYsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGUzZDgsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTBiOSwgMHhm ZmZkLAorICAgIDB4ZTNkOSwgMHhmZmZkLCAweGUzZGEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4OTViNywgMHhlM2RiLAorICAgIDB4ZmZmZCwgMHg5MThmLCAweGUzZGMsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZTNkZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5N2ZjLAorICAgIDB4ZTNlMCwgMHhm ZmZkLCAweGUzZGYsIDB4ZTNkZSwgMHg5MmFlLCAweGZmZmQsIDB4ZTNlMSwgMHg5MDQ1LAorICAg IDB4ZmZmZCwgMHhlM2UyLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUzZTMsIDB4OTg1Nywg MHhlM2U0LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlM2U1LCAweGUz ZTcsIDB4ZTNlNiwgMHg5NGEzLAorICAgIDB4ZmZmZCwgMHg5M2Y3LCAweGZmZmQsIDB4OTg1ZCwg MHg5NGE3LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZTNlOSwgMHhmZmZkLCAweGZmZmQsIDB4OGZkMSwgMHhmZmZkLAorICAgIDB4OTU0OSwg MHhmZmZkLCAweGUzZWEsIDB4ZTNlOCwgMHhmZmZkLCAweDhhY2MsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHg4Y2QyLCAweDhlODgsIDB4ZmZmZCwgMHhmZmZkLCAweDk0ZWMsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg4Y2E4LCAweDk2NjIsIDB4ZmZmZCwgMHhlM2VkLCAw eGUzZWIsIDB4ZmZmZCwgMHg4ZDZkLAorICAgIDB4ZmZmZCwgMHg4ZDZlLCAweDg4ZTcsIDB4ZmZm ZCwgMHg4ZGU2LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAw eDk0NzgsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ODhkZCwgMHhlM2YyLCAweGZmZmQsIDB4OTI1ZiwgMHhmZmZk LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5NDc3LCAweGZmZmQsIDB4 OTFkOSwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZTNmNCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhlM2YwLCAweGUzZjMsIDB4 ZTNlZSwgMHhmZmZkLCAweGUzZjEsIDB4OTY0NSwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg4Y2Qz LCAweGZmZmQsIDB4ZmZmZCwgMHg4OGZiLCAweGUzZWYsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhl M2Y2LAorICAgIDB4ZmZmZCwgMHhlM2Y3LCAweGZmZmQsIDB4ZmZmZCwgMHg5M2I3LCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OGJiOSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhl NDQ1LCAweDk0NWMsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDhlODks IDB4ZmZmZCwgMHhmZmZkLCAweDhiYmEsIDB4OTBjNiwgMHg5ODY1LAorICAgIDB4OTZhYywgMHhl M2Y1LCAweDkwZDIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDhiNzIsIDB4ZTNmOCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTNmYSwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhlM2Y5LCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlM2ZiLAorICAgIDB4ZmZmZCwg MHg5MjQ1LCAweGZmZmQsIDB4OTQ1ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHg5MmFmLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTQ0 MiwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZTQ0MSwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTNm YywgMHhmZmZkLCAweGZmZmQsIDB4OTA3NCwgMHhmZmZkLAorICAgIDB4OTU4NSwgMHhlNDQ0LCAw eGZmZmQsIDB4ZTQ0MywgMHg4ZDZmLCAweDk4NzIsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNDU0 LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU0NDgsIDB4 ZTQ0OSwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGVlZSwgMHhmZmZk LCAweGZmZmQsIDB4ZTQ0NywgMHhmZmZkLAorICAgIDB4OGQ5OCwgMHhlNDQ2LCAweGZmZmQsIDB4 ZmZmZCwgMHhlNDRhLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OTJiMCwgMHg5NWEw LCAweDkxNDIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5MWRhLAorICAgIDB4 ZTQ0ZSwgMHhmZmZkLCAweGU0NGYsIDB4ZTQ0YiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4ZTQ0YywgMHhmZmZkLCAweGU0NGQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHg4ZDcwLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTQ1NSwgMHhm ZmZkLCAweGU0NTEsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDk1ODYs IDB4ZmZmZCwgMHg5NjhjLCAweDk1NDcsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZTQ1MCwgMHhm ZmZkLCAweGZmZmQsIDB4ZTQ1MywgMHhlNDUyLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4OTY2MywgMHhlNDU2LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4ZTQ1NywgMHhmZmZkLCAweGZmZmQsIDB4OTE1NiwgMHhmZmZkLCAweGU0 NTgsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZTQ1YSwgMHhmZmZkLCAweGU0NWUsIDB4ZmZmZCwg MHhmZmZkLCAweGU0NWIsIDB4ZTQ1OSwgMHg5NDVlLAorICAgIDB4ZTQ1YywgMHhmZmZkLCAweGU0 NWQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ODliMCwgMHhmZmZkLAorICAgIDB4ZTQ2NCwg MHhlNDVmLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU0NjAsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHhlNDYxLCAweGZmZmQsIDB4OTE5ZiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4ZTQ2MywgMHhlNDYyLCAweGU0NjUsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhlNDY2LAorICAgIDB4ZTQ2NywgMHhmZmZkLCAweGZmZmQsIDB4OTA2 MiwgMHhmZmZkLCAweDg5ZTcsIDB4ZmZmZCwgMHhlNDY4LAorICAgIDB4OTdkNSwgMHhmZmZkLCAw eDhlYTksIDB4ZmZmZCwgMHhmZmZkLCAweDhmNGMsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4OGU4YSwgMHg5Mjc2LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU0NjksIDB4ZTQ2YSwgMHg4OTUwLCAweGZmZmQsIDB4 ZTQ2YiwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhlNDZjLCAweGU0NmQsIDB4ZmZmZCwgMHhmZmZk LCAweGU0NmUsIDB4ZmZmZCwgMHhlNDZmLAorICAgIDB4OGJiYiwgMHg5ZGE4LCAweGU0NzAsIDB4 ZmZmZCwgMHg5MGUzLCAweGU0NzEsIDB4OGVjOSwgMHhmZmZkLAorICAgIDB4ZTQ3MiwgMHhmZmZk LCAweDk4YWUsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTQ3MywgMHg5NWRjLAorICAgIDB4 OGFkYSwgMHhmZmZkLCAweGZmZmQsIDB4OTE0MywgMHg4Zjc3LCAweGZmZmQsIDB4OTU5MSwgMHg4 ZjRkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhlNDc0LCAweDhkNzEsIDB4ZTQ3NSwgMHg5 NGNhLCAweGZmZmQsIDB4ZTQ4NCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZTQ3NywgMHhmZmZkLCAweDkxYzcsIDB4OTQ5NSwgMHg4Y2JkLAorICAgIDB4ZTQ3NiwgMHg5 MTQ0LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4ZTQ3OCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHg5MmY4LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZTQ3YSwgMHhlNDc5LCAweGU0 N2MsIDB4ZmZmZCwgMHhmZmZkLCAweGU0N2IsIDB4ZmZmZCwgMHhlNDdkLAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweGU0ODAsIDB4ZmZmZCwgMHhlNDdlLCAweGZmZmQsIDB4OGFjZCwgMHhmZmZkLAor ICAgIDB4ZTQ4MSwgMHhmZmZkLCAweGU0ODIsIDB4ZTQ4MywgMHhmZmZkLCAweGZmZmQsIDB4OGRh ZiwgMHg5N2M3LAorICAgIDB4ZmZmZCwgMHhlNDg1LCAweDkwNDYsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ODk5MCwgMHhlNDg2LAorICAgIDB4ZTQ4NywgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTQ4OCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ODhmMCwgMHhmZmZkLCAweGU0ODksIDB4ZmZmZCwgMHhmZmZk LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU0OGEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5NTg3LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweDhlYzUsIDB4ZmZmZCwgMHhlNDhjLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweDhhNDgsIDB4ODhiMCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZTQ4YiwgMHhlNDhlLCAweDk0NmQsIDB4ZmZmZCwgMHg5MDYzLAorICAgIDB4 ZmZmZCwgMHg4OWQ0LCAweGZmZmQsIDB4OTY0NiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4OGM3YywgMHg4YmRhLCAweGZmZmQsIDB4ZTQ4ZCwgMHhmZmZkLCAweDg5ZTgs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweDhhYTEsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg4 OTkxLCAweGU0OTIsIDB4OTdlOCwgMHg5MWRiLCAweGZmZmQsIDB4ZmZmZCwgMHg5NTYzLAorICAg IDB4ZmZmZCwgMHhlNDllLCAweGZmZmQsIDB4ODlkNSwgMHhlNDljLCAweGZmZmQsIDB4ZTQ5YSwg MHhlNDkxLAorICAgIDB4ZmZmZCwgMHhlNDhmLCAweGZmZmQsIDB4ZTQ5MCwgMHhmZmZkLCAweDhl ZTEsIDB4OGJlYSwgMHg5Mjk3LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTNjZiwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg4OTcwLCAweGZm ZmQsIDB4ZTQ5NCwgMHhlNDkzLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHhlNDk5LCAweGU0OTUsIDB4ZTQ5OCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHhmZmZkLCAweDk2Y2UsIDB4ZTQ5NywgMHg4OWQ2LCAweDhhOWQsIDB4ZTQ5 YiwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhlNDlkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4OGM3MywgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTRhMSwgMHhlNGFhLAorICAgIDB4ZTRhYiwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHg4OGE5LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTRiMiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAorICAgIDB4ODhlZiwgMHhmZmZkLCAweGZmZmQsIDB4ZTRhOSwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhlNGE4LAorICAgIDB4ZmZmZCwgMHhlNGEzLCAweGU0YTIsIDB4ZmZmZCwgMHhlNGEw LCAweGU0OWYsIDB4OTI4MywgMHhmZmZkLAorICAgIDB4OTFmOSwgMHhlNGE1LCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZTRhNCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU0YTcsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHg5MTkwLCAweDhjNzQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4 OTYwLAorICAgIDB4ZTRhNiwgMHhmZmZkLCAweDhkNzIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OTE5MSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTRiOCwgMHhmZmZkLCAweGU0YjksIDB4ZmZmZCwg MHg4OWQ3LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ODlhYywgMHhlNGI2LCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGU0YWMsIDB4ZmZmZCwgMHhlNGI0LAorICAgIDB4ZmZmZCwgMHhlNGJiLCAweGU0 YjUsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTRiMywgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZTQ5NiwgMHhmZmZkLCAweGZmZmQsIDB4ZTRiMSwgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU0YWQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGFj ZSwgMHhlNGFmLAorICAgIDB4ZTRiYSwgMHhmZmZkLCAweGU0YjAsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZTRiYywgMHhmZmZkLCAweGU0YWUsIDB4OTQ5 YywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5Nzg5LCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU0YjcsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU0Y2QsIDB4ZmZmZCwgMHhmZmZk LAorICAgIDB4ZmZmZCwgMHhlNGM1LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDkwOWIsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDhiNjUsIDB4ZmZmZCwgMHg4YmRi LCAweGZmZmQsIDB4ZTRjMCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ODlkOSwgMHhmZmZkLCAweGZmZmQsIDB4OGZkMiwgMHhmZmZkLAorICAgIDB4ZTRjMywgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHg4ZGQ4LCAweGZmZmQsIDB4ZmZmZCwgMHg5MzcwLAorICAgIDB4 ZTRjOCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHg5NWVjLCAweGZmZmQsIDB4ZTRiZiwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHg4OWQ4LAorICAgIDB4OGNkNCwgMHg5NTQ4LCAweGU0YzksIDB4ZmZmZCwgMHhl NGJkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNGM2LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZTRkMCwgMHhmZmZkLCAweGU0YzEsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZTRjMiwgMHg5M2I4LCAweGZmZmQsIDB4ZmZmZCwgMHhlNGM3LAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTRjNCwgMHg5NjQ3LCAweGU0Y2EsIDB4ODhkZSwg MHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTRiZSwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZTRjYywgMHhmZmZkLCAweGU0 Y2IsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHg5NDhiLCAweGU0ZDIsIDB4ZmZmZCwgMHhlNGRkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHg4YTllLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU0ZTAsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4ZTRjZSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNGQzLCAw eDk3OGUsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTRkYywgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5Nzc0LCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTdhOCwgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5Mjk4 LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGE4YiwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5NTkyLCAweGU0ZTIsIDB4OTM5ZiwgMHhmZmZk LCAweGZmZmQsIDB4ODhhZiwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhlNGRiLCAweGZmZmQsIDB4 ZTRkNywgMHg5MTkyLCAweGU0ZDEsIDB4ZTRkOSwgMHhlNGRlLAorICAgIDB4ZmZmZCwgMHg5NDRi LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDg4YTgsIDB4ZmZmZCwgMHhlNGQ2LAorICAgIDB4 ZmZmZCwgMHhlNGRmLCAweDk1OTgsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU0ZGEsIDB4ZmZmZCwgMHhlNGQ1LCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGZkMywgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OGY0ZSwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHg4ZWFhLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5 NmQ2LCAweGZmZmQsIDB4ZmZmZCwgMHg5NTY2LCAweGZmZmQsIDB4ZmZmZCwgMHhlNGU1LAorICAg IDB4ZmZmZCwgMHhlNGVlLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU0 ZDgsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDhhOTcsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OGZmNiwgMHhlNGUzLCAweGZm ZmQsIDB4ZTRlOCwgMHg5MTkzLCAweGZmZmQsIDB4ZmZmZCwgMHhlNGU0LAorICAgIDB4ZmZmZCwg MHhlNGViLCAweGZmZmQsIDB4ZmZmZCwgMHg5MjdlLCAweGZmZmQsIDB4ZTRlYywgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHg5Nzc1LCAweGU0ZTEsIDB4OGE1NywgMHhmZmZkLCAweGU0ZTcsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4ZTRlYSwgMHg5NmFhLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZTRlZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhlNGU2LCAweGU0ZTksIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5NjQ4LCAweGZmZmQsIDB4OTg0MCwgMHhmZmZk LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNGYxLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNGY4 LCAweGZmZmQsIDB4ZmZmZCwgMHhlNGYwLAorICAgIDB4OGVjMSwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTRjZiwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHg5NWNjLCAweGZmZmQsIDB4OTZhMCwgMHhlNGY3LCAweGU0ZjYsIDB4ZmZmZCwgMHhl NGYyLAorICAgIDB4ZTRmMywgMHhmZmZkLCAweDg5NTUsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhlNGY1LAorICAgIDB4ZmZmZCwgMHhlNGVmLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4OTJkMywgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhlNGY0LCAweDg4ZmMsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDkxYTAsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk1YzEsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4ZTRmOSwgMHhlNTQwLCAweGZmZmQsIDB4OTRkNywgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZTRmYywgMHg4ZmQ0LCAweDhlYzcsIDB4ZTU0Miwg MHhmZmZkLCAweGZmZmQsIDB4OGJiYywgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU1NDMsIDB4ZmZmZCwgMHg5NTk5LAorICAgIDB4ZTRmYiwg MHhmZmZkLCAweGU0ZDQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTRmYSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4OTg2ZSwgMHg5M2EwLCAweDk1OTMsIDB4ZmZmZCwgMHhmZmZkLCAw eGU1NGEsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNTUwLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTU1MSwgMHhmZmZkLAorICAgIDB4ZTU0 NCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5NDk2LCAweGZmZmQsIDB4ZmZmZCwgMHhlNTRl LAorICAgIDB4ZTU0NiwgMHhmZmZkLCAweGU1NDgsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4ZTU1MiwgMHhlNTQ3LCAweGZmZmQsIDB4ZmZmZCwgMHhlNTRi LCAweGZmZmQsIDB4ZmZmZCwgMHg4OTkyLAorICAgIDB4ZmZmZCwgMHg5M2UzLCAweGZmZmQsIDB4 ZTU0YywgMHhlNTRmLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhlNTQ1LCAweGZmZmQsIDB4OTE0NSwgMHhmZmZkLAorICAgIDB4 ZTU0OSwgMHg4ZTQ2LCAweDkwNjQsIDB4OGM0ZiwgMHg5NmYyLCAweGZmZmQsIDB4OTZmNywgMHg4 ZjkyLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhlNTU2LCAweGU1NTQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5ODZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhl NTUzLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk3OTUsIDB4ZmZmZCwgMHhlNTU1LAorICAg IDB4ZTU1NywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU1NTgsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNTViLCAweGU1 NTksIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHg5M2ExLCAweGU1NWEsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5NGNiLCAweGU1 NGQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4ZjkzLAor ICAgIDB4ZmZmZCwgMHhlNTVjLCAweGU1NjEsIDB4OTE5NCwgMHhmZmZkLCAweGZmZmQsIDB4ZTU2 MCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU1NDEsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZTU2MiwgMHg5MTY4LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU1NWQsIDB4ZTU1 ZiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZTU1ZSwgMHhmZmZkLCAweGZmZmQsIDB4OWY1MCwgMHg5ZjQxLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGU1NjQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU1NjMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweDk3OTYsIDB4ZmZmZCwgMHhlMWJhLAorICAgIDB4ZTU2NSwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNTY2LAorICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU1Njcs IDB4OGNkNSwgMHhmZmZkLAorICAgIDB4OGI3MywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhl NTY5LCAweDk5N2MsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDhiOTUs IDB4ZmZmZCwgMHg5N2I4LCAweGZmZmQsIDB4OGJmMSwgMHhlNTZhLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNTZiLAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTI4ZSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4ZmZmZCwgMHhlNTZjLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5M2Y4LCAweGZmZmQsIDB4ODhiOCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweDg5ZTEsIDB4ZTU3MSwgMHhlNTcyLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTU2ZCwgMHhmZmZkLCAweDhlNWMsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTU2 ZSwgMHg5NDYxLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhlNTZmLCAw eGU1NzAsIDB4ZTU3YSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNTc0LAorICAgIDB4ZTU3 NywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTU3MywgMHhmZmZk LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNTc1 LCAweGZmZmQsIDB4ZTU3NiwgMHg4ZWQ2LAorICAgIDB4ZmZmZCwgMHhlNTc4LCAweGZmZmQsIDB4 OTI2MCwgMHhmZmZkLCAweDhjNzUsIDB4OGE2MSwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhlNTdiLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHg4YTVlLCAweGZmZmQsIDB4ZTU4MSwgMHhmZmZkLCAweGZmZmQsIDB4ZTU3YywgMHhl NTgwLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5NGI4LCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhlNTdkLCAweGZmZmQsIDB4ZmZmZCwgMHhl NTdlLCAweDk1NjcsIDB4OTRkOCwgMHhlNTgyLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OTFmYiwgMHhl NThjLCAweGZmZmQsIDB4ZTU4OCwgMHhmZmZkLCAweGZmZmQsIDB4ODllOSwgMHhmZmZkLAorICAg IDB4ZTU4NiwgMHhmZmZkLCAweDk2NDksIDB4ZTU4NywgMHhmZmZkLCAweGZmZmQsIDB4ZTU4NCwg MHhmZmZkLAorICAgIDB4ZTU4NSwgMHhlNThhLCAweGU1OGQsIDB4ZmZmZCwgMHhmZmZkLCAweGU1 OGIsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhlNTg5LCAweGU1ODMsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OTI3NywgMHhmZmZkLCAweGU1 OTQsIDB4ZmZmZCwgMHg5NmE4LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU1OTIsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHhlNTkzLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNThlLCAw eGZmZmQsIDB4ZmZmZCwgMHhlNTkwLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTU5 MSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNThmLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHg5MGU0LCAweGZmZmQsIDB4OTg1OCwgMHhlNTk4LCAweGZmZmQsIDB4ZTU5OSwgMHhmZmZk LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTU5ZiwgMHhmZmZkLCAweDkwNDksIDB4 ZmZmZCwgMHhlNTliLAorICAgIDB4ZmZmZCwgMHhlNTllLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhlNTk2LAorICAgIDB4ZTU5NSwgMHhmZmZkLCAweGZmZmQsIDB4 ZTVhMCwgMHhmZmZkLCAweGZmZmQsIDB4ODlkYSwgMHhmZmZkLAorICAgIDB4ZTU5YywgMHhmZmZk LCAweGU1YTEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTU5ZCwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNTlhLCAweGZmZmQsIDB4OTJiMSwgMHhm ZmZkLAorICAgIDB4ZTU5NywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHg5NDg4LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU1YTUsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweDk3NWEsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhlNWE0LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU1YTMsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTVhYywg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNWE2LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZTVhZSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweDk3ODYsIDB4ZTViMSwgMHhmZmZkLCAweGU1YTgsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4ZTVhOSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNWFkLCAweGZmZmQsIDB4ZTVi MCwgMHhlNWFmLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTVhNywgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZTVhYSwgMHhmZmZkLCAweGU1YmIsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZTVi NCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhlNWIyLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU1YjMsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZTViOCwgMHhlNWI5LAorICAgIDB4ZmZmZCwgMHg4YTQ5LCAweGZmZmQsIDB4 OGI2MSwgMHhmZmZkLCAweGZmZmQsIDB4ZTViNywgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU1YTIsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU1YjYsIDB4ZTViYSwgMHhl NWI1LAorICAgIDB4ZmZmZCwgMHhlNWJjLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU1YmUs IDB4ZTViZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhlNWMwLCAweGU1YmYs IDB4ZTU3OSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNWM0LAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHhlNWMxLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTVjMiwg MHhmZmZkLAorICAgIDB4ZmZmZCwgMHhlNWMzLCAweGZmZmQsIDB4ZTVjNSwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OGM4YywgMHhmZmZkLCAweGU1YzcsIDB4ZmZmZCwg MHhlNWM2LCAweGZmZmQsIDB4OGY0ZiwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHg4ZDczLCAweDlmYTUsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweGU1YzgsIDB4OGY3MCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4YTU4LAor ICAgIDB4ZmZmZCwgMHhlNWM5LCAweGZmZmQsIDB4ODk3MSwgMHhmZmZkLCAweDhmZDUsIDB4ZTVj YSwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg4ZDc0LCAweGU1Y2IsIDB4ODhkZiwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OTU1YywgMHhmZmZkLCAweGZmZmQsIDB4ZTVj YywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OTA4YSwgMHhmZmZkLCAw eGU1ZDMsIDB4ZmZmZCwgMHhmZmZkLCAweGU1ZDAsIDB4ZmZmZCwgMHg5MjhmLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU1ZDEsIDB4ZTVjZSwgMHg4YmRj LAorICAgIDB4ZmZmZCwgMHhlNWNkLCAweGU1ZDQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4OGM1NSwgMHhmZmZkLCAweGZmZmQsIDB4OTFkYywgMHhmZmZk LCAweGU1ZGEsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU1ZDYsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTFiMywgMHhlNWQ1LAorICAgIDB4ZmZmZCwgMHhlNWQ4 LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTVjZiwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGU1ZDksIDB4ZmZmZCwgMHhlNWRiLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTRlZCwgMHhmZmZkLCAweGZmZmQs IDB4ZTVkNywgMHhmZmZkLAorICAgIDB4ZTVkYywgMHhlNWRlLCAweGZmZmQsIDB4ZmZmZCwgMHg4 Y2QxLCAweGU1ZDIsIDB4ZmZmZCwgMHg4OGJmLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNWRkLAorICAgIDB4ZmZmZCwgMHg4 ZGQ5LCAweDk3ZjQsIDB4ZTVkZiwgMHhlNWUwLCAweDkxOTUsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHg5N2EwLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNWUxLCAweDk3 NTQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZTVlMiwgMHhlNWUzLCAweGZmZmQsIDB4ZmZmZCwg MHg5NWUyLCAweGU1ZTQsIDB4ZmZmZCwgMHg4ZGJlLAorICAgIDB4ZmZmZCwgMHg5N2ExLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZTVlOSwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU1ZWEsIDB4OGZkNiwgMHhlNWU4LCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4OTc4NywgMHhlNWU1LCAweGZmZmQsIDB4ZmZmZCwgMHhlNWU3LCAw eDkwYmIsIDB4OTA5ZSwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU1ZTYsIDB4ZmZm ZCwgMHhlNWViLCAweGZmZmQsIDB4ZmZmZCwgMHg5NWExLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGU1ZWQsIDB4ZmZmZCwgMHhlNWVjLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OGE4 YywgMHhmZmZkLCAweDk2NGEsIDB4ZTVlZSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU1ZmEsIDB4 ZTVmMCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGU1ZjEsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU1ZjIsIDB4 ZTVmMywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTVmNywgMHhmZmZkLAorICAgIDB4 ZTVmOCwgMHhmZmZkLCAweGZmZmQsIDB4ZTVmNiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHhlNWY0LCAweGZmZmQsIDB4ZTVlZiwgMHhlNWY1LCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhl NWY5LCAweGU4YjUsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ODlhNiwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTVmYywgMHg4YmRkLAorICAg IDB4ZTVmYiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNjQxLCAweGZmZmQsIDB4ZTY0MCwg MHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU2NDMsIDB4ZmZmZCwgMHhmZmZkLCAweGU2 NDIsIDB4ZmZmZCwgMHhlNjQ0LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDhmNTAsIDB4ZmZmZCwg MHhlNjQ1LCAweGZmZmQsIDB4ZmZmZCwgMHhlNjQ2LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTY0NywgMHg5MGJjLAorICAgIDB4ZmZmZCwg MHg5Nzc2LCAweGZmZmQsIDB4ZTY0OCwgMHhmZmZkLCAweGZmZmQsIDB4OTVhMiwgMHg5NDY1LAor ICAgIDB4ZTY0OSwgMHhmZmZkLCAweGU2NGEsIDB4OGNhOSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHg4YjRiLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTY0YiwgMHhmZmZkLCAw eGZmZmQsIDB4OGU4YiwgMHg5NDYwLAorICAgIDB4ZTY0YywgMHhmZmZkLCAweDhhNmYsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhlNjRkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTY0ZiwgMHg5Nzk3LAorICAgIDB4ZmZm ZCwgMHhlNjRlLCAweDkwNjUsIDB4ZmZmZCwgMHhlNjUwLCAweGZmZmQsIDB4ZmZmZCwgMHhlNjUx LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU2NTIsIDB4OGFjZiwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU2NTMsIDB4ZmZmZCwgMHhmZmZk LCAweGU2NTQsIDB4ZmZmZCwgMHhlNjU1LAorICAgIDB4ZTY1NiwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHhmZmZkLCAweDhhNzAsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU2NTcsIDB4ZmZmZCwgMHhlNjU4LCAweGU2NTks IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ODlmMCwgMHhm ZmZkLCAweGZmZmQsIDB4OTA0NywgMHhlNjVhLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNjViLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4ZTY1YywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4OGNiZSwgMHhmZmZkLCAweDkyZjksIDB4ZTY1ZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OGM3NiwgMHhmZmZkLCAweDkwNzUsIDB4ZmZmZCwg MHhlNjYwLCAweGZmZmQsIDB4OTNhMiwgMHhmZmZkLAorICAgIDB4ZTY1ZiwgMHhmZmZkLCAweGZm ZmQsIDB4OGM1MCwgMHhmZmZkLCAweGZmZmQsIDB4ZTY1ZSwgMHg5MWY1LAorICAgIDB4OGI0Yywg MHhmZmZkLCAweGZmZmQsIDB4ZTY2MSwgMHhmZmZkLCAweGU2NjIsIDB4ZmZmZCwgMHg4ZmQ3LAor ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGM4ZCwgMHhmZmZkLCAweGU2NjMsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDk2NGIsIDB4ZmZmZCwgMHhmZmZkLCAw eDkwZGQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg4Yjk2LCAweGZmZmQsIDB4OTZm MywgMHg5MTY5LCAweGZmZmQsIDB4ZTY2NCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAw eDkwNjYsIDB4OTI5MCwgMHg4ZmQ4LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHhlNjY1LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTY2OCwgMHhmZmZk LAorICAgIDB4ZTY2OSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4OGRiYywgMHg5MWMwLCAweGU2NjcsIDB4ZmZmZCwgMHg4ZmQ5 LCAweDk1NWQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZTY2NiwgMHhmZmZkLCAweGZmZmQsIDB4OGU4YywgMHhmZmZkLAorICAgIDB4ODk3MiwgMHhmZmZk LCAweGU2NmQsIDB4OGM3NywgMHhmZmZkLCAweGZmZmQsIDB4OGU4ZSwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHg4ZThkLCAweGZmZmQsIDB4OTg2YywgMHhlNjZjLCAweGU2NmIsIDB4OTE0NiwgMHhm ZmZkLAorICAgIDB4OGI2YywgMHg5ODYyLCAweDhhNTksIDB4OGZkYSwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhl NjZhLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU2NmYs IDB4ZmZmZCwgMHhlNjcwLCAweGU2NmUsIDB4ZmZmZCwgMHg4Y2Q2LAorICAgIDB4ZmZmZCwgMHg5 NzVmLCAweGZmZmQsIDB4ZmZmZCwgMHg4ZThmLCAweDk0NDYsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHhlNjczLCAweGZmZmQsIDB4OTBiZSwgMHhmZmZkLCAweDkyNjEsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4OTc1NSwgMHhmZmZkLCAweGU2NzYsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4OGNlYSwgMHhmZmZkLAorICAgIDB4OTBiZCwgMHhlNjcyLCAweGZmZmQsIDB4ZTY3Nywg MHg4Y2ViLCAweGU2NzQsIDB4ZTY3NSwgMHhmZmZkLAorICAgIDB4ZTY3MSwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHg5MGUwLCAweDkzYzcsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OTI0ZSwg MHhmZmZkLCAweDg5ZGIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHg5NGVlLCAweGZmZmQsIDB4ZmZmZCwgMHg4YjYyLCAweGZmZmQsIDB4ZmZm ZCwgMHg5MmIyLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU2N2EsIDB4ZmZmZCwgMHhlNjc4LCAw eGZmZmQsIDB4ZmZmZCwgMHg5MjZiLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTBi ZiwgMHg4YWQwLCAweGU2NzksIDB4ZmZmZCwgMHg5MDdhLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAw eDk3YzgsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTg1ZiwgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGU2N2IsIDB4ZTY4NywgMHg5MmIzLCAweGZmZmQsIDB4ZTY4NiwgMHhmZmZk LAorICAgIDB4ZTY4MywgMHhlNjhiLCAweGU2ODQsIDB4ZmZmZCwgMHhlNjgwLCAweGZmZmQsIDB4 OTJmYSwgMHhlNjdlLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTY3YywgMHhmZmZk LCAweDk3NDAsIDB4OGU5MCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhlNjgxLCAweGZmZmQsIDB4 ZTY3ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNjg1LAorICAgIDB4OGY5NCwgMHhmZmZk LCAweDhjYmYsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTFmOCwgMHhmZmZkLAorICAgIDB4 OTY2NCwgMHg4OTc5LCAweDg4ZTAsIDB4ZmZmZCwgMHg5M2EzLCAweGZmZmQsIDB4ZmZmZCwgMHhl Njg5LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNjg4LCAweGZmZmQs IDB4OTNlNCwgMHhmZmZkLAorICAgIDB4ZTY4ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhl NjgyLCAweGZmZmQsIDB4ZTY4YywgMHhlNjhlLAorICAgIDB4ZmZmZCwgMHg4Y2FhLCAweGU2OGEs IDB4OGQ3NSwgMHhmZmZkLCAweDhlZDMsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZTY4ZiwgMHg5 Nzc3LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTY5MiwgMHhmZmZkLAorICAg IDB4ZTY5NSwgMHhmZmZkLCAweGZmZmQsIDB4ZTY5MywgMHg5NTU0LCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTY5MCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg4YmRlLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZTY5NCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhlNjk2LCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHhlNjlhLCAweGZmZmQsIDB4ZmZmZCwgMHhlNjk3LCAweGZmZmQsIDB4ZTY5OSwgMHhlNjk4LAor ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTY5 YiwgMHhmZmZkLAorICAgIDB4OGVhZiwgMHhmZmZkLCAweGU2OWQsIDB4ZTY5YywgMHg5NTg4LCAw eGZmZmQsIDB4ZmZmZCwgMHhlNjlmLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4OGM3OCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZTY5ZSwgMHhlNmEwLCAweGZmZmQsIDB4ZmZmZCwgMHhlNmExLAorICAgIDB4OGI2 MywgMHhlM2JmLCAweDhmZjcsIDB4ZmZmZCwgMHhlNmEyLCAweGZmZmQsIDB4ZmZmZCwgMHg4Y2Vj LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU2YTMsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4ZTZhNCwgMHhmZmZkLCAweGZmZmQsIDB4OGU1ZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDlkY2MsIDB4 ZmZmZCwgMHhlNmE1LCAweGZmZmQsIDB4ZTZhNiwgMHhmZmZkLAorICAgIDB4OGY1MSwgMHhmZmZk LCAweGU2YTcsIDB4ZTZhOCwgMHhmZmZkLCAweGZmZmQsIDB4ZTZhOSwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHhlNmFhLCAweGU2YWIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5 MjRhLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU2YWMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhlNmFlLAorICAgIDB4ZmZmZCwgMHhlNmFkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4OTNhNCwgMHhmZmZkLAorICAgIDB4ZTZhZiwgMHhmZmZkLCAweDk2NGMs IDB4ZmZmZCwgMHhlNmIwLCAweGZmZmQsIDB4ZTZiMSwgMHhmZmZkLAorICAgIDB4ZTZiMiwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU2YjMsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweDkzZDgsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4ZmZmZCwgMHg4ZmRiLCAweGU2YjQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDhkOGIsIDB4OThhYywg MHhlNmI1LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZTZiNiwg MHg5NTVlLCAweGU2YjcsIDB4ZmZmZCwgMHhlNmJmLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU2YjgsIDB4ZmZmZCwgMHhmZmZkLCAweGU2YmEsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhlNmI5LCAweGU2YmIsIDB4ZmZmZCwgMHg5NjY1LCAw eGU2YmMsIDB4ZTZiZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhlNmJlLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZTZjMCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhhNGMsIDB4OTJlNSwgMHhmZmZkLAorICAgIDB4OTU4 OSwgMHg4ZGUwLCAweDhkNzYsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5NTZl LAorICAgIDB4ODlkZCwgMHg5NGNjLCAweGU2YzMsIDB4OGFkMSwgMHg5MGQzLCAweGU2YzIsIDB4 ZTZjNywgMHg5Mjk5LAorICAgIDB4OTZlMSwgMHhmZmZkLCAweGU2YzUsIDB4ZTZjNiwgMHg4YjRk LCAweGZmZmQsIDB4ZTZjOCwgMHg5NDgzLAorICAgIDB4OTFkZCwgMHhmZmZkLCAweGZmZmQsIDB4 OTRlZiwgMHg5MzVjLCAweGU2YzQsIDB4ZmZmZCwgMHg5NjY2LAorICAgIDB4ODllYSwgMHhlNmNh LCAweDk4NDcsIDB4OTJjMCwgMHg5ODY0LCAweGZmZmQsIDB4ZmZmZCwgMHg4ZTkxLAorICAgIDB4 ZTZjOSwgMHhmZmZkLCAweDkxYWYsIDB4ZmZmZCwgMHhmZmZkLCAweGU2ZGEsIDB4OTE0NywgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHg5M2Y2LCAweGZmZmQsIDB4OTU2ZiwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU2Y2QsIDB4OGU1ZSwgMHg4 ZTkyLCAweGZmZmQsIDB4OGZkYywgMHhmZmZkLAorICAgIDB4OTQ4NSwgMHhmZmZkLCAweDhjYWIs IDB4ZTZjYywgMHhlNmNiLCAweGZmZmQsIDB4OTU4YSwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweDhlYmYsIDB4ZmZmZCwgMHhmZmZkLCAweDkzNzEsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU2Y2YsIDB4ZTZkMCwgMHg4ZDc3LCAweGU2 Y2UsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhlNmQxLCAweGU2ZDIsIDB4ZmZmZCwgMHhlNmQ0LAorICAgIDB4OTFhMSwgMHhmZmZkLCAweGU2 ZDMsIDB4OGFlNCwgMHhmZmZkLCAweGU2ZDYsIDB4ZmZmZCwgMHhlNmQ1LAorICAgIDB4ZTZkNywg MHhmZmZkLCAweGZmZmQsIDB4ZTZkOSwgMHhlNmRiLCAweGZmZmQsIDB4ZTZkYywgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5MGQ0LCAweGZmZmQsIDB4OGVjZCwgMHhl NmRkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGE3MSwgMHhmZmZkLCAweGU2ZGUs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OTE5NiwgMHhlNmRmLCAweGZmZmQsIDB4ZTZlMCwgMHg5 NThiLCAweGZmZmQsIDB4ZmZmZCwgMHg4YjRlLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhl NmUxLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDkyYjQsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweDg5N2EsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhlNmUyLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4OGVlZiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OTA5Niwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTFhYiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU2ZTUsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZTZlNCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU2ZTMsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZTZlYiwgMHhlNmU5LCAweGZmZmQsIDB4ZmZmZCwgMHhlNmU2LAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTZlOCwgMHhmZmZk LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU2ZTcsIDB4ZTZlYSwgMHhmZmZkLCAweDhiOTcsIDB4 ZmZmZCwgMHhlNmVlLAorICAgIDB4ZmZmZCwgMHg5MGQ1LCAweGZmZmQsIDB4ZTZlZiwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OGNkNywgMHhmZmZkLCAweGU2ZWMsIDB4 ZTZlZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5ODQ4LAorICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4OTJiNSwgMHhmZmZkLCAweDkxNDgsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNmYwLCAweGZmZmQsIDB4ZmZmZCwgMHhl NmYzLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZTZmMSwgMHhlNmYyLCAweDk3NzgsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5M2E1LAorICAgIDB4ZTZmNiwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU2ZjQsIDB4ZTZmNSwgMHhlNmY3LAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU3NDgsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZTZmYSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhlNmZiLCAweGU2ZjksIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweGU2ZjgsIDB4ZmZmZCwgMHg5MmZiLCAweGZmZmQsIDB4ZmZmZCwgMHhlNzQwLAor ICAgIDB4ZTc0NCwgMHhlNzQxLCAweGU2ZmMsIDB4ZmZmZCwgMHhlNzQyLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4ZTc0MywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGU3NGEsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhlNzQ1LCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5MGQ2LAorICAgIDB4ZTc0NywgMHhmZmZkLCAw eGZmZmQsIDB4ZTc0OSwgMHhlNzQ2LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU3NGMsIDB4ZmZmZCwgMHg4ZjUyLCAweGZmZmQsIDB4 ZTc0YiwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNzRk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhlNzRlLCAweGZmZmQsIDB4 ZmZmZCwgMHhlNzUxLCAweGU3NTAsIDB4ZmZmZCwgMHhlNzRmLAorICAgIDB4ZmZmZCwgMHhmZmZk LCAweGU3NTMsIDB4ZTc1MiwgMHhmZmZkLCAweDk2ZjQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHhlNzU1LCAweGZmZmQsIDB4ZTc1NCwgMHhlNzU2LCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHhlNzU3LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhlNzU5LCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU3NTgs IDB4OTA2NywgMHhlNzVhLCAweGZmZmQsIDB4ZmZmZCwgMHg4YmViLAorICAgIDB4ZTc1YiwgMHhl NzVkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTc1ZSwg MHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU3 NWYsIDB4ZTc1YywgMHhmZmZkLAorICAgIDB4ZTc2MCwgMHhmZmZkLCAweDhlZDQsIDB4ZTc2MSwg MHg4YjRmLCAweDhjNTIsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDhj YWMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZTc2MiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5M2VlLAor ICAgIDB4ZmZmZCwgMHhmZmZkLCAweDkzNWQsIDB4ZTc2MywgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTc2NiwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OGViMiwgMHhmZmZkLCAw eGZmZmQsIDB4ZTc2NSwgMHhlNzY0LCAweDhjNzksIDB4ZTc2NywgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4OGE3MiwgMHhmZmZkLCAweGU3NjksIDB4ZmZmZCwgMHhmZmZk LAorICAgIDB4ZmZmZCwgMHg4ZGRhLCAweGU3NjgsIDB4ZmZmZCwgMHhlNzcxLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU3NmIsIDB4ZTc2ZCwgMHg5NWUz LCAweGU3NmEsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhlNzZjLCAweGZmZmQsIDB4 ZTc3MCwgMHhlNzZlLCAweDhiNTAsIDB4ZmZmZCwgMHhlNzZmLAorICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTc3MiwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHg5NDc5LCAweDk3ZDYsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4 ZjUzLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTc3MywgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OTc0MSwgMHhlNzc1LCAweGZmZmQsIDB4ZTc3NCwgMHhm ZmZkLCAweGZmZmQsIDB4ZTc3OCwgMHg5NzYwLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU3Nzcs IDB4ZmZmZCwgMHg4YThkLCAweGU3NzYsIDB4ZTc3YiwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhl NzdhLCAweGZmZmQsIDB4ZmZmZCwgMHhlNzc5LCAweDkzNTEsIDB4ZTc3YywgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhlNzdkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNzdlLCAweGZm ZmQsIDB4ZmZmZCwgMHg4ZDhjLAorICAgIDB4ZmZmZCwgMHg4YzQ0LCAweGU3ODAsIDB4ZTc4MSwg MHhlNzgyLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4OTA2OCwgMHhlNzgzLCAweGZmZmQsIDB4OGVhYiwgMHhlNzg0 LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTc4NSwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHg5OTlmLAorICAgIDB4OTk5ZSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGU3ODYsIDB4ZTM5MCwgMHhlNzg3LAorICAgIDB4OTI0MywgMHg5MDRhLCAweDk0NWYsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNzg4LAorICAgIDB4ZmZmZCwgMHhmZmZk LCAweDk1ZDMsIDB4OTJkMiwgMHg4ZDllLCAweGZmZmQsIDB4ZmZmZCwgMHg5MjQ4LAorICAgIDB4 ZmZmZCwgMHhmZmZkLCAweDg5NDksIDB4ZmZmZCwgMHg5Njk4LCAweDkwNzYsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4OGM3ZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg4YmRmLCAweGZmZmQsIDB4ZmZmZCwgMHg5 NWQ0LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU3ODks IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGU3OGIsIDB4ZmZmZCwgMHhmZmZkLCAweGU3OGEsIDB4ODlkZSwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHg5M2Y0LCAweGU3OGMsIDB4OTQ5NywgMHhmZmZkLCAweDkzNTIsIDB4ZmZmZCwg MHhlNzhkLAorICAgIDB4OGY3MSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNzhmLCAweGZm ZmQsIDB4ZmZmZCwgMHg5NmMwLAorICAgIDB4ZTc5ZSwgMHhlNzkxLCAweGU3OTIsIDB4ZmZmZCwg MHhmZmZkLCAweDkyYzcsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OTFkZSwgMHg5MTk3LCAweGZm ZmQsIDB4OTNhNiwgMHhmZmZkLCAweGU3OTAsIDB4OGI3NCwgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZTc5OSwgMHhmZmZkLCAweGU3OTYsIDB4ZTdhMywgMHg5M2E3LAor ICAgIDB4OTI4MCwgMHhlNzkzLCAweGZmZmQsIDB4OTJmYywgMHg5MzcyLCAweGU3OTQsIDB4ZTc5 OCwgMHg5MDgwLAorICAgIDB4ZmZmZCwgMHg5NDg3LCAweDkyY2EsIDB4ZmZmZCwgMHhmZmZkLCAw eDkwYzAsIDB4ZTc5NywgMHg5MWFjLAorICAgIDB4OTFhMiwgMHhlNzk1LCAweDg4YTcsIDB4OTg0 MSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNzlhLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTFkZiwgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHg4ZjU0LCAweDkwNjksIDB4ZmZmZCwgMHhmZmZkLCAweGU3OWMsIDB4ZTc5YiwgMHhmZmZk LAorICAgIDB4ODhlZCwgMHhlNzlkLCAweGZmZmQsIDB4ZmZmZCwgMHg5NTRlLCAweGZmZmQsIDB4 ZTdhNSwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5M2Q5LCAweDkwOGIsIDB4ZmZmZCwgMHhmZmZk LCAweDkyNzgsIDB4ZmZmZCwgMHg4YmY2LAorICAgIDB4ZmZmZCwgMHhlN2E0LCAweDk3NTYsIDB4 ODk1ZSwgMHhmZmZkLCAweDk1ZDUsIDB4ODlkZiwgMHhlNzlmLAorICAgIDB4ZTdhMCwgMHhlN2Ex LCAweGU3YTIsIDB4OTNiOSwgMHg5MjQyLCAweDg4ZTEsIDB4ZTdhNiwgMHhmZmZkLAorICAgIDB4 ZTdhNywgMHhlYWExLCAweGZmZmQsIDB4ZmZmZCwgMHg5MWJiLCAweGZmZmQsIDB4ZTdhOCwgMHhm ZmZkLAorICAgIDB4ODk5MywgMHg5MTZiLCAweGZmZmQsIDB4OGNhZCwgMHhmZmZkLCAweDk3Nzks IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZTdhOSwgMHg5MzRiLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweDkxOTgsIDB4OGVkNSwgMHhlN2FhLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU3YWQs IDB4ZmZmZCwgMHhmZmZkLCAweDhmODUsIDB4ZTdhYiwgMHg5MTRhLAorICAgIDB4OTE0OSwgMHhm ZmZkLCAweDg4ZTIsIDB4ZmZmZCwgMHg5N2M5LCAweGU3YWYsIDB4ZmZmZCwgMHg5NGYwLAorICAg IDB4ZTdiMSwgMHhlN2IwLCAweGU3YWUsIDB4ZTI4NCwgMHg4YWQyLCAweGZmZmQsIDB4ZmZmZCwg MHhlNzhlLAorICAgIDB4ZmZmZCwgMHhlN2IzLCAweGU3YjIsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhlN2I0LAorICAgIDB4ZmZmZCwgMHg5NzU3LCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4OTNkZiwgMHhmZmZkLCAweGZmZmQsIDB4OTY0ZCwgMHhmZmZkLAor ICAgIDB4ZTdiNSwgMHhmZmZkLCAweDhlZDcsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhlN2I2LAorICAgIDB4ZmZmZCwgMHhlN2I3LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGU3YjgsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OTM0MCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg4OGU4LCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweDhkNzgsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTg1OSwgMHhmZmZk LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTdiYywgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg4YzUzLCAweGU3YjksIDB4 ZmZmZCwgMHhlN2JhLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OTU5NCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhhNzMsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk3NTgsIDB4ZmZmZCwgMHg4 YmJkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDkzNzMs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU3YmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGU3YmUsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHhlN2JmLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweDkzNDEsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZTdjMSwgMHhmZmZkLCAweGU3 YzAsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5M2QxLCAweGU3YzIsIDB4OGY1NSwgMHg4ZWRlLCAw eDk0N2EsIDB4OTI5MSwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDhlZjAsIDB4ZmZm ZCwgMHg5MDhjLCAweGZmZmQsIDB4ZTdjMywgMHhmZmZkLAorICAgIDB4ZTdjNCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweDkwN2MsIDB4ZTdjNSwgMHhmZmZkLCAweGU3YzYsIDB4ZmZmZCwgMHhmZmZk LAorICAgIDB4ZmZmZCwgMHhlN2M3LCAweDk3OGYsIDB4ZmZmZCwgMHg4ZjU2LCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU3YzksIDB4ZTdjOCwgMHhmZmZk LCAweDhkNzksIDB4ZmZmZCwgMHg4ZDkzLAorICAgIDB4OGU1ZiwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZk LCAweGU3Y2MsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4Zjg2LAorICAgIDB4 ZmZmZCwgMHhlN2NiLCAweGZmZmQsIDB4ZTdjYSwgMHhmZmZkLCAweDkxZTcsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4OGNlZCwgMHhmZmZkLCAweDkwYzEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHg5NGFlLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4 ZjU4LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU3Y2Qs IDB4ZmZmZCwgMHg4ZmRkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGU3ZDAsIDB4ZTdjZSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlN2NmLAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlN2QyLCAweGU3ZDEsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4OGZmOCwgMHhmZmZkLCAweGU3ZDMsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZTdkNCwgMHhlN2Q1LCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4OTRjZSwgMHg4ZGQxLAorICAgIDB4OGVkZiwgMHhlN2Q2LCAweGZm ZmQsIDB4ZTdkNywgMHg5N2EyLCAweDhmNjQsIDB4OTZlYywgMHg5N2NhLAorICAgIDB4ZTdkOCwg MHg4YmUwLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTdkOSwgMHhmZmZkLAor ICAgIDB4OTM0MiwgMHhmZmZkLCAweGZmZmQsIDB4ZTdkYywgMHg4YTk4LCAweDkwNmEsIDB4ZmZm ZCwgMHhlN2RhLAorICAgIDB4ZmZmZCwgMHhlN2RiLCAweGZmZmQsIDB4OTJkZSwgMHhmZmZkLCAw eGZmZmQsIDB4OTY3NCwgMHg4YmZhLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU3ZGUsIDB4ZTdkZiwgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlN2RkLCAweGZmZmQsIDB4ZmZmZCwgMHhlN2Ux LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweDkzZGQsIDB4OGE2MiwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhlN2U1LCAweGZmZmQsIDB4 ZmZmZCwgMHhlN2UyLCAweGU3ZTQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTdlMCwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHhlODZlLCAweGZmZmQsIDB4ZmZmZCwgMHhlN2UzLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5 N2U5LCAweGZmZmQsIDB4ZmZmZCwgMHg4Y2Q4LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlN2VkLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5MzUzLCAweGU3ZTgsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4ZTdlYiwgMHhlN2U5LCAweGZmZmQsIDB4ZTdlZSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4ZTdlZiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhlN2U3LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU3ZjQsIDB4ODk5NCwg MHhmZmZkLCAweGZmZmQsIDB4ZTdlNiwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDk0 YWIsIDB4ZmZmZCwgMHhlN2VhLCAweGZmZmQsIDB4OGZkZSwgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHg4ZDdhLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4OTY2NywgMHhmZmZkLAorICAgIDB4OGJlMiwgMHhmZmZkLCAweGZmZmQsIDB4OGY2 NSwgMHhmZmZkLCAweDkzYmEsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHg5MTRjLCAweGZmZmQsIDB4ZTdmMiwgMHhmZmZkLCAweGU3ZWMsIDB4ZTdmMSwgMHhmZmZk LAorICAgIDB4OTZjMSwgMHhmZmZkLCAweDkyYjYsIDB4ZTdmMywgMHhlN2YwLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweDkxNGIsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlN2Y3LAorICAgIDB4 ZmZmZCwgMHhlN2Y2LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlN2Y1LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDk2NGUs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4ZjliLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4ZmZmZCwgMHhlN2Y4LCAweDk1ZGQsIDB4ZmZmZCwgMHhmZmZkLCAweDg5 NzMsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDk1NjUsIDB4OTI5Miwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OGI5OCwgMHhmZmZkLCAweGU3 ZmEsIDB4ZmZmZCwgMHg4ZDdjLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGU0YiwgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhlN2Y5LAorICAgIDB4OTA4ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OTA4ZSwgMHhlODQwLCAweGU4NDIsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OGZmOSwgMHhmZmZkLCAw eGU4NDEsIDB4ZTg0MywgMHhmZmZkLCAweGZmZmQsIDB4OGJkMSwgMHhmZmZkLAorICAgIDB4OTU2 NCwgMHhmZmZkLCAweGZmZmQsIDB4OGVlMCwgMHg5ODQyLCAweGZmZmQsIDB4ZTdmYywgMHg4ZGY2 LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDk4NWUsIDB4ZmZmZCwgMHhmZmZkLCAweGU4NDUsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU4NDQsIDB4ZTg0NiwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhlN2ZiLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4OTNlNywgMHhmZmZkLCAweDkzNzQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5MmQ1LCAweGZmZmQsIDB4ZTg0YiwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTI2MiwgMHhlODQ3LCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZTg0OCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHg4YzRjLCAweGZmZmQsIDB4ZTg0YSwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhjYWUsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlODQ5LCAweGZmZmQsIDB4OGZkZiwg MHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHg4YTk5LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhlODRmLCAweGZmZmQsIDB4OGRiZCwgMHg5MTk5LAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweDkyYzgsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHg4YTVhLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlODRkLCAw eGU4NGUsIDB4OTJjMSwgMHhmZmZkLAorICAgIDB4ZTg0YywgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhlODUwLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTg1NiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAorICAgIDB4ZTg1OSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4ZTg1OCwgMHg5MzRjLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZTg1MSwgMHhlODUyLAorICAgIDB4ZTg1NSwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGU4NTcsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg4YmJl LCAweGZmZmQsIDB4ZmZmZCwgMHhlODVhLCAweGU4NTQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 ZTg1MywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZTg1ZSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlODVmLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4ZTg2MCwgMHhmZmZkLCAweGZmZmQsIDB4ZTg1ZCwgMHhlODVjLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4OGZlMCwgMHg5M2E4LCAweGU4NWIsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhlODY0LCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZTg2MiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU4NjMsIDB4ZTg2MSwgMHhmZmZkLAor ICAgIDB4OTFmNiwgMHhmZmZkLCAweGU4NjUsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhlODY2LCAweGZmZmQsIDB4ZmZmZCwgMHhlODY4LCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg4YWQzLCAw eGU4NjcsIDB4OTZmOCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGU4NzMsIDB4ZTg2OSwgMHhmZmZkLCAweGZmZmQsIDB4ZTg2YywgMHhmZmZk LAorICAgIDB4ZTg2YSwgMHhmZmZkLCAweGU4NmIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU4NmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZTg2ZiwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGU4NzAsIDB4ZmZmZCwgMHhlODcxLAorICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhlODc0LCAweGU4NzIsIDB4ZTg3NSwgMHhlODc3LAorICAgIDB4 ZmZmZCwgMHhlODc2LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHg5MmI3LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OTZlNSwgMHhmZmZkLCAw eGU4NzgsIDB4OTE0ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlODc5LAorICAgIDB4ZmZm ZCwgMHg5NWMyLCAweGU4N2EsIDB4OGE0YSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4OTVi LAorICAgIDB4ZmZmZCwgMHg4YWQ1LCAweGZmZmQsIDB4OGFkNCwgMHhlODdiLCAweGZmZmQsIDB4 ZTg3YywgMHhmZmZkLAorICAgIDB4ZTg3ZCwgMHhlODdlLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZTg4MCwgMHhmZmZkLCAweDhhZDYsIDB4 OGE3NCwgMHg4ZDdkLCAweDk0YjQsIDB4ZmZmZCwgMHhlODgyLAorICAgIDB4ZTg4MSwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU4ODMsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHhmZmZkLCAweDg5N2IsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHhlODg2LCAweGZmZmQsIDB4ZTg4NSwgMHhlODg0LCAweGZmZmQs IDB4ZTg4NywgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTg4YSwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4OGM1LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU4ODgs IDB4ZmZmZCwgMHhlODhjLCAweGU4OGIsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlODhlLCAweGU4OGQsIDB4ZTg4ZiwgMHhmZmZkLAorICAg IDB4OTNhYywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlODkwLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4ZmZmZCwgMHhlODkxLCAweGU4OTMsIDB4ZmZmZCwgMHhmZmZkLCAweGU4 OTIsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHg5NThjLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHhlODk0LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAorICAgIDB4ZTg5NSwgMHhmZmZkLCAweDhkZTMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZTg5NiwgMHhlODk3LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDk2NjgsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 OTE2YSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4OGEyLAorICAgIDB4OTFjOSwgMHhmZmZk LCAweGU4OTgsIDB4ZmZmZCwgMHg5NThkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTg5YiwgMHhlODk5LCAweDhkN2UsIDB4ZmZmZCwgMHhl ODlhLAorICAgIDB4OGNjMCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTVjMywgMHhl ODlkLCAweGU4OWYsIDB4ZTg5ZSwgMHhlOGEwLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDg5NDAs IDB4OTA3NywgMHg4ZjljLCAweDhhZDcsIDB4ZThhMSwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweDk0ODYsIDB4ZmZmZCwgMHhlOGEzLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4ODk0MSwgMHhmZmZkLCAweGU4YTIsIDB4OTJjMiwgMHhmZmZkLCAweDk3Y2IsIDB4OTNhOSwg MHhlODljLAorICAgIDB4OTdhNCwgMHhmZmZkLCAweDhjYWYsIDB4ZmZmZCwgMHhmZmZkLCAweDk3 N2EsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweDhiZjcsIDB4OTdiMiwgMHhmZmZkLAorICAgIDB4OGM0NywgMHhmZmZkLCAweDkx ZTAsIDB4ZTQ0MCwgMHhmZmZkLCAweGU4YTQsIDB4OGE0YiwgMHg5MDhmLAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4YTc1LCAweGU4YTYsIDB4ZmZmZCwgMHhlOGE3LAor ICAgIDB4ZThhNSwgMHg4Yzg0LCAweGZmZmQsIDB4OGRkYiwgMHg4ZmUxLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4ODk0MiwgMHhmZmZkLCAweGZmZmQsIDB4OTdkNywgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhlOGE5LAorICAgIDB4ZTdhYywgMHhmZmZkLCAweGU4YTgsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZThhYywgMHhlOGFhLCAw eGU4YWIsIDB4ZmZmZCwgMHhlOGFkLCAweGZmZmQsIDB4ZThhZSwgMHg5N2VhLAorICAgIDB4ZThh ZiwgMHhlOGIwLCAweGZmZmQsIDB4OTBjNywgMHg5NGI5LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAorICAgIDB4OTA5ZCwgMHg4YWU1LCAweGZmZmQsIDB4ZmZmZCwgMHg5NzU5LCAweDg5ZWIsIDB4 OGY1NywgMHg4Y2Q5LAorICAgIDB4ZmZmZCwgMHhlOGIzLCAweGZmZmQsIDB4ZThiMiwgMHg4ZTkz LCAweGU4YjQsIDB4ZThiMSwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg4ZTQ3LCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGU4YjgsIDB4ZTVhYiwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5OWQ0 LCAweGZmZmQsIDB4OTA5NywgMHhlOGI2LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHhmZmZkLCAweDk3YTMsIDB4OTNlZiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4ODk0YSwgMHhmZmZkLCAweDkwZTEsIDB4OGViNCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OTViNSwgMHhmZmZkLCAweDg5NWYsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4OTdlYiwgMHg5NzhiLAorICAgIDB4ZmZmZCwgMHhlOGI5LCAweGZmZmQs IDB4OTM2NCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OGVmOSwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlOGJhLCAweGZmZmQsIDB4ZThiYiwgMHg5MDZiLAorICAg IDB4ZThiYywgMHhmZmZkLCAweDk3ZWMsIDB4ZmZmZCwgMHhmZmZkLCAweGU4YjcsIDB4ZThiZSwg MHhlOGMwLAorICAgIDB4ZmZmZCwgMHhlOGJmLCAweGZmZmQsIDB4ZThiZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZThjMSwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhlOGMyLCAweGZmZmQsIDB4ZmZmZCwg MHg5MTlhLCAweGZmZmQsIDB4ODllMCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhlOGMzLCAweGZmZmQsIDB4ZmZmZCwgMHg5NmI2LAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweGU4YzQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4ZThjNSwgMHhmZmZkLCAweDk4NDksIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4OWU1MCwgMHhlOGM2LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGU4YzcsIDB4ZThjOCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU4Y2MsIDB4ZmZm ZCwgMHhlOGM5LCAweGZmZmQsIDB4ZThjYSwgMHhmZmZkLAorICAgIDB4ZThjYiwgMHhlOGNkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweDkwYzIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTZmNSwgMHhmZmZk LAorICAgIDB4ZmZmZCwgMHg5MGMzLCAweGZmZmQsIDB4ZmZmZCwgMHhlOGNlLCAweGZmZmQsIDB4 OTRmMSwgMHhmZmZkLAorICAgIDB4ZThjZiwgMHhlYTcyLCAweDk2Y2EsIDB4ZmZmZCwgMHhlOGQw LCAweGZmZmQsIDB4ZThkMSwgMHhmZmZkLAorICAgIDB4ZThkMiwgMHg4YTc2LCAweGZmZmQsIDB4 ZThkNCwgMHhmZmZkLCAweDkwNzgsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhlOGQ1 LCAweGZmZmQsIDB4ZmZmZCwgMHg4YzQzLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHhlOGQ2LCAweGU4ZGEsIDB4ZmZmZCwgMHhlOGQ4LCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHhlOGQ5LCAweGZmZmQsIDB4ZmZmZCwgMHg4YTkzLCAweGU4ZDcs IDB4ZThkYiwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZThkYywgMHhm ZmZkLCAweDg4YzYsIDB4ZmZmZCwgMHhlOGRkLAorICAgIDB4ZThkZSwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OGZlMiwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlOGRmLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4OGI2NiwgMHhmZmZkLCAweGZmZmQsIDB4ZThlMiwgMHhmZmZkLCAweGZmZmQsIDB4ZThlMSwg MHhmZmZkLAorICAgIDB4ZThlMCwgMHhmZmZkLCAweGZmZmQsIDB4ZTY5MSwgMHhmZmZkLCAweDk1 ZGEsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZThlMywg MHhlOGU0LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZThlNSwgMHhmZmZkLCAweGZmZmQsIDB4ZThlNiwgMHhmZmZkLAor ICAgIDB4ZThlNywgMHhmZmZkLCAweGZmZmQsIDB4ZThlOCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGFkOCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhlOGU5LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU4ZWEsIDB4OTQ0MiwgMHhmZmZk LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU4ZWMsIDB4ODliOSwgMHhmZmZkLCAweGU4ZWYsIDB4 ZThlZSwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ODk0MywgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHg4YmJmLAorICAgIDB4ZmZmZCwgMHg5NWM1LCAweDkyYjgsIDB4 OGRhMCwgMHhmZmZkLCAweDhkODAsIDB4OGY4NywgMHhmZmZkLAorICAgIDB4OTA3YiwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhlOGYxLCAweGZmZmQsIDB4ZmZmZCwgMHhlOGYwLAorICAgIDB4 OTc2MSwgMHg4YWU2LCAweDk0ZDAsIDB4OTNkYSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5 MDljLAorICAgIDB4OTdjYywgMHhmZmZkLCAweDhjN2EsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhlOGY0LCAweGZmZmQsIDB4ZmZmZCwgMHhl OGYzLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHg5NjZhLCAweDkzYWEsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4OTZmLCAweGZmZmQsIDB4ZmZmZCwgMHhlOGY1LAorICAg IDB4ZThmMiwgMHhmZmZkLCAweGZmZmQsIDB4OTU3MCwgMHg5NzhhLCAweGU4ZjYsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZThmNywgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZThmOSwg MHg5MWU4LCAweDhhN2EsIDB4OGE3YiwgMHhlOGY4LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHg4YWU3LCAweDhjYjAsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OGFlOCwg MHhmZmZkLCAweGZmZmQsIDB4OTM1ZSwgMHhmZmZkLCAweGZmZmQsIDB4OTdkZSwgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHg4Y2RhLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZThmYSwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhlOGZiLAorICAgIDB4ZThmYywgMHhlOTQwLCAweGZmZmQsIDB4ZTk0 MiwgMHhlOTQxLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 OTU5NywgMHhmZmZkLCAweGU5NDMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhl OTQ0LAorICAgIDB4ZmZmZCwgMHhlOTQ1LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZTk0NiwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZTk0OCwgMHhlOTQ3LCAweGZmZmQsIDB4ZTk0OSwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTRmMiwgMHhlM2NhLCAweGZm ZmQsIDB4ZmZmZCwgMHg5MDQ4LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDhiNTEsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhlOTRhLCAweGZm ZmQsIDB4ZTk0YiwgMHhmZmZkLCAweDk5YWEsIDB4OWY1YSwgMHg5NGQxLAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweDg4ZjksIDB4ZmZmZCwgMHg4OGI5LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4ZTk0LCAweDk2NGYsIDB4OGZm YywgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTk0YywgMHhmZmZkLCAw eDk2ZGQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhlOTRkLCAweDk3N2IsIDB4ZmZm ZCwgMHg4OTYxLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OGU2MCwgMHhmZmZkLCAw eGU5NGUsIDB4ODllYywgMHhlOTRmLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZTk1 MCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU5NTIsIDB4ZTk1MywgMHhmZmZk LAorICAgIDB4ZTk1NSwgMHhlOTUxLCAweGZmZmQsIDB4ZmZmZCwgMHhlOTU0LCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4OGFkOSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlOTU2 LCAweGZmZmQsIDB4ZTk1NywgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU5NTgsIDB4ZTk1OSwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGU5NWEsIDB4ZmZmZCwgMHhmZmZkLCAweGU5NWMsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHhlOTViLCAweGZmZmQsIDB4ZTk1ZSwgMHhlOTYxLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZTk1ZCwgMHhlOTVmLCAweGU5NjAsIDB4ZmZmZCwgMHhm ZmZkLCAweGU5NjIsIDB4ZmZmZCwgMHg4YmMwLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGVm MSwgMHhlOTYzLAorICAgIDB4ZTk2NCwgMHg4ZDgxLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGU5NjUsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OGE1ZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHg5NDZlLCAweGU5NjYsIDB4ZTk2NywgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4OTI3OSwgMHg5M2U5LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlOTY4LCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg5NDlkLCAweGZmZmQsIDB4ZmZmZCwgMHg5MWNh LCAweDg5NzcsIDB4OGJlYywgMHhmZmZkLAorICAgIDB4OGJlZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OTI5MywgMHhlOTZk LCAweDhiZWUsIDB4ZmZmZCwgMHhmZmZkLCAweDg5ZWQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 ZTk2YywgMHhmZmZkLCAweGZmZmQsIDB4ZTk2YSwgMHhmZmZkLCAweGU5NmIsIDB4ZmZmZCwgMHhl OTY5LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU5NzcsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGU5NmUsIDB4ZTk2ZiwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhlOTcwLCAweGU5NzEs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZTk3MywgMHhm ZmZkLCAweGZmZmQsIDB4ZTk3MiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4Zjc4LAorICAg IDB4ZmZmZCwgMHhlOTc0LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU5NzYsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4OGI1MiwgMHhlOTc1LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDkxOWIsIDB4OGNiMSwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhlOTc4LCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4OTFjYiwgMHhmZmZkLCAweGZmZmQsIDB4ZTk3OSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4OTNhYiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhlOTdhLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTk4MCwgMHhmZmZkLAorICAgIDB4ZTk3ZCwgMHhmZmZkLCAw eGU5N2MsIDB4ZTk3ZSwgMHhmZmZkLCAweGU5N2IsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU5ODIsIDB4ZmZmZCwgMHhmZmZk LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU5ODEsIDB4 ZmZmZCwgMHhlOTg0LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDhiYzEsIDB4ZTk4MywgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhlOTg1LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU5ODYsIDB4 ZmZmZCwgMHhlOTg4LCAweGU5ODcsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhlOTg5 LCAweGU5OGIsIDB4ZTk4YSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OGQ5YywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGU5OGMsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZTk4ZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OGE1Yiwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlOThlLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4ZTk4ZiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5MDkxLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhlOTkwLAorICAgIDB4ZmZmZCwgMHhlOTkxLCAweGZmZmQsIDB4ZTk5 MiwgMHhlOTkzLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OGQ4MiwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTk5NCwgMHhlOTk1LAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGU5OTYsIDB4ZTk5NywgMHhmZmZkLCAweGZmZmQsIDB4ZTk5OCwgMHhmZmZk LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDk0YWYsIDB4ZTk5YSwgMHhmZmZkLCAweDk1NDUsIDB4 ZTk5YiwgMHhlOTk5LAorICAgIDB4ZmZmZCwgMHhlOTlkLCAweGZmZmQsIDB4ZmZmZCwgMHhlOTlj LCAweGZmZmQsIDB4ZmZmZCwgMHhlOTllLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZTk5ZiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTlhMCwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZTlhMSwgMHhmZmZkLCAweGU5YTIsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlOWEzLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU5YTQs IDB4ZTlhNSwgMHhmZmZkLCAweGU5YTYsIDB4ZmZmZCwgMHhlOWE3LAorICAgIDB4ZTlhOCwgMHhl OWE5LCAweGU5YWEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTlhYiwgMHhlOWFjLAorICAg IDB4ZmZmZCwgMHg5ZjU0LCAweGU5YWQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTJmNiwgMHg4YjUzLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg4YTQwLCAweDhkYjAsIDB4ZTlhZiwg MHhlOWFlLCAweDk2YTMsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU5YjEsIDB4ZTliMiwgMHhlOWIwLAorICAgIDB4ZmZmZCwg MHhlOWIzLCAweGZmZmQsIDB4ZmZmZCwgMHg5NjgyLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4ZTliNCwgMHhmZmZkLCAweDhiOWIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5ODQ0LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhlOWI1LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTliNywgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ODhiYywgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhlOWI4LCAweDk1YTksIDB4 ZTliNiwgMHhmZmZkLCAweGZmZmQsIDB4ZTliOSwgMHhlOWJhLAorICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlOWJiLAorICAgIDB4 ZTliYywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4ZTliZCwgMHhmZmZkLCAweDk2OGUsIDB4OGU0YywgMHhmZmZkLCAweDhkZjgs IDB4OTE0ZSwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhl OWJlLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhlOWMxLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZTliZiwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTljMiwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHg4Y2VmLCAweGU5YzAsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhlOWMzLAorICAgIDB4ZmZmZCwgMHhlOWM0LCAweGU5YzUsIDB4ZmZmZCwgMHhlOWM5LCAweGZm ZmQsIDB4OGU0OSwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTFlMiwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhlOWNhLCAweGU5 YzcsIDB4ZTljNiwgMHhlOWM4LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OGM3ZSwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4ZTljZSwgMHhlOWNkLCAweGU5Y2MsIDB4ZmZmZCwgMHhmZmZkLCAweDg4YjEsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhlOWQ4LCAweGZmZmQsIDB4ZTlkNCwgMHhmZmZkLAorICAgIDB4ZTlkNSwgMHhlOWQxLCAw eGU5ZDcsIDB4ZmZmZCwgMHhlOWQzLCAweDhhODIsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OTg2 YiwgMHhmZmZkLCAweGU5ZDYsIDB4ZTlkMiwgMHhlOWQwLCAweGU5Y2YsIDB4ZmZmZCwgMHhmZmZk LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTlkYSwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhlOWRkLCAweGZmZmQsIDB4ZmZmZCwgMHhlOWRj LCAweGU5ZGIsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweDk1NjgsIDB4ZTlkOSwgMHg4OGYxLAorICAgIDB4ZTlkZSwgMHhmZmZk LCAweGU5ZTAsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHg4YThmLCAweGU5Y2IsIDB4ODk1NiwgMHhmZmZkLCAweGZmZmQsIDB4ZTllMiwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZTllMSwgMHhlOWRmLAorICAgIDB4OTI0YywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDk2OTAs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5N2Q4LAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGU5ZTMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4ZTllNCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhlOWU1LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZTllNiwgMHhmZmZkLAorICAgIDB4ZTllNywgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweDkyYjksIDB4ZmZmZCwgMHhlOWU4LAorICAgIDB4ZmZmZCwgMHg5NGI1LCAweGZmZmQs IDB4ZTllZCwgMHhlOWU5LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZTllYSwgMHhm ZmZkLCAweGZmZmQsIDB4OTY1MCwgMHg5NmMyLCAweGZmZmQsIDB4OTNjZSwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTllZSwgMHhmZmZkLCAweGZm ZmQsIDB4ZTllZiwgMHg5M2JjLAorICAgIDB4ZTllYywgMHhlOWViLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ODlhOCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGU5 ZjcsIDB4ZmZmZCwgMHhmZmZkLCAweGU5ZjYsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ODk5NSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlOWY0LAor ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTlmMywgMHhmZmZkLCAweGZmZmQsIDB4ZTlm MSwgMHhmZmZkLAorICAgIDB4OGE5YiwgMHhmZmZkLCAweGU5ZjAsIDB4OGViMCwgMHg4OWE3LCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4OGQ4MywgMHhmZmZkLCAweGZmZmQsIDB4ZTlmYSwgMHhlOWY5LAorICAgIDB4ZmZm ZCwgMHhlOWY4LCAweGZmZmQsIDB4ZmZmZCwgMHhlOWY1LCAweGZmZmQsIDB4ZTlmYiwgMHhmZmZk LAorICAgIDB4ZTlmYywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4ZWE0NCwgMHhlYTQzLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhlYTQ1LCAweGZmZmQsIDB4 ZmZmZCwgMHg4OTRjLCAweGVhNDAsIDB4ZWE0MSwgMHhmZmZkLAorICAgIDB4OGQ5NCwgMHg5NmI3 LCAweGZmZmQsIDB4ZmZmZCwgMHhlYTQyLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5NjUxLCAweGZmZmQsIDB4ZmZmZCwgMHhl YTRhLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGVhNDYsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGVhNGIsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlYTQ4LAorICAgIDB4ZmZmZCwgMHhl YTQ3LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4YzdiLAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGVhNGMsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhlYTRkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhlYTRlLCAweGZm ZmQsIDB4ZWE0OSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlOWYyLAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweGVhNGYsIDB4ZmZmZCwgMHg5MmRmLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4ZWE1MywgMHhmZmZkLCAweGVhNTQsIDB4ZWE1MiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhlYTUxLCAweGVhNTcsIDB4ZmZmZCwgMHhlYTUwLCAw eGZmZmQsIDB4ZWE1NSwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlYTU2LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZWE1OSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHhlYTU4LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZWE1YiwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGVhNWMsIDB4ZmZmZCwgMHhlYTVkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDk4NjgsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZWE1YSwgMHg5MWU5 LCAweDhkZWIsIDB4ZmZmZCwgMHhmZmZkLCAweGVhNWUsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGVhNWYs IDB4ZWE2MCwgMHhmZmZkLCAweGZmZmQsIDB4ZWE2MSwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGVhNjIsIDB4ZmZmZCwgMHhmZmZk LAorICAgIDB4OGNiMiwgMHhlYTYzLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGVhNjQsIDB4 ZmZmZCwgMHg4ZWFkLAorICAgIDB4ZmZmZCwgMHhlYTY1LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZWE2NiwgMHhmZmZkLCAweGZmZmQsIDB4 ZWE2NywgMHhlYTY4LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhlYTZi LCAweGVhNjksIDB4OTg1YiwgMHhmZmZkLCAweGVhNmEsIDB4ZmZmZCwgMHg5N2VkLAorICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGVhNmMsIDB4ZmZmZCwgMHg5 N2Q5LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGVhNmQs IDB4OTQ5ZSwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhlYTZlLCAweGVhNzAsIDB4ZmZmZCwgMHhm ZmZkLCAweGVhNzEsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZWE2ZiwgMHg4 ZDhkLCAweDk2Y2IsIDB4OTY4MywgMHg5YmY1LCAweGZmZmQsIDB4OWY4MCwgMHg5NjliLAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4OWE5LCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlYTczLCAweDhi NmYsIDB4ZWE3NCwgMHhlYTc1LAorICAgIDB4ZWE3NiwgMHhmZmZkLCAweDhkOTUsIDB4ZmZmZCwg MHhlYTc3LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZTBkMiwgMHg5NmQ5LCAweGZm ZmQsIDB4OTFlMSwgMHhlYTc4LCAweGVhN2EsIDB4ZWE3OSwgMHhmZmZkLAorICAgIDB4ZWE3Yiwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGVhN2MsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4ZWE3ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhlYTdlLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlYTgwLCAw eGZmZmQsIDB4ZWE4MSwgMHhlYTgyLAorICAgIDB4ZmZmZCwgMHhlYTgzLCAweGZmZmQsIDB4ZWE4 NCwgMHhlYTg1LCAweGVhODYsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlYTg3LAorICAgIDB4ZWE4 OCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTM0MywgMHhmZmZk LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGNkYiwgMHhmZmZkLCAweGVhOGEsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4OTE2YywgMHhlYThiLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhlYThjLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTU0MCwgMHhmZmZkLCAweGZmZmQs IDB4ZWE4ZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGVhOGUs IDB4ZTI1NiwgMHhmZmZkLCAweGZmZmQsIDB4ZTZkOCwgMHhlOGViLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGVhOGYsIDB4ZmZmZCwgMHhlYTkwLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhlYTkyLAorICAgIDB4ZWE5MywgMHhlYTk0LCAweDk3ZWUsIDB4ZWE5MSwgMHhmZmZkLCAweGZm ZmQsIDB4ZWE5NSwgMHhlYTk2LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGVhOTgsIDB4ZmZmZCwg MHhlYTk3LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGVh OWEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZWE5YiwgMHhlYTk5LAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eDk3YjQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGVhOWMsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhlYTlkLCAweGUyNzMsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZWE5 ZSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAw Cit9OworCisjZW5kaWYgLyogS0FOSkkgKi8KKworLyogQmxhaC10by1Vbmljb2RlIHRyYW5zbGF0 aW9uIHRhYmxlcyAqLworCitzdHJ1Y3QgeF90b191bmljb2RlIHVfdHJhbnNwYXJlbnQgPSB7Cisg ICAgMjU2LCBYMlVfQ1hHLCAwLCAwLCAiVHJhbnNwYXJlbnQiLCAidHJhbnNwYXJlbnQiLCAwLCAi IiwKKyAgICAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAor ICAgIDB4MDgsIDB4MDksIDB4MEEsIDB4MEIsIDB4MEMsIDB4MEQsIDB4MEUsIDB4MEYsCisgICAg MHgxMCwgMHgxMSwgMHgxMiwgMHgxMywgMHgxNCwgMHgxNSwgMHgxNiwgMHgxNywKKyAgICAweDE4 LCAweDE5LCAweDFBLCAweDFCLCAweDFDLCAweDFELCAweDFFLCAweDFGLAorICAgIDB4MjAsIDB4 MjEsIDB4MjIsIDB4MjMsIDB4MjQsIDB4MjUsIDB4MjYsIDB4MjcsCisgICAgMHgyOCwgMHgyOSwg MHgyQSwgMHgyQiwgMHgyQywgMHgyRCwgMHgyRSwgMHgyRiwKKyAgICAweDMwLCAweDMxLCAweDMy LCAweDMzLCAweDM0LCAweDM1LCAweDM2LCAweDM3LAorICAgIDB4MzgsIDB4MzksIDB4M0EsIDB4 M0IsIDB4M0MsIDB4M0QsIDB4M0UsIDB4M0YsCisgICAgMHg0MCwgMHg0MSwgMHg0MiwgMHg0Mywg MHg0NCwgMHg0NSwgMHg0NiwgMHg0NywKKyAgICAweDQ4LCAweDQ5LCAweDRBLCAweDRCLCAweDRD LCAweDRELCAweDRFLCAweDRGLAorICAgIDB4NTAsIDB4NTEsIDB4NTIsIDB4NTMsIDB4NTQsIDB4 NTUsIDB4NTYsIDB4NTcsCisgICAgMHg1OCwgMHg1OSwgMHg1QSwgMHg1QiwgMHg1QywgMHg1RCwg MHg1RSwgMHg1RiwKKyAgICAweDYwLCAweDYxLCAweDYyLCAweDYzLCAweDY0LCAweDY1LCAweDY2 LCAweDY3LAorICAgIDB4NjgsIDB4NjksIDB4NkEsIDB4NkIsIDB4NkMsIDB4NkQsIDB4NkUsIDB4 NkYsCisgICAgMHg3MCwgMHg3MSwgMHg3MiwgMHg3MywgMHg3NCwgMHg3NSwgMHg3NiwgMHg3NywK KyAgICAweDc4LCAweDc5LCAweDdBLCAweDdCLCAweDdDLCAweDdELCAweDdFLCAweDdGLAorICAg IDB4ODAsIDB4ODEsIDB4ODIsIDB4ODMsIDB4ODQsIDB4ODUsIDB4ODYsIDB4ODcsCisgICAgMHg4 OCwgMHg4OSwgMHg4QSwgMHg4QiwgMHg4QywgMHg4RCwgMHg4RSwgMHg4RiwKKyAgICAweDkwLCAw eDkxLCAweDkyLCAweDkzLCAweDk0LCAweDk1LCAweDk2LCAweDk3LAorICAgIDB4OTgsIDB4OTks IDB4OUEsIDB4OUIsIDB4OUMsIDB4OUQsIDB4OUUsIDB4OUYsCisgICAgMHhBMCwgMHhBMSwgMHhB MiwgMHhBMywgMHhBNCwgMHhBNSwgMHhBNiwgMHhBNywKKyAgICAweEE4LCAweEE5LCAweEFBLCAw eEFCLCAweEFDLCAweEFELCAweEFFLCAweEFGLAorICAgIDB4QjAsIDB4QjEsIDB4QjIsIDB4QjMs IDB4QjQsIDB4QjUsIDB4QjYsIDB4QjcsCisgICAgMHhCOCwgMHhCOSwgMHhCQSwgMHhCQiwgMHhC QywgMHhCRCwgMHhCRSwgMHhCRiwKKyAgICAweEMwLCAweEMxLCAweEMyLCAweEMzLCAweEM0LCAw eEM1LCAweEM2LCAweEM3LAorICAgIDB4QzgsIDB4QzksIDB4Q0EsIDB4Q0IsIDB4Q0MsIDB4Q0Qs IDB4Q0UsIDB4Q0YsCisgICAgMHhEMCwgMHhEMSwgMHhEMiwgMHhEMywgMHhENCwgMHhENSwgMHhE NiwgMHhENywKKyAgICAweEQ4LCAweEQ5LCAweERBLCAweERCLCAweERDLCAweERELCAweERFLCAw eERGLAorICAgIDB4RTAsIDB4RTEsIDB4RTIsIDB4RTMsIDB4RTQsIDB4RTUsIDB4RTYsIDB4RTcs CisgICAgMHhFOCwgMHhFOSwgMHhFQSwgMHhFQiwgMHhFQywgMHhFRCwgMHhFRSwgMHhFRiwKKyAg ICAweEYwLCAweEYxLCAweEYyLCAweEYzLCAweEY0LCAweEY1LCAweEY2LCAweEY3LAorICAgIDB4 RjgsIDB4RjksIDB4RkEsIDB4RkIsIDB4RkMsIDB4RkQsIDB4RkUsIDB4RkYKK307CisKKy8qIDct Yml0IGNoYXJhY3RlciBzZXRzOiBJU08gNjQ2LCBERUMgTlJDcywgU2hvcnQgS09JLCBhbmQgSGVi cmV3LTcgKi8KKworc3RydWN0IHhfdG9fdW5pY29kZSB1X2FzY2lpID0geworICAgIDk0LCAzMywg WDJVX0lTT3xYMlVfU1RELCBBTF9ST01BTiwgIlVTIEFTQ0lJIiwgImFzY2lpIiwgNiwgIkIiLAor ICAgICAgICAgICAgMHgwMDIxLCAweDAwMjIsIDB4MDAyMywgMHgwMDI0LCAweDAwMjUsIDB4MDAy NiwgMHgwMDI3LAorICAgIDB4MDAyOCwgMHgwMDI5LCAweDAwMmEsIDB4MDAyYiwgMHgwMDJjLCAw eDAwMmQsIDB4MDAyZSwgMHgwMDJmLAorICAgIDB4MDAzMCwgMHgwMDMxLCAweDAwMzIsIDB4MDAz MywgMHgwMDM0LCAweDAwMzUsIDB4MDAzNiwgMHgwMDM3LAorICAgIDB4MDAzOCwgMHgwMDM5LCAw eDAwM2EsIDB4MDAzYiwgMHgwMDNjLCAweDAwM2QsIDB4MDAzZSwgMHgwMDNmLAorICAgIDB4MDA0 MCwgMHgwMDQxLCAweDAwNDIsIDB4MDA0MywgMHgwMDQ0LCAweDAwNDUsIDB4MDA0NiwgMHgwMDQ3 LAorICAgIDB4MDA0OCwgMHgwMDQ5LCAweDAwNGEsIDB4MDA0YiwgMHgwMDRjLCAweDAwNGQsIDB4 MDA0ZSwgMHgwMDRmLAorICAgIDB4MDA1MCwgMHgwMDUxLCAweDAwNTIsIDB4MDA1MywgMHgwMDU0 LCAweDAwNTUsIDB4MDA1NiwgMHgwMDU3LAorICAgIDB4MDA1OCwgMHgwMDU5LCAweDAwNWEsIDB4 MDA1YiwgMHgwMDVjLCAweDAwNWQsIDB4MDA1ZSwgMHgwMDVmLAorICAgIDB4MDA2MCwgMHgwMDYx LCAweDAwNjIsIDB4MDA2MywgMHgwMDY0LCAweDAwNjUsIDB4MDA2NiwgMHgwMDY3LAorICAgIDB4 MDA2OCwgMHgwMDY5LCAweDAwNmEsIDB4MDA2YiwgMHgwMDZjLCAweDAwNmQsIDB4MDA2ZSwgMHgw MDZmLAorICAgIDB4MDA3MCwgMHgwMDcxLCAweDAwNzIsIDB4MDA3MywgMHgwMDc0LCAweDAwNzUs IDB4MDA3NiwgMHgwMDc3LAorICAgIDB4MDA3OCwgMHgwMDc5LCAweDAwN2EsIDB4MDA3YiwgMHgw MDdjLCAweDAwN2QsIDB4MDA3ZQorfTsKKworc3RydWN0IHhfdG9fdW5pY29kZSB1X2JyaXRpc2gg PSB7CisgICAgOTQsIDMzLCBYMlVfSVNPfFgyVV9TVEQsIEFMX1JPTUFOLCAiQnJpdGlzaCBJU08g NjQ2IiwgImJyaXRpc2giLCAxLCAiQSIsCisgICAgICAgICAgICAweDAwMjEsIDB4MDAyMiwgMHgw MGEzLCAweDAwMjQsIDB4MDAyNSwgMHgwMDI2LCAweDAwMjcsCisgICAgMHgwMDI4LCAweDAwMjks IDB4MDAyYSwgMHgwMDJiLCAweDAwMmMsIDB4MDAyZCwgMHgwMDJlLCAweDAwMmYsCisgICAgMHgw MDMwLCAweDAwMzEsIDB4MDAzMiwgMHgwMDMzLCAweDAwMzQsIDB4MDAzNSwgMHgwMDM2LCAweDAw MzcsCisgICAgMHgwMDM4LCAweDAwMzksIDB4MDAzYSwgMHgwMDNiLCAweDAwM2MsIDB4MDAzZCwg MHgwMDNlLCAweDAwM2YsCisgICAgMHgwMDQwLCAweDAwNDEsIDB4MDA0MiwgMHgwMDQzLCAweDAw NDQsIDB4MDA0NSwgMHgwMDQ2LCAweDAwNDcsCisgICAgMHgwMDQ4LCAweDAwNDksIDB4MDA0YSwg MHgwMDRiLCAweDAwNGMsIDB4MDA0ZCwgMHgwMDRlLCAweDAwNGYsCisgICAgMHgwMDUwLCAweDAw NTEsIDB4MDA1MiwgMHgwMDUzLCAweDAwNTQsIDB4MDA1NSwgMHgwMDU2LCAweDAwNTcsCisgICAg MHgwMDU4LCAweDAwNTksIDB4MDA1YSwgMHgwMDViLCAweDAwNWMsIDB4MDA1ZCwgMHgwMDVlLCAw eDAwNWYsCisgICAgMHgwMDYwLCAweDAwNjEsIDB4MDA2MiwgMHgwMDYzLCAweDAwNjQsIDB4MDA2 NSwgMHgwMDY2LCAweDAwNjcsCisgICAgMHgwMDY4LCAweDAwNjksIDB4MDA2YSwgMHgwMDZiLCAw eDAwNmMsIDB4MDA2ZCwgMHgwMDZlLCAweDAwNmYsCisgICAgMHgwMDcwLCAweDAwNzEsIDB4MDA3 MiwgMHgwMDczLCAweDAwNzQsIDB4MDA3NSwgMHgwMDc2LCAweDAwNzcsCisgICAgMHgwMDc4LCAw eDAwNzksIDB4MDA3YSwgMHgwMDdiLCAweDAwN2MsIDB4MDA3ZCwgMHgwMDdlCit9OworCitzdHJ1 Y3QgeF90b191bmljb2RlIHVfZHV0Y2ggPSB7CisgICAgOTQsIDMzLCBYMlVfREVDfFgyVV9TVEQs IEFMX1JPTUFOLCAiRHV0Y2ggTlJDIiwgImR1dGNoIiwgMCwgIjQiLAorICAgICAgICAgICAgMHgw MDIxLCAweDAwMjIsIDB4MDBhMywgMHgwMDI0LCAweDAwMjUsIDB4MDAyNiwgMHgwMDI3LAorICAg IDB4MDAyOCwgMHgwMDI5LCAweDAwMmEsIDB4MDAyYiwgMHgwMDJjLCAweDAwMmQsIDB4MDAyZSwg MHgwMDJmLAorICAgIDB4MDAzMCwgMHgwMDMxLCAweDAwMzIsIDB4MDAzMywgMHgwMDM0LCAweDAw MzUsIDB4MDAzNiwgMHgwMDM3LAorICAgIDB4MDAzOCwgMHgwMDM5LCAweDAwM2EsIDB4MDAzYiwg MHgwMDNjLCAweDAwM2QsIDB4MDAzZSwgMHgwMDNmLAorICAgIDB4MDBiZSwgMHgwMDQxLCAweDAw NDIsIDB4MDA0MywgMHgwMDQ0LCAweDAwNDUsIDB4MDA0NiwgMHgwMDQ3LAorICAgIDB4MDA0OCwg MHgwMDQ5LCAweDAwNGEsIDB4MDA0YiwgMHgwMDRjLCAweDAwNGQsIDB4MDA0ZSwgMHgwMDRmLAor ICAgIDB4MDA1MCwgMHgwMDUxLCAweDAwNTIsIDB4MDA1MywgMHgwMDU0LCAweDAwNTUsIDB4MDA1 NiwgMHgwMDU3LAorICAgIDB4MDA1OCwgMHgwMDU5LCAweDAwNWEsIDB4MDBmZiwgMHgwMGJkLCAw eDAwN2MsIDB4MDA1ZSwgMHgwMDVmLAorICAgIDB4MDA2MCwgMHgwMDYxLCAweDAwNjIsIDB4MDA2 MywgMHgwMDY0LCAweDAwNjUsIDB4MDA2NiwgMHgwMDY3LAorICAgIDB4MDA2OCwgMHgwMDY5LCAw eDAwNmEsIDB4MDA2YiwgMHgwMDZjLCAweDAwNmQsIDB4MDA2ZSwgMHgwMDZmLAorICAgIDB4MDA3 MCwgMHgwMDcxLCAweDAwNzIsIDB4MDA3MywgMHgwMDc0LCAweDAwNzUsIDB4MDA3NiwgMHgwMDc3 LAorICAgIDB4MDA3OCwgMHgwMDc5LCAweDAwN2EsIDB4MDBhOCwgMHgwMGE0LCAweDAwYmMsIDB4 MDAyNworfTsKKworc3RydWN0IHhfdG9fdW5pY29kZSB1X2Zpbm5pc2ggPSB7CisgICAgOTQsIDMz LCBYMlVfREVDfFgyVV9TVEQsIEFMX1JPTUFOLCAiRmlubmlzaCBOUkMiLCAiZmlubmlzaCIsIDAs ICI1QyIsCisgICAgICAgICAgICAweDAwMjEsIDB4MDAyMiwgMHgwMDIzLCAweDAwMjQsIDB4MDAy NSwgMHgwMDI2LCAweDAwMjcsCisgICAgMHgwMDI4LCAweDAwMjksIDB4MDAyYSwgMHgwMDJiLCAw eDAwMmMsIDB4MDAyZCwgMHgwMDJlLCAweDAwMmYsCisgICAgMHgwMDMwLCAweDAwMzEsIDB4MDAz MiwgMHgwMDMzLCAweDAwMzQsIDB4MDAzNSwgMHgwMDM2LCAweDAwMzcsCisgICAgMHgwMDM4LCAw eDAwMzksIDB4MDAzYSwgMHgwMDNiLCAweDAwM2MsIDB4MDAzZCwgMHgwMDNlLCAweDAwM2YsCisg ICAgMHgwMDQwLCAweDAwNDEsIDB4MDA0MiwgMHgwMDQzLCAweDAwNDQsIDB4MDA0NSwgMHgwMDQ2 LCAweDAwNDcsCisgICAgMHgwMDQ4LCAweDAwNDksIDB4MDA0YSwgMHgwMDRiLCAweDAwNGMsIDB4 MDA0ZCwgMHgwMDRlLCAweDAwNGYsCisgICAgMHgwMDUwLCAweDAwNTEsIDB4MDA1MiwgMHgwMDUz LCAweDAwNTQsIDB4MDA1NSwgMHgwMDU2LCAweDAwNTcsCisgICAgMHgwMDU4LCAweDAwNTksIDB4 MDA1YSwgMHgwMGM0LCAweDAwZDYsIDB4MDBjNSwgMHgwMGRjLCAweDAwNWYsCisgICAgMHgwMGU5 LCAweDAwNjEsIDB4MDA2MiwgMHgwMDYzLCAweDAwNjQsIDB4MDA2NSwgMHgwMDY2LCAweDAwNjcs CisgICAgMHgwMDY4LCAweDAwNjksIDB4MDA2YSwgMHgwMDZiLCAweDAwNmMsIDB4MDA2ZCwgMHgw MDZlLCAweDAwNmYsCisgICAgMHgwMDcwLCAweDAwNzEsIDB4MDA3MiwgMHgwMDczLCAweDAwNzQs IDB4MDA3NSwgMHgwMDc2LCAweDAwNzcsCisgICAgMHgwMDc4LCAweDAwNzksIDB4MDA3YSwgMHgw MGU0LCAweDAwZjYsIDB4MDBlNSwgMHgwMGZjCit9OworCitzdHJ1Y3QgeF90b191bmljb2RlIHVf ZnJlbmNoID0geworICAgIDk0LCAzMywgWDJVX0lTT3xYMlVfU1RELCBBTF9ST01BTiwgIkZyZW5j aCBJU08gNjQ2IiwgImZyZW5jaCIsIDAsICJmUiIsCisgICAgICAgICAgICAweDAwMjEsIDB4MDAy MiwgMHgwMGEzLCAweDAwMjQsIDB4MDAyNSwgMHgwMDI2LCAweDAwMjcsCisgICAgMHgwMDI4LCAw eDAwMjksIDB4MDAyYSwgMHgwMDJiLCAweDAwMmMsIDB4MDAyZCwgMHgwMDJlLCAweDAwMmYsCisg ICAgMHgwMDMwLCAweDAwMzEsIDB4MDAzMiwgMHgwMDMzLCAweDAwMzQsIDB4MDAzNSwgMHgwMDM2 LCAweDAwMzcsCisgICAgMHgwMDM4LCAweDAwMzksIDB4MDAzYSwgMHgwMDNiLCAweDAwM2MsIDB4 MDAzZCwgMHgwMDNlLCAweDAwM2YsCisgICAgMHgwMGUwLCAweDAwNDEsIDB4MDA0MiwgMHgwMDQz LCAweDAwNDQsIDB4MDA0NSwgMHgwMDQ2LCAweDAwNDcsCisgICAgMHgwMDQ4LCAweDAwNDksIDB4 MDA0YSwgMHgwMDRiLCAweDAwNGMsIDB4MDA0ZCwgMHgwMDRlLCAweDAwNGYsCisgICAgMHgwMDUw LCAweDAwNTEsIDB4MDA1MiwgMHgwMDUzLCAweDAwNTQsIDB4MDA1NSwgMHgwMDU2LCAweDAwNTcs CisgICAgMHgwMDU4LCAweDAwNTksIDB4MDA1YSwgMHgwMGIwLCAweDAwZTcsIDB4MDBhNywgMHgw MDVlLCAweDAwNWYsCisgICAgMHgwMDYwLCAweDAwNjEsIDB4MDA2MiwgMHgwMDYzLCAweDAwNjQs IDB4MDA2NSwgMHgwMDY2LCAweDAwNjcsCisgICAgMHgwMDY4LCAweDAwNjksIDB4MDA2YSwgMHgw MDZiLCAweDAwNmMsIDB4MDA2ZCwgMHgwMDZlLCAweDAwNmYsCisgICAgMHgwMDcwLCAweDAwNzEs IDB4MDA3MiwgMHgwMDczLCAweDAwNzQsIDB4MDA3NSwgMHgwMDc2LCAweDAwNzcsCisgICAgMHgw MDc4LCAweDAwNzksIDB4MDA3YSwgMHgwMGU5LCAweDAwZjksIDB4MDBlOCwgMHgwMGE4Cit9Owor CitzdHJ1Y3QgeF90b191bmljb2RlIHVfZnJfY2FuYWRpYW4gPSB7CisgOTQsMzMsWDJVX0RFQ3xY MlVfU1RELEFMX1JPTUFOLCJGcmVuY2ggQ2FuYWRpYW4gTlJDIiwiY2FuYWRpYW4tZnJlbmNoIiww LCI5USIsCisgICAgICAgICAgICAweDAwMjEsIDB4MDAyMiwgMHgwMDIzLCAweDAwMjQsIDB4MDAy NSwgMHgwMDI2LCAweDAwMjcsCisgICAgMHgwMDI4LCAweDAwMjksIDB4MDAyYSwgMHgwMDJiLCAw eDAwMmMsIDB4MDAyZCwgMHgwMDJlLCAweDAwMmYsCisgICAgMHgwMDMwLCAweDAwMzEsIDB4MDAz MiwgMHgwMDMzLCAweDAwMzQsIDB4MDAzNSwgMHgwMDM2LCAweDAwMzcsCisgICAgMHgwMDM4LCAw eDAwMzksIDB4MDAzYSwgMHgwMDNiLCAweDAwM2MsIDB4MDAzZCwgMHgwMDNlLCAweDAwM2YsCisg ICAgMHgwMGUwLCAweDAwNDEsIDB4MDA0MiwgMHgwMDQzLCAweDAwNDQsIDB4MDA0NSwgMHgwMDQ2 LCAweDAwNDcsCisgICAgMHgwMDQ4LCAweDAwNDksIDB4MDA0YSwgMHgwMDRiLCAweDAwNGMsIDB4 MDA0ZCwgMHgwMDRlLCAweDAwNGYsCisgICAgMHgwMDUwLCAweDAwNTEsIDB4MDA1MiwgMHgwMDUz LCAweDAwNTQsIDB4MDA1NSwgMHgwMDU2LCAweDAwNTcsCisgICAgMHgwMDU4LCAweDAwNTksIDB4 MDA1YSwgMHgwMGUyLCAweDAwZTcsIDB4MDBlYSwgMHgwMGVlLCAweDAwNWYsCisgICAgMHgwMGY0 LCAweDAwNjEsIDB4MDA2MiwgMHgwMDYzLCAweDAwNjQsIDB4MDA2NSwgMHgwMDY2LCAweDAwNjcs CisgICAgMHgwMDY4LCAweDAwNjksIDB4MDA2YSwgMHgwMDZiLCAweDAwNmMsIDB4MDA2ZCwgMHgw MDZlLCAweDAwNmYsCisgICAgMHgwMDcwLCAweDAwNzEsIDB4MDA3MiwgMHgwMDczLCAweDAwNzQs IDB4MDA3NSwgMHgwMDc2LCAweDAwNzcsCisgICAgMHgwMDc4LCAweDAwNzksIDB4MDA3YSwgMHgw MGU5LCAweDAwZjksIDB4MDBlOCwgMHgwMGZiCit9OworCitzdHJ1Y3QgeF90b191bmljb2RlIHVf Z2VybWFuID0geworICAgIDk0LCAzMywgWDJVX0lTT3xYMlVfU1RELCBBTF9ST01BTiwgIkdlcm1h biBJU08gNjQ2IiwgImdlcm1hbiIsIDIxLCAiSyIsCisgICAgICAgICAgICAweDAwMjEsIDB4MDAy MiwgMHgwMDIzLCAweDAwMjQsIDB4MDAyNSwgMHgwMDI2LCAweDAwMjcsCisgICAgMHgwMDI4LCAw eDAwMjksIDB4MDAyYSwgMHgwMDJiLCAweDAwMmMsIDB4MDAyZCwgMHgwMDJlLCAweDAwMmYsCisg ICAgMHgwMDMwLCAweDAwMzEsIDB4MDAzMiwgMHgwMDMzLCAweDAwMzQsIDB4MDAzNSwgMHgwMDM2 LCAweDAwMzcsCisgICAgMHgwMDM4LCAweDAwMzksIDB4MDAzYSwgMHgwMDNiLCAweDAwM2MsIDB4 MDAzZCwgMHgwMDNlLCAweDAwM2YsCisgICAgMHgwMGE3LCAweDAwNDEsIDB4MDA0MiwgMHgwMDQz LCAweDAwNDQsIDB4MDA0NSwgMHgwMDQ2LCAweDAwNDcsCisgICAgMHgwMDQ4LCAweDAwNDksIDB4 MDA0YSwgMHgwMDRiLCAweDAwNGMsIDB4MDA0ZCwgMHgwMDRlLCAweDAwNGYsCisgICAgMHgwMDUw LCAweDAwNTEsIDB4MDA1MiwgMHgwMDUzLCAweDAwNTQsIDB4MDA1NSwgMHgwMDU2LCAweDAwNTcs CisgICAgMHgwMDU4LCAweDAwNTksIDB4MDA1YSwgMHgwMGM0LCAweDAwZDYsIDB4MDBkYywgMHgw MDVlLCAweDAwNWYsCisgICAgMHgwMDYwLCAweDAwNjEsIDB4MDA2MiwgMHgwMDYzLCAweDAwNjQs IDB4MDA2NSwgMHgwMDY2LCAweDAwNjcsCisgICAgMHgwMDY4LCAweDAwNjksIDB4MDA2YSwgMHgw MDZiLCAweDAwNmMsIDB4MDA2ZCwgMHgwMDZlLCAweDAwNmYsCisgICAgMHgwMDcwLCAweDAwNzEs IDB4MDA3MiwgMHgwMDczLCAweDAwNzQsIDB4MDA3NSwgMHgwMDc2LCAweDAwNzcsCisgICAgMHgw MDc4LCAweDAwNzksIDB4MDA3YSwgMHgwMGU0LCAweDAwZjYsIDB4MDBmYywgMHgwMGRmCit9Owor CitzdHJ1Y3QgeF90b191bmljb2RlIHVfaHVuZ2FyaWFuID0geworICAgIDk0LCAzMywgWDJVX0lT T3xYMlVfU1RELCBBTF9ST01BTiwgIkh1bmdhcmlhbiBJU08gNjQ2IiwiaHVuZ2FyaWFuIiw4Niwi aSIsCisgICAgICAgICAgICAweDAwMjEsIDB4MDAyMiwgMHgwMDIzLCAweDAwYTQsIDB4MDAyNSwg MHgwMDI2LCAweDAwMjcsCisgICAgMHgwMDI4LCAweDAwMjksIDB4MDAyYSwgMHgwMDJiLCAweDAw MmMsIDB4MDAyZCwgMHgwMDJlLCAweDAwMmYsCisgICAgMHgwMDMwLCAweDAwMzEsIDB4MDAzMiwg MHgwMDMzLCAweDAwMzQsIDB4MDAzNSwgMHgwMDM2LCAweDAwMzcsCisgICAgMHgwMDM4LCAweDAw MzksIDB4MDAzYSwgMHgwMDNiLCAweDAwM2MsIDB4MDAzZCwgMHgwMDNlLCAweDAwM2YsCisgICAg MHgwMGMxLCAweDAwNDEsIDB4MDA0MiwgMHgwMDQzLCAweDAwNDQsIDB4MDA0NSwgMHgwMDQ2LCAw eDAwNDcsCisgICAgMHgwMDQ4LCAweDAwNDksIDB4MDA0YSwgMHgwMDRiLCAweDAwNGMsIDB4MDA0 ZCwgMHgwMDRlLCAweDAwNGYsCisgICAgMHgwMDUwLCAweDAwNTEsIDB4MDA1MiwgMHgwMDUzLCAw eDAwNTQsIDB4MDA1NSwgMHgwMDU2LCAweDAwNTcsCisgICAgMHgwMDU4LCAweDAwNTksIDB4MDA1 YSwgMHgwMGM5LCAweDAwZDYsIDB4MDBkYywgMHgwMDVlLCAweDAwNWYsCisgICAgMHgwMGUxLCAw eDAwNjEsIDB4MDA2MiwgMHgwMDYzLCAweDAwNjQsIDB4MDA2NSwgMHgwMDY2LCAweDAwNjcsCisg ICAgMHgwMDY4LCAweDAwNjksIDB4MDA2YSwgMHgwMDZiLCAweDAwNmMsIDB4MDA2ZCwgMHgwMDZl LCAweDAwNmYsCisgICAgMHgwMDcwLCAweDAwNzEsIDB4MDA3MiwgMHgwMDczLCAweDAwNzQsIDB4 MDA3NSwgMHgwMDc2LCAweDAwNzcsCisgICAgMHgwMDc4LCAweDAwNzksIDB4MDA3YSwgMHgwMGU5 LCAweDAwZjYsIDB4MDBmYywgMHgwMDIyLCAweDAyZGQKK307CisKK3N0cnVjdCB4X3RvX3VuaWNv ZGUgdV9pdGFsaWFuID0geworICAgIDk0LCAzMywgWDJVX0lTT3xYMlVfU1RELCBBTF9ST01BTiwg Ikl0YWxpYW4gSVNPIDY0NiIsICJpdGFsaWFuIiwgMTUsICJZIiwKKyAgICAgICAgICAgIDB4MDAy MSwgMHgwMDIyLCAweDAwYTMsIDB4MDAyNCwgMHgwMDI1LCAweDAwMjYsIDB4MDAyNywKKyAgICAw eDAwMjgsIDB4MDAyOSwgMHgwMDJhLCAweDAwMmIsIDB4MDAyYywgMHgwMDJkLCAweDAwMmUsIDB4 MDAyZiwKKyAgICAweDAwMzAsIDB4MDAzMSwgMHgwMDMyLCAweDAwMzMsIDB4MDAzNCwgMHgwMDM1 LCAweDAwMzYsIDB4MDAzNywKKyAgICAweDAwMzgsIDB4MDAzOSwgMHgwMDNhLCAweDAwM2IsIDB4 MDAzYywgMHgwMDNkLCAweDAwM2UsIDB4MDAzZiwKKyAgICAweDAwYTcsIDB4MDA0MSwgMHgwMDQy LCAweDAwNDMsIDB4MDA0NCwgMHgwMDQ1LCAweDAwNDYsIDB4MDA0NywKKyAgICAweDAwNDgsIDB4 MDA0OSwgMHgwMDRhLCAweDAwNGIsIDB4MDA0YywgMHgwMDRkLCAweDAwNGUsIDB4MDA0ZiwKKyAg ICAweDAwNTAsIDB4MDA1MSwgMHgwMDUyLCAweDAwNTMsIDB4MDA1NCwgMHgwMDU1LCAweDAwNTYs IDB4MDA1NywKKyAgICAweDAwNTgsIDB4MDA1OSwgMHgwMDVhLCAweDAwYjAsIDB4MDBlNywgMHgw MGU5LCAweDAwNWUsIDB4MDA1ZiwKKyAgICAweDAwZjksIDB4MDA2MSwgMHgwMDYyLCAweDAwNjMs IDB4MDA2NCwgMHgwMDY1LCAweDAwNjYsIDB4MDA2NywKKyAgICAweDAwNjgsIDB4MDA2OSwgMHgw MDZhLCAweDAwNmIsIDB4MDA2YywgMHgwMDZkLCAweDAwNmUsIDB4MDA2ZiwKKyAgICAweDAwNzAs IDB4MDA3MSwgMHgwMDcyLCAweDAwNzMsIDB4MDA3NCwgMHgwMDc1LCAweDAwNzYsIDB4MDA3NywK KyAgICAweDAwNzgsIDB4MDA3OSwgMHgwMDdhLCAweDAwZTAsIDB4MDBmMiwgMHgwMGU4LCAweDAw ZWMKK307CisKK3N0cnVjdCB4X3RvX3VuaWNvZGUgdV9pY2VsYW5kaWMgPSB7CisgICAgOTQsIDMz LCBYMlVfREVDfFgyVV9TVEQsIEFMX1JPTUFOLCAiSWNlbGFuZGljIE5SQyIsICJpY2VsYW5kaWMi LCAwLCBOVUxMLAorICAgICAgICAgICAgMHgwMDIxLCAweDAwMjIsIDB4MDAyMywgMHgwMDI0LCAw eDAwMjUsIDB4MDAyNiwgMHgwMDI3LAorICAgIDB4MDAyOCwgMHgwMDI5LCAweDAwMmEsIDB4MDAy YiwgMHgwMDJjLCAweDAwMmQsIDB4MDAyZSwgMHgwMDJmLAorICAgIDB4MDAzMCwgMHgwMDMxLCAw eDAwMzIsIDB4MDAzMywgMHgwMDM0LCAweDAwMzUsIDB4MDAzNiwgMHgwMDM3LAorICAgIDB4MDAz OCwgMHgwMDM5LCAweDAwM2EsIDB4MDAzYiwgMHgwMDNjLCAweDAwM2QsIDB4MDAzZSwgMHgwMDNm LAorICAgIDB4MDBkZSwgMHgwMDQxLCAweDAwNDIsIDB4MDA0MywgMHgwMDQ0LCAweDAwNDUsIDB4 MDA0NiwgMHgwMDQ3LAorICAgIDB4MDA0OCwgMHgwMDQ5LCAweDAwNGEsIDB4MDA0YiwgMHgwMDRj LCAweDAwNGQsIDB4MDA0ZSwgMHgwMDRmLAorICAgIDB4MDA1MCwgMHgwMDUxLCAweDAwNTIsIDB4 MDA1MywgMHgwMDU0LCAweDAwNTUsIDB4MDA1NiwgMHgwMDU3LAorICAgIDB4MDA1OCwgMHgwMDU5 LCAweDAwNWEsIDB4MDBmMCwgMHgwMGQ4LCAweDAwYzYsIDB4MDBkNiwgMHgwMDVmLAorICAgIDB4 MDBmZSwgMHgwMDYxLCAweDAwNjIsIDB4MDA2MywgMHgwMDY0LCAweDAwNjUsIDB4MDA2NiwgMHgw MDY3LAorICAgIDB4MDA2OCwgMHgwMDY5LCAweDAwNmEsIDB4MDA2YiwgMHgwMDZjLCAweDAwNmQs IDB4MDA2ZSwgMHgwMDZmLAorICAgIDB4MDA3MCwgMHgwMDcxLCAweDAwNzIsIDB4MDA3MywgMHgw MDc0LCAweDAwNzUsIDB4MDA3NiwgMHgwMDc3LAorICAgIDB4MDA3OCwgMHgwMDc5LCAweDAwN2Es IDB4MDBmMCwgMHgwMDdjLCAweDAwZTYsIDB4MDBmNgorfTsKKworc3RydWN0IHhfdG9fdW5pY29k ZSB1X2ppczAyMDFyID0geworICAgIDk0LCAzMywgWDJVX0lTT3xYMlVfU1RELEFMX1JPTUFOLCJK YXBhbmVzZSBSb21hbiIsImphcGFuZXNlLXJvbWFuIiwxNCwiSiIsCisgICAgICAgICAgICAweDAw MjEsIDB4MDAyMiwgMHgwMDIzLCAweDAwMjQsIDB4MDAyNSwgMHgwMDI2LCAweDAwMjcsCisgICAg MHgwMDI4LCAweDAwMjksIDB4MDAyYSwgMHgwMDJiLCAweDAwMmMsIDB4MDAyZCwgMHgwMDJlLCAw eDAwMmYsCisgICAgMHgwMDMwLCAweDAwMzEsIDB4MDAzMiwgMHgwMDMzLCAweDAwMzQsIDB4MDAz NSwgMHgwMDM2LCAweDAwMzcsCisgICAgMHgwMDM4LCAweDAwMzksIDB4MDAzYSwgMHgwMDNiLCAw eDAwM2MsIDB4MDAzZCwgMHgwMDNlLCAweDAwM2YsCisgICAgMHgwMDQwLCAweDAwNDEsIDB4MDA0 MiwgMHgwMDQzLCAweDAwNDQsIDB4MDA0NSwgMHgwMDQ2LCAweDAwNDcsCisgICAgMHgwMDQ4LCAw eDAwNDksIDB4MDA0YSwgMHgwMDRiLCAweDAwNGMsIDB4MDA0ZCwgMHgwMDRlLCAweDAwNGYsCisg ICAgMHgwMDUwLCAweDAwNTEsIDB4MDA1MiwgMHgwMDUzLCAweDAwNTQsIDB4MDA1NSwgMHgwMDU2 LCAweDAwNTcsCisgICAgMHgwMDU4LCAweDAwNTksIDB4MDA1YSwgMHgwMDViLCAweDAwYTUsIDB4 MDA1ZCwgMHgwMDVlLCAweDAwNWYsCisgICAgMHgwMDYwLCAweDAwNjEsIDB4MDA2MiwgMHgwMDYz LCAweDAwNjQsIDB4MDA2NSwgMHgwMDY2LCAweDAwNjcsCisgICAgMHgwMDY4LCAweDAwNjksIDB4 MDA2YSwgMHgwMDZiLCAweDAwNmMsIDB4MDA2ZCwgMHgwMDZlLCAweDAwNmYsCisgICAgMHgwMDcw LCAweDAwNzEsIDB4MDA3MiwgMHgwMDczLCAweDAwNzQsIDB4MDA3NSwgMHgwMDc2LCAweDAwNzcs CisgICAgMHgwMDc4LCAweDAwNzksIDB4MDA3YSwgMHgwMDdiLCAweDAwN2MsIDB4MDA3ZCwgMHgy MDNlCit9OworCitzdHJ1Y3QgeF90b191bmljb2RlIHVfamlzMDIwMWsgPSB7CisgICAgOTQsIDMz LCBYMlVfSVNPfFgyVV9TVEQsQUxfS0FOQSwiSmFwYW5lc2UgS2F0YWthbmEiLCAia2F0YWthbmEi LCAxMywgIkkiLAorICAgICAgICAgICAgMHhmZjYxLCAweGZmNjIsIDB4ZmY2MywgMHhmZjY0LCAw eGZmNjUsIDB4ZmY2NiwgMHhmZjY3LAorICAgIDB4ZmY2OCwgMHhmZjY5LCAweGZmNmEsIDB4ZmY2 YiwgMHhmZjZjLCAweGZmNmQsIDB4ZmY2ZSwgMHhmZjZmLAorICAgIDB4ZmY3MCwgMHhmZjcxLCAw eGZmNzIsIDB4ZmY3MywgMHhmZjc0LCAweGZmNzUsIDB4ZmY3NiwgMHhmZjc3LAorICAgIDB4ZmY3 OCwgMHhmZjc5LCAweGZmN2EsIDB4ZmY3YiwgMHhmZjdjLCAweGZmN2QsIDB4ZmY3ZSwgMHhmZjdm LAorICAgIDB4ZmY4MCwgMHhmZjgxLCAweGZmODIsIDB4ZmY4MywgMHhmZjg0LCAweGZmODUsIDB4 ZmY4NiwgMHhmZjg3LAorICAgIDB4ZmY4OCwgMHhmZjg5LCAweGZmOGEsIDB4ZmY4YiwgMHhmZjhj LCAweGZmOGQsIDB4ZmY4ZSwgMHhmZjhmLAorICAgIDB4ZmY5MCwgMHhmZjkxLCAweGZmOTIsIDB4 ZmY5MywgMHhmZjk0LCAweGZmOTUsIDB4ZmY5NiwgMHhmZjk3LAorICAgIDB4ZmY5OCwgMHhmZjk5 LCAweGZmOWEsIDB4ZmY5YiwgMHhmZjljLCAweGZmOWQsIDB4ZmY5ZSwgMHhmZjlmLAorICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZAorfTsKKworc3RydWN0IHhfdG9fdW5pY29k ZSB1X25vcndlZ2lhbiA9IHsgICAgIC8qIFNhbWUgYXMgRGFuaXNoICovCisgICAgOTQsMzMsWDJV X0lTT3xYMlVfU1RELEFMX1JPTUFOLCJOb3J3ZWdpYW4gSVNPIDY0NiIsICJub3J3ZWdpYW4iLCA2 MCwgImBFNiIsCisgICAgICAgICAgICAweDAwMjEsIDB4MDAyMiwgMHgwMDIzLCAweDAwMjQsIDB4 MDAyNSwgMHgwMDI2LCAweDAwMjcsCisgICAgMHgwMDI4LCAweDAwMjksIDB4MDAyYSwgMHgwMDJi LCAweDAwMmMsIDB4MDAyZCwgMHgwMDJlLCAweDAwMmYsCisgICAgMHgwMDMwLCAweDAwMzEsIDB4 MDAzMiwgMHgwMDMzLCAweDAwMzQsIDB4MDAzNSwgMHgwMDM2LCAweDAwMzcsCisgICAgMHgwMDM4 LCAweDAwMzksIDB4MDAzYSwgMHgwMDNiLCAweDAwM2MsIDB4MDAzZCwgMHgwMDNlLCAweDAwM2Ys CisgICAgMHgwMDQwLCAweDAwNDEsIDB4MDA0MiwgMHgwMDQzLCAweDAwNDQsIDB4MDA0NSwgMHgw MDQ2LCAweDAwNDcsCisgICAgMHgwMDQ4LCAweDAwNDksIDB4MDA0YSwgMHgwMDRiLCAweDAwNGMs IDB4MDA0ZCwgMHgwMDRlLCAweDAwNGYsCisgICAgMHgwMDUwLCAweDAwNTEsIDB4MDA1MiwgMHgw MDUzLCAweDAwNTQsIDB4MDA1NSwgMHgwMDU2LCAweDAwNTcsCisgICAgMHgwMDU4LCAweDAwNTks IDB4MDA1YSwgMHgwMGM2LCAweDAwZDgsIDB4MDBjNSwgMHgwMDVlLCAweDAwNWYsCisgICAgMHgw MDYwLCAweDAwNjEsIDB4MDA2MiwgMHgwMDYzLCAweDAwNjQsIDB4MDA2NSwgMHgwMDY2LCAweDAw NjcsCisgICAgMHgwMDY4LCAweDAwNjksIDB4MDA2YSwgMHgwMDZiLCAweDAwNmMsIDB4MDA2ZCwg MHgwMDZlLCAweDAwNmYsCisgICAgMHgwMDcwLCAweDAwNzEsIDB4MDA3MiwgMHgwMDczLCAweDAw NzQsIDB4MDA3NSwgMHgwMDc2LCAweDAwNzcsCisgICAgMHgwMDc4LCAweDAwNzksIDB4MDA3YSwg MHgwMGU2LCAweDAwZjgsIDB4MDBlNSwgMHgwMDdlCit9OworCitzdHJ1Y3QgeF90b191bmljb2Rl IHVfZGFuaXNoID0geyAgICAgICAgLyogU2FtZSBhcyBOb3J3ZWdpYW4gKi8KKyAgICA5NCwgMzMs IFgyVV9JU098WDJVX1NURCwgQUxfUk9NQU4sICJEYW5pc2ggSVNPIDY0NiIsICJkYW5pc2giLCA2 MCwgImBFNiIsCisgICAgICAgICAgICAweDAwMjEsIDB4MDAyMiwgMHgwMDIzLCAweDAwMjQsIDB4 MDAyNSwgMHgwMDI2LCAweDAwMjcsCisgICAgMHgwMDI4LCAweDAwMjksIDB4MDAyYSwgMHgwMDJi LCAweDAwMmMsIDB4MDAyZCwgMHgwMDJlLCAweDAwMmYsCisgICAgMHgwMDMwLCAweDAwMzEsIDB4 MDAzMiwgMHgwMDMzLCAweDAwMzQsIDB4MDAzNSwgMHgwMDM2LCAweDAwMzcsCisgICAgMHgwMDM4 LCAweDAwMzksIDB4MDAzYSwgMHgwMDNiLCAweDAwM2MsIDB4MDAzZCwgMHgwMDNlLCAweDAwM2Ys CisgICAgMHgwMDQwLCAweDAwNDEsIDB4MDA0MiwgMHgwMDQzLCAweDAwNDQsIDB4MDA0NSwgMHgw MDQ2LCAweDAwNDcsCisgICAgMHgwMDQ4LCAweDAwNDksIDB4MDA0YSwgMHgwMDRiLCAweDAwNGMs IDB4MDA0ZCwgMHgwMDRlLCAweDAwNGYsCisgICAgMHgwMDUwLCAweDAwNTEsIDB4MDA1MiwgMHgw MDUzLCAweDAwNTQsIDB4MDA1NSwgMHgwMDU2LCAweDAwNTcsCisgICAgMHgwMDU4LCAweDAwNTks IDB4MDA1YSwgMHgwMGM2LCAweDAwZDgsIDB4MDBjNSwgMHgwMDVlLCAweDAwNWYsCisgICAgMHgw MDYwLCAweDAwNjEsIDB4MDA2MiwgMHgwMDYzLCAweDAwNjQsIDB4MDA2NSwgMHgwMDY2LCAweDAw NjcsCisgICAgMHgwMDY4LCAweDAwNjksIDB4MDA2YSwgMHgwMDZiLCAweDAwNmMsIDB4MDA2ZCwg MHgwMDZlLCAweDAwNmYsCisgICAgMHgwMDcwLCAweDAwNzEsIDB4MDA3MiwgMHgwMDczLCAweDAw NzQsIDB4MDA3NSwgMHgwMDc2LCAweDAwNzcsCisgICAgMHgwMDc4LCAweDAwNzksIDB4MDA3YSwg MHgwMGU2LCAweDAwZjgsIDB4MDBlNSwgMHgwMDdlCit9OworCitzdHJ1Y3QgeF90b191bmljb2Rl IHVfcG9ydHVndWVzZSA9IHsKKyAgICA5NCwzMyxYMlVfSVNPfFgyVV9TVEQsQUxfUk9NQU4sIlBv cnR1Z3Vlc2UgSVNPIDY0NiIsInBvcnR1Z3Vlc2UiLDE2LCJMJTYiLAorICAgICAgICAgICAgMHgw MDIxLCAweDAwMjIsIDB4MDAyMywgMHgwMDI0LCAweDAwMjUsIDB4MDAyNiwgMHgwMDI3LAorICAg IDB4MDAyOCwgMHgwMDI5LCAweDAwMmEsIDB4MDAyYiwgMHgwMDJjLCAweDAwMmQsIDB4MDAyZSwg MHgwMDJmLAorICAgIDB4MDAzMCwgMHgwMDMxLCAweDAwMzIsIDB4MDAzMywgMHgwMDM0LCAweDAw MzUsIDB4MDAzNiwgMHgwMDM3LAorICAgIDB4MDAzOCwgMHgwMDM5LCAweDAwM2EsIDB4MDAzYiwg MHgwMDNjLCAweDAwM2QsIDB4MDAzZSwgMHgwMDNmLAorICAgIDB4MDA0MCwgMHgwMDQxLCAweDAw NDIsIDB4MDA0MywgMHgwMDQ0LCAweDAwNDUsIDB4MDA0NiwgMHgwMDQ3LAorICAgIDB4MDA0OCwg MHgwMDQ5LCAweDAwNGEsIDB4MDA0YiwgMHgwMDRjLCAweDAwNGQsIDB4MDA0ZSwgMHgwMDRmLAor ICAgIDB4MDA1MCwgMHgwMDUxLCAweDAwNTIsIDB4MDA1MywgMHgwMDU0LCAweDAwNTUsIDB4MDA1 NiwgMHgwMDU3LAorICAgIDB4MDA1OCwgMHgwMDU5LCAweDAwNWEsIDB4MDBjNiwgMHgwMGQ4LCAw eDAwYzUsIDB4MDA1ZSwgMHgwMDVmLAorICAgIDB4MDA2MCwgMHgwMDYxLCAweDAwNjIsIDB4MDA2 MywgMHgwMDY0LCAweDAwNjUsIDB4MDA2NiwgMHgwMDY3LAorICAgIDB4MDA2OCwgMHgwMDY5LCAw eDAwNmEsIDB4MDA2YiwgMHgwMDZjLCAweDAwNmQsIDB4MDA2ZSwgMHgwMDZmLAorICAgIDB4MDA3 MCwgMHgwMDcxLCAweDAwNzIsIDB4MDA3MywgMHgwMDc0LCAweDAwNzUsIDB4MDA3NiwgMHgwMDc3 LAorICAgIDB4MDA3OCwgMHgwMDc5LCAweDAwN2EsIDB4MDBlNiwgMHgwMGY4LCAweDAwZTUsIDB4 MDA3ZQorfTsKKworc3RydWN0IHhfdG9fdW5pY29kZSB1X3NwYW5pc2ggPSB7CisgICAgOTQsIDMz LCBYMlVfSVNPfFgyVV9TVEQsIEFMX1JPTUFOLCAiU3BhbmlzaCBJU08gNjQ2IiwgInNwYW5pc2gi LCAxNywgIloiLAorICAgICAgICAgICAgMHgwMDIxLCAweDAwMjIsIDB4MDBhMywgMHgwMDI0LCAw eDAwMjUsIDB4MDAyNiwgMHgwMDI3LAorICAgIDB4MDAyOCwgMHgwMDI5LCAweDAwMmEsIDB4MDAy YiwgMHgwMDJjLCAweDAwMmQsIDB4MDAyZSwgMHgwMDJmLAorICAgIDB4MDAzMCwgMHgwMDMxLCAw eDAwMzIsIDB4MDAzMywgMHgwMDM0LCAweDAwMzUsIDB4MDAzNiwgMHgwMDM3LAorICAgIDB4MDAz OCwgMHgwMDM5LCAweDAwM2EsIDB4MDAzYiwgMHgwMDNjLCAweDAwM2QsIDB4MDAzZSwgMHgwMDNm LAorICAgIDB4MDBhNywgMHgwMDQxLCAweDAwNDIsIDB4MDA0MywgMHgwMDQ0LCAweDAwNDUsIDB4 MDA0NiwgMHgwMDQ3LAorICAgIDB4MDA0OCwgMHgwMDQ5LCAweDAwNGEsIDB4MDA0YiwgMHgwMDRj LCAweDAwNGQsIDB4MDA0ZSwgMHgwMDRmLAorICAgIDB4MDA1MCwgMHgwMDUxLCAweDAwNTIsIDB4 MDA1MywgMHgwMDU0LCAweDAwNTUsIDB4MDA1NiwgMHgwMDU3LAorICAgIDB4MDA1OCwgMHgwMDU5 LCAweDAwNWEsIDB4MDBhMSwgMHgwMGQxLCAweDAwYmYsIDB4MDA1ZSwgMHgwMDVmLAorICAgIDB4 MDA2MCwgMHgwMDYxLCAweDAwNjIsIDB4MDA2MywgMHgwMDY0LCAweDAwNjUsIDB4MDA2NiwgMHgw MDY3LAorICAgIDB4MDA2OCwgMHgwMDY5LCAweDAwNmEsIDB4MDA2YiwgMHgwMDZjLCAweDAwNmQs IDB4MDA2ZSwgMHgwMDZmLAorICAgIDB4MDA3MCwgMHgwMDcxLCAweDAwNzIsIDB4MDA3MywgMHgw MDc0LCAweDAwNzUsIDB4MDA3NiwgMHgwMDc3LAorICAgIDB4MDA3OCwgMHgwMDc5LCAweDAwN2Es IDB4MDBiMCwgMHgwMGYxLCAweDAwZTcsIDB4MDA3ZQorfTsKKworc3RydWN0IHhfdG9fdW5pY29k ZSB1X3N3ZWRpc2ggPSB7CisgICAgOTQsIDMzLCBYMlVfSVNPfFgyVV9TVEQsIEFMX1JPTUFOLCAi U3dlZGlzaCBJU08gNjQ2IiwgInN3ZWRpc2giLCAxMSwgIkhHIiwKKyAgICAgICAgICAgIDB4MDAy MSwgMHgwMDIyLCAweDAwMjMsIDB4MDAyNCwgMHgwMDI1LCAweDAwMjYsIDB4MDAyNywKKyAgICAw eDAwMjgsIDB4MDAyOSwgMHgwMDJhLCAweDAwMmIsIDB4MDAyYywgMHgwMDJkLCAweDAwMmUsIDB4 MDAyZiwKKyAgICAweDAwMzAsIDB4MDAzMSwgMHgwMDMyLCAweDAwMzMsIDB4MDAzNCwgMHgwMDM1 LCAweDAwMzYsIDB4MDAzNywKKyAgICAweDAwMzgsIDB4MDAzOSwgMHgwMDNhLCAweDAwM2IsIDB4 MDAzYywgMHgwMDNkLCAweDAwM2UsIDB4MDAzZiwKKyAgICAweDAwYzksIDB4MDA0MSwgMHgwMDQy LCAweDAwNDMsIDB4MDA0NCwgMHgwMDQ1LCAweDAwNDYsIDB4MDA0NywKKyAgICAweDAwNDgsIDB4 MDA0OSwgMHgwMDRhLCAweDAwNGIsIDB4MDA0YywgMHgwMDRkLCAweDAwNGUsIDB4MDA0ZiwKKyAg ICAweDAwNTAsIDB4MDA1MSwgMHgwMDUyLCAweDAwNTMsIDB4MDA1NCwgMHgwMDU1LCAweDAwNTYs IDB4MDA1NywKKyAgICAweDAwNTgsIDB4MDA1OSwgMHgwMDVhLCAweDAwYzQsIDB4MDBkNiwgMHgw MGM1LCAweDAwZGMsIDB4MDA1ZiwKKyAgICAweDAwZTksIDB4MDA2MSwgMHgwMDYyLCAweDAwNjMs IDB4MDA2NCwgMHgwMDY1LCAweDAwNjYsIDB4MDA2NywKKyAgICAweDAwNjgsIDB4MDA2OSwgMHgw MDZhLCAweDAwNmIsIDB4MDA2YywgMHgwMDZkLCAweDAwNmUsIDB4MDA2ZiwKKyAgICAweDAwNzAs IDB4MDA3MSwgMHgwMDcyLCAweDAwNzMsIDB4MDA3NCwgMHgwMDc1LCAweDAwNzYsIDB4MDA3NywK KyAgICAweDAwNzgsIDB4MDA3OSwgMHgwMDdhLCAweDAwZTQsIDB4MDBmNiwgMHgwMGU1LCAweDAw ZmMKK307CisKK3N0cnVjdCB4X3RvX3VuaWNvZGUgdV9zd2lzcyA9IHsKKyAgICA5NCwgMzMsIFgy VV9ERUN8WDJVX1NURCwgQUxfUk9NQU4sICJTd2lzcyBOUkMiLCAic3dpc3MiLCAwLCAiPSIsCisg ICAgICAgICAgICAweDAwMjEsIDB4MDAyMiwgMHgwMGY5LCAweDAwMjQsIDB4MDAyNSwgMHgwMDI2 LCAweDAwMjcsCisgICAgMHgwMDI4LCAweDAwMjksIDB4MDAyYSwgMHgwMDJiLCAweDAwMmMsIDB4 MDAyZCwgMHgwMDJlLCAweDAwMmYsCisgICAgMHgwMDMwLCAweDAwMzEsIDB4MDAzMiwgMHgwMDMz LCAweDAwMzQsIDB4MDAzNSwgMHgwMDM2LCAweDAwMzcsCisgICAgMHgwMDM4LCAweDAwMzksIDB4 MDAzYSwgMHgwMDNiLCAweDAwM2MsIDB4MDAzZCwgMHgwMDNlLCAweDAwM2YsCisgICAgMHgwMGUw LCAweDAwNDEsIDB4MDA0MiwgMHgwMDQzLCAweDAwNDQsIDB4MDA0NSwgMHgwMDQ2LCAweDAwNDcs CisgICAgMHgwMDQ4LCAweDAwNDksIDB4MDA0YSwgMHgwMDRiLCAweDAwNGMsIDB4MDA0ZCwgMHgw MDRlLCAweDAwNGYsCisgICAgMHgwMDUwLCAweDAwNTEsIDB4MDA1MiwgMHgwMDUzLCAweDAwNTQs IDB4MDA1NSwgMHgwMDU2LCAweDAwNTcsCisgICAgMHgwMDU4LCAweDAwNTksIDB4MDA1YSwgMHgw MGU5LCAweDAwZTcsIDB4MDBlYSwgMHgwMGVlLCAweDAwZTgsCisgICAgMHgwMGY0LCAweDAwNjEs IDB4MDA2MiwgMHgwMDYzLCAweDAwNjQsIDB4MDA2NSwgMHgwMDY2LCAweDAwNjcsCisgICAgMHgw MDY4LCAweDAwNjksIDB4MDA2YSwgMHgwMDZiLCAweDAwNmMsIDB4MDA2ZCwgMHgwMDZlLCAweDAw NmYsCisgICAgMHgwMDcwLCAweDAwNzEsIDB4MDA3MiwgMHgwMDczLCAweDAwNzQsIDB4MDA3NSwg MHgwMDc2LCAweDAwNzcsCisgICAgMHgwMDc4LCAweDAwNzksIDB4MDA3YSwgMHgwMGU0LCAweDAw ZjYsIDB4MDBmYywgMHgwMGZiCit9OworCitzdHJ1Y3QgeF90b191bmljb2RlIHVfa29pNyA9IHsK KyAgICA5NCwgMzMsIFgyVV9TVEQsIEFMX0NZUklMLCAiU2hvcnQgS09JIiwgInNob3J0LWtvaSIs IDAsIE5VTEwsCisgICAgICAgICAgICAweDAwMjEsIDB4MDAyMiwgMHgwMDIzLCAweDAwMjQsIDB4 MDAyNSwgMHgwMDI2LCAweDAwMjcsCisgICAgMHgwMDI4LCAweDAwMjksIDB4MDAyYSwgMHgwMDJi LCAweDAwMmMsIDB4MDAyZCwgMHgwMDJlLCAweDAwMmYsCisgICAgMHgwMDMwLCAweDAwMzEsIDB4 MDAzMiwgMHgwMDMzLCAweDAwMzQsIDB4MDAzNSwgMHgwMDM2LCAweDAwMzcsCisgICAgMHgwMDM4 LCAweDAwMzksIDB4MDAzYSwgMHgwMDNiLCAweDAwM2MsIDB4MDAzZCwgMHgwMDNlLCAweDAwM2Ys CisgICAgMHgwMDQwLCAweDAwNDEsIDB4MDA0MiwgMHgwMDQzLCAweDAwNDQsIDB4MDA0NSwgMHgw MDQ2LCAweDAwNDcsCisgICAgMHgwMDQ4LCAweDAwNDksIDB4MDA0YSwgMHgwMDRiLCAweDAwNGMs IDB4MDA0ZCwgMHgwMDRlLCAweDAwNGYsCisgICAgMHgwMDUwLCAweDAwNTEsIDB4MDA1MiwgMHgw MDUzLCAweDAwNTQsIDB4MDA1NSwgMHgwMDU2LCAweDAwNTcsCisgICAgMHgwMDU4LCAweDAwNTks IDB4MDA1YSwgMHgwMDViLCAweDAwNWMsIDB4MDA1ZCwgMHgwMDVlLCAweDAwNWYsCisgICAgMHgw NDJlLCAweDA0MTAsIDB4MDQxMSwgMHgwNDI2LCAweDA0MTQsIDB4MDQxNSwgMHgwNDI0LCAweDA0 MTMsCisgICAgMHgwNDI1LCAweDA0MTgsIDB4MDQxOSwgMHgwNDFhLCAweDA0MWIsIDB4MDQxYywg MHgwNDFkLCAweDA0MWUsCisgICAgMHgwNDFmLCAweDA0MmYsIDB4MDQyMCwgMHgwNDIxLCAweDA0 MjIsIDB4MDQyMywgMHgwNDE2LCAweDA0MTIsCisgICAgMHgwNDJjLCAweDA0MmIsIDB4MDQxNywg MHgwNDI4LCAweDA0MmQsIDB4MDQyOSwgMHgwNDI3Cit9OworCitzdHJ1Y3QgeF90b191bmljb2Rl IHVfZWxvdDkyNyA9IHsKKyAgICA5NCwgMzMsIFgyVV9TVEQsIEFMX0dSRUVLLCAiRUxPVCA5Mjci LCAiZWxvdDkyNy1ncmVlayIsIDAsIE5VTEwsCisgICAgICAgICAgICAweDAwMjEsIDB4MDAyMiwg MHgwMDIzLCAweDAwMjQsIDB4MDAyNSwgMHgwMDI2LCAweDAwMjcsCisgICAgMHgwMDI4LCAweDAw MjksIDB4MDAyYSwgMHgwMDJiLCAweDAwMmMsIDB4MDAyZCwgMHgwMDJlLCAweDAwMmYsCisgICAg MHgwMDMwLCAweDAwMzEsIDB4MDAzMiwgMHgwMDMzLCAweDAwMzQsIDB4MDAzNSwgMHgwMDM2LCAw eDAwMzcsCisgICAgMHgwMDM4LCAweDAwMzksIDB4MDAzYSwgMHgwMDNiLCAweDAwM2MsIDB4MDAz ZCwgMHgwMDNlLCAweDAwM2YsCisgICAgMHgwMDQwLCAweDAwNDEsIDB4MDA0MiwgMHgwMDQzLCAw eDAwNDQsIDB4MDA0NSwgMHgwMDQ2LCAweDAwNDcsCisgICAgMHgwMDQ4LCAweDAwNDksIDB4MDA0 YSwgMHgwMDRiLCAweDAwNGMsIDB4MDA0ZCwgMHgwMDRlLCAweDAwNGYsCisgICAgMHgwMDUwLCAw eDAwNTEsIDB4MDA1MiwgMHgwMDUzLCAweDAwNTQsIDB4MDA1NSwgMHgwMDU2LCAweDAwNTcsCisg ICAgMHgwMDU4LCAweDAwNTksIDB4MDA1YSwgMHgwMDViLCAweDAwNWMsIDB4MDA1ZCwgMHgwMDVl LCAweDAwNWYsCisgICAgMHgwMDYwLCAweDAzOTEsIDB4MDM5MiwgMHgwMzkzLCAweDAzOTQsIDB4 MDM5NSwgMHgwMzk2LCAweDAzOTcsCisgICAgMHgwMzk4LCAweDAzOTksIDB4MDM5YSwgMHgwMzli LCAweDAzOWMsIDB4MDM5ZCwgMHgwMzllLCAweDAzOWYsCisgICAgMHgwM2EwLCAweDAzYTEsIDB4 MDNhMywgMHgwM2E0LCAweDAzYTUsIDB4MDNhNiwgMHgwM2E3LCAweDAzYTgsCisgICAgMHgwM2E5 LCAweDAwMjAsIDB4MDAyMCwgMHgwMDdiLCAweDAwN2MsIDB4MDA3ZCwgMHgwMDdlCit9OworCisK K3N0cnVjdCB4X3RvX3VuaWNvZGUgdV9oZWJyZXc3ID0geworICAgIDk0LCAzMywgWDJVX1NURCwg QUxfSEVCUkVXLCAiSGVicmV3LTciLCAiaGVicmV3LTciLCAwLCBOVUxMLAorICAgICAgICAgICAg MHgwMDIxLCAweDAwMjIsIDB4MDAyMywgMHgwMDI0LCAweDAwMjUsIDB4MDAyNiwgMHgwMDI3LAor ICAgIDB4MDAyOCwgMHgwMDI5LCAweDAwMmEsIDB4MDAyYiwgMHgwMDJjLCAweDAwMmQsIDB4MDAy ZSwgMHgwMDJmLAorICAgIDB4MDAzMCwgMHgwMDMxLCAweDAwMzIsIDB4MDAzMywgMHgwMDM0LCAw eDAwMzUsIDB4MDAzNiwgMHgwMDM3LAorICAgIDB4MDAzOCwgMHgwMDM5LCAweDAwM2EsIDB4MDAz YiwgMHgwMDNjLCAweDAwM2QsIDB4MDAzZSwgMHgwMDNmLAorICAgIDB4MDA0MCwgMHgwMDQxLCAw eDAwNDIsIDB4MDA0MywgMHgwMDQ0LCAweDAwNDUsIDB4MDA0NiwgMHgwMDQ3LAorICAgIDB4MDA0 OCwgMHgwMDQ5LCAweDAwNGEsIDB4MDA0YiwgMHgwMDRjLCAweDAwNGQsIDB4MDA0ZSwgMHgwMDRm LAorICAgIDB4MDA1MCwgMHgwMDUxLCAweDAwNTIsIDB4MDA1MywgMHgwMDU0LCAweDAwNTUsIDB4 MDA1NiwgMHgwMDU3LAorICAgIDB4MDA1OCwgMHgwMDU5LCAweDAwNWEsIDB4MDA1YiwgMHgwMDVj LCAweDAwNWQsIDB4MDA1ZSwgMHgwMDVmLAorICAgIDB4MDVkMCwgMHgwNWQxLCAweDA1ZDIsIDB4 MDVkMywgMHgwNWQ0LCAweDA1ZDUsIDB4MDVkNiwgMHgwNWQ3LAorICAgIDB4MDVkOCwgMHgwNWQ5 LCAweDA1ZGEsIDB4MDVkYiwgMHgwNWRjLCAweDA1ZGQsIDB4MDVkZSwgMHgwNWRmLAorICAgIDB4 MDVlMCwgMHgwNWUxLCAweDA1ZTIsIDB4MDVlMywgMHgwNWU0LCAweDA1ZTUsIDB4MDVlNiwgMHgw NWU3LAorICAgIDB4MDVlOCwgMHgwNWU5LCAweDA1ZWEsIDB4MDA3YiwgMHgwMDdjLCAweDAwN2Qs IDB4MDA3ZQorfTsKKworc3RydWN0IHhfdG9fdW5pY29kZSB1X2FwbDEgPSB7CisgICAgOTQsIDMz LCBYMlVfSVNPfFgyVV9TVEQsIEFMX1JPTUFOLCAiQVBMIElTTyIsICJhcGwtaXNvIiwgNjgsICJl IiwKKyAgICAgICAgICAgIDB4MDBhOCwgMHgwMDI5LCAweDAwM2MsIDB4MjI2NCwgMHgwMDNkLCAw eDAwM2UsIDB4MDA1ZCwKKyAgICAweDIyMjgsIDB4MjIyNywgMHgyMjYwLCAweDAwZjcsIDB4MDAy YywgMHgwMDJiLCAweDAwMmUsIDB4MDAyZiwKKyAgICAweDAwMzAsIDB4MDAzMSwgMHgwMDMyLCAw eDAwMzMsIDB4MDAzNCwgMHgwMDM1LCAweDAwMzYsIDB4MDAzNywKKyAgICAweDAwMzgsIDB4MDAz OSwgMHgwMDI4LCAweDAwNWIsIDB4MDAzYiwgMHgwMGQ3LCAweDAwM2EsIDB4MDA1YywKKyAgICAw eDAwYWYsIDB4MjM3YSwgMHgyMmE1LCAweDIyYzIsIDB4MjMwYSwgMHgyMjBhLCAweDAwNWYsIDB4 MjIwNywKKyAgICAweDIyMDYsIDB4MjM3MywgMHgyMjE4LCAweDAwMjcsIDB4MjVhZiwgMHgwMDdj LCAweDIyYTQsIDB4MjVjYiwKKyAgICAweDIyYzYsIDB4MDAzZiwgMHgyMzc0LCAweDIzMDgsIDB4 MjIzYywgMHgyMTkzLCAweDIyMmEsIDB4MjM3NSwKKyAgICAweDIyODMsIDB4MjE5MSwgMHgyMjgy LCAweDIxOTAsIDB4MjJhMiwgMHgyMTkyLCAweDIyNjUsIDB4MDAyZCwKKyAgICAweDIyYzQsIDB4 MDA0MSwgMHgwMDQyLCAweDAwNDMsIDB4MDA0NCwgMHgwMDQ1LCAweDAwNDYsIDB4MDA0NywKKyAg ICAweDAwNDgsIDB4MDA0OSwgMHgwMDRhLCAweDAwNGIsIDB4MDA0YywgMHgwMDRkLCAweDAwNGUs IDB4MDA0ZiwKKyAgICAweDAwNTAsIDB4MDA1MSwgMHgwMDUyLCAweDAwNTMsIDB4MDA1NCwgMHgw MDU1LCAweDAwNTYsIDB4MDA1NywKKyAgICAweDAwNTgsIDB4MDA1OSwgMHgwMDVhLCAweDAwN2Is IDB4MjJhMywgMHgwMDdkLCAweDAwMjQKK307CisKKy8qIElTTyA4ODU5IExhdGluIEFscGhhYmV0 cyAqLworCitzdHJ1Y3QgeF90b191bmljb2RlIHVfODg1OV8xID0geworICAgIDk2LCAzMiwgWDJV X0lTT3xYMlVfU1RELCBBTF9ST01BTiwgIklTTyBMYXRpbi0xIiwgImxhdGluMSIsIDEwMCwgIkEi LAorICAgIDB4MDBBMCwgMHgwMEExLCAweDAwQTIsIDB4MDBBMywgMHgwMEE0LCAweDAwQTUsIDB4 MDBBNiwgMHgwMEE3LAorICAgIDB4MDBBOCwgMHgwMEE5LCAweDAwQUEsIDB4MDBBQiwgMHgwMEFD LCAweDAwQUQsIDB4MDBBRSwgMHgwMEFGLAorICAgIDB4MDBCMCwgMHgwMEIxLCAweDAwQjIsIDB4 MDBCMywgMHgwMEI0LCAweDAwQjUsIDB4MDBCNiwgMHgwMEI3LAorICAgIDB4MDBCOCwgMHgwMEI5 LCAweDAwQkEsIDB4MDBCQiwgMHgwMEJDLCAweDAwQkQsIDB4MDBCRSwgMHgwMEJGLAorICAgIDB4 MDBDMCwgMHgwMEMxLCAweDAwQzIsIDB4MDBDMywgMHgwMEM0LCAweDAwQzUsIDB4MDBDNiwgMHgw MEM3LAorICAgIDB4MDBDOCwgMHgwMEM5LCAweDAwQ0EsIDB4MDBDQiwgMHgwMENDLCAweDAwQ0Qs IDB4MDBDRSwgMHgwMENGLAorICAgIDB4MDBEMCwgMHgwMEQxLCAweDAwRDIsIDB4MDBEMywgMHgw MEQ0LCAweDAwRDUsIDB4MDBENiwgMHgwMEQ3LAorICAgIDB4MDBEOCwgMHgwMEQ5LCAweDAwREEs IDB4MDBEQiwgMHgwMERDLCAweDAwREQsIDB4MDBERSwgMHgwMERGLAorICAgIDB4MDBFMCwgMHgw MEUxLCAweDAwRTIsIDB4MDBFMywgMHgwMEU0LCAweDAwRTUsIDB4MDBFNiwgMHgwMEU3LAorICAg IDB4MDBFOCwgMHgwMEU5LCAweDAwRUEsIDB4MDBFQiwgMHgwMEVDLCAweDAwRUQsIDB4MDBFRSwg MHgwMEVGLAorICAgIDB4MDBGMCwgMHgwMEYxLCAweDAwRjIsIDB4MDBGMywgMHgwMEY0LCAweDAw RjUsIDB4MDBGNiwgMHgwMEY3LAorICAgIDB4MDBGOCwgMHgwMEY5LCAweDAwRkEsIDB4MDBGQiwg MHgwMEZDLCAweDAwRkQsIDB4MDBGRSwgMHgwMEZGCit9OworCitzdHJ1Y3QgeF90b191bmljb2Rl IHVfODg1OV8yID0geworICAgIDk2LCAzMiwgWDJVX0lTT3xYMlVfU1RELCBBTF9ST01BTiwgIklT TyBMYXRpbi0yIiwgImxhdGluMiIsIDEwMSwgIkIiLAorICAgIDB4MDBBMCwgMHgwMTA0LCAweDAy RDgsIDB4MDE0MSwgMHgwMEE0LCAweDAxM0QsIDB4MDE1QSwgMHgwMEE3LAorICAgIDB4MDBBOCwg MHgwMTYwLCAweDAxNUUsIDB4MDE2NCwgMHgwMTc5LCAweDAwQUQsIDB4MDE3RCwgMHgwMTdCLAor ICAgIDB4MDBCMCwgMHgwMTA1LCAweDAyREIsIDB4MDE0MiwgMHgwMEI0LCAweDAxM0UsIDB4MDE1 QiwgMHgwMkM3LAorICAgIDB4MDBCOCwgMHgwMTYxLCAweDAxNUYsIDB4MDE2NSwgMHgwMTdBLCAw eDAyREQsIDB4MDE3RSwgMHgwMTdDLAorICAgIDB4MDE1NCwgMHgwMEMxLCAweDAwQzIsIDB4MDEw MiwgMHgwMEM0LCAweDAxMzksIDB4MDEwNiwgMHgwMEM3LAorICAgIDB4MDEwQywgMHgwMEM5LCAw eDAxMTgsIDB4MDBDQiwgMHgwMTFBLCAweDAwQ0QsIDB4MDBDRSwgMHgwMTBFLAorICAgIDB4MDEx MCwgMHgwMTQzLCAweDAxNDcsIDB4MDBEMywgMHgwMEQ0LCAweDAxNTAsIDB4MDBENiwgMHgwMEQ3 LAorICAgIDB4MDE1OCwgMHgwMTZFLCAweDAwREEsIDB4MDE3MCwgMHgwMERDLCAweDAwREQsIDB4 MDE2MiwgMHgwMERGLAorICAgIDB4MDE1NSwgMHgwMEUxLCAweDAwRTIsIDB4MDEwMywgMHgwMEU0 LCAweDAxM0EsIDB4MDEwNywgMHgwMEU3LAorICAgIDB4MDEwRCwgMHgwMEU5LCAweDAxMTksIDB4 MDBFQiwgMHgwMTFCLCAweDAwRUQsIDB4MDBFRSwgMHgwMTBGLAorICAgIDB4MDExMSwgMHgwMTQ0 LCAweDAxNDgsIDB4MDBGMywgMHgwMEY0LCAweDAxNTEsIDB4MDBGNiwgMHgwMEY3LAorICAgIDB4 MDE1OSwgMHgwMTZGLCAweDAwRkEsIDB4MDE3MSwgMHgwMEZDLCAweDAwRkQsIDB4MDE2MywgMHgw MkQ5Cit9OworCitzdHJ1Y3QgeF90b191bmljb2RlIHVfODg1OV8zID0geworICAgIDk2LCAzMiwg WDJVX0lTT3xYMlVfU1RELCBBTF9ST01BTiwgIklTTyBMYXRpbi0zIiwgImxhdGluMyIsIDEwOSwg IkMiLAorICAgIDB4MDBBMCwgMHgwMTI2LCAweDAyRDgsIDB4MDBBMywgMHgwMEE0LCAweGZmZmQs IDB4MDEyNCwgMHgwMEE3LAorICAgIDB4MDBBOCwgMHgwMTMwLCAweDAxNUUsIDB4MDExRSwgMHgw MTM0LCAweDAwQUQsIDB4ZmZmZCwgMHgwMTdCLAorICAgIDB4MDBCMCwgMHgwMTI3LCAweDAwQjIs IDB4MDBCMywgMHgwMEI0LCAweDAwQjUsIDB4MDEyNSwgMHgwMEI3LAorICAgIDB4MDBCOCwgMHgw MTMxLCAweDAxNUYsIDB4MDExRiwgMHgwMTM1LCAweDAwQkQsIDB4ZmZmZCwgMHgwMTdDLAorICAg IDB4MDBDMCwgMHgwMEMxLCAweDAwQzIsIDB4ZmZmZCwgMHgwMEM0LCAweDAxMEEsIDB4MDEwOCwg MHgwMEM3LAorICAgIDB4MDBDOCwgMHgwMEM5LCAweDAwQ0EsIDB4MDBDQiwgMHgwMENDLCAweDAw Q0QsIDB4MDBDRSwgMHgwMENGLAorICAgIDB4ZmZmZCwgMHgwMEQxLCAweDAwRDIsIDB4MDBEMywg MHgwMEQ0LCAweDAxMjAsIDB4MDBENiwgMHgwMEQ3LAorICAgIDB4MDExQywgMHgwMEQ5LCAweDAw REEsIDB4MDBEQiwgMHgwMERDLCAweDAxNkMsIDB4MDE1QywgMHgwMERGLAorICAgIDB4MDBFMCwg MHgwMEUxLCAweDAwRTIsIDB4ZmZmZCwgMHgwMEU0LCAweDAxMEIsIDB4MDEwOSwgMHgwMEU3LAor ICAgIDB4MDBFOCwgMHgwMEU5LCAweDAwRUEsIDB4MDBFQiwgMHgwMEVDLCAweDAwRUQsIDB4MDBF RSwgMHgwMEVGLAorICAgIDB4ZmZmZCwgMHgwMEYxLCAweDAwRjIsIDB4MDBGMywgMHgwMEY0LCAw eDAxMjEsIDB4MDBGNiwgMHgwMEY3LAorICAgIDB4MDExRCwgMHgwMEY5LCAweDAwRkEsIDB4MDBG QiwgMHgwMEZDLCAweDAxNkQsIDB4MDE1RCwgMHgwMkQ5Cit9OworCitzdHJ1Y3QgeF90b191bmlj b2RlIHVfODg1OV80ID0geworICAgIDk2LCAzMiwgWDJVX0lTT3xYMlVfU1RELCBBTF9ST01BTiwg IklTTyBMYXRpbi00IiwgImxhdGluNCIsIDExMCwgIkQiLAorICAgIDB4MDBBMCwgMHgwMTA0LCAw eDAxMzgsIDB4MDE1NiwgMHgwMEE0LCAweDAxMjgsIDB4MDEzQiwgMHgwMEE3LAorICAgIDB4MDBB OCwgMHgwMTYwLCAweDAxMTIsIDB4MDEyMiwgMHgwMTY2LCAweDAwQUQsIDB4MDE3RCwgMHgwMEFG LAorICAgIDB4MDBCMCwgMHgwMTA1LCAweDAyREIsIDB4MDE1NywgMHgwMEI0LCAweDAxMjksIDB4 MDEzQywgMHgwMkM3LAorICAgIDB4MDBCOCwgMHgwMTYxLCAweDAxMTMsIDB4MDEyMywgMHgwMTY3 LCAweDAxNEEsIDB4MDE3RSwgMHgwMTRCLAorICAgIDB4MDEwMCwgMHgwMEMxLCAweDAwQzIsIDB4 MDBDMywgMHgwMEM0LCAweDAwQzUsIDB4MDBDNiwgMHgwMTJFLAorICAgIDB4MDEwQywgMHgwMEM5 LCAweDAxMTgsIDB4MDBDQiwgMHgwMTE2LCAweDAwQ0QsIDB4MDBDRSwgMHgwMTJBLAorICAgIDB4 MDExMCwgMHgwMTQ1LCAweDAxNEMsIDB4MDEzNiwgMHgwMEQ0LCAweDAwRDUsIDB4MDBENiwgMHgw MEQ3LAorICAgIDB4MDBEOCwgMHgwMTcyLCAweDAwREEsIDB4MDBEQiwgMHgwMERDLCAweDAxNjgs IDB4MDE2QSwgMHgwMERGLAorICAgIDB4MDEwMSwgMHgwMEUxLCAweDAwRTIsIDB4MDBFMywgMHgw MEU0LCAweDAwRTUsIDB4MDBFNiwgMHgwMTJGLAorICAgIDB4MDEwRCwgMHgwMEU5LCAweDAxMTks IDB4MDBFQiwgMHgwMTE3LCAweDAwRUQsIDB4MDBFRSwgMHgwMTJCLAorICAgIDB4MDExMSwgMHgw MTQ2LCAweDAxNEQsIDB4MDEzNywgMHgwMEY0LCAweDAwRjUsIDB4MDBGNiwgMHgwMEY3LAorICAg IDB4MDBGOCwgMHgwMTczLCAweDAwRkEsIDB4MDBGQiwgMHgwMEZDLCAweDAxNjksIDB4MDE2Qiwg MHgwMkQ5Cit9OworCitzdHJ1Y3QgeF90b191bmljb2RlIHVfODg1OV81ID0geworICAgIDk2LDMy LFgyVV9JU098WDJVX1NURCxBTF9DWVJJTCwiSVNPIExhdGluL0N5cmlsbGljIiwiY3lyaWxsaWMt aXNvIiwxNDQsIkwiLAorICAgIDB4MDBBMCwgMHgwNDAxLCAweDA0MDIsIDB4MDQwMywgMHgwNDA0 LCAweDA0MDUsIDB4MDQwNiwgMHgwNDA3LAorICAgIDB4MDQwOCwgMHgwNDA5LCAweDA0MEEsIDB4 MDQwQiwgMHgwNDBDLCAweDAwQUQsIDB4MDQwRSwgMHgwNDBGLAorICAgIDB4MDQxMCwgMHgwNDEx LCAweDA0MTIsIDB4MDQxMywgMHgwNDE0LCAweDA0MTUsIDB4MDQxNiwgMHgwNDE3LAorICAgIDB4 MDQxOCwgMHgwNDE5LCAweDA0MUEsIDB4MDQxQiwgMHgwNDFDLCAweDA0MUQsIDB4MDQxRSwgMHgw NDFGLAorICAgIDB4MDQyMCwgMHgwNDIxLCAweDA0MjIsIDB4MDQyMywgMHgwNDI0LCAweDA0MjUs IDB4MDQyNiwgMHgwNDI3LAorICAgIDB4MDQyOCwgMHgwNDI5LCAweDA0MkEsIDB4MDQyQiwgMHgw NDJDLCAweDA0MkQsIDB4MDQyRSwgMHgwNDJGLAorICAgIDB4MDQzMCwgMHgwNDMxLCAweDA0MzIs IDB4MDQzMywgMHgwNDM0LCAweDA0MzUsIDB4MDQzNiwgMHgwNDM3LAorICAgIDB4MDQzOCwgMHgw NDM5LCAweDA0M0EsIDB4MDQzQiwgMHgwNDNDLCAweDA0M0QsIDB4MDQzRSwgMHgwNDNGLAorICAg IDB4MDQ0MCwgMHgwNDQxLCAweDA0NDIsIDB4MDQ0MywgMHgwNDQ0LCAweDA0NDUsIDB4MDQ0Niwg MHgwNDQ3LAorICAgIDB4MDQ0OCwgMHgwNDQ5LCAweDA0NEEsIDB4MDQ0QiwgMHgwNDRDLCAweDA0 NEQsIDB4MDQ0RSwgMHgwNDRGLAorICAgIDB4MjExNiwgMHgwNDUxLCAweDA0NTIsIDB4MDQ1Mywg MHgwNDU0LCAweDA0NTUsIDB4MDQ1NiwgMHgwNDU3LAorICAgIDB4MDQ1OCwgMHgwNDU5LCAweDA0 NUEsIDB4MDQ1QiwgMHgwNDVDLCAweDAwQTcsIDB4MDQ1RSwgMHgwNDVGCit9OworCitzdHJ1Y3Qg eF90b191bmljb2RlIHVfODg1OV82ID0geworICAgIDk2LCAzMiwgWDJVX0lTT3xYMlVfU1RELEFM X0FSQUJJQywiSVNPIExhdGluL0FyYWJpYyIsImFyYWJpYy1pc28iLDEyNywiRyIsCisgICAgMHgw MEEwLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDAwQTQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsCisgICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDA2MEMsIDB4MDBBRCwg MHhmZmZkLCAweGZmZmQsCisgICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCisgICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHgwNjFCLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDA2MUYsCisgICAgMHhmZmZkLCAweDA2 MjEsIDB4MDYyMiwgMHgwNjIzLCAweDA2MjQsIDB4MDYyNSwgMHgwNjI2LCAweDA2MjcsCisgICAg MHgwNjI4LCAweDA2MjksIDB4MDYyQSwgMHgwNjJCLCAweDA2MkMsIDB4MDYyRCwgMHgwNjJFLCAw eDA2MkYsCisgICAgMHgwNjMwLCAweDA2MzEsIDB4MDYzMiwgMHgwNjMzLCAweDA2MzQsIDB4MDYz NSwgMHgwNjM2LCAweDA2MzcsCisgICAgMHgwNjM4LCAweDA2MzksIDB4MDYzQSwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCisgICAgMHgwNjQwLCAweDA2NDEsIDB4MDY0 MiwgMHgwNjQzLCAweDA2NDQsIDB4MDY0NSwgMHgwNjQ2LCAweDA2NDcsCisgICAgMHgwNjQ4LCAw eDA2NDksIDB4MDY0QSwgMHgwNjRCLCAweDA2NEMsIDB4MDY0RCwgMHgwNjRFLCAweDA2NEYsCisg ICAgMHgwNjUwLCAweDA2NTEsIDB4MDY1MiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsCisgICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQKK307CisKK3N0cnVjdCB4X3RvX3VuaWNvZGUgdV84ODU5Xzcg PSB7CisgICAgOTYsIDMyLCBYMlVfSVNPfFgyVV9TVEQsQUxfR1JFRUssIklTTyBMYXRpbi9HcmVl ayIsICJncmVlay1pc28iLCAxMjYsICJGIiwKKyAgICAweDAwQTAsIDB4MjAxOCwgMHgyMDE5LCAw eDAwQTMsIDB4RkZGRCwgMHhGRkZELCAweDAwQTYsIDB4MDBBNywKKyAgICAweDAwQTgsIDB4MDBB OSwgMHhGRkZELCAweDAwQUIsIDB4MDBBQywgMHgwMEFELCAweEZGRkQsIDB4MjAxNSwKKyAgICAw eDAwQjAsIDB4MDBCMSwgMHgwMEIyLCAweDAwQjMsIDB4MDM4NCwgMHgwMzg1LCAweDAzODYsIDB4 MDBCNywKKyAgICAweDAzODgsIDB4MDM4OSwgMHgwMzhBLCAweDAwQkIsIDB4MDM4QywgMHgwMEJE LCAweDAzOEUsIDB4MDM4RiwKKyAgICAweDAzOTAsIDB4MDM5MSwgMHgwMzkyLCAweDAzOTMsIDB4 MDM5NCwgMHgwMzk1LCAweDAzOTYsIDB4MDM5NywKKyAgICAweDAzOTgsIDB4MDM5OSwgMHgwMzlB LCAweDAzOUIsIDB4MDM5QywgMHgwMzlELCAweDAzOUUsIDB4MDM5RiwKKyAgICAweDAzQTAsIDB4 MDNBMSwgMHhmZmZkLCAweDAzQTMsIDB4MDNBNCwgMHgwM0E1LCAweDAzQTYsIDB4MDNBNywKKyAg ICAweDAzQTgsIDB4MDNBOSwgMHgwM0FBLCAweDAzQUIsIDB4MDNBQywgMHgwM0FELCAweDAzQUUs IDB4MDNBRiwKKyAgICAweDAzQjAsIDB4MDNCMSwgMHgwM0IyLCAweDAzQjMsIDB4MDNCNCwgMHgw M0I1LCAweDAzQjYsIDB4MDNCNywKKyAgICAweDAzQjgsIDB4MDNCOSwgMHgwM0JBLCAweDAzQkIs IDB4MDNCQywgMHgwM0JELCAweDAzQkUsIDB4MDNCRiwKKyAgICAweDAzQzAsIDB4MDNDMSwgMHgw M0MyLCAweDAzQzMsIDB4MDNDNCwgMHgwM0M1LCAweDAzQzYsIDB4MDNDNywKKyAgICAweDAzQzgs IDB4MDNDOSwgMHgwM0NBLCAweDAzQ0IsIDB4MDNDQywgMHgwM0NELCAweDAzQ0UsIDB4ZmZmZAor fTsKKworc3RydWN0IHhfdG9fdW5pY29kZSB1Xzg4NTlfOCA9IHsKKyAgICA5NiwgMzIsIFgyVV9J U098WDJVX1NURCxBTF9IRUJSRVcsIklTTyBMYXRpbi9IZWJyZXciLCJoZWJyZXctaXNvIiwxMjEs IkgiLAorICAgIDB4MDBBMCwgMHhmZmZkLCAweDAwQTIsIDB4MDBBMywgMHgwMEE0LCAweDAwQTUs IDB4MDBBNiwgMHgwMEE3LAorICAgIDB4MDBBOCwgMHgwMEE5LCAweDAwRDcsIDB4MDBBQiwgMHgw MEFDLCAweDAwQUQsIDB4MDBBRSwgMHgyMDNFLAorICAgIDB4MDBCMCwgMHgwMEIxLCAweDAwQjIs IDB4MDBCMywgMHgwMEI0LCAweDAwQjUsIDB4MDBCNiwgMHgwMEI3LAorICAgIDB4MDBCOCwgMHgw MEI5LCAweDAwRjcsIDB4MDBCQiwgMHgwMEJDLCAweDAwQkQsIDB4MDBCRSwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHgyMDE3LAorICAgIDB4MDVEMCwg MHgwNUQxLCAweDA1RDIsIDB4MDVEMywgMHgwNUQ0LCAweDA1RDUsIDB4MDVENiwgMHgwNUQ3LAor ICAgIDB4MDVEOCwgMHgwNUQ5LCAweDA1REEsIDB4MDVEQiwgMHgwNURDLCAweDA1REQsIDB4MDVE RSwgMHgwNURGLAorICAgIDB4MDVFMCwgMHgwNUUxLCAweDA1RTIsIDB4MDVFMywgMHgwNUU0LCAw eDA1RTUsIDB4MDVFNiwgMHgwNUU3LAorICAgIDB4MDVFOCwgMHgwNUU5LCAweDA1RUEsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkCit9OworCitzdHJ1Y3QgeF90b191bmlj b2RlIHVfODg1OV85ID0geworICAgIDk2LCAzMiwgWDJVX0lTT3xYMlVfU1RELCBBTF9ST01BTiwg IklTTyBMYXRpbi01IiwgImxhdGluNSIsIDE0OCwgIk0iLAorICAgIDB4MDBBMCwgMHgwMEExLCAw eDAwQTIsIDB4MDBBMywgMHgwMEE0LCAweDAwQTUsIDB4MDBBNiwgMHgwMEE3LAorICAgIDB4MDBB OCwgMHgwMEE5LCAweDAwQUEsIDB4MDBBQiwgMHgwMEFDLCAweDAwQUQsIDB4MDBBRSwgMHgwMEFG LAorICAgIDB4MDBCMCwgMHgwMEIxLCAweDAwQjIsIDB4MDBCMywgMHgwMEI0LCAweDAwQjUsIDB4 MDBCNiwgMHgwMEI3LAorICAgIDB4MDBCOCwgMHgwMEI5LCAweDAwQkEsIDB4MDBCQiwgMHgwMEJD LCAweDAwQkQsIDB4MDBCRSwgMHgwMEJGLAorICAgIDB4MDBDMCwgMHgwMEMxLCAweDAwQzIsIDB4 MDBDMywgMHgwMEM0LCAweDAwQzUsIDB4MDBDNiwgMHgwMEM3LAorICAgIDB4MDBDOCwgMHgwMEM5 LCAweDAwQ0EsIDB4MDBDQiwgMHgwMENDLCAweDAwQ0QsIDB4MDBDRSwgMHgwMENGLAorICAgIDB4 MDExRSwgMHgwMEQxLCAweDAwRDIsIDB4MDBEMywgMHgwMEQ0LCAweDAwRDUsIDB4MDBENiwgMHgw MEQ3LAorICAgIDB4MDBEOCwgMHgwMEQ5LCAweDAwREEsIDB4MDBEQiwgMHgwMERDLCAweDAxMzAs IDB4MDE1RSwgMHgwMERGLAorICAgIDB4MDBFMCwgMHgwMEUxLCAweDAwRTIsIDB4MDBFMywgMHgw MEU0LCAweDAwRTUsIDB4MDBFNiwgMHgwMEU3LAorICAgIDB4MDBFOCwgMHgwMEU5LCAweDAwRUEs IDB4MDBFQiwgMHgwMEVDLCAweDAwRUQsIDB4MDBFRSwgMHgwMEVGLAorICAgIDB4MDExRiwgMHgw MEYxLCAweDAwRjIsIDB4MDBGMywgMHgwMEY0LCAweDAwRjUsIDB4MDBGNiwgMHgwMEY3LAorICAg IDB4MDBGOCwgMHgwMEY5LCAweDAwRkEsIDB4MDBGQiwgMHgwMEZDLCAweDAxMzEsIDB4MDE1Riwg MHgwMEZGCit9OworCitzdHJ1Y3QgeF90b191bmljb2RlIHVfODg1OV8xMCA9IHsKKyAgICA5Niwg MzIsIFgyVV9JU098WDJVX1NURCwgQUxfUk9NQU4sICJJU08gTGF0aW4tNiIsICJsYXRpbjYiLCAx NTcsICJWIiwKKyAgICAweDAwYTAsIDB4MDEwNCwgMHgwMTEyLCAweDAxMjIsIDB4MDEyYSwgMHgw MTI4LCAweDAxMzYsIDB4MDEzYiwKKyAgICAweDAxNDMsIDB4MDE1NiwgMHgwMTYwLCAweDAxNjYs IDB4MDE3ZCwgMHgwMGFkLCAweDAxMzgsIDB4MDE0YSwKKyAgICAweDAxMTEsIDB4MDEwNSwgMHgw MTEzLCAweDAxMjMsIDB4MDEyYiwgMHgwMTI5LCAweDAxMzcsIDB4MDEzYywKKyAgICAweDAxNDQs IDB4MDE1NywgMHgwMTYxLCAweDAxNjcsIDB4MDE3ZSwgMHgwMGJkLCAweDAwYmUsIDB4MDE0YiwK KyAgICAweDAxMDAsIDB4MDBjMSwgMHgwMGMyLCAweDAwYzMsIDB4MDBjNCwgMHgwMGM1LCAweDAw YzYsIDB4MDEyZSwKKyAgICAweDAxMGMsIDB4MDBjOSwgMHgwMTE4LCAweDAwY2IsIDB4MDExNiwg MHgwMGNkLCAweDAwY2UsIDB4MDBjZiwKKyAgICAweDAxMTAsIDB4MDE0NSwgMHgwMTRjLCAweDAw ZGUsIDB4MDBkNCwgMHgwMGQ1LCAweDAwZDYsIDB4MDE2OCwKKyAgICAweDAwZDgsIDB4MDE3Miwg MHgwMGRhLCAweDAwZGIsIDB4MDBkYywgMHgwMGRkLCAweDAwZGUsIDB4MDE2YSwKKyAgICAweDAx MDEsIDB4MDBlMSwgMHgwMGUyLCAweDAwZDMsIDB4MDBlNCwgMHgwMGU1LCAweDAwZTYsIDB4MDEy ZiwKKyAgICAweDAxMGQsIDB4MDBlOSwgMHgwMTE5LCAweDAwZWIsIDB4MDExNywgMHgwMGVkLCAw eDAwZWUsIDB4MDBlZiwKKyAgICAweDAwZjAsIDB4MDBmMSwgMHgwMTRkLCAweDAwZjMsIDB4MDBm NCwgMHgwMGY1LCAweDAwZjYsIDB4MDE2OSwKKyAgICAweDAwZjgsIDB4MDE3MywgMHgwMGZhLCAw eDAwZmIsIDB4MDBmYywgMHgwMGZkLCAweDAwZmUsIDB4MDE2YgorfTsKKworLyogTGF0aW4tOSAo SVNPIDg4NTktMTUpIGlzIHRoZSBzYW1lIGFzIExhdGluLTEgd2l0aCB0aGUgZm9sbG93aW5nIGNo YW5nZXM6CisgKiAgIEE0IGlzIEV1cm8gU3ltYm9sICAgICAgICAgICAyMEFDCisgKiAgIEE2IGlz IENhcGl0YWwgUyBDYXJvbiAgICAgICAwMTYwCisgKiAgIEE4IGlzIFNtYWxsIHMgY2Fyb24gICAg ICAgICAwMTYxCisgKiAgIEI0IGlzIENhcGl0YWwgWiBjYXJvbiAgICAgICAwMTdECisgKiAgIEI4 IGlzIFNtYWxsIHogY2Fyb24gICAgICAgICAwMTdFCisgKiAgIEJDIGlzIENhcGl0YWwgT0UgbGln YXR1cmUgICAwMTUyCisgKiAgIEJEIGlzIFNtYWxsIG9lIGxpZ2F0dXJlICAgICAwMTUzCisgKiAg IEJFIGlzIENhcGl0YWwgWSBkaWFlcmVzaXMgICAwMTc4CisgKi8KKworc3RydWN0IHhfdG9fdW5p Y29kZSB1Xzg4NTlfMTUgPSB7CisgICAgOTYsIDMyLCBYMlVfSVNPfFgyVV9TVEQsIEFMX1JPTUFO LCAiSVNPIExhdGluLTkiLCAibGF0aW45IiwgMCwgTlVMTCwKKyAgICAweDAwQTAsIDB4MDBBMSwg MHgwMEEyLCAweDAwQTMsIDB4MjBBQywgMHgwMEE1LCAweDAxNjAsIDB4MDBBNywKKyAgICAweDAx NjEsIDB4MDBBOSwgMHgwMEFBLCAweDAwQUIsIDB4MDBBQywgMHgwMEFELCAweDAwQUUsIDB4MDBB RiwKKyAgICAweDAwQjAsIDB4MDBCMSwgMHgwMEIyLCAweDAwQjMsIDB4MDE3RCwgMHgwMEI1LCAw eDAwQjYsIDB4MDBCNywKKyAgICAweDAxN0UsIDB4MDBCOSwgMHgwMEJBLCAweDAwQkIsIDB4MDE1 MiwgMHgwMTUzLCAweDAxNzgsIDB4MDBCRiwKKyAgICAweDAwQzAsIDB4MDBDMSwgMHgwMEMyLCAw eDAwQzMsIDB4MDBDNCwgMHgwMEM1LCAweDAwQzYsIDB4MDBDNywKKyAgICAweDAwQzgsIDB4MDBD OSwgMHgwMENBLCAweDAwQ0IsIDB4MDBDQywgMHgwMENELCAweDAwQ0UsIDB4MDBDRiwKKyAgICAw eDAwRDAsIDB4MDBEMSwgMHgwMEQyLCAweDAwRDMsIDB4MDBENCwgMHgwMEQ1LCAweDAwRDYsIDB4 MDBENywKKyAgICAweDAwRDgsIDB4MDBEOSwgMHgwMERBLCAweDAwREIsIDB4MDBEQywgMHgwMERE LCAweDAwREUsIDB4MDBERiwKKyAgICAweDAwRTAsIDB4MDBFMSwgMHgwMEUyLCAweDAwRTMsIDB4 MDBFNCwgMHgwMEU1LCAweDAwRTYsIDB4MDBFNywKKyAgICAweDAwRTgsIDB4MDBFOSwgMHgwMEVB LCAweDAwRUIsIDB4MDBFQywgMHgwMEVELCAweDAwRUUsIDB4MDBFRiwKKyAgICAweDAwRjAsIDB4 MDBGMSwgMHgwMEYyLCAweDAwRjMsIDB4MDBGNCwgMHgwMEY1LCAweDAwRjYsIDB4MDBGNywKKyAg ICAweDAwRjgsIDB4MDBGOSwgMHgwMEZBLCAweDAwRkIsIDB4MDBGQywgMHgwMEZELCAweDAwRkUs IDB4MDBGRgorfTsKKworLyogRHlhZGljIFN5c3RlbXMgRHlhbG9nL1ggQVBMLCBjb3JyZXNwb25k cyB0byBBUExURVJNSS5UVEYuICovCisvKiBVbmljb2RlIG1hcHBpbmdzIGFjY29yZGluZyB0byBJ U08tSUVDIC8gSlRDIDEgLyBTQyAyMiBOIDMwNjcsIDE5OTktMTItMjguICovCisKK3N0cnVjdCB4 X3RvX3VuaWNvZGUgdV9hcGwyID0geyAgICAgICAgICAvKiBEeWFkaWMgU3lzdGVtcyBBUEwgKyBi b3ggZHJhd2luZ3MgKi8KKyAgICA5NiwgMzIsIFgyVV9TVEQsIEFMX1JPTUFOLCAiRHlhZGljIFN5 c3RlbXMgQVBMIiwgImFwbC1keWFkaWMiLCAwLCBOVUxMLAorICAgIDB4MDBhMCwgMHgwMGQ3LCAw eDI1MDIsIDB4MjUyNCwgMHgwMGEyLCAweDI1MTAsIDB4MjUxNCwgMHgyNTM0LAorICAgIDB4MjUy YywgMHgyNTFjLCAweDI1MDAsIDB4MjUzYywgMHgyNTE4LCAweDI1MGMsIDB4MjIwNiwgMHgwMGY3 LAorICAgIDB4MjI2MCwgMHgyMmM0LCAweDIzNzUsIDB4MjM3NCwgMHgyMzdhLCAweDIyMGEsIDB4 MjI2MSwgMHgyMjY1LAorICAgIDB4MjI2NCwgMHgyMmE1LCAweDIyYTQsIDB4MjE5MCwgMHgyMjE4 LCAweDIzNWQsIDB4MjMzZiwgMHgyMzQwLAorICAgIDB4MjM0ZSwgMHgyMzU1LCAweDIzNGIsIDB4 MjM1MiwgMHgyMzcyLCAweDIzNzEsIDB4MjM2OCwgMHgyMzVmLAorICAgIDB4MjVhZiwgMHgyMzVl LCAweDIzMzksIDB4MjM2YiwgMHgyMzZhLCAweDIyNjIsIDB4MjMwYSwgMHgyMzA4LAorICAgIDB4 MjM0OSwgMHgyMjI5LCAweDIyMmEsIDB4MjM2YywgMHgwMGEzLCAweDIzM2QsIDB4MjI5NiwgMHgy MmEyLAorICAgIDB4MjJhMywgMHgyMzM3LCAweDAwYWYsIDB4MjM3MywgMHgwMGE4LCAweDI1Y2Is IDB4MjE5MiwgMHgyMjI4LAorICAgIDB4MjI4MiwgMHgyMjgzLCAweDIzNTksIDB4MDA0MSwgMHgw MDQyLCAweDAwNDMsIDB4MDA0NCwgMHgwMDQ1LAorICAgIDB4MDA0NiwgMHgwMDQ3LCAweDAwNDgs IDB4MDA0OSwgMHgwMDRhLCAweDAwNGIsIDB4MDA0YywgMHgwMDRkLAorICAgIDB4MDA0ZSwgMHgw MDRmLCAweDAwNTAsIDB4MDA1MSwgMHgwMDUyLCAweDAwNTMsIDB4MDA1NCwgMHgwMDU1LAorICAg IDB4MDA1NiwgMHgwMDU3LCAweDAwNTgsIDB4MDA1OSwgMHgwMDVhLCAweDIyMDcsIDB4MjE5MSwg MHgyMTkzCit9OworCitzdHJ1Y3QgeF90b191bmljb2RlIHVfYXBsMyA9IHsgICAgICAgICAgLyog QVBMLVBsdXMgPSBBUEwtMjAwMCAqLworICAgIDEyOCwgMCwgWDJVX0NYRywgQUxfUk9NQU4sICJB UEwtMjAwMCIsICJhcGwtMjAwMCIsIDAsIE5VTEwsCisgICAgMHgyMGFjLCAweDIyYTMsIDB4MjJh NCwgMHgyMmE1LCAweDIxOTAsIDB4MjE5MiwgMHgyMTkxLCAweDIxOTMsCisgICAgMHgyMjY0LCAw eDIyNjUsIDB4MjM3MiwgMHgyMzcxLCAweDI1YWYsIDB4MjM1ZSwgMHgyMzM5LCAweDIzNTksCisg ICAgMHgyMzZiLCAweDIyMDYsIDB4MjIwNywgMHgyMzRiLCAweDIzNTIsIDB4MjM1NSwgMHgyMzRl LCAweDIzMDgsCisgICAgMHgyMzBhLCAweDIzNDAsIDB4MjMzZiwgMHgyMjgyLCAweDIyODMsIDB4 MjIyOSwgMHgyMjJhLCAweDIyMjgsCisgICAgMHgwMGEwLCAweDAwYTEsIDB4MDBhMiwgMHgwMGEz LCAweDIyYTIsIDB4MDBhNSwgMHgwMGE2LCAweDAwYTcsCisgICAgMHgwMGE4LCAweDIzNWQsIDB4 MjJjNCwgMHgwMGFiLCAweDIyNjAsIDB4MjI2MSwgMHgyMzZhLCAweDAwYWYsCisgICAgMHgyMjE4 LCAweDI1Y2IsIDB4MjMzZCwgMHgyMzQ5LCAweDIyOTYsIDB4MjM1ZiwgMHgwMGI2LCAweDAwYjcs CisgICAgMHgyMzdhLCAweDIyMGEsIDB4MjM3NywgMHgwMGJiLCAweDIzNzMsIDB4MjM3NCwgMHgy Mzc1LCAweDAwYmYsCisgICAgMHgwMGMwLCAweDAwYzEsIDB4MDBjMiwgMHgwMGMzLCAweDAwYzQs IDB4MDBjNSwgMHgwMGM2LCAweDAwYzcsCisgICAgMHgwMGM4LCAweDAwYzksIDB4MDBjYSwgMHgw MGNiLCAweDAwY2MsIDB4MDBjZCwgMHgwMGNlLCAweDAwY2YsCisgICAgMHgyMzZjLCAweDAwZDEs IDB4MDBkMiwgMHgwMGQzLCAweDAwZDQsIDB4MDBkNSwgMHgwMGQ2LCAweDAwZDcsCisgICAgMHgw MGQ4LCAweDAwZDksIDB4MDBkYSwgMHgwMGRiLCAweDAwZGMsIDB4MDBkZCwgMHgyMzM3LCAweDAw ZGYsCisgICAgMHgwMGUwLCAweDAwZTEsIDB4MDBlMiwgMHgwMGUzLCAweDAwZTQsIDB4MDBlNSwg MHgwMGU2LCAweDAwZTcsCisgICAgMHgwMGU4LCAweDAwZTksIDB4MDBlYSwgMHgwMGViLCAweDAw ZWMsIDB4MDBlZCwgMHgwMGVlLCAweDAwZWYsCisgICAgMHgyMzY0LCAweDAwZjEsIDB4MDBmMiwg MHgwMGYzLCAweDAwZjQsIDB4MDBmNSwgMHgwMGY2LCAweDAwZjcsCisgICAgMHgyMjA1LCAweDAw ZjksIDB4MDBmYSwgMHgwMGZiLCAweDAwZmMsIDB4MDBmZCwgMHgyMzY4LCAweDAwZmYKK307CisK K3N0cnVjdCB4X3RvX3VuaWNvZGUgdV9hcGw0ID0geyAgICAgICAgICAvKiBJQk0gQVBMMiAqLwor ICAgIDEyOCwgMCwgWDJVX0NYRywgQUxfUk9NQU4sICJJQk0gQVBMMiIsICJhcGwyLWlibSIsIDAs IE5VTEwsCisgICAgMHgwMGM3LCAweDAwZmMsIDB4MDBlOSwgMHgwMGUyLCAweDAwZTQsIDB4MDBl MCwgMHgwMGU1LCAweDAwZTcsCisgICAgMHgwMGVhLCAweDAwZWIsIDB4MDBlOCwgMHgwMGVmLCAw eDAwZWUsIDB4MDBlYywgMHgwMGM0LCAweDAwYzUsCisgICAgMHgyNWFmLCAweDIzNWUsIDB4MjMz OSwgMHgwMGY0LCAweDAwZjYsIDB4MDBmMiwgMHgwMGZiLCAweDAwZjksCisgICAgMHgyMmE0LCAw eDAwZDYsIDB4MDBkYywgMHgwMGY4LCAweDAwYTMsIDB4MjJhNSwgMHgyMTkwLCAweDIzMzYsCisg ICAgMHgwMGUxLCAweDAwZWQsIDB4MDBmMywgMHgwMGZhLCAweDAwZjEsIDB4MDBkMSwgMHgwMGFh LCAweDAwYmEsCisgICAgMHgwMGJmLCAweDIzMDgsIDB4MDBhYywgMHgyMTkyLCAweDIyMmEsIDB4 MDBhMSwgMHgyMzU1LCAweDIzNGUsCisgICAgMHgyNTkxLCAweDI1OTIsIDB4MjU5MywgMHgyNTAy LCAweDI1MjQsIDB4MjM1ZiwgMHgyMjA2LCAweDIyMDcsCisgICAgMHgyMTkyLCAweDI1NjMsIDB4 MjU1MSwgMHgyNTU3LCAweDI1NWQsIDB4MjE5MCwgMHgyMzBhLCAweDI1MTAsCisgICAgMHgyNTE0 LCAweDI1MzQsIDB4MjUyYywgMHgyNTFjLCAweDI1MDAsIDB4MjUzYywgMHgyMTkxLCAweDIxOTMs CisgICAgMHgyNTVhLCAweDI1NTQsIDB4MjU2OSwgMHgyNTY2LCAweDI1NjAsIDB4MjU1MCwgMHgy NTZjLCAweDIyNjEsCisgICAgMHgyMzc4LCAweDIzNzcsIDB4MjIzNSwgMHgyMzM3LCAweDIzNDIs IDB4MjMzYiwgMHgyMmEyLCAweDIyYTMsCisgICAgMHgyMmM0LCAweDI1MTgsIDB4MjUwYywgMHgy NTg4LCAweDI1ODQsIDB4MDBhNiwgMHgwMGNjLCAweDI1ODAsCisgICAgMHgyMzdhLCAweDAwZGYs IDB4MjI4MiwgMHgyMjgzLCAweDIzNWQsIDB4MjM3MiwgMHgyMzc0LCAweDIzNzEsCisgICAgMHgy MzNkLCAweDIyOTYsIDB4MjVjYiwgMHgyMjI4LCAweDIzNzMsIDB4MjM0OSwgMHgwMGM1LCAweDIy MjksCisgICAgMHgyMzNmLCAweDIzNDAsIDB4MjI2NSwgMHgyMjY0LCAweDIyNjAsIDB4MDBkNywg MHgwMGY3LCAweDIzNTksCisgICAgMHgyMjE4LCAweDIzNzUsIDB4MjM2YiwgMHgyMzRiLCAweDIz NTIsIDB4MDBhZiwgMHgwMGE4LCAweDAwYTAKK307CisKK3N0cnVjdCB4X3RvX3VuaWNvZGUgdV9h cGw1ID0geyAgICAgICAgICAvKiBBUEwtMjc0MSAqLworICAgIDEyOCwgMCwgWDJVX0NYRywgQUxf Uk9NQU4sICJBUEwtMjc0MSIsICJhcGwtMjc0MSIsIDAsIE5VTEwsCisgICAgMHgyMGFjLCAweDIy YTMsIDB4MjJhNCwgMHgyMmE1LCAweDIxOTAsIDB4MjE5MiwgMHgyMTkxLCAweDIxOTMsCisgICAg MHgyMjY0LCAweDIyNjUsIDB4MjM3MiwgMHgyMzcxLCAweDI1YWYsIDB4MjM1ZSwgMHgyMzM5LCAw eDIzNTksCisgICAgMHgyMzZiLCAweDIyMDYsIDB4MjIwNywgMHgyMzRiLCAweDIzNTIsIDB4MjM1 NSwgMHgyMzRlLCAweDIzMDgsCisgICAgMHgyMzBhLCAweDIzNDAsIDB4MjMzZiwgMHgyMjgyLCAw eDIyODMsIDB4MjIyOSwgMHgyMjJhLCAweDIyMjgsCisgICAgMHgwMGEwLCAweDAwYTEsIDB4MDBh MiwgMHgwMGEzLCAweDIyYTIsIDB4MjM3OCwgMHgyMjYxLCAweDIzMzYsCisgICAgMHgwMGE4LCAw eDIzNWQsIDB4MjJjNCwgMHgyMzZjLCAweDIyNjAsIDB4MjI2MSwgMHgyMzZhLCAweDAwYWYsCisg ICAgMHgyMjE4LCAweDI1Y2IsIDB4MjMzZCwgMHgyMzQ5LCAweDIyOTYsIDB4MjM1ZiwgMHgwMGI2 LCAweDAwYjcsCisgICAgMHgyMzdhLCAweDIyMGEsIDB4MjM3NywgMHgyMjYyLCAweDIzNzMsIDB4 MjM3NCwgMHgyMzc1LCAweDAwYmYsCisgICAgMHgyNTE0LCAweDI1MzQsIDB4MjUyYywgMHgyNTFj LCAweDAwYzQsIDB4MDBjNSwgMHgwMGM2LCAweDAwYzcsCisgICAgMHgwMGM4LCAweDAwYzksIDB4 MjM0MiwgMHgyMzNiLCAweDI1MTAsIDB4MDBjZCwgMHgyNTAwLCAweDI1M2MsCisgICAgMHgyMzZj LCAweDAwZDEsIDB4MjM1MCwgMHgyMzU3LCAweDIzNDcsIDB4MjM0OCwgMHgwMGQ2LCAweDAwZDcs CisgICAgMHgwMGQ4LCAweDI1MTgsIDB4MjUwYywgMHgyNTAyLCAweDAwZGMsIDB4MjUyNCwgMHgy MzM3LCAweDAwZGYsCisgICAgMHgwMGUwLCAweDAwZTEsIDB4MDBlMiwgMHgwMGUzLCAweDAwZTQs IDB4MDBlNSwgMHgwMGU2LCAweDAwZTcsCisgICAgMHgwMGU4LCAweDAwZTksIDB4MDBlYSwgMHgw MGViLCAweDAwZWMsIDB4MDBlZCwgMHgwMGVlLCAweDAwZWYsCisgICAgMHgyMzY0LCAweDAwZjEs IDB4MDBmMiwgMHgwMGYzLCAweDAwZjQsIDB4MDBmNSwgMHgwMGY2LCAweDAwZjcsCisgICAgMHgy MjA1LCAweDAwZjksIDB4MDBmYSwgMHgwMGZiLCAweDAwZmMsIDB4MjIzNSwgMHgyMzY4LCAweDIz NjUKK307CisKKy8qIDgtYml0IEdPU1Qgc3RhbmRhcmQgc2V0cyAqLworCitzdHJ1Y3QgeF90b191 bmljb2RlIHVfa29pOCA9IHsKKyAgICA5NiwgMzIsIFgyVV9TVEQsIEFMX0NZUklMLCAiS09JLTgi LCAia29pOCIsIDAsIE5VTEwsCisgICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCisgICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCisgICAgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCisg ICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsCisgICAgMHgwNDRFLCAweDA0MzAsIDB4MDQzMSwgMHgwNDQ2LCAweDA0MzQsIDB4 MDQzNSwgMHgwNDQ0LCAweDA0MzMsCisgICAgMHgwNDQ1LCAweDA0MzgsIDB4MDQzOSwgMHgwNDNB LCAweDA0M0IsIDB4MDQzQywgMHgwNDNELCAweDA0M0UsCisgICAgMHgwNDNGLCAweDA0NEYsIDB4 MDQ0MCwgMHgwNDQxLCAweDA0NDIsIDB4MDQ0MywgMHgwNDM2LCAweDA0MzIsCisgICAgMHgwNDRD LCAweDA0NEIsIDB4MDQzNywgMHgwNDQ4LCAweDA0NEQsIDB4MDQ0OSwgMHgwNDQ3LCAweDA0NEEs CisgICAgMHgwNDJFLCAweDA0MTAsIDB4MDQxMSwgMHgwNDI2LCAweDA0MTQsIDB4MDQxNSwgMHgw NDI0LCAweDA0MTMsCisgICAgMHgwNDI1LCAweDA0MTgsIDB4MDQxOSwgMHgwNDFBLCAweDA0MUIs IDB4MDQxQywgMHgwNDFELCAweDA0MUUsCisgICAgMHgwNDFGLCAweDA0MkYsIDB4MDQyMCwgMHgw NDIxLCAweDA0MjIsIDB4MDQyMywgMHgwNDE2LCAweDA0MTIsCisgICAgMHgwNDJDLCAweDA0MkIs IDB4MDQxNywgMHgwNDI4LCAweDA0MkQsIDB4MDQyOSwgMHgwNDI3LCAweGZmZmQKK307CisKKy8q IE90aGVyIEtPSS04IGJhc2VkIHNldHMgKi8KKworc3RydWN0IHhfdG9fdW5pY29kZSB1X2tvaThy ID0geyAgICAgICAgIC8qIChSdXNzaWEpIFRhYmxlIGZyb20gUkZDMTQ4OSAqLworICAgIDEyOCwg MCwgWDJVX0NQLCBBTF9DWVJJTCwgIktPSTgtUiIsICJrb2k4ciIsIDAsIE5VTEwsCisgICAgMHgy NTAwLCAweDI1MDIsIDB4MjUwQywgMHgyNTEwLCAweDI1MTQsIDB4MjUxOCwgMHgyNTFDLCAweDI1 MjQsCisgICAgMHgyNTJDLCAweDI1MzQsIDB4MjUzQywgMHgyNTgwLCAweDI1ODQsIDB4MjU4OCwg MHgyNThDLCAweDI1OTAsCisgICAgMHgyNTkxLCAweDI1OTIsIDB4MjU5MywgMHgyMzIwLCAweDI1 QTAsIDB4MjIxOSwgMHgyMjFBLCAweDIyNDgsCisgICAgMHgyMjY0LCAweDIyNjUsIDB4MDBBMCwg MHgyMzIxLCAweDAwQjAsIDB4MDBCMiwgMHgwMEI3LCAweDAwRjcsCisgICAgMHgyNTUwLCAweDI1 NTEsIDB4MjU1MiwgMHgwNDUxLCAweDI1NTMsIDB4MjU1NCwgMHgyNTU1LCAweDI1NTYsCisgICAg MHgyNTU3LCAweDI1NTgsIDB4MjU1OSwgMHgyNTVBLCAweDI1NUIsIDB4MjU1QywgMHgyNTVELCAw eDI1NUUsCisgICAgMHgyNTVGLCAweDI1NjAsIDB4MjU2MSwgMHgwNDAxLCAweDI1NjIsIDB4MjU2 MywgMHgyNTY0LCAweDI1NjUsCisgICAgMHgyNTY2LCAweDI1NjcsIDB4MjU2OCwgMHgyNTY5LCAw eDI1NkEsIDB4MjU2QiwgMHgyNTZDLCAweDAwQTksCisgICAgMHgwNDRFLCAweDA0MzAsIDB4MDQz MSwgMHgwNDQ2LCAweDA0MzQsIDB4MDQzNSwgMHgwNDQ0LCAweDA0MzMsCisgICAgMHgwNDQ1LCAw eDA0MzgsIDB4MDQzOSwgMHgwNDNBLCAweDA0M0IsIDB4MDQzQywgMHgwNDNELCAweDA0M0UsCisg ICAgMHgwNDNGLCAweDA0NEYsIDB4MDQ0MCwgMHgwNDQxLCAweDA0NDIsIDB4MDQ0MywgMHgwNDM2 LCAweDA0MzIsCisgICAgMHgwNDRDLCAweDA0NEIsIDB4MDQzNywgMHgwNDQ4LCAweDA0NEQsIDB4 MDQ0OSwgMHgwNDQ3LCAweDA0NEEsCisgICAgMHgwNDJFLCAweDA0MTAsIDB4MDQxMSwgMHgwNDI2 LCAweDA0MTQsIDB4MDQxNSwgMHgwNDI0LCAweDA0MTMsCisgICAgMHgwNDI1LCAweDA0MTgsIDB4 MDQxOSwgMHgwNDFBLCAweDA0MUIsIDB4MDQxQywgMHgwNDFELCAweDA0MUUsCisgICAgMHgwNDFG LCAweDA0MkYsIDB4MDQyMCwgMHgwNDIxLCAweDA0MjIsIDB4MDQyMywgMHgwNDE2LCAweDA0MTIs CisgICAgMHgwNDJDLCAweDA0MkIsIDB4MDQxNywgMHgwNDI4LCAweDA0MkQsIDB4MDQyOSwgMHgw NDI3LCAweDA0MkEKK307CisKK3N0cnVjdCB4X3RvX3VuaWNvZGUgdV9rb2k4dSA9IHsgICAgICAg ICAvKiAoVWtyYWluZSkgRnJvbSBSRkMyMzE5ICovCisgICAxMjgsIDAsIFgyVV9DUCwgQUxfQ1lS SUwsICJLT0k4LVUiLCAia29pOHUiLCAwLCBOVUxMLAorICAgIDB4MjUwMCwgMHgyNTAyLCAweDI1 MEMsIDB4MjUxMCwgMHgyNTE0LCAweDI1MTgsIDB4MjUxQywgMHgyNTI0LAorICAgIDB4MjUyQywg MHgyNTM0LCAweDI1M0MsIDB4MjU4MCwgMHgyNTg0LCAweDI1ODgsIDB4MjU4QywgMHgyNTkwLAor ICAgIDB4MjU5MSwgMHgyNTkyLCAweDI1OTMsIDB4MjMyMCwgMHgyNUEwLCAweDIyMTksIDB4MjIx QSwgMHgyMjQ4LAorICAgIDB4MjI2NCwgMHgyMjY1LCAweDAwQTAsIDB4MjMyMSwgMHgwMEIwLCAw eDAwQjIsIDB4MDBCNywgMHgwMEY3LAorICAgIDB4MjU1MCwgMHgyNTUxLCAweDI1NTIsIDB4MDQ1 MSwgMHgwNDU0LCAweDI1NTQsIDB4MDQ1NiwgMHgwNDU3LAorICAgIDB4MjU1NywgMHgyNTU4LCAw eDI1NTksIDB4MjU1QSwgMHgyNTVCLCAweDA0OTEsIDB4MjU1RCwgMHgyNTVFLAorICAgIDB4MjU1 RiwgMHgyNTYwLCAweDI1NjEsIDB4MDQwMSwgMHgwNDA0LCAweDI1NjMsIDB4MDQwNiwgMHgwNDA3 LAorICAgIDB4MjU2NiwgMHgyNTY3LCAweDI1NjgsIDB4MjU2OSwgMHgyNTZBLCAweDA0OTAsIDB4 MjU2QywgMHgwMEE5LAorICAgIDB4MDQ0RSwgMHgwNDMwLCAweDA0MzEsIDB4MDQ0NiwgMHgwNDM0 LCAweDA0MzUsIDB4MDQ0NCwgMHgwNDMzLAorICAgIDB4MDQ0NSwgMHgwNDM4LCAweDA0MzksIDB4 MDQzQSwgMHgwNDNCLCAweDA0M0MsIDB4MDQzRCwgMHgwNDNFLAorICAgIDB4MDQzRiwgMHgwNDRG LCAweDA0NDAsIDB4MDQ0MSwgMHgwNDQyLCAweDA0NDMsIDB4MDQzNiwgMHgwNDMyLAorICAgIDB4 MDQ0QywgMHgwNDRCLCAweDA0MzcsIDB4MDQ0OCwgMHgwNDRELCAweDA0NDksIDB4MDQ0NywgMHgw NDRBLAorICAgIDB4MDQyRSwgMHgwNDEwLCAweDA0MTEsIDB4MDQyNiwgMHgwNDE0LCAweDA0MTUs IDB4MDQyNCwgMHgwNDEzLAorICAgIDB4MDQyNSwgMHgwNDE4LCAweDA0MTksIDB4MDQxQSwgMHgw NDFCLCAweDA0MUMsIDB4MDQxRCwgMHgwNDFFLAorICAgIDB4MDQxRiwgMHgwNDJGLCAweDA0MjAs IDB4MDQyMSwgMHgwNDIyLCAweDA0MjMsIDB4MDQxNiwgMHgwNDEyLAorICAgIDB4MDQyQywgMHgw NDJCLCAweDA0MTcsIDB4MDQyOCwgMHgwNDJELCAweDA0MjksIDB4MDQyNywgMHgwNDJBCit9Owor CisvKiBQQyBDb2RlIFBhZ2VzICovCisKK3N0cnVjdCB4X3RvX3VuaWNvZGUgdV9jcDQzNyA9IHsK KyAgICAxMjgsIDAsIFgyVV9DUCwgQUxfUk9NQU4sIlBDIENvZGUgUGFnZSA0MzciLCJjcDQzNyIs IDAsIE5VTEwsCisgICAgMHgwMGM3LCAweDAwZmMsIDB4MDBlOSwgMHgwMGUyLCAweDAwZTQsIDB4 MDBlMCwgMHgwMGU1LCAweDAwZTcsCisgICAgMHgwMGVhLCAweDAwZWIsIDB4MDBlOCwgMHgwMGVm LCAweDAwZWUsIDB4MDBlYywgMHgwMGM0LCAweDAwYzUsCisgICAgMHgwMGM5LCAweDAwZTYsIDB4 MDBjNiwgMHgwMGY0LCAweDAwZjYsIDB4MDBmMiwgMHgwMGZiLCAweDAwZjksCisgICAgMHgwMGZm LCAweDAwZDYsIDB4MDBkYywgMHgwMGEyLCAweDAwYTMsIDB4MDBhNSwgMHgyMGE3LCAweDAxOTIs CisgICAgMHgwMGUxLCAweDAwZWQsIDB4MDBmMywgMHgwMGZhLCAweDAwZjEsIDB4MDBkMSwgMHgw MGFhLCAweDAwYmEsCisgICAgMHgwMGJmLCAweDIzMTAsIDB4MDBhYywgMHgwMGJkLCAweDAwYmMs IDB4MDBhMSwgMHgwMGFiLCAweDAwYmIsCisgICAgMHgyNTkxLCAweDI1OTIsIDB4MjU5MywgMHgy NTAyLCAweDI1MjQsIDB4MjU2MSwgMHgyNTYyLCAweDI1NTYsCisgICAgMHgyNTU1LCAweDI1NjMs IDB4MjU1MSwgMHgyNTU3LCAweDI1NWQsIDB4MjU1YywgMHgyNTViLCAweDI1MTAsCisgICAgMHgy NTE0LCAweDI1MzQsIDB4MjUyYywgMHgyNTFjLCAweDI1MDAsIDB4MjUzYywgMHgyNTVlLCAweDI1 NWYsCisgICAgMHgyNTVhLCAweDI1NTQsIDB4MjU2OSwgMHgyNTY2LCAweDI1NjAsIDB4MjU1MCwg MHgyNTZjLCAweDI1NjcsCisgICAgMHgyNTY4LCAweDI1NjQsIDB4MjU2NSwgMHgyNTU5LCAweDI1 NTgsIDB4MjU1MiwgMHgyNTUzLCAweDI1NmIsCisgICAgMHgyNTZhLCAweDI1MTgsIDB4MjUwYywg MHgyNTg4LCAweDI1ODQsIDB4MjU4YywgMHgyNTkwLCAweDI1ODAsCisgICAgMHgwM2IxLCAweDAw ZGYsIDB4MDM5MywgMHgwM2MwLCAweDAzYTMsIDB4MDNjMywgMHgwMGI1LCAweDAzYzQsCisgICAg MHgwM2E2LCAweDAzOTgsIDB4MDNhOSwgMHgwM2I0LCAweDIyMWUsIDB4MDNjNiwgMHgwM2I1LCAw eDIyMjksCisgICAgMHgyMjYxLCAweDAwYjEsIDB4MjI2NSwgMHgyMjY0LCAweDIzMjAsIDB4MjMy MSwgMHgwMGY3LCAweDIyNDgsCisgICAgMHgwMGIwLCAweDIyMTksIDB4MDBiNywgMHgyMjFhLCAw eDIwN2YsIDB4MDBiMiwgLyogMHgyNWFlICovIDB4MjVhMCwgMHgwMGEwCit9OworCitzdHJ1Y3Qg eF90b191bmljb2RlIHVfbWF6b3ZpYSA9IHsKKyAgICAxMjgsIDAsIFgyVV9DUCwgQUxfUk9NQU4s IlBvbGlzaCBNYXpvdmlhIFBDIENvZGUgUGFnZSIsIm1hem92aWEiLCAwLCBOVUxMLAorICAgIDB4 MDBjNywgMHgwMGZjLCAweDAwZTksIDB4MDBlMiwgMHgwMGU0LCAweDAwZTAsIDB4MDEwNSwgMHgw MGU3LCAvKiA4MCAqLworICAgIDB4MDBlYSwgMHgwMGViLCAweDAwZTgsIDB4MDBlZiwgMHgwMGVl LCAweDAxMDcsIDB4MDBjNCwgMHgwMTA0LCAvKiA4OCAqLworICAgIDB4MDExOCwgMHgwMTE5LCAw eDAxNDIsIDB4MDBmNCwgMHgwMGY2LCAweDAxMDYsIDB4MDBmYiwgMHgwMGY5LCAvKiA5MCAqLwor ICAgIDB4MDE1YSwgMHgwMGQ2LCAweDAwZGMsIDB4MDBhMiwgMHgwMTQxLCAweDAwYTUsIDB4MDE1 YiwgMHgwMTkyLCAvKiA5OCAqLworICAgIDB4MDE3OSwgMHgwMTdiLCAweDAwZjMsIDB4MDBkMywg MHgwMTQ0LCAweDAxNDMsIDB4MDE3YSwgMHgwMTdjLCAvKiBhMCAqLworICAgIDB4MDBiZiwgMHgy MzEwLCAweDAwYWMsIDB4MDBiZCwgMHgwMGJjLCAweDAwYTEsIDB4MDBhYiwgMHgwMGJiLCAvKiBh OCAqLworICAgIDB4MjU5MSwgMHgyNTkyLCAweDI1OTMsIDB4MjUwMiwgMHgyNTI0LCAweDI1NjEs IDB4MjU2MiwgMHgyNTU2LCAvKiBiMCAqLworICAgIDB4MjU1NSwgMHgyNTYzLCAweDI1NTEsIDB4 MjU1NywgMHgyNTVkLCAweDI1NWMsIDB4MjU1YiwgMHgyNTEwLCAvKiBiOCAqLworICAgIDB4MjUx NCwgMHgyNTM0LCAweDI1MmMsIDB4MjUxYywgMHgyNTAwLCAweDI1M2MsIDB4MjU1ZSwgMHgyNTVm LCAvKiBjMCAqLworICAgIDB4MjU1YSwgMHgyNTU0LCAweDI1NjksIDB4MjU2NiwgMHgyNTYwLCAw eDI1NTAsIDB4MjU2YywgMHgyNTY3LCAvKiBjOCAqLworICAgIDB4MjU2OCwgMHgyNTY0LCAweDI1 NjUsIDB4MjU1OSwgMHgyNTU4LCAweDI1NTIsIDB4MjU1MywgMHgyNTZiLCAvKiBkMCAqLworICAg IDB4MjU2YSwgMHgyNTE4LCAweDI1MGMsIDB4MjU4OCwgMHgyNTg0LCAweDI1OGMsIDB4MjU5MCwg MHgyNTgwLCAvKiBkOCAqLworICAgIDB4MDNiMSwgMHgwMGRmLCAweDAzOTMsIDB4MDNjMCwgMHgw M2EzLCAweDAzYzMsIDB4MDBiNSwgMHgwM2M0LCAvKiBlMCAqLworICAgIDB4MDNhNiwgMHgwMzk4 LCAweDAzYTksIDB4MDNiNCwgMHgyMjFlLCAweDAzYzYsIDB4MDNiNSwgMHgyMjI5LCAvKiBlOCAq LworICAgIDB4MjI2MSwgMHgwMGIxLCAweDIyNjUsIDB4MjI2NCwgMHgyMzIwLCAweDIzMjEsIDB4 MDBmNywgMHgyMjQ4LCAvKiBmMCAqLworICAgIDB4MDBiMCwgMHgyMjE5LCAweDAwYjcsIDB4MjIx YSwgMHgyMDdmLCAweDAwYjIsIDB4MjVhMCwgMHgwMGEwICAvKiBmOCAqLworfTsKKworc3RydWN0 IHhfdG9fdW5pY29kZSB1X2NwODUwID0geworICAgIDEyOCwgMCwgWDJVX0NQLCBBTF9ST01BTiwi UEMgQ29kZSBQYWdlIDg1MCIsImNwODUwIiwgMCwgTlVMTCwKKyAgICAweDAwYzcsIDB4MDBmYywg MHgwMGU5LCAweDAwZTIsIDB4MDBlNCwgMHgwMGUwLCAweDAwZTUsIDB4MDBlNywKKyAgICAweDAw ZWEsIDB4MDBlYiwgMHgwMGU4LCAweDAwZWYsIDB4MDBlZSwgMHgwMGVjLCAweDAwYzQsIDB4MDBj NSwKKyAgICAweDAwYzksIDB4MDBlNiwgMHgwMGM2LCAweDAwZjQsIDB4MDBmNiwgMHgwMGYyLCAw eDAwZmIsIDB4MDBmOSwKKyAgICAweDAwZmYsIDB4MDBkNiwgMHgwMGRjLCAweDAwZjgsIDB4MDBh MywgMHgwMGQ4LCAweDAwZDcsIDB4MDE5MiwKKyAgICAweDAwZTEsIDB4MDBlZCwgMHgwMGYzLCAw eDAwZmEsIDB4MDBmMSwgMHgwMGQxLCAweDAwYWEsIDB4MDBiYSwKKyAgICAweDAwYmYsIDB4MDBh ZSwgMHgwMGFjLCAweDAwYmQsIDB4MDBiYywgMHgwMGExLCAweDAwYWIsIDB4MDBiYiwKKyAgICAw eDI1OTEsIDB4MjU5MiwgMHgyNTkzLCAweDI1MDIsIDB4MjUyNCwgMHgwMGMxLCAweDAwYzIsIDB4 MDBjMCwKKyAgICAweDAwYTksIDB4MjU2MywgMHgyNTUxLCAweDI1NTcsIDB4MjU1ZCwgMHgwMGEy LCAweDAwYTUsIDB4MjUxMCwKKyAgICAweDI1MTQsIDB4MjUzNCwgMHgyNTJjLCAweDI1MWMsIDB4 MjUwMCwgMHgyNTNjLCAweDAwZTMsIDB4MDBjMywKKyAgICAweDI1NWEsIDB4MjU1NCwgMHgyNTY5 LCAweDI1NjYsIDB4MjU2MCwgMHgyNTUwLCAweDI1NmMsIDB4MDBhNCwKKyAgICAweDAwZjAsIDB4 MDBkMCwgMHgwMGNhLCAweDAwY2IsIDB4MDBjOCwgMHgwMTMxLCAweDAwY2QsIDB4MDBjZSwKKyAg ICAweDAwY2YsIDB4MjUxOCwgMHgyNTBjLCAweDI1ODgsIDB4MjU4NCwgMHgwMGE2LCAweDAwY2Ms IDB4MjU4MCwKKyAgICAweDAwZDMsIDB4MDBkZiwgMHgwMGQ0LCAweDAwZDIsIDB4MDBmNSwgMHgw MGQ1LCAweDAwYjUsIDB4MDBmZSwKKyAgICAweDAwZGUsIDB4MDBkYSwgMHgwMGRiLCAweDAwZDks IDB4MDBmZCwgMHgwMGRkLCAweDAwYWYsIDB4MDBiNCwKKyAgICAweDAwYWQsIDB4MDBiMSwgMHgy MDE3LCAweDAwYmUsIDB4MDBiNiwgMHgwMGE3LCAweDAwZjcsIDB4MDBiOCwKKyAgICAweDAwYjAs IDB4MDBhOCwgMHgwMGI3LCAweDAwYjksIDB4MDBiMywgMHgwMGIyLCAweDI1YTAsIDB4MDBhMAor fTsKKworc3RydWN0IHhfdG9fdW5pY29kZSB1X2NwODUyID0geworICAgIDEyOCwgMCwgWDJVX0NQ LCBBTF9ST01BTiwiUEMgQ29kZSBQYWdlIDg1MiIsImNwODUyIiwgMCwgTlVMTCwKKyAgICAweDAw YzcsIDB4MDBmYywgMHgwMGU5LCAweDAwZTIsIDB4MDBlNCwgMHgwMTZmLCAweDAxMDcsIDB4MDBl NywKKyAgICAweDAxNDIsIDB4MDBlYiwgMHgwMTUwLCAweDAxNTEsIDB4MDBlZSwgMHgwMTc5LCAw eDAwYzQsIDB4MDEwNiwKKyAgICAweDAwYzksIDB4MDEzOSwgMHgwMTNhLCAweDAwZjQsIDB4MDBm NiwgMHgwMTNkLCAweDAxM2UsIDB4MDE1YSwKKyAgICAweDAxNWIsIDB4MDBkNiwgMHgwMGRjLCAw eDAxNjQsIDB4MDE2NSwgMHgwMTQxLCAweDAwZDcsIDB4MDEwZCwKKyAgICAweDAwZTEsIDB4MDBl ZCwgMHgwMGYzLCAweDAwZmEsIDB4MDEwNCwgMHgwMTA1LCAweDAxN2QsIDB4MDE3ZSwKKyAgICAw eDAxMTgsIDB4MDExOSwgMHgwMGFjLCAweDAxN2EsIDB4MDEwYywgMHgwMTVmLCAweDAwYWIsIDB4 MDBiYiwKKyAgICAweDI1OTEsIDB4MjU5MiwgMHgyNTkzLCAweDI1MDIsIDB4MjUyNCwgMHgwMGMx LCAweDAwYzIsIDB4MDExYSwKKyAgICAweDAxNWUsIDB4MjU2MywgMHgyNTUxLCAweDI1NTcsIDB4 MjU1ZCwgMHgwMTdiLCAweDAxN2MsIDB4MjUxMCwKKyAgICAweDI1MTQsIDB4MjUzNCwgMHgyNTJj LCAweDI1MWMsIDB4MjUwMCwgMHgyNTNjLCAweDAxMDIsIDB4MDEwMywKKyAgICAweDI1NWEsIDB4 MjU1NCwgMHgyNTY5LCAweDI1NjYsIDB4MjU2MCwgMHgyNTUwLCAweDI1NmMsIDB4MDBhNCwKKyAg ICAweDAxMTEsIDB4MDExMCwgMHgwMTBlLCAweDAwY2IsIDB4MDEwZiwgMHgwMTQ3LCAweDAwY2Qs IDB4MDBjZSwKKyAgICAweDAxMWIsIDB4MjUxOCwgMHgyNTBjLCAweDI1ODgsIDB4MjU4NCwgMHgw MTYyLCAweDAxNmUsIDB4MjU4MCwKKyAgICAweDAwZDMsIDB4MDBkZiwgMHgwMGQ0LCAweDAxNDMs IDB4MDE0NCwgMHgwMTQ4LCAweDAxNjAsIDB4MDE2MSwKKyAgICAweDAxNTQsIDB4MDBkYSwgMHgw MTU1LCAweDAxNzAsIDB4MDBmZCwgMHgwMGRkLCAweDAxNjMsIDB4MDBiNCwKKyAgICAweDAwYWQs IDB4MDJkZCwgMHgwMmRiLCAweDAyYzcsIDB4MDJkOCwgMHgwMGE3LCAweDAwZjcsIDB4MDBiOCwK KyAgICAweDAwYjAsIDB4MDBhOCwgMHgwMmQ5LCAweDAxNzEsIDB4MDE1OCwgMHgwMTU5LCAweDI1 YTAsIDB4MDBhMAorfTsKKworc3RydWN0IHhfdG9fdW5pY29kZSB1X2NwODU1ID0geyAgICAgICAg IC8qIENQODU1IEN5cmlsbGljIHRvIFVuaWNvZGUgKi8KKyAgICAxMjgsIDAsIFgyVV9DUCwgQUxf Q1lSSUwsIlBDIENvZGUgUGFnZSA4NTUiLCJjcDg1NSIsIDAsIE5VTEwsCisgICAgMHgwNDUyLCAw eDA0MDIsIDB4MDQ1MywgMHgwNDAzLCAweDA0NTEsIDB4MDQwMSwgMHgwNDU0LCAweDA0MDQsCisg ICAgMHgwNDU1LCAweDA0MDUsIDB4MDQ1NiwgMHgwNDA2LCAweDA0NTcsIDB4MDQwNywgMHgwNDU4 LCAweDA0MDgsCisgICAgMHgwNDU5LCAweDA0MDksIDB4MDQ1YSwgMHgwNDBhLCAweDA0NWIsIDB4 MDQwYiwgMHgwNDVjLCAweDA0MGMsCisgICAgMHgwNDVlLCAweDA0MGUsIDB4MDQ1ZiwgMHgwNDBm LCAweDA0NGUsIDB4MDQyZSwgMHgwNDRhLCAweDA0MmEsCisgICAgMHgwNDMwLCAweDA0MTAsIDB4 MDQzMSwgMHgwNDExLCAweDA0NDYsIDB4MDQyNiwgMHgwNDM0LCAweDA0MTQsCisgICAgMHgwNDM1 LCAweDA0MTUsIDB4MDQ0NCwgMHgwNDI0LCAweDA0MzMsIDB4MDQxMywgMHgwMGFiLCAweDAwYmIs CisgICAgMHgyNTkxLCAweDI1OTIsIDB4MjU5MywgMHgyNTAyLCAweDI1MjQsIDB4MDQ0NSwgMHgw NDI1LCAweDA0MzgsCisgICAgMHgwNDE4LCAweDI1NjMsIDB4MjU1MSwgMHgyNTU3LCAweDI1NWQs IDB4MDQzOSwgMHgwNDE5LCAweDI1MTAsCisgICAgMHgyNTE0LCAweDI1MzQsIDB4MjUyYywgMHgy NTFjLCAweDI1MDAsIDB4MjUzYywgMHgwNDNhLCAweDA0MWEsCisgICAgMHgyNTVhLCAweDI1NTQs IDB4MjU2OSwgMHgyNTY2LCAweDI1NjAsIDB4MjU1MCwgMHgyNTZjLCAweDAwYTQsCisgICAgMHgw NDNiLCAweDA0MWIsIDB4MDQzYywgMHgwNDFjLCAweDA0M2QsIDB4MDQxZCwgMHgwNDNlLCAweDA0 MWUsCisgICAgMHgwNDNmLCAweDI1MTgsIDB4MjUwYywgMHgyNTg4LCAweDI1ODQsIDB4MDQxZiwg MHgwNDRmLCAweDI1ODAsCisgICAgMHgwNDJmLCAweDA0NDAsIDB4MDQyMCwgMHgwNDQxLCAweDA0 MjEsIDB4MDQ0MiwgMHgwNDIyLCAweDA0NDMsCisgICAgMHgwNDIzLCAweDA0MzYsIDB4MDQxNiwg MHgwNDMyLCAweDA0MTIsIDB4MDQ0YywgMHgwNDJjLCAweDIxMTYsCisgICAgMHgwMDJkLCAweDA0 NGIsIDB4MDQyYiwgMHgwNDM3LCAweDA0MTcsIDB4MDQ0OCwgMHgwNDI4LCAweDA0NGQsCisgICAg MHgwNDJkLCAweDA0NDksIDB4MDQyOSwgMHgwNDQ3LCAweDA0MjcsIDB4MDBhNywgMHgyNWEwLCAw eDAwMjAKK307CisKK3N0cnVjdCB4X3RvX3VuaWNvZGUgdV9jcDg1NiA9IHsgICAgICAgICAvKiBD UDg1NiAoQnVsZ2FyaWEpIHRvIFVuaWNvZGUgKi8KKyAgICAxMjgsIDAsIFgyVV9DUCwgQUxfQ1lS SUwsIlBDIENvZGUgUGFnZSA4NTYiLCJjcDg1NiIsIDAsIE5VTEwsCisgICAgMHgwNDEwLCAweDA0 MTEsIDB4MDQxMiwgMHgwNDEzLCAweDA0MTQsIDB4MDQxNSwgMHgwNDE2LCAweDA0MTcsCisgICAg MHgwNDE4LCAweDA0MTksIDB4MDQxYSwgMHgwNDFiLCAweDA0MWMsIDB4MDQxZCwgMHgwNDFlLCAw eDA0MWYsCisgICAgMHgwNDIwLCAweDA0MjEsIDB4MDQyMiwgMHgwNDIzLCAweDA0MjQsIDB4MDQy NSwgMHgwNDI2LCAweDA0MjcsCisgICAgMHgwNDI4LCAweDA0MjksIDB4MDQyYSwgMHgwNDJiLCAw eDA0MmMsIDB4MDQyZCwgMHgwNDJlLCAweDA0MmYsCisgICAgMHgwNDMwLCAweDA0MzEsIDB4MDQz MiwgMHgwNDMzLCAweDA0MzQsIDB4MDQzNSwgMHgwNDM2LCAweDA0MzcsCisgICAgMHgwNDM4LCAw eDA0MzksIDB4MDQzYSwgMHgwNDNiLCAweDA0M2MsIDB4MDQzZCwgMHgwNDNlLCAweDA0M2YsCisg ICAgMHgwNDQwLCAweDA0NDEsIDB4MDQ0MiwgMHgwNDQzLCAweDA0NDQsIDB4MDQ0NSwgMHgwNDQ2 LCAweDA0NDcsCisgICAgMHgwNDQ4LCAweDA0NDksIDB4MDQ0YSwgMHgwNDRiLCAweDA0NGMsIDB4 MDQ0ZCwgMHgwNDRlLCAweDA0NGYsCisgICAgMHgyNTE0LCAweDI1MzQsIDB4MjUyYywgMHgyNTFj LCAweDI1MDAsIDB4MjUzYywgMHgyNTYzLCAweDI1NTEsCisgICAgMHgyNTVhLCAweDI1NTQsIDB4 MjU2OSwgMHgyNTY2LCAweDI1NjAsIDB4MjU1MCwgMHgyNTZjLCAweDI1MTAsCisgICAgMHgyNTkx LCAweDI1OTIsIDB4MjU5MywgMHgyNTAyLCAweDI1MjQsIDB4MjExNiwgMHgwMGE3LCAweDI1NTcs CisgICAgMHgyNTVkLCAweDI1MTgsIDB4MjUwYywgMHgyNTg4LCAweDI1ODQsIDB4MjU4YywgMHgy NTkwLCAweDI1ODAsCisgICAgMHgwM2IxLCAweDAwZGYsIDB4MDM5MywgMHgwM2MwLCAweDAzYTMs IDB4MDNjMywgMHgwMGI1LCAweDAzYzQsCisgICAgMHgwM2E2LCAweDAzOTgsIDB4MDNhOSwgMHgw M2I0LCAweDIyMWUsIDB4MDNjNiwgMHgwM2I1LCAweDIyMjksCisgICAgMHgyMjYxLCAweDAwYjEs IDB4MjI2NSwgMHgyMjY0LCAweDIzMjAsIDB4MjMyMSwgMHgwMGY3LCAweDIyNDgsCisgICAgMHgw MGIwLCAweDIyMTksIDB4MDBiNywgMHgyMjFhLCAweDIwN2YsIDB4MDBiMiwgMHgyNWEwLCAweDAw YTAKK307CisKK3N0cnVjdCB4X3RvX3VuaWNvZGUgdV9jcDg1NyA9IHsKKyAgICAxMjgsIDAsIFgy VV9DUCwgQUxfUk9NQU4sIlBDIENvZGUgUGFnZSA4NTciLCJjcDg1NyIsIDAsIE5VTEwsCisgICAg MHgwMGM3LCAweDAwZmMsIDB4MDBlOSwgMHgwMGUyLCAweDAwZTQsIDB4MDBlMCwgMHgwMGU1LCAw eDAwZTcsIC8qIDB4ODAgKi8KKyAgICAweDAwZWEsIDB4MDBlYiwgMHgwMGU4LCAweDAwZWYsIDB4 MDBlZSwgMHgwMTMxLCAweDAwYzQsIDB4MDBjNSwgLyogMHg4OCAqLworICAgIDB4MDBjOSwgMHgw MGU2LCAweDAwYzYsIDB4MDBmNCwgMHgwMGY2LCAweDAwZjIsIDB4MDBmYiwgMHgwMGY5LCAvKiAw eDkwICovCisgICAgMHgwMTMwLCAweDAwZDYsIDB4MDBkYywgMHgwMGY4LCAweDAwYTMsIDB4MDBk OCwgMHgwMTVlLCAweDAxNWYsIC8qIDB4OTggKi8KKyAgICAweDAwZTEsIDB4MDBlZCwgMHgwMGYz LCAweDAwZmEsIDB4MDBmMSwgMHgwMGQxLCAweDAxMWUsIDB4MDExZiwgLyogMHhhMCAqLworICAg IDB4MDBiZiwgMHgwMGFlLCAweDAwYWMsIDB4MDBiZCwgMHgwMGJjLCAweDAwYTEsIDB4MDBhYiwg MHgwMGJiLCAvKiAweGE4ICovCisgICAgMHgyNTkxLCAweDI1OTIsIDB4MjU5MywgMHgyNTAyLCAw eDI1MjQsIDB4MDBjMSwgMHgwMGMyLCAweDAwYzAsIC8qIDB4YjAgKi8KKyAgICAweDAwYTksIDB4 MjU2MywgMHgyNTUxLCAweDI1NTcsIDB4MjU1ZCwgMHgwMGEyLCAweDAwYTUsIDB4MjUxMCwgLyog MHhiOCAqLworICAgIDB4MjUxNCwgMHgyNTM0LCAweDI1MmMsIDB4MjUxYywgMHgyNTAwLCAweDI1 M2MsIDB4MDBlMywgMHgwMGMzLCAvKiAweGMwICovCisgICAgMHgyNTVhLCAweDI1NTQsIDB4MjU2 OSwgMHgyNTY2LCAweDI1NjAsIDB4MjU1MCwgMHgyNTZjLCAweDAwYTQsIC8qIDB4YzggKi8KKyAg ICAweDAwYmEsIDB4MDBhYSwgMHgwMGNhLCAweDAwY2IsIDB4MDBjOCwgMHgyMGFjLCAweDAwY2Qs IDB4MDBjZSwgLyogMHhkMCAqLworICAgIDB4MDBjZiwgMHgyNTE4LCAweDI1MGMsIDB4MjU4OCwg MHgyNTg0LCAweDAwYTYsIDB4MDBjYywgMHgyNTgwLCAvKiAweGQ4ICovCisgICAgMHgwMGQzLCAw eDAwZGYsIDB4MDBkNCwgMHgwMGQyLCAweDAwZjUsIDB4MDBkNSwgMHgwMGI1LCAweGZmZmQsIC8q IDB4ZTAgKi8KKyAgICAweDAwZDcsIDB4MDBkYSwgMHgwMGRiLCAweDAwZDksIDB4MDBlYywgMHgw MGZmLCAweDAwYWYsIDB4MDBiNCwgLyogMHhlOCAqLworICAgIDB4MDBhZCwgMHgwMGIxLCAweGZm ZmQsIDB4MDBiZSwgMHgwMGI2LCAweDAwYTcsIDB4MDBmNywgMHgwMGI4LCAvKiAweGYwICovCisg ICAgMHgwMGIwLCAweDAwYTgsIDB4MDBiNywgMHgwMGI5LCAweDAwYjMsIDB4MDBiMiwgMHgyNWEw LCAweDAwYTAgIC8qIDB4ZjggKi8KK307CisKK3N0cnVjdCB4X3RvX3VuaWNvZGUgdV9jcDg1OCA9 IHsKKyAgICAxMjgsIDAsIFgyVV9DUCwgQUxfUk9NQU4sIlBDIENvZGUgUGFnZSA4NTgiLCJjcDg1 OCIsIDAsIE5VTEwsCisgICAgMHgwMGM3LCAweDAwZmMsIDB4MDBlOSwgMHgwMGUyLCAweDAwZTQs IDB4MDBlMCwgMHgwMGU1LCAweDAwZTcsCisgICAgMHgwMGVhLCAweDAwZWIsIDB4MDBlOCwgMHgw MGVmLCAweDAwZWUsIDB4MDBlYywgMHgwMGM0LCAweDAwYzUsCisgICAgMHgwMGM5LCAweDAwZTYs IDB4MDBjNiwgMHgwMGY0LCAweDAwZjYsIDB4MDBmMiwgMHgwMGZiLCAweDAwZjksCisgICAgMHgw MGZmLCAweDAwZDYsIDB4MDBkYywgMHgwMGY4LCAweDAwYTMsIDB4MDBkOCwgMHgwMGQ3LCAweDAx OTIsCisgICAgMHgwMGUxLCAweDAwZWQsIDB4MDBmMywgMHgwMGZhLCAweDAwZjEsIDB4MDBkMSwg MHgwMGFhLCAweDAwYmEsCisgICAgMHgwMGJmLCAweDAwYWUsIDB4MDBhYywgMHgwMGJkLCAweDAw YmMsIDB4MDBhMSwgMHgwMGFiLCAweDAwYmIsCisgICAgMHgyNTkxLCAweDI1OTIsIDB4MjU5Mywg MHgyNTAyLCAweDI1MjQsIDB4MDBjMSwgMHgwMGMyLCAweDAwYzAsCisgICAgMHgwMGE5LCAweDI1 NjMsIDB4MjU1MSwgMHgyNTU3LCAweDI1NWQsIDB4MDBhMiwgMHgwMGE1LCAweDI1MTAsCisgICAg MHgyNTE0LCAweDI1MzQsIDB4MjUyYywgMHgyNTFjLCAweDI1MDAsIDB4MjUzYywgMHgwMGUzLCAw eDAwYzMsCisgICAgMHgyNTVhLCAweDI1NTQsIDB4MjU2OSwgMHgyNTY2LCAweDI1NjAsIDB4MjU1 MCwgMHgyNTZjLCAweDAwYTQsCisgICAgMHgwMGYwLCAweDAwZDAsIDB4MDBjYSwgMHgwMGNiLCAw eDAwYzgsIDB4MjBhYywgMHgwMGNkLCAweDAwY2UsCisgICAgMHgwMGNmLCAweDI1MTgsIDB4MjUw YywgMHgyNTg4LCAweDI1ODQsIDB4MDBhNiwgMHgwMGNjLCAweDI1ODAsCisgICAgMHgwMGQzLCAw eDAwZGYsIDB4MDBkNCwgMHgwMGQyLCAweDAwZjUsIDB4MDBkNSwgMHgwMGI1LCAweDAwZmUsCisg ICAgMHgwMGRlLCAweDAwZGEsIDB4MDBkYiwgMHgwMGQ5LCAweDAwZmQsIDB4MDBkZCwgMHgwMGFm LCAweDAwYjQsCisgICAgMHgwMGFkLCAweDAwYjEsIDB4MjAxNywgMHgwMGJlLCAweDAwYjYsIDB4 MDBhNywgMHgwMGY3LCAweDAwYjgsCisgICAgMHgwMGIwLCAweDAwYTgsIDB4MDBiNywgMHgwMGI5 LCAweDAwYjMsIDB4MDBiMiwgMHgyNWEwLCAweDAwYTAKK307CisKK3N0cnVjdCB4X3RvX3VuaWNv ZGUgdV9jcDg2MiA9IHsKKyAgICAxMjgsIDAsIFgyVV9DUCwgQUxfSEVCUkVXLCJQQyBDb2RlIFBh Z2UgODYyIiwiY3A4NjIiLCAwLCBOVUxMLAorICAgIDB4MDVkMCwgMHgwNWQxLCAweDA1ZDIsIDB4 MDVkMywgMHgwNWQ0LCAweDA1ZDUsIDB4MDVkNiwgMHgwNWQ3LAorICAgIDB4MDVkOCwgMHgwNWQ5 LCAweDA1ZGEsIDB4MDVkYiwgMHgwNWRjLCAweDA1ZGQsIDB4MDVkZSwgMHgwNWRmLAorICAgIDB4 MDVlMCwgMHgwNWUxLCAweDA1ZTIsIDB4MDVlMywgMHgwNWU0LCAweDA1ZTUsIDB4MDVlNiwgMHgw NWU3LAorICAgIDB4MDVlOCwgMHgwNWU5LCAweDA1ZWEsIDB4MDBhMiwgMHgwMGEzLCAweDAwYTUs IDB4MjBhNywgMHgwMTkyLAorICAgIDB4MDBlMSwgMHgwMGVkLCAweDAwZjMsIDB4MDBmYSwgMHgw MGYxLCAweDAwZDEsIDB4MDBhYSwgMHgwMGJhLAorICAgIDB4MDBiZiwgMHgyMzEwLCAweDAwYWMs IDB4MDBiZCwgMHgwMGJjLCAweDAwYTEsIDB4MDBhYiwgMHgwMGJiLAorICAgIDB4MjU5MSwgMHgy NTkyLCAweDI1OTMsIDB4MjUwMiwgMHgyNTI0LCAweDI1NjEsIDB4MjU2MiwgMHgyNTU2LAorICAg IDB4MjU1NSwgMHgyNTYzLCAweDI1NTEsIDB4MjU1NywgMHgyNTVkLCAweDI1NWMsIDB4MjU1Yiwg MHgyNTEwLAorICAgIDB4MjUxNCwgMHgyNTM0LCAweDI1MmMsIDB4MjUxYywgMHgyNTAwLCAweDI1 M2MsIDB4MjU1ZSwgMHgyNTVmLAorICAgIDB4MjU1YSwgMHgyNTU0LCAweDI1NjksIDB4MjU2Niwg MHgyNTYwLCAweDI1NTAsIDB4MjU2YywgMHgyNTY3LAorICAgIDB4MjU2OCwgMHgyNTY0LCAweDI1 NjUsIDB4MjU1OSwgMHgyNTU4LCAweDI1NTIsIDB4MjU1MywgMHgyNTZiLAorICAgIDB4MjU2YSwg MHgyNTE4LCAweDI1MGMsIDB4MjU4OCwgMHgyNTg0LCAweDI1OGMsIDB4MjU5MCwgMHgyNTgwLAor ICAgIDB4MDNiMSwgMHgwMGRmLCAweDAzOTMsIDB4MDNjMCwgMHgwM2EzLCAweDAzYzMsIDB4MDBi NSwgMHgwM2M0LAorICAgIDB4MDNhNiwgMHgwMzk4LCAweDAzYTksIDB4MDNiNCwgMHgyMjFlLCAw eDAzYzYsIDB4MDNiNSwgMHgyMjI5LAorICAgIDB4MjI2MSwgMHgwMGIxLCAweDIyNjUsIDB4MjI2 NCwgMHgyMzIwLCAweDIzMjEsIDB4MDBmNywgMHgyMjQ4LAorICAgIDB4MDBiMCwgMHgyMjE5LCAw eDAwYjcsIDB4MjIxYSwgMHgyMDdmLCAweDAwYjIsIDB4MjVhMCwgMHgwMGEwCit9OworCitzdHJ1 Y3QgeF90b191bmljb2RlIHVfY3A4NjQgPSB7CisgICAgMTI4LCAwLCBYMlVfQ1AsIEFMX0FSQUJJ QywiUEMgQ29kZSBQYWdlIDg2NCIsImNwODY0IiwgMCwgTlVMTCwKKyAgICAweDAwYjAsIDB4MDBi NywgMHgyMjE5LCAweDIyMWEsIDB4MjU5MiwgMHgyNTAwLCAweDI1MDIsIDB4MjUzYywKKyAgICAw eDI1MjQsIDB4MjUyYywgMHgyNTFjLCAweDI1MzQsIDB4MjUxMCwgMHgyNTBjLCAweDI1MTQsIDB4 MjUxOCwKKyAgICAweDAzYjIsIDB4MjIxZSwgMHgwM2M2LCAweDAwYjEsIDB4MDBiZCwgMHgwMGJj LCAweDIyNDgsIDB4MDBhYiwKKyAgICAweDAwYmIsIDB4ZmVmNywgMHhmZWY4LCAweGZmZmQsIDB4 ZmZmZCwgMHhmZWZiLCAweGZlZmMsIDB4ZmZmZCwKKyAgICAweDAwYTAsIDB4MDBhZCwgMHhmZTgy LCAweDAwYTMsIDB4MDBhNCwgMHhmZTg0LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZlOGUsIDB4 ZmU4ZiwgMHhmZTk1LCAweGZlOTksIDB4MDYwYywgMHhmZTlkLCAweGZlYTEsIDB4ZmVhNSwKKyAg ICAweDA2NjAsIDB4MDY2MSwgMHgwNjYyLCAweDA2NjMsIDB4MDY2NCwgMHgwNjY1LCAweDA2NjYs IDB4MDY2NywKKyAgICAweDA2NjgsIDB4MDY2OSwgMHhmZWQxLCAweDA2MWIsIDB4ZmViMSwgMHhm ZWI1LCAweGZlYjksIDB4MDYxZiwKKyAgICAweDAwYTIsIDB4ZmU4MCwgMHhmZTgxLCAweGZlODMs IDB4ZmU4NSwgMHhmZWNhLCAweGZlOGIsIDB4ZmU4ZCwKKyAgICAweGZlOTEsIDB4ZmU5MywgMHhm ZTk3LCAweGZlOWIsIDB4ZmU5ZiwgMHhmZWEzLCAweGZlYTcsIDB4ZmVhOSwKKyAgICAweGZlYWIs IDB4ZmVhZCwgMHhmZWFmLCAweGZlYjMsIDB4ZmViNywgMHhmZWJiLCAweGZlYmYsIDB4ZmVjMSwK KyAgICAweGZlYzUsIDB4ZmVjYiwgMHhmZWNmLCAweDAwYTYsIDB4MDBhYywgMHgwMGY3LCAweDAw ZDcsIDB4ZmVjOSwKKyAgICAweDA2NDAsIDB4ZmVkMywgMHhmZWQ3LCAweGZlZGIsIDB4ZmVkZiwg MHhmZWUzLCAweGZlZTcsIDB4ZmVlYiwKKyAgICAweGZlZWQsIDB4ZmVlZiwgMHhmZWYzLCAweGZl YmQsIDB4ZmVjYywgMHhmZWNlLCAweGZlY2QsIDB4ZmVlMSwKKyAgICAweGZlN2QsIDB4MDY1MSwg MHhmZWU1LCAweGZlZTksIDB4ZmVlYywgMHhmZWYwLCAweGZlZjIsIDB4ZmVkMCwKKyAgICAweGZl ZDUsIDB4ZmVmNSwgMHhmZWY2LCAweGZlZGQsIDB4ZmVkOSwgMHhmZWYxLCAweDI1YTAsIDB4ZmZm ZAorfTsKKworc3RydWN0IHhfdG9fdW5pY29kZSB1X2NwODY2ID0geworICAgIDEyOCwgMCwgWDJV X0NQLCBBTF9DWVJJTCwiUEMgQ29kZSBQYWdlIDg2NiIsImNwODY2IiwgMCwgTlVMTCwKKyAgICAw eDA0MTAsIDB4MDQxMSwgMHgwNDEyLCAweDA0MTMsIDB4MDQxNCwgMHgwNDE1LCAweDA0MTYsIDB4 MDQxNywKKyAgICAweDA0MTgsIDB4MDQxOSwgMHgwNDFhLCAweDA0MWIsIDB4MDQxYywgMHgwNDFk LCAweDA0MWUsIDB4MDQxZiwKKyAgICAweDA0MjAsIDB4MDQyMSwgMHgwNDIyLCAweDA0MjMsIDB4 MDQyNCwgMHgwNDI1LCAweDA0MjYsIDB4MDQyNywKKyAgICAweDA0MjgsIDB4MDQyOSwgMHgwNDJh LCAweDA0MmIsIDB4MDQyYywgMHgwNDJkLCAweDA0MmUsIDB4MDQyZiwKKyAgICAweDA0MzAsIDB4 MDQzMSwgMHgwNDMyLCAweDA0MzMsIDB4MDQzNCwgMHgwNDM1LCAweDA0MzYsIDB4MDQzNywKKyAg ICAweDA0MzgsIDB4MDQzOSwgMHgwNDNhLCAweDA0M2IsIDB4MDQzYywgMHgwNDNkLCAweDA0M2Us IDB4MDQzZiwKKyAgICAweDI1OTEsIDB4MjU5MiwgMHgyNTkzLCAweDI1MDIsIDB4MjUyNCwgMHgy NTYxLCAweDI1NjIsIDB4MjU1NiwKKyAgICAweDI1NTUsIDB4MjU2MywgMHgyNTUxLCAweDI1NTcs IDB4MjU1ZCwgMHgyNTVjLCAweDI1NWIsIDB4MjUxMCwKKyAgICAweDI1MTQsIDB4MjUzNCwgMHgy NTJjLCAweDI1MWMsIDB4MjUwMCwgMHgyNTNjLCAweDI1NWUsIDB4MjU1ZiwKKyAgICAweDI1NWEs IDB4MjU1NCwgMHgyNTY5LCAweDI1NjYsIDB4MjU2MCwgMHgyNTUwLCAweDI1NmMsIDB4MjU2NywK KyAgICAweDI1NjgsIDB4MjU2NCwgMHgyNTY1LCAweDI1NTksIDB4MjU1OCwgMHgyNTUyLCAweDI1 NTMsIDB4MjU2YiwKKyAgICAweDI1NmEsIDB4MjUxOCwgMHgyNTBjLCAweDI1ODgsIDB4MjU4NCwg MHgyNThjLCAweDI1OTAsIDB4MjU4MCwKKyAgICAweDA0NDAsIDB4MDQ0MSwgMHgwNDQyLCAweDA0 NDMsIDB4MDQ0NCwgMHgwNDQ1LCAweDA0NDYsIDB4MDQ0NywKKyAgICAweDA0NDgsIDB4MDQ0OSwg MHgwNDRhLCAweDA0NGIsIDB4MDQ0YywgMHgwNDRkLCAweDA0NGUsIDB4MDQ0ZiwKKyAgICAweDA0 MDEsIDB4MDQ1MSwgMHgwNDA0LCAweDA0NTQsIDB4MDQwNywgMHgwNDU3LCAweDA0MGUsIDB4MDQ1 ZSwKKyAgICAweDAwYjAsIDB4MjIxOSwgMHgwMGI3LCAweDIyMWEsIDB4MjExNiwgMHgwMGE0LCAw eDI1YTAsIDB4MDBhMAorfTsKKworc3RydWN0IHhfdG9fdW5pY29kZSB1X2NwODY5ID0geworICAg IDEyOCwgMCwgWDJVX0NQLCBBTF9HUkVFSywiUEMgQ29kZSBQYWdlIDg2OSIsImNwODY5IiwgMCwg TlVMTCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweDAzODYsIDB4ZmZmZCwKKyAgICAweDAwYjcsIDB4MDBhYywgMHgwMGE2LCAweDIwMTgsIDB4 MjAxOSwgMHgwMzg4LCAweDIwMTUsIDB4MDM4OSwKKyAgICAweDAzOGEsIDB4MDNhYSwgMHgwMzhj LCAweGZmZmQsIDB4ZmZmZCwgMHgwMzhlLCAweDAzYWIsIDB4MDBhOSwKKyAgICAweDAzOGYsIDB4 MDBiMiwgMHgwMGIzLCAweDAzYWMsIDB4MDBhMywgMHgwM2FkLCAweDAzYWUsIDB4MDNhZiwKKyAg ICAweDAzY2EsIDB4MDM5MCwgMHgwM2NjLCAweDAzY2QsIDB4MDM5MSwgMHgwMzkyLCAweDAzOTMs IDB4MDM5NCwKKyAgICAweDAzOTUsIDB4MDM5NiwgMHgwMzk3LCAweDAwYmQsIDB4MDM5OCwgMHgw Mzk5LCAweDAwYWIsIDB4MDBiYiwKKyAgICAweDI1OTEsIDB4MjU5MiwgMHgyNTkzLCAweDI1MDIs IDB4MjUyNCwgMHgwMzlhLCAweDAzOWIsIDB4MDM5YywKKyAgICAweDAzOWQsIDB4MjU2MywgMHgy NTUxLCAweDI1NTcsIDB4MjU1ZCwgMHgwMzllLCAweDAzOWYsIDB4MjUxMCwKKyAgICAweDI1MTQs IDB4MjUzNCwgMHgyNTJjLCAweDI1MWMsIDB4MjUwMCwgMHgyNTNjLCAweDAzYTAsIDB4MDNhMSwK KyAgICAweDI1NWEsIDB4MjU1NCwgMHgyNTY5LCAweDI1NjYsIDB4MjU2MCwgMHgyNTUwLCAweDI1 NmMsIDB4MDNhMywKKyAgICAweDAzYTQsIDB4MDNhNSwgMHgwM2E2LCAweDAzYTcsIDB4MDNhOCwg MHgwM2E5LCAweDAzYjEsIDB4MDNiMiwKKyAgICAweDAzYjMsIDB4MjUxOCwgMHgyNTBjLCAweDI1 ODgsIDB4MjU4NCwgMHgwM2I0LCAweDAzYjUsIDB4MjU4MCwKKyAgICAweDAzYjYsIDB4MDNiNywg MHgwM2I4LCAweDAzYjksIDB4MDNiYSwgMHgwM2JiLCAweDAzYmMsIDB4MDNiZCwKKyAgICAweDAz YmUsIDB4MDNiZiwgMHgwM2MwLCAweDAzYzEsIDB4MDNjMywgMHgwM2MyLCAweDAzYzQsIDB4MDM4 NCwKKyAgICAweDAwYWQsIDB4MDBiMSwgMHgwM2M1LCAweDAzYzYsIDB4MDNjNywgMHgwMGE3LCAw eDAzYzgsIDB4MDM4NSwKKyAgICAweDAwYjAsIDB4MDBhOCwgMHgwM2M5LCAweDAzY2IsIDB4MDNi MCwgMHgwM2NlLCAweDI1YTAsIDB4MDBhMAorfTsKKworLyogV2luZG93cyBjb2RlIHBhZ2VzICov CisKK3N0cnVjdCB4X3RvX3VuaWNvZGUgdV9jcDEyNTAgPSB7ICAgICAgICAvKiBXaW5kb3dzIExh dGluLTIgKi8KKyAgICAxMjgsIDAsIFgyVV9DUCwgQUxfUk9NQU4sIldpbmRvd3MgQ29kZSBQYWdl IDEyNTAiLCJjcDEyNTAiLCAwLCBOVUxMLAorICAgIDB4MjBhYywgMHhmZmZkLCAweDIwMWEsIDB4 MDE5MiwgMHgyMDFlLCAweDIwMjYsIDB4MjAyMCwgMHgyMDIxLCAvKiA4MCAqLworICAgIDB4MDA1 ZSwgMHgyMDMxLCAweDAxNjAsIDB4MDAzYywgMHgwMTVhLCAweDAxNjQsIDB4MDE3ZCwgMHgwMTc5 LCAvKiA4OCAqLworICAgIDB4ZmZmZCwgMHgyMDE4LCAweDIwMTksIDB4MjAxYywgMHgyMDFkLCAw eDIwMjIsIDB4MjAxMiwgMHgyMDE0LCAvKiA5MCAqLworICAgIDB4ZmZmZCwgMHgyMTIyLCAweDAx NjEsIDB4MDAzZSwgMHgwMTViLCAweDAxNjUsIDB4MDE3ZSwgMHgwMTdhLCAvKiA5OCAqLworICAg IDB4MDBBMCwgMHgwMmM3LCAweDAyZDgsIDB4MDE0MSwgMHgwMEE0LCAweDAxMDQsIDB4MDBBNiwg MHgwMEE3LCAvKiBBMCAqLworICAgIDB4MDBBOCwgMHgwMGE5LCAweDAxNUUsIDB4MDBhYiwgMHgw MGFjLCAweDAwMkQsIDB4MDBhZSwgMHgwMTdCLCAvKiBBOCAqLworICAgIDB4MDBCMCwgMHgwMGIx LCAweDAyREIsIDB4MDE0MiwgMHgwMEI0LCAweDAwYjUsIDB4MDBiNiwgMHgwMGI3LCAvKiBCMCAq LworICAgIDB4MDBCOCwgMHgwMTA1LCAweDAxNUYsIDB4MDBiYiwgMHgwMTNkLCAweDAyREQsIDB4 MDEzRSwgMHgwMTdDLCAvKiBCOCAqLworICAgIDB4MDE1NCwgMHgwMEMxLCAweDAwQzIsIDB4MDEw MiwgMHgwMEM0LCAweDAxMzksIDB4MDEwNiwgMHgwMEM3LCAvKiBDMCAqLworICAgIDB4MDEwQywg MHgwMEM5LCAweDAxMTgsIDB4MDBDQiwgMHgwMTFBLCAweDAwQ0QsIDB4MDBDRSwgMHgwMTBFLAor ICAgIDB4MDExMCwgMHgwMTQzLCAweDAxNDcsIDB4MDBEMywgMHgwMEQ0LCAweDAxNTAsIDB4MDBE NiwgMHgwMEQ3LAorICAgIDB4MDE1OCwgMHgwMTZFLCAweDAwREEsIDB4MDE3MCwgMHgwMERDLCAw eDAwREQsIDB4MDE2MiwgMHgwMERGLAorICAgIDB4MDE1NSwgMHgwMEUxLCAweDAwRTIsIDB4MDEw MywgMHgwMEU0LCAweDAxM0EsIDB4MDEwNywgMHgwMEU3LAorICAgIDB4MDEwRCwgMHgwMEU5LCAw eDAxMTksIDB4MDBFQiwgMHgwMTFCLCAweDAwRUQsIDB4MDBFRSwgMHgwMTBGLAorICAgIDB4MDEx MSwgMHgwMTQ0LCAweDAxNDgsIDB4MDBGMywgMHgwMEY0LCAweDAxNTEsIDB4MDBGNiwgMHgwMEY3 LAorICAgIDB4MDE1OSwgMHgwMTZGLCAweDAwRkEsIDB4MDE3MSwgMHgwMEZDLCAweDAwRkQsIDB4 MDE2MywgMHgwMkQ5Cit9OworCitzdHJ1Y3QgeF90b191bmljb2RlIHVfY3AxMjUxID0geyAgICAg ICAgLyogV2luZG93cyBDeXJpbGxpYyAqLworICAgIDEyOCwgMCwgWDJVX0NQLCBBTF9DWVJJTCwi V2luZG93cyBDb2RlIFBhZ2UgMTI1MSIsImNwMTI1MSIsIDAsIE5VTEwsCisgICAgMHgwNDAyLCAw eDA0MDMsIDB4MjAxYSwgMHgwNDUzLCAweDIwMWUsIDB4MjAyNiwgMHgyMDIwLCAweDIwMjEsIC8q IDgwICovCisgICAgMHgyMGFjLCAweDIwMzEsIDB4MDQwOSwgMHgwMDNjLCAweDA0MGEsIDB4MDQw YywgMHgwNDBiLCAweDA0MGYsIC8qIDg4ICovCisgICAgMHgwNDUyLCAweDIwMTgsIDB4MjAxOSwg MHgyMDFjLCAweDIwMWQsIDB4MjAyMiwgMHgyMDEyLCAweDIwMTQsIC8qIDkwICovCisgICAgMHgw MDdlLCAweDIxMjIsIDB4MDQ1OSwgMHgwMDNlLCAweDA0NWEsIDB4MDQ1YywgMHgwNDViLCAweDA0 NWYsIC8qIDk4ICovCisgICAgMHgwMEEwLCAweDA0MGUsIDB4MDQ1ZSwgMHgwNDA4LCAweDAwQTQs IDB4MDQ5MCwgMHgwMEE2LCAweDAwQTcsIC8qIGEwICovCisgICAgMHgwNDAxLCAweDAwQTksIDB4 MDQwNCwgMHgwMEFCLCAweDAwQUMsIDB4MDBBRCwgMHgwMEFFLCAweDA0MDcsIC8qIGE4ICovCisg ICAgMHgwMGIwLCAweDAwYjEsIDB4MDQwNiwgMHgwNDU2LCAweDA0OTEsIDB4MDBCNSwgMHgwMEI2 LCAweDAwQjcsIC8qIGIwICovCisgICAgMHgwNDUxLCAweDIxMTYsIDB4MDQ1NCwgMHgwMEJCLCAw eDA0NTgsIDB4MDQwNSwgMHgwNDU1LCAweDA0NTcsIC8qIGI4ICovCisgICAgMHgwNDEwLCAweDA0 MTEsIDB4MDQxMiwgMHgwNDEzLCAweDA0MTQsIDB4MDQxNSwgMHgwNDE2LCAweDA0MTcsIC8qIGMw ICovCisgICAgMHgwNDE4LCAweDA0MTksIDB4MDQxYSwgMHgwNDFiLCAweDA0MWMsIDB4MDQxZCwg MHgwNDFlLCAweDA0MWYsIC8qIGM4ICovCisgICAgMHgwNDIwLCAweDA0MjEsIDB4MDQyMiwgMHgw NDIzLCAweDA0MjQsIDB4MDQyNSwgMHgwNDI2LCAweDA0MjcsIC8qIGQwICovCisgICAgMHgwNDI4 LCAweDA0MjksIDB4MDQyYSwgMHgwNDJiLCAweDA0MmMsIDB4MDQyZCwgMHgwNDJlLCAweDA0MmYs IC8qIGQ4ICovCisgICAgMHgwNDMwLCAweDA0MzEsIDB4MDQzMiwgMHgwNDMzLCAweDA0MzQsIDB4 MDQzNSwgMHgwNDM2LCAweDA0MzcsIC8qIGUwICovCisgICAgMHgwNDM4LCAweDA0MzksIDB4MDQz YSwgMHgwNDNiLCAweDA0M2MsIDB4MDQzZCwgMHgwNDNlLCAweDA0M2YsIC8qIGU4ICovCisgICAg MHgwNDQwLCAweDA0NDEsIDB4MDQ0MiwgMHgwNDQzLCAweDA0NDQsIDB4MDQ0NSwgMHgwNDQ2LCAw eDA0NDcsIC8qIGYwICovCisgICAgMHgwNDQ4LCAweDA0NDksIDB4MDQ0YSwgMHgwNDRiLCAweDA0 NGMsIDB4MDQ0ZCwgMHgwNDRlLCAweDA0NGYgIC8qIGY4ICovCit9OworCitzdHJ1Y3QgeF90b191 bmljb2RlIHVfY3AxMjUyID0geyAgICAgICAgLyogV2luZG93cyBMYXRpbi0xICovCisvKgorICBU aGUgZm9sbG93aW5nIGNvZGUgcG9pbnRzIGFkZGVkIFNlcHRlbWJlciAxOTk4OgorICAweDgwOiBF dXJvCisgIDB4OEU6IExhdGluIENhcGl0YWwgTGV0dGVyIFogd2l0aCBDYXJvbgorICAweDlFOiBM YXRpbiBTbWFsbCBMZXR0ZXIgWiB3aXRoIENhcm9uCisgIEFubm91bmNlZCBieSBNdXJyYXkgU2Fy Z2VudCA8bXVycmF5c0BtaWNyb3NvZnQuY29tPiB0byBVbmljb2RlIGNvbnNvcnRpdW0sCisgIGVt YWlsLCAzIFNlcHRlbWJlciAxOTk4LiAgVGhlIGNvZGUgcGFnZSB3YXMgY2hhbmdlZCBpbiBKdW5l IDE5OTguICBUaGUKKyAgY2hhbmdlIGlzIHJlZmxlY3RlZCBpbiBXaW5kb3dzIDk4IGFuZCAicmVj ZW50IHNlcnZpY2UgcGFja3MiIGZvciBXaW5kb3cgOTUKKyAgYW5kIFdpbmRvd3MgTlQgNC4wLgor Ki8KKyAgICAxMjgsIDAsIFgyVV9DUCwgQUxfUk9NQU4sIldpbmRvd3MgQ29kZSBQYWdlIDEyNTIi LCJjcDEyNTIiLCAwLCBOVUxMLAorICAgIDB4MjBhYywgMHhmZmZkLCAweDIwMWEsIDB4MDE5Miwg MHgyMDFlLCAweDIwMjYsIDB4MjAyMCwgMHgyMDIxLAorICAgIDB4MDA1ZSwgMHgyMDMxLCAweDAx NjAsIDB4MDAzYywgMHgwMTUyLCAweGZmZmQsIDB4MDE3RCwgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHgyMDE4LCAweDIwMTksIDB4MjAxYywgMHgyMDFkLCAweDIwMjIsIDB4MjAxMiwgMHgyMDE0LAor ICAgIDB4MDA3ZSwgMHgyMTIyLCAweDAxNjEsIDB4MDAzZSwgMHgwMTUzLCAweGZmZmQsIDB4MDE3 RSwgMHgwMTc4LAorICAgIDB4MDBBMCwgMHgwMEExLCAweDAwQTIsIDB4MDBBMywgMHgwMEE0LCAw eDAwQTUsIDB4MDBBNiwgMHgwMEE3LAorICAgIDB4MDBBOCwgMHgwMEE5LCAweDAwQUEsIDB4MDBB QiwgMHgwMEFDLCAweDAwQUQsIDB4MDBBRSwgMHgwMEFGLAorICAgIDB4MDBCMCwgMHgwMEIxLCAw eDAwQjIsIDB4MDBCMywgMHgwMEI0LCAweDAwQjUsIDB4MDBCNiwgMHgwMEI3LAorICAgIDB4MDBC OCwgMHgwMEI5LCAweDAwQkEsIDB4MDBCQiwgMHgwMEJDLCAweDAwQkQsIDB4MDBCRSwgMHgwMEJG LAorICAgIDB4MDBDMCwgMHgwMEMxLCAweDAwQzIsIDB4MDBDMywgMHgwMEM0LCAweDAwQzUsIDB4 MDBDNiwgMHgwMEM3LAorICAgIDB4MDBDOCwgMHgwMEM5LCAweDAwQ0EsIDB4MDBDQiwgMHgwMEND LCAweDAwQ0QsIDB4MDBDRSwgMHgwMENGLAorICAgIDB4MDBEMCwgMHgwMEQxLCAweDAwRDIsIDB4 MDBEMywgMHgwMEQ0LCAweDAwRDUsIDB4MDBENiwgMHgwMEQ3LAorICAgIDB4MDBEOCwgMHgwMEQ5 LCAweDAwREEsIDB4MDBEQiwgMHgwMERDLCAweDAwREQsIDB4MDBERSwgMHgwMERGLAorICAgIDB4 MDBFMCwgMHgwMEUxLCAweDAwRTIsIDB4MDBFMywgMHgwMEU0LCAweDAwRTUsIDB4MDBFNiwgMHgw MEU3LAorICAgIDB4MDBFOCwgMHgwMEU5LCAweDAwRUEsIDB4MDBFQiwgMHgwMEVDLCAweDAwRUQs IDB4MDBFRSwgMHgwMEVGLAorICAgIDB4MDBGMCwgMHgwMEYxLCAweDAwRjIsIDB4MDBGMywgMHgw MEY0LCAweDAwRjUsIDB4MDBGNiwgMHgwMEY3LAorICAgIDB4MDBGOCwgMHgwMEY5LCAweDAwRkEs IDB4MDBGQiwgMHgwMEZDLCAweDAwRkQsIDB4MDBGRSwgMHgwMEZGCit9OworCitzdHJ1Y3QgeF90 b191bmljb2RlIHVfY3AxMjUzID0geyAgICAgICAgLyogV2luZG93cyBHcmVlY2UgKi8KKyAgICAx MjgsIDAsIFgyVV9DUCwgQUxfR1JFRUssIldpbmRvd3MgQ29kZSBQYWdlIDEyNTMiLCJjcDEyNTMi LCAwLCBOVUxMLAorICAgIDB4MjBhYywgMHhmZmZkLCAweDIwMWEsIDB4MDE5MiwgMHgyMDFlLCAw eDIwMjYsIDB4MjAyMCwgMHgyMDIxLCAvKiA4MCAqLworICAgIDB4ZmZmZCwgMHgyMDMxLCAweGZm ZmQsIDB4MDAzYywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAvKiA4OCAqLworICAg IDB4ZmZmZCwgMHgyMDE4LCAweDIwMTksIDB4MjAxYywgMHgyMDFkLCAweDIwMjIsIDB4MjAxMiwg MHgyMDE0LCAvKiA5MCAqLworICAgIDB4ZmZmZCwgMHgyMTIyLCAweGZmZmQsIDB4MDAzZSwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAvKiA5OCAqLworICAgIDB4MDBBMCwgMHgwMGI3 LCAweDAzODYsIDB4MDBBMywgMHgwMEE0LCAweDAwQTUsIDB4MDBBNiwgMHgwMEE3LCAvKiBhMCAq LworICAgIDB4MDBBOCwgMHgwMEE5LCAweDAwQUEsIDB4MDBBQiwgMHgwMEFDLCAweDAwQUQsIDB4 MDBBRSwgMHgwMEFGLCAvKiBhOCAqLworICAgIDB4MDBCMCwgMHgwMEIxLCAweDAwQjIsIDB4MDBC MywgMHgwMEI3LCAweDAwQjUsIDB4MDBCNiwgMHgwMEI3LCAvKiBiMCAqLworICAgIDB4MDM4OCwg MHgwMzg5LCAweDAzOEEsIDB4MDBCQiwgMHgwMzhDLCAweDAwQkQsIDB4MDM4RSwgMHgwMzhGLCAv KiBiOCAqLworICAgIDB4MDM5MCwgMHgwMzkxLCAweDAzOTIsIDB4MDM5MywgMHgwMzk0LCAweDAz OTUsIDB4MDM5NiwgMHgwMzk3LCAvKiBjMCAqLworICAgIDB4MDM5OCwgMHgwMzk5LCAweDAzOUEs IDB4MDM5QiwgMHgwMzlDLCAweDAzOUQsIDB4MDM5RSwgMHgwMzlGLCAvKiBjOCAqLworICAgIDB4 MDNhMCwgMHgwM2ExLCAweGZmZmQsIDB4MDNhMywgMHgwM2E0LCAweDAzYTUsIDB4MDNhNiwgMHgw M2E3LCAvKiBkMCAqLworICAgIDB4MDNhOCwgMHgwM2E5LCAweDAzYUEsIDB4MDNhQiwgMHgwM2FD LCAweDAzYUQsIDB4MDNhRSwgMHgwM2FGLCAvKiBkOCAqLworICAgIDB4MDNiMCwgMHgwM2IxLCAw eDAzYjIsIDB4MDNiMywgMHgwM2I0LCAweDAzYjUsIDB4MDNiNiwgMHgwM2I3LCAvKiBlMCAqLwor ICAgIDB4MDNiOCwgMHgwM2I5LCAweDAzYkEsIDB4MDNiQiwgMHgwM2JDLCAweDAzYkQsIDB4MDNi RSwgMHgwM2JGLCAvKiBlOCAqLworICAgIDB4MDNjMCwgMHgwM2MxLCAweDAzYzIsIDB4MDNjMywg MHgwM2M0LCAweDAzYzUsIDB4MDNjNiwgMHgwM2M3LCAvKiBmMCAqLworICAgIDB4MDNjOCwgMHgw M2M5LCAweDAzY0EsIDB4MDNjQiwgMHgwM2NDLCAweDAzY0QsIDB4MDNjRSwgMHhmZmZkICAvKiBm OCAqLworfTsKKworc3RydWN0IHhfdG9fdW5pY29kZSB1X2NwMTI1NCA9IHsgICAgICAgIC8qIFdp bmRvd3MgVHVya2V5ICovCisgICAgMTI4LCAwLCBYMlVfQ1AsIEFMX1JPTUFOLCJXaW5kb3dzIENv ZGUgUGFnZSAxMjU0IiwiY3AxMjU0IiwgMCwgTlVMTCwKKyAgICAweDIwYWMsIDB4ZmZmZCwgMHgy MDFhLCAweDAxOTIsIDB4MjAxZSwgMHgyMDI2LCAweDIwMjAsIDB4MjAyMSwgLyogODAgKi8KKyAg ICAweDAwNWUsIDB4MjAzMSwgMHgwMTYwLCAweDAwM2MsIDB4MDE1MiwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgLyogODggKi8KKyAgICAweGZmZmQsIDB4MjAxOCwgMHgyMDE5LCAweDIwMWMsIDB4 MjAxZCwgMHgyMDIyLCAweDIwMTIsIDB4MjAxNCwgLyogOTAgKi8KKyAgICAweDAwN2UsIDB4MjEy MiwgMHgwMTYxLCAweDAwM2UsIDB4MDE1MywgMHhmZmZkLCAweGZmZmQsIDB4MDE3OCwgLyogOTgg Ki8KKyAgICAweDAwQTAsIDB4MDBBMSwgMHgwMEEyLCAweDAwQTMsIDB4MDBBNCwgMHgwMEE1LCAw eDAwQTYsIDB4MDBBNywKKyAgICAweDAwQTgsIDB4MDBBOSwgMHgwMEFBLCAweDAwQUIsIDB4MDBB QywgMHgwMEFELCAweDAwQUUsIDB4MDBBRiwKKyAgICAweDAwQjAsIDB4MDBCMSwgMHgwMEIyLCAw eDAwQjMsIDB4MDBCNCwgMHgwMEI1LCAweDAwQjYsIDB4MDBCNywKKyAgICAweDAwQjgsIDB4MDBC OSwgMHgwMEJBLCAweDAwQkIsIDB4MDBCQywgMHgwMEJELCAweDAwQkUsIDB4MDBCRiwKKyAgICAw eDAwQzAsIDB4MDBDMSwgMHgwMEMyLCAweDAwQzMsIDB4MDBDNCwgMHgwMEM1LCAweDAwQzYsIDB4 MDBDNywKKyAgICAweDAwQzgsIDB4MDBDOSwgMHgwMENBLCAweDAwQ0IsIDB4MDBDQywgMHgwMENE LCAweDAwQ0UsIDB4MDBDRiwKKyAgICAweDAxMWUsIDB4MDBEMSwgMHgwMEQyLCAweDAwRDMsIDB4 MDBENCwgMHgwMEQ1LCAweDAwRDYsIDB4MDBENywKKyAgICAweDAwRDgsIDB4MDBEOSwgMHgwMERB LCAweDAwREIsIDB4MDBEQywgMHgwMTMwLCAweDAxNWUsIDB4MDBERiwKKyAgICAweDAwRTAsIDB4 MDBFMSwgMHgwMEUyLCAweDAwRTMsIDB4MDBFNCwgMHgwMEU1LCAweDAwRTYsIDB4MDBFNywKKyAg ICAweDAwRTgsIDB4MDBFOSwgMHgwMEVBLCAweDAwRUIsIDB4MDBFQywgMHgwMEVELCAweDAwRUUs IDB4MDBFRiwKKyAgICAweDAxMWYsIDB4MDBGMSwgMHgwMEYyLCAweDAwRjMsIDB4MDBGNCwgMHgw MEY1LCAweDAwRjYsIDB4MDBGNywKKyAgICAweDAwRjgsIDB4MDBGOSwgMHgwMEZBLCAweDAwRkIs IDB4MDBGQywgMHgwMTMxLCAweDAxNWYsIDB4MDBGRgorfTsKKworc3RydWN0IHhfdG9fdW5pY29k ZSB1X2NwMTI1NSA9IHsgICAgICAgIC8qIFdpbmRvd3MgSGVicmV3ICovCisgICAgMTI4LCAwLCBY MlVfQ1AsIEFMX1JPTUFOLCJXaW5kb3dzIENvZGUgUGFnZSAxMjU1IChIZWJyZXcpIiwiY3AxMjU1 IiwKKyAgICAwLCBOVUxMLAorICAgIDB4MjBBQywgMHhGRkZELCAweDIwMWEsIDB4MDE5MiwgMHgy MDFlLCAweDIwMjYsIDB4MjAyMCwgMHgyMDIxLAorICAgIDB4MDJjNiwgMHgyMDMwLCAweGZmZmQs IDB4MjAzOSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHgy MDE4LCAweDIwMTksIDB4MjAxYywgMHgyMDFkLCAweDIwMjIsIDB4MjAxMywgMHgyMDE0LAorICAg IDB4MDJkYywgMHgyMTIyLCAweGZmZmQsIDB4MjAzYSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4MDBhMCwgMHgwMGExLCAweDAwYTIsIDB4MDBhMywgMHgyMGFhLCAweDAw YTUsIDB4MDBhNiwgMHgwMGE3LAorICAgIDB4MDBhOCwgMHgwMGE5LCAweDAwZDcsIDB4MDBhYiwg MHgwMGFjLCAweDAwYWQsIDB4MDBhZSwgMHgwMGFmLAorICAgIDB4MDBiMCwgMHgwMGIxLCAweDAw YjIsIDB4MDBiMywgMHgwMGI0LCAweDAwYjUsIDB4MDBiNiwgMHgwMGI3LAorICAgIDB4MDBiOCwg MHgwMGI5LCAweDAwZjcsIDB4MDBiYiwgMHgwMGJjLCAweDAwYmQsIDB4MDBiZSwgMHgwMGJmLAor ICAgIDB4MDViMCwgMHgwNWIxLCAweDA1YjIsIDB4MDViMywgMHgwNWI0LCAweDA1YjUsIDB4MDVi NiwgMHgwNWI3LAorICAgIDB4MDViOCwgMHgwNWI5LCAweGZmZmQsIDB4MDViYiwgMHgwNWJjLCAw eDA1YmQsIDB4MDViZSwgMHgwNWJmLAorICAgIDB4MDVjMCwgMHgwNWMxLCAweDA1YzIsIDB4MDVj MywgMHgwNWYwLCAweDA1ZjEsIDB4MDVmMiwgMHgwNWYzLAorICAgIDB4MDVmNCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4MDVk MCwgMHgwNWQxLCAweDA1ZDIsIDB4MDVkMywgMHgwNWQ0LCAweDA1ZDUsIDB4MDVkNiwgMHgwNWQ3 LAorICAgIDB4MDVkOCwgMHgwNWQ5LCAweDA1ZGEsIDB4MDVkYiwgMHgwNWRjLCAweDA1ZGQsIDB4 MDVkZSwgMHgwNWRmLAorICAgIDB4MDVlMCwgMHgwNWUxLCAweDA1ZTIsIDB4MDVlMywgMHgwNWU0 LCAweDA1ZTUsIDB4MDVlNiwgMHgwNWU3LAorICAgIDB4MDVlOCwgMHgwNWU5LCAweDA1ZWEsIDB4 ZmZmZCwgMHhmZmZkLCAweDIwMGUsIDB4MjAwZiwgMHhmZmZkCit9OworCitzdHJ1Y3QgeF90b191 bmljb2RlIHVfY3AxMjU2ID0geyAgICAgICAgLyogV2luZG93cyBBcmFiaWMgKi8KKyAgICAxMjgs IDAsIFgyVV9DUCwgQUxfUk9NQU4sIldpbmRvd3MgQ29kZSBQYWdlIDEyNTYgKEFyYWJpYykiLCJj cDEyNTYiLAorICAgIDAsIE5VTEwsCisgICAgMHgyMGFjLCAweDA2N2UsIDB4MjAxYSwgMHgwMTky LCAweDIwMWUsIDB4MjAyNiwgMHgyMDIwLCAweDIwMjEsCisgICAgMHgwMmM2LCAweDIwMzAsIDB4 ZmZmZCwgMHgyMDM5LCAweDAxNTIsIDB4MDY4NiwgMHgwNjk4LCAweGZmZmQsIC8qIDg4ICovCisg ICAgMHgwNmFmLCAweDIwMTgsIDB4MjAxOSwgMHgyMDFjLCAweDIwMWQsIDB4MjAyMiwgMHgyMDEz LCAweDIwMTQsIC8qIDkwICovCisgICAgMHhmZmZkLCAweDIxMjIsIDB4ZmZmZCwgMHgwMDNhLCAw eDAxNTMsIDB4MjAwYywgMHgyMDBkLCAweGZmZmQsIC8qIDk4ICovCisgICAgMHgwMEEwLCAweDA2 MGMsIDB4MDBBMiwgMHgwMEEzLCAweDAwQTQsIDB4MDBhNSwgMHgwMEE2LCAweDAwQTcsIC8qIGEw ICovCisgICAgMHgwMGE4LCAweDAwQTksIDB4ZmZmZCwgMHgwMEFCLCAweDAwQUMsIDB4MDBBRCwg MHgwMEFFLCAweDAwYWYsIC8qIGE4ICovCisgICAgMHgwMEIwLCAweDAwQjEsIDB4MDBCMiwgMHgw MEIzLCAweDAwYjQsIDB4MDBCNSwgMHgwMEI2LCAweDAwQjcsIC8qIGIwICovCisgICAgMHgwMGI4 LCAweDAwQjksIDB4MDYxYiwgMHgwMEJCLCAweDAwQkMsIDB4MDBCRCwgMHgwMEJFLCAweDA2MWYs IC8qIGI4ICovCisgICAgMHhmZmZkLCAweDA2MjEsIDB4MDYyMiwgMHgwNjIzLCAweDA2MjQsIDB4 MDYyNSwgMHgwNjI2LCAweDA2MjcsIC8qIGMwICovCisgICAgMHgwNjI4LCAweDA2MjksIDB4MDYy YSwgMHgwNjJiLCAweDA2MmMsIDB4MDYyZCwgMHgwNjJlLCAweDA2MmYsIC8qIGM4ICovCisgICAg MHgwNjMwLCAweDA2MzEsIDB4MDYzMiwgMHgwNjMzLCAweDA2MzQsIDB4MDYzNSwgMHgwNjM2LCAw eDAwRDcsIC8qIGQwICovCisgICAgMHgwNjM3LCAweDA2MzgsIDB4MDYzOSwgMHgwNjNhLCAweDA2 NDAsIDB4MDY0MSwgMHgwNjQyLCAweDA2NDMsIC8qIGQ4ICovCisgICAgMHgwMGUwLCAweDA2NDQs IDB4MDBlMiwgMHgwNjQ1LCAweDA2NDYsIDB4MDY0NywgMHgwNjQ4LCAweDAwZTcsIC8qIGUwICov CisgICAgMHgwMGU4LCAweDAwRTksIDB4MDBlYSwgMHgwMGViLCAweDA2NDksIDB4MDY0YSwgMHgw MGVlLCAweDAwZWYsIC8qIGU4ICovCisgICAgMHgwNjRiLCAweDA2NGMsIDB4MDY0ZCwgMHgwNjRl LCAweDAwZjQsIDB4MDY0ZiwgMHgwNjUwLCAweDAwRjcsIC8qIGYwICovCisgICAgMHgwNjUxLCAw eDAwZjksIDB4MDY1MiwgMHgwMGZiLCAweDAwZmMsIDB4MjAwZSwgMHgyMDBmLCAweGZmZmQgIC8q IGY4ICovCit9OworCitzdHJ1Y3QgeF90b191bmljb2RlIHVfY3AxMjU3ID0geyAgICAgICAgLyog V2luZG93cyBMYXRpbi00ICovCisgICAgMTI4LCAwLCBYMlVfQ1AsIEFMX1JPTUFOLCJXaW5kb3dz IENvZGUgUGFnZSAxMjU3IiwiY3AxMjU3IiwgMCwgTlVMTCwKKyAgICAweDIwYWMsIDB4ZmZmZCwg MHgyMDFhLCAweGZmZmQsIDB4MjAxZSwgMHgyMDI2LCAweDIwMjAsIDB4MjAyMSwgLyogODAgKi8K KyAgICAweGZmZmQsIDB4MjAzMSwgMHhmZmZkLCAweDAwM2MsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgLyogODggKi8KKyAgICAweGZmZmQsIDB4MjAxOCwgMHgyMDE5LCAweDIwMWMs IDB4MjAxZCwgMHgyMDIyLCAweDIwMTIsIDB4MjAxNCwgLyogOTAgKi8KKyAgICAweGZmZmQsIDB4 MjEyMiwgMHhmZmZkLCAweDAwM2UsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgLyog OTggKi8KKyAgICAweDAwQTAsIDB4ZmZmZCwgMHgwMEEyLCAweDAwQTMsIDB4MDBBNCwgMHhmZmZk LCAweDAwQTYsIDB4MDBBNywgLyogYTAgKi8KKyAgICAweDAwZDgsIDB4MDBBOSwgMHgwMTU2LCAw eDAwQUIsIDB4MDBBQywgMHgwMEFELCAweDAwQUUsIDB4MDBjNiwgLyogYTggKi8KKyAgICAweDAw QjAsIDB4MDBCMSwgMHgwMEIyLCAweDAwQjMsIDB4ZmZmZCwgMHgwMEI1LCAweDAwQjYsIDB4MDBC NywgLyogYjAgKi8KKyAgICAweDAwZjgsIDB4MDBCOSwgMHgwMTU3LCAweDAwQkIsIDB4MDBCQywg MHgwMEJELCAweDAwQkUsIDB4MDBlNiwgLyogYjggKi8KKyAgICAweDAxMDQsIDB4MDEyZSwgMHgw MTAwLCAweDAxMDYsIDB4MDBDNCwgMHgwMEM1LCAweDAxMTgsIDB4MDExMiwgLyogYzAgKi8KKyAg ICAweDAxMEMsIDB4MDBDOSwgMHgwMTc5LCAweDAxMTYsIDB4MDEyMiwgMHgwMTM2LCAweDAxMmEs IDB4MDBiNywgLyogYzggKi8KKyAgICAweDAxNjAsIDB4MDE0MywgMHgwMTQ1LCAweDAwZDMsIDB4 MDE0YywgMHgwMEQ1LCAweDAwRDYsIDB4MDBENywgLyogZDAgKi8KKyAgICAweDAxNzIsIDB4MDE0 MSwgMHgwMTVBLCAweDAxNmEsIDB4MDBEQywgMHgwMTdiLCAweDAxN2QsIDB4MDBERiwgLyogZDgg Ki8KKyAgICAweDAxMDUsIDB4MDEyZiwgMHgwMTAxLCAweDAxMDcsIDB4MDBFNCwgMHgwMEU1LCAw eDAxMTksIDB4MDExMywgLyogZTAgKi8KKyAgICAweDAxMEQsIDB4MDBFOSwgMHgwMTdhLCAweDAx MTcsIDB4MDEyMywgMHgwMTM3LCAweDAxMmIsIDB4MDEzYywgLyogZTggKi8KKyAgICAweDAxNjEs IDB4MDE0NCwgMHgwMTQ2LCAweDAwZjMsIDB4MDE0ZCwgMHgwMEY1LCAweDAwRjYsIDB4MDBGNywg LyogZjAgKi8KKyAgICAweDAxNzMsIDB4MDE0MiwgMHgwMTViLCAweDAxNmIsIDB4MDBmYywgMHgw MTdjLCAweDAxN2UsIDB4ZmZmZCAgLyogZjggKi8KK307CisKK3N0cnVjdCB4X3RvX3VuaWNvZGUg dV9jcDEyNTggPSB7ICAgICAgICAvKiBXaW5kb3dzIFZpZXQgTmFtICovCisgICAgMTI4LCAwLCBY MlVfQ1AsIEFMX1JPTUFOLCJXaW5kb3dzIENvZGUgUGFnZSAxMjU4IChWaWV0IE5hbSkiLCJjcDEy NTgiLAorICAgIDAsIE5VTEwsCisgICAgMHgyMGFjLCAweGZmZmQsIDB4MjAxYSwgMHgwMTkyLCAw eDIwMWUsIDB4MjAyNiwgMHgyMDIwLCAweDIwMjEsIC8qIDgwICovCisgICAgMHgwMmM2LCAweDIw MzAsIDB4ZmZmZCwgMHgyMDM5LCAweDAxNTIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIC8qIDg4 ICovCisgICAgMHhmZmZkLCAweDIwMTgsIDB4MjAxOSwgMHgyMDFjLCAweDIwMWQsIDB4MjAyMiwg MHgyMDEzLCAweDIwMTQsIC8qIDkwICovCisgICAgMHgwMmRjLCAweDIxMjIsIDB4ZmZmZCwgMHgy MDNhLCAweDAxNTMsIDB4ZmZmZCwgMHhmZmZkLCAweDAxNzgsIC8qIDk4ICovCisgICAgMHgwMEEw LCAweDAwYTEsIDB4MDBBMiwgMHgwMEEzLCAweDAwQTQsIDB4MDBhNSwgMHgwMEE2LCAweDAwQTcs IC8qIGEwICovCisgICAgMHgwMGE4LCAweDAwQTksIDB4MDBhYSwgMHgwMEFCLCAweDAwQUMsIDB4 MDBBRCwgMHgwMEFFLCAweDAwYWYsIC8qIGE4ICovCisgICAgMHgwMEIwLCAweDAwQjEsIDB4MDBC MiwgMHgwMEIzLCAweDAwYjQsIDB4MDBCNSwgMHgwMEI2LCAweDAwQjcsIC8qIGIwICovCisgICAg MHgwMGI4LCAweDAwQjksIDB4MDBiYSwgMHgwMEJCLCAweDAwQkMsIDB4MDBCRCwgMHgwMEJFLCAw eDAwYmYsIC8qIGI4ICovCisgICAgMHgwMGMwLCAweDAwYzEsIDB4MDBjMiwgMHgwMTAyLCAweDAw QzQsIDB4MDBDNSwgMHgwMGM2LCAweDAwYzcsIC8qIGMwICovCisgICAgMHgwMGM4LCAweDAwQzks IDB4MDBjYSwgMHgwMGNiLCAweDAzMDAsIDB4MDBjZCwgMHgwMGNlLCAweDAwY2YsIC8qIGM4ICov CisgICAgMHgwMTEwLCAweDAwZDEsIDB4MDMwOSwgMHgwMGQzLCAweDAwZDQsIDB4MDFhMCwgMHgw MEQ2LCAweDAwRDcsIC8qIGQwICovCisgICAgMHgwMGQ4LCAweDAwZDksIDB4MDBkYSwgMHgwMGRi LCAweDAwREMsIDB4MDFhZiwgMHgwMzAzLCAweDAwREYsIC8qIGQ4ICovCisgICAgMHgwMGUwLCAw eDAwZTEsIDB4MDBlMiwgMHgwMTAzLCAweDAwRTQsIDB4MDBFNSwgMHgwMGU2LCAweDAwZDcsIC8q IGUwICovCisgICAgMHgwMGU4LCAweDAwRTksIDB4MDBlYSwgMHgwMGViLCAweDAzMDEsIDB4MDBl ZCwgMHgwMGVlLCAweDAwZWYsIC8qIGU4ICovCisgICAgMHgwMTExLCAweDAwZjEsIDB4MDMyMywg MHgwMGYzLCAweDAwZjQsIDB4MDFhMSwgMHgwMEY2LCAweDAwRjcsIC8qIGYwICovCisgICAgMHgw MGY4LCAweDAwZjksIDB4MDBmYSwgMHgwMGZiLCAweDAwZmMsIDB4MDFiMCwgMHgyMGFiLCAweDAw ZmYgIC8qIGY4ICovCit9OworCitzdHJ1Y3QgeF90b191bmljb2RlIHVfY3AzNyA9IHsgIC8qIEVC Q0RJQyBVLlMuICovCisgICAgMjU2LCAwLCBYMlVfQ1AsIEFMX1JPTUFOLCJDb2RlIFBhZ2UgMDM3 IEVCQ0RJQyAoVS5TLikiLCJjcDAzNyIsIDAsIE5VTEwsCisgICAgMHgwMDAwLCAweDAwMDEsIDB4 MDAwMiwgMHgwMDAzLCAweDAwOUMsIDB4MDAwOSwgMHgwMDg2LCAweDAwN0YsCisgICAgMHgwMDk3 LCAweDAwOEQsIDB4MDA4RSwgMHgwMDBCLCAweDAwMEMsIDB4MDAwRCwgMHgwMDBFLCAweDAwMEYs CisgICAgMHgwMDEwLCAweDAwMTEsIDB4MDAxMiwgMHgwMDEzLCAweDAwOUQsIDB4MDA4NSwgMHgw MDA4LCAweDAwODcsCisgICAgMHgwMDE4LCAweDAwMTksIDB4MDA5MiwgMHgwMDhGLCAweDAwMUMs IDB4MDAxRCwgMHgwMDFFLCAweDAwMUYsCisgICAgMHgwMDgwLCAweDAwODEsIDB4MDA4MiwgMHgw MDgzLCAweDAwODQsIDB4MDAwQSwgMHgwMDE3LCAweDAwMUIsCisgICAgMHgwMDg4LCAweDAwODks IDB4MDA4QSwgMHgwMDhCLCAweDAwOEMsIDB4MDAwNSwgMHgwMDA2LCAweDAwMDcsCisgICAgMHgw MDkwLCAweDAwOTEsIDB4MDAxNiwgMHgwMDkzLCAweDAwOTQsIDB4MDA5NSwgMHgwMDk2LCAweDAw MDQsCisgICAgMHgwMDk4LCAweDAwOTksIDB4MDA5QSwgMHgwMDlCLCAweDAwMTQsIDB4MDAxNSwg MHgwMDlFLCAweDAwMUEsCisgICAgMHgwMDIwLCAweDAwQTAsIDB4MDBFMiwgMHgwMEU0LCAweDAw RTAsIDB4MDBFMSwgMHgwMEUzLCAweDAwRTUsCisgICAgMHgwMEU3LCAweDAwRjEsIDB4MDBBMiwg MHgwMDJFLCAweDAwM0MsIDB4MDAyOCwgMHgwMDJCLCAweDAwN0MsCisgICAgMHgwMDI2LCAweDAw RTksIDB4MDBFQSwgMHgwMEVCLCAweDAwRTgsIDB4MDBFRCwgMHgwMEVFLCAweDAwRUYsCisgICAg MHgwMEVDLCAweDAwREYsIDB4MDAyMSwgMHgwMDI0LCAweDAwMkEsIDB4MDAyOSwgMHgwMDNCLCAw eDAwQUMsCisgICAgMHgwMDJELCAweDAwMkYsIDB4MDBDMiwgMHgwMEM0LCAweDAwQzAsIDB4MDBD MSwgMHgwMEMzLCAweDAwQzUsCisgICAgMHgwMEM3LCAweDAwRDEsIDB4MDBBNiwgMHgwMDJDLCAw eDAwMjUsIDB4MDA1RiwgMHgwMDNFLCAweDAwM0YsCisgICAgMHgwMEY4LCAweDAwQzksIDB4MDBD QSwgMHgwMENCLCAweDAwQzgsIDB4MDBDRCwgMHgwMENFLCAweDAwQ0YsCisgICAgMHgwMENDLCAw eDAwNjAsIDB4MDAzQSwgMHgwMDIzLCAweDAwNDAsIDB4MDAyNywgMHgwMDNELCAweDAwMjIsCisg ICAgMHgwMEQ4LCAweDAwNjEsIDB4MDA2MiwgMHgwMDYzLCAweDAwNjQsIDB4MDA2NSwgMHgwMDY2 LCAweDAwNjcsCisgICAgMHgwMDY4LCAweDAwNjksIDB4MDBBQiwgMHgwMEJCLCAweDAwRjAsIDB4 MDBGRCwgMHgwMEZFLCAweDAwQjEsCisgICAgMHgwMEIwLCAweDAwNkEsIDB4MDA2QiwgMHgwMDZD LCAweDAwNkQsIDB4MDA2RSwgMHgwMDZGLCAweDAwNzAsCisgICAgMHgwMDcxLCAweDAwNzIsIDB4 MDBBQSwgMHgwMEJBLCAweDAwRTYsIDB4MDBCOCwgMHgwMEM2LCAweDAwQTQsCisgICAgMHgwMEI1 LCAweDAwN0UsIDB4MDA3MywgMHgwMDc0LCAweDAwNzUsIDB4MDA3NiwgMHgwMDc3LCAweDAwNzgs CisgICAgMHgwMDc5LCAweDAwN0EsIDB4MDBBMSwgMHgwMEJGLCAweDAwRDAsIDB4MDBERCwgMHgw MERFLCAweDAwQUUsCisgICAgMHgwMDVFLCAweDAwQTMsIDB4MDBBNSwgMHgwMEI3LCAweDAwQTks IDB4MDBBNywgMHgwMEI2LCAweDAwQkMsCisgICAgMHgwMEJELCAweDAwQkUsIDB4MDA1QiwgMHgw MDVELCAweDAwQUYsIDB4MDBBOCwgMHgwMEI0LCAweDAwRDcsCisgICAgMHgwMDdCLCAweDAwNDEs IDB4MDA0MiwgMHgwMDQzLCAweDAwNDQsIDB4MDA0NSwgMHgwMDQ2LCAweDAwNDcsCisgICAgMHgw MDQ4LCAweDAwNDksIDB4MDBBRCwgMHgwMEY0LCAweDAwRjYsIDB4MDBGMiwgMHgwMEYzLCAweDAw RjUsCisgICAgMHgwMDdELCAweDAwNEEsIDB4MDA0QiwgMHgwMDRDLCAweDAwNEQsIDB4MDA0RSwg MHgwMDRGLCAweDAwNTAsCisgICAgMHgwMDUxLCAweDAwNTIsIDB4MDBCOSwgMHgwMEZCLCAweDAw RkMsIDB4MDBGOSwgMHgwMEZBLCAweDAwRkYsCisgICAgMHgwMDVDLCAweDAwRjcsIDB4MDA1Mywg MHgwMDU0LCAweDAwNTUsIDB4MDA1NiwgMHgwMDU3LCAweDAwNTgsCisgICAgMHgwMDU5LCAweDAw NUEsIDB4MDBCMiwgMHgwMEQ0LCAweDAwRDYsIDB4MDBEMiwgMHgwMEQzLCAweDAwRDUsCisgICAg MHgwMDMwLCAweDAwMzEsIDB4MDAzMiwgMHgwMDMzLCAweDAwMzQsIDB4MDAzNSwgMHgwMDM2LCAw eDAwMzcsCisgICAgMHgwMDM4LCAweDAwMzksIDB4MDBCMywgMHgwMERCLCAweDAwREMsIDB4MDBE OSwgMHgwMERBLCAweDAwOUYKK307CisKKy8qIE90aGVyIHByb3ByaWV0YXJ5IDgtYml0IHNldHMg Ki8KKworc3RydWN0IHhfdG9fdW5pY29kZSB1X2RlY21jcyA9IHsKKyAgICA5NiwgMzIsIFgyVV9E RUN8WDJVX1NURCwgQUxfUk9NQU4sICJERUMgTXVsdGluYXRpb25hbCIsICJkZWMtbWNzIiwgMCwg IiU1IiwKKyAgICAweDAwQTAsIDB4MDBBMSwgMHgwMEEyLCAweDAwQTMsIDB4ZmZmZCwgMHgwMEE1 LCAweGZmZmQsIDB4MDBBNywKKyAgICAweDAwQTQsIDB4MDBBOSwgMHgwMEFBLCAweDAwQUIsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDAwQjAsIDB4MDBCMSwgMHgwMEIy LCAweDAwQjMsIDB4ZmZmZCwgMHgwMEI1LCAweDAwQjYsIDB4MDBCNywKKyAgICAweGZmZmQsIDB4 MDBCOSwgMHgwMEJBLCAweDAwQkIsIDB4MDBCQywgMHgwMEJELCAweGZmZmQsIDB4MDBCRiwKKyAg ICAweDAwQzAsIDB4MDBDMSwgMHgwMEMyLCAweDAwQzMsIDB4MDBDNCwgMHgwMEM1LCAweDAwQzYs IDB4MDBDNywKKyAgICAweDAwQzgsIDB4MDBDOSwgMHgwMENBLCAweDAwQ0IsIDB4MDBDQywgMHgw MENELCAweDAwQ0UsIDB4MDBDRiwKKyAgICAweGZmZmQsIDB4MDBEMSwgMHgwMEQyLCAweDAwRDMs IDB4MDBENCwgMHgwMEQ1LCAweDAwRDYsIDB4MDE1MiwKKyAgICAweDAwRDgsIDB4MDBEOSwgMHgw MERBLCAweDAwREIsIDB4MDBEQywgMHgwMERELCAweGZmZmQsIDB4MDBERiwKKyAgICAweDAwRTAs IDB4MDBFMSwgMHgwMEUyLCAweDAwRTMsIDB4MDBFNCwgMHgwMEU1LCAweDAwRTYsIDB4MDBFNywK KyAgICAweDAwRTgsIDB4MDBFOSwgMHgwMEVBLCAweDAwRUIsIDB4MDBFQywgMHgwMEVELCAweDAw RUUsIDB4MDBFRiwKKyAgICAweGZmZmQsIDB4MDBGMSwgMHgwMEYyLCAweDAwRjMsIDB4MDBGNCwg MHgwMEY1LCAweDAwRjYsIDB4MDE1MywKKyAgICAweDAwRjgsIDB4MDBGOSwgMHgwMEZBLCAweDAw RkIsIDB4MDBGQywgMHgwMEZELCAweGZmZmQsIDB4MDBGRgorfTsKKworc3RydWN0IHhfdG9fdW5p Y29kZSB1X2hwcm9tYW44ID0geworICAgIDk2LCAzMiwgWDJVX1NURCwgQUxfUk9NQU4sICJIZXds ZXR0IFBhY2thcmQgUm9tYW4gOCIsICJocC1yb21hbjgiLCAwLCBOVUxMLAorICAgIDB4MDBhMCwg MHgwMGMwLCAweDAwYzIsIDB4MDBjOCwgMHgwMGNhLCAweDAwY2IsIDB4MDBjZSwgMHgwMGNmLAor ICAgIDB4MDBiNCwgMHgwMGE2LCAweDAwYTksIDB4MDBhOCwgMHgwMGFjLCAweDAwZDksIDB4MDBk YiwgMHgyMGE0LAorICAgIDB4MDBhZiwgMHgwMGRkLCAweDAwZmQsIDB4MDBiMCwgMHgwMGM3LCAw eDAwZTcsIDB4MDBkMSwgMHgwMGYxLAorICAgIDB4MDBhMSwgMHgwMGJmLCAweDAwYTQsIDB4MDBh MywgMHgwMGE1LCAweDAwYTcsIDB4MDE5MiwgMHgwMGEyLAorICAgIDB4MDBlMiwgMHgwMGVhLCAw eDAwZjQsIDB4MDBmYiwgMHgwMGUxLCAweDAwZTksIDB4MDBmMywgMHgwMGZhLAorICAgIDB4MDBl MCwgMHgwMGU4LCAweDAwZjIsIDB4MDBmOSwgMHgwMGU0LCAweDAwZWIsIDB4MDBmNiwgMHgwMGZj LAorICAgIDB4MDBjNSwgMHgwMGVlLCAweDAwZDgsIDB4MDBjNiwgMHgwMGU1LCAweDAwZWQsIDB4 MDBmOCwgMHgwMGU2LAorICAgIDB4MDBjNCwgMHgwMGVjLCAweDAwZDYsIDB4MDBkYywgMHgwMGM5 LCAweDAwZWYsIDB4MDBkZiwgMHgwMGQ0LAorICAgIDB4MDBjMSwgMHgwMGMzLCAweDAwZTMsIDB4 MDBkMCwgMHgwMGYwLCAweDAwY2QsIDB4MDBjYywgMHgwMGQzLAorICAgIDB4MDBkMiwgMHgwMGQ1 LCAweDAwZjUsIDB4MDE2MCwgMHgwMTYxLCAweDAwZGEsIDB4MDBiOCwgMHgwMGZmLAorICAgIDB4 MDBkZSwgMHgwMGZlLCAweDAwYjcsIDB4MDBiNSwgMHgwMGI2LCAweDAwYmUsIDB4MjAxNSwgMHgw MGJjLAorICAgIDB4MDBiZCwgMHgwMGFhLCAweDAwYmEsIDB4MDBhYiwgMHgyNTg4LCAweDAwYmIs IDB4MDBiMSwgMHhmZmZkCit9OworCitzdHJ1Y3QgeF90b191bmljb2RlIHVfZGdpID0geworIDk2 LDMyLFgyVV9TVEQsQUxfUk9NQU4sIkRhdGEgR2VuZXJhbCBJbnRlcm5hdGlvbmFsIiwiZGctaW50 ZXJuYXRpb25hbCIsMCxOVUxMLAorICAgIDB4MDBhMCwgMHgwMGFjLCAweDAwYmQsIDB4MDBiNSwg MHgwMGIyLCAweDAwYjMsIDB4MDBhNCwgMHgwMGEyLAorICAgIDB4MDBhMywgMHgwMGFhLCAweDAw YmEsIDB4MDBhMSwgMHgwMGJmLCAweDAwYTksIDB4MDBhZSwgMHgyMDIxLAorICAgIDB4MDBiYiwg MHgwMGFiLCAweDAwYjYsIDB4MjEyMiwgMHgwMTkyLCAweDAwYTUsIDB4MDBiMSwgMHgyMjY0LAor ICAgIDB4MjI2NSwgMHgwMGI3LCAweDAwYjgsIDB4MDBhNywgMHgwMGIwLCAweDAwYTgsIDB4MDBi NCwgMHgyMTkxLAorICAgIDB4MDBjMSwgMHgwMGMwLCAweDAwYzIsIDB4MDBjNCwgMHgwMGMzLCAw eDAwYzUsIDB4MDBjNiwgMHgwMGM3LAorICAgIDB4MDBjOSwgMHgwMGM4LCAweDAwY2EsIDB4MDBj YiwgMHgwMGNkLCAweDAwY2MsIDB4MDBjZSwgMHgwMGNmLAorICAgIDB4MDBkMSwgMHgwMGQzLCAw eDAwZDIsIDB4MDBkNCwgMHgwMGQ2LCAweDAwZDUsIDB4MDBkOCwgMHgwMjc2LAorICAgIDB4MDBk YSwgMHgwMGQ5LCAweDAwZGIsIDB4MDBkYywgMHhmZmZkLCAweDAxNzgsIDB4ZmZmZCwgMHhmZmZk LAorICAgIDB4MDBlMSwgMHgwMGUwLCAweDAwZTIsIDB4MDBlNCwgMHgwMGUzLCAweDAwZTUsIDB4 MDBlNiwgMHgwMGU3LAorICAgIDB4MDBlOSwgMHgwMGU4LCAweDAwZWEsIDB4MDBlYiwgMHgwMGVk LCAweDAwZWMsIDB4MDBlZSwgMHgwMGVmLAorICAgIDB4MDBmMSwgMHgwMGYzLCAweDAwZjIsIDB4 MDBmNCwgMHgwMGY2LCAweDAwZjUsIDB4MDBmOCwgMHgwMTUzLAorICAgIDB4MDBmYSwgMHgwMGY5 LCAweDAwZmIsIDB4MDBmYywgMHgwMGRmLCAweDAwZmYsIDB4ZmZmZCwgMHgyNTg4Cit9OworCitz dHJ1Y3QgeF90b191bmljb2RlIHVfbmV4dHN0ZXAgPSB7CisgICAgMTI4LCAwLCAwLCBBTF9ST01B TiwiTmVYVFNURVAgTXVsdGluYXRpb25hbCIsIm5leHQtbXVsdGluYXRpb25hbCIsMCxOVUxMLAor ICAgIDB4MDBhMCwgMHgwMGMwLCAweDAwYzEsIDB4MDBjMiwgMHgwMGMzLCAweDAwYzQsIDB4MDBj NSwgMHgwMGM3LAorICAgIDB4MDBjOCwgMHgwMGM5LCAweDAwY2EsIDB4MDBjYiwgMHgwMGNjLCAw eDAwY2QsIDB4MDBjZSwgMHgwMGNmLAorICAgIDB4MDBkMCwgMHgwMGQxLCAweDAwZDIsIDB4MDBk MywgMHgwMGQ0LCAweDAwZDUsIDB4MDBkNiwgMHgwMGQ5LAorICAgIDB4MDBkYSwgMHgwMGRiLCAw eDAwZGMsIDB4MDBkZCwgMHgwMGRlLCAweDAwYjUsIDB4MDBkNywgMHgwMGY3LAorICAgIDB4MDBh OSwgMHgwMGExLCAweDAwYTIsIDB4MDBhMywgMHgyMDQ0LCAweDAwYTUsIDB4MDE5MiwgMHgwMGE3 LAorICAgIDB4MDBhNCwgMHgyMDE5LCAweDIwMWMsIDB4MDBhYiwgMHgyMDM5LCAweDIwM2EsIDB4 ZmIwMSwgMHhmYjAyLAorICAgIDB4MDBhZSwgMHgyMDEzLCAweDIwMjAsIDB4MjAyMSwgMHgwMGI3 LCAweDAwYTYsIDB4MDBiNiwgMHgyMDIyLAorICAgIDB4MjAxYSwgMHgyMDFlLCAweDIwMWQsIDB4 MDBiYiwgMHgyMDI2LCAweDIwMzAsIDB4MDBhYywgMHgwMGJmLAorICAgIDB4MDBiOSwgMHgwMmNi LCAweDAwYjQsIDB4MDJjNiwgMHgwMmRjLCAweDAwYWYsIDB4MDJkOCwgMHgwMmQ5LAorICAgIDB4 MDBhOCwgMHgwMGIyLCAweDAyZGEsIDB4MDBiOCwgMHgwMGIzLCAweDAyZGQsIDB4MDJkYiwgMHgw MmM3LAorICAgIDB4MjAxNCwgMHgwMGIxLCAweDAwYmMsIDB4MDBiZCwgMHgwMGJlLCAweDAwZTAs IDB4MDBlMSwgMHgwMGUyLAorICAgIDB4MDBlMywgMHgwMGU0LCAweDAwZTUsIDB4MDBlNywgMHgw MGU4LCAweDAwZTksIDB4MDBlYSwgMHgwMGViLAorICAgIDB4MDBlYywgMHgwMGM2LCAweDAwZWQs IDB4MDBhYSwgMHgwMGVlLCAweDAwZWYsIDB4MDBmMCwgMHgwMGYxLAorICAgIDB4MDE0MSwgMHgw MGQ4LCAweDAxNTIsIDB4MDBiYSwgMHgwMGYyLCAweDAwZjMsIDB4MDBmNCwgMHgwMGY1LAorICAg IDB4MDBmNiwgMHgwMGU2LCAweDAwZjksIDB4MDBmYSwgMHgwMGZiLCAweDAxMzEsIDB4MDBmYywg MHgwMGZkLAorICAgIDB4MDE0MiwgMHgwMGY4LCAweDAxNTMsIDB4MDBkZiwgMHgwMGZlLCAweDAw ZmYsIDB4ZmZmZCwgMHhmZmZkCit9OworCitzdHJ1Y3QgeF90b191bmljb2RlIHVfbWFjbGF0aW4g PSB7CisgICAgMTI4LCAwLCAwLCBBTF9ST01BTiwiTWFjaW50b3NoIExhdGluIiwibWFjbGF0aW4i LCAwLCBOVUxMLAorICAgIDB4MDBDNCwgMHgwMEM1LCAweDAwQzcsIDB4MDBDOSwgMHgwMEQxLCAw eDAwRDYsIDB4MDBEQywgMHgwMEUxLAorICAgIDB4MDBFMCwgMHgwMEUyLCAweDAwRTQsIDB4MDBF MywgMHgwMEU1LCAweDAwRTcsIDB4MDBFOSwgMHgwMEU4LAorICAgIDB4MDBFQSwgMHgwMEVCLCAw eDAwRUQsIDB4MDBFQywgMHgwMEVFLCAweDAwRUYsIDB4MDBGMSwgMHgwMEYzLAorICAgIDB4MDBG MiwgMHgwMEY0LCAweDAwRjYsIDB4MDBGNSwgMHgwMEZBLCAweDAwRjksIDB4MDBGQiwgMHgwMEZD LAorICAgIDB4MDBERCwgMHgwMEIwLCAweDAwQTIsIDB4MDBBMywgMHgwMEE3LCAweDIwMjIsIDB4 MDBCNiwgMHgwMERGLAorICAgIDB4MDBBRSwgMHgwMEE5LCAweDIxMjIsIDB4MDBCNCwgMHgwMEE4 LCAweDIyNjAsIDB4MDBDNiwgMHgwMEQ4LAorICAgIDB4MjIxRSwgMHgwMEIxLCAweDIyNjQsIDB4 MjI2NSwgMHgwMEE1LCAweDAwQjUsIDB4MjIwMiwgMHgyMjExLAorICAgIDB4MjIwRiwgMHgwM0Mw LCAweDIyMkIsIDB4MDBBQSwgMHgwMEJBLCAweDIxMjYsIDB4MDBFNiwgMHgwMEY4LAorICAgIDB4 MDBCRiwgMHgwMEExLCAweDAwQUMsIDB4MjIxQSwgMHgwMTkyLCAweDIyNDgsIDB4MjIwNiwgMHgw MEFCLAorICAgIDB4MDBCQiwgMHgyMDI2LCAweDAwQTAsIDB4MDBDMCwgMHgwMEMzLCAweDAwRDUs IDB4MDE1MiwgMHgwMTUzLAorICAgIDB4MjAxMywgMHgyMDE0LCAweDIwMUMsIDB4MjAxRCwgMHgy MDE4LCAweDIwMTksIDB4MDBGNywgMHgyNUNBLAorICAgIDB4MDBGRiwgMHgwMTc4LCAweDIwNDQs IDB4MDBBNCwgMHgwMEQwLCAweDAwRjAsIDB4MDBERSwgMHgwMEZFLAorICAgIDB4MDBGRCwgMHgw MEI3LCAweDIwMUEsIDB4MjAxRSwgMHgyMDMwLCAweDAwQzIsIDB4MDBDQSwgMHgwMEMxLAorICAg IDB4MDBDQiwgMHgwMEM4LCAweDAwQ0QsIDB4MDBDRSwgMHgwMENGLCAweDAwQ0MsIDB4MDBEMywg MHgwMEQ0LAorICAgIDB4RjhGRiwgMHgwMEQyLCAweDAwREEsIDB4MDBEQiwgMHgwMEQ5LCAweDAx MzEsIDB4MDJDNiwgMHgwMkRDLAorICAgIDB4MDBBRiwgMHgwMkQ4LCAweDAyRDksIDB4MDJEQSwg MHgwMEI4LCAweDAyREQsIDB4MDJEQiwgMHgwMkM3Cit9OworCitzdHJ1Y3QgeF90b191bmljb2Rl IHVfcXVpY2tkcmF3ID0geworICAgIDEyOCwgMCwgMCwgQUxfUk9NQU4sIlF1aWNrRHJhdyIsInF1 aWNrZHJhdyIsIDAsIE5VTEwsCisgICAgMHgwMEM0LCAweDAwQzUsIDB4MDBDNywgMHgwMEM5LCAw eDAwRDEsIDB4MDBENiwgMHgwMERDLCAweDAwRTEsCisgICAgMHgwMEUwLCAweDAwRTIsIDB4MDBF NCwgMHgwMEUzLCAweDAwRTUsIDB4MDBFNywgMHgwMEU5LCAweDAwRTgsCisgICAgMHgwMEVBLCAw eDAwRUIsIDB4MDBFRCwgMHgwMEVDLCAweDAwRUUsIDB4MDBFRiwgMHgwMEYxLCAweDAwRjMsCisg ICAgMHgwMEYyLCAweDAwRjQsIDB4MDBGNiwgMHgwMEY1LCAweDAwRkEsIDB4MDBGOSwgMHgwMEZC LCAweDAwRkMsCisgICAgMHgyMDIwLCAweDAwQjAsIDB4MDBBMiwgMHgwMEEzLCAweDAwQTcsIDB4 MjAyMiwgMHgwMEI2LCAweDAwREYsCisgICAgMHgwMEFFLCAweDAwQTksIDB4MjEyMiwgMHgwMEI0 LCAweDAwQTgsIDB4MjI2MCwgMHgwMEM2LCAweDAwRDgsCisgICAgMHgyMjFFLCAweDAwQjEsIDB4 MjI2NCwgMHgyMjY1LCAweDAwQTUsIDB4MDBCNSwgMHgyMjAyLCAweDIyMTEsCisgICAgMHgyMjBG LCAweDAzQzAsIDB4MjIyQiwgMHgwMEFBLCAweDAwQkEsIDB4MDNBOSwgMHgwMEU2LCAweDAwRjgs CisgICAgMHgwMEJGLCAweDAwQTEsIDB4MDBBQywgMHgyMjFBLCAweDAxOTIsIDB4MjI0OCwgMHgy MjA2LCAweDAwQUIsCisgICAgMHgwMEJCLCAweDIwMjYsIDB4MDBBMCwgMHgwMEMwLCAweDAwQzMs IDB4MDBENSwgMHgwMTUyLCAweDAxNTMsCisgICAgMHgyMDEzLCAweDIwMTQsIDB4MjAxQywgMHgy MDFELCAweDIwMTgsIDB4MjAxOSwgMHgwMEY3LCAweDI1Q0EsCisgICAgMHgwMEZGLCAweDAxNzgs IDB4MjA0NCwgMHgwMEE0LCAweDIwMzksIDB4MjAzQSwgMHhGQjAxLCAweEZCMDIsCisgICAgMHgy MDIxLCAweDAwQjcsIDB4MjAxQSwgMHgyMDFFLCAweDIwMzAsIDB4MDBDMiwgMHgwMENBLCAweDAw QzEsCisgICAgMHgwMENCLCAweDAwQzgsIDB4MDBDRCwgMHgwMENFLCAweDAwQ0YsIDB4MDBDQywg MHgwMEQzLCAweDAwRDQsCisgICAgMHhGOEZGLCAweDAwRDIsIDB4MDBEQSwgMHgwMERCLCAweDAw RDksIDB4MDEzMSwgMHgwMkM2LCAweDAyREMsCisgICAgMHgwMEFGLCAweDAyRDgsIDB4MDJEOSwg MHgwMkRBLCAweDAwQjgsIDB4MDJERCwgMHgwMkRCLCAweDAyQzcKK307CisKKy8qIERFQyBzcGVj aWFsIGdyYXBoaWNzIC8gdGVjaG5pY2FsIHNldHMgZm9yIFZUIGVtdWxhdGlvbiAqLworCisjaWZk ZWYgS0VSTUlURk9OVAorc3RydWN0IHhfdG9fdW5pY29kZSB1X2RlY3RlY2ggPSB7CisgICAgOTQs IDMzLCBYMlVfREVDfFgyVV9TVEQsQUxfUk9NQU4sIkRFQyBUZWNobmljYWwiLCAiZGVjLXRlY2hu aWNhbCIsIDAsICI+IiwKKyAgICAgICAgICAgIDB4RTQwMCwgMHgyNTBjLCAweDI1MDAsIDB4MjMy MCwgMHgyMzIxLCAweDI1MDIsIDB4RTIwNCwKKyAgICAweEUyMDMsIDB4RTIwOSwgMHhFMjA4LCAw eEUyMDIsIDB4RTIwMSwgMHhFMjA3LCAweEUyMDYsIDB4RTIwMCwKKyAgICAweEUyMDUsIDB4RTIw RCwgMHhFMjBDLCAweDI1NzIsIDB4MjU3MSwgMHhFMjBFLCAweEUyMEYsIDB4MjMyYSwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4MjI2NCwgMHgyMjYwLCAweDIyNjUsIDB4 MjIyYiwKKyAgICAweDIyMzQsIDB4MjIxZCwgMHgyMjFlLCAweDAwZjcsIDB4MjIwNiwgMHgyMjA3 LCAweDAzYTYsIDB4MDM5MywKKyAgICAweDIyM2MsIDB4MjI0MywgMHgwMzk4LCAweDAwZDcsIDB4 MDM5YiwgMHgyMWQ0LCAweDIxZDIsIDB4MjI2MSwKKyAgICAweDIyMGYsIDB4MDNhOCwgMHhFNDAx LCAweDAzYTMsIDB4RkZGRCwgMHhmZmZkLCAweDIyMWEsIDB4MDNhOSwKKyAgICAweDAzOWUsIDB4 MDNkMiwgMHgyMjgyLCAweDIyODMsIDB4MjIyOSwgMHgyMjJhLCAweDIyMjcsIDB4MjIyOCwKKyAg ICAweDAwYWMsIDB4MDNiMSwgMHgwM2IyLCAweDAzYzcsIDB4MDNiNCwgMHgwM2I1LCAweDAzYzYs IDB4MDNiMywKKyAgICAweDAzYjcsIDB4MDNiOSwgMHgwM2I4LCAweDAzYmEsIDB4MDNiYiwgMHhG RkZELCAweDAzYmQsIDB4MjIwMiwKKyAgICAweDAzYzAsIDB4MDNjOCwgMHgwM2MxLCAweDAzYzMs IDB4MDNjNCwgMHhGRkZELCAweDAxOTIsIDB4MDNjOSwKKyAgICAweDAzYmUsIDB4MDNjNSwgMHgw M2I2LCAweDIxOTAsIDB4MjE5MSwgMHgyMTkyLCAweDIxOTMKK307CisjZWxzZQorc3RydWN0IHhf dG9fdW5pY29kZSB1X2RlY3RlY2ggPSB7CisgICAgOTQsIDMzLCBYMlVfREVDfFgyVV9TVEQsQUxf Uk9NQU4sIkRFQyBUZWNobmljYWwiLCAiZGVjLXRlY2huaWNhbCIsIDAsICI+IiwKKyAgICAgICAg ICAgIDB4MjIxYSwgMHgyNTBjLCAweDI1MDAsIDB4MjMyMCwgMHgyMzIxLCAweDI1MDIsIDB4MjMw OCwgLyogMjEtMjcgKi8KKyAgICAweDIzMGEsIDB4MjMwOSwgMHgyMzBiLCAweDI1NmQsIDB4MjU3 MCwgMHgyNTZlLCAweDI1NmYsIDB4MjUyNSwgLyogMjgtMmYgKi8KKyAgICAweDI1MWQsIDB4MjIx MSwgMHgyMjExLCAweDI1NzIsIDB4MjU3MSwgMHgyMzFkLCAweDIzMWYsIDB4MjMyYSwgLyogMzAt MzcgKi8KKyAgICAweDAwNWIsIDB4MjAyMiwgMHgwMDVkLCAweDAwYjEsIDB4MjI2NCwgMHgyMjYw LCAweDIyNjUsIDB4MjIyYiwgLyogMzgtM2YgKi8KKyAgICAweDIyMzQsIDB4MjIxZCwgMHgyMjFl LCAweDAwZjcsIDB4MjViMywgMHgyNWJkLCAweDAzYTYsIDB4MDM5MywgLyogNDAtNDcgKi8KKyAg ICAweDIyM2MsIDB4MjI0MywgMHgwMzk4LCAweDAwZDcsIDB4MDM5YiwgMHgyMWQ0LCAweDIxZDIs IDB4MjI2MSwgLyogNDgtNGYgKi8KKyAgICAweDIyMGYsIDB4MDNhOCwgMHgyMjE4LCAweDIyMTEs IDB4MDBhNywgMHgwMGI2LCAweDIyMWEsIDB4MDNhOSwgLyogNTAtNTcgKi8KKyAgICAweDAzOWUs IDB4MDNkMiwgMHgyMjgyLCAweDIyODMsIDB4MjIyOSwgMHgyMjJhLCAweDIyMjcsIDB4MjIyOCwg LyogNTgtNWYgKi8KKyAgICAweDAwYWMsIDB4MDNiMSwgMHgwM2IyLCAweDAzYzcsIDB4MDNiNCwg MHgwM2I1LCAweDAzYzYsIDB4MDNiMywgLyogNjAtNjcgKi8KKyAgICAweDAzYjcsIDB4MDNiOSwg MHgwM2I4LCAweDAzYmEsIDB4MDNiYiwgMHgwM2JjLCAweDAzYmQsIDB4MjIwMiwgLyogNjgtNmYg Ki8KKyAgICAweDAzYzAsIDB4MDNjOCwgMHgwM2MxLCAweDAzYzMsIDB4MDNjNCwgMHgwMDIwLCAw eDAxOTIsIDB4MDNjOSwgLyogNzAtNzcgKi8KKyAgICAweDAzYmUsIDB4MDNjNSwgMHgwM2I2LCAw eDIxOTAsIDB4MjE5MSwgMHgyMTkyLCAweDIxOTMgICAgICAgICAgLyogNzgtN2UgKi8KK307Cisj ZW5kaWYgLyogS0VSTUlURk9OVCAqLworCisjaWZkZWYgS0VSTUlURk9OVAorc3RydWN0IHhfdG9f dW5pY29kZSB1X2RlY3NwZWMgPSB7CisgICAgOTQsMzMsWDJVX0RFQ3xYMlVfU1RELEFMX1JPTUFO LCJERUMgU3BlY2lhbCBHcmFwaGljcyIsImRlYy1zcGVjaWFsIiwwLCIwIiwKKyAgICAgICAgICAg IDB4MDAyMSwgMHgwMDIyLCAweDAwMjMsIDB4MDAyNCwgMHgwMDI1LCAweDAwMjYsIDB4MDAyNywK KyAgICAweDAwMjgsIDB4MDAyOSwgMHgwMDJhLCAweDAwMmIsIDB4MDAyYywgMHgwMDJkLCAweDAw MmUsIDB4MDAyZiwKKyAgICAweDAwMzAsIDB4MDAzMSwgMHgwMDMyLCAweDAwMzMsIDB4MDAzNCwg MHgwMDM1LCAweDAwMzYsIDB4MDAzNywKKyAgICAweDAwMzgsIDB4MDAzOSwgMHgwMDNhLCAweDAw M2IsIDB4MDAzYywgMHgwMDNkLCAweDAwM2UsIDB4MDAzZiwKKyAgICAweDAwNDAsIDB4MDA0MSwg MHgwMDQyLCAweDAwNDMsIDB4MDA0NCwgMHgwMDQ1LCAweDAwNDYsIDB4MDA0NywKKyAgICAweDAw NDgsIDB4MDA0OSwgMHgwMDRhLCAweDAwNGIsIDB4MDA0YywgMHgwMDRkLCAweDAwNGUsIDB4MDA0 ZiwKKyAgICAweDAwNTAsIDB4MDA1MSwgMHgwMDUyLCAweDAwNTMsIDB4MDA1NCwgMHgwMDU1LCAw eDAwNTYsIDB4MDA1NywKKyAgICAweDAwNTgsIDB4MDA1OSwgMHgwMDVhLCAweDAwNWIsIDB4MDA1 YywgMHgwMDVkLCAweDAwNWUsIDB4MDA1ZiwKKyAgICAweDI2NjYsIDB4MjU5MSwgMHgyNDA5LCAw eDI0MGMsIDB4MjQwZCwgMHgyNDBhLCAweDAwYjAsIDB4MDBiMSwKKyAgICAweDI0MjQsIDB4MjQw YiwgMHgyNTE4LCAweDI1MTAsIDB4MjUwYywgMHgyNTE0LCAweDI1M2MsIDB4MjNCQSwKKyAgICAw eDIzQkIsIDB4MjUwMCwgMHgyM0JDLCAweDIzQkQsIDB4MjUxYywgMHgyNTI0LCAweDI1MzQsIDB4 MjUyYywKKyAgICAweDI1MDIsIDB4MjI2NCwgMHgyMjY1LCAweDAzYzAsIDB4MjI2MCwgMHgwMGEz LCAweDAwQjcKK307CisjZWxzZQorc3RydWN0IHhfdG9fdW5pY29kZSB1X2RlY3NwZWMgPSB7Cisg ICAgOTQsMzMsWDJVX0RFQ3xYMlVfU1RELEFMX1JPTUFOLCJERUMgU3BlY2lhbCBHcmFwaGljcyIs ImRlYy1zcGVjaWFsIiwwLCIwIiwKKyAgICAgICAgICAgIDB4MDAyMSwgMHgwMDIyLCAweDAwMjMs IDB4MDAyNCwgMHgwMDI1LCAweDAwMjYsIDB4MDAyNywKKyAgICAweDAwMjgsIDB4MDAyOSwgMHgw MDJhLCAweDAwMmIsIDB4MDAyYywgMHgwMDJkLCAweDAwMmUsIDB4MDAyZiwKKyAgICAweDAwMzAs IDB4MDAzMSwgMHgwMDMyLCAweDAwMzMsIDB4MDAzNCwgMHgwMDM1LCAweDAwMzYsIDB4MDAzNywK KyAgICAweDAwMzgsIDB4MDAzOSwgMHgwMDNhLCAweDAwM2IsIDB4MDAzYywgMHgwMDNkLCAweDAw M2UsIDB4MDAzZiwKKyAgICAweDAwNDAsIDB4MDA0MSwgMHgwMDQyLCAweDAwNDMsIDB4MDA0NCwg MHgwMDQ1LCAweDAwNDYsIDB4MDA0NywKKyAgICAweDAwNDgsIDB4MDA0OSwgMHgwMDRhLCAweDAw NGIsIDB4MDA0YywgMHgwMDRkLCAweDAwNGUsIDB4MDA0ZiwKKyAgICAweDAwNTAsIDB4MDA1MSwg MHgwMDUyLCAweDAwNTMsIDB4MDA1NCwgMHgwMDU1LCAweDAwNTYsIDB4MDA1NywKKyAgICAweDAw NTgsIDB4MDA1OSwgMHgwMDVhLCAweDAwNWIsIDB4MDA1YywgMHgwMDVkLCAweDAwNWUsIDB4MDA1 ZiwKKyAgICAweDI2NjYsIDB4MjU5MSwgMHgyNDA5LCAweDI0MGMsIDB4MjQwZCwgMHgyNDBhLCAw eDAwYjAsIDB4MDBiMSwKKyAgICAweDI0MjQsIDB4MjQwYiwgMHgyNTE4LCAweDI1MTAsIDB4MjUw YywgMHgyNTE0LCAweDI1M2MsIDB4MjU5NCwKKyAgICAweDI1MDAsIDB4MjUwMCwgMHgyNTAwLCAw eDI1MDAsIDB4MjUxYywgMHgyNTI0LCAweDI1MzQsIDB4MjUyYywKKyAgICAweDI1MDIsIDB4MjI2 NCwgMHgyMjY1LCAweDAzYTAsIDB4MjI2MCwgMHgwMGEzLCAweDAwQjcKK307CisjZW5kaWYgLyog S0VSTUlURk9OVCAqLworCisvKgorICBIYXplbHRpbmUgMTUwMC8xNTIwIGdyYXBoaWMgc2V0LiAg SW5jbHVkZXMgc2V2ZXJhbCBhcHByb3hpbWF0aW9uczoKKyAgIC4gKDAsOSkgc2hvdWxkIGJlIGhl YXZ5IGJsYWNrIHJpZ2h0IGFycm93LiAgVW5pY29kZSBoYXMgb25lIG9mIHRoZXNlCisgICAgIGF0 IFUrMjdBMSBidXQuLi4KKyAgIC4gKDMsOSkgc2hvdWxkIGJlIGhlYXZ5IGJsYWNrIGRvd24gYXJy b3c7IFVuaWNvZGUgZG9lc24ndCBoYXZlIG9uZS4KKyAgICAgU28gd2UgdXNlIHRoZSB3aGl0ZSB2 ZXJzaW9ucyBvZiB0aGUgaGVhdnkgYXJyb3dzIGluc3RlYWQuCisgICAuICgxLDkpIHRoZSBsZXR0 ZXJzICJQZSIgaW4gb25lIGNlbGwsIGRvZXNuJ3QgZXhpc3QgaW4gVW5pY29kZS4KKyAgICAgU3Vi c3RpdHV0aW9uIGlzIGp1c3QgIlAiLgorKi8KK3N0cnVjdCB4X3RvX3VuaWNvZGUgdV9oejE1MDAg PSB7CisgICAgOTQsMzMsWDJVX1NURCxBTF9ST01BTiwiSGF6ZWx0aW1lIEdyYXBoaWNzIiwiaHox NTAwLWdyYXBoaWNzIiwwLCIwIiwKKy8qICAgICAwICAgICAgIDEgICAgICAgMiAgICAgICAzICAg ICAgIDQgICAgICAgNSAgICAgICA2ICAgICAgIDcgICAgICAgICAqLworICAgICAgICAgICAgMHgw MDIxLCAweDAwMjIsIDB4MDAyMywgMHgwMDI0LCAweDAwMjUsIDB4MDAyNiwgMHgwMDI3LCAvKiAw ICovCisgICAgMHgwMDI4LCAweDAwMjksIDB4MDAyYSwgMHgwMDJiLCAweDAwMmMsIDB4MDAyZCwg MHgwMDJlLCAweDAwMmYsIC8qIDEgKi8KKyAgICAweDAwMzAsIDB4MDAzMSwgMHgwMDMyLCAweDAw MzMsIDB4MDAzNCwgMHgwMDM1LCAweDAwMzYsIDB4MDAzNywgLyogMiAqLworICAgIDB4MDAzOCwg MHgwMDM5LCAweDAwM2EsIDB4MDAzYiwgMHgwMDNjLCAweDAwM2QsIDB4MDAzZSwgMHgwMDNmLCAv KiAzICovCisgICAgMHgwMDQwLCAweDAwNDEsIDB4MDA0MiwgMHgwMDQzLCAweDAwNDQsIDB4MDA0 NSwgMHgwMDQ2LCAweDAwNDcsIC8qIDQgKi8KKyAgICAweDAwNDgsIDB4MDA0OSwgMHgwMDRhLCAw eDAwNGIsIDB4MDA0YywgMHgwMDRkLCAweDAwNGUsIDB4MDA0ZiwgLyogNSAqLworICAgIDB4MDA1 MCwgMHgwMDUxLCAweDAwNTIsIDB4MDA1MywgMHgwMDU0LCAweDAwNTUsIDB4MDA1NiwgMHgwMDU3 LCAvKiA2ICovCisgICAgMHgwMDU4LCAweDAwNTksIDB4MDA1YSwgMHgwMDViLCAweDAwNWMsIDB4 MDA1ZCwgMHgwMDVlLCAweDAwNWYsIC8qIDcgKi8KKyAgICAweDI1MDAsIDB4MjUwMiwgMHgyNTNj LCAweDI1MzQsIDB4MjUyYywgMHgyNTE0LCAweDI1MGMsIDB4MDBiMSwgLyogOCAqLworICAgIDB4 MjFlOCwgMHgwMDUwLCAweDAwZjcsIDB4MjFlOSwgMHgyNTEwLCAweDI1MTgsIDB4MjUxYywgMHgy NTI0LCAvKiA5ICovCisgICAgMHgwMDcwLCAweDAwNzEsIDB4MDA3MiwgMHgyNTBjLCAweDAwNzQs IDB4MDA3NSwgMHgwMDc2LCAweDAwNzcsIC8qIGEgKi8KKyAgICAweDAwNzgsIDB4MDA3OSwgMHgw MDdhLCAweDAwN2IsIDB4MDA3YywgMHgwMDdkLCAweDAwN2UgICAgICAgICAgLyogYiAqLworCit9 OworCisjaWZkZWYgS0VSTUlURk9OVAorc3RydWN0IHhfdG9fdW5pY29kZSB1X2hlYXRoMTlnID0g eworICAgIDk0LDMzLFgyVV9TVEQsQUxfUk9NQU4sIkhlYXRoLTE5IFNwZWNpYWwgR3JhcGhpY3Mi LCJoMTktc3BlY2lhbCIsMCxOVUxMLAorICAgICAgICAgICAgMHgwMDIxLCAweDAwMjIsIDB4MDAy MywgMHgwMDI0LCAweDAwMjUsIDB4MDAyNiwgMHgwMDI3LAorICAgIDB4MDAyOCwgMHgwMDI5LCAw eDAwMmEsIDB4MDAyYiwgMHgwMDJjLCAweDAwMmQsIDB4MDAyZSwgMHgwMDJmLAorICAgIDB4MDAz MCwgMHgwMDMxLCAweDAwMzIsIDB4MDAzMywgMHgwMDM0LCAweDAwMzUsIDB4MDAzNiwgMHgwMDM3 LAorICAgIDB4MDAzOCwgMHgwMDM5LCAweDAwM2EsIDB4MDAzYiwgMHgwMDNjLCAweDAwM2QsIDB4 MDAzZSwgMHgwMDNmLAorICAgIDB4MDA0MCwgMHgwMDQxLCAweDAwNDIsIDB4MDA0MywgMHgwMDQ0 LCAweDAwNDUsIDB4MDA0NiwgMHgwMDQ3LAorICAgIDB4MDA0OCwgMHgwMDQ5LCAweDAwNGEsIDB4 MDA0YiwgMHgwMDRjLCAweDAwNGQsIDB4MDA0ZSwgMHgwMDRmLAorICAgIDB4MDA1MCwgMHgwMDUx LCAweDAwNTIsIDB4MDA1MywgMHgwMDU0LCAweDAwNTUsIDB4MDA1NiwgMHgwMDU3LAorICAgIDB4 MDA1OCwgMHgwMDU5LCAweDAwNWEsIDB4MDA1YiwgMHgwMDVjLCAweDAwNWQsIDB4MjVjZiwgMHhl MzBiLAorICAgIDB4MjUwMiwgMHgyNTAwLCAweDI1M2MsIDB4MjUxMCwgMHgyNTE4LCAweDI1MTQs IDB4MjUwYywgMHgwMGIxLAorICAgIDB4MjE5MiwgMHgyNTkyLCAweDAwZjcsIDB4MjE5MywgMHhl MzIxLCAweGUzMjAsIDB4ZTMyMiwgMHhlMzI4LAorICAgIDB4MjU4MCwgMHhlMzI1LCAweGUzMGEs IDB4MjUyYywgMHgyNTI0LCAweDI1MzQsIDB4MjUxYywgMHgyNTczLAorICAgIDB4MjU3MSwgMHgy NTcyLCAweGUzMTEsIDB4ZTMxOSwgMHhlMzAwLCAweGUzMDksIDB4MDBiNgorfTsKKyNlbHNlCitz dHJ1Y3QgeF90b191bmljb2RlIHVfaGVhdGgxOWcgPSB7CisgICAgOTQsMzMsWDJVX1NURCxBTF9S T01BTiwiSGVhdGgtMTkgU3BlY2lhbCBHcmFwaGljcyIsImgxOS1zcGVjaWFsIiwwLE5VTEwsCisg ICAgICAgICAgICAweDAwMjEsIDB4MDAyMiwgMHgwMDIzLCAweDAwMjQsIDB4MDAyNSwgMHgwMDI2 LCAweDAwMjcsCisgICAgMHgwMDI4LCAweDAwMjksIDB4MDAyYSwgMHgwMDJiLCAweDAwMmMsIDB4 MDAyZCwgMHgwMDJlLCAweDAwMmYsCisgICAgMHgwMDMwLCAweDAwMzEsIDB4MDAzMiwgMHgwMDMz LCAweDAwMzQsIDB4MDAzNSwgMHgwMDM2LCAweDAwMzcsCisgICAgMHgwMDM4LCAweDAwMzksIDB4 MDAzYSwgMHgwMDNiLCAweDAwM2MsIDB4MDAzZCwgMHgwMDNlLCAweDAwM2YsCisgICAgMHgwMDQw LCAweDAwNDEsIDB4MDA0MiwgMHgwMDQzLCAweDAwNDQsIDB4MDA0NSwgMHgwMDQ2LCAweDAwNDcs CisgICAgMHgwMDQ4LCAweDAwNDksIDB4MDA0YSwgMHgwMDRiLCAweDAwNGMsIDB4MDA0ZCwgMHgw MDRlLCAweDAwNGYsCisgICAgMHgwMDUwLCAweDAwNTEsIDB4MDA1MiwgMHgwMDUzLCAweDAwNTQs IDB4MDA1NSwgMHgwMDU2LCAweDAwNTcsCisgICAgMHgwMDU4LCAweDAwNTksIDB4MDA1YSwgMHgw MDViLCAweDAwNWMsIDB4MDA1ZCwgMHgyNWNmLCAweDI1ZTUsCisgICAgMHgyNTAyLCAweDI1MDAs IDB4MjUzYywgMHgyNTEwLCAweDI1MTgsIDB4MjUxNCwgMHgyNTBjLCAweDAwYjEsCisgICAgMHgy MTkyLCAweDI1OTIsIDB4MDBmNywgMHgyMTkzLCAweDI1OTAsIDB4MjU4YywgMHgyNThjLCAweDI1 OTAsCisgICAgMHgyNTgwLCAweDI1OTAsIDB4MjVlNCwgMHgyNTJjLCAweDI1MjQsIDB4MjUzNCwg MHgyNTFjLCAweDI1NzMsCisgICAgMHgyNTcxLCAweDI1NzIsIDB4MjUwMCwgMHgyNTAwLCAweDI1 MDIsIDB4MjUwMiwgMHgwMGI2Cit9OworI2VuZGlmIC8qIEtFUk1JVEZPTlQgKi8KKworLyogREcg R3JhcGhpYyBzZXRzIC0gIktFUk1JVEZPTlQiIHRoZXNlIGxhdGVyLi4uICovCisKKy8qIE1pc3Np bmcsICAgIGJhY2t3YXJkcyBxdWVzdGlvbiBtYXJrCisgICBlaWdodGggbm90ZQorICAgIkRUIiBj b250cm9sIHBpYworICAgaG9yaXpvbnRhbCBzY2FuIGxpbmVzCisqLworc3RydWN0IHhfdG9fdW5p Y29kZSB1X2Rnc3BlYyA9IHsgICAgICAgIC8qIE5lZWRzIHRvIGJlIGNoZWNrZWQgKi8KKyAgICA5 NCwgMzMsIFgyVV9TVEQsQUxfUk9NQU4sIkRHIFNwZWNpYWwgR3JhcGhpY3MiLCJkZy1zcGVjaWFs Z3JhcGhpY3MiLDAsTlVMTCwKKyAgICAgICAgICAgIDB4ZmZmZCwgMHhmZmZkLCAweDI0MjQsIDB4 MjU5NCwgMHgyNTk0LCAweDI1ODEsIDB4MjU4MSwKKyAgICAweDI1YTEsIDB4MjYzYSwgMHgyNjNi LCAweDI2NjUsIDB4MjY2MywgMHgyNjYwLCAweDI1Y2YsIDB4MjVkOCwKKyAgICAweDI1Y2IsIDB4 MjVkOSwgMHgyNjQyLCAweDI2NDAsIDB4MjY2YSwgMHgyNjZjLCAweDI2M2MsIDB4MjE5NSwKKyAg ICAweDI1ODMsIDB4MjFhOCwgMHgyMzFlLCAweDIxOTQsIDB4MjIwNywgMHgwMGZmLCAweDIwYTcs IDB4MDBhYSwKKyAgICAweDAwYmEsIDB4MjMxYywgMHgyMzFkLCAweDI1OTEsIDB4MjU5MSwgMHgy NTkzLCAweDI1NjEsIDB4MjU2MiwKKyAgICAweDI1NTYsIDB4MjU1NSwgMHgyNTYzLCAweDI1NTEs IDB4MjU1NywgMHgyNTVkLCAweDI1NWMsIDB4MjU1YiwKKyAgICAweDI1NWUsIDB4MjU1ZiwgMHgy NTVhLCAweDI1NTQsIDB4MjU2OSwgMHgyNTY2LCAweDI1NjAsIDB4MjU1MCwKKyAgICAweDI1NmMs IDB4MjU2NywgMHgyNTY4LCAweDI1NjQsIDB4MjU2NSwgMHgyNTU5LCAweDI1NTgsIDB4MjU1MiwK KyAgICAweDI1NTMsIDB4MjU2YiwgMHgyNTZhLCAweDI1ODgsIDB4MjU4NCwgMHgyNThjLCAweDI1 OTAsIDB4MjU4MCwKKyAgICAweDAzOTMsIDB4MDNjMCwgMHgwM2EzLCAweDAzYTYsIDB4MDM5OCwg MHgwM2Q1LCAweDAzYjUsIDB4MDNhMCwKKyAgICAweDAzOWUsIDB4MDBiNywgMHgwM2I3LCAweDI1 YTAsIDB4MDE3OCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQKK307CisKKy8qIE1pc3Npbmc6 IGFycm93LXRvLWxpbmUsIHZhcmlvdXMgb3JpZW50YXRpb25zICovCisKK3N0cnVjdCB4X3RvX3Vu aWNvZGUgdV9kZ2xpbmUgPSB7CisgICAgOTQsIDMzLCBYMlVfU1RELEFMX1JPTUFOLCJERyBMaW5l IERyYXdpbmciLCJkZy1saW5lZHJhd2luZyIsMCxOVUxMLAorICAgICAgICAgICAgMHgyNTBjLCAw eDI1MTAsIDB4MjUxNCwgMHgyNTE4LCAweDI1MmMsIDB4MjUyNCwgMHgyNTFjLAorICAgIDB4MjUz NCwgMHgyNTNjLCAweDI1MDIsIDB4MjUwMCwgMHgyMTlmLCAweDIxZTUsIDB4MjFlNCwgMHgyMWEx LAorICAgIDB4MjUwNiwgMHgyNTBmLCAweDI1MTMsIDB4MjUxNywgMHgyNTFiLCAweDI1MzMsIDB4 MjUyYiwgMHgyNTIzLAorICAgIDB4MjUzYiwgMHgyNTRiLCAweDI1MDMsIDB4MjUwMSwgMHgyNTA0 LCAweDAwZjcsIDB4MDBhMiwgMHgyMTIyLAorICAgIDB4MDBhZSwgMHgwMGE5LCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZAor fTsKKworc3RydWN0IHhfdG9fdW5pY29kZSB1X2Rnd29yZCA9IHsKKyAgICA5NCwgMzMsIFgyVV9T VEQsQUxfUk9NQU4sIkRHIFdvcmQgUHJvY2Vzc2luZyIsImRnLXdvcmRwcm9jZXNzaW5nIiwwLE5V TEwsCisgICAgICAgICAgICAweDIzMDgsIDB4MjMwYSwgMHgyMzA5LCAweDIzMGIsIDB4MDE5Miwg MHgyMjNjLCAweDIyMDIsCisgICAgMHhmZmZkLCAweGZmZmQsIDB4MjMyMCwgMHgyMzIxLCAweDIy MWEsIDB4ZmZmZCwgMHgyMjFlLCAweDIyMWQsCisgICAgMHgyMDcwLCAweDAwYjksIDB4MDBiMiwg MHgwMGIzLCAweDIwNzQsIDB4MjA3NSwgMHgyMDc2LCAweDIwNzcsCisgICAgMHgyMDc4LCAweDIw NzksIDB4MjI2MCwgMHhmZmZkLCAweDIxZWYsIDB4ZmZmZCwgMHgyMWU1LCAweDAwYjcsCisgICAg MHgyMDNjLCAweDAzYjEsIDB4MDNiMiwgMHgwM2IzLCAweDAzYjQsIDB4MDNiNSwgMHgwM2I2LCAw eDAzYjcsCisgICAgMHgwM2I4LCAweDAzYjksIDB4MDNiYSwgMHgwM2JiLCAweDAzYmMsIDB4MDNi ZCwgMHgwM2JlLCAweDAzYmYsCisgICAgMHgwM2MwLCAweDAzYzEsIDB4MDNjMywgMHgwM2M0LCAw eDAzYzUsIDB4MDNjNiwgMHgwM2M3LCAweDAzYzgsCisgICAgMHgwM2M5LCAweDAzYTksIDB4MDM5 NCwgMHgwMGI2LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCisgICAgMHgyMmE2LCAw eDI1YzYsIDB4MjViNiwgMHgyNWI3LCAweDI1YzAsIDB4MjViMiwgMHgyNWJjLCAweDIzMjcsCisg ICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHgyNWUz LCAweDI1ZTIsCisgICAgMHgyMDgwLCAweDIwODEsIDB4MjA4MiwgMHgyMDgzLCAweDIwODQsIDB4 MjA4NSwgMHgyMDg2LCAweDIwODcsCisgICAgMHgyMDg4LCAweDIwODksIDB4ZmZmZCwgMHgyMTkx LCAweDIxOTIsIDB4MjE5MCwgMHgyMTkzCit9OworCisvKiBIUCBHcmFwaGljIHNldHMgLSAiS0VS TUlURk9OVCIgdGhlc2UgbGF0ZXIuLi4gKi8KKworLyoKKyAgTWFueSBhcmUgbWlzc2luZyBmcm9t IFVuaWNvZGUsCisgIFNpbmdsZS10by10cmlwbGUtbGluZSBib3gtZHJhd2luZyBjaGFyYWN0ZXJz LgorICBEb3VibGUvZG91YmxlIGNyb3NzICYgc29tZSBvdGhlcnMuCisqLworc3RydWN0IHhfdG9f dW5pY29kZSB1X2hwbGluZSA9IHsgICAgICAgIC8qIE5lZWRzIHRvIGJlIGNoZWNrZWQgKi8KKyAg ICA5NCwgMzMsIFgyVV9TVEQsQUxfUk9NQU4sIkhQIExpbmUgRHJhd2luZyBHcmFwaGljcyIsCisg ICAgImhwLWxpbmUtZHJhd2luZyIsMCxOVUxMLAorICAgICAgICAgICAgMHgyNTIwLCAweDI1Mjgs IDB4MjUyZiwgMHgyNTM3LCAweDI1NWYsIDB4MjU2MiwgMHgyNTY0LAorICAgIDB4MjU2NywgMHgy NTUxLCAweDI1NDIsIDB4MjUzZiwgMHgyNTUwLCAweDIzMGEsIDB4MjUwMiwgMHgyNTNjLAorICAg IDB4MjU0YiwgMHgyNTIzLCAweDI1MmIsIDB4MjUzMywgMHgyNTNiLCAweDI1MWMsIDB4MjUyNCwg MHgyNTJjLAorICAgIDB4MjUzNCwgMHgyNTUwLCAweDI1MDMsIDB4MjUwMSwgMHgyNTZiLCAweDIz MDgsIDB4MjU2YSwgMHgyNTZjLAorICAgIDB4MjU1ZSwgMHgyNTE3LCAweDI1NDksIDB4MjU4OCwg MHgyNThjLCAweDI1OGUsIDB4MjUxNCwgMHgyNTE4LAorICAgIDB4MjUxMCwgMHgyNTU1LCAweDI1 MmMsIDB4MjU1NiwgMHgyNTU2LCAweDI1NDcsIDB4MjU0OCwgMHgyNTU1LAorICAgIDB4MjMwYiwg MHgyNTBmLCAweDI1MGMsIDB4MjUxYiwgMHgyNTEwLCAweDI1MjQsIDB4MjU0YSwgMHgyNTEzLAor ICAgIDB4MjU4NCwgMHgyMzA5LCAweDI1ODIsIDB4MjU2MSwgMHgyNTA0LCAweDI1NTksIDB4MjU3 NiwgMHgyNTY1LAorICAgIDB4MjU1ZSwgMHgyNTE3LCAweDI1NDksIDB4MjU4OCwgMHgyNThjLCAw eDI1OGUsIDB4MjUxNCwgMHgyNTE4LAorICAgIDB4MjUxMCwgMHgyNTU1LCAweDI1MmMsIDB4MjU1 NiwgMHgyNTU2LCAweDI1NDcsIDB4MjU0OCwgMHgyNTU1LAorICAgIDB4MjMwYiwgMHgyNTBmLCAw eDI1MGMsIDB4MjUxYiwgMHgyNTEwLCAweDI1MjQsIDB4MjU0YSwgMHgyNTEzLAorICAgIDB4MjU4 NCwgMHgyMzA5LCAweDI1ODIsIDB4MjU2MSwgMHgyNTA0LCAweDI1NTksIDB4MjU3NgorfTsKKwor c3RydWN0IHhfdG9fdW5pY29kZSB1X2hwbWF0aCA9IHsKKyAgICA5NCwgMzMsIFgyVV9TVEQsQUxf Uk9NQU4sIkhQIE1hdGgvVGVjaG5pY2FsIiwiaHAtbWF0aC90ZWNobmljYWwiLDAsTlVMTCwKKyAg ICAgICAgICAgIDB4MjIxYSwgMHgyMjIzLCAweDAwYTcsIDB4MjIwNywgMHgwMGIxLCAweDAzYjEs IDB4MjMyMCwKKyAgICAweDAwZjcsIDB4MjI0MywgMHgwM2EwLCAweDAzOTMsIDB4MDNjOCwgMHgy MjYxLCAweDAzYTYsIDB4MDM5ZSwKKyAgICAweDIwNzAsIDB4MDBiOSwgMHgwMGIyLCAweDAwYjMs IDB4MjA3NCwgMHgyMDc1LCAweDIwNzYsIDB4MjA3NywKKyAgICAweDIwNzgsIDB4MjA3OSwgMHgw M2E5LCAweDAzOWIsIDB4MjIxZSwgMHgyMzIxLCAweDIwMjAsIDB4MDNhMywKKyAgICAweDAwYjYs IDB4MDNiMSwgMHgwM2IyLCAweDAzYzgsIDB4MDNkNSwgMHgwM2I1LCAweDIyMDIsIDB4MDNiYiwK KyAgICAweDAzYjcsIDB4MDNiOSwgMHgwMzk4LCAweDAzYmEsIDB4MDNjOSwgMHgwM2JjLCAweDAz YmQsIDB4MDNjMSwKKyAgICAweDAzYzAsIDB4MDNiMywgMHgwM2I4LCAweDAzYzMsIDB4MDNjNCwg MHgwM2JlLCAweDAzOTQsIDB4MDNiNCwKKyAgICAweDAwZDcsIDB4MDNjNSwgMHgwM2I2LCAweDIx OTEsIDB4MjE5MiwgMHgwM2QyLCAweDIxOTAsIDB4MjE5MywKKyAgICAweDAwYjYsIDB4MDNiMSwg MHgwM2IyLCAweDAzYzgsIDB4MDNkNSwgMHgwM2I1LCAweDIyMDIsIDB4MDNiYiwKKyAgICAweDAz YjcsIDB4MDNiOSwgMHgwMzk4LCAweDAzYmEsIDB4MDNjOSwgMHgwM2JjLCAweDAzYmQsIDB4MDNj MSwKKyAgICAweDAzYzAsIDB4MDNiMywgMHgwM2I4LCAweDAzYzMsIDB4MDNjNCwgMHgwM2JlLCAw eDAzOTQsIDB4MDNiNCwKKyAgICAweDAwZDcsIDB4MDNjNSwgMHgwM2I2LCAweDIxOTEsIDB4MjE5 MiwgMHgwM2QyLCAweDIxOTAKK307CisKK3N0cnVjdCB4X3RvX3VuaWNvZGUgdV90dmlnID0gewor ICAgIDE1LDY1LDAsMCwiVGVsZXZpZGVvIFNwZWNpYWwgR3JhcGhpY3MiLCJ0dmktc3BlY2lhbCIs MCxOVUxMLAorICAgICAgICAgICAgMHgyNTcwLCAweDI1NkQsIDB4MjU2RSwgMHgyNTZGLCAweDI1 MTQsIDB4MjUwQywgMHgyNTEwLAorICAgIDB4MjUxOCwgMHgyNTNDLCAweDI1MDIsIDB4MjUwMCwg MHgyNTI0LCAweDI1MUMsIDB4MjUyQywgMHgyNTM0Cit9OworCitzdHJ1Y3QgeF90b191bmljb2Rl IHVfd3lzZV9nbiA9IHsKKyNpZmRlZiBDT01NRU5UCisgICAgMTYsMTYsMCwwLCJXeXNlIE5vcm1h bC1Nb2RlIEdyYXBoaWNzIiwid3ktZ3JhcGhpY3Mtbm9ybWFsIiwwLE5VTEwsCisgICAgMHgyNTJD LCAweDI1MTQsIDB4MjUwQywgMHgyNTEwLCAweDI1MUMsIDB4MjUxOCwgMHgyNTAyLCAweDI1ODgs CisgICAgMHgyNTNDLCAweDI1MjQsIDB4MjUwMCwgMHgyNTkyLCAweDI1NTAsIDB4MjUzNCwgMHgy NTUxLCAweDI1OTEKKyNlbHNlCisgICAgODAsNDgsMCwwLCJXeXNlIE5vcm1hbC1Nb2RlIEdyYXBo aWNzIiwid3ktZ3JhcGhpY3Mtbm9ybWFsIiwwLE5VTEwsCisgICAgMHgyNTJDLCAweDI1MTQsIDB4 MjUwQywgMHgyNTEwLCAweDI1MUMsIDB4MjUxOCwgMHgyNTAyLCAweDI1ODgsCisgICAgMHgyNTND LCAweDI1MjQsIDB4MjUwMCwgMHgyNTkyLCAweDI1NTAsIDB4MjUzNCwgMHgyNTUxLCAweDI1OTEs CisgICAgMHgyNTJDLCAweDI1MTQsIDB4MjUwQywgMHgyNTEwLCAweDI1MUMsIDB4MjUxOCwgMHgy NTAyLCAweDI1ODgsCisgICAgMHgyNTNDLCAweDI1MjQsIDB4MjUwMCwgMHgyNTkyLCAweDI1NTAs IDB4MjUzNCwgMHgyNTUxLCAweDI1OTEsCisgICAgMHgyNTJDLCAweDI1MTQsIDB4MjUwQywgMHgy NTEwLCAweDI1MUMsIDB4MjUxOCwgMHgyNTAyLCAweDI1ODgsCisgICAgMHgyNTNDLCAweDI1MjQs IDB4MjUwMCwgMHgyNTkyLCAweDI1NTAsIDB4MjUzNCwgMHgyNTUxLCAweDI1OTEsCisgICAgMHgy NTJDLCAweDI1MTQsIDB4MjUwQywgMHgyNTEwLCAweDI1MUMsIDB4MjUxOCwgMHgyNTAyLCAweDI1 ODgsCisgICAgMHgyNTNDLCAweDI1MjQsIDB4MjUwMCwgMHgyNTkyLCAweDI1NTAsIDB4MjUzNCwg MHgyNTUxLCAweDI1OTEsCisgICAgMHgyNTJDLCAweDI1MTQsIDB4MjUwQywgMHgyNTEwLCAweDI1 MUMsIDB4MjUxOCwgMHgyNTAyLCAweDI1ODgsCisgICAgMHgyNTNDLCAweDI1MjQsIDB4MjUwMCwg MHgyNTkyLCAweDI1NTAsIDB4MjUzNCwgMHgyNTUxLCAweDI1OTEKKyNlbmRpZiAvKiBDT01NRU5U ICovCit9OworCitzdHJ1Y3QgeF90b191bmljb2RlIHVfd3lzZV9nMSA9IHsKKyAgICA3OSw0OCww LDAsIld5c2UgR3JhcGhpY3MgMSIsInd5LWdyYXBoaWNzLTEiLDAsTlVMTCwKKyAgICAweDIwNzAs IDB4MDBCOSwgMHgwMEIyLCAweDAwQjMsIDB4MjA3NCwgMHgyMDc1LCAweDIwNzUsIDB4MjA3NywK KyAgICAweDIwNzgsIDB4MjA3OSwgMHhGRkZELCAweEZGRkQsIDB4MjVCQSwgMHgyNUM0LCAweDI1 QjIsIDB4MjVCQywKKyAgICAweEZGRkQsIDB4RkZGRCwgMHhGRkZELCAweEZGRkQsIDB4RkZGRCwg MHhGRkZELCAweEZGRkQsIDB4RkZGRCwKKyAgICAweEZGRkQsIDB4RkZGRCwgMHhGRkZELCAweEZG RkQsIDB4RkZGRCwgMHhGRkZELCAweEZGRkQsIDB4RkZGRCwKKyAgICAweEZGRkQsIDB4RkZGRCwg MHhGRkZELCAweEZGRkQsIDB4RkZGRCwgMHhGRkZELCAweEZGRkQsIDB4RkZGRCwKKyAgICAweEZG RkQsIDB4RkZGRCwgMHhGRkZELCAweEZGRkQsIDB4RkZGRCwgMHhGRkZELCAweEZGRkQsIDB4RkZG RCwKKyAgICAweDIwODAsIDB4MjA4MSwgMHgyMDgyLCAweDIwODMsIDB4MjA4NCwgMHgyMDg1LCAw eDIwODYsIDB4MjA4NywKKyAgICAweDIwODgsIDB4MjA4OSwgMHgyNTE4LCAweDI1MTAsIDB4MjUw QywgMHgyNTE0LCAweDI1M0MsIDB4MjU4QywKKyAgICAweDI1OTAsIDB4MjUwMCwgMHgyNTg0LCAw eDI1ODAsIDB4MjUxQywgMHgyNTI0LCAweDI1MzQsIDB4MjUyQywKKyAgICAweDI1MDIsIDB4RkZG RCwgMHgyNTZFLCAweDI1NkYsIDB4MjU3MCwgMHgyNTZELCAweDI1OEMKK307CisKK3N0cnVjdCB4 X3RvX3VuaWNvZGUgdV93eXNlX2cyID0geworICAgIDQxLDY0LDAsMCwiV3lzZSBHcmFwaGljcyAy Iiwid3ktZ3JhcGhpY3MtMiIsMCxOVUxMLAorICAgIDB4MjUwQywgMHhGRkZELCAweEZGRkQsIDB4 RkZGRCwgMHgyNTEwLCAweEZGRkQsIDB4RkZGRCwgMHhGRkZELAorICAgIDB4MjUxNCwgMHhGRkZE LCAweEZGRkQsIDB4RkZGRCwgMHgyNTE4LCAweEZGRkQsIDB4RkZGRCwgMHhGRkZELAorICAgIDB4 MjUyQywgMHhGRkZELCAweEZGRkQsIDB4RkZGRCwgMHgyNTI0LCAweEZGRkQsIDB4RkZGRCwgMHhG RkZELAorICAgIDB4MjUxQywgMHhGRkZELCAweEZGRkQsIDB4RkZGRCwgMHgyNTM0LCAweEZGRkQs IDB4RkZGRCwgMHhGRkZELAorICAgIDB4MjUwMCwgMHhGRkZELCAweEZGRkQsIDB4RkZGRCwgMHgy NTAyLCAweEZGRkQsIDB4RkZGRCwgMHhGRkZELAorICAgIDB4MjUzQworfTsKKworI2lmZGVmIEtF Uk1JVEZPTlQKK3N0cnVjdCB4X3RvX3VuaWNvZGUgdV93eXNlX2czID0geworICAgIDMxLDY1LDAs MCwiV3lzZSBHcmFwaGljcyAzIiwid3ktZ3JhcGhpY3MtMyIsMCxOVUxMLAorICAgICAgICAgICAg MHgyNTcwLCAweDI1NkQsIDB4MjU2RSwgMHgyNTZGLCAweDI1MTQsIDB4MjUwQywgMHgyNTEwLAor ICAgIDB4MjUxOCwgMHgyNTNDLCAweDI1MDIsIDB4MjUwMCwgMHgyNTI0LCAweDI1MUMsIDB4MjUy QywgMHgyNTM0LAorICAgIDB4MjNCQSwgMHgyM0JELCAweDI2NjYsIDB4RTMyOCwgMHhFMzIxLCAw eEUzMjAsIDB4RTMyMiwgMHgyNTkwLAorICAgIDB4MjU4NCwgMHgyNThDLCAweDI1ODAsIDB4RTMy MywgMHhFMzI2LCAweEUzMjcsIDB4RTMyOSwgMHgyNThDCit9OworI2Vsc2UKK3N0cnVjdCB4X3Rv X3VuaWNvZGUgdV93eXNlX2czID0geworICAgIDMxLDY1LDAsMCwiV3lzZSBHcmFwaGljcyAzIiwi d3ktZ3JhcGhpY3MtMyIsMCxOVUxMLAorICAgICAgICAgICAgMHgyNTcwLCAweDI1NkQsIDB4MjU2 RSwgMHgyNTZGLCAweDI1MTQsIDB4MjUwQywgMHgyNTEwLAorICAgIDB4MjUxOCwgMHgyNTNDLCAw eDI1MDIsIDB4MjUwMCwgMHgyNTI0LCAweDI1MUMsIDB4MjUyQywgMHgyNTM0LAorICAgIDB4MjUw MCwgMHgyNTAwLCAweDI2NjYsIDB4MjU5MCwgMHgyNTkwLCAweDI1OGMsIDB4MjU4YywgMHgyNTkw LAorICAgIDB4MjU4NCwgMHgyNThDLCAweDI1ODAsIDB4MjU4OCwgMHgyNTg4LCAweDI1ODgsIDB4 MjU4OCwgMHgyNThDCit9OworI2VuZGlmIC8qIEtFUk1JVEZPTlQgKi8KKy8qCisgIFFOWCBDb25z b2xlICAtLSAgVGhpcyBpcyBleGFjdGx5IHRoZSBzYW1lIGFzIENQNDM3IGV4Y2VwdCBmb3IgdGhl IGNvZGUKKyAgcG9pbnQgYXQgMHhFRSAoZXBzaWxvbiB2cyBlbGVtZW50LW9mKSwgd2hpY2ggSSB0 aGluayB3YXMganVzdCBhIG1pc3Rha2UKKyAgaW4gcmVhZGluZyBnbHlwaHMgYnkgdGhlIFFOWCBw ZW9wbGUsIGJ1dCB3aG8ga25vd3MuICBBbHNvIHRoZSBnbHlwaCBhdAorICAweEVEIG1pZ2h0IGJl IGEgZmkgKGFzIGl0IGlzIGluIENQNDM3LCBhbmQgYXMgSSBoYXZlIGl0IGhlcmUpIG9yIGl0IG1p Z2h0CisgIGJlIGEgbnVsbC1zZXQgc3ltYm9sLgorKi8KK3N0cnVjdCB4X3RvX3VuaWNvZGUgdV9x bnhncnBoID0geworICAgIDEyOCwwLDAsMCwiUU5YIENvbnNvbGUiLCJxbngtY29uc29sZSIsMCxO VUxMLAorICAgIDB4MDBjNywgMHgwMGZjLCAweDAwZTksIDB4MDBlMiwgMHgwMGU0LCAweDAwZTAs IDB4MDBlNSwgMHgwMGU3LCAvKiAxMjggKi8KKyAgICAweDAwZWEsIDB4MDBlYiwgMHgwMGU4LCAw eDAwZWYsIDB4MDBlZSwgMHgwMGVjLCAweDAwYzQsIDB4MDBjNSwgLyogMTM2ICovCisgICAgMHgw MGM5LCAweDAwZTYsIDB4MDBjNiwgMHgwMGY0LCAweDAwZjYsIDB4MDBmMiwgMHgwMGZiLCAweDAw ZjksIC8qIDE0NCAqLworICAgIDB4MDBmZiwgMHgwMGQ2LCAweDAwZGMsIDB4MDBhMiwgMHgwMGEz LCAweDAwYTUsIDB4MjBhNywgMHgwMTkyLCAvKiAxNTIgKi8KKyAgICAweDAwZTEsIDB4MDBlZCwg MHgwMGYzLCAweDAwZmEsIDB4MDBmMSwgMHgwMGQxLCAweDAwYWEsIDB4MDBiYSwgLyogMTYwICov CisgICAgMHgwMGJmLCAweDIzMTAsIDB4MDBhYywgMHgwMGJkLCAweDAwYmMsIDB4MDBhMSwgMHgw MGFiLCAweDAwYmIsIC8qIDE2OCAqLworICAgIDB4MjU5MSwgMHgyNTkyLCAweDI1OTMsIDB4MjUw MiwgMHgyNTI0LCAweDI1NjEsIDB4MjU2MiwgMHgyNTU2LCAvKiAxNzYgKi8KKyAgICAweDI1NTUs IDB4MjU2MywgMHgyNTUxLCAweDI1NTcsIDB4MjU1ZCwgMHgyNTVjLCAweDI1NWIsIDB4MjUxMCwg LyogMTg0ICovCisgICAgMHgyNTE0LCAweDI1MzQsIDB4MjUyYywgMHgyNTFjLCAweDI1MDAsIDB4 MjUzYywgMHgyNTVlLCAweDI1NWYsIC8qIDE5MiAqLworICAgIDB4MjU1YSwgMHgyNTU0LCAweDI1 NjksIDB4MjU2NiwgMHgyNTYwLCAweDI1NTAsIDB4MjU2YywgMHgyNTY3LCAvKiAyMDAgKi8KKyAg ICAweDI1NjgsIDB4MjU2NCwgMHgyNTY1LCAweDI1NTksIDB4MjU1OCwgMHgyNTUyLCAweDI1NTMs IDB4MjU2YiwgLyogMjA4ICovCisgICAgMHgyNTZhLCAweDI1MTgsIDB4MjUwYywgMHgyNTg4LCAw eDI1ODQsIDB4MjU4YywgMHgyNTkwLCAweDI1ODAsIC8qIDIxNiAqLworICAgIDB4MjIxZCwgMHgw MGRmLCAweDAzOTMsIDB4MDNjMCwgMHgwM2EzLCAweDAzYzMsIDB4MDBiNSwgMHgwM2M0LCAvKiAy MjQgKi8KKyAgICAweDAzYTYsIDB4MDM5OCwgMHgwM2E5LCAweDAzYjQsIDB4MjIxZSwgMHgwM2M2 LCAweDIyMDgsIDB4MjIyOSwgLyogMjMyICovCisgICAgMHgyMjYxLCAweDAwYjEsIDB4MjI2NSwg MHgyMjY0LCAweDIzMjAsIDB4MjMyMSwgMHgwMGY3LCAweDIyNDgsIC8qIDI0MCAqLworICAgIDB4 MDBiMCwgMHgyMjE5LCAweDAwYjcsIDB4MjIxYSwgMHgyMDdmLCAweDAwYjIsIDB4MjVhZSwgMHgw MGEwICAvKiAyNDggKi8KK307CisKK3N0cnVjdCB4X3RvX3VuaWNvZGUgdV9zbmlicmFjayA9IHsK KyAgICA5NCwgMzMsIDAsIDAsIlNpZW1lbnMgTml4ZG9yZiA5NzgwMSBCcmFja2V0cyIsInNuaS1i cmFja2V0cyIsMCwidyIsCisgICAgICAgICAgICAweDI1OTAsIDB4MjU4YywgMHgyNTg0LCAweDI1 ODAsIDB4MjU5MCwgMHgyNThjLCAweDI1ODQsIC8qIGEwLTcgKi8KKyAgICAweDI1ODAsIDB4MjMy OSwgMHgyMzI3LCAweDI1YWYsIDB4MDBiNywgMHgyNWI5LCAweDI1YzEsIDB4MDAzYywgLyogYTgt ZiAqLworICAgIDB4MjUzYiwgMHgyNTMzLCAweDI1MjMsIDB4MjUyYiwgMHgyMzI5LCAweDIzMmEs IDB4MjMwNCwgMHgyMzAzLCAvKiBiMC03ICovCisgICAgMHgyNWU0LCAweDI1ZTUsIDB4MjVlMywg MHgyNWUyLCAweDI1M2YsIDB4MjMxYiwgMHgyNWNmLCAweDI1Y2IsIC8qIGI4LWYgKi8KKyAgICAw eDI1MDIsIDB4MjUwMCwgMHgyNTBjLCAweDI1MTAsIDB4MjUxNCwgMHgyNTE4LCAweDI1MWMsIDB4 MjUyNCwgLyogYzAtNyAqLworICAgIDB4MjUyYywgMHgyNTM0LCAweDI1M2MsIDB4MjE5MiwgMHgy MTkwLCAweDIxOTEsIDB4MjE5MywgMHgyNTc1LCAvKiBjOC1mICovCisgICAgMHgyNTc3LCAweDI1 ZDQsIDB4MjU2ZCwgMHgyNTZlLCAweDI1NzAsIDB4MjU2ZiwgMHgyNTFjLCAweDI1MjQsIC8qIGQw LTcgKi8KKyAgICAweDI1MmMsIDB4MjUzNCwgMHgyNTNjLCAweDI1M2MsIDB4MjU5MiwgMHgyNTkx LCAweDI1OTIsIDB4MjU5MywgLyogZDgtZiAqLworICAgIDB4MjUwMywgMHgyNTAxLCAweDI1MGYs IDB4MjUxMywgMHgyNTE3LCAweDI1MWIsIDB4MjUyMywgMHgyNTJiLCAvKiBlMC03ICovCisgICAg MHgyNTMzLCAweDI1M2IsIDB4MjU0YiwgMHgyNzllLCAweDIxOTAsIDB4MjE5MSwgMHgyMTkzLCAw eDI1NzksIC8qIGU4LWYgKi8KKyAgICAweDI1N2IsIDB4MjI2MSwgMHgyNTU0LCAweDI1NTcsIDB4 MjU1YSwgMHgyNTVkLCAweDI1MjMsIDB4MjUyYiwgLyogZjAtNyAqLworICAgIDB4MjUzMywgMHgy NTNiLCAweDI1NGIsIDB4MjU0YiwgMHgwMzkzLCAweDAzYzMsIDB4MDNjNCAgICAgICAgICAvKiBm OC1mICovCit9OworCitzdHJ1Y3QgeF90b191bmljb2RlIHVfc25pYmxhbmtzID0geworICAgIDk0 LCAzMywgMCwgMCwiU2llbWVucyBOaXhkb3JmIDk3ODAxIEJsYW5rcyIsInNuaS1ibGFua3MiLDAs InkiLAorICAgICAgICAgICAgMHgwMDIwLCAweDAwMjAsIDB4MDAyMCwgMHgwMDIwLCAweDAwMjAs IDB4MDAyMCwgMHgwMDIwLCAvKiBhMC03ICovCisgICAgMHgwMDIwLCAweDAwMjAsIDB4MDAyMCwg MHgwMDIwLCAweDAwMjAsIDB4MDAyMCwgMHgwMDIwLCAweDAwMjAsIC8qIGE4LWYgKi8KKyAgICAw eDAwMjAsIDB4MDAyMCwgMHgwMDIwLCAweDAwMjAsIDB4MDAyMCwgMHgwMDIwLCAweDAwMjAsIDB4 MDAyMCwgLyogYjAtNyAqLworICAgIDB4MDAyMCwgMHgwMDIwLCAweDAwMjAsIDB4MDAyMCwgMHgw MDIwLCAweDAwMjAsIDB4MDAyMCwgMHgwMDIwLCAvKiBiOC1mICovCisgICAgMHgwMDIwLCAweDAw MjAsIDB4MDAyMCwgMHgwMDIwLCAweDAwMjAsIDB4MDAyMCwgMHgwMDIwLCAweDAwMjAsIC8qIGMw LTcgKi8KKyAgICAweDAwMjAsIDB4MDAyMCwgMHgwMDIwLCAweDAwMjAsIDB4MDAyMCwgMHgwMDIw LCAweDAwMjAsIDB4MDAyMCwgLyogYzgtZiAqLworICAgIDB4MDAyMCwgMHgwMDIwLCAweDAwMjAs IDB4MDAyMCwgMHgwMDIwLCAweDAwMjAsIDB4MDAyMCwgMHgwMDIwLCAvKiBkMC03ICovCisgICAg MHgwMDIwLCAweDAwMjAsIDB4MDAyMCwgMHgwMDIwLCAweDAwMjAsIDB4MDAyMCwgMHgwMDIwLCAw eDAwMjAsIC8qIGQ4LWYgKi8KKyAgICAweDAwMjAsIDB4MDAyMCwgMHgwMDIwLCAweDAwMjAsIDB4 MDAyMCwgMHgwMDIwLCAweDAwMjAsIDB4MDAyMCwgLyogZTAtNyAqLworICAgIDB4MDAyMCwgMHgw MDIwLCAweDAwMjAsIDB4MDAyMCwgMHgwMDIwLCAweDAwMjAsIDB4MDAyMCwgMHgwMDIwLCAvKiBl OC1mICovCisgICAgMHgwMDIwLCAweDAwMjAsIDB4MDAyMCwgMHgwMDIwLCAweDAwMjAsIDB4MDAy MCwgMHgwMDIwLCAweDAwMjAsIC8qIGYwLTcgKi8KKyAgICAweDAwMjAsIDB4MDAyMCwgMHgwMDIw LCAweDAwMjAsIDB4MDAyMCwgMHgwMDIwLCAweDAwMjAgICAgICAgICAgLyogZjgtZiAqLworfTsK Kworc3RydWN0IHhfdG9fdW5pY29kZSB1X3NuaWZhY2V0ID0geworICAgIDk0LCAzMywgMCwgMCwi U2llbWVucyBOaXhkb3JmIDk3ODAxIEZhY2V0Iiwic25pLWZhY2V0IiwwLCJjIiwKKyAgICAgICAg ICAgIDB4MDAyMCwgMHgyNTgxLCAweDI1ODIsIDB4MjU4MywgMHgyNTg0LCAweDI1ODUsIDB4MjU4 NywgLyogYTEtYTcgKi8KKyAgICAweDAwNWYsIDB4MjU4MSwgMHgyNTgyLCAweDI1ODMsIDB4MjU4 NCwgMHgyNTg1LCAweDI1ODYsIDB4MjU4NywgLyogYTgtYWYgKi8KKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgLyogYjAt YjcgKi8KKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgLyogYjgtYmYgKi8KKyAgICAweDI1MDMsIDB4MjUwMSwgMHgyNTBm LCAweDI1MTMsIDB4MjUxNywgMHgyNTFiLCAweDI1MjMsIDB4MjUyYiwgLyogYzAtYzcgKi8KKyAg ICAweDI1MzMsIDB4MjUzYiwgMHgyNTRiLCAweDI1OGYsIDB4MjU5NSwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgLyogYzgtY2YgKi8KKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgLyogZDAtZDcgKi8KKyAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHgyNTkxLCAweDI1OTEsIDB4MjU4OCwg LyogZDgtZGYgKi8KKyAgICAweDI1MDMsIDB4MjUwMSwgMHgyNTBmLCAweDI1MTMsIDB4MjUxNywg MHgyNTFiLCAweDI1MjMsIDB4MjUyYiwgLyogZTAtZTcgKi8KKyAgICAweDI1MzMsIDB4MjUzYiwg MHgyNTRiLCAweGZmZmQsIDB4ZmZmZCwgMHgyNTkzLCAweDI1OTMsIDB4MDAyMCwgLyogZTgtZWYg Ki8KKyAgICAweDI1ODUsIDB4MjU4NiwgMHgyNTg3LCAweDI1ODgsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgLyogZjAtZjcgKi8KKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4MjU5NCwgMHgyNTk0LCAweGZmZmQgICAgICAgICAgLyogZjgtZmUgKi8KK307CisK K3N0cnVjdCB4X3RvX3VuaWNvZGUgdV9zbmlpYm0gPSB7CisgICAgOTQsIDMzLCAwLCAwLCJTaWVt ZW5zIE5peGRvcmYgOTc4MDEgSUJNIiwic25pLWlibSIsMCwidiIsCisgICAgICAgICAgICAweDI2 M2EsIDB4MjYzYiwgMHgyNjY1LCAweDI2NjYsIDB4MjY2MywgMHgyNjYwLCAweDI1Y2YsCisgICAg MHgyNWQ4LCAweDI1Y2IsIDB4MjVkOSwgMHgyNjQyLCAweDI2NDAsIDB4MjY2YSwgMHgyNjZiLCAw eDI2M2MsCisgICAgMHgyNWJhLCAweDI1YzQsIDB4MjE5NSwgMHgyMDNjLCAweDAwYjYsIDB4MjVj MSwgMHgyNTgyLCAweDIxYTgsCisgICAgMHgyMTkxLCAweDIxOTMsIDB4MjE5MiwgMHgyMTkwLCAw eDIzMTksIDB4MjE5NCwgMHgyNWI0LCAweDI1YmUsCisgICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIC8qIEhleCAqLworICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAvKiBieXRlcyAqLworICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4MjA3MCwg MHgwMGI5LCAweDAwYjIsIDB4MDBiMywgMHgyMDc0LCAweDIwNzUsIDB4MjA3NiwgMHgyMDc3LAor ICAgIDB4MjA3OCwgMHgyMDc5LCAweDIwN2IsIDB4MjA3YSwgMHhmZmZkLCAweGZmZmQsIDB4MjMy MCwgMHgyMzIxLAorICAgIDB4MjA4MCwgMHgyMDgxLCAweDIwODIsIDB4MjA4MywgMHgyMDg0LCAw eDIwODUsIDB4MjA4NiwgMHgyMDg3LAorICAgIDB4MjA4OCwgMHgyMDg5LCAweDIwOGIsIDB4MjA4 YSwgMHgyMjFlLCAweDAzYjEsIDB4MDNhNgorfTsKKworc3RydWN0IHhfdG9fdW5pY29kZSB1X3Nu aWV1cm8gPSB7CisgICAgOTQsIDMzLCAwLCAwLCJTaWVtZW5zIE5peGRvcmYgOTc4MDEgRXVybyIs InNuaS1ldXJvIiwwLCJ1IiwKKyAgICAgICAgICAgIDB4MDBlMCwgMHgwMGUxLCAweDAwZTIsIDB4 MDBlNCwgMHgwMGU1LCAweDAxMDUsIDB4MDBlMywKKyAgICAweDAxMDMsIDB4MDBlNiwgMHgwMGU3 LCAweDAxMGQsIDB4MDEwNywgMHgwMGYwLCAweDAxMTEsIDB4MDEwZiwKKyAgICAweDAwZTgsIDB4 MDBlOSwgMHgwMGVhLCAweDAwZWIsIDB4MDExYiwgMHgwMTE5LCAweDAxMWYsIDB4MDEzMSwKKyAg ICAweDAwZWUsIDB4MDBlYywgMHgwMWQwLCAweDAwZWYsIDB4MDEzMywgMHgwMTNhLCAweDAxNDIs IDB4MDEzZSwKKyAgICAweDAxNDgsIDB4MDE0NCwgMHgwMGYxLCAweDAwZjIsIDB4MDBmMywgMHgw MGY0LCAweDAwZjYsIDB4MDBmNSwKKyAgICAweDAwZjgsIDB4MDE1MSwgMHgwMTUzLCAweDAwZmUs IDB4MDE1OSwgMHgwMTU1LCAweDAxNjEsIDB4MDE1YiwKKyAgICAweDAxNWYsIDB4MDBkZiwgMHgw MTYzLCAweDAxNjUsIDB4MDBmOSwgMHgwMGZhLCAweDAwZmIsIDB4MDBmYywKKyAgICAweDAxNmYs IDB4MDE3MSwgMHgwMGZkLCAweDAwZmYsIDB4MDE3ZSwgMHgwMTdhLCAweDAxN2MsIDB4MDBjOSwK KyAgICAweDAwYzUsIDB4MDBjNiwgMHgwMGQwLCAweDAxMzAsIDB4MDEzMiwgMHgwMTY3LCAweDAw ZDgsIDB4MDE1MiwKKyAgICAweDAwZGUsIDB4MDBjNCwgMHgwMGQ2LCAweDAwZGMsIDB4MDBhNywg MHgwMDI0LCAweDAwYTMsIDB4MDBhZSwKKyAgICAweDAwYTksIDB4MDNhOSwgMHgwMGI1LCAweDAw YjAsIDB4MDBjNywgMHgyMGE3LCAweDAzYzAsIDB4MDJkOCwKKyAgICAweDAwYjQsIDB4MDJkZCwg MHgwMGQxLCAweDI1MTQsIDB4MjUxOCwgMHgwMDdlLCAweDAyYzcKK307CisKK3N0cnVjdCB4X3Rv X3VuaWNvZGUgdV9zbWlsZXkgPSB7CisgICAgMzIsMCxYMlVfQ1hHLDAsIlBDIEMwIEdyYXBoaWNz Iiwic21pbGV5LWZhY2VzIiwwLE5VTEwsCisgICAgMHgwMGEwLCAweDI2M2EsIDB4MjYzYiwgMHgy NjY1LCAweDI2NjYsIDB4MjY2MywgMHgyNjYwLCAweDIwMjIsCisgICAgMHgyNWQ4LCAweDI1ZWYs IDB4MjVkOSwgMHgyNjQyLCAweDI2NDAsIDB4MjY2YSwgMHgyNjZjLCAweDI2M2MsCisgICAgMHgy NWJhLCAweDI1YzQsIDB4MjE5NSwgMHgyMDNjLCAweDAwYjYsIDB4MDBhNywgMHgyNWFjLCAweDIx YTgsCisgICAgMHgyMTkxLCAweDIxOTMsIDB4MjE5MiwgMHgyMTkwLCAweDIzMTksIDB4MjE5NCwg MHgyNWIyLCAweDI1YmMKK307CisKK3N0cnVjdCB4X3RvX3VuaWNvZGUgdV9jMHBpY3MgPSB7Cisg ICAgMTI4LDAsWDJVX0NYRywwLCJDMC9DMSBEaXNwbGF5IENvbnRyb2xzIiwiZGlzcGxheS1jb250 cm9scyIsMCxOVUxMLAorICAgIDB4MjQwMCwgMHgyNDAxLCAweDI0MDIsIDB4MjQwMywgMHgyNDA0 LCAweDI0MDUsIDB4MjQwNiwgMHgyNDA3LAorICAgIDB4MjQwOCwgMHgyNDA5LCAweDI0MGEsIDB4 MjQwYiwgMHgyNDBjLCAweDI0MGQsIDB4MjQwZSwgMHgyNDBmLAorICAgIDB4MjQxMCwgMHgyNDEx LCAweDI0MTIsIDB4MjQxMywgMHgyNDE0LCAweDI0MTUsIDB4MjQxNiwgMHgyNDE3LAorICAgIDB4 MjQxOCwgMHgyNDE5LCAweDI0MWEsIDB4MjQxYiwgMHgyNDFjLCAweDI0MWQsIDB4MjQxZSwgMHgy NDFmLAorICAgIDB4MjQyMCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHgyNDIxCit9OworCisjaWZkZWYgS0VSTUlURk9O VAorc3RydWN0IHhfdG9fdW5pY29kZSB1X2MxcGljcyA9IHsKKyAgICAzMiwwLFgyVV9DWEcsMCwi QzEgRGlzcGxheSBDb250cm9scyIsImMxLWRpc3BsYXktY29udHJvbHMiLDAsTlVMTCwKKyAgICAw eGUwODAsIDB4ZTA4MSwgMHhlMDgyLCAweGUwODMsIDB4ZTA4NCwgMHhlMDg1LCAweGUwODYsIDB4 ZTA4NywKKyAgICAweGUwODgsIDB4ZTA4OSwgMHhlMDhhLCAweGUwOGIsIDB4ZTA4YywgMHhlMDhk LCAweGUwOGUsIDB4ZTA4ZiwKKyAgICAweGUwOTAsIDB4ZTA5MSwgMHhlMDkyLCAweGUwOTMsIDB4 ZTA5NCwgMHhlMDk1LCAweGUwOTYsIDB4ZTA5NywKKyAgICAweGUwOTgsIDB4ZTA5OSwgMHhlMDlh LCAweGUwOWIsIDB4ZTA5YywgMHhlMDlkLCAweGUwOWUsIDB4ZTA5ZgorfTsKKyNlbHNlCitzdHJ1 Y3QgeF90b191bmljb2RlIHVfYzFwaWNzID0geworICAgIDMyLDAsWDJVX0NYRywwLCJDMSBEaXNw bGF5IENvbnRyb2xzIiwiYzEtZGlzcGxheS1jb250cm9scyIsMCxOVUxMLAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkCit9OworI2VuZGlmIC8qIEtFUk1JVEZP TlQgKi8KKworCisvKiBCbGFoLXRvLVVuaWNvZGUgZnVuY3Rpb25zICovCisKK1VTSE9SVAorI2lm ZGVmIENLX0FOU0lDCithc2NpaV91KENIQVIgYykKKyNlbHNlCithc2NpaV91KGMpIENIQVIgYzsK KyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworICAgIGlmIChjICYgMHg4MCkKKyAgICAgIHJldHVy bihVTkspOworLyoKKyAgTk9URTogU3RyaWN0IEFOU0kgY29tcGlsZXJzIGNvbXBsYWluIGFib3V0 ICI8IiBhbmQgc2ltaWxhciBjb21wYXJpc29ucworICBiZXR3ZWVuIHVuc2lnbmVkIGFuZCBzaWdu ZWQgcXVhbnRpdGllcywgYXMgZm91bmQgaW4gYWxsIHRoZSByb3V0aW5lcyBvZgorICB0aGUgImJs YWhfdSgpIiBjbGFzcyAtLSBjYXN0cyBtdXN0IGJlIGFkZGVkIHRvIHNxdWVsY2ggdGhlIHdhcm5p bmdzLgorKi8KKyAgICBpZiAoYyA8IHVfYXNjaWkub2Zmc2V0KQorICAgICAgcmV0dXJuKGMpOwor ICAgIGVsc2UgaWYgKGMgPj0gdV9hc2NpaS5vZmZzZXQgKyB1X2FzY2lpLnNpemUpCisgICAgICBy ZXR1cm4oYyk7CisgICAgZWxzZQorICAgICAgcmV0dXJuKHVfYXNjaWkubWFwW2MgLSB1X2FzY2lp Lm9mZnNldF0pOworfQorCitVU0hPUlQKKyNpZmRlZiBDS19BTlNJQworYnJpdGlzaF91KENIQVIg YykKKyNlbHNlCiticml0aXNoX3UoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7 CisgICAgaWYgKGMgJiAweDgwKQorICAgICAgcmV0dXJuKFVOSyk7CisgICAgaWYgKGMgPCB1X2Jy aXRpc2gub2Zmc2V0KQorICAgICAgcmV0dXJuKGMpOworICAgIGVsc2UgaWYgKGMgPj0gdV9icml0 aXNoLm9mZnNldCArIHVfYnJpdGlzaC5zaXplKQorICAgICAgcmV0dXJuKGMpOworICAgIGVsc2UK KyAgICAgIHJldHVybih1X2JyaXRpc2gubWFwW2MgLSB1X2JyaXRpc2gub2Zmc2V0XSk7Cit9CisK K1VTSE9SVAorI2lmZGVmIENLX0FOU0lDCitkdXRjaF91KENIQVIgYykKKyNlbHNlCitkdXRjaF91 KGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworICAgIGlmIChjICYgMHg4MCkK KyAgICAgIHJldHVybihVTkspOworICAgIGlmIChjIDwgdV9kdXRjaC5vZmZzZXQpCisgICAgICBy ZXR1cm4oYyk7CisgICAgZWxzZSBpZiAoYyA+PSB1X2R1dGNoLm9mZnNldCArIHVfZHV0Y2guc2l6 ZSkKKyAgICAgIHJldHVybihjKTsKKyAgICBlbHNlCisgICAgICByZXR1cm4odV9kdXRjaC5tYXBb YyAtIHVfZHV0Y2gub2Zmc2V0XSk7Cit9CisKK1VTSE9SVAorI2lmZGVmIENLX0FOU0lDCitmaW5u aXNoX3UoQ0hBUiBjKQorI2Vsc2UKK2Zpbm5pc2hfdShjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tf QU5TSUMgKi8KK3sKKyAgICBpZiAoYyAmIDB4ODApCisgICAgICByZXR1cm4oVU5LKTsKKyAgICBp ZiAoYyA8IHVfZmlubmlzaC5vZmZzZXQpCisgICAgICByZXR1cm4oYyk7CisgICAgZWxzZSBpZiAo YyA+PSB1X2Zpbm5pc2gub2Zmc2V0ICsgdV9maW5uaXNoLnNpemUpCisgICAgICByZXR1cm4oYyk7 CisgICAgZWxzZQorICAgICAgcmV0dXJuKHVfZmlubmlzaC5tYXBbYyAtIHVfZmlubmlzaC5vZmZz ZXRdKTsKK30KKworVVNIT1JUCisjaWZkZWYgQ0tfQU5TSUMKK2ZyZW5jaF91KENIQVIgYykKKyNl bHNlCitmcmVuY2hfdShjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAgICBp ZiAoYyAmIDB4ODApCisgICAgICByZXR1cm4oVU5LKTsKKyAgICBpZiAoYyA8IHVfZnJlbmNoLm9m ZnNldCkKKyAgICAgIHJldHVybihjKTsKKyAgICBlbHNlIGlmIChjID49IHVfZnJlbmNoLm9mZnNl dCArIHVfZnJlbmNoLnNpemUpCisgICAgICByZXR1cm4oYyk7CisgICAgZWxzZQorICAgICAgcmV0 dXJuKHVfZnJlbmNoLm1hcFtjIC0gdV9mcmVuY2gub2Zmc2V0XSk7Cit9CisKK1VTSE9SVAorI2lm ZGVmIENLX0FOU0lDCitmcl9jYW5hZGlhbl91KENIQVIgYykKKyNlbHNlCitmcl9jYW5hZGlhbl91 KGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworICAgIGlmIChjICYgMHg4MCkK KyAgICAgIHJldHVybihVTkspOworICAgIGlmIChjIDwgdV9mcl9jYW5hZGlhbi5vZmZzZXQpCisg ICAgICByZXR1cm4oYyk7CisgICAgZWxzZSBpZiAoYyA+PSB1X2ZyX2NhbmFkaWFuLm9mZnNldCAr IHVfZnJfY2FuYWRpYW4uc2l6ZSkKKyAgICAgIHJldHVybihjKTsKKyAgICBlbHNlCisgICAgICBy ZXR1cm4odV9mcl9jYW5hZGlhbi5tYXBbYyAtIHVfZnJfY2FuYWRpYW4ub2Zmc2V0XSk7Cit9CisK K1VTSE9SVAorI2lmZGVmIENLX0FOU0lDCitnZXJtYW5fdShDSEFSIGMpCisjZWxzZQorZ2VybWFu X3UoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgaWYgKGMgJiAweDgw KQorICAgICAgcmV0dXJuKFVOSyk7CisgICAgaWYgKGMgPCB1X2dlcm1hbi5vZmZzZXQpCisgICAg ICByZXR1cm4oYyk7CisgICAgZWxzZSBpZiAoYyA+PSB1X2dlcm1hbi5vZmZzZXQgKyB1X2dlcm1h bi5zaXplKQorICAgICAgcmV0dXJuKGMpOworICAgIGVsc2UKKyAgICAgIHJldHVybih1X2dlcm1h bi5tYXBbYyAtIHVfZ2VybWFuLm9mZnNldF0pOworfQorCitVU0hPUlQKKyNpZmRlZiBDS19BTlNJ QworaHVuZ2FyaWFuX3UoQ0hBUiBjKQorI2Vsc2UKK2h1bmdhcmlhbl91KGMpIENIQVIgYzsKKyNl bmRpZiAvKiBDS19BTlNJQyAqLworeworICAgIGlmIChjICYgMHg4MCkKKyAgICAgIHJldHVybihV TkspOworICAgIGlmIChjIDwgdV9odW5nYXJpYW4ub2Zmc2V0KQorICAgICAgcmV0dXJuKGMpOwor ICAgIGVsc2UgaWYgKGMgPj0gdV9odW5nYXJpYW4ub2Zmc2V0ICsgdV9odW5nYXJpYW4uc2l6ZSkK KyAgICAgIHJldHVybihjKTsKKyAgICBlbHNlCisgICAgICByZXR1cm4odV9odW5nYXJpYW4ubWFw W2MgLSB1X2h1bmdhcmlhbi5vZmZzZXRdKTsKK30KKworVVNIT1JUCisjaWZkZWYgQ0tfQU5TSUMK K2l0YWxpYW5fdShDSEFSIGMpCisjZWxzZQoraXRhbGlhbl91KGMpIENIQVIgYzsKKyNlbmRpZiAv KiBDS19BTlNJQyAqLworeworICAgIGlmIChjICYgMHg4MCkKKyAgICAgIHJldHVybihVTkspOwor ICAgIGlmIChjIDwgdV9pdGFsaWFuLm9mZnNldCkKKyAgICAgIHJldHVybihjKTsKKyAgICBlbHNl IGlmIChjID49IHVfaXRhbGlhbi5vZmZzZXQgKyB1X2l0YWxpYW4uc2l6ZSkKKyAgICAgIHJldHVy bihjKTsKKyAgICBlbHNlCisgICAgICByZXR1cm4odV9pdGFsaWFuLm1hcFtjIC0gdV9pdGFsaWFu Lm9mZnNldF0pOworfQorCitVU0hPUlQKKyNpZmRlZiBDS19BTlNJQworaWNlbGFuZGljX3UoQ0hB UiBjKQorI2Vsc2UKK2ljZWxhbmRpY191KGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAq LworeworICAgIGlmIChjICYgMHg4MCkKKyAgICAgIHJldHVybihVTkspOworICAgIGlmIChjIDwg dV9pY2VsYW5kaWMub2Zmc2V0KQorICAgICAgcmV0dXJuKGMpOworICAgIGVsc2UgaWYgKGMgPj0g dV9pY2VsYW5kaWMub2Zmc2V0ICsgdV9pY2VsYW5kaWMuc2l6ZSkKKyAgICAgIHJldHVybihjKTsK KyAgICBlbHNlCisgICAgICByZXR1cm4odV9pY2VsYW5kaWMubWFwW2MgLSB1X2ljZWxhbmRpYy5v ZmZzZXRdKTsKK30KKworVVNIT1JUCisjaWZkZWYgQ0tfQU5TSUMKK2ppczAyMDFyX3UoQ0hBUiBj KQorI2Vsc2UKK2ppczAyMDFyX3UoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7 CisgICAgaWYgKGMgJiAweDgwKQorICAgICAgcmV0dXJuKFVOSyk7CisgICAgaWYgKGMgPCB1X2pp czAyMDFyLm9mZnNldCkKKyAgICAgIHJldHVybihjKTsKKyAgICBlbHNlIGlmIChjID49IHVfamlz MDIwMXIub2Zmc2V0ICsgdV9qaXMwMjAxci5zaXplKQorICAgICAgcmV0dXJuKGMpOworICAgIGVs c2UKKyAgICAgIHJldHVybih1X2ppczAyMDFyLm1hcFtjIC0gdV9qaXMwMjAxci5vZmZzZXRdKTsK K30KKworVVNIT1JUCisjaWZkZWYgQ0tfQU5TSUMKK2ppczAyMDFrX3UoQ0hBUiBjKQorI2Vsc2UK K2ppczAyMDFrX3UoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgaWYg KGMgJiAweDgwKQorICAgICAgcmV0dXJuKFVOSyk7CisgICAgaWYgKGMgPCB1X2ppczAyMDFrLm9m ZnNldCkKKyAgICAgIHJldHVybihjKTsKKyAgICBlbHNlIGlmIChjID49IHVfamlzMDIwMWsub2Zm c2V0ICsgdV9qaXMwMjAxay5zaXplKQorICAgICAgcmV0dXJuKGMpOworICAgIGVsc2UKKyAgICAg IHJldHVybih1X2ppczAyMDFrLm1hcFtjIC0gdV9qaXMwMjAxay5vZmZzZXRdKTsKK30KKworVVNI T1JUCisjaWZkZWYgQ0tfQU5TSUMKK25vcndlZ2lhbl91KENIQVIgYykKKyNlbHNlCitub3J3ZWdp YW5fdShjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAgICBpZiAoYyAmIDB4 ODApCisgICAgICByZXR1cm4oVU5LKTsKKyAgICBpZiAoYyA8IHVfbm9yd2VnaWFuLm9mZnNldCkK KyAgICAgIHJldHVybihjKTsKKyAgICBlbHNlIGlmIChjID49IHVfbm9yd2VnaWFuLm9mZnNldCAr IHVfbm9yd2VnaWFuLnNpemUpCisgICAgICByZXR1cm4oYyk7CisgICAgZWxzZQorICAgICAgcmV0 dXJuKHVfbm9yd2VnaWFuLm1hcFtjIC0gdV9ub3J3ZWdpYW4ub2Zmc2V0XSk7Cit9CisKK1VTSE9S VAorI2lmZGVmIENLX0FOU0lDCitkYW5pc2hfdShDSEFSIGMpCisjZWxzZQorZGFuaXNoX3UoYykg Q0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgaWYgKGMgJiAweDgwKQorICAg ICAgcmV0dXJuKFVOSyk7CisgICAgaWYgKGMgPCB1X2RhbmlzaC5vZmZzZXQpCisgICAgICByZXR1 cm4oYyk7CisgICAgZWxzZSBpZiAoYyA+PSB1X2RhbmlzaC5vZmZzZXQgKyB1X2RhbmlzaC5zaXpl KQorICAgICAgcmV0dXJuKGMpOworICAgIGVsc2UKKyAgICAgIHJldHVybih1X2RhbmlzaC5tYXBb YyAtIHVfZGFuaXNoLm9mZnNldF0pOworfQorCitVU0hPUlQKKyNpZmRlZiBDS19BTlNJQworcG9y dHVndWVzZV91KENIQVIgYykKKyNlbHNlCitwb3J0dWd1ZXNlX3UoYykgQ0hBUiBjOworI2VuZGlm IC8qIENLX0FOU0lDICovCit7CisgICAgaWYgKGMgJiAweDgwKQorICAgICAgcmV0dXJuKFVOSyk7 CisgICAgaWYgKGMgPCB1X3BvcnR1Z3Vlc2Uub2Zmc2V0KQorICAgICAgcmV0dXJuKGMpOworICAg IGVsc2UgaWYgKGMgPj0gdV9wb3J0dWd1ZXNlLm9mZnNldCArIHVfcG9ydHVndWVzZS5zaXplKQor ICAgICAgcmV0dXJuKGMpOworICAgIGVsc2UKKyAgICAgIHJldHVybih1X3BvcnR1Z3Vlc2UubWFw W2MgLSB1X3BvcnR1Z3Vlc2Uub2Zmc2V0XSk7Cit9CisKK1VTSE9SVAorI2lmZGVmIENLX0FOU0lD CitzcGFuaXNoX3UoQ0hBUiBjKQorI2Vsc2UKK3NwYW5pc2hfdShjKSBDSEFSIGM7CisjZW5kaWYg LyogQ0tfQU5TSUMgKi8KK3sKKyAgICBpZiAoYyAmIDB4ODApCisgICAgICByZXR1cm4oVU5LKTsK KyAgICBpZiAoYyA8IHVfc3BhbmlzaC5vZmZzZXQpCisgICAgICByZXR1cm4oYyk7CisgICAgZWxz ZSBpZiAoYyA+PSB1X3NwYW5pc2gub2Zmc2V0ICsgdV9zcGFuaXNoLnNpemUpCisgICAgICByZXR1 cm4oYyk7CisgICAgZWxzZQorICAgICAgcmV0dXJuKHVfc3BhbmlzaC5tYXBbYyAtIHVfc3Bhbmlz aC5vZmZzZXRdKTsKK30KKworVVNIT1JUCisjaWZkZWYgQ0tfQU5TSUMKK3N3ZWRpc2hfdShDSEFS IGMpCisjZWxzZQorc3dlZGlzaF91KGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLwor eworICAgIGlmIChjICYgMHg4MCkKKyAgICAgIHJldHVybihVTkspOworICAgIGlmIChjIDwgdV9z d2VkaXNoLm9mZnNldCkKKyAgICAgIHJldHVybihjKTsKKyAgICBlbHNlIGlmIChjID49IHVfc3dl ZGlzaC5vZmZzZXQgKyB1X3N3ZWRpc2guc2l6ZSkKKyAgICAgIHJldHVybihjKTsKKyAgICBlbHNl CisgICAgICByZXR1cm4odV9zd2VkaXNoLm1hcFtjIC0gdV9zd2VkaXNoLm9mZnNldF0pOworfQor CitVU0hPUlQKKyNpZmRlZiBDS19BTlNJQworc3dpc3NfdShDSEFSIGMpCisjZWxzZQorc3dpc3Nf dShjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAgICBpZiAoYyAmIDB4ODAp CisgICAgICByZXR1cm4oVU5LKTsKKyAgICBpZiAoYyA8IHVfc3dpc3Mub2Zmc2V0KQorICAgICAg cmV0dXJuKGMpOworICAgIGVsc2UgaWYgKGMgPj0gdV9zd2lzcy5vZmZzZXQgKyB1X3N3aXNzLnNp emUpCisgICAgICByZXR1cm4oYyk7CisgICAgZWxzZQorICAgICAgcmV0dXJuKHVfc3dpc3MubWFw W2MgLSB1X3N3aXNzLm9mZnNldF0pOworfQorCitVU0hPUlQKKyNpZmRlZiBDS19BTlNJQworYXBs MV91KENIQVIgYykKKyNlbHNlCithcGwxX3UoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lD ICovCit7CisgICAgaWYgKGMgJiAweDgwKQorICAgICAgcmV0dXJuKFVOSyk7CisgICAgaWYgKGMg PCB1X2FwbDEub2Zmc2V0KQorICAgICAgcmV0dXJuKGMpOworICAgIGVsc2UgaWYgKGMgPj0gdV9h cGwxLm9mZnNldCArIHVfYXBsMS5zaXplKQorICAgICAgcmV0dXJuKGMpOworICAgIGVsc2UKKyAg ICAgIHJldHVybih1X2FwbDEubWFwW2MgLSB1X2FwbDEub2Zmc2V0XSk7Cit9CisKK1VTSE9SVAor I2lmZGVmIENLX0FOU0lDCitpZGVudF91KENIQVIgYykKKyNlbHNlIC8qIENLX0FOU0lDICovCitp ZGVudF91KGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworICAgIHJldHVybigo VVNIT1JUKWMpOworfQorCitVU0hPUlQKKyNpZmRlZiBDS19BTlNJQworaXNvXzg4NTlfMV91KENI QVIgYykKKyNlbHNlCitpc29fODg1OV8xX3UoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lD ICovCit7CisgICAgaWYgKGMgPj0gMHg4MCAmJiBjIDwgMHhhMCkKKyAgICAgIHJldHVybihjKTsK KyAgICBjICY9IDB4N2Y7CisgICAgaWYgKGMgPCB1Xzg4NTlfMS5vZmZzZXQpCisgICAgICByZXR1 cm4oYyk7CisgICAgZWxzZSBpZiAoYyA+PSB1Xzg4NTlfMS5vZmZzZXQgKyB1Xzg4NTlfMS5zaXpl KQorICAgICAgcmV0dXJuKGMpOworICAgIGVsc2UKKyAgICAgIHJldHVybih1Xzg4NTlfMS5tYXBb YyAtIHVfODg1OV8xLm9mZnNldF0pOworfQorCitVU0hPUlQKKyNpZmRlZiBDS19BTlNJQworaXNv Xzg4NTlfMl91KENIQVIgYykKKyNlbHNlCitpc29fODg1OV8yX3UoYykgQ0hBUiBjOworI2VuZGlm IC8qIENLX0FOU0lDICovCit7CisgICAgaWYgKGMgPj0gMHg4MCAmJiBjIDwgMHhhMCkKKyAgICAg IHJldHVybihjKTsKKyAgICBjICY9IDB4N2Y7CisgICAgaWYgKGMgPCB1Xzg4NTlfMi5vZmZzZXQp CisgICAgICByZXR1cm4oYyk7CisgICAgZWxzZSBpZiAoYyA+PSB1Xzg4NTlfMi5vZmZzZXQgKyB1 Xzg4NTlfMi5zaXplKQorICAgICAgcmV0dXJuKGMpOworICAgIGVsc2UKKyAgICAgIHJldHVybih1 Xzg4NTlfMi5tYXBbYyAtIHVfODg1OV8yLm9mZnNldF0pOworfQorCitVU0hPUlQKKyNpZmRlZiBD S19BTlNJQworaXNvXzg4NTlfM191KENIQVIgYykKKyNlbHNlCitpc29fODg1OV8zX3UoYykgQ0hB UiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgaWYgKGMgPj0gMHg4MCAmJiBjIDwg MHhhMCkKKyAgICAgIHJldHVybihjKTsKKyAgICBjICY9IDB4N2Y7CisgICAgaWYgKGMgPCB1Xzg4 NTlfMy5vZmZzZXQpCisgICAgICByZXR1cm4oYyk7CisgICAgZWxzZSBpZiAoYyA+PSB1Xzg4NTlf My5vZmZzZXQgKyB1Xzg4NTlfMy5zaXplKQorICAgICAgcmV0dXJuKGMpOworICAgIGVsc2UKKyAg ICAgIHJldHVybih1Xzg4NTlfMy5tYXBbYyAtIHVfODg1OV8zLm9mZnNldF0pOworfQorCitVU0hP UlQKKyNpZmRlZiBDS19BTlNJQworaXNvXzg4NTlfNF91KENIQVIgYykKKyNlbHNlCitpc29fODg1 OV80X3UoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgaWYgKGMgPj0g MHg4MCAmJiBjIDwgMHhhMCkKKyAgICAgIHJldHVybihjKTsKKyAgICBjICY9IDB4N2Y7CisgICAg aWYgKGMgPCB1Xzg4NTlfNC5vZmZzZXQpCisgICAgICByZXR1cm4oYyk7CisgICAgZWxzZSBpZiAo YyA+PSB1Xzg4NTlfNC5vZmZzZXQgKyB1Xzg4NTlfNC5zaXplKQorICAgICAgcmV0dXJuKGMpOwor ICAgIGVsc2UKKyAgICAgIHJldHVybih1Xzg4NTlfNC5tYXBbYyAtIHVfODg1OV80Lm9mZnNldF0p OworfQorCitVU0hPUlQKKyNpZmRlZiBDS19BTlNJQworaXNvXzg4NTlfNV91KENIQVIgYykKKyNl bHNlCitpc29fODg1OV81X3UoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7Cisg ICAgaWYgKGMgPj0gMHg4MCAmJiBjIDwgMHhhMCkKKyAgICAgIHJldHVybihjKTsKKyAgICBjICY9 IDB4N2Y7CisgICAgaWYgKGMgPCB1Xzg4NTlfNS5vZmZzZXQpCisgICAgICByZXR1cm4oYyk7Cisg ICAgZWxzZSBpZiAoYyA+PSB1Xzg4NTlfNS5vZmZzZXQgKyB1Xzg4NTlfNS5zaXplKQorICAgICAg cmV0dXJuKGMpOworICAgIGVsc2UKKyAgICAgIHJldHVybih1Xzg4NTlfNS5tYXBbYyAtIHVfODg1 OV81Lm9mZnNldF0pOworfQorCitVU0hPUlQKKyNpZmRlZiBDS19BTlNJQwora29pOF91KENIQVIg YykKKyNlbHNlCitrb2k4X3UoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7Cisg ICAgaWYgKGMgPj0gMHg4MCAmJiBjIDwgMHhhMCkKKyAgICAgIHJldHVybihjKTsKKyAgICBjICY9 IDB4N2Y7CisgICAgaWYgKGMgPCB1X2tvaTgub2Zmc2V0KQorICAgICAgcmV0dXJuKGMpOworICAg IGVsc2UgaWYgKGMgPj0gdV9rb2k4Lm9mZnNldCArIHVfa29pOC5zaXplKQorICAgICAgcmV0dXJu KGMpOworICAgIGVsc2UKKyAgICAgIHJldHVybih1X2tvaTgubWFwW2MgLSB1X2tvaTgub2Zmc2V0 XSk7Cit9CisKK1VTSE9SVAorI2lmZGVmIENLX0FOU0lDCitrb2k4cl91KENIQVIgYykgICAgICAg ICAgICAgICAgICAgICAgICAgLyogS09JOC1SIHRvIFVuaWNvZGUgKi8KKyNlbHNlCitrb2k4cl91 KGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworICAgIGMgJj0gMHg3ZjsKKyAg ICBpZiAoYyA8IHVfa29pOHIub2Zmc2V0KQorICAgICAgcmV0dXJuKGMpOworICAgIGVsc2UgaWYg KGMgPj0gdV9rb2k4ci5vZmZzZXQgKyB1X2tvaThyLnNpemUpCisgICAgICByZXR1cm4oYyk7Cisg ICAgZWxzZQorICAgICAgcmV0dXJuKHVfa29pOHIubWFwW2MgLSB1X2tvaThyLm9mZnNldF0pOwor fQorCitVU0hPUlQKKyNpZmRlZiBDS19BTlNJQwora29pOHVfdShDSEFSIGMpCisjZWxzZQora29p OHVfdShjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAgICBjICY9IDB4N2Y7 CisgICAgaWYgKGMgPCB1X2tvaTh1Lm9mZnNldCkKKyAgICAgIHJldHVybihjKTsKKyAgICBlbHNl IGlmIChjID49IHVfa29pOHUub2Zmc2V0ICsgdV9rb2k4dS5zaXplKQorICAgICAgcmV0dXJuKGMp OworICAgIGVsc2UKKyAgICAgIHJldHVybih1X2tvaTh1Lm1hcFtjIC0gdV9rb2k4dS5vZmZzZXRd KTsKK30KKworVVNIT1JUCisjaWZkZWYgQ0tfQU5TSUMKK2lzb184ODU5XzZfdShDSEFSIGMpCisj ZWxzZQoraXNvXzg4NTlfNl91KGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworewor ICAgIGlmIChjID49IDB4ODAgJiYgYyA8IDB4YTApCisgICAgICByZXR1cm4oYyk7CisgICAgYyAm PSAweDdmOworICAgIGlmIChjIDwgdV84ODU5XzYub2Zmc2V0KQorICAgICAgcmV0dXJuKGMpOwor ICAgIGVsc2UgaWYgKGMgPj0gdV84ODU5XzYub2Zmc2V0ICsgdV84ODU5XzYuc2l6ZSkKKyAgICAg IHJldHVybihjKTsKKyAgICBlbHNlCisgICAgICByZXR1cm4odV84ODU5XzYubWFwW2MgLSB1Xzg4 NTlfNi5vZmZzZXRdKTsKK30KKworVVNIT1JUCisjaWZkZWYgQ0tfQU5TSUMKK2lzb184ODU5Xzdf dShDSEFSIGMpCisjZWxzZQoraXNvXzg4NTlfN191KGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19B TlNJQyAqLworeworICAgIGlmIChjID49IDB4ODAgJiYgYyA8IDB4YTApCisgICAgICByZXR1cm4o Yyk7CisgICAgYyAmPSAweDdmOworICAgIGlmIChjIDwgdV84ODU5Xzcub2Zmc2V0KQorICAgICAg cmV0dXJuKGMpOworICAgIGVsc2UgaWYgKGMgPj0gdV84ODU5Xzcub2Zmc2V0ICsgdV84ODU5Xzcu c2l6ZSkKKyAgICAgIHJldHVybihjKTsKKyAgICBlbHNlCisgICAgICByZXR1cm4odV84ODU5Xzcu bWFwW2MgLSB1Xzg4NTlfNy5vZmZzZXRdKTsKK30KKworVVNIT1JUCisjaWZkZWYgQ0tfQU5TSUMK K2lzb184ODU5XzhfdShDSEFSIGMpCisjZWxzZQoraXNvXzg4NTlfOF91KGMpIENIQVIgYzsKKyNl bmRpZiAvKiBDS19BTlNJQyAqLworeworICAgIGlmIChjID49IDB4ODAgJiYgYyA8IDB4YTApCisg ICAgICByZXR1cm4oYyk7CisgICAgYyAmPSAweDdmOworICAgIGlmIChjIDwgdV84ODU5Xzgub2Zm c2V0KQorICAgICAgcmV0dXJuKGMpOworICAgIGVsc2UgaWYgKGMgPj0gdV84ODU5Xzgub2Zmc2V0 ICsgdV84ODU5Xzguc2l6ZSkKKyAgICAgIHJldHVybihjKTsKKyAgICBlbHNlCisgICAgICByZXR1 cm4odV84ODU5XzgubWFwW2MgLSB1Xzg4NTlfOC5vZmZzZXRdKTsKK30KKworVVNIT1JUCisjaWZk ZWYgQ0tfQU5TSUMKK2hlYnJldzdfdShDSEFSIGMpCisjZWxzZQoraGVicmV3N191KGMpIENIQVIg YzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworICAgIGMgJj0gMHg3ZjsKKyAgICBpZiAoYyA8 IHVfaGVicmV3Ny5vZmZzZXQpCisgICAgICByZXR1cm4oYyk7CisgICAgZWxzZSBpZiAoYyA+PSB1 X2hlYnJldzcub2Zmc2V0ICsgdV9oZWJyZXc3LnNpemUpCisgICAgICByZXR1cm4oYyk7CisgICAg ZWxzZQorICAgICAgcmV0dXJuKHVfaGVicmV3Ny5tYXBbYyAtIHVfaGVicmV3Ny5vZmZzZXRdKTsK K30KKworVVNIT1JUCisjaWZkZWYgQ0tfQU5TSUMKK2Vsb3Q5MjdfdShDSEFSIGMpCisjZWxzZQor ZWxvdDkyN191KGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworICAgIGMgJj0g MHg3ZjsKKyAgICBpZiAoYyA8IHVfZWxvdDkyNy5vZmZzZXQpCisgICAgICByZXR1cm4oYyk7Cisg ICAgZWxzZSBpZiAoYyA+PSB1X2Vsb3Q5Mjcub2Zmc2V0ICsgdV9lbG90OTI3LnNpemUpCisgICAg ICByZXR1cm4oYyk7CisgICAgZWxzZQorICAgICAgcmV0dXJuKHVfZWxvdDkyNy5tYXBbYyAtIHVf ZWxvdDkyNy5vZmZzZXRdKTsKK30KKworVVNIT1JUCisjaWZkZWYgQ0tfQU5TSUMKK2lzb184ODU5 XzlfdShDSEFSIGMpCisjZWxzZQoraXNvXzg4NTlfOV91KGMpIENIQVIgYzsKKyNlbmRpZiAvKiBD S19BTlNJQyAqLworeworICAgIGlmIChjID49IDB4ODAgJiYgYyA8IDB4YTApCisgICAgICByZXR1 cm4oYyk7CisgICAgYyAmPSAweDdmOworICAgIGlmIChjIDwgdV84ODU5Xzkub2Zmc2V0KQorICAg ICAgcmV0dXJuKGMpOworICAgIGVsc2UgaWYgKGMgPj0gdV84ODU5Xzkub2Zmc2V0ICsgdV84ODU5 Xzkuc2l6ZSkKKyAgICAgIHJldHVybihjKTsKKyAgICBlbHNlCisgICAgICByZXR1cm4odV84ODU5 XzkubWFwW2MgLSB1Xzg4NTlfOS5vZmZzZXRdKTsKK30KKworVVNIT1JUCisjaWZkZWYgQ0tfQU5T SUMKK2lzb184ODU5XzEwX3UoQ0hBUiBjKQorI2Vsc2UKK2lzb184ODU5XzEwX3UoYykgQ0hBUiBj OworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgaWYgKGMgPj0gMHg4MCAmJiBjIDwgMHhh MCkKKyAgICAgIHJldHVybihjKTsKKyAgICBjICY9IDB4N2Y7CisgICAgaWYgKGMgPCB1Xzg4NTlf MTAub2Zmc2V0KQorICAgICAgcmV0dXJuKGMpOworICAgIGVsc2UgaWYgKGMgPj0gdV84ODU5XzEw Lm9mZnNldCArIHVfODg1OV8xMC5zaXplKQorICAgICAgcmV0dXJuKGMpOworICAgIGVsc2UKKyAg ICAgIHJldHVybih1Xzg4NTlfMTAubWFwW2MgLSB1Xzg4NTlfMTAub2Zmc2V0XSk7Cit9CisKK1VT SE9SVAorI2lmZGVmIENLX0FOU0lDCitpc29fODg1OV8xNV91KENIQVIgYykKKyNlbHNlCitpc29f ODg1OV8xNV91KGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworICAgIGlmIChj ID49IDB4ODAgJiYgYyA8IDB4YTApCisgICAgICByZXR1cm4oYyk7CisgICAgYyAmPSAweDdmOwor ICAgIGlmIChjIDwgdV84ODU5XzE1Lm9mZnNldCkKKyAgICAgIHJldHVybihjKTsKKyAgICBlbHNl IGlmIChjID49IHVfODg1OV8xNS5vZmZzZXQgKyB1Xzg4NTlfMTUuc2l6ZSkKKyAgICAgIHJldHVy bihjKTsKKyAgICBlbHNlCisgICAgICByZXR1cm4odV84ODU5XzE1Lm1hcFtjIC0gdV84ODU5XzE1 Lm9mZnNldF0pOworfQorCitVU0hPUlQKKyNpZmRlZiBDS19BTlNJQworYXBsMl91KENIQVIgYykK KyNlbHNlCithcGwyX3UoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAg aWYgKGMgPj0gMHg4MCAmJiBjIDwgMHhhMCkKKyAgICAgIHJldHVybihjKTsKKyAgICBjICY9IDB4 N2Y7CisgICAgaWYgKGMgPCB1X2FwbDIub2Zmc2V0KQorICAgICAgcmV0dXJuKGMpOworICAgIGVs c2UgaWYgKGMgPj0gdV9hcGwyLm9mZnNldCArIHVfYXBsMi5zaXplKQorICAgICAgcmV0dXJuKGMp OworICAgIGVsc2UKKyAgICAgIHJldHVybih1X2FwbDIubWFwW2MgLSB1X2FwbDIub2Zmc2V0XSk7 Cit9CisKK1VTSE9SVAorI2lmZGVmIENLX0FOU0lDCithcGwzX3UoQ0hBUiBjKQorI2Vsc2UKK2Fw bDNfdShjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAgICBjICY9IDB4N2Y7 CisgICAgaWYgKGMgPCB1X2FwbDMub2Zmc2V0KQorICAgICAgcmV0dXJuKGMpOworICAgIGVsc2Ug aWYgKGMgPj0gdV9hcGwzLm9mZnNldCArIHVfYXBsMy5zaXplKQorICAgICAgcmV0dXJuKGMpOwor ICAgIGVsc2UKKyAgICAgIHJldHVybih1X2FwbDMubWFwW2MgLSB1X2FwbDMub2Zmc2V0XSk7Cit9 CisKK1VTSE9SVAorI2lmZGVmIENLX0FOU0lDCithcGw0X3UoQ0hBUiBjKQorI2Vsc2UKK2FwbDRf dShjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAgICBjICY9IDB4N2Y7Cisg ICAgaWYgKGMgPCB1X2FwbDQub2Zmc2V0KQorICAgICAgcmV0dXJuKGMpOworICAgIGVsc2UgaWYg KGMgPj0gdV9hcGw0Lm9mZnNldCArIHVfYXBsNC5zaXplKQorICAgICAgcmV0dXJuKGMpOworICAg IGVsc2UKKyAgICAgIHJldHVybih1X2FwbDQubWFwW2MgLSB1X2FwbDQub2Zmc2V0XSk7Cit9CisK K1VTSE9SVAorI2lmZGVmIENLX0FOU0lDCithcGw1X3UoQ0hBUiBjKQorI2Vsc2UKK2FwbDVfdShj KSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAgICBjICY9IDB4N2Y7CisgICAg aWYgKGMgPCB1X2FwbDUub2Zmc2V0KQorICAgICAgcmV0dXJuKGMpOworICAgIGVsc2UgaWYgKGMg Pj0gdV9hcGw1Lm9mZnNldCArIHVfYXBsNS5zaXplKQorICAgICAgcmV0dXJuKGMpOworICAgIGVs c2UKKyAgICAgIHJldHVybih1X2FwbDUubWFwW2MgLSB1X2FwbDUub2Zmc2V0XSk7Cit9CisKK1VT SE9SVAorI2lmZGVmIENLX0FOU0lDCitrb2k3X3UoQ0hBUiBjKQorI2Vsc2UKK2tvaTdfdShjKSBD SEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAgICBpZiAoYyAmIDB4ODApCisgICAg ICByZXR1cm4oVU5LKTsKKyAgICBpZiAoYyA8IHVfa29pNy5vZmZzZXQpCisgICAgICByZXR1cm4o Yyk7CisgICAgZWxzZSBpZiAoYyA+PSB1X2tvaTcub2Zmc2V0ICsgdV9rb2k3LnNpemUpCisgICAg ICByZXR1cm4oYyk7CisgICAgZWxzZQorICAgICAgcmV0dXJuKHVfa29pNy5tYXBbYyAtIHVfa29p Ny5vZmZzZXRdKTsKK30KKworVVNIT1JUCisjaWZkZWYgQ0tfQU5TSUMKK2RlY21jc191KENIQVIg YykKKyNlbHNlCitkZWNtY3NfdShjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sK KyAgICBpZiAoYyA+PSAweDgwICYmIGMgPCAweGEwKQorICAgICAgcmV0dXJuKGMpOworICAgIGMg Jj0gMHg3ZjsKKyAgICBpZiAoYyA8IHVfZGVjbWNzLm9mZnNldCkKKyAgICAgIHJldHVybihjKTsK KyAgICBlbHNlIGlmIChjID49IHVfZGVjbWNzLm9mZnNldCArIHVfZGVjbWNzLnNpemUpCisgICAg ICByZXR1cm4oYyk7CisgICAgZWxzZQorICAgICAgcmV0dXJuKHVfZGVjbWNzLm1hcFtjIC0gdV9k ZWNtY3Mub2Zmc2V0XSk7Cit9CisKK1VTSE9SVAorI2lmZGVmIENLX0FOU0lDCituZXh0c3RlcF91 KENIQVIgYykKKyNlbHNlCituZXh0c3RlcF91KGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJ QyAqLworeworICAgIHJldHVybih1X25leHRzdGVwLm1hcFsoYyAmIDB4N2YpIC0gdV9uZXh0c3Rl cC5vZmZzZXRdKTsKK30KKworVVNIT1JUCisjaWZkZWYgQ0tfQU5TSUMKK2RnaV91KENIQVIgYykK KyNlbHNlCitkZ2lfdShjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAgICBp ZiAoYyA+PSAweDgwICYmIGMgPCAweGEwKQorICAgICAgcmV0dXJuKGMpOworICAgIHJldHVybih1 X2RnaS5tYXBbKGMgJiAweDdmKSAtIHVfZGdpLm9mZnNldF0pOworfQorCitVU0hPUlQKKyNpZmRl ZiBDS19BTlNJQworaHByb21hbjhfdShDSEFSIGMpCisjZWxzZQoraHByb21hbjhfdShjKSBDSEFS IGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAgICBpZiAoYyA+PSAweDgwICYmIGMgPCAw eGEwKQorICAgICAgcmV0dXJuKGMpOworICAgIHJldHVybih1X2hwcm9tYW44Lm1hcFsoYyAmIDB4 N2YpIC0gdV9ocHJvbWFuOC5vZmZzZXRdKTsKK30KKworVVNIT1JUCisjaWZkZWYgQ0tfQU5TSUMK K2NwMzdfdShDSEFSIGMpCisjZWxzZQorY3AzN191KGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19B TlNJQyAqLworeworICAgIHJldHVybih1X2NwMzcubWFwW2MgJiAweDdmXSk7Cit9CisKK1VTSE9S VAorI2lmZGVmIENLX0FOU0lDCitjcDQzN191KENIQVIgYykKKyNlbHNlCitjcDQzN191KGMpIENI QVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworICAgIHJldHVybih1X2NwNDM3Lm1hcFtj ICYgMHg3Zl0pOworfQorCitVU0hPUlQKKyNpZmRlZiBDS19BTlNJQworbWF6b3ZpYV91KENIQVIg YykgLyogTWF6b3ZpYSA9IENQNDM3IHdpdGggc3Vic3RpdHV0aW9ucyAqLworI2Vsc2UKK21hem92 aWFfdShjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAgICByZXR1cm4odV9t YXpvdmlhLm1hcFtjICYgMHg3Zl0pOworfQorCitVU0hPUlQKKyNpZmRlZiBDS19BTlNJQworY3A4 NTBfdShDSEFSIGMpCisjZWxzZQorY3A4NTBfdShjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5T SUMgKi8KK3sKKyAgICByZXR1cm4odV9jcDg1MC5tYXBbYyAmIDB4N2ZdKTsKK30KKworVVNIT1JU CisjaWZkZWYgQ0tfQU5TSUMKK2NwODU4X3UoQ0hBUiBjKQorI2Vsc2UKK2NwODU4X3UoYykgQ0hB UiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgcmV0dXJuKHVfY3A4NTgubWFwW2Mg JiAweDdmXSk7Cit9CisKK1VTSE9SVAorI2lmZGVmIENLX0FOU0lDCitjcDEyNTBfdShDSEFSIGMp CisjZWxzZQorY3AxMjUwX3UoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7Cisg ICAgcmV0dXJuKHVfY3AxMjUwLm1hcFtjICYgMHg3Zl0pOworfQorCitVU0hPUlQKKyNpZmRlZiBD S19BTlNJQworY3AxMjUxX3UoQ0hBUiBjKQorI2Vsc2UKK2NwMTI1MV91KGMpIENIQVIgYzsKKyNl bmRpZiAvKiBDS19BTlNJQyAqLworeworICAgIHJldHVybih1X2NwMTI1MS5tYXBbYyAmIDB4N2Zd KTsKK30KKworVVNIT1JUCisjaWZkZWYgQ0tfQU5TSUMKK2NwMTI1Ml91KENIQVIgYykKKyNlbHNl CitjcDEyNTJfdShjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAgICByZXR1 cm4odV9jcDEyNTIubWFwW2MgJiAweDdmXSk7Cit9CisKK1VTSE9SVAorI2lmZGVmIENLX0FOU0lD CitjcDEyNTNfdShDSEFSIGMpCisjZWxzZQorY3AxMjUzX3UoYykgQ0hBUiBjOworI2VuZGlmIC8q IENLX0FOU0lDICovCit7CisgICAgcmV0dXJuKHVfY3AxMjUzLm1hcFtjICYgMHg3Zl0pOworfQor CitVU0hPUlQKKyNpZmRlZiBDS19BTlNJQworY3AxMjU0X3UoQ0hBUiBjKQorI2Vsc2UKK2NwMTI1 NF91KGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworICAgIHJldHVybih1X2Nw MTI1NC5tYXBbYyAmIDB4N2ZdKTsKK30KKworVVNIT1JUCisjaWZkZWYgQ0tfQU5TSUMKK2NwMTI1 NV91KENIQVIgYykKKyNlbHNlCitjcDEyNTVfdShjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5T SUMgKi8KK3sKKyAgICByZXR1cm4odV9jcDEyNTUubWFwW2MgJiAweDdmXSk7Cit9CisKK1VTSE9S VAorI2lmZGVmIENLX0FOU0lDCitjcDEyNTZfdShDSEFSIGMpCisjZWxzZQorY3AxMjU2X3UoYykg Q0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgcmV0dXJuKHVfY3AxMjU2Lm1h cFtjICYgMHg3Zl0pOworfQorCitVU0hPUlQKKyNpZmRlZiBDS19BTlNJQworY3AxMjU3X3UoQ0hB UiBjKQorI2Vsc2UKK2NwMTI1N191KGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLwor eworICAgIHJldHVybih1X2NwMTI1Ny5tYXBbYyAmIDB4N2ZdKTsKK30KKworVVNIT1JUCisjaWZk ZWYgQ0tfQU5TSUMKK2NwMTI1OF91KENIQVIgYykKKyNlbHNlCitjcDEyNThfdShjKSBDSEFSIGM7 CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAgICByZXR1cm4odV9jcDEyNTgubWFwW2MgJiAw eDdmXSk7Cit9CisKK1VTSE9SVAorI2lmZGVmIENLX0FOU0lDCitjcDg1Ml91KENIQVIgYykKKyNl bHNlCitjcDg1Ml91KGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworICAgIHJl dHVybih1X2NwODUyLm1hcFtjICYgMHg3Zl0pOworfQorCitVU0hPUlQgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogQ3lyaWxsaWMgKi8KKyNpZmRlZiBDS19BTlNJQworY3A4NTVf dShDSEFSIGMpCisjZWxzZQorY3A4NTVfdShjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMg Ki8KK3sKKyAgICByZXR1cm4odV9jcDg1NS5tYXBbYyAmIDB4N2ZdKTsKK30KKworVVNIT1JUICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEJ1bGdhcmlhICovCisjaWZkZWYgQ0tf QU5TSUMKK2NwODU2X3UoQ0hBUiBjKQorI2Vsc2UKK2NwODU2X3UoYykgQ0hBUiBjOworI2VuZGlm IC8qIENLX0FOU0lDICovCit7CisgICAgcmV0dXJuKHVfY3A4NTYubWFwW2MgJiAweDdmXSk7Cit9 CisKK1VTSE9SVAorI2lmZGVmIENLX0FOU0lDCitjcDg1N191KENIQVIgYykKKyNlbHNlCitjcDg1 N191KGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworICAgIHJldHVybih1X2Nw ODU3Lm1hcFtjICYgMHg3Zl0pOworfQorCitVU0hPUlQKKyNpZmRlZiBDS19BTlNJQworY3A4NjJf dShDSEFSIGMpCisjZWxzZQorY3A4NjJfdShjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMg Ki8KK3sKKyAgICByZXR1cm4odV9jcDg2Mi5tYXBbYyAmIDB4N2ZdKTsKK30KKworVVNIT1JUCisj aWZkZWYgQ0tfQU5TSUMKK2NwODY0X3UoQ0hBUiBjKQorI2Vsc2UKK2NwODY0X3UoYykgQ0hBUiBj OworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgcmV0dXJuKHVfY3A4NjQubWFwW2MgJiAw eDdmXSk7Cit9CisKK1VTSE9SVAorI2lmZGVmIENLX0FOU0lDCitjcDg2Nl91KENIQVIgYykKKyNl bHNlCitjcDg2Nl91KGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworICAgIHJl dHVybih1X2NwODY2Lm1hcFtjICYgMHg3Zl0pOworfQorCitVU0hPUlQKKyNpZmRlZiBDS19BTlNJ QworY3A4NjlfdShDSEFSIGMpCisjZWxzZQorY3A4NjlfdShjKSBDSEFSIGM7CisjZW5kaWYgLyog Q0tfQU5TSUMgKi8KK3sKKyAgICByZXR1cm4odV9jcDg2OS5tYXBbYyAmIDB4N2ZdKTsKK30KKwor VVNIT1JUCisjaWZkZWYgQ0tfQU5TSUMKK21hY2xhdGluX3UoQ0hBUiBjKQorI2Vsc2UKK21hY2xh dGluX3UoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgcmV0dXJuKHVf bWFjbGF0aW4ubWFwW2MgJiAweDdmXSk7Cit9CisKK1VTSE9SVAorI2lmZGVmIENLX0FOU0lDCitx dWlja2RyYXdfdShDSEFSIGMpCisjZWxzZQorcXVpY2tkcmF3X3UoYykgQ0hBUiBjOworI2VuZGlm IC8qIENLX0FOU0lDICovCit7CisgICAgcmV0dXJuKHVfcXVpY2tkcmF3Lm1hcFtjICYgMHg3Zl0p OworfQorCitVU0hPUlQKKyNpZmRlZiBDS19BTlNJQworZGVjc3BlY191KENIQVIgYykKKyNlbHNl CitkZWNzcGVjX3UoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgYyAm PSAweDdmOworICAgIGlmIChjIDwgdV9kZWNzcGVjLm9mZnNldCkKKyAgICAgIHJldHVybihjKTsK KyAgICBlbHNlIGlmIChjID49IHVfZGVjc3BlYy5vZmZzZXQgKyB1X2RlY3NwZWMuc2l6ZSkKKyAg ICAgIHJldHVybihjKTsKKyAgICBlbHNlCisgICAgICByZXR1cm4gKHVfZGVjc3BlYy5tYXBbYyAt IHVfZGVjc3BlYy5vZmZzZXRdKTsKK30KKworVVNIT1JUCisjaWZkZWYgQ0tfQU5TSUMKK2RlY3Rl Y2hfdShDSEFSIGMpCisjZWxzZQorZGVjdGVjaF91KGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19B TlNJQyAqLworeworICAgIGMgJj0gMHg3ZjsKKyAgICBpZiAoYyA8IHVfZGVjdGVjaC5vZmZzZXQp CisgICAgICByZXR1cm4oYyk7CisgICAgZWxzZSBpZiAoYyA+PSB1X2RlY3RlY2gub2Zmc2V0ICsg dV9kZWN0ZWNoLnNpemUpCisgICAgICByZXR1cm4oYyk7CisgICAgZWxzZQorICAgICAgcmV0dXJu KHVfZGVjdGVjaC5tYXBbYyAtIHVfZGVjdGVjaC5vZmZzZXRdKTsKK30KKworVVNIT1JUCisjaWZk ZWYgQ0tfQU5TSUMKK2Rnc3BlY191KENIQVIgYykKKyNlbHNlCitkZ3NwZWNfdShjKSBDSEFSIGM7 CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAgICBjICY9IDB4N2Y7CisgICAgaWYgKGMgPCB1 X2Rnc3BlYy5vZmZzZXQpCisgICAgICByZXR1cm4oYyk7CisgICAgZWxzZSBpZiAoYyA+PSB1X2Rn c3BlYy5vZmZzZXQgKyB1X2Rnc3BlYy5zaXplKQorICAgICAgcmV0dXJuKGMpOworICAgIGVsc2UK KyAgICAgIHJldHVybih1X2Rnc3BlYy5tYXBbYyAtIHVfZGdzcGVjLm9mZnNldF0pOworfQorCitV U0hPUlQKKyNpZmRlZiBDS19BTlNJQworZGdsaW5lX3UoQ0hBUiBjKQorI2Vsc2UKK2RnbGluZV91 KGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworICAgIGMgJj0gMHg3ZjsKKyAg ICBpZiAoYyA8IHVfZGdsaW5lLm9mZnNldCkKKyAgICAgIHJldHVybihjKTsKKyAgICBlbHNlIGlm IChjID49IHVfZGdsaW5lLm9mZnNldCArIHVfZGdsaW5lLnNpemUpCisgICAgICByZXR1cm4oYyk7 CisgICAgZWxzZQorICAgICAgcmV0dXJuKHVfZGdsaW5lLm1hcFtjIC0gdV9kZ2xpbmUub2Zmc2V0 XSk7Cit9CisKK1VTSE9SVAorI2lmZGVmIENLX0FOU0lDCitkZ3dvcmRfdShDSEFSIGMpCisjZWxz ZQorZGd3b3JkX3UoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgYyAm PSAweDdmOworICAgIGlmIChjIDwgdV9kZ3dvcmQub2Zmc2V0KQorICAgICAgcmV0dXJuKGMpOwor ICAgIGVsc2UgaWYgKGMgPj0gdV9kZ3dvcmQub2Zmc2V0ICsgdV9kZ3dvcmQuc2l6ZSkKKyAgICAg IHJldHVybihjKTsKKyAgICBlbHNlCisgICAgICByZXR1cm4odV9kZ3dvcmQubWFwW2MgLSB1X2Rn d29yZC5vZmZzZXRdKTsKK30KKworVVNIT1JUCisjaWZkZWYgQ0tfQU5TSUMKK2hwbGluZV91KENI QVIgYykKKyNlbHNlCitocGxpbmVfdShjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8K K3sKKyAgICBjICY9IDB4N2Y7CisgICAgaWYgKGMgPCB1X2hwbGluZS5vZmZzZXQpCisgICAgICBy ZXR1cm4oYyk7CisgICAgZWxzZSBpZiAoYyA+PSB1X2hwbGluZS5vZmZzZXQgKyB1X2hwbGluZS5z aXplKQorICAgICAgcmV0dXJuKGMpOworICAgIGVsc2UKKyAgICAgIHJldHVybih1X2hwbGluZS5t YXBbYyAtIHVfaHBsaW5lLm9mZnNldF0pOworfQorCitVU0hPUlQKKyNpZmRlZiBDS19BTlNJQwor aHBtYXRoX3UoQ0hBUiBjKQorI2Vsc2UKK2hwbWF0aF91KGMpIENIQVIgYzsKKyNlbmRpZiAvKiBD S19BTlNJQyAqLworeworICAgIGMgJj0gMHg3ZjsKKyAgICBpZiAoYyA8IHVfaHBtYXRoLm9mZnNl dCkKKyAgICAgIHJldHVybihjKTsKKyAgICBlbHNlIGlmIChjID49IHVfaHBtYXRoLm9mZnNldCAr IHVfaHBtYXRoLnNpemUpCisgICAgICByZXR1cm4oYyk7CisgICAgZWxzZQorICAgICAgcmV0dXJu KHVfaHBtYXRoLm1hcFtjIC0gdV9ocG1hdGgub2Zmc2V0XSk7Cit9CisKK1VTSE9SVAorI2lmZGVm IENLX0FOU0lDCitxbnhncnBoX3UoQ0hBUiBjKQorI2Vsc2UKK3FueGdycGhfdShjKSBDSEFSIGM7 CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAgICBjICY9IDB4N2Y7CisgICAgaWYgKGMgPCB1 X3FueGdycGgub2Zmc2V0KQorICAgICAgcmV0dXJuKGMpOworICAgIGVsc2UgaWYgKGMgPj0gdV9x bnhncnBoLm9mZnNldCArIHVfcW54Z3JwaC5zaXplKQorICAgICAgcmV0dXJuKGMpOworICAgIGVs c2UKKyAgICAgIHJldHVybih1X3FueGdycGgubWFwW2MgLSB1X3FueGdycGgub2Zmc2V0XSk7Cit9 CisKK1VTSE9SVAorI2lmZGVmIENLX0FOU0lDCitoejE1MDBfdShDSEFSIGMpCisjZWxzZQoraHox NTAwX3UoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgYyAmPSAweDdm OworICAgIGlmIChjIDwgdV9oejE1MDAub2Zmc2V0KQorICAgICAgcmV0dXJuKGMpOworICAgIGVs c2UgaWYgKGMgPj0gdV9oejE1MDAub2Zmc2V0ICsgdV9oejE1MDAuc2l6ZSkKKyAgICAgIHJldHVy bihjKTsKKyAgICBlbHNlCisgICAgICByZXR1cm4odV9oejE1MDAubWFwW2MgLSB1X2h6MTUwMC5v ZmZzZXRdKTsKK30KKworVVNIT1JUCisjaWZkZWYgQ0tfQU5TSUMKK3NuaWJsYW5rc191KENIQVIg YykKKyNlbHNlCitzbmlibGFua3NfdShjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8K K3sKKyAgICBjICY9IDB4N2Y7CisgICAgaWYgKGMgPCB1X3NuaWJsYW5rcy5vZmZzZXQpCisgICAg ICByZXR1cm4oYyk7CisgICAgZWxzZSBpZiAoYyA+PSB1X3NuaWJsYW5rcy5vZmZzZXQgKyB1X3Nu aWJsYW5rcy5zaXplKQorICAgICAgcmV0dXJuKGMpOworICAgIGVsc2UKKyAgICAgIHJldHVybih1 X3NuaWJsYW5rcy5tYXBbYyAtIHVfc25pYmxhbmtzLm9mZnNldF0pOworfQorCitVU0hPUlQKKyNp ZmRlZiBDS19BTlNJQworc25pYnJhY2tfdShDSEFSIGMpCisjZWxzZQorc25pYnJhY2tfdShjKSBD SEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAgICBjICY9IDB4N2Y7CisgICAgaWYg KGMgPCB1X3NuaWJyYWNrLm9mZnNldCkKKyAgICAgIHJldHVybihjKTsKKyAgICBlbHNlIGlmIChj ID49IHVfc25pYnJhY2sub2Zmc2V0ICsgdV9zbmlicmFjay5zaXplKQorICAgICAgcmV0dXJuKGMp OworICAgIGVsc2UKKyAgICAgIHJldHVybih1X3NuaWJyYWNrLm1hcFtjIC0gdV9zbmlicmFjay5v ZmZzZXRdKTsKK30KKworVVNIT1JUCisjaWZkZWYgQ0tfQU5TSUMKK3NuaWZhY2V0X3UoQ0hBUiBj KQorI2Vsc2UKK3NuaWZhY2V0X3UoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7 CisgICAgYyAmPSAweDdmOworICAgIGlmIChjIDwgdV9zbmlmYWNldC5vZmZzZXQpCisgICAgICBy ZXR1cm4oYyk7CisgICAgZWxzZSBpZiAoYyA+PSB1X3NuaWZhY2V0Lm9mZnNldCArIHVfc25pZmFj ZXQuc2l6ZSkKKyAgICAgIHJldHVybihjKTsKKyAgICBlbHNlCisgICAgICByZXR1cm4odV9zbmlm YWNldC5tYXBbYyAtIHVfc25pZmFjZXQub2Zmc2V0XSk7Cit9CisKK1VTSE9SVAorI2lmZGVmIENL X0FOU0lDCitzbmlpYm1fdShDSEFSIGMpCisjZWxzZQorc25paWJtX3UoYykgQ0hBUiBjOworI2Vu ZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgYyAmPSAweDdmOworICAgIGlmIChjIDwgdV9zbmlp Ym0ub2Zmc2V0KQorICAgICAgcmV0dXJuKGMpOworICAgIGVsc2UgaWYgKGMgPj0gdV9zbmlpYm0u b2Zmc2V0ICsgdV9zbmlpYm0uc2l6ZSkKKyAgICAgIHJldHVybihjKTsKKyAgICBlbHNlCisgICAg ICByZXR1cm4odV9zbmlpYm0ubWFwW2MgLSB1X3NuaWlibS5vZmZzZXRdKTsKK30KKworVVNIT1JU CisjaWZkZWYgQ0tfQU5TSUMKK3NuaWV1cm9fdShDSEFSIGMpCisjZWxzZQorc25pZXVyb191KGMp IENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworICAgIGMgJj0gMHg3ZjsKKyAgICBp ZiAoYyA8IHVfc25pZXVyby5vZmZzZXQpCisgICAgICByZXR1cm4oYyk7CisgICAgZWxzZSBpZiAo YyA+PSB1X3NuaWV1cm8ub2Zmc2V0ICsgdV9zbmlldXJvLnNpemUpCisgICAgICByZXR1cm4oYyk7 CisgICAgZWxzZQorICAgICAgcmV0dXJuKHVfc25pZXVyby5tYXBbYyAtIHVfc25pZXVyby5vZmZz ZXRdKTsKK30KKworVVNIT1JUCisjaWZkZWYgQ0tfQU5TSUMKK2hlYXRoMTlnX3UoQ0hBUiBjKQor I2Vsc2UKK2hlYXRoMTlnX3UoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7Cisg ICAgYyAmPSAweDdmOworICAgIGlmIChjIDwgdV9oZWF0aDE5Zy5vZmZzZXQpCisgICAgICByZXR1 cm4oYyk7CisgICAgZWxzZSBpZiAoYyA+PSB1X2hlYXRoMTlnLm9mZnNldCArIHVfaGVhdGgxOWcu c2l6ZSkKKyAgICAgIHJldHVybihjKTsKKyAgICBlbHNlCisgICAgICByZXR1cm4odV9oZWF0aDE5 Zy5tYXBbYyAtIHVfaGVhdGgxOWcub2Zmc2V0XSk7Cit9CisKK1VTSE9SVAorI2lmZGVmIENLX0FO U0lDCit0dmlnX3UoQ0hBUiBjKQorI2Vsc2UKK3R2aWdfdShjKSBDSEFSIGM7CisjZW5kaWYgLyog Q0tfQU5TSUMgKi8KK3sKKyAgICBjICY9IDB4N2Y7CisgICAgaWYgKGMgPCB1X3R2aWcub2Zmc2V0 KQorICAgICAgcmV0dXJuKGMpOworICAgIGVsc2UgaWYgKGMgPj0gdV90dmlnLm9mZnNldCArIHVf dHZpZy5zaXplKQorICAgICAgcmV0dXJuKGMpOworICAgIGVsc2UKKyAgICAgIHJldHVybih1X3R2 aWcubWFwW2MgLSB1X3R2aWcub2Zmc2V0XSk7Cit9CisKK1VTSE9SVAorI2lmZGVmIENLX0FOU0lD Cit3eXNlX2duX3UoQ0hBUiBjKQorI2Vsc2UKK3d5c2VfZ25fdShjKSBDSEFSIGM7CisjZW5kaWYg LyogQ0tfQU5TSUMgKi8KK3sKKyAgICBjICY9IDB4N2Y7CisgICAgaWYgKGMgPCB1X3d5c2VfZ24u b2Zmc2V0KQorICAgICAgcmV0dXJuKGMpOworICAgIGVsc2UgaWYgKGMgPj0gdV93eXNlX2duLm9m ZnNldCArIHVfd3lzZV9nbi5zaXplKQorICAgICAgcmV0dXJuKGMpOworICAgIGVsc2UKKyAgICAg IHJldHVybih1X3d5c2VfZ24ubWFwW2MgLSB1X3d5c2VfZ24ub2Zmc2V0XSk7Cit9CisKK1VTSE9S VAorI2lmZGVmIENLX0FOU0lDCit3eXNlX2cxX3UoQ0hBUiBjKQorI2Vsc2UKK3d5c2VfZzFfdShj KSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAgICBjICY9IDB4N2Y7CisgICAg aWYgKGMgPCB1X3d5c2VfZzEub2Zmc2V0KQorICAgICAgcmV0dXJuKGMpOworICAgIGVsc2UgaWYg KGMgPj0gdV93eXNlX2cxLm9mZnNldCArIHVfd3lzZV9nMS5zaXplKQorICAgICAgcmV0dXJuKGMp OworICAgIGVsc2UKKyAgICAgIHJldHVybih1X3d5c2VfZzEubWFwW2MgLSB1X3d5c2VfZzEub2Zm c2V0XSk7Cit9CisKK1VTSE9SVAorI2lmZGVmIENLX0FOU0lDCit3eXNlX2cyX3UoQ0hBUiBjKQor I2Vsc2UKK3d5c2VfZzJfdShjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAg ICBjICY9IDB4N2Y7CisgICAgaWYgKGMgPCB1X3d5c2VfZzIub2Zmc2V0KQorICAgICAgcmV0dXJu KGMpOworICAgIGVsc2UgaWYgKGMgPj0gdV93eXNlX2cyLm9mZnNldCArIHVfd3lzZV9nMi5zaXpl KQorICAgICAgcmV0dXJuKGMpOworICAgIGVsc2UKKyAgICAgIHJldHVybih1X3d5c2VfZzIubWFw W2MgLSB1X3d5c2VfZzIub2Zmc2V0XSk7Cit9CisKK1VTSE9SVAorI2lmZGVmIENLX0FOU0lDCit3 eXNlX2czX3UoQ0hBUiBjKQorI2Vsc2UKK3d5c2VfZzNfdShjKSBDSEFSIGM7CisjZW5kaWYgLyog Q0tfQU5TSUMgKi8KK3sKKyAgICBjICY9IDB4N2Y7CisgICAgaWYgKGMgPCB1X3d5c2VfZzMub2Zm c2V0KQorICAgICAgcmV0dXJuKGMpOworICAgIGVsc2UgaWYgKGMgPj0gdV93eXNlX2czLm9mZnNl dCArIHVfd3lzZV9nMy5zaXplKQorICAgICAgcmV0dXJuKGMpOworICAgIGVsc2UKKyAgICAgIHJl dHVybih1X3d5c2VfZzMubWFwW2MgLSB1X3d5c2VfZzMub2Zmc2V0XSk7Cit9CisKK1VTSE9SVAor I2lmZGVmIENLX0FOU0lDCitzbWlsZXlfdShDSEFSIGMpCisjZWxzZQorc21pbGV5X3UoYykgQ0hB UiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgYyAmPSAweDdmOworICAgIGlmIChj IDwgdV9zbWlsZXkub2Zmc2V0KQorICAgICAgcmV0dXJuKGMpOworICAgIGVsc2UgaWYgKGMgPj0g dV9zbWlsZXkub2Zmc2V0ICsgdV9zbWlsZXkuc2l6ZSkKKyAgICAgIHJldHVybihjKTsKKyAgICBl bHNlCisgICAgICByZXR1cm4odV9zbWlsZXkubWFwW2MgLSB1X3NtaWxleS5vZmZzZXRdKTsKK30K KworVVNIT1JUCisjaWZkZWYgQ0tfQU5TSUMKK2MwcGljc191KENIQVIgYykKKyNlbHNlCitjMHBp Y3NfdShjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAgICBjICY9IDB4N2Y7 CisgICAgaWYgKGMgPCB1X2MwcGljcy5vZmZzZXQpCisgICAgICByZXR1cm4oYyk7CisgICAgZWxz ZSBpZiAoYyA+PSB1X2MwcGljcy5vZmZzZXQgKyB1X2MwcGljcy5zaXplKQorICAgICAgcmV0dXJu KGMpOworICAgIGVsc2UKKyAgICAgIHJldHVybih1X2MwcGljcy5tYXBbYyAtIHVfYzBwaWNzLm9m ZnNldF0pOworfQorCitVU0hPUlQKKyNpZmRlZiBDS19BTlNJQworYzFwaWNzX3UoQ0hBUiBjKQor I2Vsc2UKK2MxcGljc191KGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworICAg IGMgJj0gMHg3ZjsKKyAgICBpZiAoYyA8IHVfYzFwaWNzLm9mZnNldCkKKyAgICAgIHJldHVybihj KTsKKyAgICBlbHNlIGlmIChjID49IHVfYzFwaWNzLm9mZnNldCArIHVfYzFwaWNzLnNpemUpCisg ICAgICByZXR1cm4oYyk7CisgICAgZWxzZQorICAgICAgcmV0dXJuKHVfYzFwaWNzLm1hcFtjIC0g dV9jMXBpY3Mub2Zmc2V0XSk7Cit9CisKKyNpZmRlZiBLQU5KSSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBLYW5qaS9Vbmljb2RlIGZ1bmN0aW9ucyAqLworCitzdGF0aWMgbG9uZyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogU3RhdGlzdGljcyBjb3VudGVycyAqLworICBiYWQg PSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJFTU9WRSBUSEVTRSBMQVRFUi4u LiAqLworICBrYW5qaSA9IDAsCisgIGthbmEgPSAwLAorICBncmVlayA9IDAsCisgIGN5cmlsbGlj ID0gMCwKKyAgc3BlY2lhbCA9IDAsCisgIHJvbWFuID0gMDsKKworVVNIT1JUCisjaWZkZWYgQ0tf QU5TSUMKK3NqX3RvX3VuKFVTSE9SVCBzaikgICAgICAgICAgICAgICAgICAgICAvKiBTaGlmdC1K SVMgdG8gVW5pY29kZSAqLworI2Vsc2UKK3NqX3RvX3VuKHNqKSBVU0hPUlQgc2o7CisjZW5kaWYg LyogQ0tfQU5TSUMgKi8KK3sKKworLyogS2FuamkgYmxvY2tzICovCisKKyAgICBpZiAoc2ogPj0g MHg4MTQwKSB7ICAgICAgICAgICAgICAgICAvKiBBbGwgcG9zc2libGUgS2FuamlzICovCisgICAg ICAgIGthbmppKys7ICAgICAgICAgICAgICAgICAgICAgICAgLyogT3B0aW1pc3RpY2FsbHkgY291 bnQgYSBLYW5qaSAqLworICAgICAgICBpZiAoc2ogPD0gMHg5ZmZjKSB7ICAgICAgICAgICAgIC8q IDc4NjktZWxlbWVudCB0YWJsZSAqLworICAgICAgICAgICAgcmV0dXJuKHNqdV84MTQwW3NqIC0g MHg4MTQwXSk7CisgICAgICAgIH0gZWxzZSBpZiAoc2ogPj0gMHhlMDQwICYmIHNqIDw9IDB4ZWFh NCkgeyAvKiAyNjYwLWVsZW1lbnQgdGFibGUgKi8KKyAgICAgICAgICAgIHJldHVybihzanVfZTA0 MFtzaiAtIDB4ZTA0MF0pOworICAgICAgICB9IGVsc2UgaWYgKHNqID49IDB4ZjA0MCkgeyAgICAg IC8qIFVzZXItZGVmaW5lZCBhcmVhcyAqLworICAgICAgICAgICAgaWYgKHNqIDw9IDB4ZjBmYykg eyAgICAgICAgIC8qIHRlbiAxODktY2hhciBjaHVua3MgKi8KKyAgICAgICAgICAgICAgICByZXR1 cm4oMHhlMDAwICsgKHNqIC0gMHhmMDQwKSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHNqID49 IDB4ZjE0MCAmJiBzaiA8PSAweGYxZmMpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4oMHhlMGJj ICsgKHNqIC0gMHhmMTQwKSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHNqID49IDB4ZjI0MCAm JiBzaiA8PSAweGYyZmMpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4oMHhlMTc4ICsgKHNqIC0g MHhmMjQwKSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHNqID49IDB4ZjM0MCAmJiBzaiA8PSAw eGYzZmMpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4oMHhlMjM0ICsgKHNqIC0gMHhmMzQwKSk7 CisgICAgICAgICAgICB9IGVsc2UgaWYgKHNqID49IDB4ZjQ0MCAmJiBzaiA8PSAweGY0ZmMpIHsK KyAgICAgICAgICAgICAgICByZXR1cm4oMHhlMmYwICsgKHNqIC0gMHhmNDQwKSk7CisgICAgICAg ICAgICB9IGVsc2UgaWYgKHNqID49IDB4ZjU0MCAmJiBzaiA8PSAweGY1ZmMpIHsKKyAgICAgICAg ICAgICAgICByZXR1cm4oMHhlM2FjICsgKHNqIC0gMHhmNTQwKSk7CisgICAgICAgICAgICB9IGVs c2UgaWYgKHNqID49IDB4ZjY0MCAmJiBzaiA8PSAweGY2ZmMpIHsKKyAgICAgICAgICAgICAgICBy ZXR1cm4oMHhlNDY4ICsgKHNqIC0gMHhmNjQwKSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHNq ID49IDB4Zjc0MCAmJiBzaiA8PSAweGY3ZmMpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4oMHhl NTI0ICsgKHNqIC0gMHhmNzQwKSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHNqID49IDB4Zjg0 MCAmJiBzaiA8PSAweGY4ZmMpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4oMHhlNWUwICsgKHNq IC0gMHhmODQwKSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHNqID49IDB4Zjk0MCAmJiBzaiA8 PSAweGY5ZmMpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4oMHhlNjljICsgKHNqIC0gMHhmOTQw KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAga2FuamktLTsgICAgICAgICAg ICAgICAgICAgICAgICAvKiBOb25lIG9mIHRoZSBhYm92ZSwgdW5jb3VudCAqLworICAgIH0KKwor LyogQzAgLyBIYWxmd2lkdGgtUm9tYW4gLyBDMSBibG9jayAoMHgwMC0weDlmLCBubyBob2xlcykg Ki8KKworICAgIGVsc2UgaWYgKHNqIDwgMHgwMGEwKSB7CisgICAgICAgIHJvbWFuKys7ICAgICAg ICAgICAgICAgICAgICAgICAgLyogQ291bnQgYSBSb21hbiAqLworICAgICAgICBpZiAoc2ogPT0g MHg1YykgeyAgICAgICAgICAgICAgIC8qIFllbiBzaWduICovCisgICAgICAgICAgICByZXR1cm4o MHgwMGE1KTsKKyAgICAgICAgfSBlbHNlIGlmIChzaiA9PSAweDdlKSB7ICAgICAgICAvKiBPdmVy bGluZSAobWFjcm9uKSAqLworICAgICAgICAgICAgcmV0dXJuKDB4MjAzZSk7CisgICAgICAgIH0g ZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogQ29udHJvbCBvciBIYWxmd2lkdGggUm9t YW4gKi8KKyAgICAgICAgICAgIHJldHVybihzaik7CisgICAgICAgIH0KKyAgICB9CisKKy8qIEhh bGZ3aWR0aCBLYXRha2FuYSBibG9jayAoMHhhMC0weGRmLCBubyBob2xlcykgKi8KKworICAgIGVs c2UgaWYgKHNqID49IDB4YTEgJiYgc2ogPD0gMHhkZikgeworICAgICAgICBrYW5hKys7CisgICAg ICAgIHJldHVybihzaiArIDB4ZmVjMCk7CisgICAgfQorCisvKiBDYXRjaC1hbGwgbXVzdCBiZSBm aW5hbCAqLworCisgICAgYmFkKys7CisgICAgcmV0dXJuKDB4ZmZmZCk7Cit9CisKK1VTSE9SVAor I2lmZGVmIENLX0FOU0lDCit1bl90b19zaihVU0hPUlQgdW4pICAgICAgICAgICAgICAgICAgICAg LyogVW5pY29kZSB0byBTaGlmdC1KSVMgKi8KKyNlbHNlCit1bl90b19zaih1bikgVVNIT1JUIHVu OworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisKKyAgICBpZiAodW4gPCAweDAwYTApIHsKKyAg ICAgICAgc3dpdGNoICh1bikgeworICAgICAgICAgIGNhc2UgMHgwMDVjOiByb21hbisrOyByZXR1 cm4oMHg4MTVmKTsgLyogQmFja3NsYXNoICovCisgICAgICAgICAgY2FzZSAweDAwN2U6IGJhZCsr OyAgIHJldHVybigweGZmZmQpOyAvKiBObyB0aWxkZSBpbiBTaGlmdC1KSVMgKi8KKyAgICAgICAg ICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFTQ0lJIG9yIEMwL0Mx IGNvbnRyb2wgKi8KKyAgICAgICAgICAgIHJvbWFuKys7CisgICAgICAgICAgICByZXR1cm4odW4p OworICAgICAgICB9CisgICAgfQorICAgIGlmICh1biA+PSAweDAwYTAgJiYgdW4gPCAweDAzOTEp IHsgLyogTGF0aW4tMSBzeW1ib2xzICovCisgICAgICAgIHJvbWFuKys7CisgICAgICAgIHN3aXRj aCh1bikgeworICAgICAgICAgIGNhc2UgMHgwMEEyOiByZXR1cm4oMHg4MTkxKTsKKyAgICAgICAg ICBjYXNlIDB4MDBBMzogcmV0dXJuKDB4ODE5Mik7CisgICAgICAgICAgY2FzZSAweDAwQTU6IHJl dHVybigweDAwNUMpOyAgLyogWWVuICovCisgICAgICAgICAgY2FzZSAweDAwQTc6IHJldHVybigw eDgxOTgpOworICAgICAgICAgIGNhc2UgMHgwMEE4OiByZXR1cm4oMHg4MTRFKTsKKyAgICAgICAg ICBjYXNlIDB4MDBBQzogcmV0dXJuKDB4ODFDQSk7CisgICAgICAgICAgY2FzZSAweDAwQjA6IHJl dHVybigweDgxOEIpOworICAgICAgICAgIGNhc2UgMHgwMEIxOiByZXR1cm4oMHg4MTdEKTsKKyAg ICAgICAgICBjYXNlIDB4MDBCNDogcmV0dXJuKDB4ODE0Qyk7CisgICAgICAgICAgY2FzZSAweDAw QjY6IHJldHVybigweDgxRjcpOworICAgICAgICAgIGNhc2UgMHgwMEQ3OiByZXR1cm4oMHg4MTdF KTsKKyAgICAgICAgICBjYXNlIDB4MDBGNzogcmV0dXJuKDB4ODE4MCk7CisgICAgICAgICAgZGVm YXVsdDoKKyAgICAgICAgICAgIHJvbWFuLS07CisgICAgICAgICAgICBiYWQrKzsKKyAgICAgICAg ICAgIHJldHVybigweGZmZmQpOworICAgICAgICB9CisgICAgfQorICAgIGlmICh1biA+PSAweDAz OTEgJiYgdW4gPCAweDA0MDEpIHsgIC8qIEdyZWVrICovCisgICAgICAgIGdyZWVrKys7CisgICAg ICAgIGlmICh1biA8PSAweDAzOWMpCisgICAgICAgICAgcmV0dXJuKHVzal8wMzkxW3VuLTB4MDM5 MV0pOworICAgICAgICBncmVlay0tOworICAgICAgICBiYWQrKzsKKyAgICAgICAgcmV0dXJuKDB4 ZmZmZCk7CisgICAgfQorICAgIGlmICh1biA+PSAweDA0MDEgJiYgdW4gPCAweDIwMTApIHsgIC8q IEN5cmlsbGljICovCisgICAgICAgIGN5cmlsbGljKys7CisgICAgICAgIGlmICh1biA8PSAweDA0 NTEpCisgICAgICAgICAgcmV0dXJuKHVzal8wNDAxW3VuLTB4MDQwMV0pOworICAgICAgICBjeXJp bGxpYy0tOworICAgICAgICBiYWQrKzsKKyAgICAgICAgcmV0dXJuKDB4ZmZmZCk7CisgICAgfQor ICAgIGlmICh1biA+PSAweDIwMTAgJiYgdW4gPCAweDI1MDApIHsgIC8qIEdlbmVyYWwgcHVuY3R1 YXRpb24gKi8KKyAgICAgICAgc3BlY2lhbCsrOworICAgICAgICBzd2l0Y2godW4pIHsKKyAgICAg ICAgICBjYXNlIDB4MjAxMDogcmV0dXJuKDB4ODE1RCk7CisgICAgICAgICAgY2FzZSAweDIwMTU6 IHJldHVybigweDgxNUMpOworICAgICAgICAgIGNhc2UgMHgyMDE2OiByZXR1cm4oMHg4MTYxKTsK KyAgICAgICAgICBjYXNlIDB4MjAxODogcmV0dXJuKDB4ODE2NSk7CisgICAgICAgICAgY2FzZSAw eDIwMTk6IHJldHVybigweDgxNjYpOworICAgICAgICAgIGNhc2UgMHgyMDFDOiByZXR1cm4oMHg4 MTY3KTsKKyAgICAgICAgICBjYXNlIDB4MjAxRDogcmV0dXJuKDB4ODE2OCk7CisgICAgICAgICAg Y2FzZSAweDIwMjA6IHJldHVybigweDgxRjUpOworICAgICAgICAgIGNhc2UgMHgyMDIxOiByZXR1 cm4oMHg4MUY2KTsKKyAgICAgICAgICBjYXNlIDB4MjAyNTogcmV0dXJuKDB4ODE2NCk7CisgICAg ICAgICAgY2FzZSAweDIwMjY6IHJldHVybigweDgxNjMpOworICAgICAgICAgIGNhc2UgMHgyMDMw OiByZXR1cm4oMHg4MUYxKTsKKyAgICAgICAgICBjYXNlIDB4MjAzMjogcmV0dXJuKDB4ODE4Qyk7 CisgICAgICAgICAgY2FzZSAweDIwMzM6IHJldHVybigweDgxOEQpOworICAgICAgICAgIGNhc2Ug MHgyMDNCOiByZXR1cm4oMHg4MUE2KTsKKyAgICAgICAgICBjYXNlIDB4MjAzRTogcmV0dXJuKDB4 MDA3RSk7CisgICAgICAgICAgY2FzZSAweDIxMDM6IHJldHVybigweDgxOEUpOyAgLyogTGV0dGVy bGlrZSBzeW1ib2xzICovCisgICAgICAgICAgY2FzZSAweDIxMkI6IHJldHVybigweDgxRjApOwor ICAgICAgICAgIGNhc2UgMHgyMTkwOiByZXR1cm4oMHg4MUE5KTsgIC8qIEFycm93cyAqLworICAg ICAgICAgIGNhc2UgMHgyMTkxOiByZXR1cm4oMHg4MUFBKTsKKyAgICAgICAgICBjYXNlIDB4MjE5 MjogcmV0dXJuKDB4ODFBOCk7CisgICAgICAgICAgY2FzZSAweDIxOTM6IHJldHVybigweDgxQUIp OworICAgICAgICAgIGNhc2UgMHgyMUQyOiByZXR1cm4oMHg4MUNCKTsKKyAgICAgICAgICBjYXNl IDB4MjFENDogcmV0dXJuKDB4ODFDQyk7CisgICAgICAgICAgY2FzZSAweDIyMDA6IHJldHVybigw eDgxQ0QpOyAgLyogTWF0aCAqLworICAgICAgICAgIGNhc2UgMHgyMjAyOiByZXR1cm4oMHg4MURE KTsKKyAgICAgICAgICBjYXNlIDB4MjIwMzogcmV0dXJuKDB4ODFDRSk7CisgICAgICAgICAgY2Fz ZSAweDIyMDc6IHJldHVybigweDgxREUpOworICAgICAgICAgIGNhc2UgMHgyMjA4OiByZXR1cm4o MHg4MUI4KTsKKyAgICAgICAgICBjYXNlIDB4MjIwQjogcmV0dXJuKDB4ODFCOSk7CisgICAgICAg ICAgY2FzZSAweDIyMTI6IHJldHVybigweDgxN0MpOworICAgICAgICAgIGNhc2UgMHgyMjFBOiBy ZXR1cm4oMHg4MUUzKTsKKyAgICAgICAgICBjYXNlIDB4MjIxRDogcmV0dXJuKDB4ODFFNSk7Cisg ICAgICAgICAgY2FzZSAweDIyMUU6IHJldHVybigweDgxODcpOworICAgICAgICAgIGNhc2UgMHgy MjIwOiByZXR1cm4oMHg4MURBKTsKKyAgICAgICAgICBjYXNlIDB4MjIyNzogcmV0dXJuKDB4ODFD OCk7CisgICAgICAgICAgY2FzZSAweDIyMjg6IHJldHVybigweDgxQzkpOworICAgICAgICAgIGNh c2UgMHgyMjI5OiByZXR1cm4oMHg4MUJGKTsKKyAgICAgICAgICBjYXNlIDB4MjIyQTogcmV0dXJu KDB4ODFCRSk7CisgICAgICAgICAgY2FzZSAweDIyMkI6IHJldHVybigweDgxRTcpOworICAgICAg ICAgIGNhc2UgMHgyMjJDOiByZXR1cm4oMHg4MUU4KTsKKyAgICAgICAgICBjYXNlIDB4MjIzNDog cmV0dXJuKDB4ODE4OCk7CisgICAgICAgICAgY2FzZSAweDIyMzU6IHJldHVybigweDgxRTYpOwor ICAgICAgICAgIGNhc2UgMHgyMjNEOiByZXR1cm4oMHg4MUU0KTsKKyAgICAgICAgICBjYXNlIDB4 MjI1MjogcmV0dXJuKDB4ODFFMCk7CisgICAgICAgICAgY2FzZSAweDIyNjA6IHJldHVybigweDgx ODIpOworICAgICAgICAgIGNhc2UgMHgyMjYxOiByZXR1cm4oMHg4MURGKTsKKyAgICAgICAgICBj YXNlIDB4MjI2NjogcmV0dXJuKDB4ODE4NSk7CisgICAgICAgICAgY2FzZSAweDIyNjc6IHJldHVy bigweDgxODYpOworICAgICAgICAgIGNhc2UgMHgyMjZBOiByZXR1cm4oMHg4MUUxKTsKKyAgICAg ICAgICBjYXNlIDB4MjI2QjogcmV0dXJuKDB4ODFFMik7CisgICAgICAgICAgY2FzZSAweDIyODI6 IHJldHVybigweDgxQkMpOworICAgICAgICAgIGNhc2UgMHgyMjgzOiByZXR1cm4oMHg4MUJEKTsK KyAgICAgICAgICBjYXNlIDB4MjI4NjogcmV0dXJuKDB4ODFCQSk7CisgICAgICAgICAgY2FzZSAw eDIyODc6IHJldHVybigweDgxQkIpOworICAgICAgICAgIGNhc2UgMHgyMkE1OiByZXR1cm4oMHg4 MURCKTsKKyAgICAgICAgICBjYXNlIDB4MjMxMjogcmV0dXJuKDB4ODFEQyk7ICAvKiBBcmMgKi8K KyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgc3BlY2lhbC0tOworICAgICAgICAgICAg YmFkKys7CisgICAgICAgICAgICByZXR1cm4oMHhmZmZkKTsKKyAgICAgICAgfQorICAgIH0KKyAg ICBpZiAodW4gPj0gMHgyNTAwICYmIHVuIDwgMHgzMDAwKSB7ICAvKiBCb3ggZHJhd2luZyAqLwor ICAgICAgICBzcGVjaWFsKys7CisgICAgICAgIHN3aXRjaCh1bikgeworICAgICAgICAgIGNhc2Ug MHgyNTAwOiByZXR1cm4oMHg4NDlGKTsKKyAgICAgICAgICBjYXNlIDB4MjUwMTogcmV0dXJuKDB4 ODRBQSk7CisgICAgICAgICAgY2FzZSAweDI1MDI6IHJldHVybigweDg0QTApOworICAgICAgICAg IGNhc2UgMHgyNTAzOiByZXR1cm4oMHg4NEFCKTsKKyAgICAgICAgICBjYXNlIDB4MjUwQzogcmV0 dXJuKDB4ODRBMSk7CisgICAgICAgICAgY2FzZSAweDI1MEY6IHJldHVybigweDg0QUMpOworICAg ICAgICAgIGNhc2UgMHgyNTEwOiByZXR1cm4oMHg4NEEyKTsKKyAgICAgICAgICBjYXNlIDB4MjUx MzogcmV0dXJuKDB4ODRBRCk7CisgICAgICAgICAgY2FzZSAweDI1MTQ6IHJldHVybigweDg0QTQp OworICAgICAgICAgIGNhc2UgMHgyNTE3OiByZXR1cm4oMHg4NEFGKTsKKyAgICAgICAgICBjYXNl IDB4MjUxODogcmV0dXJuKDB4ODRBMyk7CisgICAgICAgICAgY2FzZSAweDI1MUI6IHJldHVybigw eDg0QUUpOworICAgICAgICAgIGNhc2UgMHgyNTFDOiByZXR1cm4oMHg4NEE1KTsKKyAgICAgICAg ICBjYXNlIDB4MjUxRDogcmV0dXJuKDB4ODRCQSk7CisgICAgICAgICAgY2FzZSAweDI1MjA6IHJl dHVybigweDg0QjUpOworICAgICAgICAgIGNhc2UgMHgyNTIzOiByZXR1cm4oMHg4NEIwKTsKKyAg ICAgICAgICBjYXNlIDB4MjUyNDogcmV0dXJuKDB4ODRBNyk7CisgICAgICAgICAgY2FzZSAweDI1 MjU6IHJldHVybigweDg0QkMpOworICAgICAgICAgIGNhc2UgMHgyNTI4OiByZXR1cm4oMHg4NEI3 KTsKKyAgICAgICAgICBjYXNlIDB4MjUyQjogcmV0dXJuKDB4ODRCMik7CisgICAgICAgICAgY2Fz ZSAweDI1MkM6IHJldHVybigweDg0QTYpOworICAgICAgICAgIGNhc2UgMHgyNTJGOiByZXR1cm4o MHg4NEI2KTsKKyAgICAgICAgICBjYXNlIDB4MjUzMDogcmV0dXJuKDB4ODRCQik7CisgICAgICAg ICAgY2FzZSAweDI1MzM6IHJldHVybigweDg0QjEpOworICAgICAgICAgIGNhc2UgMHgyNTM0OiBy ZXR1cm4oMHg4NEE4KTsKKyAgICAgICAgICBjYXNlIDB4MjUzNzogcmV0dXJuKDB4ODRCOCk7Cisg ICAgICAgICAgY2FzZSAweDI1Mzg6IHJldHVybigweDg0QkQpOworICAgICAgICAgIGNhc2UgMHgy NTNCOiByZXR1cm4oMHg4NEIzKTsKKyAgICAgICAgICBjYXNlIDB4MjUzQzogcmV0dXJuKDB4ODRB OSk7CisgICAgICAgICAgY2FzZSAweDI1M0Y6IHJldHVybigweDg0QjkpOworICAgICAgICAgIGNh c2UgMHgyNTQyOiByZXR1cm4oMHg4NEJFKTsKKyAgICAgICAgICBjYXNlIDB4MjU0QjogcmV0dXJu KDB4ODRCNCk7CisgICAgICAgICAgY2FzZSAweDI1QTA6IHJldHVybigweDgxQTEpOyAgLyogR2Vv bWV0cmljIHNoYXBlcyAqLworICAgICAgICAgIGNhc2UgMHgyNUExOiByZXR1cm4oMHg4MUEwKTsK KyAgICAgICAgICBjYXNlIDB4MjVCMjogcmV0dXJuKDB4ODFBMyk7CisgICAgICAgICAgY2FzZSAw eDI1QjM6IHJldHVybigweDgxQTIpOworICAgICAgICAgIGNhc2UgMHgyNUJDOiByZXR1cm4oMHg4 MUE1KTsKKyAgICAgICAgICBjYXNlIDB4MjVCRDogcmV0dXJuKDB4ODFBNCk7CisgICAgICAgICAg Y2FzZSAweDI1QzY6IHJldHVybigweDgxOUYpOworICAgICAgICAgIGNhc2UgMHgyNUM3OiByZXR1 cm4oMHg4MTlFKTsKKyAgICAgICAgICBjYXNlIDB4MjVDQjogcmV0dXJuKDB4ODE5Qik7CisgICAg ICAgICAgY2FzZSAweDI1Q0U6IHJldHVybigweDgxOUQpOworICAgICAgICAgIGNhc2UgMHgyNUNG OiByZXR1cm4oMHg4MTlDKTsKKyAgICAgICAgICBjYXNlIDB4MjVFRjogcmV0dXJuKDB4ODFGQyk7 CisgICAgICAgICAgY2FzZSAweDI2MDU6IHJldHVybigweDgxOUEpOyAgLyogTWlzYyBzeW1ib2xz ICovCisgICAgICAgICAgY2FzZSAweDI2MDY6IHJldHVybigweDgxOTkpOworICAgICAgICAgIGNh c2UgMHgyNjQwOiByZXR1cm4oMHg4MThBKTsKKyAgICAgICAgICBjYXNlIDB4MjY0MjogcmV0dXJu KDB4ODE4OSk7CisgICAgICAgICAgY2FzZSAweDI2NkE6IHJldHVybigweDgxRjQpOworICAgICAg ICAgIGNhc2UgMHgyNjZEOiByZXR1cm4oMHg4MUYzKTsKKyAgICAgICAgICBjYXNlIDB4MjY2Rjog cmV0dXJuKDB4ODFGMik7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHNwZWNpYWwt LTsKKyAgICAgICAgICAgIGJhZCsrOworICAgICAgICAgICAgcmV0dXJuKDB4ZmZmZCk7CisgICAg ICAgIH0KKyAgICB9CisgICAgaWYgKHVuID49IDB4MzAwMCAmJiB1biA8IDB4NGUwMCkgeyAgLyog Q0pLIHN5bWJvbHMgJiBwdW5jICovCisgICAgICAgIGthbmppKys7CisgICAgICAgIGlmICh1biA8 PSAweDMwZmYpCisgICAgICAgICAgcmV0dXJuKHVzal8zMDAwW3VuLTB4MzAwMF0pOworICAgICAg ICBrYW5qaS0tOworICAgICAgICBiYWQrKzsKKyAgICAgICAgcmV0dXJuKDB4ZmZmZCk7CisgICAg fQorICAgIGlmICh1biA+PSAweGZmMDAgJiYgdW4gPCAweGZmZmYpIHsgIC8qIEhhbGYvZnVsbC13 aWR0aCBSb21hbiAmIEthdGFrYW5hICovCisgICAgICAgIGlmICh1biA8PSAweGZmOWYpIHsKKyAg ICAgICAgICAgIGlmICh1biA+IDB4ZmY2MCkKKyAgICAgICAgICAgICAga2FuYSsrOworICAgICAg ICAgICAgcmV0dXJuKHVzal9mZjAwW3VuLTB4ZmYwMF0pOworICAgICAgICB9CisgICAgICAgIGJh ZCsrOworICAgICAgICByZXR1cm4oMHhmZmZkKTsKKyAgICB9CisgICAgaWYgKHVuID49IDB4NGUw MCAmJiB1biA8IDB4ZTAwMCkgeyAgLyogS2FuamkgKi8KKyAgICAgICAga2FuamkrKzsKKyAgICAg ICAgaWYgKHVuIDw9IDB4OWZhMCkKKyAgICAgICAgICByZXR1cm4odXNqXzRlMDBbdW4tMHg0ZTAw XSk7CisgICAgICAgIGthbmppLS07CisgICAgICAgIGJhZCsrOworICAgICAgICByZXR1cm4oMHhm ZmZkKTsKKyAgICB9CisgICAgaWYgKHVuID49IDB4ZTAwMCAmJiB1biA8IDB4ZmYwMCkgeyAgLyog VXNlci1kZWZpbmVkIChHYWlqaSkgKi8KKyAgICAgICAga2FuamkrKzsKKyAgICAgICAgaWYgKHVu IDw9IDB4ZTBiYikgeyAgICAgICAgICAgICAvKiB0ZW4gMTg5LWNoYXIgY2h1bmtzICovCisgICAg ICAgICAgICByZXR1cm4oMHhmMDQwICsgKHVuIC0gMHhlMDAwKSk7CisgICAgICAgIH0gZWxzZSBp ZiAodW4gPj0gMHhlMGJjICYmIHVuIDw9IDB4ZTE3NykgeworICAgICAgICAgICAgcmV0dXJuKDB4 ZjE0MCArICh1biAtIDB4ZTBiYykpOworICAgICAgICB9IGVsc2UgaWYgKHVuID49IDB4ZTE3OCAm JiB1biA8PSAweGUyMzMpIHsKKyAgICAgICAgICAgIHJldHVybigweGYyNDAgKyAodW4gLSAweGUx NzgpKTsKKyAgICAgICAgfSBlbHNlIGlmICh1biA+PSAweGUyMzQgJiYgdW4gPD0gMHhlMmVmKSB7 CisgICAgICAgICAgICByZXR1cm4oMHhmMzQwICsgKHVuIC0gMHhlMjM0KSk7CisgICAgICAgIH0g ZWxzZSBpZiAodW4gPj0gMHhlMmYwICYmIHVuIDw9IDB4ZTNhYikgeworICAgICAgICAgICAgcmV0 dXJuKDB4ZjQ0MCArICh1biAtIDB4ZTJmMCkpOworICAgICAgICB9IGVsc2UgaWYgKHVuID49IDB4 ZTNhYyAmJiB1biA8PSAweGU0NjcpIHsKKyAgICAgICAgICAgIHJldHVybigweGY1NDAgKyAodW4g LSAweGUzYWMpKTsKKyAgICAgICAgfSBlbHNlIGlmICh1biA+PSAweGU0NjggJiYgdW4gPD0gMHhl NTIzKSB7CisgICAgICAgICAgICByZXR1cm4oMHhmNjQwICsgKHVuIC0gMHhlNDY4KSk7CisgICAg ICAgIH0gZWxzZSBpZiAodW4gPj0gMHhlNTI0ICYmIHVuIDw9IDB4ZTVkZikgeworICAgICAgICAg ICAgcmV0dXJuKDB4Zjc0MCArICh1biAtIDB4ZTUyNCkpOworICAgICAgICB9IGVsc2UgaWYgKHVu ID49IDB4ZTVlMCAmJiB1biA8PSAweGU2OWIpIHsKKyAgICAgICAgICAgIHJldHVybigweGY4NDAg KyAodW4gLSAweGU1ZTApKTsKKyAgICAgICAgfSBlbHNlIGlmICh1biA+PSAweGU2OWMgJiYgdW4g PD0gMHhlNzU3KSB7CisgICAgICAgICAgICByZXR1cm4oMHhmOTQwICsgKHVuIC0gMHhlNjljKSk7 CisgICAgICAgIH0KKyAgICAgICAgYmFkKys7CisgICAgICAgIHJldHVybigweGZmZmQpOworICAg IH0KKyAgICAvKiBOT1RSRUFDSEVEICovCisgICAgLyogU29tZSBjb21waWxlcnMgKGNvcnJlY3Rs eSkgd2FybiBvZiAic3RhdGVtZW50IG5vdCByZWFjaGVkIiBoZXJlLiAqLworICAgIC8qIEJ1dCBv dGhlcnMgZ2l2ZSB1cCB0aGUgZ2hvc3Qgd2l0aCAibm8gcmV0dXJuIHZhbHVlIi4gIFRoZSBmb3Jt ZXIgKi8KKyAgICAvKiBpcyB0aGUgbGVzc2VyIG9mIHR3byBldmlscy4gKi8KKyAgICBiYWQrKzsK KyAgICByZXR1cm4oMHhmZmZkKTsKK30KKyNlbmRpZiAvKiBLQU5KSSAqLworCisvKiBVbmljb2Rl LXRvLWJsYWggZnVuY3Rpb25zLCB0eF9ibGFoKCkuICovCisKK3N0YXRpYyBpbnQKKyNpZmRlZiBD S19BTlNJQwordHhfcHVuYyhVU0hPUlQgYykKKyNlbHNlCit0eF9wdW5jKGMpIFVTSE9SVCBjOwor I2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgaWYgKGMgPj0gMHgyMDAwICYmIGMgPD0gMHgy MDBhKSAgICAgLyogVmFyaW91cy13aWR0aCBzcGFjZXMgKi8KKyAgICAgIHJldHVybigoQ0hBUiko MHgyMCkpOworICAgIGVsc2UgaWYgKGMgPj0gMHgyMDEwICYmIGMgPD0gMHgyMDE1KSAvKiBWYXJp b3VzLXdpZHRoIGRhc2hlcyAqLworICAgICAgcmV0dXJuKChDSEFSKSctJyk7CisgICAgZWxzZSBp ZiAoYyA+PSAweDIwMTggJiYgYyA8PSAweDIwMWIpIC8qIEFzc29ydGVkIHNpbmdsZSBxdW90ZXMg Ki8KKyAgICAgIHJldHVybigoQ0hBUikweDI3KTsKKyAgICBlbHNlIGlmIChjID49IDB4MjAxYyAm JiBjIDw9IDB4MjAxZikgLyogQXNzb3J0ZWQgZG91YmxlIHF1b3RlcyAqLworICAgICAgcmV0dXJu KChDSEFSKTB4MjIpOworICAgIGVsc2UgaWYgKChjID49IDB4MjAyMiAmJiBjIDw9IDB4MjAyNCkg fHwgYyA9PSAweDIwNDMpIC8qIEJ1bGxldHMgKi8KKyAgICAgIHJldHVybigoQ0hBUikweGI3KTsK KyAgICBzd2l0Y2ggKGMpIHsKKyAgICAgIGNhc2UgMHgyMDM5OiAgICAgICAgICAgICAgICAgICAg ICAvKiBMZXNzLXRoYW4gc2lnbiAqLworICAgICAgICByZXR1cm4oKENIQVIpMHgzYyk7CisgICAg ICBjYXNlIDB4MjAzYTogICAgICAgICAgICAgICAgICAgICAgLyogR3JlYXRlci10aGFuIHNpZ24g Ki8KKyAgICAgICAgcmV0dXJuKChDSEFSKTB4M2UpOworICAgICAgY2FzZSAweDIwNDQ6ICAgICAg ICAgICAgICAgICAgICAgIC8qIFNvbGlkdXMgLT4gU2xhc2ggKi8KKyAgICAgICAgcmV0dXJuKChD SEFSKTB4MmYpOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9Cit9 CisKKworaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZvciBMYXRp bi0xICovCisjaWZkZWYgQ0tfQU5TSUMKK3R4X2lkZW50KFVTSE9SVCBjKQorI2Vsc2UKK3R4X2lk ZW50KGMpIFVTSE9SVCBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgaWYgKGMgPT0g MHgyMDNlKSAgICAgICAgICAgICAgICAgICAgLyogT3ZlcmxpbmUgLT4gTWFjcm9uICovCisgICAg ICByZXR1cm4oKENIQVIpMHhhZik7CisgICAgZWxzZSBpZiAoYyA8IDB4MTAwKSAgICAgICAgICAg ICAgICAgLyogTGF0aW4tMSByYW5nZSAqLworICAgICAgcmV0dXJuKChDSEFSKShjICYgMHhmZikp OworICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE9yIG1heWJlIGZy b20gcHVuY3R1YXRpb24gYmxvY2sgKi8KKyAgICAgIHJldHVybih0eF9wdW5jKGMpKTsKK30KKwor aW50CisjaWZkZWYgQ0tfQU5TSUMKK3R4X3VzYXNjaWkoVVNIT1JUIGMpCisjZWxzZQordHhfdXNh c2NpaShjKSBVU0hPUlQgYzsgICAgICAgICAgICAgICAgIC8qIFVTIEFTQ0lJICovCisjZW5kaWYg LyogQ0tfQU5TSUMgKi8KK3sKKyAgICBpZiAoYyA8IDB4ODApCisgICAgICByZXR1cm4oKENIQVIp KGMgJiAweGZmKSk7CisgICAgZWxzZSBpZiAoYyA+PSAweDIwMDAgJiYgYyA8PSAweDIwMGEpIC8q IFZhcmlvdXMtd2lkdGggc3BhY2VzICovCisgICAgICByZXR1cm4oKENIQVIpKDB4MjApKTsKKyAg ICBlbHNlIGlmIChjID49IDB4MjAxMCAmJiBjIDw9IDB4MjAxNSkgLyogVmFyaW91cy13aWR0aCBk YXNoZXMgKi8KKyAgICAgIHJldHVybigoQ0hBUiknLScpOworICAgIGVsc2UgaWYgKGMgPj0gMHgy MDE4ICYmIGMgPD0gMHgyMDFiKSAvKiBBc3NvcnRlZCBzaW5nbGUgcXVvdGVzICovCisgICAgICBy ZXR1cm4oKENIQVIpMHgyNyk7CisgICAgZWxzZSBpZiAoYyA+PSAweDIwMWMgJiYgYyA8PSAweDIw MWYpIC8qIEFzc29ydGVkIGRvdWJsZSBxdW90ZXMgKi8KKyAgICAgIHJldHVybigoQ0hBUikweDIy KTsKKyAgICBlbHNlIGlmICgoYyA+PSAweDIwMjIgJiYgYyA8PSAweDIwMjQpIHx8IGMgPT0gMHgy MDQzKSAvKiBCdWxsZXRzICovCisgICAgICByZXR1cm4oKENIQVIpMHhiNyk7CisgICAgc3dpdGNo IChjKSB7CisgICAgICBjYXNlIDB4MjAzOTogICAgICAgICAgICAgICAgICAgICAgLyogTGVzcy10 aGFuIHNpZ24gKi8KKyAgICAgICAgcmV0dXJuKChDSEFSKTB4M2MpOworICAgICAgY2FzZSAweDIw M2E6ICAgICAgICAgICAgICAgICAgICAgIC8qIEdyZWF0ZXItdGhhbiBzaWduICovCisgICAgICAg IHJldHVybigoQ0hBUikweDNlKTsKKyAgICAgIGNhc2UgMHgyMDQ0OiAgICAgICAgICAgICAgICAg ICAgICAvKiBTb2xpZHVzIC0+IFNsYXNoICovCisgICAgICAgIHJldHVybigoQ0hBUikweDJmKTsK KyAgICB9CisgICAgLyoKKyAgICAgIEhlcmUgd2UgbWlnaHQgYWxzbyAoYSkgbWFwIGFjY2VudGVk IFJvbWFuIGxldHRlcnMgdG8gdW5hY2NlbnRlZCBvbmVzOworICAgICAgKGIpIG1hcCBHcmVlay9D eXJpbGxpYyBBIChldGMpIHRvIFJvbWFuLCBhbmQgc28gb24uCisgICAgKi8KKyAgICByZXR1cm4o KGMgJiAweGZmODApID8gLTEgOiAoQ0hBUikoYyAmIDB4N2YpKTsKK30KKworaW50CisjaWZkZWYg Q0tfQU5TSUMKK3R4X2JyaXRpc2goVVNIT1JUIGMpCisjZWxzZQordHhfYnJpdGlzaChjKSBVU0hP UlQgYzsgICAgICAgICAgICAgICAgIC8qIEJyaXRpc2ggKi8KKyNlbmRpZiAvKiBDS19BTlNJQyAq LworeworICAgIGlmIChjICYgMHhmZjAwKQorICAgICAgcmV0dXJuKC0xKTsKKyAgICBlbHNlIGlm IChjID09IChVU0hPUlQpIDB4MDBhMykgICAgICAvKiBQb3VuZCBzaWduICovCisgICAgICByZXR1 cm4oMHgyYik7CisgICAgZWxzZQorICAgICAgcmV0dXJuKHR4X3VzYXNjaWkoYykpOworfQorCitp bnQKKyNpZmRlZiBDS19BTlNJQwordHhfYXBsMShVU0hPUlQgYykKKyNlbHNlCit0eF9hcGwxKGMp IFVTSE9SVCBjOyAgICAgICAgICAgICAgICAgICAgLyogQXBsMSAqLworI2VuZGlmIC8qIENLX0FO U0lDICovCit7CisgICAgaWYgKGMgPj0gMHgwMDQxICYmIGMgPD0gMHgwMDVhKSAgICAgLyogTGV0 dGVycyAqLworICAgICAgcmV0dXJuKGMgKyAweDIwKTsKKyAgICBzd2l0Y2ggKGMpIHsgICAgICAg ICAgICAgICAgICAgICAgICAvKiBPdGhlcnMgKi8KKyAgICAgIGNhc2UgMHgwMDI0OiByZXR1cm4o KENIQVIpMHg3ZSk7CisgICAgICBjYXNlIDB4MDAyNzogcmV0dXJuKChDSEFSKTB4NGIpOworICAg ICAgY2FzZSAweDAwMjg6IHJldHVybigoQ0hBUikweDNhKTsKKyAgICAgIGNhc2UgMHgwMDI5OiBy ZXR1cm4oKENIQVIpMHgyMik7CisgICAgICBjYXNlIDB4MDAyYjogcmV0dXJuKChDSEFSKTB4MmQp OworICAgICAgY2FzZSAweDAwMmM6IHJldHVybigoQ0hBUikweDJjKTsKKyAgICAgIGNhc2UgMHgw MDJkOiByZXR1cm4oKENIQVIpMHg1Zik7CisgICAgICBjYXNlIDB4MDAyZTogcmV0dXJuKChDSEFS KTB4MmUpOworICAgICAgY2FzZSAweDAwMmY6IHJldHVybigoQ0hBUikweDJmKTsKKyAgICAgIGNh c2UgMHgwMDMwOiByZXR1cm4oKENIQVIpMHgzMCk7CisgICAgICBjYXNlIDB4MDAzMTogcmV0dXJu KChDSEFSKTB4MzEpOworICAgICAgY2FzZSAweDAwMzI6IHJldHVybigoQ0hBUikweDMyKTsKKyAg ICAgIGNhc2UgMHgwMDMzOiByZXR1cm4oKENIQVIpMHgzMyk7CisgICAgICBjYXNlIDB4MDAzNDog cmV0dXJuKChDSEFSKTB4MzQpOworICAgICAgY2FzZSAweDAwMzU6IHJldHVybigoQ0hBUikweDM1 KTsKKyAgICAgIGNhc2UgMHgwMDM2OiByZXR1cm4oKENIQVIpMHgzNik7CisgICAgICBjYXNlIDB4 MDAzNzogcmV0dXJuKChDSEFSKTB4MzcpOworICAgICAgY2FzZSAweDAwMzg6IHJldHVybigoQ0hB UikweDM4KTsKKyAgICAgIGNhc2UgMHgwMDM5OiByZXR1cm4oKENIQVIpMHgzOSk7CisgICAgICBj YXNlIDB4MDAzYTogcmV0dXJuKChDSEFSKTB4M2UpOworICAgICAgY2FzZSAweDAwM2I6IHJldHVy bigoQ0hBUikweDNjKTsKKyAgICAgIGNhc2UgMHgwMDNjOiByZXR1cm4oKENIQVIpMHgyMyk7Cisg ICAgICBjYXNlIDB4MDAzZDogcmV0dXJuKChDSEFSKTB4MjUpOworICAgICAgY2FzZSAweDAwM2U6 IHJldHVybigoQ0hBUikweDI2KTsKKyAgICAgIGNhc2UgMHgwMDNmOiByZXR1cm4oKENIQVIpMHg1 MSk7CisgICAgICBjYXNlIDB4MDA1YjogcmV0dXJuKChDSEFSKTB4M2IpOworICAgICAgY2FzZSAw eDAwNWM6IHJldHVybigoQ0hBUikweDNmKTsKKyAgICAgIGNhc2UgMHgwMDVkOiByZXR1cm4oKENI QVIpMHgyNyk7CisgICAgICBjYXNlIDB4MDA1ZjogcmV0dXJuKChDSEFSKTB4NDYpOworICAgICAg Y2FzZSAweDAwN2I6IHJldHVybigoQ0hBUikweDdiKTsKKyAgICAgIGNhc2UgMHgwMDdjOiByZXR1 cm4oKENIQVIpMHg0ZCk7CisgICAgICBjYXNlIDB4MDA3ZDogcmV0dXJuKChDSEFSKTB4N2QpOwor ICAgICAgY2FzZSAweDAwYTg6IHJldHVybigoQ0hBUikweDIxKTsKKyAgICAgIGNhc2UgMHgwMGFm OiByZXR1cm4oKENIQVIpMHg0MCk7CisgICAgICBjYXNlIDB4MDBkNzogcmV0dXJuKChDSEFSKTB4 M2QpOworICAgICAgY2FzZSAweDAwZjc6IHJldHVybigoQ0hBUikweDJiKTsKKyAgICAgIGNhc2Ug MHgyMTkwOiByZXR1cm4oKENIQVIpMHg1Yik7CisgICAgICBjYXNlIDB4MjE5MTogcmV0dXJuKChD SEFSKTB4NTkpOworICAgICAgY2FzZSAweDIxOTI6IHJldHVybigoQ0hBUikweDVkKTsKKyAgICAg IGNhc2UgMHgyMTkzOiByZXR1cm4oKENIQVIpMHg1NSk7CisgICAgICBjYXNlIDB4MjIwNjogcmV0 dXJuKChDSEFSKTB4NDgpOworICAgICAgY2FzZSAweDIyMDc6IHJldHVybigoQ0hBUikweDQ3KTsK KyAgICAgIGNhc2UgMHgyMjBhOiByZXR1cm4oKENIQVIpMHg0NSk7CisgICAgICBjYXNlIDB4MjIx ODogcmV0dXJuKChDSEFSKTB4NGEpOworICAgICAgY2FzZSAweDIyMjc6IHJldHVybigoQ0hBUikw eDI5KTsKKyAgICAgIGNhc2UgMHgyMjI4OiByZXR1cm4oKENIQVIpMHgyOCk7CisgICAgICBjYXNl IDB4MjIyYTogcmV0dXJuKChDSEFSKTB4NTYpOworICAgICAgY2FzZSAweDIyM2M6IHJldHVybigo Q0hBUikweDU0KTsKKyAgICAgIGNhc2UgMHgyMjYwOiByZXR1cm4oKENIQVIpMHgyYSk7CisgICAg ICBjYXNlIDB4MjI2NDogcmV0dXJuKChDSEFSKTB4MjQpOworICAgICAgY2FzZSAweDIyNjU6IHJl dHVybigoQ0hBUikweDVlKTsKKyAgICAgIGNhc2UgMHgyMjgyOiByZXR1cm4oKENIQVIpMHg1YSk7 CisgICAgICBjYXNlIDB4MjI4MzogcmV0dXJuKChDSEFSKTB4NTgpOworICAgICAgY2FzZSAweDIy YTI6IHJldHVybigoQ0hBUikweDVjKTsKKyAgICAgIGNhc2UgMHgyMmEzOiByZXR1cm4oKENIQVIp MHg3Yyk7CisgICAgICBjYXNlIDB4MjJhNDogcmV0dXJuKChDSEFSKTB4NGUpOworICAgICAgY2Fz ZSAweDIyYTU6IHJldHVybigoQ0hBUikweDQyKTsKKyAgICAgIGNhc2UgMHgyMmMyOiByZXR1cm4o KENIQVIpMHg0Myk7CisgICAgICBjYXNlIDB4MjJjNDogcmV0dXJuKChDSEFSKTB4NjApOworICAg ICAgY2FzZSAweDIyYzY6IHJldHVybigoQ0hBUikweDUwKTsKKyAgICAgIGNhc2UgMHgyMzA4OiBy ZXR1cm4oKENIQVIpMHg1Myk7CisgICAgICBjYXNlIDB4MjMwYTogcmV0dXJuKChDSEFSKTB4NDQp OworICAgICAgY2FzZSAweDIzNzM6IHJldHVybigoQ0hBUikweDQ5KTsKKyAgICAgIGNhc2UgMHgy Mzc0OiByZXR1cm4oKENIQVIpMHg1Mik7CisgICAgICBjYXNlIDB4MjM3NTogcmV0dXJuKChDSEFS KTB4NTcpOworICAgICAgY2FzZSAweDIzN2E6IHJldHVybigoQ0hBUikweDQxKTsKKyAgICAgIGNh c2UgMHgyNWFmOiByZXR1cm4oKENIQVIpMHg0Yyk7CisgICAgICBjYXNlIDB4MjVjYjogcmV0dXJu KChDSEFSKTB4NGYpOworICAgICAgZGVmYXVsdDogICByZXR1cm4odHhfdXNhc2NpaShjKSk7Cisg ICAgfQorfQorCitpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2Fu YWRpYW4gRnJlbmNoICovCisjaWZkZWYgQ0tfQU5TSUMKK3R4X2ZyX2NhbmFkaWFuKFVTSE9SVCBj KQorI2Vsc2UKK3R4X2ZyX2NhbmFkaWFuKGMpIFVTSE9SVCBjOworI2VuZGlmIC8qIENLX0FOU0lD ICovCit7CisgICAgaWYgKGMgJiAweGZmMDApICAgICAgICAgICAgICAgICAgICAgLyogT3V0IG9m IHJhbmdlICovCisgICAgICByZXR1cm4oLTEpOworICAgIHN3aXRjaChjKSB7CisgICAgICBjYXNl IDB4ZTA6IHJldHVybigweDQwKTsgICAgICAgICAgLyogYSBncmF2ZSAqLworICAgICAgY2FzZSAw eGUyOiByZXR1cm4oMHg1Yik7ICAgICAgICAgIC8qIGEgY2lyY3VtZmxleCAqLworICAgICAgY2Fz ZSAweGU3OiByZXR1cm4oMHg1Yyk7ICAgICAgICAgIC8qIGMgY2VkaWxsYSAqLworICAgICAgY2Fz ZSAweGU4OiByZXR1cm4oMHg3ZCk7ICAgICAgICAgIC8qIGUgZ3JhdmUgKi8KKyAgICAgIGNhc2Ug MHhlOTogcmV0dXJuKDB4N2IpOyAgICAgICAgICAvKiBlIGFjdXRlICovCisgICAgICBjYXNlIDB4 ZWE6IHJldHVybigweDVkKTsgICAgICAgICAgLyogZSBjaXJjdW1mbGV4ICovCisgICAgICBjYXNl IDB4ZWU6IHJldHVybigweDVlKTsgICAgICAgICAgLyogaSBjaXJjdW1mbGV4ICovCisgICAgICBj YXNlIDB4ZjQ6IHJldHVybigweDYwKTsgICAgICAgICAgLyogbyBjaXJjdW1mbGV4ICovCisgICAg ICBjYXNlIDB4Zjk6IHJldHVybigweDdjKTsgICAgICAgICAgLyogdSBncmF2ZSAqLworICAgICAg Y2FzZSAweGZiOiByZXR1cm4oMHg2ZSk7ICAgICAgICAgIC8qIHUgY2lyY3VtZmxleCAqLworICAg ICAgZGVmYXVsdDogICByZXR1cm4odHhfdXNhc2NpaShjKSk7CisgICAgfQorfQorCitpbnQgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRGFuaXNoL05vcndlZ2lhbiAqLwor I2lmZGVmIENLX0FOU0lDCit0eF9kYW5pc2goVVNIT1JUIGMpCisjZWxzZQordHhfZGFuaXNoKGMp IFVTSE9SVCBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgaWYgKGMgJiAweGZmMDAp ICAgICAgICAgICAgICAgICAgICAgLyogT3V0IG9mIHJhbmdlICovCisgICAgICByZXR1cm4oLTEp OworICAgIHN3aXRjaChjKSB7CisgICAgICBjYXNlIDB4YzY6IHJldHVybigweDViKTsgICAgICAg ICAgLyogQUUgKi8KKyAgICAgIGNhc2UgMHhkODogcmV0dXJuKDB4NWMpOyAgICAgICAgICAvKiBP IHN0cm9rZSAqLworICAgICAgY2FzZSAweGU2OiByZXR1cm4oMHg3Yik7ICAgICAgICAgIC8qIGFl ICovCisgICAgICBjYXNlIDB4Zjg6IHJldHVybigweDdjKTsgICAgICAgICAgLyogbyBzdHJva2Ug Ki8KKyAgICAgIGNhc2UgMHhlNTogcmV0dXJuKDB4N2QpOyAgICAgICAgICAvKiBhIHJpbmcgKi8K KyAgICAgIGNhc2UgMHhhZjogcmV0dXJuKDB4N2UpOyAgICAgICAgICAvKiBtYWNyb24gKi8KKyAg ICAgIGRlZmF1bHQ6ICAgcmV0dXJuKHR4X3VzYXNjaWkoYykpOworICAgIH0KK30KKworaW50ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIER1dGNoICovCisjaWZkZWYgQ0tf QU5TSUMKK3R4X2R1dGNoKFVTSE9SVCBjKQorI2Vsc2UKK3R4X2R1dGNoKGMpIFVTSE9SVCBjOwor I2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgaWYgKGMgJiAweGZlMDApICAgICAgICAgICAg ICAgICAgICAgLyogT3V0IG9mIHJhbmdlICovCisgICAgICByZXR1cm4oLTEpOworICAgIHN3aXRj aChjKSB7CisgICAgICBjYXNlIDB4MDA3YzogcmV0dXJuKDB4NWQpOyAgICAgICAgLyogdmVydGlj YWwgYmFyICovCisgICAgICBjYXNlIDB4MDBhMzogcmV0dXJuKDB4MjMpOyAgICAgICAgLyogcG91 bmQgc2lnbiAqLworICAgICAgY2FzZSAweDAwYWI6IHJldHVybigweDdiKTsgICAgICAgIC8qIGRp YWVyZXNpcyAqLworICAgICAgY2FzZSAweDAwYjQ6IHJldHVybigweDdlKTsgICAgICAgIC8qIGFj dXRlIGFjY2VudCAqLworICAgICAgY2FzZSAweDAwYmM6IHJldHVybigweDdkKTsgICAgICAgIC8q IDEvNCAqLworICAgICAgY2FzZSAweDAwYmU6IHJldHVybigweDQwKTsgICAgICAgIC8qIDMvNCAq LworICAgICAgY2FzZSAweDAwYmQ6IHJldHVybigweDVjKTsgICAgICAgIC8qIDEvMiAqLworICAg ICAgY2FzZSAweDAwZmY6IHJldHVybigweDViKTsgICAgICAgIC8qIHkgZGlhZXJlc2lzIChpaikg Ki8KKyAgICAgIGNhc2UgMHgwMTkyOiByZXR1cm4oMHg3Yyk7ICAgICAgICAvKiBGbG9yaW4gKi8K KyAgICAgIGRlZmF1bHQ6ICAgcmV0dXJuKChjICYgMHg4MCkgPyAtMSA6IChDSEFSKShjICYgMHg3 ZikpOworICAgIH0KK30KKworaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIEZpbm5pc2ggKi8KKyNpZmRlZiBDS19BTlNJQwordHhfZmlubmlzaChVU0hPUlQgYykKKyNl bHNlCit0eF9maW5uaXNoKGMpIFVTSE9SVCBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7Cisg ICAgaWYgKGMgJiAweGZmMDApICAgICAgICAgICAgICAgICAgICAgLyogT3V0IG9mIHJhbmdlICov CisgICAgICByZXR1cm4oLTEpOworICAgIHN3aXRjaChjKSB7CisgICAgICBjYXNlIDB4YzQ6IHJl dHVybigweDViKTsgICAgICAgICAgLyogQSBkaWFlcmVzaXMgKi8KKyAgICAgIGNhc2UgMHhkNjog cmV0dXJuKDB4NWMpOyAgICAgICAgICAvKiBPIGRpYWVyZXNpcyAqLworICAgICAgY2FzZSAweGM1 OiByZXR1cm4oMHg1ZCk7ICAgICAgICAgIC8qIEEgcmluZyAqLworICAgICAgY2FzZSAweGRjOiBy ZXR1cm4oMHg1ZSk7ICAgICAgICAgIC8qIFUgZGlhZXJlc2lzICovCisgICAgICBjYXNlIDB4ZTk6 IHJldHVybigweDYwKTsgICAgICAgICAgLyogZSBhY3V0ZSAqLworICAgICAgY2FzZSAweGU0OiBy ZXR1cm4oMHg3Yik7ICAgICAgICAgIC8qIGEgZGlhZXJlc2lzICovCisgICAgICBjYXNlIDB4ZjY6 IHJldHVybigweDdjKTsgICAgICAgICAgLyogbyBkaWFlcmVzaXMgKi8KKyAgICAgIGNhc2UgMHhl NTogcmV0dXJuKDB4N2QpOyAgICAgICAgICAvKiBhIHJpbmcgKi8KKyAgICAgIGNhc2UgMHhmYzog cmV0dXJuKDB4N2UpOyAgICAgICAgICAvKiB1IGRpYWVyZXNpcyAqLworICAgICAgZGVmYXVsdDog ICByZXR1cm4odHhfdXNhc2NpaShjKSk7CisgICAgfQorfQorCitpbnQgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogRnJlbmNoICovCisjaWZkZWYgQ0tfQU5TSUMKK3R4X2Zy ZW5jaChVU0hPUlQgYykKKyNlbHNlCit0eF9mcmVuY2goYykgVVNIT1JUIGM7CisjZW5kaWYgLyog Q0tfQU5TSUMgKi8KK3sKKyAgICBpZiAoYyAmIDB4ZmYwMCkgICAgICAgICAgICAgICAgICAgICAv KiBPdXQgb2YgcmFuZ2UgKi8KKyAgICAgIHJldHVybigtMSk7CisgICAgc3dpdGNoKGMpIHsKKyAg ICAgIGNhc2UgMHhhMzogcmV0dXJuKDB4MjMpOyAgICAgICAgICAvKiBwb3VuZCBzaWduICovCisg ICAgICBjYXNlIDB4YTc6IHJldHVybigweDVkKTsgICAgICAgICAgLyogc2VjdGlvbiBzaWduICov CisgICAgICBjYXNlIDB4YTg6IHJldHVybigweDdlKTsgICAgICAgICAgLyogZGlhZXJlc2lzICov CisgICAgICBjYXNlIDB4YjA6IHJldHVybigweDViKTsgICAgICAgICAgLyogcmluZyAqLworICAg ICAgY2FzZSAweGI1OiByZXR1cm4oMHg2MCk7ICAgICAgICAgIC8qIG1pY3JvbiBzaWduIChtdSkg Ki8KKyAgICAgIGNhc2UgMHhlMDogcmV0dXJuKDB4NDApOyAgICAgICAgICAvKiBhIGdyYXZlICov CisgICAgICBjYXNlIDB4ZTc6IHJldHVybigweDVjKTsgICAgICAgICAgLyogYyBjZWRpbGxhICov CisgICAgICBjYXNlIDB4ZTg6IHJldHVybigweDdkKTsgICAgICAgICAgLyogZSBncmF2ZSAqLwor ICAgICAgY2FzZSAweGU5OiByZXR1cm4oMHg3Yik7ICAgICAgICAgIC8qIGUgYWN1dGUgKi8KKyAg ICAgIGNhc2UgMHhmOTogcmV0dXJuKDB4N2MpOyAgICAgICAgICAvKiB1IGdyYXZlICovCisgICAg ICBkZWZhdWx0OiAgIHJldHVybih0eF91c2FzY2lpKGMpKTsKKyAgICB9Cit9CisKK2ludCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBHZXJtYW4gKi8KKyNpZmRlZiBDS19B TlNJQwordHhfZ2VybWFuKFVTSE9SVCBjKQorI2Vsc2UKK3R4X2dlcm1hbihjKSBVU0hPUlQgYzsK KyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworICAgIGlmIChjICYgMHhmZjAwKSAgICAgICAgICAg ICAgICAgICAgIC8qIE91dCBvZiByYW5nZSAqLworICAgICAgcmV0dXJuKC0xKTsKKyAgICBzd2l0 Y2goYykgeworICAgICAgY2FzZSAweGE3OiByZXR1cm4oMHg0MCk7ICAgICAgICAgIC8qIHNlY3Rp b24gc2lnbiAqLworICAgICAgY2FzZSAweGM0OiByZXR1cm4oMHg1Yik7ICAgICAgICAgIC8qIEEg dW1sYXV0ICovCisgICAgICBjYXNlIDB4ZDY6IHJldHVybigweDVjKTsgICAgICAgICAgLyogTyB1 bWxhdXQgKi8KKyAgICAgIGNhc2UgMHhkYzogcmV0dXJuKDB4NWQpOyAgICAgICAgICAvKiBVIHVt bGF1dCAqLworICAgICAgY2FzZSAweGRmOiByZXR1cm4oMHg3ZSk7ICAgICAgICAgIC8qIGVzcy16 ZXQgKi8KKyAgICAgIGNhc2UgMHhlNDogcmV0dXJuKDB4N2IpOyAgICAgICAgICAvKiBhIHVtbGF1 dCAqLworICAgICAgY2FzZSAweGY2OiByZXR1cm4oMHg3Yyk7ICAgICAgICAgIC8qIG8gdW1sYXV0 ICovCisgICAgICBjYXNlIDB4ZmM6IHJldHVybigweDdkKTsgICAgICAgICAgLyogdSB1bWxhdXQq LworICAgICAgZGVmYXVsdDogICByZXR1cm4odHhfdXNhc2NpaShjKSk7CisgICAgfQorfQorCitp bnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSGVicmV3LTcgKi8KKyNp ZmRlZiBDS19BTlNJQwordHhfaGVicmV3NyhVU0hPUlQgYykKKyNlbHNlCit0eF9oZWJyZXc3KGMp IFVTSE9SVCBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgaWYgKGMgPCAweDYwKSAg ICAgICAgICAgICAgICAgICAgICAgLyogQVNDSUkgKi8KKyAgICAgIHJldHVybigoQ0hBUikoYyAm IDB4N2YpKTsKKyAgICBlbHNlIGlmIChjID49IDEyMyAmJiBjIDwgMTI4KSAgICAgICAvKiBBU0NJ SSAqLworICAgICAgcmV0dXJuKChDSEFSKShjICYgMHg3ZikpOworICAgIGVsc2UgaWYgKGMgPj0g MHgwNWQwICYmIGMgPD0gMHgwNWVhKSAvKiBIZWJyZXcgMjcgY29udGlndW91cyBjaGFyYWN0ZXJz ICovCisgICAgICByZXR1cm4oKENIQVIpKChpbnQpYyAtIDB4NWQwICsgOTYpKTsKKyAgICBlbHNl IHJldHVybigtMSk7Cit9CisKK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBHcmVlayBFTE9UIDkyNyAqLworI2lmZGVmIENLX0FOU0lDCit0eF9lbG90OTI3KFVTSE9S VCBjKQorI2Vsc2UKK3R4X2Vsb3Q5MjcoYykgVVNIT1JUIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMg Ki8KK3sKKyAgICBpZiAoYyA8PSAweDgwKSB7ICAgICAgICAgICAgICAgICAgICAvKiBBU0NJSSAq LworICAgICAgICBpZiAoaXNsb3dlcihjKSkgYyA9IHRvdXBwZXIoYyk7IC8qIFNlbmQgYWxsIGxl dHRlcnMgaW4gdXBwZXJjYXNlICovCisgICAgICAgIHJldHVybigoQ0hBUikoYyAmIDB4N2YpKTsK KyAgICB9CisKKy8qIEdyZWVrIC0tIG1hcCBhbGwgR3JlZWsgY2hhcmFjdGVycyB0byB1bmFjY2Vu dGVkIHVwcGVyY2FzZSAqLworCisgICAgaWYgKGMgPj0gMHgwMzkxICYmIGMgPD0gMHgwM2ExKSAv KiBBbHBoYSB0aHJ1IFJobyAtIHVwcGVyY2FzZSAqLworICAgICAgcmV0dXJuKChDSEFSKSgoaW50 KWMgLSAweDAzOTEgKyA5NykpOworICAgIGVsc2UgaWYgKGMgPj0gMHgwM2EzICYmIGMgPD0gMHgw M2E5KSAvKiBTaWdtYSB0aHJ1IE9tZWdhIC0gdXBwZXJjYXNlICovCisgICAgICByZXR1cm4oKENI QVIpKChpbnQpYyAtIDB4MDM5MSArIDk2KSk7CisgICAgZWxzZSBpZiAoYyA+PSAweDAzYjEgJiYg YyA8PSAweDAzYzEpIC8qIEFscGhhIHRocnUgUmhvIC0gbG93ZXJjYXNlICovCisgICAgICByZXR1 cm4oKENIQVIpKChpbnQpYyAtIDB4MDM5MSArIDk3KSk7CisgICAgZWxzZSBpZiAoYyA+PSAweDAz YzMgJiYgYyA8PSAweDAzYzkpIC8qIFNpZ21hIHRocnUgT21lZ2EgLSB1cHBlcmNhc2UgKi8KKyAg ICAgIHJldHVybigoQ0hBUikoKGludCljIC0gMHgwMzkxICsgOTYpKTsKKyAgICBzd2l0Y2ggKGMp IHsKKyAgICAgIGNhc2UgMHgwM2MyOiByZXR1cm4oKENIQVIpMTE0KTsgICAvKiBUZXJtaW5hbCBz aWdtYSAqLworICAgICAgY2FzZSAweDAzODY6IHJldHVybigoQ0hBUik5Nyk7ICAgIC8qIEFscGhh IFRvbm9zICovCisgICAgICBjYXNlIDB4MDNhYzogcmV0dXJuKChDSEFSKTk3KTsgICAgLyogYWxw aGEgVG9ub3MgKi8KKyAgICAgIGNhc2UgMHgwMzg4OiByZXR1cm4oKENIQVIpMTAxKTsgICAvKiBF cHNpbG9uIFRvbm9zICovCisgICAgICBjYXNlIDB4MDNhZDogcmV0dXJuKChDSEFSKTEwMSk7ICAg LyogZXBzaWxvbiBUb25vcyAqLworICAgICAgY2FzZSAweDAzODk6IHJldHVybigoQ0hBUikxMDMp OyAgIC8qIEV0YSBUb25vcyAqLworICAgICAgY2FzZSAweDAzYWU6IHJldHVybigoQ0hBUikxMDMp OyAgIC8qIGV0YSBUb25vcyAqLworICAgICAgY2FzZSAweDAzOGE6IHJldHVybigoQ0hBUikxMDUp OyAgIC8qIElvdGEgVG9ub3MgKi8KKyAgICAgIGNhc2UgMHgwM2FmOiByZXR1cm4oKENIQVIpMTA1 KTsgICAvKiBpb3RhIFRvbm9zICovCisgICAgICBjYXNlIDB4MDNjYTogcmV0dXJuKChDSEFSKTEw NSk7ICAgLyogaW90YSBEaWFseXRpa2EgKi8KKyAgICAgIGNhc2UgMHgwMzhjOiByZXR1cm4oKENI QVIpMTExKTsgICAvKiBPbWljcm9uIFRvbm9zICovCisgICAgICBjYXNlIDB4MDNjYzogcmV0dXJu KChDSEFSKTExMSk7ICAgLyogb21pY3JvbiBUb25vcyAqLworICAgICAgY2FzZSAweDAzOGU6IHJl dHVybigoQ0hBUikxMTYpOyAgIC8qIFVwc2lsb24gVG9ub3MgKi8KKyAgICAgIGNhc2UgMHgwM2Qz OiByZXR1cm4oKENIQVIpMTE2KTsgICAvKiBVcHNpbG9uIFRvbm9zICovCisgICAgICBjYXNlIDB4 MDNjZDogcmV0dXJuKChDSEFSKTExNik7ICAgLyogdXBzaWxvbiBUb25vcyAqLworICAgICAgY2Fz ZSAweDAzY2I6IHJldHVybigoQ0hBUikxMTYpOyAgIC8qIHVwc2lsb24gRGlhbHl0aWthICovCisg ICAgICBjYXNlIDB4MDNiMDogcmV0dXJuKChDSEFSKTExNik7ICAgLyogdXBzaWxvbiBEaWFseXRp a2ErVG9ub3MgKi8KKyAgICAgIGNhc2UgMHgwMzhmOiByZXR1cm4oKENIQVIpMTIwKTsgICAvKiBP bWVnYSBUb25vcyAqLworICAgICAgY2FzZSAweDAzY2U6IHJldHVybigoQ0hBUikxMjApOyAgIC8q IG9tZWdhIFRvbm9zICovCisgICAgICBjYXNlIDB4MDM5MDogcmV0dXJuKChDSEFSKTEwNSk7ICAg LyogaW90YSBEaWFseXRpa2ErVG9ub3MgKi8KKyAgICAgIGNhc2UgMHgwM2FhOiByZXR1cm4oKENI QVIpMTA1KTsgICAvKiBJb3RhIERpYWx5dGlrYSAqLworICAgICAgY2FzZSAweDAzYWI6IHJldHVy bigoQ0hBUikxMTYpOyAgIC8qIFVwc2lsb24gRGlhbHl0aWthICovCisgICAgICBjYXNlIDB4MDNk NDogcmV0dXJuKChDSEFSKTExNik7ICAgLyogVXBzaWxvbiBEaWFseXRpa2EgKi8KKyAgICAgIGNh c2UgMHgwM2QwOiByZXR1cm4oKENIQVIpOTgpOyAgICAvKiBBbHRlcm5hdGl2ZSBiZXRhICovCisg ICAgICBjYXNlIDB4MDNkMTogcmV0dXJuKChDSEFSKTEwNCk7ICAgLyogT3BlbiB0aGV0YSAqLwor ICAgICAgY2FzZSAweDAzZDU6IHJldHVybigoQ0hBUikxMTcpOyAgIC8qIE9wZW4gcGhpICovCisg ICAgICBjYXNlIDB4MDNkNjogcmV0dXJuKChDSEFSKTExMik7ICAgLyogQWx0ZXJuYXRpdmUgUGkg Ki8KKyAgICAgIGRlZmF1bHQ6IHJldHVybigtMSk7CisgICAgfQorfQorCitpbnQgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSHVuZ2FyaWFuICovCisjaWZkZWYgQ0tfQU5T SUMKK3R4X2h1bmdhcmlhbihVU0hPUlQgYykKKyNlbHNlCit0eF9odW5nYXJpYW4oYykgVVNIT1JU IGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAgICBpZiAoYyA9PSAweDAyZGQgfHwgYyA9 PSAweDIwMzMpCisgICAgICByZXR1cm4oMHg3ZSk7ICAgICAgICAgICAgICAgICAgICAgLyogZG91 YmxlIGFjdXRlIGFjY2VudCAqLworICAgIGVsc2UgaWYgKGMgJiAweGZmMDApICAgICAgICAgICAg ICAgIC8qIE91dCBvZiByYW5nZSAqLworICAgICAgcmV0dXJuKC0xKTsKKyAgICBzd2l0Y2goYykg eworICAgICAgY2FzZSAweGMxOiByZXR1cm4oMHg0MCk7ICAgICAgICAgIC8qIEEgYWN1dGUgKi8K KyAgICAgIGNhc2UgMHhjOTogcmV0dXJuKDB4NWIpOyAgICAgICAgICAvKiBFIGFjdXRlICovCisg ICAgICBjYXNlIDB4ZDY6IHJldHVybigweDVjKTsgICAgICAgICAgLyogTyB1bWxhdXQgKi8KKyAg ICAgIGNhc2UgMHhkYzogcmV0dXJuKDB4NWQpOyAgICAgICAgICAvKiBVIHVtbGF1dCAqLworICAg ICAgY2FzZSAweGU5OiByZXR1cm4oMHg3Yik7ICAgICAgICAgIC8qIGUgYWN1dGUgKi8KKyAgICAg IGNhc2UgMHhmNjogcmV0dXJuKDB4N2MpOyAgICAgICAgICAvKiBvIHVtbGF1dCAqLworICAgICAg Y2FzZSAweGZhOiByZXR1cm4oMHg2MCk7ICAgICAgICAgIC8qIHUgYWN1dGUgKi8KKyAgICAgIGNh c2UgMHhmYzogcmV0dXJuKDB4N2QpOyAgICAgICAgICAvKiB1IHVtbGF1dCAqLworICAgICAgZGVm YXVsdDogICByZXR1cm4odHhfdXNhc2NpaShjKSk7CisgICAgfQorfQorCitpbnQgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSWNlbGFuZGljICovCisjaWZkZWYgQ0tfQU5T SUMKK3R4X2ljZWxhbmRpYyhVU0hPUlQgYykKKyNlbHNlCit0eF9pY2VsYW5kaWMoYykgVVNIT1JU IGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAgICBpZiAoYyAmIDB4ZmYwMCkgICAgICAg ICAgICAgICAgICAgICAvKiBPdXQgb2YgcmFuZ2UgKi8KKyAgICAgIHJldHVybigtMSk7CisgICAg c3dpdGNoKGMpIHsKKyAgICAgIGNhc2UgMHhkZTogcmV0dXJuKDB4NDApOyAgICAgICAgICAvKiBU aG9ybiAqLworICAgICAgY2FzZSAweGQwOiByZXR1cm4oMHg1Yik7ICAgICAgICAgIC8qIEV0aCAq LworICAgICAgY2FzZSAweGM2OiByZXR1cm4oMHg1ZCk7ICAgICAgICAgIC8qIEFFICovCisgICAg ICBjYXNlIDB4ZDY6IHJldHVybigweDVlKTsgICAgICAgICAgLyogTyB1bWxhdXQgKi8KKyAgICAg IGNhc2UgMHhmZTogcmV0dXJuKDB4NjApOyAgICAgICAgICAvKiB0aG9ybiAqLworICAgICAgY2Fz ZSAweGYwOiByZXR1cm4oMHg3Yik7ICAgICAgICAgIC8qIGV0aCAqLworICAgICAgY2FzZSAweGU2 OiByZXR1cm4oMHg3ZCk7ICAgICAgICAgIC8qIGFlICovCisgICAgICBjYXNlIDB4ZjY6IHJldHVy bigweDdlKTsgICAgICAgICAgLyogbyB1bWxhdXQgKi8KKyAgICAgIGRlZmF1bHQ6ICAgcmV0dXJu KHR4X3VzYXNjaWkoYykpOworICAgIH0KK30KKworaW50ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIEl0YWxpYW4gKi8KKyNpZmRlZiBDS19BTlNJQwordHhfaXRhbGlhbihV U0hPUlQgYykKKyNlbHNlCit0eF9pdGFsaWFuKGMpIFVTSE9SVCBjOworI2VuZGlmIC8qIENLX0FO U0lDICovCit7CisgICAgaWYgKGMgJiAweGZmMDApICAgICAgICAgICAgICAgICAgICAgLyogT3V0 IG9mIHJhbmdlICovCisgICAgICByZXR1cm4oLTEpOworICAgIHN3aXRjaChjKSB7CisgICAgICBj YXNlIDB4YTM6IHJldHVybigweDIzKTsgICAgICAgICAgLyogcG91bmQgc2lnbiAqLworICAgICAg Y2FzZSAweGE3OiByZXR1cm4oMHg0MCk7ICAgICAgICAgIC8qIHNlY3Rpb24gc2lnbiAqLworICAg ICAgY2FzZSAweGIwOiByZXR1cm4oMHg1Yik7ICAgICAgICAgIC8qIHJpbmcgKi8KKyAgICAgIGNh c2UgMHhlNzogcmV0dXJuKDB4NWMpOyAgICAgICAgICAvKiBjIGNlZGlsbGEgKi8KKyAgICAgIGNh c2UgMHhlOTogcmV0dXJuKDB4NWQpOyAgICAgICAgICAvKiBlIGFjdXRlICovCisgICAgICBjYXNl IDB4Zjk6IHJldHVybigweDYwKTsgICAgICAgICAgLyogdSBncmF2ZSAqLworICAgICAgY2FzZSAw eGUwOiByZXR1cm4oMHg3Yik7ICAgICAgICAgIC8qIGEgZ3JhdmUgKi8KKyAgICAgIGNhc2UgMHhm MjogcmV0dXJuKDB4N2MpOyAgICAgICAgICAvKiBvIGdyYXZlICovCisgICAgICBjYXNlIDB4ZTg6 IHJldHVybigweDdkKTsgICAgICAgICAgLyogZSBncmF2ZSAqLworICAgICAgY2FzZSAweGVjOiBy ZXR1cm4oMHg3ZSk7ICAgICAgICAgIC8qIGkgZ3JhdmUgKi8KKyAgICAgIGRlZmF1bHQ6ICAgcmV0 dXJuKHR4X3VzYXNjaWkoYykpOworICAgIH0KK30KKworaW50ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIEpJUyAwMjAxIFJvbWFuICovCisjaWZkZWYgQ0tfQU5TSUMKK3R4 X2ppczAyMDFyKFVTSE9SVCBjKQorI2Vsc2UKK3R4X2ppczAyMDFyKGMpIFVTSE9SVCBjOworI2Vu ZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgaWYgKGMgJiYgMHhmZjgwKSAgICAgICAgICAgICAg ICAgICAgLyogNyBiaXRzICovCisgICAgICByZXR1cm4oLTEpOworICAgIHN3aXRjaCAoYykgeyAg ICAgICAgICAgICAgICAgICAgICAgIC8qIExpa2UgQVNDSUkgd2l0aCAqLworICAgICAgY2FzZSAw eDAwYTU6IHJldHVybig5Mik7ICAgICAgICAgIC8qIHR3byBleGNlcHRpb25zICovCisgICAgICBj YXNlIDB4MDBhZjogcmV0dXJuKDEyNik7CisgICAgICBjYXNlIDB4MjAzZTogcmV0dXJuKDEyNik7 CisgICAgICBkZWZhdWx0OiAgIHJldHVybih0eF91c2FzY2lpKGMpKTsKKyAgICB9Cit9CisKK2lu dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBKSVMgMDIwMSBLYXRha2Fu YSAqLworI2lmZGVmIENLX0FOU0lDCit0eF9qaXMwMjAxayhVU0hPUlQgYykKKyNlbHNlCit0eF9q aXMwMjAxayhjKSBVU0hPUlQgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworICAgIGlmIChj IDwgMHhmZjYxIHx8IGMgPiAweGZmOWYpCisgICAgICByZXR1cm4oLTEpOyAgICAgICAgICAgICAg ICAgICAgICAgLyogT3V0IG9mIHJhbmdlICovCisgICAgZWxzZQorICAgICAgcmV0dXJuKChpbnQp YyAtIDB4ZmVjMCk7ICAgICAgICAgIC8qIDB4ZmY2MSAtIGEwID0gMHhmZWMwICovCit9CisKK2lu dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTaG9ydCBLT0kgKi8KKyNp ZmRlZiBDS19BTlNJQwordHhfa29pNyhVU0hPUlQgYykKKyNlbHNlCit0eF9rb2k3KGMpIFVTSE9S VCBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgaWYgKGMgPCAweDUwKQorICAgICAg cmV0dXJuKChDSEFSKShjICYgMHg3ZikpOworICAgIGVsc2UgaWYgKGMgPiAweDdmKQorICAgICAg cmV0dXJuKC0xKTsgICAgICAgICAgICAgICAgICAgICAgIC8qIE91dCBvZiByYW5nZSAqLworICAg IHN3aXRjaChjKSB7CisgICAgICBjYXNlIDB4MDQxMDogcmV0dXJuKChDSEFSKTk3KTsKKyAgICAg IGNhc2UgMHgwNDExOiByZXR1cm4oKENIQVIpOTgpOworICAgICAgY2FzZSAweDA0MTI6IHJldHVy bigoQ0hBUikxMTkpOworICAgICAgY2FzZSAweDA0MTM6IHJldHVybigoQ0hBUikxMDMpOworICAg ICAgY2FzZSAweDA0MTQ6IHJldHVybigoQ0hBUikxMDApOworICAgICAgY2FzZSAweDA0MTU6IHJl dHVybigoQ0hBUikxMDEpOworICAgICAgY2FzZSAweDA0MTY6IHJldHVybigoQ0hBUikxMTgpOwor ICAgICAgY2FzZSAweDA0MTc6IHJldHVybigoQ0hBUikxMjIpOworICAgICAgY2FzZSAweDA0MTg6 IHJldHVybigoQ0hBUikxMDUpOworICAgICAgY2FzZSAweDA0MTk6IHJldHVybigoQ0hBUikxMDYp OworICAgICAgY2FzZSAweDA0MWE6IHJldHVybigoQ0hBUikxMDcpOworICAgICAgY2FzZSAweDA0 MWI6IHJldHVybigoQ0hBUikxMDgpOworICAgICAgY2FzZSAweDA0MWM6IHJldHVybigoQ0hBUikx MDkpOworICAgICAgY2FzZSAweDA0MWQ6IHJldHVybigoQ0hBUikxMTApOworICAgICAgY2FzZSAw eDA0MWU6IHJldHVybigoQ0hBUikxMTEpOworICAgICAgY2FzZSAweDA0MWY6IHJldHVybigoQ0hB UikxMTIpOworICAgICAgY2FzZSAweDA0MjA6IHJldHVybigoQ0hBUikxMTQpOworICAgICAgY2Fz ZSAweDA0MjE6IHJldHVybigoQ0hBUikxMTUpOworICAgICAgY2FzZSAweDA0MjI6IHJldHVybigo Q0hBUikxMTYpOworICAgICAgY2FzZSAweDA0MjM6IHJldHVybigoQ0hBUikxMTcpOworICAgICAg Y2FzZSAweDA0MjQ6IHJldHVybigoQ0hBUikxMDIpOworICAgICAgY2FzZSAweDA0MjU6IHJldHVy bigoQ0hBUikxMDQpOworICAgICAgY2FzZSAweDA0MjY6IHJldHVybigoQ0hBUik5OSk7CisgICAg ICBjYXNlIDB4MDQyNzogcmV0dXJuKChDSEFSKTEyNik7CisgICAgICBjYXNlIDB4MDQyODogcmV0 dXJuKChDSEFSKTEyMyk7CisgICAgICBjYXNlIDB4MDQyOTogcmV0dXJuKChDSEFSKTEyNSk7Cisg ICAgICBjYXNlIDB4MDQyYjogcmV0dXJuKChDSEFSKTEyMSk7CisgICAgICBjYXNlIDB4MDQyYzog cmV0dXJuKChDSEFSKTEyMCk7CisgICAgICBjYXNlIDB4MDQyZDogcmV0dXJuKChDSEFSKTEyNCk7 CisgICAgICBjYXNlIDB4MDQyZTogcmV0dXJuKChDSEFSKTk2KTsKKyAgICAgIGNhc2UgMHgwNDJm OiByZXR1cm4oKENIQVIpMTEzKTsKKyAgICAgIGRlZmF1bHQ6IHJldHVybigtMSk7CisgICAgfQor fQorCitpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUG9ydHVndWVz ZSAqLworI2lmZGVmIENLX0FOU0lDCit0eF9wb3J0dWd1ZXNlKFVTSE9SVCBjKQorI2Vsc2UKK3R4 X3BvcnR1Z3Vlc2UoYykgVVNIT1JUIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAgICBp ZiAoYyAmIDB4ZmYwMCkgICAgICAgICAgICAgICAgICAgICAvKiBPdXQgb2YgcmFuZ2UgKi8KKyAg ICAgIHJldHVybigtMSk7CisgICAgc3dpdGNoKGMpIHsKKyAgICAgIGNhc2UgMHhlMDogcmV0dXJu KDB4YTcpOyAgICAgICAgICAvKiBzZWN0aW9uIHNpZ24gKi8KKyAgICAgIGNhc2UgMHhiMDogcmV0 dXJuKDB4YzMpOyAgICAgICAgICAvKiBBIHRpbGRlICovCisgICAgICBjYXNlIDB4ZTc6IHJldHVy bigweGM3KTsgICAgICAgICAgLyogQyBjZWRpbGxhICovCisgICAgICBjYXNlIDB4YTc6IHJldHVy bigweGQ1KTsgICAgICAgICAgLyogTyB0aWxkZSAqLworICAgICAgY2FzZSAweGU5OiByZXR1cm4o MHhlMyk7ICAgICAgICAgIC8qIGEgdGlsZGUgKi8KKyAgICAgIGNhc2UgMHhmOTogcmV0dXJuKDB4 ZTcpOyAgICAgICAgICAvKiBjIGNlZGlsbGEgKi8KKyAgICAgIGNhc2UgMHhlODogcmV0dXJuKDB4 ZjUpOyAgICAgICAgICAvKiBvIHRpbGRlICovCisgICAgICBjYXNlIDB4YTg6IHJldHVybigweGIw KTsgICAgICAgICAgLyogcmluZyAqLworICAgICAgZGVmYXVsdDogICByZXR1cm4odHhfdXNhc2Np aShjKSk7CisgICAgfQorfQorCitpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogU3BhbmlzaCAqLworI2lmZGVmIENLX0FOU0lDCit0eF9zcGFuaXNoKFVTSE9SVCBjKQor I2Vsc2UKK3R4X3NwYW5pc2goYykgVVNIT1JUIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sK KyAgICBpZiAoYyAmIDB4ZmYwMCkgICAgICAgICAgICAgICAgICAgICAvKiBPdXQgb2YgcmFuZ2Ug Ki8KKyAgICAgIHJldHVybigtMSk7CisgICAgc3dpdGNoKGMpIHsKKyAgICAgIGNhc2UgMHhhMzog cmV0dXJuKDB4MjMpOyAgICAgICAgICAvKiBwb3VuZCBzaWduICovCisgICAgICBjYXNlIDB4YTc6 IHJldHVybigweDQwKTsgICAgICAgICAgLyogc2VjdGlvbiAqLworICAgICAgY2FzZSAweGExOiBy ZXR1cm4oMHg1Yik7ICAgICAgICAgIC8qIGludmVydGVkIGV4Y2xhbWF0aW9uICovCisgICAgICBj YXNlIDB4ZDE6IHJldHVybigweDVjKTsgICAgICAgICAgLyogTiB0aWxkZSAqLworICAgICAgY2Fz ZSAweGJmOiByZXR1cm4oMHg1ZCk7ICAgICAgICAgIC8qIGludmVydGVkIHF1ZXN0aW9uIG1hcmsg Ki8KKyAgICAgIGNhc2UgMHhiMDogcmV0dXJuKDB4N2IpOyAgICAgICAgICAvKiByaW5nICovCisg ICAgICBjYXNlIDB4ZjE6IHJldHVybigweDdjKTsgICAgICAgICAgLyogbiB0aWxkZSAqLworICAg ICAgY2FzZSAweGU3OiByZXR1cm4oMHg3ZCk7ICAgICAgICAgIC8qIGMgY2VkaWxsYSAqLworICAg ICAgZGVmYXVsdDogICByZXR1cm4odHhfdXNhc2NpaShjKSk7CisgICAgfQorfQorCitpbnQgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU3dlZGlzaCAqLworI2lmZGVmIENL X0FOU0lDCit0eF9zd2VkaXNoKFVTSE9SVCBjKQorI2Vsc2UKK3R4X3N3ZWRpc2goYykgVVNIT1JU IGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAgICBpZiAoYyAmIDB4ZmYwMCkgICAgICAg ICAgICAgICAgICAgICAvKiBPdXQgb2YgcmFuZ2UgKi8KKyAgICAgIHJldHVybigtMSk7CisgICAg c3dpdGNoKGMpIHsKKyAgICAgIGNhc2UgMHhjOTogcmV0dXJuKDB4NDApOyAgICAgICAgICAvKiBF IGFjdXRlICovCisgICAgICBjYXNlIDB4YzQ6IHJldHVybigweDViKTsgICAgICAgICAgLyogQSB1 bWxhdXQqLworICAgICAgY2FzZSAweGQ2OiByZXR1cm4oMHg1Yyk7ICAgICAgICAgIC8qIE8gdW1s YXV0ICovCisgICAgICBjYXNlIDB4YzU6IHJldHVybigweDVkKTsgICAgICAgICAgLyogQSByaW5n ICovCisgICAgICBjYXNlIDB4ZGM6IHJldHVybigweDVlKTsgICAgICAgICAgLyogVSB1bWxhdXQg Ki8KKyAgICAgIGNhc2UgMHhlOTogcmV0dXJuKDB4NjApOyAgICAgICAgICAvKiBlIGFjdXRlICov CisgICAgICBjYXNlIDB4ZTQ6IHJldHVybigweDdiKTsgICAgICAgICAgLyogYSB1bWxhdXQgKi8K KyAgICAgIGNhc2UgMHhmNjogcmV0dXJuKDB4N2MpOyAgICAgICAgICAvKiBvIHVtbGF1dCAqLwor ICAgICAgY2FzZSAweGU1OiByZXR1cm4oMHg3ZCk7ICAgICAgICAgIC8qIGEgcmluZyAqLworICAg ICAgY2FzZSAweGZjOiByZXR1cm4oMHg3ZSk7ICAgICAgICAgIC8qIHUgdW1sYXV0ICovCisgICAg ICBkZWZhdWx0OiAgIHJldHVybih0eF91c2FzY2lpKGMpKTsKKyAgICB9Cit9CisKKworaW50ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFN3aXNzIE5SQyAqLworI2lmZGVm IENLX0FOU0lDCit0eF9zd2lzcyhVU0hPUlQgYykKKyNlbHNlCit0eF9zd2lzcyhjKSBVU0hPUlQg YzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworICAgIGlmIChjICYgMHhmZjAwKSAgICAgICAg ICAgICAgICAgICAgIC8qIE91dCBvZiByYW5nZSAqLworICAgICAgcmV0dXJuKC0xKTsKKyAgICBz d2l0Y2goYykgeworICAgICAgY2FzZSAweGY5OiByZXR1cm4oMHgyMyk7ICAgICAgICAgIC8qIHUg Z3JhdmUgKi8KKyAgICAgIGNhc2UgMHhlMDogcmV0dXJuKDB4NDApOyAgICAgICAgICAvKiBhIGdy YXZlICovCisgICAgICBjYXNlIDB4ZTk6IHJldHVybigweDViKTsgICAgICAgICAgLyogZSBhY3V0 ZSAqLworICAgICAgY2FzZSAweGU3OiByZXR1cm4oMHg1Yyk7ICAgICAgICAgIC8qIGMgY2VkaWxs YSAqLworICAgICAgY2FzZSAweGVhOiByZXR1cm4oMHg1ZCk7ICAgICAgICAgIC8qIGUgY2lyY3Vt ZmxleCAqLworICAgICAgY2FzZSAweGVlOiByZXR1cm4oMHg1ZSk7ICAgICAgICAgIC8qIGkgY2ly Y3VtZmxleCAqLworICAgICAgY2FzZSAweGU4OiByZXR1cm4oMHg1Zik7ICAgICAgICAgIC8qIGUg Z3JhdmUgKi8KKyAgICAgIGNhc2UgMHhmNDogcmV0dXJuKDB4NjApOyAgICAgICAgICAvKiBvIGNp cmN1bWZsZXggKi8KKyAgICAgIGNhc2UgMHhlNDogcmV0dXJuKDB4N2IpOyAgICAgICAgICAvKiBh IHVtbGF1dCAqLworICAgICAgY2FzZSAweGY2OiByZXR1cm4oMHg3Yyk7ICAgICAgICAgIC8qIG8g dW1sYXV0ICovCisgICAgICBjYXNlIDB4ZmM6IHJldHVybigweDdkKTsgICAgICAgICAgLyogdSB1 bWxhdXQgKi8KKyAgICAgIGNhc2UgMHhmYjogcmV0dXJuKDB4N2UpOyAgICAgICAgICAvKiB1IGNp cmN1bWZsZXggKi8KKyAgICAgIGRlZmF1bHQ6ICAgcmV0dXJuKHR4X3VzYXNjaWkoYykpOworICAg IH0KK30KKworaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIER5YWRp YyBBUEwgKi8KKyNpZmRlZiBDS19BTlNJQwordHhfYXBsMihVU0hPUlQgYykKKyNlbHNlCit0eF9h cGwyKGMpIFVTSE9SVCBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgaWYgKGMgPj0g MHgwMDQxICYmIGMgPD0gMHgwMDVhKSAgICAgLyogTGV0dGVycyAqLworICAgICAgcmV0dXJuKGMg LSAweGEyKTsKKyAgICBzd2l0Y2ggKGMpIHsKKyAgICAgIGNhc2UgMHgwMGEwOiByZXR1cm4oKENI QVIpMHhhMCk7CisgICAgICBjYXNlIDB4MDBhMjogcmV0dXJuKChDSEFSKTB4YTQpOworICAgICAg Y2FzZSAweDAwYTM6IHJldHVybigoQ0hBUikweGQ0KTsKKyAgICAgIGNhc2UgMHgwMGE4OiByZXR1 cm4oKENIQVIpMHhkYyk7CisgICAgICBjYXNlIDB4MDBhZjogcmV0dXJuKChDSEFSKTB4ZGEpOwor ICAgICAgY2FzZSAweDAwZDc6IHJldHVybigoQ0hBUikweGExKTsKKyAgICAgIGNhc2UgMHgwMGY3 OiByZXR1cm4oKENIQVIpMHhhZik7CisgICAgICBjYXNlIDB4MjE5MDogcmV0dXJuKChDSEFSKTB4 YmIpOworICAgICAgY2FzZSAweDIxOTE6IHJldHVybigoQ0hBUikweGZlKTsKKyAgICAgIGNhc2Ug MHgyMTkyOiByZXR1cm4oKENIQVIpMHhkZSk7CisgICAgICBjYXNlIDB4MjE5MzogcmV0dXJuKChD SEFSKTB4ZmYpOworICAgICAgY2FzZSAweDIyMDY6IHJldHVybigoQ0hBUikweGFlKTsKKyAgICAg IGNhc2UgMHgyMjA3OiByZXR1cm4oKENIQVIpMHhmZCk7CisgICAgICBjYXNlIDB4MjIwYTogcmV0 dXJuKChDSEFSKTB4YjUpOworICAgICAgY2FzZSAweDIyMTg6IHJldHVybigoQ0hBUikweGJjKTsK KyAgICAgIGNhc2UgMHgyMjI4OiByZXR1cm4oKENIQVIpMHhkZik7CisgICAgICBjYXNlIDB4MjIy OTogcmV0dXJuKChDSEFSKTB4ZDEpOworICAgICAgY2FzZSAweDIyMmE6IHJldHVybigoQ0hBUikw eGQyKTsKKyAgICAgIGNhc2UgMHgyMjYwOiByZXR1cm4oKENIQVIpMHhiMCk7CisgICAgICBjYXNl IDB4MjI2MTogcmV0dXJuKChDSEFSKTB4YjYpOworICAgICAgY2FzZSAweDIyNjI6IHJldHVybigo Q0hBUikweGNkKTsKKyAgICAgIGNhc2UgMHgyMjY0OiByZXR1cm4oKENIQVIpMHhiOCk7CisgICAg ICBjYXNlIDB4MjI2NTogcmV0dXJuKChDSEFSKTB4YjcpOworICAgICAgY2FzZSAweDIyODI6IHJl dHVybigoQ0hBUikweGUwKTsKKyAgICAgIGNhc2UgMHgyMjgzOiByZXR1cm4oKENIQVIpMHhlMSk7 CisgICAgICBjYXNlIDB4MjI5NjogcmV0dXJuKChDSEFSKTB4ZDYpOworICAgICAgY2FzZSAweDIy YTI6IHJldHVybigoQ0hBUikweGQ3KTsKKyAgICAgIGNhc2UgMHgyMmEzOiByZXR1cm4oKENIQVIp MHhkOCk7CisgICAgICBjYXNlIDB4MjJhNDogcmV0dXJuKChDSEFSKTB4YmEpOworICAgICAgY2Fz ZSAweDIyYTU6IHJldHVybigoQ0hBUikweGI5KTsKKyAgICAgIGNhc2UgMHgyMmM0OiByZXR1cm4o KENIQVIpMHhiMSk7CisgICAgICBjYXNlIDB4MjMwODogcmV0dXJuKChDSEFSKTB4Y2YpOworICAg ICAgY2FzZSAweDIzMGE6IHJldHVybigoQ0hBUikweGNlKTsKKyAgICAgIGNhc2UgMHgyMzM3OiBy ZXR1cm4oKENIQVIpMHhkOSk7CisgICAgICBjYXNlIDB4MjMzOTogcmV0dXJuKChDSEFSKTB4Y2Ep OworICAgICAgY2FzZSAweDIzM2Q6IHJldHVybigoQ0hBUikweGQ1KTsKKyAgICAgIGNhc2UgMHgy MzNmOiByZXR1cm4oKENIQVIpMHhiZSk7CisgICAgICBjYXNlIDB4MjM0MDogcmV0dXJuKChDSEFS KTB4YmYpOworICAgICAgY2FzZSAweDIzNDk6IHJldHVybigoQ0hBUikweGQwKTsKKyAgICAgIGNh c2UgMHgyMzRiOiByZXR1cm4oKENIQVIpMHhjMik7CisgICAgICBjYXNlIDB4MjM0ZTogcmV0dXJu KChDSEFSKTB4YzApOworICAgICAgY2FzZSAweDIzNTI6IHJldHVybigoQ0hBUikweGMzKTsKKyAg ICAgIGNhc2UgMHgyMzU1OiByZXR1cm4oKENIQVIpMHhjMSk7CisgICAgICBjYXNlIDB4MjM1OTog cmV0dXJuKChDSEFSKTB4ZTIpOworICAgICAgY2FzZSAweDIzNWQ6IHJldHVybigoQ0hBUikweGJk KTsKKyAgICAgIGNhc2UgMHgyMzVlOiByZXR1cm4oKENIQVIpMHhjOSk7CisgICAgICBjYXNlIDB4 MjM1ZjogcmV0dXJuKChDSEFSKTB4YzcpOworICAgICAgY2FzZSAweDIzNjg6IHJldHVybigoQ0hB UikweGM2KTsKKyAgICAgIGNhc2UgMHgyMzZhOiByZXR1cm4oKENIQVIpMHhjYyk7CisgICAgICBj YXNlIDB4MjM2YjogcmV0dXJuKChDSEFSKTB4Y2IpOworICAgICAgY2FzZSAweDIzNmM6IHJldHVy bigoQ0hBUikweGQzKTsKKyAgICAgIGNhc2UgMHgyMzcxOiByZXR1cm4oKENIQVIpMHhjNSk7Cisg ICAgICBjYXNlIDB4MjM3MjogcmV0dXJuKChDSEFSKTB4YzQpOworICAgICAgY2FzZSAweDIzNzM6 IHJldHVybigoQ0hBUikweGRiKTsKKyAgICAgIGNhc2UgMHgyMzc0OiByZXR1cm4oKENIQVIpMHhi Myk7CisgICAgICBjYXNlIDB4MjM3NTogcmV0dXJuKChDSEFSKTB4YjIpOworICAgICAgY2FzZSAw eDIzN2E6IHJldHVybigoQ0hBUikweGI0KTsKKyAgICAgIGNhc2UgMHgyNTAwOiByZXR1cm4oKENI QVIpMHhhYSk7CisgICAgICBjYXNlIDB4MjUwMjogcmV0dXJuKChDSEFSKTB4YTIpOworICAgICAg Y2FzZSAweDI1MGM6IHJldHVybigoQ0hBUikweGFkKTsKKyAgICAgIGNhc2UgMHgyNTEwOiByZXR1 cm4oKENIQVIpMHhhNSk7CisgICAgICBjYXNlIDB4MjUxNDogcmV0dXJuKChDSEFSKTB4YTYpOwor ICAgICAgY2FzZSAweDI1MTg6IHJldHVybigoQ0hBUikweGFjKTsKKyAgICAgIGNhc2UgMHgyNTFj OiByZXR1cm4oKENIQVIpMHhhOSk7CisgICAgICBjYXNlIDB4MjUyNDogcmV0dXJuKChDSEFSKTB4 YTMpOworICAgICAgY2FzZSAweDI1MmM6IHJldHVybigoQ0hBUikweGE4KTsKKyAgICAgIGNhc2Ug MHgyNTM0OiByZXR1cm4oKENIQVIpMHhhNyk7CisgICAgICBjYXNlIDB4MjUzYzogcmV0dXJuKChD SEFSKTB4YWIpOworICAgICAgY2FzZSAweDI1YWY6IHJldHVybigoQ0hBUikweGM4KTsKKyAgICAg IGNhc2UgMHgyNWNiOiByZXR1cm4oKENIQVIpMHhkZCk7CisgICAgICBkZWZhdWx0OgorICAgICAg ICBpZiAoYyA8IDB4YTApCisgICAgICAgICAgcmV0dXJuKChDSEFSKShjICYgMHhmZikpOworICAg ICAgICByZXR1cm4odHhfcHVuYyhjKSk7CisgICAgfQorfQorCitpbnQgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogQVBMLVBsdXMgKi8KKyNpZmRlZiBDS19BTlNJQwordHhf YXBsMyhVU0hPUlQgYykKKyNlbHNlCit0eF9hcGwzKGMpIFVTSE9SVCBjOworI2VuZGlmIC8qIENL X0FOU0lDICovCit7CisgICAgc3dpdGNoIChjKSB7CisgICAgICBjYXNlIDB4MDBhMDogcmV0dXJu KChDSEFSKTB4YTApOworICAgICAgY2FzZSAweDAwYTE6IHJldHVybigoQ0hBUikweGExKTsKKyAg ICAgIGNhc2UgMHgwMGEyOiByZXR1cm4oKENIQVIpMHhhMik7CisgICAgICBjYXNlIDB4MDBhMzog cmV0dXJuKChDSEFSKTB4YTMpOworICAgICAgY2FzZSAweDAwYTU6IHJldHVybigoQ0hBUikweGE1 KTsKKyAgICAgIGNhc2UgMHgwMGE2OiByZXR1cm4oKENIQVIpMHhhNik7CisgICAgICBjYXNlIDB4 MDBhNzogcmV0dXJuKChDSEFSKTB4YTcpOworICAgICAgY2FzZSAweDAwYTg6IHJldHVybigoQ0hB UikweGE4KTsKKyAgICAgIGNhc2UgMHgwMGFiOiByZXR1cm4oKENIQVIpMHhhYik7CisgICAgICBj YXNlIDB4MDBhZjogcmV0dXJuKChDSEFSKTB4YWYpOworICAgICAgY2FzZSAweDAwYjY6IHJldHVy bigoQ0hBUikweGI2KTsKKyAgICAgIGNhc2UgMHgwMGI3OiByZXR1cm4oKENIQVIpMHhiNyk7Cisg ICAgICBjYXNlIDB4MDBiYjogcmV0dXJuKChDSEFSKTB4YmIpOworICAgICAgY2FzZSAweDAwYmY6 IHJldHVybigoQ0hBUikweGJmKTsKKyAgICAgIGNhc2UgMHgwMGMwOiByZXR1cm4oKENIQVIpMHhj MCk7CisgICAgICBjYXNlIDB4MDBjMTogcmV0dXJuKChDSEFSKTB4YzEpOworICAgICAgY2FzZSAw eDAwYzI6IHJldHVybigoQ0hBUikweGMyKTsKKyAgICAgIGNhc2UgMHgwMGMzOiByZXR1cm4oKENI QVIpMHhjMyk7CisgICAgICBjYXNlIDB4MDBjNDogcmV0dXJuKChDSEFSKTB4YzQpOworICAgICAg Y2FzZSAweDAwYzU6IHJldHVybigoQ0hBUikweGM1KTsKKyAgICAgIGNhc2UgMHgwMGM2OiByZXR1 cm4oKENIQVIpMHhjNik7CisgICAgICBjYXNlIDB4MDBjNzogcmV0dXJuKChDSEFSKTB4YzcpOwor ICAgICAgY2FzZSAweDAwYzg6IHJldHVybigoQ0hBUikweGM4KTsKKyAgICAgIGNhc2UgMHgwMGM5 OiByZXR1cm4oKENIQVIpMHhjOSk7CisgICAgICBjYXNlIDB4MDBjYTogcmV0dXJuKChDSEFSKTB4 Y2EpOworICAgICAgY2FzZSAweDAwY2I6IHJldHVybigoQ0hBUikweGNiKTsKKyAgICAgIGNhc2Ug MHgwMGNjOiByZXR1cm4oKENIQVIpMHhjYyk7CisgICAgICBjYXNlIDB4MDBjZDogcmV0dXJuKChD SEFSKTB4Y2QpOworICAgICAgY2FzZSAweDAwY2U6IHJldHVybigoQ0hBUikweGNlKTsKKyAgICAg IGNhc2UgMHgwMGNmOiByZXR1cm4oKENIQVIpMHhjZik7CisgICAgICBjYXNlIDB4MDBkMTogcmV0 dXJuKChDSEFSKTB4ZDEpOworICAgICAgY2FzZSAweDAwZDI6IHJldHVybigoQ0hBUikweGQyKTsK KyAgICAgIGNhc2UgMHgwMGQzOiByZXR1cm4oKENIQVIpMHhkMyk7CisgICAgICBjYXNlIDB4MDBk NDogcmV0dXJuKChDSEFSKTB4ZDQpOworICAgICAgY2FzZSAweDAwZDU6IHJldHVybigoQ0hBUikw eGQ1KTsKKyAgICAgIGNhc2UgMHgwMGQ2OiByZXR1cm4oKENIQVIpMHhkNik7CisgICAgICBjYXNl IDB4MDBkNzogcmV0dXJuKChDSEFSKTB4ZDcpOworICAgICAgY2FzZSAweDAwZDg6IHJldHVybigo Q0hBUikweGQ4KTsKKyAgICAgIGNhc2UgMHgwMGQ5OiByZXR1cm4oKENIQVIpMHhkOSk7CisgICAg ICBjYXNlIDB4MDBkYTogcmV0dXJuKChDSEFSKTB4ZGEpOworICAgICAgY2FzZSAweDAwZGI6IHJl dHVybigoQ0hBUikweGRiKTsKKyAgICAgIGNhc2UgMHgwMGRjOiByZXR1cm4oKENIQVIpMHhkYyk7 CisgICAgICBjYXNlIDB4MDBkZDogcmV0dXJuKChDSEFSKTB4ZGQpOworICAgICAgY2FzZSAweDAw ZGY6IHJldHVybigoQ0hBUikweGRmKTsKKyAgICAgIGNhc2UgMHgwMGUwOiByZXR1cm4oKENIQVIp MHhlMCk7CisgICAgICBjYXNlIDB4MDBlMTogcmV0dXJuKChDSEFSKTB4ZTEpOworICAgICAgY2Fz ZSAweDAwZTI6IHJldHVybigoQ0hBUikweGUyKTsKKyAgICAgIGNhc2UgMHgwMGUzOiByZXR1cm4o KENIQVIpMHhlMyk7CisgICAgICBjYXNlIDB4MDBlNDogcmV0dXJuKChDSEFSKTB4ZTQpOworICAg ICAgY2FzZSAweDAwZTU6IHJldHVybigoQ0hBUikweGU1KTsKKyAgICAgIGNhc2UgMHgwMGU2OiBy ZXR1cm4oKENIQVIpMHhlNik7CisgICAgICBjYXNlIDB4MDBlNzogcmV0dXJuKChDSEFSKTB4ZTcp OworICAgICAgY2FzZSAweDAwZTg6IHJldHVybigoQ0hBUikweGU4KTsKKyAgICAgIGNhc2UgMHgw MGU5OiByZXR1cm4oKENIQVIpMHhlOSk7CisgICAgICBjYXNlIDB4MDBlYTogcmV0dXJuKChDSEFS KTB4ZWEpOworICAgICAgY2FzZSAweDAwZWI6IHJldHVybigoQ0hBUikweGViKTsKKyAgICAgIGNh c2UgMHgwMGVjOiByZXR1cm4oKENIQVIpMHhlYyk7CisgICAgICBjYXNlIDB4MDBlZDogcmV0dXJu KChDSEFSKTB4ZWQpOworICAgICAgY2FzZSAweDAwZWU6IHJldHVybigoQ0hBUikweGVlKTsKKyAg ICAgIGNhc2UgMHgwMGVmOiByZXR1cm4oKENIQVIpMHhlZik7CisgICAgICBjYXNlIDB4MDBmMTog cmV0dXJuKChDSEFSKTB4ZjEpOworICAgICAgY2FzZSAweDAwZjI6IHJldHVybigoQ0hBUikweGYy KTsKKyAgICAgIGNhc2UgMHgwMGYzOiByZXR1cm4oKENIQVIpMHhmMyk7CisgICAgICBjYXNlIDB4 MDBmNDogcmV0dXJuKChDSEFSKTB4ZjQpOworICAgICAgY2FzZSAweDAwZjU6IHJldHVybigoQ0hB UikweGY1KTsKKyAgICAgIGNhc2UgMHgwMGY2OiByZXR1cm4oKENIQVIpMHhmNik7CisgICAgICBj YXNlIDB4MDBmNzogcmV0dXJuKChDSEFSKTB4ZjcpOworICAgICAgY2FzZSAweDAwZjk6IHJldHVy bigoQ0hBUikweGY5KTsKKyAgICAgIGNhc2UgMHgwMGZhOiByZXR1cm4oKENIQVIpMHhmYSk7Cisg ICAgICBjYXNlIDB4MDBmYjogcmV0dXJuKChDSEFSKTB4ZmIpOworICAgICAgY2FzZSAweDAwZmM6 IHJldHVybigoQ0hBUikweGZjKTsKKyAgICAgIGNhc2UgMHgwMGZkOiByZXR1cm4oKENIQVIpMHhm ZCk7CisgICAgICBjYXNlIDB4MDBmZjogcmV0dXJuKChDSEFSKTB4ZmYpOworICAgICAgY2FzZSAw eDIwYWM6IHJldHVybigoQ0hBUikweDgwKTsKKyAgICAgIGNhc2UgMHgyMTkwOiByZXR1cm4oKENI QVIpMHg4NCk7CisgICAgICBjYXNlIDB4MjE5MTogcmV0dXJuKChDSEFSKTB4ODYpOworICAgICAg Y2FzZSAweDIxOTI6IHJldHVybigoQ0hBUikweDg1KTsKKyAgICAgIGNhc2UgMHgyMTkzOiByZXR1 cm4oKENIQVIpMHg4Nyk7CisgICAgICBjYXNlIDB4MjIwNTogcmV0dXJuKChDSEFSKTB4ZjgpOwor ICAgICAgY2FzZSAweDIyMDY6IHJldHVybigoQ0hBUikweDkxKTsKKyAgICAgIGNhc2UgMHgyMjA3 OiByZXR1cm4oKENIQVIpMHg5Mik7CisgICAgICBjYXNlIDB4MjIwYTogcmV0dXJuKChDSEFSKTB4 YjkpOworICAgICAgY2FzZSAweDIyMTg6IHJldHVybigoQ0hBUikweGIwKTsKKyAgICAgIGNhc2Ug MHgyMjI4OiByZXR1cm4oKENIQVIpMHg5Zik7CisgICAgICBjYXNlIDB4MjIyOTogcmV0dXJuKChD SEFSKTB4OWQpOworICAgICAgY2FzZSAweDIyMmE6IHJldHVybigoQ0hBUikweDllKTsKKyAgICAg IGNhc2UgMHgyMjYwOiByZXR1cm4oKENIQVIpMHhhYyk7CisgICAgICBjYXNlIDB4MjI2MTogcmV0 dXJuKChDSEFSKTB4YWQpOworICAgICAgY2FzZSAweDIyNjQ6IHJldHVybigoQ0hBUikweDg4KTsK KyAgICAgIGNhc2UgMHgyMjY1OiByZXR1cm4oKENIQVIpMHg4OSk7CisgICAgICBjYXNlIDB4MjI4 MjogcmV0dXJuKChDSEFSKTB4OWIpOworICAgICAgY2FzZSAweDIyODM6IHJldHVybigoQ0hBUikw eDljKTsKKyAgICAgIGNhc2UgMHgyMjk2OiByZXR1cm4oKENIQVIpMHhiNCk7CisgICAgICBjYXNl IDB4MjJhMjogcmV0dXJuKChDSEFSKTB4YTQpOworICAgICAgY2FzZSAweDIyYTM6IHJldHVybigo Q0hBUikweDgxKTsKKyAgICAgIGNhc2UgMHgyMmE0OiByZXR1cm4oKENIQVIpMHg4Mik7CisgICAg ICBjYXNlIDB4MjJhNTogcmV0dXJuKChDSEFSKTB4ODMpOworICAgICAgY2FzZSAweDIyYzQ6IHJl dHVybigoQ0hBUikweGFhKTsKKyAgICAgIGNhc2UgMHgyMzA4OiByZXR1cm4oKENIQVIpMHg5Nyk7 CisgICAgICBjYXNlIDB4MjMwYTogcmV0dXJuKChDSEFSKTB4OTgpOworICAgICAgY2FzZSAweDIz Mzc6IHJldHVybigoQ0hBUikweGRlKTsKKyAgICAgIGNhc2UgMHgyMzM5OiByZXR1cm4oKENIQVIp MHg4ZSk7CisgICAgICBjYXNlIDB4MjMzZDogcmV0dXJuKChDSEFSKTB4YjIpOworICAgICAgY2Fz ZSAweDIzM2Y6IHJldHVybigoQ0hBUikweDlhKTsKKyAgICAgIGNhc2UgMHgyMzQwOiByZXR1cm4o KENIQVIpMHg5OSk7CisgICAgICBjYXNlIDB4MjM0OTogcmV0dXJuKChDSEFSKTB4YjMpOworICAg ICAgY2FzZSAweDIzNGI6IHJldHVybigoQ0hBUikweDkzKTsKKyAgICAgIGNhc2UgMHgyMzRlOiBy ZXR1cm4oKENIQVIpMHg5Nik7CisgICAgICBjYXNlIDB4MjM1MjogcmV0dXJuKChDSEFSKTB4OTQp OworICAgICAgY2FzZSAweDIzNTU6IHJldHVybigoQ0hBUikweDk1KTsKKyAgICAgIGNhc2UgMHgy MzU5OiByZXR1cm4oKENIQVIpMHg4Zik7CisgICAgICBjYXNlIDB4MjM1ZDogcmV0dXJuKChDSEFS KTB4YTkpOworICAgICAgY2FzZSAweDIzNWU6IHJldHVybigoQ0hBUikweDhkKTsKKyAgICAgIGNh c2UgMHgyMzVmOiByZXR1cm4oKENIQVIpMHhiNSk7CisgICAgICBjYXNlIDB4MjM2NDogcmV0dXJu KChDSEFSKTB4ZjApOworICAgICAgY2FzZSAweDIzNjg6IHJldHVybigoQ0hBUikweGZlKTsKKyAg ICAgIGNhc2UgMHgyMzZhOiByZXR1cm4oKENIQVIpMHhhZSk7CisgICAgICBjYXNlIDB4MjM2Yjog cmV0dXJuKChDSEFSKTB4OTApOworICAgICAgY2FzZSAweDIzNmM6IHJldHVybigoQ0hBUikweGQw KTsKKyAgICAgIGNhc2UgMHgyMzcxOiByZXR1cm4oKENIQVIpMHg4Yik7CisgICAgICBjYXNlIDB4 MjM3MjogcmV0dXJuKChDSEFSKTB4OGEpOworICAgICAgY2FzZSAweDIzNzM6IHJldHVybigoQ0hB UikweGJjKTsKKyAgICAgIGNhc2UgMHgyMzc0OiByZXR1cm4oKENIQVIpMHhiZCk7CisgICAgICBj YXNlIDB4MjM3NTogcmV0dXJuKChDSEFSKTB4YmUpOworICAgICAgY2FzZSAweDIzNzc6IHJldHVy bigoQ0hBUikweGJhKTsKKyAgICAgIGNhc2UgMHgyMzdhOiByZXR1cm4oKENIQVIpMHhiOCk7Cisg ICAgICBjYXNlIDB4MjVhZjogcmV0dXJuKChDSEFSKTB4OGMpOworICAgICAgY2FzZSAweDI1Y2I6 IHJldHVybigoQ0hBUikweGIxKTsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybih0eF9w dW5jKGMpKTsKKyAgICB9Cit9CisKK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBJQk0gQVBMMiAqLworI2lmZGVmIENLX0FOU0lDCit0eF9hcGw0KFVTSE9SVCBjKQor I2Vsc2UKK3R4X2FwbDQoYykgVVNIT1JUIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAg ICBzd2l0Y2ggKGMpIHsKKyAgICAgIGNhc2UgMHgwMGEwOiByZXR1cm4oKENIQVIpMHhmZik7Cisg ICAgICBjYXNlIDB4MDBhMTogcmV0dXJuKChDSEFSKTB4YWQpOworICAgICAgY2FzZSAweDAwYTM6 IHJldHVybigoQ0hBUikweDljKTsKKyAgICAgIGNhc2UgMHgwMGE2OiByZXR1cm4oKENIQVIpMHhk ZCk7CisgICAgICBjYXNlIDB4MDBhODogcmV0dXJuKChDSEFSKTB4ZmUpOworICAgICAgY2FzZSAw eDAwYWE6IHJldHVybigoQ0hBUikweGE2KTsKKyAgICAgIGNhc2UgMHgwMGFjOiByZXR1cm4oKENI QVIpMHhhYSk7CisgICAgICBjYXNlIDB4MDBhZjogcmV0dXJuKChDSEFSKTB4ZmQpOworICAgICAg Y2FzZSAweDAwYmE6IHJldHVybigoQ0hBUikweGE3KTsKKyAgICAgIGNhc2UgMHgwMGJmOiByZXR1 cm4oKENIQVIpMHhhOCk7CisgICAgICBjYXNlIDB4MDBjNDogcmV0dXJuKChDSEFSKTB4OGUpOwor ICAgICAgY2FzZSAweDAwYzU6IHJldHVybigoQ0hBUikweGVlKTsgIC8qIGFuZCAweDhmICovCisg ICAgICBjYXNlIDB4MDBjNzogcmV0dXJuKChDSEFSKTB4ODApOworICAgICAgY2FzZSAweDAwY2M6 IHJldHVybigoQ0hBUikweGRlKTsKKyAgICAgIGNhc2UgMHgwMGQxOiByZXR1cm4oKENIQVIpMHhh NSk7CisgICAgICBjYXNlIDB4MDBkNjogcmV0dXJuKChDSEFSKTB4OTkpOworICAgICAgY2FzZSAw eDAwZDc6IHJldHVybigoQ0hBUikweGY1KTsKKyAgICAgIGNhc2UgMHgwMGRjOiByZXR1cm4oKENI QVIpMHg5YSk7CisgICAgICBjYXNlIDB4MDBkZjogcmV0dXJuKChDSEFSKTB4ZTEpOworICAgICAg Y2FzZSAweDAwZTA6IHJldHVybigoQ0hBUikweDg1KTsKKyAgICAgIGNhc2UgMHgwMGUxOiByZXR1 cm4oKENIQVIpMHhhMCk7CisgICAgICBjYXNlIDB4MDBlMjogcmV0dXJuKChDSEFSKTB4ODMpOwor ICAgICAgY2FzZSAweDAwZTQ6IHJldHVybigoQ0hBUikweDg0KTsKKyAgICAgIGNhc2UgMHgwMGU1 OiByZXR1cm4oKENIQVIpMHg4Nik7CisgICAgICBjYXNlIDB4MDBlNzogcmV0dXJuKChDSEFSKTB4 ODcpOworICAgICAgY2FzZSAweDAwZTg6IHJldHVybigoQ0hBUikweDhhKTsKKyAgICAgIGNhc2Ug MHgwMGU5OiByZXR1cm4oKENIQVIpMHg4Mik7CisgICAgICBjYXNlIDB4MDBlYTogcmV0dXJuKChD SEFSKTB4ODgpOworICAgICAgY2FzZSAweDAwZWI6IHJldHVybigoQ0hBUikweDg5KTsKKyAgICAg IGNhc2UgMHgwMGVjOiByZXR1cm4oKENIQVIpMHg4ZCk7CisgICAgICBjYXNlIDB4MDBlZDogcmV0 dXJuKChDSEFSKTB4YTEpOworICAgICAgY2FzZSAweDAwZWU6IHJldHVybigoQ0hBUikweDhjKTsK KyAgICAgIGNhc2UgMHgwMGVmOiByZXR1cm4oKENIQVIpMHg4Yik7CisgICAgICBjYXNlIDB4MDBm MTogcmV0dXJuKChDSEFSKTB4YTQpOworICAgICAgY2FzZSAweDAwZjI6IHJldHVybigoQ0hBUikw eDk1KTsKKyAgICAgIGNhc2UgMHgwMGYzOiByZXR1cm4oKENIQVIpMHhhMik7CisgICAgICBjYXNl IDB4MDBmNDogcmV0dXJuKChDSEFSKTB4OTMpOworICAgICAgY2FzZSAweDAwZjY6IHJldHVybigo Q0hBUikweDk0KTsKKyAgICAgIGNhc2UgMHgwMGY3OiByZXR1cm4oKENIQVIpMHhmNik7CisgICAg ICBjYXNlIDB4MDBmODogcmV0dXJuKChDSEFSKTB4OWIpOworICAgICAgY2FzZSAweDAwZjk6IHJl dHVybigoQ0hBUikweDk3KTsKKyAgICAgIGNhc2UgMHgwMGZhOiByZXR1cm4oKENIQVIpMHhhMyk7 CisgICAgICBjYXNlIDB4MDBmYjogcmV0dXJuKChDSEFSKTB4OTYpOworICAgICAgY2FzZSAweDAw ZmM6IHJldHVybigoQ0hBUikweDgxKTsKKyAgICAgIGNhc2UgMHgyMTkwOiByZXR1cm4oKENIQVIp MHg5ZSk7CisgICAgICBjYXNlIDB4MjE5MTogcmV0dXJuKChDSEFSKTB4YzYpOworICAgICAgY2Fz ZSAweDIxOTI6IHJldHVybigoQ0hBUikweGFiKTsKKyAgICAgIGNhc2UgMHgyMTkzOiByZXR1cm4o KENIQVIpMHhjNyk7CisgICAgICBjYXNlIDB4MjIwNjogcmV0dXJuKChDSEFSKTB4YjYpOworICAg ICAgY2FzZSAweDIyMDc6IHJldHVybigoQ0hBUikweGI3KTsKKyAgICAgIGNhc2UgMHgyMjE4OiBy ZXR1cm4oKENIQVIpMHhmOCk7CisgICAgICBjYXNlIDB4MjIyODogcmV0dXJuKChDSEFSKTB4ZWIp OworICAgICAgY2FzZSAweDIyMjk6IHJldHVybigoQ0hBUikweGVmKTsKKyAgICAgIGNhc2UgMHgy MjJhOiByZXR1cm4oKENIQVIpMHhhYyk7CisgICAgICBjYXNlIDB4MjIzNTogcmV0dXJuKChDSEFS KTB4ZDIpOworICAgICAgY2FzZSAweDIyNjA6IHJldHVybigoQ0hBUikweGY0KTsKKyAgICAgIGNh c2UgMHgyMjYxOiByZXR1cm4oKENIQVIpMHhjZik7CisgICAgICBjYXNlIDB4MjI2NDogcmV0dXJu KChDSEFSKTB4ZjMpOworICAgICAgY2FzZSAweDIyNjU6IHJldHVybigoQ0hBUikweGYyKTsKKyAg ICAgIGNhc2UgMHgyMjgyOiByZXR1cm4oKENIQVIpMHhlMik7CisgICAgICBjYXNlIDB4MjI4Mzog cmV0dXJuKChDSEFSKTB4ZTMpOworICAgICAgY2FzZSAweDIyOTY6IHJldHVybigoQ0hBUikweGU5 KTsKKyAgICAgIGNhc2UgMHgyMmEyOiByZXR1cm4oKENIQVIpMHhkNik7CisgICAgICBjYXNlIDB4 MjJhMzogcmV0dXJuKChDSEFSKTB4ZDcpOworICAgICAgY2FzZSAweDIyYTQ6IHJldHVybigoQ0hB UikweDk4KTsKKyAgICAgIGNhc2UgMHgyMmE1OiByZXR1cm4oKENIQVIpMHg5ZCk7CisgICAgICBj YXNlIDB4MjJjNDogcmV0dXJuKChDSEFSKTB4ZDgpOworICAgICAgY2FzZSAweDIzMDg6IHJldHVy bigoQ0hBUikweGE5KTsKKyAgICAgIGNhc2UgMHgyMzBhOiByZXR1cm4oKENIQVIpMHhiZSk7Cisg ICAgICBjYXNlIDB4MjMzNjogcmV0dXJuKChDSEFSKTB4OWYpOworICAgICAgY2FzZSAweDIzMzc6 IHJldHVybigoQ0hBUikweGQzKTsKKyAgICAgIGNhc2UgMHgyMzM5OiByZXR1cm4oKENIQVIpMHg5 Mik7CisgICAgICBjYXNlIDB4MjMzYjogcmV0dXJuKChDSEFSKTB4ZDUpOworICAgICAgY2FzZSAw eDIzM2Q6IHJldHVybigoQ0hBUikweGU4KTsKKyAgICAgIGNhc2UgMHgyMzNmOiByZXR1cm4oKENI QVIpMHhmMCk7CisgICAgICBjYXNlIDB4MjM0MDogcmV0dXJuKChDSEFSKTB4ZjEpOworICAgICAg Y2FzZSAweDIzNDI6IHJldHVybigoQ0hBUikweGQ0KTsKKyAgICAgIGNhc2UgMHgyMzQ5OiByZXR1 cm4oKENIQVIpMHhlZCk7CisgICAgICBjYXNlIDB4MjM0YjogcmV0dXJuKChDSEFSKTB4ZmIpOwor ICAgICAgY2FzZSAweDIzNGU6IHJldHVybigoQ0hBUikweGFmKTsKKyAgICAgIGNhc2UgMHgyMzUy OiByZXR1cm4oKENIQVIpMHhmYyk7CisgICAgICBjYXNlIDB4MjM1NTogcmV0dXJuKChDSEFSKTB4 YWUpOworICAgICAgY2FzZSAweDIzNTk6IHJldHVybigoQ0hBUikweGY3KTsKKyAgICAgIGNhc2Ug MHgyMzVkOiByZXR1cm4oKENIQVIpMHhlNCk7CisgICAgICBjYXNlIDB4MjM1ZTogcmV0dXJuKChD SEFSKTB4OTEpOworICAgICAgY2FzZSAweDIzNWY6IHJldHVybigoQ0hBUikweGI1KTsKKyAgICAg IGNhc2UgMHgyMzZiOiByZXR1cm4oKENIQVIpMHhmYSk7CisgICAgICBjYXNlIDB4MjM3MTogcmV0 dXJuKChDSEFSKTB4ZTcpOworICAgICAgY2FzZSAweDIzNzI6IHJldHVybigoQ0hBUikweGU1KTsK KyAgICAgIGNhc2UgMHgyMzczOiByZXR1cm4oKENIQVIpMHhlYyk7CisgICAgICBjYXNlIDB4MjM3 NDogcmV0dXJuKChDSEFSKTB4ZTYpOworICAgICAgY2FzZSAweDIzNzU6IHJldHVybigoQ0hBUikw eGY5KTsKKyAgICAgIGNhc2UgMHgyMzc3OiByZXR1cm4oKENIQVIpMHhkMSk7CisgICAgICBjYXNl IDB4MjM3ODogcmV0dXJuKChDSEFSKTB4ZDApOworICAgICAgY2FzZSAweDIzN2E6IHJldHVybigo Q0hBUikweGUwKTsKKyAgICAgIGNhc2UgMHgyNTAwOiByZXR1cm4oKENIQVIpMHhjNCk7CisgICAg ICBjYXNlIDB4MjUwMjogcmV0dXJuKChDSEFSKTB4YjMpOworICAgICAgY2FzZSAweDI1MGM6IHJl dHVybigoQ0hBUikweGRhKTsKKyAgICAgIGNhc2UgMHgyNTEwOiByZXR1cm4oKENIQVIpMHhiZik7 CisgICAgICBjYXNlIDB4MjUxNDogcmV0dXJuKChDSEFSKTB4YzApOworICAgICAgY2FzZSAweDI1 MTg6IHJldHVybigoQ0hBUikweGQ5KTsKKyAgICAgIGNhc2UgMHgyNTFjOiByZXR1cm4oKENIQVIp MHhjMyk7CisgICAgICBjYXNlIDB4MjUyNDogcmV0dXJuKChDSEFSKTB4YjQpOworICAgICAgY2Fz ZSAweDI1MmM6IHJldHVybigoQ0hBUikweGMyKTsKKyAgICAgIGNhc2UgMHgyNTM0OiByZXR1cm4o KENIQVIpMHhjMSk7CisgICAgICBjYXNlIDB4MjUzYzogcmV0dXJuKChDSEFSKTB4YzUpOworICAg ICAgY2FzZSAweDI1NTA6IHJldHVybigoQ0hBUikweGNkKTsKKyAgICAgIGNhc2UgMHgyNTUxOiBy ZXR1cm4oKENIQVIpMHhiYSk7CisgICAgICBjYXNlIDB4MjU1NDogcmV0dXJuKChDSEFSKTB4Yzkp OworICAgICAgY2FzZSAweDI1NTc6IHJldHVybigoQ0hBUikweGJiKTsKKyAgICAgIGNhc2UgMHgy NTVhOiByZXR1cm4oKENIQVIpMHhjOCk7CisgICAgICBjYXNlIDB4MjU1ZDogcmV0dXJuKChDSEFS KTB4YmMpOworICAgICAgY2FzZSAweDI1NjA6IHJldHVybigoQ0hBUikweGNjKTsKKyAgICAgIGNh c2UgMHgyNTYzOiByZXR1cm4oKENIQVIpMHhiOSk7CisgICAgICBjYXNlIDB4MjU2NjogcmV0dXJu KChDSEFSKTB4Y2IpOworICAgICAgY2FzZSAweDI1Njk6IHJldHVybigoQ0hBUikweGNhKTsKKyAg ICAgIGNhc2UgMHgyNTZjOiByZXR1cm4oKENIQVIpMHhjZSk7CisgICAgICBjYXNlIDB4MjU4MDog cmV0dXJuKChDSEFSKTB4ZGYpOworICAgICAgY2FzZSAweDI1ODQ6IHJldHVybigoQ0hBUikweGRj KTsKKyAgICAgIGNhc2UgMHgyNTg4OiByZXR1cm4oKENIQVIpMHhkYik7CisgICAgICBjYXNlIDB4 MjU5MTogcmV0dXJuKChDSEFSKTB4YjApOworICAgICAgY2FzZSAweDI1OTI6IHJldHVybigoQ0hB UikweGIxKTsKKyAgICAgIGNhc2UgMHgyNTkzOiByZXR1cm4oKENIQVIpMHhiMik7CisgICAgICBj YXNlIDB4MjVhZjogcmV0dXJuKChDSEFSKTB4OTApOworICAgICAgY2FzZSAweDI1Y2I6IHJldHVy bigoQ0hBUikweGVhKTsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybih0eF9wdW5jKGMp KTsKKyAgICB9Cit9CisKK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBBUEwtMjc0MSAqLworI2lmZGVmIENLX0FOU0lDCit0eF9hcGw1KFVTSE9SVCBjKQorI2Vsc2UK K3R4X2FwbDUoYykgVVNIT1JUIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAgICBzd2l0 Y2ggKGMpIHsKKyAgICAgIGNhc2UgMHgwMGEwOiByZXR1cm4oKENIQVIpMHhhMCk7CisgICAgICBj YXNlIDB4MDBhMTogcmV0dXJuKChDSEFSKTB4YTEpOworICAgICAgY2FzZSAweDAwYTI6IHJldHVy bigoQ0hBUikweGEyKTsKKyAgICAgIGNhc2UgMHgwMGEzOiByZXR1cm4oKENIQVIpMHhhMyk7Cisg ICAgICBjYXNlIDB4MDBhODogcmV0dXJuKChDSEFSKTB4YTgpOworICAgICAgY2FzZSAweDAwYWY6 IHJldHVybigoQ0hBUikweGFmKTsKKyAgICAgIGNhc2UgMHgwMGI2OiByZXR1cm4oKENIQVIpMHhi Nik7CisgICAgICBjYXNlIDB4MDBiNzogcmV0dXJuKChDSEFSKTB4YjcpOworICAgICAgY2FzZSAw eDAwYmY6IHJldHVybigoQ0hBUikweGJmKTsKKyAgICAgIGNhc2UgMHgwMGM0OiByZXR1cm4oKENI QVIpMHhjNCk7CisgICAgICBjYXNlIDB4MDBjNTogcmV0dXJuKChDSEFSKTB4YzUpOworICAgICAg Y2FzZSAweDAwYzY6IHJldHVybigoQ0hBUikweGM2KTsKKyAgICAgIGNhc2UgMHgwMGM3OiByZXR1 cm4oKENIQVIpMHhjNyk7CisgICAgICBjYXNlIDB4MDBjODogcmV0dXJuKChDSEFSKTB4YzgpOwor ICAgICAgY2FzZSAweDAwYzk6IHJldHVybigoQ0hBUikweGM5KTsKKyAgICAgIGNhc2UgMHgwMGNk OiByZXR1cm4oKENIQVIpMHhjZCk7CisgICAgICBjYXNlIDB4MDBkMTogcmV0dXJuKChDSEFSKTB4 ZDEpOworICAgICAgY2FzZSAweDAwZDY6IHJldHVybigoQ0hBUikweGQ2KTsKKyAgICAgIGNhc2Ug MHgwMGQ3OiByZXR1cm4oKENIQVIpMHhkNyk7CisgICAgICBjYXNlIDB4MDBkODogcmV0dXJuKChD SEFSKTB4ZDgpOworICAgICAgY2FzZSAweDAwZGM6IHJldHVybigoQ0hBUikweGRjKTsKKyAgICAg IGNhc2UgMHgwMGRmOiByZXR1cm4oKENIQVIpMHhkZik7CisgICAgICBjYXNlIDB4MDBlMDogcmV0 dXJuKChDSEFSKTB4ZTApOworICAgICAgY2FzZSAweDAwZTE6IHJldHVybigoQ0hBUikweGUxKTsK KyAgICAgIGNhc2UgMHgwMGUyOiByZXR1cm4oKENIQVIpMHhlMik7CisgICAgICBjYXNlIDB4MDBl MzogcmV0dXJuKChDSEFSKTB4ZTMpOworICAgICAgY2FzZSAweDAwZTQ6IHJldHVybigoQ0hBUikw eGU0KTsKKyAgICAgIGNhc2UgMHgwMGU1OiByZXR1cm4oKENIQVIpMHhlNSk7CisgICAgICBjYXNl IDB4MDBlNjogcmV0dXJuKChDSEFSKTB4ZTYpOworICAgICAgY2FzZSAweDAwZTc6IHJldHVybigo Q0hBUikweGU3KTsKKyAgICAgIGNhc2UgMHgwMGU4OiByZXR1cm4oKENIQVIpMHhlOCk7CisgICAg ICBjYXNlIDB4MDBlOTogcmV0dXJuKChDSEFSKTB4ZTkpOworICAgICAgY2FzZSAweDAwZWE6IHJl dHVybigoQ0hBUikweGVhKTsKKyAgICAgIGNhc2UgMHgwMGViOiByZXR1cm4oKENIQVIpMHhlYik7 CisgICAgICBjYXNlIDB4MDBlYzogcmV0dXJuKChDSEFSKTB4ZWMpOworICAgICAgY2FzZSAweDAw ZWQ6IHJldHVybigoQ0hBUikweGVkKTsKKyAgICAgIGNhc2UgMHgwMGVlOiByZXR1cm4oKENIQVIp MHhlZSk7CisgICAgICBjYXNlIDB4MDBlZjogcmV0dXJuKChDSEFSKTB4ZWYpOworICAgICAgY2Fz ZSAweDAwZjE6IHJldHVybigoQ0hBUikweGYxKTsKKyAgICAgIGNhc2UgMHgwMGYyOiByZXR1cm4o KENIQVIpMHhmMik7CisgICAgICBjYXNlIDB4MDBmMzogcmV0dXJuKChDSEFSKTB4ZjMpOworICAg ICAgY2FzZSAweDAwZjQ6IHJldHVybigoQ0hBUikweGY0KTsKKyAgICAgIGNhc2UgMHgwMGY1OiBy ZXR1cm4oKENIQVIpMHhmNSk7CisgICAgICBjYXNlIDB4MDBmNjogcmV0dXJuKChDSEFSKTB4ZjYp OworICAgICAgY2FzZSAweDAwZjc6IHJldHVybigoQ0hBUikweGY3KTsKKyAgICAgIGNhc2UgMHgw MGY5OiByZXR1cm4oKENIQVIpMHhmOSk7CisgICAgICBjYXNlIDB4MDBmYTogcmV0dXJuKChDSEFS KTB4ZmEpOworICAgICAgY2FzZSAweDAwZmI6IHJldHVybigoQ0hBUikweGZiKTsKKyAgICAgIGNh c2UgMHgwMGZjOiByZXR1cm4oKENIQVIpMHhmYyk7CisgICAgICBjYXNlIDB4MjBhYzogcmV0dXJu KChDSEFSKTB4ODApOworICAgICAgY2FzZSAweDIxOTA6IHJldHVybigoQ0hBUikweDg0KTsKKyAg ICAgIGNhc2UgMHgyMTkxOiByZXR1cm4oKENIQVIpMHg4Nik7CisgICAgICBjYXNlIDB4MjE5Mjog cmV0dXJuKChDSEFSKTB4ODUpOworICAgICAgY2FzZSAweDIxOTM6IHJldHVybigoQ0hBUikweDg3 KTsKKyAgICAgIGNhc2UgMHgyMjA1OiByZXR1cm4oKENIQVIpMHhmOCk7CisgICAgICBjYXNlIDB4 MjIwNjogcmV0dXJuKChDSEFSKTB4OTEpOworICAgICAgY2FzZSAweDIyMDc6IHJldHVybigoQ0hB UikweDkyKTsKKyAgICAgIGNhc2UgMHgyMjBhOiByZXR1cm4oKENIQVIpMHhiOSk7CisgICAgICBj YXNlIDB4MjIxODogcmV0dXJuKChDSEFSKTB4YjApOworICAgICAgY2FzZSAweDIyMjg6IHJldHVy bigoQ0hBUikweDlmKTsKKyAgICAgIGNhc2UgMHgyMjI5OiByZXR1cm4oKENIQVIpMHg5ZCk7Cisg ICAgICBjYXNlIDB4MjIyYTogcmV0dXJuKChDSEFSKTB4OWUpOworICAgICAgY2FzZSAweDIyMzU6 IHJldHVybigoQ0hBUikweGZkKTsKKyAgICAgIGNhc2UgMHgyMjYwOiByZXR1cm4oKENIQVIpMHhh Yyk7CisgICAgICBjYXNlIDB4MjI2MTogcmV0dXJuKChDSEFSKTB4YTYpOworICAgICAgY2FzZSAw eDIyNjI6IHJldHVybigoQ0hBUikweGJiKTsKKyAgICAgIGNhc2UgMHgyMjY0OiByZXR1cm4oKENI QVIpMHg4OCk7CisgICAgICBjYXNlIDB4MjI2NTogcmV0dXJuKChDSEFSKTB4ODkpOworICAgICAg Y2FzZSAweDIyODI6IHJldHVybigoQ0hBUikweDliKTsKKyAgICAgIGNhc2UgMHgyMjgzOiByZXR1 cm4oKENIQVIpMHg5Yyk7CisgICAgICBjYXNlIDB4MjI5NjogcmV0dXJuKChDSEFSKTB4YjQpOwor ICAgICAgY2FzZSAweDIyYTI6IHJldHVybigoQ0hBUikweGE0KTsKKyAgICAgIGNhc2UgMHgyMmEz OiByZXR1cm4oKENIQVIpMHg4MSk7CisgICAgICBjYXNlIDB4MjJhNDogcmV0dXJuKChDSEFSKTB4 ODIpOworICAgICAgY2FzZSAweDIyYTU6IHJldHVybigoQ0hBUikweDgzKTsKKyAgICAgIGNhc2Ug MHgyMmM0OiByZXR1cm4oKENIQVIpMHhhYSk7CisgICAgICBjYXNlIDB4MjMwODogcmV0dXJuKChD SEFSKTB4OTcpOworICAgICAgY2FzZSAweDIzMGE6IHJldHVybigoQ0hBUikweDk4KTsKKyAgICAg IGNhc2UgMHgyMzM2OiByZXR1cm4oKENIQVIpMHhhNyk7CisgICAgICBjYXNlIDB4MjMzNzogcmV0 dXJuKChDSEFSKTB4ZGUpOworICAgICAgY2FzZSAweDIzMzk6IHJldHVybigoQ0hBUikweDhlKTsK KyAgICAgIGNhc2UgMHgyMzNiOiByZXR1cm4oKENIQVIpMHhjYik7CisgICAgICBjYXNlIDB4MjMz ZDogcmV0dXJuKChDSEFSKTB4YjIpOworICAgICAgY2FzZSAweDIzM2Y6IHJldHVybigoQ0hBUikw eDlhKTsKKyAgICAgIGNhc2UgMHgyMzQwOiByZXR1cm4oKENIQVIpMHg5OSk7CisgICAgICBjYXNl IDB4MjM0MjogcmV0dXJuKChDSEFSKTB4Y2EpOworICAgICAgY2FzZSAweDIzNDc6IHJldHVybigo Q0hBUikweGQ0KTsKKyAgICAgIGNhc2UgMHgyMzQ4OiByZXR1cm4oKENIQVIpMHhkNSk7CisgICAg ICBjYXNlIDB4MjM0OTogcmV0dXJuKChDSEFSKTB4YjMpOworICAgICAgY2FzZSAweDIzNGI6IHJl dHVybigoQ0hBUikweDkzKTsKKyAgICAgIGNhc2UgMHgyMzRlOiByZXR1cm4oKENIQVIpMHg5Nik7 CisgICAgICBjYXNlIDB4MjM1MDogcmV0dXJuKChDSEFSKTB4ZDIpOworICAgICAgY2FzZSAweDIz NTI6IHJldHVybigoQ0hBUikweDk0KTsKKyAgICAgIGNhc2UgMHgyMzU1OiByZXR1cm4oKENIQVIp MHg5NSk7CisgICAgICBjYXNlIDB4MjM1NzogcmV0dXJuKChDSEFSKTB4ZDMpOworICAgICAgY2Fz ZSAweDIzNTk6IHJldHVybigoQ0hBUikweDhmKTsKKyAgICAgIGNhc2UgMHgyMzVkOiByZXR1cm4o KENIQVIpMHhhOSk7CisgICAgICBjYXNlIDB4MjM1ZTogcmV0dXJuKChDSEFSKTB4OGQpOworICAg ICAgY2FzZSAweDIzNWY6IHJldHVybigoQ0hBUikweGI1KTsKKyAgICAgIGNhc2UgMHgyMzY0OiBy ZXR1cm4oKENIQVIpMHhmMCk7CisgICAgICBjYXNlIDB4MjM2NTogcmV0dXJuKChDSEFSKTB4ZmYp OworICAgICAgY2FzZSAweDIzNjg6IHJldHVybigoQ0hBUikweGZlKTsKKyAgICAgIGNhc2UgMHgy MzZhOiByZXR1cm4oKENIQVIpMHhhZSk7CisgICAgICBjYXNlIDB4MjM2YjogcmV0dXJuKChDSEFS KTB4OTApOworICAgICAgY2FzZSAweDIzNmM6IHJldHVybigoQ0hBUikweGFiKTsKKyAgICAgIGNh c2UgMHgyMzcxOiByZXR1cm4oKENIQVIpMHg4Yik7CisgICAgICBjYXNlIDB4MjM3MjogcmV0dXJu KChDSEFSKTB4OGEpOworICAgICAgY2FzZSAweDIzNzM6IHJldHVybigoQ0hBUikweGJjKTsKKyAg ICAgIGNhc2UgMHgyMzc0OiByZXR1cm4oKENIQVIpMHhiZCk7CisgICAgICBjYXNlIDB4MjM3NTog cmV0dXJuKChDSEFSKTB4YmUpOworICAgICAgY2FzZSAweDIzNzc6IHJldHVybigoQ0hBUikweGJh KTsKKyAgICAgIGNhc2UgMHgyMzc4OiByZXR1cm4oKENIQVIpMHhhNSk7CisgICAgICBjYXNlIDB4 MjM3YTogcmV0dXJuKChDSEFSKTB4YjgpOworICAgICAgY2FzZSAweDI1MDA6IHJldHVybigoQ0hB UikweGNlKTsKKyAgICAgIGNhc2UgMHgyNTAyOiByZXR1cm4oKENIQVIpMHhkYik7CisgICAgICBj YXNlIDB4MjUwYzogcmV0dXJuKChDSEFSKTB4ZGEpOworICAgICAgY2FzZSAweDI1MTA6IHJldHVy bigoQ0hBUikweGNjKTsKKyAgICAgIGNhc2UgMHgyNTE0OiByZXR1cm4oKENIQVIpMHhjMCk7Cisg ICAgICBjYXNlIDB4MjUxODogcmV0dXJuKChDSEFSKTB4ZDkpOworICAgICAgY2FzZSAweDI1MWM6 IHJldHVybigoQ0hBUikweGMzKTsKKyAgICAgIGNhc2UgMHgyNTI0OiByZXR1cm4oKENIQVIpMHhk ZCk7CisgICAgICBjYXNlIDB4MjUyYzogcmV0dXJuKChDSEFSKTB4YzIpOworICAgICAgY2FzZSAw eDI1MzQ6IHJldHVybigoQ0hBUikweGMxKTsKKyAgICAgIGNhc2UgMHgyNTNjOiByZXR1cm4oKENI QVIpMHhjZik7CisgICAgICBjYXNlIDB4MjVhZjogcmV0dXJuKChDSEFSKTB4OGMpOworICAgICAg Y2FzZSAweDI1Y2I6IHJldHVybigoQ0hBUikweGIxKTsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAg IHJldHVybih0eF9wdW5jKGMpKTsKKyAgICB9Cit9CisKKy8qIEZvciBMYXRpbi0xLCB1c2UgdHhf aWRlbnQoKSAqLworCitpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog TGF0aW4tMiAqLworI2lmZGVmIENLX0FOU0lDCit0eF84ODU5XzIoVVNIT1JUIGMpCisjZWxzZQor dHhfODg1OV8yKGMpIFVTSE9SVCBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgaWYg KGMgPCAweGEwKQorICAgICAgcmV0dXJuKChDSEFSKShjICYgMHhmZikpOworICAgIHN3aXRjaChj KSB7CisgICAgICBjYXNlIDB4MDBBMDogcmV0dXJuKChDSEFSKTE2MCk7CisgICAgICBjYXNlIDB4 MDBBNDogcmV0dXJuKChDSEFSKTE2NCk7CisgICAgICBjYXNlIDB4MDBBNzogcmV0dXJuKChDSEFS KTE2Nyk7CisgICAgICBjYXNlIDB4MDBBODogcmV0dXJuKChDSEFSKTE2OCk7CisgICAgICBjYXNl IDB4MDBBRDogcmV0dXJuKChDSEFSKTE3Myk7CisgICAgICBjYXNlIDB4MDBCMDogcmV0dXJuKChD SEFSKTE3Nik7CisgICAgICBjYXNlIDB4MDBCNDogcmV0dXJuKChDSEFSKTE4MCk7CisgICAgICBj YXNlIDB4MDBCODogcmV0dXJuKChDSEFSKTE4NCk7CisgICAgICBjYXNlIDB4MDBDMTogcmV0dXJu KChDSEFSKTE5Myk7CisgICAgICBjYXNlIDB4MDBDMjogcmV0dXJuKChDSEFSKTE5NCk7CisgICAg ICBjYXNlIDB4MDBDNDogcmV0dXJuKChDSEFSKTE5Nik7CisgICAgICBjYXNlIDB4MDBDNzogcmV0 dXJuKChDSEFSKTE5OSk7CisgICAgICBjYXNlIDB4MDBDOTogcmV0dXJuKChDSEFSKTIwMSk7Cisg ICAgICBjYXNlIDB4MDBDQjogcmV0dXJuKChDSEFSKTIwMyk7CisgICAgICBjYXNlIDB4MDBDRDog cmV0dXJuKChDSEFSKTIwNSk7CisgICAgICBjYXNlIDB4MDBDRTogcmV0dXJuKChDSEFSKTIwNik7 CisgICAgICBjYXNlIDB4MDBEMzogcmV0dXJuKChDSEFSKTIxMSk7CisgICAgICBjYXNlIDB4MDBE NDogcmV0dXJuKChDSEFSKTIxMik7CisgICAgICBjYXNlIDB4MDBENjogcmV0dXJuKChDSEFSKTIx NCk7CisgICAgICBjYXNlIDB4MDBENzogcmV0dXJuKChDSEFSKTIxNSk7CisgICAgICBjYXNlIDB4 MDBEQTogcmV0dXJuKChDSEFSKTIxOCk7CisgICAgICBjYXNlIDB4MDBEQzogcmV0dXJuKChDSEFS KTIyMCk7CisgICAgICBjYXNlIDB4MDBERDogcmV0dXJuKChDSEFSKTIyMSk7CisgICAgICBjYXNl IDB4MDBERjogcmV0dXJuKChDSEFSKTIyMyk7CisgICAgICBjYXNlIDB4MDBFMTogcmV0dXJuKChD SEFSKTIyNSk7CisgICAgICBjYXNlIDB4MDBFMjogcmV0dXJuKChDSEFSKTIyNik7CisgICAgICBj YXNlIDB4MDBFNDogcmV0dXJuKChDSEFSKTIyOCk7CisgICAgICBjYXNlIDB4MDBFNzogcmV0dXJu KChDSEFSKTIzMSk7CisgICAgICBjYXNlIDB4MDBFOTogcmV0dXJuKChDSEFSKTIzMyk7CisgICAg ICBjYXNlIDB4MDBFQjogcmV0dXJuKChDSEFSKTIzNSk7CisgICAgICBjYXNlIDB4MDBFRDogcmV0 dXJuKChDSEFSKTIzNyk7CisgICAgICBjYXNlIDB4MDBFRTogcmV0dXJuKChDSEFSKTIzOCk7Cisg ICAgICBjYXNlIDB4MDBGMzogcmV0dXJuKChDSEFSKTI0Myk7CisgICAgICBjYXNlIDB4MDBGNDog cmV0dXJuKChDSEFSKTI0NCk7CisgICAgICBjYXNlIDB4MDBGNjogcmV0dXJuKChDSEFSKTI0Nik7 CisgICAgICBjYXNlIDB4MDBGNzogcmV0dXJuKChDSEFSKTI0Nyk7CisgICAgICBjYXNlIDB4MDBG QTogcmV0dXJuKChDSEFSKTI1MCk7CisgICAgICBjYXNlIDB4MDBGQzogcmV0dXJuKChDSEFSKTI1 Mik7CisgICAgICBjYXNlIDB4MDBGRDogcmV0dXJuKChDSEFSKTI1Myk7CisgICAgICBjYXNlIDB4 MDEwMjogcmV0dXJuKChDSEFSKTE5NSk7CisgICAgICBjYXNlIDB4MDEwMzogcmV0dXJuKChDSEFS KTIyNyk7CisgICAgICBjYXNlIDB4MDEwNDogcmV0dXJuKChDSEFSKTE2MSk7CisgICAgICBjYXNl IDB4MDEwNTogcmV0dXJuKChDSEFSKTE3Nyk7CisgICAgICBjYXNlIDB4MDEwNjogcmV0dXJuKChD SEFSKTE5OCk7CisgICAgICBjYXNlIDB4MDEwNzogcmV0dXJuKChDSEFSKTIzMCk7CisgICAgICBj YXNlIDB4MDEwQzogcmV0dXJuKChDSEFSKTIwMCk7CisgICAgICBjYXNlIDB4MDEwRDogcmV0dXJu KChDSEFSKTIzMik7CisgICAgICBjYXNlIDB4MDEwRTogcmV0dXJuKChDSEFSKTIwNyk7CisgICAg ICBjYXNlIDB4MDEwRjogcmV0dXJuKChDSEFSKTIzOSk7CisgICAgICBjYXNlIDB4MDExMDogcmV0 dXJuKChDSEFSKTIwOCk7CisgICAgICBjYXNlIDB4MDExMTogcmV0dXJuKChDSEFSKTI0MCk7Cisg ICAgICBjYXNlIDB4MDExODogcmV0dXJuKChDSEFSKTIwMik7CisgICAgICBjYXNlIDB4MDExOTog cmV0dXJuKChDSEFSKTIzNCk7CisgICAgICBjYXNlIDB4MDExQTogcmV0dXJuKChDSEFSKTIwNCk7 CisgICAgICBjYXNlIDB4MDExQjogcmV0dXJuKChDSEFSKTIzNik7CisgICAgICBjYXNlIDB4MDEz OTogcmV0dXJuKChDSEFSKTE5Nyk7CisgICAgICBjYXNlIDB4MDEzQTogcmV0dXJuKChDSEFSKTIy OSk7CisgICAgICBjYXNlIDB4MDEzRDogcmV0dXJuKChDSEFSKTE2NSk7CisgICAgICBjYXNlIDB4 MDEzRTogcmV0dXJuKChDSEFSKTE4MSk7CisgICAgICBjYXNlIDB4MDE0MTogcmV0dXJuKChDSEFS KTE2Myk7CisgICAgICBjYXNlIDB4MDE0MjogcmV0dXJuKChDSEFSKTE3OSk7CisgICAgICBjYXNl IDB4MDE0MzogcmV0dXJuKChDSEFSKTIwOSk7CisgICAgICBjYXNlIDB4MDE0NDogcmV0dXJuKChD SEFSKTI0MSk7CisgICAgICBjYXNlIDB4MDE0NzogcmV0dXJuKChDSEFSKTIxMCk7CisgICAgICBj YXNlIDB4MDE0ODogcmV0dXJuKChDSEFSKTI0Mik7CisgICAgICBjYXNlIDB4MDE1MDogcmV0dXJu KChDSEFSKTIxMyk7CisgICAgICBjYXNlIDB4MDE1MTogcmV0dXJuKChDSEFSKTI0NSk7CisgICAg ICBjYXNlIDB4MDE1NDogcmV0dXJuKChDSEFSKTE5Mik7CisgICAgICBjYXNlIDB4MDE1NTogcmV0 dXJuKChDSEFSKTIyNCk7CisgICAgICBjYXNlIDB4MDE1ODogcmV0dXJuKChDSEFSKTIxNik7Cisg ICAgICBjYXNlIDB4MDE1OTogcmV0dXJuKChDSEFSKTI0OCk7CisgICAgICBjYXNlIDB4MDE1QTog cmV0dXJuKChDSEFSKTE2Nik7CisgICAgICBjYXNlIDB4MDE1QjogcmV0dXJuKChDSEFSKTE4Mik7 CisgICAgICBjYXNlIDB4MDE1RTogcmV0dXJuKChDSEFSKTE3MCk7CisgICAgICBjYXNlIDB4MDE1 RjogcmV0dXJuKChDSEFSKTE4Nik7CisgICAgICBjYXNlIDB4MDE2MDogcmV0dXJuKChDSEFSKTE2 OSk7CisgICAgICBjYXNlIDB4MDE2MTogcmV0dXJuKChDSEFSKTE4NSk7CisgICAgICBjYXNlIDB4 MDE2MjogcmV0dXJuKChDSEFSKTIyMik7CisgICAgICBjYXNlIDB4MDE2MzogcmV0dXJuKChDSEFS KTI1NCk7CisgICAgICBjYXNlIDB4MDE2NDogcmV0dXJuKChDSEFSKTE3MSk7CisgICAgICBjYXNl IDB4MDE2NTogcmV0dXJuKChDSEFSKTE4Nyk7CisgICAgICBjYXNlIDB4MDE2RTogcmV0dXJuKChD SEFSKTIxNyk7CisgICAgICBjYXNlIDB4MDE2RjogcmV0dXJuKChDSEFSKTI0OSk7CisgICAgICBj YXNlIDB4MDE3MDogcmV0dXJuKChDSEFSKTIxOSk7CisgICAgICBjYXNlIDB4MDE3MTogcmV0dXJu KChDSEFSKTI1MSk7CisgICAgICBjYXNlIDB4MDE3OTogcmV0dXJuKChDSEFSKTE3Mik7CisgICAg ICBjYXNlIDB4MDE3QTogcmV0dXJuKChDSEFSKTE4OCk7CisgICAgICBjYXNlIDB4MDE3QjogcmV0 dXJuKChDSEFSKTE3NSk7CisgICAgICBjYXNlIDB4MDE3QzogcmV0dXJuKChDSEFSKTE5MSk7Cisg ICAgICBjYXNlIDB4MDE3RDogcmV0dXJuKChDSEFSKTE3NCk7CisgICAgICBjYXNlIDB4MDE3RTog cmV0dXJuKChDSEFSKTE5MCk7CisgICAgICBjYXNlIDB4MDJDNzogcmV0dXJuKChDSEFSKTE4Myk7 CisgICAgICBjYXNlIDB4MDJEODogcmV0dXJuKChDSEFSKTE2Mik7CisgICAgICBjYXNlIDB4MDJE OTogcmV0dXJuKChDSEFSKTI1NSk7CisgICAgICBjYXNlIDB4MDJEQjogcmV0dXJuKChDSEFSKTE3 OCk7CisgICAgICBjYXNlIDB4MDJERDogcmV0dXJuKChDSEFSKTE4OSk7CisgICAgICBkZWZhdWx0 OiByZXR1cm4odHhfcHVuYyhjKSk7CisgICAgfQorfQorCitpbnQgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogTGF0aW4tMyAqLworI2lmZGVmIENLX0FOU0lDCit0eF84ODU5 XzMoVVNIT1JUIGMpCisjZWxzZQordHhfODg1OV8zKGMpIFVTSE9SVCBjOworI2VuZGlmIC8qIENL X0FOU0lDICovCit7CisgICAgaWYgKGMgPCAweGEwKQorICAgICAgcmV0dXJuKChDSEFSKShjICYg MHhmZikpOworICAgIHN3aXRjaChjKSB7CisgICAgICBjYXNlIDB4MDBBMDogcmV0dXJuKChDSEFS KTE2MCk7CisgICAgICBjYXNlIDB4MDBBMzogcmV0dXJuKChDSEFSKTE2Myk7CisgICAgICBjYXNl IDB4MDBBNDogcmV0dXJuKChDSEFSKTE2NCk7CisgICAgICBjYXNlIDB4MDBBNzogcmV0dXJuKChD SEFSKTE2Nyk7CisgICAgICBjYXNlIDB4MDBBODogcmV0dXJuKChDSEFSKTE2OCk7CisgICAgICBj YXNlIDB4MDBBRDogcmV0dXJuKChDSEFSKTE3Myk7CisgICAgICBjYXNlIDB4MDBCMDogcmV0dXJu KChDSEFSKTE3Nik7CisgICAgICBjYXNlIDB4MDBCMjogcmV0dXJuKChDSEFSKTE3OCk7CisgICAg ICBjYXNlIDB4MDBCMzogcmV0dXJuKChDSEFSKTE3OSk7CisgICAgICBjYXNlIDB4MDBCNDogcmV0 dXJuKChDSEFSKTE4MCk7CisgICAgICBjYXNlIDB4MDBCNTogcmV0dXJuKChDSEFSKTE4MSk7Cisg ICAgICBjYXNlIDB4MDBCNzogcmV0dXJuKChDSEFSKTE4Myk7CisgICAgICBjYXNlIDB4MDBCODog cmV0dXJuKChDSEFSKTE4NCk7CisgICAgICBjYXNlIDB4MDBCRDogcmV0dXJuKChDSEFSKTE4OSk7 CisgICAgICBjYXNlIDB4MDBDMDogcmV0dXJuKChDSEFSKTE5Mik7CisgICAgICBjYXNlIDB4MDBD MTogcmV0dXJuKChDSEFSKTE5Myk7CisgICAgICBjYXNlIDB4MDBDMjogcmV0dXJuKChDSEFSKTE5 NCk7CisgICAgICBjYXNlIDB4MDBDNDogcmV0dXJuKChDSEFSKTE5Nik7CisgICAgICBjYXNlIDB4 MDBDNzogcmV0dXJuKChDSEFSKTE5OSk7CisgICAgICBjYXNlIDB4MDBDODogcmV0dXJuKChDSEFS KTIwMCk7CisgICAgICBjYXNlIDB4MDBDOTogcmV0dXJuKChDSEFSKTIwMSk7CisgICAgICBjYXNl IDB4MDBDQTogcmV0dXJuKChDSEFSKTIwMik7CisgICAgICBjYXNlIDB4MDBDQjogcmV0dXJuKChD SEFSKTIwMyk7CisgICAgICBjYXNlIDB4MDBDQzogcmV0dXJuKChDSEFSKTIwNCk7CisgICAgICBj YXNlIDB4MDBDRDogcmV0dXJuKChDSEFSKTIwNSk7CisgICAgICBjYXNlIDB4MDBDRTogcmV0dXJu KChDSEFSKTIwNik7CisgICAgICBjYXNlIDB4MDBDRjogcmV0dXJuKChDSEFSKTIwNyk7CisgICAg ICBjYXNlIDB4MDBEMTogcmV0dXJuKChDSEFSKTIwOSk7CisgICAgICBjYXNlIDB4MDBEMjogcmV0 dXJuKChDSEFSKTIxMCk7CisgICAgICBjYXNlIDB4MDBEMzogcmV0dXJuKChDSEFSKTIxMSk7Cisg ICAgICBjYXNlIDB4MDBENDogcmV0dXJuKChDSEFSKTIxMik7CisgICAgICBjYXNlIDB4MDBENjog cmV0dXJuKChDSEFSKTIxNCk7CisgICAgICBjYXNlIDB4MDBENzogcmV0dXJuKChDSEFSKTIxNSk7 CisgICAgICBjYXNlIDB4MDBEOTogcmV0dXJuKChDSEFSKTIxNyk7CisgICAgICBjYXNlIDB4MDBE QTogcmV0dXJuKChDSEFSKTIxOCk7CisgICAgICBjYXNlIDB4MDBEQjogcmV0dXJuKChDSEFSKTIx OSk7CisgICAgICBjYXNlIDB4MDBEQzogcmV0dXJuKChDSEFSKTIyMCk7CisgICAgICBjYXNlIDB4 MDBERjogcmV0dXJuKChDSEFSKTIyMyk7CisgICAgICBjYXNlIDB4MDBFMDogcmV0dXJuKChDSEFS KTIyNCk7CisgICAgICBjYXNlIDB4MDBFMTogcmV0dXJuKChDSEFSKTIyNSk7CisgICAgICBjYXNl IDB4MDBFMjogcmV0dXJuKChDSEFSKTIyNik7CisgICAgICBjYXNlIDB4MDBFNDogcmV0dXJuKChD SEFSKTIyOCk7CisgICAgICBjYXNlIDB4MDBFNzogcmV0dXJuKChDSEFSKTIzMSk7CisgICAgICBj YXNlIDB4MDBFODogcmV0dXJuKChDSEFSKTIzMik7CisgICAgICBjYXNlIDB4MDBFOTogcmV0dXJu KChDSEFSKTIzMyk7CisgICAgICBjYXNlIDB4MDBFQTogcmV0dXJuKChDSEFSKTIzNCk7CisgICAg ICBjYXNlIDB4MDBFQjogcmV0dXJuKChDSEFSKTIzNSk7CisgICAgICBjYXNlIDB4MDBFQzogcmV0 dXJuKChDSEFSKTIzNik7CisgICAgICBjYXNlIDB4MDBFRDogcmV0dXJuKChDSEFSKTIzNyk7Cisg ICAgICBjYXNlIDB4MDBFRTogcmV0dXJuKChDSEFSKTIzOCk7CisgICAgICBjYXNlIDB4MDBFRjog cmV0dXJuKChDSEFSKTIzOSk7CisgICAgICBjYXNlIDB4MDBGMTogcmV0dXJuKChDSEFSKTI0MSk7 CisgICAgICBjYXNlIDB4MDBGMjogcmV0dXJuKChDSEFSKTI0Mik7CisgICAgICBjYXNlIDB4MDBG MzogcmV0dXJuKChDSEFSKTI0Myk7CisgICAgICBjYXNlIDB4MDBGNDogcmV0dXJuKChDSEFSKTI0 NCk7CisgICAgICBjYXNlIDB4MDBGNjogcmV0dXJuKChDSEFSKTI0Nik7CisgICAgICBjYXNlIDB4 MDBGNzogcmV0dXJuKChDSEFSKTI0Nyk7CisgICAgICBjYXNlIDB4MDBGOTogcmV0dXJuKChDSEFS KTI0OSk7CisgICAgICBjYXNlIDB4MDBGQTogcmV0dXJuKChDSEFSKTI1MCk7CisgICAgICBjYXNl IDB4MDBGQjogcmV0dXJuKChDSEFSKTI1MSk7CisgICAgICBjYXNlIDB4MDBGQzogcmV0dXJuKChD SEFSKTI1Mik7CisgICAgICBjYXNlIDB4MDEwODogcmV0dXJuKChDSEFSKTE5OCk7CisgICAgICBj YXNlIDB4MDEwOTogcmV0dXJuKChDSEFSKTIzMCk7CisgICAgICBjYXNlIDB4MDEwQTogcmV0dXJu KChDSEFSKTE5Nyk7CisgICAgICBjYXNlIDB4MDEwQjogcmV0dXJuKChDSEFSKTIyOSk7CisgICAg ICBjYXNlIDB4MDExQzogcmV0dXJuKChDSEFSKTIxNik7CisgICAgICBjYXNlIDB4MDExRDogcmV0 dXJuKChDSEFSKTI0OCk7CisgICAgICBjYXNlIDB4MDExRTogcmV0dXJuKChDSEFSKTE3MSk7Cisg ICAgICBjYXNlIDB4MDExRjogcmV0dXJuKChDSEFSKTE4Nyk7CisgICAgICBjYXNlIDB4MDEyMDog cmV0dXJuKChDSEFSKTIxMyk7CisgICAgICBjYXNlIDB4MDEyMTogcmV0dXJuKChDSEFSKTI0NSk7 CisgICAgICBjYXNlIDB4MDEyNDogcmV0dXJuKChDSEFSKTE2Nik7CisgICAgICBjYXNlIDB4MDEy NTogcmV0dXJuKChDSEFSKTE4Mik7CisgICAgICBjYXNlIDB4MDEyNjogcmV0dXJuKChDSEFSKTE2 MSk7CisgICAgICBjYXNlIDB4MDEyNzogcmV0dXJuKChDSEFSKTE3Nyk7CisgICAgICBjYXNlIDB4 MDEzMDogcmV0dXJuKChDSEFSKTE2OSk7CisgICAgICBjYXNlIDB4MDEzMTogcmV0dXJuKChDSEFS KTE4NSk7CisgICAgICBjYXNlIDB4MDEzNDogcmV0dXJuKChDSEFSKTE3Mik7CisgICAgICBjYXNl IDB4MDEzNTogcmV0dXJuKChDSEFSKTE4OCk7CisgICAgICBjYXNlIDB4MDE1QzogcmV0dXJuKChD SEFSKTIyMik7CisgICAgICBjYXNlIDB4MDE1RDogcmV0dXJuKChDSEFSKTI1NCk7CisgICAgICBj YXNlIDB4MDE1RTogcmV0dXJuKChDSEFSKTE3MCk7CisgICAgICBjYXNlIDB4MDE1RjogcmV0dXJu KChDSEFSKTE4Nik7CisgICAgICBjYXNlIDB4MDE2QzogcmV0dXJuKChDSEFSKTIyMSk7CisgICAg ICBjYXNlIDB4MDE2RDogcmV0dXJuKChDSEFSKTI1Myk7CisgICAgICBjYXNlIDB4MDE3QjogcmV0 dXJuKChDSEFSKTE3NSk7CisgICAgICBjYXNlIDB4MDE3QzogcmV0dXJuKChDSEFSKTE5MSk7Cisg ICAgICBjYXNlIDB4MDJEODogcmV0dXJuKChDSEFSKTE2Mik7CisgICAgICBjYXNlIDB4MDJEOTog cmV0dXJuKChDSEFSKTI1NSk7CisgICAgICBkZWZhdWx0OiByZXR1cm4odHhfcHVuYyhjKSk7Cisg ICAgfQorfQorCitpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTGF0 aW4tNCAqLworI2lmZGVmIENLX0FOU0lDCit0eF84ODU5XzQoVVNIT1JUIGMpCisjZWxzZQordHhf ODg1OV80KGMpIFVTSE9SVCBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgaWYgKGMg PCAweGEwKQorICAgICAgcmV0dXJuKChDSEFSKShjICYgMHhmZikpOworICAgIHN3aXRjaChjKSB7 CisgICAgICBjYXNlIDB4MDBBMDogcmV0dXJuKChDSEFSKTE2MCk7CisgICAgICBjYXNlIDB4MDBB NDogcmV0dXJuKChDSEFSKTE2NCk7CisgICAgICBjYXNlIDB4MDBBNzogcmV0dXJuKChDSEFSKTE2 Nyk7CisgICAgICBjYXNlIDB4MDBBODogcmV0dXJuKChDSEFSKTE2OCk7CisgICAgICBjYXNlIDB4 MDBBRDogcmV0dXJuKChDSEFSKTE3Myk7CisgICAgICBjYXNlIDB4MDBBRjogcmV0dXJuKChDSEFS KTE3NSk7CisgICAgICBjYXNlIDB4MDBCMDogcmV0dXJuKChDSEFSKTE3Nik7CisgICAgICBjYXNl IDB4MDBCNDogcmV0dXJuKChDSEFSKTE4MCk7CisgICAgICBjYXNlIDB4MDBCODogcmV0dXJuKChD SEFSKTE4NCk7CisgICAgICBjYXNlIDB4MDBDMTogcmV0dXJuKChDSEFSKTE5Myk7CisgICAgICBj YXNlIDB4MDBDMjogcmV0dXJuKChDSEFSKTE5NCk7CisgICAgICBjYXNlIDB4MDBDMzogcmV0dXJu KChDSEFSKTE5NSk7CisgICAgICBjYXNlIDB4MDBDNDogcmV0dXJuKChDSEFSKTE5Nik7CisgICAg ICBjYXNlIDB4MDBDNTogcmV0dXJuKChDSEFSKTE5Nyk7CisgICAgICBjYXNlIDB4MDBDNjogcmV0 dXJuKChDSEFSKTE5OCk7CisgICAgICBjYXNlIDB4MDBDOTogcmV0dXJuKChDSEFSKTIwMSk7Cisg ICAgICBjYXNlIDB4MDBDQjogcmV0dXJuKChDSEFSKTIwMyk7CisgICAgICBjYXNlIDB4MDBDRDog cmV0dXJuKChDSEFSKTIwNSk7CisgICAgICBjYXNlIDB4MDBDRTogcmV0dXJuKChDSEFSKTIwNik7 CisgICAgICBjYXNlIDB4MDBENDogcmV0dXJuKChDSEFSKTIxMik7CisgICAgICBjYXNlIDB4MDBE NTogcmV0dXJuKChDSEFSKTIxMyk7CisgICAgICBjYXNlIDB4MDBENjogcmV0dXJuKChDSEFSKTIx NCk7CisgICAgICBjYXNlIDB4MDBENzogcmV0dXJuKChDSEFSKTIxNSk7CisgICAgICBjYXNlIDB4 MDBEODogcmV0dXJuKChDSEFSKTIxNik7CisgICAgICBjYXNlIDB4MDBEQTogcmV0dXJuKChDSEFS KTIxOCk7CisgICAgICBjYXNlIDB4MDBEQjogcmV0dXJuKChDSEFSKTIxOSk7CisgICAgICBjYXNl IDB4MDBEQzogcmV0dXJuKChDSEFSKTIyMCk7CisgICAgICBjYXNlIDB4MDBERjogcmV0dXJuKChD SEFSKTIyMyk7CisgICAgICBjYXNlIDB4MDBFMTogcmV0dXJuKChDSEFSKTIyNSk7CisgICAgICBj YXNlIDB4MDBFMjogcmV0dXJuKChDSEFSKTIyNik7CisgICAgICBjYXNlIDB4MDBFMzogcmV0dXJu KChDSEFSKTIyNyk7CisgICAgICBjYXNlIDB4MDBFNDogcmV0dXJuKChDSEFSKTIyOCk7CisgICAg ICBjYXNlIDB4MDBFNTogcmV0dXJuKChDSEFSKTIyOSk7CisgICAgICBjYXNlIDB4MDBFNjogcmV0 dXJuKChDSEFSKTIzMCk7CisgICAgICBjYXNlIDB4MDBFOTogcmV0dXJuKChDSEFSKTIzMyk7Cisg ICAgICBjYXNlIDB4MDBFQjogcmV0dXJuKChDSEFSKTIzNSk7CisgICAgICBjYXNlIDB4MDBFRDog cmV0dXJuKChDSEFSKTIzNyk7CisgICAgICBjYXNlIDB4MDBFRTogcmV0dXJuKChDSEFSKTIzOCk7 CisgICAgICBjYXNlIDB4MDBGNDogcmV0dXJuKChDSEFSKTI0NCk7CisgICAgICBjYXNlIDB4MDBG NTogcmV0dXJuKChDSEFSKTI0NSk7CisgICAgICBjYXNlIDB4MDBGNjogcmV0dXJuKChDSEFSKTI0 Nik7CisgICAgICBjYXNlIDB4MDBGNzogcmV0dXJuKChDSEFSKTI0Nyk7CisgICAgICBjYXNlIDB4 MDBGODogcmV0dXJuKChDSEFSKTI0OCk7CisgICAgICBjYXNlIDB4MDBGQTogcmV0dXJuKChDSEFS KTI1MCk7CisgICAgICBjYXNlIDB4MDBGQjogcmV0dXJuKChDSEFSKTI1MSk7CisgICAgICBjYXNl IDB4MDBGQzogcmV0dXJuKChDSEFSKTI1Mik7CisgICAgICBjYXNlIDB4MDEwMDogcmV0dXJuKChD SEFSKTE5Mik7CisgICAgICBjYXNlIDB4MDEwMTogcmV0dXJuKChDSEFSKTIyNCk7CisgICAgICBj YXNlIDB4MDEwNDogcmV0dXJuKChDSEFSKTE2MSk7CisgICAgICBjYXNlIDB4MDEwNTogcmV0dXJu KChDSEFSKTE3Nyk7CisgICAgICBjYXNlIDB4MDEwQzogcmV0dXJuKChDSEFSKTIwMCk7CisgICAg ICBjYXNlIDB4MDEwRDogcmV0dXJuKChDSEFSKTIzMik7CisgICAgICBjYXNlIDB4MDExMDogcmV0 dXJuKChDSEFSKTIwOCk7CisgICAgICBjYXNlIDB4MDExMTogcmV0dXJuKChDSEFSKTI0MCk7Cisg ICAgICBjYXNlIDB4MDExMjogcmV0dXJuKChDSEFSKTE3MCk7CisgICAgICBjYXNlIDB4MDExMzog cmV0dXJuKChDSEFSKTE4Nik7CisgICAgICBjYXNlIDB4MDExNjogcmV0dXJuKChDSEFSKTIwNCk7 CisgICAgICBjYXNlIDB4MDExNzogcmV0dXJuKChDSEFSKTIzNik7CisgICAgICBjYXNlIDB4MDEx ODogcmV0dXJuKChDSEFSKTIwMik7CisgICAgICBjYXNlIDB4MDExOTogcmV0dXJuKChDSEFSKTIz NCk7CisgICAgICBjYXNlIDB4MDEyMjogcmV0dXJuKChDSEFSKTE3MSk7CisgICAgICBjYXNlIDB4 MDEyMzogcmV0dXJuKChDSEFSKTE4Nyk7CisgICAgICBjYXNlIDB4MDEyODogcmV0dXJuKChDSEFS KTE2NSk7CisgICAgICBjYXNlIDB4MDEyOTogcmV0dXJuKChDSEFSKTE4MSk7CisgICAgICBjYXNl IDB4MDEyQTogcmV0dXJuKChDSEFSKTIwNyk7CisgICAgICBjYXNlIDB4MDEyQjogcmV0dXJuKChD SEFSKTIzOSk7CisgICAgICBjYXNlIDB4MDEyRTogcmV0dXJuKChDSEFSKTE5OSk7CisgICAgICBj YXNlIDB4MDEyRjogcmV0dXJuKChDSEFSKTIzMSk7CisgICAgICBjYXNlIDB4MDEzNjogcmV0dXJu KChDSEFSKTIxMSk7CisgICAgICBjYXNlIDB4MDEzNzogcmV0dXJuKChDSEFSKTI0Myk7CisgICAg ICBjYXNlIDB4MDEzODogcmV0dXJuKChDSEFSKTE2Mik7CisgICAgICBjYXNlIDB4MDEzQjogcmV0 dXJuKChDSEFSKTE2Nik7CisgICAgICBjYXNlIDB4MDEzQzogcmV0dXJuKChDSEFSKTE4Mik7Cisg ICAgICBjYXNlIDB4MDE0NTogcmV0dXJuKChDSEFSKTIwOSk7CisgICAgICBjYXNlIDB4MDE0Njog cmV0dXJuKChDSEFSKTI0MSk7CisgICAgICBjYXNlIDB4MDE0QTogcmV0dXJuKChDSEFSKTE4OSk7 CisgICAgICBjYXNlIDB4MDE0QjogcmV0dXJuKChDSEFSKTE5MSk7CisgICAgICBjYXNlIDB4MDE0 QzogcmV0dXJuKChDSEFSKTIxMCk7CisgICAgICBjYXNlIDB4MDE0RDogcmV0dXJuKChDSEFSKTI0 Mik7CisgICAgICBjYXNlIDB4MDE1NjogcmV0dXJuKChDSEFSKTE2Myk7CisgICAgICBjYXNlIDB4 MDE1NzogcmV0dXJuKChDSEFSKTE3OSk7CisgICAgICBjYXNlIDB4MDE2MDogcmV0dXJuKChDSEFS KTE2OSk7CisgICAgICBjYXNlIDB4MDE2MTogcmV0dXJuKChDSEFSKTE4NSk7CisgICAgICBjYXNl IDB4MDE2NjogcmV0dXJuKChDSEFSKTE3Mik7CisgICAgICBjYXNlIDB4MDE2NzogcmV0dXJuKChD SEFSKTE4OCk7CisgICAgICBjYXNlIDB4MDE2ODogcmV0dXJuKChDSEFSKTIyMSk7CisgICAgICBj YXNlIDB4MDE2OTogcmV0dXJuKChDSEFSKTI1Myk7CisgICAgICBjYXNlIDB4MDE2QTogcmV0dXJu KChDSEFSKTIyMik7CisgICAgICBjYXNlIDB4MDE2QjogcmV0dXJuKChDSEFSKTI1NCk7CisgICAg ICBjYXNlIDB4MDE3MjogcmV0dXJuKChDSEFSKTIxNyk7CisgICAgICBjYXNlIDB4MDE3MzogcmV0 dXJuKChDSEFSKTI0OSk7CisgICAgICBjYXNlIDB4MDE3RDogcmV0dXJuKChDSEFSKTE3NCk7Cisg ICAgICBjYXNlIDB4MDE3RTogcmV0dXJuKChDSEFSKTE5MCk7CisgICAgICBjYXNlIDB4MDJDNzog cmV0dXJuKChDSEFSKTE4Myk7CisgICAgICBjYXNlIDB4MDJEOTogcmV0dXJuKChDSEFSKTI1NSk7 CisgICAgICBjYXNlIDB4MDJEQjogcmV0dXJuKChDSEFSKTE3OCk7CisgICAgICBkZWZhdWx0OiBy ZXR1cm4odHhfcHVuYyhjKSk7CisgICAgfQorfQorCitpbnQgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogSVNPIDg4NTktNSAoTGF0aW4vQ3lyaWxsaWMpICovCisjaWZkZWYg Q0tfQU5TSUMKK3R4Xzg4NTlfNShVU0hPUlQgYykKKyNlbHNlCit0eF84ODU5XzUoYykgVVNIT1JU IGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAgICBpZiAoYyA8IDB4YTApICAgICAgICAg ICAgICAgICAgICAgICAvKiAoODg1OS01IGlzIG5vdCBMYXRpbi01ISkgKi8KKyAgICAgIHJldHVy bigoQ0hBUikoYyAmIDB4ZmYpKTsKKyAgICBzd2l0Y2goYykgeworICAgICAgY2FzZSAweDAwQTA6 IHJldHVybigoQ0hBUikxNjApOworICAgICAgY2FzZSAweDAwQTc6IHJldHVybigoQ0hBUikyNTMp OworICAgICAgY2FzZSAweDAwQUQ6IHJldHVybigoQ0hBUikxNzMpOworICAgICAgY2FzZSAweDA0 MDE6IHJldHVybigoQ0hBUikxNjEpOworICAgICAgY2FzZSAweDA0MDI6IHJldHVybigoQ0hBUikx NjIpOworICAgICAgY2FzZSAweDA0MDM6IHJldHVybigoQ0hBUikxNjMpOworICAgICAgY2FzZSAw eDA0MDQ6IHJldHVybigoQ0hBUikxNjQpOworICAgICAgY2FzZSAweDA0MDU6IHJldHVybigoQ0hB UikxNjUpOworICAgICAgY2FzZSAweDA0MDY6IHJldHVybigoQ0hBUikxNjYpOworICAgICAgY2Fz ZSAweDA0MDc6IHJldHVybigoQ0hBUikxNjcpOworICAgICAgY2FzZSAweDA0MDg6IHJldHVybigo Q0hBUikxNjgpOworICAgICAgY2FzZSAweDA0MDk6IHJldHVybigoQ0hBUikxNjkpOworICAgICAg Y2FzZSAweDA0MEE6IHJldHVybigoQ0hBUikxNzApOworICAgICAgY2FzZSAweDA0MEI6IHJldHVy bigoQ0hBUikxNzEpOworICAgICAgY2FzZSAweDA0MEM6IHJldHVybigoQ0hBUikxNzIpOworICAg ICAgY2FzZSAweDA0MEU6IHJldHVybigoQ0hBUikxNzQpOworICAgICAgY2FzZSAweDA0MEY6IHJl dHVybigoQ0hBUikxNzUpOworICAgICAgY2FzZSAweDA0MTA6IHJldHVybigoQ0hBUikxNzYpOwor ICAgICAgY2FzZSAweDA0MTE6IHJldHVybigoQ0hBUikxNzcpOworICAgICAgY2FzZSAweDA0MTI6 IHJldHVybigoQ0hBUikxNzgpOworICAgICAgY2FzZSAweDA0MTM6IHJldHVybigoQ0hBUikxNzkp OworICAgICAgY2FzZSAweDA0MTQ6IHJldHVybigoQ0hBUikxODApOworICAgICAgY2FzZSAweDA0 MTU6IHJldHVybigoQ0hBUikxODEpOworICAgICAgY2FzZSAweDA0MTY6IHJldHVybigoQ0hBUikx ODIpOworICAgICAgY2FzZSAweDA0MTc6IHJldHVybigoQ0hBUikxODMpOworICAgICAgY2FzZSAw eDA0MTg6IHJldHVybigoQ0hBUikxODQpOworICAgICAgY2FzZSAweDA0MTk6IHJldHVybigoQ0hB UikxODUpOworICAgICAgY2FzZSAweDA0MUE6IHJldHVybigoQ0hBUikxODYpOworICAgICAgY2Fz ZSAweDA0MUI6IHJldHVybigoQ0hBUikxODcpOworICAgICAgY2FzZSAweDA0MUM6IHJldHVybigo Q0hBUikxODgpOworICAgICAgY2FzZSAweDA0MUQ6IHJldHVybigoQ0hBUikxODkpOworICAgICAg Y2FzZSAweDA0MUU6IHJldHVybigoQ0hBUikxOTApOworICAgICAgY2FzZSAweDA0MUY6IHJldHVy bigoQ0hBUikxOTEpOworICAgICAgY2FzZSAweDA0MjA6IHJldHVybigoQ0hBUikxOTIpOworICAg ICAgY2FzZSAweDA0MjE6IHJldHVybigoQ0hBUikxOTMpOworICAgICAgY2FzZSAweDA0MjI6IHJl dHVybigoQ0hBUikxOTQpOworICAgICAgY2FzZSAweDA0MjM6IHJldHVybigoQ0hBUikxOTUpOwor ICAgICAgY2FzZSAweDA0MjQ6IHJldHVybigoQ0hBUikxOTYpOworICAgICAgY2FzZSAweDA0MjU6 IHJldHVybigoQ0hBUikxOTcpOworICAgICAgY2FzZSAweDA0MjY6IHJldHVybigoQ0hBUikxOTgp OworICAgICAgY2FzZSAweDA0Mjc6IHJldHVybigoQ0hBUikxOTkpOworICAgICAgY2FzZSAweDA0 Mjg6IHJldHVybigoQ0hBUikyMDApOworICAgICAgY2FzZSAweDA0Mjk6IHJldHVybigoQ0hBUiky MDEpOworICAgICAgY2FzZSAweDA0MkE6IHJldHVybigoQ0hBUikyMDIpOworICAgICAgY2FzZSAw eDA0MkI6IHJldHVybigoQ0hBUikyMDMpOworICAgICAgY2FzZSAweDA0MkM6IHJldHVybigoQ0hB UikyMDQpOworICAgICAgY2FzZSAweDA0MkQ6IHJldHVybigoQ0hBUikyMDUpOworICAgICAgY2Fz ZSAweDA0MkU6IHJldHVybigoQ0hBUikyMDYpOworICAgICAgY2FzZSAweDA0MkY6IHJldHVybigo Q0hBUikyMDcpOworICAgICAgY2FzZSAweDA0MzA6IHJldHVybigoQ0hBUikyMDgpOworICAgICAg Y2FzZSAweDA0MzE6IHJldHVybigoQ0hBUikyMDkpOworICAgICAgY2FzZSAweDA0MzI6IHJldHVy bigoQ0hBUikyMTApOworICAgICAgY2FzZSAweDA0MzM6IHJldHVybigoQ0hBUikyMTEpOworICAg ICAgY2FzZSAweDA0MzQ6IHJldHVybigoQ0hBUikyMTIpOworICAgICAgY2FzZSAweDA0MzU6IHJl dHVybigoQ0hBUikyMTMpOworICAgICAgY2FzZSAweDA0MzY6IHJldHVybigoQ0hBUikyMTQpOwor ICAgICAgY2FzZSAweDA0Mzc6IHJldHVybigoQ0hBUikyMTUpOworICAgICAgY2FzZSAweDA0Mzg6 IHJldHVybigoQ0hBUikyMTYpOworICAgICAgY2FzZSAweDA0Mzk6IHJldHVybigoQ0hBUikyMTcp OworICAgICAgY2FzZSAweDA0M0E6IHJldHVybigoQ0hBUikyMTgpOworICAgICAgY2FzZSAweDA0 M0I6IHJldHVybigoQ0hBUikyMTkpOworICAgICAgY2FzZSAweDA0M0M6IHJldHVybigoQ0hBUiky MjApOworICAgICAgY2FzZSAweDA0M0Q6IHJldHVybigoQ0hBUikyMjEpOworICAgICAgY2FzZSAw eDA0M0U6IHJldHVybigoQ0hBUikyMjIpOworICAgICAgY2FzZSAweDA0M0Y6IHJldHVybigoQ0hB UikyMjMpOworICAgICAgY2FzZSAweDA0NDA6IHJldHVybigoQ0hBUikyMjQpOworICAgICAgY2Fz ZSAweDA0NDE6IHJldHVybigoQ0hBUikyMjUpOworICAgICAgY2FzZSAweDA0NDI6IHJldHVybigo Q0hBUikyMjYpOworICAgICAgY2FzZSAweDA0NDM6IHJldHVybigoQ0hBUikyMjcpOworICAgICAg Y2FzZSAweDA0NDQ6IHJldHVybigoQ0hBUikyMjgpOworICAgICAgY2FzZSAweDA0NDU6IHJldHVy bigoQ0hBUikyMjkpOworICAgICAgY2FzZSAweDA0NDY6IHJldHVybigoQ0hBUikyMzApOworICAg ICAgY2FzZSAweDA0NDc6IHJldHVybigoQ0hBUikyMzEpOworICAgICAgY2FzZSAweDA0NDg6IHJl dHVybigoQ0hBUikyMzIpOworICAgICAgY2FzZSAweDA0NDk6IHJldHVybigoQ0hBUikyMzMpOwor ICAgICAgY2FzZSAweDA0NEE6IHJldHVybigoQ0hBUikyMzQpOworICAgICAgY2FzZSAweDA0NEI6 IHJldHVybigoQ0hBUikyMzUpOworICAgICAgY2FzZSAweDA0NEM6IHJldHVybigoQ0hBUikyMzYp OworICAgICAgY2FzZSAweDA0NEQ6IHJldHVybigoQ0hBUikyMzcpOworICAgICAgY2FzZSAweDA0 NEU6IHJldHVybigoQ0hBUikyMzgpOworICAgICAgY2FzZSAweDA0NEY6IHJldHVybigoQ0hBUiky MzkpOworICAgICAgY2FzZSAweDA0NTE6IHJldHVybigoQ0hBUikyNDEpOworICAgICAgY2FzZSAw eDA0NTI6IHJldHVybigoQ0hBUikyNDIpOworICAgICAgY2FzZSAweDA0NTM6IHJldHVybigoQ0hB UikyNDMpOworICAgICAgY2FzZSAweDA0NTQ6IHJldHVybigoQ0hBUikyNDQpOworICAgICAgY2Fz ZSAweDA0NTU6IHJldHVybigoQ0hBUikyNDUpOworICAgICAgY2FzZSAweDA0NTY6IHJldHVybigo Q0hBUikyNDYpOworICAgICAgY2FzZSAweDA0NTc6IHJldHVybigoQ0hBUikyNDcpOworICAgICAg Y2FzZSAweDA0NTg6IHJldHVybigoQ0hBUikyNDgpOworICAgICAgY2FzZSAweDA0NTk6IHJldHVy bigoQ0hBUikyNDkpOworICAgICAgY2FzZSAweDA0NUE6IHJldHVybigoQ0hBUikyNTApOworICAg ICAgY2FzZSAweDA0NUI6IHJldHVybigoQ0hBUikyNTEpOworICAgICAgY2FzZSAweDA0NUM6IHJl dHVybigoQ0hBUikyNTIpOworICAgICAgY2FzZSAweDA0NUU6IHJldHVybigoQ0hBUikyNTQpOwor ICAgICAgY2FzZSAweDA0NUY6IHJldHVybigoQ0hBUikyNTUpOworICAgICAgY2FzZSAweDIxMTY6 IHJldHVybigoQ0hBUikyNDApOworICAgICAgZGVmYXVsdDogcmV0dXJuKHR4X3B1bmMoYykpOwor ICAgIH0KK30KKworaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIElT TyA4ODU5LTYgKExhdGluL0FyYWJpYykgKi8KKyNpZmRlZiBDS19BTlNJQwordHhfODg1OV82KFVT SE9SVCBjKQorI2Vsc2UKK3R4Xzg4NTlfNihjKSBVU0hPUlQgYzsKKyNlbmRpZiAvKiBDS19BTlNJ QyAqLworeworICAgIGlmIChjIDwgMHhhMCkgICAgICAgICAgICAgICAgICAgICAgIC8qICg4ODU5 LTYgIT0gTGF0aW4tNikgKi8KKyAgICAgIHJldHVybigoQ0hBUikoYyAmIDB4ZmYpKTsKKyAgICBz d2l0Y2goYykgeworICAgICAgY2FzZSAweDAwQTA6IHJldHVybigoQ0hBUikxNjApOworICAgICAg Y2FzZSAweDAwQTQ6IHJldHVybigoQ0hBUikxNjQpOworICAgICAgY2FzZSAweDAwQUQ6IHJldHVy bigoQ0hBUikxNzMpOworICAgICAgY2FzZSAweDA2MEM6IHJldHVybigoQ0hBUikxNzIpOworICAg ICAgY2FzZSAweDA2MUI6IHJldHVybigoQ0hBUikxODcpOworICAgICAgY2FzZSAweDA2MUY6IHJl dHVybigoQ0hBUikxOTEpOworICAgICAgY2FzZSAweDA2MjE6IHJldHVybigoQ0hBUikxOTMpOwor ICAgICAgY2FzZSAweDA2MjI6IHJldHVybigoQ0hBUikxOTQpOworICAgICAgY2FzZSAweDA2MjM6 IHJldHVybigoQ0hBUikxOTUpOworICAgICAgY2FzZSAweDA2MjQ6IHJldHVybigoQ0hBUikxOTYp OworICAgICAgY2FzZSAweDA2MjU6IHJldHVybigoQ0hBUikxOTcpOworICAgICAgY2FzZSAweDA2 MjY6IHJldHVybigoQ0hBUikxOTgpOworICAgICAgY2FzZSAweDA2Mjc6IHJldHVybigoQ0hBUikx OTkpOworICAgICAgY2FzZSAweDA2Mjg6IHJldHVybigoQ0hBUikyMDApOworICAgICAgY2FzZSAw eDA2Mjk6IHJldHVybigoQ0hBUikyMDEpOworICAgICAgY2FzZSAweDA2MkE6IHJldHVybigoQ0hB UikyMDIpOworICAgICAgY2FzZSAweDA2MkI6IHJldHVybigoQ0hBUikyMDMpOworICAgICAgY2Fz ZSAweDA2MkM6IHJldHVybigoQ0hBUikyMDQpOworICAgICAgY2FzZSAweDA2MkQ6IHJldHVybigo Q0hBUikyMDUpOworICAgICAgY2FzZSAweDA2MkU6IHJldHVybigoQ0hBUikyMDYpOworICAgICAg Y2FzZSAweDA2MkY6IHJldHVybigoQ0hBUikyMDcpOworICAgICAgY2FzZSAweDA2MzA6IHJldHVy bigoQ0hBUikyMDgpOworICAgICAgY2FzZSAweDA2MzE6IHJldHVybigoQ0hBUikyMDkpOworICAg ICAgY2FzZSAweDA2MzI6IHJldHVybigoQ0hBUikyMTApOworICAgICAgY2FzZSAweDA2MzM6IHJl dHVybigoQ0hBUikyMTEpOworICAgICAgY2FzZSAweDA2MzQ6IHJldHVybigoQ0hBUikyMTIpOwor ICAgICAgY2FzZSAweDA2MzU6IHJldHVybigoQ0hBUikyMTMpOworICAgICAgY2FzZSAweDA2MzY6 IHJldHVybigoQ0hBUikyMTQpOworICAgICAgY2FzZSAweDA2Mzc6IHJldHVybigoQ0hBUikyMTUp OworICAgICAgY2FzZSAweDA2Mzg6IHJldHVybigoQ0hBUikyMTYpOworICAgICAgY2FzZSAweDA2 Mzk6IHJldHVybigoQ0hBUikyMTcpOworICAgICAgY2FzZSAweDA2M0E6IHJldHVybigoQ0hBUiky MTgpOworICAgICAgY2FzZSAweDA2NDA6IHJldHVybigoQ0hBUikyMjQpOworICAgICAgY2FzZSAw eDA2NDE6IHJldHVybigoQ0hBUikyMjUpOworICAgICAgY2FzZSAweDA2NDI6IHJldHVybigoQ0hB UikyMjYpOworICAgICAgY2FzZSAweDA2NDM6IHJldHVybigoQ0hBUikyMjcpOworICAgICAgY2Fz ZSAweDA2NDQ6IHJldHVybigoQ0hBUikyMjgpOworICAgICAgY2FzZSAweDA2NDU6IHJldHVybigo Q0hBUikyMjkpOworICAgICAgY2FzZSAweDA2NDY6IHJldHVybigoQ0hBUikyMzApOworICAgICAg Y2FzZSAweDA2NDc6IHJldHVybigoQ0hBUikyMzEpOworICAgICAgY2FzZSAweDA2NDg6IHJldHVy bigoQ0hBUikyMzIpOworICAgICAgY2FzZSAweDA2NDk6IHJldHVybigoQ0hBUikyMzMpOworICAg ICAgY2FzZSAweDA2NEE6IHJldHVybigoQ0hBUikyMzQpOworICAgICAgY2FzZSAweDA2NEI6IHJl dHVybigoQ0hBUikyMzUpOworICAgICAgY2FzZSAweDA2NEM6IHJldHVybigoQ0hBUikyMzYpOwor ICAgICAgY2FzZSAweDA2NEQ6IHJldHVybigoQ0hBUikyMzcpOworICAgICAgY2FzZSAweDA2NEU6 IHJldHVybigoQ0hBUikyMzgpOworICAgICAgY2FzZSAweDA2NEY6IHJldHVybigoQ0hBUikyMzkp OworICAgICAgY2FzZSAweDA2NTA6IHJldHVybigoQ0hBUikyNDApOworICAgICAgY2FzZSAweDA2 NTE6IHJldHVybigoQ0hBUikyNDEpOworICAgICAgY2FzZSAweDA2NTI6IHJldHVybigoQ0hBUiky NDIpOworICAgICAgZGVmYXVsdDogcmV0dXJuKHR4X3B1bmMoYykpOworICAgIH0KK30KKworaW50 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIElTTyA4ODU5LTcgKExhdGlu L0dyZWVrKSAqLworI2lmZGVmIENLX0FOU0lDCit0eF84ODU5XzcoVVNIT1JUIGMpCisjZWxzZQor dHhfODg1OV83KGMpIFVTSE9SVCBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgaWYg KGMgPCAweGEwKQorICAgICAgcmV0dXJuKChDSEFSKShjICYgMHhmZikpOworICAgIHN3aXRjaChj KSB7CisgICAgICAgIGNhc2UgMHgwMGEwOiByZXR1cm4oKENIQVIpMTYwKTsKKyAgICAgICAgY2Fz ZSAweDAwYTM6IHJldHVybigoQ0hBUikxNjMpOworICAgICAgICBjYXNlIDB4MDBhNjogcmV0dXJu KChDSEFSKTE2Nik7CisgICAgICAgIGNhc2UgMHgwMGE3OiByZXR1cm4oKENIQVIpMTY3KTsKKyAg ICAgICAgY2FzZSAweDAwYTg6IHJldHVybigoQ0hBUikxNjgpOworICAgICAgICBjYXNlIDB4MDBh OTogcmV0dXJuKChDSEFSKTE2OSk7CisgICAgICAgIGNhc2UgMHgwMGFiOiByZXR1cm4oKENIQVIp MTcxKTsKKyAgICAgICAgY2FzZSAweDAwYWM6IHJldHVybigoQ0hBUikxNzIpOworICAgICAgICBj YXNlIDB4MDBhZDogcmV0dXJuKChDSEFSKTE3Myk7CisgICAgICAgIGNhc2UgMHgwMGIwOiByZXR1 cm4oKENIQVIpMTc2KTsKKyAgICAgICAgY2FzZSAweDAwYjE6IHJldHVybigoQ0hBUikxNzcpOwor ICAgICAgICBjYXNlIDB4MDBiMjogcmV0dXJuKChDSEFSKTE3OCk7CisgICAgICAgIGNhc2UgMHgw MGIzOiByZXR1cm4oKENIQVIpMTc5KTsKKyAgICAgICAgY2FzZSAweDAwYjc6IHJldHVybigoQ0hB UikxODMpOworICAgICAgICBjYXNlIDB4MDBiYjogcmV0dXJuKChDSEFSKTE4Nyk7CisgICAgICAg IGNhc2UgMHgwMGJkOiByZXR1cm4oKENIQVIpMTg5KTsKKyAgICAgICAgY2FzZSAweDAyYmM6IHJl dHVybigoQ0hBUikxNjIpOworICAgICAgICBjYXNlIDB4MDJiZDogcmV0dXJuKChDSEFSKTE2MSk7 CisgICAgICAgIGNhc2UgMHgwMzg0OiByZXR1cm4oKENIQVIpMTgwKTsKKyAgICAgICAgY2FzZSAw eDAzODU6IHJldHVybigoQ0hBUikxODEpOworICAgICAgICBjYXNlIDB4MDM4NjogcmV0dXJuKChD SEFSKTE4Mik7CisgICAgICAgIGNhc2UgMHgwMzg4OiByZXR1cm4oKENIQVIpMTg0KTsKKyAgICAg ICAgY2FzZSAweDAzODk6IHJldHVybigoQ0hBUikxODUpOworICAgICAgICBjYXNlIDB4MDM4YTog cmV0dXJuKChDSEFSKTE4Nik7CisgICAgICAgIGNhc2UgMHgwMzhjOiByZXR1cm4oKENIQVIpMTg4 KTsKKyAgICAgICAgY2FzZSAweDAzOGU6IHJldHVybigoQ0hBUikxOTApOworICAgICAgICBjYXNl IDB4MDM4ZjogcmV0dXJuKChDSEFSKTE5MSk7CisgICAgICAgIGNhc2UgMHgwMzkwOiByZXR1cm4o KENIQVIpMTkyKTsKKyAgICAgICAgY2FzZSAweDAzOTE6IHJldHVybigoQ0hBUikxOTMpOworICAg ICAgICBjYXNlIDB4MDM5MjogcmV0dXJuKChDSEFSKTE5NCk7CisgICAgICAgIGNhc2UgMHgwMzkz OiByZXR1cm4oKENIQVIpMTk1KTsKKyAgICAgICAgY2FzZSAweDAzOTQ6IHJldHVybigoQ0hBUikx OTYpOworICAgICAgICBjYXNlIDB4MDM5NTogcmV0dXJuKChDSEFSKTE5Nyk7CisgICAgICAgIGNh c2UgMHgwMzk2OiByZXR1cm4oKENIQVIpMTk4KTsKKyAgICAgICAgY2FzZSAweDAzOTc6IHJldHVy bigoQ0hBUikxOTkpOworICAgICAgICBjYXNlIDB4MDM5ODogcmV0dXJuKChDSEFSKTIwMCk7Cisg ICAgICAgIGNhc2UgMHgwMzk5OiByZXR1cm4oKENIQVIpMjAxKTsKKyAgICAgICAgY2FzZSAweDAz OWE6IHJldHVybigoQ0hBUikyMDIpOworICAgICAgICBjYXNlIDB4MDM5YjogcmV0dXJuKChDSEFS KTIwMyk7CisgICAgICAgIGNhc2UgMHgwMzljOiByZXR1cm4oKENIQVIpMjA0KTsKKyAgICAgICAg Y2FzZSAweDAzOWQ6IHJldHVybigoQ0hBUikyMDUpOworICAgICAgICBjYXNlIDB4MDM5ZTogcmV0 dXJuKChDSEFSKTIwNik7CisgICAgICAgIGNhc2UgMHgwMzlmOiByZXR1cm4oKENIQVIpMjA3KTsK KyAgICAgICAgY2FzZSAweDAzYTA6IHJldHVybigoQ0hBUikyMDgpOworICAgICAgICBjYXNlIDB4 MDNhMTogcmV0dXJuKChDSEFSKTIwOSk7CisgICAgICAgIGNhc2UgMHgwM2EzOiByZXR1cm4oKENI QVIpMjExKTsKKyAgICAgICAgY2FzZSAweDAzYTQ6IHJldHVybigoQ0hBUikyMTIpOworICAgICAg ICBjYXNlIDB4MDNhNTogcmV0dXJuKChDSEFSKTIxMyk7CisgICAgICAgIGNhc2UgMHgwM2E2OiBy ZXR1cm4oKENIQVIpMjE0KTsKKyAgICAgICAgY2FzZSAweDAzYTc6IHJldHVybigoQ0hBUikyMTUp OworICAgICAgICBjYXNlIDB4MDNhODogcmV0dXJuKChDSEFSKTIxNik7CisgICAgICAgIGNhc2Ug MHgwM2E5OiByZXR1cm4oKENIQVIpMjE3KTsKKyAgICAgICAgY2FzZSAweDAzYWE6IHJldHVybigo Q0hBUikyMTgpOworICAgICAgICBjYXNlIDB4MDNhYjogcmV0dXJuKChDSEFSKTIxOSk7CisgICAg ICAgIGNhc2UgMHgwM2FjOiByZXR1cm4oKENIQVIpMjIwKTsKKyAgICAgICAgY2FzZSAweDAzYWQ6 IHJldHVybigoQ0hBUikyMjEpOworICAgICAgICBjYXNlIDB4MDNhZTogcmV0dXJuKChDSEFSKTIy Mik7CisgICAgICAgIGNhc2UgMHgwM2FmOiByZXR1cm4oKENIQVIpMjIzKTsKKyAgICAgICAgY2Fz ZSAweDAzYjA6IHJldHVybigoQ0hBUikyMjQpOworICAgICAgICBjYXNlIDB4MDNiMTogcmV0dXJu KChDSEFSKTIyNSk7CisgICAgICAgIGNhc2UgMHgwM2IyOiByZXR1cm4oKENIQVIpMjI2KTsKKyAg ICAgICAgY2FzZSAweDAzYjM6IHJldHVybigoQ0hBUikyMjcpOworICAgICAgICBjYXNlIDB4MDNi NDogcmV0dXJuKChDSEFSKTIyOCk7CisgICAgICAgIGNhc2UgMHgwM2I1OiByZXR1cm4oKENIQVIp MjI5KTsKKyAgICAgICAgY2FzZSAweDAzYjY6IHJldHVybigoQ0hBUikyMzApOworICAgICAgICBj YXNlIDB4MDNiNzogcmV0dXJuKChDSEFSKTIzMSk7CisgICAgICAgIGNhc2UgMHgwM2I4OiByZXR1 cm4oKENIQVIpMjMyKTsKKyAgICAgICAgY2FzZSAweDAzYjk6IHJldHVybigoQ0hBUikyMzMpOwor ICAgICAgICBjYXNlIDB4MDNiYTogcmV0dXJuKChDSEFSKTIzNCk7CisgICAgICAgIGNhc2UgMHgw M2JiOiByZXR1cm4oKENIQVIpMjM1KTsKKyAgICAgICAgY2FzZSAweDAzYmM6IHJldHVybigoQ0hB UikyMzYpOworICAgICAgICBjYXNlIDB4MDNiZDogcmV0dXJuKChDSEFSKTIzNyk7CisgICAgICAg IGNhc2UgMHgwM2JlOiByZXR1cm4oKENIQVIpMjM4KTsKKyAgICAgICAgY2FzZSAweDAzYmY6IHJl dHVybigoQ0hBUikyMzkpOworICAgICAgICBjYXNlIDB4MDNjMDogcmV0dXJuKChDSEFSKTI0MCk7 CisgICAgICAgIGNhc2UgMHgwM2MxOiByZXR1cm4oKENIQVIpMjQxKTsKKyAgICAgICAgY2FzZSAw eDAzYzI6IHJldHVybigoQ0hBUikyNDIpOworICAgICAgICBjYXNlIDB4MDNjMzogcmV0dXJuKChD SEFSKTI0Myk7CisgICAgICAgIGNhc2UgMHgwM2M0OiByZXR1cm4oKENIQVIpMjQ0KTsKKyAgICAg ICAgY2FzZSAweDAzYzU6IHJldHVybigoQ0hBUikyNDUpOworICAgICAgICBjYXNlIDB4MDNjNjog cmV0dXJuKChDSEFSKTI0Nik7CisgICAgICAgIGNhc2UgMHgwM2M3OiByZXR1cm4oKENIQVIpMjQ3 KTsKKyAgICAgICAgY2FzZSAweDAzYzg6IHJldHVybigoQ0hBUikyNDgpOworICAgICAgICBjYXNl IDB4MDNjOTogcmV0dXJuKChDSEFSKTI0OSk7CisgICAgICAgIGNhc2UgMHgwM2NhOiByZXR1cm4o KENIQVIpMjUwKTsKKyAgICAgICAgY2FzZSAweDAzY2I6IHJldHVybigoQ0hBUikyNTEpOworICAg ICAgICBjYXNlIDB4MDNjYzogcmV0dXJuKChDSEFSKTI1Mik7CisgICAgICAgIGNhc2UgMHgwM2Nk OiByZXR1cm4oKENIQVIpMjUzKTsKKyAgICAgICAgY2FzZSAweDAzY2U6IHJldHVybigoQ0hBUiky NTQpOworICAgICAgICBjYXNlIDB4MjAxNTogcmV0dXJuKChDSEFSKTE3NSk7CisgICAgICAgIGNh c2UgMHgyMDE4OiByZXR1cm4oKENIQVIpMTYxKTsKKyAgICAgICAgY2FzZSAweDIwMTk6IHJldHVy bigoQ0hBUikxNjIpOworICAgICAgICBkZWZhdWx0OiByZXR1cm4odHhfcHVuYyhjKSk7CisgICAg fQorfQorCitpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSVNPIDg4 NTktOCAoTGF0aW4vSGVicmV3KSAqLworI2lmZGVmIENLX0FOU0lDCit0eF84ODU5XzgoVVNIT1JU IGMpCisjZWxzZQordHhfODg1OV84KGMpIFVTSE9SVCBjOworI2VuZGlmIC8qIENLX0FOU0lDICov Cit7CisgICAgaWYgKGMgPCAweGEwKQorICAgICAgcmV0dXJuKChDSEFSKShjICYgMHhmZikpOwor ICAgIHN3aXRjaChjKSB7CisgICAgICBjYXNlIDB4MDBhMDogcmV0dXJuKChDSEFSKTE2MCk7Cisg ICAgICBjYXNlIDB4MDBhMjogcmV0dXJuKChDSEFSKTE2Mik7CisgICAgICBjYXNlIDB4MDBhMzog cmV0dXJuKChDSEFSKTE2Myk7CisgICAgICBjYXNlIDB4MDBhNDogcmV0dXJuKChDSEFSKTE2NCk7 CisgICAgICBjYXNlIDB4MDBhNTogcmV0dXJuKChDSEFSKTE2NSk7CisgICAgICBjYXNlIDB4MDBh NjogcmV0dXJuKChDSEFSKTE2Nik7CisgICAgICBjYXNlIDB4MDBhNzogcmV0dXJuKChDSEFSKTE2 Nyk7CisgICAgICBjYXNlIDB4MDBhODogcmV0dXJuKChDSEFSKTE2OCk7CisgICAgICBjYXNlIDB4 MDBhOTogcmV0dXJuKChDSEFSKTE2OSk7CisgICAgICBjYXNlIDB4MDBkNzogcmV0dXJuKChDSEFS KTE3MCk7CisgICAgICBjYXNlIDB4MDBhYjogcmV0dXJuKChDSEFSKTE3MSk7CisgICAgICBjYXNl IDB4MDBhYzogcmV0dXJuKChDSEFSKTE3Mik7CisgICAgICBjYXNlIDB4MDBhZDogcmV0dXJuKChD SEFSKTE3Myk7CisgICAgICBjYXNlIDB4MDBhZTogcmV0dXJuKChDSEFSKTE3NCk7CisgICAgICBj YXNlIDB4MjAzZTogcmV0dXJuKChDSEFSKTE3NSk7CisgICAgICBjYXNlIDB4MDBiMDogcmV0dXJu KChDSEFSKTE3Nik7CisgICAgICBjYXNlIDB4MDBiMTogcmV0dXJuKChDSEFSKTE3Nyk7CisgICAg ICBjYXNlIDB4MDBiMjogcmV0dXJuKChDSEFSKTE3OCk7CisgICAgICBjYXNlIDB4MDBiMzogcmV0 dXJuKChDSEFSKTE3OSk7CisgICAgICBjYXNlIDB4MDBiNDogcmV0dXJuKChDSEFSKTE4MCk7Cisg ICAgICBjYXNlIDB4MDBiNTogcmV0dXJuKChDSEFSKTE4MSk7CisgICAgICBjYXNlIDB4MDBiNjog cmV0dXJuKChDSEFSKTE4Mik7CisgICAgICBjYXNlIDB4MDBiNzogcmV0dXJuKChDSEFSKTE4Myk7 CisgICAgICBjYXNlIDB4MDBiODogcmV0dXJuKChDSEFSKTE4NCk7CisgICAgICBjYXNlIDB4MDBi OTogcmV0dXJuKChDSEFSKTE4NSk7CisgICAgICBjYXNlIDB4MDBmNzogcmV0dXJuKChDSEFSKTE4 Nik7CisgICAgICBjYXNlIDB4MDBiYjogcmV0dXJuKChDSEFSKTE4Nyk7CisgICAgICBjYXNlIDB4 MDBiYzogcmV0dXJuKChDSEFSKTE4OCk7CisgICAgICBjYXNlIDB4MDBiZDogcmV0dXJuKChDSEFS KTE4OSk7CisgICAgICBjYXNlIDB4MDBiZTogcmV0dXJuKChDSEFSKTE5MCk7CisgICAgICBjYXNl IDB4MjAxNzogcmV0dXJuKChDSEFSKTIyMyk7CisgICAgICBjYXNlIDB4MDVkMDogcmV0dXJuKChD SEFSKTIyNCk7CisgICAgICBjYXNlIDB4MDVkMTogcmV0dXJuKChDSEFSKTIyNSk7CisgICAgICBj YXNlIDB4MDVkMjogcmV0dXJuKChDSEFSKTIyNik7CisgICAgICBjYXNlIDB4MDVkMzogcmV0dXJu KChDSEFSKTIyNyk7CisgICAgICBjYXNlIDB4MDVkNDogcmV0dXJuKChDSEFSKTIyOCk7CisgICAg ICBjYXNlIDB4MDVkNTogcmV0dXJuKChDSEFSKTIyOSk7CisgICAgICBjYXNlIDB4MDVkNjogcmV0 dXJuKChDSEFSKTIzMCk7CisgICAgICBjYXNlIDB4MDVkNzogcmV0dXJuKChDSEFSKTIzMSk7Cisg ICAgICBjYXNlIDB4MDVkODogcmV0dXJuKChDSEFSKTIzMik7CisgICAgICBjYXNlIDB4MDVkOTog cmV0dXJuKChDSEFSKTIzMyk7CisgICAgICBjYXNlIDB4MDVkYTogcmV0dXJuKChDSEFSKTIzNCk7 CisgICAgICBjYXNlIDB4MDVkYjogcmV0dXJuKChDSEFSKTIzNSk7CisgICAgICBjYXNlIDB4MDVk YzogcmV0dXJuKChDSEFSKTIzNik7CisgICAgICBjYXNlIDB4MDVkZDogcmV0dXJuKChDSEFSKTIz Nyk7CisgICAgICBjYXNlIDB4MDVkZTogcmV0dXJuKChDSEFSKTIzOCk7CisgICAgICBjYXNlIDB4 MDVkZjogcmV0dXJuKChDSEFSKTIzOSk7CisgICAgICBjYXNlIDB4MDVlMDogcmV0dXJuKChDSEFS KTI0MCk7CisgICAgICBjYXNlIDB4MDVlMTogcmV0dXJuKChDSEFSKTI0MSk7CisgICAgICBjYXNl IDB4MDVlMjogcmV0dXJuKChDSEFSKTI0Mik7CisgICAgICBjYXNlIDB4MDVlMzogcmV0dXJuKChD SEFSKTI0Myk7CisgICAgICBjYXNlIDB4MDVlNDogcmV0dXJuKChDSEFSKTI0NCk7CisgICAgICBj YXNlIDB4MDVlNTogcmV0dXJuKChDSEFSKTI0NSk7CisgICAgICBjYXNlIDB4MDVlNjogcmV0dXJu KChDSEFSKTI0Nik7CisgICAgICBjYXNlIDB4MDVlNzogcmV0dXJuKChDSEFSKTI0Nyk7CisgICAg ICBjYXNlIDB4MDVlODogcmV0dXJuKChDSEFSKTI0OCk7CisgICAgICBjYXNlIDB4MDVlOTogcmV0 dXJuKChDSEFSKTI0OSk7CisgICAgICBjYXNlIDB4MDVlYTogcmV0dXJuKChDSEFSKTI1MCk7Cisg ICAgICBkZWZhdWx0OiByZXR1cm4odHhfcHVuYyhjKSk7CisgICAgfQorfQorCitpbnQgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSVNPIDg4NTktOSAoTGF0aW4tNCkgKi8K KyNpZmRlZiBDS19BTlNJQwordHhfODg1OV85KFVTSE9SVCBjKQorI2Vsc2UKK3R4Xzg4NTlfOShj KSBVU0hPUlQgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworICAgIGlmIChjIDwgMHhhMCkK KyAgICAgIHJldHVybigoQ0hBUikoYyAmIDB4ZmYpKTsKKyAgICBzd2l0Y2goYykgeworICAgICAg Y2FzZSAweDAxMUU6IHJldHVybigoQ0hBUikyMDgpOyAgIC8qIERpZmZlcnMgZnJvbSBMYXRpbi0x IGluICovCisgICAgICBjYXNlIDB4MDExRjogcmV0dXJuKChDSEFSKTI0MCk7ICAgLyogb25seSBz aXggcGxhY2VzICovCisgICAgICBjYXNlIDB4MDEzMDogcmV0dXJuKChDSEFSKTIyMSk7CisgICAg ICBjYXNlIDB4MDEzMTogcmV0dXJuKChDSEFSKTI1Myk7CisgICAgICBjYXNlIDB4MDE1RTogcmV0 dXJuKChDSEFSKTIyMik7CisgICAgICBjYXNlIDB4MDE1RjogcmV0dXJuKChDSEFSKTI1NCk7Cisg ICAgICBkZWZhdWx0OiByZXR1cm4odHhfaWRlbnQoYykpOworICAgIH0KK30KKworaW50ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExhdGluLTYgKi8KKyNpZmRlZiBDS19B TlNJQwordHhfODg1OV8xMChVU0hPUlQgYykKKyNlbHNlCit0eF84ODU5XzEwKGMpIFVTSE9SVCBj OworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgaWYgKGMgPCAweGEwKQorICAgICAgcmV0 dXJuKChDSEFSKShjICYgMHhmZikpOworICAgIHN3aXRjaChjKSB7CisgICAgICBjYXNlIDB4MDBh MDogcmV0dXJuKChDSEFSKTE2MCk7CisgICAgICBjYXNlIDB4MDBhZDogcmV0dXJuKChDSEFSKTE3 Myk7CisgICAgICBjYXNlIDB4MDBiZDogcmV0dXJuKChDSEFSKTE4OSk7CisgICAgICBjYXNlIDB4 MDBiZTogcmV0dXJuKChDSEFSKTE5MCk7CisgICAgICBjYXNlIDB4MDBjMTogcmV0dXJuKChDSEFS KTE5Myk7CisgICAgICBjYXNlIDB4MDBjMjogcmV0dXJuKChDSEFSKTE5NCk7CisgICAgICBjYXNl IDB4MDBjMzogcmV0dXJuKChDSEFSKTE5NSk7CisgICAgICBjYXNlIDB4MDBjNDogcmV0dXJuKChD SEFSKTE5Nik7CisgICAgICBjYXNlIDB4MDBjNTogcmV0dXJuKChDSEFSKTE5Nyk7CisgICAgICBj YXNlIDB4MDBjNjogcmV0dXJuKChDSEFSKTE5OCk7CisgICAgICBjYXNlIDB4MDBjOTogcmV0dXJu KChDSEFSKTIwMSk7CisgICAgICBjYXNlIDB4MDBjYjogcmV0dXJuKChDSEFSKTIwMyk7CisgICAg ICBjYXNlIDB4MDBjZDogcmV0dXJuKChDSEFSKTIwNSk7CisgICAgICBjYXNlIDB4MDBjZTogcmV0 dXJuKChDSEFSKTIwNik7CisgICAgICBjYXNlIDB4MDBjZjogcmV0dXJuKChDSEFSKTIwNyk7Cisg ICAgICBjYXNlIDB4MDBkMzogcmV0dXJuKChDSEFSKTIxMSk7CisgICAgICBjYXNlIDB4MDBkNDog cmV0dXJuKChDSEFSKTIxMik7CisgICAgICBjYXNlIDB4MDBkNTogcmV0dXJuKChDSEFSKTIxMyk7 CisgICAgICBjYXNlIDB4MDBkNjogcmV0dXJuKChDSEFSKTIxNCk7CisgICAgICBjYXNlIDB4MDBk ODogcmV0dXJuKChDSEFSKTIxNik7CisgICAgICBjYXNlIDB4MDBkYTogcmV0dXJuKChDSEFSKTIx OCk7CisgICAgICBjYXNlIDB4MDBkYjogcmV0dXJuKChDSEFSKTIxOSk7CisgICAgICBjYXNlIDB4 MDBkYzogcmV0dXJuKChDSEFSKTIyMCk7CisgICAgICBjYXNlIDB4MDBkZDogcmV0dXJuKChDSEFS KTIyMSk7CisgICAgICBjYXNlIDB4MDBkZTogcmV0dXJuKChDSEFSKTIyMik7CisgICAgICBjYXNl IDB4MDBlMTogcmV0dXJuKChDSEFSKTIyNSk7CisgICAgICBjYXNlIDB4MDBlMjogcmV0dXJuKChD SEFSKTIyNik7CisgICAgICBjYXNlIDB4MDBlMzogcmV0dXJuKChDSEFSKTIyNyk7CisgICAgICBj YXNlIDB4MDBlNDogcmV0dXJuKChDSEFSKTIyOCk7CisgICAgICBjYXNlIDB4MDBlNTogcmV0dXJu KChDSEFSKTIyOSk7CisgICAgICBjYXNlIDB4MDBlNjogcmV0dXJuKChDSEFSKTIzMCk7CisgICAg ICBjYXNlIDB4MDBlOTogcmV0dXJuKChDSEFSKTIzMyk7CisgICAgICBjYXNlIDB4MDBlYjogcmV0 dXJuKChDSEFSKTIzNSk7CisgICAgICBjYXNlIDB4MDBlZDogcmV0dXJuKChDSEFSKTIzNyk7Cisg ICAgICBjYXNlIDB4MDBlZTogcmV0dXJuKChDSEFSKTIzOCk7CisgICAgICBjYXNlIDB4MDBlZjog cmV0dXJuKChDSEFSKTIzOSk7CisgICAgICBjYXNlIDB4MDBmMDogcmV0dXJuKChDSEFSKTI0MCk7 CisgICAgICBjYXNlIDB4MDBmMTogcmV0dXJuKChDSEFSKTI0MSk7CisgICAgICBjYXNlIDB4MDBm MzogcmV0dXJuKChDSEFSKTI0Myk7CisgICAgICBjYXNlIDB4MDBmNDogcmV0dXJuKChDSEFSKTI0 NCk7CisgICAgICBjYXNlIDB4MDBmNTogcmV0dXJuKChDSEFSKTI0NSk7CisgICAgICBjYXNlIDB4 MDBmNjogcmV0dXJuKChDSEFSKTI0Nik7CisgICAgICBjYXNlIDB4MDBmODogcmV0dXJuKChDSEFS KTI0OCk7CisgICAgICBjYXNlIDB4MDBmYTogcmV0dXJuKChDSEFSKTI1MCk7CisgICAgICBjYXNl IDB4MDBmYjogcmV0dXJuKChDSEFSKTI1MSk7CisgICAgICBjYXNlIDB4MDBmYzogcmV0dXJuKChD SEFSKTI1Mik7CisgICAgICBjYXNlIDB4MDBmZDogcmV0dXJuKChDSEFSKTI1Myk7CisgICAgICBj YXNlIDB4MDBmZTogcmV0dXJuKChDSEFSKTI1NCk7CisgICAgICBjYXNlIDB4MDEwMDogcmV0dXJu KChDSEFSKTE5Mik7CisgICAgICBjYXNlIDB4MDEwMTogcmV0dXJuKChDSEFSKTIyNCk7CisgICAg ICBjYXNlIDB4MDEwNDogcmV0dXJuKChDSEFSKTE2MSk7CisgICAgICBjYXNlIDB4MDEwNTogcmV0 dXJuKChDSEFSKTE3Nyk7CisgICAgICBjYXNlIDB4MDEwYzogcmV0dXJuKChDSEFSKTIwMCk7Cisg ICAgICBjYXNlIDB4MDEwZDogcmV0dXJuKChDSEFSKTIzMik7CisgICAgICBjYXNlIDB4MDExMDog cmV0dXJuKChDSEFSKTIwOCk7CisgICAgICBjYXNlIDB4MDExMTogcmV0dXJuKChDSEFSKTE3Nik7 CisgICAgICBjYXNlIDB4MDExMjogcmV0dXJuKChDSEFSKTE2Mik7CisgICAgICBjYXNlIDB4MDEx MzogcmV0dXJuKChDSEFSKTE3OCk7CisgICAgICBjYXNlIDB4MDExNjogcmV0dXJuKChDSEFSKTIw NCk7CisgICAgICBjYXNlIDB4MDExNzogcmV0dXJuKChDSEFSKTIzNik7CisgICAgICBjYXNlIDB4 MDExODogcmV0dXJuKChDSEFSKTIwMik7CisgICAgICBjYXNlIDB4MDExOTogcmV0dXJuKChDSEFS KTIzNCk7CisgICAgICBjYXNlIDB4MDEyMjogcmV0dXJuKChDSEFSKTE2Myk7CisgICAgICBjYXNl IDB4MDEyMzogcmV0dXJuKChDSEFSKTE3OSk7CisgICAgICBjYXNlIDB4MDEyODogcmV0dXJuKChD SEFSKTE2NSk7CisgICAgICBjYXNlIDB4MDEyOTogcmV0dXJuKChDSEFSKTE4MSk7CisgICAgICBj YXNlIDB4MDEyYTogcmV0dXJuKChDSEFSKTE2NCk7CisgICAgICBjYXNlIDB4MDEyYjogcmV0dXJu KChDSEFSKTE4MCk7CisgICAgICBjYXNlIDB4MDEyZTogcmV0dXJuKChDSEFSKTE5OSk7CisgICAg ICBjYXNlIDB4MDEyZjogcmV0dXJuKChDSEFSKTIzMSk7CisgICAgICBjYXNlIDB4MDEzNjogcmV0 dXJuKChDSEFSKTE2Nik7CisgICAgICBjYXNlIDB4MDEzNzogcmV0dXJuKChDSEFSKTE4Mik7Cisg ICAgICBjYXNlIDB4MDEzODogcmV0dXJuKChDSEFSKTE3NCk7CisgICAgICBjYXNlIDB4MDEzYjog cmV0dXJuKChDSEFSKTE2Nyk7CisgICAgICBjYXNlIDB4MDEzYzogcmV0dXJuKChDSEFSKTE4Myk7 CisgICAgICBjYXNlIDB4MDE0MzogcmV0dXJuKChDSEFSKTE2OCk7CisgICAgICBjYXNlIDB4MDE0 NDogcmV0dXJuKChDSEFSKTE4NCk7CisgICAgICBjYXNlIDB4MDE0NTogcmV0dXJuKChDSEFSKTIw OSk7CisgICAgICBjYXNlIDB4MDE0YTogcmV0dXJuKChDSEFSKTE3NSk7CisgICAgICBjYXNlIDB4 MDE0YjogcmV0dXJuKChDSEFSKTE5MSk7CisgICAgICBjYXNlIDB4MDE0YzogcmV0dXJuKChDSEFS KTIxMCk7CisgICAgICBjYXNlIDB4MDE0ZDogcmV0dXJuKChDSEFSKTI0Mik7CisgICAgICBjYXNl IDB4MDE1NjogcmV0dXJuKChDSEFSKTE2OSk7CisgICAgICBjYXNlIDB4MDE1NzogcmV0dXJuKChD SEFSKTE4NSk7CisgICAgICBjYXNlIDB4MDE2MDogcmV0dXJuKChDSEFSKTE3MCk7CisgICAgICBj YXNlIDB4MDE2MTogcmV0dXJuKChDSEFSKTE4Nik7CisgICAgICBjYXNlIDB4MDE2NjogcmV0dXJu KChDSEFSKTE3MSk7CisgICAgICBjYXNlIDB4MDE2NzogcmV0dXJuKChDSEFSKTE4Nyk7CisgICAg ICBjYXNlIDB4MDE2ODogcmV0dXJuKChDSEFSKTIxNSk7CisgICAgICBjYXNlIDB4MDE2OTogcmV0 dXJuKChDSEFSKTI0Nyk7CisgICAgICBjYXNlIDB4MDE2YTogcmV0dXJuKChDSEFSKTIyMyk7Cisg ICAgICBjYXNlIDB4MDE2YjogcmV0dXJuKChDSEFSKTI1NSk7CisgICAgICBjYXNlIDB4MDE3Mjog cmV0dXJuKChDSEFSKTIxNyk7CisgICAgICBjYXNlIDB4MDE3MzogcmV0dXJuKChDSEFSKTI0OSk7 CisgICAgICBjYXNlIDB4MDE3ZDogcmV0dXJuKChDSEFSKTE3Mik7CisgICAgICBjYXNlIDB4MDE3 ZTogcmV0dXJuKChDSEFSKTE4OCk7CisgICAgICBkZWZhdWx0OiByZXR1cm4odHhfaWRlbnQoYykp OworICAgIH0KK30KKworCitpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogSVNPIDg4NTktMTUgTGF0aW4tOSAqLworI2lmZGVmIENLX0FOU0lDCit0eF84ODU5XzE1KFVT SE9SVCBjKQorI2Vsc2UKK3R4Xzg4NTlfMTUoYykgVVNIT1JUIGM7CisjZW5kaWYgLyogQ0tfQU5T SUMgKi8KK3sKKyAgICBpZiAoYyA8IDB4YTApCisgICAgICByZXR1cm4oKENIQVIpKGMgJiAweGZm KSk7CisgICAgc3dpdGNoKGMpIHsKKyAgICAgIGNhc2UgMHgyMEFDOiByZXR1cm4oKENIQVIpMHhB NCk7ICAvKiBEaWZmZXJzIGZyb20gTGF0aW4tMSBpbiAqLworICAgICAgY2FzZSAweDAxNjA6IHJl dHVybigoQ0hBUikweEFDKTsgIC8qIG9ubHkgZWlnaHQgcGxhY2VzICovCisgICAgICBjYXNlIDB4 MDE2MTogcmV0dXJuKChDSEFSKTB4QTgpOworICAgICAgY2FzZSAweDAxN0Q6IHJldHVybigoQ0hB UikweEI0KTsKKyAgICAgIGNhc2UgMHgwMTdFOiByZXR1cm4oKENIQVIpMHhCOCk7CisgICAgICBj YXNlIDB4MDE1MjogcmV0dXJuKChDSEFSKTB4QkMpOworICAgICAgY2FzZSAweDAxNTM6IHJldHVy bigoQ0hBUikweEJEKTsKKyAgICAgIGNhc2UgMHgwMTc4OiByZXR1cm4oKENIQVIpMHhCRSk7Cisg ICAgICBkZWZhdWx0OiByZXR1cm4odHhfaWRlbnQoYykpOworICAgIH0KK30KKworaW50ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE9sZCBLT0ktOCAoRUNNQSAxMTMgRmly c3QgRWQuKSAqLworI2lmZGVmIENLX0FOU0lDCit0eF9rb2k4KFVTSE9SVCBjKQorI2Vsc2UKK3R4 X2tvaTgoYykgVVNIT1JUIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAgICBpZiAoYyA8 IDB4YTApCisgICAgICByZXR1cm4oKENIQVIpKGMgJiAweGZmKSk7CisgICAgc3dpdGNoKGMpIHsK KyAgICAgIGNhc2UgMHgwNDEwOiByZXR1cm4oKENIQVIpKDIyNSAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgwNDExOiByZXR1cm4oKENIQVIpKDIyNiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDEy OiByZXR1cm4oKENIQVIpKDI0NyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDEzOiByZXR1cm4o KENIQVIpKDIzMSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDE0OiByZXR1cm4oKENIQVIpKDIy OCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDE1OiByZXR1cm4oKENIQVIpKDIyOSAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgwNDE2OiByZXR1cm4oKENIQVIpKDI0NiAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgwNDE3OiByZXR1cm4oKENIQVIpKDI1MCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgw NDE4OiByZXR1cm4oKENIQVIpKDIzMyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDE5OiByZXR1 cm4oKENIQVIpKDIzNCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDFhOiByZXR1cm4oKENIQVIp KDIzNSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDFiOiByZXR1cm4oKENIQVIpKDIzNiAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDFjOiByZXR1cm4oKENIQVIpKDIzNyAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgwNDFkOiByZXR1cm4oKENIQVIpKDIzOCAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgwNDFlOiByZXR1cm4oKENIQVIpKDIzOSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDFmOiBy ZXR1cm4oKENIQVIpKDI0MCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDIwOiByZXR1cm4oKENI QVIpKDI0MiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDIxOiByZXR1cm4oKENIQVIpKDI0MyAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDIyOiByZXR1cm4oKENIQVIpKDI0NCAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgwNDIzOiByZXR1cm4oKENIQVIpKDI0NSAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgwNDI0OiByZXR1cm4oKENIQVIpKDIzMCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDI1 OiByZXR1cm4oKENIQVIpKDIzMiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDI2OiByZXR1cm4o KENIQVIpKDIyNyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDI3OiByZXR1cm4oKENIQVIpKDI1 NCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDI4OiByZXR1cm4oKENIQVIpKDI1MSAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgwNDI5OiByZXR1cm4oKENIQVIpKDI1MyAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgwNDJiOiByZXR1cm4oKENIQVIpKDI0OSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgw NDJjOiByZXR1cm4oKENIQVIpKDI0OCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDJkOiByZXR1 cm4oKENIQVIpKDI1MiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDJlOiByZXR1cm4oKENIQVIp KDIyNCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDJmOiByZXR1cm4oKENIQVIpKDI0MSAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDMwOiByZXR1cm4oKENIQVIpKDE5MyAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgwNDMxOiByZXR1cm4oKENIQVIpKDE5NCAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgwNDMyOiByZXR1cm4oKENIQVIpKDIxNSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDMzOiBy ZXR1cm4oKENIQVIpKDE5OSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDM0OiByZXR1cm4oKENI QVIpKDE5NiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDM1OiByZXR1cm4oKENIQVIpKDE5NyAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDM2OiByZXR1cm4oKENIQVIpKDIxNCAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgwNDM3OiByZXR1cm4oKENIQVIpKDIxOCAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgwNDM4OiByZXR1cm4oKENIQVIpKDIwMSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDM5 OiByZXR1cm4oKENIQVIpKDIwMiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDNhOiByZXR1cm4o KENIQVIpKDIwMyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDNiOiByZXR1cm4oKENIQVIpKDIw NCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDNjOiByZXR1cm4oKENIQVIpKDIwNSAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgwNDNkOiByZXR1cm4oKENIQVIpKDIwNiAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgwNDNlOiByZXR1cm4oKENIQVIpKDIwNyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgw NDNmOiByZXR1cm4oKENIQVIpKDIwOCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDQwOiByZXR1 cm4oKENIQVIpKDIxMCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDQxOiByZXR1cm4oKENIQVIp KDIxMSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDQyOiByZXR1cm4oKENIQVIpKDIxMiAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDQzOiByZXR1cm4oKENIQVIpKDIxMyAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgwNDQ0OiByZXR1cm4oKENIQVIpKDE5OCAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgwNDQ1OiByZXR1cm4oKENIQVIpKDIwMCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDQ2OiBy ZXR1cm4oKENIQVIpKDE5NSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDQ3OiByZXR1cm4oKENI QVIpKDIyMiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDQ4OiByZXR1cm4oKENIQVIpKDIxOSAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDQ5OiByZXR1cm4oKENIQVIpKDIyMSAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgwNDRhOiByZXR1cm4oKENIQVIpKDIyMyAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgwNDRiOiByZXR1cm4oKENIQVIpKDIxNyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDRj OiByZXR1cm4oKENIQVIpKDIxNiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDRkOiByZXR1cm4o KENIQVIpKDIyMCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDRlOiByZXR1cm4oKENIQVIpKDE5 MiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDRmOiByZXR1cm4oKENIQVIpKDIwOSAmIDB4ZmYp KTsKKyAgICAgIGRlZmF1bHQ6IHJldHVybih0eF9pZGVudChjKSk7CisgICAgfQorfQorCitpbnQg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVUNTLTIgdG8gS09JOC1SIChS dXNzaWEpICovCisjaWZkZWYgQ0tfQU5TSUMKK3R4X2tvaThyKFVTSE9SVCBjKQorI2Vsc2UKK3R4 X2tvaThyKGMpIFVTSE9SVCBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgaWYgKGMg PCAweDAwQTApCisgICAgICByZXR1cm4oKENIQVIpKGMgJiAweGZmKSk7CisgICAgc3dpdGNoKGMp IHsKKyAgICAgIGNhc2UgMHgwMEEwOiByZXR1cm4oKENIQVIpKDE1NCAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgwMEE5OiByZXR1cm4oKENIQVIpKDE5MSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgw MEIwOiByZXR1cm4oKENIQVIpKDE1NiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMEIyOiByZXR1 cm4oKENIQVIpKDE1NyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMEI3OiByZXR1cm4oKENIQVIp KDE1OCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMEY3OiByZXR1cm4oKENIQVIpKDE1OSAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDAxOiByZXR1cm4oKENIQVIpKDE3OSAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgwNDEwOiByZXR1cm4oKENIQVIpKDIyNSAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgwNDExOiByZXR1cm4oKENIQVIpKDIyNiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDEyOiBy ZXR1cm4oKENIQVIpKDI0NyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDEzOiByZXR1cm4oKENI QVIpKDIzMSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDE0OiByZXR1cm4oKENIQVIpKDIyOCAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDE1OiByZXR1cm4oKENIQVIpKDIyOSAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgwNDE2OiByZXR1cm4oKENIQVIpKDI0NiAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgwNDE3OiByZXR1cm4oKENIQVIpKDI1MCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDE4 OiByZXR1cm4oKENIQVIpKDIzMyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDE5OiByZXR1cm4o KENIQVIpKDIzNCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDFBOiByZXR1cm4oKENIQVIpKDIz NSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDFCOiByZXR1cm4oKENIQVIpKDIzNiAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgwNDFDOiByZXR1cm4oKENIQVIpKDIzNyAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgwNDFEOiByZXR1cm4oKENIQVIpKDIzOCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgw NDFFOiByZXR1cm4oKENIQVIpKDIzOSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDFGOiByZXR1 cm4oKENIQVIpKDI0MCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDIwOiByZXR1cm4oKENIQVIp KDI0MiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDIxOiByZXR1cm4oKENIQVIpKDI0MyAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDIyOiByZXR1cm4oKENIQVIpKDI0NCAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgwNDIzOiByZXR1cm4oKENIQVIpKDI0NSAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgwNDI0OiByZXR1cm4oKENIQVIpKDIzMCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDI1OiBy ZXR1cm4oKENIQVIpKDIzMiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDI2OiByZXR1cm4oKENI QVIpKDIyNyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDI3OiByZXR1cm4oKENIQVIpKDI1NCAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDI4OiByZXR1cm4oKENIQVIpKDI1MSAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgwNDI5OiByZXR1cm4oKENIQVIpKDI1MyAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgwNDJBOiByZXR1cm4oKENIQVIpKDI1NSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDJC OiByZXR1cm4oKENIQVIpKDI0OSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDJDOiByZXR1cm4o KENIQVIpKDI0OCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDJEOiByZXR1cm4oKENIQVIpKDI1 MiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDJFOiByZXR1cm4oKENIQVIpKDIyNCAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgwNDJGOiByZXR1cm4oKENIQVIpKDI0MSAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgwNDMwOiByZXR1cm4oKENIQVIpKDE5MyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgw NDMxOiByZXR1cm4oKENIQVIpKDE5NCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDMyOiByZXR1 cm4oKENIQVIpKDIxNSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDMzOiByZXR1cm4oKENIQVIp KDE5OSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDM0OiByZXR1cm4oKENIQVIpKDE5NiAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDM1OiByZXR1cm4oKENIQVIpKDE5NyAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgwNDM2OiByZXR1cm4oKENIQVIpKDIxNCAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgwNDM3OiByZXR1cm4oKENIQVIpKDIxOCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDM4OiBy ZXR1cm4oKENIQVIpKDIwMSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDM5OiByZXR1cm4oKENI QVIpKDIwMiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDNBOiByZXR1cm4oKENIQVIpKDIwMyAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDNCOiByZXR1cm4oKENIQVIpKDIwNCAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgwNDNDOiByZXR1cm4oKENIQVIpKDIwNSAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgwNDNEOiByZXR1cm4oKENIQVIpKDIwNiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDNF OiByZXR1cm4oKENIQVIpKDIwNyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDNGOiByZXR1cm4o KENIQVIpKDIwOCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDQwOiByZXR1cm4oKENIQVIpKDIx MCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDQxOiByZXR1cm4oKENIQVIpKDIxMSAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgwNDQyOiByZXR1cm4oKENIQVIpKDIxMiAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgwNDQzOiByZXR1cm4oKENIQVIpKDIxMyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgw NDQ0OiByZXR1cm4oKENIQVIpKDE5OCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDQ1OiByZXR1 cm4oKENIQVIpKDIwMCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDQ2OiByZXR1cm4oKENIQVIp KDE5NSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDQ3OiByZXR1cm4oKENIQVIpKDIyMiAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDQ4OiByZXR1cm4oKENIQVIpKDIxOSAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgwNDQ5OiByZXR1cm4oKENIQVIpKDIyMSAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgwNDRBOiByZXR1cm4oKENIQVIpKDIyMyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDRCOiBy ZXR1cm4oKENIQVIpKDIxNyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDRDOiByZXR1cm4oKENI QVIpKDIxNiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDREOiByZXR1cm4oKENIQVIpKDIyMCAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDRFOiByZXR1cm4oKENIQVIpKDE5MiAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgwNDRGOiByZXR1cm4oKENIQVIpKDIwOSAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgwNDUxOiByZXR1cm4oKENIQVIpKDE2MyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMjE5 OiByZXR1cm4oKENIQVIpKDE0OSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMjFBOiByZXR1cm4o KENIQVIpKDE1MCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMjQ4OiByZXR1cm4oKENIQVIpKDE1 MSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMjY0OiByZXR1cm4oKENIQVIpKDE1MiAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgyMjY1OiByZXR1cm4oKENIQVIpKDE1MyAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgyMzIwOiByZXR1cm4oKENIQVIpKDE0NyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgy MzIxOiByZXR1cm4oKENIQVIpKDE1NSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTAwOiByZXR1 cm4oKENIQVIpKDEyOCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTAyOiByZXR1cm4oKENIQVIp KDEyOSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTBDOiByZXR1cm4oKENIQVIpKDEzMCAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTEwOiByZXR1cm4oKENIQVIpKDEzMSAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgyNTE0OiByZXR1cm4oKENIQVIpKDEzMiAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgyNTE4OiByZXR1cm4oKENIQVIpKDEzMyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTFDOiBy ZXR1cm4oKENIQVIpKDEzNCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTI0OiByZXR1cm4oKENI QVIpKDEzNSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTJDOiByZXR1cm4oKENIQVIpKDEzNiAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTM0OiByZXR1cm4oKENIQVIpKDEzNyAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgyNTNDOiByZXR1cm4oKENIQVIpKDEzOCAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgyNTUwOiByZXR1cm4oKENIQVIpKDE2MCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTUx OiByZXR1cm4oKENIQVIpKDE2MSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTUyOiByZXR1cm4o KENIQVIpKDE2MiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTUzOiByZXR1cm4oKENIQVIpKDE2 NCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTU0OiByZXR1cm4oKENIQVIpKDE2NSAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgyNTU1OiByZXR1cm4oKENIQVIpKDE2NiAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgyNTU2OiByZXR1cm4oKENIQVIpKDE2NyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgy NTU3OiByZXR1cm4oKENIQVIpKDE2OCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTU4OiByZXR1 cm4oKENIQVIpKDE2OSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTU5OiByZXR1cm4oKENIQVIp KDE3MCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTVBOiByZXR1cm4oKENIQVIpKDE3MSAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTVCOiByZXR1cm4oKENIQVIpKDE3MiAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgyNTVDOiByZXR1cm4oKENIQVIpKDE3MyAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgyNTVEOiByZXR1cm4oKENIQVIpKDE3NCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTVFOiBy ZXR1cm4oKENIQVIpKDE3NSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTVGOiByZXR1cm4oKENI QVIpKDE3NiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTYwOiByZXR1cm4oKENIQVIpKDE3NyAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTYxOiByZXR1cm4oKENIQVIpKDE3OCAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgyNTYyOiByZXR1cm4oKENIQVIpKDE4MCAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgyNTYzOiByZXR1cm4oKENIQVIpKDE4MSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTY0 OiByZXR1cm4oKENIQVIpKDE4MiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTY1OiByZXR1cm4o KENIQVIpKDE4MyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTY2OiByZXR1cm4oKENIQVIpKDE4 NCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTY3OiByZXR1cm4oKENIQVIpKDE4NSAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgyNTY4OiByZXR1cm4oKENIQVIpKDE4NiAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgyNTY5OiByZXR1cm4oKENIQVIpKDE4NyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgy NTZBOiByZXR1cm4oKENIQVIpKDE4OCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTZCOiByZXR1 cm4oKENIQVIpKDE4OSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTZDOiByZXR1cm4oKENIQVIp KDE5MCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTgwOiByZXR1cm4oKENIQVIpKDEzOSAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTg0OiByZXR1cm4oKENIQVIpKDE0MCAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgyNTg4OiByZXR1cm4oKENIQVIpKDE0MSAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgyNThDOiByZXR1cm4oKENIQVIpKDE0MiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTkwOiBy ZXR1cm4oKENIQVIpKDE0MyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTkxOiByZXR1cm4oKENI QVIpKDE0NCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTkyOiByZXR1cm4oKENIQVIpKDE0NSAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTkzOiByZXR1cm4oKENIQVIpKDE0NiAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgyNUEwOiByZXR1cm4oKENIQVIpKDE0OCAmIDB4ZmYpKTsKKyAgICAgIGRl ZmF1bHQ6IHJldHVybih0eF9pZGVudChjKSk7CisgICAgfQorfQorCitpbnQgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogS09JOC1VIChVa3JhaW5lKSAqLworI2lmZGVmIENL X0FOU0lDCit0eF9rb2k4dShVU0hPUlQgYykKKyNlbHNlCit0eF9rb2k4dShjKSBVU0hPUlQgYzsK KyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworICAgIGlmIChjIDwgMHhhMCkKKyAgICAgIHJldHVy bigoQ0hBUikoYyAmIDB4ZmYpKTsKKyAgICBzd2l0Y2goYykgeworICAgICAgY2FzZSAweDAwQTA6 IHJldHVybigoQ0hBUikoMTU0ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwQTk6IHJldHVybigo Q0hBUikoMTkxICYgMHhmZikpOworICAgICAgY2FzZSAweDAwQjA6IHJldHVybigoQ0hBUikoMTU2 ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwQjI6IHJldHVybigoQ0hBUikoMTU3ICYgMHhmZikp OworICAgICAgY2FzZSAweDAwQjc6IHJldHVybigoQ0hBUikoMTU4ICYgMHhmZikpOworICAgICAg Y2FzZSAweDAwRjc6IHJldHVybigoQ0hBUikoMTU5ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0 MDE6IHJldHVybigoQ0hBUikoMTc5ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MDQ6IHJldHVy bigoQ0hBUikoMTgwICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MDY6IHJldHVybigoQ0hBUiko MTgyICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MDc6IHJldHVybigoQ0hBUikoMTgzICYgMHhm ZikpOworICAgICAgY2FzZSAweDA0MTA6IHJldHVybigoQ0hBUikoMjI1ICYgMHhmZikpOworICAg ICAgY2FzZSAweDA0MTE6IHJldHVybigoQ0hBUikoMjI2ICYgMHhmZikpOworICAgICAgY2FzZSAw eDA0MTI6IHJldHVybigoQ0hBUikoMjQ3ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MTM6IHJl dHVybigoQ0hBUikoMjMxICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MTQ6IHJldHVybigoQ0hB UikoMjI4ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MTU6IHJldHVybigoQ0hBUikoMjI5ICYg MHhmZikpOworICAgICAgY2FzZSAweDA0MTY6IHJldHVybigoQ0hBUikoMjQ2ICYgMHhmZikpOwor ICAgICAgY2FzZSAweDA0MTc6IHJldHVybigoQ0hBUikoMjUwICYgMHhmZikpOworICAgICAgY2Fz ZSAweDA0MTg6IHJldHVybigoQ0hBUikoMjMzICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MTk6 IHJldHVybigoQ0hBUikoMjM0ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MUE6IHJldHVybigo Q0hBUikoMjM1ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MUI6IHJldHVybigoQ0hBUikoMjM2 ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MUM6IHJldHVybigoQ0hBUikoMjM3ICYgMHhmZikp OworICAgICAgY2FzZSAweDA0MUQ6IHJldHVybigoQ0hBUikoMjM4ICYgMHhmZikpOworICAgICAg Y2FzZSAweDA0MUU6IHJldHVybigoQ0hBUikoMjM5ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0 MUY6IHJldHVybigoQ0hBUikoMjQwICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MjA6IHJldHVy bigoQ0hBUikoMjQyICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MjE6IHJldHVybigoQ0hBUiko MjQzICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MjI6IHJldHVybigoQ0hBUikoMjQ0ICYgMHhm ZikpOworICAgICAgY2FzZSAweDA0MjM6IHJldHVybigoQ0hBUikoMjQ1ICYgMHhmZikpOworICAg ICAgY2FzZSAweDA0MjQ6IHJldHVybigoQ0hBUikoMjMwICYgMHhmZikpOworICAgICAgY2FzZSAw eDA0MjU6IHJldHVybigoQ0hBUikoMjMyICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MjY6IHJl dHVybigoQ0hBUikoMjI3ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0Mjc6IHJldHVybigoQ0hB UikoMjU0ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0Mjg6IHJldHVybigoQ0hBUikoMjUxICYg MHhmZikpOworICAgICAgY2FzZSAweDA0Mjk6IHJldHVybigoQ0hBUikoMjUzICYgMHhmZikpOwor ICAgICAgY2FzZSAweDA0MkE6IHJldHVybigoQ0hBUikoMjU1ICYgMHhmZikpOworICAgICAgY2Fz ZSAweDA0MkI6IHJldHVybigoQ0hBUikoMjQ5ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MkM6 IHJldHVybigoQ0hBUikoMjQ4ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MkQ6IHJldHVybigo Q0hBUikoMjUyICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MkU6IHJldHVybigoQ0hBUikoMjI0 ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MkY6IHJldHVybigoQ0hBUikoMjQxICYgMHhmZikp OworICAgICAgY2FzZSAweDA0MzA6IHJldHVybigoQ0hBUikoMTkzICYgMHhmZikpOworICAgICAg Y2FzZSAweDA0MzE6IHJldHVybigoQ0hBUikoMTk0ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0 MzI6IHJldHVybigoQ0hBUikoMjE1ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MzM6IHJldHVy bigoQ0hBUikoMTk5ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MzQ6IHJldHVybigoQ0hBUiko MTk2ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MzU6IHJldHVybigoQ0hBUikoMTk3ICYgMHhm ZikpOworICAgICAgY2FzZSAweDA0MzY6IHJldHVybigoQ0hBUikoMjE0ICYgMHhmZikpOworICAg ICAgY2FzZSAweDA0Mzc6IHJldHVybigoQ0hBUikoMjE4ICYgMHhmZikpOworICAgICAgY2FzZSAw eDA0Mzg6IHJldHVybigoQ0hBUikoMjAxICYgMHhmZikpOworICAgICAgY2FzZSAweDA0Mzk6IHJl dHVybigoQ0hBUikoMjAyICYgMHhmZikpOworICAgICAgY2FzZSAweDA0M0E6IHJldHVybigoQ0hB UikoMjAzICYgMHhmZikpOworICAgICAgY2FzZSAweDA0M0I6IHJldHVybigoQ0hBUikoMjA0ICYg MHhmZikpOworICAgICAgY2FzZSAweDA0M0M6IHJldHVybigoQ0hBUikoMjA1ICYgMHhmZikpOwor ICAgICAgY2FzZSAweDA0M0Q6IHJldHVybigoQ0hBUikoMjA2ICYgMHhmZikpOworICAgICAgY2Fz ZSAweDA0M0U6IHJldHVybigoQ0hBUikoMjA3ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0M0Y6 IHJldHVybigoQ0hBUikoMjA4ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0NDA6IHJldHVybigo Q0hBUikoMjEwICYgMHhmZikpOworICAgICAgY2FzZSAweDA0NDE6IHJldHVybigoQ0hBUikoMjEx ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0NDI6IHJldHVybigoQ0hBUikoMjEyICYgMHhmZikp OworICAgICAgY2FzZSAweDA0NDM6IHJldHVybigoQ0hBUikoMjEzICYgMHhmZikpOworICAgICAg Y2FzZSAweDA0NDQ6IHJldHVybigoQ0hBUikoMTk4ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0 NDU6IHJldHVybigoQ0hBUikoMjAwICYgMHhmZikpOworICAgICAgY2FzZSAweDA0NDY6IHJldHVy bigoQ0hBUikoMTk1ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0NDc6IHJldHVybigoQ0hBUiko MjIyICYgMHhmZikpOworICAgICAgY2FzZSAweDA0NDg6IHJldHVybigoQ0hBUikoMjE5ICYgMHhm ZikpOworICAgICAgY2FzZSAweDA0NDk6IHJldHVybigoQ0hBUikoMjIxICYgMHhmZikpOworICAg ICAgY2FzZSAweDA0NEE6IHJldHVybigoQ0hBUikoMjIzICYgMHhmZikpOworICAgICAgY2FzZSAw eDA0NEI6IHJldHVybigoQ0hBUikoMjE3ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0NEM6IHJl dHVybigoQ0hBUikoMjE2ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0NEQ6IHJldHVybigoQ0hB UikoMjIwICYgMHhmZikpOworICAgICAgY2FzZSAweDA0NEU6IHJldHVybigoQ0hBUikoMTkyICYg MHhmZikpOworICAgICAgY2FzZSAweDA0NEY6IHJldHVybigoQ0hBUikoMjA5ICYgMHhmZikpOwor ICAgICAgY2FzZSAweDA0NTE6IHJldHVybigoQ0hBUikoMTYzICYgMHhmZikpOworICAgICAgY2Fz ZSAweDA0NTQ6IHJldHVybigoQ0hBUikoMTY0ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0NTY6 IHJldHVybigoQ0hBUikoMTY2ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0NTc6IHJldHVybigo Q0hBUikoMTY3ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0OTA6IHJldHVybigoQ0hBUikoMTg5 ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0OTE6IHJldHVybigoQ0hBUikoMTczICYgMHhmZikp OworICAgICAgY2FzZSAweDIyMTk6IHJldHVybigoQ0hBUikoMTQ5ICYgMHhmZikpOworICAgICAg Y2FzZSAweDIyMUE6IHJldHVybigoQ0hBUikoMTUwICYgMHhmZikpOworICAgICAgY2FzZSAweDIy NDg6IHJldHVybigoQ0hBUikoMTUxICYgMHhmZikpOworICAgICAgY2FzZSAweDIyNjQ6IHJldHVy bigoQ0hBUikoMTUyICYgMHhmZikpOworICAgICAgY2FzZSAweDIyNjU6IHJldHVybigoQ0hBUiko MTUzICYgMHhmZikpOworICAgICAgY2FzZSAweDIzMjA6IHJldHVybigoQ0hBUikoMTQ3ICYgMHhm ZikpOworICAgICAgY2FzZSAweDIzMjE6IHJldHVybigoQ0hBUikoMTU1ICYgMHhmZikpOworICAg ICAgY2FzZSAweDI1MDA6IHJldHVybigoQ0hBUikoMTI4ICYgMHhmZikpOworICAgICAgY2FzZSAw eDI1MDI6IHJldHVybigoQ0hBUikoMTI5ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1MEM6IHJl dHVybigoQ0hBUikoMTMwICYgMHhmZikpOworICAgICAgY2FzZSAweDI1MTA6IHJldHVybigoQ0hB UikoMTMxICYgMHhmZikpOworICAgICAgY2FzZSAweDI1MTQ6IHJldHVybigoQ0hBUikoMTMyICYg MHhmZikpOworICAgICAgY2FzZSAweDI1MTg6IHJldHVybigoQ0hBUikoMTMzICYgMHhmZikpOwor ICAgICAgY2FzZSAweDI1MUM6IHJldHVybigoQ0hBUikoMTM0ICYgMHhmZikpOworICAgICAgY2Fz ZSAweDI1MjQ6IHJldHVybigoQ0hBUikoMTM1ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1MkM6 IHJldHVybigoQ0hBUikoMTM2ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1MzQ6IHJldHVybigo Q0hBUikoMTM3ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1M0M6IHJldHVybigoQ0hBUikoMTM4 ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1NTA6IHJldHVybigoQ0hBUikoMTYwICYgMHhmZikp OworICAgICAgY2FzZSAweDI1NTE6IHJldHVybigoQ0hBUikoMTYxICYgMHhmZikpOworICAgICAg Y2FzZSAweDI1NTI6IHJldHVybigoQ0hBUikoMTYyICYgMHhmZikpOworICAgICAgY2FzZSAweDI1 NTQ6IHJldHVybigoQ0hBUikoMTY1ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1NTc6IHJldHVy bigoQ0hBUikoMTY4ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1NTg6IHJldHVybigoQ0hBUiko MTY5ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1NTk6IHJldHVybigoQ0hBUikoMTcwICYgMHhm ZikpOworICAgICAgY2FzZSAweDI1NUE6IHJldHVybigoQ0hBUikoMTcxICYgMHhmZikpOworICAg ICAgY2FzZSAweDI1NUI6IHJldHVybigoQ0hBUikoMTcyICYgMHhmZikpOworICAgICAgY2FzZSAw eDI1NUQ6IHJldHVybigoQ0hBUikoMTc0ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1NUU6IHJl dHVybigoQ0hBUikoMTc1ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1NUY6IHJldHVybigoQ0hB UikoMTc2ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1NjA6IHJldHVybigoQ0hBUikoMTc3ICYg MHhmZikpOworICAgICAgY2FzZSAweDI1NjE6IHJldHVybigoQ0hBUikoMTc4ICYgMHhmZikpOwor ICAgICAgY2FzZSAweDI1NjM6IHJldHVybigoQ0hBUikoMTgxICYgMHhmZikpOworICAgICAgY2Fz ZSAweDI1NjY6IHJldHVybigoQ0hBUikoMTg0ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1Njc6 IHJldHVybigoQ0hBUikoMTg1ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1Njg6IHJldHVybigo Q0hBUikoMTg2ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1Njk6IHJldHVybigoQ0hBUikoMTg3 ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1NkE6IHJldHVybigoQ0hBUikoMTg4ICYgMHhmZikp OworICAgICAgY2FzZSAweDI1NkM6IHJldHVybigoQ0hBUikoMTkwICYgMHhmZikpOworICAgICAg Y2FzZSAweDI1ODA6IHJldHVybigoQ0hBUikoMTM5ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1 ODQ6IHJldHVybigoQ0hBUikoMTQwICYgMHhmZikpOworICAgICAgY2FzZSAweDI1ODg6IHJldHVy bigoQ0hBUikoMTQxICYgMHhmZikpOworICAgICAgY2FzZSAweDI1OEM6IHJldHVybigoQ0hBUiko MTQyICYgMHhmZikpOworICAgICAgY2FzZSAweDI1OTA6IHJldHVybigoQ0hBUikoMTQzICYgMHhm ZikpOworICAgICAgY2FzZSAweDI1OTE6IHJldHVybigoQ0hBUikoMTQ0ICYgMHhmZikpOworICAg ICAgY2FzZSAweDI1OTI6IHJldHVybigoQ0hBUikoMTQ1ICYgMHhmZikpOworICAgICAgY2FzZSAw eDI1OTM6IHJldHVybigoQ0hBUikoMTQ2ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1QTA6IHJl dHVybigoQ0hBUikoMTQ4ICYgMHhmZikpOworICAgICAgZGVmYXVsdDogcmV0dXJuKHR4X2lkZW50 KGMpKTsKKyAgICB9Cit9CisKKworaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIERFQyBNQ1MgKi8KKyNpZmRlZiBDS19BTlNJQwordHhfZGVjbWNzKFVTSE9SVCBjKQor I2Vsc2UKK3R4X2RlY21jcyhjKSBVU0hPUlQgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworewor ICAgIGlmIChjIDwgMHhhMCkKKyAgICAgIHJldHVybigoQ0hBUikoYyAmIDB4ZmYpKTsKKyAgICBz d2l0Y2goYykgeworICAgICAgY2FzZSAweDAwYTY6CisgICAgICBjYXNlIDB4MDBhODoKKyAgICAg IGNhc2UgMHgwMGFjOgorICAgICAgY2FzZSAweDAwYWU6CisgICAgICBjYXNlIDB4MDBhZjoKKyAg ICAgIGNhc2UgMHgwMGI0OgorICAgICAgY2FzZSAweDAwYjg6CisgICAgICBjYXNlIDB4MDBiZToK KyAgICAgIGNhc2UgMHgwMGQwOgorICAgICAgY2FzZSAweDAwZGU6CisgICAgICBjYXNlIDB4MDBm MDoKKyAgICAgIGNhc2UgMHgwMGZlOgorICAgICAgY2FzZSAweDAwZmY6CisgICAgICAgIHJldHVy bigtMSk7ICAgICAgICAgICAgICAgICAgICAgLyogVGhlc2UgYXJlIGFsbCB1bmRlZmluZWQgaW4g REVDTUNTICovCisgICAgICBjYXNlIDB4MDBhNDogICAgICAgICAgICAgICAgICAgICAgLyogQ3Vy cmVuY3kgc2lnbiAqLworICAgICAgICByZXR1cm4oKENIQVIpMHhhOCk7CisgICAgICBjYXNlIDB4 MDE1MjogICAgICAgICAgICAgICAgICAgICAgLyogT0UgKi8KKyAgICAgICAgcmV0dXJuKChDSEFS KTB4ZDcpOworICAgICAgY2FzZSAweDAxNTM6ICAgICAgICAgICAgICAgICAgICAgIC8qIG9lICov CisgICAgICAgIHJldHVybigoQ0hBUikweGY3KTsKKyAgICAgIGRlZmF1bHQ6IHJldHVybih0eF9p ZGVudChjKSk7CisgICAgfQorfQorCitpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogTmVYVFNURVAgKi8KKyNpZmRlZiBDS19BTlNJQwordHhfbmV4dHN0ZXAoVVNIT1JU IGMpCisjZWxzZQordHhfbmV4dHN0ZXAoYykgVVNIT1JUIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMg Ki8KK3sKKyAgICBpZiAoYyA8IDB4ODApICAgICAgICAgICAgICAgICAgICAgICAvKiBIYXMgQzEg Z3JhcGhpY3MgKi8KKyAgICAgIHJldHVybigoQ0hBUikoYyAmIDB4ZmYpKTsKKyAgICBzd2l0Y2gg KGMpIHsKKyAgICAgIGNhc2UgMHgwMGEwOiByZXR1cm4oKENIQVIpKDEyOCAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgwMGExOiByZXR1cm4oKENIQVIpKDE2MSAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgwMGEyOiByZXR1cm4oKENIQVIpKDE2MiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGEzOiBy ZXR1cm4oKENIQVIpKDE2MyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGE0OiByZXR1cm4oKENI QVIpKDE2OCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGE1OiByZXR1cm4oKENIQVIpKDE2NSAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGE2OiByZXR1cm4oKENIQVIpKDE4MSAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgwMGE3OiByZXR1cm4oKENIQVIpKDE2NyAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgwMGE4OiByZXR1cm4oKENIQVIpKDIwMCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGE5 OiByZXR1cm4oKENIQVIpKDE2MCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGFhOiByZXR1cm4o KENIQVIpKDIyNyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGFiOiByZXR1cm4oKENIQVIpKDE3 MSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGFjOiByZXR1cm4oKENIQVIpKDE5MCAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgwMGFlOiByZXR1cm4oKENIQVIpKDE3NiAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgwMGFmOiByZXR1cm4oKENIQVIpKDE5NyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgw MGIxOiByZXR1cm4oKENIQVIpKDIwOSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGIyOiByZXR1 cm4oKENIQVIpKDIwMSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGIzOiByZXR1cm4oKENIQVIp KDIwNCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGI0OiByZXR1cm4oKENIQVIpKDE5NCAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGI1OiByZXR1cm4oKENIQVIpKDE1NyAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgwMGI2OiByZXR1cm4oKENIQVIpKDE4MiAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgwMGI3OiByZXR1cm4oKENIQVIpKDE4MCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGI4OiBy ZXR1cm4oKENIQVIpKDIwMyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGI5OiByZXR1cm4oKENI QVIpKDE5MiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGJhOiByZXR1cm4oKENIQVIpKDIzNSAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGJiOiByZXR1cm4oKENIQVIpKDE4NyAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgwMGJjOiByZXR1cm4oKENIQVIpKDIxMCAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgwMGJkOiByZXR1cm4oKENIQVIpKDIxMSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGJl OiByZXR1cm4oKENIQVIpKDIxMiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGJmOiByZXR1cm4o KENIQVIpKDE5MSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGMwOiByZXR1cm4oKENIQVIpKDEy OSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGMxOiByZXR1cm4oKENIQVIpKDEzMCAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgwMGMyOiByZXR1cm4oKENIQVIpKDEzMSAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgwMGMzOiByZXR1cm4oKENIQVIpKDEzMiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgw MGM0OiByZXR1cm4oKENIQVIpKDEzMyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGM1OiByZXR1 cm4oKENIQVIpKDEzNCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGM2OiByZXR1cm4oKENIQVIp KDIyNSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGM3OiByZXR1cm4oKENIQVIpKDEzNSAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGM4OiByZXR1cm4oKENIQVIpKDEzNiAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgwMGM5OiByZXR1cm4oKENIQVIpKDEzNyAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgwMGNhOiByZXR1cm4oKENIQVIpKDEzOCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGNiOiBy ZXR1cm4oKENIQVIpKDEzOSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGNjOiByZXR1cm4oKENI QVIpKDE0MCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGNkOiByZXR1cm4oKENIQVIpKDE0MSAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGNlOiByZXR1cm4oKENIQVIpKDE0MiAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgwMGNmOiByZXR1cm4oKENIQVIpKDE0MyAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgwMGQwOiByZXR1cm4oKENIQVIpKDE0NCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGQx OiByZXR1cm4oKENIQVIpKDE0NSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGQyOiByZXR1cm4o KENIQVIpKDE0NiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGQzOiByZXR1cm4oKENIQVIpKDE0 NyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGQ0OiByZXR1cm4oKENIQVIpKDE0OCAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgwMGQ1OiByZXR1cm4oKENIQVIpKDE0OSAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgwMGQ2OiByZXR1cm4oKENIQVIpKDE1MCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgw MGQ3OiByZXR1cm4oKENIQVIpKDE1OCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGQ4OiByZXR1 cm4oKENIQVIpKDIzMyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGQ5OiByZXR1cm4oKENIQVIp KDE1MSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGRhOiByZXR1cm4oKENIQVIpKDE1MiAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGRiOiByZXR1cm4oKENIQVIpKDE1MyAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgwMGRjOiByZXR1cm4oKENIQVIpKDE1NCAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgwMGRkOiByZXR1cm4oKENIQVIpKDE1NSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGRlOiBy ZXR1cm4oKENIQVIpKDE1NiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGRmOiByZXR1cm4oKENI QVIpKDI1MSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGUwOiByZXR1cm4oKENIQVIpKDIxMyAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGUxOiByZXR1cm4oKENIQVIpKDIxNCAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgwMGUyOiByZXR1cm4oKENIQVIpKDIxNSAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgwMGUzOiByZXR1cm4oKENIQVIpKDIxNiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGU0 OiByZXR1cm4oKENIQVIpKDIxNyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGU1OiByZXR1cm4o KENIQVIpKDIxOCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGU2OiByZXR1cm4oKENIQVIpKDI0 MSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGU3OiByZXR1cm4oKENIQVIpKDIxOSAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgwMGU4OiByZXR1cm4oKENIQVIpKDIyMCAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgwMGU5OiByZXR1cm4oKENIQVIpKDIyMSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgw MGVhOiByZXR1cm4oKENIQVIpKDIyMiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGViOiByZXR1 cm4oKENIQVIpKDIyMyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGVjOiByZXR1cm4oKENIQVIp KDIyNCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGVkOiByZXR1cm4oKENIQVIpKDIyNiAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGVlOiByZXR1cm4oKENIQVIpKDIyOCAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgwMGVmOiByZXR1cm4oKENIQVIpKDIyOSAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgwMGYwOiByZXR1cm4oKENIQVIpKDIzMCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGYxOiBy ZXR1cm4oKENIQVIpKDIzMSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGYyOiByZXR1cm4oKENI QVIpKDIzNiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGYzOiByZXR1cm4oKENIQVIpKDIzNyAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGY0OiByZXR1cm4oKENIQVIpKDIzOCAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgwMGY1OiByZXR1cm4oKENIQVIpKDIzOSAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgwMGY2OiByZXR1cm4oKENIQVIpKDI0MCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGY3 OiByZXR1cm4oKENIQVIpKDE1OSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGY4OiByZXR1cm4o KENIQVIpKDI0OSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGY5OiByZXR1cm4oKENIQVIpKDI0 MiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGZhOiByZXR1cm4oKENIQVIpKDI0MyAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgwMGZiOiByZXR1cm4oKENIQVIpKDI0NCAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgwMGZjOiByZXR1cm4oKENIQVIpKDI0NiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgw MGZkOiByZXR1cm4oKENIQVIpKDI0NyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGZlOiByZXR1 cm4oKENIQVIpKDI1MiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGZmOiByZXR1cm4oKENIQVIp KDI1MyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMTMxOiByZXR1cm4oKENIQVIpKDI0NSAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgwMTQxOiByZXR1cm4oKENIQVIpKDIzMiAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgwMTQyOiByZXR1cm4oKENIQVIpKDI0OCAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgwMTUyOiByZXR1cm4oKENIQVIpKDIzNCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMTUzOiBy ZXR1cm4oKENIQVIpKDI1MCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMTkyOiByZXR1cm4oKENI QVIpKDE2NiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMmM2OiByZXR1cm4oKENIQVIpKDE5NSAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMmM3OiByZXR1cm4oKENIQVIpKDIwNyAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgwMmNiOiByZXR1cm4oKENIQVIpKDE5MyAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgwMmQ4OiByZXR1cm4oKENIQVIpKDE5OCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMmQ5 OiByZXR1cm4oKENIQVIpKDE5OSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMmRhOiByZXR1cm4o KENIQVIpKDIwMiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMmRiOiByZXR1cm4oKENIQVIpKDIw NiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMmRjOiByZXR1cm4oKENIQVIpKDE5NiAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgwMmRkOiByZXR1cm4oKENIQVIpKDIwNSAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgyMDEzOiByZXR1cm4oKENIQVIpKDE3NyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgy MDE0OiByZXR1cm4oKENIQVIpKDIwOCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMDE5OiByZXR1 cm4oKENIQVIpKDE2OSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMDFhOiByZXR1cm4oKENIQVIp KDE4NCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMDFjOiByZXR1cm4oKENIQVIpKDE3MCAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgyMDFkOiByZXR1cm4oKENIQVIpKDE4NiAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgyMDFlOiByZXR1cm4oKENIQVIpKDE4NSAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgyMDIwOiByZXR1cm4oKENIQVIpKDE3OCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMDIxOiBy ZXR1cm4oKENIQVIpKDE3OSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMDIyOiByZXR1cm4oKENI QVIpKDE4MyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMDI2OiByZXR1cm4oKENIQVIpKDE4OCAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMDMwOiByZXR1cm4oKENIQVIpKDE4OSAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgyMDM5OiByZXR1cm4oKENIQVIpKDE3MiAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgyMDNhOiByZXR1cm4oKENIQVIpKDE3MyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMDQ0 OiByZXR1cm4oKENIQVIpKDE2NCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHhmYjAxOiByZXR1cm4o KENIQVIpKDE3NCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHhmYjAyOiByZXR1cm4oKENIQVIpKDE3 NSAmIDB4ZmYpKTsKKyAgICAgIGRlZmF1bHQ6IHJldHVybih0eF9wdW5jKGMpKTsKKyAgICB9Cit9 CisKK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBERyBJbnRlcm5h dGlvbmFsICovCisjaWZkZWYgQ0tfQU5TSUMKK3R4X2RnaShVU0hPUlQgYykKKyNlbHNlCit0eF9k Z2koYykgVVNIT1JUIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAgICBpZiAoYyA8IDB4 YTApCisgICAgICByZXR1cm4oKENIQVIpKGMgJiAweGZmKSk7CisgICAgc3dpdGNoKGMpIHsKKyAg ICAgIGNhc2UgMHgwMGEwOiByZXR1cm4oKENIQVIpKDE2MCAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgwMGExOiByZXR1cm4oKENIQVIpKDE3MSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGEyOiBy ZXR1cm4oKENIQVIpKDE2NyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGEzOiByZXR1cm4oKENI QVIpKDE2OCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGE0OiByZXR1cm4oKENIQVIpKDE2NiAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGE1OiByZXR1cm4oKENIQVIpKDE4MSAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgwMGE3OiByZXR1cm4oKENIQVIpKDE4NyAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgwMGE4OiByZXR1cm4oKENIQVIpKDE4OSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGE5 OiByZXR1cm4oKENIQVIpKDE3MyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGFhOiByZXR1cm4o KENIQVIpKDE2OSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGFiOiByZXR1cm4oKENIQVIpKDE3 NyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGFjOiByZXR1cm4oKENIQVIpKDE2MSAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgwMGFlOiByZXR1cm4oKENIQVIpKDE3NCAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgwMGIwOiByZXR1cm4oKENIQVIpKDE4OCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgw MGIxOiByZXR1cm4oKENIQVIpKDE4MiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGIyOiByZXR1 cm4oKENIQVIpKDE2NCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGIzOiByZXR1cm4oKENIQVIp KDE2NSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGI0OiByZXR1cm4oKENIQVIpKDE5MCAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGI1OiByZXR1cm4oKENIQVIpKDE2MyAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgwMGI2OiByZXR1cm4oKENIQVIpKDE3OCAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgwMGI3OiByZXR1cm4oKENIQVIpKDE4NSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGI4OiBy ZXR1cm4oKENIQVIpKDE4NiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGJhOiByZXR1cm4oKENI QVIpKDE3MCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGJiOiByZXR1cm4oKENIQVIpKDE3NiAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGJkOiByZXR1cm4oKENIQVIpKDE2MiAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgwMGJmOiByZXR1cm4oKENIQVIpKDE3MiAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgwMGMwOiByZXR1cm4oKENIQVIpKDE5MyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGMx OiByZXR1cm4oKENIQVIpKDE5MiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGMyOiByZXR1cm4o KENIQVIpKDE5NCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGMzOiByZXR1cm4oKENIQVIpKDE5 NiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGM0OiByZXR1cm4oKENIQVIpKDE5NSAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgwMGM1OiByZXR1cm4oKENIQVIpKDE5NyAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgwMGM2OiByZXR1cm4oKENIQVIpKDE5OCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgw MGM3OiByZXR1cm4oKENIQVIpKDE5OSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGM4OiByZXR1 cm4oKENIQVIpKDIwMSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGM5OiByZXR1cm4oKENIQVIp KDIwMCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGNhOiByZXR1cm4oKENIQVIpKDIwMiAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGNiOiByZXR1cm4oKENIQVIpKDIwMyAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgwMGNjOiByZXR1cm4oKENIQVIpKDIwNSAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgwMGNkOiByZXR1cm4oKENIQVIpKDIwNCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGNlOiBy ZXR1cm4oKENIQVIpKDIwNiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGNmOiByZXR1cm4oKENI QVIpKDIwNyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGQxOiByZXR1cm4oKENIQVIpKDIwOCAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGQyOiByZXR1cm4oKENIQVIpKDIxMCAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgwMGQzOiByZXR1cm4oKENIQVIpKDIwOSAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgwMGQ0OiByZXR1cm4oKENIQVIpKDIxMSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGQ1 OiByZXR1cm4oKENIQVIpKDIxMyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGQ2OiByZXR1cm4o KENIQVIpKDIxMiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGQ4OiByZXR1cm4oKENIQVIpKDIx NCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGQ5OiByZXR1cm4oKENIQVIpKDIxNyAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgwMGRhOiByZXR1cm4oKENIQVIpKDIxNiAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgwMGRiOiByZXR1cm4oKENIQVIpKDIxOCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgw MGRjOiByZXR1cm4oKENIQVIpKDIxOSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGRmOiByZXR1 cm4oKENIQVIpKDI1MiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGUwOiByZXR1cm4oKENIQVIp KDIyNSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGUxOiByZXR1cm4oKENIQVIpKDIyNCAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGUyOiByZXR1cm4oKENIQVIpKDIyNiAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgwMGUzOiByZXR1cm4oKENIQVIpKDIyOCAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgwMGU0OiByZXR1cm4oKENIQVIpKDIyNyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGU1OiBy ZXR1cm4oKENIQVIpKDIyOSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGU2OiByZXR1cm4oKENI QVIpKDIzMCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGU3OiByZXR1cm4oKENIQVIpKDIzMSAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGU4OiByZXR1cm4oKENIQVIpKDIzMyAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgwMGU5OiByZXR1cm4oKENIQVIpKDIzMiAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgwMGVhOiByZXR1cm4oKENIQVIpKDIzNCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGVi OiByZXR1cm4oKENIQVIpKDIzNSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGVjOiByZXR1cm4o KENIQVIpKDIzNyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGVkOiByZXR1cm4oKENIQVIpKDIz NiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGVlOiByZXR1cm4oKENIQVIpKDIzOCAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgwMGVmOiByZXR1cm4oKENIQVIpKDIzOSAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgwMGYxOiByZXR1cm4oKENIQVIpKDI0MCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgw MGYyOiByZXR1cm4oKENIQVIpKDI0MiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGYzOiByZXR1 cm4oKENIQVIpKDI0MSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGY0OiByZXR1cm4oKENIQVIp KDI0MyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGY1OiByZXR1cm4oKENIQVIpKDI0NSAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGY2OiByZXR1cm4oKENIQVIpKDI0NCAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgwMGY4OiByZXR1cm4oKENIQVIpKDI0NiAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgwMGY5OiByZXR1cm4oKENIQVIpKDI0OSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGZhOiBy ZXR1cm4oKENIQVIpKDI0OCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGZiOiByZXR1cm4oKENI QVIpKDI1MCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGZjOiByZXR1cm4oKENIQVIpKDI1MSAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGZmOiByZXR1cm4oKENIQVIpKDI1MyAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgwMTUzOiByZXR1cm4oKENIQVIpKDI0NyAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgwMTc4OiByZXR1cm4oKENIQVIpKDIyMSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMTky OiByZXR1cm4oKENIQVIpKDE4MCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMjc2OiByZXR1cm4o KENIQVIpKDIxNSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMDIxOiByZXR1cm4oKENIQVIpKDE3 NSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMTIyOiByZXR1cm4oKENIQVIpKDE3OSAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgyMTkxOiByZXR1cm4oKENIQVIpKDE5MSAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgyMjY0OiByZXR1cm4oKENIQVIpKDE4MyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgy MjY1OiByZXR1cm4oKENIQVIpKDE4NCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTg4OiByZXR1 cm4oKENIQVIpKDI1NSAmIDB4ZmYpKTsKKyAgICAgIGRlZmF1bHQ6IHJldHVybih0eF9wdW5jKGMp KTsKKyAgICB9Cit9CisKK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBNYWNpbnRvc2ggTGF0aW4gKi8KKyNpZmRlZiBDS19BTlNJQwordHhfbWFjbGF0aW4oVVNIT1JU IGMpCisjZWxzZQordHhfbWFjbGF0aW4oYykgVVNIT1JUIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMg Ki8KK3sKKyAgICBpZiAoYyA8IDB4ODApICAgICAgICAgICAgICAgICAgICAgICAvKiBIYXMgQzEg Z3JhcGhpY3MgKi8KKyAgICAgIHJldHVybigoQ0hBUikoYyAmIDB4ZmYpKTsKKyAgICBzd2l0Y2gg KGMpIHsKKyAgICAgIGNhc2UgMHgwMGEwOiByZXR1cm4oKENIQVIpKDIwMiAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgwMGExOiByZXR1cm4oKENIQVIpKDE5MyAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgwMGEyOiByZXR1cm4oKENIQVIpKDE2MiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGEzOiBy ZXR1cm4oKENIQVIpKDE2MyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGE0OiByZXR1cm4oKENI QVIpKDIxOSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGE1OiByZXR1cm4oKENIQVIpKDE4MCAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGE3OiByZXR1cm4oKENIQVIpKDE2NCAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgwMGE4OiByZXR1cm4oKENIQVIpKDE3MiAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgwMGE5OiByZXR1cm4oKENIQVIpKDE2OSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGFh OiByZXR1cm4oKENIQVIpKDE4NyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGFiOiByZXR1cm4o KENIQVIpKDE5OSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGFjOiByZXR1cm4oKENIQVIpKDE5 NCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGFlOiByZXR1cm4oKENIQVIpKDE2OCAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgwMGFmOiByZXR1cm4oKENIQVIpKDI0OCAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgwMGIwOiByZXR1cm4oKENIQVIpKDE2MSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgw MGIxOiByZXR1cm4oKENIQVIpKDE3NyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGI0OiByZXR1 cm4oKENIQVIpKDE3MSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGI1OiByZXR1cm4oKENIQVIp KDE4MSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGI2OiByZXR1cm4oKENIQVIpKDE2NiAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGI3OiByZXR1cm4oKENIQVIpKDIyNSAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgwMGI4OiByZXR1cm4oKENIQVIpKDI1MiAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgwMGJhOiByZXR1cm4oKENIQVIpKDE4OCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGJiOiBy ZXR1cm4oKENIQVIpKDIwMCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGJmOiByZXR1cm4oKENI QVIpKDE5MiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGMwOiByZXR1cm4oKENIQVIpKDIwMyAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGMxOiByZXR1cm4oKENIQVIpKDIzMSAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgwMGMyOiByZXR1cm4oKENIQVIpKDIyOSAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgwMGMzOiByZXR1cm4oKENIQVIpKDIwNCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGM0 OiByZXR1cm4oKENIQVIpKDEyOCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGM1OiByZXR1cm4o KENIQVIpKDEyOSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGM2OiByZXR1cm4oKENIQVIpKDE3 NCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGM3OiByZXR1cm4oKENIQVIpKDEzMCAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgwMGM4OiByZXR1cm4oKENIQVIpKDIzMyAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgwMGM5OiByZXR1cm4oKENIQVIpKDEzMSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgw MGNhOiByZXR1cm4oKENIQVIpKDIzMCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGNiOiByZXR1 cm4oKENIQVIpKDIzMiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGNjOiByZXR1cm4oKENIQVIp KDIzNyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGNkOiByZXR1cm4oKENIQVIpKDIzNCAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGNlOiByZXR1cm4oKENIQVIpKDIzNSAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgwMGNmOiByZXR1cm4oKENIQVIpKDIzNiAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgwMGQwOiByZXR1cm4oKENIQVIpKDIyMCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGQxOiBy ZXR1cm4oKENIQVIpKDEzMiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGQyOiByZXR1cm4oKENI QVIpKDI0MSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGQzOiByZXR1cm4oKENIQVIpKDIzOCAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGQ0OiByZXR1cm4oKENIQVIpKDIzOSAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgwMGQ1OiByZXR1cm4oKENIQVIpKDIwNSAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgwMGQ2OiByZXR1cm4oKENIQVIpKDEzMyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGQ4 OiByZXR1cm4oKENIQVIpKDE3NSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGQ5OiByZXR1cm4o KENIQVIpKDI0NCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGRhOiByZXR1cm4oKENIQVIpKDI0 MiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGRiOiByZXR1cm4oKENIQVIpKDI0MyAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgwMGRjOiByZXR1cm4oKENIQVIpKDEzNCAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgwMGRkOiByZXR1cm4oKENIQVIpKDE2MCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgw MGRlOiByZXR1cm4oKENIQVIpKDIyMiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGRmOiByZXR1 cm4oKENIQVIpKDE2NyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGUwOiByZXR1cm4oKENIQVIp KDEzNiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGUxOiByZXR1cm4oKENIQVIpKDEzNSAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGUyOiByZXR1cm4oKENIQVIpKDEzNyAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgwMGUzOiByZXR1cm4oKENIQVIpKDEzOSAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgwMGU0OiByZXR1cm4oKENIQVIpKDEzOCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGU1OiBy ZXR1cm4oKENIQVIpKDE0MCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGU2OiByZXR1cm4oKENI QVIpKDE5MCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGU3OiByZXR1cm4oKENIQVIpKDE0MSAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGU4OiByZXR1cm4oKENIQVIpKDE0MyAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgwMGU5OiByZXR1cm4oKENIQVIpKDE0MiAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgwMGVhOiByZXR1cm4oKENIQVIpKDE0NCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGVi OiByZXR1cm4oKENIQVIpKDE0NSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGVjOiByZXR1cm4o KENIQVIpKDE0NyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGVkOiByZXR1cm4oKENIQVIpKDE0 NiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGVlOiByZXR1cm4oKENIQVIpKDE0OCAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgwMGVmOiByZXR1cm4oKENIQVIpKDE0OSAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgwMGYwOiByZXR1cm4oKENIQVIpKDIyMSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgw MGYxOiByZXR1cm4oKENIQVIpKDE1MCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGYyOiByZXR1 cm4oKENIQVIpKDE1MiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGYzOiByZXR1cm4oKENIQVIp KDE1MSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGY0OiByZXR1cm4oKENIQVIpKDE1MyAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGY1OiByZXR1cm4oKENIQVIpKDE1NSAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgwMGY2OiByZXR1cm4oKENIQVIpKDE1NCAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgwMGY3OiByZXR1cm4oKENIQVIpKDIxNCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGY4OiBy ZXR1cm4oKENIQVIpKDE5MSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGY5OiByZXR1cm4oKENI QVIpKDE1NyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGZhOiByZXR1cm4oKENIQVIpKDE1NiAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGZiOiByZXR1cm4oKENIQVIpKDE1OCAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgwMGZjOiByZXR1cm4oKENIQVIpKDE1OSAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgwMGZkOiByZXR1cm4oKENIQVIpKDIyNCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGZl OiByZXR1cm4oKENIQVIpKDIyMyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGZmOiByZXR1cm4o KENIQVIpKDIxNiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMTMxOiByZXR1cm4oKENIQVIpKDI0 NSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMTUyOiByZXR1cm4oKENIQVIpKDIwNiAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgwMTUzOiByZXR1cm4oKENIQVIpKDIwNyAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgwMTc4OiByZXR1cm4oKENIQVIpKDIxNyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgw MTkyOiByZXR1cm4oKENIQVIpKDE5NiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMmM2OiByZXR1 cm4oKENIQVIpKDI0NiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMmM3OiByZXR1cm4oKENIQVIp KDI1NSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMmQ4OiByZXR1cm4oKENIQVIpKDI0OSAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgwMmQ5OiByZXR1cm4oKENIQVIpKDI1MCAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgwMmRhOiByZXR1cm4oKENIQVIpKDI1MSAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgwMmRiOiByZXR1cm4oKENIQVIpKDI1NCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMmRjOiBy ZXR1cm4oKENIQVIpKDI0NyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMmRkOiByZXR1cm4oKENI QVIpKDI1MyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwM2MwOiByZXR1cm4oKENIQVIpKDE4NSAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMDEzOiByZXR1cm4oKENIQVIpKDIwOCAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgyMDE0OiByZXR1cm4oKENIQVIpKDIwOSAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgyMDE4OiByZXR1cm4oKENIQVIpKDIxMiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMDE5 OiByZXR1cm4oKENIQVIpKDIxMyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMDFhOiByZXR1cm4o KENIQVIpKDIyNiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMDFjOiByZXR1cm4oKENIQVIpKDIx MCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMDFkOiByZXR1cm4oKENIQVIpKDIxMSAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgyMDFlOiByZXR1cm4oKENIQVIpKDIyNyAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgyMDIyOiByZXR1cm4oKENIQVIpKDE2NSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgy MDI2OiByZXR1cm4oKENIQVIpKDIwMSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMDMwOiByZXR1 cm4oKENIQVIpKDIyOCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMDQ0OiByZXR1cm4oKENIQVIp KDIxOCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMTIyOiByZXR1cm4oKENIQVIpKDE3MCAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgyMTI2OiByZXR1cm4oKENIQVIpKDE4OSAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgyMjAyOiByZXR1cm4oKENIQVIpKDE4MiAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgyMjA2OiByZXR1cm4oKENIQVIpKDE5OCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMjBmOiBy ZXR1cm4oKENIQVIpKDE4NCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMjExOiByZXR1cm4oKENI QVIpKDE4MyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMjFhOiByZXR1cm4oKENIQVIpKDE5NSAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMjFlOiByZXR1cm4oKENIQVIpKDE3NiAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgyMjJiOiByZXR1cm4oKENIQVIpKDE4NiAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgyMjQ4OiByZXR1cm4oKENIQVIpKDE5NyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMjYw OiByZXR1cm4oKENIQVIpKDE3MyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMjY0OiByZXR1cm4o KENIQVIpKDE3OCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMjY1OiByZXR1cm4oKENIQVIpKDE3 OSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNWNhOiByZXR1cm4oKENIQVIpKDIxNSAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHhmOGZmOiByZXR1cm4oKENIQVIpKDI0MCAmIDB4ZmYpKTsKKyAgICAg IGRlZmF1bHQ6IHJldHVybih0eF9wdW5jKGMpKTsKKyAgICB9Cit9CisKK2ludCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBcHBsZSBRdWlja0RyYXcgLyBDUDEwMDAwICov CisjaWZkZWYgQ0tfQU5TSUMKK3R4X3F1aWNrZHJhdyhVU0hPUlQgYykKKyNlbHNlCit0eF9xdWlj a2RyYXcoYykgVVNIT1JUIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAgICBpZiAoYyA8 IDB4ODApICAgICAgICAgICAgICAgICAgICAgICAvKiBIYXMgQzEgZ3JhcGhpY3MgKi8KKyAgICAg IHJldHVybigoQ0hBUikoYyAmIDB4ZmYpKTsKKyAgICBzd2l0Y2ggKGMpIHsKKyAgICAgIGNhc2Ug MHgwMGEwOiByZXR1cm4oKENIQVIpKDIwMiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGExOiBy ZXR1cm4oKENIQVIpKDE5MyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGEyOiByZXR1cm4oKENI QVIpKDE2MiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGEzOiByZXR1cm4oKENIQVIpKDE2MyAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGE0OiByZXR1cm4oKENIQVIpKDIxOSAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgwMGE1OiByZXR1cm4oKENIQVIpKDE4MCAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgwMGE3OiByZXR1cm4oKENIQVIpKDE2NCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGE4 OiByZXR1cm4oKENIQVIpKDE3MiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGE5OiByZXR1cm4o KENIQVIpKDE2OSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGFhOiByZXR1cm4oKENIQVIpKDE4 NyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGFiOiByZXR1cm4oKENIQVIpKDE5OSAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgwMGFjOiByZXR1cm4oKENIQVIpKDE5NCAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgwMGFlOiByZXR1cm4oKENIQVIpKDE2OCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgw MGFmOiByZXR1cm4oKENIQVIpKDI0OCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGIwOiByZXR1 cm4oKENIQVIpKDE2MSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGIxOiByZXR1cm4oKENIQVIp KDE3NyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGI0OiByZXR1cm4oKENIQVIpKDE3MSAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGI1OiByZXR1cm4oKENIQVIpKDE4MSAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgwMGI2OiByZXR1cm4oKENIQVIpKDE2NiAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgwMGI3OiByZXR1cm4oKENIQVIpKDIyNSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGI4OiBy ZXR1cm4oKENIQVIpKDI1MiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGJhOiByZXR1cm4oKENI QVIpKDE4OCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGJiOiByZXR1cm4oKENIQVIpKDIwMCAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGJmOiByZXR1cm4oKENIQVIpKDE5MiAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgwMGMwOiByZXR1cm4oKENIQVIpKDIwMyAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgwMGMxOiByZXR1cm4oKENIQVIpKDIzMSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGMy OiByZXR1cm4oKENIQVIpKDIyOSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGMzOiByZXR1cm4o KENIQVIpKDIwNCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGM0OiByZXR1cm4oKENIQVIpKDEy OCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGM1OiByZXR1cm4oKENIQVIpKDEyOSAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgwMGM2OiByZXR1cm4oKENIQVIpKDE3NCAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgwMGM3OiByZXR1cm4oKENIQVIpKDEzMCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgw MGM4OiByZXR1cm4oKENIQVIpKDIzMyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGM5OiByZXR1 cm4oKENIQVIpKDEzMSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGNhOiByZXR1cm4oKENIQVIp KDIzMCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGNiOiByZXR1cm4oKENIQVIpKDIzMiAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGNjOiByZXR1cm4oKENIQVIpKDIzNyAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgwMGNkOiByZXR1cm4oKENIQVIpKDIzNCAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgwMGNlOiByZXR1cm4oKENIQVIpKDIzNSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGNmOiBy ZXR1cm4oKENIQVIpKDIzNiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMDM5OiByZXR1cm4oKENI QVIpKDIyMCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGQxOiByZXR1cm4oKENIQVIpKDEzMiAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGQyOiByZXR1cm4oKENIQVIpKDI0MSAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgwMGQzOiByZXR1cm4oKENIQVIpKDIzOCAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgwMGQ0OiByZXR1cm4oKENIQVIpKDIzOSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGQ1 OiByZXR1cm4oKENIQVIpKDIwNSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGQ2OiByZXR1cm4o KENIQVIpKDEzMyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGQ4OiByZXR1cm4oKENIQVIpKDE3 NSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGQ5OiByZXR1cm4oKENIQVIpKDI0NCAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgwMGRhOiByZXR1cm4oKENIQVIpKDI0MiAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgwMGRiOiByZXR1cm4oKENIQVIpKDI0MyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgw MGRjOiByZXR1cm4oKENIQVIpKDEzNCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMDIwOiByZXR1 cm4oKENIQVIpKDE2MCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHhmYjAxOiByZXR1cm4oKENIQVIp KDIyMiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGRmOiByZXR1cm4oKENIQVIpKDE2NyAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGUwOiByZXR1cm4oKENIQVIpKDEzNiAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgwMGUxOiByZXR1cm4oKENIQVIpKDEzNSAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgwMGUyOiByZXR1cm4oKENIQVIpKDEzNyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGUzOiBy ZXR1cm4oKENIQVIpKDEzOSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGU0OiByZXR1cm4oKENI QVIpKDEzOCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGU1OiByZXR1cm4oKENIQVIpKDE0MCAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGU2OiByZXR1cm4oKENIQVIpKDE5MCAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgwMGU3OiByZXR1cm4oKENIQVIpKDE0MSAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgwMGU4OiByZXR1cm4oKENIQVIpKDE0MyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGU5 OiByZXR1cm4oKENIQVIpKDE0MiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGVhOiByZXR1cm4o KENIQVIpKDE0NCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGViOiByZXR1cm4oKENIQVIpKDE0 NSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGVjOiByZXR1cm4oKENIQVIpKDE0NyAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgwMGVkOiByZXR1cm4oKENIQVIpKDE0NiAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgwMGVlOiByZXR1cm4oKENIQVIpKDE0OCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgw MGVmOiByZXR1cm4oKENIQVIpKDE0OSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMDNhOiByZXR1 cm4oKENIQVIpKDIyMSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGYxOiByZXR1cm4oKENIQVIp KDE1MCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGYyOiByZXR1cm4oKENIQVIpKDE1MiAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGYzOiByZXR1cm4oKENIQVIpKDE1MSAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgwMGY0OiByZXR1cm4oKENIQVIpKDE1MyAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgwMGY1OiByZXR1cm4oKENIQVIpKDE1NSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGY2OiBy ZXR1cm4oKENIQVIpKDE1NCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGY3OiByZXR1cm4oKENI QVIpKDIxNCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGY4OiByZXR1cm4oKENIQVIpKDE5MSAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGY5OiByZXR1cm4oKENIQVIpKDE1NyAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgwMGZhOiByZXR1cm4oKENIQVIpKDE1NiAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgwMGZiOiByZXR1cm4oKENIQVIpKDE1OCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGZj OiByZXR1cm4oKENIQVIpKDE1OSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMDIxOiByZXR1cm4o KENIQVIpKDIyNCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHhmYjAyOiByZXR1cm4oKENIQVIpKDIy MyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGZmOiByZXR1cm4oKENIQVIpKDIxNiAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgwMTMxOiByZXR1cm4oKENIQVIpKDI0NSAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgwMTUyOiByZXR1cm4oKENIQVIpKDIwNiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgw MTUzOiByZXR1cm4oKENIQVIpKDIwNyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMTc4OiByZXR1 cm4oKENIQVIpKDIxNyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMTkyOiByZXR1cm4oKENIQVIp KDE5NiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMmM2OiByZXR1cm4oKENIQVIpKDI0NiAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgwMmM3OiByZXR1cm4oKENIQVIpKDI1NSAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgwMmQ4OiByZXR1cm4oKENIQVIpKDI0OSAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgwMmQ5OiByZXR1cm4oKENIQVIpKDI1MCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMmRhOiBy ZXR1cm4oKENIQVIpKDI1MSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMmRiOiByZXR1cm4oKENI QVIpKDI1NCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMmRjOiByZXR1cm4oKENIQVIpKDI0NyAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMmRkOiByZXR1cm4oKENIQVIpKDI1MyAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgwM2MwOiByZXR1cm4oKENIQVIpKDE4NSAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgyMDEzOiByZXR1cm4oKENIQVIpKDIwOCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMDE0 OiByZXR1cm4oKENIQVIpKDIwOSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMDE4OiByZXR1cm4o KENIQVIpKDIxMiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMDE5OiByZXR1cm4oKENIQVIpKDIx MyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMDFhOiByZXR1cm4oKENIQVIpKDIyNiAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgyMDFjOiByZXR1cm4oKENIQVIpKDIxMCAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgyMDFkOiByZXR1cm4oKENIQVIpKDIxMSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgy MDFlOiByZXR1cm4oKENIQVIpKDIyNyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMDIyOiByZXR1 cm4oKENIQVIpKDE2NSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMDI2OiByZXR1cm4oKENIQVIp KDIwMSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMDMwOiByZXR1cm4oKENIQVIpKDIyOCAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgyMDQ0OiByZXR1cm4oKENIQVIpKDIxOCAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgyMTIyOiByZXR1cm4oKENIQVIpKDE3MCAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgwM2E5OiByZXR1cm4oKENIQVIpKDE4OSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMjAyOiBy ZXR1cm4oKENIQVIpKDE4MiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMjA2OiByZXR1cm4oKENI QVIpKDE5OCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMjBmOiByZXR1cm4oKENIQVIpKDE4NCAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMjExOiByZXR1cm4oKENIQVIpKDE4MyAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgyMjFhOiByZXR1cm4oKENIQVIpKDE5NSAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgyMjFlOiByZXR1cm4oKENIQVIpKDE3NiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMjJi OiByZXR1cm4oKENIQVIpKDE4NiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMjQ4OiByZXR1cm4o KENIQVIpKDE5NyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMjYwOiByZXR1cm4oKENIQVIpKDE3 MyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMjY0OiByZXR1cm4oKENIQVIpKDE3OCAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgyMjY1OiByZXR1cm4oKENIQVIpKDE3OSAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgyNWNhOiByZXR1cm4oKENIQVIpKDIxNSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHhm OGZmOiByZXR1cm4oKENIQVIpKDI0MCAmIDB4ZmYpKTsKKyAgICAgIGRlZmF1bHQ6IHJldHVybih0 eF9wdW5jKGMpKTsKKyAgICB9Cit9CisKK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBIUCBSb21hbi04ICovCisjaWZkZWYgQ0tfQU5TSUMKK3R4X2hwcm9tYW44KFVT SE9SVCBjKQorI2Vsc2UKK3R4X2hwcm9tYW44KGMpIFVTSE9SVCBjOworI2VuZGlmIC8qIENLX0FO U0lDICovCit7CisgICAgaWYgKGMgPCAweGEwKQorICAgICAgcmV0dXJuKChDSEFSKShjICYgMHhm ZikpOworICAgIHN3aXRjaChjKSB7CisgICAgICBjYXNlIDB4MDBhMDogcmV0dXJuKChDSEFSKSgx NjAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBhMTogcmV0dXJuKChDSEFSKSgxNzEgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MDBhMjogcmV0dXJuKChDSEFSKSgxNjcgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MDBhMzogcmV0dXJuKChDSEFSKSgxNjggJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MDBhNDogcmV0dXJuKChDSEFSKSgxNjYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBhNTogcmV0 dXJuKChDSEFSKSgxODEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBhNzogcmV0dXJuKChDSEFS KSgxODcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBhODogcmV0dXJuKChDSEFSKSgxODkgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MDBhOTogcmV0dXJuKChDSEFSKSgxNzMgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MDBhYTogcmV0dXJuKChDSEFSKSgxNjkgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MDBhYjogcmV0dXJuKChDSEFSKSgxNzcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBhYzog cmV0dXJuKChDSEFSKSgxNjEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBhZTogcmV0dXJuKChD SEFSKSgxNzQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBiMDogcmV0dXJuKChDSEFSKSgxODgg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBiMTogcmV0dXJuKChDSEFSKSgxODIgJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MDBiMjogcmV0dXJuKChDSEFSKSgxNjQgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MDBiMzogcmV0dXJuKChDSEFSKSgxNjUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBi NDogcmV0dXJuKChDSEFSKSgxOTAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBiNTogcmV0dXJu KChDSEFSKSgxNjMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBiNjogcmV0dXJuKChDSEFSKSgx NzggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBiNzogcmV0dXJuKChDSEFSKSgxODUgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MDBiODogcmV0dXJuKChDSEFSKSgxODYgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MDBiYTogcmV0dXJuKChDSEFSKSgxNzAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MDBiYjogcmV0dXJuKChDSEFSKSgxNzYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBiZDogcmV0 dXJuKChDSEFSKSgxNjIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBiZjogcmV0dXJuKChDSEFS KSgxNzIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBjMDogcmV0dXJuKChDSEFSKSgxOTMgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MDBjMTogcmV0dXJuKChDSEFSKSgxOTIgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MDBjMjogcmV0dXJuKChDSEFSKSgxOTQgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MDBjMzogcmV0dXJuKChDSEFSKSgxOTYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBjNDog cmV0dXJuKChDSEFSKSgxOTUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBjNTogcmV0dXJuKChD SEFSKSgxOTcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBjNjogcmV0dXJuKChDSEFSKSgxOTgg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBjNzogcmV0dXJuKChDSEFSKSgxOTkgJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MDBjODogcmV0dXJuKChDSEFSKSgyMDEgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MDBjOTogcmV0dXJuKChDSEFSKSgyMDAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBj YTogcmV0dXJuKChDSEFSKSgyMDIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBjYjogcmV0dXJu KChDSEFSKSgyMDMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBjYzogcmV0dXJuKChDSEFSKSgy MDUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBjZDogcmV0dXJuKChDSEFSKSgyMDQgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MDBjZTogcmV0dXJuKChDSEFSKSgyMDYgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MDBjZjogcmV0dXJuKChDSEFSKSgyMDcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MDBkMTogcmV0dXJuKChDSEFSKSgyMDggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBkMjogcmV0 dXJuKChDSEFSKSgyMTAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBkMzogcmV0dXJuKChDSEFS KSgyMDkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBkNDogcmV0dXJuKChDSEFSKSgyMTEgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MDBkNTogcmV0dXJuKChDSEFSKSgyMTMgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MDBkNjogcmV0dXJuKChDSEFSKSgyMTIgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MDBkODogcmV0dXJuKChDSEFSKSgyMTQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBkOTog cmV0dXJuKChDSEFSKSgyMTcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBkYTogcmV0dXJuKChD SEFSKSgyMTYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBkYjogcmV0dXJuKChDSEFSKSgyMTgg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBkYzogcmV0dXJuKChDSEFSKSgyMTkgJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MDBkZjogcmV0dXJuKChDSEFSKSgyNTIgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MDBlMDogcmV0dXJuKChDSEFSKSgyMjUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBl MTogcmV0dXJuKChDSEFSKSgyMjQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBlMjogcmV0dXJu KChDSEFSKSgyMjYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBlMzogcmV0dXJuKChDSEFSKSgy MjggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBlNDogcmV0dXJuKChDSEFSKSgyMjcgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MDBlNTogcmV0dXJuKChDSEFSKSgyMjkgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MDBlNjogcmV0dXJuKChDSEFSKSgyMzAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MDBlNzogcmV0dXJuKChDSEFSKSgyMzEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBlODogcmV0 dXJuKChDSEFSKSgyMzMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBlOTogcmV0dXJuKChDSEFS KSgyMzIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBlYTogcmV0dXJuKChDSEFSKSgyMzQgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MDBlYjogcmV0dXJuKChDSEFSKSgyMzUgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MDBlYzogcmV0dXJuKChDSEFSKSgyMzcgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MDBlZDogcmV0dXJuKChDSEFSKSgyMzYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBlZTog cmV0dXJuKChDSEFSKSgyMzggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBlZjogcmV0dXJuKChD SEFSKSgyMzkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBmMTogcmV0dXJuKChDSEFSKSgyNDAg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBmMjogcmV0dXJuKChDSEFSKSgyNDIgJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MDBmMzogcmV0dXJuKChDSEFSKSgyNDEgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MDBmNDogcmV0dXJuKChDSEFSKSgyNDMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBm NTogcmV0dXJuKChDSEFSKSgyNDUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBmNjogcmV0dXJu KChDSEFSKSgyNDQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBmODogcmV0dXJuKChDSEFSKSgy NDYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBmOTogcmV0dXJuKChDSEFSKSgyNDkgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MDBmYTogcmV0dXJuKChDSEFSKSgyNDggJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MDBmYjogcmV0dXJuKChDSEFSKSgyNTAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MDBmYzogcmV0dXJuKChDSEFSKSgyNTEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBmZjogcmV0 dXJuKChDSEFSKSgyNTMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDE1MzogcmV0dXJuKChDSEFS KSgyNDcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDE3ODogcmV0dXJuKChDSEFSKSgyMjEgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MDE5MjogcmV0dXJuKChDSEFSKSgxODAgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MDI3NjogcmV0dXJuKChDSEFSKSgyMTUgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MjAyMTogcmV0dXJuKChDSEFSKSgxNzUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjEyMjog cmV0dXJuKChDSEFSKSgxNzkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjE5MTogcmV0dXJuKChD SEFSKSgxOTEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjI2NDogcmV0dXJuKChDSEFSKSgxODMg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MjI2NTogcmV0dXJuKChDSEFSKSgxODQgJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MjU4ODogcmV0dXJuKChDSEFSKSgyNTUgJiAweGZmKSk7CisgICAgICBk ZWZhdWx0OiByZXR1cm4odHhfcHVuYyhjKSk7CisgICAgfQorfQorCitpbnQgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogUEMgQ29kZSBQYWdlIDQzNyAqLworI2lmZGVmIENL X0FOU0lDCit0eF9jcDQzNyhVU0hPUlQgYykKKyNlbHNlCit0eF9jcDQzNyhjKSBVU0hPUlQgYzsK KyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworICAgIGlmIChjIDwgMHg4MCkgICAgICAgICAgICAg ICAgICAgICAgIC8qIEhhcyBDMSBncmFwaGljcyAqLworICAgICAgcmV0dXJuKChDSEFSKShjICYg MHhmZikpOworICAgIHN3aXRjaCAoYykgeworICAgICAgY2FzZSAweDAwYTA6IHJldHVybigoQ0hB UikoMjU1ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYTE6IHJldHVybigoQ0hBUikoMTczICYg MHhmZikpOworICAgICAgY2FzZSAweDAwYTI6IHJldHVybigoQ0hBUikoMTU1ICYgMHhmZikpOwor ICAgICAgY2FzZSAweDAwYTM6IHJldHVybigoQ0hBUikoMTU2ICYgMHhmZikpOworICAgICAgY2Fz ZSAweDAwYTQ6IHJldHVybigoQ0hBUikoMTUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBhNTog cmV0dXJuKChDSEFSKSgxNTcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBhNjogcmV0dXJuKChD SEFSKSgxMjQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBhNzogcmV0dXJuKChDSEFSKSgyMSAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGE4OiByZXR1cm4oKENIQVIpKDM0ICYgMHhmZikpOwor ICAgICAgY2FzZSAweDAwYTk6IHJldHVybigoQ0hBUikoNjcgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MDBhYTogcmV0dXJuKChDSEFSKSgxNjYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBhYjog cmV0dXJuKChDSEFSKSgxNzQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBhYzogcmV0dXJuKChD SEFSKSgxNzAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBhZDogcmV0dXJuKChDSEFSKSg0NSAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGFlOiByZXR1cm4oKENIQVIpKDg0ICYgMHhmZikpOwor ICAgICAgY2FzZSAweDAwYWY6IHJldHVybigoQ0hBUikoMjIgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MDBiMDogcmV0dXJuKChDSEFSKSgyNDggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBiMTog cmV0dXJuKChDSEFSKSgyNDEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBiMjogcmV0dXJuKChD SEFSKSgyNTMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBiMzogcmV0dXJuKChDSEFSKSg1MSAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGI0OiByZXR1cm4oKENIQVIpKDM5ICYgMHhmZikpOwor ICAgICAgY2FzZSAweDAwYjU6IHJldHVybigoQ0hBUikoMjMwICYgMHhmZikpOworICAgICAgY2Fz ZSAweDAwYjY6IHJldHVybigoQ0hBUikoMjAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBiNzog cmV0dXJuKChDSEFSKSgyNTAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBiODogcmV0dXJuKChD SEFSKSg0NCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGI5OiByZXR1cm4oKENIQVIpKDQ5ICYg MHhmZikpOworICAgICAgY2FzZSAweDAwYmE6IHJldHVybigoQ0hBUikoMTY3ICYgMHhmZikpOwor ICAgICAgY2FzZSAweDAwYmI6IHJldHVybigoQ0hBUikoMTc1ICYgMHhmZikpOworICAgICAgY2Fz ZSAweDAwYmM6IHJldHVybigoQ0hBUikoMTcyICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYmQ6 IHJldHVybigoQ0hBUikoMTcxICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYmU6IHJldHVybigo Q0hBUikoMTkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBiZjogcmV0dXJuKChDSEFSKSgxNjgg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBjMDogcmV0dXJuKChDSEFSKSg2NSAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgwMGMxOiByZXR1cm4oKENIQVIpKDY1ICYgMHhmZikpOworICAgICAgY2Fz ZSAweDAwYzI6IHJldHVybigoQ0hBUikoNjUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBjMzog cmV0dXJuKChDSEFSKSg2NSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGM0OiByZXR1cm4oKENI QVIpKDE0MiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGM1OiByZXR1cm4oKENIQVIpKDE0MyAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGM2OiByZXR1cm4oKENIQVIpKDE0NiAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgwMGM3OiByZXR1cm4oKENIQVIpKDEyOCAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgwMGM4OiByZXR1cm4oKENIQVIpKDY5ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYzk6 IHJldHVybigoQ0hBUikoMTQ0ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwY2E6IHJldHVybigo Q0hBUikoNjkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBjYjogcmV0dXJuKChDSEFSKSg2OSAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGNjOiByZXR1cm4oKENIQVIpKDczICYgMHhmZikpOwor ICAgICAgY2FzZSAweDAwY2Q6IHJldHVybigoQ0hBUikoNzMgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MDBjZTogcmV0dXJuKChDSEFSKSg3MyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGNmOiBy ZXR1cm4oKENIQVIpKDczICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZDA6IHJldHVybigoQ0hB UikoMTkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBkMTogcmV0dXJuKChDSEFSKSgxNjUgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MDBkMjogcmV0dXJuKChDSEFSKSg3OSAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgwMGQzOiByZXR1cm4oKENIQVIpKDc5ICYgMHhmZikpOworICAgICAgY2FzZSAw eDAwZDQ6IHJldHVybigoQ0hBUikoNzkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBkNTogcmV0 dXJuKChDSEFSKSg3OSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGQ2OiByZXR1cm4oKENIQVIp KDE1MyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGQ3OiByZXR1cm4oKENIQVIpKDEyMCAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGQ4OiByZXR1cm4oKENIQVIpKDc5ICYgMHhmZikpOworICAg ICAgY2FzZSAweDAwZDk6IHJldHVybigoQ0hBUikoODUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MDBkYTogcmV0dXJuKChDSEFSKSg4NSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGRiOiByZXR1 cm4oKENIQVIpKDg1ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZGM6IHJldHVybigoQ0hBUiko MTU0ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZGQ6IHJldHVybigoQ0hBUikoODkgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MDBkZTogcmV0dXJuKChDSEFSKSgxOSAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgwMGRmOiByZXR1cm4oKENIQVIpKDIyNSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgw MGUwOiByZXR1cm4oKENIQVIpKDEzMyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGUxOiByZXR1 cm4oKENIQVIpKDE2MCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGUyOiByZXR1cm4oKENIQVIp KDEzMSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGUzOiByZXR1cm4oKENIQVIpKDk3ICYgMHhm ZikpOyAvKiBhLXRpbGRlIC0+IGEgKG5vdCAxMDEgPSBlKSAqLworICAgICAgY2FzZSAweDAwZTQ6 IHJldHVybigoQ0hBUikoMTMyICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZTU6IHJldHVybigo Q0hBUikoMTM0ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZTY6IHJldHVybigoQ0hBUikoMTQ1 ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZTc6IHJldHVybigoQ0hBUikoMTM1ICYgMHhmZikp OworICAgICAgY2FzZSAweDAwZTg6IHJldHVybigoQ0hBUikoMTM4ICYgMHhmZikpOworICAgICAg Y2FzZSAweDAwZTk6IHJldHVybigoQ0hBUikoMTMwICYgMHhmZikpOworICAgICAgY2FzZSAweDAw ZWE6IHJldHVybigoQ0hBUikoMTM2ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZWI6IHJldHVy bigoQ0hBUikoMTM3ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZWM6IHJldHVybigoQ0hBUiko MTQxICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZWQ6IHJldHVybigoQ0hBUikoMTYxICYgMHhm ZikpOworICAgICAgY2FzZSAweDAwZWU6IHJldHVybigoQ0hBUikoMTQwICYgMHhmZikpOworICAg ICAgY2FzZSAweDAwZWY6IHJldHVybigoQ0hBUikoMTM5ICYgMHhmZikpOworICAgICAgY2FzZSAw eDAwZjA6IHJldHVybigoQ0hBUikoMTkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBmMTogcmV0 dXJuKChDSEFSKSgxNjQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBmMjogcmV0dXJuKChDSEFS KSgxNDkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBmMzogcmV0dXJuKChDSEFSKSgxNjIgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MDBmNDogcmV0dXJuKChDSEFSKSgxNDcgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MDBmNTogcmV0dXJuKChDSEFSKSgxMTEgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MDBmNjogcmV0dXJuKChDSEFSKSgxNDggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBmNzog cmV0dXJuKChDSEFSKSgyNDYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBmODogcmV0dXJuKChD SEFSKSgxMTEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBmOTogcmV0dXJuKChDSEFSKSgxNTEg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBmYTogcmV0dXJuKChDSEFSKSgxNjMgJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MDBmYjogcmV0dXJuKChDSEFSKSgxNTAgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MDBmYzogcmV0dXJuKChDSEFSKSgxMjkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBm ZDogcmV0dXJuKChDSEFSKSgxMjEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBmZTogcmV0dXJu KChDSEFSKSgxOSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGZmOiByZXR1cm4oKENIQVIpKDE1 MiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMTkyOiByZXR1cm4oKENIQVIpKDE1OSAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgwMzkzOiByZXR1cm4oKENIQVIpKDIyNiAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgwMzk4OiByZXR1cm4oKENIQVIpKDIzMyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgw M2EzOiByZXR1cm4oKENIQVIpKDIyOCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwM2E2OiByZXR1 cm4oKENIQVIpKDIzMiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwM2E5OiByZXR1cm4oKENIQVIp KDIzNCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwM2IxOiByZXR1cm4oKENIQVIpKDIyNCAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgwM2I0OiByZXR1cm4oKENIQVIpKDIzNSAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgwM2I1OiByZXR1cm4oKENIQVIpKDIzOCAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgwM2MwOiByZXR1cm4oKENIQVIpKDIyNyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwM2MzOiBy ZXR1cm4oKENIQVIpKDIyOSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwM2M0OiByZXR1cm4oKENI QVIpKDIzMSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwM2M2OiByZXR1cm4oKENIQVIpKDIzNyAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMDdmOiByZXR1cm4oKENIQVIpKDI1MiAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgyMGE3OiByZXR1cm4oKENIQVIpKDE1OCAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgyMjE5OiByZXR1cm4oKENIQVIpKDI0OSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMjFh OiByZXR1cm4oKENIQVIpKDI1MSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMjFlOiByZXR1cm4o KENIQVIpKDIzNiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMjI5OiByZXR1cm4oKENIQVIpKDIz OSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMjQ4OiByZXR1cm4oKENIQVIpKDI0NyAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgyMjYxOiByZXR1cm4oKENIQVIpKDI0MCAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgyMjY0OiByZXR1cm4oKENIQVIpKDI0MyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgy MjY1OiByZXR1cm4oKENIQVIpKDI0MiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMzEwOiByZXR1 cm4oKENIQVIpKDE2OSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMzIwOiByZXR1cm4oKENIQVIp KDI0NCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMzIxOiByZXR1cm4oKENIQVIpKDI0NSAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTAwOiByZXR1cm4oKENIQVIpKDE5NiAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgyNTAyOiByZXR1cm4oKENIQVIpKDE3OSAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgyNTBjOiByZXR1cm4oKENIQVIpKDIxOCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTEwOiBy ZXR1cm4oKENIQVIpKDE5MSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTE0OiByZXR1cm4oKENI QVIpKDE5MiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTE4OiByZXR1cm4oKENIQVIpKDIxNyAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTFjOiByZXR1cm4oKENIQVIpKDE5NSAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgyNTI0OiByZXR1cm4oKENIQVIpKDE4MCAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgyNTJjOiByZXR1cm4oKENIQVIpKDE5NCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTM0 OiByZXR1cm4oKENIQVIpKDE5MyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTNjOiByZXR1cm4o KENIQVIpKDE5NyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTUwOiByZXR1cm4oKENIQVIpKDIw NSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTUxOiByZXR1cm4oKENIQVIpKDE4NiAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgyNTUyOiByZXR1cm4oKENIQVIpKDIxMyAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgyNTUzOiByZXR1cm4oKENIQVIpKDIxNCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgy NTU0OiByZXR1cm4oKENIQVIpKDIwMSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTU1OiByZXR1 cm4oKENIQVIpKDE4NCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTU2OiByZXR1cm4oKENIQVIp KDE4MyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTU3OiByZXR1cm4oKENIQVIpKDE4NyAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTU4OiByZXR1cm4oKENIQVIpKDIxMiAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgyNTU5OiByZXR1cm4oKENIQVIpKDIxMSAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgyNTVhOiByZXR1cm4oKENIQVIpKDIwMCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTViOiBy ZXR1cm4oKENIQVIpKDE5MCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTVjOiByZXR1cm4oKENI QVIpKDE4OSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTVkOiByZXR1cm4oKENIQVIpKDE4OCAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTVlOiByZXR1cm4oKENIQVIpKDE5OCAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgyNTVmOiByZXR1cm4oKENIQVIpKDE5OSAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgyNTYwOiByZXR1cm4oKENIQVIpKDIwNCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTYx OiByZXR1cm4oKENIQVIpKDE4MSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTYyOiByZXR1cm4o KENIQVIpKDE4MiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTYzOiByZXR1cm4oKENIQVIpKDE4 NSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTY0OiByZXR1cm4oKENIQVIpKDIwOSAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgyNTY1OiByZXR1cm4oKENIQVIpKDIxMCAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgyNTY2OiByZXR1cm4oKENIQVIpKDIwMyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgy NTY3OiByZXR1cm4oKENIQVIpKDIwNyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTY4OiByZXR1 cm4oKENIQVIpKDIwOCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTY5OiByZXR1cm4oKENIQVIp KDIwMiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTZhOiByZXR1cm4oKENIQVIpKDIxNiAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTZiOiByZXR1cm4oKENIQVIpKDIxNSAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgyNTZjOiByZXR1cm4oKENIQVIpKDIwNiAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgyNTgwOiByZXR1cm4oKENIQVIpKDIyMyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTg0OiBy ZXR1cm4oKENIQVIpKDIyMCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTg4OiByZXR1cm4oKENI QVIpKDIxOSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNThjOiByZXR1cm4oKENIQVIpKDIyMSAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTkwOiByZXR1cm4oKENIQVIpKDIyMiAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgyNTkxOiByZXR1cm4oKENIQVIpKDE3NiAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgyNTkyOiByZXR1cm4oKENIQVIpKDE3NyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTkz OiByZXR1cm4oKENIQVIpKDE3OCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNWEwOiByZXR1cm4o KENIQVIpKDI1NCAmIDB4ZmYpKTsgLyogQmxhY2sgc3F1YXJlICovCisgICAgICBkZWZhdWx0OiBy ZXR1cm4odHhfY3BzdWIoYykpOyAgICAgLyogRm9yIGJveCBjaGFyYWN0ZXJzIGV0YyAqLworICAg IH0KK30KKworaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1hem92 aWEgKi8KKyNpZmRlZiBDS19BTlNJQwordHhfbWF6b3ZpYShVU0hPUlQgYykKKyNlbHNlCit0eF9t YXpvdmlhKGMpIFVTSE9SVCBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgaWYgKGMg PCAweDgwKSAgICAgICAgICAgICAgICAgICAgICAgLyogSGFzIEMxIGdyYXBoaWNzICovCisgICAg ICByZXR1cm4oKENIQVIpKGMgJiAweGZmKSk7CisgICAgc3dpdGNoIChjKSB7CisgICAgICBjYXNl IDB4MDBkMzogcmV0dXJuKChDSEFSKTB4YTMgJiAweGZmKTsgICAvKiBPIGFjdXRlICovCisgICAg ICBjYXNlIDB4MDBmMzogcmV0dXJuKChDSEFSKTB4YTIgJiAweGZmKTsgICAvKiBPIGFjdXRlICov CisgICAgICBjYXNlIDB4MDEwNDogcmV0dXJuKChDSEFSKTB4OGYgJiAweGZmKTsgICAvKiBBIE9n b25layAqLworICAgICAgY2FzZSAweDAxMDU6IHJldHVybigoQ0hBUikweDg2ICYgMHhmZik7ICAg LyogYSBPZ29uZWsgKi8KKyAgICAgIGNhc2UgMHgwMTA2OiByZXR1cm4oKENIQVIpMHg5NSAmIDB4 ZmYpOyAgIC8qIEMgYWN1dGUgKi8KKyAgICAgIGNhc2UgMHgwMTA3OiByZXR1cm4oKENIQVIpMHg4 ZCAmIDB4ZmYpOyAgIC8qIGMgYWN1dGUgKi8KKyAgICAgIGNhc2UgMHgwMTE4OiByZXR1cm4oKENI QVIpMHg5MCAmIDB4ZmYpOyAgIC8qIEUgT2dvbmVrICovCisgICAgICBjYXNlIDB4MDExOTogcmV0 dXJuKChDSEFSKTB4OTEgJiAweGZmKTsgICAvKiBFIE9nb25layAqLworICAgICAgY2FzZSAweDAx NDE6IHJldHVybigoQ0hBUikweDljICYgMHhmZik7ICAgLyogTCBzdHJva2UgKi8KKyAgICAgIGNh c2UgMHgwMTQyOiByZXR1cm4oKENIQVIpMHg5MiAmIDB4ZmYpOyAgIC8qIEwgc3Ryb2tlICovCisg ICAgICBjYXNlIDB4MDE0MzogcmV0dXJuKChDSEFSKTB4YTUgJiAweGZmKTsgICAvKiBOIGFjdXRl ICovCisgICAgICBjYXNlIDB4MDE0NDogcmV0dXJuKChDSEFSKTB4YTQgJiAweGZmKTsgICAvKiBO IGFjdXRlICovCisgICAgICBjYXNlIDB4MDE1YTogcmV0dXJuKChDSEFSKTB4OTggJiAweGZmKTsg ICAvKiBTIGFjdXRlICovCisgICAgICBjYXNlIDB4MDE1YjogcmV0dXJuKChDSEFSKTB4OWUgJiAw eGZmKTsgICAvKiBTIGFjdXRlICovCisgICAgICBjYXNlIDB4MDE3OTogcmV0dXJuKChDSEFSKTB4 YTAgJiAweGZmKTsgICAvKiBaIGFjdXRlICovCisgICAgICBjYXNlIDB4MDE3YTogcmV0dXJuKChD SEFSKTB4YTYgJiAweGZmKTsgICAvKiBaIGFjdXRlICovCisgICAgICBjYXNlIDB4MDE3YjogcmV0 dXJuKChDSEFSKTB4YTEgJiAweGZmKTsgICAvKiBaIGRvdCBhYm92ZSAqLworICAgICAgY2FzZSAw eDAxN2M6IHJldHVybigoQ0hBUikweGE3ICYgMHhmZik7ICAgLyogWiBkb3QgYWJvdmUgKi8KKyAg ICAgIGRlZmF1bHQ6IHJldHVybih0eF9jcDQzNyhjKSk7CisgICAgfQorfQorCitpbnQgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUEMgQ29kZSBQYWdlIDg1MCAqLworI2lm ZGVmIENLX0FOU0lDCit0eF9jcDg1MChVU0hPUlQgYykKKyNlbHNlCit0eF9jcDg1MChjKSBVU0hP UlQgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworICAgIGlmIChjIDwgMHg4MCkgICAgICAg ICAgICAgICAgICAgICAgIC8qIEhhcyBDMSBncmFwaGljcyAqLworICAgICAgcmV0dXJuKChDSEFS KShjICYgMHhmZikpOworICAgIHN3aXRjaCAoYykgeworICAgICAgY2FzZSAweDAwYTA6IHJldHVy bigoQ0hBUikoMjU1ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYTE6IHJldHVybigoQ0hBUiko MTczICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYTI6IHJldHVybigoQ0hBUikoMTg5ICYgMHhm ZikpOworICAgICAgY2FzZSAweDAwYTM6IHJldHVybigoQ0hBUikoMTU2ICYgMHhmZikpOworICAg ICAgY2FzZSAweDAwYTQ6IHJldHVybigoQ0hBUikoMjA3ICYgMHhmZikpOworICAgICAgY2FzZSAw eDAwYTU6IHJldHVybigoQ0hBUikoMTkwICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYTY6IHJl dHVybigoQ0hBUikoMjIxICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYTc6IHJldHVybigoQ0hB UikoMjQ1ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYTg6IHJldHVybigoQ0hBUikoMjQ5ICYg MHhmZikpOworICAgICAgY2FzZSAweDAwYTk6IHJldHVybigoQ0hBUikoMTg0ICYgMHhmZikpOwor ICAgICAgY2FzZSAweDAwYWE6IHJldHVybigoQ0hBUikoMTY2ICYgMHhmZikpOworICAgICAgY2Fz ZSAweDAwYWI6IHJldHVybigoQ0hBUikoMTc0ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYWM6 IHJldHVybigoQ0hBUikoMTcwICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYWQ6IHJldHVybigo Q0hBUikoMjQwICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYWU6IHJldHVybigoQ0hBUikoMTY5 ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYWY6IHJldHVybigoQ0hBUikoMjM4ICYgMHhmZikp OworICAgICAgY2FzZSAweDAwYjA6IHJldHVybigoQ0hBUikoMjQ4ICYgMHhmZikpOworICAgICAg Y2FzZSAweDAwYjE6IHJldHVybigoQ0hBUikoMjQxICYgMHhmZikpOworICAgICAgY2FzZSAweDAw YjI6IHJldHVybigoQ0hBUikoMjUzICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYjM6IHJldHVy bigoQ0hBUikoMjUyICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYjQ6IHJldHVybigoQ0hBUiko MjM5ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYjU6IHJldHVybigoQ0hBUikoMjMwICYgMHhm ZikpOworICAgICAgY2FzZSAweDAwYjY6IHJldHVybigoQ0hBUikoMjQ0ICYgMHhmZikpOworICAg ICAgY2FzZSAweDAwYjc6IHJldHVybigoQ0hBUikoMjUwICYgMHhmZikpOworICAgICAgY2FzZSAw eDAwYjg6IHJldHVybigoQ0hBUikoMjQ3ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYjk6IHJl dHVybigoQ0hBUikoMjUxICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYmE6IHJldHVybigoQ0hB UikoMTY3ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYmI6IHJldHVybigoQ0hBUikoMTc1ICYg MHhmZikpOworICAgICAgY2FzZSAweDAwYmM6IHJldHVybigoQ0hBUikoMTcyICYgMHhmZikpOwor ICAgICAgY2FzZSAweDAwYmQ6IHJldHVybigoQ0hBUikoMTcxICYgMHhmZikpOworICAgICAgY2Fz ZSAweDAwYmU6IHJldHVybigoQ0hBUikoMjQzICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYmY6 IHJldHVybigoQ0hBUikoMTY4ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYzA6IHJldHVybigo Q0hBUikoMTgzICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYzE6IHJldHVybigoQ0hBUikoMTgx ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYzI6IHJldHVybigoQ0hBUikoMTgyICYgMHhmZikp OworICAgICAgY2FzZSAweDAwYzM6IHJldHVybigoQ0hBUikoMTk5ICYgMHhmZikpOworICAgICAg Y2FzZSAweDAwYzQ6IHJldHVybigoQ0hBUikoMTQyICYgMHhmZikpOworICAgICAgY2FzZSAweDAw YzU6IHJldHVybigoQ0hBUikoMTQzICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYzY6IHJldHVy bigoQ0hBUikoMTQ2ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYzc6IHJldHVybigoQ0hBUiko MTI4ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYzg6IHJldHVybigoQ0hBUikoMjEyICYgMHhm ZikpOworICAgICAgY2FzZSAweDAwYzk6IHJldHVybigoQ0hBUikoMTQ0ICYgMHhmZikpOworICAg ICAgY2FzZSAweDAwY2E6IHJldHVybigoQ0hBUikoMjEwICYgMHhmZikpOworICAgICAgY2FzZSAw eDAwY2I6IHJldHVybigoQ0hBUikoMjExICYgMHhmZikpOworICAgICAgY2FzZSAweDAwY2M6IHJl dHVybigoQ0hBUikoMjIyICYgMHhmZikpOworICAgICAgY2FzZSAweDAwY2Q6IHJldHVybigoQ0hB UikoMjE0ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwY2U6IHJldHVybigoQ0hBUikoMjE1ICYg MHhmZikpOworICAgICAgY2FzZSAweDAwY2Y6IHJldHVybigoQ0hBUikoMjE2ICYgMHhmZikpOwor ICAgICAgY2FzZSAweDAwZDA6IHJldHVybigoQ0hBUikoMjA5ICYgMHhmZikpOworICAgICAgY2Fz ZSAweDAwZDE6IHJldHVybigoQ0hBUikoMTY1ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZDI6 IHJldHVybigoQ0hBUikoMjI3ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZDM6IHJldHVybigo Q0hBUikoMjI0ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZDQ6IHJldHVybigoQ0hBUikoMjI2 ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZDU6IHJldHVybigoQ0hBUikoMjI5ICYgMHhmZikp OworICAgICAgY2FzZSAweDAwZDY6IHJldHVybigoQ0hBUikoMTUzICYgMHhmZikpOworICAgICAg Y2FzZSAweDAwZDc6IHJldHVybigoQ0hBUikoMTU4ICYgMHhmZikpOworICAgICAgY2FzZSAweDAw ZDg6IHJldHVybigoQ0hBUikoMTU3ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZDk6IHJldHVy bigoQ0hBUikoMjM1ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZGE6IHJldHVybigoQ0hBUiko MjMzICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZGI6IHJldHVybigoQ0hBUikoMjM0ICYgMHhm ZikpOworICAgICAgY2FzZSAweDAwZGM6IHJldHVybigoQ0hBUikoMTU0ICYgMHhmZikpOworICAg ICAgY2FzZSAweDAwZGQ6IHJldHVybigoQ0hBUikoMjM3ICYgMHhmZikpOworICAgICAgY2FzZSAw eDAwZGU6IHJldHVybigoQ0hBUikoMjMyICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZGY6IHJl dHVybigoQ0hBUikoMjI1ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZTA6IHJldHVybigoQ0hB UikoMTMzICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZTE6IHJldHVybigoQ0hBUikoMTYwICYg MHhmZikpOworICAgICAgY2FzZSAweDAwZTI6IHJldHVybigoQ0hBUikoMTMxICYgMHhmZikpOwor ICAgICAgY2FzZSAweDAwZTM6IHJldHVybigoQ0hBUikoMTk4ICYgMHhmZikpOworICAgICAgY2Fz ZSAweDAwZTQ6IHJldHVybigoQ0hBUikoMTMyICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZTU6 IHJldHVybigoQ0hBUikoMTM0ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZTY6IHJldHVybigo Q0hBUikoMTQ1ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZTc6IHJldHVybigoQ0hBUikoMTM1 ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZTg6IHJldHVybigoQ0hBUikoMTM4ICYgMHhmZikp OworICAgICAgY2FzZSAweDAwZTk6IHJldHVybigoQ0hBUikoMTMwICYgMHhmZikpOworICAgICAg Y2FzZSAweDAwZWE6IHJldHVybigoQ0hBUikoMTM2ICYgMHhmZikpOworICAgICAgY2FzZSAweDAw ZWI6IHJldHVybigoQ0hBUikoMTM3ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZWM6IHJldHVy bigoQ0hBUikoMTQxICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZWQ6IHJldHVybigoQ0hBUiko MTYxICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZWU6IHJldHVybigoQ0hBUikoMTQwICYgMHhm ZikpOworICAgICAgY2FzZSAweDAwZWY6IHJldHVybigoQ0hBUikoMTM5ICYgMHhmZikpOworICAg ICAgY2FzZSAweDAwZjA6IHJldHVybigoQ0hBUikoMjA4ICYgMHhmZikpOworICAgICAgY2FzZSAw eDAwZjE6IHJldHVybigoQ0hBUikoMTY0ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZjI6IHJl dHVybigoQ0hBUikoMTQ5ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZjM6IHJldHVybigoQ0hB UikoMTYyICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZjQ6IHJldHVybigoQ0hBUikoMTQ3ICYg MHhmZikpOworICAgICAgY2FzZSAweDAwZjU6IHJldHVybigoQ0hBUikoMjI4ICYgMHhmZikpOwor ICAgICAgY2FzZSAweDAwZjY6IHJldHVybigoQ0hBUikoMTQ4ICYgMHhmZikpOworICAgICAgY2Fz ZSAweDAwZjc6IHJldHVybigoQ0hBUikoMjQ2ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZjg6 IHJldHVybigoQ0hBUikoMTU1ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZjk6IHJldHVybigo Q0hBUikoMTUxICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZmE6IHJldHVybigoQ0hBUikoMTYz ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZmI6IHJldHVybigoQ0hBUikoMTUwICYgMHhmZikp OworICAgICAgY2FzZSAweDAwZmM6IHJldHVybigoQ0hBUikoMTI5ICYgMHhmZikpOworICAgICAg Y2FzZSAweDAwZmQ6IHJldHVybigoQ0hBUikoMjM2ICYgMHhmZikpOworICAgICAgY2FzZSAweDAw ZmU6IHJldHVybigoQ0hBUikoMjMxICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZmY6IHJldHVy bigoQ0hBUikoMTUyICYgMHhmZikpOworICAgICAgY2FzZSAweDAxMzE6IHJldHVybigoQ0hBUiko MjEzICYgMHhmZikpOworICAgICAgY2FzZSAweDAxOTI6IHJldHVybigoQ0hBUikoMTU5ICYgMHhm ZikpOworICAgICAgY2FzZSAweDIwMTc6IHJldHVybigoQ0hBUikoMjQyICYgMHhmZikpOworICAg ICAgY2FzZSAweDI1MDA6IHJldHVybigoQ0hBUikoMTk2ICYgMHhmZikpOworICAgICAgY2FzZSAw eDI1MDI6IHJldHVybigoQ0hBUikoMTc5ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1MGM6IHJl dHVybigoQ0hBUikoMjE4ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1MTA6IHJldHVybigoQ0hB UikoMTkxICYgMHhmZikpOworICAgICAgY2FzZSAweDI1MTQ6IHJldHVybigoQ0hBUikoMTkyICYg MHhmZikpOworICAgICAgY2FzZSAweDI1MTg6IHJldHVybigoQ0hBUikoMjE3ICYgMHhmZikpOwor ICAgICAgY2FzZSAweDI1MWM6IHJldHVybigoQ0hBUikoMTk1ICYgMHhmZikpOworICAgICAgY2Fz ZSAweDI1MjQ6IHJldHVybigoQ0hBUikoMTgwICYgMHhmZikpOworICAgICAgY2FzZSAweDI1MmM6 IHJldHVybigoQ0hBUikoMTk0ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1MzQ6IHJldHVybigo Q0hBUikoMTkzICYgMHhmZikpOworICAgICAgY2FzZSAweDI1M2M6IHJldHVybigoQ0hBUikoMTk3 ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1NTA6IHJldHVybigoQ0hBUikoMjA1ICYgMHhmZikp OworICAgICAgY2FzZSAweDI1NTE6IHJldHVybigoQ0hBUikoMTg2ICYgMHhmZikpOworICAgICAg Y2FzZSAweDI1NTQ6IHJldHVybigoQ0hBUikoMjAxICYgMHhmZikpOworICAgICAgY2FzZSAweDI1 NTc6IHJldHVybigoQ0hBUikoMTg3ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1NWE6IHJldHVy bigoQ0hBUikoMjAwICYgMHhmZikpOworICAgICAgY2FzZSAweDI1NWQ6IHJldHVybigoQ0hBUiko MTg4ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1NjA6IHJldHVybigoQ0hBUikoMjA0ICYgMHhm ZikpOworICAgICAgY2FzZSAweDI1NjM6IHJldHVybigoQ0hBUikoMTg1ICYgMHhmZikpOworICAg ICAgY2FzZSAweDI1NjY6IHJldHVybigoQ0hBUikoMjAzICYgMHhmZikpOworICAgICAgY2FzZSAw eDI1Njk6IHJldHVybigoQ0hBUikoMjAyICYgMHhmZikpOworICAgICAgY2FzZSAweDI1NmM6IHJl dHVybigoQ0hBUikoMjA2ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1ODA6IHJldHVybigoQ0hB UikoMjIzICYgMHhmZikpOworICAgICAgY2FzZSAweDI1ODQ6IHJldHVybigoQ0hBUikoMjIwICYg MHhmZikpOworICAgICAgY2FzZSAweDI1ODg6IHJldHVybigoQ0hBUikoMjE5ICYgMHhmZikpOwor ICAgICAgY2FzZSAweDI1OTE6IHJldHVybigoQ0hBUikoMTc2ICYgMHhmZikpOworICAgICAgY2Fz ZSAweDI1OTI6IHJldHVybigoQ0hBUikoMTc3ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1OTM6 IHJldHVybigoQ0hBUikoMTc4ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1YTA6IHJldHVybigo Q0hBUikoMjU0ICYgMHhmZikpOworICAgICAgZGVmYXVsdDogcmV0dXJuKHR4X2Nwc3ViKGMpKTsg ICAgIC8qIEZvciBib3ggY2hhcmFjdGVycyBldGMgKi8KKyAgICB9Cit9CisKK2ludCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQQyBDb2RlIFBhZ2UgODU4ICovCisjaWZk ZWYgQ0tfQU5TSUMKK3R4X2NwODU4KFVTSE9SVCBjKQorI2Vsc2UKK3R4X2NwODU4KGMpIFVTSE9S VCBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgaWYgKGMgPCAweDgwKSAgICAgICAg ICAgICAgICAgICAgICAgLyogSGFzIEMxIGdyYXBoaWNzICovCisgICAgICByZXR1cm4oKENIQVIp KGMgJiAweGZmKSk7CisgICAgc3dpdGNoIChjKSB7CisgICAgICBjYXNlIDB4MDBhMDogcmV0dXJu KChDSEFSKSgyNTUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBhMTogcmV0dXJuKChDSEFSKSgx NzMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBhMjogcmV0dXJuKChDSEFSKSgxODkgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MDBhMzogcmV0dXJuKChDSEFSKSgxNTYgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MDBhNDogcmV0dXJuKChDSEFSKSgyMDcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MDBhNTogcmV0dXJuKChDSEFSKSgxOTAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBhNjogcmV0 dXJuKChDSEFSKSgyMjEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBhNzogcmV0dXJuKChDSEFS KSgyNDUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBhODogcmV0dXJuKChDSEFSKSgyNDkgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MDBhOTogcmV0dXJuKChDSEFSKSgxODQgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MDBhYTogcmV0dXJuKChDSEFSKSgxNjYgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MDBhYjogcmV0dXJuKChDSEFSKSgxNzQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBhYzog cmV0dXJuKChDSEFSKSgxNzAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBhZDogcmV0dXJuKChD SEFSKSgyNDAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBhZTogcmV0dXJuKChDSEFSKSgxNjkg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBhZjogcmV0dXJuKChDSEFSKSgyMzggJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MDBiMDogcmV0dXJuKChDSEFSKSgyNDggJiAweGZmKSk7CisgICAgICBj YXNlIDB4MDBiMTogcmV0dXJuKChDSEFSKSgyNDEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBi MjogcmV0dXJuKChDSEFSKSgyNTMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBiMzogcmV0dXJu KChDSEFSKSgyNTIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBiNDogcmV0dXJuKChDSEFSKSgy MzkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBiNTogcmV0dXJuKChDSEFSKSgyMzAgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MDBiNjogcmV0dXJuKChDSEFSKSgyNDQgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MDBiNzogcmV0dXJuKChDSEFSKSgyNTAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MDBiODogcmV0dXJuKChDSEFSKSgyNDcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBiOTogcmV0 dXJuKChDSEFSKSgyNTEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBiYTogcmV0dXJuKChDSEFS KSgxNjcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBiYjogcmV0dXJuKChDSEFSKSgxNzUgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MDBiYzogcmV0dXJuKChDSEFSKSgxNzIgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MDBiZDogcmV0dXJuKChDSEFSKSgxNzEgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MDBiZTogcmV0dXJuKChDSEFSKSgyNDMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBiZjog cmV0dXJuKChDSEFSKSgxNjggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBjMDogcmV0dXJuKChD SEFSKSgxODMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBjMTogcmV0dXJuKChDSEFSKSgxODEg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBjMjogcmV0dXJuKChDSEFSKSgxODIgJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MDBjMzogcmV0dXJuKChDSEFSKSgxOTkgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MDBjNDogcmV0dXJuKChDSEFSKSgxNDIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBj NTogcmV0dXJuKChDSEFSKSgxNDMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBjNjogcmV0dXJu KChDSEFSKSgxNDYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBjNzogcmV0dXJuKChDSEFSKSgx MjggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBjODogcmV0dXJuKChDSEFSKSgyMTIgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MDBjOTogcmV0dXJuKChDSEFSKSgxNDQgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MDBjYTogcmV0dXJuKChDSEFSKSgyMTAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MDBjYjogcmV0dXJuKChDSEFSKSgyMTEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBjYzogcmV0 dXJuKChDSEFSKSgyMjIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBjZDogcmV0dXJuKChDSEFS KSgyMTQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBjZTogcmV0dXJuKChDSEFSKSgyMTUgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MDBjZjogcmV0dXJuKChDSEFSKSgyMTYgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MDBkMDogcmV0dXJuKChDSEFSKSgyMDkgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MDBkMTogcmV0dXJuKChDSEFSKSgxNjUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBkMjog cmV0dXJuKChDSEFSKSgyMjcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBkMzogcmV0dXJuKChD SEFSKSgyMjQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBkNDogcmV0dXJuKChDSEFSKSgyMjYg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBkNTogcmV0dXJuKChDSEFSKSgyMjkgJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MDBkNjogcmV0dXJuKChDSEFSKSgxNTMgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MDBkNzogcmV0dXJuKChDSEFSKSgxNTggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBk ODogcmV0dXJuKChDSEFSKSgxNTcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBkOTogcmV0dXJu KChDSEFSKSgyMzUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBkYTogcmV0dXJuKChDSEFSKSgy MzMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBkYjogcmV0dXJuKChDSEFSKSgyMzQgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MDBkYzogcmV0dXJuKChDSEFSKSgxNTQgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MDBkZDogcmV0dXJuKChDSEFSKSgyMzcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MDBkZTogcmV0dXJuKChDSEFSKSgyMzIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBkZjogcmV0 dXJuKChDSEFSKSgyMjUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBlMDogcmV0dXJuKChDSEFS KSgxMzMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBlMTogcmV0dXJuKChDSEFSKSgxNjAgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MDBlMjogcmV0dXJuKChDSEFSKSgxMzEgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MDBlMzogcmV0dXJuKChDSEFSKSgxOTggJiAweGZmKSk7CisgICAgICBjYXNl IDB4MDBlNDogcmV0dXJuKChDSEFSKSgxMzIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBlNTog cmV0dXJuKChDSEFSKSgxMzQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBlNjogcmV0dXJuKChD SEFSKSgxNDUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBlNzogcmV0dXJuKChDSEFSKSgxMzUg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBlODogcmV0dXJuKChDSEFSKSgxMzggJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MDBlOTogcmV0dXJuKChDSEFSKSgxMzAgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MDBlYTogcmV0dXJuKChDSEFSKSgxMzYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBl YjogcmV0dXJuKChDSEFSKSgxMzcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBlYzogcmV0dXJu KChDSEFSKSgxNDEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBlZDogcmV0dXJuKChDSEFSKSgx NjEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBlZTogcmV0dXJuKChDSEFSKSgxNDAgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MDBlZjogcmV0dXJuKChDSEFSKSgxMzkgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MDBmMDogcmV0dXJuKChDSEFSKSgyMDggJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MDBmMTogcmV0dXJuKChDSEFSKSgxNjQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBmMjogcmV0 dXJuKChDSEFSKSgxNDkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBmMzogcmV0dXJuKChDSEFS KSgxNjIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBmNDogcmV0dXJuKChDSEFSKSgxNDcgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MDBmNTogcmV0dXJuKChDSEFSKSgyMjggJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MDBmNjogcmV0dXJuKChDSEFSKSgxNDggJiAweGZmKSk7CisgICAgICBjYXNl IDB4MDBmNzogcmV0dXJuKChDSEFSKSgyNDYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBmODog cmV0dXJuKChDSEFSKSgxNTUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBmOTogcmV0dXJuKChD SEFSKSgxNTEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBmYTogcmV0dXJuKChDSEFSKSgxNjMg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBmYjogcmV0dXJuKChDSEFSKSgxNTAgJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MDBmYzogcmV0dXJuKChDSEFSKSgxMjkgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MDBmZDogcmV0dXJuKChDSEFSKSgyMzYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBm ZTogcmV0dXJuKChDSEFSKSgyMzEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBmZjogcmV0dXJu KChDSEFSKSgxNTIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjBhYzogcmV0dXJuKChDSEFSKSgy MTMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDE5MjogcmV0dXJuKChDSEFSKSgxNTkgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MjAxNzogcmV0dXJuKChDSEFSKSgyNDIgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MjUwMDogcmV0dXJuKChDSEFSKSgxOTYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MjUwMjogcmV0dXJuKChDSEFSKSgxNzkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjUwYzogcmV0 dXJuKChDSEFSKSgyMTggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjUxMDogcmV0dXJuKChDSEFS KSgxOTEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjUxNDogcmV0dXJuKChDSEFSKSgxOTIgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MjUxODogcmV0dXJuKChDSEFSKSgyMTcgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MjUxYzogcmV0dXJuKChDSEFSKSgxOTUgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MjUyNDogcmV0dXJuKChDSEFSKSgxODAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjUyYzog cmV0dXJuKChDSEFSKSgxOTQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjUzNDogcmV0dXJuKChD SEFSKSgxOTMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjUzYzogcmV0dXJuKChDSEFSKSgxOTcg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU1MDogcmV0dXJuKChDSEFSKSgyMDUgJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MjU1MTogcmV0dXJuKChDSEFSKSgxODYgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MjU1NDogcmV0dXJuKChDSEFSKSgyMDEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU1 NzogcmV0dXJuKChDSEFSKSgxODcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU1YTogcmV0dXJu KChDSEFSKSgyMDAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU1ZDogcmV0dXJuKChDSEFSKSgx ODggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU2MDogcmV0dXJuKChDSEFSKSgyMDQgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MjU2MzogcmV0dXJuKChDSEFSKSgxODUgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MjU2NjogcmV0dXJuKChDSEFSKSgyMDMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MjU2OTogcmV0dXJuKChDSEFSKSgyMDIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU2YzogcmV0 dXJuKChDSEFSKSgyMDYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU4MDogcmV0dXJuKChDSEFS KSgyMjMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU4NDogcmV0dXJuKChDSEFSKSgyMjAgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MjU4ODogcmV0dXJuKChDSEFSKSgyMTkgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MjU5MTogcmV0dXJuKChDSEFSKSgxNzYgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MjU5MjogcmV0dXJuKChDSEFSKSgxNzcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU5Mzog cmV0dXJuKChDSEFSKSgxNzggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjVhMDogcmV0dXJuKChD SEFSKSgyNTQgJiAweGZmKSk7CisgICAgICBkZWZhdWx0OiByZXR1cm4odHhfY3BzdWIoYykpOyAg ICAgLyogRm9yIGJveCBjaGFyYWN0ZXJzIGV0YyAqLworICAgIH0KK30KKworaW50ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdpbmRvd3MgQ29kZSBQYWdlIDEyNTAgKExh dGluLTIpICovCisjaWZkZWYgQ0tfQU5TSUMKK3R4X2NwMTI1MChVU0hPUlQgYykKKyNlbHNlCit0 eF9jcDEyNTAoYykgVVNIT1JUIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAgICBpZiAo YyA8IDB4ODAgfHwgKGMgPiAweGJmICYmIGMgPD0gMHhmZikpIC8qIEhhcyBDMSBncmFwaGljcyAq LworICAgICAgcmV0dXJuKChDSEFSKShjICYgMHhmZikpOworICAgIHN3aXRjaCAoYykgeworICAg ICAgY2FzZSAweDAwMkQ6IHJldHVybigoQ0hBUikoMHhhZCAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgwMEEwOiByZXR1cm4oKENIQVIpKDB4YTAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBBNDog cmV0dXJuKChDSEFSKSgweGE0ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwQTY6IHJldHVybigo Q0hBUikoMHhhNiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMEE3OiByZXR1cm4oKENIQVIpKDB4 YTcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBBODogcmV0dXJuKChDSEFSKSgweGE4ICYgMHhm ZikpOworICAgICAgY2FzZSAweDAwQTk6IHJldHVybigoQ0hBUikoMHhhOSAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgwMEFCOiByZXR1cm4oKENIQVIpKDB4YWIgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MDBBQzogcmV0dXJuKChDSEFSKSgweGFjICYgMHhmZikpOworICAgICAgY2FzZSAweDAwQUU6 IHJldHVybigoQ0hBUikoMHhhZSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMEIwOiByZXR1cm4o KENIQVIpKDB4YjAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBCMTogcmV0dXJuKChDSEFSKSgw eGIxICYgMHhmZikpOworICAgICAgY2FzZSAweDAwQjQ6IHJldHVybigoQ0hBUikoMHhiNCAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgwMEI1OiByZXR1cm4oKENIQVIpKDB4YjUgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MDBCNjogcmV0dXJuKChDSEFSKSgweGI2ICYgMHhmZikpOworICAgICAgY2Fz ZSAweDAwQjc6IHJldHVybigoQ0hBUikoMHhiNyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMEI4 OiByZXR1cm4oKENIQVIpKDB4YjggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBCQjogcmV0dXJu KChDSEFSKSgweGJiICYgMHhmZikpOworICAgICAgY2FzZSAweDAxMDQ6IHJldHVybigoQ0hBUiko MHhhNSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMTA1OiByZXR1cm4oKENIQVIpKDB4YjkgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MDEzRDogcmV0dXJuKChDSEFSKSgweGJjICYgMHhmZikpOwor ICAgICAgY2FzZSAweDAxM0U6IHJldHVybigoQ0hBUikoMHhiZSAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgwMTQxOiByZXR1cm4oKENIQVIpKDB4YTMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDE0 MjogcmV0dXJuKChDSEFSKSgweGIzICYgMHhmZikpOworICAgICAgY2FzZSAweDAxNUE6IHJldHVy bigoQ0hBUikoMHg4YyAmIDB4ZmYpKTsgLyogUyBhY3V0ZSAqLworICAgICAgY2FzZSAweDAxNUU6 IHJldHVybigoQ0hBUikoMHhhYSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMTVGOiByZXR1cm4o KENIQVIpKDB4YmEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDE1YjogcmV0dXJuKChDSEFSKSgw eDljICYgMHhmZikpOyAvKiBzIGFjdXRlICovCisgICAgICBjYXNlIDB4MDE2NDogcmV0dXJuKChD SEFSKSgweDhkICYgMHhmZikpOyAvKiBUIGNhcm9uICovCisgICAgICBjYXNlIDB4MDE2NTogcmV0 dXJuKChDSEFSKSgweDlkICYgMHhmZikpOyAvKiB0IGNhcm9uICovCisgICAgICBjYXNlIDB4MDE3 MzogcmV0dXJuKChDSEFSKSgweDllICYgMHhmZikpOyAvKiB6IGNhcm9uICovCisgICAgICBjYXNl IDB4MDE3OTogcmV0dXJuKChDSEFSKSgweDhmICYgMHhmZikpOyAvKiBaIGFjdXRlICovCisgICAg ICBjYXNlIDB4MDE3QTogcmV0dXJuKChDSEFSKSgweDlmICYgMHhmZikpOyAvKiB6IGFjdXRlICov CisgICAgICBjYXNlIDB4MDE3QjogcmV0dXJuKChDSEFSKSgweGFmICYgMHhmZikpOworICAgICAg Y2FzZSAweDAxN0M6IHJldHVybigoQ0hBUikoMHhiZiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgw MTdEOiByZXR1cm4oKENIQVIpKDB4OGUgJiAweGZmKSk7IC8qIFogY2Fyb24gKi8KKyAgICAgIGNh c2UgMHgwMkM3OiByZXR1cm4oKENIQVIpKDB4YTEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDJE ODogcmV0dXJuKChDSEFSKSgweGEyICYgMHhmZikpOworICAgICAgY2FzZSAweDAyREI6IHJldHVy bigoQ0hBUikoMHhiMiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMkREOiByZXR1cm4oKENIQVIp KDB4YmQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjAxMDogY2FzZSAweDIwMTE6ICAgICAgICAg LyogSHlwaGVucyAqLworICAgICAgICByZXR1cm4oKENIQVIpKDB4MmQgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MjAxMjogY2FzZSAweDIwMTM6ICAgICAgICAgLyogZW4tZGFzaGVzICovCisgICAg ICAgIHJldHVybigoQ0hBUikoMHg5NiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMDE0OiBjYXNl IDB4MjAxNTogICAgICAgICAvKiBlbS1kYXNoZXMgKi8KKyAgICAgICAgcmV0dXJuKChDSEFSKSgw eDk3ICYgMHhmZikpOworICAgICAgY2FzZSAweDIwMTg6ICAgICAgICAgICAgICAgICAgICAgIC8q IFZhcmlvdXMgcXVvdGF0aW9uIG1hcmtzLi4uICovCisgICAgICAgIHJldHVybigoQ0hBUikoMHg5 MSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMDE5OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4 OTIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjAxYzoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgw eDkzICYgMHhmZikpOworICAgICAgY2FzZSAweDIwMWQ6CisgICAgICAgIHJldHVybigoQ0hBUiko MHg5NCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMDFlOgorICAgICAgICByZXR1cm4oKENIQVIp KDB4ODQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjAyMDogICAgICAgICAgICAgICAgICAgICAg LyogRGFnZ2VyICovCisgICAgICAgIHJldHVybigoQ0hBUikoMHg4NiAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgyMDIxOiAgICAgICAgICAgICAgICAgICAgICAvKiBEb3VibGUgRGFnZ2VyICovCisg ICAgICAgIHJldHVybigoQ0hBUikoMHg4NyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMDIyOiAg ICAgICAgICAgICAgICAgICAgICAvKiBCdWxsZXQgKi8KKyAgICAgICAgcmV0dXJuKChDSEFSKSgw eDk1ICYgMHhmZikpOworICAgICAgY2FzZSAweDIwMjY6ICAgICAgICAgICAgICAgICAgICAgIC8q IEVsbGlwc2lzICovCisgICAgICAgIHJldHVybigoQ0hBUikoMHg4NSAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgyMDMwOiAgICAgICAgICAgICAgICAgICAgICAvKiBQZXIgbWlsICovCisgICAgICAg IHJldHVybigoQ0hBUikoMHg4OSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMEFDOiAgICAgICAg ICAgICAgICAgICAgICAvKiBFdXJvICovCisgICAgICAgICAgcmV0dXJuKChDSEFSKSgweDgwICYg MHhmZikpOworICAgICAgY2FzZSAweDIxMjI6ICAgICAgICAgICAgICAgICAgICAgIC8qIFRyYWRl IE1hcmsgKi8KKyAgICAgICAgcmV0dXJuKChDSEFSKSgweDk5ICYgMHhmZikpOworICAgICAgZGVm YXVsdDogcmV0dXJuKDB4MDAzZik7CisgICAgfQorfQorCitpbnQgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogV2luZG93cyBDb2RlIFBhZ2UgMTI1MSAoQ3lyaWxsaWMpICov CisjaWZkZWYgQ0tfQU5TSUMKK3R4X2NwMTI1MShVU0hPUlQgYykKKyNlbHNlCit0eF9jcDEyNTEo YykgVVNIT1JUIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAgICBpZiAoYyA8IDB4ODAp ICAgICAgICAgICAgICAgICAgICAgICAvKiBIYXMgQzEgZ3JhcGhpY3MgKi8KKyAgICAgIHJldHVy bigoQ0hBUikoYyAmIDB4ZmYpKTsKKyAgICAvKiBUaGlzIGlzIHNpbXBseSB0aGUgaW52ZXJzZSBv ZiB1X2NwMTI1MS5tYXAgKi8KKyAgICBzd2l0Y2ggKGMpIHsKKyAgICAgIGNhc2UgMHgwMDNjOiBy ZXR1cm4oKENIQVIpKDB4OGIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDAzZTogcmV0dXJuKChD SEFSKSgweDliICYgMHhmZikpOworICAgICAgY2FzZSAweDAwN2U6IHJldHVybigoQ0hBUikoMHg5 OCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMEEwOiByZXR1cm4oKENIQVIpKDB4YTAgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MDBBNDogcmV0dXJuKChDSEFSKSgweGE0ICYgMHhmZikpOworICAg ICAgY2FzZSAweDAwQTY6IHJldHVybigoQ0hBUikoMHhhNiAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgwMEE3OiByZXR1cm4oKENIQVIpKDB4YTcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBBOTog cmV0dXJuKChDSEFSKSgweGE5ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwQUI6IHJldHVybigo Q0hBUikoMHhhYiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMEFDOiByZXR1cm4oKENIQVIpKDB4 YWMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBBRDogcmV0dXJuKChDSEFSKSgweGFkICYgMHhm ZikpOworICAgICAgY2FzZSAweDAwQUU6IHJldHVybigoQ0hBUikoMHhhZSAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgwMGIwOiByZXR1cm4oKENIQVIpKDB4YjAgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MDBiMTogcmV0dXJuKChDSEFSKSgweGIxICYgMHhmZikpOworICAgICAgY2FzZSAweDAwQjU6 IHJldHVybigoQ0hBUikoMHhiNSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMEI2OiByZXR1cm4o KENIQVIpKDB4YjYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBCNzogcmV0dXJuKChDSEFSKSgw eGI3ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwQkI6IHJldHVybigoQ0hBUikoMHhiYiAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDAxOiByZXR1cm4oKENIQVIpKDB4YTggJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MDQwMjogcmV0dXJuKChDSEFSKSgweDgwICYgMHhmZikpOworICAgICAgY2Fz ZSAweDA0MDM6IHJldHVybigoQ0hBUikoMHg4MSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDA0 OiByZXR1cm4oKENIQVIpKDB4YWEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQwNTogcmV0dXJu KChDSEFSKSgweGJkICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MDY6IHJldHVybigoQ0hBUiko MHhiMiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDA3OiByZXR1cm4oKENIQVIpKDB4YWYgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MDQwODogcmV0dXJuKChDSEFSKSgweGEzICYgMHhmZikpOwor ICAgICAgY2FzZSAweDA0MDk6IHJldHVybigoQ0hBUikoMHg4YSAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgwNDBhOiByZXR1cm4oKENIQVIpKDB4OGMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQw YjogcmV0dXJuKChDSEFSKSgweDhlICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MGM6IHJldHVy bigoQ0hBUikoMHg4ZCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDBlOiByZXR1cm4oKENIQVIp KDB4YTEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQwZjogcmV0dXJuKChDSEFSKSgweDhmICYg MHhmZikpOworICAgICAgY2FzZSAweDA0MTA6IHJldHVybigoQ0hBUikoMHhjMCAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgwNDExOiByZXR1cm4oKENIQVIpKDB4YzEgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MDQxMjogcmV0dXJuKChDSEFSKSgweGMyICYgMHhmZikpOworICAgICAgY2FzZSAweDA0 MTM6IHJldHVybigoQ0hBUikoMHhjMyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDE0OiByZXR1 cm4oKENIQVIpKDB4YzQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQxNTogcmV0dXJuKChDSEFS KSgweGM1ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MTY6IHJldHVybigoQ0hBUikoMHhjNiAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDE3OiByZXR1cm4oKENIQVIpKDB4YzcgJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MDQxODogcmV0dXJuKChDSEFSKSgweGM4ICYgMHhmZikpOworICAgICAg Y2FzZSAweDA0MTk6IHJldHVybigoQ0hBUikoMHhjOSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgw NDFhOiByZXR1cm4oKENIQVIpKDB4Y2EgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQxYjogcmV0 dXJuKChDSEFSKSgweGNiICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MWM6IHJldHVybigoQ0hB UikoMHhjYyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDFkOiByZXR1cm4oKENIQVIpKDB4Y2Qg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQxZTogcmV0dXJuKChDSEFSKSgweGNlICYgMHhmZikp OworICAgICAgY2FzZSAweDA0MWY6IHJldHVybigoQ0hBUikoMHhjZiAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgwNDIwOiByZXR1cm4oKENIQVIpKDB4ZDAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MDQyMTogcmV0dXJuKChDSEFSKSgweGQxICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MjI6IHJl dHVybigoQ0hBUikoMHhkMiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDIzOiByZXR1cm4oKENI QVIpKDB4ZDMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQyNDogcmV0dXJuKChDSEFSKSgweGQ0 ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MjU6IHJldHVybigoQ0hBUikoMHhkNSAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgwNDI2OiByZXR1cm4oKENIQVIpKDB4ZDYgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MDQyNzogcmV0dXJuKChDSEFSKSgweGQ3ICYgMHhmZikpOworICAgICAgY2FzZSAw eDA0Mjg6IHJldHVybigoQ0hBUikoMHhkOCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDI5OiBy ZXR1cm4oKENIQVIpKDB4ZDkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQyYTogcmV0dXJuKChD SEFSKSgweGRhICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MmI6IHJldHVybigoQ0hBUikoMHhk YiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDJjOiByZXR1cm4oKENIQVIpKDB4ZGMgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MDQyZDogcmV0dXJuKChDSEFSKSgweGRkICYgMHhmZikpOworICAg ICAgY2FzZSAweDA0MmU6IHJldHVybigoQ0hBUikoMHhkZSAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgwNDJmOiByZXR1cm4oKENIQVIpKDB4ZGYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQzMDog cmV0dXJuKChDSEFSKSgweGUwICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MzE6IHJldHVybigo Q0hBUikoMHhlMSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDMyOiByZXR1cm4oKENIQVIpKDB4 ZTIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQzMzogcmV0dXJuKChDSEFSKSgweGUzICYgMHhm ZikpOworICAgICAgY2FzZSAweDA0MzQ6IHJldHVybigoQ0hBUikoMHhlNCAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgwNDM1OiByZXR1cm4oKENIQVIpKDB4ZTUgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MDQzNjogcmV0dXJuKChDSEFSKSgweGU2ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0Mzc6 IHJldHVybigoQ0hBUikoMHhlNyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDM4OiByZXR1cm4o KENIQVIpKDB4ZTggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQzOTogcmV0dXJuKChDSEFSKSgw eGU5ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0M2E6IHJldHVybigoQ0hBUikoMHhlYSAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDNiOiByZXR1cm4oKENIQVIpKDB4ZWIgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MDQzYzogcmV0dXJuKChDSEFSKSgweGVjICYgMHhmZikpOworICAgICAgY2Fz ZSAweDA0M2Q6IHJldHVybigoQ0hBUikoMHhlZCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDNl OiByZXR1cm4oKENIQVIpKDB4ZWUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQzZjogcmV0dXJu KChDSEFSKSgweGVmICYgMHhmZikpOworICAgICAgY2FzZSAweDA0NDA6IHJldHVybigoQ0hBUiko MHhmMCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDQxOiByZXR1cm4oKENIQVIpKDB4ZjEgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MDQ0MjogcmV0dXJuKChDSEFSKSgweGYyICYgMHhmZikpOwor ICAgICAgY2FzZSAweDA0NDM6IHJldHVybigoQ0hBUikoMHhmMyAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgwNDQ0OiByZXR1cm4oKENIQVIpKDB4ZjQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQ0 NTogcmV0dXJuKChDSEFSKSgweGY1ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0NDY6IHJldHVy bigoQ0hBUikoMHhmNiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDQ3OiByZXR1cm4oKENIQVIp KDB4ZjcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQ0ODogcmV0dXJuKChDSEFSKSgweGY4ICYg MHhmZikpOworICAgICAgY2FzZSAweDA0NDk6IHJldHVybigoQ0hBUikoMHhmOSAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgwNDRhOiByZXR1cm4oKENIQVIpKDB4ZmEgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MDQ0YjogcmV0dXJuKChDSEFSKSgweGZiICYgMHhmZikpOworICAgICAgY2FzZSAweDA0 NGM6IHJldHVybigoQ0hBUikoMHhmYyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDRkOiByZXR1 cm4oKENIQVIpKDB4ZmQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQ0ZTogcmV0dXJuKChDSEFS KSgweGZlICYgMHhmZikpOworICAgICAgY2FzZSAweDA0NGY6IHJldHVybigoQ0hBUikoMHhmZiAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDUxOiByZXR1cm4oKENIQVIpKDB4YjggJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MDQ1MjogcmV0dXJuKChDSEFSKSgweDkwICYgMHhmZikpOworICAgICAg Y2FzZSAweDA0NTM6IHJldHVybigoQ0hBUikoMHg4MyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgw NDU0OiByZXR1cm4oKENIQVIpKDB4YmEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQ1NTogcmV0 dXJuKChDSEFSKSgweGJlICYgMHhmZikpOworICAgICAgY2FzZSAweDA0NTY6IHJldHVybigoQ0hB UikoMHhiMyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDU3OiByZXR1cm4oKENIQVIpKDB4YmYg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQ1ODogcmV0dXJuKChDSEFSKSgweGJjICYgMHhmZikp OworICAgICAgY2FzZSAweDA0NTk6IHJldHVybigoQ0hBUikoMHg5YSAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgwNDVhOiByZXR1cm4oKENIQVIpKDB4OWMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MDQ1YjogcmV0dXJuKChDSEFSKSgweDllICYgMHhmZikpOworICAgICAgY2FzZSAweDA0NWM6IHJl dHVybigoQ0hBUikoMHg5ZCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDVlOiByZXR1cm4oKENI QVIpKDB4YTIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQ1ZjogcmV0dXJuKChDSEFSKSgweDlm ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0OTA6IHJldHVybigoQ0hBUikoMHhhNSAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgwNDkxOiByZXR1cm4oKENIQVIpKDB4YjQgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MjAxMjogcmV0dXJuKChDSEFSKSgweDk2ICYgMHhmZikpOworICAgICAgY2FzZSAw eDIwMTQ6IHJldHVybigoQ0hBUikoMHg5NyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMDE4OiBy ZXR1cm4oKENIQVIpKDB4OTEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjAxOTogcmV0dXJuKChD SEFSKSgweDkyICYgMHhmZikpOworICAgICAgY2FzZSAweDIwMWE6IHJldHVybigoQ0hBUikoMHg4 MiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMDFjOiByZXR1cm4oKENIQVIpKDB4OTMgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MjAxZDogcmV0dXJuKChDSEFSKSgweDk0ICYgMHhmZikpOworICAg ICAgY2FzZSAweDIwMWU6IHJldHVybigoQ0hBUikoMHg4NCAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgyMDIwOiByZXR1cm4oKENIQVIpKDB4ODYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjAyMTog cmV0dXJuKChDSEFSKSgweDg3ICYgMHhmZikpOworICAgICAgY2FzZSAweDIwMjI6IHJldHVybigo Q0hBUikoMHg5NSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMDI2OiByZXR1cm4oKENIQVIpKDB4 ODUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjAzMTogcmV0dXJuKChDSEFSKSgweDg5ICYgMHhm ZikpOworICAgICAgY2FzZSAweDIwQUM6ICAgICAgICAgICAgICAgICAgICAgIC8qIEV1cm8gKi8K KyAgICAgICAgICByZXR1cm4oKENIQVIpKDB4ODggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjEx NjogcmV0dXJuKChDSEFSKSgweGI5ICYgMHhmZikpOworICAgICAgY2FzZSAweDIxMjI6IHJldHVy bigoQ0hBUikoMHg5OSAmIDB4ZmYpKTsKKyAgICAgIGRlZmF1bHQ6IHJldHVybigweDAwM2YpOwor ICAgIH0KK30KKworaW50IC8qIFVuaWNvZGUgdG8gV2luZG93cyBDb2RlIFBhZ2UgMTI1MiAoTGF0 aW4tMSkgKi8KKyNpZmRlZiBDS19BTlNJQwordHhfY3AxMjUyKFVTSE9SVCBjKQorI2Vsc2UKK3R4 X2NwMTI1MihjKSBVU0hPUlQgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworICAgIGlmIChj IDwgMHg4MCB8fCAoYyA+IDB4OWYgJiYgYyA8PSAweGZmKSkgLyogSGFzIEMxIGdyYXBoaWNzICov CisgICAgICByZXR1cm4oKENIQVIpKGMgJiAweGZmKSk7CisgICAgc3dpdGNoIChjKSB7CisgICAg ICBjYXNlIDB4MDE1MjogICAgICAgICAgICAgICAgICAgICAgLyogT0UgKi8KKyAgICAgICAgcmV0 dXJuKChDSEFSKSgweDhjICYgMHhmZikpOworICAgICAgY2FzZSAweDAxNTM6ICAgICAgICAgICAg ICAgICAgICAgIC8qIG9lICovCisgICAgICAgIHJldHVybigoQ0hBUikoMHg5YyAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgwMTYwOiAgICAgICAgICAgICAgICAgICAgICAvKiBTIGNhcm9uICovCisg ICAgICAgIHJldHVybigoQ0hBUikoMHg4YSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMTYxOiAg ICAgICAgICAgICAgICAgICAgICAvKiBzIGNhcm9uICovCisgICAgICAgIHJldHVybigoQ0hBUiko MHg5YSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMTc4OiAgICAgICAgICAgICAgICAgICAgICAv KiBZIGRpYWVyZXNpcyAqLworICAgICAgICByZXR1cm4oKENIQVIpKDB4OWYgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MDE3RDogICAgICAgICAgICAgICAgICAgICAgLyogWiBjYXJvbiAqLworICAg ICAgICByZXR1cm4oKENIQVIpKDB4OGUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDE3RTogICAg ICAgICAgICAgICAgICAgICAgLyogeiBjYXJvbiAqLworICAgICAgICByZXR1cm4oKENIQVIpKDB4 OWUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDE5MjogICAgICAgICAgICAgICAgICAgICAgLyog RmxvcmluICovCisgICAgICAgIHJldHVybigoQ0hBUikoMHg4MyAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgyMDEwOiBjYXNlIDB4MjAxMTogICAgICAgICAvKiBIeXBoZW5zICovCisgICAgICAgIHJl dHVybigoQ0hBUikoMHgyZCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMDEyOiBjYXNlIDB4MjAx MzogICAgICAgICAvKiBlbi1kYXNoZXMgKi8KKyAgICAgICAgcmV0dXJuKChDSEFSKSgweDk2ICYg MHhmZikpOworICAgICAgY2FzZSAweDIwMTQ6IGNhc2UgMHgyMDE1OiAgICAgICAgIC8qIGVtLWRh c2hlcyAqLworICAgICAgICByZXR1cm4oKENIQVIpKDB4OTcgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MjAxODogICAgICAgICAgICAgICAgICAgICAgLyogVmFyaW91cyBxdW90YXRpb24gbWFya3Mu Li4gKi8KKyAgICAgICAgcmV0dXJuKChDSEFSKSgweDkxICYgMHhmZikpOworICAgICAgY2FzZSAw eDIwMTk6CisgICAgICAgIHJldHVybigoQ0hBUikoMHg5MiAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgyMDFjOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4OTMgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MjAxZDoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweDk0ICYgMHhmZikpOworICAgICAgY2Fz ZSAweDIwMWU6CisgICAgICAgIHJldHVybigoQ0hBUikoMHg4NCAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgyMDIwOiAgICAgICAgICAgICAgICAgICAgICAvKiBEYWdnZXIgKi8KKyAgICAgICAgcmV0 dXJuKChDSEFSKSgweDg2ICYgMHhmZikpOworICAgICAgY2FzZSAweDIwMjE6ICAgICAgICAgICAg ICAgICAgICAgIC8qIERvdWJsZSBEYWdnZXIgKi8KKyAgICAgICAgcmV0dXJuKChDSEFSKSgweDg3 ICYgMHhmZikpOworICAgICAgY2FzZSAweDIwMjI6ICAgICAgICAgICAgICAgICAgICAgIC8qIEJ1 bGxldCAqLworICAgICAgICByZXR1cm4oKENIQVIpKDB4OTUgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MjAyNjogICAgICAgICAgICAgICAgICAgICAgLyogRWxsaXBzaXMgKi8KKyAgICAgICAgcmV0 dXJuKChDSEFSKSgweDg1ICYgMHhmZikpOworICAgICAgY2FzZSAweDIwMzA6ICAgICAgICAgICAg ICAgICAgICAgIC8qIFBlciBtaWwgKi8KKyAgICAgICAgcmV0dXJuKChDSEFSKSgweDg5ICYgMHhm ZikpOworICAgICAgY2FzZSAweDIwQUM6ICAgICAgICAgICAgICAgICAgICAgIC8qIEV1cm8gKi8K KyAgICAgICAgICByZXR1cm4oKENIQVIpKDB4ODAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjEy MjogICAgICAgICAgICAgICAgICAgICAgLyogVHJhZGUgTWFyayAqLworICAgICAgICByZXR1cm4o KENIQVIpKDB4OTkgJiAweGZmKSk7CisgICAgICBkZWZhdWx0OiByZXR1cm4oMHgwMDNmKTsKKyAg ICB9Cit9CisKK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQQyBD b2RlIFBhZ2UgODUyICovCisjaWZkZWYgQ0tfQU5TSUMKK3R4X2NwODUyKFVTSE9SVCBjKQorI2Vs c2UKK3R4X2NwODUyKGMpIFVTSE9SVCBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAg aWYgKGMgPCAweDgwKSAgICAgICAgICAgICAgICAgICAgICAgLyogSGFzIEMxIGdyYXBoaWNzICov CisgICAgICByZXR1cm4oKENIQVIpKGMgJiAweGZmKSk7CisgICAgc3dpdGNoIChjKSB7CisgICAg ICBjYXNlIDB4MDBhMDogcmV0dXJuKChDSEFSKSgyNTUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MDBhNDogcmV0dXJuKChDSEFSKSgyMDcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBhNzogcmV0 dXJuKChDSEFSKSgyNDUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBhODogcmV0dXJuKChDSEFS KSgyNDkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBhYjogcmV0dXJuKChDSEFSKSgxNzQgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MDBhYzogcmV0dXJuKChDSEFSKSgxNzAgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MDBhZDogcmV0dXJuKChDSEFSKSgyNDAgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MDBiMDogcmV0dXJuKChDSEFSKSgyNDggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBiNDog cmV0dXJuKChDSEFSKSgyMzkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBiODogcmV0dXJuKChD SEFSKSgyNDcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBiYjogcmV0dXJuKChDSEFSKSgxNzUg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBjMTogcmV0dXJuKChDSEFSKSgxODEgJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MDBjMjogcmV0dXJuKChDSEFSKSgxODIgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MDBjNDogcmV0dXJuKChDSEFSKSgxNDIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBj NzogcmV0dXJuKChDSEFSKSgxMjggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBjOTogcmV0dXJu KChDSEFSKSgxNDQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBjYjogcmV0dXJuKChDSEFSKSgy MTEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBjZDogcmV0dXJuKChDSEFSKSgyMTQgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MDBjZTogcmV0dXJuKChDSEFSKSgyMTUgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MDBkMzogcmV0dXJuKChDSEFSKSgyMjQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MDBkNDogcmV0dXJuKChDSEFSKSgyMjYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBkNjogcmV0 dXJuKChDSEFSKSgxNTMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBkNzogcmV0dXJuKChDSEFS KSgxNTggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBkYTogcmV0dXJuKChDSEFSKSgyMzMgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MDBkYzogcmV0dXJuKChDSEFSKSgxNTQgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MDBkZDogcmV0dXJuKChDSEFSKSgyMzcgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MDBkZjogcmV0dXJuKChDSEFSKSgyMjUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBlMTog cmV0dXJuKChDSEFSKSgxNjAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBlMjogcmV0dXJuKChD SEFSKSgxMzEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBlNDogcmV0dXJuKChDSEFSKSgxMzIg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBlNzogcmV0dXJuKChDSEFSKSgxMzUgJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MDBlOTogcmV0dXJuKChDSEFSKSgxMzAgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MDBlYjogcmV0dXJuKChDSEFSKSgxMzcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBl ZDogcmV0dXJuKChDSEFSKSgxNjEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBlZTogcmV0dXJu KChDSEFSKSgxNDAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBmMzogcmV0dXJuKChDSEFSKSgx NjIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBmNDogcmV0dXJuKChDSEFSKSgxNDcgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MDBmNjogcmV0dXJuKChDSEFSKSgxNDggJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MDBmNzogcmV0dXJuKChDSEFSKSgyNDYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MDBmYTogcmV0dXJuKChDSEFSKSgxNjMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBmYzogcmV0 dXJuKChDSEFSKSgxMjkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBmZDogcmV0dXJuKChDSEFS KSgyMzYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDEwMjogcmV0dXJuKChDSEFSKSgxOTggJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MDEwMzogcmV0dXJuKChDSEFSKSgxOTkgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MDEwNDogcmV0dXJuKChDSEFSKSgxNjQgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MDEwNTogcmV0dXJuKChDSEFSKSgxNjUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDEwNjog cmV0dXJuKChDSEFSKSgxNDMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDEwNzogcmV0dXJuKChD SEFSKSgxMzQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDEwYzogcmV0dXJuKChDSEFSKSgxNzIg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MDEwZDogcmV0dXJuKChDSEFSKSgxNTkgJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MDEwZTogcmV0dXJuKChDSEFSKSgyMTAgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MDEwZjogcmV0dXJuKChDSEFSKSgyMTIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDEx MDogcmV0dXJuKChDSEFSKSgyMDkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDExMTogcmV0dXJu KChDSEFSKSgyMDggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDExODogcmV0dXJuKChDSEFSKSgx NjggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDExOTogcmV0dXJuKChDSEFSKSgxNjkgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MDExYTogcmV0dXJuKChDSEFSKSgxODMgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MDExYjogcmV0dXJuKChDSEFSKSgyMTYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MDEzOTogcmV0dXJuKChDSEFSKSgxNDUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDEzYTogcmV0 dXJuKChDSEFSKSgxNDYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDEzZDogcmV0dXJuKChDSEFS KSgxNDkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDEzZTogcmV0dXJuKChDSEFSKSgxNTAgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MDE0MTogcmV0dXJuKChDSEFSKSgxNTcgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MDE0MjogcmV0dXJuKChDSEFSKSgxMzYgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MDE0MzogcmV0dXJuKChDSEFSKSgyMjcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDE0NDog cmV0dXJuKChDSEFSKSgyMjggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDE0NzogcmV0dXJuKChD SEFSKSgyMTMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDE0ODogcmV0dXJuKChDSEFSKSgyMjkg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MDE1MDogcmV0dXJuKChDSEFSKSgxMzggJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MDE1MTogcmV0dXJuKChDSEFSKSgxMzkgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MDE1NDogcmV0dXJuKChDSEFSKSgyMzIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDE1 NTogcmV0dXJuKChDSEFSKSgyMzQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDE1ODogcmV0dXJu KChDSEFSKSgyNTIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDE1OTogcmV0dXJuKChDSEFSKSgy NTMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDE1YTogcmV0dXJuKChDSEFSKSgxNTEgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MDE1YjogcmV0dXJuKChDSEFSKSgxNTIgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MDE1ZTogcmV0dXJuKChDSEFSKSgxODQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MDE1ZjogcmV0dXJuKChDSEFSKSgxNzMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDE2MDogcmV0 dXJuKChDSEFSKSgyMzAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDE2MTogcmV0dXJuKChDSEFS KSgyMzEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDE2MjogcmV0dXJuKChDSEFSKSgyMjEgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MDE2MzogcmV0dXJuKChDSEFSKSgyMzggJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MDE2NDogcmV0dXJuKChDSEFSKSgxNTUgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MDE2NTogcmV0dXJuKChDSEFSKSgxNTYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDE2ZTog cmV0dXJuKChDSEFSKSgyMjIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDE2ZjogcmV0dXJuKChD SEFSKSgxMzMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDE3MDogcmV0dXJuKChDSEFSKSgyMzUg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MDE3MTogcmV0dXJuKChDSEFSKSgyNTEgJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MDE3OTogcmV0dXJuKChDSEFSKSgxNDEgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MDE3YTogcmV0dXJuKChDSEFSKSgxNzEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDE3 YjogcmV0dXJuKChDSEFSKSgxODkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDE3YzogcmV0dXJu KChDSEFSKSgxOTAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDE3ZDogcmV0dXJuKChDSEFSKSgx NjYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDE3ZTogcmV0dXJuKChDSEFSKSgxNjcgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MDJjNzogcmV0dXJuKChDSEFSKSgyNDMgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MDJkODogcmV0dXJuKChDSEFSKSgyNDQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MDJkOTogcmV0dXJuKChDSEFSKSgyNTAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDJkYjogcmV0 dXJuKChDSEFSKSgyNDIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDJkZDogcmV0dXJuKChDSEFS KSgyNDEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjUwMDogcmV0dXJuKChDSEFSKSgxOTYgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MjUwMjogcmV0dXJuKChDSEFSKSgxNzkgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MjUwYzogcmV0dXJuKChDSEFSKSgyMTggJiAweGZmKSk7CisgICAgICBjYXNl IDB4MjUxMDogcmV0dXJuKChDSEFSKSgxOTEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjUxNDog cmV0dXJuKChDSEFSKSgxOTIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjUxODogcmV0dXJuKChD SEFSKSgyMTcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjUxYzogcmV0dXJuKChDSEFSKSgxOTUg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MjUyNDogcmV0dXJuKChDSEFSKSgxODAgJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MjUyYzogcmV0dXJuKChDSEFSKSgxOTQgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MjUzNDogcmV0dXJuKChDSEFSKSgxOTMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjUz YzogcmV0dXJuKChDSEFSKSgxOTcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU1MDogcmV0dXJu KChDSEFSKSgyMDUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU1MTogcmV0dXJuKChDSEFSKSgx ODYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU1NDogcmV0dXJuKChDSEFSKSgyMDEgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MjU1NzogcmV0dXJuKChDSEFSKSgxODcgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MjU1YTogcmV0dXJuKChDSEFSKSgyMDAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MjU1ZDogcmV0dXJuKChDSEFSKSgxODggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU2MDogcmV0 dXJuKChDSEFSKSgyMDQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU2MzogcmV0dXJuKChDSEFS KSgxODUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU2NjogcmV0dXJuKChDSEFSKSgyMDMgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MjU2OTogcmV0dXJuKChDSEFSKSgyMDIgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MjU2YzogcmV0dXJuKChDSEFSKSgyMDYgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MjU4MDogcmV0dXJuKChDSEFSKSgyMjMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU4NDog cmV0dXJuKChDSEFSKSgyMjAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU4ODogcmV0dXJuKChD SEFSKSgyMTkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU5MTogcmV0dXJuKChDSEFSKSgxNzYg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU5MjogcmV0dXJuKChDSEFSKSgxNzcgJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MjU5MzogcmV0dXJuKChDSEFSKSgxNzggJiAweGZmKSk7CisgICAgICBj YXNlIDB4MjVhMDogcmV0dXJuKChDSEFSKSgyNTQgJiAweGZmKSk7CisgICAgICBkZWZhdWx0OiBy ZXR1cm4odHhfY3BzdWIoYykpOyAgICAgLyogRm9yIGJveCBjaGFyYWN0ZXJzIGV0YyAqLworICAg IH0KK30KKworaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdpbmRv d3MgQ29kZSBQYWdlIDEyNTMgKEdyZWVrKSAqLworI2lmZGVmIENLX0FOU0lDCit0eF9jcDEyNTMo VVNIT1JUIGMpCisjZWxzZQordHhfY3AxMjUzKGMpIFVTSE9SVCBjOworI2VuZGlmIC8qIENLX0FO U0lDICovCit7CisgICAgaWYgKGMgPCAweDgwKSAgICAgICAgICAgICAgICAgICAgICAgLyogSGFz IEMxIGdyYXBoaWNzICovCisgICAgICByZXR1cm4oKENIQVIpKGMgJiAweGZmKSk7CisgICAgc3dp dGNoIChjKSB7CisgICAgICBjYXNlIDB4MDAzYzogcmV0dXJuKChDSEFSKSgweDhiICYgMHhmZikp OworICAgICAgY2FzZSAweDAwM2U6IHJldHVybigoQ0hBUikoMHg5YiAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgwMEEwOiByZXR1cm4oKENIQVIpKDB4YTAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MDBBMzogcmV0dXJuKChDSEFSKSgweGEzICYgMHhmZikpOworICAgICAgY2FzZSAweDAwQTQ6IHJl dHVybigoQ0hBUikoMHhhNCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMEE1OiByZXR1cm4oKENI QVIpKDB4YTUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBBNjogcmV0dXJuKChDSEFSKSgweGE2 ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwQTc6IHJldHVybigoQ0hBUikoMHhhNyAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgwMEE4OiByZXR1cm4oKENIQVIpKDB4YTggJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MDBBOTogcmV0dXJuKChDSEFSKSgweGE5ICYgMHhmZikpOworICAgICAgY2FzZSAw eDAwQUE6IHJldHVybigoQ0hBUikoMHhhYSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMEFCOiBy ZXR1cm4oKENIQVIpKDB4YWIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBBQzogcmV0dXJuKChD SEFSKSgweGFjICYgMHhmZikpOworICAgICAgY2FzZSAweDAwQUQ6IHJldHVybigoQ0hBUikoMHhh ZCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMEFFOiByZXR1cm4oKENIQVIpKDB4YWUgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MDBBRjogcmV0dXJuKChDSEFSKSgweGFmICYgMHhmZikpOworICAg ICAgY2FzZSAweDAwQjA6IHJldHVybigoQ0hBUikoMHhiMCAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgwMEIxOiByZXR1cm4oKENIQVIpKDB4YjEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBCMjog cmV0dXJuKChDSEFSKSgweGIyICYgMHhmZikpOworICAgICAgY2FzZSAweDAwQjM6IHJldHVybigo Q0hBUikoMHhiMyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMEI1OiByZXR1cm4oKENIQVIpKDB4 YjUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBCNjogcmV0dXJuKChDSEFSKSgweGI2ICYgMHhm ZikpOworICAgICAgY2FzZSAweDAwYjc6IHJldHVybigoQ0hBUikoMHhhMSAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgwMEJCOiByZXR1cm4oKENIQVIpKDB4YmIgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MDBCRDogcmV0dXJuKChDSEFSKSgweGJkICYgMHhmZikpOworICAgICAgY2FzZSAweDAxOTI6 IHJldHVybigoQ0hBUikoMHg4MyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMzg2OiByZXR1cm4o KENIQVIpKDB4YTIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDM4ODogcmV0dXJuKChDSEFSKSgw eGI4ICYgMHhmZikpOworICAgICAgY2FzZSAweDAzODk6IHJldHVybigoQ0hBUikoMHhiOSAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgwMzhBOiByZXR1cm4oKENIQVIpKDB4YmEgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MDM4QzogcmV0dXJuKChDSEFSKSgweGJjICYgMHhmZikpOworICAgICAgY2Fz ZSAweDAzOEU6IHJldHVybigoQ0hBUikoMHhiZSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMzhG OiByZXR1cm4oKENIQVIpKDB4YmYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDM5MDogcmV0dXJu KChDSEFSKSgweGMwICYgMHhmZikpOworICAgICAgY2FzZSAweDAzOTE6IHJldHVybigoQ0hBUiko MHhjMSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMzkyOiByZXR1cm4oKENIQVIpKDB4YzIgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MDM5MzogcmV0dXJuKChDSEFSKSgweGMzICYgMHhmZikpOwor ICAgICAgY2FzZSAweDAzOTQ6IHJldHVybigoQ0hBUikoMHhjNCAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgwMzk1OiByZXR1cm4oKENIQVIpKDB4YzUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDM5 NjogcmV0dXJuKChDSEFSKSgweGM2ICYgMHhmZikpOworICAgICAgY2FzZSAweDAzOTc6IHJldHVy bigoQ0hBUikoMHhjNyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMzk4OiByZXR1cm4oKENIQVIp KDB4YzggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDM5OTogcmV0dXJuKChDSEFSKSgweGM5ICYg MHhmZikpOworICAgICAgY2FzZSAweDAzOUE6IHJldHVybigoQ0hBUikoMHhjYSAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgwMzlCOiByZXR1cm4oKENIQVIpKDB4Y2IgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MDM5QzogcmV0dXJuKChDSEFSKSgweGNjICYgMHhmZikpOworICAgICAgY2FzZSAweDAz OUQ6IHJldHVybigoQ0hBUikoMHhjZCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMzlFOiByZXR1 cm4oKENIQVIpKDB4Y2UgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDM5RjogcmV0dXJuKChDSEFS KSgweGNmICYgMHhmZikpOworICAgICAgY2FzZSAweDAzYTA6IHJldHVybigoQ0hBUikoMHhkMCAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwM2ExOiByZXR1cm4oKENIQVIpKDB4ZDEgJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MDNhMzogcmV0dXJuKChDSEFSKSgweGQzICYgMHhmZikpOworICAgICAg Y2FzZSAweDAzYTQ6IHJldHVybigoQ0hBUikoMHhkNCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgw M2E1OiByZXR1cm4oKENIQVIpKDB4ZDUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDNhNjogcmV0 dXJuKChDSEFSKSgweGQ2ICYgMHhmZikpOworICAgICAgY2FzZSAweDAzYTc6IHJldHVybigoQ0hB UikoMHhkNyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwM2E4OiByZXR1cm4oKENIQVIpKDB4ZDgg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MDNhOTogcmV0dXJuKChDSEFSKSgweGQ5ICYgMHhmZikp OworICAgICAgY2FzZSAweDAzYUE6IHJldHVybigoQ0hBUikoMHhkYSAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgwM2FCOiByZXR1cm4oKENIQVIpKDB4ZGIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MDNhQzogcmV0dXJuKChDSEFSKSgweGRjICYgMHhmZikpOworICAgICAgY2FzZSAweDAzYUQ6IHJl dHVybigoQ0hBUikoMHhkZCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwM2FFOiByZXR1cm4oKENI QVIpKDB4ZGUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDNhRjogcmV0dXJuKChDSEFSKSgweGRm ICYgMHhmZikpOworICAgICAgY2FzZSAweDAzYjA6IHJldHVybigoQ0hBUikoMHhlMCAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgwM2IxOiByZXR1cm4oKENIQVIpKDB4ZTEgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MDNiMjogcmV0dXJuKChDSEFSKSgweGUyICYgMHhmZikpOworICAgICAgY2FzZSAw eDAzYjM6IHJldHVybigoQ0hBUikoMHhlMyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwM2I0OiBy ZXR1cm4oKENIQVIpKDB4ZTQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDNiNTogcmV0dXJuKChD SEFSKSgweGU1ICYgMHhmZikpOworICAgICAgY2FzZSAweDAzYjY6IHJldHVybigoQ0hBUikoMHhl NiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwM2I3OiByZXR1cm4oKENIQVIpKDB4ZTcgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MDNiODogcmV0dXJuKChDSEFSKSgweGU4ICYgMHhmZikpOworICAg ICAgY2FzZSAweDAzYjk6IHJldHVybigoQ0hBUikoMHhlOSAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgwM2JBOiByZXR1cm4oKENIQVIpKDB4ZWEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDNiQjog cmV0dXJuKChDSEFSKSgweGViICYgMHhmZikpOworICAgICAgY2FzZSAweDAzYkM6IHJldHVybigo Q0hBUikoMHhlYyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwM2JEOiByZXR1cm4oKENIQVIpKDB4 ZWQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDNiRTogcmV0dXJuKChDSEFSKSgweGVlICYgMHhm ZikpOworICAgICAgY2FzZSAweDAzYkY6IHJldHVybigoQ0hBUikoMHhlZiAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgwM2MwOiByZXR1cm4oKENIQVIpKDB4ZjAgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MDNjMTogcmV0dXJuKChDSEFSKSgweGYxICYgMHhmZikpOworICAgICAgY2FzZSAweDAzYzI6 IHJldHVybigoQ0hBUikoMHhmMiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwM2MzOiByZXR1cm4o KENIQVIpKDB4ZjMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDNjNDogcmV0dXJuKChDSEFSKSgw eGY0ICYgMHhmZikpOworICAgICAgY2FzZSAweDAzYzU6IHJldHVybigoQ0hBUikoMHhmNSAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgwM2M2OiByZXR1cm4oKENIQVIpKDB4ZjYgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MDNjNzogcmV0dXJuKChDSEFSKSgweGY3ICYgMHhmZikpOworICAgICAgY2Fz ZSAweDAzYzg6IHJldHVybigoQ0hBUikoMHhmOCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwM2M5 OiByZXR1cm4oKENIQVIpKDB4ZjkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDNjQTogcmV0dXJu KChDSEFSKSgweGZhICYgMHhmZikpOworICAgICAgY2FzZSAweDAzY0I6IHJldHVybigoQ0hBUiko MHhmYiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwM2NDOiByZXR1cm4oKENIQVIpKDB4ZmMgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MDNjRDogcmV0dXJuKChDSEFSKSgweGZkICYgMHhmZikpOwor ICAgICAgY2FzZSAweDAzY0U6IHJldHVybigoQ0hBUikoMHhmZSAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgyMDEyOiByZXR1cm4oKENIQVIpKDB4OTYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjAx NDogcmV0dXJuKChDSEFSKSgweDk3ICYgMHhmZikpOworICAgICAgY2FzZSAweDIwMTg6IHJldHVy bigoQ0hBUikoMHg5MSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMDE5OiByZXR1cm4oKENIQVIp KDB4OTIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjAxYTogcmV0dXJuKChDSEFSKSgweDgyICYg MHhmZikpOworICAgICAgY2FzZSAweDIwMWM6IHJldHVybigoQ0hBUikoMHg5MyAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgyMDFkOiByZXR1cm4oKENIQVIpKDB4OTQgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MjAxZTogcmV0dXJuKChDSEFSKSgweDg0ICYgMHhmZikpOworICAgICAgY2FzZSAweDIw MjA6IHJldHVybigoQ0hBUikoMHg4NiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMDIxOiByZXR1 cm4oKENIQVIpKDB4ODcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjAyMjogcmV0dXJuKChDSEFS KSgweDk1ICYgMHhmZikpOworICAgICAgY2FzZSAweDIwMjY6IHJldHVybigoQ0hBUikoMHg4NSAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMDMxOiByZXR1cm4oKENIQVIpKDB4ODkgJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MjBBQzogICAgICAgICAgICAgICAgICAgICAgLyogRXVybyAqLworICAg ICAgICAgIHJldHVybigoQ0hBUikoMHg4MCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMTIyOiBy ZXR1cm4oKENIQVIpKDB4OTkgJiAweGZmKSk7CisgICAgICBkZWZhdWx0OiByZXR1cm4oMHgwMDNm KTsKKyAgICB9Cit9CisKK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBXaW5kb3dzIENvZGUgUGFnZSAxMjU0IChUdXJraXNoKSAqLworI2lmZGVmIENLX0FOU0lDCit0 eF9jcDEyNTQoVVNIT1JUIGMpCisjZWxzZQordHhfY3AxMjU0KGMpIFVTSE9SVCBjOworI2VuZGlm IC8qIENLX0FOU0lDICovCit7CisgICAgaWYgKGMgPCAweDgwKQorICAgICAgcmV0dXJuKChDSEFS KShjICYgMHhmZikpOworICAgIHN3aXRjaCAoYykgeworICAgICAgY2FzZSAweDAxMWU6IHJldHVy bigoQ0hBUikoMHhkMCAmIDB4ZmYpKTsgLyogRyBicmV2ZSAgICAqLworICAgICAgY2FzZSAweDAx MzA6IHJldHVybigoQ0hBUikoMHhkZCAmIDB4ZmYpKTsgLyogSSB3aXRoIGRvdCAqLworICAgICAg Y2FzZSAweDAxNWU6IHJldHVybigoQ0hBUikoMHhkZSAmIDB4ZmYpKTsgLyogUyBjZWRpbGxhICAq LworICAgICAgY2FzZSAweDAxMWY6IHJldHVybigoQ0hBUikoMHhmMCAmIDB4ZmYpKTsgLyogZyBi cmV2ZSAgICAqLworICAgICAgY2FzZSAweDAxMzE6IHJldHVybigoQ0hBUikoMHhmZCAmIDB4ZmYp KTsgLyogaSBkb3RsZXNzICovCisgICAgICBjYXNlIDB4MDE1ZjogcmV0dXJuKChDSEFSKSgweGZl ICYgMHhmZikpOyAvKiBzIGNlZGlsbGEgKi8KKyAgICAgIGRlZmF1bHQ6IHJldHVybih0eF9jcDEy NTIoYykpOyAgICAvKiBUaGUgcmVzdCBpcyBsaWtlIFdpbmRvd3MgTGF0aW4tMSAqLworICAgIH0K K30KKworaW50CisjaWZkZWYgQ0tfQU5TSUMKK3R4X2NwMTI1NShVU0hPUlQgYykKKyNlbHNlCit0 eF9jcDEyNTUoYykgVVNIT1JUIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAgICBpZiAo YyA8IDB4MDgwKQorICAgICAgICByZXR1cm4oKENIQVIpKGMgJiAweGZmKSk7CisgICAgc3dpdGNo IChjKSB7CisgICAgICBjYXNlIDB4MjBBQzoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweDgwICYg MHhmZikpOyAgICAvKiBFVVJPIFNJR04gKi8KKyAgICAgIGNhc2UgMHgyMDFBOgorICAgICAgICBy ZXR1cm4oKENIQVIpKDB4ODIgJiAweGZmKSk7ICAgIC8qIFNJTkdMRSBMT1ctOSBRVU9UQVRJT04g TUFSSyAqLworICAgICAgY2FzZSAweDAxOTI6CisgICAgICAgIHJldHVybigoQ0hBUikoMHg4MyAm IDB4ZmYpKTsgICAgLyogTEFUSU4gU01BTEwgTEVUVEVSIEYgV0lUSCBIT09LICovCisgICAgICBj YXNlIDB4MjAxRToKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweDg0ICYgMHhmZikpOyAgICAvKiBE T1VCTEUgTE9XLTkgUVVPVEFUSU9OIE1BUksgKi8KKyAgICAgIGNhc2UgMHgyMDI2OgorICAgICAg ICByZXR1cm4oKENIQVIpKDB4ODUgJiAweGZmKSk7ICAgIC8qIEhPUklaT05UQUwgRUxMSVBTSVMg Ki8KKyAgICAgIGNhc2UgMHgyMDIwOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4ODYgJiAweGZm KSk7ICAgIC8qIERBR0dFUiAqLworICAgICAgY2FzZSAweDIwMjE6CisgICAgICAgIHJldHVybigo Q0hBUikoMHg4NyAmIDB4ZmYpKTsgICAgLyogRE9VQkxFIERBR0dFUiAqLworICAgICAgY2FzZSAw eDAyQzY6CisgICAgICAgIHJldHVybigoQ0hBUikoMHg4OCAmIDB4ZmYpKTsgICAgLyogTU9ESUZJ RVIgTEVUVEVSIENJUkNVTUZMRVggQUNDRU5UICovCisgICAgICBjYXNlIDB4MjAzMDoKKyAgICAg ICAgcmV0dXJuKChDSEFSKSgweDg5ICYgMHhmZikpOyAgICAvKiBQRVIgTUlMTEUgU0lHTiAqLwor ICAgICAgY2FzZSAweDIwMzk6CisgICAgICAgIHJldHVybigoQ0hBUikoMHg4QiAmIDB4ZmYpKTsg ICAgLyogU0lOR0xFIExFRlQtUE9JTlRJTkcgQU5HTEUgUVVPVEUgKi8KKyAgICAgIGNhc2UgMHgy MDE4OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4OTEgJiAweGZmKSk7ICAgIC8qIExFRlQgU0lO R0xFIFFVT1RBVElPTiBNQVJLICovCisgICAgICBjYXNlIDB4MjAxOToKKyAgICAgICAgcmV0dXJu KChDSEFSKSgweDkyICYgMHhmZikpOyAgICAvKiBSSUdIVCBTSU5HTEUgUVVPVEFUSU9OIE1BUksg Ki8KKyAgICAgIGNhc2UgMHgyMDFDOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4OTMgJiAweGZm KSk7ICAgIC8qIExFRlQgRE9VQkxFIFFVT1RBVElPTiBNQVJLICovCisgICAgICBjYXNlIDB4MjAx RDoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweDk0ICYgMHhmZikpOyAgICAvKiBSSUdIVCBET1VC TEUgUVVPVEFUSU9OIE1BUksgKi8KKyAgICAgIGNhc2UgMHgyMDIyOgorICAgICAgICByZXR1cm4o KENIQVIpKDB4OTUgJiAweGZmKSk7ICAgIC8qIEJVTExFVCAqLworICAgICAgY2FzZSAweDIwMTM6 CisgICAgICAgIHJldHVybigoQ0hBUikoMHg5NiAmIDB4ZmYpKTsgICAgLyogRU4gREFTSCAqLwor ICAgICAgY2FzZSAweDIwMTQ6CisgICAgICAgIHJldHVybigoQ0hBUikoMHg5NyAmIDB4ZmYpKTsg ICAgLyogRU0gREFTSCAqLworICAgICAgY2FzZSAweDAyREM6CisgICAgICAgIHJldHVybigoQ0hB UikoMHg5OCAmIDB4ZmYpKTsgICAgLyogU01BTEwgVElMREUgKi8KKyAgICAgIGNhc2UgMHgyMTIy OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4OTkgJiAweGZmKSk7ICAgIC8qIFRSQURFIE1BUksg U0lHTiAqLworICAgICAgY2FzZSAweDIwM0E6CisgICAgICAgIHJldHVybigoQ0hBUikoMHg5QiAm IDB4ZmYpKTsgICAgLyogU0lOR0xFIFJJR0hULVBPSU5USU5HIEFOR0xFIFFVT1RFICovCisgICAg ICBjYXNlIDB4MDBBMDoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEEwICYgMHhmZikpOyAgICAv KiBOTy1CUkVBSyBTUEFDRSAqLworICAgICAgY2FzZSAweDAwQTE6CisgICAgICAgIHJldHVybigo Q0hBUikoMHhBMSAmIDB4ZmYpKTsgICAgLyogSU5WRVJURUQgRVhDTEFNQVRJT04gTUFSSyAqLwor ICAgICAgY2FzZSAweDAwQTI6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhBMiAmIDB4ZmYpKTsg ICAgLyogQ0VOVCBTSUdOICovCisgICAgICBjYXNlIDB4MDBBMzoKKyAgICAgICAgcmV0dXJuKChD SEFSKSgweEEzICYgMHhmZikpOyAgICAvKiBQT1VORCBTSUdOICovCisgICAgICBjYXNlIDB4MjBB QToKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEE0ICYgMHhmZikpOyAgICAvKiBORVcgU0hFUUVM IFNJR04gKi8KKyAgICAgIGNhc2UgMHgwMEE1OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4QTUg JiAweGZmKSk7ICAgIC8qIFlFTiBTSUdOICovCisgICAgICBjYXNlIDB4MDBBNjoKKyAgICAgICAg cmV0dXJuKChDSEFSKSgweEE2ICYgMHhmZikpOyAgICAvKiBCUk9LRU4gQkFSICovCisgICAgICBj YXNlIDB4MDBBNzoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEE3ICYgMHhmZikpOyAgICAvKiBT RUNUSU9OIFNJR04gKi8KKyAgICAgIGNhc2UgMHgwMEE4OgorICAgICAgICByZXR1cm4oKENIQVIp KDB4QTggJiAweGZmKSk7ICAgIC8qIERJQUVSRVNJUyAqLworICAgICAgY2FzZSAweDAwQTk6Cisg ICAgICAgIHJldHVybigoQ0hBUikoMHhBOSAmIDB4ZmYpKTsgICAgLyogQ09QWVJJR0hUIFNJR04g Ki8KKyAgICAgIGNhc2UgMHgwMEQ3OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4QUEgJiAweGZm KSk7ICAgIC8qIE1VTFRJUExJQ0FUSU9OIFNJR04gKi8KKyAgICAgIGNhc2UgMHgwMEFCOgorICAg ICAgICByZXR1cm4oKENIQVIpKDB4QUIgJiAweGZmKSk7ICAgIC8qIExFRlQtUE9JTlRJTkcgRE9V QkxFIEFOR0xFIFFVT1RFICovCisgICAgICBjYXNlIDB4MDBBQzoKKyAgICAgICAgcmV0dXJuKChD SEFSKSgweEFDICYgMHhmZikpOyAgICAvKiBOT1QgU0lHTiAqLworICAgICAgY2FzZSAweDAwQUQ6 CisgICAgICAgIHJldHVybigoQ0hBUikoMHhBRCAmIDB4ZmYpKTsgICAgLyogU09GVCBIWVBIRU4g Ki8KKyAgICAgIGNhc2UgMHgwMEFFOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4QUUgJiAweGZm KSk7ICAgIC8qIFJFR0lTVEVSRUQgU0lHTiAqLworICAgICAgY2FzZSAweDAwQUY6CisgICAgICAg IHJldHVybigoQ0hBUikoMHhBRiAmIDB4ZmYpKTsgICAgLyogTUFDUk9OICovCisgICAgICBjYXNl IDB4MDBCMDoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEIwICYgMHhmZikpOyAgICAvKiBERUdS RUUgU0lHTiAqLworICAgICAgY2FzZSAweDAwQjE6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhC MSAmIDB4ZmYpKTsgICAgLyogUExVUy1NSU5VUyBTSUdOICovCisgICAgICBjYXNlIDB4MDBCMjoK KyAgICAgICAgcmV0dXJuKChDSEFSKSgweEIyICYgMHhmZikpOyAgICAvKiBTVVBFUlNDUklQVCBU V08gKi8KKyAgICAgIGNhc2UgMHgwMEIzOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4QjMgJiAw eGZmKSk7ICAgIC8qIFNVUEVSU0NSSVBUIFRIUkVFICovCisgICAgICBjYXNlIDB4MDBCNDoKKyAg ICAgICAgcmV0dXJuKChDSEFSKSgweEI0ICYgMHhmZikpOyAgICAvKiBBQ1VURSBBQ0NFTlQgKi8K KyAgICAgIGNhc2UgMHgwMEI1OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4QjUgJiAweGZmKSk7 ICAgIC8qIE1JQ1JPIFNJR04gKi8KKyAgICAgIGNhc2UgMHgwMEI2OgorICAgICAgICByZXR1cm4o KENIQVIpKDB4QjYgJiAweGZmKSk7ICAgIC8qIFBJTENST1cgU0lHTiAqLworICAgICAgY2FzZSAw eDAwQjc6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhCNyAmIDB4ZmYpKTsgICAgLyogTUlERExF IERPVCAqLworICAgICAgY2FzZSAweDAwQjg6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhCOCAm IDB4ZmYpKTsgICAgLyogQ0VESUxMQSAqLworICAgICAgY2FzZSAweDAwQjk6CisgICAgICAgIHJl dHVybigoQ0hBUikoMHhCOSAmIDB4ZmYpKTsgICAgLyogU1VQRVJTQ1JJUFQgT05FICovCisgICAg ICBjYXNlIDB4MDBGNzoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEJBICYgMHhmZikpOyAgICAv KiBESVZJU0lPTiBTSUdOICovCisgICAgICBjYXNlIDB4MDBCQjoKKyAgICAgICAgcmV0dXJuKChD SEFSKSgweEJCICYgMHhmZikpOyAgICAvKiBSSUdIVC1QT0lOVElORyBET1VCTEUgQU5HTEUgUVVP VEUgKi8KKyAgICAgIGNhc2UgMHgwMEJDOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4QkMgJiAw eGZmKSk7ICAgIC8qIFZVTEdBUiBGUkFDVElPTiBPTkUgUVVBUlRFUiAqLworICAgICAgY2FzZSAw eDAwQkQ6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhCRCAmIDB4ZmYpKTsgICAgLyogVlVMR0FS IEZSQUNUSU9OIE9ORSBIQUxGICovCisgICAgICBjYXNlIDB4MDBCRToKKyAgICAgICAgcmV0dXJu KChDSEFSKSgweEJFICYgMHhmZikpOyAgICAvKiBWVUxHQVIgRlJBQ1RJT04gVEhSRUUgUVVBUlRF UlMgKi8KKyAgICAgIGNhc2UgMHgwMEJGOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4QkYgJiAw eGZmKSk7ICAgIC8qIElOVkVSVEVEIFFVRVNUSU9OIE1BUksgKi8KKyAgICAgIGNhc2UgMHgwNUIw OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4QzAgJiAweGZmKSk7ICAgIC8qIEhFQlJFVyBQT0lO VCBTSEVWQSAqLworICAgICAgY2FzZSAweDA1QjE6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhD MSAmIDB4ZmYpKTsgICAgLyogSEVCUkVXIFBPSU5UIEhBVEFGIFNFR09MICovCisgICAgICBjYXNl IDB4MDVCMjoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEMyICYgMHhmZikpOyAgICAvKiBIRUJS RVcgUE9JTlQgSEFUQUYgUEFUQUggKi8KKyAgICAgIGNhc2UgMHgwNUIzOgorICAgICAgICByZXR1 cm4oKENIQVIpKDB4QzMgJiAweGZmKSk7ICAgIC8qIEhFQlJFVyBQT0lOVCBIQVRBRiBRQU1BVFMg Ki8KKyAgICAgIGNhc2UgMHgwNUI0OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4QzQgJiAweGZm KSk7ICAgIC8qIEhFQlJFVyBQT0lOVCBISVJJUSAqLworICAgICAgY2FzZSAweDA1QjU6CisgICAg ICAgIHJldHVybigoQ0hBUikoMHhDNSAmIDB4ZmYpKTsgICAgLyogSEVCUkVXIFBPSU5UIFRTRVJF ICovCisgICAgICBjYXNlIDB4MDVCNjoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEM2ICYgMHhm ZikpOyAgICAvKiBIRUJSRVcgUE9JTlQgU0VHT0wgKi8KKyAgICAgIGNhc2UgMHgwNUI3OgorICAg ICAgICByZXR1cm4oKENIQVIpKDB4QzcgJiAweGZmKSk7ICAgIC8qIEhFQlJFVyBQT0lOVCBQQVRB SCAqLworICAgICAgY2FzZSAweDA1Qjg6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhDOCAmIDB4 ZmYpKTsgICAgLyogSEVCUkVXIFBPSU5UIFFBTUFUUyAqLworICAgICAgY2FzZSAweDA1Qjk6Cisg ICAgICAgIHJldHVybigoQ0hBUikoMHhDOSAmIDB4ZmYpKTsgICAgLyogSEVCUkVXIFBPSU5UIEhP TEFNICovCisgICAgICBjYXNlIDB4MDVCQjoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweENCICYg MHhmZikpOyAgICAvKiBIRUJSRVcgUE9JTlQgUVVCVVRTICovCisgICAgICBjYXNlIDB4MDVCQzoK KyAgICAgICAgcmV0dXJuKChDSEFSKSgweENDICYgMHhmZikpOyAgICAvKiBIRUJSRVcgUE9JTlQg REFHRVNIIE9SIE1BUElRICovCisgICAgICBjYXNlIDB4MDVCRDoKKyAgICAgICAgcmV0dXJuKChD SEFSKSgweENEICYgMHhmZikpOyAgICAvKiBIRUJSRVcgUE9JTlQgTUVURUcgKi8KKyAgICAgIGNh c2UgMHgwNUJFOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4Q0UgJiAweGZmKSk7ICAgIC8qIEhF QlJFVyBQVU5DVFVBVElPTiBNQVFBRiAqLworICAgICAgY2FzZSAweDA1QkY6CisgICAgICAgIHJl dHVybigoQ0hBUikoMHhDRiAmIDB4ZmYpKTsgICAgLyogSEVCUkVXIFBPSU5UIFJBRkUgKi8KKyAg ICAgIGNhc2UgMHgwNUMwOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4RDAgJiAweGZmKSk7ICAg IC8qIEhFQlJFVyBQVU5DVFVBVElPTiBQQVNFUSAqLworICAgICAgY2FzZSAweDA1QzE6CisgICAg ICAgIHJldHVybigoQ0hBUikoMHhEMSAmIDB4ZmYpKTsgICAgLyogSEVCUkVXIFBPSU5UIFNISU4g RE9UICovCisgICAgICBjYXNlIDB4MDVDMjoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEQyICYg MHhmZikpOyAgICAvKiBIRUJSRVcgUE9JTlQgU0lOIERPVCAqLworICAgICAgY2FzZSAweDA1QzM6 CisgICAgICAgIHJldHVybigoQ0hBUikoMHhEMyAmIDB4ZmYpKTsgICAgLyogSEVCUkVXIFBVTkNU VUFUSU9OIFNPRiBQQVNVUSAqLworICAgICAgY2FzZSAweDA1RjA6CisgICAgICAgIHJldHVybigo Q0hBUikoMHhENCAmIDB4ZmYpKTsgICAgLyogSEVCUkVXIExJRy4gWUlERElTSCBET1VCTEUgVkFW ICovCisgICAgICBjYXNlIDB4MDVGMToKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEQ1ICYgMHhm ZikpOyAgICAvKiBIRUJSRVcgTElHQVRVUkUgWUlERElTSCBWQVYgWU9EICovCisgICAgICBjYXNl IDB4MDVGMjoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEQ2ICYgMHhmZikpOyAgICAvKiBIRUJS RVcgTElHLiBZSURESVNIIERPVUJMRSBZT0QgKi8KKyAgICAgIGNhc2UgMHgwNUYzOgorICAgICAg ICByZXR1cm4oKENIQVIpKDB4RDcgJiAweGZmKSk7ICAgIC8qIEhFQlJFVyBQVU5DVFVBVElPTiBH RVJFU0ggKi8KKyAgICAgIGNhc2UgMHgwNUY0OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4RDgg JiAweGZmKSk7ICAgIC8qIEhFQlJFVyBQVU5DVFVBVElPTiBHRVJTSEFZSU0gKi8KKyAgICAgIGNh c2UgMHgwNUQwOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4RTAgJiAweGZmKSk7ICAgIC8qIEhF QlJFVyBMRVRURVIgQUxFRiAqLworICAgICAgY2FzZSAweDA1RDE6CisgICAgICAgIHJldHVybigo Q0hBUikoMHhFMSAmIDB4ZmYpKTsgICAgLyogSEVCUkVXIExFVFRFUiBCRVQgKi8KKyAgICAgIGNh c2UgMHgwNUQyOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4RTIgJiAweGZmKSk7ICAgIC8qIEhF QlJFVyBMRVRURVIgR0lNRUwgKi8KKyAgICAgIGNhc2UgMHgwNUQzOgorICAgICAgICByZXR1cm4o KENIQVIpKDB4RTMgJiAweGZmKSk7ICAgIC8qIEhFQlJFVyBMRVRURVIgREFMRVQgKi8KKyAgICAg IGNhc2UgMHgwNUQ0OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4RTQgJiAweGZmKSk7ICAgIC8q IEhFQlJFVyBMRVRURVIgSEUgKi8KKyAgICAgIGNhc2UgMHgwNUQ1OgorICAgICAgICByZXR1cm4o KENIQVIpKDB4RTUgJiAweGZmKSk7ICAgIC8qIEhFQlJFVyBMRVRURVIgVkFWICovCisgICAgICBj YXNlIDB4MDVENjoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEU2ICYgMHhmZikpOyAgICAvKiBI RUJSRVcgTEVUVEVSIFpBWUlOICovCisgICAgICBjYXNlIDB4MDVENzoKKyAgICAgICAgcmV0dXJu KChDSEFSKSgweEU3ICYgMHhmZikpOyAgICAvKiBIRUJSRVcgTEVUVEVSIEhFVCAqLworICAgICAg Y2FzZSAweDA1RDg6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhFOCAmIDB4ZmYpKTsgICAgLyog SEVCUkVXIExFVFRFUiBURVQgKi8KKyAgICAgIGNhc2UgMHgwNUQ5OgorICAgICAgICByZXR1cm4o KENIQVIpKDB4RTkgJiAweGZmKSk7ICAgIC8qIEhFQlJFVyBMRVRURVIgWU9EICovCisgICAgICBj YXNlIDB4MDVEQToKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEVBICYgMHhmZikpOyAgICAvKiBI RUJSRVcgTEVUVEVSIEZJTkFMIEtBRiAqLworICAgICAgY2FzZSAweDA1REI6CisgICAgICAgIHJl dHVybigoQ0hBUikoMHhFQiAmIDB4ZmYpKTsgICAgLyogSEVCUkVXIExFVFRFUiBLQUYgKi8KKyAg ICAgIGNhc2UgMHgwNURDOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4RUMgJiAweGZmKSk7ICAg IC8qIEhFQlJFVyBMRVRURVIgTEFNRUQgKi8KKyAgICAgIGNhc2UgMHgwNUREOgorICAgICAgICBy ZXR1cm4oKENIQVIpKDB4RUQgJiAweGZmKSk7ICAgIC8qIEhFQlJFVyBMRVRURVIgRklOQUwgTUVN ICovCisgICAgICBjYXNlIDB4MDVERToKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEVFICYgMHhm ZikpOyAgICAvKiBIRUJSRVcgTEVUVEVSIE1FTSAqLworICAgICAgY2FzZSAweDA1REY6CisgICAg ICAgIHJldHVybigoQ0hBUikoMHhFRiAmIDB4ZmYpKTsgICAgLyogSEVCUkVXIExFVFRFUiBGSU5B TCBOVU4gKi8KKyAgICAgIGNhc2UgMHgwNUUwOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4RjAg JiAweGZmKSk7ICAgIC8qIEhFQlJFVyBMRVRURVIgTlVOICovCisgICAgICBjYXNlIDB4MDVFMToK KyAgICAgICAgcmV0dXJuKChDSEFSKSgweEYxICYgMHhmZikpOyAgICAvKiBIRUJSRVcgTEVUVEVS IFNBTUVLSCAqLworICAgICAgY2FzZSAweDA1RTI6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhG MiAmIDB4ZmYpKTsgICAgLyogSEVCUkVXIExFVFRFUiBBWUlOICovCisgICAgICBjYXNlIDB4MDVF MzoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEYzICYgMHhmZikpOyAgICAvKiBIRUJSRVcgTEVU VEVSIEZJTkFMIFBFICovCisgICAgICBjYXNlIDB4MDVFNDoKKyAgICAgICAgcmV0dXJuKChDSEFS KSgweEY0ICYgMHhmZikpOyAgICAvKiBIRUJSRVcgTEVUVEVSIFBFICovCisgICAgICBjYXNlIDB4 MDVFNToKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEY1ICYgMHhmZikpOyAgICAvKiBIRUJSRVcg TEVUVEVSIEZJTkFMIFRTQURJICovCisgICAgICBjYXNlIDB4MDVFNjoKKyAgICAgICAgcmV0dXJu KChDSEFSKSgweEY2ICYgMHhmZikpOyAgICAvKiBIRUJSRVcgTEVUVEVSIFRTQURJICovCisgICAg ICBjYXNlIDB4MDVFNzoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEY3ICYgMHhmZikpOyAgICAv KiBIRUJSRVcgTEVUVEVSIFFPRiAqLworICAgICAgY2FzZSAweDA1RTg6CisgICAgICAgIHJldHVy bigoQ0hBUikoMHhGOCAmIDB4ZmYpKTsgICAgLyogSEVCUkVXIExFVFRFUiBSRVNIICovCisgICAg ICBjYXNlIDB4MDVFOToKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEY5ICYgMHhmZikpOyAgICAv KiBIRUJSRVcgTEVUVEVSIFNISU4gKi8KKyAgICAgIGNhc2UgMHgwNUVBOgorICAgICAgICByZXR1 cm4oKENIQVIpKDB4RkEgJiAweGZmKSk7ICAgIC8qIEhFQlJFVyBMRVRURVIgVEFWICovCisgICAg ICBjYXNlIDB4MjAwRToKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEZEICYgMHhmZikpOyAgICAv KiBMRUZULVRPLVJJR0hUIE1BUksgKi8KKyAgICAgIGNhc2UgMHgyMDBGOgorICAgICAgICByZXR1 cm4oKENIQVIpKDB4RkUgJiAweGZmKSk7ICAgIC8qIFJJR0hULVRPLUxFRlQgTUFSSyAqLworICAg ICAgZGVmYXVsdDogcmV0dXJuKDB4MDAzZik7CisgICAgfQorfQorCitpbnQgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogV2luZG93cyBBcmFiaWMgKi8KKyNpZmRlZiBDS19B TlNJQwordHhfY3AxMjU2KFVTSE9SVCBjKQorI2Vsc2UKK3R4X2NwMTI1NihjKSBVU0hPUlQgYzsK KyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworICAgIGlmIChjIDwgMHg4MCkKKyAgICAgIHJldHVy bigoQ0hBUikoYyAmIDB4ZmYpKTsKKyAgICBzd2l0Y2ggKGMpIHsKKyAgICAgIGNhc2UgMHgyMEFD OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4ODAgJiAweGZmKSk7ICAgIC8qIEVVUk8gU0lHTiAq LworICAgICAgY2FzZSAweDA2N0U6CisgICAgICAgIHJldHVybigoQ0hBUikoMHg4MSAmIDB4ZmYp KTsgICAgLyogQVJBQklDIExFVFRFUiBQRUggKi8KKyAgICAgIGNhc2UgMHgyMDFBOgorICAgICAg ICByZXR1cm4oKENIQVIpKDB4ODIgJiAweGZmKSk7ICAgIC8qIFNJTkdMRSBMT1ctOSBRVU9UQVRJ T04gTUFSSyAqLworICAgICAgY2FzZSAweDAxOTI6CisgICAgICAgIHJldHVybigoQ0hBUikoMHg4 MyAmIDB4ZmYpKTsgICAgLyogTEFUSU4gU01BTEwgTEVUVEVSIEYgV0lUSCBIT09LICovCisgICAg ICBjYXNlIDB4MjAxRToKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweDg0ICYgMHhmZikpOyAgICAv KiBET1VCTEUgTE9XLTkgUVVPVEFUSU9OIE1BUksgKi8KKyAgICAgIGNhc2UgMHgyMDI2OgorICAg ICAgICByZXR1cm4oKENIQVIpKDB4ODUgJiAweGZmKSk7ICAgIC8qIEhPUklaT05UQUwgRUxMSVBT SVMgKi8KKyAgICAgIGNhc2UgMHgyMDIwOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4ODYgJiAw eGZmKSk7ICAgIC8qIERBR0dFUiAqLworICAgICAgY2FzZSAweDIwMjE6CisgICAgICAgIHJldHVy bigoQ0hBUikoMHg4NyAmIDB4ZmYpKTsgICAgLyogRE9VQkxFIERBR0dFUiAqLworICAgICAgY2Fz ZSAweDAyQzY6CisgICAgICAgIHJldHVybigoQ0hBUikoMHg4OCAmIDB4ZmYpKTsgICAgLyogTU9E SUZJRVIgTEVUVEVSIENJUkNVTUZMRVggQUNDRU5UICovCisgICAgICBjYXNlIDB4MjAzMDoKKyAg ICAgICAgcmV0dXJuKChDSEFSKSgweDg5ICYgMHhmZikpOyAgICAvKiBQRVIgTUlMTEUgU0lHTiAq LworICAgICAgY2FzZSAweDIwMzk6CisgICAgICAgIHJldHVybigoQ0hBUikoMHg4QiAmIDB4ZmYp KTsgICAgLyogU0lOR0xFIExFRlQtUE9JTlRJTkcgQU5HTEUgUVVPVEUgKi8KKyAgICAgIGNhc2Ug MHgwMTUyOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4OEMgJiAweGZmKSk7ICAgIC8qIExBVElO IENBUElUQUwgTElHQVRVUkUgT0UgKi8KKyAgICAgIGNhc2UgMHgwNjg2OgorICAgICAgICByZXR1 cm4oKENIQVIpKDB4OEQgJiAweGZmKSk7ICAgIC8qIEFSQUJJQyBMRVRURVIgVENIRUggKi8KKyAg ICAgIGNhc2UgMHgwNjk4OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4OEUgJiAweGZmKSk7ICAg IC8qIEFSQUJJQyBMRVRURVIgSkVIICovCisgICAgICBjYXNlIDB4MDZBRjoKKyAgICAgICAgcmV0 dXJuKChDSEFSKSgweDkwICYgMHhmZikpOyAgICAvKiBBUkFCSUMgTEVUVEVSIEdBRiAqLworICAg ICAgY2FzZSAweDIwMTg6CisgICAgICAgIHJldHVybigoQ0hBUikoMHg5MSAmIDB4ZmYpKTsgICAg LyogTEVGVCBTSU5HTEUgUVVPVEFUSU9OIE1BUksgKi8KKyAgICAgIGNhc2UgMHgyMDE5OgorICAg ICAgICByZXR1cm4oKENIQVIpKDB4OTIgJiAweGZmKSk7ICAgIC8qIFJJR0hUIFNJTkdMRSBRVU9U QVRJT04gTUFSSyAqLworICAgICAgY2FzZSAweDIwMUM6CisgICAgICAgIHJldHVybigoQ0hBUiko MHg5MyAmIDB4ZmYpKTsgICAgLyogTEVGVCBET1VCTEUgUVVPVEFUSU9OIE1BUksgKi8KKyAgICAg IGNhc2UgMHgyMDFEOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4OTQgJiAweGZmKSk7ICAgIC8q IFJJR0hUIERPVUJMRSBRVU9UQVRJT04gTUFSSyAqLworICAgICAgY2FzZSAweDIwMjI6CisgICAg ICAgIHJldHVybigoQ0hBUikoMHg5NSAmIDB4ZmYpKTsgICAgLyogQlVMTEVUICovCisgICAgICBj YXNlIDB4MjAxMzoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweDk2ICYgMHhmZikpOyAgICAvKiBF TiBEQVNIICovCisgICAgICBjYXNlIDB4MjAxNDoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweDk3 ICYgMHhmZikpOyAgICAvKiBFTSBEQVNIICovCisgICAgICBjYXNlIDB4MjEyMjoKKyAgICAgICAg cmV0dXJuKChDSEFSKSgweDk5ICYgMHhmZikpOyAgICAvKiBUUkFERSBNQVJLIFNJR04gKi8KKyAg ICAgIGNhc2UgMHgyMDNBOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4OUIgJiAweGZmKSk7ICAg IC8qIFNJTkdMRSBSSUdIVC1QT0lOVElORyBBTkdMRSBRVU9URSAqLworICAgICAgY2FzZSAweDAx NTM6CisgICAgICAgIHJldHVybigoQ0hBUikoMHg5QyAmIDB4ZmYpKTsgICAgLyogTEFUSU4gU01B TEwgTElHQVRVUkUgT0UgKi8KKyAgICAgIGNhc2UgMHgyMDBDOgorICAgICAgICByZXR1cm4oKENI QVIpKDB4OUQgJiAweGZmKSk7ICAgIC8qIFpFUk8gV0lEVEggTk9OLUpPSU5FUiAqLworICAgICAg Y2FzZSAweDIwMEQ6CisgICAgICAgIHJldHVybigoQ0hBUikoMHg5RSAmIDB4ZmYpKTsgICAgLyog WkVSTyBXSURUSCBKT0lORVIgKi8KKyAgICAgIGNhc2UgMHgwMEEwOgorICAgICAgICByZXR1cm4o KENIQVIpKDB4QTAgJiAweGZmKSk7ICAgIC8qIE5PLUJSRUFLIFNQQUNFICovCisgICAgICBjYXNl IDB4MDYwQzoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEExICYgMHhmZikpOyAgICAvKiBBUkFC SUMgQ09NTUEgKi8KKyAgICAgIGNhc2UgMHgwMEEyOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4 QTIgJiAweGZmKSk7ICAgIC8qIENFTlQgU0lHTiAqLworICAgICAgY2FzZSAweDAwQTM6CisgICAg ICAgIHJldHVybigoQ0hBUikoMHhBMyAmIDB4ZmYpKTsgICAgLyogUE9VTkQgU0lHTiAqLworICAg ICAgY2FzZSAweDAwQTQ6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhBNCAmIDB4ZmYpKTsgICAg LyogQ1VSUkVOQ1kgU0lHTiAqLworICAgICAgY2FzZSAweDAwQTU6CisgICAgICAgIHJldHVybigo Q0hBUikoMHhBNSAmIDB4ZmYpKTsgICAgLyogWUVOIFNJR04gKi8KKyAgICAgIGNhc2UgMHgwMEE2 OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4QTYgJiAweGZmKSk7ICAgIC8qIEJST0tFTiBCQVIg Ki8KKyAgICAgIGNhc2UgMHgwMEE3OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4QTcgJiAweGZm KSk7ICAgIC8qIFNFQ1RJT04gU0lHTiAqLworICAgICAgY2FzZSAweDAwQTg6CisgICAgICAgIHJl dHVybigoQ0hBUikoMHhBOCAmIDB4ZmYpKTsgICAgLyogRElBRVJFU0lTICovCisgICAgICBjYXNl IDB4MDBBOToKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEE5ICYgMHhmZikpOyAgICAvKiBDT1BZ UklHSFQgU0lHTiAqLworICAgICAgY2FzZSAweDAwQUI6CisgICAgICAgIHJldHVybigoQ0hBUiko MHhBQiAmIDB4ZmYpKTsgICAgLyogTEVGVC1QT0lOVElORyBET1VCTEUgQU5HTEUgUVVPVEUgKi8K KyAgICAgIGNhc2UgMHgwMEFDOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4QUMgJiAweGZmKSk7 ICAgIC8qIE5PVCBTSUdOICovCisgICAgICBjYXNlIDB4MDBBRDoKKyAgICAgICAgcmV0dXJuKChD SEFSKSgweEFEICYgMHhmZikpOyAgICAvKiBTT0ZUIEhZUEhFTiAqLworICAgICAgY2FzZSAweDAw QUU6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhBRSAmIDB4ZmYpKTsgICAgLyogUkVHSVNURVJF RCBTSUdOICovCisgICAgICBjYXNlIDB4MDBBRjoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEFG ICYgMHhmZikpOyAgICAvKiBNQUNST04gKi8KKyAgICAgIGNhc2UgMHgwMEIwOgorICAgICAgICBy ZXR1cm4oKENIQVIpKDB4QjAgJiAweGZmKSk7ICAgIC8qIERFR1JFRSBTSUdOICovCisgICAgICBj YXNlIDB4MDBCMToKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEIxICYgMHhmZikpOyAgICAvKiBQ TFVTLU1JTlVTIFNJR04gKi8KKyAgICAgIGNhc2UgMHgwMEIyOgorICAgICAgICByZXR1cm4oKENI QVIpKDB4QjIgJiAweGZmKSk7ICAgIC8qIFNVUEVSU0NSSVBUIFRXTyAqLworICAgICAgY2FzZSAw eDAwQjM6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhCMyAmIDB4ZmYpKTsgICAgLyogU1VQRVJT Q1JJUFQgVEhSRUUgKi8KKyAgICAgIGNhc2UgMHgwMEI0OgorICAgICAgICByZXR1cm4oKENIQVIp KDB4QjQgJiAweGZmKSk7ICAgIC8qIEFDVVRFIEFDQ0VOVCAqLworICAgICAgY2FzZSAweDAwQjU6 CisgICAgICAgIHJldHVybigoQ0hBUikoMHhCNSAmIDB4ZmYpKTsgICAgLyogTUlDUk8gU0lHTiAq LworICAgICAgY2FzZSAweDAwQjY6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhCNiAmIDB4ZmYp KTsgICAgLyogUElMQ1JPVyBTSUdOICovCisgICAgICBjYXNlIDB4MDBCNzoKKyAgICAgICAgcmV0 dXJuKChDSEFSKSgweEI3ICYgMHhmZikpOyAgICAvKiBNSURETEUgRE9UICovCisgICAgICBjYXNl IDB4MDBCODoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEI4ICYgMHhmZikpOyAgICAvKiBDRURJ TExBICovCisgICAgICBjYXNlIDB4MDBCOToKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEI5ICYg MHhmZikpOyAgICAvKiBTVVBFUlNDUklQVCBPTkUgKi8KKyAgICAgIGNhc2UgMHgwNjFCOgorICAg ICAgICByZXR1cm4oKENIQVIpKDB4QkEgJiAweGZmKSk7ICAgIC8qIEFSQUJJQyBTRU1JQ09MT04g Ki8KKyAgICAgIGNhc2UgMHgwMEJCOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4QkIgJiAweGZm KSk7ICAgIC8qIFJJR0hULVBPSU5USU5HIERPVUJMRSBBTkdMRSBRVU9URSAqLworICAgICAgY2Fz ZSAweDAwQkM6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhCQyAmIDB4ZmYpKTsgICAgLyogVlVM R0FSIEZSQUNUSU9OIE9ORSBRVUFSVEVSICovCisgICAgICBjYXNlIDB4MDBCRDoKKyAgICAgICAg cmV0dXJuKChDSEFSKSgweEJEICYgMHhmZikpOyAgICAvKiBWVUxHQVIgRlJBQ1RJT04gT05FIEhB TEYgKi8KKyAgICAgIGNhc2UgMHgwMEJFOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4QkUgJiAw eGZmKSk7ICAgIC8qIFZVTEdBUiBGUkFDVElPTiBUSFJFRSBRVUFSVEVSUyAqLworICAgICAgY2Fz ZSAweDA2MUY6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhCRiAmIDB4ZmYpKTsgICAgLyogQVJB QklDIFFVRVNUSU9OIE1BUksgKi8KKyAgICAgIGNhc2UgMHgwNjIxOgorICAgICAgICByZXR1cm4o KENIQVIpKDB4QzEgJiAweGZmKSk7ICAgIC8qIEFSQUJJQyBMRVRURVIgSEFNWkEgKi8KKyAgICAg IGNhc2UgMHgwNjIyOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4QzIgJiAweGZmKSk7ICAgIC8q IEFSQUJJQyBMVFIuIEFMRUYgV0lUSCBNQUREQSBBQk9WRSAqLworICAgICAgY2FzZSAweDA2MjM6 CisgICAgICAgIHJldHVybigoQ0hBUikoMHhDMyAmIDB4ZmYpKTsgICAgLyogQVJBQklDIExUUi4g QUxFRiBXSVRIIEhBTVpBIEFCT1ZFICovCisgICAgICBjYXNlIDB4MDYyNDoKKyAgICAgICAgcmV0 dXJuKChDSEFSKSgweEM0ICYgMHhmZikpOyAgICAvKiBBUkFCSUMgTFRSLiBXQVcgV0lUSCBIQU1a QSBBQk9WRSAqLworICAgICAgY2FzZSAweDA2MjU6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhD NSAmIDB4ZmYpKTsgICAgLyogQVJBQklDIExUUi4gQUxFRiBXSVRIIEhBTVpBIEJFTE9XICovCisg ICAgICBjYXNlIDB4MDYyNjoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEM2ICYgMHhmZikpOyAg ICAvKiBBUkFCSUMgTFRSLiBZRUggV0lUSCBIQU1aQSBBQk9WRSAqLworICAgICAgY2FzZSAweDA2 Mjc6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhDNyAmIDB4ZmYpKTsgICAgLyogQVJBQklDIExU Ui4gQUxFRiAqLworICAgICAgY2FzZSAweDA2Mjg6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhD OCAmIDB4ZmYpKTsgICAgLyogQVJBQklDIExUUi4gQkVIICovCisgICAgICBjYXNlIDB4MDYyOToK KyAgICAgICAgcmV0dXJuKChDSEFSKSgweEM5ICYgMHhmZikpOyAgICAvKiBBUkFCSUMgTEVUVEVS IFRFSCBNQVJCVVRBICovCisgICAgICBjYXNlIDB4MDYyQToKKyAgICAgICAgcmV0dXJuKChDSEFS KSgweENBICYgMHhmZikpOyAgICAvKiBBUkFCSUMgTEVUVEVSIFRFSCAqLworICAgICAgY2FzZSAw eDA2MkI6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhDQiAmIDB4ZmYpKTsgICAgLyogQVJBQklD IExFVFRFUiBUSEVIICovCisgICAgICBjYXNlIDB4MDYyQzoKKyAgICAgICAgcmV0dXJuKChDSEFS KSgweENDICYgMHhmZikpOyAgICAvKiBBUkFCSUMgTEVUVEVSIEpFRU0gKi8KKyAgICAgIGNhc2Ug MHgwNjJEOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4Q0QgJiAweGZmKSk7ICAgIC8qIEFSQUJJ QyBMRVRURVIgSEFIICovCisgICAgICBjYXNlIDB4MDYyRToKKyAgICAgICAgcmV0dXJuKChDSEFS KSgweENFICYgMHhmZikpOyAgICAvKiBBUkFCSUMgTEVUVEVSIEtIQUggKi8KKyAgICAgIGNhc2Ug MHgwNjJGOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4Q0YgJiAweGZmKSk7ICAgIC8qIEFSQUJJ QyBMRVRURVIgREFMICovCisgICAgICBjYXNlIDB4MDYzMDoKKyAgICAgICAgcmV0dXJuKChDSEFS KSgweEQwICYgMHhmZikpOyAgICAvKiBBUkFCSUMgTEVUVEVSIFRIQUwgKi8KKyAgICAgIGNhc2Ug MHgwNjMxOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4RDEgJiAweGZmKSk7ICAgIC8qIEFSQUJJ QyBMRVRURVIgUkVIICovCisgICAgICBjYXNlIDB4MDYzMjoKKyAgICAgICAgcmV0dXJuKChDSEFS KSgweEQyICYgMHhmZikpOyAgICAvKiBBUkFCSUMgTEVUVEVSIFpBSU4gKi8KKyAgICAgIGNhc2Ug MHgwNjMzOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4RDMgJiAweGZmKSk7ICAgIC8qIEFSQUJJ QyBMRVRURVIgU0VFTiAqLworICAgICAgY2FzZSAweDA2MzQ6CisgICAgICAgIHJldHVybigoQ0hB UikoMHhENCAmIDB4ZmYpKTsgICAgLyogQVJBQklDIExFVFRFUiBTSEVFTiAqLworICAgICAgY2Fz ZSAweDA2MzU6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhENSAmIDB4ZmYpKTsgICAgLyogQVJB QklDIExFVFRFUiBTQUQgKi8KKyAgICAgIGNhc2UgMHgwNjM2OgorICAgICAgICByZXR1cm4oKENI QVIpKDB4RDYgJiAweGZmKSk7ICAgIC8qIEFSQUJJQyBMRVRURVIgREFEICovCisgICAgICBjYXNl IDB4MDBENzoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEQ3ICYgMHhmZikpOyAgICAvKiBNVUxU SVBMSUNBVElPTiBTSUdOICovCisgICAgICBjYXNlIDB4MDYzNzoKKyAgICAgICAgcmV0dXJuKChD SEFSKSgweEQ4ICYgMHhmZikpOyAgICAvKiBBUkFCSUMgTEVUVEVSIFRBSCAqLworICAgICAgY2Fz ZSAweDA2Mzg6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhEOSAmIDB4ZmYpKTsgICAgLyogQVJB QklDIExFVFRFUiBaQUggKi8KKyAgICAgIGNhc2UgMHgwNjM5OgorICAgICAgICByZXR1cm4oKENI QVIpKDB4REEgJiAweGZmKSk7ICAgIC8qIEFSQUJJQyBMRVRURVIgQUlOICovCisgICAgICBjYXNl IDB4MDYzQToKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweERCICYgMHhmZikpOyAgICAvKiBBUkFC SUMgTEVUVEVSIEdIQUlOICovCisgICAgICBjYXNlIDB4MDY0MDoKKyAgICAgICAgcmV0dXJuKChD SEFSKSgweERDICYgMHhmZikpOyAgICAvKiBBUkFCSUMgVEFUV0VFTCAqLworICAgICAgY2FzZSAw eDA2NDE6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhERCAmIDB4ZmYpKTsgICAgLyogQVJBQklD IExFVFRFUiBGRUggKi8KKyAgICAgIGNhc2UgMHgwNjQyOgorICAgICAgICByZXR1cm4oKENIQVIp KDB4REUgJiAweGZmKSk7ICAgIC8qIEFSQUJJQyBMRVRURVIgUUFGICovCisgICAgICBjYXNlIDB4 MDY0MzoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweERGICYgMHhmZikpOyAgICAvKiBBUkFCSUMg TEVUVEVSIEtBRiAqLworICAgICAgY2FzZSAweDAwRTA6CisgICAgICAgIHJldHVybigoQ0hBUiko MHhFMCAmIDB4ZmYpKTsgICAgLyogTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBHUkFWRSAqLwor ICAgICAgY2FzZSAweDA2NDQ6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhFMSAmIDB4ZmYpKTsg ICAgLyogQVJBQklDIExFVFRFUiBMQU0gKi8KKyAgICAgIGNhc2UgMHgwMEUyOgorICAgICAgICBy ZXR1cm4oKENIQVIpKDB4RTIgJiAweGZmKSk7ICAgIC8qIFNNQUxMIExFVFRFUiBBIFdJVEggQ0lS Q1VNRkxFWCAqLworICAgICAgY2FzZSAweDA2NDU6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhF MyAmIDB4ZmYpKTsgICAgLyogQVJBQklDIExFVFRFUiBNRUVNICovCisgICAgICBjYXNlIDB4MDY0 NjoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEU0ICYgMHhmZikpOyAgICAvKiBBUkFCSUMgTEVU VEVSIE5PT04gKi8KKyAgICAgIGNhc2UgMHgwNjQ3OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4 RTUgJiAweGZmKSk7ICAgIC8qIEFSQUJJQyBMRVRURVIgSEVIICovCisgICAgICBjYXNlIDB4MDY0 ODoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEU2ICYgMHhmZikpOyAgICAvKiBBUkFCSUMgTEVU VEVSIFdBVyAqLworICAgICAgY2FzZSAweDAwRTc6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhF NyAmIDB4ZmYpKTsgICAgLyogTEFUSU4gU01BTEwgTEVUVEVSIEMgV0lUSCBDRURJTExBICovCisg ICAgICBjYXNlIDB4MDBFODoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEU4ICYgMHhmZikpOyAg ICAvKiBMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIEdSQVZFICovCisgICAgICBjYXNlIDB4MDBF OToKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEU5ICYgMHhmZikpOyAgICAvKiBMQVRJTiBTTUFM TCBMRVRURVIgRSBXSVRIIEFDVVRFICovCisgICAgICBjYXNlIDB4MDBFQToKKyAgICAgICAgcmV0 dXJuKChDSEFSKSgweEVBICYgMHhmZikpOyAgICAvKiBTTUFMTCBMRVRURVIgRSBXSVRIIENJUkNV TUZMRVggKi8KKyAgICAgIGNhc2UgMHgwMEVCOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4RUIg JiAweGZmKSk7ICAgIC8qIFNNQUxMIExFVFRFUiBFIFdJVEggRElBRVJFU0lTICovCisgICAgICBj YXNlIDB4MDY0OToKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEVDICYgMHhmZikpOyAgICAvKiBB UkFCSUMgTEVUVEVSIEFMRUYgTUFLU1VSQSAqLworICAgICAgY2FzZSAweDA2NEE6CisgICAgICAg IHJldHVybigoQ0hBUikoMHhFRCAmIDB4ZmYpKTsgICAgLyogQVJBQklDIExFVFRFUiBZRUggKi8K KyAgICAgIGNhc2UgMHgwMEVFOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4RUUgJiAweGZmKSk7 ICAgIC8qIFNNQUxMIExFVFRFUiBJIFdJVEggQ0lSQ1VNRkxFWCAqLworICAgICAgY2FzZSAweDAw RUY6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhFRiAmIDB4ZmYpKTsgICAgLyogU01BTEwgTEVU VEVSIEkgV0lUSCBESUFFUkVTSVMgKi8KKyAgICAgIGNhc2UgMHgwNjRCOgorICAgICAgICByZXR1 cm4oKENIQVIpKDB4RjAgJiAweGZmKSk7ICAgIC8qIEFSQUJJQyBGQVRIQVRBTiAqLworICAgICAg Y2FzZSAweDA2NEM6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhGMSAmIDB4ZmYpKTsgICAgLyog QVJBQklDIERBTU1BVEFOICovCisgICAgICBjYXNlIDB4MDY0RDoKKyAgICAgICAgcmV0dXJuKChD SEFSKSgweEYyICYgMHhmZikpOyAgICAvKiBBUkFCSUMgS0FTUkFUQU4gKi8KKyAgICAgIGNhc2Ug MHgwNjRFOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4RjMgJiAweGZmKSk7ICAgIC8qIEFSQUJJ QyBGQVRIQSAqLworICAgICAgY2FzZSAweDAwRjQ6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhG NCAmIDB4ZmYpKTsgICAgLyogU01BTEwgTEVUVEVSIE8gV0lUSCBDSVJDVU1GTEVYICovCisgICAg ICBjYXNlIDB4MDY0RjoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEY1ICYgMHhmZikpOyAgICAv KiBBUkFCSUMgREFNTUEgKi8KKyAgICAgIGNhc2UgMHgwNjUwOgorICAgICAgICByZXR1cm4oKENI QVIpKDB4RjYgJiAweGZmKSk7ICAgIC8qIEFSQUJJQyBLQVNSQSAqLworICAgICAgY2FzZSAweDAw Rjc6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhGNyAmIDB4ZmYpKTsgICAgLyogRElWSVNJT04g U0lHTiAqLworICAgICAgY2FzZSAweDA2NTE6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhGOCAm IDB4ZmYpKTsgICAgLyogQVJBQklDIFNIQUREQSAqLworICAgICAgY2FzZSAweDAwRjk6CisgICAg ICAgIHJldHVybigoQ0hBUikoMHhGOSAmIDB4ZmYpKTsgICAgLyogTEFUSU4gU01BTEwgTEVUVEVS IFUgV0lUSCBHUkFWRSAqLworICAgICAgY2FzZSAweDA2NTI6CisgICAgICAgIHJldHVybigoQ0hB UikoMHhGQSAmIDB4ZmYpKTsgICAgLyogQVJBQklDIFNVS1VOICovCisgICAgICBjYXNlIDB4MDBG QjoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEZCICYgMHhmZikpOyAgICAvKiBTTUFMTCBMRVRU RVIgVSBXSVRIIENJUkNVTUZMRVggKi8KKyAgICAgIGNhc2UgMHgwMEZDOgorICAgICAgICByZXR1 cm4oKENIQVIpKDB4RkMgJiAweGZmKSk7ICAgIC8qIFNNQUxMIExFVFRFUiBVIFdJVEggRElBRVJF U0lTICovCisgICAgICBjYXNlIDB4MjAwRToKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEZEICYg MHhmZikpOyAgICAvKiBMRUZULVRPLVJJR0hUIE1BUksgKi8KKyAgICAgIGNhc2UgMHgyMDBGOgor ICAgICAgICByZXR1cm4oKENIQVIpKDB4RkUgJiAweGZmKSk7ICAgIC8qIFJJR0hULVRPLUxFRlQg TUFSSyAqLworICAgICAgZGVmYXVsdDogcmV0dXJuKDB4MDAzZik7CisgICAgfQorfQorCitpbnQg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogV2luZG93cyBDb2RlIFBhZ2Ug MTI1NyAoTGF0aW4tNCkgKi8KKyNpZmRlZiBDS19BTlNJQwordHhfY3AxMjU3KFVTSE9SVCBjKQor I2Vsc2UKK3R4X2NwMTI1NyhjKSBVU0hPUlQgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworewor ICAgIGlmIChjIDwgMHg4MCkKKyAgICAgIHJldHVybigoQ0hBUikoYyAmIDB4ZmYpKTsKKyAgICBz d2l0Y2ggKGMpIHsKKyAgICAgIGNhc2UgMHgwMDNjOiByZXR1cm4oKENIQVIpKDB4OGIgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MDAzZTogcmV0dXJuKChDSEFSKSgweDliICYgMHhmZikpOworICAg ICAgY2FzZSAweDAwQTA6IHJldHVybigoQ0hBUikoMHhhMCAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgwMEEyOiByZXR1cm4oKENIQVIpKDB4YTIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBBMzog cmV0dXJuKChDSEFSKSgweGEzICYgMHhmZikpOworICAgICAgY2FzZSAweDAwQTQ6IHJldHVybigo Q0hBUikoMHhhNCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMEE2OiByZXR1cm4oKENIQVIpKDB4 YTYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBBNzogcmV0dXJuKChDSEFSKSgweGE3ICYgMHhm ZikpOworICAgICAgY2FzZSAweDAwQTk6IHJldHVybigoQ0hBUikoMHhhOSAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgwMEFCOiByZXR1cm4oKENIQVIpKDB4YWIgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MDBBQzogcmV0dXJuKChDSEFSKSgweGFjICYgMHhmZikpOworICAgICAgY2FzZSAweDAwQUQ6 IHJldHVybigoQ0hBUikoMHhhZCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMEFFOiByZXR1cm4o KENIQVIpKDB4YWUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBCMDogcmV0dXJuKChDSEFSKSgw eGIwICYgMHhmZikpOworICAgICAgY2FzZSAweDAwQjE6IHJldHVybigoQ0hBUikoMHhiMSAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgwMEIyOiByZXR1cm4oKENIQVIpKDB4YjIgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MDBCMzogcmV0dXJuKChDSEFSKSgweGIzICYgMHhmZikpOworICAgICAgY2Fz ZSAweDAwQjU6IHJldHVybigoQ0hBUikoMHhiNSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMEI2 OiByZXR1cm4oKENIQVIpKDB4YjYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBCNzogcmV0dXJu KChDSEFSKSgweGI3ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwQjk6IHJldHVybigoQ0hBUiko MHhiOSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMEJCOiByZXR1cm4oKENIQVIpKDB4YmIgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MDBCQzogcmV0dXJuKChDSEFSKSgweGJjICYgMHhmZikpOwor ICAgICAgY2FzZSAweDAwQkQ6IHJldHVybigoQ0hBUikoMHhiZCAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgwMEJFOiByZXR1cm4oKENIQVIpKDB4YmUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBD NDogcmV0dXJuKChDSEFSKSgweGM0ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwQzU6IHJldHVy bigoQ0hBUikoMHhjNSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGM2OiByZXR1cm4oKENIQVIp KDB4YWYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBDOTogcmV0dXJuKChDSEFSKSgweGM5ICYg MHhmZikpOworICAgICAgY2FzZSAweDAwZDM6IHJldHVybigoQ0hBUikoMHhkMyAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgwMEQ1OiByZXR1cm4oKENIQVIpKDB4ZDUgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MDBENjogcmV0dXJuKChDSEFSKSgweGQ2ICYgMHhmZikpOworICAgICAgY2FzZSAweDAw RDc6IHJldHVybigoQ0hBUikoMHhkNyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGQ4OiByZXR1 cm4oKENIQVIpKDB4YTggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBEQzogcmV0dXJuKChDSEFS KSgweGRjICYgMHhmZikpOworICAgICAgY2FzZSAweDAwREY6IHJldHVybigoQ0hBUikoMHhkZiAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMEU0OiByZXR1cm4oKENIQVIpKDB4ZTQgJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MDBFNTogcmV0dXJuKChDSEFSKSgweGU1ICYgMHhmZikpOworICAgICAg Y2FzZSAweDAwZTY6IHJldHVybigoQ0hBUikoMHhiZiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgw MEU5OiByZXR1cm4oKENIQVIpKDB4ZTkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBmMzogcmV0 dXJuKChDSEFSKSgweGYzICYgMHhmZikpOworICAgICAgY2FzZSAweDAwRjU6IHJldHVybigoQ0hB UikoMHhmNSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMEY2OiByZXR1cm4oKENIQVIpKDB4ZjYg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBGNzogcmV0dXJuKChDSEFSKSgweGY3ICYgMHhmZikp OworICAgICAgY2FzZSAweDAwZjg6IHJldHVybigoQ0hBUikoMHhiOCAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgwMGZjOiByZXR1cm4oKENIQVIpKDB4ZmMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MDEwMDogcmV0dXJuKChDSEFSKSgweGMyICYgMHhmZikpOworICAgICAgY2FzZSAweDAxMDE6IHJl dHVybigoQ0hBUikoMHhlMiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMTA0OiByZXR1cm4oKENI QVIpKDB4YzAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDEwNTogcmV0dXJuKChDSEFSKSgweGUw ICYgMHhmZikpOworICAgICAgY2FzZSAweDAxMDY6IHJldHVybigoQ0hBUikoMHhjMyAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgwMTA3OiByZXR1cm4oKENIQVIpKDB4ZTMgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MDEwQzogcmV0dXJuKChDSEFSKSgweGM4ICYgMHhmZikpOworICAgICAgY2FzZSAw eDAxMEQ6IHJldHVybigoQ0hBUikoMHhlOCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMTEyOiBy ZXR1cm4oKENIQVIpKDB4YzcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDExMzogcmV0dXJuKChD SEFSKSgweGU3ICYgMHhmZikpOworICAgICAgY2FzZSAweDAxMTY6IHJldHVybigoQ0hBUikoMHhj YiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMTE3OiByZXR1cm4oKENIQVIpKDB4ZWIgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MDExODogcmV0dXJuKChDSEFSKSgweGM2ICYgMHhmZikpOworICAg ICAgY2FzZSAweDAxMTk6IHJldHVybigoQ0hBUikoMHhlNiAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgwMTIyOiByZXR1cm4oKENIQVIpKDB4Y2MgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDEyMzog cmV0dXJuKChDSEFSKSgweGVjICYgMHhmZikpOworICAgICAgY2FzZSAweDAxMmE6IHJldHVybigo Q0hBUikoMHhjZSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMTJiOiByZXR1cm4oKENIQVIpKDB4 ZWUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDEyZTogcmV0dXJuKChDSEFSKSgweGMxICYgMHhm ZikpOworICAgICAgY2FzZSAweDAxMmY6IHJldHVybigoQ0hBUikoMHhlMSAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgwMTM2OiByZXR1cm4oKENIQVIpKDB4Y2QgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MDEzNzogcmV0dXJuKChDSEFSKSgweGVkICYgMHhmZikpOworICAgICAgY2FzZSAweDAxM2M6 IHJldHVybigoQ0hBUikoMHhlZiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMTQxOiByZXR1cm4o KENIQVIpKDB4ZDkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDE0MjogcmV0dXJuKChDSEFSKSgw eGY5ICYgMHhmZikpOworICAgICAgY2FzZSAweDAxNDM6IHJldHVybigoQ0hBUikoMHhkMSAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgwMTQ0OiByZXR1cm4oKENIQVIpKDB4ZjEgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MDE0NTogcmV0dXJuKChDSEFSKSgweGQyICYgMHhmZikpOworICAgICAgY2Fz ZSAweDAxNDY6IHJldHVybigoQ0hBUikoMHhmMiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMTRj OiByZXR1cm4oKENIQVIpKDB4ZDQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDE0ZDogcmV0dXJu KChDSEFSKSgweGY0ICYgMHhmZikpOworICAgICAgY2FzZSAweDAxNTY6IHJldHVybigoQ0hBUiko MHhhYSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMTU3OiByZXR1cm4oKENIQVIpKDB4YmEgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MDE1QTogcmV0dXJuKChDSEFSKSgweGRhICYgMHhmZikpOwor ICAgICAgY2FzZSAweDAxNWI6IHJldHVybigoQ0hBUikoMHhmYSAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgwMTYwOiByZXR1cm4oKENIQVIpKDB4ZDAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDE2 MTogcmV0dXJuKChDSEFSKSgweGYwICYgMHhmZikpOworICAgICAgY2FzZSAweDAxNmE6IHJldHVy bigoQ0hBUikoMHhkYiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMTZiOiByZXR1cm4oKENIQVIp KDB4ZmIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDE3MjogcmV0dXJuKChDSEFSKSgweGQ4ICYg MHhmZikpOworICAgICAgY2FzZSAweDAxNzM6IHJldHVybigoQ0hBUikoMHhmOCAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgwMTc5OiByZXR1cm4oKENIQVIpKDB4Y2EgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MDE3YTogcmV0dXJuKChDSEFSKSgweGVhICYgMHhmZikpOworICAgICAgY2FzZSAweDAx N2I6IHJldHVybigoQ0hBUikoMHhkZCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMTdjOiByZXR1 cm4oKENIQVIpKDB4ZmQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDE3ZDogcmV0dXJuKChDSEFS KSgweGRlICYgMHhmZikpOworICAgICAgY2FzZSAweDAxN2U6IHJldHVybigoQ0hBUikoMHhmZSAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMDEyOiByZXR1cm4oKENIQVIpKDB4OTYgJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MjAxNDogcmV0dXJuKChDSEFSKSgweDk3ICYgMHhmZikpOworICAgICAg Y2FzZSAweDIwMTg6IHJldHVybigoQ0hBUikoMHg5MSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgy MDE5OiByZXR1cm4oKENIQVIpKDB4OTIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjAxYTogcmV0 dXJuKChDSEFSKSgweDgyICYgMHhmZikpOworICAgICAgY2FzZSAweDIwMWM6IHJldHVybigoQ0hB UikoMHg5MyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMDFkOiByZXR1cm4oKENIQVIpKDB4OTQg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MjAxZTogcmV0dXJuKChDSEFSKSgweDg0ICYgMHhmZikp OworICAgICAgY2FzZSAweDIwMjA6IHJldHVybigoQ0hBUikoMHg4NiAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgyMDIxOiByZXR1cm4oKENIQVIpKDB4ODcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MjAyMjogcmV0dXJuKChDSEFSKSgweDk1ICYgMHhmZikpOworICAgICAgY2FzZSAweDIwMjY6IHJl dHVybigoQ0hBUikoMHg4NSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMDMxOiByZXR1cm4oKENI QVIpKDB4ODkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjBBQzogICAgICAgICAgICAgICAgICAg ICAgLyogRXVybyAqLworICAgICAgICAgIHJldHVybigoQ0hBUikoMHg4MCAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgyMTIyOiByZXR1cm4oKENIQVIpKDB4OTkgJiAweGZmKSk7CisgICAgICBkZWZh dWx0OiByZXR1cm4oMHgwMDNmKTsKKyAgICB9Cit9CisKK2ludCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBXaW5kb3dzIENvZGUgUGFnZSAxMjU4IChWaWV0IE5hbSkgKi8K KyNpZmRlZiBDS19BTlNJQwordHhfY3AxMjU4KFVTSE9SVCBjKQorI2Vsc2UKK3R4X2NwMTI1OChj KSBVU0hPUlQgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworICAgIGlmIChjIDwgMHg4MCkg ICAgICAgICAgICAgICAgICAgICAgIC8qIEhhcyBDMSBncmFwaGljcyAqLworICAgICAgcmV0dXJu KChDSEFSKShjICYgMHhmZikpOworICAgIHN3aXRjaCAoYykgeworICAgICAgY2FzZSAweDIwQUM6 CisgICAgICAgIHJldHVybigoQ0hBUikoMHg4MCAmIDB4ZmYpKTsgICAgLyogRVVSTyBTSUdOICov CisgICAgICBjYXNlIDB4MjAxQToKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweDgyICYgMHhmZikp OyAgICAvKiBTSU5HTEUgTE9XLTkgUVVPVEFUSU9OIE1BUksgKi8KKyAgICAgIGNhc2UgMHgwMTky OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4ODMgJiAweGZmKSk7ICAgIC8qIExBVElOIFNNQUxM IExFVFRFUiBGIFdJVEggSE9PSyAqLworICAgICAgY2FzZSAweDIwMUU6CisgICAgICAgIHJldHVy bigoQ0hBUikoMHg4NCAmIDB4ZmYpKTsgICAgLyogRE9VQkxFIExPVy05IFFVT1RBVElPTiBNQVJL ICovCisgICAgICBjYXNlIDB4MjAyNjogcmV0dXJuKChDSEFSKSgweDg1ICYgMHhmZikpOyAvKiBI T1JJWk9OVEFMIEVMTElQU0lTICovCisgICAgICBjYXNlIDB4MjAyMDogcmV0dXJuKChDSEFSKSgw eDg2ICYgMHhmZikpOyAvKiBEQUdHRVIgKi8KKyAgICAgIGNhc2UgMHgyMDIxOiByZXR1cm4oKENI QVIpKDB4ODcgJiAweGZmKSk7IC8qIERPVUJMRSBEQUdHRVIgKi8KKyAgICAgIGNhc2UgMHgwMkM2 OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4ODggJiAweGZmKSk7ICAgIC8qIE1PRElGSUVSIExF VFRFUiBDSVJDVU1GTEVYIEFDQ0VOVCAqLworICAgICAgY2FzZSAweDIwMzA6IHJldHVybigoQ0hB UikoMHg4OSAmIDB4ZmYpKTsgLyogUEVSIE1JTExFIFNJR04gKi8KKyAgICAgIGNhc2UgMHgyMDM5 OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4OEIgJiAweGZmKSk7ICAgIC8qIFNJTkdMRSBMRUZU IEFOR0xFIFFVT1RBVElPTiBNQVJLICovCisgICAgICBjYXNlIDB4MDE1MjogcmV0dXJuKChDSEFS KSgweDhDICYgMHhmZikpOyAvKiBMQVRJTiBDQVBJVEFMIExJR0FUVVJFIE9FICovCisgICAgICBj YXNlIDB4MjAxODoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweDkxICYgMHhmZikpOyAgICAvKiBM RUZUIFNJTkdMRSBRVU9UQVRJT04gTUFSSyAqLworICAgICAgY2FzZSAweDIwMTk6CisgICAgICAg IHJldHVybigoQ0hBUikoMHg5MiAmIDB4ZmYpKTsgICAgLyogUklHSFQgU0lOR0xFIFFVT1RBVElP TiBNQVJLICovCisgICAgICBjYXNlIDB4MjAxQzoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweDkz ICYgMHhmZikpOyAgICAvKiBMRUZUIERPVUJMRSBRVU9UQVRJT04gTUFSSyAqLworICAgICAgY2Fz ZSAweDIwMUQ6CisgICAgICAgIHJldHVybigoQ0hBUikoMHg5NCAmIDB4ZmYpKTsgICAgLyogUklH SFQgRE9VQkxFIFFVT1RBVElPTiBNQVJLICovCisgICAgICBjYXNlIDB4MjAyMjoKKyAgICAgICAg cmV0dXJuKChDSEFSKSgweDk1ICYgMHhmZikpOyAgICAvKiBCVUxMRVQgKi8KKyAgICAgIGNhc2Ug MHgyMDEzOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4OTYgJiAweGZmKSk7ICAgIC8qIEVOIERB U0ggKi8KKyAgICAgIGNhc2UgMHgyMDE0OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4OTcgJiAw eGZmKSk7ICAgIC8qIEVNIERBU0ggKi8KKyAgICAgIGNhc2UgMHgwMkRDOgorICAgICAgICByZXR1 cm4oKENIQVIpKDB4OTggJiAweGZmKSk7ICAgIC8qIFNNQUxMIFRJTERFICovCisgICAgICBjYXNl IDB4MjEyMjoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweDk5ICYgMHhmZikpOyAgICAvKiBUUkFE RSBNQVJLIFNJR04gKi8KKyAgICAgIGNhc2UgMHgyMDNBOgorICAgICAgICAvKiBTSU5HTEUgUklH SFQtUE9JTlRJTkcgQU5HTEUgUVVPVEFUSU9OIE1BUiBLKi8KKyAgICAgICAgcmV0dXJuKChDSEFS KSgweDlCICYgMHhmZikpOworICAgICAgY2FzZSAweDAxNTM6CisgICAgICAgIHJldHVybigoQ0hB UikoMHg5QyAmIDB4ZmYpKTsgICAgLyogTEFUSU4gU01BTEwgTElHQVRVUkUgT0UgKi8KKyAgICAg IGNhc2UgMHgwMTc4OgorICAgICAgICAvKiBMQVRJTiBDQVBJVEFMIExFVFRFUiBZIFdJVEggRElB RVJFU0lTICovCisgICAgICAgIHJldHVybigoQ0hBUikoMHg5RiAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgwMEEwOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4QTAgJiAweGZmKSk7ICAgIC8qIE5P LUJSRUFLIFNQQUNFICovCisgICAgICBjYXNlIDB4MDBBMToKKyAgICAgICAgcmV0dXJuKChDSEFS KSgweEExICYgMHhmZikpOyAgICAvKiBJTlZFUlRFRCBFWENMQU1BVElPTiBNQVJLICovCisgICAg ICBjYXNlIDB4MDBBMjoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEEyICYgMHhmZikpOyAgICAv KiBDRU5UIFNJR04gKi8KKyAgICAgIGNhc2UgMHgwMEEzOgorICAgICAgICByZXR1cm4oKENIQVIp KDB4QTMgJiAweGZmKSk7ICAgIC8qIFBPVU5EIFNJR04gKi8KKyAgICAgIGNhc2UgMHgwMEE0Ogor ICAgICAgICByZXR1cm4oKENIQVIpKDB4QTQgJiAweGZmKSk7ICAgIC8qIENVUlJFTkNZIFNJR04g Ki8KKyAgICAgIGNhc2UgMHgwMEE1OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4QTUgJiAweGZm KSk7ICAgIC8qIFlFTiBTSUdOICovCisgICAgICBjYXNlIDB4MDBBNjoKKyAgICAgICAgcmV0dXJu KChDSEFSKSgweEE2ICYgMHhmZikpOyAgICAvKiBCUk9LRU4gQkFSICovCisgICAgICBjYXNlIDB4 MDBBNzoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEE3ICYgMHhmZikpOyAgICAvKiBTRUNUSU9O IFNJR04gKi8KKyAgICAgIGNhc2UgMHgwMEE4OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4QTgg JiAweGZmKSk7ICAgIC8qIERJQUVSRVNJUyAqLworICAgICAgY2FzZSAweDAwQTk6CisgICAgICAg IHJldHVybigoQ0hBUikoMHhBOSAmIDB4ZmYpKTsgICAgLyogQ09QWVJJR0hUIFNJR04gKi8KKyAg ICAgIGNhc2UgMHgwMEFBOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4QUEgJiAweGZmKSk7ICAg IC8qIEZFTUlOSU5FIE9SRElOQUwgSU5ESUNBVE9SICovCisgICAgICBjYXNlIDB4MDBBQjoKKyAg ICAgICAgLyogTEVGVC1QT0lOVElORyBET1VCTEUgQU5HTEUgUVVPVEFUSU9OIE1BUksgKi8KKyAg ICAgICAgcmV0dXJuKChDSEFSKSgweEFCICYgMHhmZikpOworICAgICAgY2FzZSAweDAwQUM6Cisg ICAgICAgIHJldHVybigoQ0hBUikoMHhBQyAmIDB4ZmYpKTsgICAgLyogTk9UIFNJR04gKi8KKyAg ICAgIGNhc2UgMHgwMEFEOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4QUQgJiAweGZmKSk7ICAg IC8qIFNPRlQgSFlQSEVOICovCisgICAgICBjYXNlIDB4MDBBRToKKyAgICAgICAgcmV0dXJuKChD SEFSKSgweEFFICYgMHhmZikpOyAgICAvKiBSRUdJU1RFUkVEIFNJR04gKi8KKyAgICAgIGNhc2Ug MHgwMEFGOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4QUYgJiAweGZmKSk7ICAgIC8qIE1BQ1JP TiAqLworICAgICAgY2FzZSAweDAwQjA6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhCMCAmIDB4 ZmYpKTsgICAgLyogREVHUkVFIFNJR04gKi8KKyAgICAgIGNhc2UgMHgwMEIxOgorICAgICAgICBy ZXR1cm4oKENIQVIpKDB4QjEgJiAweGZmKSk7ICAgIC8qIFBMVVMtTUlOVVMgU0lHTiAqLworICAg ICAgY2FzZSAweDAwQjI6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhCMiAmIDB4ZmYpKTsgICAg LyogU1VQRVJTQ1JJUFQgVFdPICovCisgICAgICBjYXNlIDB4MDBCMzoKKyAgICAgICAgcmV0dXJu KChDSEFSKSgweEIzICYgMHhmZikpOyAgICAvKiBTVVBFUlNDUklQVCBUSFJFRSAqLworICAgICAg Y2FzZSAweDAwQjQ6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhCNCAmIDB4ZmYpKTsgICAgLyog QUNVVEUgQUNDRU5UICovCisgICAgICBjYXNlIDB4MDBCNToKKyAgICAgICAgcmV0dXJuKChDSEFS KSgweEI1ICYgMHhmZikpOyAgICAvKiBNSUNSTyBTSUdOICovCisgICAgICBjYXNlIDB4MDBCNjoK KyAgICAgICAgcmV0dXJuKChDSEFSKSgweEI2ICYgMHhmZikpOyAgICAvKiBQSUxDUk9XIFNJR04g Ki8KKyAgICAgIGNhc2UgMHgwMEI3OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4QjcgJiAweGZm KSk7ICAgIC8qIE1JRERMRSBET1QgKi8KKyAgICAgIGNhc2UgMHgwMEI4OgorICAgICAgICByZXR1 cm4oKENIQVIpKDB4QjggJiAweGZmKSk7ICAgIC8qIENFRElMTEEgKi8KKyAgICAgIGNhc2UgMHgw MEI5OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4QjkgJiAweGZmKSk7ICAgIC8qIFNVUEVSU0NS SVBUIE9ORSAqLworICAgICAgY2FzZSAweDAwQkE6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhC QSAmIDB4ZmYpKTsgICAgLyogTUFTQ1VMSU5FIE9SRElOQUwgSU5ESUNBVE9SICovCisgICAgICBj YXNlIDB4MDBCQjoKKyAgICAgICAgLyogUklHSFQtUE9JTlRJTkcgRE9VQkxFIEFOR0xFIFFVT1RB VElPTiBNQVIgSyovCisgICAgICAgIHJldHVybigoQ0hBUikoMHhCQiAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgwMEJDOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4QkMgJiAweGZmKSk7ICAgIC8q IFZVTEdBUiBGUkFDVElPTiBPTkUgUVVBUlRFUiAqLworICAgICAgY2FzZSAweDAwQkQ6CisgICAg ICAgIHJldHVybigoQ0hBUikoMHhCRCAmIDB4ZmYpKTsgICAgLyogVlVMR0FSIEZSQUNUSU9OIE9O RSBIQUxGICovCisgICAgICBjYXNlIDB4MDBCRToKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEJF ICYgMHhmZikpOyAgICAvKiBWVUxHQVIgRlJBQ1RJT04gVEhSRUUgUVVBUlRFUlMgKi8KKyAgICAg IGNhc2UgMHgwMEJGOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4QkYgJiAweGZmKSk7ICAgIC8q IElOVkVSVEVEIFFVRVNUSU9OIE1BUksgKi8KKyAgICAgIGNhc2UgMHgwMEMwOgorICAgICAgICBy ZXR1cm4oKENIQVIpKDB4QzAgJiAweGZmKSk7ICAgIC8qIExBVElOIENBUElUQUwgTEVUVEVSIEEg V0lUSCBHUkFWRSAqLworICAgICAgY2FzZSAweDAwQzE6CisgICAgICAgIHJldHVybigoQ0hBUiko MHhDMSAmIDB4ZmYpKTsgICAgLyogTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIEFDVVRFICov CisgICAgICBjYXNlIDB4MDBDMjoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEMyICYgMHhmZikp OyAgICAvKiBBIENJUkNVTUZMRVggKi8KKyAgICAgIGNhc2UgMHgwMTAyOgorICAgICAgICByZXR1 cm4oKENIQVIpKDB4QzMgJiAweGZmKSk7ICAgIC8qIExBVElOIENBUElUQUwgTEVUVEVSIEEgV0lU SCBCUkVWRSAqLworICAgICAgY2FzZSAweDAwQzQ6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhD NCAmIDB4ZmYpKTsgICAgLyogQSBESUFFUkVTSVMgKi8KKyAgICAgIGNhc2UgMHgwMEM1OgorICAg ICAgICByZXR1cm4oKENIQVIpKDB4QzUgJiAweGZmKSk7ICAgIC8qIEEgUklORyAqLworICAgICAg Y2FzZSAweDAwQzY6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhDNiAmIDB4ZmYpKTsgICAgLyog TEFUSU4gQ0FQSVRBTCBMRVRURVIgQUUgKi8KKyAgICAgIGNhc2UgMHgwMEM3OgorICAgICAgICBy ZXR1cm4oKENIQVIpKDB4QzcgJiAweGZmKSk7ICAgIC8qIEMgQ0VESUxMQSAqLworICAgICAgY2Fz ZSAweDAwQzg6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhDOCAmIDB4ZmYpKTsgICAgLyogRSBH UkFWRSAqLworICAgICAgY2FzZSAweDAwQzk6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhDOSAm IDB4ZmYpKTsgICAgLyogTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIEFDVVRFICovCisgICAg ICBjYXNlIDB4MDBDQToKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweENBICYgMHhmZikpOyAgICAv KiBFIFdJVEggQ0lSQ1VNRkxFWCAqLworICAgICAgY2FzZSAweDAwQ0I6CisgICAgICAgIHJldHVy bigoQ0hBUikoMHhDQiAmIDB4ZmYpKTsgICAgLyogRSBXSVRIIERJQUVSRVNJUyAqLworICAgICAg Y2FzZSAweDAzMDA6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhDQyAmIDB4ZmYpKTsgICAgLyog Q09NQklOSU5HIEdSQVZFIEFDQ0VOVCAqLworICAgICAgY2FzZSAweDAwQ0Q6CisgICAgICAgIHJl dHVybigoQ0hBUikoMHhDRCAmIDB4ZmYpKTsgICAgLyogSSBXSVRIIEFDVVRFICovCisgICAgICBj YXNlIDB4MDBDRToKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweENFICYgMHhmZikpOyAgICAvKiBJ IFdJVEggQ0lSQ1VNRkxFWCAqLworICAgICAgY2FzZSAweDAwQ0Y6CisgICAgICAgIHJldHVybigo Q0hBUikoMHhDRiAmIDB4ZmYpKTsgICAgLyogSSBXSVRIIERJQUVSRVNJUyAqLworICAgICAgY2Fz ZSAweDAxMTA6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhEMCAmIDB4ZmYpKTsgICAgLyogRCBX SVRIIFNUUk9LRSAqLworICAgICAgY2FzZSAweDAwRDE6CisgICAgICAgIHJldHVybigoQ0hBUiko MHhEMSAmIDB4ZmYpKTsgICAgLyogTEFUSU4gQ0FQSVRBTCBMRVRURVIgTiBXSVRIIFRJTERFICov CisgICAgICBjYXNlIDB4MDMwOToKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEQyICYgMHhmZikp OyAgICAvKiBDT01CSU5JTkcgSE9PSyBBQk9WRSAqLworICAgICAgY2FzZSAweDAwRDM6CisgICAg ICAgIHJldHVybigoQ0hBUikoMHhEMyAmIDB4ZmYpKTsgICAgLyogTEFUSU4gQ0FQSVRBTCBMRVRU RVIgTyBXSVRIIEFDVVRFICovCisgICAgICBjYXNlIDB4MDBENDoKKyAgICAgICAgcmV0dXJuKChD SEFSKSgweEQ0ICYgMHhmZikpOyAgICAvKiBPIFdJVEggQ0lSQ1VNRkxFWCAqLworICAgICAgY2Fz ZSAweDAxQTA6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhENSAmIDB4ZmYpKTsgICAgLyogTEFU SU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIEhPUk4gKi8KKyAgICAgIGNhc2UgMHgwMEQ2OgorICAg ICAgICByZXR1cm4oKENIQVIpKDB4RDYgJiAweGZmKSk7ICAgIC8qIE8gV0lUSCBESUFFUkVTSVMg Ki8KKyAgICAgIGNhc2UgMHgwMEQ3OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4RDcgJiAweGZm KSk7ICAgIC8qIE1VTFRJUExJQ0FUSU9OIFNJR04gKi8KKyAgICAgIGNhc2UgMHgwMEQ4OgorICAg ICAgICByZXR1cm4oKENIQVIpKDB4RDggJiAweGZmKSk7ICAgIC8qIE8gV0lUSCBTVFJPS0UgKi8K KyAgICAgIGNhc2UgMHgwMEQ5OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4RDkgJiAweGZmKSk7 ICAgIC8qIExBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBHUkFWRSAqLworICAgICAgY2FzZSAw eDAwREE6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhEQSAmIDB4ZmYpKTsgICAgLyogTEFUSU4g Q0FQSVRBTCBMRVRURVIgVSBXSVRIIEFDVVRFICovCisgICAgICBjYXNlIDB4MDBEQjoKKyAgICAg ICAgcmV0dXJuKChDSEFSKSgweERCICYgMHhmZikpOyAgICAvKiBVIFdJVEggQ0lSQ1VNRkxFWCAq LworICAgICAgY2FzZSAweDAwREM6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhEQyAmIDB4ZmYp KTsgICAgLyogVSBXSVRIIERJQUVSRVNJUyAqLworICAgICAgY2FzZSAweDAxQUY6CisgICAgICAg IHJldHVybigoQ0hBUikoMHhERCAmIDB4ZmYpKTsgICAgLyogTEFUSU4gQ0FQSVRBTCBMRVRURVIg VSBXSVRIIEhPUk4gKi8KKyAgICAgIGNhc2UgMHgwMzAzOgorICAgICAgICByZXR1cm4oKENIQVIp KDB4REUgJiAweGZmKSk7ICAgIC8qIENPTUJJTklORyBUSUxERSAqLworICAgICAgY2FzZSAweDAw REY6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhERiAmIDB4ZmYpKTsgICAgLyogTEFUSU4gU01B TEwgTEVUVEVSIFNIQVJQIFMgKi8KKyAgICAgIGNhc2UgMHgwMEUwOgorICAgICAgICByZXR1cm4o KENIQVIpKDB4RTAgJiAweGZmKSk7ICAgIC8qIExBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggR1JB VkUgKi8KKyAgICAgIGNhc2UgMHgwMEUxOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4RTEgJiAw eGZmKSk7ICAgIC8qIExBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggQUNVVEUgKi8KKyAgICAgIGNh c2UgMHgwMEUyOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4RTIgJiAweGZmKSk7ICAgIC8qIFNN QUxMIEEgV0lUSCBDSVJDVU1GTEVYICovCisgICAgICBjYXNlIDB4MDEwMzoKKyAgICAgICAgcmV0 dXJuKChDSEFSKSgweEUzICYgMHhmZikpOyAgICAvKiBMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRI IEJSRVZFICovCisgICAgICBjYXNlIDB4MDBFNDoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEU0 ICYgMHhmZikpOyAgICAvKiBTTUFMTCBBIFdJVEggRElBRVJFU0lTICovCisgICAgICBjYXNlIDB4 MDBFNToKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEU1ICYgMHhmZikpOyAgICAvKiBTTUFMTCBB IFdJVEggUklORyBBQk9WRSAqLworICAgICAgY2FzZSAweDAwRTY6CisgICAgICAgIHJldHVybigo Q0hBUikoMHhFNiAmIDB4ZmYpKTsgICAgLyogTEFUSU4gU01BTEwgTEVUVEVSIEFFICovCisgICAg ICBjYXNlIDB4MDBFNzoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEU3ICYgMHhmZikpOyAgICAv KiBMQVRJTiBTTUFMTCBMRVRURVIgQyBXSVRIIENFRElMTEEgKi8KKyAgICAgIGNhc2UgMHgwMEU4 OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4RTggJiAweGZmKSk7ICAgIC8qIExBVElOIFNNQUxM IExFVFRFUiBFIFdJVEggR1JBVkUgKi8KKyAgICAgIGNhc2UgMHgwMEU5OgorICAgICAgICByZXR1 cm4oKENIQVIpKDB4RTkgJiAweGZmKSk7ICAgIC8qIExBVElOIFNNQUxMIExFVFRFUiBFIFdJVEgg QUNVVEUgKi8KKyAgICAgIGNhc2UgMHgwMEVBOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4RUEg JiAweGZmKSk7ICAgIC8qIFNNQUxMIEUgV0lUSCBDSVJDVU1GTEVYICovCisgICAgICBjYXNlIDB4 MDBFQjoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEVCICYgMHhmZikpOyAgICAvKiBTTUFMTCBF IFdJVEggRElBRVJFU0lTICovCisgICAgICBjYXNlIDB4MDMwMToKKyAgICAgICAgcmV0dXJuKChD SEFSKSgweEVDICYgMHhmZikpOyAgICAvKiBDT01CSU5JTkcgQUNVVEUgQUNDRU5UICovCisgICAg ICBjYXNlIDB4MDBFRDoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEVEICYgMHhmZikpOyAgICAv KiBMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIEFDVVRFICovCisgICAgICBjYXNlIDB4MDBFRToK KyAgICAgICAgcmV0dXJuKChDSEFSKSgweEVFICYgMHhmZikpOyAgICAvKiBTTUFMTCBJIFdJVEgg Q0lSQ1VNRkxFWCAqLworICAgICAgY2FzZSAweDAwRUY6CisgICAgICAgIHJldHVybigoQ0hBUiko MHhFRiAmIDB4ZmYpKTsgICAgLyogU01BTEwgSSBXSVRIIERJQUVSRVNJUyAqLworICAgICAgY2Fz ZSAweDAxMTE6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhGMCAmIDB4ZmYpKTsgICAgLyogTEFU SU4gU01BTEwgTEVUVEVSIEQgV0lUSCBTVFJPS0UgKi8KKyAgICAgIGNhc2UgMHgwMEYxOgorICAg ICAgICByZXR1cm4oKENIQVIpKDB4RjEgJiAweGZmKSk7ICAgIC8qIExBVElOIFNNQUxMIExFVFRF UiBOIFdJVEggVElMREUgKi8KKyAgICAgIGNhc2UgMHgwMzIzOgorICAgICAgICByZXR1cm4oKENI QVIpKDB4RjIgJiAweGZmKSk7ICAgIC8qIENPTUJJTklORyBET1QgQkVMT1cgKi8KKyAgICAgIGNh c2UgMHgwMEYzOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4RjMgJiAweGZmKSk7ICAgIC8qIExB VElOIFNNQUxMIExFVFRFUiBPIFdJVEggQUNVVEUgKi8KKyAgICAgIGNhc2UgMHgwMEY0OgorICAg ICAgICByZXR1cm4oKENIQVIpKDB4RjQgJiAweGZmKSk7ICAgIC8qIFNNQUxMIE8gV0lUSCBDSVJD VU1GTEVYICovCisgICAgICBjYXNlIDB4MDFBMToKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEY1 ICYgMHhmZikpOyAgICAvKiBMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIEhPUk4gKi8KKyAgICAg IGNhc2UgMHgwMEY2OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4RjYgJiAweGZmKSk7ICAgIC8q IFNNQUxMIE8gV0lUSCBESUFFUkVTSVMgKi8KKyAgICAgIGNhc2UgMHgwMEY3OgorICAgICAgICBy ZXR1cm4oKENIQVIpKDB4RjcgJiAweGZmKSk7ICAgIC8qIERJVklTSU9OIFNJR04gKi8KKyAgICAg IGNhc2UgMHgwMEY4OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4RjggJiAweGZmKSk7ICAgIC8q IExBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggU1RST0tFICovCisgICAgICBjYXNlIDB4MDBGOToK KyAgICAgICAgcmV0dXJuKChDSEFSKSgweEY5ICYgMHhmZikpOyAgICAvKiBMQVRJTiBTTUFMTCBM RVRURVIgVSBXSVRIIEdSQVZFICovCisgICAgICBjYXNlIDB4MDBGQToKKyAgICAgICAgcmV0dXJu KChDSEFSKSgweEZBICYgMHhmZikpOyAgICAvKiBMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIEFD VVRFICovCisgICAgICBjYXNlIDB4MDBGQjoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEZCICYg MHhmZikpOyAgICAvKiBTTUFMTCBVIFdJVEggQ0lSQ1VNRkxFWCAqLworICAgICAgY2FzZSAweDAw RkM6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhGQyAmIDB4ZmYpKTsgICAgLyogU01BTEwgVSBX SVRIIERJQUVSRVNJUyAqLworICAgICAgY2FzZSAweDAxQjA6CisgICAgICAgIHJldHVybigoQ0hB UikoMHhGRCAmIDB4ZmYpKTsgICAgLyogTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBIT1JOICov CisgICAgICBjYXNlIDB4MjBBQjoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEZFICYgMHhmZikp OyAgICAvKiBET05HIFNJR04gKi8KKyAgICAgIGNhc2UgMHgwMEZGOgorICAgICAgICByZXR1cm4o KENIQVIpKDB4RkYgJiAweGZmKSk7ICAgIC8qIFNNQUxMIFkgV0lUSCBESUFFUkVTSVMgKi8KKyAg ICBkZWZhdWx0OiByZXR1cm4oMHgwMDNmKTsKKyAgfQorfQorCitpbnQgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogQ29kZSBQYWdlIDAzNyAtIEVCQ0RJQyAoVS5TLikgKi8K KyNpZmRlZiBDS19BTlNJQwordHhfY3AzNyhVU0hPUlQgYykKKyNlbHNlCit0eF9jcDM3KGMpIFVT SE9SVCBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgc3dpdGNoIChjKSB7CisgICAg ICBjYXNlIDB4MDAwMDoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweDAwICYgMHhmZikpOyAgICAv KiBOVUxMICovCisgICAgICBjYXNlIDB4MDAwMToKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweDAx ICYgMHhmZikpOyAgICAvKiBTVEFSVCBPRiBIRUFESU5HICovCisgICAgICBjYXNlIDB4MDAwMjoK KyAgICAgICAgcmV0dXJuKChDSEFSKSgweDAyICYgMHhmZikpOyAgICAvKiBTVEFSVCBPRiBURVhU ICovCisgICAgICBjYXNlIDB4MDAwMzoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweDAzICYgMHhm ZikpOyAgICAvKiBFTkQgT0YgVEVYVCAqLworICAgICAgY2FzZSAweDAwOUM6CisgICAgICAgIHJl dHVybigoQ0hBUikoMHgwNCAmIDB4ZmYpKTsgICAgLyogQ09OVFJPTCAqLworICAgICAgY2FzZSAw eDAwMDk6CisgICAgICAgIHJldHVybigoQ0hBUikoMHgwNSAmIDB4ZmYpKTsgICAgLyogSE9SSVpP TlRBTCBUQUJVTEFUSU9OICovCisgICAgICBjYXNlIDB4MDA4NjoKKyAgICAgICAgcmV0dXJuKChD SEFSKSgweDA2ICYgMHhmZikpOyAgICAvKiBDT05UUk9MICovCisgICAgICBjYXNlIDB4MDA3RjoK KyAgICAgICAgcmV0dXJuKChDSEFSKSgweDA3ICYgMHhmZikpOyAgICAvKiBERUxFVEUgKi8KKyAg ICAgIGNhc2UgMHgwMDk3OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4MDggJiAweGZmKSk7ICAg IC8qIENPTlRST0wgKi8KKyAgICAgIGNhc2UgMHgwMDhEOgorICAgICAgICByZXR1cm4oKENIQVIp KDB4MDkgJiAweGZmKSk7ICAgIC8qIENPTlRST0wgKi8KKyAgICAgIGNhc2UgMHgwMDhFOgorICAg ICAgICByZXR1cm4oKENIQVIpKDB4MEEgJiAweGZmKSk7ICAgIC8qIENPTlRST0wgKi8KKyAgICAg IGNhc2UgMHgwMDBCOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4MEIgJiAweGZmKSk7ICAgIC8q IFZFUlRJQ0FMIFRBQlVMQVRJT04gKi8KKyAgICAgIGNhc2UgMHgwMDBDOgorICAgICAgICByZXR1 cm4oKENIQVIpKDB4MEMgJiAweGZmKSk7ICAgIC8qIEZPUk0gRkVFRCAqLworICAgICAgY2FzZSAw eDAwMEQ6CisgICAgICAgIHJldHVybigoQ0hBUikoMHgwRCAmIDB4ZmYpKTsgICAgLyogQ0FSUklB R0UgUkVUVVJOICovCisgICAgICBjYXNlIDB4MDAwRToKKyAgICAgICAgcmV0dXJuKChDSEFSKSgw eDBFICYgMHhmZikpOyAgICAvKiBTSElGVCBPVVQgKi8KKyAgICAgIGNhc2UgMHgwMDBGOgorICAg ICAgICByZXR1cm4oKENIQVIpKDB4MEYgJiAweGZmKSk7ICAgIC8qIFNISUZUIElOICovCisgICAg ICBjYXNlIDB4MDAxMDoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweDEwICYgMHhmZikpOyAgICAv KiBEQVRBIExJTksgRVNDQVBFICovCisgICAgICBjYXNlIDB4MDAxMToKKyAgICAgICAgcmV0dXJu KChDSEFSKSgweDExICYgMHhmZikpOyAgICAvKiBERVZJQ0UgQ09OVFJPTCBPTkUgKi8KKyAgICAg IGNhc2UgMHgwMDEyOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4MTIgJiAweGZmKSk7ICAgIC8q IERFVklDRSBDT05UUk9MIFRXTyAqLworICAgICAgY2FzZSAweDAwMTM6CisgICAgICAgIHJldHVy bigoQ0hBUikoMHgxMyAmIDB4ZmYpKTsgICAgLyogREVWSUNFIENPTlRST0wgVEhSRUUgKi8KKyAg ICAgIGNhc2UgMHgwMDlEOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4MTQgJiAweGZmKSk7ICAg IC8qIENPTlRST0wgKi8KKyAgICAgIGNhc2UgMHgwMDg1OgorICAgICAgICByZXR1cm4oKENIQVIp KDB4MTUgJiAweGZmKSk7ICAgIC8qIENPTlRST0wgKi8KKyAgICAgIGNhc2UgMHgwMDA4OgorICAg ICAgICByZXR1cm4oKENIQVIpKDB4MTYgJiAweGZmKSk7ICAgIC8qIEJBQ0tTUEFDRSAqLworICAg ICAgY2FzZSAweDAwODc6CisgICAgICAgIHJldHVybigoQ0hBUikoMHgxNyAmIDB4ZmYpKTsgICAg LyogQ09OVFJPTCAqLworICAgICAgY2FzZSAweDAwMTg6CisgICAgICAgIHJldHVybigoQ0hBUiko MHgxOCAmIDB4ZmYpKTsgICAgLyogQ0FOQ0VMICovCisgICAgICBjYXNlIDB4MDAxOToKKyAgICAg ICAgcmV0dXJuKChDSEFSKSgweDE5ICYgMHhmZikpOyAgICAvKiBFTkQgT0YgTUVESVVNICovCisg ICAgICBjYXNlIDB4MDA5MjoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweDFBICYgMHhmZikpOyAg ICAvKiBDT05UUk9MICovCisgICAgICBjYXNlIDB4MDA4RjoKKyAgICAgICAgcmV0dXJuKChDSEFS KSgweDFCICYgMHhmZikpOyAgICAvKiBDT05UUk9MICovCisgICAgICBjYXNlIDB4MDAxQzoKKyAg ICAgICAgcmV0dXJuKChDSEFSKSgweDFDICYgMHhmZikpOyAgICAvKiBGSUxFIFNFUEFSQVRPUiAq LworICAgICAgY2FzZSAweDAwMUQ6CisgICAgICAgIHJldHVybigoQ0hBUikoMHgxRCAmIDB4ZmYp KTsgICAgLyogR1JPVVAgU0VQQVJBVE9SICovCisgICAgICBjYXNlIDB4MDAxRToKKyAgICAgICAg cmV0dXJuKChDSEFSKSgweDFFICYgMHhmZikpOyAgICAvKiBSRUNPUkQgU0VQQVJBVE9SICovCisg ICAgICBjYXNlIDB4MDAxRjoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweDFGICYgMHhmZikpOyAg ICAvKiBVTklUIFNFUEFSQVRPUiAqLworICAgICAgY2FzZSAweDAwODA6CisgICAgICAgIHJldHVy bigoQ0hBUikoMHgyMCAmIDB4ZmYpKTsgICAgLyogQ09OVFJPTCAqLworICAgICAgY2FzZSAweDAw ODE6CisgICAgICAgIHJldHVybigoQ0hBUikoMHgyMSAmIDB4ZmYpKTsgICAgLyogQ09OVFJPTCAq LworICAgICAgY2FzZSAweDAwODI6CisgICAgICAgIHJldHVybigoQ0hBUikoMHgyMiAmIDB4ZmYp KTsgICAgLyogQ09OVFJPTCAqLworICAgICAgY2FzZSAweDAwODM6CisgICAgICAgIHJldHVybigo Q0hBUikoMHgyMyAmIDB4ZmYpKTsgICAgLyogQ09OVFJPTCAqLworICAgICAgY2FzZSAweDAwODQ6 CisgICAgICAgIHJldHVybigoQ0hBUikoMHgyNCAmIDB4ZmYpKTsgICAgLyogQ09OVFJPTCAqLwor ICAgICAgY2FzZSAweDAwMEE6CisgICAgICAgIHJldHVybigoQ0hBUikoMHgyNSAmIDB4ZmYpKTsg ICAgLyogTElORSBGRUVEICovCisgICAgICBjYXNlIDB4MDAxNzoKKyAgICAgICAgcmV0dXJuKChD SEFSKSgweDI2ICYgMHhmZikpOyAgICAvKiBFTkQgT0YgVFJBTlNNSVNTSU9OIEJMT0NLICovCisg ICAgICBjYXNlIDB4MDAxQjoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweDI3ICYgMHhmZikpOyAg ICAvKiBFU0NBUEUgKi8KKyAgICAgIGNhc2UgMHgwMDg4OgorICAgICAgICByZXR1cm4oKENIQVIp KDB4MjggJiAweGZmKSk7ICAgIC8qIENPTlRST0wgKi8KKyAgICAgIGNhc2UgMHgwMDg5OgorICAg ICAgICByZXR1cm4oKENIQVIpKDB4MjkgJiAweGZmKSk7ICAgIC8qIENPTlRST0wgKi8KKyAgICAg IGNhc2UgMHgwMDhBOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4MkEgJiAweGZmKSk7ICAgIC8q IENPTlRST0wgKi8KKyAgICAgIGNhc2UgMHgwMDhCOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4 MkIgJiAweGZmKSk7ICAgIC8qIENPTlRST0wgKi8KKyAgICAgIGNhc2UgMHgwMDhDOgorICAgICAg ICByZXR1cm4oKENIQVIpKDB4MkMgJiAweGZmKSk7ICAgIC8qIENPTlRST0wgKi8KKyAgICAgIGNh c2UgMHgwMDA1OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4MkQgJiAweGZmKSk7ICAgIC8qIEVO UVVJUlkgKi8KKyAgICAgIGNhc2UgMHgwMDA2OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4MkUg JiAweGZmKSk7ICAgIC8qIEFDS05PV0xFREdFICovCisgICAgICBjYXNlIDB4MDAwNzoKKyAgICAg ICAgcmV0dXJuKChDSEFSKSgweDJGICYgMHhmZikpOyAgICAvKiBCRUxMICovCisgICAgICBjYXNl IDB4MDA5MDoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweDMwICYgMHhmZikpOyAgICAvKiBDT05U Uk9MICovCisgICAgICBjYXNlIDB4MDA5MToKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweDMxICYg MHhmZikpOyAgICAvKiBDT05UUk9MICovCisgICAgICBjYXNlIDB4MDAxNjoKKyAgICAgICAgcmV0 dXJuKChDSEFSKSgweDMyICYgMHhmZikpOyAgICAvKiBTWU5DSFJPTk9VUyBJRExFICovCisgICAg ICBjYXNlIDB4MDA5MzoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweDMzICYgMHhmZikpOyAgICAv KiBDT05UUk9MICovCisgICAgICBjYXNlIDB4MDA5NDoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgw eDM0ICYgMHhmZikpOyAgICAvKiBDT05UUk9MICovCisgICAgICBjYXNlIDB4MDA5NToKKyAgICAg ICAgcmV0dXJuKChDSEFSKSgweDM1ICYgMHhmZikpOyAgICAvKiBDT05UUk9MICovCisgICAgICBj YXNlIDB4MDA5NjoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweDM2ICYgMHhmZikpOyAgICAvKiBD T05UUk9MICovCisgICAgICBjYXNlIDB4MDAwNDoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweDM3 ICYgMHhmZikpOyAgICAvKiBFTkQgT0YgVFJBTlNNSVNTSU9OICovCisgICAgICBjYXNlIDB4MDA5 ODoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweDM4ICYgMHhmZikpOyAgICAvKiBDT05UUk9MICov CisgICAgICBjYXNlIDB4MDA5OToKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweDM5ICYgMHhmZikp OyAgICAvKiBDT05UUk9MICovCisgICAgICBjYXNlIDB4MDA5QToKKyAgICAgICAgcmV0dXJuKChD SEFSKSgweDNBICYgMHhmZikpOyAgICAvKiBDT05UUk9MICovCisgICAgICBjYXNlIDB4MDA5QjoK KyAgICAgICAgcmV0dXJuKChDSEFSKSgweDNCICYgMHhmZikpOyAgICAvKiBDT05UUk9MICovCisg ICAgICBjYXNlIDB4MDAxNDoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweDNDICYgMHhmZikpOyAg ICAvKiBERVZJQ0UgQ09OVFJPTCBGT1VSICovCisgICAgICBjYXNlIDB4MDAxNToKKyAgICAgICAg cmV0dXJuKChDSEFSKSgweDNEICYgMHhmZikpOyAgICAvKiBORUdBVElWRSBBQ0tOT1dMRURHRSAq LworICAgICAgY2FzZSAweDAwOUU6CisgICAgICAgIHJldHVybigoQ0hBUikoMHgzRSAmIDB4ZmYp KTsgICAgLyogQ09OVFJPTCAqLworICAgICAgY2FzZSAweDAwMUE6CisgICAgICAgIHJldHVybigo Q0hBUikoMHgzRiAmIDB4ZmYpKTsgICAgLyogU1VCU1RJVFVURSAqLworICAgICAgY2FzZSAweDAw MjA6CisgICAgICAgIHJldHVybigoQ0hBUikoMHg0MCAmIDB4ZmYpKTsgICAgLyogU1BBQ0UgKi8K KyAgICAgIGNhc2UgMHgwMEEwOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4NDEgJiAweGZmKSk7 ICAgIC8qIE5PLUJSRUFLIFNQQUNFICovCisgICAgICBjYXNlIDB4MDBFMjoKKyAgICAgICAgcmV0 dXJuKChDSEFSKSgweDQyICYgMHhmZikpOyAgICAvKiBTTUFMTCBMRVRURVIgQSBXSVRIIENJUkNV TUZMRVggKi8KKyAgICAgIGNhc2UgMHgwMEU0OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4NDMg JiAweGZmKSk7ICAgIC8qIFNNQUxMIExFVFRFUiBBIFdJVEggRElBRVJFU0lTICovCisgICAgICBj YXNlIDB4MDBFMDoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweDQ0ICYgMHhmZikpOyAgICAvKiBM QVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIEdSQVZFICovCisgICAgICBjYXNlIDB4MDBFMToKKyAg ICAgICAgcmV0dXJuKChDSEFSKSgweDQ1ICYgMHhmZikpOyAgICAvKiBMQVRJTiBTTUFMTCBMRVRU RVIgQSBXSVRIIEFDVVRFICovCisgICAgICBjYXNlIDB4MDBFMzoKKyAgICAgICAgcmV0dXJuKChD SEFSKSgweDQ2ICYgMHhmZikpOyAgICAvKiBMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIFRJTERF ICovCisgICAgICBjYXNlIDB4MDBFNToKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweDQ3ICYgMHhm ZikpOyAgICAvKiBTTUFMTCBMRVRURVIgQSBXSVRIIFJJTkcgQUJPVkUgKi8KKyAgICAgIGNhc2Ug MHgwMEU3OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4NDggJiAweGZmKSk7ICAgIC8qIExBVElO IFNNQUxMIExFVFRFUiBDIFdJVEggQ0VESUxMQSAqLworICAgICAgY2FzZSAweDAwRjE6CisgICAg ICAgIHJldHVybigoQ0hBUikoMHg0OSAmIDB4ZmYpKTsgICAgLyogTEFUSU4gU01BTEwgTEVUVEVS IE4gV0lUSCBUSUxERSAqLworICAgICAgY2FzZSAweDAwQTI6CisgICAgICAgIHJldHVybigoQ0hB UikoMHg0QSAmIDB4ZmYpKTsgICAgLyogQ0VOVCBTSUdOICovCisgICAgICBjYXNlIDB4MDAyRToK KyAgICAgICAgcmV0dXJuKChDSEFSKSgweDRCICYgMHhmZikpOyAgICAvKiBGVUxMIFNUT1AgKi8K KyAgICAgIGNhc2UgMHgwMDNDOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4NEMgJiAweGZmKSk7 ICAgIC8qIExFU1MtVEhBTiBTSUdOICovCisgICAgICBjYXNlIDB4MDAyODoKKyAgICAgICAgcmV0 dXJuKChDSEFSKSgweDREICYgMHhmZikpOyAgICAvKiBMRUZUIFBBUkVOVEhFU0lTICovCisgICAg ICBjYXNlIDB4MDAyQjoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweDRFICYgMHhmZikpOyAgICAv KiBQTFVTIFNJR04gKi8KKyAgICAgIGNhc2UgMHgwMDdDOgorICAgICAgICByZXR1cm4oKENIQVIp KDB4NEYgJiAweGZmKSk7ICAgIC8qIFZFUlRJQ0FMIExJTkUgKi8KKyAgICAgIGNhc2UgMHgwMDI2 OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4NTAgJiAweGZmKSk7ICAgIC8qIEFNUEVSU0FORCAq LworICAgICAgY2FzZSAweDAwRTk6CisgICAgICAgIHJldHVybigoQ0hBUikoMHg1MSAmIDB4ZmYp KTsgICAgLyogU01BTEwgTEVUVEVSIEUgV0lUSCBBQ1VURSAqLworICAgICAgY2FzZSAweDAwRUE6 CisgICAgICAgIHJldHVybigoQ0hBUikoMHg1MiAmIDB4ZmYpKTsgICAgLyogU01BTEwgTEVUVEVS IEUgV0lUSCBDSVJDVU1GTEVYICovCisgICAgICBjYXNlIDB4MDBFQjoKKyAgICAgICAgcmV0dXJu KChDSEFSKSgweDUzICYgMHhmZikpOyAgICAvKiBTTUFMTCBMRVRURVIgRSBXSVRIIERJQUVSRVNJ UyAqLworICAgICAgY2FzZSAweDAwRTg6CisgICAgICAgIHJldHVybigoQ0hBUikoMHg1NCAmIDB4 ZmYpKTsgICAgLyogTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBHUkFWRSAqLworICAgICAgY2Fz ZSAweDAwRUQ6CisgICAgICAgIHJldHVybigoQ0hBUikoMHg1NSAmIDB4ZmYpKTsgICAgLyogTEFU SU4gU01BTEwgTEVUVEVSIEkgV0lUSCBBQ1VURSAqLworICAgICAgY2FzZSAweDAwRUU6CisgICAg ICAgIHJldHVybigoQ0hBUikoMHg1NiAmIDB4ZmYpKTsgICAgLyogU01BTEwgTEVUVEVSIEkgV0lU SCBDSVJDVU1GTEVYICovCisgICAgICBjYXNlIDB4MDBFRjoKKyAgICAgICAgcmV0dXJuKChDSEFS KSgweDU3ICYgMHhmZikpOyAgICAvKiBTTUFMTCBMRVRURVIgSSBXSVRIIERJQUVSRVNJUyAqLwor ICAgICAgY2FzZSAweDAwRUM6CisgICAgICAgIHJldHVybigoQ0hBUikoMHg1OCAmIDB4ZmYpKTsg ICAgLyogTEFUSU4gU01BTEwgTEVUVEVSIEkgV0lUSCBHUkFWRSAqLworICAgICAgY2FzZSAweDAw REY6CisgICAgICAgIHJldHVybigoQ0hBUikoMHg1OSAmIDB4ZmYpKTsgICAgLyogU01BTEwgTEVU VEVSIFNIQVJQIFMgKEdFUk1BTikgKi8KKyAgICAgIGNhc2UgMHgwMDIxOgorICAgICAgICByZXR1 cm4oKENIQVIpKDB4NUEgJiAweGZmKSk7ICAgIC8qIEVYQ0xBTUFUSU9OIE1BUksgKi8KKyAgICAg IGNhc2UgMHgwMDI0OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4NUIgJiAweGZmKSk7ICAgIC8q IERPTExBUiBTSUdOICovCisgICAgICBjYXNlIDB4MDAyQToKKyAgICAgICAgcmV0dXJuKChDSEFS KSgweDVDICYgMHhmZikpOyAgICAvKiBBU1RFUklTSyAqLworICAgICAgY2FzZSAweDAwMjk6Cisg ICAgICAgIHJldHVybigoQ0hBUikoMHg1RCAmIDB4ZmYpKTsgICAgLyogUklHSFQgUEFSRU5USEVT SVMgKi8KKyAgICAgIGNhc2UgMHgwMDNCOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4NUUgJiAw eGZmKSk7ICAgIC8qIFNFTUlDT0xPTiAqLworICAgICAgY2FzZSAweDAwQUM6CisgICAgICAgIHJl dHVybigoQ0hBUikoMHg1RiAmIDB4ZmYpKTsgICAgLyogTk9UIFNJR04gKi8KKyAgICAgIGNhc2Ug MHgwMDJEOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4NjAgJiAweGZmKSk7ICAgIC8qIEhZUEhF Ti1NSU5VUyAqLworICAgICAgY2FzZSAweDAwMkY6CisgICAgICAgIHJldHVybigoQ0hBUikoMHg2 MSAmIDB4ZmYpKTsgICAgLyogU09MSURVUyAqLworICAgICAgY2FzZSAweDAwQzI6CisgICAgICAg IHJldHVybigoQ0hBUikoMHg2MiAmIDB4ZmYpKTsgICAgLyogQ0FQSVRBTCBMRVRURVIgQSBXSVRI IENJUkNVTUZMRVggKi8KKyAgICAgIGNhc2UgMHgwMEM0OgorICAgICAgICByZXR1cm4oKENIQVIp KDB4NjMgJiAweGZmKSk7ICAgIC8qIENBUElUQUwgTEVUVEVSIEEgV0lUSCBESUFFUkVTSVMgKi8K KyAgICAgIGNhc2UgMHgwMEMwOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4NjQgJiAweGZmKSk7 ICAgIC8qIExBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBHUkFWRSAqLworICAgICAgY2FzZSAw eDAwQzE6CisgICAgICAgIHJldHVybigoQ0hBUikoMHg2NSAmIDB4ZmYpKTsgICAgLyogTEFUSU4g Q0FQSVRBTCBMRVRURVIgQSBXSVRIIEFDVVRFICovCisgICAgICBjYXNlIDB4MDBDMzoKKyAgICAg ICAgcmV0dXJuKChDSEFSKSgweDY2ICYgMHhmZikpOyAgICAvKiBMQVRJTiBDQVBJVEFMIExFVFRF UiBBIFdJVEggVElMREUgKi8KKyAgICAgIGNhc2UgMHgwMEM1OgorICAgICAgICByZXR1cm4oKENI QVIpKDB4NjcgJiAweGZmKSk7ICAgIC8qIENBUElUQUwgTEVUVEVSIEEgV0lUSCBSSU5HIEFCT1ZF ICovCisgICAgICBjYXNlIDB4MDBDNzoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweDY4ICYgMHhm ZikpOyAgICAvKiBDQVBJVEFMIExFVFRFUiBDIFdJVEggQ0VESUxMQSAqLworICAgICAgY2FzZSAw eDAwRDE6CisgICAgICAgIHJldHVybigoQ0hBUikoMHg2OSAmIDB4ZmYpKTsgICAgLyogTEFUSU4g Q0FQSVRBTCBMRVRURVIgTiBXSVRIIFRJTERFICovCisgICAgICBjYXNlIDB4MDBBNjoKKyAgICAg ICAgcmV0dXJuKChDSEFSKSgweDZBICYgMHhmZikpOyAgICAvKiBCUk9LRU4gQkFSICovCisgICAg ICBjYXNlIDB4MDAyQzoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweDZCICYgMHhmZikpOyAgICAv KiBDT01NQSAqLworICAgICAgY2FzZSAweDAwMjU6CisgICAgICAgIHJldHVybigoQ0hBUikoMHg2 QyAmIDB4ZmYpKTsgICAgLyogUEVSQ0VOVCBTSUdOICovCisgICAgICBjYXNlIDB4MDA1RjoKKyAg ICAgICAgcmV0dXJuKChDSEFSKSgweDZEICYgMHhmZikpOyAgICAvKiBMT1cgTElORSAqLworICAg ICAgY2FzZSAweDAwM0U6CisgICAgICAgIHJldHVybigoQ0hBUikoMHg2RSAmIDB4ZmYpKTsgICAg LyogR1JFQVRFUi1USEFOIFNJR04gKi8KKyAgICAgIGNhc2UgMHgwMDNGOgorICAgICAgICByZXR1 cm4oKENIQVIpKDB4NkYgJiAweGZmKSk7ICAgIC8qIFFVRVNUSU9OIE1BUksgKi8KKyAgICAgIGNh c2UgMHgwMEY4OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4NzAgJiAweGZmKSk7ICAgIC8qIExB VElOIFNNQUxMIExFVFRFUiBPIFdJVEggU1RST0tFICovCisgICAgICBjYXNlIDB4MDBDOToKKyAg ICAgICAgcmV0dXJuKChDSEFSKSgweDcxICYgMHhmZikpOyAgICAvKiBMQVRJTiBDQVBJVEFMIExF VFRFUiBFIFdJVEggQUNVVEUgKi8KKyAgICAgIGNhc2UgMHgwMENBOgorICAgICAgICAvKiBMQVRJ TiBDQVBJVEFMIExFVFRFUiBFIFdJVEggQ0lSQ1VNRkxFWCAqLworICAgICAgICByZXR1cm4oKENI QVIpKDB4NzIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBDQjoKKyAgICAgICAgLyogTEFUSU4g Q0FQSVRBTCBMRVRURVIgRSBXSVRIIERJQUVSRVNJUyAqLworICAgICAgICByZXR1cm4oKENIQVIp KDB4NzMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBDODoKKyAgICAgICAgcmV0dXJuKChDSEFS KSgweDc0ICYgMHhmZikpOyAgICAvKiBMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggR1JBVkUg Ki8KKyAgICAgIGNhc2UgMHgwMENEOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4NzUgJiAweGZm KSk7ICAgIC8qIExBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBBQ1VURSAqLworICAgICAgY2Fz ZSAweDAwQ0U6CisgICAgICAgIC8qIExBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBDSVJDVU1G TEVYICovCisgICAgICAgIHJldHVybigoQ0hBUikoMHg3NiAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgwMENGOgorICAgICAgICAvKiBMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggRElBRVJFU0lT ICovCisgICAgICAgIHJldHVybigoQ0hBUikoMHg3NyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgw MENDOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4NzggJiAweGZmKSk7ICAgIC8qIExBVElOIENB UElUQUwgTEVUVEVSIEkgV0lUSCBHUkFWRSAqLworICAgICAgY2FzZSAweDAwNjA6CisgICAgICAg IHJldHVybigoQ0hBUikoMHg3OSAmIDB4ZmYpKTsgICAgLyogR1JBVkUgQUNDRU5UICovCisgICAg ICBjYXNlIDB4MDAzQToKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweDdBICYgMHhmZikpOyAgICAv KiBDT0xPTiAqLworICAgICAgY2FzZSAweDAwMjM6CisgICAgICAgIHJldHVybigoQ0hBUikoMHg3 QiAmIDB4ZmYpKTsgICAgLyogTlVNQkVSIFNJR04gKi8KKyAgICAgIGNhc2UgMHgwMDQwOgorICAg ICAgICByZXR1cm4oKENIQVIpKDB4N0MgJiAweGZmKSk7ICAgIC8qIENPTU1FUkNJQUwgQVQgKi8K KyAgICAgIGNhc2UgMHgwMDI3OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4N0QgJiAweGZmKSk7 ICAgIC8qIEFQT1NUUk9QSEUgKi8KKyAgICAgIGNhc2UgMHgwMDNEOgorICAgICAgICByZXR1cm4o KENIQVIpKDB4N0UgJiAweGZmKSk7ICAgIC8qIEVRVUFMUyBTSUdOICovCisgICAgICBjYXNlIDB4 MDAyMjoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweDdGICYgMHhmZikpOyAgICAvKiBRVU9UQVRJ T04gTUFSSyAqLworICAgICAgY2FzZSAweDAwRDg6CisgICAgICAgIC8qIExBVElOIENBUElUQUwg TEVUVEVSIE8gV0lUSCBTVFJPS0UgKi8KKyAgICAgICAgcmV0dXJuKChDSEFSKSgweDgwICYgMHhm ZikpOworICAgICAgY2FzZSAweDAwNjE6CisgICAgICAgIHJldHVybigoQ0hBUikoMHg4MSAmIDB4 ZmYpKTsgICAgLyogTEFUSU4gU01BTEwgTEVUVEVSIEEgKi8KKyAgICAgIGNhc2UgMHgwMDYyOgor ICAgICAgICByZXR1cm4oKENIQVIpKDB4ODIgJiAweGZmKSk7ICAgIC8qIExBVElOIFNNQUxMIExF VFRFUiBCICovCisgICAgICBjYXNlIDB4MDA2MzoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweDgz ICYgMHhmZikpOyAgICAvKiBMQVRJTiBTTUFMTCBMRVRURVIgQyAqLworICAgICAgY2FzZSAweDAw NjQ6CisgICAgICAgIHJldHVybigoQ0hBUikoMHg4NCAmIDB4ZmYpKTsgICAgLyogTEFUSU4gU01B TEwgTEVUVEVSIEQgKi8KKyAgICAgIGNhc2UgMHgwMDY1OgorICAgICAgICByZXR1cm4oKENIQVIp KDB4ODUgJiAweGZmKSk7ICAgIC8qIExBVElOIFNNQUxMIExFVFRFUiBFICovCisgICAgICBjYXNl IDB4MDA2NjoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweDg2ICYgMHhmZikpOyAgICAvKiBMQVRJ TiBTTUFMTCBMRVRURVIgRiAqLworICAgICAgY2FzZSAweDAwNjc6CisgICAgICAgIHJldHVybigo Q0hBUikoMHg4NyAmIDB4ZmYpKTsgICAgLyogTEFUSU4gU01BTEwgTEVUVEVSIEcgKi8KKyAgICAg IGNhc2UgMHgwMDY4OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4ODggJiAweGZmKSk7ICAgIC8q IExBVElOIFNNQUxMIExFVFRFUiBIICovCisgICAgICBjYXNlIDB4MDA2OToKKyAgICAgICAgcmV0 dXJuKChDSEFSKSgweDg5ICYgMHhmZikpOyAgICAvKiBMQVRJTiBTTUFMTCBMRVRURVIgSSAqLwor ICAgICAgY2FzZSAweDAwQUI6CisgICAgICAgIC8qIExFRlQtUE9JTlRJTkcgRE9VQkxFIEFOR0xF IFFVT1RBVElPTiBNQVJLICovCisgICAgICAgIHJldHVybigoQ0hBUikoMHg4QSAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgwMEJCOgorICAgICAgICAvKiBSSUdIVC1QT0lOVElORyBET1VCTEUgQU5H TEUgUVVPVEFUSU9OIE1BUiBLKi8KKyAgICAgICAgcmV0dXJuKChDSEFSKSgweDhCICYgMHhmZikp OworICAgICAgY2FzZSAweDAwRjA6CisgICAgICAgIC8qIExBVElOIFNNQUxMIExFVFRFUiBFVEgg KElDRUxBTkRJQykgKi8KKyAgICAgICAgcmV0dXJuKChDSEFSKSgweDhDICYgMHhmZikpOworICAg ICAgY2FzZSAweDAwRkQ6CisgICAgICAgIHJldHVybigoQ0hBUikoMHg4RCAmIDB4ZmYpKTsgICAg LyogTEFUSU4gU01BTEwgTEVUVEVSIFkgV0lUSCBBQ1VURSAqLworICAgICAgY2FzZSAweDAwRkU6 CisgICAgICAgIC8qIExBVElOIFNNQUxMIExFVFRFUiBUSE9STiAoSUNFTEFORElDKSAqLworICAg ICAgICByZXR1cm4oKENIQVIpKDB4OEUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBCMToKKyAg ICAgICAgcmV0dXJuKChDSEFSKSgweDhGICYgMHhmZikpOyAgICAvKiBQTFVTLU1JTlVTIFNJR04g Ki8KKyAgICAgIGNhc2UgMHgwMEIwOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4OTAgJiAweGZm KSk7ICAgIC8qIERFR1JFRSBTSUdOICovCisgICAgICBjYXNlIDB4MDA2QToKKyAgICAgICAgcmV0 dXJuKChDSEFSKSgweDkxICYgMHhmZikpOyAgICAvKiBMQVRJTiBTTUFMTCBMRVRURVIgSiAqLwor ICAgICAgY2FzZSAweDAwNkI6CisgICAgICAgIHJldHVybigoQ0hBUikoMHg5MiAmIDB4ZmYpKTsg ICAgLyogTEFUSU4gU01BTEwgTEVUVEVSIEsgKi8KKyAgICAgIGNhc2UgMHgwMDZDOgorICAgICAg ICByZXR1cm4oKENIQVIpKDB4OTMgJiAweGZmKSk7ICAgIC8qIExBVElOIFNNQUxMIExFVFRFUiBM ICovCisgICAgICBjYXNlIDB4MDA2RDoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweDk0ICYgMHhm ZikpOyAgICAvKiBMQVRJTiBTTUFMTCBMRVRURVIgTSAqLworICAgICAgY2FzZSAweDAwNkU6Cisg ICAgICAgIHJldHVybigoQ0hBUikoMHg5NSAmIDB4ZmYpKTsgICAgLyogTEFUSU4gU01BTEwgTEVU VEVSIE4gKi8KKyAgICAgIGNhc2UgMHgwMDZGOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4OTYg JiAweGZmKSk7ICAgIC8qIExBVElOIFNNQUxMIExFVFRFUiBPICovCisgICAgICBjYXNlIDB4MDA3 MDoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweDk3ICYgMHhmZikpOyAgICAvKiBMQVRJTiBTTUFM TCBMRVRURVIgUCAqLworICAgICAgY2FzZSAweDAwNzE6CisgICAgICAgIHJldHVybigoQ0hBUiko MHg5OCAmIDB4ZmYpKTsgICAgLyogTEFUSU4gU01BTEwgTEVUVEVSIFEgKi8KKyAgICAgIGNhc2Ug MHgwMDcyOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4OTkgJiAweGZmKSk7ICAgIC8qIExBVElO IFNNQUxMIExFVFRFUiBSICovCisgICAgICBjYXNlIDB4MDBBQToKKyAgICAgICAgcmV0dXJuKChD SEFSKSgweDlBICYgMHhmZikpOyAgICAvKiBGRU1JTklORSBPUkRJTkFMIElORElDQVRPUiAqLwor ICAgICAgY2FzZSAweDAwQkE6CisgICAgICAgIHJldHVybigoQ0hBUikoMHg5QiAmIDB4ZmYpKTsg ICAgLyogTUFTQ1VMSU5FIE9SRElOQUwgSU5ESUNBVE9SICovCisgICAgICBjYXNlIDB4MDBFNjoK KyAgICAgICAgcmV0dXJuKChDSEFSKSgweDlDICYgMHhmZikpOyAgICAvKiBMQVRJTiBTTUFMTCBM SUdBVFVSRSBBRSAqLworICAgICAgY2FzZSAweDAwQjg6CisgICAgICAgIHJldHVybigoQ0hBUiko MHg5RCAmIDB4ZmYpKTsgICAgLyogQ0VESUxMQSAqLworICAgICAgY2FzZSAweDAwQzY6CisgICAg ICAgIHJldHVybigoQ0hBUikoMHg5RSAmIDB4ZmYpKTsgICAgLyogTEFUSU4gQ0FQSVRBTCBMSUdB VFVSRSBBRSAqLworICAgICAgY2FzZSAweDAwQTQ6CisgICAgICAgIHJldHVybigoQ0hBUikoMHg5 RiAmIDB4ZmYpKTsgICAgLyogQ1VSUkVOQ1kgU0lHTiAqLworICAgICAgY2FzZSAweDAwQjU6Cisg ICAgICAgIHJldHVybigoQ0hBUikoMHhBMCAmIDB4ZmYpKTsgICAgLyogTUlDUk8gU0lHTiAqLwor ICAgICAgY2FzZSAweDAwN0U6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhBMSAmIDB4ZmYpKTsg ICAgLyogVElMREUgKi8KKyAgICAgIGNhc2UgMHgwMDczOgorICAgICAgICByZXR1cm4oKENIQVIp KDB4QTIgJiAweGZmKSk7ICAgIC8qIExBVElOIFNNQUxMIExFVFRFUiBTICovCisgICAgICBjYXNl IDB4MDA3NDoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEEzICYgMHhmZikpOyAgICAvKiBMQVRJ TiBTTUFMTCBMRVRURVIgVCAqLworICAgICAgY2FzZSAweDAwNzU6CisgICAgICAgIHJldHVybigo Q0hBUikoMHhBNCAmIDB4ZmYpKTsgICAgLyogTEFUSU4gU01BTEwgTEVUVEVSIFUgKi8KKyAgICAg IGNhc2UgMHgwMDc2OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4QTUgJiAweGZmKSk7ICAgIC8q IExBVElOIFNNQUxMIExFVFRFUiBWICovCisgICAgICBjYXNlIDB4MDA3NzoKKyAgICAgICAgcmV0 dXJuKChDSEFSKSgweEE2ICYgMHhmZikpOyAgICAvKiBMQVRJTiBTTUFMTCBMRVRURVIgVyAqLwor ICAgICAgY2FzZSAweDAwNzg6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhBNyAmIDB4ZmYpKTsg ICAgLyogTEFUSU4gU01BTEwgTEVUVEVSIFggKi8KKyAgICAgIGNhc2UgMHgwMDc5OgorICAgICAg ICByZXR1cm4oKENIQVIpKDB4QTggJiAweGZmKSk7ICAgIC8qIExBVElOIFNNQUxMIExFVFRFUiBZ ICovCisgICAgICBjYXNlIDB4MDA3QToKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEE5ICYgMHhm ZikpOyAgICAvKiBMQVRJTiBTTUFMTCBMRVRURVIgWiAqLworICAgICAgY2FzZSAweDAwQTE6Cisg ICAgICAgIHJldHVybigoQ0hBUikoMHhBQSAmIDB4ZmYpKTsgICAgLyogSU5WRVJURUQgRVhDTEFN QVRJT04gTUFSSyAqLworICAgICAgY2FzZSAweDAwQkY6CisgICAgICAgIHJldHVybigoQ0hBUiko MHhBQiAmIDB4ZmYpKTsgICAgLyogSU5WRVJURUQgUVVFU1RJT04gTUFSSyAqLworICAgICAgY2Fz ZSAweDAwRDA6CisgICAgICAgIC8qIExBVElOIENBUElUQUwgTEVUVEVSIEVUSCAoSUNFTEFORElD KSAqLworICAgICAgICByZXR1cm4oKENIQVIpKDB4QUMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MDBERDoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEFEICYgMHhmZikpOyAgICAvKiBMQVRJTiBD QVBJVEFMIExFVFRFUiBZIFdJVEggQUNVVEUgKi8KKyAgICAgIGNhc2UgMHgwMERFOgorICAgICAg ICAvKiBMQVRJTiBDQVBJVEFMIExFVFRFUiBUSE9STiAoSUNFTEFORElDKSAqLworICAgICAgICBy ZXR1cm4oKENIQVIpKDB4QUUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBBRToKKyAgICAgICAg cmV0dXJuKChDSEFSKSgweEFGICYgMHhmZikpOyAgICAvKiBSRUdJU1RFUkVEIFNJR04gKi8KKyAg ICAgIGNhc2UgMHgwMDVFOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4QjAgJiAweGZmKSk7ICAg IC8qIENJUkNVTUZMRVggQUNDRU5UICovCisgICAgICBjYXNlIDB4MDBBMzoKKyAgICAgICAgcmV0 dXJuKChDSEFSKSgweEIxICYgMHhmZikpOyAgICAvKiBQT1VORCBTSUdOICovCisgICAgICBjYXNl IDB4MDBBNToKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEIyICYgMHhmZikpOyAgICAvKiBZRU4g U0lHTiAqLworICAgICAgY2FzZSAweDAwQjc6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhCMyAm IDB4ZmYpKTsgICAgLyogTUlERExFIERPVCAqLworICAgICAgY2FzZSAweDAwQTk6CisgICAgICAg IHJldHVybigoQ0hBUikoMHhCNCAmIDB4ZmYpKTsgICAgLyogQ09QWVJJR0hUIFNJR04gKi8KKyAg ICAgIGNhc2UgMHgwMEE3OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4QjUgJiAweGZmKSk7ICAg IC8qIFNFQ1RJT04gU0lHTiAqLworICAgICAgY2FzZSAweDAwQjY6CisgICAgICAgIHJldHVybigo Q0hBUikoMHhCNiAmIDB4ZmYpKTsgICAgLyogUElMQ1JPVyBTSUdOICovCisgICAgICBjYXNlIDB4 MDBCQzoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEI3ICYgMHhmZikpOyAgICAvKiBWVUxHQVIg RlJBQ1RJT04gT05FIFFVQVJURVIgKi8KKyAgICAgIGNhc2UgMHgwMEJEOgorICAgICAgICByZXR1 cm4oKENIQVIpKDB4QjggJiAweGZmKSk7ICAgIC8qIFZVTEdBUiBGUkFDVElPTiBPTkUgSEFMRiAq LworICAgICAgY2FzZSAweDAwQkU6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhCOSAmIDB4ZmYp KTsgICAgLyogVlVMR0FSIEZSQUNUSU9OIFRIUkVFIFFVQVJURVJTICovCisgICAgICBjYXNlIDB4 MDA1QjoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEJBICYgMHhmZikpOyAgICAvKiBMRUZUIFNR VUFSRSBCUkFDS0VUICovCisgICAgICBjYXNlIDB4MDA1RDoKKyAgICAgICAgcmV0dXJuKChDSEFS KSgweEJCICYgMHhmZikpOyAgICAvKiBSSUdIVCBTUVVBUkUgQlJBQ0tFVCAqLworICAgICAgY2Fz ZSAweDAwQUY6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhCQyAmIDB4ZmYpKTsgICAgLyogTUFD Uk9OICovCisgICAgICBjYXNlIDB4MDBBODoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEJEICYg MHhmZikpOyAgICAvKiBESUFFUkVTSVMgKi8KKyAgICAgIGNhc2UgMHgwMEI0OgorICAgICAgICBy ZXR1cm4oKENIQVIpKDB4QkUgJiAweGZmKSk7ICAgIC8qIEFDVVRFIEFDQ0VOVCAqLworICAgICAg Y2FzZSAweDAwRDc6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhCRiAmIDB4ZmYpKTsgICAgLyog TVVMVElQTElDQVRJT04gU0lHTiAqLworICAgICAgY2FzZSAweDAwN0I6CisgICAgICAgIHJldHVy bigoQ0hBUikoMHhDMCAmIDB4ZmYpKTsgICAgLyogTEVGVCBDVVJMWSBCUkFDS0VUICovCisgICAg ICBjYXNlIDB4MDA0MToKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEMxICYgMHhmZikpOyAgICAv KiBMQVRJTiBDQVBJVEFMIExFVFRFUiBBICovCisgICAgICBjYXNlIDB4MDA0MjoKKyAgICAgICAg cmV0dXJuKChDSEFSKSgweEMyICYgMHhmZikpOyAgICAvKiBMQVRJTiBDQVBJVEFMIExFVFRFUiBC ICovCisgICAgICBjYXNlIDB4MDA0MzoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEMzICYgMHhm ZikpOyAgICAvKiBMQVRJTiBDQVBJVEFMIExFVFRFUiBDICovCisgICAgICBjYXNlIDB4MDA0NDoK KyAgICAgICAgcmV0dXJuKChDSEFSKSgweEM0ICYgMHhmZikpOyAgICAvKiBMQVRJTiBDQVBJVEFM IExFVFRFUiBEICovCisgICAgICBjYXNlIDB4MDA0NToKKyAgICAgICAgcmV0dXJuKChDSEFSKSgw eEM1ICYgMHhmZikpOyAgICAvKiBMQVRJTiBDQVBJVEFMIExFVFRFUiBFICovCisgICAgICBjYXNl IDB4MDA0NjoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEM2ICYgMHhmZikpOyAgICAvKiBMQVRJ TiBDQVBJVEFMIExFVFRFUiBGICovCisgICAgICBjYXNlIDB4MDA0NzoKKyAgICAgICAgcmV0dXJu KChDSEFSKSgweEM3ICYgMHhmZikpOyAgICAvKiBMQVRJTiBDQVBJVEFMIExFVFRFUiBHICovCisg ICAgICBjYXNlIDB4MDA0ODoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEM4ICYgMHhmZikpOyAg ICAvKiBMQVRJTiBDQVBJVEFMIExFVFRFUiBIICovCisgICAgICBjYXNlIDB4MDA0OToKKyAgICAg ICAgcmV0dXJuKChDSEFSKSgweEM5ICYgMHhmZikpOyAgICAvKiBMQVRJTiBDQVBJVEFMIExFVFRF UiBJICovCisgICAgICBjYXNlIDB4MDBBRDoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweENBICYg MHhmZikpOyAgICAvKiBTT0ZUIEhZUEhFTiAqLworICAgICAgY2FzZSAweDAwRjQ6CisgICAgICAg IHJldHVybigoQ0hBUikoMHhDQiAmIDB4ZmYpKTsgICAgLyogU01BTEwgTEVUVEVSIE8gV0lUSCBD SVJDVU1GTEVYICovCisgICAgICBjYXNlIDB4MDBGNjoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgw eENDICYgMHhmZikpOyAgICAvKiBTTUFMTCBMRVRURVIgTyBXSVRIIERJQUVSRVNJUyAqLworICAg ICAgY2FzZSAweDAwRjI6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhDRCAmIDB4ZmYpKTsgICAg LyogTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBHUkFWRSAqLworICAgICAgY2FzZSAweDAwRjM6 CisgICAgICAgIHJldHVybigoQ0hBUikoMHhDRSAmIDB4ZmYpKTsgICAgLyogTEFUSU4gU01BTEwg TEVUVEVSIE8gV0lUSCBBQ1VURSAqLworICAgICAgY2FzZSAweDAwRjU6CisgICAgICAgIHJldHVy bigoQ0hBUikoMHhDRiAmIDB4ZmYpKTsgICAgLyogTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBU SUxERSAqLworICAgICAgY2FzZSAweDAwN0Q6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhEMCAm IDB4ZmYpKTsgICAgLyogUklHSFQgQ1VSTFkgQlJBQ0tFVCAqLworICAgICAgY2FzZSAweDAwNEE6 CisgICAgICAgIHJldHVybigoQ0hBUikoMHhEMSAmIDB4ZmYpKTsgICAgLyogTEFUSU4gQ0FQSVRB TCBMRVRURVIgSiAqLworICAgICAgY2FzZSAweDAwNEI6CisgICAgICAgIHJldHVybigoQ0hBUiko MHhEMiAmIDB4ZmYpKTsgICAgLyogTEFUSU4gQ0FQSVRBTCBMRVRURVIgSyAqLworICAgICAgY2Fz ZSAweDAwNEM6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhEMyAmIDB4ZmYpKTsgICAgLyogTEFU SU4gQ0FQSVRBTCBMRVRURVIgTCAqLworICAgICAgY2FzZSAweDAwNEQ6CisgICAgICAgIHJldHVy bigoQ0hBUikoMHhENCAmIDB4ZmYpKTsgICAgLyogTEFUSU4gQ0FQSVRBTCBMRVRURVIgTSAqLwor ICAgICAgY2FzZSAweDAwNEU6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhENSAmIDB4ZmYpKTsg ICAgLyogTEFUSU4gQ0FQSVRBTCBMRVRURVIgTiAqLworICAgICAgY2FzZSAweDAwNEY6CisgICAg ICAgIHJldHVybigoQ0hBUikoMHhENiAmIDB4ZmYpKTsgICAgLyogTEFUSU4gQ0FQSVRBTCBMRVRU RVIgTyAqLworICAgICAgY2FzZSAweDAwNTA6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhENyAm IDB4ZmYpKTsgICAgLyogTEFUSU4gQ0FQSVRBTCBMRVRURVIgUCAqLworICAgICAgY2FzZSAweDAw NTE6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhEOCAmIDB4ZmYpKTsgICAgLyogTEFUSU4gQ0FQ SVRBTCBMRVRURVIgUSAqLworICAgICAgY2FzZSAweDAwNTI6CisgICAgICAgIHJldHVybigoQ0hB UikoMHhEOSAmIDB4ZmYpKTsgICAgLyogTEFUSU4gQ0FQSVRBTCBMRVRURVIgUiAqLworICAgICAg Y2FzZSAweDAwQjk6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhEQSAmIDB4ZmYpKTsgICAgLyog U1VQRVJTQ1JJUFQgT05FICovCisgICAgICBjYXNlIDB4MDBGQjoKKyAgICAgICAgcmV0dXJuKChD SEFSKSgweERCICYgMHhmZikpOyAgICAvKiBTTUFMTCBMRVRURVIgVSBXSVRIIENJUkNVTUZMRVgg Ki8KKyAgICAgIGNhc2UgMHgwMEZDOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4REMgJiAweGZm KSk7ICAgIC8qIFNNQUxMIExFVFRFUiBVIFdJVEggRElBRVJFU0lTICovCisgICAgICBjYXNlIDB4 MDBGOToKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEREICYgMHhmZikpOyAgICAvKiBTTUFMTCBM RVRURVIgVSBXSVRIIEdSQVZFICovCisgICAgICBjYXNlIDB4MDBGQToKKyAgICAgICAgcmV0dXJu KChDSEFSKSgweERFICYgMHhmZikpOyAgICAvKiBTTUFMTCBMRVRURVIgVSBXSVRIIEFDVVRFICov CisgICAgICBjYXNlIDB4MDBGRjoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweERGICYgMHhmZikp OyAgICAvKiBTTUFMTCBMRVRURVIgWSBXSVRIIERJQUVSRVNJUyAqLworICAgICAgY2FzZSAweDAw NUM6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhFMCAmIDB4ZmYpKTsgICAgLyogUkVWRVJTRSBT T0xJRFVTICovCisgICAgICBjYXNlIDB4MDBGNzoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEUx ICYgMHhmZikpOyAgICAvKiBESVZJU0lPTiBTSUdOICovCisgICAgICBjYXNlIDB4MDA1MzoKKyAg ICAgICAgcmV0dXJuKChDSEFSKSgweEUyICYgMHhmZikpOyAgICAvKiBMQVRJTiBDQVBJVEFMIExF VFRFUiBTICovCisgICAgICBjYXNlIDB4MDA1NDoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEUz ICYgMHhmZikpOyAgICAvKiBMQVRJTiBDQVBJVEFMIExFVFRFUiBUICovCisgICAgICBjYXNlIDB4 MDA1NToKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEU0ICYgMHhmZikpOyAgICAvKiBMQVRJTiBD QVBJVEFMIExFVFRFUiBVICovCisgICAgICBjYXNlIDB4MDA1NjoKKyAgICAgICAgcmV0dXJuKChD SEFSKSgweEU1ICYgMHhmZikpOyAgICAvKiBMQVRJTiBDQVBJVEFMIExFVFRFUiBWICovCisgICAg ICBjYXNlIDB4MDA1NzoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEU2ICYgMHhmZikpOyAgICAv KiBMQVRJTiBDQVBJVEFMIExFVFRFUiBXICovCisgICAgICBjYXNlIDB4MDA1ODoKKyAgICAgICAg cmV0dXJuKChDSEFSKSgweEU3ICYgMHhmZikpOyAgICAvKiBMQVRJTiBDQVBJVEFMIExFVFRFUiBY ICovCisgICAgICBjYXNlIDB4MDA1OToKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEU4ICYgMHhm ZikpOyAgICAvKiBMQVRJTiBDQVBJVEFMIExFVFRFUiBZICovCisgICAgICBjYXNlIDB4MDA1QToK KyAgICAgICAgcmV0dXJuKChDSEFSKSgweEU5ICYgMHhmZikpOyAgICAvKiBMQVRJTiBDQVBJVEFM IExFVFRFUiBaICovCisgICAgICBjYXNlIDB4MDBCMjoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgw eEVBICYgMHhmZikpOyAgICAvKiBTVVBFUlNDUklQVCBUV08gKi8KKyAgICAgIGNhc2UgMHgwMEQ0 OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4RUIgJiAweGZmKSk7ICAgIC8qIENBUElUQUwgTEVU VEVSIE8gV0lUSCBDSVJDVU1GTEVYICovCisgICAgICBjYXNlIDB4MDBENjoKKyAgICAgICAgcmV0 dXJuKChDSEFSKSgweEVDICYgMHhmZikpOyAgICAvKiBDQVBJVEFMIExFVFRFUiBPIFdJVEggRElB RVJFU0lTICovCisgICAgICBjYXNlIDB4MDBEMjoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEVE ICYgMHhmZikpOyAgICAvKiBDQVBJVEFMIExFVFRFUiBPIFdJVEggR1JBVkUgKi8KKyAgICAgIGNh c2UgMHgwMEQzOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4RUUgJiAweGZmKSk7ICAgIC8qIENB UElUQUwgTEVUVEVSIE8gV0lUSCBBQ1VURSAqLworICAgICAgY2FzZSAweDAwRDU6CisgICAgICAg IHJldHVybigoQ0hBUikoMHhFRiAmIDB4ZmYpKTsgICAgLyogQ0FQSVRBTCBMRVRURVIgTyBXSVRI IFRJTERFICovCisgICAgICBjYXNlIDB4MDAzMDoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEYw ICYgMHhmZikpOyAgICAvKiBESUdJVCBaRVJPICovCisgICAgICBjYXNlIDB4MDAzMToKKyAgICAg ICAgcmV0dXJuKChDSEFSKSgweEYxICYgMHhmZikpOyAgICAvKiBESUdJVCBPTkUgKi8KKyAgICAg IGNhc2UgMHgwMDMyOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4RjIgJiAweGZmKSk7ICAgIC8q IERJR0lUIFRXTyAqLworICAgICAgY2FzZSAweDAwMzM6CisgICAgICAgIHJldHVybigoQ0hBUiko MHhGMyAmIDB4ZmYpKTsgICAgLyogRElHSVQgVEhSRUUgKi8KKyAgICAgIGNhc2UgMHgwMDM0Ogor ICAgICAgICByZXR1cm4oKENIQVIpKDB4RjQgJiAweGZmKSk7ICAgIC8qIERJR0lUIEZPVVIgKi8K KyAgICAgIGNhc2UgMHgwMDM1OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4RjUgJiAweGZmKSk7 ICAgIC8qIERJR0lUIEZJVkUgKi8KKyAgICAgIGNhc2UgMHgwMDM2OgorICAgICAgICByZXR1cm4o KENIQVIpKDB4RjYgJiAweGZmKSk7ICAgIC8qIERJR0lUIFNJWCAqLworICAgICAgY2FzZSAweDAw Mzc6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhGNyAmIDB4ZmYpKTsgICAgLyogRElHSVQgU0VW RU4gKi8KKyAgICAgIGNhc2UgMHgwMDM4OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4RjggJiAw eGZmKSk7ICAgIC8qIERJR0lUIEVJR0hUICovCisgICAgICBjYXNlIDB4MDAzOToKKyAgICAgICAg cmV0dXJuKChDSEFSKSgweEY5ICYgMHhmZikpOyAgICAvKiBESUdJVCBOSU5FICovCisgICAgICBj YXNlIDB4MDBCMzoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEZBICYgMHhmZikpOyAgICAvKiBT VVBFUlNDUklQVCBUSFJFRSAqLworICAgICAgY2FzZSAweDAwREI6CisgICAgICAgIHJldHVybigo Q0hBUikoMHhGQiAmIDB4ZmYpKTsgICAgLyogQ0FQSVRBTCBMRVRURVIgVSBXSVRIIENJUkNVTUZM RVggKi8KKyAgICAgIGNhc2UgMHgwMERDOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4RkMgJiAw eGZmKSk7ICAgIC8qIENBUElUQUwgTEVUVEVSIFUgV0lUSCBESUFFUkVTSVMgKi8KKyAgICAgIGNh c2UgMHgwMEQ5OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4RkQgJiAweGZmKSk7ICAgIC8qIExB VElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBHUkFWRSAqLworICAgICAgY2FzZSAweDAwREE6Cisg ICAgICAgIHJldHVybigoQ0hBUikoMHhGRSAmIDB4ZmYpKTsgICAgLyogTEFUSU4gQ0FQSVRBTCBM RVRURVIgVSBXSVRIIEFDVVRFICovCisgICAgICBjYXNlIDB4MDA5RjoKKyAgICAgICAgcmV0dXJu KChDSEFSKSgweEZGICYgMHhmZikpOyAgICAvKiBDT05UUk9MICovCisgICAgZGVmYXVsdDogcmV0 dXJuKDB4MDAzZik7CisgICAgfQorfQorCisKK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBQQyBDb2RlIFBhZ2UgODU1ICovCisjaWZkZWYgQ0tfQU5TSUMKK3R4X2Nw ODU1KFVTSE9SVCBjKQorI2Vsc2UKK3R4X2NwODU1KGMpIFVTSE9SVCBjOworI2VuZGlmIC8qIENL X0FOU0lDICovCit7CisgICAgaWYgKGMgPCAweDgwKSAgICAgICAgICAgICAgICAgICAgICAgLyog SGFzIEMxIGdyYXBoaWNzICovCisgICAgICByZXR1cm4oKENIQVIpKGMgJiAweGZmKSk7CisgICAg c3dpdGNoIChjKSB7CisgICAgICBjYXNlIDB4MDBhNDogcmV0dXJuKChDSEFSKSgyMDcgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MDBhNzogcmV0dXJuKChDSEFSKSgyNTMgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MDBhYjogcmV0dXJuKChDSEFSKSgxNzQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MDBiYjogcmV0dXJuKChDSEFSKSgxNzUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQwMTogcmV0 dXJuKChDSEFSKSgxMzMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQwMjogcmV0dXJuKChDSEFS KSgxMjkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQwMzogcmV0dXJuKChDSEFSKSgxMzEgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MDQwNDogcmV0dXJuKChDSEFSKSgxMzUgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MDQwNTogcmV0dXJuKChDSEFSKSgxMzcgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MDQwNjogcmV0dXJuKChDSEFSKSgxMzkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQwNzog cmV0dXJuKChDSEFSKSgxNDEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQwODogcmV0dXJuKChD SEFSKSgxNDMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQwOTogcmV0dXJuKChDSEFSKSgxNDUg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQwYTogcmV0dXJuKChDSEFSKSgxNDcgJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MDQwYjogcmV0dXJuKChDSEFSKSgxNDkgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MDQwYzogcmV0dXJuKChDSEFSKSgxNTEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQw ZTogcmV0dXJuKChDSEFSKSgxNTMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQwZjogcmV0dXJu KChDSEFSKSgxNTUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQxMDogcmV0dXJuKChDSEFSKSgx NjEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQxMTogcmV0dXJuKChDSEFSKSgxNjMgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MDQxMjogcmV0dXJuKChDSEFSKSgyMzYgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MDQxMzogcmV0dXJuKChDSEFSKSgxNzMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MDQxNDogcmV0dXJuKChDSEFSKSgxNjcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQxNTogcmV0 dXJuKChDSEFSKSgxNjkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQxNjogcmV0dXJuKChDSEFS KSgyMzQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQxNzogcmV0dXJuKChDSEFSKSgyNDQgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MDQxODogcmV0dXJuKChDSEFSKSgxODQgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MDQxOTogcmV0dXJuKChDSEFSKSgxOTAgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MDQxYTogcmV0dXJuKChDSEFSKSgxOTkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQxYjog cmV0dXJuKChDSEFSKSgyMDkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQxYzogcmV0dXJuKChD SEFSKSgyMTEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQxZDogcmV0dXJuKChDSEFSKSgyMTMg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQxZTogcmV0dXJuKChDSEFSKSgyMTUgJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MDQxZjogcmV0dXJuKChDSEFSKSgyMjEgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MDQyMDogcmV0dXJuKChDSEFSKSgyMjYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQy MTogcmV0dXJuKChDSEFSKSgyMjggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQyMjogcmV0dXJu KChDSEFSKSgyMzAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQyMzogcmV0dXJuKChDSEFSKSgy MzIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQyNDogcmV0dXJuKChDSEFSKSgxNzEgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MDQyNTogcmV0dXJuKChDSEFSKSgxODIgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MDQyNjogcmV0dXJuKChDSEFSKSgxNjUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MDQyNzogcmV0dXJuKChDSEFSKSgyNTIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQyODogcmV0 dXJuKChDSEFSKSgyNDYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQyOTogcmV0dXJuKChDSEFS KSgyNTAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQyYTogcmV0dXJuKChDSEFSKSgxNTkgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MDQyYjogcmV0dXJuKChDSEFSKSgyNDIgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MDQyYzogcmV0dXJuKChDSEFSKSgyMzggJiAweGZmKSk7CisgICAgICBjYXNl IDB4MDQyZDogcmV0dXJuKChDSEFSKSgyNDggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQyZTog cmV0dXJuKChDSEFSKSgxNTcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQyZjogcmV0dXJuKChD SEFSKSgyMjQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQzMDogcmV0dXJuKChDSEFSKSgxNjAg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQzMTogcmV0dXJuKChDSEFSKSgxNjIgJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MDQzMjogcmV0dXJuKChDSEFSKSgyMzUgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MDQzMzogcmV0dXJuKChDSEFSKSgxNzIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQz NDogcmV0dXJuKChDSEFSKSgxNjYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQzNTogcmV0dXJu KChDSEFSKSgxNjggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQzNjogcmV0dXJuKChDSEFSKSgy MzMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQzNzogcmV0dXJuKChDSEFSKSgyNDMgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MDQzODogcmV0dXJuKChDSEFSKSgxODMgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MDQzOTogcmV0dXJuKChDSEFSKSgxODkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MDQzYTogcmV0dXJuKChDSEFSKSgxOTggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQzYjogcmV0 dXJuKChDSEFSKSgyMDggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQzYzogcmV0dXJuKChDSEFS KSgyMTAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQzZDogcmV0dXJuKChDSEFSKSgyMTIgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MDQzZTogcmV0dXJuKChDSEFSKSgyMTQgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MDQzZjogcmV0dXJuKChDSEFSKSgyMTYgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MDQ0MDogcmV0dXJuKChDSEFSKSgyMjUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQ0MTog cmV0dXJuKChDSEFSKSgyMjcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQ0MjogcmV0dXJuKChD SEFSKSgyMjkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQ0MzogcmV0dXJuKChDSEFSKSgyMzEg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQ0NDogcmV0dXJuKChDSEFSKSgxNzAgJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MDQ0NTogcmV0dXJuKChDSEFSKSgxODEgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MDQ0NjogcmV0dXJuKChDSEFSKSgxNjQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQ0 NzogcmV0dXJuKChDSEFSKSgyNTEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQ0ODogcmV0dXJu KChDSEFSKSgyNDUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQ0OTogcmV0dXJuKChDSEFSKSgy NDkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQ0YTogcmV0dXJuKChDSEFSKSgxNTggJiAweGZm KSk7CisgICAgICBjYXNlIDB4MDQ0YjogcmV0dXJuKChDSEFSKSgyNDEgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MDQ0YzogcmV0dXJuKChDSEFSKSgyMzcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MDQ0ZDogcmV0dXJuKChDSEFSKSgyNDcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQ0ZTogcmV0 dXJuKChDSEFSKSgxNTYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQ0ZjogcmV0dXJuKChDSEFS KSgyMjIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQ1MTogcmV0dXJuKChDSEFSKSgxMzIgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MDQ1MjogcmV0dXJuKChDSEFSKSgxMjggJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MDQ1MzogcmV0dXJuKChDSEFSKSgxMzAgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MDQ1NDogcmV0dXJuKChDSEFSKSgxMzQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQ1NTog cmV0dXJuKChDSEFSKSgxMzYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQ1NjogcmV0dXJuKChD SEFSKSgxMzggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQ1NzogcmV0dXJuKChDSEFSKSgxNDAg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQ1ODogcmV0dXJuKChDSEFSKSgxNDIgJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MDQ1OTogcmV0dXJuKChDSEFSKSgxNDQgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MDQ1YTogcmV0dXJuKChDSEFSKSgxNDYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQ1 YjogcmV0dXJuKChDSEFSKSgxNDggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQ1YzogcmV0dXJu KChDSEFSKSgxNTAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQ1ZTogcmV0dXJuKChDSEFSKSgx NTIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQ1ZjogcmV0dXJuKChDSEFSKSgxNTQgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MjExNjogcmV0dXJuKChDSEFSKSgyMzkgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MjUwMDogcmV0dXJuKChDSEFSKSgxOTYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MjUwMjogcmV0dXJuKChDSEFSKSgxNzkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjUwYzogcmV0 dXJuKChDSEFSKSgyMTggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjUxMDogcmV0dXJuKChDSEFS KSgxOTEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjUxNDogcmV0dXJuKChDSEFSKSgxOTIgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MjUxODogcmV0dXJuKChDSEFSKSgyMTcgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MjUxYzogcmV0dXJuKChDSEFSKSgxOTUgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MjUyNDogcmV0dXJuKChDSEFSKSgxODAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjUyYzog cmV0dXJuKChDSEFSKSgxOTQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjUzNDogcmV0dXJuKChD SEFSKSgxOTMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjUzYzogcmV0dXJuKChDSEFSKSgxOTcg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU1MDogcmV0dXJuKChDSEFSKSgyMDUgJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MjU1MTogcmV0dXJuKChDSEFSKSgxODYgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MjU1NDogcmV0dXJuKChDSEFSKSgyMDEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU1 NzogcmV0dXJuKChDSEFSKSgxODcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU1YTogcmV0dXJu KChDSEFSKSgyMDAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU1ZDogcmV0dXJuKChDSEFSKSgx ODggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU2MDogcmV0dXJuKChDSEFSKSgyMDQgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MjU2MzogcmV0dXJuKChDSEFSKSgxODUgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MjU2NjogcmV0dXJuKChDSEFSKSgyMDMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MjU2OTogcmV0dXJuKChDSEFSKSgyMDIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU2YzogcmV0 dXJuKChDSEFSKSgyMDYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU4MDogcmV0dXJuKChDSEFS KSgyMjMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU4NDogcmV0dXJuKChDSEFSKSgyMjAgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MjU4ODogcmV0dXJuKChDSEFSKSgyMTkgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MjU5MTogcmV0dXJuKChDSEFSKSgxNzYgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MjU5MjogcmV0dXJuKChDSEFSKSgxNzcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU5Mzog cmV0dXJuKChDSEFSKSgxNzggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjVhMDogcmV0dXJuKChD SEFSKSgyNTQgJiAweGZmKSk7CisgICAgICBkZWZhdWx0OiByZXR1cm4odHhfY3BzdWIoYykpOyAg ICAgLyogRm9yIGJveCBjaGFyYWN0ZXJzIGV0YyAqLworICAgIH0KK30KKworaW50ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBDIENvZGUgUGFnZSA4NTYgKi8KKyNpZmRl ZiBDS19BTlNJQwordHhfY3A4NTYoVVNIT1JUIGMpCisjZWxzZQordHhfY3A4NTYoYykgVVNIT1JU IGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAgICBpZiAoYyA8IDB4ODApICAgICAgICAg ICAgICAgICAgICAgICAvKiBIYXMgQzEgZ3JhcGhpY3MgKi8KKyAgICAgIHJldHVybigoQ0hBUiko YyAmIDB4ZmYpKTsKKyAgICBzd2l0Y2ggKGMpIHsKKyAgICAgIGNhc2UgMHgwMGEwOiByZXR1cm4o KENIQVIpKDB4ZmYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBhNzogcmV0dXJuKChDSEFSKSgw eGQ2ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYjA6IHJldHVybigoQ0hBUikoMHhmOCAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGIxOiByZXR1cm4oKENIQVIpKDB4ZjEgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MDBiMjogcmV0dXJuKChDSEFSKSgweGZkICYgMHhmZikpOworICAgICAgY2Fz ZSAweDAwYjU6IHJldHVybigoQ0hBUikoMHhlNiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGI3 OiByZXR1cm4oKENIQVIpKDB4ZmEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBkZjogcmV0dXJu KChDSEFSKSgweGUxICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZjc6IHJldHVybigoQ0hBUiko MHhmNiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMzkzOiByZXR1cm4oKENIQVIpKDB4ZTIgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MDM5ODogcmV0dXJuKChDSEFSKSgweGU5ICYgMHhmZikpOwor ICAgICAgY2FzZSAweDAzYTM6IHJldHVybigoQ0hBUikoMHhlNCAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgwM2E2OiByZXR1cm4oKENIQVIpKDB4ZTggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDNh OTogcmV0dXJuKChDSEFSKSgweGVhICYgMHhmZikpOworICAgICAgY2FzZSAweDAzYjE6IHJldHVy bigoQ0hBUikoMHhlMCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwM2I0OiByZXR1cm4oKENIQVIp KDB4ZWIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDNiNTogcmV0dXJuKChDSEFSKSgweGVlICYg MHhmZikpOworICAgICAgY2FzZSAweDAzYzA6IHJldHVybigoQ0hBUikoMHhlMyAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgwM2MzOiByZXR1cm4oKENIQVIpKDB4ZTUgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MDNjNDogcmV0dXJuKChDSEFSKSgweGU3ICYgMHhmZikpOworICAgICAgY2FzZSAweDAz YzY6IHJldHVybigoQ0hBUikoMHhlZCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDEwOiByZXR1 cm4oKENIQVIpKDB4ODAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQxMTogcmV0dXJuKChDSEFS KSgweDgxICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MTI6IHJldHVybigoQ0hBUikoMHg4MiAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDEzOiByZXR1cm4oKENIQVIpKDB4ODMgJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MDQxNDogcmV0dXJuKChDSEFSKSgweDg0ICYgMHhmZikpOworICAgICAg Y2FzZSAweDA0MTU6IHJldHVybigoQ0hBUikoMHg4NSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgw NDE2OiByZXR1cm4oKENIQVIpKDB4ODYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQxNzogcmV0 dXJuKChDSEFSKSgweDg3ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MTg6IHJldHVybigoQ0hB UikoMHg4OCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDE5OiByZXR1cm4oKENIQVIpKDB4ODkg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQxYTogcmV0dXJuKChDSEFSKSgweDhhICYgMHhmZikp OworICAgICAgY2FzZSAweDA0MWI6IHJldHVybigoQ0hBUikoMHg4YiAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgwNDFjOiByZXR1cm4oKENIQVIpKDB4OGMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MDQxZDogcmV0dXJuKChDSEFSKSgweDhkICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MWU6IHJl dHVybigoQ0hBUikoMHg4ZSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDFmOiByZXR1cm4oKENI QVIpKDB4OGYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQyMDogcmV0dXJuKChDSEFSKSgweDkw ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MjE6IHJldHVybigoQ0hBUikoMHg5MSAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgwNDIyOiByZXR1cm4oKENIQVIpKDB4OTIgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MDQyMzogcmV0dXJuKChDSEFSKSgweDkzICYgMHhmZikpOworICAgICAgY2FzZSAw eDA0MjQ6IHJldHVybigoQ0hBUikoMHg5NCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDI1OiBy ZXR1cm4oKENIQVIpKDB4OTUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQyNjogcmV0dXJuKChD SEFSKSgweDk2ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0Mjc6IHJldHVybigoQ0hBUikoMHg5 NyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDI4OiByZXR1cm4oKENIQVIpKDB4OTggJiAweGZm KSk7CisgICAgICBjYXNlIDB4MDQyOTogcmV0dXJuKChDSEFSKSgweDk5ICYgMHhmZikpOworICAg ICAgY2FzZSAweDA0MmE6IHJldHVybigoQ0hBUikoMHg5YSAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgwNDJiOiByZXR1cm4oKENIQVIpKDB4OWIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQyYzog cmV0dXJuKChDSEFSKSgweDljICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MmQ6IHJldHVybigo Q0hBUikoMHg5ZCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDJlOiByZXR1cm4oKENIQVIpKDB4 OWUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQyZjogcmV0dXJuKChDSEFSKSgweDlmICYgMHhm ZikpOworICAgICAgY2FzZSAweDA0MzA6IHJldHVybigoQ0hBUikoMHhhMCAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgwNDMxOiByZXR1cm4oKENIQVIpKDB4YTEgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MDQzMjogcmV0dXJuKChDSEFSKSgweGEyICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MzM6 IHJldHVybigoQ0hBUikoMHhhMyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDM0OiByZXR1cm4o KENIQVIpKDB4YTQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQzNTogcmV0dXJuKChDSEFSKSgw eGE1ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MzY6IHJldHVybigoQ0hBUikoMHhhNiAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDM3OiByZXR1cm4oKENIQVIpKDB4YTcgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MDQzODogcmV0dXJuKChDSEFSKSgweGE4ICYgMHhmZikpOworICAgICAgY2Fz ZSAweDA0Mzk6IHJldHVybigoQ0hBUikoMHhhOSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDNh OiByZXR1cm4oKENIQVIpKDB4YWEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQzYjogcmV0dXJu KChDSEFSKSgweGFiICYgMHhmZikpOworICAgICAgY2FzZSAweDA0M2M6IHJldHVybigoQ0hBUiko MHhhYyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDNkOiByZXR1cm4oKENIQVIpKDB4YWQgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MDQzZTogcmV0dXJuKChDSEFSKSgweGFlICYgMHhmZikpOwor ICAgICAgY2FzZSAweDA0M2Y6IHJldHVybigoQ0hBUikoMHhhZiAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgwNDQwOiByZXR1cm4oKENIQVIpKDB4YjAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQ0 MTogcmV0dXJuKChDSEFSKSgweGIxICYgMHhmZikpOworICAgICAgY2FzZSAweDA0NDI6IHJldHVy bigoQ0hBUikoMHhiMiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDQzOiByZXR1cm4oKENIQVIp KDB4YjMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQ0NDogcmV0dXJuKChDSEFSKSgweGI0ICYg MHhmZikpOworICAgICAgY2FzZSAweDA0NDU6IHJldHVybigoQ0hBUikoMHhiNSAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgwNDQ2OiByZXR1cm4oKENIQVIpKDB4YjYgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MDQ0NzogcmV0dXJuKChDSEFSKSgweGI3ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0 NDg6IHJldHVybigoQ0hBUikoMHhiOCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDQ5OiByZXR1 cm4oKENIQVIpKDB4YjkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQ0YTogcmV0dXJuKChDSEFS KSgweGJhICYgMHhmZikpOworICAgICAgY2FzZSAweDA0NGI6IHJldHVybigoQ0hBUikoMHhiYiAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDRjOiByZXR1cm4oKENIQVIpKDB4YmMgJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MDQ0ZDogcmV0dXJuKChDSEFSKSgweGJkICYgMHhmZikpOworICAgICAg Y2FzZSAweDA0NGU6IHJldHVybigoQ0hBUikoMHhiZSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgw NDRmOiByZXR1cm4oKENIQVIpKDB4YmYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjA3ZjogcmV0 dXJuKChDSEFSKSgweGZjICYgMHhmZikpOworICAgICAgY2FzZSAweDIxMTY6IHJldHVybigoQ0hB UikoMHhkNSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMjE5OiByZXR1cm4oKENIQVIpKDB4Zjkg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MjIxYTogcmV0dXJuKChDSEFSKSgweGZiICYgMHhmZikp OworICAgICAgY2FzZSAweDIyMWU6IHJldHVybigoQ0hBUikoMHhlYyAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgyMjI5OiByZXR1cm4oKENIQVIpKDB4ZWYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MjI0ODogcmV0dXJuKChDSEFSKSgweGY3ICYgMHhmZikpOworICAgICAgY2FzZSAweDIyNjE6IHJl dHVybigoQ0hBUikoMHhmMCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMjY0OiByZXR1cm4oKENI QVIpKDB4ZjMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjI2NTogcmV0dXJuKChDSEFSKSgweGYy ICYgMHhmZikpOworICAgICAgY2FzZSAweDIzMjA6IHJldHVybigoQ0hBUikoMHhmNCAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgyMzIxOiByZXR1cm4oKENIQVIpKDB4ZjUgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MjUwMDogcmV0dXJuKChDSEFSKSgweGM0ICYgMHhmZikpOworICAgICAgY2FzZSAw eDI1MDI6IHJldHVybigoQ0hBUikoMHhkMyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTBjOiBy ZXR1cm4oKENIQVIpKDB4ZGEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjUxMDogcmV0dXJuKChD SEFSKSgweGNmICYgMHhmZikpOworICAgICAgY2FzZSAweDI1MTQ6IHJldHVybigoQ0hBUikoMHhj MCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTE4OiByZXR1cm4oKENIQVIpKDB4ZDkgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MjUxYzogcmV0dXJuKChDSEFSKSgweGMzICYgMHhmZikpOworICAg ICAgY2FzZSAweDI1MjQ6IHJldHVybigoQ0hBUikoMHhkNCAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgyNTJjOiByZXR1cm4oKENIQVIpKDB4YzIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjUzNDog cmV0dXJuKChDSEFSKSgweGMxICYgMHhmZikpOworICAgICAgY2FzZSAweDI1M2M6IHJldHVybigo Q0hBUikoMHhjNSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTUwOiByZXR1cm4oKENIQVIpKDB4 Y2QgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU1MTogcmV0dXJuKChDSEFSKSgweGM3ICYgMHhm ZikpOworICAgICAgY2FzZSAweDI1NTQ6IHJldHVybigoQ0hBUikoMHhjOSAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgyNTU3OiByZXR1cm4oKENIQVIpKDB4ZDcgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MjU1YTogcmV0dXJuKChDSEFSKSgweGM4ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1NWQ6 IHJldHVybigoQ0hBUikoMHhkOCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTYwOiByZXR1cm4o KENIQVIpKDB4Y2MgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU2MzogcmV0dXJuKChDSEFSKSgw eGM2ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1NjY6IHJldHVybigoQ0hBUikoMHhjYiAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTY5OiByZXR1cm4oKENIQVIpKDB4Y2EgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MjU2YzogcmV0dXJuKChDSEFSKSgweGNlICYgMHhmZikpOworICAgICAgY2Fz ZSAweDI1ODA6IHJldHVybigoQ0hBUikoMHhkZiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTg0 OiByZXR1cm4oKENIQVIpKDB4ZGMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU4ODogcmV0dXJu KChDSEFSKSgweGRiICYgMHhmZikpOworICAgICAgY2FzZSAweDI1OGM6IHJldHVybigoQ0hBUiko MHhkZCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTkwOiByZXR1cm4oKENIQVIpKDB4ZGUgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MjU5MTogcmV0dXJuKChDSEFSKSgweGQwICYgMHhmZikpOwor ICAgICAgY2FzZSAweDI1OTI6IHJldHVybigoQ0hBUikoMHhkMSAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgyNTkzOiByZXR1cm4oKENIQVIpKDB4ZDIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjVh MDogcmV0dXJuKChDSEFSKSgweGZlICYgMHhmZikpOworICAgICAgZGVmYXVsdDogcmV0dXJuKHR4 X2Nwc3ViKGMpKTsgICAgIC8qIEZvciBib3ggY2hhcmFjdGVycyBldGMgKi8KKyAgICB9Cit9CisK K2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQQyBDb2RlIFBhZ2Ug ODU3ICovCisjaWZkZWYgQ0tfQU5TSUMKK3R4X2NwODU3KFVTSE9SVCBjKQorI2Vsc2UKK3R4X2Nw ODU3KGMpIFVTSE9SVCBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgaWYgKGMgPCAw eDgwKSAgICAgICAgICAgICAgICAgICAgICAgLyogSGFzIEMxIGdyYXBoaWNzICovCisgICAgICBy ZXR1cm4oKENIQVIpKGMgJiAweGZmKSk7CisgICAgc3dpdGNoIChjKSB7CisgICAgICBjYXNlIDB4 MDBjNzogcmV0dXJuKChDSEFSKSgxMjggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBmYzogcmV0 dXJuKChDSEFSKSgxMjkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBlOTogcmV0dXJuKChDSEFS KSgxMzAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBlMjogcmV0dXJuKChDSEFSKSgxMzEgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MDBlNDogcmV0dXJuKChDSEFSKSgxMzIgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MDBlMDogcmV0dXJuKChDSEFSKSgxMzMgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MDBlNTogcmV0dXJuKChDSEFSKSgxMzQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBlNzog cmV0dXJuKChDSEFSKSgxMzUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBlYTogcmV0dXJuKChD SEFSKSgxMzYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBlYjogcmV0dXJuKChDSEFSKSgxMzcg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBlODogcmV0dXJuKChDSEFSKSgxMzggJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MDBlZjogcmV0dXJuKChDSEFSKSgxMzkgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MDBlZTogcmV0dXJuKChDSEFSKSgxNDAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDEz MTogcmV0dXJuKChDSEFSKSgxNDEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBjNDogcmV0dXJu KChDSEFSKSgxNDIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBjNTogcmV0dXJuKChDSEFSKSgx NDMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBjOTogcmV0dXJuKChDSEFSKSgxNDQgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MDBlNjogcmV0dXJuKChDSEFSKSgxNDUgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MDBjNjogcmV0dXJuKChDSEFSKSgxNDYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MDBmNDogcmV0dXJuKChDSEFSKSgxNDcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBmNjogcmV0 dXJuKChDSEFSKSgxNDggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBmMjogcmV0dXJuKChDSEFS KSgxNDkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBmYjogcmV0dXJuKChDSEFSKSgxNTAgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MDBmOTogcmV0dXJuKChDSEFSKSgxNTEgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MDEzMDogcmV0dXJuKChDSEFSKSgxNTIgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MDBkNjogcmV0dXJuKChDSEFSKSgxNTMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBkYzog cmV0dXJuKChDSEFSKSgxNTQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBmODogcmV0dXJuKChD SEFSKSgxNTUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBhMzogcmV0dXJuKChDSEFSKSgxNTYg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBkODogcmV0dXJuKChDSEFSKSgxNTcgJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MDE1ZTogcmV0dXJuKChDSEFSKSgxNTggJiAweGZmKSk7CisgICAgICBj YXNlIDB4MDE1ZjogcmV0dXJuKChDSEFSKSgxNTkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBl MTogcmV0dXJuKChDSEFSKSgxNjAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBlZDogcmV0dXJu KChDSEFSKSgxNjEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBmMzogcmV0dXJuKChDSEFSKSgx NjIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBmYTogcmV0dXJuKChDSEFSKSgxNjMgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MDBmMTogcmV0dXJuKChDSEFSKSgxNjQgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MDBkMTogcmV0dXJuKChDSEFSKSgxNjUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MDExZTogcmV0dXJuKChDSEFSKSgxNjYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDExZjogcmV0 dXJuKChDSEFSKSgxNjcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBiZjogcmV0dXJuKChDSEFS KSgxNjggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBhZTogcmV0dXJuKChDSEFSKSgxNjkgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MDBhYzogcmV0dXJuKChDSEFSKSgxNzAgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MDBiZDogcmV0dXJuKChDSEFSKSgxNzEgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MDBiYzogcmV0dXJuKChDSEFSKSgxNzIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBhMTog cmV0dXJuKChDSEFSKSgxNzMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBhYjogcmV0dXJuKChD SEFSKSgxNzQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBiYjogcmV0dXJuKChDSEFSKSgxNzUg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MjBhYzogcmV0dXJuKChDSEFSKSgyMTMgJiAweGZmKSk7 IC8qIEV1cm8gKi8KKyAgICAgIGNhc2UgMHgyNTkxOiByZXR1cm4oKENIQVIpKDE3NiAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgyNTkyOiByZXR1cm4oKENIQVIpKDE3NyAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgyNTkzOiByZXR1cm4oKENIQVIpKDE3OCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgy NTAyOiByZXR1cm4oKENIQVIpKDE3OSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTI0OiByZXR1 cm4oKENIQVIpKDE4MCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGMxOiByZXR1cm4oKENIQVIp KDE4MSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGMyOiByZXR1cm4oKENIQVIpKDE4MiAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGMwOiByZXR1cm4oKENIQVIpKDE4MyAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgwMGE5OiByZXR1cm4oKENIQVIpKDE4NCAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgyNTYzOiByZXR1cm4oKENIQVIpKDE4NSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTUxOiBy ZXR1cm4oKENIQVIpKDE4NiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTU3OiByZXR1cm4oKENI QVIpKDE4NyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTVkOiByZXR1cm4oKENIQVIpKDE4OCAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGEyOiByZXR1cm4oKENIQVIpKDE4OSAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgwMGE1OiByZXR1cm4oKENIQVIpKDE5MCAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgyNTEwOiByZXR1cm4oKENIQVIpKDE5MSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTE0 OiByZXR1cm4oKENIQVIpKDE5MiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTM0OiByZXR1cm4o KENIQVIpKDE5MyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTJjOiByZXR1cm4oKENIQVIpKDE5 NCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTFjOiByZXR1cm4oKENIQVIpKDE5NSAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgyNTAwOiByZXR1cm4oKENIQVIpKDE5NiAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgyNTNjOiByZXR1cm4oKENIQVIpKDE5NyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgw MGUzOiByZXR1cm4oKENIQVIpKDE5OCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGMzOiByZXR1 cm4oKENIQVIpKDE5OSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTVhOiByZXR1cm4oKENIQVIp KDIwMCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTU0OiByZXR1cm4oKENIQVIpKDIwMSAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTY5OiByZXR1cm4oKENIQVIpKDIwMiAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgyNTY2OiByZXR1cm4oKENIQVIpKDIwMyAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgyNTYwOiByZXR1cm4oKENIQVIpKDIwNCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTUwOiBy ZXR1cm4oKENIQVIpKDIwNSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTZjOiByZXR1cm4oKENI QVIpKDIwNiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGE0OiByZXR1cm4oKENIQVIpKDIwNyAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGJhOiByZXR1cm4oKENIQVIpKDIwOCAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgwMGFhOiByZXR1cm4oKENIQVIpKDIwOSAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgwMGNhOiByZXR1cm4oKENIQVIpKDIxMCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGNi OiByZXR1cm4oKENIQVIpKDIxMSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGM4OiByZXR1cm4o KENIQVIpKDIxMiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGNkOiByZXR1cm4oKENIQVIpKDIx NCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGNlOiByZXR1cm4oKENIQVIpKDIxNSAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgwMGNmOiByZXR1cm4oKENIQVIpKDIxNiAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgyNTE4OiByZXR1cm4oKENIQVIpKDIxNyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgy NTBjOiByZXR1cm4oKENIQVIpKDIxOCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTg4OiByZXR1 cm4oKENIQVIpKDIxOSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTg0OiByZXR1cm4oKENIQVIp KDIyMCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGE2OiByZXR1cm4oKENIQVIpKDIyMSAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGNjOiByZXR1cm4oKENIQVIpKDIyMiAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgyNTgwOiByZXR1cm4oKENIQVIpKDIyMyAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgwMGQzOiByZXR1cm4oKENIQVIpKDIyNCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGRmOiBy ZXR1cm4oKENIQVIpKDIyNSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGQ0OiByZXR1cm4oKENI QVIpKDIyNiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGQyOiByZXR1cm4oKENIQVIpKDIyNyAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGY1OiByZXR1cm4oKENIQVIpKDIyOCAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgwMGQ1OiByZXR1cm4oKENIQVIpKDIyOSAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgwMGI1OiByZXR1cm4oKENIQVIpKDIzMCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGQ3 OiByZXR1cm4oKENIQVIpKDIzMiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGRhOiByZXR1cm4o KENIQVIpKDIzMyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGRiOiByZXR1cm4oKENIQVIpKDIz NCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGQ5OiByZXR1cm4oKENIQVIpKDIzNSAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgwMGVjOiByZXR1cm4oKENIQVIpKDIzNiAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgwMGZmOiByZXR1cm4oKENIQVIpKDIzNyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgw MGFmOiByZXR1cm4oKENIQVIpKDIzOCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGI0OiByZXR1 cm4oKENIQVIpKDIzOSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGFkOiByZXR1cm4oKENIQVIp KDI0MCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGIxOiByZXR1cm4oKENIQVIpKDI0MSAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGJlOiByZXR1cm4oKENIQVIpKDI0MyAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgwMGI2OiByZXR1cm4oKENIQVIpKDI0NCAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgwMGE3OiByZXR1cm4oKENIQVIpKDI0NSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGY3OiBy ZXR1cm4oKENIQVIpKDI0NiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGI4OiByZXR1cm4oKENI QVIpKDI0NyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGIwOiByZXR1cm4oKENIQVIpKDI0OCAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGE4OiByZXR1cm4oKENIQVIpKDI0OSAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgwMGI3OiByZXR1cm4oKENIQVIpKDI1MCAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgwMGI5OiByZXR1cm4oKENIQVIpKDI1MSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGIz OiByZXR1cm4oKENIQVIpKDI1MiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGIyOiByZXR1cm4o KENIQVIpKDI1MyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNWEwOiByZXR1cm4oKENIQVIpKDI1 NCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGEwOiByZXR1cm4oKENIQVIpKDI1NSAmIDB4ZmYp KTsKKyAgICAgIGRlZmF1bHQ6IHJldHVybih0eF9jcHN1YihjKSk7ICAgICAvKiBGb3IgYm94IGNo YXJhY3RlcnMgZXRjICovCisgICAgfQorfQorCitpbnQgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogUEMgQ29kZSBQYWdlIDg2MiAqLworI2lmZGVmIENLX0FOU0lDCit0eF9j cDg2MihVU0hPUlQgYykKKyNlbHNlCit0eF9jcDg2MihjKSBVU0hPUlQgYzsKKyNlbmRpZiAvKiBD S19BTlNJQyAqLworeworICAgIGlmIChjIDwgMHg4MCkgICAgICAgICAgICAgICAgICAgICAgIC8q IEhhcyBDMSBncmFwaGljcyAqLworICAgICAgcmV0dXJuKChDSEFSKShjICYgMHhmZikpOworICAg IHN3aXRjaCAoYykgeworICAgICAgY2FzZSAweDA1ZDA6IHJldHVybigoQ0hBUikoMTI4ICYgMHhm ZikpOworICAgICAgY2FzZSAweDA1ZDE6IHJldHVybigoQ0hBUikoMTI5ICYgMHhmZikpOworICAg ICAgY2FzZSAweDA1ZDI6IHJldHVybigoQ0hBUikoMTMwICYgMHhmZikpOworICAgICAgY2FzZSAw eDA1ZDM6IHJldHVybigoQ0hBUikoMTMxICYgMHhmZikpOworICAgICAgY2FzZSAweDA1ZDQ6IHJl dHVybigoQ0hBUikoMTMyICYgMHhmZikpOworICAgICAgY2FzZSAweDA1ZDU6IHJldHVybigoQ0hB UikoMTMzICYgMHhmZikpOworICAgICAgY2FzZSAweDA1ZDY6IHJldHVybigoQ0hBUikoMTM0ICYg MHhmZikpOworICAgICAgY2FzZSAweDA1ZDc6IHJldHVybigoQ0hBUikoMTM1ICYgMHhmZikpOwor ICAgICAgY2FzZSAweDA1ZDg6IHJldHVybigoQ0hBUikoMTM2ICYgMHhmZikpOworICAgICAgY2Fz ZSAweDA1ZDk6IHJldHVybigoQ0hBUikoMTM3ICYgMHhmZikpOworICAgICAgY2FzZSAweDA1ZGE6 IHJldHVybigoQ0hBUikoMTM4ICYgMHhmZikpOworICAgICAgY2FzZSAweDA1ZGI6IHJldHVybigo Q0hBUikoMTM5ICYgMHhmZikpOworICAgICAgY2FzZSAweDA1ZGM6IHJldHVybigoQ0hBUikoMTQw ICYgMHhmZikpOworICAgICAgY2FzZSAweDA1ZGQ6IHJldHVybigoQ0hBUikoMTQxICYgMHhmZikp OworICAgICAgY2FzZSAweDA1ZGU6IHJldHVybigoQ0hBUikoMTQyICYgMHhmZikpOworICAgICAg Y2FzZSAweDA1ZGY6IHJldHVybigoQ0hBUikoMTQzICYgMHhmZikpOworICAgICAgY2FzZSAweDA1 ZTA6IHJldHVybigoQ0hBUikoMTQ0ICYgMHhmZikpOworICAgICAgY2FzZSAweDA1ZTE6IHJldHVy bigoQ0hBUikoMTQ1ICYgMHhmZikpOworICAgICAgY2FzZSAweDA1ZTI6IHJldHVybigoQ0hBUiko MTQ2ICYgMHhmZikpOworICAgICAgY2FzZSAweDA1ZTM6IHJldHVybigoQ0hBUikoMTQ3ICYgMHhm ZikpOworICAgICAgY2FzZSAweDA1ZTQ6IHJldHVybigoQ0hBUikoMTQ4ICYgMHhmZikpOworICAg ICAgY2FzZSAweDA1ZTU6IHJldHVybigoQ0hBUikoMTQ5ICYgMHhmZikpOworICAgICAgY2FzZSAw eDA1ZTY6IHJldHVybigoQ0hBUikoMTUwICYgMHhmZikpOworICAgICAgY2FzZSAweDA1ZTc6IHJl dHVybigoQ0hBUikoMTUxICYgMHhmZikpOworICAgICAgY2FzZSAweDA1ZTg6IHJldHVybigoQ0hB UikoMTUyICYgMHhmZikpOworICAgICAgY2FzZSAweDA1ZTk6IHJldHVybigoQ0hBUikoMTUzICYg MHhmZikpOworICAgICAgY2FzZSAweDA1ZWE6IHJldHVybigoQ0hBUikoMTU0ICYgMHhmZikpOwor ICAgICAgY2FzZSAweDAwYTI6IHJldHVybigoQ0hBUikoMTU1ICYgMHhmZikpOworICAgICAgY2Fz ZSAweDAwYTM6IHJldHVybigoQ0hBUikoMTU2ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYTU6 IHJldHVybigoQ0hBUikoMTU3ICYgMHhmZikpOworICAgICAgY2FzZSAweDIwYTc6IHJldHVybigo Q0hBUikoMTU4ICYgMHhmZikpOworICAgICAgY2FzZSAweDAxOTI6IHJldHVybigoQ0hBUikoMTU5 ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZTE6IHJldHVybigoQ0hBUikoMTYwICYgMHhmZikp OworICAgICAgY2FzZSAweDAwZWQ6IHJldHVybigoQ0hBUikoMTYxICYgMHhmZikpOworICAgICAg Y2FzZSAweDAwZjM6IHJldHVybigoQ0hBUikoMTYyICYgMHhmZikpOworICAgICAgY2FzZSAweDAw ZmE6IHJldHVybigoQ0hBUikoMTYzICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZjE6IHJldHVy bigoQ0hBUikoMTY0ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZDE6IHJldHVybigoQ0hBUiko MTY1ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYWE6IHJldHVybigoQ0hBUikoMTY2ICYgMHhm ZikpOworICAgICAgY2FzZSAweDAwYmE6IHJldHVybigoQ0hBUikoMTY3ICYgMHhmZikpOworICAg ICAgY2FzZSAweDAwYmY6IHJldHVybigoQ0hBUikoMTY4ICYgMHhmZikpOworICAgICAgY2FzZSAw eDIzMTA6IHJldHVybigoQ0hBUikoMTY5ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYWM6IHJl dHVybigoQ0hBUikoMTcwICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYmQ6IHJldHVybigoQ0hB UikoMTcxICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYmM6IHJldHVybigoQ0hBUikoMTcyICYg MHhmZikpOworICAgICAgY2FzZSAweDAwYTE6IHJldHVybigoQ0hBUikoMTczICYgMHhmZikpOwor ICAgICAgY2FzZSAweDAwYWI6IHJldHVybigoQ0hBUikoMTc0ICYgMHhmZikpOworICAgICAgY2Fz ZSAweDAwYmI6IHJldHVybigoQ0hBUikoMTc1ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1OTE6 IHJldHVybigoQ0hBUikoMTc2ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1OTI6IHJldHVybigo Q0hBUikoMTc3ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1OTM6IHJldHVybigoQ0hBUikoMTc4 ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1MDI6IHJldHVybigoQ0hBUikoMTc5ICYgMHhmZikp OworICAgICAgY2FzZSAweDI1MjQ6IHJldHVybigoQ0hBUikoMTgwICYgMHhmZikpOworICAgICAg Y2FzZSAweDI1NjE6IHJldHVybigoQ0hBUikoMTgxICYgMHhmZikpOworICAgICAgY2FzZSAweDI1 NjI6IHJldHVybigoQ0hBUikoMTgyICYgMHhmZikpOworICAgICAgY2FzZSAweDI1NTY6IHJldHVy bigoQ0hBUikoMTgzICYgMHhmZikpOworICAgICAgY2FzZSAweDI1NTU6IHJldHVybigoQ0hBUiko MTg0ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1NjM6IHJldHVybigoQ0hBUikoMTg1ICYgMHhm ZikpOworICAgICAgY2FzZSAweDI1NTE6IHJldHVybigoQ0hBUikoMTg2ICYgMHhmZikpOworICAg ICAgY2FzZSAweDI1NTc6IHJldHVybigoQ0hBUikoMTg3ICYgMHhmZikpOworICAgICAgY2FzZSAw eDI1NWQ6IHJldHVybigoQ0hBUikoMTg4ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1NWM6IHJl dHVybigoQ0hBUikoMTg5ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1NWI6IHJldHVybigoQ0hB UikoMTkwICYgMHhmZikpOworICAgICAgY2FzZSAweDI1MTA6IHJldHVybigoQ0hBUikoMTkxICYg MHhmZikpOworICAgICAgY2FzZSAweDI1MTQ6IHJldHVybigoQ0hBUikoMTkyICYgMHhmZikpOwor ICAgICAgY2FzZSAweDI1MzQ6IHJldHVybigoQ0hBUikoMTkzICYgMHhmZikpOworICAgICAgY2Fz ZSAweDI1MmM6IHJldHVybigoQ0hBUikoMTk0ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1MWM6 IHJldHVybigoQ0hBUikoMTk1ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1MDA6IHJldHVybigo Q0hBUikoMTk2ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1M2M6IHJldHVybigoQ0hBUikoMTk3 ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1NWU6IHJldHVybigoQ0hBUikoMTk4ICYgMHhmZikp OworICAgICAgY2FzZSAweDI1NWY6IHJldHVybigoQ0hBUikoMTk5ICYgMHhmZikpOworICAgICAg Y2FzZSAweDI1NWE6IHJldHVybigoQ0hBUikoMjAwICYgMHhmZikpOworICAgICAgY2FzZSAweDI1 NTQ6IHJldHVybigoQ0hBUikoMjAxICYgMHhmZikpOworICAgICAgY2FzZSAweDI1Njk6IHJldHVy bigoQ0hBUikoMjAyICYgMHhmZikpOworICAgICAgY2FzZSAweDI1NjY6IHJldHVybigoQ0hBUiko MjAzICYgMHhmZikpOworICAgICAgY2FzZSAweDI1NjA6IHJldHVybigoQ0hBUikoMjA0ICYgMHhm ZikpOworICAgICAgY2FzZSAweDI1NTA6IHJldHVybigoQ0hBUikoMjA1ICYgMHhmZikpOworICAg ICAgY2FzZSAweDI1NmM6IHJldHVybigoQ0hBUikoMjA2ICYgMHhmZikpOworICAgICAgY2FzZSAw eDI1Njc6IHJldHVybigoQ0hBUikoMjA3ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1Njg6IHJl dHVybigoQ0hBUikoMjA4ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1NjQ6IHJldHVybigoQ0hB UikoMjA5ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1NjU6IHJldHVybigoQ0hBUikoMjEwICYg MHhmZikpOworICAgICAgY2FzZSAweDI1NTk6IHJldHVybigoQ0hBUikoMjExICYgMHhmZikpOwor ICAgICAgY2FzZSAweDI1NTg6IHJldHVybigoQ0hBUikoMjEyICYgMHhmZikpOworICAgICAgY2Fz ZSAweDI1NTI6IHJldHVybigoQ0hBUikoMjEzICYgMHhmZikpOworICAgICAgY2FzZSAweDI1NTM6 IHJldHVybigoQ0hBUikoMjE0ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1NmI6IHJldHVybigo Q0hBUikoMjE1ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1NmE6IHJldHVybigoQ0hBUikoMjE2 ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1MTg6IHJldHVybigoQ0hBUikoMjE3ICYgMHhmZikp OworICAgICAgY2FzZSAweDI1MGM6IHJldHVybigoQ0hBUikoMjE4ICYgMHhmZikpOworICAgICAg Y2FzZSAweDI1ODg6IHJldHVybigoQ0hBUikoMjE5ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1 ODQ6IHJldHVybigoQ0hBUikoMjIwICYgMHhmZikpOworICAgICAgY2FzZSAweDI1OGM6IHJldHVy bigoQ0hBUikoMjIxICYgMHhmZikpOworICAgICAgY2FzZSAweDI1OTA6IHJldHVybigoQ0hBUiko MjIyICYgMHhmZikpOworICAgICAgY2FzZSAweDI1ODA6IHJldHVybigoQ0hBUikoMjIzICYgMHhm ZikpOworICAgICAgY2FzZSAweDAzYjE6IHJldHVybigoQ0hBUikoMjI0ICYgMHhmZikpOworICAg ICAgY2FzZSAweDAwZGY6IHJldHVybigoQ0hBUikoMjI1ICYgMHhmZikpOworICAgICAgY2FzZSAw eDAzOTM6IHJldHVybigoQ0hBUikoMjI2ICYgMHhmZikpOworICAgICAgY2FzZSAweDAzYzA6IHJl dHVybigoQ0hBUikoMjI3ICYgMHhmZikpOworICAgICAgY2FzZSAweDAzYTM6IHJldHVybigoQ0hB UikoMjI4ICYgMHhmZikpOworICAgICAgY2FzZSAweDAzYzM6IHJldHVybigoQ0hBUikoMjI5ICYg MHhmZikpOworICAgICAgY2FzZSAweDAwYjU6IHJldHVybigoQ0hBUikoMjMwICYgMHhmZikpOwor ICAgICAgY2FzZSAweDAzYzQ6IHJldHVybigoQ0hBUikoMjMxICYgMHhmZikpOworICAgICAgY2Fz ZSAweDAzYTY6IHJldHVybigoQ0hBUikoMjMyICYgMHhmZikpOworICAgICAgY2FzZSAweDAzOTg6 IHJldHVybigoQ0hBUikoMjMzICYgMHhmZikpOworICAgICAgY2FzZSAweDAzYTk6IHJldHVybigo Q0hBUikoMjM0ICYgMHhmZikpOworICAgICAgY2FzZSAweDAzYjQ6IHJldHVybigoQ0hBUikoMjM1 ICYgMHhmZikpOworICAgICAgY2FzZSAweDIyMWU6IHJldHVybigoQ0hBUikoMjM2ICYgMHhmZikp OworICAgICAgY2FzZSAweDAzYzY6IHJldHVybigoQ0hBUikoMjM3ICYgMHhmZikpOworICAgICAg Y2FzZSAweDAzYjU6IHJldHVybigoQ0hBUikoMjM4ICYgMHhmZikpOworICAgICAgY2FzZSAweDIy Mjk6IHJldHVybigoQ0hBUikoMjM5ICYgMHhmZikpOworICAgICAgY2FzZSAweDIyNjE6IHJldHVy bigoQ0hBUikoMjQwICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYjE6IHJldHVybigoQ0hBUiko MjQxICYgMHhmZikpOworICAgICAgY2FzZSAweDIyNjU6IHJldHVybigoQ0hBUikoMjQyICYgMHhm ZikpOworICAgICAgY2FzZSAweDIyNjQ6IHJldHVybigoQ0hBUikoMjQzICYgMHhmZikpOworICAg ICAgY2FzZSAweDIzMjA6IHJldHVybigoQ0hBUikoMjQ0ICYgMHhmZikpOworICAgICAgY2FzZSAw eDIzMjE6IHJldHVybigoQ0hBUikoMjQ1ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZjc6IHJl dHVybigoQ0hBUikoMjQ2ICYgMHhmZikpOworICAgICAgY2FzZSAweDIyNDg6IHJldHVybigoQ0hB UikoMjQ3ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYjA6IHJldHVybigoQ0hBUikoMjQ4ICYg MHhmZikpOworICAgICAgY2FzZSAweDIyMTk6IHJldHVybigoQ0hBUikoMjQ5ICYgMHhmZikpOwor ICAgICAgY2FzZSAweDAwYjc6IHJldHVybigoQ0hBUikoMjUwICYgMHhmZikpOworICAgICAgY2Fz ZSAweDIyMWE6IHJldHVybigoQ0hBUikoMjUxICYgMHhmZikpOworICAgICAgY2FzZSAweDIwN2Y6 IHJldHVybigoQ0hBUikoMjUyICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYjI6IHJldHVybigo Q0hBUikoMjUzICYgMHhmZikpOworICAgICAgY2FzZSAweDI1YTA6IHJldHVybigoQ0hBUikoMjU0 ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYTA6IHJldHVybigoQ0hBUikoMjU1ICYgMHhmZikp OworICAgICAgZGVmYXVsdDogcmV0dXJuKHR4X2Nwc3ViKGMpKTsgICAgIC8qIEZvciBib3ggY2hh cmFjdGVycyBldGMgKi8KKyAgICB9Cit9CisKK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBQQyBDb2RlIFBhZ2UgODY0ICovCisjaWZkZWYgQ0tfQU5TSUMKK3R4X2Nw ODY0KFVTSE9SVCBjKQorI2Vsc2UKK3R4X2NwODY0KGMpIFVTSE9SVCBjOworI2VuZGlmIC8qIENL X0FOU0lDICovCit7CisgICAgaWYgKGMgPCAweDgwKSAgICAgICAgICAgICAgICAgICAgICAgLyog SGFzIEMxIGdyYXBoaWNzICovCisgICAgICByZXR1cm4oKENIQVIpKGMgJiAweGZmKSk7CisgICAg c3dpdGNoIChjKSB7CisgICAgICBjYXNlIDB4MDBiMDogcmV0dXJuKChDSEFSKTB4ODAgJiAweGZm KTsKKyAgICAgIGNhc2UgMHgwMGI3OiByZXR1cm4oKENIQVIpMHg4MSAmIDB4ZmYpOworICAgICAg Y2FzZSAweDIyMTk6IHJldHVybigoQ0hBUikweDgyICYgMHhmZik7CisgICAgICBjYXNlIDB4MjIx YTogcmV0dXJuKChDSEFSKTB4ODMgJiAweGZmKTsKKyAgICAgIGNhc2UgMHgyNTkyOiByZXR1cm4o KENIQVIpMHg4NCAmIDB4ZmYpOworICAgICAgY2FzZSAweDI1MDA6IHJldHVybigoQ0hBUikweDg1 ICYgMHhmZik7CisgICAgICBjYXNlIDB4MjUwMjogcmV0dXJuKChDSEFSKTB4ODYgJiAweGZmKTsK KyAgICAgIGNhc2UgMHgyNTNjOiByZXR1cm4oKENIQVIpMHg4NyAmIDB4ZmYpOworICAgICAgY2Fz ZSAweDI1MjQ6IHJldHVybigoQ0hBUikweDg4ICYgMHhmZik7CisgICAgICBjYXNlIDB4MjUyYzog cmV0dXJuKChDSEFSKTB4ODkgJiAweGZmKTsKKyAgICAgIGNhc2UgMHgyNTFjOiByZXR1cm4oKENI QVIpMHg4YSAmIDB4ZmYpOworICAgICAgY2FzZSAweDI1MzQ6IHJldHVybigoQ0hBUikweDhiICYg MHhmZik7CisgICAgICBjYXNlIDB4MjUxMDogcmV0dXJuKChDSEFSKTB4OGMgJiAweGZmKTsKKyAg ICAgIGNhc2UgMHgyNTBjOiByZXR1cm4oKENIQVIpMHg4ZCAmIDB4ZmYpOworICAgICAgY2FzZSAw eDI1MTQ6IHJldHVybigoQ0hBUikweDhlICYgMHhmZik7CisgICAgICBjYXNlIDB4MjUxODogcmV0 dXJuKChDSEFSKTB4OGYgJiAweGZmKTsKKyAgICAgIGNhc2UgMHgwM2IyOiByZXR1cm4oKENIQVIp MHg5MCAmIDB4ZmYpOworICAgICAgY2FzZSAweDIyMWU6IHJldHVybigoQ0hBUikweDkxICYgMHhm Zik7CisgICAgICBjYXNlIDB4MDNjNjogcmV0dXJuKChDSEFSKTB4OTIgJiAweGZmKTsKKyAgICAg IGNhc2UgMHgwMGIxOiByZXR1cm4oKENIQVIpMHg5MyAmIDB4ZmYpOworICAgICAgY2FzZSAweDAw YmQ6IHJldHVybigoQ0hBUikweDk0ICYgMHhmZik7CisgICAgICBjYXNlIDB4MDBiYzogcmV0dXJu KChDSEFSKTB4OTUgJiAweGZmKTsKKyAgICAgIGNhc2UgMHgyMjQ4OiByZXR1cm4oKENIQVIpMHg5 NiAmIDB4ZmYpOworICAgICAgY2FzZSAweDAwYWI6IHJldHVybigoQ0hBUikweDk3ICYgMHhmZik7 CisgICAgICBjYXNlIDB4MDBiYjogcmV0dXJuKChDSEFSKTB4OTggJiAweGZmKTsKKyAgICAgIGNh c2UgMHhmZWY3OiByZXR1cm4oKENIQVIpMHg5OSAmIDB4ZmYpOworICAgICAgY2FzZSAweGZlZjg6 IHJldHVybigoQ0hBUikweDlhICYgMHhmZik7CisgICAgICBjYXNlIDB4ZmVmYjogcmV0dXJuKChD SEFSKTB4OWQgJiAweGZmKTsKKyAgICAgIGNhc2UgMHhmZWZjOiByZXR1cm4oKENIQVIpMHg5ZSAm IDB4ZmYpOworICAgICAgY2FzZSAweDAwYTA6IHJldHVybigoQ0hBUikweGEwICYgMHhmZik7Cisg ICAgICBjYXNlIDB4MDBhZDogcmV0dXJuKChDSEFSKTB4YTEgJiAweGZmKTsKKyAgICAgIGNhc2Ug MHhmZTgyOiByZXR1cm4oKENIQVIpMHhhMiAmIDB4ZmYpOworICAgICAgY2FzZSAweDAwYTM6IHJl dHVybigoQ0hBUikweGEzICYgMHhmZik7CisgICAgICBjYXNlIDB4MDBhNDogcmV0dXJuKChDSEFS KTB4YTQgJiAweGZmKTsKKyAgICAgIGNhc2UgMHhmZTg0OiByZXR1cm4oKENIQVIpMHhhNSAmIDB4 ZmYpOworICAgICAgY2FzZSAweGZlOGU6IHJldHVybigoQ0hBUikweGE4ICYgMHhmZik7CisgICAg ICBjYXNlIDB4ZmU4ZjogcmV0dXJuKChDSEFSKTB4YTkgJiAweGZmKTsKKyAgICAgIGNhc2UgMHhm ZTk1OiByZXR1cm4oKENIQVIpMHhhYSAmIDB4ZmYpOworICAgICAgY2FzZSAweGZlOTk6IHJldHVy bigoQ0hBUikweGFiICYgMHhmZik7CisgICAgICBjYXNlIDB4MDYwYzogcmV0dXJuKChDSEFSKTB4 YWMgJiAweGZmKTsKKyAgICAgIGNhc2UgMHhmZTlkOiByZXR1cm4oKENIQVIpMHhhZCAmIDB4ZmYp OworICAgICAgY2FzZSAweGZlYTE6IHJldHVybigoQ0hBUikweGFlICYgMHhmZik7CisgICAgICBj YXNlIDB4ZmVhNTogcmV0dXJuKChDSEFSKTB4YWYgJiAweGZmKTsKKyAgICAgIGNhc2UgMHgwNjYw OiByZXR1cm4oKENIQVIpMHhiMCAmIDB4ZmYpOworICAgICAgY2FzZSAweDA2NjE6IHJldHVybigo Q0hBUikweGIxICYgMHhmZik7CisgICAgICBjYXNlIDB4MDY2MjogcmV0dXJuKChDSEFSKTB4YjIg JiAweGZmKTsKKyAgICAgIGNhc2UgMHgwNjYzOiByZXR1cm4oKENIQVIpMHhiMyAmIDB4ZmYpOwor ICAgICAgY2FzZSAweDA2NjQ6IHJldHVybigoQ0hBUikweGI0ICYgMHhmZik7CisgICAgICBjYXNl IDB4MDY2NTogcmV0dXJuKChDSEFSKTB4YjUgJiAweGZmKTsKKyAgICAgIGNhc2UgMHgwNjY2OiBy ZXR1cm4oKENIQVIpMHhiNiAmIDB4ZmYpOworICAgICAgY2FzZSAweDA2Njc6IHJldHVybigoQ0hB UikweGI3ICYgMHhmZik7CisgICAgICBjYXNlIDB4MDY2ODogcmV0dXJuKChDSEFSKTB4YjggJiAw eGZmKTsKKyAgICAgIGNhc2UgMHgwNjY5OiByZXR1cm4oKENIQVIpMHhiOSAmIDB4ZmYpOworICAg ICAgY2FzZSAweGZlZDE6IHJldHVybigoQ0hBUikweGJhICYgMHhmZik7CisgICAgICBjYXNlIDB4 MDYxYjogcmV0dXJuKChDSEFSKTB4YmIgJiAweGZmKTsKKyAgICAgIGNhc2UgMHhmZWIxOiByZXR1 cm4oKENIQVIpMHhiYyAmIDB4ZmYpOworICAgICAgY2FzZSAweGZlYjU6IHJldHVybigoQ0hBUikw eGJkICYgMHhmZik7CisgICAgICBjYXNlIDB4ZmViOTogcmV0dXJuKChDSEFSKTB4YmUgJiAweGZm KTsKKyAgICAgIGNhc2UgMHgwNjFmOiByZXR1cm4oKENIQVIpMHhiZiAmIDB4ZmYpOworICAgICAg Y2FzZSAweDAwYTI6IHJldHVybigoQ0hBUikweGMwICYgMHhmZik7CisgICAgICBjYXNlIDB4ZmU4 MDogcmV0dXJuKChDSEFSKTB4YzEgJiAweGZmKTsKKyAgICAgIGNhc2UgMHhmZTgxOiByZXR1cm4o KENIQVIpMHhjMiAmIDB4ZmYpOworICAgICAgY2FzZSAweGZlODM6IHJldHVybigoQ0hBUikweGMz ICYgMHhmZik7CisgICAgICBjYXNlIDB4ZmU4NTogcmV0dXJuKChDSEFSKTB4YzQgJiAweGZmKTsK KyAgICAgIGNhc2UgMHhmZWNhOiByZXR1cm4oKENIQVIpMHhjNSAmIDB4ZmYpOworICAgICAgY2Fz ZSAweGZlOGI6IHJldHVybigoQ0hBUikweGM2ICYgMHhmZik7CisgICAgICBjYXNlIDB4ZmU4ZDog cmV0dXJuKChDSEFSKTB4YzcgJiAweGZmKTsKKyAgICAgIGNhc2UgMHhmZTkxOiByZXR1cm4oKENI QVIpMHhjOCAmIDB4ZmYpOworICAgICAgY2FzZSAweGZlOTM6IHJldHVybigoQ0hBUikweGM5ICYg MHhmZik7CisgICAgICBjYXNlIDB4ZmU5NzogcmV0dXJuKChDSEFSKTB4Y2EgJiAweGZmKTsKKyAg ICAgIGNhc2UgMHhmZTliOiByZXR1cm4oKENIQVIpMHhjYiAmIDB4ZmYpOworICAgICAgY2FzZSAw eGZlOWY6IHJldHVybigoQ0hBUikweGNjICYgMHhmZik7CisgICAgICBjYXNlIDB4ZmVhMzogcmV0 dXJuKChDSEFSKTB4Y2QgJiAweGZmKTsKKyAgICAgIGNhc2UgMHhmZWE3OiByZXR1cm4oKENIQVIp MHhjZSAmIDB4ZmYpOworICAgICAgY2FzZSAweGZlYTk6IHJldHVybigoQ0hBUikweGNmICYgMHhm Zik7CisgICAgICBjYXNlIDB4ZmVhYjogcmV0dXJuKChDSEFSKTB4ZDAgJiAweGZmKTsKKyAgICAg IGNhc2UgMHhmZWFkOiByZXR1cm4oKENIQVIpMHhkMSAmIDB4ZmYpOworICAgICAgY2FzZSAweGZl YWY6IHJldHVybigoQ0hBUikweGQyICYgMHhmZik7CisgICAgICBjYXNlIDB4ZmViMzogcmV0dXJu KChDSEFSKTB4ZDMgJiAweGZmKTsKKyAgICAgIGNhc2UgMHhmZWI3OiByZXR1cm4oKENIQVIpMHhk NCAmIDB4ZmYpOworICAgICAgY2FzZSAweGZlYmI6IHJldHVybigoQ0hBUikweGQ1ICYgMHhmZik7 CisgICAgICBjYXNlIDB4ZmViZjogcmV0dXJuKChDSEFSKTB4ZDYgJiAweGZmKTsKKyAgICAgIGNh c2UgMHhmZWMxOiByZXR1cm4oKENIQVIpMHhkNyAmIDB4ZmYpOworICAgICAgY2FzZSAweGZlYzU6 IHJldHVybigoQ0hBUikweGQ4ICYgMHhmZik7CisgICAgICBjYXNlIDB4ZmVjYjogcmV0dXJuKChD SEFSKTB4ZDkgJiAweGZmKTsKKyAgICAgIGNhc2UgMHhmZWNmOiByZXR1cm4oKENIQVIpMHhkYSAm IDB4ZmYpOworICAgICAgY2FzZSAweDAwYTY6IHJldHVybigoQ0hBUikweGRiICYgMHhmZik7Cisg ICAgICBjYXNlIDB4MDBhYzogcmV0dXJuKChDSEFSKTB4ZGMgJiAweGZmKTsKKyAgICAgIGNhc2Ug MHgwMGY3OiByZXR1cm4oKENIQVIpMHhkZCAmIDB4ZmYpOworICAgICAgY2FzZSAweDAwZDc6IHJl dHVybigoQ0hBUikweGRlICYgMHhmZik7CisgICAgICBjYXNlIDB4ZmVjOTogcmV0dXJuKChDSEFS KTB4ZGYgJiAweGZmKTsKKyAgICAgIGNhc2UgMHgwNjQwOiByZXR1cm4oKENIQVIpMHhlMCAmIDB4 ZmYpOworICAgICAgY2FzZSAweGZlZDM6IHJldHVybigoQ0hBUikweGUxICYgMHhmZik7CisgICAg ICBjYXNlIDB4ZmVkNzogcmV0dXJuKChDSEFSKTB4ZTIgJiAweGZmKTsKKyAgICAgIGNhc2UgMHhm ZWRiOiByZXR1cm4oKENIQVIpMHhlMyAmIDB4ZmYpOworICAgICAgY2FzZSAweGZlZGY6IHJldHVy bigoQ0hBUikweGU0ICYgMHhmZik7CisgICAgICBjYXNlIDB4ZmVlMzogcmV0dXJuKChDSEFSKTB4 ZTUgJiAweGZmKTsKKyAgICAgIGNhc2UgMHhmZWU3OiByZXR1cm4oKENIQVIpMHhlNiAmIDB4ZmYp OworICAgICAgY2FzZSAweGZlZWI6IHJldHVybigoQ0hBUikweGU3ICYgMHhmZik7CisgICAgICBj YXNlIDB4ZmVlZDogcmV0dXJuKChDSEFSKTB4ZTggJiAweGZmKTsKKyAgICAgIGNhc2UgMHhmZWVm OiByZXR1cm4oKENIQVIpMHhlOSAmIDB4ZmYpOworICAgICAgY2FzZSAweGZlZjM6IHJldHVybigo Q0hBUikweGVhICYgMHhmZik7CisgICAgICBjYXNlIDB4ZmViZDogcmV0dXJuKChDSEFSKTB4ZWIg JiAweGZmKTsKKyAgICAgIGNhc2UgMHhmZWNjOiByZXR1cm4oKENIQVIpMHhlYyAmIDB4ZmYpOwor ICAgICAgY2FzZSAweGZlY2U6IHJldHVybigoQ0hBUikweGVkICYgMHhmZik7CisgICAgICBjYXNl IDB4ZmVjZDogcmV0dXJuKChDSEFSKTB4ZWUgJiAweGZmKTsKKyAgICAgIGNhc2UgMHhmZWUxOiBy ZXR1cm4oKENIQVIpMHhlZiAmIDB4ZmYpOworICAgICAgY2FzZSAweGZlN2Q6IHJldHVybigoQ0hB UikweGYwICYgMHhmZik7CisgICAgICBjYXNlIDB4MDY1MTogcmV0dXJuKChDSEFSKTB4ZjEgJiAw eGZmKTsKKyAgICAgIGNhc2UgMHhmZWU1OiByZXR1cm4oKENIQVIpMHhmMiAmIDB4ZmYpOworICAg ICAgY2FzZSAweGZlZTk6IHJldHVybigoQ0hBUikweGYzICYgMHhmZik7CisgICAgICBjYXNlIDB4 ZmVlYzogcmV0dXJuKChDSEFSKTB4ZjQgJiAweGZmKTsKKyAgICAgIGNhc2UgMHhmZWYwOiByZXR1 cm4oKENIQVIpMHhmNSAmIDB4ZmYpOworICAgICAgY2FzZSAweGZlZjI6IHJldHVybigoQ0hBUikw eGY2ICYgMHhmZik7CisgICAgICBjYXNlIDB4ZmVkMDogcmV0dXJuKChDSEFSKTB4ZjcgJiAweGZm KTsKKyAgICAgIGNhc2UgMHhmZWQ1OiByZXR1cm4oKENIQVIpMHhmOCAmIDB4ZmYpOworICAgICAg Y2FzZSAweGZlZjU6IHJldHVybigoQ0hBUikweGY5ICYgMHhmZik7CisgICAgICBjYXNlIDB4ZmVm NjogcmV0dXJuKChDSEFSKTB4ZmEgJiAweGZmKTsKKyAgICAgIGNhc2UgMHhmZWRkOiByZXR1cm4o KENIQVIpMHhmYiAmIDB4ZmYpOworICAgICAgY2FzZSAweGZlZDk6IHJldHVybigoQ0hBUikweGZj ICYgMHhmZik7CisgICAgICBjYXNlIDB4ZmVmMTogcmV0dXJuKChDSEFSKTB4ZmQgJiAweGZmKTsK KyAgICAgIGNhc2UgMHgyNWEwOiByZXR1cm4oKENIQVIpMHhmZSAmIDB4ZmYpOworICAgICAgZGVm YXVsdDogcmV0dXJuKHR4X2Nwc3ViKGMpKTsgICAgIC8qIEZvciBib3ggY2hhcmFjdGVycyBldGMg Ki8KKyAgICB9Cit9CisKK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBQQyBDb2RlIFBhZ2UgODY2ICovCisjaWZkZWYgQ0tfQU5TSUMKK3R4X2NwODY2KFVTSE9SVCBj KQorI2Vsc2UKK3R4X2NwODY2KGMpIFVTSE9SVCBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7 CisgICAgaWYgKGMgPCAweDgwKSAgICAgICAgICAgICAgICAgICAgICAgLyogSGFzIEMxIGdyYXBo aWNzICovCisgICAgICByZXR1cm4oKENIQVIpKGMgJiAweGZmKSk7CisgICAgc3dpdGNoIChjKSB7 CisgICAgICBjYXNlIDB4MDBhMDogcmV0dXJuKChDSEFSKSgyNTUgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MDBhNDogcmV0dXJuKChDSEFSKSgyNTMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBi MDogcmV0dXJuKChDSEFSKSgyNDggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBiNzogcmV0dXJu KChDSEFSKSgyNTAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQwMTogcmV0dXJuKChDSEFSKSgy NDAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQwNDogcmV0dXJuKChDSEFSKSgyNDIgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MDQwNzogcmV0dXJuKChDSEFSKSgyNDQgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MDQwZTogcmV0dXJuKChDSEFSKSgyNDYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MDQxMDogcmV0dXJuKChDSEFSKSgxMjggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQxMTogcmV0 dXJuKChDSEFSKSgxMjkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQxMjogcmV0dXJuKChDSEFS KSgxMzAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQxMzogcmV0dXJuKChDSEFSKSgxMzEgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MDQxNDogcmV0dXJuKChDSEFSKSgxMzIgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MDQxNTogcmV0dXJuKChDSEFSKSgxMzMgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MDQxNjogcmV0dXJuKChDSEFSKSgxMzQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQxNzog cmV0dXJuKChDSEFSKSgxMzUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQxODogcmV0dXJuKChD SEFSKSgxMzYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQxOTogcmV0dXJuKChDSEFSKSgxMzcg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQxYTogcmV0dXJuKChDSEFSKSgxMzggJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MDQxYjogcmV0dXJuKChDSEFSKSgxMzkgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MDQxYzogcmV0dXJuKChDSEFSKSgxNDAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQx ZDogcmV0dXJuKChDSEFSKSgxNDEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQxZTogcmV0dXJu KChDSEFSKSgxNDIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQxZjogcmV0dXJuKChDSEFSKSgx NDMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQyMDogcmV0dXJuKChDSEFSKSgxNDQgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MDQyMTogcmV0dXJuKChDSEFSKSgxNDUgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MDQyMjogcmV0dXJuKChDSEFSKSgxNDYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MDQyMzogcmV0dXJuKChDSEFSKSgxNDcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQyNDogcmV0 dXJuKChDSEFSKSgxNDggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQyNTogcmV0dXJuKChDSEFS KSgxNDkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQyNjogcmV0dXJuKChDSEFSKSgxNTAgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MDQyNzogcmV0dXJuKChDSEFSKSgxNTEgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MDQyODogcmV0dXJuKChDSEFSKSgxNTIgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MDQyOTogcmV0dXJuKChDSEFSKSgxNTMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQyYTog cmV0dXJuKChDSEFSKSgxNTQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQyYjogcmV0dXJuKChD SEFSKSgxNTUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQyYzogcmV0dXJuKChDSEFSKSgxNTYg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQyZDogcmV0dXJuKChDSEFSKSgxNTcgJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MDQyZTogcmV0dXJuKChDSEFSKSgxNTggJiAweGZmKSk7CisgICAgICBj YXNlIDB4MDQyZjogcmV0dXJuKChDSEFSKSgxNTkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQz MDogcmV0dXJuKChDSEFSKSgxNjAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQzMTogcmV0dXJu KChDSEFSKSgxNjEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQzMjogcmV0dXJuKChDSEFSKSgx NjIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQzMzogcmV0dXJuKChDSEFSKSgxNjMgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MDQzNDogcmV0dXJuKChDSEFSKSgxNjQgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MDQzNTogcmV0dXJuKChDSEFSKSgxNjUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MDQzNjogcmV0dXJuKChDSEFSKSgxNjYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQzNzogcmV0 dXJuKChDSEFSKSgxNjcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQzODogcmV0dXJuKChDSEFS KSgxNjggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQzOTogcmV0dXJuKChDSEFSKSgxNjkgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MDQzYTogcmV0dXJuKChDSEFSKSgxNzAgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MDQzYjogcmV0dXJuKChDSEFSKSgxNzEgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MDQzYzogcmV0dXJuKChDSEFSKSgxNzIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQzZDog cmV0dXJuKChDSEFSKSgxNzMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQzZTogcmV0dXJuKChD SEFSKSgxNzQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQzZjogcmV0dXJuKChDSEFSKSgxNzUg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQ0MDogcmV0dXJuKChDSEFSKSgyMjQgJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MDQ0MTogcmV0dXJuKChDSEFSKSgyMjUgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MDQ0MjogcmV0dXJuKChDSEFSKSgyMjYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQ0 MzogcmV0dXJuKChDSEFSKSgyMjcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQ0NDogcmV0dXJu KChDSEFSKSgyMjggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQ0NTogcmV0dXJuKChDSEFSKSgy MjkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQ0NjogcmV0dXJuKChDSEFSKSgyMzAgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MDQ0NzogcmV0dXJuKChDSEFSKSgyMzEgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MDQ0ODogcmV0dXJuKChDSEFSKSgyMzIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MDQ0OTogcmV0dXJuKChDSEFSKSgyMzMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQ0YTogcmV0 dXJuKChDSEFSKSgyMzQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQ0YjogcmV0dXJuKChDSEFS KSgyMzUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQ0YzogcmV0dXJuKChDSEFSKSgyMzYgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MDQ0ZDogcmV0dXJuKChDSEFSKSgyMzcgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MDQ0ZTogcmV0dXJuKChDSEFSKSgyMzggJiAweGZmKSk7CisgICAgICBjYXNl IDB4MDQ0ZjogcmV0dXJuKChDSEFSKSgyMzkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQ1MTog cmV0dXJuKChDSEFSKSgyNDEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQ1NDogcmV0dXJuKChD SEFSKSgyNDMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQ1NzogcmV0dXJuKChDSEFSKSgyNDUg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQ1ZTogcmV0dXJuKChDSEFSKSgyNDcgJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MjExNjogcmV0dXJuKChDSEFSKSgyNTIgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MjIxOTogcmV0dXJuKChDSEFSKSgyNDkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjIx YTogcmV0dXJuKChDSEFSKSgyNTEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjUwMDogcmV0dXJu KChDSEFSKSgxOTYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjUwMjogcmV0dXJuKChDSEFSKSgx NzkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjUwYzogcmV0dXJuKChDSEFSKSgyMTggJiAweGZm KSk7CisgICAgICBjYXNlIDB4MjUxMDogcmV0dXJuKChDSEFSKSgxOTEgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MjUxNDogcmV0dXJuKChDSEFSKSgxOTIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MjUxODogcmV0dXJuKChDSEFSKSgyMTcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjUxYzogcmV0 dXJuKChDSEFSKSgxOTUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjUyNDogcmV0dXJuKChDSEFS KSgxODAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjUyYzogcmV0dXJuKChDSEFSKSgxOTQgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MjUzNDogcmV0dXJuKChDSEFSKSgxOTMgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MjUzYzogcmV0dXJuKChDSEFSKSgxOTcgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MjU1MDogcmV0dXJuKChDSEFSKSgyMDUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU1MTog cmV0dXJuKChDSEFSKSgxODYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU1MjogcmV0dXJuKChD SEFSKSgyMTMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU1MzogcmV0dXJuKChDSEFSKSgyMTQg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU1NDogcmV0dXJuKChDSEFSKSgyMDEgJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MjU1NTogcmV0dXJuKChDSEFSKSgxODQgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MjU1NjogcmV0dXJuKChDSEFSKSgxODMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU1 NzogcmV0dXJuKChDSEFSKSgxODcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU1ODogcmV0dXJu KChDSEFSKSgyMTIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU1OTogcmV0dXJuKChDSEFSKSgy MTEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU1YTogcmV0dXJuKChDSEFSKSgyMDAgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MjU1YjogcmV0dXJuKChDSEFSKSgxOTAgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MjU1YzogcmV0dXJuKChDSEFSKSgxODkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MjU1ZDogcmV0dXJuKChDSEFSKSgxODggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU1ZTogcmV0 dXJuKChDSEFSKSgxOTggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU1ZjogcmV0dXJuKChDSEFS KSgxOTkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU2MDogcmV0dXJuKChDSEFSKSgyMDQgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MjU2MTogcmV0dXJuKChDSEFSKSgxODEgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MjU2MjogcmV0dXJuKChDSEFSKSgxODIgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MjU2MzogcmV0dXJuKChDSEFSKSgxODUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU2NDog cmV0dXJuKChDSEFSKSgyMDkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU2NTogcmV0dXJuKChD SEFSKSgyMTAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU2NjogcmV0dXJuKChDSEFSKSgyMDMg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU2NzogcmV0dXJuKChDSEFSKSgyMDcgJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MjU2ODogcmV0dXJuKChDSEFSKSgyMDggJiAweGZmKSk7CisgICAgICBj YXNlIDB4MjU2OTogcmV0dXJuKChDSEFSKSgyMDIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU2 YTogcmV0dXJuKChDSEFSKSgyMTYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU2YjogcmV0dXJu KChDSEFSKSgyMTUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU2YzogcmV0dXJuKChDSEFSKSgy MDYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU4MDogcmV0dXJuKChDSEFSKSgyMjMgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MjU4NDogcmV0dXJuKChDSEFSKSgyMjAgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MjU4ODogcmV0dXJuKChDSEFSKSgyMTkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MjU4YzogcmV0dXJuKChDSEFSKSgyMjEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU5MDogcmV0 dXJuKChDSEFSKSgyMjIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU5MTogcmV0dXJuKChDSEFS KSgxNzYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU5MjogcmV0dXJuKChDSEFSKSgxNzcgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MjU5MzogcmV0dXJuKChDSEFSKSgxNzggJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MjVhMDogcmV0dXJuKChDSEFSKSgyNTQgJiAweGZmKSk7CisgICAgICBkZWZh dWx0OiByZXR1cm4odHhfY3BzdWIoYykpOyAgICAgLyogRm9yIGJveCBjaGFyYWN0ZXJzIGV0YyAq LworICAgIH0KK30KKworaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IFBDIENvZGUgUGFnZSA4NjkgKi8KKyNpZmRlZiBDS19BTlNJQwordHhfY3A4NjkoVVNIT1JUIGMp CisjZWxzZQordHhfY3A4NjkoYykgVVNIT1JUIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sK KyAgICBpZiAoYyA8IDB4ODApICAgICAgICAgICAgICAgICAgICAgICAvKiBIYXMgQzEgZ3JhcGhp Y3MgKi8KKyAgICAgIHJldHVybigoQ0hBUikoYyAmIDB4ZmYpKTsKKyAgICBzd2l0Y2ggKGMpIHsK KyAgICAgIGNhc2UgMHgwMGEwOiByZXR1cm4oKENIQVIpKDI1NSAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgwMGEzOiByZXR1cm4oKENIQVIpKDE1NiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGE2 OiByZXR1cm4oKENIQVIpKDEzOCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGE3OiByZXR1cm4o KENIQVIpKDI0NSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGE4OiByZXR1cm4oKENIQVIpKDI0 OSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGE5OiByZXR1cm4oKENIQVIpKDE1MSAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgwMGFiOiByZXR1cm4oKENIQVIpKDE3NCAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgwMGFjOiByZXR1cm4oKENIQVIpKDEzNyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgw MGFkOiByZXR1cm4oKENIQVIpKDI0MCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGIwOiByZXR1 cm4oKENIQVIpKDI0OCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGIxOiByZXR1cm4oKENIQVIp KDI0MSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGIyOiByZXR1cm4oKENIQVIpKDE1MyAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGIzOiByZXR1cm4oKENIQVIpKDE1NCAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgwMGI3OiByZXR1cm4oKENIQVIpKDEzNiAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgwMGJiOiByZXR1cm4oKENIQVIpKDE3NSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGJkOiBy ZXR1cm4oKENIQVIpKDE3MSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMzg0OiByZXR1cm4oKENI QVIpKDIzOSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMzg1OiByZXR1cm4oKENIQVIpKDI0NyAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMzg2OiByZXR1cm4oKENIQVIpKDEzNCAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgwMzg4OiByZXR1cm4oKENIQVIpKDE0MSAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgwMzg5OiByZXR1cm4oKENIQVIpKDE0MyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMzhh OiByZXR1cm4oKENIQVIpKDE0NCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMzhjOiByZXR1cm4o KENIQVIpKDE0NiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMzhlOiByZXR1cm4oKENIQVIpKDE0 OSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMzhmOiByZXR1cm4oKENIQVIpKDE1MiAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgwMzkwOiByZXR1cm4oKENIQVIpKDE2MSAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgwMzkxOiByZXR1cm4oKENIQVIpKDE2NCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgw MzkyOiByZXR1cm4oKENIQVIpKDE2NSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMzkzOiByZXR1 cm4oKENIQVIpKDE2NiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMzk0OiByZXR1cm4oKENIQVIp KDE2NyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMzk1OiByZXR1cm4oKENIQVIpKDE2OCAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgwMzk2OiByZXR1cm4oKENIQVIpKDE2OSAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgwMzk3OiByZXR1cm4oKENIQVIpKDE3MCAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgwMzk4OiByZXR1cm4oKENIQVIpKDE3MiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMzk5OiBy ZXR1cm4oKENIQVIpKDE3MyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMzlhOiByZXR1cm4oKENI QVIpKDE4MSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMzliOiByZXR1cm4oKENIQVIpKDE4MiAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMzljOiByZXR1cm4oKENIQVIpKDE4MyAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgwMzlkOiByZXR1cm4oKENIQVIpKDE4NCAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgwMzllOiByZXR1cm4oKENIQVIpKDE4OSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMzlm OiByZXR1cm4oKENIQVIpKDE5MCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwM2EwOiByZXR1cm4o KENIQVIpKDE5OCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwM2ExOiByZXR1cm4oKENIQVIpKDE5 OSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwM2EzOiByZXR1cm4oKENIQVIpKDIwNyAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgwM2E0OiByZXR1cm4oKENIQVIpKDIwOCAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgwM2E1OiByZXR1cm4oKENIQVIpKDIwOSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgw M2E2OiByZXR1cm4oKENIQVIpKDIxMCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwM2E3OiByZXR1 cm4oKENIQVIpKDIxMSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwM2E4OiByZXR1cm4oKENIQVIp KDIxMiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwM2E5OiByZXR1cm4oKENIQVIpKDIxMyAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgwM2FhOiByZXR1cm4oKENIQVIpKDE0NSAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgwM2FiOiByZXR1cm4oKENIQVIpKDE1MCAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgwM2FjOiByZXR1cm4oKENIQVIpKDE1NSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwM2FkOiBy ZXR1cm4oKENIQVIpKDE1NyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwM2FlOiByZXR1cm4oKENI QVIpKDE1OCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwM2FmOiByZXR1cm4oKENIQVIpKDE1OSAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwM2IwOiByZXR1cm4oKENIQVIpKDI1MiAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgwM2IxOiByZXR1cm4oKENIQVIpKDIxNCAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgwM2IyOiByZXR1cm4oKENIQVIpKDIxNSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwM2Iz OiByZXR1cm4oKENIQVIpKDIxNiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwM2I0OiByZXR1cm4o KENIQVIpKDIyMSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwM2I1OiByZXR1cm4oKENIQVIpKDIy MiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwM2I2OiByZXR1cm4oKENIQVIpKDIyNCAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgwM2I3OiByZXR1cm4oKENIQVIpKDIyNSAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgwM2I4OiByZXR1cm4oKENIQVIpKDIyNiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgw M2I5OiByZXR1cm4oKENIQVIpKDIyNyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwM2JhOiByZXR1 cm4oKENIQVIpKDIyOCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwM2JiOiByZXR1cm4oKENIQVIp KDIyOSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwM2JjOiByZXR1cm4oKENIQVIpKDIzMCAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgwM2JkOiByZXR1cm4oKENIQVIpKDIzMSAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgwM2JlOiByZXR1cm4oKENIQVIpKDIzMiAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgwM2JmOiByZXR1cm4oKENIQVIpKDIzMyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwM2MwOiBy ZXR1cm4oKENIQVIpKDIzNCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwM2MxOiByZXR1cm4oKENI QVIpKDIzNSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwM2MyOiByZXR1cm4oKENIQVIpKDIzNyAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwM2MzOiByZXR1cm4oKENIQVIpKDIzNiAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgwM2M0OiByZXR1cm4oKENIQVIpKDIzOCAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgwM2M1OiByZXR1cm4oKENIQVIpKDI0MiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwM2M2 OiByZXR1cm4oKENIQVIpKDI0MyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwM2M3OiByZXR1cm4o KENIQVIpKDI0NCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwM2M4OiByZXR1cm4oKENIQVIpKDI0 NiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwM2M5OiByZXR1cm4oKENIQVIpKDI1MCAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgwM2NhOiByZXR1cm4oKENIQVIpKDE2MCAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgwM2NiOiByZXR1cm4oKENIQVIpKDI1MSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgw M2NjOiByZXR1cm4oKENIQVIpKDE2MiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwM2NkOiByZXR1 cm4oKENIQVIpKDE2MyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwM2NlOiByZXR1cm4oKENIQVIp KDI1MyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMDE1OiByZXR1cm4oKENIQVIpKDE0MiAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgyMDE4OiByZXR1cm4oKENIQVIpKDEzOSAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgyMDE5OiByZXR1cm4oKENIQVIpKDE0MCAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgyNTAwOiByZXR1cm4oKENIQVIpKDE5NiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTAyOiBy ZXR1cm4oKENIQVIpKDE3OSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTBjOiByZXR1cm4oKENI QVIpKDIxOCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTEwOiByZXR1cm4oKENIQVIpKDE5MSAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTE0OiByZXR1cm4oKENIQVIpKDE5MiAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgyNTE4OiByZXR1cm4oKENIQVIpKDIxNyAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgyNTFjOiByZXR1cm4oKENIQVIpKDE5NSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTI0 OiByZXR1cm4oKENIQVIpKDE4MCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTJjOiByZXR1cm4o KENIQVIpKDE5NCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTM0OiByZXR1cm4oKENIQVIpKDE5 MyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTNjOiByZXR1cm4oKENIQVIpKDE5NyAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgyNTUwOiByZXR1cm4oKENIQVIpKDIwNSAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgyNTUxOiByZXR1cm4oKENIQVIpKDE4NiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgy NTU0OiByZXR1cm4oKENIQVIpKDIwMSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTU3OiByZXR1 cm4oKENIQVIpKDE4NyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTVhOiByZXR1cm4oKENIQVIp KDIwMCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTVkOiByZXR1cm4oKENIQVIpKDE4OCAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTYwOiByZXR1cm4oKENIQVIpKDIwNCAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgyNTYzOiByZXR1cm4oKENIQVIpKDE4NSAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgyNTY2OiByZXR1cm4oKENIQVIpKDIwMyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTY5OiBy ZXR1cm4oKENIQVIpKDIwMiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTZjOiByZXR1cm4oKENI QVIpKDIwNiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTgwOiByZXR1cm4oKENIQVIpKDIyMyAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTg0OiByZXR1cm4oKENIQVIpKDIyMCAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgyNTg4OiByZXR1cm4oKENIQVIpKDIxOSAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgyNTkxOiByZXR1cm4oKENIQVIpKDE3NiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTky OiByZXR1cm4oKENIQVIpKDE3NyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTkzOiByZXR1cm4o KENIQVIpKDE3OCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNWEwOiByZXR1cm4oKENIQVIpKDI1 NCAmIDB4ZmYpKTsKKyAgICAgIGRlZmF1bHQ6IHJldHVybih0eF9jcHN1YihjKSk7ICAgICAvKiBG b3IgYm94IGNoYXJhY3RlcnMgZXRjICovCisgICAgfQorfQorCitpbnQgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogUEMgQ29kZSBQYWdlIEMwIGdyYXBoaWNzICovCisjaWZk ZWYgQ0tfQU5TSUMKK3R4X3NtaWxleShVU0hPUlQgYykKKyNlbHNlCit0eF9zbWlsZXkoYykgVVNI T1JUIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAgICBpZiAoYyA+IDB4MWYpCisgICAg ICByZXR1cm4oLTEpOworICAgIHN3aXRjaCAoYykgeworICAgICAgY2FzZSAweDAwYTA6IHJldHVy bigoQ0hBUikwICYgMHg3Zik7CisgICAgICBjYXNlIDB4MDBhNzogcmV0dXJuKChDSEFSKTIxICYg MHg3Zik7CisgICAgICBjYXNlIDB4MDBiNjogcmV0dXJuKChDSEFSKTIwICYgMHg3Zik7CisgICAg ICBjYXNlIDB4MjAyMjogcmV0dXJuKChDSEFSKTcgJiAweDdmKTsKKyAgICAgIGNhc2UgMHgyMDNj OiByZXR1cm4oKENIQVIpMTkgJiAweDdmKTsKKyAgICAgIGNhc2UgMHgyMTkwOiByZXR1cm4oKENI QVIpMjcgJiAweDdmKTsKKyAgICAgIGNhc2UgMHgyMTkxOiByZXR1cm4oKENIQVIpMjQgJiAweDdm KTsKKyAgICAgIGNhc2UgMHgyMTkyOiByZXR1cm4oKENIQVIpMjYgJiAweDdmKTsKKyAgICAgIGNh c2UgMHgyMTkzOiByZXR1cm4oKENIQVIpMjUgJiAweDdmKTsKKyAgICAgIGNhc2UgMHgyMTk0OiBy ZXR1cm4oKENIQVIpMjkgJiAweDdmKTsKKyAgICAgIGNhc2UgMHgyMTk1OiByZXR1cm4oKENIQVIp MTggJiAweDdmKTsKKyAgICAgIGNhc2UgMHgyMWE4OiByZXR1cm4oKENIQVIpMjMgJiAweDdmKTsK KyAgICAgIGNhc2UgMHgyMzE5OiByZXR1cm4oKENIQVIpMjggJiAweDdmKTsKKyAgICAgIGNhc2Ug MHgyNWFjOiByZXR1cm4oKENIQVIpMjIgJiAweDdmKTsKKyAgICAgIGNhc2UgMHgyNWIyOiByZXR1 cm4oKENIQVIpMzAgJiAweDdmKTsKKyAgICAgIGNhc2UgMHgyNWJhOiByZXR1cm4oKENIQVIpMTYg JiAweDdmKTsKKyAgICAgIGNhc2UgMHgyNWJjOiByZXR1cm4oKENIQVIpMzEgJiAweDdmKTsKKyAg ICAgIGNhc2UgMHgyNWM0OiByZXR1cm4oKENIQVIpMTcgJiAweDdmKTsKKyAgICAgIGNhc2UgMHgy NWQ4OiByZXR1cm4oKENIQVIpOCAmIDB4N2YpOworICAgICAgY2FzZSAweDI1ZDk6IHJldHVybigo Q0hBUikxMCAmIDB4N2YpOworICAgICAgY2FzZSAweDI1ZWY6IHJldHVybigoQ0hBUik5ICYgMHg3 Zik7CisgICAgICBjYXNlIDB4MjYzYTogcmV0dXJuKChDSEFSKTEgJiAweDdmKTsKKyAgICAgIGNh c2UgMHgyNjNiOiByZXR1cm4oKENIQVIpMiAmIDB4N2YpOworICAgICAgY2FzZSAweDI2M2M6IHJl dHVybigoQ0hBUikxNSAmIDB4N2YpOworICAgICAgY2FzZSAweDI2NDA6IHJldHVybigoQ0hBUikx MiAmIDB4N2YpOworICAgICAgY2FzZSAweDI2NDI6IHJldHVybigoQ0hBUikxMSAmIDB4N2YpOwor ICAgICAgY2FzZSAweDI2NjA6IHJldHVybigoQ0hBUik2ICYgMHg3Zik7CisgICAgICBjYXNlIDB4 MjY2MzogcmV0dXJuKChDSEFSKTUgJiAweDdmKTsKKyAgICAgIGNhc2UgMHgyNjY1OiByZXR1cm4o KENIQVIpMyAmIDB4N2YpOworICAgICAgY2FzZSAweDI2NjY6IHJldHVybigoQ0hBUik0ICYgMHg3 Zik7CisgICAgICBjYXNlIDB4MjY2YTogcmV0dXJuKChDSEFSKTEzICYgMHg3Zik7CisgICAgICBj YXNlIDB4MjY2YzogcmV0dXJuKChDSEFSKTE0ICYgMHg3Zik7CisgICAgICBkZWZhdWx0OiByZXR1 cm4oLTEpOworICAgIH0KK30KKworVVNIT1JUICAvKiBIb3Jpem9udGFsIFNjYW4gTGluZXMgVW5p Y29kZSBzdWJzdGl0dXRpb25zICovCisjaWZkZWYgQ0tfQU5TSUMKK3R4X2hzbHN1YihVU0hPUlQg YykKKyNlbHNlCit0eF9oc2xzdWIoYykgVVNIT1JUIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8K K3sKKyAgICBpZiAoYyA+PSAweDIzQkEgJiYgYyA8PSAweDIzQkQgKQorICAgIHN3aXRjaCAoYykg eworICAgICAgY2FzZSAweDIzQkE6IHJldHVybigweDI1MDApOyAgICAgIC8qIEggbGluZSAtIFNj YW4gMSAqLworICAgICAgY2FzZSAweDIzQkI6IHJldHVybigweDI1MDApOyAgICAgIC8qIEggbGlu ZSAtIFNjYW4gMyAqLworICAgICAgY2FzZSAweDIzQkM6IHJldHVybigweDI1MDApOyAgICAgIC8q IEggbGluZSAtIFNjYW4gNyAqLworICAgICAgY2FzZSAweDIzQkQ6IHJldHVybigweDI1MDApOyAg ICAgIC8qIEggbGluZSAtIFNjYW4gOSAqLworICAgIH0KKyAgICByZXR1cm4oYyk7Cit9CisKK1VT SE9SVCAgLyogS2VybWl0IGZvbnQgMHhFPz8/IFVuaWNvZGUgc3Vic3RpdHV0aW9ucyAqLworI2lm ZGVmIENLX0FOU0lDCit0eF91c3ViKFVTSE9SVCBjKQorI2Vsc2UKK3R4X3VzdWIoYykgVVNIT1JU IGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAgICBpZiAoYyA8IDB4RTAwMCB8fCBjID4g MHhFRkZGKQorICAgICAgcmV0dXJuKGMpOworICAgIHN3aXRjaCAoYykgeworICAgICAgY2FzZSAw eEUyMDA6IHJldHVybigweDI1MjQpOyAgICAgIC8qIEV4dGVuc2libGUgTGVmdCBCcmFjZSBNaWRk bGUgKi8KKyAgICAgIGNhc2UgMHhFMjAxOiByZXR1cm4oMHgyNTcwKTsgICAgICAvKiBFeHRlbnNp YmxlIExlZnQgUGFyZW50aGVzaXMgYm90ICovCisgICAgICBjYXNlIDB4RTIwMjogcmV0dXJuKDB4 MjU2ZCk7ICAgICAgLyogRXh0ZW5zaWJsZSBsZWZ0IHBhcmVudGhlc2lzIHRvcCAqLworICAgICAg Y2FzZSAweEUyMDM6IHJldHVybigweDI1MTQpOyAgICAgIC8qIEV4dGVuc2libGUgbGVmdCBTQiBi b3QgKi8KKyAgICAgIGNhc2UgMHhFMjA0OiByZXR1cm4oMHgyNTBjKTsgICAgICAvKiBFeHRlbnNp YmxlIGxlZnQgU0IgdG9wICovCisgICAgICBjYXNlIDB4RTIwNTogcmV0dXJuKDB4MjUxYyk7ICAg ICAgLyogRXh0ZW5zaWJsZSByaWdodCBicmFjZSBtaWRkbGUgKi8KKyAgICAgIGNhc2UgMHhFMjA2 OiByZXR1cm4oMHgyNTZmKTsgICAgICAvKiBFeHRlbnNpYmxlIHJpZ2h0IHBhcmVudGhlc2lzIGJv dCAqLworICAgICAgY2FzZSAweEUyMDc6IHJldHVybigweDI1NmUpOyAgICAgIC8qIEV4dGVuc2li bGUgcmlnaHQgcGFyZW50aGVzaXMgdG9wICovCisgICAgICBjYXNlIDB4RTIwODogcmV0dXJuKDB4 MjUxOCk7ICAgICAgLyogRXh0ZW5zaWJsZSByaWdodCBTQiBib3QgKi8KKyAgICAgIGNhc2UgMHhF MjA5OiByZXR1cm4oMHgyNTEwKTsgICAgICAvKiBFeHRlbnNpYmxlIHJpZ2h0IFNCIHRvcCAqLwor ICAgICAgY2FzZSAweEUyMEM6IHJldHVybigweDAzYTMpOyAgICAgIC8qIFN1bW1hdGlvbiBzeW1i b2wgYm90ICovCisgICAgICBjYXNlIDB4RTIwRDogcmV0dXJuKDB4MDNhMyk7ICAgICAgLyogU3Vt bWF0aW9uIHN5bWJvbCB0b3AgKi8KKyAgICAgIGNhc2UgMHhFMjBFOiByZXR1cm4oMHgyNTEwKTsg ICAgICAvKiBSaWdodCBjZWlsaW5nIGNvcm5lciAqLworICAgICAgY2FzZSAweEUyMEY6IHJldHVy bigweDI1MTgpOyAgICAgIC8qIFJpZ2h0IGZsb29yIGNvcm5lciAqLworICAgICAgY2FzZSAweEUz MDA6IHJldHVybigweDI1MDIpOyAgICAgIC8qIFYgYm94IGxpbmUsIGV4dGVuc2libGUsIGxlZnQg Ki8KKyAgICAgIGNhc2UgMHhFMzA5OiByZXR1cm4oMHgyNTAyKTsgICAgICAvKiBWIGJveCBsaW5l LCBleHRlbnNpYmxlLCByaWdodCAqLworICAgICAgY2FzZSAweEUzMEE6IHJldHVybigweDI1OGMp OyAgICAgIC8qIERpYWdvbmFsIGZpbGwsIGRhcmssIFVMICovCisgICAgICBjYXNlIDB4RTMwQjog cmV0dXJuKDB4MjU5MCk7ICAgICAgLyogRGlhZ29uYWwgZmlsbCwgZGFyaywgVVIgKi8KKyAgICAg IGNhc2UgMHhFMzIwOiByZXR1cm4oMHgyNTgzKTsgICAgICAvKiBRdWFkcmFudCBMTCAqLworICAg ICAgY2FzZSAweEUzMjE6IHJldHVybigweDI0OTApOyAgICAgIC8qIFF1YWRyYW50IExSICovCisg ICAgICBjYXNlIDB4RTMyMjogcmV0dXJuKDB4MjU4Yyk7ICAgICAgLyogUXVhZHJhbnQgVUwgKi8K KyAgICAgIGNhc2UgMHhFMzIzOiByZXR1cm4oMHgyNTg4KTsgICAgICAvKiBRdWFkcmFudCBVTCBh bmQgTEwgYW5kIExSICovCisgICAgICBjYXNlIDB4RTMyNDogcmV0dXJuKDB4MjU4OCk7ICAgICAg LyogUXVhZHJhbnQgVUwgYW5kIExSICovCisgICAgICBjYXNlIDB4RTMyNTogcmV0dXJuKDB4MjU4 OCk7ICAgICAgLyogUXVhZHJhbnQgVUwgYW5kIExSICovCisgICAgICBjYXNlIDB4RTMyNjogcmV0 dXJuKDB4MjU4OCk7ICAgICAgLyogUXVhZHJhbnQgVUwgYW5kIFVSIGFuZCBMTCAqLworICAgICAg Y2FzZSAweEUzMjc6IHJldHVybigweDI1ODgpOyAgICAgIC8qIFF1YWRyYW50IFVMIGFuZCBVUiBh bmQgTFIgKi8KKyAgICAgIGNhc2UgMHhFMzI4OiByZXR1cm4oMHgyNTkwKTsgICAgICAvKiBRdWFk cmFudCBVUiAqLworICAgICAgY2FzZSAweEUzMjk6IHJldHVybigweDI1ODgpOyAgICAgIC8qIFF1 YWRyYW50IFVSIGFuZCBMTCBhbmQgTFIgKi8KKyAgICAgIGNhc2UgMHhFNDAwOiByZXR1cm4oMHgy MjFhKTsgICAgICAvKiBSYWRpY2FsIHN5bWJvbCwgc21hbGwgKi8KKyAgICAgIGNhc2UgMHhFNDAx OiByZXR1cm4oMHgwMGJmKTsgICAgICAvKiBSZXZlcnNlIHF1ZXN0aW9uIG1hcmsgKi8KKyAgICAg IGRlZmF1bHQ6IHJldHVybigodW5zaWduZWQpMHhmZmZkKTsKKyAgICB9Cit9CisKK2ludCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVbmljb2RlIHRvIENQNDM3IHN1YnN0 aXR1dGlvbnMgKi8KKyNpZmRlZiBDS19BTlNJQwordHhfY3BzdWIoVVNIT1JUIGMpCisjZWxzZQor dHhfY3BzdWIoYykgVVNIT1JUIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAgICBpbnQg eDsKKyAgICBpZiAoYyA8IDB4MDA4MCkgICAgICAgICAgICAgICAgICAgICAvKiBBU0NJSSAqLwor ICAgICAgcmV0dXJuKChDSEFSKShjICYgMHhmZikpOworCisgICAgaWYgKGMgPj0gMHgwMDgwICYm IGMgPD0gMHgwMTAwKSB7CisgICAgICAgIHN3aXRjaCAoYykgeyAgICAgICAgICAgICAgICAgICAg LyogTGF0aW4tMSAqLworICAgICAgICAgIGNhc2UgMHgwMEEyOiByZXR1cm4oMHg5Yik7ICAgIC8q IENlbnQgc2lnbiAqLworICAgICAgICAgIGNhc2UgMHgwMEEzOiByZXR1cm4oMTU2KTsgICAgIC8q IFBvdW5kIHNpZ24gKi8KKyAgICAgICAgICBjYXNlIDB4MDBBQzogcmV0dXJuKDE3MCk7ICAgICAv KiBOb3Qgc3ltYm9sICovCisgICAgICAgICAgY2FzZSAweDAwQjA6IHJldHVybigyNDgpOyAgICAg LyogRGVncmVlIHN5bWJvbCAqLworICAgICAgICAgIGNhc2UgMHgwMEIxOiByZXR1cm4oMjQxKTsg ICAgIC8qIFBsdXMgb3IgbWludXMgc3ltYm9sICovCisgICAgICAgICAgY2FzZSAweDAwQjI6IHJl dHVybigyNTMpOyAgICAgLyogU3VwZXJzY3JpcHQgMiAqLworICAgICAgICAgIGNhc2UgMHgwMEIz OiByZXR1cm4oNTEpOyAgICAgIC8qIFN1cGVyc2NyaXB0IDMgKi8KKyAgICAgICAgICBjYXNlIDB4 MDBCNjogcmV0dXJuKDE0KTsgICAgICAvKiBQaWxjcm93IHN5bWJvbCAqLworICAgICAgICAgIGNh c2UgMHgwMEI3OiByZXR1cm4oMjUwKTsgICAgIC8qIENlbnRlciBkb3QsIHNtYWxsICovCisgICAg ICAgICAgY2FzZSAweDAwQjk6IHJldHVybig0OSk7ICAgICAgLyogU3VwZXJzY3JpcHQgMSAqLwor ICAgICAgICAgIGNhc2UgMHgwMEQwOiByZXR1cm4oNjgpOyAgICAgIC8qIEV0aCAtPiBEICovCisg ICAgICAgICAgY2FzZSAweDAwRDc6IHJldHVybigxMjApOyAgICAgLyogTXVsdGlwbGljYXRpb24g c3ltYm9sICovCisgICAgICAgICAgY2FzZSAweDAwREU6IHJldHVybig4NCk7ICAgICAgLyogVGhv cm4gLT4gVCAqLworICAgICAgICAgIGNhc2UgMHgwMEYwOiByZXR1cm4oMTAwKTsgICAgIC8qIGV0 aCAtPiBldGggKi8KKyAgICAgICAgICBjYXNlIDB4MDBGNzogcmV0dXJuKDI0Nik7ICAgICAvKiBE aXZpc2lvbiBzeW1ib2wgKi8KKyAgICAgICAgICBjYXNlIDB4MDBGRTogcmV0dXJuKDExNik7ICAg ICAvKiB0aG9ybiAtPiB0ICovCisgICAgICAgICAgZGVmYXVsdDogcmV0dXJuKDB4MTMpOworICAg ICAgICB9CisgICAgfSBlbHNlIGlmIChjID49IDB4MDEwMCAmJiBjIDw9IDB4MDJmZikgeyAvKiBM YXRpbi0yIGV0YyAqLworICAgICAgICBzd2l0Y2ggKGMpIHsKKyAgICAgICAgICBjYXNlIDB4MDEw MzogcmV0dXJuKDk3KTsgICAgICAvKiBhIGJyZXZlICovCisgICAgICAgICAgY2FzZSAweDAxMDU6 IHJldHVybig5Nyk7ICAgICAgLyogYSBvZ29uZWsgKi8KKyAgICAgICAgICBjYXNlIDB4MDEwNzog ICAgICAgICAgICAgICAgICAvKiBjIGFjdXRlICovCisgICAgICAgICAgY2FzZSAweDAxMGQ6IHJl dHVybig5OSk7ICAgICAgLyogYyBjYXJvbiAqLworICAgICAgICAgIGNhc2UgMHgwMTBmOiAgICAg ICAgICAgICAgICAgIC8qIGQgY2Fyb24gKi8KKyAgICAgICAgICBjYXNlIDB4MDExMTogcmV0dXJu KDEwMCk7ICAgICAvKiBkIHdpdGggc3Ryb2tlICovCisgICAgICAgICAgY2FzZSAweDAxMTk6ICAg ICAgICAgICAgICAgICAgLyogZSBvZ29uZWsgKi8KKyAgICAgICAgICBjYXNlIDB4MDExYjogcmV0 dXJuKDEwMSk7ICAgICAvKiBlIGNhcm9uICovCisgICAgICAgICAgY2FzZSAweDAxMWY6IHJldHVy bigxMDMpOyAgICAgLyogZyBicmV2ZSAqLworICAgICAgICAgIGNhc2UgMHgwMTMwOiByZXR1cm4o NzMpOyAgICAgIC8qIENhcGl0YWwgSSB3aXRoIERvdCAqLworICAgICAgICAgIGNhc2UgMHgwMTMx OiByZXR1cm4oMTA1KTsgICAgIC8qIERvdGxlc3MgaSAqLworICAgICAgICAgIGNhc2UgMHgwMTMy OiByZXR1cm4oODkpOyAgICAgIC8qIElKID0+IFkgKi8KKyAgICAgICAgICBjYXNlIDB4MDEzMzog cmV0dXJuKDE1Mik7ICAgICAvKiBpaiAtPiB5IGRpYWVyZXNpcyAqLworICAgICAgICAgIGNhc2Ug MHgwMTNhOiAgICAgICAgICAgICAgICAgIC8qIGwgYWN1dGUgKi8KKyAgICAgICAgICBjYXNlIDB4 MDEzZTogICAgICAgICAgICAgICAgICAvKiBsIGNhcm9uICovCisgICAgICAgICAgY2FzZSAweDAx NDI6IHJldHVybigxMDgpOyAgICAgLyogbCB3aXRoIHN0cm9rZSAqLworICAgICAgICAgIGNhc2Ug MHgwMTQ0OiAgICAgICAgICAgICAgICAgIC8qIG4gYWN1dGUgKi8KKyAgICAgICAgICBjYXNlIDB4 MDE0ODogcmV0dXJuKDExMCk7ICAgICAvKiBuIGNhcm9uICovCisgICAgICAgICAgY2FzZSAweDAx NTE6IHJldHVybigxMTEpOyAgICAgLyogbyBkb3VibGUgYWN1dGUgKi8KKyAgICAgICAgICBjYXNl IDB4MDE1MjogcmV0dXJuKDc5KTsgICAgICAvKiBPRSAqLworICAgICAgICAgIGNhc2UgMHgwMTUz OiByZXR1cm4oMTExKTsgICAgIC8qIG9lICovCisgICAgICAgICAgY2FzZSAweDAxNTU6ICAgICAg ICAgICAgICAgICAgLyogciBhY3V0ZSAqLworICAgICAgICAgIGNhc2UgMHgwMTU5OiByZXR1cm4o MTE0KTsgICAgIC8qIHIgY2Fyb24gKi8KKyAgICAgICAgICBjYXNlIDB4MDE1YjogICAgICAgICAg ICAgICAgICAvKiBzIGFjdXRlICovCisgICAgICAgICAgY2FzZSAweDAxNWY6ICAgICAgICAgICAg ICAgICAgLyogcyBvZ29uZWsgKi8KKyAgICAgICAgICBjYXNlIDB4MDE2MTogcmV0dXJuKDExNSk7 ICAgICAvKiBzIGNhcm9uICovCisgICAgICAgICAgY2FzZSAweDAxNjM6ICAgICAgICAgICAgICAg ICAgLyogdCBvZ29uZWsgKi8KKyAgICAgICAgICBjYXNlIDB4MDE2NTogICAgICAgICAgICAgICAg ICAvKiB0IGNhcm9uICovCisgICAgICAgICAgY2FzZSAweDAxNjc6IHJldHVybigxMTYpOyAgICAg LyogdCB3aXRoIHN0cm9rZSAqLworICAgICAgICAgIGNhc2UgMHgwMTZmOiAgICAgICAgICAgICAg ICAgIC8qIHUgcmluZyAqLworICAgICAgICAgIGNhc2UgMHgwMTcxOiByZXR1cm4oMTE3KTsgICAg IC8qIHUgZG91YmxlIGFjdXRlICovCisgICAgICAgICAgY2FzZSAweDAxN2E6ICAgICAgICAgICAg ICAgICAgLyogeiBhY3V0ZSAqLworICAgICAgICAgIGNhc2UgMHgwMTdjOiAgICAgICAgICAgICAg ICAgIC8qIHogZG90IGFib3ZlICovCisgICAgICAgICAgY2FzZSAweDAxN2U6IHJldHVybigxMjIp OyAgICAgLyogeiBjYXJvbiAqLworICAgICAgICAgIGNhc2UgMHgwMTkyOiByZXR1cm4oMTU5KTsg ICAgIC8qIEZ1bmN0aW9uLW9mIHN5bWJvbCwgU2NyaXB0IGYgKi8KKyAgICAgICAgICBjYXNlIDB4 MDFkMDogcmV0dXJuKDEwNSk7ICAgICAvKiBpIGNhcm9uICovCisgICAgICAgICAgY2FzZSAweDAy Yzc6ICAgICAgICAgICAgICAgICAgLyogY2Fyb24gLT4gVU5LICovCisgICAgICAgICAgY2FzZSAw eDAyZDg6IHJldHVybigweDEzKTsgICAgLyogYnJldmUgLT4gVU5LICovCisgICAgICAgICAgY2Fz ZSAweDAyZGQ6IHJldHVybigzNCk7ICAgICAgLyogRG91YmxlIGFjdXRlIC0+IERvdWJsZXF1b3Rl ICovCisgICAgICAgICAgZGVmYXVsdDogcmV0dXJuKDB4MTMpOworICAgICAgICB9CisgICAgfSBl bHNlIGlmIChjID49IDB4MDMwMCAmJiBjIDw9IDB4MDNmZikgeyAvKiBHcmVlayAqLworICAgICAg ICBzd2l0Y2ggKGMpIHsKKyAgICAgICAgICBjYXNlIDB4MDM5MzogcmV0dXJuKDIyNik7ICAgICAv KiBVcHBlcmNhc2UgR3JlZWsgR2FtbWEgKi8KKyAgICAgICAgICBjYXNlIDB4MDM5ODogcmV0dXJu KDIzMyk7ICAgICAvKiBVcHBlcmNhc2UgR3JlZWsgVGhldGEgKi8KKyAgICAgICAgICBjYXNlIDB4 MDM5QjogcmV0dXJuKDIzNSk7ICAgICAvKiBVcHBlcmNhc2UgR3JlZWsgTGFtYmRhICovCisgICAg ICAgICAgY2FzZSAweDAzQTA6IHJldHVybigyMjcpOyAgICAgLyogVXBwZXJjYXNlIEdyZWVrIFBp ICovCisgICAgICAgICAgY2FzZSAweDAzQTM6IHJldHVybigyMjgpOyAgICAgLyogVXBwZXJjYXNl IEdyZWVrIFNpZ21hICovCisgICAgICAgICAgY2FzZSAweDAzQTQ6IHJldHVybigweEVBKTsgICAg LyogT21lZ2EgKi8KKyAgICAgICAgICBjYXNlIDB4MDNBNjogcmV0dXJuKDIzMik7ICAgICAvKiBV cHBlcmNhc2UgR3JlZWsgUGhpICovCisgICAgICAgICAgY2FzZSAweDAzQTk6IHJldHVybigyMzQp OyAgICAgLyogVXBwZXJjYXNlIEdyZWVrIE9tZWdhICovCisgICAgICAgICAgY2FzZSAweDAzQjE6 IHJldHVybigweEUwKTsgICAgLyogYWxwaGEgKi8KKyAgICAgICAgICBjYXNlIDB4MDNCMjogcmV0 dXJuKDB4RTEpOyAgICAvKiBiZXRhICovCisgICAgICAgICAgY2FzZSAweDAzQjM6IHJldHVybigy MjYpOyAgICAgLyogTG93ZXJjYXNlIEdyZWVrIGdhbW1hICovCisgICAgICAgICAgY2FzZSAweDAz QjQ6IHJldHVybigweEVCKTsgICAgLyogZGVsdGEgKi8KKyAgICAgICAgICBjYXNlIDB4MDNCNTog cmV0dXJuKDIzOCk7ICAgICAvKiBMb3dlcmNhc2UgR3JlZWsgZXBzaWxvbiAqLworICAgICAgICAg IGNhc2UgMHgwM0I3OiByZXR1cm4oMjM4KTsgICAgIC8qIExvd2VyY2FzZSBHcmVlayBldGEgKi8K KyAgICAgICAgICBjYXNlIDB4MDNCODogcmV0dXJuKDIzMyk7ICAgICAvKiBMb3dlcmNhc2UgR3Jl ZWsgdGhldGEgKi8KKyAgICAgICAgICBjYXNlIDB4MDNCOTogcmV0dXJuKDEwNSk7ICAgICAvKiBM b3dlcmNhc2UgR3JlZWsgaW90YSAqLworICAgICAgICAgIGNhc2UgMHgwM0JBOiByZXR1cm4oMTA3 KTsgICAgIC8qIExvd2VyY2FzZSBHcmVlayBrYXBwYSAqLworICAgICAgICAgIGNhc2UgMHgwM0JC OiByZXR1cm4oMjM1KTsgICAgIC8qIExvd2VyY2FzZSBHcmVlayBsYW1iZGEgKi8KKyAgICAgICAg ICBjYXNlIDB4MDNCQzogcmV0dXJuKDIzMCk7ICAgICAvKiBMb3dlcmNhc2UgR3JlZWsgbXUgKi8K KyAgICAgICAgICBjYXNlIDB4MDNDMDogcmV0dXJuKDIyNyk7ICAgICAvKiBMb3dlcmNhc2UgR3Jl ZWsgcGkgKi8KKyAgICAgICAgICBjYXNlIDB4MDNDMzogcmV0dXJuKDIyOSk7ICAgICAvKiBMb3dl cmNhc2UgR3JlZWsgc2lnbWEgKi8KKyAgICAgICAgICBjYXNlIDB4MDNDNDogcmV0dXJuKDIzMSk7 ICAgICAvKiBMb3dlcmNhc2UgR3JlZWsgdGF1ICovCisgICAgICAgICAgY2FzZSAweDAzQzY6IHJl dHVybigyMzcpOyAgICAgLyogTG93ZXJjYXNlIEdyZWVrIHBoaSAqLworICAgICAgICAgIGNhc2Ug MHgwM0M3OiByZXR1cm4oMTIwKTsgICAgIC8qIExvd2VyY2FzZSBHcmVlayBjaGkgKi8KKyAgICAg ICAgICBjYXNlIDB4MDNDOTogcmV0dXJuKDIzNCk7ICAgICAvKiBMb3dlcmNhc2UgR3JlZWsgb21l Z2EgKi8KKyAgICAgICAgICBkZWZhdWx0OiByZXR1cm4oMHgxMyk7CisgICAgICAgIH0KKyAgICB9 IGVsc2UgaWYgKGMgPj0gMHgyMDAwICYmIGMgPD0gMHgyMGZmKSB7IC8qIFN1YitTdXBlcnNjcmlw dHMgJiBDdXJyZW5jeSAqLworICAgICAgICBzd2l0Y2ggKGMpIHsKKyAgICAgICAgICBjYXNlIDB4 MjAzQzogcmV0dXJuKDB4MTMpOyAgICAvKiAhISAqLworICAgICAgICAgIGNhc2UgMHgyMDcwOiBy ZXR1cm4oNDgpOyAgICAgIC8qIFN1cGVyc2NyaXB0IDAgKi8KKyAgICAgICAgICBjYXNlIDB4MjA3 NDogcmV0dXJuKDUyKTsgICAgICAvKiBTdXBlcnNjcmlwdCA0ICovCisgICAgICAgICAgY2FzZSAw eDIwNzU6IHJldHVybig1Myk7ICAgICAgLyogU3VwZXJzY3JpcHQgNSAqLworICAgICAgICAgIGNh c2UgMHgyMDc2OiByZXR1cm4oNTQpOyAgICAgIC8qIFN1cGVyc2NyaXB0IDYgKi8KKyAgICAgICAg ICBjYXNlIDB4MjA3NzogcmV0dXJuKDU1KTsgICAgICAvKiBTdXBlcnNjcmlwdCA3ICovCisgICAg ICAgICAgY2FzZSAweDIwNzg6IHJldHVybig1Nik7ICAgICAgLyogU3VwZXJzY3JpcHQgOCAqLwor ICAgICAgICAgIGNhc2UgMHgyMDc5OiByZXR1cm4oNTcpOyAgICAgIC8qIFN1cGVyc2NyaXB0IDkg Ki8KKyAgICAgICAgICBjYXNlIDB4MjA3YTogcmV0dXJuKDQzKTsgICAgICAvKiBTdXBlcnNjcmlw dCArICovCisgICAgICAgICAgY2FzZSAweDIwN2I6IHJldHVybig0NSk7ICAgICAgLyogU3VwZXJz Y3JpcHQgLSAqLworICAgICAgICAgIGNhc2UgMHgyMDdGOiByZXR1cm4oMjUyKTsgICAgIC8qIFN1 cGVyc2NyaXB0IG4gKi8KKyAgICAgICAgICBjYXNlIDB4MjA4MDogcmV0dXJuKDQ4KTsgICAgICAv KiBTdWJzY3JpcHQgMCAqLworICAgICAgICAgIGNhc2UgMHgyMDgxOiByZXR1cm4oNDkpOyAgICAg IC8qIFN1YnNjcmlwdCAxICovCisgICAgICAgICAgY2FzZSAweDIwODI6IHJldHVybig1MCk7ICAg ICAgLyogU3Vic2NyaXB0IDIgKi8KKyAgICAgICAgICBjYXNlIDB4MjA4MzogcmV0dXJuKDUxKTsg ICAgICAvKiBTdWJzY3JpcHQgMyAqLworICAgICAgICAgIGNhc2UgMHgyMDg0OiByZXR1cm4oNTIp OyAgICAgIC8qIFN1YnNjcmlwdCA0ICovCisgICAgICAgICAgY2FzZSAweDIwODU6IHJldHVybig1 Myk7ICAgICAgLyogU3Vic2NyaXB0IDUgKi8KKyAgICAgICAgICBjYXNlIDB4MjA4NjogcmV0dXJu KDU0KTsgICAgICAvKiBTdWJzY3JpcHQgNiAqLworICAgICAgICAgIGNhc2UgMHgyMDg3OiByZXR1 cm4oNTUpOyAgICAgIC8qIFN1YnNjcmlwdCA3ICovCisgICAgICAgICAgY2FzZSAweDIwODg6IHJl dHVybig1Nik7ICAgICAgLyogU3Vic2NyaXB0IDggKi8KKyAgICAgICAgICBjYXNlIDB4MjA4OTog cmV0dXJuKDU3KTsgICAgICAvKiBTdWJzY3JpcHQgOSAqLworICAgICAgICAgIGNhc2UgMHgyMDhh OiByZXR1cm4oNDMpOyAgICAgIC8qIFN1YnNjcmlwdCArICovCisgICAgICAgICAgY2FzZSAweDIw OGI6IHJldHVybig0NSk7ICAgICAgLyogU3Vic2NyaXB0IC0gKi8KKyAgICAgICAgICBjYXNlIDB4 MjBhNzogcmV0dXJuKDB4OTMpOyAgICAvKiBQZXNldGEgKi8KKyAgICAgICAgICBkZWZhdWx0Ogor ICAgICAgICAgICAgeCA9IHR4X3B1bmMoYyk7ICAgICAgICAgICAgIC8qIFZhcmlvdXMgc3BhY2Vz LCBkYXNoZXMsIGV0YyAqLworICAgICAgICAgICAgcmV0dXJuKCh4IDwgMCkgPyAweDEzIDogeCk7 CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGMgPj0gMHgyMTAwICYmIGMgPD0gMHgyMWZmKSB7 IC8qIEFycm93cyAqLworICAgICAgICBzd2l0Y2ggKGMpIHsKKyAgICAgICAgICBjYXNlIDB4MjE5 MDogcmV0dXJuKDI3KTsgICAgICAvKiBBcnJvdywgbGVmdC1wb2ludGluZyAqLworICAgICAgICAg IGNhc2UgMHgyMTkxOiByZXR1cm4oMjQpOyAgICAgIC8qIEFycm93LCB1cC1wb2ludGluZyAqLwor ICAgICAgICAgIGNhc2UgMHgyMTkyOiByZXR1cm4oMjYpOyAgICAgIC8qIEFycm93LCByaWdodC1w b2ludGluZyAqLworICAgICAgICAgIGNhc2UgMHgyMTkzOiByZXR1cm4oMjUpOyAgICAgIC8qIEFy cm93LCBkb3duLXBvaW50aW5nICovCisgICAgICAgICAgY2FzZSAweDIxOTQ6IHJldHVybigweDFk KTsgICAgLyogQXJyb3csIGxlZnQtcmlnaHQgKi8KKyAgICAgICAgICBjYXNlIDB4MjE5NTogcmV0 dXJuKDB4MTIpOyAgICAvKiBBcnJvdywgdXAtZG93biAqLworICAgICAgICAgIGNhc2UgMHgyMTlG OiByZXR1cm4oMHgxOCk7ICAgIC8qIEFycm93LCB1cCwgZG91YmxlaGVhZCAqLworICAgICAgICAg IGNhc2UgMHgyMUExOiByZXR1cm4oMHgxOSk7ICAgIC8qIEFycm93LCBkb3duLCBkb3VibGVoZWFk ICovCisgICAgICAgICAgY2FzZSAweDIxQTg6IHJldHVybigweDE3KTsgICAgLyogQXJyb3csIHVw LWRvd24gd2l0aCBiYXNlICovCisgICAgICAgICAgY2FzZSAweDIxRDI6IHJldHVybigyNik7ICAg ICAgLyogSW1wbGllcyBzeW1ib2wgKi8KKyAgICAgICAgICBjYXNlIDB4MjFENDogcmV0dXJuKDI5 KTsgICAgICAvKiBJZiBhbmQgb25seSBpZiBzeW1ib2wgKi8KKyAgICAgICAgICBjYXNlIDB4MjFF NDogcmV0dXJuKDB4MUIpOyAgICAvKiBBcnJvdywgbGVmdCwgdG8gYmFyICovCisgICAgICAgICAg Y2FzZSAweDIxRTU6IHJldHVybigweDFBKTsgICAgLyogQXJyb3csIHJpZ2h0LCB0byBiYXIgKi8K KyAgICAgICAgICBjYXNlIDB4MjFFODogcmV0dXJuKDB4MTApOyAgICAvKiBPdXRsaW5lIHdoaXRl IHJpZ2h0IGFycm93ICovCisgICAgICAgICAgY2FzZSAweDIxRTk6IHJldHVybigweDBmKTsgICAg LyogT3V0bGluZSB3aGl0ZSBkb3duIGFycm93ICovCisgICAgICAgICAgZGVmYXVsdDogcmV0dXJu KDB4MTMpOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChjID49IDB4MjIwMCAmJiBjIDw9IDB4 MjJmZikgeyAvKiBNYXRoICovCisgICAgICAgIHN3aXRjaCAoYykgeworICAgICAgICAgIGNhc2Ug MHgyMjAyOiByZXR1cm4oMjM1KTsgICAgIC8qIFBhcnRpYWwgZGlmZmVyZW50aWFsIHN5bWJvbCAq LworICAgICAgICAgIGNhc2UgMHgyMjA3OiByZXR1cm4oMzEpOyAgICAgIC8qIE5hYmxhLCBMYXBs YWNlIG9wZXJhdG9yICovCisgICAgICAgICAgY2FzZSAweDIyMDg6IHJldHVybigweDMzKTsgICAg LyogKGJlY2F1c2Ugb2YgUU5YIG1pc3VuZGVyc3RhbmRpbmcpICovCisgICAgICAgICAgY2FzZSAw eDIyMUE6IHJldHVybigyNTEpOyAgICAgLyogUmFkaWNhbCBzeW1ib2wgKi8KKyAgICAgICAgICBj YXNlIDB4MjIxRDogcmV0dXJuKDIzNik7ICAgICAvKiBQcm9wb3J0aW9uYWwtdG8gKi8KKyAgICAg ICAgICBjYXNlIDB4MjIxRTogcmV0dXJuKDIzNik7ICAgICAvKiBJbmZpbml0eSBzeW1ib2wgKi8K KyAgICAgICAgICBjYXNlIDB4MjIyNzogcmV0dXJuKDMwKTsgICAgICAvKiBMb2dpY2FsIEFORCAq LworICAgICAgICAgIGNhc2UgMHgyMjI4OiByZXR1cm4oMzEpOyAgICAgIC8qIExvZ2ljYWwgT1Ig Ki8KKyAgICAgICAgICBjYXNlIDB4MjIyOTogcmV0dXJuKDIzOSk7ICAgICAvKiBJbnRlcnNlY3Rp b24gc3ltYm9sICovCisgICAgICAgICAgY2FzZSAweDIyMkE6IHJldHVybig4NSk7ICAgICAgLyog VW5pb24gc3ltYm9sICovCisgICAgICAgICAgY2FzZSAweDIyMkI6IHJldHVybigyNDQpOyAgICAg LyogSW50ZWdyYWwgc3ltYm9sICovCisgICAgICAgICAgY2FzZSAweDIyMzQ6IHJldHVybigyNTQp OyAgICAgLyogVGhlcmVmb3JlIHN5bWJvbCAqLworICAgICAgICAgIGNhc2UgMHgyMjNDOiByZXR1 cm4oMTI2KTsgICAgIC8qIENlbnRlcmVkIHRpbGRlIG9wZXJhdG9yICovCisgICAgICAgICAgY2Fz ZSAweDIyNDM6IHJldHVybigyNDcpOyAgICAgLyogQXN5bXB0b3RpY2FsbHkgZXF1YWxzICovCisg ICAgICAgICAgY2FzZSAweDIyNDg6IHJldHVybigyNDcpOyAgICAgLyogQWxtb3N0IGVxdWFsIHRv IHN5bWJvbCAqLworICAgICAgICAgIGNhc2UgMHgyMjYwOiByZXR1cm4oODgpOyAgICAgIC8qIE5v dCBlcXVhbCBzeW1ib2wgKi8KKyAgICAgICAgICBjYXNlIDB4MjI2MTogcmV0dXJuKDI0MCk7ICAg ICAvKiBJZGVudGl0eSBzeW1ib2wgKi8KKyAgICAgICAgICBjYXNlIDB4MjI2NDogcmV0dXJuKDI0 Myk7ICAgICAvKiBMZXNzIHRoYW4gb3IgZXF1YWwgc3ltYm9sICovCisgICAgICAgICAgY2FzZSAw eDIyNjU6IHJldHVybigyNDIpOyAgICAgLyogR3JlYXRlciB0aGFuIG9yIGVxdWFsIHN5bWJvbCAq LworICAgICAgICAgIGNhc2UgMHgyMjgyOiByZXR1cm4oNDApOyAgICAgIC8qIFN1YnNldCBzeW1i b2wgKi8KKyAgICAgICAgICBjYXNlIDB4MjI4MzogcmV0dXJuKDQxKTsgICAgICAvKiBTdXBlcnNl dCBzeW1ib2wgKi8KKyAgICAgICAgICBjYXNlIDB4MjJBNjogcmV0dXJuKDB4QzMpOyAgICAvKiBB c3NlcnRpb24gc3ltYm9sICovCisgICAgICAgICAgZGVmYXVsdDogcmV0dXJuKDB4MTMpOworICAg ICAgICB9CisgICAgfSBlbHNlIGlmIChjID49IDB4MjNCQSAmJiBjIDw9IDB4MjNCRCApIHsKKyAg ICAgICAgc3dpdGNoIChjKSB7CisgICAgICAgIGNhc2UgMHgyM0JBOiByZXR1cm4oMHgyNTAwKTsg ICAgICAvKiBIIGxpbmUgLSBTY2FuIDEgKi8KKyAgICAgICAgY2FzZSAweDIzQkI6IHJldHVybigw eDI1MDApOyAgICAgIC8qIEggbGluZSAtIFNjYW4gMyAqLworICAgICAgICBjYXNlIDB4MjNCQzog cmV0dXJuKDB4MjUwMCk7ICAgICAgLyogSCBsaW5lIC0gU2NhbiA3ICovCisgICAgICAgIGNhc2Ug MHgyM0JEOiByZXR1cm4oMHgyNTAwKTsgICAgICAvKiBIIGxpbmUgLSBTY2FuIDkgKi8KKyAgICAg ICAgfQorICAgIH0gZWxzZSBpZiAoYyA+PSAweDIzMDAgJiYgYyA8PSAweDI0ZmYpIHsgLyogVGVj aCAqLworICAgICAgICBzd2l0Y2ggKGMpIHsKKyAgICAgICAgICBjYXNlIDB4MjMwODogcmV0dXJu KDB4REEpOyAgICAvKiBMZWZ0IGNlaWxpbmcgKi8KKyAgICAgICAgICBjYXNlIDB4MjMwOTogcmV0 dXJuKDB4QkYpOyAgICAvKiBSaWdodCBjZWlsaW5nICovCisgICAgICAgICAgY2FzZSAweDIzMEE6 IHJldHVybigweEMwKTsgICAgLyogTGVmdCBmbG9vciAqLworICAgICAgICAgIGNhc2UgMHgyMzBC OiByZXR1cm4oMHhEOSk7ICAgIC8qIFJpZ2h0IGZsb29yICovCisgICAgICAgICAgY2FzZSAweDIz MTk6IHJldHVybigweDFDKTsgICAgLyogVHVybmVkIE5vdCBzaWduICovCisgICAgICAgICAgY2Fz ZSAweDIzMjA6IHJldHVybigyNDQpOyAgICAgLyogSW50ZWdyYWwgc3ltYm9sIHRvcCAqLworICAg ICAgICAgIGNhc2UgMHgyMzIxOiByZXR1cm4oMjQ1KTsgICAgIC8qIEludGVncmFsIHN5bWJvbCBi b3QgKi8KKyAgICAgICAgICBjYXNlIDB4MjMyOTogcmV0dXJuKDYwKTsgICAgICAvKiBCUkEsIGxh cmdlIGxlZnQgYW5nbGUgYnJhY2tldCAqLworICAgICAgICAgIGNhc2UgMHgyMzJBOiByZXR1cm4o NjIpOyAgICAgIC8qIEtFVCwgbGFyZ2UgcmlnaHQgYW5nbGUgYnJhY2tldCAqLworICAgICAgICAg IGNhc2UgMHgyNDA5OiByZXR1cm4oMjYpOyAgICAgIC8qICJIVCIgYmVjb21lcyByaWdodCBhcnJv dyAqLworICAgICAgICAgIGNhc2UgMHgyNDBBOiByZXR1cm4oMjUpOyAgICAgIC8qICJMRiIgYmVj b21lcyBkb3duIGFycm93ICovCisgICAgICAgICAgY2FzZSAweDI0MEI6IHJldHVybigyMyk7ICAg ICAgLyogIlZUIiBiZWNvbWVzIHVwLWRvd24gYXJyb3cgKi8KKyAgICAgICAgICBjYXNlIDB4MjQw QzogcmV0dXJuKDI0KTsgICAgICAvKiAiRkYiIGJlY29tZXMgdXAgYXJyb3cgKi8KKyAgICAgICAg ICBjYXNlIDB4MjQwRDogcmV0dXJuKDI3KTsgICAgICAvKiAiQ1IiIGJlY29tZXMgbGVmdCBhcnJv dyAqLworICAgICAgICAgIGNhc2UgMHgyNDI0OiByZXR1cm4oMzEpOyAgICAgIC8qICJOTCIgYmVj b21lcyBkb3duIHRyaWFuZ2xlICovCisgICAgICAgICAgZGVmYXVsdDogcmV0dXJuKDB4MTMpOwor ICAgICAgICB9CisgICAgfSBlbHNlIGlmIChjID49IDB4MjUwMCAmJiBjIDw9IDB4MjU1MikgeyAv KiBCb3ggZHJhd2luZyAqLworICAgICAgICBzd2l0Y2ggKGMpIHsKKyAgICAgICAgICBjYXNlIDB4 MjUwMDogcmV0dXJuKDE5Nik7ICAgICAvKiBDZW50ZXIgYm94IGJhciBob3Jpem9udGFsICovCisg ICAgICAgICAgY2FzZSAweDI1MDE6IHJldHVybigweENEKTsgICAgLyogQm9sZCAtPiBEb3VibGUg Ki8KKyAgICAgICAgICBjYXNlIDB4MjUwMjogcmV0dXJuKDE3OSk7ICAgICAvKiBDZW50ZXIgYm94 IGJhciB2ZXJ0aWNhbCAqLworICAgICAgICAgIGNhc2UgMHgyNTAzOiByZXR1cm4oMHhCQSk7ICAg IC8qIEJvbGQgKi8KKyAgICAgICAgICBjYXNlIDB4MjUwNDogcmV0dXJuKDQ1KTsgICAgICAvKiBE YXNoZWQgbGluZSAqLworICAgICAgICAgIGNhc2UgMHgyNTA2OiByZXR1cm4oMTI0KTsgICAgIC8q IEJyb2tlbiB2ZXJ0aWNhbCBiYXIgKi8KKyAgICAgICAgICBjYXNlIDB4MjUwQzogcmV0dXJuKDIx OCk7ICAgICAvKiBVTCBib3ggY29ybmVyICovCisgICAgICAgICAgY2FzZSAweDI1MEY6IHJldHVy bigweEM5KTsgICAgLyogQm9sZCAqLworICAgICAgICAgIGNhc2UgMHgyNTEwOiByZXR1cm4oMTkx KTsgICAgIC8qIFVSIEJveCBDb3JuZXIgKi8KKyAgICAgICAgICBjYXNlIDB4MjUxMzogcmV0dXJu KDB4QkIpOyAgICAvKiBCb2xkICovCisgICAgICAgICAgY2FzZSAweDI1MTQ6IHJldHVybigxOTIp OyAgICAgLyogTEwgYm94IGNvcm5lciAqLworICAgICAgICAgIGNhc2UgMHgyNTE3OiByZXR1cm4o MHhDOCk7ICAgIC8qIEJvbGQgKi8KKyAgICAgICAgICBjYXNlIDB4MjUxODogcmV0dXJuKDIxNyk7 ICAgICAvKiBMUiBib3ggY29ybmVyICovCisgICAgICAgICAgY2FzZSAweDI1MUI6IHJldHVybigw eEJDKTsgICAgLyogQm9sZCAqLworICAgICAgICAgIGNhc2UgMHgyNTFDOiByZXR1cm4oMTk1KTsg ICAgIC8qIExlZnQgbWlkZGxlIGJveCBzaWRlICovCisgICAgICAgICAgY2FzZSAweDI1MjA6IHJl dHVybigweEMzKTsKKyAgICAgICAgICBjYXNlIDB4MjUyMzogcmV0dXJuKDB4Q0MpOyAgICAvKiBC b2xkICovCisgICAgICAgICAgY2FzZSAweDI1MjQ6IHJldHVybigxODApOyAgICAgLyogUmlnaHQg bWlkZGxlIGJveCBzaWRlICovCisgICAgICAgICAgY2FzZSAweDI1Mjg6IHJldHVybigxODApOwor ICAgICAgICAgIGNhc2UgMHgyNTJCOiByZXR1cm4oMHhCOSk7ICAgIC8qIEJvbGQgKi8KKyAgICAg ICAgICBjYXNlIDB4MjUyQzogcmV0dXJuKDE5NCk7ICAgICAvKiBNaWRkbGUgYm94IHRvcCAqLwor ICAgICAgICAgIGNhc2UgMHgyNTJGOiByZXR1cm4oMTk0KTsKKyAgICAgICAgICBjYXNlIDB4MjUz MzogcmV0dXJuKDB4Q0IpOyAgICAvKiBCb2xkICovCisgICAgICAgICAgY2FzZSAweDI1MzQ6IHJl dHVybigxOTMpOyAgICAgLyogTWlkZGxlIGJveCBib3QgKi8KKyAgICAgICAgICBjYXNlIDB4MjUz NzogcmV0dXJuKDE5Myk7CisgICAgICAgICAgY2FzZSAweDI1M0I6IHJldHVybigweENBKTsgICAg LyogQm9sZCAqLworICAgICAgICAgIGNhc2UgMHgyNTNDOiByZXR1cm4oMTk3KTsgICAgIC8qIEJv eCBpbnRlcnNlY3Rpb24gKi8KKyAgICAgICAgICBjYXNlIDB4MjUzRjogcmV0dXJuKDE5Nyk7Cisg ICAgICAgICAgY2FzZSAweDI1NDI6IHJldHVybigxOTcpOworICAgICAgICAgIGNhc2UgMHgyNTQ3 OiByZXR1cm4oMTk3KTsKKyAgICAgICAgICBjYXNlIDB4MjU0ODogcmV0dXJuKDE5Nyk7CisgICAg ICAgICAgY2FzZSAweDI1NDk6IHJldHVybigxOTcpOworICAgICAgICAgIGNhc2UgMHgyNTRBOiBy ZXR1cm4oMTk3KTsKKyAgICAgICAgICBjYXNlIDB4MjU0QjogcmV0dXJuKDB4Q0UpOyAgICAvKiBC b2xkICovCisgICAgICAgICAgY2FzZSAweDI1NTA6IHJldHVybigyMDUpOyAgICAgLyogQ2VudGVy IGJveCBiYXIgaG9yaXpvbnRhbCBkb3VibGUgKi8KKyAgICAgICAgICBjYXNlIDB4MjU1MTogcmV0 dXJuKDE4Nik7ICAgICAvKiBDZW50ZXIgYm94IGJhciB2ZXJ0aWNhbCBkb3VibGUgKi8KKyAgICAg ICAgICBjYXNlIDB4MjU1MjogcmV0dXJuKDIxMyk7ICAgICAvKiBVTCBib3ggY29ybmVyIHNpbmds ZSB0byBkb3VibGUgKi8KKyAgICAgICAgICBkZWZhdWx0OiByZXR1cm4oMHgxMyk7CisgICAgICAg IH0KKyAgICB9IGVsc2UgaWYgKGMgPj0gMHgyNTUzICYmIGMgPD0gMHgyNTc5KSB7IC8qIE1vcmUg Ym94IGRyYXdpbmcgKi8KKyAgICAgICAgc3dpdGNoIChjKSB7CisgICAgICAgICAgY2FzZSAweDI1 NTM6IHJldHVybigyMTQpOyAgICAgLyogVUwgYm94IGNvcm5lciBkb3VibGUgdG8gc2luZ2xlICov CisgICAgICAgICAgY2FzZSAweDI1NTQ6IHJldHVybigyMDEpOyAgICAgLyogVUwgYm94IGNvcm5l ciBkb3VibGUgKi8KKyAgICAgICAgICBjYXNlIDB4MjU1NTogcmV0dXJuKDE4NCk7ICAgICAvKiBV UiBib3ggY29ybmVyIGRvdWJsZSB0byBzaW5nbGUgKi8KKyAgICAgICAgICBjYXNlIDB4MjU1Njog cmV0dXJuKDE4Myk7ICAgICAvKiBVUiBib3ggY29ybmVyIHNpbmdsZSB0byBkb3VibGUgKi8KKyAg ICAgICAgICBjYXNlIDB4MjU1NzogcmV0dXJuKDE4Nyk7ICAgICAvKiBVUiBib3ggY29ybmVyIGRv dWJsZSAqLworICAgICAgICAgIGNhc2UgMHgyNTU4OiByZXR1cm4oMjEyKTsgICAgIC8qIExMIGJv eCBjb3JuZXIgc2luZ2xlIHRvIGRvdWJsZSAqLworICAgICAgICAgIGNhc2UgMHgyNTU5OiByZXR1 cm4oMjExKTsgICAgIC8qIExMIGJveCBjb3JuZXIgZG91YmxlIHRvIHNpbmdsZSAqLworICAgICAg ICAgIGNhc2UgMHgyNTVBOiByZXR1cm4oMjAwKTsgICAgIC8qIExMIGJveCBjb3JuZXIgZG91Ymxl ICovCisgICAgICAgICAgY2FzZSAweDI1NUI6IHJldHVybigxOTApOyAgICAgLyogTFIgYm94IGNv cm5lciBkb3VibGUgdG8gc2luZ2xlICovCisgICAgICAgICAgY2FzZSAweDI1NUM6IHJldHVybigx ODkpOyAgICAgLyogTFIgYm94IGNvcm5lciBzaW5nbGUgdG8gZG91YmxlICovCisgICAgICAgICAg Y2FzZSAweDI1NUQ6IHJldHVybigxODgpOyAgICAgLyogTFIgYm94IGNvcm5lciBkb3VibGUgKi8K KyAgICAgICAgICBjYXNlIDB4MjU1RTogcmV0dXJuKDE5OCk7ICAgICAvKiBMZWZ0IG1pZCBib3gg c2lkZSBzaW5nbGUgdG8gZG91YmwgKi8KKyAgICAgICAgICBjYXNlIDB4MjU1RjogcmV0dXJuKDE5 OSk7ICAgICAvKiBMZWZ0IG1pZCBib3ggc2lkZSBkb3VibGUgdG8gc2luZ2wgKi8KKyAgICAgICAg ICBjYXNlIDB4MjU2MDogcmV0dXJuKDIwNCk7ICAgICAvKiBMZWZ0IG1pZGRsZSBib3ggc2lkZSBk b3VibGUgKi8KKyAgICAgICAgICBjYXNlIDB4MjU2MTogcmV0dXJuKDE4MSk7ICAgICAvKiBSaWdo dCBib3ggc2lkZSBkb3VibGUgdG8gc2luZ2xlICovCisgICAgICAgICAgY2FzZSAweDI1NjI6IHJl dHVybigxODIpOyAgICAgLyogUmlnaHQgYm94IHNpZGUgc2luZ2xlIHRvIGRvdWJsZSAqLworICAg ICAgICAgIGNhc2UgMHgyNTYzOiByZXR1cm4oMTg1KTsgICAgIC8qIFJpZ2h0IG1pZGRsZSBib3gg c2lkZSBkb3VibGUgKi8KKyAgICAgICAgICBjYXNlIDB4MjU2NDogcmV0dXJuKDIwOSk7ICAgICAv KiBNaWRkbGUgYm94IHRvcCBkb3VibGUgdG8gc2luZ2xlICovCisgICAgICAgICAgY2FzZSAweDI1 NjU6IHJldHVybigyMTApOyAgICAgLyogTWlkZGxlIGJveCB0b3Agc2luZ2xlIHRvIGRvdWJsZSAq LworICAgICAgICAgIGNhc2UgMHgyNTY2OiByZXR1cm4oMjAzKTsgICAgIC8qIE1pZGRsZSBib3gg dG9wIGRvdWJsZSAqLworICAgICAgICAgIGNhc2UgMHgyNTY3OiByZXR1cm4oMjA3KTsgICAgIC8q IE1pZGRsZSBib3ggYm90IHNpbmdsZSB0byBkb3VibGUgKi8KKyAgICAgICAgICBjYXNlIDB4MjU2 ODogcmV0dXJuKDIwOCk7ICAgICAvKiBNaWRkbGUgYm94IGJvdCBkb3VibGUgdG8gc2luZ2xlICov CisgICAgICAgICAgY2FzZSAweDI1Njk6IHJldHVybigyMDIpOyAgICAgLyogTWlkZGxlIGJveCBi b3QgZG91YmxlICovCisgICAgICAgICAgY2FzZSAweDI1NkE6IHJldHVybigyMTYpOyAgICAgLyog Qm94IGludGVyc2VjdGlvbiBkb3VibGUgdG8gc2luZ2xlICovCisgICAgICAgICAgY2FzZSAweDI1 NkI6IHJldHVybigyMTUpOyAgICAgLyogQm94IGludGVyc2VjdGlvbiBzaW5nbGUgdG8gZG91Ymxl ICovCisgICAgICAgICAgY2FzZSAweDI1NkM6IHJldHVybigyMDYpOyAgICAgLyogQm94IGludGVy c2VjdGlvbiBkb3VibGUgKi8KKyAgICAgICAgICBjYXNlIDB4MjU2RDogcmV0dXJuKDIxOCk7ICAg ICAvKiBVTCBhcmMgKi8KKyAgICAgICAgICBjYXNlIDB4MjU2RTogcmV0dXJuKDE5MSk7ICAgICAv KiBVUiBhcmMgKi8KKyAgICAgICAgICBjYXNlIDB4MjU2RjogcmV0dXJuKDIxNyk7ICAgICAvKiBM UiBhcmMgKi8KKyAgICAgICAgICBjYXNlIDB4MjU3MDogcmV0dXJuKDE5Mik7ICAgICAvKiBMTCBh cmMgKi8KKyAgICAgICAgICBjYXNlIDB4MjU3MTogcmV0dXJuKDE3OSk7ICAgICAvKiBEaWFnb25h bCBsaW5lIExMIHRvIFVSICovCisgICAgICAgICAgY2FzZSAweDI1NzI6IHJldHVybigxOTYpOyAg ICAgLyogRGlhZ29uYWwgbGluZSBVTCB0byBMUiAqLworICAgICAgICAgIGNhc2UgMHgyNTczOiBy ZXR1cm4oODgpOyAgICAgIC8qIERpYWdvbmFsIGxpbmVzIGNyb3NzZWQgKi8KKyAgICAgICAgICBj YXNlIDB4MjU3NTogcmV0dXJuKDB4YjMpOyAgICAvKiBIaWdoIHZlcnRpY2FsIGxpbmUgKi8KKyAg ICAgICAgICBjYXNlIDB4MjU3NjogcmV0dXJuKDQ1KTsgICAgICAvKiBTaG9ydCBob3Jpem9udGFs IGxpbmUgKi8KKyAgICAgICAgICBjYXNlIDB4MjU3NzogcmV0dXJuKDB4YjMpOyAgICAvKiBMb3cg dmVydGljYWwgbGluZSAqLworICAgICAgICAgIGNhc2UgMHgyNTc5OiByZXR1cm4oMHhiMyk7ICAg IC8qIEhpZ2ggdmVydGljYWwgbGluZSBib2xkICovCisgICAgICAgICAgZGVmYXVsdDogcmV0dXJu KDB4MTMpOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChjID49IDB4MjU3YSAmJiBjIDw9IDB4 MjVmZikgeyAvKiBTdGlsbCBtb3JlIGJveCBkcmF3aW5nICovCisgICAgICAgIHN3aXRjaCAoYykg eworICAgICAgICAgIGNhc2UgMHgyNTdiOiByZXR1cm4oMHhiMyk7ICAgIC8qIExvdyB2ZXJ0aWNh bCBsaW5lIGJvbGQgKi8KKyAgICAgICAgICBjYXNlIDB4MjU4MDogcmV0dXJuKDIyMyk7ICAgICAv KiBRdWFkcmFudCBVTCBhbmQgVVIgKHRvcCBoYWxmKSAqLworICAgICAgICAgIGNhc2UgMHgyNTgx OiByZXR1cm4oMHhjNCk7ICAgIC8qIFNjYW4gbGluZSA5ICovCisgICAgICAgICAgY2FzZSAweDI1 ODI6IHJldHVybigweERDKTsgICAgLyogQmxhY2sgYmxvYiBsb3dlciBoYWxmICovCisgICAgICAg ICAgY2FzZSAweDI1ODQ6IHJldHVybigyMjApOyAgICAgLyogUXVhZHJhbnQgTEwgYW5kIExSIChs b3dlciBoYWxmKSAqLworICAgICAgICAgIGNhc2UgMHgyNTg4OiByZXR1cm4oMjE5KTsgICAgIC8q IEZpbGwgY2hhcmFjdGVyIGRhcmsgKi8KKyAgICAgICAgICBjYXNlIDB4MjU4QzogcmV0dXJuKDIy MSk7ICAgICAvKiBRdWFkcmFudCBVTCBhbmQgTEwgKGxlZnQgaGFsZikgKi8KKyAgICAgICAgICBj YXNlIDB4MjU4RTogcmV0dXJuKDB4REQpOworICAgICAgICAgIGNhc2UgMHgyNTkwOiByZXR1cm4o MjIyKTsgICAgIC8qIFF1YWRyYW50IFVSIGFuZCBMUiAocmlnaHQgaGFsZikgKi8KKyAgICAgICAg ICBjYXNlIDB4MjU5MTogcmV0dXJuKDE3Nik7ICAgICAvKiBGaWxsIGNoYXJhY3RlciBsaWdodCAq LworICAgICAgICAgIGNhc2UgMHgyNTkyOiByZXR1cm4oMTc3KTsgICAgIC8qIEZpbGwgY2hhcmFj dGVyIG1lZGl1bSAqLworICAgICAgICAgIGNhc2UgMHgyNTkzOiByZXR1cm4oMTc4KTsgICAgIC8q IEZpbGwgY2hhcmFjdGVyIGhlYXZ5ICovCisgICAgICAgICAgY2FzZSAweDI1OTQ6IHJldHVybigw eGM0KTsgICAgLyogU2NhbiBsaW5lIDEgKi8KKyAgICAgICAgICBjYXNlIDB4MjVBMDogcmV0dXJu KDI1NCk7ICAgICAvKiBTb2xpZCBzcXVhcmUsIGNlbnRlciAqLworICAgICAgICAgIGNhc2UgMHgy NUE2OiByZXR1cm4oMTc3KTsgICAgIC8qIEJsb3RjaCAqLworICAgICAgICAgIGNhc2UgMHgyNUFD OiAgICAgICAgICAgICAgICAgIC8qIEJsYWNrIHJlY3RhbmdsZSAqLworICAgICAgICAgIGNhc2Ug MHgyNUFGOiByZXR1cm4oMHgxNik7ICAgIC8qIFdoaXRlIHJlY3RhbmdsZSAqLworICAgICAgICAg IGNhc2UgMHgyNUIyOiAgICAgICAgICAgICAgICAgIC8qIFRyaWFuZ2xlLCB1cC1wb2ludGluZyAq LworICAgICAgICAgIGNhc2UgMHgyNUI0OiByZXR1cm4oMHgxZSk7ICAgIC8qIFRyaWFuZ2xlLCB1 cC1wb2ludGluZyAqLworICAgICAgICAgIGNhc2UgMHgyNUI2OiAgICAgICAgICAgICAgICAgIC8q IFRyaWFuZ2xlLCByaWdodC1wb2ludGluZywgZGFyayAqLworICAgICAgICAgIGNhc2UgMHgyNUI3 OiAgICAgICAgICAgICAgICAgIC8qIFRyaWFuZ2xlLCByaWdodC1wb2ludGluZywgbGlnaHQgKi8K KyAgICAgICAgICBjYXNlIDB4MjVCOTogICAgICAgICAgICAgICAgICAvKiBUcmlhbmdsZSwgcmln aHQtcG9pbnRpbmcsIGxpZ2h0ICovCisgICAgICAgICAgY2FzZSAweDI1QkE6IHJldHVybigweDEw KTsgICAgLyogVHJpYW5nbGUsIHJpZ2h0LXBvaW50aW5nLCBuYXJyb3cgKi8KKyAgICAgICAgICBj YXNlIDB4MjVCQzogICAgICAgICAgICAgICAgICAvKiBUcmlhbmdsZSwgZG93bi1wb2ludGluZyAq LworICAgICAgICAgIGNhc2UgMHgyNUJFOiByZXR1cm4oMHgxZik7ICAgIC8qIFRyaWFuZ2xlLCBk b3duLXBvaW50aW5nICovCisgICAgICAgICAgY2FzZSAweDI1QzA6ICAgICAgICAgICAgICAgICAg LyogVHJpYW5nbGUsIGxlZnQtcG9pbnRpbmcsIGRhcmsgKi8KKyAgICAgICAgICBjYXNlIDB4MjVD MTogICAgICAgICAgICAgICAgICAvKiBUcmlhbmdsZSwgbGVmdC1wb2ludGluZywgZGFyayAqLwor ICAgICAgICAgIGNhc2UgMHgyNUM0OiByZXR1cm4oMHgxMSk7ICAgIC8qIFRyaWFuZ2xlLCBsZWZ0 LXBvaW50aW5nLCBuYXJyb3cgKi8KKyAgICAgICAgICBjYXNlIDB4MjVDNjogcmV0dXJuKDQpOyAg ICAgICAvKiBEaWFtb25kLCBjZW50ZXIsIHNvbGlkICovCisgICAgICAgICAgY2FzZSAweDI1Q0I6 IHJldHVybigweDA5KTsgICAgLyogQ2lyY2xlICovCisgICAgICAgICAgY2FzZSAweDI1Q0Y6IHJl dHVybigyNDkpOyAgICAgLyogQ2VudGVyIGRvdCwgbGFyZ2UgKi8KKyAgICAgICAgICBjYXNlIDB4 MjVkODogcmV0dXJuKDB4MDgpOyAgICAvKiBJbnZlcnNlIGJ1bGxldCAqLworICAgICAgICAgIGNh c2UgMHgyNWQ5OiByZXR1cm4oMHgwYSk7ICAgIC8qIEludmVyc2Ugd2hpdGUgY2lyY2xlICovCisg ICAgICAgICAgY2FzZSAweDI1RTI6IHJldHVybigweEQ5KTsgICAgLyogTG93ZXIgcmlnaHQgdHJp YW5nbGUgKi8KKyAgICAgICAgICBjYXNlIDB4MjVFMzogcmV0dXJuKDB4QzApOyAgICAvKiBMb3dl ciBsZWZ0IHRyaWFuZ2xlICovCisgICAgICAgICAgY2FzZSAweDI1RTQ6IHJldHVybigweERBKTsg ICAgLyogVXBwZXIgbGVmdCB0cmlhbmdsZSAqLworICAgICAgICAgIGNhc2UgMHgyNUU1OiByZXR1 cm4oMHhCZik7ICAgIC8qIFVwcGVyIHJpZ2h0IHRyaWFuZ2xlICovCisgICAgICAgICAgZGVmYXVs dDogcmV0dXJuKDB4MTMpOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChjID49IDB4MjYwMCkg eyAgICAgICAgICAgLyogQWxsIHRoZSByZXN0ICovCisgICAgICAgIHN3aXRjaCAoYykgeworICAg ICAgICAgIGNhc2UgMHgyNjNhOiByZXR1cm4oMHgwMSk7ICAgIC8qIFNtaWxleSAqLworICAgICAg ICAgIGNhc2UgMHgyNjNiOiByZXR1cm4oMHgwMik7ICAgIC8qIEludmVyc2UgU21pbGV5ICovCisg ICAgICAgICAgY2FzZSAweDI2M2M6IHJldHVybigweDBmKTsgICAgLyogV2hpdGUgU3VuIHdpdGgg UmF5cyAqLworICAgICAgICAgIGNhc2UgMHgyNjQwOiByZXR1cm4oMHgwYyk7ICAgIC8qIE1hbGUg c2lnbiAqLworICAgICAgICAgIGNhc2UgMHgyNjQyOiByZXR1cm4oMHgwYik7ICAgIC8qIEZlbWFs ZSBzaWduICovCisgICAgICAgICAgY2FzZSAweDI2NjA6IHJldHVybigweDA2KTsgICAgLyogU3Bh ZGUgKi8KKyAgICAgICAgICBjYXNlIDB4MjY2MzogcmV0dXJuKDB4MDUpOyAgICAvKiBDbHViICov CisgICAgICAgICAgY2FzZSAweDI2NjU6IHJldHVybigweDAzKTsgICAgLyogSGVhcnQgKi8KKyAg ICAgICAgICBjYXNlIDB4MjY2NjogcmV0dXJuKDB4MDQpOyAgICAvKiBEaWFtb25kLCBjZW50ZXIs IHNvbGlkICovCisgICAgICAgICAgY2FzZSAweDI2NmE6IHJldHVybigweDBkKTsgICAgLyogUXVh cnRlciBub3RlICovCisgICAgICAgICAgY2FzZSAweDI2NmI6ICAgICAgICAgICAgICAgICAgLyog QmVhbWVkIHF1YXJ0ZXIgbm90ZXMgKi8KKyAgICAgICAgICBjYXNlIDB4MjY2YzogcmV0dXJuKDB4 MGUpOyAgICAvKiBCZWFtZWQgOHRoIG5vdGVzICovCisgICAgICAgICAgY2FzZSAweDI3OWU6IHJl dHVybigweDFhKTsgICAgLyogQm9sZCByaWdodCBhcnJvdyAqLworICAgICAgICAgIGNhc2UgMHgy N2ExOiByZXR1cm4oMHgxYSk7ICAgIC8qIEhlYXZ5IGJsYWNrIHJpZ2h0IGFycm93LiAqLworICAg ICAgICAgIGNhc2UgMHhFMjAwOiByZXR1cm4oMTgwKTsgICAgIC8qIEV4dGVuc2libGUgbGVmdCBi cmFjZSBtaWRkbGUgKi8KKyAgICAgICAgICBjYXNlIDB4RTIwMTogcmV0dXJuKDE5Mik7ICAgICAv KiBFeHRlbnNpYmxlIExlZnQgcGFyZW50aGVzaXMgYm90ICovCisgICAgICAgICAgY2FzZSAweEUy MDI6IHJldHVybigyMTgpOyAgICAgLyogRXh0ZW5zaWJsZSBsZWZ0IHBhcmVudGhlc2lzIHRvcCAq LworICAgICAgICAgIGNhc2UgMHhFMjAzOiByZXR1cm4oMTkyKTsgICAgIC8qIEV4dGVuc2libGUg bGVmdCBTQiBib3QgKi8KKyAgICAgICAgICBjYXNlIDB4RTIwNDogcmV0dXJuKDIxOCk7ICAgICAv KiBFeHRlbnNpYmxlIGxlZnQgU0IgdG9wICovCisgICAgICAgICAgY2FzZSAweEUyMDU6IHJldHVy bigxOTUpOyAgICAgLyogRXh0ZW5zaWJsZSByaWdodCBicmFjZSBtaWRkbGUgKi8KKyAgICAgICAg ICBjYXNlIDB4RTIwNjogcmV0dXJuKDIxNyk7ICAgICAvKiBFeHRlbnNpYmxlIHJpZ2h0IHBhcmVu dGhlc2lzIGJvdCAqLworICAgICAgICAgIGNhc2UgMHhFMjA3OiByZXR1cm4oMTkxKTsgICAgIC8q IEV4dGVuc2libGUgcmlnaHQgcGFyZW50aGVzaXMgdG9wICovCisgICAgICAgICAgY2FzZSAweEUy MDg6IHJldHVybigyMTcpOyAgICAgLyogRXh0ZW5zaWJsZSByaWdodCBTQiBib3QgKi8KKyAgICAg ICAgICBjYXNlIDB4RTIwOTogcmV0dXJuKDE5MSk7ICAgICAvKiBFeHRlbnNpYmxlIHJpZ2h0IFNC IHRvcCAqLworICAgICAgICAgIGNhc2UgMHhFMjBDOiByZXR1cm4oMjI4KTsgICAgIC8qIFN1bW1h dGlvbiBzeW1ib2wgYm90ICovCisgICAgICAgICAgY2FzZSAweEUyMEQ6IHJldHVybigyMjgpOyAg ICAgLyogU3VtbWF0aW9uIHN5bWJvbCB0b3AgKi8KKyAgICAgICAgICBjYXNlIDB4RTIwRTogcmV0 dXJuKDE5MSk7ICAgICAvKiBSaWdodCBjZWlsaW5nIGNvcm5lciAqLworICAgICAgICAgIGNhc2Ug MHhFMjBGOiByZXR1cm4oMjE3KTsgICAgIC8qIFJpZ2h0IGZsb29yIGNvcm5lciAqLworICAgICAg ICAgIGNhc2UgMHhFMzAwOiByZXR1cm4oMTc5KTsgICAgIC8qIFYgYm94IGxpbmUsIGV4dGVuc2li bGUsIGxlZnQgKi8KKyAgICAgICAgICBjYXNlIDB4RTMwOTogcmV0dXJuKDE3OSk7ICAgICAvKiBW IGJveCBsaW5lLCBleHRlbnNpYmxlLCByaWdodCAqLworICAgICAgICAgIGNhc2UgMHhFMzBBOiBy ZXR1cm4oMjIxKTsgICAgIC8qIERpYWdvbmFsIGZpbGwsIGRhcmssIFVMICovCisgICAgICAgICAg Y2FzZSAweEUzMEI6IHJldHVybigyMjIpOyAgICAgLyogRGlhZ29uYWwgZmlsbCwgZGFyaywgVVIg Ki8KKyAgICAgICAgICBjYXNlIDB4RTMyMDogcmV0dXJuKDIyMSk7ICAgICAvKiBRdWFkcmFudCBM TCAqLworICAgICAgICAgIGNhc2UgMHhFMzIxOiByZXR1cm4oMjIyKTsgICAgIC8qIFF1YWRyYW50 IExSICovCisgICAgICAgICAgY2FzZSAweEUzMjI6IHJldHVybigyMjEpOyAgICAgLyogUXVhZHJh bnQgVUwgKi8KKyAgICAgICAgICBjYXNlIDB4RTMyMzogcmV0dXJuKDIxOSk7ICAgICAvKiBRdWFk cmFudCBVTCBhbmQgTEwgYW5kIExSICovCisgICAgICAgICAgY2FzZSAweEUzMjQ6IHJldHVybigy MTkpOyAgICAgLyogUXVhZHJhbnQgVUwgYW5kIExSICovCisgICAgICAgICAgY2FzZSAweEUzMjU6 IHJldHVybigyMTkpOyAgICAgLyogUXVhZHJhbnQgVUwgYW5kIExSICovCisgICAgICAgICAgY2Fz ZSAweEUzMjY6IHJldHVybigyMTkpOyAgICAgLyogUXVhZHJhbnQgVUwgYW5kIFVSIGFuZCBMTCAq LworICAgICAgICAgIGNhc2UgMHhFMzI3OiByZXR1cm4oMjE5KTsgICAgIC8qIFF1YWRyYW50IFVM IGFuZCBVUiBhbmQgTFIgKi8KKyAgICAgICAgICBjYXNlIDB4RTMyODogcmV0dXJuKDIyMik7ICAg ICAvKiBRdWFkcmFudCBVUiAqLworICAgICAgICAgIGNhc2UgMHhFMzI5OiByZXR1cm4oMjE5KTsg ICAgIC8qIFF1YWRyYW50IFVSIGFuZCBMTCBhbmQgTFIgKi8KKyAgICAgICAgICBjYXNlIDB4RTQw MDogcmV0dXJuKDI1MSk7ICAgICAvKiBSYWRpY2FsIHN5bWJvbCwgc21hbGwgKi8KKyAgICAgICAg ICBjYXNlIDB4RTQwMTogcmV0dXJuKDE2OCk7ICAgICAvKiBSZXZlcnNlIHF1ZXN0aW9uIG1hcmsg Ki8KKyAgICAgICAgICBjYXNlIDB4RkZGRDogcmV0dXJuKDB4MTMpOyAgICAvKiAhISBmb3IgdW5r bm93biAqLworICAgICAgICAgIGRlZmF1bHQ6IHJldHVybigweDEzKTsKKyAgICAgICAgfQorICAg IH0KKyAgICByZXR1cm4oMHgxMyk7Cit9CisKKyNpZmRlZiBPUzIKKy8qCisgIEx1Y2lkYSBDb25z b2xlIGlzIGEgVW5pY29kZSBmb250LCBidXQgaXQgaXMgdmVyeSBzcGFyc2VseSBwb3B1bGF0ZWQu CisgIFNpbmNlIGl0IGlzIHRoZSBvbmx5IG1vbm9zcGFjZSBVbmljb2RlIGZvbnQgbW9zdCBwZW9w bGUgaGF2ZSwgd2UgaGF2ZQorICB0byBtYWtlIHJlYXNvbmFibGUgc3Vic3RpdHV0aW9ucyBvciBl bHNlIDMvNCBvZiB0aGUgZ2x5cGhzIHdpbGwgc2hvdworICB1cCBhcyBibG9icyBvbiB0aGUgc2Ny ZWVuLgorKi8KK1VTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVbmlj b2RlIHRvIEx1Y2lkYSBDb25zb2xlICovCisjaWZkZWYgQ0tfQU5TSUMKK3R4X2x1Y2lkYXN1YihV U0hPUlQgYykKKyNlbHNlCit0eF9sdWNpZGFzdWIoYykgVVNIT1JUIGM7CisjZW5kaWYgLyogQ0tf QU5TSUMgKi8KK3sKKyAgICBpZiAoYyA8IDB4MDE4MCkgICAgICAgICAgICAgICAgICAgICAvKiBM YXRpbi0xIGFuZCBFeHRlbmRlZCBBICovCisgICAgICByZXR1cm4oYyk7CisKKy8qIEZvciBlZmZp Y2llbmN5IHdlIHRyeSB0byBhcnJhbmdlIHRoZSBzZWN0aW9ucyBieSBmcmVxdWVuY3kgb2YgdXNl LiAqLworICAgIGlmIChjID49IDB4MjNCQSAmJiBjIDw9IDB4MjNCRCkgeworICAgICAgICBzd2l0 Y2goYykgeworICAgICAgICAgIGNhc2UgMHgyM0JBOiAgICAgICAgICAgICAgICAgICAgLyogSCBs aW5lIC0gU2NhbiAxICovCisgICAgICAgICAgY2FzZSAweDIzQkI6ICAgICAgICAgICAgICAgICAg ICAvKiBIIGxpbmUgLSBTY2FuIDMgKi8KKyAgICAgICAgICBjYXNlIDB4MjNCQzogICAgICAgICAg ICAgICAgICAgIC8qIEggbGluZSAtIFNjYW4gNyAqLworICAgICAgICAgIGNhc2UgMHgyM0JEOiAg ICAgICAgICAgICAgICAgICAgLyogSCBsaW5lIC0gU2NhbiA5ICovCisgICAgICAgICAgICByZXR1 cm4oMHgyNTAwKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoYyA+PSAweDI1MDAgJiYgYyA8 PSAweDI1N2YpIHsgICAvKiBCb3ggZHJhd2luZyAqLworICAgICAgICBpZiAoYyA+PSAweDI1NTAg JiYgYyA8PSAweDI1NmMpCisgICAgICAgICAgcmV0dXJuKGMpOworICAgICAgICBzd2l0Y2ggKGMp IHsKKyAgICAgICAgICAvKiBUaGVtc2VsdmVzICovCisgICAgICAgIGNhc2UgMHgyNTAwOgorICAg ICAgICBjYXNlIDB4MjUwMjoKKyAgICAgICAgY2FzZSAweDI1MGM6CisgICAgICAgIGNhc2UgMHgy NTEwOgorICAgICAgICBjYXNlIDB4MjUxNDoKKyAgICAgICAgY2FzZSAweDI1MTg6CisgICAgICAg IGNhc2UgMHgyNTFjOgorICAgICAgICBjYXNlIDB4MjUyNDoKKyAgICAgICAgY2FzZSAweDI1MmM6 CisgICAgICAgIGNhc2UgMHgyNTM0OgorICAgICAgICBjYXNlIDB4MjUzYzoKKyAgICAgICAgICAg IHJldHVybihjKTsKKyAgICAgICAgICAvKiBIb3Jpem9udGFsIGxpbmVzICovCisgICAgICAgIGNh c2UgMHgyNTAxOiAgICAgICAgICAgICAgICAgICAgLyogQm9sZCAqLworICAgICAgICAgICAgcmV0 dXJuKDB4MjU1MCk7ICAgICAgICAgICAgIC8qIFVzZSBkb3VibGUgKi8KKyAgICAgICAgY2FzZSAw eDI1MDQ6CisgICAgICAgIGNhc2UgMHgyNTA1OgorICAgICAgICBjYXNlIDB4MjUwODoKKyAgICAg ICAgY2FzZSAweDI1MDk6CisgICAgICAgIGNhc2UgMHgyNTRjOgorICAgICAgICBjYXNlIDB4MjU0 ZDoKKyAgICAgICAgY2FzZSAweDI1N2M6CisgICAgICAgIGNhc2UgMHgyNTdlOgorICAgICAgICAg ICAgcmV0dXJuKDB4MjUwMCk7CisgICAgICAgICAgLyogVmVydGljYWwgbGluZXMgKi8KKyAgICAg ICAgY2FzZSAweDI1MDM6ICAgICAgICAgICAgICAgICAgICAvKiBCb2xkICovCisgICAgICAgICAg ICByZXR1cm4oMHgyNTUxKTsgICAgICAgICAgICAgLyogVXNlIGRvdWJsZSAqLworICAgICAgICBj YXNlIDB4MjUwNjoKKyAgICAgICAgY2FzZSAweDI1MDc6CisgICAgICAgIGNhc2UgMHgyNTBhOgor ICAgICAgICBjYXNlIDB4MjUwYjogLyogT3RoZXIgKi8KKyAgICAgICAgY2FzZSAweDI1NGU6Cisg ICAgICAgIGNhc2UgMHgyNTRmOgorICAgICAgICBjYXNlIDB4MjU3ZDoKKyAgICAgICAgY2FzZSAw eDI1N2Y6CisgICAgICAgIGNhc2UgMHgyNTc1OgorICAgICAgICBjYXNlIDB4MjU3NzoKKyAgICAg ICAgY2FzZSAweDI1Nzk6CisgICAgICAgIGNhc2UgMHgyNTdiOgorICAgICAgICAgICAgcmV0dXJu KDB4MjUwMik7CisgICAgICAgICAgICAvKiBVcHBlciBsZWZ0IGJveCBjb3JuZXIgKi8KKyAgICAg ICAgY2FzZSAweDI1MGY6ICAgICAgICAgICAgICAgICAgICAvKiBCb2xkICovCisgICAgICAgICAg ICByZXR1cm4oMHgyNTU0KTsgICAgICAgICAgICAgLyogVXNlIGRvdWJsZSAqLworICAgICAgICBj YXNlIDB4MjUwZDogY2FzZSAweDI1MGU6ICAgICAgIC8qIE90aGVyICovCisgICAgICAgICAgICBy ZXR1cm4oMHgyNTBjKTsKKyAgICAgICAgICAvKiBVcHBlciByaWdodCBib3ggY29ybmVyICovCisg ICAgICAgIGNhc2UgMHgyNTEzOiAgICAgICAgICAgICAgICAgICAgLyogQm9sZCAqLworICAgICAg ICAgICAgcmV0dXJuKDB4MjU1Nyk7CisgICAgICAgIGNhc2UgMHgyNTExOgorICAgICAgICBjYXNl IDB4MjUxMjogICAgLyogT3RoZXIgKi8KKyAgICAgICAgICAgIHJldHVybigweDI1MTApOworICAg ICAgICAgIC8qIExvd2VyIGxlZnQgYm94IGNvcm5lciAqLworICAgICAgICBjYXNlIDB4MjUxNzog ICAgICAgICAgICAgICAgICAgIC8qIEJvbGQgKi8KKyAgICAgICAgICAgIHJldHVybigweDI1NWEp OworICAgICAgICBjYXNlIDB4MjUxNToKKyAgICAgICAgY2FzZSAweDI1MTY6ICAgIC8qIE90aGVy ICovCisgICAgICAgICAgICByZXR1cm4oMHgyNTE0KTsKKyAgICAgICAgICAvKiBMb3dlciByaWdo dCBib3ggY29ybmVyICovCisgICAgICAgIGNhc2UgMHgyNTFiOiAgICAgICAgICAgICAgICAgICAg LyogQm9sZCAqLworICAgICAgICAgICAgcmV0dXJuKDB4MjU1ZCk7CisgICAgICAgIGNhc2UgMHgy NTE5OgorICAgICAgICBjYXNlIDB4MjUxYTogICAgLyogT3RoZXIgKi8KKyAgICAgICAgICAgIHJl dHVybigweDI1MTgpOworICAgICAgICAgIC8qIFZlcnRpY2FsIGFuZCByaWdodCAqLworICAgICAg ICBjYXNlIDB4MjUyMzogICAgICAgICAgICAgICAgICAgIC8qIEJvbGQgKi8KKyAgICAgICAgICAg IHJldHVybigweDI1NjApOworICAgICAgICBjYXNlIDB4MjUxZDoKKyAgICAgICAgY2FzZSAweDI1 MWU6CisgICAgICAgIGNhc2UgMHgyNTFmOgorICAgICAgICBjYXNlIDB4MjUyMDoKKyAgICAgICAg Y2FzZSAweDI1MjE6CisgICAgICAgIGNhc2UgMHgyNTIyOgorICAgICAgICAgICAgcmV0dXJuKDB4 MjUxYyk7CisgICAgICAgICAgLyogVmVydGljYWwgYW5kIGxlZnQgKi8KKyAgICAgICAgY2FzZSAw eDI1MmI6ICAgICAgICAgICAgICAgICAgICAvKiBCb2xkICovCisgICAgICAgICAgICByZXR1cm4o MHgyNTYzKTsKKyAgICAgICAgY2FzZSAweDI1MjU6CisgICAgICAgIGNhc2UgMHgyNTI2OgorICAg ICAgICBjYXNlIDB4MjUyNzoKKyAgICAgICAgY2FzZSAweDI1Mjg6CisgICAgICAgIGNhc2UgMHgy NTI5OgorICAgICAgICBjYXNlIDB4MjUyYToKKyAgICAgICAgICAgIHJldHVybigweDI1MjQpOwor ICAgICAgICAgIC8qIEhvcml6b250YWwgYW5kIGRvd24gKi8KKyAgICAgICAgICBjYXNlIDB4MjUz MzogICAgICAgICAgICAgICAgICAvKiBCb2xkICovCisgICAgICAgICAgICByZXR1cm4oMHgyNTY2 KTsKKyAgICAgICAgY2FzZSAweDI1MmQ6CisgICAgICAgIGNhc2UgMHgyNTJlOgorICAgICAgICBj YXNlIDB4MjUyZjoKKyAgICAgICAgY2FzZSAweDI1MzA6CisgICAgICAgIGNhc2UgMHgyNTMxOgor ICAgICAgICBjYXNlIDB4MjUzMjoKKyAgICAgICAgICAgIHJldHVybigweDI1MmMpOworICAgICAg ICAgICAgLyogSG9yaXpvbnRhbCBhbmQgdXAgKi8KKyAgICAgICAgY2FzZSAweDI1M2I6ICAgICAg ICAgICAgICAgICAgICAvKiBCb2xkICovCisgICAgICAgICAgICByZXR1cm4oMHgyNTY5KTsKKyAg ICAgICAgY2FzZSAweDI1MzU6IGNhc2UgMHgyNTM2OiBjYXNlIDB4MjUzNzoKKyAgICAgICAgY2Fz ZSAweDI1Mzg6IGNhc2UgMHgyNTM5OiBjYXNlIDB4MjUzYToKKyAgICAgICAgICAgIHJldHVybigw eDI1MzQpOworICAgICAgICAgIC8qIEhvcml6b250YWwgYW5kIFZlcnRpY2FsICovCisgICAgICAg ICAgY2FzZSAweDI1NGI6ICAgICAgICAgICAgICAgICAgLyogQm9sZCAqLworICAgICAgICAgICAg cmV0dXJuKDB4MjU2Yyk7CisgICAgICAgICAgY2FzZSAweDI1M2Q6IGNhc2UgMHgyNTNlOiBjYXNl IDB4MjUzZjoKKyAgICAgICAgY2FzZSAweDI1NDA6IGNhc2UgMHgyNTQxOiBjYXNlIDB4MjU0Mjog Y2FzZSAweDI1NDM6CisgICAgICAgIGNhc2UgMHgyNTQ0OiBjYXNlIDB4MjU0NTogY2FzZSAweDI1 NDY6IGNhc2UgMHgyNTQ3OgorICAgICAgICBjYXNlIDB4MjU0ODogY2FzZSAweDI1NDk6IGNhc2Ug MHgyNTRhOgorICAgICAgICAgICAgcmV0dXJuKDB4MjUzYyk7CisgICAgICAgICAgLyogQ3VydmVk IGNvcm5lcnMgKi8KKyAgICAgICAgICBjYXNlIDB4MjU2ZDogICAgICAgICAgICAgICAgICAvKiBV TCAqLworICAgICAgICAgICAgcmV0dXJuKDB4MjUwYyk7CisgICAgICAgICAgY2FzZSAweDI1NmU6 ICAgICAgICAgICAgICAgICAgLyogVVIgKi8KKyAgICAgICAgICAgIHJldHVybigweDI1MTApOwor ICAgICAgICAgIGNhc2UgMHgyNTZmOiAgICAgICAgICAgICAgICAgIC8qIExMICovCisgICAgICAg ICAgICByZXR1cm4oMHgyNTE4KTsKKyAgICAgICAgICBjYXNlIDB4MjU3MDogICAgICAgICAgICAg ICAgICAvKiBMUiAqLworICAgICAgICAgICAgcmV0dXJuKDB4MjUxNCk7CisgICAgICAgICAgY2Fz ZSAweDI1NzE6ICAgICAgICAgICAgICAgICAgLyogRGlhZ29uYWwgKi8KKyAgICAgICAgICAgIHJl dHVybigweDAwMmYpOworICAgICAgICAgIGNhc2UgMHgyNTcyOiAgICAgICAgICAgICAgICAgIC8q IE90aGVyIGRpYWdvbmFsICovCisgICAgICAgICAgICByZXR1cm4oMHgwMDVjKTsKKyAgICAgICAg ICBjYXNlIDB4MjU3MzogICAgICAgICAgICAgICAgICAvKiBEaWFnb25hbCBjcm9zcyAqLworICAg ICAgICAgICAgcmV0dXJuKDB4MDBkNyk7CisgICAgICAgICAgLyogUGFydGlhbCBob3Jpem9udGFs IGxpbmVzICovCisgICAgICAgIGNhc2UgMHgyNTc0OiBjYXNlIDB4MjU3NjogY2FzZSAweDI1Nzg6 IGNhc2UgMHgyNTdhOgorICAgICAgICAgICAgcmV0dXJuKDB4MDAyZCk7CisgICAgICAgIGRlZmF1 bHQ6CisgICAgICAgICAgICByZXR1cm4oMHhmZmZkKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBp ZiAoYyA+PSAweDIxOTAgJiYgYyA8PSAweDIxZmYpIHsgICAvKiBBcnJvd3MgKi8KKyAgICAgICAg aWYgKGMgPj0gMHgyMTkwICYmIGMgPD0gMHgyMTk1IHx8IGMgPT0gMHgyMWE4KQorICAgICAgICAg IHJldHVybihjKTsKKyAgICAgICAgc3dpdGNoIChjKSB7CisgICAgICAgICAgLyogTGVmdC1hcnJv dyBmb3JtcyAqLworICAgICAgICBjYXNlIDB4MjE5ZTogY2FzZSAweDIxYTI6IGNhc2UgMHgyMWE0 OiBjYXNlIDB4MjFhOToKKyAgICAgICAgY2FzZSAweDIxYmM6IGNhc2UgMHgyMWQwOiBjYXNlIDB4 MjFkYTogY2FzZSAweDIxZGM6CisgICAgICAgIGNhc2UgMHgyMWUwOiBjYXNlIDB4MjFlNDogY2Fz ZSAweDIxZTY6IGNhc2UgMHgyMWM3OgorICAgICAgICAgICAgcmV0dXJuKDB4MjE5MCk7CisgICAg ICAgICAgLyogUmlnaHQtYXJyb3cgZm9ybXMgKi8KKyAgICAgICAgY2FzZSAweDIxYTA6IGNhc2Ug MHgyMWEzOiBjYXNlIDB4MjFhNjogY2FzZSAweDIxYWE6CisgICAgICAgIGNhc2UgMHgyMWMwOiBj YXNlIDB4MjFjMTogY2FzZSAweDIxYzk6IGNhc2UgMHgyMWQyOgorICAgICAgICBjYXNlIDB4MjFk YjogY2FzZSAweDIxZGQ6IGNhc2UgMHgyMWUyOiBjYXNlIDB4MjFlNToKKyAgICAgICAgY2FzZSAw eDIxZTg6CisgICAgICAgICAgICByZXR1cm4oMHgyMTkyKTsKKyAgICAgICAgICAvKiBVcC1hcnJv dyBmb3JtcyAqLworICAgICAgICBjYXNlIDB4MjE5ZjogY2FzZSAweDIxYTU6IGNhc2UgMHgyMWJl OiBjYXNlIDB4MjFiZjoKKyAgICAgICAgY2FzZSAweDIxYzg6IGNhc2UgMHgyMWQxOiBjYXNlIDB4 MjFkZTogY2FzZSAweDIxZTE6CisgICAgICAgIGNhc2UgMHgyMWU3OiBjYXNlIDB4MjFlYToKKyAg ICAgICAgICAgIHJldHVybigweDIxOTEpOworICAgICAgICAgIC8qIERvd24tYXJyb3cgZm9ybXMg Ki8KKyAgICAgICAgY2FzZSAweDIxYTE6IGNhc2UgMHgyMWE3OiBjYXNlIDB4MjFhZjogY2FzZSAw eDIxYzI6CisgICAgICAgIGNhc2UgMHgyMWNlOiBjYXNlIDB4MjFjYTogY2FzZSAweDIxZDM6IGNh c2UgMHgyMWRmOgorICAgICAgICBjYXNlIDB4MjFlMzogY2FzZSAweDIxZTk6CisgICAgICAgICAg ICByZXR1cm4oMHgyMTkzKTsKKyAgICAgICAgICAvKiBVcC1kb3duLWFycm93IGZvcm1zICovCisg ICAgICAgIGNhc2UgMHgyMWM1OiBjYXNlIDB4MjFkNToKKyAgICAgICAgICAgIHJldHVybigweDIx OTUpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuKDB4ZmZmZCk7CisgICAg ICAgIH0KKyAgICB9CisgICAgaWYgKGMgPj0gMHgyNTgwICYmIGMgPD0gMHgyNTlmKSB7ICAgLyog QmxvY2sgZWxlbWVudHMgKi8KKyAgICAgICAgc3dpdGNoIChjKSB7CisgICAgICAgIGNhc2UgMHgy NTgwOiBjYXNlIDB4MjU4NDogY2FzZSAweDI1ODg6IGNhc2UgMHgyNThjOgorICAgICAgICBjYXNl IDB4MjU5MDogY2FzZSAweDI1OTE6IGNhc2UgMHgyNTkyOiBjYXNlIDB4MjU5MzoKKyAgICAgICAg ICAgIHJldHVybihjKTsKKyAgICAgICAgY2FzZSAweDI1ODE6IGNhc2UgMHgyNTgyOiBjYXNlIDB4 MjU4MzoKKyAgICAgICAgY2FzZSAweDI1ODU6IGNhc2UgMHgyNTg2OiBjYXNlIDB4MjU4NzoKKyAg ICAgICAgICAgIHJldHVybigweDI1ODQpOworICAgICAgICBjYXNlIDB4MjU4OTogY2FzZSAweDI1 OGE6IGNhc2UgMHgyNThiOgorICAgICAgICBjYXNlIDB4MjU4ZDogY2FzZSAweDI1OGU6IGNhc2Ug MHgyNThmOgorICAgICAgICAgICAgcmV0dXJuKDB4MjU4Yyk7CisgICAgICAgIGNhc2UgMHgyNTk1 OgorICAgICAgICAgICAgcmV0dXJuKDB4MjUwMik7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg ICAgICByZXR1cm4oMHhmZmZkKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoYyA+PSAweDIy MDAgJiYgYyA8PSAweDIyZmYpIHsgICAvKiBNYXRoZW1hdGljYWwgb3BlcmF0b3JzICovCisgICAg ICAgIHN3aXRjaCAoYykgeworICAgICAgICBjYXNlIDB4MjIwMjogY2FzZSAweDIyMDY6IGNhc2Ug MHgyMjBmOiBjYXNlIDB4MjIxMTogY2FzZSAweDIyMTI6CisgICAgICAgIGNhc2UgMHgyMjE5OiBj YXNlIDB4MjIyMDogY2FzZSAweDIyMWU6IGNhc2UgMHgyMjFmOiBjYXNlIDB4MjIyOToKKyAgICAg ICAgY2FzZSAweDIyMmI6IGNhc2UgMHgyMjQ4OiBjYXNlIDB4MjI2MDogY2FzZSAweDIyNjE6IGNh c2UgMHgyMjY0OgorICAgICAgICBjYXNlIDB4MjI2NToKKyAgICAgICAgICAgIHJldHVybihjKTsK KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybigweGZmZmQpOworICAgICAgICB9 CisgICAgfQorICAgIGlmIChjID49IDB4MjMwMCAmJiBjIDw9IDB4MjM3ZikgeyAgIC8qIE1pc2Nl bGxhbmVvdXMgVGVjaG5pY2FsICovCisgICAgICAgIGlmIChjID09IDB4MjMwMiB8fCBjID09IDB4 MjMxMCB8fCBjID09IDB4MjMyMCB8fCBjID09IDB4MjMyMSkKKyAgICAgICAgICByZXR1cm4oYyk7 CisgICAgICAgIHN3aXRjaCAoYykgeworICAgICAgICAgIGNhc2UgMHgyMzI5OiAgICAgICAgICAg ICAgICAgIC8qIEJSQSAqLworICAgICAgICAgICAgcmV0dXJuKDB4MDAzYyk7CisgICAgICAgICAg Y2FzZSAweDIzMmE6ICAgICAgICAgICAgICAgICAgLyogS0VUICovCisgICAgICAgICAgICByZXR1 cm4oMHgwMDNlKTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgcmV0dXJuKDB4ZmZm ZCk7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGMgPj0gMHgyNWEwICYmIGMgPD0gMHgyNWZm KSB7ICAgLyogR2VvbWV0cmljIHNoYXBlcyAqLworICAgICAgICBzd2l0Y2ggKGMpIHsKKyAgICAg ICAgICAvKiBUaGVtc2VsdmVzICovCisgICAgICAgIGNhc2UgMHgyNWEwOiBjYXNlIDB4MjVhYzog Y2FzZSAweDI1YjI6IGNhc2UgMHgyNWJhOgorICAgICAgICBjYXNlIDB4MjViYzogY2FzZSAweDI1 YzQ6IGNhc2UgMHgyNWNhOiBjYXNlIDB4MjVjYjoKKyAgICAgICAgY2FzZSAweDI1ZDg6IGNhc2Ug MHgyNWQ5OgorICAgICAgICAgICAgcmV0dXJuKGMpOworICAgICAgICAgIC8qIFNxdWFyZXMgKi8K KyAgICAgICAgICBjYXNlIDB4MjVhMTogY2FzZSAweDI1YTI6IGNhc2UgMHgyNWEzOiBjYXNlIDB4 MjVhNDoKKyAgICAgICAgICBjYXNlIDB4MjVhNTogY2FzZSAweDI1YTY6IGNhc2UgMHgyNWE3OiBj YXNlIDB4MjVhODoKKyAgICAgICAgY2FzZSAweDI1YTk6IGNhc2UgMHgyNWFhOiBjYXNlIDB4MjVh YjoKKyAgICAgICAgY2FzZSAweDI1ZTc6IGNhc2UgMHgyNWU4OiBjYXNlIDB4MjVlOTogY2FzZSAw eDI1ZWE6IGNhc2UgMHgyNWViOgorICAgICAgICAgICAgcmV0dXJuKDB4MjVhMCk7CisgICAgICAg ICAgY2FzZSAweDI1YWQ6IGNhc2UgMHgyNWFlOiBjYXNlIDB4MjVhZjogLyogUmVjdGFuZ2xlcyAq LworICAgICAgICBjYXNlIDB4MjViMDogY2FzZSAweDI1YjE6CisgICAgICAgICAgICByZXR1cm4o MHgyNWFjKTsKKyAgICAgICAgICBjYXNlIDB4MjViMzogY2FzZSAweDI1YjQ6IGNhc2UgMHgyNWI1 OiAvKiBVcHJpZ2h0IHRyaWFuZ2xlcyAqLworICAgICAgICBjYXNlIDB4MjVlYzogY2FzZSAweDI1 ZWQ6IGNhc2UgMHgyNWVlOgorICAgICAgICAgICAgcmV0dXJuKDB4MjViMik7CisgICAgICAgIGNh c2UgMHgyNWI2OiBjYXNlIDB4MjViNzogY2FzZSAweDI1Yjg6IGNhc2UgMHgyNWI5OiBjYXNlIDB4 MjViYjoKKyAgICAgICAgICAgIHJldHVybigweDI1YmEpOyAgICAgICAgICAgICAgICAgICAgICAv KiBSaWdodC1wb2ludGluZyB0cmlhbmdsZXMgKi8KKyAgICAgICAgICBjYXNlIDB4MjViZDogY2Fz ZSAweDI1YmU6IGNhc2UgMHgyNWJmOiAvKiBEb3duLXBvaW50aW5nIHRyaWFuZ2xlcyAqLworICAg ICAgICAgICAgcmV0dXJuKDB4MjViYyk7CisgICAgICAgIGNhc2UgMHgyNWMwOiBjYXNlIDB4MjVj MTogY2FzZSAweDI1YzI6IGNhc2UgMHgyNWMzOiBjYXNlIDB4MjVjNToKKyAgICAgICAgICAgIHJl dHVybigweDI1YzQpOyAgICAgICAgICAgICAgICAgICAgICAvKiBMZWZ0LXBvaW50aW5nIHRyaWFu Z2xlcyAqLworICAgICAgICAgIGNhc2UgMHgyNWM2OiBjYXNlIDB4MjVjNzogY2FzZSAweDI1Yzg6 IC8qIERpYW1vbmRzICovCisgICAgICAgICAgICByZXR1cm4oMHgyNjY2KTsKKyAgICAgICAgICAv KiBDaXJjbGVzICovCisgICAgICAgIGNhc2UgMHgyNWM5OiBjYXNlIDB4MjVjYzogY2FzZSAweDI1 Y2Q6IGNhc2UgMHgyNWNlOiBjYXNlIDB4MjVjZjoKKyAgICAgICAgY2FzZSAweDI1ZDA6IGNhc2Ug MHgyNWQxOiBjYXNlIDB4MjVkMjogY2FzZSAweDI1ZDM6IGNhc2UgMHgyNWQ0OgorICAgICAgICBj YXNlIDB4MjVkNTogY2FzZSAweDI1ZTY6IGNhc2UgMHgyNWVmOgorICAgICAgICAgICAgcmV0dXJu KDB4MjVjYik7CisgICAgICAgICAgLyogQ3VydmVzIGFuZCBjb3JuZXIgdHJpYW5nbGVzICovCisg ICAgICAgICAgY2FzZSAweDI1ZGM6IGNhc2UgMHgyNWU0OiAgICAgLyogVUwgKi8KKyAgICAgICAg ICAgIHJldHVybigweDI1MGMpOworICAgICAgICAgIGNhc2UgMHgyNWRkOiBjYXNlIDB4MjVlNTog ICAgIC8qIFVSICovCisgICAgICAgICAgICByZXR1cm4oMHgyNTEwKTsKKyAgICAgICAgICBjYXNl IDB4MjVkZjogY2FzZSAweDI1ZTM6ICAgICAvKiBMTCAqLworICAgICAgICAgICAgcmV0dXJuKDB4 MjUxNCk7CisgICAgICAgICAgY2FzZSAweDI1ZGU6IGNhc2UgMHgyNWUyOiAgICAgLyogTFIgKi8K KyAgICAgICAgICAgIHJldHVybigweDI1MTgpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg ICAgcmV0dXJuKDB4ZmZmZCk7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGMgPj0gMHgyNjAw ICYmIGMgPD0gMHgyNmZmKSB7ICAgLyogTWlzYyBzeW1ib2xzICovCisgICAgICAgIHN3aXRjaCAo YykgeworICAgICAgICAgIC8qIFRoZW1zZWx2ZXMgKi8KKyAgICAgICAgY2FzZSAweDI2M2E6IGNh c2UgMHgyNjNiOiBjYXNlIDB4MjYzYzogY2FzZSAweDI2NDA6CisgICAgICAgIGNhc2UgMHgyNjQy OiBjYXNlIDB4MjY2MDogY2FzZSAweDI2NjM6IGNhc2UgMHgyNjY1OgorICAgICAgICBjYXNlIDB4 MjY2NjogY2FzZSAweDI2NmE6IGNhc2UgMHgyNjZiOgorICAgICAgICAgICAgcmV0dXJuKGMpOwor ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuKDB4ZmZmZCk7CisgICAgICAgIH0K KyAgICB9CisgICAgaWYgKGMgPj0gMHgyNzk0ICYmIGMgPD0gMHgyN2JlKSAgICAgLyogUmlnaHQt YXJyb3cgRGluZ2JhdHMgKi8KKyAgICAgIHJldHVybigweDIxOTIpOworICAgIGlmIChjID49IDB4 MjA3MCAmJiBjIDw9IDB4MjA5ZikgeyAgIC8qIFN1cGVyICYgc3Vic2NyaXB0cyAqLworICAgICAg ICBpZiAoYyA9PSAweDIwN2YpICAgICAgICAgICAgICAgIC8qIG4gKi8KKyAgICAgICAgICByZXR1 cm4oYyk7CisgICAgICAgIGVsc2UgaWYgKGMgPT0gMHgyMDcwKSAgICAgICAgICAgLyogMCAqLwor ICAgICAgICAgIHJldHVybigweDAwMzApOworICAgICAgICBlbHNlIGlmIChjID49IDB4MjA3NCAm JiBjIDw9IDB4MjA3OSkKKyAgICAgICAgICByZXR1cm4oYyAtIDB4MjA0MCk7CisgICAgICAgIGVs c2UgaWYgKGMgPj0gMHgyMDgwICYmIGMgPD0gMHgyMDg5KQorICAgICAgICAgIHJldHVybihjIC0g MHgyMDUwKTsKKyAgICAgICAgc3dpdGNoIChjKSB7CisgICAgICAgIGNhc2UgMHgyMDdhOiBjYXNl IDB4MjA4YToKKyAgICAgICAgICAgIHJldHVybigweDAwMmIpOworICAgICAgICBjYXNlIDB4MjA3 YjogY2FzZSAweDIwOGI6CisgICAgICAgICAgICByZXR1cm4oMHgwMDJkKTsKKyAgICAgICAgY2Fz ZSAweDIwN2M6IGNhc2UgMHgyMDhjOgorICAgICAgICAgICAgcmV0dXJuKDB4MDAzZCk7CisgICAg ICAgIGNhc2UgMHgyMDdkOiBjYXNlIDB4MjA4ZDoKKyAgICAgICAgICAgIHJldHVybigweDAwMjgp OworICAgICAgICBjYXNlIDB4MjA3ZTogY2FzZSAweDIwOGU6CisgICAgICAgICAgICByZXR1cm4o MHgwMDI5KTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybigweGZmZmQpOwor ICAgICAgICB9CisgICAgfQorICAgIGlmIChjID49IDB4MDE4MCAmJiBjIDw9IDB4MDI0ZikgeyAg IC8qIExhdGluIEV4dGVuZGVkIEIsIFBhcnQgSSAqLworICAgICAgICBpZiAoYyA9PSAweDAxOTIg fHwgYyA+PSAweDAxZmEgJiYgYyA8PSAweDAxZmYpCisgICAgICAgICAgcmV0dXJuKGMpOyAgICAg ICAgICAgICAgICAgICAgLyogTGF0aW4gRXh0ZW5kZWQgQiAqLworICAgICAgICBzd2l0Y2ggKGMp IHsKKyAgICAgICAgY2FzZSAweDAxODA6IGNhc2UgMHgwMTgzOiBjYXNlIDB4MDE4NDogY2FzZSAw eDAxODU6CisgICAgICAgICAgICByZXR1cm4oMHgwMDYyKTsgICAgICAgICAgICAgLyogTG93ZXJj YXNlIGIgdmFyaWFudHMgKi8KKyAgICAgICAgY2FzZSAweDAxODE6IGNhc2UgMHgwMTgyOgorICAg ICAgICAgICAgcmV0dXJuKDB4MDA0Mik7ICAgICAgICAgICAgIC8qIFVwcGVyY2FzZSBCIHZhcmlh bnRzICovCisgICAgICAgIGNhc2UgMHgwMTg2OiBjYXNlIDB4MDE4NzoKKyAgICAgICAgICAgIHJl dHVybigweDAwNDMpOyAgICAgICAgICAgICAvKiBVcHBlcmNhc2UgQyB2YXJpYW50cyAqLworICAg ICAgICAgIGNhc2UgMHgwMTg5OiAgICAgICAgICAgICAgICAgIC8qIEQgd2l0aCBzdHJva2UgKi8K KyAgICAgICAgICAgIHJldHVybigweDAwRDApOyAgICAgICAgICAgICAvKiBMb29rcyBqdXN0IGxp a2UgRXRoICovCisgICAgICAgICAgY2FzZSAweDAxOGE6ICAgICAgICAgICAgICAgICAgLyogRCB3 aXRoIGhvb2sgKi8KKyAgICAgICAgICAgIHJldHVybigweDAwNDQpOworICAgICAgICAgIGNhc2Ug MHgwMThlOiBjYXNlIDB4MDE5MDogICAgIC8qIEUtbGlrZSBsZXR0ZXJzICovCisgICAgICAgICAg ICByZXR1cm4oMHgwMDQ1KTsKKyAgICAgICAgICBjYXNlIDB4MDE4ZjogICAgICAgICAgICAgICAg ICAvKiBlLWxpa2UgbGV0dGVycyAqLworICAgICAgICAgICAgcmV0dXJuKDB4MDA2NSk7CisgICAg ICAgICAgY2FzZSAweDAxOTE6ICAgICAgICAgICAgICAgICAgLyogRi1saWtlICovCisgICAgICAg ICAgICByZXR1cm4oMHgwMDQ2KTsKKyAgICAgICAgICBjYXNlIDB4MDE5MzogICAgICAgICAgICAg ICAgICAvKiBHLWxpa2UgKi8KKyAgICAgICAgICAgIHJldHVybigweDAwNDcpOworICAgICAgICAg IGNhc2UgMHgwMTk0OiAgICAgICAgICAgICAgICAgIC8qIExhdGluIENhcGl0YWwgR2FtbWEgKi8K KyAgICAgICAgICAgIHJldHVybigweDAzOTMpOyAgICAgICAgICAgICAvKiBVc2UgR3JlZWsgKi8K KyAgICAgICAgICBjYXNlIDB4MDE5NTogICAgICAgICAgICAgICAgICAvKiBHb3RoaWMgaHYgKi8K KyAgICAgICAgICAgIHJldHVybigweDAwNjgpOyAgICAgICAgICAgICAvKiBVc2UgaCAqLworICAg ICAgICAgIGNhc2UgMHgwMTk2OiAgICAgICAgICAgICAgICAgIC8qIExhdGluIENhcGl0YWwgSW90 YSAqLworICAgICAgICAgICAgcmV0dXJuKDB4MDM5OSk7ICAgICAgICAgICAgIC8qIFVzZSBHcmVl ayAqLworICAgICAgICAgIGNhc2UgMHgwMTk3OiAgICAgICAgICAgICAgICAgIC8qIEkgd2l0aCBi YXIgKi8KKyAgICAgICAgICAgIHJldHVybigweDAwNjkpOworICAgICAgICAgIGNhc2UgMHgwMTk4 OiAgICAgICAgICAgICAgICAgIC8qIEsgd2l0aCBob29rICovCisgICAgICAgICAgICByZXR1cm4o MHgwMDRCKTsKKyAgICAgICAgICBjYXNlIDB4MDE5OTogICAgICAgICAgICAgICAgICAvKiBrIHdp dGggaG9vayAqLworICAgICAgICAgICAgcmV0dXJuKDB4MDA2Qik7CisgICAgICAgICAgY2FzZSAw eDAxOUE6ICAgICAgICAgICAgICAgICAgLyogbCB3aXRoIGJhciAqLworICAgICAgICAgICAgcmV0 dXJuKDB4MDA2Qyk7CisgICAgICAgICAgY2FzZSAweDAxOUI6ICAgICAgICAgICAgICAgICAgLyog bGFtYmRhIHdpdGggYmFyICovCisgICAgICAgICAgICByZXR1cm4oMHgwM2JiKTsgICAgICAgICAg ICAgLyogVXNlIEdyZWVrICovCisgICAgICAgICAgY2FzZSAweDAxOUM6ICAgICAgICAgICAgICAg ICAgLyogVXBzaWRlIGRvd24gbSAqLworICAgICAgICAgICAgcmV0dXJuKDB4MDA2ZCk7CisgICAg ICAgICAgY2FzZSAweDAxOUQ6ICAgICAgICAgICAgICAgICAgLyogTiB3aXRoIGxlZnQgaG9vayAq LworICAgICAgICAgICAgcmV0dXJuKDB4MDA0ZSk7CisgICAgICAgICAgY2FzZSAweDAxOUU6ICAg ICAgICAgICAgICAgICAgLyogbiB3aXRoIGxvbmcgcmlnaHQgbGVnICovCisgICAgICAgICAgICBy ZXR1cm4oMHgwMDZlKTsKKyAgICAgICAgICBjYXNlIDB4MDE5RjogY2FzZSAweDAxYTA6IGNhc2Ug MHgwMWEyOiAvKiBPLWxpa2UgbGV0dGVycyAqLworICAgICAgICAgICAgcmV0dXJuKDB4MDA0Zik7 CisgICAgICAgICAgY2FzZSAweDAxYTE6IGNhc2UgMHgwMWEzOiAgICAgLyogby1saWtlICovCisg ICAgICAgICAgICByZXR1cm4oMHgwMDZmKTsKKyAgICAgICAgICBjYXNlIDB4MDFBNDogICAgICAg ICAgICAgICAgICAvKiBQIHdpdGggaG9vayAqLworICAgICAgICAgICAgcmV0dXJuKDB4MDA1MCk7 CisgICAgICAgICAgY2FzZSAweDAxQTU6ICAgICAgICAgICAgICAgICAgLyogcCB3aXRoIGhvb2sg Ki8KKyAgICAgICAgICAgIHJldHVybigweDAwNzApOworICAgICAgICAgIGNhc2UgMHgwMUE2OiAg ICAgICAgICAgICAgICAgIC8qIE9sZCBOb3JzZSBZUiAqLworICAgICAgICAgICAgcmV0dXJuKDB4 MDA1Mik7CisgICAgICAgICAgY2FzZSAweDAxQTc6ICAgICAgICAgICAgICAgICAgLyogQmFja3dh cmRzIFMgKi8KKyAgICAgICAgICAgIHJldHVybigweDAwNTMpOworICAgICAgICAgIGNhc2UgMHgw MUE4OiBjYXNlIDB4MDFBQTogICAgIC8qIHMtbGlrZSBsZXR0ZXJzICovCisgICAgICAgICAgICBy ZXR1cm4oMHgwMDczKTsKKyAgICAgICAgICBjYXNlIDB4MDFBOTogICAgICAgICAgICAgICAgICAv KiBFc2ggKi8KKyAgICAgICAgICAgIHJldHVybigweDAzYTMpOyAgICAgICAgICAgICAvKiBMb29r cyBqdXN0IGxpa2UgU2lnbWEgKi8KKyAgICAgICAgICBjYXNlIDB4MDFBQjogY2FzZSAweDAxQUQ6 ICAgICAvKiB0LWxpa2UgKi8KKyAgICAgICAgICAgIHJldHVybigweDAwNzQpOworICAgICAgICAg IGNhc2UgMHgwMUFDOiBjYXNlIDB4MDFBRTogICAgIC8qIFQtbGlrZSAqLworICAgICAgICAgICAg cmV0dXJuKDB4MDA1NCk7CisgICAgICAgICAgY2FzZSAweDAxQUY6IGNhc2UgMHgwMUIxOiAgICAg LyogVS1saWtlICovCisgICAgICAgICAgICByZXR1cm4oMHgwMDU1KTsKKyAgICAgICAgICBjYXNl IDB4MDFCMDogICAgICAgICAgICAgICAgICAvKiB1LWxpa2UgKi8KKyAgICAgICAgICAgIHJldHVy bigweDAwNzUpOworICAgICAgICAgIGNhc2UgMHgwMUIyOiAgICAgICAgICAgICAgICAgIC8qIFYt bGlrZSAqLworICAgICAgICAgICAgcmV0dXJuKDB4MDA1Nik7CisgICAgICAgICAgY2FzZSAweDAx QjM6ICAgICAgICAgICAgICAgICAgLyogWS1saWtlICovCisgICAgICAgICAgICByZXR1cm4oMHgw MDU5KTsKKyAgICAgICAgICBjYXNlIDB4MDFCNDogICAgICAgICAgICAgICAgICAvKiB5LWxpa2Ug Ki8KKyAgICAgICAgICAgIHJldHVybigweDAwNzkpOworICAgICAgICAgIGNhc2UgMHgwMUI1OiAg ICAgICAgICAgICAgICAgIC8qIFotbGlrZSAqLworICAgICAgICAgICAgcmV0dXJuKDB4MDA1YSk7 CisgICAgICAgICAgY2FzZSAweDAxQjY6ICAgICAgICAgICAgICAgICAgLyogei1saWtlICovCisg ICAgICAgICAgICByZXR1cm4oMHgwMDdhKTsKKyAgICAgICAgICBjYXNlIDB4MDFCNzogICAgICAg ICAgICAgICAgICAvKiBZb2doICovCisgICAgICAgICAgICByZXR1cm4oMHgwMDMzKTsgICAgICAg ICAgICAgLyogVXNlICIzIiAqLworICAgICAgICAgIGNhc2UgMHgwMUJGOiAgICAgICAgICAgICAg ICAgIC8qIFd5bm4gKi8KKyAgICAgICAgICAgIHJldHVybigweDAwNzcpOyAgICAgICAgICAgICAv KiBVc2UgInciICovCisgICAgICAgICAgY2FzZSAweDAxQ0Q6ICAgICAgICAgICAgICAgICAgLyog QSBjYXJvbiAqLworICAgICAgICAgICAgcmV0dXJuKDB4MDA0MSk7CisgICAgICAgICAgY2FzZSAw eDAxQ0U6ICAgICAgICAgICAgICAgICAgLyogYSBjYXJvbiAqLworICAgICAgICAgICAgcmV0dXJu KDB4MDA2MSk7CisgICAgICAgICAgY2FzZSAweDAxQ0Y6ICAgICAgICAgICAgICAgICAgLyogSSBj YXJvbiAqLworICAgICAgICAgICAgcmV0dXJuKDB4MDA0OSk7CisgICAgICAgICAgY2FzZSAweDAx RDA6ICAgICAgICAgICAgICAgICAgLyogaSBjYXJvbiAqLworICAgICAgICAgICAgcmV0dXJuKDB4 MDA2OSk7CisgICAgICAgICAgY2FzZSAweDAxRDE6ICAgICAgICAgICAgICAgICAgLyogTyBjYXJv biAqLworICAgICAgICAgICAgcmV0dXJuKDB4MDA0Zik7CisgICAgICAgICAgY2FzZSAweDAxRDI6 ICAgICAgICAgICAgICAgICAgLyogbyBjYXJvbiAqLworICAgICAgICAgICAgcmV0dXJuKDB4MDA2 Zik7CisgICAgICAgICAgY2FzZSAweDAxRDM6ICAgICAgICAgICAgICAgICAgLyogVSBjYXJvbiAq LworICAgICAgICAgICAgcmV0dXJuKDB4MDA1NSk7CisgICAgICAgICAgY2FzZSAweDAxRDQ6ICAg ICAgICAgICAgICAgICAgLyogdSBjYXJvbiAqLworICAgICAgICAgICAgcmV0dXJuKDB4MDA3NSk7 CisgICAgICAgICAgLyogVSBkaWFlcmVzaXMgKyBvdGhlciB0aGluZ3MgKi8KKyAgICAgICAgY2Fz ZSAweDAxRDU6IGNhc2UgMHgwMUQ3OiBjYXNlIDB4MDFEOTogY2FzZSAweDAxREI6CisgICAgICAg ICAgICByZXR1cm4oMHgwMGRjKTsKKyAgICAgICAgICAvKiB1IGRpYWVyZXNpcyArIG90aGVyIHRo aW5ncyAqLworICAgICAgICBjYXNlIDB4MDFENjogY2FzZSAweDAxRGE6IGNhc2UgMHgwMURjOgor ICAgICAgICAgICAgcmV0dXJuKDB4MDBmYyk7CisKKyAgICAgICAgICAvKiBGaWxsIGluIG1vcmUg aGVyZSBpZiBhbnlib2R5IGFza3MgKi8KKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg cmV0dXJuKDB4ZmZmZCk7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGMgPj0gMHgxZTAwICYm IGMgPD0gMHgxZWZmKSB7ICAgLyogTGF0aW4gRXh0ZW5kZWQgQWRkaXRpb25hbCAqLworICAgICAg ICBpZiAoYyA+PSAweDFlODAgJiYgYyA8PSAweDFlODUpCisgICAgICAgICAgcmV0dXJuKGMpOwor ICAgICAgICBlbHNlCisgICAgICAgICAgcmV0dXJuKDB4ZmZmZCk7CisgICAgfQorICAgIGlmIChj ID49IDB4MDQwMCAmJiBjIDw9IDB4MDRmZikgeyAgIC8qIEN5cmlsbGljICovCisgICAgICAgIGlm IChjID49IDB4MDQwMCAmJiBjIDw9IDB4MDQ1ZiB8fCBjID09IDB4MDQ5MCAgfHwgYyA9PSAweDA0 OTEpCisgICAgICAgICAgcmV0dXJuKGMpOworICAgICAgICBlbHNlCisgICAgICAgICAgcmV0dXJu KDB4ZmZmZCk7CisgICAgfQorICAgIGlmIChjID49IDB4MDM3MCAmJiBjIDw9IDB4MDNmZikgeyAg IC8qIEdyZWVrICovCisgICAgICAgIGlmIChjID09IDB4MDM3ZSB8fCBjID49IDB4MDM4NCAmJiBj IDw9IDB4MDNjZSkKKyAgICAgICAgICByZXR1cm4oYyk7CisgICAgICAgIHN3aXRjaCAoYykgewor ICAgICAgICBjYXNlIDB4MDM3NDogY2FzZSAweDAzNzU6CisgICAgICAgICAgICByZXR1cm4oMHgw MDI3KTsKKyAgICAgICAgY2FzZSAweDAzN2E6CisgICAgICAgICAgICByZXR1cm4oMHgwMDJjKTsK KyAgICAgICAgICAvKiBGaWxsIGluIG1vcmUgaGVyZSBpZiBuZWVkZWQgKi8KKyAgICAgICAgZGVm YXVsdDoKKyAgICAgICAgICAgIHJldHVybigweGZmZmQpOworICAgICAgICB9CisgICAgfQorICAg IGlmIChjID49IDB4MWYwMCAmJiBjIDw9IDB4MWZmZikgeyAgIC8qIEdyZWVrIEV4dGVuZGVkICov CisgICAgICAgIC8qIEZpbGwgaW4gaWYgYXNrZWQgKi8KKyAgICAgICAgcmV0dXJuKDB4ZmZmZCk7 CisgICAgfQorICAgIGlmIChjID49IDB4MjBhMCAmJiBjIDw9IDB4MjBjZikgeyAgIC8qIEN1cnJl bmN5IHN5bWJvbHMgKi8KKyAgICAgICAgaWYgKGMgPT0gMHgyMGEzIHx8IGMgPT0gMHgyMGE0IHx8 IGMgPT0gMHgyMGE3IHx8IGMgPT0gMHgyMGFjKQorICAgICAgICAgIHJldHVybihjKTsKKyAgICAg ICAgZWxzZQorICAgICAgICAgIHJldHVybigweGZmZmQpOworICAgIH0KKyAgICBpZiAoYyA+PSAw eDIxMDAgJiYgYyA8PSAweDIxNGYpIHsgICAvKiBMZXR0ZXJsaWtlIHN5bWJvbHMgKi8KKyAgICAg ICAgaWYgKGMgPT0gMHgyMTE2IHx8IGMgPT0gMHgyMTIyIHx8IGMgPT0gMHgyMTI2KQorICAgICAg ICAgIHJldHVybihjKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIHJldHVybigweGZmZmQpOwor ICAgIH0KKyAgICBpZiAoYyA+PSAweDIxNTAgJiYgYyA8PSAweDIxOGYpIHsgICAvKiBOdW1iZXIg Zm9ybXMgKi8KKyAgICAgICAgaWYgKGMgPj0gMHgyMTViICYmIGMgPD0gMHgyMTVlKSAvKiBSb21h biBudW1lcmFscyBldGMgKi8KKyAgICAgICAgICByZXR1cm4oYyk7CisgICAgICAgIGVsc2UKKyAg ICAgICAgICByZXR1cm4oMHhmZmZkKTsKKyAgICB9CisgICAgaWYgKGMgPj0gMHgwMmIwICYmIGMg PD0gMHgwMmZmKSB7ICAgLyogU3BhY2luZyBtb2RpZmllciBsZXR0ZXJzICovCisgICAgICAgIGlm IChjID09IDB4MDJjNiB8fCBjID09IDB4MDJjNyB8fCBjID09IDB4MDJjOSB8fAorICAgICAgICAg ICAgYyA+PSAweDAyZDggJiYgYyA8PSAweDAyZGQpCisgICAgICAgICAgcmV0dXJuKGMpOworICAg ICAgICBzd2l0Y2ggKGMpIHsKKyAgICAgICAgY2FzZSAweDAyYjA6IGNhc2UgMHgwMmIxOgorICAg ICAgICAgICAgcmV0dXJuKDB4MDA2OCk7CisgICAgICAgIGNhc2UgMHgwMmIyOgorICAgICAgICAg ICAgICByZXR1cm4oMHgwMDZhKTsKKyAgICAgICAgY2FzZSAweDAyYjM6IGNhc2UgMHgwMmI0OiBj YXNlIDB4MDJiNToKKyAgICAgICAgICAgIHJldHVybigweDAwNzIpOworICAgICAgICBjYXNlIDB4 MDJiNzoKKyAgICAgICAgICAgIHJldHVybigweDAwNzcpOworICAgICAgICBjYXNlIDB4MDJiODoK KyAgICAgICAgICAgIHJldHVybigweDAwNzkpOworICAgICAgICBjYXNlIDB4MDJiOToKKyAgICAg ICAgICAgIHJldHVybigweDAwYjQpOworICAgICAgICBjYXNlIDB4MDJiYToKKyAgICAgICAgICAg IHJldHVybigweDAwMjIpOworICAgICAgICBjYXNlIDB4MDJiYjogY2FzZSAweDAyYmM6IGNhc2Ug MHgwMmJkOiBjYXNlIDB4MDJiZTogY2FzZSAweDAyYmY6CisgICAgICAgICAgICByZXR1cm4oMHgw MDI3KTsKKyAgICAgICAgICBjYXNlIDB4MDJjMjogICAgICByZXR1cm4oMHgwMDNjKTsKKyAgICAg ICAgICBjYXNlIDB4MDJjMzogICAgICByZXR1cm4oMHgwMDNlKTsKKyAgICAgICAgICBjYXNlIDB4 MDJkYTogICAgICByZXR1cm4oMHgwMGIwKTsKKyAgICAgICAgICBjYXNlIDB4MDJkYzogICAgICBy ZXR1cm4oMHgwMDdlKTsKKyAgICAgICAgICBkZWZhdWx0OiAgICAgICAgICByZXR1cm4oMHhmZmZk KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoYyA+PSAweDIwMDAgJiYgYyA8PSAweDIwNmYp IHsgICAvKiBHZW5lcmFsIFB1bmN0dWF0aW9uICovCisgICAgICAgIGlmIChjID49IDB4MjAxMyAm JiBjIDw9IDB4MjAxNSB8fAorICAgICAgICAgICAgYyA+PSAweDIwMTcgJiYgYyA8PSAweDIwMWEg fHwKKyAgICAgICAgICAgIGMgPj0gMHgyMDFjICYmIGMgPD0gMHgyMDFlIHx8CisgICAgICAgICAg ICBjID49IDB4MjAyMCAmJiBjIDw9IDB4MjAyMiB8fCBjID09IDB4MjAyNiB8fCBjID09IDB4MjAz MCB8fAorICAgICAgICAgICAgYyA+PSAweDIwMzkgJiYgYyA8PSAweDIwM2EgfHwgYyA9PSAweDIw M2MgfHwgYyA9PSAweDIwM2UgfHwKKyAgICAgICAgICAgIGMgPT0gMHgyMDQ0KQorICAgICAgICAg IHJldHVybihjKTsKKyAgICAgICAgZWxzZSBpZiAoYyA9PSAweDIwMTYpCisgICAgICAgICAgcmV0 dXJuKDB4MjU1MSk7CisgICAgICAgIGVsc2UgaWYgKGMgPT0gMHgyMDE3KQorICAgICAgICAgIHJl dHVybigweDI1NTApOworICAgICAgICBlbHNlIGlmIChjID09IDB4MjA0NCkKKyAgICAgICAgICBy ZXR1cm4oMHgwMDJmKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIHJldHVybigweGZmZmQpOwor ICAgIH0KKyAgICBpZiAoYyA9PSAweGZiMDEgfHwgYyA9PSAweGZiMDIpICAgICAvKiBBbHBoYWJl dGljIFByZXNlbnRhdGlvbiBGb3JtcyAqLworICAgICAgcmV0dXJuKGMpOworICAgIHJldHVybigw eGZmZmQpOyAgICAgICAgICAgICAgICAgICAgIC8qIENhdGNoLWFsbCAqLworfQorI2VuZGlmIC8q IE9TMiAqLworCisKKy8qCisgIFRhYmxlIG9mIEJsYWgtdG8tVW5pY29kZSBpbmZvcm1hdGlvbiBz dHJ1Y3R1cmVzLgorICBLRUVQIFRISVMgSU4gU1lOQyBXSVRIIFRIRSBUWF9ibGFoIERFRklOSVRJ T05TIGluIGNrY3VuaS5oLgorKi8KK3N0cnVjdCB4X3RvX3VuaWNvZGUgKgordHhyaW5mb1tNQVhU WFNFVFMrMV0gPSB7CisgICAgJnVfYXNjaWksICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog IDAgVVMgSVNPIDY0NiAoQVNDSUkpICovCisgICAgJnVfYnJpdGlzaCwgICAgICAgICAgICAgICAg ICAgICAgICAgLyogIDEgVUsgSVNPIDY0NiAqLworICAgICZ1X2ZyX2NhbmFkaWFuLCAgICAgICAg ICAgICAgICAgICAgIC8qICAyIENhbmFkaWFuIEZyZW5jaCBOUkMgKi8KKyAgICBOVUxMLCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgMyBDdWJhICovCisgICAgTlVMTCwgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogIDQgQ3plY2hvICovCisgICAgJnVfZGFuaXNoLCAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogIDUgRGFuaXNoL05vcndlZ2lhbiBJU08gNjQ2ICov CisgICAgJnVfZHV0Y2gsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIDYgRHV0Y2ggTlJD ICovCisgICAgJnVfZmlubmlzaCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogIDcgRmlubmlz aCBOUkMgICovCisgICAgJnVfZnJlbmNoLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIDgg RnJlbmNoIElTTyA2NDYgKi8KKyAgICAmdV9nZXJtYW4sICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiAgOSBHZXJtYW4gSVNPIDY0NiAqLworICAgICZ1X2hlYnJldzcsICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIDEwIEhlYnJldy03IChERUMpICovCisgICAgJnVfaHVuZ2FyaWFuLCAgICAg ICAgICAgICAgICAgICAgICAgLyogMTEgSHVuZ2FyaWFuIElTTyA2NDYgKi8KKyAgICAmdV9pY2Vs YW5kaWMsICAgICAgICAgICAgICAgICAgICAgICAvKiAxMiBJY2VsYW5kaWMgTlJDICovCisgICAg JnVfaXRhbGlhbiwgICAgICAgICAgICAgICAgICAgICAgICAgLyogMTMgSXRhbGlhbiBJU08gNjQ2 ICovCisgICAgJnVfamlzMDIwMXIsICAgICAgICAgICAgICAgICAgICAgICAgLyogMTQgSmFwYW5l c2UgUm9tYW4gSVNPIDY0NiAqLworICAgICZ1X2ppczAyMDFrLCAgICAgICAgICAgICAgICAgICAg ICAgIC8qIDE1IEphcGFuZXNlIEthdGFrYW5hICovCisgICAgJnVfa29pNywgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogMTYgU2hvcnQgS09JICovCisgICAgJnVfZGFuaXNoLCAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogMTcgTm9yd2VnaWFuL0RhbmlzaCBJU08gNjQ2ICovCisgICAg JnVfcG9ydHVndWVzZSwgICAgICAgICAgICAgICAgICAgICAgLyogMTggUG9ydHVndWVzZSBJU08g NjQ2ICovCisgICAgJnVfc3BhbmlzaCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogMTkgc3Bh bmlzaCBJU08gNjQ2ICovCisgICAgJnVfc3dlZGlzaCwgICAgICAgICAgICAgICAgICAgICAgICAg LyogMjAgU3dlZGlzaCBJU08gNjQ2ICovCisgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogMjEgU3dlZGlzaCBJU08gNjQ2IGZvciBuYW1lcyAqLworICAgICZ1X3N3aXNz LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDIyIFN3aXNzIE5SQyAgICovCisgICAgJnVf ODg1OV8xLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMjMgSVNPIDg4NTktMSAgKi8KKyAg ICAmdV84ODU5XzIsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAyNCBJU08gODg1OS0yICAq LworICAgICZ1Xzg4NTlfMywgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDI1IElTTyA4ODU5 LTMgICovCisgICAgJnVfODg1OV80LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMjYgSVNP IDg4NTktNCAgKi8KKyAgICAmdV84ODU5XzUsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAy NyBJU08gODg1OS01ICAqLyAvKiBDeXJpbGxpYyAqLworICAgICZ1Xzg4NTlfNiwgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIDI4IElTTyA4ODU5LTYgICovIC8qIEFyYWJpYyAqLworICAgICZ1 Xzg4NTlfNywgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDI5IElTTyA4ODU5LTcgICovIC8q IEdyZWVrICovCisgICAgJnVfODg1OV84LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMzAg SVNPIDg4NTktOCAgKi8gLyogSGVicmV3ICovCisgICAgJnVfODg1OV85LCAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogMzEgSVNPIDg4NTktOSAgKi8KKyAgICAmdV84ODU5XzEwLCAgICAgICAg ICAgICAgICAgICAgICAgICAvKiAzMiBJU08gODg1OS0xMCAqLworICAgICZ1X2tvaTgsICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIDMzIEtPSS04ICAgICAgICovCisgICAgTlVMTCwgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMzQgSklTLTcgICAgICAgKi8KKyAgICBOVUxM LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAzNSBTaGlmdCBKSVMgICAqLworICAg IE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDM2IEphcGFuZXNlIEVVQyAo SkFFKSAqLworICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDM3IEph cGFuZXNlIERFQyBLYW5qaSAqLworICAgICZ1X2RlY21jcywgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIDM4IERFQyBNQ1MgKi8KKyAgICAmdV9uZXh0c3RlcCwgICAgICAgICAgICAgICAgICAg ICAgICAvKiAzOSBOZVhUICAgICovCisgICAgJnVfZGdpLCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogNDAgREdJICAgICAqLworICAgICZ1X21hY2xhdGluLCAgICAgICAgICAgICAgICAg ICAgICAgIC8qIDQxIE1hY2ludG9zaCBMYXRpbiAgKi8KKyAgICAmdV9ocHJvbWFuOCwgICAgICAg ICAgICAgICAgICAgICAgICAvKiA0MiBIUCBSb21hbiA4ICAgICAgICovCisgICAgJnVfY3A0Mzcs ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogNDMgQ1A0MzcgLSBPcmlnaW5hbCAqLworICAg ICZ1X2NwODUwLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDQ0IENQODUwIC0gVyBFdXJv cGUgKi8KKyAgICAmdV9jcDg1MiwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA0NSBDUDg1 MiAtIEUgRXVyb3BlICovCisgICAgJnVfY3A4NTcsICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogNDYgQ1A4NTcgLSBUdXJraXNoICAqLworICAgICZ1X2NwODYyLCAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIDQ3IENQODYyIC0gSGVicmV3ICAgKi8KKyAgICAmdV9jcDg2NCwgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiA0OCBDUDg2NCAtIEFyYWJpYyAgICovCisgICAgJnVfY3A4 NjYsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogNDkgQ1A4NjYgLSBDeXJpbGxpYyAqLwor ICAgICZ1X2NwODY5LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDUwIENQODY5IC0gR3Jl ZWsgICAgKi8KKyAgICAmdV9kZWNzcGVjLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiA1MSBE RUMgU3BlY2lhbCBHcmFwaGljcyAqLworICAgICZ1X2RlY3RlY2gsICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIDUyIERFQyBUZWNobmljYWwgKi8KKyAgICAmdV9jMHBpY3MsICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiA1MyBDMCBQaWN0dXJlcyAqLworICAgICZ1X2MxcGljcywgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIDU0IEMxIFBpY3R1cmVzICovCisgICAgJnVfc21pbGV5LCAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogNTUgSUJNIEMwIEdyYXBoaWNzICovCisgICAgJnVf aGVhdGgxOWcsICAgICAgICAgICAgICAgICAgICAgICAgLyogNTYgSGVhdGggMTkgR3JhcGhpY3Mg Ki8KKyAgICAmdV90dmlnLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA1NyBUVkkgR3Jh cGhpY3MgKi8KKyAgICAmdV93eXNlX2duLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiA1OCBX eXNlIDYwIEdyYXBoaWNzIE5vcm1hbCAqLworICAgICZ1X3d5c2VfZzEsICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIDU5IFd5c2UgNjAgR3JhcGhpY3MgMSAqLworICAgICZ1X3d5c2VfZzIsICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIDYwIFd5c2UgNjAgR3JhcGhpY3MgMiAqLworICAgICZ1 X3d5c2VfZzMsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDYxIFd5c2UgNjAgR3JhcGhpY3Mg MyAqLworICAgICZ1X2Vsb3Q5MjcsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDYyIEdyZWVr IEVMT1QgOTI3ICovCisgICAgJnVfZGdzcGVjLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyog NjMgREcgU3BlY2lhbCBncmFwaGljcyAqLworICAgICZ1X2RnbGluZSwgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIDY0IERHIExpbmUgZHJhd2luZyAqLworICAgICZ1X2Rnd29yZCwgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIDY1IERHIFdvcmQgcHJvY2Vzc2luZyAqLworICAgICZ1X2hw bGluZSwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDY2IEhQIExpbmUgZHJhd2luZyAqLwor ICAgICZ1X2hwbWF0aCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDY3IEhQIE1hdGgvVGVj aG5pY2FsICovCisgICAgJnVfcW54Z3JwaCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogNjgg UU5YIEdyYXBoaWNzICovCisgICAgJnVfc25pYnJhY2ssICAgICAgICAgICAgICAgICAgICAgICAg LyogNjkgU05JIEJyYWNrZXRzICovCisgICAgJnVfc25pZXVybywgICAgICAgICAgICAgICAgICAg ICAgICAgLyogNzAgU05JIEV1cm8gKi8KKyAgICAmdV9zbmlmYWNldCwgICAgICAgICAgICAgICAg ICAgICAgICAvKiA3MSBTTkkgRmFjZXQgKi8KKyAgICAmdV9zbmlpYm0sICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiA3MiBTTkkgSUJNICovCisgICAgJnVfc25pYmxhbmtzLCAgICAgICAgICAg ICAgICAgICAgICAgLyogNzMgU05JIEJsYW5rcyAqLworICAgICZ1X2NwMTI1MiwgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIDc0IFdpbmRvd3MgTGF0aW4tMSAqLworICAgICZ1X2NwMTI1MCwg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDc1IFdpbmRvd3MgTGF0aW4tMiAqLworICAgICZ1 X2NwMTI1MSwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDc2IFdpbmRvd3MgQ3lyaWxsaWMg Ki8KKyAgICAmdV9jcDEyNTMsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA3NyBXaW5kb3dz IEdyZWVrICovCisgICAgJnVfY3AxMjU0LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogNzgg V2luZG93cyBUdXJraXNoICovCisgICAgJnVfY3AxMjU3LCAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogNzkgV2luZG93cyBMYXRpbi00ICovCisgICAgJnVfY3A4NTYsICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogODAgQ3lyaWxsaWMgUEMgQ29kZSBQYWdlIDg1NiAqLworICAgICZ1X2Nw ODU1LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDgxIEN5cmlsbGljIFBDIENvZGUgUGFn ZSA4NTUgKi8KKyAgICAmdV84ODU5XzEsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA4MiBD UDgxOSAtIFNhbWUgYXMgODg1OS0xICovCisgICAgJnVfODg1OV8yLCAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogODMgQ1A5MTIgLSBTYW1lIGFzIDg4NTktMiAqLworICAgICZ1Xzg4NTlfMywg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDg0IENQOTEzIC0gU2FtZSBhcyA4ODU5LTMgKi8K KyAgICAmdV84ODU5XzQsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA4NSBDUDkxNCAtIFNh bWUgYXMgODg1OS00ICovCisgICAgJnVfODg1OV81LCAgICAgICAgICAgICAgICAgICAgICAgICAg LyogODYgQ1A5MTUgLSBTYW1lIGFzIDg4NTktNSAqLworICAgICZ1Xzg4NTlfNiwgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIDg3IENQMTA4OSAtIFNhbWUgYXMgODg1OS02ICovCisgICAgJnVf ODg1OV83LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogODggQ1A4MTMgLSBTYW1lIGFzIDg4 NTktNyAqLworICAgICZ1Xzg4NTlfOCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDg5IENQ OTE2IC0gU2FtZSBhcyA4ODU5LTggKi8KKyAgICAmdV84ODU5XzksICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiA5MCBDUDkyMCAtIFNhbWUgYXMgODg1OS05ICovCisgICAgJnVfaHByb21hbjgs ICAgICAgICAgICAgICAgICAgICAgICAgLyogOTEgQ1AxMDUxIC0gU2FtZSBhcyBIUCBSb21hbiA4 ICovCisgICAgJnVfY3A4NTgsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogOTIgQ1A4NTgg LSBXIEV1cm9wZSB3L0V1cm8gKi8KKyAgICAmdV84ODU5XzE1LCAgICAgICAgICAgICAgICAgICAg ICAgICAvKiA5MyBJU08gODg1OS0xNSBMYXRpbi0xNSAqLworICAgICZ1Xzg4NTlfMTUsICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIDk0IENQOTIzIC0gU2FtZSBhcyA4ODU5LTE1ICAqLworICAg ICZ1Xzg4NTlfNywgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDk1IEVMT1Q5MjggLSBTYW1l IGFzIDg4NTktNyAqLworICAgICZ1X3F1aWNrZHJhdywgICAgICAgICAgICAgICAgICAgICAgIC8q IDk2IENQMTAwMDAgLSBBcHBsZSBRdWlja2RyYXcgKi8KKyAgICAmdV9jcDM3LCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiA5NyBDUDM3IC0gVS5TLiBFQkNESUMgKi8KKyAgICAmdV9jcDEy NTUsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA5OCBDUDEyNTUgLSBXaW5kb3dzIEhlYnJl dyAqLworICAgICZ1X2NwMTI1NiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDk5IENQMTI1 NiAtIFdpbmRvd3MgQXJhYmljICovCisgICAgJnVfY3AxMjU4LCAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogMTAwIENQMTI1OCAtIFdpbmRvd3MgVmlldCBOYW0gKi8KKyAgICAmdV9tYXpvdmlh LCAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxMDEgTWF6b3ZpYSBQb2xpc2ggY29kZSBwYWdl ICovCisgICAgJnVfdHJhbnNwYXJlbnQsICAgICAgICAgICAgICAgICAgICAgLyogMTAyIFRyYW5z cGFyZW50ICovCisgICAgJnVfaHoxNTAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMTAz IEhhemVsdGluZSAxNTAwLzE1MjAgZ3JhcGhpY3MgKi8KKyAgICAmdV9rb2k4ciwgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiAxMDQgS09JOC1SICovCisgICAgJnVfa29pOHUsICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogMTA1IEtPSTgtVSAqLworICAgICZ1X2FwbDEsICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIDEwNiBBUEwgMSAoSVNPKSAqLworICAgICZ1X2FwbDIsICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEwNyBBUEwgMiAoRHlhZGljKSAqLworICAgICZ1 X2FwbDMsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEwOCBBUEwgMyAoUGx1cykgKi8K KyAgICAmdV9hcGw0LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxMDggQVBMIDQgKElC TSkgKi8KKyAgICAmdV9hcGw1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxMTAgQVBM IDUgKDI3NDEpICovCit9OworCisvKgorICBUYWJsZSBvZiBCbGFoLXRvLVVuaWNvZGUgdHJhbnNs YXRpb24gZnVuY3Rpb25zLgorICBLRUVQIFRISVMgSU4gU1lOQyBXSVRIIFRIRSBUWF9ibGFoIERF RklOSVRJVElPTlMgaW4gY2tjdW5pLmguCisqLworVVNIT1JUCisjaWZkZWYgQ0tfQU5TSUMKKygq eGxfdVtNQVhUWFNFVFMrMV0pKENIQVIpCisjZWxzZQorKCp4bF91W01BWFRYU0VUUysxXSkoKQor I2VuZGlmIC8qIENLX0FOU0lDICovCis9IHsKKyAgICBhc2NpaV91LCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiAgMCBVUyBJU08gNjQ2IChBU0NJSSkgKi8KKyAgICBicml0aXNoX3UsICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiAgMSBVSyBJU08gNjQ2ICovCisgICAgZnJfY2FuYWRp YW5fdSwgICAgICAgICAgICAgICAgICAgICAgLyogIDIgQ2FuYWRpYW4gRnJlbmNoIE5SQyAqLwor ICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAzIEN1YmEgKi8KKyAg ICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgNCBDemVjaG8gKi8KKyAg ICBkYW5pc2hfdSwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgNSBEYW5pc2gvTm9yd2Vn aWFuIElTTyA2NDYgKi8KKyAgICBkdXRjaF91LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiAgNiBEdXRjaCBOUkMgKi8KKyAgICBmaW5uaXNoX3UsICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiAgNyBGaW5uaXNoIE5SQyAgKi8KKyAgICBmcmVuY2hfdSwgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiAgOCBGcmVuY2ggSVNPIDY0NiAqLworICAgIGdlcm1hbl91LCAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qICA5IEdlcm1hbiBJU08gNjQ2ICovCisgICAgaGVicmV3N191LCAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogMTAgSGVicmV3LTcgKERFQykgKi8KKyAgICBodW5n YXJpYW5fdSwgICAgICAgICAgICAgICAgICAgICAgICAvKiAxMSBIdW5nYXJpYW4gSVNPIDY0NiAq LworICAgIGljZWxhbmRpY191LCAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEyIEljZWxhbmRp YyAqLworICAgIGl0YWxpYW5fdSwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEzIEl0YWxp YW4gSVNPIDY0NiAqLworICAgIGppczAyMDFyX3UsICAgICAgICAgICAgICAgICAgICAgICAgIC8q IDE0IEphcGFuZXNlIFJvbWFuIElTTyA2NDYgKi8KKyAgICBqaXMwMjAxa191LCAgICAgICAgICAg ICAgICAgICAgICAgICAvKiAxNSBKYXBhbmVzZSBLYXRha2FuYSAqLworICAgIGtvaTdfdSwgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDE2IFNob3J0IEtPSSAqLworICAgIGRhbmlzaF91 LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDE3IE5vcndlZ2lhbi9EYW5pc2ggSVNPIDY0 NiAqLworICAgIHBvcnR1Z3Vlc2VfdSwgICAgICAgICAgICAgICAgICAgICAgIC8qIDE4IFBvcnR1 Z3Vlc2UgSVNPIDY0NiAqLworICAgIHNwYW5pc2hfdSwgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIDE5IHNwYW5pc2ggSVNPIDY0NiAqLworICAgIHN3ZWRpc2hfdSwgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIDIwIFN3ZWRpc2ggSVNPIDY0NiAqLworICAgIE5VTEwsICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIDIxIFN3ZWRpc2ggSVNPIDY0NiBmb3IgbmFtZXMgKi8KKyAg ICBzd2lzc191LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAyMiBTd2lzcyBOUkMgICAq LworICAgIGlzb184ODU5XzFfdSwgICAgICAgICAgICAgICAgICAgICAgIC8qIDIzIElTTyA4ODU5 LTEgICovCisgICAgaXNvXzg4NTlfMl91LCAgICAgICAgICAgICAgICAgICAgICAgLyogMjQgSVNP IDg4NTktMiAgKi8KKyAgICBpc29fODg1OV8zX3UsICAgICAgICAgICAgICAgICAgICAgICAvKiAy NSBJU08gODg1OS0zICAqLworICAgIGlzb184ODU5XzRfdSwgICAgICAgICAgICAgICAgICAgICAg IC8qIDI2IElTTyA4ODU5LTQgICovCisgICAgaXNvXzg4NTlfNV91LCAgICAgICAgICAgICAgICAg ICAgICAgLyogMjcgSVNPIDg4NTktNSAgKi8gLyogQ3lyaWxsaWMgKi8KKyAgICBpc29fODg1OV82 X3UsICAgICAgICAgICAgICAgICAgICAgICAvKiAyOCBJU08gODg1OS02ICAqLyAvKiBBcmFiaWMg Ki8KKyAgICBpc29fODg1OV83X3UsICAgICAgICAgICAgICAgICAgICAgICAvKiAyOSBJU08gODg1 OS03ICAqLyAvKiBHcmVlayAqLworICAgIGlzb184ODU5XzhfdSwgICAgICAgICAgICAgICAgICAg ICAgIC8qIDMwIElTTyA4ODU5LTggICovIC8qIEhlYnJldyAqLworICAgIGlzb184ODU5XzlfdSwg ICAgICAgICAgICAgICAgICAgICAgIC8qIDMxIElTTyA4ODU5LTkgICovIC8qIExhdGluLTUgKi8K KyAgICBpc29fODg1OV8xMF91LCAgICAgICAgICAgICAgICAgICAgICAvKiAzMiBJU08gODg1OS0x MCAqLworICAgIGtvaThfdSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDMzIEtPSS04 ICAgICAgICovCisgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMzQg SklTLTcgICAgICAgKi8KKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiAzNSBTaGlmdCBKSVMgICAqLworICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIDM2IEphcGFuZXNlIEVVQyAoSkFFKSAqLworICAgIE5VTEwsICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIDM3IEphcGFuZXNlIERFQyBLYW5qaSAqLworICAgIGRlY21jc191 LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDM4IERFQyBNQ1MgKi8KKyAgICBuZXh0c3Rl cF91LCAgICAgICAgICAgICAgICAgICAgICAgICAvKiAzOSBOZVhUICAgICovCisgICAgZGdpX3Us ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogNDAgREdJICAgICAqLworICAgIG1hY2xh dGluX3UsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDQxIE1hY2ludG9zaCBMYXRpbiAgKi8K KyAgICBocHJvbWFuOF91LCAgICAgICAgICAgICAgICAgICAgICAgICAvKiA0MiBIUCBSb21hbiA4 ICAgICAgICovCisgICAgY3A0MzdfdSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogNDMg Q1A0MzcgLSBPcmlnaW5hbCAqLworICAgIGNwODUwX3UsICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIDQ0IENQODUwIC0gVyBFdXJvcGUgKi8KKyAgICBjcDg1Ml91LCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiA0NSBDUDg1MiAtIEUgRXVyb3BlICovCisgICAgY3A4NTdfdSwgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogNDYgQ1A4NTcgLSBUdXJraXNoICAqLworICAgIGNw ODYyX3UsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDQ3IENQODYyIC0gSGVicmV3ICAg Ki8KKyAgICBjcDg2NF91LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA0OCBDUDg2NCAt IEFyYWJpYyAgICovCisgICAgY3A4NjZfdSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog NDkgQ1A4NjYgLSBDeXJpbGxpYyAqLworICAgIGNwODY5X3UsICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIDUwIENQODY5IC0gR3JlZWsgICAgKi8KKyAgICBkZWNzcGVjX3UsICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiA1MSBERUMgU3BlY2lhbCBHcmFwaGljcyAqLworICAgIGRlY3Rl Y2hfdSwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDUyIERFQyBUZWNobmljYWwgKi8KKyAg ICBjMHBpY3NfdSwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA1MyBDMCBQaWN0dXJlcyAq LworICAgIGMxcGljc191LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDU0IEMxIFBpY3R1 cmVzICovCisgICAgc21pbGV5X3UsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogNTUgSUJN IEMwIEdyYXBoaWNzICovCisgICAgaGVhdGgxOWdfdSwgICAgICAgICAgICAgICAgICAgICAgICAg LyogNTYgSGVhdGggMTkgZ3JhcGhpY3MgKi8KKyAgICB0dmlnX3UsICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiA1NyBUVkkgZ3JhcGhpY3MgKi8KKyAgICB3eXNlX2duX3UsICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiA1OCBXeXNlIDYwIG5vcm1hbC1tb2RlIGdyYXBoaWNzICovCisg ICAgd3lzZV9nMV91LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogNTkgV3lzZSA2MCBncmFw aGljcyAxICovCisgICAgd3lzZV9nMl91LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogNjAg V3lzZSA2MCBncmFwaGljcyAyICovCisgICAgd3lzZV9nM191LCAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogNjEgV3lzZSA2MCBncmFwaGljcyAzICovCisgICAgZWxvdDkyN191LCAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogNjIgR3JlZWsgRUxPVCA5MjcgKi8KKyAgICBkZ3NwZWNfdSwg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA2MyBERyBTcGVjaWFsIGdyYXBoaWNzICovCisg ICAgZGdsaW5lX3UsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogNjQgREcgTGluZSBkcmF3 aW5nICovCisgICAgZGd3b3JkX3UsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogNjUgREcg V29yZCBwcm9jZXNzaW5nICovCisgICAgaHBsaW5lX3UsICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogNjYgSFAgTGluZSBkcmF3aW5nICovCisgICAgaHBtYXRoX3UsICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogNjcgSFAgTWF0aC9UZWNobmljYWwgKi8KKyAgICBxbnhncnBoX3UsICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiA2OCBRTlggR3JhcGhpY3MgKi8KKyAgICBzbmlicmFj a191LCAgICAgICAgICAgICAgICAgICAgICAgICAvKiA2OSBTTkkgQnJhY2tldHMgKi8KKyAgICBz bmlldXJvX3UsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA3MCBTTkkgRXVybyAqLworICAg IHNuaWZhY2V0X3UsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDcxIFNOSSBGYWNldCAqLwor ICAgIHNuaWlibV91LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDcyIFNOSSBJQk0gKi8K KyAgICBzbmlibGFua3NfdSwgICAgICAgICAgICAgICAgICAgICAgICAvKiA3MyBTTkkgQmxhbmtz ICovCisgICAgY3AxMjUyX3UsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogNzQgV2luZG93 cyBMYXRpbi0xICovCisgICAgY3AxMjUwX3UsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog NzUgV2luZG93cyBMYXRpbi0yICovCisgICAgY3AxMjUxX3UsICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogNzYgV2luZG93cyBDeXJpbGxpYyAqLworICAgIGNwMTI1M191LCAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIDc3IFdpbmRvd3MgR3JlZWsgKi8KKyAgICBjcDEyNTRfdSwgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiA3OCBXaW5kb3dzIFR1cmtpc2ggKi8KKyAgICBjcDEy NTdfdSwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA3OSBXaW5kb3dzIExhdGluLTQgKi8K KyAgICBjcDg1Nl91LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA4MCBDeXJpbGxpYyBQ QyBDb2RlIFBhZ2UgODU2ICovCisgICAgY3A4NTVfdSwgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogODEgQ3lyaWxsaWMgUEMgQ29kZSBQYWdlIDg1NiAqLworICAgIGlzb184ODU5XzFfdSwg ICAgICAgICAgICAgICAgICAgICAgIC8qIDgyIENQODE5IC0gU2FtZSBhcyA4ODU5LTEgKi8KKyAg ICBpc29fODg1OV8yX3UsICAgICAgICAgICAgICAgICAgICAgICAvKiA4MyBDUDkxMiAtIFNhbWUg YXMgODg1OS0yICovCisgICAgaXNvXzg4NTlfM191LCAgICAgICAgICAgICAgICAgICAgICAgLyog ODQgQ1A5MTMgLSBTYW1lIGFzIDg4NTktMyAqLworICAgIGlzb184ODU5XzRfdSwgICAgICAgICAg ICAgICAgICAgICAgIC8qIDg1IENQOTE0IC0gU2FtZSBhcyA4ODU5LTQgKi8KKyAgICBpc29fODg1 OV81X3UsICAgICAgICAgICAgICAgICAgICAgICAvKiA4NiBDUDkxNSAtIFNhbWUgYXMgODg1OS01 ICovCisgICAgaXNvXzg4NTlfNl91LCAgICAgICAgICAgICAgICAgICAgICAgLyogODcgQ1AxMDg5 IC0gU2FtZSBhcyA4ODU5LTYgKi8KKyAgICBpc29fODg1OV83X3UsICAgICAgICAgICAgICAgICAg ICAgICAvKiA4OCBDUDgxMyAtIFNhbWUgYXMgODg1OS03ICovCisgICAgaXNvXzg4NTlfOF91LCAg ICAgICAgICAgICAgICAgICAgICAgLyogODkgQ1A5MTYgLSBTYW1lIGFzIDg4NTktOCAqLworICAg IGlzb184ODU5XzlfdSwgICAgICAgICAgICAgICAgICAgICAgIC8qIDkwIENQOTIwIC0gU2FtZSBh cyA4ODU5LTkgKi8KKyAgICBocHJvbWFuOF91LCAgICAgICAgICAgICAgICAgICAgICAgICAvKiA5 MSBDUDEwNTEgLVNhbWUgYXMgSFAgUm9tYW4gOCAqLworICAgIGNwODU4X3UsICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIDkyIENQODU4IC0gVyBFdXJvcGUgdy9FdXJvICovCisgICAgaXNv Xzg4NTlfMTVfdSwgICAgICAgICAgICAgICAgICAgICAgLyogOTMgSVNPIDg4NTktMTUgTGF0aW4g MTUgKi8KKyAgICBpc29fODg1OV8xNV91LCAgICAgICAgICAgICAgICAgICAgICAvKiA5NCBDUDky MyAtIFNhbWUgYXMgODg1OS0xNSAqLworICAgIGlzb184ODU5XzdfdSwgICAgICAgICAgICAgICAg ICAgICAgIC8qIDk1IEVMT1Q5MjggLSBTYW1lIGFzIDg4NTktNyAqLworICAgIHF1aWNrZHJhd191 LCAgICAgICAgICAgICAgICAgICAgICAgIC8qIDk2IENQMTAwMDAgLSBBcHBsZSBRdWlja2RyYXcg Ki8KKyAgICBjcDM3X3UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA5NyBDUDM3IC0g VS5TLiBFQkNESUMgKi8KKyAgICBjcDEyNTVfdSwgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiA5OCBDUDEyNTUgLSBXaW5kb3dzIEhlYnJldyAqLworICAgIGNwMTI1Nl91LCAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIDk5IENQMTI1NiAtIFdpbmRvd3MgQXJhYmljICovCisgICAgY3Ax MjU4X3UsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMTAwIENQMTI1OCAtIFdpbmRvd3Mg VmlldCBOYW0gKi8KKyAgICBtYXpvdmlhX3UsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAx MDEgTWF6b3ZpYSBQQyBjb2RlIHBhZ2UgKi8KKyAgICBpZGVudF91LCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiAxMDIgVHJhbnNwYXJlbnQgLSBubyB0cmFuc2xhdGlvbiAgKi8KKyAgICBo ejE1MDBfdSwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxMDMgSGF6ZWx0aW5lIDE1MDAv MTUyMCBncmFwaGljcyAqLworICAgIGtvaThyX3UsICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIDEwNCBLT0k4LVIgKi8KKyAgICBrb2k4dV91LCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiAxMDUgS09JOC1VICovCisgICAgYXBsMV91LCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogMTA2IEFQTCAxIChJU08pICovCisgICAgYXBsMl91LCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogMTA3IEFQTCAyIChBSVgpICovCisgICAgYXBsM191LCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogMTA4IEFQTCAzIChQbHVzKSAqLworICAgIGFwbDRfdSwgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIDEwOSBBUEwgNCAoSUJNKSAqLworICAgIGFwbDVfdSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDExMCBBUEwgNSAoMjc0MSkgKi8KK307Cisv KgorICBUYWJsZSBvZiBVbmljb2RlLXRvLUJsYWggdHJhbnNsYXRpb24gZnVuY3Rpb25zLgorICBL RUVQIFRISVMgSU4gU1lOQyBXSVRIIFRIRSBUWF9ibGFoIERFRklOSVRJVElPTlMgaW4gY2tjdW5p LmgsIGFuZCBhbHNvCisgIHdpdGggdGhlIHRhYmxlcyBhYm92ZS4KKyovCitpbnQKKyNpZmRlZiBD S19BTlNJQworKCp4bF90eFtNQVhUWFNFVFMrMV0pKFVTSE9SVCkKKyNlbHNlCisoKnhsX3R4W01B WFRYU0VUUysxXSkoKQorI2VuZGlmIC8qIENLX0FOU0lDICovCisgPSB7CisgICAgdHhfdXNhc2Np aSwgICAgICAgICAgICAgICAgICAgICAgICAgLyogIDAgVVMgSVNPIDY0NiAoQVNDSUkpICovCisg ICAgdHhfYnJpdGlzaCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogIDEgVUsgSVNPIDY0NiAq LworICAgIHR4X2ZyX2NhbmFkaWFuLCAgICAgICAgICAgICAgICAgICAgIC8qICAyIENhbmFkaWFu IEZyZW5jaCBOUkMgKi8KKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiAgMyBDdWJhICovCisgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog IDQgQ3plY2hvICovCisgICAgdHhfZGFuaXNoLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyog IDUgRGFuaXNoL05vcndlZ2lhbiBJU08gNjQ2ICovCisgICAgdHhfZHV0Y2gsICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogIDYgRHV0Y2ggTlJDICovCisgICAgdHhfZmlubmlzaCwgICAgICAg ICAgICAgICAgICAgICAgICAgLyogIDcgRmlubmlzaCBOUkMgICovCisgICAgdHhfZnJlbmNoLCAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogIDggRnJlbmNoIElTTyA2NDYgKi8KKyAgICB0eF9n ZXJtYW4sICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgOSBHZXJtYW4gSVNPIDY0NiAqLwor ICAgIHR4X2hlYnJldzcsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEwIEhlYnJldy03IChE RUMpICovCisgICAgdHhfaHVuZ2FyaWFuLCAgICAgICAgICAgICAgICAgICAgICAgLyogMTEgSHVu Z2FyaWFuIElTTyA2NDYgKi8KKyAgICB0eF9pY2VsYW5kaWMsICAgICAgICAgICAgICAgICAgICAg ICAvKiAxMiBJY2VsYW5kaWMgKi8KKyAgICB0eF9pdGFsaWFuLCAgICAgICAgICAgICAgICAgICAg ICAgICAvKiAxMyBJdGFsaWFuIElTTyA2NDYgKi8KKyAgICB0eF9qaXMwMjAxciwgICAgICAgICAg ICAgICAgICAgICAgICAvKiAxNCBKYXBhbmVzZSBSb21hbiBJU08gNjQ2ICovCisgICAgdHhfamlz MDIwMWssICAgICAgICAgICAgICAgICAgICAgICAgLyogMTUgSmFwYW5lc2UgS2F0YWthbmEgKi8K KyAgICB0eF9rb2k3LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxNiBTaG9ydCBLT0kg Ki8KKyAgICB0eF9kYW5pc2gsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxNyBOb3J3ZWdp YW4vRGFuaXNoIElTTyA2NDYgKi8KKyAgICB0eF9wb3J0dWd1ZXNlLCAgICAgICAgICAgICAgICAg ICAgICAvKiAxOCBQb3J0dWd1ZXNlIElTTyA2NDYgKi8KKyAgICB0eF9zcGFuaXNoLCAgICAgICAg ICAgICAgICAgICAgICAgICAvKiAxOSBzcGFuaXNoIElTTyA2NDYgKi8KKyAgICB0eF9zd2VkaXNo LCAgICAgICAgICAgICAgICAgICAgICAgICAvKiAyMCBTd2VkaXNoIElTTyA2NDYgKi8KKyAgICBO VUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAyMSBTd2VkaXNoIElTTyA2NDYg Zm9yIG5hbWVzICovCisgICAgdHhfc3dpc3MsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog MjIgU3dpc3MgTlJDICAgKi8KKyAgICB0eF9pZGVudCwgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiAyMyBJU08gODg1OS0xICAqLworICAgIHR4Xzg4NTlfMiwgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIDI0IElTTyA4ODU5LTIgICovCisgICAgdHhfODg1OV8zLCAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogMjUgSVNPIDg4NTktMyAgKi8KKyAgICB0eF84ODU5XzQsICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiAyNiBJU08gODg1OS00ICAqLworICAgIHR4Xzg4NTlfNSwgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIDI3IElTTyA4ODU5LTUgICovIC8qIEN5cmlsbGljICov CisgICAgdHhfODg1OV82LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMjggSVNPIDg4NTkt NiAgKi8gLyogQXJhYmljICovCisgICAgdHhfODg1OV83LCAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogMjkgSVNPIDg4NTktNyAgKi8gLyogR3JlZWsgKi8KKyAgICB0eF84ODU5XzgsICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiAzMCBJU08gODg1OS04ICAqLyAvKiBIZWJyZXcgKi8KKyAg ICB0eF84ODU5XzksICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAzMSBJU08gODg1OS05ICAq LyAvKiBMYXRpbi01ICovCisgICAgdHhfODg1OV8xMCwgICAgICAgICAgICAgICAgICAgICAgICAg LyogMzIgSVNPIDg4NTktMTAgKi8gLyogTGF0aW4tNiAqLworICAgIHR4X2tvaTgsICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIDMzIEtPSS04ICAgICAgICovCisgICAgTlVMTCwgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogMzQgSklTLTcgICAgICAgKi8KKyAgICBOVUxMLCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAzNSBTaGlmdCBKSVMgICAqLworICAgIE5V TEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDM2IEphcGFuZXNlIEVVQyAoSkFF KSAqLworICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDM3IEphcGFu ZXNlIERFQyBLYW5qaSAqLworICAgIHR4X2RlY21jcywgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIDM4IERFQyBNQ1MgKi8KKyAgICB0eF9uZXh0c3RlcCwgICAgICAgICAgICAgICAgICAgICAg ICAvKiAzOSBOZVhUICAgICovCisgICAgdHhfZGdpLCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogNDAgREdJICAgICAqLworICAgIHR4X21hY2xhdGluLCAgICAgICAgICAgICAgICAgICAg ICAgIC8qIDQxIE1hY2ludG9zaCBMYXRpbiAgKi8KKyAgICB0eF9ocHJvbWFuOCwgICAgICAgICAg ICAgICAgICAgICAgICAvKiA0MiBIUCBSb21hbiA4ICAgICAgICovCisgICAgdHhfY3A0MzcsICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogNDMgQ1A0MzcgLSBPcmlnaW5hbCAqLworICAgIHR4 X2NwODUwLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDQ0IENQODUwIC0gVyBFdXJvcGUg Ki8KKyAgICB0eF9jcDg1MiwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA0NSBDUDg1MiAt IEUgRXVyb3BlICovCisgICAgdHhfY3A4NTcsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog NDYgQ1A4NTcgLSBUdXJraXNoICAqLworICAgIHR4X2NwODYyLCAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIDQ3IENQODYyIC0gSGVicmV3ICAgKi8KKyAgICB0eF9jcDg2NiwgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiA0OCBDUDg2NCAtIEFyYWJpYyAgICovCisgICAgdHhfY3A4NjYs ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogNDkgQ1A4NjYgLSBDeXJpbGxpYyAqLworICAg IHR4X2NwODY5LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDUwIENQODY5IC0gR3JlZWsg ICAgKi8KKyAgICBOVUxMLCAgICAgICAvKiBEaXNwbGF5IG9ubHkgKi8gICAgICAvKiA1MSBERUMg U3BlY2lhbCBHcmFwaGljcyAqLworICAgIE5VTEwsICAgICAgIC8qIERpc3BsYXkgb25seSAqLyAg ICAgIC8qIDUyIERFQyBUZWNobmljYWwgKi8KKyAgICBOVUxMLCAgICAgICAvKiBEaXNwbGF5IG9u bHkgKi8gICAgICAvKiA1MyBDMCBQaWN0dXJlcyAqLworICAgIE5VTEwsICAgICAgIC8qIERpc3Bs YXkgb25seSAqLyAgICAgIC8qIDU0IEMxIFBpY3R1cmVzICovCisgICAgTlVMTCwgICAgICAgLyog RGlzcGxheSBvbmx5ICovICAgICAgLyogNTUgSUJNIEMwIEdyYXBoaWNzICovCisgICAgTlVMTCwg ICAgICAgLyogRGlzcGxheSBvbmx5ICovICAgICAgLyogNTYgSGVhdGggMTkgZ3JhcGhpY3MgKi8K KyAgICBOVUxMLCAgICAgICAvKiBEaXNwbGF5IG9ubHkgKi8gICAgICAvKiA1NyBUVkkgZ3JhcGhp Y3MgKi8KKyAgICBOVUxMLCAgICAgICAvKiBEaXNwbGF5IG9ubHkgKi8gICAgICAvKiA1OCBXeXNl IDYwIG5vcm1hbC1tb2RlIGdyYXBoaWNzICovCisgICAgTlVMTCwgICAgICAgLyogRGlzcGxheSBv bmx5ICovICAgICAgLyogNTkgV3lzZSA2MCBncmFwaGljcyAxICovCisgICAgTlVMTCwgICAgICAg LyogRGlzcGxheSBvbmx5ICovICAgICAgLyogNjAgV3lzZSA2MCBncmFwaGljcyAyICovCisgICAg TlVMTCwgICAgICAgLyogRGlzcGxheSBvbmx5ICovICAgICAgLyogNjEgV3lzZSA2MCBncmFwaGlj cyAzICovCisgICAgdHhfZWxvdDkyNywgICAgICAgICAgICAgICAgICAgICAgICAgLyogNjIgR3Jl ZWsgRUxPVCA5MjcgKi8KKyAgICBOVUxMLCAgICAgICAvKiBEaXNwbGF5IG9ubHkgKi8gICAgICAv KiA2MyBERyBzcGVjaWFsIGdyYXBoaWNzICovCisgICAgTlVMTCwgICAgICAgLyogRGlzcGxheSBv bmx5ICovICAgICAgLyogNjQgREcgbGluZS1kcmF3aW5nICovCisgICAgTlVMTCwgICAgICAgLyog RGlzcGxheSBvbmx5ICovICAgICAgLyogNjUgREcgd29yZC1wcm9jZXNzaW5nICovCisgICAgTlVM TCwgICAgICAgLyogRGlzcGxheSBvbmx5ICovICAgICAgLyogNjYgSFAgbGluZS1kcmF3aW5nICov CisgICAgTlVMTCwgICAgICAgLyogRGlzcGxheSBvbmx5ICovICAgICAgLyogNjcgSFAgbWF0aC90 ZWNoaWNhbCAqLworICAgIE5VTEwsICAgICAgIC8qIERpc3BsYXkgb25seSAqLyAgICAgIC8qIDY4 IFFOWCBHcmFwaGljcyAqLworICAgIE5VTEwsICAgICAgIC8qIERpc3BsYXkgb25seSAqLyAgICAg IC8qIDY5IFNOSSBCcmFja2V0cyAqLworICAgIE5VTEwsICAgICAgIC8qIERpc3BsYXkgb25seSAq LyAgICAgIC8qIDcwIFNOSSBFdXJvICovCisgICAgTlVMTCwgICAgICAgLyogRGlzcGxheSBvbmx5 ICovICAgICAgLyogNzEgU05JIEZhY2V0ICovCisgICAgTlVMTCwgICAgICAgLyogRGlzcGxheSBv bmx5ICovICAgICAgLyogNzIgU05JIElCTSAqLworICAgIE5VTEwsICAgICAgIC8qIERpc3BsYXkg b25seSAqLyAgICAgIC8qIDczIFNOSSBCbGFua3MgKi8KKyAgICB0eF9jcDEyNTIsICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiA3NCBXaW5kb3dzIExhdGluLTEgKi8KKyAgICB0eF9jcDEyNTAs ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA3NSBXaW5kb3dzIExhdGluLTIgKi8KKyAgICB0 eF9jcDEyNTEsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA3NiBXaW5kb3dzIEN5cmlsbGlj ICovCisgICAgdHhfY3AxMjUzLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogNzcgV2luZG93 cyBHcmVlayAqLworICAgIHR4X2NwMTI1NCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDc4 IFdpbmRvd3MgVHVya2lzaCAqLworICAgIHR4X2NwMTI1NywgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIDc5IFdpbmRvd3MgTGF0aW4tNCAqLworICAgIHR4X2NwODU2LCAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIDgwIEN5cmlsbGljIFBDIENvZGUgUGFnZSA4NTYgKi8KKyAgICB0eF9j cDg1NSwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA4MSBDeXJpbGxpYyBQQyBDb2RlIFBh Z2UgODU1ICovCisgICAgdHhfaWRlbnQsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogODIg Q1A4MTkgLSBTYW1lIGFzIDg4NTktMSAqLworICAgIHR4Xzg4NTlfMiwgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIDgzIENQOTEyIC0gU2FtZSBhcyA4ODU5LTIgKi8KKyAgICB0eF84ODU5XzMs ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA4NCBDUDkxMyAtIFNhbWUgYXMgODg1OS0zICov CisgICAgdHhfODg1OV80LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogODUgQ1A5MTQgLSBT YW1lIGFzIDg4NTktNCAqLworICAgIHR4Xzg4NTlfNSwgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIDg2IENQOTE1IC0gU2FtZSBhcyA4ODU5LTUgKi8KKyAgICB0eF84ODU5XzYsICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiA4NyBDUDEwODkgLSBTYW1lIGFzIDg4NTktNiAqLworICAgIHR4 Xzg4NTlfNywgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDg4IENQODEzIC0gU2FtZSBhcyA4 ODU5LTcgKi8KKyAgICB0eF84ODU5XzgsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA4OSBD UDkxNiAtIFNhbWUgYXMgODg1OS04ICovCisgICAgdHhfODg1OV85LCAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogOTAgQ1A5MjAgLSBTYW1lIGFzIDg4NTktOSAqLworICAgIHR4X2hwcm9tYW44 LCAgICAgICAgICAgICAgICAgICAgICAgIC8qIDkxIENQMTA1MSAtU2FtZSBhcyBIUCBSb21hbiA4 ICovCisgICAgdHhfY3A4NTgsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogOTIgQ1A4NTgg LSBXIEV1cm9wZSB3L0V1cm8gKi8KKyAgICB0eF84ODU5XzE1LCAgICAgICAgICAgICAgICAgICAg ICAgICAvKiA5MyBJU08gODg1OS0xNSBMYXRpbiAxNSAqLworICAgIHR4Xzg4NTlfMTUsICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIDk0IENQOTIzIC0gU2FtZSBhcyBMYXRpbiAxNSAqLworICAg IHR4Xzg4NTlfNywgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDk1IEVMT1Q5MjggLSBTYW1l IGFzIDg4NTktNyAqLworICAgIHR4X3F1aWNrZHJhdywgICAgICAgICAgICAgICAgICAgICAgIC8q IDk2IENQMTAwMDAgLSBBcHBsZSBRdWlja2RyYXcgKi8KKyAgICB0eF9jcDM3LCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiA5NyBDUDM3IC0gVS5TLiBFQkNESUMgKi8KKyAgICB0eF9jcDEy NTUsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA5OCBDUDEyNTUgLSBXaW5kb3dzIEhlYnJl dyAqLworICAgIHR4X2NwMTI1NiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDk5IENQMTI1 NiAtIFdpbmRvd3MgQXJhYmljICovCisgICAgdHhfY3AxMjU4LCAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogMTAwIENQMTI1OCAtIFdpbmRvd3MgVmlldCBOYW0gKi8KKyAgICB0eF9tYXpvdmlh LCAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxMDEgTWF6b3ZpYSAgUEMgY29kZSBwYWdlICov CisgICAgdHhfaWRlbnQsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMTAyIFRyYW5zcGFy ZW50IC0gbm8gdHJhbnNsYXRpb24gKi8KKyAgICBOVUxMLCAgICAgICAvKiBEaXNwbGF5IG9ubHkg Ki8gICAgICAvKiAxMDMgSGF6ZWx0aW5lIDE1MDAvMTUyMCBncmFwaGljcyAqLworICAgIHR4X2tv aThyLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEwNCBLT0k4LVIgKi8KKyAgICB0eF9r b2k4dSwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxMDUgS09JOC1VICovCisgICAgdHhf YXBsMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMTA2IEFQTCAxIChJU08pICovCisg ICAgdHhfYXBsMiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMTA3IEFQTCAyIChBSVgp ICovCisgICAgdHhfYXBsMywgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMTA4IEFQTCAz IChQbHVzKSAqLworICAgIHR4X2FwbDQsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEw OCBBUEwgNCAoSUJNKSAqLworICAgIHR4X2FwbDUgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIDExMCBBUEwgNSAoMjc0MSkgKi8KK307CisKKy8qCisgIFRhYmxlIG9mIEZDUy10by1Vbmlj b2RlIHRyYW5zbGF0aW9uIGZ1bmN0aW9ucy4KKyAgS0VFUCBUSElTIElOIFNZTkMgV0lUSCBUSEUg RkNfYmxhaCBERUZJTklUSVRJT05TIGluIGNrdXhsYS5oLgorKi8KK1VTSE9SVAorI2lmZGVmIENL X0FOU0lDCisoKnhsX2ZjdVtNQVhGQ1NFVFMrMV0pKENIQVIpCisjZWxzZQorKCp4bF9mY3VbTUFY RkNTRVRTKzFdKSgpCisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKz0geworICAgIGFzY2lpX3UsICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAwIFVTIElTTyA2NDYgKEFTQ0lJKSAqLworICAg IGJyaXRpc2hfdSwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAxIFVLIElTTyA2NDYgKi8K KyAgICBkdXRjaF91LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgMiBEdXRjaCBOUkMg Ki8KKyAgICBmaW5uaXNoX3UsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgMyBGaW5uaXNo IE5SQyAgKi8KKyAgICBmcmVuY2hfdSwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgNCBG cmVuY2ggSVNPIDY0NiAqLworICAgIGZyX2NhbmFkaWFuX3UsICAgICAgICAgICAgICAgICAgICAg IC8qICA1IENhbmFkaWFuIEZyZW5jaCBOUkMgKi8KKyAgICBnZXJtYW5fdSwgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiAgNiBHZXJtYW4gSVNPIDY0NiAqLworICAgIGh1bmdhcmlhbl91LCAg ICAgICAgICAgICAgICAgICAgICAgIC8qICA3IEh1bmdhcmlhbiBJU08gNjQ2ICovCisgICAgaXRh bGlhbl91LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIDggSXRhbGlhbiBJU08gNjQ2ICov CisgICAgZGFuaXNoX3UsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIDkgRGFuaXNoL05v cndlZ2lhbiBJU08gNjQ2ICovCisgICAgcG9ydHVndWVzZV91LCAgICAgICAgICAgICAgICAgICAg ICAgLyogMTAgUG9ydHVndWVzZSBJU08gNjQ2ICovCisgICAgc3BhbmlzaF91LCAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogMTEgc3BhbmlzaCBJU08gNjQ2ICovCisgICAgc3dlZGlzaF91LCAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogMTIgU3dlZGlzaCBJU08gNjQ2ICovCisgICAgc3dp c3NfdSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMTMgU3dpc3MgTlJDICAgKi8KKyAg ICBpc29fODg1OV8xX3UsICAgICAgICAgICAgICAgICAgICAgICAvKiAxNCBJU08gODg1OS0xIExh dGluLTEgKi8KKyAgICBpc29fODg1OV8yX3UsICAgICAgICAgICAgICAgICAgICAgICAvKiAxNSBJ U08gODg1OS0yIExhdGluLTIgKi8KKyAgICBkZWNtY3NfdSwgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiAxNiBERUMgTUNTICovCisgICAgbmV4dHN0ZXBfdSwgICAgICAgICAgICAgICAgICAg ICAgICAgLyogMTcgTmVYVCAqLworICAgIGNwNDM3X3UsICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIDE4IENQNDM3IC0gT3JpZ2luYWwgKi8KKyAgICBjcDg1MF91LCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiAxOSBDUDg1MCAtIFcgRXVyb3BlICovCisgICAgY3A4NTJfdSwgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogMjAgQ1A4NTIgLSBFIEV1cm9wZSAqLworICAgIHF1 aWNrZHJhd191LCAgICAgICAgICAgICAgICAgICAgICAgIC8qIDIxIENQMTAwMDAgLSBBcHBsZSBR dWlja2RyYXcgKi8KKyAgICBkZ2lfdSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAy MiBER0kgKi8KKyAgICBocHJvbWFuOF91LCAgICAgICAgICAgICAgICAgICAgICAgICAvKiAyMyBI UCBSb21hbiA4ICovCisgICAgaXNvXzg4NTlfNV91LCAgICAgICAgICAgICAgICAgICAgICAgLyog MjQgSVNPIDg4NTktNSBDeXJpbGxpYyAqLworICAgIGNwODY2X3UsICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIDI1IENQODY2IC0gQ3lyaWxsaWMgKi8KKyAgICBrb2k3X3UsICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiAyNiBTaG9ydCBLT0kgKi8KKyAgICBrb2k4X3UsICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiAyNyBLT0ktOCAgICAgICAqLworICAgIE5VTEwsICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDI4IEpJUy03ICovCisgICAgTlVMTCwgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMjkgU2hpZnQtSklTICovCisgICAgTlVMTCwg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMzAgSmFwYW5lc2UgRVVDICovCisgICAg TlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMzEgREVDIEthbmppICovCisg ICAgaGVicmV3N191LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMzIgSGVicmV3LTcgKERF QykgKi8KKyAgICBpc29fODg1OV84X3UsICAgICAgICAgICAgICAgICAgICAgICAvKiAzMyBJU08g ODg1OS04IEhlYnJldyAqLworICAgIGNwODYyX3UsICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIDM0IENQODYyIEhlYnJldyAqLworICAgIGVsb3Q5MjdfdSwgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIDM1IEdyZWVrIEVMT1QgOTI3ICovCisgICAgaXNvXzg4NTlfN191LCAgICAgICAg ICAgICAgICAgICAgICAgLyogMzYgSVNPIDg4NTktNyBHcmVlayAqLworICAgIGNwODY5X3UsICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDM3IENQODY5IEdyZWVrICovCisgICAgaXNvXzg4 NTlfMTVfdSwgICAgICAgICAgICAgICAgICAgICAgLyogMzggSVNPIDg4NTktMTUgTGF0aW4tOSAq LworICAgIGNwODU4X3UsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDM5IENQODU4IC0g VyBFdXJvcGUgdy9FdXJvICovCisgICAgY3A4NTVfdSwgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogNDAgQ3lyaWxsaWMgUEMgQ29kZSBQYWdlIDg1NiAqLworICAgIGNwMTI1MV91LCAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIDQxIFdpbmRvd3MgQ3lyaWxsaWMgKi8KKyAgICBjcDg1 Nl91LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA0MiBCdWxnYXJpYW4gUEMgQ29kZSBQ YWdlIDg1NiAqLworICAgIGNwMTI1MF91LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDQz IFdpbmRvd3MgTGF0aW4tMiAqLworICAgIG1hem92aWFfdSwgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIDQ0IE1hem92aWEgUEMgY29kZSBwYWdlICovCisgICAgTlVMTCwgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogNDUgVUNTLTIgKi8KKyAgICBOVUxMLCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiA0NiBVVEYtOCAqLworICAgIGtvaThyX3UsICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIDQ3IEtPSTgtUiAqLworICAgIGtvaTh1X3UsICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIDQ4IEtPSTgtVSAqLworICAgIGNwMTI1Ml91ICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIDQ5IENQMTI1MiAqLworfTsKKworLyoKKyAgVGFibGUgb2YgVW5p Y29kZS10by1GQ1MgdHJhbnNsYXRpb24gZnVuY3Rpb25zLgorICBLRUVQIFRISVMgSU4gU1lOQyBX SVRIIFRIRSBGQ19ibGFoIERFRklOSVRJVElPTlMgaW4gY2t1eGxhLmguCisqLworaW50CisjaWZk ZWYgQ0tfQU5TSUMKKygqeGxfdWZjW01BWEZDU0VUUysxXSkoVVNIT1JUKQorI2Vsc2UKKygqeGxf dWZjW01BWEZDU0VUUysxXSkoKQorI2VuZGlmIC8qIENLX0FOU0lDICovCis9IHsKKyAgICB0eF91 c2FzY2lpLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgMCBVUyBJU08gNjQ2IChBU0NJSSkg Ki8KKyAgICB0eF9icml0aXNoLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgMSBVSyBJU08g NjQ2ICovCisgICAgdHhfZHV0Y2gsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIDIgRHV0 Y2ggTlJDICovCisgICAgdHhfZmlubmlzaCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogIDMg RmlubmlzaCBOUkMgICovCisgICAgdHhfZnJlbmNoLCAgICAgICAgICAgICAgICAgICAgICAgICAg LyogIDQgRnJlbmNoIElTTyA2NDYgKi8KKyAgICB0eF9mcl9jYW5hZGlhbiwgICAgICAgICAgICAg ICAgICAgICAvKiAgNSBDYW5hZGlhbiBGcmVuY2ggTlJDICovCisgICAgdHhfZ2VybWFuLCAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogIDYgR2VybWFuIElTTyA2NDYgKi8KKyAgICB0eF9odW5n YXJpYW4sICAgICAgICAgICAgICAgICAgICAgICAvKiAgNyBIdW5nYXJpYW4gSVNPIDY0NiAqLwor ICAgIHR4X2l0YWxpYW4sICAgICAgICAgICAgICAgICAgICAgICAgIC8qICA4IEl0YWxpYW4gSVNP IDY0NiAqLworICAgIHR4X2RhbmlzaCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICA5IERh bmlzaC9Ob3J3ZWdpYW4gSVNPIDY0NiAqLworICAgIHR4X3BvcnR1Z3Vlc2UsICAgICAgICAgICAg ICAgICAgICAgIC8qIDEwIFBvcnR1Z3Vlc2UgSVNPIDY0NiAqLworICAgIHR4X3NwYW5pc2gsICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIDExIHNwYW5pc2ggSVNPIDY0NiAqLworICAgIHR4X3N3 ZWRpc2gsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEyIFN3ZWRpc2ggSVNPIDY0NiAqLwor ICAgIHR4X3N3aXNzLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEzIFN3aXNzIE5SQyAg ICovCisgICAgdHhfaWRlbnQsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMTQgSVNPIDg4 NTktMSBMYXRpbi0xICovCisgICAgdHhfODg1OV8yLCAgICAgICAgICAgICAgICAgICAgICAgICAg LyogMTUgSVNPIDg4NTktMiBMYXRpbi0yICovCisgICAgdHhfZGVjbWNzLCAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogMTYgREVDIE1DUyAqLworICAgIHR4X25leHRzdGVwLCAgICAgICAgICAg ICAgICAgICAgICAgIC8qIDE3IE5lWFQgKi8KKyAgICB0eF9jcDQzNywgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiAxOCBDUDQzNyAtIE9yaWdpbmFsICovCisgICAgdHhfY3A4NTAsICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogMTkgQ1A4NTAgLSBXIEV1cm9wZSAqLworICAgIHR4X2Nw ODUyLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDIwIENQODUyIC0gRSBFdXJvcGUgKi8K KyAgICB0eF9xdWlja2RyYXcsICAgICAgICAgICAgICAgICAgICAgICAvKiAyMSBDUDEwMDAwIC0g QXBwbGUgUXVpY2tkcmF3ICovCisgICAgdHhfZGdpLCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogMjIgREdJICovCisgICAgdHhfaHByb21hbjgsICAgICAgICAgICAgICAgICAgICAgICAg LyogMjMgSFAgUm9tYW4gOCAqLworICAgIHR4Xzg4NTlfNSwgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIDI0IElTTyA4ODU5LTUgQ3lyaWxsaWMgKi8KKyAgICB0eF9jcDg2NiwgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiAyNSBDUDg2NiAtIEN5cmlsbGljICovCisgICAgdHhfa29pNywg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMjYgU2hvcnQgS09JICovCisgICAgdHhfa29p OCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMjcgS09JLTggICAgICAgKi8KKyAgICBO VUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAyOCBKSVMtNyAqLworICAgIE5V TEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDI5IFNoaWZ0LUpJUyAqLworICAg IE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDMwIEphcGFuZXNlIEVVQyAq LworICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDMxIERFQyBLYW5q aSAqLworICAgIHR4X2hlYnJldzcsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDMyIEhlYnJl dy03IChERUMpICovCisgICAgdHhfODg1OV84LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyog MzMgSVNPIDg4NTktOCBIZWJyZXcgKi8KKyAgICB0eF9jcDg2MiwgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiAzNCBDUDg2MiBIZWJyZXcgKi8KKyAgICB0eF9lbG90OTI3LCAgICAgICAgICAg ICAgICAgICAgICAgICAvKiAzNSBHcmVlayBFTE9UIDkyNyAqLworICAgIHR4Xzg4NTlfNywgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIDM2IElTTyA4ODU5LTcgR3JlZWsgKi8KKyAgICB0eF9j cDg2OSwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAzNyBDUDg2OSBHcmVlayAqLworICAg IHR4Xzg4NTlfMTUsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDM4IElTTyA4ODU5LTE1IExh dGluLTkgKi8KKyAgICB0eF9jcDg1OCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAzOSBD UDg1OCAtIFcgRXVyb3BlIHcvRXVybyAqLworICAgIHR4X2NwODU1LCAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIDQwIEN5cmlsbGljIFBDIENvZGUgUGFnZSA4NTYgKi8KKyAgICB0eF9jcDEy NTEsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA0MSBXaW5kb3dzIEN5cmlsbGljICovCisg ICAgdHhfY3A4NTYsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogNDIgQnVsZ2FyaWFuIFBD IENvZGUgUGFnZSA4NTYgKi8KKyAgICB0eF9jcDEyNTAsICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiA0MyBXaW5kb3dzIExhdGluLTIgKi8KKyAgICB0eF9tYXpvdmlhLCAgICAgICAgICAgICAg ICAgICAgICAgICAvKiA0NCBNYXpvdmlhIFBDIGNvZGUgcGFnZSAqLworICAgIE5VTEwsICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDQ1IFVDUy0yICovCisgICAgTlVMTCwgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogNDYgVVRGLTggKi8KKyAgICB0eF9rb2k4ciwgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiA0NyBLT0k4LVIgKi8KKyAgICB0eF9rb2k4dSwgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiA0OCBLT0k4LVUgKi8KKyAgICB0eF9jcDEyNTIgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiA0OSBDUDEyNTIgKi8KK307CisKKy8qCisgIFRhYmxl IG9mIFRDUy10by1Vbmljb2RlIHRyYW5zbGF0aW9uIGZ1bmN0aW9ucy4KKyAgS0VFUCBUSElTIElO IFNZTkMgV0lUSCBUSEUgVENfYmxhaCBERUZJTklUSU9OUyBpbiBja3V4bGEuaC4KKyovCitVU0hP UlQKKyNpZmRlZiBDS19BTlNJQworKCp4bF90Y3VbTUFYVENTRVRTKzFdKShDSEFSKQorI2Vsc2UK KygqeGxfdGN1W01BWFRDU0VUUysxXSkoKQorI2VuZGlmIC8qIENLX0FOU0lDICovCis9IHsKKyAg ICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgMCA9IFRyYW5zcGFyZW50 ICovCisgICAgYXNjaWlfdSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIDEgPSBBU0NJ SSAqLworICAgIGlzb184ODU5XzFfdSwgICAgICAgICAgICAgICAgICAgICAgIC8qICAyIElTTyA4 ODU5LTEgTGF0aW4tMSAqLworICAgIGlzb184ODU5XzJfdSwgICAgICAgICAgICAgICAgICAgICAg IC8qICAzIElTTyA4ODU5LTIgTGF0aW4tMiAqLworICAgIGlzb184ODU5XzVfdSwgICAgICAgICAg ICAgICAgICAgICAgIC8qICA0IElTTyA4ODU5LTUgQ3lyaWxsaWMgKi8KKyAgICBOVUxMLCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgNSBKYXBhbmVzZSBFVUMgKi8KKyAgICBpc29f ODg1OV84X3UsICAgICAgICAgICAgICAgICAgICAgICAvKiAgNiBJU08gODg1OS04IEhlYnJldyAq LworICAgIGlzb184ODU5XzdfdSwgICAgICAgICAgICAgICAgICAgICAgIC8qICA3IElTTyA4ODU5 LTcgR3JlZWsgKi8KKyAgICBpc29fODg1OV8xNV91LCAgICAgICAgICAgICAgICAgICAgICAvKiAg OCBJU08gODg1OS0xNSBMYXRpbi05ICovCisgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogIDkgVUNTLTIgKi8KKyAgICBOVUxMICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiAxMCBVVEYtOCAqLworfTsKKworCisvKgorICBUYWJsZSBvZiBVbmljb2RlLXRv LVRDUyB0cmFuc2xhdGlvbiBmdW5jdGlvbnMuCisgIEtFRVAgVEhJUyBJTiBTWU5DIFdJVEggVEhF IFRDX2JsYWggREVGSU5JVElPTlMgaW4gY2t1eGxhLmguCisqLworaW50CisjaWZkZWYgQ0tfQU5T SUMKKygqeGxfdXRjW01BWFRDU0VUUysxXSkoVVNIT1JUKQorI2Vsc2UKKygqeGxfdXRjW01BWFRD U0VUUysxXSkoKQorI2VuZGlmIC8qIENLX0FOU0lDICovCis9IHsKKyAgICBOVUxMLCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiAgMCA9IFRyYW5zcGFyZW50ICovCisgICAgdHhfdXNh c2NpaSwgICAgICAgICAgICAgICAgICAgICAgICAgLyogIDEgPSBBU0NJSSAqLworICAgIHR4X2lk ZW50LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAyIElTTyA4ODU5LTEgTGF0aW4tMSAq LworICAgIHR4Xzg4NTlfMiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAzIElTTyA4ODU5 LTIgTGF0aW4tMiAqLworICAgIHR4Xzg4NTlfNSwgICAgICAgICAgICAgICAgICAgICAgICAgIC8q ICA0IElTTyA4ODU5LTUgQ3lyaWxsaWMgKi8KKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiAgNSBKYXBhbmVzZSBFVUMgKi8KKyAgICB0eF84ODU5XzgsICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiAgNiBJU08gODg1OS04IEhlYnJldyAqLworICAgIHR4Xzg4NTlf NywgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICA3IElTTyA4ODU5LTcgR3JlZWsgKi8KKyAg ICB0eF84ODU5XzE1LCAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgOCBJU08gODg1OS0xNSBM YXRpbi05ICovCisgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIDkg VUNTLTIgKi8KKyAgICBOVUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxMCBV VEYtOCAqLworfTsKKworI2lmZGVmIENPTU1FTlQKKy8qCisgIFRoZSBVVEY4IGNvbnZlcnNpb25z IGFyZSBiYXNlZCBvbiB0aGUgQ29udmVydFVURiBmdW5jdGlvbnMgd3JpdHRlbgorICBieSBNYXJr IEUuIERhdmlzLCBjb3B5cmlnaHQgMTk5NCBUYWxpZ2VudCwgSW5jLgorCisgIFRhYmxlcyBmb3Ig dXNlIGluIGNhbGN1bGF0aW5nIFVURjggY29udmVyc2lvbnMuICBUaGVzZSBjb250YWluCisgIHN1 cHBvcnQgZm9yIElTTy0xMDY0NiB3aGljaCBzdXBwb3J0cyBhIDMxLWJpdCBjaGFyIHNpemUuCisK KyAgTk9URTogMHhubm5VTCBpcyBOT1QgcG9ydGFibGUhCisqLworVUxPTkcKK29mZnNldHNGcm9t VVRGOFs3XSA9IHsKKyNpZmRlZiBDS19BTlNJQworICAgIDB4MDAwMDAwMDBVTCwgLyogSWdub3Jl ZCAqLworICAgIDB4MDAwMDAwMDBVTCwgMHgwMDAwMzA4MFVMLCAweDAwMEUyMDgwVUwsCisgICAg MHgwM0M4MjA4MFVMLCAweEZBMDgyMDgwVUwsIDB4ODIwODIwODBVTAorI2Vsc2UKKyAgICAweDAw MDAwMDAwTCwgLyogSWdub3JlZCAqLworICAgIDB4MDAwMDAwMDBMLCAweDAwMDAzMDgwTCwgMHgw MDBFMjA4MEwsCisgICAgMHgwM0M4MjA4MEwsICh1bnNpZ25lZCkgMHhGQTA4MjA4MEwsICh1bnNp Z25lZCkgMHg4MjA4MjA4MEwKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworfTsKKworQ0hBUiBieXRl c0luVVRGOFsyNTZdID0geworICAgIDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsIDEs MSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsCisgICAgMSwxLDEsMSwxLDEsMSwxLDEsMSwx LDEsMSwxLDEsMSwgMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwKKyAgICAxLDEsMSwx LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLCAxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwx LAorICAgIDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsIDEsMSwxLDEsMSwxLDEsMSwx LDEsMSwxLDEsMSwxLDEsCisgICAgMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwgMSwx LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwKKyAgICAxLDEsMSwxLDEsMSwxLDEsMSwxLDEs MSwxLDEsMSwxLCAxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLAorICAgIDIsMiwyLDIs MiwyLDIsMiwyLDIsMiwyLDIsMiwyLDIsIDIsMiwyLDIsMiwyLDIsMiwyLDIsMiwyLDIsMiwyLDIs CisgICAgMywzLDMsMywzLDMsMywzLDMsMywzLDMsMywzLDMsMywgNCw0LDQsNCw0LDQsNCw0LDUs NSw1LDUsNiw2LDYsNgorfTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisKK0NIQVIgZmlyc3RCeXRl TWFya1s3XSA9IHsweDAwLCAweDAwLCAweEMwLCAweEUwLCAweEYwLCAweEY4LCAweEZDfTsKKwor LyoKKyAgdXRmOF90b191Y3MyKCkgdGFrZXMgb25lIFVURi04IGJ5dGUgYXQgYSB0aW1lLiAgSXQg cmV0dXJucyBhIHBvaW50ZXIgdGhlCisgIFVDUy0yIGNoYXJhY3RlciBpZiBhbmQgb25seSBpZiB0 aGUgZW50aXJlIFVURi04IHN0cmluZyBoYXMgYmVlbiByZWNlaXZlZC4KKyAgUmV0dXJuIHZhbHVl czoKKyAgIDA6IENvbXBsZXRlIFVURi04IHNlcXVlbmNlIHJlY2VpdmVkOyB1Y3MyIHBvaW50cyB0 byB2YWxpZCB1Y3MyIGNoYXJhY3Rlci4KKyAgPjA6IFVURi04IHNlcXVlbmNlIGluY29tcGxldGUs IGlnbm9yZSB1Y3MyIHZhbHVlLgorICA8MDogVVRGLTggZXJyb3IsIDB4ZmZmZCBzaG91bGQgYmUg aW5zZXJ0ZWQgQkVGT1JFIHRoZSB1Y3MyIHZhbHVlLgorCisgIE5PVEU6IEEgbmVnYXRpdmUgdmFs dWUgaXMgcmV0dXJuZWQgb25seSB3aGVuIHR3byByZXR1cm4gdmFsdWVzIGFyZSBpbmRpY2F0ZWQs CisgIGUuZy4gd2hlbiBhIFVURi04IHNlcXVlbmNlIGlzIGludGVycnVwdGVkIGJ5IGFuIEFTQ0lJ IGNoYXIuICBJbiB0aGlzIGNhc2UKKyAgdGhlIGluY29tcGxldGUgVVRGLTggc2VxdWVuY2UgbXVz dCBiZSByZXBsYWNlZCBieSAweGZmZmQsIGFuZCB0aGVuIHRoZSBBU0NJSQorICBjaGFyYWN0ZXIg aXMga2VwdCBhcy1pcy4gIEluIG90aGVyIGVycm9yIGNhc2VzLCB1Y3MyIGlzIHNldCB0byAweGZm ZmQgYW5kCisgIHRoZSByZXR1cm4gdmFsdWUgaXMgMC4KKyovCisjZGVmaW5lIFVURkJVRlNJWiAx NgorCitpbnQKKyNpZmRlZiBDS19BTlNJQwordXRmOF90b191Y3MyKENIQVIgY2gsIFVTSE9SVCAq KiB1Y3MyKQorI2Vsc2UKK3V0ZjhfdG9fdWNzMihjaCwgdWNzMikgQ0hBUiBjaDsgVVNIT1JUICoq IHVjczI7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAgICBzdGF0aWMgVVNIT1JUIHVjczJy ZXR1cm4gPSAwOworCisjaWZkZWYgQ09NTUVOVAorICAgIC8qIFVuaWNvZGUgQ29uc29ydGl1bSBz YW1wbGUgY29kZSB3b3JrcyBvbmx5IHdpdGggd2VsbC1mb3JtZWQgVVRGOCAqLworCisgICAgaW50 IGkgPSAwOworICAgIHN0YXRpYyBpbnQgbGVuID0gMDsKKyAgICBzdGF0aWMgQ0hBUiB1dGY4W1VU RkJVRlNJWl0gPSB7IDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAgfTsKKyAgICBVTE9O RyB1Y3M0ID0gMDsKKworICAgIHV0ZjhbbGVuKytdID0gY2g7ICAgICAgICAgICAgICAgICAgIC8q IEFkZCBjaGFyIHRvIHN0cmluZyB0byBwcm9jZXNzICovCisKKyAgICBpZiAobGVuIDwgYnl0ZXNJ blVURjhbdXRmOFswXV0pICAgICAvKiBOZWVkIG1vcmUgYnl0ZXMgKi8KKyAgICAgIHJldHVybihi eXRlc0luVVRGOFt1dGY4WzBdXSAtIGxlbik7CisKKyAgICBzd2l0Y2ggKGxlbikgeyAgICAgICAg ICAgICAgICAgICAgICAvKiBIYXZlIGNvbXBsZXRlIHNlcXVlbmNlLi4uICovCisgICAgICBjYXNl IDY6IHVjczQgKz0gdXRmOFtpKytdOyB1Y3M0IDw8PSA2OyAvKiAoZmFsbC10aHJ1IGlzIGludGVu dGlvbmFsKSAqLworICAgICAgY2FzZSA1OiB1Y3M0ICs9IHV0ZjhbaSsrXTsgdWNzNCA8PD0gNjsK KyAgICAgIGNhc2UgNDogdWNzNCArPSB1dGY4W2krK107IHVjczQgPDw9IDY7CisgICAgICBjYXNl IDM6IHVjczQgKz0gdXRmOFtpKytdOyB1Y3M0IDw8PSA2OworICAgICAgY2FzZSAyOiB1Y3M0ICs9 IHV0ZjhbaSsrXTsgdWNzNCA8PD0gNjsKKyAgICAgIGNhc2UgMTogdWNzNCArPSB1dGY4W2krK107 CisgICAgfQorICAgIHVjczQgLT0gb2Zmc2V0c0Zyb21VVEY4W2xlbl07CisgICAgdWNzMnJldHVy biA9IChVU0hPUlQpKHVjczQgJiAweEZGRkYpOworI2lmZGVmIERFQlVHCisgICAgLyogVGhpcyBz aG93cyB0aGF0IG91ciByZXR1cm4gdmFsdWUgaXMgaW4gdGhlIHByZXZhaWxpbmcgYnl0ZSBvcmRl cjogKi8KKyAgICAvKiBlLmcuIExFIG9uIFBDLCBCRSBvbiBTcGFyYy4gKi8KKyAgICBpZiAoZGVi bG9nKSB7CisgICAgICAgIGNoYXIgYnVmWzE2XTsKKyAgICAgICAgdW5pb24gY2tfc2hvcnQgeHg7 CisgICAgICAgIHh4Lnhfc2hvcnQgPSB1Y3MycmV0dXJuOworICAgICAgICBzcHJpbnRmKGJ1Ziwi JTA0WCIsdWNzMnJldHVybik7CisgICAgICAgIGRlYnVnKEYxMTEsInV0ZjhfdG9fdWNzMiBzaG9y dCIsYnVmLHVjczJyZXR1cm4pOworICAgICAgICBkZWJ1ZyhGMTAxLCJ1dGY4X3RvX3VjczIgY2hh clswXSIsIiIseHgueF9jaGFyWzBdKTsKKyAgICAgICAgZGVidWcoRjEwMSwidXRmOF90b191Y3My IGNoYXJbMV0iLCIiLHh4LnhfY2hhclsxXSk7CisgICAgfQorI2VuZGlmIC8qIERFQlVHICovCisg ICAgKnVjczIgPSAmdWNzMnJldHVybjsKKyAgICBsZW4gPSAwOworICAgIHJldHVybigwKTsKKyNl bHNlCisgICAgLyoKKyAgICAgICBSb2J1c3RlciBjb2RlIGFkYXB0ZWQgZnJvbSBUaG9tYXMgRGlj a2V5LCBYZnJlZTg2LAorICAgICAgIHJlY29tbWVuZGVkIGJ5IE1hcmt1cyBLdWhuLgorICAgICov CisgICAgc3RhdGljIGludCB1dGZjb3VudCA9IDA7ICAgICAgICAgICAgLyogUG9zaXRpb24gaW4g VVRGIHNlcXVlbmNlICovCisgICAgaW50IHV0ZmVycm9yID0gMDsgICAgICAgICAgICAgICAgICAg LyogRmxhZyBmb3IgbWFsZm9ybWVkIFVURiAqLworICAgIHVuc2lnbmVkIGMgPSBjaDsgICAgICAg ICAgICAgICAgICAgIC8qIElucHV0IGJ5dGUgKi8KKyAgICBpbnQgaGF2ZXVjczIgPSAwOworCisg ICAgaWYgKGNoIDwgMHg4MCkgeyAgICAgICAgICAgICAgICAgICAgLyogQVNDSUkgY2hhci4uLiAq LworICAgICAgICBpZiAodXRmY291bnQgPiAwKSAgICAgICAgICAgICAgIC8qIE5vdCBsZWdhbCBp biBVVEYtOCBzZXF1ZW5jZSAqLworICAgICAgICAgIHV0ZmVycm9yID0gMTsgICAgICAgICAgICAg ICAgIC8qIHNvIGZsYWcgKi8KKyAgICAgICAgaGF2ZXVjczIgPSAxOworICAgICAgICB1Y3MycmV0 dXJuID0gY2g7ICAgICAgICAgICAgICAgIC8qIGJ1dCBhbHNvIHJldHVybiBpdCAqLworICAgICAg ICB1dGZjb3VudCA9IDA7ICAgICAgICAgICAgICAgICAgIC8qIHJlc2V0IFVURi04IGNvdW50ICov CisgICAgfSBlbHNlIGlmIChjaCA8IDB4YzApIHsgICAgICAgICAgICAgLyogMHg4MCA8PSBjIDwg MHhjMC4uLiAqLworICAgICAgICBpZiAodXRmY291bnQgPCAxKSB7ICAgICAgICAgICAgIC8qIE5v dCB2YWxpZCBpbiBmaXJzdCBwb3NpdGlvbi4uLiAqLworICAgICAgICAgICAgdXRmZXJyb3IgPSAx OworICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1heWJlIHZhbGlk ICovCisgICAgICAgICAgICBpZiAodWNzMnJldHVybiA+IDB4MDNmZikgeyAgLyogVmFsdWUgd291 bGQgYmUgPiAweGZmZmYgKi8KKyAgICAgICAgICAgICAgICB1dGZlcnJvciA9IDE7ICAgICAgICAg ICAvKiBzbyBub3QgdmFsaWQgKi8KKyAgICAgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAg ICAgICAvKiBPSy4uLiAqLworICAgICAgICAgICAgICAgIHVjczJyZXR1cm4gPDw9IDY7ICAgICAg IC8qIFNoaWZ0IHJlc3VsdCAqLworICAgICAgICAgICAgICAgIHVjczJyZXR1cm4gfD0gKGNoICYg MHgzZik7IC8qIGFuZCBPUiBpbiB0aGlzIGJ5dGUgKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIGlmICgtLXV0ZmNvdW50ID09IDApCisgICAgICAgICAgICAgIGhhdmV1Y3MyID0gMTsKKyAg ICAgICAgfQorICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGMgPj0g MHhjMC4uLiAqLworICAgICAgICBpZiAodXRmY291bnQgPiAwKQorICAgICAgICAgIHV0ZmVycm9y ID0gMTsKKyAgICAgICAgaWYgKGMgPCAweGUwKSB7CisgICAgICAgICAgICB1dGZjb3VudCA9IDE7 CisgICAgICAgICAgICB1Y3MycmV0dXJuID0gKGMgJiAweDFmKTsKKyAgICAgICAgICAgIGhhdmV1 Y3MyID0gMTsKKyAgICAgICAgfSBlbHNlIGlmIChjIDwgMHhmMCkgeworICAgICAgICAgICAgdXRm Y291bnQgPSAyOworICAgICAgICAgICAgdWNzMnJldHVybiA9IChjICYgMHgwZik7CisgICAgICAg ICAgICBoYXZldWNzMiA9IDE7CisgICAgICAgIH0gZWxzZSBpZiAoYyA8IDB4ZjgpIHsKKyAgICAg ICAgICAgIHV0ZmNvdW50ID0gMzsKKyAgICAgICAgICAgIHVjczJyZXR1cm4gPSAoYyAmIDB4MDcp OworICAgICAgICAgICAgaGF2ZXVjczIgPSAxOworICAgICAgICB9IGVsc2UgaWYgKGMgPCAweGZj KSB7CisgICAgICAgICAgICB1dGZjb3VudCA9IDQ7CisgICAgICAgICAgICB1Y3MycmV0dXJuID0g KGMgJiAweDAzKTsKKyAgICAgICAgICAgIGhhdmV1Y3MyID0gMTsKKyAgICAgICAgfSBlbHNlIGlm IChjIDwgMHhmZSkgeworICAgICAgICAgICAgdXRmY291bnQgPSA1OworICAgICAgICAgICAgdWNz MnJldHVybiA9IChjICYgMHgwMSk7CisgICAgICAgICAgICBoYXZldWNzMiA9IDE7CisgICAgICAg IH0gZWxzZSB7CisgICAgICAgICAgICB1dGZlcnJvciA9IDE7CisgICAgICAgICAgICB1dGZjb3Vu dCA9IDA7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGhhdmV1Y3MyID09IDAgJiYgdXRmZXJy b3IgIT0gMCkgeworICAgICAgICBoYXZldWNzMiA9IDE7CisgICAgICAgIHVjczJyZXR1cm4gPSAw eGZmZmQ7CisgICAgICAgIHV0ZmVycm9yID0gMDsKKyAgICB9CisgICAgaWYgKGhhdmV1Y3MyKSB7 CisgICAgICAgICp1Y3MyID0gJnVjczJyZXR1cm47CisgICAgICAgIGlmICh1dGZlcnJvcikKKyAg ICAgICAgICB1dGZjb3VudCA9IDAgLSB1dGZjb3VudDsKKyAgICAgICAgcmV0dXJuKHV0ZmNvdW50 KTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAodXRmY291bnQgPT0gMCkKKyAgICAgICAgICB1 dGZjb3VudCsrOworICAgICAgICByZXR1cm4odXRmY291bnQpOworICAgIH0KKyNlbmRpZiAvKiBD T01NRU5UICovCit9CisKKy8qCisgIHVjczJfdG9fdXRmOCgpIHRha2VzIG9uZSB1Y3MyIGNoYXJh Y3RlciBhbmQgcmV0dXJucyB0aGUgbGVuZ3RoIGFuZAorICBhbmQgYSBwb2ludGVyIHRvIGFuIGFy cmF5IGNvbnRhaW5pbmcgdGhlIGVxdWl2YWxlbnQgdXRmOCBzdHJpbmcuCisgIFRoaXMgY29kZSBj YW4gZWFzaWx5IGJlIGFsdGVyZWQgdG8gc3VwcG9ydCBVQ1M0IHNpbXBseSBieSBjaGFuZ2luZwor ICB0aGUgaW5wdXQgZnJvbSBVU0hPUlQgdG8gVUxPTkcuICBSZXR1cm5zOgorICAgPjA6IE51bWJl ciBvZiBieXRlcyBpbiB0aGUgdXRmOCBzdHJpbmcuCisgICAgMDogKG9yIGxlc3MpIEVycm9yLgor Ki8KKworaW50CisjaWZkZWYgQ0tfQU5TSUMKK3VjczJfdG9fdXRmOChVU0hPUlQgdWNzMiwgQ0hB UiAqKiB1dGY4KQorI2Vsc2UKK3VjczJfdG9fdXRmOCh1Y3MyLCB1dGY4KSBVU0hPUlQgdWNzMjsg Q0hBUiAqKiB1dGY4OworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgc3RhdGljIENIQVIg dXRmOHJldHVybls4XT17MCwwLDAsMCwwLDAsMCwwfTsKKyAgICByZWdpc3RlciBDT05TVCBVTE9O RyBieXRlTWFzayA9IDB4QkY7CisgICAgcmVnaXN0ZXIgQ09OU1QgVUxPTkcgYnl0ZU1hcmsgPSAw eDgwOworICAgIGludCB1dGY4bGVuID0gMDsKKyAgICBpbnQgaSA9IDA7CisKKyAgICBpZiAodWNz MiA8IDB4ODApIHsKKyAgICAgICAgdXRmOGxlbiA9IDE7CisgICAgICAgIGRlYnVnKEYxMDEsInVj czJfdG9fdXRmOCBYMSIsIiIsdXRmOGxlbik7CisgICAgfSBlbHNlIGlmICh1Y3MyIDwgMHg4MDAp IHsKKyAgICAgICAgdXRmOGxlbiA9IDI7CisgICAgICAgIGRlYnVnKEYxMDEsInVjczJfdG9fdXRm OCBYMiIsIiIsdXRmOGxlbik7CisgICAgfSBlbHNlCisjaWZkZWYgRE9fVUNTNAorICAgICAgLyog VGhpcyBpcyBhbHdheXMgdHJ1ZSBmb3IgVUNTLTIgYnV0IHdvdWxkIGJlIG5lZWRlZCBmb3IgVUNT LTQqLworICAgICAgLyogV2hlbiB1Y3MyIGlzIFVTSE9SVCB0aGlzIGdpdmVzIGNvbXBpbGVyIHdh cm5pbmdzLiAqLworICAgICAgaWYgKHVjczIgPD0gMHhmZmZmKQorI2VuZGlmIC8qIERPX1VDUzQg Ki8KKyAgICB7CisgICAgICAgIHV0ZjhsZW4gPSAzOworICAgICAgICBkZWJ1ZyhGMTAxLCJ1Y3My X3RvX3V0ZjggWDMiLCIiLHV0ZjhsZW4pOworICAgIH0KKyNpZmRlZiBET19VQ1M0CisvKiBUaGUg Zm9sbG93aW5nIHdvdWxkIGJlIGZvciBVQ1MtNCAqLworICAgIGVsc2UgaWYgKHVjczIgPCAweDIw MDAwMCkgeworICAgICAgICB1dGY4bGVuID0gNDsKKyAgICB9IGVsc2UgaWYgKHVjczIgPCAweDQw MDAwMDApIHsKKyAgICAgICAgdXRmOGxlbiA9IDU7CisgICAgfSBlbHNlIGlmICh1Y3MyIDw9Cisj aWZkZWYgQ0tfQU5TSUMKKyAgICAgICAgICAgICAgIDB4N0ZGRkZGRkZVTCAgICAgICAgICAgICAv KiAoZG9lc24ndCByZWFsbHkgbmVlZCB0aGUgIlUiKSAqLworI2Vsc2UKKyAgICAgICAgICAgICAg IDB4N0ZGRkZGRkZMCisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKyAgICAgICAgICAgICAgICkgeyAg ICAgICAgICAgICAgICAgICAgICAvKiAzMSBiaXRzID0gbWF4IGZvciBVQ1M0ICovCisgICAgICAg IHV0ZjhsZW4gPSA2OworICAgIH0gZWxzZSB7CisgICAgICAgIHV0ZjhsZW4gPSAyOworICAgICAg ICB1Y3MyID0gMHhGRkZEOyAgICAgICAgICAgICAgICAgIC8qIFJlcGxhY2VtZW50IGZvciBpbnZh bGlkIGNoYXIgKi8KKyAgICB9CisjZW5kaWYgLyogRE9fVUNTNCAqLworICAgIGkgPSB1dGY4bGVu OyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluZGV4IGludG8gdXRmOHJldHVybiAqLworICAg IHV0ZjhyZXR1cm5baS0tXSA9IDA7ICAgICAgICAgICAgICAgIC8qIE51bGwgdGVybWluYXRlIHRo ZSBzdHJpbmcgKi8KKworICAgIHN3aXRjaCAodXRmOGxlbikgeyAgICAgICAgICAgICAgICAgIC8q IGNvZGUgZmFsbHMgdGhyb3VnaCBjYXNlcyEgKi8KKyAgICAgIGNhc2UgNjogdXRmOHJldHVybltp LS1dID0gKHVjczIgfCBieXRlTWFyaykgJiBieXRlTWFzazsgdWNzMiA+Pj0gNjsKKyAgICAgIGNh c2UgNTogdXRmOHJldHVybltpLS1dID0gKHVjczIgfCBieXRlTWFyaykgJiBieXRlTWFzazsgdWNz MiA+Pj0gNjsKKyAgICAgIGNhc2UgNDogdXRmOHJldHVybltpLS1dID0gKHVjczIgfCBieXRlTWFy aykgJiBieXRlTWFzazsgdWNzMiA+Pj0gNjsKKyAgICAgIGNhc2UgMzogdXRmOHJldHVybltpLS1d ID0gKHVjczIgfCBieXRlTWFyaykgJiBieXRlTWFzazsgdWNzMiA+Pj0gNjsKKyAgICAgIGNhc2Ug MjogdXRmOHJldHVybltpLS1dID0gKHVjczIgfCBieXRlTWFyaykgJiBieXRlTWFzazsgdWNzMiA+ Pj0gNjsKKyAgICAgIGNhc2UgMTogdXRmOHJldHVybltpLS1dID0gIHVjczIgfCBmaXJzdEJ5dGVN YXJrW3V0ZjhsZW5dOworICAgIH0KKyAgICBkZWJ1ZyhGMTExLCJ1Y3MyX3RvX3V0ZjgiLHV0Zjhy ZXR1cm4sdXRmOGxlbik7CisgICAgKnV0ZjggPSB1dGY4cmV0dXJuOworICAgIHJldHVybih1dGY4 bGVuKTsKK30KKworLyogIFVURi04IGZ1bmN0aW9ucy4uLiAgKi8KKworI2lmZGVmIENLX0FOU0lD CitleHRlcm4gaW50ICgqeHVmKShVU0hPUlQpOyAgICAgICAgICAgICAgLyogVHJhbnNsYXRpb24g ZnVuY3Rpb24gVUNTIHRvIEZDUyAqLworZXh0ZXJuIFVTSE9SVCAoKnhmdSkoQ0hBUik7ICAgICAg ICAgICAgIC8qIFRyYW5zbGF0aW9uIGZ1bmN0aW9uIEZDUyB0byBVQ1MgKi8KKyNlbHNlCitleHRl cm4gaW50ICgqeHVmKSgpOworZXh0ZXJuIFVTSE9SVCAoKnhmdSkoKTsKKyNlbmRpZiAvKiBDS19B TlNJQyAqLworCisvKiAgdSBfIHQgbyBfIGIgIC0tICBVVEYtOCB0byBCeXRlICAqLworLyoKKyAg ICBDb252ZXJ0cyBmcm9tIFVURi04IHRvIHRoZSBjdXJyZW50IHRlcm1pbmFsIG9yIGZpbGUgY2hh cmFjdGVyIHNldC4KKyAgICBDYWxsIHdpdGg6CisgICAgICBjOiBhIHNpbmdsZSBieXRlLCB3aGlj aCBpcyBwYXJ0IG9mIGEgVVRGLTggc3RyZWFtLgorICAgIFJldHVybnM6CisgICAgIC05OiBFcnJv ciwgd2l0aCBzZWNvbmQgY2hhciB0byBmb2xsb3cgKGNhbGwgdV90b19iMigpIHRvIGdldCBpdCku CisgICAgIC0yOiBVQ1MgbGluZS9wYXJhZ3JhcGggZW5kIChMUyBvciBQUykuCisgICAgIC0xOiBV VEYtOCBzdHJlYW0gaXMgaW5jb21wbGV0ZSBhbmQgbW9yZSBpbnB1dCBpcyByZXF1aXJlZC4KKyAg ICAgPj0wOiBCeXRlIHZhbHVlIG9mIHJlc3VsdCwgcG9zc2libHkgdGhlICJlcnJvciIgYnl0ZSAo ZS5nLiAnPycpLgorICAgIFJlcXVpcmVzOgorICAgICAgR2xvYmFsICgqeHVmKSgpIHRvIHBvaW50 IHRvIGEgZnVuY3Rpb24gdGhhdCB0cmFuc2xhdGVzIGZyb20gVUNTLTIgdG8KKyAgICAgIHRoZSBh cHByb3ByaWF0ZSB0ZXJtL2ZpbGUgY2hhcmFjdGVyIHNldC4KKyovCitzdGF0aWMgaW50IHNhdmVk Ynl0ZSA9IDA7CisKK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBD YWxsIGlmIHVfdG9fYigpIHJldHVybnMgLTkgKi8KK3VfdG9fYjIoKSB7CisgICAgcmV0dXJuKCh1 bnNpZ25lZCkoc2F2ZWRieXRlICYgMHhmZikpOworfQorCitpbnQgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogVVRGLTggdG8gYnl0ZSAqLworI2lmZGVmIENLX0FOU0lDCit1 X3RvX2IoQ0hBUiBjKQorI2Vsc2UKK3VfdG9fYihjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5T SUMgKi8KK3sKKyAgICBpbnQgeDsKKyAgICBVU0hPUlQgKiB1Y3MyLCB1YzsKKyAgICBpZiAoIXh1 ZikgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJZiBubyBjb252ZXJzaW9uIGZ1bmN0aW9u ICovCisgICAgICByZXR1cm4oYyk7ICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9uJ3QgY29u dmVydCAoc2hvdWxkbid0IGhhcHBlbikuICovCisgICAgeCA9IHV0ZjhfdG9fdWNzMihjLCZ1Y3My KTsgICAgICAgICAgLyogU2VuZCBmb3IgY29udmVyc2lvbiB0byBVQ1MtMiAqLworICAgIGlmICh4 ID4gMCkgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vdCBkb25lIHlldC4uLiAqLworICAg ICAgcmV0dXJuKC0xKTsKKyAgICB1YyA9ICh4IDwgMCkgPyAweGZmZmQgOiAqdWNzMjsgICAgICAv KiBEb25lLCBjaGVjayByZXN1bHQgKi8KKyAgICBpZiAodWMgPT0gMHgyMDI4IHx8IHVjID09IDB4 MjAyOSkgICAvKiBMUyBvciBQUyAqLworICAgICAgcmV0dXJuKC0yKTsKKyAgICByZXR1cm4oKHVu c2lnbmVkKSgoKCp4dWYpKHVjKSkgJiAweGZmKSk7IC8qIENvbnZlcnQgVUNTLTIgdG8gYnl0ZSAq LworfQorCisvKiAgYiBfIHQgbyBfIHUgIC0tICBCeXRlIHRvIFVURi04ICAqLworLyoKKyAgQ29u dmVydHMgYSBieXRlIGZyb20gdGhlIGN1cnJlbnQgdGVybWluYWwgb3IgZmlsZSBjaGFyYWN0ZXIg c2V0IHRvIFVURi04LgorICBDYWxsIHdpdGg6CisgICAgYy4uLi4uLi4uIFRoZSBieXRlIHRvIGJl IGNvbnZlcnRlZC4KKyAgICBidWYuLi4uLi4gUG9pbnRlciB0byBidWZmZXIgaW4gd2hpY2ggdG8g cGxhY2UgdGhlIHJlc3VsdC4KKyAgICBidWZsZW4uLi4gTGVuZ3RoIG9mIHRoZSByZXN1bHQgYnVm ZmVyLgorICAgIHNldHNpemUuLiBUaGUgc2l6ZSBvZiB0aGUgc291cmNlIGNoYXJhY3RlciBzZXQg KDEyOCBvciAyNTYpLgorICBSZXF1aXJlczoKKyAgICBHbG9iYWwgKCp4ZnUpKCkgdG8gcG9pbnQg dG8gdGhlIGZ1bmN0aW9uIHRvIGNvbnZlcnQgdGhlIGJ5dGUgdG8gVUNTLTIuCisgIFJldHVybnM6 CisgICAgLTEgaWYgdGhlIHhmdSBpcyBOVUxMOyBvdGhlcndpc2U6CisgICAgPjAgaW5kaWNhdGlu ZyB0aGUgbGVuZ3RoIChpbiBieXRlcykgb2YgdGhlIFVURi04IHN0cmluZy4KKyAgSWYgdGhlIHRy YW5zbGF0aW9uIGZhaWxzLCB0aGUgVW5pY29kZSAiUmVwbGFjZW1lbnQgQ2hhcmFjdGVyIiBpcyBy ZXR1cm5lZAorICAoMHhGRkZEIHRyYW5zbGF0ZWQgdG8gVVRGLTggPT0gMHhGRkJEKS4KKyovCitp bnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQnl0ZSB0byBVVEYtOCAq LworI2lmZGVmIENLX0FOU0lDCitiX3RvX3UoQ0hBUiBjLCBDSEFSICogYnVmLCBpbnQgYnVmbGVu LCBpbnQgc2V0c2l6ZSkKKyNlbHNlCitiX3RvX3UoYywgYnVmLCBidWZsZW4sIHNldHNpemUpIENI QVIgYywgKiBidWY7IGludCBidWZsZW4sIHNldHNpemU7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8K K3sKKyAgICBDSEFSICogdG1wID0gTlVMTDsKKyAgICBpbnQgaSwgY291bnQgPSAwOworICAgIFVT SE9SVCB1YzsKKyAgICBpZiAoIXhmdSkgeworICAgICAgICBkZWJ1ZyhGMTAwLCJiX3RvX3Ugbm8g eGZ1IiwiIiwwKTsKKyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9CisgICAgdWMgPSBjOworICAg IGlmICgoKHNldHNpemUgPiAxMjgpICYmIChjICYgMHg4MCkpIHx8IHNldHNpemUgPD0gMTI4KSB7 CisgICAgICAgIGlmICh4ZnUpICAgICAgICAgICAgICAgICAgICAgICAgLyogRkNTLXRvLVVDUyBm dW5jdGlvbiAqLworICAgICAgICAgIHVjID0gKCp4ZnUpKGMpOworICAgIH0KKyAgICBjb3VudCA9 IHVjczJfdG9fdXRmOCh1YywmdG1wKTsKKyAgICBpZiAoY291bnQgPCAwKSB7CisgICAgICAgIGJ1 ZlswXSA9IDB4ZWY7ICAgICAgICAgICAgICAgICAgLyogPT0gMHhGRkZEIGluIFVURi04ICovCisg ICAgICAgIGJ1ZlsxXSA9IDB4YmY7CisgICAgICAgIGJ1ZlsyXSA9IDB4YmQ7CisgICAgICAgIGJ1 ZlszXSA9ICdcMCc7CisgICAgICAgIHJldHVybigyKTsKKyAgICB9CisgICAgaWYgKGNvdW50ID49 IGJ1ZmxlbikgeworICAgICAgICBkZWJ1ZyhGMTAxLCJXQVJOSU5HOiBVVEY4IGJ1ZmZlciBvdmVy ZmxvdyIsIiIsY291bnQpOworICAgICAgICBjb3VudCA9IGJ1ZmxlbiAtIDE7CisgICAgfQorICAg IGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSAgICAgICAgIC8qIENvcHkgdG8gcmVzdWx0IGJ1 ZmZlciAqLworICAgICAgYnVmW2ldID0gdG1wW2ldOworICAgIGJ1ZltpXSA9ICdcMCc7CisgICAg cmV0dXJuKGNvdW50KTsKK30KKworI2lmbmRlZiBPUzIKK2ludAoraXN1bmljb2RlKCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIFRlbGxzIHdoZXRoZXIgdGhlIGhvc3Qgd2UgYXJlICov CisjaWZkZWYgQ0tfQU5TSUMgICAgICAgICAgICAgICAgICAgICAgICAgLyogcnVubmluZyBvbiBz dXBwb3J0cyBVbmljb2RlICovCisgICAgICAgICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogZGlzcGxheSAqLworI2VuZGlmIC8qIENLX0FOU0lDICovCisgICAgICAgICAgKSB7Cisj aWZkZWYgTlQKKyAgICBleHRlcm4gaW50IHR0X3VuaWNvZGU7CisjaWZkZWYgS1VJCisgICAgcmV0 dXJuKHR0X3VuaWNvZGUpOworI2Vsc2UgLyogS1VJICovCisgICAgaWYgKHR0X3VuaWNvZGUgJiYg IWlzV2luOTUoKSkKKyAgICAgIHJldHVybigxKTsKKyAgICBlbHNlCisgICAgICByZXR1cm4oMCk7 CisjZW5kaWYgLyogS1VJICovCisjZWxzZSAvKiBOVCAqLworICAgIHJldHVybigwKTsKKyNlbmRp ZiAvKiBOVCAqLworfQorI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIFVOSUNPREUgKi8KCmRp ZmYgLS1naXQgYS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrY3VuaS5o IGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2N1bmkuaApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNmRmZjliCi0tLSAvZGV2L251bGwKKysrIGIv Y2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2N1bmkuaApAQCAtMCwwICsx LDI2OCBAQAorLyogIEMgSyBDIFUgTiBJIC4gSCAgLS0gIFVuaWNvZGUvVGVybWluYWwgY2hhcmFj dGVyLXNldCB0cmFuc2xhdGlvbnMgICovCisKKy8qCisgIENvcHlyaWdodCAoQykgMTk5OSwgMjAw OSwKKyAgICBUcnVzdGVlcyBvZiBDb2x1bWJpYSBVbml2ZXJzaXR5IGluIHRoZSBDaXR5IG9mIE5l dyBZb3JrLgorICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBTZWUgdGhlIEMtS2VybWl0IENPUFlJ TkcuVFhUIGZpbGUgb3IgdGhlCisgICAgY29weXJpZ2h0IHRleHQgaW4gdGhlIGNrY21haS5jIG1v ZHVsZSBmb3IgZGlzY2xhaW1lciBhbmQgcGVybWlzc2lvbnMuCisKKyAgQXV0aG9yczoKKyAgICBG cmFuayBkYSBDcnV6IDxmZGNAY29sdW1iaWEuZWR1PgorICAgICAgVGhlIEtlcm1pdCBQcm9qZWN0 LCBDb2x1bWJpYSBVbml2ZXJzaXR5LCBOZXcgWW9yayBDaXR5LgorICAgIEplZmZyZXkgRSBBbHRt YW4gPGphbHRtYW5Ac2VjdXJlLWVuZHBvaW50cy5jb20+CisgICAgICBTZWN1cmUgRW5kcG9pbnRz IEluYy4sIE5ldyBZb3JrIENpdHkKKworKi8KKworLyogVGVybWluYWwgY2hhcmFjdGVyIHNldHMg Ki8KKworI2lmbmRlZiBDS09VTklfSAorI2RlZmluZSBDS09VTklfSAorI2lmZGVmIE9TMgorI2lm bmRlZiBDS09VTkkKKyNkZWZpbmUgQ0tPVU5JICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBV c2UgVU5JQ09ERSBmb3IgT1MvMiBmdW5jdGlvbnMgKi8KKyNlbmRpZiAvKiBDS09VTkkgKi8KKyNp ZmRlZiBLVUkKKyNkZWZpbmUgWF9DS09VTklfSU4gICAgICAgICAgICAgICAgICAgICAvKiBVc2Ug VW5pY29kZSBJbnB1dCAqLworI2RlZmluZSBDS09VTklfT1VUCisjZW5kaWYgLyogS1VJICovCisj ZW5kaWYgLyogT1MyICovCisKKy8qIFRlcm1pbmFsIENoYXJhY3RlciBTZXRzICovCisKKyNkZWZp bmUgVFhfQVNDSUkgICAgICAgIDAgICAgICAgICAgICAgICAvKiBVUyBBU0NJSSAqLworI2RlZmlu ZSBUWF9CUklUSVNIICAgICAgMSAgICAgICAgICAgICAgIC8qIEJyaXRpc2ggSVNPIDY0NiAqLwor I2RlZmluZSBUWF9DTl9GUkVOQ0ggICAgMiAgICAgICAgICAgICAgIC8qIENhbmFkaWFuIEZyZW5j aCBOUkMgKi8KKyNkZWZpbmUgVFhfQ1VCQU4gICAgICAgIDMgICAgICAgICAgICAgICAvKiBDdWJh ICovCisjZGVmaW5lIFRYX0NaRUNIICAgICAgICA0ICAgICAgICAgICAgICAgLyogQ3plY2ggUmVw dWJsaWMgKi8KKyNkZWZpbmUgVFhfREFOSVNIICAgICAgIDUgICAgICAgICAgICAgICAvKiBEZW5t YXJrIC8gTm9yd2F5IElTTyA2NDYgKi8KKyNkZWZpbmUgVFhfRFVUQ0ggICAgICAgIDYgICAgICAg ICAgICAgICAvKiBEdXRjaCBOUkMgKi8KKyNkZWZpbmUgVFhfRklOTklTSCAgICAgIDcgICAgICAg ICAgICAgICAvKiBGaW5uaXNoIE5SQyAqLworI2RlZmluZSBUWF9GUkVOQ0ggICAgICAgOCAgICAg ICAgICAgICAgIC8qIEZyZW5jaCBJU08gNjQ2ICovCisjZGVmaW5lIFRYX0dFUk1BTiAgICAgICA5 ICAgICAgICAgICAgICAgLyogR2VybWFuIElTTyA2NDYgKi8KKyNkZWZpbmUgVFhfSEU3ICAgICAg ICAgMTAgICAgICAgICAgICAgICAvKiBIZWJyZXcgNyAoREVDKSAqLworI2RlZmluZSBUWF9IVU5H QVJJQU4gICAxMSAgICAgICAgICAgICAgIC8qIEh1bmdhcmlhbiBJU08gNjQ2ICovCisjZGVmaW5l IFRYX0lDRUxBTkRJQyAgIDEyICAgICAgICAgICAgICAgLyogSWNlbGFuZGljIE5SQyAqLworI2Rl ZmluZSBUWF9JVEFMSUFOICAgICAxMyAgICAgICAgICAgICAgIC8qIEl0YWxpYW4gSVNPIDY0NiAq LworI2RlZmluZSBUWF9KMjAxUiAgICAgICAxNCAgICAgICAgICAgICAgIC8qIEpJUyAwMjAxIEph cGFuZXNlIFJvbWFuICovCisjZGVmaW5lIFRYX0oyMDFLICAgICAgIDE1ICAgICAgICAgICAgICAg LyogSklTIDAyMDEgS2F0YWthbmEgKi8KKyNkZWZpbmUgVFhfS09JNyAgICAgICAgMTYgICAgICAg ICAgICAgICAvKiBTaG9ydCBLT0kgKi8KKyNkZWZpbmUgVFhfTk9SV0VHSUFOICAgMTcgICAgICAg ICAgICAgICAvKiBEZW5tYXJrIC8gTm9yd2F5IElTTyA2NDYgKi8KKyNkZWZpbmUgVFhfUE9SVFVH VUVTRSAgMTggICAgICAgICAgICAgICAvKiBQb3J0dWd1ZXNlIElTTyA2NDYgKi8KKyNkZWZpbmUg VFhfU1BBTklTSCAgICAgMTkgICAgICAgICAgICAgICAvKiBTcGFuaXNoIElTTyA2NDYgKi8KKyNk ZWZpbmUgVFhfU1dFRElTSCAgICAgMjAgICAgICAgICAgICAgICAvKiBTd2VkaXNoIElTTyA2NDYg Ki8KKyNkZWZpbmUgVFhfU1dFXzIgICAgICAgMjEgICAgICAgICAgICAgICAvKiBTd2VkaXNoIGZv ciBuYW1lcyBJU08gNjQ2ICovCisjZGVmaW5lIFRYX1NXSVNTICAgICAgIDIyICAgICAgICAgICAg ICAgLyogU3dpc3MgTlJDICovCisjZGVmaW5lIFRYXzg4NTlfMSAgICAgIDIzICAgICAgICAgICAg ICAgLyogTGF0aW4tMSAqLworI2RlZmluZSBUWF84ODU5XzIgICAgICAyNCAgICAgICAgICAgICAg IC8qIExhdGluLTIgKi8KKyNkZWZpbmUgVFhfODg1OV8zICAgICAgMjUgICAgICAgICAgICAgICAv KiBMYXRpbi0zICovCisjZGVmaW5lIFRYXzg4NTlfNCAgICAgIDI2ICAgICAgICAgICAgICAgLyog TGF0aW4tNCAqLworI2RlZmluZSBUWF84ODU5XzUgICAgICAyNyAgICAgICAgICAgICAgIC8qIExh dGluL0N5cmlsbGljICovCisjZGVmaW5lIFRYXzg4NTlfNiAgICAgIDI4ICAgICAgICAgICAgICAg LyogTGF0aW4vQXJhYmljICovCisjZGVmaW5lIFRYXzg4NTlfNyAgICAgIDI5ICAgICAgICAgICAg ICAgLyogTGF0aW4vR3JlZWsgKi8KKyNkZWZpbmUgVFhfODg1OV84ICAgICAgMzAgICAgICAgICAg ICAgICAvKiBMYXRpbi9IZWJyZXcgKi8KKyNkZWZpbmUgVFhfODg1OV85ICAgICAgMzEgICAgICAg ICAgICAgICAvKiBMYXRpbi01ICovCisjZGVmaW5lIFRYXzg4NTlfMTAgICAgIDMyICAgICAgICAg ICAgICAgLyogTGF0aW4tNiAqLworCisjZGVmaW5lIFRYX0tPSTggICAgICAgIDMzICAgICAgICAg ICAgICAgLyogR09TVCAxOTc2OC03NCBLT0ktOCAqLworCisjZGVmaW5lIFRYX0pJUzcgICAgICAg IDM0ICAgICAgICAgICAgICAgLyogSklTLTcgKi8KKyNkZWZpbmUgVFhfU0hKSVMgICAgICAgMzUg ICAgICAgICAgICAgICAvKiBTaGlmdCBKSVMgKi8KKyNkZWZpbmUgVFhfSkVVQyAgICAgICAgMzYg ICAgICAgICAgICAgICAvKiBKYXBhbmVzZSBFVUMgKi8KKyNkZWZpbmUgVFhfSkRFQyAgICAgICAg MzcgICAgICAgICAgICAgICAvKiBKYXBhbmVzZSBERUMgS2FuamkgKi8KKworI2RlZmluZSBUWF9E RUNNQ1MgICAgICAzOCAgICAgICAgICAgICAgIC8qIERFQyBNQ1MgKi8KKyNkZWZpbmUgVFhfTkVY VCAgICAgICAgMzkgICAgICAgICAgICAgICAvKiBOZVhUICovCisjZGVmaW5lIFRYX0RHSSAgICAg ICAgIDQwICAgICAgICAgICAgICAgLyogRGF0YSBHZW5lcmFsIEludGVybmF0aW9uYWwgKi8KKyNk ZWZpbmUgVFhfTUFDTDEgICAgICAgNDEgICAgICAgICAgICAgICAvKiBNYWNpbnRvc2ggTGF0aW4t MSAqLworI2RlZmluZSBUWF9IUFI4ICAgICAgICA0MiAgICAgICAgICAgICAgIC8qIEhQIFJvbWFu IDggKi8KKworLyogQ29kZSBwYWdlcyAqLworCisjZGVmaW5lIFRYX0NQNDM3ICAgICAgIDQzICAg ICAgICAgICAgICAgLyogT3JpZ2luYWwgKi8KKyNkZWZpbmUgVFhfQ1A4NTAgICAgICAgNDQgICAg ICAgICAgICAgICAvKiBNdWx0aW5hdGlvbmFsIChXZXN0ZXJuIEV1cm9wZSkgKi8KKyNkZWZpbmUg VFhfQ1A4NTIgICAgICAgNDUgICAgICAgICAgICAgICAvKiBFYXN0ZXJuIEV1cm9wZSAqLworI2Rl ZmluZSBUWF9DUDg1NyAgICAgICA0NiAgICAgICAgICAgICAgIC8qIFR1cmtleSAqLworI2RlZmlu ZSBUWF9DUDg2MiAgICAgICA0NyAgICAgICAgICAgICAgIC8qIEhlYnJldyAqLworI2RlZmluZSBU WF9DUDg2NCAgICAgICA0OCAgICAgICAgICAgICAgIC8qIEFyYWJpYyAqLworI2RlZmluZSBUWF9D UDg2NiAgICAgICA0OSAgICAgICAgICAgICAgIC8qIEN5cmlsbGljICovCisjZGVmaW5lIFRYX0NQ ODY5ICAgICAgIDUwICAgICAgICAgICAgICAgLyogR3JlZWsgKi8KKworI2RlZmluZSBUWF9ERUNT UEVDICAgICA1MSAgICAgICAgICAgICAgIC8qIERFQyBTcGVjaWFsIEdyYXBoaWNzICovCisjZGVm aW5lIFRYX0RFQ1RFQ0ggICAgIDUyICAgICAgICAgICAgICAgLyogREVDIFRlY2huaWNhbCAqLwor I2RlZmluZSBUWF9DMFBJQ1QgICAgICA1MyAgICAgICAgICAgICAgIC8qIEMwIERpc3BsYXkgQ29u dHJvbHMgKi8KKyNkZWZpbmUgVFhfQzFQSUNUICAgICAgNTQgICAgICAgICAgICAgICAvKiBDMSBE aXNwbGF5IENvbnRyb2xzICovCisjZGVmaW5lIFRYX0lCTUMwR1JQSCAgIDU1ICAgICAgICAgICAg ICAgLyogSUJNIEMwIEdyYXBoaWNzIChzbWlsZXlzKSAqLworI2RlZmluZSBUWF9IMTlHUkFQSCAg ICA1NiAgICAgICAgICAgICAgIC8qIEhlYXRoL1plbml0aCAxOSBHcmFwaGljcyAqLworI2RlZmlu ZSBUWF9UVklHUkFQSCAgICA1NyAgICAgICAgICAgICAgIC8qIFRlbGV2aWRlbyBHcmFwaGljcyAq LworI2RlZmluZSBUWF9XWVNFNjBHX04gICA1OCAgICAgICAgICAgICAgIC8qIFd5c2UgNjAgTmF0 aXZlIE1vZGUgR3JhcGhpY3MgKi8KKyNkZWZpbmUgVFhfV1lTRTYwR18xICAgNTkgICAgICAgICAg ICAgICAvKiBXeXNlIDYwIEdyYXBoaWNzIDEgKi8KKyNkZWZpbmUgVFhfV1lTRTYwR18yICAgNjAg ICAgICAgICAgICAgICAvKiBXeXNlIDYwIEdyYXBoaWNzIDIgKi8KKyNkZWZpbmUgVFhfV1lTRTYw R18zICAgNjEgICAgICAgICAgICAgICAvKiBXeXNlIDYwIEdyYXBoaWNzIDMgKi8KKworLyogTmV3 IG9uZXMgdGhhdCBjYW1lIHRvbyBsYXRlIGZvciB0aGUgbmljZSBncm91cGluZy4uLiAqLworCisj ZGVmaW5lIFRYX0VMT1Q5MjcgICAgIDYyICAgICAgICAgICAgICAgLyogR3JlZWsgRUxPVCA5Mjcg Ki8KKyNkZWZpbmUgVFhfREdQQ0dSUEggICAgNjMgICAgICAgICAgICAgICAvKiBERyBQQyBHcmFw aGljcyAqLworI2RlZmluZSBUWF9ER0xER1JQSCAgICA2NCAgICAgICAgICAgICAgIC8qIERHIExp bmUgRHJhd2luZyBHcmFwaGljcyAqLworI2RlZmluZSBUWF9ER1dQR1JQSCAgICA2NSAgICAgICAg ICAgICAgIC8qIERHIFdvcmQgUHJvY2Vzc2luZyAoZXRjKSBHcmFwaGljcyAqLworI2RlZmluZSBU WF9IUExJTkUgICAgICA2NiAgICAgICAgICAgICAgIC8qIEhQIExpbmUgRHJhd2luZyAqLworI2Rl ZmluZSBUWF9IUE1BVEggICAgICA2NyAgICAgICAgICAgICAgIC8qIEhQIE1hdGgvVGVjaG5pY2Fs ICovCisjZGVmaW5lIFRYX1FOWEdSUEggICAgIDY4ICAgICAgICAgICAgICAgLyogUU5YIEdyYXBo aWNzICovCisKKy8qIFNpZW1lbnMgTml4ZG9yZiBjaGFyYWN0ZXIgc2V0cyAqLworCisjZGVmaW5l IFRYX1NOSUJSQUNLICAgIDY5ICAgICAgICAgICAgICAgLyogU05JIDk3ODAxIEJyYWNrZXRzICov CisjZGVmaW5lIFRYX1NOSUVVUk8gICAgIDcwICAgICAgICAgICAgICAgLyogU05JIDk3ODAxIEV1 cm8gICovCisjZGVmaW5lIFRYX1NOSUZBQ0VUICAgIDcxICAgICAgICAgICAgICAgLyogU05JIDk3 ODAxIEZhY2V0ICovCisjZGVmaW5lIFRYX1NOSUlCTSAgICAgIDcyICAgICAgICAgICAgICAgLyog U05JIDk3ODAxICJJQk0iICovCisjZGVmaW5lIFRYX1NOSUJMQU5LICAgIDczICAgICAgICAgICAg ICAgLyogU05JIDk3ODAxIEJsYW5rcyAqLworCisvKiBXaW5kb3dzIENvZGUgcGFnZXMgKi8KKwor I2RlZmluZSBUWF9DUDEyNTIgICAgICA3NCAgICAgICAgICAgICAgIC8qIExhdGluLTEgV2luZG93 cyAqLworI2RlZmluZSBUWF9DUDEyNTAgICAgICA3NSAgICAgICAgICAgICAgIC8qIExhdGluLTIg V2luZG93cyAqLworI2RlZmluZSBUWF9DUDEyNTEgICAgICA3NiAgICAgICAgICAgICAgIC8qIEN5 cmlsbGljIFdpbmRvd3MgKi8KKyNkZWZpbmUgVFhfQ1AxMjUzICAgICAgNzcgICAgICAgICAgICAg ICAvKiBHcmVlY2UgV2luZG93cyAqLworI2RlZmluZSBUWF9DUDEyNTQgICAgICA3OCAgICAgICAg ICAgICAgIC8qIFR1cmtleSBXaW5kb3dzICovCisjZGVmaW5lIFRYX0NQMTI1NyAgICAgIDc5ICAg ICAgICAgICAgICAgLyogTGF0aW4tNCBXaW5kb3dzICovCisKKyNkZWZpbmUgVFhfQ1A4NTYgICAg ICAgODAgICAgICAgICAgICAgICAvKiBCdWxnYXJpYSBDUDg1NiAoREFURUNTIEx0ZCkgKi8KKyNk ZWZpbmUgVFhfQ1A4NTUgICAgICAgODEKKyNkZWZpbmUgVFhfQ1A4MTkgICAgICAgODIgICAgICAg ICAgICAgICAvKiBTYW1lIGFzIElTTyA4ODU5LTEgKi8KKyNkZWZpbmUgVFhfQ1A5MTIgICAgICAg ODMgICAgICAgICAgICAgICAvKiBTYW1lIGFzIElTTyA4ODU5LTIgKi8KKyNkZWZpbmUgVFhfQ1A5 MTMgICAgICAgODQgICAgICAgICAgICAgICAvKiBTYW1lIGFzIElTTyA4ODU5LTMgKi8KKyNkZWZp bmUgVFhfQ1A5MTQgICAgICAgODUgICAgICAgICAgICAgICAvKiBTYW1lIGFzIElTTyA4ODU5LTQg Ki8KKyNkZWZpbmUgVFhfQ1A5MTUgICAgICAgODYgICAgICAgICAgICAgICAvKiBTYW1lIGFzIElT TyA4ODU5LTUgKi8KKyNkZWZpbmUgVFhfQ1AxMDg5ICAgICAgODcgICAgICAgICAgICAgICAvKiBT YW1lIGFzIElTTyA4ODU5LTYgKi8KKyNkZWZpbmUgVFhfQ1A4MTMgICAgICAgODggICAgICAgICAg ICAgICAvKiBTYW1lIGFzIElTTyA4ODU5LTcgKi8KKyNkZWZpbmUgVFhfQ1A5MTYgICAgICAgODkg ICAgICAgICAgICAgICAvKiBTYW1lIGFzIElTTyA4ODU5LTggKi8KKyNkZWZpbmUgVFhfQ1A5MjAg ICAgICAgOTAgICAgICAgICAgICAgICAvKiBTYW1lIGFzIElTTyA4ODU5LTkgKi8KKyNkZWZpbmUg VFhfQ1AxMDUxICAgICAgOTEgICAgICAgICAgICAgICAvKiBTYW1lIGFzIEhQIFJvbWFuIDggKi8K KyNkZWZpbmUgVFhfQ1A4NTggICAgICAgOTIgICAgICAgICAgICAgICAvKiBNdWx0aW5hdGlvbmFs IChXLiBFdXJvcGUpIHcvRXVybyAqLworI2RlZmluZSBUWF84ODU5XzE1ICAgICA5MyAgICAgICAg ICAgICAgIC8qIExhdGluLTkgKi8KKyNkZWZpbmUgVFhfQ1A5MjMgICAgICAgOTQgICAgICAgICAg ICAgICAvKiBTYW1lIGFzIElTTyA4ODU5LTE1ICovCisKKyNkZWZpbmUgVFhfRUxPVDkyOCAgICAg OTUgICAgICAgICAgICAgICAvKiBTYW1lIGFzIElTTyA4ODU5LTcgKi8KKyNkZWZpbmUgVFhfQ1Ax MDAwMCAgICAgOTYgICAgICAgICAgICAgICAvKiBTYW1lIGFzIG9yaWdpbmFsIEFwcGxlIFF1aWNr ZHJhdyAqLworI2RlZmluZSBUWF9DUDM3ICAgICAgICA5NyAgICAgICAgICAgICAgIC8qIEVCQ0RJ QyAqLworI2RlZmluZSBUWF9DUDEyNTUgICAgICA5OCAgICAgICAgICAgICAgIC8qIElzcmFlbCBX aW5kb3dzICovCisjZGVmaW5lIFRYX0NQMTI1NiAgICAgIDk5ICAgICAgICAgICAgICAgLyogQXJh YmljIFdpbmRvd3MgKi8KKyNkZWZpbmUgVFhfQ1AxMjU4ICAgICAxMDAgICAgICAgICAgICAgICAv KiBWaWV0IE5hbSBXaW5kb3dzICovCisjZGVmaW5lIFRYX01BWk9WSUEgICAgMTAxCisjZGVmaW5l IFRYX1RSQU5TUCAgICAgMTAyICAgICAgICAgICAgICAgLyogVHJhbnNwYXJlbnQgLSBubyB0cmFu c2xhdGlvbiAqLworI2RlZmluZSBUWF9IWjE1MDAgICAgIDEwMyAgICAgICAgICAgICAgIC8qIEhh emVsdGluZSAxNTAwIGdyYXBoaWNzIHNldCAqLworI2RlZmluZSBUWF9LT0k4UiAgICAgIDEwNCAg ICAgICAgICAgICAgIC8qIEtPSThSIC0gUnVzc2lhbiAqLworI2RlZmluZSBUWF9LT0k4VSAgICAg IDEwNSAgICAgICAgICAgICAgIC8qIEtPSThVIC0gVWtyYWluaWFuICovCisjZGVmaW5lIFRYX0FQ TDEgICAgICAgMTA2ICAgICAgICAgICAgICAgLyogQVBMIElTTyBJUiA2OCAqLworI2RlZmluZSBU WF9BUEwyICAgICAgIDEwNyAgICAgICAgICAgICAgIC8qIER5YWRpYyBTeXN0ZW1zIEluYyBBUEwg Ki8KKyNkZWZpbmUgVFhfQVBMMyAgICAgICAxMDggICAgICAgICAgICAgICAvKiBBUEwtUGx1cyAo QVBMLTIwMDApICovCisjZGVmaW5lIFRYX0FQTDQgICAgICAgMTA5ICAgICAgICAgICAgICAgLyog SUJNIEFQTC8yICovCisjZGVmaW5lIFRYX0FQTDUgICAgICAgMTEwICAgICAgICAgICAgICAgLyog QVBMLTI3NDEgKi8KKworI2RlZmluZSBNQVhUWFNFVFMgICAgIDExMSAgICAgICAgICAgICAgIC8q IE51bWJlciBvZiB0ZXJtaW5hbCBjaGFyYWN0ZXIgc2V0cyAqLworCisvKiBUaGUgZm9sbG93aW5n IGFyZSBub3QgaW1wbGVtZW50ZWQgeWV0ICovCisvKiBVVEYtOCBpcyBzdXBwb3J0ZWQgYXMgYSBz cGVjaWFsIG1vZGUgaW4gS2VybWl0IDk1IChzZWUgdXRmOCBmbGFnKSAqLworCisjZGVmaW5lIFRY X1VURjcgICAgICAgMTI4CisjZGVmaW5lIFRYX1VURjggICAgICAgMTI5CisKKyNkZWZpbmUgVFhf SEVYQllURVMgICAyNDIgICAgICAgICAgICAgICAvKiBIZXggYnl0ZXMgKi8KKyNkZWZpbmUgVFhf REVCVUcgICAgICAyNDMgICAgICAgICAgICAgICAvKiBEZWJ1Z2dpbmcgYnV0IG5vdCBoZXggYnl0 ZXMgKi8KKworLyogVGhlc2UgYXJlIGFjdHVhbGx5IHVzZWQgKi8KKworI2RlZmluZSBUWF9VTkRF RiAgICAgIDI1NSAgICAgICAgICAgICAgIC8qIFVua25vd24gY2hhcmFjdGVyLXNldCAqLworCisv KiBGbGFnIGJpdCB2YWx1ZXMgKi8KKworI2RlZmluZSBYMlVfU1REICAgMSAgICAgICAgICAgICAg ICAgICAgIC8qIEhhcyBzdGFuZGFyZCBJU08gNDg3MyBsYXlvdXQgKi8KKyNkZWZpbmUgWDJVX0lT TyAgIDIgICAgICAgICAgICAgICAgICAgICAvKiBJU08gc3RhbmRhcmQgY2hhcmFjdGVyIHNldCAq LworI2RlZmluZSBYMlVfSklTICAgNCAgICAgICAgICAgICAgICAgICAgIC8qIEphcGFuIEluZHVz dHJpYWwgU3RhbmRhcmQgKi8KKyNkZWZpbmUgWDJVX0NQICAgIDggICAgICAgICAgICAgICAgICAg ICAvKiBQQyBDb2RlIFBhZ2UgKi8KKyNkZWZpbmUgWDJVX0RFQyAgMTYgICAgICAgICAgICAgICAg ICAgICAvKiBERUMgUHJpdmF0ZSBjaGFyYWN0ZXIgc2V0ICovCisjZGVmaW5lIFgyVV9DWEcgIDMy ICAgICAgICAgICAgICAgICAgICAgLyogQ29udHJvbCBjb2RlcyB1c2VkIGZvciBncmFwaGljcyAq LworCitzdHJ1Y3QgeF90b191bmljb2RlIHsKKyAgICBpbnQgc2l6ZTsgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiA5NCwgOTYsIDEyOCwgb3Igb3RoZXIgKi8KKyAgICBpbnQgb2Zmc2V0OyAg ICAgICAgICAgICAgICAgICAgICAgICAvKiAwLCAzMiwgMzMsIDEyOCwgMTYwLCAuLi4gKi8KKyAg ICBpbnQgZmxhZ3M7CisgICAgaW50IGZhbWlseTsgICAgICAgICAgICAgICAgICAgICAgICAgLyog TGFuZ3VhZ2UgZmFtaWx5LCB3cml0aW5nIHN5c3RlbSAqLworICAgIGNoYXIgKiBrZXl3ZDsgICAg ICAgICAgICAgICAgICAgICAgIC8qIEtleXdvcmQgbmFtZSAqLworICAgIGNoYXIgKiBuYW1lOyAg ICAgICAgICAgICAgICAgICAgICAgIC8qIERlc2NyaXB0aXZlIG5hbWUgKi8KKyAgICBpbnQgY29k ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJU08gcmVnIG51bWJlciBpZiBTdGFuZGFy ZCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENQIG51bWJl ciBpZiBDb2RlLXBhZ2UsIGV0Yy4gKi8KKyAgICBjaGFyICogZmluYWw7ICAgICAgICAgICAgICAg ICAgICAgICAvKiBFc2Mgc2VxIGZpbmFsIGNoYXIocykgKElTTywgREVDKSAqLworICAgIHVuc2ln bmVkIHNob3J0IG1hcFsyNTZdOyAgICAgICAgICAgIC8qIE1hcHBpbmcgdGFibGUgKi8KK307CisK K2V4dGVybiBzdHJ1Y3Qga2V5dGFiIHR4cnRhYltdOworZXh0ZXJuIGludCBudHhydGFiOworCisj aWZuZGVmIE5VTEwKKyNkZWZpbmUgTlVMTCAoY2hhciAqKTAKKyNlbmRpZiAvKiBOVUxMICovCisK KyNpZm5kZWYgVVNIT1JUCisjZGVmaW5lIFVTSE9SVCB1bnNpZ25lZCBzaG9ydAorI2VuZGlmIC8q IFVTSE9SVCAqLworCisjaWZuZGVmIFVMT05HCisjZGVmaW5lIFVMT05HIHVuc2lnbmVkIGxvbmcK KyNlbmRpZiAvKiBVTE9ORyAqLworCisjaWZuZGVmIENIQVIKKyNkZWZpbmUgQ0hBUiB1bnNpZ25l ZCBjaGFyCisjZW5kaWYgLyogQ0hBUiAqLworCisjaWZkZWYgQ0tfQU5TSUMKK2V4dGVybiBVU0hP UlQgKCp4bF91W01BWFRYU0VUUysxXSkoQ0hBUik7IC8qIEJsYWgtdG8tVW5pY29kZSBmdW5jdGlv bnMgKi8KK2V4dGVybiBpbnQgKCp4bF90eFtNQVhUWFNFVFMrMV0pKFVTSE9SVCk7IC8qIFVuaWNv ZGUtdG8tQmxhaCBmdW5jdGlvbnMgKi8KKyNlbHNlCitleHRlcm4gVVNIT1JUICgqeGxfdVtNQVhU WFNFVFMrMV0pKCk7CitleHRlcm4gaW50ICgqeGxfdHhbTUFYVFhTRVRTKzFdKSgpOworI2VuZGlm IC8qIENLX0FOU0lDICovCitleHRlcm4gc3RydWN0IHhfdG9fdW5pY29kZSAqIHR4cmluZm9bTUFY VFhTRVRTKzFdOworCitfUFJPVE9UWVAoaW50IGlzdW5pY29kZSwgKHZvaWQpKTsKK19QUk9UT1RZ UChpbnQgdXRmOF90b191Y3MyLCAoQ0hBUiwgVVNIT1JUICoqKSk7CitfUFJPVE9UWVAoaW50IHVj czJfdG9fdXRmOCwgKFVTSE9SVCwgQ0hBUiAqKikpOworX1BST1RPVFlQKGludCB0eF9jcHN1Yiwg KFVTSE9SVCkpOworX1BST1RPVFlQKGludCB1X3RvX2IsIChDSEFSKSApOworX1BST1RPVFlQKGlu dCB1X3RvX2IyLCAodm9pZCkgKTsKK19QUk9UT1RZUChpbnQgYl90b191LCAoQ0hBUiwgQ0hBUiAq LCBpbnQsIGludCkgKTsKKworI2lmZGVmIEtBTkpJCitfUFJPVE9UWVAoVVNIT1JUIHNqX3RvX3Vu LCAoVVNIT1JUKSApOyAgLyogU2hpZnQtSklTIHRvIFVuaWNvZGUgKi8KK19QUk9UT1RZUChVU0hP UlQgdW5fdG9fc2osIChVU0hPUlQpICk7ICAvKiBVbmljb2RlIHRvIFNoaWZ0LUpJUyAqLworI2Vu ZGlmIC8qIEtBTkpJICovCisKKyNpZmRlZiBPUzIKKyNpZmRlZiBOVAorX2lubGluZQorI2Vsc2UK K19JbmxpbmUKKyNlbmRpZiAvKiBOVCAqLworaW50Citpc3VuaWNvZGUoCisjaWZkZWYgQ0tfQU5T SUMKKyAgICAgICAgICB2b2lkCisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKyAgICAgICAgICApIHsK KyAgICBleHRlcm4gaW50IHR0X3VuaWNvZGU7CisjaWZkZWYgTlQKKyNpZmRlZiBLVUkKKyAgICBy ZXR1cm4odHRfdW5pY29kZSk7CisjZWxzZSAvKiBLVUkgKi8KKyAgICBpZiAodHRfdW5pY29kZSAm JiAhaXNXaW45NSgpKQorICAgICAgcmV0dXJuKDEpOworICAgIGVsc2UKKyAgICAgIHJldHVybigw KTsKKyNlbmRpZiAvKiBLVUkgKi8KKyNlbHNlIC8qIE5UICovCisgICAgcmV0dXJuKDApOworI2Vu ZGlmIC8qIE5UICovCit9CisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogQ0tPVU5JX0ggKi8K CmRpZmYgLS1naXQgYS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrY3hs YS5oIGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2N4bGEuaApuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDAzYzgxCi0tLSAvZGV2L251bGwKKysr IGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2N4bGEuaApAQCAtMCww ICsxLDMzNyBAQAorLyoKKyAgRmlsZSBDS0NYTEEuSAorCisgIFN5c3RlbS1pbmRlcGVuZGVudCBj aGFyYWN0ZXItc2V0IHRyYW5zbGF0aW9uIGhlYWRlciBmaWxlIGZvciBDLUtlcm1pdC4KKyovCisK Ky8qCisgIEF1dGhvcjogRnJhbmsgZGEgQ3J1eiA8ZmRjQGNvbHVtYmlhLmVkdT4sCisgIFRoZSBL ZXJtaXQgUHJvamVjdCAtIENvbHVtYmlhIFVuaXZlcnNpdHksIE5ldyBZb3JrIENpdHkuCisKKyAg Q29weXJpZ2h0IChDKSAxOTg1LCAyMDA5LAorICAgIFRydXN0ZWVzIG9mIENvbHVtYmlhIFVuaXZl cnNpdHkgaW4gdGhlIENpdHkgb2YgTmV3IFlvcmsuCisgICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4g IFNlZSB0aGUgQy1LZXJtaXQgQ09QWUlORy5UWFQgZmlsZSBvciB0aGUKKyAgICBjb3B5cmlnaHQg dGV4dCBpbiB0aGUgY2tjbWFpLmMgbW9kdWxlIGZvciBkaXNjbGFpbWVyIGFuZCBwZXJtaXNzaW9u cy4KKyovCisvKgorICBOT1RFOgorICBJU08gMjA0IGlzIExhdGluLTEgKyBFdXJvLgorICBJU08g MjA1IGlzIExhdGluLTQgKyBFdXJvLgorICBJU08gMjA2IGlzIExhdGluLTcgKyBFdXJvLgorKi8K KyNpZm5kZWYgQ0tDWExBX0ggICAgICAgICAgICAgICAgICAgICAgICAvKiBHdWFyZCBhZ2FpbnN0 IG11bHRpcGxlIGluY2x1c2lvbiAqLworI2RlZmluZSBDS0NYTEFfSAorCisjaWZuZGVmIEtBTkpJ ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU3lzdGVtcyBzdXBwb3J0aW5nIEthbmppICov CisjaWZkZWYgT1MyCisjZGVmaW5lIEtBTkpJCisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyog S0FOSkkgKi8KKworI2lmZGVmIE5PS0FOSkkgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEV4 Y2VwdCBpZiBOT0tBTkpJIGlzIGRlZmluZWQuICovCisjaWZkZWYgS0FOSkkKKyN1bmRlZiBLQU5K SQorI2VuZGlmIC8qIEtBTkpJICovCisjZW5kaWYgLyogTk9LQU5KSSAqLworCisjaWZuZGVmIE5P VU5JQ09ERQorI2lmbmRlZiBVTklDT0RFICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVuaWNv ZGUgc3VwcG9ydCAqLworI2lmZGVmIE9TMk9SVU5JWCAgICAgICAgICAgICAgICAgICAgICAgIC8q IE9ubHkgZm9yIEs5NSwgVU5JWCwgVk1TLC4uLiAqLworI2RlZmluZSBVTklDT0RFCisjZWxzZQor I2lmZGVmIFZNUworI2RlZmluZSBVTklDT0RFCisjZW5kaWYgLyogVk1TICovCisjZW5kaWYgLyog T1MyT1JVTklYICovCisjZW5kaWYgLyogVU5JQ09ERSAqLworI2VuZGlmIC8qIE5PVU5JQ09ERSAq LworCisjZGVmaW5lIFhMQV9OT05FICAgIDAgICAgICAgICAgICAgICAgICAgLyogVHJhbnNsYXRp b24gdHlwZXMgLSBub25lICovCisjZGVmaW5lIFhMQV9CWVRFICAgIDEgICAgICAgICAgICAgICAg ICAgLyogQnl0ZS1mb3ItYnl0ZSAqLworI2RlZmluZSBYTEFfSkFQQU4gICAyICAgICAgICAgICAg ICAgICAgIC8qIEphcGFuZXNlICovCisjZGVmaW5lIFhMQV9VTklDT0RFIDMgICAgICAgICAgICAg ICAgICAgLyogVW5pY29kZSAqLworCisjaWZuZGVmIFVOSU9SS0FOSkkgICAgICAgICAgICAgICAg ICAgICAgLyogVW5pY29kZSBPUiBLYW5qaSAqLworI2lmZGVmIFVOSUNPREUgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIGkuZS4gc29tZSBzdXBwb3J0IGZvciAqLworI2RlZmluZSBVTklPUktB TkpJICAgICAgICAgICAgICAgICAgICAgIC8qIG11bHRpYnl0ZSBjaGFyYWN0ZXIgc2V0cyAqLwor I2VuZGlmIC8qIFVOSUNPREUgKi8KKyNpZmRlZiBLQU5KSQorI2RlZmluZSBVTklPUktBTkpJCisj ZW5kaWYgLyogS0FOSkkgKi8KKyNlbmRpZiAvKiBVTklPUktBTkpJICovCisvKgorICAgRGlzYWJs ZSBhbGwgc3VwcG9ydCBmb3IgYWxsIGNsYXNzZXMgb2YgY2hhcmFjdGVyIHNldHMKKyAgIGlmIE5P Q1NFVFMgaXMgZGVmaW5lZC4KKyovCisjaWZkZWYgTk9DU0VUUworCisjaWZkZWYgQ0tPVU5JCisj dW5kZWYgQ0tPVU5JCisjZW5kaWYgLyogQ0tPVU5JICovCisjaWZkZWYgS0FOSkkKKyN1bmRlZiBL QU5KSQorI2VuZGlmIC8qIEtBTkpJICovCisjaWZkZWYgQ1lSSUxMSUMKKyN1bmRlZiBDWVJJTExJ QworI2VuZGlmIC8qIENZUklMTElDICovCisjaWZkZWYgTEFUSU4yCisjdW5kZWYgTEFUSU4yCisj ZW5kaWYgLyogTEFUSU4yICovCisjaWZkZWYgSEVCUkVXCisjdW5kZWYgSEVCUkVXCisjZW5kaWYg LyogSEVCUkVXICovCisjaWZkZWYgVU5JQ09ERQorI3VuZGVmIFVOSUNPREUKKyNlbmRpZiAvKiBV TklDT0RFICovCisjaWZuZGVmIE5PVU5JQ09ERQorI2RlZmluZSBOT1VOSUNPREUKKyNlbmRpZgkv KiBOT1VOSUNPREUgKi8KKworI2Vsc2UgLyogTm90IE5PQ1NFVFMgLSBSZXN0IG9mIHRoaXMgZmls ZS4uLiAqLworCisjaWZkZWYgTk9VTklDT0RFICAgICAgICAgICAgICAgICAgICAgICAgLyogVW5p Y29kZSAqLworI2lmZGVmIFVOSUNPREUKKyN1bmRlZiBVTklDT0RFCisjZW5kaWYgLyogVU5JQ09E RSAqLworI2VuZGlmIC8qIE5PVU5JQ09ERSAqLworCisjaWZkZWYgVU5JQ09ERQorI2lmZGVmIE9T MgorI2lmbmRlZiBDS09VTkkKKyNkZWZpbmUgQ0tPVU5JICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBTcGVjaWFsIFVuaWNvZGUgZmVhdHVyZXMgZm9yIEs5NSAqLworI2VuZGlmIC8qIENLT1VO SSAqLworI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIFVOSUNPREUgKi8KKworI2lmbmRlZiBP UzIKKyNpZmRlZiBDS09VTkkKKyN1bmRlZiBDS09VTkkKKyNlbmRpZiAvKiBDS09VTkkgKi8KKyNl bmRpZiAvKiBPUzIgKi8KKworI2lmbmRlZiBOT0xBVElOMiAgICAgICAgICAgICAgICAgICAgICAg IC8qIElmIHRoZXkgZGlkbid0IHNheSAibm8gTGF0aW4tMiIgKi8KKyNpZm5kZWYgTEFUSU4yICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBUaGVuIGlmIExBVElOMiBpc24ndCBhbHJlYWR5ICov CisjZGVmaW5lIExBVElOMiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGVmaW5lZCwgZGVm aW5lIGl0LiAqLworI2VuZGlmIC8qIExBVElOMiAqLworI2VuZGlmIC8qIE5PTEFUSU4yICovCisK KyNpZmRlZiBOT0NZUklMTElDICAgICAgICAgICAgICAgICAgICAgICAvKiAoc3BlbGxpbmcgdmFy aWFudC4uLikgKi8KKyNpZm5kZWYgTk9DWVJJTAorI2RlZmluZSBOT0NZUklMCisjZW5kaWYgLyog Tk9DWVJJTCAqLworI2VuZGlmIC8qIE5PQ1lSSUxMSUMgKi8KKworI2lmbmRlZiBOT0NZUklMICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIElmIHRoZXkgZGlkbid0IHNheSAibm8gQ3lyaWxsaWMi ICovCisjaWZuZGVmIENZUklMTElDICAgICAgICAgICAgICAgICAgICAgICAgLyogVGhlbiBpZiBD WVJJTExJQyBpc24ndCBhbHJlYWR5ICovCisjZGVmaW5lIENZUklMTElDICAgICAgICAgICAgICAg ICAgICAgICAgLyogZGVmaW5lZCwgZGVmaW5lIGl0LiAqLworI2VuZGlmIC8qIENZUklMTElDICov CisjZW5kaWYgLyogTk9DWVJJTCAqLworCisjaWZuZGVmIE5PSEVCUkVXICAgICAgICAgICAgICAg ICAgICAgICAgLyogSWYgdGhleSBkaWRuJ3Qgc2F5ICJubyBIZWJyZXciICovCisjaWZuZGVmIEhF QlJFVyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVGhlbiBpZiBIRUJSRVcgaXNuJ3QgYWxy ZWFkeSAqLworI2RlZmluZSBIRUJSRVcgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRlZmlu ZWQsIGRlZmluZSBpdC4gKi8KKyNlbmRpZiAvKiBIRUJSRVcgKi8KKyNlbmRpZiAvKiBOT0hFQlJF VyAqLworCisjaWZuZGVmIE5PR1JFRUsgICAgICAgICAgICAgICAgICAgICAgICAgLyogSWYgbm90 IG5vIEdyZWVrICovCisjaWZuZGVmIEdSRUVLICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog dGhlbiBpZiBHUkVFSyBpc24ndCBhbHJlYWR5ICovCisjZGVmaW5lIEdSRUVLICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogZGVmaW5lZCwgZGVmaW5lIGl0LiAqLworI2VuZGlmIC8qIEdSRUVL ICovCisjZW5kaWYgLyogTk9HUkVFSyAqLworCisjaWZuZGVmIE5PS0FOSkkgICAgICAgICAgICAg ICAgICAgICAgICAgLyogSWYgbm90IG5vIEthbmppICovCisjaWZuZGVmIEtBTkpJICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogdGhlbiBpZiBLQU5KSSBpc24ndCBhbHJlYWR5ICovCisjZGVm aW5lIEtBTkpJICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGVmaW5lZCwgZGVmaW5lIGl0 LiAqLworI2VuZGlmIC8qIEtBTkpJICovCisjZW5kaWYgLyogTk9LQU5KSSAqLworCisvKiBGaWxl IGNrY3hsYS5oIC0tIENoYXJhY3Rlci1zZXQtcmVsYXRlZCBkZWZpbml0aW9ucywgc3lzdGVtIGlu ZGVwZW5kZW50ICovCisKKy8qIENvZGVzIGZvciBLZXJtaXQgVHJhbnNmZXIgU3ludGF4IExldmVs IChvYnNvbGV0ZSkgKi8KKworI2RlZmluZSBUU19MMCAwICAgICAgICAgIC8qIExldmVsIDAgKFRy YW5zcGFyZW50KSAqLworI2RlZmluZSBUU19MMSAxICAgICAgICAgIC8qIExldmVsIDEgKG9uZSBz dGFuZGFyZCBjaGFyYWN0ZXIgc2V0KSAqLworI2RlZmluZSBUU19MMiAyICAgICAgICAgIC8qIExl dmVsIDIgKG11bHRpcGxlIGNoYXJhY3RlciBzZXRzIGluIHNhbWUgZmlsZSkgKi8KKworI2RlZmlu ZSBVTksgNjMgICAgICAgICAgIC8qIFN5bWJvbCB0byB1c2UgZm9yIHVua25vd24gY2hhcmFjdGVy ICg2MyA9ID8pICovCisKKy8qCisgIENvZGVzIGZvciB0aGUgYmFzZSBhbHBoYWJldCBvZiBhIGdp dmVuIGNoYXJhY3RlciBzZXQuCisgIFRoZXNlIGFyZSBhc3NpZ25lZCBpbiByb3VnaGx5IElTTyA4 ODU5IG9yZGVyLgorICAoRWFjaCBpcyBhc3N1bWVkIHRvIGluY2x1ZGUgQVNDSUkvUm9tYW4uKQor Ki8KKyNkZWZpbmUgQUxfVU5JViAgICAwICAgICAgICAgICAgICAgICAgICAvKiBVbml2ZXJzYWwg KGxpa2UgSVNPIDEwNjQ2KSAqLworI2RlZmluZSBBTF9ST01BTiAgIDEgICAgICAgICAgICAgICAg ICAgIC8qIFJvbWFuIChMYXRpbikgYWxwaGFiZXQgKi8KKyNkZWZpbmUgQUxfQ1lSSUwgICAyICAg ICAgICAgICAgICAgICAgICAvKiBDeXJpbGxpYyBhbHBoYWJldCAqLworI2RlZmluZSBBTF9BUkFC SUMgIDMgICAgICAgICAgICAgICAgICAgIC8qIEFyYWJpYyAqLworI2RlZmluZSBBTF9HUkVFSyAg IDQgICAgICAgICAgICAgICAgICAgIC8qIEdyZWVrICovCisjZGVmaW5lIEFMX0hFQlJFVyAgNSAg ICAgICAgICAgICAgICAgICAgLyogSGVicmV3ICovCisjZGVmaW5lIEFMX0tBTkEgICAgNiAgICAg ICAgICAgICAgICAgICAgLyogSmFwYW5lc2UgS2F0YWthbmEgKi8KKyNkZWZpbmUgQUxfSkFQQU4g ICA3ICAgICAgICAgICAgICAgICAgICAvKiBKYXBhbmVzZSBLYXRha2FuYStLYW5qaSBpZGVvZ3Jh bXMgKi8KKyNkZWZpbmUgQUxfSEFOICAgICA4ICAgICAgICAgICAgICAgICAgICAvKiBDaGluZXNl L0phcGFuZXNlL0tvcmVhbiBpZGVvZ3JhbXMgKi8KKyNkZWZpbmUgQUxfSU5ESUEgICA5ICAgICAg ICAgICAgICAgICAgICAvKiBJbmRpYW4gc2NyaXB0cyAoSVNDSUkpICovCisjZGVmaW5lIEFMX1ZJ RVQgICAxMCAgICAgICAgICAgICAgICAgICAgLyogVmlldG5hbWVzZSAoVklTQ0lJKSAqLworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFkZCBtb3JlIGhlcmUuLi4g Ki8KKyNkZWZpbmUgQUxfVU5LICAgOTk5ICAgICAgICAgICAgICAgICAgICAvKiBVbmtub3duICh0 cmFuc3BhcmVudCkgKi8KKworLyogQ29kZXMgZm9yIGxhbmd1YWdlcyAqLworLyoKKyAgTk9URTog SXQgd291bGQgcGVyaGFwcyBiZSBiZXR0ZXIgdG8gdXNlIElTTyA2MzktMTk4OCAyLWxldHRlciAi Q29kZXMgZm9yCisgIFJlcHJlc2VudGF0aW9uIG9mIE5hbWVzIG9mIExhbmd1YWdlcyIgaGVyZSwg c2hvd24gaW4gdGhlIGNvbW1lbnRzIGJlbG93LgorKi8KKyNkZWZpbmUgTF9BU0NJSSAgICAgICAw ICAvKiBFTiBBU0NJSSwgRW5nbGlzaCAqLworI2RlZmluZSBMX1VTQVNDSUkgICAgIDAgIC8qIEVO IEFTQ0lJLCBFbmdsaXNoICovCisjZGVmaW5lIExfRFVUQ0ggICAgICAgMSAgLyogTkwgRHV0Y2gg Ki8KKyNkZWZpbmUgTF9GSU5OSVNIICAgICAyICAvKiBGSSBGaW5uaXNoICovCisjZGVmaW5lIExf RlJFTkNIICAgICAgMyAgLyogRlIgRnJlbmNoICovCisjZGVmaW5lIExfR0VSTUFOICAgICAgNCAg LyogREUgR2VybWFuICovCisjZGVmaW5lIExfSFVOR0FSSUFOICAgNSAgLyogSFUgSHVuZ2FyaWFu ICovCisjZGVmaW5lIExfSVRBTElBTiAgICAgNiAgLyogSVQgSXRhbGlhbiAqLworI2RlZmluZSBM X05PUldFR0lBTiAgIDcgIC8qIE5PIE5vcndlZ2lhbiAqLworI2RlZmluZSBMX1BPUlRVR1VFU0Ug IDggIC8qIFBUIFBvcnR1Z3Vlc2UgKi8KKyNkZWZpbmUgTF9TUEFOSVNIICAgICA5ICAvKiBFUyBT cGFuaXNoICovCisjZGVmaW5lIExfU1dFRElTSCAgICAxMCAgLyogU1YgU3dlZGlzaCAqLworI2Rl ZmluZSBMX1NXSVNTICAgICAgMTEgIC8qIFJNIFN3aXNzIChSaGFldG8tUm9tYW5jZSkgKi8KKyNk ZWZpbmUgTF9EQU5JU0ggICAgIDEyICAvKiBEQSBEYW5pc2ggKi8KKyNkZWZpbmUgTF9JQ0VMQU5E SUMgIDEzICAvKiBJUyBJY2VsYW5kaWMgKi8KKyNkZWZpbmUgTF9SVVNTSUFOICAgIDE0ICAvKiBS VSBSdXNzaWFuICovCisjZGVmaW5lIExfSkFQQU5FU0UgICAxNSAgLyogSkEgSmFwYW5lc2UgKi8K KyNkZWZpbmUgTF9IRUJSRVcgICAgIDE2ICAvKiBJVyBIZWJyZXcgKi8KKyNkZWZpbmUgTF9HUkVF SyAgICAgIDE3ICAvKiAgICBHcmVlayAqLworCisjZGVmaW5lIE1BWExBTkcgICAgICAxNyAgLyog TnVtYmVyIG9mIGxhbmd1YWdlcyAqLworCisvKgorICBGaWxlIGNoYXJhY3Rlci1zZXRzIGFyZSBk ZWZpbmVkIGluIHRoZSBzeXN0ZW0tc3BlY2lmaWMgY2s/eGxhLmggZmlsZSwKKyAgZXhjZXB0IGZv ciB0aGUgZm9sbG93aW5nIG9uZXMsIHdoaWNoIG11c3QgYmUgYXZhaWxhYmxlIHRvIGFsbCB2ZXJz aW9uczoKKyovCisjZGVmaW5lIEZDX1RSQU5TUCAgMjU0ICAgICAgICAgICAgICAgICAgLyogVHJh bnNwYXJlbnQgKi8KKyNkZWZpbmUgRkNfVU5ERUYgICAyNTUgICAgICAgICAgICAgICAgICAvKiBV bmRlZmluZWQgICAqLworLyoKKyAgRGVzaWduYXRvcnMgZm9yIEtlcm1pdCdzIHRyYW5zZmVyIGNo YXJhY3RlciBzZXRzLiAgVGhlc2UgYXJlIGFsbCBzdGFuZGFyZAorICBzZXRzLCBvciBiYXNlZCBv biB0aGVtLiAgU3ltYm9scyBtdXN0IGJlIHVuaXF1ZSBpbiB0aGUgZmlyc3QgOCBjaGFyYWN0ZXJz LAorICBiZWNhdXNlIHNvbWUgQyBwcmVwcm9jZXNzb3JzIGhhdmUgdGhpcyBsaW1pdC4KKyovCisv KiBMSVNUMSAqLworI2RlZmluZSBUQ19UUkFOU1AgIDAgICAvKiBUcmFuc3BhcmVudCwgbm8gY2hh cmFjdGVyIHRyYW5zbGF0aW9uICovCisjZGVmaW5lIFRDX1VTQVNDSUkgMSAgIC8qIElTTyA2NDYg SVJWIC8gVVMgNy1iaXQgQVNDSUkgKi8KKyNkZWZpbmUgVENfMUxBVElOICAyICAgLyogSVNPIDg4 NTktMSwgTGF0aW4gQWxwaGFiZXQgMSAqLworI2RlZmluZSBUQ18yTEFUSU4gIDMgICAvKiBJU08g ODg1OS0yLCBMYXRpbiBBbHBoYWJldCAyICovCisjZGVmaW5lIFRDX0NZUklMTCAgNCAgIC8qIElT TyA4ODU5LTUsIExhdGluL0N5cmlsbGljICovCisjZGVmaW5lIFRDX0pFVUMgICAgNSAgIC8qIEph cGFuZXNlIEVVQyA9IEpJUyAwMjAxKzAyMDIrMDIwOCAqLworI2RlZmluZSBUQ19IRUJSRVcgIDYg ICAvKiBJU08gODg1OS04LCBMYXRpbi9IZWJyZXcgKi8KKyNkZWZpbmUgVENfR1JFRUsgICA3ICAg LyogSVNPIDg4NTktNywgTGF0aW4vR3JlZWsgKi8KKyNkZWZpbmUgVENfOUxBVElOICA4ICAgLyog SVNPIDg4NTktMTUgTGF0aW4gQWxwaGFiZXQgOSAod2l0aCBFdXJvKSAqLworI2RlZmluZSBUQ19V Q1MyICAgIDkgICAvKiBJU08gMTA2NDYgLyBVbmljb2RlIFVDUy0yICovCisjZGVmaW5lIFRDX1VU RjggICAxMCAgIC8qIElTTyAxMDY0NiAvIFVuaWNvZGUgVVRGLTggKi8KKworI2RlZmluZSBNQVhU Q1NFVFMgMTAgICAvKiBIaWdoZXN0IFRyYW5zZmVyIENoYXJhY3RlciBTZXQgTnVtYmVyICovCisK KyNpZmRlZiBDT01NRU5UCisvKgorICBOb3QgdXNlZCBhbmQgcHJvYmFibHkgd29uJ3QgYmUgZHVl IHRvIElTTy0xMDY0NiAvIFVuaWNvZGUuCisqLworI2RlZmluZSBUQ18zTEFUSU4gMTEgIC8qIElT TyA4ODU5LTMsIExhdGluLTMgKi8KKyNkZWZpbmUgVENfNExBVElOIDEyICAgLyogSVNPIDg4NTkt NCwgTGF0aW4tNCAqLworI2RlZmluZSBUQ181TEFUSU4gMTMgIC8qIElTTyA4ODU5LTksIExhdGlu LTUgKi8KKyNkZWZpbmUgVENfQVJBQklDIDE0ICAvKiBJU08tODg1OS02LCBMYXRpbi9BcmFiaWMg Ki8KKyNkZWZpbmUgVENfSklTMjA4IDE1ICAvKiBKYXBhbmVzZSBKSVMgWCAwMjA4IG11bHRpYnl0 ZSBzZXQgKi8KKyNkZWZpbmUgVENfQ0hJTkVTIDE2ICAvKiBDaGluZXNlIFN0YW5kYXJkIEdCIDIz MTItODAgKi8KKyNkZWZpbmUgVENfS09SRUFOIDE3ICAvKiBLb3JlYW4gS1MgQyA1NjAxLTE5ODcg Ki8KKyNkZWZpbmUgVENfSVNDSUkgIDE4ICAvKiBJbmRpYW4gc3RhbmRhcmQgY29kZSBmb3IgaWku Li4gKi8KKyNkZWZpbmUgVENfVlNDSUkgIDE5ICAvKiBWaWV0bmFtIHN0YW5kYXJkIGNvZGUgZm9y IGlpLi4uICovCisvKiBldGMuLi4gKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisKKy8qIFN0cnVj dHVyZSBmb3IgY2hhcmFjdGVyLXNldCBpbmZvcm1hdGlvbiAqLworCitzdHJ1Y3QgY3NpbmZvIHsK KyAgICBjaGFyICpuYW1lOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEZXNjcmlwdGl2ZSBu YW1lIG9mIGNoYXJhY3RlciBzZXQgKi8KKyAgICBpbnQgc2l6ZTsgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBTaXplIChlLmcuIDEyOCwgMjU2LCAxNjM4NCkgKi8KKyAgICBpbnQgY29kZTsg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBMaWtlIFRDXzFMQVRJTiwgZXRjLiAgKi8KKyAg ICBjaGFyICpkZXNpZ25hdG9yOyAgICAgICAgICAgICAgICAgICAvKiBEZXNpZ25hdG9yLCBsaWtl IEkyLzEwMCA9IExhdGluLTEgKi8KKyAgICBpbnQgYWxwaGFiZXQ7ICAgICAgICAgICAgICAgICAg ICAgICAvKiBCYXNlIGFscGhhYmV0ICovCisgICAgY2hhciAqa2V5d29yZDsgICAgICAgICAgICAg ICAgICAgICAgLyogS2V5d29yZCBmb3IgdGhpcyBjaGFyYWN0ZXItc2V0ICovCit9OworCisvKiBT dHJ1Y3R1cmUgZm9yIGxhbmd1YWdlIGluZm9ybWF0aW9uICovCisKK3N0cnVjdCBsYW5naW5mbyB7 CisgICAgaW50IGlkOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTGFuZ3VhZ2UgSUQg Y29kZSAoTF93aGF0ZXZlcikgKi8KKyAgICBpbnQgZmM7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBGaWxlIGNoYXJhY3RlciBzZXQgdG8gdXNlICovCisgICAgaW50IHRjOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogVHJhbnNmZXIgY2hhcmFjdGVyIHNldCB0byB1c2UgKi8K KyAgICBjaGFyICpkZXNjcmlwdGlvbjsgICAgICAgICAgICAgICAgICAvKiBEZXNjcmlwdGlvbiBv ZiBsYW5ndWFnZSAqLworfTsKKworLyogTm93IHRha2UgaW4gdGhlIHN5c3RlbS1zcGVjaWZpYyBk ZWZpbml0aW9ucyAqLworCisjaWZkZWYgVU5JWAorI2luY2x1ZGUgImNrdXhsYS5oIgorI2VuZGlm IC8qIFVOSVggKi8KKworI2lmZGVmIE9TSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IE9TLTkgKi8KKyNpbmNsdWRlICJja3V4bGEuaCIKKyNlbmRpZiAvKiBPUy05ICovCisKKyNpZmRl ZiBWTVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBWQVgvVk1TICovCisjaW5jbHVk ZSAiY2t1eGxhLmgiCisjZW5kaWYgLyogVk1TICovCisKKyNpZmRlZiBHRU1ET1MgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBBdGFyaSBTVCAqLworI2luY2x1ZGUgImNrdXhsYS5oIgorI2Vu ZGlmIC8qIEdFTURPUyAqLworCisjaWZkZWYgTUFDICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogTWFjaW50b3NoICovCisjaW5jbHVkZSAiY2tteGxhLmgiCisjZW5kaWYgLyogTUFDICov CisKKyNpZmRlZiBPUzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBPUy8yICovCisj aW5jbHVkZSAiY2t1eGxhLmgiICAgICAgICAgICAgICAgICAgICAgLyogVXNlcyBiaWcgVU5JWCB2 ZXJzaW9uICovCisjZW5kaWYgLyogT1MyICovCisKKyNpZmRlZiBBTUlHQSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBDb21tb2RvcmUgQW1pZ2EgKi8KKyNpbmNsdWRlICJja3V4bGEuaCIK KyNlbmRpZiAvKiBBTUlHQSAqLworCisjaWZkZWYgZGF0YWdlbmVyYWwgICAgICAgICAgICAgICAg ICAgICAgLyogRGF0YSBHZW5lcmFsIE1WIEFPUy9WUyAqLworI2luY2x1ZGUgImNrdXhsYS5oIgor I2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCisKKyNpZmRlZiBTVFJBVFVTICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBTdHJhdHVzIENvbXB1dGVyLCBJbmMuIFZPUyAqLworI2luY2x1ZGUgImNr dXhsYS5oIgorI2VuZGlmIC8qIFNUUkFUVVMgKi8KKworI2lmZGVmIFVOSUNPREUKKyNpbmNsdWRl ICJja2N1bmkuaCIgICAgICAgICAgICAgICAgICAgICAvKiBVbmljb2RlICovCisjZW5kaWYgLyog VU5JQ09ERSAqLworCisjaWZkZWYgS0FOSkkKKyNkZWZpbmUgVU5LU0pJUyAweDgxN2YKK19QUk9U T1RZUChVU0hPUlQgZXVfdG9fc2osIChVU0hPUlQpICk7ICAvKiBFVUMtSlAgdG8gU2hpZnQtSklT ICAqLworX1BST1RPVFlQKFVTSE9SVCBzal90b19ldSwgKFVTSE9SVCkgKTsgIC8qIFNoaWZ0LUpJ UyB0byBFVUMtSlAgICovCitfUFJPVE9UWVAoIGludCB4a2FuamYsICh2b2lkKSApOworX1BST1RP VFlQKCBpbnQgeGthbmppLCAoaW50LCBpbnQgKCopKGNoYXIpKSApOworX1BST1RPVFlQKCBpbnQg eGthbmp6LCAoaW50ICgqKShjaGFyKSApICk7CitfUFJPVE9UWVAoIGludCB6a2FuamYsICh2b2lk KSApOworX1BST1RPVFlQKCBpbnQgemthbmppLCAoaW50ICgqKSh2b2lkKSkgKTsgLyogS2Fuamkg ZnVuY3Rpb24gcHJvdG90eXBlcyAqLworX1BST1RPVFlQKCBpbnQgemthbmp6LCAodm9pZCkgKTsK K19QUk9UT1RZUChWT0lEIGo3aW5pdCwgKCB2b2lkICkgKTsgICAgICAvKiBJbml0aWFsaXplIEpJ Uy03IHBhcnNlciAqLworX1BST1RPVFlQKGludCBnZXRqNywgKCB2b2lkICkgKTsgICAgICAgIC8q IEdldCBuZXh0IEpJUy03IGNoYXJhY3RlciAqLworI2VuZGlmIC8qIEtBTkpJICovCisKKyNpZm5k ZWYgTUFDCisjaWZuZGVmIE5PTE9DQUwKK19QUk9UT1RZUCggaW50IGNzX3NpemUsIChpbnQpICk7 CitfUFJPVE9UWVAoIGludCBjc19pc19zdGQsIChpbnQpICk7CitfUFJPVE9UWVAoIGludCBjc19p c19ucmMsIChpbnQpICk7CitfUFJPVE9UWVAoIFZPSUQgc2V0cmVtY2hhcnNldCwgKGludCwgaW50 KSApOworX1BST1RPVFlQKCBWT0lEIHNldGxjbGNoYXJzZXQsIChpbnQpICk7CisjZW5kaWYgLyog Tk9MT0NBTCAqLworI2VuZGlmIC8qIE1BQyAqLworCitfUFJPVE9UWVAoVk9JRCBzZXR4bGF0eXBl LCAoaW50LCBpbnQpKTsKKworI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKyNlbmRpZiAvKiBDS0NYTEFf SCAqLworCisvKiBFbmQgb2YgY2tjeGxhLmggKi8KCmRpZmYgLS1naXQgYS9ja2VybWl0LTkuMC4z MDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrZXJtaXQuaW5pIGIvY2tlcm1pdC05LjAuMzAyLWJ1 aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2VybWl0LmluaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwLi5iMzBmMzg5Ci0tLSAvZGV2L251bGwKKysrIGIvY2tlcm1pdC05LjAuMzAyLWJ1 aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2VybWl0LmluaQpAQCAtMCwwICsxLDggQEAKK0NPTU1FTlQg LSBTdGFuZGFyZCBDLUtlcm1pdCBpbml0aWFsaXphdGlvbiBmaWxlCis7CitlY2hvCitlY2hvIFRo ZSB2ZXJ5IGxvbmcgc3RhbmRhcmQgaW5pdGlhbGl6YXRpb24gZmlsZSB0aGF0IHdhcyBkaXN0cmli dXRlZAorZWNobyB3aXRoIEMtS2VybWl0IDYsIDcsIGFuZCA4IGlzIG5vIGxvbmdlciByZWNvbW1l bmRlZCBhcyAic3RhbmRhcmQiLAorZWNobyBzaW5jZSBpdHMgZmVhdHVyZXMgd2VyZSBsaXR0bGUg dXNlZC4gIEl0IGlzIHN0aWxsIGF2YWlsYWJsZSBpbgorZWNobyB0aGUgQy1LZXJtaXQgZGlzdHJp YnV0aW9uIGFzIG9ja2VybWl0LmluaS4KK2VjaG8KCmRpZmYgLS1naXQgYS9ja2VybWl0LTkuMC4z MDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrZXJtaXQ3MC50eHQgYi9ja2VybWl0LTkuMC4zMDIt YnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrZXJtaXQ3MC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMC4uYTc5NmNmZAotLS0gL2Rldi9udWxsCisrKyBiL2NrZXJtaXQtOS4wLjMw Mi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2tlcm1pdDcwLnR4dApAQCAtMCwwICsxLDE3NjkwIEBA CisKKyAgIFsxXVRoZSBDb2x1bWJpYSBDcm93biBUaGUgS2VybWl0IFByb2plY3QgfCBDb2x1bWJp YSBVbml2ZXJzaXR5CisgICA2MTIgV2VzdCAxMTV0aCBTdHJlZXQsIE5ldyBZb3JrIE5ZIDEwMDI1 IFVTQSBvIFsyXWtlcm1pdEBjb2x1bWJpYS5lZHUKKyAgIC4uLnNpbmNlIDE5ODEKKyAgIFszXUhv bWUgWzRdS2VybWl0IDk1IFs1XUMtS2VybWl0IFs2XVNjcmlwdHMgWzddQ3VycmVudCBbOF1OZXcg WzldRkFRCisgICBbMTBdU3VwcG9ydAorCitTdXBwbGVtZW50IHRvIFsxMV1Vc2luZyBDLUtlcm1p dCAsIDJuZCBFZGl0aW9uCisKK0ZvciBDLUtlcm1pdCA3LjAKKworQXMgb2YgQy1LZXJtaXQgdmVy c2lvbjogIDcuMC4xOTYKK1RoaXMgZmlsZSBjcmVhdGVkOiAgOCBGZWJydWFyeSAyMDAwCitUaGlz IGZpbGUgbGFzdCB1cGRhdGVkOgorTW9uIEF1ZyAgOCAxMDozOToxOCAyMDExCisKKworQXV0aG9y czogRnJhbmsgZGEgQ3J1eiBhbmQgQ2hyaXN0aW5lIE0uIEdpYW5vbmUKK0FkZHJlc3M6IFRoZSBL ZXJtaXQgUHJvamVjdAorICAgICAgICAgQ29sdW1iaWEgVW5pdmVyc2l0eQorICAgICAgICAgNjEy IFdlc3QgMTE1dGggU3RyZWV0CisgICAgICAgICBOZXcgWW9yayBOWSAxMDAyNS03Nzk5CisgICAg ICAgICBVU0EKK0ZheDogICAgICsxICgyMTIpIDY2Mi02NDQyCitFLU1haWw6ICBbMTJda2VybWl0 LXN1cHBvcnRAY29sdW1iaWEuZWR1CitXZWI6ICAgICBbMTNdaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0LworT3I6ICAgICAgWzE0XWh0dHA6Ly93d3cua2VybWl0LXByb2plY3Qub3JnLwor T3I6ICAgICAgWzE1XWh0dHA6Ly93d3cuY29sdW1iaWEubnljLm55LnVzL2tlcm1pdC8KKworTk9U SUNFUworCisgICBUaGlzIGRvY3VtZW50OgorICAgICAgICAgIENvcHlyaWdodCDvv70gMTk5Nywg MjAwMCwgRnJhbmsgZGEgQ3J1eiBhbmQgQ2hyaXN0aW5lIE0uIEdpYW5vbmUuCisgICAgICAgICAg QWxsIHJpZ2h0cyByZXNlcnZlZC4KKworICAgS2VybWl0IDk1OgorICAgICAgICAgIENvcHlyaWdo dCDvv70gMTk5NSwgMjAwMCwgVHJ1c3RlZXMgb2YgQ29sdW1iaWEgVW5pdmVyc2l0eSBpbiB0aGUK KyAgICAgICAgICBDaXR5IG9mIE5ldyBZb3JrLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgICBD LUtlcm1pdDoKKyAgICAgICAgICBDb3B5cmlnaHQg77+9IDE5ODUsIDIwMDAsCisgICAgICAgICAg VHJ1c3RlZXMgb2YgQ29sdW1iaWEgVW5pdmVyc2l0eSBpbiB0aGUgQ2l0eSBvZiBOZXcgWW9yay4g QWxsCisgICAgICAgICAgcmlnaHRzIHJlc2VydmVkLiBTZWUgdGhlIEMtS2VybWl0IFsxNl1DT1BZ SU5HLlRYVCBmaWxlIG9yIHRoZQorICAgICAgICAgIGNvcHlyaWdodCB0ZXh0IGluIHRoZSBbMTdd Y2tjbWFpLmMgbW9kdWxlIGZvciBkaXNjbGFpbWVyIGFuZAorICAgICAgICAgIHBlcm1pc3Npb25z LgorCisgICBXaGVuIEtlcmJlcm9zKFRNKSBhbmQvb3IgU1JQKFRNKSAoU2VjdXJlIFJlbW90ZSBQ YXNzd29yZCkgYW5kL29yIFNTTAorICAgICAgICAgIHByb3RvY29sIGFyZSBpbmNsdWRlZDoKKyAg ICAgICAgICBQb3J0aW9ucyBDb3B5cmlnaHQg77+9IDE5OTAsIE1hc3NhY2h1c2V0dHMgSW5zdGl0 dXRlIG9mCisgICAgICAgICAgVGVjaG5vbG9neS4KKyAgICAgICAgICBQb3J0aW9ucyBDb3B5cmln aHQg77+9IDE5OTEsIDE5OTMgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZgorICAgICAgICAg IENhbGlmb3JuaWEuCisgICAgICAgICAgUG9ydGlvbnMgQ29weXJpZ2h0IO+/vSAxOTkxLCAxOTky LCAxOTkzLCAxOTk0LCAxOTk1IGJ5IEFUJlQuCisgICAgICAgICAgUG9ydGlvbnMgQ29weXJpZ2h0 IO+/vSAxOTk3LCBTdGFuZm9yZCBVbml2ZXJzaXR5LgorICAgICAgICAgIFBvcnRpb25zIENvcHly aWdodCDvv70gMTk5NS0xOTk3LCBFcmljIFlvdW5nIDxlYXlAY3J5cHRvc29mdC5jb20+LgorCisg ICBGb3IgdGhlIGZ1bGwgdGV4dCBvZiB0aGUgdGhpcmQtcGFydHkgY29weXJpZ2h0IG5vdGljZXMs IHNlZQorICAgWzE4XUFwcGVuZGl4IFYuCisKK1dIQVQgSVMgSU4gVEhJUyBGSUxFCisKKyAgIFRo aXMgZmlsZSBsaXN0cyBjaGFuZ2VzIG1hZGUgdG8gQy1LZXJtaXQgc2luY2UgdGhlIHNlY29uZCBl ZGl0aW9uIG9mCisgICB0aGUgYm9vayBbMTldVXNpbmcgQy1LZXJtaXQgd2FzIHB1Ymxpc2hlZCBh bmQgQy1LZXJtaXQgNi4wIHdhcyByZWxlYXNlZAorICAgaW4gTm92ZW1iZXIgMTk5Ni4gVXNlIHRo aXMgZmlsZSBhcyBhIHN1cHBsZW1lbnQgdG8gdGhlIHNlY29uZCBlZGl0aW9uCisgICBvZiBVc2lu ZyBDLUtlcm1pdCB1bnRpbCB0aGUgdGhpcmQgZWRpdGlvbiBpcyBwdWJsaXNoZWQgc29tZSB0aW1l IGluCisgICAyMDAwLiBJZiB0aGUgIm1vc3QgcmVjZW50IHVwZGF0ZSIgc2hvd24gYWJvdmUgaXMg bG9uZyBhZ28sIGNvbnRhY3QKKyAgIENvbHVtYmlhIFVuaXZlcnNpdHkgdG8gc2VlIGlmIHRoZXJl IGlzIGEgbmV3ZXIgcmVsZWFzZS4KKworICAgRm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24sIGFsc28g c2VlIHRoZSBbMjBdQ0tDQldSLlRYVCAoIkMtS2VybWl0CisgICBiZXdhcmUiKSBmaWxlIGZvciBo aW50cywgdGlwcywgdHJpY2tzLCByZXN0cmljdGlvbnMsIGZyZXF1ZW50bHkgYXNrZWQKKyAgIHF1 ZXN0aW9ucywgZXRjLCBwbHVzIHRoZSBzeXN0ZW0tc3BlY2lmaWMgImJld2FyZSBmaWxlIiwgZS5n LgorICAgWzIxXUNLVUJXUi5UWFQgZm9yIFVOSVgsIFsyMl1DS1ZCV1IuVFhUIGZvciBWTVMsIGV0 YywgYW5kIGFsc28gYW55CisgICBzeXN0ZW0tc3BlY2lmaWMgdXBkYXRlIGZpbGVzIHN1Y2ggYXMg S0VSTUlUOTUuSFRNIGZvciBLZXJtaXQgOTUgKGluIHRoZQorICAgRE9DU1xNQU5VQUxcIHN1YmRp cmVjdG9yeSBvZiB5b3VyIEs5NSBkaXJlY3RvcnkpLgorCisgICAgIFRoaXMgV2ViLWJhc2VkIGNv cHkgb2YgdGhlIEMtS2VybWl0IDcuMCB1cGRhdGUgbm90ZXMgc3VwZXJzZWRlcyB0aGUKKyAgICAg cGxhaW4tdGV4dCBDS0VSTUlUMi5UWFQgZmlsZS4gQWxsIGNoYW5nZXMgYWZ0ZXIgMTkgSmFudWFy eSAyMDAwCisgICAgIGFwcGVhciBvbmx5IGhlcmUgaW4gdGhlIFdlYiB2ZXJzaW9uLiBJZiB5b3Ug bmVlZCBhbiB1cC10by1kYXRlCisgICAgIHBsYWluLXRleHQgY29weSwgdXNlIHlvdXIgV2ViIGJy b3dzZXIgdG8gc2F2ZSB0aGlzIHBhZ2UgYXMgcGxhaW4KKyAgICAgdGV4dC4KKworQUJPVVQgRklM RU5BTUVTCisKKyAgIEluIHRoaXMgZG9jdW1lbnQsIGZpbGVuYW1lcyBhcmUgZ2VuZXJhbGx5IHNo b3duIGluIHVwcGVyY2FzZSwgYnV0IG9uCisgICBmaWxlIHN5c3RlbXMgd2l0aCBjYXNlLXNlbnNp dGl2ZSBuYW1lcyBzdWNoIGFzIFVOSVgsIE9TLTksIGFuZCBBT1MvVlMsCisgICBsb3dlcmNhc2Ug bmFtZXMgYXJlIHVzZWQ6IFsyM11ja3Vid3IudHh0LCBbMjRdY2tlcm1pdDcwLnR4dCwgZXRjLgor CitBRERJVElPTkFMIEZJTEVTCisKKyAgIFNldmVyYWwgb3RoZXIgZmlsZXMgYWNjb21wYW55IHRo aXMgbmV3IEtlcm1pdCByZWxlYXNlOgorCisgICBTRUNVUklUWS5UWFQKKyAgICAgICAgICBEaXNj dXNzaW9uIG9mIEtlcm1pdCdzIG5ldyBhdXRoZW50aWNhdGlvbiBhbmQgZW5jcnlwdGlvbgorICAg ICAgICAgIGZlYXR1cmVzOgorCisgICAgICAgICAgKyBbMjVdUGxhaW4tdGV4dCB2ZXJzaW9uCisg ICAgICAgICAgKyBbMjZdSFRNTCAoaHlwZXJ0ZXh0KSB2ZXJzaW9uCisKKyAgIElLU0QuVFhUCisg ICAgICAgICAgSG93IHRvIGluc3RhbGwgYW5kIG1hbmFnZSBhbiBJbnRlcm5ldCBLZXJtaXQgU2Vy dmljZSBEYWVtb24uCisKKyAgICAgICAgICArIFsyN11QbGFpbi10ZXh0IHZlcnNpb24KKyAgICAg ICAgICArIFsyOF1IVE1MIChoeXBlcnRleHQpIHZlcnNpb24KKworICAgICAgICAgIEFsc28gc2Vl IFsyOV1jdWlrc2QuaHRtIGZvciBpbnN0cnVjdGlvbnMgZm9yIHVzZS4KKworICAgVEVMTkVULlRY VAorICAgICAgICAgIEEgdGhvcm91Z2ggcHJlc2VudGF0aW9uIG9mIEtlcm1pdCdzIG5ldyBhZHZh bmNlZCBUZWxuZXQgZmVhdHVyZXMKKyAgICAgICAgICBhbmQgY29udHJvbHMuCisKKyAgICAgICAg ICArIFszMF1QbGFpbi10ZXh0IHZlcnNpb24KKyAgICAgICAgICArIFszMV1IVE1MIChoeXBlcnRl eHQpIHZlcnNpb24KKworVEhFIE5FVyBDLUtFUk1JVCBMSUNFTlNFCisKKyAgIFRoZSBDLUtlcm1p dCBsaWNlbnNlIHdhcyByZXdyaXR0ZW4gZm9yIHZlcnNpb24gNy4wIHRvIGdyYW50IGF1dG9tYXRp YworICAgcGVybWlzc2lvbiB0byBwYWNrYWdlcnMgb2YgZnJlZSBvcGVyYXRpbmctc3lzdGVtIGRp c3RyaWJ1dGlvbnMgdG8KKyAgIGluY2x1ZGUgQy1LZXJtaXQgNy4wLiBFeGFtcGxlcyBpbmNsdWRl IExpbnV4IChHTlUvTGludXgpLCBGcmVlQlNELAorICAgTmV0QlNELCBldGMuIFRoZSBuZXcgbGlj ZW5zZSBpcyBpbiB0aGUgWzMyXUNPUFlJTkcuVFhUIGZpbGUsIGFuZCBpcworICAgYWxzbyBkaXNw bGF5ZWQgYnkgQy1LZXJtaXQgaXRzZWxmIHdoZW4geW91IGdpdmUgdGhlIFZFUlNJT04gb3IKKyAg IENPUFlSSUdIVCBjb21tYW5kLiBUaGUgbmV3IEMtS2VybWl0IGxpY2Vuc2UgZG9lcyBub3QgYXBw bHkgdG8KKyAgIFszM11LZXJtaXQgOTUuCisKK0FDS05PV0xFREdNRU5UUworCisgICBUaGFua3Mg dG8gSmVmZiBBbHRtYW4sIHdobyBqb2luZWQgdGhlIEtlcm1pdCBQcm9qZWN0IGluIDE5OTUsIGZv ciBtdWNoCisgICBvZiB3aGF0IHlvdSBzZWUgaW4gQy1LZXJtaXQgNy4wLCBlc3BlY2lhbGx5IGlu IHRoZSBuZXR3b3JraW5nIGFuZAorICAgc2VjdXJpdHkgYXJlYXMsIGFuZCBoaXMga2V5IHJvbGUg aW4gZGVzaWduaW5nIGFuZCBpbXBsZW1lbnRpbmcgdGhlCisgICBJbnRlcm5ldCBLZXJtaXQgU2Vy dmljZSBEYWVtb24uIEFuZCBzcGVjaWFsIHRoYW5rcyB0byBMdWNhcyBIYXJ0IGZvcgorICAgbG90 cyBvZiBoZWxwIHdpdGggdGhlIFZNUyB2ZXJzaW9uOyB0byBQZXRlciBFaWNoaG9ybiBmb3IgY29u dGludW91cworICAgdGVzdGluZyBvbiB0aGUgZnVsbCByYW5nZSBvZiBIUC1VWCB2ZXJzaW9ucyBh bmQgZm9yIGEgY29uc29saWRhdGVkIHNldAorICAgb2YgSFAtVVggbWFrZWZpbGUgdGFyZ2V0czsg YW5kIHRvIENvbGluIEFsbGVuLCBNYXJrIEFsbGVuLCBSb2dlciBBbGxlbiwKKyAgIFJpYyBBbmRl cnNvbiwgV2lsbGlhbSBCYWRlciwgTWl0Y2ggQmFrZXIsIE1pdGNoZWxsIEJhc3MsIE5lbHNvbiBC ZWViZSwKKyAgIEdlcnJ5IEJlbGFuZ2VyLCBKZWZmIEJlcm5zdGVuLCBNYXJrIEJlcnJ5bWFuLCBK b2huIEJpZ2csIFZvbGtlcgorICAgQm9yY2hlcnQsIEpvbmF0aGFuIEJvc3dlbGwsIFRpbSBCb3ll ciwgRnJlZGVyaWNrIEJydWNrbWFuLCBLZW5uZXRoCisgICBDb2NocmFuLCBKYXJlZCBDcmFwbywg QmlsbCBEZWxhbmV5LCBJZ29yIFNvYnJhZG8gRGVsZ2FkbywgQ2xhcmVuY2UKKyAgIERvbGQsIEpv ZSBEb3VwbmlrLCBKb2huIER1bmxhcCwgTWF4IEV2YXJ0cywgUGF0cmljayBGcmVuY2gsIENhcmwK KyAgIEZyaWVkYmVyZywgQ2FybCBGcmllbmQsIEhpcm9mdW1pIEZ1amlpLCBBbmRyZXcgR2Ficmll bCwgR2FiZSBHYXJ6YSwKKyAgIEJveWQgR2VyYmVyLCBEYXZpZCBHZXJiZXIsIEdlb3JnZSBHaWxt ZXIsIEh1bnRlciBHb2F0bGV5LCBESiBIYWdiZXJnLAorICAgS2V2aW4gSGFuZHksIEFuZHkgSGFy cGVyLCBSYW5kb2xwaCBIZXJiZXIsIFN2ZW4gSG9sc3Ry77+9bSwgTWljaGFsCisgICBKYWVnZXJt YW5uLCBHcmFoYW0gSmVua2lucywgRGljayBKb25lcywgVGVycnkgS2VubmVkeSwgUm9iZXJ0IEQg S2V5cywKKyAgIE5pY2sgS2lzc2ViZXJ0aCwgSWdvciBLb3ZhbGVua28sIERhdmlkIExhbmUsIEFk YW0gTGF1cmllLCBKZWZmCisgICBMaWViZXJtYW5uLCBFcmljIExvbnZpY2ssIEhvaSBXYW4gTG91 aXMsIEFydGh1ciBNYXJzaCwgR3JlZ29yaWUgTWFydGluLAorICAgUGV0ZXIgTWF1emV5LCBEcmFn YW4gTWlsaWNpYywgVG9kZCBNaWxsZXIsIENocmlzdGlhbiBNb25kcnVwLCBEYW5pZWwKKyAgIE1v cmF0bywgRGF0IE5ndXllbiwgSGVyYiBQZXllcmwsIEplYW4tUGllcnJlIFJhZGxleSwgU3RldmUg UmFuY2UsCisgICBTdGVwaGVuIFJpZWhtLCBOaWdlbCBSb2xlcywgTGFycnkgUm9zZW5tYW4sIEph eSBTIFJvdW1hbiwgRGF2aWQKKyAgIFNhbmRlcnNvbiwgSm9obiBTYW50b3MsIE1pY2hhZWwgU2No bWl0eiwgU3RldmVuIFNjaHVsdHosIEJvYiBTaGFpciwKKyAgIFJpY2hhcmQgU2h1Zm9yZCwgRnJl ZCBTbWl0aCwgTWljaGFlbCBTb2tvbG92LCBKaW0gU3BhdGgsIFBldGVyIFN6ZWxsLAorICAgVGVk IFQnc28sIEJyaWFuIFRpbGxtYW4sIExpbnVzIFRvcnZhbGRzLCBQYXRyaWNrIFZvbGtlcmRpbmcs IE1hcnRpbgorICAgVm9ybO+/vW5kZXIsIFN0ZXZlIFdhbHRvbiwgS2VuIFdlYXZlcmxpbmcsIEpv aG4gV2Vla2xleSwgTWFydGluIFdoaXRha2VyLAorICAgSmltIFdoaXRieSwgTWF0dCBXaWxsbWFu LCBKb2VsbGVuIFdpbmRzb3IsIEZhcnJlbGwgV29vZHMsIGFuZCBtYW55CisgICBvdGhlcnMgZm9y IGJpbmFyaWVzLCBob3N0aW5nLCByZXZpZXdzLCBzdWdnZXN0aW9ucywgYWR2aWNlLCBidWcKKyAg IHJlcG9ydHMsIGFuZCBhbGwgdGhlIHJlc3Qgb3ZlciB0aGUgMysgeWVhciBDLUtlcm1pdCA3LjAg ZGV2ZWxvcG1lbnQKKyAgIGN5Y2xlLiBUaGFua3MgdG8gUnVzcyBOZWxzb24gYW5kIHRoZSBib2Fy ZCBvZiB0aGUgT3BlbiBTb2Z0d2FyZQorICAgSW5pdGlhdGl2ZSAoWzM0XWh0dHA6Ly93d3cub3Bl bnNvdXJjZS5vcmcpIGZvciB0aGVpciBjb29wZXJhdGlvbiBpbgorICAgZGV2ZWxvcGluZyB0aGUg bmV3IEMtS2VybWl0IGxpY2Vuc2UgYW5kIHRvIHRoZSBwcm9wcmlldG9ycyBvZiB0aG9zZQorICAg ZnJlZSBVTklYIGRpc3RyaWJ1dGlvbnMgdGhhdCBoYXZlIGluY29ycG9yYXRlZCBDLUtlcm1pdCA3 LjAgZm9yIHRoZWlyCisgICBjb29wZXJhdGlvbiBhbmQgc3VwcG9ydCwgZXNwZWNpYWxseSBGcmVl QlNEJ3MgSu+/vXJnIFd1bnNjaC4KKworTk9URSBUTyBLRVJNSVQgOTUgVVNFUlMKKworICAgS2Vy bWl0IDk1IGFuZCBDLUtlcm1pdCBzaGFyZSB0aGUgc2FtZSBjb21tYW5kIGFuZCBzY3JpcHRpbmcg bGFuZ3VhZ2UsCisgICB0aGUgc2FtZSBLZXJtaXQgZmlsZS10cmFuc2ZlciBwcm90b2NvbCBpbXBs ZW1lbnRhdGlvbiwgYW5kIG11Y2ggZWxzZQorICAgYmVzaWRlcy4KKworICAgTGlrZSB0aGUgYm9v ayBbMzVdVXNpbmcgQy1LZXJtaXQsIHRoaXMgZmlsZSBjb25jZW50cmF0ZXMgb24gdGhlIGFzcGVj dHMKKyAgIG9mIEMtS2VybWl0IHRoYXQgYXJlIGNvbW1vbiB0byBhbGwgdmVyc2lvbnM6IFVOSVgs IFZNUywgV2luZG93cywgT1MvMiwKKyAgIFZPUywgQU9TL1ZTLCBldGMuIFBsZWFzZSByZWZlciB0 byB5b3VyIEtlcm1pdCA5NSBkb2N1bWVudGF0aW9uIGZvcgorICAgaW5mb3JtYXRpb24gdGhhdCBp cyBzcGVjaWZpYyB0byBLZXJtaXQgOTUuCisKKyAgIEMtS2VybWl0IDcuMCBjb3JyZXNwb25kcyB0 byBLZXJtaXQgOTUgMS4xLjE5LgorCitDLUtFUk1JVCBWRVJTSU9OUyBBTkQgVkVSU0lPTiBOVU1C RVJTCisKKyAgICJDLUtlcm1pdCIgcmVmZXJzIHRvIGFsbCB0aGUgbWFueSBwcm9ncmFtcyB0aGF0 IGFyZSBjb21waWxlZCBpbiB3aG9sZQorICAgb3IgaW4gcGFydCBmcm9tIGNvbW1vbiBDLWxhbmd1 YWdlIHNvdXJjZSBjb2RlLCBjb21wcmlzaW5nOgorCisgICAgICogQSBLZXJtaXQgZmlsZSB0cmFu c2ZlciBwcm90b2NvbCBtb2R1bGUKKyAgICAgKiBBIGNvbW1hbmQgcGFyc2VyIGFuZCBzY3JpcHQg ZXhlY3V0aW9uIG1vZHVsZQorICAgICAqIEEgbW9kZW0tZGlhbGluZyBtb2R1bGUKKyAgICAgKiBB IG5ldHdvcmsgc3VwcG9ydCBtb2R1bGUKKyAgICAgKiBBIGNoYXJhY3Rlci1zZXQgdHJhbnNsYXRp b24gbW9kdWxlLgorCisgICBhbmQgc2V2ZXJhbCBvdGhlcnMuIFRoZXNlICJzeXN0ZW0taW5kZXBl bmRlbnQiIG1vZHVsZXMgYXJlIGNvbWJpbmVkCisgICB3aXRoIHN5c3RlbS1kZXBlbmRlbnQgbW9k dWxlcyBmb3IgZWFjaCBwbGF0Zm9ybSB0byBwcm92aWRlIHRoZSByZXF1aXJlZAorICAgaW5wdXQv b3V0cHV0IGZ1bmN0aW9ucywgYW5kIGFsc28gaW4gc29tZSBjYXNlcyBvdmVybGFpZCB3aXRoIGFu CisgICBhbHRlcm5hdGl2ZSB1c2VyIGludGVyZmFjZSwgc3VjaCBhcyBNYWNpbnRvc2ggS2VybWl0 J3MgcG9pbnQtYW5kLWNsaWNrCisgICBpbnRlcmZhY2UsIGFuZCBpbiBzb21lIGNhc2VzIGFsc28g YSB0ZXJtaW5hbCBlbXVsYXRvciwgYXMgS2VybWl0IDk1LgorCisgICBUaGUgQy1LZXJtaXQgdmVy c2lvbiBudW1iZXIgc3RhcnRlZCBhcyAxLjAsIC4uLiAzLjAsIDQuMCwgNC4xIGFuZCB0aGVuCisg ICAoYmVjYXVzZSBvZiBjb25mdXNpb24gYXQgdGhlIHRpbWUgd2l0aCBCZXJrZWxleSBVTklYIDQu MiksIDRCLCA0QywgYW5kCisgICBzbyBvbiwgd2l0aCB0aGUgc3BlY2lmaWMgZWRpdCBudW1iZXIg aW4gcGFyZW50aGVzZXMsIGZvciBleGFtcGxlCisgICA0RSgwNzIpIG9yIDVBKDE4OCkuIFRoaXMg c2NoZW1lIHdhcyB1c2VkIHRocm91Z2ggNUEoMTkxKSwgYnV0IG5vdyB3ZQorICAgaGF2ZSBnb25l IGJhY2sgdG8gdGhlIHRyYWRpdGlvbmFsIG51bWJlcmluZyBzY2hlbWUgd2l0aCBkZWNpbWFsIHBv aW50czoKKyAgIG1ham9yLm1pbm9yLmVkaXQ7IGZvciBleGFtcGxlIDcuMC4xOTYuIEludGVybmFs IHZlcnNpb24gbnVtYmVycyAodGhlCisgICBcdih2ZXJzaW9uKSB2YXJpYWJsZSksIGhvd2V2ZXIs IGFyZSBjb21wYXRpYmxlIGluIEMtS2VybWl0IDVBIHVwd2FyZHMuCisKKyAgIE1lYW53aGlsZSwg Qy1LZXJtaXQgZGVyaXZhdGl2ZXMgZm9yIHNvbWUgcGxhdGZvcm1zIChXaW5kb3dzLCBNYWNpbnRv c2gpCisgICBtaWdodCBnbyB0aHJvdWdoIHNldmVyYWwgcmVsZWFzZXMgd2hpbGUgQy1LZXJtaXQg aXRzZWxmIHJlbWFpbnMgdGhlCisgICBzYW1lLiBUaGVzZSB2ZXJzaW9ucyBoYXZlIHRoZWlyIG93 biBwbGF0Zm9ybS1zcGVjaWZpYyB2ZXJzaW9uIG51bWJlcnMsCisgICBzdWNoIGFzIEtlcm1pdCA5 NSAxLjEuMSwgMS4xLjIsIGFuZCBzbyBvbi4KKworICAgQy1LZXJtaXQgVmVyc2lvbiBIaXN0b3J5 OgorCisgIDEuMCAgICAgICAxOTgxLTE5ODIgICAgICAgICBDb21tYW5kLWxpbmUgb25seSwgNC4y IEJTRCBVTklYIG9ubHkKKyAgMi4wICAgICAgICgqKSAgICAgICAgICAgICAgICh3aG8gcmVtZW1i ZXJzLi4uKQorICAzLjAgICAgICAgTWF5IDE5ODQgICAgICAgICAgQ29tbWFuZC1saW5lIG9ubHks IHN1cHBvcnRzIHNldmVyYWwgcGxhdGZvcm1zCisgIDQuMC00LjEgICBGZWItQXByIDE5ODUgKCop ICBGaXJzdCBpbnRlcmFjdGl2ZSBhbmQgbW9kdWxhciB2ZXJzaW9uCisgIDRDKDA1MCkgICBNYXkg MTk4NQorICA0RCgwNjApICAgQXByaWwgMTk4NgorICA0RSgwNjYpICAgQXVndXN0IDE5ODcgICAg ICAgTG9uZyBwYWNrZXRzCisgIDRFKDA2OCkgICBKYW51YXJ5IDE5ODgKKyAgNEUoMDcyKSAgIEph bnVhcnkgMTk4OQorICA0RigwOTUpICAgQXVndXN0IDE5ODkgKCopICAgQXR0cmlidXRlIHBhY2tl dHMKKyAgNUEoMTg4KSAgIE5vdmVtYmVyIDE5OTIgICAgIFNjcmlwdGluZywgVENQL0lQLCBzbGlk aW5nIHdpbmRvd3MgKDEpCisgIDVBKDE4OSkgICBTZXB0ZW1iZXIgMTk5MyAgICBDb250cm9sLWNo YXIgdW5wcmVmaXhpbmcKKyAgNUEoMTkwKSAgIE9jdG9iZXIgMTk5NCAgICAgIFJlY292ZXJ5Cisg IDVBKDE5MSkgICBBcHJpbCAxOTk1ICAgICAgICBPUy8yIG9ubHkKKyAgNi4wLjE5MiAgIFNlcHRl bWJlciAxOTk2ICAgIEludGVsbGlnZW50IGRpYWxpbmcsIGF1dG9kb3dubG9hZCwgbG90cyBtb3Jl ICgyKQorICA2LjEuMTkzICAgMTk5Ny05OCAoKikgICAgICAgRGV2ZWxvcG1lbnQgb25seQorICA2 LjEuMTk0ICAgSnVuZSAxOTk4ICAgICAgICAgSzk1IG9ubHkgLSBzd2l0Y2hlcywgZGlyZWN0b3J5 IHJlY3Vyc2lvbiwgbW9yZQorICA3LjAuMTk1ICAgQXVndXN0IDE5OTkgICAgICAgSUtTRCArIG1v cmUgKENVIG9ubHkgYXMgSzk1IDEuMS4xOC1DVSkKKyAgNy4wLjE5NiAgIDEgSmFudWFyeSAyMDAw ICAgIFVuaWNvZGUsIGxvdHMgbW9yZQorCisgICAoKikgTmV2ZXIgZm9ybWFsbHkgcmVsZWFzZWQg KDQuMCB3YXMgYSB0b3RhbCByZXdyaXRlKQorICAgKDEpIFVzaW5nIEMtS2VybWl0LCAxc3QgRWRp dGlvbgorICAgKDIpIFVzaW5nIEMtS2VybWl0LCAybmQgRWRpdGlvbgorCitDT05URU5UUworCisg SS4gIFszNl1DLUtFUk1JVCBET0NVTUVOVEFUSU9OCisKKyBJSS4gWzM3XU5FVyBGRUFUVVJFUwor CisgICAgICgwKSBbMzhdSU5DT01QQVRJQklMSVRJRVMgV0lUSCBQUkVWSU9VUyBSRUxFQVNFUwor ICAgICAoMSkgWzM5XVBST0dSQU0gQU5EIEZJTEUgTUFOQUdFTUVOVCBBTkQgQ09NTUFORFMKKyAg ICAgICAgIDEuMC4gIFs0MF1CdWcgZml4ZXMKKyAgICAgICAgIDEuMS4gIFs0MV1Db21tYW5kIENv bnRpbnVhdGlvbgorICAgICAgICAgMS4yLiAgWzQyXUVkaXRvciBJbnRlcmZhY2UKKyAgICAgICAg IDEuMy4gIFs0M11XZWIgQnJvd3NlciBhbmQgRlRQIEludGVyZmFjZQorICAgICAgICAgMS40LiAg WzQ0XUNvbW1hbmQgRWRpdGluZworICAgICAgICAgMS41LiAgWzQ1XUNvbW1hbmQgU3dpdGNoZXMK KyAgICAgICAgICAgICAgIDEuNS4xLiBbNDZdR2VuZXJhbCBTd2l0Y2ggU3ludGF4CisgICAgICAg ICAgICAgICAxLjUuMi4gWzQ3XU9yZGVyIGFuZCBFZmZlY3Qgb2YgU3dpdGNoZXMKKyAgICAgICAg ICAgICAgIDEuNS4zLiBbNDhdRGlzdGluZ3Vpc2hpbmcgU3dpdGNoZXMgZnJvbSBPdGhlciBGaWVs ZHMKKyAgICAgICAgICAgICAgIDEuNS40LiBbNDldU3RhbmRhcmQgRmlsZSBTZWxlY3Rpb24gU3dp dGNoZXMKKyAgICAgICAgICAgICAgIDEuNS41LiBbNTBdU2V0dGluZyBQcmVmZXJlbmNlcyBmb3Ig RGlmZmVyZW50IENvbW1hbmRzCisgICAgICAgICAxLjYuICBbNTFdRGF0ZXMgYW5kIFRpbWVzCisg ICAgICAgICAxLjcuICBbNTJdUGFydGlhbCBDb21wbGV0aW9uIG9mIEtleXdvcmRzCisgICAgICAg ICAxLjguICBbNTNdQ29tbWFuZCBSZWNhbGwKKyAgICAgICAgIDEuOS4gIFs1NF1FWElUIE1lc3Nh Z2VzCisgICAgICAgICAxLjEwLiBbNTVdTWFuYWdpbmcgS2V5Ym9hcmQgSW50ZXJydXB0aW9ucwor ICAgICAgICAgMS4xMS4gWzU2XVRhbWluZyB0aGUgV2lsZCBCYWNrc2xhc2ggLS0gUGFydCBEZXV4 CisgICAgICAgICAgICAgICAxLjExLjEuIFs1N11CYWNrZ3JvdW5kCisgICAgICAgICAgICAgICAx LjExLjIuIFs1OF1LZXJtaXQncyBRdW90aW5nIFJ1bGVzCisgICAgICAgICAgICAgICAxLjExLjMu IFs1OV1QYXNzaW5nIERPUyBGaWxlbmFtZXMgZnJvbSBLZXJtaXQgdG8gU2hlbGwgQ29tbWFuZHMK KyAgICAgICAgICAgICAgIDEuMTEuNC4gWzYwXVVzaW5nIFZhcmlhYmxlcyB0byBIb2xkIERPUyBG aWxlbmFtZXMKKyAgICAgICAgICAgICAgIDEuMTEuNS4gWzYxXVBhc3NpbmcgRE9TIEZpbGVuYW1l cyBhcyBQYXJhbWV0ZXJzIHRvIE1hY3JvcworICAgICAgICAgICAgICAgMS4xMS42LiBbNjJdUGFz c2luZyBET1MgRmlsZSBOYW1lcyBmcm9tIE1hY3JvIFBhcmFtZXRlcnMgdG8gdGhlIEQKK09TIFNo ZWxsCisgICAgICAgICAgICAgICAxLjExLjcuIFs2M11QYXNzaW5nIERPUyBGaWxlbmFtZXMgdG8g S2VybWl0IGZyb20gdGhlIFNoZWxsCisgICAgICAgICAxLjEyLiBbNjRdRGVidWdnaW5nCisgICAg ICAgICAxLjEzLiBbNjVdTG9ncworICAgICAgICAgMS4xNC4gWzY2XUF1dG9tYXRpYyBGaWxlLVRy YW5zZmVyIFBhY2tldCBSZWNvZ25pdGlvbiBhdCB0aGUgQ29tbWFuZCBQcm8KK21wdAorICAgICAg ICAgMS4xNS4gWzY3XVRoZSBUWVBFIENvbW1hbmQKKyAgICAgICAgIDEuMTYuIFs2OF1UaGUgUkVT RVQgQ29tbWFuZAorICAgICAgICAgMS4xNy4gWzY5XVRoZSBDT1BZIGFuZCBSRU5BTUUgQ29tbWFu ZHMKKyAgICAgICAgIDEuMTguIFs3MF1UaGUgTUFOVUFMIENvbW1hbmQKKyAgICAgICAgIDEuMTku IFs3MV1TdHJpbmcgYW5kIEZpbGVuYW1lIE1hdGNoaW5nIFBhdHRlcm5zCisgICAgICAgICAxLjIw LiBbNzJdTXVsdGlwbGUgQ29tbWFuZHMgb24gT25lIExpbmUKKyAgICAgICAgIDEuMjEuIFs3M11X aGF0IERvIEkgSGF2ZT8KKyAgICAgICAgIDEuMjIuIFs3NF1HZW5lcmFsaXplZCBGaWxlIElucHV0 IGFuZCBPdXRwdXQKKyAgICAgICAgICAgICAgIDEuMjIuMS4gWzc1XVdoeSBBbm90aGVyIEkvTyBT eXN0ZW0/CisgICAgICAgICAgICAgICAxLjIyLjIuIFs3Nl1UaGUgRklMRSBDb21tYW5kCisgICAg ICAgICAgICAgICAxLjIyLjMuIFs3N11GSUxFIENvbW1hbmQgRXhhbXBsZXMKKyAgICAgICAgICAg ICAgIDEuMjIuNC4gWzc4XUNoYW5uZWwgTnVtYmVycworICAgICAgICAgICAgICAgMS4yMi41LiBb NzldRklMRSBDb21tYW5kIEVycm9yIENvZGVzCisgICAgICAgICAgICAgICAxLjIyLjYuIFs4MF1G aWxlIEkvTyBWYXJpYWJsZXMKKyAgICAgICAgICAgICAgIDEuMjIuNy4gWzgxXUZpbGUgSS9PIEZ1 bmN0aW9ucworICAgICAgICAgICAgICAgMS4yMi44LiBbODJdRmlsZSBJL08gRnVuY3Rpb24gRXhh bXBsZXMKKyAgICAgICAgIDEuMjMuIFs4M11UaGUgRVhFQyBDb21tYW5kCisgICAgICAgICAxLjI0 LiBbODRdR2V0dGluZyBLZXl3b3JkIExpc3RzIHdpdGggJz8nCisgICAgICgyKSBbODVdTUFLSU5H IEFORCBVU0lORyBDT05ORUNUSU9OUworICAgICAgICAgMi4wLiBbODZdU0VUIExJTkUgYW5kIFNF VCBIT1NUIENvbW1hbmQgU3dpdGNoZXMKKyAgICAgICAgIDIuMS4gWzg3XURpYWxpbmcKKyAgICAg ICAgICAgICAgMi4xLjEuIFs4OF1UaGUgRGlhbCBSZXN1bHQgTWVzc2FnZQorICAgICAgICAgICAg ICAyLjEuMi4gWzg5XUxvbmctRGlzdGFuY2UgRGlhbGluZyBDaGFuZ2VzCisgICAgICAgICAgICAg IDIuMS4zLiBbOTBdRm9yY2luZyBMb25nLURpc3RhbmNlIERpYWxpbmcKKyAgICAgICAgICAgICAg Mi4xLjQuIFs5MV1FeGNoYW5nZS1TcGVjaWZpYyBEaWFsaW5nIERlY2lzaW9ucworICAgICAgICAg ICAgICAyLjEuNS4gWzkyXUNhdXRpb25zIGFib3V0IENoZWFwZXN0LUZpcnN0IERpYWxpbmcKKyAg ICAgICAgICAgICAgMi4xLjYuIFs5M11CbGluZCBEaWFsaW5nIChEaWFsaW5nIHdpdGggTm8gRGlh bHRvbmUpCisgICAgICAgICAgICAgIDIuMS43LiBbOTRdVHJpbW1pbmcgdGhlIERpYWxpbmcgRGlh bG9nCisgICAgICAgICAgICAgIDIuMS44LiBbOTVdQ29udHJvbGxpbmcgdGhlIERpYWxpbmcgU3Bl ZWQKKyAgICAgICAgICAgICAgMi4xLjkuIFs5Nl1QcmV0ZXN0aW5nIFBob25lIE51bWJlciBDb252 ZXJzaW9ucworICAgICAgICAgICAgICAyLjEuMTAuIFs5N11HcmVhdGVyIENvbnRyb2wgb3ZlciBQ YXJ0aWFsIERpYWxpbmcKKyAgICAgICAgICAgICAgMi4xLjExLiBbOThdTmV3IERJQUwtcmVsYXRl ZCBWYXJpYWJsZXMgYW5kIEZ1bmN0aW9ucworICAgICAgICAgICAgICAyLjEuMTIuIFs5OV1JbmNy ZWFzZWQgRmxleGliaWxpdHkgb2YgUEJYIERpYWxpbmcKKyAgICAgICAgICAgICAgMi4xLjEzLiBb MTAwXVRoZSBESUFMIG1hY3JvIC0gTGFzdC1NaW51dGUgUGhvbmUgTnVtYmVyIENvbnZlcnNpb25z CisgICAgICAgICAgICAgIDIuMS4xNC4gWzEwMV1BdXRvbWF0aWMgVG9uZS9QdWxzZSBEaWFsaW5n IFNlbGVjdGlvbgorICAgICAgICAgICAgICAyLjEuMTUuIFsxMDJdRGlhbC1Nb2RpZmllciBWYXJp YWJsZXMKKyAgICAgICAgICAgICAgMi4xLjE2LiBbMTAzXUdpdmluZyBNdWx0aXBsZSBOdW1iZXJz IHRvIHRoZSBESUFMIENvbW1hbmQKKyAgICAgICAgIDIuMi4gWzEwNF1Nb2RlbXMKKyAgICAgICAg ICAgICAgMi4yLjEuIFsxMDVdTmV3IE1vZGVtIFR5cGVzCisgICAgICAgICAgICAgIDIuMi4yLiBb MTA2XU5ldyBNb2RlbSBDb250cm9scworICAgICAgICAgMi4zLiBbMTA3XVRFTE5FVCBhbmQgUkxP R0lOCisgICAgICAgICAgICAgIDIuMy4wLiBbMTA4XUJ1ZyBGaXhlcworICAgICAgICAgICAgICAy LjMuMS4gWzEwOV1UZWxuZXQgQmluYXJ5IE1vZGUgQnVnIEFkanVzdG1lbnRzCisgICAgICAgICAg ICAgIDIuMy4yLiBbMTEwXVZNUyBVQ1ggVGVsbmV0IFBvcnQgQnVnIEFkanVzdG1lbnQKKyAgICAg ICAgICAgICAgMi4zLjMuIFsxMTFdVGVsbmV0IE5ldyBFbnZpcm9ubWVudCBPcHRpb24KKyAgICAg ICAgICAgICAgMi4zLjQuIFsxMTJdVGVsbmV0IExvY2F0aW9uIE9wdGlvbgorICAgICAgICAgICAg ICAyLjMuNS4gWzExM11Db25uZWN0aW5nIHRvIFJhdyBUQ1AgU29ja2V0cworICAgICAgICAgICAg ICAyLjMuNi4gWzExNF1JbmNvbWluZyBUQ1AgQ29ubmVjdGlvbnMKKyAgICAgICAgIDIuNC4gWzEx NV1UaGUgRUlHSFRCSVQgQ29tbWFuZAorICAgICAgICAgMi41LiBbMTE2XVRoZSBTZXJ2aWNlcyBE aXJlY3RvcnkKKyAgICAgICAgIDIuNi4gWzExN11DbG9zaW5nIENvbm5lY3Rpb25zCisgICAgICAg ICAyLjcuIFsxMThdVXNpbmcgQy1LZXJtaXQgd2l0aCBFeHRlcm5hbCBDb21tdW5pY2F0aW9uIFBy b2dyYW1zCisgICAgICAgICAgICAgIDIuNy4wLiBbMTE5XUMtS2VybWl0IG92ZXIgdG4zMjcwIGFu ZCB0bjUyNTAKKyAgICAgICAgICAgICAgMi43LjEuIFsxMjBdQy1LZXJtaXQgb3ZlciBUZWxuZXQK KyAgICAgICAgICAgICAgMi43LjIuIFsxMjFdQy1LZXJtaXQgb3ZlciBSbG9naW4KKyAgICAgICAg ICAgICAgMi43LjMuIFsxMjJdQy1LZXJtaXQgb3ZlciBTZXJpYWwgQ29tbXVuaWNhdGlvbiBQcm9n cmFtcworICAgICAgICAgICAgICAyLjcuNC4gWzEyM11DLUtlcm1pdCBvdmVyIFNlY3VyZSBOZXR3 b3JrIENsaWVudHMKKyAgICAgICAgICAgICAgMi43LjQuMS4gWzEyNF1TU0gKKyAgICAgICAgICAg ICAgMi43LjQuMi4gWzEyNV1TU0wKKyAgICAgICAgICAgICAgMi43LjQuMy4gWzEyNl1TUlAKKyAg ICAgICAgICAgICAgMi43LjQuNC4gWzEyN11TT0NLUworICAgICAgICAgICAgICAyLjcuNC41LiBb MTI4XUtlcmJlcm9zIGFuZCBTUlAKKyAgICAgICAgIDIuOC4gWzEyOV1TY3JpcHRpbmcgTG9jYWwg UHJvZ3JhbXMKKyAgICAgICAgIDIuOS4gWzEzMF1YLjI1IE5ldHdvcmtpbmcKKyAgICAgICAgICAg ICAgMi45LjEuIFsxMzFdSUJNIEFJWExpbmsvWC4yNSBOZXR3b3JrIFByb3ZpZGVyIEludGVyZmFj ZSBmb3IgQUlYCisgICAgICAgICAgICAgIDIuOS4yLiBbMTMyXUhQLVVYIFguMjUKKyAgICAgICAg IDIuMTAuIFsxMzNdQWRkaXRpb25hbCBTZXJpYWwgUG9ydCBDb250cm9scworICAgICAgICAgMi4x MS4gWzEzNF1HZXR0aW5nIEFjY2VzcyB0byB0aGUgRGlhbG91dCBEZXZpY2UKKyAgICAgICAgIDIu MTIuIFsxMzVdVGhlIENvbm5lY3Rpb24gTG9nCisgICAgICAgICAyLjEzLiBbMTM2XUF1dG9tYXRp YyBDb25uZWN0aW9uLVNwZWNpZmljIEZsb3cgQ29udHJvbCBTZWxlY3Rpb24KKyAgICAgICAgIDIu MTQuIFsxMzddVHJhcHBpbmcgQ29ubmVjdGlvbiBFc3RhYmxpc2htZW50IGFuZCBMb3NzCisgICAg ICAgICAyLjE1LiBbMTM4XUNvbnRhY3RpbmcgV2ViIFNlcnZlcnMgd2l0aCB0aGUgSFRUUCBDb21t YW5kCisgICAgICgzKSBbMTM5XVRFUk1JTkFMIENPTk5FQ1RJT04KKyAgICAgICAgIDMuMS4gWzE0 MF1DT05ORUNUIENvbW1hbmQgU3dpdGNoZXMKKyAgICAgICAgIDMuMi4gWzE0MV1UcmlnZ2Vycwor ICAgICAgICAgMy4zLiBbMTQyXVRyYW5zcGFyZW50IFByaW50aW5nCisgICAgICAgICAzLjQuIFsx NDNdQmluYXJ5IGFuZCBUZXh0IFNlc3Npb24gTG9ncworICAgICAoNCkgWzE0NF1GSUxFIFRSQU5T RkVSIEFORCBNQU5BR0VNRU5UCisgICAgICAgICA0LjAuIFsxNDVdQnVnIEZpeGVzLCBNaW5vciBD aGFuZ2VzLCBhbmQgQ2xhcmlmaWNhdGlvbnMKKyAgICAgICAgIDQuMS4gWzE0Nl1GaWxlLVRyYW5z ZmVyIEZpbGVuYW1lIFRlbXBsYXRlcworICAgICAgICAgNC4xLjEuIFsxNDddVGVtcGxhdGVzIGlu IHRoZSBBcy1OYW1lCisgICAgICAgICA0LjEuMi4gWzE0OF1UZW1wbGF0ZXMgb24gdGhlIENvbW1h bmQgTGluZQorICAgICAgICAgNC4xLjMuIFsxNDldUG9zdC1UcmFuc2ZlciBSZW5hbWluZworICAg ICAgICAgNC4yLiBbMTUwXUZpbGUtVHJhbnNmZXIgUGlwZXMgYW5kIEZpbHRlcnMKKyAgICAgICAg IDQuMi4xLiBbMTUxXUludHJvZHVjdGlvbgorICAgICAgICAgNC4yLjEuMS4gWzE1Ml1UZXJtaW5v bG9neQorICAgICAgICAgNC4yLjEuMi4gWzE1M11Ob3RhdGlvbgorICAgICAgICAgNC4yLjEuMy4g WzE1NF1TZWN1cml0eQorICAgICAgICAgNC4yLjIuIFsxNTVdQ29tbWFuZHMgZm9yIFRyYW5zZmVy cmluZyBmcm9tIGFuZCB0byBQaXBlcworICAgICAgICAgNC4yLjIuMS4gWzE1Nl1TZW5kaW5nIGZy b20gYSBDb21tYW5kCisgICAgICAgICA0LjIuMi4yLiBbMTU3XVJlY2VpdmluZyB0byBhIENvbW1h bmQKKyAgICAgICAgIDQuMi4zLiBbMTU4XVVzaW5nIEZpbGUtVHJhbnNmZXIgRmlsdGVycworICAg ICAgICAgNC4yLjMuMS4gWzE1OV1UaGUgU0VORCBGaWx0ZXIKKyAgICAgICAgIDQuMi4zLjIuIFsx NjBdVGhlIFJFQ0VJVkUgRmlsdGVyCisgICAgICAgICA0LjIuNC4gWzE2MV1JbXBsaWNpdCBVc2Ug b2YgUGlwZXMKKyAgICAgICAgIDQuMi41LiBbMTYyXVN1Y2Nlc3MgYW5kIEZhaWx1cmUgb2YgUGlw ZWQgQ29tbWFuZHMKKyAgICAgICAgIDQuMi42LiBbMTYzXUNhdXRpb25zIGFib3V0IFVzaW5nIFBp cGVzIHRvIFRyYW5zZmVyIERpcmVjdG9yeSBUcmVlcworICAgICAgICAgNC4yLjcuIFsxNjRdUGlw ZXMgYW5kIEVuY3J5cHRpb24KKyAgICAgICAgIDQuMi44LiBbMTY1XUNvbW1hbmRzIGFuZCBGdW5j dGlvbnMgUmVsYXRlZCB0byBQaXBlcworICAgICAgICAgNC4yLjguMS4gWzE2Nl1UaGUgT1BFTiAh UkVBRCBhbmQgT1BFTiAhV1JJVEUgQ29tbWFuZHMKKyAgICAgICAgIDQuMi44LjIuIFsxNjddVGhl IFJFRElSRUNUIENvbW1hbmQKKyAgICAgICAgIDQuMi44LjMuIFsxNjhdUmVjZWl2aW5nIE1haWwg YW5kIFByaW50IEpvYnMKKyAgICAgICAgIDQuMi44LjQuIFsxNjldUGlwZS1SZWxhdGVkIEZ1bmN0 aW9ucworICAgICAgICAgNC4zLiBbMTcwXUF1dG9tYXRpYyBQZXItRmlsZSBUZXh0L0JpbmFyeSBN b2RlIFN3aXRjaGluZworICAgICAgICAgNC4zLjEuIFsxNzFdRXhjZXB0aW9ucworICAgICAgICAg NC4zLjIuIFsxNzJdT3ZlcnZpZXcKKyAgICAgICAgIDQuMy4zLiBbMTczXUNvbW1hbmRzCisgICAg ICAgICA0LjMuNC4gWzE3NF1FeGFtcGxlcworICAgICAgICAgNC40LiBbMTc1XUZpbGUgUGVybWlz c2lvbnMKKyAgICAgICAgIDQuNC4xLiBbMTc2XVdoZW4gQVRUUklCVVRFUyBQUk9URUNUSU9OIGlz IE9GRgorICAgICAgICAgNC40LjEuMS4gWzE3N11Vbml4CisgICAgICAgICA0LjQuMS4yLiBbMTc4 XVZNUworICAgICAgICAgNC40LjIuIFsxNzldV2hlbiBBVFRSSUJVVEVTIFBST1RFQ1RJT04gaXMg T04KKyAgICAgICAgIDQuNC4yLjEuIFsxODBdU3lzdGVtLVNwZWNpZmljIFBlcm1pc3Npb25zCisg ICAgICAgICA0LjQuMi4xLjEuIFsxODFdVU5JWAorICAgICAgICAgNC40LjIuMS4yLiBbMTgyXVZN UworICAgICAgICAgNC40LjIuMi4gWzE4M11TeXN0ZW0tSW5kZXBlbmRlbnQgUGVybWlzc2lvbnMK KyAgICAgICAgIDQuNS4gWzE4NF1GaWxlIE1hbmFnZW1lbnQgQ29tbWFuZHMKKyAgICAgICAgIDQu NS4xLiBbMTg1XVRoZSBESVJFQ1RPUlkgQ29tbWFuZAorICAgICAgICAgNC41LjIuIFsxODZdVGhl IENEIGFuZCBCQUNLIENvbW1hbmRzCisgICAgICAgICA0LjUuMi4xLiBbMTg3XVBhcnNpbmcgSW1w cm92ZW1lbnRzCisgICAgICAgICA0LjUuMi4yLiBbMTg4XVRoZSBDRFBBVEgKKyAgICAgICAgIDQu NS4zLiBbMTg5XUNyZWF0aW5nIGFuZCBSZW1vdmluZyBEaXJlY3RvcmllcworICAgICAgICAgNC41 LjQuIFsxOTBdVGhlIERFTEVURSBhbmQgUFVSR0UgQ29tbWFuZHMKKyAgICAgICAgIDQuNi4gWzE5 MV1TdGFydGluZyB0aGUgUmVtb3RlIEtlcm1pdCBTZXJ2ZXIgQXV0b21hdGljYWxseQorICAgICAg ICAgNC43LiBbMTkyXUZpbGUtVHJhbnNmZXIgQ29tbWFuZCBTd2l0Y2hlcworICAgICAgICAgNC43 LjEuIFsxOTNdU0VORCBDb21tYW5kIFN3aXRjaGVzCisgICAgICAgICA0LjcuMi4gWzE5NF1HRVQg Q29tbWFuZCBTd2l0Y2hlcworICAgICAgICAgNC43LjMuIFsxOTVdUkVDRUlWRSBDb21tYW5kIFN3 aXRjaGVzCisgICAgICAgICA0LjguIFsxOTZdTWlub3IgS2VybWl0IFByb3RvY29sIEltcHJvdmVt ZW50cworICAgICAgICAgNC44LjEuIFsxOTddTXVsdGlwbGUgQXR0cmlidXRlIFBhY2tldHMKKyAg ICAgICAgIDQuOC4yLiBbMTk4XVZlcnkgU2hvcnQgUGFja2V0cworICAgICAgICAgNC45LiBbMTk5 XVdpbGRjYXJkIC8gRmlsZSBHcm91cCBFeHBhbnNpb24KKyAgICAgICAgIDQuOS4xLiBbMjAwXUlu IFVOSVggQy1LZXJtaXQKKyAgICAgICAgIDQuOS4yLiBbMjAxXUluIEtlcm1pdCA5NQorICAgICAg ICAgNC45LjMuIFsyMDJdSW4gVk1TLCBBT1MvVlMsIE9TLTksIFZPUywgZXRjLgorICAgICAgICAg NC4xMC4gWzIwM11BZGRpdGlvbmFsIFBhdGhuYW1lIENvbnRyb2xzCisgICAgICAgICA0LjExLiBb MjA0XVJlY3Vyc2l2ZSBTRU5EIGFuZCBHRVQ6IFRyYW5zZmVycmluZyBEaXJlY3RvcnkgVHJlZXMK KyAgICAgICAgIDQuMTEuMS4gWzIwNV1Db21tYW5kLUxpbmUgT3B0aW9ucworICAgICAgICAgNC4x MS4yLiBbMjA2XVRoZSBTRU5EIC9SRUNVUlNJVkUgQ29tbWFuZAorICAgICAgICAgNC4xMS4zLiBb MjA3XVRoZSBHRVQgL1JFQ1VSU0lWRSBDb21tYW5kCisgICAgICAgICA0LjExLjQuIFsyMDhdTmV3 IGFuZCBDaGFuZ2VkIEZpbGUgRnVuY3Rpb25zCisgICAgICAgICA0LjExLjUuIFsyMDldTW92aW5n IERpcmVjdG9yeSBUcmVlcyBCZXR3ZWVuIExpa2UgU3lzdGVtcworICAgICAgICAgNC4xMS42LiBb MjEwXU1vdmluZyBEaXJlY3RvcnkgVHJlZXMgQmV0d2VlbiBVbmxpa2UgU3lzdGVtcworICAgICAg ICAgNC4xMi4gWzIxMV1XaGVyZSBEaWQgTXkgRmlsZSBHbz8KKyAgICAgICAgIDQuMTMuIFsyMTJd RmlsZSBPdXRwdXQgQnVmZmVyIENvbnRyb2wKKyAgICAgICAgIDQuMTQuIFsyMTNdSW1wcm92ZWQg UmVzcG9uc2l2ZW5lc3MKKyAgICAgICAgIDQuMTUuIFsyMTRdRG91YmxpbmcgYW5kIElnbm9yaW5n IENoYXJhY3RlcnMgZm9yIFRyYW5zcGFyZW5jeQorICAgICAgICAgNC4xNi4gWzIxNV1OZXcgRmls ZS1UcmFuc2ZlciBEaXNwbGF5IEZvcm1hdHMKKyAgICAgICAgIDQuMTcuIFsyMTZdTmV3IFRyYW5z YWN0aW9uIExvZyBGb3JtYXRzCisgICAgICAgICA0LjE3LjEuIFsyMTddVGhlIEJSSUVGIEZvcm1h dAorICAgICAgICAgNC4xNy4yLiBbMjE4XVRoZSBGVFAgRm9ybWF0CisgICAgICAgICA0LjE4LiBb MjE5XVVucHJlZml4aW5nIE5VTAorICAgICAgICAgNC4xOS4gWzIyMF1DbGVhci1DaGFubmVsIFBy b3RvY29sCisgICAgICAgICA0LjIwLiBbMjIxXVN0cmVhbWluZyBQcm90b2NvbAorICAgICAgICAg NC4yMC4xLiBbMjIyXUNvbW1hbmRzIGZvciBTdHJlYW1pbmcKKyAgICAgICAgIDQuMjAuMi4gWzIy M11FeGFtcGxlcyBvZiBTdHJlYW1pbmcKKyAgICAgICAgIDQuMjAuMi4xLiBbMjI0XVN0cmVhbWlu ZyBvbiBTb2NrZXQtdG8tU29ja2V0IENvbm5lY3Rpb25zCisgICAgICAgICA0LjIwLjIuMi4gWzIy NV1TdHJlYW1pbmcgb24gVGVsbmV0IENvbm5lY3Rpb25zCisgICAgICAgICA0LjIwLjIuMy4gWzIy Nl1TdHJlYW1pbmcgd2l0aCBMaW1pdGVkIFBhY2tldCBMZW5ndGgKKyAgICAgICAgIDQuMjAuMi40 LiBbMjI3XVN0cmVhbWluZyBvbiBEaWFsdXAgQ29ubmVjdGlvbnMKKyAgICAgICAgIDQuMjAuMi41 LiBbMjI4XVN0cmVhbWluZyBvbiBYLjI1IENvbm5lY3Rpb25zCisgICAgICAgICA0LjIwLjMuIFsy MjldU3RyZWFtaW5nIC0gUHJlbGltaW5hcnkgQ29uY2x1c2lvbnMKKyAgICAgICAgIDQuMjEuIFsy MzBdVGhlIFRSQU5TTUlUIENvbW1hbmQKKyAgICAgICAgIDQuMjIuIFsyMzFdQ29waW5nIHdpdGgg RmF1bHR5IEtlcm1pdCBJbXBsZW1lbnRhdGlvbnMKKyAgICAgICAgIDQuMjIuMS4gWzIzMl1GYWls dXJlIHRvIEFjY2VwdCBNb2Rlcm4gTmVnb3RpYXRpb24gU3RyaW5ncworICAgICAgICAgNC4yMi4y LiBbMjMzXUZhaWx1cmUgdG8gTmVnb3RpYXRlIDh0aC1iaXQgUHJlZml4aW5nCisgICAgICAgICA0 LjIyLjMuIFsyMzRdQ29ycnVwdCBGaWxlcworICAgICAgICAgNC4yMi40LiBbMjM1XVNwdXJpb3Vz IENhbmNlbGxhdGlvbnMKKyAgICAgICAgIDQuMjIuNS4gWzIzNl1TcHVyaW91cyBSZWZ1c2Fscwor ICAgICAgICAgNC4yMi42LiBbMjM3XUZhaWx1cmVzIGR1cmluZyB0aGUgRGF0YSBUcmFuc2ZlciBQ aGFzZQorICAgICAgICAgNC4yMi43LiBbMjM4XUZyYWN0dXJlZCBGaWxlbmFtZXMKKyAgICAgICAg IDQuMjIuOC4gWzIzOV1CYWQgRmlsZSBEYXRlcworICAgICAgICAgNC4yMy4gWzI0MF1GaWxlIFRy YW5zZmVyIFJlY292ZXJ5CisgICAgICAgICA0LjI0LiBbMjQxXUZJTEUgQ09MTElTSU9OIFVQREFU RSBDbGFyaWZpY2F0aW9uCisgICAgICAgICA0LjI1LiBbMjQyXUF1dG9kb3dubG9hZCBJbXByb3Zl bWVudHMKKyAgICAgKDUpIFsyNDNdQ0xJRU5UL1NFUlZFUgorICAgICAgICAgNS4wLiBbMjQ0XUhp bnRzCisgICAgICAgICA1LjEuIFsyNDVdTmV3IENvbW1hbmQtTGluZSBPcHRpb25zCisgICAgICAg ICA1LjIuIFsyNDZdTmV3IENsaWVudCBDb21tYW5kcworICAgICAgICAgNS4zLiBbMjQ3XU5ldyBT ZXJ2ZXIgQ2FwYWJpbGl0aWVzCisgICAgICAgICA1LjMuMS4gWzI0OF1DcmVhdGluZyBhbmQgUmVt b3ZpbmcgRGlyZWN0b3JpZXMKKyAgICAgICAgIDUuMy4yLiBbMjQ5XURpcmVjdG9yeSBMaXN0aW5n cworICAgICAgICAgNS40LiBbMjUwXVN5bnRheCBmb3IgUmVtb3RlIEZpbGVuYW1lcyB3aXRoIEVt YmVkZGVkIFNwYWNlcworICAgICAgICAgNS41LiBbMjUxXUF1dG9tYXRpYyBPcmllbnRhdGlvbiBN ZXNzYWdlcyB1cG9uIERpcmVjdG9yeSBDaGFuZ2UKKyAgICAgICAgIDUuNi4gWzI1Ml1OZXcgU2Vy dmVyIENvbnRyb2xzCisgICAgICAgICA1LjcuIFsyNTNdVGltZW91dHMgZHVyaW5nIFJFTU9URSBI T1NUIENvbW1hbmQgRXhlY3V0aW9uCisgICAgICg2KSBbMjU0XUlOVEVSTkFUSU9OQUwgQ0hBUkFD VEVSIFNFVFMKKyAgICAgICAgIDYuMC4gWzI1NV1JU08gODg1OS0xNSBMYXRpbiBBbHBoYWJldCA5 CisgICAgICAgICA2LjEuIFsyNTZdVGhlIEhQLVJvbWFuOCBDaGFyYWN0ZXIgU2V0CisgICAgICAg ICA2LjIuIFsyNTddR3JlZWsgQ2hhcmFjdGVyIFNldHMKKyAgICAgICAgIDYuMy4gWzI1OF1BZGRp dGlvbmFsIExhdGluLTIgQ2hhcmFjdGVyIFNldHMKKyAgICAgICAgIDYuNC4gWzI1OV1BZGRpdGlv bmFsIEN5cmlsbGljIENoYXJhY3RlciBTZXRzCisgICAgICAgICA2LjUuIFsyNjBdQXV0b21hdGlj IENoYXJhY3Rlci1TZXQgU3dpdGNoaW5nCisgICAgICAgICA2LjYuIFsyNjFdVW5pY29kZQorICAg ICAgICAgNi42LjEuIFsyNjJdT3ZlcnZpZXcgb2YgVW5pY29kZQorICAgICAgICAgNi42LjIuIFsy NjNdVUNTIEJ5dGUgT3JkZXIKKyAgICAgICAgIDYuNi4yLiBbMjY0XVVDUyBUcmFuc2Zvcm1hdGlv biBGb3JtYXRzCisgICAgICAgICA2LjYuMy4gWzI2NV1Db25mb3JtYW5jZSBMZXZlbHMKKyAgICAg ICAgIDYuNi40LiBbMjY2XVJlbGF0aW9uc2hpcCBvZiBVbmljb2RlIHdpdGggS2VybWl0J3MgT3Ro ZXIgQ2hhcmFjdGVyIFNldHMKKyAgICAgICAgIDYuNi41LiBbMjY3XUtlcm1pdCdzIFVuaWNvZGUg RmVhdHVyZXMKKyAgICAgICAgIDYuNi41LjEuIFsyNjhdRmlsZSBUcmFuc2ZlcgorICAgICAgICAg Ni42LjUuMi4gWzI2OV1UaGUgVFJBTlNMQVRFIENvbW1hbmQKKyAgICAgICAgIDYuNi41LjMuIFsy NzBdVGVybWluYWwgQ29ubmVjdGlvbgorICAgICAgICAgNi42LjUuNC4gWzI3MV1UaGUgVFJBTlNN SVQgQ29tbWFuZAorICAgICAgICAgNi42LjUuNS4gWzI3Ml1TdW1tYXJ5IG9mIEtlcm1pdCBVbmlj b2RlIENvbW1hbmRzCisgICAgICAgICA2LjcuIFsyNzNdQ2xpZW50L1NlcnZlciBDaGFyYWN0ZXIt U2V0IFN3aXRjaGluZworICAgICAoNykgWzI3NF1TQ1JJUFQgUFJPR1JBTU1JTkcKKyAgICAgICAg IDcuMC4gWzI3NV1CdWcgRml4ZXMKKyAgICAgICAgIDcuMS4gWzI3Nl1UaGUgSU5QVVQgQ29tbWFu ZAorICAgICAgICAgNy4xLjEuIFsyNzddSU5QVVQgVGltZW91dHMKKyAgICAgICAgIDcuMS4yLiBb Mjc4XU5ldyBJTlBVVCBDb250cm9scworICAgICAgICAgNy4xLjMuIFsyNzldSU5QVVQgd2l0aCBQ YXR0ZXJuIE1hdGNoaW5nCisgICAgICAgICA3LjEuNC4gWzI4MF1UaGUgSU5QVVQgTWF0Y2ggUmVz dWx0CisgICAgICAgICA3LjIuIFsyODFdTmV3IG9yIEltcHJvdmVkIEJ1aWx0LUluIFZhcmlhYmxl cworICAgICAgICAgNy4zLiBbMjgyXU5ldyBvciBJbXByb3ZlZCBCdWlsdC1JbiBGdW5jdGlvbnMK KyAgICAgICAgIDcuNC4gWzI4M11OZXcgSUYgQ29uZGl0aW9ucworICAgICAgICAgNy41LiBbMjg0 XVVzaW5nIE1vcmUgdGhhbiBUZW4gTWFjcm8gQXJndW1lbnRzCisgICAgICAgICA3LjYuIFsyODVd Q2xhcmlmaWNhdGlvbiBvZiBGdW5jdGlvbiBDYWxsIFN5bnRheAorICAgICAgICAgNy43LiBbMjg2 XUF1dG9kb3dubG9hZCBkdXJpbmcgSU5QVVQgQ29tbWFuZCBFeGVjdXRpb24KKyAgICAgICAgIDcu OC4gWzI4N11CdWlsdC1pbiBIZWxwIGZvciBGdW5jdGlvbnMuCisgICAgICAgICA3LjkuIFsyODhd VmFyaWFibGUgQXNzaWdubWVudHMKKyAgICAgICAgIDcuOS4xLiBbMjg5XUFzc2lnbm1lbnQgT3Bl cmF0b3JzCisgICAgICAgICA3LjkuMi4gWzI5MF1OZXcgQXNzaWdubWVudCBDb21tYW5kcworICAg ICAgICAgNy4xMC4gWzI5MV1BcnJheXMKKyAgICAgICAgIDcuMTAuMS4gWzI5Ml1BcnJheSBJbml0 aWFsaXplcnMKKyAgICAgICAgIDcuMTAuMi4gWzI5M11UdXJuaW5nIGEgU3RyaW5nIGludG8gYW4g QXJyYXkgb2YgV29yZHMKKyAgICAgICAgIDcuMTAuMy4gWzI5NF1BcnJheXMgb2YgRmlsZW5hbWVz CisgICAgICAgICA3LjEwLjQuIFsyOTVdQXV0b21hdGljIEFycmF5cworICAgICAgICAgNy4xMC41 LiBbMjk2XVNvcnRpbmcgQXJyYXlzCisgICAgICAgICA3LjEwLjYuIFsyOTddRGlzcGxheWluZyBB cnJheXMKKyAgICAgICAgIDcuMTAuNy4gWzI5OF1PdGhlciBBcnJheSBPcGVyYXRpb25zCisgICAg ICAgICA3LjEwLjguIFsyOTldSGludHMgZm9yIFVzaW5nIEFycmF5cworICAgICAgICAgNy4xMC45 LiBbMzAwXURvLUl0LVlvdXJzZWxmIEFycmF5cworICAgICAgICAgNy4xMC4xMC4gWzMwMV1Bc3Nv Y2lhdGl2ZSBBcnJheXMKKyAgICAgICAgIDcuMTEuIFszMDJdT1VUUFVUIENvbW1hbmQgSW1wcm92 ZW1lbnRzCisgICAgICAgICA3LjEyLiBbMzAzXUZ1bmN0aW9uIGFuZCBWYXJpYWJsZSBEaWFnbm9z dGljcworICAgICAgICAgNy4xMy4gWzMwNF1SZXR1cm4gVmFsdWUgb2YgTWFjcm9zCisgICAgICAg ICA3LjE0LiBbMzA1XVRoZSBBU1NFUlQsIEZBSUwsIGFuZCBTVUNDRUVEIENvbW1hbmRzLgorICAg ICAgICAgNy4xNS4gWzMwNl1Vc2luZyBBbGFybXMKKyAgICAgICAgIDcuMTYuIFszMDddUGFzc2lu ZyBBcmd1bWVudHMgdG8gQ29tbWFuZCBGaWxlcworICAgICAgICAgNy4xNy4gWzMwOF1EaWFsb2dz IHdpdGggVGltZWQgUmVzcG9uc2VzCisgICAgICAgICA3LjE4LiBbMzA5XUluY3JlYXNlZCBGbGV4 aWJpbGl0eSBvZiBTV0lUQ0ggQ2FzZSBMYWJlbHMKKyAgICAgICAgIDcuMTkuICJbMzEwXUtlcmJh bmciIFNjcmlwdHMKKyAgICAgICAgIDcuMjAuIFszMTFdSUYgYW5kIFhJRiBTdGF0ZW1lbnQgU3lu dGF4CisgICAgICAgICA3LjIwLjEuIFszMTJdVGhlIElGL1hJRiBEaXN0aW5jdGlvbgorICAgICAg ICAgNy4yMC4yLiBbMzEzXUJvb2xlYW4gRXhwcmVzc2lvbnMgKFRoZSBJRi9XSElMRSBDb25kaXRp b24pCisgICAgICAgICA3LjIxLiBbMzE0XVNjcmVlbiBGb3JtYXR0aW5nIGFuZCBDdXJzb3IgQ29u dHJvbAorICAgICAgICAgNy4yMi4gWzMxNV1FdmFsdWF0aW5nIEFyaXRobWV0aWMgRXhwcmVzc2lv bnMKKyAgICAgICAgIDcuMjMuIFszMTZdRmxvYXRpbmctUG9pbnQgQXJpdGhtZXRpYworICAgICAg ICAgNy4yNC4gWzMxN11UcmFjaW5nIFNjcmlwdCBFeGVjdXRpb24KKyAgICAgICAgIDcuMjUuIFsz MThdQ29tcGFjdCBTdWJzdHJpbmcgTm90YXRpb24KKyAgICAgICAgIDcuMjYuIFszMTldTmV3IFdB SVQgQ29tbWFuZCBPcHRpb25zCisgICAgICAgICA3LjI2LjEuIFszMjBdV2FpdGluZyBmb3IgTW9k ZW0gU2lnbmFscworICAgICAgICAgNy4yNi4yLiBbMzIxXVdhaXRpbmcgZm9yIEZpbGUgRXZlbnRz CisgICAgICAgICA3LjI3LiBbMzIyXVJlbGF4ZWQgRk9SIGFuZCBTV0lUQ0ggU3ludGF4CisgICAg ICg4KSBbMzIzXVVTSU5HIE9USEVSIEZJTEUgVFJBTlNGRVIgUFJPVE9DT0xTCisgICAgICg5KSBb MzI0XUNPTU1BTkQtTElORSBPUFRJT05TCisgICAgICAgICA5LjAuIFszMjVdRXh0ZW5kZWQtRm9y bWF0IENvbW1hbmQtTGluZSBPcHRpb25zCisgICAgICAgICA5LjEuIFszMjZdQ29tbWFuZCBMaW5l IFBlcnNvbmFsaXRpZXMKKyAgICAgICAgIDkuMi4gWzMyN11CdWlsdC1pbiBIZWxwIGZvciBDb21t YW5kIExpbmUgT3B0aW9ucworICAgICAgICAgOS4zLiBbMzI4XU5ldyBDb21tYW5kLUxpbmUgT3B0 aW9ucworICAgICgxMCkgWzMyOV1DLUtFUk1JVCBBTkQgRy1LRVJNSVQKKworSUlJLiBbMzMwXUFQ UEVORElDRVMKKworSUlJLjEuIFszMzFdQ2hhcmFjdGVyIFNldCBUYWJsZXMKK0lJSS4xLjEuIFsz MzJdVGhlIEhld2xldHQgUGFja2FyZCBSb21hbjggQ2hhcmFjdGVyIFNldAorSUlJLjEuMi4gWzMz M11HcmVlayBDaGFyYWN0ZXIgU2V0cworSUlJLjEuMi4xLiBbMzM0XVRoZSBJU08gODg1OS03IExh dGluIC8gR3JlZWsgQWxwaGFiZXQKK0lJSS4xLjIuMi4gWzMzNV1UaGUgRUxPVCA5MjcgQ2hhcmFj dGVyIFNldAorSUlJLjEuMi4zLiBbMzM2XVBDIENvZGUgUGFnZSA4NjkKK0lJSS4yLiBbMzM3XVVw ZGF0ZWQgQ291bnRyeSBDb2RlcworCitJVi4gWzMzOF1FUlJBVEEgJiBDT1JSSUdFTkRBOiBDb3Jy ZWN0aW9ucyB0byAiVXNpbmcgQy1LZXJtaXQiIDJuZCBFZGl0aW9uLgorVi4gWzMzOV1BRERJVElP TkFMIENPUFlSSUdIVCBOT1RJQ0VTCisKK0kuIEMtS0VSTUlUIERPQ1VNRU5UQVRJT04KKworICAg VGhlIHVzZXIgbWFudWFsIGZvciBDLUtlcm1pdCBpczoKKworICAgICBGcmFuayBkYSBDcnV6IGFu ZCBDaHJpc3RpbmUgTS4gR2lhbm9uZSwgWzM0MF1Vc2luZyBDLUtlcm1pdCwgU2Vjb25kCisgICAg IEVkaXRpb24sIERpZ2l0YWwgUHJlc3MgLyBCdXR0ZXJ3b3J0aC1IZWluZW1hbm4sIFdvYnVybiwg TUEsIDE5OTcsCisgICAgIDYyMiBwYWdlcywgSVNCTiAxLTU1NTU4LTE2NC0xLgorCisgICBbMzQx XUNMSUNLIEhFUkUgZm9yIHJldmlld3MuCisKKyAgIFRoZSBwcmVzZW50IGRvY3VtZW50IGlzIGEg c3VwcGxlbWVudCB0byBVc2luZyBDLUtlcm1pdCAybmQgRWQsIG5vdCBhCisgICByZXBsYWNlbWVu dCBmb3IgaXQuCisKKyAgIFVTIHNpbmdsZS1jb3B5IHByaWNlOiAkNTIuOTU7IHF1YW50aXR5IGRp c2NvdW50cyBhdmFpbGFibGUuIEF2YWlsYWJsZQorICAgaW4gYm9va3N0b3JlcyBvciBkaXJlY3Rs eSBmcm9tIENvbHVtYmlhIFVuaXZlcnNpdHk6CisKKyAgVGhlIEtlcm1pdCBQcm9qZWN0CisgIENv bHVtYmlhIFVuaXZlcnNpdHkKKyAgNjEyIFdlc3QgMTE1dGggU3RyZWV0CisgIE5ldyBZb3JrIE5Z ICAxMDAyNS03Nzk5CisgIFVTQQorICBUZWxlcGhvbmU6ICsxICgyMTIpIDg1NC0zNzAzCisgIEZh eDogICAgICAgKzEgKDIxMikgNjYyLTY0NDIKKworICAgRG9tZXN0aWMgYW5kIG92ZXJzZWFzIG9y ZGVycyBhY2NlcHRlZC4gUHJpY2U6IFVTICQ0NC45NSAoVVMsIENhbmFkYSwKKyAgIGFuZCBNZXhp Y28pLiBTaGlwcGluZzogJDQuMDAgd2l0aGluIHRoZSBVU0E7ICQxNS4wMCB0byBhbGwgb3RoZXIK KyAgIGNvdW50cmllcy4gT3JkZXJzIG1heSBiZSBwYWlkIGJ5IE1hc3RlckNhcmQgb3IgVmlzYSwg b3IgcHJlcGFpZCBieQorICAgY2hlY2sgaW4gVVMgZG9sbGFycy4gQWRkICQ2NSBiYW5rIGZlZSBm b3IgY2hlY2tzIG5vdCBkcmF3biBvbiBhIFVTCisgICBiYW5rLiBEbyBub3QgaW5jbHVkZSBzYWxl cyB0YXguIElucXVpcmUgYWJvdXQgcXVhbnRpdHkgZGlzY291bnRzLgorCisgICBZb3UgY2FuIGFs c28gb3JkZXIgYnkgcGhvbmUgZnJvbSB0aGUgcHVibGlzaGVyLCBEaWdpdGFsIFByZXNzIC8KKyAg IFszNDJdQnV0dGVyd29ydGgtSGVpbmVtYW5uLCB3aXRoIE1hc3RlckNhcmQsIFZpc2EsIG9yIEFt ZXJpY2FuIEV4cHJlc3M6CisKKyAgKzEgODAwIDM2Ni0yNjY1ICAgKFdvYnVybiwgTWFzc2FjaHVz ZXR0cyBvZmZpY2UgZm9yIFVTQSAmIENhbmFkYSkKKyAgKzQ0IDE4NjUgMzE0NjI3ICAgKE94Zm9y ZCwgRW5nbGFuZCBkaXN0cmlidXRpb24gY2VudHJlIGZvciBVSyAmIEV1cm9wZSkKKyAgKzYxIDAz IDkyNDUgNzExMSAgKE1lbGJvdXJuZSwgVmljLCBvZmZpY2UgZm9yIEF1c3RyYWxpYSAmIE5aKQor ICArNjUgMzU2LTE5NjggICAgICAoU2luZ2Fwb3JlIG9mZmljZSBmb3IgQXNpYSkKKyAgKzI3ICgz MSkgMjY4MzExMSAgKER1cmJhbiBvZmZpY2UgZm9yIFNvdXRoIEFmcmljYSkKKworICAgQSBbMzQz XUdlcm1hbi1sYW5ndWFnZSBlZGl0aW9uIG9mIHRoZSBGaXJzdCBFZGl0aW9uIGlzIGFsc28gYXZh aWxhYmxlOgorCisgICAgIEZyYW5rIGRhIENydXogYW5kIENocmlzdGluZSBNLiBHaWFub25lLCBD LUtlcm1pdCAtIEVpbmbvv71ocnVuZyB1bmQKKyAgICAgUmVmZXJlbnosIFZlcmxhZyBIZWlueiBI ZWlzZSwgSGFubm92ZXIsIEdlcm1hbnkgKDE5OTQpLiBJU0JOCisgICAgIDMtODgyMjktMDIzLTQu IERldXRzY2ggdm9uIEdpc2JlcnQgVy4gU2Vsa2UuIFByaWNlOiBETSA4OCwwMC4gVmVybGFnCisg ICAgIEhlaW56IEhlaXNlIEdtYkggJiBDby4gS0csIEhlbHN0b3JmZXIgU3RyYXNzZSA3LCBELTMw NjI1IEhhbm5vdmVyLgorICAgICBUZWwuICs0OSAoMDUgMTEpIDUzIDUyLTAsIEZheC4gKzQ5ICgw NSAxMSkgNTMgNTItMSAyOS4KKworICAgVGhlIFszNDRdS2VybWl0IGZpbGUgdHJhbnNmZXIgcHJv dG9jb2wgaXMgc3BlY2lmaWVkIGluOgorCisgICAgIEZyYW5rIGRhIENydXosIEtlcm1pdCwgQSBG aWxlIFRyYW5zZmVyIFByb3RvY29sLCBEaWdpdGFsIFByZXNzLAorICAgICBCZWRmb3JkLCBNQSwg MTk4NywgMzc5IHBhZ2VzLCBJU0JOIDAtOTMyMzc2LTg4LTYuIFVTIHNpbmdsZS1jb3B5CisgICAg IHByaWNlOiAkMzkuOTUuIEF2YWlsYWJpbGl0eSBhcyBhYm92ZS4KKworICAgTmV3cyBhbmQgYXJ0 aWNsZXMgYWJvdXQgS2VybWl0IHNvZnR3YXJlIGFuZCBwcm90b2NvbCBhcmUgcHVibGlzaGVkCisg ICBwZXJpb2RpY2FsbHkgaW4gdGhlIGpvdXJuYWwsIFszNDVdS2VybWl0IE5ld3MuIFN1YnNjcmlw dGlvbnMgYXJlIGZyZWU7CisgICBjb250YWN0IENvbHVtYmlhIFVuaXZlcnNpdHkgYXQgdGhlIGFk ZHJlc3MgYWJvdmUuCisKKyAgIE9ubGluZSBuZXdzIGFib3V0IEtlcm1pdCBpcyBwdWJsaXNoZWQg aW4gdGhlCisgICBbMzQ2XWNvbXAucHJvdG9jb2xzLmtlcm1pdC5hbm5vdW5jZSBhbmQgWzM0N11j b21wLnByb3RvY29scy5rZXJtaXQubWlzYworICAgbmV3c2dyb3Vwcy4KKworSUkuIE5FVyBGRUFU VVJFUworCisgICBTdXBwb3J0IGZvciB0aGUgQmVsbCBMYWJzIFBsYW4gOSBvcGVyYXRpbmcgc3lz dGVtIHdhcyBhZGRlZCB0byB2ZXJzaW9uCisgICA2LjAgdG9vIGxhdGUgdG8gYmUgbWVudGlvbmVk IGluIHRoZSBib29rIChhbHRob3VnaCBpdCBkb2VzIGFwcGVhciBvbgorICAgdGhlIGNvdmVyKS4K KworICAgU3BlY2lmaWMgY2hhbmdlcyBhbmQgYWRkaXRpb25zIGFyZSBncm91cGVkIHRvZ2V0aGVy IGJ5IG1ham9yIHRvcGljLAorICAgcm91Z2hseSBjb3JyZXNwb25kaW5nIHRvIHRoZSBjaGFwdGVy cyBvZiBbMzQ4XVVzaW5nIEMtS2VybWl0LgorCiswLiBJTkNPTVBBVElCSUxJVElFUyBXSVRIIFBS RVZJT1VTIFJFTEVBU0VTCisKKyAgICAxLiBDLUtlcm1pdCA3LjAgdXNlcyBGQVNUIEtlcm1pdCBw cm90b2NvbCBzZXR0aW5ncyBieSBkZWZhdWx0LiBUaGlzCisgICAgICAgaW5jbHVkZXMgInVucHJl Zml4aW5nIiBvZiBjZXJ0YWluIGNvbnRyb2wgY2hhcmFjdGVycy4gQmVjYXVzZSBvZgorICAgICAg IHRoaXMsIGZpbGUgdHJhbnNmZXJzIHRoYXQgd29ya2VkIHdpdGggcHJldmlvdXMgcmVsZWFzZXMg bWlnaHQgbm90CisgICAgICAgd29yayBpbiB0aGUgbmV3IHJlbGVhc2UgKGJ1dCBpdCBpcyBtb3Jl IGxpa2VseSB0aGF0IHRoZXkgd2lsbCB3b3JrLAorICAgICAgIGFuZCBtdWNoIGZhc3RlcikuIElm IGEgdHJhbnNmZXIgZmFpbHMsIHlvdSdsbCBnZXQgYQorICAgICAgIGNvbnRleHQtc2Vuc2l0aXZl IGhpbnQgc3VnZ2VzdGluZyBwb3NzaWJsZSBjYXVzZXMgYW5kIGN1cmVzLgorICAgICAgIFVzdWFs bHkgU0VUIFBSRUZJWElORyBBTEwgZG9lcyB0aGUgdHJpY2suCisgICAgMi4gQy1LZXJtaXQgNy4w IHRyYW5zZmVycyBmaWxlcyBpbiBCSU5BUlkgbW9kZSBieSBkZWZhdWx0LiBUbyByZXN0b3JlCisg ICAgICAgdGhlIHByZXZpb3VzIGJlaGF2aW9yLCBwdXQgU0VUIEZJTEUgVFlQRSBURVhUIGluIHlv dXIgQy1LZXJtaXQKKyAgICAgICBpbml0aWFsaXphdGlvbiBmaWxlLgorICAgIDMuIE5vIG1hdHRl ciB3aGV0aGVyIEZJTEUgVFlQRSBpcyBCSU5BUlkgb3IgVEVYVCBieSBkZWZhdWx0LCBDLUtlcm1p dAorICAgICAgIDcuMCBub3cgc3dpdGNoZXMgYmV0d2VlbiB0ZXh0IGFuZCBiaW5hcnkgbW9kZSBh dXRvbWF0aWNhbGx5IG9uIGEKKyAgICAgICBwZXItZmlsZSBiYXNpcyBhY2NvcmRpbmcgdG8gdmFy aW91cyBjcml0ZXJpYSwgaW5jbHVkaW5nIChhKSB3aGljaAorICAgICAgIGtpbmQgb2YgcGxhdGZv cm0gaXMgb24gdGhlIG90aGVyIGVuZCBvZiB0aGUgY29ubmVjdGlvbiAoaWYga25vd24pLAorICAg ICAgIChiKSB0aGUgdmVyc2lvbiBvZiBLZXJtaXQgb24gdGhlIG90aGVyIGVuZCwgYW5kIChjKSB0 aGUgZmlsZSdzIG5hbWUKKyAgICAgICAoc2VlIFszNDldU2VjdGlvbiA0LCBlc3BlY2lhbGx5IFsz NTBdNC4zKS4gVG8gZGlzYWJsZSB0aGlzCisgICAgICAgYXV0b21hdGljIHN3aXRjaGluZyBhbmQg cmVzdG9yZSB0aGUgZWFybGllciBiZWhhdmlvciwgcHV0IFNFVAorICAgICAgIFRSQU5TRkVSIE1P REUgTUFOVUFMIGluIHlvdXIgQy1LZXJtaXQgaW5pdGlhbGl6YXRpb24gZmlsZS4gVG8KKyAgICAg ICBkaXNhYmxlIGF1dG9tYXRpYyBzd2l0Y2hpbmcgZm9yIGEgcGFydGljdWxhciB0cmFuc2Zlciwg aW5jbHVkZSBhCisgICAgICAgL1RFWFQgb3IgL0JJTkFSWSBzd2l0Y2ggd2l0aCB5b3VyIFNFTkQg b3IgR0VUIGNvbW1hbmQuCisgICAgNC4gVGhlIFJFU0VORCBhbmQgUkVHRVQgY29tbWFuZHMgYXV0 b21hdGljYWxseSBzd2l0Y2ggdG8gYmluYXJ5IG1vZGU7CisgICAgICAgcHJldmlvdXNseSBpZiBS RVNFTkQgb3IgUkVHRVQgd2VyZSBhdHRlbXB0ZWQgd2hlbiBGSUxFIFRZUEUgd2FzCisgICAgICAg VEVYVCwgdGhlc2UgY29tbWFuZHMgd291bGQgZmFpbCBpbW1lZGlhdGVseSwgd2l0aCBhIG1lc3Nh Z2UgdGVsbGluZworICAgICAgIHlvdSB0aGV5IHdvcmsgb25seSB3aGVuIHRoZSBGSUxFIFRZUEUg aXMgQklOQVJZLiBOb3cgdGhleSBzaW1wbHkgZG8KKyAgICAgICB0aGlzIGZvciB5b3UuIFNlZSBb MzUxXVNlY3Rpb24gNC4yMyBmb3IgYWRkaXRpb25hbCAoaW1wb3J0YW50KQorICAgICAgIGluZm9y bWF0aW9uLgorICAgIDUuIFNFVCBQUkVGSVhJTkcgQ0FVVElPVVMgYW5kIE1JTklNQUwgbm93IGJv dGggcHJlZml4IGxpbmVmZWVkICgxMCBhbmQKKyAgICAgICAxMzgpIGluIGNhc2UgcmxvZ2luLCBz c2gsIG9yIGN1IGFyZSAiaW4gdGhlIG1pZGRsZSIsIHNpbmNlCisgICAgICAgb3RoZXJ3aXNlIDxM Rj5+IG1pZ2h0IGFwcGVhciBpbiBLZXJtaXQgcGFja2V0cywgYW5kIHRoaXMgd291bGQKKyAgICAg ICBjYXVzZSBybG9naW4sIHNzaCwgb3IgY3UgdG8gZGlzY29ubmVjdCwgc3VzcGVuZCwgZXNjYXBl IGJhY2ssIG9yCisgICAgICAgb3RoZXJ3aXNlIHdyZWNrIHRoZSBmaWxlIHRyYW5zZmVyLiBYb24g YW5kIFhvZmYgYXJlIG5vdyBhbHdheXMKKyAgICAgICBwcmVmaXhlZCB0b28sIGV2ZW4gd2hlbiBY b24vWG9mZiBmbG93IGNvbnRyb2wgaXMgbm90IGluIGVmZmVjdCwKKyAgICAgICBzaW5jZSB1bnBy ZWZpeGluZyB0aGVtIGhhcyBwcm92ZW4gZGFuZ2Vyb3VzIG9uIFRDUC9JUCBjb25uZWN0aW9ucy4K KyAgICA2LiBJbiBVTklYLCBWTVMsIFdpbmRvd3MsIGFuZCBPUy8yLCB0aGUgRElSRUNUT1JZIGNv bW1hbmQgaXMgYnVpbHQKKyAgICAgICBpbnRvIEMtS2VybWl0IGl0c2VsZiByYXRoZXIgdGhhbiBp bXBsZW1lbnRlZCBieSBydW5uaW5nIGFuIGV4dGVybmFsCisgICAgICAgY29tbWFuZCBvciBwcm9n cmFtLiBUaGUgYnVpbHQtaW4gY29tbWFuZCBtaWdodCBub3QgYmVoYXZlIHRoZSB3YXkKKyAgICAg ICB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgZXh0ZXJuYWwgb25lIGRpZCwgYnV0IG1hbnkgb3B0aW9u cyBhcmUKKyAgICAgICBhdmFpbGFibGUgZm9yIGN1c3RvbWl6YXRpb24uIE9mIGNvdXJzZSB0aGUg dW5kZXJseWluZworICAgICAgIHBsYXRmb3JtLXNwZWNpZmljIGNvbW1hbmQgY2FuIHN0aWxsIGJl IGFjY2Vzc2VkIHdpdGggIiEiLCAiQCIsIG9yCisgICAgICAgIlJVTiIgd2hlcmV2ZXIgdGhlIGlu c3RhbGxhdGlvbiBkb2VzIG5vdCBmb3JiaWQuIEluIFVOSVgsIHRoZSAibHMiCisgICAgICAgY29t bWFuZCBjYW4gYmUgYWNjZXNzZWQgZGlyZWN0bHkgYXMgImxzIiBpbiBDLUtlcm1pdC4gU2VlCisg ICAgICAgWzM1Ml1TZWN0aW9uIDQuNS4xIGZvciBkZXRhaWxzLgorICAgIDcuIFNFTkQgPyBwcmlu dHMgYSBsaXN0IG9mIHN3aXRjaGVzIHJhdGhlciB0aGFuIGEgbGlzdCBvZiBmaWxlbmFtZXMuCisg ICAgICAgSWYgeW91IHdhbnQgdG8gc2VlIGEgbGlzdCBvZiBmaWxlbmFtZXMsIHVzZSBhIChzeXN0 ZW0tZGVwZW5kZW50KQorICAgICAgIGNvbnN0cnVjdGlvbiBzdWNoIGFzIFNFTkQgLi8/IChmb3Ig VU5JWCwgV2luZG93cywgb3IgT1MvMiksIFNFTkQKKyAgICAgICBbXT8gKFZNUyksIGV0Yy4gU2Vl IFszNTNdU2VjdGlvbnMgMS41IGFuZCBbMzU0XTQuNy4xLgorICAgIDguIEluIFVOSVgsIE9TLTks IGFuZCBLZXJtaXQgOTUsIHRoZSB3aWxkY2FyZCBjaGFyYWN0ZXJzIGluIHByZXZpb3VzCisgICAg ICAgdmVyc2lvbnMgd2VyZSAqIGFuZCA/LiBJbiBDLUtlcm1pdCA3LjAgdGhleSBhcmUgKiwgPywg WywgXSwgeywgYW5kCisgICAgICAgfSwgd2l0aCBkYXNoIHVzZWQgaW5zaWRlIFtdJ3MgdG8gZGVu b3RlIHJhbmdlcyBhbmQgY29tbWEgdXNlZAorICAgICAgIGluc2lkZSB7fSB0byBzZXBhcmF0ZSBs aXN0IGVsZW1lbnRzLiBJZiB5b3UgbmVlZCB0byBpbmNsdWRlIGFueSBvZgorICAgICAgIHRoZXNl IGNoYXJhY3RlcnMgbGl0ZXJhbGx5IGluIGEgZmlsZW5hbWUsIHByZWNlZGUgZWFjaCBvbmUgd2l0 aAorICAgICAgIGJhY2tzbGFzaCAoXCkuIFNlZSBbMzU1XVNlY3Rpb24gNC45LgorICAgIDkuIFNF VCBRVUlFVCB7IE9OLCBPRkYgfSBpcyBub3cgb24gdGhlIGNvbW1hbmQgc3RhY2ssIGp1c3QgbGlr ZSBTRVQKKyAgICAgICBJTlBVVCBDQVNFLCBTRVQgQ09VTlQsIFNFVCBNQUNSTyBFUlJPUiwgZXRj LCBhcyBkZXNjcmliZWQgb24gcC40NTgKKyAgICAgICBvZiBbMzU2XVVzaW5nIEMtS2VybWl0LCAy bmQgRWRpdGlvbi4gVGhpcyBhbGxvd3MgYW55IG1hY3JvIG9yCisgICAgICAgY29tbWFuZCBmaWxl IHRvIFNFVCBRVUlFVCBPTiBvciBPRkYgd2l0aG91dCB3b3JyeWluZyBhYm91dCBzYXZpbmcKKyAg ICAgICBhbmQgcmVzdG9yaW5nIHRoZSBnbG9iYWwgUVVJRVQgdmFsdWUuIEZvciBleGFtcGxlLCB0 aGlzIGxldHMgeW91CisgICAgICAgd3JpdGUgYSBzY3JpcHQgdGhhdCB0cmllcyBTRVQgTElORSBv biBsb3RzIG9mIGRldmljZXMgdW50aWwgaXQKKyAgICAgICBmaW5kcyBvbmUgZnJlZSB3aXRob3V0 IHNwZXdpbmcgb3V0IGxvYWRzIG9mIGVycm9yIG1lc3NhZ2VzLCBhbmQKKyAgICAgICBhbHNvIHdp dGhvdXQgZGlzdHVyYmluZyB0aGUgZ2xvYmFsIFFVSUVUIHNldHRpbmcsIHdoYXRldmVyIGl0IHdh cy4KKyAgIDEwLiBCZWNhdXNlIG9mIHRoZSBuZXcgIi4iIG9wZXJhdG9yICh3aGljaCBpbnRyb2R1 Y2VzIGFzc2lnbm1lbnRzKSwKKyAgICAgICBtYWNyb3Mgd2hvc2UgbmFtZXMgYmVnaW4gd2l0aCAi LiIgY2FuIG5vdCBiZSBpbnZva2VkICJieSBuYW1lIi4KKyAgICAgICBIb3dldmVyLCB0aGV5IHN0 aWxsIGNhbiBiZSBpbnZva2VkIHdpdGggRE8uCisgICAxMS4gVGhlIHN5bnRheCBvZiB0aGUgRVZB TFVBVEUgY29tbWFuZCBoYXMgY2hhbmdlZC4gU2VlIFszNTddU2VjdGlvbgorICAgICAgIDcuOS4y LiBUbyByZXN0b3JlIHRoZSBwcmV2aW91cyBzeW50YXgsIHVzZSBTRVQgRVZBTFVBVEUgT0xELgor ICAgMTIuIFRoZSBcdihkaXJlY3RvcnkpIHZhcmlhYmxlIG5vdyBpbmNsdWRlcyB0aGUgdHJhaWxp bmcgZGlyZWN0b3J5CisgICAgICAgc2VwYXJhdG9yOyBpbiBwcmV2aW91cyByZWxlYXNlcyBpdCBk aWQgbm90LiBUaGlzIGlzIHRvIGFsbG93CisgICAgICAgY29uc3RydWN0aW9ucyBzdWNoIGFzOgor ICBjZCBcdihkaXIpZGF0YS50bXAKKworICAgICAgIHRvIHdvcmsgYWNyb3NzIHBsYXRmb3JtcyB0 aGF0IG1pZ2h0IGhhdmUgZGlmZmVyZW50IGRpcmVjdG9yeQorICAgICAgIG5vdGF0aW9uLCBzdWNo IGFzIFVOSVgsIFdpbmRvd3MsIGFuZCBWTVMuCisgICAxMy4gUHJpb3IgdG8gQy1LZXJtaXQgNy4w LCB0aGUgRkxPVy1DT05UUk9MIHNldHRpbmcgd2FzIGdsb2JhbCBhbmQKKyAgICAgICBzdGlja3ku IEluIEMtS2VybWl0IDcuMCwgdGhlcmUgaXMgYW4gYXJyYXkgb2YgZGVmYXVsdCBmbG93LWNvbnRy b2wKKyAgICAgICB2YWx1ZXMgZm9yIGVhY2gga2luZCBvZiBjb25uZWN0aW9uLCB0aGF0IGFyZSBh cHBsaWVkIGF1dG9tYXRpY2FsbHkKKyAgICAgICBhdCBTRVQgTElORS9QT1JUL0hPU1QgdGltZS4g VGh1cyBhIFNFVCBGTE9XIGNvbW1hbmQgZ2l2ZW4gYmVmb3JlCisgICAgICAgU0VUIExJTkUvUE9S VC9IT1NUIGlzIGxpa2VseSB0byBiZSB1bmRvbmUuIFRoZXJlZm9yZSBTRVQgRkxPVyBjYW4KKyAg ICAgICBiZSBndWFyYW50ZWVkIHRvIGhhdmUgdGhlIGRlc2lyZWQgZWZmZWN0IG9ubHkgaWYgZ2l2 ZW4gYWZ0ZXIgdGhlCisgICAgICAgU0VUIExJTkUvUE9SVC9IT1NUIGNvbW1hbmQuCisgICAxNC4g Q2hhcmFjdGVyLXNldCB0cmFuc2xhdGlvbiB3b3JrcyBkaWZmZXJlbnRseSBpbiB0aGUgVFJBTlNN SVQgY29tbWFuZAorICAgICAgIHdoZW4gKGEpIHRoZSBmaWxlIGNoYXJhY3Rlci1zZXQgaXMgbm90 IHRoZSBzYW1lIGFzIHRoZSBsb2NhbCBlbmQgb2YKKyAgICAgICB0aGUgdGVybWluYWwgY2hhcmFj dGVyLXNldCwgb3IgKGIpIHdoZW4gdGhlIHRlcm1pbmFsIGNoYXJhY3Rlci1zZXQKKyAgICAgICBp cyBUUkFOU1BBUkVOVC4KKworMS4gUFJPR1JBTSBBTkQgRklMRSBNQU5BR0VNRU5UIEFORCBDT01N QU5EUworCisxLjAuIEJ1ZyBGaXhlcworCisgICBUaGUgZm9sbG93aW5nIHBhdGNoZXMgd2VyZSBp c3N1ZWQgdG8gY29ycmVjdCBidWdzIGluIEMtS2VybWl0IDYuMC4KKyAgIFRoZXNlIGFyZSBkZXNj cmliZWQgaW4gZGV0YWlsIGluIHRoZSA2LjAgUEFUQ0hFUyBmaWxlLiBBbGwgb2YgdGhlc2UKKyAg IGZpeGVzIGhhdmUgYmVlbiBpbmNvcnBvcmF0ZWQgaW4gQy1LZXJtaXQgNi4xIChuZXZlciByZWxl YXNlZCBleGNlcHQgYXMKKyAgIEs5NSAxLjEuMTYtMTcpIGFuZCA3LjAuCisKKyAwMDAxICAgQWxs IFVOSVggICAgICAgICBDLUtlcm1pdCBtaXNoYW5kbGVzIHRpbWVzdGFtcHMgb24gZmlsZXMgYmVm b3JlIDE5NzAKKyAwMDAyICAgU29sYXJpcyAyLjUrKyAgICBDb21waWxhdGlvbiBlcnJvciBvbiBT b2xhcmlzIDIuNSB3aXRoIFBybyBDCisgMDAwMyAgIEFsbCBWTVMgICAgICAgICAgQ0tFUk1JVC5J TkkgRml4IGZvciBWTVMKKyAwMDA0ICAgVk1TL1ZBWC9VQ1ggMi4wICBDLUtlcm1pdCA2LjAgY2Fu J3QgVEVMTkVUIG9uIFZBWC9WTVMgd2l0aCBVQ1ggMi4wCisgMDAwNSAgIEFsbCAgICAgICAgICAg ICAgQy1LZXJtaXQgTWlnaHQgU2VuZCBQYWNrZXRzIE91dHNpZGUgV2luZG93CisgMDAwNiAgIEFs bCAgICAgICAgICAgICAgTU9WRSBmcm9tIFNFTkQtTElTVCBkb2VzIG5vdCBkZWxldGUgb3JpZ2lu YWwgZmlsZXMKKyAwMDA3ICAgU29sYXJpcyAyLjUrKyAgICBIaWdoZXIgc2VyaWFsIHNwZWVkcyBv biBTb2xhcmlzIDIuNQorIDAwMDggICBBbGwgICAgICAgICAgICAgIEMtS2VybWl0IGFwcGxpY2F0 aW9uIGZpbGUgbmFtZSBjYW4ndCBjb250YWluIHNwYWNlcworIDAwMDkgICBBVCZUIDczMDAgVU5J WFBDIHNldHVpZCBhbmQgaGFyZHdhcmUgZmxvdy1jb250cm9sIHByb2JsZW1zCisgMDAxMCAgIExp bnV4IG9uIEFscGhhICAgUGF0Y2ggdG8gbWFrZSBja3V0aW8uYyBjb21waWxlIG9uIExpbnV4L0Fs cGhhCisgMDAxMSAgIE9TLTkvNjgwMDAgMi40ICAgUGF0Y2ggdG8gbWFrZSBjazljb24uYyBjb21w aWxlIG9uIE9TLTkvNjgwMDAgMi40CisgMDAxMiAgIE1XIENvaGVyZW50IDQuMiAgUGF0Y2hlcyBm b3Igc3VjY2Vzc2Z1bCBidWlsZCBvbiBDb2hlcmVudCA0LjIKKyAwMDEzICAgU0lOSVgtWSA1LjQz ICAgICAiZGVsYXkiIHZhcmlhYmxlIGNvbmZsaWN0cyB3aXRoIDxzeXMvY2xvY2suaD4KKyAwMDE0 ICAgVk1TL1ZBWC9DTVUtSVAgICBTdWJqZWN0OiBQYXRjaGVzIGZvciBWQVgvVk1TIDUueCArIENN VS1JUAorIDAwMTUgICBBbGwgICAgICAgICAgICAgIFhFQ0hPIGRvZXNuJ3QgZmx1c2ggaXRzIG91 dHB1dAorIDAwMTYgICBWTVMgICAgICAgICAgICAgIENEIGFuZCBvdGhlciBkaXJlY3Rvcnkgb3Bl cmF0aW9ucyBtaWdodCBub3Qgd29yaworIDAwMTcgICBMaW51eCAxLjIueCsrICAgIFVzZSBzdGFu ZGFyZCBQT1NJWCBpbnRlcmZhY2UgZm9yIGhpZ2ggc2VyaWFsIHNwZWVkcworIDAwMTggICBVTklY ICAgICAgICAgICAgIFNFVCBXSUxEQ0FSRC1FWFBBTlNJT04gU0hFTEwgZHVtcHMgY29yZQorIDAw MTkgICBBbGwgICAgICAgICAgICAgIEhheWVzIFYuMzQgbW9kZW0gaW5pdCBzdHJpbmcgcHJvYmxl bQorIDAwMjAgICBBbGwgICAgICAgICAgICAgIFJFQUQgY29tbWFuZCBkb2VzIG5vdCBmYWlsIGlm IGZpbGUgbm90IG9wZW4KKyAwMDIxICAgQWxsICAgICAgICAgICAgICBQcm9ibGVtcyB3aXRoIGxv bmcgZnVuY3Rpb24gYXJndW1lbnRzCisgMDAyMiAgIEFsbCAgICAgICAgICAgICAgQ2VydGFpbiBc ZnVuY3Rpb24oKXMgY2FuIG1pc2JlaGF2ZQorIDAwMjMgICBBbGwgICAgICAgICAgICAgIFggTU9E IDAgY3Jhc2hlcyBwcm9ncmFtCisgMDAyNCAgIEFsbCAgICAgICAgICAgICAgSW50ZXJuYWwgYnVs bGV0cHJvb2ZpbmcgZm9yIGxvd2VyKCkgZnVuY3Rpb24KKyAwMDI1ICAgT3BlbkJTRCAgICAgICAg ICBSZWFsIE9wZW5CU0Qgc3VwcG9ydCBmb3IgQy1LZXJtaXQgNi4wCisgMDAyNiAgIEFsbCAgICAg ICAgICAgICAgSW5jb3JyZWN0IGNoZWNrcyBmb3IgbWFjcm8vY29tbWFuZC1maWxlIG5lc3Rpbmcg ZGVwdGgKKyAwMDI3ICAgQWxsICAgICAgICAgICAgICBBTlNXRVIgZG9lc24ndCBhdXRvbWF0aWNh bGx5IENPTk5FQ1QKKyAwMDI4ICAgQWxsICAgICAgICAgICAgICBPdmVyemVhbG91cyBFWElUIHdh cm5pbmcKKyAwMDI5ICAgQWxsICAgICAgICAgICAgICBPVVRQVVQgZG9lc24ndCBlY2hvIHdoZW4g RFVQTEVYIGlzIEhBTEYKKyAwMDMwICAgQWxsICAgICAgICAgICAgICBNaW5vciBwcm9ibGVtcyB3 aXRoIFJFTU9URSBESVJFQ1RPUlkvREVMRVRFL2V0YworIDAwMzEgICBBbGwgICAgICAgICAgICAg IENIRUNLIGNvbW1hbmQgYnJva2VuCisgMDAzMiAgIEFsbCAgICAgICAgICAgICAgUHJvYmxlbSB3 aXRoIFNFVCBUUkFOU01JVCBFQ0hPCisgMDAzMyAgIFVOSVgsIFZNUywgZXRjICAgSEVMUCBTRVQg U0VSVkVSIHNheXMgdG9vIG11Y2gKKyAwMDM0ICAgQWxsICAgICAgICAgICAgICBSRUFEIGFuZCAh UkVBRCB0b28gcGlja3kgYWJvdXQgbGluZSB0ZXJtaW5hdG9ycworIDAwMzUgICBBbGwgICAgICAg ICAgICAgIEVORCBmcm9tIGluc2lkZSBTV0lUQ0ggZG9lc24ndCB3b3JrCisgMDAzNiAgIEFsbCAg ICAgICAgICAgICAgUHJvYmxlbSB0ZWxuZXR0aW5nIHRvIG11bHRpaG9tZWQgaG9zdHMKKyAwMDM3 ICAgQWxsICAgICAgICAgICAgICBSZWRpcmVjdGlvbiBmYWlsdXJlcyBpbiBSRU1PVEUgeHh4ID4g ZmlsZQorCisgICBSRURJUkVDVCB3YXMgbWlzc2luZyBpbiBtYW55IFVOSVggQy1LZXJtaXQgaW1w bGVtZW50YXRpb25zOyBpbiB2ZXJzaW9uCisgICA3LjAsIGl0IHNob3VsZCBiZSBhdmFpbGFibGUg aW4gYWxsIG9mIHRoZW0uCisKKzEuMS4gQ29tbWFuZCBDb250aW51YXRpb24KKworICAgQ29tbWVu dHMgdGhhdCBzdGFydCB3aXRoICI7IiBvciAiIyIgY2FuIG5vIGxvbmdlciBiZSBjb250aW51ZWQu IEluOgorCisgIDsgdGhpcyBpcyBhIGNvbW1lbnQgLQorICBlY2hvIGJsYWgKKworICAgdGhlIEVD SE8gY29tbWFuZCB3aWxsIGV4ZWN1dGUsIHJhdGhlciB0aGFuIGJlaW5nIHRha2VuIGFzIGEKKyAg IGNvbnRpbnVhdGlvbiBvZiB0aGUgcHJlY2VkaW5nIGNvbW1lbnQgbGluZS4gVGhpcyBhbGxvd3Mg ZWFzeQorICAgImNvbW1lbnRpbmcgb3V0IiBvZiBjb21tYW5kcyBmcm9tIG1hY3JvIGRlZmluaXRp b25zLgorCisgICBIb3dldmVyLCB0aGUgdGV4dCBvZiB0aGUgQ09NTUVOVCBjb21tYW5kIGNhbiBz dGlsbCBiZSBjb250aW51ZWQgb250bworICAgc3Vic2VxdWVudCBsaW5lczoKKworICBjb21tZW50 IHRoaXMgaXMgYSBjb21tZW50IC0KKyAgZWNobyBibGFoCisKKyAgIEFzIG9mIHZlcnNpb24gNi4w LCBiYWNrc2xhc2ggaXMgbm8gbG9uZ2VyIGEgdmFsaWQgY29udGludWF0aW9uCisgICBjaGFyYWN0 ZXIuIE9ubHkgaHlwaGVuIHNob3VsZCBiZSB1c2VkIGZvciBjb21tYW5kIGNvbnRpbnVhdGlvbi4g VGhpcyBpcworICAgdG8gbWFrZSBpdCBwb3NzaWJsZSB0byBpc3N1ZSBjb21tYW5kcyBsaWtlICJj ZCBhOlwiIG9uIERPUy1saWtlCisgICBzeXN0ZW1zLgorCisgICBBcyBvZiB2ZXJzaW9uIDcuMDoK KworICAgICAqIFlvdSBjYW4gcXVvdGUgYSBmaW5hbCBkYXNoIHRvIHByZXZlbnQgaXQgZnJvbSBi ZWluZyBhIGNvbnRpbnVhdGlvbgorICAgICAgIGNoYXJhY3RlcjoKKyAgZWNobyBmb29cLQorCisg ICAgICAgVGhpcyBwcmludHMgImZvby0iLiBUaGUgY29tbWFuZCBpcyBub3QgY29udGludWVkLgor ICAgICAqIFlvdSBjYW4gZW50ZXIgY29tbWFuZHMgc3VjaCBhczoKKyAgZWNobyBmb28gLSA7IHRo aXMgaXMgYSBjb21tZW50CisKKyAgICAgICBpbnRlcmFjdGl2ZWx5IGFuZCB0aGV5IGFyZSBwcm9w ZXJseSB0cmVhdGVkIGFzIGNvbnRpbnVlZCBjb21tYW5kcy4KKyAgICAgICBQcmV2aW91c2x5IHRo aXMgd29ya2VkIG9ubHkgaW4gY29tbWFuZCBmaWxlcy4KKworMS4yLiBFZGl0b3IgSW50ZXJmYWNl CisKKyAgIFNFVCBFRElUT1IgbmFtZSBbIG9wdGlvbnMgXQorICAgICAgICAgIExldHMgeW91IHNw ZWNpZnkgYSB0ZXh0LWVkaXRpbmcgcHJvZ3JhbS4gVGhlIG5hbWUgY2FuIGJlIGEgZnVsbHkKKyAg ICAgICAgICBzcGVjaWZpZWQgcGF0aG5hbWUgbGlrZSAvdXNyL2xvY2FsL2Jpbi9lbWFjczE5L2Vt YWNzLCBvciBpdCBjYW4KKyAgICAgICAgICBiZSB0aGUgbmFtZSBvZiBhbnkgcHJvZ3JhbSBpbiB5 b3VyIFBBVEgsIGUuZy4gInNldCBlZGl0b3IKKyAgICAgICAgICBlbWFjcyIuIEluIFZNUywgaXQg bXVzdCBiZSBhIERDTCBjb21tYW5kIGxpa2UgImVkaXQiLAorICAgICAgICAgICJlZGl0L3RwdSIs ICJlbWFjcyIsIGV0Yy4gSWYgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgRURJVE9SIGlzCisgICAg ICAgICAgZGVmaW5lZCB3aGVuIEtlcm1pdCBzdGFydHMsIGl0cyB2YWx1ZSBpcyB0aGUgZGVmYXVs dCBlZGl0b3IuIFlvdQorICAgICAgICAgIGNhbiBhbHNvIHNwZWNpZnkgb3B0aW9ucyB0byBiZSBp bmNsdWRlZCBvbiB0aGUgZWRpdG9yIGNvbW1hbmQKKyAgICAgICAgICBsaW5lLiBSZXR1cm5zIHRv IEtlcm1pdCB3aGVuIHRoZSBlZGl0b3IgZXhpdHMuCisKKyAgIEVESVQgWyBmaWxlbmFtZSBdCisg ICAgICAgICAgSWYgdGhlIEVESVQgY29tbWFuZCBpcyBnaXZlbiB3aXRob3V0IGEgZmlsZW5hbWUs IHRoZW4gaWYgYQorICAgICAgICAgIHByZXZpb3VzIGZpbGVuYW1lIGhhZCBiZWVuIGdpdmVuIHRv IGFuIEVESVQgY29tbWFuZCwgaXQgaXMgdXNlZDsKKyAgICAgICAgICBpZiBub3QsIHRoZSBlZGl0 b3IgaXMgc3RhcnRlZCB3aXRob3V0IGEgZmlsZS4gSWYgYSBmaWxlbmFtZSBpcworICAgICAgICAg IGdpdmVuLCB0aGUgZWRpdG9yIGlzIHN0YXJ0ZWQgb24gdGhhdCBmaWxlLCBhbmQgdGhlIGZpbGVu YW1lIGlzCisgICAgICAgICAgcmVtZW1iZXJlZCBmb3Igc3Vic2VxdWVudCBFRElUIGNvbW1hbmRz LgorCisgICBTSE9XIEVESVRPUgorICAgICAgICAgIERpc3BsYXlzIHRoZSBmdWxsIHBhdGhuYW1l IG9mIHlvdXIgdGV4dCBlZGl0b3IsIGlmIGFueSwgYWxvbmcKKyAgICAgICAgICB3aXRoIGFueSBj b21tYW5kIGxpbmUgb3B0aW9ucywgYW5kIHRoZSBmaWxlIG1vc3QgcmVjZW50bHkgZWRpdGVkCisg ICAgICAgICAgKGFuZCB0aGVyZWZvcmUgdGhlIGRlZmF1bHQgZmlsZW5hbWUgZm9yIHlvdXIgbmV4 dCBFRElUIGNvbW1hbmQpLgorCisgICBSZWxhdGVkIHZhcmlhYmxlczogXHYoZWRpdG9yKSwgXHYo ZWRpdG9wdHMpLCBcdihlZGl0ZmlsZSkuCisKKzEuMy4gV2ViIEJyb3dzZXIgYW5kIEZUUCBJbnRl cmZhY2UKKworICAgQy1LZXJtaXQgaW5jbHVkZXMgYW4gRlRQIGNvbW1hbmQsIHdoaWNoIHNpbXBs eSBydW5zIHRoZSBGVFAgcHJvZ3JhbTsKKyAgIEMtS2VybWl0IGRvZXMgbm90IGluY2x1ZGUgYW55 IGJ1aWx0LWluIHN1cHBvcnQgZm9yIEludGVybmV0IEZpbGUKKyAgIFRyYW5zZmVyIFByb3RvY29s LCBub3IgYW55IG1ldGhvZCBmb3IgaW50ZXJhY3RpbmcgZGlyZWN0bHkgd2l0aCBhbiBGVFAKKyAg IHNlcnZlci4gSW4gdmVyc2lvbiA3LjAsIGhvd2V2ZXIsIEMtS2VybWl0IGxldHMgeW91IHNwZWNp ZnkgeW91ciBGVFAKKyAgIGNsaWVudDoKKworICAgU0VUIEZUUC1DTElFTlQgWyBuYW1lIFsgb3B0 aW9ucyBdIF0KKyAgICAgICAgICBUaGUgbmFtZSBpcyB0aGUgbmFtZSBvZiB0aGUgRlRQIGV4ZWN1 dGFibGUuIEluIFVOSVgsIFdpbmRvd3MsIG9yCisgICAgICAgICAgT1MvMiwgaXQgY2FuIGJlIHRo ZSBmaWxlbmFtZSBvZiBhbnkgZXhlY3V0YWJsZSBwcm9ncmFtIGluIHlvdXIKKyAgICAgICAgICBQ QVRIIChlLmcuICJmdHAuZXhlIiBpbiBXaW5kb3dzLCAiZnRwIiBpbiBVTklYKTsgZWxzZXdoZXJl IChvcgorICAgICAgICAgIGlmIHlvdSBkbyBub3QgaGF2ZSBhIFBBVEggZGVmaW5pdGlvbiksIGl0 IG11c3QgYmUgdGhlIGZ1bGx5CisgICAgICAgICAgc3BlY2lmaWVkIHBhdGhuYW1lIG9mIHRoZSBG VFAgcHJvZ3JhbS4gSWYgdGhlIG5hbWUgY29udGFpbnMgYW55CisgICAgICAgICAgc3BhY2VzLCBl bmNsb3NlIGl0IGJyYWNlcy4gSW5jbHVkZSBhbnkgb3B0aW9ucyBhZnRlciB0aGUKKyAgICAgICAg ICBmaWxlbmFtZTsgdGhlc2UgZGVwZW5kIHRoZSBwYXJ0aWN1bGFyIGZ0cCBjbGllbnQuCisKKyAg IFRoZSBXZWIgYnJvd3NlciBpbnRlcmZhY2UgaXMgY292ZXJlZCBpbiB0aGUgZm9sbG93aW5nIHN1 YnNlY3Rpb25zLgorCisxLjMuMS4gSW52b2tpbmcgeW91ciBCcm93c2VyIGZyb20gQy1LZXJtaXQK KworICAgQlJPV1NFIFsgdXJsIF0KKyAgICAgICAgICBTdGFydHMgeW91ciBwcmVmZXJyZWQgV2Vi IGJyb3dzZXIgb24gdGhlIFVSTCwgaWYgb25lIGlzIGdpdmVuLAorICAgICAgICAgIG90aGVyd2lz ZSBvbiB0aGUgbW9zdCByZWNlbnRseSBnaXZlbiBVUkwsIGlmIGFueS4gUmV0dXJucyB0bworICAg ICAgICAgIEtlcm1pdCB3aGVuIHRoZSBicm93c2VyIGV4aXRzLgorCisgICBTRVQgQlJPV1NFUiBb IG5hbWUgWyBvcHRpb25zIF0gXQorICAgICAgICAgIFVzZSB0aGlzIGNvbW1hbmQgdG8gc3BlY2lm eSB0aGUgbmFtZSBvZiB5b3VyIFdlYiBicm93c2VyCisgICAgICAgICAgcHJvZ3JhbSwgZm9yIGV4 YW1wbGU6ICJzZXQgYnJvd3NlciBseW54Ii4gVGhlIG5hbWUgbXVzdCBiZSBpbgorICAgICAgICAg IHlvdXIgUEFUSCwgb3IgZWxzZSBpdCBtdXN0IGJlIGEgZnVsbHkgc3BlY2lmaWVkIGZpbGVuYW1l OyBpbiBWTVMKKyAgICAgICAgICBpdCBtdXN0IGJlIGEgRENMIGNvbW1hbmQuCisKKyAgIFNIT1cg QlJPV1NFUgorICAgICAgICAgIERpc3BsYXlzIHRoZSBjdXJyZW50IGJyb3dzZXIsIG9wdGlvbnMs IGFuZCBtb3N0IHJlY2VudCBVUkwuCisKKyAgIFJlbGF0ZWQgdmFyaWFibGVzOiBcdihicm93c2Vy KSwgXHYoYnJvd3NvcHRzKSwgXHYoYnJvd3N1cmwpLgorCisgICBBbHNvIHNlZSBbMzU4XVNlY3Rp b24gMi4xNTogQ29udGFjdGluZyBXZWIgU2VydmVycyB3aXRoIHRoZSBIVFRQCisgICBDb21tYW5k LgorCisxLjMuMi4gSW52b2tpbmcgQy1LZXJtaXQgZnJvbSB5b3VyIEJyb3dzZXIKKworICAgVGhl IG1ldGhvZCBmb3IgZG9pbmcgdGhpcyBkZXBlbmRzLCBvZiBjb3Vyc2UsIG9uIHlvdXIgYnJvd3Nl ci4gSGVyZSBhcmUKKyAgIHNvbWUgZXhhbXBsZXM6CisKKyAgIE5ldHNjYXBlIG9uIFVOSVggKFgt YmFzZWQpCisgICAgICAgICAgSW4gdGhlIE9wdGlvbnMtPkFwcGxpY2F0aW9ucyBzZWN0aW9uLCBz ZXQgeW91ciBUZWxuZXQKKyAgICAgICAgICBhcHBsaWNhdGlvbiB0bzoKKworICB4dGVybSAtZSAv dXNyL2xvY2FsL2Jpbi9rZXJtaXQva2VybWl0IC1KICVoICVwCisKKyAgICAgICAgICAocmVwbGFj ZSAiL3Vzci9sb2NhbC9iaW4va2VybWl0L2tlcm1pdCIgYnkgQy1LZXJtaXQncyBhY3R1YWwKKyAg ICAgICAgICBwYXRobmFtZSkuIC1KIGlzIEMtS2VybWl0J3MgY29tbWFuZC1saW5lIG9wdGlvbiB0 byAiYmUgbGlrZQorICAgICAgICAgIFRlbG5ldCI7ICVoIGFuZCAlcCBhcmUgTmV0c2NhcGUgcGxh Y2Vob2xkZXJzIGZvciBob3N0bmFtZSBhbmQKKyAgICAgICAgICBwb3J0LgorCisgICBMeW54IG9u IFVOSVgKKyAgICAgICAgICBBcyBmYXIgYXMgd2Uga25vdywgdGhpcyBjYW4gYmUgZG9uZSBvbmx5 IGF0IGNvbXBpbGUgdGltZS4gQWRkCisgICAgICAgICAgdGhlIGZvbGxvd2luZyBsaW5lIHRvIHRo ZSBMeW54IHVzZXJkZWZzLmggZmlsZSBiZWZvcmUgYnVpbGRpbmcKKyAgICAgICAgICB0aGUgTHlu eCBiaW5hcnk6CisKKyAgI2RlZmluZSBURUxORVRfQ09NTUFORCAiL29wdC9iaW4va2VybWl0IC1K IgorCisgICAgICAgICAgQW5kIHRoZW4gYWRkIGxpbmVzIGxpa2UgdGhlIGZvbGxvd2luZyB0byB0 aGUgTHlueC5jZmcgZmlsZToKKworICBET1dOTE9BREVSOktlcm1pdCBiaW5hcnkgZG93bmxvYWQ6 L29wdC9iaW4va2VybWl0IC1pIC1WIC1zICVzIC1hICVzOlRSVUUKKyAgRE9XTkxPQURFUjpLZXJt aXQgdGV4dCBkb3dubG9hZDovb3B0L2Jpbi9rZXJtaXQgLXMgJXMgLWEgJXM6VFJVRQorCisgIFVQ TE9BREVSOktlcm1pdCBiaW5hcnkgdXBsb2FkOi9vcHQvYmluL2tlcm1pdCAtaSAtciAtYSAlczpU UlVFCisgIFVQTE9BREVSOktlcm1pdCB0ZXh0IHVwbG9hZDovb3B0L2Jpbi9rZXJtaXQgLXIgLWEg JXM6VFJVRQorICBVUExPQURFUjpLZXJtaXQgdGV4dCBnZXQ6L29wdC9iaW4va2VybWl0IC1nICVz OlRSVUUKKyAgVVBMT0FERVI6S2VybWl0IGJpbmFyeSBnZXQ6L29wdC9iaW4va2VybWl0IC1pZyAl czpUUlVFCisKKyAgIEJ1dCBub25lIG9mIHRoZSBhYm92ZSBpcyBuZWNlc3NhcnkgaWYgeW91IG1h a2UgQy1LZXJtaXQgeW91ciBkZWZhdWx0CisgICBUZWxuZXQgY2xpZW50LCB3aGljaCB5b3UgY2Fu IGRvIGJ5IG1ha2luZyBhIHN5bWxpbmsgY2FsbGVkICd0ZWxuZXQnIHRvCisgICB0aGUgQy1LZXJt aXQgNy4wIGJpbmFyeS4gU2VlIFszNTldU2VjdGlvbiA5LjEgZm9yIGRldGFpbHMuCisKKzEuNC4g Q29tbWFuZCBFZGl0aW5nCisKKyAgIEN0cmwtVyAoIldvcmQgZGVsZXRlIikgd2FzIGNoYW5nZWQg aW4gNy4wIHRvIGRlbGV0ZSBiYWNrIHRvIHRoZQorICAgcHJldmlvdXMgbm9uLWFscGhhbnVtZXJp YywgcmF0aGVyIHRoYW4gYWxsIHRoZSB3YXkgYmFjayB0byB0aGUgcHJldmlvdXMKKyAgIHNwYWNl LgorCisxLjUuIENvbW1hbmQgU3dpdGNoZXMKKworICAgQXMgb2YgdmVyc2lvbiA3LjAsIEMtS2Vy bWl0J3MgY29tbWFuZCBwYXJzZXIgc3VwcG9ydHMgYSBuZXcgdHlwZSBvZgorICAgZmllbGQsIGNh bGxlZCBhICJzd2l0Y2giLiBUaGlzIGlzIGFuIG9wdGlvbmFsIGNvbW1hbmQgbW9kaWZpZXIuCisK KzEuNS4xLiBHZW5lcmFsIFN3aXRjaCBTeW50YXgKKworICAgQSBzd2l0Y2ggaXMgYSBrZXl3b3Jk IGJlZ2lubmluZyB3aXRoIGEgc2xhc2ggKC8pLiBJZiBpdCB0YWtlcyBhIHZhbHVlLAorICAgdGhl biB0aGUgdmFsdWUgaXMgYXBwZW5kZWQgdG8gaXQgKHdpdGggbm8gaW50ZXJ2ZW5pbmcgc3BhY2Vz KSwKKyAgIHNlcGFyYXRlZCBieSBhIGNvbG9uICg6KSBvciBlcXVhbCBzaWduICg9KS4gRGVwZW5k aW5nIG9uIHRoZSBzd2l0Y2gsCisgICB0aGUgdmFsdWUgbWF5IGJlIGEgbnVtYmVyLCBhIGtleXdv cmQsIGEgZmlsZW5hbWUsIGEgZGF0ZS90aW1lLCBldGMuCisgICBFeGFtcGxlczoKKworICBzZW5k IG9vZmEudHh0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBObyBzd2l0Y2hlcworICBz ZW5kIC9iaW5hcnkgb29mYS56aXAgICAgICAgICAgICAgICAgICAgICAgOyBBIHN3aXRjaCB3aXRo b3V0IGEgdmFsdWUKKyAgc2VuZCAvcHJvdG9jb2w6em1vZGVtIG9vZmEuemlwICAgICAgICAgICAg IDsgQSBzd2l0Y2ggd2l0aCBhIHZhbHVlICg6KQorICBzZW5kIC9wcm90b2NvbD16bW9kZW0gb29m YS56aXAgICAgICAgICAgICAgOyBBIHN3aXRjaCB3aXRoIGEgdmFsdWUgKD0pCisgIHNlbmQgL3Rl eHQgL2RlbGV0ZSAvYXMtbmFtZTp4Lnggb29mYS50eHQgICA7IFNldmVyYWwgc3dpdGNoZXMKKwor ICAgTGlrZSBvdGhlciBjb21tYW5kIGZpZWxkcywgc3dpdGNoZXMgYXJlIHNlcGFyYXRlZCBmcm9t IG90aGVyIGZpZWxkcywKKyAgIGFuZCBmcm9tIGVhY2ggb3RoZXIsIGJ5IHdoaXRlc3BhY2UsIGFz IHNob3duIGluIHRoZSBleGFtcGxlcyBqdXN0CisgICBhYm92ZS4gWW91IGNhbiBub3QgcHV0IHRo ZW0gdG9nZXRoZXIgbGlrZSBzbzoKKworICBzZW5kL3RleHQvZGVsZXRlL2FzLW5hbWU6eC54IG9v ZmEudHh0CisKKyAgIChhcyB5b3UgbWlnaHQgZG8gaW4gVk1TIG9yIERPUywgb3IgYXMgd2UgbWln aHQgb25jZSBoYXZlIGRvbmUgaW4KKyAgIFRPUFMtMTAgb3IgVE9QUzAtMjAsIG9yIFBJUCkuIFRo aXMgaXMgcHJpbWFyaWx5IGR1ZSB0byBhbWJpZ3VpdHkKKyAgIGJldHdlZW4gIi8iIGFzIHN3aXRj aCBpbnRyb2R1Y2VyIHZlcnN1cyAiLyIgYXMgVU5JWCBkaXJlY3RvcnkKKyAgIHNlcGFyYXRvcjsg ZS5nLiBpbjoKKworICBzZW5kIC9kZWxldGUvYXMtbmFtZTpmb28vdGV4dCBvb2ZhLnR4dAorCisg ICBEb2VzICJmb28vdGV4dCIgbWVhbiB0aGUgZmlsZW5hbWUgaXMgImZvbyIgYW5kIHRoZSB0cmFu c2ZlciBpcyB0byBiZSBpbgorICAgdGV4dCBtb2RlLCBvciBkb2VzIGl0IG1lYW4gdGhlIGZpbGVu YW1lIGlzICJmb28vdGV4dCI/IFRoZXJlZm9yZSB3ZQorICAgcmVxdWlyZSB3aGl0ZXNwYWNlIGJl dHdlZW4gc3dpdGNoZXMgdG8gcmVzb2x2ZSB0aGUgYW1iaWd1aXR5LiAoVGhhdCdzCisgICBvbmx5 IG9uZSBvZiBzZXZlcmFsIHBvc3NpYmxlIGFtYmlndWl0aWVzIC0tIGl0IGlzIGFsc28gY29uY2Vp dmFibGUgdGhhdAorICAgYSBmaWxlIGNhbGxlZCAidGV4dCIgZXhpc3RzIGluIHRoZSBwYXRoICIv ZGVsZXRlL2FzLW5hbWU6Zm9vLyIpLgorCisgICBJbiBnZW5lcmFsLCBpZiBhIHN3aXRjaCBjYW4g dGFrZSBhIHZhbHVlLCBidXQgeW91IG9taXQgaXQsIHRoZW4gZWl0aGVyCisgICBhIHJlYXNvbmFi bGUgZGVmYXVsdCB2YWx1ZSBpcyBzdXBwbGllZCwgb3IgYW4gZXJyb3IgbWVzc2FnZSBpcyBwcmlu dGVkOgorCisgIHNlbmQgL3ByaW50Oi1QbGFzZXJ3cml0ZXIgb29mYS50eHQgICAgICAgICA7IFZh bHVlIGluY2x1ZGVkID0gcHJpbnQgb3B0aW9ucworICBzZW5kIC9wcmludCBvb2ZhLnR4dCAgICAg ICAgICAgICAgICAgICAgICAgOyBWYWx1ZSBvbWl0dGVkLCBPSworICBzZW5kIC9tYWlsOmtlcm1p dEBjb2x1bWJpYS5lZHUgb29mYS50eHQgICAgOyBWYWx1ZSBpbmNsdWRlZCA9IGFkZHJlc3MKKyAg c2VuZCAvbWFpbCBvb2ZhLnR4dCAgICAgICAgICAgICAgICAgICAgICAgIDsgTm90IE9LIC0gYWRk cmVzcyByZXF1aXJlZAorICA/QWRkcmVzcyByZXF1aXJlZAorCisgICBDb250ZXh0LXNlbnNpdGl2 ZSBoZWxwICg/KSBhbmQgY29tcGxldGlvbiAoRXNjIG9yIFRhYikgYXJlIGF2YWlsYWJsZSBpbgor ICAgdGhlIG5vcm1hbCBtYW5uZXI6CisKKyAgQy1LZXJtaXQ+IHNlbmQgL3ByPyBTd2l0Y2gsIG9u ZSBvZiB0aGUgZm9sbG93aW5nOgorICAgIC9wcmludCAvcHJvdG9jb2wKKyAgQy1LZXJtaXQ+IHNl bmQgL3BybzxFU0M+dG9jb2w6PyAgRmlsZS10cmFuc2ZlciBwcm90b2NvbCwKKyAgIG9uZSBvZiB0 aGUgZm9sbG93aW5nOgorICAgIGtlcm1pdCAgIHhtb2RlbSAgIHltb2RlbSAgIHltb2RlbS1nICAg em1vZGVtCisgIEMtS2VybWl0PiBzZW5kIC9wcm90b2NvbDprPFRBQj5lcm1pdAorCisgICBJZiBh IHN3aXRjaCB0YWtlcyBhIHZhbHVlIGFuZCB5b3UgdXNlIGNvbXBsZXRpb24gb24gaXQsIGEgY29s b24gKDopIGlzCisgICBwcmludGVkIGF0IHRoZSBlbmQgb2YgaXRzIG5hbWUgdG8gaW5kaWNhdGUg dGhpcy4gSWYgaXQgZG9lcyBub3QgdGFrZSBhCisgICB2YWx1ZSwgYSBzcGFjZSBpcyBwcmludGVk LgorCisgICBBbHNvLCBpZiB5b3UgdHlwZSA/IGluIGEgc3dpdGNoIGZpZWxkLCBzd2l0Y2hlcyB0 aGF0IHRha2UgdmFsdWVzIGFyZQorICAgc2hvd24gd2l0aCBhIHRyYWlsaW5nIGNvbG9uOyB0aG9z ZSB0aGF0IGRvbid0IHRha2UgdmFsdWVzIGFyZSBzaG93bgorICAgd2l0aG91dCBvbmUuCisKKzEu NS4yLiBPcmRlciBhbmQgRWZmZWN0IG9mIFN3aXRjaGVzCisKKyAgIFRoZSBvcmRlciBvZiBzd2l0 Y2hlcyBzaG91bGQgbm90IG1hdHRlciwgZXhjZXB0IHRoYXQgdGhleSBhcmUgZXZhbHVhdGVkCisg ICBmcm9tIGxlZnQgdG8gcmlnaHQsIHNvIGlmIHlvdSBnaXZlIHR3byBzd2l0Y2hlcyB3aXRoIG9w cG9zaXRlIGVmZmVjdHMsCisgICB0aGUgcmlnaHRtb3N0IG9uZSBpcyB1c2VkOgorCisgIHNlbmQg L3RleHQgL2JpbmFyeSBvb2ZhLnppcCAgICAgICAgICAgICAgICA7IFNlbmRzIG9vZmEuemlwIGlu IGJpbmFyeSBtb2RlLgorCisgICBMaWtlIG90aGVyIGNvbW1hbmQgZmllbGRzLCBzd2l0Y2hlcyBo YXZlIG5vIGVmZmVjdCB3aGF0c29ldmVyIHVudGlsIHRoZQorICAgY29tbWFuZCBpcyBlbnRlcmVk IChieSBwcmVzc2luZyB0aGUgUmV0dXJuIG9yIEVudGVyIGtleSkuIEV2ZW4gdGhlbiwKKyAgIHN3 aXRjaGVzIGFmZmVjdCBvbmx5IHRoZSBjb21tYW5kIHdpdGggd2hpY2ggdGhleSBhcmUgaW5jbHVk ZWQ7IHRoZXkgZG8KKyAgIG5vdCBoYXZlIGdsb2JhbCBlZmZlY3Qgb3Igc2lkZSBlZmZlY3RzLgor CisxLjUuMy4gRGlzdGluZ3Vpc2hpbmcgU3dpdGNoZXMgZnJvbSBPdGhlciBGaWVsZHMKKworICAg QWxsIHN3aXRjaGVzIGFyZSBvcHRpb25hbC4gQSBjb21tYW5kIHRoYXQgdXNlcyBzd2l0Y2hlcyBs ZXRzIHlvdSBnaXZlCisgICBhbnkgbnVtYmVyIG9mIHRoZW0sIGluY2x1ZGluZyBub25lIGF0IGFs bC4gRXhhbXBsZToKKworICBzZW5kIC9iaW5hcnkgb29mYS56aXAKKyAgc2VuZCAvYmluIC9kZWxl dGUgb29mYS56aXAKKyAgc2VuZCAvYmluIC9hcy1uYW1lOm11cGVlbi56aXAgb29mYS56aXAKKyAg c2VuZCBvb2ZhLnppcAorCisgICBCdXQgaG93IGRvZXMgS2VybWl0IGtub3cgd2hlbiB0aGUgZmly c3QgIm5vbi1zd2l0Y2giIGlzIGdpdmVuPyBJdCBoYXMKKyAgIGJlZW4gdG9sZCB0byBsb29rIGZv ciBib3RoIGEgc3dpdGNoIGFuZCBmb3Igc29tZXRoaW5nIGVsc2UsIHRoZSBkYXRhCisgICB0eXBl IG9mIHRoZSBuZXh0IGZpZWxkIChmaWxlbmFtZSwgbnVtYmVyLCBldGMpLiBJbiBtb3N0IGNhc2Vz LCB0aGlzCisgICB3b3JrcyB3ZWxsLiBCdXQgY29uZmxpY3RzIGFyZSBub3QgaW1wb3NzaWJsZS4g U3VwcG9zZSwgZm9yIGV4YW1wbGUsIGluCisgICBVTklYIHRoZXJlIHdhcyBhIGZpbGUgbmFtZWQg InRleHQiIGluIHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5LiBUaGUKKyAgIGNvbW1hbmQgdG8gc2Vu ZCBpdCB3b3VsZCBiZToKKworICBzZW5kIC90ZXh0CisKKyAgIEJ1dCBDLUtlcm1pdCB3b3VsZCB0 aGluayB0aGlzIHdhcyB0aGUgIi90ZXh0IiBzd2l0Y2guIFRvIHJlc29sdmUgdGhlCisgICBjb25m bGljdCwgdXNlIGJyYWNlczoKKworICBzZW5kIHsvdGV4dH0KKworICAgb3Igb3RoZXIgY2lyY3Vt bG9jdXRpb25zIHN1Y2ggYXMgInNlbmQgLy90ZXh0IiwgInNlbmQgLy4vdGV4dCIsIGV0Yy4KKwor ICAgVGhlIG9wcG9zaXRlIHByb2JsZW0gY2FuIG9jY3VyIGlmIHlvdSBnaXZlIGFuIGlsbGVnYWwg c3dpdGNoIHRoYXQKKyAgIGhhcHBlbnMgdG8gbWF0Y2ggYSBkaXJlY3RvcnkgbmFtZS4gRm9yIGV4 YW1wbGU6CisKKyAgc2VuZCAvZiBvb2ZhLnR4dAorCisgICBUaGVyZSBpcyBubyAiL2YiIHN3aXRj aCAodGhlcmUgYXJlIHNldmVyYWwgc3dpdGNoZXMgdGhhdCBiZWdpbiB3aXRoCisgICAiL2YiLCBz byAiL2YiIGlzIGFtYmlndW91cykuIE5vdyBzdXBwb3NlIHRoZXJlIGlzIGFuICJmIiBkaXJlY3Rv cnkgaW4KKyAgIHRoZSByb290IGRpcmVjdG9yeTsgdGhlbiB0aGlzIGNvbW1hbmQgd291bGQgYmUg aW50ZXJwcmV0ZWQgYXM6CisKKyAgICAgU2VuZCBhbGwgdGhlIGZpbGVzIGluIHRoZSAiL2YiIGRp cmVjdG9yeSwgZ2l2aW5nIGVhY2ggb25lIGFuIGFzLW5hbWUKKyAgICAgb2YgIm9vZmEudHh0Ii4K KworICAgVGhpcyBjb3VsZCBiZSBhIG1pc3Rha2UsIG9yIGl0IGNvdWxkIGJlIGV4YWN0bHkgd2hh dCB5b3UgaW50ZW5kZWQ7CisgICBDLUtlcm1pdCBoYXMgbm8gd2F5IG9mIHRlbGxpbmcgdGhlIGRp ZmZlcmVuY2UuIFRvIGF2b2lkIHNpdHVhdGlvbnMgbGlrZQorICAgdGhpcywgc3BlbGwgc3dpdGNo ZXMgb3V0IGluIGZ1bGwgdW50aWwgeW91IGFyZSBjb21mb3J0YWJsZSBlbm91Z2ggd2l0aAorICAg dGhlbSB0byBrbm93IHRoZSBtaW5pbXVtIGFiYnJldmlhdGlvbiBmb3IgZWFjaCBvbmUuIEhpbnQ6 IHVzZSA/IGFuZAorICAgY29tcGxldGlvbiB3aGlsZSB0eXBpbmcgc3dpdGNoZXMgdG8gb2J0YWlu IHRoZSBuZWNlc3NhcnkgZmVlZGJhY2suCisKKzEuNS40LiBTdGFuZGFyZCBGaWxlIFNlbGVjdGlv biBTd2l0Y2hlcworCisgICBUaGUgZm9sbG93aW5nIHN3aXRjaGVzIGFyZSB1c2VkIG9uIGRpZmZl cmVudCBmaWxlLW9yaWVudGVkIGNvbW1hbmRzCisgICAoc3VjaCBhcyBTRU5ELCBESVJFQ1RPUlks IERFTEVURSwgUFVSR0UpIHRvIHJlZmluZSB0aGUgc2VsZWN0aW9uIG9mCisgICBmaWxlcyB0aGF0 IG1hdGNoIHRoZSBnaXZlbiBzcGVjaWZpY2F0aW9uLgorCisgICAvQUZURVI6ZGF0ZS10aW1lCisg ICAgICAgICAgU2VsZWN0IG9ubHkgdGhvc2UgZmlsZXMgaGF2aW5nIGEgZGF0ZS10aW1lIGxhdGVy IHRoYW4gdGhlIG9uZQorICAgICAgICAgIGdpdmVuLiBTZWUgWzM2MF1TZWN0aW9uIDEuNiBmb3Ig ZGF0ZS10aW1lIGZvcm1hdHMuIFN5bm9ueW06CisgICAgICAgICAgL1NJTkNFLgorCisgICAvTk9U LUFGVEVSOmRhdGUtdGltZQorICAgICAgICAgIFNlbGVjdCBvbmx5IHRob3NlIGZpbGVzIGhhdmlu ZyBhIGRhdGUtdGltZSBub3QgbGF0ZXIgdGhhbiAoaS5lLgorICAgICAgICAgIGVhcmxpZXIgb3Ig ZXF1YWwgdG8pIHRoZSBvbmUgZ2l2ZW4uIFN5bm9ueW06IC9OT1QtU0lOQ0UuCisKKyAgIC9CRUZP UkU6ZGF0ZS10aW1lCisgICAgICAgICAgU2VsZWN0IG9ubHkgdGhvc2UgZmlsZXMgaGF2aW5nIGEg ZGF0ZS10aW1lIGVhcmxpZXIgdGhhbiB0aGUgb25lCisgICAgICAgICAgZ2l2ZW4uCisKKyAgIC9O T1QtQkVGT1JFOmRhdGUtdGltZQorICAgICAgICAgIFNlbGVjdCBvbmx5IHRob3NlIGZpbGVzIGhh dmluZyBhIGRhdGUtdGltZSBub3QgZWFybGllciB0aGFuCisgICAgICAgICAgKGkuZS4gbGF0ZXIg b3IgZXF1YWwgdG8pIHRoZSBvbmUgZ2l2ZW4uCisKKyAgIC9ET1RGSUxFUworICAgICAgICAgIFVO SVggYW5kIE9TLTkgb25seTogVGhlIGZpbGVzcGVjIGlzIGFsbG93ZWQgdG8gbWF0Y2ggZmlsZXMg d2hvc2UKKyAgICAgICAgICBuYW1lcyBzdGFydCB3aXRoIChkb3QpIHBlcmlvZC4gTm9ybWFsbHkg dGhlc2UgZmlsZXMgYXJlIG5vdAorICAgICAgICAgIHNob3duLgorCisgICAvTk9ET1RGSUxFUwor ICAgICAgICAgIChVTklYIGFuZCBPUy05IG9ubHkpIERvbid0IHNob3cgZmlsZXMgd2hvc2UgbmFt ZXMgc3RhcnQgd2l0aCBkb3QKKyAgICAgICAgICAocGVyaW9kKS4gVGhpcyBpcyB0aGUgb3Bwb3Np dGUgb2YgL0RPVEZJTEVTLCBhbmQgaXMgdGhlIGRlZmF1bHQuCisgICAgICAgICAgTm90ZSB0aGF0 IHdoZW4gYSBkaXJlY3RvcnkgbmFtZSBzdGFydHMgd2l0aCBhIHBlcmlvZCwgdGhlCisgICAgICAg ICAgZGlyZWN0b3J5IGFuZCAoaW4gcmVjdXJzaXZlIG9wZXJhdGlvbnMpIGFsbCBpdHMgc3ViZGly ZWN0b3JpZXMKKyAgICAgICAgICBhcmUgc2tpcHBlZC4KKworICAgL0xBUkdFUi1USEFOOm51bWJl cgorICAgICAgICAgIE9ubHkgc2VsZWN0IGZpbGVzIGxhcmdlciB0aGFuIHRoZSBnaXZlbiBudW1i ZXIgb2YgYnl0ZXMuCisKKyAgIC9TTUFMTEVSLVRIQU46bnVtYmVyCisgICAgICAgICAgT25seSBz ZWxlY3QgZmlsZXMgc21hbGxlciB0aGFuIHRoZSBnaXZlbiBudW1iZXIgb2YgYnl0ZXMuCisKKyAg IC9FWENFUFQ6cGF0dGVybgorICAgICAgICAgIFNwZWNpZmllcyB0aGF0IGFueSBmaWxlcyB3aG9z ZSBuYW1lcyBtYXRjaCB0aGUgcGF0dGVybiwgd2hpY2gKKyAgICAgICAgICBjYW4gYmUgYSByZWd1 bGFyIGZpbGVuYW1lLCBvciBtYXkgY29udGFpbiAiKiIgYW5kL29yICI/IgorICAgICAgICAgIG1l dGFjaGFyYWN0ZXJzICh3aWxkY2FyZHMpLCBhcmUgbm90IHRvIGJlIHNlbGVjdGVkLiBFeGFtcGxl OgorCisgIHNlbmQgL2V4Y2VwdDoqLmxvZyAqLioKKworICAgICAgICAgIHNlbmRzIGFsbCBmaWxl cyBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkgZXhjZXB0IHRob3NlIHdpdGggYQorICAgICAgICAg IGZpbGV0eXBlIG9mICIubG9nIi4gQW5vdGhlcjoKKworICBzZW5kIC9leGNlcHQ6Ki5+Kn4gKi4q CisKKyAgICAgICAgICBzZW5kcyBhbGwgZmlsZXMgZXhjZXB0IHRoZSBvbmVzIHRoYXQgbG9vayBs aWtlIEtlcm1pdCBvciBFTUFDUworICAgICAgICAgIGJhY2t1cCBmaWxlcyAoc3VjaCBhcyAib29m YS50eHQufjE3fiIpIChvZiBjb3Vyc2UgeW91IGNhbiBhbHNvCisgICAgICAgICAgdXNlIHRoZSAv Tk9CQUNLVVAgc3dpdGNoIGZvciB0aGlzKS4KKworICAgICAgICAgIFRoZSBwYXR0ZXJuIG1hdGNo ZXIgaXMgdGhlIHNhbWUgb25lIHVzZWQgYnkgSUYgTUFUQ0ggc3RyaW5nCisgICAgICAgICAgcGF0 dGVybiAoWzM2MV1TZWN0aW9uIDcuNCksIHNvIHlvdSBjYW4gdGVzdCB5b3VyIHBhdHRlcm5zIHVz aW5nCisgICAgICAgICAgSUYgTUFUQ0guIElmIHlvdSBuZWVkIHRvIG1hdGNoIGEgbGl0ZXJhbCAq IG9yID8gKGV0YyksIHByZWNlZGUKKyAgICAgICAgICBpdCBieSBhIGJhY2tzbGFzaCAoXCkuIElm IHRoZSBwYXR0ZXJuIGNvbnRhaW5zIGFueSBzcGFjZXMsIGl0CisgICAgICAgICAgbXVzdCBiZSBl bmNsb3NlZCBpbiBicmFjZXM6CisKKyAgc2VuZCAvZXhjZXB0OntGb28gYmFyfSAqLioKKworICAg ICAgICAgIFRoZSBwYXR0ZXJuIGNhbiBhbHNvIGJlIGEgbGlzdCBvZiB1cCB0byA4IHBhdHRlcm5z LiBJbiB0aGlzCisgICAgICAgICAgY2FzZSwgdGhlIGVudGlyZSBwYXR0ZXJuIG11c3QgYmUgZW5j bG9zZWQgaW4gYnJhY2VzLCBhbmQgZWFjaAorICAgICAgICAgIHN1Yi1wYXR0ZXJuIG11c3QgYWxz byBiZSBlbmNsb3NlZCBpbiBicmFjZXM7IHRoaXMgZWxpbWluYXRlcyB0aGUKKyAgICAgICAgICBu ZWVkIGZvciBkZXNpZ25hdGluZyBhIHNlcGFyYXRvciBjaGFyYWN0ZXIsIHdoaWNoIGlzIGxpa2Vs eSB0bworICAgICAgICAgIGFsc28gYmUgYSBsZWdhbCBmaWxlbmFtZSBjaGFyYWN0ZXIgb24gc29t ZSBwbGF0Zm9ybSBvciBvdGhlciwKKyAgICAgICAgICBhbmQgdGhlcmVmb3JlIGEgc291cmNlIG9m IGNvbmZ1c2lvbi4gWW91IG1heSBpbmNsdWRlIHNwYWNlcworICAgICAgICAgIGJldHdlZW4gdGhl IHN1YnBhdHRlcm5zIGJ1dCB0aGV5IGFyZSBub3QgbmVjZXNzYXJ5LiBUaGUKKyAgICAgICAgICBm b2xsb3dpbmcgdHdvIGNvbW1hbmRzIGFyZSBlcXVpdmFsZW50OgorCisgIHNlbmQgL2V4Y2VwdDp7 e2NrKi5vfSB7Y2sqLmN9fSBjayouPworICBzZW5kIC9leGNlcHQ6e3tjayoub317Y2sqLmN9fSBj ayouPworCisgICAgICAgICAgSWYgYSBwYXR0ZXJuIGlzIHRvIGluY2x1ZGUgYSBsaXRlcmFsIGJy YWNlIGNoYXJhY3RlciwgcHJlY2VkZSBpdAorICAgICAgICAgIHdpdGggIlwiLiBBbHNvIG5vdGUg dGhlIGFwcGFyZW50IGNvbmZsaWN0IG9mIHRoaXMgbGlzdCBmb3JtYXQKKyAgICAgICAgICBhbmQg dGhlIHN0cmluZy1saXN0IGZvcm1hdCBkZXNjcmliZWQgaW4gWzM2Ml1TZWN0aW9uIDQuOS4xLiBJ bgorICAgICAgICAgIGNhc2UgeW91IHdhbnQgdG8gaW5jbHVkZSBhIHdpbGRjYXJkIHN0cmluZy1s aXN0IHdpdGggYnJhY2VzIG9uCisgICAgICAgICAgaXRzIG91dGVyIGVuZHMgYXMgYW4gL0VYQ0VQ VDogYXJndW1lbnQsIGRvIGl0IGxpa2UgdGhpczoKKworICBzZW5kIC9leGNlcHQ6e3t7Y2t1dXNy LmMsY2t1dXMyLmMsY2t1dXM2LmN9fX0gY2t1dXMqLmMKKworMS41LjUuIFNldHRpbmcgUHJlZmVy ZW5jZXMgZm9yIERpZmZlcmVudCBDb21tYW5kcworCisgICBDZXJ0YWluIG9mdC11c2VkIGNvbW1h bmRzIG9mZmVyIGxvdHMgb2Ygc3dpdGNoZXMgYmVjYXVzZSBkaWZmZXJlbnQKKyAgIHBlb3BsZSBo YXZlIGRpZmZlcmVudCByZXF1aXJlbWVudHMgb3IgcHJlZmVyZW5jZXMuIEZvciBleGFtcGxlLCBz b21lCisgICBwZW9wbGUgd2FudCB0byBiZSBhYmxlIHRvIGRlbGV0ZSBmaWxlcyB3aXRob3V0IGhh dmluZyB0byB3YXRjaCBhIGxpc3QKKyAgIG9mIHRoZSBkZWxldGVkIGZpbGVzIHNjcm9sbCBwYXN0 LCB3aGlsZSBvdGhlcnMgd2FudCB0byBiZSBwcm9tcHRlZCBmb3IKKyAgIHBlcm1pc3Npb24gdG8g ZGVsZXRlIGVhY2ggZmlsZS4gRGlmZmVyZW50IHBlb3BsZSBwcmVmZXIgZGlmZmVyZW50CisgICBk aXJlY3RvcnktbGlzdGluZyBzdHlsZXMuIEFuZCBzbyBvbi4gU3VjaCBjb21tYW5kcyBjYW4gYmUg dGFpbG9yZWQgd2l0aAorICAgdGhlIFNFVCBPUFRJT05TIGNvbW1hbmQ6CisKKyAgIFNFVCBPUFRJ T05TIGNvbW1hbmQgWyBzd2l0Y2ggWyBzd2l0Y2ggWyAuLi4gXSBdIF0KKyAgICAgICAgICBTZXRz IGVhY2ggc3dpdGNoIGFzIHRoZSBkZWZhdWx0IGZvciB0aGUgZ2l2ZW4gY29tbWFuZCwgcmVwbGFj aW5nCisgICAgICAgICAgdGhlICJmYWN0b3J5IGRlZmF1bHQiLiBPZiBjb3Vyc2UgeW91IGNhbiBh bHNvIG92ZXJyaWRlIGFueQorICAgICAgICAgIGRlZmF1bHRzIGVzdGFibGlzaGVkIGJ5IHRoZSBT RVQgT1BUSU9OUyBjb21tYW5kIGJ5IGluY2x1ZGluZyB0aGUKKyAgICAgICAgICByZWxldmFudCBz d2l0Y2hlcyBpbiB0aGUgYWZmZWN0ZWQgY29tbWFuZCBhbnkgdGltZSB5b3UgaXNzdWUgaXQuCisK KyAgIFNIT1cgT1BUSU9OUworICAgICAgICAgIExpc3RzIHRoZSBjb21tYW5kcyB0aGF0IGFsbG93 cyBvcHRpb24tc2V0dGluZywgYW5kIHRoZSBvcHRpb25zCisgICAgICAgICAgY3VycmVudGx5IGlu IGVmZmVjdCwgaWYgYW55LCBmb3IgZWFjaC4gU3dpdGNoZXMgdGhhdCBoYXZlCisgICAgICAgICAg c3lub255bXMgYXJlIHNob3duIHVuZGVyIHRoZWlyIHByaW1hcnkgbmFtZTsgZm9yIGV4YW1wbGUu IC9MT0cKKyAgICAgICAgICBhbmQgL1ZFUkJPU0UgYXJlIHNob3duIGFzIC9MSVNULgorCisgICBD b21tYW5kcyBmb3Igd2hpY2ggb3B0aW9ucyBtYXkgYmUgc2V0IGluY2x1ZGUgRElSRUNUT1JZLCBE RUxFVEUsIFBVUkdFLAorICAgYW5kIFRZUEUuIEV4YW1wbGVzOgorCisgIFNFVCBPUFRJT05TIERJ UkVDVE9SWSAvUEFHRSAvTk9CQUNLVVAgL0hFQURJTkcgL1NPUlQ6REFURSAvUkVWRVJTRQorICBT RVQgT1BUSU9OUyBERUxFVEUgL0xJU1QgL05PSEVBRElORyAvTk9QQUdFIC9OT0FTSyAvTk9ET1RG SUxFUworICBTRVQgT1BUSU9OUyBUWVBFIC9QQUdFCisKKyAgIE5vdCBuZWNlc3NhcmlseSBhbGwg b2YgYSBjb21tYW5kJ3Mgc3dpdGNoZXMgY2FuIGJlIHNldCBhcyBvcHRpb25zLiBGb3IKKyAgIGV4 YW1wbGUsIGZpbGUgc2VsZWN0aW9uIHN3aXRjaGVzLCBzaW5jZSB0aGVzZSB3b3VsZCBub3JtYWxs eSBiZQorICAgZGlmZmVyZW50IGZvciBlYWNoIGNvbW1hbmQuCisKKyAgIFB1dCB0aGUgZGVzaXJl ZCBTRVQgT1BUSU9OUyBjb21tYW5kcyBpbiB5b3VyIEMtS2VybWl0IGN1c3RvbWl6YXRpb24KKyAg IGZpbGUgZm9yIGVhY2ggY29tbWFuZCB3aG9zZSBkZWZhdWx0IHN3aXRjaGVzIHlvdSB3YW50IHRv IGNoYW5nZSBldmVyeQorICAgdGltZSB5b3UgcnVuIEMtS2VybWl0LgorCisxLjYuIERhdGVzIGFu ZCBUaW1lcworCisgICBTb21lIGNvbW1hbmRzIGFuZCBzd2l0Y2hlcyB0YWtlIGRhdGUtdGltZSB2 YWx1ZXMsIHN1Y2ggYXM6CisKKyAgc2VuZCAvYWZ0ZXI6ezgtRmViLTIwMDAgMTA6Mjg6MDF9CisK KyAgIFZhcmlvdXMgZGF0ZS10aW1lIGZvcm1hdHMgYXJlIGFjY2VwdGFibGUuIFRoZSBydWxlcyBm b3IgdGhlIGRhdGUgYXJlOgorCisgICAgICogVGhlIHllYXIgbXVzdCBoYXZlIDQgZGlnaXRzLgor ICAgICAqIElmIHRoZSB5ZWFyIGNvbWVzIGZpcnN0LCB0aGUgc2Vjb25kIGZpZWxkIGlzIHRoZSBt b250aC4KKyAgICAgKiBUaGUgZGF5LCBtb250aCwgYW5kIHllYXIgbWF5IGJlIHNlcGFyYXRlZCBi eSBzcGFjZXMsIC8sIC0sIG9yCisgICAgICAgdW5kZXJzY29yZS4KKyAgICAgKiBUaGUgbW9udGgg bWF5IGJlIG51bWVyaWMgKDEgPSBKYW51YXJ5KSBvciBzcGVsbGVkIG91dCBvcgorICAgICAgIGFi YnJldmlhdGVkIGluIEVuZ2xpc2guCisKKyAgIElmIHRoZSBkYXRlLXRpbWUgc3RyaW5nIGNvbnRh aW5zIGFueSBzcGFjZXMsIGl0IG11c3QgYmUgZW5jbG9zZWQgaW4KKyAgIGJyYWNlcy4gRXhhbXBs ZXMgb2YgbGVnYWwgZGF0ZXM6CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVycHJl dGF0aW9uOgorICAyMDAwLUZlYi04ICAgICAgICAgICAgICAgIDggRmVicnVhcnkgMjAwMAorICB7 MjAwMCBGZWIgOH0gICAgICAgICAgICAgIDggRmVicnVhcnkgMjAwMAorICAyMDAwL0ZlYi84ICAg ICAgICAgICAgICAgIDggRmVicnVhcnkgMjAwMAorICAyMDAwX0ZlYl84ICAgICAgICAgICAgICAg IDggRmVicnVhcnkgMjAwMAorICAyMDAwLTItOCAgICAgICAgICAgICAgICAgIDggRmVicnVhcnkg MjAwMAorICAyMDAwLTAyLTA4ICAgICAgICAgICAgICAgIDggRmVicnVhcnkgMjAwMAorICA4LUZl Yi0yMDAwICAgICAgICAgICAgICAgIDggRmVicnVhcnkgMjAwMAorICAwOC1GZWItMjAwMCAgICAg ICAgICAgICAgIDggRmVicnVhcnkgMjAwMAorICAxMi8yNS8yMDAwICAgICAgICAgICAgICAgIDI1 IERlY2VtYmVyIDIwMDAKKyAgMjUvMTIvMjAwMCAgICAgICAgICAgICAgICAyNSBEZWNlbWJlciAy MDAwCisKKyAgIFRoZSBsYXN0IHR3byBleGFtcGxlcyBzaG93IHRoYXQgd2hlbiB0aGUgeWVhciBj b21lcyBsYXN0LCBhbmQgdGhlIG1vbnRoCisgICBpcyBnaXZlbiBudW1lcmljYWxseSwgdGhlIG9y ZGVyIG9mIHRoZSBkYXkgYW5kIG1vbnRoIGRvZXNuJ3QgbWF0dGVyIGFzCisgICBsb25nIGFzIHRo ZSBkYXkgaXMgMTMgb3IgZ3JlYXRlciAobW0vZGQveXl5eSBpcyBjb21tb25seSB1c2VkIGluIHRo ZQorICAgVVNBLCB3aGVyZWFzIGRkL21tL3l5eXkgaXMgdGhlIG5vcm0gaW4gRXVyb3BlKS4gSG93 ZXZlcjoKKworICAwOC8wMi8yMDAwICAgICAgICAgICAgICAgIElzIGFtYmlndW91cyBhbmQgdGhl cmVmb3JlIG5vdCBhY2NlcHRlZC4KKworICAgSWYgYSBkYXRlIGlzIGdpdmVuLCB0aGUgdGltZSBp cyBvcHRpb25hbCBhbmQgZGVmYXVsdHMgdG8gMDA6MDA6MDAuIElmCisgICB0aGUgdGltZSBpcyBn aXZlbiB3aXRoIGEgZGF0ZSwgaXQgbXVzdCBmb2xsb3cgdGhlIGRhdGUsIHNlcGFyYXRlZCBieQor ICAgc3BhY2UsIC8sIC0sIG9yIHVuZGVyc2NvcmUsIGFuZCB3aXRoIGhvdXJzLCBtaW51dGVzLCBh bmQgc2Vjb25kcworICAgc2VwYXJhdGVkIGJ5IGNvbG9uICg6KS4gRXhhbXBsZToKKworICAyMDAw LUZlYi04IDEwOjI4OjAxICAgICAgIFJlcHJlc2VudHMgOCBGZWJydWFyeSAyMDAwLCAxMDoyODow MWFtCisKKyAgIElmIGEgZGF0ZSBpcyBub3QgZ2l2ZW4sIHRoZSBjdXJyZW50IGRhdGUgaXMgdXNl ZCBhbmQgYSB0aW1lIGlzCisgICByZXF1aXJlZC4KKworICAgVGltZSBmb3JtYXQgaXMgaGg6bW06 c3Mgb3IgaGg6bW0gb3IgaGggaW4gMjQtaG91ciBmb3JtYXQsIG9yIGZvbGxvd2VkCisgICBieSAi YW0iIG9yICJwbSIgKG9yICJBTSIgb3IgIlBNIikgdG8gaW5kaWNhdGUgbW9ybmluZyBvciBhZnRl cm5vb24uCisgICBFeGFtcGxlcyBvZiB0aW1lcyB0aGF0IGFyZSBhY2NlcHRhYmxlOgorCisgICAg ICAgICAgICAgICAgICAgICAgICAgICBJbnRlcnByZXRhdGlvbjoKKyAgMzoyMzo1NiAgICAgICAg ICAgICAgICAgICAgMzoyMzo1NmFtCisgIDM6MjM6NTZhbSAgICAgICAgICAgICAgICAgIDM6MjM6 NTZhbQorICAzOjIzOjU2cG0gICAgICAgICAgICAgICAgICAzOjIzOjU2cG0gPSAxNToyMzo1Ngor IDE1OjIzOjU2ICAgICAgICAgICAgICAgICAgICAzOjIzOjU2cG0gPSAxNToyMzo1NgorICAzOjIz cG0gICAgICAgICAgICAgICAgICAgICAzOjIzOjAwcG0gPSAxNToyMzowMAorICAzOjIzUE0gICAg ICAgICAgICAgICAgICAgICAzOjIzOjAwcG0gPSAxNToyMzowMAorICAzcG0gICAgICAgICAgICAg ICAgICAgICAgICAzOjAwOjAwcG0gPSAxNTowMDowMAorCisgICBFeGFtcGxlcyBvZiBsZWdhbCBk YXRlLXRpbWVzOgorCisgIHNlbmQgL2FmdGVyOns4IEZlYiAyMDAwIDEwOjI4OjAxfQorICBzZW5k IC9hZnRlcjo4X0ZlYl8yMDAwXzEwOjI4OjAxCisgIHNlbmQgL2FmdGVyOjgtRmViLTIwMDAvMTA6 Mjg6MDEKKyAgc2VuZCAvYWZ0ZXI6MjAwMC8wMi8wOC8xMDoyODowMQorICBzZW5kIC9hZnRlcjoy MDAwLzAyLzA4XzEwOjI4OjAxCisgIHNlbmQgL2FmdGVyOjIwMDAvMDIvMDhfMTA6Mjg6MDFhbQor ICBzZW5kIC9hZnRlcjoyMDAwLzAyLzA4XzEwOjI4OjAxcG0KKyAgc2VuZCAvYWZ0ZXI6MjAwMC8w Mi8wOF8xMDoyOHBtCisgIHNlbmQgL2FmdGVyOjIwMDAvMDIvMDhfMTBwbQorICBzZW5kIC9hZnRl cjoxMDowMDowMHBtCisgIHNlbmQgL2FmdGVyOjEwOjAwcG0KKyAgc2VuZCAvYWZ0ZXI6MTBwbQor ICBzZW5kIC9hZnRlcjoyMgorCisgICBGaW5hbGx5LCB0aGVyZSBpcyBhIHNwZWNpYWwgYWxsLW51 bWVyaWMgZm9ybWF0IHlvdSBjYW4gdXNlOgorCisgIHl5eXltbWRkIGhoOm1tOnNzCisKKyAgIEZv ciBleGFtcGxlOgorCisgIDIwMDAwMjA4IDEwOjI4OjAxCisKKyAgIFRoaXMgaXMgS2VybWl0J3Mg c3RhbmRhcmQgZGF0ZS10aW1lIGZvcm1hdCAoYmFzZWQgb24gSVNPIDg2MDEpLCBhbmQgaXMKKyAg IGFjY2VwdGVkIChhbW9uZyBvdGhlciBmb3JtYXRzKSBieSBhbnkgY29tbWFuZCBvciBzd2l0Y2gg dGhhdCByZXF1aXJlcyBhCisgICBkYXRlLXRpbWUsIGFuZCBpcyBvdXRwdXQgYnkgYW55IGZ1bmN0 aW9uIHdob3NlIHJlc3VsdCBpcyBhIGNhbGVuZGFyCisgICBkYXRlLXRpbWUuCisKKyAgIFRoZXJl IGFyZSBubyBvcHRpb25hbCBwYXJ0cyB0byB0aGlzIGZvcm1hdCBhbmQgaXQgbXVzdCBiZSBleGFj dGx5IDE3CisgICBjaGFyYWN0ZXJzIGxvbmcsIHB1bmN0dWF0ZWQgYXMgc2hvd24gKGV4Y2VwdCB5 b3UgY2FuIHN1YnN0aXR1dGUKKyAgIHVuZGVyc2NvcmUgZm9yIHNwYWNlIGluIGNvbnRleHRzIHdo ZXJlIGEgc2luZ2xlICJ3b3JkIiBpcyByZXF1aXJlZCkuCisgICBUaGUgdGltZSBpcyBpbiAyNC1o b3VyIGZvcm1hdCAoMjM6MDA6MDAgaXMgMTE6MDBwbSkuIFRoaXMgaXMgdGhlIGZvcm1hdAorICAg cmV0dXJuZWQgYnkgXGZkYXRlKGZpbGVuYW1lKSwgc28geW91IGNhbiBhbHNvIHVzZSBjb25zdHJ1 Y3Rpb25zIGxpa2UKKyAgIHRoaXM6CisKKyAgc2VuZCAvYWZ0ZXI6XGZkYXRlKG9vZmEudHh0KQor CisgICB3aGljaCBtZWFucyAiYWxsIGZpbGVzIG5ld2VyIHRoYW4gb29mYS50eHQiLgorCisgICBC ZXNpZGVzIGV4cGxpY2l0IGRhdGVzLCB5b3UgY2FuIGFsc28gdXNlIHRoZSBhbnkgb2YgdGhlIGZv bGxvd2luZworICAgc2hvcnRjdXRzOgorCisgICBUT0RBWQorICAgICAgICAgIFN0YW5kcyBmb3Ig dGhlIGN1cnJlbnQgZGF0ZSBhdCAwMDowMDowMC4KKworICAgVE9EQVkgMTI6MzQ6NTYKKyAgICAg ICAgICBTdGFuZHMgZm9yIHRoZSBjdXJyZW50IGRhdGUgYXQgdGhlIGdpdmVuIHRpbWUuCisKKyAg IFlFU1RFUkRBWQorICAgICAgICAgIFN0YW5kcyBmb3IgeWVzdGVyZGF5J3MgZGF0ZSBhdCAwMDow MDowMC4gQSB0aW1lIG1heSBhbHNvIGJlCisgICAgICAgICAgZ2l2ZW4uCisKKyAgIFRPTU9SUk9X CisgICAgICAgICAgU3RhbmRzIGZvciB0b21vcnJvdydzIGRhdGUgYXQgMDA6MDA6MDAuIEEgdGlt ZSBtYXkgYWxzbyBiZQorICAgICAgICAgIGdpdmVuLgorCisgICArIG51bWJlciB7IERBWVMsIFdF RUtTLCBNT05USFMsIFlFQVJTIH0gWyB0aW1lIF0KKyAgICAgICAgICBJcyByZXBsYWNlZCBieSB0 aGUgZnV0dXJlIGRhdGUgaW5kaWNhdGVkLCByZWxhdGl2ZSB0byB0aGUKKyAgICAgICAgICBjdXJy ZW50IGRhdGUuIElmIHRoZSB0aW1lIGlzIG9taXR0ZWQsIDAwOjAwOjAwIGlzIHVzZWQuCisgICAg ICAgICAgRXhhbXBsZXM6ICszZGF5cywgKzJ3ZWVrcywgKzF5ZWFyLCArMzdtb250aHMuCisKKyAg IC0gbnVtYmVyIHsgREFZUywgV0VFS1MsIE1PTlRIUywgWUVBUlMgfSBbIHRpbWUgXQorCisgICAg ICAgICAgSXMgcmVwbGFjZWQgYnkgdGhlIHBhc3QgZGF0ZSBpbmRpY2F0ZWQsIHJlbGF0aXZlIHRv IHRoZSBjdXJyZW50CisgICAgICAgICAgZGF0ZS4gSWYgdGhlIHRpbWUgaXMgb21pdHRlZCwgMDA6 MDA6MDAgaXMgdXNlZC4KKworICAgVGhlIHRpbWUgY2FuIGJlIHNlcGFyYXRlZCBmcm9tIHRoZSBk YXRlIHNob3J0Y3V0IGJ5IGFueSBvZiB0aGUgc2FtZQorICAgc2VwYXJhdG9ycyB0aGF0IGFyZSBh bGxvd2VkIGZvciBleHBsaWNpdCBkYXRlLXRpbWVzOiBzcGFjZSwgaHlwaGVuLAorICAgc2xhc2gs IHBlcmlvZCwgb3IgdW5kZXJzY29yZS4gSW4gc3dpdGNoZXMgYW5kIG90aGVyIHNwYWNlLWRlbGlt aXRlZAorICAgZmllbGRzLCB1c2Ugbm9uLXNwYWNlcyB0byBzZXBhcmF0ZSBkYXRlL3RpbWUgZmll bGRzLCBvciBlbmNsb3NlIHRoZQorICAgZGF0ZS10aW1lIGluIGJyYWNlcywgZS5nLjoKKworICBw dXJnZSAvYmVmb3JlOi00ZGF5c18xMjowMDowMAorICBwdXJnZSAvYmVmb3JlOnstIDQgZGF5cyAx MjowMDowMH0KKworICAgT2YgY291cnNlIHlvdSBjYW4gYWxzbyB1c2UgdmFyaWFibGVzOgorCisg IGRlZmluZSBcJW4gNDMKKyAgcHVyZ2UgL2JlZm9yZTotXCVuZGF5c18xMjowMDowMAorCisgICBT aG9ydGN1dCBuYW1lcyBjYW4gYmUgYWJicmV2aWF0ZWQgdG8gYW55IGxlbmd0aCB0aGF0IHN0aWxs CisgICBkaXN0aW5ndWlzaGVzIHRoZW0gZnJvbSBhbnkgb3RoZXIgbmFtZSB0aGF0IGNhbiBhcHBl YXIgaW4gdGhlIHNhbWUKKyAgIGNvbnRleHQsIGUuZy4gIlRPRCIgZm9yIHRvZGF5LCAiWSIgZm9y IHllc3RlcmRheS4gQWxzbywgdGhlIHNwZWNpYWwKKyAgIGFiYnJldmlhdGlvbiAid2tzIiBpcyBh Y2NlcHRlZCBmb3IgV0VFS1MsIGFuZCAieXJzIiBmb3IgIllFQVJTIi4KKworICAgKFRvIHNlZSBo b3cgdG8gc3BlY2lmeSBkYXRlcyByZWxhdGl2ZSB0byBhIHNwZWNpZmljIGRhdGUsIHJhdGhlciB0 aGFuCisgICB0aGUgY3VycmVudCBvbmUsIHNlZSB0aGUgWzM2M11cZm1qZCgpIGZ1bmN0aW9uIGRl c2NyaXB0aW9uIGJlbG93LikKKworICAgWW91IGNhbiBjaGVjayBkYXRlIGZvcm1hdHMgd2l0aCB0 aGUgREFURSBjb21tYW5kLiBEQVRFIGJ5IGl0c2VsZiBwcmludHMKKyAgIHRoZSBjdXJyZW50IGRh dGUgYW5kIHRpbWUgaW4gc3RhbmRhcmQgZm9ybWF0OiB5eXl5bW1kZCBoaDptbTpzcy4gREFURQor ICAgZm9sbG93ZWQgYnkgYSBkYXRlIGFuZC9vciB0aW1lIChpbmNsdWRpbmcgc2hvcnRjdXRzKSBj b252ZXJ0cyBpdCB0bworICAgc3RhbmRhcmQgZm9ybWF0IGlmIGl0IGNhbiB1bmRlcnN0YW5kIGl0 LCBvdGhlcndpc2UgaXQgcHJpbnRzIGFuIGVycm9yCisgICBtZXNzYWdlLgorCisgICBUaGUgZm9s bG93aW5nIHZhcmlhYmxlcyBhbmQgZnVuY3Rpb25zIGRlYWwgd2l0aCBkYXRlcyBhbmQgdGltZXM7 IGFueQorICAgZnVuY3Rpb24gYXJndW1lbnQgZGVzaWduYXRlZCBhcyAiZGF0ZS10aW1lIiBjYW4g YmUgaW4gYW55IG9mIHRoZQorICAgZm9ybWF0cyBkZXNjcmliZWQgYWJvdmUuCisKKyAgIFx2KGRh eSkKKyAgICAgICAgICBUaGUgZmlyc3QgdGhyZWUgbGV0dGVycyBvZiB0aGUgRW5nbGlzaCB3b3Jk IGZvciB0aGUgY3VycmVudCBkYXkKKyAgICAgICAgICBvZiB0aGUgd2VlaywgZS5nLiAiV2VkIi4K KworICAgXGZkYXkoZGF0ZS10aW1lKQorICAgICAgICAgIFRoZSBmaXJzdCB0aHJlZSBsZXR0ZXJz IG9mIHRoZSBFbmdsaXNoIHdvcmQgZm9yIGRheSBvZiB0aGUgd2VlaworICAgICAgICAgIG9mIHRo ZSBnaXZlbiBkYXRlLiBJZiBhIHRpbWUgaXMgaW5jbHVkZWQsIGl0IGlzIGlnbm9yZWQuCisgICAg ICAgICAgRXhhbXBsZTogXGZkYXkoOCBGZWIgMTk4OCkgPSAiTW9uIi4KKworICAgXHYobmRheSkK KyAgICAgICAgICBUaGUgbnVtZXJpYyBkYXkgb2YgdGhlIHdlZWs6IDAgPSBTdW5kYXksIDEgPSBN b25kYXksIC4uLiwgNiA9CisgICAgICAgICAgU2F0dXJkYXkuCisKKyAgIFxmbmRheShkYXRlLXRp bWUpCisgICAgICAgICAgVGhlIG51bWVyaWMgZGF5IG9mIHRoZSB3ZWVrIGZvciB0aGUgZ2l2ZW4g ZGF0ZS4gSWYgYSB0aW1lIGlzCisgICAgICAgICAgaW5jbHVkZWQsIGl0IGlzIGlnbm9yZWQuIEV4 YW1wbGU6IFxmbmRheSg4IEZlYiAxOTg4KSA9ICIxIi4KKworICAgXHYoZGF0ZSkKKyAgICAgICAg ICBUaGUgY3VycmVudCBkYXRlIGFzIGRkIG1tbSB5eXl5LCBlLmcuICIwOCBGZWIgMjAwMCIgKGFz IGluIHRoaXMKKyAgICAgICAgICBleGFtcGxlLCBhIGxlYWRpbmcgemVybyBpcyBzdXBwbGllZCBm b3IgZGF5LW9mLW1vbnRoIGxlc3MgdGhhbgorICAgICAgICAgIDEwKS4KKworICAgXHYobmRhdGUp CisgICAgICAgICAgVGhlIGN1cnJlbnQgZGF0ZSBpbiBudW1lcmljIGZvcm1hdDogeXl5eW1tZGQs IGUuZy4gIjIwMDAwMjA4Ii4KKworICAgXHYodGltZSkKKyAgICAgICAgICBUaGUgY3VycmVudCB0 aW1lIGFzIGhoOm1tOnNzLCBlLmcuICIxNToyNzoxNCIuCisKKyAgIFxmdGltZSh0aW1lKQorICAg ICAgICAgIFRoZSBnaXZlbiBmcmVlLWZvcm1hdCBkYXRlIGFuZC9vciB0aW1lIChlLmcuICIzcG0i KSByZXR1cm5zIHRoZQorICAgICAgICAgIHRpbWUgKHdpdGhvdXQgdGhlIGRhdGUpIGNvbnZlcnRl ZCB0byBoaDptbTpzcyAyNC1ob3VyIGZvcm1hdCwKKyAgICAgICAgICBlLmcuICIxNTowMDowMCIg KHRoZSBkYXRlLCBpZiBnaXZlbiwgaXMgaWdub3JlZCkuCisKKyAgIFx2KG50aW1lKQorICAgICAg ICAgIFRoZSBjdXJyZW50IHRpbWUgYXMgc2Vjb25kcyBzaW5jZSBtaWRuaWdodCwgZS5nLiAiNTU2 MzQiLgorCisgICBcdih0ZnRpbWUpCisgICAgICAgICAgVGhlIGVsYXBzZWQgdGltZSBvZiB0aGUg bW9zdCByZWNlbnQgZmlsZS10cmFuc2ZlciBvcGVyYXRpb24gaW4KKyAgICAgICAgICBzZWNvbmRz LgorCisgICBcdihpbnRpbWUpCisgICAgICAgICAgVGhlIGVsYXBzZWQgdGltZSBmb3IgdGhlIG1v c3QgcmVjZW50IElOUFVUIGNvbW1hbmQgdG8gY29tcGxldGUsCisgICAgICAgICAgaW4gbWlsbGlz ZWNvbmRzLgorCisgICBcZm50aW1lKHRpbWUpCisgICAgICAgICAgVGhlIGdpdmVuIGZyZWUtZm9y bWF0IGRhdGUgYW5kL29yIHRpbWUgaXMgY29udmVydGVkIHRvIHNlY29uZHMKKyAgICAgICAgICBz aW5jZSBtaWRuaWdodCAodGhlIGRhdGUsIGlmIGdpdmVuLCBpcyBpZ25vcmVkKS4gVGhpcyBmdW5j dGlvbgorICAgICAgICAgIHJlcGxhY2VzIFxmdG9kMnNlY3MoKSwgd2hpY2ggaXMgbm93IGEgc3lu b255bSBmb3IgXGZudGltZSgpLgorICAgICAgICAgIFVubGlrZSBcZnRvZDJzZWNzKCksIFxmbnRp bWUoKSBhbGxvd3MgYSBkYXRlIHRvIGJlIGluY2x1ZGVkLCBhbmQKKyAgICAgICAgICBpdCBhbGxv d3MgdGhlIHRpbWUgdG8gYmUgaW4gZnJlZSBmb3JtYXQgKGxpa2UgM3BtKSwgYW5kIGl0CisgICAg ICAgICAgYWxsb3dzIHRoZSBhbW91bnQgb2YgdGltZSB0byBiZSBtb3JlIHRoYW4gMjQgaG91cnMu IEUuZy4KKyAgICAgICAgICBcZm50aW1lKDQ4OjAwOjAwKSA9IDE3MjgwMC4gRXhhbXBsZSBvZiB1 c2U6CisKKyAgc2V0IGFsYXJtIFxmbnRpbWUoNDg6MDA6MDApIDsgc2V0IGFsYXJtIDQ4IGhvdXJz IGZyb20gbm93LgorCisgICBcZm4ydGltZShzZWNvbmRzKQorICAgICAgICAgIFRoZSBnaXZlbiBu dW1iZXIgb2Ygc2Vjb25kcyBpcyBjb252ZXJ0ZWQgdG8gaGg6bW06c3MgZm9ybWF0LgorCisgICBc ZmRhdGUoZmlsZW5hbWUpCisgICAgICAgICAgUmV0dXJucyB0aGUgbW9kaWZpY2F0aW9uIGRhdGUt dGltZSBvZiB0aGUgZ2l2ZW4gZmlsZSBpbiBzdGFuZGFyZAorICAgICAgICAgIGZvcm1hdDogeXl5 eW1tZGQgaGg6bW06c3MuCisKKyAgIFxmY3Z0ZGF0ZShkYXRlLXRpbWUpCisgICAgICAgICAgQ29u dmVydHMgYSBmcmVlLWZvcm1hdCBkYXRlIGFuZC9vciB0aW1lIHRvIEtlcm1pdCBzdGFuZGFyZAor ICAgICAgICAgIGZvcm1hdDogeXl5eW1tZGQgaGg6bW06c3MuIElmIG5vIGFyZ3VtZW50IGlzIGdp dmVuLCByZXR1cm5zIHRoZQorICAgICAgICAgIGN1cnJlbnQgZGF0ZS10aW1lIGluIHN0YW5kYXJk IGZvcm1hdC4gSWYgYSBkYXRlIGlzIGdpdmVuIGJ1dCBubworICAgICAgICAgIHRpbWUsIHRoZSBj b252ZXJ0ZWQgZGF0ZSBpcyByZXR1cm5lZCB3aXRob3V0IGEgdGltZS4gSWYgYSB0aW1lCisgICAg ICAgICAgaXMgZ2l2ZW4gd2l0aCBubyBkYXRlLCB0aGUgY3VycmVudCBkYXRlIGlzIHN1cHBsaWVk LiBFeGFtcGxlczoKKworICBcZmN2dGRhdGUoNCBKdWwgMjAwMCAyOjIxOjE3cG0pID0gMjAwMDA3 MDQgMTQ6MjE6MTcKKyAgXGZjdnRkYXRlKCkgPSAyMDAwMDcwNCAxNDoyMToxNyAob24gNCBKdWwg MjAwMCBhdCAyOjIxOjE3cG0pLgorICBcZmN2dGQoNCBKdWwgMjAwMCkgPSAyMDAwMDcwNAorICBc ZmN2dGQoNnBtKSA9IDIwMDAwNzA0IDE4OjAwOjAwIChvbiA0IEp1bCAyMDAwIGF0IDY6MDBwbSku CisKKyAgIFxmZGF5b2Z5ZWFyKGRhdGUtdGltZSkKKyAgIFxmZG95KGRhdGUtdGltZSkKKyAgICAg ICAgICBDb252ZXJ0cyBhIGZyZWUtZm9ybWF0IGRhdGUgYW5kL29yIHRpbWUgdG8geXl5eWRkZCwg d2hlcmUgZGRkIGlzCisgICAgICAgICAgdGhlIDMtZGlnaXQgZGF5IG9mIHRoZSB5ZWFyLCBhbmQg MSBKYW51YXJ5IGlzIERheSAxLiBJZiBhIHRpbWUKKyAgICAgICAgICBpcyBpbmNsdWRlZCB3aXRo IHRoZSBkYXRlLCBpdCBpcyByZXR1cm5lZCBpbiBzdGFuZGFyZCBmb3JtYXQuIElmCisgICAgICAg ICAgYSBkYXRlIGlzIGluY2x1ZGVkIGJ1dCBubyB0aW1lLCB0aGUgZGF0ZSBpcyByZXR1cm5lZCB3 aXRob3V0IGEKKyAgICAgICAgICB0aW1lLiBJZiBhIHRpbWUgaXMgZ2l2ZW4gd2l0aCBubyBkYXRl LCB0aGUgdGltZSBpcyBjb252ZXJ0ZWQgYW5kCisgICAgICAgICAgdGhlIGN1cnJlbnQgZGF0ZSBp cyBzdXBwbGllZC4gSWYgbm8gYXJndW1lbnQgaXMgZ2l2ZW4sIHRoZQorICAgICAgICAgIGN1cnJl bnQgZGF0ZS10aW1lIGlzIHJldHVybmVkLiBTeW5vbnltOiBcZmRveSgpLiBFeGFtcGxlczoKKwor ICBcZmRkYXlvZnllYXIoNCBKdWwgMjAwMCAyOjIxOjE3cG0pID0gMjAwMDE4NSAxNDoyMToxNwor ICBcZmRveSgpID0gMjAwMDE4NSAxNDoyMToxNyAob24gNCBKdWwgMjAwMCBhdCAyOjIxOjE3cG0p LgorICBcZmRveSg0IEp1bCAyMDAwKSA9IDIwMDAxODUKKyAgXGZkb3koNnBtKSA9IDIwMDAxODUg MTg6MDA6MDAgKG9uIDQgSnVsIDIwMDAgYXQgNjowMHBtKS4KKworICAgTm90ZTogVGhlIHl5eXlk ZGQgZGF5LW9mLXllYXIgZm9ybWF0IGlzIG9mdGVuIGVycm9uZW91c2x5IHJlZmVycmVkIHRvCisg ICBhcyBhIEp1bGlhbiBkYXRlLiBIb3dldmVyLCBhIHRydWUgSnVsaWFuIGRhdGUgaXMgYSBzaW1w bGUgY291bnRpbmcKKyAgIG51bWJlciwgdGhlIG51bWJlciBvZiBkYXlzIHNpbmNlIGEgY2VydGFp biBmaXhlZCBkYXkgaW4gdGhlIHBhc3QuCisgICBbMzY0XVNlZSBcZm1qZCgpIGJlbG93LgorCisg ICBcZmRveTJkYXRlKGRhdGUtdGltZSkKKyAgICAgICAgICBDb252ZXJ0cyBhIGRhdGUgb3IgZGF0 ZS10aW1lIGluIGRheS1vZi15ZWFyIGZvcm1hdCB0byBhIHN0YW5kYXJkCisgICAgICAgICAgZm9y bWF0IGRhdGUuIEEgeXl5eWRkZC1mb3JtYXQgZGF0ZSBtdXN0IGJlIHN1cHBsaWVkOyB0aW1lIGlz CisgICAgICAgICAgb3B0aW9uYWwuIFRoZSBnaXZlbiBkYXRlIGlzIGNvbnZlcnRlZCB0byB5eXl5 bW1kZCBmb3JtYXQuIElmIGEKKyAgICAgICAgICB0aW1lIGlzIGdpdmVuLCBpdCBpcyBjb252ZXJ0 ZWQgdG8gMjQtaG91ciBmb3JtYXQuIEV4YW1wbGVzOgorCisgIFxmZG95MmRhdGUoMjAwMDE4NSkg PSAyMDAwMDcwNAorICBcZmRveTIoMjAwMDE4NSAzcG0pID0gMjAwMDA3MDQgMTU6MDA6MDAKKwor ICAgXGZtamQoZGF0ZS10aW1lKQorICAgICAgICAgIENvbnZlcnRzIGZyZWUtZm9ybWF0IGRhdGUg YW5kL29yIHRpbWUgdG8gYSBNb2RpZmllZCBKdWxpYW4gRGF0ZQorICAgICAgICAgIChNSkQpLCB0 aGUgbnVtYmVyIG9mIGRheXMgc2luY2UgMTcgTm92IDE4NTggMDA6MDA6MDAuIElmIGEgdGltZQor ICAgICAgICAgIGlzIGdpdmVuLCBpdCBpcyBpZ25vcmVkLiBFeGFtcGxlczoKKworICBcZm1qZCg0 IEp1bCAyMDAwKSA9IDUwOTk4CisgIFxmbWpkKDE3IE5vdiAxODU4KSA9IDAKKyAgXGZtamQoMTYg Tm92IDE4NTgpID0gLTEKKworICAgXGZtamQyZGF0ZShtamQpCisgICAgICAgICAgQ29udmVydHMg YW4gTUpEIChpbnRlZ2VyKSB0byBzdGFuZGFyZCBkYXRlIGZvcm1hdCwgeXl5eW1tZGQ6CisKKyAg XGZtamQyKDUwOTk4KSA9IDQgSnVsIDE5OTgKKyAgXGZtamQyKDApID0gMTcgTm92IDE4NTgKKyAg XGZtamQyKC0xKSA9IDE2IE5vdiAxODU4CisgIFxmbWpkMigtMzY1KSA9IDE3IE5vdiAxODU3CisK KyAgIE1KRHMgYXJlIG5vcm1hbCBpbnRlZ2VycyBhbmQsIHVubGlrZSBET1lzLCBtYXkgYmUgYWRk ZWQsIHN1YnRyYWN0ZWQsCisgICBldGMsIHdpdGggZWFjaCBvdGhlciBvciB3aXRoIG90aGVyIGlu dGVnZXJzLCB0byBvYnRhaW4gbWVhbmluZ2Z1bAorICAgcmVzdWx0cy4gRm9yIGV4YW1wbGUsIHRv IGZpbmQgb3V0IHRoZSBkYXRlIDIxMiBkYXlzIGFnbzoKKworICBlY2hvIFxmbWpkMmRhdGUoXGZt amQoKS0yMTIpCisKKyAgIENvbnN0cnVjdGlvbnMgc3VjaCBhcyB0aGlzIGNhbiBiZSB1c2VkIGlu IGFueSBjb21tYW5kIHdoZXJlIGEgZGF0ZS10aW1lCisgICBpcyByZXF1aXJlZCwgZS5nLjoKKwor ICBzZW5kIC9hZnRlcjpcZm1qZDJkYXRlKFxmbWpkKCktMjEyKQorCisgICB0byBzZW5kIGFsbCBm aWxlcyB0aGF0IGFyZSBub3Qgb2xkZXIgdGhhbiAyMTIgZGF5cyAodGhpcyBpcyBlcXVpdmFsZW50 CisgICB0byAic2VuZCAvYWZ0ZXI6LTIxMmRheXMiKS4KKworICAgTUpEcyBhbHNvIGhhdmUgb3Ro ZXIgcmVndWxhcml0aWVzIG5vdCBleGhpYml0ZWQgYnkgb3RoZXIgZGF0ZSBmb3JtYXRzLgorICAg Rm9yIGV4YW1wbGUsIFxmbW9kdWx1cyhcZm1qZChhbnktZGF0ZSksNykgZ2l2ZXMgdGhlIGRheSBv ZiB0aGUgd2VlayBmb3IKKyAgIGFueSBkYXRlICh3aGVyZSA0PVN1biwgNT1Nb24sIC4uLiwgMz1T YXQpLiAoSG93ZXZlciwgaXQgaXMgZWFzaWVyIHRvCisgICB1c2UgXGZuZGF5KCkgZm9yIHRoaXMg cHVycG9zZSwgYW5kIGl0IGdpdmVzIHRoZSBtb3JlIGNvbnZlbnRpb25hbAorICAgcmVzdWx0IG9m IDA9U3VuLCAxPU1vbiwgLi4uLCA2PVNhdCkuCisKKyAgIE5vdGUgdGhhdCBpZiBNSkRzIGFyZSB0 byBiZSBjb21wYXJlZCwgdGhleSBtdXN0IGJlIGNvbXBhcmVkIG51bWVyaWNhbGx5CisgICAoSUYg PCwgPSwgPikgYW5kIG5vdCBsZXhpY2FsbHkgKElGIExMVCwgRVFVQUwsIExHVCksIHdoZXJlYXMg RE9ZcyBtdXN0CisgICBiZSBjb21wYXJlZCBsZXhpY2FsbHkgaWYgdGhleSBpbmNsdWRlIGEgdGlt ZSAod2hpY2ggY29udGFpbnMgIjoiCisgICBjaGFyYWN0ZXJzKTsgaG93ZXZlciwgaWYgRE9ZcyBk byBub3QgaW5jbHVkZSBhIHRpbWUsIHRoZXkgbWF5IGFsc28gYmUKKyAgIGNvbXBhcmVkIG51bWVy aWNhbGx5LgorCisgICBJbiBhbnkgY2FzZSwgbGV4aWNhbCBjb21wYXJpc29uIG9mIERPWXMgYWx3 YXlzIHByb2R1Y2VzIHRoZSBhcHByb3ByaWF0ZQorICAgcmVzdWx0LCBhcyBkb2VzIG51bWVyaWMg Y29tcGFyaXNvbiBvZiBNSkRzLgorCisgICBUaGUgc2FtZSBjb21tZW50cyBhcHBseSB0byBzb3J0 aW5nLiBBbHNvIG5vdGUgdGhhdCBET1lzIGFyZSBmaXhlZAorICAgbGVuZ3RoLCBidXQgTUpEcyBj YW4gdmFyeSBpbiBsZW5ndGguIEhvd2V2ZXIsIGFsbCBNSkRzIGJldHdlZW4gMyBBcHJpbAorICAg MTg4NiBhbmQgMzAgQXVnIDIxMzIgYXJlIDUgZGVjaW1hbCBkaWdpdHMgbG9uZy4gKE1KRHMgYmVj b21lIDYgZGlnaXRzCisgICBsb25nIG9uIDMxIEF1ZyAyMTMyLCBhbmQgNyBkaWdpdHMgbG9uZyBv biAxMyBPY3QgNDU5NikuCisKKzEuNy4gUGFydGlhbCBDb21wbGV0aW9uIG9mIEtleXdvcmRzCisK KyAgIFBhcnRpYWwgY29tcGxldGlvbiBvZiBrZXl3b3JkcyB3YXMgYWRkZWQgaW4gQy1LZXJtaXQg Ny4wLiBJbiBwcmlvcgorICAgdmVyc2lvbnMsIGlmIGNvbXBsZXRpb24gd2FzIGF0dGVtcHRlZCAo YnkgcHJlc3NpbmcgdGhlIEVzYyBvciBUYWIga2V5KQorICAgb24gYSBzdHJpbmcgdGhhdCBtYXRj aGVkIGRpZmZlcmVudCBrZXl3b3JkcywgeW91J2QganVzdCBnZXQgYSBiZWVwLiBOb3cKKyAgIEtl cm1pdCBjb21wbGV0ZXMgdXAgdG8gdGhlIGZpcnN0IGNoYXJhY3RlciB3aGVyZSB0aGUgcG9zc2li bHkgbWF0Y2hpbmcKKyAgIGtleXdvcmRzIGRpZmZlciBhbmQgdGhlbiBiZWVwcy4gRm9yIGV4YW1w bGU6CisKKyAgQy1LZXJtaXQ+IHNlbmQgL248VGFiPgorCisgICB3aGljaCBtYXRjaGVzIC9OT1Qt QkVGT1JFIGFuZCAvTk9ULUFGVEVSLCBub3cgY29tcGxldGVzIHVwIHRvIHRoZSBkYXNoOgorCisg IEMtS2VybWl0PiBzZW5kIC9uPFRhYj5vdC08QmVlcD4KKworICAgUGFydGlhbCBjb21wbGV0aW9u IHdvcmtzIGZvciBmaWxlbmFtZXMgdG9vIChhcyBpdCBoYXMgZm9yIHNvbWUgeWVhcnMpLgorCisx LjguIENvbW1hbmQgUmVjYWxsCisKKyAgIEMtS2VybWl0IGhhcyBoYWQgYSBjb21tYW5kIGhpc3Rv cnkgYnVmZmVyIGZvciBzb21lIHRpbWUsIHdoaWNoIGNvdWxkIGJlCisgICBzY3JvbGxlZCBpbnRl cmFjdGl2ZWx5IHVzaW5nIGNvbnRyb2wgY2hhcmFjdGVycyBvciAoaW4gS2VybWl0IDk1IG9ubHkp CisgICBhcnJvdyBrZXlzLiBWZXJzaW9uIDcuMCBhZGRzIGEgUkVETyBjb21tYW5kIHRoYXQgYWxs b3dzIHRoZSBtb3N0IHJlY2VudAorICAgY29tbWFuZCBtYXRjaGluZyBhIGdpdmVuIHBhdHRlcm4g dG8gYmUgcmUtZXhlY3V0ZWQ6CisKKyAgIHsgUkVETywgUlIsIF4gfSBbIHBhdHRlcm4gXQorICAg ICAgICAgIFNlYXJjaCB0aGUgY29tbWFuZCBoaXN0b3J5IGxpc3QgZm9yIHRoZSBtb3N0IHJlY2Vu dCBjb21tYW5kIHRoYXQKKyAgICAgICAgICBtYXRjaGVzIHRoZSBnaXZlbiBwYXR0ZXJuLCBhbmQg aWYgb25lIGlzIGZvdW5kLCBleGVjdXRlIGl0CisgICAgICAgICAgYWdhaW4uCisKKyAgIFRoZSBw YXR0ZXJuIGNhbiBiZSBhIHNpbXBsZSBzdHJpbmcgKGxpa2UgInNlbmQiKSwgaW4gd2hpY2ggY2Fz ZSB0aGUKKyAgIGxhc3QgU0VORCBjb21tYW5kIGlzIHJlLWV4ZWN1dGVkLiBPciBpdCBjYW4gY29u dGFpbiB3aWxkY2FyZCBjaGFyYWN0ZXJzCisgICAiKiIgYW5kL29yICI/Iiwgd2hpY2ggbWF0Y2gg YW55IHN0cmluZyBhbmQgYW55IHNpbmdsZSBjaGFyYWN0ZXIsCisgICByZXNwZWN0aXZlbHkgKG5v dGUgdGhhdCAiPyIgbXVzdCBiZSBwcmVjZWRlZCBieSBiYWNrc2xhc2ggdG8gb3ZlcnJpZGUKKyAg IGl0cyBub3JtYWwgZnVuY3Rpb24gb2YgZ2l2aW5nIGhlbHApLCBhbmQgaW4gbW9zdCBDLUtlcm1p dCB2ZXJzaW9ucyBtYXkKKyAgIGFsc28gaW5jbHVkZSBbXSBjaGFyYWN0ZXIgbGlzdHMgYW5kIHt9 IHN0cmluZyBsaXN0cyAoc2VlIFszNjVdU2VjdGlvbgorICAgNC45KS4KKworICAgVGhlIG1hdGNo IHdvcmtzIGJ5IGFwcGVuZGluZyAiKiIgdG8gdGhlIGVuZCBvZiB0aGUgZ2l2ZW4gcGF0dGVybiAo aWYKKyAgIHlvdSBkaWRuJ3QgcHV0IG9uZSB0aGVyZSB5b3Vyc2VsZikuIFRodXMgInJlZG8gKm9v ZmEiIGJlY29tZXMgInJlZG8KKyAgICpvb2ZhKiIgYW5kIHRoZXJlZm9yZSBtYXRjaGVzIHRoZSBt b3N0IHJlY2VudCBjb21tYW5kIHRoYXQgY29udGFpbnMKKyAgICJvb2ZhIiBhbnl3aGVyZSB3aXRo aW4gdGhlIGNvbW1hbmQuIElmIHlvdSB3YW50IHRvIGluaGliaXQgdGhlCisgICBhcHBsaWNhdGlv biBvZiB0aGUgdHJhaWxpbmcgIioiLCBlLmcuIHRvIGZvcmNlIG1hdGNoaW5nIGEgc3RyaW5nIGF0 IHRoZQorICAgZW5kIG9mIGEgY29tbWFuZCwgZW5jbG9zZSB0aGUgcGF0dGVybiBpbiBicmFjZXM6 CisKKyAgcmVkbyB7Km9vZmF9CisKKyAgIG1hdGNoZXMgdGhlIG1vc3QgcmVjZW50IGNvbW1hbmQg dGhhdCBlbmRzIHdpdGggIm9vZmEiLgorCisgICBSRURPIGNvbW1hbmRzIHRoZW1zZWx2ZXMgYXJl IG5vdCBlbnRlcmVkIGludG8gdGhlIGNvbW1hbmQgaGlzdG9yeSBsaXN0LgorICAgSWYgbm8gcGF0 dGVybiBpcyBnaXZlbiwgdGhlIHByZXZpb3VzIChub24tUkVETykgY29tbWFuZCBpcyByZS1leGVj dXRlZC4KKyAgIFRoZSBSRURPbmUgY29tbWFuZCBpcyByZWluc2VydGVkIGF0IHRoZSBlbmQgb2Yg dGhlIGNvbW1hbmQgaGlzdG9yeQorICAgYnVmZmVyLCBzbyB0aGUgY29tbWFuZCBzY3JvbGxiYWNr IGNoYXJhY3RlciAoQ3RybC1QLCBDdHJsLUIsIG9yCisgICBVcGFycm93KSBjYW4gcmV0cmlldmUg aXQuCisKKyAgIEV4YW1wbGVzOgorCisgIEMtS2VybWl0PiBlY2hvIGZvbworICBmb28KKyAgQy1L ZXJtaXQ+IHNob3cgYWxhcm0KKyAgKG5vIGFsYXJtIHNldCkKKyAgQy1LZXJtaXQ+IGVjaG8gYmxh aAorICBibGFoCisgIEMtS2VybWl0PiByZWRvICAgICAgICAgIDsgTW9zdCByZWNlbnQgY29tbWFu ZAorICBibGFoCisgIEMtS2VybWl0PiByZWRvIHMgICAgICAgIDsgTW9zdCByZWNlbnQgY29tbWFu ZCBzdGFydGluZyB3aXRoICJzIgorICAobm8gYWxhcm0gc2V0KQorICBDLUtlcm1pdD4gcmVkbyBl Y2hvIGYgICA7IE1vc3QgcmVjZW50IGNvbW1hbmQgc3RhcnRpbmcgd2l0aCAiZWNobyBmIgorICBm b28KKyAgQy1LZXJtaXQ+IHJlZG8gKmZvbyAgICAgOyBNb3N0IHJlY2VudCBjb21tYW5kIHRoYXQg aGFzICJmb28iIGluIGl0CisgIGZvbworICBDLUtlcm1pdD4gPEN0cmwtUD4gICAgICA7IFNjcm9s bCBiYWNrCisgIEMtS2VybWl0PiBlY2hvIGZvbyAgICAgIDsgVGhlIFJFRE9uZSBjb21tYW5kIGlz IHRoZXJlCisgIEMtS2VybWl0PiByZWRvIHsqZm9vfSAgIDsgTW9zdCByZWNlbnQgY29tbWFuZCB0 aGF0IGVuZHMgd2l0aCAiZm9vIgorICBmb28KKyAgQy1LZXJtaXQ+CisKKyAgIFNpbmNlIFJFRE8s IFJFRElBTCwgYW5kIFJFRElSRUNUIGFsbCBzdGFydCB0aGUgc2FtZSB3YXksIGFuZCBSRUQgaXMg dGhlCisgICBkZXNpZ25hdGVkIG5vbi11bmlxdWUgYWJicmV2aWF0aW9uIGZvciBSRURJQUwsIFJF RE8gbXVzdCBiZSBzcGVsbGVkIG91dAorICAgaW4gZnVsbC4gRm9yIGNvbnZlbmllbmNlLCBSUiBp cyBpbmNsdWRlZCBhcyBhbiBpbnZpc2libGUgZWFzeS10by10eXBlCisgICBzeW5vbnltIGZvciBS RURPLiBZb3UgY2FuIGFsc28gdXNlIHRoZSAiXiIgY2hhcmFjdGVyIGZvciB0aGlzOgorCisgIEMt S2VybWl0PiBeICAgICAgICAgICAgIDsgTW9zdCByZWNlbnQgY29tbWFuZAorICBDLUtlcm1pdD4g XiBzICAgICAgICAgICA7IE1vc3QgcmVjZW50IGNvbW1hbmQgc3RhcnRpbmcgd2l0aCAicyIKKyAg Qy1LZXJtaXQ+IF5zICAgICAgICAgICAgOyBEaXR0byAoc3BhY2Ugbm90IHJlcXVpcmVkIGFmdGVy ICJeIikuCisgIEMtS2VybWl0PiBeKmZvbyAgICAgICAgIDsgTW9zdCByZWNlbnQgY29tbWFuZCB0 aGF0IGhhcyAiZm9vIiBpbiBpdC4KKyAgQy1LZXJtaXQ+IF57KmZvb30gICAgICAgOyBNb3N0IHJl Y2VudCBjb21tYW5kIGVuZHMgd2l0aCAiZm9vIi4KKworICAgVW5saWtlIHRoZSBtYW51YWwgY29t bWFuZC1oaXN0b3J5LXNjcm9sbGluZyBrZXlzLCB0aGUgUkVETyBjb21tYW5kIGNhbgorICAgYmUg dXNlZCBpbiBhIHNjcmlwdCwgYnV0IGl0J3Mgbm90IHJlY29tbWVuZGVkIChzaW5jZSB0aGUgY29t bWFuZCB0byBiZQorICAgUkVET25lIG1pZ2h0IG5vdCBiZSBmb3VuZCwgc28gaWYgdGhlIFJFRE8g Y29tbWFuZCBmYWlscywgeW91IGNhbid0IHRlbGwKKyAgIHdoZXRoZXIgaXQgd2FzIGJlY2F1c2Ug UkVETyBmYWlsZWQgdG8gZmluZCB0aGUgcmVxdWVzdGVkIGNvbW1hbmQsIG9yCisgICBiZWNhdXNl IHRoZSBjb21tYW5kIHdhcyBmb3VuZCBidXQgaXQgZmFpbGVkKS4KKworMS45LiBFWElUIE1lc3Nh Z2VzCisKKyAgIFRoZSBFWElUIGFuZCBRVUlUIGNvbW1hbmRzIG5vdyBhY2NlcHQgYW4gb3B0aW9u YWwgbWVzc2FnZSB0byBiZQorICAgcHJpbnRlZC4gVGhpcyBtYWtlcyB0aGUgc3ludGF4IG9mIEVY SVQgYW5kIFFVSVQganVzdCBsaWtlIEVORCBhbmQgU1RPUDoKKworICAgeyBFWElULCBRVUlULCBF TkQsIFNUT1AgfSBbIHN0YXR1cy1jb2RlIFsgbWVzc2FnZSBdIF0KKworICAgd2hlcmUgc3RhdHVz LWNvZGUgaXMgYSBudW1iZXIgKDAgaW5kaWNhdGluZyBzdWNjZXNzLCBub256ZXJvIGluZGljYXRp bmcKKyAgIGZhaWx1cmUpLiBUaGlzIGlzIGhhbmR5IGluIHNjcmlwdHMgdGhhdCBhcmUgbmV2ZXIg c3VwcG9zZWQgdG8gZW50ZXIKKyAgIGludGVyYWN0aXZlIG1vZGU6CisKKyAgZGlhbCA3NjU0MzIx CisgIGlmIGZhaWwgZXhpdCAxIENhbid0IG1ha2UgY29ubmVjdGlvbiAtIHRyeSBhZ2FpbiBsYXRl ci4KKworICAgUHJldmlvdXNseSB0aGlzIGNvdWxkIG9ubHkgYmUgZG9uZSBpbiB0d28gc3RlcHM6 CisKKyAgZGlhbCA3NjU0MzIxCisgIHhpZiBmYWlsIHsgZWNobyBDYW4ndCBtYWtlIGNvbm5lY3Rp b24gLSB0cnkgYWdhaW4gbGF0ZXIsIGV4aXQgMSB9CisKKyAgIEEgc3RhdHVzIGNvZGUgbXVzdCBi ZSBpbmNsdWRlZCBpbiBvcmRlciB0byBzcGVjaWZ5IGEgbWVzc2FnZS4gSW4gdGhlCisgICBjYXNl IG9mIEVYSVQgYW5kIFFVSVQsIHRoZSBkZWZhdWx0IHN0YXR1cyBjb2RlIGlzIGNvbnRhaW5lZCBp biB0aGUKKyAgIHZhcmlhYmxlIFx2KGV4aXRzdGF0dXMpLCBhbmQgaXMgc2V0IGF1dG9tYXRpY2Fs bHkgYnkgdmFyaW91cyBldmVudHMKKyAgIChmaWxlIHRyYW5zZmVyIGZhaWx1cmVzLCBldGM7IGl0 IGNhbiBhbHNvIGJlIHNldCBleHBsaWNpdGx5IHdpdGggdGhlCisgICBTRVQgRVhJVCBTVEFUVVMg Y29tbWFuZCkuIElmIHlvdSB3YW50IHRvIGdpdmUgYW4gRVhJVCBvciBRVUlUIGNvbW1hbmQKKyAg IHdpdGggYSBtZXNzYWdlLCBidXQgd2l0aG91dCBjaGFuZ2luZyB0aGUgZXhpdCBzdGF0dXMgZnJv bSB3aGF0IGl0CisgICBub3JtYWxseSB3b3VsZCBoYXZlIGJlZW4sIHVzZSB0aGUgXHYoZXhpdHN0 YXR1cykgdmFyaWFibGUsIGUuZy46CisKKyAgIGV4aXQgXHYoZXhpdHN0YXR1cykgR29vZGJ5ZSBm cm9tIFx2KGNtZGZpbGUpLgorCisgICBUaGUgRVhJVCBzdGF0dXMgaXMgcmV0dXJuZWQgdG8gdGhl IHN5c3RlbSBzaGVsbCBvciB3aGF0ZXZlciBvdGhlcgorICAgcHJvY2VzcyBpbnZva2VkIEMtS2Vy bWl0LCBlLmcuIGluIFVOSVg6CisKKyAgQy1LZXJtaXQ+IGV4aXQgOTcgYnllIGJ5ZQorICBieWUg YnllCisgICQgZWNobyAkPworICA5NworICAkCisKKzEuMTAuIE1hbmFnaW5nIEtleWJvYXJkIElu dGVycnVwdGlvbnMKKworICAgV2hlbiBDLUtlcm1pdCBpcyBpbiBjb21tYW5kIG9yIGZpbGUtdHJh bnNmZXIgbW9kZSAoYXMgb3Bwb3NlZCB0bworICAgQ09OTkVDVCBtb2RlKSwgaXQgY2FuIGJlIGlu dGVycnVwdGVkIHdpdGggQ3RybC1DLiBWZXJzaW9uIDcuMCBhZGRzIHRoZQorICAgYWJpbGl0eSB0 byBkaXNhcm0gdGhlIEN0cmwtQyBpbnRlcnJ1cHQ6CisKKyAgIFNFVCBDT01NQU5EIElOVEVSUlVQ VCB7IE9OLCBPRkYgfQorICAgICAgICAgIENPTU1BTkQgSU5URVJSVVBUIGlzIE9OIGJ5IGRlZmF1 bHQsIG1lYW5pbmcgdGhlIEN0cmwtQyBjYW4gYmUKKyAgICAgICAgICB1c2VkIHRvIGludGVycnVw dCBhIGNvbW1hbmQgb3IgYSBmaWxlIHRyYW5zZmVyIGluIHByb2dyZXNzLiBVc2UKKyAgICAgICAg ICBPRkYgdG8gZGlzYWJsZSB0aGVzZSBpbnRlcnJ1cHRpb25zLCBhbmQgdXNlIGl0IHdpdGggZ3Jl YXQKKyAgICAgICAgICBjYXV0aW9uIGZvciBvYnZpb3VzIHJlYXNvbnMuCisKKyAgIFNFVCBUUkFO U0ZFUiBJTlRFUlJVUFQgeyBPTiwgT0ZGIH0KKyAgICAgICAgICBUaGlzIGNhbiBiZSB1c2VkIHRv IGRpc2FibGUga2V5Ym9hcmQgaW50ZXJydXB0aW9uIG9mIGZpbGUKKyAgICAgICAgICB0cmFuc2Zl ciB3aGVuIEMtS2VybWl0IGlzIGluIGxvY2FsIG1vZGUsIG9yIHRvIHJlLWVuYWJsZSBpdAorICAg ICAgICAgIGFmdGVyIGl0IGhhcyBiZWVuIGRpc2FibGVkLiBUaGlzIGFwcGxpZXMgdG8gdGhlIFgs IFosIEUsIGFuZAorICAgICAgICAgIHNpbWlsYXIga2V5cyBhcyB3ZWxsIGFzIHRvIHRoZSBzeXN0 ZW0gaW50ZXJydXB0IGNoYXJhY3RlciwKKyAgICAgICAgICB1c3VhbGx5IEN0cmwtQy4gVGhpcyBp cyBkaXN0aW5jdCBmcm9tIFNFVCBUUkFOU0ZFUiBDQU5DRUxMQVRJT04sCisgICAgICAgICAgd2hp Y2ggdGVsbHMgd2hldGhlciBwYWNrZXQgbW9kZSBjYW4gYmUgZXhpdGVkIGJ5IHNlbmRpbmcgYQor ICAgICAgICAgIHNwZWNpYWwgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycy4KKworICAgU2V2ZXJhbCBv dGhlciBjb21tYW5kcyBjYW4gYmUgaW50ZXJydXB0ZWQgYnkgcHJlc3NpbmcgYW55IGtleSB3aGls ZQorICAgdGhleSBhcmUgYWN0aXZlLiBWZXJzaW9uIDcuMCBhZGRzIHRoZSBhYmlsaXR5IHRvIGRp c2FibGUgdGhpcyBmb3JtIG9mCisgICBpbnRlcnJ1cHRpb24gYWxzbzoKKworICAgU0VUIElOUFVU IENBTkNFTExBVElPTiB7IE9OLCBPRkYgfQorICAgICAgICAgIFdoZXRoZXIgYW4gSU5QVVQgY29t bWFuZCBpbiBwcm9ncmVzcyBjYW4gYmUgaW50ZXJydXB0ZWQgYnkKKyAgICAgICAgICBwcmVzc2lu ZyBhIGtleS4gTm9ybWFsbHkgT04uIFNldHRpbmcgSU5QVVQgQ0FOQ0VMTEFUSU9OIE9GRgorICAg ICAgICAgIG1ha2VzIElOUFVUIGNvbW1hbmRzIHVuaW50ZXJydXB0aWJsZSBleGNlcHQgYnkgQ3Ry bC1DICh1bmxlc3MKKyAgICAgICAgICBDT01NQU5EIElOVEVSUlVQVElPTiBpcyBhbHNvIE9GRiku CisKKyAgIFNFVCBTTEVFUCBDQU5DRUxMQVRJT04geyBPTiwgT0ZGIH0KKyAgICAgICAgICBXaGV0 aGVyIGEgU0xFRVAsIFBBVVNFLCBvciBXQUlUIGNvbW1hbmQgaW4gcHJvZ3Jlc3MgY2FuIGJlCisg ICAgICAgICAgaW50ZXJydXB0ZWQgYnkgcHJlc3NpbmcgYSBrZXkuIE5vcm1hbGx5IE9OLiBTZXR0 aW5nIFNMRUVQCisgICAgICAgICAgQ0FOQ0VMTEFUSU9OIE9GRiBtYWtlcyB0aGVzZSBjb21tYW5k cyB1bmludGVycnVwdGlibGUgZXhjZXB0IGJ5CisgICAgICAgICAgQ3RybC1DICh1bmxlc3MgQ09N TUFORCBJTlRFUlJVUFRJT04gaXMgYWxzbyBPRkYpLiBTeW5vbnltczogU0VUCisgICAgICAgICAg UEFVU0UgQ0FOQ0VMTEFUSU9OLCBTRVQgV0FJVCBDQU5DRUxMQVRJT04uCisKKyAgIFNvIHRvIG1h a2UgY2VydGFpbiBhIHNjcmlwdCBpcyBub3QgaW50ZXJydXB0aWJsZSBieSB0aGUgdXNlciwgaW5j bHVkZQorICAgdGhlc2UgY29tbWFuZHM6CisKKyAgU0VUIFRSQU5TRkVSIElOVEVSUlVQVCBPRkYK KyAgU0VUIFNMRUVQIENBTkNFTExBVElPTiBPRkYKKyAgU0VUIElOUFVUIENBTkNFTExBVElPTiBP RkYKKyAgU0VUIENPTU1BTkQgSU5URVJSVVBUSU9OIE9GRgorCisgICBNYWtlIHN1cmUgdG8gdHVy biB0aGVtIGJhY2sgb24gYWZ0ZXJ3YXJkcyBpZiBpbnRlcnJ1cHRpb24gaXMgdG8gYmUKKyAgIHJl LWVuYWJsZWQuCisKKyAgIFdoZW4gYSBQQVVTRSwgU0xFRVAsIFdBSVQsIG9yIElOUFVUIGNvbW1h bmQgaXMgaW50ZXJydXB0ZWQgZnJvbSB0aGUKKyAgIGtleWJvYXJkLCB0aGUgbmV3IHZhcmlhYmxl IFx2KGtiY2hhcikgY29udGFpbnMgYSBjb3B5IG9mIHRoZSAoZmlyc3QpCisgICBjaGFyYWN0ZXIg dGhhdCB3YXMgdHlwZWQgYW5kIGNhdXNlZCB0aGUgaW50ZXJydXB0aW9uLCBwcm92aWRlZCBpdCB3 YXMKKyAgIG5vdCB0aGUgY29tbWFuZCBpbnRlcnJ1cHQgY2hhcmFjdGVyICh1c3VhbGx5IEN0cmwt QykuIElmIHRoZXNlIGNvbW1hbmRzCisgICBjb21wbGV0ZSBzdWNjZXNzZnVsbHkgb3IgdGltZSBv dXQgd2l0aG91dCBhIGtleWJvYXJkIGludGVycnVwdGlvbiwgdGhlCisgICBcdihrYmNoYXIpIHZh cmlhYmxlIGlzIGVtcHR5LgorCisgICBUaGUgXHYoa2JjaGFyKSB2YXJpYWJsZSAobGlrZSBhbnkg b3RoZXIgdmFyaWFibGUpIGNhbiBiZSB0ZXN0ZWQgd2l0aDoKKworICBpZiBkZWZpbmVkIFx2KGti Y2hhcikgY29tbWFuZAorCisgICBUaGUgY29tbWFuZCBpcyBleGVjdXRlZCBpZiB0aGUgdmFyaWFi bGUgaXMgbm90IGVtcHR5LgorCisgICBUaGUgXHYoa2JjaGFyKSB2YXJpYWJsZSBjYW4gYmUgcmVz ZXQgd2l0aCBXQUlUIDAgKFBBVVNFIDAsIFNMRUVQIDAsCisgICBldGMpLgorCisxLjExLiBUYW1p bmcgVGhlIFdpbGQgQmFja3NsYXNoIC0tIFBhcnQgRGV1eAorCisgICBbMzY2XVVzaW5nIEMtS2Vy bWl0LCAybmQgRWRpdGlvbiwgY29udGFpbnMgYSBicmllZiBzZWN0aW9uLCAiVGFtaW5nIHRoZQor ICAgV2lsZCBCYWNrc2xhc2giLCBvbiBwYWdlIDQ4LCB3aGljaCBzdWJzZXF1ZW50IGV4cGVyaWVu Y2UgaGFzIHNob3duIHRvCisgICBiZSBpbmFkZXF1YXRlIGZvciBLZXJtaXQgdXNlcnMgaW50ZW50 IG9uIHdyaXRpbmcgc2NyaXB0cyB0aGF0IGRlYWwgd2l0aAorICAgV2luZG93cywgRE9TLCBhbmQg T1MvMiBmaWxlbmFtZXMsIGluIHdoaWNoIGJhY2tzbGFzaCAoXCkgaXMgdXNlZCBhcyB0aGUKKyAg IGRpcmVjdG9yeSBzZXBhcmF0b3IuIFRoaXMgc2VjdGlvbiBmaWxscyBpbiB0aGUgYmxhbmtzLgor CisxLjExLjEuIEJhY2tncm91bmQKKworICAgVGhlIEtlcm1pdCBjb21tYW5kIGxhbmd1YWdlIHNo YXJlcyBhIGNlcnRhaW4gdW5hdm9pZGFibGUgYnV0IGFubm95aW5nCisgICBjaGFyYWN0ZXJpc3Rp YyB3aXRoIG1vc3Qgb3RoZXIgY29tbWFuZCBsYW5ndWFnZXMgdGhhdCBhcmUgY2FwYWJsZSBvZgor ICAgc3RyaW5nIHJlcGxhY2VtZW50LCBuYW1lbHkgdGhlIG5lY2Vzc2l0eSB0byAicXVvdGUiIGNl cnRhaW4gY2hhcmFjdGVycworICAgd2hlbiB5b3Ugd2FudCB0aGVtIHRvIGJlIHRha2VuIGxpdGVy YWxseS4gVGhpcyBpcyBhIGNvbnNlcXVlbmNlIG9mIHRoZQorICAgZmFjdHMgdGhhdDoKKworICAg IDEuIE9uZSBvciBtb3JlIGNoYXJhY3RlcnMgbXVzdCBiZSBzZXQgYXNpZGUgdG8gZGVub3RlIHJl cGxhY2VtZW50LAorICAgICAgIHJhdGhlciB0aGFuIGFjdGluZyBhcyBsaXRlcmFsIHRleHQuCisg ICAgMi4gV2UgaGF2ZSBvbmx5IDk2IHByaW50YWJsZSBjaGFyYWN0ZXJzIHRvIHdvcmsgd2l0aCBp biBBU0NJSSwgd2hpY2gKKyAgICAgICBpcyBzdGlsbCB0aGUgb25seSB1bml2ZXJzYWxseSBwb3J0 YWJsZSBjaGFyYWN0ZXIgc2V0LgorICAgIDMuIFRoZXJlIGlzIG5vIHNpbmdsZSBwcmludGFibGUg Y2hhcmFjdGVyIHRoYXQgaXMgdW51c2VkIGV2ZXJ5d2hlcmUuCisgICAgNC4gVmFyaWFibGVzIGFy ZSBub3QgcmVzdHJpY3RlZCB0byBjZXJ0YWluIGNvbnRleHRzLCBhcyB0aGV5IGFyZSBpbgorICAg ICAgIGZvcm1hbCBwcm9ncmFtbWluZyBsYW5ndWFnZXMgbGlrZSBDIGFuZCBGb3J0cmFuLCBidXQg Y2FuIGFwcGVhcgorICAgICAgIGFueXdoZXJlIGF0IGFsbCB3aXRoaW4gYSBjb21tYW5kLCBhbmQg dGhlcmVmb3JlIHJlcXVpcmUgc3BlY2lhbAorICAgICAgIHN5bnRheC4KKworICAgVGh1cyB0aGVy ZSBjYW4gYmUgY29uZmxpY3RzLiBUbyBpbGx1c3RyYXRlLCB0aGUgc3RhbmRhcmQgVU5JWCBzaGVs bAorICAgdXNlcyBkb2xsYXIgc2lnbiAoJCkgdG8gaW50cm9kdWNlIHZhcmlhYmxlcy4gU28gdGhl IHNoZWxsIGNvbW1hbmQ6CisKKyAgZWNobyAkVEVSTQorCisgICBkaXNwbGF5cyB0aGUgdmFsdWUg b2YgdGhlIFRFUk0gdmFyaWFibGUsIGUuZy4gdnQzMjAuIEJ1dCBzdXBwb3NlIHlvdQorICAgd2Fu dCB0byBkaXNwbGF5IGEgcmVhbCBkb2xsYXIgc2lnbjoKKworICBlY2hvIFRoZSBwcmljZSBpcyAk MTAuMjAKKworICAgVGhpcyBjYXVzZXMgdGhlIHNoZWxsIHRvIGV2YWx1YXRlIHRoZSB2YXJpYWJs ZSAiJDEiLCB3aGljaCBtaWdodCBvcgorICAgbWlnaHQgbm90IGV4aXN0LCBhbmQgc3Vic3RpdHV0 ZSBpdHMgdmFsdWUsIGUuZy46CisKKyAgVGhlIHByaWNlIGlzIDAuMjAKKworICAgKGluIHRoaXMg Y2FzZSB0aGUgJDEgdmFyaWFibGUgaGFkIG5vIHZhbHVlLikgVGhpcyBpcyBwcm9iYWJseSBub3Qg d2hhdAorICAgeW91IHdhbnRlZC4gVG8gZm9yY2UgdGhlIGRvbGxhciBzaWduIHRvIGJlIHRha2Vu IGxpdGVyYWxseSwgeW91IG11c3QKKyAgIGFwcGx5IGEgInF1b3RpbmcgcnVsZSIsIHN1Y2ggYXMg InByZWNlZGUgYSBjaGFyYWN0ZXIgYnkgYmFja3NsYXNoIChcKQorICAgdG8gZm9yY2UgdGhlIHNo ZWxsIHRvIHRha2UgdGhlIGNoYXJhY3RlciBsaXRlcmFsbHkiOgorCisgIGVjaG8gVGhlIHByaWNl IGlzIFwkMTAuMjAKKyAgVGhlIHByaWNlIGlzICQxMC4yMAorCisgICBCdXQgbm93IHN1cHBvc2Ug eW91IHdhbnQgdGhlIGJhY2tzbGFzaCBBTkQgdGhlIGRvbGxhciBzaWduIHRvIGJlIHRha2VuCisg ICBsaXRlcmFsbHk6CisKKyAgZWNobyBUaGUgcHJpY2UgaXMgXFwkMTAuMjAKKworICAgVGhpcyBk b2Vzbid0IHdvcmssIHNpbmNlIHRoZSBmaXJzdCBiYWNrc2xhc2ggcXVvdGVzIHRoZSBzZWNvbmQg b25lLAorICAgdGhlcmVieSBsZWF2aW5nIHRoZSBkb2xsYXIgc2lnbiB1bnF1b3RlZCBhZ2FpbjoK KworICBUaGUgcHJpY2UgaXMgXDAuMjAKKworICAgUXVvdGluZyB0aGUgZG9sbGFyIHNpZ24gcmVx dWlyZXMgYWRkaXRpb24gb2YgYSB0aGlyZCBiYWNrc2xhc2g6CisKKyAgZWNobyBUaGUgcHJpY2Ug aXMgXFxcJDEwLjIwCisgIFRoZSBwcmljZSBpcyBcJDEwLjIwCisKKyAgIFRoZSBmaXJzdCBiYWNr c2xhc2ggcXVvdGVzIHRoZSBzZWNvbmQgb25lLCBhbmQgdGhlIHRoaXJkIGJhY2tzbGFzaAorICAg cXVvdGVzIHRoZSBkb2xsYXIgc2lnbi4KKworICAgRXZlcnkgY29tbWFuZCBsYW5ndWFnZSAtLSBh bGwgVU5JWCBzaGVsbHMsIFZNUyBEQ0wsIERPUyBCYXRjaCwgQU9TL1ZTCisgICBDTEksIGV0YyBl dGMgLS0gaGFzIHNpbWlsYXIgcnVsZXMuIFVOSVggc2hlbGwgcnVsZXMgYXJlIHByb2JhYmx5IHRo ZQorICAgbW9zdCBjb21wbGljYXRlZCwgc2luY2UgbWFueSBwcmludGFibGUgY2hhcmFjdGVycyAt LSBub3QganVzdCBvbmUgLS0KKyAgIGFyZSBzcGVjaWFsIHRoZXJlOiBkb2xsYXIgc2lnbiwgc2lu Z2xlIHF1b3RlLCBkb3VibGUgcXVvdGUsIGJhY2tzbGFzaCwKKyAgIGFzdGVyaXNrLCBhY2NlbnQg Z3JhdmUsIG51bWJlciBzaWduLCBhbXBlcnNhbmQsIHF1ZXN0aW9uIG1hcmssCisgICBwYXJlbnRo ZXNlcywgYnJhY2tldHMsIGJyYWNlcywgZXRjIC0tIHByYWN0aWNhbGx5IGV2ZXJ5CisgICBub24t YWxwaGFudW1lcmljIGNoYXJhY3RlciBuZWVkcyBzb21lIGZvcm0gb2YgcXVvdGluZyBpZiBpdCBp cyB0byBiZQorICAgdGFrZW4gbGl0ZXJhbGx5LiBBbmQgdG8gYWRkIHRvIHRoZSBjb25mdXNpb24s IHRoZSBVTklYIHNoZWxsIG9mZmVycworICAgbWFueSBmb3JtcyBvZiBxdW90aW5nLCBhbmQgbWFu eSBhbHRlcm5hdGl2ZSBVTklYIHNoZWxscyBhcmUgYXZhaWxhYmxlLAorICAgZWFjaCB1c2luZyBz bGlnaHRseSBkaWZmZXJlbnQgc3ludGF4LgorCisxLjExLjIuIEtlcm1pdCdzIFF1b3RpbmcgUnVs ZXMKKworICAgS2VybWl0J3MgYmFzaWMgcXVvdGluZyBydWxlcyBhcmUgc2ltcGxlIGJ5IGNvbXBh cmlzb24gKHRoZXJlIGFyZSwgb2YKKyAgIGNvdXJzZSwgYWRkaXRpb25hbCBzeW50YXggcmVxdWly ZW1lbnRzIGZvciBtYWNybyBkZWZpbml0aW9ucywgY29tbWFuZAorICAgYmxvY2tzLCBmdW5jdGlv biBjYWxscywgZXRjLCBidXQgdGhleSBhcmUgbm90IHJlbGV2YW50IGhlcmUpLgorCisgICBUaGUg Zm9sbG93aW5nIGNoYXJhY3RlcnMgYXJlIHNwZWNpYWwgaW4gS2VybWl0IGNvbW1hbmRzOgorCisg ICBCYWNrc2xhc2ggKFwpCisgICAgICAgICAgSW50cm9kdWNlcyBhIHZhcmlhYmxlLCBvciB0aGUg bnVtZXJpYyByZXByZXNlbnRhdGlvbiBvZiBhCisgICAgICAgICAgc3BlY2lhbCBjaGFyYWN0ZXIs IG9yIGEgZnVuY3Rpb24sIG9yIG90aGVyIGl0ZW0gZm9yCisgICAgICAgICAgc3Vic3RpdHV0aW9u LiBJZiB0aGUgYmFja3NsYXNoIGlzIGZvbGxvd2VkIGJ5IGEgZGlnaXQgb3IgYnkgYW55CisgICAg ICAgICAgb2YgdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXJzOgorCisgIHgsIG8sIGQsIG0sIHMsIGYs IHYsICQsICUsICYsIDosIHsKKworICAgICAgICAgIHRoaXMgaW5kaWNhdGVzIGEgc3BlY2lhbCBz dWJzdGl0dXRpb24gaXRlbTsgb3RoZXJ3aXNlIHRoZQorICAgICAgICAgIGZvbGxvd2luZyBjaGFy YWN0ZXIgaXMgdG8gYmUgdGFrZW4gbGl0ZXJhbGx5IChleGNlcHRpb25zOiBcIGF0CisgICAgICAg ICAgZW5kIG9mIGxpbmUgaXMgdGFrZW4gbGl0ZXJhbGx5OyBcbiwgXGIsIGFuZCBcbiBhcmUgc3Bl Y2lhbCBpdGVtcworICAgICAgICAgIGluIHRoZSBPVVRQVVQgY29tbWFuZCBvbmx5KS4KKworICAg U2VtaWNvbG9uICg7KQorICAgICAgICAgIChPbmx5IHdoZW4gYXQgdGhlIGJlZ2lubmluZyBvZiBh IGxpbmUgb3IgcHJlY2VkZWQgYnkgYXQgbGVhc3QKKyAgICAgICAgICBvbmUgc3BhY2Ugb3IgdGFi KSBJbnRyb2R1Y2VzIGEgY29tbWVudC4KKworICAgTnVtYmVyIHNpZ24gKCMpCisgICAgICAgICAg KE9ubHkgd2hlbiBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgbGluZSBvciBwcmVjZWRlZCBieSBhdCBs ZWFzdAorICAgICAgICAgIG9uZSBzcGFjZSBvciB0YWIpIEp1c3QgbGlrZSBzZW1pY29sb247IGlu dHJvZHVjZXMgYSBjb21tZW50LgorCisgICBRdWVzdGlvbiBtYXJrICg/KQorICAgICAgICAgIChP bmx5IGF0IHRoZSBjb21tYW5kIHByb21wdCAtIG5vdCBpbiBjb21tYW5kIGZpbGVzIG9yIG1hY3Jv cykKKyAgICAgICAgICBSZXF1ZXN0cyBjb250ZXh0LXNlbnNpdGl2ZSBoZWxwLgorCisgICBUbyBm b3JjZSBLZXJtaXQgdG8gdGFrZSBhbnkgb2YgdGhlc2UgY2hhcmFjdGVycyBsaXRlcmFsbHksIHNp bXBseQorICAgcHJlY2VkZSBpdCBieSBhIGJhY2tzbGFzaCAoXCkuCisKKyAgIFNvdW5kcyBlYXN5 ISBBbmQgaXQgaXMsIGV4Y2VwdCB3aGVuIGJhY2tzbGFzaCBhbHNvIGhhcyBhIHNwZWNpYWwKKyAg IG1lYW5pbmcgdG8gdGhlIHVuZGVybHlpbmcgb3BlcmF0aW5nIHN5c3RlbSwgYXMgaXQgZG9lcyBp biBET1MsIFdpbmRvd3MsCisgICBhbmQgT1MvMiwgd2hlcmUgaXQgc2VydmVzIGFzIHRoZSBkaXJl Y3Rvcnkgc2VwYXJhdG9yIGluIGZpbGVuYW1lcyBzdWNoCisgICBhczoKKworICBEOlxLOTVcS0VZ TUFQU1xSRUFELk1FCisKKyAgIFVzaW5nIG91ciBydWxlLCB3ZSB3b3VsZCBuZWVkIHRvIHJlZmVy IHRvIHRoaXMgZmlsZSBpbiBLZXJtaXQgY29tbWFuZHMKKyAgIGFzIGZvbGxvd3M6CisKKyAgRDpc XEs5NVxcS0VZTUFQU1xcUkVBRC5NRQorCisgICBCdXQgdGhpcyB3b3VsZCBub3QgYmUgb2J2aW91 cyB0byBuZXcgdXNlcnMgb2YgS2VybWl0IHNvZnR3YXJlIG9uIERPUywKKyAgIFdpbmRvd3MsIG9y IE9TLzIsIGFuZCBpdCB3b3VsZCBiZSBhbm5veWluZyB0byBzZWFzb25lZCBvbmVzLiBUaHVzCisg ICBNUy1ET1MgS2VybWl0IGFuZCBLZXJtaXQgOTUgZ28gdG8gcmF0aGVyIGV4dHJlbWUgbGVuZ3Ro cyB0byBhbGxvdyB0aGUKKyAgIG1vcmUgbmF0dXJhbCBub3RhdGlvbiwgYXMgaW46CisKKyAgc2Vu ZCBkOlxrOTVca2V5bWFwc1xyZWFkLm1lCisKKyAgIFRoZSByZWFzb24gdGhpcyBpcyB0cmlja3kg aXMgdGhhdCB3ZSBhbHNvIG5lZWQgdG8gYWxsb3cgZm9yIHZhcmlhYmxlcworICAgYW5kIG90aGVy IGV4cHJlc3Npb25zIGludHJvZHVjZWQgYnkgYmFja3NsYXNoIGluIHRoZSBzYW1lIGNvbW1hbmQu IEZvcgorICAgZXhhbXBsZSwgc3VwcG9zZSBcJWEgaXMgYSB2YXJpYWJsZSB3aG9zZSB2YWx1ZSBp cyAib29mYSIgKHdpdGhvdXQgdGhlCisgICBxdW90ZXMpLiBXaGF0IGRvZXMgdGhlIGZvbGxvd2lu ZyBjb21tYW5kIGRvPworCisgIHNlbmQgZDpcJWEKKworICAgRG9lcyBpdCBzZW5kIHRoZSBmaWxl IG5hbWVkICJvb2ZhIiBpbiB0aGUgY3VycmVudCBkaXJlY3Rvcnkgb2YgdGhlIEQ6CisgICBkaXNr LCBvciBkb2VzIGl0IHNlbmQgYSBmaWxlIG5hbWVkICIlYSIgaW4gdGhlIHJvb3QgZGlyZWN0b3J5 IG9mIHRoZSBEOgorICAgZGlzaz8gVGhpcyBpcyB0aGUga2luZCBvZiB0cm91YmxlIHdlIGdldCBp bnRvIHdoZW4gd2UgYXR0ZW1wdCB0byBiZW5kCisgICB0aGUgcnVsZXMgaW4gdGhlIGludGVyZXN0 IG9mIHVzZXIgZnJpZW5kbGluZXNzLiAoVGhlIGFuc3dlciBpczogaWYgdGhlCisgICB2YXJpYWJs ZSBcJWEgaGFzIGRlZmluaXRpb24gdGhhdCBpcyB0aGUgbmFtZSBvZiBhbiBleGlzdGluZyBmaWxl LCB0aGF0CisgICBmaWxlIGlzIHNlbnQ7IGlmIGEgZmlsZSBkOlwlYSBleGlzdHMsIGl0IGlzIHNl bnQ7IG90aGVyd2lzZSBpZiBib3RoCisgICBjb25kaXRpb25zIGFyZSB0cnVlLCB0aGUgdmFyaWFi bGUgdGFrZXMgcHJlY2VkZW5jZSwgYW5kIHRoZSBsaXRlcmFsCisgICBmaWxlbmFtZSBjYW4gYmUg Zm9yY2VkIGJ5IHF1b3Rpbmc6IFxcJWEuKQorCisgICBJbiBLZXJtaXQgOTUgKGJ1dCBub3QgTVMt RE9TIEtlcm1pdCksIHdlIGFsc28gYmVuZCB0aGUgcnVsZXMgYW5vdGhlcgorICAgd2F5IGJ5IGFs bG93aW5nIHlvdSB0byB1c2UgZm9yd2FyZCBzbGFzaCAoLykgcmF0aGVyIHRoYW4gYmFja3NsYXNo IChcKQorICAgYXMgdGhlIGRpcmVjdG9yeSBzZXBhcmF0b3I6CisKKyAgc2VuZCBkOi9rOTUva2V5 bWFwcy9yZWFkLm1lCisKKyAgIFRoaXMgbG9va3MgbW9yZSBuYXR1cmFsIHRvIFVOSVggdXNlcnMs IGFuZCBpbiBmYWN0IGlzIHBlcmZlY3RseQorICAgYWNjZXB0YWJsZSB0byB0aGUgV2luZG93cyA5 NS85OC9OVCBhbmQgT1MvMiBvcGVyYXRpbmcgc3lzdGVtcyBvbiB0aGUKKyAgIEFQSSBsZXZlbC4g QlVUICh0aGVyZSBpcyBhbHdheXMgYSAiYnV0IikgdGhlIE1pY3Jvc29mdCBzaGVsbCwKKyAgIENP TU1BTkQuQ09NLCBmb3IgV2luZG93cyA5NS85OCBhbmQgTlQgZG9lcyBub3QgYWxsb3cgdGhpcyBu b3RhdGlvbiwgYW5kCisgICB0aGVyZWZvcmUgaXQgY2FuIG5vdCBiZSB1c2VkIGluIGFueSBLZXJt aXQgY29tbWFuZCAtLSBzdWNoIGFzIFJVTiAtLQorICAgdGhhdCBpbnZva2VzIHRoZSBXaW5kb3dz IGNvbW1hbmQgc2hlbGwgQU5EIHlvdXIgY29tbWFuZCBzaGVsbCBpcworICAgQ09NTUFORC5DT00g b3IgYW55IG90aGVyIHNoZWxsIHRoYXQgZG9lcyBub3QgYWxsb3cgZm9yd2FyZCBzbGFzaCBhcwor ICAgZGlyZWN0b3J5IHNlcGFyYXRvciAoc29tZSBhbHRlcm5hdGl2ZSBzaGVsbHMgZG8gYWxsb3cg dGhpcykuCisKKyAgICAgTk9URTogVGhlcmUgZXhpc3RzIGEgd2lkZSB2YXJpZXR5IG9mIGFsdGVy bmF0aXZlIHNoZWxscyBmcm9tIHRoaXJkCisgICAgIHBhcnRpZXMgdGhhdCBkbyBub3QgaGF2ZSB0 aGlzIHJlc3RyaWN0aW9uLiBJZiB5b3UgYXJlIHVzaW5nIGEgc2hlbGwKKyAgICAgdGhhdCBhY2Nl cHRzIGZvcndhcmQgc2xhc2ggYXMgYSBkaXJlY3Rvcnkgc2VwYXJhdG9yLCB5b3UgY2FuIHN0b3AK KyAgICAgcmVhZGluZyByaWdodCBub3cgLS0gVU5MRVNTICh0aGVyZSBpcyBhbHdheXMgYW4gInVu bGVzcyIpIHlvdSB3YW50CisgICAgIHlvdXIgc2NyaXB0cyB0byBiZSBwb3J0YWJsZSB0byBzeXN0 ZW1zIHRoYXQgaGF2ZSBvdGhlciBzaGVsbHMuIEFsc28KKyAgICAgbm90ZSB0aGF0IHNvbWUgV2lu ZG93cyBzaGVsbHMgbWlnaHQgYWN0dWFsbHkgUkVRVUlSRSBmb3J3YXJkIHNsYXNoZXMKKyAgICAg KGluc3RlYWQgb2YgYmFja3NsYXNoZXMpIGFzIGRpcmVjdG9yeSBzZXBhcmF0b3JzOyB3ZSBkbyBu b3QgdHJlYXQKKyAgICAgdGhpcyBzaXR1YXRpb24gYmVsb3csIGJ1dCB0aGUgdHJlYXRtZW50IGlz IG9idmlvdXMgLS0gdXNlIHNsYXNoCisgICAgIHJhdGhlciBiYWNrc2xhc2ggYXMgdGhlIGRpcmVj dG9yeSBzZXBhcmF0b3IuCisKKzEuMTEuMy4gUGFzc2luZyBET1MgRmlsZW5hbWVzIGZyb20gS2Vy bWl0IHRvIFNoZWxsIENvbW1hbmRzCisKKyAgIFRoZSBmb2xsb3dpbmcgS2VybWl0IGNvbW1hbmRz IGludm9rZSB0aGUgc3lzdGVtIGNvbW1hbmQgc2hlbGw6CisKKyAgUlVOIChhbmQgaXRzIHN5bm9u eW1zICEgYW5kIEApCisgIFJFRElSRUNUCisgIFBJUEUKKworICAgRWFjaCBvZiB0aGVzZSBjb21t YW5kcyB0YWtlcyBhIHNoZWxsIGNvbW1hbmQgYXMgYW4gb3BlcmFuZC4gVGhlc2Ugc2hlbGwKKyAg IGNvbW1hbmRzIGFyZSBub3QsIGFuZCBjYW4gbm90IGJlLCBwYXJzZWQgYnkgS2VybWl0IHNpbmNl IEtlcm1pdCBkb2VzCisgICBub3Qga25vdyB0aGUgc3ludGF4IG9mIHNoZWxsIGNvbW1hbmRzLCBh bmQgc28gY2FuJ3QgdGVsbCB0aGUgZGlmZmVyZW5jZQorICAgYmV0d2VlbiBhIGtleXdvcmQsIGEg ZmlsZW5hbWUsIGEgdmFyaWFibGUsIGEgc3dpdGNoLCBvciBvdGhlciBpdGVtLgorICAgVGhlcmVm b3JlIHRoZSBydWxlcyBjYW4gbm90IGJlIGJlbnQgc2luY2UgS2VybWl0IGRvZXNuJ3Qga25vdyB3 aGVyZSBvcgorICAgaG93IHRvIGJlbmQgdGhlbS4gVG8gaWxsdXN0cmF0ZSAodXNpbmcgdGhlIHJl Z3VsYXIgV2luZG93cyBzaGVsbCk6CisKKyAgcnVuIGM6XFx3aW5kb3dzXFxjb21tYW5kXFxjaGtk c2suZXhlCisKKyAgIHdvcmtzIE9LLCBidXQ6CisKKyAgcnVuIGM6L3dpbmRvd3MvY29tbWFuZC9j aGtkc2suZXhlCisKKyAgIGlzIG5vdCBhY2NlcHRlZCBieSBDT01NQU5ELkNPTS4gQnV0OgorCisg IHJ1biBjOlx3aW5kb3dzXGNvbW1hbmRcY2hrZHNrLmV4ZQorCisgICByZXN1bHRzIGluIEtlcm1p dCBhcHBseWluZyBpdHMgcXVvdGluZyBydWxlcyBiZWZvcmUgc2VuZGluZyB0aGUgdGV4dCB0bwor ICAgdGhlIHNoZWxsLiBTaW5jZSAidyIgYW5kICJjIiBhcmUgbm90IGluIHRoZSBsaXN0IG9mIGJh Y2tzbGFzaC1pdGVtCisgICBjb2RlcywgdGhlIGJhY2tzbGFzaCBtZWFucyAidGFrZSB0aGUgZm9s bG93aW5nIGNoYXJhY3RlciBsaXRlcmFsbHkiLgorICAgVGh1cywgYnkgdGhlIHRpbWUgdGhpcyBm aWxlbmFtZSBnZXRzIHRvIHRoZSBXaW5kb3dzIHNoZWxsLCBpdCBoYXMKKyAgIGJlY29tZToKKwor ICBjOndpbmRvd3Njb21tYW5kY2hrZHNrLmV4ZQorCisgICB3aGljaCBpcyBwcm9iYWJseSBub3Qg d2hhdCB5b3Ugd2FudGVkLiAoSWYgInciIGFuZCAiYyIgd2VyZSBpbiB0aGUKKyAgIGxpc3QsIHRo ZSByZXN1bHRzIGNvdWxkIGJlIGV2ZW4gc3RyYW5nZXIuKSBFdmVuIG1vcmUgY29uZnVzaW5nIGlz IHRoZQorICAgY2FzZSB3aGVyZSBhIGRpcmVjdG9yeSBvciBmaWxlbmFtZSBzdGFydHMgd2l0aCBv bmUgb3IgbW9yZSBkaWdpdHM6CisKKyAgcnVuIGM6XDEyM1xsb3R1cy5leGUKKworICAgaW4gd2hp Y2ggIlwxMjMiIGlzIHRoZSBLZXJtaXQgbm90YXRpb24gZm9yIEFTQ0lJIGNoYXJhY3RlciAxMjMs IHdoaWNoCisgICBoYXBwZW5zIHRvIGJlIGxlZnQgYnJhY2UgKHspLCByZXN1bHRpbmcgaW4gImM6 e2xvdHVzLmV4ZSIuCisKKyAgIFNvIHdoZW4gcGFzc2luZyBmaWxlbmFtZXMgdG8gYSBXaW5kb3dz IHNoZWxsLCBhbHdheXMgdXNlIGRvdWJsZQorICAgYmFja3NsYXNoZXMgYXMgZGlyZWN0b3J5IHNl cGFyYXRvcnMsIHRvIGVuc3VyZSB0aGF0IHRoZSBzaGVsbCBnZXRzCisgICBzaW5nbGUgYmFja3Ns YXNoZXM6CisKKyAgcnVuIGM6XFx3aW5kb3dzXFxjb21tYW5kXFxjaGtkc2suZXhlCisgIHJ1biBj OlxcMTIzXFxsb3R1cy5leGUKKworICAgU2ltaWxhciBwcm9ibGVtcyBtaWdodCBvY2N1ciB3aXRo IHRoZSBidWlsdC1pbiBFRElULCBCUk9XU0UsIGFuZCBGVFAKKyAgIGNvbW1hbmRzLiBUaGVzZSBj b21tYW5kcyByZXN1bHQgaW4gS2VybWl0IGJ1aWxkaW5nIGEgc2hlbGwgY29tbWFuZAorICAgaW50 ZXJuYWxseSB0byBpbnZva2UgdGhlIGFzc29jaWF0ZWQgaGVscGVyIHByb2dyYW07IHRoZSBmb3Jt IG9mIHRoaXMKKyAgIGNvbW1hbmQgbWlnaHQgY29uZmxpY3Qgd2l0aCB0aGUgZm9ybSBkZW1hbmRl ZCBieSBjZXJ0YWluIGFsdGVybmF0aXZlCisgICBzaGVsbHMuCisKKzEuMTEuNC4gVXNpbmcgVmFy aWFibGVzIHRvIEhvbGQgRE9TIEZpbGVuYW1lcworCisgICBOb3cgdG8gdGhlIG5leHQgbGV2ZWwu IFN1cHBvc2UgeW91IHdhbnQgdG8gd3JpdGUgYSBzY3JpcHQgaW4gd2hpY2gKKyAgIGZpbGVuYW1l cyBhcmUgcGFyYW1ldGVycywgYW5kIHRoZXJlZm9yZSBhcmUgc3RvcmVkIGluIHZhcmlhYmxlcy4K KyAgIEV4YW1wbGU6CisKKyAgZGVmaW5lIFwlZiBjOlx3aW5kb3dzXGNvbW1hbmRcY2hrZHNrLmV4 ZQorICAuLi4KKyAgcnVuIFwlZgorCisgICBPYnZpb3VzbHkgdGhpcyB3b24ndCB3b3JrIGZvciB0 aGUgcmVhc29ucyBqdXN0IG5vdGVkOyB0aGUgUlVOIGNvbW1hbmQKKyAgIHJlcXVpcmVzIGRpcmVj dG9yeSBzZXBhcmF0b3JzIGJlIGNvZGVkIGFzIGRvdWJsZSBiYWNrc2xhc2hlczoKKworICBkZWZp bmUgXCVmIGM6XFx3aW5kb3dzXFxjb21tYW5kXFxjaGtkc2suZXhlCisgIC4uLgorICBydW4gXCVm CisKKyAgIFRoaXMgd2lsbCB3b3JrOyBubyBzdXJwcmlzZXMgaGVyZS4gSG93ZXZlciwgaWYgeW91 IGhhZCB1c2VkIEFTU0lHTgorICAgcmF0aGVyIHRoYW4gREVGSU5FLCB5b3UgbWlnaHQgaGF2ZSBi ZWVuIHN1cnByaXNlZCBhZnRlciBhbGw7IHJldmlldworICAgcGFnZXMgMzQ4LTM0OSBvZiBbMzY3 XVVzaW5nIEMtS2VybWl0ICgybmQgRWQpIGZvciB0aGUgZGlmZmVyZW5jZQorICAgYmV0d2VlbiBE RUZJTkUgYW5kIEFTU0lHTi4KKworICAgV2UgaGF2ZSBzYWlkIHRoYXQgYW55IEtlcm1pdCA5NSBv ciBNUy1ET1MgS2VybWl0IGNvbW1hbmQgdGhhdCBwYXJzZXMKKyAgIGZpbGVuYW1lcyBpdHNlbGYg LS0gU0VORCwgZm9yIGV4YW1wbGUgLS0gZG9lcyBub3QgcmVxdWlyZSBkb3VibGUKKyAgIGJhY2tz bGFzaGVzIHNpbmNlIGl0IGtub3dzIGl0IGlzIHBhcnNpbmcgYSBmaWxlbmFtZS4gU28gc2luY2Ug dGhlCisgICBmb2xsb3dpbmcgd29ya3M6CisKKyAgc2VuZCBjOlx3aW5kb3dzXGNvbW1hbmRcY2hr ZHNrLmV4ZQorCisgICBTaG91bGQgdGhlIGZvbGxvd2luZyBhbHNvIHdvcms/CisKKyAgZGVmaW5l IFwlZiBjOlx3aW5kb3dzXGNvbW1hbmRcY2hrZHNrLmV4ZQorICAuLi4KKyAgc2VuZCBcJWYKKwor ICAgQW5zd2VyOiBOby4gV2h5PyBCZWNhdXNlIFwlZiBpcyBldmFsdWF0ZWQgInJlY3Vyc2l2ZWx5 IiwgdG8gYWxsb3cgZm9yCisgICB0aGUgcG9zc2liaWxpdHkgdGhhdCBpdHMgZGVmaW5pdGlvbiBj b250YWlucyBmdXJ0aGVyIHZhcmlhYmxlCisgICByZWZlcmVuY2VzLiBUaGlzIGlzIHRydWUgb2Yg YWxsICJiYWNrc2xhc2gtcGVyY2VudC1sZXR0ZXIiIChvciAtZGlnaXQpCisgICB2YXJpYWJsZXMs IGFuZCBhbHNvIGZvciBhcnJheSByZWZlcmVuY2VzLiBTbyBcJWYgYmVjb21lcworICAgYzpcd2lu ZG93c1xjb21tYW5kXGNoa2Rzay5leGUsIHdoaWNoIGJlY29tZXMKKyAgIGM6d2luZG93c2NvbW1h bmRjaGtkc2suZXhlLgorCisgICBUaGUgdHJpY2sgaGVyZSBpcyB0byB1c2UgdGhlICJvdGhlciIg a2luZCBvZiB2YXJpYWJsZSwgdGhhdCBpcworICAgZXZhbHVhdGVkIG9ubHkgIm9uZSBsZXZlbCBk ZWVwIiByYXRoZXIgdGhhbiByZWN1cnNpdmVseToKKworICBkZWZpbmUgZmlsZW5hbWUgYzpcd2lu ZG93c1xjb21tYW5kXGNoa2Rzay5leGUKKyAgLi4uCisgIHNlbmQgXG0oZmlsZW5hbWUpCisKKyAg IFNpbWlsYXJseSBpZiB5b3Ugd2FudCB0byBwcm9tcHQgdGhlIHVzZXIgZm9yIGEgZmlsZW5hbWU6 CisKKyAgYXNrIGZpbGVuYW1lIHsgUGxlYXNlIHR5cGUgYSBmaWxlbmFtZTogfQorICAgUGxlYXNl IHR5cGUgYSBmaWxlbmFtZTogYzpcd2luZG93c1xjb21tYW5kXGNoa2Rzay5leGUKKyAgc2VuZCBc bShmaWxlbmFtZSkKKworMS4xMS41LiBQYXNzaW5nIERPUyBGaWxlbmFtZXMgYXMgUGFyYW1ldGVy cyB0byBNYWNyb3MKKworICAgU3VwcG9zZSB5b3Ugd2FudCB0byBwYXNzIGEgRE9TIGZpbGVuYW1l IGNvbnRhaW5pbmcgYmFja3NsYXNoZXMgYXMgYQorICAgcGFyYW1ldGVyIHRvIGEgS2VybWl0IG1h Y3JvLiBUaGlzIHJhaXNlcyB0d28gaXNzdWVzOgorCisgICAgMS4gUGFyYW1ldGVycyB0byBtYWNy b3MgYXJlICJqdXN0IHRleHQiIGFuZCBzbyBhcmUgZnVsbHkgZXZhbHVhdGVkCisgICAgICAgYmVm b3JlIHRoZXkgYXJlIHBhc3NlZCB0byB0aGUgbWFjcm8uCisgICAgMi4gT25jZSBpbnNpZGUgdGhl IG1hY3JvLCB0aGUgZm9ybWFsIHBhcmFtZXRlcnMgXCUxLCBcJTIsIC4uLiBcJTkgYXJlCisgICAg ICAgdGhlIHR5cGUgb2YgdmFyaWFibGUgdGhhdCBpcyBldmFsdWF0ZWQgcmVjdXJzaXZlbHkuCisK KyAgIFRodXMgYSBET1MgZmlsZW5hbWUgaXMgcnVpbmVkIG9uY2UgaW4gdGhlIGFjdCBvZiBwYXJz aW5nIHRoZSBtYWNybworICAgaW52b2NhdGlvbiwgYW5kIGFnYWluIHdoZW4gcmVmZXJyaW5nIHRv IGl0IGZyb20gd2l0aGluIHRoZSBtYWNyby4gVG8KKyAgIGlsbHVzdHJhdGUsIHN1cHBvc2UgInRl c3QiIGlzIGEgbWFjcm8uIFRoZW4gaW4gdGhlIGludm9jYXRpb246CisKKyAgdGVzdCBjOlxteWRp clxibGFoLnR4dAorCisgICAiYzpteWRpcmJsYWgudHh0IiBpcyBhc3NpZ25lZCB0byBcJTEuIEhv d2V2ZXIsIGlmIHdlIGRvdWJsZSB0aGUKKyAgIGJhY2tzbGFzaGVzOgorCisgIHRlc3QgYzpcXG15 ZGlyXFxibGFoLnR4dAorCisgICAiYzpcbXlkaXJcYmxhaC50eHQiIGlzIGFzc2lnbmVkIHRvIFwl MS4gQnV0IHRoZW4gd2hlbiB5b3UgcmVmZXIgdG8gXCUxCisgICBpbiB0aGUgbWFjcm8sIGl0IGlz IGV2YWx1YXRlZCByZWN1cnNpdmVseSwgcmVzdWx0aW5nIGluCisgICAiYzpteWRpcmJsYWgudHh0 Ii4gVG8gaWxsdXN0cmF0ZToKKworICBkZWZpbmUgdGVzdCBlY2hvIFwlMQorICB0ZXN0IGM6XG15 ZGlyXGJsYWgudHh0CisgIGM6bXlkaXJibGFoLnR4dAorICB0ZXN0IGM6XFxteWRpclxcYmxhaC50 eHQKKyAgYzpteWRpcmJsYWgudHh0CisgIHRlc3QgYzpcXFxcbXlkaXJcXFxcYmxhaC50eHQKKyAg YzpcbXlkaXJcYmxhaC50eHQKKworICAgTGV0J3MgYWRkcmVzcyBlYWNoIHBhcnQgb2YgdGhlIHBy b2JsZW0gc2VwYXJhdGVseS4gRmlyc3QsIGluc2lkZSB0aGUKKyAgIG1hY3JvLiBZb3UgY2FuIHVz ZSB0aGUgXGZjb250ZW50cygpIGZ1bmN0aW9uIHRvIGZvcmNlIGEKKyAgIGJhY2tzbGFzaC1wZXJj ZW50IHZhcmlhYmxlIChzdWNoIGFzIGEgbWFjcm8gYXJndW1lbnQpIHRvIGJlIGV2YWx1YXRlZAor ICAgb25lIGxldmVsIGRlZXAgaW5zdGVhZCBvZiByZWN1cnNpdmVseSwgZm9yIGV4YW1wbGU6CisK KyAgZGVmaW5lIHRlc3QgZWNobyB7IFRoZSBmaWxlbmFtZSBpcyAiXGZjb250ZW50cyhcJTEpIn0K KworICB0ZXN0IGM6XG15ZGlyXGJsYWgudHh0ICAgICAgICAgICAgICAgOyBXZSBkb24ndCBleHBl Y3QgdGhpcyB0byB3b3JrCisgICBUaGUgZmlsZW5hbWUgaXMgImM6bXlkaXJibGFoLnR4dCIgICA7 IGFuZCBpdCBkb2Vzbid0LgorICB0ZXN0IGM6XFxteWRpclxcYmxhaC50eHQgICAgICAgICAgICAg OyBCdXQgdGhpcyBkb2VzLi4uCisgICBUaGUgZmlsZW5hbWUgaXMgImM6XG15ZGlyXGJsYWgudHh0 IgorCisgICBUaHVzIGlmIHRoZSBmaWxlbmFtZSBhcnJpdmVzIGluc2lkZSB0aGUgbWFjcm8gd2l0 aCBzaW5nbGUgYmFja3NsYXNoZXMsCisgICB0aGUgYmFja3NsYXNoZXMgYXJlIHByZXNlcnZlZCBp ZiB5b3UgYWx3YXlzIHJlZmVyIHRvIHRoZSBwYXJhbWV0ZXIKKyAgIHRocm91Z2ggdGhlIFxmY29u dGVudHMoKSBmdW5jdGlvbi4KKworICAgTm93IGhvdyB0byBlbnN1cmUgdGhhdCBiYWNrc2xhc2hl cyBhcmUgbm90IHN0cmlwcGVkIG9yIG1pc2ludGVycHJldGVkCisgICB3aGVuIHBhc3NpbmcgYSBm aWxlbmFtZSB0byBhIG1hY3JvPyBUaGlzIGJyaW5ncyB1cyBiYWNrIHRvIHdoYXQgd2UKKyAgIGxl YXJuZWQgaW4gZWFybGllciBzZWN0aW9uczoKKworICAgIDEuIElmIGl0IGlzIGEgbGl0ZXJhbCBm aWxlbmFtZSwgZWl0aGVyIGRvdWJsZSB0aGUgYmFja3NsYXNoZXMsIG9yIChpZgorICAgICAgIHRo ZSBmaWxlbmFtZSBpcyB0byBiZSB1c2VkIG9ubHkgd2l0aGluIEtlcm1pdCBpdHNlbGYgYW5kIG5v dCBwYXNzZWQKKyAgICAgICB0byBhIERPUyBzaGVsbCwgb3IgaXQgaXMgdG8gYmUgcGFzc2VkIHRv IGFuIGFsdGVybmF0aXZlIHNoZWxsIHRoYXQKKyAgICAgICBhY2NlcHRzIGZvcndhcmQgc2xhc2gg YXMgYSBkaXJlY3Rvcnkgc2VwYXJhdG9yKSwgdXNlIGZvcndhcmQgc2xhc2gKKyAgICAgICBpbnN0 ZWFkIG9mIGJhY2tzbGFzaCBhcyB0aGUgZGlyZWN0b3J5IHNlcGFyYXRvci4KKyAgICAyLiBJZiBp dCBpcyBhIHZhcmlhYmxlIHRoYXQgY29udGFpbnMgYSBmaWxlbmFtZSwgbWFrZSBzdXJlIHlvdSB1 c2UgYQorICAgICAgIG1hY3JvLXN0eWxlIHZhcmlhYmxlIG5hbWUsIHJhdGhlciB0aGFuIGEKKyAg ICAgICBiYWNrc2xhc2gtcGVyY2VudC1jaGFyYWN0ZXIgbmFtZS4KKworICAgRXhhbXBsZXM6CisK KyAgZGVmaW5lIHRlc3QgZWNobyBcZmNvbnRlbnRzKFwlMSkKKyAgZGVmaW5lIGZpbGVuYW1lIGM6 XG15ZGlyXGJsYWgudHh0CisKKyAgdGVzdCBjOlxcbXlkaXJcXGJsYWgudHh0ICA7IExpdGVyYWwg ZmlsZW5hbWUgd2l0aCBkb3VibGUgYmFja3NsYXNoZXMKKyAgYzpcbXlkaXJcYmxhaC50eHQKKwor ICB0ZXN0IGM6L215ZGlyL2JsYWgudHh0ICAgIDsgTGl0ZXJhbCBmaWxlbmFtZSB3aXRoIGZvcndh cmQgc2xhc2hlcworICBjOi9teWRpci9ibGFoLnR4dAorCisgIHRlc3QgXG0oZmlsZW5hbWUpICAg ICAgICAgOyBWYXJpYWJsZQorICBjOlxteWRpclxibGFoLnR4dAorCisgICBCdXQgd2hhdCBpZiB5 b3UgZG9uJ3QgbGlrZSB0aGVzZSBydWxlcyBhbmQgeW91IHN0aWxsIHdhbnQgdG8gcGFzcyBhCisg ICBsaXRlcmFsIGZpbGVuYW1lIGNvbnRhaW5pbmcgc2luZ2xlIGJhY2tzbGFzaGVzIHRvIGEgbWFj cm8/IFRoaXMgaXMKKyAgIHBvc3NpYmxlIHRvbywgYnV0IGEgYml0IHRyaWNreTogdHVybiBjb21t YW5kIHF1b3Rpbmcgb2ZmIGJlZm9yZQorICAgaW52b2tpbmcgdGhlIG1hY3JvLCBhbmQgdGhlbiB0 dXJuIGl0IGJhY2sgb24gaW5zaWRlIHRoZSBtYWNyby4gRXhhbXBsZToKKworICBkZWZpbmUgdGVz dCBzZXQgY29tbWFuZCBxdW90aW5nIG9uLCBlY2hvIFxmY29udGVudHMoXCUxKQorCisgIHNldCBj b21tYW5kIHF1b3Rpbmcgb2ZmCisgIHRlc3QgYzpcbXlkaXJcYmxhaC50eHQKKyAgYzpcbXlkaXJc YmxhaC50eHQKKworICAgVXBvbiByZXR1cm4gZnJvbSB0aGUgbWFjcm8sIGNvbW1hbmQgcXVvdGlu ZyBpcyBiYWNrIG9uIChzaW5jZSB0aGUgbWFjcm8KKyAgIHR1cm5lZCBpdCBvbikuCisKKyAgIE9i dmlvdXNseSB0aGlzIHRyaWNrIGNhbiBub3QgYmUgdXNlZCBpZiB0aGUgZmlsZW5hbWUgaXMgc3Rv cmVkIGluIGEKKyAgIHZhcmlhYmxlLCBzaW5jZSBpdCBwcmV2ZW50cyB0aGUgdmFyaWFibGUgZnJv bSBiZWluZyBldmFsdWF0ZWQuCisKKzEuMTEuNi4gUGFzc2luZyBET1MgRmlsZSBOYW1lcyBmcm9t IE1hY3JvIFBhcmFtZXRlcnMgdG8gdGhlIERPUyBTaGVsbAorCisgICBOb3cgc3VwcG9zZSB5b3Ug bmVlZCB0byBwYXNzIGEgRE9TIGZpbGVuYW1lIHRvIGEgbWFjcm8sIGFuZCB0aGUgbWFjcm8KKyAg IG5lZWRzIHRvIHBhc3MgaXQsIGluIHR1cm4sIHRvIHRoZSBXaW5kb3dzIHNoZWxsIHZpYSAoc2F5 KSBLZXJtaXQncyBSVU4KKyAgIGNvbW1hbmQuIFRoaXMgd29ya3MgdG9vOgorCisgIGRlZmluZSB4 cnVuIHJ1biBcZmNvbnRlbnRzKFwlMSkKKyAgeHJ1biBjOlxcd2luZG93c1xcY29tbWFuZFxcY2hr ZHNrLmV4ZQorCisgICAob3IgeW91IGNhbiB1c2UgdGhlIFNFVCBDT01NQU5EIFFVT1RJTkcgT0ZG IC8gT04gdGVjaG5pcXVlIGRlc2NyaWJlZAorICAgYWJvdmUgdG8gYXZvaWQgdGhlIGRvdWJsZSBi YWNrc2xhc2hlcy4pIEJ1dC4uCisKKyAgeHJ1biBjOi93aW5kb3dzL2NvbW1hbmQvY2hrZHNrLmV4 ZQorCisgICBkb2VzIG5vdCB3b3JrIGlmIHRoZSBXaW5kb3dzIHNoZWxsIGRvZXMgbm90IHJlY29n bml6ZSAiLyIgYXMgYQorICAgZGlyZWN0b3J5IHNlcGFyYXRvci4gSWYgdGhlcmUgaXMgYSBjaGFu Y2UgdGhhdCBhIGZpbGVuYW1lIG1pZ2h0IGJlCisgICBwYXNzZWQgdG8gdGhlIG1hY3JvIGluIHRo aXMgZm9ybSwgdGhlIG1hY3JvIHdpbGwgbmVlZCB0byBjb252ZXJ0IGl0IHRvCisgICBhIGZvcm0g YWNjZXB0YWJsZSB0byB0aGUgc2hlbGw6CisKKyAgZGVmaW5lIHhydW4gcnVuIFxmcmVwbGFjZShc ZmNvbnRlbnRzKFwlMSksLyxcXCkKKworICAgSGVyZSB3ZSByZXBsYWNlIGFsbCBvY2N1cnJlbmNl cyAoaWYgYW55KSBvZiAiLyIgaW4gdGhlIGFyZ3VtZW50IHdpdGgKKyAgICJcIiBwcmlvciB0byBp c3N1aW5nIHRoZSBSVU4gY29tbWFuZC4gT2YgY291cnNlLCBpbiBvcmRlciB0byBzcGVjaWZ5Cisg ICAiXCIgYXMgYSBsaXRlcmFsIGNoYXJhY3RlciBpbiB0aGUgXGZyZXBsYWNlKCkgYXJndW1lbnQg bGlzdCwgd2UgaGF2ZSB0bworICAgZG91YmxlIGl0LgorCisxLjExLjcuIFBhc3NpbmcgRE9TIEZp bGVuYW1lcyB0byBLZXJtaXQgZnJvbSB0aGUgU2hlbGwKKworICAgQXMgbm90ZWQgaW4gdGhlIG1h bnVhbCwgdGhlIFwmQFtdIGFycmF5IGNvbnRhaW5zIEtlcm1pdCdzIGNvbW1hbmQtbGluZQorICAg YXJndW1lbnRzLiBTdXBwb3NlIG9uZSBvZiB0aGVzZSBhcmd1bWVudHMsIHNheSBcJkBbM10sIGlz IGEgRE9TCisgICBmaWxlbmFtZSBzdWNoIGFzIEM6XEZPT1xCQVJcQkFaXE9PRkEuVFhULiAoTm90 ZTogSW4gQy1LZXJtaXQgNy4wIGFuZAorICAgSzk1IDEuMS4xOCBhbmQgbGF0ZXIsIGNvbW1hbmQt bGluZSBhcmd1bWVudHMgYWZ0ZXIgIj0iIG9yICItLSIgYXJlIGFsc28KKyAgIGF2YWlsYWJsZSBp biB0aGUgdG9wLWxldmVsIFwlMS4uOSB2YXJpYWJsZXM7IHNlZSBbMzY4XVNlY3Rpb24gNy41LikK KworICAgT2YgY291cnNlIHlvdSBjYW4gZWxpbWluYXRlIGFueSBwcm9ibGVtcyBieSB1c2luZyBm b3J3YXJkIHNsYXNoZXMKKyAgIHJhdGhlciB0aGFuIGJhY2tzbGFzaGVzIGluIHRoZSBmaWxlbmFt ZSwgYnV0IHNvbWV0aW1lcyB0aGlzIGlzIG5vdAorICAgcG9zc2libGUsIGFzIHdoZW4gdGhlIEtl cm1pdCBjb21tYW5kIGxpbmUgaXMgYmVpbmcgZ2VuZXJhdGVkIGJ5IGFub3RoZXIKKyAgIHByb2dy YW0gdGhhbiBjYW4gb25seSBnZW5lcmF0ZSAibmF0aXZlIiBmb3JtYXQgRE9TIGZpbGVuYW1lcy4K KworICAgQXMgbm90ZWQgaW4gdGhlIG1hbnVhbCwgIlwleCIgdmFyaWFibGVzIGFuZCBcJnhbXSBh cnJheXMgYXJlIGFsd2F5cworICAgZXZhbHVhdGVkICJhbGwgdGhlIHdheSIgKHJlY3Vyc2l2ZWx5 KS4gSWYgdGhlIGNvbnRlbnRzIG9mIG9uZSBvZiB0aGVzZQorICAgdmFyaWFibGVzIGNvbnRhaW5z IGJhY2tzbGFzaGVzLCB0aGlzIGNhdXNlcyBhbm90aGVyIGxldmVsIG9mCisgICBldmFsdWF0aW9u LgorCisgICBUaGVyZSBpcyBhbm90aGVyIGtpbmQgb2YgdmFyaWFibGUsIHdoaWNoIGlzIGV2YWx1 YXRlZCBvbmx5ICJvbmUgbGV2ZWwKKyAgIGRlZXAiLiBZb3UgY2FuIHVzZSB0aGlzIHRvIHByZXZl bnQgaW50ZXJwcmV0YXRpb24gb2YgdGhlIGJhY2tzbGFzaGVzIGluCisgICB0aGUgZmlsZW5hbWVz LiBFeGFtcGxlOgorCisgIGFzc2lnbiBmaWxlbmFtZSBcZmNvbnRlbnRzKFwmQFszXSkgIDsgVHJh bnNmZXIgY29udGVudHMKKyAgLi4uCisgIHNlbmQgXG0oZmlsZW5hbWUpCisKKyAgIE9yLCBtb3Jl IHNpbXBseToKKworICBzZW5kIFxmY29udGVudHMoXCZAWzNdKQorCisxLjEyLiBEZWJ1Z2dpbmcK KworICAgVGhlIGRlYnVnIGxvZyBpcyBwcm9kdWNlZCB3aGVuIHlvdSBnaXZlIGEgImxvZyBkZWJ1 ZyIgY29tbWFuZC4gVGhpcyBpcworICAgbm9ybWFsbHkgZG9uZSBhdCB0aGUgcmVxdWVzdCBvZiB0 aGUgS2VybWl0IGhlbHAgZGVzaywgZm9yIGZvcndhcmRpbmcgdG8KKyAgIHRoZSBLZXJtaXQgZGV2 ZWxvcGVycyBmb3IgYW5hbHlzaXMgYXMgYSBsYXN0IHJlc29ydCBpbiB0cm91Ymxlc2hvb3RpbmcK KyAgIHByb2JsZW1zLiAoTGFzdCByZXNvcnQgYmVjYXVzZSBpdCBjYW4gZ3JvdyBxdWl0ZSBodWdl IGluIGEgdmVyeSBzaG9ydAorICAgdGltZS4pIEluIGNhc2VzIHdoZXJlIHRpbWluZyBpbmZvcm1h dGlvbiBpcyBjcml0aWNhbCB0byB1bmRlcnN0YW5kaW5nIGEKKyAgIHByb2JsZW0sIHlvdSBjYW4g dGVsbCBDLUtlcm1pdCB0byBwdXQgYSB0aW1lc3RhbXAgb24gZWFjaCBkZWJ1ZyBsb2cKKyAgIGxp bmUgYnkgZ2l2aW5nIHRoZSBjb21tYW5kOgorCisgIFNFVCBERUJVRyBUSU1FU1RBTVAgT04KKwor ICAgQXQgYW55IHRpbWUgYmVmb3JlIG9yIGFmdGVyIGFjdGl2YXRpbmcgdGhlIGRlYnVnIGxvZyAo U0VUIERFQlVHCisgICBUSU1FU1RBTVAgT0ZGIHR1cm5zIG9mZiB0aW1lc3RhbXBpbmcpLiBUaW1l c3RhbXBzIGNhbiBiZSB0dXJuZWQgb2ZmIGFuZAorICAgb24gYXMgZGVzaXJlZCB3aGlsZSBsb2dn aW5nLiBPYnZpb3VzbHksIHRoZXkgaW5jcmVhc2UgdGhlIHNpemUgYW5kCisgICBncm93dGggcmF0 ZSBvZiB0aGUgbG9nIHNpZ25pZmljYW50bHksIGFuZCBzbyBzaG91bGQgYmUgdXNlZCBzcGFyaW5n bHkuCisgICBUaW1lc3RhbXBzIGFyZSBvZiB0aGUgZm9ybSBoaDptbTpzcy54eHgsIHdoZXJlIC54 eHggaXMgdGhvdXNhbmRzIG9mIGEKKyAgIHNlY29uZCAoYnV0IGlzIGluY2x1ZGVkIG9ubHkgb24g cGxhdGZvcm1zIHRoYXQgaW5jbHVkZSB0aGlzIGZlYXR1cmUpLgorCisxLjEzLiBMb2dzCisKKyAg IEluIFVOSVggQy1LZXJtaXQgYW5kIGluIEstOTUsIHlvdSBjYW4gbm93IGRpcmVjdCBhbnkgbG9n IHRvIGEgcGlwZS4KKyAgIFRoaXMgbm90IG9ubHkgbGV0cyB5b3Ugc2VuZCB5b3VyIGxvZ3MgdG8g cGxhY2VzIG90aGVyIHRoYW4gZGlzayBmaWxlcywKKyAgIGJ1dCBhbHNvIGxldHMgeW91IGN1c3Rv bWl6ZSB0aGVtIHRvIGFueSBkZXNpcmVkIGRlZ3JlZS4KKworICAgTE9HIHsgREVCVUcsIFBBQ0tF VFMsIFNFU1NJT04sIFRSQU5TQUNUSU9OLCBDT05ORUNUSU9OIH0geyBmaWxlLCBwaXBlIH0KKyAg ICAgICAgICAuLi4KKyAgICAgICAgICBBICJwaXBlIiBpcyB0aGUgbmFtZSBvZiBhIGNvbW1hbmQs IHByZWNlZGVkIGJ5IGEgdmVydGljYWwgYmFyLgorICAgICAgICAgIElmIHRoZSBwaXBlIGNvbnRh aW5zIGFueSBzcGFjZXMsIGl0IG11c3QgYmUgZW5jbG9zZWQgaW4gYnJhY2VzLgorCisgICBIZXJl IGFyZSBzb21lIGV4YW1wbGVzIGZvciBVTklYIChhbHdheXMgcmVtZW1iZXIgdGhlIGltcG9ydGFu Y2Ugb2YKKyAgIGdldHRpbmcgdGhlIFVOSVggc2hlbGwgcXVvdGluZyBydWxlcyByaWdodCk6CisK KyAgIExPRyBUUkFOU0FDVElPTlMgfGxwcgorICAgICAgICAgIFRoaXMgc2VuZHMgdGhlIHRyYW5z YWN0aW9uIGxvZyB0byB0aGUgZGVmYXVsdCBVTklYIHByaW50ZXIsCisgICAgICAgICAgcmF0aGVy IHRoYW4gdG8gYSBmaWxlICh1c2UgImxwIiByYXRoZXIgdGhhbiAibHByIiBpZiBuZWNlc3Nhcnkp LgorCisgICBMT0cgVFJBTlNBQ1RJT05TIHt8IG15ZmlsdGVyID4gdC5sb2d9CisgICAgICAgICAg Rm9yIHRob3NlIHdobyBkb24ndCBsaWtlIHRoZSBmb3JtYXQgb2YgdGhlIHRyYW5zYWN0aW9uIGxv Zywgb3IKKyAgICAgICAgICB3YW50IHRvIGV4dHJhY3QgY2VydGFpbiBpbmZvcm1hdGlvbiBmcm9t IGl0OyB3cml0ZSB5b3VyIG93bgorICAgICAgICAgIG91dHB1dCBmaWx0ZXIuCisKKyAgIExPRyBT RVNTSU9OIHt8IGxwciAtUGxhc2Vyd3JpdGVyfQorICAgICAgICAgIFRoaXMgc2VuZHMgdGhlIHNl c3Npb24gbG9nIHRvIGEgc3BlY2lmaWMgVU5JWCBwcmludGVyLCByYXRoZXIKKyAgICAgICAgICB0 aGFuIHRvIGEgZmlsZS4gTm90ZSB0aGUgYnJhY2VzIGFyb3VuZCB0aGUgcGlwZWxpbmUuIFRoZXNl IGFyZQorICAgICAgICAgIHJlcXVpcmVkIGJlY2F1c2UgaXQgY29udGFpbnMgc3BhY2VzLgorCisg ICBMT0cgREVCVUcge3wgdGFpbCAtMTAwID4gZGVidWcubG9nfQorICAgICAgICAgIFRoaXMgY2F1 c2VzIHRoZSBkZWJ1ZyBsb2cgZmlsZSB0byBjb250YWluIG9ubHkgdGhlIGZpbmFsIDEwMAorICAg ICAgICAgIGxpbmVzLiBTdXBwb3NlIEMtS2VybWl0IGNyYXNoZXMgdW5kZXIgc29tZSB1bnByZWRp Y3RhYmxlCisgICAgICAgICAgY2lyY3Vtc3RhbmNlcywgYW5kIHlvdSBuZWVkIGEgZGVidWcgbG9n IHRvIGNhdGNoIGl0IGluIHRoZSBhY3QuCisgICAgICAgICAgQnV0IHRoZSBkZWJ1ZyBsb2cgY2Fu IGdyb3cgdG8gaHVnZSBwcm9wb3J0aW9ucyB2ZXJ5IHF1aWNrbHksCisgICAgICAgICAgcG9zc2li bHkgZmlsbGluZyB1cCB0aGUgZGlzay4gUGlwaW5nIHRoZSBkZWJ1ZyBsb2cgdGhyb3VnaAorICAg ICAgICAgICJ0YWlsIiByZXN1bHRzIGluIGtlZXBpbmcgb25seSB0aGUgbGFzdCAxMDAgbGluZXMg KG9yIG90aGVyCisgICAgICAgICAgbnVtYmVyIG9mIHlvdXIgY2hvaWNlKS4KKworICAgTE9HIERF QlVHIHt8IGdyZXAgIl5URUxORVQiID4gZGVidWcubG9nfQorICAgICAgICAgIFRoaXMgb25lIHNo b3dzIGhvdyB0byBsb2cgb25seSBUZWxuZXQgbmVnb3RpYXRpb25zLiBQaXBpbmcgdGhlCisgICAg ICAgICAgZGVidWcgbG9nIHRocm91Z2ggZ3JlcCBvciBlZ3JlcCBsZXRzIHlvdSBsb2cgb25seSBz cGVjaWZpYworICAgICAgICAgIGluZm9ybWF0aW9uLCByYXRoZXIgdGhhbiBldmVyeXRoaW5nLiAi bWFuIGdyZXAiIGZvciBmdXJ0aGVyCisgICAgICAgICAgaW5mby4KKworICAgTE9HIERFQlVHIHt8 IGd6aXAgLWMgPiBkZWJ1Zy5sb2cuZ3p9CisgICAgICAgICAgQ3JlYXRlcyBhIGZ1bGwgZGVidWcg bG9nLCBidXQgY29tcHJlc3NlZCBieSBnemlwIHRvIHNhdmUgc3BhY2UuCisKKyAgIExPRyBQQUNL RVRTIHt8IHRyICJcXDAxIiAiWCIgfCBjdXQgLWM5LSA+IHBhY2tldC5sb2d9CisgICAgICAgICAg VGhpcyBvbmUgd3JpdGVzIHRoZSByZWd1bGFyIHBhY2tldCBsb2csIGJ1dCB0cmFuc2xhdGVzIHRo ZQorICAgICAgICAgIEN0cmwtQSB0aGF0IHN0YXJ0cyBlYWNoIHBhY2tldCB0byB0aGUgbGV0dGVy ICJYIiBhbmQgcmVtb3ZlcyB0aGUKKyAgICAgICAgICBzLW5uLW5uLSBub3RhdGlvbiBmcm9tIHRo ZSBiZWdpbm5pbmcgb2YgZWFjaCBsaW5lLiBOb3RlIHRoZQorICAgICAgICAgIGRvdWJsZSBiYWNr c2xhc2ggKG5vcm1hbCBLZXJtaXQgcXVvdGluZyBydWxlcykuICJtYW4gdHIiIGFuZAorICAgICAg ICAgICJtYW4gY3V0IiBmb3IgZnVydGhlciBpbmZvLgorCisgICBTZWUgWzM2OV1TZWN0aW9uIDIu MTIgZm9yIGluZm9ybWF0aW9uIGFib3V0IHRoZSBuZXcgY29ubmVjdGlvbiBsb2cuCisKKzEuMTQu IEF1dG9tYXRpYyBGaWxlLVRyYW5zZmVyIFBhY2tldCBSZWNvZ25pdGlvbiBhdCB0aGUgQ29tbWFu ZCBQcm9tcHQKKworICAgQmVnaW5uaW5nIGluIHZlcnNpb24gNy4wLCBDLUtlcm1pdCBjYW4gcmVj b2duaXplIEtlcm1pdCAoYW5kIGluIHNvbWUKKyAgIGNhc2VzIGFsc28gWm1vZGVtKSBmaWxlLXRy YW5zZmVyIHBhY2tldHMgd2hpbGUgYXQgaXRzIGNvbW1hbmQgcHJvbXB0LgorICAgVGhpcyBpcyBj b252ZW5pZW50IChmb3IgZXhhbXBsZSksIGlmIHlvdSBlc2NhcGVkIGJhY2sgZnJvbSBhIHJlbW90 ZQorICAgS2VybWl0IHByb2dyYW0gYW5kIHRvbGQgdGhlIGxvY2FsIEtlcm1pdCBwcm9ncmFtIHRv IHNlbmQgYSBmaWxlLCBidXQKKyAgIGZvcmdvdCB0byB0ZWxsIHRoZSByZW1vdGUgS2VybWl0IHBy b2dyYW0gdG8gcmVjZWl2ZSBpdCAoYW5kIHRoZSBsb2NhbAorICAgS2VybWl0IGRpZCBub3QgaGF2 ZSB0aGUgInNlbmQgYSBLZXJtaXQgcmVjZWl2ZSBjb21tYW5kIiBmZWF0dXJlCisgICBhdmFpbGFi bGUpLiBUaGlzIGZlYXR1cmUgaXMgY29udHJvbGxlZCBieSB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6 CisKKyAgIFNFVCBDT01NQU5EIEFVVE9ET1dOTE9BRCB7IE9OLCBPRkYgfQorICAgICAgICAgIFdo ZW4gT04sIHdoaWNoIGlzIHRoZSBkZWZhdWx0LCB0aGUgY29tbWFuZCBwYXJzZXIgcmVjb2duaXpl cworICAgICAgICAgIEtlcm1pdCBwYWNrZXRzIHdoZW4gS2VybWl0IGlzIGluIHJlbW90ZSBtb2Rl LiBBbiBTIHBhY2tldCBtYWtlcworICAgICAgICAgIGl0IGdvIGludG8gcmVjZWl2ZSBtb2RlLCBh biBJIHBhY2tldCBtYWtlcyBpdCBnbyBpbnRvIHNlcnZlcgorICAgICAgICAgIG1vZGUuIFdoZW4g T0ZGLCBwYWNrZXQgcmVjb2duaXRpb24gaXMgZGlzYWJsZWQgYW5kIHRoZSBiZWhhdmlvcgorICAg ICAgICAgIHdoZW4gYSBwYWNrZXQgaXMgcmVjZWl2ZWQgYXQgdGhlIGNvbW1hbmQgcHJvbXB0IGlz IGFzIGl0IHdhcyBpbgorICAgICAgICAgIEMtS2VybWl0IDYuMSBhbmQgZWFybGllciAobmFtZWx5 IHRvIHByaW50IGFuIGVycm9yIG1lc3NhZ2UpLgorCisgICBDT01NQU5EIEFVVE9ET1dOTE9BRCBp cyB0aGUgY29tbWFuZC1tb2RlIGVxdWl2YWxlbnQgb2YgVEVSTUlOQUwKKyAgIEFVVE9ET1dOTE9B RCwgd2hpY2ggaXMgZWZmZWN0aXZlIGR1cmluZyBDT05ORUNUIG1vZGUuCisKKzEuMTUuIFRoZSBU WVBFIENvbW1hbmQKKworICAgVGhlIFRZUEUgY29tbWFuZCBub3cgYWNjZXB0cyBhIHNlbGVjdGlv biBvZiBvcHRpb25hbCBzd2l0Y2hlcworICAgKFszNzBdU2VjdGlvbiAxLjUpLCBhbmQgYWxzbyBz ZXRzIHNldmVyYWwgdmFyaWFibGVzLgorCisgICBTeW50YXg6IFRZUEUgWyBzd2l0Y2hlcy4uLiBd IGZpbGVuYW1lCisKKyAgIFZhcmlhYmxlczoKKworICAgXHYodHlfbG4pCisgICAgICAgICAgTGlu ZSBudW1iZXIgb2YgY3VycmVudCBsaW5lIChkdXJpbmcgVFlQRSBjb21tYW5kOyBzZWUgL1BSRUZJ WCkKKworICAgXHYodHlfbGMpCisgICAgICAgICAgTGluZSBjb3VudCBvZiBmaWxlIG1vc3QgcmVj ZW50bHkgVFlQRWQuCisKKyAgIFx2KHR5X21jKQorICAgICAgICAgIE1hdGNoIGNvdW50IG9mIGZp bGUgbW9zdCByZWNlbnRseSBUWVBFZCAoc2VlIC9NQVRDSCkuCisKKyAgIFN3aXRjaGVzOgorCisg ICAvUEFHRQorICAgICAgICAgIElmIC9QQUdFIGlzIGluY2x1ZGVkLCBLZXJtaXQgcGF1c2VzIGF0 IHRoZSBlbmQgb2YgZWFjaCBzY3JlZW5mdWwKKyAgICAgICAgICBhbmQgaXNzdWVzIGEgIm1vcmU/ IiBwcm9tcHQuIFlvdSBtYXkgcHJlc3MgdGhlIHNwYWNlIGJhciB0byB2aWV3CisgICAgICAgICAg dGhlIG5leHQgcGFnZSAoc2NyZWVuZnVsKSwgb3IgcHJlc3MgInEiIG9yICJuIiB0byByZXR1cm4g dG8gdGhlCisgICAgICAgICAgQy1LZXJtaXQgcHJvbXB0LiBJZiB0aGlzIHN3aXRjaCBpcyBnaXZl biwgaXQgb3ZlcnJpZGVzIHRoZQorICAgICAgICAgIENPTU1BTkQgTU9SRS1QUk9NUFRJTkcgc2V0 dGluZyBmb3IgdGhpcyBjb21tYW5kIG9ubHkuIElmIGl0IGlzCisgICAgICAgICAgbm90IGdpdmVu LCBwYWdpbmcgaXMgYWNjb3JkaW5nIHRvIENPTU1BTkQgTU9SRS1QUk9NUFRJTkcuCisKKyAgIC9O T1BBR0UKKyAgICAgICAgICBEbyBub3QgcGF1c2UgYXQgdGhlIGVuZCBvZiBlYWNoIHNjcmVlbmZ1 bDsgc2hvdyB0aGUgd2hvbGUgZmlsZQorICAgICAgICAgIChvciBhbGwgc2VsZWN0ZWQgbGluZXMp IGF0IG9uY2UuIElmIHRoaXMgc3dpdGNoIGlzIGdpdmVuLCBpdAorICAgICAgICAgIG92ZXJyaWRl cyB0aGUgQ09NTUFORCBNT1JFLVBST01QVElORyBzZXR0aW5nIGZvciB0aGlzIGNvbW1hbmQKKyAg ICAgICAgICBvbmx5LiBJZiBpdCBpcyBub3QgZ2l2ZW4sIHBhZ2luZyBpcyBhY2NvcmRpbmcgdG8g Q09NTUFORAorICAgICAgICAgIE1PUkUtUFJPTVBUSU5HLgorCisgICAvSEVBRFs6bl0KKyAgICAg ICAgICBPbmx5IHNob3cgdGhlIGZpcnN0IG4gbGluZXMgb2YgdGhlIGZpbGUgKHdoZXJlIG4gaXMg YSBudW1iZXIpLgorICAgICAgICAgIElmIG4gaXMgb21pdHRlZCwgMTAgaXMgdXNlZC4KKworICAg L1RBSUxbOm5dCisgICAgICAgICAgT25seSBzaG93IHRoZSBsYXN0IG4gbGluZXMgb2YgdGhlIGZp bGUgKHdoZXJlIG4gaXMgYSBudW1iZXIpLiBJZgorICAgICAgICAgIG5pcyBvbWl0dGVkLCAxMCBp cyB1c2VkLiBOb3RlOiAvSEVBRCBhbmQgL1RBSUwgY2FuJ3QgYmUKKyAgICAgICAgICBjb21iaW5l ZDsgaWYgeW91IGdpdmUgYm90aCBzd2l0Y2hlcywgb25seSB0aGUgbW9zdCByZWNlbnQgb25lIGlz CisgICAgICAgICAgdXNlZC4KKworICAgL01BVENIOnBhdHRlcm4KKyAgICAgICAgICBPbmx5IHR5 cGUgbGluZXMgZnJvbSB0aGUgZmlsZSB0aGF0IG1hdGNoIHRoZSBnaXZlbiBwYXR0ZXJuIChzZWUK KyAgICAgICAgICBbMzcxXVNlY3Rpb24gNC45LjEgZm9yIHBhdHRlcm4gbm90YXRpb24pLiBVTklY IHVzZXJzIGZhbWlsaWFyCisgICAgICAgICAgd2l0aCBncmVwIHNob3VsZCBub3RlIGEgc2lnbmlm aWNhbnQgZGlmZmVyZW5jZTogdGhlcmUgaXMgbm8KKyAgICAgICAgICBpbXBsaWVkICIqIiBhdCB0 aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgdGhlIHBhdHRlcm4uIFRodXM6CisKKyAgVFlQRSAvTUFU Q0g6Zm9vICAgIExpc3RzIGxpbmVzIHdob3NlIGVudGlyZSBjb250ZW50cyBhcmUgImZvbyIuCisg IFRZUEUgL01BVENIOmZvbyogICBMaXN0cyBsaW5lcyB0aGF0IHN0YXJ0IHdpdGggImZvbyIuCisg IFRZUEUgL01BVENIOipmb28gICBMaXN0cyBsaW5lcyB0aGF0IGVuZCB3aXRoICJmb28iLgorICBU WVBFIC9NQVRDSDoqZm9vKiAgTGlzdHMgbGluZXMgdGhhdCBoYXZlICJmb28iIGFueXdoZXJlIGlu IHRoZW0uCisKKyAgICAgICAgICAvSEVBRCBhbmQgL1RBSUwgYXBwbHkgYWZ0ZXIgL01BVENILCBz byAidHlwZSAvdGFpbDoyMCAvbWF0Y2g6eCoiCisgICAgICAgICAgc2hvd3MgdGhlIGxhc3QgMjAg bGluZXMgaW4gdGhlIGZpbGUgdGhhdCBzdGFydCB3aXRoICJ4Ii4KKworICAgL1BSRUZJWDpzdHJp bmcKKyAgICAgICAgICBQcmludCB0aGUgZ2l2ZW4gc3RyaW5nIGF0IHRoZSBiZWdpbm5pbmcgb2Yg ZWFjaCBsaW5lLiBUaGUgc3RyaW5nCisgICAgICAgICAgbWF5IGJlIGEgY29uc3RhbnQsIGEgdmFy aWFibGUsIG9yIGEgcXVvdGVkIHZhcmlhYmxlLiBJZiBpdCdzIGFuCisgICAgICAgICAgdW5xdW90 ZWQgdmFyaWFibGUsIGl0cyB2YWx1ZSBhdCB0aGUgdGltZSB0aGUgVFlQRSBjb21tYW5kIHdhcwor ICAgICAgICAgIGdpdmVuIGlzIHVzZWQgYXMgYSBjb25zdGFudC4gSWYgaXQgaXMgYSBxdW90ZWQg dmFyaWFibGUsIGl0IGlzCisgICAgICAgICAgcmUtZXZhbHVhdGVkIGZvciBlYWNoIGxpbmU7IGEg dXNlZnVsIHZhcmlhYmxlIGZvciB0aGlzIGNvbnRleHQKKyAgICAgICAgICBpcyBcdih0eV9sbikg KHRoZSBsaW5lIG51bWJlciBvZiB0aGUgY3VycmVudCBsaW5lIGJlaW5nIHR5cGVkKS4KKyAgICAg ICAgICBJZiB0aGUgcHJlZml4IGlzIHRvIGluY2x1ZGUgc3BhY2VzLCBpdCBtdXN0IGJlIGVuY2xv c2VkIGluCisgICAgICAgICAgYnJhY2VzLiBFeGFtcGxlczoKKworICAgICAgICB0eXBlIC9wcmVm aXg6e29vZmEudHh0OiB9IC9tYXRjaDoqdGhpbmcqIG9vZmEudHh0CisgICAgICAgICAgICAgICAg UHJpbnRzIGFsbCBsaW5lcyBpbiBvb2ZhLnR4dCB0aGF0IGNvbnRhaW4gInRoaW5nIiB3aXRoIHRo ZQorICAgICAgICAgICAgICAgIGZpbGVuYW1lIGl0c2VsZiBhcyB0aGUgcHJlZml4IChzaW1pbGFy IHRvIFVOSVggZ3JlcCkuCisKKyAgICAgICAgdHlwZSAvcHJlZml4Ontcdih0aW1lKS4gfSBvb2Zh LnR4dAorICAgICAgICAgICAgICAgIFByZWZpeGVzIGVhY2ggbGluZSBvZiBvb2ZhLnR4dCB3aXRo IHRoZSB0aW1lIGF0IHdoaWNoIHRoZQorICAgICAgICAgICAgICAgIFRZUEUgY29tbWFuZCB3YXMg Z2l2ZW4gKG9uZSBiYWNrc2xhc2gpCisKKyAgICAgICAgdHlwZSAvcHJlZml4OntcXHYodGltZSku IH0gb29mYS50eHQKKyAgICAgICAgICAgICAgICBQcmVmaXhlcyBlYWNoIGxpbmUgb2Ygb29mYS50 eHQgd2l0aCB0aGUgdGltZSBhdCB3aGljaCB0aGF0CisgICAgICAgICAgICAgICAgbGluZSBpcyBi ZWluZyB0eXBlZCAodHdvIGJhY2tzbGFzaGVzKS4KKworICAgICAgICB0eXBlIC9wcmVmaXg6e1xc dih0eV9sbikuIH0gb29mYS50eHQKKyAgICAgICAgICAgICAgICBQcmVmaXhlcyBlYWNoIGxpbmUg b2Ygb29mYS50eHQgd2l0aCBpdHMgbGluZSBudW1iZXIuCisKKyAgICAgICAgdHlwZSAvcHJlZml4 OntcXGZscGFkKFxcdih0eV9sbiksNCkuIH0gb29mYS50eHQKKyAgICAgICAgICAgICAgICBTYW1l IGFzIHRoZSBwcmV2aW91cyBleGFtcGxlLCBleGNlcHQgdGhlIGxpbmUgbnVtYmVyIGlzCisgICAg ICAgICAgICAgICAgcmlnaHQtYWRqdXN0ZWQgaW4gYSA0LWNvbHVtbiBmaWVsZC4KKworICAgL1dJ RFRIWzpuXQorICAgICAgICAgIFRydW5jYXRlcyBlYWNoIGxpbmUgYXQgY29sdW1uIG4gKHdoaWNo IG11c3QgYmUgYSBudW1iZXIpIHByaW9yCisgICAgICAgICAgdG8gcHJpbnRpbmcgaXQuIFRoaXMg b3B0aW9uIGNhbiBiZSB1c2VkIGZvciBsb25nIGxpbmVzIHdoZW4geW91CisgICAgICAgICAgZG9u J3Qgd2FudCB0aGVtIHRvIHdyYXAuIElmIG5pcyBvbWl0dGVkLCB5b3VyIGN1cnJlbnQgc2NyZWVu CisgICAgICAgICAgd2lkdGggaXMgdXNlZC4KKworICAgL0NPVU5UCisgICAgICAgICAgQ291bnRz IGxpbmVzIGFuZCAtLSBpZiAvTUFUQ0ggd2FzIGluY2x1ZGVkLCBtYXRjaGVzIC0tIGJ1dCBkb2Vz CisgICAgICAgICAgbm90IHByaW50IGFueSBsaW5lcyBmcm9tIHRoZSBmaWxlLiBUaGUgbGluZSBh bmQgbWF0Y2ggY291bnQgaXMKKyAgICAgICAgICBzaG93biBhdCB0aGUgZW5kLCBhbmQgdGhlIHZh cmlhYmxlcyBcdih0eV9sYykgYW5kIFx2KHR5X2xtKSBhcmUKKyAgICAgICAgICBzZXQgYWNjb3Jk aW5nbHkuCisKKyAgIFNFVCBPUFRJT05TIFRZUEUgeyAvUEFHRSwgL05PUEFHRSwgL1dJRFRIOm4g fQorICAgICAgICAgIFNldHMgdGhlIHBhZ2luZyBkZWZhdWx0IGZvciBUWVBFIGNvbW1hbmRzLCB3 aGljaCBjYW4gYmUKKyAgICAgICAgICBvdmVycmlkZGVuIGluIGFueSBwYXJ0aWN1bGFyIFRZUEUg Y29tbWFuZCBieSBpbmNsdWRpbmcgdGhlCisgICAgICAgICAgZGVzaXJlZCBzd2l0Y2guCisKKyAg IElmIGEgVFlQRSBjb21tYW5kIGlzIGdpdmVuIHdpdGggbm8gc3dpdGNoLCBhbmQgbm8gU0VUIE9Q VElPTlMgVFlQRQorICAgc2VsZWN0aW9uIGlzIGluIGVmZmVjdCwgcGFnaW5nIGlzIGFjY29yZGlu ZyB0byB5b3VyIENPTU1BTkQKKyAgIE1PUkUtUFJPTVBUSU5HIHNldHRpbmcgKFNIT1cgQ09NTUFO RCkuCisKKzEuMTYuIFRoZSBSRVNFVCBDb21tYW5kCisKKyAgIFRoZSBSRVNFVCBjb21tYW5kLCBh ZGRlZCBpbiA3LjAsIGNsb3NlcyBhbGwgb3BlbiBmaWxlcyBhbmQgbG9ncywgYnV0CisgICBkb2Vz IG5vdCBhZmZlY3QgdGhlIG9wZW4gY29ubmVjdGlvbiAoaWYgYW55KS4KKworMS4xNy4gVGhlIENP UFkgYW5kIFJFTkFNRSBDb21tYW5kcworCisgICBBcyBvZiBDLUtlcm1pdCA3LjAsIGluIHRoZSBV TklYIHZlcnNpb24gb25seSwgdGhlIENPUFkgYW5kIFJFTkFNRQorICAgY29tbWFuZHMgYXJlIGJ1 aWx0IGluIGFuZCBkbyBub3QgY2FsbCB0aGUgdW5kZXJseWluZyBwbGF0Zm9ybSdzIENPUFkgb3IK KyAgIFJFTkFNRSBjb21tYW5kLiBUaGlzIGFsbG93cyB0aGVtIHRvIHdvcmsgaW4gIk5PUFVTSCIg dmVyc2lvbnMgYW5kIG90aGVyCisgICBjaXJjdW1zdGFuY2VzIHdoZXJlIGl0IGNhbid0IGFjY2Vz cyBzeXN0ZW0gY29tbWFuZHMsIGFuZCBpdCBhbGxvd3MgZmlsZQorICAgY29weWluZyBhbmQgcmVu YW1pbmcgdG8gYmUgZG9uZSBwb3J0YWJseSBpbiBzY3JpcHRzLiBUaGUKKyAgIGNoYXJhY3Rlcmlz dGljcyBvZiB0aGUgYnVpbHQtaW4gQ09QWSBvciBSRU5BTUUgaW5jbHVkZToKKyAgICAgKiBJdCBm YWlscyBpZiB0aGUgc291cmNlIGZpbGUgaXMgYSBkaXJlY3Rvcnkgb3IgaXMgd2lsZCBvciBsYWNr cyByZWFkCisgICAgICAgYWNjZXNzLgorICAgICAqIEl0IGZhaWxzIGlmIHRoZSBzb3VyY2UgZmls ZSBpcyB0aGUgZGVzdGluYXRpb24gZmlsZS4KKyAgICAgKiBJdCBhbGxvd3MgdGhlIGRlc3RpbmF0 aW9uIGZpbGUgdG8gYmUgYSBkaXJlY3RvcnksIGluIHdoaWNoIGNhc2UgdGhlCisgICAgICAgc291 cmNlIGZpbGUgaXMgY29waWVkIChvciByZW5hbWVkKSBpbnRvIGl0IHdpdGggdGhlIHNhbWUgbmFt ZS4KKyAgICAgKiBJdCBvdmVyd3JpdGVzIGFuIGV4aXN0aW5nIGRlc3RpbmF0aW9uIGZpbGUgaWYg aXRzIHBlcm1pc3Npb24KKyAgICAgICBhbGxvd3MuCisgICAgICogSXQgc2V0cyB0aGUgbmV3IGZp bGUncyBwZXJtaXNzaW9uIGFjY29yZGluZyB0byB1bWFzayBidXQgYWxzbworICAgICAgIGNhcnJp ZXMgZm9yd2FyZCB0aGUgc291cmNlIGZpbGUncyBleGVjdXRlIHBlcm1pc3Npb24gYml0cyBpZiB0 aGUKKyAgICAgICBkZXN0aW5hdGlvbiBmaWxlIGRpZCBub3QgYWxyZWFkeSBleGlzdC4KKyAgICAg KiBJdCBmYWlscyBpZiBpbnRlcnJ1cHRlZCBieSBDdHJsLUMuCisgICAgICogVXBvbiBlcnJvciwg aXQgcHJpbnRzIGFuIGFwcHJvcHJpYXRlIG1lc3NhZ2UuCisgICAgICogSXQgcmV0dXJucyBzdGFu ZGFyZGl6ZWQgZXJyb3IgY29kZXMgdGhhdCBjYW4gYmUgdGVzdGVkIGJ5IElGCisgICAgICAgU1VD Q0VTUyAvIEZBSUwuCisKKyAgIFRoZXNlIGNvbW1hbmRzIG5vdyBhbHNvIGFjY2VwdCB0aGUgZm9s bG93aW5nIHN3aXRjaGVzOgorCisgIC9MSVNUICgvTE9HLCAvVkVSQk9TRSkgICAgPSBQcmludCAi ZmlsZTEgPT4gZmlsZTIgKE9LKSIgKG9yIGVycm9yIG1lc3NhZ2UpLgorICAvTk9MSVNUICgvTk9M T0csIC9RVUlFVCkgID0gRG9uJ3QgcHJpbnQgYW55dGhpbmcgKGV4Y2VwdCBlcnJvciBtZXNzYWdl cykuCisKKyAgIC9OT0xJU1QgaXMgdGhlIGRlZmF1bHQuCisKKyAgIFRoZSBzYW1lIGJ1aWx0LWlu IGNvZGUgaXMgdXNlZCBieSB0aGUgVU5JWCBDLUtlcm1pdCBzZXJ2ZXIgdG8gZXhlY3V0ZQorICAg UkVNT1RFIENPUFkgY29tbWFuZHMgKGV4Y2VwdCBpbiB0aGlzIGNhc2Ugbm8gc3dpdGNoZXMgYXJl IGF2YWlsYWJsZSkuCisKKyAgIFRoZSBDT1BZIGNvbW1hbmQgYWxzbyBhY2NlcHRzIHRoZSBmb2xs b3dpbmcgYWRkaXRpb25hbCBzd2l0Y2hlcy4gV2hlbgorICAgYW55IG9mIHRoZXNlIGFyZSBnaXZl biAoYW5kIHRoZXkgY2FuIGJlIHVzZWQgaW4gYW55IGNvbWJpbmF0aW9uIGV4Y2VwdAorICAgL1NX QVAgYW5kIC9BUFBFTkQpLCBzb21lIG9mIHRoZSBjaGVja3MgbGlzdGVkIGFib3ZlIGFyZSByZWxh eGVkLCBhbmQKKyAgIHRodXMgaXQgbWlnaHQgYmUgcG9zc2libGUgdG8gZ2V0IGludG8gdHJvdWJs ZSBpbiBjZXJ0YWluIGNhc2VzLCBlLmcuCisgICB3aGVuIHRoZSBzb3VyY2UgYW5kIHRhcmdldCBm aWxlcyBhcmUgdGhlIHNhbWUgZmlsZToKKworICAvQVBQRU5EICAgICAgICAgICAgICAgICAgID0g QXBwZW5kIHNvdXJjZSBmaWxlIHRvIGRlc3RpbmF0aW9uIGZpbGUuCisgIC9TV0FQLUJZVEVTICAg ICAgICAgICAgICAgPSBTd2FwIGJ5dGVzIChzZWUgWzM3Ml1TZWN0aW9uIDYuNi41KS4KKyAgL0ZS T01CNjQgICAgICAgICAgICAgICAgICA9IERlY29kZSB0aGUgc291cmNlIGZpbGUgZnJvbSBCYXNl NjQgZW5jb2RpbmcuCisgIC9UT0I2NCAgICAgICAgICAgICAgICAgICAgPSBFbmNvZGUgdGhlIHRh cmdldCBmaWxlIGluIEJhc2U2NC4KKworICAgQmFzZTY0IGlzIHRoZSBlbmNvZGluZyBjb21tb25s eSB1c2VkIGZvciBlbmNsb3N1cmVzIGluIEludGVybmV0IGVtYWlsLgorCisxLjE4LiBUaGUgTUFO VUFMIENvbW1hbmQKKworICAgVGhlIE1BTlVBTCBjb21tYW5kIGNhbiBiZSB1c2VkIHRvIGFjY2Vz cyB0aGUgYXBwcm9wcmlhdGUgS2VybWl0IG1hbnVhbAorICAgb3Igb3RoZXIgbWFudWFsLiBUaGUg Z2VuZXJhbCBzeW50YXggaXM6CisKKyAgIE1BTlVBTCBbIHN0cmluZyBdCisgICAgICAgICAgSWYg dGhlIHN0cmluZyBpcyBvbWl0dGVkLCBDLUtlcm1pdCBhc2tzIHRoZSB1bmRlcmx5aW5nIHN5c3Rl bSB0bworICAgICAgICAgIGFjY2VzcyB0aGUgQy1LZXJtaXQgbWFudWFsIHVzaW5nIHdoYXRldmVy IG1ldGhvZCBpcyBhcHByb3ByaWF0ZQorICAgICAgICAgIGZvciB0aGUgc3lzdGVtLgorCisgICBU aGUgc3BlY2lmaWMgYWN0aW9uIGRlcGVuZHMgb24gdGhlIHN5c3RlbS4gSW4gVU5JWCwgYSAibWFu IiBjb21tYW5kIGlzCisgICBpc3N1ZWQ7ICJrZXJtaXQiIGlzIHRoZSBkZWZhdWx0IGFyZ3VtZW50 IGJ1dCBvdGhlciBtYW51YWwgdG9waWNzIG1heSBiZQorICAgc3BlY2lmaWVkLiBJZiB0aGUgIm1h biIgY29tbWFuZCBhbGxvd3MgaW5kZXggb3Igc3RyaW5nIHNlYXJjaGluZywgdGhlCisgICBhcHBy b3ByaWF0ZSBzeW50YXggbWF5IGJlIGluY2x1ZGVkLgorCisgICBJbiBLZXJtaXQgOTUsIHRoZSBN QU5VQUwgY29tbWFuZCBicmluZ3MgdXAgdGhlIEhUTUwgb25saW5lIEs5NSBtYW51YWwuCisKKyAg IEluIFZNUyBhbmQgZWxzZXdoZXJlLCAibWFuIiBpcyBzaW1wbHkgdHJhbnNsYXRlZCB0byAiaGVs cCIsIHdpdGggYQorICAgZGVmYXVsdCBhcmd1bWVudCBvZiAia2VybWl0Ijsgb3RoZXIgYW5kL29y IGFkZGl0aW9uYWwgYXJndW1lbnRzIG1heSBiZQorICAgaW5jbHVkZWQgYWNjb3JkaW5nIHRvIHRo ZSBkZWZpbml0aW9uIG9mIHRoZSBzeXN0ZW0ncyAiaGVscCIgY29tbWFuZC4KKworICAgQ29ycmVj dCBvcGVyYXRpb24gb2YgdGhlICJtYW4iIGNvbW1hbmQgaW4gQy1LZXJtaXQgZGVwZW5kcyBvbiB0 aGUKKyAgIGFwcHJvcHJpYXRlIG1hbiBwYWdlIG9yIGhlbHAgdG9waWMgaGF2aW5nIGJlZW4gaW5z dGFsbGVkIGluIHRoZSByaWdodAorICAgcGxhY2Ugd2l0aCB0aGUgcmlnaHQgcGVybWlzc2lvbnMg YW5kIGZvcm1hdC4KKworMS4xOS4gU3RyaW5nIGFuZCBGaWxlbmFtZSBNYXRjaGluZyBQYXR0ZXJu cworCisgICBBIHBhdHRlcm4gaXMgYSBzdHJpbmcgdGhhdCBpbmNsdWRlcyBzcGVjaWFsIG5vdGF0 aW9uIGZvciBtYXRjaGluZworICAgY2xhc3NlcyBvciBzZXF1ZW5jZXMgb2YgY2hhcmFjdGVycy4g Qy1LZXJtaXQgNy4wIC8gSzk1IDEuMS4xOSBzdXBwb3J0cworICAgcGF0dGVybnMgaW4gc2V2ZXJh bCBwbGFjZXM6CisKKyAgICAgKiBGaWxlbmFtZXMgKFszNzNdU2VjdGlvbiA0LjkpCisgICAgICog U1dJVENIIGNhc2UgbGFiZWxzIChbMzc0XVNlY3Rpb24gNy4xOCkKKyAgICAgKiBUaGUgbmV3IElG IE1BVENIIHN0YXRlbWVudCAoWzM3NV1TZWN0aW9uIDcuNCkKKyAgICAgKiBUWVBFIC9NQVRDSCAo WzM3Nl1TZWN0aW9uIDEuMTUpCisgICAgICogU0VUIEZJTEUgVEVYVC1QQVRURVJOUyBhbmQgQklO QVJZLVBBVFRFUk5TIChbMzc3XVNlY3Rpb24gNC4zKQorICAgICAqIFRoZSBcZnNlYXJjaCgpIGFu ZCBcZmFycmF5bG9vaygpIGZ1bmN0aW9ucyAoWzM3OF1TZWN0aW9ucyA3LjMgYW5kCisgICAgICAg WzM3OV03LjEwLjcpCisgICAgICogVGhlIFxmcGF0dGVybigpIGZ1bmN0aW9uIHVzZWQgd2l0aCBb TSxSRV1JTlBVVCAoWzM4MF1TZWN0aW9uIDcuMSkKKworICAgUGF0dGVybnMgYXJlIGFsc28gY2Fs bGVkIHdpbGRjYXJkcywgZXNwZWNpYWxseSB3aGVuIHVzZWQgZm9yIGZpbGVuYW1lCisgICBtYXRj aGluZy4gQy1LZXJtaXQncyBwYXR0ZXJuIHN5bnRheCBpcyBleHBsYWluZWQgaW4gWzM4MV1TZWN0 aW9uIDQuOS4xLAorICAgYW5kIGFsc28gYnkgdGhlIEhFTFAgV0lMRENBUkRTIGNvbW1hbmQuCisK KzEuMjAuIE11bHRpcGxlIENvbW1hbmRzIG9uIE9uZSBMaW5lCisKKyAgIEFzIG9mIEMtS2VybWl0 IDcuMCwgY29tbWFuZHMgY2FuIGJlIGdyb3VwZWQgdG9nZXRoZXIgb24gb25lIGxpbmUgYnkKKyAg IHNlcGFyYXRpbmcgdGhlIGNvbW1hbmRzIHdpdGggY29tbWFzIGFuZCBlbmNsb3NpbmcgdGhlIGxp c3QgaW4gYnJhY2VzLgorICAgRm9yIGV4YW1wbGU6CisKKyAgQy1LZXJtaXQ+IHsgZWNobyBPbmUs IGVjaG8gVHdvLCBlY2hvIFRocmVlIH0KKyAgQy1LZXJtaXQ+IGRvIHsgZWNobyBPbmUsIGVjaG8g VHdvLCBlY2hvIFRocmVlIH0KKworICAgQ29tbWFuZCBsaXN0cyBjYW4gYmUgbmVzdGVkOgorCisg IFsgZG8gXSB7IGVjaG8gT25lLCBlY2hvIFR3bywgaWYgdHJ1ZSB7IGVjaG8gQSwgZWNobyBCfSwg ZWNobyBUaHJlZSB9CisKKyAgIGFuZCB0aGUgRU5EIGNvbW1hbmQgd29ya3MgYXMgaXQgZG9lcyBp biBtYWNyb3M6CisKKyAgWyBkbyBdIHsgZWNobyBPbmUsIGVjaG8gVHdvLCBpZiB0cnVlIGVuZCwg ZWNobyBUaHJlZSB9CisKKyAgIFRoZSAib25lIGxpbmUiIHN0cmljdHVyZSBpcywgb2YgY291cnNl LCBwbGlhbnQgdG8gbGluZS1jb250aW51YXRpb24KKyAgIGNvbnZlbnRpb25zLCBuYW1lbHkgdGhh dCBsaW5lcyBlbmRpbmcgaW4gaHlwaGVuICgtKSBvciBsZWZ0IGJyYWNlICh7KQorICAgYXJlIHRv IGJlIGNvbnRpbnVlZC4gVGh1cyB0aGUgZmlyc3QgZXhhbXBsZSBjYW4gYWxzbyBiZSByZW5kZXJl ZDoKKworICBbIGRvIF0geworICAgICAgZWNobyBPbmUKKyAgICAgIGVjaG8gVHdvCisgICAgICBl Y2hvIFRocmVlCisgIH0KKworICAgKHRoZSAiZG8iIGlzIG9wdGlvbmFsKS4KKworMS4yMS4gV2hh dCBEbyBJIEhhdmU/CisKKyAgIEMtS2VybWl0IGNhbiBiZSBidWlsdCBmb3IgaHVuZHJlZHMgb2Yg ZGlmZmVyZW50IHBsYXRmb3JtcyB3aXRoCisgICBwcmFjdGljYWxseSBjb3VudGxlc3MgY29uZmln dXJhdGlvbiBvcHRpb25zLiBDZXJ0YWluIGNvbW1hbmRzIG1pZ2h0IG5vdAorICAgYmUgYXZhaWxh YmxlIGluIGNlcnRhaW4gY29uZmlndXJhdGlvbnMsIGV0Yy4gRXZlbiBvbiB0aGUgc2FtZSBwbGF0 Zm9ybSwKKyAgIGRpZmZlcmVudCBidWlsZHMgYXJlIHBvc3NpYmxlOiAibWF4aW11bSBmdW5jdGlv bmFsaXR5IiwgIm1pbmltdW0gc2l6ZSIsCisgICAibWF4aW11bSBwZXJmb3JtYW5jZSIsIGFuZCBz byBvbi4gWW91IGNhbiBmaW5kIG91dCBhIGxvdCBhYm91dCB0aGUKKyAgIGNvbmZpZ3VyYXRpb24g b2YgeW91ciBDLUtlcm1pdCBwcm9ncmFtIHdpdGggdGhlIFNIT1cgRkVBVFVSRVMgY29tbWFuZC4K KyAgIE9mIGNvdXJzZSwgYSBsb3Qgb2Ygd2hhdCBpdCBzYXlzLCBlc3BlY2lhbGx5IGluIHRoZSBi b3R0b20gcGFydCwgbWlnaHQKKyAgIHNlZW0gbGlrZSBnaWJiZXJpc2gsIGJ1dCBjYW4gYmUgZGVj aXBoZXJlZCB3aXRoIGEgUm9zZXR0YSBTdG9uZSAoc3VjaAorICAgYXMgdGhlIEMtS2VybWl0IHNv dXJjZSBvciB0aGUgWzM4Ml1ja2NjZmcudHh0IGZpbGUpLiBJbiBhbnkgY2FzZSwgdGhlCisgICBv dXRwdXQgZnJvbSBTSE9XIEZFQVRVUkVTIG1pZ2h0IGVhc2lseSBleHBsYWluIHdoeSBzb21lIGV4 cGVjdGVkCisgICBmZWF0dXJlIGlzIG1pc3NpbmcsIG9yIHNvbWUgYnVmZmVyIGlzIHNtYWxsZXIg dGhhbiBleHBlY3RlZC4gSGVyZSdzIGEKKyAgIHNhbXBsZSBvZiB0aGUgYm90dG9tIHNlY3Rpb24g Zm9yIHRoZSBTdW5PUyB2ZXJzaW9uOgorCitDLUtlcm1pdCA3LjAuMTk2LCAxIEphbiAyMDAwCisK K01ham9yIG9wdGlvbmFsIGZlYXR1cmVzIGluY2x1ZGVkOgorIE5ldHdvcmsgc3VwcG9ydCAodHlw ZSBTSE9XIE5FVCBmb3IgZnVydGhlciBpbmZvKQorIFRlbG5ldCBLZXJtaXQgT3B0aW9uCisgSGFy ZHdhcmUgZmxvdyBjb250cm9sCisgRXh0ZXJuYWwgWFlaTU9ERU0gcHJvdG9jb2wgc3VwcG9ydAor IExhdGluLTEgKFdlc3QgRXVyb3BlYW4pIGNoYXJhY3Rlci1zZXQgdHJhbnNsYXRpb24KKyBMYXRp bi0yIChFYXN0IEV1cm9wZWFuKSBjaGFyYWN0ZXItc2V0IHRyYW5zbGF0aW9uCisgQ3lyaWxsaWMg KFJ1c3NpYW4sIFVrcmFpbmlhbiwgZXRjKSBjaGFyYWN0ZXItc2V0IHRyYW5zbGF0aW9uCisgR3Jl ZWsgY2hhcmFjdGVyLXNldCB0cmFuc2xhdGlvbgorIEhlYnJldyBjaGFyYWN0ZXItc2V0IHRyYW5z bGF0aW9uCisgSmFwYW5lc2UgY2hhcmFjdGVyLXNldCB0cmFuc2xhdGlvbgorIFVuaWNvZGUgY2hh cmFjdGVyLXNldCB0cmFuc2xhdGlvbgorIFBzZXVkb3Rlcm1pbmFsIGNvbnRyb2wKKyBSRURJUkVD VCBjb21tYW5kCisgUkVTRU5EIGNvbW1hbmQKKyBGdWxsc2NyZWVuIGZpbGUgdHJhbnNmZXIgZGlz cGxheQorIENvbnRyb2wtY2hhcmFjdGVyIHVucHJlZml4aW5nCisgU3RyZWFtaW5nCisgQXV0b2Rv d25sb2FkCisKK01ham9yIG9wdGlvbmFsIGZlYXR1cmVzIG5vdCBpbmNsdWRlZDoKKyBObyBLZXJi ZXJvcyhUTSkgYXV0aGVudGljYXRpb24KKyBObyBTUlAoVE0pIChTZWN1cmUgUmVtb3RlIFBhc3N3 b3JkKSBwcm90b2NvbAorIE5vIFNlY3VyZSBTb2NrZXRzIExheWVyIChTU0wpIHByb3RvY29sCisg Tm8gVHJhbnNwb3J0IExheWVyIFNlY3VyaXR5IChUTFMpIHByb3RvY29sCisgTm8gZW5jcnlwdGlv bgorIE5vIFggV2luZG93cyBmb3J3YXJkaW5nCisKK0hvc3QgaW5mbzoKKyBNYWNoaW5lOiAgICBz dW40bQorIE1vZGVsOiAgICAgICh1bmtub3duKQorIE9TOiAgICAgICAgIFN1bk9TCisgT1MgUmVs ZWFzZTogNC4xLjNfVTEKKyBPUyBWZXJzaW9uOiA0CisKK1RhcmdldDogc3Vub3M0MWdzYworR0ND IHZlcnNpb246IDIuNy4yCitDb21waWxlZCBEZWMgMzEgMTk5OSAxMDozODo1NCwgb3B0aW9uczoK KyBfX0dOVUNfXyBfX1NURENfXyBfUE9TSVhfSk9CX0NPTlRST0wgX1NDX0pPQl9DT05UUk9MIEFS UkFZUkVGTEVOPTEwMjQgQklHQlVGT0sKKyBCUk9XU0VSIEJTRDQgQ0tfQU5TSUMgQ0tfQVBDIENL X0FVVE9ETCBDS19DVVJTRVMgQ0tfRE5TX1NSViBDS19FTlZJUk9OTUVOVAorIENLX0ZBU1QgQ0tf TE9HSU4gQ0tfTUtESVIgQ0tfTkFXUyBDS19QQ1RfQkFSIENLX1BFUk1TIENLX1JFQ0FMTCBDS19S VFNDVFMKKyBDS19TUEVFRCBDS19USU1FUlMgQ0tfVE1QRElSIENLX1RUR1dTSVogQ0tfVFRZRkQg Q0tfV1JFRlJFU0ggQ0tFWEVDCisgQ0tGTE9BVD1kb3VibGUgQ0tHSE5MSE9TVCBja21heGZpbGVz PTY0IENLTUFYT1BFTj02NCBDS01BWFBBVEg9MTAyMyBDS1JFQUxQQVRICisgQ0tSRUdFWCBDS1NZ U0xPRyBDS1RVTklORyBDTURCTD0zMjc2MyBDTURERVA9NjQgQ09OR1NQRCBEQ01EQlVGIERJUkVO VCBEWU5BTUlDCisgRk5GTE9BVCBGT1JERVBUSD0zMiBHRlRJTUVSIEhBRERSTElTVCBIREJVVUNQ IElGREVCVUcgSUtTX09QVElPTiBJS1NEQgorIElLU0RDT05GIElOQlVGU0laRT0zMjc2OCBJTlBC VUZTSVo9NDA5NiBNQUNfTUFYPTE2Mzg0IE1BQ0xFVkVMPTEyOCBNQVhERElSPTMyCisgTUFYRE5V TVM9NDA5NSBNQVhHRVRQQVRIPTEyOCBNQVhUQUtFPTU0IE1BWFdMRD0xMDI0MDAgTVNFTkRNQVg9 MTAyNCBORVRDTUQKKyBORVRDT05OIE5FVFBUWSBOT0tWRVJCUyBOT1NFVEJVRiBPQlVGU0laRT0z Mjc2OCBQQVJTRU5TRSBQQVRURVJOUyBQSVBFU0VORAorIFJFTkFNRSBSTE9HQ09ERSBTQVZFRFVJ RCBTRUxFQ1QgU0lHX1YgU09MX1NPQ0tFVCBzcGFyYyBTVFJFQU1JTkcgc3VuIFNVTk9TNAorIFNZ U1RJTUVIIFRDUFNPQ0tFVCBUSU1FSCBUTE9HIFROQ09ERSBUVExFQlVGIFRUU1BETElTVCBVSURC VUZMRU49MjU2IFVOSVgKKyBVTlBSRUZJWFpFUk8gVVNFX0xTVEFUIFVTRV9NRU1DUFkgVk5BTUw9 NDA5NiBXSEFUQU1JIFhGUkNBTiBaX01BWENIQU49NDYKKyB6X21heGNoYW49NDYgWlhSRVdJTkQK KworIGJ5dGUgb3JkZXI6IGJpZyBlbmRpYW4KKworIHNpemVvZnM6IGludD00IGxvbmc9NCBzaG9y dD0yIGNoYXI9MSBjaGFyKj00IGZsb2F0PTQgZG91YmxlPTgKKworIGZsb2F0aW5nLXBvaW50OiBw cmVjaXNpb249MTYgcm91bmRpbmc9MQorCisgICBXaXRob3V0IGdvaW5nIGludG8gZGV0YWlsIGFi b3V0IHdoYXQgYWxsIHRoZSBub3RhdGlvbiBtZWFucywgbm90aWNlIGEKKyAgIGNvdXBsZSB0aGlu Z3M6CisKKyAgICAgKiBUaGUgT3B0aW9ucyBzZWN0aW9uIHNob3dzIHN5bWJvbHMgKCJtYWNyb3Mi KSBpbiBlZmZlY3QgZHVyaW5nCisgICAgICAgY29tcGlsYXRpb24sIHRvZ2V0aGVyIHdpdGggdGhl aXIgdmFsdWVzIChmb3IgdGhvc2UgdGhhdCBoYXZlCisgICAgICAgdmFsdWVzKS4gVGhlIG9wdGlv bnMgYXJlIGxpc3RlZCBpbiBhbHBoYWJldGljYWwgb3JkZXIgdG8gbWFrZSBhbnkKKyAgICAgICBw YXJ0aWN1bGFyIG9wdGlvbiBlYXNpZXIgdG8gZmluZC4KKyAgICAgKiBNQVhXTEQgaXMgdGhlIG1h eGltdW0gbnVtYmVyIG9mIGZpbGVzIHRoYXQgYSB3aWxkY2FyZCBjYW4gZXhwYW5kCisgICAgICAg dG8uCisgICAgICogQW55dGhpbmcgc3RhcnRpbmcgd2l0aCAiTk8iIGlzIGEgZmVhdHVyZSAob3Ig c29tZXRoaW5nIG90aGVyIHRoYW4gYQorICAgICAgIGZlYXR1cmUpIHRoYXQgaGFzIGJlZW4gZGVs aWJlcmF0ZWx5ICJjb21waWxlZCBvdXQiLCBvciBvbWl0dGVkLgorICAgICAqIEltcG9ydGFudCBp dGVtcyBmb3Igc2NyaXB0IHdyaXRlcnMgaW5jbHVkZTogQ01EQkw9MzI3NjMgKHRoZSBzaXplCisg ICAgICAgb2YgdGhlIGNvbW1hbmQgYnVmZmVyIGFuZCB0aGVyZWZvcmUgdGhlIG1heGltdW0gbGVu Z3RoIGZvciBhIG1hY3JvCisgICAgICAgb3IgdmFyaWFibGUgZGVmaW5pdGlvbjsgQ01EREVQPTY0 ICh0aGUgbGltaXQgb24gcmVjdXJzaW9uIGRlcHRoKTsKKyAgICAgICBGT1JERVBUSD0zMiAodGhl IG5lc3RpbmcgbGltaXQgb24gRk9SIGxvb3BzKTsgSU5CVUZTSVpFPTMyNzY4ICh0aGUKKyAgICAg ICBzaXplIG9mIHRoZSBJTlBVVCBjb21tYW5kIGNpcmN1bGFyIGJ1ZmZlcik7IE1BQ19NQVg9MTYz ODQgKHRoZQorICAgICAgIG1heGltdW0gbnVtYmVyIG9mIG1hY3JvcyksIGV0Yy4KKworICAgU2Vl IHRoZSBbMzgzXWNrY2NmZy50eHQgZmlsZSBmb3IgZGV0YWlscy4KKworMS4yMi4gR2VuZXJhbGl6 ZWQgRmlsZSBJbnB1dCBhbmQgT3V0cHV0CisKKyAgIEMtS2VybWl0IDcuMCBhZGRzIGEgbmV3IGdl bmVyYWxpemVkIEkvTyBzeXN0ZW0gZm9yIHN0cmVhbSBmaWxlcywKKyAgIGF1Z21lbnRpbmcgKGFu ZCB0byBzb21lIGV4dGVudCwgb3ZlcmxhcHBpbmcgd2l0aCkgdGhlIG9sZGVyIE9QRU4sIFJFQUQs CisgICBXUklURSwgYW5kIENMT1NFIGNvbW1hbmRzLiBJbiB0aGUgbmV3IGZpbGUgaS9vIHN5c3Rl bSwgd2hpY2ggY2FuIGJlCisgICB1c2VkIHNpbXVsdGFuZW91c2x5IHdpdGggdGhlIG9sZCBvbmUs IGFsbCBjb21tYW5kcyBhcmUgZ3JvdXBlZCB0b2dldGhlcgorICAgdW5kZXIgdGhlIG5ldyBGSUxF IGtleXdvcmQsIGFuZCBzb21lIHJlbGF0ZWQgZnVuY3Rpb25zIGFuZCB2YXJpYWJsZXMKKyAgIGFy ZSBhZGRlZC4KKworMS4yMi4xLiBXaHkgQW5vdGhlciBJL08gU3lzdGVtPworCisgICBUaGUgd2Vs bC1rbm93biBMT0csIE9QRU4sIFJFQUQsIFdSSVRFLCBhbmQgQ0xPU0UgY29tbWFuZHMgaGF2ZSB0 aGUKKyAgIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisKKyAgICAxLiBPbmx5IG9uZSBSRUFEIGZp bGUgYW5kIG9uZSBXUklURSBmaWxlIGNhbiBiZSBvcGVuIGF0IGEgdGltZS4KKyAgICAyLiBUaGUg UkVBRCBhbmQgV1JJVEUgY29tbWFuZHMgYXJlIHN0cmljdGx5IGxpbmUgb3JpZW50ZWQuCisgICAg My4gVGhlc2UgY29tbWFuZHMgY2FuIG5vdCBiZSB1c2VkIHdpdGggYmluYXJ5IGZpbGVzLgorICAg IDQuIFRoZXkgZG8gbm90IHN1cHBvcnQgcmVhZC93cml0ZSBhY2Nlc3Mgb3IgcmFuZG9tIGFjY2Vz cy4KKyAgICA1LiBUaGUgc3ludGF4IGlzIGEgYml0IGNvdW50ZXJpbnR1aXRpdmUgZm9yIHByb2dy YW1tZXJzLgorCisgICBUaGUgbmV3IGZpbGUgaS9vIHN5c3RlbSBhbGxvd3MgbXVsdGlwbGUgZmls ZXMgdG8gYmUgb3BlbiBhdCBvbmNlLCBpbgorICAgYW55IGRlc2lyZWQgY29tYmluYXRpb24gb2Yg bW9kZXMgKHJlYWQvd3JpdGUvYXBwZW5kKSBzdXBwb3J0ZWQgYnkgdGhlCisgICBvcGVyYXRpbmcg c3lzdGVtLCBmb3IgbGluZSwgYmxvY2sgKHJlY29yZCksIG9yIGNoYXJhY3RlciBpL28sIGZvcgor ICAgc2VxdWVudGlhbCBvciByYW5kb20gYWNjZXNzLCB1c2luZyBjb25zaXN0ZW50IHN5bnRheCBh bmQgY29udmVudGlvbnMuCisKKyAgIFRoZSBuZXcgc3lzdGVtLCBob3dldmVyLCBkb2VzIG5vdCBy ZXBsYWNlIHRoZSBvbGQgb25lLCBzaW5jZSB0aGUgb2xkCisgICBzeXN0ZW0gc3RpbGwgbXVzdCBi ZSB1c2VkIGZvcjoKKworICAgIDEuIFRoZSBzZXNzaW9uLCBwYWNrZXQsIGRlYnVnLCB0cmFuc2Fj dGlvbiwgYW5kIGNvbm5lY3Rpb24gbG9ncy4KKyAgICAyLiBSZWFkaW5nIGFuZCB3cml0aW5nIGNv bW1hbmRzIHJhdGhlciB0aGFuIGZpbGVzLgorICAgIDMuIEV4aXN0aW5nIHNjcmlwdHMuCisKKyAg IFRoZSBuZXcgc3lzdGVtIHdvcmtzIG9ubHkgd2l0aCByZWd1bGFyIGZpbGVzLCBub3Qgd2l0aCBj b21tYW5kcyBvcgorICAgcGlwZXMgb3IgbWFpbGJveGVzIG9yIHBzZXVkb3Rlcm1pbmFscy4gTm8g c3BlY2lhbCBwcm92aXNpb25zIGFyZSBtYWRlCisgICBpbiB0aGUgRklMRSBjb21tYW5kcyBmb3Ig aGFuZGxpbmcgZGV2aWNlcyBvciBuZXR3b3JrIGNvbm5lY3Rpb25zLCBub3IKKyAgIGZvciBwcmV2 ZW50aW5nIHlvdSBmcm9tIHRyeWluZyB0byBvcGVuIHRoZW07IGlmIHRoZSB1bmRlcmx5aW5nCisg ICBvcGVyYXRpbmcgc3lzdGVtIHRyZWF0cyB0aGVtIGxpa2UgcmVndWxhciBzdHJlYW0gZGlzayBm aWxlcywgdGhlIEZJTEUKKyAgIGNvbW1hbmRzIChleGNlcHQsIG9mIGNvdXJzZSBTRUVLLCBSRVdJ TkQsIGFuZCBDT1VOVCkgbWlnaHQgd29yayB3aXRoCisgICB0aGVtLiAoSW4gQyBwcm9ncmFtbWlu ZyB0ZXJtcywgdGhlIEZJTEUgY29tbWFuZHMgYXJlLCBhdCBwcmVzZW50LAorICAgbm90aGluZyBt b3JlIHRoYW4gYSBmcm9udCBlbmQgdG8gZm9wZW4oKSAvIGZyZWFkKCkgLyBmd3JpdGUoKSAvCisg ICBmY2xvc2UoKSBhbmQgZnJpZW5kcywgd2hpY2ggYXJlIGEgcG9ydGFibGUgQVBJIHRvIHNlcXVl bnRpYWwgZmlsZXMsIGJ1dAorICAgdGhpcyBtaWdodCBjaGFuZ2UgaW4gdGhlIGZ1dHVyZSBmb3Ig cGxhdGZvcm1zIGxpa2UgVk1TIGFuZCBWT1MgdGhhdAorICAgaGF2ZSBtb3JlIGNvbXBsaWNhdGVk IGZpbGUgc3lzdGVtcy4pCisKKyAgIERlZmluaXRpb25zOgorCisgICBDaGFubmVsCisgICAgICAg ICAgQSBudW1iZXIgYXNzaWduZWQgdG8gYSBmaWxlIHdoZW4gaXQgaXMgb3BlbmVkLCBieSB3aGlj aCBpdCBtdXN0CisgICAgICAgICAgYmUgcmVmZXJyZWQgdG8gaW4gYWxsIGlucHV0L291dHB1dCBv cGVyYXRpb25zLgorCisgICBSZWFkL1dyaXRlIFBvaW50ZXIKKyAgICAgICAgICBUaGUgY3VycmVu dCBwb3NpdGlvbiBpbiBhbiBvcGVuIGZpbGUsIGV4cHJlc3NlZCBhcyB0aGUgMC1iYXNlZAorICAg ICAgICAgIGJ5dGUgY291bnQgZnJvbSB0aGUgYmVnaW5uaW5nLgorCisxLjIyLjIuIFRoZSBGSUxF IENvbW1hbmQKKworICAgRklMRSBrZXl3b3JkIFsgc3dpdGNoZXMgXSBjaGFubmVsIFsgZGF0YSBd CisgICAgICAgICAgVGhlIGtleXdvcmQgc3BlY2lmaWVzIHRoZSBmdW5jdGlvbjogRklMRSBPUEVO LCBGSUxFIFJFQUQsIEZJTEUKKyAgICAgICAgICBXUklURSwgRklMRSBDTE9TRSwgZXRjLiBGb3Ig Y29udmVuaWVuY2UgKGFuZCBmb3IgZmFtaWxpYXJpdHkgdG8KKyAgICAgICAgICBDIHByb2dyYW1t ZXJzKSwgdGhlIHR3by13b3JkIEZJTEUgY29tbWFuZHMgY2FuIGJlIHNob3J0ZW5lZCB0bworICAg ICAgICAgIHRoZSBzaW5nbGUgd29yZHMgRk9QRU4sIEZSRUFELCBGV1JJVEUsIEZDTE9TRSwgYW5k IHNvIG9uLgorICAgICAgICAgIFN3aXRjaGVzIGFyZSBvcHRpb25hbCwgYW5kIG1vZGlmeSBvciBh bXBsaWZ5IHRoZSByZXF1ZXN0ZWQgZmlsZQorICAgICAgICAgIGZ1bmN0aW9uLgorCisgICBBcyBp biBDLCBGb3J0cmFuLCBhbmQgb3RoZXIgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2VzLCBvcGVuIGZpbGVz IGFyZQorICAgcmVmZXJyZWQgdG8gYnkgImNoYW5uZWxzIiwgaW50ZWdlcnMgc3VjaCBhcyAwLCAx LCAyLCAzLCBhbmQgc28gb24uIEEKKyAgIGNoYW5uZWwgbnVtYmVyIGlzIGFzc2lnbmVkIHdoZW4g eW91IG9wZW4gYSBmaWxlLiBUaGUgbnVtYmVyIG9mCisgICBhdmFpbGFibGUgY2hhbm5lbHMgZGVw ZW5kcyBvbiB0aGUgdW5kZXJseWluZyBvcGVyYXRpbmcgc3lzdGVtLCBhbmQgY2FuCisgICBiZSBz ZWVuIGluIHRoZSB2YXJpYWJsZToKKworICBcdihmX21heCkKKworICAgb3IgYnkgZ2l2aW5nIHRo ZSBGSUxFIExJU1QgKEZMSVNUKSBjb21tYW5kLiBDaGFubmVscyBhcmUgZGlzY3Vzc2VkIGluCisg ICBncmVhdGVyIGRldGFpbCBpbiBbMzg0XVNlY3Rpb24gMS4yMi40LgorCisgICBGSUxFIGNvbW1h bmQgZXJyb3JzIGNhbiBiZSBjYXVnaHQgd2l0aCBJRiBGQUlMIGFmdGVyIHRoZSBGSUxFIGNvbW1h bmQuCisgICBJbiBhZGRpdGlvbiwgdGhlIFx2KGZfZXJyb3IpIHZhcmlhYmxlIGlzIHNldCB0byB0 aGUgY29tcGxldGlvbiBjb2RlIG9mCisgICB0aGUgY29tbWFuZDogMCBpZiBubyBlcnJvciwgb3Ig YSBuZWdhdGl2ZSBudW1iZXIgaWYgdGhlcmUgd2FzIGFuIGVycm9yLgorICAgVGhlIGVycm9yIGNv ZGVzIGFyZSBsaXN0ZWQgaW4gWzM4NV1TZWN0aW9uIDEuMjIuNS4KKworICAgVGhlIGNvbW1hbmQg dG8gb3BlbiBhIGZpbGUgaXM6CisKKyAgIEZJTEUgT1BFTiBbIHN3aXRjaGVzIF0gdmFyaWFibGUg ZmlsZW5hbWUKKyAgICAgICAgICBPcGVucyBhIGZpbGUgZm9yIHRoZSB0eXBlIG9mIGFjY2VzcyBz cGVjaWZpZWQgYnkgdGhlIHN3aXRjaGVzLAorICAgICAgICAgIG9yIGZvciByZWFkLW9ubHkgYWNj ZXNzIGlmIG5vIHN3aXRjaGVzIGFyZSBnaXZlbi4gVXBvbiBzdWNjZXNzLAorICAgICAgICAgIGEg Y2hhbm5lbCBudW1iZXIgaXMgYXNzaWduZWQgdG8gdGhpcyBmaWxlIGFuZCBzdG9yZWQgaW4gdGhl CisgICAgICAgICAgZ2l2ZW4gdmFyaWFibGUgc28geW91IGNhbiByZWZlciB0byB0aGUgb3BlbiBm aWxlIGluIHN1YnNlcXVlbnQKKyAgICAgICAgICBpL28gY29tbWFuZHMuIElmIHRoZSBmaWxlIGNh biBub3QgYmUgb3BlbmVkLCB0aGUgRklMRSBPUEVOCisgICAgICAgICAgY29tbWFuZCBmYWlscy4g U3lub255bTogRk9QRU4uCisKKyAgIFRoZSBGSUxFIE9QRU4gc3dpdGNoZXMgYXJlOgorCisgICAv UkVBRAorICAgICAgICAgIE9wZW4gdGhlIGZpbGUgZm9yIHJlYWQgYWNjZXNzLiBJZiBubyBzd2l0 Y2hlcyBhcmUgZ2l2ZW4sIC9SRUFECisgICAgICAgICAgaXMgYXNzdW1lZC4gSWYgdGhlIGZpbGUg ZG9lcyBub3QgZXhpc3Qgb3IgY2FuJ3QgYmUgb3BlbmVkIGZvcgorICAgICAgICAgIHJlYWQgYWNj ZXNzLCB0aGUgRklMRSBPUEVOIGNvbW1hbmQgZmFpbHMuCisKKyAgIC9XUklURQorICAgICAgICAg IEFsbG93IHdyaXRpbmcuIElmIGEgZmlsZSBvZiB0aGUgc2FtZSBuYW1lIGFscmVhZHkgZXhpc3Rz LCBpdCBpcworICAgICAgICAgIG92ZXJ3cml0dGVuIHVubGVzcyAvUkVBRCBvciAvQVBQRU5EIGlz IGFsc28gaW5jbHVkZWQuIElmIGEgZmlsZQorICAgICAgICAgIG9mIHRoZSBnaXZlbiBuYW1lIGRv ZXMgbm90IGV4aXN0LCBpdCBpcyBjcmVhdGVkLgorCisgICAvQVBQRU5ECisgICAgICAgICAgRXF1 aXZhbGVudCB0byAvV1JJVEUsIGV4Y2VwdCB0aGF0IGlmIHRoZSBmaWxlIGV4aXN0cywgaXQgaXMg bm90CisgICAgICAgICAgZGVzdHJveWVkLiBUaGUgcmVhZC93cml0ZSBwb2ludGVyIGlzIHNldCB0 byB0aGUgZW5kIG9mIHRoZSBmaWxlLAorICAgICAgICAgIHNvIHVubGVzcyB5b3UgY2hhbmdlIGl0 IHdpdGggRklMRSBTRUVLIG9yIFJFV0lORCAoc2VlIGJlbG93KSwKKyAgICAgICAgICB0aGUgZmly c3QgRklMRSBXUklURSBjb21tYW5kIGFkZHMgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSwKKyAgICAg ICAgICBwcmVzZXJ2aW5nIHdoYXQgd2FzIHRoZXJlIGFscmVhZHkuIElmIC9XUklURSBpcyBhbHNv IGdpdmVuLCBpdAorICAgICAgICAgIGlzIGlnbm9yZWQuCisKKyAgIC9CSU5BUlkKKyAgICAgICAg ICBPcGVuIHRoZSBmaWxlIGluICJiaW5hcnkiIG1vZGUsIHJhdGhlciB0aGFuIHRleHQgbW9kZS4g VGhpcworICAgICAgICAgIHN3aXRjaCBpcyBtZWFuaW5nbGVzcyAoYnV0IHN0aWxsIGNhbiBiZSB1 c2VkKSBpbiBVTklYLiBJbiBWTVMsCisgICAgICAgICAgV2luZG93cywgYW5kIE9TLzIsIGl0IGlu aGliaXRzIGVuZC1vZi1saW5lIHByb2Nlc3NpbmcgYW5kCisgICAgICAgICAgY29udmVyc2lvbiwg YW5kIHNvIHNob3VsZCBiZSB1c2VkIGZvciBiaW5hcnkgZmlsZXMgYW5kL29yIGZpbGVzCisgICAg ICAgICAgdGhhdCBhcmUgdG8gYmUgYWNjZXNzZWQgaW4gcmVjb3JkIG9yIGNoYXJhY3RlciBtb2Rl IHJhdGhlciB0aGFuCisgICAgICAgICAgbGluZSBieSBsaW5lLgorCisgICBUaGUgdmFyaWFibGUg Zm9yIHRoZSBjaGFubmVsIG51bWJlciBjYW4gYmUgYW55IGtpbmQgb2YgdmFyaWFibGU6IHRoZQor ICAgXCV4IGtpbmQsIGEgbWFjcm8gbmFtZSwgb3IgYW4gYXJyYXkgZWxlbWVudC4gQnV0IGl0IG11 c3QgYmUgYSB2YXJpYWJsZSwKKyAgIG5vdCBhIG51bWJlciAtLSBDLUtlcm1pdCBhc3NpZ25zIHRo ZSBjaGFubmVsIG51bWJlcjsgeW91IGNhbid0IHRlbGwgaXQKKyAgIHdoYXQgbnVtYmVyIHRvIHVz ZS4KKworICAgRXhhbXBsZToKKworICBGSUxFIE9QRU4gXCVjIG9vZmEudHh0ICAgICAgICAgICAg ICAgICAgOyBPcGVuIG9vZmEudHh0IGZvciByZWFkaW5nLgorICBJRiBGQUlMIGV4aXQgMSBDYW4n dCBvcGVuIG9vZmEudHh0ICAgICAgOyBBbHdheXMgY2hlY2sgdG8gc2VlIGlmIGl0IHdvcmtlZC4K KyAgRUNITyBvb2ZhLnR4dDogY2hhbm5lbCA9IFwlYworCisgICBJZiB0aGUgZmlsZSBvb2ZhLnR4 dCBpcyBvcGVuZWQgc3VjY2Vzc2Z1bGx5LCBhIGNoYW5uZWwgbnVtYmVyIGlzCisgICBhc3NpZ25l ZCB0byB0aGUgdmFyaWFibGUgXCVjLiBIZXJlJ3MgYW5vdGhlciBleGFtcGxlIHVzaW5nIGEgbWFj cm8gbmFtZQorICAgZm9yIHRoZSBjaGFubmVsIG51bWJlcjoKKworICBGSUxFIE9QRU4gY2hhbm5l bCBvb2ZhLnR4dCAgICAgICAgICAgICAgOyBPcGVuIG9vZmEudHh0IGZvciByZWFkaW5nLgorICBJ RiBTVUNDRVNTIEVDSE8gb29mYS50eHQ6IGNoYW5uZWwgPSBcbShjaGFubmVsKQorCisgICBTd2l0 Y2hlcyBjYW4gYmUgY29tYmluZWQgd2hlbiBpdCBtYWtlcyBzZW5zZSBhbmQgdGhlIHVuZGVybHlp bmcKKyAgIG9wZXJhdGluZyBzeXN0ZW0gYWxsb3dzIGl0LiBGb3IgZXhhbXBsZSwgdG8gb3BlbiBh IGZpbGUgaW4gYmluYXJ5IG1vZGUKKyAgIGZvciByZWFkaW5nIGFuZCB3cml0aW5nIChzb21ldGlt ZXMgY2FsbGVkICJ1cGRhdGUiKToKKworICBGSUxFIE9QRU4gL1JFQUQgL1dSSVRFIC9CSU5BUlkg XCVjIGJ1ZGdldC5kYgorCisgICBTb21lIGNvbWJpbmF0aW9ucyBtaWdodCBiZSBhbGxvd2VkLCBv dGhlcnMgbm90LiBGb3IgZXhhbXBsZSAvUkVBRAorICAgL0FQUEVORCB3aWxsIHVzdWFsbHkgbm90 IGJlIGFsbG93ZWQuIC9XUklURSAvQVBQRU5EIGlzIHRyZWF0ZWQgYXMKKyAgIC9BUFBFTkQuCisK KyAgIEEgbWFqb3IgYWR2YW50YWdlIG9mIHRoZSBuZXcgc3lzdGVtIG92ZXIgdGhlIG9sZGVyIG9u ZSBpcyB0aGF0IHlvdSBjYW4KKyAgIGhhdmUgbXVsdGlwbGUgZmlsZXMgb3BlbiBhdCBvbmNlLiBT dXBwb3NlLCBmb3IgZXhhbXBsZSwgdGhhdCB5b3Ugd2FudAorICAgdG8gb3BlbiBhbGwgdGhlIGZp bGVzIGluIGEgY2VydGFpbiBkaXJlY3RvcnkgYXQgb25jZToKKworICAuXCVuIDo9IFxmZmlsZXMo L3Vzci9vbGdhKiwmZikgICAgICAgICAgOyBHZXQgZmlsZSBsaXN0IGludG8gYXJyYXkuCisgIGlm ICggPiBcJW4gXHYoZl9tYXgpICkgeyAgICAgICAgICAgICAgICA7IE1ha2Ugc3VyZSB0aGVyZSBh cmVuJ3QgdG9vIG1hbnkuCisgICAgICBleGl0IDEge1x2KGRpcik6IFwlbiA9IFRvbyBtYW55IGZp bGVzfQorICB9CisgIGRlY2xhcmUgXCZjW1wlbl0gICAgICAgICAgICAgICAgICAgICAgICA7IE1h a2UgYXJyYXkgZm9yIGNoYW5uZWwgbnVtYmVycy4KKyAgZm9yIFwlaSAxIFwlbiAxIHsgICAgICAg ICAgICAgICAgICAgICAgIDsgTG9vcCB0byBvcGVuIGV2ZXJ5IGZpbGUuLi4KKyAgICAgIGZpbGUg b3BlbiBcJmNbXCVpXSBcJmZbXCVpXSAgICAgICAgIDsgVHJ5IHRvIG9wZW4gdGhpcyBvbmUKKyAg ICAgIGlmIGZhaWwgZXhpdCAxIE9wZW4gZXJyb3I6IFwmZltcJWldIDsgQ2hlY2sgZm9yIGZhaWx1 cmUKKyAgfQorCisgICBJZiB0aGlzIGxvb3AgY29tcGxldGVzIHN1Y2Nlc3NmdWxseSwgdGhlIFwm Y1tdIGFycmF5IHdpbGwgY29udGFpbiBcJW4KKyAgIGNoYW5uZWwgbnVtYmVycyBvZiBvcGVuIGZp bGVzIGluIGVsZW1lbnRzIDEgdGhyb3VnaCBcJW4uCisKKyAgIEFueSBmaWxlIHRoYXQgeW91IG9w ZW4gd2l0aCBGSUxFIE9QRU4gc3RheXMgb3BlbiB1bnRpbCBLZXJtaXQgZXhpdHMsIG9yCisgICB5 b3UgY2xvc2UgaXQgZXhwbGljaXRseS4gVGhlIGNvbW1hbmQgdG8gY2xvc2UgYSBmaWxlIGlzOgor CisgICBGSUxFIENMT1NFIHsgQUxMLCBjaGFubmVsIH0KKyAgICAgICAgICBJZiBhIGNoYW5uZWwg bnVtYmVyIGlzIGdpdmVuIGFuZCB0aGUgY2hhbm5lbCByZWZlcnMgdG8gYW4gb3BlbgorICAgICAg ICAgIGZpbGUsIHRoZSBmaWxlIGlzIGNsb3NlZCBhbmQgdGhlIGNoYW5uZWwgaXMgZnJlZWQgZm9y IHJldXNlOyBpZgorICAgICAgICAgIHRoZSBjaGFubmVsIGRvZXMgbm90IHJlZmVyIHRvIGFuIG9w ZW4gZmlsZSwgYW4gZXJyb3IgbWVzc2FnZSBpcworICAgICAgICAgIHByaW50ZWQgYW5kIHRoZSBj b21tYW5kIGZhaWxzLiBJZiBBTEwgaXMgc3BlY2lmaWVkIGluc3RlYWQgb2YgYQorICAgICAgICAg IHNwZWNpZmljIGNoYW5uZWwsIGFsbCBmaWxlcyBvcGVuZWQgd2l0aCBGSUxFIE9QRU4gYXJlIGNs b3NlZCBhbmQKKyAgICAgICAgICBpZiBhbGwgb3BlbiBmaWxlcyB3ZXJlIGNsb3NlZCBzdWNjZXNz ZnVsbHkgKGV2ZW4gaWYgbm8gZmlsZXMKKyAgICAgICAgICB3ZXJlIG9wZW4pLCB0aGUgY29tbWFu ZCBzdWNjZWVkczsgaWYgYW55IG9wZW4gZmlsZSBjb3VsZCBub3QgYmUKKyAgICAgICAgICBjbG9z ZWQsIHRoZSBjb21tYW5kIGZhaWxzOyBob3dldmVyLCBhbGwgb3BlbiBmaWxlcyB0aGF0IGNvdWxk IGJlCisgICAgICAgICAgY2xvc2VkIGFyZSBzdGlsbCBjbG9zZWQuIFN5bm9ueW06IEZDTE9TRS4K KworICAgRklMRSBDTE9TRSBtaWdodCBmYWlsIGJlY2F1c2UsIGZvciBleGFtcGxlLCB0aGUgZGlz ayBmaWxsZWQgdXAgb3IgYQorICAgcXVvdGEgd2FzIGV4Y2VlZGVkLiBFeGFtcGxlOgorCisgIGZv cGVuIC93cml0ZSBcJWMgbmV3LnR4dCAgICAgICAgICAgICAgICA7IE9wZW4gbmV3LnR4dCBmb3Ig d3JpdGluZy4KKyAgaWYgZmFpbCBleGl0IDEgICAgICAgICAgICAgICAgICAgICAgICAgIDsgQ2hl Y2sgZm9yIGVycm9yLgorICBmY2xvc2UgXCVjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OyBDbG9zZSB0aGUgZmlsZSB3ZSBqdXN0IG9wZW5lZC4KKworICAgVGhpcyBjcmVhdGVzIGEgMC1s ZW5ndGggZmlsZSBjYWxsZWQgbmV3LnR4dC4KKworICAgTm90ZSB0aGF0IEZJTEUgT1BFTiAvV1JJ VEUgKHdpdGhvdXQgL1JFQUQgb3IgL0FQUEVORCkgYWx3YXlzIGNyZWF0ZXMgYQorICAgbmV3IGZp bGUsIGFuZCB0aGVyZWZvcmUgZGVzdHJveXMgYW55IGZpbGUgd2l0aCB0aGUgc2FtZSBuYW1lIHRo YXQgbWlnaHQKKyAgIGFscmVhZHkgZXhpc3QgKGFzc3VtaW5nIHlvdSBoYXZlIHBlcm1pc3Npb24g dG8gZGVsZXRlIGl0KS4gVG8gYXZvaWQKKyAgIG92ZXJ3cml0aW5nIGV4aXN0aW5nIGZpbGVzLCBz aW1wbHkgY2hlY2sgZmlyc3Q6CisKKyAgaWYgZXhpc3QgbmV3LnR4dCBleGl0IDEge0ZhdGFsIC0g bmV3LnR4dCBhbHJlYWR5IGV4aXN0c30KKyAgZm9wZW4gL3dyaXRlIFwlYyBuZXcudHh0CisgIGlm IGZhaWwgLi4uCisKKyAgIFRoZSBuZXh0IHR3byBjb21tYW5kcyBnaXZlIGluZm9ybWF0aW9uIGFi b3V0IG9wZW4gZmlsZXM6CisKKyAgIEZJTEUgU1RBVFVTIGNoYW5uZWwKKyAgICAgICAgICBUZWxs cyB0aGUgbmFtZSBvZiB0aGUgZmlsZSwgaWYgYW55LCBvcGVuIG9uIHRoZSBnaXZlbiBjaGFubmVs CisgICAgICAgICAgYW5kIHRoZSBzd2l0Y2hlcyBpdCB3YXMgb3BlbmVkIHdpdGguIFRoZSByZWFk L3dyaXRlIHBvaW50ZXIgaXMKKyAgICAgICAgICBhbHNvIHNob3duOyB0aGlzIGlzIHdoZXJlIHRo ZSBuZXh0IHJlYWQgb3Igd3JpdGUgd2lsbCBvY2N1cjsKKyAgICAgICAgICAiW0VPRl0iIGlzIHNo b3duIGlmIHRoZSBjdXJyZW50IHBvc2l0aW9uIGluIHRoZSBvcGVuIGZpbGUgaXMgdGhlCisgICAg ICAgICAgZW5kIC0tIGkuZS4gdGhlIG5leHQgcmVhZCB3aWxsIGZhaWwgaWYgdGhlIGZpbGUgd2Fz IG9wZW5lZCBpbgorICAgICAgICAgIC9SRUFEIG1vZGU7IHRoZSBuZXh0IHdyaXRlIHdpbGwgYWRk IG1hdGVyaWFsIHRvIHRoZSBlbmQuIFRoZQorICAgICAgICAgIGN1cnJlbnQgbGluZSBudW1iZXIg KDAtYmFzZWQpIGlzIGFsc28gc2hvd24gaWYga25vd24uIFRoZSBGSUxFCisgICAgICAgICAgU1RB VFVTIGNvbW1hbmQgc3VjY2VlZHMgaWYgdGhlIGNoYW5uZWwgaXMgb3BlbiwgYW5kIGZhaWxzIGlm CisgICAgICAgICAgdGhlcmUgaXMgbm8gb3BlbiBmaWxlIG9uIHRoZSBnaXZlbiBjaGFubmVsLCBv ciBpZiB0aGUgY2hhbm5lbAorICAgICAgICAgIG51bWJlciBpcyBpbnZhbGlkIG9yIG91dCBvZiBy YW5nZS4gU3lub255bTogRlNUQVRVUy4KKworICAgRklMRSBMSVNUCisgICAgICAgICAgTGlzdHMg dGhlIGNoYW5uZWwgbnVtYmVyIGFuZCBuYW1lIG9mIGVhY2ggb3BlbiBmaWxlLCBhbG9uZyB3aXRo CisgICAgICAgICAgaXRzIE9QRU4gbW9kZXMgKFIsIFcsIEEsIEIsIFJXLCBldGMpIGFuZCBpdHMg Y3VycmVudCByZWFkL3dyaXRlCisgICAgICAgICAgcG9pbnRlciBvciAiW0VPRl0iIGlmIGl0IGlz IGF0IHRoZSBlbmQuIEFsc28gdGVsbHMgdGhlIG51bWJlciBvZgorICAgICAgICAgIGZpbGVzIGN1 cnJlbnRseSBvcGVuZWQgd2l0aCBGSUxFIE9QRU4sIHBsdXMgdGhlIG1heGltdW0gbnVtYmVyCisg ICAgICAgICAgb2Ygb3BlbiBmaWxlcyBhbGxvd2VkIGJ5IHRoZSBzeXN0ZW0gYW5kIHRoZSBtYXhp bXVtIG51bWJlcgorICAgICAgICAgIGFsbG93ZWQgZm9yIEZJTEUgT1BFTi4gU3lub255bTogRkxJ U1QuCisKKyAgIE5leHQgY29tZSB0aGUgY29tbWFuZHMgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcg ZmlsZXM6CisKKyAgIEZJTEUgUkVBRCBbIHN3aXRjaGVzIF0gY2hhbm5lbCBbIHZhcmlhYmxlIF0K KyAgICAgICAgICBSZWFkcyBkYXRhIGZyb20gdGhlIGZpbGUgb24gdGhlIGdpdmVuIGNoYW5uZWwg bnVtYmVyIGludG8gdGhlCisgICAgICAgICAgdmFyaWFibGUsIGlmIG9uZSB3YXMgZ2l2ZW47IGlm IG5vIHZhcmlhYmxlIHdhcyBnaXZlbiwgdGhlIHJlc3VsdAorICAgICAgICAgIGlzIHByaW50ZWQg b24gdGhlIHNjcmVlbi4gSU1QT1JUQU5UOiBUaGUgdmFyaWFibGUgc2hvdWxkCisgICAgICAgICAg bm9ybWFsbHkgYmUgYSBtYWNybyBuYW1lIHJhdGhlciB0aGFuIGEgXCV4IG9yIFwmeFtdIHZhcmlh YmxlIGlmCisgICAgICAgICAgeW91IHdhbnQgYmFja3NsYXNoIGNoYXJhY3RlcnMgaW4gdGhlIGZp bGUgdG8gYmUgdGFrZW4gbGl0ZXJhbGx5CisgICAgICAgICAgKHNlZSBwcC40MDgtNDEyIG9mIFsz ODZdVXNpbmcgQy1LZXJtaXQgZm9yIGFuIGV4cGxhbmF0aW9uOyB5b3UKKyAgICAgICAgICBjYW4g YWxzbyByZWFkIGludG8gYSBcJXggb3IgXCZ4W10gdmFyaWFibGUsIGJ1dCB0aGVuIHlvdSBtdXN0 CisgICAgICAgICAgcmVtZW1iZXIgdG8gcHJvdGVjdCBmdXR1cmUgcmVmZXJlbmNlcyB0byBieSBc ZmNvbnRlbnRzKCkgaWYgeW91CisgICAgICAgICAgZG9uJ3Qgd2FudCBDLUtlcm1pdCB0byBwcm9j ZXNzIGFueSBiYWNrc2xhc2hlcyBpdCBtaWdodAorICAgICAgICAgIGNvbnRhaW4pLiBUaGUgZGVz aXJlZCBhbW91bnQgb2YgZGF0YSAoYWNjb3JkaW5nIHRvIHRoZSBzd2l0Y2hlcykKKyAgICAgICAg ICBpcyByZWFkIGZyb20gdGhlIGZpbGUgYXQgdGhlIGN1cnJlbnQgcmVhZC93cml0ZSBwb2ludGVy LCBhbmQKKyAgICAgICAgICB1cG9uIGNvbXBsZXRpb24gdGhlIHJlYWQvd3JpdGUgcG9zaXRpb24g aXMgdXBkYXRlZCB0byBmaXJzdCBieXRlCisgICAgICAgICAgYWZ0ZXIgdGhlIGRhdGEgdGhhdCB3 YXMgcmVhZCwgbm8gbWF0dGVyIHdoYXQgc3dpdGNoZXMgd2VyZQorICAgICAgICAgIGdpdmVuLiBT eW5vbnltOiBGUkVBRC4KKworICAgRklMRSBXUklURSBbIHN3aXRjaGVzIF0gY2hhbm5lbCB0ZXh0 CisgICAgICAgICAgV3JpdGVzIHRoZSBnaXZlbiB0ZXh0IHRvIHRoZSBmaWxlIG9uIHRoZSBnaXZl biBjaGFubmVsIG51bWJlci4KKyAgICAgICAgICBUaGUgdGV4dCwgb2YgY291cnNlLCBjYW4gYmUg bGl0ZXJhbCB0ZXh0IG9yIGEgdmFyaWFibGUsIG9yIGFueQorICAgICAgICAgIGNvbWJpbmF0aW9u LiBJZiB0aGUgdGV4dCBtaWdodCBjb250YWluIGxlYWRpbmcgb3IgdHJhaWxpbmcKKyAgICAgICAg ICBzcGFjZXMsIGl0IG11c3QgYmUgZW5jbG9zZWQgaW4gYnJhY2VzIGlmIHlvdSB3YW50IHRvIHBy ZXNlcnZlCisgICAgICAgICAgdGhlbS4gU3lub255bTogRldSSVRFLgorCisgICBCZWZvcmUgcHJv Y2VlZGluZywgYSBjYXV0aW9uIGFib3V0IHRoZSBOVUwgY2hhcmFjdGVyLiBDLUtlcm1pdCBpcyBz bworICAgbmFtZWQgYmVjYXVzZSBpdCBpcyBhIEtlcm1pdCBwcm9ncmFtIHdyaXR0ZW4gaW4gdGhl IEMgbGFuZ3VhZ2UuIEluIEMsCisgICBjaGFyYWN0ZXIgc3RyaW5ncyBhcmUgcmVwcmVzZW50ZWQg YXMgYSBzZXF1ZW5jZSBvZiBub24tTlVMIGJ5dGVzCisgICB0ZXJtaW5hdGVkIGJ5IGEgTlVMIGJ5 dGUgKGEgYnl0ZSBpbiB3aGljaCBhbGwgYml0cyBhcmUgMCkuIFRodXMgYSBDCisgICBzdHJpbmcg Y2FuIG5vdCBjb250YWluIE5VTCBieXRlczsgaXQgYWx3YXlzIGVuZHMgd2l0aCB0aGUgZmlyc3Qg TlVMCisgICBieXRlLiBDLUtlcm1pdCB2YXJpYWJsZXMgYXJlIGltcGxlbWVudGVkIGFzIEMgc3Ry aW5ncyBhbmQgdGhlcmVmb3JlCisgICBjYW4ndCBjb250YWluIE5VTCBieXRlcyBlaXRoZXIsIHNv IHRoZSBGSUxFIFJFQUQgYW5kIEZJTEUgV1JJVEUKKyAgIGNvbW1hbmRzIGRvIG5vdCBoYW5kbGUg ZmlsZXMgb3Igc3RyaW5ncyB0aGF0IGNvbnRhaW4gTlVMIGJ5dGVzLCBleGNlcHQKKyAgIHdoZW4g dGhlIC9DSEFSQUNURVIgc3dpdGNoIGlzIGluY2x1ZGVkIHdpdGggdGhlIEZJTEUgUkVBRCBvciBX UklURQorICAgY29tbWFuZCwgb3Igd2hlbiAvTFBBRDowIG9yIC9SUEFEOjAgaXMgZ2l2ZW4gd2l0 aCB0aGUgRklMRSBXUklURQorICAgY29tbWFuZDsgdGhlc2Ugc3dpdGNoZXMgYXJlIGV4cGxhaW5l ZCBiZWxvdy4KKworICAgQWxzbyBub3RlIHRoYXQgS2VybWl0IGNhbiBub3QgYmUgdXNlZCByZWFk IG9yIHdyaXRlIGJpbmFyeSBudW1iZXJzIGluCisgICB0aGUgbWFjaGluZSdzIGludGVybmFsIGZv cm1hdCAoaW50ZWdlciBvciBmbG9hdGluZy1wb2ludCk7IGluIGdlbmVyYWwsCisgICBudW1iZXJz IGNhbiBiZSBwcm9jZXNzZWQgb25seSB3aGVuIHJlcHJlc2VudGVkIGFzIG51bWVyaWMgb3IKKyAg IGZsb2F0aW5nLXBvaW50IHN0cmluZ3MuCisKKyAgIEZJTEUgUkVBRCBzd2l0Y2hlcyBhcmU6CisK KyAgIC9MSU5FCisgICAgICAgICAgU3BlY2lmaWVzIHRoYXQgYSBsaW5lIG9mIHRleHQgaXMgdG8g YmUgcmVhZC4gQSBsaW5lIGlzIGRlZmluZWQKKyAgICAgICAgICBhY2NvcmRpbmcgdG8gdGhlIHVu ZGVybHlpbmcgb3BlcmF0aW5nIHN5c3RlbSdzIHRleHQtZmlsZSBmb3JtYXQuCisgICAgICAgICAg Rm9yIGV4YW1wbGUsIGluIFVOSVggYSBsaW5lIGlzIGEgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycyB1 cCB0bworICAgICAgICAgIGFuZCBpbmNsdWRpbmcgYSBsaW5lZmVlZCwgb3IgdGhlIGVuZCBvZiB0 aGUgZmlsZSwgd2hpY2ggZXZlcgorICAgICAgICAgIGNvbWVzIGZpcnN0LiBUaGUgbGluZSB0ZXJt aW5hdG9yIChpZiBhbnkpIGlzIHJlbW92ZWQgYmVmb3JlCisgICAgICAgICAgYXNzaWduaW5nIHRo ZSB0ZXh0IHRvIHRoZSB2YXJpYWJsZS4gSWYgbm8gc3dpdGNoZXMgYXJlIGluY2x1ZGVkCisgICAg ICAgICAgd2l0aCB0aGUgRklMRSBSRUFEIGNvbW1hbmQsIC9MSU5FIGlzIGFzc3VtZWQuIE5vcm1h bGx5IHRoaXMKKyAgICAgICAgICBzd2l0Y2ggc2hvdWxkIG5vdCBiZSB1c2VkIHdpdGggZmlsZXMg b3BlbmVkIGluIC9CSU5BUlkgbW9kZSAoYnV0CisgICAgICAgICAgbm90aGluZyBwcmV2ZW50cyBp dCBlaXRoZXIpLgorCisgICAvU0laRTpudW1iZXIKKyAgICAgICAgICBTcGVjaWZpZXMgdGhhdCB0 aGUgZ2l2ZW4gbnVtYmVyIG9mIGJ5dGVzIChjaGFyYWN0ZXJzKSBpcyB0byBiZQorICAgICAgICAg IHJlYWQuIFRoZSBhY3R1YWwgbnVtYmVyIG9mIGJ5dGVzIHJldHVybmVkIHdpbGwgYmUgbGVzcyBp ZiB0aGUKKyAgICAgICAgICBlbmQgb2YgZmlsZSBpcyByZWFjaGVkIChvciBhIE5VTCBieXRlIGlz IGVuY291bnRlcmVkKS4gRm9yCisgICAgICAgICAgZXhhbXBsZSwgaWYgYSBmaWxlIGlzIDUxNCBi eXRlcyBsb25nLCBGSUxFIFJFQUQgL1NJWkU6NTEyCisgICAgICAgICAgcmV0dXJucyA1MTIgYnl0 ZXMgdGhlIGZpcnN0IHRpbWUgYW5kIDIgYnl0ZXMgdGhlIHNlY29uZCB0aW1lLgorICAgICAgICAg IEZJTEUgUkVBRCAvU0laRSBwcm92aWRlcyBhIGtpbmQgb2YgInJlY29yZCBpL28iIGZvciBmaWxl cyB0aGF0CisgICAgICAgICAgZG8gbm90IG5lY2Vzc2FyaWx5IGNvbnRhaW4gbGluZXMuIFRoZSBy ZXN1bHRpbmcgYmxvY2sgb2YKKyAgICAgICAgICBjaGFyYWN0ZXJzIGlzIGFzc2lnbmVkIHRvIHRo ZSB2YXJpYWJsZSB3aXRob3V0IGFueSBlZGl0aW5nLgorICAgICAgICAgIFN5bm9ueW06IC9CTE9D Sy4KKworICAgL0NIQVJBQ1RFUgorICAgICAgICAgIEVxdWl2YWxlbnQgdG8gL1NJWkU6MS4gSWYg RklMRSBSRUFEIC9DSEFSIHN1Y2NlZWRzIGJ1dCB0aGUKKyAgICAgICAgICB2YXJpYWJsZSBpcyBl bXB0eSwgdGhpcyBpbmRpY2F0ZXMgYSBOVUwgYnl0ZSB3YXMgcmVhZC4gU3lub255bToKKyAgICAg ICAgICBCWVRFLgorCisgICBGSUxFIFdSSVRFIHN3aXRjaGVzIGFyZToKKworICAgL0xJTkUKKyAg ICAgICAgICBTcGVjaWZpZXMgdGhhdCBhbiBhcHByb3ByaWF0ZSBsaW5lIHRlcm1pbmF0b3IgaXMg dG8gYmUgYWRkZWQgdG8KKyAgICAgICAgICB0aGUgZW5kIG9mIHRoZSB0ZXh0LiBJZiBubyBzd2l0 Y2hlcyBhcmUgaW5jbHVkZWQsIC9MSU5FIGlzCisgICAgICAgICAgYXNzdW1lZC4KKworICAgL1NJ WkU6bnVtYmVyCisgICAgICAgICAgU3BlY2lmaWVzIHRoYXQgdGhlIGdpdmVuIG51bWJlciBvZiBi eXRlcyAoY2hhcmFjdGVycykgaXMgdG8gYmUKKyAgICAgICAgICB3cml0dGVuLiBJZiB0aGUgZ2l2 ZW4gdGV4dCBpcyBsb25nZXIgdGhhbiB0aGUgcmVxdWVzdGVkIHNpemUsIGl0CisgICAgICAgICAg aXMgdHJ1bmNhdGVkOyBpZiBpcyBzaG9ydGVyLCBpdCBpcyBwYWRkZWQgYWNjb3JkaW5nIC9MUEFE IGFuZAorICAgICAgICAgIC9SUEFEIHN3aXRjaGVzLiBTeW5vbnltOiAvQkxPQ0suCisKKyAgIC9M UEFEWzp2YWx1ZV0KKyAgICAgICAgICBJZiAvU0laRSB3YXMgZ2l2ZW4sIGJ1dCB0aGUgdGV4dCBp cyBzaG9ydGVyIHRoYW4gdGhlIHJlcXVlc3RlZAorICAgICAgICAgIHNpemUsIHRoZSB0ZXh0IGlz IHBhZGRlZCBvbiB0aGUgbGVmdCB3aXRoIHN1ZmZpY2llbnQgY29waWVzIG9mCisgICAgICAgICAg dGhlIGNoYXJhY3RlciB3aG9zZSBBU0NJSSB2YWx1ZSBpcyBnaXZlbiB0byB3cml0ZSB0aGUgZ2l2 ZW4KKyAgICAgICAgICBsZW5ndGguIElmIG5vIHZhbHVlIGlzIHNwZWNpZmllZCwgMzIgKHRoZSBj b2RlIGZvciBTcGFjZSkgaXMKKyAgICAgICAgICB1c2VkLiBUaGUgdmFsdWUgY2FuIGFsc28gYmUg MCB0byB3cml0ZSB0aGUgaW5kaWNhdGVkIG51bWJlciBvZgorICAgICAgICAgIE5VTCBieXRlcy4g SWYgL1NJWkUgd2FzIG5vdCBnaXZlbiwgdGhpcyBzd2l0Y2ggaXMgaWdub3JlZC4KKworICAgL1JQ QURbOnZhbHVlXQorICAgICAgICAgIExpa2UgTFBBRCwgYnV0IHBhZHMgb24gdGhlIHJpZ2h0Lgor CisgICAvQ0hBUkFDVEVSCisgICAgICAgICAgU3BlY2lmaWVzIHRoYXQgb25lIGNoYXJhY3RlciBz aG91bGQgYmUgd3JpdHRlbi4gSWYgdGhlIHRleHQgaXMKKyAgICAgICAgICBlbXB0eSBvciBub3Qg Z2l2ZW4sIGEgTlVMIGNoYXJhY3RlciBpcyB3cml0dGVuOyBvdGhlcndpc2UgdGhlCisgICAgICAg ICAgZmlyc3QgY2hhcmFjdGVyIG9mIHRleHQgaXMgZ2l2ZW4uIFN5bm9ueW06IC9CWVRFLgorCisg ICAvU1RSSU5HCisgICAgICAgICAgU3BlY2lmaWVzIHRoYXQgdGhlIHRleHQgaXMgdG8gYmUgd3Jp dHRlbiBhcy1pcywgd2l0aCBubworICAgICAgICAgIHRlcm1pbmF0b3IgYWRkZWQuCisKKyAgIEhl cmUncyBhbiBleGFtcGxlIGluIHdoaWNoIHdlIGNvcHkgYSB0ZXh0IGZpbGUgbGluZSBieSBsaW5l OgorCisgIGZpbGUgb3BlbiAvcmVhZCBcJWMgb29mYS50eHQgICAgICAgICAgICA7IE9wZW4gaW5w dXQgZmlsZQorICBpZiBmYWlsIGV4aXQgMSBDYW4ndCBvcGVuIGlucHV0IGZpbGUgICAgOyBDaGVj ayB0aGF0IGl0J3Mgb3BlbgorICBmaWxlIG9wZW4gL3dyaXRlIFwlZCBuZXcudHh0ICAgICAgICAg ICAgOyBPcGVuIG91dHB1dCBmaWxlCisgIGlmIGZhaWwgZXhpdCAxIENhbid0IG9wZW4gb3V0cHV0 IGZpbGUgICA7IENoZWNrCisgIHdoaWxlIHRydWUgeyAgICAgICAgICAgICAgICAgICAgICAgICAg ICA7IExvb3AgdG8gY29weSBsaW5lcworICAgICAgZmlsZSByZWFkIC9saW5lIFwlYyBsaW5lICAg ICAgICAgICAgOyBSZWFkIGEgbGluZQorICAgICAgaWYgZmFpbCBicmVhayAgICAgICAgICAgICAg ICAgICAgICAgOyBBc3N1bWUgZmFpbHVyZSA9IGVuZCBvZiBmaWxlCisgICAgICBmaWxlIHdyaXRl IC9saW5lIFwlZCB7XG0obGluZSl9ICAgICA7IFdyaXRlIHRoZSBsaW5lIHRvIG91dHB1dCBmaWxl CisgICAgICBpZiBmYWlsIGV4aXQgMSBXcml0ZSBmYWlsdXJlICAgICAgICA7IEZhaWx1cmUgaGVy ZSBpcyBmYXRhbAorICB9CisgIGZpbGUgY2xvc2UgXCVjICAgICAgICAgICAgICAgICAgICAgICAg ICA7IENsb3NlIHRoZSB0d28gZmlsZXMKKyAgZmlsZSBjbG9zZSBcJWQKKworICAgTm90ZSB0aGF0 IHNpbmNlIC9MSU5FIGlzIHRoZSBkZWZhdWx0IGZvciBib3RoIEZJTEUgUkVBRCBhbmQgRklMRSBX UklURSwKKyAgIGl0IGNhbiBiZSBvbWl0dGVkIGFzIGluIHRoZSBmb2xsb3dpbmcgZXhhbXBsZSwg d2hlcmUgd2UgYWxzbyB1c2UgdGhlCisgICBzaG9ydCBuYW1lcyBmb3IgdGhlIEZJTEUgY29tbWFu ZHMuCisKKyAgZm9wZW4gL3JlYWQgXCVjIG9vZmEudHh0ICAgICAgICAgICAgICAgIDsgT3BlbiBp bnB1dCBmaWxlCisgIGlmIGZhaWwgZXhpdCAxIENhbid0IG9wZW4gaW5wdXQgZmlsZSAgICA7IENo ZWNrIHRoYXQgaXQncyBvcGVuCisgIGZvcGVuIC93cml0ZSBcJWQgbmV3LnR4dCAgICAgICAgICAg ICAgICA7IE9wZW4gb3V0cHV0IGZpbGUKKyAgaWYgZmFpbCBleGl0IDEgQ2FuJ3Qgb3BlbiBvdXRw dXQgZmlsZSAgIDsgQ2hlY2sKKyAgd2hpbGUgdHJ1ZSB7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDsgTG9vcCB0byBjb3B5IGxpbmVzCisgICAgICBmcmVhZCBcJWMgbGluZSAgICAgICAgICAg ICAgICAgICAgICA7IFJlYWQgYSBsaW5lCisgICAgICBpZiBmYWlsIGJyZWFrICAgICAgICAgICAg ICAgICAgICAgICA7IEFzc3VtZSBmYWlsdXJlID0gZW5kIG9mIGZpbGUKKyAgICAgIGZ3cml0ZSBc JWQge1xtKGxpbmUpfSAgICAgICAgICAgICAgIDsgV3JpdGUgdGhlIGxpbmUgdG8gb3V0cHV0IGZp bGUKKyAgICAgIGlmIGZhaWwgZXhpdCAxIFdyaXRlIGZhaWx1cmUgICAgICAgIDsgRmFpbHVyZSBo ZXJlIGlzIGZhdGFsCisgIH0KKyAgZmNsb3NlIFwlYyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDsgQ2xvc2UgdGhlIHR3byBmaWxlcworICBmY2xvc2UgXCVkCisKKyAgIEhlcmUncyB0aGUg c2FtZSBleGFtcGxlIHVzaW5nICJyZWNvcmQgaS9vIiAodGhlIG9wZW4gYW5kIGNsb3NlCisgICBz ZXF1ZW5jZXMgYXJlIGFyZSBvbWl0dGVkIHNpbmNlIHRoZXkgYXJlIHRoZSBzYW1lIGFzIGFib3Zl KS4gVGhlIHJlc3VsdAorICAgaXMgdGhlIHNhbWUsIGJ1dCBleGVjdXRpb24gaXMgbXVjaCBmYXN0 ZXI6CisKKyAgd2hpbGUgdHJ1ZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgTG9vcCB0 byBjb3B5IGJsb2NrcworICAgICAgZnJlYWQgL3NpemU6NTEyIFwlYyBibG9jayAgICAgICAgICAg OyBSZWFkIGEgYmxvY2sgaW50byBcJWEKKyAgICAgIGlmIGZhaWwgYnJlYWsgICAgICAgICAgICAg ICAgICAgICAgIDsgQXNzdW1lIGZhaWx1cmUgPSBlbmQgb2YgZmlsZQorICAgICAgZndyaXRlIC9z dHJpbmcgXCVkIHtcbShibG9jayl9ICAgICAgOyBXcml0ZSB0aGUgYmxvY2sgdG8gb3V0cHV0IGZp bGUKKyAgICAgIGlmIGZhaWwgZXhpdCAxIFdyaXRlIGZhaWx1cmUgICAgICAgIDsgRmFpbHVyZSBo ZXJlIGlzIGZhdGFsCisgIH0KKworICAgQWx0aG91Z2ggcmVjb3JkIGkvbyBpcyBmYXN0ZXIsIGl0 IHNob3VsZCBub3QgYmUgdXNlZCBpbiBsaW5lLW9yaWVudGVkCisgICBhcHBsaWNhdGlvbnMsIHNp bmNlIGl0IHJldHVybnMgYXJiaXRyYXJ5IGNodW5rcyBvZiB0aGUgZmlsZSB0byB5b3VyCisgICBz Y3JpcHQsIHJhdGhlciB0aGFuIGxpbmVzLiBJbiB0aGlzIGV4YW1wbGUsIEZXUklURSAvU1RSSU5H IGlzIHVzZWQKKyAgIHJhdGhlciB0aGFuIEZXUklURSAvU0laRTo1MTIgdG8gYXZvaWQgdGhlIGxh c3Qgb3V0cHV0IGJsb2NrIGJlaW5nCisgICBwYWRkZWQgYmV5b25kIHRoZSBvcmlnaW5hbCBmaWxl J3MgbGVuZ3RoLgorCisgICBBIGZpbGUgY2FuIGFsc28gYmUgY29waWVkIGNoYXJhY3RlciBieSBj aGFyYWN0ZXIsIGJ1dCB0aGlzIGlzIG11Y2gKKyAgIHNsb3dlciB0aGFuIGxpbmUgaS9vIGFuZCBW RVJZIG11Y2ggc2xvd2VyIHRoYW4gYmxvY2sgaS9vOgorCisgIHdoaWxlIHRydWUgeyAgICAgICAg ICAgICAgICAgICAgICAgICAgICA7IExvb3AgdG8gY29weSBibG9ja3MKKyAgICAgIGZyZWFkIC9j aGFyIFwlYyBjICAgICAgICAgICAgICAgICAgIDsgUmVhZCBhIGNoYXJhY3RlciBpbnRvIGMKKyAg ICAgIGlmIGZhaWwgYnJlYWsgICAgICAgICAgICAgICAgICAgICAgIDsgQXNzdW1lIGZhaWx1cmUg PSBlbmQgb2YgZmlsZQorICAgICAgZndyaXRlIC9jaGFyIFwlZCB7XG0oYyl9ICAgICAgICAgICAg OyBXcml0ZSBjaGFyYWN0ZXIgdG8gb3V0cHV0IGZpbGUKKyAgICAgIGlmIGZhaWwgZXhpdCAxIFdy aXRlIGZhaWx1cmUgICAgICAgIDsgRmFpbHVyZSBpcyBmYXRhbAorICB9CisKKyAgIEFsdGhvdWdo IGNoYXJhY3RlciBpL28gaXMgc2xvdywgaXQgaXMgdGhlIG9ubHkgd2F5IHRvIHByb2Nlc3MgZmls ZXMKKyAgIHRoYXQgY29udGFpbiBOVUwgY2hhcmFjdGVycyAoaS5lLiBieXRlcyBjb21wb3NlZCBv ZiBvbmx5IHplcm8gYml0cykuIEluCisgICB0aGUgZXhhbXBsZSBhYm92ZSwgd2hlbiAiZnJlYWQg L2NoYXIgXCVjIGMiIHJldHVybnMgYSBOVUwsIHRoZSBjCisgICB2YXJpYWJsZSBpcyBlbXB0eS4g QnV0IHNpbmNlIHRoZSBGUkVBRCAvQ0hBUiBjb21tYW5kIGRpZCBub3QgZmFpbCwgd2UKKyAgIGtu b3cgdGhlIHJlc3VsdCB3YXMgcmVhbGx5IGEgTlVMLiBGV1JJVEUgL0NIQVIsIHdoZW4gZ2l2ZW4g YW4gZW1wdHkKKyAgIHZhcmlhYmxlIChvciBubyB2YXJpYWJsZSBhdCBhbGwpIHdyaXRlcyBhIE5V TC4gVGh1cyB0aGUgbG9vcCBhYm92ZSB3aWxsCisgICBjb3B5IGFueSBmaWxlIGF0IGFsbCAodmVy eSBzbG93bHkpLiBJbiBub24tY29weWluZyBhcHBsaWNhdGlvbnMsIE5VTHMKKyAgIGFyZSBkZXRl Y3RlZCBsaWtlIHRoaXM6CisKKyAgZnJlYWQgL2NoYXIgXCVjIGMKKyAgaWYgZmFpbCAoZG8gc29t ZXRoaW5nKQorICBpZiBub3QgZGVmIGMgKGEgTlVMIGJ5dGUgd2FzIHJlYWQpCisKKyAgIEZpbmFs bHkgc29tZSBhZHZhbmNlZCBmaWxlIG9wZXJhdGlvbnM6CisKKyAgIEZJTEUgRkxVU0ggY2hhbm5l bAorICAgICAgICAgIEZvciBvdXRwdXQgZmlsZXMgb25seTogY29tbWl0cyBhbGwgcHJldmlvdXMg d3JpdGVzIHRvIGRpc2ssIGluCisgICAgICAgICAgY2FzZSB0aGUgY29tcHV0ZXIgd2FzIGJ1ZmZl cmluZyB0aGVtLiBTeW5vbnltOiBGRkxVU0guCisKKyAgIEZJTEUgQ09VTlQgWyB7IC9CWVRFUywg L0xJTkVTLCAvTElTVCwgL05PTElTVCB9IF0gY2hhbm5lbAorICAgICAgICAgIEJ5IGRlZmF1bHQs IG9yIGlmIHRoZSAvQllURVMgc3dpdGNoIGlzIGdpdmVuLCBjb3VudHMgdGhlIGJ5dGVzCisgICAg ICAgICAgaW4gdGhlIGZpbGUsIGlmIGFueSwgb3BlbiBvbiB0aGUgZ2l2ZW4gY2hhbm5lbC4gSWYg dGhlIC9MSU5FUworICAgICAgICAgIHN3aXRjaCBpcyBnaXZlbiwgY291bnRzIGxpbmVzIGluIHRo ZSBmaWxlLiBJZiB0aGUgL0xJU1Qgc3dpdGNoCisgICAgICAgICAgaXMgZ2l2ZW4sIHRoZSByZXN1 bHQgaXMgcHJpbnRlZC4gSWYgdGhlIC9OT0xJU1Qgc3dpdGNoIGlzIGdpdmVuLAorICAgICAgICAg IHRoZSByZXN1bHQgaXMgbm90IHByaW50ZWQuIC9RVUlFVCBpcyBhIHN5bm9ueW0gZm9yIC9OT0xJ U1QuIElmCisgICAgICAgICAgbmVpdGhlciAvTElTVCBub3IgL05PTElTVCBpcyBnaXZlbiwgdGhl IHJlc3VsdCBpcyBwcmludGVkIGlmIHRoZQorICAgICAgICAgIGNvbW1hbmQgaXMgZ2l2ZW4gYXQg dG9wIGxldmVsLCBpLmUuIG5vdCBmcm9tIGEgY29tbWFuZCBmaWxlIG9yCisgICAgICAgICAgbWFj cm8uIEluIGFsbCBjYXNlcywgdGhlIHJlc3VsdCBvZiB0aGUgbW9zdCByZWNlbnQgRklMRSBDT1VO VAorICAgICAgICAgIGNvbW1hbmQgaXMgc3RvcmVkIGluIHRoZSB2YXJpYWJsZSBcdihmX2NvdW50 KS4gTm90ZSB0aGF0IEZJTEUKKyAgICAgICAgICBDT1VOVCAvTElORSB3b3JrcyAoYW5kIGNhbiBv bmx5IHdvcmspIGJ5IHJlYWRpbmcgdGhlIGVudGlyZQorICAgICAgICAgIGZpbGU7IGV4cGVjdCBp dCB0byB0YWtlIHNvbWUgdGltZSBpZiB0aGUgZmlsZSBpcyBsYXJnZS4gU3lub255bToKKyAgICAg ICAgICBGQ09VTlQuCisKKyAgIEZJTEUgUkVXSU5EIGNoYW5uZWwKKyAgICAgICAgICBNb3ZlcyB0 aGUgcmVhZC93cml0ZSBwb2ludGVyIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUuCisgICAg ICAgICAgRXF1aXZhbGVudCB0byBGSUxFIFNFRUsgY2hhbm5lbCAwLiBTeW5vbnltOiBGUkVXSU5E LgorCisgICBGSUxFIFNFRUsgWyBzd2l0Y2hlcyBdIGNoYW5uZWwgeyBbeyssLX1dbnVtYmVyLCBM QVNULCBFT0YgfQorICAgICAgICAgIE1vdmVzIHRoZSByZWFkL3dyaXRlIHBvaW50ZXIgZm9yIHRo ZSBmaWxlIG9uIHRoaXMgY2hhbm5lbCB0byB0aGUKKyAgICAgICAgICBnaXZlbiBwb3NpdGlvbiwg d2hpY2ggbWF5IGJlIGEgYnl0ZSAoY2hhcmFjdGVyKSBudW1iZXIgb3IgYSBsaW5lCisgICAgICAg ICAgbnVtYmVyLCBleHByZXNzZWQgaW4gZWl0aGVyIGFic29sdXRlIG9yIHJlbGF0aXZlIHRlcm1z LgorICAgICAgICAgIFN3aXRjaGVzOgorCisgICAgICAgIC9CWVRFCisgICAgICAgICAgICAgICAg VGhlIG51bWJlciBnaXZlbiBpcyBhIGJ5dGUgbnVtYmVyLiBTeW5vbnltOiAvQ0hBUkFDVEVSLgor CisgICAgICAgIC9MSU5FCisgICAgICAgICAgICAgICAgVGhlIG51bWJlciBnaXZlbiBpcyBhIGxp bmUgbnVtYmVyLgorCisgICAgICAgIC9BQlNPTFVURQorICAgICAgICAgICAgICAgIFRoZSBudW1i ZXIgZ2l2ZW4gaXMgYWJzb2x1dGUuCisKKyAgICAgICAgL1JFTEFUSVZFCisgICAgICAgICAgICAg ICAgVGhlIG51bWJlciBnaXZlbiBpcyByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBwb3NpdGlvbi4K KworICAgICAgICAgIEJ5IGRlZmF1bHQsIG9yIGlmIHRoZSAvQllURSBzd2l0Y2ggaXMgZ2l2ZW4s IHRoZSBudW1iZXIgaXMgYQorICAgICAgICAgIGJ5dGUgbnVtYmVyICgwID0gZmlyc3QgYnl0ZSku IElmIC9MSU5FIGlzIGdpdmVuLCB0aGUgbnVtYmVyIGlzIGEKKyAgICAgICAgICBsaW5lIG51bWJl ciAoMCA9IGZpcnN0IGxpbmUpLiBFT0YgbWVhbnMgdG8gbW92ZSB0byB0aGUgZW5kIG9mCisgICAg ICAgICAgdGhlIGZpbGUuIExBU1QgbWVhbnMgdG8gbW92ZSB0byB0aGUgbGFzdCBsaW5lIG9yIGNo YXJhY3RlciBvZgorICAgICAgICAgIHRoZSBmaWxlLCBkZXBlbmRpbmcgb24gd2hldGhlciBpdCdz IGEgbGluZSBvciBjaGFyYWN0ZXIgc2Vlay4KKworICAgICAgICAgIElmIG5laXRoZXIgdGhlIC9S RUxBVElWRSBub3IgdGhlIC9BQlNPTFVURSBzd2l0Y2ggaXMgZ2l2ZW4sIHRoZW4KKyAgICAgICAg ICBpZiBhIHNpZ25lZCBudW1iZXIgaXMgZ2l2ZW4sIHRoZSBtb3Rpb24gaXMgcmVsYXRpdmUgdG8g dGhlCisgICAgICAgICAgY3VycmVudCBwb3NpdGlvbi4gQW4gZXhwcmVzc2lvbiB0aGF0IGV2YWx1 YXRlcyB0byBhIG5lZ2F0aXZlCisgICAgICAgICAgbnVtYmVyIGlzIG5vdCBjb25zaWRlcmVkIHNp Z25lZCBmb3IgdGhpcyBwdXJwb3NlOyB0aGF0IGlzLCBhCisgICAgICAgICAgc2lnbiAoKyBvciAt KSBtdXN0IGJlIGluY2x1ZGVkIGFzIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlCisgICAgICAg ICAgbnVtYmVyIGluIHRoZSBjb21tYW5kIGl0c2VsZiB0byBmb3JjZSBhIHJlbGF0aXZlIHNlZWsg KGluIHRoZQorICAgICAgICAgIGFic2VuY2Ugb2YgL1JFTEFUSVZFIG9yIC9BQlNPTFVURSkuCisK KyAgICAgICAgICBJZiB0aGUgbnVtYmVyIGhhcyBubyBzaWduLCBvciBpZiB0aGUgL0FCU09MVVRF IHN3aXRjaCBpcyBnaXZlbiwKKyAgICAgICAgICB0aGUgbnVtYmVyIHJlcHJlc2VudHMgYW4gYWJz b2x1dGUgcG9zaXRpb24gKHJlbGF0aXZlIHRvIHRoZQorICAgICAgICAgIGJlZ2lubmluZyBvZiB0 aGUgZmlsZSkuIFN1YnNlcXVlbnQgRklMRSBSRUFEcyBvciBXUklURXMgd2lsbAorICAgICAgICAg IHRha2UgcGxhY2UgYXQgdGhlIG5ldyBwb3NpdGlvbi4KKworICAgICAgICAgIElmIHRoZSByZWFk L3dyaXRlIHBvaW50ZXIgaXMgcGxhY2VkIGFmdGVyIHRoZSBlbmQgb2YgdGhlIGZpbGUsIGEKKyAg ICAgICAgICBzdWJzZXF1ZW50IEZJTEUgUkVBRCB3aWxsIGZhaWwsIGJ1dCBhIEZJTEUgV1JJVEUg d2lsbCBzdWNjZWVkCisgICAgICAgICAgKHBvc3NpYmx5IGNyZWF0aW5nIGEgZmlsZSB3aXRoICJo b2xlcyIpLiBJZiBhIEZJTEUgU0VFSyAvQllURQorICAgICAgICAgIGNvbW1hbmQgaXMgZ2l2ZW4s IHRoZSBjdXJyZW50IGxpbmUgYmVjb21lcyB1bmtub3duICh1bmxlc3MgdGhlCisgICAgICAgICAg cG9zaXRpb24gaXMgMCkgYW5kIHN1YnNlcXVlbnQgRklMRSBTRUVLIC9SRUxBVElWRSAvTElORSBj b21tYW5kcworICAgICAgICAgIHdpbGwgZmFpbCB1bnRpbCB0aGUgbmV4dCBub24tcmVsYXRpdmUg RklMRSBTRUVLIC9MSU5FIGNvbW1hbmQgaXMKKyAgICAgICAgICBnaXZlbi4gU3lub255bTogRlNF RUsuCisKKyAgIEFuIGFic29sdXRlIEZJTEUgU0VFSyB0byBhIG5lZ2F0aXZlIHBvc2l0aW9uIGZh aWxzIHNpbGVudGx5LCBhcyBkb2VzIGEKKyAgIHJlbGF0aXZlIHNlZWsgdG8gYSBwb3NpdGlvbiBi ZWZvcmUgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZS4KKworICAgQSBjYXV0aW9uIGFib3V0IHJl bGF0aXZlIFNFRUtzOiByZW1lbWJlciB0aGF0IHRoZSBudW1iZXIgaXMgcmVsYXRpdmUgdG8KKyAg IHRoZSBjdXJyZW50IHBvc2l0aW9uLiBXaGVuZXZlciB5b3UgcmVhZCBvciB3cml0ZSwgdGhpcyBj aGFuZ2VzIHRoZQorICAgcG9zaXRpb24uIEluIGVhY2ggb2YgdGhlIGZvbGxvd2luZyBleGFtcGxl cywgYXNzdW1lIHRoZSBmaWxlIG9wZW4gb24KKyAgIGNoYW5uZWwgXCVjIGlzIHBvc2l0aW9uZWQg YXQgbGluZSBuICh0aGUgRlJFQUQgdGFyZ2V0IHZhcmlhYmxlIGlzCisgICBvbWl0dGVkIGZvciBs YWNrIG9mIHNwYWNlKToKKworICB7IEZSRUFEIFwlYywgRlNFRUsgL0xJTkUgXCVjIC0xLCBGUkVB RCBcJWMgfSAgPC0tIFJlYWRzIGxpbmUgbiB0d2ljZQorICB7IEZSRUFEIFwlYywgRlNFRUsgL0xJ TkUgXCVjICswLCBGUkVBRCBcJWMgfSAgPC0tIFJlYWRzIGxpbmVzIG4gYW5kIG4rMQorICB7IEZS RUFEIFwlYywgRlNFRUsgL0xJTkUgXCVjICsxLCBGUkVBRCBcJWMgfSAgPC0tIFJlYWRzIGxpbmVz IG4gYW5kIG4rMgorICB7IEZSRUFEIFwlYywgRlNFRUsgL0xJTkUgXCVjIC0yLCBGUkVBRCBcJWMg fSAgPC0tIFJlYWRzIGxpbmVzIG4gYW5kIG4tMQorICB7IEZSRUFEIFwlYywgRlNFRUsgL0xJTkUg XCVjIC0zLCBGUkVBRCBcJWMgfSAgPC0tIFJlYWRzIGxpbmVzIG4gYW5kIG4tMgorCisgICBBbm90 aGVyIGNhdXRpb246IFVzaW5nIEZTRUVLIGFuZCBGUkVBRCAvU0laRSB0byByZXBlYXRlZGx5IHJl YWQgdGhlCisgICBzYW1lIGRpc2sgYmxvY2sgKGUuZy4gd2hlbiBzYW1wbGluZyBhIGRhdGFiYXNl IHJlY29yZCB0aGF0IGlzCisgICBmcmVxdWVudGx5IHVwZGF0ZWQpIG1pZ2h0IG5vdCBnaXZlIHlv dSB1cGRhdGVkIGRpc2sgYmxvY2tzIGR1ZSB0byB0aGUKKyAgIGludGVybmFsIGJ1ZmZlcmluZyBh bmQgY2FjaGluZyBvZiB0aGUgQyBsaWJyYXJ5ICh0aGlzIHByb2JhYmx5IHZhcmllcworICAgZnJv bSBvbmUgcGxhdGZvcm0vY29tcGlsZXIgY29tYmluYXRpb24gdG8gYW5vdGhlcikuIElmIG5lY2Vz c2FyeSB5b3UKKyAgIGNhbiBmb3JjZSBhIGZyZXNoIGRpc2sgcmVhZCB3aXRoIGEgY2xvc2Uvb3Bl biBzZXF1ZW5jZToKKworICBGQ0xPUyBcJWMKKyAgRk9QRU4gXCVjIHNhbWVmaWxlbmFtZQorICBG U0VFSyBcJWMgc2FtZXNwb3QKKyAgRlJFQUQgL1NJWkU6aG93bWFueWJ5dGVzIFwlYyB2YXJpYWJs ZQorCisxLjIyLjMuIEZJTEUgQ29tbWFuZCBFeGFtcGxlcworCisgICBUbyByZWFkIHRoZSBsYXN0 IDEwIGxpbmVzIG9mIGEgdGV4dCBmaWxlIGludG8gYW4gYXJyYXk6CisKKyAgZm9wZW4gL3JlYWQg XCVjIG9vZmEudHh0ICAgICAgICAgICAgICAgIDsgT3BlbiB0aGUgZmlsZQorICBpZiBmYWlsIGV4 aXQgMSBDYW4ndCBvcGVuIG9vZmEudHh0ICAgICAgOyBBbHdheXMgY2hlY2sgZm9yIGZhaWx1cmUK KyAgZGNsIFwmYVsxMF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgRGVjbGFyZSBhIDEw LWVsZW1lbnQgYXJyYXkKKyAgZmNvdW50IC9saW5lIFwlYyAgICAgICAgICAgICAgICAgICAgICAg IDsgQ291bnQgbGluZXMgaW4gdGhlIGZpbGUKKyAgZnNlZWsgL2xpbmUgXCVjIFx2KGZfY291bnQp LTEwICAgICAgICAgIDsgU2VlayB0byAxMCBsaW5lcyBmcm9tIHRoZSBlbmQKKyAgaWYgZmFpbCBl eGl0IDEgQ2FuJ3Qgc2VlayAgICAgICAgICAgICAgIDsgQ2hlY2sgZm9yIGZhaWx1cmUKKyAgZm9y IFwlaSAxIDEwIDEgeyBmcmVhZCBcJWMgXCZhW1wlaV0gfSAgIDsgUmVhZCB0aGUgbGFzdCAxMCBs aW5lcworICBmY2xvc2UgXCVjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBDbG9zZSB0 aGUgZmlsZQorCisgICBOb3RlIHRoYXQgYmxhbmsgbGluZXMgc2hvdyB1cCBhcyBlbXB0eSAodW5k ZWZpbmVkKSBhcnJheSBlbGVtZW50cywgZm9yCisgICBleGFtcGxlIGlmIHlvdSBnaXZlIGEgInNo b3cgYXJyYXkgYSIgY29tbWFuZCBhdCB0aGlzIHBvaW50LiBUaGlzIGlzCisgICBub3JtYWwuIFlv dSBjYW4gc3RpbGwgdXNlIHRoZXNlIGVsZW1lbnRzOyBlLmcuOgorCisgIGZvciBcJWkgMSAxMCAx IHsgZWNobyBcJWkuIFwmYVtcJWldIH0gICA7IERpc3BsYXkgdGhlIDEwIGxpbmVzCisKKyAgIEhl cmUgaXMgaG93IHRvIHJlYWQgdGhlIGxhc3QgbGluZSBvZiBhIGZpbGUgKGFscmVhZHkgb3BlbiBv biBjaGFubmVsCisgICBcJWMpOgorCisgIGZzZWVrIC9saW5lIFwlYyBsYXN0ICAgICAgICAgICAg ICAgICAgICA7IFNlZWsgZGlyZWN0bHkgdG8gbGFzdCBsaW5lCisKKyAgIEFsdGVybmF0aXZlbHk6 CisKKyAgZnNlZWsgL2xpbmUgXCVjIGVvZiAgICAgICAgICAgICAgICAgICAgIDsgU2VlayB0byBl bmQgb2YgZmlsZQorICBmc2VlayAvbGluZSBcJWMgLTEgICAgICAgICAgICAgICAgICAgICAgOyBT ZWVrIHRvIGJlZ2lubmluZyBvZiBsYXN0IGxpbmUKKworICAgQWx0ZXJuYXRpdmVseToKKworICBm Y291bnQgL2xpbmUgXCVjICAgICAgICAgICAgICAgICAgICAgICAgOyBDb3VudCB0aGUgZmlsZSdz IGxpbmVzCisgIGZzZWVrIC9saW5lIFwlYyBcdihmX2NvdW50KS0xICAgICAgICAgICA7IFNlZWsg dG8gbGFzdCBsaW5lCisgIGZyZWFkIFwlYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7 IFJlYWQgaXQKKworICAgVG8gcmVhZCBldmVyeSBvdGhlciBsaW5lIGZyb20gdGhlIGZpbGUgKHVz aW5nIHJlbGF0aXZlIFNFRUspLCBza2lwcGluZworICAgdGhlIGZpcnN0IGxpbmU6CisKKyAgZm9w ZW4gL3JlYWQgXCVjIG9vZmEudHh0ICAgICAgICAgICAgICAgIDsgT3BlbiB0aGUgZmlsZQorICB3 aGlsZSAoIHN1Y2Nlc3MgKSB7ICAgICAgICAgICAgICAgICAgICAgOyBMb29wIHRocm91Z2ggbGlu ZXMKKyAgICAgIGZzZWVrIC9saW5lIFwlYyArMSAgICAgICAgICAgICAgICAgIDsgU2tpcCBhIGxp bmUKKyAgICAgIGlmIHN1Y2Nlc3MgZnJlYWQgXCVjICAgICAgICAgICAgICAgIDsgUmVhZCAmIGRp c3BsYXkgYSBsaW5lCisgIH0KKyAgZmNsb3NlIFwlYyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDsgQ2xvc2UgdGhlIGZpbGUKKworICAgSGVyZSBpcyBob3cgdG8gcmVhZCB0aGUgbGluZXMg b2YgYSBmaWxlIGluIHJldmVyc2Ugb3JkZXI6CisKKyAgZm9wZW4gL3JlYWQgXCVjIG9vZmEudHh0 ICAgICAgICAgICAgICAgIDsgT3BlbgorICBpZiBmYWlsIGV4aXQgMSAgICAgICAgICAgICAgICAg ICAgICAgICAgOyBDaGVjaworICBmc2VlayAvbGluZSBcJWMgbGFzdCAgICAgICAgICAgICAgICAg ICAgOyBTZWVrIHRvIGxhc3QgbGluZQorICB3aGlsZSBzdWNjZXNzIHsgICAgICAgICAgICAgICAg ICAgICAgICAgOyBMb29wCisgICAgICBmcmVhZCBcJWMgICAgICAgICAgICAgICAgICAgICAgICAg ICA7IFJlYWQgbGluZQorICAgICAgZnNlZWsgL2xpbmUgXCVjIC0yICAgICAgICAgICAgICAgICAg OyBTZWVrIGJhY2t3YXJkcyB0d28gbGluZXMKKyAgfQorICBmY2xvc2UgXCVjICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOyBDbG9zZSB0aGUgZmlsZQorCisgICBUaGUgbG9vcCB3b3JrcyBi ZWNhdXNlIGEgcmVsYXRpdmUgU0VFSyBvdXRzaWRlIHRoZSBmaWxlIGZhaWxzLgorCisgICBJdCBp cyBhbHNvIHBvc3NpYmxlIHRvIHVzZSBibG9jayBpL28gdG8gbWFuYWdlIHJhbmRvbS1hY2Nlc3Mg ZmlsZXMgd2l0aAorICAgZml4ZWQtbGVuZ3RoIHJlY29yZHMgKGFzIGxvbmcgYXMgdGhleSBkb24n dCBjb250YWluIE5VTCBjaGFyYWN0ZXJzKS4KKyAgIFN1cHBvc2UsIGZvciBleGFtcGxlLCB5b3Ug aGF2ZSBhIGZpbGUgb2YgImNhcmQgaW1hZ2UiIHJlY29yZHMgd2l0aAorICAgZml4ZWQtZmllbGQg aW5mb3JtYXRpb24gYWJvdXQgY3VzdG9tZXJzLCBzdWNoIGFzOgorCisgIE5hbWU6ICAgICBDb2x1 bW5zICAxLTMyICAoY29sdW1uIG51bWJlcnMgYXJlIDEtYmFzZWQpCisgIEFkZHJlc3M6ICBDb2x1 bW5zIDMzLTcyCisgIEJhbGFuY2U6ICBDb2x1bW5zIDczLTgwCisKKyAgIFRoZSByZWNvcmRzIGFy ZSBpbmRleGVkIGJ5IGN1c3RvbWVyIG51bWJlciwgc3RhcnRpbmcgd2l0aCAwLiBUaGVyZSBhcmUK KyAgIG5vIGxpbmUgdGVybWluYXRvcnMgc2VwYXJhdGluZyB0aGVtLiBUaGVyZWZvcmUgdGhlIHJl Y29yZCBmb3IgY3VzdG9tZXIKKyAgIG51bWJlciBuIHN0YXJ0cyBhdCBwb3NpdGlvbiBueCA4MCAo XCVuKjgwKS4KKworICAgTm93IHN1cHBvc2Ugd2UgcmVjZWl2ZWQgYSBwYXltZW50IGZyb20gY3Vz dG9tZXIgbnVtYmVyIDE3MyBhbmQgd2FudCB0bworICAgdXBkYXRlIHRoZSBiYWxhbmNlOgorCisg IC5cJW4gPSAxNzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBDdXN0b21lciAocmVj b3JkKSBudW1iZXIKKyAgLlwlYSA9IDEyLjcyICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7 IEFtb3VudAorICBmb3BlbiAvcmVhZCAvd3JpdGUgXCVjIGN1c3RvbWVyLmRiICAgICAgIDsgT3Bl biB0aGUgZmlsZQorICBpZiBmYWlsIHN0b3AgMSBPUEVOIEZBSUxFRDogXGZfZXJybXNnKCkgIDsg Q2hlY2sKKyAgZnNlZWsgL2J5dGUgXCVjIDgwKlwlbiAgICAgICAgICAgICAgICAgICA7IFNlZWsg dG8gcmVjb3JkCisgIGZyZWFkIC9zaXplOjgwIFwlYyByICAgICAgICAgICAgICAgICAgICAgOyBS ZWFkIHRoZSByZWNvcmQKKyAgaWYgZmFpbCBzdG9wIDEgUkVBRCBGQUlMRUQ6IFxmX2Vycm1zZygp ICA7IENoZWNrIChJTVBPUlRBTlQpCisgIC5cJWIgOj0gXGZyaWdodChcbShyKSw4KSAgICAgICAg ICAgICAgICAgOyBFeHRyYWN0IHRoZSBiYWxhbmNlCisgIC5cJWIgOj0gXGZmcGFkZChcJWIsXCVh LDIpICAgICAgICAgICAgICAgOyBBZGQgdGhlIG5ldyBwYXltZW50CisgIGlmIGZhaWwgc3RvcCAx IEFSSVRITUVUSUMgRVJST1I6IFwlYi9cJWEgOyBDYXRjaCBiYWQgcmVjb3JkcworICAuciA6PSB7 XGZsZWZ0KFxtKHIpLDcyKVxmbHBhZChcJWIsOCl9ICAgIDsgVXBkYXRlIHRoZSByZWNvcmQKKyAg ZnNlZWsgL2J5dGUgXCVjIDgwKlwlbiAgICAgICAgICAgICAgICAgICA7IFJlcG9zaXRpb24gdG8g c2FtZSBzcG90CisgIGZ3cml0ZSAvc2l6ZTo4MCBcJWMge1xtKHIpfSAgICAgICAgICAgICAgOyBS ZXBsYWNlIHRoZSByZWNvcmQKKyAgaWYgZmFpbCBzdG9wIDEgV1JJVEUgRkFJTEVEOiBcZl9lcnJt c2coKSA7IENoZWNrCisgIGZjbG9zZSBcJWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OyBDbG9zZSB0aGUgZmlsZQorCisgICBSRU1FTUJFUjogVXNpbmcgRklMRSBTRUVLIHRvIG1vdmUg YmV5b25kIHRoZSBlbmQgb2YgZmlsZSBjYW4gcmVzdWx0IGluCisgICBhIGZpbGUgd2l0aCBob2xl cyB3aGVuIHdyaXRpbmc7IHdoZW4gcmVhZGluZywgYW4gZW5kLW9mLWZpbGUgZXJyb3Igd2lsbAor ICAgb2NjdXIgLS0gYmUgc3VyZSB0byBjaGVjayBmb3IgaXQuCisKKzEuMjIuNC4gQ2hhbm5lbCBO dW1iZXJzCisKKyAgIEMtS2VybWl0J3MgY2hhbm5lbCBudW1iZXJzIGFyZSBpbnRlZ2VycyBmcm9t IDAgdG8gc29tZQorICAgcGxhdGZvcm0tZGVwZW5kZW50IGxpbWl0LCBzdWNoIGFzIDQ2IG9yIDE5 ODUgKHRoZSB2YWx1ZSBvZiBcdihmX21heCkpLgorICAgVGhpcyBpcyB0aGUgbGltaXQgcGxhY2Vk IGJ5IHRoZSBvcGVyYXRpbmcgc3lzdGVtIG9uIHRoZSBudW1iZXIgb2YgZmlsZXMKKyAgIHRoYXQg bWF5IGJlIG9wZW5lZCBieSBvbmUgcHJvY2VzcyBvciB1c2VyIG9yIGpvYiwgbWludXMgdGhlIHN0 YW5kYXJkCisgICBpbnB1dCwgb3V0cHV0LCBhbmQgZXJyb3IgZmlsZXMsIGFuZCBtaW51cyB0aGUg bnVtYmVyIG9mIGZpbGVzIHJlc2VydmVkCisgICBieSBDLUtlcm1pdCBmb3IgbG9ncywgT1BFTiBS RUFEIGFuZCBXUklURSwgYW5kIGZpbGUgdHJhbnNmZXIgKGFuZCBtYXliZQorICAgc29tZSBjb21t YW5kIGZpbGVzIC0tIHRoZSBcdihmX21heCkgbnVtYmVyIGNhbid0IGJlIGV4YWN0KS4KKworICAg QWx0aG91Z2ggeW91IG11c3QgaW5jbHVkZSBhIHZhcmlhYmxlIGluIHRoZSBGSUxFIE9QRU4gY29t bWFuZCwgdG8gd2hpY2gKKyAgIHRoZSBjaGFubmVsIG51bWJlciBpcyBhc3NpZ25lZCwgeW91IGRv bid0IGhhdmUgdG8gdXNlIGEgdmFyaWFibGUgaW4gdGhlCisgICBvdGhlciBGSUxFIGNvbW1hbmRz IGlmIHlvdSBrbm93IHdoYXQgdGhlIG51bWJlciBpcyAtLSB5b3UgY2FuIGp1c3QgcHV0CisgICB0 aGUgbnVtYmVyLiBUaGlzIHNhdmVzIHlvdSBhIGZldyBrZXlzdHJva2VzIHdoZW4gdHlwaW5nIGNv bW1hbmRzIGF0IHRoZQorICAgcHJvbXB0OgorCisgIGZvcGVuIFwlYyBvb2ZhLnR4dAorICBmbGlz dAorICAwLiAvdXNyL29sZ2Eub29mYS50eHQgKFIpIDAKKworICAgVGhpcyB0ZWxscyB0aGUgY2hh bm5lbCBudW1iZXIgaXMgMCAodGhlIG51bWJlciBvbiB0aGUgbGVmdCBpcyB0aGUKKyAgIGNoYW5u ZWwgZmlsZSdzIGNoYW5uZWwgbnVtYmVyKS4gT2YgY291cnNlIHlvdSBjYW4gYWxzbyBmaW5kIGl0 IGJ5CisgICBlY2hvaW5nIHRoZSB2YXJpYWJsZToKKworICBlY2hvIFwlYworICAwCisKKyAgIE9y IHdpdGggImZzdGF0dXMgXCVjIi4gTm93IHlvdSBjYW4gdHlwZSBjb21tYW5kcyBsaWtlOgorCisg IGZyZWFkIDAKKworICAgdG8gcmVhZCBhIGxpbmUgZnJvbSB0aGUgZmlsZS4gT2J2aW91c2x5LCBo b3dldmVyLCB1c2luZyBkaWdpdHMgcmF0aGVyCisgICB0aGFuIGEgdmFyaWFibGUgZm9yIHRoZSBj aGFubmVsIG51bWJlciB3b3VsZCBiZSBwb29yIHByYWN0aWNlIGluIGEKKyAgIHNjcmlwdC4KKwor ICAgSWYgaW4gY29tbWFuZHMgbGlrZToKKworICBmcmVhZCBcJWMgXCVhCisKKyAgIHlvdSBoYXZl IHRyb3VibGUgcmVtZW1iZXJpbmcgd2hpY2ggdmFyaWFibGUgaXMgd2hpY2gsIG5vdGUgdGhhdCB0 aGUKKyAgIGNoYW5uZWwgbnVtYmVyIGlzLCBpbmRlZWQsIGEgbnVtYmVyLiBBbnl3aGVyZSBDLUtl cm1pdCBhY2NlcHRzIGEgbnVtYmVyCisgICBpdCBjYW4gYWxzbyBhY2NlcHQgYW4gZXhwcmVzc2lv biwgc28geW91IGNhbiBwdXQgcGFyZW50aGVzZXMgYXJvdW5kIHRoZQorICAgY2hhbm5lbCBudW1i ZXIgdG8gcmVtaW5kIHlvdSBpdCdzIHRoZSBjaGFubmVsIG51bWJlciBhbmQgbm90IHRoZQorICAg dmFyaWFibGUgaW50byB3aGljaCBkYXRhIGlzIHRvIGJlIHJlYWQ6CisKKyAgZnJlYWQgKFwlYykg XCVhCisKKyAgIE5vcm1hbGx5IGNoYW5uZWwgbnVtYmVycyBhcmUgYXNzaWduZWQgc2VxdWVudGlh bGx5IGFzIDAsIDEsIDIsIC4uLiB1cAorICAgdG8gdGhlIGxpbWl0LiBIb3dldmVyLCBvbmNlIHlv dSBzdGFydCBjbG9zaW5nIGZpbGVzLCB0aGVyZSBjYW4gYmUgaG9sZXMKKyAgIGluIHRoZSBzZXF1 ZW5jZS4gTmV3IGNoYW5uZWxzIGFyZSBhc3NpZ25lZCB0byBmaWxsIGluIHRoZSBob2xlcy4gVGh1 cworICAgeW91IGNhbid0IGRlcGVuZCBvbiBjaGFubmVsIG51bWJlcnMgYmVpbmcgaW4gYW55IHBh cnRpY3VsYXIgc2VxdWVuY2UuCisKKzEuMjIuNS4gRklMRSBDb21tYW5kIEVycm9ycworCisgICBF YWNoIEZJTEUgY29tbWFuZCBzZXRzIHRoZSB2YXJpYWJsZSBcdihmX2Vycm9yKSB0byBvbmUgb2Yg dGhlIGZvbGxvd2luZworICAgdmFsdWVzOgorCisgICAgMCA9IE5vIGVycm9yCisgICAtMSA9IFN5 c3RlbSBlcnJvcgorICAgLTIgPSBBdHRlbXB0IHRvIHJlYWQgYWZ0ZXIgZW5kIG9mIGZpbGUKKyAg IC0zID0gQ2hhbm5lbCBub3Qgb3BlbgorICAgLTQgPSBDaGFubmVsIG51bWJlciBvdXQgb2YgcmFu Z2UgKG5lZ2F0aXZlIG9yIHRvbyBsYXJnZSkKKyAgIC01ID0gTnVtZXJpYyBhcmd1bWVudCAoc2l6 ZSwgLi4uKSBvdXQgb2YgcmFuZ2UKKyAgIC02ID0gRmlsZSBub3QgZm91bmQKKyAgIC03ID0gQmFk IG9yIG1pc3NpbmcgZmlsZW5hbWUKKyAgIC04ID0gVG9vIG1hbnkgZmlsZXMgYXJlIGFscmVhZHkg b3BlbiAoRklMRSBPUEVOIG9ubHkpCisgICAtOSA9IEZvcmJpZGRlbiBvcGVyYXRpb24gKGUuZy4g d3JpdGUgdG8gYSByZWFkLW9ubHkgZmlsZSkKKyAgLTEwID0gQWNjZXNzIGRlbmllZAorICAtMTEg PSBJbGxlZ2FsIGNvbWJpbmF0aW9uIG9mIE9QRU4gbW9kZXMgKEZJTEUgT1BFTiBvbmx5KQorICAt MTIgPSBCdWZmZXIgb3ZlcmZsb3cKKyAgLTEzID0gQ3VycmVudCBsaW5lIG51bWJlciB1bmtub3du IChmb3IgcmVsYXRpdmUgbGluZSBzZWVrcykKKyAgLTE0IHRocm91Z2ggLTk4OiBSZXNlcnZlZC4K KyAgLTk5ID0gUmVxdWVzdGVkIG9wZXJhdGlvbiBub3QgaW1wbGVtZW50ZWQgaW4gdGhpcyB2ZXJz aW9uIG9mIEMtS2VybWl0CisgLTk5OSA9IFVua25vd24gZXJyb3IKKworICAgV2hlbiBcdihmX2Vy cm9yKSBpcyAtMSwgdGhpcyBtZWFucyB0aGUgRklMRSBjb21tYW5kIGZhaWxlZCBiZWNhdXNlCisg ICBiZWNhdXNlIG9mIGEgc3lzdGVtIGVycm9yLCBpbiB3aGljaCBjYXNlIHlvdSBjYW4gZXhhbWlu ZSB0aGUgZm9sbG93aW5nCisgICB2YXJpYWJsZXM6CisKKyAgXHYoZXJybm8pICAgICA9IFN5c3Rl bSBlcnJvciBudW1iZXIuCisgIFx2KGVycnN0cmluZykgPSBFcnJvciBtZXNzYWdlIGNvcnJlc3Bv bmRpbmcgdG8gXHYoZXJybm8pLgorCisgICBBIHNwZWNpYWwgZnVuY3Rpb24gaXMgYXZhaWxhYmxl IGZvciB0cmFuc2xhdGluZyB0aGUgXHYoZl9lcnJvcikgY29kZSB0bworICAgYW4gZXJyb3IgbWVz c2FnZSBzdHJpbmc6CisKK1xmX2Vycm1zZyhbY29kZV0pCisgIElmIHRoZSBjb2RlIGlzIC0xLCBy ZXR1cm5zIGVycm9yIG1lc3NhZ2Ugb2YgdGhlIG1vc3QgcmVjZW50IHN5c3RlbQorICBlcnJvcjsg b3RoZXJ3aXNlIGlmIHRoZSBjb2RlIGlzIGEgdmFsaWQgXHYoZl9lcnJvcikgdmFsdWUsIHRoZSBh c3NvY2lhdGVkCisgIG1lc3NhZ2UgaXMgcmV0dXJuZWQuICBJZiB0aGUgY29kZSBpcyBvbWl0dGVk LCB0aGUgc3RhdHVzIG1lc3NhZ2UKKyAgY29ycmVzcG9uZGluZyB0byB0aGUgY3VycmVudCBcdihm X2Vycm9yKSB2YWx1ZSBpcyByZXR1cm5lZC4KKworICAgQSBGSUxFIGNvbW1hbmQgdGhhdCBmYWls cyBwcmludHMgdGhlIGFwcHJvcHJpYXRlIGVycm9yIG1lc3NhZ2UKKyAgIGF1dG9tYXRpY2FsbHks IGV4Y2VwdCB3aGVuIHRoZSBjb21tYW5kIGlzIFJFQUQgb3IgU0VFSyBhbmQgdGhlIGVycm9yIGlz CisgICAtMiAoZW5kIG9mIGZpbGUpOyBpbiB0aGF0IGNhc2UsIHRoZSBjb21tYW5kIHN0aWxsIGZh aWxzLCBidXQgZG9lcyBub3QKKyAgIHByaW50IGEgbWVzc2FnZS4gVGhpcyBhbGxvd3MgY29uc3Ry dWN0aW9ucyBzdWNoIGFzOgorCisgIGZvcGVuIFwlYyBvb2ZhLnR4dAorICB3aGlsZSBzdWNjZXNz IHsgZnJlYWQgXCVjIH0KKyAgZmNsb3NlIFwlYworCisgICB0byB3b3JrIGFzIGV4cGVjdGVkLCBp LmUuIHdpdGhvdXQgYW4gYW5ub3lpbmcgbWVzc2FnZSB3aGVuIHRoZSBlbmQgb2YKKyAgIGZpbGUg aXMgcmVhY2hlZC4KKworMS4yMi42LiBGaWxlIEkvTyBWYXJpYWJsZXMKKworICAgVGhlIHZhcmlh YmxlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGZpbGUgaS9vIHBhY2thZ2UgYXJlOgorCisgICBcdihm X2NvdW50KQorICAgICAgICAgIFJlc3VsdCBvZiB0aGUgbW9zdCByZWNlbnQgRklMRSBDT1VOVCAo RkNPVU5UKSBjb21tYW5kLgorCisgICBcdihmX2Vycm9yKQorICAgICAgICAgIE51bWVyaWMgZXJy b3IgY29kZSBvZiBtb3N0IHJlY2VudCBGSUxFIGNvbW1hbmQgKDAgPSBubyBlcnJvcikuCisKKyAg IFx2KGZfbWF4KQorICAgICAgICAgIE1heGltdW0gbnVtYmVyIG9mIGZpbGVzIG9wZW4gc2ltdWx0 YW5lb3VzbHkuCisKKzEuMjIuNy4gRmlsZSBJL08gRnVuY3Rpb25zCisKKyAgIFNvbWUgb2YgdGhl IEZJTEUgY29tbWFuZHMgY2FuIGFsc28gYmUgaXNzdWVkIGFzIGZ1bmN0aW9uIGNhbGxzLCB3aGlj aAorICAgbWFrZXMgc2NyaXB0IHdyaXRpbmcgYSBiaXQgbW9yZSBjb252ZW5pZW50LCBlc3BlY2lh bGx5IGZvciBDCisgICBwcm9ncmFtbWVycy4gQWxzbywgc2V2ZXJhbCBmdW5jdGlvbnMgYXJlIHBy b3ZpZGVkIHRoYXQgZG8gbm90IGhhdmUKKyAgIGNvbW1hbmQgZXF1aXZhbGVudHMuIEVhY2ggb2Yg dGhlc2UgZnVuY3Rpb25zIHRha2VzIGEgY2hhbm5lbCBudW1iZXIgYXMKKyAgIHRoZSBmaXJzdCBh cmd1bWVudC4gVGhlc2UgZnVuY3Rpb25zIGRvIG5vdCB3b3JrIGZvciBPUEVOIHsgUkVBRCwgIVJF QUQsCisgICBXUklURSwgIVdSSVRFLCBhbmQgQVBQRU5EIH0gZmlsZXMuCisKKyAgIFxmX3N0YXR1 cyhjaGFubmVsKQorICAgICAgICAgIFJldHVybnMgMCBpZiB0aGUgY2hhbm5lbCBpcyBub3Qgb3Bl biwgb3RoZXJ3aXNlIGEgbnVtYmVyIGJldHdlZW4KKyAgICAgICAgICAxIGFuZCAxNSB3aGljaCBp cyB0aGUgc3VtIG9mIHRoZSBPUEVOIG1vZGVzOgorCisgIDEgPSAvUkVBRAorICAyID0gL1dSSVRF CisgIDQgPSAvQVBQRU5ECisgIDggPSAvQklOQVJZCisKKyAgIFRoZSByZW1haW5pbmcgZnVuY3Rp b25zIHdvcmsgb25seSBmb3Igb3BlbiBjaGFubmVscy4gRWFjaCBvZiB0aGVzZQorICAgZnVuY3Rp b25zIGNhbiBmYWlsIGZvciB0aGUgYXBwbGljYWJsZSByZWFzb25zIGxpc3RlZCBpbiBbMzg3XVNl Y3Rpb24KKyAgIDEuMjIuNS4gRm9yIGluc3RydWN0aW9ucyBvbiBoYW5kbGluZyBmdW5jdGlvbiBl cnJvcnMsIHNlZSBbMzg4XVNlY3Rpb24KKyAgIDcuMTIuCisKKyAgIFxmX3BvcyhjaGFubmVsKQor ICAgICAgICAgIFJldHVybnMgdGhlIGZpbGUncyBjdXJyZW50IHJlYWQvd3JpdGUgcG9pbnRlciAo MC1iYXNlZCkuIFRoZXJlCisgICAgICAgICAgaXMgbm8gRklMRSBjb21tYW5kIGVxdWl2YWxlbnQu CisKKyAgIFxmX2xpbmUoY2hhbm5lbCkKKyAgICAgICAgICBSZXR1cm5zIHRoZSBmaWxlJ3MgY3Vy cmVudCBsaW5lIG51bWJlciAoMC1iYXNlZCksIGlmIGtub3duLAorICAgICAgICAgIG90aGVyd2lz ZSAtMS4gVGhlcmUgaXMgbm8gRklMRSBjb21tYW5kIGVxdWl2YWxlbnQuIFRoZSBsaW5lCisgICAg ICAgICAgbnVtYmVyIGlzIGtub3duIGFzIGxvbmcgYXMgbm8gY2hhcmFjdGVyIG9yIGJsb2NrIGkv byBoYXMgYmVlbgorICAgICAgICAgIGRvbmUgb24gdGhlIGNoYW5uZWwuCisKKyAgIFxmX2hhbmRs ZShjaGFubmVsKQorICAgICAgICAgIFJldHVybnMgdGhlICJmaWxlIGhhbmRsZSIgb2YgdGhlIGZp bGUuIFRoYXQgaXMsIGl0IHRyYW5zbGF0ZXMKKyAgICAgICAgICB0aGUgcG9ydGFibGUgQy1LZXJt aXQgY2hhbm5lbCBudW1iZXIgaW50byBhIHN5c3RlbS1zcGVjaWZpYyBmaWxlCisgICAgICAgICAg aGFuZGxlIG9yIG51bWJlciB0aGF0IGNhbiBiZSBwYXNzZWQgdG8gb3RoZXIgcHJvZ3JhbXMgb24g dGhlCisgICAgICAgICAgc2FtZSBwbGF0Zm9ybS4gSW4gVU5JWCB0aGlzIGlzIGEgZmlsZSBkZXNj cmlwdG9yLiBUaGVyZSBpcyBubworICAgICAgICAgIEZJTEUgY29tbWFuZCBlcXVpdmFsZW50Lgor CisgICBcZl9lb2YoY2hhbm5lbCkKKyAgICAgICAgICBSZXR1cm5zIDEgaWYgdGhlIHJlYWQvd3Jp dGUgcG9pbnRlciBvZiB0aGUgZmlsZSBvbiB0aGUgZ2l2ZW4KKyAgICAgICAgICBjaGFubmVsIGlz IGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUsIDAgb3RoZXJ3aXNlLiBDb252ZW5pZW50IGluCisgICAg ICAgICAgV0hJTEUgc3RhdGVtZW50cywgZS5nLjoKKworICAgIHdoaWxlIG5vdCBcZl9lb2YoXCVj KSB7IGZyZWFkIFwlYyB9CisKKyAgIFxmX2dldGNoYXIoY2hhbm5lbCkKKyAgICAgICAgICBFcXVp dmFsZW50IHRvIEZSRUFEIC9DSEFSLiBSZXR1cm5zIHRoZSBjaGFyYWN0ZXIgYWN0dWFsbHkgcmVh ZC4KKyAgICAgICAgICBJZiBcZl9nZXRjaGFyKCkgZG9lcyBub3QgZmFpbCBidXQgdGhlIHJldHVy biB2YWx1ZSBpcyBlbXB0eSwKKyAgICAgICAgICB0aGlzIG1lYW5zIGEgTlVMTCBjaGFyYWN0ZXIg d2FzIHJlYWQuCisKKyAgIFxmX2dldGxpbmUoY2hhbm5lbCkKKyAgICAgICAgICBFcXVpdmFsZW50 IHRvIEZSRUFEIC9MSU5FLiBSZXR1cm5zIHRoZSBsaW5lIGFjdHVhbGx5IHJlYWQsIGJ1dAorICAg ICAgICAgIHdpdGggdGhlIGxpbmUgdGVybWluYXRvciBzdHJpcHBlZC4gSWYgXGZfZ2V0bGluZSgp IGRvZXMgbm90IGZhaWwKKyAgICAgICAgICBidXQgdGhlIHJldHVybiB2YWx1ZSBpcyBlbXB0eSwg dGhpcyBub3JtYWxseSBtZWFucyBhbiBlbXB0eSBsaW5lCisgICAgICAgICAgd2FzIHJlYWQuCisK KyAgIFxmX2dldGJsb2NrKGNoYW5uZWwsbikKKyAgICAgICAgICBFcXVpdmFsZW50IHRvIEZSRUFE IC9TSVpFOm4uIFJldHVybnMgdGhlIGJsb2NrIG9mIGNoYXJhY3RlcnMKKyAgICAgICAgICBhY3R1 YWxseSByZWFkLiBJZiB0aGUgcmV0dXJuZWQgYmxvY2sgaXMgc21hbGxlciB0aGFuIG4sIGl0Cisg ICAgICAgICAgaW5kaWNhdGVzIGVpdGhlciB0aGF0IHRoZSBlbmQgb2YgZmlsZSB3YXMgcmVhY2hl ZCBvciBhIE5VTAorICAgICAgICAgIGNoYXJhY3RlciBpcyBpbiB0aGUgYmxvY2suCisKKyAgIFxm X3B1dGNoYXIoY2hhbm5lbCxjKQorICAgICAgICAgIEVxdWl2YWxlbnQgdG8gRldSSVRFIC9DSEFS QUNURVIuIFdyaXRlcyB0aGUgY2hhcmFjdGVyIGMuIElmIGMKKyAgICAgICAgICBjb250YWlucyBt b3JlIHRoYW4gb25lIGNoYXJhY3Rlciwgb25seSB0aGUgZmlyc3QgaXMgd3JpdHRlbi4gSWYKKyAg ICAgICAgICBjIGlzIGVtcHR5IGEgTlVMIGlzIHdyaXR0ZW4uIFJldHVybnMgdGhlIG51bWJlciBv ZiBjaGFyYWN0ZXJzCisgICAgICAgICAgd3JpdHRlbiBvbiBzdWNjZXNzLCBvciBhIG5lZ2F0aXZl IGVycm9yIGNvZGUgdXBvbiBmYWlsdXJlLgorCisgICBcZl9wdXRsaW5lKGNoYW5uZWwsc3RyaW5n KQorICAgICAgICAgIEVxdWl2YWxlbnQgdG8gRldSSVRFIC9MSU5FLiBXcml0ZXMgdGhlIHN0cmlu ZyBhbmQgYWRkcyB0aGUKKyAgICAgICAgICBhcHByb3ByaWF0ZSBsaW5lIHRlcm1pbmF0aW9uIGNo YXJhY3RlciBvciBzZXF1ZW5jZS4gSWYgdGhlCisgICAgICAgICAgc3RyaW5nIGlzIGVtcHR5IG9y IG9taXR0ZWQsIGFuIGVtcHR5IGxpbmUgaXMgd3JpdHRlbi4gUmV0dXJucworICAgICAgICAgIHRo ZSBudW1iZXIgb2YgY2hhcmFjdGVycyB3cml0dGVuIG9uIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUg ZXJyb3IKKyAgICAgICAgICBjb2RlIHVwb24gZmFpbHVyZS4KKworICAgXGZfcHV0YmxvY2soY2hh bm5lbCxzdHJpbmcpCisgICAgICAgICAgRXF1aXZhbGVudCB0byBGV1JJVEUgL1NUUklORy4gV3Jp dGVzIHRoZSBzdHJpbmcgYXMgZ2l2ZW4uIElmIHRoZQorICAgICAgICAgIHN0cmluZyBpcyBlbXB0 eSBvciBvbWl0dGVkLCBub3RoaW5nIGlzIHdyaXR0ZW4uIFJldHVybnMgdGhlCisgICAgICAgICAg bnVtYmVyIG9mIGNoYXJhY3RlcnMgd3JpdHRlbiBvbiBzdWNjZXNzLCBvciBhIG5lZ2F0aXZlIGVy cm9yCisgICAgICAgICAgY29kZSB1cG9uIGZhaWx1cmUuCisKKzEuMjIuOC4gRmlsZSBJL08gRnVu Y3Rpb24gRXhhbXBsZXMKKworICBmb3BlbiAvcmVhZCBcJWMgb29mYS50eHQgICAgICAgICAgICA7 IE9wZW4gb3VyIGZhdm9yaXRlIGZpbGUgZm9yIHJlYWRpbmcKKyAgaWYgZmFpbHVyZSBleGl0IDEg ICAgICAgICAgICAgICAgICAgOyBDaGVjayB0aGF0IGl0J3Mgb3BlbgorICB3aGlsZSBub3QgXGZf ZW9mKFwlYykgeyAgICAgICAgICAgICA7IExvb3AgdW50aWwgRU9GCisgICAgICAubGluZSA6PSBc Zl9nZXRsaW5lKFwlYykgICAgICAgIDsgR2V0IGEgbGluZQorICAgICAgaWYgc3VjY2VzcyBlY2hv IHtcbShsaW5lKX0gICAgICA7IEVjaG8gaXQKKyAgfQorICBpZiBub3QgXGZfZW9mKFwlYykgeyAg ICAgICAgICAgICAgICA7IENoZWNrIHJlYXNvbiBmb3IgbG9vcCBleGl0CisgICAgICBleGl0IDEg RmlsZSBFcnJvcjogXGZfZXJybXNnKCkgIDsgSWYgbm90IEVPRiBzYXkgc28uCisgIH0KKworICBm cmV3aW5kIFwlYyAgICAgICAgICAgICAgICAgICAgICAgICA7IFJld2luZCB0aGUgZmlsZQorICB3 aGlsZSBub3QgXGZfZW9mKFwlYykgeyAgICAgICAgICAgICA7IFNhbWUgdGhpbmcgYnV0IHdpdGgg YmxvY2sgaS9vCisgICAgICAuYmxvY2sgOj0gXGZfZ2V0YmxvY2soXCVjLDI1NikgIDsgKG11Y2gg ZmFzdGVyIHRoYW4gbGluZSBpL28pCisgICAgICBpZiBzdWNjZXNzIHhlY2hvIHtcbShibG9jayl9 CisgIH0KKworICBmcmV3aW5kIFwlYyAgICAgICAgICAgICAgICAgICAgICAgICA7IFJld2luZCBh Z2FpbgorICB3aGlsZSBub3QgXGZfZW9mKFwlYykgeyAgICAgICAgICAgICA7IFNhbWUgZGVhbCBi dXQgd2l0aCBjaGFyYWN0ZXIgaS9vCisgICAgICAuYyA6PSBcZl9nZXRjaGFyKFwlYykgICAgICAg ICAgIDsgKG11Y2ggc2xvd2VyIHRoYW4gbGluZSBpL28pCisgICAgICBpZiBzdWNjZXNzIHhlY2hv IHtcbShjKX0KKyAgfQorICBjbG9zZSBcJWMKKworICAgVG8gY2xvc2UgYWxsIG9wZW4gZmlsZXMg KGVxdWl2YWxlbnQgdG8gRkNMT1NFIEFMTCk6CisKKyAgZm9yIFwlaSAwIFx2KGZfbWF4KS0xIDEg eworICAgICAgaWYgXGZfc3RhdHVzKFwlaSkgZmNsb3NlIFwlaQorICB9CisKKzEuMjMuIFRoZSBF WEVDIENvbW1hbmQKKworICAgVGhlIEVYRUMgY29tbWFuZCBpcyBhdmFpbGFibGUgb25seSBpbiBV TklYLgorCisgICBFWEVDIFsgL1JFRElSRUNUIF0gY29tbWFuZCBbIGFyZzEgWyBhcmcyIFsgLi4u IF0gXQorICAgICAgICAgIFJ1bnMgdGhlIGdpdmVuIGNvbW1hbmQgd2l0aCB0aGUgYXJndW1lbnRz IGluIHN1Y2ggYSB3YXkgdGhhdCB0aGUKKyAgICAgICAgICBjb21tYW5kIHJlcGxhY2VzIEMtS2Vy bWl0IGluIG1lbW9yeSwgYW5kIEMtS2VybWl0IGNlYXNlcyB0bworICAgICAgICAgIGV4ZWN1dGUu IEVYRUMgaXMgbGlrZSBSVU4sIGV4Y2VwdCBpbnN0ZWFkIG9mIHJldHVybmluZyB0bworICAgICAg ICAgIEMtS2VybWl0IHdoZW4gZmluaXNoZWQsIHRoZSBjb21tYW5kIHJldHVybnMgdG8gd2hhdGV2 ZXIgcHJvY2VzcworICAgICAgICAgIGludm9rZWQgS2VybWl0LgorCisgICBJbiB0aGUgbm9ybWFs IGNhc2UsIG5vIGZpbGVzIGFyZSBjbG9zZWQsIHNvIHRoZSBFWEVDJ2QgY29tbWFuZCBpbmhlcml0 cworICAgdGhlIG9wZW4gZmlsZXMsIHJlYWQvd3JpdGUgcG9pbnRlcnMsIHdvcmtpbmcgZGlyZWN0 b3J5LCBwcm9jZXNzIElELAorICAgdXNlciBJRCAodW5sZXNzIGNvbW1hbmQgaXMgU1VJRCksIGdy b3VwIElEICh1bmxlc3MgY29tbWFuZCBpcyBTR0lEKSwKKyAgIGdyb3VwcywgZXRjLiAoSW4gVU5J WCwgdGhlIEVYRUMgY29tbWFuZCBpcyBzaW1wbHkgYSBmcm9udCBlbmQgZm9yCisgICBleGVjdnAo KS4pCisKKyAgIElmIHRoZSAvUkVESVJFQ1Qgc3dpdGNoIGlzIGluY2x1ZGVkLCB0aGVuIGlmIGEg Y29ubmVjdGlvbiBpcyBvcGVuIChTRVQKKyAgIExJTkUgb3IgU0VUIEhPU1QpLCBpdCBiZWNvbWVz IHRoZSBzdGFuZGFyZCBpbnB1dCBhbmQgb3V0cHV0IG9mIHRoZQorICAgRVhFQydkIHByb2dyYW0u IElmIG5vIGNvbm5lY3Rpb24gaXMgb3BlbiwgdGhlIC9SRURJUkVDVCBzd2l0Y2ggaGFzIG5vCisg ICBlZmZlY3QuIEZvciBleGFtcGxlIHRvIHVzZSBDLUtlcm1pdCBmb3IgUFBQIGRpYWxpbmcgaW4g TGludXg6CisKKyAgc2V0IG1vZGVtIHR5cGUgdXNyICAgICAgICAgIDsgU3BlY2lmeSB0aGUga2lu ZCBvZiBtb2RlbSB5b3UgaGF2ZQorICBzZXQgbGluZSAvZGV2L3R0eVMxICAgICAgICAgOyBTcGVj aWZ5IHRoZSBkZXZpY2UgaXQncyBjb25uZWN0ZWQgdG8KKyAgc2V0IHNwZWVkIDU3NjAwICAgICAg ICAgICAgIDsgYW5kIHRoZSBzcGVlZAorICBzZXQgZmxvdyBydHMvY3RzICAgICAgICAgICAgOyBh bmQgZmxvdyBjb250cm9sLgorICBzZXQgZGlhbCByZXRyaWVzIDEwMCAgICAgICAgOyBUcnkgdGhl IGRpYWwgc2VxdWVuY2UgdXAgdG8gMTAwIHRpbWVzLgorICBkaWFsIHt7OS0yMTItNTU1LTEyMTJ9 ezktMjEyLTU1NS0xMjEzfXs5LTIxMi01NTUtMTIxNH17OS0yMTItNTU1LTEyMTV9fQorICBpZiBm YWlsIGV4aXQgMQorICBmb3IgXCVpIDEgMTYgMSB7ICAgICAgICAgICAgOyBUcnkgdXAgdG8gMTYg dGltZXMgdG8gZ2V0IGxvZ2luIHByb21wdAorICAgICAgaW5wdXQgMTAgTG9naW46ICAgICAgICAg OyBXYWl0IDEwIHNlYyBmb3IgaXQgdG8gYXBwZWFyCisgICAgICBpZiBzdWNjZXNzIGJyZWFrICAg ICAgICA7IEdvdCBpdCAtIHByb2NlZWQuLi4KKyAgICAgIG91dHB1dCBcMTMgICAgICAgICAgICAg IDsgU2VuZCBhIGNhcnJpYWdlIHJldHVybiBhbmQgdHJ5IGFnYWluCisgIH0KKyAgaWYgKCA+IFwl aSAxNiApIHN0b3AgMSBOTyBMT0dJTiBQUk9NUFQKKyAgbGluZW91dCBcKG15dXNlcmlkKSAgICAg ICAgIDsgU2VuZCB1c2VyIElECisgIGlucHV0IDMwIGFzc3dvcmQ6ICAgICAgICAgICA7IFdhaXQg Zm9yIFBhc3N3b3JkIHByb21wdAorICBpZiBmYWlsIHN0b3AgMSBOTyBQQVNTV09SRCBQUk9NUFQK KyAgbGluZW91dCBcbShteXBhc3N3b3JkKSAgICAgIDsgU2VuZCB0aGUgcGFzc3dvcmQuCisgIGV4 ZWMgL3JlZGlyZWN0IHBwcGQgICAgICAgICA7IFJlcGxhY2Ugb3Vyc2VsdmVzIHdpdGggcHBwZC4K KworICAgSW4gdGhpcyBleGFtcGxlIHdlIGFzc3VtZSB0aGF0IHRoZSBzY3JpcHQgaGFzIGFscmVh ZHkgc2V0IHVwIHRoZQorICAgbXl1c2VyaWQgYW5kIG15cGFzc3dvcmQgdmFyaWFibGVzIC0tIG5v cm1hbGx5IHRoZSBwYXNzd29yZCBzaG91bGQgYmUKKyAgIHByb21wdGVkIGZvciwgcmF0aGVyIHRo YW4gc3RvcmVkIG9uIGRpc2suIE5vdGljZSB0aGUgYWR2YW50YWdlcyBvdmVyCisgICB0aGUgd2Vs bC1rbm93biAiY2hhdCBzY3JpcHQiOgorICAgICAqIFlvdSBkb24ndCBoYXZlIHRvIGNvbnRyb2wg dGhlIG1vZGVtIGl0c2VsZiB3aXRoIEFUIGNvbW1hbmRzOworICAgICAgIEtlcm1pdCdzIERJQUwg Y29tbWFuZCBkb2VzIHRoaXMgZm9yIHlvdS4KKyAgICAgKiBZb3UgY2FuIGhhdmUgS2VybWl0IGF1 dG9tYXRpY2FsbHkgcmVkaWFsIGFzIG1hbnkgdGltZXMgYXMgeW91IHdhbnQKKyAgICAgICB1bnRp bCBpdCBnZXRzIGEgY29ubmVjdGlvbiAoaWYgdGhpcyBpcyBsZWdhbCBpbiB5b3VyIGNvdW50cnkp LgorICAgICAqIFlvdSBjYW4gaGF2ZSBLZXJtaXQgZmV0Y2ggdGhlIG51bWJlciBvciBudW1iZXJz IGZyb20gYSBkaWFsaW5nCisgICAgICAgZGlyZWN0b3J5LgorICAgICAqIFlvdSBjYW4gaGF2ZSBL ZXJtaXQgY3ljbGUgdGhyb3VnaCBhIGxpc3Qgb2YgcGhvbmUgbnVtYmVycyAodGhpcyBpcworICAg ICAgIG5ldyBpbiBDLUtlcm1pdCA3LjA7IHNlZSBbMzg5XVNlY3Rpb24gMi4xLjE2KSB3aXRob3V0 IGhhdmluZyB0bworICAgICAgIGVudGVyIHRoZSBudW1iZXJzIGluIGEgZGlhbGluZyBkaXJlY3Rv cnkuCisgICAgICogRGlhbGluZyBpcyBsb2NhdGlvbi1pbmRlcGVuZGVudDsgeW91IGNhbiB1c2Ug dGhlIHNhbWUgc2NyaXB0IHRvCisgICAgICAgZGlhbCBmcm9tIGRpZmZlcmVudCBhcmVhcyBvciBj b3VudHJpZXMuCisgICAgICogT25jZSB0aGUgY29ubmVjdGlvbiBpcyBtYWRlLCB0aGUgZnVsbCBw b3dlciBvZiBLZXJtaXQncyBzY3JpcHQKKyAgICAgICBsYW5ndWFnZSBpcyBhdmFpbGFibGUgdG8g bWFuYWdlIHRoZSBkaWFsb2cgd2l0aCB0aGUgdGVybWluYWwgc2VydmVyCisgICAgICAgb3Igb3Ro ZXIgZGV2aWNlIHRoYXQgYW5zd2VycyB0aGUgcGhvbmUgY2FsbC4KKworICAgTk9URTogUFBQIGFu ZCBTTElQIGRpYWxpbmcgYXJlIG5vdCBhdmFpbGFibGUgaW4gV2luZG93cyA5NS85OC9OVC8yMDAw LAorICAgd2hvc2UgQVBJcyBkbyBub3QgcHJvdmlkZSBhIG1ldGhvZCBmb3IgYW4gYXBwbGljYXRp b24gdG8gaGFuZCBvdmVyIGEKKyAgIGNvbm5lY3Rpb24gdG8gdGhlIFBQUCBvciBTTElQIGRyaXZl ci4KKworMS4yNC4gR2V0dGluZyBLZXl3b3JkIExpc3RzIHdpdGggJz8nCisKKyAgIFN1cHBvc2Ug eW91IHR5cGUgInRlIiBhdCB0aGUgQy1LZXJtaXQ+IDYuMCBwcm9tcHQgYW5kIHRoZW4gRXNjIG9y IFRhYgorICAgdG8gcmVxdWVzdCBrZXl3b3JkIGNvbXBsZXRpb24uIEtlcm1pdCBiZWVwcywgaW5k aWNhdGluZyB0aGF0IG1vcmUgdGhhbgorICAgb25lIGNvbW1hbmQgc3RhcnRzIHdpdGggInRlIi4g QnV0IGlmIHlvdSB0eXBlICc/JyB0byBzZWUgd2hhdCB0aGV5IGFyZSwKKyAgIEtlcm1pdCBzaG93 cyBvbmx5ICJ0ZWxuZXQiLiBTbyB3aHkgdGhlIGJlZXA/IEJlY2F1c2Ugb2YgaW52aXNpYmxlCisg ICBrZXl3b3JkcyBsaWtlICJ0ZWxvcHQiLCAidGVybWluYWwiLCBhbmQgInRleHQiLiBMb3RzIG9m IGtleXdvcmRzIGFyZQorICAgaW52aXNpYmxlIGJlY2F1c2UgdGhleSBhcmUgZWl0aGVyIHN5bm9u eW1zIGZvciBvdGhlciBrZXl3b3JkcyBvciBlbHNlCisgICBlc290ZXJpYyBvcHRpb25zIHRvIGJl IHVzZWQgb25seSBpbiBzcGVjaWFsIGNpcmN1bXN0YW5jZXMsIHNvIHdlIGRvbid0CisgICB3YW50 IHRoZW0gY2x1dHRlcmluZyB1cCB0aGUgbWVudXMuCisKKyAgIEJ1dCB0aGVuIHRoZXJlIGlzIG5v IHdheSBmb3IgeW91IHRvIGRpc2NvdmVyIHRoZW0uIFNvIGluIEMtS2VybWl0IDcuMCwKKyAgIGlm IHlvdSB0eXBlICc/JyBBRlRFUiB0aGUgYmVnaW5uaW5nIG9mIGEga2V5d29yZCBmaWVsZCwgdGhl biBpbnZpc2libGUKKyAgIGtleXdvcmRzIGFyZSBzaG93biB0b286CisKKyAgQy1LZXJtaXQ+IHRl PEVzYz48QkVFUD4KKyAgQy1LZXJtaXQ+IHRlPyBDb21tYW5kLCBvbmUgb2YgdGhlIGZvbGxvd2lu ZzoKKyAgIHRlbG5ldCAgICB0ZWxvcHQgICAgdGVybWluYWwgIHRleHQKKyAgQy1LZXJtaXQ+dGUK KworICAgQnV0IGlmICc/JyBpcyB0eXBlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgZmllbGQsIG9u bHkgdmlzaWJsZSBrZXl3b3JkcworICAgYXJlIHNob3duLCBhcyBiZWZvcmUgKHNvLCBpbiB0aGlz IGV4YW1wbGUsIGlmICc/JyBpcyB0eXBlZCBhdCB0aGUKKyAgIEMtS2VybWl0PiBwcm9tcHQsICJ0 ZWxuZXQiIGlzIHRoZSBvbmx5IGNvbW1hbmQgc2hvd24gdGhhdCBzdGFydHMgd2l0aAorICAgInRl IikuCisKKzIuIE1BS0lORyBBTkQgVVNJTkcgQ09OTkVDVElPTlMgVGhlIFNFVCBMSU5FLCBTRVQg SE9TVCwgYW5kIFNFVCBQT1JUIChhCitzeW5vbnltIGZvciBTRVQgTElORSkgY29tbWFuZHMgaGF2 ZSBuZXcgc3lub255bXMsIGluIHdoaWNoIHRoZSB3b3JkIFNFVCBpcworcmVwbGFjZWQgYnkgdGhl IHdvcmQgT1BFTjogT1BFTiBMSU5FLCBldGMuIFRoZXJlIGlzIG5vIG5ldyBmdW5jdGlvbmFsaXR5 CitoZXJlLCBidXQgT1BFTiBpcyBhIGJldHRlciB2ZXJiLCBzaW5jZSBTRVQgZ2VuZXJhbGx5IHRh a2VzIG5vIGFjdGlvbiwgd2hlcmVhcwordGhlc2UgY29tbWFuZHMgYWN0dWFsbHkgdHJ5IHRvIG9w ZW4gYSBjb25uZWN0aW9uLiBGdXJ0aGVybW9yZSwgdGhlcmUgaXMgdGhlCitzeW1tZXRyeSB3aXRo IENMT1NFLiAyLjAuIFNFVCBMSU5FIGFuZCBTRVQgSE9TVCBDb21tYW5kIFN3aXRjaGVzVGhlIFNF VCBMSU5FCisoU0VUIFBPUlQpIGFuZCBTRVQgSE9TVCBjb21tYW5kcyBub3cgYWxsb3cgc3dpdGNo ZXMgYmVmb3JlIHRoZSBkZXZpY2Ugb3IgaG9zdAorbmFtZSwgaW4gbW9zdCBjYXNlcywgYW5kIHVu ZGVyIGNlcnRhaW4gY2lyY3Vtc3RhbmNlcywgYWxzbyBhdCB0aGUgZW5kLiBUaGUKK25ldyBzeW50 YXggaXMgYmFja3dhcmRzIGNvbXBhdGlibGUgd2l0aCB0aGUgcHJldmlvdXMgc3ludGF4OyB0aHVz IFNFVCBMSU5FLAorU0VUIFBPUlQsIGFuZCBTRVQgSE9TVCBjb21tYW5kcyBpbiBjb21tYW5kIGZp bGVzIHdyaXR0ZW4gZm9yIEMtS2VybWl0IDYuMCBvcgorZWFybGllciBzdGlsbCB3b3JrLiBUaGUg ZXhwYW5kZWQgc3ludGF4IGlzOgorCit7IE9QRU4sIFNFVCB9IHsgTElORSwgUE9SVCwgSE9TVCB9 IFsgc3dpdGNoZXMgXSBkZXZpY2Utb3ItYWRkcmVzcyBbIHN3aXRjaGVzCitdCisKK1RoZSBmaXJz dCBncm91cCBvZiBzd2l0Y2hlcyBpczoKKworICAgL05FVFdPUkstVFlQRTp7VENQL0lQLFguMjUs UElQRSxQVFkuLi59CisgICAgICAgICAgV2hlbiBtb3JlIHRoYW4gb25lIG5ldHdvcmsgdHlwZSBp cyBhdmFpbGFibGUsIHRoaXMgbGV0cyB5b3UKKyAgICAgICAgICBzcGVjaWZ5IHRoZSB0eXBlIG9m IG5ldHdvcmsgdG8gdXNlIGZvciB0aGlzIGNvbm5lY3Rpb24gd2l0aG91dAorICAgICAgICAgIGFm ZmVjdGluZyB5b3VyIGdsb2JhbCBTRVQgTkVUV09SSyBUWVBFLiBTZWUgWzM5MF1TZWN0aW9uIDIu NworICAgICAgICAgIGFib3V0IHBpcGVzIGFuZCBwdHlzLgorCisgICAvVVNFUklEOltzdHJpbmdd CisgICAgICAgICAgVGhpcyBzd2l0Y2ggaXMgZXF1aXZhbGVudCB0byBTRVQgTE9HSU4gVVNFUklE LiBJZiBhIHN0cmluZyBpcworICAgICAgICAgIGdpdmVuLCBpdCBzZW50IHRvIGhvc3QgZHVyaW5n IFRlbG5ldCBuZWdvdGlhdGlvbnM7IGlmIHRoaXMKKyAgICAgICAgICBzd2l0Y2ggaXMgZ2l2ZW4g YnV0IHRoZSBzdHJpbmcgaXMgb21pdHRlZCwgbm8gdXNlciBJRCBpcyBzZW50IHRvCisgICAgICAg ICAgdGhlIGhvc3QuIElmIHRoaXMgc3dpdGNoIGlzIG5vdCBnaXZlbiwgeW91ciBjdXJyZW50IExP R0lOIFVTRVJJRAorICAgICAgICAgIChcdih1c2VyaWQpIHZhbHVlKSwgaWYgYW55LCBpcyBzZW50 LiBVbmxpa2UgbW9zdCBvdGhlciBzd2l0Y2hlcywKKyAgICAgICAgICB0aGlzIG9uZSBpcyAic3Rp Y2t5Iiwgc2luY2UgdGhlIHZhbHVlIG11c3QgcGVyc2lzdCB0aHJvdWdob3V0CisgICAgICAgICAg dGhlIHNlc3Npb24gaW4gY2FzZSB0aGUgc2VydmVyIHJlcXVlc3RzIHRoZSBJRCBzdHJpbmcgYXQg YSBsYXRlcgorICAgICAgICAgIHRpbWUuCisKKyAgIC9DT05ORUNUCisgICAgICAgICAgRW50ZXIg Q09OTkVDVCBtb2RlIGltbWVkaWF0ZWx5IGFuZCBhdXRvbWF0aWNhbGx5IGFmdGVyIHRoZQorICAg ICAgICAgIGRldmljZSBvciBjb25uZWN0aW9uIGlzIG9wZW4uIE9uIHNlcmlhbCBkZXZpY2VzLCBo b3dldmVyLCB3aGVuCisgICAgICAgICAgQ0FSUklFUi1XQVRDSCBpcyBub3QgT0ZGLCB3YWl0IHVw IHRvIDEgc2Vjb25kIGZvciB0aGUgQ2FycmllcgorICAgICAgICAgIERldGVjdCBzaWduYWwgdG8g YXBwZWFyIGJlZm9yZSB0cnlpbmcgdG8gY29ubmVjdCwgdG8gZ2l2ZSB0aGUKKyAgICAgICAgICBk ZXZpY2UgdGltZSB0byByZWFjdCBEVFIsIHdoaWNoIG1pZ2h0IGhhdmUgYmVlbiBvZmYgcHJpb3Ig dG8KKyAgICAgICAgICBvcGVuaW5nIHRoZSBkZXZpY2UuCisKKyAgIC9TRVJWRVIKKyAgICAgICAg ICBFbnRlciBzZXJ2ZXIgbW9kZSBpbW1lZGlhdGVseSBhbmQgYXV0b21hdGljYWxseSBhZnRlciB0 aGUgZGV2aWNlCisgICAgICAgICAgb3IgY29ubmVjdGlvbiBpcyBvcGVuLiBUcmVhdG1lbnQgb2Yg Y2FycmllciBpcyB0aGUgc2FtZSBhcyBmb3IKKyAgICAgICAgICAvQ09OTkVDVC4KKworICAgL1dB SVQKKyAgIC9OT1dBSVQKKyAgICAgICAgICBGb3IgVGVsbmV0IGNvbm5lY3Rpb25zIG9ubHk6IExp a2UgU0VUIFRFTE5FVCBXQUlUIHsgT04sIE9GRiB9LAorICAgICAgICAgIGJ1dCBhcHBsaWVzIG9u bHkgdG8gdGhpcyBjb25uZWN0aW9uLCBhbmQgaW4gZmFjdCBhcHBsaWVzIG9ubHkKKyAgICAgICAg ICB3aGVuIE9QRU5pbmcgdGhpcyBjb25uZWN0aW9uICh3aGljaCBpcyB1c3VhbGx5IHRoZSBvbmx5 IHBsYWNlIGl0CisgICAgICAgICAgbWF0dGVycykuIFR5cGljYWxseSB5b3Ugd291bGQgdXNlIFRF TE5FVCAvTk9XQUlUIHRvIG1ha2UgYQorICAgICAgICAgIGNvbm5lY3Rpb24gdG8gYSBtaXNiZWhh dmluZyBUZWxuZXQgc2VydmVyIHRoYXQgZG9lcyBub3QgcmVwbHkgdG8KKyAgICAgICAgICBuZWdv dGlhdGlvbnMgYXMgcmVxdWlyZWQgYnkgdGhlIFRlbG5ldCBwcm90b2NvbCBkZWZpbml0aW9uLgor CisgICBOb3RlOiAvQ09OTkVDVCBhbmQgL1NFUlZFUiBzd2l0Y2hlcyBhcmUgbm90IGF2YWlsYWJs ZSBpbiB0aGUgUkxPR0lOIGFuZAorICAgVEVMTkVUIGNvbW1hbmRzLCBzaW5jZSB0aGVzZSBjb21t YW5kcyBhbHJlYWR5IGluY2x1ZGUgYW4gaW1wbGljaXQKKyAgIC9DT05ORUNUIGFuZCBwcmVjbHVk ZSBhdXRvbWF0aWMgZW50cnkgaW50byBzZXJ2ZXIgbW9kZS4KKworICAgVGhlIC9DT05ORUNUIGFu ZCAvU0VSVkVSIHN3aXRjaGVzIGFyZSBlc3BlY2lhbGx5IHVzZWZ1bCB3aXRoICJzZXQgaG9zdAor ICAgKiIgY29ubmVjdGlvbnMuIEZvciBleGFtcGxlLCBzdXBwb3NlIHlvdSB3YW50IHRvIHN0YXJ0 IGEgS2VybWl0IHNlcnZlcgorICAgb24gc29ja2V0IDMwMDAgb2YgeW91ciBUQ1AgaG9zdC4gTm9y bWFsbHkgeW91IHdvdWxkIGhhdmUgdG8gZ2l2ZSB0aGUKKyAgIGNvbW1hbmQ6CisKKyAgc2V0IGhv c3QgKiAzMDAwCisKKyAgIGFuZCB0aGVuIHdhaXQgZm9yIGEgY29ubmVjdGlvbiB0byBjb21lIGlu LCBhbmQgb25seSB0aGVuIGNvdWxkIHlvdSBnaXZlCisgICB0aGUgU0VSVkVSIGNvbW1hbmQgKG9y IGVsc2UgZGVmaW5lIGEgbWFjcm8gdG8gZG8gdGhpcywgYW5kIHRoZW4gZXhlY3V0ZQorICAgdGhl IG1hY3JvKS4gTm93IHlvdSBjYW4gZG8gaXQgaW4gb25lIHN0ZXA6CisKKyAgc2V0IGhvc3QgL3Nl cnZlciAqIDMwMDAKKworICAgVGhpcyB0ZWxscyBDLUtlcm1pdCB0byB3YWl0IGZvciB0aGUgY29u bmVjdGlvbiBhbmQgdGhlbiBlbnRlciBzZXJ2ZXIKKyAgIG1vZGUgb25jZSBpdCBjb21lcyBpbiwg bm8gbWF0dGVyIGhvdyBsb25nIGl0IHRha2VzLiBTaW1pbGFybHksICJzZXQKKyAgIGhvc3QgL2Nv bm4gKiIgY2FuIGJlIHVzZWQgdG8gd2FpdCBmb3IgYSAiY2hhdCIgY29ubmVjdGlvbiB0byBjb21l IGluLgorCisgICBBbm90aGVyIHNldCBvZiBzd2l0Y2hlcyBpcyBhdmFpbGFibGUgaW4gVk1TIG9u bHksIGZvciB1c2Ugb25seSB3aXRoIFNFVAorICAgTElORToKKworICAgL1NIQVJFCisgICAgICAg ICAgQWxsb3dzIHRoZSBTRVQgTElORSBkZXZpY2UgdG8gYmUgb3BlbmVkIGluIHNoYXJlZCBtb2Rl LiBOb3JtYWxseQorICAgICAgICAgIGl0IG1ha2VzIG5vIHNlbnNlIHRvIG9wZW4gYSBzZXJpYWwg ZGV2aWNlIGluIHNoYXJlZCBtb2RlLCBidXQKKyAgICAgICAgICBpdCdzIG5lY2Vzc2FyeSB3aGVu IEMtS2VybWl0IGlzIHJ1bm5pbmcgaW4gYW4gZW52aXJvbm1lbnQgc3VjaAorICAgICAgICAgIGFz IERFQ0ludGFjdCwgdGhhdCBvcGVucyB5b3VyIGpvYidzIGNvbnRyb2xsaW5nIHRlcm1pbmFsIGlu IHN1Y2gKKyAgICAgICAgICBhIHdheSB0aGF0IEMtS2VybWl0IGNhbid0IG9wZW4gaXQgdG9vLCB1 bmxlc3MgaXQgZW5hYmxlcyBTSEFSRQorICAgICAgICAgIHByaXZpbGVnZS4gTm90ZTogU0hBUkUg cHJpdmlsZWdlIGlzIHJlcXVpcmVkLgorCisgICAvTk9TSEFSRQorICAgICAgICAgIFJlcXVpcmVz IHRoYXQgdGhlIFNFVCBMSU5FIGRldmljZSBub3QgYmUgaW4gdXNlIGJ5IGFueSBvdGhlcgorICAg ICAgICAgIHByb2Nlc3MgaW4gb3JkZXIgZm9yIGl0IHRvIGJlIHN1Y2Nlc3NmdWxseSBvcGVuZWQg YnkgQy1LZXJtaXQuCisgICAgICAgICAgSWYgbmVpdGhlciAvU0hBUkUgbm9yIC9OT1NIQVJFIGlz IHNwZWNpZmllZCwgL05PU0hBUkUgaXMgdXNlZC4KKworICAgVGhlIHNlY29uZCBncm91cCBvZiBz d2l0Y2hlcyBpczoKKworICAgL05PLVRFTE5FVC1JTklUCisgICAgICAgICAgRG8gbm90IHNlbmQg aW5pdGlhbCBUZWxuZXQgbmVnb3RpYXRpb25zIGV2ZW4gaWYgdGhpcyBpcyBhIFRlbG5ldAorICAg ICAgICAgIHBvcnQuCisKKyAgIC9SQVctU09DS0VUCisgICAgICAgICAgVGhpcyBpcyBhIGNvbm5l Y3Rpb24gdG8gYSByYXcgVENQIHNvY2tldCAoWzM5MV1TZWN0aW9uIDIuMy41KS4KKworICAgL1JM T0dJTgorICAgICAgICAgIFVzZSBSbG9naW4gcHJvdG9jb2wgZXZlbiBpZiB0aGlzIGlzIG5vdCBh biBSbG9naW4gcG9ydC4KKworICAgL1RFTE5FVAorICAgICAgICAgIFNlbmQgaW5pdGlhbCBUZWxu ZXQgbmVnb3RpYXRpb25zIGV2ZW4gaWYgdGhpcyBpcyBub3QgYSBUZWxuZXQKKyAgICAgICAgICBw b3J0LgorCisgICBBcyBvZiBDLUtlcm1pdCA3LjAgYW5kIEs5NSAxLjEuMTksIHRoZSBURUxORVQg Y29tbWFuZCBpbmNsdWRlcyBhbgorICAgaW1wbGljaXQgL1RFTE5FVCBzd2l0Y2guIFNvIGlmIHlv dSBURUxORVQgdG8gYSBub24tVEVMTkVUIHBvcnQsIEtlcm1pdAorICAgc2VuZHMgaW5pdGlhbCBU ZWxuZXQgbmVnb3RpYXRpb25zLiBUaGlzIG1ha2VzIHNlbnNlLCBzaW5jZSB0aGF0J3Mgd2hhdAor ICAgInRlbG5ldCIgbWVhbnMuCisKKyAgIElmIHlvdSB3YW50IHRvIG1ha2UgYSBjb25uZWN0aW9u IHRvIGEgbm9uLVRlbG5ldCBwb3J0IHdpdGhvdXQgc2VuZGluZworICAgaW5pdGlhbCBUZWxuZXQg bmVnb3RpYXRpb25zLCB1c2U6CisKKyAgc2V0IGhvc3QgWyAvY29ubmVjdCBdIG5hbWUtb3ItYWRk cmVzcyBwb3J0CisKKyAgIG9yOgorCisgIHRlbG5ldCBuYW1lLW9yLWFkZHJlc3MgcG9ydCAvbm8t dGVsbmV0LWluaXQKKworICAgQWRkaXRpb25hbCBzd2l0Y2hlcyBtaWdodCBiZSBhZGRlZCBpbiB0 aGUgZnV0dXJlOyB0eXBlICJzZXQgaG9zdCA/IiBvcgorICAgInNldCBsaW5lID8iIHRvIHNlZSBh IGN1cnJlbnQgbGlzdC4KKworMi4xLiBEaWFsaW5nCisKKyAgIEF1dG9tYXRpYyByZWRpYWxpbmcg aXMgaWxsZWdhbCBvciByZXN0cmljdGVkIGluIG1hbnkgY291bnRyaWVzLCBzbworICAgdW50aWwg Qy1LZXJtaXQgNy4wLCBpdCB3YXMgZGlzYWJsZWQgYnkgZGVmYXVsdCwgaS5lLiB1bnRpbCBhIFNF VCBESUFMCisgICBSRVRSSUVTIGNvbW1hbmQgd2FzIGdpdmVuLiBJbiBDLUtlcm1pdCA3LjAsIGlm IG5vIFNFVCBESUFMIFJFVFJJRVMKKyAgIGNvbW1hbmQgaGFzIGJlZW4gZ2l2ZW4sIGEgZGVmYXVs dCBpcyBwaWNrZWQgZHluYW1pY2FsbHkgYXQgRElBTCB0aW1lCisgICBiYXNlZCBvbiB0aGUgY2Fs bGluZyBjb3VudHJ5IGNvZGUsIGlmIGtub3duLiBBdCB0aGlzIHdyaXRpbmcsIHRoZSBvbmx5Cisg ICBjb3VudHJ5IGNvZGUga25vd24gdG8gaGF2ZSBubyByZXN0cmljdGlvbnMgb24gYXV0b21hdGlj IHJlZGlhbGluZyBpcyAxLgorICAgU28gaW4gdGhpcyBjYXNlIGEgbGltaXQgb2YgMTAgaXMgY2hv c2VuOyBvdGhlcndpc2UgMS4gSWYgeW91IGhhdmUgbm90CisgICBnaXZlbiBhbiBleHBsaWNpdCBT RVQgRElBTCBSRVRSSUVTIGNvbW1hbmQsIFNIT1cgRElBTCBzaG93cyB0aGUgdmFsdWUKKyAgIGFz ICIoYXV0bykiLCBhbmQgdGhlbiB0aGUgdmFsdWUgYWN0dWFsbHkgdXNlZCBpcyBzaG93biB3aGVu IHlvdSBnaXZlCisgICB0aGUgRElBTCBjb21tYW5kLgorCisgICBBcyBvZiBDLUtlcm1pdCA3LjAs IGF1dG9tYXRpYyByZWRpYWxpbmcgaXMgYXV0b21hdGljYWxseSBjYW5jZWxlZCBpZgorICAgdGhl IGNhbGwgY291bGQgbm90IGJlIHBsYWNlZCBiZWNhdXNlIG5vIGRpYWx0b25lIHdhcyBkZXRlY3Rl ZC4KKworMi4xLjEuIFRoZSBEaWFsIFJlc3VsdCBNZXNzYWdlCisKKyAgIElmIERJQUwgRElTUExB WSBpcyBub3QgT04sIHRoZSAiQ2FsbCBjb21wbGV0ZSIgbWVzc2FnZSBub3cgc2hvd3MgdGhlCisg ICBtb2RlbSdzIGNhbGwgcmVzdWx0IG1lc3NhZ2UsIGZvciBleGFtcGxlOgorCisgIERpYWxpbmc6 IC4uLgorICBDYWxsIGNvbXBsZXRlOiAiQ09OTkVDVCAzMTIwMC9BUlEvVjMyL0xBUE0vVjQyQklT IgorCisgICBUaGUgZXhhY3QgZm9ybWF0IGFuZCBjb250ZW50cyBvZiB0aGlzIG1lc3NhZ2UsIG9m IGNvdXJzZSwgZGVwZW5kcyBvbgorICAgdGhlIG1ha2UsIG1vZGVsLCBhbmQgY29uZmlndXJhdGlv biBvZiB5b3VyIG1vZGVtLCBzbyB1c2UgeW91ciBtb2RlbQorICAgbWFudWFsIHRvIGludGVycHJl dCBpdC4gVGhlIGNhbGwgcmVzdWx0IG1lc3NhZ2UgaXMgYWxzbyBhdmFpbGFibGUgaW4KKyAgIEMt S2VybWl0J3MgXHYoZGlhbHJlc3VsdCkgdmFyaWFibGUuCisKKyAgQy1LZXJtaXQ+IGVjaG8gXHYo ZGlhbHJlc3VsdCkKKyAgQ09OTkVDVCAzMTIwMC9BUlEvVjMyL0xBUE0vVjQyQklTCisgIEMtS2Vy bWl0PiBlY2hvIFNwZWVkID0gXGZ3b3JkKFx2KGRpYWxyZXN1bHQpLDIpCisgIFNwZWVkID0gMzEy MDAKKyAgQy1LZXJtaXQ+CisKKyAgIFN1cHBvc2UgeW91ciBtb2RlbSByZXBvcnRzIHRoZSBtb2R1 bGF0aW9uIHNwZWVkIGFzIHNob3duIGFib3ZlIGFuZCB5b3UKKyAgIHdhbnQgdG8gZW5zdXJlIHlv dXIgY2FsbCBpcyBjb21wbGV0ZWQgYXQgKHNheSkgMjQwMDAgYnBzIG9yIG1vcmUuIFlvdQorICAg Y2FuIHVzZSBhIGxpdHRsZSBtYWNybyB0byBkbyB0aGUgam9iOgorCitkZWZpbmUgSFNESUFMIHsg ICAgICAgICAgICAgICAgOyBIaWdoIFNwZWVkIERJQUwKKyAgICBsb2NhbCBcJXMKKyAgICBpZiA8 IFx2KGFyZ2MpIDEgaWYgbm90IGRlZiBcdihkaWFsbnVtYmVyKSBlbmQgMSBVc2FnZTogXCUwIG51 bWJlcgorICAgIHNldCBkaWFsIHJldHJpZXMgMTAwCisgICAgc2V0IGRpYWwgaW50ZXJ2YWwgMQor ICAgIHdoaWxlIHRydWUgeworICAgICAgICBkaWFsIFwlKgorICAgICAgICBpZiBmYWlsIGVuZCAx IERJQUwgZmFpbGVkLgorICAgICAgICBhc2cgXCVzIFxmd29yZChcdihkaWFscmVzdWx0KSwyKQor ICAgICAgICBpZiBkZWYgXCVzIGlmIG51bWVyaWMgXCVzIGlmIG5vdCA8IFwlcyAyNDAwMCBicmVh aworICAgIH0KK30KKworICAgKFNlZSBbMzkyXVNlY3Rpb24gNy41IGFib3V0IHRoZSBcJSogdmFy aWFibGUuKQorCisyLjEuMi4gTG9uZy1EaXN0YW5jZSBEaWFsaW5nIENoYW5nZXMKKworICAgRHVl IHRvIHRoZSBnbHV0IG9mIGNlbGwgcGhvbmVzLCBwYWdlcnMsIGZheCBtYWNoaW5lcywgSVNQcywg ZXRjLCBhcmVhCisgICBjb2RlcyBhbmQgZGlhbGluZyBydWxlcyBhcmUgY2hhbmdpbmcgYWxsIHRo ZSB0aW1lLiBJbiB0aGUgTm9ydGgKKyAgIEFtZXJpY2FuIE51bWJlcmluZyBQbGFuIChOQU5QKSBj b3VudHJpZXMgKFVTQSwgQ2FuYWRhLCBldGMpLCBhcmVhIGNvZGVzCisgICBhcmUgc3BsaXQgb3Ig b3ZlcmxheWVkIHdpdGggaW5jcmVhc2luZyBmcmVxdWVuY3ksIGFuZCAxMC0gYW5kIDExLWRpZ2l0 CisgICBkaWFsaW5nIGlzIGdyYWR1YWxseSBiZWNvbWluZyB0aGUgbm9ybSBmb3IgbG9jYWwgY2Fs bHMuIENoYW5nZXMgYXJlCisgICBvY2N1cnJpbmcgSW4gRXVyb3BlLCB0b28sIHBhcnRseSBmb3Ig dGhlc2UgcmVhc29ucyBhbmQgcGFydGx5IGJlY2F1c2UKKyAgIG9mIHNvbWUgbmV3IEVDIHJ1bGVz LgorCisgICBJbiBGcmFuY2UsIGVmZmVjdGl2ZSAxOCBPY3RvYmVyIDE5OTYsIGFsbCBjYWxscywg ZXZlbiBsb2NhbCBvbmVzLCBtdXN0CisgICBiZSBkaWFsZWQgd2l0aCBhbiBhcmVhIGNvZGUuIEZy ZW5jaCBhcmVhIGNvZGVzIGFyZSBwcmVzZW50bHkgMS1kaWdpdAorICAgbnVtYmVycywgMS02LCBh bmQgdGhlIGxvbmctZGlzdGFuY2UgZGlhbGluZyBwcmVmaXggaXMgMC4gQWxsIGNhbGxzCisgICB3 aXRoaW4gRnJhbmNlIGFyZSBjb25zaWRlcmVkIGxvbmcgZGlzdGFuY2UgYW5kIGJlZ2luIHdpdGgg MDEsIDAyLCAuLi4sCisgICAwNi4KKworICAgRWZmZWN0aXZlIDEgTWF5IDE5OTcsIGFsbCBjYWxs cyB3aXRoaW4gdGhlIFVTIHN0YXRlIG9mIE1hcnlsYW5kLCBldmVuCisgICBsb2NhbCBvbmVzLCBt dXN0IGJlIGRpYWxlZCB3aXRoIGFuIGFyZWEgY29kZSBidXQgd2l0aG91dCB0aGUKKyAgIGxvbmct ZGlzdGFuY2UgcHJlZml4IC0tIHRoaXMgaXMgdGhlIG5vdyB3aWRlbHkta25vd24gTm9ydGggQW1l cmljYW4KKyAgIHBoZW5vbWVub24gb2YgInRlbiBkaWdpdCBkaWFsaW5nIi4gVGhlIHNhbWUgaXMg aGFwcGVuaW5nIGVsc2V3aGVyZSAtLQorICAgbWFueSBjaXRpZXMgaW4gRmxvcmlkYSBhZG9wdGVk IDEwLWRpZ2l0IGRpYWxpbmcgaW4gMTk5OC4KKworICAgSW4gSXRhbHkgYmVnaW5uaW5nIDE5IEp1 bmUgMTk5OCwgYWxsIGNhbGxzIHRvIGZpeGVkIChhcyBvcHBvc2VkIHRvCisgICBtb2JpbGUpIG51 bWJlcnMgbXVzdCBiZSBwcmVmaXhlZCBieSAwLiBXaGVuIGNhbGxpbmcgaW50byBJdGFseSBmcm9t CisgICBvdXRzaWRlLCB0aGUgMCBtdXN0IGZvbGxvdyB0aGUgY291bnRyeSBjb2RlICgzOSkuIENh bGxzIHRvIGNlbGwgcGhvbmVzLAorICAgaG93ZXZlciwgbXVzdCBiZSBwbGFjZWQgd2l0aG91dCB0 aGUgMC4gVGhlbiBvbiAyOSBEZWNlbWJlciAyMDAwLCB0aGUgMAorICAgd2lsbCBiZWNvbWUgYSA0 IChmb3IgY2FsbGluZyBmaXhlZCBudW1iZXJzKSBhbmQgYSBwcmVmaXggb2YgMyBtdXN0IHVzZWQK KyAgIGZvciBjYWxsaW5nIG1vYmlsZSBwaG9uZXMuIE1vcmUgaW5mbyBhdDoKKyAgIGh0dHA6Ly93 d3cudGVsZWNvbWl0YWxpYS5pdC9ucG5uLy4KKworICAgSW4gU3BhaW4sIGVmZmVjdGl2ZSA0IEFw cmlsIDE5OTgsIHdpdGggaGFyZCBjdXRvdmVyIG9uIDE4IEp1bHkgMTk5OCwKKyAgIGFsbCBjYWxs cyB3aXRoaW4gdGhlIGNvdW50cnkgbXVzdCBiZSBkaWFsZWQgd2l0aCA5IGRpZ2l0cywgYW5kIGFs bAorICAgY2FsbHMgZnJvbSBvdXRzaWRlIFNwYWluIG11c3QgYWxzbyBiZSBkaWFsZWQgd2l0aCA5 IGRpZ2l0cyAoYWZ0ZXIgdGhlCisgICBjb3VudHJ5IGNvZGUsIDM0KS4gVGhlIG5ldyA5LWRpZ2l0 IG51bWJlcnMgYWxsIGJlZ2luIHdpdGggIjkiLiBNb3JlCisgICBpbmZvIGF0OiBbMzkzXWh0dHA6 Ly93d3cudGVsZWZvbmljYS5lcy9jYW1iaW9kZW51bWVyYWNpb24vCisKKyAgIFNldmVyYWwgbmV3 IGRpYWxpbmcgZmVhdHVyZXMgYW5kIGNvbW1hbmRzIGhhdmUgYmVlbiBhZGRlZCBpbiB2ZXJzaW9u CisgICA2LjEgYW5kIDcuMCB0byBhZGRyZXNzIHRoZXNlIGNoYW5nZXMuCisKKyAgIEMtS2VybWl0 IDYuMCBhbmQgS2VybWl0IDk1IDEuMS4xMSBhbmQgZWFybGllciBoYW5kbGUgdGhlIEZyZW5jaAor ICAgc2l0dWF0aW9uIHZpYSBhIHJlYXNvbmFibGUgc3VidGVyZnVnZSAoc2V0dGluZyB0aGUgbG9j YWwgYXJlYSBjb2RlIHRvIGEKKyAgIG5vbmV4aXN0ZW50IG9uZSksIGJ1dCBkaWQgbm90IGhhbmRs ZSAidGVuLWRpZ2l0IGRpYWxpbmciIHdlbGwgYXQgYWxsOworICAgdGhlIHJlY29tbWVuZGVkIHRl Y2huaXF1ZSB3YXMgdG8gY2hhbmdlIHRoZSBsb25nLWRpc3RhbmNlIGRpYWxpbmcKKyAgIHByZWZp eCB0byBub3RoaW5nLCBidXQgdGhpcyBkZWZlYXRlZCBLZXJtaXQncyAibGlzdCBudW1iZXJzIGZv ciBvbmUKKyAgIG5hbWUiIGZlYXR1cmUgd2hlbiB0aGUgbnVtYmVycyB3ZXJlIGluIGRpZmZlcmVu dCBsb2NhdGlvbnMuIEZvcgorICAgZXhhbXBsZToKKworICBzZXQgZGlhbCBsZC1wcmVmaXgKKyAg ZGlhbCBvbmxpbmVzZXJ2aWNlCisKKyAgIHdoZXJlICJvbmxpbmVzZXJ2aWNlIiBpcyBhIGRpYWxp bmcgZGlyZWN0b3J5IGVudHJ5IG5hbWUgY29ycmVzcG9uZGluZworICAgdG8gZW50cmllcyB0aGF0 IGFyZSBpbiAoc2F5KSBNYXJ5bGFuZCBhcyB3ZWxsIGFzIG90aGVyIHN0YXRlcywgd291bGQKKyAg IG5vdCBjb3JyZWN0bHkgZGlhbCB0aGUgbnVtYmVycyBub3QgaW4gTWFyeWxhbmQuCisKKyAgIEEg bmV3IGNvbW1hbmQgbGV0cyB5b3Ugc3BlY2lmeSBhIGxpc3Qgb2YgYXJlYSBjb2RlcyB0byBiZSBj b25zaWRlcmVkCisgICBsb2NhbCwgZXhjZXB0IHRoYXQgdGhlIGFyZWEgY29kZSBtdXN0IGJlIGRp YWxlZDoKKworICAgU0VUIERJQUwgTEMtQVJFQS1DT0RFUyBbIGFyZWFjb2RlIFsgYXJlYWNvZGUg WyBhcmVhY29kZSBbIC4uLiBdIF0gXSBdCisgICAgICAgICAgVGhlIGxpc3QgbWF5IGluY2x1ZGUg dXAgdG8gMzIgYXJlYSBjb2Rlcy4gSWYgYSBudW1iZXIgaXMgY2FsbGVkCisgICAgICAgICAgd2hv c2UgYXJlYSBjb2RlIGlzIGluIHRoaXMgbGlzdCwgaXQgaXMgZGlhbGVkIFdJVEhPVVQgdGhlCisg ICAgICAgICAgbG9uZy1kaXN0YW5jZSBwcmVmaXgsIGJ1dCBXSVRIIHRoZSBhcmVhIGNvZGUuCisK KyAgIFNvIGluIE1hcnlsYW5kLCB3aGljaCAobGFzdCB0aW1lIHdlIGxvb2tlZCkgaGFzIHR3byBh cmVhIGNvZGVzLCA0MTAgYW5kCisgICAzMDEsIHRoZSBzZXR1cCB3b3VsZCBiZToKKworICBTRVQg RElBTCBMQy1BUkVBLUNPREVTIDQxMCAzMDEKKworICAgRXhhbXBsZToKKworICBTRVQgRElBTCBM RC1QUkVGSVggMQorICBTRVQgRElBTCBBUkVBLUNPREUgMzAxCisgIFNFVCBESUFMIExDLUFSRUEt Q09ERVMgNDEwIDMwMSA8LS0gQXJlYSBjb2RlcyBpbiAxMC1kaWdpdCBkaWFsaW5nIHJlZ2lvbgor ICBESUFMICsxICgzMDEpIDc2NS00MzIxICAgICAgICAgPC0tIERpYWxzIDMwMTc2NTQzMjEgIChs b2NhbCB3aXRoIGFyZWEgY29kZSkKKyAgRElBTCArMSAoNDEwKSA3NjUtNDMyMSAgICAgICAgIDwt LSBEaWFscyA0MTA3NjU0MzIxICAobG9jYWwgd2l0aCBhcmVhIGNvZGUpCisgIERJQUwgKzEgKDIx MikgNzY1LTQzMjEgICAgICAgICA8LS0gRGlhbHMgMTIxMjc2NTQzMjEgKGxvbmcgZGlzdGFuY2Up CisKKyAgIFRoZSBTRVQgRElBTCBMQy1BUkVBLUNPREVTIGNvbW1hbmQgZG9lcyBub3QgcmVwbGFj ZSB0aGUgU0VUIERJQUwKKyAgIEFSRUEtQ09ERSBjb21tYW5kLiBUaGUgbGF0dGVyIHNwZWNpZmll cyB0aGUgYXJlYSBjb2RlIHlvdSBhcmUgZGlhbGluZworICAgZnJvbS4gSWYgdGhlIGNhbGxlZCBu dW1iZXIgaXMgaW4gdGhlIHNhbWUgYXJlYSBjb2RlLCB0aGVuIHRoZSBhcmVhIGNvZGUKKyAgIGlz IGRpYWxlZCBpZiBpdCBpcyBhbHNvIGluIHRoZSBMQy1BUkVBLUNPREVTIGxpc3QsIGFuZCBpdCBp cyBub3QgZGlhbGVkCisgICBvdGhlcndpc2UuIFNvIGlmICIzMDEiIGhhZCBub3QgYXBwZWFyZWQg aW4gdGhlIExDLUFSRUEtQ09ERVMgbGlzdCBpbgorICAgdGhlIHByZXZpb3VzIGV4YW1wbGU6CisK KyAgU0VUIERJQUwgTEQtUFJFRklYIDEKKyAgU0VUIERJQUwgQVJFQS1DT0RFIDMwMQorICBTRVQg RElBTCBMQy1BUkVBLUNPREVTIDQxMCAgICAgPC0tIEFyZWEgY29kZXMgaW4gMTAtZGlnaXQgZGlh bGluZyByZWdpb24KKyAgRElBTCArMSAoMzAxKSA3NjUtNDMyMSAgICAgICAgIDwtLSBEaWFscyA3 NjU0MzIxICAgICAobG9jYWwpCisgIERJQUwgKzEgKDQxMCkgNzY1LTQzMjEgICAgICAgICA8LS0g RGlhbHMgNDEwNzY1NDMyMSAgKGxvY2FsIHdpdGggYXJlYSBjb2RlKQorICBESUFMICsxICgyMTIp IDc2NS00MzIxICAgICAgICAgPC0tIERpYWxzIDEyMTI3NjU0MzIxIChsb25nIGRpc3RhbmNlKQor CisgICBUaGUgbmV3IEtlcm1pdCB2ZXJzaW9ucyBhbHNvIGFkZCBhIExvY2FsIENhbGwgUHJlZml4 IGFuZCBMb2NhbCBDYWxsCisgICBTdWZmaXgsIGluIGNhc2UgeW91IGhhdmUgYW55IG5lZWQgZm9y IGl0LiBUaGVzZSBhcmUgYWRkZWQgdG8gdGhlCisgICBiZWdpbm5pbmcgYW5kIG9mIGxvY2FsIHBo b25lIG51bWJlcnMgKGkuZS4gbnVtYmVycyB0aGF0IGFyZSBub3QKKyAgIGxvbmctZGlzdGFuY2Ug b3IgaW50ZXJuYXRpb25hbCkuIEV4YW1wbGVzOgorCisgIFNFVCBESUFMIExELVBSRUZJWCAxCisg IFNFVCBESUFMIExDLVBSRUZJWCA5CisgIFNFVCBESUFMIExDLVNVRkZJWCAqCisgIFNFVCBESUFM IExDLUFSRUEtQ09ERVMgNDEwICAgICA8LS0gQXJlYSBjb2RlcyBpbiAxMC1kaWdpdCBkaWFsaW5n IHJlZ2lvbgorICBTRVQgRElBTCBBUkVBLUNPREUgMzAxCisgIERJQUwgKzEgKDMwMSkgNzY1LTQz MjEgICAgICAgICA8LS0gRGlhbHMgOTc2NTQzMjEqICAgICAobG9jYWwpCisgIERJQUwgKzEgKDQx MCkgNzY1LTQzMjEgICAgICAgICA8LS0gRGlhbHMgOTQxMDc2NTQzMjEqICAobG9jYWwgd2l0aCBh cmVhIGNvZGUpCisgIERJQUwgKzEgKDIxMikgNzY1LTQzMjEgICAgICAgICA8LS0gRGlhbHMgMTIx Mjc2NTQzMjEgICAobG9uZyBkaXN0YW5jZSkKKworMi4xLjMuIEZvcmNpbmcgTG9uZy1EaXN0YW5j ZSBEaWFsaW5nCisKKyAgIFN1cHBvc2UgYSBudW1iZXIgaXMgaW4geW91ciBjb3VudHJ5IGFuZCBh cmVhLCBidXQgZm9yIHNvbWUgcmVhc29uIHlvdQorICAgbmVlZCB0byBkaWFsIGl0IGxvbmctZGlz dGFuY2UgYW55d2F5IChhcyBpcyBhbHdheXMgdGhlIGNhc2UgaW4gRnJhbmNlKS4KKyAgIFRoZXJl IGhhdmUgYWx3YXlzIGJlZW4gdmFyaW91cyB3YXlzIHRvIGhhbmRsZSB0aGlzOgorCisgICAgMS4g VGVtcG9yYXJpbHkgc2V0IHlvdXIgYXJlYSBjb2RlIHRvIGEgZGlmZmVyZW50IChvciBub25leGlz dGVudCBvcgorICAgICAgIGltcG9zc2libGUpIG9uZSAoYnV0IHRoaXMgcmVxdWlyZWQga25vd2xl ZGdlIG9mIHdoaWNoIGFyZWEgY29kZXMKKyAgICAgICB3ZXJlIG5vbmV4aXN0ZW50IG9yIGltcG9z c2libGUgaW4gZWFjaCBjb3VudHJ5KS4KKyAgICAyLiBEaWFsIHRoZSBudW1iZXIgbGl0ZXJhbGx5 IGluc3RlYWQgb2YgdXNpbmcgdGhlIHBvcnRhYmxlIGZvcm1hdCwgYnV0CisgICAgICAgdGhpcyBk ZWZlYXRzIHRoZSBwdXJwb3NlIG9mIHRoZSBwb3J0YWJsZSBkaWFsaW5nIGRpcmVjdG9yeS4KKwor ICAgTm93IHRoZXJlIGlzIGFsc28gYSBuZXcgY29tbWFuZCB0aGF0LCB2ZXJ5IHNpbXBseSwgY2Fu IGZvcmNlCisgICBsb25nLWRpc3RhbmNlIGRpYWxpbmc6CisKKyAgIFNFVCBESUFMIEZPUkNFLUxP TkctRElTVEFOQ0UgeyBPTiwgT0ZGIH0KKyAgICAgICAgICBJZiBhIGNhbGwgaXMgcGxhY2VkIHRv IGEgcG9ydGFibGUgcGhvbmUgbnVtYmVyIHdpdGhpbiB0aGUgc2FtZQorICAgICAgICAgIGNvdW50 cnkgY29kZSBhcyB0aGUgY2FsbGluZyBudW1iZXIsIGl0IGlzIGRpYWxlZCB3aXRoIHRoZQorICAg ICAgICAgIGxvbmctZGlzdGFuY2UgcHJlZml4IGFuZCB0aGUgYXJlYSBjb2RlIGlmIEZPUkNFLUxP TkctRElTVEFOQ0UgaXMKKyAgICAgICAgICBPTi4gSWYgT0ZGLCB0aGUgcmVndWxhciBydWxlcyBh bmQgcHJvY2VkdXJlcyBhcHBseS4KKworICAgRXhhbXBsZSAoRnJhbmNlKToKKworICBTRVQgRElB TCBDT1VOVFJZLUNPREUgMzMKKyAgU0VUIERJQUwgQVJFQS1DT0RFIDYKKyAgU0VUIERJQUwgRk9S Q0UtTE9ORy1ESVNUQU5DRSBPTgorCisgICAoSW4gZmFjdCwgU0VUIERJQUwgQ09VTlRSWS1DT0RF IDMzIGF1dG9tYXRpY2FsbHkgc2V0cyBESUFMCisgICBGT1JDRS1MT05HLURJU1RBTkNFIE9OLi4u KQorCisgICBFeGFtcGxlIChVU0EsIGZvciBhIGNlcnRhaW4gdHlwZSBvZiByZXZlcnNlLWNoYXJn ZSBjYWxsaW5nIGluIHdoaWNoIHRoZQorICAgY2FsbGVkIG51bWJlciBtdXN0IGFsd2F5cyBiZSBm dWxseSBzcGVjaWZpZWQpOgorCisgIFNFVCBESUFMIFBSRUZJWCAxODAwMjY2NjMyOCQgICAgIDsg MS04MDAtQ09MTEVDVAorICBTRVQgRElBTCBDT1VOVFJZLUNPREUgMQorICBTRVQgRElBTCBBUkVB LUNPREUgMjEyCisgIFNFVCBESUFMIEZPUkNFLUxPTkctRElTVEFOQ0UgT04KKworICAgRXhhbXBs ZSAoVG9yb250bywgd2hlcmUgY2FsbHMgdG8gZXhjaGFuZ2UgOTc2IHdpdGhpbiBhcmVhIGNvZGUg NDE2IG11c3QKKyAgIGJlIGRpYWxlZCBhcyBsb25nIGRpc3RhbmNlLCBldmVuIHdoZW4geW91IGFy ZSBkaWFsaW5nIGZyb20gYXJlYSBjb2RlCisgICA0MTYpOgorCisgIFNFVCBESUFMIENPVU5UUlkt Q09ERSAxCisgIFNFVCBESUFMIEFSRUEtQ09ERSA0MTYKKyAgU0VUIERJQUwgRk9SQ0UtTE9ORy1E SVNUQU5DRSBPTgorICBESUFMICsxICg0MTYpIDk3Ni14eHh4CisKKyAgIElmIGRpYWxpbmcgbWV0 aG9kcyB3ZXJlIGNvbnNpc3RlbnQgYW5kIHNlbnNpYmxlLCBvZiBjb3Vyc2UgaXQgd291bGQgYmUK KyAgIHBvc3NpYmxlIHRvIGFsd2F5cyBkaWFsIGV2ZXJ5IGRvbWVzdGljIGNhbGwgYXMgaWYgaXQg d2VyZSBsb25nCisgICBkaXN0YW5jZS4gQnV0IGluIG1hbnkgbG9jYXRpb25zIHRoaXMgZG9lc24n dCB3b3JrIG9yIGlmIGl0IGRvZXMsIGl0CisgICBjb3N0cyBleHRyYS4gVGhlIGZvbGxvd2luZyBt YWNybyBjYW4gYmUgdXNlZCBmb3IgZGlhbGluZyBhbnkgZ2l2ZW4KKyAgIG51bWJlciB3aXRoIGZv cmNlZCBsb25nLWRpc3RhbmNlIGZvcm1hdDoKKworICBkZWZpbmUgTERJQUwgeworICAgICAgbG9j YWwgXCV4CisgICAgICBzZXQgZGlhbCBmb3JjZS1sb25nLWRpc3RhbmNlIG9uCisgICAgICBkaWFs IFwlKgorICAgICAgYXNnIFwleCBcdihzdWNjZXNzKQorICAgICAgc2V0IGRpYWwgZm9yY2UtbG9u Zy1kaXN0YW5jZSBvZmYKKyAgICAgIGVuZCBcJXgKKyAgfQorCisgICAoU2VlIFszOTRdU2VjdGlv biA3LjUgYWJvdXQgdGhlIFwlKiB2YXJpYWJsZS4pCisKKzIuMS40LiBFeGNoYW5nZS1TcGVjaWZp YyBEaWFsaW5nIERlY2lzaW9ucworCisgICBUaGlzIGFwcGxpZXMgbWFpbmx5IHRvIHRoZSBOb3J0 aCBBbWVyaWNhbiBOdW1iZXJpbmcgUGxhbiAoTkFOUCkuIFJlZmVyCisgICB0byB0aGUgc2VjdGlv biAiQWx0ZXJuYXRpdmUgbm90YXRpb25zIiBpbiBbMzk1XVVzaW5nIEMtS2VybWl0IDJuZAorICAg RWRpdGlvbiwgcGFnZXMgMTA2LTEwNywgYW5kIHRoZSBzdG9yeSBhYm91dCBUb3JvbnRvIG9uIHBh Z2UgMTEwLiBVc2luZworICAgdGhlIG5ldyBMQy1BUkVBLUNPREVTIGxpc3QsIHdlIGNhbiBhZGRy ZXNzIHRoZSBwcm9ibGVtIGJ5IHRyZWF0aW5nIHRoZQorICAgZXhjaGFuZ2UgYXMgcGFydCBvZiB0 aGUgYXJlYSBjb2RlOgorCisgIFNFVCBESUFMIExELVBSRUZJWCAxCisgIFNFVCBESUFMIEFSRUEt Q09ERSA0MTYKKyAgU0VUIERJQUwgTEMtQVJFQS1DT0RFUyA5MDUyNzYKKyAgRElBTCArMSA0MTYg NzY1IDQzMjEgICAgICAgICAgICAgICA8LS0gNzY1NDMyMSAgICAgIChsb2NhbCkKKyAgRElBTCAr MSA5MDUgMjc2IDQzMjEgICAgICAgICAgICAgICA8LS0gOTA1Mjc2NDMyMSAgIChsb2NhbCB3aXRo IGFyZWEgY29kZSkKKyAgRElBTCArMSA5MDUgNTI4IDQzMjEgICAgICAgICAgICAgICA8LS0gMTkw NTUyODQzMjEgIChsb25nIGRpc3RhbmNlKQorCisgICBUaGUgc2FtZSB0ZWNobmlxdWUgY2FuIGJl IHVzZWQgaW4gTWFzc2FjaHVzZXR0cyAoc3RvcnkgYXQgdG9wIG9mIHBhZ2UKKyAgIDExMSkgYW5k IGluIGFueSBvdGhlciBwbGFjZSB3aGVyZSBkaWFsaW5nIHRvIHNvbWUgZXhjaGFuZ2VzIHdpdGhp biBhCisgICBwYXJ0aWN1bGFyIGFyZWEgY29kZSBpcyBsb2NhbCwgYnV0IHRvIG90aGVycyBpbiB0 aGUgc2FtZSBhcmVhIGNvZGUgaXMKKyAgIGxvbmcgZGlzdGFuY2UuCisKKzIuMS41LiBDYXV0aW9u cyBhYm91dCBDaGVhcGVzdC1GaXJzdCBEaWFsaW5nCisKKyAgIEtlcm1pdCBkb2VzIG5vdCBtYWlu dGFpbiBhIGtub3dsZWRnZSBiYXNlIG9mIHRlbGVwaG9ueSBpbmZvcm1hdGlvbjsgaXQKKyAgIG9u bHkgcHJvdmlkZXMgdGhlIHRvb2xzIHRvIGxldCB5b3UgZW50ZXIgYSBwaG9uZSBudW1iZXIgaW4g YSBzdGFuZGFyZAorICAgZm9ybWF0IGFuZCBkaWFsIGl0IGNvcnJlY3RseSBmcm9tIGFueSBsb2Nh dGlvbiBpbiBtb3N0IGNhc2VzLgorCisgICBJbiBwYXJ0aWN1bGFyLCBLZXJtaXQgZG9lcyBub3Qg ZGlmZmVyZW50aWF0ZSB0aGUgY2hhcmdpbmcgbWV0aG9kIGZyb20KKyAgIHRoZSBkaWFsaW5nIG1l dGhvZC4gSWYgYSBjYWxsIHRoYXQgaXMgRElBTEVEIGFzIGxvbmctZGlzdGFuY2UgKGUuZy4KKyAg IGZyb20gMjEyIHRvIDcxOCBpbiBjb3VudHJ5IGNvZGUgMSkgaXMgbm90IENIQVJHRUQgYXMgbG9u ZyBkaXN0YW5jZSwgd2UKKyAgIGhhdmUgbm8gd2F5IG9mIGtub3dpbmcgdGhhdCB3aXRob3V0IGtl ZXBpbmcgYSBtYXRyaXggb2YgY2hhcmdpbmcKKyAgIGluZm9ybWF0aW9uIGZvciBldmVyeSBhcmVh LWNvZGUgY29tYmluYXRpb24gd2l0aGluIGV2ZXJ5IGNvdW50cnksIGFuZAorICAgYW55IHN1Y2gg bWF0cml4IHdvdWxkIGJlIG9ic29sZXRlIGZpdmUgbWludXRlcyBhZnRlciBpdCB3YXMKKyAgIGNv bnN0cnVjdGVkLiBUaHVzLCAiY2hlYXBlc3QtZmlyc3QiIHNvcnRpbmcgaXMgb25seSBhcyByZWxp YWJsZSBhcyBvdXIKKyAgIGFzc3VtcHRpb24gdGhhdCB0aGUgY2hhcmdpbmcgbWV0aG9kIGZvbGxv d3MgdGhlIGRpYWxpbmcgbWV0aG9kLiBBIGdvb2QKKyAgIGlsbHVzdHJhdGlvbiB3b3VsZCBiZSBj ZXJ0YWluIG9ubGluZSBzZXJ2aWNlcyB0aGF0IGhhdmUgdG9sbC1mcmVlCisgICBkaWFsdXAgbnVt YmVycyB3aGljaCB0aGV5IGNoYXJnZSB5b3UgYSBwcmVtaXVtIChpbiB5b3VyIG9ubGluZSBzZXJ2 aWNlCisgICBiaWxsKSBmb3IgdXNpbmcuCisKKzIuMS42LiBCbGluZCBEaWFsaW5nIChEaWFsaW5n IHdpdGggTm8gRGlhbHRvbmUpCisKKyAgIEMtS2VybWl0J3MgaW5pdCBzdHJpbmcgZm9yIEhheWVz LWxpa2UgbW9kZW1zIGdlbmVyYWxseSBpbmNsdWRlcyBhbiBYNAorICAgY29tbWFuZCB0byBlbmFi bGUgYXMgbWFueSByZXN1bHQgY29kZXMgYXMgcG9zc2libGUsIHNvIHRoYXQgS2VybWl0IGNhbgor ICAgcmVhY3QgYXBwcm9wcmlhdGVseSB0byBkaWZmZXJlbnQgZmFpbHVyZSByZWFzb25zLiBPbmUg b2YgdGhlIHJlc3VsdAorICAgY29kZXMgdGhhdCBYNCBlbmFibGVzIGlzICJOTyBESUFMVE9ORSIu IEEgcGVyaGFwcyBub3Qgb2J2aW91cyBzaWRlCisgICBlZmZlY3Qgb2YgZW5hYmxpbmcgdGhpcyBy ZXN1bHQgY29kZSB0aGF0IHRoZSBtb2RlbSBtdXN0IGhlYXIgZGlhbHRvbmUKKyAgIGJlZm9yZSBp dCB3aWxsIGRpYWwuCisKKyAgIEl0IGlzIGJlY29taW5nIGluY3JlYXNpbmdseSBuZWNlc3Nhcnkg dG8gZm9yY2UgYSBtb2RlbSB0byBkaWFsIGV2ZW4KKyAgIHRob3VnaCBpdCBkb2VzIG5vdCBoZWFy IGEgZGlhbHRvbmUgb24gdGhlIHBob25lIGxpbmU7IGZvciBleGFtcGxlLCB3aXRoCisgICBQQlhz IHRoYXQgaGF2ZSBzdHJhbmdlIGRpYWx0b25lcywgb3Igd2l0aCBwaG9uZSBzeXN0ZW1zIGluIGRp ZmZlcmVudAorICAgY291bnRyaWVzLCBvciB3aXRoIElTRE4gcGhvbmVzLCBldGMuIFRoaXMgaXMg Y2FsbGVkICJibGluZCBkaWFsaW5nIi4KKworICAgQy1LZXJtaXQgNy4wIGhhcyB0d28gbmV3IGNv bW1hbmRzIHRvIGNvcGUgd2l0aCB0aGlzIHNpdHVhdGlvbjoKKworICAgU0VUIERJQUwgSUdOT1JF LURJQUxUT05FIHsgT04sIE9GRiB9CisgICAgICAgICAgT0ZGICh0aGUgZGVmYXVsdCkgbWVhbnMg dG8gdGVsbCB0aGUgbW9kZW0gdG8gd2FpdCBmb3IgZGlhbHRvbmUKKyAgICAgICAgICBiZWZvcmUg ZGlhbGluZy4gT04gbWVhbnMgdG8gZW5hYmxlICJibGluZCBkaWFsaW5nIiwgaS5lLiB0ZWxsCisg ICAgICAgICAgdGhlIG1vZGVtIE5PVCB0byB3YWl0IGZvciBkaWFsdG9uZSBiZWZvcmUgZGlhbGlu Zy4gR2VuZXJhbGx5CisgICAgICAgICAgdGhpcyBpcyBhY2NvbXBsaXNoZWQgYnkgc2VuZGluZyBB VFgzIHRvIHRoZSBtb2RlbSBqdXN0IHByaW9yIHRvCisgICAgICAgICAgZGlhbGluZy4gU0VUIE1P REVNIFRZUEUgeHh4IGFuZCB0aGVuIFNIT1cgTU9ERU0gZGlzcGxheXMKKyAgICAgICAgICBLZXJt aXQncyBidWlsdC1pbiAiaWdub3JlIGRpYWx0b25lIiBjb21tYW5kLgorCisgICBTRVQgRElBTCBD T01NQU5EIElHTk9SRS1ESUFMVE9ORSB0ZXh0CisgICAgICAgICAgVGhpcyBsZXRzIHlvdSBjaGFu Z2UgdGhlIGJ1aWx0LWluIGlnbm9yZS1kaWFsdG9uZSBjb21tYW5kIChzdWNoCisgICAgICAgICAg YXMgQVRYMykgdG8gd2hhdGV2ZXIgeW91IGNob29zZSwgaW4gY2FzZSB0aGUgYnVpbHQtaW4gb25l IGRvZXMKKyAgICAgICAgICBub3Qgd29yaywgb3IgYW5vdGhlciBjb21tYW5kIHdvcmtzIGJldHRl ci4KKworICAgTm90ZXM6CisgICAgMS4gVGhlIGlnbm9yZS1kaWFsdG9uZSBjb21tYW5kIGlzIG5v dCBzZW50IHVubGVzcyBTRVQgRElBTAorICAgICAgIElHTk9SRS1ESUFMVE9ORSBpcyBPTi4KKyAg ICAyLiBUaGUgQVRYMyBjb21tYW5kIGdlbmVyYWxseSBkaXNhYmxlcyBub3Qgb25seSBOTyBESUFM VE9ORSwgYnV0IGFsc28KKyAgICAgICBCVVNZLiBTbyB0aGlzIHdpbGwgcHJldmVudCBLZXJtaXQg ZnJvbSBkZXRlY3Rpbmcgd2hlbiB0aGUgbGluZSBpcworICAgICAgIGJ1c3kuIFRoaXMgaXMgYSBw cm9wZXJ0eSBvZiB0aGUgbW9kZW0sIG5vdCBvZiBLZXJtaXQuCisKKzIuMS43LiBUcmltbWluZyB0 aGUgRGlhbGluZyBEaWFsb2cKKworICAgVGhlIGNvbW1hbmQ6CisKKyAgU0VUIE1PREVNIENPTU1B TkQgYWN0aW9uIFsgY29tbWFuZCBdCisKKyAgIGlzIHVzZWQgdG8gb3ZlcnJpZGUgS2VybWl0J3Mg YnVpbHQtaW4gbW9kZW0gY29tbWFuZHMgZm9yIGVhY2ggYWN0aW9uLAorICAgZm9yIGVhY2gga2lu ZCBvZiBtb2RlbSBpbiBpdHMgaW50ZXJuYWwgZGF0YWJhc2UuIElmIHlvdSBpbmNsdWRlIGEKKyAg IGNvbW1hbmQsIHRoaXMgaXMgdXNlZCBpbnN0ZWFkIG9mIHRoZSBidWlsdC1pbiBvbmUuIElmIHlv dSBvbWl0IHRoZQorICAgY29tbWFuZCwgdGhpcyByZXN0b3JlcyB0aGUgb3JpZ2luYWwgYnVpbHQt aW4gY29tbWFuZC4KKworICAgSWYgeW91IHdhbnQgdG8gb21pdCB0aGUgY29tbWFuZCBhbHRvZ2V0 aGVyLCBzbyBLZXJtaXQgZG9lc24ndCBzZW5kIHRoZQorICAgY29tbWFuZCBhdCBhbGwsIG9yIHdh aXQgZm9yIGEgcmVzcG9uc2UsIHVzZToKKworICBTRVQgTU9ERU0gQ09NTUFORCBhY3Rpb24ge30K KworICAgVGhhdCBpcywgc3BlY2lmeSBhIHBhaXIgb2YgZW1wdHkgYnJhY2VzIGFzIHRoZSBjb21t YW5kLCBmb3IgZXhhbXBsZToKKworICBTRVQgTU9ERU0gQ09NTUFORCBFUlJPUi1DT1JSRUNUSU9O IE9OIHt9CisKKzIuMS44LiBDb250cm9sbGluZyB0aGUgRGlhbGluZyBTcGVlZAorCisgICBUaGUg cmF0ZSBhdCB3aGljaCBjaGFyYWN0ZXJzIGFyZSBzZW50IHRvIHRoZSBtb2RlbSBkdXJpbmcgZGlh bGluZyBpcworICAgbm9ybWFsbHkgY29udHJvbGxlZCBieSB0aGUgYnVpbHQtaW4gbW9kZW0gZGF0 YWJhc2UuIFlvdSBtaWdodCB3YW50IHRvCisgICBvdmVycmlkZSB0aGlzIGlmIEtlcm1pdCBzZWVt cyB0byBiZSBkaWFsaW5nIHRvbyBzbG93bHksIG9yIGl0IGlzCisgICBzZW5kaW5nIGNoYXJhY3Rl cnMgdG8gdGhlIG1vZGVtIGZhc3RlciB0aGFuIHRoZSBtb2RlbSBoYW5kbGUgdGhlbS4gQQorICAg bmV3IGNvbW1hbmQgd2FzIGFkZGVkIGZvciB0aGlzIGluIEMtS2VybWl0IDcuMDoKKworICAgU0VU IERJQUwgUEFDSU5HIG51bWJlcgorICAgICAgICAgIFNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIG1p bGxpc2Vjb25kcyAodGhvdXNhbmR0aHMgb2Ygc2Vjb25kcykgdG8KKyAgICAgICAgICBwYXVzZSBi ZXR3ZWVuIGVhY2ggY2hhcmFjdGVyIHdoZW4gc2VuZGluZyBjb21tYW5kcyB0byB0aGUgbW9kZW0K KyAgICAgICAgICBkdXJpbmcgRElBTCBvciBBTlNXRVIgY29tbWFuZCBleGVjdXRpb24uIDAgbWVh bnMgbm8gcGF1c2UgYXQKKyAgICAgICAgICBhbGwsIC0xICh0aGUgZGVmYXVsdCkgb3IgYW55IG90 aGVyIG5lZ2F0aXZlIG51bWJlciBtZWFucyB0byB1c2UKKyAgICAgICAgICB0aGUgdmFsdWUgZnJv bSB0aGUgZGF0YWJhc2UuIEFueSBudW1iZXIgZ3JlYXRlciB0aGFuIDAgaXMgdGhlCisgICAgICAg ICAgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byBwYXVzZS4KKworICAgSElOVDogWW91IG1pZ2h0 IGFsc28gbmVlZCB0byBjb250cm9sIHRoZSByYXRlIGF0IHdoaWNoIHRoZSBtb2RlbQorICAgZ2Vu ZXJhdGVzIFRvdWNoIFRvbmVzIGR1cmluZyBkaWFsaW5nLCBmb3IgZXhhbXBsZSB3aGVuIHNlbmRp bmcgYQorICAgbnVtZXJpYyBwYWdlLiBUaGVyZSBhcmUgdHdvIHdheXMgdG8gZG8gdGhpcy4gT25l IHdheSBpcyB0byBpbnNlcnQgcGF1c2UKKyAgIGNoYXJhY3RlcnMgaW50byB0aGUgZGlhbGluZyBz dHJpbmcuIEZvciBtb2RlbXMgdGhhdCB1c2UgdGhlIEFUIGNvbW1hbmQKKyAgIHNldCwgdGhlIHBh dXNlIGNoYXJhY3RlciBpcyBjb21tYSAoLCkgYW5kIGNhdXNlcyBhIDItc2Vjb25kIHBhdXNlLiBP bgorICAgbW9zdCBtb2RlbXMsIHlvdSBjYW4gdXNlIHRoZSBTOCByZWdpc3RlciB0byBjaGFuZ2Ug dGhlIHBhdXNlIGludGVydmFsCisgICBjYXVzZWQgYnkgY29tbWEgaW4gdGhlIGRpYWxpbmcgc3Ry aW5nLiBUaGUgb3RoZXIgd2F5IGlzIHRvIHNldCB5b3VyCisgICBtb2RlbSdzIHRvbmUgZ2VuZXJh dGlvbiBpbnRlcnZhbCwgaWYgaXQgaGFzIGEgY29tbWFuZCBmb3IgdGhhdC4gTW9zdAorICAgQVQt Y29tbWFuZC1zZXQgbW9kZW1zIHVzZSBTMTEgZm9yIHRoaXM7IHRoZSB2YWx1ZSBpcyBpbiBtaWxs aXNlY29uZHMuCisgICBGb3IgZXhhbXBsZSBvbiBVU1IgbW9kZW1zOgorCisgIEFUUzExPTIwMAor CisgICBzZWxlY3RzIGFuIGludGVydmFsIG9mIDIwMCBtaWxsaXNlY29uZHMgdG8gc2VwYXJhdGUg ZWFjaCBkaWFsaW5nIHRvbmUuCisKKyAgIEhpbnQ6IFRvIGFkZCBTLVJlZ2lzdGVyIHNldHRpbmdz IG9yIG90aGVyIGNvbW1hbmRzIHRvIHlvdXIgZGlhbGluZworICAgcHJvY2VkdXJlLCB1c2UgdGhl IG5ldyBTRVQgTU9ERU0gQ09NTUFORCBQUkVESUFMLUlOSVQgY29tbWFuZAorICAgKFszOTZdU2Vj dGlvbiAyLjIuMikuCisKKzIuMS45LiBQcmV0ZXN0aW5nIFBob25lIE51bWJlciBDb252ZXJzaW9u cworCisgICBUaGUgTE9PS1VQIGNvbW1hbmQgbm93IGFjY2VwdHMgdGVsZXBob25lIG51bWJlcnMg YXMgd2VsbCBhcworICAgZGlyZWN0b3J5LWVudHJ5IG5hbWVzLCBmb3IgZXhhbXBsZToKKworICBM T09LVVAgKzEgKDIxMikgNzY1NDMyMQorCisgICBXaGVuIGdpdmVuIGEgcGhvbmUgbnVtYmVyLCBM T09LVVAgcHJpbnRzIHRoZSByZXN1bHQgb2YgY29udmVydGluZyB0aGUKKyAgIHBob25lIG51bWJl ciBmb3IgZGlhbGluZyB1bmRlciB0aGUgY3VycmVudCBkaWFsaW5nIHJ1bGVzLiBGb3IgZXhhbXBs ZSwKKyAgIGlmIG15IGNvdW50cnkgY29kZSBpcyAxIGFuZCBteSBhcmVhIGNvZGUgaXMgMjEyLCBh bmQgSSBhbSBkaWFsaW5nIG91dAorICAgZnJvbSBhIFBCWCB3aG9zZSBvdXRzaWRlLWxpbmUgcHJl Zml4IGlzICI5MywiOgorCisgIEMtS2VybWl0PiBsb29rdXAgKzEgKDIxMikgNzY1NDMyMQorICAr MSAoMjEyKSA3NjU0MzIxID0+IDkzLDc2NTQzMjEKKyAgQy1LZXJtaXQ+CisKKyAgIFlvdSBjYW4g YWxzbyB1c2UgdGhlIFxmZGlhbGNvbnZlcnQocGhvbmUtbnVtYmVyKSBmdW5jdGlvbiAoWzM5N11T ZWN0aW9uCisgICAyLjEuMTEpIHRvIGRvIHRoaXMgcHJvZ3JhbW1hdGljYWxseToKKworICBDLUtl cm1pdD4gZWNobyAiXGZkaWFsY29udmVydCgrMSAoMjEyKSA3NjU0MzIxKSIKKyAgIjkzLDc2NTQz MjEiCisgIEMtS2VybWl0PgorCisgICBTbyB0aGUgbmV3IExPT0tVUCBiZWhhdmVzIGFzIGZvbGxv d3M6CisKKyAgIExPT0tVUCBwb3J0YWJsZS1mb3JtYXQtcGhvbmUtbnVtYmVyCisgICAgICAgICAg RGlzcGxheXMgaG93IHRoZSBudW1iZXIgd291bGQgYWN0dWFsbHkgYmUgZGlhbGVkIFNldHMgRkFJ TFVSRSBpZgorICAgICAgICAgIHRoZXJlIHdhcyBhIGNvbnZlcnNpb24gZXJyb3IsIG90aGVyd2lz ZSBTVUNDRVNTLgorCisgICBMT09LVVAgbGl0ZXJhbC1mb3JtYXQtcGhvbmUtbnVtYmVyCisgICAg ICAgICAgRGlzcGxheXMgdGhlIHNhbWUgbGl0ZXJhbC1mb3JtYXQtcGhvbmUtbnVtYmVyIEFsd2F5 cyBzZXRzCisgICAgICAgICAgU1VDQ0VTUy4KKworICAgTE9PS1VQIGRpYWxpbmctZGlyZWN0b3J5 LW5hbWUKKyAgICAgICAgICBEaXNwbGF5cyBhbGwgbWF0Y2hpbmcgZW50cmllcyBhbmQgY29udmVy dHMgcG9ydGFibGUgcGhvbmUKKyAgICAgICAgICBudW1iZXJzLiBTZXRzIFNVQ0NFU1MgaWYgYXQg bGVhc3Qgb25lIGVudHJ5IHdhcyBmb3VuZCwgb3RoZXJ3aXNlCisgICAgICAgICAgRkFJTFVSRS4K KworICAgTE9PS1VQID1hbnl0aGluZworICAgICAgICAgIERpc3BsYXlzICI9YW55dGhpbmciIGFu ZCBzZXRzIFNVQ0NFU1MuCisKKyAgIFRoZXJlIGlzLCBhdCBwcmVzZW50LCBubyBwcm9ncmFtbWF0 aWMgd2F5IHRvIGZldGNoIG51bWJlcnMgZnJvbSB0aGUKKyAgIGRpYWxpbmcgZGlyZWN0b3J5LiBU aGlzIHdpbGwgYmUgY29uc2lkZXJlZCBmb3IgYSBmdXR1cmUgcmVsZWFzZS4KKworMi4xLjEwLiBH cmVhdGVyIENvbnRyb2wgb3ZlciBQYXJ0aWFsIERpYWxpbmcKKworICAgVGhlIGZvbGxvd2luZyBy dWxlcyBub3cgYXBwbHkgdG8gcGFydGlhbCBkaWFsaW5nOgorCisgICAgICogUGhvbmUgbnVtYmVy IHRyYW5zZm9ybWF0aW9ucyBiYXNlZCBvbiBjb3VudHJ5IGFuZCBhcmVhIGNvZGUsCisgICAgICAg YXBwbGljYXRpb24gb2YgcHJlZml4ZXMsIGV0YywgYXJlIHBlcmZvcm1lZCBvbmx5IG9uIHRoZSBm aXJzdAorICAgICAgIFBESUFMLgorICAgICAqIEVhY2ggUERJQUwgYXJndW1lbnQgaXMgbG9va2Vk IHVwIGluIHRoZSBkaWFsaW5nIGRpcmVjdG9yeSwgc28gaXQgaXMKKyAgICAgICBwb3NzaWJsZSBo YXZlIGRpcmVjdG9yeSBlbnRyaWVzIGZvciBwaWVjZXMgb2YgcGhvbmUgbnVtYmVycyBvcgorICAg ICAgIG90aGVyIGluZm9ybWF0aW9uLgorICAgICAqIFN1ZmZpeGVzIGFyZSBub3QgYXBwbGllZCBh dXRvbWF0aWNhbGx5LCBzaW5jZSB0aGVyZSBpcyBubyB3YXkgZm9yCisgICAgICAgQy1LZXJtaXQg dG8ga25vdyBpbiB3aGljaCBQRElBTCBzZWdtZW50IHlvdSB3YW50IHRoZW0gdG8gYmUKKyAgICAg ICBhcHBsaWVkLgorCisgICBIb3dldmVyLCB0aGUgc3VmZml4IHRoYXQgKndvdWxkKiBoYXZlIGJl ZW4gYXBwbGllZCwgYmFzZWQgb24gdGhlCisgICBkaWFsaW5nIHJ1bGVzIHRoYXQgd2VyZSBpbnZv a2VkIHdoZW4gcHJvY2Vzc2luZyB0aGUgZmlyc3QgUERJQUwKKyAgIGNvbW1hbmQsIGlzIHN0b3Jl ZCBpbiB0aGUgdmFyaWFibGU6CisKKyAgXHYoZGlhbHN1ZmZpeCkKKworICAgd2hpY2ggeW91IGNh biBpbmNsdWRlIGluIGFueSBzdWJzZXF1ZW50IFBESUFMIG9yIERJQUwgY29tbWFuZHMuCisKKyAg IEV4YW1wbGU6CisKKyAgcGRpYWwge1xtKG15X2xvbmdfZGlzdGFuY2VfcGFnZXJfbnVtYmVyX3Bh cnRfMSl9CisgIHBkaWFsIHtcbShteV9sb25nX2Rpc3RhbmNlX3BhZ2VyX251bWJlcl9wYXJ0XzIp fQorICBwZGlhbCB7XHYoZGlhbHN1ZmZpeCl9CisgIHBkaWFsIHtcbShteV9sb25nX2Rpc3RhbmNl X3BhZ2VyX251bWJlcl9wYXJ0XzMpfQorICBwZGlhbCB7QFxtKG51bWVyaWNfcGFnZXJfY29kZSkj fQorCisyLjEuMTEuIE5ldyBESUFMLXJlbGF0ZWQgVmFyaWFibGVzIGFuZCBGdW5jdGlvbnMKKwor ICAgXGZkaWFsY29udmVydChzKQorICAgICAgICAgIHMgaXMgYSBwaG9uZSBudW1iZXIgaW4gZWl0 aGVyIGxpdGVyYWwgb3IgcG9ydGFibGUgZm9ybWF0IChub3QgYQorICAgICAgICAgIGRpYWxpbmcg ZGlyZWN0b3J5IGVudHJ5IG5hbWUpLiBUaGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgZGlhbAorICAg ICAgICAgIHN0cmluZyB0aGF0IHdvdWxkIGFjdHVhbGx5IGJlIHVzZWQgYnkgdGhlIERJQUwgY29t bWFuZCB3aGVuCisgICAgICAgICAgZGlhbGluZyBmcm9tIHRoZSBjdXJyZW50IGxvY2F0aW9uLCBh ZnRlciBwcm9jZXNzaW5nIGNvdW50cnkKKyAgICAgICAgICBjb2RlLCBhcmVhIGNvZGUsIGFuZCBv dGhlciBTRVQgRElBTCB2YWx1ZXMsIGFuZCBzaG91bGQgYmUgdGhlCisgICAgICAgICAgc2FtZSBh cyB0aGUgcmVzdWx0IG9mIExPT0tVUCB3aGVuIGdpdmVuIGEgdGVsZXBob25lIG51bWJlci4KKwor ICAgXHYoZGlhbHN1ZmZpeCkKKyAgICAgICAgICBDb250YWlucyB0aGUgc3VmZml4LCBpZiBhbnks IHRoYXQgd2FzIGFwcGxpZWQgaW4gdGhlIG1vc3QgcmVjZW50CisgICAgICAgICAgRElBTCBjb21t YW5kLCBvciB0aGUgc3VmZml4IHRoYXQgd291bGQgaGF2ZSBiZWVuIGFwcGxpZWQgaW4gdGhlCisg ICAgICAgICAgbW9zdCByZWNlbnQgUERJQUwgY29tbWFuZC4gVXNlIHRoaXMgdmFyaWFibGUgdG8g c2VuZCB0aGUgZGlhbAorICAgICAgICAgIHN1ZmZpeCBhdCBhbnkgZGVzaXJlZCBwb2ludCBpbiBh IFBESUFMIHNlcXVlbmNlLgorCisgICBcdihkaWFsdHlwZSkKKyAgICAgICAgICBBIG51bWJlciBp bmRpY2F0aW5nIHRoZSB0eXBlIG9mIGNhbGwgdGhhdCB3YXMgbW9zdCByZWNlbnRseQorICAgICAg ICAgIHBsYWNlZC4gQ2FuIGJlIHVzZWQgYWZ0ZXIgYSBub3JtYWwgRElBTCBjb21tYW5kLCBvciBh ZnRlciB0aGUKKyAgICAgICAgICBmaXJzdCBQRElBTCBjb21tYW5kIGluIGEgUERJQUwgc2VxdWVu Y2UuIFZhbHVlcyBhcmU6CisKKyAgLTI6IFVua25vd24gYmVjYXVzZSBUQVBJIGhhbmRsZWQgdGhl IHBob25lIG51bWJlciB0cmFuc2xhdGlvbi4KKyAgLTE6IFVua25vd24gYmVjYXVzZSBzb21lIGtp bmQgb2YgZXJyb3Igb2NjdXJyZWQuCisgICAwOiBJbnRlcm5hbCB3aXRoaW4gUEJYLgorICAgMTog VG9sbC1mcmVlLgorICAgMjogTG9jYWwgd2l0aGluIGNhbGxpbmcgYXJlYS4KKyAgIDM6IFVua25v d24gKGUuZy4gYmVjYXVzZSBhIGxpdGVyYWwtZm9ybWF0IHBob25lIG51bWJlciB3YXMgZ2l2ZW4p LgorICAgNDogTG9uZyBkaXN0YW5jZSB3aXRoaW4gY291bnRyeS4KKyAgIDU6IEludGVybmF0aW9u YWwKKworICAgXHYoZGlhbGNvdW50KQorICAgICAgICAgIFRoZSBjdXJyZW50IHZhbHVlIG9mIHRo ZSBESUFMIHJldHJ5IGNvdW50ZXIsIGZvciB1c2UgaW4gYSBESUFMCisgICAgICAgICAgbWFjcm8g KFszOThdU2VjdGlvbiAyLjEuMTMpLgorCisgICBcdihkJHB4KQorICAgICAgICAgIFBCWCBFeGNo YW5nZSAoc2VlIFszOTldU2VjdGlvbiAyLjEuMTIpLgorCisgICBPdGhlciBkaWFsLXJlbGF0ZWQg dmFyaWFibGVzLCBhbHJlYWR5IGRvY3VtZW50ZWQgaW4gWzQwMF1Vc2luZyBDLUtlcm1pdAorICAg KG9yIG90aGVyIHNlY3Rpb25zIG9mIHRoaXMgZG9jdW1lbnQsIGUuZy4gWzQwMV1TZWN0aW9uIDIu MS4xKSwgaW5jbHVkZQorICAgXHYoZGlhbG51bWJlciksIFx2KGRpYWxzdGF0dXMpLCBldGMuIEEg Y29udmVuaWVudCB3YXkgdG8gZGlzcGxheSBhbGwgb2YKKyAgIHRoZW0gaXM6CisKKyAgc2hvdyB2 YXJpYWJsZSBkaWFsICA7IGhpbnQ6IGFiYnJldmlhdGUgInNobyB2YXIgZGlhbCIKKworICAgVGhp cyBzaG93cyB0aGUgdmFsdWVzIG9mIGFsbCB0aGUgdmFyaWFibGVzIHdob3NlIG5hbWVzIHN0YXJ0 IHdpdGgKKyAgICJkaWFsIi4gQWxzbyAic2hvdyB2YXJpYWJsZSBkJCIgKHRvIHNob3cgdGhlIFx2 KGQkLi4uKSB2YXJpYWJsZXMpLgorCisyLjEuMTIuIEluY3JlYXNlZCBGbGV4aWJpbGl0eSBvZiBQ QlggRGlhbGluZworCisgICBSZWZlciB0byBbNDAyXVVzaW5nIEMtS2VybWl0LCAybmQgRWRpdGlv biwgcGFnZXMgMTA3LTEwOC4gUmVjYWxsIHRoYXQKKyAgIHRocmVlIGNvbW1hbmRzIGFyZSBuZWVk ZWQgdG8gY29uZmlndXJlIEMtS2VybWl0IGZvciBkaWFsaW5nIGZyb20gYSBQQlg6CisKKyAgU0VU IERJQUwgUEJYLUVYQ0hBTkdFIG51bWJlcgorICBTRVQgRElBTCBQQlgtSU5TSURFLVBSRUZJWCBu dW1iZXIKKyAgU0VUIERJQUwgUEJYLU9VVFNJREUtUFJFRklYIG51bWJlcgorCisgICBVbmZvcnR1 bmF0ZWx5LCB0aGlzIG1vZGVsIGRvZXMgbm90IGFjY29tbW9kYXRlIFBCWHMgdGhhdCBoYXZlIG1v cmUgdGhhbgorICAgb25lIGV4Y2hhbmdlLiBGb3IgZXhhbXBsZSBvdXIgUEJYIGF0IENvbHVtYmlh IFVuaXZlcnNpdHkgKHdoaWNoIG11c3QKKyAgIGhhbmRsZSBtb3JlIHRoYW4gMTAsMDAwIHBob25l cykgaGFzIDg1My14eHh4IGFuZCA4NTQteHh4eCBleGNoYW5nZXMuCisKKyAgIEJlZ2lubmluZyBp biBDLUtlcm1pdCA3LjAsIHRoZSBTRVQgRElBTCBQQlgtRVhDSEFOR0UgY29tbWFuZCBhY2NlcHRz IGEKKyAgIGxpc3Qgb2YgZXhjaGFuZ2VzLCBlLmcuOgorCisgIFNFVCBESUFMIFBCWC1FWENIQU5H RSA4NTMgODU0CisKKyAgIChtdWx0aXBsZSBleGNoYW5nZXMgYXJlIHNlcGFyYXRlZCBieSBzcGFj ZXMsIG5vdCBjb21tYXMpLgorCisgICBTbyBub3cgd2hlbiBkaWFsaW5nIGEgcG9ydGFibGUtZm9y bWF0IG51bWJlciB0aGF0IGhhcyB0aGUgc2FtZSBjb3VudHJ5CisgICBhbmQgYXJlYSBjb2RlcyBh cyB0aG9zZSBvZiB5b3VyIGRpYWxpbmcgbG9jYXRpb24sIEMtS2VybWl0IGNvbXBhcmVzIHRoZQor ICAgZXhjaGFuZ2Ugb2YgdGhlIGRpYWxlZCBudW1iZXIgd2l0aCBlYWNoIG51bWJlciBpbiB0aGUg UEJYIEV4Y2hhbmdlIGxpc3QKKyAgIChyYXRoZXIgdGhhbiB3aXRoIGEgc2luZ2xlIFBCWCBFeGNo YW5nZSBudW1iZXIsIGFzIGl0IGRpZCBmb3JtZXJseSkgdG8KKyAgIGRldGVybWluZSB3aGV0aGVy IHRoaXMgaXMgYW4gaW50ZXJuYWwgUEJYIG51bWJlciBvciBhbiBleHRlcm5hbCBjYWxsLgorICAg SWYgaXQgaXMgYW4gZXh0ZXJuYWwgY2FsbCwgdGhlbiB0aGUgUEJYIE91dHNpZGUgUHJlZml4IGlz IGFwcGxpZWQsIGFuZAorICAgdGhlbiB0aGUgbm9ybWFsIGRpYWxpbmcgcnVsZXMgZm9yIGxvY2Fs IG9yIGxvbmctZGlzdGFuY2UgY2FsbHMuCisKKyAgIElmIGl0IGlzIGFuIGluc2lkZSBjYWxsLCB0 aGUgZXhjaGFuZ2UgaXMgcmVwbGFjZWQgYnkgdGhlIFBCWCBJbnNpZGUKKyAgIFByZWZpeC4gQnV0 IGlmIHRoZSBQQlggaGFzIG1vcmUgdGhhbiBvbmUgZXhjaGFuZ2UsIGEgc2luZ2xlIGZpeGVkIFBC WAorICAgSW5zaWRlIFByZWZpeCBpcyBwcm9iYWJseSBub3Qgc3VmZmljaWVudC4gRm9yIGV4YW1w bGUsIGF0IENvbHVtYmlhCisgICBVbml2ZXJzaXR5LCB3ZSBtdXN0IGRpYWwgMy14eHh4IGZvciBh biBpbnRlcm5hbCBjYWxsIHRvIDg1My14eHh4LCBidXQKKyAgIDQteHh4eCBmb3IgYSBjYWxsIHRv IDg1NC14eHh4LiBUaGF0IGlzLCB0aGUgaW5zaWRlIHByZWZpeCBpcyB0aGUgZmluYWwKKyAgIGRp Z2l0IG9mIHRoZSBleGNoYW5nZSB3ZSBhcmUgZGlhbGluZy4gRm9yIHRoaXMgcmVhc29uLCBDLUtl cm1pdCA3LjAKKyAgIHByb3ZpZGVzIGEgbWV0aG9kIHRvIGRldGVybWluZSB0aGUgaW5zaWRlIHBy ZWZpeCBkeW5hbWljYWxseSBhdCBkaWFsaW5nCisgICB0aW1lLCBjb25zaXN0aW5nIG9mIGEgbmV3 IHZhcmlhYmxlIGFuZCBuZXcgc3ludGF4IGZvciB0aGUgU0VUIERJQUwKKyAgIFBCWC1JTlNJREUt UFJFRklYIGNvbW1hbmQ6CisKKyAgIFx2KGQkcHgpCisgICAgICAgICAgVGhpcyB2YXJpYWJsZSBj b250YWlucyB0aGUgZXhjaGFuZ2UgdGhhdCB3YXMgbWF0Y2hlZCB3aGVuIGEgUEJYCisgICAgICAg ICAgaW50ZXJuYWwgY2FsbCB3YXMgZGV0ZWN0ZWQuIEZvciBleGFtcGxlLCBpZiB0aGUgUEJYIGV4 Y2hhbmdlCisgICAgICAgICAgbGlzdCBpcyAiODUzIDg1NCIgYW5kIGEgY2FsbCBpcyBwbGFjZWQg dG8gKzEgKDIxMikgODU0LTk5OTksCisgICAgICAgICAgXHYoZCRweCkgaXMgc2V0IHRvIDg1NC4K KworICAgU0VUIERJQUwgUEJYLUlOU0lERS1QUkVGSVggXGZ4eHgoLi4uKQorICAgICAgICAgIElm IHRoZSBQQlggSW5zaWRlIFByZWZpeCBpcyBkZWZpbmVkIHRvIGJlIGEgZnVuY3Rpb24sIGl0cwor ICAgICAgICAgIGV2YWx1YXRpb24gaXMgZGVmZXJyZWQgdW50aWwgZGlhbGluZyB0aW1lLiBOb3Jt YWxseSwgdGhpcyB3b3VsZAorICAgICAgICAgIGJlIGEgc3RyaW5nIGZ1bmN0aW9uIGhhdmluZyBc dihkJHB4KSBhcyBhbiBvcGVyYW5kLiBPZiBjb3Vyc2UsCisgICAgICAgICAgeW91IGNhbiBzdGls bCBzcGVjaWZ5IGEgY29uc3RhbnQgc3RyaW5nLCBhcyBiZWZvcmUuCisKKyAgIFNvIGdpdmVuIHRo ZSBmb2xsb3dpbmcgc2V0dXA6CisKKyAgU0VUIERJQUwgQ09VTlRSWS1DT0RFIDEKKyAgU0VUIERJ QUwgQVJFQS1DT0RFIDIxMgorICBTRVQgRElBTCBQQlgtT1VUU0lERS1QUkVGSVggOTMsCisgIFNF VCBESUFMIFBCWC1FWENIQU5HRSA4NTMgODU0CisgIFNFVCBESUFMIFBCWC1JTlNJREUtUFJFRklY IFxmcmlnaHQoXHYoZCRweCksMSkKKworICAgVGhlIGZvbGxvd2luZyBudW1iZXJzIGdpdmUgdGhl IHJlc3VsdHMgaW5kaWNhdGVkOgorCisgTnVtYmVyICAgICAgICAgICAgICAgICAgIFJlc3VsdAor ICArMSAoMjEyKSA4NTQtOTg3NiAgICAgICAgNC05ODc2CisgICsxICgyMTIpIDg1My0xMjM0ICAg ICAgICAzLTEyMzQKKyAgKzEgKDIxMikgNzY1LTQzMjEgICAgICAgIDkzLDc2NS00MzIxCisgICsx ICgzMzMpIDc2NS00MzIxICAgICAgICA5MywxMzMzNzY1LTQzMjEKKworICAgRnVydGhlcm1vcmUs IHRoZSBLX1BCWF9YQ0ggZW52aXJvbm1lbnQgdmFyaWFibGUgbWF5IG5vdyBiZSBzZXQgdG8gYQor ICAgbGlzdCBvZiBleGNoYW5nZXMgdG8gYXV0b21hdGljYWxseSBpbml0aWFsaXplIEMtS2VybWl0 J3MgUEJYIGV4Y2hhbmdlCisgICBsaXN0LCBmb3IgZXhhbXBsZSAoaW4gVU5JWCBrc2ggb3IgYmFz aCk6CisKKyAgZXhwb3J0IEtfUEJYX1hDSD0iODUzIDg1NCIKKworICAgKFF1b3RlcyByZXF1aXJl ZCBiZWNhdXNlIG9mIHRoZSBzcGFjZS4pIE9mIGNvdXJzZSwgdGhpcyB2YXJpYWJsZSBjYW4KKyAg IGFsc28gYmUgc2V0IHRvIGEgc2luZ2xlIGV4Y2hhbmdlLCBhcyBiZWZvcmU6CisKKyAgZXhwb3J0 IEtfUEJYX1hDSD04NTMKKworMi4xLjEzLiBUaGUgRElBTCBtYWNybyAtIExhc3QtTWludXRlIFBo b25lIE51bWJlciBDb252ZXJzaW9ucworCisgICBBZnRlciBhIERJQUwgb3IgTE9PS1VQIGNvbW1h bmQgaXMgZ2l2ZW4sIGEgbGlzdCBvZiBwaG9uZSBudW1iZXJzIGlzCisgICBhc3NlbWJsZWQgZnJv bSB0aGUgZGlhbGluZyBkaXJlY3RvcnkgKGlmIGFueSksIHdpdGggYWxsCisgICBsb2NhdGlvbi1k ZXBlbmRlbnQgY29udmVyc2lvbiBydWxlcyBhcHBsaWVkIGFzIGRlc2NyaWJlZCBpbiBDaGFwdGVy IDUKKyAgIG9mIFs0MDNdVXNpbmcgQy1LZXJtaXQuCisKKyAgIEhvd2V2ZXIsIGFkZGl0aW9uYWwg Y29udmVyc2lvbnMgbWlnaHQgc3RpbGwgYmUgcmVxdWlyZWQgYXQgdGhlIGxhc3QKKyAgIG1pbnV0 ZSBiYXNlZCBvbiBsb2NhbCBvciBlcGhlbWVyYWwgY29uZGl0aW9ucy4gU28gdGhhdCB5b3UgY2Fu IGhhdmUgdGhlCisgICBmaW5hbCB3b3JkIG9uIHRoZSBleGFjdCBmb3JtYXQgb2YgdGhlIGRpYWwg c3RyaW5nLCBDLUtlcm1pdCA3LjAgbGV0cworICAgeW91IHBhc3MgdGhlIGNvbnZlcnRlZCBzdHJp bmcgdGhyb3VnaCBhIG1hY3JvIG9mIHlvdXIgb3duIGRlc2lnbiBmb3IKKyAgIGZpbmFsIHByb2Nl c3NpbmcgYmVmb3JlIGRpYWxpbmcuIFRoZSByZWxldmFudCBjb21tYW5kIGlzOgorCisgICBTRVQg RElBTCBNQUNSTyBbIG5hbWUgXQorICAgICAgICAgIFNwZWNpZmllcyB0aGUgbmFtZSBvZiBhIG1h Y3JvIHRvIGJlIHJ1biBvbiBlYWNoIHBob25lIG51bWJlcgorICAgICAgICAgIGFmdGVyIGFsbCBi dWlsdC1pbiBjb252ZXJzaW9ucyBoYXZlIGJlZW4gYXBwbGllZCwganVzdCBiZWZvcmUKKyAgICAg ICAgICB0aGUgbnVtYmVyIGlzIGRpYWxlZC4gSWYgbm8gbmFtZSBpcyBnaXZlbiwgbm8gbWFjcm8g aXMgcnVuLiBUaGUKKyAgICAgICAgICBwaG9uZSBudW1iZXIsIGFzIGl0IHdvdWxkIGhhdmUgYmVl biBkaWFsZWQgaWYgdGhlcmUgd2VyZSBubyBkaWFsCisgICAgICAgICAgbWFjcm8sIGlzIHBhc3Nl ZCB0byB0aGUgbWFjcm8uCisKKyAgIFRoZSBkaWFsIG1hY3JvIGNhbiBkbyBhbnl0aGluZyBhdCBh bGwgKGV4Y2VwdCBzdGFydCBhIGZpbGUgdHJhbnNmZXIpLgorICAgSG93ZXZlciwgdGhlIG5vcm1h bCB1c2UgZm9yIHRoZSBtYWNybyB3b3VsZCBiZSB0byBtb2RpZnkgdGhlIHBob25lCisgICBudW1i ZXIuIEZvciB0aGlzIHJlYXNvbiB0aGUgcGhvbmUgbnVtYmVyIGlzIHBhc3NlZCB0byB0aGUgbWFj cm8gYXMKKyAgIGFyZ3VtZW50IG51bWJlciAxIChcJTEpLiBUbyBjYXVzZSBhIG1vZGlmaWVkIG51 bWJlciB0byBiZSBkaWFsZWQsIHRoZQorICAgbWFjcm8gc2hvdWxkIHRlcm1pbmF0ZSB3aXRoIGEg UkVUVVJOIHN0YXRlbWVudCBzcGVjaWZ5aW5nIGEgcmV0dXJuCisgICB2YWx1ZS4gVG8gbGVhdmUg dGhlIG51bWJlciBhbG9uZSwgdGhlIG1hY3JvIHNob3VsZCBzaW1wbHkgZW5kLiBFeGFtcGxlOgor CisgIGRlZmluZSB4eHggcmV0dXJuIDEwMTA4ODg5OTk5JFwlMQorICBzZXQgZGlhbCBtYWNybyB4 eHgKKyAgZGlhbCB4eXpjb3JwCisKKyAgIFRoaXMgZGVmaW5lcyBhIERJQUwgTUFDUk8gY2FsbGVk IHh4eCwgd2hpY2ggcHV0cyBhbiBhY2Nlc3MgY29kZSBvbiB0aGUKKyAgIGZyb250IG9mIHRoZSBu dW1iZXIuIEFub3RoZXIgZXhhbXBsZSBtaWdodCBiZToKKworICBkZWYgeHh4IGlmIGVxdWFsICJc dihtb2RlbSkiICJoYXllcy0xMjAwIiByZXR1cm4gXGZyZXBsYWNlKFwlMSwkLHssLCwsLH0pCisg IHNldCBkaWFsIG1hY3JvIHh4eAorICBkaWFsIHh5emNvcnAKKworICAgd2hpY2ggcmVwbGFjZXMg YW55IGRvbGxhci1zaWduIGluIHRoZSBkaWFsIHN0cmluZyBieSBhIHNlcmllcyBvZiBmaXZlCisg ICBjb21tYXMsIGUuZy4gYmVjYXVzZSB0aGlzIHBhcnRpY3VsYXIgbW9kZW0gZG9lcyBub3Qgc3Vw cG9ydCB0aGUgIndhaXQKKyAgIGZvciBib25nIiBmZWF0dXJlIChyZW1lbWJlciB0aGF0IGNvbW1h cyB0aGF0IGFyZSB0byBiZSBpbmNsdWRlZAorICAgbGl0ZXJhbGx5IGluIGZ1bmN0aW9uIGFyZ3Vt ZW50cyBtdXN0IGJlIGVuY2xvc2VkIGluIGJyYWNlcyB0bworICAgZGlzdGluZ3Vpc2ggdGhlbSBm cm9tIHRoZSBjb21tYXMgdGhhdCBzZXBhcmF0ZSB0aGUgYXJndW1lbnRzKSBhbmQgd2hlbgorICAg dGhlIElGIGNvbmRpdGlvbiBpcyBub3Qgc2F0aXNmaWVkLCB0aGUgbWFjcm8gZG9lcyBub3QgcmV0 dXJuIGEgdmFsdWUsCisgICBhbmQgc28gdGhlIG51bWJlciBpcyBub3QgbW9kaWZpZWQuIFRoZW4g d2hlbiBhIERJQUwgY29tbWFuZCBpcyBnaXZlbgorICAgcmVmZXJlbmNpbmcgYSBkaWFsaW5nIGRp cmVjdG9yeSBlbnRyeSwgInh5emNvcnAiLiBUaGUgbWFjcm8gaXMKKyAgIGF1dG9tYXRpY2FsbHkg YXBwbGllZCB0byBlYWNoIG1hdGNoaW5nIG51bWJlci4KKworICAgTnVtZXJvdXMgZGlhbC0sIG1v ZGVtLSwgY29tbXVuaWNhdGlvbnMtLCBhbmQgdGltZS1yZWxhdGVkIHZhcmlhYmxlcyBhcmUKKyAg IGF2YWlsYWJsZSBmb3IgZGVjaXNpb24gbWFraW5nIHlvdXIgZGlhbCBtYWNyby4gVHlwZSBTSE9X IFZBUklBQkxFUyBmb3IKKyAgIGEgbGlzdC4gT2YgcGFydGljdWxhciBpbnRlcmVzdCBpcyB0aGUg XHYoZGlhbGNvdW50KSB2YXJpYWJsZSwgd2hpY2gKKyAgIHRlbGxzIGhvdyBtYW55IHRpbWVzIHRo ZSBESUFMIGNvbW1hbmQgZ29uZSB0aHJvdWdoIGl0cyByZXRyeSBsb29wOiAxIG9uCisgICB0aGUg Zmlyc3QgdHJ5LCAyIG9uIHRoZSBzZWNvbmQsIDMgb24gdGhlIHRoaXJkLCBhbmQgc28gb24sIGFu ZCB0aGUKKyAgIFx2KGRpYWxyZXN1bHQpIGFuZCBcdihkaWFsc3RhdHVzKSB2YXJpYWJsZXMuCisK KyAgIEhlcmUgYXJlIHNvbWUgb3RoZXIgYXBwbGljYXRpb25zIGZvciB0aGUgRElBTCBNQUNSTyAo ZnJvbSB1c2Vycyk6CisKKyAgICAgKiBQaG9uZSBudW1iZXJzIGluIHRoZSBkaWFsaW5nIGRpcmVj dG9yeSBhcmUgZm9ybWF0dGVkIHdpdGggJy0nIGZvcgorICAgICAgIHJlYWRhYmlsaXR5LCBidXQg c29tZSBtb2RlbXMgZG9uJ3QgbGlrZSB0aGUgaHlwaGVucywgc28gdGhlIERJQUwKKyAgICAgICBt YWNybyBpcyB1c2VkIHRvIHJlbW92ZSB0aGVtIGJlZm9yZSBkaWFsaW5nOyBlLmcgMDA5MC0xMjMt NDU2LTc4LTk5CisgICAgICAgYmVjb21lcyAwMDkwMTIzNDU2Nzg5OTogImRlZiB4eHggcmV0dXJu IFxmcmVwbGFjZShcJTEsLSkiLgorICAgICAqIFRvIHNldCBzb21lIHNwZWNpZmljIG1vZGVtIChv ciBvdGhlcikgb3B0aW9ucyBkZXBlbmRpbmcgb24gdGhlCisgICAgICAgY2FsbGVkIGN1c3RvbWVy IG9yIHRlbGVwaG9uZSBudW1iZXIuCisgICAgICogQ2hvb3NpbmcgdGhlIG1vc3QgYXBwcm9wcmlh dGUgcHJvdmlkZXIgYmFzZWQgb24gKGUuZy4pIHRpbWUgb2YgZGF5LAorICAgICAgIG9yIGN5Y2xp bmcgdGhyb3VnaCBhIGxpc3Qgb2YgcHJvdmlkZXJzIGluIGNhc2Ugc29tZSBwcm92aWRlcnMgbWln aHQKKyAgICAgICBiZSBidXN5LgorCisgICBUbyBpbGx1c3RyYXRlIHRoZSBmaW5hbCBpdGVtLCBz dXBwb3NlIHlvdSBoYXZlIGEgY2hvaWNlIGFtb25nIG1hbnkKKyAgIHBob25lIHNlcnZpY2UgcHJv dmlkZXJzOyB0aGUgcHJvdmlkZXIgaXMgY2hvc2VuIGJ5IGRpYWxpbmcgYW4gYWNjZXNzCisgICBj b2RlIGJlZm9yZSB0aGUgbnVtYmVyLiBEaWZmZXJlbnQgcHJvdmlkZXJzIG1pZ2h0IGJlIGJldHRl ciAoZS5nLgorICAgY2hlYXBlcikgZm9yIGNlcnRhaW4gdGltZXMgb2YgZGF5IG9yIGRheXMgb2Yg dGhlIHdlZWssIG9yIGZvciBkaWFsaW5nCisgICBjZXJ0YWluIGxvY2F0aW9uczsgeW91IGNhbiB1 c2UgdGhlIERJQUwgbWFjcm8gdG8gYWRkIHRoZSBhY2Nlc3MgZm9yIHRoZQorICAgbW9zdCBkZXNp cmFibGUgcHJvdmlkZXIuCisKKyAgIFNpbWlsYXJseSwgd2hlbiB0aGUgc2FtZSBudW1iZXIgbWln aHQgYmUgcmVhY2hlZCB0aHJvdWdoIG11bHRpcGxlCisgICBwcm92aWRlcnMsIGl0J3MgcG9zc2li bGUgdGhhdCBvbmUgcHJvdmlkZXIgbWlnaHQgbm90IGJlIGFibGUgdG8KKyAgIGNvbXBsZXRlIHRo ZSBjYWxsLCBidXQgYW5vdGhlciBvbmUgY2FuLiBJbiB0aGF0IGNhc2UsIHlvdSBjYW4gdXNlIHRo ZQorICAgRElBTCBtYWNybyB0byBzd2l0Y2ggcHJvdmlkZXJzIGVhY2ggdGltZSB0aHJvdWdoIHRo ZSBESUFMIGxvb3AgLS0KKyAgIHRoYXQncyB3aGVyZSB0aGUgXHYoZGlhbGNvdW50KSB2YXJpYWJs ZSBjb21lcyBpbiBoYW5keS4KKworICAgVGhlIGZvbGxvd2luZyBjb21tYW5kIGNhbiBiZSB1c2Vk IHRvIGRlYnVnIHRoZSBESUFMIG1hY3JvOgorCisgICBTRVQgRElBTCBURVNUIHsgT04sIE9GRiB9 CisgICAgICAgICAgTm9ybWFsbHkgT0ZGLCBzbyB0aGUgRElBTCBjb21tYW5kIGFjdHVhbGx5IGRp YWxzLiBXaGVuIE9OLCB0aGUKKyAgICAgICAgICBESUFMIGNvbW1hbmQgcGVyZm9ybXMgYWxsIGxv b2t1cHMgYW5kIG51bWJlciBjb252ZXJzaW9ucywgYW5kCisgICAgICAgICAgdGhlbiBnb2VzIHRo cm91Z2ggdGhlIG51bWJlciBsaXN0IGFuZCByZXRyeSBsb29wLCBidXQgaW5zdGVhZCBvZgorICAg ICAgICAgIGFjdHVhbGx5IGRpYWxpbmcsIGxpc3RzIHRoZSBudW1iZXJzIGl0IHdvdWxkIGhhdmUg Y2FsbGVkIGlmIG5vbmUKKyAgICAgICAgICBvZiB0aGUgRElBTCBhdHRlbXB0cyBzdWNjZWVkZWQg KG9yIG1vcmUgcHJlY2lzZWx5LCBldmVyeSBudW1iZXIKKyAgICAgICAgICB3YXMgYWx3YXlzIGJ1 c3kpLgorCisyLjEuMTQuIEF1dG9tYXRpYyBUb25lL1B1bHNlIERpYWxpbmcgU2VsZWN0aW9uCisK KyAgIFNFVCBESUFMIE1FVEhPRCB7IEFVVE8sIERFRkFVTFQsIFBVTFNFLCBUT05FIH0KKyAgICAg ICAgICBDaG9vc2VzIHRoZSBkaWFsaW5nIG1ldGhvZCBmb3Igc3Vic2VxdWVudCBjYWxscy4KKwor ICAgUHJpb3IgdG8gdmVyc2lvbiA3LjAsIEMtS2VybWl0J3MgRElBTCBNRVRIT0Qgd2FzIERFRkFV TFQgYnkgZGVmYXVsdCwKKyAgIG1lYW5pbmcgaXQgZG9lcyBub3Qgc3BlY2lmeSBhIGRpYWxpbmcg bWV0aG9kIHRvIHRoZSBtb2RlbSwgYnV0IHJlbGllcworICAgb24gdGhlIG1vZGVtIHRvIGhhdmUg YW4gYXBwcm9wcmlhdGUgZGVmYXVsdCBkaWFsaW5nIG1ldGhvZCBzZXQuIFNvLCBmb3IKKyAgIGV4 YW1wbGUsIHdoZW4gdXNpbmcgSGF5ZXMgY29tcGF0aWJsZSBtb2RlbXMsIHRoZSBkaWFsIHN0cmlu ZyB3b3VsZCBiZQorICAgc29tZXRoaW5nIGxpa2UgQVRENzY1NDMyMSwgcmF0aGVyIHRoYW4gQVRE VDc2NTQzMjEgb3IgQVREUDc2NTQzMjEuCisKKyAgIEluIEMtS2VybWl0IDcuMCBhbmQgSzk1IDEu MS4xOSwgdGhlIGRpYWwgbWV0aG9kIGNhbiBiZSBzZXQgZnJvbSB0aGUKKyAgIGVudmlyb25tZW50 IHZhcmlhYmxlOgorCisgIEtfRElBTF9NRVRIT0QKKworICAgd2hlbiBLZXJtaXQgc3RhcnRzLiBU aGUgdmFsdWVzIGNhbiBiZSBUT05FLCBQVUxTRSwgb3IgREVGQVVMVCwgZS5nLgorICAgKFVOSVgp OgorCisgIHNldCBLX0RJQUxfTUVUSE9EPVRPTkU7IGV4cG9ydCBLX0RJQUxfTUVUSE9ECisKKyAg IEluIHRoZSBhYnNlbmNlIG9mIGEgS19ESUFMX01FVEhPRCBkZWZpbml0aW9uLCB0aGUgbmV3IGRl ZmF1bHQgU0VUIERJQUwKKyAgIE1FVEhPRCBpcyBBVVRPIHJhdGhlciB0aGFuIERFRkFVTFQuIFdo ZW4gRElBTCBNRVRIT0QgaXMgQVVUTyBhbmQgdGhlCisgICBsb2NhbCBjb3VudHJ5IGNvZGUgaXMg a25vd24sIHRoZW4gaWYgdG9uZSBkaWFsaW5nIGlzIHVuaXZlcnNhbGx5CisgICBhdmFpbGFibGUg aW4gdGhlIGNvcnJlc3BvbmRpbmcgYXJlYSwgdG9uZSBkaWFsaW5nIGlzIHVzZWQ7IGlmIGRpYWxp bmcKKyAgIGZyb20gYSBsb2NhdGlvbiB3aGVyZSBwdWxzZSBkaWFsaW5nIGlzIG1hbmRhdG9yeSwg cHVsc2UgZGlhbGluZyBpcworICAgdXNlZC4KKworICAgVGhlICJ0b25lIGNvdW50cnkiIGFuZCAi cHVsc2UgY291bnRyeSIgbGlzdHMgYXJlIHByZWxvYWRlZCBhY2NvcmRpbmcgdG8KKyAgIG91ciBr bm93bGVkZ2UgYXQgdGhlIHRpbWUgb2YgcmVsZWFzZS4gWW91IGNhbiBzZWUgdGhlaXIgY29udGVu dHMgaW4gdGhlCisgICBTSE9XIERJQUwgbGlzdGluZy4gWW91IGNhbiBjaGFuZ2UgdGhlIGxpc3Rz IHdpdGg6CisKKyAgIFNFVCBESUFMIFRPTkUtQ09VTlRSSUVTIFsgY2MgWyBjYyBbIC4uLiBdIF0g XQorICAgICAgICAgIFJlcGxhY2VzIHRoZSBjdXJyZW50IFRPTkUtQ09VTlRSSUVTIGxpc3Qgd2l0 aCB0aGUgb25lIGdpdmVuLgorICAgICAgICAgIEVhY2ggY2MgaXMgYSBjb3VudHJ5IGNvZGU7IHNl cGFyYXRlIHRoZW0gd2l0aCBzcGFjZXMgKG5vdAorICAgICAgICAgIGNvbW1hcykuIEV4YW1wbGU6 CisKKyAgc2V0IGRpYWwgdG9uZS1jb3VudHJpZXMgMSAzNTggNDQgNDYgNDkKKworICAgICAgICAg IElmIG5vIGNvdW50cnkgY29kZXMgYXJlIGdpdmVuLCB0aGUgY3VycmVudCBsaXN0LCBpZiBhbnks IGlzCisgICAgICAgICAgcmVtb3ZlZCwgaW4gd2hpY2ggY2FzZSBTRVQgRElBTCBNRVRIT0QgQVVU TyBpcyBlcXVpdmFsZW50IHRvIFNFVAorICAgICAgICAgIERJQUwgTUVUSE9EIERFRkFVTFQuCisK KyAgIFNFVCBESUFMIFBVTFNFLUNPVU5UUklFUyBbIGNjIFsgY2MgWyAuLi4gXSBdIF0KKyAgICAg ICAgICBSZXBsYWNlcyB0aGUgY3VycmVudCBQVUxTRS1DT1VOVFJJRVMgbGlzdCB3aXRoIHRoZSBv bmUgZ2l2ZS4KKyAgICAgICAgICBTeW50YXggYW5kIG9wZXJhdGlvbiBpcyBsaWtlIFNFVCBESUFM IFRPTkUtQ09VTlRSSUVTLgorCisgICBJZiB0aGUgc2FtZSBjb3VudHJ5IGNvZGUgYXBwZWFycyBp biBib3RoIGxpc3RzLCBQdWxzZSB0YWtlcyBwcmVjZWRlbmNlLgorCisgICBUaGUgU0VUIERJQUwg VE9ORS0gYW5kIFBVTFNFLUNPVU5UUklFUyBjb21tYW5kcyBwZXJmb3JtIG5vIHZlcmlmaWNhdGlv bgorICAgd2hhdHNvZXZlciBvbiB0aGUgY2Mncywgc2luY2UgYWxtb3N0IGFueSBzeW50YXggbWln aHQgYmUgbGVnYWwgaW4gc29tZQorICAgc2V0dGluZ3MuIEZ1cnRoZXJtb3JlLCB0aGVyZSBpcyBu byBmYWNpbGl0eSB0byBlZGl0IHRoZSBsaXN0czsgeW91IGNhbgorICAgb25seSByZXBsYWNlIHRo ZSB3aG9sZSBsaXN0LiBIb3dldmVyLCBzaW5jZSB0aGUgb25seSBwdXJwb3NlIG9mIHRoZXNlCisg ICBsaXN0cyBpcyB0byBlc3RhYmxpc2ggYSBiYXNpcyBmb3IgcGlja2luZyB0b25lIG9yIHB1bHNl IGRpYWxpbmcKKyAgIGF1dG9tYXRpY2FsbHksIGFsbCB5b3UgbmVlZCB0byBvdmVycmlkZSB0aGUg ZWZmZWN0IG9mIHRoZSBsaXN0IGlzIHRvCisgICBzZXQgYSBzcGVjaWZpYyBkaWFsaW5nIG1ldGhv ZCB3aXRoIFNFVCBESUFMIE1FVEhPRCBUT05FIG9yIFNFVCBESUFMCisgICBNRVRIT0QgUFVMU0Uu CisKKzIuMS4xNS4gRGlhbC1Nb2RpZmllciBWYXJpYWJsZXMKKworICAgQXMgb2YgQy1LZXJtaXQg Ny4wLCBkaWFsIG1vZGlmaWVycyBhcmUgYXZhaWxhYmxlIGluIHRoZSBmb2xsb3dpbmcKKyAgIHZh cmlhYmxlczoKKworIFx2KGRtX2xwKSBMb25nIHBhdXNlCisgXHYoZG1fc3ApIFNob3J0IHBhdXNl CisgXHYoZG1fcGQpIFB1bHNlIGRpYWwKKyBcdihkbV90ZCkgVG9uZSBkaWFsCisgXHYoZG1fd2Ep IFdhaXQgZm9yIGFuc3dlcgorIFx2KGRtX3dkKSBXYWl0IGZvciBkaWFsdG9uZQorIFx2KGRtX3Jj KSBSZXR1cm4gdG8gY29tbWFuZCBtb2RlCisKKyAgIFlvdSBjYW4gdXNlIHRoZXNlIGluIHlvdXIg ZGlhbCBzdHJpbmdzIGluIHBsYWNlIG9mIGhhcmR3aXJlZCBtb2RpZmllcnMKKyAgIGxpa2UgIkAi LCAiLCIsIGV0YywgZm9yIGluY3JlYXNlZCBwb3J0YWJpbGl0eSBvZiBzY3JpcHRzLiBFeGFtcGxl OgorCisgIEMtS2VybWl0PnNldCBtb2RlbSB0eXBlIHVzcm9ib3RpY3MKKyAgQy1LZXJtaXQ+c2hv IHZhcmlhYmxlcyBkbQorICAgXHYoZG1fbHApID0gLAorICAgXHYoZG1fc3ApID0gLworICAgXHYo ZG1fcGQpID0gUAorICAgXHYoZG1fdGQpID0gVAorICAgXHYoZG1fd2EpID0gQAorICAgXHYoZG1f d2QpID0gVworICAgXHYoZG1fcmMpID0gOworICBDLUtlcm1pdD5leGl0CisKKzIuMS4xNi4gR2l2 aW5nIE11bHRpcGxlIE51bWJlcnMgdG8gdGhlIERJQUwgQ29tbWFuZAorCisgICBQcmlvciB0byBD LUtlcm1pdCA3LjAsIHRoZSBvbmx5IHdheSB0byBnaXZlIGEgRElBTCBjb21tYW5kIGEgbGlzdCBv ZgorICAgcGhvbmUgbnVtYmVycyB0byB0cnkgdW50aWwgb25lIGFuc3dlcnMgd2FzIHRvIGNyZWF0 ZSBhIGRpYWxpbmcKKyAgIGRpcmVjdG9yeSB0aGF0IGhhZCBtdWx0aXBsZSBlbnRyaWVzIHVuZGVy IHRoZSBzYW1lIG5hbWUsIGFuZCB0aGVuIHVzZQorICAgdGhhdCBlbnRyeSBuYW1lIGluIHRoZSBE SUFMIGNvbW1hbmQuIE5vdyBhIGxpc3Qgb2YgbnVtYmVycyBjYW4gYmUgZ2l2ZW4KKyAgIHRvIHRo ZSBESUFMIGNvbW1hbmQgZGlyZWN0bHkgaW4gdGhlIGZvbGxvd2luZyBmb3JtYXQ6CisKKyAgZGlh bCB7e251bWJlcjF9e251bWJlcjJ9e251bWJlcjN9Li4ufQorCisgICBUaGlzIGlzIHRoZSBzYW1l IGxpc3QgZm9ybWF0IHVzZWQgYnkgU0VORCAvRVhDRVBUOiBhbmQgb3RoZXIgY29tbWFuZHMKKyAg IHRoYXQgYWxsb3cgYSBsaXN0IHdoZXJlIG5vcm1hbGx5IGEgc2luZ2xlIGl0ZW0gaXMgZ2l2ZW4u IFJlc3RyaWN0aW9ucworICAgb24gdGhpcyBmb3JtIG9mIHRoZSBESUFMIGNvbW1hbmQgYXJlOgor CisgICAgICogVGhlIGZpcnN0IHR3byBicmFjZXMgbXVzdCBiZSBhZGphY2VudDsgc3BhY2luZyBp cyBvcHRpb25hbAorICAgICAgIHRoZXJlYWZ0ZXIuCisgICAgICogRWFjaCBudW1iZXIgbXVzdCBi ZSBhbiBhY3R1YWwgbnVtYmVyIHRvIGRpYWwsIG5vdCBhIGRpYWxpbmcKKyAgICAgICBkaXJlY3Rv cnkgZW50cnkuCisgICAgICogRGlhbGluZyBkaXJlY3RvcnkgZW50cmllcyBtYXkgbm90IGNvbnRh aW4gbnVtYmVyIGxpc3RzIGluIHRoaXMKKyAgICAgICBmb3JtYXQuCisKKyAgIEluIGFsbCBvdGhl ciByZXNwZWN0cywgdGhlIG51bWJlcnMgYXJlIHRyZWF0ZWQgYXMgaWYgdGhleSBoYWQgYmVlbgor ICAgZmV0Y2hlZCBmcm9tIHRoZSBkaWFsaW5nIGRpcmVjdG9yeTsgdGhleSBjYW4gYmUgaW4gbGl0 ZXJhbCBvciBwb3J0YWJsZQorICAgZm9ybWF0LCBldGMuIEV4YW1wbGU6CisKKyAgZGlhbCB7ezc2 NTQzMjF9IHsrMSAoMjEyKSA1NTUxMjEyfSB7IDEtMjEyLTU1NTY3ODkgfX0KKworICAgVGhlIGxp c3QgY2FuIGJlIGFueSBsZW5ndGggYXQgYWxsLCB3aXRoaW4gcmVhc29uLgorCisgICBUaGlzIGZl YXR1cmUgaXMgZXNwZWNpYWxseSBoYW5keSBmb3IgdXNlIHdpdGggdGhlIEs5NSBEaWFsZXIsIGFs bG93aW5nCisgICBhIGxpc3Qgb2YgcGhvbmUgbnVtYmVycyB0byBiZSBzcGVjaWZpZWQgaW4gdGhl IFRlbGVwaG9uZSBOdW1iZXIgYm94CisgICB3aXRob3V0IGhhdmluZyB0byBzZXQgdXAgb3IgcmVm ZXJlbmNlIGEgc2VwYXJhdGUgZGlhbGluZyBkaXJlY3RvcnkuCisKKyAgIFlvdSBjYW4gYWxzbyB1 c2UgaXQgdG8gYWRkIGNvbW1vbmx5LWRpYWxlZCBzZXF1ZW5jZXMgYXMgdmFyaWFibGVzIGluCisg ICB5b3VyIEMtS2VybWl0IGN1c3RvbWl6YXRpb24gZmlsZSwgZS5nLjoKKworICBkZWZpbmUgd29y ayB7ezc2NTQzMjF9ezc2NTQzMjJ9ezc2NTQzMjN9fQorCisgICBhbmQgdGhlbjoKKworICBkaWFs IHtcbSh3b3JrKX0KKworICAgKHRoZSB2YXJpYWJsZSBuYW1lIG11c3QgYmUgZW5jbG9zZWQgaW4g YnJhY2VzKS4KKworICAgT3IgbW9yZSBzaW1wbHk6CisKKyAgZGVmaW5lIHdvcmsgZGlhbCB7ezc2 NTQzMjF9ezc2NTQzMjJ9ezc2NTQzMjN9fQorCisgICBhbmQgdGhlbjoKKworICB3b3JrCisKKzIu Mi4gTW9kZW1zCisKKzIuMi4xLiBOZXcgTW9kZW0gVHlwZXMKKworICAgU2luY2UgQy1LZXJtaXQg Ni4wOgorCisgIGF0bGFzLW5ld2NvbS0zMzYwMGlmeEMgQXRsYXMvTmV3Y29tIDMzNjAwCisgIGF0 dC1rZWVwaW50b3VjaCAgICAgICAgQVQmVCBLZWVwaW5Ub3VjaCBQQ01DSUEgVi4zMmJpcyBDYXJk IE1vZGVtCisgIGF0dC0xOTAwLXN0dS1paWkgICAgICAgQVQmVCBTZWN1cmUgRGF0YSBTVFUtSUlJ IE1vZGVsIDE5MDAKKyAgYXR0LTE5MTAtc3R1LWlpaSAgICAgICBBVCZUIFNlY3VyZSBEYXRhIFNU VS1JSUkgTW9kZWwgMTkxMAorICBiZXN0ZGF0YSAgICAgICAgICAgICAgIEJlc3QgRGF0YQorICBj YXJkaW5hbCAgICAgICAgICAgICAgIENhcmRpbmFsIFYuMzQgTVZQMjg4WCBzZXJpZXMuCisgIGNv bXBhcSAgICAgICAgICAgICAgICAgQ29tcGFxIERhdGErRmF4IChlLmcuIGluIFByZXNhcmlvKQor ICBmdWppdHN1ICAgICAgICAgICAgICAgIEZ1aml0c3UgRmF4L01vZGVtIEFkYXB0ZXIKKyAgZ2Vu ZXJpYy1oaWdoLXNwZWVkICAgICBBbnkgbW9kZXJuIGVycm9yLWNvcnJlY3RpbmcgZGF0YS1jb21w cmVzc2luZyBtb2RlbQorICBpdHUtdC12MjV0ZXIvdjI1MCAgICAgIElUVS1UIChDQ0lUVCkgVi4y NXRlciAoVi4yNTApIHN0YW5kYXJkIGNvbW1hbmQgc2V0CisgIG1lZ2FoZXJ0ei1hdHQtdjM0ICAg ICAgTWVnYWhlcnR6IEFUJlQgVi4zNAorICBtZWdhaGVydHoteGphY2sgICAgICAgIE1lZ2FoZXJ0 eiBYLUphY2sKKyAgbW90b3JvbGEtY29kZXggICAgICAgICBNb3Rvcm9sYSBDb2RleCAzMjZYIFNl cmllcworICBtb3Rvcm9sYS1tb250YW5hICAgICAgIE1vdG9yb2xhIE1vbnRhbmEKKyAgbXQ1NjM0 enB4ICAgICAgICAgICAgICBNdWx0aXRlY2ggTVQ1NjM0WlBYCisgIHJvY2t3ZWxsLXY5MCAgICAg ICAgICAgUm9ja3dlbGwgVi45MCA1NksKKyAgcm9sbS0yNDRwYyAgICAgICAgICAgICBTaWVtZW5z L1JvbG0gMjQ0UEMgKEFUIGNvbW1hbmQgc2V0KQorICByb2xtLTYwMC1zZXJpZXMgICAgICAgIFNp ZW1lbnMvUm9sbSA2MDAgU2VyaWVzIChBVCBjb21tYW5kIHNldCkKKyAgc3Bpcml0LWlpICAgICAg ICAgICAgICBRdWlja0NvbW0gU3Bpcml0IElJCisgIHN1cHJhc29uaWMgICAgICAgICAgICAgU3Vw cmFTb25pYyBWMjg4KworICBzdXByYS1leHByZXNzLXY5MCAgICAgIFN1cHJhIEV4cHJlc3MgVi45 MAorCisgICBPbmUgb2YgdGhlIG5ldyB0eXBlcywgImdlbmVyaWMtaGlnaC1zcGVlZCIgbmVlZHMg YSBiaXQgb2YgZXhwbGFuYXRpb24uCisgICBUaGlzIHR5cGUgd2FzIGFkZGVkIHRvIGVhc2lseSBo YW5kbGUgb3RoZXIgdHlwZXMgdGhhdCBhcmUgbm90CisgICBleHBsaWNpdGx5IGNvdmVyZWQsIHdp dGhvdXQgZ29pbmcgdGhyb3VnaCB0aGUgYm90aGVyIG9mIGFkZGluZyBhCisgICBjb21wbGV0ZSB1 c2VyLWRlZmluZWQgbW9kZW0gdHlwZS4gVGhpcyBvbmUgd29ya3MgZm9yIG1vZGVybiBtb2RlbXMg dGhhdAorICAgdXNlIHRoZSBBVCBjb21tYW5kIHNldCwgb24gdGhlIGFzc3VtcHRpb24gdGhhdCBh bGwgdGhlIGRlZmF1bHQKKyAgICgiZmFjdG9yeSIpIHNldHRpbmdzIG9mIHRoZSBtb2RlbSAoYSkg YXJlIGFwcHJvcHJpYXRlIGZvciBLZXJtaXQsIChiKQorICAgaW5jbHVkZSBlcnJvciBjb3JyZWN0 aW9uLCBkYXRhIGNvbXByZXNzaW9uLCBhbmQgc3BlZWQgYnVmZmVyaW5nOyBhbmQKKyAgIChjKSBh cmUgcmVjYWxsYWJsZSB3aXRoIHRoZSBjb21tYW5kIEFUJkYuCisKKyAgIElmIHRoZSBjb21tYW5k IHRvIHJlY2FsbCB5b3VyIG1vZGVtJ3MgcHJvZmlsZSBpcyBub3QgQVQmRiwgdXNlIHRoZSBTRVQK KyAgIE1PREVNIENPTU1BTkQgSU5JVC1TVFJJTkcgY29tbWFuZCB0byBzcGVjaWZ5IHRoZSBhcHBy b3ByaWF0ZSBtb2RlbQorICAgY29tbWFuZC4gVGhlIGRlZmF1bHQgaW5pdC1zdHJpbmcgaXMgQVQm RlwxMyAodGhhdCBpcywgQVQsIGFtcGVyc2FuZCwgRiwKKyAgIGFuZCB0aGVuIGNhcnJpYWdlIHJl dHVybik7IGEgc3VydmV5IG9mIGFib3V0IDIwIG1vZGVybiBtb2RlbSB0eXBlcworICAgc2hvd3Mg dGhleSBhbGwgc3VwcG9ydCB0aGlzLCBidXQgdGhleSBtaWdodCBtZWFuIGRpZmZlcmVudCB0aGlu Z3MgYnkKKyAgIGl0LiBGb3IgZXhhbXBsZSwgdGhlIFVTUiBTcG9ydHN0ZXIgb3IgQ291cmllciBu ZWVkcyBBVCZGMSAobm90IEFUJkYsCisgICB3aGljaCBpcyBlcXVpdmFsZW50IHRvIEFUJkYwLCB3 aGljaCByZWNhbGxzIGFuIGluYXBwcm9wcmlhdGUgcHJvZmlsZSksCisgICBzbyBmb3IgVVNSIG1v ZGVtczoKKworICBzZXQgbW9kZW0gdHlwZSBnZW5lcmljLWhpZ2gtc3BlZWQKKyAgc2V0IG1vZGVt IGNvbW1hbmQgaW5pdCBBVCZGMVwxMworCisgICBPZiBjb3Vyc2UsIFVTUiBtb2RlbXMgYWxyZWFk eSBoYXZlIHRoZWlyIG93biBidWlsdC1pbiBtb2RlbSB0eXBlLiBCdXQKKyAgIGlmIHlvdSB1c2Ug dGhpcyBvbmUgaW5zdGVhZCwgaXQgd2lsbCBkaWFsIGZhc3RlciBiZWNhdXNlIGl0IGhhcyBmZXdl cgorICAgY29tbWFuZHMgdG8gZ2l2ZSB0byB0aGUgbW9kZW07IGluIHRoYXQgc2Vuc2UgIiZGMSIg aXMgbGlrZSBhIG1hY3JvIHRoYXQKKyAgIGJ1bmRsZXMgbnVtZXJvdXMgY29tbWFuZHMgaW50byBh IHNpbmdsZSBvbmUuIFNlZSB5b3VyIG1vZGVtIG1hbnVhbCBmb3IKKyAgIGRldGFpbHMgYWJvdXQg ZmFjdG9yeSBwcm9maWxlcyBhbmQgY29tbWFuZHMgdG8gcmVjYWxsIHRoZW0uCisKKyAgIFdBUk5J Tkc6IERvIG5vdCB1c2UgdGhlIGdlbmVyaWMtaGlnaC1zcGVlZCBtb2RlbSB0eXBlIGluIG9wZXJh dGluZworICAgc3lzdGVtcyBsaWtlIFZNUyB3aGVyZSBoYXJkd2FyZSBmbG93IGNvbnRyb2wgaXMg bm90IGF2YWlsYWJsZSwgYXQgbGVhc3QKKyAgIG5vdCB1bmxlc3MgeW91IGNoYW5nZSB0aGUgaW5p dCBzdHJpbmcgZnJvbSBBVCZGXDEzIHRvIHNvbWV0aGluZyBlbHNlCisgICB0aGF0IGVuYWJsZXMg bG9jYWwgWG9uL1hvZmYgb3Igb3RoZXIgYXBwcm9wcmlhdGUgdHlwZSBvZiBmbG93IGNvbnRyb2wu CisKKyAgIEFsc28gc2VlIFs0MDRdU2VjdGlvbiAyLjEuNyBmb3IgYWRkaXRpb25hbCBoaW50cyBh Ym91dCBtYWtpbmcgZGlhbGluZworICAgZ28gZmFzdGVyLgorCisyLjIuMi4gTmV3IE1vZGVtIENv bnRyb2xzCisKKyAgIFNFVCBNT0RFTSBDQVBBQklMSVRJRVMgbGlzdAorICAgICAgICAgIEluIEMt S2VybWl0IDcuMCwgdGhpcyBjb21tYW5kIGF1dG9tYXRpY2FsbHkgdHVybnMgTU9ERU0KKyAgICAg ICAgICBTUEVFRC1NQVRDSElORyBPRkYgaWYgU0IgKFNwZWVkIEJ1ZmZlcmluZykgaXMgaW4gdGhl IGxpc3QsIGFuZAorICAgICAgICAgIHR1cm5zIGl0IE9OIGlmIFNCIGlzIGFic2VudC4KKworICAg U0VUIE1PREVNIENPTU1BTkQgUFJFRElBTC1JTklUIFsgdGV4dCBdCisgICAgICAgICAgQ29tbWFu ZHMgdG8gYmUgc2VudCB0byB0aGUgbW9kZW0ganVzdCBwcmlvciB0byBkaWFsaW5nLiBOb3JtYWxs eQorICAgICAgICAgIG5vbmUuCisKKyAgIFNFVCBNT0RFTSBTUEVBS0VSIHsgT04sIE9GRiB9Cisg ICAgICAgICAgRGV0ZXJtaW5lcyB3aGV0aGVyIG1vZGVtIHNwZWFrZXIgaXMgb24gb3Igb2ZmIHdo aWxlIGNhbGwgaXMKKyAgICAgICAgICBiZWluZyBwbGFjZWQuIE9OIGJ5IGRlZmF1bHQuIE5vdGU6 IFRoaXMgY29tbWFuZCBkb2VzIG5vdCBwcm92aWRlCisgICAgICAgICAgZmluZS1ncmFpbmVkIGNv bnRyb2wgb3ZlciB3aGVuIHRoZSBzcGVha2VyIGlzIG9uIG9yIG9mZi4KKyAgICAgICAgICBOb3Jt YWxseSwgT04gbWVhbnMgd2hpbGUgdGhlIGNhbGwgaXMgYmVpbmcgcGxhY2VkLCB1bnRpbCB0aGUK KyAgICAgICAgICBwb2ludCBhdCB3aGljaCBjYXJyaWVyIGlzIHN1Y2Nlc3NmdWxseSBlc3RhYmxp c2hlZC4gSWYgeW91cgorICAgICAgICAgIG1vZGVtIGhhcyBhIGRpZmZlcmVudCBzcGVha2VyIG9w dGlvbiB0aGF0IHlvdSB3YW50IHRvIGNob29zZSwKKyAgICAgICAgICB0aGVuIHVzZSB0aGUgU0VU IE1PREVNIENPTU1BTkQgU1BFQUtFUiBPTiB0ZXh0IGNvbW1hbmQgdG8KKyAgICAgICAgICBzcGVj aWZ5IHRoaXMgb3B0aW9uLgorCisgICBTRVQgTU9ERU0gQ09NTUFORCBTUEVBS0VSIHsgT04sIE9G RiB9IFsgdGV4dCBdCisgICAgICAgICAgU3BlY2lmeSBvciBvdmVycmlkZSB0aGUgY29tbWFuZHMg dG8gdHVybiB5b3VyIG1vZGVtJ3Mgc3BlYWtlciBvbgorICAgICAgICAgIGFuZCBvZmYuCisKKyAg IFNFVCBNT0RFTSBWT0xVTUUgeyBMT1csIE1FRElVTSwgSElHSCB9CisgICAgICAgICAgV2hlbiBN T0RFTSBTUEVBS0VSIGlzIG9uLCBzZWxlY3Qgdm9sdW1lLiBOb3RlOiBJbiBzb21lIG1vZGVtcywK KyAgICAgICAgICBlc3BlY2lhbGx5IGludGVybmFsIG9uZXMsIHRoZXNlIGNvbW1hbmRzIGhhdmUg bm8gZWZmZWN0OyB0aGlzIGlzCisgICAgICAgICAgYSBsaW1pdGF0aW9uIG9mIHRoZSBwYXJ0aWN1 bGFyIG1vZGVtLCBub3Qgb2YgS2VybWl0LgorCisgICBTRVQgTU9ERU0gQ09NTUFORCBWT0xVTUUg eyBMT1csIE1FRElVTSwgSElHSCB9IFsgdGV4dCBdCisgICAgICAgICAgU3BlY2lmeSBvciBvdmVy cmlkZSB0aGUgY29tbWFuZHMgdG8gc2V0IHlvdXIgbW9kZW0ncyBzcGVha2VyCisgICAgICAgICAg dm9sdW1lLgorCisgICBTRVQgTU9ERU0gQ09NTUFORCBJR05PUkUtRElBTFRPTkUgWyB0ZXh0IF0K KyAgICAgICAgICBUaGUgY29tbWFuZCB0byBlbmFibGUgYmxpbmQgZGlhbGluZyAoWzQwNV1TZWN0 aW9uIDIuMS42KS4KKworICAgU0VUIE1PREVNIEVTQ0FQRS1DSEFSQUNURVIgY29kZQorICAgICAg ICAgIEhhcyBiZWVuIGF1Z21lbnRlZCB0byBhbGxvdyBjb2RlcyBvZiAwIG9yIGxlc3M6IDwgMCBt ZWFucyB0aGUKKyAgICAgICAgICBlc2NhcGUgbWVjaGFuaXNtIGlzIGRpc2FibGVkLiA9IDAgbWVh bnMgdG8gdXNlIChyZXN0b3JlKSB0aGUKKyAgICAgICAgICBkZWZhdWx0IHZhbHVlIGZyb20gdGhl IG1vZGVtIGRhdGFiYXNlLiA+IDAgYW5kIDwgMTI4IGlzIGEKKyAgICAgICAgICBsaXRlcmFsIHZh bHVlIHRvIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBvbmUuID4gMTI3IG1lYW5zCisg ICAgICAgICAgdGhlIGVzY2FwZSBtZWNoYW5pc20gaXMgZGlzYWJsZWQuIFRoaXMgYWZmZWN0cyAi bW9kZW0gaGFuZ3VwIi4KKyAgICAgICAgICBXaGVuIHRoZSBlc2NhcGUgbWVjaGFuaXNtIGlzIGRp c2FibGVkLCBidXQgU0VUIE1PREVNCisgICAgICAgICAgSEFOR1VQLU1FVEhPRCBpcyBNT0RFTS1D T01NQU5ELCBpdCBzZW5kcyB0aGUgaGFuZ3VwIGNvbW1hbmQKKyAgICAgICAgICBpbW1lZGlhdGVs eSwgd2l0aG91dCB0aGUgPHBhdXNlPisrKzxwYXVzZT4gYnVzaW5lc3MgZmlyc3QuIFRoaXMKKyAg ICAgICAgICBpcyB1c2VmdWwgKGZvciBleGFtcGxlKSB3aGVuIHNlbmRpbmcgbG90cyBvZiBudW1l cmljIHBhZ2VzLCBhCisgICAgICAgICAgcHJvY2VzcyBpbiB3aGljaCBuZXZlciB3ZSBnbyBvbmxp bmUsIGFuZCBzbyBuZXZlciBuZWVkIHRvIGVzY2FwZQorICAgICAgICAgIGJhY2suIEVsaW1pbmF0 aW5nIHRoZSB1bm5lY2Vzc2FyeSBwYXVzZXMgYW5kIGVzY2FwZSBzZXF1ZW5jZQorICAgICAgICAg IGFsbG93cyBhIGxvdCBtb3JlIHBhZ2VzIHRvIGJlIHNlbnQgcGVyIHVuaXQgdGltZS4KKworICAg UmVjYWxsIHRoYXQgQy1LZXJtaXQgY2FuIGRpYWwgbW9kZW1zIHRvIHdoaWNoIGl0IGlzIGNvbm5l Y3RlZCB2aWEKKyAgIFRDUC9JUCAoVGVsbmV0IG9yIFJsb2dpbikgYXMgZGVzY3JpYmVkIG9uIHBh Z2UgMTI2IG9mIFs0MDZdVXNpbmcKKyAgIEMtS2VybWl0LCAybmQgRWQuIEluIHRoaXMgY2FzZSB0 aGUgTU9ERU0gSEFOR1VQLU1FVEhPRCBzaG91bGQgYmUKKyAgIE1PREVNLUNPTU1BTkQsIHNpbmNl IFJTLTIzMiBzaWduYWxzIGRvbid0IHdvcmsgb3ZlciBUQ1AvSVAgY29ubmVjdGlvbnMuCisgICBB cyBub3RlZCBpbiB0aGUgbWFudWFsLCBzdWNoIGNvbm5lY3Rpb25zIGFyZSBzZXQgdXAgYnkgdGhl IGZvbGxvd2luZworICAgc2VxdWVuY2U6CisKKyAgc2V0IGhvc3QgaG9zdCBbIHBvcnQgXQorICBz ZXQgbW9kZW0gdHlwZSBuYW1lCisgIGRpYWwgbnVtYmVyCisKKyAgIEJ1dCB0aGlzIGNhbiBjYXVz ZSBjb21wbGljYXRpb25zIHdoZW4geW91IHVzZSBLZXJtaXQgdG8gc3dpdGNoIGJldHdlZW4KKyAg IHNlcmlhbCBhbmQgVENQL0lQIGNvbm5lY3Rpb25zLiBJbiB0aGUgZm9sbG93aW5nIHNlcXVlbmNl OgorCisgIHNldCBob3N0IG5hbWUKKyAgc2V0IG1vZGVtIHR5cGUgbmFtZQorICBzZXQgcG9ydCBu YW1lCisKKyAgIHRoZSBmaXJzdCB0d28gY29tbWFuZHMgb2JleSB0aGUgcnVsZXMgZm9yIGRpYWxp bmcgb3V0IG92ZXIgVGVsbmV0LgorICAgSG93ZXZlciwgdGhlIFNFVCBQT1JUIGNvbW1hbmQgcmVx dWlyZXMgdGhhdCBLZXJtaXQgY2xvc2UgaXRzIGN1cnJlbnQKKyAgIChUZWxuZXQpIGNvbm5lY3Rp b24gYmVmb3JlIGl0IGNhbiBvcGVuIHRoZSBzZXJpYWwgcG9ydCAoc2luY2UgS2VybWl0CisgICBj YW4gb25seSBoYXZlIG9uZSBjb25uZWN0aW9uIG9wZW4gYXQgYSB0aW1lKS4gQnV0IHNpbmNlIGEg bW9kZW0gdHlwZQorICAgd2FzIHNldCBhZnRlciB0aGUgInNldCBob3N0IiBjb21tYW5kIHdhcyBn aXZlbiwgS2VybWl0IGFzc3VtZXMgaXQgaXMgYQorICAgVGVsbmV0IGRpYWxvdXQgY29ubmVjdGlv biBhbmQgc28gc2VuZHMgdGhlIG1vZGVtJ3MgaGFuZ3VwIHNlcXVlbmNlIGlzCisgICBzZW50IHRv IHRoZSBUZWxuZXQgaG9zdC4gVG8gYXZvaWQgdGhpcywgY2xvc2UgdGhlIG5ldHdvcmsgY29ubmVj dGlvbgorICAgZXhwbGljaXRseSBiZWZvcmUgb3BlbmluZyB0aGUgc2VyaWFsIG9uZToKKworICBz ZXQgaG9zdCBuYW1lCisgIGNsb3NlCisgIHNldCBtb2RlbSB0eXBlIG5hbWUKKyAgc2V0IHBvcnQg bmFtZQorCisyLjMuIFRFTE5FVCBhbmQgUkxPR0lOCisKKyAgIEZvciBhZGRpdGlvbmFsIGJhY2tn cm91bmQsIHBsZWFzZSBhbHNvIHJlYWQgdGhlIFs0MDddVEVMTkVULlRYVCBmaWxlLAorICAgYWxz byBhdmFpbGFibGUgb24gdGhlIFdlYiBpbiBbNDA4XUhUTUwgZm9ybWF0LgorCisgICBDYXV0aW9u czoKKworICAgICAqIElmIG1ha2luZyBhIFRlbG5ldCBjb25uZWN0aW9uIHdpdGggQy1LZXJtaXQg dGFrZXMgYSB2ZXJ5IGxvbmcgdGltZSwKKyAgICAgICBsaWtlIG92ZXIgYSBtaW51dGUsIHdoZXJl YXMgdGhlIHN5c3RlbSBUZWxuZXQgcHJvZ3JhbSBtYWtlcyB0aGUKKyAgICAgICBzYW1lIGNvbm5l Y3Rpb24gaW1tZWRpYXRlbHksIHRyeSBpbmNsdWRpbmcgdGhlIC9OT1dBSVQgc3dpdGNoOgorICBD LUtlcm1pdD4gdGVsbmV0IC9ub3dhaXQgaG9zdG5hbWUKKworICAgICAgIFNlZSBbNDA5XVRFTE5F VC5UWFQgb3IgWzQxMF1URUxORVQuSFRNIGZvciBkZXRhaWxzLiBJZiBpdCBhbHNvCisgICAgICAg dGFrZXMgYSB2ZXJ5IGxvbmcgdGltZSB0byBtYWtlIGEgVGVsbmV0IGNvbm5lY3Rpb24gd2l0aCBz eXN0ZW0KKyAgICAgICBUZWxuZXQsIHRoZW4gdGhlIGRlbGF5IGlzIG1vc3QgbGlrZWx5IGNhdXNl ZCBieSByZXZlcnNlIEROUyBsb29rdXBzCisgICAgICAgd2hlbiB5b3VyIGhvc3QgaXMgbm90IHBy b3Blcmx5IHJlZ2lzdGVyZWQgaW4gRE5TLgorICAgICAqIFdoZW4gc3VwcGx5aW5nIG51bWVyaWMg SVAgYWRkcmVzc2VzIHRvIEMtS2VybWl0IG9yIHRvIGFueSBvdGhlcgorICAgICAgIGFwcGxpY2F0 aW9uIChyZWd1bGFyIFRlbG5ldCwgUmxvZ2luLCBldGMpLCBkbyBub3QgaW5jbHVkZSBsZWFkaW5n CisgICAgICAgMCdzIGluIGFueSBmaWVsZHMgdW5sZXNzIHlvdSBpbnRlbmQgZm9yIHRob3NlIGZp ZWxkcyB0byBiZQorICAgICAgIGludGVycHJldGVkIGFzIG9jdGFsIChvciBoZXgpIG51bWJlcnMu IFRoZSBkZXNjcmlwdGlvbiBvZiB0aGUKKyAgICAgICBJbnRlcm5ldCBhZGRyZXNzIGludGVycHJl dGVyICh0aGUgc29ja2V0cyBsaWJyYXJ5IGluZXRfYWRkcigpCisgICAgICAgcm91dGluZSkgaW5j bHVkZXMgdGhlc2Ugd29yZHM6CisKKyAgICAgQWxsIG51bWJlcnMgc3VwcGxpZWQgYXMgInBhcnRz IiBpbiBhICIuIiBub3RhdGlvbiBtYXkgYmUgZGVjaW1hbCwKKyAgICAgb2N0YWwsIG9yIGhleGFk ZWNpbWFsLCBhcyBzcGVjaWZpZWQgaW4gdGhlIEMgbGFuZ3VhZ2UgKHRoYXQgaXMsIGEKKyAgICAg bGVhZGluZyAweCBvciAwWCBpbXBsaWVzIGhleGFkZWNpbWFsOyBvdGhlcndpc2UsIGEgbGVhZGlu ZyAwIGltcGxpZXMKKyAgICAgb2N0YWw7IG90aGVyd2lzZSwgdGhlIG51bWJlciBpcyBpbnRlcnBy ZXRlZCBhcyBkZWNpbWFsKS4KKyAgICAgICBUbyBpbGx1c3RyYXRlLCAxMjguNTkuMzkuMiBhbmQg MTI4LjA1OS4wMzkuMDAyIGFyZSBub3QgdGhlIHNhbWUKKyAgICAgICBob3N0ISBFdmVuIHRob3Vn aCBtb3N0IG9mIHRoZSBmaWVsZHMgY29udGFpbiBub24tb2N0YWwgZGlnaXRzLgorICAgICAgIFVz aW5nIHN5c3RlbSBUZWxuZXQgKG5vdCBLZXJtaXQpOgorICAkIHRlbG5ldCAxMjguMDU5LjAzOS4w MDIKKyAgVHJ5aW5nIDEyOC40OS4zMy4yIC4uLgorCisgICAgICAgT2YgY291cnNlIHRoZSBzYW1l IHRoaW5nIGhhcHBlbnMgd2l0aCBLZXJtaXQgYmVjYXVzZSBpdCB1c2VzIChhcyBpdAorICAgICAg IG11c3QpIHRoZSBzYW1lIHN5c3RlbSBzZXJ2aWNlIGZvciByZXNvbHZpbmcgbmV0d29yayBhZGRy ZXNzZXMgdGhhdAorICAgICAgIFRlbG5ldCwgRlRQLCBhbmQgYWxsIG90aGVyIFRDUC9JUCBhcHBs aWNhdGlvbnMgdXNlLgorICAgICAqIFRoZSBSTE9HSU4gc2VjdGlvbiBvbiBwYWdlIDEyMyBkb2Vz IG5vdCBtYWtlIGl0IGNsZWFyIHRoYXQgeW91IGNhbgorICAgICAgIHVzZSB0aGUgU0VUIFRFTE5F VCBURVJNSU5BTC1UWVBFIGNvbW1hbmQgdG8gZ292ZXJuIHRoZSB0ZXJtaW5hbAorICAgICAgIHR5 cGUgdGhhdCBpcyByZXBvcnRlZCBieSBDLUtlcm1pdCB0byB0aGUgUkxPR0lOIHNlcnZlci4KKyAg ICAgKiBOb3RlIHRoYXQgdGhlIFNFVCBUQ1AgY29tbWFuZHMgZGVzY3JpYmVkIG9uIHBhZ2VzIDEy Mi0xMjMgbWlnaHQgYmUKKyAgICAgICBhYnNlbnQ7IHNvbWUgcGxhdGZvcm1zIHRoYXQgc3VwcG9y dCBUQ1AvSVAgZG8gbm90IHN1cHBvcnQgdGhlc2UKKyAgICAgICBwYXJ0aWN1bGFyIGNvbnRyb2xz LgorCisgICBOZXcgY29tbWFuZHM6CisKKyAgIFRFTE9QVCB7IEFPLCBBWVQsIEJSRUFLLCBDQU5D RUwsIEVDLCBFTCwgRU9GLCBFT1IsIEdBLCBJUCwgRE1BUkssCisgICAgICAgICAgRE8sIERPTlQs IE5PUCwgU0IsIFNFLCBTVVNQLCBXSUxMLCBXT05UIH0KKyAgICAgICAgICBUaGlzIGNvbW1hbmQg d2FzIGF2YWlsYWJsZSBwcmV2aW91c2x5LCBidXQgc3VwcG9ydGVkIG9ubHkgRE8sCisgICAgICAg ICAgRE9OVCwgV0lMTCwgYW5kIFdPTlQuIE5vdyBpdCBsZXRzIHlvdSBzZW5kIGFsbCB0aGUgVGVs bmV0CisgICAgICAgICAgcHJvdG9jb2wgY29tbWFuZHMuIE5vdGUgdGhhdCBjZXJ0YWluIGNvbW1h bmRzIGRvIG5vdCByZXF1aXJlIGEKKyAgICAgICAgICByZXNwb25zZSwgYW5kIHRoZXJlZm9yZSBj YW4gYmUgdXNlZCBhcyBub25kZXN0cnVjdGl2ZSAicHJvYmVzIgorICAgICAgICAgIHRvIHNlZSBp ZiB0aGUgVGVsbmV0IHNlc3Npb24gaXMgc3RpbGwgb3BlbjsgZS5nLjoKKworICBzZXQgaG9zdCB4 eXpjb3JwLmNvbQorICAuLi4KKyAgdGVsb3B0IG5vcAorICBpZiBmYWlsIHN0b3AgMSBDb25uZWN0 aW9uIGxvc3QKKworICAgU0VUIFRDUCBBRERSRVNTIFsgaXAtYWRkcmVzcyBdCisgICAgICAgICAg U3BlY2lmaWVzIHRoZSBJUCBhZGRyZXNzIG9mIHRoZSBjb21wdXRlciB0aGF0IEMtS2VybWl0IGlz CisgICAgICAgICAgcnVubmluZyBvbi4gTm9ybWFsbHkgdGhpcyBpcyBub3QgbmVjZXNzYXJ5LiBU aGUgZXhjZXB0aW9uIHdvdWxkCisgICAgICAgICAgYmUgaWYgeW91ciBtYWNoaW5lIGhhcyBtdWx0 aXBsZSBuZXR3b3JrIGFkYXB0ZXJzIChwaHlzaWNhbCBvcgorICAgICAgICAgIHZpcnR1YWwpIHdp dGggYSBkaWZmZXJlbnQgYWRkcmVzcyBmb3IgZWFjaCBhZGFwdGVyIEFORCB5b3Ugd2FudAorICAg ICAgICAgIEMtS2VybWl0IHRvIHVzZSBhIHNwZWNpZmljIGFkZHJlc3Mgd2hlbiBtYWtpbmcgb3V0 Z29pbmcKKyAgICAgICAgICBjb25uZWN0aW9ucyBvciBhY2NlcHRpbmcgaW5jb21pbmcgY29ubmVj dGlvbnMuCisKKyAgIFNFVCBUQ1AgRE5TLVNFUlZJQ0UtUkVDT1JEUyB7IE9OLCBPRkYgfQorICAg ICAgICAgIFRlbGxzIEMtS2VybWl0IHdoZXRoZXIgdG8gdHJ5IHRvIHVzZSBETlMgU1JWIHJlY29y ZHMgdG8KKyAgICAgICAgICBkZXRlcm1pbmUgdGhlIGhvc3QgYW5kIHBvcnQgbnVtYmVyIHVwb24g d2hpY2ggdG8gZmluZCBhbgorICAgICAgICAgIGFkdmVydGlzZWQgc2VydmljZS4gRm9yIGV4YW1w bGUsIGlmIGEgaG9zdCB3YW50cyByZWd1bGFyIFRlbG5ldAorICAgICAgICAgIGNvbm5lY3Rpb25z IHJlZGlyZWN0ZWQgdG8gc29tZSBwb3J0IG90aGVyIHRoYW4gMjMsIHRoaXMgZmVhdHVyZQorICAg ICAgICAgIGFsbG93cyBDLUtlcm1pdCB0byBhc2sgdGhlIGhvc3Qgd2hpY2ggcG9ydCBpdCBzaG91 bGQgdXNlLiBTaW5jZQorICAgICAgICAgIG5vdCBhbGwgZG9tYWluIHNlcnZlcnMgYXJlIHNldCB1 cCB0byBhbnN3ZXIgc3VjaCByZXF1ZXN0cywgdGhpcworICAgICAgICAgIGZlYXR1cmUgaXMgT0ZG IGJ5IGRlZmF1bHQuCisKKyAgIFNFVCBUQ1AgUkVWRVJTRS1ETlMtTE9PS1VQIHsgT04sIE9GRiwg QVVUTyB9CisgICAgICAgICAgVGVsbHMgS2VybWl0IHdoZXRoZXIgdG8gcGVyZm9ybSBhIHJldmVy c2UgRE5TIGxvb2t1cCBvbiBUQ1AvSVAKKyAgICAgICAgICBjb25uZWN0aW9ucy4gVGhpcyBhbGxv d3MgS2VybWl0IHRvIGRldGVybWluZSB0aGUgYWN0dWFsIGhvc3RuYW1lCisgICAgICAgICAgb2Yg dGhlIGhvc3QgaXQgaXMgY29ubmVjdGVkIHRvLCB3aGljaCBpcyB1c2VmdWwgZm9yIGNvbm5lY3Rp b25zCisgICAgICAgICAgdG8gaG9zdCBwb29scywgYW5kIGlzIHJlcXVpcmVkIGZvciBLZXJiZXJv cyBjb25uZWN0aW9ucyB0byBob3N0CisgICAgICAgICAgcG9vbHMgYW5kIGZvciBpbmNvbWluZyBj b25uZWN0aW9ucy4gSWYgdGhlIG90aGVyIGhvc3QgZG9lcyBub3QKKyAgICAgICAgICBoYXZlIGEg RE5TIGVudHJ5LCB0aGUgcmV2ZXJzZSBsb29rdXAgY291bGQgdGFrZSBhIGxvbmcgdGltZQorICAg ICAgICAgIChtaW51dGVzKSB0byBmYWlsLCBidXQgdGhlIGNvbm5lY3Rpb24gd2lsbCBzdGlsbCBi ZSBtYWRlLiBUdXJuCisgICAgICAgICAgdGhpcyBvcHRpb24gT0ZGIGZvciBzcGVlZGllciBjb25u ZWN0aW9ucyBpZiB5b3UgZG8gbm90IG5lZWQgdG8KKyAgICAgICAgICBrbm93IGV4YWN0bHkgd2hp Y2ggaG9zdCB5b3UgYXJlIGNvbm5lY3RlZCB0byBhbmQgeW91IGFyZSBub3QKKyAgICAgICAgICB1 c2luZyBLZXJiZXJvcy4gQVVUTywgdGhlIGRlZmF1bHQsIG1lYW5zIHRoZSBsb29rdXAgaXMgZG9u ZSBvbgorICAgICAgICAgIGhvc3RuYW1lcywgYnV0IG5vdCBvbiBudW1lcmljIElQIGFkZHJlc3Nl cy4KKworICAgU0VUIFRFTE5FVCBXQUlULUZPUi1ORUdPVElBVElPTlMgeyBPTiwgT0ZGIH0KKyAg ICAgICAgICBFYWNoIFRlbG5ldCBvcHRpb24gbXVzdCBiZSBmdWxseSBuZWdvdGlhdGVkIGVpdGhl ciBPbiBvciBPZmYKKyAgICAgICAgICBiZWZvcmUgdGhlIHNlc3Npb24gY2FuIGNvbnRpbnVlLiBU aGlzIGlzIGVzcGVjaWFsbHkgdHJ1ZSB3aXRoCisgICAgICAgICAgb3B0aW9ucyB0aGF0IHJlcXVp cmUgc3ViLW5lZ290aWF0aW9ucyBzdWNoIGFzIEF1dGhlbnRpY2F0aW9uLAorICAgICAgICAgIEVu Y3J5cHRpb24sIGFuZCBLZXJtaXQ7IGZvciBwcm9wZXIgc3VwcG9ydCBvZiB0aGVzZSBvcHRpb25z CisgICAgICAgICAgS2VybWl0IG11c3Qgd2FpdCBmb3IgdGhlIG5lZ290aWF0aW9ucyB0byBjb21w bGV0ZS4gT2YgY291cnNlLAorICAgICAgICAgIEtlcm1pdCBoYXMgbm8gd2F5IG9mIGtub3dpbmcg d2hldGhlciBhIHJlcGx5IGlzIGRlbGF5ZWQgb3Igbm90CisgICAgICAgICAgY29taW5nIGF0IGFs bCwgYW5kIHNvIHdpbGwgd2FpdCBhIG1pbnV0ZSBvciBtb3JlIGZvciByZXF1aXJlZAorICAgICAg ICAgIHJlcGxpZXMgYmVmb3JlIGNvbnRpbnVpbmcgdGhlIHNlc3Npb24uIElmIHlvdSBrbm93IHRo YXQgS2VybWl0J3MKKyAgICAgICAgICBUZWxuZXQgcGFydG5lciB3aWxsIG5vdCBiZSBzZW5kaW5n IHRoZSByZXF1aXJlZCByZXBsaWVzLCB5b3UgY2FuCisgICAgICAgICAgc2V0IHRoaXMgb3B0aW9u IG9mIE9GRiB0byBhdm9pZCB0aGUgbG9uZyB0aW1lb3V0cy4gT3IgeW91IGNhbgorICAgICAgICAg IGluc3RydWN0IEtlcm1pdCB0byBSRUZVU0Ugc3BlY2lmaWMgb3B0aW9ucyB3aXRoIHRoZSBTRVQg VEVMT1BUCisgICAgICAgICAgY29tbWFuZC4KKworICAgU0VUIFRFTE9QVCBbIHsgL0NMSUVOVCwg L1NFUlZFUiB9IF0gb3B0aW9uCisgICAgICAgICAgeyBBQ0NFUFRFRCwgUkVGVVNFRCwgUkVRVUVT VEVELCBSRVFVSVJFRCB9CisgICAgICAgICAgWyB7IEFDQ0VQVEVELCBSRUZVU0VELCBSRVFVRVNU RUQsIFJFUVVJUkVEIH0gXQorICAgICAgICAgIFNFVCBURUxPUFQgbGV0cyB5b3Ugc3BlY2lmeSBw b2xpY3kgcmVxdWlyZW1lbnRzIGZvciBLZXJtaXQncworICAgICAgICAgIGhhbmRsaW5nIG9mIFRl bG5ldCBvcHRpb24gbmVnb3RpYXRpb25zLiBTZXR0aW5nIGFuIG9wdGlvbiBpcworICAgICAgICAg IFJFUVVJUkVEIGNhdXNlcyBLZXJtaXQgdG8gb2ZmZXIgdGhlIG9wdGlvbiB0byB0aGUgcGVlciBh bmQKKyAgICAgICAgICBkaXNjb25uZWN0IGlmIHRoZSBvcHRpb24gaXMgcmVmdXNlZC4gUkVRVUVT VEVEIGNhdXNlcyBLZXJtaXQgdG8KKyAgICAgICAgICBvZmZlciBhbiBvcHRpb24gdG8gdGhlIHBl ZXIuIEFDQ0VQVEVEIHJlc3VsdHMgaW4gbm8gb2ZmZXIgYnV0CisgICAgICAgICAgS2VybWl0IHdp bGwgYXR0ZW1wdCB0byBuZWdvdGlhdGUgdGhlIG9wdGlvbiBpZiBpdCBpcyByZXF1ZXN0ZWQuCisg ICAgICAgICAgUkVGVVNFRCBpbnN0cnVjdHMgS2VybWl0IHRvIHJlZnVzZSB0aGUgb3B0aW9uIGlm IGl0IGlzIHJlcXVlc3RlZAorICAgICAgICAgIGJ5IHRoZSBwZWVyLgorCisgICAgICAgICAgU29t ZSBvcHRpb25zIGFyZSBuZWdvdGlhdGVkIGluIHR3byBkaXJlY3Rpb25zIGFuZCBhY2NlcHQKKyAg ICAgICAgICBzZXBhcmF0ZSBwb2xpY2llcyBmb3IgZWFjaCBkaXJlY3Rpb247IHRoZSBmaXJzdCBr ZXl3b3JkIGFwcGxpZXMKKyAgICAgICAgICB0byBLZXJtaXQgaXRzZWxmLCB0aGUgc2Vjb25kIGFw cGxpZXMgdG8gS2VybWl0J3MgVGVsbmV0IHBhcnRuZXI7CisgICAgICAgICAgaWYgdGhlIHNlY29u ZCBrZXl3b3JkIGlzIG9taXR0ZWQsIGFuIGFwcHJvcHJpYXRlCisgICAgICAgICAgKG9wdGlvbi1z cGVjaWZpYykgZGVmYXVsdCBpcyBhcHBsaWVkLiBZb3UgY2FuIGFsc28gaW5jbHVkZSBhCisgICAg ICAgICAgL0NMSUVOVCBvciAvU0VSVkVSIHN3aXRjaCB0byBpbmRpY2F0ZSB3aGV0aGVyIHRoZSBn aXZlbiBwb2xpY2llcworICAgICAgICAgIGFwcGx5IHdoZW4gS2VybWl0IGlzIHRoZSBUZWxuZXQg Y2xpZW50IG9yIHRoZSBUZWxuZXQgc2VydmVyOyBpZgorICAgICAgICAgIG5vIHN3aXRjaCBpcyBn aXZlbiwgdGhlIGNvbW1hbmQgYXBwbGllcyB0byB0aGUgY2xpZW50LgorCisgICAgICAgICAgTm90 ZSB0aGF0IHNvbWUgb2YgS2VybWl0J3MgVGVsbmV0IHBhcnRuZXJzIGZhaWwgdG8gcmVmdXNlCisg ICAgICAgICAgb3B0aW9ucyB0aGF0IHRoZXkgZG8gbm90IHJlY29nbml6ZSBhbmQgaW5zdGVhZCBk byBub3QgcmVzcG9uZCBhdAorICAgICAgICAgIGFsbC4gSW4gdGhpcyBjYXNlIGl0IGlzIHBvc3Np YmxlIHRvIHVzZSBTRVQgVEVMT1BUIHRvIGluc3RydWN0CisgICAgICAgICAgS2VybWl0IHRvIFJF RlVTRSB0aGUgb3B0aW9uIGJlZm9yZSBjb25uZWN0aW5nIHRvIHRoZSBwcm9ibGVtCisgICAgICAg ICAgaG9zdCwgdGh1cyBza2lwcGluZyB0aGUgcHJvYmxlbWF0aWMgbmVnb3RpYXRpb24uCisKKyAg ICAgICAgICBVc2UgU0hPVyBURUxPUFQgdG8gdmlldyBjdXJyZW50IFRlbG5ldCBPcHRpb24gbmVn b3RpYXRpb24KKyAgICAgICAgICBzZXR0aW5ncy4gU0hPVyBURUxORVQgZGlzcGxheXMgY3VycmVu dCBUZWxuZXQgc2V0dGluZ3MuCisKKzIuMy4wLiBCdWcgRml4ZXMKKworICAgSWYgInNldCBob3N0 IG5vbmV4aXN0ZW50LWhvc3QiIHdhcyBnaXZlbiAoYW5kIGl0IHByb3Blcmx5IGZhaWxlZCksCisg ICBmb2xsb3dlZCBieSBjZXJ0YWluIGNvbW1hbmRzIGxpa2UgU0VORCwgdGhlIG9yaWdpbmFsIGxp bmUgYW5kIG1vZGVtCisgICB0eXBlIHdlcmUgbm90IHJlc3RvcmVkIGFuZCBDLUtlcm1pdCB0aG91 Z2h0IHRoYXQgaXQgc3RpbGwgaGFkIGEgbmV0d29yaworICAgaG9zdG5hbWU7IGZpeGVkIGluIDcu MC4KKworMi4zLjEuIFRlbG5ldCBCaW5hcnkgTW9kZSBCdWcgQWRqdXN0bWVudHMKKworICAgU0VU IFRFTE5FVCBCVUcgQklOQVJZLU1FLU1FQU5TLVUtVE9PIHsgT04sIE9GRiB9IHdhcyBhZGRlZCB0 byBlZGl0IDE5MgorICAgYWZ0ZXIgdGhlIGJvb2sgd2FzIHByaW50ZWQuIEFsc28gU0VUIFRFTE5F VCBCVUcgQklOQVJZLVUtTUVBTlMtTUUtVE9PLgorICAgVGhlIGRlZmF1bHQgZm9yIGJvdGggaXMg T0ZGLiBPTiBzaG91bGQgYmUgdXNlZCB3aGVuIGNvbW11bmljYXRpbmcgd2l0aAorICAgYSBUZWxu ZXQgcGFydG5lciAoY2xpZW50IG9yIHNlcnZlcikgdGhhdCBtaXN0YWtlbmx5IGJlbGlldmVzIHRo YXQKKyAgIHRlbGxpbmcgQy1LZXJtaXQgdG8gZW50ZXIgVGVsbmV0IGJpbmFyeSBtb2RlIGFsc28g bWVhbnMgdGhhdCBpdCwgdG9vLAorICAgaXMgaW4gYmluYXJ5IG1vZGUsIGNvbnRyYXJ5IHRvIHRo ZSBUZWxuZXQgc3BlY2lmaWNhdGlvbiwgd2hpY2ggc2F5cworICAgdGhhdCBiaW5hcnkgbW9kZSBt dXN0IGJlIG5lZ290aWF0ZWQgaW4gZWFjaCBkaXJlY3Rpb24gc2VwYXJhdGVseS4KKworMi4zLjIu IFZNUyBVQ1ggVGVsbmV0IFBvcnQgQnVnIEFkanVzdG1lbnQKKworICAgQSBuZXcgY29tbWFuZCwg U0VUIFRDUCBVQ1gtUE9SVC1CVUcsIHdhcyBhZGRlZCBmb3IgVk1TIHZlcnNpb25zIHdpdGgKKyAg IFVDWCAoREVDIFRDUC9JUCksIGFwcGx5aW5nIG9ubHkgdG8gZWFybHkgdmVyc2lvbnMgb2YgVUNY LCBsaWtlIDIuMiBvcgorICAgZWFybGllci4gSWYgeW91IHRyeSB0byB1c2UgVk1TIEMtS2VybWl0 IHRvIG1ha2UgYSBUZWxuZXQgY29ubmVjdGlvbgorICAgdXNpbmcgYSBwb3J0IG5hbWUgKGxpa2Ug InRlbG5ldCIsIHdoaWNoIGlzIHVzZWQgYnkgZGVmYXVsdCksIHRoZQorICAgdW5kZXJseWluZyBV Q1ggZ2V0c2VydmJ5bmFtZSgpIGZ1bmN0aW9uIG1pZ2h0IHJldHVybiB0aGUgc2VydmljZSBudW1i ZXIKKyAgIHdpdGggaXRzIGJ5dGVzIHN3YXBwZWQgYW5kIHRoZSBjb25uZWN0aW9uIHdpbGwgZmFp bC4gSWYgInRlbG5ldAorICAgaG9zdG5hbWUgMjMiIHdvcmtzLCB0aGVuIHlvdXIgdmVyc2lvbiBv ZiBVQ1ggaGFzIHRoaXMgYnVnIGFuZCB5b3UgY2FuCisgICBwdXQgInNldCB0Y3AgdWN4LXBvcnQt YnVnIG9uIiBpbiB5b3VyIENLRVJNSVQuSU5JIGZpbGUgdG8gZ2V0IGFyb3VuZAorICAgaXQuCisK KzIuMy4zLiBUZWxuZXQgTmV3IEVudmlyb25tZW50IE9wdGlvbgorCisgICBUaGUgVEVMTkVUIE5F Vy1FTlZJUk9OTUVOVCBvcHRpb24gKFs0MTFdUkZDIDE1NzIpIGlzIHN1cHBvcnRlZCBhcyA3LjAu CisgICBUaGlzIG9wdGlvbiBhbGxvd3MgdGhlIEMtS2VybWl0IFRlbG5ldCBjbGllbnQgdG8gc2Vu ZCBjZXJ0YWluCisgICB3ZWxsLWtub3duIHZhcmlhYmxlcyB0byB0aGUgVGVsbmV0IHNlcnZlciwg aW5jbHVkaW5nIFVTRVIsIFBSSU5URVIsCisgICBESVNQTEFZLCBhbmQgc2V2ZXJhbCBvdGhlcnMu IFRoaXMgZmVhdHVyZSBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgaW4KKyAgIFdpbmRvd3MgYW5kIE9T LzIsIGRpc2FibGVkIGJ5IGRlZmF1bHQgZWxzZXdoZXJlLiBUaGUgY29tbWFuZCB0byBlbmFibGUK KyAgIGFuZCBkaXNhYmxlIGl0IGlzOgorCisgIFNFVCBURUxORVQgRU5WSVJPTk1FTlQgeyBPTiwg T0ZGIH0KKworICAgV2hlbiBPTiwgYW5kIHlvdSBUZWxuZXQgdG8gYW5vdGhlciBjb21wdXRlciwg eW91IG1pZ2h0IChvciBtaWdodCBub3QpCisgICBub3RpY2UgdGhhdCB0aGUgImxvZ2luOiIgb3Ig IlVzZXJuYW1lOiIgcHJvbXB0IGRvZXMgbm90IGFwcGVhciAtLQorICAgdGhhdCdzIGJlY2F1c2Ug eW91ciB1c2VybmFtZSB3YXMgc2VudCBhaGVhZCwgaW4gd2hpY2ggY2FzZSB0aGUgcmVtb3RlCisg ICBzeXN0ZW0gbWlnaHQgcHJvbXB0IHlvdSBvbmx5IGZvciB5b3VyIHBhc3N3b3JkIChzaW1pbGFy IHRvIFJsb2dpbikuIFVzZQorICAgInNldCB0ZWxuZXQgZW52aXJvbm1lbnQgb2ZmIiB0byBkZWZl YXQgdGhpcyBmZWF0dXJlLCBwYXJ0aWN1bGFybHkgaW4KKyAgIHNjcmlwdHMgd2hlcmUgdGhlIGRp YWxvZyBtdXN0IGJlIHByZWRpY3RhYmxlLiBZb3UgY2FuIGFsc28gdXNlIHRoaXMKKyAgIGNvbW1h bmQgdG8gc3BlY2lmeSBvciBvdmVycmlkZSBzcGVjaWZpYyB3ZWxsLWtub3duIGVudmlyb25tZW50 IHZhcmlhYmxlCisgICB2YWx1ZXM6CisKKyBTRVQgVEVMTkVUIEVOVklST05NRU5UIHsgQUNDVCxE SVNQTEFZLEpPQixQUklOVEVSLFNZU1RFTVRZUEUsVVNFUiB9IFsgdGV4dCBdCisKKzIuMy40LiBU ZWxuZXQgTG9jYXRpb24gT3B0aW9uCisKKyAgIFRoZSBURUxORVQgTE9DQVRJT04gb3B0aW9uIChb NDEyXVJGQyA3NzkpIGlzIHN1cHBvcnRlZCBpbiA3LjAuIFRoaXMKKyAgIG9wdGlvbiBhbGxvd3Mg dGhlIEMtS2VybWl0IFRlbG5ldCBjbGllbnQgdG8gc2VuZCBhIGxvY2F0aW9uIHN0cmluZyB0bwor ICAgdGhlIHNlcnZlciBpZiB0aGUgc2VydmVyIGluZGljYXRlcyBpdHMgd2lsbGluZ25lc3MgdG8g YWNjZXB0IG9uZS4gSWYgYW4KKyAgIGVudmlyb25tZW50IHZhcmlhYmxlIG5hbWVkIExPQ0FUSU9O IGV4aXN0cyBhdCB0aGUgdGltZSBDLUtlcm1pdCBzdGFydHMsCisgICBpdHMgdmFsdWUgaXMgdXNl ZCBhcyB0aGUgbG9jYXRpb24gc3RyaW5nLiBJZiB5b3Ugd2FudCB0byBjaGFuZ2UgaXQsCisgICB1 c2U6CisKKyAgU0VUIFRFTE5FVCBMT0NBVElPTiB0ZXh0CisKKyAgIElmIHlvdSBvbWl0IHRoZSB0 ZXh0IGZyb20gdGhpcyBjb21tYW5kLCB0aGUgVGVsbmV0IGxvY2F0aW9uIGZlYXR1cmUgaXMKKyAg IGRpc2FibGVkLgorCisgICBTRVQgVEVMTkVUIEVOVklST05NRU5UIERJU1BMQVkgaXMgdXNlZCB0 byBzZXQgdGhlIERJU1BMQVkgdmFyaWFibGUgdGhhdAorICAgaXMgc2VudCB0byB0aGUgaG9zdCwg YXMgd2VsbCBhcyB0aGUgWERJU1BMQVkgbG9jYXRpb24uCisKKzIuMy41LiBDb25uZWN0aW5nIHRv IFJhdyBUQ1AgU29ja2V0cworCisgICBUaGUgU0VUIEhPU1QgYW5kIFRFTE5FVCBjb21tYW5kcyBu b3cgYWNjZXB0IGFuIG9wdGlvbmFsIHN3aXRjaCwKKyAgIC9SQVctU09DS0VULCBhdCB0aGUgZW5k LCBvbmx5IGlmIHlvdSBmaXJzdCBnaXZlIGEgaG9zdCBhbmQgYSBwb3J0LgorICAgRXhhbXBsZToK KworICBzZXQgaG9zdCB4eXpjb3JwLmNvbSAyMyAvcmF3LXNvY2tldAorICBzZXQgaG9zdCAxMjgu NDkuMzkuMjoyMDAwIC9yYXctc29ja2V0CisgIHRlbG5ldCB4eXpjb3JwLmNvbSAzMDAwIC9yYXcK KworICAgV2l0aG91dCB0aGlzIHN3aXRjaCwgQy1LZXJtaXQgYmVoYXZlcyBhcyBhIFRlbG5ldCBj bGllbnQgd2hlbiAoYSkgdGhlCisgICBwb3J0IGlzIDIzIG9yIDE2NDksIG9yIChiKSB0aGUgcG9y dCBpcyBub3QgNTEzIGFuZCB0aGUgc2VydmVyIHNlbnQgd2hhdAorICAgYXBwZWFyZWQgdG8gYmUg VGVsbmV0IG5lZ290aWF0aW9ucyAtLSB0aGF0IGlzLCBtZXNzYWdlcyBzdGFydGluZyB3aXRoCisg ICAweEZGIChJQUMpLiBXaXRoIHRoaXMgc3dpdGNoLCBLZXJtaXQgc2hvdWxkIHRyZWF0IGFsbCBp bmNvbWluZyBieXRlcyBhcworICAgcmF3IGRhdGEsIGFuZCB3aWxsIG5vdCBlbmdhZ2UgaW4gYW55 IFRlbG5ldCBuZWdvdGlhdGlvbnMgb3IgTlZUIENSTEYKKyAgIG1hbmlwdWxhdGlvbnMuIFRoaXMg YWxsb3dzIHRyYW5zcGFyZW50IG9wZXJhdGlvbiB0aHJvdWdoIChlLmcuKSByYXcgVENQCisgICBw b3J0cyBvbiBDaXNjbyB0ZXJtaW5hbCBzZXJ2ZXJzLCB0aHJvdWdoIHRoZSAnbW9kZW1kJyBtb2Rl bSBzZXJ2ZXIsCisgICBldGMuCisKKzIuMy42LiBJbmNvbWluZyBUQ1AgQ29ubmVjdGlvbnMKKwor ICAgQWNjb21wbGlzaGVkIHZpYSBTRVQgSE9TVCAqIHBvcnQsIHdlcmUgaW50cm9kdWNlZCBpbiBD LUtlcm1pdCA2LjAsIGJ1dAorICAgZm9yIFVOSVggb25seS4gSW4gVmVyc2lvbiA3LjAsIHRoZXkg YXJlIGFsc28gYXZhaWxhYmxlIGZvciBWTVMuCisKKzIuNC4gVGhlIEVJR0hUQklUIENvbW1hbmQK KworICAgRUlHSFRCSVQgaXMgc2ltcGx5IGEgc2hvcnRoYW5kIGZvcjogU0VUIFBBUklUWSBOT05F LCBTRVQgVEVSTUlOQUwKKyAgIEJZVEVTSVpFIDgsIFNFVCBDT01NQU5EIEJZVEVTSVpFIDg7IHRo YXQgaXMsIGEgd2F5IHRvIHNldCB1cCBhbiA4LWJpdAorICAgY2xlYW4gY29ubmVjdGlvbiBpbiBh IHNpbmdsZSBjb21tYW5kLgorCisyLjUuIFRoZSBTZXJ2aWNlcyBEaXJlY3RvcnkKKworICAgQ2hh cHRlciA3IG9mIFs0MTNdVXNpbmcgQy1LZXJtaXQgZG9lcyBub3QgbWVudGlvbiB0aGUgVUxPR0lO IG1hY3JvLAorICAgd2hpY2ggaXMgdXNlZCBieSBvdXIgc2FtcGxlIHNlcnZpY2VzIGRpcmVjdG9y eSwgQ0tFUk1JVC5LTkQuIFVubGlrZQorICAgVU5JWExPR0lOLCBWTVNMT0dJTiwgZXRjLCB0aGlz IG9uZSBpcyBmb3IgdXNlIHdpdGggc3lzdGVtcyB0aGF0IHJlcXVpcmUKKyAgIGEgdXNlciBJRCBi dXQgbm8gcGFzc3dvcmQuIFRoZXJlZm9yZSBpdCBkb2Vzbid0IHByb21wdCBmb3IgYSBwYXNzd29y ZAorICAgb3Igd2FpdCBmb3IgYSBwYXNzd29yZCBwcm9tcHQgZnJvbSB0aGUgcmVtb3RlIHNlcnZp Y2UuCisKKyAgIEluIHZlcnNpb24gNy4wLCB0aGUgQ0FMTCBtYWNybyB3YXMgY2hhbmdlZCB0byBu b3QgZXhlY3V0ZSBhIFNFVCBNT0RFTQorICAgVFlQRSBjb21tYW5kIGlmIHRoZSBnaXZlbiBtb2Rl bSB0eXBlIHdhcyB0aGUgc2FtZSBhcyB0aGUgY3VycmVudCBvbmU7CisgICBvdGhlcndpc2UgdGhl IG5ldyBTRVQgTU9ERU0gVFlQRSBjb21tYW5kIHdvdWxkIG92ZXJ3cml0ZSBhbnkKKyAgIGN1c3Rv bWl6YXRpb25zIHRoYXQgdGhlIHVzZXIgaGFkIG1hZGUgdG8gdGhlIG1vZGVtIHNldHRpbmdzLiBE aXR0byBmb3IKKyAgIFNFVCBMSU5FIC8gU0VUIFBPUlQgYW5kIFNFVCBTUEVFRC4KKworMi42LiBD bG9zaW5nIENvbm5lY3Rpb25zCisKKyAgIFVudGlsIHZlcnNpb24gNy4wLCB0aGVyZSB3YXMgbmV2 ZXIgYW4gb2J2aW91cyBhbmQgZ2VuZXJhbCB3YXkgdG8gY2xvc2UKKyAgIGEgY29ubmVjdGlvbi4g SWYgYSBzZXJpYWwgY29ubmVjdGlvbiB3YXMgb3BlbiwgaXQgY291bGQgYmUgY2xvc2VkIGJ5Cisg ICAic2V0IGxpbmUiIG9yICJzZXQgcG9ydCIgKGdpdmluZyBubyBkZXZpY2UgbmFtZSk7IGlmIGEg bmV0d29yaworICAgY29ubmVjdGlvbiB3YXMgb3BlbiwgaXQgY291bGQgYmUgY2xvc2VkIGJ5ICJz ZXQgaG9zdCIgKG5vIGhvc3QgbmFtZSkuCisKKyAgIEluIHZlcnNpb24gNy4wLCBhIG5ldyBjb21t YW5kIGNsb3NlcyB0aGUgY29ubmVjdGlvbiBpbiBhbiBvYnZpb3VzIGFuZAorICAgc3RyYWlnaHRm b3J3YXJkIHdheSwgbm8gbWF0dGVyIHdoYXQgdGhlIGNvbm5lY3Rpb24gdHlwZToKKworICBDTE9T RSBbIENPTk5FQ1RJT04gXQorCisgICBUaGUgQ0xPU0UgY29tbWFuZCB3YXMgYWxyZWFkeSBwcmVz ZW50LCBhbmQgcmVxdWlyZWQgYW4gb3BlcmFuZCBzdWNoIGFzCisgICBERUJVRy1MT0csIFdSSVRF LUZJTEUsIGV0YywgYW5kIHNvIGNvdWxkIG5ldmVyIGJlIGdpdmVuIGJ5IGl0c2VsZi4gVGhlCisg ICBuZXcgQ09OTkVDVElPTiBvcGVyYW5kIGlzIG5vdyB0aGUgZGVmYXVsdCBvcGVyYW5kIGZvciBD TE9TRSwgc28gQ0xPU0UKKyAgIGJ5IGl0c2VsZiBjbG9zZXMgdGhlIGNvbm5lY3Rpb24sIGlmIG9u ZSBpcyBvcGVuLCBqdXN0IGFzIHlvdSB3b3VsZAorICAgZXhwZWN0LCBlc3BlY2lhbGx5IGlmIHlv dSBhcmUgYSBUZWxuZXQgb3IgRnRwIHVzZXIuCisKKyAgIEFsc28gc2VlIHRoZSBkZXNjcmlwdGlv biBvZiB0aGUgbmV3IFNFVCBDTE9TRS1PTi1ESVNDT05ORUNUIGNvbW1hbmQgaW4KKyAgIFs0MTRd U2VjdGlvbiAyLjEwLgorCisyLjcuIFVzaW5nIEMtS2VybWl0IHdpdGggRXh0ZXJuYWwgQ29tbXVu aWNhdGlvbiBQcm9ncmFtcworCisgICBDLUtlcm1pdCA3LjAgaW5jbHVkZXMgYSBuZXcgYWJpbGl0 eSB0byBjcmVhdGUgYW5kIGNvbmR1Y3Qgc2Vzc2lvbnMKKyAgIHRocm91Z2ggb3RoZXIgY29tbXVu aWNhdGlvbnMgcHJvZ3JhbXMuIFR3byBtZXRob2RzIGFyZSBhdmFpbGFibGU6CisKKyAgICAxLiBQ dHkgKHBzZXVkb3Rlcm1pbmFsKTogVGhlIGV4dGVybmFsIHByb2dyYW0gaXMgcnVuIG9uIGEKKyAg ICAgICAicHNldWRvdGVybWluYWwiLCB3aGljaCBpcyBjb250cm9sbGVkIGJ5IEtlcm1pdC4gVGhp cyBtZXRob2Qgd29ya3MKKyAgICAgICB3aXRoIHByYWN0aWNhbGx5IGFueSBleHRlcm5hbCBwcm9n cmFtLCBidXQgaXQgaXMgbm90IHBvcnRhYmxlLiBBdAorICAgICAgIHRoaXMgd3JpdGluZywgaXQg d29ya3Mgb25seSBvbiBzb21lIChub3QgYWxsKSBVTklYIHZlcnNpb25zLCBhbmQKKyAgICAgICBu b3Qgb24gYW55IG5vbi1VTklYIHBsYXRmb3Jtcy4KKyAgICAyLiBQaXBlOiBUaGUgZXh0ZXJuYWwg cHJvZ3JhbSdzIHN0YW5kYXJkIGlucHV0IGFuZCBvdXRwdXQgYXJlCisgICAgICAgcmVkaXJlY3Rl ZCB0aHJvdWdoIGEgInBpcGUiIGNvbnRyb2xsZWQgYnkgS2VybWl0LiBUaGlzIG1ldGhvZCBpcwor ICAgICAgIHJlbGF0aXZlbHkgcG9ydGFibGUgLS0gaXQgc2hvdWxkIHdvcmsgYWNyb3NzIGFsbCBV TklYIHZlcnNpb25zLCBhbmQKKyAgICAgICBpdCBhbHNvIHdvcmtzIGluIFdpbmRvd3MgYW5kIE9T LzIgLS0gYnV0IGl0IGlzIGVmZmVjdGl2ZSBvbmx5IHdoZW4KKyAgICAgICB0aGUgZXh0ZXJuYWwg cHJvZ3JhbSBhY3R1YWxseSB1c2VzIHN0YW5kYXJkIGkvbyAoYW5kIG1hbnkgZG9uJ3QpLgorCisg ICBUaGUgdHdvIG1ldGhvZHMgYXJlIHN0YXJ0ZWQgZGlmZmVyZW50bHkgYnV0IGFyZSB1c2VkIHRo ZSBzYW1lIHdheQorICAgdGhlcmVhZnRlci4KKworICAgVGhlIHB1cnBvc2Ugb2YgdGhpcyBmZWF0 dXJlIGlzIHRvIGxldCB5b3UgdXNlIEMtS2VybWl0IHNlcnZpY2VzIGxpa2UKKyAgIGZpbGUgdHJh bnNmZXIsIGNoYXJhY3Rlci1zZXQgdHJhbnNsYXRpb24sIHNjcmlwdGluZywgYXV0b21hdGljIGRp YWxpbmcsCisgICBldGMsIG9uIGNvbm5lY3Rpb25zIHRoYXQgS2VybWl0IGNhbid0IG90aGVyd2lz ZSBtYWtlIGl0c2VsZi4KKworICAgVGhpcyBmZWF0dXJlIGlzIHRoZSBvcHBvc2l0ZSBvZiB0aGUg UkVESVJFQ1QgZmVhdHVyZSwgaW4gd2hpY2ggQy1LZXJtaXQKKyAgIG1ha2VzIHRoZSBjb25uZWN0 aW9uLCBhbmQgcmVkaXJlY3RzIGFuIGV4dGVybmFsIChsb2NhbCkgY29tbWFuZCBvcgorICAgcHJv Z3JhbSBvdmVyIHRoaXMgY29ubmVjdGlvbi4gSW4gYSBwdHkgb3IgcGlwZSBjb25uZWN0aW9uLCBD LUtlcm1pdAorICAgcnVucyBhbmQgY29udHJvbHMgYSBsb2NhbCBjb21tYW5kIG9yIHByb2dyYW0s IHdoaWNoIG1ha2VzIHRoZQorICAgY29ubmVjdGlvbi4gKFRoZSBzYW1lIG1ldGhvZCBjYW4gYmUg dXNlZCB0byBzaW1wbHkgdG8gY29udHJvbCBhIGxvY2FsCisgICBwcm9ncmFtIHdpdGhvdXQgbWFr aW5nIGEgY29ubmVjdGlvbjsgc2VlIFs0MTVdU2VjdGlvbiAyLjguKQorCisgICBUbyBmaW5kIG91 dCBpZiB5b3VyIHZlcnNpb24gb2YgS2VybWl0IGluY2x1ZGVzIFBUWSBzdXBwb3J0LCB0eXBlICJz aG93CisgICBmZWF0dXJlcyIgYW5kIGxvb2sgZm9yIE5FVFBUWSBpbiB0aGUgYWxwaGFiZXRpY2Fs IGxpc3Qgb2Ygb3B0aW9ucy4gRm9yCisgICBwaXBlcywgbG9vayBmb3IgTkVUQ01ELgorCisgICBU aGUgY29tbWFuZHMgYXJlOgorCisgICBTRVQgTkVUV09SSyBUWVBFIFBUWSBvciBTRVQgTkVUV09S SyBUWVBFIFBJUEUKKyAgIFNFVCBIT1NUIGNvbW1hbmQKKyAgICAgICAgICB3aGVyZSBjb21tYW5k IGlzIGFueSBpbnRlcmFjdGl2ZSBjb21tYW5kLiBJZiB0aGUgY29tbWFuZCBkb2VzCisgICAgICAg ICAgbm90IHVzZSBzdGFuZGFyZCBpL28sIHlvdSBtdXN0IHVzZSBTRVQgTkVUV09SSyBUWVBFIFBU WS4KKworICAgTm90ZXM6CisKKyAgICAgKiBDT01NQU5EIGlzIGFuIGludmlzaWJsZSBzeW5vbnlt IGZvciBQSVBFLgorICAgICAqIFRoZSBjb21tYW5kIGFuZCBpdHMgYXJndW1lbnRzIGFyZSBjYXNl LXNlbnNpdGl2ZSBpbiBVTklYLgorCisgICBUaGUgU0VUIE5FVFdPUksgVFlQRSwgU0VUIEhPU1Qg c2VxdWVuY2Ugc2V0cyB0aGUgZ2l2ZW4gbmV0d29yayB0eXBlIGZvcgorICAgYWxsIHN1YnNlcXVl bnQgU0VUIEhPU1QgY29tbWFuZHMgdW50aWwgYW5vdGhlciBTRVQgTkVUV09SSyBUWVBFIGNvbW1h bmQKKyAgIGlzIGdpdmVuIHRvIGNoYW5nZSBpdC4KKworICAgWW91IGNhbiBhbHNvIHVzZSB0aGUg bmV3IC9ORVRXT1JLLVRZUEU6UFRZIG9yIC9ORVRXT1JLLVRZUEU6UElQRSAob3IKKyAgIHNpbXBs eSAvUElQRSBvciAvUFRZKSBzd2l0Y2hlcyBvbiB0aGUgU0VUIEhPU1QgY29tbWFuZCBpdHNlbGY6 CisKKyAgU0VUIEhPU1QgL05FVFdPUkstVFlQRTpQSVBFIGNvbW1hbmQgIDsgVGhlc2UgdHdvIGFy ZSB0aGUgc2FtZQorICBTRVQgSE9TVCAvUElQRSBjb21tYW5kCisKKyAgU0VUIEhPU1QgL05FVFdP UkstVFlQRTpQVFkgY29tbWFuZCAgIDsgRGl0dG8KKyAgU0VUIEhPU1QgL1BUWSBjb21tYW5kCisK KyAgIFRoZXNlIGFyZSBsaWtlIFNFVCBORVRXT1JLIFRZUEUgZm9sbG93ZWQgYnkgU0VUIEhPU1Qs IGV4Y2VwdCB0aGV5IGFwcGx5CisgICBvbmx5IHRvIHRoZSBjb25uZWN0aW9uIGJlaW5nIG1hZGUg YW5kIGRvIG5vdCBjaGFuZ2UgdGhlIGdsb2JhbCBuZXR3b3JrCisgICB0eXBlIHNldHRpbmcgKHNl ZSBbNDE2XVNlY3Rpb24gMS41IGFib3V0IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4KKyAgIHN3aXRj aGVzIGFuZCBTRVQgY29tbWFuZHMpLgorCisgICBJbmNsdWRlIGFueSBjb21tYW5kLWxpbmUgb3B0 aW9ucyB3aXRoIHRoZSBjb21tYW5kIHRoYXQgbWlnaHQgYmUgbmVlZGVkLAorICAgYXMgaW4gdGhp cyBleGFtcGxlIHdoZXJlIEMtS2VybWl0IHVzZXMgYW5vdGhlciBjb3B5IG9mIGl0c2VsZiBhcyB0 aGUKKyAgIGNvbW11bmljYXRpb25zIHByb2dyYW06CisKKyAgU0VUIEhPU1QgL1BJUEUgL0NPTk5F Q1Qga2VybWl0IC1ZUUogeHl6Y29ycC5jb20KKworICAgICBJTVBPUlRBTlQ6IEluIFVuaXgsIHdp bGRjYXJkcyBhbmQgcmVkaXJlY3RvcnMgYXJlIGludGVycHJldGVkIGJ5IHRoZQorICAgICBzaGVs bC4gSWYgeW91IHdhbnQgdG8gcnVuIGEgcHJvZ3JhbSB3aXRoIChzYXkpIFNFVCBIT1NUIC9QVFkg d2l0aAorICAgICBpdHMgaS9vIHJlZGlyZWN0ZWQgb3Igd2l0aCB3aWxkY2FyZCBmaWxlIGFyZ3Vt ZW50cywgeW91IHdpbGwgbmVlZCB0bworICAgICBpbnZva2UgdGhlIHNoZWxsIHRvby4gRXhhbXBs ZToKKworU0VUIEhPU1QgL1BUWSB7c2ggLWMgImNyeXB0IDwgZm9vLngifQorU0VUIEhPU1QgL1BU WSB7c2ggLWMgImdyZXAgc29tZXN0cmluZyAqLnR4dCJ9CisKKyAgIEFzIHVzdWFsLCBpZiB5b3Ug aW5jbHVkZSB0aGUgL0NPTk5FQ1Qgc3dpdGNoLCBTRVQgSE9TVCBlbnRlcnMgQ09OTkVDVAorICAg bW9kZSBpbW1lZGlhdGVseSB1cG9uIHN1Y2Nlc3NmdWwgZXhlY3V0aW9uIG9mIHRoZSBnaXZlbiBj b21tYW5kLgorICAgVGhlcmVmb3JlIG5ldyBjb21tYW5kcyBhcmUgYXZhaWxhYmxlIGFzIGEgc2hv cnRoYW5kIGZvciBTRVQgSE9TVAorICAgL0NPTk5FQ1QgL1BUWSBhbmQgL1BJUEU6CisKKyAgIFBU WSBbIGNvbW1hbmQgXQorICAgUElQRSBbIGNvbW1hbmQgXQorICAgICAgICAgIFRoZSBQVFkgYW5k IFBJUEUgY29tbWFuZHMgd29yayBsaWtlIHRoZSBURUxORVQgYW5kIFJMT0dJTgorICAgICAgICAg IGNvbW1hbmRzOiB0aGV5IHNldCB1cCB0aGUgY29ubmVjdGlvbiAoaW4gdGhpcyBjYXNlLCB1c2lu ZyB0aGUKKyAgICAgICAgICBnaXZlbiBjb21tYW5kKSBhbmQgdGhlbiBlbnRlciBDT05ORUNUIG1v ZGUgYXV0b21hdGljYWxseSAoaWYgdGhlCisgICAgICAgICAgUElQRSBvciBQVFkgY29tbWFuZCBp cyBnaXZlbiB3aXRob3V0IGEgY29tbWFuZCwgaXQgY29udGludWVzIHRoZQorICAgICAgICAgIGN1 cnJlbnQgc2Vzc2lvbiBpZiBvbmUgaXMgYWN0aXZlOyBvdGhlcndpc2UgaXQgZ2l2ZXMgYW4gZXJy b3IKKyAgICAgICAgICBtZXNzYWdlKS4KKworICAgVGhlIFBJUEUgY29tbWFuZCBpcyBuYW1lZCBh ZnRlciB0aGUgbWVjaGFuaXNtIGJ5IHdoaWNoIEMtS2VybWl0CisgICBjb21tdW5pY2F0ZXMgd2l0 aCB0aGUgY29tbWFuZDogVU5JWCBwaXBlcy4gQy1LZXJtaXQncyBpL28gaXMgInBpcGVkIgorICAg dGhyb3VnaCB0aGUgZ2l2ZW4gY29tbWFuZC4gSGVyZSBpcyBhIHR5cGljYWwgZXhhbXBsZToKKwor ICBQSVBFIHJsb2dpbiAtOCB4eXpjb3JwLmNvbQorCisgICBUaGlzIGlzIGVxdWl2YWxlbnQgdG86 CisKKyAgU0VUIEhPU1QgL1BJUEUgcmxvZ2luIC04IHh5emNvcnAuY29tCisgIENPTk5FQ1QKKwor ICAgYW5kIHRvOgorCisgIFNFVCBIT1NUIC9QSVBFIC9DT05ORUNUIHJsb2dpbiAtOCB4eXpjb3Jw LmNvbQorCisgICBJTVBPUlRBTlQ6CisgICAgICAgICAgSWYgeW91IGFyZSB3cml0aW5nIGEgc2Ny aXB0LCBkbyBub3QgdXNlIHRoZSBQSVBFLCBQVFksIFRFTE5FVCwKKyAgICAgICAgICBvciBSTE9H SU4gY29tbWFuZCB1bmxlc3MgeW91IHJlYWxseSB3YW50IEMtS2VybWl0IHRvIGVudGVyCisgICAg ICAgICAgQ09OTkVDVCBtb2RlIGF0IHRoYXQgcG9pbnQuIE5vcm1hbGx5IFNFVCBIT1NUIGlzIHVz ZWQgaW4gc2NyaXB0cworICAgICAgICAgIHRvIGFsbG93IHRoZSBsb2dpbiBhbmQgb3RoZXIgZGlh bG9ncyB0byBiZSBjb250cm9sbGVkIGJ5IHRoZQorICAgICAgICAgIHNjcmlwdCBpdHNlbGYsIHJh dGhlciB0aGFuIGJ5IGFuIGFjdGl2ZWx5IHBhcnRpY2lwYXRpbmcgaHVtYW4gYXQKKyAgICAgICAg ICB0aGUga2V5Ym9hcmQuCisKKyAgIFRocm91Z2hwdXQgb2YgcHR5IGFuZCBwaXBlIGNvbm5lY3Rp b25zIGlzIGxpbWl0ZWQgYnkgdGhlIHBlcmZvcm1hbmNlIG9mCisgICB0aGUgY2hvc2VuIGNvbW1h bmQgb3IgcHJvZ3JhbSBhbmQgYnkgdGhlIGludGVycHJvY2VzcyBjb21tdW5pY2F0aW9uCisgICAo SVBDKSBtZXRob2QgdXNlZCBhbmQvb3IgYnVmZmVyaW5nIGNhcGFjaXR5IG9mIHRoZSBwaXBlIG9y IHB0eSwgd2hpY2gKKyAgIGluIHR1cm4gZGVwZW5kcyBvbiB0aGUgdW5kZXJseWluZyBvcGVyYXRp bmcgc3lzdGVtLgorCisgICBJbiBvbmUgdHJpYWwgKG9uIFN1bk9TIDQuMS4zKSwgd2Ugb2JzZXJ2 ZWQgZmlsZSB0cmFuc2ZlciByYXRlcyBvdmVyIGFuCisgICBybG9naW4gY29ubmVjdGlvbiBwcm9j ZWVkaW5nIGF0IDIwMEtjcHMgZm9yIGRvd25sb2FkcywgYnV0IG9ubHkgMTBLY3BzCisgICBmb3Ig dXBsb2FkcyBvbiB0aGUgc2FtZSBjb25uZWN0aW9uIHdpdGggdGhlIHNhbWUgc2V0dGluZ3MgKHNp bWlsYXIKKyAgIGRpc3Bhcml0aWVzIHdlcmUgbm90ZWQgaW4gSFAtVVgpLiBFeGFtaW5hdGlvbiBv ZiB0aGUgbG9ncyByZXZlYWxlZCB0aGF0CisgICBhIHdyaXRlIHRvIHRoZSBwaXBlIGNvdWxkIHRh a2UgYXMgbG9uZyBhcyA1IHNlY29uZHMsIHdoZXJlYXMgcmVhZHMgd2VyZQorICAgcHJhY3RpY2Fs bHkgaW5zdGFudGFuZW91cy4gT24gdGhlIG90aGVyIGhhbmQsIHVzaW5nIFRlbG5ldCBhcyB0aGUK KyAgIGV4dGVybmFsIHByb2dyYW0gcmF0aGVyIHRoYW4gcmxvZ2luLCBkb3dubG9hZHMgYW5kIHVw bG9hZHMgd2VyZSBiZXR0ZXIKKyAgIG1hdGNoZWQgYXQgYWJvdXQgMTc3SyBlYWNoLgorCisgICBN b3N0IGV4dGVybmFsIGNvbW11bmljYXRpb24gcHJvZ3JhbXMsIGxpa2UgQy1LZXJtaXQgaXRzZWxm LCBoYXZlIGVzY2FwZQorICAgY2hhcmFjdGVycyBvciBzZXF1ZW5jZXMuIE5vcm1hbGx5IHRoZXNl IGJlZ2luIHdpdGggKG9yIGNvbnNpc3QgZW50aXJlbHkKKyAgIG9mKSBhIGNvbnRyb2wgY2hhcmFj dGVyLiBZb3UgbXVzdCBiZSBzdXJlIHRoYXQgdGhpcyBjb250cm9sIGNoYXJhY3RlcgorICAgaXMg bm90ICJ1bnByZWZpeGVkIiB3aGVuIHVwbG9hZGluZyBmaWxlcywgb3RoZXJ3aXNlIHRoZSBleHRl cm5hbAorICAgcHJvZ3JhbSB3aWxsICJlc2NhcGUgYmFjayIgdG8gaXRzIHByb21wdCwgb3IgY2xv c2UgdGhlIGNvbm5lY3Rpb24sIG9yCisgICB0YWtlIHNvbWUgb3RoZXIgdW53YW50ZWQgYWN0aW9u LiBXaGVuIGluIENPTk5FQ1QgbW9kZSwgb2JzZXJ2ZSB0aGUKKyAgIHByb2dyYW0ncyBub3JtYWwg aW50ZXJhY3Rpb24gcnVsZXMuIE9mIGNvdXJzZSBDLUtlcm1pdCdzIG93biBlc2NhcGUKKyAgIGNo YXJhY3RlciAobm9ybWFsbHkgQ3RybC1cKSBpcyBhY3RpdmUgdG9vLCB1bmxlc3MgeW91IGhhdmUg dGFrZW4gc29tZQorICAgYWN0aW9uIHRvIGRpc2FibGUgaXQuCisKKyAgIE9uIFBUWSBjb25uZWN0 aW9ucywgdGhlIHVuZGVybHlpbmcgUFRZIGRyaXZlciBpcyBub3QgZ3VhcmFudGVlZCB0byBiZQor ICAgdHJhbnNwYXJlbnQgdG8gY29udHJvbCBjaGFyYWN0ZXJzIC0tIGZvciBleGFtcGxlLCBpdCBt aWdodCBleHBhbmQgdGFicywKKyAgIHRyYW5zbGF0ZSBjYXJyaWFnZSByZXR1cm5zLCBnZW5lcmF0 ZSBzaWduYWxzIGlmIGl0IHNlZXMgYW4gaW50ZXJydXB0CisgICBjaGFyYWN0ZXIsIGFuZCBzbyBv bi4gU2ltaWxhciB0aGluZ3MgbWlnaHQgaGFwcGVuIG9uIGEgUElQRSBjb25uZWN0aW9uLgorICAg Rm9yIHRoaXMgcmVhc29uLCBpZiB5b3UgcGxhbiB0byB0cmFuc2ZlciBmaWxlcyBvdmVyIGEgUFRZ IG9yIFBJUEUKKyAgIGNvbm5lY3Rpb24sIHRlbGwgdGhlIGZpbGUgc2VuZGVyIHRvOgorCisgICBT RVQgUFJFRklYSU5HIEFMTAorICAgICAgICAgIFRoaXMgY2F1c2VzIGFsbCBjb250cm9sIGNoYXJh Y3RlcnMgdG8gYmUgcHJlZml4ZWQgYW5kCisgICAgICAgICAgdHJhbnNtaXR0ZWQgYXMgcHJpbnRh YmxlIEFTQ0lJIGNoYXJhY3RlcnMuCisKKyAgIElmIHRoZSBleHRlcm5hbCBjb25uZWN0aW9uIHBy b2dyYW0gaXMgbm90IDgtYml0IGNsZWFuLCB5b3Ugc2hvdWxkIGFsc286CisKKyAgIFNFVCBQQVJJ VFkgU1BBQ0UKKyAgICAgICAgICBUaGlzIGNhdXNlcyA4LWJpdCBkYXRhIHRvIGJlIGVuY29kZWQg aW4gNyBiaXRzIHVzaW5nIHNpbmdsZQorICAgICAgICAgIGFuZC9vciBsb2NraW5nIHNoaWZ0cy4K KworICAgQW5kIGlmIGl0IGRvZXMgbm90IG1ha2UgYSByZWxpYWJsZSBjb25uZWN0aW9uIChzdWNo IGFzIHRob3NlIG1hZGUgYnkKKyAgIFRlbG5ldCwgUmxvZ2luLCBTc2gsIGV0YyksIHlvdSBzaG91 bGQ6CisKKyAgIFNFVCBTVFJFQU1JTkcgT0ZGCisgICAgICAgICAgVGhpcyBmb3JjZXMgQy1LZXJt aXQgdG8gdHJlYXQgdGhlIGNvbm5lY3Rpb24gYXMgdW5yZWxpYWJsZSBhbmQKKyAgICAgICAgICB0 byBlbmdhZ2UgaW4gaXRzIG5vcm1hbCBBQ0svTkFLIHByb3RvY29sIGZvciBlcnJvciBkZXRlY3Rp b24gYW5kCisgICAgICAgICAgY29ycmVjdGlvbiwgcmF0aGVyIHRoYW4gInN0cmVhbWluZyIgaXRz IHBhY2tldHMsIGFzIGl0IG5vcm1hbGx5CisgICAgICAgICAgZG9lcyBvbiBhIG5ldHdvcmsgY29u bmVjdGlvbiAoWzQxN11TZWN0aW9uIDQuMjApLgorCisgICBJbiBzb21lIGNhc2VzLCBidWZmZXIg c2l6ZXMgbWlnaHQgYmUgcmVzdHJpY3RlZCwgc28geW91IG1pZ2h0IGFsc28gbmVlZAorICAgdG8g cmVkdWNlIHRoZSBLZXJtaXQgcGFja2V0IGxlbmd0aCB0byBmaXQ7IHRoaXMgaXMgYSB0cmlhbC1h bmQtZXJyb3IKKyAgIGFmZmFpci4gRm9yIGV4YW1wbGUsIGlmIHRyYW5zZmVycyBhbHdheXMgZmFp bCB3aXRoIDQwMDAtYnl0ZSBwYWNrZXRzLAorICAgdHJ5IDIwMDAuIElmIHRoYXQgZmFpbHMgdG9v LCB0cnkgMTAwMCwgYW5kIHNvIG9uLiBUaGUgY29tbWFuZHMgYXJlOgorCisgICBTRVQgUkVDRUlW RSBQQUNLRVQtTEVOR1RIIG51bWJlcgorICAgICAgICAgIFRoaXMgdGVsbHMgdGhlIGZpbGUgcmVj ZWl2ZXIgdG8gdGVsbCB0aGUgZmlsZSBzZW5kZXIgdGhlIGxvbmdlc3QKKyAgICAgICAgICBwYWNr ZXQgbGVuZ3RoIGl0IGNhbiBhY2NlcHQuCisKKyAgIFNFVCBTRU5EIFBBQ0tFVC1MRU5HVEggbnVt YmVyCisgICAgICAgICAgVGhpcyB0ZWxscyB0aGUgZmlsZSBzZW5kZXIgbm90IHRvIHNlbmQgcGFj a2V0cyBsb25nZXIgdGhhbiB0aGUKKyAgICAgICAgICBnaXZlbiBsZW5ndGgsIGV2ZW4gaWYgdGhl IHJlY2VpdmVyIHNheXMgbG9uZ2VyIG9uZXMgYXJlIE9LLiBPZgorICAgICAgICAgIGNvdXJzZSwg aWYgdGhlIHJlY2VpdmVyJ3MgbGVuZ3RoIGlzIHNob3J0ZXIsIHRoZSBzaG9ydGVyIGxlbmd0aAor ICAgICAgICAgIGlzIHVzZWQuCisKKyAgIElmIG5vbmUgb2YgdGhpcyBzZWVtcyB0byBoZWxwLCB0 cnkgZmFsbGluZyBiYWNrIHRvIHRoZSBiYXJlIG1pbmltdW0sCisgICBsb3dlc3QtY29tbW9uLWRl bm9taW5hdG9yIHByb3RvY29sIHNldHRpbmdzOgorCisgICBST0JVU1QKKyAgICAgICAgICBObyBz bGlkaW5nIHdpbmRvd3MsIG5vIHN0cmVhbWluZywgbm8gY29udHJvbC1jaGFyYWN0ZXIKKyAgICAg ICAgICB1bnByZWZpeGluZywgcGFja2V0IGxlbmd0aCA5MC4KKworICAgQW5kIHRoZW4gd29yayB5 b3VyIHdheSBiYWNrIHVwIGJ5IHRyaWFsIGFuZCBlcnJvciB0byBnZXQgZ3JlYXRlcgorICAgdGhy b3VnaHB1dC4KKworICAgTm90ZSB0aGF0IHdoZW4gc3RhcnRpbmcgYSBQSVBFIGNvbm5lY3Rpb24s IGFuZCB0aGUgY29ubmVjdGlvbiBwcm9ncmFtCisgICAoc3VjaCBhcyB0ZWxuZXQgb3IgcmxvZ2lu KSBwcmludHMgc29tZSBncmVldGluZyBvciBpbmZvcm1hdGlvbiBtZXNzYWdlcworICAgYmVmb3Jl IHN0YXJ0aW5nIHRoZSBjb25uZWN0aW9uLCB0aGVzZSBhcmUgcXVpdGUgbGlrZWx5IHRvIGJlIHBy aW50ZWQKKyAgIHdpdGggYSBzdGFpcnN0ZXAgZWZmZWN0IChsaW5lZmVlZCB3aXRob3V0IGNhcnJp YWdlIHJldHVybikuIFRoaXMgaXMKKyAgIGJlY2F1c2UgdGhlIHByb2dyYW0gaXMgbm90IGNvbm5l Y3RlZCB3aXRoIHRoZSBVTklYIHRlcm1pbmFsIGRyaXZlcjsKKyAgIHRoZXJlJ3Mgbm90IG11Y2gg S2VybWl0IGNhbiBkbyBhYm91dCBpdC4gT25jZSB0aGUgY29ubmVjdGlvbiBpcyBtYWRlLAorICAg ZXZlcnl0aGluZyBzaG91bGQgZ28gYmFjayB0byBub3JtYWwuIFRoaXMgc2hvdWxkbid0IGhhcHBl biBvbiBhIFBUWQorICAgY29ubmVjdGlvbiBiZWNhdXNlIGEgUFRZIGlzLCBpbmRlZWQsIGEgdGVy bWluYWwuCisKKyAgIE9uIGEgc2ltaWxhciBub3RlLCBzb21lIGNvbm5lY3Rpb24gcHJvZ3JhbXMg KGxpa2UgU29sYXJpcyAyLjUgcmxvZ2luKQorICAgbWlnaHQgcHJpbnQgbG90cyBvZiBlcnJvciBt ZXNzYWdlcyBsaWtlICJpb2N0bCBUSU9DR0VUUDogaW52YWxpZAorICAgYXJndW1lbnQiIHdoZW4g dXNlZCB0aHJvdWdoIGEgcGlwZS4gVGhleSBhcmUgYW5ub3lpbmcgYnV0IHVzdWFsbHkKKyAgIGhh cm1sZXNzLiBJZiB5b3Ugd2FudCB0byBhdm9pZCB0aGVzZSBtZXNzYWdlcywgYW5kIHlvdXIgc2hl bGwgYWxsb3dzCisgICByZWRpcmVjdGlvbiBvZiBzdGRlcnIsIHlvdSBjYW4gcmVkaXJlY3Qgc3Rk ZXJyIGluIHlvdXIgcGlwZSBjb21tYW5kLCBhcworICAgaW4gdGhpcyBleGFtcGxlIHdoZXJlIHRo ZSB1c2VyJ3Mgc2hlbGwgaXMgYmFzaDoKKworICBQSVBFIHJsb2dpbiB4eXpjb3JwLmNvbSAyPiAv ZGV2L251bGwKKworICAgT3IgdXNlIFBUWSByYXRoZXIgdGhhbiBQSVBFLCBzaW5jZSBQVFkgaXMg YXZhaWxhYmxlIG9uIFNvbGFyaXMuCisKKzIuNy4wLiBDLUtlcm1pdCBvdmVyIHRuMzI3MCBhbmQg dG41MjUwCisKKyAgIE5vdyB5b3UgY2FuIG1ha2UgYSBjb25uZWN0aW9uIGZyb20gQy1LZXJtaXQg ImRpcmVjdGx5IiB0byBhbiBJQk0KKyAgIG1haW5mcmFtZSBhbmQgdHJhbnNmZXIgZmlsZXMgd2l0 aCBpdCwgYXNzdW1pbmcgaXQgaGFzIEtlcm1pdC0zNzAKKyAgIGluc3RhbGxlZC4gQmVjYXVzZSB0 bjMyNzAgaXMgbmVpdGhlciA4LWJpdCBjbGVhbiBub3IgdHJhbnNwYXJlbnQgdG8KKyAgIGNvbnRy b2wgY2hhcmFjdGVycywgeW91IG11c3QgZ2l2ZSB0aGVzZSBjb21tYW5kczoKKworICBTRVQgUFJF RklYSU5HIEFMTCAgIDsgUHJlZml4IGFsbCBjb250cm9sIGNoYXJhY3RlcnMKKyAgU0VUIFBBUklU WSBTUEFDRSAgICA7IFRlbG5ldCBjb25uZWN0aW9ucyBhcmUgdXN1YWxseSBub3QgOC1iaXQgY2xl YW4KKworICAgYW5kIHRoZW46CisKKyAgU0VUIEhPU1QgL1BUWSAvQ09OTkVDVCB0bjMyNzAgYWJj Y29ycC5jb20KKworICAgb3Igc2ltcGx5OgorCisgIHB0eSB0bjMyNzAgYWJjY29ycC5jb20KKwor ICAgU0VUIEhPU1QgL1BJUEUgZG9lcyBub3Qgd29yayBpbiB0aGlzIGNhc2UsIGF0IGxlYXN0IG5v dCBmb3IgZmlsZQorICAgdHJhbnNmZXIuIEZpbGUgdHJhbnNmZXIgZG9lcyB3b3JrLCBob3dldmVy LCB3aXRoIFNFVCBIT1NUIC9QVFksCisgICBwcm92aWRlZCB5b3UgdXNlIHRoZSBkZWZhdWx0IHBh Y2tldCBsZW5ndGggb2YgOTAgYnl0ZXM7IGFueXRoaW5nIGxvbmdlcgorICAgc2VlbXMgdG8ga2ls bCB0aGUgc2Vzc2lvbi4KKworICAgWW91IGNhbiBhbHNvIG1ha2UgY29ubmVjdGlvbnMgdG8gSUJN IEFTLzQwMCBjb21wdXRlcnMgaWYgeW91IGhhdmUgYQorICAgdG41MjUwIHByb2dyYW0gaW5zdGFs bGVkOgorCisgIHB0eSB0bjUyNTAgaG9zdG5hbWUKKworICAgSW4gdGhpcyBjYXNlLCBob3dldmVy LCBmaWxlIHRyYW5zZmVyIGlzIHByb2JhYmx5IG5vdCBpbiB0aGUgY2FyZHMgc2luY2UKKyAgIG5v Ym9keSBoYXMgZXZlciBzdWNjZWVkZWQgaW4gd3JpdGluZyBhIEtlcm1pdCBwcm9ncmFtIGZvciB0 aGUgQVMvNDAwLgorICAgSGludDoKKworICBkZWZpbmUgdG4zMjcwIHsKKyAgICAgIGNoZWNrIHB0 eQorICAgICAgaWYgZmFpbCBlbmQgMSBTb3JyeSAtIG5vIFBUWSBzdXBwb3J0Li4uCisgICAgICBw dHkgdG4zMjcwIFwlKgorICB9CisKKyAgIFNpbWlsYXJseSBmb3IgdG41MjUwLiBOb3RlIHRoYXQg Q0hFQ0sgUFRZIGFuZCBDSEVDSyBQSVBFIGNhbiBiZSB1c2VkIGluCisgICBtYWNyb3MgYW5kIHNj cmlwdHMgdG8gdGVzdCB3aGV0aGVyIFBUWSBvciBQSVBFIHN1cHBvcnQgaXMgYXZhaWxhYmxlLgor CisyLjcuMS4gQy1LZXJtaXQgb3ZlciBUZWxuZXQKKworICAgQWx0aG91Z2ggQy1LZXJtaXQgaW5j bHVkZXMgaXRzIG93biBUZWxuZXQgaW1wbGVtZW50YXRpb24sIHlvdSBtaWdodAorICAgbmVlZCB0 byB1c2UgYW4gZXh0ZXJuYWwgVGVsbmV0IHByb2dyYW0gdG8gbWFrZSBjZXJ0YWluIGNvbm5lY3Rp b25zOworICAgcGVyaGFwcyBiZWNhdXNlIGl0IGhhcyBhY2Nlc3Mgb3Igc2VjdXJpdHkgZmVhdHVy ZXMgbm90IGF2YWlsYWJsZSBpbgorICAgQy1LZXJtaXQgaXRzZWxmLiBBcyBub3RlZCBhYm92ZSwg dGhlIG9ubHkgcHJlY2F1dGlvbnMgbmVjZXNzYXJ5IGFyZQorICAgdXN1YWxseToKKworICBTRVQg UFJFRklYSU5HIEFMTCAgIDsgUHJlZml4IGFsbCBjb250cm9sIGNoYXJhY3RlcnMKKyAgU0VUIFBB UklUWSBTUEFDRSAgICA7IFRlbG5ldCBjb25uZWN0aW9ucyBtaWdodCBub3QgYmUgOC1iaXQgY2xl YW4KKworICAgYW5kIHRoZW46CisKKyAgU0VUIEhPU1QgL1BUWSAob3IgL1BJUEUpIC9DT05ORUNU IHRlbG5ldCBhYmNjb3JwLmNvbQorCisgICBvciwgZXF1aXZhbGVudGx5OgorCisgIFBUWSAob3Ig UElQRSkgdGVsbmV0IGFiY2NvcnAuY29tCisKKzIuNy4yLiBDLUtlcm1pdCBvdmVyIFJsb2dpbgor CisgICBDLUtlcm1pdCBpbmNsdWRlcyBpdHMgb3duIFJsb2dpbiBjbGllbnQsIGJ1dCB0aGlzIGNh biBub3JtYWxseSBiZSB1c2VkCisgICBvbmx5IGlmIHlvdSBhcmUgcm9vdCwgc2luY2UgdGhlIHJs b2dpbiBUQ1AgcG9ydCBpcyBwcml2aWxlZ2VkLiBCdXQgcHR5cworICAgYW5kIHBpcGVzIGxldCB5 b3UgbWFrZSBybG9naW4gY29ubmVjdGlvbnMgd2l0aCBDLUtlcm1pdCB0aHJvdWdoIHlvdXIKKyAg IGNvbXB1dGVyJ3MgZXh0ZXJuYWwgcmxvZ2luIHByb2dyYW0sIHdoaWNoIGlzIG5vcm1hbGx5IGlu c3RhbGxlZCBhcyBhCisgICBwcml2aWxlZ2VkIHByb2dyYW06CisKKyAgU0VUIFBSRUZJWElORyBB TEwKKworICAgYW5kIHRoZW46CisKKyAgU0VUIEhPU1QgL1BUWSAob3IgL1BJUEUpIC9DT05ORUNU IHJsb2dpbiAtOCBhYmNjb3JwLmNvbQorCisgICBvciwgZXF1aXZhbGVudGx5OgorCisgIFBUWSAo b3IgUElQRSkgcmxvZ2luIC04IGFiY2NvcnAuY29tCisKKyAgIFRoZSAiLTgiIG9wdGlvbiB0byBy bG9naW4gZW5hYmxlcyB0cmFuc21pc3Npb24gb2YgOC1iaXQgZGF0YS4gSWYgdGhpcworICAgaXMg bm90IGF2YWlsYWJsZSwgdGhlbiBpbmNsdWRlIFNFVCBQQVJJVFkgU1BBQ0UgaWYgeW91IGludGVu ZCB0bworICAgdHJhbnNmZXIgZmlsZXMuCisKKyAgIE5vdGUgdGhhdCB0aGUgbm9ybWFsIGVzY2Fw ZSBzZXF1ZW5jZSBmb3IgcmxvZ2luIGlzIENhcnJpYWdlIFJldHVybgorICAgZm9sbG93ZWQgYnkg VGlsZGUgKH4pLCBidXQgb25seSB3aGVuIHRoZSB0aWxkZSBpcyBmb2xsb3dlZCBieSBjZXJ0YWlu CisgICBvdGhlciBjaGFyYWN0ZXJzOyB0aGUgZXhhY3QgYmVoYXZpb3IgZGVwZW5kcyBvbiB5b3Vy IHJsb2dpbiBjbGllbnQsIHNvCisgICByZWFkIGl0cyBkb2N1bWVudGF0aW9uLgorCisyLjcuMy4g Qy1LZXJtaXQgb3ZlciBTZXJpYWwgQ29tbXVuaWNhdGlvbiBQcm9ncmFtcworCisgICBQdHlzIGFu ZCBwaXBlcyBhbHNvIGxldCB5b3UgdXNlIHByb2dyYW1zIHRoYXQgbWFrZSBzZXJpYWwgY29ubmVj dGlvbnMsCisgICBzdWNoIGFzIGN1IG9yIHRpcC4gRm9yIGV4YW1wbGUsIEMtS2VybWl0IGNhbiBi ZSB1c2VkIHRocm91Z2ggY3UgdG8gbWFrZQorICAgY29ubmVjdGlvbnMgdGhhdCBvdGhlcndpc2Ug bWlnaHQgbm90IGJlIGFsbG93ZWQsIGUuZy4gYmVjYXVzZSBDLUtlcm1pdAorICAgaXMgbm90IGlu c3RhbGxlZCB3aXRoIHRoZSByZXF1aXJlZCB3cml0ZSBwZXJtaXNzaW9ucyB0byB0aGUgZGlhbG91 dAorICAgZGV2aWNlIGFuZCB0aGUgVVVDUCBsb2NrZmlsZSBkaXJlY3RvcnkuCisKKyAgIFN1cHBv c2UgeW91ciBVVUNQIERldmljZXMgZmlsZSBjb250YWlucyBhbiBlbnRyeSBmb3IgYSBzZXJpYWwg ZGV2aWNlCisgICB0dHkwNCB0byBiZSB1c2VkIGZvciBkaXJlY3QgY29ubmVjdGlvbnMsIGJ1dCB0 aGlzIGRldmljZSBpcyBwcm90ZWN0ZWQKKyAgIGFnYWluc3QgeW91IChhbmQgS2VybWl0IHdoZW4g eW91IHJ1biBpdCkuIEluIHRoaXMgY2FzZSB5b3UgY2FuOgorCisgIFNFVCBDT05UUk9MIFBSRUZJ WCBBTEwKKyAgUFRZIChvciBQSVBFKSBjdSAtbCB0dHkwNAorCisgICAoU2ltaWxhcmx5IGZvciBk aWFsb3V0IGRldmljZXMsIGV4Y2VwdCB0aGVuIHlvdSBhbHNvIG5lZWQgdG8gaW5jbHVkZQorICAg dGhlIHBob25lIG51bWJlciBpbiB0aGUgImN1IiBjb21tYW5kLikKKworICAgQXMgd2l0aCBvdGhl ciBjb21tdW5pY2F0aW9uIHByb2dyYW1zLCB3YXRjaCBvdXQgZm9yIGN1J3MgZXNjYXBlCisgICBz ZXF1ZW5jZSwgd2hpY2ggaXMgdGhlIHNhbWUgYXMgdGhlIHJsb2dpbiBwcm9ncmFtJ3M6IENhcnJp YWdlIFJldHVybgorICAgZm9sbG93ZWQgYnkgVGlsZGUgKGZvbGxvd2VkIGJ5IGFub3RoZXIgY2hh cmFjdGVyIHRvIHNwZWNpZnkgYW4gYWN0aW9uLAorICAgbGlrZSAiLiIgZm9yIGNsb3NpbmcgdGhl IGNvbm5lY3Rpb24gYW5kIGV4aXRpbmcgZnJvbSBjdSkuCisKKzIuNy40LiBDLUtlcm1pdCBvdmVy IFNlY3VyZSBOZXR3b3JrIENsaWVudHMKKworICAgICBESVNDTEFJTUVSOiBUaGVyZSBhcmUgbGF3 cyBpbiB0aGUgVVNBIGFuZCBvdGhlciBjb3VudHJpZXMgcmVnYXJkaW5nCisgICAgIHVzZSwgaW1w b3J0LCBhbmQvb3IgZXhwb3J0IG9mIGVuY3J5cHRpb24gYW5kL29yIGRlY3J5cHRpb24gb3Igb3Ro ZXIKKyAgICAgZm9ybXMgb2Ygc2VjdXJpdHkgc29mdHdhcmUsIGFsZ29yaXRobXMsIHRlY2hub2xv Z3ksIGFuZCBpbnRlbGxlY3R1YWwKKyAgICAgcHJvcGVydHkuIFRoZSBLZXJtaXQgUHJvamVjdCBh dHRlbXB0cyB0byBmb2xsb3cgYWxsIGtub3duIHN0YXR1dGVzLAorICAgICBhbmQgbmVpdGhlciBp bnRlbmRzIG5vciBzdWdnZXN0cyB0aGF0IEtlcm1pdCBzb2Z0d2FyZSBjYW4gb3Igc2hvdWxkCisg ICAgIGJlIHVzZWQgaW4gYW55IHdheSwgaW4gYW55IGxvY2F0aW9uLCB0aGF0IGNpcmN1bXZlbnRz IGFueQorICAgICByZWd1bGF0aW9ucywgbGF3cywgdHJlYXRpZXMsIGNvdmVuYW50cywgb3Igb3Ro ZXIgbGVnaXRpbWF0ZSBjYW5vbnMKKyAgICAgb3IgaW5zdHJ1bWVudHMgb2YgbGF3LCBpbnRlcm5h dGlvbmFsIHJlbGF0aW9ucywgdHJhZGUsIGV0aGljcywgb3IKKyAgICAgcHJvcHJpZXR5LgorCisg ICBGb3Igc2VjdXJlIGNvbm5lY3Rpb25zIG9yIGNvbm5lY3Rpb25zIHRocm91Z2ggZmlyZXdhbGxz LCBDLUtlcm1pdCA3LjAKKyAgIGNhbiBiZSBhIEtlcmJlcm9zLCBTUlAsIGFuZC9vciBTT0NLUyBj bGllbnQgd2hlbiBidWlsdCB3aXRoIHRoZQorICAgYXBwcm9wcmlhdGUgb3B0aW9ucyBhbmQgbGli cmFyaWVzLiBCdXQgb3RoZXIgYXBwbGljYXRpb24tbGV2ZWwgc2VjdXJpdHkKKyAgIGFjcm9ueW1z IGFuZCBtZXRob2RzIC0tIFNTSCwgU1NMLCBTUlAsIFRMUyAtLSBwb3AgdXAgYXQgYW4gYWxhcm1p bmcKKyAgIHJhdGUgYW5kIGFyZSAoYSkgaW1wb3NzaWJsZSB0byBrZWVwIHVwIHdpdGgsIChiKSB1 c3VhbGx5IG11dHVhbGx5CisgICBpbmNvbXBhdGlibGUsIGFuZCAoYykgaGF2ZSByZXN0cmljdGlv bnMgb24gZXhwb3J0IG9yIHJlZGlzdHJpYnV0aW9uIGFuZAorICAgc28gY2Fubm90IGJlIGluY2x1 ZGVkIGluIEMtS2VybWl0IGl0c2VsZi4KKworICAgSG93ZXZlciwgaWYgeW91IGhhdmUgYSBzZWN1 cmUgdGV4dC1iYXNlZCBUZWxuZXQgKG9yIG90aGVyKSBjbGllbnQgdGhhdAorICAgZW1wbG95cyBv bmUgb2YgdGhlc2Ugc2VjdXJpdHkgbWV0aG9kcywgeW91IGNhbiB1c2UgQy1LZXJtaXQgInRocm91 Z2giCisgICBpdCB2aWEgYSBwdHkgb3IgcGlwZS4KKworMi43LjQuMS4gU1NICisKKyAgIEMtS2Vy bWl0IGRvZXMgbm90IGFuZCBjYW4gbm90IGluY29ycG9yYXRlIFNTSCBkdWUgdG8gbGljZW5zaW5n LCBwYXRlbnQsCisgICBhbmQgVVNBIGV4cG9ydCBsYXcgcmVzdHJpY3Rpb25zLgorCisgICBUaGUg VU5JWCBTU0ggY2xpZW50IGRvZXMgbm90IHVzZSBzdGFuZGFyZCBpbnB1dC9vdXRwdXQsIGFuZCB0 aGVyZWZvcmUKKyAgIGNhbiBiZSB1c2VkIG9ubHkgYnkgS2VybWl0J3MgUFRZIGludGVyZmFjZSwg aWYgb25lIGlzIHByZXNlbnQuIFRoZQorICAgY2F1dGlvbnMgYWJvdXQgZmlsZSB0cmFuc2Zlciwg ZXRjLCBhcmUgdGhlIHNhbWUgYXMgZm9yIFJsb2dpbi4gRXhhbXBsZToKKworICBTRVQgUFJFRklY SU5HIEFMTAorICBQVFkgc3NoIFhZWkNPUlAuQ09NCisKKyAgIE9yLCBmb3IgYSBzY3JpcHRlZCBz ZXNzaW9uOgorCisgIFNFVCBQUkVGSVhJTkcgQUxMCisgIFNFVCBIT1NUIC9QVFkgc3NoIFhZWkNP UlAuQ09NCisKKyAgIEhpbnQ6CisKKyAgZGVmaW5lIHNzaCB7CisgICAgICBjaGVjayBwdHkKKyAg ICAgIGlmIGZhaWwgZW5kIDEgU29ycnkgLSBubyBQVFkgc3VwcG9ydC4uLgorICAgICAgcHR5IHNz aCBcJSoKKyAgfQorCisyLjcuNC4yLiBTU0wKKworICAgU2VjdXJlIFNvY2tldHMgTGF5ZXIgKFNT TCkgaXMgYW5vdGhlciBUQ1AvSVAgc2VjdXJpdHkgb3ZlcmxheSwgdGhpcyBvbmUKKyAgIGRlc2ln bmVkIGJ5IGFuZCBmb3IgTmV0c2NhcGUuIEFuIFNTTCBUZWxuZXQgY2xpZW50IGlzIGF2YWlsYWJs ZSBmb3IKKyAgIFVOSVggZnJvbSB0aGUgVW5pdmVyc2l0eSBvZiBRdWVlbnNsYW5kLiBNb3JlIGlu Zm8gYXQ6CisKKyAgWzQxOF1odHRwOi8vd3d3LnBzeS51cS5vei5hdS9+ZnRwL0NyeXB0by8KKwor ICAgSW50ZXJvcGVyYWJpbGl0eSB3aXRoIEMtS2VybWl0IGlzIHVua25vd24uIEMtS2VybWl0IGFs c28gaW5jbHVkZXMgaXRzCisgICBvd24gYnVpbHQtaW4gU1NML1RMUyBzdXBwb3J0LCBidXQgaXQg aXMgbm90IGV4cG9ydGFibGU7IFs0MTldQ0xJQ0sgSEVSRQorICAgZmlsZSBmb3IgZGV0YWlscy4K KworMi43LjQuMy4gU1JQCisKKyAgIFNSUChUTSkgaXMgU3RhbmZvcmQgVW5pdmVyc2l0eSdzIFNl Y3VyZSBSZW1vdGUgUGFzc3dvcmQgcHJvdG9jb2wuIEFuCisgICBTUlAgVGVsbmV0IGNsaWVudCBp cyBhdmFpbGFibGUgZnJvbSBTdGFuZm9yZDoKKworICBbNDIwXWh0dHA6Ly9zcnAuc3RhbmZvcmQu ZWR1L3NycC8KKworICAgU3RhbmZvcmQncyBTUlAgVGVsbmV0IGNsaWVudCBmb3IgVU5JWCBoYXMg YmVlbiB0ZXN0ZWQgb24gU3VuT1MgYW5kCisgICB3b3JrcyBmaW5lIHdpdGggQy1LZXJtaXQsIGFz IGRlc2NyaWJlZCBpbiBbNDIxXVNlY3Rpb24gMi43LjEsIGUuZy4KKworICBTRVQgUFJFRklYIEFM TAorICBQVFkgKG9yIFBJUEUpIHNycC10ZWxuZXQgeGVub24uc3RhbmZvcmQuZWR1CisKKyAgIEMt S2VybWl0IGl0c2VsZiBjYW4gYmUgYnVpbHQgYXMgYW4gU1JQIFRlbG5ldCBjbGllbnQgb24gc3lz dGVtcyB0aGF0CisgICBoYXZlIGxpYnNycC5hIGluc3RhbGxlZDsgdGhlIEMtS2VybWl0IHN1cHBv cnQgY29kZSwgaG93ZXZlciwgbWF5IG5vdCBiZQorICAgZXhwb3J0ZWQgb3V0c2lkZSB0aGUgVVNB IG9yIENhbmFkYS4KKworMi43LjQuNC4gU09DS1MKKworICAgQy1LZXJtaXQgY2FuIGJlIGJ1aWx0 IGFzIGEgU09DS1MtYXdhcmUgY2xpZW50IG9uIHN5c3RlbXMgdGhhdCBoYXZlIGEKKyAgIFNPQ0tT IGxpYnJhcnkuIFNlZSBzZWN0aW9uIDguMS4xIG9mIHRoZSBbNDIyXWNrY2NmZy50eHQgZmlsZS4K KworICAgQy1LZXJtaXQgNy4wIGNhbiBhbHNvIGJlIHJ1biBvdmVyIFNPQ0tTaWZpZWQgVGVsbmV0 IG9yIHJsb2dpbiBjbGllbnRzCisgICB3aXRoIFNFVCBORVRXT1JLIFRZUEUgQ09NTUFORC4gU3Vw cG9zZSB0aGUgVGVsbmV0IHByb2dyYW0gb24geW91cgorICAgc3lzdGVtIGlzIFNPQ0tTIGVuYWJs ZWQgYnV0IEMtS2VybWl0IGlzIG5vdC4gTWFrZSBLZXJtaXQgY29ubmVjdGlvbnMKKyAgIGxpa2Ug dGhpczoKKworICBTRVQgUFJFRklYIEFMTAorICBQVFkgKG9yIFBJUEUpIHRlbG5ldCB6enouY29t CisKKzIuNy40LjUuIEtlcmJlcm9zCisKKyAgIFVOSVggQy1LZXJtaXQgY2FuIGJlIGJ1aWx0IHdp dGggTUlUIEtlcmJlcm9zIElWIG9yIFYgYXV0aGVudGljYXRpb24gYW5kCisgICBlbmNyeXB0aW9u LiBJbnN0cnVjdGlvbnMgYXJlIGF2YWlsYWJsZSBpbiBhIFs0MjNdc2VwYXJhdGUgZG9jdW1lbnQu CisgICBBZGRpdGlvbmFsIG1vZHVsZXMgYXJlIHJlcXVpcmVkIHRoYXQgY2FuIG5vdCBiZSBleHBv cnRlZCBmcm9tIHRoZSBVU0EKKyAgIHRvIGFueSBjb3VudHJ5IGV4Y2VwdCBDYW5hZGEsIGJ5IFVT IGxhdy4KKworICAgSWYgeW91IGhhdmUgS2VyYmVyb3MgaW5zdGFsbGVkIGJ1dCB5b3UgZG9uJ3Qg aGF2ZSBhIEtlcmJlcml6ZWQgdmVyc2lvbgorICAgb2YgQy1LZXJtaXQsIHlvdSBjYW4gdXNlIGt0 ZWxuZXQgYXMgQy1LZXJtaXQncyBleHRlcm5hbCBjb21tdW5pY2F0aW9ucworICAgcHJvZ3JhbSB0 byBtYWtlIHNlY3VyZSBjb25uZWN0aW9ucyB3aXRob3V0IGdpdmluZyB1cCBDLUtlcm1pdCdzCisg ICBzZXJ2aWNlczoKKworICBTRVQgUFJFRklYIEFMTAorICBQVFkgKG9yIFBJUEUpIGt0ZWxuZXQg Y2lhLmdvdgorCisyLjguIFNjcmlwdGluZyBMb2NhbCBQcm9ncmFtcworCisgICBJZiB5b3VyIHZl cnNpb24gb2YgS2VybWl0IGhhcyBQVFkgc3VwcG9ydCBidWlsdCBpbiwgdGhlbiBhbnkgdGV4dC1i YXNlZAorICAgcHJvZ3JhbSBjYW4gYmUgaW52b2tlZCB3aXRoIFNFVCBIT1NUIC9QVFkgb3IgZXF1 aXZhbGVudCBjb21tYW5kIGFuZAorICAgY29udHJvbGxlZCB1c2luZyB0aGUgbm9ybWFsIHNlcXVl bmNlIG9mIE9VVFBVVCwgSU5QVVQsIElGIFNVQ0NFU1MKKyAgIGNvbW1hbmRzICh0aGlzIGlzIHRo ZSBzYW1lIHNlcnZpY2UgdGhhdCBpcyBwcm92aWRlZCBieSB0aGUgJ2V4cGVjdCcKKyAgIHByb2dy YW0sIGJ1dCBjb250cm9sbGVkIGJ5IHRoZSBLZXJtaXQgc2NyaXB0IGxhbmd1YWdlIHJhdGhlciB0 aGFuIFRjbCkuCisKKyAgIFdoZW4gUFRZIHNlcnZpY2UgaXMgbm90IGF2YWlsYWJsZSwgdGhlbiBh bnkgcHJvZ3JhbSB0aGF0IHVzZXMgc3RhbmRhcmQKKyAgIGlucHV0IGFuZCBvdXRwdXQgY2FuIGJl IGludm9rZWQgd2l0aCBTRVQgSE9TVCAvUElQRS4KKworICAgSGVyZSdzIGFuIGV4YW1wbGUgaW4g d2hpY2ggd2Ugc3RhcnQgYW4gZXh0ZXJuYWwgS2VybWl0IHByb2dyYW0sIHdhaXQKKyAgIGZvciBp dHMgcHJvbXB0LCBnaXZlIGl0IGEgVkVSU0lPTiBjb21tYW5kLCBhbmQgdGhlbiBleHRyYWN0IHRo ZSBudW1lcmljCisgICB2ZXJzaW9uIG51bWJlciBmcm9tIGl0cyByZXNwb25zZToKKworICBzZXQg aG9zdCAvcHR5IGtlcm1pdCAtWQorICBpZiBmYWlsIHN0b3AgMSB7Q2FuJ3Qgc3RhcnQgZXh0ZXJu YWwgY29tbWFuZH0KKyAgaW5wdXQgMTAgQy1LZXJtaXQ+CisgIGlmIGZhaWwgc3RvcCAxIHtObyBD LUtlcm1pdD4gcHJvbXB0fQorICBvdXRwdXQgdmVyc2lvblwxMworICBpbnB1dCAxMCB7TnVtZXJp YzogfQorICBpZiBmYWlsIHN0b3AgMSB7Tm8gbWF0Y2ggZm9yICJOdW1lcmljOiJ9CisgIGNsZWFy IGlucHV0CisgIGlucHV0IDEwIFwxMAorICBlY2hvIFZFUlNJT04gPSAiXGZzdWJzdHIoXHYoaW5w dXQpLDEsNikiCisgIG91dHB1dCBleGl0XDEzCisKKyAgIFRoaXMgdGVjaG5pcXVlIGNvdWxkIGJl IHVzZWQgdG8gY29udHJvbCBhbnkgb3RoZXIgaW50ZXJhY3RpdmUgcHJvZ3JhbSwKKyAgIGV2ZW4g dGhvc2UgdGhhdCBkbyBzY3JlZW4gZm9ybWF0dGluZyAobGlrZSBFbWFjcyBvciBWaSksIGlmIHlv dSBjYW4KKyAgIGZpZ3VyZSBvdXQgdGhlIHNlcXVlbmNlIG9mIGV2ZW50cy4gSWYgeW91ciBLZXJt aXQgcHJvZ3JhbSBkb2Vzbid0IGhhdmUKKyAgIFBUWSBzdXBwb3J0LCB0aGVuIHRoZSBjb21tYW5k cyBhcmUgcmVzdHJpY3RlZCB0byB0aG9zZSB1c2luZyBzdGFuZGFyZAorICAgaS9vLCBpbmNsdWRp bmcgY2VydGFpbiBzaGVsbHMsIGludGVyYWN0aXZlIHRleHQtbW9kZSAiaGFyZGNvcHkiIGVkaXRv cnMKKyAgIGxpa2UgZXgsIGFuZCBzbyBvbi4KKworICAgSWYgeW91IGFyZSB1c2luZyB0aGUgUFRZ IGludGVyZmFjZSwgeW91IHNob3VsZCBiZSBhd2FyZSB0aGF0IGl0IHJ1bnMKKyAgIHRoZSBnaXZl biBwcm9ncmFtIG9yIGNvbW1hbmQgZGlyZWN0bHkgb24gdGhlIHB0eSwgd2l0aG91dCBhbnkKKyAg IGludGVydmVuaW5nIHNoZWxsIHRvIGludGVycHJldCBtZXRhY2hhcmFjdGVycywgcmVkaXJlY3Rv cnMsIGV0Yy4gSWYgeW91CisgICBuZWVkIHRoaXMgc29ydCBvZiB0aGluZywgaW5jbHVkZSB0aGUg YXBwcm9wcmlhdGUgc2hlbGwgaW52b2NhdGlvbiBhcworICAgcGFydCBvZiB5b3VyIGNvbW1hbmQ7 IGZvciBleGFtcGxlOgorCisgIHB0eSBlY2hvICoKKworICAganVzdCBlY2hvZXMgIioiOyB3aGVy ZWFzOgorCisgIHB0eSBrc2ggLWMgImVjaG8gKiIKKworICAgZWNob2VzIGFsbCB0aGUgZmlsZW5h bWVzIHRoYXQga3NoIGZpbmRzIG1hdGNoaW5nICIqIi4KKworICAgU2ltaWxhcmx5IGZvciByZWRp cmVjdGlvbjoKKworICBzZXQgaG9zdCAvcHR5IGtzaCAtYyAiY2F0ID4gZm9vIiAgOyBOb3RlOiB1 c2Ugc2hlbGwgcXVvdGluZyBydWxlcyBoZXJlCisgIHNldCB0cmFuc21pdCBlb2YgXDQKKyAgdHJh bnNtaXQgYmFyCisKKyAgIEFuZCBmb3IgdGhhdCBtYXR0ZXIsIGZvciBidWlsdC1pbiBzaGVsbCBj b21tYW5kczoKKworICBzZXQgaG9zdCAvcHR5IGtzaCAtYyAiZm9yIGkgaW4gKjsgZG8gZWNobyAk aTsgZG9uZSIKKworICAgVGhlIFBJUEUgaW50ZXJmYWNlLCBvbiB0aGUgb3RoZXIgaGFuZCwgaW52 b2tlcyB0aGUgc2hlbGwgYXV0b21hdGljYWxseSwKKyAgIHNvOgorCisgIHBpcGUgZWNobyAqCisK KyAgIHByaW50cyBmaWxlbmFtZXMsIG5vdCAiKiIuCisKKzIuOS4gWC4yNSBOZXR3b3JraW5nCisK KyAgIFguMjUgbmV0d29ya2luZyBpcyBkb2N1bWVudGVkIGluIFs0MjRdVXNpbmcgQy1LZXJtaXQs IDJuZCBFZGl0aW9uLiBXaGVuCisgICB0aGUgYm9vayB3YXMgcHVibGlzaGVkLCBYLjI1IHdhcyBh dmFpbGFibGUgb25seSBpbiBTdW5PUywgU29sYXJpcywgYW5kCisgICBTdHJhdHVzIFZPUy4gVW5s aWtlIFRDUC9JUCwgWC4yNSBBUElzIGFyZSBub3Qgc3RhbmRhcmRpemVkOyBlYWNoCisgICB2ZW5k b3IncyBYLjI1IGxpYnJhcmllcyBhbmQgc2VydmljZXMgKGlmIHRoZXkgaGF2ZSB0aGVtIGF0IGFs bCkgYXJlCisgICB1bmlxdWUuCisKKyAgIFRoaXMgc2VjdGlvbiBkZXNjcmliZXMgbmV3IGFkZGl0 aW9ucy4KKworMi45LjEuIElCTSBBSVhMaW5rL1guMjUgTmV0d29yayBQcm92aWRlciBJbnRlcmZh Y2UgZm9yIEFJWAorCisgICBTdXBwb3J0IGZvciBYLjI1IHdhcyBhZGRlZCB2aWEgSUJNJ3MgTmV0 d29yayBQcm92aWRlciBJbnRlcmZhY2UgKE5QSSksCisgICBBSVhMaW5rL1guMjUgMS4xLCB0byB0 aGUgQUlYIDQueCB2ZXJzaW9uIG9mIEMtS2VybWl0IDcuMC4KKyAgIFVuZm9ydHVuYXRlbHksIEFJ WExpbmsvWC4yNSBpcyBhIHJhdGhlciBiYXJlLWJvbmVzIGZhY2lsaXR5LCBsYWNraW5nIGluCisg ICBwYXJ0aWN1bGFyIGFueSBmb3JtIG9mIFBBRCBzdXBwb3J0IChYLjMsIFguMjgsIFguMjkpLiBU aHVzLCB0aGUgQUlYCisgICB2ZXJzaW9uIG9mIEMtS2VybWl0LCB3aGVuIGJ1aWx0IHRvIGluY2x1 ZGUgWC4yNSBuZXR3b3JraW5nLCBoYXMgbmVpdGhlcgorICAgYSBQQUQgY29tbWFuZCwgbm9yIGEg U0VUIFBBRCBjb21tYW5kLiBUaGUgc2FtZSBpcyB0cnVlIGZvciB0aGUKKyAgIHVuZGVybHlpbmcg QUlYIHN5c3RlbTogbm8gUEFEIHN1cHBvcnQuIFRodXMgaXQgaXMgbm90IHBvc3NpYmxlIHRvIGhh dmUKKyAgIGFuIGludGVyYWN0aXZlIHNoZWxsIHNlc3Npb24gb3ZlciBhbiBYLjI1IGNvbm5lY3Rp b24gaW50byBhbiBBSVggc3lzdGVtCisgICAoYXMgZmFyIGFzIHdlIGtub3cpLCBldmVuIGZyb20g WC4yNS1jYXBhYmxlIEtlcm1pdCB2ZXJzaW9ucyAoc3VjaCBhcworICAgU29sYXJpcyBvciBWT1Mp IHRoYXQgZG8gaW5jbHVkZSBQQUQgc3VwcG9ydC4KKworICAgVGh1cyB0aGUgWC4yNSBjYXBhYmls aXRpZXMgaW4gQUlYIEMtS2VybWl0IGFyZSBsaW1pdGVkIHRvIHBlZXItdG8tcGVlcgorICAgY29u bmVjdGlvbnMsIGUuZy4gZnJvbSBhIEMtS2VybWl0IGNsaWVudCB0byBhIEMtS2VybWl0IHNlcnZl ci4gVW5saWtlCisgICB0aGUgU29sYXJpcywgU3VuT1MsIGFuZCBWT1MgdmVyc2lvbnMsIHRoZSBB SVggdmVyc2lvbiBjYW4gYWNjZXB0CisgICBpbmNvbWluZyBYLjI1IGNvbm5lY3Rpb25zOgorCisg IHNldCBuZXR3b3JrIHR5cGUgeC4yNQorICBpZiBmYWlsIHN0b3AgMSBTb3JyeSAtIG5vIFguMjUg c3VwcG9ydAorICA7IFB1dCBhbnkgZGVzaXJlZCBESVNBQkxFIG9yIEVOQUJMRSBvciBTRVQgY29t bWFuZHMgaGVyZS4KKyAgc2V0IGhvc3QgL3NlcnZlciAqCisgIGlmIGZhaWwgc3RvcCAxIFguMjUg InNldCBob3N0ICoiIGZhaWxlZAorCisgICBBbmQgdGhlbiBhY2Nlc3MgaXQgZnJvbSB0aGUgY2xp ZW50IGFzIGZvbGxvd3M6CisKKyAgc2V0IG5ldHdvcmsgdHlwZSB4LjI1CisgIGlmIGZhaWwgc3Rv cCAxIFNvcnJ5IC0gbm8gWC4yNSBzdXBwb3J0CisgIHNldCBob3N0IHh4eHh4eHggOyBTcGVjaWZ5 IHRoZSBYLjI1L1guMTIxIGFkZHJlc3MKKyAgaWYgZmFpbCBzdG9wIDEgQ2FuJ3Qgb3BlbiBjb25u ZWN0aW9uCisKKyAgIEFuZCBhdCB0aGlzIHBvaW50IHRoZSBjbGllbnQgY2FuIHVzZSB0aGUgZnVs bCByYW5nZSBvZiBjbGllbnQgY29tbWFuZHM6CisgICBTRU5ELCBHRVQsIFJFTU9URSB4eHgsIEZJ TklTSCwgQllFLgorCisgICBUaGUgQUlYIHZlcnNpb24gYWxzbyBhZGRzIHR3byBuZXcgdmFyaWFi bGVzOgorCisgICBcdih4MjVsb2NhbF9udWEpCisgICAgICAgICAgVGhlIGxvY2FsIFguMjUgYWRk cmVzcy4KKworICAgXHYoeDI1cmVtb3RlX251YSkKKyAgICAgICAgICBUaGUgWC4yNSBhZGRyZXNz IG9mIHRoZSBob3N0IG9uIHRoZSBvdGhlciBlbmQgb2YgdGhlIGNvbm5lY3Rpb24uCisKKyAgIEMt S2VybWl0J3MgQUlYIFguMjUgY2xpZW50IGhhcyBub3QgYmVlbiB0ZXN0ZWQgYWdhaW5zdCBhbnl0 aGluZyBvdGhlcgorICAgdGhhbiBhIEMtS2VybWl0IFguMjUgc2VydmVyIG9uIEFJWC4gSXQgaXMg bm90IGtub3duIGlmIGl0IHdpbGwKKyAgIGludGVyb3BlcmF0ZSB3aXRoIEMtS2VybWl0IHNlcnZl cnMgb24gU29sYXJpcywgU3VuT1MsIG9yIFZPUy4KKworICAgVG8gbWFrZSBhbiBYLjI1IGNvbm5l Y3Rpb24gZnJvbSBBSVggQy1LZXJtaXQsIHlvdSBtdXN0OgorCisgIHNldCB4MjUgY2FsbC11c2Vy LWRhdGEgeHh4eAorCisgICB3aGVyZSB4eHh4IGNhbiBiZSBhbnkgZXZlbi1sZW5ndGggc3RyaW5n IG9mIGhleGFkZWNpbWFsIGRpZ2l0cywgZS5nLgorICAgMTIzQUJDLgorCisyLjkuMi4gSFAtVVgg WC4yNQorCisgICBBbHRob3VnaCBDLUtlcm1pdCBwcmVzZW50bHkgZG9lcyBub3QgaW5jbHVkZSBi dWlsdC1pbiBzdXBwb3J0IGZvciBIUC1VWAorICAgWC4yNSwgaXQgY2FuIHN0aWxsIGJlIHVzZWQg dG8gbWFrZSBYLjI1IGNvbm5lY3Rpb25zIGFzIGZvbGxvd3M6IHN0YXJ0CisgICBLZXJtaXQgYW5k IHRlbGwgaXQgdG86CisKKyAgc2V0IHByZWZpeGluZyBhbGwKKyAgc2V0IHBhcml0eSBzcGFjZQor ICBwdHkgcGFkZW0gYWRkcmVzcworCisgICBUaGlzIHNob3VsZCB3b3JrIGluIEhQLVVYIDkuMDAg YW5kIGxhdGVyIChzZWUgWzQyNV1TZWN0aW9uIDIuNykuIElmIHlvdQorICAgaGF2ZSBhbiBlYXJs aWVyIEhQLVVYIHZlcnNpb24sIG9yIHRoZSBQVFkgaW50ZXJmYWNlIGRvZXNuJ3Qgd29yayBvcgor ICAgaXNuJ3QgYXZhaWxhYmxlLCB0cnk6CisKKyAgc2V0IHByZWZpeGluZyBhbGwKKyAgc2V0IHBh cml0eSBzcGFjZQorICBwaXBlIHBhZGVtIGFkZHJlc3MKKworICAgRmFpbGluZyB0aGF0LCB1c2Ug S2VybWl0IHRvIHRlbG5ldCB0byBsb2NhbGhvc3QgYW5kIHRoZW4gYWZ0ZXIgbG9nZ2luZworICAg YmFjayBpbiwgc3RhcnQgcGFkZW0gYXMgeW91IHdvdWxkIG5vcm1hbGx5IGRvIHRvIGNvbm5lY3Qg b3ZlciBYLjI1LgorCisyLjEwLiBBZGRpdGlvbmFsIFNlcmlhbCBQb3J0IENvbnRyb2xzCisKKyAg IEMtS2VybWl0IDcuMCBhZGRzIHRoZSBmb2xsb3dpbmcgY29tbWFuZHMgZm9yIGdyZWF0ZXIgY29u dHJvbCBvdmVyCisgICBzZXJpYWwgcG9ydHMuIFRoZXNlIGNvbW1hbmRzIGFyZSBhdmFpbGFibGUg b25seSBpbiBDLUtlcm1pdCB2ZXJzaW9ucworICAgd2hvc2UgdW5kZXJseWluZyBvcGVyYXRpbmcg c3lzdGVtcyBwcm92aWRlIHRoZSBjb3JyZXNwb25kaW5nIHNlcnZpY2VzCisgICAoc3VjaCBhcyBQ T1NJWCBhbmQgVU5JWCBTeXN0ZW0gViksIGFuZCBldmVuIHRoZW4gdGhlaXIgc3VjY2Vzc2Z1bAor ICAgb3BlcmF0aW9uIGRlcGVuZHMgb24gdGhlIGNhcGFiaWxpdGllcyBvZiB0aGUgc3BlY2lmaWMg ZGV2aWNlIGFuZAorICAgZHJpdmVyLgorCisgICBTRVQgRElTQ09OTkVDVCB7IE9OLCBPRkYgfQor ICAgICAgICAgIE9uIGEgU0VUIExJTkUgb3IgU0VUIFBPUlQgY29ubmVjdGlvbiB3aXRoIFNFVCBD QVJSSUVSIE9OIG9yCisgICAgICAgICAgQVVUTywgaWYgdGhlIGNhcnJpZXIgc2lnbmFsIGRyb3Bz IGR1cmluZyB0aGUgY29ubmVjdGlvbiwKKyAgICAgICAgICBpbmRpY2F0aW5nIHRoYXQgdGhlIGNv bm5lY3Rpb24gaGFzIGJlZW4gbG9zdCwgYW5kIEMtS2VybWl0CisgICAgICAgICAgbm90aWNlcyBp dCwgdGhpcyBzZXR0aW5nIGdvdmVybnMgd2hhdCBoYXBwZW5zIG5leHQuIFdpdGggU0VUCisgICAg ICAgICAgRElTQ09OTkVDVCBPRkYsIHdoaWNoIGlzIGNvbnNpc3RlbnQgd2l0aCBwcmV2aW91cyBi ZWhhdmlvciwgYW5kCisgICAgICAgICAgdGhlcmVmb3JlIHRoZSBkZWZhdWx0LCBDLUtlcm1pdCBj b250aW51ZXMgdG8ga2VlcCB0aGUgZGV2aWNlCisgICAgICAgICAgb3BlbiBhbmQgYWxsb2NhdGVk LiBXaXRoIFNFVCBESVNDT05ORUNUIE9OLCBDLUtlcm1pdAorICAgICAgICAgIGF1dG9tYXRpY2Fs bHkgY2xvc2VzIGFuZCByZWxlYXNlcyB0aGUgZGV2aWNlIHdoZW4gaXQgc2Vuc2VzIGEKKyAgICAg ICAgICBjYXJyaWVyIG9uLXRvLW9mZiB0cmFuc2l0aW9uLCB0aHVzIGFsbG93aW5nIG90aGVycyB0 byB1c2UgaXQuCisgICAgICAgICAgSG93ZXZlciwgaXQgcmVtYWlucyB0aGUgZGVmYXVsdCBkZXZp Y2UgZm9yIGkvbyAoRElBTCwgUkVESUFMLAorICAgICAgICAgIElOUFVULCBTRU5ELCBDT05ORUNU LCBldGMpLCBzbyBpZiBhIHN1YnNlcXVlbnQgaS9vIGNvbW1hbmQgaXMKKyAgICAgICAgICBnaXZl biwgdGhlIGRldmljZSBpcyByZW9wZW5lZCBpZiBpdCBpcyBzdGlsbCBhdmFpbGFibGUuIFdoZW4g aXQKKyAgICAgICAgICBoYXMgYmVlbiBhdXRvbWF0aWNhbGx5IGNsb3NlZCBpbiB0aGlzIG1hbm5l ciwgU0hPVworICAgICAgICAgIENPTU1VTklDQVRJT05TIHB1dHMgIihjbG9zZWQpIiBhZnRlciBp dHMgbmFtZSwgYW5kIGluIFVOSVgsIHRoZQorICAgICAgICAgIGxvY2tmaWxlIGRpc2FwcGVhcnMg LS0gYm90aCBmcm9tIFNIT1cgQ09NTSBhbmQgZnJvbSB0aGUgbG9ja2ZpbGUKKyAgICAgICAgICBk aXJlY3RvcnkgaXRzZWxmLiBTeW5vbnltOiBTRVQgQ0xPU0UtT04tRElTQ09OTkVDVC4KKworICAg U0VUIEVYSVQgT04tRElTQ09OTkVDVCB7IE9OLCBPRkYgfQorICAgICAgICAgIExpa2UgRElTQ09O TkVDVCwgYnV0IG1ha2VzIHRoZSBwcm9ncmFtIGV4aXQgaWYgYSBjb25uZWN0aW9uCisgICAgICAg ICAgZHJvcHMuCisKKyAgIE5vdGUgdGhhdCBTRVQgQ0xPU0UtT04tRElTQ09OTkVDVCBhbmQgU0VU IEVYSVQgT04tRElTQ09OTkVDVCBhcHBseSBvbmx5CisgICB0byBjb25uZWN0aW9ucyB0aGF0IGRy b3A7IHRoZXkgZG8gbm90IGFwcGx5IHRvIGNvbm5lY3Rpb25zIHRoYXQgY2FuJ3QKKyAgIGJlIG1h ZGUgaW4gdGhlIGZpcnN0IHBsYWNlLiBGb3IgZXhhbXBsZSwgdGhleSBoYXZlIG5vIGVmZmVjdCB3 aGVuIGEgU0VUCisgICBMSU5FLCBTRVQgSE9TVCwgVEVMTkVULCBvciBESUFMIGNvbW1hbmQgZmFp bHMuCisKKyAgIEhBTkdVUAorICAgICAgICAgIElmIFtDTE9TRS1PTi1dRElTQ09OTkVDVCBpcyBP TiwgYW5kIHRoZSBIQU5HVVAgY29tbWFuZCBpcyBnaXZlbgorICAgICAgICAgIG9uIGEgc2VyaWFs IGRldmljZSwgYW5kIHRoZSBjYXJyaWVyIHNpZ25hbCBpcyBubyBsb25nZXIgcHJlc2VudAorICAg ICAgICAgIGFmdGVyIHRoZSBIQU5HVVAgY29tbWFuZCwgdGhlIGRldmljZSBpcyBjbG9zZWQgYW5k IHJlbGVhc2VkLgorCisgICBTRVQgUEFSSVRZIEhBUkRXQVJFIHsgRVZFTiwgT0REIH0KKyAgICAg ICAgICBVbmxpa2UgU0VUIFBBUklUWSB7IEVWRU4sIE9ERCwgTUFSSywgU1BBQ0UgfSwgd2hpY2gg c2VsZWN0cyA3CisgICAgICAgICAgZGF0YSBiaXRzIHBsdXMgdGhlIGluZGljYXRlZCBraW5kIG9m IHBhcml0eSAodG8gYmUgZG9uZSBpbgorICAgICAgICAgIHNvZnR3YXJlIGJ5IEtlcm1pdCBpdHNl bGYpLCBTRVQgUEFSSVRZIEhBUkRXQVJFIHNlbGVjdHMgOCBkYXRhCisgICAgICAgICAgYml0cyBw bHVzIGV2ZW4gb3Igb2RkIHBhcml0eSwgdG8gYmUgZG9uZSBieSB0aGUgdW5kZXJseWluZworICAg ICAgICAgIGhhcmR3YXJlLCBvcGVyYXRpbmcgc3lzdGVtLCBvciBkZXZpY2UgZHJpdmVyLiBUaGlz IGNvbW1hbmQgaXMKKyAgICAgICAgICBlZmZlY3RpdmUgb25seSB3aXRoIGEgU0VUIExJTkUgb3Ig U0VUIFBPUlQgZGV2aWNlLiBUaGF0IGlzLCBpdAorICAgICAgICAgIGhhcyBubyBlZmZlY3QgaW4g cmVtb3RlIG1vZGUsIG5vciBvbiBuZXR3b3JrIGNvbm5lY3Rpb25zLiBUaGVyZQorICAgICAgICAg IGlzIHByZXNlbnRseSBubyBtZXRob2QgZm9yIHNlbGVjdGluZyA4IGRhdGEgYml0cyBwbHVzIG1h cmsgb3IKKyAgICAgICAgICBzcGFjZSBwYXJpdHkuIElmIGhhcmR3YXJlIHBhcml0eSBpcyBpbiBl ZmZlY3QsIHRoZSB2YXJpYWJsZQorICAgICAgICAgIFx2KGh3cGFyaXR5KSBpcyBzZXQgdG8gImV2 ZW4iIG9yICJvZGQiLiBOb3RlOiBzb21lIHBsYXRmb3JtcworICAgICAgICAgIG1pZ2h0IGFsc28g c3VwcG9ydCBzZXR0aW5ncyBvZiBTUEFDRSwgTUFSSywgb3IgTk9ORS4KKworICAgU0VUIFNUT1At QklUUyB7IDEsIDIgfQorICAgICAgICAgIFRoaXMgdGVsbHMgdGhlIG51bWJlciBvZiAxLWJpdHMg dG8gaW5zZXJ0IGFmdGVyIGFuIG91dGJvdW5kCisgICAgICAgICAgY2hhcmFjdGVyJ3MgZGF0YSBh bmQgcGFyaXR5IGJpdHMsIHRvIHNlcGFyYXRlIGl0IGZyb20gdGhlIG5leHQKKyAgICAgICAgICBj aGFyYWN0ZXIuIE5vcm1hbGx5IDEuIENob29zaW5nIDIgc3RvcCBiaXRzIHNob3VsZCBkbyBubyBo YXJtLAorICAgICAgICAgIGJ1dCB3aWxsIHNsb3cgZG93biBzZXJpYWwgdHJhbnNtaXNzaW9uIGJ5 IGFwcHJveGltYXRlbHkgMTAKKyAgICAgICAgICBwZXJjZW50LiBIaXN0b3JpY2FsbHksIDIgc3Rv cCBiaXRzIHdlcmUgdXNlZCB3aXRoIFRlbGV0eXBlcyAoYXQKKyAgICAgICAgICAxMTAgYnBzIG9y IGJlbG93KSBmb3IgcHJpbnQtaGVhZCByZWNvdmVyeSB0aW1lLiBUaGVyZSBpcworICAgICAgICAg IHByZXNlbnRseSBubyBtZXRob2QgZm9yIGNob29zaW5nIGFueSBudW1iZXIgb2Ygc3RvcCBiaXRz IGJlc2lkZXMKKyAgICAgICAgICAxIGFuZCAyLgorCisgICBTRVQgU0VSSUFMIFsgZHBzIF0KKyAg ICAgICAgICBkcHMgc3RhbmRzIGZvciBEYXRhLWJpdHMsIFBhcml0eSwgU3RvcC1iaXRzLiBUaGlz IGlzIHRoZQorICAgICAgICAgIG5vdGF0aW9uIGZhbWlsaWFyIHRvIG1hbnkgcGVvcGxlIGZvciBz ZXJpYWwgcG9ydCBjb25maWd1cmF0aW9uOgorICAgICAgICAgIDdFMSwgOE4xLCA3TzIsIGV0Yy4g VGhlIGRhdGEgYml0cyBudW1iZXIgYWxzbyBiZWNvbWVzIHRoZQorICAgICAgICAgIFRFUk1JTkFM IEJZVEVTSVpFIHNldHRpbmcuIFRoZSBzZWNvbmQgY2hhcmFjdGVyIGlzIEUgZm9yIEV2ZW4sIE8K KyAgICAgICAgICBmb3IgT2RkLCBNIGZvciBNYXJrLCBTIGZvciBTcGFjZSwgb3IgTiBmb3IgTm9u ZS4gVGhlIGxpc3Qgb2YKKyAgICAgICAgICBhdmFpbGFibGUgb3B0aW9ucyBkZXBlbmRzIG9uIHRo ZSBjYXBhYmlsaXRpZXMgb2YgdGhlIHNwZWNpZmljCisgICAgICAgICAgcGxhdGZvcm0uIElmIGRw cyBpcyBvbWl0dGVkLCA4TjEgaXMgdXNlZC4gVHlwZSAic2V0IHNlcmlhbCA/IgorICAgICAgICAg IGZvciBhIGxpc3Qgb2YgYXZhaWxhYmxlIGNob2ljZXMuIEV4YW1wbGVzOgorCisgICAgICAgIFNF VCBTRVJJQUwgN0UxCisgICAgICAgICAgICAgICAgRXF1aXZhbGVudCB0byBTRVQgUEFSSVRZIEVW RU4sIFNFVCBTVE9QLUJJVFMgMSwgU0VUIFRFUk0KKyAgICAgICAgICAgICAgICBCWVRFIDcuCisK KyAgICAgICAgU0VUIFNFUklBTCA4TjEKKyAgICAgICAgICAgICAgICBFcXVpdmFsZW50IHRvIFNF VCBQQVJJVFkgTk9ORSwgU0VUIFNUT1AtQklUUyAxLCBTRVQgVEVSTQorICAgICAgICAgICAgICAg IEJZVEUgOC4KKworICAgICAgICBTRVQgU0VSSUFMIDdFMgorICAgICAgICAgICAgICAgIEVxdWl2 YWxlbnQgdG8gU0VUIFBBUklUWSBFVkVOIGFuZCBTRVQgU1RPUC1CSVRTIDIsIFNFVAorICAgICAg ICAgICAgICAgIFRFUk0gQllURSA3LgorCisgICAgICAgIFNFVCBTRVJJQUwgOEUyCisgICAgICAg ICAgICAgICAgU2FtZSBhcyBTRVQgUEFSSVRZIEhBUkRXQVJFIEVWRU4sIFNFVCBTVE9QLUJJVFMg MiwgU0VUCisgICAgICAgICAgICAgICAgVEVSTSBCWVRFIDguCisKKyAgICAgICAgU0VUIFNFUklB TAorICAgICAgICAgICAgICAgIFNhbWUgYXMgU0VUIFBBUklUWSBOT05FIGFuZCBTRVQgU1RPUC1C SVRTIDEsIFNFVCBURVJNIEJZVEUKKyAgICAgICAgICAgICAgICA4LgorCisgICBOb3RlczoKKwor ICAgICAqIFRoZSBTRVQgU0VSSUFMIHh4MiBvcHRpb25zIGFyZSBhdmFpbGFibGUgb25seSBpbiBL ZXJtaXQgdmVyc2lvbnMKKyAgICAgICB3aGVyZSB0aGUgU0VUIFBBUklUWSBIQVJEV0FSRSBjb21t YW5kIGlzIGFsc28gYXZhaWxhYmxlLiAoU0hPVworICAgICAgIEZFQVRVUkVTIGluY2x1ZGVzICJI V1BBUklUWSIgaW4gaXRzIG9wdGlvbnMgbGlzdC4pCisgICAgICogVGhlIFNFVCBTRVJJQUwgN3h4 IGFuZCA4TjEgb3B0aW9ucyBhZmZlY3QgdGhlIHNvZnR3YXJlIHBhcml0eQorICAgICAgIHNldHRp bmcsIGV2ZW4gZm9yIG5ldHdvcmsgY29ubmVjdGlvbnMuCisgICAgICogQXMgbm90ZWQgaW4gdGhl IG1hbnVhbCwgc2VsZWN0aW5nIDggZGF0YSBiaXRzIGRvZXMgbm90IGdpdmUgeW91CisgICAgICAg OC1iaXQgdGVybWluYWwgc2Vzc2lvbnMgaW4gQ09OTkVDVCBtb2RlIHVubGVzcyB5b3UgYWxzbyBT RVQKKyAgICAgICBURVJNSU5BTCBCWVRFU0laRSA4LiBUaGUgZGVmYXVsdCB0ZXJtaW5hbCBieXRl c2l6ZSByZW1haW5zIDcsIHRvCisgICAgICAgcHJvdGVjdCBhZ2FpbnN0IHRoZSBzaXR1YXRpb24g d2hlcmUgdGhlIHJlbW90ZSBob3N0IGlzIGdlbmVyYXRpbmcKKyAgICAgICBwYXJpdHkgYnV0IHlv dSBkb24ndCBrbm93IGFib3V0IGl0LiBJZiB0aGUgdGVybWluYWwgYnl0ZXNpemUgd2FzIDgKKyAg ICAgICBieSBkZWZhdWx0IGFuZCB5b3UgQ09OTkVDVGVkIHRvIHN1Y2ggYSBob3N0LCB5b3Ugd291 bGQgc2VlIG9ubHkKKyAgICAgICBnYXJiYWdlIG9uIHlvdXIgc2NyZWVuLgorICAgICAqIElmIHlv dSBkbyBub3QgZ2l2ZSBhIFNFVCBTVE9QLUJJVFMgb3IgU0VUIFNFVCBTRVJJQUwgY29tbWFuZCwK KyAgICAgICBDLUtlcm1pdCBkb2VzIG5vdCBhdHRlbXB0IHRvIHNldCB0aGUgZGV2aWNlJ3Mgc3Rv cCBiaXRzOyBpbnN0ZWFkLAorICAgICAgIGl0IHVzZXMgd2hhdGV2ZXIgc2V0dGluZyB0aGUgZGV2 aWNlIHVzZXMgd2hlbiBub3QgZ2l2ZW4gZXhwbGljaXQKKyAgICAgICBpbnN0cnVjdGlvbnMgYWJv dXQgc3RvcCBiaXRzLgorCisgICBTSE9XIENPTU1VTklDQVRJT05TIGRpc3BsYXlzIHRoZSBjdXJy ZW50IHNldHRpbmdzLiBTdG9wIGJpdHMgYW5kCisgICBoYXJkd2FyZSBwYXJpdHkgYXJlIHNob3du IG9ubHkgZm9yIFNFVCBQT1JUIC8gU0VUIExJTkUgKHNlcmlhbCkKKyAgIGRldmljZXMsIHNpbmNl IHRoZXkgZG8gbm90IGFwcGx5IHRvIG5ldHdvcmsgY29ubmVjdGlvbnMgb3IgdG8gcmVtb3RlCisg ICBtb2RlLiBTVE9QLUJJVFMgaXMgc2hvd24gYXMgIihkZWZhdWx0KSIgaWYgeW91IGhhdmUgbm90 IGdpdmVuIGFuCisgICBleHBsaWNpdCBTRVQgU1RPUC1CSVRTIG9yIFNFVCBTRVJJQUwgY29tbWFu ZC4KKworICAgVGhlIFx2KHNlcmlhbCkgdmFyaWFibGUgc2hvd3MgdGhlIFNFVCBTRVJJQUwgc2V0 dGluZyAoOE4xLCA3RTEsIGV0YykuCisKKzIuMTEuIEdldHRpbmcgQWNjZXNzIHRvIHRoZSBEaWFs b3V0IERldmljZQorCisgICAgIFRoaXMgc2VjdGlvbiBpcyBmb3IgVU5JWCBvbmx5OyBub3RlIHRo ZSBzcGVjaWFsIHdvcmRzIGFib3V0IFFOWCBhdAorICAgICB0aGUgZW5kLiBBbHNvIHNlZSBbNDI2 XVNlY3Rpb24gMi4wIGZvciBTRVQgTElORSBzd2l0Y2hlcywKKyAgICAgcGFydGljdWxhcmx5IHRo ZSAvU0hBUkUgc3dpdGNoIGZvciBWTVMgb25seS4KKworICAgQy1LZXJtaXQgZG9lcyBpdHMgYmVz dCB0byBvYmV5IHRoZSBVVUNQIGxvY2tmaWxlIGNvbnZlbnRpb25zIG9mIGVhY2gKKyAgIHBsYXRm b3JtIChtYWNoaW5lLCBvcGVyYXRpbmcgc3lzdGVtLCBPUyB2ZXJzaW9uKSB3aGVyZSBpdCBydW5z LCBpZiB0aGF0CisgICBwbGF0Zm9ybSB1c2VzIFVVQ1AuCisKKyAgIEJ1dCBzaW1wbHkgb2JleWlu ZyB0aGUgY29udmVudGlvbnMgaXMgb2Z0ZW4gbm90IGdvb2QgZW5vdWdoLCBkdWUgdG8gdGhlCisg ICBpbmNyZWFzaW5nIGxpa2VsaWhvb2QgdGhhdCBhIHBhcnRpY3VsYXIgc2VyaWFsIGRldmljZSBt aWdodCBoYXZlIG1vcmUKKyAgIHRoYW4gb25lIG5hbWUgKGUuZy4gL2Rldi90dHkwMCBhbmQgL2Rl di90ZXJtLzAwIGFyZSB0aGUgc2FtZSBkZXZpY2UgaW4KKyAgIFVuaXh3YXJlIDc7IC9kZXYvY3Vh IGFuZCAvZGV2L2N1ZmEgYXJlIHRoZSBzYW1lIGRldmljZSBpbiBOZVhUU1RFUCksCisgICBwbHVz IHRoZSBpbmNyZWFzaW5nbHkgd2lkZXNwcmVhZCB1c2Ugb2Ygc3ltbGlua3MgZm9yIGRldmljZSBu YW1lcywgc3VjaAorICAgYXMgL2Rldi9tb2RlbS4KKworICAgQy1LZXJtaXQgNy4wIGdvZXMgdG8g Z3JlYXRlciBsZW5ndGhzIHRoYW4gcHJldmlvdXMgdmVyc2lvbnMgdG8KKyAgIHN1Y2Nlc3NmdWxs eSBpbnRlcmxvY2sgd2l0aCBvdGhlciBjb21tdW5pY2F0aW9ucyBwcm9ncmFtIChhbmQgb3RoZXIK KyAgIGluc3RhbmNlcyBvZiBLZXJtaXQgaXRzZWxmKTsgZm9yIGV4YW1wbGUsIGJ5OgorCisgICAg ICogQ3JlYXRpb24gb2YgZHVhbCBsb2NrZmlsZXMgd2hlbmV2ZXIgYSBzeW1saW5rIGlzIHVzZWQ7 IG9uZSBmb3IgdGhlCisgICAgICAgbGluayBuYW1lIGFuZCBvbmUgZm9yIHRoZSByZWFsIG5hbWUu CisgICAgICogQ3JlYXRpb24gb2YgZHVhbCBsb2NrZmlsZXMgaW4gSFAtVVggYWNjb3JkaW5nIHRv IEhQIHJ1bGVzLgorICAgICAqIENyZWF0aW9uIG9mIGR1YWwgdXBwZXJjYXNlL2xvd2VyY2FzZSBs b2NrZmlsZSBuYW1lcyBpbiBTQ08KKyAgICAgICBVTklYL09EVC9PU1I1LgorICAgICAqIFRoZSB1 c2Ugb2YgdHR5bG9jaygpIGluIHZlcnNpb25zIG9mIEFJWCB3aGVyZSBpdCB3b3Jrcy4KKyAgICAg KiBUaGUgdXNlLCB3aGVyZXZlciBwb3NzaWJsZSwgb2YgbG9ja2ZpbGUgbmFtZXMgYmFzZWQgb24K KyAgICAgICBpbm9kZS9tYWpvci9taW5vciBkZXZpY2UgbnVtYmVyIHJhdGhlciB0aGFuIGRldmlj ZSBuYW1lLgorCisgICBTZWUgdGhlIFs0MjddY2t1aW5zLnR4dCBhbmQgWzQyOF1ja3Vid3IudHh0 IGZpbGVzIGZvciBkZXRhaWxzLgorCisgICBRTlggaXMgYWxtb3N0IHVuaXF1ZSBhbW9uZyBVTklY IHZhcmlldGllcyBpbiBoYXZpbmcgbm8gVVVDUCBwcm9ncmFtcworICAgbm9yIFVVQ1Atb3JpZW50 ZWQgZGlhbG91dC1kZXZpY2UgbG9ja2luZyBjb252ZW50aW9ucy4gUU5YIGRvZXMsCisgICBob3dl dmVyLCBhbGxvdyBhIHByb2dyYW0gdG8gZ2V0IHRoZSBkZXZpY2Ugb3BlbiBjb3VudC4gVGhpcyBj YW4gbm90IGJlCisgICBhIHJlbGlhYmxlIGZvcm0gb2YgbG9ja2luZyB1bmxlc3MgYWxsIGFwcGxp Y2F0aW9ucyBkbyBpdCAoYW5kIHRoZXkKKyAgIGRvbid0KSwgc28gYnkgZGVmYXVsdCwgS2VybWl0 IHVzZXMgdGhpcyBpbmZvcm1hdGlvbiBvbmx5IGZvciBwcmludGluZyBhCisgICB3YXJuaW5nIG1l c3NhZ2Ugc3VjaCBhczoKKworICBDLUtlcm1pdD5zZXQgbGluZSAvZGV2L3NlcjEKKyAgV0FSTklO RyAtICIvZGV2L3NlcjEiIGxvb2tzIGJ1c3kuLi4KKworICAgSG93ZXZlciwgaWYgeW91IHdhbnQg dG8gdXNlIGl0IGFzIGEgbG9jaywgeW91IGNhbiBkbyBzbyB3aXRoOgorCisgIFNFVCBRTlgtUE9S VC1MT0NLIHsgT04sIE9GRiB9CisKKyAgIFFOWC1QT1JULUxPQ0sgaXMgT0ZGIGJ5IGRlZmF1bHQ7 IGlmIHlvdSBzZXQgaW4gT04sIEMtS2VybWl0IGZhaWxzIHRvCisgICBvcGVuIGFueSBkaWFsb3V0 IGRldmljZSB3aGVuIGl0cyBvcGVuIGNvdW50IGluZGljYXRlcyB0aGF0IGFub3RoZXIKKyAgIHBy b2Nlc3MgaGFzIGl0IG9wZW4uIFNIT1cgQ09NTSAoaW4gUU5YIG9ubHkpIGRpc3BsYXlzIHRoZSBz ZXR0aW5nLCBhbmQKKyAgIGlmIHlvdSBoYXZlIGEgcG9ydCBvcGVuLCBpdCBhbHNvIHNob3dzIHRo ZSBjdXJyZW50IG9wZW4gY291bnQgKHdpdGgKKyAgIEMtS2VybWl0J3Mgb3duIGFjY2VzcyBhbHdh eXMgY291bnRpbmcgYXMgMSkuCisKKzIuMTIuIFRoZSBDb25uZWN0aW9uIExvZworCisgICBDLUtl cm1pdCA3LjAgYWRkcyB0aGUgYWJpbGl0eSB0byBsb2cgY29ubmVjdGlvbnMsIHNvIHlvdSBjYW4g c2VlIHdoZXJlCisgICB5b3UndmUgYmVlbiBhbmQgaGF2ZSBhIHJlY29yZCBvZiBjYWxscyB5b3Un dmUgbWFkZS4gQSBjb25uZWN0aW9uIGlzCisgICBkZWZpbmVkIGFzIGFueSBjb21tdW5pY2F0aW9u cyBzZXNzaW9uIHRoYXQgaXMgYmVndW4gYnkgU0VUIExJTkUsIFNFVAorICAgUE9SVCwgRElBTCwg U0VUIEhPU1QsIFRFTE5FVCwgb3IgUkxPR0lOLiBDb25uZWN0aW9ucyBhcmUgbm90IGxvZ2dlZAor ICAgdW5sZXNzIHlvdSByZXF1ZXN0IGl0OyB0aGUgY29tbWFuZCBpczoKKworICAgTE9HIENYIFsg ZmlsZW5hbWUgWyB7IE5FVywgQVBQRU5EIH0gXSBdCisgICAgICAgICAgRW5hYmxlcyBsb2dnaW5n IG9mIGNvbm5lY3Rpb25zIGluIHRoZSBnaXZlbiBmaWxlLiBJZiB0aGUKKyAgICAgICAgICB0cmFp bGluZyB7IE5FVywgQVBQRU5EIH0ga2V5d29yZCBpcyBvbWl0dGVkLCB0aGUgZmlsZSBpcyBvcGVu ZWQKKyAgICAgICAgICBmb3IgYXBwZW5kaW5nOyBpLmUuIG5ldyByZWNvcmRzIGFyZSB3cml0dGVu IHRvIHRoZSBlbmQuIElmIE5FVworICAgICAgICAgIGlzIHNwZWNpZmllZCwgYSBuZXcgZmlsZSBp cyBjcmVhdGVkOyBpZiBhIGZpbGUgb2YgdGhlIHNhbWUgbmFtZQorICAgICAgICAgIGFscmVhZHkg ZXhpc3RlZCwgaXQgaXMgb3ZlcndyaXR0ZW4uIElmIHRoZSBmaWxlbmFtZSBpcyBvbWl0dGVkLAor ICAgICAgICAgIENYLkxPRyBpbiB5b3VyIGhvbWUgKGxvZ2luKSBkaXJlY3RvcnkgaXMgdXNlZCAo bm90ZTogdXBwZXJjYXNlKS4KKyAgICAgICAgICBUbyBhY2NlcHQgYWxsIGRlZmF1bHRzLCBqdXN0 IHVzZSAibG9nIGNvbm5lY3Rpb25zIiAob3IgImwgYyIgZm9yCisgICAgICAgICAgc2hvcnQpLiBT eW5vbnltOiBMT0cgQ09OTkVDVElPTlMuCisKKyAgIENMT1NFIENYLUxPRworICAgICAgICAgIFRo aXMgY2xvc2VzIHRoZSBjb25uZWN0aW9uIGxvZyBpZiBpdCB3YXMgb3Blbi4gKE5vdGUsIHRoZSBD TE9TRQorICAgICAgICAgIENPTk5FQ1RJT04gY29tbWFuZCBjbG9zZXMgdGhlIGNvbm5lY3Rpb24g aXRzZWxmKS4KKworICAgU0hPVyBDWAorICAgICAgICAgIFRoaXMgc2hvd3MgeW91ciBjdXJyZW50 IGNvbm5lY3Rpb24sIGlmIGFueSwgaW5jbHVkaW5nIHRoZQorICAgICAgICAgIGVsYXBzZWQgdGlt ZSAoc2luY2UgeW91IG9wZW5lZCBpdCkuIFN5bm9ueW06IFNIT1cgQ09OTkVDVElPTi4KKworICAg XHYoY3hfdGltZSkKKyAgICAgICAgICBUaGlzIHZhcmlhYmxlIHNob3dzIHRoZSBlbGFwc2VkIHRp bWUgb2YgeW91ciBjdXJyZW50IGNvbm5lY3Rpb24sCisgICAgICAgICAgb3IgaWYgdGhlcmUgaXMg bm8gY3VycmVudCBjb25uZWN0aW9uLCBvZiB5b3VyIG1vc3QgcmVjZW50CisgICAgICAgICAgY29u bmVjdGlvbiwgb2YgaWYgdGhlcmUgaGF2ZSBiZWVuIG5vIGNvbm5lY3Rpb25zLCAwLgorCisgICBU aGUgY29ubmVjdGlvbiBjb250YWlucyBvbmUgbGluZSBwZXIgY29ubmVjdGlvbiwgb2YgdGhlIGZv cm06CisKKyAgeXl5eW1tZGQgaGg6bW06c3MgdXNlcm5hbWUgcGlkIHA9diBbIHA9diBbIC4uLiBd IF0KKworICAgd2hlcmUgdGhlIHRpbWVzdGFtcCAoaW4gY29sdW1ucyAxLTE4KSBzaG93cyB3aGVu IHRoZSBjb25uZWN0aW9uIHdhcworICAgbWFkZTsgdXNlcm5hbWUgaXMgdGhlIGxvZ2luIGlkZW50 aXR5IG9mIHRoZSBwZXJzb24gd2hvIG1hZGUgdGhlCisgICBjb25uZWN0aW9uOyBwaWQgaXMgS2Vy bWl0J3MgcHJvY2VzcyBJRCB3aGVuIGl0IG1hZGUgdGhlIGNvbm5lY3Rpb24uIFRoZQorICAgcCdz IGFyZSBwYXJhbWV0ZXJzIHRoYXQgZGVwZW5kIG9uIHRoZSB0eXBlIG9mIGNvbm5lY3Rpb24sIGFu ZCB0aGUgdidzCisgICBhcmUgdGhlaXIgdmFsdWVzOgorCisgIFQgPSBDb25uZWN0aW9uIFR5cGUg KFRDUCwgU0VSSUFMLCBESUFMLCBERUNORVQsIGV0YykuCisgIEggPSBUaGUgbmFtZSBvZiB0aGUg SG9zdCBmcm9tIHdoaWNoIHRoZSBjb25uZWN0aW9uIHdhcyBtYWRlLgorICBOID0gRGVzdGluYXRp b24gcGhvbmUgTnVtYmVyIG9yIE5ldHdvcmsgaG9zdCBuYW1lIG9yIGFkZHJlc3MuCisgIEQgPSBT ZXJpYWwgY29ubmVjdGlvbnMgb25seTogRGV2aWNlIG5hbWUuCisgIE8gPSBEaWFsZWQgY2FsbHMg b25seTogT3JpZ2luYXRpbmcgY291bnRyeSBjb2RlICYgYXJlYSBjb2RlIGlmIGtub3duLgorICBF ID0gRWxhcHNlZCB0aW1lIGluIGhoOm1tOnNzIGZvcm1hdCAob3IgaGhoOm1tOnNzLCBldGMpLgor CisgICBJZiB5b3UgYWx3YXlzIHdhbnQgdG8ga2VlcCBhIGNvbm5lY3Rpb24gbG9nLCBzaW1wbHkg YWRkOgorCisgIGxvZyBjb25uZWN0aW9ucworCisgICB0byB5b3VyIEMtS2VybWl0IGN1c3RvbWl6 YXRpb24gZmlsZS4gTm90ZSwgaG93ZXZlciwgdGhhdCBpZiB5b3UgbWFrZSBhCisgICBsb3Qgb2Yg Y29ubmVjdGlvbnMsIHlvdXIgQ1guTE9HIHdpbGwgZ3JvdyBhbmQgZ3Jvdy4gWW91IGNhbiBoYW5k bGUgdGhpcworICAgYnkgYWRkaW5nIGEgImxvZ3JvdGF0ZSIgcHJvY2VkdXJlIGxpa2UgdGhlIGZv bGxvd2luZyB0byB5b3VyCisgICBjdXN0b21pemF0aW9uIGZpbGUsIGJlZm9yZSB0aGUgImxvZyBj b25uZWN0aW9ucyIgY29tbWFuZDoKKworICBkZWZpbmUgTE9HUk9UQVRFIHsgICAgICAgICAgICAg ICAgICAgIDsgRGVmaW5lIExPR1JPVEFURSBtYWNybworICAgICAgbG9jYWwgXCVpIFwlbSBcJWQg XCVuIFwlZiBNQVgKKyAgICAgIGRlZiBNQVggNCAgICAgICAgICAgICAgICAgICAgICAgICA7IEhv dyBtYW55IG1vbnRocyB0byBrZWVwCisgICAgICBpZiBub3QgZGVmIFwlMSAtICAgICAgICAgICAg ICAgICAgOyBObyBhcmd1bWVudCBnaXZlbgorICAgICAgICBlbmQgMSBcJTA6IE5vIGZpbGVuYW1l IGdpdmVuCisgICAgICBpZiBub3QgPSAxIFxmZmlsZXMoXCUxKSAtICAgICAgICAgOyBFeGFjdGx5 IDEgZmlsZSBtdXN0IG1hdGNoCisgICAgICAgIGVuZCAxIFwlMDogXCUxIC0gRmlsZSBub3QgZm91 bmQKKyAgICAgIC5cJWQgOj0gXGZzdWJzdHIoXGZkYXRlKFwlMSksMSw2KSA7IEFyZyBPSyAtIGdl dCBmaWxlIHllYXIgJiBtb250aAorICAgICAgaWYgPSBcJWQgLSAgICAgICAgICAgICAgICAgICAg ICAgIDsgQ29tcGFyZSBmaWxlIHllYXIgJiBtb250aAorICAgICAgICBcZnN1YnN0cihcdihuZGF0 ZSksMSw2KSAtICAgICAgIDsgd2l0aCBjdXJyZW50IHllYXIgJiBtb250aAorICAgICAgICAgIGVu ZCAwICAgICAgICAgICAgICAgICAgICAgICAgIDsgU2FtZSB5ZWFyICYgbW9udGggLSBkb25lCisg ICAgICByZW5hbWUgXCUxIFwlMS5cJWQgICAgICAgICAgICAgICAgOyBEaWZmZXJlbnQgLSByZW5h bWUgZmlsZQorICAgICAgLlwlbiA6PSBcZmZpbGVzKFwlMS4qKSAgICAgICAgICAgIDsgSG93IG1h bnkgb2xkIGZpbGVzCisgICAgICBpZiA8IFwlbiBcbShNQVgpIGVuZCAwICAgICAgICAgICAgOyBO b3QgZW5vdWdoIHRvIHJvdGF0ZQorICAgICAgLlwlbSA6PSBcJTEuOTk5OTk5ICAgICAgICAgICAg ICAgIDsgSW5pdGlhbCBjb21wYXJlIHN0cmluZworICAgICAgZm9yIFwlaSAxIFwlbiAxIHsgICAg ICAgICAgICAgICAgIDsgTG9vcCB0aHJ1IG9sZCBsb2dzCisgICAgICAgICAuXCVmIDo9IFxmbmV4 dGZpbGUoKSAgICAgICAgICAgOyBHZXQgbmV4dCBmaWxlIG5hbWUKKyAgICAgICAgIGlmIGxsdCBc JWYgXCVtIC5cJW0gOj0gXCVmICAgICA7IElmIHRoaXMgb25lIG9sZGVyIHJlbWVtYmVyIGl0Cisg ICAgICB9CisgICAgICBkZWxldGUgXCVtICAgICAgICAgICAgICAgICAgICAgICAgOyBEZWxldGUg dGhlIG9sZGVzdCBvbmUKKyAgfQorICBsb2cgY29ubmVjdGlvbnMgICAgICAgICAgICAgICAgICAg ICAgIDsgTm93IG9wZW4gdGhlIChwb3NzaWJseSBuZXcpIGxvZworICBsb2dyb3RhdGUgXHYoaG9t ZSlDWC5MT0cgICAgICAgICAgICAgIDsgUnVuIHRoZSBMT0dST1RBVEUgbWFjcm8KKworICAgQXMg eW91IGNhbiBzZWUsIHRoaXMgY29tcGFyZXMgdGhlIHl5eXltbSBwb3J0aW9uIG9mIHRoZSBtb2Rp ZmljYXRpb24KKyAgIGRhdGUgKFxmZGF0ZSgpKSBvZiB0aGUgZ2l2ZW4gZmlsZSAoXCUxKSB3aXRo IHRoZSBjdXJyZW50IHl5eXltbS4gSWYKKyAgIHRoZXkgZGlmZmVyLCB0aGUgY3VycmVudCBmaWxl IGhhcyB0aGUgeXl5eW1tIHN1ZmZpeCAoZnJvbSBpdHMgbW9zdAorICAgcmVjZW50IG1vZGlmaWNh dGlvbiBkYXRlKSBhcHBlbmRlZCB0byBpdHMgbmFtZS4gVGhlbiB3ZSBzZWFyY2ggdGhyb3VnaAor ICAgYWxsIG90aGVyIHN1Y2ggZmlsZXMsIGZpbmQgdGhlIG9sZGVzdCBvbmUsIGFuZCBkZWxldGUg aXQuIFRodXMgdGhlCisgICBjdXJyZW50IGxvZywgcGx1cyB0aGUgbG9ncyBmcm9tIHRoZSBtb3N0 IHJlY2VudCBmb3VyIG1vbnRocywgYXJlIGtlcHQuCisgICBUaGlzIGlzIGFsbCBkb25lIGF1dG9t YXRpY2FsbHkgZXZlcnkgdGltZSB5b3Ugc3RhcnQgQy1LZXJtaXQuCisKKyAgIE9uIG11bHRpdXNl ciBzeXN0ZW1zLCBpdCBpcyBwb3NzaWJsZSB0byBrZWVwIGEgc2luZ2xlLCBzaGFyZWQsCisgICBz eXN0ZW0td2lkZSBjb25uZWN0aW9uIGxvZywgYnV0IHRoaXMgaXMgbm90IHJlY29tbWVuZGVkIHNp bmNlIChhKSBpdAorICAgcmVxdWlyZXMgeW91IGtlZXAgYSBwdWJsaWNseSB3cml0ZS1hY2Nlc3Np YmxlIGxvZ2ZpbGUgKGEgZ2xhcmluZyB0YXJnZXQKKyAgIGZvciBtaXNjaGllZiksIGFuZCAoYikg aXQgd291bGQgcmVxdWlyZSBlYWNoIHVzZXIgdG8gbG9nIHRvIHRoYXQgZmlsZQorICAgYW5kIG5v dCBkaXNhYmxlIGxvZ2dpbmcuIEEgYmV0dGVyIG1ldGhvZCBmb3IgbG9nZ2luZyBjb25uZWN0aW9u cywgaW4KKyAgIFVOSVggYXQgbGVhc3QsIGlzIHN5c2xvZ2dpbmcgKHNlZSBbNDI5XWNrdWlucy50 eHQgU2VjdGlvbiAxNSBhbmQKKyAgIFs0MzBdU2VjdGlvbiA0LjIgb2YgdGhlIFs0MzFdSUtTRCBB ZG1pbmlzdHJhdGlvbiBHdWlkZSBmb3IgZGV0YWlscykuCisKKzIuMTMuIEF1dG9tYXRpYyBDb25u ZWN0aW9uLVNwZWNpZmljIEZsb3cgQ29udHJvbCBTZWxlY3Rpb24KKworICAgQmVnaW5uaW5nIGlu IEMtS2VybWl0IDcuMCwgdGhlIGFwcHJvcHJpYXRlIGZsb3ctY29udHJvbCBtZXRob2QgZm9yIGVh Y2gKKyAgIGNvbm5lY3Rpb24gdHlwZSBpcyBrZXB0IGluIGEgdGFibGUsIGZvciBleGFtcGxlOgor CisgIFJlbW90ZTogICAgICAgICAgIE5PTkUKKyAgTW9kZW06ICAgICAgICAgICAgUlRTL0NUUwor ICBEaXJlY3QtU2VyaWFsOiAgICBOT05FCisgIFRDUElQOiAgICAgICAgICAgIE5PTkUKKworICAg VGhlIHNpemUgb2YgdGhlIHRhYmxlIGFuZCB2YWx1ZXMgZm9yIGVhY2ggY29ubmVjdGlvbiB0eXBl IGNhbiB2YXJ5IGZyb20KKyAgIHBsYXRmb3JtIHRvIHBsYXRmb3JtLiBUeXBlICJzZXQgZmxvdyA/ IiBmb3IgYSBsaXN0IG9mIGF2YWlsYWJsZQorICAgZmxvdy1jb250cm9sIHR5cGVzLgorCisgICBU aGUgdGFibGUgaXMgdXNlZCB0byBhdXRvbWF0aWNhbGx5IHNlbGVjdCB0aGUgYXBwcm9wcmlhdGUg a2luZCBvZiBmbG93CisgICBjb250cm9sIHdoZW5ldmVyIHlvdSBtYWtlIGEgY29ubmVjdGlvbi4g WW91IGNhbiBkaXNwbGF5IHRoZSB0YWJsZSB3aXRoOgorCisgIFNIT1cgRkxPVy1DT05UUk9MCisK KyAgIFRoZSBkZWZhdWx0cyBhcmUgYXMgZm9sbG93czoKKworICAgUmVtb3RlOgorICAgICAgICAg IE5PTkUgb3IgWE9OL1hPRkYuIFRoaXMgaXMgYmVjYXVzZSBDLUtlcm1pdCBpcyBub3QgYWxsb3dl ZCB0bworICAgICAgICAgIGZpbmQgb3V0IHdoYXQgdHlwZSBvZiBjb25uZWN0aW9uIHRoZSBpbmNv bWluZyB1c2VyIGhhcyAoKikuIE5vCisgICAgICAgICAga2luZCBvZiBmbG93IGNvbnRyb2wgd2ls bCB3b3JrIG9uIGV2ZXJ5IGtpbmQgb2YgY29ubmVjdGlvbiwKKyAgICAgICAgICBpbmNsdWRpbmcg KHVuZXhwZWN0ZWRseSkgS0VFUCwgd2hpY2ggd2Ugd291bGQgaGF2ZSBsaWtlZCB0byB1c2UsCisg ICAgICAgICAgYnV0IG5vdCB0dXJuaW5nIG9mZiBmbG93IGNvbnRyb2wgYXQgdGhlIHJlbW90ZSBl bmQgZHVyaW5nIGZpbGUKKyAgICAgICAgICB0cmFuc2ZlciBvbiBUQ1AvSVAgY29ubmVjdGlvbnMg aXMgZmF0YWwgdG8gdGhlIHRyYW5zZmVyIChleGNlcHQKKyAgICAgICAgICBpbiBWTVMgYW5kIEhQ LVVYLCB3aGVyZSBpdCBtdXN0IGJlIHNldCB0byBYb24vWG9mZiEpIFRoZXJlZm9yZQorICAgICAg ICAgIGlmIHlvdSBhcmUgZGlhbGluZyBpbiB0byBhIHNlcmlhbCBwb3J0IG9uIGEgc2VydmVyIChV TklYIG9yIFZNUykKKyAgICAgICAgICB3aGVyZSBDLUtlcm1pdCBpcyBydW5uaW5nLCB5b3Ugd2ls bCBuZWVkIHRvIHRlbGwgQy1LZXJtaXQgdG8KKyAgICAgICAgICAic2V0IGZsb3cga2VlcCIgYmVm b3JlIHRyYW5zZmVycmluZyBmaWxlcyAoYXNzdW1pbmcgdGhlIG1vZGVtCisgICAgICAgICAgYW5k IHBvcnQgYXJlIGNvbmZpZ3VyZWQgY29ycmVjdGx5IGJ5IHRoZSBzeXN0ZW0gYWRtaW5pc3RyYXRv cjsKKyAgICAgICAgICBvdGhlcndpc2UgeW91J2xsIG5lZWQgdG8gZ2l2ZSBhIHNwZWNpZmljIGtp bmQgb2YgZmxvdyBjb250cm9sLAorICAgICAgICAgIGUuZy4gInNldCBmbG93IHhvbi94b2ZmIiks IHNvIGluIHRoaXMgY2FzZSBDLUtlcm1pdCB3aWxsIG5vdAorICAgICAgICAgIGRpc2FibGUgZmxv dyBjb250cm9sLCBhcyBpdCBtdXN0IGRvIHdoZW4geW91IGFyZSBjb21pbmcgdmlhCisgICAgICAg ICAgVGVsbmV0IChkaXJlY3RseSBvciB0aHJvdWdoIGEgdGVybWluYWwgc2VydmVyLCBleGNlcHQg b24gVk1TIGFuZAorICAgICAgICAgIEhQLVVYKS4KKworICAgTW9kZW06CisgICAgICAgICAgVGhp cyBhcHBsaWVzIHdoZW4geW91IGRpYWwgb3V0IHdpdGggYSBtb2RlbS4gSW4gdGhpcyBjYXNlLCB0 aGUKKyAgICAgICAgICBNT0RFTSBGTE9XLUNPTlRST0wgc2V0dGluZyB0YWtlcyBhZmZlY3QgYWZ0 ZXIgdGhlIFNFVCBGTE9XCisgICAgICAgICAgc2V0dGluZywgc28gaXQgY2FuIHBpY2sgdGhlIG1v c3QgYXBwcm9wcmlhdGUgZmxvdyBjb250cm9sIGZvcgorICAgICAgICAgIHRoZSBjb21iaW5hdGlv biBvZiB0aGUgcGFydGljdWxhciBtb2RlbSBhbmQgdGhlCisgICAgICAgICAgY29tcHV0ZXIvcG9y dC9kcml2ZXIgdGhhdCBpcyBkaWFsaW5nLgorCisgICBEaXJlY3QtU2VyaWFsOgorICAgICAgICAg IFRoZSBkZWZhdWx0IGhlcmUgaXMgTk9ORSBiZWNhdXNlIEMtS2VybWl0IGhhcyBubyB3YXkgb2Yg a25vd2luZworICAgICAgICAgIHdoYXQga2luZCBvZiBmbG93IGNvbnRyb2wsIGlmIGFueSwgaXMg b3IgY2FuIGJlIGRvbmUgYnkgdGhlCisgICAgICAgICAgZGV2aWNlIGF0IHRoZSBvdGhlciBlbmQg b2YgdGhlIGNvbm5lY3Rpb24uIFJUUy9DVFMgd291bGQgYmUgYQorICAgICAgICAgIGJhZCBjaG9p Y2UgaGVyZSwgYmVjYXVzZSBpZiB0aGUgQ1RTIHNpZ25hbCBpcyBub3QgYXNzZXJ0ZWQsIHRoZQor ICAgICAgICAgIGNvbm5lY3Rpb24gd2lsbCBoYW5nLiBBbmQgc2luY2UgZGlyZWN0IGNvbm5lY3Rp b25zIGFyZSBvZnRlbgorICAgICAgICAgIG1hZGUgd2l0aCAzLXdpcmUgY2FibGVzLCB0aGVyZSBp cyBhIGdvb2QgY2hhbmNlIHRoZSBDVFMgc2lnbmFsCisgICAgICAgICAgd2lsbCBub3QgYmUgcmVj ZWl2ZWQuCisKKyAgIFRDUElQOgorICAgICAgICAgIE5PTkUsIHNpbmNlIFRDUCBhbmQgSVAgcHJv dmlkZSB0aGVpciBvd24gZmxvdyBjb250cm9sCisgICAgICAgICAgdHJhbnNwYXJlbnRseSB0byB0 aGUgYXBwbGljYXRpb24sIGV4Y2VwdCBpbiBWTVMsIHdoZXJlIFhvbi9Yb2ZmCisgICAgICAgICAg aXMgdGhlIGRlZmF1bHQgZHVlIHRvIHRoZSByZXF1aXJlbWVudHMgb2YgdGhlIFZNUyBUQ1AvSVAK KyAgICAgICAgICBwcm9kdWN0cy4KKworICAgT3RoZXIgbmV0d29ya3M6CisgICAgICAgICAgTk9O RSwgc2luY2UgbmV0d29ya3Mgc2hvdWxkIHByb3ZpZGUgdGhlaXIgZmxvdyBjb250cm9sCisgICAg ICAgICAgdHJhbnNwYXJlbnRseSB0byB0aGUgYXBwbGljYXRpb24uCisKKyAgICgqKSBUaGlzIGlz IHBvc3NpYmx5IHRoZSB3b3JzdCBmZWF0dXJlIG9mIFVOSVgsIFZNUywgYW5kIG90aGVyCisgICBw bGF0Zm9ybXMgd2hlcmUgQy1LZXJtaXQgcnVucy4gSWYgQy1LZXJtaXQgd2FzIGFibGUgdG8gYXNr IHRoZQorICAgb3BlcmF0aW5nIHN5c3RlbSB3aGF0IGtpbmQgb2YgY29ubmVjdGlvbiBpdCBoYWQg dG8gdGhlIHVzZXIsIGl0IGNvdWxkCisgICBzZXQgdXAgbWFueSB0aGluZ3MgZm9yIHlvdSBhdXRv bWF0aWNhbGx5LgorCisgICBZb3UgY2FuIG1vZGlmeSB0aGUgZGVmYXVsdC1mbG93LWNvbnRyb2wg dGFibGUgd2l0aDoKKworICBTRVQgRkxPVy1DT05UUk9MIC94eHggeyBOT05FLCBLRUVQLCBSVFMv Q1RTLCBYT04vWE9GRiwgLi4uIH0KKworICAgd2hlcmUgInh4eCIgaXMgdGhlIGNvbm5lY3Rpb24g dHlwZSwgZS5nLgorCisgIFNFVCBGTE9XIC9SRU1PVEUgTk9ORQorICBTRVQgRkxPVyAvRElSRUNU IFJUUy9DVFMKKworICAgSWYgeW91IGxlYXZlIG91dCB0aGUgc3dpdGNoLCBTRVQgRkxPVyB3b3Jr cyBhcyBiZWZvcmUsIGNob29zaW5nIHRoZQorICAgZmxvdyBjb250cm9sIG1ldGhvZCB0byBiZSB1 c2VkIG9uIHRoZSBjdXJyZW50IGNvbm5lY3Rpb246CisKKyAgU0VUIEZMT1cgWE9OL1hPRkYKKwor ICAgVGh1cywgd2hlbmV2ZXIgeW91IG1ha2UgYSBjb25uZWN0aW9uIHdpdGggU0VUIFBPUlQsIFNF VCBMSU5FLCBESUFMLCBTRVQKKyAgIEhPU1QsIFRFTE5FVCwgUkxPR0lOLCBldGMsIGFuIGFwcHJv cHJpYXRlIGZvcm0gb2YgZmxvdyBjb250cm9sIGlzCisgICBzZWxlY3RlZCBhdXRvbWF0aWNhbGx5 LiBZb3UgY2FuIG92ZXJyaWRlIHRoZSBhdXRvbWF0aWMgc2VsZWN0aW9uIHdpdGggYQorICAgc3Vi c2VxdWVudCBTRVQgRkxPVyBjb21tYW5kLCBzdWNoIGFzIFNFVCBGTE9XIE5PTkUgKG5vIHN3aXRj aAorICAgaW5jbHVkZWQpLgorCisgICBUaGUgZmxvdyBjb250cm9sIGlzIGNoYW5nZWQgYXV0b21h dGljYWxseSB0b28gd2hlbiB5b3UgZ2l2ZSBhIFNFVCBNT0RFTQorICAgVFlQRSBjb21tYW5kLiBG b3IgZXhhbXBsZSwgc3VwcG9zZSB5b3VyIG9wZXJhdGluZyBzeXN0ZW0gKHNheSBMaW51eCkKKyAg IHN1cHBvcnRzIGhhcmR3YXJlIGZsb3cgY29udHJvbCAoUlRTL0NUUykuIE5vdyBzdXBwb3NlIHlv dSBnaXZlIHRoZQorICAgZm9sbG93aW5nIGNvbW1hbmRzOgorCisgIHNldCBsaW5lIC9kZXYvdHR5 UzIgICAgOyBBdXRvbWF0aWNhbGx5IHNldHMgZmxvdyB0byBOT05FCisgIHNldCBtb2RlbSB0eXBl IHVzciAgICAgOyBBdXRvbWF0aWNhbGx5IHNldHMgZmxvdyB0byBSVFMvQ1RTCisgIHNldCBtb2Rl bSB0eXBlIHJvbG0gICAgOyBEb2Vzbid0IHN1cHBvcnQgUlRTL0NUUyBzbyBub3cgZmxvdyBpcyBY T04vWE9GRgorCisgICBJTVBPUlRBTlQ6IFRoaXMgbmV3IGZlYXR1cmUgdGVuZHMgdG8gbWFrZSB0 aGUgb3JkZXIgb2YgU0VUIExJTkUvSE9TVAorICAgYW5kIFNFVCBGTE9XIGNvbW1hbmRzIG1hdHRl ciwgd2hlcmUgaXQgZGlkbid0IGJlZm9yZS4gRm9yIGV4YW1wbGUsIGluCisgICBWTVM6CisKKyAg U0VUIEZMT1cgS0VFUAorICBTRVQgTElORSBUVEEwOgorCisgICB0aGUgU0VUIExJTkUgdW5kb2Vz IHRoZSBTRVQgRkxPVyBLRUVQIGNvbW1hbmQ7IHRoZSBzZXF1ZW5jZSBub3cgbXVzdAorICAgYmU6 CisKKyAgU0VUIEZMT1cgL0RJUkVDVCBLRUVQCisgIFNFVCBMSU5FIFRUQTA6CisKKyAgIG9yOgor CisgIFNFVCBMSU5FIFRUQTA6CisgIFNFVCBGTE9XIEtFRVAKKworMi4xNC4gVHJhcHBpbmcgQ29u bmVjdGlvbiBFc3RhYmxpc2htZW50IGFuZCBMb3NzCisKKyAgIElmIHlvdSBkZWZpbmUgYSBtYWNy byBjYWxsZWQgT05fT1BFTiwgaXQgaXMgZXhlY3V0ZWQgYW55IHRpbWUgdGhhdCBhCisgICBTRVQg TElORSwgU0VUIFBPUlQsIFNFVCBIT1NULCBURUxORVQsIFJMT0dJTiBvciBzaW1pbGFyIGNvbW1h bmQKKyAgIHN1Y2NlZWRzIGluIG9wZW5pbmcgYSBjb25uZWN0aW9uLiBUaGUgYXJndW1lbnQgaXMg dGhlIGhvc3Qgb3IgZGV2aWNlCisgICBuYW1lIChhcyBzaG93biBieSBTSE9XIENPTU1VTklDQVRJ T05TLCBhbmQgdGhlIHNhbWUgYXMgXHYobGluZSkpLiBUaGlzCisgICBtYWNybyBjYW4gYmUgdXNl ZCBmb3IgYWxsIHNvcnRzIG9mIHRoaW5ncywgbGlrZSBhdXRvbWF0aWNhbGx5IHNldHRpbmcKKyAg IGNvbm5lY3Rpb24tIG9yIGhvc3Qtc3BlY2lmaWMgcGFyYW1ldGVycyB3aGVuIHRoZSBjb25uZWN0 aW9uIGlzIG9wZW5lZC4KKyAgIEV4YW1wbGU6CisKKyAgZGVmIE9OX09QRU4geworICAgICAgc3dp dGNoIFwlMSB7CisgICAgICAgIDphYmNjb3JwLmNvbSwgc2V0IHJlbGlhYmxlIG9mZiwgYnJlYWsK KyAgICAgICAgOnh5emNvcnAuY29tLCBzZXQgcmVjZWl2ZSBwYWNrZXQtbGVuZ3RoIDEwMDAsIGJy ZWFrCisgICAgICAgIGV0YyBldGMuLi4KKyAgICAgIH0KKyAgfQorCisgICBJZiB5b3UgZGVmaW5l IGEgbWFjcm8gY2FsbGVkIE9OX0NMT1NFLCBpdCB3aWxsIGJlIGV4ZWN1dGVkIGFueSB0aW1lCisg ICB0aGF0IGEgU0VUIExJTkUsIFNFVCBQT1JULCBTRVQgSE9TVCwgVEVMTkVULCBSTE9HSU4gb3Ig YW55IG90aGVyIGtpbmQKKyAgIG9mIGNvbm5lY3Rpb24gdGhhdCBDLUtlcm1pdCBoYXMgbWFkZSBp cyBjbG9zZWQsIGVpdGhlciBieSB0aGUgcmVtb3RlIG9yCisgICBieSBhIGxvY2FsIENMT1NFLCBI QU5HVVAsIG9yIEVYSVQgY29tbWFuZCBvciBvdGhlciBsb2NhbCBhY3Rpb24sIHN1Y2gKKyAgIGFz IHdoZW4gYSBuZXcgY29ubmVjdGlvbiBpcyBvcGVuZWQgYmVmb3JlIGFuIG9sZCBvbmUgd2FzIGV4 cGxpY2l0bHkKKyAgIGNsb3NlZC4KKworICAgQXMgc29vbiBhcyBDLUtlcm1pdCBub3RpY2VzIHRo ZSBjb25uZWN0aW9uIGhhcyBiZWVuIGNsb3NlZCwgdGhlCisgICBPTl9DTE9TRSBtYWNybyBpcyBp bnZva2VkIGF0IChhKSB0aGUgdG9wIG9mIHRoZSBjb21tYW5kIHBhcnNpbmcgbG9vcCwKKyAgIG9y IChiKSB3aGVuIGEgY29ubmVjdGlvbiBpcyBjbG9zZWQgaW1wbGljaXRseSBieSBhIGNvbW1hbmQg c3VjaCBhcyBTRVQKKyAgIExJTkUgdGhhdCBjbG9zZXMgYW55IG9wZW4gY29ubmVjdGlvbiBwcmlv ciB0byBtYWtpbmcgYSBuZXcgY29ubmVjdGlvbiwKKyAgIG9yIChjKSB3aGVuIEMtS2VybWl0IGNs b3NlcyBhbiBvcGVuIGNvbm5lY3Rpb24gaW4gdGhlIGFjdCBvZiBleGl0aW5nLgorCisgICBUaGUg T05fQ0xPU0UgbWFjcm8gd2FzIGluc3BpcmVkIGJ5IHRoZSBuZXZlcmVuZGluZyBxdWVzdCB0byB1 bml0ZQorICAgS2VybWl0IGFuZCBTU0guIEluIHRoaXMgY2FzZSB1c2luZyB0aGUgInR1bm5lbCIg bWVjaGFuaXNtOgorCisgIGRlZiBUVU5ORUwgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOyBcJTEgPSBob3N0IHRvIHR1bm5lbCB0bworICAgICAgbG9jYWwgXCVwCisgICAgICBpZiBu b3QgZGVmIFwlMSBzdG9wIDEKKyAgICAgIGFzc2lnbiB0dW5uZWxob3N0IFwlMSAgICAgICAgICAg ICAgICAgICA7IE1ha2UgZ2xvYmFsIGNvcHkKKyAgICAgIHVuZGVmIG9uX2Nsb3NlCisgICAgICBz ZXQgbWFjcm8gZXJyb3Igb2ZmCisgICAgICBjbG9zZSBjb25uZWN0aW9uICAgICAgICAgICAgICAg ICAgICAgICAgOyBJZ25vcmUgYW55IGVycm9yCisgICAgICBvcGVuICFyZWFkIHR1bm5lbCBzdGFy dCBcJTEKKyAgICAgIHJlYWQgXCVwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IEdl dCBwb3J0IG51bWJlcgorICAgICAgaWYgZmFpbCBzdG9wIDEgVHVubmVsIGZhaWx1cmU6IFwlMQor ICAgICAgY2xvc2UgcmVhZAorICAgICAgaWYgZmFpbCBzdG9wIDEgVHVubmVsIGZhaWx1cmU6IFwl MSAgICAgIDsgU2VlIFs0MzJdU2VjdGlvbiA0LjIuOC4xCisgICAgICBhc3NpZ24gb25fY2xvc2Ug eyAgICAgICAgICAgICAgICAgICAgICAgOyBTZXQgdXAgY2xvc2UgaGFuZGxlcgorICAgICAgICAg IGVjaG8gQ2xvc2luZyB0dW5uZWw6IFxtKHR1bm5lbGhvc3QpCisgICAgICAgICAgIXR1bm5lbCBz dG9wIFxtKHR1bm5lbGhvc3QpCisgICAgICAgICAgdW5kZWYgb25fY2xvc2UKKyAgICAgIH0KKyAg ICAgIHNldCBob3N0IGxvY2FsaG9zdDpcJXAgL3RlbG5ldAorICAgICAgaWYgc3VjY2VzcyBlbmQg MAorICAgICAgdW5kZWYgb25fY2xvc2UKKyAgICAgIHN0b3AgMSBDb25uZWN0aW9uIGZhaWx1cmU6 IFwlMQorICB9CisKKyAgIEluIHRoaXMgY2FzZSwgd2hlbiB0aGUgY29ubmVjdGlvbiBzdG9wcywg d2UgYWxzbyBuZWVkIHRvIHNodXQgZG93biB0aGUKKyAgIHR1bm5lbCwgZXZlbiBpZiBpdCBpcyBh dCBhIGxhdGVyIHRpbWUgYWZ0ZXIgVFVOTkVMIGhhcyBmaW5pc2hlZAorICAgZXhlY3V0aW5nLiBU aGlzIHdheSB3ZSBjYW4gZXNjYXBlIGJhY2ssIHJlY29ubmVjdCwgdHJhbnNmZXIgZmlsZXMsIGFu ZAorICAgc28gb24gdW50aWwgdGhlIGNvbm5lY3Rpb24gaXMgYnJva2VuIGJ5IGxvZ2dpbmcgb3V0 IGZyb20gdGhlIHJlbW90ZSwgb3IKKyAgIGJ5IGV4cGxpY2l0bHkgY2xvc2luZyBpdCwgb3IgYnkg RVhJVGluZyBmcm9tIEMtS2VybWl0LCBhdCB3aGljaCB0aW1lCisgICB0aGUgdHVubmVsIGlzIHNo dXQgZG93bi4KKworICAgV2hlbiB0aGUgY29ubmVjdGlvbiBpcyBjbG9zZWQsIG5vIG1hdHRlciBo b3csIHRoZSBPTl9DTE9TRSBtYWNybworICAgZXhlY3V0ZXMgYW5kIHRoZW4gdW5kZWZpbmVzIChk ZXN0cm95cykgaXRzZWxmLCBzaW5jZSB3ZSBkb24ndCB3YW50IHRvCisgICBiZSBjbG9zaW5nIHR1 bm5lbHMgaW4gdGhlIGZ1dHVyZSB3aGVuIHdlIGNsb3NlIHN1YnNlcXVlbnQgY29ubmVjdGlvbnMu CisKKyAgIE90aGVyIHN1Y2ggdHJpY2tzIGNhbiBiZSBpbWFnaW5lZCwgaW5jbHVkaW5nIGVuZGlu ZyBPTl9DTE9TRSB3aXRoIGEKKyAgIFNUT1AgY29tbWFuZCB0byBmb3JjZSB0aGUgY29tbWFuZCBz dGFjayB0byBiZSBwZWVsZWQgYWxsIHRoZSB3YXkgYmFjaworICAgdG8gdGhlIHRvcCwgZm9yIGV4 YW1wbGUgaW4gYSBkZWVwbHkgbmVzdGVkIHNjcmlwdCB0aGF0IGRlcGVuZHMgb24gdGhlCisgICBj b25uZWN0aW9uIGJlaW5nIG9wZW46CisKKyAgZGVmIG9uX2Nsb3NlIHsgc3RvcCAxIENPTk5FQ1RJ T04gTE9TVCB9CisKKyAgIFdoZW4gQy1LZXJtaXQgaW52b2tlcyB0aGUgT05fQ0xPU0UgbWFjcm8s IGl0IHN1cHBsaWVzIG9uZSBhcmd1bWVudAorICAgKFwlMSk6IHRoZSByZWFzb24gdGhlIGNvbm5l Y3Rpb24gd2FzIGNsb3NlZCBhcyBhIG51bWJlciwgb25lIG9mIHRoZQorICAgZm9sbG93aW5nOgor CisgIDIgLSBGYXRhbCBmYWlsdXJlIHRvIG5lZ290aWF0ZSBhIHJlcXVpcmVkIGl0ZW0gb24gYSBu ZXR3b3JrIGNvbm5lY3Rpb24uCisgIDEgLSBDbG9zZWQgYnkgQy1LZXJtaXQgY29tbWFuZC4KKyAg MCAtIEFsbCBvdGhlcnMgKG5vcm1hbGx5IGNsb3NlZCBieSByZW1vdGUpLgorCisgICB3aGljaCBt YXkgYmUgdXNlZCBmb3IgYW55IHB1cnBvc2U7IGZvciBleGFtcGxlLCB0byBhZGQgYSBjb21tZW50 IHRvIHRoZQorICAgY29ubmVjdGlvbiBsb2c6CisKKyAgZGVmIG9uX2Nsb3NlIHsKKyAgICAgIGxv Y2FsIFwlbQorICAgICAgaWYgbm90IG9wZW4gY3ggZW5kIDAKKyAgICAgIHN3aXRjaCBcJTEgewor ICAgICAgICA6MCwgLlwlbSA9IENsb3NlZCBieSByZW1vdGUsIGJyZWFrCisgICAgICAgIDoxLCAu XCVtID0gQ2xvc2VkIGJ5IG1lLCBicmVhaworICAgICAgICA6MiwgLlwlbSA9IE5ldHdvcmsgcHJv dG9jb2wgbmVnb3RpYXRpb24gZmFpbHVyZSwgYnJlYWsKKyAgICAgIH0KKyAgICAgIGlmIGRlZiBc JW0gd3JpdGVsbiBjeCB7IyBcJW19CisgIH0KKworMi4xNS4gQ29udGFjdGluZyBXZWIgU2VydmVy cyB3aXRoIHRoZSBIVFRQIENvbW1hbmQKKworICAgQy1LZXJtaXQgNy4wIChhdCB0aGlzIHdyaXRp bmcsIHRoZSBVTklYIHZlcnNpb24gb25seSkgc3VwcG9ydHMgZGlyZWN0CisgICBjb250YWN0IGFu ZCBpbnRlcmFjdGlvbiB3aXRoIFdlYiBzZXJ2ZXJzIHZpYSBIVFRQIDEuMCBwcm90b2NvbC4gVG8g bWFrZQorICAgYSBjb25uZWN0aW9uLCB1c2UgS2VybWl0J3Mgbm9ybWFsIG1ldGhvZCBmb3IgbWFr aW5nIGEgVENQL0lQCisgICBjb25uZWN0aW9uLCBidXQgc3BlY2lmeSB0aGUgSFRUUCBwb3J0Ogor CisgIFNFVCBIT1NUIGhvc3QgaHR0cCBbIHN3aXRjaGVzIF0KKworICAgd2hlcmUgaG9zdCBpcyB0 aGUgSVAgaG9zdG5hbWUgb3IgYWRkcmVzcywgYW5kIGh0dHAgaXMgdGhlIG5hbWUgb2YgdGhlCisg ICBUQ1AgcG9ydCBmb3IgdGhlIFdlYiBzZXJ2ZXIuIFJlbGV2YW50IHN3aXRjaGVzIGluY2x1ZGU6 CisKKyAgIC9SQVcKKyAgICAgICAgICBUcmVhdCB0aGUgY29ubmVjdGlvbiBhcyBhIHRyYW5zcGFy ZW50IGJpbmFyeSBwaXBlLiBUaGlzIHN3aXRjaAorICAgICAgICAgIG1heSBiZSByZXF1aXJlZCBp ZiBhIHBvcnQgb3RoZXIgdGhhbiAnaHR0cCcgaXMgdXNlZC4KKworICAgL1NTTAorICAgICAgICAg IE1ha2UgYW4gc2VjdXJlIHByaXZhdGUgY29ubmVjdGlvbiB3aXRoIFNTTCAob25seSBpZiBTU0wg c3VwcG9ydAorICAgICAgICAgIGlzIGluY2x1ZGVkIGluIHlvdXIgdmVyc2lvbiBvZiBLZXJtaXQp LiBJbiB0aGlzIGNhc2UgdGhlIHBvcnQKKyAgICAgICAgICBuYW1lIG1pZ2h0IG5lZWQgdG8gYmUg aHR0cHMgcmF0aGVyIHRoYW4gaHR0cCwgZS5nLiAic2V0IGhvc3QKKyAgICAgICAgICBzZWN1cmVz ZXJ2ZXIueHl6Y29ycC5jb20gaHR0cHMgL3NzbCIuCisKKyAgIC9UTFMKKyAgICAgICAgICBNYWtl IGFuIHNlY3VyZSBwcml2YXRlIGNvbm5lY3Rpb24gd2l0aCBUTFMgKG9ubHkgaWYgVExTIHN1cHBv cnQKKyAgICAgICAgICBpcyBpbmNsdWRlZCBpbiB5b3VyIHZlcnNpb24gb2YgS2VybWl0KS4gSW4g dGhpcyBjYXNlIHRoZSBwb3J0CisgICAgICAgICAgbmFtZSB3b3VsZCBiZSBodHRwcyByYXRoZXIg dGhhbiBodHRwLgorCisgICBUaGVuIHlvdSBjYW4gaXNzdWUgYW4gSFRUUCBjb21tYW5kLiBJbiBt b3N0IGNhc2VzLCB0aGUgc2VydmVyIGNsb3NlcworICAgdGhlIGNvbm5lY3Rpb24gd2hlbiB0aGUg Y29tbWFuZCBpcyBjb21wbGV0ZS4gRXhhbXBsZToKKworICBTRVQgSE9TVCB3d3cuY29sdW1iaWEu ZWR1IGh0dHAKKyAgSUYgRkFJTCBFWElUIDEgQ2FuJ3QgY29udGFjdCBzZXJ2ZXIKKyAgSFRUUCBH RVQga2VybWl0L2luZGV4Lmh0bWwKKworICAgQXQgdGhpcyBwb2ludCB0aGUgY29ubmVjdGlvbiBp cyBjbG9zZWQsIHNpbmNlIHRoYXQncyBob3cgSFRUUCAxLjAKKyAgIHdvcmtzLiBJZiB5b3Ugd2Fu dCB0byBwZXJmb3JtIGFkZGl0aW9uYWwgb3BlcmF0aW9ucywgeW91IG11c3QgZXN0YWJsaXNoCisg ICBhIG5ldyBjb25uZWN0aW9uIHdpdGggYW5vdGhlciBTRVQgSE9TVCBjb21tYW5kLgorCisgICBU aGUgSFRUUCBjb21tYW5kIGFjdHMgYXMgYSBjbGllbnQgdG8gdGhlIFdlYiBzZXJ2ZXIsIGV4Y2Vw dCBpbnN0ZWFkIG9mCisgICBkaXNwbGF5aW5nIHRoZSByZXN1bHRzIGxpa2UgYSBXZWIgYnJvd3Nl ciB3b3VsZCwgaXQgc3RvcmVzIHRoZW0uIEFueQorICAgSFRUUCBjb21tYW5kIGNhbiAoYnV0IG5l ZWQgbm90KSBpbmNsdWRlIGFueSBvciBhbGwgb2YgdGhlIGZvbGxvd2luZworICAgc3dpdGNoZXM6 CisKKyAgIC9BR0VOVDp1c2VyLWFnZW50CisgICAgICAgICAgSWRlbnRpZmllcyB0aGUgY2xpZW50 IHRvIHRoZSBzZXJ2ZXI7ICJDLUtlcm1pdCIgb3IgIktlcm1pdC05NSIKKyAgICAgICAgICBieSBk ZWZhdWx0LgorCisgICAvSEVBREVSOmhlYWRlci1saW5lCisgICAgICAgICAgVXNlZCBmb3Igc3Bl Y2lmeWluZyBhbnkgb3B0aW9uYWwgaGVhZGVycy4gQSBsaXN0IG9mIGhlYWRlcnMgaXMKKyAgICAg ICAgICBwcm92aWRlZCB1c2luZyBicmFjZXMgZm9yIGdyb3VwaW5nOgorCisgIC9IRUFERVI6e3t0 YWc6dmFsdWV9e3RhZzp2YWx1ZX0uLi59CisKKyAgICAgICAgICBGb3IgYSBsaXN0aW5nIG9mIHZh bGlkIHRhZyB2YWx1ZSBhbmQgdmFsdWUgZm9ybWF0cyBzZWUgWzQzM11SRkMKKyAgICAgICAgICAx OTQ1OiBIeXBlcnRleHQgVHJhbnNmZXIgUHJvdG9jb2wgLS0gSFRUUC8xLjAuIEEgbWF4aW11bSBv ZgorICAgICAgICAgIGVpZ2h0IGhlYWRlcnMgbWF5IGJlIHNwZWNpZmllZC4KKworICAgL1VTRVI6 bmFtZQorICAgICAgICAgIEluIGNhc2UgYSBwYWdlIHJlcXVpcmVzIGEgdXNlcm5hbWUgZm9yIGFj Y2Vzcy4KKworICAgL1BBU1NXT1JEOnBhc3N3b3JkCisgICAgICAgICAgSW4gY2FzZSBhIHBhZ2Ug cmVxdWlyZXMgYSBwYXNzd29yZCBmb3IgYWNjZXNzLgorCisgICAvQVJSQVk6YXJyYXluYW1lCisg ICAgICAgICAgVGVsbHMgS2VybWl0IHRvIHN0b3JlIHRoZSByZXNwb25zZSBoZWFkZXJzIGluIHRo ZSBnaXZlbiBhcnJheSwKKyAgICAgICAgICBvbmUgbGluZSBwZXIgZWxlbWVudC4gVGhlIGFycmF5 IG5lZWQgbm90IGJlIGRlY2xhcmVkIGluIGFkdmFuY2UuCisgICAgICAgICAgRXhhbXBsZToKKwor ICBDLUtlcm1pdD8gaHR0cCAvYXJyYXk6YyBnZXQga2VybWl0L2luZGV4Lmh0bWwKKyAgQy1LZXJt aXQ/IHNob3cgYXJyYXkgYworICBEaW1lbnNpb24gPSA5CisgIDEuIERhdGU6IEZyaSwgMjYgTm92 IDE5OTkgMjM6MTI6MjIgR01UCisgIDIuIFNlcnZlcjogQXBhY2hlLzEuMy40IChVbml4KQorICAz LiBMYXN0LU1vZGlmaWVkOiBNb24sIDA2IFNlcCAxOTk5IDIyOjM1OjU4IEdNVAorICA0LiBFVGFn OiAiYmMwNDktZjcyLTM3ZDQ0MWNlIgorICA1LiBBY2NlcHQtUmFuZ2VzOiBieXRlcworICA2LiBD b250ZW50LUxlbmd0aDogMzk1NAorICA3LiBDb25uZWN0aW9uOiBjbG9zZQorICA4LiBDb250ZW50 LVR5cGU6IHRleHQvaHRtbAorCisgICBBcyB5b3UgY2FuIHNlZSwgdGhlIGhlYWRlciBsaW5lcyBh cmUgbGlrZSBNSU1FIGUtbWFpbCBoZWFkZXIgbGluZXM6CisgICBpZGVudGlmaWVyLCBjb2xvbiwg dmFsdWUuIFRoZSAvQVJSQVkgc3dpdGNoIGlzIHRoZSBvbmx5IG1ldGhvZAorICAgYXZhaWxhYmxl IHRvIGEgc2NyaXB0IHRvIHByb2Nlc3MgdGhlIHNlcnZlciByZXNwb25zZXMgZm9yIGEgUE9TVCBv ciBQVVQKKyAgIGNvbW1hbmQuCisKKyAgIFRoZSBIVFRQIGNvbW1hbmRzIGFyZToKKworICAgSFRU UCBbIHN3aXRjaGVzIF0gR0VUIHJlbW90ZS1maWxlbmFtZSBbIGxvY2FsLWZpbGVuYW1lIF0KKyAg ICAgICAgICBSZXRyaWV2ZXMgdGhlIG5hbWVkIGZpbGUuIElmIGEgbG9jYWwtZmlsZW5hbWUgaXMg Z2l2ZW4sIHRoZSBmaWxlCisgICAgICAgICAgaXMgc3RvcmVkIGxvY2FsbHkgdW5kZXIgdGhhdCBu YW1lOyBvdGhlcndpc2UgaXQgaXMgc3RvcmVkIHdpdGgKKyAgICAgICAgICBpdHMgb3duIG5hbWUu CisKKyAgIEhUVFAgWyBzd2l0Y2hlcyBdIEhFQUQgcmVtb3RlLWZpbGVuYW1lIGxvY2FsLWZpbGVu YW1lCisgICAgICAgICAgTGlrZSBHRVQgZXhjZXB0IHdpdGhvdXQgYWN0dWFsbHkgZ2V0dGluZyB0 aGUgZmlsZTsgaW5zdGVhZCBpdAorICAgICAgICAgIGdldHMgb25seSB0aGUgaGVhZGVycywgc3Rv cmluZyB0aGVtIGludG8gdGhlIGdpdmVuIGZpbGUsIHdob3NlCisgICAgICAgICAgbmFtZSBtdXN0 IGJlIGdpdmVuLCBvbmUgbGluZSBwZXIgaGVhZGVyIGl0ZW0sIGFzIHNob3duIGFib3ZlIGluCisg ICAgICAgICAgdGhlIC9BUlJBWTogc3dpdGNoIGRlc2NyaXB0aW9uLgorCisgICBIVFRQIFsgc3dp dGNoZXMgXSBJTkRFWCByZW1vdGUtZGlyZWN0b3J5IFsgbG9jYWwtZmlsZW5hbWUgXQorICAgICAg ICAgIFJldHJpZXZlcyB0aGUgZmlsZSBsaXN0aW5nIGZvciB0aGUgZ2l2ZW4gc2VydmVyIGRpcmVj dG9yeS4gTk9URToKKyAgICAgICAgICBUaGlzIGNvbW1hbmQgaXMgbm90IHN1cHBvcnRlZCBieSBt b3N0IFdlYiBzZXJ2ZXJzLgorCisgICBIVFRQIFsgc3dpdGNoZXMgXSBQT1NUIFsgL01JTUUtVFlQ RTp0eXBlIF0gbG9jYWwtZmlsZSByZW1vdGUtZmlsZQorICAgICAgICAgIFVzZWQgdG8gc2VuZCBh IHJlc3BvbnNlIGFzIGlmIGl0IHdlcmUgc2VudCBmcm9tIGEgZm9ybS4gVGhlIGRhdGEKKyAgICAg ICAgICB0byBiZSBwb3N0ZWQgbXVzdCBiZSByZWFkIGZyb20gYSBmaWxlLgorCisgICBIVFRQIFsg c3dpdGNoZXMgXSBQVVQgWyAvTUlNRS1UWVBFOnR5cGUgXSBsb2NhbC1maWxlIHJlbW90ZS1maWxl CisgICAgICAgICAgVXBsb2FkcyBhIGxvY2FsIGZpbGUgdG8gYSBzZXJ2ZXIgZmlsZS4KKworICAg SFRUUCBbIHN3aXRjaGVzIF0gREVMRVRFIHJlbW90ZS1maWxlbmFtZQorICAgICAgICAgIEluc3Ry dWN0cyB0aGUgc2VydmVyIHRvIGRlbGV0ZSB0aGUgc3BlY2lmaWVkIGZpbGVuYW1lLgorCiszLiBU RVJNSU5BTCBDT05ORUNUSU9OCisKKzMuMS4gQ09OTkVDVCBDb21tYW5kIFN3aXRjaGVzCisKKyAg IFRoZSBmb2xsb3dpbmcgc3dpdGNoZXMgKHNlZSBbNDM0XVNlY3Rpb24gMS41KSB3ZXJlIGFkZGVk IHRvIHRoZSBDT05ORUNUCisgICBjb21tYW5kIGluIDcuMDoKKworICAgL1FVSUVUTFkKKyAgICAg ICAgICBEb24ndCBwcmludCB0aGUgIkNvbm5lY3RpbmcgdG8uLi4iIG9yICJCYWNrIGF0Li4uIiBt ZXNzYWdlcy4gQ1EKKyAgICAgICAgICBpcyBhbiBpbnZpc2libGUgY29tbWFuZCBzeW5vbnltIGZv ciBDT05ORUNUIC9RVUlFVExZLgorCisgICAvVFJJR0dFUjpzdHJpbmcKKyAgICAgICAgICBTcGVj aWZ5IGEgdHJpZ2dlciBvciB0cmlnZ2VycyAoWzQzNV1TZWN0aW9uIDMuMikgZWZmZWN0aXZlIGZv cgorICAgICAgICAgIHRoaXMgQ09OTkVDVCBjb21tYW5kIG9ubHksIHRlbXBvcmFyaWx5IG92ZXJy aWRpbmcgYW55IGN1cnJlbnQKKyAgICAgICAgICBTRVQgVEVSTUlOQUwgVFJJR0dFUiB2YWx1ZXMg KFs0MzZdU2VjdGlvbiAzLjIpLgorCisgICBOb3RlOiBPdGhlciBzd2l0Y2hlcyBtaWdodCBhbHNv IGJlIGF2YWlsYWJsZTsgdHlwZSAiY29ubmVjdCA/IiBmb3IgYQorICAgbGlzdCwgImhlbHAgY29u bmVjdCIgZm9yIGEgZGVzY3JpcHRpb24gb2YgZWFjaC4KKworMy4yLiBUcmlnZ2VycworCisgICBU cmlnZ2VycyB3ZXJlIGFkZGVkIGZvciBVTklYLCBWTVMsIEFPUy9WUywgYW5kIEs5NSBpbiBDLUtl cm1pdCA3LjAuCisKKyAgIFNFVCBURVJNSU5BTCBUUklHR0VSIHN0cmluZworICAgICAgICAgIFRl bGxzIEMtS2VybWl0IHRvIGxvb2sgZm9yIHRoZSBnaXZlbiBzdHJpbmcgZHVyaW5nIGFsbAorICAg ICAgICAgIHN1YnNlcXVlbnQgQ09OTkVDVCBzZXNzaW9ucywgYW5kIGlmIHNlZW4sIHRvIHJldHVy biB0byBjb21tYW5kCisgICAgICAgICAgbW9kZSBhdXRvbWF0aWNhbGx5LCBhcyBpZiB5b3UgaGFk IGVzY2FwZWQgYmFjayBtYW51YWxseS4gSWYgdGhlCisgICAgICAgICAgc3RyaW5nIGluY2x1ZGVz IGFueSBzcGFjZXMsIHlvdSBtdXN0IGVuY2xvc2UgaXQgaW4gYnJhY2VzLgorICAgICAgICAgIEV4 YW1wbGU6CisKKyAgc2V0IHRlcm1pbmFsIHRyaWdnZXIge05PIENBUlJJRVJ9CisKKyAgIENvbXBh cmlzb25zIGFyZSBtYWRlIGFmdGVyIGNoYXJhY3Rlci1zZXQgdHJhbnNsYXRpb24uCisKKyAgIElm IGEgc3RyaW5nIGlzIHRvIGluY2x1ZGUgYSBsaXRlcmFsIGJyYWNlIGNoYXJhY3RlciwgcHJlY2Vk ZSBpdCB3aXRoIGEKKyAgIGJhY2tzbGFzaDoKKworICA7IE15IG1vZGVtIGFsd2F5cyBtYWtlcyB0 aGlzIG5vaXNlIHdoZW4gdGhlIGNvbm5lY3Rpb24gaXMgbG9zdDoKKyAgc2V0IHRlcm1pbmFsIHRy aWdnZXIgfHx8cHBwXHtce1x7XHtVVVVVVVVVCisKKyAgIElmIHlvdSB3YW50IEtlcm1pdCB0byBs b29rIGZvciBtb3JlIHRoYW4gb25lIHN0cmluZyBzaW11bHRhbmVvdXNseSwgdXNlCisgICB0aGUg Zm9sbG93aW5nIHN5bnRheDoKKworICBzZXQgdGVybWluYWwgdHJpZ2dlciB7e3N0cmluZzF9e3N0 cmluZzJ9Li4ue3N0cmluZ259fQorCisgICBJbiB0aGlzIGNhc2UsIEMtS2VybWl0IHdpbGwgcmV0 dXJuIHRvIGNvbW1hbmQgbW9kZSBhdXRvbWF0aWNhbGx5IGlmIGFueQorICAgb2YgdGhlIGdpdmVu IHN0cmluZ3MgaXMgZW5jb3VudGVyZWQuIFVwIHRvIDggc3RyaW5ncyBtYXkgYmUgc3BlY2lmaWVk LgorCisgICBJZiB0aGUgbW9zdCByZWNlbnQgcmV0dXJuIHRvIGNvbW1hbmQgbW9kZSB3YXMgY2F1 c2VkIGJ5IGEgdHJpZ2dlciwgdGhlCisgICBuZXcgdmFyaWFibGUsIFx2KHRyaWdnZXIpLCBzaG93 cyB0aGUgdHJpZ2dlciB2YWx1ZTsgb3RoZXJ3aXNlCisgICBcdih0cmlnZ2VyKSBpcyBlbXB0eS4K KworICAgVGhlIFNIT1cgVFJJR0dFUiBjb21tYW5kIGRpc3BsYXlzIHRoZSBTRVQgVEVSTUlOQUwg VFJJR0dFUiB2YWx1ZXMgYXMKKyAgIHdlbGwgYXMgdGhlIFx2KHRyaWdnZXIpIHZhbHVlLgorCisz LjMuIFRyYW5zcGFyZW50IFByaW50aW5nCisKKyAgIEFzIG5vdGVkIGluIHRoZSBtYW51YWwsIEMt S2VybWl0J3MgQ09OTkVDVCBjb21tYW5kIG9uIFVOSVggaXMgbm90IGEKKyAgIHRlcm1pbmFsIGVt dWxhdG9yLCBidXQgcmF0aGVyIGEgInNlbWl0cmFuc3BhcmVudCBwaXBlIiBiZXR3ZWVuIHRoZQor ICAgdGVybWluYWwgb3IgZW11bGF0b3IgeW91IGFyZSB1c2luZyB0byBhY2Nlc3MgQy1LZXJtaXQs IGFuZCB0aGUgcmVtb3RlCisgICBob3N0IHRvIHdoaWNoIEMtS2VybWl0IGlzIGNvbm5lY3RlZC4g VGhlICJzZW1pdHJhbnNwYXJlbnQiIHF1YWxpZmllciBpcworICAgYmVjYXVzZSBvZiBjaGFyYWN0 ZXItc2V0IHRyYW5zbGF0aW9uIGFzIHdlbGwgYXMgc2V2ZXJhbCBhY3Rpb25zIHRha2VuCisgICBi eSB0aGUgZW11bGF0b3IgaW4gcmVzcG9uc2UgdG8gdGhlIGNoYXJhY3RlcnMgb3Igc3RyaW5ncyB0 aGF0IHBhc3MKKyAgIHRocm91Z2ggaXQsIHN1Y2ggYXMgQVBDcywgS2VybWl0IHBhY2tldHMgKGF1 dG9kb3dubG9hZCksIHRyaWdnZXJzLCBldGMuCisKKyAgIFRoZSBVTklYIHZlcnNpb24gb2YgQy1L ZXJtaXQgNy4wIGFkZHMgYW5vdGhlciBzdWNoIGFjdGlvbjogVHJhbnNwYXJlbnQKKyAgIHByaW50 aW5nLCBhbHNvIGNhbGxlZCBDb250cm9sbGVyIHByaW50aW5nIChhcyBkaXN0aW5jdCBmcm9tIEF1 dG9wcmludAorICAgb3IgbGluZSBvciBzY3JlZW4gcHJpbnQpLiBJdCBpcyBpbnRlbmRlZCBtYWlu bHkgZm9yIHVzZSBvbiBVTklYCisgICB3b3Jrc3RhdGlvbiBjb25zb2xlcyAoYXMgb3Bwb3NlZCB0 byByZW1vdGUgbG9naW5zKSwgYnV0IHdpdGggc29tZSBjYXJlCisgICBjYW4gYWxzbyBiZSB1c2Vk IHdoZW4gYWNjZXNzaW5nIEMtS2VybWl0IHJlbW90ZWx5LgorCisgICBUcmFuc3BhcmVudCBwcmlu dGluZyBpcyByZWxhdGVkIHRvIEFQQyBieSBzaGFyaW5nIEMtS2VybWl0J3MgYnVpbHQtaW4KKyAg IEFOU0kgZXNjYXBlLXNlcXVlbmNlIHBhcnNlciB0byBkZXRlY3QgInByaW50ZXIgb24iIGFuZCAi cHJpbnRlciBvZmYiCisgICBzZXF1ZW5jZXMgZnJvbSB0aGUgaG9zdC4gV2hlbiB0aGUgcHJpbnRl ci1vbiBzZXF1ZW5jZSBpcyByZWNlaXZlZCwgYWxsCisgICBzdWJzZXF1ZW50IGFycml2aW5nIGNo YXJhY3RlcnMgLS0gaW5jbHVkaW5nIE5VTCwgY29udHJvbCBjaGFyYWN0ZXJzLAorICAgYW5kIGVz Y2FwZSBzZXF1ZW5jZXMgLS0gYXJlIHNlbnQgdG8gdGhlIFNFVCBQUklOVEVSIGRldmljZSBpbnN0 ZWFkIG9mCisgICB0byB5b3VyIHNjcmVlbiB1bnRpbCB0aGUgcHJpbnRlci1vZmYgc2VxdWVuY2Ug aXMgcmVjZWl2ZWQsIG9yIHlvdQorICAgZXNjYXBlIGJhY2ssIHdoaWNoZXZlciBoYXBwZW5zIGZp cnN0LiBUaGVzZSBieXRlcyBhcmUgbm90IHRyYW5zbGF0ZWQgb3IKKyAgIG1vZGlmaWVkIG9yIGZp bHRlcmVkIGluIGFueSB3YXkgYnkgS2VybWl0IChleGNlcHQgZm9yIHBvc3NpYmx5CisgICBzdHJp cHBpbmcgb2YgdGhlIDh0aCBiaXQsIGFzIG5vdGVkIGJlbG93KSwgYnV0IGlmIGZpbHRlcmluZyBv cgorICAgdHJhbnNsYXRpb24gaXMgZGVzaXJlZCwgdGhpcyBjYW4gYmUgYWNjb21wbGlzaGVkIGJ5 IHlvdXIgU0VUIFBSSU5URVIKKyAgIHNlbGVjdGlvbiAoZS5nLiBieSBjaG9vc2luZyBhIHBpcGVs aW5lIG9mIGZpbHRlcnMpLgorCisgICBCeSBkZWZhdWx0LCB5b3VyIFNFVCBQUklOVEVSIGRldmlj ZSBpcyB5b3VyIGRlZmF1bHQgVU5JWCBwcmludGVyLCBidXQKKyAgIGl0IGNhbiBhbHNvIGJlIGEg ZmlsZSwgYSBjb21tYW5kLCBvciB0aGUgbnVsbCBkZXZpY2UgKHdoaWNoIGNhdXNlcyBhbGwKKyAg IHByaW50ZXIgbWF0ZXJpYWwgdG8gYmUgZGlzY2FyZGVkKS4gU2VlIFs0MzddVXNpbmcgQy1LZXJt aXQsIDJuZCBFZC4sCisgICBwLjQxIGZvciBkZXRhaWxzLgorCisgICBUcmFuc3BhcmVudCBwcmlu dGluZyBpcyBjb250cm9sbGVkIGJ5IHRoZSBjb21tYW5kOgorCisgICBTRVQgVEVSTUlOQUwgUFJJ TlQgeyBPTiwgT0ZGIH0KKyAgICAgICAgICBXaGVuIE9OLCB0cmFuc3BhcmVudC1wcmludCBzZXF1 ZW5jZXMgYXJlIG9iZXllZCwgYW5kIHByaW50aW5nCisgICAgICAgICAgb2NjdXJzIG9uIHRoZSBz eXN0ZW0gd2hlcmUgQy1LZXJtaXQgaXMgcnVubmluZy4gV2hlbiBPRkYsCisgICAgICAgICAgdHJh bnNwYXJlbnQgcHJpbnQgc2VxdWVuY2VzIGFyZSBpZ25vcmVkIGFuZCBwYXNzZWQgdGhyb3VnaCB0 bworICAgICAgICAgIHlvdXIgYWN0dWFsIHRlcm1pbmFsIG9yIGVtdWxhdG9yLCBhbG9uZyB3aXRo IHRoZSBkYXRhIHRoZXkKKyAgICAgICAgICBlbmNsb3NlLiBPRkYgaXMgdGhlIGRlZmF1bHQsIGZv ciBjb21wYXRpYmlsaXR5IHdpdGggZWFybGllcgorICAgICAgICAgIEMtS2VybWl0IHJlbGVhc2Vz LiBBcyBub3RlZCBpbiB0aGUgbWFudWFsLCB3aGVuIHRoZSBjdXJyZW50IFNFVAorICAgICAgICAg IFBSSU5URVIgZGV2aWNlIGlzIGEgZmlsZSwgdHJhbnNwYXJlbnQtcHJpbnQgbWF0ZXJpYWwgaXMg YXBwZW5kZWQKKyAgICAgICAgICB0byBpdDsgdGhlIGZpbGUgaXMgbm90IG92ZXJ3cml0dGVuLgor CisgICBTRVQgVEVSTUlOQUwgQllURVNJWkUgeyA3LCA4IH0KKyAgIFNFVCBQQVJJVFkgeyBFVkVO LCBPREQsIE1BUkssIFNQQUNFLCBOT05FIH0KKyAgICAgICAgICBJZiB0aGUgdGVybWluYWwgYnl0 ZXNpemUgaXMgNywgb3IgUEFSSVRZIGlzIG5vdCBOT05FLCB0aGUgOHRoCisgICAgICAgICAgYml0 IG9mIGVhY2ggYnl0ZSBpcyBzdHJpcHBlZCBwcmlvciB0byBwcmludGluZy4KKworICAgVGhlIHRy YW5zcGFyZW50LXByaW50IGVzY2FwZSBzZXF1ZW5jZXMgYXJlOgorCisgICA8RVNDPls1aQorICAg ICAgICAgIFByaW50ZXIgT24uIFNlbmQgYWxsIHN1YnNlcXVlbnQgaW5jb21pbmcgYnl0ZXMgdG8g dGhlIHByaW50ZXIKKyAgICAgICAgICB3aXRob3V0IGFueSBraW5kIG9mIGZpbHRlcmluZywgdHJh bnNsYXRpb24sIG9yIGFsdGVyYXRpb24uIE5vdGU6CisgICAgICAgICAgPEVTQz4gc3RhbmRzIGZv ciBBU0NJSSBjaGFyYWN0ZXIgbnVtYmVyIDI3IChkZWNpbWFsKSwgRXNjYXBlLgorCisgICA8RVND Pls0aQorICAgICAgICAgIFByaW50ZXIgT2ZmLiBSZXN1bWUgZGlzcGxheWluZyBpbmNvbWluZyBi eXRlcyBvbiB0aGUgc2NyZWVuLgorCisgICBUaGVzZSBhcmUgdGhlIHNhbWUgc2VxdWVuY2VzIHVz ZWQgYnkgREVDIFZUMTAwIGFuZCBoaWdoZXIgdGVybWluYWxzIGFuZAorICAgb3RoZXIgQU5TSSBY My42NCBhbmQgSVNPIDY0MjkgY29tcGF0aWJsZSB0ZXJtaW5hbHMuIFRoZXJlIGlzIG5vCisgICBw cm92aXNpb24gZm9yIHNlbGVjdGluZyBvdGhlciBwcmludGVyLWNvbnRyb2wgc2VxdWVuY2VzLgor CisgICBSZXN0cmljdGlvbnM6CisKKyAgICAxLiBZb3UgbXVzdCBTRVQgVEVSTSBUUkFOU1BBUkVO VC1QUklOVCBPTiBiZWZvcmUgeW91IGNhbiB1c2UgdGhpcworICAgICAgIGZlYXR1cmUuCisgICAg Mi4gT25seSB0aGUgNy1iaXQgZm9ybXMgb2YgdGhlIGVzY2FwZSBzZXF1ZW5jZXMgYXJlIHN1cHBv cnRlZC4gVGhlCisgICAgICAgOC1iaXQgQ1NJIEMxIGNvbnRyb2wgaXMgbm90IHJlY29nbml6ZWQu CisgICAgMy4gQXV0b3ByaW50IGlzIG5vdCBzdXBwb3J0ZWQsIHNpbmNlIHRoaXMgcmVxdWlyZXMg YSBmdWxsLWZsZWRnZWQKKyAgICAgICB0ZXJtaW5hbCBlbXVsYXRvciB3aXRoIGRpcmVjdCBhY2Nl c3MgdG8gdGhlIHNjcmVlbi4KKyAgICA0LiBUaGUgc3RhcnQtcHJpbnQgYW5kIHN0b3AtcHJpbnQg c2VxdWVuY2VzIHBhc3MgdGhyb3VnaCB0byB0aGUgc2NyZWVuCisgICAgICAgKHRoZXJlIGlzIG5v IHdheSB0byBhdm9pZCB0aGlzIHdpdGhvdXQgY2F1c2luZyB1bmFjY2VwdGFibGUgZGVsYXlzCisg ICAgICAgb3IgZGVhZGxvY2tzIGluIENPTk5FQ1QgbW9kZSkuIFRodXMgaWYgeW91ciB0ZXJtaW5h bCBvciBlbXVsYXRvcgorICAgICAgIGFsc28gc3VwcG9ydHMgdHJhbnNwYXJlbnQgcHJpbnRpbmcg dmlhIHRoZXNlIHNhbWUgc2VxdWVuY2VzLCBhbgorICAgICAgIGVtcHR5IGZpbGUgd2lsbCBiZSBz ZW50IHRvIGl0cyBwcmludGVyLiBOb3JtYWxseSB0aGlzIGhhcyBubworICAgICAgIGVmZmVjdC4K KworICAgUG9pbnQgKDQpIGlzIHNpbWlsYXIgdG8gdGhlIHNpdHVhdGlvbiB3aXRoIGF1dG9kb3du bG9hZCBhbmQgQVBDIC0tIHdoZW4KKyAgIHlvdSBoYXZlIHNldmVyYWwgS2VybWl0IGNsaWVudHMg aW4gYSBjaGFpbiwgeW91IHNob3VsZCB0YWtlIGNhcmUgdGhhdAorICAgdGhlc2UgZmVhdHVyZXMg YXJlIGVuYWJsZWQgaW4gb25seSBvbmUgb2YgdGhlbS4KKworICAgRXhhbXBsZSAxOgorCisgIHNl dCBwcmludGVyIHt8bHByIC1QbGFzZXJ9ICA7IFNwZWNpZnkgdGhlIHByaW50ZXIgKGlmIG5vdCBk ZWZhdWx0KS4KKyAgc2V0IHRlcm0gcHJpbnQgb24gICAgICAgICAgIDsgRW5hYmxlIHRyYW5zcGFy ZW50IHByaW50aW5nLgorICBzZXQgdGVybSBieXRlIDggICAgICAgICAgICAgOyBFbmFibGUgOC1i aXQgY2hhcmFjdGVycy4KKyAgY29ubmVjdCAgICAgICAgICAgICAgICAgICAgIDsgRW50ZXIgQ09O TkVDVCBtb2RlLgorCisgICBFeGFtcGxlIDI6CisKKyAgc2V0IHByaW50ZXIgL2hvbWUvdXNlcnMv b2xnYS9wcmludGVyLmxvZyAgOyBTZW5kIHByaW50ZXIgbWF0ZXJpYWwgdG8gYSBmaWxlLgorCisg ICBFeGFtcGxlIDM6CisKKyAgc2V0IHByaW50ZXIge3wgZ3JlcCAtdiBeUmVjZWl2ZWQgfCBscHJ9 ICAgOyBGaWx0ZXIgb3V0IHNvbWUgbGluZXMKKworICAgVGhlbiB1c2UgInBjcHJpbnQiIG9yICJ2 dHByaW50IiBjb21tYW5kcyBvbiB0aGUgaG9zdCB0byBpbml0aWF0ZQorICAgdHJhbnNwYXJlbnQg cHJpbnQgb3BlcmF0aW9ucy4gU2VlIFs0MzhdVXNpbmcgQy1LZXJtaXQsIDJuZCBFZC4sIHAuNDA2 CisgICBmb3IgZGV0YWlscy4KKworICAgSGVyZSBpcyBhIHNhbXBsZSAicGNwcmludCIgc2hlbGwg c2NyaXB0IGZvciBVTklYOgorCisgICMhL2Jpbi9zaAorICBlY2hvIC1uICc8RVNDPls1aScKKyAg aWYgWyAkIyAtZXEgMCBdOyB0aGVuCisgICAgY2F0CisgIGVsc2UKKyAgICBjYXQgJCoKKyAgZmkK KyAgZWNobyAtbiAnPEZGPjxFU0M+WzRpJworICAjIChlbmQpCisKKyAgIChSZXBsYWNlICI8RVND PiIgYnkgdGhlIGFjdHVhbCBBU0NJSSBFc2NhcGUgY2hhcmFjdGVyIGFuZCAiPEZGPiIgYnkgdGhl CisgICBBU0NJSSBGb3JtZmVlZCBjaGFyYWN0ZXIpLgorCisgICBJZiB5b3UgYWx3YXlzIHdhbnQg dHJhbnNwYXJlbnQgcHJpbnRpbmcgZW5hYmxlZCwgcHV0ICJzZXQgdGVybSBwcmludAorICAgb24i IGluIHlvdXIgQy1LZXJtaXQgY3VzdG9taXphdGlvbiBmaWxlICh+Ly5teWtlcm1yYyBpbiBVTklY KS4gVGhlICJzZXQKKyAgIHRlcm0gYnl0ZXNpemUiIHNlbGVjdGlvbiwgaG93ZXZlciwgaXMgYSBw cm9wZXJ0eSBvZiBlYWNoIHNlcGFyYXRlCisgICBjb25uZWN0aW9uLgorCiszLjQuIEJpbmFyeSBh bmQgVGV4dCBTZXNzaW9uIExvZ3MKKworICAgQy1LZXJtaXQgNy4wIGNvcnJlY3RzIGFuIG92ZXJz aWdodCBpbiBlYXJsaWVyIHJlbGVhc2VzLCBpbiB3aGljaCBiaW5hcnkKKyAgIHNlc3Npb24gbG9n cyAoU0VUIFNFU1NJT04tTE9HIEJJTkFSWSkgdHJhbnNsYXRlZCBjaGFyYWN0ZXIgc2V0cyBhbmQK KyAgIHBlcmZvcm1lZCB2YXJpb3VzIGZvcm1hdHRpbmcgdHJhbnNmb3JtYXRpb25zIChlLmcuICJu ZXdsaW5lIG1vZGUiKQorICAgYmVmb3JlIHdyaXRpbmcgY2hhcmFjdGVycyB0byB0aGUgc2Vzc2lv biBsb2cuIEluIEMtS2VybWl0IDcuMCwKKyAgIGJpbmFyeS1tb2RlIHNlc3Npb24gbG9nZ2luZyB3 cml0ZXMgY2hhcmFjdGVycyBhcyB0aGV5IGNvbWUgaW4sIGJlZm9yZQorICAgYW55dGhpbmcgKG90 aGVyIHRoYXQgcGFyaXR5LWJpdCBzdHJpcHBpbmcpIGlzIGRvbmUgdG8gdGhlbS4gVGV4dC1tb2Rl CisgICBzZXNzaW9uIGxvZ2dpbmcgcmVjb3JkcyB0aGUgY2hhcmFjdGVycyBhZnRlciBwcm9jZXNz aW5nLgorCis0LiBGSUxFIFRSQU5TRkVSCisKKyAgIEV2ZXJ5IGZpbGUgaXMgdHJhbnNmZXJyZWQg ZWl0aGVyIGluIHRleHQgbW9kZSAod2hpY2ggaW1wbGllcworICAgcmVjb3JkLWZvcm1hdCBhbmQg Y2hhcmFjdGVyLXNldCB0cmFuc2xhdGlvbikgb3IgYmluYXJ5IG1vZGUgKGluIHdoaWNoCisgICBl YWNoIGJ5dGUgaXMgc2VudCBsaXRlcmFsbHkgd2l0aG91dCBhbnkga2luZCBvZiBjb252ZXJzaW9u KS4gVGhlIG1vZGUKKyAgIGluIHdoaWNoIGEgZmlsZSBpcyB0cmFuc2ZlcnJlZCBpcyBjb250cm9s bGVkIGJ5IChhKSB0aGUgZGVmYXVsdCBtb2RlLAorICAgaW4gdGhlIGFic2VuY2Ugb2YgYW55IG90 aGVyIGluZGljYXRpb25zOyAoYikgdGhlIFNFVCBGSUxFIFRZUEUgY29tbWFuZDsKKyAgIChjKSB2 YXJpb3VzIGF1dG9tYXRpYyBtZWNoYW5pc21zIGJhc2VkIG9uIGNsaWVudC9zZXJ2ZXIgbmVnb3Rp YXRpb25zLAorICAgZGlyZWN0b3J5IGluZm9ybWF0aW9uIG9yIGZpbGVuYW1lIHBhdHRlcm5zLCBl dGMuCisKKyAgIFRoZSBkZWZhdWx0IEZJTEUgVFlQRSB3YXMgY2hhbmdlZCBmcm9tIFRFWFQgdG8g QklOQVJZIGluIEMtS2VybWl0IDcuMAorICAgYmVjYXVzZToKKworICAgICAqIFRyYW5zZmVycmlu ZyBhIHRleHQgZmlsZSBpbiBiaW5hcnkgbW9kZSBkb2VzIGxlc3MgZGFtYWdlIHRoYW4KKyAgICAg ICB0cmFuc2ZlcnJpbmcgYSBiaW5hcnkgZmlsZSBpbiB0ZXh0IG1vZGUuCisgICAgICogT25seSBi aW5hcnktbW9kZSB0cmFuc2ZlcnMgY2FuIGJlIHJlY292ZXJlZCBmcm9tIHRoZSBwb2ludCBvZgor ICAgICAgIGZhaWx1cmUuCisgICAgICogVGhlIGF1dG9tYXRpYyB0cmFuc2Zlci1tb2RlIG1lY2hh bmlzbXMgc3dpdGNoIHRvIHRleHQgbW9kZSBvbiBhCisgICAgICAgcGVyLWZpbGUgYmFzaXMgYW55 d2F5LCBzbyBvbmx5IHRob3NlIGZpbGVzIHRoYXQgYXJlIG5vdCBjb3ZlcmVkIGJ5CisgICAgICAg dGhlIGF1dG9tYXRpYyBtZWNoYW5pc21zIGFyZSBhZmZlY3RlZC4KKyAgICAgKiBBbGwgZmlsZSB0 cmFuc2ZlcnMgb24gdGhlIFdlYiBhcmUgZG9uZSBpbiBiaW5hcnkgbW9kZSwgc28gcGVvcGxlCisg ICAgICAgYXJlIGFjY3VzdG9tZWQgdG8gaXQgYW5kIGV4cGVjdCBpdC4KKworNC4wLiBCVUcgRklY RVMsIE1JTk9SIENIQU5HRVMsIEFORCBDTEFSSUZJQ0FUSU9OUworCis0LjAuMC4gRmlsZW5hbWVz IHdpdGggU3BhY2VzCisKKyAgIEZpbGVuYW1lcyB0aGF0IGNvbnRhaW4gc3BhY2VzIGFyZSBhIG1h am9yIG51aXNhbmNlIHRvIGEgcHJvZ3JhbSBsaWtlCisgICBLZXJtaXQsIHdob3NlIGNvbW1hbmQg bGFuZ3VhZ2UgaXMgbGluZS0gYW5kIHdvcmQtb3JpZW50ZWQsIGluIHdoaWNoCisgICB3b3JkcyBh cmUgc2VwYXJhdGVkIGJ5IHNwYWNlcyBhbmQgYSBmaWxlbmFtZSBpcyBhc3N1bWVkIHRvIGJlIGEg IndvcmQiLgorICAgSW4gZ2VuZXJhbCAodW5sZXNzIG5vdGVkIG90aGVyd2lzZSBpbiB0aGUgZGVz Y3JpcHRpb24gb2YgYSBwYXJ0aWN1bGFyCisgICBjb21tYW5kKSwgdGhlcmUgaXMgb25seSBvbmUg d2F5IHRvIHJlZmVyIHRvIHN1Y2ggZmlsZXMgaW4gS2VybWl0CisgICBjb21tYW5kcywgYW5kIHRo YXQgaXMgdG8gZW5jbG9zZSB0aGUgbmFtZSBpbiBicmFjZXM6CisKKyAgc2VuZCB7dGhpcyBmaWxl fQorCisgICBUZWxscyBLZXJtaXQgdG8gc2VuZCB0aGUgZmlsZSB3aG9zZSBuYW1lIGlzICJ0aGlz IGZpbGUiICh0d28gd29yZHMsIG5vCisgICBxdW90ZXMpLiBPZiBjb3Vyc2UsIHZhcmlvdXMgY2ly Y3VtbG9jdXRpb25zIGFyZSBhbHNvIHBvc3NpYmxlLCBzdWNoIGFzOgorCisgIGRlZmluZSBcJWEg dGhpcyBmaWxlCisgIHNlbmQgXCVhCisKKyAgIEJVVCwgcGVyaGFwcyBjb250cmFyeSB0byBleHBl Y3RhdGlvbiwgeW91IGNhbid0IHVzZSAiXDMyIiB0byByZXByZXNlbnQKKyAgIHRoZSBzcGFjZToK KworICBzZW5kIHRoaXNcMzJmaWxlCisKKyAgIGRvZXMgbm90IHdvcmsuIFdoeT8gQmVjYXVzZSB0 aGUgS2VybWl0IHBhcnNlciwgd2hpY2ggbXVzdCB3b3JrIG9uIG1hbnkKKyAgIG9wZXJhdGluZyBz eXN0ZW1zIGluY2x1ZGluZyBXaW5kb3dzLCBoYXMgbm8gd2F5IG9mIGtub3dpbmcgd2hhdCB5b3UK KyAgIG1lYW4gYnkgInRoaXNcMzJmaWxlIi4gRG8geW91IG1lYW4gYSBmaWxlIHdob3NlIG5hbWUg aXMgInRoaXMgZmlsZSIgaW4KKyAgIHRoZSBjdXJyZW50IGRpcmVjdG9yeT8gT3IgZG8geW91IG1l YW4gYSBmaWxlIHdob3NlIG5hbWUgaXMgIjMyZmlsZSIgaW4KKyAgIHRoZSAidGhpcyIgc3ViZGly ZWN0b3J5IG9mIHRoZSBjdXJyZW50IGRpcmVjdG9yeT8gR3Vlc3Npbmcgd29uJ3QgZG8KKyAgIGhl cmU7IEtlcm1pdCBtdXN0IGJlaGF2ZSBjb25zaXN0ZW50bHkgYW5kIGRldGVybWluaXN0aWNhbGx5 IGluIGFsbAorICAgY2FzZXMgb24gYWxsIHBsYXRmb3Jtcy4KKworICAgTm90ZSB0aGF0IHlvdSBj YW4ndCB1c2UgRXNjIG9yIFRhYiB3aXRoaW4gey4uLn0gZm9yIGZpbGVuYW1lCisgICBjb21wbGV0 aW9uLCBvciBxdWVzdGlvbiBtYXJrIHRvIGdldCBhIGZpbGVuYW1lIGxpc3QuIEhvd2V2ZXIsIHlv dSBjYW4KKyAgIGluY2x1ZGUgd2lsZGNhcmRzOyBmb3IgZXhhbXBsZToKKworICBzZW5kIHsqICp9 CisKKyAgIHNlbmRzIGFsbCBmaWxlcyB3aG9zZSBuYW1lIGNvbnRhaW5zIGEgc3BhY2UuCisKKyAg IEFsbCB0aGluZ3MgY29uc2lkZXJlZCwgaXQgaXMgYmVzdCB0byBhdm9pZCBzcGFjZXMgaW4gZmls ZSBhbmQgZGlyZWN0b3J5CisgICBuYW1lcyBpZiB5b3UgY2FuLiBBbHNvIHNlZSBbNDM5XVNlY3Rp b24gNS40IG9uIHRoaXMgdG9waWMuCisKKzQuMC4xLiBQYWNrZXQgb3V0IG9mIFdpbmRvdworCisg ICBDLUtlcm1pdCA2LjAgY291bGQgc2VuZCBwYWNrZXRzICJvdXQgb2Ygd2luZG93IiBpZiB0aGUg d2luZG93IHNpemUgd2FzCisgICBncmVhdGVyIHRoYW4gMSBhbmQgQUNLcyBoYWQgYXJyaXZlZCBv dXQgb2Ygb3JkZXIuIEZpeGVkIGluIDYuMS4KKworNC4wLjIuIE1PVkUgYWZ0ZXIgQUREIFNFTkQt TElTVAorCisgICBBREQgU0VORC1MSVNUIGZvbGxvd2VkIGJ5IE1PVkUgZGlkIG5vdCBkZWxldGUg b3JpZ2luYWwgZmlsZXM7IGZpeGVkIGluCisgICA2LjEuIENhcnJpZXIgbG9zcyB3YXMgbm90IGRl dGVjdGVkIGR1cmluZyB0cmFuc2ZlcjsgaW4gNy4wIEMtS2VybWl0CisgICBjaGVja3MgZm9yIHRo aXMgKGJ1dCByZXN1bHRzIGNhbiBub3QgYmUgZ3VhcmFudGVlZCkuIEluIGFueSBjYXNlLCB0aGUK KyAgIHByb3RvY29sIHdpbGwgZXZlbnR1YWxseSB0aW1lIG91dCBpZiB0aGUgY29ubmVjdGlvbiBp cyBsb3N0LgorCis0LjAuMy4gR0VUIGFuZCBSRUNFSVZFIEFzLU5hbWVzCisKKyAgIEluIDVBKDE5 MCkgdGhyb3VnaCA2LjAuMTkyLCB0aGUgR0VUIGFuZCBSRUNFSVZFIGFzLW5hbWUgZGlkIG5vdAor ICAgcHJvcGVybHkgb3ZlcnJpZGUgdGhlIFJFQ0VJVkUgUEFUSE5BTUVTIHNldHRpbmcuIEluIDcu MCBpdCBkb2VzLgorCis0LjAuNC4gTmV3IEJyaWVmIFN0YXRpc3RpY3MgTGlzdGluZworCisgICBW ZXJzaW9uIDcuMCBhZGRzIGEgL0JSSUVGIHN3aXRjaCB0byB0aGUgU1RBVElTVElDUyBjb21tYW5k LCB0byBkaXNwbGF5CisgICBhIHNob3J0IGZpbGUtdHJhbnNmZXIgc3RhdGlzdGljcyByZXBvcnQu IC9CUklFRiBpcyBub3cgdGhlIGRlZmF1bHQuIFVzZQorICAgL1ZFUkJPU0UgdG8gc2VlIHRoZSBm dWxsIGRpc3BsYXksIHdoaWNoIGlzIGFib3V0IDI1IGxpbmVzIGxvbmcuCisKKzQuMC41LiBJbXBy b3ZlZCBGQVNUIENvbW1hbmQKKworICAgVGhlIHByZWluc3RhbGxlZCBkZWZpbml0aW9uIG9mIHRo ZSBGQVNUIG1hY3JvIGRpZCBub3QgdGFrZSBlbm91Z2gKKyAgIGZhY3RvcnMgaW50byBhY2NvdW50 LiBOb3cgaXQgc2V0cyBwYWNrZXQgbGVuZ3RocyBhbmQgd2luZG93IHNpemVzCisgICBhcHByb3By aWF0ZSB0byB0aGUgY29uZmlndXJhdGlvbi4gRnVydGhlcm1vcmUsIGluIElSSVggb25seSwgaXQg bWlnaHQKKyAgIHJlc3RyaWN0IHRoZSBTRU5EIHBhY2tldCBsZW5ndGggdG8gNDAwMCwgdG8gd29y ayBhcm91bmQgYSBidWcgaW4gdGhlCisgICBJUklYIFRlbG5ldCBzZXJ2ZXIsIGRlcGVuZGluZyBv biB0aGUgSVJJWCB2ZXJzaW9uIChzZWUgWzQ0MF1ja3Vid3IudHh0LAorICAgSVJJWCBzZWN0aW9u KS4gVG8gc2VlIHRoZSBidWlsdC1pbiBkZWZpbml0aW9uIG9mIHRoZSBGQVNUIG1hY3JvLCB0eXBl CisgICAic2hvdyBtYWNybyBmYXN0Ii4gVG8gY2hhbmdlIGl0LCBzaW1wbHkgZGVmaW5lIGl0IHRv IGJlIHdoYXRldmVyIHlvdQorICAgd2FudCAtLSBpdCdzIGp1c3QgYSBtYWNybywgbGlrZSBhbnkg b3RoZXIuCisKKzQuMC42LiBUaGUgU0VUIFNFTkQgQkFDS1VQIENvbW1hbmQKKworICAgVmVyc2lv biA3LjAgYWRkcyBTRVQgU0VORCBCQUNLVVAgeyBPTiwgT0ZGIH0uIFRoaXMgdGVsbHMgd2hldGhl ciBiYWNrdXAKKyAgIGZpbGVzIHNob3VsZCBiZSBzZW50LiBCYWNrdXAgZmlsZXMgYXJlIHRoZSBv bmVzIGNyZWF0ZWQgYnkgS2VybWl0IChhbmQKKyAgIEVNQUNTLCBhbmQgcG9zc2libHkgb3RoZXIg YXBwbGljYXRpb25zKSB0byBwcmVzZXJ2ZSBvbGQgY29waWVzIG9mIGZpbGVzCisgICB3aGVuIGNy ZWF0aW5nIG5ldyBvbmVzIHdpdGggdGhlIHNhbWUgbmFtZS4gS2VybWl0IGRvZXMgdGhpcyB3aGVu CisgICByZWNlaXZpbmcgYSBmaWxlIGFuZCBpdHMgRklMRSBDT0xMSVNJT04gc2V0dGluZyBpcyBC QUNLVVAgKG9yIFJFTkFNRSwKKyAgIGluIHdoaWNoIGNhc2UgaXQgdGhlIG5ldyBmaWxlIGdldHMg dGhlIGJhY2t1cCBuYW1lKS4gT24gbW9zdCBwbGF0Zm9ybXMsCisgICB0aGUgYmFja3VwIG5hbWUg aXMgZm9ybWVkIGJ5IGFkZGluZzoKKworICAufm5+CisKKyAgIHRvIHRoZSBlbmQgb2YgdGhlIGZp bGVuYW1lLCB3aGVyZSAibiIgaXMgYSBudW1iZXIuIEZvciBleGFtcGxlLCBpZiB0aGUKKyAgIG9y aWdpbmFsIGZpbGUgaXMgb29mYS50eHQsIGEgYmFja3VwIGZpbGUgbWlnaHQgYmUgY2FsbGVkOgor CisgIG9vZmEudHh0Ln4xfgorCisgICAob3Igb29mYS50eHQufjJ+LCBldGMpLiBJZiB5b3UgU0VU IFNFTkQgQkFDS1VQIE9GRiwgdGhpcyB0ZWxscyBLZXJtaXQKKyAgIG5vdCB0byBzZW5kIGZpbGVz IHRoYXQgaGF2ZSBiYWNrdXAgbmFtZXMuIE5vcm1hbGx5LCBTRVQgU0VORCBCQUNLVVAgaXMKKyAg IE9OIChhcyBzaG93biBieSBTSE9XIFBST1RPQ09MKSwgYW5kIGJhY2t1cCBmaWxlcyBhcmUgc2Vu dCBpZiB0aGVpcgorICAgbmFtZXMgbWF0Y2ggdGhlIFNFTkQgZmlsZSBzcGVjaWZpY2F0aW9uLgor CisgICBBbHNvIHNlZSBQVVJHRSwgU0VUIEZJTEUgQ09MTElTSU9OLCBTRU5EIC9OT0JBQ0tVUCwg RElSRUNUT1JZCisgICAvW05PXUJBQ0tVUC4KKworNC4wLjcuIFRoZSBTRVQgeyBTRU5ELCBSRUNF SVZFIH0gVkVSU0lPTi1OVU1CRVJTIENvbW1hbmQKKworICAgVk1TIE9ubHkuIE5vcm1hbGx5IHdo ZW4gc2VuZGluZyBmaWxlcywgVk1TIEMtS2VybWl0IHN0cmlwcyB0aGUgdmVyc2lvbgorICAgbnVt YmVyLiBGb3IgZXhhbXBsZSwgaWYgdGhlIGZpbGUgaXMgRk9PLkJBUjszNCwgdGhlIG5hbWUgaXMg c2VudCBhcworICAgRk9PLkJBUiAod2l0aG91dCB0aGUgIjszNCIpLiBJZiB5b3Ugd2FudCB0byBr ZWVwIHZlcnNpb24gbnVtYmVycyBvbgorICAgd2hlbiBzZW5kaW5nIGZpbGVzLCB1c2UgU0VUIFNF TkQgVkVSU0lPTi1OVU1CRVJTIE9OLiBUaGUgZWZmZWN0IGRlcGVuZHMKKyAgIG9uIHRoZSByZWNl aXZlci4KKworICAgTm9ybWFsbHkgd2hlbiByZWNlaXZpbmcgZmlsZXMsIGFuZCBhbiBpbmNvbWlu ZyBmaWxlbmFtZSBpbmNsdWRlcyBhCisgICBWTVMtc3R5bGUgdmVyc2lvbiBudW1iZXIgKHN1Y2gg YXMgRk9PLkJBUjszNCkgVk1TIEMtS2VybWl0IHN0cmlwcyBpdAorICAgYmVmb3JlIHRyeWluZyB0 byBjcmVhdGUgdGhlIG5ldyBmaWxlOyB0aGlzIHdheSB0aGUgbmV3IGZpbGUgcmVjZWl2ZXMKKyAg IHRoZSBuZXh0IGhpZ2hlc3QgdmVyc2lvbiBudW1iZXIgaW4gdGhlIGN1c3RvbWFyeSBtYW5uZXIg Zm9yIFZNUy4gSWYgeW91CisgICB3YW50IHZlcnNpb24gbnVtYmVycyBvbiBpbmNvbWluZyBmaWxl bmFtZXMgdG8gYmUgdXNlZCBpbiBjcmVhdGluZyB0aGUKKyAgIG5ldyBmaWxlcywgdXNlIFNFVCBS RUNFSVZFIFZFUlNJT04tTlVNQkVSUyBPTi4KKworICAgTm9ybWFsbHkgdGhlc2UgY29tbWFuZHMg d291bGQgYmUgZWZmZWN0aXZlIG9ubHkgd2hlbiBWTVMgQy1LZXJtaXQgaXMKKyAgIGV4Y2hhbmdp bmcgZmlsZXMgd2l0aCBhIG5vbi1WTVMgS2VybWl0IHByb2dyYW0sIHNpbmNlIFZNUy10by1WTVMK KyAgIHRyYW5zZmVycyB1c2UgbGFiZWxlZCBtb2RlIHVubGVzcyB5b3UgaGF2ZSBnb25lIG91dCBv ZiB5b3VyIHdheSB0bworICAgZGVmZWF0IGl0LgorCisgICBFeGFtcGxlOiBZb3Ugd2FudCB0byBz ZW5kIGFsbCB2ZXJzaW9ucyBvZiBhbGwgZmlsZXMgaW4gdGhlIGN1cnJlbnQKKyAgIGRpcmVjdG9y eSBmcm9tIGEgVk1TIEMtS2VybWl0IGNsaWVudCB0byBhIFVOSVggQy1LZXJtaXQgc2VydmVyLiBV c2U6CisKKyAgc2V0IHNlbmQgdmVyc2lvbi1udW1iZXJzIG9uCisgIHNlbmQgKi4qOyoKKworICAg VGhlIHJlc3VsdGluZyBVbml4IGZpbGVzIHdpbGwgaGF2ZSBWTVMtc3R5bGUgdmVyc2lvbiBudW1i ZXJzIGFzIHBhcnQgb2YKKyAgIHRoZWlyIG5hbWUsIGZvciBleGFtcGxlICJmb28uYmFyOzEiLCAi Zm9vLmJhcjsyIiwgZXRjLgorCisgICBOb3cgc3VwcG9zZSB5b3Ugd2FudCB0byBzZW5kIHRoZXNl IGZpbGVzIGZyb20gVW5peCB0byBhbm90aGVyIFZNUworICAgc3lzdGVtIGFuZCBwcmVzZXJ2ZSB0 aGUgdmVyc2lvbiBudW1iZXJzLiBBZ2FpbiB3ZSBoYXZlIGEgVW5peCBDLUtlcm1pdAorICAgc2Vy dmVyIGFuZCBWTVMgQy1LZXJtaXQgY2xpZW50LiBHaXZlIHRoZXNlIGNvbW1hbmRzIHRvIHRoZSBj bGllbnQ6CisKKyAgc2V0IHJlY2VpdmUgdmVyc2lvbi1udW1iZXJzIG9uCisgIGdldCAqCisKKzQu MC44LiBUaGUgU0VUIHsgU0VORCwgUkVDRUlWRSB9IHsgTU9WRS1UTywgUkVOQU1FLVRPIH0gQ29t bWFuZHMKKworICAgVGhlc2UgY29tbWFuZHMgYXJlIHBlcnNpc3RlbnQgZ2xvYmFsIHZlcnNpb25z IG9mIHRoZSAvTU9WRS1UTzogYW5kCisgICAvUkVOQU1FLVRPOiBzd2l0Y2hlcyBvZiB0aGUgU0VO RCwgR0VULCBhbmQgUkVDRUlWRSBjb21tYW5kcy4gVGhleQorICAgc2hvdWxkIG5vcm1hbGx5IGJl IHVzZWQgb25seSB3aGVuIHNldHRpbmcgdXAgYSBkZWRpY2F0ZWQKKyAgIHRyYW5zYWN0aW9uLXBy b2Nlc3NpbmcgYXBwbGljYXRpb24sIGluIHdoaWNoIGVhY2ggZmlsZSBpcyB0byBiZSBtb3ZlZAor ICAgb3IgcmVuYW1lZCBpbW1lZGlhdGVseSBhZnRlciwgYW5kIG9ubHkgaWYsIGl0IGlzIHRyYW5z ZmVycmVkCisgICBzdWNjZXNzZnVsbHksIHNvIHRoYXQgKGZvciBleGFtcGxlKSBhbiBpbmRlcGVu ZGVudCwgY29uY3VycmVudCBwcm9jZXNzCisgICBjYW4gbm90aWNlIHdoZW4gbmV3IGZpbGVzIGFw cGVhciBhbmQgcHJvY2VzcyB0aGVtIGltbWVkaWF0ZWx5IHdpdGhvdXQKKyAgIGhhdmluZyB0byBn dWVzcyB3aGV0aGVyIHRoZXkgYXJlIGNvbXBsZXRlLgorCis0LjAuOS4gU0VUIEZJTEUgSU5DT01Q TEVURSBBVVRPCisKKyAgIFNFVCBGSUxFIElOQ09NUExFVEUgeyBLRUVQLCBESVNDQVJEIH0sIHdo aWNoIHRlbGxzIHdoZXRoZXIgdG8ga2VlcCBvcgorICAgZGlzY2FyZCBpbmNvbXBsZXRlbHkgcmVj ZWl2ZWQgZmlsZXMsIGhhcyBhIG5ldyBvcHRpb24sIEFVVE8sIHdoaWNoIGlzCisgICBhbHNvIHRo ZSBkZWZhdWx0LiBJdCBtZWFucyBLRUVQIHRoZSBpbmNvbXBsZXRlIGZpbGUgaWYgdGhlIHRyYW5z ZmVyIGlzCisgICBpbiBiaW5hcnkgbW9kZSwgb3RoZXJ3aXNlIERJU0NBUkQgaXQuIFRoaXMgcmVk dWNlcyB0aGUgY2hhbmNlcyB0aGF0IGEKKyAgIHN1YnNlcXVlbnQgcmVjb3Zlcnkgb3BlcmF0aW9u IChSRVNFTkQsIFJFR0VULCBldGMpIGNvdWxkIHByb2R1Y2UgYQorICAgY29ycnVwdCBmaWxlLCBz aW5jZSByZWNvdmVyeSB3b3JrcyBvbmx5IGZvciBiaW5hcnktbW9kZSB0cmFuc2ZlcnMuCisKKzQu MS4gRklMRS1UUkFOU0ZFUiBGSUxFTkFNRSBURU1QTEFURVMKKworICAgRmlsZS10cmFuc2ZlciBm aWxlbmFtZSB0ZW1wbGF0ZXMgYWxsb3cgZmlsZXMgdG8gYmUgcmVuYW1lZAorICAgYXV0b21hdGlj YWxseSBieSB0aGUgZmlsZSBzZW5kZXIsIHRoZSByZWNlaXZlciwgb3IgYm90aCwgZHVyaW5nCisg ICB0cmFuc2ZlciBvZiBncm91cHMgb2YgZmlsZXMuCisKKzQuMS4xLiBUZW1wbGF0ZXMgaW4gdGhl IEFzLU5hbWUKKworICAgUHJpb3IgdG8gQy1LZXJtaXQgNi4xIGFuZCBLZXJtaXQgOTUgMS4xLjEy IHRoZSBvbmx5IG9wdGlvbnMgdGhhdCBjb3VsZAorICAgYmUgdXNlZCB0byBhZmZlY3QgdGhlIG5h bWVzIG9mIGZpbGVzIGJlaW5nIHRyYW5zZmVycmVkIHdlcmUgU0VUCisgICBGSUxFTkFNRVMgeyBM SVRFUkFMLCBDT05WRVJURUQgfSBhbmQgU0VUIHsgU0VORCwgUkVDRUlWRSB9IFBBVEhOQU1FUyB7 CisgICBPTiwgT0ZGIH0sIHBsdXMgdGhlICJhcy1uYW1lIiBmZWF0dXJlIG9mIHRoZSBTRU5EIChN T1ZFLCBldGMpIGFuZAorICAgUkVDRUlWRSBjb21tYW5kcy4KKworICAgUHJldmlvdXNseSwgdGhl IGFzLW5hbWUgY291bGQgYmUgdXNlZCBvbmx5IGZvciBhIHNpbmdsZSBmaWxlLiBGb3IKKyAgIGV4 YW1wbGU6CisKKyAgU0VORCBGT08gQkFSCisKKyAgIHdvdWxkIHNlbmQgdGhlIGZpbGUgRk9PIHVu ZGVyIHRoZSBuYW1lIEJBUiwgYnV0OgorCisgIFNFTkQgKi5UWFQgYW55dGhpbmcKKworICAgd2Fz IG5vdCBhbGxvd2VkLCBzaW5jZSBpdCB3b3VsZCBnaXZlIHRoZSBzYW1lIG5hbWUgdG8gZWFjaCBm aWxlIHRoYXQKKyAgIHdhcyBzZW50LiBXaGVuIHJlY2VpdmluZzoKKworICBSRUNFSVZFIEZPTwor CisgICB3b3VsZCByZW5hbWUgdGhlIGZpcnN0IGluY29taW5nIGZpbGUgdG8gRk9PIGJlZm9yZSBz dG9yaW5nIGl0IG9uIHRoZQorICAgZGlzaywgYnV0IHN1YnNlcXVlbnQgZmlsZXMgd291bGQgbm90 IGJlIHJlbmFtZWQgdG8gRk9PLCBzaW5jZSB0aGlzCisgICB3b3VsZCByZXN1bHQgaW4gb3Zlcndy aXRpbmcgdGhlIHNhbWUgZmlsZSByZXBlYXRlZGx5LiBJbnN0ZWFkLCB0aGV5CisgICB3ZXJlIHN0 b3JlZCB1bmRlciB0aGUgbmFtZXMgdGhleSBhcnJpdmVkIHdpdGguCisKKyAgIEJlZ2lubmluZyBp biBDLUtlcm1pdCA2LjEgYW5kIEtlcm1pdCA5NSAxLjEuMTIsIGl0IGlzIHBvc3NpYmxlIHRvCisg ICBzcGVjaWZ5IGFzLW5hbWVzIGluIFNFTkQsIFJFQ0VJVkUsIGFuZCByZWxhdGVkIGNvbW1hbmRz IGV2ZW4gZm9yIGZpbGUKKyAgIGdyb3Vwcy4gVGhpcyBpcyBhY2NvbXBsaXNoZWQgYnkgdXNpbmcg cmVwbGFjZW1lbnQgdmFyaWFibGVzIGluIHRoZQorICAgYXMtbmFtZSwgYWxvbmcgd2l0aCBvcHRp b25hbCBtYXRlcmlhbCBzdWNoIGNoYXJhY3Rlci1zdHJpbmcgZnVuY3Rpb25zCisgICBhbmQvb3Ig Y29uc3RhbnQgc3RyaW5ncy4gQW4gYXMtbmFtZSBjb250YWluaW5nIHJlcGxhY2VtZW50IHZhcmlh YmxlcyBpcworICAgY2FsbGVkIGEgZmlsZW5hbWUgdGVtcGxhdGUuCisKKyAgIFRoZSBrZXkgdG8g ZmlsZW5hbWUgdGVtcGxhdGVzIGlzIHRoZSBuZXcgdmFyaWFibGU6CisKKyAgXHYoZmlsZW5hbWUp CisKKyAgIER1cmluZyBmaWxlIHRyYW5zZmVyIGl0IGlzIHJlcGxhY2VkIGJ5IHRoZSBuYW1lIG9m IGVhY2ggZmlsZSBjdXJyZW50bHkKKyAgIGJlaW5nIHRyYW5zZmVycmVkIChhZnRlciB0cmFuc2Zl ciwgaXQgaXMgdGhlIG5hbWUgb2YgdGhlIGxhc3QgZmlsZQorICAgdHJhbnNmZXJyZWQpLgorCisg ICBTbywgZm9yIGV4YW1wbGU6CisKKyAgc2VuZCAqLnR4dCBcdihmaWxlbmFtZSkubmV3CisKKyAg IHNlbmRzIGVhY2ggZmlsZSB3aXRoIGl0cyBvd24gbmFtZSwgYnV0IHdpdGggIi5uZXciIGFwcGVu ZGVkIHRvIGl0LiBPZgorICAgY291cnNlIGlmIHRoZSBuYW1lIGFscmVhZHkgY29udGFpbnMgcGVy aW9kcywgdGhpcyBjb3VsZCBjb25mdXNlIHRoZQorICAgZmlsZSByZWNlaXZlciwgc28geW91IGNh biBhbHNvIGFjaGlldmUgZmFuY2llciBlZmZlY3RzIHdpdGgKKyAgIGNvbnN0cnVjdGlvbnMgbGlr ZToKKworICBzZW5kICoudHh0IFxmcmVwbGFjZShcdihmaWxlbmFtZSksLixfKS5uZXcKKworICAg d2hpY2ggcmVwbGFjZXMgYWxsIHBlcmlvZHMgaW4gdGhlIG9yaWdpbmFsIGZpbGVuYW1lIGJ5IHVu ZGVyc2NvcmVzLCBhbmQKKyAgIHRoZW4gYXBwZW5kcyAiLm5ldyIgdG8gdGhlIHJlc3VsdC4gU28s IGZvciBleGFtcGxlLCBvb2ZhLnR4dCB3b3VsZCBiZQorICAgc2VudCBhcyBvb2ZhX3R4dC5uZXcu CisKKyAgIEFub3RoZXIgbmV3IHZhcmlhYmxlIHRoYXQgaXMgdXNlZnVsIGluIHRoaXMgcmVnYXJk IGlzIFx2KGZpbGVudW1iZXIpLAorICAgd2hpY2ggaXMgdGhlIG9yZGluYWwgbnVtYmVyIG9mIHRo ZSBjdXJyZW50IGZpbGUgaW4gdGhlIGZpbGUgZ3JvdXAsIHNvCisgICB5b3UgY2FuIGFsc286CisK KyAgc2VuZCAqLnR4dCBGSUxFXGZscGFkKFx2KGZpbGVudW0pLDIsMCkKKworICAgcmVzdWx0aW5n IGluIGEgc2VyaWVzIG9mIGZpbGVzIGNhbGxlZCBGSUxFMDAsIEZJTEUwMSwgRklMRTAyLCBldGMu IChBdAorICAgdGhlIGVuZCBvZiB0aGUgdHJhbnNmZXIsIFx2KGZpbGVudW0pIHRlbGxzIHRoZSBu dW1iZXIgb2YgZmlsZXMgdGhhdAorICAgd2VyZSB0cmFuc2ZlcnJlZCkuCisKKyAgIElmIHlvdSBz cGVjaWZ5IGEgY29uc3RhbnQgYXMtbmFtZSB3aGVuIHNlbmRpbmcgYSBmaWxlIGdyb3VwOgorCisg IHNlbmQgKi50eHQgdGhpc25hbWVvbmx5CisKKyAgIEtlcm1pdCBjb21wbGFpbnMgYW5kIGFza3Mg eW91IHRvIGluY2x1ZGUgcmVwbGFjZW1lbnQgdmFyaWFibGVzIGluIHRoZQorICAgYXMtbmFtZS4g WW91IHNob3VsZCBnZW5lcmFsbHkgdXNlIFx2KGZpbGVuYW1lKSBvciBcdihmaWxlbnVtYmVyKSBm b3IKKyAgIHRoaXMgcHVycG9zZSwgc2luY2Ugb3RoZXIgdmFyaWFibGVzICh3aXRoIHRoZSBwb3Nz aWJsZSBleGNlcHRpb24gb2YKKyAgIGRhdGUvdGltZSByZWxhdGVkIHZhcmlhYmxlcykgZG8gbm90 IGNoYW5nZSBmcm9tIG9uZSBmaWxlIHRvIHRoZSBuZXh0LgorICAgQnV0IEtlcm1pdCBhY2NlcHRz IGFueSBhcy1uYW1lIGF0IGFsbCB0aGF0IGNvbnRhaW5zIGFueSBraW5kIG9mCisgICB2YXJpYWJs ZXMgZm9yIGZpbGUgZ3JvdXAsIGV2ZW4gaWYgdGhlIHZhcmlhYmxlIHdpbGwgbm90IGNoYW5nZS4g U286CisKKyAgc2VuZCAqLnR4dCBcJWEKKworICAgaXMgYWNjZXB0ZWQsIGJ1dCBhbGwgZmlsZXMg YXJlIHNlbnQgd2l0aCB0aGUgc2FtZSBuYW1lICh0aGUgdmFsdWUgb2YKKyAgIFwlYSwgaWYgaXQg aGFzIG9uZSBhbmQgaXQgaXMgY29uc3RhbnQpLiBJZiB0aGUgdmFyaWFibGUgaGFzIG5vIHZhbHVl IGF0CisgICBhbGwsIHRoZSBmaWxlcyBhcmUgc2VudCB1bmRlciB0aGVpciBvd24gbmFtZXMuCisK KyAgIE9mIGNvdXJzZSwgdGhlIHZhbHVlIG9mIFwlYSBpbiB0aGUgcHJldmlvdXMgZXhhbXBsZSBu ZWVkIG5vdCBiZQorICAgY29uc3RhbnQ6CisKKyAgZGVmaW5lIFwlYSBGSUxFXGZscGFkKFx2KGZp bGVudW0pLDIsMClfYXRfXHYodGltZSkKKyAgc2VuZCAqLnR4dCBcJWEKKworICAgVGhlIFJFQ0VJ VkUgY29tbWFuZCwgd2hlbiBnaXZlbiB3aXRob3V0IGFuIGFzLW5hbWUsIGJlaGF2ZXMgYXMgYWx3 YXlzLAorICAgc3RvcmluZyBhbGwgaW5jb21pbmcgZmlsZXMgdW5kZXIgdGhlIG5hbWVzIHRoZXkg YXJyaXZlIHdpdGgsIHN1YmplY3QgdG8KKyAgIFNFVCBGSUxFIE5BTUUgYW5kIFNFVCBSRUNFSVZF IFBBVEhOQU1FUyBtb2RpZmljYXRpb25zIChbNDQxXVNlY3Rpb24KKyAgIDQuMTApLgorCisgICBI b3dldmVyLCB3aGVuIGFuIGFzLW5hbWUgaXMgZ2l2ZW4gaW4gdGhlIFJFQ0VJVkUgY29tbWFuZCwg aXQgaXMgYXBwbGllZAorICAgdG8gYWxsIGluY29taW5nIGZpbGVzIHJhdGhlciB0aGFuIHRvIGp1 c3QgdGhlIGZpcnN0LiBJZiBpdCBkb2VzIG5vdAorICAgY29udGFpbiByZXBsYWNlbWVudCB2YXJp YWJsZXMsIHRoZW4gdGhlIGN1cnJlbnQgRklMRSBDT0xMSVNJT04gc2V0dGluZworICAgZ292ZXJu cyB0aGUgcmVzdWx0LiBGb3IgZXhhbXBsZToKKworICByZWNlaXZlIGZvbworCisgICB3aWxsIHJl c3VsdCBpbiBpbmNvbWluZyBmaWxlcyBuYW1lZCBmb28sIGZvby5+MX4sIGZvby5+Mn4sIGFuZCBz byBvbiwKKyAgIHdpdGggdGhlIGRlZmF1bHQgRklMRSBDT0xMSVNJT04gc2V0dGluZyBvZiBCQUNL VVAuIElmIGl0IGRvZXMgY29udGFpbgorICAgcmVwbGFjZW1lbnQgdmFyaWFibGVzLCBvZiBjb3Vy c2UgdGhleSBhcmUgdXNlZC4KKworICAgV2hlbiByZWNlaXZpbmcgZmlsZXMsIHRoZSBcdihmaWxl bmFtZSkgdmFyaWFibGUgcmVmZXJzIHRvIHRoZSBuYW1lIHRoYXQKKyAgIHdhcyByZWNlaXZlZCBp biB0aGUgaW5jb21pbmcgZmlsZS1oZWFkZXIgcGFja2V0LCBCRUZPUkUgYW55IHByb2Nlc3NpbmcK KyAgIGJ5IFNFVCBGSUxFIE5BTUVTIG9yIFNFVCBSRUNFSVZFIFBBVEhOQU1FUy4gU2luY2UgdGhl IGZpbGVuYW1lcyBpbgorICAgZmlsZS1oZWFkZXIgcGFja2V0cyBhcmUgdXN1YWxseSBpbiB1cHBl cmNhc2UsIHlvdSB3b3VsZCBuZWVkIHRvIGNvbnZlcnQKKyAgIHRoZW0gZXhwbGljaXRseSBpZiB5 b3Ugd2FudCB0aGVtIGluIGxvd2VyY2FzZSwgZS5nLjoKKworICByZWNlaXZlIFxmbG93ZXIoXHYo ZmlsZW5hbWUpKS5uZXcKKworNC4xLjIuIFRlbXBsYXRlcyBvbiB0aGUgQ29tbWFuZCBMaW5lCisK KyAgIE9uIHRoZSBjb21tYW5kLWxpbmUsIHVzZSB0ZW1wbGF0ZXMgYXMgc2hvd24gYWJvdmUgYXMg dGhlIC1hIG9wdGlvbgorICAgYXJndW1lbnQsIGJlYXJpbmcgaW4gbWluZCB0aGUgcHJvcGVuc2l0 eSBvZiBVTklYIGFuZCBwZXJoYXBzIG90aGVyCisgICBzaGVsbHMgdG8gdHJlYXQgYmFja3NsYXNo IGFzIGEgc2hlbGwgZXNjYXBlIGNoYXJhY3Rlci4gU28gaW4gVU5JWCAoZm9yCisgICBleGFtcGxl KToKKworICBrZXJtaXQgLXMgb29mYS4qIC1hIHguXFx2KGZpbGVudW0pCisKKyAgIEJ5IHRoZSB3 YXksIHRoaXMgcmVwcmVzZW50cyBhIGNoYW5nZSBmcm9tIDYuMCBhbmQgZWFybGllciByZWxlYXNl cyBpbgorICAgd2hpY2ggdGhlIGFzLW5hbWUgKC1hIGFyZ3VtZW50IG9yIG90aGVyd2lzZSkgd2Fz IG5vdCBldmFsdWF0ZWQgYnkgdGhlCisgICBjb21tYW5kIHBhcnNlci4gVGh1cywgZm9yIGV4YW1w bGUsIGluIFZNUyAod2hlcmUgdGhlIHNoZWxsIGRvZXMgbm90CisgICBjYXJlIGFib3V0IGJhY2tz bGFzaGVzKSwgaXQgd2FzIHBvc3NpYmxlIHRvOgorCisgIGtlcm1pdCAtcyBvb2ZhLnR4dCAtYSBj Olx0bXBcb29mYS50eHQKKworICAgTm93IGJhY2tzbGFzaGVzIGluIHRoZSBhcy1uYW1lIG11c3Qg YmUgcXVvdGVkIG5vdCBvbmx5IGZvciB0aGUgc2hlbGwKKyAgIChpZiBuZWNlc3NhcnkpIGJ1dCBh bHNvIGZvciBLZXJtaXQgaXRzZWxmOgorCisgIGtlcm1pdCAtcyBvb2ZhLnR4dCAtYSBjOlxcdG1w XFxvb2ZhLnR4dCAgICAgIDsgS2VybWl0IG9ubHkKKyAga2VybWl0IC1zIG9vZmEudHh0IC1hIGM6 XFxcXHRtcFxcXFxvb2ZhLnR4dCAgOyBTaGVsbCBhbmQgS2VybWl0CisKKyAgIFlvdSBjYW4gYWxz byB1c2UgdGhlIFxmbGl0ZXJhbCgpIGZ1bmN0aW9uIGZvciB0aGlzOgorCisgIGtlcm1pdCAtcyBv b2ZhLnR4dCAtYSBcZmxpdGVyYWwoYzpcdG1wXG9vZmEudHh0KSAgICAgIDsgS2VybWl0IG9ubHkK KyAga2VybWl0IC1zIG9vZmEudHh0IC1hIFxcZmxpdGVyYWwoYzpcXHRtcFxcb29mYS50eHQpICAg OyBTaGVsbCBhbmQgS2VybWl0CisKKzQuMS4zLiBQb3N0LVRyYW5zZmVyIFJlbmFtaW5nCisKKyAg IEZpbGVuYW1lIHRlbXBsYXRlcyBhcmUgbm93IGFsc28gdXNlZnVsIGluIFNFVCB7IFNFTkQsIFJF Q0VJVkUgfQorICAgUkVOQU1FLVRPIGFuZCBpbiB0aGUgL1JFTkFNRS1UTzogc3dpdGNoLCB0aGF0 IGNhbiBiZSBnaXZlbiB0byB0aGUgU0VORCwKKyAgIEdFVCwgb3IgUkVDRUlWRSBjb21tYW5kczsg dGhpcyBpcyBzaW1pbGFyIHRvIGFuIGFzLW5hbWUsIGJ1dCBpcworICAgZWZmZWN0aXZlIG9uIGEg cGVyLWZpbGUgYmFzaXMgaWYgYW5kIG9ubHkgaWYgdGhlIGZpbGUgd2FzIHRyYW5zZmVycmVkCisg ICBzdWNjZXNzZnVsbHkuCisKKyAgIE1PVkUtVE8gYW5kIFJFTkFNRS1UTyBhZGRyZXNzIGEgcmVx dWlyZW1lbnQgY29tbW9ubHkgc3RhdGVkIGZvcgorICAgdHJhbnNhY3Rpb24gcHJvY2Vzc2luZyBh bmQgc2ltaWxhciBzeXN0ZW1zLiBTdXBwb3NlLCBmb3IgZXhhbXBsZSwgYQorICAgY2VudHJhbCBz eXN0ZW0gIlgiIGFjY2VwdHMgY29ubmVjdGlvbnMgZnJvbSBtdWx0aXBsZSBjbGllbnRzCisgICBz aW11bHRhbmVvdXNseTsgYSBwcm9jZXNzIG9uIFggd2FpdHMgZm9yIGEgZmlsZSB0byBhcHBlYXIg YW5kIHRoZW4KKyAgIHByb2Nlc3NlcyB0aGUgZmlsZS4gVGhpcyBwcm9jZXNzIG11c3QgaGF2ZSBh IHdheSBvZiBrbm93aW5nIHdoZW4gdGhlCisgICBmaWxlIGhhcyBiZWVuIGNvbXBsZXRlbHkgYW5k IHN1Y2Nlc3NmdWxseSB0cmFuc2ZlcnJlZCBiZWZvcmUgaXQgc3RhcnRzCisgICB0byBwcm9jZXNz IGl0LiBUaGlzIGNhbiBiZSBhY2NvbXBsaXNoZWQgZWFzaWx5IHVzaW5nIEMtS2VybWl0J3MgU0VU IHsKKyAgIFNFTkQsIFJFQ0VJVkUgfSB7IE1PVkUtVE8sIFJFTkFNRS1UTyB9IGNvbW1hbmQgb3Ig L01PVkUtVE86IG9yCisgICAvUkVOQU1FLVRPOiBzd2l0Y2hlcywgZGVzY3JpYmVkIGluIFs0NDJd U2VjdGlvbnMgNC43LjEgdGhyb3VnaAorICAgWzQ0M100LjcuMy4KKworICAgSGVyZSdzIGFuIGV4 YW1wbGUgZm9yIHRoZSBjbGllbnQgc2lkZSwgaW4gd2hpY2ggZmlsZXMgdG8gYmUgc2VudCBhcmUK KyAgIHBsYWNlZCBpbiBhIGNlcnRhaW4gZGlyZWN0b3J5ICgvdXNyL29sZ2EvdG9zZW5kIGluIHRo aXMgZXhhbXBsZSkgYnkKKyAgIGFub3RoZXIgcHJvY2VzcyB3aGVuIHRoZXkgYXJlIHJlYWR5IHRv IGdvLiBUaGlzIG1pZ2h0IGJlIGluIGEgaG9zcGl0YWwKKyAgIG9yIGJpZyBkb2N0b3IncyBvZmZp Y2UsIHdoZXJlIG1lZGljYWwgaW5zdXJhbmNlIGNsYWltcyBhcmUgZW50ZXJlZCBhdCBhCisgICBu dW1iZXIgb2Ygd29ya3N0YXRpb25zLCBhbmQgdGhlbiBkZXBvc2l0ZWQgaW4gdGhlICJ0b3NlbmQi IGRpcmVjdG9yeSwKKyAgIGZyb20gd2hpY2ggdGhleSBhcmUgc2VudCB0byBhIGNsYWltcyBjbGVh cmluZ2hvdXNlLiBXZSBhc3N1bWUgdGhlCisgICBjb25uZWN0aW9uIGlzIGFscmVhZHkgbWFkZSBh bmQgYSBLZXJtaXQgc2VydmVyIGlzIG9uIHRoZSBvdGhlciBlbmQuCisKKyAgbG9jYWwgc3JjZGly IGZpbmRpciAgICAgICAgICAgICAgOyBEZWNsYXJlIGxvY2FsIChhdXRvbWF0aWMpIHZhcmlhYmxl cworICBhc3NpZ24gc3JjZGlyIC91c3Ivb2xnYS90b3NlbmQgICA7IExvY2FsIHNvdXJjZSBkaXJl Y3RvcnkgKGZpbGVzIHRvIHNlbmQpCisgIGFzc2lnbiBmaW5kaXIgL3Vzci9vbGdhL3NlbnQgICAg IDsgV2hlcmUgdG8gbW92ZSBmaWxlcyBhZnRlciB0aGV5IGFyZSBzZW50CisgIGxvZyB0cmFuc2Fj dGlvbnMgICAgICAgICAgICAgICAgIDsgS2VlcCBhIGxvZyBvZiB0cmFuc2ZlcnMKKyAgY2QgXG0o c3JjZGlyKSAgICAgICAgICAgICAgICAgICAgOyBDaGFuZ2UgdG8gdGhlIHNvdXJjZSBkaXJlY3Rv cnkKKyAgd2hpbGUgdHJ1ZSB7ICAgICAgICAgICAgICAgICAgICAgOyBMb29wIGZvcmV2ZXIuLi4K KyAgICAgIHNlbmQgL21vdmUtdG86XG0oZmluZGlyKSAqICAgOyBTZW5kIGFsbCBmaWxlcworICAg ICAgc2xlZXAgNjAgICAgICAgICAgICAgICAgICAgICA7IFNsZWVwIGEgbWludXRlCisgIH0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgR28gYmFjayBhbmQgZG8gaXQgYWdhaW4KKwor ICAgTm90ZSBob3cgc2ltcGxlIHRoaXMgaXMuIE9uY2UgZWFjaCBmaWxlIGlzIHNlbnQsIGl0IGlz IG1vdmVkIHNvIGl0CisgICB3b24ndCBiZSBzZW50IGFnYWluICh5b3UgY291bGQgYWxzbyB1c2Ug U0VORCAvUkVOQU1FLVRPOiBvciBldmVuIFNFTkQKKyAgIC9ERUxFVEUpLiBJZiBhIHRyYW5zZmVy IGZhaWxzLCB0aGUgZmlsZSBpcyBub3QgbW92ZWQgYW5kIHNvIHdlIHRyeQorICAgYWdhaW4gdG8g c2VuZCBpdCBuZXh0IHRpbWUgYXJvdW5kLiBJZiB0aGVyZSBhcmUgbm8gZmlsZXMgdG8gc2VuZCwg dGhlCisgICBTRU5EIGNvbW1hbmQgZG9lcyBub3RoaW5nIGJ1dCBhIG1lc3NhZ2UgaXMgcHJpbnRl ZDsgeW91IGNhbiBhdm9pZCB0aGUKKyAgIG1lc3NhZ2UgYnkgY2hlY2tpbmcgZmlyc3QgdG8gc2Vl IGlmIGFueSBmaWxlcyBhcmUgaW4gdGhlIGRpcmVjdG9yeToKKworICB3aGlsZSB0cnVlIHsgICAg ICAgICAgICAgICAgICAgICA7IExvb3AgZm9yZXZlci4uLgorICAgICAgaWYgPiBcZmZpbGVzKCop IDAgLSAgICAgICAgICA7IElmIHRoZXJlIGFyZSBhbnkgZmlsZXMKKyAgICAgICAgc2VuZCAvbW92 ZS10bzpcbShmaW5kaXIpICogOyBzZW5kIHRoZW0uCisgICAgICBzbGVlcCA2MCAgICAgICAgICAg ICAgICAgICAgIDsgU2xlZXAgYSBtaW51dGUuCisgIH0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDsgR28gYmFjayBhbmQgZG8gaXQgYWdhaW4uCisKKyAgIEl0J3MgZXZlbiBzaW1wbGVy IG9uIHRoZSBzZXJ2ZXIgc2lkZSAoaGVyZSBhZ2FpbiB3ZSBhc3N1bWUgdGhlCisgICBjb25uZWN0 aW9uIGlzIGFscmVhZHkgaW4gcGxhY2UpOgorCisgIGxvY2FsIHJjdmRpciBmaW5kaXIgICAgICAg ICAgICAgIDsgRGVjbGFyZSBsb2NhbCAoYXV0b21hdGljKSB2YXJpYWJsZXMKKyAgYXNzaWduIHJj dmRpciAvdXNyL2l2YW4vdG1wICAgICAgOyBUZW1wb3JhcnkgcmVjZWl2aW5nIGRpcmVjdG9yeQor ICBhc3NpZ24gZmluZGlyIC91c3IvaXZhbi9uZXcgICAgICA7IFdoZXJlIHRvIG1vdmUgZmlsZXMg YWZ0ZXIgcmVjZXB0aW9uCisgIGxvZyB0cmFuc2FjdGlvbnMgICAgICAgICAgICAgICAgIDsgS2Vl cCBhIGxvZyBvZiB0cmFuc2ZlcnMKKyAgY2QgXG0ocmN2ZGlyKSAgICAgICAgICAgICAgICAgICAg OyBDaGFuZ2UgdG8gdGhlIHNvdXJjZSBkaXJlY3RvcnkKKyAgc2V0IHJlY2VpdmUgbW92ZS10byBc bShmaW5kaXIpICAgOyBEZWNsYXJlIG1vdmUtdG8gZGlyZWN0b3J5LgorICBzZXJ2ZXIgICAgICAg ICAgICAgICAgICAgICAgICAgICA7IEVudGVyIHNlcnZlciBtb2RlLgorCisgICBBIHNlcGFyYXRl IHByb2Nlc3MgKGUuZy4gdGhlIG1lZGljYWwgY2xhaW0tZm9ybSBkZWNvZGVyKSBjYW4gbG9vayBm b3IKKyAgIGZpbGVzIGFwcGVhcmluZyBpbiB0aGUgL3Vzci9pdmFuL25ldyBkaXJlY3RvcnkgYW5k IHByb2Nlc3MgdGhlbSB3aXRoCisgICBldmVyeSBjb25maWRlbmNlIHRoYXQgdGhleSBoYXZlIGJl ZW4gY29tcGxldGVseSByZWNlaXZlZC4KKworICAgTm90ZSB0aGF0IHRoZSB1c2Ugb2YgTU9WRS1U TyBjYW4gcmVzdWx0IGluIG1vdmVkIGZpbGVzIG92ZXJ3cml0aW5nIG9uZQorICAgYW5vdGhlciAo dGhlIGFwcGxpY2F0aW9uIHdvdWxkIG5vcm1hbGx5IGF2b2lkIHRoaXMgYnkgYXNzaWduaW5nIGVh Y2gKKyAgIHRyYW5zYWN0aW9uIGEgdW5pcXVlLCBlLmcuIGJhc2VkIG9uIGN1c3RvbWVyIG51bWJl ciBhbmQgY2xhaW0gbnVtYmVyKS4KKyAgIEJ1dCBpZiBmaWxlbmFtZSBjb2xsaXNpb25zIGFyZSBh IHBvc3NpYmlsaXR5IGluIHlvdXIgYXBwbGljYXRpb24sCisgICBSRU5BTUUtVE8gbWlnaHQgYmUg YSBiZXR0ZXIgY2hvaWNlOyB5b3UgY2FuIHVzZSBhbnkgdmFyaWFibGVzIHlvdSBsaWtlCisgICBp biB0aGUgdGVtcGxhdGUgdG8gZW5zdXJlIHVuaXF1ZW5lc3Mgb2YgdGhlIFJFTkFNRS1UTyBmaWxl bmFtZTsgZm9yCisgICBleGFtcGxlOgorCisgIFNFVCBSRUNFSVZFIFJFTkFNRS1UTyBcdihmaWxl bmFtZSlfXHYobmRhdGUpX1x2KG50aW1lKV9cdih1c2VyaWQpX1x2KHBpZCkKKworNC4yLiBGSUxF LVRSQU5TRkVSIFBJUEVTIEFORCBGSUxURVJTCisKKzQuMi4xLiBJTlRST0RVQ1RJT04KKworICAg QmVnaW5uaW5nIGluIEMtS2VybWl0IDYuMSBhbmQgS2VybWl0IDk1IDEuMS4xMiwgaXQgaXMgcG9z c2libGUgdG8gc2VuZAorICAgZnJvbSBhIGNvbW1hbmQsIG9yICJwaXBlIiwgYXMgd2VsbCBhcyBm cm9tIGEgZmlsZSwgYW5kIHRvIHJlY2VpdmUgdG8gYQorICAgcGlwZSBvciBjb21tYW5kLiBJbiBh IHR5cGljYWwgZXhhbXBsZSwgd2UgbWlnaHQgd2FudCB0byB0cmFuc2ZlciBhbgorICAgZW50aXJl IGRpcmVjdG9yeSB0cmVlIGZyb20gb25lIFVOSVggc3lzdGVtIHRvIGFub3RoZXIgKGJ1dCB3aXRo b3V0CisgICB1c2luZyB0aGUgbWV0aG9kcyBkZXNjcmliZWQgaW4gWzQ0NF1TZWN0aW9ucyA0LjMg LCBbNDQ1XTQuMTAsCisgICBbNDQ2XTQuMTEsIGFuZCBbNDQ3XTQuMTUpLiBXZSBjb3VsZCBkbyB0 aGlzIGluIG11bHRpcGxlIHN0ZXBzIGFzCisgICBmb2xsb3dzOgorCisgIDEuIENyZWF0ZSBhIHRh ciBhcmNoaXZlIG9mIHRoZSBkZXNpcmVkIGRpcmVjdG9yeSB0cmVlCisgIDIuIENvbXByZXNzIHRo ZSB0YXIgYXJjaGl2ZQorICAzLiBUcmFuc2ZlciBpdCBpbiBiaW5hcnkgbW9kZSB0byB0aGUgb3Ro ZXIgY29tcHV0ZXIKKyAgNC4gRGVjb21wcmVzcyBpdAorICA1LiBFeHRyYWN0IHRoZSBkaXJlY3Rv cnkgdHJlZSBmcm9tIHRoZSB0YXIgYXJjaGl2ZQorCisgICBCdXQgdGhpcyBpcyBpbmNvbnZlbmll bnQgYW5kIGl0IHJlcXVpcmVzIGEgdGVtcG9yYXJ5IGZpbGUsIHdoaWNoIG1pZ2h0CisgICBiZSBs YXJnZXIgdGhhbiB3ZSBoYXZlIHJvb20gZm9yLgorCisgICBUaGUgbmV3IHBpcGUtdHJhbnNmZXIg ZmVhdHVyZSBsZXRzIHlvdSBkbyBzdWNoIHRoaW5ncyBpbiBhIHNpbmdsZSBzdGVwLAorICAgYW5k IHdpdGhvdXQgaW50ZXJtZWRpYXRlIGZpbGVzLgorCisgICBBZGRpdGlvbmFsIG5ldyBmZWF0dXJl cywgYWxzbyBkaXNjdXNzZWQgaGVyZSwgbGV0IHlvdSBzcGVjaWZ5IHByZS0gYW5kCisgICBwb3N0 LSBwcm9jZXNzaW5nIGZpbHRlcnMgZm9yIG91dGJvdW5kIGFuZCBpbmNvbWluZyBmaWxlcywgYW5k IGdpdmUgeW91CisgICBhIHdheSB0byBpbnNlcnQgdGhlIG91dHB1dCBmcm9tIHNoZWxsIG9yIHN5 c3RlbSBjb21tYW5kcyBpbnRvIEMtS2VybWl0CisgICBjb21tYW5kcy4KKworICAgVGhlIGZpbGUt dHJhbnNmZXIgcmVsYXRlZCBmZWF0dXJlcyBhcmUgYXZhaWxhYmxlIG9ubHkgd2l0aCBLZXJtaXQK KyAgIHByb3RvY29sLCBub3Qgd2l0aCBhbnkgZXh0ZXJuYWwgcHJvdG9jb2xzLCBub3Igd2l0aCBL OTUncyBidWlsdC1pbgorICAgWFlaTU9ERU0gcHJvdG9jb2xzIChiZWNhdXNlIFhZWk1PREVNIHJl Y292ZXJzIGZyb20gdHJhbnNtaXNzaW9uIGVycm9ycworICAgYnkgcmV3aW5kaW5nIHRoZSBzb3Vy Y2UgZmlsZSwgYW5kIHlvdSBjYW4ndCByZXdpbmQgYSBwaXBlKS4KKworICAgVGhpcyBzZWN0aW9u IGJlZ2lucyBieSBkaXNjdXNzaW5nIHRoZSBzaW1wbGUgYW5kIHN0cmFpZ2h0Zm9yd2FyZCB1c2Ug b2YKKyAgIHRoZXNlIGZlYXR1cmVzIGluIFVOSVgsIGluIHdoaWNoIHBpcGVzIGFuZCBpbnB1dC9v dXRwdXQgcmVkaXJlY3Rpb24gYXJlCisgICBhIGZ1bmRhbWVudGFsIGNvbXBvbmVudCBhbmQgdGhl cmVmb3JlICJqdXN0IHdvcmsiLCBhbmQgdGhlbiBnb2VzIG9uIHRvCisgICBkaXNjdXNzIHRoZWly IG9wZXJhdGlvbiBpbiBXaW5kb3dzIGFuZCBPUy8yLCB3aGVyZSBtYXR0ZXJzIGFyZSBtdWNoCisg ICBtb3JlIGNvbXBsaWNhdGVkLgorCis0LjIuMS4xLiBURVJNSU5PTE9HWQorCisgICBTdGFuZGFy ZCBJbnB1dAorICAgICAgICAgIFRoaXMgaXMgYSBwcmVjaXNlIHRlY2huaWNhbCB0ZXJtIGRlbm90 aW5nIHRoZSBub3JtYWwgc291cmNlIG9mCisgICAgICAgICAgaW5wdXQgZm9yIGEgY29tbWFuZCBv ciBwcm9ncmFtLCB3aGljaCBpcyB0aGUga2V5Ym9hcmQgb2YgeW91cgorICAgICAgICAgIHRlcm1p bmFsIGJ5IGRlZmF1bHQsIGJ1dCB3aGljaCBjYW4gYmUgcmVkaXJlY3RlZCB0byBhIGZpbGUgb3IK KyAgICAgICAgICBwaXBlLgorCisgICBTdGRpbgorICAgICAgICAgIEFiYnJldmlhdGlvbiBmb3Ig U3RhbmRhcmQgSW5wdXQuCisKKyAgIFN0YW5kYXJkIE91dHB1dAorICAgICAgICAgIEEgcHJlY2lz ZSB0ZWNobmljYWwgdGVybSBkZW5vdGluZyB0aGUgbm9ybWFsIGRlc3RpbmF0aW9uIGZvcgorICAg ICAgICAgIG91dHB1dCBmcm9tIGEgY29tbWFuZCBvciBwcm9ncmFtLCB3aGljaCBpcyB5b3VyIHRl cm1pbmFsIHNjcmVlbgorICAgICAgICAgIGJ5IGRlZmF1bHQsIGJ1dCB3aGljaCBjYW4gYmUgcmVk aXJlY3RlZCB0byBhIGZpbGUuCisKKyAgIFN0ZG91dAorICAgICAgICAgIEFiYnJldmlhdGlvbiBm b3IgU3RhbmRhcmQgT3V0cHV0LgorCisgICBTdGRpbworICAgICAgICAgIEFiYnJldmlhdGlvbiBm b3IgU3RhbmRhcmQgSW5wdXQgLyBTdGFuZGFyZCBPdXRwdXQuCisKKyAgIEkvTworICAgICAgICAg IEFiYnJldmlhdGlvbiBmb3IgSW5wdXQgLyBPdXRwdXQuCisKKyAgIFNoZWxsCisgICAgICAgICAg VGV4dC1iYXNlZCBzeXN0ZW0gY29tbWFuZCBwcm9jZXNzb3IsIHN1Y2ggYXMgdGhlIFVOSVggc2hl bGwsIERPUworICAgICAgICAgIENPTU1BTkQuQ09NLCBldGMuCisKKyAgIFBpcGUKKyAgICAgICAg ICBBIG1lY2hhbmlzbSBieSB3aGljaCB0aGUgc3RhbmRhcmQgb3V0cHV0IG9mIG9uZSBwcm9ncmFt IGlzIHNlbnQKKyAgICAgICAgICB0byB0aGUgc3RhbmRhcmQgaW5wdXQgb2YgYW5vdGhlci4KKwor ICAgUGlwZWxpbmUKKyAgICAgICAgICBBIHNlcmllcyBvZiBwcm9ncmFtcyBjb25uZWN0ZWQgYnkg cGlwZXMuCisKKzQuMi4xLjIuIE5PVEFUSU9OCisKKyAgIEluIGNvbW1hbmQgZGVzY3JpcHRpb25z LCAiY29tbWFuZCIgaXMgcmVwbGFjZWQgYnkgYSBzaGVsbCBvciBzeXN0ZW0KKyAgIGNvbW1hbmQg b3IgcGlwZWxpbmUuIFRoZSBjb21tYW5kIG5hbWVzIHNwZWNpZmllZCBpbiB0aGVzZSBjb21tYW5k cyBhcmUKKyAgIGludGVycHJldGVkIGJ5IHlvdXIgc2hlbGwsIGp1c3QgYXMgaWYgeW91IHdlcmUg dHlwaW5nIHRoZW0gYXQgdGhlIHNoZWxsCisgICBwcm9tcHQsIGFuZCBzbyBpZiB0aGV5IGFyZSBp biB5b3VyIFBBVEgsIHRoZXkgd2lsbCBiZSBmb3VuZCBpbiB0aGUKKyAgIGV4cGVjdGVkIG1hbm5l ci4gVGhlcmVmb3JlIHlvdSBkb24ndCBoYXZlIHRvIHNwZWNpZnkgY29tcGxldGUgcGF0aG5hbWVz CisgICBmb3IgY29tbWFuZHMgdGhhdCBhcmUgcHJvZ3JhbXMgKGJ1dCBpdCBzaG91bGRuJ3QgaHVy dCBpZiB5b3UgZG8pLgorCisgICBUaGUgbm9ybWFsIG5vdGF0aW9uIGZvciBJL08gcmVkaXJlY3Rp b24gaXMgYXMgZm9sbG93czoKKworICA8ICBSZWFkIFN0ZGluIGZyb20gdGhlIGdpdmVuIGZpbGUu CisgID4gIFNlbmQgU3Rkb3V0IHRvIHRoZSBnaXZlbiBmaWxlLgorICB8ICBTZW5kIFN0ZG91dCBm cm9tIHRoZSBjb21tYW5kIG9uIHRoZSBsZWZ0IHRvIHRoZSBjb21tYW5kIG9uIHRoZSByaWdodC4K KworICAgRXhhbXBsZXM6CisKKyAgIHNvcnQgPCBmb28gPiBiYXIKKyAgICAgICAgICBTb3J0cyB0 aGUgbGluZXMgaW4gZmlsZSAiZm9vIiBhbmQgd3JpdGVzIHRoZSByZXN1bHRzIHRvIGZpbGUKKyAg ICAgICAgICAiYmFyIgorCisgICBncmVwIC1jICJzb21lIHRleHQiICoudHh0IHwgZ3JlcCAtdiAi OjAiIHwgc29ydCB8IHByIC0zIHwgbHByCisgICAgICAgICAgVGhpcyBpcyBhIGNvbW1hbmQgcGlw ZWxpbmUgY29tcG9zZWQgb2YgNSBjb21tYW5kczoKKworICAgZ3JlcCAtYyAic29tZSB0ZXh0IiAq LnR4dAorICAgICAgICAgIExvb2tzIGluIGFsbCBmaWxlcyB3aG9zZSBuYW1lcyBlbmQgd2l0aCAi LnR4dCIgZm9yIHRoZSBzdHJpbmcKKyAgICAgICAgICAic29tZSB0ZXh0IiBhbmQgd3JpdGVzIHRv IFN0ZG91dCB0aGUgbmFtZXMgb2YgZWFjaCBmaWxlIGZvbGxvd2VkCisgICAgICAgICAgYnkgYSBj b2xvbiBhbmQgdGhlIG51bWJlciBvZiBvY2N1cnJlbmNlcyBpbiBlYWNoLgorCisgICBncmVwIC12 ICI6MCIKKyAgICAgICAgICBQcmludHMgdG8gU3Rkb3V0IHRoZSBsaW5lcyBmcm9tIFN0ZGluIHRo YXQgZG8gTk9UIGNvbnRhaW4gdGhlCisgICAgICAgICAgc3RyaW5nICI6MCIsIGluIHRoaXMgY2Fz ZSwgaXQgcmVtb3ZlcyB0aGUgbmFtZXMgb2YgZmlsZXMgdGhhdCBkbworICAgICAgICAgIG5vdCBj b250YWluICJzb21lIHRleHQiLgorCisgICBzb3J0CisgICAgICAgICAgU29ydHMgdGhlIGxpbmVz IGZyb20gU3RkaW4gYWxwaGFiZXRpY2FsbHkgdG8gU3Rkb3V0LgorCisgICBwciAtMworICAgICAg ICAgIEFycmFuZ2VzIHRoZSBsaW5lcyBmcm9tIFN0ZGluIGluIHRocmVlIGNvbHVtbnMuCisKKyAg IGxwcgorICAgICAgICAgIFByaW50cyBpdHMgU3RkaW4gb24gdGhlIGRlZmF1bHQgcHJpbnRlci4K KworICAgTm90ZSB0aGF0IHRoZSBLZXJtaXQgZmVhdHVyZXMgZGVzY3JpYmVkIGhlcmUgd29yayBv bmx5IHdpdGggY29tbWFuZHMKKyAgIHRoYXQgdXNlIFN0ZGlvLiBJZiB5b3UgYXR0ZW1wdCB0byB1 c2UgdGhlbSB3aXRoIGNvbW1hbmRzIHdob3NlIGlucHV0CisgICBhbmQgb3V0cHV0IGNhbiBub3Qg YmUgcmVkaXJlY3RlZCwgS2VybWl0IHdpbGwgbW9zdCBsaWtlbHkgZ2V0IHN0dWNrLgorICAgS2Vy bWl0IGhhcyBubyB3YXkgb2YgdGVsbGluZyBob3cgYW4gZXh0ZXJuYWwgY29tbWFuZCB3b3Jrcywg bm9yIHdoYXQKKyAgIHRoZSBzeW50YXggb2YgdGhlIHNoZWxsIGlzLCBzbyBpdCdzIHVwIHRvIHlv dSB0byBtYWtlIHN1cmUgeW91IHVzZQorICAgdGhlc2UgZmVhdHVyZXMgb25seSB3aXRoIHJlZGly ZWN0YWJsZSBjb21tYW5kcy4KKworICAgVGhlIHF1b3RpbmcgcnVsZXMgb2YgeW91ciBzaGVsbCBh cHBseSB0byB0aGUgY29tbWFuZC4gVGh1cyBpbiBVTklYLAorICAgd2hlcmUgQy1LZXJtaXQgdHJp ZXMgdG8gdXNlIHlvdXIgcHJlZmVycmVkIHNoZWxsIGZvciBydW5uaW5nIGNvbW1hbmRzLAorICAg c2hlbGwgIm1ldGFjaGFyYWN0ZXJzIiB3aXRoaW4gY29tbWFuZHMgbXVzdCBiZSBlc2NhcGVkIGlm IHRoZXkgYXJlIHRvCisgICBiZSB0YWtlbiBsaXRlcmFsbHksIHVzaW5nIHRoZSBtZXRob2RzIG5v cm1hbCBmb3IgeW91ciBzaGVsbC4gRm9yCisgICBleGFtcGxlLCB0aGUgVU5JWCB0ciAodHJhbnNs YXRlKSBjb21tYW5kIG11c3QgaGF2ZSBpdHMgYXJndW1lbnRzIGluCisgICBxdW90ZXM6CisKKyAg dHIgIlthLXpdIiAiW0EtWl0iCisKKyAgIG90aGVyd2lzZSB0aGUgc2hlbGwgaXMgbGlrZWx5IHRv IHJlcGxhY2UgdGhlbSBieSBhbGwgZmlsZW5hbWVzIHRoYXQKKyAgIG1hdGNoLCB3aGljaCBpcyBw cm9iYWJseSBub3Qgd2hhdCB5b3Ugd2FudC4gVGhpcyBpcyBhbHNvIHRydWUgd2hlbgorICAgdXNp bmcgeW91ciBzaGVsbCBkaXJlY3RseSwgYW5kIGhhcyBub3RoaW5nIHRvIGRvIHdpdGggS2VybWl0 LgorCis0LjIuMS4zLiBTRUNVUklUWQorCisgICBTb21lIHNpdGVzIG1pZ2h0IG5vdCB3aXNoIHRv IGFsbG93IGFjY2VzcyB0byBzeXN0ZW0gY29tbWFuZHMgb3IKKyAgIGV4dGVybmFsIHByb2dyYW1z IGZyb20gd2l0aGluIEtlcm1pdC4gU3VjaCBhY2Nlc3MsIGluY2x1ZGluZyBhbGwgdGhlCisgICBm ZWF0dXJlcyBkZXNjcmliZWQgaGVyZSwgY2FuIGJlIGRpc2FibGVkIGluIHZhcmlvdXMgd2F5czoK KworICAgIDEuIFdoZW4gYnVpbGRpbmcgZnJvbSBzb3VyY2UgY29kZSwgaW5jbHVkZSAtRE5PUFVT SCBhbW9uZyB0aGUgQ0ZMQUdTLgorICAgIDIuIEF0IHJ1bnRpbWUsIGdpdmUgdGhlIE5PUFVTSCBj b21tYW5kLgorICAgIDMuIEZvciBzZXJ2ZXIgbW9kZSwgZ2l2ZSB0aGUgRElTQUJMRSBIT1NUIGNv bW1hbmQuCisgICAgNC4gSW1wbGljaXQgdXNlIG9mIHBpcGVzIGNhbiBiZSBkaXNhYmxlZCBhcyBk ZXNjcmliZWQgaW4gWzQ0OF1TZWN0aW9uCisgICAgICAgNC4yLjQuCisKKyAgIE5vdGU6IDMgYW5k IDQgYXJlIG5vdCBuZWNlc3NhcnkgaWYgeW91IGhhdmUgZG9uZSAxIG9yIDIuCisKKzQuMi4yLiBD b21tYW5kcyBmb3IgVHJhbnNmZXJyaW5nIGZyb20gYW5kIHRvIFBpcGVzCisKKyAgIFNFTkQgL0NP TU1BTkQgc2VuZHMgZGF0YSBmcm9tIGEgY29tbWFuZCBvciBjb21tYW5kIHBpcGVsaW5lLCBhbmQK KyAgIFJFQ0VJVkUgL0NPTU1FTlQgd3JpdGVzIGRhdGEgdG8gYSBjb21tYW5kIG9yIHBpcGVsaW5l LiBUaGUgR0VUIC9DT01NQU5ECisgICBjb21tYW5kIGFza3MgYSBzZXJ2ZXIgdG8gc2VuZCBtYXRl cmlhbCwgYW5kIHRoZW4gd3JpdGVzIHRoZSBpbmNvbWluZworICAgbWF0ZXJpYWwgdG8gYSBjb21t YW5kIG9yIHBpcGVsaW5lLiBUaGVzZSBmZWF0dXJlcywgYWxvbmcgd2l0aCBzd2l0Y2hlcworICAg KGxpa2UgIi9DT01NQU5EIiwgZGVzY3JpYmVkIGluIFs0NDldU2VjdGlvbiA0LjcpIGFyZSBuZXcg dG8gQy1LZXJtaXQKKyAgIDYuMS4gVGhlIGZvbGxvd2luZyBzeW5vbnltcyBhcmUgYWxzbyBwcm92 aWRlZDoKKworICBDU0VORCAgICA9IFNFTkQgL0NPTU1BTkQKKyAgQ1JFQ0VJVkUgPSBSRUNFSVZF IC9DT01NQU5ECisgIENHRVQgICAgID0gR0VUIC9DT01NQU5ECisKKyAgIE5vbmUgb2YgdGhlc2Ug Y29tbWFuZHMgY2FuIGJlIHVzZWQgaWYgYSBTRU5EIG9yIFJFQ0VJVkUgRklMVEVSCisgICAocmVz cGVjdGl2ZWx5LCBbNDUwXVNlY3Rpb24gNC4yLjMpIGlzIGluIGVmZmVjdCwgb3IgaWYgYSBOT1BV U0ggY29tbWFuZAorICAgKFs0NTFdU2VjdGlvbiA0LjIuMS4zKSBoYXMgYmVlbiBnaXZlbiwgb3Ig aWYgdGhlIGN1cnJlbnQgcHJvdG9jb2wgaXMKKyAgIG5vdCBLZXJtaXQuCisKKzQuMi4yLjEuIFNl bmRpbmcgZnJvbSBhIENvbW1hbmQKKworICAgU0VORCAvQ09NTUFORCBjb21tYW5kIFsgYXMtbmFt ZSBdCisgICBTRU5EIC9BUy1OQU1FOmFzLW5hbWUgL0NPTU1BTkQgY29tbWFuZAorICAgQ1NFTkQg Y29tbWFuZCBbIGFzLW5hbWUgXQorICAgICAgICAgIFRoZXNlIHRocmVlIGZvcm1zIGFyZSB0aGUg c2FtZS4gVGhleSB3b3JrIGxpa2UgdGhlIFNFTkQgY29tbWFuZCwKKyAgICAgICAgICBidXQgaW5z dGVhZCBvZiBzZW5kaW5nIGEgZmlsZSwgaXQgc2VuZHMgdGhlIHN0YW5kYXJkIG91dHB1dCBvZgor ICAgICAgICAgIHRoZSBnaXZlbiBjb21tYW5kLCBlaXRoZXIgdW5kZXIgdGhlIGNvbW1hbmQncyBv d24gbmFtZSwgb3IgZWxzZQorICAgICAgICAgIHdpdGggdGhlIGdpdmVuIGFzLW5hbWUuIElmIHRo ZSBjb21tYW5kIGNvbnRhaW5zIHNwYWNlcywgaXQgbXVzdAorICAgICAgICAgIGJlIGVuY2xvc2Vk IGluIGJyYWNlcy4gQnJhY2VzIHNob3VsZCBhbHNvIGJlIHVzZWQgZm9yIHRoZQorICAgICAgICAg IGFzLW5hbWUgaWYgaXQgY29udGFpbnMgc3BhY2VzLiBJZiBicmFjZXMgYXJlIGluY2x1ZGVkIGFy b3VuZAorICAgICAgICAgIGVpdGhlciB0aGUgY29tbWFuZCBvciB0aGUgYXMtbmFtZSwgdGhleSBh cmUgcmVtb3ZlZCBhZnRlcgorICAgICAgICAgIHBhcnNpbmcgYnV0IGJlZm9yZSB1c2UuIEFzIHdp dGggU0VORCwgdGhlIHRyYW5zZmVyIGlzIGluIHRleHQgb3IKKyAgICAgICAgICBiaW5hcnkgbW9k ZSBhY2NvcmRpbmcgdGhlIGN1cnJlbnQgRklMRSBUWVBFIHNldHRpbmcsIHVubGVzcyB5b3UKKyAg ICAgICAgICBvdmVycmlkZSB0aGUgZ2xvYmFsIHRyYW5zZmVyIG1vZGUgYnkgaW5jbHVkaW5nIGEg L1RFWFQgb3IKKyAgICAgICAgICAvQklOQVJZIHN3aXRjaC4gVGhlIGNvbW1hbmQgbXVzdCByZXF1 aXJlIG5vIGlucHV0LgorCisgICBXaGVuIHNlbmRpbmcgZnJvbSBhIGNvbW1hbmQgb3IgcGlwZWxp bmUsIEMtS2VybWl0IGhhcyBubyB3YXkgb2Yga25vd2luZworICAgaW4gYWR2YW5jZSBob3cgbXVj aCBkYXRhIHdpbGwgYmUgc2VudCwgYW5kIHNvIGl0IGNhbiBub3Qgc2VuZCB0aGUgc2l6ZQorICAg dG8gdGhlIG90aGVyIEtlcm1pdCBpbiB0aGUgQXR0cmlidXRlIHBhY2tldCwgYW5kIHNvIHRoZSBy ZWNlaXZpbmcKKyAgIEtlcm1pdCBoYXMgbm8gd2F5IG9mIGRpc3BsYXlpbmcgInBlcmNlbnQgZG9u ZSIgb3IgYSBwcm9ncmVzcyBiYXIKKyAgICh0aGVybW9tZXRlcikuCisKKyAgIEV4YW1wbGVzIHRo YXQgbWFrZSBzZW5zZSBpbiB0ZXh0IG1vZGUgKGlsbHVzdHJhdGVkIGJ5IGNvbW1vbiBVTklYCisg ICBjb21tYW5kcyk6CisKKyAgIFNFTkQgL0NPTU1BTkQgZmluZ2VyCisgICBDU0VORCBmaW5nZXIK KyAgICAgICAgICBzZW5kcyB0aGUgY3VycmVudCAiZmluZ2VyIiBsaXN0aW5nICh3aG8ncyBsb2dn ZWQgaW4pIHVuZGVyIHRoZQorICAgICAgICAgIG5hbWUgImZpbmdlciIuIFRoZSB0d28gZm9ybXMg InNlbmQgL2NvbW1hbmQiIGFuZCAiY3NlbmQiIGFyZQorICAgICAgICAgIGVxdWl2YWxlbnQ7IHdl IHdvbid0IGJvdGhlciBzaG93aW5nIHRoZW0gYm90aCBpbiB0aGUgcmVzdCBvZiB0aGUKKyAgICAg ICAgICBleGFtcGxlcy4KKworICAgU0VORCAvQ09NTUFORDp7ZmluZ2VyfQorICAgQ1NFTkQge2Zp bmdlcn0KKyAgICAgICAgICBTYW1lIGFzIHByZXZpb3VzIGV4YW1wbGUgKGJyYWNlcyBhcmUgcmVt b3ZlZCBmcm9tICJ7ZmluZ2VyfSIpLgorCisgICBTRU5EIC9DT01NQU5EOnsgZmluZ2VyIH0KKyAg IENTRU5EIHsgZmluZ2VyIH0KKyAgICAgICAgICBTYW1lIGFzIHByZXZpb3VzIGV4YW1wbGUsIGJ1 dCBub3RlIHRoYXQgdGhlIHNwYWNlcyBhcmUga2VwdC4KKyAgICAgICAgICBUaGlzIGRvZXMgbm90 IHByZXZlbnQgdGhlIHNoZWxsIGZyb20gcnVubmluZyB0aGUgImZpbmdlciIKKyAgICAgICAgICBw cm9ncmFtLCBidXQgaXRzIG91dHB1dCBpcyBzZW50IHVuZGVyIHRoZSBuYW1lICIgZmluZ2VyICIg KHdpdGgKKyAgICAgICAgICBhIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNwYWNlKS4KKworICAgU0VO RCAvQ09NTUFORDpmaW5nZXIgL0FTLU5BTUU6dXNlcmxpc3QKKyAgIENTRU5EIGZpbmdlciB1c2Vy bGlzdAorICAgICAgICAgIHNlbmRzIHRoZSBjdXJyZW50IGZpbmdlciBsaXN0aW5nIHVuZGVyIHRo ZSBuYW1lICJ1c2VybGlzdCIuCisKKyAgIFNFTkQgL0NPTU1BTkQ6e2ZpbmdlciB8IHNvcnQgLXJ9 IC9BUy1OQU1FOnVzZXJsaXN0CisgICBDU0VORCB7ZmluZ2VyIHwgc29ydCAtcn0gdXNlcmxpc3QK KyAgICAgICAgICBzZW5kcyB0aGUgY3VycmVudCBmaW5nZXIgbGlzdGluZywgc29ydGVkIGluIHJl dmVyc2Ugb3JkZXIsIHVuZGVyCisgICAgICAgICAgdGhlIG5hbWUgInVzZXJsaXN0Ii4gVGhlIGJy YWNlcyBhcmUgbmVlZGVkIHRvIGRpc3Rpbmd1aXNoIHRoZQorICAgICAgICAgIGNvbW1hbmQgZnJv bSB0aGUgYXMtbmFtZS4KKworICAgU0VORCAvQ09NTUFORDp7ZmluZ2VyIHwgc29ydCAtcn0gL0FT LU5BTUU6e3VzZXJsaXN0fQorICAgQ1NFTkQge2ZpbmdlciB8IHNvcnQgLXJ9IHt1c2VybGlzdH0K KyAgICAgICAgICBTYW1lIGFzIHByZXZpb3VzIGV4YW1wbGUgKGJyYWNlcyBhcmUgcmVtb3ZlZCBm cm9tICJ7dXNlcmxpc3R9IikuCisKKyAgIFNFTkQgL0NPTU1BTkQ6e2ZpbmdlciB8IHNvcnQgLXJ9 CisgICAgICAgICAgL0FTLU5BTUU6e1xmcmVwbGFjZShcdihmaWxlbmFtZSksXDMyLF8pfQorCisg ICBDU0VORCB7ZmluZ2VyIHwgc29ydCAtcn0ge1xmcmVwbGFjZShcdihmaWxlbmFtZSksXDMyLF8p fQorICAgICAgICAgIExpa2UgdGhlIHByZXZpb3VzIGV4YW1wbGUsIGJ1dCBzZW5kcyB0aGUgb3V0 cHV0IG9mIHRoZSBjb21tYW5kCisgICAgICAgICAgdW5kZXIgdGhlIG5hbWUgb2YgdGhlIGNvbW1h bmQsIGJ1dCB3aXRoIGFsbCBzcGFjZXMgKFwzMikKKyAgICAgICAgICByZXBsYWNlZCBieSB1bmRl cnNjb3Jlcywgc28gdGhlIGFzLW5hbWUgaXMgImZpbmdlcl98X3NvcnRfLXIiLgorCisgICBFeGFt cGxlcyB0aGF0IG1ha2Ugc2Vuc2UgaW4gYmluYXJ5IG1vZGUgKHRocmVlIGVxdWl2YWxlbnQgZm9y bXMgYXJlCisgICBzaG93bik6CisKKyAgIFNFTkQgL0NPTU1BTkQgL0JJTkFSWSB7dGFyIGNmIC0g LiB8IGd6aXAgLWN9IG15ZGlyLnRhci5negorICAgU0VORCAvQ09NTUFORCAvQklOQVJZIC9BUy1O QU1FOm15ZGlyLnRhci5neiB7dGFyIGNmIC0gLiB8IGd6aXAgLWN9CisgICBDU0VORCAvQklOQVJZ IHt0YXIgY2YgLSAuIHwgZ3ppcCAtY30gbXlkaXIudGFyLmd6CisgICAgICAgICAgTWFrZXMgYSB0 YXIgYXJjaGl2ZSBvZiB0aGUgY3VycmVudCBkaXJlY3RvcnksIGNvbXByZXNzZXMgaXQgd2l0aAor ICAgICAgICAgIHRoZSBHTlUgZ3ppcCBwcm9ncmFtLCBhbmQgc2VuZHMgaXQgYXMgIm15ZGlyLnRh ci5neiIuIFRoZSBvdGhlcgorICAgICAgICAgIEtlcm1pdCBjYW4sIG9mIGNvdXJzZSwganVzdCBz dG9yZSBpdCBhcyBhIGZpbGUsIG9yIGl0IGNhbiB1c2UKKyAgICAgICAgICBDUkVDRUlWRSB0byB1 bmNvbXByZXNzIGFuZCBkZWFyY2hpdmUgaXQgYXMgcGFydCBvZiB0aGUgdHJhbnNmZXIKKyAgICAg ICAgICBwcm9jZXNzLgorCisgICBXaGVuIHVzaW5nIGEgInBpcGVsaW5lIiBvZiBjb21tYW5kcyBp biB0aGUgY29tbWFuZCBmaWVsZCwgb2J2aW91c2x5LAorICAgdGhlIGZpcnN0IGNvbW1hbmQgbXVz dCBub3QgcmVxdWlyZSBhbnkgaW5wdXQsIGFuZCB0aGUgbGFzdCBjb21tYW5kCisgICBzaG91bGQg cHJvZHVjZSBzb21lIG91dHB1dCwgYW5kIGFsbCBpbnRlcm1lZGlhdGUgY29tbWFuZHMgc2hvdWxk IGdldAorICAgc29tZSBpbnB1dCBhbmQgcHJvZHVjZSBzb21lIG91dHB1dC4KKworNC4yLjIuMi4g UmVjZWl2aW5nIHRvIGEgQ29tbWFuZAorCisgICBSRUNFSVZFIC9DT01NQU5EIGNvbW1hbmQKKyAg IENSRUNFSVZFIGNvbW1hbmQKKyAgICAgICAgICBUaGlzIGlzIGxpa2UgUkVDRUlWRSwgZXhjZXB0 IGluY29taW5nIG1hdGVyaWFsIGlzIHdyaXR0ZW4gdG8gdGhlCisgICAgICAgICAgc3RhbmRhcmQg aW5wdXQgb2YgdGhlIGdpdmVuIGNvbW1hbmQsIGluIHRleHQgb3IgYmluYXJ5IG1vZGUKKyAgICAg ICAgICBhY2NvcmRpbmcgdG8gdGhlIG5vcm1hbCBydWxlcyBmb3IgZmlsZSByZWNlcHRpb24uIEJl IHN1cmUgdG8KKyAgICAgICAgICBpbmNsdWRlIGEgcmVkaXJlY3RvciB0byBhIGZpbGUgKGlmIHRo ZSBjb21tYW5kIG5vcm1hbGx5IHdyaXRlcworICAgICAgICAgIHRvIHN0YW5kYXJkIG91dHB1dCks IG9yIHRoZSBvdXRwdXQgb2YgdGhlIGNvbW1hbmQgd29uJ3QgZ28KKyAgICAgICAgICBhbnl3aGVy ZS4gVGhlIGNvbW1hbmQgbWF5IGNvbnRhaW4gc3BhY2VzOyBicmFjZXMgYXJlIG5vdCBuZWVkZWQs CisgICAgICAgICAgYnV0IHRoZXkgYXJlIHJlbW92ZWQgaWYgdXNlZC4KKworICAgV0FSTklORzog Qy1LZXJtaXQgaGFzIG5vIHdheSBvZiBrbm93aW5nIGFueXRoaW5nIGFib3V0IHRoZSBjb21tYW5k LCBvcgorICAgZXZlbiB3aGV0aGVyIGl0IGlzIGEgY29tbWFuZC4gVGh1cyB0aGlzIGNvbW1hbmQg d2lsbCBhbHdheXMgY2F1c2UKKyAgIEMtS2VybWl0IHRvIGVudGVyIHByb3RvY29sIG1vZGUsIGFz IGxvbmcgYXMgc29tZSB0ZXh0IGlzIHNwZWNpZmllZCBpbgorICAgdGhlIGNvbW1hbmQgZmllbGQu IEhvd2V2ZXIsIGlmIHRoZSB0ZXh0IGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gYQorICAgY29tbWFu ZCwgdGhlIHRyYW5zZmVyIHdpbGwgZXZlbnR1YWxseSBmYWlsIHdpdGggYSBtZXNzYWdlIHN1Y2gg YXMKKyAgICJFcnJvciB3cml0aW5nIGRhdGEiIG9yICJGYWlsdXJlIHRvIGNsb3NlIGZpbGUiLgor CisgICBFeGFtcGxlcyBmb3IgdGV4dCBtb2RlIChpbiBVTklYKToKKworICAgUkVDRUlWRSAvQ09N TUFORCBzb3J0IC1yID4gcmV2ZXJzZS50eHQKKyAgIENSRUNFSVZFIHNvcnQgLXIgPiByZXZlcnNl LnR4dAorICAgICAgICAgIFRoZSB0ZXh0IHRoYXQgaXMgcmVjZWl2ZWQgaXMgc29ydGVkIGluIHJl dmVyc2Ugb3JkZXIgYW5kIHN0b3JlZAorICAgICAgICAgIGluIHRoZSBmaWxlICJyZXZlcnNlLnR4 dCIuIFRoZSB0d28gZm9ybXMgc2hvd24gYXJlIGVxdWl2YWxlbnQuCisKKyAgIFJFQ0VJVkUgL0NP TU1BTkQge3NvcnQgLXIgPiByZXZlcnNlLnR4dH0KKyAgIENSRUNFSVZFIHtzb3J0IC1yID4gcmV2 ZXJzZS50eHR9CisgICAgICAgICAgVGhlIHNhbWUgYXMgdGhlIHByZXZpb3VzIGV4YW1wbGU7IGlm IGJyYWNlcyBhcmUgaW5jbHVkZWQsIHRoZXkKKyAgICAgICAgICBhcmUgc2ltcGx5IHJlbW92ZWQu CisKKyAgIFJFQ0VJVkUgL0NPTU1BTkQge3NvcnQgLXIgPiBcZmxvd2VyKFx2KGZpbGVuYW1lKSku cmV2ZXJzZX0KKyAgIENSRUNFSVZFIHtzb3J0IC1yID4gXGZsb3dlcihcdihmaWxlbmFtZSkpLnJl dmVyc2V9CisgICAgICAgICAgU2FtZSBidXQgc3RvcmVzIHJlc3VsdCB1bmRlciB0aGUgaW5jb21p bmcgZmlsZW5hbWUsIGxvd2VyY2FzZWQsCisgICAgICAgICAgYW5kIHdpdGggIi5yZXZlcnNlIiBh cHBlbmRlZCB0byBpdC4KKworICAgUkVDRUlWRSAvQ09NTUFORCBzb3J0CisgICBDUkVDRUlWRSBz b3J0CisgICAgICAgICAgRG9lcyBub3RoaW5nIHVzZWZ1bCwgc2luY2UgdGhlIG91dHB1dCBvZiBz b3J0IGhhcyBub3doZXJlIHRvIGdvLgorCisgICBSRUNFSVZFIC9DT01NQU5EIHNvcnQgLXIgfCBw ciAtMyB8IGxwciAtUGxhc2VyamV0CisgICBDUkVDRUlWRSBzb3J0IC1yIHwgcHIgLTMgfCBscHIg LVBsYXNlcmpldAorICAgICAgICAgIFRoZSB0ZXh0IHRoYXQgaXMgcmVjZWl2ZWQgaXMgc29ydGVk IGluIHJldmVyc2Ugb3JkZXIsIGFycmFuZ2VkCisgICAgICAgICAgaW50byB0aHJlZSBjb2x1bW5z LCBhbmQgc2VudCB0byB0aGUgImxhc2VyamV0IiBwcmludGVyLgorCisgICBFeGFtcGxlcyBmb3Ig YmluYXJ5IG1vZGU6CisKKyAgIFJFQ0VJVkUgL0NPTU1BTkQ6e2d1bnppcCAtYyB8IHRhciB4ZiAt fQorICAgQ1JFQ0VJVkUge2d1bnppcCAtYyB8IHRhciB4ZiAtfQorICAgICAgICAgIEFzc3VtaW5n IHRoZSBkYXRhIHRoYXQgaXMgcmVjZWl2ZWQgaXMgYSBjb21wcmVzc2VkIHRhciBhcmNoaXZlLAor ICAgICAgICAgIHVuY29tcHJlc3NlcyB0aGUgYXJjaGl2ZSBhbmQgcGFzc2VzIGl0IHRvIHRhciBm b3IgZXh0cmFjdGlvbi4gSW4KKyAgICAgICAgICB0aGlzIGNhc2UgdGhlIGJyYWNlcyBhcmUgbmVl ZGVkIGJlY2F1c2Ugb3RoZXJ3aXNlIHRoZSBmaW5hbCAiLSIKKyAgICAgICAgICB3b3VsZCBiZSB0 YWtlbiBhcyBhIGNvbW1hbmQgY29udGludWF0aW9uIGNoYXJhY3RlciAoc2VlCisgICAgICAgICAg WzQ1Ml1Vc2luZyBDLUtlcm1pdCwgMm5kIEVkaXRpb24sIHAuMzMpLgorCisgICBHRVQgL0NPTU1B TkQgcmVtb3RlLWZpbGUgY29tbWFuZAorICAgR0VUIC9DT01NQU5EIC9BUy1OQU1FOmNvbW1hbmQg cmVtb3RlLWZpbGUKKyAgIENHRVQgcmVtb3RlLWZpbGUgY29tbWFuZAorICAgICAgICAgIFRoaXMg Y29tbWFuZCB0ZWxscyB0aGUgS2VybWl0IGNsaWVudCB0byBzZW5kIGEgR0VUIHJlcXVlc3QgZm9y CisgICAgICAgICAgdGhlIGdpdmVuIHJlbW90ZSBmaWxlIHRvIGEgS2VybWl0IHNlcnZlci4gVW5s aWtlIEdFVCwgaG93ZXZlciwKKyAgICAgICAgICB0aGUgaW5jb21pbmcgbWF0ZXJpYWwgaXMgd3Jp dHRlbiB0byBhIGNvbW1hbmQsIHJhdGhlciB0aGFuIHRvIGEKKyAgICAgICAgICBmaWxlLiBJZiB0 aGUgcmVtb3RlLWZpbGUgb3IgdGhlIGNvbW1hbmQgY29udGFpbiBzcGFjZXMsIHRoZXkKKyAgICAg ICAgICBtdXN0IGJlIGVuY2xvc2VkIGluIGJyYWNlcy4gVGhlIHNhbWUgY2F1dGlvbnMgYWJvdXQg dGhlIGNvbW1hbmQKKyAgICAgICAgICBhcHBseSBhcyBmb3IgQ1JFQ0VJVkUuCisKKyAgIEV4YW1w bGVzIChmb3IgVU5JWCk6CisKKyAgIEdFVCAvQ09NTUFORCBvb2ZhLnR4dCBzb3J0IC1yID4gb29m YS5uZXcKKyAgIEdFVCAvQ09NTUFORCB7b29mYS50eHR9IHtzb3J0IC1yID4gb29mYS5uZXd9Cisg ICBDR0VUIG9vZmEudHh0IHNvcnQgLXIgPiBvb2ZhLm5ldworICAgQ0dFVCB7b29mYS50eHR9IHtz b3J0IC1yID4gb29mYS5uZXd9CisgICAgICAgICAgVGhlc2UgZm91ciBhcmUgZXF1aXZhbGVudC4g RWFjaCBvZiB0aGVtIHJlcXVlc3RzIHRoZSBzZXJ2ZXIgdG8KKyAgICAgICAgICBzZW5kIGl0cyAi b29mYS50eHQiIGZpbGUsIGFuZCBhcyBpdCBhcnJpdmVzLCBpdCBpcyBzb3J0ZWQgaW4KKyAgICAg ICAgICByZXZlcnNlIG9yZGVyIGFuZCB3cml0dGVuIHRvICJvb2ZhLm5ldyIuCisKKyAgIEdFVCAv Q09NTUFORCB7cHJvZmlsZSBleGVjIGF9IGxwcgorICAgR0VUIC9DT01NQU5EIHtwcm9maWxlIGV4 ZWMgYX0ge2xwcn0KKyAgIEdFVCAvQ09NTUFORCAvQVMtTkFNRTpscHIge3Byb2ZpbGUgZXhlYyBh fQorICAgR0VUIC9DT01NQU5EIC9BUy1OQU1FOntscHJ9IHtwcm9maWxlIGV4ZWMgYX0KKyAgIEdF VCAvQ09NTUFORCAvQVM6bHByIHtwcm9maWxlIGV4ZWMgYX0KKyAgIENHRVQge3Byb2ZpbGUgZXhl YyBhfSBscHIKKyAgIENHRVQge3Byb2ZpbGUgZXhlYyBhfSB7bHByfQorICAgICAgICAgIEhlcmUg dGhlIHJlbW90ZSBmaWxlbmFtZSBjb250YWlucyBzcGFjZXMgc28gaXQgTVVTVCBiZSBlbmNsb3Nl ZAorICAgICAgICAgIGluIGJyYWNlcy4gQXMgaXQgYXJyaXZlcyBpdCBpcyBzZW50IHRvIHRoZSBs cHIgcHJvZ3JhbSBmb3IKKyAgICAgICAgICBwcmludGluZy4gQnJhY2VzIGFyZSBvcHRpb25hbCBh cm91bmQgImxwciIgc2luY2UgaXQgY29udGFpbnMgbm8KKyAgICAgICAgICBzcGFjZXMuCisKKyAg IEdFVCAvQ09NTUFORCAqLnR4dCB7Y2F0ID4+IG5ldy50eHR9CisgICBHRVQgL0FTLU5BTUU6e2Nh dCA+PiBuZXcudHh0fSAvQ09NTUFORCAqLnR4dAorICAgQ0dFVCAqLnR4dCB7Y2F0ID4+IG5ldy50 eHR9CisgICAgICAgICAgVGhpcyBnZXRzIGFsbCB0aGUgIi50eHQiIGZpbGVzIGZyb20gdGhlIHNl cnZlciBhbmQgY29uY2F0ZW5hdGVzCisgICAgICAgICAgdGhlbSBhbGwgaW50byBhIHNpbmdsZSAi bmV3LnR4dCIgZmlsZSBvbiB0aGUgY2xpZW50LgorCisgICBHRVQgL0NPTU1BTkQgKi50eHQge2Vj aG8gXHYoZmlsZW5hbWUpPj5uZXcudHh0O2NhdD4+bmV3LnR4dH0KKyAgIENHRVQgKi50eHQge2Vj aG8gXHYoZmlsZW5hbWUpPj5uZXcudHh0O2NhdD4+bmV3LnR4dH0KKyAgICAgICAgICBBcyBhYm92 ZSwgYnV0IGluc2VydHMgZWFjaCBmaWxlJ3MgbmFtZSBiZWZvcmUgaXRzIGNvbnRlbnRzLgorCis0 LjIuMy4gVXNpbmcgRmlsZS1UcmFuc2ZlciBGaWx0ZXJzCisKKyAgIFRoZSBjb21tYW5kcyBkZXNj cmliZWQgaW4gWzQ1M11TZWN0aW9uIDQuMi4yIGxldCB5b3Ugc2VuZCB0aGUgb3V0cHV0IG9mCisg ICBhIGNvbW1hbmQsIG9yIHJlY2VpdmUgZGF0YSBpbnRvIGEgY29tbWFuZC4gQnV0IHdoYXQgaWYg eW91IHdhbnQgdG8KKyAgIHNwZWNpZnkgcHJlcHJvY2Vzc2luZyBmb3IgZmlsZXMgdGhhdCB5b3Ug c2VuZCwgb3IgcG9zdHByb2Nlc3Npbmcgb2YKKyAgIGZpbGVzIHRoYXQgeW91IHJlY2VpdmUsIGV2 ZW4gd2hlbiBtdWx0aXBsZSBmaWxlcyBhcmUgaW52b2x2ZWQ/IEZvciB0aGlzCisgICB5b3UgbmVl ZCBhIHdheSB0byBzcGVjaWZ5IHNlbmQgYW5kIHJlY2VpdmUgZmlsdGVycy4gVGhlIGNvbW1hbmRz IGFyZQorICAgU0VUIFNFTkQgRklMVEVSIGFuZCBTRVQgUkVDRUlWRSBGSUxURVI7IFNIT1cgUFJP VE9DT0wgZGlzcGxheXMgdGhlCisgICBjdXJyZW50IHNldHRpbmdzLgorCis0LjIuMy4xLiBUaGUg U0VORCBGaWx0ZXIKKworICAgU0VUIFNFTkQgRklMVEVSIFsgY29tbWFuZCBdCisgICAgICAgICAg VGhpcyBjb21tYW5kIHNwZWNpZmllcyBhIGNvbW1hbmQgdG8gYmUgcnVuIG9uIGFueSBmaWxlIHRo YXQgeW91CisgICAgICAgICAgU0VORCAob3IgTU9WRSwgTVNFTkQsIGV0YykuIEl0IGFsc28gYXBw bGllcyB0byBmaWxlcyBzZW50IHdoZW4KKyAgICAgICAgICBpbiBzZXJ2ZXIgbW9kZSwgaW4gcmVz cG9uc2UgdG8gR0VUIGNvbW1hbmRzLCBidXQgbm90IHRvIHRoZQorICAgICAgICAgIHJlc3VsdHMg b2YgUkVNT1RFIGNvbW1hbmRzIGxpa2UgUkVNT1RFIERJUkVDVE9SWSwgUkVNT1RFIFRZUEUsCisg ICAgICAgICAgUkVNT1RFIEhPU1QsIGV0Yy4gVGhlIGNvbW1hbmQgbWF5IGJlLCBidXQgbmVlZCBu b3QgYmUsIGVuY2xvc2VkCisgICAgICAgICAgaW4gYnJhY2VzOyBpZiBpdCBpcywgdGhlIGJyYWNl cyBhcmUgc3RyaXBwZWQgYmVmb3JlIHVzZS4gVGhlCisgICAgICAgICAgb3V0cHV0IG9mIHRoaXMg Y29tbWFuZCBpcyBzZW50LCByYXRoZXIgdGhhbiB0aGUgZmlsZSBpdHNlbGYuIFRoZQorICAgICAg ICAgIGN1cnJlbnQgRklMRSBUWVBFIHNldHRpbmcgKFRFWFQgb3IgQklOQVJZKSBhcHBsaWVzIHRv IHRoZSBvdXRwdXQKKyAgICAgICAgICBvZiB0aGUgY29tbWFuZC4gVGhlIGNvbW1hbmQgbXVzdCBj b250YWluIGF0IGxlYXN0IG9uZSBpbnN0YW5jZQorICAgICAgICAgIG9mIFx2KGZpbGVuYW1lKSwg Zm9yIHdoaWNoIHRoZSBuYW1lIG9mIHRoZSBhY3R1YWwgZmlsZSBpcworICAgICAgICAgIHN1YnN0 aXR1dGVkLiBJZiB0aGUgY29tbWFuZCBpcyBvbWl0dGVkLCB0aGUgc2VuZCBmaWx0ZXIgaXMKKyAg ICAgICAgICByZW1vdmVkIGFuZCBmaWxlcyBhcmUgc2VudCBpbiB0aGUgbm9ybWFsIG1hbm5lci4K KworICAgVGhlIFNFVCBTRU5EIEZJTFRFUiBzZXRzIHVwIGEgImdsb2JhbCIgZmlsdGVyIC0tIHRo YXQgaXMsIG9uZSB0aGF0CisgICBhcHBsaWVzIHRvIGFsbCBzdWJzZXF1ZW50IGZpbGUtc2VuZGlu ZyBjb21tYW5kcyB1bnRpbCB5b3UgY2hhbmdlIG9yCisgICByZW1vdmUgaXQuIFlvdSBjYW4gYWxz byBzcGVjaWZ5IGEgImxvY2FsIiBmaWx0ZXIgdG8gYmUgdXNlZCBpbiBhCisgICBzcGVjaWZpYyBm aWxlLXNlbmRpbmcgY29tbWFuZCBieSB1c2luZyB0aGUgL0ZJTFRFUiBzd2l0Y2ggKHNlZQorICAg WzQ1NF1TZWN0aW9uIDEuNSk7IGZvciBleGFtcGxlOgorCisgIFNFTkQgL0ZJTFRFUjpjb21tYW5k IFsgb3RoZXItc3dpdGNoZXMgXSBmaWxlbmFtZQorCisgICBCZXNpZGVzIFx2KGZpbGVuYW1lKSwg eW91IGNhbiBpbmNsdWRlIGFueSBvdGhlciBzY3JpcHQgcHJvZ3JhbW1pbmcKKyAgIG5vdGF0aW9u IGluIHRoZSBzZW5kIGZpbHRlcjogdmFyaWFibGUgbmFtZXMsIGFycmF5IHJlZmVyZW5jZXMsIGNh bGxzIHRvCisgICBidWlsdC1pbiBzdHJpbmcgb3Igb3RoZXIgZnVuY3Rpb25zLCBhbmQgc28gb24u IFRoZXNlIGFyZSBldmFsdWF0ZWQKKyAgIGR1cmluZyBmaWxlIHRyYW5zZmVyLCBOT1QgZHVyaW5n IHBhcnNpbmcsIGFuZCB0aGV5IGFyZSBldmFsdWF0ZWQKKyAgIHNlcGFyYXRlbHkgZm9yIGVhY2gg ZmlsZS4KKworICAgV2hlbiB0aGUgU0VORCBvciBNT1ZFIChTRU5EIC9ERUxFVEUpIGNvbW1hbmQg aXMgdXNlZCB3aXRoIGEgc2VuZAorICAgZmlsdGVyLCB0aGUgb3V0cHV0IGZyb20gdGhlIGZpbHRl ciBpcyBzZW50IHVuZGVyIHRoZSBmaWxlJ3Mgb3JpZ2luYWwKKyAgIG5hbWUgdW5sZXNzIHlvdSBz cGVjaWZ5IGFuICJhcy1uYW1lIiBvciB0ZW1wbGF0ZS4gVGhlIEF0dHJpYnV0ZSBwYWNrZXQKKyAg IChpZiBhbnkpIGNvbnRhaW5zIHRoZSBvcmlnaW5hbCBmaWxlJ3MgYXR0cmlidXRlcyAoc2l6ZSwg Y3JlYXRpb24gZGF0ZSwKKyAgIGV0YykuIFNvIChmb3IgZXhhbXBsZSkgaWYgdGhlIGZpbHRlciBj aGFuZ2VzIHRoZSBmaWxlJ3Mgc2l6ZSwgdGhlCisgICBwcm9ncmVzcyB0aGVybW9tZXRlciBtaWdo dCBiZSB3cm9uZy4gKFdlIGNhbid0IHNlbmQgdGhlIHNpemUgb2YgdGhlCisgICBvdXRwdXQgZnJv bSB0aGUgZmlsdGVyLCBiZWNhdXNlIGl0IGlzIG5vdCBrbm93biB1bnRpbCB0aGUgdHJhbnNmZXIg aXMKKyAgIGZpbmlzaGVkLikgSWYgeW91IHByZWZlciB0aGF0IHRoZSBzaXplIG5vdCBiZSBzZW50 LCB1c2UgInNldCBhdHRyaWJ1dGVzCisgICBzaXplIG9mZiIuCisKKyAgIFlvdSBjYW4gbm90IHVz ZSBzZW5kIGZpbHRlcnMgd2l0aCBSRVNFTkQgKFNFTkQgL1JFQ09WRVIpIG9yIFBTRU5EIChTRU5E CisgICAvU1RBUlQpLgorCisgICBFeGFtcGxlcyBmb3IgdGV4dCBtb2RlOgorCisgICBTRVQgU0VO RCBGSUxURVIgc29ydCAtciBcdihmaWxlbmFtZSkgOyBCcmFjZXMgbWF5IGJlIG9taXR0ZWQKKyAg IFNFVCBTRU5EIEZJTFRFUiB7c29ydCAtciBcdihmaWxlbmFtZSl9IDsgQnJhY2VzIG1heSBiZSBp bmNsdWRlZAorICAgU0VORCAqLnR4dAorICAgICAgICAgIFRoaXMgc2VuZHMgZXZlcnkgZmlsZSBp biB0aGUgY3VycmVudCBkaXJlY3Rvcnkgd2hvc2UgbmFtZSBlbmRzCisgICAgICAgICAgd2l0aCAi LnR4dCIgdW5kZXIgaXRzIG93biBuYW1lLCBidXQgd2l0aCBpdHMgbGluZXMgc29ydGVkIGluCisg ICAgICAgICAgcmV2ZXJzZSBvcmRlci4KKworICAgU0VORCAvRklMVEVSOntzb3J0IC1yIFx2KGZp bGVuYW1lKX0gKi50eHQKKyAgICAgICAgICBTYW1lIGFzIGFib3ZlLCBidXQgdGhlIGZpbHRlciBh cHBsaWVzIG9ubHkgdG8gdGhpcyBTRU5EIGNvbW1hbmQuCisgICAgICAgICAgQnJhY2VzIGFyZSBy ZXF1aXJlZCBpbiB0aGlzIGNhc2UuCisKKyAgIFNFVCBTRU5EIEZJTFRFUiB7c29ydCAtciBcdihm aWxlbmFtZSl9CisgICBTRU5EIG9vZmEudHh0IHJldmVyc2UudHh0CisgICAgICAgICAgU2VuZHMg dGhlIG9vZmEudHh0IGZpbGUgd2l0aCBpdHMgbGluZXMgc29ydGVkIGluIHJldmVyc2Ugb3JkZXIK KyAgICAgICAgICB1bmRlciB0aGUgbmFtZSAicmV2ZXJzZS50eHQiLgorCisgICBTRVQgU0VORCBG SUxURVIge3NvcnQgLXIgXHYoZmlsZW5hbWUpfQorICAgU0VORCBvb2ZhLiogXHYoZmlsZW5hbWUp LnJldmVyc2UKKyAgICAgICAgICBTZW5kcyBhbGwgdGhlIG9vZmEuKiBmaWxlcyB3aXRoIHRoZWly IGxpbmVzIHNvcnRlZCBpbiByZXZlcnNlCisgICAgICAgICAgb3JkZXI7IGVhY2ggZmlsZSBpcyBz ZW50IHVuZGVyIGl0cyBvd24gbmFtZSBidXQgd2l0aCAiLnJldmVyc2UiCisgICAgICAgICAgYXBw ZW5kZWQgdG8gaXQuCisKKyAgIFNFVCBTRU5EIEZJTFRFUiB7dHIgIlthLXpdIiAiW0EtWl0iIDwg XHYoZmlsZW5hbWUpfQorICAgU0VORCAqLnR4dAorICAgICAgICAgIFNlbmRzIGFsbCAiLnR4dCIg ZmlsZXMgdW5kZXIgdGhlaXIgb3duIG5hbWVzLCBidXQgdXBwZXJjYXNpbmcKKyAgICAgICAgICB0 aGVpciBjb250ZW50cy4KKworICAgTm90ZSB0aGF0IHRoZSBTRU5EIEZJTFRFUiBhcHBsaWVzIG5v dCBvbmx5IHRvIGZpbGVzIHRoYXQgYXJlIHNlbnQgd2l0aAorICAgU0VORCwgTU9WRSwgTVNFTkQs IGV0YywgYnV0IGFsc28gdG8gZmlsZXMgc2VudCBieSB0aGUgQy1LZXJtaXQgc2VydmVyCisgICBp biByZXNwb25zZSB0byBHRVQgcmVxdWVzdHMuCisKKyAgIEV4YW1wbGVzIGZvciBiaW5hcnkgbW9k ZToKKworICAgU0VUIFNFTkQgRklMVEVSIHtnemlwIC1jIFx2KGZpbGVuYW1lKX0KKyAgIFNFTkQg L0JJTkFSWSBvb2ZhLnR4dCBvb2ZhLnR4dC5negorICAgICAgICAgIFNlbmRzIHRoZSBvb2ZhLnR4 dCBmaWxlLCBjb21wcmVzc2VkIGJ5IGd6aXAsIGFzIG9vZmEudHh0Lmd6LgorCisgICBTRU5EIC9C SU5BUlkgL0ZJTFRFUjp7Z3ppcCAtYyBcdihmaWxlbmFtZSl9IG9vZmEudHh0IG9vZmEudHh0Lmd6 CisgICAgICAgICAgQXMgYWJvdmUsIGJ1dCB0aGUgZmlsdGVyIGFwcGxpZXMgb25seSB0byB0aGlz IFNFTkQgY29tbWFuZC4KKworICAgU0VUIFNFTkQgRklMVEVSIHtnemlwIC1jIFx2KGZpbGVuYW1l KX0KKyAgIFNFTkQgL0JJTkFSWSBvb2ZhLiogXGZ1cHBlcihccmVwbGFjZShcdihmaWxlbmFtZSks LixfKSkuR1oKKyAgICAgICAgICBTZW5kcyBhbGwgdGhlIG9vZmEuKiBmaWxlcywgY29tcHJlc3Nl ZCBieSBnemlwLCBlYWNoIHVuZGVyIGl0cworICAgICAgICAgIG93biBuYW1lLCBidXQgd2l0aCB0 aGUgbmFtZSB1cHBlcmNhc2VkLCBhbGwgcGVyaW9kcyB3aXRoaW4gdGhlCisgICAgICAgICAgbmFt ZSBjb252ZXJ0ZWQgdG8gdW5kZXJzY29yZXMsIGFuZCAiLkdaIiBhcHBlbmRlZCB0byBpdC4gU28s IGZvcgorICAgICAgICAgIGV4YW1wbGUsICJvb2ZhLnR4dCIgaXMgc2VudCBhcyAiT09GQV9UWFQu R1oiLgorCisgICBJbiB0aGUgZ3ppcCBleGFtcGxlcywgbm90ZSB0aGF0IHRoZSBhbW91bnQgb2Yg ZGF0YSB0aGF0IGlzIHNlbnQgaXMKKyAgIG5vcm1hbGx5IGxlc3MgdGhhbiB0aGUgb3JpZ2luYWwg ZmlsZSBzaXplIGJlY2F1c2UgZ3ppcCBjb21wcmVzc2VzIHRoZQorICAgZmlsZS4gQnV0IEtlcm1p dCBzZW5kcyB0aGUgb3JpZ2luYWwgZmlsZSBzaXplIGFoZWFkIGluIHRoZSBhdHRyaWJ1dGUKKyAg IHBhY2tldCBhbnl3YXkgKHVubGVzcyB5b3UgdGVsbCBpdCBub3QgdG9vKS4gVGh1cyB0aGUgdHJh bnNmZXIgd2lsbAorICAgcHJvYmFibHkgYXBwZWFyIHRvIHRlcm1pbmF0ZSBlYXJseSwgZS5nLiB3 aGVuIHRoZSByZWNlaXZlcidzCisgICBmaWxlLXRyYW5zZmVyIGRpc3BsYXkgdGhlcm1vbWV0ZXIg aXMgb25seSBhdCA0MCUuIElmIHRoaXMgYW5ub3lzIHlvdSwKKyAgIHRlbGwgS2VybWl0IHRvICJz ZXQgYXR0cmlidXRlIGxlbmd0aCBvZmYiLiBPbiB0aGUgb3RoZXIgaGFuZCwgeW91IGNhbgorICAg dXNlIHRoZSBmaW5hbCBwb3NpdGlvbiBvZiB0aGUgdGhlcm1vbWV0ZXIgYXMgYSBtZWFzdXJlIG9m IHRoZQorICAgZWZmZWN0aXZlbmVzcyBvZiBjb21wcmVzc2lvbi4KKworNC4yLjMuMi4gVGhlIFJF Q0VJVkUgRmlsdGVyCisKKyAgIFNFVCBSRUNFSVZFIEZJTFRFUiBbIGNvbW1hbmQgXQorICAgICAg ICAgIFRoaXMgY29tbWFuZCBzcGVjaWZpZXMgdGhhdCB0aGUgZ2l2ZW4gY29tbWFuZCB3aWxsIGJl IHJ1biBvbiBhbnkKKyAgICAgICAgICBmaWxlIHRoYXQgaXMgcmVjZWl2ZWQgYmVmb3JlIGl0IGlz IHdyaXR0ZW4gdG8gZGlzay4gVGhlIGNvbW1hbmQKKyAgICAgICAgICBtYXkgYmUsIGJ1dCBuZWVk IG5vdCBiZSwgZW5jbG9zZWQgaW4gYnJhY2VzOyBpZiBpdCBpcyB0aGUgYnJhY2VzCisgICAgICAg ICAgYXJlIHN0cmlwcGVkIGJlZm9yZSB1c2UuIFRoZSBmb2xsb3dpbmcgdHdvIGNvbW1hbmRzIGFy ZQorICAgICAgICAgIGVxdWl2YWxlbnQ6CisKKyAgU0VUIFJFQ0VJVkUgRklMVEVSIHNvcnQgLXIg PiBcdihmaWxlbmFtZSkKKyAgU0VUIFJFQ0VJVkUgRklMVEVSIHtzb3J0IC1yID4gXHYoZmlsZW5h bWUpfQorCisgICBUaGUgUkVDRUlWRSBmaWx0ZXIgY29tbWFuZCBtYXkgY29udGFpbiBhICJcdihm aWxlbmFtZSkiIHNlcXVlbmNlIHRvIGJlCisgICByZXBsYWNlZCBieSB0aGUgaW5jb21pbmcgZmls ZW5hbWUgZnJvbSB0aGUgZmlsZSBoZWFkZXIgcGFja2V0LCBidXQgaXQKKyAgIGlzIG5vdCByZXF1 aXJlZC4gSG93ZXZlciB5b3UgbXVzdCB1c2UgaXQgd2hlbmV2ZXIgeW91ciBmaWx0ZXIgd291bGQK KyAgIG5vcm1hbGx5IHdyaXRlIHRvIFN0ZG91dCwgb3RoZXJ3aXNlIGl0cyBvdXRwdXQgd2lsbCBi ZSBsb3N0LgorCisgICBUaGUgUkVDRUlWRSBmaWx0ZXIgY29tbWFuZCBtYXkgY29udGFpbiBvbmUg b3IgbW9yZSAiXHYoZmlsZW5hbWUpIgorICAgc2VxdWVuY2UgdG8gYmUgcmVwbGFjZWQgYnkgdGhl IGluY29taW5nIGZpbGVuYW1lIGZyb20gdGhlIGZpbGUgaGVhZGVyCisgICBwYWNrZXQsIGJ1dCBp dCBpcyBub3QgcmVxdWlyZWQuIEhvd2V2ZXIgeW91IG11c3QgdXNlIGl0IHdoZW5ldmVyIHlvdXIK KyAgIGZpbHRlciB3b3VsZCBub3JtYWxseSB3cml0ZSB0byBTdGRvdXQsIG90aGVyd2lzZSBpdHMg b3V0cHV0IHdpbGwgYmUKKyAgIGxvc3QuCisKKyAgIFJFQ0VJVkUgL0ZJTFRFUjpjb21tYW5kIGFu ZCBHRVQgL0ZJTFRFUjpjb21tYW5kIGNhbiBhbHNvIGJlIHVzZWQgdG8KKyAgIHNwZWNpZnkgYSBm aWx0ZXIgdG8gYmUgdXNlZCBmb3Igb25seSBvbmUgZmlsZS10cmFuc2ZlciBvcGVyYXRpb24uCisK KyAgIFVOSVggZXhhbXBsZXMgZm9yIHRleHQgbW9kZToKKworICAgU0VUIFJFQ0VJVkUgRklMVEVS IGxwcgorICAgUkVDRUlWRQorICAgICAgICAgIEFsbCB0aGUgZmlsZXMgdGhhdCBhcmUgcmVjZWl2 ZWQgYXJlIHNlbnQgdG8gdGhlIGRlZmF1bHQgVU5JWAorICAgICAgICAgIHByaW50IHNwb29sZXIu CisKKyAgIFJFQ0VJVkUgL0ZJTFRFUjpscHIKKyAgICAgICAgICBTYW1lIGFzIGFib3ZlLCBleGNl cHQgdGhlIGxwciBmaWx0ZXIgaXMgdXNlZCBvbmx5IHdpdGggdGhpcworICAgICAgICAgIFJFQ0VJ VkUgY29tbWFuZC4KKworICAgUkVDRUlWRSBscHIKKyAgICAgICAgICBUaGlzIGlzIHByb2JhYmx5 IG5vdCB3aGF0IHlvdSB3YW50OyBpdCBjcmVhdGVzIGEgZmlsZSBjYWxsZWQKKyAgICAgICAgICBs cHIuCisKKyAgIFNFVCBSRUNFSVZFIEZJTFRFUiB7c29ydCAtciA+IFx2KGZpbGVuYW1lKX0KKyAg IFJFQ0VJVkUKKyAgICAgICAgICBTdG9yZXMgZWFjaCBpbmNvbWluZyBmaWxlIHdpdGggaXRzIGxp bmVzIHNvcnRlZCBpbiByZXZlcnNlCisgICAgICAgICAgb3JkZXIsIHVuZGVyIGl0cyBvd24gbmFt ZS4KKworICAgUkVDRUlWRSAvRklMVEVSOntzb3J0IC1yID4gXHYoZmlsZW5hbWUpfQorICAgICAg ICAgIEFzIGFib3ZlLCBidXQgdGhlIGZpbHRlciBpcyB1c2VkIG9ubHkgZm9yIHRoaXMgUkVDRUlW RSBjb21tYW5kLgorCisgICBTRVQgUkVDRUlWRSBGSUxURVIgc29ydCAtciA+IFx2KGZpbGVuYW1l KQorICAgUkVDRUlWRSByZXZlcnNlLnR4dAorICAgICAgICAgIFN0b3JlcyBlYWNoIGluY29taW5n IGZpbGUgd2l0aCBpdHMgbGluZXMgc29ydGVkIGluIHJldmVyc2UKKyAgICAgICAgICBvcmRlciwg dW5kZXIgdGhlIG5hbWUgInJldmVyc2UudHh0Ii4gVGhlIGFjdHVhbCByZXN1bHQgZGVwZW5kcwor ICAgICAgICAgIG9uIHRoZSBGSUxFIENPTExJU0lPTiBzZXR0aW5nLiBJZiBpdCBpcyBPVkVSV1JJ VEUgYW5kIG11bHRpcGxlCisgICAgICAgICAgZmlsZXMgYXJyaXZlLCB0aGVuIGVhY2ggaW5jb21p bmcgZmlsZSBkZXN0cm95cyB0aGUgcHJldmlvdXMgb25lLgorICAgICAgICAgIElmIGl0IGlzIEJB Q0tVUCAodGhlIGRlZmF1bHQpLCBmaWxlbmFtZSBjb25mbGljdHMgYXJlIHJlc29sdmUgYnkKKyAg ICAgICAgICBhZGRpbmcgInZlcnNpb24gbnVtYmVycyIgdG8gdGhlIGZpbGVuYW1lczogcmV2ZXJz ZS50eHQsCisgICAgICAgICAgcmV2ZXJzZS50eHQufjF+LCByZXZlcnNlLnR4dC5+Mn4sIGV0Yy4K KworICAgU0VUIFJFQ0VJVkUgRklMVEVSIHNvcnQgLXIgPiBcdihmaWxlbmFtZSkKKyAgIFJFQ0VJ VkUgXHYoZmlsZW5hbWUpLnJldmVyc2UKKyAgICAgICAgICBTdG9yZXMgZWFjaCBpbmNvbWluZyBm aWxlIHdpdGggaXRzIGxpbmVzIHNvcnRlZCBpbiByZXZlcnNlCisgICAgICAgICAgb3JkZXIsIHVu ZGVyIHRoZSBuYW1lIGl0IGFycml2ZWQgd2l0aCwgYnV0IHdpdGggIi5yZXZlcnNlIgorICAgICAg ICAgIGFwcGVuZGVkIHRvIGl0LgorCisgICBTRVQgUkVDRUlWRSBGSUxURVIgc29ydCAtciA+IFx2 KGZpbGVuYW1lKQorICAgUkVDRUlWRSBcZmxvd2VyKFx2KGZpbGVuYW1lKSkucmV2ZXJzZQorICAg ICAgICAgIExpa2UgdGhlIHByZXZpb3VzIGV4YW1wbGUsIGJ1dCBlbnN1cmVzIHRoYXQgdGhlIGZp bGVuYW1lIGlzCisgICAgICAgICAgbG93ZXJjYXNlLgorCisgICAgICAgICAgRXhhbXBsZXMgZm9y IGJpbmFyeSBtb2RlOgorCisgICBTRVQgUkVDRUlWRSBGSUxURVIgZ3VuemlwIC1jID4gXHYoZmls ZW5hbWUpCisgICBSRUNFSVZFCisgICAgICAgICAgVGhpcyByZWNlaXZlcyBvbmUgb3IgbW9yZSBw cmVzdW1hYmx5IGNvbXByZXNzZWQgZmlsZSBhbmQKKyAgICAgICAgICB1bmNvbXByZXNzZXMgZWFj aCBvbmUgaW50byBhIGZpbGUgaGF2aW5nIHRoZSBzYW1lIG5hbWUgaXQgd2FzCisgICAgICAgICAg c2VudCB3aXRoLiBGb3IgZXhhbXBsZSwgaWYgdGhlIGZpbGUgaXMgc2VudCB3aXRoIHRoZSBuYW1l CisgICAgICAgICAgT09GQS5UWFQuR1osIGl0IGlzIHN0b3JlZCB3aXRoIHRoYXQgbmFtZSwgZXZl biBhZnRlcgorICAgICAgICAgIGRlY29tcHJlc3Npb24uCisKKyAgIFNFVCBSRUNFSVZFIEZJTFRF UiBndW56aXAgLWMgPiBcdihmaWxlbmFtZSkKKyAgIFJFQ0VJVkUgXGZsb3dlcihcZnN1YnN0cmlu ZyhcdihmaWxlbmFtZSksMSxcZmxlbmd0aChcdihmaWxlbmFtZSkpLTMpKQorICAgICAgICAgIExp a2UgdGhlIHByZXZpb3VzIGV4YW1wbGUsIGJ1dCB0aGUgcmVzdWx0aW5nIGZpbGVuYW1lIGhhcyBp dHMKKyAgICAgICAgICByaWdodG1vc3QgdGhyZWUgY2hhcmFjdGVycyByZW1vdmVkIGZyb20gaXQg YW5kIHRoZSByZW1haW5kZXIgaXMKKyAgICAgICAgICBsb3dlcmNhc2VkLiBTbyBpZiB0aGUgaW5j b21pbmcgZmlsZW5hbWUgaXMgT09GQS5UWFQuR1osIGl0IGlzCisgICAgICAgICAgc3RvcmVkIGFz IG9vZmEudHh0IGFmdGVyIGRlY29tcHJlc3Npb24uCisKKyAgIE9mIGNvdXJzZSB5b3UgZG9uJ3Qg d2FudCB0byB0eXBlIHN1Y2ggbG9uZyBoaWRlb3VzIGNvbW1hbmRzLCBzbyB3ZSBoYXZlCisgICBh bHNvIGludHJvZHVjZWQgc2V2ZXJhbCBuZXcgZnVuY3Rpb25zOgorCisgICBcZnN0cmlweChzdHJp bmdbLGNoYXJhY3Rlcl0pCisgICAgICAgICAgVGhpcyBmdW5jdGlvbiByZW1vdmVzIHRoZSByaWdo dG1vc3Qgc2VnbWVudCBvZiB0aGUgc3RyaW5nIHRoYXQKKyAgICAgICAgICBzdGFydHMgd2l0aCB0 aGUgZ2l2ZW4gY2hhcmFjdGVyLiBJZiBubyBjaGFyYWN0ZXIgaXMgZ2l2ZW4sCisgICAgICAgICAg cGVyaW9kICguKSBpcyB1c2VkLiBUaHVzIGl0IGlzIG1vc3QgY29udmVuaWVudGx5IHVzZWQgZm9y CisgICAgICAgICAgc3RyaXBwaW5nIHRoZSBleHRlbnNpb24gZnJvbSBhIGZpbGVuYW1lIChvciB0 aGUgZGVjaW1hbCBwb3J0aW9uCisgICAgICAgICAgZnJvbSBhIGZsb2F0aW5nLXBvaW50IG51bWJl ciB3cml0dGVuIGluIFVTL1VLIHN0eWxlKS4gRXhhbXBsZXM6CisKKyAgIFxmc3RyaXB4KE9PRkEu VFhULkdaKSAgICAgICAgICAgICA9PiBPT0ZBLlRYVAorICAgXGZzdHJpcHgoT09GQS5UWFQuR1os LikgICAgICAgICAgID0+IE9PRkEuVFhUCisgICBcZnN0cmlweChPT0ZBLlRYVC5HWixYKSAgICAg ICAgICAgPT4gT09GQS5UCisgICBcZnN0cmlweChcZnN0cmlweChPT0ZBLlRYVC5HWikpICAgPT4g T09GQQorICAgXGZzdHJpcHgoJDEwMC4wMCkgICAgICAgICAgICAgICAgID0+ICQxMDAKKworICAg XGZzdHJpcG4oc3RyaW5nLG51bWJlcikKKyAgICAgICAgICBSZW1vdmVzIHRoZSByaWdodG1vc3Qg bnVtYmVyIGNoYXJhY3RlcnMgZnJvbSB0aGUgc3RyaW5nLgorICAgICAgICAgIEV4YW1wbGVzOgor CisgICBcZnN0cmlwbihPT0ZBLlRYVC5HWikgICAgICAgICAgICAgPT4gT09GQS5UWFQuR1oKKyAg IFxmc3RyaXBuKE9PRkEuVFhULkdaLDMpICAgICAgICAgICA9PiBPT0ZBLlRYVAorICAgXGZzdHJp cG4oT09GQS5UWFQuR1osNykgICAgICAgICAgID0+IE9PRkEKKworICAgXGZzdHJpcGIoc3RyaW5n WyxjMVssYzJdXSkKKyAgICAgICAgICBTdHJpcHMgZW5jbG9zaW5nIG1hdGNoaW5nIGJyYWNlcywg YnJhY2tldHMsIHBhcmVudGhlc2VzLCBvcgorICAgICAgICAgIHF1b3RlcyBmcm9tIHRoZSBzdHJp bmcuIFRoZSBzZWNvbmQgYXJndW1lbnQsIGMxLCBzcGVjaWZpZXMgd2hpY2gKKyAgICAgICAgICBr aW5kIG9mIGVuY2xvc3VyZSB0byBsb29rIGZvcjsgaWYgbm90IHNwZWNpZmllZCwgYW55IGVuY2xv c2luZworICAgICAgICAgICgpLCBbXSwgPD4sIHt9LCAiIiwgJycsIG9yIGAnIGFyZSByZW1vdmVk LiBJZiBjMSBpcyBzcGVjaWZpZWQKKyAgICAgICAgICBhbmQgYzIgaXMgbm90LCB0aGVuIGlmIGMx IGlzIGFuIG9wZW5pbmcgYnJhY2UsIGJyYWNrZXQsIG9yCisgICAgICAgICAgcGFyZW50aGVzaXMs IHRoZSBtYXRjaGluZyBjbG9zaW5nIG9uZSBpcyBzdXBwbGllZCBhdXRvbWF0aWNhbGx5CisgICAg ICAgICAgYXMgYzIuIElmIGJvdGggYzEgYW5kIGMyIGFyZSBzcGVjaWZpZWQsIHRoZW4gdG8gYmUg c3RyaXBwZWQgdGhlCisgICAgICAgICAgc3RyaW5nIG11c3QgYmVnaW4gd2l0aCBjMSBhbmQgZW5k IHdpdGggYzIuIElmIHRoZSBzdHJpbmcgaXMgbm90CisgICAgICAgICAgZW5jbG9zZWQgaW4gdGhl IGluZGljYXRlZCBtYW5uZXIsIHRoZSByZXN1bHQgaXMgdGhlIG9yaWdpbmFsCisgICAgICAgICAg c3RyaW5nLiBFeGFtcGxlczoKKworICAgXGZzdHJpcGIoImFiYyIpICAgICAgICAgICAgICAgICAg ID0+IGFiYworICAgXGZzdHJpcGIoW2FiY10pICAgICAgICAgICAgICAgICAgID0+IGFiYworICAg XGZzdHJpcGIoW2FiYykgICAgICAgICAgICAgICAgICAgID0+IFthYmMKKyAgIFxmc3RyaXBiKDxh YmM+KSAgICAgICAgICAgICAgICAgICA9PiBhYmMKKyAgIFxmc3RyaXBiKDxhYmM+LFspICAgICAg ICAgICAgICAgICA9PiA8YWJjPgorICAgXGZzdHJpcGIoKGFiYykpICAgICAgICAgICAgICAgICAg ID0+IGFiYworICAgXGZzdHJpcGIoKGFiYyksWykgICAgICAgICAgICAgICAgID0+IChhYmMpCisg ICBcZnN0cmlwYigoYWJjKSx7KH0pICAgICAgICAgICAgICAgPT4gYWJjCisgICBcZnN0cmlwYigr YWJjKykgICAgICAgICAgICAgICAgICAgPT4gK2FiYysKKyAgIFxmc3RyaXBiKCthYmMrLCspICAg ICAgICAgICAgICAgICA9PiBhYmMKKyAgIFxmc3RyaXBiKCthYmMrLCssXikgICAgICAgICAgICAg ICA9PiArYWJjKworICAgXGZzdHJpcGIoK2FiY14sKyxeKSAgICAgICAgICAgICAgID0+IGFiYwor ICAgXGZzdHJpcGIoJ2FiYycpICAgICAgICAgICAgICAgICAgID0+IGFiYworICAgXGZzdHJpcGIo YGFiYycpICAgICAgICAgICAgICAgICAgID0+IGFiYworICAgXGZzdHJpcGIoYGBhYmMnJykgICAg ICAgICAgICAgICAgID0+IGBhYmMnCisgICBcZnN0cmlwYihcZnN0cmlwYihgYGFiYycnKSkgICAg ICAgPT4gYWJjCisKKyAgICAgICAgICBOb3RpY2UgdGhlIHNwZWNpYWwgc3ludGF4IHJlcXVpcmVk IGZvciBpbmNsdWRpbmcgYSBsaXRlcmFsCisgICAgICAgICAgcGFyZW50aGVzaXMgaW4gdGhlIGFy Z3VtZW50IGxpc3QuIEFzIHRoZSBsYXN0IHR3byBleGFtcGxlcworICAgICAgICAgIGlsbHVzdHJh dGUsIFxmc3RyaXBiKCkgc3RyaXBzIG9ubHkgb25lIGxldmVsIGF0IGF0IGEgdGltZTsKKyAgICAg ICAgICBuZXN0aW5nIGNhbiBiZSB1c2VkIHRvIHN0cmlwIGEgc21hbGwgZml4ZWQgbnVtYmVyIG9m IGxldmVsczsKKyAgICAgICAgICBsb29wcyBjYW4gYmUgdXNlZCB0byBzdHJpcCBsYXJnZXIgb3Ig aW5kZXRlcm1pbmF0ZSBudW1iZXJzIG9mCisgICAgICAgICAgbGV2ZWxzLgorCisgICBcZmxvcChz dHJpbmdbLGNoYXJdKQorICAgICAgICAgIFJlbW92ZXMgdGhlIGxlZnRtb3N0IHNlZ21lbnQgb2Yg dGhlIHN0cmluZyB0aGF0IGVuZHMgd2l0aCB0aGUKKyAgICAgICAgICBnaXZlbiBjaGFyYWN0ZXIu IElmIG5vIGNoYXJhY3RlciBpcyBnaXZlbiwgcGVyaW9kICguKSBpcyB1c2VkLgorICAgICAgICAg IEV4YW1wbGVzOgorCisgIFxmbG9wKE9PRkEuVFhULkdaKSAgICAgICAgICAgICAgID0+IFRYVC5H WgorICBcZmxvcChPT0ZBLlRYVC5HWiwuKSAgICAgICAgICAgICA9PiBUWFQuR1oKKyAgXGZsb3Ao T09GQS5UWFQuR1osWCkgICAgICAgICAgICAgPT4gVC5HWgorCisgICAgICAgICAgVG8gcmVtb3Zl IHRoZSBsZWZ0bW9zdCBudW1iZXIgY2hhcmFjdGVycywganVzdCB1c2UKKyAgICAgICAgICBcZnN1 YnN0cmluZyhzLG51bWJlcisxKS4gVG8gcmV0dXJuIHRoZSByaWdodG1vc3QgbnVtYmVyCisgICAg ICAgICAgY2hhcmFjdGVycywgdXNlIFxmcmlnaHQocyxudW1iZXIpLgorCisgICBTbyB0aGUgaGlk ZW91cyBleGFtcGxlOgorCisgIHJlY2VpdmUgXGZsb3dlcihcZnN1YnN0cmluZyhcdihmaWxlbmFt ZSksMSxcZmxlbmd0aChcdihmaWxlbmFtZSkpLTMpKQorCisgICBjYW4gbm93IGJlIHdyaXR0ZW4g YXM6CisKKyAgcmVjZWl2ZSBcZmxvd2VyKFxmc3RyaXB4KFx2KGZpbGVuYW1lKSkpCisKKyAgIFRo YXQgaXMsIHRoZSBmaWxlbmFtZSBzdHJpcHBlZCBvZiBpdHMgZXh0ZW5zaW9uIGFuZCB0aGVuIGxv d2VyY2FzZWQuCisgICBUaGlzIGlzIG5vdCBvbmx5IHNob3J0ZXIgYW5kIGxlc3MgaGlkZW91cywg YnV0IGFsc28gZG9lcyBub3QgZGVwZW5kIG9uCisgICB0aGUgbGVuZ3RoIG9mIHRoZSBleHRlbnNp b24gYmVpbmcgMy4KKworICAgTm90ZSB0aGF0IHdoZW4gYSByZWNlaXZlIGZpbHRlciBpcyBpbiBl ZmZlY3QsIHRoaXMgb3ZlcnJpZGVzIHlvdXIgRklMRQorICAgQ09MTElTSU9OIHNldHRpbmcsIHNp bmNlIEtlcm1pdCBoYXMgbm8gd2F5IG9mIGtub3dpbmcgd2hhdCB0aGUgZmluYWwKKyAgIGRlc3Rp bmF0aW9uIGZpbGVuYW1lIHdpbGwgYmUgKGJlY2F1c2UgaXQgZG9lcyBub3Qga25vdywgYW5kIGNh biBub3QgYmUKKyAgIGV4cGVjdGVkIHRvIGtub3csIHRoZSBzeW50YXggb2YgZXZlcnkgdmVyc2lv biBvZiBldmVyeSBjb21tYW5kIHNoZWxsIG9uCisgICBldmVyeSBwbGF0Zm9ybSBvbiB0aGUgcGxh bmV0KS4KKworNC4yLjQuIEltcGxpY2l0IFVzZSBvZiBQaXBlcworCisgICBJZiB5b3Ugd2lzaCwg Qy1LZXJtaXQgY2FuIGFsc28gZXhhbWluZSBpbmNvbWluZyBmaWxlbmFtZXMgdG8gc2VlIGlmCisg ICB0aGV5IHN0YXJ0IHdpdGggIiEiLCBhbmQgaWYgc28sIHRoZSBzdWJzZXF1ZW50IHRleHQgaXMg dHJlYXRlZCBhcyBhCisgICBjb21tYW5kIHRvIHJlYWQgZnJvbSBvciB3cml0ZSB0by4gRm9yIGV4 YW1wbGUsIGlmIGEgS2VybWl0IGNsaWVudCBpcworICAgZ2l2ZW4gdGhlIGZvbGxvd2luZyBjb21t YW5kOgorCisgIGdldCB7IWZpbmdlciB8IHNvcnR9CisKKyAgIHRoZSBzZXJ2ZXIgb24gdGhlIG90 aGVyIGVuZCwgaWYgaXQgc3VwcG9ydHMgdGhpcyBmZWF0dXJlLCB3aWxsIHJ1biB0aGUKKyAgICJm aW5nZXIiIHByb2dyYW0sIHBpcGUgaXRzIHN0YW5kYXJkIG91dHB1dCB0byB0aGUgInNvcnQiIHBy b2dyYW0sIGFuZAorICAgc2VuZCBzb3J0J3Mgc3RhbmRhcmQgb3V0cHV0IGJhY2sgdG8geW91LiBT aW1pbGFybHksIGlmIHlvdToKKworICBzZW5kIG9vZmEudHh0ICFzb3J0IC1yID4gb29mYS5uZXcK KworICAgb3IsIGVxdWl2YWxlbnRseToKKworICBzZW5kIG9vZmEudHh0IHshc29ydCAtciA+IG9v ZmEubmV3fQorCisgICBvcjoKKworICBzZW5kIC9hcy1uYW1lOnshc29ydCAtciA+IG9vZmEubmV3 fSBvb2ZhLnR4dAorCisgICB0aGlzIGhhcyB0aGUgcmVjZWl2ZXIgc2VuZCB0aGUgY29udGVudHMg b2YgdGhlIGluY29taW5nIG9vZmEudHh0IGZpbGUKKyAgIHRvIHRoZSBzb3J0IHByb2dyYW0sIHdo aWNoIHNvcnRzIHRoZSB0ZXh0IGluIHJldmVyc2Ugb3JkZXIgYW5kIHN0b3JlcworICAgdGhlIHJl c3VsdCBpbiBvb2ZhLm5ldy4KKworICAgVGhpcyB1c2Ugb2YgdGhlIGV4Y2xhbWF0aW9uIG1hcmsg c2hvdWxkIGJlIGZhbWlsaWFyIHRvIFVOSVggdXNlcnMgYXMKKyAgIHRoZSAiYmFuZyIgZmVhdHVy ZSB0aGF0IGxldHMgeW91IHJ1biBhbiBleHRlcm5hbCBhcHBsaWNhdGlvbiBvciBjb21tYW5kCisg ICBmcm9tIHdpdGhpbiBhbm90aGVyIGFwcGxpY2F0aW9uLgorCisgICBLZXJtaXQncyAiYmFuZyIg ZmVhdHVyZSBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LCBzaW5jZSBpdCBpcyBub3QgdW5oZWFyZAor ICAgZm9yIGZpbGVuYW1lcyB0byBhY3R1YWxseSBiZWdpbiB3aXRoICIhIi4gU28gaWYgeW91IHdh bnQgdG8gdXNlIHRoaXMKKyAgIGZlYXR1cmUsIHlvdSBtdXN0IGVuYWJsZSBpdCB3aXRoIHRoZSBm b2xsb3dpbmcgY29tbWFuZDoKKworICAgU0VUIFRSQU5TRkVSIFBJUEVTIHsgT04sIE9GRiB9Cisg ICAgICAgICAgT04gZW5hYmxlcyB0aGUgcmVjb2duaXRpb24gb2YgIiEiIG5vdGF0aW9uIGluIGlu Y29taW5nIGZpbGVuYW1lcworICAgICAgICAgIGR1cmluZyBmaWxlIHRyYW5zZmVyIGFzIGFuIGlu ZGljYXRvciB0aGF0IHRoZSByZW1haW5pbmcgdGV4dCBpcworICAgICAgICAgIHRoZSBuYW1lIG9m IGEgY29tbWFuZC4gT0ZGLCB0aGUgZGVmYXVsdCwgZGlzYWJsZXMgdGhpcyBmZWF0dXJlCisgICAg ICAgICAgYW5kIHVzZXMgdGhlIHRleHQgYXMgYSBmaWxlbmFtZSBpbiB0aGUgbm9ybWFsIGZhc2hp b24uIFRoaXMKKyAgICAgICAgICBjb21tYW5kIGRvZXMgTk9UIGFmZmVjdCBTRU5EIC9DT01NQU5E LCBHRVQgL0NPTU1BTkQsIENTRU5ELCBldGMuCisKKyAgIFNvIHVzaW5nIGEgY29tYmluYXRpb24g b2YgQ1NFTkQgKFNFTkQgL0NPTU1BTkQpIGFuZCB0aGUgImJhbmciIGZlYXR1cmUsCisgICB5b3Ug Y2FuIHRyYW5zZmVyIGEgZGlyZWN0b3J5IHRyZWUgYWxsIGluIG9uZSBjb21tYW5kIChhc3N1bWlu ZyB0aGUKKyAgIHJlbW90ZSBLZXJtaXQgc3VwcG9ydHMgcGlwZSB0cmFuc2ZlcnMgYW5kIGhhcyB0 aGVtIGVuYWJsZWQpOgorCisgIENTRU5EIHt0YXIgY2YgLSAuIHwgZ3ppcCAtY30geyFndW56aXAg LWMgfCB0YXIgeGYgLX0KKworICAgb3I6CisKKyAgU0VORCAvQ09NTUFORDp7dGFyIGNmIC0gLiB8 IGd6aXAgLWN9IC9hczp7IWd1bnppcCAtYyB8IHRhciB4ZiAtfQorCisgICBQYXkgY2xvc2UgYXR0 ZW50aW9uIHRvIHRoZSBzeW50YXguIEJyYWNlcyBhcmUgbmVlZGVkIGFyb3VuZCB0aGUgY29tbWFu ZAorICAgYmVjYXVzZSBpdCBjb250YWlucyBzcGFjZXM7IGJyYWNlcyBhcmUgbmVlZGVkIGFyb3Vu ZCB0aGUgYXMtbmFtZQorICAgYmVjYXVzZSBpdCBlbmRzIHdpdGggIi0iLiBUaGUgYXMtbmFtZSBt dXN0IGJlZ2luIHdpdGggIiEiIG9yIHJlY2VpdmluZworICAgS2VybWl0IHdpbGwgbm90IHJlY29n bml6ZSBpdCBhcyBhIGNvbW1hbmQuIFRoZSBDU0VORCBjb21tYW5kIG11c3QgTk9UCisgICBiZWdp biB3aXRoICIhIiB1bmxlc3MgeW91IGFyZSBydW5uaW5nIGEgY29tbWFuZCB3aG9zZSBuYW1lIHJl YWxseSBkb2VzCisgICBzdGFydCB0aGF0IGNoYXJhY3Rlci4KKworICAgU2ltaWxhcmx5LCB5b3Ug aGF2ZSBhIEtlcm1pdCBzZXJ2ZXIgc2VuZCBhIGRpcmVjdG9yeSB0cmVlIHRvIGJlCisgICB1bnBh Y2tlZCBvbiB0aGUgY2xpZW50IGVuZDoKKworICBDR0VUIHshdGFyIGNmIC0gLiB8IGd6aXAgLWN9 IHtndW56aXAgLWMgfCB0YXIgeGYgLX0KKworICAgb3I6CisKKyAgR0VUIC9DT01NQU5EIHshdGFy IGNmIC0gLiB8IGd6aXAgLWN9IC9hczp7Z3VuemlwIC1jIHwgdGFyIHhmIC19CisKKyAgIE5vdGlj ZSBob3csIGluIHRoaXMgY2FzZSwgdGhlIGJhbmcgaXMgcmVxdWlyZWQgaW4gdGhlIHJlbW90ZSBj b21tYW5kLAorICAgdG8gZGlzdGluZ3Vpc2ggaXQgZnJvbSBhIGZpbGVuYW1lLCBidXQgbm90IGlu IHRoZSBsb2NhbCBjb21tYW5kLCBzaW5jZQorICAgYnkgZGVmaW5pdGlvbiBvZiBDR0VUIChvciBH RVQgL0NPTU1BTkQpLCBpdCBpcyBrbm93biB0byBiZSBhIGNvbW1hbmQuCisKKyAgIFNFTkQgYW5k IFJFQ0VJVkUgRklMVEVScyBzdXBlcnNlZGUgdGhlIGJhbmcgZmVhdHVyZS4gRm9yIGV4YW1wbGUs IGlmIGEKKyAgIGZpbGUgYXJyaXZlcyB1bmRlciB0aGUgbmFtZSAiIWd1bnppcCAtYyB8IHRhciB4 ZiAtIiwgYnV0IHRoZSByZWNlaXZpbmcKKyAgIEtlcm1pdCBhbHNvIGhhcyBiZWVuIGdpdmVuIGEg Y29tbWFuZCBsaWtlOgorCisgIHNldCByZWNlaXZlIGZpbHRlciBzb3J0IC1yID4gXHYoZmlsZW5h bWUpCisKKyAgIHRoZW4gdGhlIGluY29taW5nIGRhdGEgd2lsbCBiZSBzb3J0ZWQgcmF0aGVyIHRo YW4gZ3VuemlwcGVkLgorCisgICBGaW5hbGx5LCBpZiBTRVQgVFJBTlNGRVIgUElQRVMgaXMgT04g KGFuZCBpbiB0aGlzIGNhc2UsIHRoaXMgbXVzdCBiZQorICAgZG9uZSBpbiB5b3VyIEMtS2VybWl0 IGluaXRpYWxpemF0aW9uIGZpbGUpLCB5b3UgY2FuIHNlbmQgZnJvbSBhIHBpcGUgb24KKyAgIHRo ZSBDLUtlcm1pdCBjb21tYW5kIGxpbmU6CisKKyAga2VybWl0IC1zICIhZmluZ2VyIHwgc29ydCAt ciIgLWEgdXNlcmxpc3QKKworICAgSW4gdGhpcyBjYXNlIHRoZSAiZmlsZW5hbWUiIGNvbnRhaW5z IHNwYWNlcyBhbmQgc28gbXVzdCBiZSBxdW90aW5nCisgICB1c2luZyB5b3VyIHNoZWxsJ3MgcXVv dGluZyBydWxlcy4KKworNC4yLjUuIFN1Y2Nlc3MgYW5kIEZhaWx1cmUgb2YgUGlwZWQgQ29tbWFu ZHMKKworICAgQ29tbWFuZHMgb3IgcHJvZ3JhbXMgc3RhcnRlZCBieSBLZXJtaXQgYXMgYSByZXN1 bHQgb2YgQ1NFTkQgb3IgQ1JFQ0VJVkUKKyAgIGNvbW1hbmRzLCBDR0VULCBTRU5EIC9DT01NQU5E LCBSRURJUkVDVCBjb21tYW5kcyAoc2VlIFs0NTVdU2VjdGlvbgorICAgNC4yLjguMiksIGltcGxp Y2l0IHVzZSBvZiBwaXBlcywgUlVOIGNvbW1hbmRzLCBhbmQgc28gZm9ydGgsIHNob3VsZAorICAg cmV0dXJuIHRoZWlyIGV4aXQgc3RhdHVzIGNvZGVzIHRvIHRoZSBLZXJtaXQgY29tbWFuZCB0aGF0 IGNhdXNlZCB0aGVtCisgICB0byBiZSBydW4sIGFuZCB0aGVyZWZvcmUgSUYgU1VDQ0VTUyBhbmQg SUYgRkFJTFVSRSB0ZXN0cyBhZnRlciB0aGVzZQorICAgY29tbWFuZHMgc2hvdWxkIHdvcmsgYXMg ZXhwZWN0ZWQuIEZvciBleGFtcGxlOgorCisgIENTRU5EIGJsYWggPCBmaWxlbmFtZQorCisgICBz aG91bGQgZmFpbCBpZiB0aGVyZSBpcyBubyBjb21tYW5kIGNhbGxlZCAiYmxhaCIgb3IgaWYgdGhl cmUgaXMgbm8gZmlsZQorICAgY2FsbGVkICJmaWxlbmFtZSIuIEhvd2V2ZXIsIHRoaXMgaXMgbm90 IGZvb2xwcm9vZiBhbmQgc29tZXRpbWVzCisgICBDLUtlcm1pdCBtaWdodCB0aGluayBhIGNvbW1h bmQgc3VjY2VlZGVkIHdoZW4gaXQgZmFpbGVkLCBvciB2aWNlIHZlcnNhLgorICAgVGhpcyBpcyBt b3N0IGxpa2VseSB0byBoYXBwZW4gd2hlbiB0aGUgaGlnaGx5IHN5c3RlbS1kZXBlbmRlbnQgbWV0 aG9kcworICAgdGhhdCBLZXJtaXQgbXVzdCB1c2UgdG8gZGV0ZXJtaW5lIGEgY29tbWFuZCdzIGV4 aXQgc3RhdHVzIGNvZGUgZG8gbm90CisgICBzdXBwbHkgdGhlIHJpZ2h0IGluZm9ybWF0aW9uLgor CisgICBJdCBjYW4gYWxzbyBoYXBwZW4gYmVjYXVzZSBzb21lIGNvbW1hbmRzIG1pZ2h0IGRlZmlu ZSBzdWNjZXNzIGFuZAorICAgZmFpbHVyZSBkaWZmZXJlbnRseSBmcm9tIHdoYXQgeW91IGV4cGVj dCwgb3IgYmVjYXVzZSB5b3UgYXJlIHVzaW5nIGEKKyAgIHBpcGVsaW5lIGNvbXBvc2VkIG9mIG1h bnkgY29tbWFuZHMsIGFuZCBvbmUgb2YgdGhlbSBmYWlscyB0byBwYXNzCisgICBmYWlsaW5nIGV4 aXQgc3RhdHVzIGNvZGVzIHVwIHRoZSBjaGFpbi4gVGhlIG1vc3QgbGlrZWx5IGN1bHByaXQgaXMg dGhlCisgICBzaGVsbCBpdHNlbGYsIHdoaWNoIGluIG1vc3QgY2FzZXMgbXVzdCBiZSBpbnRlcnBv c2VkIGJldHdlZW4gS2VybWl0IGFuZAorICAgYW55IGV4dGVybmFsIHByb2dyYW0gdG8gYmUgcnVu LgorCisgICBJbiBhbnkgY2FzZSwgeW91IGNhbiBleGFtaW5lIHRoZSBmb2xsb3dpbmcgdmFyaWFi bGUgdG8gZmluZCBvdXQgdGhlCisgICBleGl0IHN0YXR1cyBjb2RlIHJldHVybmVkIHRvIEtlcm1p dCBieSB0aGUgcHJvY2VzcyBtb3N0IHJlY2VudGx5IHJ1biBieQorICAgYW55IGNvbW1hbmQgdGhh dCBydW5zIGV4dGVybmFsIGNvbW1hbmRzIG9yIHByb2dyYW1zLCBpbmNsdWRpbmcgQ1NFTkQsCisg ICBDUkVDRUlWRSwgUkVESVJFQ1QsIFJVTiwgZXRjOgorCisgIFx2KHBleGl0c3RhdCkKKworICAg SW4gVU5JWCwgV2luZG93cyBhbmQgT1MvMiwgdGhlIHZhbHVlIHNob3VsZCBiZSAtMiBpZiBubyBj b21tYW5kIGhhcworICAgYmVlbiBydW4geWV0LCAwIGlmIHRoZSBtb3N0IHJlY2VudCBjb21tYW5k IHN1Y2NlZWRlZCwgLTEsIC0zLCBvciAtNCBpZgorICAgdGhlcmUgd2FzIGFuIGludGVybmFsIGVy cm9yLCBhbmQgYSBwb3NpdGl2ZSBudW1iZXIgcmV0dXJuZWQgYnkgdGhlCisgICBjb21tYW5kIGl0 c2VsZiBpZiB0aGUgY29tbWFuZCBmYWlsZWQuIElmIHRoZSBudW1iZXIgaXMgaW4gdGhlIHJhbmdl CisgICAxLTEyNywgdGhpcyBpcyB0aGUgcHJvZ3JhbSdzIGV4aXQgc3RhdHVzIGNvZGUuIElmIGl0 IGlzIDEyOCBvciBncmVhdGVyLAorICAgdGhpcyBpcyBzdXBwb3NlZCB0byBpbmRpY2F0ZSB0aGF0 IHRoZSBjb21tYW5kIG9yIHByb2dyYW0gd2FzCisgICBpbnRlcnJ1cHRlZCBvciB0ZXJtaW5hdGVk IGZyb20gb3V0c2lkZSBpdHNlbGYuCisKKyAgIEluIFdpbmRvd3MgOTUgYW5kIDk4LCB0aGUgcmV0 dXJuIHZhbHVlcyBvZiB0aGUgZGVmYXVsdCBzaGVsbCBhcmUKKyAgIHVucmVsaWFibGU7IHZhcmlv dXMgdGhpcmQtcGFydHkgc2hlbGxzIGNhbiBiZSB1c2VkIHRvIHdvcmsgYXJvdW5kIHRoaXMKKyAg IGRlZmljaWVuY3kuCisKKyAgIEluIFZNUywgaXQgaXMgdGhlIGFjdHVhbCBleGl0IHN0YXR1cyBj b2RlIG9mIHRoZSBjb21tYW5kIHRoYXQgd2FzIHJ1bi4KKyAgIFRoaXMgaXMgYW4gb2RkIG51bWJl ciBpZiB0aGUgY29tbWFuZCBzdWNjZWVkZWQsIGFuZCBhbiBldmVuIG51bWJlciBpZgorICAgaXQg ZmFpbGVkLiBZb3UgY2FuIHNlZSB0aGUgYXNzb2NpYXRlZCBtZXNzYWdlIGFzIGZvbGxvd3M6CisK KyAgcnVuIHdyaXRlIHN5cyRvdXRwdXQgZiRtZXNzYWdlKFx2KHBleGl0c3RhdCkpCisKKyAgIE9y LCBtb3JlIGNvbnZlbmllbnRseSwgdXNlIHRoZSBuZXcgS2VybWl0IGZ1bmN0aW9uOgorCisgIGVj aG8gXGZlcnJzdHJpbmcoXHYocGV4aXRzdGF0KSkKKworICAgd2hpY2ggY29udmVydHMgYSBzeXN0 ZW0gZXJyb3IgY29kZSAobnVtYmVyKSB0byB0aGUgY29ycmVzcG9uZGluZworICAgbWVzc2FnZS4K KworNC4yLjYuIENhdXRpb25zIGFib3V0IFVzaW5nIFBpcGVzIHRvIFRyYW5zZmVyIERpcmVjdG9y eSBUcmVlcworCisgICBBbHRob3VnaCB1dGlsaXRpZXMgc3VjaCBhcyB0YXIgYW5kIHppcC91bnpp cCBtaWdodCBiZSBhdmFpbGFibGUgb24KKyAgIGRpZmZlcmVudCBwbGF0Zm9ybXMgKHN1Y2ggYXMg VU5JWCBhbmQgV2luZG93cyksIHRoaXMgZG9lcyBub3QKKyAgIG5lY2Vzc2FyaWx5IG1lYW4geW91 IGNhbiB1c2UgdGhlbSBzdWNjZXNzZnVsbHkgdG8gdHJhbnNmZXIgZGlyZWN0b3J5CisgICB0cmVl cyBiZXR3ZWVuIHVubGlrZSBwbGF0Zm9ybXMuIEZvciBleGFtcGxlOgorCisgIENTRU5EIHt0YXIg Y2YgLSAuIHwgZ3ppcCAtY30geyFndW56aXAgLWMgfCB0YXIgeGYgLX0KKworICAgd2hlbiB1c2Vk IGZyb20gVU5JWCB0byBXaW5kb3dzIHdpbGwgaGF2ZSBzYXRpc2ZhY3RvcnkgcmVzdWx0cyBmb3IK KyAgIGJpbmFyeSBmaWxlcywgYnV0IG5vdCBmb3IgdGV4dCBmaWxlcy4gVU5JWCB0ZXh0IGZpbGVz IGhhdmUgbGluZXMgZW5kaW5nCisgICB3aXRoIExpbmVmZWVkIChMRikgb25seSwgd2hlcmVhcyBX aW5kb3dzIHRleHQgZmlsZXMgaGF2ZSBsaW5lcyBlbmRpbmcKKyAgIGluIENhcnJpYWdlIFJldHVy biBhbmQgTGluZWZlZWQgKENSTEYpLiBUaHVzIGFueSB0ZXh0IGZpbGVzIHRoYXQgd2VyZQorICAg aW4gdGhlIGFyY2hpdmUgZm9ybWVkIGJ5IHRoZSBmaXJzdCB0YXIgY29tbWFuZCB3aWxsIGJlIHVu cGFja2VkIGJ5IHRoZQorICAgc2Vjb25kIHRhciBjb21tYW5kIGluIHRoZWlyIG9yaWdpbmFsIGZv cm0sIGFuZCB3aWxsIGRpc3BsYXkgYW5kIHByaW50CisgICBpbmNvcnJlY3RseSBpbiBXaW5kb3dz IChleGNlcHQgaW4gYXBwbGljYXRpb25zIHRoYXQgaGF2ZSBiZWVuCisgICBleHBsaWNpdGx5IGNv ZGVkIHRvIGhhbmRsZSBVTklYLWZvcm1hdCB0ZXh0IGZpbGVzKS4gT24gdGhlIG90aGVyIGhhbmQK KyAgIGlmIHlvdSB0b2xkIGd6aXAgdG8gdXNlICJ0ZXh0IG1vZGUiIHRvIGRvIHJlY29yZCBmb3Jt YXQgY29udmVyc2lvbgorICAgKGFzc3VtaW5nIHRoZXJlIHdhcyBhIHdheSB0byB0ZWxsIGl0LCBh cyB0aGVyZSBpcyB3aXRoIG1vc3QgInppcCIKKyAgIHByb2dyYW1zKSwgdGhpcyB3b3VsZCBkZXN0 cm95IGFueSBiaW5hcnkgZmlsZXMgaW4gdGhlIGFyY2hpdmUuCisKKyAgIEZ1cnRoZXJtb3JlLCBp ZiB0aGUgYXJjaGl2ZSBjb250YWlucyB0ZXh0IGZpbGVzIHRoYXQgYXJlIHdyaXR0ZW4gaW4KKyAg IGxhbmd1YWdlcyBvdGhlciB0aGFuIEVuZ2xpc2gsIHRoZSAic3BlY2lhbCIgKGFjY2VudGVkIGFu ZC9vciBub24tUm9tYW4pCisgICBjaGFyYWN0ZXJzIGFyZSBOT1QgdHJhbnNsYXRlZCwgYW5kIGFy ZSB0aGVyZWZvcmUgbGlrZWx5IHNob3cgdXAgYXMKKyAgIGdpYmJlcmlzaCBvbiB0aGUgdGFyZ2V0 IHN5c3RlbS4gRm9yIGV4YW1wbGUsIFdlc3QgRXVyb3BlYW4gbGFuZ3VhZ2VzCisgICBhcmUgdXN1 YWxseSBlbmNvZGVkIGluIElTTyBMYXRpbiBBbHBoYWJldCAxIGluIFVOSVgsIGJ1dCBpbiBQQyBj b2RlCisgICBwYWdlIDg1MCBvbiB0aGUgUEMuIENhcGl0YWwgQSB3aXRoIGFjdXRlIGFjY2VudCBp cyBjb2RlIHBvaW50IDE5MworICAgKGRlY2ltYWwpIExhdGluLTEsIGJ1dCAxODEgaW4gQ1A4NTAu IFNvIEEtYWN1dGUgaW4gdGhlIFVOSVggZmlsZQorICAgYmVjb21lcyBNaWRkbGUgQm94IEJvdHRv bSBvbiB0aGUgUEMsIGFuZCBzaW1pbGFybHkgZm9yIGFsbCB0aGUgb3RoZXIKKyAgIHNwZWNpYWwg Y2hhcmFjdGVycywgYW5kIGZvciBhbGwgb3RoZXIgbGFuZ3VhZ2VzIC0tIEdyZWVrLCBSdXNzaWFu LAorICAgSGVicmV3LCBKYXBhbmVzZSwgZXRjLgorCisgICBTbyB3aGVuIHRyYW5zZmVycmluZyB0 ZXh0IGZpbGVzIGJldHdlZW4gdW5saWtlIHBsYXRmb3JtcywgeW91IHNob3VsZAorICAgdXNlIGRp cmVjdCBLZXJtaXQgZmlsZSB0cmFuc2ZlcnMgc28gS2VybWl0IGNhbiBhcHBseSB0aGUgbmVlZGVk CisgICByZWNvcmQtZm9ybWF0IGFuZCBjaGFyYWN0ZXItc2V0IHRyYW5zZm9ybWF0aW9ucy4gVXNl IHBpcGVsaW5lcworICAgY29udGFpbmluZyBhcmNoaXZlcnMgbGlrZSB0YXIgb3IgemlwIG9ubHkg aWYgYWxsIHRoZSBmaWxlcyBhcmUgYmluYXJ5CisgICBvciB0aGUgdHdvIHN5c3RlbXMgdXNlIHRo ZSBzYW1lIHJlY29yZCBmb3JtYXQgYW5kIGNoYXJhY3RlciBzZXQgZm9yCisgICB0ZXh0IGZpbGVz LgorCisgICBBbHNvIHNlZSBbNDU2XVNlY3Rpb25zIDQuMywgWzQ1N100LjEwLCBbNDU4XTQuMTEs IGFuZCBbNDU5XTQuMTUgZm9yIGhvdworICAgdG8gdHJhbnNmZXIgZGlyZWN0b3J5IHRyZWVzIGJl dHdlZW4gYm90aCBsaWtlIGFuZCB1bmxpa2Ugc3lzdGVtcworICAgZGlyZWN0bHkgd2l0aCBLZXJt aXQuCisKKzQuMi43LiBQaXBlcyBhbmQgRW5jcnlwdGlvbgorCisgICBPZiBjb3Vyc2UgcGlwZWxp bmVzIGNvdWxkIGJlIHVzZWQgZm9yIGVuY3J5cHRlZCBmaWxlIHRyYW5zZmVycywKKyAgIGFzc3Vt aW5nIHByb3BlciBwcmVjYXV0aW9ucyBjb3VsZCBiZSB0YWtlbiBjb25jZXJuaW5nIHRoZSB0cmFu c21pc3Npb24KKyAgIG9mIHRoZSBrZXkuIEJ1dCB0aGVyZSBpcyByYXJlbHkgYSBnb29kIHdheSB0 byBkbyB0aGlzLiBUbyBpbGx1c3RyYXRlCisgICB1c2luZyBVTklYIGNyeXB0OgorCisgIGNzZW5k IHtjcnlwdCBrZXkgPCBmaWxlbmFtZX0geyFjcnlwdCBrZXkgPiBmaWxlbmFtZX0KKworICAgT3Is IG1vcmUgYW1iaXRpb3VzbHk6CisKKyAgY3NlbmQge3RhciBjZiAtIC4gfCBnemlwIC1jIHwgY3J5 cHQga2V5fSB7IWNyeXB0IGtleSB8IGd1bnppcCAtYyB8IHRhciB4ZiAtfQorCisgICB0cmFuc21p dHMgdGhlIGtleSBpbiB0aGUgZmlsZSBoZWFkZXIgcGFja2V0IGFzIHBhcnQgb2YgdGhlIChjbGVh ci10ZXh0KQorICAgcmVtb3RlIGNvbW1hbmQsIGRlZmVhdGluZyB0aGUgZW50aXJlIHB1cnBvc2Ug b2YgZW5jcnlwdGluZyB0aGUgZmlsZQorICAgZGF0YS4KKworICAgQnV0IGlmIHlvdSBhcmUgY29u bmVjdGVkIGluIHRlcm1pbmFsIG1vZGUgdG8gdGhlIHJlbW90ZSBjb21wdXRlciBhbmQKKyAgIHR5 cGU6CisKKyAgY3JlY2VpdmUge2NyeXB0IGtleSA+IGZpbGVuYW1lfQorCisgICBhdCB0aGUgcmVt b3RlIEtlcm1pdCBwcm9tcHQsIHlvdSBoYXZlIGFsc28gdHJhbnNtaXR0ZWQgdGhlIGtleSBpbiBj bGVhcgorICAgdGV4dCBvdmVyIHRoZSBjb21tdW5pY2F0aW9ucyBsaW5rLgorCisgICBBdCBwcmVz ZW50LCB0aGUgb25seSBzZWN1cmUgd2F5IHRvIHVzZSBDU0VORCBhbmQgQ1JFQ0VJVkUgd2l0aCBh bgorICAgZW5jcnlwdGlvbiBmaWx0ZXIgaXMgdG8gaGF2ZSBhIGh1bWFuIG9wZXJhdG9yIGF0IGJv dGggZW5kcywgc28gdGhlIGtleQorICAgZG9lcyBub3QgaGF2ZSB0byBiZSB0cmFuc21pdHRlZC4K KworICAgVGhlb3JldGljYWxseSBpdCB3b3VsZCBiZSBwb3NzaWJsZSB0byB1c2UgUEdQIHNvZnR3 YXJlIChQcmV0dHkgR29vZAorICAgUHJpdmFjeSwgYnkgUGhpbCBaaW1tZXJtYW4sIFBoaWwncyBQ cmV0dHkgR29vZCBTb2Z0d2FyZSkgdG8gYXZvaWQga2V5CisgICB0cmFuc21pc3Npb24gKHNpbmNl IFBHUCB1c2VzIHNlcGFyYXRlIHB1YmxpYyBhbmQgcHJpdmF0ZSBrZXkgYW5kICJsZXRzCisgICB5 b3UgY29tbXVuaWNhdGUgc2VjdXJlbHkgd2l0aCBwZW9wbGUgeW91J3ZlIG5ldmVyIG1ldCwgd2l0 aCBubyBzZWN1cmUKKyAgIGNoYW5uZWxzIG5lZWRlZCBmb3IgcHJpb3IgZXhjaGFuZ2Ugb2Yga2V5 cyIpLCBidXQgdGhlIHNwZWNpZmljIG1ldGhvZAorICAgaGFzIHlldCB0byBiZSB3b3JrZWQgb3V0 LgorCisgICAgIEhJTlQ6IFNlZSB0aGUgUEdQIFVzZXIncyBHdWlkZSwgZS5nLiBhdDoKKyAgICAg WzQ2MF1odHRwOi8vd3d3LnRlbHN0cmEuY29tLmF1L2RvY3MvUEdQLworICAgICBFc3BlY2lhbGx5 IHRoZSB0b3BpYyAiVXNpbmcgUEdQIGFzIGEgVU5JWC1TdHlsZSBGaWx0ZXIiOgorICAgICBbNDYx XWh0dHA6Ly93d3cudGVsc3RyYS5jb20uYXUvZG9jcy9QR1AvcGdwZG9jMi9wZ3Bkb2MyXzE3Lmh0 bWwKKworICAgSW4gYW55IGNhc2UsIGJldHRlciBhbmQgbW9yZSBjb252ZW5pZW50IHNlY3VyaXR5 IG9wdGlvbnMgYXJlIG5vdworICAgYXZhaWxhYmxlOiBLZXJiZXJvcyBhdXRoZW50aWNhdGlvbiBh bmQgZW5jcnlwdGlvbiAoWzQ2Ml1DTElDSyBIRVJFIGZvcgorICAgZGV0YWlscykgYW5kIHRoZSBu ZXcgYWJpbGl0eSB0byBydW4gQy1LZXJtaXQgInRob3VnaCIgb3RoZXIKKyAgIGNvbW11bmljYXRp b24gcHJvZ3JhbXMsIGRlc2NyaWJlZCBpbiBbNDYzXVNlY3Rpb24gMi43LgorCis0LjIuOC4gQ29t bWFuZHMgYW5kIEZ1bmN0aW9ucyBSZWxhdGVkIHRvIFBpcGVzCisKKzQuMi44LjEuIFRoZSBPUEVO ICFSRUFEIGFuZCBPUEVOICFXUklURSBDb21tYW5kcworCisgICBUaGVzZSBhcmUgZGVzY3JpYmVk IGluIFs0NjRdVXNpbmcgQy1LZXJtaXQsIGFuZCBhcmUgZ2VuZXJhbGx5IHVzZWZ1bAorICAgd2l0 aCByZWFkaW5nIG91dHB1dCBmcm9tIGNvbW1hbmRzIHRoYXQgcHJvZHVjZSBtb3JlIHRoYW4gb25l IGxpbmUgb24KKyAgIHRoZWlyIHN0YW5kYXJkIG91dHB1dCwgb3Igd3JpdGluZyBtdWx0aXBsZSBs aW5lcyBpbnRvIGNvbW1hbmRzIHRoYXQKKyAgIGFjY2VwdCB0aGVtIG9uIHRoZWlyIHN0YW5kYXJk IGlucHV0LgorCisgICBJbiBDLUtlcm1pdCA3LjAgQ0xPU0UgIVJFQUQgaXMgYWNjZXB0ZWQgYXMg YSBzeW5vbnltIGZvciBDTE9TRSBSRUFELAorICAgYW5kIENMT1NFICFXUklURSBmb3IgQ0xPU0Ug V1JJVEUuCisKKyAgIFRlc3RpbmcgdGhlIHN1Y2Nlc3MgYW5kIGZhaWx1cmUgb2YgdGhlc2UgY29t bWFuZHMsIGhvd2V2ZXIsIGNhbiBiZSBhCisgICBiaXQgdHJpY2t5LiBDb25zaWRlcjoKKworICBv cGVuICFyZWFkIGxhbGFza2pmc2xka2Zqc2xka2ZqCisKKyAgICh3aGVyZSAibGFsYXNramZzbGRr ZmpzbGRrZmoiIGlzIG5laXRoZXIgYSB2YWxpZCBjb21tYW5kIG5vciB0aGUgbmFtZQorICAgb2Yg YSBwcm9ncmFtIG9yIHNjcmlwdCB0aGF0IGNhbiBiZSBydW4pLiBPUEVOICFSRUFELCBpbiBVTklY IGF0IGxlYXN0LAorICAgdHJhbnNsYXRlcyB0aGlzIGludG8gZXhlY2woc2hlbGxwYXRoLHNoZWxs bmFtZSwiLWMiLGNvbW1hbmQpLiBUaGlzCisgICBtZWFucyBpdCBzdGFydHMgeW91ciBwcmVmZXJy ZWQgc2hlbGwgKGUuZy4gZnJvbSB0aGUgU0hFTEwgZW52aXJvbm1lbnQKKyAgIHZhcmlhYmxlKSBh bmQgYXNrcyBpdCB0byBleGVjdXRlIHRoZSBnaXZlbiBjb21tYW5kLiBJdCBtdXN0IGJlIHRoaXMK KyAgIHdheSwgYmVjYXVzZSB5b3VyIGNvbW1hbmQgY2FuIGJlIGEgZWl0aGVyIGFuIGludGVybmFs IHNoZWxsIGNvbW1hbmQKKyAgICh3aGljaCBvbmx5IHlvdXIgc2hlbGwgY2FuIGV4ZWN1dGUpIG9y IGFuIGV4dGVybmFsIGNvbW1hbmQsIHdoaWNoIG9ubHkKKyAgIHlvdXIgc2hlbGwga25vd3MgaG93 IHRvIGZpbmQgKGl0IGtub3dzIHlvdXIgUEFUSCBhbmQgaW50ZXJwcmV0cywgZXRjKS4KKyAgIFRo ZXJlZm9yZSB1bmxlc3MgT1BFTiAhUkVBRCBjYW4ndCBzdGFydCB5b3VyIHNoZWxsLCBpdCBhbHdh eXMgc3VjY2VlZHMuCisKKyAgIENvbnRpbnVpbmcgd2l0aCB0aGUgbm9uZXhpc3RlbnQtY29tbWFu ZCBleGFtcGxlOgorCisgIEMtS2VybWl0PiBvcGVuICFyZWFkIGxhbGFza2pmc2xka2Zqc2xka2Zq CisgIEMtS2VybWl0PiBzdGF0dXMKKyAgIFNVQ0NFU1MKKyAgQy1LZXJtaXQ+IHJlYWQgbGluZQor ICBDLUtlcm1pdD4gc3RhdHVzCisgICBTVUNDRVNTCisgIEMtS2VybWl0PiBlY2hvICJcbShsaW5l KSIKKyAgImJhc2g6IGxhbGFza2pmc2xka2Zqc2xka2ZqOiBjb21tYW5kIG5vdCBmb3VuZCIKKyAg Qy1LZXJtaXQ+IGNsb3NlIHJlYWQKKyAgQy1LZXJtaXQ+IHN0YXR1cworICAgRkFJTFVSRQorICBD LUtlcm1pdD4KKworICAgSW4gb3RoZXIgd29yZHMsIHRoZSBmYWlsdXJlIGNhbiBub3QgYmUgZGV0 ZWN0ZWQgb24gT1BFTiwgc2luY2UgdGhlIE9QRU4KKyAgIGNvbW1hbmQgc3VjY2VlZHMgaWYgaXQg Y2FuIHN0YXJ0IHlvdXIgc2hlbGwuIEl0IGNhbid0IGJlIGRldGVjdGVkIG9uCisgICBSRUFELCBz aW5jZSBhbGwgdGhpcyBkb2VzIGlzIHJlYWQgb3V0cHV0IGZyb20gdGhlIHNoZWxsLCB3aGljaCBp biB0aGlzCisgICBjYXNlIGhhcHBlbnMgdG8gYmUgYW4gZXJyb3IgbWVzc2FnZS4gSG93ZXZlciwg ZmFpbHVyZSBJUyBkZXRlY3RlZCB1cG9uCisgICBjbG9zZSwgc2luY2UgdGhpcyBpcyB0aGUgb2Nj YXNpb24gdXBvbiB3aGljaCB0aGUgc2hlbGwgZ2l2ZXMgS2VybWl0IGl0cworICAgZXhpdCBzdGF0 dXMgY29kZS4KKworICAgRm9yIGFuIGlsbHVzdHJhdGlvbiBvZiB0aGlzIHNpdHVhdGlvbiwgc2Vl IFs0NjVdU2VjdGlvbiAyLjE0LgorCis0LjIuOC4yLiBUaGUgUkVESVJFQ1QgQ29tbWFuZAorCisg ICBBIHNlY29uZCBtZXRob2Qgb2YgSS9PIHJlZGlyZWN0aW9uIGlzIG9mZmVyZWQgYnkgdGhlIFJF RElSRUNUIGNvbW1hbmQuCisgICBUaGlzIGlzIGEgcmF0aGVyIGFkdmFuY2VkIGFuZCB0cmlja3kg ZmVhdHVyZSB0aGF0IGlzIHByZXNlbnRseQorICAgc3VwcG9ydGVkIG9ubHkgaW4gVU5JWCBDLUtl cm1pdCwgaW4gT1MtOSBDLUtlcm1pdCwgYW5kIGluIEtlcm1pdCA5NS4KKyAgIFN5bnRheDoKKwor ICAgUkVESVJFQ1QgY29tbWFuZAorICAgICAgICAgIFJ1bnMgdGhlIGdpdmVuIGNvbW1hbmQsIHNl bmRpbmcgaXRzIHN0YW5kYXJkIG91dHB1dCB0byB0aGUKKyAgICAgICAgICBjdXJyZW50IGNvbW11 bmljYXRpb25zIGNoYW5uZWwgKFNFVCBMSU5FLCBTRVQgUE9SVCwgb3IgU0VUIEhPU1QKKyAgICAg ICAgICBjb25uZWN0aW9uKSwgYW5kIHJlYWRpbmcgaXRzIHN0YW5kYXJkIGlucHV0IGZyb20gdGhl IHNhbWUKKyAgICAgICAgICBjb25uZWN0aW9uLiBXb3JrcyBvbmx5IGluIGxvY2FsIG1vZGUgLS0g aS5lLiBhIGNvbm5lY3Rpb24gaXMKKyAgICAgICAgICByZXF1aXJlZCAtLSBhbmQgdGhlbiBvbmx5 IGlmIHRoZSBnaXZlbiBjb21tYW5kIHVzZXMgU3RhbmRhcmQKKyAgICAgICAgICBJL08uCisKKyAg IEV4YW1wbGU6CisKKyAgcmVkaXJlY3QgZmluZ2VyCisKKyAgIHJ1bnMgdGhlIGxvY2FsICJmaW5n ZXIiIGNvbW1hbmQgYW5kIHNlbmRzIGl0cyBvdXRwdXQgb3ZlciB0aGUKKyAgIGNvbm5lY3Rpb24g YXMgcGxhaW4gdGV4dCwgd2hlcmUgcHJlc3VtYWJseSB0aGVyZSBpcyBhIHByb2Nlc3Mgc2V0IHVw IHRvCisgICByZWFkIGl0LiBBbm90aGVyIGV4YW1wbGU6CisKKyAgcmVkaXJlY3QgZmluZ2VyIHwg c29ydCAtcgorCisgICBzaG93cyB0aGUgdXNlIG9mIGEgcGlwZWxpbmUuCisKKyAgIE5vdGU6IFJF RElSRUNUIGRpZmZlcnMgZnJvbSBDU0VORC9DUkVDRUlWRSBpbiB0d28gaW1wb3J0YW50IHdheXM6 ICgxKQorICAgaXQgZG9lcyBub3QgdXNlIHRoZSBLZXJtaXQgcHJvdG9jb2wsIGFuZCAoMikgaXQg dXNlcyBhIGJpZGlyZWN0aW9uYWwKKyAgIHBpcGUgcmF0aGVyIHRoYW4gYSBvbmUtd2F5IHBpcGUu CisKKyAgIFRoZSBwcmltYXJ5IHVzZSBvZiB0aGUgUkVESVJFQ1QgY29tbWFuZCBpcyB0byBydW4g ZXh0ZXJuYWwgcHJvdG9jb2xzLAorICAgc3VjaCBhcyBzei9yeiBpbiBVTklYIGZvciBaTU9ERU0s IHdoZW4gdGhleSB3b3JrIG92ZXIgU3RhbmRhcmQgSS9PKCopLgorICAgRXhhbXBsZToKKworICBz ZXQgaG9zdCB4eXpjb3JwLmNvbQorICAobG9naW4sIGV0YykKKyAgcmVkaXJlY3Qgc3ogb29mYS56 aXAKKworICAgbGV0cyB5b3UgbWFrZSBhIFRlbG5ldCBjb25uZWN0aW9uIHdpdGggQy1LZXJtaXQg YW5kIHRoZW4gZG8gYSBaTU9ERU0KKyAgIHRyYW5zZmVyIG92ZXIgaXQuIFpNT0RFTSBwcm90b2Nv bCBtZXNzYWdlcyBnbyBib3RoIHdheXMgb3ZlciB0aGUgc2FtZQorICAgY29ubmVjdGlvbiBzaW11 bHRhbmVvdXNseS4KKworICAgSXQgaXMgcG9zc2libGUgdG8gdXNlIEMtS2VybWl0IG9uIFVOSVgg YXMgeW91ciBQUFAgZGlhbGVyIGFuZCB0aGVuIHRvCisgICBSRURJUkVDVCB0aGUgY29ubmVjdGlv biB0byB0aGUgUFBQIHNvZnR3YXJlLCBidXQgQy1LZXJtaXQgNy4wIG9mZmVycyBhCisgICBiZXR0 ZXIgYXBwcm9hY2ggdG8gUFBQIGRpYWxpbmcgaW4gaXRzIG5ldyBFWEVDIGNvbW1hbmQgKFs0NjZd U2VjdGlvbgorICAgMS4yMykuCisKKyAgIEluIHRoZW9yeSwgeW91IGNhbiBhbHNvIHJlZGlyZWN0 IGFuIGludGVyYWN0aXZlIHByb2Nlc3MuIEZvciBleGFtcGxlLAorICAgc3VwcG9zZSB5b3UgdGVs bCBLZXJtaXQgOTUgdG8gd2FpdCBmb3IgYW4gaW5jb21pbmcgVENQL0lQIGNvbm5lY3Rpb246CisK KyAgc2V0IGhvc3QgKiAzMDAwCisKKyAgIGFuZCB0aGVuIHRlbGwgQy1LZXJtaXQgb24gVU5JWCB0 bzoKKworICBzZXQgaG9zdCBrZXJtaXQ5NWhvc3RuYW1lIDMwMDAKKyAgcmVkaXJlY3Qga3NoCisK KyAgIGFuZCB0aGVuIHRlbGwgS2VybWl0IDk1IHRvIENPTk5FQ1Q6IG5vdyB5b3UgYXJlIHRhbGtp bmcgdG8gdGhlIFVOSVgKKyAgIEstc2hlbGw7IHlvdSBjYW4gZ2l2ZSBjb21tYW5kcyAocHdkLCBs cywgZXRjKSBhbmQgc2VlIHRoZSByZXN1bHRzLiBJbgorICAgcHJhY3RpY2UsIHRoZSBLLXNoZWxs J3MgdGVybWluYWwgbW9kZXMgYXJlIG1lc3NlZCB1cCBiZWNhdXNlIChhKSBpdCBpcworICAgbm90 IGdvaW5nIHRocm91Z2ggdGhlIFVuaXggdGVybWluYWwgZHJpdmVyLCBhbmQgKGIpIGl0IGlzICJz bWFydCIgYW5kCisgICBrbm93cyBpdCBpcyBiZWluZyByZWRpcmVjdGVkLCBhbmQgc28gYWN0cyBp biBhIGRlY2lkZWRseSBpbmhvc3BpdGFibGUKKyAgIG1hbm5lciAob3RoZXIgYXBwbGljYXRpb25z IGxpa2UgRU1BQ1MsIHZpLCBldGMsIHNpbXBseSByZWZ1c2UgdG8gcnVuIGlmCisgICB0aGVpciBz dGFuZGFyZCBpL28gaGFzIGJlZW4gcmVkaXJlY3RlZCkuCisKKyAgICAgKCopIFRoZSBwdWJsaWNs eS1kaXN0cmlidXRlZCBzei9yeiBwcm9ncmFtcyBkbyBub3Qgd29yayBhcyBjbGllbnRzLgorICAg ICBIb3dldmVyLCBPbWVuIFRlY2hub2xvZ3kgZG9lcyBvZmZlciBhbiB1cC10by1kYXRlIHJlZGly ZWN0YWJsZQorICAgICBjbGllbnQgWFlaTU9ERU0gcHJvZ3JhbSBjYWxsZWQgY3J6c3ouCisKKzQu Mi44LjMuIFJlY2VpdmluZyBNYWlsIGFuZCBQcmludCBKb2JzCisKKyAgIEFzIG9mIDcuMCwgYW5k IGluIFVOSVggb25seSwgZmlsZXMgdGhhdCBhcmUgc2VudCB0byBDLUtlcm1pdCBhcyBtYWlsCisg ICAod2hlbiB0aGUgb3RoZXIgS2VybWl0IHVzZXMgYSBNQUlMIG9yIFNFTkQgL01BSUwgY29tbWFu ZCkgb3IgdG8gYmUKKyAgIHByaW50ZWQgKHZpYSBSRU1PVEUgUFJJTlQgb3IgU0VORCAvUFJJTlQp IGFyZSBub3cgcGlwZWQgZGlyZWN0bHkgdG8gdGhlCisgICBtYWlsIG9yIHByaW50IHByb2dyYW0s IHJhdGhlciB0aGFuIHdyaXR0ZW4gdG8gdGVtcG9yYXJ5IGZpbGVzIGFuZCB0aGVuCisgICBtYWls ZWQgb3IgcHJpbnRlZCBhbmQgdGhlbiBkZWxldGVkLiBUaGlzIGhhcyB0aGUgYWR2YW50YWdlcyBv ZiAoYSkgbm90CisgICByZXF1aXJpbmcgYSB0ZW1wb3JhcnkgZmlsZSwgYW5kIChiKSBhbGxvd2lu ZyBtYWlsIHRvIGhhdmUgYSBwcm9wZXIKKyAgIHN1YmplY3QgaW4gcGxhY2Ugb2YgdGhlIGZpbGVu YW1lLiBUZW1wb3JhcnkgZmlsZXMgd2VyZSBiYWQgbm90IG9ubHkKKyAgIGJlY2F1c2UgdGhleSBy ZXF1aXJlZCAoYSkgc3BhY2UsIGFuZCAoYikgd3JpdGFiaWxpdHkgb2YgdGhlIGN1cnJlbnQKKyAg IGRpcmVjdG9yeSwgYnV0IGFsc28gYmVjYXVzZSB1c2luZyB0aGVtIGNvdWxkIHJlc3VsdCBpbiB3 aXBpbmcgb3V0IGFuCisgICBleGlzdGluZyBmaWxlLiBTZWUgWzQ2N11TZWN0aW9uIDQuNyBmb3Ig bW9yZSBhYm91dCBTRU5EIC9NQUlMIGFuZCBTRU5ECisgICAvUFJJTlQuCisKKzQuMi44LjQuIFBp cGUtUmVsYXRlZCBGdW5jdGlvbnMKKworICAgVGhlIFxmY29tbWFuZChjb21tYW5kKSBmdW5jdGlv biBydW5zIHRoZSBnaXZlbiBzaGVsbCBvciBzeXN0ZW0gY29tbWFuZAorICAgYW5kIHJldHVybnMg dGhlIGNvbW1hbmQncyBzdGFuZGFyZCBvdXRwdXQgYXMgaXRzIHZhbHVlICh3aXRoIGFueQorICAg bmV3bGluZSBjaGFyYWN0ZXJzIHN0cmlwcGVkIGZyb20gdGhlIGVuZCksIHVubGVzcyB0aGUgcmVz dWx0IGlzIHRvbworICAgbG9uZywgaW4gd2hpY2ggY2FzZSBpdCByZXR1cm5zIHRoZSBlbXB0eSBz dHJpbmcuIFRoZSBtYXhpbXVtIGxlbmd0aCBmb3IKKyAgIHRoZSByZXN1bHQgaXMgYXQgbGVhc3Qg MTAyMiBieXRlcywgYW5kIGl0IG1pZ2h0IGJlIGxvbmdlciBvbiBzb21lCisgICBwbGF0Zm9ybXMu IEV4YW1wbGVzIChVTklYKToKKworICBDLUtlcm1pdD4gZWNobyAiXGZjb21tYW5kKGRhdGUpIgor ICAiRnJpIEFwciAxOCAxMzozMTo0MiAxOTk3IgorICBDLUtlcm1pdD4gZWNobyAiXGZjb21tYW5k KGZpbmdlciB8IHdjIC1sKSIgOyBob3cgbWFueSB1c2VycyBsb2dnZWQgaW4/CisgICIgICAgICA4 MyIKKyAgQy1LZXJtaXQ+IGV2YWx1YXRlIFxmY29tbWFuZChmaW5nZXIgfCB3YyAtbCkgKiAyCisg IDE2NgorICBDLUtlcm1pdD4gZWNobyBXZWxjb21lIHRvIFxmY29tbWFuZCh0dHkpIG9uIFxmY29t bWFuZChkYXRlKQorICBXZWxjb21lIHRvIC9kZXYvdHR5cmUgb24gRnJpIEFwciAxOCAxMzozMTo0 MiAxOTk3CisgIEMtS2VybWl0PiBlY2hvICJcZmNvbW1hbmQobHMgb29mYS4qKSIKKyAgIm9vZmEu YworICBvb2ZhLmgKKyAgb29mYS5vIgorICBDLUtlcm1pdD4gY2QgL2RpcmVjdG9yeS13aXRoLXRo b3VzYW5kcy1vZi1maWxlcworICBDLUtlcm1pdD4gZWNobyAiXGZjb21tYW5kKGxzIC1sKSIgOyBU aGlzIHdvdWxkIGJlIHRvbyBsb25nCisgICIiCisgIEMtS2VybWl0PgorCisgICBJZiBhIGNvbW1h bmQncyBvdXRwdXQgd291bGQgYmUgdG9vIGxvbmcsIHlvdSBjYW4gdXNlIHRoZSBvdGhlciwgbW9y ZQorICAgbGFib3Jpb3VzIG1ldGhvZCBvZiByZWFkaW5nIGZyb20gYSBjb21tYW5kOiBPUEVOICFS RUFEIGNvbW1hbmQsIFJFQUQKKyAgIGVhY2ggbGluZSwgQ0xPU0UgIVJFQUQuCisKKyAgIFRoZSBc ZnJhd2NvbW1hbmQoY29tbWFuZCkgZnVuY3Rpb24gaXMgaWRlbnRpY2FsIHRvIFxmY29tbWFuZChj b21tYW5kKSwKKyAgIGV4Y2VwdCBpdCBkb2VzIG5vdCByZW1vdmUgdHJhaWxpbmcgbmV3bGluZSBj aGFyYWN0ZXJzOgorCisgIEMtS2VybWl0PiBlY2hvICJcZnJhd2NvbW1hbmQoZGF0ZSkiCisgICJG cmkgQXByIDE4IDEzOjMxOjQyIDE5OTcKKyAgIgorICBDLUtlcm1pdD4gZWNobyAiXGZyYXdjb21t YW5kKGxzIG9vZmEuKikiCisgICJvb2ZhLmMKKyAgb29mYS5oCisgIG9vZmEubworICAiCisgIEMt S2VybWl0PgorCisgICBVc2UgXGZyYXdjb21tYW5kKCkgaWYgeW91IHdhbnQgdG8gcmV0YWluIHRo ZSBmaW5hbCBsaW5lIHRlcm1pbmF0b3JzLCBvcgorICAgaWYgdGhlIGNvbW1hbmQncyBvdXRwdXQg aXMgImJpbmFyeSIuIEJ1dCByZW1lbWJlciB0aGF0IGlmIHRoZSByZXN1bHQgb2YKKyAgIHRoaXMg KG9yIGFueSBvdGhlcikgZnVuY3Rpb24gY29udGFpbnMgYW55IE5VTCAoQVNDSUkgY29kZSAwKQor ICAgY2hhcmFjdGVycywgdGhlIGZpcnN0IE5VTCB3aWxsIHRlcm1pbmF0ZSB0aGUgcmVzdWx0IHN0 cmluZyBiZWNhdXNlIHRoaXMKKyAgIGlzIGhvdyBDIHN0cmluZ3Mgd29yayAoaXQncyAiQy1LZXJt aXQiLCByZW1lbWJlcj8pLgorCisgICBUaGVzZSBmdW5jdGlvbnMgYXJlIHVzZWZ1bCBub3Qgb25s eSBsb2NhbGx5LCBidXQgYWxzbyBpbiB0aGUKKyAgIGNsaWVudC9zZXJ2ZXIgYXJlbmEuIElmIHlv dSBuZWVkIHRvIGdldCB0aGUgcmVzdWx0cyBmcm9tIGEgc3lzdGVtCisgICBjb21tYW5kIG9uIHRo ZSBzZXJ2ZXIgZW5kIGludG8gYSB2YXJpYWJsZSBvbiB0aGUgY2xpZW50IGVuZCwganVzdCBkbzoK KworICBbIHJlbW90ZSBdIHF1ZXJ5IGtlcm1pdCBjb21tYW5kKGRhdGUpCisKKyAgIFRoZSByZXN1 bHQgaXMgaW4gdGhlIGxvY2FsIFx2KHF1ZXJ5KSB2YXJpYWJsZTsgc2VlIFs0NjhdVXNpbmcgQy1L ZXJtaXQsCisgICAybmQgRWQuLCBwcC4zNTktMzYwIGZvciBkZXRhaWxzLgorCis0LjMuIEF1dG9t YXRpYyBQZXItRmlsZSBUZXh0L0JpbmFyeSBNb2RlIFN3aXRjaGluZworCisgICBXaGVuIHRyYW5z ZmVycmluZyBmaWxlcyBiZXR3ZWVuIGxpa2Ugc3lzdGVtcyAoZS5nLiBVTklYLXRvLVVOSVgpLAor ICAgYmluYXJ5IG1vZGUgY2FuIGJlIHVzZWQgZm9yIGFsbCBmaWxlcyB1bmxlc3MgY2hhcmFjdGVy LXNldCB0cmFuc2xhdGlvbgorICAgaXMgbmVlZGVkLCBhbmQgaW4gZmFjdCBLZXJtaXQgcHJvZ3Jh bXMgb2YgcmVjZW50IHZpbnRhZ2UgcmVjb2duaXplIGVhY2gKKyAgIG90aGVycycgcGxhdGZvcm1z IGFuZCBzd2l0Y2ggdG8gYmluYXJ5IG1vZGUgYXV0b21hdGljYWxseSB3aGVuIGl0IGlzCisgICBh cHByb3ByaWF0ZSAoZS5nLiBET1MgdG8gT1MvMiwgb3IgVU5JWCB0byBVTklYKS4gKEV4Y2VwdGlv bjogTEFCRUxFRAorICAgbW9kZSBpcyBjaG9zZW4gZm9yIFZNUy10by1WTVMgYW5kIE9TLzItdG8t T1MvMiB0cmFuc2ZlcnMgc28gY29tcGxleAorICAgZmlsZSBmb3JtYXRzIGNhbiBiZSBwcmVzZXJ2 ZWQuKQorCisgICBPbiBhIGNsaWVudC9zZXJ2ZXIgY29ubmVjdGlvbiBiZXR3ZWVuIGxpa2Ugc3lz dGVtcywgdGhlIHRyYW5zZmVyIG1vZGUKKyAgIGlzIGN1cnJlbnRseSBkZXRlcm1pbmVkIGJ5IHRo ZSBmaWxlIHNlbmRlciwgcmF0aGVyIHRoYW4gYWx3YXlzIGJ5IHRoZQorICAgY2xpZW50LiBJZiB0 aGUgY2xpZW50IGlzIHNlbmRpbmcsIGl0IGNvbnRyb2xzIHRoZSB0cmFuc2ZlciBtb2RlLiBJZiBh CisgICBHRVQgY29tbWFuZCBpcyBzZW50IHRvIHRoZSBzZXJ2ZXIsIHRoZSBzZXJ2ZXIgc2VuZHMg YWxsIGZpbGVzIGluIGJpbmFyeQorICAgbW9kZSBpZiBpdHMgVFJBTlNGRVIgQ0hBUkFDVEVSLVNF VCBpcyBUUkFOU1BBUkVOVDsgb3RoZXJ3aXNlIGl0IHVzZXMKKyAgIHRleHQgbW9kZSBmb3IgdGV4 dCBmaWxlcyAoYWNjb3JkaW5nIHRvIGl0cyB0ZXh0LXBhdHRlcm4gbGlzdCkgYW5kCisgICBiaW5h cnkgbW9kZSBmb3IgYmluYXJ5IGZpbGVzLiBPZiBjb3Vyc2UsIHRoZSBjbGllbnQgY2FuIGNvbnRy b2wgdGhlCisgICBzZXJ2ZXIncyB0cmFuc2ZlciBjaGFyYWN0ZXItc2V0IHdpdGggdGhlIFJFTU9U RSBTRVQgVFJBTlNGRVIKKyAgIENIQVJBQ1RFUi1TRVQgY29tbWFuZC4KKworICAgV2hlbiB0cmFu c2ZlcnJpbmcgZmlsZXMgYmV0d2VlbiB1bmxpa2Ugc3lzdGVtcywgaG93ZXZlciwgKGUuZy4KKyAg IFVOSVgtdG8tRE9TKSwgc29tZSBmaWxlcyAoc3VjaCBhcyBleGVjdXRhYmxlIHByb2dyYW0gaW1h Z2VzKSBtdXN0IGJlCisgICB0cmFuc2ZlcnJlZCBpbiBiaW5hcnkgbW9kZSBidXQgb3RoZXJzIChz dWNoIGFzIHBsYWluLXRleHQgZmlsZXMpIG11c3QKKyAgIGJlIHRyYW5zZmVycmVkIGluIHRleHQg bW9kZSBzbyB0aGVpciByZWNvcmQgZm9ybWF0IGFuZCBjaGFyYWN0ZXIgc2V0cworICAgY2FuIGJl IGFwcHJvcHJpYXRlbHkgY29udmVydGVkLiBJZiBhIGJpbmFyeSBmaWxlIGlzIHRyYW5zZmVycmVk IGluIHRleHQKKyAgIG1vZGUsIGl0IGlzIHJ1aW5lZC4gSWYgYSB0ZXh0IGZpbGUgaXMgdHJhbnNm ZXJyZWQgaW4gYmluYXJ5IG1vZGUsIHRoZW4KKyAgIGF0IHRoZSB2ZXJ5IGxlYXN0LCBpdHMgZm9y bWF0IGNhbiBiZSBpbmNvcnJlY3Q7IGF0IHdvcnN0IGl0IGlzIGFsc28KKyAgIGNvcnJ1cHRlZCBi ZWNhdXNlIGl0cyBjaGFyYWN0ZXIgc2V0IHdhcyBub3QgY29udmVydGVkIChpbiBleHRyZW1lIGNh c2VzCisgICB0aGUgY29ycnVwdGlvbiBpcyB0b3RhbCwgZS5nLiBiZWNhdXNlIG9uZSBzeXN0ZW0g aXMgQVNDSUktYmFzZWQgYW5kIHRoZQorICAgb3RoZXIgRUJDRElDKS4KKworNC4zLjEuIEV4Y2Vw dGlvbnMKKworICAgVk1TIEMtS2VybWl0LCB3aGVuIHNlbmRpbmcgZmlsZXMgdG8gYSBub24tVk1T IHN5c3RlbSwgc3dpdGNoZXMgdG8gdGV4dAorICAgb3IgYmluYXJ5IG1vZGUgYXV0b21hdGljYWxs eSBmb3IgZWFjaCBmaWxlLCBiYXNlZCBvbiB0aGUgcmVjb3JkIGZvcm1hdAorICAgaW4gdGhlIGZp bGUncyBkaXJlY3RvcnkgZW50cnk7IHRodXMgdGhlIG1lY2hhbmlzbXMgZGVzY3JpYmVkIGluIHRo aXMKKyAgIHNlY3Rpb24gZG8gbm90IGFwcGx5IHRvIFZNUyBDLUtlcm1pdCwgeWV0IHRoZSBlZmZl Y3QgaXMgdGhlIHNhbWU6CisgICBhdXRvbWF0aWMgdGV4dC9iaW5hcnkgbW9kZSBzd2l0Y2hpbmcg d2hlbiBWTVMgQy1LZXJtaXQgaXMgc2VuZGluZworICAgZmlsZXMuIFNlZSB0aGUgVk1TIEFwcGVu ZGl4IG9mIFs0NjldVXNpbmcgQy1LZXJtaXQgZm9yIGRldGFpbHMuCisKKyAgIEtlcm1pdCB2ZXJz aW9ucyB0aGF0IHN1cHBvcnQgTEFCRUxFRCBvciBJTUFHRSB0cmFuc2ZlciBtb2RlIGFyZQorICAg bGlrZXdpc2Ugbm90IGFmZmVjdGVkIGJ5IHRoaXMgZmVhdHVyZSB3aGVuIG9uZSBvZiB0aG9zZSBt b2RlcyBpcworICAgc2VsZWN0ZWQgKG5vcm1hbGx5IHVzZWQgb25seSB3aGVuIHRyYW5zZmVycmlu ZyBiZXR3ZWVuIGxpa2Ugc3lzdGVtcykuCisKKyAgIEtlcm1pdCB2ZXJzaW9ucyB0aGF0IHN1cHBv cnQgZmlsZS10cmFuc2ZlciBwaXBlcyBhbmQgZmlsdGVycyBhcmUgbm90CisgICBhZmZlY3RlZCBi eSB0aGlzIGZlYXR1cmUgd2hlbiBwaXBlcyBvciBmaWx0ZXJzIGFyZSB1c2VkLCBzaW5jZSB0aGUK KyAgIG91dHB1dCBvZiBhIHBpcGUgb3IgZmlsdGVyIChzdWNoIGFzIGd6aXApIGlzIGxpa2VseSB0 byByZXF1aXJlIHRyYW5zZmVyCisgICBpbiBhIGRpZmZlcmVudCBtb2RlIHRoYW4gdGhlIG9yaWdp bmFsIGZpbGUuCisKKyAgIEZpbmFsbHksIFNFTkQgL1RFWFQgb3IgU0VORCAvQklOQVJZIHdpbGwg Zm9yY2UgZmlsZXMgdG8gYmUgc2VudCBpbiB0aGUKKyAgIGluZGljYXRlZCBtb2RlLCBvdmVycmlk aW5nIGFsbCBhdXRvbWF0aWMgdHJhbnNmZXItbW9kZS1jaG9vc2luZworICAgbWVjaGFuaXNtcy4K KworNC4zLjIuIE92ZXJ2aWV3CisKKyAgIFN1cHBvc2UgeW91IGdpdmUgQy1LZXJtaXQgYSBjb21t YW5kIGxpa2U6CisKKyAgU0VORCAqLioKKworICAgQW5kIHN1cHBvc2UgdGhlIHBhdHRlcm4gKi4q IG1hdGNoZXMgYSBtaXh0dXJlIG9mIHRleHQgZmlsZXMgKHN1Y2ggYXMKKyAgIHByb2dyYW0gc291 cmNlIGNvZGUpIGFuZCBiaW5hcnkgZmlsZXMgKHN1Y2ggb3Mgb2JqZWN0IG1vZHVsZXMgb3IKKyAg IGV4ZWN1dGFibGUgcHJvZ3JhbXMpLgorCisgICBDLUtlcm1pdCA2LjAgYW5kIGVhcmxpZXIgKGV4 Y2VwdCBvbiBWTVMpIHNlbmQgYWxsIGZpbGVzIGluIHRoZSBzYW1lCisgICBtb2RlOiB3aGF0ZXZl ciB5b3Ugc2FpZCBpbiB5b3VyIG1vc3QgcmVjZW50IFNFVCBGSUxFIFRZUEUgY29tbWFuZCwgb3IK KyAgIGVsc2Ugd2hhdGV2ZXIgbW9kZSB3YXMgY2hvc2VuIGF1dG9tYXRpY2FsbHkgYWNjb3JkaW5n IHRvIHRoZSBydWxlcyBvbgorICAgcGFnZSAyMzYgb2YgVXNpbmcgQy1LZXJtaXQsIDJuZCBFZC4K KworICAgQnV0IHdoZW4gdGV4dCBhbmQgYmluYXJ5IGZpbGVzIGFyZSBtaXhlZCBpbiB0aGUgc2Ft ZSBncm91cCwgYW5kIHRoZQorICAgZmlsZXMgYXJlIGJlaW5nIHRyYW5zZmVycmVkIHRvIGFuIHVu bGlrZSBzeXN0ZW0gKGUuZy4gVU5JWCB0byBJQk0KKyAgIE1haW5mcmFtZSksIHRoaXMgcmVzdWx0 cyBpbiBjb3JydXB0aW9uIG9mIGVpdGhlciBhbGwgdGhlIHRleHQgZmlsZXMgb3IKKyAgIGFsbCB0 aGUgYmluYXJ5IGZpbGVzLgorCisgICBTdHJlYW0tb3JpZW50ZWQgZmlsZSBzeXN0ZW1zIHN1Y2gg YXMgaW4gVU5JWCBhbmQgRE9TIGRvIG5vdCByZWNvcmQgYW55CisgICBpbmZvcm1hdGlvbiBhYm91 dCB0aGUgZmlsZSB0byB0ZWxsIHVzIHdoZXRoZXIgdGhlIGZpbGUgc2hvdWxkIGJlCisgICB0cmFu c2ZlcnJlZCBpbiBiaW5hcnkgb3IgdGV4dCBtb2RlLCBtYWtpbmcgaXQgaW1wb3NzaWJsZSB0byBz ZWxlY3QgdGhlCisgICB0cmFuc2ZlciBtb2RlIGZvciBlYWNoIGZpbGUgaW4gYSBncm91cCBhdXRv bWF0aWNhbGx5IHdpdGggYW55CisgICBjZXJ0YWludHkuCisKKyAgIEhvd2V2ZXIsIHdlIGNhbiB1 c2Ugc29tZSBmYWlybHktd2VsbCBlc3RhYmxpc2hlZCBmaWxlIG5hbWluZworICAgY29udmVudGlv bnMgZm9yIHRoaXMgcHVycG9zZS4gQy1LZXJtaXQgNy4wIGxldHMgeW91IHByb3ZpZGUgbGlzdHMg b2YKKyAgIGZpbGVuYW1lIHBhdHRlcm5zIHRoYXQgYXJlIHVzZWQgdG8gc2VwYXJhdGVseSBkZXRl cm1pbmUgdGhlIGZpbGUgdHlwZQorICAgZm9yIGVhY2ggaW5kaXZpZHVhbCBmaWxlIGJlaW5nIHRy YW5zZmVycmVkLiBBIHBhdHRlcm4gaXMgYSBzdHJpbmcsCisgICBwb3NzaWJseSBjb250YWluaW5n IHRoZSBzcGVjaWFsIGNoYXJhY3RlcnMgIioiIChhc3Rlcmlzaywgd2hpY2ggbWF0Y2hlcworICAg YW55IHN0cmluZyBvZiB6ZXJvIG9mIG1vcmUgY2hhcmFjdGVycykgYW5kL29yICI/IiAocXVlc3Rp b24gbWFyaywgd2hpY2gKKyAgIG1hdGNoZXMgYW55IHNpbmdsZSBjaGFyYWN0ZXIpLiBGb3IgZXhh bXBsZSAiYSpiIiBtYXRjaGVzIGFsbCBmaWxlcworICAgd2hvc2UgbmFtZXMgc3RhcnQgd2l0aCAi YSIgYW5kIGVuZCB3aXRoICJiIiwgc3VjaCBhcyAiYWIiLCAiYXJiIiwKKyAgICJhYmFiYWJhYmFi IiwgZXRjLCBidXQgbm90ICJhYmJhIi4gQW5kICJhP2IiIG1hdGNoZXMgYW55IGZpbGUgd2hvc2UK KyAgIG5hbWUgc3RhcnRzIHdpdGggImEiLCBlbmRzIHdpdGggImIiLCBhbmQgaXMgZXhhY3RseSAz IGNoYXJhY3RlcnMgbG9uZy4KKworICAgICBOT1RFOiBXaGVuIHR5cGluZyBjb21tYW5kcyBhdCB0 aGUgQy1LZXJtaXQgcHJvbXB0LCB5b3UgbXVzdCBwcmVmaXgKKyAgICAgIj8iIHdpdGggXCB0byBv dmVycmlkZSBpdHMgbm9ybWFsIGZ1bmN0aW9uIG9mIGdpdmluZyBoZWxwLgorCisgICAoQWxzbyBz ZWUgWzQ3MF1TZWN0aW9uIDQuOSBmb3IgYWRkaXRpb25hbCBwYXR0ZXJuLW1hdGNoaW5nIG5vdGF0 aW9ucworICAgdGhhdCBtaWdodCBiZSBhdmFpbGFibGUgaW4geW91ciB2ZXJzaW9uIG9mIEMtS2Vy bWl0LikKKworICAgV2hlbiB5b3UgaGF2ZSBzcGVjaWZpZWQgZmlsZW5hbWUgcmVjb2duaXRpb24g cGF0dGVybnMsIEMtS2VybWl0IGNhbgorICAgdHJhbnNmZXIgdGhlIG9uZXMgd2hvc2UgbmFtZXMg bWF0Y2ggYW55IG9mIHRoZSBiaW5hcnktbW9kZSBwYXR0ZXJucyBpbgorICAgYmluYXJ5IG1vZGUs IGFuZCB0aG9zZSB3aXRoIG5hbWVzIHRoYXQgbWF0Y2ggYW55IG9mIHRoZSB0ZXh0LW1vZGUKKyAg IHBhdHRlcm5zIGluIHRleHQgbW9kZSwgYW5kIHRob3NlIHdob3NlIG5hbWVzIG1hdGNoIG5laXRo ZXIgaW4gdGhlCisgICBwcmV2YWlsaW5nIG1vZGUgeW91IGhhdmUgY2hvc2VuLCBvciB0aGF0IHdh cyBjaG9zZW4gYXV0b21hdGljYWxseSB2aWEKKyAgIHBlZXIgcmVjb2duaXRpb24uCisKKzQuMy4z LiBDb21tYW5kcworCisgICBTRVQgRklMRSBQQVRURVJOUyB7IE9OLCBPRkYsIEFVVE8gfQorICAg ICAgICAgIFRoaXMgdGVsbHMgS2VybWl0IHdoZXRoZXIgdG8gZG8gcGVyLWZpbGUgZmlsZW5hbWUK KyAgICAgICAgICBwYXR0ZXJuLW1hdGNoaW5nIHRvIGRldGVybWluZSB0ZXh0IG9yIGJpbmFyeSBt b2RlLiBUaGUgbm9ybWFsCisgICAgICAgICAgYW5kIGRlZmF1bHQgc2V0dGluZyBpcyBBVVRPLCB3 aGljaCBtZWFucyB0byB1c2UgcGF0dGVybiBsaXN0cyB0bworICAgICAgICAgIHN3aXRjaCB0cmFu c2ZlciBtb2RlIG9ubHkgd2hlbiBpdCBpcyBjZXJ0YWluIHRoYXQgdGhlIG90aGVyCisgICAgICAg ICAgS2VybWl0IHByb2dyYW0gc3VwcG9ydHMgYXV0b21hdGljIG5vdGlmaWNhdGlvbiBvZiB0cmFu c2ZlciBtb2RlCisgICAgICAgICAgKHZpYSBBdHRyaWJ1dGUgcGFja2V0cykgb24gYSBwZXItZmls ZSBiYXNpcyAodGhpcyBpbmZvcm1hdGlvbiBpcworICAgICAgICAgIG9idGFpbmVkIGF1dG9tYXRp Y2FsbHkgZHVyaW5nIHByb3RvY29sIHN0YXJ0dXAgbmVnb3RpYXRpb24pLiBPTgorICAgICAgICAg IG1lYW5zIHRvIGFsd2F5cyBkZXRlcm1pbmUgdGhlIHRyYW5zZmVyIG1vZGUgZnJvbSB0aGUgZmls ZW5hbWUKKyAgICAgICAgICBhbmQgcGF0dGVybiBsaXN0IHdoZW4gc2VuZGluZyBmaWxlcy4gVXNl IE9GRiB0byBkaXNhYmxlIHRoaXMKKyAgICAgICAgICBmZWF0dXJlICh3aXRob3V0IHJlc2V0dGlu ZyB5b3VyIHBhdHRlcm4gbGlzdHMpLiBBbHNvIG5vdGUgdGhhdAorICAgICAgICAgIGlmIHlvdSBo YXZlIHNlbGVjdGVkIExBQkVMRUQgZmlsZSB0cmFuc2ZlciAoU0VUIEZJTEUgVFlQRQorICAgICAg ICAgIExBQkVMRUQpLCB0aGlzIHRha2VzIHByZWNlZGVuY2Ugb3ZlciBmaWxlbmFtZS1tYXRjaGlu ZyBwYXR0ZXJucworICAgICAgICAgIGFuZCBhbGwgZmlsZXMgYXJlIHNlbnQgaW4gbGFiZWxlZCBt b2RlLgorCisgICBTRVQgVFJBTlNGRVIgTU9ERSBNQU5VQUwKKyAgICAgICAgICBEaXNhYmxlcyB0 aGUgdXNlIG9mIGZpbGVuYW1lIHBhdHRlcm5zLCBubyBtYXR0ZXIgd2hhdCB0aGUgRklMRQorICAg ICAgICAgIFBBVFRFUk5TIHNldHRpbmcuCisKKyAgIFJFTU9URSBTRVQgVFJBTlNGRVIgTU9ERSBN QU5VQUwKKyAgICAgICAgICBDbGllbnQgY29tbWFuZCB0byBkaXNhYmxlIGF1dG9tYXRpYyB0cmFu c2ZlciBtb2RlLCBhbmQgdGhlcmVmb3JlCisgICAgICAgICAgYWxzbyBmaWxlbmFtZSBwYXR0ZXJu cywgaW4gdGhlIHNlcnZlci4gU3lub255bTogUkVNT1RFIFNFVCBYRkVSCisgICAgICAgICAgTU9E RSBNQU5VQUwuCisKKyAgIHsgR0VULCBTRU5ELCBldGMgfSB7IC9CSU5BUlksIC9URVhUIH0KKyAg ICAgICAgICBJbmNsdWRpbmcgYSAvQklOQVJZIG9yIC9URVhUIChvciwgd2hlcmUgc3VwcG9ydGVk LCAvSU1BR0Ugb3IKKyAgICAgICAgICAvTEFCRUxFRCkgc3dpdGNoIHdpdGggYSBmaWxlLXRyYW5z ZmVyIGNvbW1hbmQgY2hhbmdlcyB0aGUKKyAgICAgICAgICB0cmFuc2ZlciBtb2RlIHRvIG1hbnVh bCBmb3IgdGhhdCBjb21tYW5kIG9ubHksIGFuZCB0aGVyZWZvcmUKKyAgICAgICAgICBkaXNhYmxl cyBwYXR0ZXJucyB0aGF0IHRoYXQgY29tbWFuZC4KKworICAgU0VUIEZJTEUgQklOQVJZLVBBVFRF Uk5TIFsgcGF0dGVybiBbIHBhdHRlcm4gWyBwYXR0ZXJuIC4uLiBdIF0gXQorICAgICAgICAgIEEg bGlzdCBvZiB6ZXJvIG9yIG1vcmUgcGF0dGVybnMsIHNlcGFyYXRlZCBieSBzcGFjZXMgKG5vdAor ICAgICAgICAgIGNvbW1hcykuIExldHRlcnMgaW4gYSBwYXR0ZXJuIGFyZSBjYXNlLXNlbnNpdGl2 ZSBpZiB0aGUKKyAgICAgICAgICB1bmRlcmx5aW5nIGZpbGVuYW1lcyBhcmUgY2FzZSBzZW5zaXRp dmUgKGFzIGluIFVOSVgpLCBhbmQKKyAgICAgICAgICBjYXNlLWluc2Vuc2l0aXZlIG90aGVyd2lz ZSAoYXMgaW4gV2luZG93cykuIElmIGEgZmlsZSdzIG5hbWUgaXMKKyAgICAgICAgICBtYXRjaGVk IGJ5IGFueSBwYXR0ZXJuIGluIHRoZSBsaXN0IGFuZCBTRVQgRklMRSBQQVRURVJOUyBpcyBPTiwK KyAgICAgICAgICB0aGUgZmlsZSBpcyBzZW50IGluIGJpbmFyeSBtb2RlLiBFeGFtcGxlczoKKwor ICBTRVQgRklMRSBCSU5BUlktUEFUVEVSTlMgKi5neiAqLlogKi50YXIgKi56aXAgKi5vICouc28g Ki5hICoub3V0IDsgVU5JWAorICBTRVQgRklMRSBCSU5BUlktUEFUVEVSTlMgKi5FWEUgKi5aSVAg Ki5PQkogKi5DT00gOyBET1Mgb3IgT1MvMiBvciBXaW5kb3dzCisKKyAgICAgICAgICBJZiBhIHBh dHRlcm4gY29udGFpbnMgc3BhY2VzLCBlbmNsb3NlIGl0IGluIGJyYWNlcy4KKworICAgU0VUIEZJ TEUgVEVYVC1QQVRURVJOUyBbIHBhdHRlcm4gWyBwYXR0ZXJuIFsgcGF0dGVybiAuLi4gXSBdIF0K KyAgICAgICAgICBMaWtlIFNFVCBGSUxFIEJJTkFSWS1QQVRURVJOUywgYnV0IHRoZSBwYXR0ZXJu cyBjaG9vc2UgdGV4dAorICAgICAgICAgIGZpbGVzIHJhdGhlciB0aGFuIGJpbmFyeSBvbmVzLiBF eGFtcGxlczoKKworICBTRVQgRklMRSBURVhULVBBVFRFUk5TICouVFhUICouS1NDICouSFRNKiAq LkJBVCA7IERPUywgV2luZG93cywgT1MvMgorCisgICBBREQgQklOQVJZLVBBVFRFUk5TIFsgcGF0 dGVybiBbIHBhdHRlcm4gWyBwYXR0ZXJuIC4uLiBdIF0gXQorICAgICAgICAgIEFkZHMgb25lIG9y IG1vcmUgcGF0dGVybnMgdG8gdGhlIEJJTkFSWS1QQVRURVJOIGxpc3QuCisKKyAgIEFERCBURVhU LVBBVFRFUk5TIFsgcGF0dGVybiBbIHBhdHRlcm4gWyBwYXR0ZXJuIC4uLiBdIF0gXQorICAgICAg ICAgIEFkZHMgb25lIG9yIG1vcmUgcGF0dGVybnMgdG8gdGhlIFRFWFQtUEFUVEVSTiBsaXN0Lgor CisgICBSRU1PVkUgQklOQVJZLVBBVFRFUk5TIFsgcGF0dGVybiBbIHBhdHRlcm4gWyBwYXR0ZXJu IC4uLiBdIF0gXQorICAgICAgICAgIFJlbW92ZXMgb25lIG9yIG1vcmUgcGF0dGVybnMgZnJvbSB0 aGUgQklOQVJZLVBBVFRFUk4gbGlzdC4gVGhlCisgICAgICAgICAgZ2l2ZW4gcGF0dGVybnMgYXJl IG1hdGNoZWQgd2l0aCB0aGUgb25lcyBpbiB0aGUgQklOQVJZLVBBVFRFUk5TCisgICAgICAgICAg bGlzdCB3aXRoIGNhc2Ugc2Vuc2l0aXZpdHkgaWYgdGhlIHVuZGVybHlpbmcgZmlsZSBzeXN0ZW0g aGFzCisgICAgICAgICAgY2FzZS1zZW5zaXRpdmUgbmFtZXMgKGFzIGRvIFVOSVggYW5kIE9TLTkp LCBvdGhlcndpc2Ugd2l0aCBjYXNlCisgICAgICAgICAgaW5kZXBlbmRlbmNlLgorCisgICBSRU1P VkUgVEVYVC1QQVRURVJOUyBbIHBhdHRlcm4gWyBwYXR0ZXJuIFsgcGF0dGVybiAuLi4gXSBdIF0K KyAgICAgICAgICBSZW1vdmVzIG9uZSBvciBtb3JlIHBhdHRlcm5zIGZyb20gdGhlIFRFWFQtUEFU VEVSTiBsaXN0LgorCisgICBTSE9XIFBBVFRFUk5TCisgICAgICAgICAgRGlzcGxheXMgdGhlIGN1 cnJlbnQgcGF0dGVybiBzZWxlY3Rpb25zLgorCisgICBXaGVuZXZlciB5b3UgZ2l2ZSBhIFNFVCBG SUxFIEJJTkFSWS1QQVRURVJOUyBvciBTRVQgRklMRSBURVhULVBBVFRFUk5TCisgICBjb21tYW5k LCB0aGUgcHJldmlvdXMgbGlzdCBpcyByZXBsYWNlZC4gSWYgeW91IGdpdmUgb25lIG9mIHRoZXNl CisgICBjb21tYW5kcyB3aXRob3V0IGEgcGF0dGVybiBsaXN0LCB0aGUgcHJldmlvdXMgbGlzdCBp cyByZW1vdmVkLgorCisgICBXaGVuIHBhdHRlcm5zIGFyZSBhY3RpdmUgYW5kIGZpbGVzIGFyZSBi ZWluZyBzZW50LCB0ZXh0IHBhdHRlcm5zIChpZgorICAgYW55KSBhcmUgYXBwbGllZCBmaXJzdCAo YnV0IG9ubHkgaWYgbm90IFJFU0VORGluZyBhbmQgbm90IHNlbmRpbmcgaW4KKyAgIExBQkVMRUQg bW9kZSksIHRoZW4gYmluYXJ5IHBhdHRlcm5zLCBzbyBpZiB0aGUgc2FtZSBwYXR0ZXJuIGFwcGVh cnMgaW4KKyAgIGJvdGggbGlzdHMsIGJpbmFyeSBtb2RlIGlzIGNob3Nlbi4KKworNC4zLjQuIEV4 YW1wbGVzCisKKyAgIEhlcmUncyBhbiBleGFtcGxlIHRoYXQgbWlnaHQgYmUgdXNlZCB3aGVuIHNl bmRpbmcgZmlsZXMgZnJvbSBVTklYOgorCisgIHNldCBmaWxlIHR5cGUgYmluYXJ5CisgIHNldCBm aWxlIHRleHQtcGF0dGVybnMgKi5jICouaCAqLncgKi50eHQgbWFrZWZpbGUKKyAgc2V0IGZpbGUg YmluYXJ5LXBhdHRlcm5zICoubworICBtc2VuZCBtYWtlZmlsZSB3ZXJtaXQgd2FydCBjayouW2N3 aG9dIGNrKi50eHQKKworICAgTm90ZSB0aGF0ICJ3ZXJtaXQiIGFuZCAid2FydCIgZG8gbm90IG1h dGNoIGFueSBwYXR0ZXJucyBzbyB0aGV5IGFyZQorICAgc2VudCBpbiB0aGUgcHJldmFpbGluZyBt b2RlLCB3aGljaCBpcyBiaW5hcnkuIEFsc28gbm90ZSB0aGUgdXNlIG9mCisgICAibWFrZWZpbGUi IGFzIGEgcGF0dGVybiB0aGF0IGRvZXMgbm90IGNvbnRhaW4gYW55IHdpbGRjYXJkIGNoYXJhY3Rl cnMKKyAgICh0aGVyZSBpcyBubyBvdGhlciBjb252ZW50aW9uIHRvIGRpc3Rpbmd1aXNoIGFtb25n ICJ3ZXJtaXQiIGFuZCAid2FydCIsCisgICB3aGljaCBhcmUgYmluYXJ5IGV4ZWN1dGFibGVzLCBh bmQgIm1ha2VmaWxlIiwgd2hpY2ggaXMgYSB0ZXh0IGZpbGUsCisgICBwdXJlbHkgYnkgdGhlaXIg bmFtZXMpLgorCisgICBNb3N0IEMtS2VybWl0IGltcGxlbWVudGF0aW9ucyBoYXZlIGEgZGVmYXVs dCBwYXR0ZXJuIGxpc3QgYnVpbHQgaW4sCisgICB3aGljaCBpbmNsdWRlcyBwYXR0ZXJucyB0aGF0 IGFyZSBhbG1vc3QgY2VydGFpbiB0byBzdWNjZWVkIGluIHBpY2tpbmcKKyAgIHRoZSByaWdodCB0 cmFuc2ZlciBtb2RlLiBPdGhlcnMgYXJlIG9taXR0ZWQgZHVlIHRvIGFtYmlndWl0eS4gRm9yCisg ICBleGFtcGxlICIuaGxwIiwgYW5kICIuaW5pIiBhcmUgZ2VuZXJhbGx5IGJpbmFyeSB0eXBlcyBp biBXaW5kb3dzIGJ1dAorICAgdGV4dCB0eXBlcyBldmVyeXdoZXJlIGVsc2UuCisKKyAgICAgTk9U RTogIi5kb2MiLCB1c2VkIGZvciBkZWNhZGVzIHRvIGRlbm90ZSBwbGFpbi10ZXh0IGRvY3VtZW50 YXRpb24KKyAgICAgZmlsZXMsIG5vdyBtb3JlIG9mdGVuIHRoYW4gbm90IGRlbm90ZXMgYSBNaWNy b3NvZnQgV29yZCBEb2N1bWVudCwgc28KKyAgICAgIi5kb2MiIGlzIG5vdyBjb25zaWRlcmVkIGEg YmluYXJ5IHR5cGUgc2luY2UgaXQgZG9lcyBsZXNzIGhhcm0gdG8KKyAgICAgdHJhbnNmZXIgYSBw bGFpbi10ZXh0IGRvY3VtZW50IGluIGJpbmFyeSBtb2RlIHRoYW4gaXQgZG9lcyB0bworICAgICB0 cmFuc2ZlciBhbiBNUyBXb3JkIGZpbGUgaW4gdGV4dCBtb2RlIChleGNlcHQgd2hlbiBJQk0gbWFp bmZyYW1lcworICAgICBhcmUgaW52b2x2ZWQhKQorCisgICAgIEFOT1RIRVIgTk9URTogIi5jb20i IGZpbGVzIGFyZSBiaW5hcnkgaW4gRE9TLWxpa2Ugb3BlcmF0aW5nIHN5c3RlbXMsCisgICAgIGJ1 dCB0aGV5IGFyZSB0ZXh0IChEQ0wgY29tbWFuZCBwcm9jZWR1cmVzKSBpbiBWTVMuIFZNUyBDLUtl cm1pdAorICAgICBzZW5kcyAuQ09NIGZpbGVzIGluIHRleHQgbW9kZTsgSzk1IHNlbmRzIHRoZW0g aW4gYmluYXJ5IG1vZGUuIElmIHlvdQorICAgICBkb3dubG9hZCBhIC5DT00gZmlsZSBmcm9tIFZN UyB0byBET1Mgb3IgV2luZG93cywgYW5kIHRoZW4gdXBsb2FkIGl0CisgICAgIHRvIGFub3RoZXIg Vk1TIHN5c3RlbSwgYmUgc3VyZSB0byB1c2UgU0VORCAvVEVYVCB0byBwcmVzZXJ2ZSBpdHMKKyAg ICAgdGV4dG5lc3MuCisKKyAgIFlvdSBjYW4gc2VlIHRoZSBkZWZhdWx0IHBhdHRlcm4gbGlzdCBi eSBzdGFydGluZyBDLUtlcm1pdCB3aXRob3V0IGl0cworICAgaW5pdGlhbGl6YXRpb24gZmlsZSAo ZS5nLiAia2VybWl0IC1ZIikgYW5kIHVzaW5nIHRoZSBTSE9XIFBBVFRFUk5TCisgICBjb21tYW5k LiBJZiB5b3Ugd2lsbCBiZSBkZXBlbmRpbmcgb24gdGhpcyBmZWF0dXJlLCBiZSBzdXJlIHRvIGV4 YW1pbmUKKyAgIHRoZSBsaXN0IGNhcmVmdWxseSBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBhcHBs aWNhdGlvbnMgdGhhdCB5b3UgdXNlLgorCisgICBUaGUgZGVmYXVsdCBwYXR0ZXJuIGxpc3QgZG9l cyBub3QgdGFrZSAiYmFja3VwIGZpbGVzIiBpbnRvIGFjY291bnQKKyAgIGJlY2F1c2UgKGEpIHBl b3BsZSB1c3VhbGx5IGRvbid0IHdhbnQgdG8gdHJhbnNmZXIgdGhlbTsgYW5kIChiKSBpdAorICAg d291bGQgbWFrZSB0aGUgcGF0dGVybiBsaXN0cyBtb3JlIHRoYW4gdHdpY2UgYXMgbG9uZy4gRm9y IGV4YW1wbGUsIHdlCisgICB3b3VsZCBuZWVkIHRvIGluY2x1ZGUgYm90aCAqLnR4dCBhbmQgKi50 eHQuflswLTldKn4gZm9yICIudHh0IiBmaWxlcywKKyAgIGFuZCBzaW1pbGFybHkgZm9yIGFsbCB0 aGUgb3RoZXJzLiBJbnN0ZWFkLCB5b3UgY2FuIHVzZSBTRU5EIC9OT0JBQ0tVUAorICAgKG9yIFNF VCBTRU5EIEJBQ0tVUCBPRkYpIHRvIHNraXAgb3ZlciBhbGwgYmFja3VwIGZpbGVzLgorCisgICBQ dXQgeW91ciBtb3N0IGNvbW1vbmx5LXVzZWQgc2FmZSBwYXR0ZXJuIGRlY2xhcmF0aW9ucyBpbiB5 b3VyIEMtS2VybWl0CisgICBjdXN0b21pemF0aW9uIGZpbGUgKGNrZXJtb2QuaW5pLCAubXlrZXJt cmMsIGs5NWN1c3RvbS5pbmksIGV0YykuCisKKyAgIEFzIG5vdGVkLCBTRVQgRklMRSBQQVRURVJO UyBpcyBPTiBieSBkZWZhdWx0LiBTb21ldGltZXMsIGhvd2V2ZXIsIGl0IGlzCisgICBkZXNpcmFi bGUsIG9yIG5lY2Vzc2FyeSwgdG8gZm9yY2UgZmlsZXMgdG8gYmUgc2VudCBpbiBhIHBhcnRpY3Vs YXIKKyAgIG1vZGUsIGFuZCBvZnRlbiB0aGlzIG11c3QgYmUgZG9uZSBmcm9tIHRoZSBjb21tYW5k IGxpbmUgKGUuZy4gd2hlbgorICAgdXNpbmcgS2VybWl0IGFzIGEgZG93bmxvYWQgaGVscGVyIGlu IGEgV2ViIGJyb3dzZXIgbGlrZSBMeW54KS4gVGhlIC1WCisgICBjb21tYW5kLWxpbmUgb3B0aW9u cyBpcyBlcXVpdmFsZW50IHRvIFNFVCBGSUxFIFBBVFRFUk5TIE9GRiBhbmQgU0VUCisgICBUUkFO U0ZFUiBNT0RFIE1BTlVBTC4gRXhhbXBsZToKKworICBrZXJtaXQgLVZpcyBvb2ZhLnR4dAorCisg ICBmb3JjZXMgb29mYS50eHQgdG8gYmUgc2VudCBpbiBiaW5hcnkgbW9kZSwgZXZlbiB0aG91Z2gg Ii50eHQiIG1pZ2h0CisgICBtYXRjaCBhIHRleHQgcGF0dGVybi4KKworNC40LiBGaWxlIFBlcm1p c3Npb25zCisKKyAgICJQZXJtaXNzaW9ucyIgcmVmZXJzIHRvIGEgY29kZSBhc3NvY2lhdGVkIHdp dGggYSBmaWxlIHRoYXQgc3BlY2lmaWVzCisgICB3aG8gaXMgYWxsb3dlZCB0byBhY2Nlc3MgaXQs IGFuZCBpbiB3aGF0IG1hbm5lci4gRm9yIGV4YW1wbGUsIHRoZQorICAgb3duZXIsIHRoZSBtZW1i ZXJzIG9mIG9uZSBvciBtb3JlIGdyb3VwcywgdGhlIHN5c3RlbSBhZG1pbmlzdHJhdG9yLCBhbmQK KyAgIGV2ZXJ5Ym9keSBlbHNlLCBtaWdodCBiZSBhbGxvd2VkIHZhcmlvdXMgY29tYmluYXRpb25z IG9mIFJlYWQsIFdyaXRlLAorICAgQXBwZW5kLCBFeGVjdXRlLCBvciBMaXN0aW5nIGFjY2Vzcy4K KworICAgVGhlIHBlcm1pc3Npb24gY29kZSBnb2VzIGJ5IGRpZmZlcmVudCBuYW1lcyBvbiBkaWZm ZXJlbnQgcGxhdGZvcm1zLiBJbgorICAgVU5JWCwgaXQgbWlnaHQgYmUgY2FsbGVkIHRoZSBmaWxl bW9kZS4gSW4gVk1TLCBpdCBpcyBjYWxsZWQgdGhlIGZpbGUKKyAgIHByb3RlY3Rpb24gKG9yIHBy b3RlY3Rpb24gbWFzaykuCisKKyAgIFRoZSBjb21tZW50cyBpbiB0aGlzIHNlY3Rpb24gcHJlc2Vu dGx5IGFwcGx5IG9ubHkgdG8gdGhlIFVOSVggYW5kIFZNUworICAgdmVyc2lvbnMgb2YgQy1LZXJt aXQsIHRvIHdoaWNoIHRoZXNlIGZlYXR1cmVzIHdlcmUgYWRkZWQgaW4gdmVyc2lvbgorICAgNy4w OyB0aGUgRE9TLCBXaW5kb3dzLCBhbmQgT1MvMiBmaWxlIHN5c3RlbXMgZW1ib2R5IG5vIG5vdGlv bnMgb2YKKyAgIHByb3RlY3Rpb24sIGFuZCBzbyBNUy1ET1MgS2VybWl0IGFuZCBLZXJtaXQgOTUg ZG8gbm90IHNlbmQgZmlsZQorICAgcGVybWlzc2lvbnMsIGFuZCBpZ25vcmUgdGhlbSB3aGVuIHJl Y2VpdmVkLgorCisgICBUaGUgcGVybWlzc2lvbnMgZm9yIGEgcmVjZWl2ZWQgZmlsZSBhcmUgZGV0 ZXJtaW5lZCBieSBhIGNvbWJpbmF0aW9uIG9mCisgICB0aGUgZmlsZSB0cmFuc2ZlciBtb2RlIChW TVMtdG8tVk1TIHRyYW5zZmVycyBvbmx5KSwgd2hldGhlciBhIGZpbGUgb2YKKyAgIHRoZSBzYW1l IG5hbWUgZXhpc3RzIGFscmVhZHksIHdoZXRoZXIgcGVybWlzc2lvbnMgb2YgdGhlIGZpbGUgYXJl CisgICByZWNlaXZlZCBpbiB0aGUgZmlsZSBhdHRyaWJ1dGUgcGFja2V0LCBhbmQgdGhlIHNldHRp bmcgb2YgQVRUUklCVVRFUworICAgUFJPVEVDVElPTi4KKworICAgVGhlIGRlZmF1bHQgZm9yIEFU VFJJQlVURVMgUFJPVEVDVElPTiBpcyBPTi4gSWYgbm8gYXR0cmlidXRlcyBhcmUKKyAgIHJlY2Vp dmVkLCB0aGUgZWZmZWN0IGlzIHRoZSBzYW1lIGFzIGlmIGF0dHJpYnV0ZXMgUFJPVEVDVElPTiB3 ZXJlIE9GRi4KKworICAgRm9yIFZNUy10by1WTVMgdHJhbnNmZXJzLCB0aGUgZGVmYXVsdCBMQUJF TEVEIG1vZGUgc2ltcGx5IGNvcGllcyB0aGUKKyAgIHByb3RlY3Rpb24gY29kZSBmcm9tIHNvdXJj ZSB0byBkZXN0aW5hdGlvbi4KKworNC40LjEuIFdoZW4gQVRUUklCVVRFUyBQUk9URUNUSU9OIGlz IE9GRgorCisgICBJZiBubyBmaWxlIG9mIHRoZSBzYW1lIG5hbWUgZXhpc3RzLCBzeXN0ZW0gZGVm YXVsdHMgZGV0ZXJtaW5lIHRoZQorICAgcGVybWlzc2lvbnMgb2YgdGhlIG5ldyBmaWxlLiBPdGhl cndpc2UsIHRoZSBhY3Rpb25zIHRha2VuIGRlcGVuZCBvbiB0aGUKKyAgIGN1cnJlbnQgRklMRSBD T0xMSVNJT04gc2V0dGluZzogQkFDS1VQLCBPVkVSV1JJVEUsIFJFTkFNRSwgZXRjLCBhcworICAg ZG9jdW1lbnRlZCBpbiBbNDcxXVVzaW5nIEMtS2VybWl0LiBCdXQgbm93IHRoZSBuZXcgZmlsZSAo aWYgaXQgaXMKKyAgIGNyZWF0ZWQgYXQgYWxsKSBhdXRvbWF0aWNhbGx5IGluaGVyaXRzIHRoZSBw ZXJtaXNzaW9ucyAobW9kZSBiaXRzKSBvZgorICAgdGhlIGV4aXN0aW5nIGZpbGUgaW4gYSB3YXkg dGhhdCBpcyBhcHByb3ByaWF0ZSBmb3IgdGhlIHBsYXRmb3JtLgorCis0LjQuMS4xLiBVbml4CisK KyAgIEFsbCBtb2RlIGJpdHMgYXJlIGluaGVyaXRlZCBleGNlcHQgdGhlIGRpcmVjdG9yeSBiaXQs IHNpbmNlIHRoZQorICAgaW5jb21pbmcgZmlsZSBjYW4gbm90IHBvc3NpYmx5IGJlIGEgZGlyZWN0 b3J5LiAoSW4gYW55IGNhc2UsIGl0IGlzIG5vdAorICAgcG9zc2libGUgdG8gcmVjZWl2ZSBhIGZp bGUgdGhhdCBoYXMgdGhlIHNhbWUgbmFtZSBhcyBhbiBleGlzdGluZworICAgZGlyZWN0b3J5IHVu bGVzcyBGSUxFIENPTExJU0lPTiBpcyBzZXQgdG8gUkVOQU1FKS4KKworNC40LjEuMi4gVk1TCisK KyAgIEZpbGVzIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBhbiBleGlzdGluZyBmaWxlLCB0cmFuc2Zl cnJlZCBpbiBtb2RlcworICAgb3RoZXIgdGhhbiBMQUJFTEVEIGJldHdlZW4gVk1TIHN5c3RlbXMs IGluaGVyaXQgdGhlIHByb3RlY3Rpb24gb2YgdGhlCisgICBwcmlvciB2ZXJzaW9uLgorCis0LjQu MiBXaGVuIEFUVFJJQlVURVMgUFJPVEVDVElPTiBpcyBPTgorCisgICBGaWxlIHBlcm1pc3Npb25z IGNhbiBiZSBjb252ZXllZCBhcyBwYXJ0IG9mIHRoZSBmaWxlIHRyYW5zZmVyIHByb2Nlc3MsCisg ICBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIEtlcm1pdCBwcm90b2NvbCBkZWZpbml0aW9uLiBJZiB0 aGUgZmlsZSBzZW5kZXIKKyAgIHB1dHMgc3lzdGVtLWRlcGVuZGVudCBhbmQvb3Igc3lzdGVtLWlu ZGVwZW5kZW50IHZlcnNpb25zIG9mIHRoZSBmaWxlCisgICBwcm90ZWN0aW9uIChwZXJtaXNzaW9u cykgaW50byB0aGUgQXR0cmlidXRlIChBKSBwYWNrZXQsIHRoZSBmaWxlCisgICByZWNlaXZlciBj YW4gc2V0IHRoZSBuZXcgZmlsZSdzIHBlcm1pc3Npb25zIGZyb20gdGhlbS4gT3RoZXJ3aXNlLCB0 aGUKKyAgIHBlcm1pc3Npb25zIGFyZSBzZXQgdGhlIHNhbWUgYXMgZm9yIEFUVFJJQlVURVMgUFJP VEVDVElPTiBPRkYuCisKKyAgIFdoZW4gdGhlIGluY29taW5nIEEgcGFja2V0IGNvbnRhaW5zIHN5 c3RlbS1kZXBlbmRlbnQgcGVybWlzc2lvbnMsIHRoZQorICAgZmlsZSByZWNlaXZlciBjaGVja3Mg dG8gc2VlIGlmIHRoZSBzZW5kZXIgaGFzIHRoZSBzYW1lIHN5c3RlbSBJRCAoZS5nLgorICAgYm90 aCB0aGUgc2VuZGluZyBhbmQgcmVjZWl2aW5nIHN5c3RlbXMgYXJlIFVOSVgsIG9yIGJvdGggYXJl IFZNUyk7IGlmCisgICBzbywgaXQgZGVjb2RlcyBhbmQgdXNlcyB0aGUgc3lzdGVtLWRlcGVuZGVu dCBwZXJtaXNzaW9uczsgb3RoZXJ3aXNlIGl0CisgICB1c2VzIHRoZSBnZW5lcmljIG9uZXMgKGlm IGFueSkgYW5kIGFwcGxpZXMgdGhlbSB0byB0aGUgb3duZXIgZmllbGQsCisgICBzZXR0aW5nIHRo ZSBvdGhlciBmaWVsZHMgYXBwcm9wcmlhdGVseSBhcyBkZXNjcmliZWQgaW4gdGhlIGZvbGxvd2lu ZworICAgc2VjdGlvbnMuCisKKyAgIFNldHRpbmcgdGhlIGluY29taW5nIGZpbGUncyBwcm90ZWN0 aW9uIGZyb20gdGhlIEEgcGFja2V0IGlzIGNvbnRyb2xsZWQKKyAgIGJ5IFNFVCBBVFRSSUJVVEVT IFBST1RFQ1RJT04gKG9yIFBFUk1JU1NJT04pLCB3aGljaCBpcyBPTiBieSBkZWZhdWx0LAorICAg YW5kIGl0cyBzdGF0dXMgaXMgZGlzcGxheWVkIGJ5IFNIT1cgQVRUUklCVVRFUy4KKworICAgVGhl IG1haW4gYmVuZWZpdCBvZiB0aGlzIGZlYXR1cmUgaXMgdG8gbm90IGhhdmUgdG8gImNobW9kICt4 IiBhbgorICAgZXhlY3V0YWJsZSBmaWxlIGFmdGVyIHRyYW5zZmVyIGZyb20gVU5JWCB0byBVTklY LiBJdHMgY3Jvc3MtcGxhdGZvcm0KKyAgIGJlbmVmaXRzIGFyZSBsZXNzIGV2aWRlbnQsIHBlcmhh cHMgdG8gcmV0YWluIHRoZSBzdGF0dXMgb2YgdGhlIFVuaXggJ3gnCisgICBiaXQgb24gYSBWTVMg c3lzdGVtLCBmb3Igc3Vic2VxdWVudCB0cmFuc2ZlciBiYWNrIHRvIGEgVW5peCBzeXN0ZW0uCisK KzQuNC4yLjEuIFN5c3RlbS1TcGVjaWZpYyBQZXJtaXNzaW9ucworCisgICBTeXN0ZW0tc3BlY2lm aWMgZmlsZSBwZXJtaXNzaW9ucyBhcmUgdXNlZCB3aGVuIHRoZSB0d28gS2VybWl0IHByb2dyYW1z CisgICByZWNvZ25pemUgZWFjaCBvdGhlciBhcyBydW5uaW5nIG9uIHRoZSBzYW1lIHR5cGUgb2Yg c3lzdGVtLiBGb3IKKyAgIGV4YW1wbGUsIGJvdGggYXJlIHJ1bm5pbmcgdW5kZXIgc29tZSBmb3Jt IG9mIFVOSVggKGl0IGRvZXNuJ3QgbWF0dGVyCisgICB3aGljaCBVTklYIHZhcmlhdGlvbiAtLSBI UC1VWCwgU29sYXJpcywgQUlYLCBldGMgLS0gYWxsIHVzZSB0aGUgc2FtZQorICAgc2NoZW1lIGZv ciBmaWxlIHBlcm1pc3Npb25zKTsgb3IgYm90aCBhcmUgcnVubmluZyB1bmRlciBWTVMgKGV2ZW4g aWYKKyAgIG9uZSBpcyBvbiBhbiBBbHBoYSBhbmQgdGhlIG90aGVyIG9uIGEgVkFYLCBhbmQvb3Ig b25lIGlzIG9sZCBhbmQgdGhlCisgICBvdGhlciBpcyBuZXcpLgorCis0LjQuMi4xLjEuIFVOSVgK KworICAgVU5JWCBzdXBwb3J0cyB0aHJlZSBjYXRlZ29yaWVzIG9mIHVzZXJzLCBGaWxlIE93bmVy LCBHcm91cCwgYW5kIFdvcmxkLAorICAgYW5kIHRocmVlIHR5cGVzIG9mIGZpbGUgYWNjZXNzIHBl cm1pc3Npb246IFJlYWQsIFdyaXRlLCBhbmQgRXhlY3V0ZS4KKyAgIFRodXMsIGEgVU5JWCBmaWxl J3MgcGVybWlzc2lvbnMgYXJlIGV4cHJlc3NlZCBpbiA5IGJpdHMuCisKKyAgIFRoZSBzeXN0ZW0t ZGVwZW5kZW50IHBlcm1pc3Npb24gc3RyaW5nIGZvciBVTklYIGlzIGEgMy1kaWdpdCBvY3RhbAor ICAgc3RyaW5nLCB0aGUgbG93LW9yZGVyIDkgYml0cyBvZiB0aGUgc3RfbW9kZSBtZW1iZXIgb2Yg dGhlIHN0YXQgc3RydWN0OworICAgd2UgZGVsaWJlcmF0ZWx5IGNob3Agb2ZmIHRoZSAiZmlsZSBm b3JtYXQiIGJpdHMgYmVjYXVzZSB0aGV5IGFyZSBub3QKKyAgIHBlcm1pc3Npb25zLCBub3IgZG8g d2UgY29udmV5IHRoZSBzZXR1aWQvc2V0Z2lkIGJpdHMsIGxvY2sgYml0LCBzdGlja3kKKyAgIGJp dCwgZXRjLgorCis0LjQuMi4xLjIuIFZNUworCisgICBWTVMgc3VwcG9ydHMgZm91ciBjYXRlZ29y aWVzIG9mIHVzZXJzLCBTeXN0ZW0sIEZpbGUgT3duZXIsIEdyb3VwLCBhbmQKKyAgIFdvcmxkLCBh bmQgZm91ciB0eXBlcyBvZiBmaWxlIGFjY2VzcyBwZXJtaXNzaW9uOiBSZWFkLCBXcml0ZSwgRXhl Y3V0ZSwKKyAgIGFuZCBEZWxldGUuIFRodXMsIGEgVk1TIGZpbGUncyBwZXJtaXNzaW9ucyBhcmUg ZXhwcmVzc2VkIGluIDE2IGJpdHMuCisKKyAgIFRoZSBzeXN0ZW0tZGVwZW5kZW50IHByb3RlY3Rp b24gc3RyaW5nIGZvciBWTVMgaXMgYSA0LWRpZ2l0IGhleGFkZWNpbWFsCisgICBzdHJpbmcsIGNv cnJlc3BvbmRpbmcgdG8gdGhlIGludGVybmFsLWZvcm1hdCBwcm90ZWN0aW9uIHdvcmQgb2YgdGhl CisgICBmaWxlIChSV0VEIGZvciBlYWNoIG9mIFdvcmxkLEdyb3VwLE93bmVyLFN5c3RlbSkuIEEg bmV3IGZpbGUgbm9ybWFsbHkKKyAgIGdldHMgYWxsIDE2IHByb3RlY3Rpb24gYml0cyBmcm9tIHRo ZSBvcmlnaW5hbCBmaWxlIG9mIHRoZSBzYW1lIG5hbWUuCisKKyAgIE5vdGU6IFZNUy10by1WTVMg dHJhbnNmZXJzIHRha2UgcGxhY2UgaW4gTEFCRUxFRCBtb2RlIHdoZW4gdGhlIHR3bworICAgQy1L ZXJtaXRzIHJlY29nbml6ZSBlYWNoIG90aGVyJ3MgcGxhdGZvcm0gYXMgVk1TICh1bmxlc3MgeW91 IGhhdmUKKyAgIGRpc2FibGVkIExBQkVMRUQtbW9kZSB0cmFuc2ZlcnMpLiBJbiB0aGlzIGNhc2Us IGFsbCBvZiBhIGZpbGUncworICAgYXR0cmlidXRlcyBhcmUgcHJlc2VydmVkIGluIHRoZSB0cmFu c2ZlciBhbmQgdGhlIHByb3RlY3Rpb24gbWFzayAoYW5kCisgICBvdGhlciBpbmZvcm1hdGlvbikg aXMgdGFrZW4gZnJvbSB0aGUgZmlsZSdzIGludGVybmFsIGluZm9ybWF0aW9uLCBhbmQKKyAgIHRo aXMgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIGFueSBpbmZvcm1hdGlvbiBpbiB0aGUgQXR0cmlidXRl IHBhY2tldHMuCisgICBZb3UgY2FuIGRlZmVhdCB0aGUgYXV0b21hdGljIHN3aXRjaGluZyBpbnRv IExBQkVMRUQgbW9kZSAoaWYgeW91IHdhbnQKKyAgIHRvKSB3aXRoIFNFVCBUUkFOU0ZFUiBNT0RF IE1BTlVBTC4KKworNC40LjIuMi4gU3lzdGVtLUluZGVwZW5kZW50IFBlcm1pc3Npb25zCisKKyAg IFRoZSBzeXN0ZW0taW5kZXBlbmRlbnQgKCJnZW5lcmljIikgcHJvdGVjdGlvbiBpcyB1c2VkIHdo ZW4gdGhlIHN5c3RlbQorICAgSURzIG9mIHRoZSB0d28gS2VybWl0IHByb2dyYW1zIGRvIG5vdCBh Z3JlZSAoZS5nLiBvbmUgaXMgVU5JWCwgdGhlCisgICBvdGhlciBpcyBWTVMpLiBUaGUgZ2VuZXJp YyBwcm90ZWN0aW9uIGF0dHJpYnV0ZSBpbmNsdWRlcyB0aGUgZm9sbG93aW5nCisgICBwZXJtaXNz aW9ucyAobm90IGFsbCBhcmUgYXBwbGljYWJsZSB0byBldmVyeSBmaWxlIHN5c3RlbSk6IFJlYWQs IFdyaXRlLAorICAgQXBwZW5kLCBFeGVjdXRlLCBEZWxldGUsIFNlYXJjaC4gVGhlIGdlbmVyaWMg cGVybWlzc2lvbnMgYXJlIGRlcml2ZWQKKyAgIGZyb20gdGhlIG93bmVyIHBlcm1pc3Npb25zIG9m IHRoZSBzb3VyY2UgZmlsZSwgdGh1cywgYSBVbml4ICd3JworICAgcGVybWlzc2lvbiBiZWNvbWVz IFZNUyBXcml0ZSxEZWxldGUuCisKKyAgIFRoZSBPd25lciBmaWVsZCBvZiB0aGUgbmV3IGZpbGUn cyBwZXJtaXNzaW9ucyBpcyBzZXQgZnJvbSB0aGUgaW5jb21pbmcKKyAgIGdlbmVyaWMgcHJvdGVj dGlvbiBhdHRyaWJ1dGUuCisKKyAgIEluIFVOSVgsIHRoZSBHcm91cCBhbmQgV29ybGQgcGVybWlz c2lvbnMgYXJlIHNldCBhY2NvcmRpbmcgdG8geW91cgorICAgdW1hc2ssIGV4Y2VwdCB0aGF0IGV4 ZWN1dGUgcGVybWlzc2lvbiBpcyBOT1Qgc2V0IGluIHRoZXNlIGZpZWxkcyBpZiBpdAorICAgd2Fz IG5vdCBhbHNvIHNldCBpbiB0aGUgZ2VuZXJpYyBwcm90ZWN0aW9uIChhbmQgY29uc2VxdWVudGx5 LCBpcyBzZXQgaW4KKyAgIHRoZSBPd25lciBmaWVsZCkuCisKKyAgIEluIFZNUywgdGhlIFN5c3Rl bSwgR3JvdXAsIGFuZCBXb3JsZCBwZXJtaXNzaW9ucyBhcmUgc2V0IGFjY29yZGluZyB0bworICAg dGhlIHByb2Nlc3MgZGVmYXVsdCBmaWxlIHBlcm1pc3Npb24gKGFzIHNob3duIGluIFZNUyBieSBT SE9XCisgICBQUk9URUNUSU9OKSwgZXhjZXB0IHRoYXQgbm8gcGVybWlzc2lvbnMgYXJlIGFsbG93 ZWQgaW4gdGhlc2UgZmllbGRzCisgICB0aGF0IGFyZSBub3QgaW5jbHVkZWQgaW4gdGhlIGdlbmVy aWMgcGVybWlzc2lvbnMuCisKKyAgIE5vdGUgdGhhdCB0aGUgVk1TIGFuZCBVTklYIGludGVycHJl dGF0aW9ucyBvZiBFeGVjdXRlIHBlcm1pc3Npb24gYXJlCisgICBub3QgaWRlbnRpY2FsLiBJbiBV TklYLCBhIGZpbGUgKGJpbmFyeSBleGVjdXRhYmxlLCBzaGVsbCBzY3JpcHQsIGV0YykKKyAgIG1h eSBub3QgYmUgZXhlY3V0ZWQgdW5sZXNzIGl0IGhhcyBFeGVjdXRlIHBlcm1pc3Npb24sIGFuZCBu b3JtYWxseQorICAgZmlsZXMgdGhhdCBhcmUgbm90IGludGVuZGVkIGZvciBleGVjdXRpb24gZG8g bm90IGhhdmUgRXhlY3V0ZQorICAgcGVybWlzc2lvbi4gSW4gVk1TLCBSZWFkIHBlcm1pc3Npb24g aW1wbGljaXRseSBzdXBwbGllcyBFeGVjdXRlCisgICBjYXBhYmlsaXR5LiBHZW5lcmFsbHkgZmls ZXMgdGhhdCBoYXZlIFJlYWQgcGVybWlzc2lvbiBhbHNvIGhhdmUKKyAgIGV4cGxpY2l0IEV4ZWN1 dGUgcGVybWlzc2lvbiwgYnV0IGZpbGVzIChiaW5hcnkgZXhlY3V0YWJsZXMsIERDTCBjb21tYW5k CisgICBwcm9jZWR1cmVzKSB0aGF0IGhhdmUgUmVhZCBwZXJtaXNzaW9uIGFuZCBub3QgRXhlY3V0 ZSBwZXJtaXNzaW9uIGNhbgorICAgc3RpbGwgYmUgZXhlY3V0ZWQuCisKKzQuNS4gRmlsZSBNYW5h Z2VtZW50IENvbW1hbmRzCisKKzQuNS4xLiBUaGUgRElSRUNUT1JZIENvbW1hbmQKKworICAgUHJp b3IgdG8gQy1LZXJtaXQgNy4wLCB0aGUgRElSRUNUT1JZIGNvbW1hbmQgYWx3YXlzIHJhbiBhbiBl eHRlcm5hbAorICAgc3lzdGVtIGNvbW1hbmQgKHN1Y2ggYXMgImxzIiBvbiBVTklYKSBvciBwcm9n cmFtIHRvIHByb2R1Y3QgdGhlCisgICBkaXJlY3RvcnkgbGlzdGluZy4gVGhpcyBoYWQgY2VydGFp biBhZHZhbnRhZ2VzLCBtb3N0bHkgdGhhdCB5b3UgY291bGQKKyAgIGluY2x1ZGUgc3lzdGVtLWRl cGVuZGVudCBvcHRpb25zIGZvciBjdXN0b21pemVkIGxpc3RpbmdzLCBlLmcuIG9uIFVOSVg6CisK KyAgZGlyIC1sdCBjKiB8IG1vcmUKKworICAgb3IgaW4gVk1TOgorCisgIGRpcmVjdG9yeSAvc2l6 ZS9kYXRlL3Byb3RlY3Rpb24vZXhjZXB0PSoub2JqIG9vZmEuKjswCisKKyAgIFRoaXMgYXBwcm9h Y2gsIGhvd2V2ZXIsIGNhcnJpZXMgc29tZSBkaXNhZHZhbnRhZ2VzOiBDLUtlcm1pdCBjYW4ndAor ICAgcmV0dXJuIFNVQ0NFU1Mgb3IgRkFJTFVSRSBzdGF0dXMgZm9yIChlLmcuKSAiZGlyIGZvbyIg YWNjb3JkaW5nIHRvCisgICB3aGV0aGVyIHRoZSBmaWxlICJmb28iIGV4aXN0czsgYW5kIGl0IHJ1 bnMgYW4gaW5mZXJpb3IgcHJvY2Vzcywgd2hpY2gKKyAgIG1pZ2h0IGJlIGEgcHJvYmxlbSBpbiBz b21lIGVudmlyb25tZW50cyBmb3IgcmVzb3VyY2UgYW5kL29yIHNlY3VyaXR5CisgICByZWFzb25z LCBhbmQgd29uJ3Qgd29yayBhdCBhbGwgaW4gYSAibm9wdXNoIiBlbnZpcm9ubWVudCAoZS5nLiBv bmUgaW4KKyAgIHdoaWNoIEMtS2VybWl0IGlzIGNvbmZpZ3VyZWQgdG8gZm9yYmlkIGFjY2VzcyB0 byBleHRlcmlvciBjb21tYW5kcyBhbmQKKyAgIHByb2dyYW1zLCBlLmcuIGluIGEgVk1TICJjYXB0 aXZlIGFjY291bnQiKS4KKworICAgSW4gQy1LZXJtaXQgNy4wIG9uIFZNUyBhbmQgVU5JWCwgYW5k IGluIEs5NSAxLjEuMTkgYW5kIGxhdGVyLCB0aGUKKyAgIERJUkVDVE9SWSBjb21tYW5kIGlzIGlu dGVybmFsIHRvIEtlcm1pdC4gSXQgY2FuIGJlIHJ1biBpbiBhICJub3B1c2giCisgICBlbnZpcm9u bWVudCBhbmQgcmV0dXJucyBTVUNDRVNTIG9yIEZBSUxVUkUgc3RhdHVzIGFwcHJvcHJpYXRlbHku IEluCisgICBVTklYIGl0IHByaW50cyBhbGwgZGF0ZXMgYW5kIHRpbWVzIGluIGEgY29uc2lzdGVu dCB3YXkgKHVubGlrZSBscykuIEluCisgICBWTVMgaXQgcHJpbnRzIHByZWNpc2UgZmlsZSBzaXpl cywgcmF0aGVyIHRoYW4gImJsb2NrcyIuIEl0IG9mZmVycworICAgc2V2ZXJhbCBmb3JtYXR0aW5n IGFuZCBvdGhlciBvcHRpb25zLCBidXQgaXQgaXMgbm90IG5lY2Vzc2FyaWx5IG1vcmUKKyAgIGZs ZXhpYmxlIHRoYW4gdGhlIGNvcnJlc3BvbmRpbmcgZXh0ZXJuYWwgY29tbWFuZHMgb3IgcHJvZ3Jh bXMgKHRoZSBVTklYCisgICAibHMiIHByb2dyYW0sIHRoZSBWTVMgImRpcmVjdG9yeSIgY29tbWFu ZCkuIFRoZSBzeW50YXggaXM6CisKKyAgIERJUkVDVE9SWSBbIHN3aXRjaCBbIHN3aXRjaCBbIC4u LiBdIF0gXSBbIGZpbGVzcGVjIF0KKworICAgSWYgbm8gZmlsZXNwZWMgaXMgZ2l2ZW4sIGFsbCBm aWxlcyBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkgYXJlIGxpc3RlZC4KKworICAgT3B0aW9uYWwg c3dpdGNoZXMgaW5jbHVkZSBhbGwgdGhlIHN0YW5kYXJkIGZpbGUtc2VsZWN0aW9uIHN3aXRjaGVz CisgICBwcmVzZW50ZWQgaW4gWzQ3Ml1TZWN0aW9uIDEuNS40LCBwbHVzOgorCisgICAvQUxMCisg ICAgICAgICAgU2hvdyBib3RoIHJlZ3VsYXIgZmlsZXMgYW5kIGRpcmVjdG9yaWVzOyB0aGlzIGlz IHRoZSBkZWZhdWx0LgorCisgICAvQVJSQVk6eAorICAgICAgICAgIEluc3RlYWQgb2YgZGlzcGxh eWluZyBhIGRpcmVjdG9yeSBsaXN0aW5nLCBwdXQgdGhlIGZpbGVzIHRoYXQKKyAgICAgICAgICB3 b3VsZCBoYXZlIGJlZW4gc2hvd24gKGJhc2VkIG9uIHRoZSBmaWxlc3BlYyBhbmQgb3RoZXIgc2Vs ZWN0aW9uCisgICAgICAgICAgc3dpdGNoZXMpIGluIHRoZSBnaXZlbiBhcnJheS4gVGhlIGFycmF5 IG5lZWQgbm90IChhbmQgc2hvdWxkCisgICAgICAgICAgbm90KSBiZSBwcmVkZWNsYXJlZDsgaWYg dGhlIGFycmF5IGFscmVhZHkgZXhpc3RzLCBpdCBpcworICAgICAgICAgIGRlc3Ryb3llZCBhbmQg cmV1c2VkLiBUaGUgYXJyYXkgbmFtZSBjYW4gYmUgYSBzaW5nbGUgbGV0dGVyLAorICAgICAgICAg IGxpa2UgImEiLCBvciBhbnkgZnVsbGVyIGZvcm0sIHN1Y2ggYXMgIiZhIiwgIlwmYSIsICJcJmFb XSIsIGV0Yy4KKyAgICAgICAgICBJZiB0aGUgL0FSUkFZIHN3aXRjaCBpcyBpbmNsdWRlZCwgdGhl IGZvbGxvd2luZyBvdGhlciBzd2l0Y2hlcworICAgICAgICAgIGFyZSBpZ25vcmVkOiAvQlJJRUYs IC9WRVJCT1NFLCAvSEVBRElORywgL1BBR0UsIC9FTkdMSVNIREFURSwKKyAgICAgICAgICAvSVNP REFURSwgL1hGRVJNT0RFLCAvTUVTU0FHRSwgL1NPUlQsIC9SRVZFUlNFLCAvQVNDRU5ESU5HLiBJ bgorICAgICAgICAgIG90aGVyIHdvcmRzLCBvbmx5IGZpbGUgc2VsZWN0aW9uIHN3aXRjaGVzIGFy ZSBtZWFuaW5nZnVsIHdpdGgKKyAgICAgICAgICAvQVJSQVk6IC9GSUxFUywgL0RJUkVDVE9SSUVT LCAvQUxMLCAvRE9URklMRVMsIC9OT0JBQ0tVUCwKKyAgICAgICAgICAvUkVDVVJTSVZFLCAvU01B TExFUiwgL0xBUkdFUiwgL0FGVEVSLCAvQkVGT1JFLCAvRVhDRVBULCBldGMuCisgICAgICAgICAg VGhlIHJlc3VsdGluZyBhcnJheSBoYXMgdGhlIG51bWJlciBvZiBmaWxlcyAobikgYXMgaXRzIDB0 aAorICAgICAgICAgIGVsZW1lbnQsIGFuZCB0aGUgZmlsZW5hbWVzIGluIGVsZW1lbnRzIDEgdGhy b3VnaCBuIEV4YW1wbGU6CisKKyAgZGlyIC9hcnJheTomYSAvZmlsZXMgL25vYmFja3VwIC9hZnRl cjoxOTk5MDEwMSAvbGFyZ2VyOjEwMDAwIFthYl0qCisgIHNob3cgYXJyYXkgJmEKKworICAgL0ZJ TEVTCisgICAgICAgICAgT25seSBzaG93IHJlZ3VsYXIgZmlsZXMuCisKKyAgIC9ESVJFQ1RPUklF UworICAgICAgICAgIE9ubHkgc2hvdyBkaXJlY3Rvcmllcy4KKworICAgL0JBQ0tVUAorICAgICAg ICAgIEluIFVOSVgsIE9TLTksIEstOTUsIGFuZCBvdGhlciB2ZXJzaW9ucyB0aGF0IHN1cHBvcnQg U0VUIEZJTEUKKyAgICAgICAgICBDT0xMSVNJT04gQkFDS1VQIGFuZCBjcmVhdGUgYmFja3VwIGZp bGVzIGJ5IGFwcGVuZGluZyAufm5+IHRvCisgICAgICAgICAgdGhlIGZpbGVuYW1lICh3aGVyZSAi biIgaXMgYSBudW1iZXIpLCAvQkFDS1VQIG1lYW5zIHRvIGluY2x1ZGUKKyAgICAgICAgICB0aGVz ZSBmaWxlcyBpbiBkaXJlY3RvcnkgbGlzdGluZ3MuIFRoaXMgaXMgdGhlIGRlZmF1bHQuCisKKyAg IC9OT0JBQ0tVUAorICAgICAgICAgIFRoaXMgaXMgdGhlIG9wcG9zaXRlIG9mIC9CQUNLVVA6IHRo YXQgaXMsIGRvIG5vdCBpbmNsdWRlIGJhY2t1cAorICAgICAgICAgIGZpbGVzIGluIHRoZSBsaXN0 aW5nLgorCisgICAvQlJJRUYKKyAgICAgICAgICBMaXN0IGZpbGVuYW1lcyBvbmx5OyB1c2UgYSBj b21wYWN0IGZvcm1hdCwgYXMgbWFueSBmaWxlbmFtZXMgYXMKKyAgICAgICAgICB3aWxsIGZpdCBh Y3Jvc3MgdGhlIHNjcmVlbiAoYmFzZWQgb24gdGhlIGxvbmdlc3QgbmFtZSkuIEEgYnJpZWYKKyAg ICAgICAgICBsaXN0aW5nIGlzIGFsd2F5cyBzb3J0ZWQgYWxwaGFiZXRpY2FsbHkuCisKKyAgIC9W RVJCT1NFCisgICAgICAgICAgTGlzdCBvbmUgZmlsZSBwZXIgbGluZSwgYW5kIGluY2x1ZGUgZGF0 ZSwgc2l6ZSwgYW5kIChpbiBVTklYCisgICAgICAgICAgb25seSkgcGVybWlzc2lvbnMgb2YgZWFj aCBmaWxlLiBUaGlzIGlzIHRoZSBvcHBvc2l0ZSBvZiAvQlJJRUYsCisgICAgICAgICAgYW5kIGlz IHRoZSBkZWZhdWx0LgorCisgICAvUEFHRQorICAgICAgICAgIFBhdXNlIGF0IHRoZSBlbmQgb2Yg ZWFjaCBzY3JlZW5mdWwgYW5kIGdpdmUgYSAibW9yZT8iIHByb21wdCwKKyAgICAgICAgICBldmVu IGlmIFNFVCBDT01NQU5EIE1PUkUtUFJPTVBUSU5HIGlzIE9GRi4KKworICAgL05PUEFHRQorICAg ICAgICAgIERvbid0IHBhdXNlIGF0IHRoZSBlbmQgb2YgZWFjaCBzY3JlZW5mdWwgYW5kIGdpdmUg YSAibW9yZT8iCisgICAgICAgICAgcHJvbXB0LCBldmVuIGlmIFNFVCBDT01NQU5EIE1PUkUtUFJP TVBUSU5HIGlzIE9OLiBJZiBuZWl0aGVyCisgICAgICAgICAgL1BBR0Ugb3IgL05PUEFHRSBpcyBn aXZlbiwgcGFnaW5nIGlzIGFjY29yZGluZyB0byB0aGUgcHJldmFpbGluZworICAgICAgICAgIENP TU1BTkQgTU9SRS1QUk9NUFRJTkcgc2V0dGluZyAod2hpY2ggY2FuIGJlIGRpc3BsYXllZCB3aXRo IFNIT1cKKyAgICAgICAgICBDT01NQU5EKS4KKworICAgL0VOR0xJU0hEQVRFCisgICAgICAgICAg U2hvdyBkYXRlcyBpbiBkZC1tbW0teXl5eSBmb3JtYXQ7IG1tbSBpcyB0aGUgZmlyc3QgdGhyZWUg bGV0dGVycworICAgICAgICAgIG9mIHRoZSBFbmdsaXNoIG1vbnRoIG5hbWUuCisKKyAgIC9JU09E QVRFCisgICAgICAgICAgU2hvdyBkYXRlcyBpbiB5eXl5LW1tLWRkIGZvcm1hdDsgbW0gaXMgdGhl IG1vbnRoIG51bWJlciwgMS0xMi4KKyAgICAgICAgICBUaGlzIGlzIHRoZSBvcHBvc2l0ZSBvZiAv RU5HTElTSERBVEUsIGFuZCBpcyB0aGUgZGVmYXVsdC4KKworICAgL0hFQURJTkdTCisgICAgICAg ICAgUHJpbnQgYSBoZWFkaW5nIGJlZm9yZSB0aGUgbGlzdGluZyBhbmQgYSBzdW1tYXJ5IGF0IHRo ZSBlbmQuCisKKyAgIC9OT0hFQURJTkdTCisgICAgICAgICAgRG9uJ3QgcHJpbnQgYSBoZWFkaW5n IGJlZm9yZSB0aGUgbGlzdGluZyBvciBhIHN1bW1hcnkgYXQgdGhlCisgICAgICAgICAgZW5kLiBU aGlzIGlzIHRoZSBvcHBvc2l0ZSBvZiAvSEVBRElOR1MsIGFuZCBpcyB0aGUgZGVmYXVsdC4KKwor ICAgL1hGRVJNT0RFCisgICAgICAgICAgT25seSBpbiBLZXJtaXQgcHJvZ3JhbXMgdGhhdCBzdXBw b3J0IFNFVCBGSUxFIFBBVFRFUk5TLiBJZiB0aGlzCisgICAgICAgICAgc3dpdGNoIGlzIGluY2x1 ZGVkLCBhbmQgdGhlIGZpbGVuYW1lIG1hdGNoZXMgYW55IEZJTEUKKyAgICAgICAgICBCSU5BUlkt UEFUVEVSTiAoWzQ3M11TZWN0aW9uIDQuMyksICIoQikiIGlzIHByaW50ZWQgYWZ0ZXIgdGhlCisg ICAgICAgICAgZmlsZW5hbWU7IG90aGVyd2lzZSwgaWYgaXQgbWF0Y2hlcyBhIEZJTEUgVEVYVC1Q QVRURVJOLCAiKFQpIiBpcworICAgICAgICAgIHByaW50ZWQuCisKKyAgIC9OT1hGRVJNT0RFCisg ICAgICAgICAgRG9uJ3QgZGlzcGxheSB0cmFuc2Zlci1tb2RlIGluZGljYXRvcnMuIFRoaXMgaXMg dGhlIG9wcG9zaXRlIG9mCisgICAgICAgICAgL1hGRVJNT0RFIGFuZCBpcyB0aGUgZGVmYXVsdC4K KworICAgL1JFQ1VSU0lWRQorICAgICAgICAgIFNob3cgZmlsZXMgbm90IG9ubHkgaW4gdGhlIGdp dmVuIGRpcmVjdG9yeSwgYnV0IGFsc28gaW4gaXRzCisgICAgICAgICAgc3ViZGlyZWN0b3JpZXMg KGlmIGFueSksIHRoZWlyIHN1YmRpcmVjdG9yaWVzLCBldGMuCisKKyAgIC9OT1JFQ1VSU0lWRQor ICAgICAgICAgIERvbid0IHNob3cgZmlsZXMgaW4gc3ViZGlyZWN0b3JpZXMuIFRoaXMgaXMgdGhl IG9wcG9zaXRlIG9mCisgICAgICAgICAgL1JFQ1VSU0lWRSwgYW5kIGlzIHRoZSBkZWZhdWx0Lgor CisgICAvTUVTU0FHRTp0ZXh0CisgICAgICAgICAgVGhpcyBsZXRzIHlvdSBzcGVjaWZ5IGEgc2hv cnQgdGV4dCBzdHJpbmcgdG8gYmUgYXBwZW5kZWQgdG8gdGhlCisgICAgICAgICAgZW5kIG9mIGVh Y2ggZGlyZWN0b3J5IGxpc3RpbmcgbGluZSAoYSBzcGFjZSBpcyBzdXBwbGllZAorICAgICAgICAg IGF1dG9tYXRpY2FsbHkpLiBJZiB0aGUgdGV4dCBjb250YWlucyBhbnkgc3BhY2VzLCBlbmNsb3Nl IGl0IGluCisgICAgICAgICAgYnJhY2VzLCBlLmcuIC9NRVNTQUdFOnt0d28gd29yZHN9LgorCisg ICAvTk9NRVNTQUdFCisgICAgICAgICAgRG9uJ3QgYXBwZW5kIGFueSBtZXNzYWdlIHRvIHRoZSBl bmQgb2YgZWFjaCBkaXJlY3RvcnkgbGlzdGluZworICAgICAgICAgIGxpbmUgKGRlZmF1bHQpLgor CisgICAvU09SVDpbe05BTUUsU0laRSxEQVRFfV0KKyAgICAgICAgICBTb3J0IHRoZSBsaXN0aW5n IGJ5IG5hbWUsIHNpemUsIG9yIGRhdGUuIElmIHRoZSAvU09SVCBzd2l0Y2ggaXMKKyAgICAgICAg ICBnaXZlbiBidXQgdGhlICJzb3J0LWJ5IiBrZXl3b3JkIGlzIG9taXR0ZWQsIHRoZSBsaXN0aW5n IGlzCisgICAgICAgICAgc29ydGVkIGJ5IG5hbWUuIC9TT1JUOk5BTUUgL0FTQ0VORElORyAoYWxw aGFiZXRpYyBzb3J0IGJ5IG5hbWUpCisgICAgICAgICAgaXMgdGhlIGRlZmF1bHQuCisKKyAgIC9O T1NPUlQKKyAgICAgICAgICBEb24ndCBzb3J0IHRoZSBsaXN0aW5nLiBGaWxlcyBhcmUgbGlzdGVk IGluIHdoYXRldmVyIG9yZGVyIHRoZXkKKyAgICAgICAgICBhcmUgc3VwcGxpZWQgYnkgdGhlIG9w ZXJhdGluZyBzeXN0ZW0sIGUuZy4gaW5vZGUgb3JkZXIgaW4gVU5JWC4KKworICAgL1JFVkVSU0UK KyAgICAgICAgICBJZiB0aGUgL1NPUlQgc3dpdGNoIGlzIGdpdmVuLCByZXZlcnNlIHRoZSBvcmRl ciBvZiB0aGUgc29ydC4KKyAgICAgICAgICBTeW5vbnltOiAvREVTQ0VORElORy4KKworICAgL0FT Q0VORElORworICAgICAgICAgIElmIHRoZSAvU09SVCBzd2l0Y2ggaXMgZ2l2ZW4sIHNvcnQgdGhl IGxpc3RpbmcgaW4gbm9ybWFsIG9yZGVyLgorICAgICAgICAgIFRoaXMgaXMgdGhlIG9wcG9zaXRl IG9mIC9SRVZFUlNFIGFuZCBpcyB0aGUgZGVmYXVsdC4KKworICAgTm90ZSB0aGF0IG1vc3Qgb2Yg dGhlIERJUkVDVE9SWS1zcGVjaWZpYyBzd2l0Y2hlcyBjb21lIGluIHBhaXJzLCBpbgorICAgd2hp Y2ggb25lIG1lbWJlciBvZiBhIHBhaXIgKGUuZy4gL05PSEVBRElOR1MpIGlzIHRoZSBvcHBvc2l0 ZSBvZiB0aGUKKyAgIG90aGVyIChlLmcuIC9IRUFESU5HUykuCisKKyAgIElmIHlvdSBhbHdheXMg d2FudCB0byB1c2UgY2VydGFpbiBvcHRpb25zLCB5b3UgY2FuIHNldCB0aGVtIHdpdGggdGhlCisg ICBTRVQgT1BUSU9OUyBESVJFQ1RPUlkgY29tbWFuZCAoWzQ3NF1TZWN0aW9uIDEuNS41KS4gVXNl IFNIT1cgT1BUSU9OUyB0bworICAgbGlzdCB0aGUgb3B0aW9ucyBjdXJyZW50bHkgaW4gZWZmZWN0 LiBUbyBtYWtlIHRoZSBkZXNpcmVkIG9wdGlvbnMgYXBwbHkKKyAgIGV2ZXJ5IHRpbWUgeW91IHJ1 biBDLUtlcm1pdCwgcHV0IGEgU0VUIE9QVElPTlMgRElSRUNUT1JZIGNvbW1hbmQgaW4KKyAgIHlv dXIgQy1LZXJtaXQgY3VzdG9taXphdGlvbiBmaWxlLCBzcGVjaWZ5aW5nIHRoZSBkZXNpcmVkIG9w dGlvbnMuCisgICBPcHRpb25zIHNldCBpbiB0aGlzIG1hbm5lciBhcHBseSB0byBldmVyeSBzdWJz ZXF1ZW50IERJUkVDVE9SWSBjb21tYW5kLgorICAgT2YgY291cnNlLCBpZiB5b3UgaW5jbHVkZSBz d2l0Y2hlcyBpbiBhIERJUkVDVE9SWSBjb21tYW5kLCB0aGVzZQorICAgb3ZlcnJpZGUgYW55IGRl ZmF1bHRzLCBidWlsdC1pbiBvciBjdXN0b20uIEV4YW1wbGU6CisKKyAgRElSRUNUT1JZICAgICAg ICAgICAgOyBVc2UgImZhY3RvcnkgZGVmYXVsdHMiCisgIFNFVCBPUFRJT05TIERJUkVDVE9SWSAv U09SVDpTSVpFIC9SRVZFUlNFIC9IRUFESU5HUyAgOyBDdXN0b21pemUgZGVmYXVsdHMKKyAgRElS RUNUT1JZICAgICAgICAgICAgOyBVc2UgY3VzdG9taXplZCBkZWZhdWx0cworICBESVIgL1NPUlQ6 TkFNRSAgICAgICA7IE92ZXJyaWRlIGN1c3RvbWl6ZWQgZGVmYXVsdCBTT1JUIGtleQorICBTRVQg T1BUIERJUiAvUkVDVVJTICA7IEFkZCAvUkVDVVJTSVZFIHRvIGN1c3RvbWl6ZWQgZGVmYXVsdHMK KyAgRElSIC9BU0NFTkQgICAgICAgICAgOyBPdmVycmlkZSBjdXN0b21pemVkIGRlZmF1bHQgU09S VCBvcmRlcgorCisgICBOb3RlczoKKworICAgICAqIE9ubHkgYSBzaW5nbGUgc29ydCBrZXkgaXMg c3VwcG9ydGVkOyB0aGVyZSBpcyBwcmVzZW50bHkgbm8gd2F5IHRvCisgICAgICAgaGF2ZSBtdWx0 aXBsZSBzb3J0IGtleXMuCisgICAgICogSWYgdGhlIC9CUklFRiBzd2l0Y2ggaXMgZ2l2ZW4sIGFs bCBvdGhlciBzd2l0Y2hlcyAoZXhjZXB0CisgICAgICAgL1tOT11SRUNVUlNJVkUsIC9bTk9dRE9U RklMRVMsIC9ESVJFQ1RPUklFUywgL0ZJTEVTLCBhbmQgL0FMTCkgYXJlCisgICAgICAgaWdub3Jl ZC4KKyAgICAgKiAvU09SVDphbnl0aGluZyBnaXZlcyBpbmNvcnJlY3QgcmVzdWx0cyBpZiBhbnkg ZmlsZXMgaGF2ZSBsZW5ndGhzCisgICAgICAgZ3JlYXRlciB0aGFuIDEwIGRpZ2l0cyAoaS5lLiB0 aGF0IGFyZSBtb3JlIHRoYW4gOTk5OTk5OTk5OSBieXRlcworICAgICAgIGxvbmcsIGkuZS4gaWYg dGhleSBhcmUgMTBHQiBvciBtb3JlIGluIHNpemUpIGJlY2F1c2UgdGhlIG92ZXJsb25nCisgICAg ICAgbGVuZ3RoIGZpZWxkIGNhdXNlcyB0aGUgZGF0ZSBhbmQgbmFtZSBmaWVsZHMgdG8gYmUgbWlz YWxpZ25lZC4KKyAgICAgKiAvU09SVDpOQU1FIGlzIHJlZHVuZGFudCBpbiBWTVMgc2luY2UgVk1T IHJldHVybnMgZmlsZW5hbWVzIGluCisgICAgICAgYWxwaGFiZXRpYyBvcmRlciBhbnl3YXkuCisg ICAgICogL1NPUlQ6TkFNRSBpZ25vcmVzIGFscGhhYmV0aWMgY2FzZSBvbiBwbGF0Zm9ybXMgd2hl cmUgY2FzZSBkb2VzIG5vdAorICAgICAgIG1hdHRlciBpbiBmaWxlbmFtZXMsIGJ1dCB0aGlzIHdv cmtzIG9ubHkgZm9yIHVuYWNjZW50ZWQgUm9tYW4KKyAgICAgICBsZXR0ZXJzIEEtWi4KKyAgICAg KiAvU09SVDpOQU1FIGlzIGN1cnJlbnRseSBiYXNlZCBvbiBjb2RlIHZhbHVlcywgYW5kIHNvIHdv cmtzIGZpbmUgZm9yCisgICAgICAgQVNDSUksIGJ1dCB3aWxsIHByb2JhYmx5IHByb2R1Y2UgdW5l eHBlY3RlZCByZXN1bHRzIGZvciBmaWxlcyB3aXRoCisgICAgICAgbm9uLUFTQ0lJIG9yIDgtYml0 IGNoYXJhY3RlcnMgaW4gdGhlaXIgbmFtZXMuIChMb2NhbGUtYmFzZWQgc29ydGluZworICAgICAg IHJhaXNlcyByYXRoZXIgc2lnbmlmaWNhbnQgaXNzdWVzIG9mIHBvcnRhYmlsaXR5LCBzaXplLCBw ZXJmb3JtYW5jZSwKKyAgICAgICBldGMuKQorICAgICAqIC9TT1JUOkRBVEUgd29ya3MgcmlnaHQg b25seSBmb3IgSVNPLWZvcm1hdCBkYXRlcywgbm90IEVuZ2xpc2ggb25lcy4KKyAgICAgKiAvU09S VDpTSVpFIHNvcnRzIHRoZSBzaXplIGZpZWxkIGxleGljYWxseS4gT24gc29tZSBwbGF0Zm9ybXMg KGUuZy4KKyAgICAgICBXaW5kb3dzKSwgdGhlIHNpemUgb2YgYSBkaXJlY3RvcnkgZmlsZSBpcyBs aXN0ZWQgYXMgIjxESVI+IiByYXRoZXIKKyAgICAgICB0aGFuIGFzIGEgbnVtYmVyOyBpbiB0aGlz IGNhc2UsIHRoZSAiPERJUj4iIGZpbGVzIGFyZSBnYXRoZXJlZCBhdAorICAgICAgIHRoZSBlbmQg KG9yIGJlZ2lubmluZywgZGVwZW5kaW5nIG9uIHRoZSBzb3J0IG9yZGVyKSBvZiB0aGUgbGlzdGlu Zy4KKyAgICAgKiAvUkVDVVJTSVZFIGlzIGFjY2VwdGVkIGJ1dCBpZ25vcmVkIGluIEFPUy9WUy4g VXNlIHRoZSBub3JtYWwKKyAgICAgICBzeXN0ZW0tc3BlY2lmaWMgZmlsZXNwZWMgbm90YXRpb24s IGUuZy4gImRpciAjLnR4dCIuCisgICAgICogL1JFQ1VSU0lWRSBoYXMgbm8gYWZmZWN0IHdoZW4g YSBmdWxsLCBhYnNvbHV0ZSBwYXRobmFtZSBpcyBnaXZlbjsKKyAgICAgICBlLmcuICJkaXIgL3Jl Y3Vyc2l2ZSAvdG1wL2ZvbyIgKHdoZXJlICJmb28iIGlzIGEgcmVndWxhciBmaWxlKSBvbmx5Cisg ICAgICAgc2hvd3MgdGhlICIvdG1wL2ZvbyIgZmlsZS4gSWYgeW91IHdhbnQgdG8gc2VlIGFsbCAi Zm9vIiBmaWxlcyBpbgorICAgICAgIHRoZSAvdG1wIHRyZWUsIGRvICJjZCAvdG1wIiBhbmQgdGhl biAiZGlyIC9yZWN1cnNpdmUgZm9vIi4KKyAgICAgKiBJZiBhIGZpbGUgc2l6ZSBvZiAtMSBpcyBz aG93biwgb3IgZGF0ZS10aW1lIG9mIDAwMDAtMDAtMDAgMDA6MDA6MDAsCisgICAgICAgdGhpcyBt ZWFucyB0aGUgZmlsZSB3YXMgbG9jYXRlZCwgYnV0IGFjY2VzcyB0byBpbmZvcm1hdGlvbiBhYm91 dAorICAgICAgIHRoZSBmaWxlIHdhcyBkZW5pZWQgdG8gQy1LZXJtaXQuCisgICAgICogSW4gVk1T LCBpZiBGT08uRElSOzEgaXMgYSBkaXJlY3Rvcnkgd2l0aGluIHlvdXIgY3VycmVudCBkaXJlY3Rv cnksCisgICAgICAgImRpcmVjdG9yeSBmb28iIGFuZCAiZGlyZWN0b3J5IFsuZm9vXSIgbGlzdCB0 aGUgZmlsZXMgaW4gdGhlIFsuRk9PXQorICAgICAgIHN1YmRpcmVjdG9yeSwgYnV0ICJkaXJlY3Rv cnkgZm9vLmRpciIgbGlzdHMgdGhlIGRpcmVjdG9yeSBmaWxlCisgICAgICAgaXRzZWxmOyBzaW1p bGFybHkgZm9yICIqLmRpciIgdmVyc3VzICJbLipdIiwgZXRjLgorICAgICAqIEluIFVOSVgsIGlm ICJmb28iIGlzIGEgZGlyZWN0b3J5IHdpdGhpbiB5b3VyIGN1cnJlbnQgZGlyZWN0b3J5LAorICAg ICAgICJkaXJlY3RvcnkgZm9vIiBsaXN0cyB0aGUgZmlsZXMgaW4gdGhlIGZvbyBkaXJlY3Rvcnku IElmIHlvdSB3YW50CisgICAgICAgdG8gbGlzdCB0aGUgZm9vIGRpcmVjdG9yeSBmaWxlIGl0c2Vs ZiwgcHV0IGFuIGFzdGVyaXNrIGF0IHRoZSBlbmQ6CisgICAgICAgImRpciBmb28qIi4KKworICAg SGludDogSG93IHRvIGZpbmQgdGhlIGJpZ2dlc3QgZmlsZXMgaW4gYSBkaXJlY3RvcnkgdHJlZToK KworICBjZCB4eHggOyAocm9vdCBvZiB0cmVlKQorICBkaXJlY3RvcnkgL3NvcnQ6c2l6ZSAvcmVj dXJzaXZlIC9yZXZlcnNlIC9kb3RmaWxlcyAvcGFnZQorCisgICBBbm90aGVyIGhpbnQ6IElmIHlv dSBvZnRlbiB1c2Ugc2V2ZXJhbCBkaWZmZXJlbnQgZGlyZWN0b3J5LWxpc3RpbmcKKyAgIGZvcm1h dHMsIGRlZmluZSBtYWNybyBzaG9ydGN1dHMgZm9yIHRoZW06CisKKyAgREVGSU5FIFdEIERJUkVD VE9SWSAvU09SVDpEQVRFIC9SRVZFUlNFIFwlKiAgOyBSZXZlcnNlIGNocm9ub2xvZ2ljYWwgb3Jk ZXIKKyAgREVGSU5FIFNEIERJUkVDVE9SWSAvU09SVDpTSVpFIC9SRVZFUlNFIFwlKiAgOyBSZXZl cnNlIG9yZGVyIG9mIHNpemUKKyAgREVGSU5FIE5EIERJUkVDVE9SWSAvU09SVDpOQU1FIC9BU0NF TkQgXCUqICAgOyBBbHBoYWJldGljYWwgYnkgbmFtZQorICBERUZJTkUgREwgRElSIC9ESVIgL1NP UlQ6TkFNRSAvQVNDRU5EIFwlKiAgICA7IEFscGhhYmV0aWNhbCBkaXJlY3RvcnkgbGlzdAorCisg ICBQdXQgdGhlc2UgZGVmaW5pdGlvbnMgaW4geW91ciBDLUtlcm1pdCBjdXN0b21pemF0aW9uIGZp bGUuIE5vdGUgdGhhdAorICAgIlwlKiIgKFs0NzVdU2VjdGlvbiA3LjUpIGluIHRoZXNlIGRlZmlu aXRpb25zIGxldHMgeW91IGluY2x1ZGUgb3RoZXIKKyAgIHN3aXRjaGVzIGluIHlvdXIgbWFjcm8g aW52b2NhdGlvbnMsIGUuZy46CisKKyAgd2QgL2hlYWRpbmdzICoudHh0CisKKyAgIE9mIGNvdXJz ZSB5b3UgY2FuIHN0aWxsIGFjY2VzcyB5b3VyIGV4dGVybmFsIGRpcmVjdG9yeSBsaXN0aW5nIHBy b2dyYW0KKyAgIGJ5IHVzaW5nIFJVTiBvciAiISIsIGUuZy4gaW4gVk1TOgorCisgIHJ1biBkaXJl Y3RvcnkgL3NpemUvZGF0ZS9wcm90ZWN0aW9uL2V4Y2VwdD0qLm9iaiBvb2ZhLio7MAorCisgICBv cjoKKworICAhZGlyIC9zaXplL2RhdGUvcHJvdC9leGM9Ki5vYmogb29mYS4qOzAKKworICAgSW4g VU5JWCwgdXNlICIhbHMiIG9yIGp1c3QgImxzIiAod2hpY2ggaXMgYSBzcGVjaWFsIHN5bm9ueW0g Zm9yICIhbHMiKS4KKworNC41LjIuIFRoZSBDRCBhbmQgQkFDSyBDb21tYW5kcworCisgICBJbiBD LUtlcm1pdCA3LjAsIHRoZSBDRCBjb21tYW5kIGhhcyBhIG5ldyBmcmllbmQsIHRoZSBCQUNLIGNv bW1hbmQuCisgICBCQUNLIG1lYW5zICJDRCB0byBteSBwcmV2aW91cyBjdXJyZW50IGRpcmVjdG9y eSIuIEEgc2Vjb25kIEJBQ0sgYnJpbmdzCisgICB5b3UgYmFjayB0byB3aGVyZSB5b3Ugd2VyZSBi ZWZvcmUgdGhlIGZpcnN0IG9uZTsgdGh1cyBzdWNjZXNzaXZlIEJBQ0sKKyAgIGNvbW1hbmRzIHN3 aXRjaCBiYWNrIGFuZCBmb3J0aCBiZXR3ZWVuIHR3byBkaXJlY3Rvcmllcy4KKworNC41LjIuMS4g UGFyc2luZyBJbXByb3ZlbWVudHMKKworICAgVGhlIENEIGNvbW1hbmQsIGFzIHdlbGwgYXMgb3Ro ZXIgY29tbWFuZHMgdGhhdCBwYXJzZSBhIGRpcmVjdG9yeSBuYW1lLAorICAgd2VyZSBjaGFuZ2Vk IGluIDcuMCB0byBwcm92aWRlIGFsbCB0aGUgZXhwZWN0ZWQgZnVuY3Rpb25zOiBjb21wbGV0aW9u CisgICBvbiBUYWIgb3IgRXNjLCBkaXJlY3RvcnktbmFtZSBsaXN0cyBvbiA/LCBldGMuIE90aGVy IGFmZmVjdGVkIGNvbW1hbmRzCisgICBpbmNsdWRlIFNFVCBTRVJWRVIgR0VULVBBVEgsIFNFVCBU RU1QLURJUkVDVE9SWSwgU0VUIEZJTEUKKyAgIERPV05MT0FELURJUkVDVE9SWSwgYW5kIFNQQUNF LiBDRCBhbmQgUkVNT1RFIENEIGFsc28gbm93IHdvcmsgd2l0aAorICAgbG9naWNhbCBuYW1lcy4K KworICAgSW4gVk1TLCB0aGUgc2l0dWF0aW9uIGlzIGEgYml0IGNvbXBsaWNhdGVkIHNpbmNlIGEg ZGlyZWN0b3J5IG5hbWUgY2FuCisgICBsb29rIGxpa2UgIkRFVjoiLCAiW0ZPTy5CQVJdIiwgIkRF VjpbRk9PLkJBUl0iLCAiW0ZPT11CQVIuRElSOzEiLCBldGMuCisgICBDb21wbGV0aW9uIGFuZCA/ LWhlbHAgbWlnaHQgbm90IGFsd2F5cyB3b3JrLCBidXQgdGhleSBkbyBpbiBtYW55IGNhc2VzLgor ICAgRXhhbXBsZXM6CisKKyAgY2QgPyAgICAgICAgICAgTGlzdHMgYWxsIHN1YmRpcmVjdG9yaWVz IG9mIHRoZSBjdXJyZW50IGRpcmVjdG9yeQorICBjZCBbXT8gICAgICAgICBEaXR0bworICBjZCBr PyAgICAgICAgICBEaXR0bywgYnV0IG9ubHkgdGhvc2Ugc3RhcnRpbmcgd2l0aCBLCisgIGNkIFtm b29dPyAgICAgIExpc3RzIGFsbCBzdWJkaXJlY3RvcmllcyBvZiB0aGUgW0ZPT10gZGlyZWN0b3J5 CisgIGNkIFstXT8gICAgICAgIExpc3RzIGFsbCBzdWJkaXJlY3RvcmllcyBvZiB0aGUgc3VwZXJp b3IgZGlyZWN0b3J5CisgIGNkIFstLV0/ICAgICAgIExpc3RzIGFsbCBzdWJkaXJlY3RvcmllcyBv ZiB0aGUgZGlyZWN0b3J5IDIgbGV2ZWxzIHVwCisgIGNkIFsuLi5dPyAgICAgIExpc3RzIGFsbCBk aXJlY3RvcmllcyBiZWxvdyB0aGUgY3VycmVudCBvbmUKKyAgY2QgW2Zvby4/ICAgICAgRG9lcyBu b3Qgd29yay4KKworICAgQy1LZXJtaXQgYWxsb3dzIGFsbCBvZiB0aGUgZm9sbG93aW5nIGluIFZN UzoKKworICBjZCBiYXIgICAgICAgICBDRCB0byBzdWJkaXJlY3RvcnkgQkFSIG9mIHRoZSBjdXJy ZW50IGRpcmVjdG9yeQorICBjZCAuYmFyICAgICAgICBEaXR0bworICBjZCBbLmJhcl0gICAgICBE aXR0bworICBjZCBiYXIuZGlyICAgICBldGMuLi4KKyAgY2QgYmFyLmRpcjsKKyAgY2QgYmFyLmRp cjsxCisgIGNkIFtmb28uYmFyXQorICBjZCA8Zm9vLmJhcj4KKyAgY2QgYmFyLmJheiAgICAgVGhp cyBjYW4gZ28gbW9yZSB0aGFuIDEgbGV2ZWwgZGVlcC4uLgorICBjZCBkaXI6ICAgICAgICAod2hl cmUgbG9naWNhbCBuYW1lIERJUiBpcyBkZWZpbmVkIGFzIFtGT08uQkFSXSkKKworICAgQXMgd2Vs bCBhcyB0aGUgZm9sbG93aW5nOgorCisgIGNkIC4uICAgICAgICAgIEdvIHVwIG9uZSBsZXZlbCBh cyBpbiBVTklYCisgIGNkIC4gICAgICAgICAgIFRoZSBjdXJyZW50IGRpcmVjdG9yeQorICBjZCAg ICAgICAgICAgICBNeSBsb2dpbiBkaXJlY3RvcnkKKworICAgTm90ZSB0aGF0ICJjZCAtIiAoZ28g dXAgb25lIGxldmVsKSBkb2VzIG5vdCB3b3JrIGFzIGV4cGVjdGVkLCBiZWNhdXNlCisgICAiLSIg aXMgS2VybWl0J3MgY29tbWFuZCBjb250aW51YXRpb24gY2hhcmFjdGVyLiBIb3dldmVyLCAiY2Qg Wy1dIiwgYW5kCisgICAiCisgICBjZCB7LX0iIGhhdmUgdGhlIGRlc2lyZWQgZWZmZWN0IChhbmQg c28gZG9lcyAiY2QgLi4iLCB3aGljaCBpcyBlYXNpZXIKKyAgIHRvIHR5cGUpLgorCis0LjUuMi4y LiBUaGUgQ0RQQVRICisKKyAgIFRoZSBDRCBjb21tYW5kIGluIHRoZSBVTklYLCBXaW5kb3dzLCBP Uy8yLCBhbmQgVk1TIHZlcnNpb25zIG9mCisgICBDLUtlcm1pdCwgYXMgb2YgdmVyc2lvbiA2LjEg LyAxLjEuMTIsIHNlYXJjaGVzIHRoZSBDRFBBVEggZm9yIHRoZSBnaXZlbgorICAgZGlyZWN0b3J5 LCBpZiBpdCBpcyBub3QgYWJzb2x1dGUgYW5kIGlmIGEgQ0RQQVRIIGVudmlyb25tZW50IHZhcmlh YmxlCisgICBpcyBkZWZpbmVkLiBFeGFtcGxlIChpbiBVTklYIGtzaCBvciBiYXNoKToKKworICAk IGV4cG9ydCBDRFBBVEg9JEhPTUU6JEhPTUUva2VybWl0Oi90bXAKKworICAgTm93IGlmIHlvdSBn aXZlIGEgImNkIHh4eCIgY29tbWFuZCwgbm8gbWF0dGVyIHdoYXQgeW91ciBjdXJyZW50CisgICBk aXJlY3RvcnkgaXMsIGlmIHRoZSAieHh4IiBkaXJlY3RvcnkgaXMgbm90IGEgc3ViZGlyZWN0b3J5 IG9mIHlvdXIKKyAgIGN1cnJlbnQgZGlyZWN0b3J5LCB0aGVuIHRoZSB4eHggc3ViZGlyZWN0b3J5 IG9mIHlvdXIgaG9tZSBkaXJlY3RvcnkgaXMKKyAgIHVzZWQgb3IgaWYgdGhhdCBkb2VzIG5vdCBl eGlzdCwgdGhlbiB0aGUgeHh4IHN1YmRpcmVjdG9yeSBvZiB0aGUga2VybWl0CisgICBzdWJkaXJl Y3Rvcnkgb2YgeW91ciBob21lIGRpcmVjdG9yeSBpcyB1c2VkIG9yIGlmIHRoYXQgZG9lcyBub3Qg ZXhpc3QsCisgICB0aGVuIC90bXAveHh4IGlzIHVzZWQuIFRoaXMgaXMgaG93IHRoZSBrc2ggImNk IiBjb21tYW5kIHdvcmtzLCBhbmQgbm93CisgICB0aGUgQy1LZXJtaXQgQ0QgY29tbWFuZCB3b3Jr cyB0aGUgc2FtZSB3YXkuCisKKyAgIEluIFZNUywgeW91IGNhbiBkZWZpbmUgQ0RQQVRIIHRvIGJl IGEgbGlzdCBvZiBkaXJlY3RvcmllcyB0aGF0IGNvbnRhaW4KKyAgIGFjdHVhbCBkaXJlY3Rvcnkg ZGVsaW1pdGVycywgYW5kL29yIGxvZ2ljYWwgbmFtZXMgcmVwcmVzZW50aW5nCisgICBkaXJlY3Rv cmllcywgdXNpbmcgY29tbWFzIHRvIHNlcGFyYXRlIHRoZW0sIGUuZy46CisKKyAgJCBkZWZpbmUg Y2RwYXRoIFtIT01FXSxbU09NRU9USEVSRElSXSxbSE9NRS5NSVNDXQorICAkIGRlZmluZSBjZHBh dGggU1lTJExPR0lOOixESVNLMTpbSE9NRV0sRElTSzI6W1NDUkFUQ0guSVZBTl0KKworICAgRXhh bXBsZToKKworICAkIGRlZmluZSBjZHBhdGggU1lTJExPR0lOOixbSVZBTl0sW09MQUZdLFtPTEdB Lk1JU0NdCisgICQga2VybWl0CisgIERJU0sxOltPTEdBXSBDLUtlcm1pdD4gY2QgYmxhaAorCisg ICB0cmllcyB0aGUgQkxBSCBzdWJkaXJlY3Rvcnkgb2YgdGhlIHVzZXIncyBsb2dpbiBkaXJlY3Rv cnksIHRoZW4KKyAgIFtPTEdBLkJMQUhdLCBbSVZBTi5CTEFIXSwgW09MQUYuQkxBSF0sIGFuZCBb T0xHQS5NSVNDLkJMQUhdLCBpbiB0aGF0CisgICBvcmRlciwgdXNpbmcgdGhlIGZpcnN0IG9uZSBp dCBmaW5kcywgZmFpbGluZyBpZiBpdCBmaW5kcyBub25lLgorCisgICBJbiBDLUtlcm1pdCA3LjAs IHlvdSBtYXkgYWxzbyBzZXQgdGhlIENEUEFUSCBmcm9tIHRoZSBLZXJtaXQgcHJvbXB0OgorCisg ICBTRVQgQ0QgUEFUSCBwYXRoCisgICAgICAgICAgQWxsb3dzIHRoZSBDRCBQQVRIIHRvIGJlIHNl dCBmcm9tIHdpdGhpbiBDLUtlcm1pdC4KKworICAgU0hPVyBDRCBzaG93cyB0aGUgQ0QgcGF0aCBh bmQgYWxsIG90aGVyIGluZm9ybWF0aW9uIHJlbGV2YW50IHRvIHRoZSBDRAorICAgY29tbWFuZC4K KworNC41LjIuMy4gQ0QgTWVzc2FnZXMKKworICAgV2hlbmV2ZXIgeW91IGNoYW5nZSBkaXJlY3Rv cnksIHlvdSBjYW4gaGF2ZSBDLUtlcm1pdCBkaXNwbGF5IGEgIlJlYWQKKyAgIE1lIiBmaWxlIGZy b20gdGhlIG5ldyBkaXJlY3RvcnkgYXV0b21hdGljYWxseS4gVGhlIGNvbW1hbmRzIGFyZToKKwor ICAgU0VUIENEIE1FU1NBR0UgeyBPTiwgT0ZGLCBGSUxFIGxpc3QgfQorICAgICAgICAgIE9OIGVu YWJsZXMgdGhpcyBmZWF0dXJlOyBPRkYgKHRoZSBkZWZhdWx0KSBkaXNhYmxlcyBpdC4gRmlsZQor ICAgICAgICAgIGxldHMgeW91IHNwZWNpZnkgdGhlIG5hbWUgb2YgdGhlICJSZWFkIE1lIiBmaWxl LiBBIGxpc3Qgb2YgbmFtZXMKKyAgICAgICAgICB0byBsb29rIGZvciBjYW4gYmUgZ2l2ZW4gaW4g dGhlIGZvbGxvd2luZyBmb3JtYXQ6CisKKyAge3tuYW1lMX17bmFtZTJ9e25hbWUzfXsuLi59fQor CisgICAgICAgICAgZS5nLjoKKworICBTRVQgU0VSVkVSIENELU1FU1NBR0UgRklMRSB7ey4vLnJl YWRtZX17UkVBRE1FLlRYVH17UkVBRC5NRX19CisKKyAgICAgICAgICBUaGUgZGVmYXVsdCBsaXN0 IG9mIENELW1lc3NhZ2UgZmlsZXMgaXMgc3lzdGVtIGRlcGVuZGVudC4KKworICAgU0hPVyBDRCBz aG93cyB5b3VyIGN1cnJlbnQgZGlyZWN0b3J5LCBwcmV2aW91cyBkaXJlY3RvcnksIENEIHBhdGgs IGFuZAorICAgQ0QgbWVzc2FnZSBpbmZvLgorCis0LjUuMy4gQ3JlYXRpbmcgYW5kIFJlbW92aW5n IERpcmVjdG9yaWVzCisKKyAgIFRoZSBNS0RJUiBjb21tYW5kIG5vdyBhbGxvd3MgeW91IHRvIGNy ZWF0ZSBtdWx0aXBsZSBkaXJlY3RvcmllcyBhdAorICAgb25jZToKKworICBDLUtlcm1pdD4gbWtk aXIgYS9iL2MvZAorCisgICBjcmVhdGVzIHRoZSBkaXJlY3RvcnkgYSBpbiB0aGUgY3VycmVudCBk aXJlY3RvcnkgKGlmIGl0IGRvZXNuJ3QgZXhpc3QKKyAgIGFscmVhZHkpLCBhbmQgdGhlbiBjcmVh dGVzIHN1YmRpcmVjdG9yeSBiIGluIHRoZSBhIGRpcmVjdG9yeSAoaWYgaXQKKyAgIGRpZG4ndCBl eGlzdCBhbHJlYWR5KSwgYW5kIHNvIG9uLgorCisgICBJZiB5b3UgdXNlIE1LRElSIHRvIHRyeSB0 byBjcmVhdGUgYSBkaXJlY3RvcnkgdGhhdCBhbHJlYWR5IGV4aXN0cywKKyAgIEMtS2VybWl0IHdp bGwgcHJpbnQgYSB3YXJuaW5nICgiP0RpcmVjdG9yeSBhbHJlYWR5IGV4aXN0cyIpLCBidXQgdGhl CisgICBNS0RJUiBjb21tYW5kIHdpbGwgc3RpbGwgc3VjY2VlZC4gSWYgeW91IHdhbnQgdG8gYXZv aWQgdGhlIHdhcm5pbmcKKyAgIG1lc3NhZ2UsIHVzZSBJRiBESVJFQ1RPUlkgZmlyc3QgdG8gY2hl Y2sgaWYgdGhlIGRpcmVjdG9yeSBhbHJlYWR5CisgICBleGlzdHMuCisKKyAgIFRoZSBSTURJUiBj b21tYW5kLCBob3dldmVyLCB3aWxsIG5vdCByZW1vdmUgbW9yZSB0aGFuIG9uZSBkaXJlY3Rvcnks CisgICBub3Igd2lsbCBpdCByZW1vdmUgYSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyBhbnkgZmls ZXMuIChUaGVyZSBpcywgYXMKKyAgIHlldCwgbm8gUk1ESVIgL1JFQ1VSU0lWRSBjb21tYW5kLCBh bHRob3VnaCBvbmUgbWlnaHQgYmUgYWRkZWQgbGF0ZXIuKQorCisgICBJbiBWTVMsIHRoZXNlIGNv bW1hbmRzIChsaWtlIENEKSBhcmUgbW9yZSBmb3JnaXZpbmcgb2YgeW91ciBzeW50YXggdGhhbgor ICAgaXMgdGhlIERDTCBjb21tYW5kIHNoZWxsOyAibWtkaXIgb29mYSIgaXMgZXF1aXZhbGVudCB0 byAibWtkaXIgWy5vb2ZhXSIKKyAgIGFuZCBzbyBvbi4gQWxzbyBpbiBWTVMsIHlvdSdsbCBmaW5k IHRoYXQgQy1LZXJtaXQncyBSTURJUiBjb21tYW5kIGlzCisgICBlYXNpZXIgdGhhbiBkZWxldGlu ZyBhIGRpcmVjdG9yeSBpbiBEQ0wsIHNpbmNlIGl0IGF1dG9tYXRpY2FsbHkgZmlyc3QKKyAgIGdp dmVzIGl0IG93bmVyIGRlbGV0ZSBwZXJtaXNzaW9uIGlmIHlvdSBhcmUgdGhlIG93bmVyLgorCis0 LjUuNC4gVGhlIERFTEVURSBhbmQgUFVSR0UgQ29tbWFuZHMKKworICAgVGhlIERFTEVURSBjb21t YW5kIG5vdyBvZmZlcnMgYSBzZWxlY3Rpb24gb2Ygc3dpdGNoZXMsIGFuZCBoYXMgYSBuZXcKKyAg IGNvbXBhbmlvbiwgdGhlIFBVUkdFIGNvbW1hbmQuIEZpcnN0LCBERUxFVEU6CisKKyAgIERFTEVU RSBbIHN3aXRjaGVzLi4uIF0gZmlsZXNwZWMKKyAgICAgICAgICBEZWxldGVzIHRoZSBmaWxlIG9y IGZpbGVzIHRoYXQgbWF0Y2ggdGhlIGZpbGVzcGVjLCB3aGljaCBtYXkKKyAgICAgICAgICBjb250 YWluIHdpbGRjYXJkcyAoWzQ3Nl1TZWN0aW9uIDQuOSkuCisKKyAgIE9wdGlvbmFsIHN3aXRjaGVz IGluY2x1ZGUgdGhlIHN0YW5kYXJkIGZpbGUtc2VsZWN0aW9uIHN3aXRjaGVzCisgICBwcmVzZW50 ZWQgaW4gWzQ3N11TZWN0aW9uIDEuNS40LCBwbHVzOgorCisgICAvQVNLCisgICAgICAgICAgQmVm b3JlIGRlbGV0aW5nIGVhY2ggZmlsZSwgYXNrIHBlcm1pc3Npb24gaW50ZXJhY3RpdmVseS4gQW5z d2VycworICAgICAgICAgIGFyZSBZZXMgb3IgT0sgKGRlbGV0ZSB0aGUgZmlsZSksIE5vIChkb24n dCBkZWxldGUgaXQpLCBvciBRdWl0CisgICAgICAgICAgKHN0b3AgZXhlY3V0aW5nIHRoZSBERUxF VEUgY29tbWFuZCkuCisKKyAgIC9OT0FTSworICAgICAgICAgIERvbid0IGFzayBwZXJtaXNzaW9u IHRvIGRlbGV0ZSBlYWNoIGZpbGUuCisKKyAgIC9MSVNUCisgICAgICAgICAgTGlzdCBlYWNoIGZp bGUgYW5kIHNob3cgd2hldGhlciBpdCB3YXMgZGVsZXRlZC4gU3lub255bXM6IC9MT0csCisgICAg ICAgICAgL1ZFUkJPU0UuCisKKyAgIC9OT0xJU1QKKyAgICAgICAgICBEb24ndCBsaXN0IGZpbGVz IHdoaWxlIGRlbGV0aW5nIHRoZW0uIFN5bm9ueW1zOiAvTk9MT0csIC9RVUlFVC4KKworICAgL0hF QURJTkcKKyAgICAgICAgICBQcmludCBhIGhlYWRpbmcgYW5kIHN1bW1hcnkgbGluZS4KKworICAg L05PSEVBRElORworICAgICAgICAgIERvbid0IHByaW50IGEgaGVhZGluZyBhbmQgc3VtbWFyeSBs aW5lLgorCisgICAvUEFHRQorICAgICAgICAgIFdoZW4gbGlzdGluZywgcGF1c2UgYXQgdGhlIGVu ZCBvZiBlYWNoIHNjcmVlbmZ1bCBhbmQgZ2l2ZSB0aGUKKyAgICAgICAgICAiTW9yZT8iIHByb21w dC4gSWYgeW91IHJlcGx5ICJuIiAobm8pLCB0aGUgREVMRVRFIGNvbW1hbmQKKyAgICAgICAgICB0 ZXJtaW5hdGVzLgorCisgICAvU0lNVUxBVEUKKyAgICAgICAgICBEbyBldmVyeXRoaW5nIGltcGxp ZWQgYnkgdGhlIGdpdmVuIHN3aXRjaGVzIGFuZCBmaWxlc3BlYywgZXhjZXB0CisgICAgICAgICAg ZG8gbm90IGFjdHVhbGx5IGRlbGV0ZSBhbnkgZmlsZXMuIFRoaXMgbGV0cyB5b3UgcHJldmlldyB3 aGljaAorICAgICAgICAgIGZpbGVzIHdvdWxkIGJlIGRlbGV0ZWQ7IGltcGxpZXMgL0xJU1QuCisK KyAgIE5vdyB0aGUgUFVSR0UgY29tbWFuZDoKKworICAgUFVSR0UgWyBzd2l0Y2hlcy4uLiBdIFsg ZmlsZXNwZWMgXQorICAgICAgICAgIChWTVMgb25seSkgUnVucyB0aGUgRENMIFBVUkdFIGNvbW1h bmQuIFN3aXRjaGVzIGFuZCBmaWxlc3BlYywgaWYKKyAgICAgICAgICBhbnksIGFyZSBwYXNzZWQg ZGlyZWN0bHkgdG8gRENMIHdpdGhvdXQgcGFyc2luZyBvciB2ZXJpZmljYXRpb24uCisgICAgICAg ICAgRGVsZXRlcyBleGNlc3MgdmVyc2lvbnMgb2YgdGhlIGdpdmVuIChvciBhbGwpIGZpbGVzLiBU aGUgcmVzdCBvZgorICAgICAgICAgIHRoaXMgc2VjdGlvbiBkb2VzIG5vdCBhcHBseSB0byBWTVMu CisKKyAgIFBVUkdFIFsgc3dpdGNoZXMuLi4gXSBbIGZpbGVzcGVjIF0KKyAgICAgICAgICAoVU5J WCBvbmx5KSBEZWxldGVzICJiYWNrdXAgZmlsZXMiIHRoYXQgbWF0Y2ggdGhlIGZpbGVzcGVjLAor ICAgICAgICAgIHdoaWNoIG1heSBjb250YWluIHdpbGRjYXJkcyAoWzQ3OF1TZWN0aW9uIDQuOSku IElmIG5vIGZpbGVzcGVjCisgICAgICAgICAgaXMgZ2l2ZW4sIGFsbCBiYWNrdXAgZmlsZXMgaW4g dGhlIGN1cnJlbnQgZGlyZWN0b3J5IGFyZSBzZWxlY3RlZAorICAgICAgICAgIChzdWJqZWN0IHRv IG1vZGlmaWNhdGlvbiBieSBhbnkgc3dpdGNoZXMpLiBEbyBub3QgaW5jbHVkZSBiYWNrdXAKKyAg ICAgICAgICBub3RhdGlvbiBpbiB0aGUgZmlsZXNwZWMuCisKKyAgIEV4cGxhbmF0aW9uOgorCisg ICBUbyBhdm9pZCBkZXN0cm95aW5nIHByZWV4aXN0aW5nIGZpbGVzIHdoZW4gYSBuZXcgZmlsZSBh cnJpdmVzIHRoYXQgaGFzCisgICB0aGUgc2FtZSBuYW1lLCBDLUtlcm1pdCBiYWNrcyB1cCB0aGUg b2xkIGZpbGUgYnkgYXBwZW5kaW5nIGEgImJhY2t1cAorICAgbnVtYmVyIiB0byBpdHMgbmFtZS4g SW4gVU5JWCwgdGhlIGJhY2t1cCBzdWZmaXggY29uc2lzdHMgb2YgYSBwZXJpb2QsIGEKKyAgIHRp bGRlLCBhIG51bWJlciwgYW5kIGFub3RoZXIgdGlsZGUuIEZvciBleGFtcGxlLCBpZiBhIGZpbGUg Y2FsbGVkCisgICBvb2ZhLnR4dCBleGlzdHMgYW5kIGEgbmV3IG9vZmEudHh0IGZpbGUgYXJyaXZl cywgdGhlIG9yaWdpbmFsIGlzCisgICByZW5hbWVkIHRvIG9vZmEudHh0Ln4xfi4gSWYgYW5vdGhl ciBvb2ZhLnR4dCBmaWxlIGFycml2ZXMsIHRoZSBleGlzdGluZworICAgb25lIGlzIHJlbmFtZWQg dG8gb29mYS50eHQufjJ+LiBBbmQgc28gb24uIFRoaXMgc3lzdGVtIGlzIGNvbXBhdGlibGUKKyAg IHdpdGggdGhlIG9uZSB1c2VkIGJ5IEVNQUNTLiBUaHVzIG92ZXIgdGltZSwgaWYgeW91IHJlY2Vp dmUgYSBsb3Qgb2YKKyAgIGZpbGVzIHdpdGggQy1LZXJtaXQgb3IgZWRpdCB0aGVtIHdpdGggRU1B Q1MsIGJhY2t1cCBmaWxlcyBjYW4gYnVpbGQgdXAuCisgICBUaGUgbmV3IFBVUkdFIGNvbW1hbmQg bGV0cyB5b3UgY2xlYW4gb3V0IGFjY3VtdWxhdGVkIGJhY2t1cCBmaWxlczoKKworICAgT3B0aW9u YWwgc3dpdGNoZXMgaW5jbHVkZSB0aGUgc3RhbmRhcmQgZmlsZS1zZWxlY3Rpb24gc3dpdGNoZXMK KyAgIHByZXNlbnRlZCBpbiBbNDc5XVNlY3Rpb24gMS41LjQsIHBsdXMgYWxsIHRoZSBzd2l0Y2hl cyBsaXN0ZWQgYWJvdmUgZm9yCisgICB0aGUgREVMRVRFIGNvbW1hbmQsIHBsdXM6CisKKyAgIC9L RUVQOm4KKyAgICAgICAgICBSZXRhaW5zIHRoZSBuIG1vc3QgcmVjZW50IChoaWdoZXN0LW51bWJl cmVkKSBiYWNrdXAgZmlsZXMgZm9yCisgICAgICAgICAgZWFjaCBmaWxlLiBGb3IgZXhhbXBsZSwg aWYgb29mYS50eHQsIG9vZmEudHh0Ln4xfiwgb29mYS50eHQufjJ+LAorICAgICAgICAgIG9vZmEu dHh0Ln4xMH4sIG9vZmEudHh0Ln4xMn4sIGFuZCBvb2ZhLnR4dC5+MTAwfiBleGlzdCwgInB1cmdl CisgICAgICAgICAgL2tlZXA6MiBvb2ZhLnR4dCIgZGVsZXRlcyBvb2ZhLnR4dC5+MX4sIG9vZmEu dHh0Ln4yfiwgYW5kCisgICAgICAgICAgb29mYS50eHQufjEwfiwgYW5kIGtlZXBzIG9vZmEudHh0 LCBvb2ZhLnR4dC5+MTJ+LCBhbmQKKyAgICAgICAgICBvb2ZhLnR4dC5+MTAwfi4gSWYgL0tFRVAg aXMgZ2l2ZW4gd2l0aG91dCBhIG51bWJlciwgb25lICh0aGUKKyAgICAgICAgICBoaWdoZXN0IG51 bWJlcmVkKSBiYWNrdXAgZmlsZSBpcyBrZXB0LgorCisgICBDQVVUSU9OOiBUaGUgUFVSR0UgY29t bWFuZCBzaG91bGQgYmUgdXNlZCBvbmx5IHdoZW4gKi5+Kn4gZmlsZXMgdHJ1bHkKKyAgIGFyZSBi YWNrdXAgZmlsZXMuIFRoaXMgaXMgdGhlIGNhc2UgZm9yIEVNQUNTLCBhbmQgaXQgaXMgdGhlIERF RkFVTFQgZm9yCisgICBDLUtlcm1pdC4gSG93ZXZlciwgaWYgQy1LZXJtaXQncyBGSUxFIENPTExJ U0lPTiBoYXMgYmVlbiBzZXQgdG8gUkVOQU1FLAorICAgbmV3bHkgcmVjZWl2ZWQgZmlsZXMgd2ls bCBsb29rIGxpa2UgYmFja3VwIGZpbGVzLiBJbiB0aGF0IGNhc2UsIGRvbid0CisgICB1c2UgdGhl IFBVUkdFIGNvbW1hbmQgb3IgeW91J2xsIGJlIHJlbW92aW5nIG5ldyBmaWxlcyByYXRoZXIgdGhh biBvbGQKKyAgIG9uZXMuIChVc2UgU0hPVyBGSUxFIHRvIGZpbmQgdGhlIEZJTEUgQ09MTElTSU9O IHNldHRpbmcuKQorCisgICBUaGUgUFVSR0UgY29tbWFuZCBpcyBwcmVzZW50bHkgYXZhaWxhYmxl IG9ubHkgaW4gVU5JWC4gVGhlIGNvbW1hbmQKKyAgIHN1Y2NlZWRzIGlmIGl0IGRlbGV0ZWQgYW55 IGZpbGVzLCBvciBpZiBpdCBkZWxldGVkIG5vIGZpbGVzIGJ1dCB0aGVyZQorICAgd2VyZSBubyBl cnJvcnMuIEl0IGZhaWxzIGlmIGl0IGRlbGV0ZWQgbm8gZmlsZXMgYW5kIHRoZXJlIHdlcmUgZXJy b3JzCisgICAoaS5lLiBkZWxldGlvbiB3YXMgYXR0ZW1wdGVkIGJ1dCBmYWlsZWQpLiBJbiBWTVMs IGJhY2t1cCBmaWxlIHZlcnNpb25zCisgICBhcmUgaGFuZGxlZCBhdXRvbWF0aWNhbGx5IGJ5IHRo ZSBPUywgYW5kIGEgUFVSR0UgY29tbWFuZCBjYW4gYmUgdXNlZCBhdAorICAgdGhlIFZNUyBwcm9t cHQgdG8gY2xlYW4gdGhlbSB1cC4KKworICAgSWYgeW91IHdhbnQgY2VydGFpbiBzd2l0Y2hlcyB0 byBiZSBzdXBwbGllZCBhdXRvbWF0aWNhbGx5IHdpdGggZWFjaAorICAgREVMRVRFIG9yIFBVUkdF IGNvbW1hbmQsIHlvdSBjYW4gc2V0IHRoZW0gd2l0aCBTRVQgT1BUSU9OUworICAgKFs0ODBdU2Vj dGlvbiAxLjUuNSkgYW5kIHlvdSBjYW4gZGlzcGxheSBhbnkgc3VjaCBzZXR0aW5ncyB3aXRoIFNI T1cKKyAgIE9QVElPTlMuIE9mIGNvdXJzZSB5b3UgY2FuIG92ZXJyaWRlIHRoZW0gb24gYSBwZXIt Y29tbWFuZCBiYXNpcyBieQorICAgaW5jbHVkaW5nIHN3aXRjaGVzIGluIHlvdXIgUFVSR0Ugb3Ig REVMRVRFIGNvbW1hbmQuCisKKyAgIEFsc28gc2VlIFNFVCBGSUxFIENPTExJU0lPTiwgU0hPVyBG SUxFLCBTRU5EIC9OT0JBQ0tVUCwgU0VUIFNFTkQKKyAgIEJBQ0tVUCwgYW5kIERJUkVDVE9SWSAv W05PXUJBQ0tVUC4KKworNC42LiBTdGFydGluZyB0aGUgUmVtb3RlIEtlcm1pdCBTZXJ2ZXIgQXV0 b21hdGljYWxseQorCisgICBBcyBub3RlZCBvbiBwYWdlcyAyNzUtMjc2IG9mIFs0ODFdVXNpbmcg Qy1LZXJtaXQgMm5kIGVkaXRpb24sIHlvdSBjYW4KKyAgIGhhdmUgS2VybWl0IHNlbmQgImtlcm1p dCByZWNlaXZlIiBjb21tYW5kcyBhdXRvbWF0aWNhbGx5IHdoZW4gaXQgaXMgaW4KKyAgIGxvY2Fs IG1vZGUgYW5kIHlvdSBnaXZlIGEgU0VORCBvciBzaW1pbGFyIGNvbW1hbmQsIHRvIHN0YXJ0IHRo ZSByZW1vdGUKKyAgIEtlcm1pdCByZWNlaXZlciBpbiBjYXNlIGl0IGlzIG5vdCBhbHJlYWR5IHN0 YXJ0ZWQuIFRoZSAia2VybWl0IHJlY2VpdmUiCisgICBjb21tYW5kcyBhcmUgc3BlY2lmaWVkIGJ5 OgorCisgIFNFVCBQUk9UT0NPTCBLRVJNSVQgYmluYXJ5LXJlY2VpdmUtY29tbWFuZCB0ZXh0LXJl Y2VpdmUtY29tbWFuZAorCisgICBBcyBvZiB2ZXJzaW9uIDcuMCwgYSBLZXJtaXQgcHJvdG9jb2wg b3B0aW9uIGhhcyBiZWVuIGFkZGVkIHRvIHNlbmQgYQorICAgc3RyaW5nIHRvIHRoZSBob3N0IGlu IGFkdmFuY2Ugb2YgYW55IEtlcm1pdCBwYWNrZXRzIHdoZW4geW91IGdpdmUgYQorICAgR0VULWNs YXNzIG9yIFJFTU9URSBjb21tYW5kLiBUaGlzIHdpbGwgc3dpdGNoIHRoZSByZW1vdGUgQy1LZXJt aXQgaW50bworICAgdGhlIGFwcHJvcHJpYXRlIG1vZGUgb3IsIGlmIHRoZSByZW1vdGUgc3lzdGVt IGlzIGF0IGEgc3lzdGVtIGNvbW1hbmQKKyAgIChzaGVsbCkgcHJvbXB0LCBleGVjdXRlIHRoZSBz dHJpbmcgb24gdGhlIHJlbW90ZSBzeXN0ZW0uIFRoZSBuZXcgc3ludGF4CisgICBvZiB0aGUgU0VU IFBST1RPQ09MIEtFUk1JVCBjb21tYW5kIGlzOgorCisgIFNFVCBQUk9UT0NPTCBLRVJNSVQgWyBz MSBbIHMyIFsgczMgXSBdIF0KKworICAgd2hlcmU6CisKKyAgICAgICBEZWZhdWx0ICAgICAgICAg TWVhbmluZworICBzMSAge2tlcm1pdCAtaXJ9ICAgICBSZW1vdGUgImtlcm1pdCByZWNlaXZlIGlu IGJpbmFyeSBtb2RlIiBjb21tYW5kLgorICBzMiAge2tlcm1pdCAtcn0gICAgICBSZW1vdGUgImtl cm1pdCByZWNlaXZlIGluIHRleHQgbW9kZSIgY29tbWFuZC4KKyAgczMgIHtrZXJtaXQgLXh9ICAg ICAgUmVtb3RlICJzdGFydCBrZXJtaXQgc2VydmVyIiBjb21tYW5kLgorCisgICBOT1RFOiBJZiB0 aGUgcmVtb3RlIEtlcm1pdCBpcyA2LjAsIHRoZSBmb2xsb3dpbmcgYXJlIHJlY29tbWVuZGVkIGZv cgorICAgZmFzdCBzdGFydHVwIGFuZCBoaWdoLXBlcmZvcm1hbmNlIGZpbGUgdHJhbnNmZXIgKHNl ZSBBcHBlbmRpeCBJIGluCisgICBbNDgyXVVzaW5nIEMtS2VybWl0LCBzZWNvbmQgRWRpdGlvbiwg Zm9yIGNvbW1hbmQtbGluZSBvcHRpb25zKToKKworICBzMSAgIGtlcm1pdCAtWVFpciAgIChLZXJt aXQgcmVjZWl2ZSBiaW5hcnksIHNraXAgaW5pdCBmaWxlLCBmYXN0LikKKyAgczIgICBrZXJtaXQg LVlRVHIgICAoS2VybWl0IHJlY2VpdmUgdGV4dCwgc2tpcCBpbml0IGZpbGUsIGZhc3QuKQorICBz MyAgIGtlcm1pdCAtWVF4ICAgIChLZXJtaXQgc2VydmVyLCBza2lwIGluaXQgZmlsZSwgZmFzdC4p CisKKyAgIElmIHRoZSByZW1vdGUgaXMgQy1LZXJtaXQgNy4wIG9yIGxhdGVyLCBjaGFuZ2UgdGhl IC14IG9wdGlvbiAoZW50ZXIKKyAgIHNlcnZlciBtb2RlKSB0byAtTyAodXBwZXJjYXNlIGxldHRl ciBPKSwgd2hpY2ggbWVhbnMgImVudGVyIHNlcnZlciBtb2RlCisgICBmb3IgT25lIHRyYW5zYWN0 aW9uIG9ubHkpOyB0aGlzIHdheSwgaXQgaXMgbm90IHN0dWNrIGluIHNlcnZlciBhZnRlcgorICAg dGhlIHRyYW5zZmVyLiBBbHNvIG5vdGUgdGhhdCB0aGUgUSBpcyByZWR1bmRhbnQgaW4gdmVyc2lv biA3LjAsIHNpbmNlCisgICBmYXN0IEtlcm1pdCBwcm90b2NvbCBzZXR0aW5ncyBhcmUgbm93IHRo ZSBkZWZhdWx0LgorCisgICBOb3RlIHRoYXQgaW4gY2FzZSB0aGUgQy1LZXJtaXQgZXhlY3V0YWJs ZSBpcyBjYWxsZWQgIndlcm1pdCIgb3IKKyAgICJja2VybWl0IiB5b3UgY2FuIGNoYW5nZSAia2Vy bWl0IiBpbiB0aGUgc3RyaW5ncyBhYm92ZSB0byAid2VybWl0IiBvcgorICAgImNrZXJtaXQiIGFu ZCBDLUtlcm1pdCA3LjAgb3IgbGF0ZXIgd2lsbCByZWNvZ25pemUgdGhlc2UgYXMgc3lub255bXMK KyAgIGZvciAia2VybWl0IiwgaW4gY2FzZSBpdCBpcyBhdCBpdHMgY29tbWFuZCBwcm9tcHQgd2hl biBvbmUgb2YgdGhlc2UKKyAgIHN0cmluZ3MgaXMgc2VudCB0byBpdC4KKworNC43LiBGaWxlLVRy YW5zZmVyIENvbW1hbmQgU3dpdGNoZXMKKworICAgT3ZlciB0aGUgeWVhcnMsIHZhcmlvdXMgbmV3 IG1ldGhvZHMgb2YgdHJhbnNmZXJyaW5nIGEgZmlsZSBoYXZlCisgICBhY2N1bXVsYXRlZCwgdW50 aWwgd2UgaGFkLCBpbiBhZGRpdGlvbiB0byB0aGUgU0VORCBjb21tYW5kLCBhbHNvIE1PVkUKKyAg IChzZW5kIGFuZCB0aGVuIGRlbGV0ZSksIE1BSUwgKHNlbmQgYXMgZW1haWwpLCBSRU1PVEUgUFJJ TlQgKHNlbmQgdG8gYmUKKyAgIHByaW50ZWQpLCBDU0VORCAoc2VuZCB0aGUgb3V0cHV0IG9mIGEg Y29tbWFuZCksIFBTRU5EIChzZW5kIGEgcGFydCBvZiBhCisgICBmaWxlKSwgQlNFTkQgKHNlbmQg aW4gYmluYXJ5IG1vZGUpLCBSRVNFTkQgKHJlc3VtZSBhbiBpbnRlcnJ1cHRlZAorICAgU0VORCks IGV0YyBldGMuIFNpbWlsYXJseTogR0VULCBSRUdFVCwgQ0dFVCwgUkVUUklFVkUsIGFuZCBzbyBv bi4KKworICAgTm90IG9ubHkgaXMgaXQgY29uZnVzaW5nIHRvIGhhdmUgZGlmZmVyZW50IG5hbWVz IGZvciB0aGVzZSBjb21tYW5kcywKKyAgIG1hbnkgb2Ygd2hpY2ggYXJlIG5vdCByZWFsIHdvcmRz LCBidXQgdGhpcyBhbHNvIGRvZXMgbm90IGFsbG93IGFsbAorICAgY29tYmluYXRpb25zLCBsaWtl ICJzZW5kIGEgZmlsZSBhcyBtYWlsLCB0aGVuIGRlbGV0ZSBpdCIuCisKKyAgIEluIEMtS2VybWl0 IDcuMCwgdGhlIFNFTkQsIEdFVCwgYW5kIFJFQ0VJVkUgY29tbWFuZHMgd2VyZSByZXN0cnVjdHVy ZWQKKyAgIHRvIGFjY2VwdCBtb2RpZmllciBzd2l0Y2hlcyAoc3dpdGNoZXMgYXJlIGV4cGxhaW5l ZCBpbiBbNDgzXVNlY3Rpb24KKyAgIDEuNSkuCisKKzQuNy4xLiBTRU5EIENvbW1hbmQgU3dpdGNo ZXMKKworICAgV2l0aG91dCBzd2l0Y2hlcywgdGhlIFNFTkQgY29tbWFuZCBzdGlsbCB3b3JrcyBl eGFjdGx5IGFzIGJlZm9yZToKKworICBzZW5kIG9vZmEudHh0ICAgICAgOyBzZW5kIGEgc2luZ2xl IGZpbGUKKyAgc2VuZCBvb2ZhLiogICAgICAgIDsgc2VuZCBtdWx0aXBsZSBmaWxlcworICBzZW5k IG9vZmEudHh0IHgueCAgOyBzZW5kIG9vZmEudHh0IGFzIHgueCAodGVsbCByZWNlaXZlciBpdHMg bmFtZSBpcyB4LngpCisgIHNlbmQgICAgICAgICAgICAgICA7IHNlbmQgZnJvbSBTRU5ELUxJU1QK KworICAgQnV0IG5vdyB0aGUgZm9sbG93aW5nIG1vZGlmaWVyIHN3aXRjaGVzIG1heSBiZSBpbmNs dWRlZCBiZXR3ZWVuICJzZW5kIgorICAgYW5kIHRoZSBmaWxlbmFtZS4gWmVybywgb25lLCB0d28s IG9yIG1vcmUgc3dpdGNoZXMgbWF5IGJlIGluY2x1ZGVkIGluCisgICBhbnkgY29tYmluYXRpb24g dGhhdCBtYWtlcyBzZW5zZS4gU3dpdGNoIG5hbWVzIChzdWNoIGFzIC9CSU5BUlkpIGNhbiBiZQor ICAgYWJicmV2aWF0ZWQsIGp1c3QgbGlrZSBhbnkgb3RoZXIga2V5d29yZHMuIE1vc3Qgb2YgdGhl c2Ugc3dpdGNoZXMgd29yaworICAgb25seSB3aGVuIHVzaW5nIEtlcm1pdCBwcm90b2NvbCAoL1RF WFQgYW5kIC9CSU5BUlkgYXJlIHRoZSBleGNlcHRpb25zKS4KKworICAgL0FGVEVSOmRhdGUtdGlt ZQorICAgICAgICAgIFNwZWNpZmllcyB0aGF0IG9ubHkgdGhvc2UgZmlsZXMgbW9kaWZpZWQgKG9y LCBpbiBWTVMsIGNyZWF0ZWQpCisgICAgICAgICAgYWZ0ZXIgdGhlIGdpdmVuIGRhdGUtdGltZSAo c2VlIFs0ODRdU2VjdGlvbiAxLjYpIGFyZSB0byBiZSBzZW50LgorICAgICAgICAgIEV4YW1wbGVz OgorCisgIHNlbmQgL3RleHQgL2FmdGVyOnsyLUZlYi0xOTk3IDEwOjI4OjMwfSAqLnR4dAorICBz ZW5kIC90ZXh0IC9hZnRlcjpcZmRhdGUob29mYS50eHQpICoudHh0CisKKyAgICAgICAgICBTeW5v bnltOiAvU0lOQ0UuCisKKyAgIC9BUlJBWTphcnJheW5hbWUKKyAgICAgICAgICBTcGVjaWZpZXMg dGhhdCBpbnN0ZWFkIG9mIHNlbmRpbmcgYSBmaWxlLCBDLUtlcm1pdCBpcyB0byBzZW5kCisgICAg ICAgICAgdGhlIGNvbnRlbnRzIG9mIHRoZSBnaXZlbiBhcnJheS4gU2luY2UgYW4gYXJyYXkgZG9l cyBub3QgaGF2ZSBhCisgICAgICAgICAgZmlsZW5hbWUsIHlvdSBzaG91bGQgaW5jbHVkZSBhbiAv QVMtTkFNRSBzd2l0Y2ggdG8gc3BlY2lmeSB0aGUKKyAgICAgICAgICBuYW1lIHVuZGVyIHdoaWNo IHRoZSBhcnJheSBpcyB0byBiZSBzZW50IChpZiB5b3UgZG8gbm90LCB0aGUKKyAgICAgICAgICBu YW1lICJfYXJyYXlfeF8iIGlzIHVzZWQsIHdoZXJlICd4JyBpcyByZXBsYWNlZCBieSB0aGUgYXJy YXkKKyAgICAgICAgICBkZXNpZ25hdG9yKS4gU2VlIFs0ODVdc2VjdGlvbiA3LjEwIGZvciBhcnJh eS1uYW1lIHN5bnRheC4gQXMKKyAgICAgICAgICBub3RlZCBpbiB0aGF0IHNlY3Rpb24sIHlvdSBj YW4gYWxzbyBpbmNsdWRlIGEgcmFuZ2UgdG8gaGF2ZSBhCisgICAgICAgICAgc2VnbWVudCBvZiB0 aGUgYXJyYXkgc2VudCwgcmF0aGVyIHRoYW4gdGhlIHdob2xlIHRoaW5nOyBmb3IKKyAgICAgICAg ICBleGFtcGxlOiAic2VuZCAvYXJyYXk6JmFbMTAwOjE5OV0iLiBJdCBpcyBzdHJvbmdseSByZWNv bW1lbmRlZAorICAgICAgICAgIHRoYXQgeW91IGFjY29tcGFueSB0aGUgL0FSUkFZIHN3aXRjaCB3 aXRoIGEgL1RFWFQgb3IgL0JJTkFSWQorICAgICAgICAgIHN3aXRjaCB0byBmb3JjZSB0aGUgZGVz aXJlZCB0cmFuc2ZlciBtb2RlLCBzaW5jZSBvdGhlcndpc2UgdGhlCisgICAgICAgICAgdmFyaW91 cyBhdXRvbWF0aWMgbWVjaGFuaXNtcyBtaWdodCBzd2l0Y2ggdG8gYmluYXJ5IG1vZGUgd2hlbgor ICAgICAgICAgIHlvdSByZWFsbHkgd2FudGVkIHRleHQsIG9yIHZpY2UgdmVyc2EuIEluIHRleHQg bW9kZSBhIGxpbmUKKyAgICAgICAgICB0ZXJtaW5hdG9yIGlzIGFkZGVkIHRvIHRoZSBlbmQgb2Yg ZWFjaCBhcnJheSBlbGVtZW50LCBidXQgbm90IGluCisgICAgICAgICAgYmluYXJ5IG1vZGUuIEZv ciBkZXRhaWxzIGFuZCBleGFtcGxlcyBzZWUgWzQ4Nl1TZWN0aW9uIDcuMTAuMTEuCisKKyAgIC9B Uy1OQU1FOnRleHQKKyAgICAgICAgICBTcGVjaWZpZXMgInRleHQiIGFzIHRoZSBuYW1lIHRvIHNl bmQgdGhlIGZpbGUgdW5kZXIuIFlvdSBjYW4KKyAgICAgICAgICBhbHNvIHN0aWxsIHNwZWNpZnkg dGhlIGFzLW5hbWUgYXMgdGhlIHNlY29uZCBmaWxlbmFtZSBvbiB0aGUKKyAgICAgICAgICBTRU5E IGNvbW1hbmQgbGluZS4gVGhlIGZvbGxvd2luZyB0d28gY29tbWFuZHMgYXJlIGVxdWl2YWxlbnQ6 CisKKyAgc2VuZCBvb2ZhLnR4dCBvb2ZhLm5ldworICBzZW5kIC9hczpvb2ZhLm5ldyBvb2ZhLnR4 dAorCisgICAvQkVGT1JFOmRhdGUtdGltZQorICAgICAgICAgIFNwZWNpZmllcyB0aGF0IG9ubHkg dGhvc2UgZmlsZXMgbW9kaWZpZWQgKG9yLCBpbiBWTVMsIGNyZWF0ZWQpCisgICAgICAgICAgYmVm b3JlIHRoZSBnaXZlbiBkYXRlLXRpbWUgKFs0ODddU2VjdGlvbiAxLjYpIGFyZSB0byBiZSBzZW50 LgorCisgICAvQklOQVJZCisgICAgICAgICAgUGVyZm9ybXMgdGhpcyB0cmFuc2ZlciBpbiBiaW5h cnkgbW9kZSB3aXRob3V0IGFmZmVjdGluZyB0aGUKKyAgICAgICAgICBnbG9iYWwgdHJhbnNmZXIg bW9kZSwgb3ZlcnJpZGluZyBub3Qgb25seSB0aGUgRklMRSBUWVBFIGFuZAorICAgICAgICAgIFRS QU5TRkVSIE1PREUgc2V0dGluZ3MsIGJ1dCBhbHNvIHRoZSBGSUxFIFBBVFRFUk4gc2V0dGluZywg YnV0CisgICAgICAgICAgZm9yIHRoaXMgU0VORCBjb21tYW5kIG9ubHkuIEluIG90aGVyIHdvcmRz LCBTRU5EIC9CSU5BUlkgbWVhbnMKKyAgICAgICAgICB3aGF0IGl0IHNheXM6IHNlbmQgdGhlIGZp bGUgaW4gYmluYXJ5IG1vZGUsIHJlZ2FyZGxlc3Mgb2YgYW55CisgICAgICAgICAgb3RoZXIgc2V0 dGluZ3MuIEV4YW1wbGU6CisKKyAgc2V0IGZpbGUgdHlwZSB0ZXh0ICAgICAgOyBTZXQgZ2xvYmFs IHRyYW5zZmVyIG1vZGUgdG8gdGV4dAorICBzZW5kIC9iaW5hcnkgb29mYS56aXAgICA7IFNlbmQg YSBmaWxlIGluIGJpbmFyeQorICBzZW5kIG9vZmEudHh0ICAgICAgICAgICA7IFRoaXMgb25lIGlz IHNlbnQgaW4gdGV4dCBtb2RlCisKKyAgIC9DT01NQU5ECisgICAgICAgICAgU0VORCAvQ09NTUFO RCBpcyBlcXVpdmFsZW50IHRvIENTRU5EIChbNDg4XVNlY3Rpb24gNC4yLjIpIC0tIGl0CisgICAg ICAgICAgc2F5cyB0byBzZW5kIHRoZSBvdXRwdXQgZnJvbSBhIGNvbW1hbmQsIHJhdGhlciB0aGFu IHRoZSBjb250ZW50cworICAgICAgICAgIG9mIGEgZmlsZS4gVGhlIGZpcnN0ICJmaWxlbmFtZSIg b24gdGhlIFNFTkQgY29tbWFuZCBsaW5lIGlzCisgICAgICAgICAgaW50ZXJwcmV0ZWQgYXMgdGhl IG5hbWUgb2YgYSBjb21tYW5kOyB0aGUgc2Vjb25kIChpZiBhbnkpIGlzIHRoZQorICAgICAgICAg IGFzLW5hbWUuIEV4YW1wbGVzOgorCisgIHNlbmQgL2NvbW1hbmQge2dyZXAgU3VuZGF5IG9vZmEu dHh0fSBzdW5kYXkudHh0CisgIHNlbmQgL2FzLW5hbWU6c3VuZGF5LnR4dCAvY29tbWFuZCB7Z3Jl cCBTdW5kYXkgb29mYS50eHR9CisgIHNlbmQgL2JpbiAvY29tbWFuZCB7dGFyIGNmIC0gLiB8IGd6 aXAgLWN9IHshZ3VuemlwIC1jIHwgdGFyIHhmIC19CisKKyAgIC9ERUxFVEUKKyAgICAgICAgICBE ZWxldGVzIHRoZSBmaWxlIChvciBlYWNoIGZpbGUgaW4gdGhlIGdyb3VwKSBhZnRlciBpdCBoYXMg YmVlbgorICAgICAgICAgIHNlbnQgc3VjY2Vzc2Z1bGx5IChidXQgZG9lcyBub3QgZGVsZXRlIGl0 IGlmIGl0IHdhcyBub3Qgc2VudAorICAgICAgICAgIHN1Y2Nlc3NmdWxseSkuIFNFTkQgL0RFTEVU RSBpcyBlcXVpdmFsZW50IHRvIE1PVkUuIEhhcyBubyBlZmZlY3QKKyAgICAgICAgICB3aGVuIHVz ZWQgd2l0aCAvQ09NTUFORC4gRXhhbXBsZToKKworICBzZW5kIC9kZWxldGUgKi5sb2cKKworICAg L0RPVEZJTEVTCisgICAgICAgICAgKFVOSVggYW5kIE9TLTkgb25seSkgTm9ybWFsbHkgZmlsZXMg d2hvc2UgbmFtZXMgYmVnaW4gd2l0aCAiLiIKKyAgICAgICAgICBhcmUgc2tpcHBlZCB3aGVuIG1h dGNoaW5nIHdpbGRjYXJkcyB0aGF0IGRvIG5vdCBhbHNvIGJlZ2luIHdpdGgKKyAgICAgICAgICAi LiIuIEluY2x1ZGUgL0RPVEZJTEVTIHRvIGZvcmNlIHRoZXNlIGZpbGVzIHRvIGJlIGluY2x1ZGVk IHRvby4KKworICAgL1JFQ1VSU0lWRQorICAgICAgICAgIERlc2NlbmQgdGhlIHRocm91Z2ggdGhl IGRpcmVjdG9yeSB0cmVlIHdoZW4gbG9jYXRpbmcgZmlsZXMgdG8KKyAgICAgICAgICBzZW5kLiBB dXRvbWF0aWNhbGx5IHNldHMgL1BBVEhOQU1FUzpSRUxBVElWRS4gRXhwbGFpbmVkIGluCisgICAg ICAgICAgWzQ4OV1TZWN0aW9uIDQuMTEgLgorCisgICAvRVhDRVBUOnBhdHRlcm4KKyAgICAgICAg ICBTZWUgWzQ5MF1TZWN0aW9uIDEuNS40LgorCisgICAvTk9CQUNLVVAKKyAgICAgICAgICBUaGlz IG1lYW5zIHRvIHNraXAgYmFja3VwIGZpbGVzIHdoZW4gc2VuZGluZywgZXZlbiBpZiB0aGV5IG1h dGNoCisgICAgICAgICAgdGhlIFNFTkQgZmlsZSBzcGVjaWZpY2F0aW9uLiBUaGlzIGlzIGVxdWl2 YWxlbnQgdG8gdXNpbmcgU0VORAorICAgICAgICAgIC9FWENFUFQgYW5kIGluY2x1ZGluZyAqLn5b MC05XSp+IGluIHRoZSBleGNlcHRpb24gbGlzdCAob3IgKi5+Kn4KKyAgICAgICAgICBpZiBLZXJt aXQgd2FzIGJ1aWx0IHdpdGhvdXQgcGF0dGVybi1tYXRjaGluZyBzdXBwb3J0OyBzZWUKKyAgICAg ICAgICBbNDkxXVNlY3Rpb24gNC45LjEpLiBJbmNsdWRpbmcgdGhpcyBzd2l0Y2ggaXMgZXF1aXZh bGVudCB0bworICAgICAgICAgIGdpdmluZyBTRVQgU0VORCBCQUNLVVAgT0ZGIChbNDkyXVNlY3Rp b24gNC4wLjYpIHByaW9yIHRvIFNFTkQsCisgICAgICAgICAgZXhjZXB0IGl0cyBlZmZlY3QgaXMg bG9jYWwgdG8gdGhlIFNFTkQgY29tbWFuZCB3aXRoIHdoaWNoIGl0IHdhcworICAgICAgICAgIGdp dmVuLgorCisgICAvTk9ET1RGSUxFUworICAgICAgICAgIFRoZSBvcHBvc2l0ZSBvZiAvRE9URklM RVMgKHEudi4pCisKKyAgIC9GSUxFTkFNRVM6e0NPTlZFUlRFRCxMSVRFUkFMfQorICAgICAgICAg IFVzZSB0aGlzIHN3aXRjaCB0byBvdmVycmlkZSB0aGUgY3VycmVudCBnbG9iYWwgU0VUIEZJTEUg TkFNRVMKKyAgICAgICAgICBzZXR0aW5nIGZvciB0aGlzIHRyYW5zZmVyIG9ubHkuCisKKyAgIC9G SUxURVI6Y29tbWFuZAorICAgICAgICAgIFRoaXMgc3BlY2lmaWVzIGEgZmlsdGVyIHRvIHBhc3Mg dGhlIGZpbGUgdGhyb3VnaCBiZWZvcmUgc2VuZGluZworICAgICAgICAgIGl0LiBTZWUgdGhlIFs0 OTNdc2VjdGlvbiBvbiBmaWxlLXRyYW5zZmVyIHBpcGVzIGFuZCBmaWx0ZXJzLiBUaGUKKyAgICAg ICAgICAvRklMVEVSIHN3aXRjaCBhcHBsaWVzIG9ubHkgdG8gdGhlIGZpbGUtdHJhbnNmZXIgY29t bWFuZCBpdCBpcworICAgICAgICAgIGdpdmVuIHdpdGg7IGl0IGRvZXMgbm90IGFmZmVjdCB0aGUg Z2xvYmFsIFNFTkQgRklMVEVSIHNldHRpbmcsCisgICAgICAgICAgaWYgYW55LgorCisgICAvSU1B R0UKKyAgICAgICAgICBWTVM6IFNlbmRzIGluIGltYWdlIG1vZGUuIE5vbi1WTVM6IHNhbWUgYXMg L0JJTkFSWS4KKworICAgL0xBQkVMRUQKKyAgICAgICAgICBWTVMgYW5kIE9TLzIgb25seTogU2Vu ZHMgaW4gbGFiZWxlZCBtb2RlLgorCisgICAvTEFSR0VSLVRIQU46bnVtYmVyCisgICAgICAgICAg U3BlY2lmaWVzIHRoYXQgb25seSB0aG9zZSBmaWxlcyB0aGF0IGFyZSBsb25nZXIgdGhhbiB0aGUg Z2l2ZW4KKyAgICAgICAgICBudW1iZXIgb2YgYnl0ZXMgYXJlIHRvIGJlIHNlbnQuCisKKyAgIC9M SVNURklMRTpmaWxlbmFtZQorICAgICAgICAgIFNwZWNpZmllcyB0aGF0IHRoZSBmaWxlcyB0byBi ZSBzZW50IGFyZSBsaXN0ZWQgaW4gYSBmaWxlIHdpdGgKKyAgICAgICAgICB0aGUgZ2l2ZW4gZmls ZW5hbWUuIFRoZSBmaWxlIGNvbnRhaW5zIG9uZSBmaWxlbmFtZSBwZXIgbGluZS4KKyAgICAgICAg ICBUaGVzZSBmaWxlbmFtZXMgYXJlIG5vdCBjaGVja2VkIGluIGFueSB3YXk7IGVhY2ggZmlsZW5h bWUgaXMKKyAgICAgICAgICB0YWtlbiBhbmQgZG9lcyBub3QgdXNlIG9yIGRlcGVuZCBvbiBhbnkg S2VybWl0LXNwZWNpZmljIHN5bnRheC4KKyAgICAgICAgICBJbiBwYXJ0aWN1bGFyLCBiYWNrc2xh c2hlcyBhcmUgbm90IHRyZWF0ZWQgc3BlY2lhbGx5LCBsZWFkaW5nCisgICAgICAgICAgYW5kIHRy YWlsaW5nIHNwYWNlcyBhcmUgbm90IHN0cmlwcGVkLCBldGMuIEhvd2V2ZXIsIGlmIGEKKyAgICAg ICAgICBmaWxlbmFtZSBjb250YWlucyB3aWxkY2FyZHMsIHRoZXkgYXJlIGV4cGFuZGVkLiBFeGFt cGxlOiBJZiBhCisgICAgICAgICAgZmlsZSBuYW1lZCBmaWxlcy50eHQgY29udGFpbnMgdGhlIGZv bGxvd2luZyBsaW5lczoKKworICBibGFoLnR4dAorICBvb2ZhKgorICB4LngKKworICAgICAgICAg IChidXQgd2l0aG91dCBsZWFkaW5nIG9yIHRyYWlsaW5nIHNwYWNlcyksIHRoZW4gdGhlIEMtS2Vy bWl0CisgICAgICAgICAgY29tbWFuZCAic2VuZCAvbGlzdGZpbGU6ZmlsZXMudHh0IiB3aWxsIHNl bmQgdGhlIGZpbGVzIGJsYWgudHh0LAorICAgICAgICAgIHgueCwgYW5kIGFsbCBmaWxlcyB3aG9z ZSBuYW1lcyBzdGFydCB3aXRoICJvb2ZhIiwgYXNzdW1pbmcgdGhlCisgICAgICAgICAgZmlsZXMg ZXhpc3QgYW5kIGFyZSByZWFkYWJsZS4gVGhlIC9MSVNURklMRSBzd2l0Y2gsIGNhbiwgb2YKKyAg ICAgICAgICBjb3Vyc2UsIGJlIHVzZWQgd2l0aCBvdGhlciBzd2l0Y2hlcyB3aGVuIGl0IG1ha2Vz IHNlbnNlLCBmb3IKKyAgICAgICAgICBleGFtcGxlLCAvRVhDRVBULCAvQklOQVJZLCAvQUZURVIs IC9TTUFMTEVSLCAvTU9WRS1UTywgL0RFTEVURSwKKyAgICAgICAgICAvQVMtTkFNRSB3aXRoIGEg dGVtcGxhdGUsIGV0Yy4KKworICAgL01BSUw6YWRkcmVzcworICAgICAgICAgIFNlbmRzIHRoZSBm aWxlIGFzIGUtbWFpbCB0byB0aGUgZ2l2ZW4gYWRkcmVzcyBvciBhZGRyZXNzZXMuCisgICAgICAg ICAgInNlbmQgL21haWw6YWRkcmVzcyBmaWxlbmFtZSIgaXMgZXF1aXZhbGVudCB0byAibWFpbCBm aWxlbmFtZQorICAgICAgICAgIGFkZHJlc3MiLiBZb3UgY2FuIGluY2x1ZGUgbXVsdGlwbGUgYWRk cmVzc2VzIHNlcGFyYXRlZCBieQorICAgICAgICAgIGNvbW1hcy4gRXhhbXBsZXM6CisKKyAgc2Vu ZCAvbWFpbDprZXJtaXQtc3VwcG9ydEBjb2x1bWJpYS5lZHUgcGFja2V0LmxvZworICBzZW5kIC9t YWlsOmNtZyxmZGMsanJkIG9vZmEudHh0CisKKyAgICAgICAgICBBcyB3aXRoIGFueSBzd2l0Y2gg YXJndW1lbnQsIGlmIHRoZSBhZGRyZXNzIG9yIGFkZHJlc3MgbGlzdAorICAgICAgICAgIGNvbnRh aW5zIGFueSBzcGFjZXMsIHlvdSBtdXN0IGVuY2xvc2UgaXQgaW4gYnJhY2VzLiBUaGUgZm9ybWF0 CisgICAgICAgICAgb2YgdGhlIGFkZHJlc3NlcyBtdXN0IGFncmVlIHdpdGggdGhhdCB1bmRlcnN0 b29kIGJ5IHRoZQorICAgICAgICAgIG1haWwtc2VuZGluZyBwcm9ncmFtIG9uIHRoZSByZWNlaXZl cidzIGNvbXB1dGVyLgorCisgICAvTU9WRS1UTzpkaXJlY3RvcnktbmFtZQorICAgICAgICAgIFNw ZWNpZmllcyB0aGF0IGFmdGVyIGVhY2ggKG9yIHRoZSBvbmx5KSBzb3VyY2UgZmlsZSBpcyBzZW50 CisgICAgICAgICAgc3VjY2Vzc2Z1bGx5LCBhbmQgT05MWSBpZiBpdCBpcyBzZW50IHN1Y2Nlc3Nm dWxseSwgaXQgc2hvdWxkIGJlCisgICAgICAgICAgbW92ZWQgdG8gdGhlIG5hbWVkIGRpcmVjdG9y eS4gSWYgdGhlIGRpcmVjdG9yeSBuYW1lIGNvbnRhaW5zCisgICAgICAgICAgc3BhY2VzLCBlbmNs b3NlIGl0IGluIGJyYWNlcy4gSWYgdGhlIGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdCwKKyAgICAg ICAgICBpdCBpcyBjcmVhdGVkIGlmIHBvc3NpYmxlOyBpZiBpdCBjYW4ndCBiZSBjcmVhdGVkLCB0 aGUgY29tbWFuZAorICAgICAgICAgIGZhaWxzIGFuZCBhbiBlcnJvciBtZXNzYWdlIGlzIHByaW50 ZWQuIEV4YW1wbGU6CisKKyAgc2VuZCAvdGV4dCAvbW92ZS10bzovdXNlcnMvb2xnYS9iYWNrdXAv ICoudHh0CisKKyAgIC9OT1QtQUZURVI6ZGF0ZS10aW1lCisgICAgICAgICAgU3BlY2lmaWVzIHRo YXQgb25seSB0aG9zZSBmaWxlcyBtb2RpZmllZCBhdCBvciBiZWZvcmUgdGhlIGdpdmVuCisgICAg ICAgICAgZGF0ZSBhbmQgdGltZSBhcmUgdG8gYmUgc2VudC4KKworICAgL05PVC1CRUZPUkU6ZGF0 ZS10aW1lCisgICAgICAgICAgU3BlY2lmaWVzIHRoYXQgb25seSB0aG9zZSBmaWxlcyBtb2RpZmll ZCBhdCBvciBhZnRlciB0aGUgZ2l2ZW4KKyAgICAgICAgICBkYXRlIGFuZCB0aW1lIGFyZSB0byBi ZSBzZW50LgorCisgICAvUEFUSE5BTUVTOntPRkYsQUJTT0xVVEUsUkVMQVRJVkV9CisgICAgICAg ICAgVXNlIHRoaXMgc3dpdGNoIHRvIG92ZXJyaWRlIHRoZSBjdXJyZW50IGdsb2JhbCBTRVQgU0VO RAorICAgICAgICAgIFBBVEhOQU1FUyBzZXR0aW5nIGZvciB0aGlzIHRyYW5zZmVyIG9ubHkuIC9Q QVRITkFNRVM6QUJTT0xVVEUgb3IKKyAgICAgICAgICBSRUxBVElWRSBhbHNvIHNldHMgL0ZJTEVO QU1FUzpMSVRFUkFMIChhbHNvIGZvciB0aGlzIHRyYW5zZmVyCisgICAgICAgICAgb25seSkgc2lu Y2UgcGF0aG5hbWVzIGFyZSBub3Qgc2VudCBvdGhlcndpc2UuCisKKyAgIC9SRU5BTUUtVE86dGV4 dAorICAgICAgICAgIFNwZWNpZmllcyB0aGF0IGFmdGVyIHRoZSAob3IgZWFjaCkgc291cmNlIGZp bGUgaXMgc2VudAorICAgICAgICAgIHN1Y2Nlc3NmdWxseSwgYW5kIE9OTFkgaWYgaXQgaXMgc2Vu dCBzdWNjZXNzZnVsbHksIGl0IHNob3VsZCBiZQorICAgICAgICAgIHJlbmFtZWQgdG8gdGhlIG5h bWUgZ2l2ZW4uIElmIHRoZSBuYW1lIGNvbnRhaW5zIHNwYWNlcywgZW5jbG9zZQorICAgICAgICAg IGl0IGluIGJyYWNlcy4gSWYgYSBmaWxlIGdyb3VwIGlzIGJlaW5nIHNlbnQsIHRoZW4gdGhlICJ0 ZXh0IgorICAgICAgICAgIG11c3QgY29udGFpbiBhIHZhcmlhYmxlIHJlZmVyZW5jZSBzdWNoIGFz IFx2KGZpbGVuYW1lKSAoc2VlCisgICAgICAgICAgWzQ5NF1TZWN0aW9uIDQuMSkuIEV4YW1wbGU6 CisKKyAgc2VuZCAvcmVuYW1lLXRvOm9rX1x2KGZpbGVuYW1lKSAqLioKKworICAgICAgICAgIFRo aXMgc2VuZHMgZWFjaCBmaWxlIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBhbmQgaWYgaXQgd2Fz IHNlbnQKKyAgICAgICAgICBzdWNjZXNzZnVsbHksIGNoYW5nZXMgaXRzIG5hbWUgdG8gYmVnaW4g d2l0aCAib2tfIi4KKworICAgL1NNQUxMRVItVEhBTjpudW1iZXIKKyAgICAgICAgICBTcGVjaWZp ZXMgdGhhdCBvbmx5IHRob3NlIGZpbGVzIHRoYXQgYXJlIHNtYWxsZXIgdGhhbiB0aGUgZ2l2ZW4K KyAgICAgICAgICBudW1iZXIgb2YgYnl0ZXMgYXJlIHRvIGJlIHNlbnQuCisKKyAgIC9TVUJKRUNU OnRleHQKKyAgICAgICAgICBTdWJqZWN0IGZvciBlbWFpbC4gQWN0dWFsbHksIHRoaXMgaXMganVz dCBhIHN5bm9ueW0gZm9yCisgICAgICAgICAgL0FTLU5BTUUuIElmIHRoZSB0ZXh0IGluY2x1ZGVz IHNwYWNlcywgeW91IG11c3QgZW5jbG9zZSBpdCBpbgorICAgICAgICAgIGJyYWNlcy4gSWYgeW91 IGRvbid0IHNwZWNpZnkgYSBzdWJqZWN0IChvciBhcy1uYW1lKSwgdGhlIG5hbWUgb2YKKyAgICAg ICAgICB0aGUgZmlsZSBpcyB1c2VkIGFzIHRoZSBzdWJqZWN0LiBFeGFtcGxlOgorCisgIHNlbmQg L21haWw6a2VybWl0LXN1cHBvcnRAY29sdW1iaWEuZWR1IC9zdWJqOntBcyByZXF1ZXN0ZWR9IHBh Y2tldC5sb2cKKworICAgL1BSSU5UOm9wdGlvbnMKKyAgICAgICAgICBTZW5kcyB0aGUgZmlsZSB0 byBiZSBwcmludGVkLCBvcHRpb25hbGx5IHNwZWNpZnlpbmcgb3B0aW9ucyBmb3IKKyAgICAgICAg ICB0aGUgcHJpbnRlci4gRXF1aXZhbGVudCB0byBSRU1PVEUgUFJJTlQgZmlsZW5hbWUgb3B0aW9u cy4KKyAgICAgICAgICBFeGFtcGxlczoKKworICBzZW5kIC9wcmludCBvb2ZhLnR4dCAgICAgICAg ICAgICAgOyBObyBvcHRpb25zLgorICBzZW5kIC9wcmludDovY29waWVzPTMgb29mYS50eHQgICAg OyAiL2NvcGllcz0zIiBpcyBhIFZNUyBQUklOVCBzd2l0Y2guCisgIHNlbmQgL3ByaW50Oi0jMyBv b2ZhLnR4dCAgICAgICAgICA7ICItIzMiIGlzIGEgVU5JWCBscHIgc3dpdGNoLgorCisgICAvUFJP VE9DT0w6bmFtZQorICAgICAgICAgIFVzZXMgdGhlIGdpdmVuIHByb3RvY29sIHRvIHNlbmQgdGhl IGZpbGUgKEtlcm1pdCwgWm1vZGVtLCBldGMpCisgICAgICAgICAgZm9yIHRoaXMgdHJhbnNmZXIg d2l0aG91dCBjaGFuZ2luZyBnbG9iYWwgcHJvdG9jb2wuIE9ubHkKKyAgICAgICAgICBhdmFpbGFi bGUgaW4gS2VybWl0IDk1LCBVTklYLCBhbmQgT1MtOS4gRXhhbXBsZToKKworICBzZXQgcHJvdG9j b2wga2VybWl0ICAgICAgICAgICAgICAgOyBTZXQgZ2xvYmFsIHByb3RvY29sCisgIHNlbmQgL3By b3RvOnptb2RlbSAvYmluIG9vZmEuemlwICA7IFNlbmQganVzdCB0aGlzIGZpbGUgd2l0aCBabW9k ZW0KKyAgc2VuZCBvb2ZhLnR4dCAgICAgICAgICAgICAgICAgICAgIDsgVGhpcyBmaWxlIGlzIHNl bnQgd2l0aCBLZXJtaXQKKworICAgL1FVSUVUCisgICAgICAgICAgV2hlbiBzZW5kaW5nIGluIGxv Y2FsIG1vZGUsIHRoaXMgc3VwcHJlc3NlcyB0aGUgZmlsZS10cmFuc2ZlcgorICAgICAgICAgIGRp c3BsYXkuCisKKyAgIC9SRUNPVkVSCisgICAgICAgICAgVXNlZCB0byByZWNvdmVyIGZyb20gYSBw cmV2aW91c2x5IGludGVycnVwdGVkIHRyYW5zZmVyOyBTRU5ECisgICAgICAgICAgL1JFQ09WRVIg aXMgZXF1aXZhbGVudCB0byBSRVNFTkQuIFJlY292ZXJ5IG9ubHkgd29ya3MgaW4gYmluYXJ5Cisg ICAgICAgICAgbW9kZTsgU0VORCAvUkVDT1ZFUiBhbmQgUkVTRU5EIGluY2x1ZGUgYW4gaW1wbGll ZCAvQklOQVJZCisgICAgICAgICAgc3dpdGNoLiBFdmVuIHRoZW4sIHJlY292ZXJ5IHdpbGwgc3Vj Y2Vzc2Z1bCBvbmx5IGlmIChhKSB0aGUKKyAgICAgICAgICBvcmlnaW5hbCAoaW50ZXJydXB0ZWQp IHRyYW5zZmVyIHdhcyBhbHNvIGluIGJpbmFyeSBtb2RlLCBvciAoYikKKyAgICAgICAgICBpZiBp dCB3YXMgaW4gdGV4dCBtb2RlLCB0aGUgdHdvIEtlcm1pdCBwcm9ncmFtcyBydW4gb24gcGxhdGZv cm1zCisgICAgICAgICAgd2hlcmUgdGV4dC1tb2RlIHRyYW5zZmVycyBhcmUgbm90IGxlbmd0aC1j aGFuZ2luZy4KKworICAgL1NUQVJUSU5HOm51bWJlcgorICAgICAgICAgIFN0YXJ0cyBzZW5kaW5n IHRoZSBmaWxlIGZyb20gdGhlIGdpdmVuIGJ5dGUgcG9zaXRpb24uIFNFTkQKKyAgICAgICAgICAv U1RBUlRJTkc6biBmaWxlbmFtZSBpcyBlcXVpdmFsZW50IHRvIFBTRU5EIGZpbGVuYW1lIG4uCisK KyAgIC9URVhUCisgICAgICAgICAgUGVyZm9ybXMgdGhpcyB0cmFuc2ZlciBpbiB0ZXh0IG1vZGUg d2l0aG91dCBhZmZlY3RpbmcgdGhlIGdsb2JhbAorICAgICAgICAgIHRyYW5zZmVyIG1vZGUsIG92 ZXJyaWRpbmcgbm90IG9ubHkgdGhlIEZJTEUgVFlQRSBhbmQgVFJBTlNGRVIKKyAgICAgICAgICBN T0RFIHNldHRpbmdzLCBidXQgYWxzbyB0aGUgRklMRSBQQVRURVJOIHNldHRpbmcsIGZvciB0aGlz IFNFTkQKKyAgICAgICAgICBjb21tYW5kIG9ubHkuIEluIG90aGVyIHdvcmRzLCBTRU5EIC9URVhU IHJlYWxseSBzZW5kIHRoZSBmaWxlIGluCisgICAgICAgICAgdGV4dCBtb2RlLCByZWdhcmRsZXNz IG9mIGFueSBvdGhlciBzZXR0aW5ncyBvciBuZWdvdGlhdGlvbnMuCisKKyAgIEFib3V0IG1haWwu Li4gUmVmZXIgdG8gWzQ5NV1TZWN0aW9uIDQuNy4xLiBUaGUgc2FtZSBydWxlcyBhcHBseSBhcyBm b3IKKyAgIGZpbGUgdHJhbnNmZXIuIElmIHlvdSBhcmUgbWFpbGluZyBtdWx0aXBsZSBmaWxlcywg eW91IGNhbid0IHVzZSBhbgorICAgYXMtbmFtZSAoaW4gdGhpcyBjYXNlLCBhIHN1YmplY3QpIHVu bGVzcyBpdCBjb250YWlucyByZXBsYWNlbWVudAorICAgdmFyaWFibGVzIGxpa2UgXHYoZmlsZW51 bSkuIEZvciBleGFtcGxlLCBpZiB5b3U6CisKKyAgc2VuZCAvbWFpbDpzb21lYm9keUB4eXouY29t ICoudHh0CisKKyAgIFRoZW4gZWFjaCBmaWxlIHdpbGwgYXJyaXZlIGFzIGEgc2VwYXJhdGUgZW1h aWwgbWVzc2FnZSB3aXRoIGl0cyBuYW1lIGFzCisgICB0aGUgc3ViamVjdC4gQnV0IGlmIHlvdToK KworICBzZW5kIC9tYWlsOnNvbWVib2R5QHh5ei5jb20gL3N1YmplY3Q6e0hlcmUgaXMgYSBmaWxl fSAqLnR4dAorCisgICBUaGVuIGVhY2ggZmlsZSBtZXNzYWdlIHdpbGwgaGF2ZSB0aGUgc2FtZSBz dWJqZWN0LCB3aGljaCBpcyBwcm9iYWJseQorICAgbm90IHdoYXQgeW91IHdhbnQuIFlvdSBjYW4g Z2V0IGFyb3VuZCB0aGlzIHdpdGggY29uc3RydWN0aW9ucyBsaWtlOgorCisgIHNlbmQgL21haWw6 c29tZWJvZHlAeHl6LmNvbSAvc3ViamVjdDp7SGVyZSBpcyBcdihmaWxlbmFtZSl9ICoudHh0CisK KyAgIHdoaWNoIGVtYmVkIHRoZSBmaWxlbmFtZSBpbiB0aGUgc3ViamVjdC4KKworICAgVGhlIE1P VkUsIENTRU5ELCBNQUlMLCBhbmQgUkVTRU5EIGNvbW1hbmRzIG5vdyBhbHNvIGFjY2VwdCB0aGUg c2FtZQorICAgc3dpdGNoZXMuIEFuZCB0aGUgc3dpdGNoZXMgYXJlIGFsc28gb3BlcmF0aXZlIHdo ZW4gc2VuZGluZyBmcm9tIGEKKyAgIFNFTkQtTElTVCAoc2VlIFs0OTZdVXNpbmcgQy1LZXJtaXQs IDJuZCBFZCwgcHAuMTkxLTE5MiksIHNvLCBmb3IKKyAgIGV4YW1wbGUsIGl0IGlzIG5vdyBwb3Nz aWJsZSB0byBTRU5EIC9QUklOVCBvciBTRU5EIC9NQUlMIGZyb20gYQorICAgU0VORC1MSVNULgor CisgICBUaGUgTVNFTkQgYW5kIE1NT1ZFIGNvbW1hbmRzIGFsc28gdGFrZSBzd2l0Y2hlcywgYnV0 IG5vdCBhbGwgb2YgdGhlbS4KKyAgIFdpdGggdGhlc2UgY29tbWFuZHMsIHdoaWNoIHRha2UgYW4g YXJiaXRyYXJ5IGxpc3Qgb2YgZmlsZXNwZWNzLCB5b3UgY2FuCisgICB1c2UgL0JJTkFSWSwgL0RF TEVURSwgL01BSUwsIC9QUklOVCwgL1BST1RPQ09MLCAvUVVJRVQsIC9SRUNPVkVSLCBhbmQKKyAg IC9URVhUIChhbmQgL0lNQUdFIG9yIC9MQUJFTEVELCBkZXBlbmRpbmcgb24gdGhlIHBsYXRmb3Jt KS4gTU1PVkUgaXMKKyAgIGVxdWl2YWxlbnQgdG8gTVNFTkQgL0RFTEVURS4gKElmIHlvdSB3YW50 IHRvIHNlbmQgYSBncm91cCBvZiBmaWxlcywgYnV0CisgICBpbiBtaXhlZCB0cmFuc2ZlciBtb2Rl cyB3aXRoIHBlci1maWxlIGFzLW5hbWVzLCB1c2UgQUREIFNFTkQtTElTVCBhbmQKKyAgIHRoZW4g U0VORC4pCisKKyAgIFRoZSBNU0VORC9NTU9WRSBzd2l0Y2hlcyBjb21lIGJlZm9yZSB0aGUgZmls ZW5hbWVzLCBhbmQgYXBwbHkgdG8gYWxsIG9mCisgICB0aGVtOgorCisgIG1zZW5kIC9wcmludCAv dGV4dCAqLmxvZyBvb2ZhLnR4dCAvZXRjL21vdGQKKworICAgSWYgeW91IHR5cGUgYW55IG9mIHRo ZXNlIGNvbW1hbmRzIChTRU5ELCBDU0VORCwgTVNFTkQsIGV0YykgZm9sbG93ZWQgYnkKKyAgIGEg cXVlc3Rpb24gbWFyayAoPyksIHlvdSB3aWxsIHNlZSBhIGxpc3Qgb2YgdGhlIHN3aXRjaGVzIHlv dSBjYW4gdXNlLgorICAgSWYgeW91IHdhbnQgdG8gc2VlIGEgbGlzdCBvZiBmaWxlbmFtZXMsIHlv dSdsbCBuZWVkIHRvIHR5cGUgc29tZXRoaW5nCisgICBsaWtlICJzZW5kIC4vPyIgKFVOSVgsIE9T LzIsIFdpbmRvd3MsIGV0YyksIG9yICJzZW5kIFtdPyIgKFZNUyksIGV0Yy4KKyAgIE9mIGNvdXJz ZSwgeW91IGNhbiBhbHNvIHR5cGUgcGllY2VzIG9mIGEgZmlsZW5hbWUgKGFueXRoaW5nIHRoYXQg ZG9lcworICAgbm90IHN0YXJ0IHdpdGggIi8iKSBhbmQgdGhlbiAiPyIgdG8gZ2V0IGEgbGlzdCBv ZiBmaWxlbmFtZXMgdGhhdCBzdGFydAorICAgdGhhdCB3YXk7IGUuZy4gInNlbmQgeC4/IiBzdGls bCB3b3JrcyBhcyBiZWZvcmUuCisKKyAgIEluIFVOSVgsIHdoZXJlICIvIiBpcyBhbHNvIHRoZSBk aXJlY3Rvcnkgc2VwYXJhdG9yLCB0aGVyZSBpcyB1c3VhbGx5IG5vCisgICBhbWJpZ3VpdHkgYmV0 d2VlbiBhIGZ1bGx5LXNwZWNpZmllZCBwYXRobmFtZSBhbmQgYSBzd2l0Y2gsIGV4Y2VwdCB3aGVu CisgICBhIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IGhhcyB0aGUgc2FtZSBuYW1lIGFzIGEg c3dpdGNoIChhcyBub3RlZCBpbgorICAgWzQ5N11TZWN0aW9uIDEuNSk6CisKKyAgc2VuZCAvZXRj L21vdGQgICAgICAgICAgICAgICAgICAgICAgICA7IFdvcmtzIGFzIGV4cGVjdGVkCisgIHNlbmQg L2NvbW1hbmQgICAgICAgICAgICAgICAgICAgICAgICAgOyA/Pz8KKworICAgVGhlIHNlY29uZCBl eGFtcGxlIGludGVycHJldHMgIi9jb21tYW5kIiBhcyBhIHN3aXRjaCwgbm90IGEgZmlsZW5hbWUu CisgICBUbyBzZW5kIGEgZmlsZSBhY3R1YWxseSBjYWxsZWQgImNvbW1hbmQiIGluIHRoZSByb290 IGRpcmVjdG9yeSwgdXNlOgorCisgIHNlbmQgey9jb21tYW5kfQorCisgICBvciBvdGhlciBzeXN0 ZW0tZGVwZW5kZW50IGZvcm1zIHN1Y2ggYXMgLy9jb21tYW5kLCAvLi9jb21tYW5kLAorICAgYzov Y29tbWFuZCwgZXRjLCBvciBjZCB0byAvIGFuZCB0aGVuICJzZW5kIGNvbW1hbmQiLgorCis0Ljcu Mi4gR0VUIENvbW1hbmQgU3dpdGNoZXMKKworICAgV2l0aG91dCBzd2l0Y2hlcywgdGhlIEdFVCBj b21tYW5kIHN0aWxsIHdvcmtzIGFib3V0IHRoZSBzYW1lIGFzIGJlZm9yZToKKworICBnZXQgb29m YS50eHQgICAgICAgICAgICAgICAgICAgICAgICAgIDsgR0VUIGEgc2luZ2xlIGZpbGUKKyAgZ2V0 IG9vZmEuKiAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IEdFVCBtdWx0aXBsZSBmaWxlcwor CisgICBIb3dldmVyLCB0aGUgbWVjaGFuaXNtIGZvciBpbmNsdWRpbmcgYW4gImFzLW5hbWUiIGhh cyBjaGFuZ2VkLgorICAgUHJldmlvdXNseSwgaW4gb3JkZXIgdG8gaW5jbHVkZSBhbiBhcy1uYW1l LCB5b3Ugd2VyZSByZXF1aXJlZCB0byB1c2UKKyAgIHRoZSAibXVsdGlsaW5lIiBmb3JtIG9mIEdF VDoKKworICBnZXQKKyAgcmVtb3RlLWZpbGVzcGVjCisgIGxvY2FsLW5hbWUKKworICAgVGhpcyB3 YXMgYmVjYXVzZSB0aGUgcmVtb3RlIGZpbGVzcGVjIG1pZ2h0IGNvbnRhaW4gc3BhY2VzLCBhbmQg c28gdGhlcmUKKyAgIHdvdWxkIGJlIG5vIGdvb2Qgd2F5IG9mIHRlbGxpbmcgd2hlcmUgaXQgZW5k ZWQgYW5kIHdoZXJlIHRoZSBsb2NhbCBuYW1lCisgICBiZWdhbiwgZS5nOgorCisgIGdldCBwcm9m aWxlIGV4ZWMgYSBmb28KKworICAgQnV0IG5vdyBzaW5jZSB3ZSBjYW4gdXNlIHticmFjZXN9IGZv ciBncm91cGluZywgd2UgZG9uJ3QgbmVlZCB0aGUKKyAgIG11bHRpbGluZSBHRVQgZm9ybSBhbnkg bW9yZSwgYW5kIGluIGZhY3QsIHN1cHBvcnQgZm9yIGl0IGhhcyBiZWVuCisgICByZW1vdmVkLiBJ ZiB5b3UgZ2l2ZSBhIEdFVCBjb21tYW5kIGJ5IGl0c2VsZiBvbiBhIGxpbmUsIGl0IGZhaWxzIGFu ZCBhbgorICAgZXJyb3IgbWVzc2FnZSBpcyBwcmludGVkLiBUaGUgbmV3IGZvcm0gaXM6CisKKyAg IEdFVCBbIHN3aXRjaGVzLi4uIF0gcmVtb3RlLW5hbWUgWyBsb2NhbC1uYW1lIF0KKyAgICAgICAg ICBBc2sgdGhlIHNlcnZlciB0byBzZW5kIHRoZSBmaWxlIHdob3NlIG5hbWUgaXMgcmVtb3RlLW5h bWUuIElmCisgICAgICAgICAgdGhlIG9wdGlvbmFsIGxvY2FsLW5hbWUgaXMgZ2l2ZW4sIHN0b3Jl IGl0IGxvY2FsbHkgdW5kZXIgdGhpcworICAgICAgICAgIG5hbWUuIElmIHRoZSByZW1vdGUtbmFt ZSBvciBsb2NhbC1uYW1lIGNvbnRhaW5zIHNwYWNlcywgdGhleQorICAgICAgICAgIG11c3QgYmUg ZW5jbG9zZWQgaW4gYnJhY2VzOgorCisgIGdldCB7cHJvZmlsZSBleGVjIGF9IGZvbworICBnZXQg b29mYS50eHQge34vTXkgRmlsZXMvT29mYSB0ZXh0fQorCisgICBJZiB5b3Ugd2FudCB0byBnaXZl IGEgbGlzdCBvZiByZW1vdGUgZmlsZSBzcGVjaWZpY2F0aW9ucywgdXNlIHRoZSBNR0VUCisgICBj b21tYW5kOgorCisgICBNR0VUIFsgc3dpdGNoZXMuLi4gXSByZW1vdGUtbmFtZSBbIHJlbW90ZS1u YW1lIFsgcmVtb3RlLW5hbWUgLi4uIF0gXQorICAgICAgICAgIEFzayB0aGUgc2VydmVyIHRvIHNl bmQgdGhlIGZpbGVzIHdob3NlIG5hbWVzIGFyZSBnaXZlbi4KKworICAgTm93IHlvdSBjYW4gYWxz byBpbmNsdWRlIG1vZGlmaWVyIHN3aXRjaGVzIGJldHdlZW4gR0VUIG9yIE1HRVQgYW5kIHRoZQor ICAgcmVtb3RlLW5hbWU7IG1vc3Qgb2YgdGhlIHNhbWUgc3dpdGNoZXMgYXMgU0VORDoKKworICAg L0FTLU5BTUU6dGV4dAorICAgICAgICAgIFNwZWNpZmllcyAidGV4dCIgYXMgdGhlIG5hbWUgdG8g c3RvcmUgdGhlIGluY29taW5nIGZpbGUgdW5kZXIuCisgICAgICAgICAgKFRoaXMgc3dpdGNoIGlz IG5vdCBhdmFpbGFibGUgZm9yIE1HRVQuKSBZb3UgY2FuIGFsc28gc3RpbGwKKyAgICAgICAgICBz cGVjaWZ5IHRoZSBhcy1uYW1lIGFzIHRoZSBzZWNvbmQgZmlsZW5hbWUgb24gdGhlIEdFVCBjb21t YW5kCisgICAgICAgICAgbGluZS4gVGhlIGZvbGxvd2luZyB0d28gY29tbWFuZHMgYXJlIGVxdWl2 YWxlbnQ6CisKKyAgZ2V0IG9vZmEudHh0IG9vZmEubmV3CisgIGdldCAvYXM6b29mYS5uZXcgb29m YS50eHQKKworICAgL0JJTkFSWQorICAgICAgICAgIFRlbGxzIHRoZSBzZXJ2ZXIgdG8gc2VuZCB0 aGUgZ2l2ZW4gZmlsZShzKSBpbiBiaW5hcnkgbW9kZQorICAgICAgICAgIHdpdGhvdXQgYWZmZWN0 aW5nIHRoZSBnbG9iYWwgdHJhbnNmZXIgbW9kZS4gRXhhbXBsZToKKworICBzZXQgZmlsZSB0eXBl IHRleHQgICAgICA7IFNldCBnbG9iYWwgdHJhbnNmZXIgbW9kZSB0byB0ZXh0CisgIGdldCAvYmlu YXJ5IG9vZmEuemlwICAgIDsgZ2V0IGEgZmlsZSBpbiBiaW5hcnkgbW9kZQorICBnZXQgb29mYS50 eHQgICAgICAgICAgICA7IFRoaXMgb25lIGlzIHRyYW5zZmVycmVkIGluIHRleHQgbW9kZQorCisg ICAgICAgICAgT3IsIHBlcmhhcHMgbW9yZSB0byB0aGUgcG9pbnQ6CisKKyAgZ2V0IC9iaW5hcnkg Zm9vLnR4dCAgICAgOyB3aGVyZSAiKi50eHQiIGlzIGEgdGV4dC1wYXR0ZXJuCisKKyAgICAgICAg ICBUaGlzIGhhcyB0aGUgZXhwZWN0ZWQgZWZmZWN0IG9ubHkgaWYgdGhlIHNlcnZlciBpcyBDLUtl cm1pdCA3LjAKKyAgICAgICAgICBvciBsYXRlciBvciBLOTUgMS4xLjE5IG9yIGxhdGVyLgorCisg ICAvQ09NTUFORAorICAgICAgICAgIEdFVCAvQ09NTUFORCBpcyBlcXVpdmFsZW50IHRvIENHRVQg KFs0OThdU2VjdGlvbiA0LjIuMikgLS0gaXQKKyAgICAgICAgICBzYXlzIHRvIHJlY2VpdmUgdGhl IGZpbGUgaW50byB0aGUgc3RhbmRhcmQgaW5wdXQgb2YgYSBjb21tYW5kLAorICAgICAgICAgIHJh dGhlciB0aGFuIHNhdmluZyBpdCBvbiBkaXNrLiBUaGUgL0FTLU5BTUUgb3IgdGhlIHNlY29uZAor ICAgICAgICAgICJmaWxlbmFtZSIgb24gdGhlIEdFVCBjb21tYW5kIGxpbmUgaXMgaW50ZXJwcmV0 ZWQgYXMgdGhlIG5hbWUgb2YKKyAgICAgICAgICBhIGNvbW1hbmQuIEV4YW1wbGVzOgorCisgIGdl dCAvY29tbWFuZCBzdW5kYXkudHh0IHtncmVwIFN1bmRheSBvb2ZhLnR4dH0KKyAgZ2V0IC9jb21t YW5kIC9hcy1uYW1lOntncmVwIFN1bmRheSBvb2ZhLnR4dH0gc3VuZGF5LnR4dAorICBnZXQgL2Jp biAvY29tbWFuZCB7IWd1bnppcCAtYyB8IHRhciB4ZiAtfSB7dGFyIGNmIC0gLiB8IGd6aXAgLWN9 CisKKyAgIC9ERUxFVEUKKyAgICAgICAgICBBc2tzIHRoZSBLZXJtaXQgc2VydmVyIHRvIGRlbGV0 ZSB0aGUgZmlsZSAob3IgZWFjaCBmaWxlIGluIHRoZQorICAgICAgICAgIGdyb3VwKSBhZnRlciBp dCBoYXMgYmVlbiB0cmFuc2ZlcnJlZCBzdWNjZXNzZnVsbHkgKGJ1dCBub3QgdG8KKyAgICAgICAg ICBkZWxldGUgaXQgaWYgaXQgd2FzIG5vdCBzZW50IHN1Y2Nlc3NmdWxseSkuIEdFVCAvREVMRVRF IGlzCisgICAgICAgICAgZXF1aXZhbGVudCB0byBSRVRSSUVWRS4gRXhhbXBsZToKKworICBnZXQg L2RlbGV0ZSAqLmxvZworCisgICAvRVhDRVBUOnBhdHRlcm4KKyAgICAgICAgICBTcGVjaWZpZXMg dGhhdCBhbnkgZmlsZXMgd2hvc2UgbmFtZXMgbWF0Y2ggdGhlIHBhdHRlcm4sIHdoaWNoCisgICAg ICAgICAgY2FuIGJlIGEgcmVndWxhciBmaWxlbmFtZSwgb3IgbWF5IGNvbnRhaW4gIioiIGFuZC9v ciAiPyIKKyAgICAgICAgICBtZXRhY2hhcmFjdGVycywgYXJlIHRvIGJlIHJlZnVzZWQgdXBvbiBh cnJpdmFsLiBUbyBzcGVjaWZ5CisgICAgICAgICAgbXVsdGlwbGUgcGF0dGVybnMgKHVwIHRvIDgp LCB1c2Ugb3V0ZXIgYnJhY2VzIGFyb3VuZCB0aGUgZ3JvdXAsCisgICAgICAgICAgYW5kIGlubmVy IGJyYWNlcyBhcm91bmQgZWFjaCBwYXR0ZXJuOgorCisgIC9FWENFUFQ6e3twYXR0ZXJuMX17cGF0 dGVybjJ9Li4ufQorCisgICAgICAgICAgU2VlIHRoZSBkZXNjcmlwdGlvbiBvZiBTRU5EIC9FWENF UFQgaW4gWzQ5OV1TZWN0aW9uIDQuNy4xIGZvcgorICAgICAgICAgIGV4YW1wbGVzLCBldGMuIFJl ZnVzYWwgaXMgYWNjb21wbGlzaGVkIHVzaW5nIHRoZSBBdHRyaWJ1dGUKKyAgICAgICAgICBSZWpl Y3Rpb24gbWVjaGFuaXNtIChyZWFzb24gIm5hbWUiKSwgd2hpY2ggd29ya3Mgb25seSB3aGVuCisg ICAgICAgICAgQXR0cmlidXRlIHBhY2tldHMgaGF2ZSBiZWVuIHN1Y2Nlc3NmdWxseSBuZWdvdGlh dGVkLgorCisgICAvRklMRU5BTUVTOntDT05WRVJURUQsTElURVJBTH0KKyAgICAgICAgICBVc2Ug dGhpcyBzd2l0Y2ggdG8gb3ZlcnJpZGUgdGhlIGN1cnJlbnQgZ2xvYmFsIFNFVCBGSUxFIE5BTUVT CisgICAgICAgICAgc2V0dGluZyBmb3IgdGhpcyB0cmFuc2ZlciBvbmx5LgorCisgICAvRklMVEVS OmNvbW1hbmQKKyAgICAgICAgICBUaGlzIHNwZWNpZmllcyBhIGZpbHRlciB0byBwYXNzIHRoZSBp bmNvbWluZyBmaWxlIHRocm91Z2ggYmVmb3JlCisgICAgICAgICAgd3JpdGluZyB0byBkaXNrLiBT ZWUgdGhlIFs1MDBdc2VjdGlvbiBvbiBmaWxlLXRyYW5zZmVyIHBpcGVzIGFuZAorICAgICAgICAg IGZpbHRlcnMuIFRoZSAvRklMVEVSIHN3aXRjaCBhcHBsaWVzIG9ubHkgdG8gdGhlIGZpbGUtdHJh bnNmZXIKKyAgICAgICAgICBjb21tYW5kIGl0IGlzIGdpdmVuIHdpdGg7IGl0IGRvZXMgbm90IGFm ZmVjdCB0aGUgZ2xvYmFsIFJFQ0VJVkUKKyAgICAgICAgICBGSUxURVIgc2V0dGluZywgaWYgYW55 LgorCisgICAvSU1BR0UKKyAgICAgICAgICBWTVM6IFRyYW5zZmVyIGluIGltYWdlIG1vZGUuIE5v bi1WTVM6IHNhbWUgYXMgL0JJTkFSWS4KKworICAgL0xBQkVMRUQKKyAgICAgICAgICBWTVMgYW5k IE9TLzIgb25seTogU3BlY2lmaWVzIGxhYmVsZWQgdHJhbnNmZXIgbW9kZS4KKworICAgL01PVkUt VE86ZGlyZWN0b3J5CisgICAgICAgICAgVGhpcyB0ZWxscyBDLUtlcm1pdCB0byBtb3ZlIGVhY2gg ZmlsZSB0aGF0IGlzIHN1Y2Nlc3NmdWxseQorICAgICAgICAgIHJlY2VpdmVkIHRvIHRoZSBnaXZl biBkaXJlY3RvcnkuIEZpbGVzIHRoYXQgYXJlIG5vdCBzdWNjZXNzZnVsbHkKKyAgICAgICAgICBy ZWNlaXZlZCBhcmUgbm90IG1vdmVkLiBCeSBkZWZhdWx0LCBmaWxlcyBhcmUgbm90IG1vdmVkLgor CisgICAvUEFUSE5BTUVTOntPRkYsQUJTT0xVVEUsUkVMQVRJVkUsQVVUT30KKyAgICAgICAgICBV c2UgdGhpcyBzd2l0Y2ggdG8gb3ZlcnJpZGUgdGhlIGN1cnJlbnQgZ2xvYmFsIFNFVCBSRUNFSVZF CisgICAgICAgICAgUEFUSE5BTUVTIHNldHRpbmcgZm9yIHRoaXMgdHJhbnNmZXIgb25seS4gL1BB VEhOQU1FUzpBQlNPTFVURSBvcgorICAgICAgICAgIFJFTEFUSVZFIGFsc28gc2V0cyAvRklMRU5B TUVTOkxJVEVSQUwgKGFsc28gZm9yIHRoaXMgdHJhbnNmZXIKKyAgICAgICAgICBvbmx5KSBzaW5j ZSBpbmNvbWluZyBwYXRobmFtZXMgd291bGQgbm90IGJlIHRyZWF0ZWQgYXMgcGF0aG5hbWVzCisg ICAgICAgICAgb3RoZXJ3aXNlLiBTZWUgWzUwMV1TZWN0aW9uIDQuMTAuCisKKyAgIC9RVUlFVAor ICAgICAgICAgIFdoZW4gc2VuZGluZyBpbiBsb2NhbCBtb2RlLCB0aGlzIHN1cHByZXNzZXMgdGhl IGZpbGUtdHJhbnNmZXIKKyAgICAgICAgICBkaXNwbGF5LgorCisgICAvUkVDT1ZFUgorICAgICAg ICAgIFVzZWQgdG8gcmVjb3ZlciBmcm9tIGEgcHJldmlvdXNseSBpbnRlcnJ1cHRlZCB0cmFuc2Zl cjsgR0VUCisgICAgICAgICAgL1JFQ09WRVIgaXMgZXF1aXZhbGVudCB0byBSRUdFVC4gUmVjb3Zl cnkgb25seSB3b3JrcyBpbiBiaW5hcnkKKyAgICAgICAgICBtb2RlOyBTRU5EIC9SRUNPVkVSIGFu ZCBSRVNFTkQgaW5jbHVkZSBhbiBpbXBsaWVkIC9CSU5BUlkKKyAgICAgICAgICBzd2l0Y2guIEV2 ZW4gdGhlbiwgcmVjb3Zlcnkgd2lsbCBzdWNjZXNzZnVsIG9ubHkgaWYgKGEpIHRoZQorICAgICAg ICAgIG9yaWdpbmFsIChpbnRlcnJ1cHRlZCkgdHJhbnNmZXIgd2FzIGFsc28gaW4gYmluYXJ5IG1v ZGUsIG9yIChiKQorICAgICAgICAgIGlmIGl0IHdhcyBpbiB0ZXh0IG1vZGUsIHRoZSB0d28gS2Vy bWl0IHByb2dyYW1zIHJ1biBvbiBwbGF0Zm9ybXMKKyAgICAgICAgICB3aGVyZSB0ZXh0LW1vZGUg dHJhbnNmZXJzIGFyZSBub3QgbGVuZ3RoLWNoYW5naW5nLgorCisgICAvUkVDVVJTSVZFCisgICAg ICAgICAgVGVsbHMgdGhlIHNlcnZlciB0aGF0IHRoZSBHRVQgZmlsZSBzcGVjaWZpY2F0aW9uIGFw cGxpZXMKKyAgICAgICAgICByZWN1cnNpdmVseS4gVGhpcyBzd2l0Y2ggYWxzbyBhdXRvbWF0aWNh bGx5IHNldHMKKyAgICAgICAgICAvUEFUSE5BTUVTOlJFTEFUSVZFIGluIGJvdGggdGhlIHNlcnZl ciBBTkQgdGhlIGNsaWVudC4gV2hlbiB1c2VkCisgICAgICAgICAgaW4gY29uanVuY3Rpb24gd2l0 aCAvREVMRVRFLCB0aGlzICJtb3ZlcyIgYSBkaXJlY3RvcnkgdHJlZSBmcm9tCisgICAgICAgICAg dGhlIHNlcnZlcidzIGNvbXB1dGVyIHRvIHRoZSBjbGllbnQncyBjb21wdXRlciAoZXhjZXB0IHRo YXQgb25seQorICAgICAgICAgIHJlZ3VsYXIgZmlsZXMgYXJlIGRlbGV0ZWQgZnJvbSB0aGUgc2Vy dmVyJ3MgY29tcHV0ZXIsIG5vdAorICAgICAgICAgIGRpcmVjdG9yaWVzOyB0aHVzIHRoZSBvcmln aW5hbCBkaXJlY3RvcmllcyB3aWxsIGJlIGxlZnQsIGJ1dAorICAgICAgICAgIHdpbGwgY29udGFp biBubyBmaWxlcykuIE5vdGUgdGhhdCBhbGwgc2VydmVycyB0aGF0IHN1cHBvcnQKKyAgICAgICAg ICAvUkVDVVJTSVZFIGRvIG5vdCBuZWNlc3NhcmlseSBkbyBzbyBpbiBjb21iaW5hdGlvbiB3aXRo IG90aGVyCisgICAgICAgICAgc3dpdGNoZXMsIHN1Y2ggYXMgL1JFQ09WRVIuIChTZXJ2ZXJzIHRo YXQgZG8gaW5jbHVkZSBDLUtlcm1pdAorICAgICAgICAgIDcuMCBhbmQgbGF0ZXIsIEs5NSAxLjEu MTkgYW5kIGxhdGVyLikKKworICAgL1JFTkFNRS1UTzpzdHJpbmcKKyAgICAgICAgICBUaGlzIHRl bGxzIEMtS2VybWl0IHRvIHJlbmFtZSBlYWNoIGZpbGUgdGhhdCBpcyBzdWNjZXNzZnVsbHkKKyAg ICAgICAgICByZWNlaXZlZCB0byB0aGUgZ2l2ZW4gc3RyaW5nLiBGaWxlcyB0aGF0IGFyZSBub3Qg c3VjY2Vzc2Z1bGx5CisgICAgICAgICAgcmVjZWl2ZWQgYXJlIG5vdCByZW5hbWVkLiBCeSBkZWZh dWx0LCBmaWxlcyBhcmUgbm90IHJlbmFtZWQuIFRoZQorICAgICAgICAgIHN0cmluZyBjYW4gYmUg YSBsaXRlcmFsIHN0cmluZywgd2hpY2ggaXMgYXBwcm9wcmlhdGUgd2hlbiBvbmx5CisgICAgICAg ICAgb25lIGZpbGUgaXMgYmVpbmcgcmVjZWl2ZWQsIG9yIGl0IGNhbiBjb250YWluIG9uZSBvciBt b3JlCisgICAgICAgICAgdmFyaWFibGVzIHRoYXQgYXJlIHRvIGJlIGV2YWx1YXRlZCBhdCB0aGUg dGltZSBlYWNoIGZpbGUgaXMKKyAgICAgICAgICByZWNlaXZlZCwgc3VjaCBhcyBcdihmaWxlbmFt ZSksIFx2KGZpbGVudW1iZXIpLCBcdihudGltZSksCisgICAgICAgICAgXHYocGlkKSwgXHYodXNl ciksIGV0Yy4gV0FSTklORzogaWYgeW91IGdpdmUgYSBsaXRlcmFsIHN0cmluZworICAgICAgICAg IGFuZCBtb3JlIHRoYW4gb25lIGZpbGUgYXJyaXZlcywgZWFjaCBpbmNvbWluZyBmaWxlIHdpbGwg YmUgZ2l2ZW4KKyAgICAgICAgICB0aGUgc2FtZSBuYW1lIChidXQgU0VUIEZJTEUgQ09MTElTSU9O IEJBQ0tVUCBvciBSRU5BTUUgY2FuIGJlCisgICAgICAgICAgdXNlZCB0byBrZWVwIHRoZSBpbmNv bWluZyBmaWxlcyBmcm9tIG92ZXJ3cml0aW5nIGVhY2ggb3RoZXIpLgorCisgICAvVEVYVAorICAg ICAgICAgIFRlbGxzIHRoZSBzZXJ2ZXIgdG8gcGVyZm9ybSB0aGlzIHRyYW5zZmVyIGluIHRleHQg bW9kZSB3aXRob3V0CisgICAgICAgICAgYWZmZWN0aW5nIGl0cyBnbG9iYWwgdHJhbnNmZXIgbW9k ZS4gU2VlIC9CSU5BUlkgZm9yIGFkZGl0aW9uYWwKKyAgICAgICAgICBpbmZvLgorCisgICBUaGUg L01BSUwgYW5kIC9QUklOVCBvcHRpb25zIGFyZSBub3QgYXZhaWxhYmxlIChhcyB0aGV5IGFyZSBm b3IgU0VORCksCisgICBidXQgeW91IGNhbiB1c2UgL0NPTU1BTkQgdG8gYWNoaWV2ZSB0aGUgc2Ft ZSBlZmZlY3QsIGFzIGluIHRoZXNlIFVOSVgKKyAgIGV4YW1wbGVzOgorCisgIGdldCAvY29tbWFu ZCBvb2ZhLnR4dCB7bWFpbCBrZXJtaXRAY29sdW1iaWEuZWR1fQorICBnZXQgL2NvbW1hbmQgb29m YS50eHQgbHByCisKKyAgIEluIE9TLzIgb3IgV2luZG93cywgeW91IGNhbiBHRVQgYW5kIHByaW50 IGxpa2UgdGhpczoKKworICBnZXQgb29mYS50eHQgcHJuCisKKyAgIFRoZSBDR0VULCBSRUdFVCwg UkVUUklFVkUgY29tbWFuZHMgYWxzbyBhY2NlcHQgdGhlIHNhbWUgc3dpdGNoZXMgYXMKKyAgIEdF VC4gQ0dFVCBhdXRvbWF0aWNhbGx5IHNldHMgL0NPTU1BTkQ7IFJFR0VUIGF1dG9tYXRpY2FsbHkg c2V0cworICAgL1JFQ09WRVIgYW5kIC9CSU5BUlksIGFuZCBSRVRSSUVWRSBhdXRvbWF0aWNhbGx5 IHNldHMgL0RFTEVURS4KKworNC43LjMuIFJFQ0VJVkUgQ29tbWFuZCBTd2l0Y2hlcworCisgICBX aXRob3V0IHN3aXRjaGVzLCB0aGUgUkVDRUlWRSBjb21tYW5kIHN0aWxsIHdvcmtzIGFzIGJlZm9y ZToKKworICByZWNlaXZlICAgICAgICAgICAgOyBSZWNlaXZlcyBmaWxlcyB1bmRlciB0aGVpciBv d24gbmFtZXMKKyAgcmVjZWl2ZSAvdG1wICAgICAgIDsgRGl0dG8sIGJ1dCBpbnRvIHRoZSAvdG1w IGRpcmVjdG9yeQorICByICAgICAgICAgICAgICAgICAgOyBTYW1lIGFzICJyZWNlaXZlIgorICBy ZWNlaXZlIGZvby50eHQgICAgOyBSZWNlaXZlcyBhIGZpbGUgYW5kIHJlbmFtZXMgdG8gZm9vLnR4 dAorCisgICBOb3cgeW91IGNhbiBhbHNvIGluY2x1ZGUgbW9kaWZpZXIgc3dpdGNoZXMgbWF5IGJl IGluY2x1ZGVkIGJldHdlZW4KKyAgICJyZWNlaXZlIiBhbmQgdGhlIGFzLW5hbWU7IG1vc3Qgb2Yg dGhlIHNhbWUgc3dpdGNoZXMgYXMgR0VUOgorCisgICAvQVMtTkFNRTp0ZXh0CisgICAgICAgICAg U3BlY2lmaWVzICJ0ZXh0IiBhcyB0aGUgbmFtZSB0byBzdG9yZSB0aGUgaW5jb21pbmcgZmlsZSB1 bmRlci4KKyAgICAgICAgICBZb3UgY2FuIGFsc28gc3RpbGwgc3BlY2lmeSB0aGUgYXMtbmFtZSBh cyBhIGZpbGVuYW1lIG9uIHRoZQorICAgICAgICAgIGNvbW1hbmQgbGluZS4gVGhlIGZvbGxvd2lu ZyB0d28gY29tbWFuZHMgYXJlIGVxdWl2YWxlbnQ6CisKKyAgciBvb2ZhLm5ldworICByIC9hczpv b2ZhLm5ldworCisgICAvQklOQVJZCisgICAgICAgICAgUGVyZm9ybXMgdGhpcyB0cmFuc2ZlciBp biBiaW5hcnkgbW9kZSB3aXRob3V0IGFmZmVjdGluZyB0aGUKKyAgICAgICAgICBnbG9iYWwgdHJh bnNmZXIgbW9kZS4gTk9URTogVGhpcyBkb2VzIG5vdCBvdmVycmlkZSB0aGUgaW5jb21pbmcKKyAg ICAgICAgICBmaWxldHlwZSAoYXMgaXQgZG9lcyB3aXRoIEdFVCksIHNvIHRoaXMgc3dpdGNoIGlz IHVzZWZ1bCBvbmx5IGlmCisgICAgICAgICAgQVRUUklCVVRFIFRZUEUgaXMgT0ZGLCBvciBpZiB0 aGUgb3RoZXIgS2VybWl0IGRvZXMgbm90IHNlbmQgYQorICAgICAgICAgIFRZUEUgKHRleHQgb3Ig YmluYXJ5KSBhdHRyaWJ1dGUuIEluIGFueSBjYXNlLCBpdCBoYXMgbm8gYWZmZWN0CisgICAgICAg ICAgd2hhdHNvZXZlciBvbiB0aGUgZmlsZSBzZW5kZXIuCisKKyAgIC9DT01NQU5ECisgICAgICAg ICAgUkVDRUlWRSAvQ09NTUFORCBpcyBlcXVpdmFsZW50IHRvIENSRUNFSVZFIChbNTAyXVNlY3Rp b24gNC4yLjIpCisgICAgICAgICAgLS0gaXQgc2F5cyB0byByZWNlaXZlIHRoZSBmaWxlIGludG8g dGhlIHN0YW5kYXJkIGlucHV0IG9mIGEKKyAgICAgICAgICBjb21tYW5kLCByYXRoZXIgdGhhbiBz YXZpbmcgaXQgb24gZGlzay4gVGhlIC9BUy1OQU1FIG9yIHRoZQorICAgICAgICAgICJmaWxlbmFt ZSIgb24gdGhlIFJFQ0VJVkUgY29tbWFuZCBsaW5lIGlzIGludGVycHJldGVkIGFzIHRoZQorICAg ICAgICAgIG5hbWUgb2YgYSBjb21tYW5kLgorCisgIHIgL2NvbW1hbmQge2dyZXAgU3VuZGF5IG9v ZmEudHh0fQorICByIC9jb21tYW5kIC9hcy1uYW1lOntncmVwIFN1bmRheSBvb2ZhLnR4dH0KKyAg ciAvYmluIC9jb21tYW5kIHt0YXIgY2YgLSAuIHwgZ3ppcCAtY30KKworICAgL0VYQ0VQVDpwYXR0 ZXJuCisgICAgICAgICAgU3BlY2lmaWVzIHRoYXQgYW55IGZpbGVzIHdob3NlIG5hbWVzIG1hdGNo IHRoZSBwYXR0ZXJuLCB3aGljaAorICAgICAgICAgIGNhbiBiZSBhIHJlZ3VsYXIgZmlsZW5hbWUs IG9yIG1heSBjb250YWluICIqIiBhbmQvb3IgIj8iCisgICAgICAgICAgbWV0YWNoYXJhY3RlcnMs IGFyZSB0byBiZSByZWZ1c2VkIHVwb24gYXJyaXZhbC4gVG8gc3BlY2lmeQorICAgICAgICAgIG11 bHRpcGxlIHBhdHRlcm5zICh1cCB0byA4KSwgdXNlIG91dGVyIGJyYWNlcyBhcm91bmQgdGhlIGdy b3VwLAorICAgICAgICAgIGFuZCBpbm5lciBicmFjZXMgYXJvdW5kIGVhY2ggcGF0dGVybjoKKwor ICAvRVhDRVBUOnt7cGF0dGVybjF9e3BhdHRlcm4yfS4uLn0KKworICAgICAgICAgIFNlZSB0aGUg ZGVzY3JpcHRpb24gb2YgU0VORCAvRVhDRVBUIGluIFs1MDNdU2VjdGlvbiA0LjcuMSBmb3IKKyAg ICAgICAgICBleGFtcGxlcywgZXRjLiBSZWZ1c2FsIGlzIGFjY29tcGxpc2hlZCB1c2luZyB0aGUg QXR0cmlidXRlCisgICAgICAgICAgUmVqZWN0aW9uIG1lY2hhbmlzbSAocmVhc29uICJuYW1lIiks IHdoaWNoIHdvcmtzIG9ubHkgd2hlbgorICAgICAgICAgIEF0dHJpYnV0ZSBwYWNrZXRzIGhhdmUg YmVlbiBzdWNjZXNzZnVsbHkgbmVnb3RpYXRlZC4KKworICAgL0ZJTEVOQU1FUzp7Q09OVkVSVEVE LExJVEVSQUx9CisgICAgICAgICAgVXNlIHRoaXMgc3dpdGNoIHRvIG92ZXJyaWRlIHRoZSBjdXJy ZW50IGdsb2JhbCBTRVQgRklMRSBOQU1FUworICAgICAgICAgIHNldHRpbmcgZm9yIHRoaXMgdHJh bnNmZXIgb25seS4KKworICAgL0ZJTFRFUjpjb21tYW5kCisgICAgICAgICAgVGhpcyBzcGVjaWZp ZXMgYSBmaWx0ZXIgdG8gcGFzcyB0aGUgaW5jb21pbmcgZmlsZSB0aHJvdWdoIGJlZm9yZQorICAg ICAgICAgIHdyaXRpbmcgdG8gZGlzay4gU2VlIHRoZSBbNTA0XXNlY3Rpb24gb24gZmlsZS10cmFu c2ZlciBwaXBlcyBhbmQKKyAgICAgICAgICBmaWx0ZXJzLiBUaGUgL0ZJTFRFUiBzd2l0Y2ggYXBw bGllcyBvbmx5IHRvIHRoZSBmaWxlLXRyYW5zZmVyCisgICAgICAgICAgY29tbWFuZCBpdCBpcyBn aXZlbiB3aXRoOyBpdCBkb2VzIG5vdCBhZmZlY3QgdGhlIGdsb2JhbCBSRUNFSVZFCisgICAgICAg ICAgRklMVEVSIHNldHRpbmcsIGlmIGFueS4KKworICAgL0lNQUdFCisgICAgICAgICAgVk1TOiBU cmFuc2ZlciBpbiBpbWFnZSBtb2RlLiBOb24tVk1TOiBzYW1lIGFzIC9CSU5BUlkuIFNlZQorICAg ICAgICAgIGNvbW1lbnRzIHVuZGVyIFJFQ0VJVkUgL0JJTkFSWS4KKworICAgL0xBQkVMRUQKKyAg ICAgICAgICBWTVMgYW5kIE9TLzIgb25seTogU3BlY2lmaWVzIGxhYmVsZWQgdHJhbnNmZXIgbW9k ZS4gU2VlIGNvbW1lbnRzCisgICAgICAgICAgdW5kZXIgUkVDRUlWRSAvQklOQVJZLgorCisgICAv TU9WRS1UTzpkaXJlY3RvcnkKKyAgICAgICAgICBUaGlzIHRlbGxzIEMtS2VybWl0IHRvIG1vdmUg ZWFjaCBmaWxlIHRoYXQgaXMgc3VjY2Vzc2Z1bGx5CisgICAgICAgICAgcmVjZWl2ZWQgdG8gdGhl IGdpdmVuIGRpcmVjdG9yeS4gRmlsZXMgdGhhdCBhcmUgbm90IHN1Y2Nlc3NmdWxseQorICAgICAg ICAgIHJlY2VpdmVkIGFyZSBub3QgbW92ZWQuIEJ5IGRlZmF1bHQsIGZpbGVzIGFyZSBub3QgbW92 ZWQuCisKKyAgIC9QQVRITkFNRVM6e0FCU09MVVRFLFJFTEFUSVZFLE9GRixBVVRPfQorICAgICAg ICAgIFVzZSB0aGlzIHN3aXRjaCB0byBvdmVycmlkZSB0aGUgY3VycmVudCBnbG9iYWwgU0VUIFJF Q0VJVkUKKyAgICAgICAgICBQQVRITkFNRVMgc2V0dGluZyBmb3IgdGhpcyB0cmFuc2ZlciBvbmx5 LiBTZWUgWzUwNV1TZWN0aW9uIDQuMTAuCisKKyAgIC9SRUNVUlNJVkUKKyAgICAgICAgICBXaGVu IHVzZWQgd2l0aCB0aGUgUkVDRUlWRSBjb21tYW5kLCAvUkVDVVJTSVZFIGlzIHNpbXBseSBhCisg ICAgICAgICAgc3lub255bSBmb3IgL1BBVEhOQU1FUzpSRUxBVElWRS4KKworICAgL1JFTkFNRS1U TzpzdHJpbmcKKyAgICAgICAgICBUaGlzIHRlbGxzIEMtS2VybWl0IHRvIHJlbmFtZSBlYWNoIGZp bGUgdGhhdCBpcyBzdWNjZXNzZnVsbHkKKyAgICAgICAgICByZWNlaXZlZCB0byB0aGUgZ2l2ZW4g c3RyaW5nLiBGaWxlcyB0aGF0IGFyZSBub3Qgc3VjY2Vzc2Z1bGx5CisgICAgICAgICAgcmVjZWl2 ZWQgYXJlIG5vdCByZW5hbWVkLiBCeSBkZWZhdWx0LCBmaWxlcyBhcmUgbm90IHJlbmFtZWQuIFRo ZQorICAgICAgICAgIHN0cmluZyBjYW4gYmUgYSBsaXRlcmFsIHN0cmluZywgd2hpY2ggaXMgYXBw cm9wcmlhdGUgd2hlbiBvbmx5CisgICAgICAgICAgb25lIGZpbGUgaXMgYmVpbmcgcmVjZWl2ZWQs IG9yIGl0IGNhbiBjb250YWluIG9uZSBvciBtb3JlCisgICAgICAgICAgdmFyaWFibGVzIHRoYXQg YXJlIHRvIGJlIGV2YWx1YXRlZCBhdCB0aGUgdGltZSBlYWNoIGZpbGUgaXMKKyAgICAgICAgICBy ZWNlaXZlZCwgc3VjaCBhcyBcdihmaWxlbmFtZSksIFx2KGZpbGVudW1iZXIpLCBcdihudGltZSks CisgICAgICAgICAgXHYocGlkKSwgXHYodXNlciksIGV0Yy4gV0FSTklORzogaWYgeW91IGdpdmUg YSBsaXRlcmFsIHN0cmluZworICAgICAgICAgIGFuZCBtb3JlIHRoYW4gb25lIGZpbGUgYXJyaXZl cywgZWFjaCBpbmNvbWluZyBmaWxlIHdpbGwgYmUgZ2l2ZW4KKyAgICAgICAgICB0aGUgc2FtZSBu YW1lIChidXQgU0VUIEZJTEUgQ09MTElTSU9OIEJBQ0tVUCBvciBSRU5BTUUgY2FuIGJlCisgICAg ICAgICAgdXNlZCB0byBrZWVwIHRoZSBpbmNvbWluZyBmaWxlcyBmcm9tIG92ZXJ3cml0aW5nIGVh Y2ggb3RoZXIpLgorCisgICAvUVVJRVQKKyAgICAgICAgICBXaGVuIHJlY2VpdmluZyBpbiBsb2Nh bCBtb2RlLCB0aGlzIHN1cHByZXNzZXMgdGhlIGZpbGUtdHJhbnNmZXIKKyAgICAgICAgICBkaXNw bGF5LgorCisgICAvVEVYVAorICAgICAgICAgIFJlY2VpdmVzIGluIHRleHQgbW9kZSB3aXRob3V0 IGFmZmVjdGluZyB0aGUgZ2xvYmFsIHRyYW5zZmVyCisgICAgICAgICAgbW9kZS4gU2VlIGNvbW1l bnRzIHVuZGVyIFJFQ0VJVkUgL0JJTkFSWS4KKworICAgVGhlIC9NQUlMIGFuZCAvUFJJTlQgb3B0 aW9ucyBhcmUgbm90IGF2YWlsYWJsZSwgYnV0IHlvdSBjYW4gdXNlCisgICAvQ09NTUFORCB0byBh Y2hpZXZlIHRoZSBzYW1lIGVmZmVjdCwgYXMgaW4gdGhlc2UgVU5JWCBleGFtcGxlczoKKworICBy IC9jb21tYW5kIHttYWlsIGtlcm1pdEBjb2x1bWJpYS5lZHV9CisgIHIgL2NvbW1hbmQgbHByCisK KyAgIEluIE9TLzIgb3IgV2luZG93cywgeW91IGNhbiBSRUNFSVZFIGFuZCBwcmludCBsaWtlIHRo aXM6CisKKyAgcmVjZWl2ZSBwcm4KKworICAgVGhlIENSRUNFSVZFIGNvbW1hbmQgbm93IGFsc28g YWNjZXB0cyB0aGUgc2FtZSBzd2l0Y2hlcy4KKworNC44LiBNaW5vciBLZXJtaXQgUHJvdG9jb2wg SW1wcm92ZW1lbnRzCisKKzQuOC4xLiBNdWx0aXBsZSBBdHRyaWJ1dGUgUGFja2V0cworCisgICBD LUtlcm1pdCA3LjAgbm93IHNlbmRzIG1vcmUgdGhhbiBvbmUgQXR0cmlidXRlIHBhY2tldCBpZiBh IGZpbGUncworICAgYXR0cmlidXRlcyBkbyBub3QgZml0IGludG8gYSBzaW5nbGUgcGFja2V0IG9m IHRoZSBuZWdvdGlhdGVkIGxlbmd0aC4gSWYKKyAgIGEgcGFydGljdWxhciBhdHRyaWJ1dGUgKHN1 Y2ggYXMgZmlsZSBjcmVhdGlvbiBkYXRlLXRpbWUpIGRvZXMgbm90IGZpdAorICAgd2l0aGluIHRo ZSBuZWdvdGlhdGVkIGxlbmd0aCAod2hpY2ggd2lsbCBvbmx5IGhhcHBlbiB3aGVuIHRoZQorICAg bmVnb3RpYXRlZCBsZW5ndGggaXMgYXJvdW5kIDIwIG9yIGxlc3MpLCB0aGF0IGF0dHJpYnV0ZSBp cyBub3Qgc2VudCBhdAorICAgYWxsLgorCis0LjguMi4gVmVyeSBTaG9ydCBQYWNrZXRzCisKKyAg IFRoZXJlIGFyZSBjZXJ0YWluIHNpdHVhdGlvbnMgd2hlcmUgZXh0cmVtZWx5IHNob3J0IHBhY2tl dHMgbXVzdCBiZQorICAgdXNlZDsgMjAgb3IgMzAgYnl0ZXMgYXQgbW9zdC4gVGhpcyBjYW4gaGFw cGVuIHdoZW4gb25lIG9yIG1vcmUgZGV2aWNlcworICAgYWxvbmcgdGhlIGNvbW11bmljYXRpb24g cGF0aCBoYXZlIHZlcnkgc21hbGwgYnVmZmVycyBhbmQgbGFjayBhbgorICAgZWZmZWN0aXZlIG1l YW5zIG9mIGZsb3cgY29udHJvbC4gRXhhbXBsZXMgYXJlIHNvbWV0aW1lcyBjaXRlZCBpbnZvbHZp bmcKKyAgIHJhZGlvIG1vZGVtcy4KKworICAgV2hlbiB0aGUgbWF4aW11bSBwYWNrZXQgbGVuZ3Ro IGlzIHNob3J0ZXIgdGhhbiBjZXJ0YWluIHBhY2tldHMgdGhhdAorICAgd291bGQgYmUgc2VudCwg dGhvc2UgcGFja2V0cyBhcmUgZWl0aGVyIHRydW5jYXRlZCBvciBlbHNlIGJyb2tlbiB1cAorICAg aW50byBtdWx0aXBsZSBwYWNrZXRzLiBTcGVjaWZpY2FsbHk6CisKKyAgICAxLiBQYXJhbWV0ZXIg bmVnb3RpYXRpb24gcGFja2V0cyAoSSwgUywgYW5kIHRoZWlyIEFDS3MpIGFyZSB0cnVuY2F0ZWQK KyAgICAgICB0byB0aGUgbmVnb3RpYXRlZCBsZW5ndGguIEFueSBwYXJhbWV0ZXJzIHRoYXQgZG8g bm90IGZpdCBhcmUgcmVzZXQKKyAgICAgICB0byB0aGVpciBkZWZhdWx0IHZhbHVlcy4gVGhlcmUg aXMgbm8gcHJvdmlzaW9uIGluIHRoZSBLZXJtaXQKKyAgICAgICBwcm90b2NvbCBmb3IgZnJhZ21l bnRhdGlvbiBhbmQgcmVhc3NlbWJseSBvZiBwYXJhbWV0ZXIgc3RyaW5ncy4KKyAgICAyLiBGaWxl IGhlYWRlciBwYWNrZXRzIChjb250YWluaW5nIHRoZSBmaWxlbmFtZSkgYXJlIHNpbXBseSB0cnVu Y2F0ZWQuCisgICAgICAgVGhlcmUgaXMgbm8gcHJvdmlzaW9uIGluIHRoZSBLZXJtaXQgcHJvdG9j b2wgZm9yIGZyYWdtZW50YXRpb24gYW5kCisgICAgICAgcmVhc3NlbWJseSBvZiBmaWxlbmFtZXMu CisgICAgMy4gQXR0cmlidXRlIHBhY2tldHMgYXJlIGZyYWdtZW50ZWQgYW5kIHJlYXNzZW1ibGVk IGFzIGRlc2NyaWJlZCBpbgorICAgICAgIDQuOC4xIHdpdGhvdXQgbG9zcyBvZiBkYXRhLCBleGNl cHQgaW4gY2FzZSBhIGZpZWxkIHdpbGwgbm90IGZpdCBhdAorICAgICAgIGFsbCBpbiB0aGUgbmVn b3RpYXRlZCBsZW5ndGggKHRoZSBsb25nZXN0IGF0dHJpYnV0ZSBpcyB1c3VhbGx5IHRoZQorICAg ICAgIGRhdGUgYW5kIHRpbWUgb2YgZmlsZSBjcmVhdGlvbi9tb2RpZmljYXRpb24pIGJlY2F1c2Ug b2YgdGhlIHJ1bGUKKyAgICAgICB0aGF0IGF0dHJpYnV0ZXMgbWF5IG5vdCBiZSBicm9rZW4gYWNy b3NzIHBhY2tldHMuCisgICAgNC4gRGF0YSBwYWNrZXRzIGFuZCBvdGhlciBwYWNrZXRzIGFyZSB1 bmFmZmVjdGVkIC0tIHRoZXkgY2FuIGJlIGFzCisgICAgICAgc2hvcnQgYXMgdGhleSBuZWVkIHRv IGJlLCB3aXRoaW4gcmVhc29uLgorCis0LjkuIFdpbGRjYXJkIC8gRmlsZSBHcm91cCBFeHBhbnNp b24KKworICAgIldpbGRjYXJkIiByZWZlcnMgdG8gdGhlIG5vdGF0aW9uIHVzZWQgaW4gZmlsZW5h bWVzIHRvIHNwZWNpZnkgYSBncm91cAorICAgb2YgZmlsZXMgYnkgcGF0dGVybiBtYXRjaGluZy4K KworNC45LjEuIEluIFVOSVggQy1LZXJtaXQKKworICAgUHJpb3IgdG8gQy1LZXJtaXQgNy4wLCBD LUtlcm1pdCB3YXMgY2FwYWJsZSBvZiBleHBhbmRpbmcgd2lsZGNhcmQKKyAgIHN0cmluZ3MgY29u dGFpbmluZyBvbmx5IHRoZSAibWV0YWNoYXJhY3RlcnMiICcqJyBhbmQgJz8nOgorCisgICAqCisg ICAgICAgICAgTWF0Y2hlcyBhbnkgc2VxdWVuY2Ugb2YgemVybyBvciBtb3JlIGNoYXJhY3RlcnMu IEZvciBleGFtcGxlOgorICAgICAgICAgICJjayouYyIgbWF0Y2hlcyBhbGwgZmlsZXMgd2hvc2Ug bmFtZXMgc3RhcnQgd2l0aCAiY2siIGFuZCBlbmQKKyAgICAgICAgICB3aXRoICIuYyIsIGluY2x1 ZGluZyAiY2suYyIuCisKKyAgID8KKyAgICAgICAgICBNYXRjaGVzIGFueSBzaW5nbGUgY2hhcmFj dGVyLiBGb3IgZXhhbXBsZSwgImNrPy5jIiBtYXRjaGVzIGFsbAorICAgICAgICAgIGZpbGVzIHdo b3NlIG5hbWVzIGFyZSBleGFjdGx5IDUgY2hhcmFjdGVycyBsb25nIGFuZCBzdGFydCB3aXRoCisg ICAgICAgICAgImNrIiBhbmQgZW5kIHdpdGggIi5jIi4gV2hlbiB0eXBpbmcgY29tbWFuZHMgYXQg dGhlIHByb21wdCwgeW91CisgICAgICAgICAgbXVzdCBwcmVjZWRlIGFueSBxdWVzdGlvbiBtYXJr IHRvIGJlIHVzZWQgZm9yIG1hdGNoaW5nIGJ5IGEKKyAgICAgICAgICBiYWNrc2xhc2ggKFwpIHRv IG92ZXJyaWRlIHRoZSBub3JtYWwgZnVuY3Rpb24gb2YgcXVlc3Rpb24gbWFyaywKKyAgICAgICAg ICB3aGljaCBpcyBwcm92aWRpbmcgbWVudXMgYW5kIGZpbGUgbGlzdHMuCisKKyAgIEMtS2VybWl0 IDcuMCBhZGRzIHRoZSBhZGRpdGlvbmFsIGZlYXR1cmVzIHRoYXQgdXNlcnMgb2Yga3NoLCBjc2gs IGFuZAorICAgYmFzaCBhcmUgYWNjdXN0b21lZCB0bzoKKworICAgW2FiY10KKyAgICAgICAgICBT cXVhcmUgYnJhY2tldHMgZW5jbG9zaW5nIGEgbGlzdCBvZiBjaGFyYWN0ZXJzIG1hdGNoZXMgYW55 CisgICAgICAgICAgc2luZ2xlIGNoYXJhY3RlciBpbiB0aGUgbGlzdC4gRXhhbXBsZTogY2t1dXNy LltjaF0gbWF0Y2hlcworICAgICAgICAgIGNrdXVzci5jIGFuZCBja3V1c3IuaC4KKworICAgW2Et el0KKyAgICAgICAgICBTcXVhcmUgYnJhY2tldHMgZW5jbG9zaW5nIGEgcmFuZ2Ugb2YgY2hhcmFj dGVyczsgdGhlIGh5cGhlbgorICAgICAgICAgIHNlcGFyYXRlcyB0aGUgbG93IGFuZCBoaWdoIGVs ZW1lbnRzIG9mIHRoZSByYW5nZS4gRm9yIGV4YW1wbGUsCisgICAgICAgICAgW2Etel0gbWF0Y2hl cyBhbnkgY2hhcmFjdGVyIGZyb20gYSB0byB6LgorCisgICBbYWNkbS16XQorICAgICAgICAgIExp c3RzIGFuZCByYW5nZXMgbWF5IGJlIGNvbWJpbmVkLiBUaGlzIGV4YW1wbGUgbWF0Y2hlcyBhLCBj LCBkLAorICAgICAgICAgIG9yIG0gdGhyb3VnaCB6LgorCisgICB7c3RyaW5nMSxzdHJpbmcyLC4u Ln0KKyAgICAgICAgICBCcmFjZXMgZW5jbG9zZSBhIGxpc3Qgb2Ygc3RyaW5ncyB0byBiZSBtYXRj aGVkLiBGb3IgZXhhbXBsZToKKyAgICAgICAgICBja3t1ZmlvLHZjb24sY21haX0uYyBtYXRjaGVz IGNrdWZpby5jLCBja3Zjb24uYywgb3IgY2tjbWFpLmMuCisgICAgICAgICAgVGhlIHN0cmluZ3Mg bWF5IHRoZW1zZWx2ZXMgY29udGFpbiBtZXRhY2hhcmFjdGVycywgYnJhY2tldAorICAgICAgICAg IGxpc3RzLCBvciBpbmRlZWQsIG90aGVyIGxpc3RzIG9mIHN0cmluZ3MsIGJ1dCAod2hlbiBtYXRj aGluZworICAgICAgICAgIGZpbGVuYW1lcykgdGhleSBtYXkgbm90IGNvbnRhaW4gZGlyZWN0b3J5 IHNlcGFyYXRvcnMuCisKKyAgICAgICAgICBUaHVzLCB0aGUgbWV0YWNoYXJhY3RlcnMgaW4gZmls ZW5hbWVzIChhbmQgaW4gYW55IG90aGVyIGZpZWxkCisgICAgICAgICAgdGhhdCBjYW4gYmUgYSBw YXR0ZXJuLCBzdWNoIGFzIHRoZSBJRiBNQVRDSCBwYXR0ZXJuLCBTRU5EIG9yIEdFVAorICAgICAg ICAgIGV4Y2VwdGlvbiBsaXN0cywgZXRjKSBhcmU6CisKKyAqID8gWyB7CisKKyAgICAgICAgICBB bmQgd2l0aGluIGJyYWNlcyBvbmx5LCBjb21tYSAoLCkgaXMgYSBtZXRhY2hhcmFjdGVyLgorCisg ICBUbyBpbmNsdWRlIGEgbWV0YWNoYXJhY3RlciBpbiBhIHBhdHRlcm4gbGl0ZXJhbGx5LCBwcmVj ZWRlIGl0IHdpdGggYQorICAgYmFja3NsYXNoICdcJyAob3IgdHdvIGlmIHlvdSBhcmUgcGFzc2lu ZyB0aGUgcGF0dGVybiB0byBhIG1hY3JvKS4KKyAgIEV4YW1wbGVzOgorCisgIHNlbmQgYSpiICAg ICAgOyBTZW5kIGFsbCBmaWxlcyB3aG9zZSBuYW1lcyBzdGFydCB3aXRoICdhJyBhbmQgZW5kIHdp dGggJ2InLgorICBzZW5kIGE/YiAgICAgIDsgRGl0dG8sIGJ1dCB0aGUgbmFtZSBtdXN0IGJlIGV4 YWN0bHkgdGhyZWUgY2hhcmFjdGVycyBsb25nLgorICBzZW5kIGFbYS16XWIgIDsgRGl0dG8sIGJ1 dCB0aGUgc2Vjb25kIGNoYXJhY3RlciBtdXN0IGJlIGEgbG93ZXJjYXNlIGxldHRlci4KKyAgc2Vu ZCBhW3hcLXpdYiA7IERpdHRvLCBleGNlcHQgdGhlIHNlY29uZCBjaGFyYWN0ZXIgbXVzdCBiZSAn eCcsICctJywgb3IgJ3knLgorICBzZW5kIGFbZ2hpXWIgIDsgRGl0dG8sIGV4Y2VwdCB0aGUgc2Vj b25kIGNoYXJhY3RlciBtdXN0IGJlICdnJywgJ2gnLCBvciAnaScuCisgIHNlbmQgYVs/Kl1iICAg OyBEaXR0bywgZXhjZXB0IHRoZSBzZWNvbmQgY2hhcmFjdGVyIG11c3QgYmUgJz8nIG9yICcqJy4K KyAgc2VuZCBhW1w/XCpdYiA7IFNhbWUgYXMgcHJldmlvdXMuCisgIHNlbmQgKj9bYS16XSogOyBB bGwgZmlsZXMgd2l0aCBuYW1lcyBjb250YWluaW5nIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIKKyAg ICAgICAgICAgICAgICA7IHRoYXQgaXMgZm9sbG93ZWQgYnkgYSBsb3dlcmNhc2UgbGV0dGVyLgor CisgICBPciwgbW9yZSBwcmFjdGljYWxseToKKworICBzZW5kIGNrW2N1d10qLltjd2hdICA7IFNl bmQgdGhlIFVOSVggQy1LZXJtaXQgc291cmNlIGZpbGVzLgorCisgICBUbyByZWZlciB0byB0aGUg Qy1LZXJtaXQgc291cmNlcyBmaWxlcyBhbmQgbWFrZWZpbGUgYWxsIGluIG9uZQorICAgZmlsZXNw ZWM6CisKKyAge3ttYWtlZmlsZSxja1tjdXddKi5bY3doXX19CisKKyAgIChOT1RFOiBpZiB0aGUg ZW50aXJlIHBhdHRlcm4gaXMgYSB7c3RyaW5nbGlzdH0sIHlvdSBtdXN0IGVuY2xvc2UgaXQgaXQK KyAgIFRXTyBwYWlycyBvZiBicmFjZXMsIHNpbmNlIHRoZSBTRU5EIGNvbW1hbmQgc3RyaXBzIHRo ZSBvdXRlciBicmFjZQorICAgcGFpciwgYmVjYXVzZSBvZiB0aGUgImVuY2xvc2UgaW4gYnJhY2Vz IGlmIHRoZSBmaWxlbmFtZSBjb250YWlucworICAgc3BhY2VzIiBydWxlKS4KKworICAgSWYgdGhl IG1ha2VmaWxlIGlzIGNhbGxlZCBja3VrZXIubWFrOgorCisgIGNrW2N1d10qLntbY3doXSxtYWt9 CisKKyAgIChOT1RFOiBkb3VibGUgYnJhY2VzIGFyZSBub3QgbmVlZGVkIGhlcmUgc2luY2UgdGhl IHBhdHRlcm4gZG9lcyBub3QKKyAgIGJvdGggYmVnaW4gYW5kIGVuZCB3aXRoIGEgYnJhY2UuKQor CisgICBUbyBhZGQgaW4gYWxsIHRoZSBDLUtlcm1pdCB0ZXh0IGZpbGVzOgorCisgIGNrW2N1d10q LntbY3doXSxtYWssdHh0fQorCisgICBBbGwgb2YgdGhlc2UgZmVhdHVyZXMgY2FuIGJlIHVzZWQg YW55d2hlcmUgeW91IHdvdWxkIHR5cGUgYSBmaWxlbmFtZQorICAgdGhhdCBpcyBhbGxvd2VkIHRv IGNvbnRhaW4gd2lsZGNhcmRzLgorCisgICBXaGVuIHlvdSBhcmUgdHlwaW5nIGF0IHRoZSBjb21t YW5kIHByb21wdCwgYW4gZXh0cmEgbGV2ZWwgb2YgcXVvdGluZyBpcworICAgcmVxdWlyZWQgZm9y IHRoZSAnPycgY2hhcmFjdGVyIHRvIGRlZmVhdCBpdHMgcmVndWxhciBmdW5jdGlvbiBvZgorICAg cHJvZHVjaW5nIGEgbGlzdCBvZiBmaWxlcyB0aGF0IG1hdGNoIHdoYXQgeW91IGhhdmUgdHlwZWQg c28gZmFyLCBmb3IKKyAgIGV4YW1wbGU6CisKKyAgc2VuZCBja1tjdV0/CisKKyAgIGxpc3RzIGFs bCB0aGUgZmlsZXMgd2hvc2UgbmFtZXMgc3RhcnQgd2l0aCBja2MgYW5kIGNrdS4gSWYgeW91IHF1 b3RlCisgICB0aGUgcXVlc3Rpb24gbWFyaywgaXQgaXMgdXNlZCBhcyBhIHBhdHRlcm4tbWF0Y2hp bmcgY2hhcmFjdGVyLCBmb3IKKyAgIGV4YW1wbGU6CisKKyAgc2VuZCBja1w/W2Z0XWlvLmMKKwor ICAgc2VuZHMgYWxsIHRoZSBmaWxlIGFuZCBjb21tdW5pY2F0aW9ucyBpL28gbW9kdWxlcyBmb3Ig YWxsIHRoZQorICAgcGxhdGZvcm1zOiBja3VmaW8uYywgY2t1dGlvLmMsIGNrdmZpby5jLCBja3Z0 aW8uYywgZXRjLgorCisgICBJZiwgaG93ZXZlciwgYSBmaWxlbmFtZSBhY3R1YWxseSBjb250YWlu cyBhIHF1ZXN0aW9uIG1hcmsgYW5kIHlvdSBuZWVkCisgICB0byByZWZlciB0byBpdCBvbiB0aGUg Y29tbWFuZCBsaW5lLCB5b3UgbXVzdCB1c2UgdGhyZWUgKDMpIGJhY2tzbGFzaGVzLgorICAgRm9y IGV4YW1wbGUsIGlmIHRoZSBmaWxlIGlzIGFjdHVhbGx5IGNhbGxlZCBjaz9maW8uYywgeW91IHdv dWxkIHVzZToKKworICBzZW5kIGNrXFxcP2Zpby5jCisKKyAgIEZ1cnRoZXIgbm90ZXMgb24gcXVv dGluZzoKKworICAgICAqIEEgc2luZ2xlIGJhY2tzbGFzaCBpcyBzdWZmaWNpZW50IGZvciBxdW90 aW5nIGEgc3BlY2lhbCBjaGFyYWN0ZXIgYXQKKyAgICAgICB0aGUgY29tbWFuZCBwcm9tcHQgb3Ig aW4gYSBjb21tYW5kIGZpbGUuIEhvd2V2ZXIsIHdoZW4gcGFzc2luZworICAgICAgIHBhdHRlcm5z IHRvIG1hY3JvcyB5b3UnbGwgbmVlZCBkb3VibGUgYmFja3NsYXNoZXMsIGFuZCB3aGVuCisgICAg ICAgcmVmZXJyaW5nIHRvIHRoZXNlIHBhdHRlcm5zIHdpdGhpbiB0aGUgbWFjcm8sIHlvdSdsbCBu ZWVkIHRvIHVzZQorICAgICAgIFxmY29udGVudHMoXCUxKSAoc2VlIFs1MDZdU2VjdGlvbiAxLjEx LjUpLiBZb3Ugc2hvdWxkIGVuY2xvc2UgbWFjcm8KKyAgICAgICBhcmd1bWVudCByZWZlcmVuY2Vz IGluIGJyYWNlcyBpbiBjYXNlIGdyb3VwZWQgYXJndW1lbnRzIHdlcmUKKyAgICAgICBwYXNzZWQu IEV4YW1wbGU6CisgZGVmaW5lIGlzbWF0Y2ggeworICAgICBpZiBtYXRjaCB7XGZjb250KFwlMSl9 IHtcZmNvbnQoXCUyKX0geworICAgICAgICAgZW5kIDAgTUFUQ0gKKyAgICAgfSBlbHNlIHsKKyAg ICAgICAgIGVuZCAxIE5PIE1BVENICisgICAgIH0KKyB9CisgaXNtYXRjaCBhYip5eiBhKlxcKip6 ICAgICAgICAgICA7IEJhY2tzbGFzaCBtdXN0IGJlIGRvdWJsZWQKKyBpc21hdGNoIHthYmMgZGVm IHh5en0gKmIqZSp5KiAgIDsgQnJhY2VzIG11c3QgYmUgdXNlZCBmb3IgZ3JvdXBpbmcKKworICAg ICAqIFdhdGNoIG91dCBmb3IgcG9zc2libGUgY29uZmxpY3RzIGJldHdlZW4ge30gaW4gZmlsZW5h bWUgcGF0dGVybnMKKyAgICAgICBhbmQge30gdXNlZCBmb3IgZ3JvdXBpbmcgbXVsdGlwbGUgd29y ZHMgaW50byBhIHNpbmdsZSBmaWVsZCwgd2hlbgorICAgICAgIHRoZSBwYXR0ZXJuIGhhcyBvdXRl ciBicmFjZXMuIEZvciBleGFtcGxlLCBpbjoKKyAgICAgaWYgbWF0Y2gge2FiYyB4eXp9IHthKiAq en0gZWNobyBUSEVZIE1BVENICisKKyAgICAgICBicmFjZXMgbXVzdCBiZSB1c2VkIHRvIGdyb3Vw ICJhYmMgeHl6IiBpbnRvIGEgc2luZ2xlIHN0cmluZy4gS2VybWl0CisgICAgICAgc3RyaXBzIG9m ZiB0aGUgYnJhY2VzIGJlZm9yZSBjb21wYXJpbmcgdGhlIHN0cmluZyB3aXRoIHRoZSBwYXR0ZXJu LgorICAgICAgIFRoZXJlZm9yZToKKyBpZiBtYXRjaCBtYWtlZmlsZSB7bWFrZWZpbGUsTWFrZWZp bGV9IGVjaG8gVEhFWSBNQVRDSAorCisgICAgICAgZG9lcyBub3Qgd29yaywgYnV0OgorIGlmIG1h dGNoIG1ha2VmaWxlIHt7bWFrZWZpbGUsTWFrZWZpbGV9fSBlY2hvIFRIRVkgTUFUQ0gKKworICAg ICAgIGRvZXMuCisgICAgICogSWYgeW91IHVzZSBhIHBhdHRlcm4gdGhhdCBoYXMgb3V0ZXIgYnJh Y2VzLCBsaWtlIHsqLnR4dCwqLmRvY30sIGluCisgICAgICAgYSBmaWVsZCB0aGF0IGFjY2VwdHMg YSBwYXR0ZXJuIGxpc3QgKGxpa2UgU0VORCAvRVhDRVBUOnh4eCksIHlvdSdsbAorICAgICAgIG5l ZWQgdG8gYWRkIHR3byBleHRyYSBzZXRzIG9mIG91dGVyIGJyYWNlczoKKyBzZW5kIC9leGNlcHQ6 e3t7Ki50eHQsKi5kb2N9fX0gKi4qCisKKyAgIEMtS2VybWl0J3MgbmV3IHBhdHRlcm4gbWF0Y2hp bmcgY2FwYWJpbGl0aWVzIGFyZSBhbHNvIHVzZWQgd2hlbgorICAgQy1LZXJtaXQgaXMgaW4gc2Vy dmVyIG1vZGUsIHNvIG5vdyB5b3UgY2FuIHNlbmQgcmVxdWVzdHMgc3VjaCBhczoKKworICBnZXQg Y2tbY3V3XSouW2N3aF0KKworICAgdG8gYSBDLUtlcm1pdCBzZXJ2ZXIgd2l0aG91dCBoYXZpbmcg dG8gdGVsbCBpdCB0byBTRVQgV0lMRCBTSEVMTCBmaXJzdC4KKyAgIFByZXZpb3VzbHkgdGhpcyB3 b3VsZCBoYXZlIHJlcXVpcmVkOgorCisgIG1nZXQgY2tjKi5jIGNrYyoudyBja2MqLmggY2t1Ki5j IGNrdSoudyBja3UqLmggY2t3Ki5jIGNrdyoudyBja3cqLmgKKworICAgVGhlIG5ldyBwYXR0ZXJu IG1hdGNoaW5nIGZlYXR1cmVzIG1ha2UgU0VUIFdJTEQgU0hFTEwgcmVkdW5kYW50LCBhbmQKKyAg IGJhcnJpbmcgYW55IG9iamVjdGlvbnMsIGl0IHdpbGwgZXZlbnR1YWxseSBiZSBwaGFzZWQgb3V0 LiAoT25lIHBvc3NpYmxlCisgICByZWFzb24gZm9yIHJldGFpbmluZyBpdCB3b3VsZCBiZSBhcyBh biBlc2NhcGUgbWVjaGFuaXNtIHdoZW4gS2VybWl0CisgICBkb2VzIG5vdCB1bmRlcnN0YW5kIHRo ZSB1bmRlcmx5aW5nIGZpbGUgc3lzdGVtLikKKworICAgQnkgdGhlIHdheSwgcGF0dGVybnMgc3Vj aCBhcyB0aGVzZSBhcmUgc29tZXRpbWVzIHJlZmVycmVkIHRvIGFzCisgICAicmVndWxhciBleHBy ZXNzaW9ucyIsIGJ1dCB0aGV5IGFyZSBub3QgcXVpdGUgdGhlIHNhbWUuIEluIGEgdHJ1ZQorICAg cmVndWxhciBleHByZXNzaW9uIChmb3IgZXhhbXBsZSksICIqIiBtZWFucyAiemVybyBvciBtb3Jl IHJlcGV0aXRpb25zCisgICBvZiB0aGUgcHJldmlvdXMgaXRlbSIsIHNvIChmb3IgZXhhbXBsZSks ICIoWzAtOV0qKSIgd291bGQgbWF0Y2ggemVybyBvcgorICAgbW9yZSBkaWdpdHMgaW4gcGFyZW50 aGVzZXMuIEluIEtlcm1pdCAoYW5kIGluIG1vc3Qgc2hlbGxzKSwgdGhpcworICAgbWF0Y2hlcyBv bmUgZGlnaXQgZm9sbG93ZWQgYnkgemVybyBvciBtb3JlIGNoYXJhY3RlcnMsIHdpdGhpbgorICAg cGFyZW50aGVzZXMuIEhlcmUgYXJlIHNvbWUgaGludHM6CisKKyAgICAgKiBBbHRob3VnaCB5b3Ug Y2FuJ3QgbWF0Y2ggYW55IHNlcXVlbmNlIG9mIGRpZ2l0cyAob3IgbGV0dGVycywgZXRjKSwKKyAg ICAgICB5b3UgY2FuIG1hdGNoIChzYXkpIDEsIDIsIG9yIDMgb2YgdGhlbSBpbiByb3cuIEZvciBl eGFtcGxlLCB0aGUKKyAgICAgICBmb2xsb3dpbmcgcGF0dGVybiBtYXRjaGVzIEtlcm1pdCBiYWNr dXAgZmlsZXMgKHdpdGggYmFja3VwIG51bWJlcnMKKyAgICAgICBmcm9tIDEgdG8gOTk5KToKKyAq Ln57WzEtOV0sWzEtOV1bMC05XSxbMS05XVswLTldWzAtOV19fgorCisgICAgICogVGhlcmUgaXMg cHJlc2VudGx5IG5vIE5PVCBvcGVyYXRvciwgc28gbm8gd2F5IHRvIG1hdGNoIGFueQorICAgICAg IGNoYXJhY3RlciBvciBzdHJpbmcgRVhDRVBUIHRoZSBvbmUocykgc2hvd24uCisKKyAgIEluIG90 aGVyIHdpbGRjYXJkaW5nIG5ld3MuLi4KKworICAgICAqIFlvdSBtYXkgbm93ICJzZW5kIHh4eCIg d2hlcmUgInh4eCIgaXMgYSBkaXJlY3RvcnkgbmFtZSwgYW5kIHRoaXMKKyAgICAgICB3aWxsIHNl bmQgYWxsIHRoZSBmaWxlcyBmcm9tIHRoZSBkaXJlY3RvcnkgeHh4LCBhcyBpZiB5b3UgaGFkIHR5 cGVkCisgICAgICAgInNlbmQgeHh4LyoiLiBZb3UgY2FuIGFsc28gdXNlIHRoZSBzcGVjaWFsIHNo b3J0aGFuZCAic2VuZCAuIiB0bworICAgICAgIHNlbmQgYWxsIHRoZSBmaWxlcyBmcm9tIHRoZSBj dXJyZW50IGRpcmVjdG9yeS4KKyAgICAgKiBUbyBlYXNpbHkgc2tpcCBvdmVyIGJhY2t1cCBmaWxl cyAodGhlIG9uZXMgd2hvc2UgbmFtZXMgZW5kIGxpa2UKKyAgICAgICAufjIyfikgd2hlbiBzZW5k aW5nLCB5b3UgY2FuIHVzZSBTRU5EIC9OT0JBQ0tVUCAoc2VlIFs1MDddU2VjdGlvbgorICAgICAg IDQuMC42IGZvciBkZXRhaWxzKS4KKyAgICAgKiBXaGVuIGNob29zaW5nIEtlcm1pdCB0byBleHBh bmQgd2lsZGNhcmRzLCByYXRoZXIgdGhhbiB0aGUgc2hlbGwsCisgICAgICAgeW91IGNhbiBjaG9v c2Ugd2hldGhlciAiZG90IGZpbGVzIiAtLSBmaWxlcyB3aG9zZSBuYW1lcyBiZWdpbiB3aXRoCisg ICAgICAgIi4iLCB3aGljaCBhcmUgbm9ybWFsbHkgImludmlzaWJsZSIgLS0gc2hvdWxkIGJlIG1h dGNoZWQ6CisgU0VUIFdJTEQgS0VSTUlUIC9OTy1NQVRDSC1ET1QtRklMRVMgKHRoaXMgaXMgdGhl IGRlZmF1bHQpCisgU0VUIFdJTEQgS0VSTUlUIC9NQVRDSC1ET1QtRklMRVMgICAgKHRoaXMgYWxs b3dzIG1hdGNoaW5nIG9mICIuIiBmaWxlcykKKworICAgICAgIG9yIGluY2x1ZGUgdGhlIC9ET1RG SUxFUyBvciAvTk9ET1RGSUxFUyBzd2l0Y2ggb24gdGhlIGNvbW1hbmQgeW91CisgICAgICAgYXJl IHVzaW5nLCBzdWNoIGFzIFNFTkQgb3IgRElSRUNUT1JZLgorICAgICAqIENvbW1hbmRzIHN1Y2gg YXMgRElSRUNUT1JZIGFuZCBTRU5EIGFsbG93IHJlY3Vyc2l2ZSBkaXJlY3RvcnkKKyAgICAgICB0 cmF2ZXJzYWwuIFRoZXJlIGFyZSBhbHNvIG5ldyBmdW5jdGlvbnMgZm9yIHRoaXMgdG8gdXNlIGlu IHNjcmlwdHMuCisgICAgICAgU2VlIFs1MDhdU2VjdGlvbiA0LjExIGZvciBkZXRhaWxzLgorCisg ICBXaGVuIGJ1aWxkaW5nIGZpbGUgbGlzdHMgaW4gVU5JWCwgQy1LZXJtaXQgZm9sbG93cyBzeW1i b2xpYyBsaW5rcy4KKyAgIEJlY2F1c2Ugb2YgdGhpcywgeW91IG1pZ2h0IGVuY291bnRlciBhbnkg b3IgYWxsIG9mIHRoZSBmb2xsb3dpbmcKKyAgIHBoZW5vbWVuYToKKworICAgICAqIE11bHRpcGxl IGNvcGllcyBvZiB0aGUgc2FtZSBmaWxlOyBlLmcuIG9uZSBmcm9tIGl0cyByZWFsIGRpcmVjdG9y eQorICAgICAgIGFuZCBvdGhlcnMgZnJvbSBsaW5rcyB0byBpdHMgcmVhbCBkaXJlY3RvcnksIGlm IGJvdGggdGhlIHJlYWwKKyAgICAgICBkaXJlY3RvcnkgYW5kIHRoZSBsaW5rcyB0byBpdCBhcmUg aW4gdGhlIHdpbGRjYXJkIGV4cGFuc2lvbiBsaXN0LgorICAgICAqIEEgY29tbWFuZCBtaWdodCB1 bmV4cGVjdGVkbHkgImhhbmciIGZvciBhIGxvbmcgdGltZSBiZWNhdXNlIGFuIE5GUworICAgICAg IGxpbmsgbWlnaHQgbm90IGJlIHJlc3BvbmRpbmcsIG9yIHRoZSBkaXJlY3RvcnkgeW91IGFyZSBs b29raW5nIGF0CisgICAgICAgY29udGFpbnMgYSBsaW5rIHRvIGEgaHVnZSBkaXJlY3RvcnkgdHJl ZSAoZXhhbXBsZTogImRpcmVjdG9yeQorICAgICAgIC9yZWN1cnNpdmUgL2V0YyIgd2hlbiAvZXRj L3Nwb29sIGlzIGEgc3ltbGluayB0byAvdmFyL3Nwb29sLCB3aGljaAorICAgICAgIGlzIGEgbGFy Z2Ugb3JnYW5pemF0aW9uJ3MgaW5jb21pbmcgZW1haWwgZGlyZWN0b3J5LCBjb250YWluaW5nIHRl bnMKKyAgICAgICBvZiB0aG91c2FuZHMgb2Ygc3ViZGlyZWN0b3JpZXMpLgorCisgICBUaGUgc2l6 ZSBvZiB0aGUgZmlsZSBsaXN0IHRoYXQgS2VybWl0IGNhbiBidWlsZCBpcyBsaW1pdGVkIGluIG1v c3QKKyAgIEMtS2VybWl0IGltcGxlbWVudGF0aW9ucy4gVGhlIGxpbWl0LCBpZiBhbnksIGRlcGVu ZHMgb24gdGhlCisgICBpbXBsZW1lbnRhdGlvbi4gVXNlIHRoZSBTSE9XIEZFQVRVUkVTIGNvbW1h bmQgYW5kIGxvb2sgaW4gdGhlCisgICBhbHBoYWJldGl6ZWQgb3B0aW9ucyBsaXN0IGZvciBNQVhX TEQgdG8gc2VlIHRoZSB2YWx1ZS4KKworNC45LjIuIEluIEtlcm1pdCA5NQorCisgICBLZXJtaXQg OTUgMS4xLjE5IGFuZCBsYXRlciB1c2VzIHRoZSBzYW1lIHBhdHRlcm4gbWF0Y2hpbmcgc3ludGF4 IGFzIGluCisgICBVTklYLCBidXQgKGFzIGFsd2F5cykgeW91IHdpbGwgZW5jb3VudGVyIG51bWVy b3VzIGRpZmZpY3VsdGllcyBpZiB5b3UKKyAgIHVzZSBiYWNrc2xhc2ggKFwpIGFzIHRoZSBkaXJl Y3Rvcnkgc2VwYXJhdG9yLiBJbiBhbnkgY29tbWFuZCB3aGVyZSBLOTUKKyAgIHBhcnNlcyBmaWxl bmFtZXMgaXRzZWxmICh0aGF0IGlzLCBwcmFjdGljYWxseSBhbnkgZmlsZS1vcmllbnRlZCBjb21t YW5kCisgICBleGNlcHQgUlVOKSwgeW91IGNhbiB1c2UgZm9yd2FyZCBzbGFzaCAoLykgYXMgdGhl IGRpcmVjdG9yeSBzZXBhcmF0b3IKKyAgIHRvIGF2b2lkIGFsbCB0aGUgbmFzdHkgY29uZmxpY3Rz LgorCis0LjkuMy4gSW4gVk1TLCBBT1MvVlMsIE9TLTksIFZPUywgZXRjLgorCisgICBQbGF0Zm9y bXMgb3RoZXIgdGhhbiBVTklYLCBXaW5kb3dzIDk1Lzk4L05ULCBhbmQgT1MvMiBoYXZlIHRoZWly IG93bgorICAgZmlsZW5hbWUgbWF0Y2hpbmcgY2FwYWJpbGl0aWVzIHRoYXQgYXJlLCBpbiBnZW5l cmFsLCBkaWZmZXJlbnQgZnJvbQorICAgS2VybWl0J3MgYnVpbHQtaW4gb25lcyBhbmQgaW4gYW55 IGNhc2UgbWlnaHQgY29uZmxpY3Qgd2l0aCB0aGVtLiBGb3IKKyAgIGV4YW1wbGUsIFtdIGVuY2xv c2VzIGRpcmVjdG9yeSBuYW1lcyBpbiBWTVMuCisKKyAgIE5ldmVydGhlbGVzcyB5b3UgY2FuIHN0 aWxsIHVzZSBhbGwgdGhlIHBhdHRlcm4tbWF0Y2hpbmcgY2FwYWJpbGl0aWVzCisgICBkZXNjcmli ZWQgaW4gWzUwOV1TZWN0aW9uIDQuOS4xIGJ5IGxvYWRpbmcgYSBmaWxlIGxpc3QgaW50byBhbiBh cnJheQorICAgKGUuZy4gd2l0aCBcZmZpbGVzKCosJmEpLCBzZWUgWzUxMF1TZWN0aW9uIDQuMTEu MykgYW5kIHRoZW4gdXNpbmcgSUYKKyAgIE1BVENIIG9uIHRoZSBtZW1iZXJzLgorCis0LjEwLiBB ZGRpdGlvbmFsIFBhdGhuYW1lIENvbnRyb2xzCisKKyAgIEluIHZlcnNpb24gNi4wIGFuZCBlYXJs aWVyLCBDLUtlcm1pdCdzIFNFVCB7IFNFTkQsIFJFQ0VJVkUgfSBQQVRITkFNRVMKKyAgIGNvbW1h bmQgaGFkIG9ubHkgT04gYW5kIE9GRiBhcyBvcHRpb25zLiBJbiB2ZXJzaW9uIDcuMCwgdGhlcmUg YXJlIG1vcmUKKyAgIGNob2ljZXM6CisKKyAgIFNFVCBTRU5EIFBBVEhOQU1FUyBPRkYKKyAgICAg ICAgICBXaGVuIHNlbmRpbmcgYSBmaWxlLCBzdHJpcCBhbGwgZGlzay9kaXJlY3RvcnkgaW5mb3Jt YXRpb24gZnJvbQorICAgICAgICAgIHRoZSBuYW1lLiBFeGFtcGxlOiAic2VuZCAvdXNyL29sZ2Ev bGV0dGVycy9vb2ZhLnR4dCIgc2VuZHMgdGhlCisgICAgICAgICAgZmlsZSBhcyAib29mYS50eHQi LiBUaGlzIGFwcGxpZXMgdG8gYWN0dWFsIGZpbGVuYW1lcywgbm90IHRvIGFueQorICAgICAgICAg IGFzLW5hbWUgeW91IG1pZ2h0IHNwZWNpZnkuCisKKyAgIFNFVCBTRU5EIFBBVEhOQU1FUyBSRUxB VElWRQorICAgICAgICAgIFdoZW4gc2VuZGluZyBhIGZpbGUsIGxlYXZlIHRoZSBwYXRobmFtZSBv biBhcyBnaXZlbi4gRm9yCisgICAgICAgICAgZXhhbXBsZSwgaWYgeW91ciBjdXJyZW50IGRpcmVj dG9yeSBpcyAvdXNyL29sZ2EsICJzZW5kCisgICAgICAgICAgbGV0dGVycy9vb2ZhLnR4dCIgc2Vu ZHMgdGhlIGZpbGUgYXMgImxldHRlcnMvb29mYS50eHQiLCBub3QKKyAgICAgICAgICAiL3Vzci9v bGdhL2xldHRlcnMvb29mYS50eHQiIG9yICJsZXR0ZXJzLnR4dCIuCisKKyAgIFNFVCBTRU5EIFBB VEhOQU1FUyBBQlNPTFVURQorICAgICAgICAgIFdoZW4gc2VuZGluZyBhIGZpbGUsIGNvbnZlcnQg aXRzIG5hbWUgdG8gdGhlIGZ1bGwsIGFic29sdXRlCisgICAgICAgICAgbG9jYWwgcGF0aG5hbWUu IEZvciBleGFtcGxlLCBpZiB5b3VyIGN1cnJlbnQgZGlyZWN0b3J5IGlzCisgICAgICAgICAgL3Vz ci9vbGdhLCAic2VuZCBsZXR0ZXJzL29vZmEudHh0IiBzZW5kcyB0aGUgZmlsZSBhcworICAgICAg ICAgICIvdXNyL29sZ2EvbGV0dGVycy9vb2ZhLnR4dCIuIE5PVEU6IEV2ZW4gd2l0aCB0aGlzIHNl dHRpbmcsCisgICAgICAgICAgZGV2aWNlIGFuZC9vciBub2RlIG5hbWVzIGFyZSBub3QgaW5jbHVk ZWQuIEZvciBleGFtcGxlLCBpbiBWTVMsCisgICAgICAgICAgYW55IG5vZGUgb3IgZGV2aWNlIG5h bWUgaXMgc3RyaXBwZWQ7IGluIFdpbmRvd3Mgb3IgT1MvMiwgYW55CisgICAgICAgICAgZGlzayBs ZXR0ZXIgaXMgc3RyaXBwZWQuCisKKyAgIFNFVCBSRUNFSVZFIFBBVEhOQU1FUyBPRkYKKyAgICAg ICAgICBXaGVuIHJlY2VpdmluZyBhIGZpbGUsIHN0cmlwIGFsbCBkaXNrL2RpcmVjdG9yeSBpbmZv cm1hdGlvbiBmcm9tCisgICAgICAgICAgdGhlIG5hbWUgYmVmb3JlIGF0dGVtcHRpbmcgdG8gc3Rv cmUgaXQuIFRoaXMgYXBwbGllcyB0byBpbmNvbWluZworICAgICAgICAgIGZpbGVuYW1lLCBub3Qg dG8gYW55IGFzLW5hbWUgeW91IG1pZ2h0IHNwZWNpZnkuIEV4YW1wbGU6IElmIGEKKyAgICAgICAg ICBmaWxlIGFycml2ZXMgdW5kZXIgdGhlIG5hbWUgIi91c3Ivb2xnYS9sZXR0ZXJzL29vZmEudHh0 IiBpdCBpcworICAgICAgICAgIHN0b3JlZCBzaW1wbHkgYXMgIm9vZmEudHh0IiBpbiB5b3VyIGRv d25sb2FkIGRpcmVjdG9yeSBvciwgaWYgbm8KKyAgICAgICAgICBkb3dubG9hZCBkaXJlY3Rvcnkg aGFzIGJlZW4gc3BlY2lmaWVkLCBpbiB5b3VyIGN1cnJlbnQKKyAgICAgICAgICBkaXJlY3Rvcnku CisKKyAgIFNFVCBSRUNFSVZFIFBBVEhOQU1FUyBSRUxBVElWRQorICAgICAgICAgIFdoZW4gcmVj ZWl2aW5nIGEgZmlsZSwgbGVhdmUgdGhlIHBhdGhuYW1lIG9uIGFzIGl0IGFwcGVhcnMgaW4KKyAg ICAgICAgICB0aGUgaW5jb21pbmcgbmFtZSwgYnV0IGlmIHRoZSBpbmNvbWluZyBuYW1lIGFwcGVh cnMgdG8gYmUKKyAgICAgICAgICBhYnNvbHV0ZSwgbWFrZSBpdCByZWxhdGl2ZSB0byB5b3VyIGN1 cnJlbnQgb3IgZG93bmxvYWQKKyAgICAgICAgICBkaXJlY3RvcnkuIEV4YW1wbGVzOgorCisgICAg ICAgICAgKyAib29mYS50eHQiIGlzIHN0b3JlZCBhcyAib29mYS50eHQiLgorICAgICAgICAgICsg ImxldHRlcnMvb29mYS50eHQiIGlzIHN0b3JlZCBhcyAibGV0dGVycy9vb2ZhLnR4dCI7IHRoZQor ICAgICAgICAgICAgImxldHRlcnMiIHN1YmRpcmVjdG9yeSBpcyBjcmVhdGVkIGlmIGl0IGRvZXMg bm90IGFscmVhZHkKKyAgICAgICAgICAgIGV4aXN0LgorICAgICAgICAgICsgIi91c3Ivb2xnYS9s ZXR0ZXJzL29vZmEudHh0IiBpcyBzdG9yZWQgYXMKKyAgICAgICAgICAgICJ1c3Ivb2xnYS9sZXR0 ZXJzL29vZmEudHh0IiBpbiB5b3VyIGN1cnJlbnQgb3IgZG93bmxvYWQKKyAgICAgICAgICAgIGRp cmVjdG9yeSwgYW5kIHRoZSAidXNyIiwgInVzci9vbGdhIiwgZXRjLCBkaXJlY3RvcmllcyBhcmUK KyAgICAgICAgICAgIGNyZWF0ZWQgaWYgdGhleSBkbyBub3QgZXhpc3QuCisKKyAgIFNFVCBSRUNF SVZFIFBBVEhOQU1FUyBBQlNPTFVURQorICAgICAgICAgIFRoZSBpbmNvbWluZyBmaWxlbmFtZSBp cyB1c2VkIGFzIGdpdmVuLiBUaHVzIGl0IGNhbm5vdCBiZSBzdG9yZWQKKyAgICAgICAgICB1bmxl c3MgdGhlIGdpdmVuIHBhdGggKGlmIGFueSkgYWxyZWFkeSBleGlzdHMgb3IgY2FuIGJlIGNyZWF0 ZWQuCisgICAgICAgICAgSW4gdGhpcyBjYXNlLCBub2RlLCBkZXZpY2UsIG9yIGRpc2sgZGVzaWdu YXRpb25zIGFyZSBOT1QKKyAgICAgICAgICBzdHJpcHBlZCwgc2luY2UgdGhleSBtb3N0IGxpa2Vs eSB3ZXJlIGdpdmVuIGV4cGxpY2l0bHkgYnkgdGhlCisgICAgICAgICAgdXNlciBhcyBhbiBhcy1u YW1lLCBtZWFudCB0byBiZSB1c2VkIGFzIGdpdmVuLgorCisgICBTRVQgUkVDRUlWRSBQQVRITkFN RVMgQVVUTworICAgICAgICAgIFRoaXMgaXMgdGhlIGRlZmF1bHQsIGFuZCBtZWFucyBSRUxBVElW RSBpZiB0aGUgc2VuZGVyIHRlbGxzIG1lCisgICAgICAgICAgaXQgaXMgYSByZWN1cnNpdmUgdHJh bnNmZXIsIE9GRiBvdGhlcndpc2UuCisKKyAgIFNldCBGSUxFIE5BTUVTIENPTlZFUlRFRCBub3cg YWxzbyBhZmZlY3RzIHBhdGhuYW1lcyB0b28uIFdoZW4gUEFUSE5BTUVTCisgICBhcmUgUkVMQVRJ VkUgb3IgQUJTT0xVVEUgYW5kIEZJTEUgTkFNRVMgYXJlIENPTlZFUlRFRCwgdGhlIGZpbGUgc2Vu ZGVyCisgICBjb252ZXJ0cyBpdHMgbmF0aXZlIGRpcmVjdG9yeS1uYW1lIGZvcm1hdCB0byBVTklY IGZvcm1hdCwgYW5kIHRoZSBmaWxlCisgICByZWNlaXZlciBjb252ZXJ0cyBmcm9tIFVOSVggZm9y bWF0IHRvIGl0cyBuYXRpdmUgb25lOyB0aHVzIFVOSVggZm9ybWF0CisgICBpcyB0aGUgY29tbW9u IGludGVybWVkaWF0ZSByZXByZXNlbnRhdGlvbiBmb3IgZGlyZWN0b3J5IGhpZXJhcmNoaWVzLCBh cworICAgaXQgaXMgaW4gdGhlIFpJUC9VTlpJUCBwcm9ncmFtcyAod2hpY2ggaXMgd2h5IFpJUCBh cmNoaXZlcyBhcmUKKyAgIHRyYW5zcG9ydGFibGUgYW1vbmcsIFVOSVgsIERPUywgYW5kIFZNUyku CisKKyAgIEhlcmUncyBhbiBleGFtcGxlIGluIHdoaWNoIGEgZmlsZSBpcyBzZW50IGZyb20gV2lu ZG93cyB0byBVTklYIHdpdGgKKyAgIHJlbGF0aXZlIHBhdGhuYW1lcyBhbmQgRklMRSBOQU1FUyBD T05WRVJURUQ6CisKKyAgU291cmNlIG5hbWUgICAgICAgICAgICAgICAgSW50ZXJtZWRpYXRlIG5h bWUgICAgICBEZXN0aW5hdGlvbiBOYW1lCisgIEM6XEs5NVxUTVBcT09GQS5UWFQgICAgICAgIEs5 NS9UTVAvT09GQS5UWFQgICAgICAgazk1L3RtcC9vb2ZhLnR4dAorCisgICBJbiBhIG1vcmUgY29t cGxpY2F0ZWQgZXhhbXBsZSwgd2Ugc2VuZCB0aGUgc2FtZSBmaWxlIGZyb20gV2luZG93cyB0bwor ICAgVk1TOgorCisgIFNvdXJjZSBuYW1lICAgICAgICAgICAgICAgIEludGVybWVkaWF0ZSBuYW1l ICAgICAgRGVzdGluYXRpb24gTmFtZQorICBDOlxLOTVcVE1QXE9PRkEuVFhUICAgICAgICBLOTUv VE1QL09PRkEuVFhUICAgICAgIFsuSzk1LlRNUF1PT0ZBLlRYVAorCisgICAoTm90ZSB0aGF0IGRp c2sgbGV0dGVycyBhbmQgZGV2aWNlIGRlc2lnbmF0aW9ucyBhcmUgYWx3YXlzIHN0cmlwcGVkCisg ICB3aGVuIHBhdGhuYW1lcyBhcmUgcmVsYXRpdmUpLgorCisgICBBcyB5b3UgY2FuIGltYWdpbmUs IGFzIG1vcmUgYW5kIG1vcmUgZGlyZWN0b3J5IGZvcm1hdHMgYXJlIGNvbnNpZGVyZWQsCisgICB0 aGlzIGFwcHJvYWNoIGtlZXBzIG1hdHRlcnMgc2ltcGxlOiBvbiBlYWNoIHBsYXRmb3JtLCBLZXJt aXQgbXVzdCBrbm93CisgICBvbmx5IGl0cyBvd24gbG9jYWwgZm9ybWF0IGFuZCB0aGUgY29tbW9u IGludGVybWVkaWF0ZSBvbmUuIEluIG1vc3QKKyAgIGNhc2VzLCB0aGUgcmVjZWl2ZXIgY2FuIGRl dGVjdCB3aGljaCBmb3JtYXQgaXMgdXNlZCBhdXRvbWF0aWNhbGx5LgorCis0LjExLiBSZWN1cnNp dmUgU0VORCBhbmQgR0VUOiBUcmFuc2ZlcnJpbmcgRGlyZWN0b3J5IFRyZWVzCisKKyAgIEMtS2Vy bWl0IDcuMCBpbiBzZWxlY3RlZCB2ZXJzaW9ucyAoVU5JWCwgVk1TLCBWT1MsIEFPUy9WUywgV2lu ZG93cywgYW5kCisgICBPUy8yIGF0IHRoaXMgd3JpdGluZykgbm93IHBlcm1pdHMgdGhlIFNFTkQg Y29tbWFuZCB0byB0cmF2ZXJzZQorICAgZGlyZWN0b3JpZXMgInJlY3Vyc2l2ZWx5IiBpZiB5b3Ug YXNrIGl0IHRvOyB0aGF0IGlzLCB0byBzZW5kIGZpbGVzIGZyb20KKyAgIHRoZSBjdXJyZW50IG9y IHNwZWNpZmllZCBkaXJlY3RvcnkgYW5kIGFsbCBvZiBpdHMgc3ViZGlyZWN0b3JpZXMgdG9vLAor ICAgYW5kIHRoZWlyIHN1YmRpcmVjdG9yaWVzLCBldGMuIChTb21lIG90aGVyIGNvbW1hbmRzIGNh biBkbyB0aGlzIHRvbywKKyAgIGluY2x1ZGluZyBESVJFQ1RPUlkuKQorCisgICBUaGlzIGZlYXR1 cmUgaXMgbmV3IHRvIFVOSVgsIFdpbmRvd3MsIFZPUywgYW5kIE9TLzIuIFZNUyBhbmQgQU9TL1ZT CisgICBoYXZlIGFsd2F5cyBpbmNsdWRlZCAid2lsZGNhcmQiIG9yICJ0ZW1wbGF0ZSIgY2hhcmFj dGVycyB0aGF0IGFsbG93CisgICB0aGlzLCBhbmQgaW4gdGhpcyBjYXNlLCByZWN1cnNpdmUgZGly ZWN0b3J5IHRyYXZlcnNhbCBjb3VsZCBoYXBwZW4KKyAgIGJlaGluZCBLZXJtaXQncyBiYWNrLCBp LmUuIEtlcm1pdCBkb2VzIG5vdCBoYXZlIHRvIGRvIGl0IGl0c2VsZiAoaW4KKyAgIFZNUywgdGhl IG5vdGF0aW9uIGlzICJbLi4uXSIgb3IgIltkaXJlY3RvcnkuLi5dIjsgaW4gQU9TL1ZTIGlzICIj IikuIEluCisgICBDLUtlcm1pdCA3LjAsIGhvd2V2ZXIsIFNFTkQgL1JFQ1VSU0lWRSBpcyBzdXBw b3J0ZWQgYnkgQy1LZXJtaXQgaXRzZWxmCisgICBmb3IgVk1TLgorCis0LjExLjEuIENvbW1hbmQt TGluZSBPcHRpb25zCisKKyAgIFRvIGRlc2NlbmQgYSBkaXJlY3RvcnkgdHJlZSB3aGVuIHNlbmRp bmcgZmlsZXMsIHVzZSB0aGUgLUwgY29tbWFuZC1saW5lCisgICBvcHRpb24gdG8gaW5kaWNhdGUg dGhhdCB0aGUgc2VuZCBvcGVyYXRpb24gaXMgdG8gYmUgcmVjdXJzaXZlLCBhbmQKKyAgIGluY2x1 ZGUgYSBuYW1lIG9yIHBhdHRlcm4gdG8gYmUgc2VudC4gV2hlbiBnaXZpbmcgYSBwYXR0ZXJuLCB5 b3Ugc2hvdWxkCisgICBlbmNsb3NlIGl0IGluIHF1b3RlcyB0byBwcmV2ZW50IHRoZSBzaGVsbCBm cm9tIGV4cGFuZGluZyBpdC4gRXhhbXBsZXM6CisKKyAgJCBrZXJtaXQgLUxzICIvdXNyL29sZ2Ev KiIgIyBzZW5kIGFsbCBvZiBPbGdhJ3MgZmlsZXMgaW4gYWxsIGhlciBkaXJlY3RvcmllcworICAk IGtlcm1pdCAtTHMgZm9vLnR4dCAgICAgICAjIHNlbmQgYWxsIGZvby50eHQgZmlsZXMgaW4gdGhp cyBkaXJlY3RvcnkgdHJlZQorICAkIGtlcm1pdCAtTHMgIioudHh0IiAgICAgICAjIHNlbmQgYWxs IC50eHQgZmlsZXMgaW4gdGhpcyBkaXJlY3RvcnkgdHJlZQorICAkIGtlcm1pdCAtTHMgImxldHRl cnMvKiIgICAjIHNlbmQgYWxsIGZpbGVzIGluIHRoZSBsZXR0ZXJzIGRpcmVjdG9yeSB0cmVlCisg ICQga2VybWl0IC1McyBsZXR0ZXJzICAgICAgICMgc2VuZCBhbGwgZmlsZXMgaW4gdGhlIGxldHRl cnMgZGlyZWN0b3J5IHRyZWUKKyAgJCBrZXJtaXQgLUxzICIqIiAgICAgICAgICAgIyBzZW5kIGFs bCBmaWxlcyBpbiB0aGlzIGRpcmVjdG9yeSB0cmVlCisgICQga2VybWl0IC1McyAuICAgICAgICAg ICAgICMgVU5JWCBvbmx5OiBzZW5kIGFsbCBmaWxlcyBpbiB0aGlzIGRpcmVjdG9yeSB0cmVlCisg ICQga2VybWl0IC1zIC4gICAgICAgICAgICAgICMgVU5JWCBvbmx5OiBhIGZpbGVuYW1lIG9mIC4g aW1wbGllcyAtTAorCisgICBJZiB5b3UgbGV0IHRoZSBzaGVsbCBleHBhbmQgd2lsZGNhcmRzLCBL ZXJtaXQgb25seSBzZW5kcyBmaWxlcyB3aG9zZQorICAgbmFtZXMgbWF0Y2ggZmlsZXMgaW4gdGhl IGN1cnJlbnQgb3IgZ2l2ZW4gZGlyZWN0b3J5LCBiZWNhdXNlIHRoZSBzaGVsbAorICAgcmVwbGFj ZXMgYW4gdW5xdW90ZWQgd2lsZGNhcmQgZXhwcmVzc2lvbiB3aXRoIHRoZSBsaXN0IG9mIG1hdGNo aW5nCisgICBmaWxlcyAtLSBhbmQgdGhlIHNoZWxsIGRvZXMgbm90IGJ1aWxkIHJlY3Vyc2l2ZSBs aXN0cy4gTm90ZSB0aGF0IHRoZQorICAgIi4iIG5vdGF0aW9uIGZvciB0aGUgdHJlZSByb290ZWQg YXQgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGlzIGFsbG93ZWQKKyAgIG9ubHkgaW4gVU5JWCwgc2lu Y2UgaW4gV2luZG93cyBhbmQgT1MvMiwgaXQgbWVhbnMgIiouKiIgKG5vbnJlY3Vyc2l2ZSkuCisK KzQuMTEuMi4gVGhlIFNFTkQgL1JFQ1VSU0lWRSBDb21tYW5kCisKKyAgIElmIHlvdSBpbmNsdWRl IHRoZSAvUkVDVVJTSVZFIHN3aXRjaCBpbiBhIFNFTkQgKG9yIE1PVkUsIG9yIHNpbWlsYXIpCisg ICBjb21tYW5kLCBpdCBtZWFucyB0byBkZXNjZW5kIHRoZSBjdXJyZW50IG9yIHNwZWNpZmllZCBk aXJlY3RvcnkgdHJlZQorICAgc2VhcmNoaW5nIGZvciBmaWxlcyB3aG9zZSBuYW1lcyBtYXRjaCB0 aGUgZ2l2ZW4gbmFtZSBvciBwYXR0ZXJuLiBTaW5jZQorICAgdGhpcyBpcyBub3QgdGVycmlibHkg dXNlZnVsIHVubGVzcyB5b3UgYWxzbyBpbmNsdWRlIHBhdGhuYW1lcyB3aXRoIHRoZQorICAgb3V0 Ym91bmQgZmlsZXMsIHRoZSAvUkVDVVJTSVZFIHN3aXRjaCBhbHNvIGluY2x1ZGVzIGFuIGltcGxp Y2l0CisgICAvUEFUSE5BTUVTOlJFTEFUSVZFIHN3aXRjaCAod2hpY2ggeW91IGNhbiB1bmRvIGJ5 IGluY2x1ZGluZyBhbiBleHBsaWNpdAorICAgL1BBVEhOQU1FUyBzd2l0Y2ggYWZ0ZXIgdGhlIC9S RUNVUlNJVkUgc3dpdGNoKS4KKworICAgRXhhbXBsZXM6CisKKyAgIFNFTkQgL1JFQ1VSU0lWRSAq CisgICAgICAgICAgU2VuZHMgYWxsIG9mIHRoZSBmaWxlcyBpbiB0aGUgY3VycmVudCBkaXJlY3Rv cnkgYW5kIGFsbCB0aGUKKyAgICAgICAgICBmaWxlcyBpbiBhbGwgb2YgaXRzIHN1YmRpcmVjdG9y aWVzLCBhbmQgYWxsIG9mIHRoZWlyCisgICAgICAgICAgc3ViZGlyZWN0b3JpZXMsIGV0YywgaW5j bHVkaW5nIHRoZWlyIHJlbGF0aXZlIHBhdGhuYW1lcy4gRW1wdHkKKyAgICAgICAgICBkaXJlY3Rv cmllcyBhcmUgbm90IHNlbnQuCisKKyAgIFNFTkQgL1JFQ1VSU0lWRSAvUEFUSE5BTUVTOkFCU09M VVRFICoKKyAgICAgICAgICBTZW5kcyBhbGwgb2YgdGhlIGZpbGVzIGluIHRoZSBjdXJyZW50IGRp cmVjdG9yeSBhbmQgYWxsIHRoZQorICAgICAgICAgIGZpbGVzIGluIGFsbCBvZiBpdHMgc3ViZGly ZWN0b3JpZXMsIGFuZCBhbGwgb2YgdGhlaXIKKyAgICAgICAgICBzdWJkaXJlY3RvcmllcywgZXRj LCBpbmNsdWRpbmcgdGhlaXIgYWJzb2x1dGUgcGF0aG5hbWVzLgorCisgICBTRU5EIC9SRUNVUlNJ VkUgL1BBVEhOQU1FUzpPRkYgKgorICAgICAgICAgIFNlbmRzIGFsbCBvZiB0aGUgZmlsZXMgaW4g dGhlIGN1cnJlbnQgZGlyZWN0b3J5IGFuZCBhbGwgdGhlCisgICAgICAgICAgZmlsZXMgaW4gYWxs IG9mIGl0cyBzdWJkaXJlY3RvcmllcywgYW5kIGFsbCBvZiB0aGVpcgorICAgICAgICAgIHN1YmRp cmVjdG9yaWVzLCBldGMsIHdpdGhvdXQgcGF0aG5hbWVzLgorCisgICBTRU5EIC9SRUNVUlNJVkUg L3Vzci9vbGdhLyoKKyAgICAgICAgICBTZW5kcyBhbGwgb2YgdGhlIGZpbGVzIGluIHRoZSAvdXNy L29sZ2EgZGlyZWN0b3J5IGFuZCBhbGwgdGhlCisgICAgICAgICAgZmlsZXMgaW4gYWxsIG9mIGl0 cyBzdWJkaXJlY3RvcmllcywgYW5kIGFsbCBvZiB0aGVpcgorICAgICAgICAgIHN1YmRpcmVjdG9y aWVzLCBldGMuCisKKyAgIFNFTkQgL1JFQ1VSU0lWRSAvdXNyL29sZ2EgKG9yIC91c3Ivb2xnYS8p CisgICAgICAgICAgU2FtZSBhcyBhYm92ZS4gSWYgdGhlIG5hbWUgaXMgYSBkaXJlY3RvcnkgbmFt ZSAod2l0aCBvciB3aXRob3V0CisgICAgICAgICAgYSB0cmFpbGluZyBzbGFzaCksIGl0cyBmaWxl cyBhcmUgc2VudCwgYW5kIHRob3NlIG9mIGl0cworICAgICAgICAgIHN1YmRpcmVjdG9yaWVzLCBh bmQgdGhlaXIgc3ViZGlyZWN0b3JpZXMsIGV0YyAoc2VlIFs1MTFdU2VjdGlvbgorICAgICAgICAg IDQuOSkuCisKKyAgIFNFTkQgL1JFQ1VSU0lWRSAvVEVYVCAvdXNyL29sZ2EvKi50eHQKKyAgICAg ICAgICBBcyBhYm92ZSwgYnV0IG9ubHkgZmlsZXMgd2hvc2UgbmFtZXMgZW5kIHdpdGggIi50eHQi IGFyZSBzZW50LAorICAgICAgICAgIGFuZCB0aGV5IGFyZSBzZW50IGluIHRleHQgbW9kZSAoYXMg dGhleSB3b3VsZCBiZSBieSBkZWZhdWx0CisgICAgICAgICAgYW55d2F5IGlmIFNFVCBGSUxFIFBB VFRFUk5TIGlzIE9OIG9yIEFVVE8pLgorCisgICBTRU5EIC4KKyAgICAgICAgICBVTklYIG9ubHk6 IFNlbmQgYWxsIHRoZSBmaWxlcyBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkuCisKKyAgIFNFTkQg L1JFQ1VSU0lWRSAuCisgICAgICAgICAgVU5JWCBvbmx5OiBTZW5kcyBhbGwgb2YgdGhlIGZpbGVz IGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBhbmQKKyAgICAgICAgICBhbGwgb2YgaXRzIHN1YmRp cmVjdG9yaWVzLCBldGMgKFs1MTJdU2VjdGlvbiA0LjkpLgorCisgICBUaGUgL1JFQ1VSU0lWRSBz d2l0Y2ggaXMgZGlmZmVyZW50IGZyb20gbW9zdCBvdGhlciBzd2l0Y2hlcyBpbiB0aGF0IGl0cwor ICAgZWZmZWN0IGlzIGltbWVkaWF0ZSAoYnV0IHN0aWxsIGxvY2FsIHRvIHRoZSBjb21tYW5kIGlu IHdoaWNoIGl0IGlzCisgICBnaXZlbiksIGJlY2F1c2UgaXQgZGV0ZXJtaW5lcyBob3cgZmlsZW5h bWVzIGFyZSB0byBiZSBwYXJzZWQuIEZvcgorICAgZXhhbXBsZSwgInNlbmQgKi50eHQiIGZhaWxz IHdpdGggYSBwYXJzZSBlcnJvciAoIk5vIGZpbGVzIG1hdGNoIikgaWYKKyAgIHRoZXJlIGFyZSBu byAqLnR4dCBmaWxlcyBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnksIGJ1dCAic2VuZCAvcmVjdXJz aXZlCisgICAqLnR4dCIgc3VjY2VlZHMgaWYgdGhlcmUgYXJlICIudHh0IiBmaWxlcyBhbnl3aGVy ZSBpbiB0aGUgdHJlZSByb290ZWQKKyAgIGF0IHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KKworICAg VGhlIC9SRUNVUlNJVkUgc3dpdGNoIGFsc28gYWZmZWN0cyB0aGUgZmlsZSBsaXN0cyBkaXNwbGF5 ZWQgaWYgeW91IHR5cGUKKyAgICI/IiBpbiBhIGZpbGVuYW1lIGZpZWxkLiAic2VuZCAuLz8iIGxp c3RzIHRoZSByZWd1bGFyIGZpbGVzIGluIHRoZQorICAgY3VycmVudCBkaXJlY3RvcnksIGJ1dCAi c2VuZCAvcmVjdXJzaXZlIC4vPyIgbGlzdHMgdGhlIGVudGlyZSBkaXJlY3RvcnkKKyAgIHRyZWUg cm9vdGVkIGF0IHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KKworNC4xMS4zLiBUaGUgR0VUIC9SRUNV UlNJVkUgQ29tbWFuZAorCisgICBJbiBhIGNsaWVudC9zZXJ2ZXIgc2V0dGluZywgdGhlIGNsaWVu dCBjYW4gYWxzbyByZXF1ZXN0IGEgcmVjdXJzaXZlCisgICB0cmFuc2ZlciB3aXRoOgorCisgICBH RVQgL1JFQ1VSU0lWRSBbIG90aGVyIHN3aXRjaGVzIF0gcmVtb3RlLWZpbGVzcGVjIFsgbG9jYWwt c3BlYyBdCisKKyAgIEluIHdoaWNoIHJlbW90ZSBmaWxlIHNwZWNpZmljYXRpb24gY2FuIGJlIGEg ZGlyZWN0b3J5IG5hbWUsIGEgZmlsZW5hbWUsCisgICBhIHdpbGRjYXJkLCBvciBhbnkgY29tYmlu YXRpb24uIElmIHRoZSBsb2NhbC1zcGVjIGlzIG5vdCBnaXZlbiAoYW5kCisgICBQQVRITkFNRVMg YXJlIFJFTEFUSVZFKSwgaW5jb21pbmcgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIGdvIGludG8gdGhl CisgICBjdXJyZW50IGxvY2FsIGRpcmVjdG9yeS4gSWYgbG9jYWwtc3BlYyBpcyBnaXZlbiBhbmQg aXMgYSBkaXJlY3RvcnksIGl0CisgICBiZWNvbWVzIHRoZSByb290IG9mIHRoZSB0cmVlIGludG8g d2hpY2ggdGhlIGluY29taW5nIGZpbGVzIGFuZAorICAgZGlyZWN0b3JpZXMgYXJlIHBsYWNlZC4g SWYgbG9jYWwtc3BlYyBoYXMgdGhlIHN5bnRheCBvZiBhIGRpcmVjdG9yeQorICAgbmFtZSAoZS5n LiBpbiBVTklYIGl0IGVuZHMgd2l0aCAvKSwgQy1LZXJtaXQgY3JlYXRlcyB0aGUgZGlyZWN0b3J5 IGFuZAorICAgdGhlbiBwbGFjZXMgdGhlIGluY29taW5nIGZpbGVzIGludG8gaXQuIElmIGxvY2Fs LXNwZWMgaXMgYSBmaWxlbmFtZQorICAgKG5vdCByZWNvbW1lbmRlZCksIHRoZW4gYWxsIGluY29t aW5nIGZpbGVzIGFyZSBzdG9yZWQgd2l0aCB0aGF0IG5hbWUKKyAgIHdpdGggY29sbGlzaW9ucyBo YW5kbGVkIGFjY29yZGluZyB0byB0aGUgRklMRSBDT0xMSVNJT04gc2V0dGluZy4KKworICAgQWdh aW4sIHRoZSBub3JtYWwgbWV0aG9kIGZvciB0cmFuc2ZlcnJpbmcgZGlyZWN0b3J5IHRyZWVzIHVz ZXMgcmVsYXRpdmUKKyAgIHBhdGhuYW1lcywgYW5kIHRoaXMgaXMgdGhlIGRlZmF1bHQgd2hlbiB0 aGUgc2VuZGVyIGhhcyBiZWVuIGdpdmVuIHRoZQorICAgL1JFQ1VSU0lWRSBzd2l0Y2guIFRoZSBh Y3Rpb24gYXQgdGhlIHJlY2VpdmVyIGRlcGVuZHMgb24gaXRzIFJFQ0VJVkUKKyAgIFBBVEhOQU1F UyBzZXR0aW5nLiBUaGUgZGVmYXVsdCBpcyBBVVRPLCBtZWFuaW5nIHRoYXQgaWYgdGhlIHNlbmRl cgorICAgdGVsbHMgaXQgdG8gZXhwZWN0IGEgcmVjdXJzaXZlIHRyYW5zZmVyLCB0aGVuIGl0IHNo b3VsZCBhdXRvbWF0aWNhbGx5CisgICBzd2l0Y2ggdG8gcmVsYXRpdmUgcGF0aG5hbWVzIGZvciB0 aGlzIHRyYW5zZmVyIG9ubHk7IG90aGVyd2lzZSBpdCBvYmV5cworICAgdGhlIFJFQ0VJVkUgUEFU SE5BTUVTIHNldHRpbmcgb2YgT0ZGLCBBQlNPTFVURSwgb3IgUkVMQVRJVkUuCisKKyAgIFdoYXQg aGFwcGVucyBpZiBhIGZpbGUgYXJyaXZlcyB0aGF0IGhhcyBhbiBhYnNvbHV0ZSBwYXRobmFtZSwg d2hlbiB0aGUKKyAgIHJlY2VpdmVyIGhhcyBiZWVuIHRvbGQgdG8gdXNlIG9ubHkgcmVsYXRpdmUg cGF0aG5hbWVzPyBBcyBhIHNlY3VyaXR5CisgICBwcmVjYXV0aW9uLCBpbiB0aGlzIGNhc2UgdGhl IHJlY2VpdmVyIHRyZWF0cyB0aGUgbmFtZSBhcyBpZiBpdCB3YXMKKyAgIHJlbGF0aXZlLiBGb3Ig ZXhhbXBsZSwgaWYgYSBmaWxlIGFycml2ZXMgYXM6CisKKyAgL3Vzci9vbGdhL29vZmEudHh0CisK KyAgIFRoZSByZWNlaXZlciBjcmVhdGVzIGEgInVzciIgc3ViZGlyZWN0b3J5IGluIGl0cyBjdXJy ZW50IGRpcmVjdG9yeSwgYW5kCisgICB0aGVuIGFuICJvbGdhIiBzdWJkaXJlY3RvcnkgdW5kZXIg dGhlICJ1c3IiIHN1YmRpcmVjdG9yeSBpbiB3aGljaCB0bworICAgc3RvcmUgdGhlIGluY29taW5n IGZpbGUuCisKKyAgIFN1cHBvc2UsIGhvd2V2ZXIgdGhlcmUgaXMgYSBzZXF1ZW5jZSBvZiBkaXJl Y3RvcmllczoKKworICAvdXNyL29sZ2EvYS9iL2MvZC8KKworICAgaW4gd2hpY2ggImEiIGNvbnRh aW5zIG5vdGhpbmcgYnV0IGEgc3ViZGlyZWN0b3J5ICJiIiwgd2hpY2ggaW4gdHVybgorICAgY29u dGFpbnMgbm90aGluZyBidXQgYSBzdWJkaXJlY3RvcnkgImMiLCB3aGljaCBpbiB0dXJuIGNvbnRh aW5zIG5vdGhpbmcKKyAgIGJ1dCBhIHN1YmRpcmVjdG9yeSAiZCIsIHdoaWNoIGNvbnRhaW5zIG5v dGhpbmcgYXQgYWxsLiBUaHVzIHRoZXJlIGFyZQorICAgbm8gZmlsZXMgaW4gdGhlICIvdXNyL29s Z2EvYS8iIHRyZWUsIGFuZCBzbyBpdCBpcyBub3Qgc2VudCwgYW5kCisgICB0aGVyZWZvcmUgaXQg aXMgbm90IHJlcHJvZHVjZWQgb24gdGhlIHRhcmdldCBjb21wdXRlci4KKworNC4xMS40LiBOZXcg YW5kIENoYW5nZWQgRmlsZSBGdW5jdGlvbnMKKworICAgQy1LZXJtaXQgNy4wIGFkZHMgdGhlIGZv bGxvd2luZyBmdW5jdGlvbnM6CisKKyAgIFxmZmlsZXMocGF0dGVyblssJmFdKQorICAgICAgICAg IFRoaXMgZnVuY3Rpb24gaGFzIGJlZW4gY2hhbmdlZCB0byBtYXRjaCBvbmx5IHJlZ3VsYXIgZmls ZXMgaW4KKyAgICAgICAgICB0aGUgY3VycmVudCBvciBnaXZlbiBkaXJlY3RvcnksIGFuZCB0byB0 YWtlIGFuIG9wdGlvbmFsIGFycmF5CisgICAgICAgICAgbmFtZSBhcyBhIHNlY29uZCBhcmd1bWVu dCAoZXhwbGFpbmVkIGJlbG93KS4KKworICAgXGZkaXJlY3RvcmllcyhwYXR0ZXJuWywmYV0pCisg ICAgICAgICAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGRpcmVjdG9yaWVzIHRoYXQgbWF0Y2ggdGhl IGdpdmVuIHBhdHRlcm4uCisgICAgICAgICAgSWYgdGhlIHBhdHRlcm4gZG9lcyBub3QgaW5jbHVk ZSBhIGRpcmVjdG9yeSwgdGhlbiB0aGUgc2VhcmNoIGlzCisgICAgICAgICAgcGVyZm9ybWVkIGlu IHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KKworICAgXGZyZmlsZXMocGF0dGVyblssJmFdKQorICAg ICAgICAgIFJldHVybnMgdGhlIG51bWJlciBvZiBmaWxlcyBpbiB0aGUgY3VycmVudCBvciBnaXZl biBkaXJlY3RvcnkKKyAgICAgICAgICBhbmQgYWxsIG9mIGl0cyBzdWJkaXJlY3RvcmllcywgYW5k IHRoZWlyIHN1YmRpcmVjdG9yaWVzLCBldGMsCisgICAgICAgICAgdGhhdCBtYXRjaCB0aGUgZ2l2 ZW4gcGF0dGVybi4gV2FybmluZyAtLSB0aGlzIG9uZSBjYW4gdGFrZSBxdWl0ZQorICAgICAgICAg IHNvbWUgdGltZSBpZiBwZXJmb3JtZWQgYXQgdGhlIHJvb3Qgb2YgYSBsYXJnZSBkaXJlY3Rvcnkg dHJlZS4KKworICAgXGZyZGlyZWN0b3JpZXMocGF0dGVyblssJmFdKQorICAgICAgICAgIFJldHVy bnMgdGhlIG51bWJlciBvZiBkaXJlY3RvcmllcyBpbiB0aGUgY3VycmVudCBvciBnaXZlbgorICAg ICAgICAgIGRpcmVjdG9yeSBhbmQgYWxsIG9mIGl0cyBzdWJkaXJlY3RvcmllcywgYW5kIHRoZWly CisgICAgICAgICAgc3ViZGlyZWN0b3JpZXMsIGV0YywgdGhhdCBtYXRjaCB0aGUgZ2l2ZW4gcGF0 dGVybi4KKworICAgRWFjaCBvZiB0aGVzZSBmdW5jdGlvbnMgYnVpbGRzIHVwIGEgbGlzdCBvZiBm aWxlcyB0byBiZSByZXR1cm5lZCBieSB0aGUKKyAgIFxmbmV4dGZpbGUoKSBmdW5jdGlvbiwganVz dCBhcyBcZmZpbGVzKCkgYWx3YXlzIGhhcyBkb25lLiAoVGhpcyBjYW4KKyAgIGFsc28gYmUgZG9u ZSB3aXRoIHRoZSAvQVJSQVkgc3dpdGNoIG9mIHRoZSBESVJFQ1RPUlkgY29tbWFuZDsgc2VlCisg ICBbNTEzXVNlY3Rpb25zIDQuNS4xIGFuZCBbNTE0XTcuMTApLgorCisgICBFYWNoIG9mIHRoZXNl IGZ1bmN0aW9ucyBjYW4gYmUgZ2l2ZW4gYW4gYXJyYXkgbmFtZSBhcyBhbiBvcHRpb25hbAorICAg c2Vjb25kIGFyZ3VtZW50LiBJZiBhbiBhcnJheSBuYW1lIGlzIHN1cHBsaWVkLCB0aGUgYXJyYXkg d2lsbCBjb250YWluCisgICB0aGUgbnVtYmVyIG9mIGZpbGVzIGFzIGl0cyAwdGggZWxlbWVudCwg YW5kIHRoZSBmaWxlbmFtZXMgaW4gZWxlbWVudHMgMQorICAgdGhyb3VnaCBsYXN0LiBJZiB0aGUg YXJyYXkgYWxyZWFkeSBleGlzdGVkLCBpdHMgcHJldmlvdXMgY29udGVudHMgYXJlCisgICBsb3N0 LiBGb3IgZXhhbXBsZSwgaWYgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGNvbnRhaW5zIHR3byBmaWxl cywKKyAgIG9vZmEudHh0IGFuZCBmb28uYmFyLCB0aGVuICJcZmZpbGVzKCosJmEpIiBjcmVhdGVz IGFuIGFycmF5IFwmYVtdIHdpdGgKKyAgIGEgZGltZW5zaW9uIG9mIDIsIGNvbnRhaW5pbmcgdGhl IGZvbGxvd2luZyBlbGVtZW50czoKKworIFwmYVswXSA9IDIKKyBcJmFbMV0gPSBvb2ZhLnR4dAor IFwmYVsyXSA9IGZvby5iYXIKKworICAgSWYgbm8gZmlsZXMgbWF0Y2ggdGhlIHNwZWNpZmljYXRp b24gZ2l2ZW4gaW4gdGhlIGZpcnN0IGFyZ3VtZW50LCB0aGUKKyAgIGFycmF5IGdldHMgYSBkaW1l bnNpb24gb2YgMCwgd2hpY2ggaXMgdGhlIHNhbWUgYXMgdW5kZWNsYXJpbmcgdGhlCisgICBhcnJh eS4KKworICAgTm90ZSB0aGF0IHRoZSBvcmRlciBpbiB3aGljaCB0aGUgYXJyYXkgaXMgZmlsbGVk IChhbmQgaW4gd2hpY2gKKyAgIFxmbmV4dGZpbGUoKSByZXR1cm5zIGZpbGVuYW1lcykgaXMgaW5k ZXRlcm1pbmF0ZSAoYnV0IHNlZSBbNTE1XVNlY3Rpb24KKyAgIDcuMTAuNSkuCisKKyAgIEhlcmUn cyBhbiBleGFtcGxlIHRoYXQgYnVpbGRzIGFuZCBwcmludHMgYSBsaXN0IG9mIGFsbCB0aGUgZmls ZSB3aG9zZQorICAgbmFtZXMgZW5kIGluIC50eHQgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGFu ZCBhbGwgaXRzIGRlc2NlbmRlbnRzOgorCisgIGFzZyBcJW4gXGZyZmlsZXMoKi50eHQpCisgIGRl Y2xhcmUgXCZhW1wlbl0KKyAgZm9yIFwlaSAxIFwlbiAxIHsKKyAgICAgIGFzZyBcJmFbXCVpXSBc Zm5leHRmaWxlKCkKKyAgICAgIGVjaG8gXGZscGFkKFwlaSw0KS4gIlwmYVtcJWldIgorICB9CisK KyAgIEFsdGVybmF0aXZlbHksIHVzaW5nIHRoZSBhcnJheSBtZXRob2QsIGFuZCB0aGVuIHByaW50 aW5nIHRoZSBmaWxlbmFtZXMKKyAgIGluIGFscGhhYmV0aWMgb3JkZXIgKHNlZSBbNTE2XVNlY3Rp b24gNy4xMC4zIGFuZCBbNTE3XTcuMTAuNSk6CisKKyAgYXNnIFwlbiBcZnJmaWxlcygqLnR4dCwm YSkKKyAgc29ydCAmYQorICBmb3IgXCVpIDEgXCVuIDEgeworICAgICAgZWNobyBcZmxwYWQoXCVp LDQpLiAiXCZhW1wlaV0iCisgIH0KKworICAgT3IgZXZlbiBtb3JlIHNpbXBseToKKworICBhc2cg XCVuIFxmcmZpbGVzKCoudHh0LCZhKQorICBzb3J0ICZhCisgIHNob3cgYXJyYXkgJmEKKworICAg QXMgbm90ZWQgZWxzZXdoZXJlLCB0aGUgZmlsZSBsaXN0cyBidWlsdCBieSBcZmZpbGVzKCksIFxm cmZpbGVzKCksIGV0YywKKyAgIGFyZSBub3cgInNhZmUiIGluIHRoZSBzZW5zZSB0aGF0IFNFTkQg YW5kIG90aGVyIGZpbGUtcmVsYXRlZCBjb21tYW5kcworICAgY2FuIHJlZmVyZW5jZSBcZm5leHRm aWxlKCkgd2l0aG91dCByZXNldHRpbmcgdGhlIGxpc3Q6CisKKyAgc2V0IHNlbmQgcGF0aG5hbWVz IHJlbGF0aXZlCisgIGZvciBcJWkgMSBcZnJmaWxlcygqLnR4dCkgMSB7CisgICAgICBhc2cgXCVh IFxmbmV4dGZpbGUoKQorICAgICAgZWNobyBTZW5kaW5nIFwlYS4uLgorICAgICAgc2VuZCBcJWEK KyAgICAgIGlmIGZhaWwgYnJlYWsKKyAgfQorCisgICBDb3B5aW5nIHRvIGFuIGFycmF5IChhcyBz aG93biBvbiBwLjM5OCBvZiBbNTE4XVVzaW5nIEMtS2VybWl0IDJuZCBFZCkKKyAgIGlzIG5vIGxv bmdlciBuZWNlc3NhcnkuCisKKzQuMTEuNS4gTW92aW5nIERpcmVjdG9yeSBUcmVlcyBCZXR3ZWVu IExpa2UgU3lzdGVtcworCis0LjExLjUuMS4gVU5JWCB0byBVTklYCisKKyAgIFRyYW5zZmVycmlu ZyBhIGRpcmVjdG9yeSB0cmVlIGZyb20gb25lIGNvbXB1dGVyIHRvIGFub3RoZXIgcmVwbGljYXRl cworICAgdGhlIGZpbGUgc2VuZGVyJ3MgYXJyYW5nZW1lbnQgb2YgZmlsZXMgYW5kIGRpcmVjdG9y aWVzIG9uIHRoZSBmaWxlCisgICByZWNlaXZlcidzIGNvbXB1dGVyLiBOb3JtYWxseSB0aGlzIGlz IGRvbmUgdXNpbmcgcmVsYXRpdmUgcGF0aG5hbWVzLAorICAgc2luY2UgdGhlIHVzZXIgSURzIG1p Z2h0IG5vdCBiZSBpZGVudGljYWwgb24gdGhlIHR3byBjb21wdXRlcnMuIExldCdzCisgICBzYXkg Ym90aCBjb21wdXRlcnMgYXJlIFVOSVggYmFzZWQsIHJ1bm5pbmcgQy1LZXJtaXQgNy4wIG9yIGxh dGVyLiBPbgorICAgdGhlIHNlbmRpbmcgY29tcHV0ZXIgKGxlYXZpbmcgb3V0IHRoZSBjb25uZWN0 aW9uIGRldGFpbHMsIGV0Yyk6CisKKyAgQy1LZXJtaXQ+IGNkIC91c3Ivb2xnYQorICBDLUtlcm1p dD4gc2VuZCAvcmVjdXJzaXZlIC4KKworICAgVGhlIC9SRUNVUlNJVkUgc3dpdGNoIHRlbGxzIEMt S2VybWl0IHRvIGRlc2NlbmQgdGhyb3VnaCB0aGUgZGlyZWN0b3J5CisgICB0cmVlIGFuZCB0byBp bmNsdWRlIHJlbGF0aXZlIHBhdGhuYW1lcyBvbiBvdXRib3VuZCBmaWxlbmFtZXMuCisKKyAgIE9u IHRoZSByZWNlaXZpbmcgY29tcHV0ZXI6CisKKyAgQy1LZXJtaXQ+IG1rZGlyIG9sZ2FzLWZpbGVz ICAgICAgICAgICA7IE1ha2UgYSBuZXcgZGlyZWN0b3J5LgorICBDLUtlcm1pdD4gY2Qgb2xnYXMt ZmlsZXMgICAgICAgICAgICAgIDsgQ0QgdG8gaXQuCisgIEMtS2VybWl0PiByZWNlaXZlIC9yZWN1 cnNpdmUgICAgICAgICAgOyA9IC9QQVRITkFNRVM6UkVMQVRJVkUKKworICAgRWFjaCBLZXJtaXQg cHJvZ3JhbSByZWNvZ25pemVzIHRoYXQgdGhlIG90aGVyIGlzIHJ1bm5pbmcgdW5kZXIgVU5JWCBh bmQKKyAgIHN3aXRjaGVzIHRvIGJpbmFyeSBtb2RlIGFuZCBsaXRlcmFsIGZpbGVuYW1lcyBhdXRv bWF0aWNhbGx5LgorICAgRGlyZWN0b3JpZXMgYXJlIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCBvbiB0 aGUgcmVjZWl2aW5nIHN5c3RlbSBhcworICAgbmVlZGVkLiBGaWxlIGRhdGVzIGFuZCBwZXJtaXNz aW9ucyBhcmUgYXV0b21hdGljYWxseSByZXByb2R1Y2VkIGZyb20KKyAgIHNvdXJjZSB0byBkZXN0 aW5hdGlvbi4KKworNC4xMS41LjIuIFZNUyB0byBWTVMKKworICAgVG8gc2VuZCByZWN1cnNpdmVs eSBmcm9tIFZNUywgc2ltcGx5IGluY2x1ZGUgdGhlIC9SRUNVUlNJVkUgc3dpdGNoLCBmb3IKKyAg IGV4YW1wbGUgYXQgdGhlIHNlbmRlcjoKKworICAkIGtlcm1pdAorICBDLUtlcm1pdD4gY2QgW29s Z2FdCisgIEMtS2VybWl0PiBzZW5kIC9yZWN1cnNpdmUgKi4qOzAKKworICAgQW5kIGF0IHRoZSBy ZWNlaXZlcjoKKworICBDLUtlcm1pdD4gY2QgWy5vbGdhXQorICBDLUtlcm1pdD4gcmVjZWl2ZSAv cmVjdXJzaXZlCisKKyAgIFRoZSBub3RhdGlvbiAiLi4uIiB3aXRoaW4gZGlyZWN0b3J5IGJyYWNr ZXRzIGluIFZNUyBtZWFucyAidGhpcworICAgZGlyZWN0b3J5IGFuZCBhbGwgZGlyZWN0b3JpZXMg YmVsb3cgaXQiOyB0aGUgL1JFQ1VSU0lWRSBzd2l0Y2gsIHdoZW4KKyAgIGdpdmVuIHRvIHRoZSBz ZW5kZXIsIGltcGxpZXMgdGhlIHVzZSBvZiAiLi4uIiBpbiB0aGUgZmlsZSBzcGVjaWZpY2F0aW9u CisgICBzbyB5b3UgZG9uJ3QgaGF2ZSB0byBpbmNsdWRlICIuLi4iOyBidXQgaXQgbWFrZXMgbm8g ZGlmZmVyZW5jZSBpZiB5b3UKKyAgIGRvOgorCisgICQga2VybWl0CisgIEMtS2VybWl0PiBzZW5k IC9yZWN1cnNpdmUgW29sZ2EuLi5dKi4qOzAKKworICAgQW5kIGF0IHRoZSByZWNlaXZlcjoKKwor ICBDLUtlcm1pdD4gY2QgWy5vbGdhXQorICBDLUtlcm1pdD4gcmVjZWl2ZSAvcmVjdXJzaXZlCisK KyAgIEluIGVpdGhlciBjYXNlLCBzaW5jZSBib3RoIHN5c3RlbXMgcmVjb2duaXplIGVhY2ggb3Ro ZXIgYXMgVk1TLCB0aGV5CisgICBzd2l0Y2ggaW50byBMQUJFTEVEIHRyYW5zZmVyIG1vZGUgYXV0 b21hdGljYWxseS4KKworNC4xMS42LiBNb3ZpbmcgRGlyZWN0b3J5IFRyZWVzIEJldHdlZW4gVW5s aWtlIFN5c3RlbXMKKworICAgVGhlcmUgYXJlIHNldmVyYWwgZGlmZmljdWx0aWVzIHdpdGggcmVj dXJzaXZlIHRyYW5zZmVycyBiZXR3ZWVuIHVubGlrZQorICAgc3lzdGVtczoKKworICAgICAqIEZp bGUgZm9ybWF0cyBjYW4gYmUgZGlmZmVyZW50LCBlc3BlY2lhbGx5IHRleHQgZmlsZXMgY2hhcmFj dGVyIHNldHMKKyAgICAgICBhbmQgcmVjb3JkIGZvcm1hdHMuIFRoaXMgY2FuIG5vdyBiZSBoYW5k bGVkIGJ5IHVzaW5nIFNFVCBGSUxFCisgICAgICAgUEFUVEVSTiwgU0VUIEZJTEUgVEVYVC1QQVRU RVJOUywgYW5kIFNFVCBGSUxFIEJJTkFSWS1QQVRURVJOUworICAgICAgIChbNTE5XVNlY3Rpb24g NC4zKS4KKyAgICAgKiBGaWxlIG5hbWluZyBjb252ZW50aW9ucyBhcmUgZGlmZmVyZW50LiBGb3Ig ZXhhbXBsZSwgb25lIHN5c3RlbQorICAgICAgIG1pZ2h0IGFsbG93IChhbmQgdXNlKSBsb25nZXIg ZmlsZW5hbWVzIHRoYW4gdGhlIG90aGVyLiBZb3UgY2FuIHRlbGwKKyAgICAgICBLZXJtaXQgaG93 IHRvIGhhbmRsZSBmaWxlIG5hbWVzIHdpdGggdGhlIG5vcm1hbCAic2V0IGZpbGUgbmFtZXMiCisg ICAgICAgYW5kICJzZXQgZmlsZSBjb2xsaXNpb24iIG1lY2hhbmlzbXMuIE1vc3QgbW9kZXJuIEtl cm1pdHMgYXJlIGZhaXJseQorICAgICAgIHRvbGVyYW50IG9mIGlsbGVnYWwgZmlsZW5hbWVzIGFu ZCBzaG91bGQgbm90IGZhaWwgc2ltcGx5IGJlY2F1c2Ugb2YKKyAgICAgICBhbiBpbmNvbWluZyBm aWxlbmFtZTsgcmF0aGVyLCBpdCB3aWxsIGRvIGl0cyBiZXN0IHRvIGNvbnZlcnQgaXQgdG8KKyAg ICAgICBhIHJlY29nbml6YWJsZSBhbmQgdW5pcXVlIGxlZ2FsIGZpbGVuYW1lLgorICAgICAqIERp cmVjdG9yeSBub3RhdGlvbnMgY2FuIGJlIGRpZmZlcmVudCwgZS5nLiBiYWNrc2xhc2hlcyBpbnN0 ZWFkIG9mCisgICAgICAgc2xhc2hlcywgYnJhY2tldHMsIHBhcmVudGhlc2VzLCBzcGFjZXMsIGV0 Yy4gQnV0IHRoaXMgaXMgbm93CisgICAgICAgaGFuZGxlZCBieSBjb252ZXJ0aW5nIHBhdGhuYW1l cyB0byBhIHN0YW5kYXJkIGZvcm1hdCBkdXJpbmcKKyAgICAgICB0cmFuc2ZlciAoWzUyMF1TZWN0 aW9uIDQuMTApLgorCisgICBTbyBub3csIGZvciB0aGUgZmlyc3QgdGltZSwgaXQgaXMgcG9zc2li bGUgdG8gc2VuZCBkaXJlY3RvcnkgdHJlZXMKKyAgIGFtb25nIGFueSBjb21iaW5hdGlvbiBvZiBV TklYLCBET1MsIFdpbmRvd3MsIE9TLzIsIFZNUywgQU9TL1ZTLCBldGMuCisgICBIZXJlJ3MgYW4g ZXhhbXBsZSBzZW5kaW5nIGZpbGVzIGZyb20gYW4gSFAtVVggc3lzdGVtICh3aGVyZSB0ZXh0IGZp bGVzCisgICBhcmUgZW5jb2RlZCBpbiB0aGUgSFAgUm9tYW44IGNoYXJhY3RlciBzZXQpIHRvIGEg UEMgd2l0aCBLOTUgKHdoZXJlCisgICB0ZXh0IGZpbGVzIGFyZSBlbmNvZGVkIGluIENQODUwKToK KworIFNlbmRlcjoKKyAgY2QgeHh4ICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBDRCB0byBy b290IG9mIHNvdXJjZSB0cmVlCisgIHNldCBmaWxlIHR5cGUgYmluYXJ5ICAgICAgICAgICAgIDsg RGVmYXVsdCB0cmFuc2ZlciBtb2RlCisgIHNldCBmaWxlIGNoYXJhY3Rlci1zZXQgaHAtcm9tYW44 IDsgTG9jYWwgY2hhcmFjdGVyIHNldCBmb3IgdGV4dCBmaWxlcworICBzZXQgeGZlciBjaGFyYWN0 ZXItc2V0IGxhdGluMSAgICA7IFRyYW5zZmVyIGNoYXJhY3RlciBzZXQKKyAgc2V0IGZpbGUgcGF0 dGVybnMgb24gICAgICAgICAgICAgOyBFbmFibGUgYXV0b21hdGljIGZpbGUtdHlwZSBzd2l0Y2hp bmcuLi4KKyAgc2V0IGZpbGUgYmluYXJ5LXBhdHRlcm5zICouWiAqLmd6ICoubyAgOyBiYXNlZCBv biB0aGVzZSBwYXR0ZXJucy4uLgorICBzZXQgZmlsZSB0ZXh0LXBhdHRlcm5zICoudHh0ICouYyAq LmggICA7IGZvciBiaW5hcnkgYW5kIHRleHQgZmlsZXMuCisgIHNlbmQgL3JlY3Vyc2l2ZSAqICAg ICAgICAgICAgICAgIDsgU2VuZCBhbGwgdGhlIGZpbGUgaW4gdGhpcyBkaXJlY3RvcnkgdHJlZQor CisgUmVjZWl2ZXI6CisgIGNkIHl5eSAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgQ0QgdG8g cm9vdCBvZiBkZXN0aW5hdGlvbiB0cmVlCisgIHNldCBmaWxlIGNoYXJhY3Rlci1zZXQgY3A4NTAg ICAgIDsgTG9jYWwgY2hhcmFjdGVyIHNldCBmb3IgdGV4dCBmaWxlcworICByZWNlaXZlIC9wYXRo bmFtZXM6cmVsYXRpdmUgICAgICA7IFJlY2VpdmUgd2l0aCBwYXRobmFtZXMKKworICAgTm90ZXM6 CisgICAgICogUmVwbGFjZSAieHh4IiBhbmQgInl5eSIgd2l0aCB0aGUgZGVzaXJlZCBkaXJlY3Rv cmllcy4KKyAgICAgKiBSZXBsYWNlIHRoZSBmaWxlIGNoYXJhY3RlciBzZXRzIGFwcHJvcHJpYXRl bHkuCisgICAgICogQ2hhbmdlIHRoZSBwYXR0ZXJucyBhcyBuZWVkZWQgKG9yIGp1c3QgdXNlIHRo ZSBidWlsdC1pbiBkZWZhdWx0CisgICAgICAgbGlzdHMpLgorICAgICAqIFNFTkQgL1JFQ1VSU0lW RSBhbHNvIGltcGxpZXMgL1BBVEhOQU1FUzpSRUxBVElWRS4KKyAgICAgKiBUaGUgZmlsZSBzZW5k ZXIgdGVsbHMgdGhlIGZpbGUgcmVjZWl2ZXIgdGhlIHRyYW5zZmVyIG1vZGUgb2YgZWFjaAorICAg ICAgIGZpbGUuCisgICAgICogVGhlIGZpbGUgc2VuZGVyIHRlbGxzIHRoZSBmaWxlIHJlY2VpdmVy IHRoZSB0cmFuc2ZlciBjaGFyYWN0ZXIgc2V0LgorICAgICAqIEJ5IGRlZmF1bHQsIGRlc3RpbmF0 aW9uIGZpbGUgZGF0ZXMgd2lsbCBiZSB0aGUgc2FtZSBhcyBvbiB0aGUKKyAgICAgICBzb3VyY2Uu CisgICAgICogTWFueSBvZiB0aGUgc2V0dGluZ3Mgc2hvd24gbWlnaHQgYWxyZWFkeSBiZSBzZXQg YnkgZGVmYXVsdC4KKyAgICAgKiBTZWUgWzUyMV1TZWN0aW9ucyA0LjMsIFs1MjJdNC4xMCwgYW5k IFs1MjNdNC4xNSBmb3IgYWRkaXRpb25hbAorICAgICAgIGV4cGxhbmF0aW9uLgorCisgICBJZiB5 b3UgYXJlIHJlZnJlc2hpbmcgYW4gZXhpc3RpbmcgZGlyZWN0b3J5IG9uIHRoZSBkZXN0aW5hdGlv bgorICAgY29tcHV0ZXIsIHVzZSAic2V0IGZpbGUgY29sbGlzaW9uIHVwZGF0ZSIgb3Igb3RoZXIg YXBwcm9wcmlhdGUgZmlsZQorICAgY29sbGlzaW9uIG9wdGlvbiB0byBoYW5kbGUgZmlsZW5hbWUg Y29sbGlzaW9ucy4KKworNC4xMi4gV2hlcmUgRGlkIE15IEZpbGUgR28/CisKKyAgIE5vdyB0aGF0 IEtlcm1pdCBjYW4gYmUgc3RhcnRlZCBieSBjbGlja2luZyBvbiBkZXNrdG9wIGljb25zICh0aHVz CisgICBvYnNjdXJpbmcgdGhlIGNvbmNlcHQgb2YgImN1cnJlbnQgZGlyZWN0b3J5IiksIGFuZCBj YW4gaGF2ZSBhIGRvd25sb2FkCisgICBkaXJlY3RvcnksIGFuZCBjYW4gY3JlYXRlIGRpcmVjdG9y aWVzIGZvciBpbmNvbWluZyBmaWxlcyBvbiB0aGUgZmx5LAorICAgZXRjLCBzb21ldGltZXMgaXQg aXMgZWFzeSB0byBsb3NlIGEgZmlsZSBhZnRlciB0cmFuc2Zlci4gT2YgY291cnNlLCBpZgorICAg eW91IGtlZXAgYSB0cmFuc2FjdGlvbiBsb2c6CisKKyAgTE9HIFRSQU5TQUNUSU9OUworCisgICBp dCB3aWxsIHJlY29yZCB0aGUgZmF0ZSBhbmQgZmluYWwgcmVzdGluZyBwbGFjZSBvZiBlYWNoIGZp bGUuIEJ1dCBpbgorICAgY2FzZSB5b3UgZGlkIG5vdCBrZWVwIGEgbG9nLCB0aGUgbmV3IGNvbW1h bmQ6CisKKyAgV0hFUkUKKworICAgYWRkZWQgaW4gQy1LZXJtaXQgNy4wLCBnaXZlcyB5b3UgYXMg bXVjaCBpbmZvcm1hdGlvbiBhcyBpdCBoYXMgYWJvdXQKKyAgIHRoZSBsb2NhdGlvbiBvZiB0aGUg bGFzdCBmaWxlcyB0cmFuc2ZlcnJlZCwgaW5jbHVkaW5nIHRoZSBwYXRobmFtZQorICAgcmVwb3J0 ZWQgYnkgdGhlIHJlY2VpdmluZyBLZXJtaXQsIGlmIGFueSwgd2hlbiBDLUtlcm1pdCBpcyB0aGUg c2VuZGVyLgorICAgVGhpcyBpbmZvcm1hdGlvbiB3YXMgYWxzbyBhZGRlZCB0byBTSE9XIEZJTEUg aW4gc29tZXdoYXQgbGVzcyBkZXRhaWwuCisKKzQuMTMuIEZpbGUgT3V0cHV0IEJ1ZmZlciBDb250 cm9sCisKKyAgIChVTklYIG9ubHkpLiBUaGUgbmV3IGNvbW1hbmQgU0VUIEZJTEUgT1VUUFVUIGxl dHMgeW91IGNvbnRyb2wgaG93CisgICBpbmNvbWluZyBmaWxlcyBhcmUgd3JpdHRlbiB0byBkaXNr OgorCisgICBTRVQgRklMRSBPVVRQVVQgQlVGRkVSRUQgWyBzaXplIF0KKyAgICAgICAgICBDaG9v c2VzIGJ1ZmZlcmVkIGZpbGUgb3V0cHV0OyB0aGlzIGlzIHRoZSBkZWZhdWx0LiBVTklYIGRvZXMg aXRzCisgICAgICAgICAgbm9ybWFsIHNvcnQgb2YgZGlzayBidWZmZXJpbmcuIFRoZSBvcHRpb25h bCBzaXplIHNwZWNpZmllcworICAgICAgICAgIEtlcm1pdCdzIG93biBmaWxlIG91dHB1dCBidWZm ZXIgc2l6ZSwgYW5kIHRoZXJlZm9yZSB0aGUKKyAgICAgICAgICBmcmVxdWVuY3kgb2YgZGlzayBh Y2Nlc3NlcyAod3JpdGUoKSBzeXN0ZW0gY2FsbHMpIC0tIHRoZSBiaWdnZXIKKyAgICAgICAgICB0 aGUgc2l6ZSwgdGhlIGZld2VyIHRoZSBkaXNrIGFjY2Vzc2VzLgorCisgICBTRVQgRklMRSBPVVRQ VVQgVU5CVUZGRVJFRCBbIHNpemUgXQorICAgICAgICAgIFRoaXMgZm9yY2VzIGVhY2ggZmlsZSBv dXRwdXQgd3JpdGUoKSBjYWxsIHRvIGFjdHVhbGx5IGNvbW1pdCB0aGUKKyAgICAgICAgICBkYXRh IHRvIGRpc2sgaW1tZWRpYXRlbHkuIENob29zaW5nIHRoaXMgb3B0aW9uIHdpbGwgdXN1YWxseSBz bG93CisgICAgICAgICAgZmlsZSByZWNlcHRpb24gZG93bi4KKworICAgU0VUIEZJTEUgT1VUUFVU IEJMT0NLSU5HCisgICAgICAgICAgV3JpdGUoKSBjYWxscyBzaG91bGQgbm90IHJldHVybiB1bnRp bCB0aGV5IGFyZSBjb21wbGV0ZS4gVGhpcyBpcworICAgICAgICAgIHRoZSBub3JtYWwgc2V0dGlu ZywgYW5kIGl0IGxldHMgS2VybWl0IGRldGVjdCBkaXNrLXdyaXRlIGVycm9ycworICAgICAgICAg IGltbWVkaWF0ZWx5LgorCisgICBTRVQgRklMRSBPVVRQVVQgTk9OQkxPQ0tJTkcKKyAgICAgICAg ICBXcml0ZSgpIGNhbGxzIHNob3VsZCByZXR1cm4gaW1tZWRpYXRlbHkuIFRoaXMgY2FuIHNwZWVk IHVwIGZpbGUKKyAgICAgICAgICByZWNlcHRpb24sIGJ1dCBhbHNvIGRlbGF5IHRoZSBkZXRlY3Rp b24gb2YgZGlzay13cml0ZSBlcnJvcnMuCisKKyAgIEV4cGVyaW1lbnRhdGlvbiB3aXRoIHRoZXNl IHBhcmFtZXRlcnMgc2hvdWxkIGJlIGhhcm1sZXNzLCBhbmQgbWlnaHQgKG9yCisgICBtaWdodCBu b3QpIGhhdmUgYSBwZXJjZXB0aWJsZSwgZXZlbiBkcmFtYXRpYywgZWZmZWN0IG9uIHBlcmZvcm1h bmNlLgorCis0LjE0LiBJbXByb3ZlZCBSZXNwb25zaXZlbmVzcworCisgICBJbiB2ZXJzaW9uIDcu MCwgQy1LZXJtaXQncyBmaWxlLXRyYW5zZmVyIHByb3RvY29sIGVuZ2luZSBoYXMgYmVlbiB0dW5l ZAorICAgZm9yIGFkZGl0aW9uYWwgc3BlZWQgYW5kIHJlc3BvbnNpdmVuZXNzLgorCisgICAgICog QmluYXJ5LW1vZGUgdHJhbnNmZXJzIG92ZXIgOC1iaXQgY29ubmVjdGlvbnMsIGEgdmVyeSBjb21t b24gY2FzZSwKKyAgICAgICBhcmUgbm93IGhhbmRsZWQgaW4gYSBzcGVjaWFsIHdheSB0aGF0IG1p bmltaXplcyBvdmVyaGVhZC4KKyAgICAgKiBTRVQgVFJBTlNGRVIgQ1JDLUNBTENVTEFUSU9OIGlz IG5vdyBPRkYgYnkgZGVmYXVsdCwgcmF0aGVyIHRoYW4gT04uCisgICAgICAgKFRoaXMgYWZmZWN0 cyBvbmx5IHRoZSBvdmVyYWxsIHBlci10cmFuc2ZlciBDUkMsIFx2KGNyYzE2KSwgbm90IHRoZQor ICAgICAgIHBlci1wYWNrZXQgQ1JDcykKKyAgICAgKiBDb25uZWN0aW9uIGxvc3MgZHVyaW5nIGZp bGUgdHJhbnNmZXIgaXMgbm93IGRldGVjdGVkIGltbWVkaWF0ZWx5IGluCisgICAgICAgbW9zdCBj YXNlcyBvbiBJbnRlcm5ldCBjb25uZWN0aW9ucyBhbmQgb24gc2VyaWFsIGNvbm5lY3Rpb25zIHdo ZW4KKyAgICAgICBDQVJSSUVSLVdBVENIIGlzIG5vdCBzZXQgdG8gT0ZGLgorCis0LjE1LiBEb3Vi bGluZyBhbmQgSWdub3JpbmcgQ2hhcmFjdGVycyBmb3IgVHJhbnNwYXJlbmN5CisKKyAgIFRoZSBm b2xsb3dpbmcgY29tbWFuZHMgd2VyZSBhZGRlZCBpbiA3LjAsIHByaW1hcmlseSB0byBhbGxvdyBz dWNjZXNzZnVsCisgICBmaWxlIHRyYW5zZmVyIHRocm91Z2ggQVJQQW5ldCBUQUNzIGFuZCB3aXRo IEhvbmV5d2VsbCBEUFM2IHN5c3RlbXMsIGJ1dAorICAgY2FuIGJlIHVzZWQgaW4gYW55IHNldHRp bmcgd2hlcmUgdGhleSBtaWdodCBiZSBuZWVkZWQ6CisKKyAgIFNFVCBTRU5EIERPVUJMRS1DSEFS IHsgWyBjaGFyIFsgY2hhciBbIC4uLiBdIF0gXSwgTk9ORSB9CisgICAgICAgICAgVGVsbHMgQy1L ZXJtaXQgdG8gZG91YmxlIHRoZSBzcGVjaWZpZWQgY2hhcmFjdGVycyAodXNlIGRlY2ltYWwKKyAg ICAgICAgICBub3RhdGlvbikgaW4gcGFja2V0cyB0aGF0IGl0IHNlbmRzLiBGb3IgZXhhbXBsZSwg aWYgeW91IGFyZQorICAgICAgICAgIHNlbmRpbmcgZmlsZXMgdGhyb3VnaCBhIGRldmljZSB0aGF0 IHVzZXMgQCBhcyBhbiBlc2NhcGUKKyAgICAgICAgICBjaGFyYWN0ZXIsIGJ1dCBhbGxvd3MgeW91 IHRvIHNlbmQgYSBzaW5nbGUgY29weSBvZiBAIHRocm91Z2ggYnkKKyAgICAgICAgICBkb3VibGlu ZyBpdCwgdXNlICJzZXQgc2VuZCBkb3VibGUgNjQiLgorCisgICBTRVQgUkVDRUlWRSBJR05PUkUt Q0hBUiBbIGNoYXIgWyBjaGFyIFsgLi4uIF0gXSBdCisgICAgICAgICAgVGVsbHMgQy1LZXJtaXQg dG8gaWdub3JlIHRoZSBzcGVjaWZpZWQgY2hhcmFjdGVyKHMpIGluIGluY29taW5nCisgICAgICAg ICAgcGFja2V0cy4gVXNlIHRoaXMsIGZvciBleGFtcGxlLCB3aGVuIHNvbWV0aGluZyBiZXR3ZWVu IHRoZQorICAgICAgICAgIHNlbmRlciBhbmQgcmVjZWl2ZXIgaXMgaW5zZXJ0aW5nIGxpbmVmZWVk cyBmb3Igd3JhcHBpbmcsIE5VTHMKKyAgICAgICAgICBmb3IgcGFkZGluZywgZXRjLgorCis0LjE2 LiBOZXcgRmlsZS1UcmFuc2ZlciBEaXNwbGF5IEZvcm1hdHMKKworICAgU0VUIFRSQU5TRkVSIERJ U1BMQVkgeyBCUklFRiwgQ1JULCBGVUxMU0NSRUVOLCBOT05FLCBTRVJJQUwgfQorICAgICAgICAg IFNlbGVjdHMgdGhlIGZpbGUtdHJhbnNmZXIgZGlzcGxheSBmb3JtYXQuCisKKyAgIEJSSUVGIGlz IHRoZSBuZXcgb25lLiBUaGlzIHdyaXRlcyBvbmUgbGluZSB0byB0aGUgc2NyZWVuIHBlciBmaWxl LAorICAgc2hvd2luZyB0aGUgZmlsZSdzIG5hbWUsIHRyYW5zZmVyIG1vZGUsIHNpemUsIHRoZSBz dGF0dXMgb2YgdGhlCisgICB0cmFuc2ZlciwgYW5kIHdoZW4gdGhlIHRyYW5zZmVyIGlzIHN1Y2Nl c3NmdWwsIHRoZSBlZmZlY3RpdmUgZGF0YSByYXRlCisgICBpbiBjaGFyYWN0ZXJzIHBlciBzZWNv bmQgKENQUykuIEV4YW1wbGU6CisKKyAgU0VORCBja2NmbjMubyAoYmluYXJ5KSAoNTkyMTYgYnl0 ZXMpOiBPSyAoMC4xMDQgc2VjLCA1NzAyMDYgY3BzKQorICBTRU5EIGNrY2Zucy5vIChiaW5hcnkp ICgxMTQ0MzYgYnl0ZXMpOiBPSyAoMC4xNDggc2VjLCA3NzIwMDYgY3BzKQorICBTRU5EIGNrY21h aS5jICh0ZXh0KSAoNzkxNDcgYnl0ZXMpOiBPSyAoMC4xODAgc2VjLCA0Mzg1NDMgY3BzKQorICBT RU5EIGNrY21haS5vIChiaW5hcnkpICgzNTM5NiBieXRlcyk6IE9LICgwLjA2MCBzZWMsIDU4NzQ5 NCBjcHMpCisgIFNFTkQgY2tjbmV0Lm8gKGJpbmFyeSkgKDYyNzcyIGJ5dGVzKTogUkVGVVNFRAor ICBTRU5EIGNrY3Byby5vIChiaW5hcnkpICgxMjE0NDggYnl0ZXMpOiBPSyAoMC4xNzMgc2VjLCA3 MDM5MjggY3BzKQorICBTRU5EIGNrY3Byby53ICh0ZXh0KSAoNjM2ODcgYnl0ZXMpOiBPSyAoMC4x NDEgc2VjLCA0NTMwNTkgY3BzKQorICBTRU5EIG1ha2VmaWxlICh0ZXh0KSAoMTg2NjM2IGJ5dGVz KTogT0sgKDAuNDQ0IHNlYywgNDIwNDcxIGNwcykKKyAgU0VORCB3ZXJtaXQgKGJpbmFyeSkgKDEw NjQ5NjAgYnl0ZXMpOiBPSyAoMi4yMDcgc2VjLCA0ODI0NzcgY3BzKQorCisgICBOb3RlIHRoYXQg dHJhbnNmZXIgdGltZXMgYXJlIG5vdyBvYnRhaW5lZCBpbiBmcmFjdGlvbmFsIHNlY29uZHMsIHJh dGhlcgorICAgdGhhbiB3aG9sZSBzZWNvbmRzLCBzbyB0aGUgQ1BTIGZpZ3VyZXMgYXJlIG1vcmUg YWNjdXJhdGUgKHRoZSBkaXNwbGF5CisgICBzaG93cyAzIGRlY2ltYWwgcGxhY2VzLCBidXQgaW50 ZXJuYWxseSB0aGUgZmlndXJlIGlzIGdlbmVyYWxseSBwcmVjaXNlCisgICB0byB0aGUgbWljcm9z ZWNvbmQpLgorCis0LjE3LiBOZXcgVHJhbnNhY3Rpb24gTG9nIEZvcm1hdHMKKworICAgVGhlIG5l dyBjb21tYW5kOgorCisgIFNFVCBUUkFOU0FDVElPTi1MT0cgeyBWRVJCT1NFLCBGVFAsIEJSSUVG IFsgc2VwYXJhdG9yIF0gfQorCisgICBsZXRzIHlvdSBjaG9vc2UgdGhlIGZvcm1hdCBvZiB0aGUg dHJhbnNhY3Rpb24gbG9nLiBWRVJCT1NFICh0aGUKKyAgIGRlZmF1bHQpIGluZGljYXRlcyB0aGUg dHJhZGl0aW9uYWwgZm9ybWF0IGRlc2NyaWJlZCBpbiB0aGUgYm9vay4gQlJJRUYKKyAgIGFuZCBG VFAgYXJlIG5ldy4gVGhpcyBjb21tYW5kIG11c3QgYmUgZ2l2ZW4gcHJpb3IgdG8gdGhlIExPRwor ICAgVFJBTlNBQ1RJT04gY29tbWFuZCBpZiBhIG5vbi1WRVJCT1NFIHR5cGUgaXMgZGVzaXJlZC4K KworNC4xNy4xLiBUaGUgQlJJRUYgRm9ybWF0CisKKyAgIEJSSUVGIGNob29zZXMgYSBvbmUtbGlu ZSBwZXIgZmlsZSBmb3JtYXQgc3VpdGFibGUgZm9yIGRpcmVjdAorICAgaW1wb3J0YXRpb24gaW50 byBkYXRhYmFzZXMgbGlrZSBJbmZvcm1peCwgT3JhY2xlLCBvciBTeWJhc2UsIGluIHdoaWNoOgor CisgICAgICogRWFjaCByZWNvcmQgaGFzIDggZmllbGRzLgorICAgICAqIEZpZWxkcyBhcmUgc2Vw YXJhdGVkIGJ5IGEgbm9uLWFscGhhbnVtZXJpYyBzZXBhcmF0b3IgY2hhcmFjdGVyLgorICAgICAq IFRoZSBkZWZhdWx0IHNlcGFyYXRvciBjaGFyYWN0ZXIgaXMgY29tbWEgKCwpLgorICAgICAqIEFu eSBmaWVsZCBjb250YWluaW5nIHRoZSBzZXBhcmF0b3IgY2hhcmFjdGVyIGlzIGVuY2xvc2VkIGlu CisgICAgICAgZG91YmxlcXVvdGVzLgorICAgICAqIFRoZSBmaW5hbCBmaWVsZCBpcyBlbmNsb3Nl ZCBpbiBkb3VibGVxdW90ZXMuCisKKyAgIFRoZSBmaWVsZHMgYXJlOgorCisgICAgMS4gRGF0ZSBp biB5eXl5bW1kZCBmb3JtYXQKKyAgICAyLiBUaW1lIGluIGhoOm1tOnNzIGZvcm1hdAorICAgIDMu IEFjdGlvbjogU0VORCBvciBSRUNWCisgICAgNC4gVGhlIGxvY2FsIGZpbGVuYW1lCisgICAgNS4g VGhlIHNpemUgb2YgdGhlIGZpbGUKKyAgICA2LiBUaGUgdHJhbnNmZXIgbW9kZSAodGV4dCwgYmlu YXJ5LCBpbWFnZSwgbGFiZWxlZCkKKyAgICA3LiBUaGUgc3RhdHVzIG9mIHRoZSB0cmFuc2Zlcjog T0sgb3IgRkFJTEVECisgICAgOC4gQWRkaXRpb25hbCBzdGF0dXMtZGVwZW5kZW50IGluZm8sIGlu IGRvdWJsZXF1b3Rlcy4KKworICAgRXhhbXBsZXM6CisKKyAgMjAwMDAyMDgsMTI6MDg6NTIsUkVD ViwvdS9vbGdhL29vZmEudHh0LDUyNDYsdGV4dCxPSywiMC4yODRzZWMgMTg0NDNjcHMiCisgIDIw MDAwMjA4LDEyOjA5OjMxLFNFTkQsL3Uvb2xnYS9vb2ZhLmV4ZSwzMjc2OCxiaW5hcnksT0ssIjEu MjQzc2VjIDI2MzYyY3BzIgorICAyMDAwMDIwOCwxMjoxMDowMixTRU5ELCIvdS9vbGdhL2EsYiIs MTAxMzAsdGV4dCxGQUlMRUQsIlJlZnVzZWQ6IGRhdGUiCisKKyAgIE5vdGUgaG93IHRoZSBmaWxl bmFtZSBpcyBlbmNsb3NlZCBpbiBkb3VibGVxdW90ZXMgaW4gdGhlIGZpbmFsIGV4YW1wbGUsCisg ICBiZWNhdXNlIGl0IGNvbnRhaW5zIGEgY29tbWEuCisKKyAgIFRvIG9idGFpbiBCUklFRiBmb3Jt YXQsIHlvdSBtdXN0IGdpdmUgdGhlIFNFVCBUUkFOU0FDVElPTi1MT0cgQlJJRUYKKyAgIGNvbW1h bmQgYmVmb3JlIHRoZSBMT0cgVFJBTlNBQ1RJT05TIGNvbW1hbmQuIChJZiB5b3UgZ2l2ZSB0aGVt IGluIHRoZQorICAgb3Bwb3NpdGUgb3JkZXIsIGEgaGVhZGluZyBpcyB3cml0dGVuIHRvIHRoZSBs b2cgYnkgdGhlIExPRyBjb21tYW5kLikKKworNC4xNy4yLiBUaGUgRlRQIEZvcm1hdAorCisgICBT RVQgVFJBTlNBQ1RJT04tTE9HIEZUUCAoYXZhaWxhYmxlIG9ubHkgaW4gVU5JWCkgY2hvb3NlcyBh IGZvcm1hdCB0aGF0CisgICBpcyBjb21wYXRpYmxlIHdpdGggdGhlIFdVLUZUUEQgKFdhc2hpbmd0 b24gVW5pdmVyc2l0eSBGVFAgZGFlbW9uKSBsb2csCisgICBhbmQgc28gY2FuIGJlIHByb2Nlc3Nl ZCBieSBhbnkgc29mdHdhcmUgdGhhdCBwcm9jZXNzZXMgdGhlIFdVLUZUUEQgbG9nLgorICAgSXQg bG9ncyBvbmx5IHRyYW5zZmVycyBpbiBhbmQgb3V0LCBib3RoIHN1Y2Nlc3NmdWwgYW5kIGZhaWxl ZCAoYnV0CisgICBzdWNjZXNzIG9yIGZhaWx1cmUgaXMgbm90IGluZGljYXRlZCwgZHVlIHRvIGxh Y2sgb2YgYSBmaWVsZCBpbiB0aGUKKyAgIFdVLUZUUEQgbG9nIGZvcm1hdCBmb3IgdGhpcyBwdXJw b3NlKS4gTm9uLXRyYW5zZmVyIGV2ZW50cyBhcmUgbm90CisgICByZWNvcmRlZC4KKworICAgVW5s aWtlIG90aGVyIGxvZ3MsIHRoZSBGVFAtZm9ybWF0IHRyYW5zYWN0aW9uIGxvZyBpcyBvcGVuZWQg aW4gYXBwZW5kCisgICBtb2RlIGJ5IGRlZmF1bHQuIFRoaXMgYWxsb3dzIHlvdSB0byBlYXNpbHkg a2VlcCBhIHJlY29yZCBvZiBhbGwgeW91cgorICAga2VybWl0IHRyYW5zZmVycywgYW5kIGl0IGFs c28gYWxsb3dzIHRoZSBzYW1lIGxvZyB0byBiZSBzaGFyZWQgYnkKKyAgIG11bHRpcGxlIHNpbXVs dGFuZW91cyBLZXJtaXQgcHJvY2Vzc2VzIG9yIChwZXJtaXNzaW9ucyBwZXJtaXR0aW5nKQorICAg dXNlcnMuIFlvdSBjYW4sIG9mIGNvdXJzZSwgZm9yY2UgY3JlYXRpb24gb2YgYSBuZXcgbG9nZmls ZSBieQorICAgc3BlY2lmeWluZyB0aGUgTkVXIGtleXdvcmQgYWZ0ZXIgdGhlIGZpbGVuYW1lLCBl LmcuCisKKyAgbG9nIHRyYW5zYWN0aW9ucyBvb2ZhLmxvZyBuZXcKKworICAgQWxsIHJlY29yZHMg aW4gdGhlIEZUUC1zdHlsZSBsb2cgYXJlIGluIGEgY29uc2lzdGVudCBmb3JtYXQuIFRoZSBmaXJz dAorICAgZmllbGQgaXMgZml4ZWQtbGVuZ3RoIGFuZCBjb250YWlucyBzcGFjZXM7IHN1YnNlcXVl bnQgZmllbGRzIGFyZQorICAgdmFyaWFibGUgbGVuZ3RoLCBjb250YWluIG5vIHNwYWNlcywgYW5k IGFyZSBzZXBhcmF0ZWQgYnkgb25lIG9yIG1vcmUKKyAgIHNwYWNlcy4gVGhlIGZpZWxkcyBhcmU6 CisKKyAgIFRpbWVzdGFtcAorICAgICAgICAgIFRoaXMgaXMgYW4gYXNjdGltZS1zdHlsZSB0aW1l c3RhbXAsIGV4YW1wbGU6ICJXZWQgU2VwIDE2CisgICAgICAgICAgMjA6MTk6MDUgMTk5OSIgSXQg aXMgYWx3YXlzIGV4YWN0bHkgMjQgY2hhcmFjdGVycyBsb25nLCBhbmQgdGhlCisgICAgICAgICAg c3ViZmllbGRzIGFyZSBhbHdheXMgaW4gZml4ZWQgcG9zaXRpb25zLgorCisgICBFbGFwc2VkIHRp bWUKKyAgICAgICAgICBUaGUgd2hvbGUgbnVtYmVyIG9mIHNlY29uZHMgcmVxdWlyZWQgdG8gdHJh bnNmZXIgdGhlIGZpbGUsIGFzIGEKKyAgICAgICAgICBzdHJpbmcgb2YgZGVjaW1hbCBkaWdpdHMs IGUuZy4gIjI0Ii4KKworICAgQ29ubmVjdGlvbgorICAgICAgICAgIFRoZSBuYW1lIG9mIHRoZSBu ZXR3b3JrIGhvc3QgdG8gd2hpY2ggQy1LZXJtaXQgaXMgY29ubmVjdGVkLCBvcgorICAgICAgICAg IHRoZSBuYW1lIG9mIHRoZSBzZXJpYWwgZGV2aWNlIHRocm91Z2ggd2hpY2ggaXQgaGFzIGRpYWxl ZCAob3IKKyAgICAgICAgICBoYXMgYSBkaXJlY3QgY29ubmVjdGlvbiksIG9yICIvZGV2L3R0eSIg Zm9yIHRyYW5zZmVycyBpbiByZW1vdGUKKyAgICAgICAgICBtb2RlLgorCisgICBCeXRlcyB0cmFu c2ZlcnJlZAorICAgICAgICAgIFRoZSBudW1iZXIgb2YgYnl0ZXMgdHJhbnNmZXJyZWQsIGRlY2lt YWwgZGlnaXRzLCBlLmcuICIxNTM3OTA0Ii4KKworICAgRmlsZW5hbWUKKyAgICAgICAgICBUaGUg bmFtZSBvZiB0aGUgZmlsZSB0aGF0IHdhcyB0cmFuc2ZlcnJlZCwgZS5nLgorICAgICAgICAgICIv cHViL2Z0cC9rZXJtaXQvYS9SRUFETUUuVFhUIi4gSWYgdGhlIGZpbGVuYW1lIGNvbnRhaW5zIGFu eQorICAgICAgICAgIHNwYWNlcyBvciBjb250cm9sIGNoYXJhY3RlcnMsIGVhY2ggc3VjaCBjaGFy YWN0ZXIgaXMgcmVwbGFjZWQgYnkKKyAgICAgICAgICBhbiB1bmRlcnNjb3JlICgnXycpIGNoYXJh Y3Rlci4KKworICAgTW9kZQorICAgICAgICAgIFRoZSBsZXR0ZXIgJ2InIGlmIHRoZSBmaWxlIHdh cyB0cmFuc2ZlcnJlZCBpbiBiaW5hcnkgbW9kZSwgb3IKKyAgICAgICAgICAnYScgaWYgaXQgd2Fz IHRyYW5zZmVycmVkIGluIHRleHQgKEFTQ0lJKSBtb2RlLgorCisgICBPcHRpb25zCisgICAgICAg ICAgVGhpcyBmaWVsZCBhbHdheXMgY29udGFpbnMgYW4gdW5kZXJzY29yZSAoJ18nKSBjaGFyYWN0 ZXIuCisKKyAgIERpcmVjdGlvbgorICAgICAgICAgIFRoZSBsZXR0ZXIgJ28nIGlmIHRoZSBmaWxl IHdhcyB0cmFuc2ZlcnJlZCBPdXQsIGFuZCAnaScgaWYgdGhlCisgICAgICAgICAgZmlsZSB3YXMg dHJhbnNmZXJyZWQgSW4uCisKKyAgIFVzZXIgY2xhc3MKKyAgICAgICAgICBUaGUgbGV0dGVyICdy JyBpbmRpY2F0ZXMgdGhlIGZpbGUgd2FzIHRyYW5zZmVycmVkIGJ5IGEgUmVhbAorICAgICAgICAg IHVzZXIuCisKKyAgIFVzZXIgaWRlbnRpZmljYXRpb24KKyAgICAgICAgICBUaGUgSUQgb2YgdGhl IHVzZXIgd2hvIHRyYW5zZmVycmVkIHRoZSBmaWxlLgorCisgICBTZXJ2ZXIgaWRlbnRpZmljYXRp b24KKyAgICAgICAgICBUaGUgc3RyaW5nICJrZXJtaXQiLiBUaGlzIGRpc3Rpbmd1aXNoZXMgYSBL ZXJtaXQgdHJhbnNmZXIgbG9nCisgICAgICAgICAgcmVjb3JkIGZyb20gYSBXVS1GVFBEIHJlY29y ZCwgd2hpY2ggY29udGFpbnMgImZ0cCIgaW4gdGhpcworICAgICAgICAgIGZpZWxkLgorCisgICBB dXRoZW50aWNhdGlvbiBjbGFzcworICAgICAgICAgIFRoZSBkaWdpdCAnMScgaWYgd2Uga25vdyB0 aGUgdXNlcidzIElEIG9uIHRoZSBjbGllbnQgc3lzdGVtLAorICAgICAgICAgIG90aGVyd2lzZSAn MCcuIEN1cnJlbnRseSwgYWx3YXlzICcwJy4KKworICAgQXV0aGVudGljYXRlZCB1c2VyCisgICAg ICAgICAgSWYgdGhlIGF1dGhlbnRpY2F0aW9uIGNsYXNzIGlzICcxJywgdGhpcyBpcyB0aGUgdXNl cidzIElEIG9uIHRoZQorICAgICAgICAgIGNsaWVudCBzeXN0ZW0uIE90aGVyd2lzZSBpdCBpcyBh biBhc3RlcmlzayAoJyonKS4gQ3VycmVudGx5IGl0CisgICAgICAgICAgaXMgYWx3YXlzIGFuIGFz dGVyaXNrLgorCisgICBFeGFtcGxlczoKKworICBUaHUgT2N0IDIyIDE3OjQyOjQ4IDE5OTggMCAq IDk0IC91c3Ivb2xnYS9uZXcueCBhIF8gaSByIG9sZ2Ega2VybWl0IDAgKgorICBUaHUgT2N0IDIy IDE3OjUxOjI5IDE5OTggMSAqIDE0Nzg5OSAvdXNyL29sZ2EvdGVzdC5jIGEgXyBvIHIgb2xnYSBr ZXJtaXQgMCAqCisgIFRodSBPY3QgMjIgMTc6NTE6NDQgMTk5OCAxICogMjM1IC91c3Ivb2xnYS90 ZXN0Lm8gYiBfIGkgciBvbGdhIGtlcm1pdCAwICoKKyAgRnJpIE9jdCAyMyAxMjoxMDoyNSAxOTk4 IDAgKiAyMzUgL3Vzci9vbGdhL3gua3NjIGEgXyBvIHIgb2xnYSBrZXJtaXQgMCAqCisKKyAgIE5v dGUgdGhhdCBhbiBmdHAtZm9ybWF0IHRyYW5zYWN0aW9uIGxvZyBjYW4gYWxzbyBiZSBzZWxlY3Rl ZCBvbiB0aGUKKyAgIEtlcm1pdCBjb21tYW5kIGxpbmUgYXMgZm9sbG93czoKKworICBrZXJtaXQg LS14ZmVyZmlsZTpmaWxlc3BlYworCisgICBUaGlzIGlzIGVxdWl2YWxlbnQgdG86CisKKyAgU0VU IFRSQU5TQUNUSU9OLUxPRyBGVFAKKyAgTE9HIFRSQU5TQUNUSU9OUyBmaWxlc3BlYyBBUFBFTkQK KworICAgQ29uY2VpdmFibHkgaXQgY291bGQgYmUgcG9zc2libGUgdG8gaGF2ZSBhIHN5c3RlbS13 aWRlIHNoYXJlZCBLZXJtaXQKKyAgIGxvZywgZXhjZXB0IHRoYXQgVU5JWCBsYWNrcyBhbnkgbm90 aW9uIG9mIGFuIGFwcGVuZC1vbmx5IGZpbGU7IHRodXMgYW55CisgICB1c2VyIHdobyBjb3VsZCBh cHBlbmQgdG8gdGhlIGxvZyBjb3VsZCBhbHNvIGRlbGV0ZSBpdCAob3IgYWx0ZXIgaXQpLgorICAg VGhpcyBwcm9ibGVtIGNvdWxkIGJlIHdvcmtlZCBhcm91bmQgdXNpbmcgc2V0dWlkL3NldGdpZCB0 cmlja3MsIGJ1dAorICAgdGhlc2Ugd291bGQgbW9zdCBsaWtlbHkgaW50ZXJmZXJlIHdpdGggdGhl IG90aGVyIHNldHVpZC9zZXRnaWQgdHJpY2tzCisgICBDLUtlcm1pdCBtdXN0IHVzZSBmb3IgZ2V0 dGluZyBhdCBkaWFsb3V0IGRldmljZXMgYW5kIFVVQ1AgbG9nZmlsZXMuCisKKzQuMTguIFVucHJl Zml4aW5nIE5VTAorCisgICBBcyBvZiA2LjEuMTkzIEFscGhhLjEwLCBDLUtlcm1pdCBjYW4gZmlu YWxseSBzZW5kIGFuZCByZWNlaXZlCisgICBmaWxlLXRyYW5zZmVyIHBhY2tldHMgaW4gd2hpY2gg TlVMIChBU0NJSSAwKSBpcyB1bnByZWZpeGVkIChubyBtb3JlCisgICBOVUwtdGVybWluYXRlZCBw YWNrZXRzISkuIE5VTCBpcywgb2YgY291cnNlLCBleHRyZW1lbHkgcHJldmFsZW50IGluCisgICBi aW5hcnkgZmlsZXMgc3VjaCBhcyBleGVjdXRhYmxlcywgYW5kIHRoaXMgaGFzIGJlZW4gYSBzaWdu aWZpY2FudAorICAgc291cmNlIG9mIHBhY2tldCBvdmVyaGVhZC4gRm9yIGV4YW1wbGUsIHdoZW4g dHJhbnNmZXJyaW5nIGl0c2VsZiAodGhlCisgICBTdW5PUyBDLUtlcm1pdCBleGVjdXRhYmxlKSB3 aXRoIG1pbmltYWwgcHJlZml4aW5nIGFuZCA5MDAwLWJ5dGUKKyAgIHBhY2tldHMsIHdlIHNlZToK KworICBGaWxlIHNpemU6ICAgICAgICAgICAgICAgICAgICAgICAxMDY0OTYwCisgIFBhY2tldCBj aGFycyB3aXRoIDAgcHJlZml4ZWQ6ICAgIDExOTk2MjkgIG92ZXJoZWFkID0gMTIuNjUlCisgIFBh Y2tldCBjaGFycyB3aXRoIDAgdW5wcmVmaXhlZDogIDEwNjIzOTMgIG92ZXJoZWFkID0gLTAuMDMl CisKKyAgIFRyYW5zZmVyIHJhdGVzIGdvIHVwIGFjY29yZGluZ2x5LCBub3Qgb25seSBiZWNhdXNl IG9mIHRoZSByZWR1Y2VkCisgICBhbW91bnQgb2YgaS9vLCBidXQgYWxzbyBiZWNhdXNlIGxlc3Mg Y29tcHV0YXRpb24gaXMgcmVxdWlyZWQgb24gZWFjaAorICAgZW5kLgorCis0LjE5LiBDbGVhci1D aGFubmVsIFByb3RvY29sCisKKyAgIE5vdyB0aGF0IEMtS2VybWl0IGl0c2VsZiBpcyBjYXBhYmxl IG9mIHNlbmRpbmcgYW5kIHJlY2VpdmluZyBhbnkgYnl0ZQorICAgYXQgYWxsIG9uIGEgY2xlYXIg Y2hhbm5lbCAoWzUyNF1TZWN0aW9uIDQuMTgpLCBpdCBpcywgZm9yIHRoZSBmaXJzdAorICAgdGlt ZSwgaW4gYSBwb3NpdGlvbiB0byBuZWdvdGlhdGUgYSBjbGVhciBjaGFubmVsIHdpdGggdGhlIG90 aGVyIEtlcm1pdCwKKyAgIGdpdmluZyBpdCBwZXJtaXNzaW9uIChidXQgbm90IHJlcXVpcmluZyBp dCkgdG8gdW5wcmVmaXggYW55IGFuZCBhbGwKKyAgIGNoYXJhY3RlcnMgdGhhdCBpdCBrbm93cyBh cmUgc2FmZS4gSW4gZ2VuZXJhbCB0aGlzIG1lYW5zIGFsbCBidXQgdGhlCisgICBLZXJtaXQgc3Rh cnQtb2YtcGFja2V0IGNoYXJhY3RlciAobm9ybWFsbHkgQ3RybC1BKSwgQ2FycmlhZ2UgUmV0dXJu CisgICAobm90IG9ubHkgS2VybWl0J3MgZW5kLW9mLXBhY2tldCBjaGFyYWN0ZXIsIGJ1dCBhbHNv IHRyZWF0ZWQgc3BlY2lhbGx5CisgICBvbiBUZWxuZXQgTlZUIGxpbmtzKSwgYW5kIElBQyAoMjU1 LCBhbHNvIHNwZWNpYWwgdG8gVGVsbmV0KS4KKworICAgQnkgZGVmYXVsdCwgQy1LZXJtaXQgd2ls bCBzYXkgaXQgaGFzIGEgY2xlYXIgY2hhbm5lbCBvbmx5IGlmIGl0IGhhcworICAgb3BlbmVkIGEg VENQIHNvY2tldC4gU2luY2UgdGhlIEtlcm1pdCBwcm9ncmFtIG9uIHRoZSBmYXIgZW5kIG9mIGEK KyAgIFRDUC9JUCBjb25uZWN0aW9uIGdlbmVyYWxseSBkb2VzIG5vdCBrbm93IGl0IGhhcyBhIFRD UC9JUCBjb25uZWN0aW9uLAorICAgaXQgd2lsbCBub3QgYW5ub3VuY2UgYSBjbGVhciBjaGFubmVs IHVubGVzcyBpdCBoYXMgYmVlbiB0b2xkIHRvIGRvIHNvLgorICAgVGhlIGNvbW1hbmQgaXM6CisK KyAgIFNFVCBDTEVBUi1DSEFOTkVMIHsgT04sIE9GRiwgQVVUTyB9CisKKyAgIEFVVE8gaXMgdGhl IGRlZmF1bHQsIG1lYW5pbmcgdGhhdCB0aGUgY2xlYXItY2hhbm5lbCBzdGF0dXMgaXMKKyAgIGRl dGVybWluZWQgYXV0b21hdGljYWxseSBmcm9tIHRoZSB0eXBlIG9mIGNvbm5lY3Rpb24uIE9OIG1l YW5zIHRvCisgICBhbm5vdW5jZSBhIGNsZWFyIGNoYW5uZWwsIE9GRiBtZWFucyBub3QgdG8gYW5u b3VuY2UgaXQuIFVzZSBTSE9XCisgICBTVFJFQU1JTkcgKFs1MjVdU2VjdGlvbiA0LjIwKSB0byBz ZWUgdGhlIGN1cnJlbnQgQ0xFQVItQ0hBTk5FTCBzdGF0dXMuCisgICBTeW5vbnltOiBTRVQgQ0xF QVJDSEFOTkVMLgorCisgICBDTEVBUi1DSEFOTkVMIGlzIGFsc28gc2V0IGlmIHlvdSBzdGFydCBD LUtlcm1pdCB3aXRoIHRoZSAtSSBzd2l0Y2ggKHNlZQorICAgWzUyNl1TZWN0aW9uIDQuMjApLgor CisgICBXaGVuZXZlciBhIGNsZWFyIGNoYW5uZWwgaXMgbmVnb3RpYXRlZCwgdGhlIHJlc3VsdGlu ZyBjb250cm9sLWNoYXJhY3RlcgorICAgdW5wcmVmaXhpbmcgaXMgInN0aWNreSI7IHRoYXQgaXMs IGl0IHJlbWFpbnMgaW4gZWZmZWN0IGFmdGVyIHRoZQorICAgdHJhbnNmZXIgc28geW91IGNhbiB1 c2UgU0hPVyBDT05UUk9MIHRvIHNlZSB3aGF0IHdhcyBuZWdvdGlhdGVkLgorCisgICBZb3UgY2Fu IGFsc28gc2VlIHdoZXRoZXIgYSBjbGVhciBjaGFubmVsIHdhcyBuZWdvdGlhdGVkIGluIHRoZQor ICAgU1RBVElTVElDUyAvVkVSQk9TRSBEaXNwbGF5LgorCisgICBUaGUgYWR2YW50YWdlIG9mIHRo ZSBjbGVhciBjaGFubmVsIGZlYXR1cmUgaXMgdGhhdCBpdCBjYW4gbWFrZSBmaWxlCisgICB0cmFu c2ZlcnMgZ28gZmFzdGVyIGF1dG9tYXRpY2FsbHkuIFRoZSBkaXNhZHZhbnRhZ2Ugd291bGQgYmUK KyAgIGZpbGUtdHJhbnNmZXIgZmFpbHVyZXMgaWYgdGhlIGNoYW5uZWwgaXMgbm90IHRydWx5IGNs ZWFyLCBmb3IgZXhhbXBsZQorICAgaWYgQy1LZXJtaXQgbWFkZSBhIFRlbG5ldCBjb25uZWN0aW9u IHRvIGEgdGVybWluYWwgc2VydmVyLCBhbmQgdGhlbgorICAgZGlhbGVkIG91dCBmcm9tIHRoZXJl OyBvciBpZiBDLUtlcm1pdCBtYWRlIGFuIFJsb2dpbiBjb25uZWN0aW9uIHRvIGhvc3QKKyAgIGFu ZCB0aGVuIG1hZGUgYSBUZWxuZXQgY29ubmVjdGlvbiBmcm9tIHRoZXJlIHRvIGFub3RoZXIgaG9z dC4gSWYgYSBmaWxlCisgICB0cmFuc2ZlciBmYWlscyBvbiBhIFRDUC9JUCBjb25uZWN0aW9uLCB1 c2UgU0hPVyBDT05UUk9MIHRvIGNoZWNrCisgICB3aGV0aGVyIGNvbnRyb2wgY2hhcmFjdGVycyBi ZWNhbWUgdW5wcmVmaXhlZCBhcyBhIHJlc3VsdCBvZiBwcm90b2NvbAorICAgbmVnb3RpYXRpb25z LCBhbmQvb3IgU0hPVyBTVFJFQU1JTkcgKFs1MjddU2VjdGlvbiA0LjIwKSB0byBzZWUgaWYKKyAg ICJjbGVhci1jaGFubmVsIiB3YXMgbmVnb3RpYXRlZC4gSWYgdGhpcyBoYXBwZW5lZCwgdXNlIFNF VCBDTEVBUi1DSEFOTkVMCisgICBPRkYgYW5kIFNFVCBQUkVGSVhJTkcgQ0FVVElPVVMgKG9yIHdo YXRldmVyKSB0byBwcmV2ZW50IGl0IGZyb20KKyAgIGhhcHBlbmluZyBhZ2Fpbi4KKworNC4yMC4g U3RyZWFtaW5nIFByb3RvY29sCisKKyAgIEEgbmV3IEtlcm1pdCBwcm90b2NvbCBvcHRpb24gY2Fs bGVkICJzdHJlYW1pbmciIHdhcyBhZGRlZCBpbiBDLUtlcm1pdAorICAgNy4wLiBUaGUgaWRlYSBp cyB0aGF0IGlmIHRoZSB0d28gS2VybWl0IHBhcnRuZXJzIGhhdmUgYSByZWxpYWJsZQorICAgdHJh bnNwb3J0IChzdWNoIGFzIFRDUC9JUCBvciBYLjI1KSBiZXR3ZWVuIHRoZW0sIHRoZW4gdGhlcmUg aXMgbm8gbmVlZAorICAgdG8gc2VuZCBBQ0tzIGZvciBEYXRhIHBhY2tldHMsIG9yIE5BS3MsIHNp bmNlIGEgcmVsaWFibGUgdHJhbnNwb3J0CisgICB3aWxsLCBieSBkZWZpbml0aW9uLCBkZWxpdmVy IGFsbCBwYWNrZXRzIGluIG9yZGVyIGFuZCB1bmRhbWFnZWQuIE9uCisgICBzdWNoIGEgY29ubmVj dGlvbiwgc3RyZWFtaW5nIGN1dHMgZG93biBub3Qgb25seSBvbiBLZXJtaXQgcHJvZ3JhbQorICAg b3ZlcmhlYWQgKHN3aXRjaGluZyBiYWNrIGFuZCBmb3J0aCBiZXR3ZWVuIHJlYWRpbmcgYW5kIHNl bmRpbmcKKyAgIHBhY2tldHMpLCBidXQgYWxzbyB0ZW5kcyB0byBtYWtlIHRoZSB1bmRlcmx5aW5n IHRyYW5zcG9ydCB1c2UgaXRzZWxmCisgICBtb3JlIGVmZmljaWVudGx5IChlLmcuIGJ5IGRlZmVh dGluZyB0aGUgTmFnbGUgYWxnb3JpdGhtIGFuZC9vciBEZWxheWVkCisgICBBQ0sgc3RyYXRhZ2Vt IG9mIHRoZSBUQ1AgbGF5ZXIpLiBGdXJ0aGVybW9yZSwgaXQgYWxsb3dzIHRyYW5zZmVycyB0bwor ICAgd29yayBzbW9vdGhseSBvbiBleHRyZW1lbHkgc2xvdyBuZXR3b3JrIGNvbmdlc3Rpb25zIHRo YXQgd291bGQKKyAgIG90aGVyd2lzZSBjYXVzZSB0aW1lb3V0cyBhbmQgcmV0cmFuc21pc3Npb25z LCBhbmQgZXZlbiBmYWlsdXJlIHdoZW4gdGhlCisgICByZXRyeSBsaW1pdCB3YXMgZXhjZWVkZWQu CisKKyAgIFRoZSB0cmljayBpcyBrbm93aW5nIHdoZW4gd2UgY2FuIHN0cmVhbToKKworICAgIDEu IElmIEMtS2VybWl0IGhhcyBvcGVuZWQgYSBUQ1Agc29ja2V0IG9yIFguMjUgY29ubmVjdGlvbiwg aXQgb2ZmZXJzCisgICAgICAgc3RyZWFtLgorICAgIDIuIElmIEMtS2VybWl0IGhhcyBiZWVuIHN0 YXJ0ZWQgd2l0aCB0aGUgLUkgKHVwcGVyY2FzZSkgb3B0aW9uLCBvciBpZgorICAgICAgIGl0IGhh cyBiZWVuIHRvbGQgdG8gU0VUIFJFTElBQkxFIE9OLCBpdCBvZmZlcnMgdG8gc3RyZWFtLgorICAg IDMuIElmIEMtS2VybWl0IGlzIGluIHJlbW90ZSBtb2RlLCBhbmQgaGFzIGJlZW4gdG9sZCB0byBT RVQgUkVMSUFCTEUKKyAgICAgICBBVVRPIChvciBPTiksIGl0IGFsd2F5cyBvZmZlcnMgdG8gc3Ry ZWFtLCBhbmQgYWxzbyBhbHdheXMgYWdyZWVzIHRvCisgICAgICAgc3RyZWFtLCBpZiB0aGUgb3Ro ZXIgS2VybWl0IG9mZmVycy4gVW5sZXNzIHlvdSB0YWtlIGV4cGxpY2l0CisgICAgICAgYWN0aW9u cyB0byBvdmVycmlkZSB0aGUgZGVmYXVsdHMsIHRoaXMgYWxsb3dzIHRoZSBsb2NhbCBLZXJtaXQg KHRoZQorICAgICAgIG9uZSB0aGF0IG1hZGUgdGhlIGNvbm5lY3Rpb24sIGFuZCBzbyBrbm93cyB3 aGV0aGVyIGl0J3MgcmVsaWFibGUpCisgICAgICAgdG8gY29udHJvbCBzdHJlYW1pbmcuCisKKyAg IChOb3RlIHRoYXQgYW4gb2ZmZXIgdG8gc3RyZWFtIGFsc28gcmVzdWx0cyBpbiBhIENsZWFyLUNo YW5uZWwKKyAgIGFubm91bmNlbWVudCBpZiBDTEVBUi1DSEFOTkVMIGlzIHNldCB0byBBVVRPOyBz ZWUgWzUyOF1TZWN0aW9uIDQuMTkuKQorCisgICBXaGVuIEJPVEggS2VybWl0cyBvZmZlciB0byBz dHJlYW0sIHRoZW4gdGhleSBzdHJlYW07IG90aGVyd2lzZSB0aGV5CisgICBkb24ndC4gVGh1cyBz dHJlYW1pbmctY2FwYWJsZSBLZXJtaXQgcHJvZ3JhbXMgaW50ZXJvcGVyYXRlCisgICBhdXRvbWF0 aWNhbGx5IGFuZCB0cmFuc3BhcmVudGx5IHdpdGggbm9uc3RyZWFtaW5nIG9uZXMuIElmIHRoZSB0 d28KKyAgIEtlcm1pdHMgZG8gYWdyZWUgdG8gc3RyZWFtLCB5b3UnbGwgc2VlIHRoZSB3b3JkICJT VFJFQU1JTkciIG9uIHRoZQorICAgZnVsbHNjcmVlbiBmaWxlLXRyYW5zZmVyIGRpc3BsYXkgaW4g dGhlIFdpbmRvdyBTbG90cyBmaWVsZC4gWW91IGNhbgorICAgYWxzbyBmaW5kIG91dCBhZnRlcndh cmRzIHdpdGggdGhlIFNUQVRJU1RJQ1Mgb3IgU0hPVyBTVFJFQU1JTkcKKyAgIGNvbW1hbmRzLgor CisgICAgIFdBUk5JTkc6IEF1dG9tYXRpYyBjaG9pY2Ugb2Ygc3RyZWFtaW5nIGlzIGJhc2VkIG9u IHRoZSBhc3N1bXB0aW9uIG9mCisgICAgIGEgImRpcmVjdCIgZW5kLXRvLWVuZCBuZXR3b3JrIGNv bm5lY3Rpb247IGZvciBleGFtcGxlLCBhIFRlbG5ldCBvcgorICAgICBSbG9naW4gY29ubmVjdGlv biBmcm9tIGhvc3QgQSB0byBob3N0IEIsIGFuZCB0cmFuc2ZlcnJpbmcgZmlsZXMKKyAgICAgYmV0 d2VlbiBBIGFuZCBCLiBIb3dldmVyLCBpZiB5b3VyIGNvbm5lY3Rpb24gaGFzIGFkZGl0aW9uYWwK KyAgICAgY29tcG9uZW50cyAtLSBzb21ldGhpbmcgImluIHRoZSBtaWRkbGUiIChCKSB0aGF0IHlv dSBoYXZlIG1hZGUgYQorICAgICBuZXR3b3JrIGNvbm5lY3Rpb24gdG8sIHdoaWNoIG1ha2VzIGEg c2VwYXJhdGUgY29ubmVjdGlvbiB0byB0aGUKKyAgICAgZGVzdGluYXRpb24gaG9zdCAoQyksIHRo ZW4geW91IGRvbid0IHJlYWxseSBoYXZlIGEgcmVsaWFibGUKKyAgICAgY29ubmVjdGlvbiwgYnV0 IEMtS2VybWl0IGhhcyBubyB3YXkgb2Yga25vd2luZyB0aGlzOyB0cmFuc2ZlcnJpbmcKKyAgICAg ZmlsZXMgYmV0d2VlbiBBIGFuZCBDIHdpbGwgcHJvYmFibHkgZmFpbC4gSW4gc3VjaCBjYXNlcywg eW91J2xsIG5lZWQKKyAgICAgdG8gdGVsbCB0aGUgKmxvY2FsKiBDLUtlcm1pdCB0byAic2V0IHJl bGlhYmxlIG9mZiIgYmVmb3JlCisgICAgIHRyYW5zZmVycmluZyBmaWxlcyAoaXQgZG9lcyBubyBn b29kIHRvIGdpdmUgdGhpcyBjb21tYW5kIHRvIHRoZQorICAgICByZW1vdGUgS2VybWl0IHNpbmNl IHRoZSBsb2NhbCBvbmUgY29udHJvbHMgdGhlIFJFTElBQkxFIHNldHRpbmcpLgorCisgICBTdHJl YW1pbmcgaXMgbGlrZSB1c2luZyBhbiBpbmZpbml0ZSB3aW5kb3cgc2l6ZSwgd2l0aCBubyB0aW1l b3V0cyBhbmQKKyAgIG5vIHRvbGVyYW5jZSBmb3IgdHJhbnNtaXNzaW9uIGVycm9ycyAoc2luY2Ug dGhlcmUgc2hvdWxkbid0IGJlIGFueSkuIEl0CisgICByZWxpZXMgb24gdGhlIHVuZGVybHlpbmcg dHJhbnNwb3J0IGZvciBmbG93IGNvbnRyb2wsIGVycm9yIGNvcnJlY3Rpb24sCisgICB0aW1lb3V0 cywgYW5kIHJldHJhbnNtaXNzaW9uLiBUaHVzIGl0IGlzIHZlcnkgc3VpdGFibGUgZm9yIHVzZSBv bgorICAgVENQL0lQIGNvbm5lY3Rpb25zLCBlc3BlY2lhbGx5IHNsb3cgb3IgYnVyc3R5IG9uZXMs IHNpbmNlIEtlcm1pdCdzCisgICBwYWNrZXQgdGltZW91dHMgd29uJ3QgaW50ZXJmZXJlIHdpdGgg dGhlIHRyYW5zZmVyIC0tIGVhY2ggcGFja2V0IHRha2VzCisgICBhcyBsb25nIHRvIHJlYWNoIGl0 cyBkZXN0aW5hdGlvbiBhcyBpdCB0YWtlcyBUQ1AgdG8gZGVsaXZlciBpdC4gSWYgVENQCisgICBj YW4ndCBkZWxpdmVyIHRoZSBwYWNrZXQgd2l0aGluIGl0cyBvd24gdGltZW91dCBwZXJpb2QgKG92 ZXIgd2hpY2gKKyAgIEtlcm1pdCBoYXMgbm8gY29udHJvbCksIGl0IHNpZ25hbHMgYSBmYXRhbCBl cnJvci4gSnVzdCBsaWtlIEZUUC4KKworICAgU3RyZWFtaW5nIGdvZXMgbXVjaCBmYXN0ZXIgdGhh biBub24tc3RyZWFtaW5nIHdoZW4gYSByZWxhdGl2ZWx5IHNtYWxsCisgICBwYWNrZXQgbGVuZ3Ro IGlzIHVzZWQsIGFuZCBpdCB0ZW5kcyB0byBnbyBmYXN0ZXIgdGhhbiBub24tc3RyZWFtaW5nCisg ICB3aXRoIGV2ZW4gdGhlIGxvbmdlc3QgcGFja2V0IGxlbmd0aHMuIFRoZSBLZXJtaXQgd2luZG93 IHNpemUgaXMKKyAgIGlycmVsZXZhbnQgdG8gc3RyZWFtaW5nIHByb3RvY29sLCBidXQgc3RpbGwg bWlnaHQgYWZmZWN0IHBlcmZvcm1hbmNlIGluCisgICBzbWFsbCB3YXlzIHNpbmNlIGl0IGNhbiBy ZXN1bHQgaW4gZGlmZmVyZW50IHBhdGhzIHRocm91Z2ggdGhlIGNvZGUuCisKKyAgIFRoZSBkZWZp bml0aW9uIG9mICJyZWxpYWJsZSB0cmFuc3BvcnQiIGRvZXMgbm90IG5lY2Vzc2FyaWx5IGRlbWFu ZAorICAgOC1iaXQgYW5kIGNvbnRyb2wtY2hhcmFjdGVyIHRyYW5zcGFyZW5jeS4gU3RyZWFtaW5n IGNhbiB3b3JrIHdpdGgKKyAgIHBhcml0eSBhbmQvb3IgY29udHJvbC1jaGFyYWN0ZXIgcHJlZml4 aW5nIGp1c3QgYXMgd2VsbCAoYnV0IG5vdCBhcworICAgZmFzdCkgYXMgd2l0aG91dCB0aGVtOyBp biBzdWNoIGNhc2VzIHlvdSBjYW4gbGVhdmUgUkVMSUFCTEUgc2V0IHRvIE9OLAorICAgYnV0IHNl dCBDTEVBUkNIQU5ORUwgYW5kL29yIFBBUklUWSBhcHByb3ByaWF0ZWx5LgorCisgICBNYXhpbXVt IHBlcmZvcm1hbmNlIC0tIGNvbXBhcmFibGUgdG8gYW5kIG9mdGVuIGV4Y2VlZGluZyBGVFAgLS0g aXMKKyAgIGFjaGlldmVkIG9uIHNvY2tldC10by1zb2NrZXQgY29ubmVjdGlvbnMgKGluIHdoaWNo IHRoZSBjb25zaWRlcmFibGUKKyAgIG92ZXJoZWFkIG9mIHRoZSB0ZXJtaW5hbCBkcml2ZXIgYW5k IFRlbG5ldCBvciBSbG9naW4gc2VydmVyIGlzCisgICBlbGltaW5hdGVkKSB3aXRoIGxvbmcgcGFj a2V0cyBhbmQgdGhlIG5ldyAiYnJpZWYiIGZpbGUtdHJhbnNmZXIgZGlzcGxheQorICAgKFs1Mjld U2VjdGlvbiA0LjE2KS4KKworNC4yMC4xLiBDb21tYW5kcyBmb3IgU3RyZWFtaW5nCisKKyAgIFNF VCBSRUxJQUJMRSB7IE9OLCBPRkYsIEFVVE8gfQorICAgICAgICAgIFNFVCBSRUxJQUJMRSBPTiB0 ZWxscyBLZXJtaXQgdGhhdCBpdCBoYXMgYSByZWxpYWJsZSB0cmFuc3BvcnQuCisgICAgICAgICAg U0VUIFJFTElBQkxFIE9GRiB0ZWxscyBLZXJtaXQgdGhlIHRyYW5zcG9ydCBpcyBub3QgcmVsaWFi bGUuCisgICAgICAgICAgU0VUIFJFTElBQkxFIEFVVE8gdGVsbHMgS2VybWl0IHRoYXQgaXQgc2hv dWxkIFNFVCBSRUxJQUJMRSBPTgorICAgICAgICAgIHdoZW5ldmVyIGl0IG1ha2VzIGEgcmVsaWFi bGUgY29ubmVjdGlvbiAoZS5nLiBURUxORVQgb3IgU0VUIEhPU1QKKyAgICAgICAgICBvbiBhIFRD UC9JUCBvciBYLjI1IG5ldHdvcmspLCBhbmQgd2hlbiBpbiByZW1vdGUgbW9kZSBpdCBzaG91bGQK KyAgICAgICAgICBiZWxpZXZlIHRoZSB0cmFuc3BvcnQgaXMgcmVsaWFibGUgaWYgdGhlIG90aGVy IEtlcm1pdCBzYXlzIGl0IGlzCisgICAgICAgICAgZHVyaW5nIEtlcm1pdCBwcm90b2NvbCBuZWdv dGlhdGlvbi4KKworICAgQVVUTyBpcyB0aGUgZGVmYXVsdDsgdGhlIEtlcm1pdCBwcm9ncmFtIHRo YXQgbWFrZXMgdGhlIGNvbm5lY3Rpb24ga25vd3MKKyAgIHdoZXRoZXIgaXQgaXMgcmVsaWFibGUs IGFuZCB0ZWxscyB0aGUgcmVtb3RlIEtlcm1pdC4KKworICAgVGhlIFJFTElBQkxFIHNldHRpbmcg aGFzIHNldmVyYWwgZWZmZWN0cywgaW5jbHVkaW5nOgorCisgICAgICogSXQgY2FuIGFmZmVjdCB0 aGUgdGltZW91dHMgdXNlZCBkdXJpbmcgbm9ybWFsIEFDSy9OQUsgcHJvdG9jb2wuCisgICAgICog SXQgY2FuIGFmZmVjdCB0aGUgY2xlYXItY2hhbm5lbCBhbm5vdW5jZW1lbnQuCisgICAgICogSXQg Y2FuIGFmZmVjdCBzdHJlYW1pbmcuCisKKyAgIElmIHlvdSBURUxORVQgb3IgU0VUIEhPU1Qgc29t ZXdoZXJlLCB0aGlzIGluY2x1ZGVzIGFuIGltcGxpY2l0IFNFVAorICAgUkVMSUFCTEUgT04gY29t bWFuZC4gVGhlIC1JIGNvbW1hbmQtbGluZSBvcHRpb24gaXMgZXF1aXZhbGVudCB0byBTRVQKKyAg IFJFTElBQkxFIE9OLgorCisgICBTaW5jZSBTRVQgUkVMSUFCTEUgT04gKGFuZCAtSSkgYWxzbyBp bXBsaWVzIFNFVCBDTEVBUiBDSEFOTkVMIE9OLCB5b3UKKyAgIG1pZ2h0IGZpbmQgdGhhdCBpbiBj ZXJ0YWluIGNhc2VzIHlvdSBuZWVkIHRvIHRlbGwgS2VybWl0IHRoYXQgZXZlbgorICAgdGhvdWdo IHRoZSBjb25uZWN0aW9uIGlzIHJlbGlhYmxlLCBpdCBkb2Vzbid0IGhhdmUgYSBjbGVhciBjaGFu bmVsCisgICBhZnRlciBhbGw6CisKKyAgU0VUIENMRUFSLUNIQU5ORUwgT0ZGCisgIFNFVCBQUkVG SVhJTkcgQ0FVVElPVVMgOyBvciB3aGF0ZXZlci4uLgorCisgICBZb3UgY2FuIGNvbnRyb2wgc3Ry ZWFtaW5nIHdpdGhvdXQgYWZmZWN0aW5nIHRoZSBvdGhlciBpdGVtcyB3aXRoOgorCisgIFNFVCBT VFJFQU1JTkcgeyBPTiwgT0ZGLCBBVVRPIH0KKworICAgQVVUTyBpcyB0aGUgZGVmYXVsdCwgbWVh bmluZyBzdHJlYW1pbmcgd2lsbCBvY2N1ciBpZiBLZXJtaXQgaGFzIG1hZGUgYQorICAgVENQL0lQ IGNvbm5lY3Rpb24gb3IgaWYgUkVMSUFCTEUgaXMgT04gKG9yIGl0IHdhcyBzdGFydGVkIHdpdGgg dGhlIC1JCisgICBjb21tYW5kIGxpbmUgb3B0aW9uKS4gT0ZGIG1lYW5zIGRvbid0IHN0cmVhbTsg T04gbWVhbnMgb2ZmZXIgdG8gc3RyZWFtCisgICBubyBtYXR0ZXIgd2hhdC4KKworNC4yMC4yLiBF eGFtcGxlcyBvZiBTdHJlYW1pbmcKKworICAgSGVyZSB3ZSBsb29rIGF0IHRoZSB1c2UgYW5kIGJl aGF2aW9yIG9mIHN0cmVhbWluZyBvbiBzZXZlcmFsIGRpZmZlcmVudAorICAga2luZHMgb2YgY29u bmVjdGlvbnMsIGFuZCBjb21wYXJlIGl0cyBwZXJmb3JtYW5jZSB3aXRoIG5vbi1zdHJlYW1pbmcK KyAgIHRyYW5zZmVycy4KKworNC4yMC4yLjEuIFN0cmVhbWluZyBvbiBTb2NrZXQtdG8tU29ja2V0 IENvbm5lY3Rpb25zCisKKyAgIEhlcmUgd2UgZ2V0IHN0cmVhbWluZyBhdXRvbWF0aWNhbGx5IHdo ZW4gYm90aCBLZXJtaXQgcHJvZ3JhbXMgYXJlCisgICBjYXBhYmxlIG9mIGl0LCBzaW5jZSB0aGV5 IGJvdGggbWFrZSBzb2NrZXQgY29ubmVjdGlvbnMuIEZvciBleGFtcGxlLCBvbgorICAgdGhlIGZh ciBlbmQ6CisKKyAgQy1LZXJtaXQ+IHNldCBob3N0ICogMzAwMAorICBDLUtlcm1pdD4gc2VydmVy CisKKyAgIGFuZCBvbiB0aGUgbmVhciBlbmQ6CisKKyAgQy1LZXJtaXQ+IHNldCBob3N0IGZvby5i YXIueHl6LmNvbSAzMDAwCisgIChub3cgZ2l2ZSBTRU5EIGFuZCBHRVQgY29tbWFuZCkKKworICAg QWxsIHN1YnNlcXVlbnQgZmlsZSB0cmFuc2ZlcnMgdXNlIHN0cmVhbWluZyBhdXRvbWF0aWNhbGx5 LgorCisgICBIZXJlIGFyZSB0aGUgcmVzdWx0cyBmcm9tIDg0IHRyaWFscywgcnVuIG9uIGEgcHJv ZHVjdGlvbiBuZXR3b3JrLAorICAgZGlzay10by1kaXNrLCBpbiB3aGljaCBhIDEtTUIgYmluYXJ5 IGZpbGUgKHRoZSBTdW5PUyBDLUtlcm1pdCBTcGFyYworICAgZXhlY3V0YWJsZSkgd2FzIHNlbnQg ZnJvbSBhIFN1biBTcGFyYy0xMCB3aXRoIFN1bk9TIDQuMS4zIHRvIGFuIElCTQorICAgUG93ZXIg U2VydmVyIDg1MCB3aXRoIEFJWCA0LjEsIHNvY2tldC10by1zb2NrZXQsIG92ZXIgYSAxME1icHMg MTBCYXNlVAorICAgRXRoZXJuZXQsIHVzaW5nIG1pbmltYWwgY29udHJvbC1jaGFyYWN0ZXIgdW5w cmVmaXhpbmcsIHdpbmRvdyBzaXplcworICAgZnJvbSAxMCB0byAzMiwgYW5kIHBhY2tldCBzaXpl cyBmcm9tIDE0NTAgdG8gOTAxMDoKKworICAgICAgICAgICAgICAgIFN0cmVhbWluZyAgICBOb25z dHJlYW1pbmcKKyAgTWF4IENQUyAgICAgICAgIDc0ODk1NSAgICAgICAgNjgzMzU0CisgIE1pbiBD UFMgICAgICAgICAyMjE1MjIgICAgICAgIDE3MjQ5MQorICBNZWFuIENQUyAgICAgICAgNjQ2MTM0 ICAgICAgICA1NTg2ODAKKyAgTWVkaWFuIENQUyAgICAgIDY3ODA0MyAgICAgICAgNTk1ODc0Cisg IFN0ZCBEZXYgICAgICAgICAxMDE0MjQgICAgICAgIDExMTQ5MworCisgICBDb3JyZWxhdGlvbnM6 CisKKyAgQ1BTIGFuZCB3aW5kb3cgc2l6ZTogICAtMC4wMzYKKyAgQ1BTIGFuZCBwYWNrZXQgbGVu Z3RoOiAgMC4yNTQKKyAgQ1BTIGFuZCBzdHJlYW1pbmc6ICAgICAgMC4zODIKKworICAgTm90ZSB0 aGF0IHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBzdHJlYW1pbmcgYW5kIHRocm91Z2hwdXQgaXMK KyAgIHNpZ25pZmljYW50bHkgc3Ryb25nZXIgdGhhbiB0aGF0IGJldHdlZW4gQ1BTIGFuZCB3aW5k b3cgc2l6ZSBvciBwYWNrZXQKKyAgIGxlbmd0aC4KKworICAgQWxzbyBub3RlIHRoYXQgdGhpcyBh bmQgYWxsIG90aGVyIHBlcmZvcm1hbmNlIG1lYXN1cmVtZW50cyBpbiB0aGlzCisgICBzZWN0aW9u IGFyZSBzbmFwc2hvdHMgaW4gdGltZTsgdGhlIHJlc3VsdHMgY291bGQgYmUgbXVjaCBkaWZmZXJl bnQgYXQKKyAgIG90aGVyIHRpbWVzIHdoZW4gdGhlIGxvYWQgb24gdGhlIHN5c3RlbXMgYW5kL29y IHRoZSBuZXR3b3JrIGlzIGhpZ2hlcgorICAgb3IgbG93ZXIuCisKKyAgIEluIGEgc2ltaWxhciBz b2NrZXQtdG8tc29ja2V0IHRyaWFsLCBidXQgdGhpcyB0aW1lIG92ZXIgYSB3aWRlLWFyZWEKKyAg IFRDUC9JUCBjb25uZWN0aW9uIChmcm9tIE5ldyBZb3JrIENpdHkgdG8gTG9nYW4sIFV0YWgsIGFi b3V0IDIwMDAKKyAgIG1pbGVzKSwgdGhlIGZvbGxvd2luZyByZXN1bHRzIHdlcmUgb2J0YWluZWQ6 CisKKyAgICAgICAgICAgICAgICBTdHJlYW1pbmcgICAgTm9uc3RyZWFtaW5nCisgIE1heCBDUFMg ICAgICAgICAzMzgyMjYgICAgICAgIDMxODIwMworICBNaW4gQ1BTICAgICAgICAgMTkxNjU5ICAg ICAgICAxMzIzMTQKKyAgTWVhbiBDUFMgICAgICAgIDI5Mzc0NCAgICAgICAgMjU5MjQwCisgIE1l ZGlhbiBDUFMgICAgICAzMDA4NDUgICAgICAgIDI3MzI3MQorICBTdGQgRGV2ICAgICAgICAgIDQx OTE0ICAgICAgICAgNTIzNTEKKworICAgQ29ycmVsYXRpb25zOgorCisgIENQUyBhbmQgd2luZG93 IHNpemU6ICAgIDAuMTY0CisgIENQUyBhbmQgcGFja2V0IGxlbmd0aDogIDAuMTIzCisgIENQUyBh bmQgc3RyZWFtaW5nOiAgICAgIDAuMzQ2CisKKzQuMjAuMi4yLiBTdHJlYW1pbmcgb24gVGVsbmV0 IENvbm5lY3Rpb25zCisKKyAgIEluIHRoaXMgY2FzZSB0aGUgbG9jYWwgY29weSBvZiBLZXJtaXQg aXMgdG9sZCB0byBURUxORVQgb3IgU0VUIEhPU1QsCisgICBhbmQgc28gaXQga25vd3MgaXQgaGFz IGEgcmVsaWFibGUgY29ubmVjdGlvbiBhbmQgLS0gdW5sZXNzIGl0IGhhcyBiZWVuCisgICB0b2xk IG5vdCB0byAtLSB3aWxsIG9mZmVyIHRvIHN0cmVhbSwgYW5kIHRoZSBvdGhlciBLZXJtaXQgcHJv Z3JhbSwKKyAgIHNpbmNlIGl0IGhhcyBTVFJFQU1JTkcgc2V0IHRvIEFVVE8sIGFncmVlcy4KKwor ICAgU2luY2Ugd2UgaGF2ZSBhIHJlbGlhYmxlIGNvbm5lY3Rpb24sIHdlJ2xsIGFsc28gZ2V0IGNv bnRyb2wtY2hhcmFjdGVyCisgICB1bnByZWZpeGluZyBhdXRvbWF0aWNhbGx5IGJlY2F1c2Ugb2Yg dGhlIG5ldyBjbGVhci1jaGFubmVsIHByb3RvY29sCisgICAoWzUzMF1TZWN0aW9uIDQuMTkpLgor CisgICBBbnkgZXJyb3JzIHRoYXQgb2NjdXIgZHVyaW5nIHN0cmVhbWluZyBhcmUgZmF0YWwgdG8g dGhlIHRyYW5zZmVyLiBUaGUKKyAgIG1lc3NhZ2UgaXMgIlRyYW5zbWlzc2lvbiBlcnJvciBvbiBy ZWxpYWJsZSBsaW5rIi4gU2hvdWxkIHRoaXMgaGFwcGVuOgorCisgICAgMS4gQ2hlY2sgdGhlIHJl bW90ZSBLZXJtaXQncyBmbG93IGNvbnRyb2wgc2V0dGluZyAoU0hPVworICAgICAgIENPTU1VTklD QVRJT05TKS4gSWYgaXQgaXMgTk9ORSwgY2hhbmdlIGl0IHRvIFhPTi9YT0ZGLCBvciB2aWNlCisg ICAgICAgdmVyc2EuIElmIGl0IGlzIFhPTi9YT0ZGIChvciB5b3UganVzdCBjaGFuZ2VkIGl0IHRv IFhPRkYvWE9GRiksCisgICAgICAgbWFrZSBzdXJlIHRoZSBmaWxlIHNlbmRlciBpcyBwcmVmaXhp bmcgdGhlIFhPTiBhbmQgWE9GRiBjaGFyYWN0ZXJzLgorICAgICAgIEluIHRoZSBtb3N0IGRyYXN0 aWMgY2FzZSwgdXNlICJzZXQgcHJlZml4IGFsbCIgdG8gZm9yY2UgcHJlZml4aW5nCisgICAgICAg b2YgYWxsIGNvbnRyb2wgY2hhcmFjdGVycy4KKyAgICAyLiBUaGUgcmVtb3RlIFRlbG5ldCBzZXJ2 ZXIgbWlnaHQgY2hvcCBvZmYgdGhlIDh0aCBiaXQuIEluIHRoYXQgY2FzZSwKKyAgICAgICB0ZWxs IEMtS2VybWl0IHRvICJzZXQgcGFyaXR5IHNwYWNlIi4gT3IsIHlvdSBtaWdodCBiZSBhYmxlIHRv IGZvcmNlCisgICAgICAgdGhlIFRlbG5ldCB0byBhbGxvdyBlaWdodC1iaXQgZGF0YSBieSB0ZWxs aW5nIEMtS2VybWl0IHRvICJzZXQKKyAgICAgICB0ZWxvcHQgYmluYXJ5IHJlcXVlc3QgYWNjZXB0 IiAtLSB0aGF0IGlzLCByZXF1ZXN0IHRoZSBUZWxuZXQgc2VydmVyCisgICAgICAgdG8gZW50ZXIg YmluYXJ5IG1vZGUsIGFuZCBhY2NlcHQgYmluYXJ5LW1vZGUgYmlkcyBmcm9tIHRoZSBzZXJ2ZXIu CisgICAgMy4gVGhlIHJlbW90ZSBUZWxuZXQgc2VydmVyIG1pZ2h0IGhhdmUgYSBidWZmZXJpbmcg bGltaXRhdGlvbi4gSWYgYQorICAgICAgIGFuZCBiIGRvbid0IGN1cmUgdGhlIHByb2JsZW0sIHRl bGwgdGhlIGZpbGUgcmVjZWl2ZXIgdG8gInNldAorICAgICAgIHJlY2VpdmUgcGFja2V0LWxlbmd0 aCAxMDAwIiAob3Igb3RoZXIgbnVtYmVyIC0tIHVzZSB0aGUgbGFyZ2VzdCBvbmUKKyAgICAgICB0 aGF0IHdvcmtzKS4gVGhpcyB0b28sIGlzIG5vIGRpZmZlcmVudCBmcm9tIHRoZSBub24tc3RyZWFt aW5nIGNhc2UKKyAgICAgICAobW9yZSBhYm91dCB0aGlzIGluIFs1MzFdU2VjdGlvbiA0LjIwLjIu MykuCisKKyAgIEFuZCByZW1lbWJlciB5b3UgY2FuIGNvbnRpbnVlIGludGVycnVwdGVkIGJpbmFy eS1tb2RlIHRyYW5zZmVycyB3aGVyZQorICAgdGhleSBsZWZ0IG9mZiB3aXRoIHRoZSBSRVNFTkQg KD0gU0VORCAvUkVDT1ZFUikgY29tbWFuZC4KKworICAgSGVyZSBhcmUgdGhlIGZpZ3VyZXMgZm9y IHRoZSBzYW1lIDg0IHRyaWFscyBiZXR3ZWVuIHRoZSBzYW1lIFN1biBhbmQKKyAgIElCTSBob3N0 cyBhcyBpbiA0LjIwLjIuMSwgb24gdGhlIHNhbWUgbmV0d29yaywgYnV0IG92ZXIgYSBUZWxuZXQK KyAgIGNvbm5lY3Rpb24gcmF0aGVyIHRoYW4gc29ja2V0LXRvLXNvY2tldDoKKworICAgICAgICAg ICAgICAgICAgU3RyZWFtaW5nICAgIE5vbnN0cmVhbWluZworICBNYXggQ1BTICAgICAgICAgMzUw MDg4ICAgICAgICAzMjI1MjMKKyAgTWluIENQUyAgICAgICAgICA5NTU0NyAgICAgICAgMTczMTUy CisgIE1lYW4gQ1BTICAgICAgICAzMjEzNzIgICAgICAgIDI4MTgzMAorICBNZWRpYW4gQ1BTICAg ICAgMzQyNjA0ICAgICAgICAyOTE0NjkKKyAgU3RkIERldiAgICAgICAgICA0MDUwMyAgICAgICAg IDI5OTQ4CisKKyAgIENvcnJlbGF0aW9uczoKKworICBDUFMgYW5kIHdpbmRvdyBzaXplOiAgICAw LjAwMQorICBDUFMgYW5kIHBhY2tldCBsZW5ndGg6ICAwLjE1MgorICBDUFMgYW5kIHN0cmVhbWlu ZzogICAgICAwLjEyOAorCisgICBIZXJlIHRoZSBlZmZlY3QgaXMgbm90IGFzIGVtcGhhdGljIGFz IGluIHRoZSBzb2NrZXQtdG8tc29ja2V0IGNhc2UsIHlldAorICAgb24gdGhlIHdob2xlIHN0cmVh bWluZyB0ZW5kcyB0byBiZSBiZW5lZmljaWFsLgorCisgICBBZGRpdGlvbmFsIG1lYXN1cmVtZW50 cyBvbiBIUC1VWCB1c2luZyBDLUtlcm1pdCA3LjAgQmV0YS4wNjoKKworICAgICAgICAgICAgICAg ICAgV2luZG93aW5nICAgICBTdHJlYW1pbmcKKyAgSFAtVVggOC0+OCAgICAgIG5vdCB0ZXN0ZWQg ICAgICAgMTRLY3BzCisgIEhQLVVYIDgtPjkgICAgICBub3QgdGVzdGVkICAgICAgIDc2S2Nwcwor ICBIUC1VWCA4LT4xMCAgICAgIDM2S2NwcyAgICAgICAgICA2NktjcHMKKyAgSFAtVVggOS0+OSAg ICAgIG5vdCB0ZXN0ZWQgICAgICAxOTBLY3BzCisgIEhQLVVYIDktPjEwICAgICAxNjBLY3BzICAg ICAgICAgMzc4S2NwcworCis0LjIwLjIuMy4gU3RyZWFtaW5nIHdpdGggTGltaXRlZCBQYWNrZXQg TGVuZ3RoCisKKyAgIFRoZSBJUklYIHRlbG5ldCBzZXJ2ZXIgKGF0IGxlYXN0IHRoZSBvbmVzIG9i c2VydmVkIGluIElSSVggNS4zIGFuZCA2LjIpCisgICBkb2VzIG5vdCBhbGxvdyBLZXJtaXQgdG8g c2VuZCBwYWNrZXRzIGxvbmdlciB0aGFuIDQwOTYgYnl0ZXMuIFRodXMgd2hlbgorICAgc2VuZGlu ZyBmcm9tIElSSVggQy1LZXJtaXQgd2hlbiBpdCBpcyBvbiB0aGUgcmVtb3RlIGVuZCBvZiBhIFRl bG5ldAorICAgY29ubmVjdGlvbiwgdGhlIHBhY2tldCBsZW5ndGggbXVzdCBiZSA0SyBvciBsZXNz LiBUcmlhbHMgaW4gdGhpcyBjYXNlCisgICAoaW4gd2hpY2ggcGFja2V0IGxlbmd0aHMgcmFuZ2Ug ZnJvbSAxNDUwIHRvIDQwMDApIHNob3cgYSBzdHJvbmcKKyAgIGFkdmFudGFnZSBmb3Igc3RyZWFt aW5nLCB3aGljaCB3b3VsZCBiZSBldmlkZW50IGluIGFueSBvdGhlciBjYXNlIHdoZXJlCisgICB0 aGUgcGFja2V0IGxlbmd0aCBpcyByZXN0cmljdGVkLCBhbmQgc3Ryb25nZXIgdGhlIHNob3J0ZXIg dGhlIG1heGltdW0KKyAgIHBhY2tldCBsZW5ndGguCisKKyAgICAgICAgICAgICAgICAgIFN0cmVh bWluZyAgICBOb25zdHJlYW1pbmcKKyAgTWF4IENQUyAgICAgICAgIDQyNjE4NyAgICAgICAgMzY2 ODcwCisgIE1pbiBDUFMgICAgICAgICA0MDc1MDAgICAgICAgIDI3NjUxNworICBNZWFuIENQUyAg ICAgICAgNDE1MjI2ICAgICAgICAzMzkxNjgKKyAgTWVkaWFuIENQUyAgICAgIDQxNDEzOSAgICAg ICAgMzQzODAzCisgIFN0ZCBEZXYgICAgICAgICAgIDYwOTQgICAgICAgICAyNTg1MQorCisgICBD b3JyZWxhdGlvbnM6CisKKyAgQ1BTIGFuZCB3aW5kb3cgc2l6ZTogICAgMC4xMTYKKyAgQ1BTIGFu ZCBwYWNrZXQgbGVuZ3RoOiAgMC4yNDEKKyAgQ1BTIGFuZCBzdHJlYW1pbmc6ICAgICAgMC45MDEK KworNC4yMC4yLjQuIFN0cmVhbWluZyBvbiBEaWFsdXAgQ29ubmVjdGlvbnMKKworICAgSGVyZSAi ZGlhbHVwIiByZWZlcnMgdG8gYSAiZGlyZWN0IiBkaWFsdXAgY29ubmVjdGlvbiwgbm90IGEgU0xJ UCBvciBQUFAKKyAgIGNvbm5lY3Rpb24sIHdoaWNoIGlzIG9ubHkgYSBwYXJ0aWN1bGFyIGtpbmQg b2YgVENQL0lQIGNvbm5lY3Rpb24uCisKKyAgIEF0dGVtcHQgdGhpcyBhdCB5b3VyIG93biByaXNr LCBhbmQgdGhlbiBvbmx5IGlmIChhKSB5b3UgaGF2ZQorICAgZXJyb3ItY29ycmVjdGluZyBtb2Rl bXMsIGFuZCAoYikgdGhlIGNvbm5lY3Rpb25zIGJldHdlZW4gdGhlIG1vZGVtcyBhbmQKKyAgIGNv bXB1dGVycyBhcmUgYWxzbyBlcnJvci1mcmVlLCBwZXJmZWN0bHkgZmxvdy1jb250cm9sbGVkLCBh bmQgZnJlZSBvZgorICAgaW50ZXJydXB0IGNvbmZsaWN0cy4gU3RyZWFtaW5nIGNhbiBiZSB1c2Vk IGVmZmVjdGl2ZWx5IGFuZCB0byBmYWlybHkKKyAgIGdvb2QgYWR2YW50YWdlIG9uIHN1Y2ggY29u bmVjdGlvbnMsIGJ1dCByZW1lbWJlciB0aGF0IHRoZSB0cmFuc2ZlciBpcworICAgZmF0YWwgaWYg ZXZlbiBvbmUgZXJyb3IgaXMgZGV0ZWN0ZWQgKGFsc28gcmVtZW1iZXIgdGhhdCBzaG91bGQgYQor ICAgYmluYXJ5LW1vZGUgdHJhbnNmZXIgZmFpbCwgaXQgY2FuIGJlIHJlY292ZXJlZCBmcm9tIHRo ZSBwb2ludCBvZgorICAgZmFpbHVyZSB3aXRoIFJFU0VORCkuCisKKyAgIFRvIHVzZSBzdHJlYW1p bmcgb24gYW4gdW5yZWxpYWJsZSBjb25uZWN0aW9uLCB5b3UgbXVzdCB0ZWxsIGJvdGgKKyAgIEtl cm1pdHMgdGhhdCB0aGUgY29ubmVjdGlvbiBpcyByZWxpYWJsZToKKworICBrZXJtaXQgLUkKKwor ICAgb3I6CisKKyAgQy1LZXJtaXQ+IHNldCByZWxpYWJsZSBvbgorCisgICBJbiB0aGlzIGNhc2Us IGl0IHdpbGwgcHJvYmFibHkgYmUgbmVjZXNzYXJ5IHRvIHByZWZpeCBzb21lIGNvbnRyb2wKKyAg IGNoYXJhY3RlcnMsIGZvciBleGFtcGxlIGlmIHlvdXIgY29ubmVjdGlvbiBpcyB0aHJvdWdoIGEg dGVybWluYWwgc2VydmVyCisgICB0aGF0IGhhcyBhbiBlc2NhcGUgY2hhcmFjdGVyLiBNb3N0IENp c2NvIHRlcm1pbmFsIHNlcnZlcnMsIGZvciBleGFtcGxlLAorICAgcmVxdWlyZSBDdHJsLV4gKDMw LCBhcyB3ZWxsIGFzIGl0cyBoaWdoLWJpdCBlcXVpdmFsZW50LCAxNTgpIHRvIGJlCisgICBwcmVm aXhlZC4gVG8gdW5wcmVmaXggdGhlc2UsIHlvdSdsbCBuZWVkIHRvIGRlZmVhdCB0aGUgImNsZWFy IGNoYW5uZWwiCisgICBmZWF0dXJlOgorCisgIEMtS2VybWl0PiBzZXQgcmVsaWFibGUgb24KKyAg Qy1LZXJtaXQ+IHNldCBjbGVhci1jaGFubmVsIG9mZgorICBDLUtlcm1pdD4gc2V0IHByZWZpeGlu ZyBub25lCisgIEMtS2VybWl0PiBzZXQgY29udHJvbCBwcmVmaXggMSAxMyAzMCAxNTggOyBhbmQg d2hhdGV2ZXIgZWxzZSBpcyBuZWNlc3NhcnkKKworICAgRGlhbHVwIHRyaWFscyB3ZXJlIGRvbmUg dXNpbmcgZml4ZWQgbGFyZ2Ugd2luZG93IGFuZCBwYWNrZXQgc2l6ZXMuIFRoZXkKKyAgIGNvbXBh cmUgdXBsb2FkaW5nIGFuZCBkb3dubG9hZGluZyBvZiB0d28gY29tbW9uIHR5cGVzIG9mIGZpbGVz LCB3aXRoCisgICBhbmQgd2l0aG91dCBzdHJlYW1pbmcuIENvbmZpZ3VyYXRpb246CisKKyAgICAg SFAtOTAwMC83MTUvMzMgLS0gNTc2MDBicHMsIFJUUy9DVFMgLS0gVVNSIENvdXJpZXIgVi4zNCAt LQorICAgICBWLjM0K1YuNDIsIDMxMjAwYnBzIC0tIFVTUiBWLjM0KyBSYWNrbW91bnQgLS0gNTc2 MDBicHMsIFJUUy9DVFMgLS0KKyAgICAgQ2lzY28gdGVybWluYWwgc2VydmVyIC0tIFNvbGFyaXMg Mi41LjEuIFBhY2tldCBzaXplID0gODAwMCwgV2luZG93CisgICAgIFNpemUgPSAzMCwgQ29udHJv bCBDaGFyYWN0ZXIgVW5wcmVmaXhpbmcgTWluaW1hbCAoYnV0IGluY2x1ZGluZyB0aGUKKyAgICAg Q2lzY28gZXNjYXBlIGNoYXJhY3RlcikuCisKKyAgIFNpbmNlIHRoaXMgaXMgbm90IGEgdHJ1bHkg cmVsaWFibGUgY29ubmVjdGlvbiwgYSBmZXcgdHJpYWxzIGZhaWxlZCB3aGVuCisgICBhIGJhZCBw YWNrZXQgd2FzIHJlY2VpdmVkIChtb3N0IGxpa2VseSBkdWUgdG8gVUFSVCBvdmVycnVucyk7IHRo ZQorICAgZmFpbHVyZSB3YXMgZ3JhY2VmdWwgYW5kIGltbWVkaWF0ZSwgYW5kIHRoZSBtZXNzYWdl IHdhcyBpbmZvcm1hdGl2ZS4KKyAgIFRoZSByZXN1bHRzIG9mIHRlbiBzdWNjZXNzZnVsIHRyaWFs cyB1cGxvYWRpbmcgYW5kIGRvd25sb2FkaW5nIHRoZSB0d28KKyAgIGZpbGVzIHdpdGggYW5kIHdp dGhvdXQgc3RyZWFtaW5nIGFyZToKKworICAgICAgICAgICAgU3RyZWFtaW5nLi4KKyAgICAgICAg ICAgIE9mZiAgICBPbgorICAgVXBsb2FkICAgNTE5NCAgIDU1NjUgICB0eHQgKD0gQyBzb3VyY2Ug Y29kZSwgNzhLKQorICAgICAgICAgICAgMzEzNSAgIDM0MDYgICBneiAgKD0gZ3ppcCBmaWxlLCBj b21wcmVzc2VkLCA4NUspCisgRG93bmxvYWQgICA1MTk0ICAgNTU2NSAgIHR4dAorICAgICAgICAg ICAgMzA0MSAgIDM0MDYgICBnegorCisgICBFYWNoIENQUyBmaWd1cmUgaXMgdGhlIG1lYW4gb2Yg MTAgcmVzdWx0cy4KKworICAgQSBicmllZiB0ZXN0IHdhcyBhbHNvIHBlcmZvcm1lZCBvbiBhIExB VC1iYXNlZCBkaWFsb3V0IGNvbm5lY3Rpb24gZnJvbQorICAgYSBWQVggMzEwMCB3aXRoIFZNUyA1 LjUgdG8gYSBVU1IgQ291cmllciBWLjM0IGNvbm5lY3RlZCB0byBhIERFQ3NlcnZlcgorICAgNzAw IGF0IDE5MjAwIGJwcy4gVGhlIDEtTUIgU3BhcmMgZXhlY3V0YWJsZSBkb3dubG9hZGVkIGZyb20g YSBTdW4gdG8KKyAgIHRoZSBWQVggYXQgMTEwMGNwcyB3aXRob3V0IHN0cmVhbWluZyBhbmQgMTkw MGNwcyB3aXRoIHN0cmVhbWluZywgdXNpbmcKKyAgIDgwMDAtYnl0ZSBwYWNrZXRzLCAzMCB3aW5k b3cgc2xvdHMsIGFuZCBtaW5pbWFsIHByZWZpeGluZyBpbiBib3RoCisgICBjYXNlcy4KKworNC4y MC4yLjUuIFN0cmVhbWluZyBvbiBYLjI1IENvbm5lY3Rpb25zCisKKyAgIFdlIGhhdmUgb25seSBs aW1pdGVkIGFjY2VzcyB0byBYLjI1IG5ldHdvcmtzLiBPbmUgdHJpYWwgd2FzIHBlcmZvcm1lZAor ICAgaW4gd2hpY2ggdGhlIDFNQiBTb2xhcmlzIDIuNCBTcGFyYyBleGVjdXRhYmxlIHdhcyB0cmFu c2ZlcnJlZCBvdmVyIGEKKyAgIFN1bkxpbmsgWC4yNSBjb25uZWN0aW9uOyBub3RoaW5nIGlzIGtu b3duIGFib3V0IHRoZSBhY3R1YWwgcGh5c2ljYWwKKyAgIGNvbm5lY3Rpb24uIFdpdGggYSBwYWNr ZXQgbGVuZ3RoIG9mIDgwMDAgYW5kIGEgd2luZG93IHNpemUgb2YgMzAsIHRoZQorICAgZmlsZSB0 cmFuc2ZlcnJlZCBhdCA2NDAwIGNwcyAodXNpbmcgYSBtYXhpbXVtIG9mIDYgd2luZG93IHNsb3Rz KS4gV2l0aAorICAgdGhlIHNhbWUgcGFja2V0IGxlbmd0aCwgYnV0IHdpdGggc3RyZWFtaW5nLCBp dCB0cmFuc2ZlcnJlZCB3aXRob3V0CisgICBtaXNoYXAgYXQgNjcxMCBjcHMsIGFib3V0IDUlIGZh c3Rlci4KKworNC4yMC4zLiBTdHJlYW1pbmcgLSBQcmVsaW1pbmFyeSBDb25jbHVzaW9ucworCisg ICBUaGUgcmVzdWx0cyB2YXJ5IHdpdGggdGhlIHBhcnRpY3VsYXIgY29ubmVjdGlvbiwgYnV0IGFy ZSBnb29kIG92ZXJhbGwuCisgICBBbHRob3VnaCBudW1lcm91cyBsb3dlci1sZXZlbCB0cmlja3Mg Y2FuIGJlIHVzZWQgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZQorICAgb24gc3BlY2lmaWMgcGxhdGZv cm1zIG9yIGNvbm5lY3Rpb24gbWV0aG9kcywgc3RyZWFtaW5nIG9jY3VycyBhdCBhCisgICBoaWdo LCBzeXN0ZW0taW5kZXBlbmRlbnQgbGV2ZWwgb2YgdGhlIEtlcm1pdCBwcm90b2NvbCBhbmQgdGhl cmVmb3JlIGNhbgorICAgYXBwbHkgdG8gYWxsIHR5cGVzIG9mIHBsYXRmb3JtcyBhbmQgKHJlbGlh YmxlKSBjb25uZWN0aW9ucworICAgdHJhbnNwYXJlbnRseS4KKworNC4yMS4gVGhlIFRSQU5TTUlU IENvbW1hbmQKKworICAgUHJpb3IgdG8gQy1LZXJtaXQgNy4wLCB0aGUgVFJBTlNNSVQgY29tbWFu ZCB0cmFuc21pdHRlZCBpbiB0ZXh0IG9yCisgICBiaW5hcnkgbW9kZSBhY2NvcmRpbmcgdG8gU0VU IEZJTEUgVFlQRSB7IFRFWFQsIEJJTkFSWSB9LiBCdXQgbm93IHRoYXQKKyAgIGJpbmFyeSBtb2Rl IGlzIGxpa2VseSB0byBiZSB0aGUgZGVmYXVsdCBmb3IgcHJvdG9jb2wgdHJhbnNmZXJzLCBpdCBp cworICAgZXZpZGVudCB0aGF0IHRoaXMgbm90IGFsc28gYW4gYXBwcm9wcmlhdGUgZGVmYXVsdCBm b3IgVFJBTlNNSVQsIHNpbmNlCisgICBiaW5hcnktbW9kZSBUUkFOU01JVCBpcyBhIHJhdGhlciBz cGVjaWFsaXplZCBhbmQgdHJpY2t5IG9wZXJhdGlvbi4KKyAgIFRoZXJlZm9yZSwgVFJBTlNNSVQg ZGVmYXVsdHMgdG8gdGV4dCBtb2RlIGFsd2F5cywgcmVnYXJkbGVzcyBvZiB0aGUKKyAgIEZJTEUg VFlQRSBzZXR0aW5nLgorCisgICBDLUtlcm1pdCA3LjAgZXhwYW5kcyB0aGUgY2FwYWJpbGl0aWVz IG9mIHRoZSBUUkFOU01JVCBjb21tYW5kIGJ5IGFkZGluZworICAgdGhlIGZvbGxvd2luZyBzd2l0 Y2hlcyAoc2VlIFs1MzJdU2VjdGlvbiAxLjUpLiBUaGUgbmV3IHN5bnRheCBpczoKKworICBUUkFO U01JVCBbIHN3aXRjaGVzLi4uIF0gZmlsZW5hbWUKKworICAgWmVybyBvciBtb3JlIHN3aXRjaGVz IG1heSBiZSBpbmNsdWRlZDoKKworICAgL1BJUEUKKyAgICAgICAgICBXaGVuIC9QSVBFIGlzIGlu Y2x1ZGVkLCAiZmlsZW5hbWUiIGlzIGludGVycHJldGVkIGFzIGEgc3lzdGVtCisgICAgICAgICAg Y29tbWFuZCBvciBwcm9ncmFtIHdob3NlIG91dHB1dCBpcyB0byBiZSBzZW50LiBTeW5vbnltOgor ICAgICAgICAgIC9DT01NQU5ELiBFeGFtcGxlOgorCisgIHRyYW5zbWl0IC9waXBlIGZpbmdlcgor CisgICAgICAgICAgWW91IG1heSBlbmNsb3NlIHRoZSBjb21tYW5kIGluIGJyYWNlcywgYnV0IHlv dSBkb24ndCBoYXZlIHRvOgorCisgIHhtaXQgL3BpcGUge2xzIC1sIHwgc29ydCAtciArMC4yMiAt MC4zMiB8IGhlYWR9CisKKyAgIC9CSU5BUlkKKyAgICAgICAgICBUcmFuc21pdHMgdGhlIGZpbGUg KG9yIHBpcGUgb3V0cHV0KSBpbiBiaW5hcnkgbW9kZS4KKworICAgL1RFWFQKKyAgICAgICAgICBU cmFuc21pdHMgdGhlIGZpbGUgKG9yIHBpcGUgb3V0cHV0KSBpbiBsaW5lLW9yaWVudGVkIHRleHQg bW9kZS4KKyAgICAgICAgICBDdXJyZW50IEZJTEUgQ0hBUkFDVEVSLVNFVCBhbmQgVEVSTUlOQUwg Q0hBUkFDVEVSLVNFVCBzZWxlY3Rpb25zCisgICAgICAgICAgZ292ZXJuIHRyYW5zbGF0aW9uLiBE ZWZhdWx0LgorCisgICAvVFJBTlNQQVJFTlQKKyAgICAgICAgICBTcGVjaWZpZXMgdGV4dCBtb2Rl IHdpdGhvdXQgY2hhcmFjdGVyLXNldCB0cmFuc2xhdGlvbiwgbm8gbWF0dGVyCisgICAgICAgICAg d2hhdCB0aGUgRklMRSBhbmQgVEVSTUlOQUwgQ0hBUkFDVEVSLVNFVCBzZWxlY3Rpb25zIGFyZS4K KworICAgL05PV0FJVAorICAgICAgICAgIFRoaXMgaXMgZXF1aXZhbGVudCB0byBTRVQgVFJBTlNN SVQgUFJPTVBUIDAsIGJ1dCBmb3IgdGhpcworICAgICAgICAgIFRSQU5TTUlUIGNvbW1hbmQgb25s eS4gQXBwbGllcyBvbmx5IHRvIHRleHQgbW9kZTsgaXQgbWVhbnMgdG8KKyAgICAgICAgICBub3Qg d2FpdCBmb3IgYW55IGtpbmQgb2YgZWNobyBvciB0dXJuYXJvdW5kIGNoYXJhY3RlciBhZnRlcgor ICAgICAgICAgIHNlbmRpbmcgYSBsaW5lIGJlZm9yZSBzZW5kaW5nIHRoZSBuZXh0IGxpbmUuIChO b3JtYWxseSBLZXJtaXQKKyAgICAgICAgICB3YWl0cyBmb3IgYSBsaW5lZmVlZC4pCisKKyAgIFdo ZW4gVFJBTlNNSVQgRUNITyBpcyBPTiwgQy1LZXJtaXQgdHJpZXMgdG8gcmVhZCBiYWNrIHRoZSBl Y2hvIG9mIGVhY2gKKyAgIGNoYXJhY3RlciB0aGF0IGlzIHNlbnQuIFByaW9yIHRvIEMtS2VybWl0 IDcuMCwgMSBzZWNvbmQgd2FzIGFsbG93ZWQgZm9yCisgICBlYWNoIGVjaG8gdG8gYXBwZWFyOyBp ZiBpdCBkaWRuJ3Qgc2hvdyB1cCBpbiBhIHNlY29uZCwgdGhlIFRSQU5TTUlUCisgICBjb21tYW5k IHdvdWxkIGZhaWwuIFNpbWlsYXJseSBmb3IgdGhlIFRSQU5TTUlUIFBST01QVCBjaGFyYWN0ZXIu CisgICBIb3dldmVyLCB3aXRoIHRvZGF5J3MgY29uZ2VzdGVkIEludGVybmV0IGNvbm5lY3Rpb25z LCBldGMsIG1vcmUgdGltZSBpcworICAgb2Z0ZW4gbmVlZGVkOgorCisgICBTRVQgVFJBTlNNSVQg VElNRU9VVCBudW1iZXIKKworICAgU3BlY2lmaWVzIHRoZSBudW1iZXIgb2Ygc2Vjb25kcyB0byB3 YWl0IGZvciBhbiBlY2hvIG9yIHRoZSBwcm9tcHQKKyAgIGNoYXJhY3RlciB3aGVuIFRSQU5TTUlU IFBST01QVCBpcyBub256ZXJvOyB0aGUgZGVmYXVsdCB3YWl0IGlzIDEKKyAgIHNlY29uZC4gSWYg eW91IHNwZWNpZnkgMCwgdGhlIHdhaXQgaXMgaW5kZWZpbml0ZS4gV2hlbiBhIHRpbWVvdXQKKyAg IGludGVydmFsIG9mIDAgaXMgc3BlY2lmaWVkLCBhbmQgYSBkZXNpcmVkIGVjaG8gb3IgcHJvbXB0 IGRvZXMgbm90IHNob3cKKyAgIHVwLCB0aGUgVFJBTlNNSVQgY29tbWFuZCB3aWxsIG5vdCB0ZXJt aW5hdGUgdW50aWwgb3IgdW5sZXNzIHlvdQorICAgaW50ZXJydXB0IGl0IHdpdGggQ3RybC1DOyB1 c2UgU0VUIFRSQU5TTUlUIFRJTUVPVVQgMCB3aXRoIGNhdXRpb24uCisKKyAgIE5vdGU6IHRvIGJs YXN0IGEgZmlsZSBvdXQgdGhlIGNvbW11bmljYXRpb25zIGNvbm5lY3Rpb24gd2l0aG91dCBhbnkK KyAgIGtpbmQgb2Ygc3luY2hyb25pemF0aW9uIG9yIHRpbWVvdXRzIG9yIG90aGVyIG1hbm5lciBv ZiBjaGVja2luZywgdXNlOgorCisgIFNFVCBUUkFOU01JVCBFQ0hPIE9GRgorICBTRVQgVFJBTlNN SVQgUFJPTVBUIDAgKG9yIGluY2x1ZGUgdGhlIC9OT1dBSVQgc3dpdGNoKQorICBTRVQgVFJBTlNN SVQgUEFVU0UgMAorICBUUkFOU01JVCBbIHN3aXRjaGVzIF0gZmlsZW5hbWUKKworICAgSW4gdGhp cyBjYXNlLCB0ZXh0LWZpbGUgdHJhbnNtaXNzaW9uIGlzIG5vdC1saW5lIG9yaWVudGVkIGFuZCBs YXJnZQorICAgYmxvY2tzIGNhbiBiZSBzZW50LCByZXN1bHRpbmcgaW4gYSBzaWduaWZpY2FudCBw ZXJmb3JtYW5jZSBpbXByb3ZlbWVudAorICAgb3ZlciBsaW5lLWF0LWF0LXRpbWUgdHJhbnNtaXNz aW9uLiBTdWNjZXNzZnVsIG9wZXJhdGlvbiBkZXBlbmRzIChldmVuCisgICBtb3JlIHRoYW4gdXN1 YWwgZm9yIHRoZSBUUkFOU01JVCBjb21tYW5kISkgb24gYSBjbGVhbiBjb25uZWN0aW9uIHdpdGgK KyAgIGVmZmVjdGl2ZSBmbG93IGNvbnRyb2wuCisKKyAgIEZvciBkZXRhaWxzIG9uIFRSQU5TTUlU IGFuZCBjaGFyYWN0ZXIgc2V0cywgc2VlIFs1MzNdU2VjdGlvbiA2LjYuNS40LgorCisgIDQuMjIu IENvcGluZyB3aXRoIEZhdWx0eSBLZXJtaXQgSW1wbGVtZW50YXRpb25zCisKKyAgIEtlcm1pdCBw cm90b2NvbCBoYXMgYmVlbiBpbXBsZW1lbnRlZCBpbiBxdWl0ZSBhIGZldyB0aGlyZC1wYXJ0eQor ICAgY29tbWVyY2lhbCwgc2hhcmV3YXJlLCBhbmQgZnJlZXdhcmUgc29mdHdhcmUgcGFja2FnZXMs IHdpdGggdmFyeWluZworICAgZGVncmVlcyBvZiBzdWNjZXNzLiBJbiBtb3N0IGNhc2VzIG9wZXJh dGlvbiBpcyBzYXRpc2ZhY3RvcnkgYnV0IHNsb3cgLS0KKyAgIG9ubHkgdGhlIGJhcmUgbWluaW11 bSBzdWJzZXQgb2YgdGhlIHByb3RvY29sIGlzIGF2YWlsYWJsZSAtLSBzaG9ydAorICAgcGFja2V0 cywgbm8gc2xpZGluZyB3aW5kb3dzLCBubyBhdHRyaWJ1dGVzLCBldGMuIEluIG90aGVyIGNhc2Vz LCB0aGUKKyAgIGltcGxlbWVudGF0aW9uIGlzIGluY29ycmVjdCwgcmVzdWx0aW5nIGluIGZhaWx1 cmVzIGF0IHRoZSBpbml0aWFsCisgICBuZWdvdGlhdGlvbiBzdGFnZSBvciBjb3JydXB0ZWQgZmls ZXMuCisKKyAgIEMtS2VybWl0IDcuMCBhbmQgS2VybWl0IDk1IDEuMS4xOSBpbmNsdWRlIHNvbWUg bmV3IGRlZmVuc2UgbWVjaGFuaXNtcworICAgdG8gaGVscCBjb3BlIHdpdGggdGhlIG1vc3QgY29t bW9uIHNpdHVhdGlvbnMuIEhvd2V2ZXIsIGJlYXIgaW4gbWluZAorICAgdGhlcmUgaXMgb25seSBz byBtdWNoIHdlIGNhbiBkbyBpbiBzdWNoIGNhc2VzIC0tIHRoZSByZXNwb25zaWJpbGl0eSBmb3IK KyAgIGZpeGluZyB0aGUgcHJvYmxlbSBsaWVzIHdpdGggdGhlIG1ha2VyIG9mIHRoZSBmYXVsdHkg c29mdHdhcmUuCisKKyAgICA0LjIyLjEuIEZhaWx1cmUgdG8gQWNjZXB0IE1vZGVybiBOZWdvdGlh dGlvbiBTdHJpbmdzCisKKyAgIFRoZSBwdWJsaXNoZWQgS2VybWl0IHByb3RvY29sIHNwZWNpZmlj YXRpb24gc3RhdGVzIHRoYXQgbmV3IGZpZWxkcyBjYW4KKyAgIGJlIGFkZGVkIHRvIHRoZSBwYXJh bWV0ZXIgbmVnb3RpYXRpb24gc3RyaW5nLiBUaGVzZSBhcmUgdG8gYmUgaWdub3JlZAorICAgYnkg YW55IEtlcm1pdCBpbXBsZW1lbnRhdGlvbiB0aGF0IGRvZXMgbm90IHVuZGVyc3RhbmQgdGhlbTsg dGhpcyBpcworICAgd2hhdCBtYWtlcyB0aGUgS2VybWl0IHByb3RvY29sIGV4dGVuc2libGUuIFVu Zm9ydHVuYXRlbHksIHNvbWUgS2VybWl0CisgICBpbXBsZW1lbnRhdGlvbnMgYmVjb21lIGNvbmZ1 c2VkIChvciB3b3JzZSkgd2hlbiByZWNlaXZpbmcgYSBuZWdvdGlhdGlvbgorICAgc3RyaW5nIGxv bmdlciB0aGFuIHRoZSBvbmUgdGhleSBleHBlY3QuIFlvdSBjYW4gdHJ5IHdvcmtpbmcgYXJvdW5k IHN1Y2gKKyAgIHByb2JsZW1zIGJ5IHRlbGxpbmcgS2VybWl0IHRvIHNob3J0ZW4gaXRzIG5lZ290 aWF0aW9uIHN0cmluZyAoYW5kIHRodXMKKyAgIGRpc2FibGUgdGhlIGNvcnJlc3BvbmRpbmcgbmV3 IGZlYXR1cmVzKToKKworICBTRVQgU0VORCBORUdPVElBVElPTi1TVFJJTkctTUFYLUxFTkdUSCBu dW1iZXIKKworICAgVHJ5IGEgbnVtYmVyIGxpa2UgMTAuIElmIHRoYXQgZG9lc24ndCB3b3JrLCB0 cnkgOSwgOCwgNywgNiwgYW5kIHNvIG9uLgorCisgICAgNC4yMi4yLiBGYWlsdXJlIHRvIE5lZ290 aWF0ZSA4dGgtYml0IFByZWZpeGluZworCisgICBUaGUgcHVibGlzaGVkIEtlcm1pdCBwcm90b2Nv bCBzcGVjaWZpY2F0aW9uIHN0YXRlcyB0aGF0IDh0aC1iaXQKKyAgIHByZWZpeGluZyAod2hpY2gg YWxsb3dzIHRyYW5zZmVyIG9mIDgtYml0IGRhdGEgb3ZlciBhIDctYml0IGNvbm5lY3Rpb24pCisg ICBvY2N1cnMgaWYgdGhlIGZpbGUgc2VuZGVyIHB1dHMgYSB2YWxpZCBwcmVmaXggY2hhcmFjdGVy IChub3JtYWxseSAiJiIpCisgICBpbiB0aGUgOHRoLWJpdC1wcmVmaXggZmllbGQgb2YgdGhlIG5l Z290aWF0aW9uIHN0cmluZywgYW5kIHRoZSByZWNlaXZlcgorICAgcHV0cyBlaXRoZXIgYSBsZXR0 ZXIgIlkiIG9yIHRoZSBzYW1lIHByZWZpeCBjaGFyYWN0ZXIuIEF0IGxlYXN0IG9uZQorICAgZmF1 bHR5IEtlcm1pdCBpbXBsZW1lbnRhdGlvbiBleGlzdHMgdGhhdCBkb2VzIG5vdCBhY2NlcHQgdGhl IGxldHRlcgorICAgIlkiLiBUbyBmb3JjZSBDLUtlcm1pdCAvIEstOTUgdG8gcmVwbHkgd2l0aCB0 aGUgb3RoZXIgS2VybWl0J3MgcHJlZml4CisgICBjaGFyYWN0ZXIgcmF0aGVyIHRoYW4gYSAiWSIs IGdpdmUgdGhlIGZvbGxvd2luZyAoaW52aXNpYmxlKSBjb21tYW5kOgorCisgIFNFVCBROEZMQUcg T04KKworICAgVXNlIFNFVCBROEZMQUcgT0ZGIHRvIHJlc3RvcmUgdGhlIG5vcm1hbCBiZWhhdmlv ci4KKworICAgIDQuMjIuMy4gQ29ycnVwdCBGaWxlcworCisgICBSZWZlciB0byBbNTM0XVNlY3Rp b24gNC4yMi4yLiBTb21lIEtlcm1pdCBpbXBsZW1lbnRhdGlvbnMgbWlzdGFrZW5seQorICAgaW50 ZXJwcmV0IHRoZSAiWSIgYXMgYSBwcmVmaXggY2hhcmFjdGVyLiBUaGVuLCB3aGVuZXZlciBhIGxl dHRlciBZCisgICBhcHBlYXJzIGluIHRoZSBkYXRhLCB0aGUgWSBhbmQgdGhlIGNoYXJhY3RlciB0 aGF0IGZvbGxvd3MgaXQgYXJlCisgICByZXBsYWNlZCBieSBhIGdhcmJhZ2UgY2hhcmFjdGVyLiBB dCB0aGlzIHdyaXRpbmcsIHdlIGFyZSBub3Qgc3VyZSBpZgorICAgdGhlcmUgaXMgYW55IHNvbHV0 aW9uLCBidXQgdHJ5ICJzZXQgc2VuZCBuZWdvdGlhdGlvbi1zdHJpbmctbWF4LWxlbmd0aAorICAg NiIgYW5kL29yICJzZXQgcThmbGFnIG9uIi4KKworICAgRmlsZSBjb3JydXB0aW9uIGNhbiBhbHNv IG9jY3VyIHdoZW4gY29udHJvbCBjaGFyYWN0ZXJzIHdpdGhpbiB0aGUgZmlsZQorICAgZGF0YSBh cmUgc2VudCB3aXRob3V0IHByZWZpeGluZywgYXMgYXQgbGVhc3Qgc29tZSBhcmUgYnkgZGVmYXVs dCBpbgorICAgQy1LZXJtaXQgNy4wIGFuZCBLLTk1LiBTb21lIEtlcm1pdCBpbXBsZW1lbnRhdGlv bnMgZG8gbm90IGhhbmRsZQorICAgaW5jb21pbmcgImJhcmUiIGNvbnRyb2wgY2hhcmFjdGVycy4g VG8gd29yayBhcm91bmQsICJzZXQgcHJlZml4aW5nCisgICBhbGwiLgorCisgICAgNC4yMi40LiBT cHVyaW91cyBDYW5jZWxsYXRpb25zCisKKyAgIFRoZSBLZXJtaXQgcHJvdG9jb2wgc3BlY2lmaWNh dGlvbiBzdGF0ZXMgdGhhdCBpZiBhbiBBQ0sgdG8gYSBEYXRhCisgICBwYWNrZXQgY29udGFpbnMg WCBpbiBpdHMgZGF0YSBmaWVsZCwgdGhlIHRyYW5zZmVyIG9mIHRoZSBjdXJyZW50IGZpbGUKKyAg IGlzIGNhbmNlbGVkLCBhbmQgaWYgaXQgY29udGFpbnMgYSBaLCB0aGUgZW50aXJlIHRyYW5zZmVy IGlzIGNhbmNlbGVkLgorICAgQXQgbGVhc3Qgb25lIG92ZXJ6ZWFsb3VzIEtlcm1pdCBpbXBsZW1l bnRhdGlvbiBhcHBsaWVzIHRoaXMgcnVsZSB0bworICAgbm9uLURhdGEgcGFja2V0cyBhcyB3ZWxs LCB0aGUgdHlwaWNhbCBzeW1wdG9tIGJlaW5nIHRoYXQgYW55IGF0dGVtcHQgdG8KKyAgIHRyYW5z ZmVyIGEgZmlsZSB3aG9zZSBuYW1lIGJlZ2lucyB3aXRoIFggb3IgWiByZXN1bHRzIGluIGNhbmNl bGxhdGlvbi4KKyAgIFRoaXMgaXMgYmVjYXVzZSB0aGUgZmlsZSByZWNlaXZlciB0eXBpY2FsbHkg c2VuZHMgYmFjayB0aGUgbmFtZSB1bmRlcgorICAgd2hpY2ggaXQgc3RvcmVkIHRoZSBmaWxlICh3 aGljaCBtaWdodCBub3QgYmUgdGhlIHNhbWUgYXMgdGhlIG5hbWUgaXQKKyAgIHdhcyBzZW50IHdp dGgpIGluIHRoZSBBQ0sgdG8gdGhlIEZpbGUgSGVhZGVyIHBhY2tldC4gVGhpcyBpcworICAgaW5m b3JtYXRpb24gb25seSBhbmQgc2hvdWxkIG5vdCBjYXVzZSBjYW5jZWxsYXRpb24uIFRvIHdvcmsg YXJvdW5kIHRoZQorICAgcHJvYmxlbSwgdXNlOgorCisgIFNFVCBGLUFDSy1CVUcgeyBPTiwgT0ZG IH0KKworICAgT04gdGVsbHMgS2VybWl0IG5vdCB0byBzZW5kIGJhY2sgdGhlIGZpbGVuYW1lIGlu IHRoZSBBQ0sgdG8gdGhlIGZpbGUKKyAgIGhlYWRlciBwYWNrZXQgYXMgaXQgbm9ybWFsbHkgd291 bGQgZG8gKE9GRiBwdXRzIEtlcm1pdCBiYWNrIHRvIG5vcm1hbAorICAgYWZ0ZXIgdXNpbmcgT04p LgorCisgICBBIHZhcmlhdGlvbiBvbiB0aGUgdGhpcyBidWcgb2NjdXJzIGluIGFuIG9ic2N1cmUg S2VybWl0IHByb2dyYW0gZm9yCisgICBNVU1QUzogV2hlbiB0aGlzIEtlcm1pdCBwcm9ncmFtIHNl bmRzIGEgZmlsZSBjYWxsZWQgKHNheSkgRk9PLkJBUiwgaXQKKyAgIHJlcXVpcmVzIHRoYXQgdGhl IEFDSyB0byBpdHMgRiBwYWNrZXQgY29udGFpbiBleGFjdGx5IHRoZSBzYW1lIG5hbWUsCisgICBG T08uQkFSLiBIb3dldmVyLCBDLUtlcm1pdCBsaWtlcyB0byBzZW5kIGJhY2sgdGhlIGZ1bGwgcGF0 aG5hbWUsCisgICBjYXVzaW5nIHRoZSBNVU1QUyBLZXJtaXQgdG8gZmFpbC4gU0VUIEYtQUNLLUJV RyBPTiBkb2Vzbid0IGhlbHAgaGVyZS4KKyAgIFNvIGEgc2VwYXJhdGUgY29tbWFuZCBoYXMgYmVl biBhZGRlZCB0byBoYW5kbGUgdGhpcyBzaXR1YXRpb246CisKKyAgU0VUIEYtQUNLLVBBVEggeyBP TiwgT0ZGIH0KKworICAgTm9ybWFsbHkgaXQgaXMgT04gKHJlZ2FyZGxlc3Mgb2YgdGhlIFNFVCBT RU5EIFBBVEhOQU1FUyBzZXR0aW5nKS4gVXNlCisgICBTRVQgRi1BQ0stUEFUSCBPRkYgdG8gaW5z dHJ1Y3QgS2VybWl0IHRvIHNlbmQgYmFjayBvbmx5IHRoZSBmaWxlbmFtZQorICAgd2l0aG91dCB0 aGUgcGF0aCBpbiB0aGUgQUNLIHRvIHRoZSBGIHBhY2tldC4KKworICAgIDQuMjIuNS4gU3B1cmlv dXMgUmVmdXNhbHMKKworICAgU29tZSBLZXJtaXQgaW1wbGVtZW50YXRpb25zLCBub3RhYmx5IFBE UC0xMSBLZXJtaXQgMy42MCBhbmQgZWFybGllciwKKyAgIGhhdmUgYnVncyBpbiB0aGVpciBoYW5k bGluZyBvZiBBdHRyaWJ1dGUgcGFja2V0cyB0aGF0IGNhbiBjYXVzZQorICAgdW53YXJyYW50ZWQg cmVmdXNhbCBvZiBpbmNvbWluZyBmaWxlcywgZS5nLiBiYXNlZCBvbiBkYXRlIG9yIHNpemUuIFRo aXMKKyAgIGNhbiBiZSB3b3JrZWQgYXJvdW5kIGJ5IHRlbGxpbmcgb25lIG9yIGJvdGggb2YgdGhl IEtlcm1pdCBwYXJ0bmVycyB0bzoKKworICBTRVQgQVRUUklCVVRFUyBPRkYKKworICAgIDQuMjIu Ni4gRmFpbHVyZXMgZHVyaW5nIHRoZSBEYXRhIFRyYW5zZmVyIFBoYXNlCisKKyAgIFRoaXMgY2Fu IGJlIGNhdXNlZCBieSBjb250cm9sLWNoYXJhY3RlciB1bnByZWZpeGluZyAoWzUzNV1TZWN0aW9u CisgICA0LjIyLjMgKSwgYW5kIGZpeGVkIGJ5OgorCisgIFNFVCBQUkVGSVhJTkcgQUxMCisKKyAg IEl0IGNhbiBhbHNvIGhhdmUgbnVtZXJvdXMgb3RoZXIgY2F1c2VzLCBleHBsYWluZWQgaW4gQ2hh cHRlciAxMCBvZgorICAgWzUzNl1Vc2luZyBDLUtlcm1pdDogdGhlIGNvbm5lY3Rpb24gaXMgbm90 IDgtYml0IHRyYW5zcGFyZW50IChzbyB1c2UKKyAgICJzZXQgcGFyaXR5IHNwYWNlIiBvciBzb21l c3VjaCksIGluYWRlcXVhdGUgZmxvdyBjb250cm9sLCBldGMuIENvbnN1bHQKKyAgIHRoZSBtYW51 YWwuCisKKyAgICA0LjIyLjcuIEZyYWN0dXJlZCBGaWxlbmFtZXMKKworICAgQXQgbGVhc3Qgb25l IHdlbGwta25vd24gUEMtYmFzZWQgY29tbXVuaWNhdGlvbnMgcGFja2FnZSBuZWdvdGlhdGVzIGRh dGEKKyAgIGNvbXByZXNzaW9uLCB3aGljaCAoYWNjb3JkaW5nIHRvIHRoZSBwcm90b2NvbCBzcGVj aWZpY2F0aW9uKSBhcHBsaWVzIHRvCisgICBib3RoIHRoZSBmaWxlbmFtZSBhbmQgdGhlIGZpbGUg ZGF0YSwgYnV0IHRoZW4gZmFpbHMgdG8gZGVjb21wcmVzcyB0aGUKKyAgIGZpbGVuYW1lLiBFeGFt cGxlOiBDLUtlcm1pdCBzZW5kcyBhIGZpbGUgY2FsbGVkIFIwMDAxMDEuREFUICh3aGVyZQorICAg MDAwMTAxIG1pZ2h0IGJlIG5vbi1ZMkstd2lzZSBZWU1NREQgbm90YXRpb24pLCBhbmQgdGhlIHBh Y2thZ2UgaW4KKyAgIHF1ZXN0aW9uIHN0b3JlcyB0aGUgZmlsZXMgYXMgUn4jMDEwMS5EQVQuIFdv cmthcm91bmQ6IFRlbGwgQy1LZXJtaXQgdG8KKyAgIFNFVCBSRVBFQVQgQ09VTlRTIE9GRi4KKwor ICAgIDQuMjIuOC4gQmFkIEZpbGUgRGF0ZXMKKworICAgQXQgbGVhc3Qgb25lIHdlbGwta25vd24g UEMtYmFzZWQgY29tbXVuaWNhdGlvbnMgcGFja2FnZSBuZWdvdGlhdGVzIHRoZQorICAgcGFzc2lu ZyBvZiBmaWxlIHRpbWVzdGFtcHMgZnJvbSBzZW5kZXIgdG8gcmVjZWl2ZXIsIGJ1dCB3aGVuIGl0 IGlzCisgICBzZW5kaW5nIGZpbGVzLCBpdCBhbHdheXMgZ2l2ZXMgdGhlbSBhIHRpbWVzdGFtcCBv ZiAxIEZlYnJ1YXJ5IDE5NzAuCisgICBXb3JrYXJvdW5kOiB0ZWxsIEMtS2VybWl0IHRvIFNFVCBB VFRSSUJVVEUgREFURSBPRkYuIFlvdSBkb24ndCBnZXQgdGhlCisgICBmaWxlJ3MgcmVhbCBkYXRl LCBidXQgeW91IGFsc28gZG9uJ3QgZ2V0IDEgRmViIDE5NzA7IGluc3RlYWQgdGhlIGZpbGUKKyAg IGdldHMgdGhlIGN1cnJlbnQgZGF0ZSBhbmQgdGltZS4KKworICA0LjIzLiBGaWxlIFRyYW5zZmVy IFJlY292ZXJ5CisKKyAgIFByaW9yIHRvIEMtS2VybWl0IDcuMCwgUkVTRU5EIChTRU5EIC9SRUNP VkVSKSBhbmQgUkVHRVQgKEdFVCAvUkVDT1ZFUikKKyAgIHJlZnVzZWQgdG8gd29yayBpZiBGSUxF IFRZUEUgd2FzIG5vdCBCSU5BUlkgb3IgdGhlIC9CSU5BUlkgc3dpdGNoIHdhcworICAgbm90IGlu Y2x1ZGVkLiBOb3cgdGhlc2UgY29tbWFuZHMgaW5jbHVkZSBhbiBpbXBsaWVkIC9CSU5BUlkgc3dp dGNoLAorICAgbWVhbmluZyB0aGV5IHNldCB0aGUgZmlsZSB0eXBlIHRvIGJpbmFyeSBmb3IgdGhl IGR1cmF0aW9uIG9mIHRoZQorICAgY29tbWFuZCBhdXRvbWF0aWNhbGx5LgorCisgICBJbiB0aGUg Y2xpZW50L3NlcnZlciBhcnJhbmdlbWVudCwgdGhpcyBhbHNvIGZvcmNlcyB0aGUgc2VydmVyIGlu dG8KKyAgIGJpbmFyeSBtb2RlIChpZiBpdCBpcyBDLUtlcm1pdCA3LjAgb3IgZ3JlYXRlciwgb3Ig Szk1IDEuMS4xOSBvcgorICAgZ3JlYXRlcikgc28gdGhlIHJlY292ZXJ5IG9wZXJhdGlvbiBwcm9j ZWVkcywganVzdCBhcyB5b3UgYXNrZWQgYW5kCisgICBleHBlY3RlZC4KKworICAgQlVULi4uIEp1 c3QgYXMgYmVmb3JlLCB0aGUgcmVzdWx0cyBhcmUgY29ycmVjdCBvbmx5IHVuZGVyIHRoZSBmb2xs b3dpbmcKKyAgIGNvbmRpdGlvbnM6CisKKyAgICAgKiBJZiB0aGUgcHJpb3IgaW50ZXJydXB0ZWQg dHJhbnNmZXIgd2FzIGFsc28gaW4gYmluYXJ5IG1vZGU7IG9yOgorICAgICAqIElmIHRoZSBwcmlv ciB0cmFuc2ZlciB3YXMgaW4gdGV4dCBtb2RlIGFuZCB0aGUgb3RoZXIgY29tcHV0ZXIgd2FzIGEK KyAgICAgICAibGlrZSBwbGF0Zm9ybSIgKGUuZy4gVU5JWC10by1VTklYLCBXaW5kb3dzLXRvLVdp bmRvd3MsCisgICAgICAgRE9TLXRvLVdpbmRvd3MpIEFORCB0aGVyZSB3YXMgbm8gY2hhcmFjdGVy LXNldCB0cmFuc2xhdGlvbiAoaS5lLgorICAgICAgIFRSQU5TRkVSIENIQVJBQ1RFUi1TRVQgd2Fz IFRSQU5TUEFSRU5UKS4KKworICAgTm90ZSB0aGF0IHRoZXNlIGNpcmN1bXN0YW5jZXMgYXJlIG1v cmUgbGlrZWx5IHRvIG9idGFpbiBpbiBDLUtlcm1pdAorICAgNy4wLCBpbiB3aGljaDoKKworICAg ICAqIFRoZSBkZWZhdWx0IEZJTEUgVFlQRSBpbiBDLUtlcm1pdCA3LjAgaXMgQklOQVJZLgorICAg ICAqIFRoZSBkZWZhdWx0IEZJTEUgSU5DT01QTEVURSBzZXR0aW5nIGlzIEFVVE8sIHdoaWNoIG1l YW5zIEtFRVAgaWYKKyAgICAgICB0aGUgdHJhbnNmZXIgaXMgaW4gYmluYXJ5IG1vZGUsIERJU0NB UkQgb3RoZXJ3aXNlLgorICAgICAqIEMtS2VybWl0IDcuMCwgS2VybWl0IDk1IDEuMS4xNywgYW5k IE1TLURPUyBLZXJtaXQgMy4xNSBhbmQgbGF0ZXIKKyAgICAgICBjYW4gcmVjb2duaXplICJsaWtl IHBsYXRmb3JtcyIgYW5kIHN3aXRjaCBpbnRvIGJpbmFyeSBtb2RlCisgICAgICAgYXV0b21hdGlj YWxseS4gVHJhbnNmZXJzIGJldHdlZW4gbGlrZSBwbGF0Zm9ybXMgYXJlIGFsd2F5cyBiaW5hcnkK KyAgICAgICB1bmxlc3MgY2hhcmFjdGVyLXNldCB0cmFuc2xhdGlvbiBoYXMgYmVlbiByZXF1ZXN0 ZWQsIGFuZCB0aGVuIGlzCisgICAgICAgc3RpbGwgYmluYXJ5IGZvciBhbGwgZmlsZXMgd2hvc2Ug bmFtZXMgbWF0Y2ggYSBiaW5hcnkgcGF0dGVybiwKKyAgICAgICB1bmxlc3MgdGhlIGF1dG9tYXRp YyBtZWNoYW5pc21zIGhhdmUgYmVlbiBkaXNhYmxlZCAod2l0aCBhIC9URVhUCisgICAgICAgc3dp dGNoLCBvciB3aXRoIFNFVCBUUkFOU0ZFUiBNT0RFIE1BTlVBTCkuCisgICAgICogU0VORCAvQklO QVJZIGFuZCBHRVQgL0JJTkFSWSBhbHdheXMgZm9yY2UgYmluYXJ5LW1vZGUgdHJhbnNmZXJzLAor ICAgICAgIGV2ZW4gd2hlbiBGSUxFIFRZUEUgaXMgVEVYVCwgZXZlbiB3aGVuIFRSQU5TRkVSIE1P REUgaXMgQVVUT01BVElDLAorICAgICAgIGV2ZW4gd2hlbiBQQVRURVJOUyBhcmUgT04gYW5kIHRo ZSBmaWxlJ3MgbmFtZSBtYXRjaGVzIGEgdGV4dAorICAgICAgIHBhdHRlcm4uCisKKyAgIEJ1dCBh bHNvIG5vdGUgdGhhdCB0aGUgYXV0b21hdGljIGNsaWVudC9zZXJ2ZXIgdHJhbnNmZXItbW9kZQor ICAgYWRqdXN0bWVudHMgZG8gbm90IHdvcmsgd2l0aCB2ZXJzaW9ucyBvZiBDLUtlcm1pdCBwcmlv ciB0byA3LjAgb3IgSzk1CisgICBwcmlvciB0byAxLjEuMTYuCisKKyAgIElmIHRoZSBwcmlvciB0 cmFuc2ZlciB3YXMgaW4gdGV4dCBtb2RlOgorCisgICAgICogSWYgdGV4dC1tb2RlIHRyYW5zZmVy cyBiZXR3ZWVuIHRoZSB0d28gcGxhdGZvcm1zIGFyZQorICAgICAgICJsZW5ndGgtY2hhbmdpbmci IChhcyB0aGV5IGFyZSBiZXR3ZWVuIFVOSVggLS0gd2hpY2ggdGVybWluYXRlcworICAgICAgIHRl eHQgbGluZXMgd2l0aCBMRiAtLSBhbmQgRE9TIG9yIFdpbmRvd3MgLS0gd2hpY2ggdGVybWluYXRl cyB0ZXh0CisgICAgICAgbGluZXMgd2l0aCBDUkxGKSwgdGhlIHJlY292ZXJlZCBmaWxlIHdpbGwg YmUgY29ycnVwdC4KKyAgICAgKiBJZiB0ZXh0LW1vZGUgdHJhbnNmZXJzIGJldHdlZW4gdGhlIHR3 byBwbGF0Zm9ybXMgYXJlIG5vdAorICAgICAgIGxlbmd0aC1jaGFuZ2luZywgYnV0IGNoYXJhY3Rl ci1zZXQgdHJhbnNsYXRpb24gd2FzIGFjdGl2ZSBpbiB0aGUKKyAgICAgICBwcmlvciB0cmFuc2Zl ciwgdGhlIHJlc3VsdCB3aWxsIGJlIGEgZmlsZSBpbiB3aGljaCB0aGUgZmlyc3QgcGFydAorICAg ICAgIGhhcyB0cmFuc2xhdGVkIGNoYXJhY3RlcnMgYW5kIHRoZSBzZWNvbmQgcGFydCBkb2VzIG5v dC4KKworICAgQnV0IGluIEMtS2VybWl0IDcuMCBhbmQgSzk1IDEuMS4xOSBhbmQgbGF0ZXIsIGlu Y29tcGxldGVseSB0cmFuc2ZlcnJlZAorICAgdGV4dCBmaWxlcyBhcmUgbm90IGtlcHQgdW5sZXNz IHlvdSBjaGFuZ2UgdGhlIGRlZmF1bHQuIEJ1dCBpZiB5b3UgaGF2ZQorICAgZG9uZSB0aGlzLCBh bmQgeW91IGhhdmUgYW4gaW5jb21wbGV0ZWx5IHRyYW5zZmVycmVkIHRleHQgZmlsZSwgeW91J2xs CisgICBuZWVkIHRvOgorCisgICAgICogVHJhbnNmZXIgdGhlIHdob2xlIGZpbGUgYWdhaW4gaW4g dGV4dCBtb2RlLCBvcjoKKyAgICAgKiBVc2UgU0VORCAvU1RBUlRJTkctQVQ6IHRvIHJlY292ZXIg dGhlIHRyYW5zZmVyIGF0IHRoZSBjb3JyZWN0CisgICAgICAgcG9pbnQ7IGJ1dCB5b3UgaGF2ZSB0 byBmaW5kIG91dCB3aGF0IHRoYXQgcG9pbnQgaXMsIGFzIGRlc2NyaWJlZCBpbgorICAgICAgIHRo ZSBtYW51YWwuCisKKyAgIEtlcm1pdCBoYXMgbm8gd2F5IG9mIGtub3dpbmcgd2hldGhlciB0aGUg cHJldmlvdXMgdHJhbnNmZXIgd2FzIGluIHRleHQKKyAgIG9yIGJpbmFyeSBtb2RlIHNvIGl0IGlz IHlvdXIgcmVzcG9uc2liaWxpdHkgdG8gY2hvb3NlIHRoZSBhcHByb3ByaWF0ZQorICAgcmVjb3Zl cnkgbWV0aG9kLgorCisgICBJZiB5b3UgdXNlIEMtS2VybWl0IHRvIG1haW50YWluIHBhcmFsbGVs IGRpcmVjdG9yaWVzIG9uIGRpZmZlcmVudAorICAgY29tcHV0ZXJzLCB1c2luZyBTRVQgRklMRSBD T0xMSVNJT04gdG8gdHJhbnNmZXIgb25seSB0aG9zZSBmaWxlcyB0aGF0CisgICBjaGFuZ2VkIHNp bmNlIGxhc3QgdGltZSwgYW5kIHRoZSBmaWxlcyBhcmUgYmlnIGVub3VnaCAob3IgdGhlCisgICBj b25uZWN0aW9uIHNsb3cgZW5vdWdoKSB0byByZXF1aXJlIFNFTkQgL1JFQ09WRVIgdG8gcmVzdW1l IGludGVycnVwdGVkCisgICB0cmFuc2ZlcnMsIHlvdSBzaG91bGQgcmVtZW1iZXIgdGhhdCBTRU5E IC9SRUNPVkVSIChSRVNFTkQpIG92ZXJyaWRlcworICAgYWxsIEZJTEUgQ09MTElTSU9OIHNldHRp bmdzLiBUaGVyZWZvcmUgeW91IHNob3VsZCB1c2UgU0VORCAvUkVDT1ZFUgorICAgKFJFU0VORCkg b25seSBvbiB0aGUgZmlsZSB0aGF0IHdhcyBpbnRlcnJ1cHRlZCwgbm90IHRoZSBmaWxlIGdyb3Vw LiBGb3IKKyAgIGV4YW1wbGUsIGlmIHRoZSBvcmlnaW5hbCB0cmFuc2ZlciB3YXMgaW5pdGlhdGVk IHdpdGg6CisKKyAgU0VORCAqCisKKyAgIGFuZCB3YXMgaW50ZXJydXB0ZWQsIHRoZW4gYWZ0ZXIg cmVlc3RhYmxpc2hpbmcgeW91ciBjb25uZWN0aW9uIGFuZAorICAgc3RhcnRpbmcgdGhlIEtlcm1p dCByZWNlaXZlciB3aXRoIFNFVCBGSUxFIENPTExJU0lPTiBVUERBVEUgb24gdGhlCisgICByZW1v dGUgZW5kLCB1c2UgdGhlIGZvbGxvd2luZyBzZXF1ZW5jZSBhdCB0aGUgc2VuZGVyIHRvIHJlc3Vt ZSB0aGUKKyAgIHRyYW5zZmVyOgorCisgIFNFTkQgL1JFQ09WRVIgbmFtZS1vZi1pbnRlcnJ1cHRl ZC1maWxlCisKKyAgIGFuZCB0aGVuOgorCisgIFNFTkQgKgorCisgICAoSW4gQy1LZXJtaXQgNy4w IGFuZCBsYXRlciwgXHYoZmlsZW5hbWUpIGNvbnRhaW5zIHRoZSBuYW1lIG9mIHRoZSBmaWxlCisg ICBtb3N0IHJlY2VudGx5IHRyYW5zZmVycmVkLCBhcyBsb25nIHlvdSBoYXZlIG5vdCBFWElUZWQg ZnJvbSBLZXJtaXQgb3IKKyAgIGNoYW5nZWQgZGlyZWN0b3J5LCBldGMuCisKKyAgNC4yNC4gRklM RSBDT0xMSVNJT04gVVBEQVRFIENsYXJpZmljYXRpb24KKworICAgSW4gVU5JWCwgZmlsZSBtb2Rp ZmljYXRpb24gZGF0ZXMgYXJlIHVzZWQgd2hlbiBjb21wYXJpbmcgdGhlIGZpbGUgZGF0ZQorICAg d2l0aCB0aGUgZGF0ZSBpbiB0aGUgYXR0cmlidXRlIHBhY2tldC4gSW4gVk1TLCBob3dldmVyLCB0 aGUgZmlsZQorICAgY3JlYXRpb24gZGF0ZSBpcyB1c2VkLiBUaGVzZSB0d28gcG9saWNpZXMgcmVm bGVjdCB0aGUgcHJlZmVyZW5jZXMgb2YKKyAgIHRoZSB0d28gdXNlciBjb21tdW5pdGllcy4KKwor ICAgQWxzbywgcmVtZW1iZXIgdGhhdCB0aGUgZmlsZSBkYXRlL3RpbWUgZ2l2ZW4gaW4gdGhlIGF0 dHJpYnV0ZSBwYWNrZXQgaXMKKyAgIHRoZSBsb2NhbCB0aW1lIGF0IHRoZSBmaWxlIHNlbmRlci4g QXQgcHJlc2VudCwgbm8gdGltZXpvbmUgY29udmVyc2lvbnMKKyAgIGFyZSBkZWZpbmVkIGluIG9y IHBlcmZvcm1lZCBieSB0aGUgS2VybWl0IHByb3RvY29sLiBUaGlzIGlzIHByaW1hcmlseQorICAg YmVjYXVzZSB0aGlzIGZlYXR1cmUgd2FzIGRlc2lnbmVkIGF0IGEgdGltZSB3aGVuIG1hbnkgb2Yg dGhlIHN5c3RlbXMKKyAgIHdoZXJlIEtlcm1pdCBydW5zIGhhZCBubyBjb25jZXB0IG9mIHRpbWV6 b25lLCBhbmQgdGhlcmVmb3JlIHdvdWxkIGJlCisgICB1bmFibGUgdG8gY29udmVydCAoc2F5LCB0 by9mcm9tIEdNVCBvciBVVEMgb3IgWnVsdSB0aW1lKS4KKworICAgQXMgYSBjb25zZXF1ZW5jZSwg c29tZSB1bmV4cGVjdGVkIHJlc3VsdHMgbWlnaHQgb2NjdXIgd2hlbiB0cmFuc2ZlcnJpbmcKKyAg IGZpbGVzIGFjcm9zcyB0aW1lem9uZXM7IGUuZy4gY29tbWFuZHMgb24gdGhlIHRhcmdldCBzeXN0 ZW0gdGhhdCBhcmUKKyAgIHNlbnNpdGl2ZSB0byBmaWxlIGRhdGVzIG1pZ2h0IG5vdCB3b3JrIChV TklYICJtYWtlIiwgYmFja3VwcywgZXRjKS4KKworICAgVGltZXpvbmUgaGFuZGxpbmcgaXMgZGVm ZXJyZWQgZm9yIGEgZnV0dXJlIHJlbGVhc2UuCisKKyAgNC4yNS4gQXV0b2Rvd25sb2FkIEltcHJv dmVtZW50cworCisgICBSZWZlciB0byBwYWdlcyAxNjQtMTY1IG9mIFs1MzddVXNpbmcgQy1LZXJt aXQgYWJvdXQgdGhlIGhhemFyZHMgb2YKKyAgIGF1dG9kb3dubG9hZCB3aGVuIEMtS2VybWl0IGlz ICJpbiB0aGUgbWlkZGxlIi4gQXMgb2YgQy1LZXJtaXQgNy4wLCBubworICAgbW9yZSBoYXphcmRz LiBJZiBDLUtlcm1pdCBoYXMgVEVSTUlOQUwgQVVUT0RPV05MT0FEIE9OIGFuZCBpdCBkZXRlY3Rz IGEKKyAgIHBhY2tldCBvZiB0aGUgY3VycmVudCBwcm90b2NvbCB0eXBlIChLZXJtaXQgb3IgWm1v ZGVtKSwgaXQgImVyYXNlcyIgdGhlCisgICB2aXN1YWwgYXNwZWN0IG9mIHRoZSBwYWNrZXQgdGhh dCB3b3VsZCBiZSBzZWVuIGJ5IHRoZSB0ZXJtaW5hbCAob3IsCisgICBtb3JlIHRvIHRoZSBwb2lu dCwgdGhlIGVtdWxhdG9yLCBzdWNoIGFzIEs5NSkuIFRoaXMgd2F5LCBvbmx5IEMtS2VybWl0Cisg ICBnb2VzIGludG8gUkVDRUlWRSBtb2RlLCBhbmQgbm90IGFsc28gdGhlIHRlcm1pbmFsIGVtdWxh dG9yIHRocm91Z2gKKyAgIHdoaWNoIEMtS2VybWl0IGlzIGFjY2Vzc2VkLiBBbmQgdGhlcmVmb3Jl LCBpdCBpcyBubyBsb25nZXIgbmVjZXNzYXJ5IHRvCisgICBTRVQgVEVSTUlOQUwgQVVUT0RPV05M T0FEIE9GRiB0byBwcmV2ZW50IG11bHRpcGxlIEtlcm1pdHMgZnJvbSBnb2luZworICAgaW50byBy ZWNlaXZlIG1vZGUgYXQgb25jZSwgYnV0IG9mIGNvdXJzZSBpdCBpcyBzdGlsbCBuZWNlc3Nhcnkg dG8KKyAgIGVuc3VyZSB0aGF0LCB3aGVuIHlvdSBoYXZlIG11bHRpcGxlIEtlcm1pdHMgaW4gYSBj aGFpbiwgdGhhdCB0aGUKKyAgIGRlc2lyZWQgb25lIHJlY2VpdmVzIHRoZSBhdXRvZG93bmxvYWQu CisKKyAgIFRoZSBkZWZhdWx0cyBoYXZlIG5vdCBiZWVuIGNoYW5nZWQ7IEtlcm1pdCA5NSBzdGls bCBoYXMgYXV0b2Rvd25sb2FkIE9OCisgICBieSBkZWZhdWx0LCBhbmQgQy1LZXJtaXQgaGFzIGl0 IE9GRiBieSBkZWZhdWx0LgorCisgIDUuIENMSUVOVC9TRVJWRVIKKworICA1LjAuIEhpbnRzCisK KyAgIElmIHlvdSB1c2UgU0VUIFNFUlZFUiBHRVQtUEFUSCB0byBzZXQgdXAgeW91ciBzZXJ2ZXIs IGFuZCB0aGUgR0VULVBBVEgKKyAgIGRvZXMgbm90IGluY2x1ZGUgdGhlIHNlcnZlcidzIGN1cnJl bnQgZGlyZWN0b3J5LCBjbGllbnRzIGNhbiBiZWNvbWUKKyAgIHF1aXRlIGNvbmZ1c2VkLiBGb3Ig ZXhhbXBsZSwgInJlbW90ZSBkaXIgb29mYS50eHQiIHNob3dzIGEgZmlsZSBuYW1lZAorICAgb29m YS50eHQsIGJ1dCAiZ2V0IG9vZmEudHh0IiBmYWlscy4gSW4gdGhpcyBzaXR1YXRpb24sIHlvdSBz aG91bGQKKyAgIGVpdGhlciBESVNBQkxFIERJUiBvciBtYWtlIHlvdXIgR0VULVBBVEggaW5jbHVk ZSB0aGUgY3VycmVudCBkaXJlY3RvcnkuCisKKyAgNS4xLiBOZXcgQ29tbWFuZC1MaW5lIE9wdGlv bnMKKworICAgVGhlIC1HIGNvbW1hbmQtbGluZSBvcHRpb24gaXMgbGlrZSAtZyAoR0VUKSwgZXhj ZXB0IHRoZSBpbmNvbWluZyBmaWxlCisgICBpcyBzZW50IHRvIHN0YW5kYXJkIG91dHB1dCByYXRo ZXIgdGhhbiB3cml0dGVuIHRvIGRpc2suCisKKyAgIFRoZSAtSSBvcHRpb24gKCJJbnRlcm5ldCIp IGlzIHVzZWQgdG8gdGVsbCBhIHJlbW90ZSBDLUtlcm1pdCBwcm9ncmFtCisgICB0aGF0IHlvdSBh cmUgY29taW5nIGluIHZpYSBJbnRlcm5ldCBUZWxuZXQgb3IgUmxvZ2luIGFuZCB0aGVyZWZvcmUg aGF2ZQorICAgYSByZWxpYWJsZSBjb25uZWN0aW9uLiBUaGUgLUkgb3B0aW9uIGlzIGVxdWl2YWxl bnQgdG8gU0VUIFJFTElBQkxFIE9OCisgICBhbmQgU0VUIEZMT1cgTk9ORS4KKworICAgVGhlIC1P IG9wdGlvbiAoIk9ubHkgT25lIikgdGVsbHMgQy1LZXJtaXQgdG8gZW50ZXIgc2VydmVyIG1vZGUg YnV0IHRoZW4KKyAgIGV4aXQgYWZ0ZXIgdGhlIGZpcnN0IGNsaWVudCBvcGVyYXRpb24uCisKKyAg IFNlZSBbNTM4XVNlY3Rpb24gOS4zIGZvciBkZXRhaWxzLgorCisgIDUuMi4gTmV3IENsaWVudCBD b21tYW5kcworCisgICBCWUUgYW5kIEZJTklTSCBubyBsb25nZXIgdHJ5IHRvIGRvIGFueXRoaW5n IGlmIGEgY29ubmVjdGlvbiBpcyBub3QKKyAgIGFjdGl2ZS4gVGh1cyBhIHNlcXVlbmNlIGxpa2Ug Imhhbmd1cCIgZm9sbG93ZWQgYnkgImJ5ZSIgb3IgImZpbmlzaCIKKyAgIHdpbGwgbm8gbG9uZ2Vy IGdldCBzdHVjayBpbiBhIGxvbmcgdGltZW91dC1hbmQtcmV0cmFuc21pc3Npb24gY3ljbGUsCisg ICBub3Igd2lsbCBpdCB0cnkgdG8gb3BlbiBhIG5ldyBjb25uZWN0aW9uLgorCisgICBSRU1PVEUg RVhJVAorICAgICAgICAgIFNpbWlsYXIgdG8gRklOSVNILCBleGNlcHQgaXQgZW5zdXJlcyB0aGF0 IHRoZSBLZXJtaXQgc2VydmVyCisgICAgICAgICAgcHJvZ3JhbSBleGl0cyBiYWNrIHRvIHRoZSBv cGVyYXRpbmcgc3lzdGVtIG9yIHNoZWxsIHByb21wdC4KKyAgICAgICAgICAoRklOSVNIIHdvdWxk IHJldHVybiBpdCB0byBpdHMgaW50ZXJhY3RpdmUgcHJvbXB0IGlmIGl0IHdhcworICAgICAgICAg IHN0YXJ0ZWQgaW4gaW50ZXJhY3RpdmUgbW9kZSwgYW5kIHdvdWxkIGNhdXNlIGl0IHRvIGV4aXQg aWYgaXQKKyAgICAgICAgICBlbnRlcmVkIHNlcnZlciBtb2RlIHZpYSBjb21tYW5kLWxpbmUgb3B0 aW9uLikgV2hlbiBDLUtlcm1pdCBpcworICAgICAgICAgIHRvIGJlIHRoZSBzZXJ2ZXIsIHlvdSBj YW4gdXNlIHsgRU5BQkxFLCBESVNBQkxFIH0gRVhJVCB0bworICAgICAgICAgIGNvbnRyb2wgdGhl IGNsaWVudCdzIGFjY2VzcyB0byB0aGlzIGZlYXR1cmUuCisKKyAgIFJFTU9URSBNS0RJUiBkaXJl Y3RvcnktbmFtZQorICAgICAgICAgIFRlbGxzIHRoZSBjbGllbnQgdG8gYXNrIHRoZSBzZXJ2ZXIg dG8gY3JlYXRlIGEgZGlyZWN0b3J5IHdpdGgKKyAgICAgICAgICB0aGUgZ2l2ZW4gbmFtZSwgd2hp Y2ggY2FuIGJlIGFic29sdXRlIG9yIHJlbGF0aXZlLiBUaGUgc3ludGF4IG9mCisgICAgICAgICAg dGhlIGRpcmVjdG9yeSBuYW1lIGRlcGVuZHMgb24gdGhlIEtlcm1pdCBzZXJ2ZXIgKHNlZSBbNTM5 XW5leHQKKyAgICAgICAgICBzZWN0aW9uKTsgaW4gYWxsIGNhc2VzLCBpdCBjYW4gYmUgaW4gdGhl IHN5bnRheCBvZiB0aGUgc3lzdGVtCisgICAgICAgICAgd2hlcmUgdGhlIHNlcnZlciBpcyBydW5u aW5nIChVTklYLCBWTVMsIERPUywgZXRjKSBidXQgbmV3ZXIKKyAgICAgICAgICBzZXJ2ZXJzIGFs c28gYWNjZXB0IFVOSVggc3ludGF4LCBubyBtYXR0ZXIgd2hhdCB0aGUgdW5kZXJseWluZworICAg ICAgICAgIHBsYXRmb3JtLiBUaGUgc2VydmVyIHdpbGwgbm90IGV4ZWN1dGUgdGhpcyBjb21tYW5k IGlmIChhKSBpdAorICAgICAgICAgIGRvZXMgbm90IHVuZGVyc3RhbmQgaXQsIChiKSBhIERJU0FC TEUgTUtESVIgY29tbWFuZCBoYXMgYmVlbgorICAgICAgICAgIGdpdmVuLCBvciAoYykgYSBESVNB QkxFIENXRCBjb21tYW5kIGhhcyBiZWVuIGdpdmVuOyBvdGhlcndpc2UsCisgICAgICAgICAgdGhl IGNvbW1hbmQgaXMgZXhlY3V0ZWQsIGJ1dCB3aWxsIGZhaWwgaWYgdGhlIGRpcmVjdG9yeSBjYW4g bm90CisgICAgICAgICAgYmUgY3JlYXRlZCwgaW4gd2hpY2ggY2FzZXMgbW9zdCBzZXJ2ZXJzIHdp bGwgYXR0ZW1wdCB0byByZXR1cm4gYQorICAgICAgICAgIG1lc3NhZ2UgZ2l2aW5nIHRoZSByZWFz b24gZm9yIGZhaWx1cmUuIFRoZSBSRU1PVEUgTUtESVIgY29tbWFuZAorICAgICAgICAgIHN1Y2Nl ZWRzIGlmIHRoZSByZW1vdGUgZGlyZWN0b3J5IGlzIGNyZWF0ZWQsIG9yIGlmIGl0IGFscmVhZHkK KyAgICAgICAgICBleGlzdHMgYW5kIHRoZXJlZm9yZSBkb2VzIG5vdCBuZWVkIHRvIGJlIGNyZWF0 ZWQsIGFuZCBmYWlscworICAgICAgICAgIG90aGVyd2lzZS4KKworICAgUkVNT1RFIFJNRElSIGRp cmVjdG9yeS1uYW1lCisgICAgICAgICAgVGVsbHMgdGhlIGNsaWVudCB0byBhc2sgdGhlIHNlcnZl ciB0byByZW1vdmUgKGRlbGV0ZSkgYQorICAgICAgICAgIGRpcmVjdG9yeSB3aXRoIHRoZSBnaXZl biBuYW1lLiBUaGUgc2FtZSBjb25zaWRlcmF0aW9ucyBhcHBseSBhcworICAgICAgICAgIGZvciBS RU1PVEUgTUtESVIuCisKKyAgIFJFTU9URSBTRVQgRklMRSBJTkNPTVBMRVRFIHsgRElTQ0FSRCwg S0VFUCwgQVVUTyB9CisgICAgICAgICAgUHJldmlvdXNseSB0aGlzIHdhcyBvbmx5IGF2YWlsYWJs ZSBpbiBpdHMgZWFybGllciBmb3JtLCBSRU1PVEUKKyAgICAgICAgICBTRVQgSU5DT01QTEVURSAo bm8gRklMRSkuIFRoZSBlYXJsaWVyIGZvcm0gaXMgc3RpbGwgYXZhaWxhYmxlLAorICAgICAgICAg IGJ1dCBpbnZpc2libGUuIEFsc28sIEFVVE8gd2FzIGFkZGVkLCBtZWFuaW5nIEtFRVAgaWYgaW4g YmluYXJ5CisgICAgICAgICAgbW9kZSwgRElTQ0FSRCBvdGhlcndpc2UuCisKKyAgIFJFTU9URSBT RVQgVFJBTlNGRVIgTU9ERSB7IEFVVE9NQVRJQywgTUFOVUFMIH0KKyAgICAgICAgICBUZWxscyB0 aGUgY2xpZW50IHRvIGFzayB0aGUgc2VydmVyIHRvIHNldCB0aGUgZ2l2ZW4KKyAgICAgICAgICBm aWxlLXRyYW5zZmVyIG1vZGUuIEF1dG9tYXRpYyBtZWFucyAocm91Z2hseSk6IGlmIHRoZSBjbGll bnQgYW5kCisgICAgICAgICAgdGhlIHNlcnZlciBhcmUgcnVubmluZyBvbiB0aGUgc2FtZSBraW5k IG9mIGNvbXB1dGVyIChlLmcuIGJvdGgKKyAgICAgICAgICBhcmUgb24gVU5JWCksIHRoZW4gdXNl IGJpbmFyeSBtb2RlIGF1dG9tYXRpY2FsbHk7IGlmIHRoZSBzeXN0ZW0KKyAgICAgICAgICB0eXBl cyBhcmUgZGlmZmVyZW50LCB1c2Ugc29tZSBvdGhlciBtZXRob2QgdG8gYXV0b21hdGljYWxseQor ICAgICAgICAgIGRldGVybWluZSB0ZXh0IG9yIGJpbmFyeSBtb2RlLCBzdWNoIGFzIGZpbGVuYW1l IHBhdHRlcm4KKyAgICAgICAgICBtYXRjaGluZy4gTUFOVUFMIG1lYW5zLCBpbiB0aGlzIGNvbnRl eHQsIG9iZXkgdGhlIGNsaWVudCdzIEZJTEUKKyAgICAgICAgICBUWVBFIHNldHRpbmcgKFRFWFQg b3IgQklOQVJZKS4gU3lub255bTogUkVNT1RFIFNFVCBYRkVSIE1PREUuCisKKyAgIFsgUkVNT1RF IF0gUVVFUlkgS0VSTUlUIGZ1bmN0aW9uKGFyZ3MuLi4pCisgICAgICAgICAgUHJpb3IgdG8gQy1L ZXJtaXQgNy4wLCB0aGUgYXJndW1lbnRzIHdlcmUgbm90IGV2YWx1YXRlZCBsb2NhbGx5LgorICAg ICAgICAgIFRodXMgaXQgd2FzIG5vdCBwb3NzaWJsZSB0byBoYXZlIHRoZSBzZXJ2ZXIgcnVuIHRo ZSBmdW5jdGlvbgorICAgICAgICAgIHdpdGggY2xpZW50LXNpZGUgdmFyaWFibGVzIGFzIGFyZ3Vt ZW50cy4gTm93OgorCisgIGRlZmluZSBcJWEgb29mYS4qCisgIHJlbW90ZSBxdWVyeSBrZXJtaXQg ZmlsZXMoXCVhKSAgICA7IENsaWVudCdzIFwlYQorICByZW1vdGUgcXVlcnkga2VybWl0IGZpbGVz KFxcJWEpICAgOyBTZXJ2ZXIncyBcJWEKKworICAgWyBSRU1PVEUgXSBMT0dJTiBbIHVzZXIgWyBw YXNzd29yZCBdIF0KKyAgICAgICAgICBMT0dJTiBpcyBub3cgYSBzeW5vbnltIGZvciBSRU1PVEUg TE9HSU4uCisKKyAgIExPR09VVAorICAgICAgICAgIFRoaXMgY29tbWFuZCwgd2hlbiBnaXZlbiBp biBsb2NhbCBtb2RlLCBpcyBlcXVpdmFsZW50IHRvIFJFTU9URQorICAgICAgICAgIExPR09VVC4g V2hlbiBnaXZlbiBhdCB0aGUgSUtTRCBwcm9tcHQsIGl0IGxvZ3Mgb3V0IHRoZSBJS1NELgorICAg ICAgICAgIFdoZW4gZ2l2ZW4gYXQgdGhlIEMtS2VybWl0IHByb21wdCB3aGVuIGl0IGhhcyBubyBj b25uZWN0aW9uLCBpdAorICAgICAgICAgIGRvZXMgbm90aGluZy4KKworICAgTm90ZSB0aGF0IGlu IEMtS2VybWl0IDcuMCwgdGhlIFJFTU9URSAob3IgUikgcHJlZml4IGlzIG5vdCByZXF1aXJlZCBm b3IKKyAgIFFVRVJZLCBzaW5jZSB0aGVyZSBpcyBubyBsb2NhbCBRVUVSWSBjb21tYW5kLiBUaGUg bmV3IHRvcC1sZXZlbCBRVUVSWQorICAgY29tbWFuZCBkb2VzIGV4YWN0bHkgd2hhdCBSRU1PVEUg UVVFUlkgKFJRVUVSWSkgZG9lcy4KKworICAgQWxsIFJFTU9URSBjb21tYW5kcyBub3cgaGF2ZSBz aW5nbGUtd29yZCBzaG9ydGN1dHM6CisKKyBTaG9ydGN1dCAgIEZ1bGwgRm9ybQorICBSQVNHICAg ICAgIFJFTU9URSBBU1NJR04KKyAgUkNEICAgICAgICBSRU1PVEUgQ0QKKyAgUkNPUFkgICAgICBS RU1PVEUgQ09QWQorICBSREVMICAgICAgIFJFTU9URSBERUxFVEUKKyAgUkRJUiAgICAgICBSRU1P VEUgRElSRUNUT1JZCisgIFJFWElUICAgICAgUkVNT1RFIEVYSVQKKyAgUkhFTFAgICAgICBSRU1P VEUgSEVMUAorICBSSE9TVCAgICAgIFJFTU9URSBIT1NUCisgIFJQV0QgICAgICAgUkVNT1RFIFBX RAorICBSU0VUICAgICAgIFJFTU9URSBTRVQKKyAgZXRjLgorCisgICBUaGUgUiBwcmVmaXggaXMg bm90IGFwcGxpZWQgdG8gTE9HSU4gYmVjYXVzZSB0aGVyZSBpcyBhbHJlYWR5IGFuIFJMT0dJTgor ICAgY29tbWFuZCB3aXRoIGEgZGlmZmVyZW50IG1lYW5pbmcuIEl0IGlzIG5vdCBhcHBsaWVkIHRv IExPR09VVCBlaXRoZXIsCisgICBzaW5jZSBMT0dPVVQga25vd3Mgd2hhdCB0byBkbyBpbiBlYWNo IGNhc2UsIGFuZCBmb3Igc3ltbWV0cnkgd2l0aAorICAgTE9HSU4uCisKKyAgICA1LjIuMS4gUmVt b3RlIFByb2NlZHVyZSBEZWZpbml0aW9ucyBhbmQgQ2FsbHMKKworICAgVGhpcyBpcyBub3RoaW5n IG5ldywgYnV0IGl0IG1pZ2h0IG5vdCBiZSBvYnZpb3VzLi4uIFJFTU9URSBBU1NJR04gYW5kCisg ICBSRU1PVEUgUVVFUlkgbWF5IGJlIHVzZWQgdG8gYWNoaWV2ZSByZW1vdGUgcHJvY2VkdXJlIGV4 ZWN1dGlvbi4gVGhlCisgICByZW1vdGUgcHJvY2VkdXJlIGNhbiBiZSBkZWZpbmVkIGxvY2FsbHkg b3IgcmVtb3RlbHkuCisKKyAgIEEgcmVtb3RlIHByb2NlZHVyZSBjYWxsIGlzIGFjY29tcGxpc2hl ZCBhcyBub3RlZCBpbiB0aGUgcHJldmlvdXMKKyAgIHNlY3Rpb246CisKKyAgWyByZW1vdGUgXSBx dWVyeSBrZXJtaXQgZnVuY3Rpb24tbmFtZShhcmdzLi4uKQorCisgICBUaGlzIGludm9rZXMgYW55 IGZ1bmN0aW9uIHRoYXQgaXMgYnVpbHQgaW4gdG8gdGhlIEtlcm1pdCBzZXJ2ZXIsIGUuZy46CisK KyAgWyByZW1vdGUgXSBxdWVyeSBrZXJtaXQgc2l6ZShmb28uYmFyKQorCisgICByZXR1cm5zIHRo ZSBzaXplIG9mIHRoZSByZW1vdGUgZmlsZSwgZm9vLmJhci4KKworICAgTm93IG5vdGUgdGhhdCBD LUtlcm1pdCBpbmNsdWRlcyBhbiBcZmV4ZWN1dGUoKSBmdW5jdGlvbiwgYWxsb3dpbmcgaXQgdG8K KyAgIGV4ZWN1dGUgYW55IG1hY3JvIGFzIGlmIGl0IHdlcmUgYSBidWlsdC1pbiBmdW5jdGlvbi4g U28gc3VwcG9zZSBNWU1BQ1JPCisgICBpcyB0aGUgbmFtZSBvZiBhIG1hY3JvIGRlZmluZWQgaW4g dGhlIHNlcnZlci4gWW91IGNhbiBleGVjdXRlIGl0IGZyb20KKyAgIHRoZSBjbGllbnQgYXMgZm9s bG93cyAodGhlIHJlZHVuZGFudCAicmVtb3RlIiBwcmVmaXggaXMgb21pdHRlZCBpbiB0aGUKKyAg IHJlbWFpbmluZyBleGFtcGxlcyk6CisKKyAgcXVlcnkga2VybWl0IGV4ZWN1dGUobXltYWNybyBh cmcxIGFyZzIuLi4pCisKKyAgIFRoZSByZXR1cm4gdmFsdWUsIGlmIGFueSwgaXMgdGhlIHZhbHVl IG9mIHRoZSBSRVRVUk4gY29tbWFuZCB0aGF0CisgICB0ZXJtaW5hdGVkIGV4ZWN1dGlvbiBvZiB0 aGUgbWFjcm8sIGZvciBleGFtcGxlOgorCisgIGRlZmluZSBhZGR0d29udW1iZXJzIHJldHVybiBc ZmV2YWwoXCUxK1wlMikKKworICAgVGhlIGNsaWVudCBpbnZvY2F0aW9uIHdvdWxkIGJlOgorCisg IHF1ZXJ5IGtlcm1pdCBleGVjdXRlKGFkZHR3b251bWJlcnMgMyA0KQorICA3CisKKyAgIFRoZSBy ZXN1bHQgKCI3IiBpbiB0aGlzIGNhc2UpIGlzIGFsc28gYXNzaWduZWQgdG8gdGhlIGNsaWVudCdz CisgICBcdihxdWVyeSkgdmFyaWFibGUuCisKKyAgIFRvIGV4ZWN1dGUgYSByZW1vdGUgc3lzdGVt IGNvbW1hbmQgb3IgY29tbWFuZCBwcm9jZWR1cmUgKHNoZWxsIHNjcmlwdCwKKyAgIGV0YykgdXNl OgorCisgIHF1ZXJ5IGtlcm1pdCBjb21tYW5kKG5hbWUgYXJncy4uLikKKworICAgRmluYWxseSwg c3VwcG9zZSB5b3Ugd2FudCB0aGUgY2xpZW50IHRvIHNlbmQgYSBtYWNybyB0byB0aGUgc2VydmVy IHRvCisgICBiZSBleGVjdXRlZCBvbiB0aGUgc2VydmVyIGVuZC4gVGhpcyBpcyBkb25lIGFzIGZv bGxvd3M6CisKKyAgcmVtb3RlIGFzc2lnbiBtYWNyb25hbWUgZGVmaW5pdGlvbgorICBxdWVyeSBr ZXJtaXQgZXhlY3V0ZShtYWNyb25hbWUgYXJnMSBhcmcyLi4uKQorCisgICBRdW90aW5nIGlzIHJl cXVpcmVkIGlmIHRoZSBkZWZpbml0aW9uIGNvbnRhaW5zIGZvcm1hbCBwYXJhbWV0ZXJzLgorCisg IDUuMy4gTmV3IFNlcnZlciBDYXBhYmlsaXRpZXMKKworICAgIDUuMy4xLiBDcmVhdGluZyBhbmQg UmVtb3ZpbmcgRGlyZWN0b3JpZXMKKworICAgVGhlIEMtS2VybWl0IDcuMCBzZXJ2ZXIgcmVzcG9u ZHMgdG8gUkVNT1RFIE1LRElSIGFuZCBSRU1PVEUgUk1ESVIKKyAgIGNvbW1hbmRzLiBUaGUgZGly ZWN0b3J5IG5hbWUgbWF5IGJlIGluIGVpdGhlciB0aGUgbmF0aXZlIGZvcm1hdCBvZiB0aGUKKyAg IHNlcnZlcidzIGNvbXB1dGVyLCBvciBpbiBVTklYIGZvcm1hdC4gRm9yIGV4YW1wbGUsIGEgc2Vy dmVyIHJ1bm5pbmcgb24KKyAgIFZNUyB3aXRoIGEgY3VycmVudCBkaXJlY3Rvcnkgb2YgW0lWQU5d IGNhbiBhY2NlcHQgY29tbWFuZHMgZnJvbSB0aGUKKyAgIGNsaWVudCBsaWtlOgorCisgIHJlbW90 ZSBta2RpciBvbGdhICAgICAgICAgOyBNYWtlcyBbSVZBTi5PTEdBXSAobm9uc3BlY2lmaWMgZm9y bWF0KQorICByZW1vdGUgbWtkaXIgLm9sZ2EgICAgICAgIDsgTWFrZXMgW0lWQU4uT0xHQV0gKFZN UyBmb3JtYXQgd2l0aG91dCBicmFja2V0cykKKyAgcmVtb3RlIG1rZGlyIG9sZ2EvICAgICAgICA7 IE1ha2VzIFtJVkFOLk9MR0FdIChVTklYIHJlbGF0aXZlIGZvcm1hdCkKKyAgcmVtb3RlIG1rZGly IC9pdmFuL29sZ2EgICA7IE1ha2VzIFtJVkFOLk9MR0FdIChVTklYIGFic29sdXRlIGZvcm1hdCkK KyAgcmVtb3RlIG1rZGlyIFtpdmFuLm9sZ2FdICA7IE1ha2VzIFtJVkFOLk9MR0FdIChWTVMgYWJz b2x1dGUgZm9ybWF0KQorICByZW1vdGUgbWtkaXIgWy5vbGdhXSAgICAgIDsgTWFrZXMgW0lWQU4u T0xHQV0gKFZNUyByZWxhdGl2ZSBmb3JtYXQpCisKKyAgICA1LjMuMS4xLiBDcmVhdGluZyBEaXJl Y3RvcmllcworCisgICBJZiBhIGRpcmVjdG9yeSBuYW1lIGlzIGdpdmVuIHRoYXQgY29udGFpbnMg bW9yZSB0aGFuIG9uZSBzZWdtZW50IHRoYXQKKyAgIGRvZXMgbm90IGV4aXN0LCB0aGUgc2VydmVy IGF0dGVtcHRzIHRvIGNyZWF0ZSBhbGwgdGhlIHNlZ21lbnRzLiBGb3IKKyAgIGV4YW1wbGUsIGlm IHRoZSBjbGllbnQgc2F5czoKKworICBSRU1PVEUgTUtESVIgbGV0dGVycy9hbmdyeQorCisgICBh ICJsZXR0ZXJzIiBzdWJkaXJlY3RvcnkgaXMgY3JlYXRlZCBpbiB0aGUgc2VydmVyJ3MgY3VycmVu dCBkaXJlY3RvcnkKKyAgIGlmIGl0IGRvZXMgbm90IGFscmVhZHkgZXhpc3QsIGFuZCB0aGVuIGFu ICJhbmdyeSIgc3ViZGlyZWN0b3J5IGlzCisgICBjcmVhdGVkIGJlbmVhdGggaXQsIGlmIGl0IGRv ZXMgbm90IGFscmVhZHkgaGF2ZSBvbmUuIFRoaXMgY2FuIHJlcGVhdGVkCisgICB0byBhbnkgcmVh c29uYWJsZSBkZXB0aDoKKworICBSRU1PVEUgTUtESVIgYS9iL2MvZC9lL2YvZy9oL2kvai9rL2wv bS9uL28vcC9xL3Ivcy90L3Uvdi93L3oveS96CisKKyAgICA1LjMuMS4yLiBSZW1vdmluZyBEaXJl Y3RvcmllcworCisgICBXaGVuIGF0dGVtcHRpbmcgdG8gZXhlY3V0ZSBhIFJFTU9URSBSTURJUiwg dGhlIHNlcnZlciBjYW4gcmVtb3ZlIG9ubHkgYQorICAgc2luZ2xlIGRpcmVjdG9yeSwgbm90IGFu IGVudGlyZSBzZXF1ZW5jZSBvciB0cmVlLiBUaGUgc3lzdGVtIHNlcnZpY2UKKyAgIHRoYXQgaXMg Y2FsbGVkIHRvIHJlbW92ZSB0aGUgZGlyZWN0b3J5IGdlbmVyYWxseSByZXF1aXJlcyBub3Qgb25s eSB0aGF0CisgICB0aGUgc2VydmVyIHByb2Nlc3MgaGFzIHdyaXRlIGRlbGV0ZSBhY2Nlc3MsIGJ1 dCBhbHNvIHRoYXQgdGhlIGRpcmVjdG9yeQorICAgY29udGFpbiBubyBmaWxlcy4KKworICAgSW4g dGhlIGZ1dHVyZSwgYSBSRU1PVEUgUk1ESVIgL1JFQ1VSU0lWRSBjb21tYW5kIChhbmQgdGhlIGFj Y29tcGFueWluZworICAgcHJvdG9jb2wpIG1pZ2h0IGJlIGFkZGVkLiBGb3Igbm93LCB1c2UgdGhl IGVxdWl2YWxlbnQgUkVNT1RFIEhPU1QKKyAgIGNvbW1hbmQocyksIGlmIGFueS4KKworICAgIDUu My4yLiBEaXJlY3RvcnkgTGlzdGluZ3MKKworICAgRGlyZWN0b3J5IGxpc3RpbmdzIGFyZSBnZW5l cmF0ZWQgYnkgQy1LZXJtaXQgaXRzZWxmLCByYXRoZXIgdGhhbiBieQorICAgcnVubmluZyB0aGUg dW5kZXJseWluZyBzeXN0ZW0ncyBkaXJlY3RvcnkgY29tbWFuZC4gU29tZSBjb250cm9sIG92ZXIK KyAgIHRoZSBsaXN0aW5nIGZvcm1hdCBjYW4gYmUgb2J0YWluZWQgd2l0aCB0aGUgU0VUIE9QVElP TlMgRElSRUNUT1JZCisgICBjb21tYW5kIChbNTQwXVNlY3Rpb24gNC41LjEpLiBUaGUgZm9sbG93 aW5nIG9wdGlvbnMgYWZmZWN0IGxpc3RpbmdzCisgICBzZW50IGJ5IHRoZSBzZXJ2ZXI6IC9bTk9d SEVBRElORywgL1tOT11ET1RGSUxFUywgYW5kIC9bTk9dQkFDS1VQLiBJbgorICAgVU5JWCBhbmQg Vk1TLCB0aGUgbGlzdGluZyBpcyBhbHdheXMgc29ydGVkIGJ5IGZpbGVuYW1lLiBUaGVyZSBpcywg YXQKKyAgIHByZXNlbnQsIG5vIHByb3RvY29sIGRlZmluZWQgZm9yIHRoZSBjbGllbnQgdG8gcmVx dWVzdCBsaXN0aW5nIG9wdGlvbnMKKyAgIG9mIHRoZSBzZXJ2ZXI7IHRoaXMgbWlnaHQgYmUgYWRk ZWQgaW4gdGhlIGZ1dHVyZS4KKworICAgVGhlIHNlcnZlcidzIGRpcmVjdG9yeSBsaXN0aW5ncyBh cmUgaW4gdGhlIGZvbGxvd2luZyBmb3JtYXQ6CisKKyAgIFByb3RlY3Rpb24gb3IgcGVybWlzc2lv bnM6CisgICAgICAgICAgSW4gVU5JWCBhbmQgT1MtOSwgdGhpcyBpcyBhIDEwLWNoYXJhY3RlciBm aWVsZCwgbGVmdCBhZGp1c3RlZC4KKyAgICAgICAgICBJbiBWTVMgaXQgaXMgYSAyMi1jaGFyYWN0 ZXIgZmllbGQsIGxlZnQtYWRqdXN0ZWQuIEluIGVhY2ggY2FzZSwKKyAgICAgICAgICB0aGUgcHJv dGVjdGlvbiAvIHBlcm1pc3Npb24gY29kZXMgYXJlIHNob3duIGluIHRoZSBzZXJ2ZXIKKyAgICAg ICAgICBwbGF0Zm9ybSdzIG5hdGl2ZSBmb3JtYXQuIEluIG90aGVyIG9wZXJhdGluZyBzeXN0ZW1z LCB0aGlzIGZpZWxkCisgICAgICAgICAgaXMgbm90IHNob3duLgorCisgICBTaXplIGluIGJ5dGVz OgorICAgICAgICAgIFRoaXMgaXMgYWx3YXlzIGEgMTAtY2hhcmFjdGVyIGZpZWxkLiBUaGUgZmls ZSdzIHNpemUgaXMgc2hvd24gYXMKKyAgICAgICAgICBhIGRlY2ltYWwgbnVtYmVyLCByaWdodCBh ZGp1c3RlZCBpbiB0aGUgZmllbGQuIElmIHRoZSBmaWxlIGlzIGEKKyAgICAgICAgICBkaXJlY3Rv cnkgYW5kIGl0cyBzaXplIGNhbiBub3QgYmUgb2J0YWluZWQsIHRoZSBzaXplIGlzIHNob3duIGFz CisgICAgICAgICAgIjxESVI+Ii4gVHdvIGJsYW5rcyBmb2xsb3cgdGhpcyBmaWVsZC4KKworICAg RGF0ZToKKyAgICAgICAgICBBbHdheXMgaW4geXl5eS1tbS1kZCBoaDptbTpzcyBudW1lcmljIGZv cm1hdCwgYW5kIHRoZXJlZm9yZSAxOQorICAgICAgICAgIGNoYXJhY3RlcnMgbG9uZy4gSWYgdGhl IGZpbGUncyBkYXRlL3RpbWUgY2FuJ3QgYmUgb2J0YWluZWQsCisgICAgICAgICAgemVyb3MgKDAp IGFyZSBzaG93biBmb3IgYWxsIHRoZSBkaWdpdHMuIFRoaXMgZmllbGQgaXMgZm9sbG93ZWQKKyAg ICAgICAgICBieSB0d28gYmxhbmtzLgorCisgICBGaWxlbmFtZToKKyAgICAgICAgICBUaGlzIGZp ZWxkIGV4dGVuZHMgdG8gdGhlIGVuZCBvZiB0aGUgbGluZS4gRmlsZW5hbWVzIGFyZSBzaG93bgor ICAgICAgICAgIHJlbGF0aXZlIHRvIHRoZSBzZXJ2ZXIncyBjdXJyZW50IGRpcmVjdG9yeS4gSW4g VU5JWCwgc3ltYm9saWMKKyAgICAgICAgICBsaW5rcyBhcmUgc2hvd24gYXMgdGhleSBhcmUgaW4g YW4gImxzIC1sIiBsaXN0aW5nIGFzICJsaW5rbmFtZQorICAgICAgICAgIC0+IGZpbGVuYW1lIi4K KworICAgSW4gVU5JWCBhbmQgVk1TLCBsaXN0aW5ncyBhcmUgcmV0dXJuZWQgYnkgdGhlIHNlcnZl ciBpbiBhbHBoYWJldGljYWwKKyAgIG9yZGVyIG9mIGZpbGVuYW1lLiBUaGVyZSBhcmUgcHJlc2Vu dGx5IG5vIG90aGVyIHNvcnQgb3Igc2VsZWN0aW9uCisgICBvcHRpb25zLgorCisgICBIb3dldmVy LCBzaW5jZSB0aGVzZSBhcmUgZml4ZWQtZmllbGQgbGlzdGluZ3MsIGFsbCBmaWVsZHMgY2FuIGJl IHVzZWQKKyAgIGFzIHNvcnQga2V5cyBieSBleHRlcm5hbCBzb3J0IHByb2dyYW1zLiBOb3RlLCBp biBwYXJ0aWN1bGFyLCB0aGF0IHRoZQorICAgZm9ybWF0IHVzZWQgZm9yIHRoZSBkYXRlIGFsbG93 cyBhIG5vcm1hbCBsZXhpY2FsIG9uIHRoYXQgZmllbGQgdG8KKyAgIGFjaGlldmUgdGhlIGRhdGUg b3JkZXJpbmcuIEZvciBleGFtcGxlLCBsZXQncyBhc3N1bWUgd2UgaGF2ZSBhIFVOSVgKKyAgIGNs aWVudCBhbmQgYSBVTklYIHNlcnZlci4gSW4gdGhpcyBjYXNlLCB0aGUgc2VydmVyJ3MgbGlzdGlu ZyBoYXMgdGhlCisgICBkYXRlIGluIGNvbHVtbnMgMjItNDAsIGFuZCB0aHVzIGNvdWxkIGJlIHNv cnRlZCBieSB0aGUgVU5JWCBzb3J0CisgICBwcm9ncmFtIHVzaW5nICJzb3J0ICswLjIyIC0wLjQw IiBvciBpbiByZXZlcnNlIG9yZGVyIGJ5ICJzb3J0ICswLjIyCisgICAtMC40MHIiLgorCisgICBT aW5jZSB0aGUgVU5JWCBjbGllbnQgY2FuIHBpcGUgcmVzcG9uc2VzIHRvIFJFTU9URSBjb21tYW5k cyB0aHJvdWdoCisgICBmaWx0ZXJzLCBhbnkgZGVzaXJlZCBzb3J0aW5nIGNhbiBiZSBhY2NvbXBs aXNoZWQgdGhpcyB3YXksIGZvciBleGFtcGxlOgorCitDLUtlcm1pdD4gcmVtb3RlIGRpcmVjdG9y eSB8IHNvcnQgKzAuMjIgLTAuNDAKKworICAgWW91IGNhbiBhbHNvIHNvcnQgYnkgc2l6ZToKKwor ICBDLUtlcm1pdD4gcmVtb3RlIGRpcmVjdG9yeSB8IHNvcnQgKzAuMTEgLTAuMTkKKworICAgWW91 IGNhbiB1c2Ugc29ydCBvcHRpb25zIHRvIHNlbGVjdCByZXZlcnNlIG9yIGFzY2VuZGluZyBvcmRl ci4gIm1hbgorICAgc29ydCIgKGluIFVOSVgpIGZvciBtb3JlIGluZm9ybWF0aW9uLiBBbmQgb2Yg Y291cnNlLCB5b3UgY2FuIHBpcGUgdGhlc2UKKyAgIGxpc3RpbmdzIHRocm91Z2ggYW55IG90aGVy IGZpbHRlciBvZiB5b3VyIGNob2ljZSwgc3VjaCBhcyBncmVwIHRvIHNraXAKKyAgIHVud2FudGVk IGxpbmVzLgorCisgIDUuNC4gU3ludGF4IGZvciBSZW1vdGUgRmlsZW5hbWVzIHdpdGggRW1iZWRk ZWQgU3BhY2VzCisKKyAgIEMtS2VybWl0IGFuZCBLOTUsIHdoZW4gaW4gc2VydmVyIG1vZGUsIGFz c3VtZSB0aGF0IGFueSBzcGFjZXMgaW4gdGhlCisgICBmaWxlIHNwZWNpZmljYXRpb24gaW4gYW4g aW5jb21pbmcgR0VUIGNvbW1hbmQgYXJlIGZpbGVuYW1lIHNlcGFyYXRvcnMuCisgICBUaHVzIGlm IHRoZSBjbGllbnQgZ2l2ZXMgYSBjb21tYW5kIGxpa2U6CisKKyAgZ2V0IHtvb2ZhLnR4dCBvb2Zh LmJpbn0KKworICAgb3IsIGVxdWl2YWxlbnRseToKKworICBtZ2V0IG9vZmEudHh0IG9vZmEuYmlu CisKKyAgIHRoZSBzZXJ2ZXIgdHJpZXMgdG8gc2VuZCB0aGUgdHdvIGZpbGVzLCBvb2ZhLnR4dCBh bmQgb29mYS5iaW4uIEJ1dCB3aGF0CisgICBpZiB5b3Ugd2FudCB0aGUgc2VydmVyIHRvIHNlbmQg eW91IGEgZmlsZSBuYW1lZCwgc2F5OgorCisgIEQ6XEhQIE9mZmljZUpldCA1MDBcSW1hZ2VzXE15 IFByZXR0eSBQaWN0dXJlIERvdCBQQ0wKKworICAgSG93IGRvZXMgdGhlIHNlcnZlciBrbm93IHRo aXMgaXMgc3VwcG9zZWQgdG8gYmUgb25lIGZpbGUgYW5kIG5vdCBzZXZlbj8KKyAgIEluIHRoaXMg Y2FzZSwgeW91IG5lZWQgdG8gdGhlIHNlbmQgZmlsZSBuYW1lIHRvIHRoZSBzZXJ2ZXIgZW5jbG9z ZWQgaW4KKyAgIGVpdGhlciBjdXJseSBicmFjZXM6CisKKyAge0Q6XEhQIE9mZmljZUpldCA1MDBc SW1hZ2VzXE15IFByZXR0eSBQaWN0dXJlIERvdCBQQ0x9CisKKyAgIG9yIEFTQ0lJIGRvdWJsZXF1 b3RlczoKKworICAiRDpcSFAgT2ZmaWNlSmV0IDUwMFxJbWFnZXNcTXkgUHJldHR5IFBpY3R1cmUg RG90IFBDTCIKKworICAgVGhlIG1ldGhvZCBmb3IgZG9pbmcgdGhpcyBkZXBlbmRzIG9uIHlvdXIg Y2xpZW50LiBJZiB5b3VyIGNsaWVudCBpcworICAgQy1LZXJtaXQgNy4wLCBhbnkgcmVjZW50IHZl cnNpb24gb2YgS2VybWl0IDk1LCBvciBNUy1ET1MgS2VybWl0IDMuMTYsCisgICB0aGVuIHlvdSBo YXZlIHRvIGVuY2xvc2UgdGhlIG5hbWUgaW4gYnJhY2VzIGp1c3Qgc28gdGhlIGNsaWVudCBjYW4K KyAgIHBhcnNlIGl0LCBzbyB0byBzZW5kIGJyYWNlcyBvciBkb3VibGVxdW90ZXMgdG8gdGhlIHNl cnZlciwgeW91IG11c3QgcHV0CisgICB0aGVtIGluc2lkZSB0aGUgZmlyc3QsIG91dHNpZGUgcGFp ciBvZiBicmFjZXMuIEFuZCB5b3UgYWxzbyBuZWVkIHRvCisgICBkb3VibGUgdGhlIGJhY2tzbGFz aGVzIHRvIHByZXZlbnQgdGhlbSBmcm9tIGJlaW5nIGludGVycHJldGVkOgorCisgIGdldCB7e0Q6 XFxIUCBPZmZpY2VKZXQgNTAwXFxJbWFnZXNcXE15IFByZXR0eSBQaWN0dXJlIERvdCBQQ0x9fQor ICBnZXQgeyJEOlxcSFAgT2ZmaWNlSmV0IDUwMFxcSW1hZ2VzXFxNeSBQcmV0dHkgUGljdHVyZSBE b3QgUENMIn0KKworICAgVG8gZ2V0IGFyb3VuZCB0aGUgcmVxdWlyZW1lbnQgdG8gZG91YmxlIGJh Y2tzbGFzaGVzIGluIGxpdGVyYWwKKyAgIGZpbGVuYW1lcywgb2YgY291cnNlIHlvdSBjYW4gYWxz byB1c2U6CisKKyAgc2V0IGNvbW1hbmQgcXVvdGluZyBvZmYKKyAgZ2V0IHt7RDpcSFAgT2ZmaWNl SmV0IDUwMFxJbWFnZXNcTXkgUHJldHR5IFBpY3R1cmUgRG90IFBDTH19CisgIGdldCB7IkQ6XEhQ IE9mZmljZUpldCA1MDBcSW1hZ2VzXE15IFByZXR0eSBQaWN0dXJlIERvdCBQQ0wifQorICBzZXQg Y29tbWFuZCBxdW90aW5nIG9uCisKKyAgIElmIHlvdSBhcmUgZ2l2aW5nIGEgImtlcm1pdCIgY29t bWFuZCB0byB0aGUgVU5JWCBzaGVsbCwgeW91IGhhdmUgdG8KKyAgIG9ic2VydmUgdGhlIHNoZWxs J3MgcXVvdGluZyBydWxlcywgc29tZXRoaW5nIGxpa2UgdGhpczoKKworICBrZXJtaXQgLWlnICJ7 RDpcSFAgT2ZmaWNlSmV0IDUwMFxJbWFnZXNcTXkgUHJldHR5IFBpY3R1cmUgRG90IFBDTH0iCisK KyAgIEhlcmUsIHRoZSBxdW90ZXMgZ28gb24gdGhlIG91dHNpZGUgc28gVU5JWCB3aWxsIHBhc3Mg dGhlIGVudGlyZQorICAgZmlsZW5hbWUsIHNwYWNlcywgYnJhY2VzLCBhbmQgYWxsLCBhcyBhIHNp bmdsZSBhcmd1bWVudCB0byBLZXJtaXQsIGFuZAorICAgdGhlIGJhY2tzbGFzaGVzIGFyZSBub3Qg ZG91YmxlZCBiZWNhdXNlIChhKSB0aGUgVU5JWCBzaGVsbCBpZ25vcmVzIHRoZW0KKyAgIHNpbmNl IHRoZXkgYXJlIGluIGEgcXVvdGVkIHN0cmluZywgYW5kIChiKSBLZXJtaXQgaWdub3JlcyB0aGVt IHNpbmNlCisgICB0aGUgaW50ZXJhY3RpdmUgY29tbWFuZCBwYXJzZXIgaXMgbm90IGFjdGl2YXRl ZCBpbiB0aGlzIGNhc2UuCisKKyAgNS41LiBBdXRvbWF0aWMgT3JpZW50YXRpb24gTWVzc2FnZXMg dXBvbiBEaXJlY3RvcnkgQ2hhbmdlCisKKyAgIEMtS2VybWl0IDcuMCwgd2hlbiBhY3RpbmcgYXMg YSBzZXJ2ZXIsIGNhbiBzZW5kIGFuIG9yaWVudGF0aW9uIG1lc3NhZ2UKKyAgIHRvIHRoZSBjbGll bnQgd2hlbmV2ZXIgdGhlIHNlcnZlciBkaXJlY3RvcnkgY2hhbmdlcy4gRm9yIGV4YW1wbGUsIHdo ZW4KKyAgIHRoZSBjbGllbnQgZ2l2ZXMgYSBSRU1PVEUgQ0QgY29tbWFuZCwgdGhlIHNlcnZlciBz ZW5kcyB0aGUgY29udGVudHMgb2YKKyAgIHRoZSBuZXcgZGlyZWN0b3J5J3MgIlJlYWQgTWUiIGZp bGUgdG8gdGhlIGNsaWVudCdzIHNjcmVlbi4gVGhlCisgICBmb2xsb3dpbmcgY29tbWFuZHMgZ292 ZXJuIHRoaXMgZmVhdHVyZToKKworICAgU0VUIFNFUlZFUiBDRC1NRVNTQUdFIEZJTEUgbmFtZQor ICAgICAgICAgIEdpdmVuIHRvIHRoZSBzZXJ2ciwgYWxsb3dzIHRoZSBtZXNzYWdlLWZpbGUgbmFt ZSB0byBiZSBzcGVjaWZpZWQKKyAgICAgICAgICBhdCBydW50aW1lLiBBIGxpc3Qgb2YgbmFtZXMg dG8gbG9vayBmb3IgY2FuIGJlIGdpdmVuIGluIHRoZQorICAgICAgICAgIGZvbGxvd2luZyBmb3Jt YXQ6CisKKyAge3tuYW1lMX17bmFtZTJ9e25hbWUzfXsuLi59fQorCisgICAgICAgICAgZS5nLiBT RVQgU0VSVkVSIENELU1FU1NBR0UgRklMRQorICAgICAgICAgIHt7Li8ucmVhZG1lfXtSRUFETUUu VFhUfXtSRUFELk1FfX0KKworICAgUkVNT1RFIFNFVCBTRVJWRVIgQ0QtTUVTU0FHRSB7IE9OLCBP RkYgfQorICAgICAgICAgIEdpdmVuIHRvIHRoZSBjbGllbnQsIGxldHMgdGhlIGNsaWVudCBjb250 cm9sIHdoZXRoZXIgdGhlIHNlcnZlcgorICAgICAgICAgIHNlbmRzIGF1dG9tYXRpYyBDRCBtZXNz YWdlcy4KKworICAgU0hPVyBTRVJWRVIKKyAgICAgICAgICBHaXZlbiB0byBzZXJ2ZXIsIGluY2x1 ZGVzIENELU1lc3NhZ2Ugc3RhdHVzLgorCisgICBUaGUgZGVmYXVsdCBDRCBtZXNzYWdlIGZpbGUg bmFtZSBpcyBzeXN0ZW0gZGVwZW5kZW50LiBTSE9XIENEIG9yIFNIT1cKKyAgIFNFUlZFUiBkaXNw bGF5cyB0aGUgbGlzdC4gQWxzbyBzZWUgWzU0MV1TZWN0aW9uIDQuNS4yLgorCisgIDUuNi4gTmV3 IFNlcnZlciBDb250cm9scworCisgICBESVNBQkxFIEVOQUJMRQorICAgICAgICAgIEFsbG93cyB0 aGUgc2VydmVyIHRvIGNvbmZpZ3VyZWQgc3VjaCB0aGF0IERJU0FCTEVkIGZlYXR1cmVzIGNhbgor ICAgICAgICAgIG5vdCBiZSByZS1lbmFibGVkIGJ5IGFueSBtZWFucyAtLSBlLmcuIGlmIHRoZSBj bGllbnQgaXMgc29tZWhvdworICAgICAgICAgIGFibGUgdG8gZ2V0IHRoZSBzZXJ2ZXIgaW50byBj b21tYW5kIG1vZGUuIE9uY2UgRElTQUJMRWQsIEVOQUJMRQorICAgICAgICAgIGNhbiBub3QgYmUg cmUtRU5BQkxFZC4KKworICAgU0VUIFNFUlZFUiBJRExFLVRJTUVPVVQgc2Vjb25kcworICAgICAg ICAgIFRoaXMgd2FzIGF2YWlsYWJsZSBwcmV2aW91c2x5IGluIEtlcm1pdCA5NSBvbmx5LiBOb3cg aXQgY2FuIGJlCisgICAgICAgICAgdXNlZCBpbiBDLUtlcm1pdCBhbHNvIHRvIHNwZWNpZnkgYSBt YXhpbXVtIG51bWJlciBvZiBzZWNvbmRzIHRoZQorICAgICAgICAgIHNlcnZlciBpcyBhbGxvd2Vk IHRvIGJlIGlkbGUgYmVmb3JlIGV4aXRpbmcgc2VydmVyIG1vZGUuIDAKKyAgICAgICAgICBzZWNv bmRzIG1lYW5zIG5vIGlkbGUgdGltZW91dC4gSW4gQy1LZXJtaXQgKGJ1dCBub3QgSy05NSksIFNF VAorICAgICAgICAgIFNFUlZFUiBUSU1FT1VUIGFuZCBTRVQgU0VSVkVSIElETEUtVElNRU9VVCBh cmUgbXV0dWFsbHkKKyAgICAgICAgICBleGNsdXNpdmUgLS0geW91IGNhbiBoYXZlIG9uZSBvciB0 aGUgb3RoZXIgKG9yIG5laXRoZXIpLCBidXQgbm90CisgICAgICAgICAgYm90aC4gKFNlcnZlciB0 aW1lb3V0cyBhcmUgZm9yIHRoZSBiZW5lZml0IG9mIHByaW1pdGl2ZSBLZXJtaXQKKyAgICAgICAg ICBjbGllbnRzIHRoYXQgYXJlIG5vdCBjYXBhYmxlIG9mIHRpbWluZyBvdXQgb24gdGhlaXIgb3du OyB0byBvdXIKKyAgICAgICAgICBrbm93bGVkZ2UsIG5vIHN1Y2ggY2xpZW50cyBhcmUgc3RpbGwg aW4gY2lyY3VsYXRpb24uKQorCisgICBTRVQgU0VSVkVSIEtFRVBBTElWRSB7IE9OLCBPRkYgfQor ICAgICAgICAgIChTZWUgbmV4dCBzZWN0aW9uKS4KKworICA1LjcuIFRpbWVvdXRzIGR1cmluZyBS RU1PVEUgSE9TVCBDb21tYW5kIEV4ZWN1dGlvbgorCisgICBQcmlvciB0byBDLUtlcm1pdCA3LjAs IHRoZSBDLUtlcm1pdCBzZXJ2ZXIgd291bGQgYmxvY2sgd2FpdGluZyBmb3IKKyAgIG91dHB1dCBm cm9tIGEgc3lzdGVtIGNvbW1hbmQgaW52b2tlZCB2aWEgUkVNT1RFIEhPU1QgZnJvbSB0aGUgY2xp ZW50LgorICAgSWYgdGhlIHN5c3RlbSBjb21tYW5kIHRvb2sgYSBsb25nIHRpbWUgdG8gZXhlY3V0 ZSwgdGhlIGNsaWVudCB3b3VsZAorICAgdGltZSBvdXQgYW5kIHNlbmQgTkFLIHBhY2tldHMuIElm IHRoZSBjb21tYW5kIHRvb2sgdG9vIGxvbmcsIHRoZSBjbGllbnQKKyAgIHdvdWxkIHJlYWNoIGl0 cyByZXRyeSBsaW1pdCBhbmQgZ2l2ZSB1cC4gRXZlbiBpZiBpdCBkaWRuJ3QsIHRoZSBOQUtzCisg ICB3b3VsZCBjYXVzZSB1bm5lY2Vzc2FyeSByZXRyYW5zbWlzc2lvbnMuCisKKyAgIEluIHZlcnNp b24gNy4wLCB0aGUgQy1LZXJtaXQgc2VydmVyIChWTVMgYW5kIHNlbGVjdCgpLWNhcGFibGUgVU5J WAorICAgdmVyc2lvbnMgb25seSksIHNlbmRzICJrZWVwYWxpdmUgcGFja2V0cyIgKGVtcHR5IGRh dGEgcGFja2V0cykgb25jZSBwZXIKKyAgIHNlY29uZCB3aGlsZSB3YWl0aW5nIGZvciB0aGUgc3lz dGVtIGNvbW1hbmQgdG8gY29tcGxldGUuIFRoaXMgcHJvY2VkdXJlCisgICBzaG91bGQgYmUgZW50 aXJlbHkgdHJhbnNwYXJlbnQgdG8gdGhlIEtlcm1pdCBjbGllbnQsIGFuZCBzaG91bGQgcHJldmVu dAorICAgdGhlIHVud2FudGVkIHRpbWVvdXRzIGFuZCBOQUtzLiBXaGVuIEMtS2VybWl0IDcuMCBp dHNlbGYgKG9yIEs5NQorICAgMS4xLjE5KSBpcyB0aGUgY2xpZW50LCBpdCBwcmludHMgZG90cyB0 byBzaG93IHRoZSBrZWVwYWxpdmUgcGFja2V0cy4KKworICAgVGhlIGtlZXBhbGl2ZSBmZWF0dXJl IGNhbiBiZSB0dXJuZWQgb2ZmIGFuZCBvbiB3aXRoOgorCisgIFNFVCBTRVJWRVIgS0VFUEFMSVZF IHsgT04sIE9GRiB9CisKKyAgIE5vcm1hbGx5IGl0IHNob3VsZCBiZSBvbi4gVHVybiBpdCBvZmYg aXQgaWYgY2F1c2VzIHRyb3VibGUgd2l0aCB0aGUKKyAgIGNsaWVudCwgb3IgaWYgaXQgc2VlbXMg dG8gc2xvdyBkb3duIHRoZSBzZXJ2ZXIgKGFzIGl0IG1pZ2h0IG9uIHNvbWUKKyAgIHBsYXRmb3Jt cyB1bmRlciBjZXJ0YWluIGNpcmN1bXN0YW5jZXMpLgorCisgIDYuIElOVEVSTkFUSU9OQUwgQ0hB UkFDVEVSIFNFVFMKKworICAgU3VwcG9ydCBmb3Igc2V2ZXJhbCBuZXcgc2luZ2xlLWJ5dGUgY2hh cmFjdGVyIHNldHMgd2FzIGFkZGVkIGluCisgICBDLUtlcm1pdCA3LjAuIFVuaWNvZGUgLyBJU08g MTA2NDYgaXMgbm90IHlldCBzdXBwb3J0ZWQsIGJ1dCBpcyBhIGhpZ2gKKyAgIHByaW9yaXR5IGZv ciBmb3J0aGNvbWluZyByZWxlYXNlcy4KKworICA2LjAuIElTTyA4ODU5LTE1IExhdGluIEFscGhh YmV0IDkKKworICAgVG8gYWNjb21tb2RhdGUgdGhlIEV1cm8gY3VycmVuY3kgc3ltYm9sLCBhbmQg dG8gY29ycmVjdCBzZXZlcmFsIG90aGVyCisgICBsb25nc3RhbmRpbmcgcHJvYmxlbXMgd2l0aCBJ U08gTGF0aW4gQWxwaGFiZXQgMSwgSVNPIDg4NTktMTUgTGF0aW4KKyAgIEFscGhhYmV0IDkgd2Fz IGlzc3VlZCBpbiBNYXkgMTk5OC4gSXQgaXMgc3VwcG9ydGVkIGJ5IEMtS2VybWl0IDcuMCBhcyBh CisgICB0cmFuc2ZlciBjaGFyYWN0ZXIgc2V0LCBhIGZpbGUgY2hhcmFjdGVyIHNldCwgYW5kIGEg dGVybWluYWwgY2hhcmFjdGVyCisgICBzZXQuIFRyYW5zbGF0aW9ucyB0aGF0IHByZXNlcnZlIHRo ZSBuZXcgY2hhcmFjdGVycyBhcmUgYXZhaWxhYmxlCisgICBiZXR3ZWVuIExhdGluLTkgYW5kIHNl dmVyYWwgb3RoZXIgc2V0cyBpbmNsdWRpbmc6CisKKyAgUEMgQ29kZSBQYWdlIDg1OCAgICAgICAg IChXZXN0ZXJuIEV1cm9wZWFuIGxhbmd1YWdlcywgc2ltaWxhciB0byBDUDg1MCkKKyAgV2luZG93 cyBDb2RlIFBhZ2UgMTI1MiAgIChXZXN0ZXJuIEV1cm9wZWFuIGxhbmd1YWdlcywgc2ltaWxhciB0 byBMYXRpbi0xKQorICBXaW5kb3dzIENvZGUgUGFnZSAxMjUwICAgKEVhc3Rlcm4gRXVyb3BlYW4g bGFuZ3VhZ2VzLCBzaW1pbGFyIHRvIExhdGluLTIpCisKKyAgIFRoZSBMYXRpbi05IHRyYW5zZmVy IGNoYXJhY3RlciBzZXQgYWxzbyBhbGxvd3MgZm9yIHRoZSBPRSBkaWdyYXBoCisgICBjaGFyYWN0 ZXIsIHVzZWQgcHJpbWFyaWx5IGluIEZyZW5jaCwgdG8gYmUgcHJlc2VydmVkIGluIHRyYW5zZmVy cworICAgaW52b2x2aW5nIHRoZSBERUMgTUNTIG9yIE5lWFQgY2hhcmFjdGVyIHNldHMuCisKKyAg IFRoZSBFdXJvIGNoYXJhY3RlciBpcyBhbHNvIHByZXNlbnQgaW4gdGhlIFVuaXZlcnNhbCBDaGFy YWN0ZXIgU2V0LAorICAgZGVzY3JpYmVkIGluIFs1NDJdU2VjdGlvbiA2LjYuCisKKyAgNi4xLiBU aGUgSFAtUm9tYW44IENoYXJhY3RlciBTZXQKKworICAgVGhlIEhQLVJvbWFuOCBjaGFyYWN0ZXIg c2V0IGlzIHN1cHBvcnRlZCBpbiBDLUtlcm1pdCA2LjAgYW5kIGxhdGVyIGJ1dAorICAgd2FzIG9t aXR0ZWQgZnJvbSBUYWJsZSBWSUktNCBpbiB0aGUgMm5kIEVkaXRpb24gb2YgVXNpbmcgQy1LZXJt aXQgZHVlCisgICB0byBsYWNrIG9mIHNwYWNlLiBJdCBpcyBsaXN0ZWQgaW4gWzU0M11BcHBlbmRp eCBJSUkuCisKKyAgNi4yLiBHcmVlayBDaGFyYWN0ZXIgU2V0cworCisgICBHcmVlayBjaGFyYWN0 ZXIgc2V0cyB3ZXJlIGFkZGVkIGluIDYuMToKKworICBTRVQgRklMRSBDSEFSQUNURVItU0VUIHsg Q1A4NjksIEVMT1Q5MjcsIEdSRUVLLUlTTyB9CisgIFNFVCBUUkFOU0ZFUiBDSEFSQUNURVItU0VU IHsgR1JFRUstSVNPIH0KKworICAgR1JFRUstSVNPIGlzIElTTyA4ODU5LTcsIHdoaWNoIHRoZSBz YW1lIGFzIEVMT1QgOTI4LgorCisgICBUaGUgbmV3IEdyZWVrIGNoYXJhY3RlciBzZXRzIGFyZSBs aXN0ZWQgaW4gWzU0NF1BcHBlbmRpeCBJSUkuCisKKyAgNi4zLiBBZGRpdGlvbmFsIExhdGluLTIg Q2hhcmFjdGVyIFNldHMKKworICAgVGhlIGZvbGxvd2luZyBoYXZlIGJlZW4gYWRkZWQgYXMgRklM RSBhbmQgVEVSTUlOQUwgQ0hBUkFDVEVSLVNFVHM6CisKKyAgIE1BWk9WSUEtUEMKKyAgICAgICAg ICBBIFBDIGNvZGUgcGFnZSB1c2VkIGluIFBvbGFuZCwgZXF1aXZhbGVudCB0byBDUDQzNywgYnV0 IHdpdGggMTgKKyAgICAgICAgICBzdWJzdGl0dXRpb25zIG5lZWRlZCBmb3IgUG9saXNoLgorCisg ICBDUDEyNTAKKyAgICAgICAgICBUaGUgV2luZG93cyBMYXRpbiAyIENvZGUgUGFnZS4gRXF1aXZh bGVudCB0byBJU08gODg1OS0yLCBidXQKKyAgICAgICAgICB3aXRoIGRpZmZlcmVudCBlbmNvZGlu Zy4KKworICA2LjQuIEFkZGl0aW9uYWwgQ3lyaWxsaWMgQ2hhcmFjdGVyIFNldHMKKworICAgVGhl IGZvbGxvd2luZyBoYXZlIGJlZW4gYWRkZWQgYXMgRklMRSBhbmQgVEVSTUlOQUwgQ0hBUkFDVEVS LVNFVHM6CisKKyAgIEJVTEdBUklBLVBDCisgICAgICAgICAgVGhpcyBpcyB0aGUgQ3lyaWxsaWMg UEMgY29kZSBwYWdlIHVzZWQgaW4gQnVsZ2FyaWEsIHdoZXJlIGl0IGlzCisgICAgICAgICAgY2Fs bGVkIENvZGUgUGFnZSA4NTYuIEl0IGlzIGF0dHJpYnV0ZWQgdG8gYSBjb21wYW55IGNhbGxlZAor ICAgICAgICAgIERBVEVDLCBJbmMsIGJ1dCBDUDg1NiBpcyBub3QgYSBwcm9wZXIgZGVzaWduYXRp b24sIHNpbmNlIGl0CisgICAgICAgICAgcmVmZXJzIHRvIGEgSGVicmV3IENvZGUgUGFnZSAoc2Vl IHRoZSBJQk0gUmVnaXN0cnkpLgorCisgICBDUDg1NQorICAgICAgICAgIFRoaXMgUEMgQ29kZSBQ YWdlIGNvbnRhaW5zIGFsbCB0aGUgQ3lyaWxsaWMgbGV0dGVycyB0aGF0IGFyZQorICAgICAgICAg IGFsc28gaW4gSVNPIDg4NTktNSwgYW5kIGlzIHRoZXJlZm9yZSB1c2VmdWwgZm9yIG5vbi1SdXNz aWFuCisgICAgICAgICAgQ3lyaWxsaWMgdGV4dCAoVWtyYWluaWFuLCBCZWxhcnVzaWFuLCBldGMp LCB1bmxpa2UgQ1A4NjYsIHdoaWNoCisgICAgICAgICAgaGFzIGEgc21hbGxlciByZXBlcnRvaXJl IG9mIEN5cmlsbGljIGxldHRlcnMuCisKKyAgIENQMTI1MQorICAgICAgICAgIFRoZSBXaW5kb3dz IEN5cmlsbGljIENvZGUgUGFnZS4gRXF1aXZhbGVudCB0byBDUDg1NSwgYnV0IHdpdGgKKyAgICAg ICAgICBkaWZmZXJlbnQgZW5jb2RpbmcuCisKKyAgIEtPSThSCisgICAgICAgICAgQW4gZXh0ZW5z aW9uIHRvICJPbGQgS09JLTgiIHRoYXQgYWRkcyB1cHBlciBhbmQgbG93ZXIgY2FzZQorICAgICAg ICAgIEN5cmlsbGljIGxldHRlciBJbyAobG9va3MgbGlrZSBSb21hbiBFIHdpdGggZGlhZXJlc2lz KSBwbHVzIGEKKyAgICAgICAgICBzZWxlY3Rpb24gb2YgYm94LWRyYXdpbmcgY2hhcmFjdGVycyB0 byBjb2x1bW5zIDggdGhyb3VnaCAxMSwKKyAgICAgICAgICB3aGljaCBhcmUgdmFjYW50IGluIG9y aWdpbmFsIE9sZCBLT0ktOC4gS09JOC1SIGlzIHVzZWQgZm9yIHRoZQorICAgICAgICAgIFJ1c3Np YW4gbGFuZ3VhZ2UuIEl0IGlzIHNwZWNpZmllZCBpbiBbNTQ1XVJGQyAxNDg5LgorCisgICBLT0k4 VQorICAgICAgICAgIEEgc2ltaWxhciBleHRlbnNpb24gb2YgT2xkIEtPSS04LCBidXQgZm9yIFVr cmFpbmlhbi4gSXQgaXMKKyAgICAgICAgICBzcGVjaWZpZWQgaW4gWzU0Nl1SRkMgMjMxOS4KKwor ICA2LjUuIEF1dG9tYXRpYyBDaGFyYWN0ZXItU2V0IFN3aXRjaGluZworCisgICBQcmlvciB0byB2 ZXJzaW9uIDcuMCwgQy1LZXJtaXQncyBmaWxlIGNoYXJhY3Rlci1zZXQgYWx3YXlzIGhhZCB0byBi ZQorICAgc2V0IGV4cGxpY2l0bHkuIEluIDcuMCBhbmQgbGF0ZXIsIGl0IGlzIHNldCBhdXRvbWF0 aWNhbGx5IHdoZW46CisKKyAgICAxLiBUaGlzIGZlYXR1cmUgaXMgZW5hYmxlZCAoYXMgaXQgaXMg dW5sZXNzIHlvdSBkaXNhYmxlIGl0KS4KKyAgICAyLiBBbiBpbmNvbWluZyB0ZXh0LW1vZGUgdHJh bnNmZXIgaW5jbHVkZXMgYSB0cmFuc2Zlci1jaGFyYWN0ZXItc2V0CisgICAgICAgYW5ub3VuY2Vy IGFuZCB5b3UgaGF2ZSBub3QgcHJldmlvdXNseSBnaXZlbiBhIFNFVCBGSUxFCisgICAgICAgQ0hB UkFDVEVSLVNFVCBjb21tYW5kLiBJbiB0aGlzIGNhc2UsIEMtS2VybWl0IHN3aXRjaGVzIHRvIGFu CisgICAgICAgYXBwcm9wcmlhdGUgZmlsZSBjaGFyYWN0ZXIgc2V0LiBGb3IgZXhhbXBsZSwgb24g YW4gSFAtVVgKKyAgICAgICB3b3Jrc3RhdGlvbiwgYW4gaW5jb21pbmcgTGF0aW4tMSBmaWxlIGF1 dG9tYXRpY2FsbHkgc2VsZWN0cworICAgICAgIEhQLVJvbWFuOCBmb3IgdGhlIGxvY2FsIGNvcHkg b2YgdGhlIGZpbGU7IGluIERhdGEgR2VuZXJhbCBBT1MvVlMsCisgICAgICAgaXQgd291bGQgc2Vs ZWN0IERHIEludGVybmF0aW9uYWwuCisgICAgMy4gWW91IGdpdmUgYSBTRVQgVFJBTlNGRVIgQ0hB UkFDVEVSLVNFVCBjb21tYW5kIHdpdGhvdXQgaGF2aW5nCisgICAgICAgcHJldmlvdXNseSBzcGVj aWZpZWQgYSBGSUxFIENIQVJBQ1RFUi1TRVQuIEFuIGFwcHJvcHJpYXRlIGZpbGUKKyAgICAgICBj aGFyYWN0ZXItc2V0IGlzIGNob3NlbiBhdXRvbWF0aWNhbGx5LgorCisgICBJbiBhZGRpdGlvbiwg d2hlbiB5b3UgZ2l2ZSBhIFNFVCBGSUxFIENIQVJBQ1RFUi1TRVQgY29tbWFuZCwgdGhlCisgICBh cHByb3ByaWF0ZSB0cmFuc2ZlciBjaGFyYWN0ZXItc2V0IGlzIGF1dG9tYXRpY2FsbHkgY2hvc2Vu LCB0byBiZSB1c2VkCisgICB3aGVuIHlvdSBhcmUgc2VuZGluZyBmaWxlcyAoYnV0IHRoaXMgZG9l cyBub3Qgb3ZlcnJpZGUgdGhlIG9uZQorICAgYW5ub3VuY2VkIGJ5IHRoZSBzZW5kZXIgd2hlbiB5 b3UgYXJlIHJlY2VpdmluZyBmaWxlcykuCisKKyAgIFlvdSBtaWdodCBub3QgYWdyZWUgYWJvdXQg d2hhdCBpcyAiYXBwcm9wcmlhdGUiLCBzbyBvZiBjb3Vyc2UgeW91IGNhbgorICAgZGlzYWJsZSBv ciBjaGFuZ2UgYWxsIG9mIHRoZSBhYm92ZSBhY3Rpb25zLgorCisgICBZb3UgY2FuIGRpc2FibGUg KG9yIHJlLWVuYWJsZSkgdGhlIG5ldyBhdXRvbWF0aWMgY2hhcmFjdGVyLXNldAorICAgc3dpdGNo aW5nIGZlYXR1cmUgaW4gZWFjaCBkaXJlY3Rpb24gc2VwYXJhdGVseToKKworICAgU0VUIFJFQ0VJ VkUgQ0hBUkFDVEVSLVNFVC1TRUxFQ1RJT04geyBBVVRPTUFUSUMsIE1BTlVBTCB9CisgICAgICAg ICAgQVVUT01BVElDIGlzIHRoZSBkZWZhdWx0LCBjYXVzaW5nIHRoZSBiZWhhdmlvciBkZXNjcmli ZWQgYWJvdmUKKyAgICAgICAgICB3aGVuIGFuIGluY29taW5nIGZpbGUgYXJyaXZlcy4gQ2hvb3Nl IE1BTlVBTCB0byBkZWZlYXQgdGhpcworICAgICAgICAgIGJlaGF2aW9yIGFuZCBmb3JjZSB5b3Vy IGN1cnJlbnQgRklMRSBDSEFSQUNURVItU0VUIHNldHRpbmcgdG8gYmUKKyAgICAgICAgICB1c2Vk LCBubyBtYXR0ZXIgd2hhdCBpdCBpcy4gTm90ZSB0aGF0IFNFVCBSRUNFSVZFIENIQVJBQ1RFUi1T RVQKKyAgICAgICAgICBNQU5VQUwgZG9lcyBub3QgZGlzYWJsZSByZWNvZ25pdGlvbiBvZiB0aGUg aW5jb21pbmcgdHJhbnNmZXIKKyAgICAgICAgICBjaGFyYWN0ZXItc2V0IGFubm91bmNlciwgYW5k IHRyYW5zbGF0aW9uIGZyb20gdGhlIGNvcnJlc3BvbmRpbmcKKyAgICAgICAgICBjaGFyYWN0ZXIt c2V0IHRvIHlvdXIgY3VycmVudCBmaWxlIGNoYXJhY3Rlci1zZXQuIFRvIGRpc2FibGUKKyAgICAg ICAgICB0aGF0LCB1c2UgU0VUIEFUVFJJQlVURSBDSEFSQUNURVItU0VUIE9GRi4KKworICAgU0VU IFNFTkQgQ0hBUkFDVEVSLVNFVC1TRUxFQ1RJT04geyBBVVRPTUFUSUMsIE1BTlVBTCB9CisgICAg ICAgICAgQWdhaW4gQVVUT01BVElDIGlzIHRoZSBkZWZhdWx0LCBjYXVzaW5nIHRoZSBiZWhhdmlv ciBkZXNjcmliZWQKKyAgICAgICAgICBhYm92ZSB3aGVuIHlvdSBnaXZlIGEgU0VUIHsgRklMRSwg VFJBTlNGRVIgfSBDSEFSQUNURVItU0VUCisgICAgICAgICAgY29tbWFuZC4gVXNlIE1BTlVBTCB0 byBhbGxvdyB5b3UgdG8gc3BlY2lmeSB0aGUgdHJhbnNmZXIgYW5kCisgICAgICAgICAgZmlsZSBj aGFyYWN0ZXItc2V0cyBpbmRlcGVuZGVudGx5LgorCisgICBTSE9XIENIQVJBQ1RFUi1TRVRTCisg ICAgICAgICAgVGVsbHMgc2V0dGluZ3Mgb2YgeyBTRU5ELCBSRUNFSVZFIH0gQ0hBUkFDVEVSLVNF VC1TRUxFQ1RJT04uCisKKyAgIE5vcm1hbGx5LCBob3dldmVyLCBpdCBpcyBtb3JlIGNvbnZlbmll bnQgdG8gbGVhdmUgYXV0b21hdGljIHN3aXRjaGluZworICAgYWN0aXZlLCBhbmQgY2hhbmdlIGFu eSBhc3NvY2lhdGlvbnMgdGhhdCBhcmUgbm90IGFwcHJvcHJpYXRlIGZvciB5b3VyCisgICBhcHBs aWNhdGlvbiwgYXJlYSwgb3IgY291bnRyeS4gVGhlIGNvbW1hbmRzIGFyZToKKworICAgU0hPVyBB U1NPQ0lBVElPTlMKKyAgICAgICAgICBUaGlzIGNvbW1hbmQgbGlzdHMgYWxsIHRoZSBhc3NvY2lh dGlvbnMgaW4gZWFjaCBkaXJlY3Rpb246IGZvcgorICAgICAgICAgIGVhY2ggcG9zc2libGUgdHJh bnNmZXIgY2hhcmFjdGVyLXNldCwgaXQgbGlzdHMgdGhlIGFzc29jaWF0ZWQKKyAgICAgICAgICBm aWxlIGNoYXJhY3Rlci1zZXQsIGFuZCB2aWNlIHZlcnNhLiBUaGVzZSBhcmUgdHdvIHNlcGFyYXRl IGFuZAorICAgICAgICAgIGluZGVwZW5kZW50IGxpc3RzLgorCisgICBBU1NPQ0lBVEUgVFJBTlNG RVItQ0hBUkFDVEVSLVNFVCBuYW1lMSBbIG5hbWUyIF0KKyAgICAgICAgICBDaGFuZ2VzIHRoZSBh c3NvY2lhdGlvbiBmb3IgdGhlIHRyYW5zZmVyIGNoYXJhY3Rlci1zZXQgbmFtZTEgdG8KKyAgICAg ICAgICBiZSB0aGUgZmlsZSBjaGFyYWN0ZXItc2V0IG5hbWUyLiBJZiBuYW1lMiBpcyBvbWl0dGVk LCBhdXRvbWF0aWMKKyAgICAgICAgICBzd2l0Y2hpbmcgaXMgZGlzYWJsZWQgZm9yIHRoaXMgdHJh bnNmZXIgY2hhcmFjdGVyLXNldCBvbmx5LgorCisgICBBU1NPQ0lBVEUgRklMRS1DSEFSQUNURVIt U0VUIG5hbWUxIFsgbmFtZTIgXQorICAgICAgICAgIENoYW5nZXMgdGhlIGFzc29jaWF0aW9uIGZv ciB0aGUgZmlsZSBjaGFyYWN0ZXItc2V0IG5hbWUxIHRvIGJlCisgICAgICAgICAgdGhlIHRyYW5z ZmVyIGNoYXJhY3Rlci1zZXQgbmFtZTIuIElmIG5hbWUyIGlzIG9taXR0ZWQsIGF1dG9tYXRpYwor ICAgICAgICAgIHN3aXRjaGluZyBpcyBkaXNhYmxlZCBmb3IgdGhpcyBmaWxlIGNoYXJhY3Rlci1z ZXQgb25seS4KKworICA2LjYuIFVOSUNPREUKKworICAgQy1LZXJtaXQgNy4wIGFkZHMgc3VwcG9y dCBmb3IgVW5pY29kZSwgdGhlIFVuaXZlcnNhbCBDaGFyYWN0ZXIgU2V0LAorICAgZm9yOgorCisg ICAgICogRmlsZSBUcmFuc2ZlciAoU0VORCwgUkVDRUlWRSwgR0VULCBldGMpCisgICAgICogVGVy bWluYWwgY29ubmVjdGlvbiAoQ09OTkVDVCkKKyAgICAgKiBVbmd1YXJkZWQgZmlsZSBjYXB0dXJl IChMT0cgU0VTU0lPTikKKyAgICAgKiBVbmd1YXJkZWQgZmlsZSB0cmFuc21pc3Npb24gKFRSQU5T TUlUKQorICAgICAqIExvY2FsIGZpbGUgY2hhcmFjdGVyLXNldCBjb252ZXJzaW9uIChUUkFOU0xB VEUpCisKKyAgIEMtS2VybWl0IGlzIG5vdCwgaG93ZXZlciwgYSAiVW5pY29kZSBhcHBsaWNhdGlv biIgaW4gdGhlIHNlbnNlIHRoYXQgaXRzCisgICBjb21tYW5kcywgbWVzc2FnZXMsIG9yIHVzZXIg aW50ZXJmYWNlIGFyZSBVbmljb2RlLiBSYXRoZXIsIGl0IGlzCisgICAiVW5pY29kZSBhd2FyZSIg aW4gaXRzIGFiaWxpdHkgdG8gaGFuZGxlIGFuZCBjb252ZXJ0IFVuaWNvZGUgdGV4dCBpbgorICAg dGhlIGNvdXJzZSBvZiBmaWxlIHRyYW5zZmVyIGFuZCB0ZXJtaW5hbCBjb25uZWN0aW9uLCBhbmQg eW91IGNhbiBhbHNvCisgICB1c2UgS2VybWl0IHRvIGNvbnZlcnQgbG9jYWwgZmlsZXMgYmV0d2Vl biBVbmljb2RlIGFuZCBvdGhlciBjaGFyYWN0ZXIKKyAgIHNldHMuIFRMQSdzOgorCisgIEJNUCAt IEJhc2UgTXVsdGlsaW5ndWFsIFBsYW5lCisgIEJPTSAtIEJ5dGUgT3JkZXIgTWFyaworICBDSksg LSBDaGluZXNlLCBKYXBhbmVzZSwgYW5kIEtvcmVhbgorICBJU08gLSBJbnRlcm5hdGlvbmFsIFN0 YW5kYXJkcyBPcmdhbml6YXRpb24KKyAgVExBIC0gVGhyZWUtTGV0dGVyIEFjcm9ueW0KKyAgVUNT IC0gVW5pdmVyc2FsIENoYXJhY3RlciBTZXQKKyAgVVRGIC0gVUNTIFRyYW5zZm9ybWF0aW9uIEZv cm1hdAorCisgICBVbmljb2RlIGFuZCBJU08gMTA2NDYgYXJlIHRoZSBjb29yZGluYXRlZCBhbmQg Y29tcGF0aWJsZSBjb3Jwb3JhdGUgYW5kCisgICBpbnRlcm5hdGlvbmFsIHN0YW5kYXJkcyBmb3Ig dGhlIFVuaXZlcnNhbCBDaGFyYWN0ZXIgU2V0IChVQ1MpLiBVbmxpa2UKKyAgIHNpbmdsZS1ieXRl IGFuZCBldmVuIG1vc3QgbXVsdGlieXRlIGNoYXJhY3RlciBzZXRzLCB0aGUgVUNTIGNhbgorICAg cmVwcmVzZW50IGFsbCBjaGFyYWN0ZXJzIGluIGV2ZXJ5IGV4aXN0aW5nIHdyaXRpbmcgc3lzdGVt LiBBIGZsYXQKKyAgIHBsYWluLXRleHQgZmlsZSBlbmNvZGVkIGluIHNvbWUgZm9ybSBvZiBVQ1Mg Y2FuIGNvbnRhaW4gYW55IG1peHR1cmUgb2YKKyAgIEVuZ2xpc2gsIFNwYW5pc2gsIEl0YWxpYW4s IEdlcm1hbiwgSGVicmV3LCBBcmFiaWMsIEdyZWVrLCBSdXNzaWFuLAorICAgQXJtZW5pYW4sIEdl b3JnaWFuLCBKYXBhbmVzZSwgQ2hpbmVzZSwgS29yZWFuLCBWaWV0bmFtZXNlLCBUaWJldGFuLAor ICAgSGluZGksIEJlbmdhbGksIFRhbWlsLCBUaGFpLCBFdGhpb3BpYywgYW5kIHNvIG9uLCBwbHVz IHNjaWVudGlmaWMgYW5kCisgICBtYXRoZW1hdGljYWwgbm90YXRpb24sIGFzIHdlbGwgYXMgdGV4 dHMgaW4gUnVuZXMsIE9naGFtLCBHbGFnb2xpdGljLAorICAgYW5kIG90aGVyIGhpc3RvcmljIHNj cmlwdHMuCisKKyAgIFRoZSBVQ1MgYWxyZWFkeSBjb3ZlcnMgdGhlc2Ugc2NyaXB0cyBhbmQgbWFu eSBtb3JlLCBidXQgaXQncyBhbgorICAgZXZvbHZpbmcgc3RhbmRhcmQgd2l0aCBlZmZvcnRzIHVu ZGVyd2F5IHRvIGFjY29tbW9kYXRlIGV2ZW4gbW9yZQorICAgbGFuZ3VhZ2VzIGFuZCB3cml0aW5n IHN5c3RlbXMuIFN1cHBvcnQgaXMgZ3Jvd2luZyBmb3IgbmF0aXZlIFVDUyB1c2Ugb24KKyAgIG1h bnkgcGxhdGZvcm1zIGFuZCBpbiBtYW55IGFwcGxpY2F0aW9ucy4gVGhlIGdvYWwgb2YgdGhlIGZy YW1lcnMgb2YgdGhlCisgICBVQ1MgaXMgZm9yIGl0IHRvIHJlcGxhY2UgQVNDSUksIHRoZSBJU08g TGF0aW4gQWxwaGFiZXRzLCBJU0NJSSwgVklTQ0lJLAorICAgdGhlIENoaW5lc2UsIEphcGFuZXNl LCBhbmQgS29yZWFuIChDSkspIG11bHRpYnl0ZSBzZXRzLCBldGMsIGFzIHdlbGwgYXMKKyAgIHRo ZSBtYW55IHByaXZhdGUgY2hhcmFjdGVyIHNldHMgaW4gdXNlIHRvZGF5LCBpbiBvdGhlciB3b3Jk cyB0byBiZWNvbWUKKyAgICp0aGUqIFVuaXZlcnNhbCBDaGFyYWN0ZXIgU2V0LgorCisgICBVbnRp bCB0aGF0IHRpbWUsIGhvd2V2ZXIsIGNvbnZlcnNpb25zIGJldHdlZW4gZXhpc3Rpbmcgc2V0cyBh bmQgdGhlIFVDUworICAgd2lsbCBiZSBuZWNlc3Nhcnkgd2hlbiBtb3ZpbmcgdGV4dCBiZXR3ZWVu IHBsYXRmb3JtcyBhbmQgYXBwbGljYXRpb25zLgorICAgTm93IEtlcm1pdCBjYW4gaGVscC4KKwor ICAgIDYuNi4xLiBPdmVydmlldyBvZiBVbmljb2RlCisKKyAgIEZvciBhIG1vcmUgY29tcGxldGUg cGljdHVyZSwgcGxlYXNlIHZpc2l0OgorCisgIFs1NDddaHR0cDovL3d3dy51bmljb2RlLm9yZy8K KworICAgYW5kIGFjY2VzcyB0aGUgdmFyaW91cyBvbmxpbmUgaW50cm9kdWN0aW9ucywgRkFRcywg dGVjaG5pY2FsIHJlcG9ydHMsCisgICBhbmQgb3RoZXIgaW5mb3JtYXRpb24uIEZvciBncmVhdGVy IGRlcHRoLCBvcmRlciB0aGUgbGF0ZXN0IHZlcnNpb24gb2YKKyAgIHRoZSBwdWJsaXNoZWQgVW5p Y29kZSBTdGFuZGFyZC4gVGhlIGZvbGxvd2luZyBvdmVydmlldyBjb250YWlucyBhIGdyZWF0Cisg ICBtYW55IG92ZXJzaW1wbGlmaWNhdGlvbnMgYW5kIHBlcmhhcHMgYW4gb3BpbmlvbiBvciB0d28u CisKKyAgIEF0IHByZXNlbnQsIHRoZSBVQ1MgaXMgYSAxNi1iaXQgKDItYnl0ZSkgY2hhcmFjdGVy IHNldCwgYnV0IHdpdGgKKyAgIHByb3Zpc2lvbnMgdG8gZ3JvdyB0byBhIDQtYnl0ZSBzZXQuIFVD Uy0yIHJlZmVycyB0byB0aGUgdHdvLWJ5dGUgc2V0LAorICAgYWxzbyBjYWxsZWQgdGhlIEJhc2Ug TXVsdGlsaW5ndWFsIFBsYW5lIChCTVApLCBpbiB3aGljaCBlYWNoIGNoYXJhY3RlcgorICAgaGFz IDE2IGJpdHMsIGFuZCB0aGVyZWZvcmUgdGhlcmUgYXJlIDJeMTYgPSA2NTUzNiBwb3NzaWJsZSBj aGFyYWN0ZXJzLgorICAgVGhlIGZpcnN0IDEyOCBjaGFyYWN0ZXJzIGFyZSB0aGUgc2FtZSBhcyBV UyBBU0NJSSAoQzAgY29udHJvbAorICAgY2hhcmFjdGVycyBhbmQgREVMIGluY2x1ZGVkKSwgdGhl IG5leHQgMzIgYXJlIHRoZSBDMSBjb250cm9sIGNoYXJhY3RlcnMKKyAgIG9mIElTTyA2NDI5LCBh bmQgdGhlIG5leHQgOTYgYXJlIHRoZSBSaWdodCBIYWxmIG9mIElTTyA4ODU5LTEgTGF0aW4KKyAg IEFscGhhYmV0IDEuIFRoZSByZW1haW5pbmcgdGVucyBvZiB0aG91c2FuZHMgb2YgY2hhcmFjdGVy cyBhcmUgYXJyYW5nZWQKKyAgIG5ld2x5IGZvciB0aGUgVUNTLCB1c3VhbGx5IChidXQgbm90IGFs d2F5cykgaW4gc2VjdGlvbnMgY29ycmVzcG9uZGluZworICAgdG8gZXhpc3Rpbmcgc3RhbmRhcmRz LCBzdWNoIGFzIElTTyBMYXRpbi9DeXJpbGxpYywgb2Z0ZW4gcGx1cworICAgYWRkaXRpb25hbCBj aGFyYWN0ZXJzIG5vdCBhcHBlYXJpbmcgaW4gdGhlIGV4aXN0aW5nIHN0YW5kYXJkcyBkdWUgdG8K KyAgIGxhY2sgb2Ygc3BhY2UgKG9yIG90aGVyIHJlYXNvbnMpLgorCisgICBJU08gMTA2NDYgYWxs b3dzIGZvciBhZGRpdGlvbmFsIHBsYW5lcywgZS5nLiBmb3IgRWd5cHRpYW4gaGllcm9nbHlwaGlj cworICAgb3IgYW5jaWVudCAob3Igb3RoZXIgZXNvdGVyaWMpIENKSyBjaGFyYWN0ZXJzLCBidXQg dGhlc2UgcGxhbmVzIGFyZSBub3QKKyAgIHlldCBkZWZpbmVkIGFuZCBzbyB3ZSB3aWxsIHNheSBu b3RoaW5nIG1vcmUgYWJvdXQgdGhlbSBoZXJlLCBleGNlcHQKKyAgIHRoYXQgdGhlaXIgdXNlIHdp bGwgcmVxdWlyZSB0aGUgNC1ieXRlIGZvcm0gb2YgVUNTLCBjYWxsZWQgVUNTLTQsIGluCisgICBz b21lIGZvcm0gKG1vcmUgYWJvdXQgImZvcm1zIiBpbiBbNTQ4XVNlY3Rpb24gNi42LjIpLgorCisg ICBVbmljb2RlIGFuZCBJU08gMTA2NDYgYXJlIGNvbnN0YW50bHkgdW5kZXIgcmV2aXNpb24sIG1h aW5seSB0byBhZGQgbmV3CisgICBjaGFyYWN0ZXJzLiBUaGUgVW5pY29kZSByZXZpc2lvbiBpcyBk ZW5vdGVkIGJ5IGEgdmVyc2lvbiBudW1iZXIsIHN1Y2gKKyAgIGFzIDEuMCwgMS4xLCAyLjAsIDMu MC4gVGhlIElTTyAxMDY0NiBzdGFuZGFyZCByZXZpc2lvbiBpcyBpZGVudGlmaWVkIGJ5CisgICBF ZGl0aW9uIChzdWNoIGFzIElTTyAxMDY0Ni0xIDE5OTMpLCBwbHVzIHJlZmVyZW5jZSB0byBhbnkg YW1lbmRtZW50cy4KKyAgIFRoZSBmaXJzdCB2ZXJzaW9ucyBvZiB0aGVzZSBzdGFuZGFyZHMgaW5j bHVkZWQgZW5jb2RpbmdzIGZvciBLb3JlYW4KKyAgIEhhbmd1bCBzeWxsYWJsZXMgKEphbW9zKTsg dGhlc2UgZW5jb2RpbmdzIHdlcmUgY2hhbmdlZCBpbiB2ZXJzaW9uIDEuMQorICAgb2YgVW5pY29k ZSBhbmQgYnkgQW1lbmRtZW50IDUgdG8gSVNPIDEwNjQ2LTEuIFRoZSBVbmljb2RlIFRlY2huaWNh bAorICAgQ29tbWl0dGVlIGFuZCB0aGUgSVNPIGFja25vd2xlZGdlIHRoYXQgdGhpcyB3YXMgYSBi YWQgdGhpbmcgdG8gZG8sIGFuZAorICAgcHJvbWlzZSBuZXZlciBjaGFuZ2UgZW5jb2RpbmdzIG9y IGNoYXJhY3RlciBuYW1lcyBhZ2Fpbiwgc2luY2UgdGhpcworICAgcG9zZXMgc2VyaW91cyBwcm9i bGVtcyBmb3IgY29uZm9ybWFuY2UgYW5kIGRhdGEgaW50ZXJjaGFuZ2UuCisKKyAgIEEgVUNTLTIg dmFsdWUgaXMgY3VzdG9tYXJpbHkgd3JpdHRlbiBsaWtlIHRoaXM6CisKKyAgVSt4eHh4CisKKyAg IHdoZXJlICJ4eHh4IiByZXByZXNlbnRzIGZvdXIgaGV4YWRlY2ltYWwgZGlnaXRzLCAwLTkgYW5k IEEtRi4gRm9yCisgICBleGFtcGxlLCBVKzAwNDEgaXMgIkEiLCBVKzAwQzEgaXMgQS1hY3V0ZSwg VSswNDJGIGlzIHVwcGVyY2FzZSBDeXJpbGxpYworICAgIllhIiwgVStGQjRGIGlzIEhlYnJldyBM aWdhdHVyZSBBbGVmIExhbWVkLCBhbmQgVStGRkZEIGlzIHRoZSBzcGVjaWFsCisgICBjaGFyYWN0 ZXIgdGhhdCBtZWFucyAibm90IGEgY2hhcmFjdGVyIi4KKworICAgTW9zdCBjaGFyYWN0ZXJzIGZy b20gd2lkZWx5LXVzZWQgYWxwaGFiZXRpYyB3cml0aW5nIHN5c3RlbXMgc3VjaCBhcyB0aGUKKyAg IFdlc3QgRXVyb3BlYW4gb25lcywgQ3lyaWxsaWMsIEdyZWVrLCBIZWJyZXcsIFZpZXRuYW1lc2Us IGV0YywgYXJlCisgICBhdmFpbGFibGUgaW4gInByZWNvbXBvc2VkIiBmb3JtOyBmb3IgZXhhbXBs ZSBVcHBlcmNhc2UgTGF0aW4gTGV0dGVyIEEKKyAgIHdpdGggQWN1dGUgQWNjZW50IGlzIGEgc2lu Z2xlIGNoYXJhY3RlciAoYXMgaXQgaXMgaW4gTGF0aW4tMSkuIEhvd2V2ZXIsCisgICB0aGUgVUNT IGFsc28gcGVybWl0cyBjb21wb3NpdGlvbiBvZiBhIGJhc2UgY2hhcmFjdGVyIHdpdGggb25lIG9y IG1vcmUKKyAgIG5vbnNwYWNpbmcgZGlhY3JpdGljcy4gVGhpcyBtZWFucyB0aGUgc2FtZSBjaGFy YWN0ZXIgY2FuIGJlIHJlcHJlc2VudGVkCisgICBpbiBtb3JlIHRoYW4gb25lIHdheSwgd2hpY2gg Y2FuIHByZXNlbnQgcHJvYmxlbXMgaW4gbWFueSBhcHBsaWNhdGlvbgorICAgYXJlYXMsIGluY2x1 ZGluZyB0cmFuc2ZlciBhbmQgY2hhcmFjdGVyLXNldCBjb252ZXJzaW9uIG9mIHRleHQuCisKKyAg IENvbnZlcnNpb24gZnJvbSBBU0NJSSBvciBMYXRpbi0xIHRvIFVDUy0yIHRleHQgaXMgInRyaXZp YWwiOiBzaW1wbHkKKyAgIGluc2VydCBhIE5VTCAoMCkgYnl0ZSBiZWZvcmUgZWFjaCBBU0NJSSBv ciBMYXRpbi0xIGJ5dGUuIENvbnZlcnRpbmcgaW4KKyAgIHRoZSByZXZlcnNlIGRpcmVjdGlvbiAo cHJvdmlkZWQgdGhlIFVDUy0yIGZpbGUgY29udGFpbnMgb25seSBVKzAwMDAgdG8KKyAgIFUrMDBG RikgaXMgZXF1YWxseSBzaW1wbGUgKGlmIHdlIGlnbm9yZSB0aGUgaXNzdWUgb2YgY29tcG9zaXRp b24pOgorICAgcmVtb3ZlIGV2ZXJ5IHNlY29uZCAoTlVMKSBieXRlLiBDb252ZXJzaW9uIG9mIG90 aGVyIGNoYXJhY3RlciBzZXRzIHRvCisgICBhbmQgZnJvbSBVQ1MsIGhvd2V2ZXIsIHJlcXVpcmVz IHRhYmxlcyBvciBhbGdvcml0aG1zIHNwZWNpZmljIHRvIGVhY2gKKyAgIHNldC4gTmV2ZXJ0aGVs ZXNzLCB0aGUgcmVsYXRpdmVseSB0cmFuc3BhcmVudCB1cHdhcmRzIGNvbXBhdGliaWxpdHkKKyAg IGZyb20gQVNDSUkgYW5kIExhdGluLTEsIGluIHdoaWNoIGEgdmVyeSBsYXJnZSBzaGFyZSBvZiB0 aGUgd29ybGQncworICAgdGV4dHVhbCBkYXRhIGlzIGVuY29kZWQsIGdpdmVzIHRoZSBVQ1MgYW4g ZW50cmVlIG9udG8gZXhpc3RpbmcKKyAgIHBsYXRmb3Jtcy4KKworICAgQnV0IHRoZSAyLWJ5dGUg Zm9ybWF0IGFuZCB0aGUgcHJlcG9uZGVyYW5jZSBvZiBOVUwgYW5kIG90aGVyIGNvbnRyb2wKKyAg IGJ5dGVzIGluIFVDUy0yIHRleHQgcG9zZSBwcm9ibGVtcyBmb3IgY3VycmVudCBhcHBsaWNhdGlv bnMgYW5kCisgICB0cmFuc21pc3Npb24gbWV0aG9kcy4gQW5kIHRvIG1ha2UgbWF0dGVycyB3b3Jz ZSwgZGlmZmVyZW50IGhhcmR3YXJlCisgICBwbGF0Zm9ybXMgc3RvcmUgVUNTLTIgY2hhcmFjdGVy cyBpbiBkaWZmZXJlbnQgYnl0ZSBvcmRlci4gVGh1cyBhIFVDUy0yCisgICBmaWxlIHRyYW5zZmVy cmVkIGJ5IEZUUCAob3IgYWNjZXNzZWQgdmlhIE5GUywgZXRjKSBiZXR3ZWVuIHR3bworICAgY29t cHV0ZXJzIHdpdGggZGlmZmVyZW50IGFyY2hpdGVjdHVyZSBtaWdodCBoYXZlIGl0cyBieXRlcyBp biB0aGUgd3JvbmcKKyAgIG9yZGVyIChvciB3b3JzZTsgc2VlIFs1NDldU2VjdGlvbiA2LjYuNS4x ICkuCisKKyAgICA2LjYuMi4gVUNTIEJ5dGUgT3JkZXIKKworICAgQ29uc2lkZXIgdGhlIG51bWJl ciAxLiBJbiBhbiA4LWJpdCBieXRlLCB0aGlzIHdvdWxkIGJlIHJlcHJlc2VudGVkIGJ5CisgICB0 aGUgZm9sbG93aW5nIHNlcmllcyBvZiAwLSBhbmQgMS1iaXRzOgorCisgICstLS0tLS0tLS0tLS0t LS0tLSsKKyAgfCAwIDAgMCAwIDAgMCAwIDEgfAorICArLS0tLS0tLS0tLS0tLS0tLS0rCisKKyAg IFRoZXJlZm9yZSBpbiBhIDE2LWJpdCAid29yZCIgdGhlIHJlcHJlc2VudGF0aW9uIG1pZ2h0IGJl OgorCisgICstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAwIDAgMCAw IDAgMCAwIDAgfCAwIDAgMCAwIDAgMCAwIDEgfAorICArLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tLS0rCisKKyAgIE5vdyBjb25zaWRlciB0aGUgbnVtYmVyIDI1Niwgd2hpY2ggaXMg MiB0byB0aGUgOHRoIHBvd2VyLiBUaGUgYmluYXJ5CisgICByZXByZXNlbnRhdGlvbiBpcyAxMDAw MDAwMDAgKDEgZm9sbG93ZWQgYnkgOCB6ZXJvcykuIDI1NiB3b3VsZCBnbyBpbnRvCisgICBhIDE2 LWJpdCB3b3JkIGxpa2UgdGhpczoKKworICArLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLS0rCisgIHwgMCAwIDAgMCAwIDAgMCAxIHwgMCAwIDAgMCAwIDAgMCAwIHwKKyAgKy0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKworCisgICBXaGVuIGEgY29tcHV0ZXIgd29y a3MgdGhpcyB3YXksIGl0IGlzIHNhaWQgdG8gYmUgQmlnIEVuZGlhbiwgbWVhbmluZyBpdAorICAg cHV0cyB0aGUgbW9zdCBzaWduaWZpY2FudCAoYmlnZ2VzdCkgYnl0ZSBmaXJzdCAob24gdGhlICJs ZWZ0IikgaW4gYQorICAgMTYtYml0IHdvcmQsIGFuZCB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYnl0 ZSBzZWNvbmQgKG9uIHRoZSByaWdodCkuCisKKyAgIEhvd2V2ZXIsIHNvbWUgb3RoZXIgY29tcHV0 ZXJzIGhhdmUgdGhlIG9wcG9zaXRlIGFycmFuZ2VtZW50LCBjYWxsZWQKKyAgIExpdHRsZSBFbmRp YW4sIGluIHdoaWNoIDEgaXM6CisKKyAgKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0tKworICB8IDAgMCAwIDAgMCAwIDAgMSB8IDAgMCAwIDAgMCAwIDAgMCB8CisgICstLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLSsKKworICAgYW5kIDI1NiBpczoKKworICArLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgMCAwIDAgMCAwIDAgMCAwIHwg MCAwIDAgMCAwIDAgMCAxIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t KworCisgICBDb21wdXRlcnMgc3VjaCBhcyBTcGFyYywgTUlQUywgUEEtUklTQywgYW5kIFBvd2Vy UEMgYXJlIEJpZyBFbmRpYW4sCisgICB3aGVyZWFzIHRoZSBQQyBhbmQgdGhlIEFscGhhIGFyZSBM aXR0bGUgRW5kaWFuLiBFbmRpYW5uZXNzIGhhcyBuZXZlcgorICAgYmVlbiBhbiBpc3N1ZSB3aXRo IDctIG9yIDgtYml0IGNoYXJhY3RlcnMsIGJ1dCBpdCBpcyB3aXRoIFVDUworICAgY2hhcmFjdGVy cy4gSXQgY2FuIGJlIGEgdHJpY2t5IGJ1c2luZXNzIHRvIHNoYXJlIG9yIHRyYW5zZmVyIGEgVUNT LTIKKyAgIGZpbGUgYmV0d2VlbiB0d28gZGlmZmVyZW50IGtpbmRzIG9mIGNvbXB1dGVycy4KKwor ICAgVG8gYWxsZXZpYXRlIChidXQgbm90IGVudGlyZWx5IHNvbHZlKSB0aGUgcHJvYmxlbSwgVUNT LTIgZmlsZXMgYXJlCisgICBzdXBwb3NlZCB0byBiZWdpbiB3aXRoIHRoZSBVbmljb2RlIGNoYXJh Y3RlciBVK0ZFRkYsIFplcm8tV2lkdGgKKyAgIE5vLUJyZWFrIFNwYWNlIChaV05CUykuIFRoaXMg aXMgYSBraW5kIG9mICJuby1vcCIgKG5vdGU6IGFueSBzdWNoCisgICBhc3NlcnRpb24gbXVzdCBu b3JtYWxseSBiZSBxdWFsaWZpZWQgd2l0aCBtYW55ICJidXQgaWZzIiBhbmQgImV4Y2VwdHMiCisg ICB3aGljaCBhcmUgb21pdHRlZCBoZXJlIGluIHRoZSBpbnRlcmVzdCBvZiBicmV2aXR5KS4gSWYg dGhlIGJ5dGVzIGFyZQorICAgcmV2ZXJzZWQgdGhlIFpXTkJTIGJlY29tZXMgVStGRkZFLCB3aGlj aCBpcyBub3QgKGFuZCBuZXZlciB3aWxsIGJlKSBhCisgICBkZWZpbmVkIFVDUyBjaGFyYWN0ZXIu IFUrRkVGRiBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgVUNTIGZpbGUgaXMKKyAgIHRoZXJlZm9yZSBj YWxsZWQgYSBCeXRlIE9yZGVyIE1hcmssIG9yIEJPTS4KKworICAgQW55IGFwcGxpY2F0aW9uIHRo YXQgY3JlYXRlcyBhIFVDUy0yIChvciBVVEYtMTYsIG9yIFVDUy00KSBmaWxlIHNob3VsZAorICAg aW5jbHVkZSBhIEJPTSwgYW5kIGFueSBhcHBsaWNhdGlvbiB0aGF0IHJlYWRzIG9uZSBzaG91bGQg dGVzdCBmb3IgYQorICAgQk9NLCBhbmQgaWYgb25lIGlzIGZvdW5kLCBpbmZlciB0aGUgYnl0ZSBv cmRlciBmcm9tIGl0LiBUaGlzIGlzIGEKKyAgIGNvbnZlbnRpb24sIGhvd2V2ZXIgLS0gbm90IGEg c3RhbmRhcmQgb3IgYSByZXF1aXJlbWVudCAtLSBhbmQKKyAgIGFwcGxpY2F0aW9ucyB2YXJ5IGlu IHRoZWlyIGFiaWxpdHkgdG8gaGFuZGxlIEJPTXMgYW5kICJiYWNrd2FyZHMiIFVDUy0yCisgICBm aWxlcy4KKworICAgTm90ZSB0aGF0IGEgQk9NIGlzIHVzZWZ1bCBvbmx5IGF0IHRoZSBiZWdpbm5p bmcgb2YgYSBmaWxlLiBJZiB5b3UKKyAgIGFwcGVuZCBvbmUgVUNTLTIgZmlsZSB0byBhbm90aGVy LCBhbmQgYm90aCBoYXZlIEJPTXMsIHRoZSBpbnRlcm5hbCBCT00KKyAgIGlzIG5vIGxvbmdlciBh IEJPTS4gQW5kIGlmIHRoZSBieXRlIG9yZGVycyBvZiB0aGUgdHdvIGZpbGVzIGRpZmZlciwKKyAg IHRoZW4gZWl0aGVyIHRoZSBmaXJzdCBwYXJ0IG9yIHRoZSBzZWNvbmQgd2lsbCBiZSBiYWNrd2Fy ZHMuIChWYXJpb3VzCisgICBvdGhlciB1bmRlc2lyYWJsZSBlZmZlY3RzIG1pZ2h0IGFsc28gb2Nj dXIsIG5vdCBkaXNjdXNzZWQgaGVyZS4pCisKKyAgICA2LjYuMi4gVUNTIFRyYW5zZm9ybWF0aW9u IEZvcm1hdHMKKworICAgVUNTIHRleHR1YWwgZGF0YSBjYW4gYmUgbW9kaWZpZWQgaW4gdmFyaW91 cyB3YXlzIGZvciB0cmFuc21pc3Npb24gb3IKKyAgIHN0b3JhZ2UuIEFueSBvZmZpY2lhbGx5IHNh bmN0aW9uZWQgbWV0aG9kIG9mIGRvaW5nIHRoaXMgaXMgY2FsbGVkIGEgVUNTCisgICBUcmFuc2Zv cm1hdGlvbiBGb3JtYXQsIG9yIFVURi4gT25lIHN1Y2ggbWV0aG9kLCBjYWxsZWQgVVRGLTE2LCBp cworICAgZXNzZW50aWFsbHkgaWRlbnRpY2FsIHdpdGggVUNTLTIgZXhjZXB0IHRoYXQgaXQgZGVz aWduYXRlcyBjZXJ0YWluIGNvZGUKKyAgIHZhbHVlcyBhcyAiZXNjYXBlIHNlcXVlbmNlcyIgKGNh bGxlZCBzdXJyb2dhdGUgcGFpcnMpIHRvIGFjY2VzcworICAgY2hhcmFjdGVycyBpbiBvdGhlciBw bGFuZXMgd2l0aG91dCBoYXZpbmcgdG8gdXNlIGZ1bGwgVUNTLTQuIFdlIHdvbid0CisgICBkaXNj dXNzIFVURi0xNiBmdXJ0aGVyIGhlcmUsIHNpbmNlIGF0IHRoZSBtb21lbnQgdGhlcmUgYXJlIG5v IG90aGVyCisgICBwbGFuZXMuIFNldmVyYWwgb3RoZXIgVVRGJ3MgKHN1Y2ggYXMgVVRGLTEsIFVU Ri0yLCBhbmQgVVRGLTcpIGhhdmUKKyAgIGZhbGxlbiBpbnRvIGRpc3VzZSBhbmQgYXJlIG5vdCBk aXNjdXNzZWQgaGVyZS4gVGhlIG1vc3QgaW1wb3J0YW50CisgICB0cmFuc2Zvcm1hdGlvbiBmb3Jt YXQgdG9kYXkgaXMgVVRGLTguCisKKyAgIFVURi04LCBzbyBjYWxsZWQgYmVjYXVzZSBpdCAic2Vy aWFsaXplcyIgVUNTLTIgZGF0YSBpbnRvIGEgc3RyZWFtIG9mCisgICA4LWJpdCBieXRlcywgaXMg ZGVzaWduZWQgdG8gYWxsb3cgdGhlIFVDUyB0byB3b3JrIHdpdGggcHJlc2VudC1kYXkKKyAgIGNv bW11bmljYXRpb25zIGdlYXIsIGNvbXB1dGVycywgYW5kIHNvZnR3YXJlLiBUaGUgbW9zdCBpbXBv cnRhbnQKKyAgIHByb3BlcnRpZXMgb2YgVVRGLTggYXJlIHRoYXQgYnl0ZSBvcmRlciBpcyBjb25z dGFudCAobm8gYnl0ZSBzd2FwcGluZykKKyAgIGFuZCBhbGwgKDctYml0KSBBU0NJSSBjaGFyYWN0 ZXJzIHJlcHJlc2VudCB0aGVtc2VsdmVzLiBUaGVyZWZvcmUKKyAgIGNvbnZlcnNpb24gYmV0d2Vl biBBU0NJSSBhbmQgVVRGLTggaXMgbm8gY29udmVyc2lvbiBhdCBhbGwsIGFuZAorICAgYXBwbGlj YXRpb25zIG9yIHBsYXRmb3JtcyAoc3VjaCBhcyBQbGFuIDkgZnJvbSBCZWxsIExhYnMpIHRoYXQg dXNlCisgICBVVEYtOCAiZm9yIGV2ZXJ5dGhpbmciIGNhbiBzdGlsbCBydW4gdHJhZGl0aW9uYWwg QVNDSUktb25seQorICAgYXBwbGljYXRpb25zIGFuZCBiZSBhY2Nlc3NlZCBmcm9tIHRoZW0uIElu IHBhcnRpY3VsYXIsIHVubGlrZSBVQ1MtMiwKKyAgIEFTQ0lJIGNoYXJhY3RlcnMgYXJlIG5vdCBw YWRkZWQgd2l0aCBOVUwgYnl0ZXMuIEJ1dCBhbHNvIHVubGlrZSBVQ1MtMiwKKyAgIHRoZXJlIGlz IG5vIHRyYW5zcGFyZW5jeSBmb3IgTGF0aW4tMSBvciBhbnkgb3RoZXIgbm9uLUFTQ0lJIGNoYXJh Y3RlcgorICAgc2V0LiBFdmVyeSBub24tQVNDSUkgVUNTLTIgY2hhcmFjdGVyIGlzIHJlcHJlc2Vu dGVkIGJ5IGEgc2VxdWVuY2Ugb2YgMgorICAgb3IgMyBVVEYtOCBieXRlcy4gVGh1cyBVVEYtOCBp cyBtb3JlIGNvbXBhY3QgdGhhbiBVQ1MtMiBmb3IgdGV4dAorICAgY29udGFpbmluZyBhIHByZXBv bmRlcmFuY2Ugb2YgQUJDJ3MgKG9yIG90aGVyIEFTQ0lJIGNoYXJhY3RlcnMpLCBhYm91dAorICAg dGhlIHNhbWUgYXMgVUNTLTIgZm9yIG90aGVyIGFscGhhYmV0aWMgc2NyaXB0cyAoQ3lyaWxsaWMs IFJvbWFuLCBHcmVlaywKKyAgIGV0YyksIGFuZCBsYXJnZXIgdGhhbiBVQ1MtMiBmb3IgQ2hpbmVz ZSwgSmFwYW5lc2UsIGFuZCBLb3JlYW4uCisKKyAgIFRoZSBVVEYtOCB1bmNvZGluZyBvZiB0aGUg VUNTIGhhcyBiZWVuIGFkb3B0ZWQgYnkgdGhlIEludGVybmV0IGFzIHRoZQorICAgcHJlZmVycmVk IGNoYXJhY3RlciBzZXQgZm9yIG5ldyBhcHBsaWNhdGlvbnMsIGFuZCBpcyBncmFkdWFsbHkgYmVp bmcKKyAgIHJldHJvZml0dGVkIGludG8gdHJhZGl0aW9uYWwgYXBwbGljYXRpb25zIGxpa2UgRlRQ IChbNTUwXVJGQyAyNjQwKS4KKworICAgIDYuNi4zLiBDb25mb3JtYW5jZSBMZXZlbHMKKworICAg QWx0aG91Z2ggdGhlIFVuaWNvZGUgYW5kIElTTyAxMDY0NiBzdGFuZGFyZHMgYm90aCBkZXNjcmli ZSB0aGUgc2FtZQorICAgY2hhcmFjdGVyIHNldCwgdGhlc2Ugc3RhbmRhcmRzIGRpZmZlciBpbiBt YW55IHdheXMsIGluY2x1ZGluZyB0aGVpcgorICAgc3RhdGVkIHJlcXVpcmVtZW50cyBmb3IgY29u Zm9ybWFuY2UgYW5kIHRoZWlyIGNsYXNzaWZpY2F0aW9uIG9mCisgICBjb25mb3JtYW5jZSBsZXZl bHMuCisKKyAgIEtlcm1pdCBoYXMgYWx3YXlzIGFiaWRlZCBieSBJU08gY2hhcmFjdGVyLXNldCBz dGFuZGFyZHMsIGluY2x1ZGluZyBJU08KKyAgIGNoYXJhY3Rlci1zZXQgZGVzaWduYXRpb24gYW5k IGludm9jYXRpb24gbWV0aG9kcy4gSW4gYWRhcHRpbmcgVW5pY29kZSwKKyAgIHRoZXJlZm9yZSwg d2UgaGFkIHRvIGNob29zZSBmcm9tIGFtb25nIHRoZSBhdmFpbGFibGUgSVNPIGRlc2lnbmF0aW9u cworICAgd2hpY2gsIGluIHR1cm4sIGNvcnJlc3BvbmQgd2l0aCBJU08gMTA2NDYgY29uZm9ybWFu Y2UgbGV2ZWxzLiBBdAorICAgcHJlc2VudCwgS2VybWl0IGNsYWltcyB0aGUgbG93ZXN0IGNvbmZv cm1hbmNlIGxldmVsLCAxLCBtZWFuaW5nCisgICAocm91Z2hseSkgdGhhdCBpdCBkb2VzIG5vdCBo YW5kbGUgY29tYmluaW5nIGZvcm1zIGFuZCBpdCBkb2VzIG5vdAorICAgaGFuZGxlIEtvcmVhbiBI YW5ndWwgSmFtb3MgKGp1c3QgYXMsIGF0IHByZXNlbnQsIGl0IGRvZXMgbm90IGhhbmRsZQorICAg S29yZWFuIGluIGdlbmVyYWwpLiBOb3RlIHRoYXQgSVNPIDEwNjQ2IENvbmZvcm1hbmNlIExldmVs cyAxIGFuZCAyCisgICBzaWRlc3RlcCB0aGUgaXNzdWUgb2YgdGhlIGNvZGUgY2hhbmdlcyBmb3Ig S29yZWFuIEhhbmd1bCBieSBhbm5vdW5jaW5nCisgICBub24tc3VwcG9ydCBmb3IgSGFuZ3VsIHJl Z2FyZGxlc3Mgb2YgZW5jb2RpbmcuCisKKyAgIElTTyAxMDY0NiBDb25mb3JtYW5jZSBMZXZlbCAx IGlzIGFwcHJveGltYXRlbHkgZXF1aXZhbGVudCB0byBVbmljb2RlCisgICBOb3JtYWxpemF0aW9u IEZvcm0gQyAoZGVzY3JpYmVkIGluIFVuaWNvZGUgVGVjaG5pY2FsIFJlcG9ydCAxNSwKKyAgIGlu Y29ycG9yYXRlZCBpbnRvIFVuaWNvZGUgMy4wKS4KKworICAgQXMgbm90ZWQgaW4gWzU1MV1TZWN0 aW9uIDYuNi4yLCBLZXJtaXQgZG9lcyBub3QgY2xhaW0gdG8gc3VwcG9ydCBVVEYtMTYKKyAgIGF0 IHRoZSBwcmVzZW50IHRpbWUsIGhlbmNlIHRoZSBVQ1MtMiBub21lbmNsYXR1cmUuIEtlcm1pdCB0 cmVhdHMKKyAgIHN1cnJvZ2F0ZXMganVzdCBhcyBpZiB0aGV5IHdlcmUgYW55IG90aGVyIFVDUy0y IGNoYXJhY3RlcnMsIHJhdGhlciB0aGFuCisgICBhcyBlc2NhcGVzIHRvIG90aGVyIHBsYW5lcywg d2hpY2ggbWVhbnMgdGhhdCAoZXhjZXB0IHdoZW4gY29udmVydGluZworICAgYmV0d2VlbiBVQ1Mt MiBhbmQgVVRGLTgpIHRoZXkgYXJlIHRyYW5zbGF0ZWQgdG8gImVycm9yIiBjaGFyYWN0ZXJzLAor ICAgc2luY2UgKGEpIG5vIG90aGVyIHBsYW5lcyBhcmUgZGVmaW5lZCB5ZXQgKGFuZCBpZiB0aGV5 IHdlcmUsIG5vIG90aGVyCisgICBjaGFyYWN0ZXIgc2V0cyBzdXBwb3J0ZWQgYnkgS2VybWl0IHdv dWxkIGVuY29kZSB0aGVpciBjaGFyYWN0ZXJzKSwgYW5kCisgICAoYikgbm8gdmFsaWQgc3Vycm9n YXRlIGNoYXJhY3RlciBjb3JyZXNwb25kcyB0byBhbnkgb3RoZXIgVUNTLTIKKyAgIGNoYXJhY3Rl ci4KKworICAgQSBtaW5vciB5ZXQgc2lnbmlmaWNhbnQgYXNwZWN0IG9mIFVuaWNvZGUgMy4wIGFu ZCBzb21lIHJlY2VudAorICAgcGVydHVyYmF0aW9uIG9mIElTTyAxMDY0Ni0xIChwcm9iYWJseSBB bWVuZG1lbnQgMTgsICJTeW1ib2xzIGFuZCBPdGhlcgorICAgQ2hhcmFjdGVycyIpIGlzIHRoZSBh ZGRpdGlvbiBvZiB0aGUgRXVybyBTaWduIGF0IFUrMjBBQy4gQXMgbm90ZWQgaW4KKyAgIFs1NTJd U2VjdGlvbiA2LjAsIEtlcm1pdCdzICJFdXJvIGNvbXBsaWFuY2UiIGluY2x1ZGVzIGNvbnZlcnNp b24KKyAgIGJldHdlZW4gTGF0aW4gQWxwaGFiZXQgOSBhbmQgdmFyaW91cyBQQyBjb2RlIHBhZ2Vz LiBUZXh0IGNhbiBhbHNvIGJlCisgICBjb252ZXJ0ZWQgYmV0d2VlbiBVQ1MtMiBvciBVVEYtOCBh bmQgYW55IG90aGVyIEV1cm8tY29tcGxpYW50IGNoYXJhY3RlcgorICAgc2V0IChMYXRpbi05LCBD UDg1OCwgQ1AxMjUwLCBDUDEyNTIpIHdpdGhvdXQgbG9zcyBvZiB0aGUgRXVybyBTaWduLgorCisg ICAgNi42LjQuIFJlbGF0aW9uc2hpcCBvZiBVbmljb2RlIHdpdGggS2VybWl0J3MgT3RoZXIgQ2hh cmFjdGVyIFNldHMKKworICAgS2VybWl0J3MgY2hhcmFjdGVyIHNldHMgYXJlIGRpdmlkZWQgaW50 byB0d28gZ3JvdXBzOiBzaW5nbGUtYnl0ZSBzZXRzCisgICAoc3VjaCBhcyBSb21hbiwgSGVicmV3 LCBDeXJpbGxpYywgR3JlZWspIGFuZCBtdWx0aWJ5dGUgKHZhcmlvdXMKKyAgIEphcGFuZXNlIHNl dHMpLiBUaGUgdHdvIGdyb3VwcyBhcmUgZGlzdGluY3Qgc2luY2Ugb25lIG5vcm1hbGx5IHdvdWxk CisgICBub3QgZXhwZWN0IHRvIGNvbnZlcnQgS2FuamkgaWRlb2dyYW1zIHRvIFJvbWFuIChvciBv dGhlcikgbGV0dGVycywgb3IKKyAgIHZpY2UgdmVyc2EuCisKKyAgIFVuaWNvZGUgY2hhcmFjdGVy LXNldCBjb252ZXJzaW9uIHdvcmtzIHdpdGggYm90aCBncm91cHMsIGJ1dCBvYnZpb3VzbHkKKyAg IHRoZSByZXN1bHQgZGVwZW5kcyBvbiB0aGUgcmVwZXJ0b2lyZXMgb2YgdGhlIHNvdXJjZSBhbmQg ZGVzdGluYXRpb24KKyAgIGNoYXJhY3Rlci1zZXRzIGJvdGggaW5jbHVkaW5nIHRoZSBjaGFyYWN0 ZXJzIGluIHRoZSBmaWxlLiBGb3IgZXhhbXBsZSwKKyAgIHlvdSBjYW4gdHJhbnNsYXRlIGEgSHVu Z2FyaWFuIHRleHQgZmlsZSBiZXR3ZWVuIExhdGluLTIgYW5kIFVuaWNvZGUsCisgICBidXQgbm90 IGJldHdlZW4gKHNheSkgVW5pY29kZSBhbmQgTGF0aW4vR3JlZWsuIEJ5IHRoZSBzYW1lIHRva2Vu IHlvdQorICAgY2FuIGNvbnZlcnQgSmFwYW5lc2UgdGV4dCBmcm9tIFNoaWZ0LUpJUyBvciBFVUMg b3IgSklTLTcgdG8gVW5pY29kZSBhbmQKKyAgIGJhY2ssIGJ1dCB5b3UgY2FuJ3QgY29udmVydCB0 aGUgc2FtZSBmaWxlIHRvIChzYXkpIExhdGluLTEgaWYgaXQKKyAgIGNvbnRhaW5zIEphcGFuZXNl IGNoYXJhY3RlcnMuCisKKyAgICAgSklTLTcgaXMgZXF1aXZhbGVudCB0byBERUMgS2FuamkgYW5k IElTTy0yMDIyLUpQIGV4Y2VwdCB0aGF0IHRoZQorICAgICBsYXR0ZXIgdHdvIGRvIG5vdCBzdXBw b3J0IGhhbGZ3aWR0aCBLYXRha2FuYS4gS2VybWl0IHRyZWF0cyBhbGwKKyAgICAgdGhyZWUgb2Yg dGhlc2Ugc2V0cyB0aGUgc2FtZSB3YXksIGkuZS4gYXMgSklTLTcuCisKKyAgIEFzIG5vdGVkLCBL ZXJtaXQgcHJlc2VudGx5IGRvZXMgbm90IGhhbmRsZSBjb21iaW5pbmcgZGlhY3JpdGljcywgYW5k IHNvCisgICB3aWxsIG5vdCBjb3JyZWN0bHkgY29udmVydCBVQ1MgZmlsZXMgdGhhdCB1c2UgdGhl bSBpbnRvIGEgc2luZ2xlLWJ5dGUKKyAgIGNoYXJhY3RlciBzZXQuIEZvciBleGFtcGxlLCBpZiBh IFVDUyBmaWxlIGNvbnRhaW5zIExhdGluIENhcGl0YWwgTGV0dGVyCisgICBBIChVKzAwNDEpIGZv bGxvd2VkIGJ5IENvbWJpbmluZyBBY3V0ZSBBY2NlbnQgKFUrMDMwMSksIHRoZSByZXN1bHQgd2ls bAorICAgYmUgYSB0d28tY2hhcmFjdGVyIHNlcXVlbmNlLCBBIGZvbGxvd2VkIGJ5IGFub3RoZXIg Y2hhcmFjdGVyLiBUaGlzIGlzCisgICB3aGF0IGlzIG1lYW50IGJ5IENvbmZvcm1hbmNlIExldmVs IDEuIChUaGUgc2l0dWF0aW9uIGdyb3dzIHdvcnNlIHdpdGgKKyAgIG11bHRpcGxlIGRpYWNyaXRp Y3MsIHNpbmNlIHRoZXkgY2FuIG9jY3VyIGluIGFueSBvcmRlci4pCisKKyAgIEEgaGlnaGVyIGxl dmVsIG9mIGNvbmZvcm1hbmNlIGlzIHBvc3NpYmxlLCBpbiB3aGljaCAiY2Fub25pY2FsCisgICBl cXVpdmFsZW5jZXMiIGFyZSBoYW5kbGVkIHZpYSBhbGdvcml0aG1zIGFuZCBkYXRhYmFzZXMsIGF0 IHNvbWUKKyAgIChwZXJoYXBzIGNvbnNpZGVyYWJsZSkgY29zdCBpbiBwZXJmb3JtYW5jZSwgc2lu Y2UgYSBmYWlyIGFtb3VudCBvZgorICAgYWRkaXRpb25hbCBjb2RlIG11c3QgYmUgZXhlY3V0ZWQg Zm9yIGV2ZXJ5IGNoYXJhY3RlciBkdXJpbmcgZGF0YQorICAgdHJhbnNmZXIgKGRhdGFiYXNlIGxv b2t1cCwgc29ydGluZyBvZiBjb21iaW5pbmcgc2VxdWVuY2VzIGludG8KKyAgIGNhbm9uaWNhbCBv cmRlciwgZXRjKS4gVGhpcyBjYW4gYmUgYWRkZWQgaW4gZnV0dXJlIHJlbGVhc2VzIGlmIHRoZXJl IGlzCisgICBhIG5lZWQgKGJ1dCBpbiBtYW55IGNhc2VzLCBwcmUtIGFuZCBwb3N0cG9zdHByb2Nl c3NpbmcgbWlnaHQgYmUgYQorICAgYmV0dGVyIG9wdGlvbikuCisKKyAgIFdpdGhpbiB0aGVzZSBj b25zdHJhaW50cywgS2VybWl0IGNvbnZlcnRzIGJldHdlZW4gdGhlIFVDUyBhbmQgaXRzIG90aGVy CisgICBjaGFyYWN0ZXIgc2V0cy4gRm9yIGV4YW1wbGUsIGEgbWl4dHVyZSBvZiBSdXNzaWFuIGFu ZCBFbmdsaXNoIChhbmQvb3IKKyAgIER1dGNoLCBvciBMYXRpbikgdGV4dCBjYW4gYmV0IGNvbnZl cnRlZCBiZXR3ZWVuIHRoZSBVQ1MgYW5kIElTTworICAgTGF0aW4vQ3lyaWxsaWMgb3IgS09JLTgu IEJ1dCBzaW5jZSBLZXJtaXQgZG9lcyBub3QgcHJlc2VudGx5IHN1cHBvcnQKKyAgIEFyYWJpYyBj aGFyYWN0ZXItc2V0IGNvbnZlcnNpb24sIHRoZSBuZXcgYXZhaWxhYmlsaXR5IG9mIFVDUyBjb252 ZXJzaW9uCisgICBkb2VzIG5vdCBtZWFuIHRoYXQgS2VybWl0IGNhbiBjb252ZXJ0IGZyb20gQXJh YmljIFVDUyB0ZXh0IHRvIHNvbWUKKyAgIG90aGVyIGNoYXJhY3RlciBzZXQsIGJlY2F1c2UgS2Vy bWl0IGRvZXMgbm90IHN1cHBvcnQgYW55IG90aGVyCisgICBjaGFyYWN0ZXIgc2V0IHRoYXQgaW5j bHVkZXMgQXJhYmljLiBEaXR0byBmb3IgVGhhaSwgQXJtZW5pYW4sIEdlb3JnaWFuLAorICAgVGli ZXRhbiwgQ2hpbmVzZSwgS29yZWFuLCBldGMuIEhvd2V2ZXIsIEtlcm1pdCBDQU4gY29udmVydCBB cmFiaWMgKG9yCisgICBhbnkgb3RoZXIgc2NyaXB0KSBiZXR3ZWVuIFVDUy0yIGFuZCBVVEYtOC4K KworICAgQ29uc2lkZXJpbmcgQ3lyaWxsaWMgbW9yZSBjYXJlZnVsbHksIG5vdGUgdGhhdCB0aGUg VUNTIGFsc28gY29udGFpbnMKKyAgIG51bWVyb3VzIEN5cmlsbGljIGNoYXJhY3RlcnMgbm90IGZv dW5kIGluIGFueSBvZiB0aGUgQ3lyaWxsaWMgc2V0cyAoSVNPCisgICBMYXRpbi9DeXJpbGxpYywg S09JOCwgQ1A4NjYsIGV0YykgdGhhdCBLZXJtaXQgc3VwcG9ydHM7IGNoYXJhY3RlcnMKKyAgIG5l ZWRlZCBmb3IgQWJraGFzaWFuLCBZYWt1dCwgVGF0YXIsIEJhc2hraXIsIEFsdGFpYywgT2xkIENo dXJjaAorICAgU2xhdm9uaWMsIGV0YzsgVUNTIHRleHQgY29udGFpbmluZyBhbnkgb2YgdGhlc2Ug aGlzdG9yaWMgb3IgImV4dGVuZGVkIgorICAgQ3lyaWxsaWMgY2hhcmFjdGVycyBjYW4gbm90IGJl IGNvbnZlcnRlZCB0byBhbnkgb2YgS2VybWl0J3MgY3VycmVudAorICAgc2luZ2xlLWJ5dGUgQ3ly aWxsaWMgc2V0cyB3aXRob3V0IGxvc3MuIFRoZSBzaXR1YXRpb24gaXMgc2ltaWxhciBmb3IKKyAg IEdyZWVrLCBIZWJyZXcsIGV0YywgYW5kIGV2ZW4gd29yc2UgZm9yIEphcGFuZXNlIHNpbmNlIFVu aWNvZGUgY29udGFpbnMKKyAgIHRob3VzYW5kcyBvZiBLYW5qaXMgdGhhdCBhcmUgbGFja2luZyBm cm9tIHRoZSBKYXBhbmVzZSBjaGFyYWN0ZXIgc2V0cworICAgYmFzZWQgb24gSklTIFggMDIwOCwg c3VjaCBhcyBFVUMtSlAsIEpJUy03LCBhbmQgU2hpZnQtSklTLgorCisgICBJbiBnZW5lcmFsLCB3 aGVuIGNvbnZlcnRpbmcgZnJvbSBVQ1MgdG8gYSBzaW5nbGUtYnl0ZSBzZXQsIHRoZXJlIGlzCisg ICBhbHdheXMgdGhlIHBvc3NpYmlsaXR5IG9mIGRhdGEgbG9zcywganVzdCBhcyB0aGVyZSBpcyB3 aGVuIGNvbnZlcnRpbmcKKyAgIGZyb20gYW55IGxhcmdlciBzZXQgdG8gYSBzbWFsbGVyIG9uZS4g Rm9yIGV4YW1wbGUsIGlmIGEgVUNTIGZpbGUKKyAgIGNvbnRhaW5zIERldmFuYWdhcmkgY2hhcmFj dGVycywgdGhlc2UgY2hhcmFjdGVycyB3aWxsIGJlIGxvc3Qgd2hlbgorICAgY29udmVydGluZyB0 byAoc2F5KSBMYXRpbi0xLCBqdXN0IGFzIFJvbWFuIHZvd2VscyB3aXRoIGFjdXRlIGFjY2VudHMK KyAgIGFyZSBsb3N0IHdoZW4gY29udmVydGluZyBmcm9tIExhdGluLTEgKGFuIDgtYml0IHNldCkg dG8gR2VybWFuIElTTyA2NDYKKyAgIChhIDctYml0IHNldCkuCisKKyAgICA2LjYuNS4gS2VybWl0 J3MgVW5pY29kZSBGZWF0dXJlcworCisgICBDLUtlcm1pdCBjYW4gY29udmVydCBiZXR3ZWVuIFVD Uy0yIG9yIFVURi04IGFuZCBhbnkgb2YgaXRzIG90aGVyCisgICBjaGFyYWN0ZXIgc2V0cywgYW5k IGFsc28gYmV0d2VlbiBVQ1MtMiBhbmQgVVRGLTguIFdoZW4gY29udmVydGluZworICAgYmV0d2Vl biBVQ1MtMiBvciBVVEYtOCBhbmQgYSBub24tVW5pY29kZSBjaGFyYWN0ZXIgc2V0IChzdWNoIGFz CisgICBMYXRpbi0xKSwgdGhlIFVDUyBMaW5lIFNlcGFyYXRvciAoTFMsIFUrMjAyOCkgYW5kIFBh cmFncmFwaCBTZXBhcmF0b3IKKyAgIChQUywgVSsyMDI5KSBjaGFyYWN0ZXJzIGFyZSBjb252ZXJ0 ZWQgdG8gdGhlIGFwcHJvcHJpYXRlIGxpbmUKKyAgIHRlcm1pbmF0b3IgKENSLCBMRiwgb3IgQ1JM RikuIFdoZW4gY29udmVydGluZyBmcm9tIGEgbm9uLVVuaWNvZGUgc2V0IHRvCisgICBVQ1MtMiBv ciBVVEYtOCwgaG93ZXZlciwgbGluZSB0ZXJtaW5hdG9ycyBhcmUgbm90IGNvbnZlcnRlZCB0byBM UyBvcgorICAgUFMuIFRoaXMgaXMgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSByZWNvbW1lbmRhdGlv bnMgb2YgVW5pY29kZSBUZWNobmljYWwKKyAgIFJlcG9ydCAjMTMuCisKKyAgIFdoZW4gQy1LZXJt aXQgc3RhcnRzLCBpdCB0ZXN0cyB0aGUgbmF0aXZlIGJ5dGUgb3JkZXIgb2YgdGhlIGNvbXB1dGVy LgorICAgWW91IGNhbiBzZWUgdGhlIHJlc3VsdCBpbiB0aGUgU0hPVyBGRUFUVVJFUyBvciBTSE9X IEZJTEUgZGlzcGxheS4gSXQncworICAgYWxzbyBhdmFpbGFibGUgaW4gdGhlIHZhcmlhYmxlIFx2 KGJ5dGVvcmRlcik6IDAgbWVhbnMgQmlnIEVuZGlhbiwgMQorICAgbWVhbnMgTGl0dGxlIEVuZGlh bi4KKworICAgV2hlbiBVQ1MtMiBpcyBpbnZvbHZlZCBpbiBmaWxlIHRyYW5zZmVyIG9yIHRyYW5z bGF0aW9uLCB0aGUgZm9sbG93aW5nCisgICBjb21tYW5kcyB0ZWxsIEMtS2VybWl0IHdoYXQgdG8g ZG8gYWJvdXQgYnl0ZSBvcmRlcjoKKworICAgU0VUIEZJTEUgVUNTIEJZVEUtT1JERVIgeyBCSUct RU5ESUFOLCBMSVRUTEUtRU5ESUFOIH0KKyAgICAgICAgICBUaGlzIGlzIGZvciByZWFkaW5nIFVD Uy0yIGZpbGVzIHRoYXQgZG9uJ3QgaGF2ZSBhIEJPTSwgYW5kIGFsc28KKyAgICAgICAgICBmb3Ig d3JpdGluZyBVQ1MtMiBmaWxlcy4gSWYgdGhpcyBjb21tYW5kIGlzIG5vdCBnaXZlbiwgdGhlCisg ICAgICAgICAgbWFjaGluZSdzIG5hdGl2ZSBieXRlIG9yZGVyIGlzIHVzZWQgd2hlbiB3cml0aW5n IFVDUy0yIGZpbGVzLAorICAgICAgICAgIGFuZCBhbHNvIHdoZW4gcmVhZGluZyBVQ1MtMiBmaWxl cyB0aGF0IGRvbid0IGhhdmUgYSBCT00uCisKKyAgIFNFVCBGSUxFIFVDUyBCT00geyBPTiwgT0ZG IH0KKyAgICAgICAgICBUaGlzIHNldHRpbmcgaXMgdXNlZCB3aGVuIGNyZWF0aW5nIFVDUy0yIGZp bGVzLiBBIEJPTSBpcyBhZGRlZAorICAgICAgICAgIGF0IHRoZSBiZWdpbm5pbmcgYnkgZGVmYXVs dC4gVXNlIE9GRiB0byBub3QgYWRkIHRoZSBCT00uIFRoaXMKKyAgICAgICAgICBjb21tYW5kIGhh cyBubyBhZmZlY3Qgd2hlbiB3cml0aW5nIGZpbGVzLgorCisgICBDT1BZIC9TV0FQLUJZVEVTIHNv dXJjZWZpbGUgZGVzdGluYXRpb25maWxlCisgICAgICAgICAgVXNlIHRoaXMgZm9yIGZpeGluZyBh IFVDUy0yIGZpbGUgd2hvc2UgYnl0ZXMgYXJlIGluIHRoZSB3cm9uZworICAgICAgICAgIG9yZGVy LgorCisgICBVc2UgU0hPVyBGSUxFIHRvIGRpc3BsYXkgdGhlIEZJTEUgVUNTIHNldHRpbmdzLgor CisgICBQbGVhc2Ugbm90ZSwgYWdhaW4sIHRoYXQgQy1LZXJtaXQncyB1c2VyIGludGVyZmFjZSwg aW5jbHVkaW5nIGl0cworICAgc2NyaXB0IGxhbmd1YWdlLCBpcyBub3QgaW50ZXJuYXRpb25hbGl6 ZWQgaW4gYW55IHdheS4gU3RyaW5nCisgICBjb21wYXJpc29ucywgY2FzZSBjb252ZXJzaW9uLCBh bmQgc28gb24sIHdvcmsgb25seSBmb3IgVVMgQVNDSUkKKyAgIChjb21wYXJpc29ucyBmb3IgZXF1 YWxpdHkgd29yayB3aXRoIG90aGVyIHNldHMsIGJ1dCBub3QKKyAgIGxleGljYWxseS1ncmVhdGVy LW9yLWxlc3MtdGhhbiBvciBjYXNlbGVzcyBjb21wYXJpc29uczsgZXZlbgorICAgY29tcGFyaXNv bnMgZm9yIGVxdWFsaXR5IGNhbiBmYWlsIHdoZW4gY29tcG9zZWQgY2hhcmFjdGVycyBvciBieXRl CisgICBvcmRlciBhcmUgaW52b2x2ZWQpLiBTdHJpbmcgZnVuY3Rpb25zIHN1Y2ggYXMgXGZpbmRl eCgpIGFuZAorICAgXGZzdWJzdHJpbmcoKSB0aGF0IHJlZmVyZW5jZSBieXRlIHBvc2l0aW9ucyBk byBqdXN0IHRoYXQ7IHRoZXkgd29uJ3QKKyAgIHdvcmsgd2l0aCBVVEYtOCB0ZXh0IHRoYXQgY29u dGFpbnMgYW55IG5vbi1BU0NJSSBjaGFyYWN0ZXJzLCBhbmQgdGhleQorICAgd2lsbCBub3Qgd29y ayB3aXRoIFVDUy0yIHRleHQgYXQgYWxsIHNpbmNlIHRoZXkgdXNlIEMgc3RyaW5ncworICAgaW50 ZXJuYWxseSwgd2hpY2ggYXJlIE5VTC10ZXJtaW5hdGVkLiBUaGVzZSBhcmUganVzdCBhIGZldyBl eGFtcGxlcyB0bworICAgaWxsdXN0cmF0ZSB0aGF0IG5laXRoZXIgVW5pY29kZSBub3IgYW55IG90 aGVyIGNoYXJhY3Rlci1zZXQgYmV5b25kCisgICBBU0NJSSBpcyBzdXBwb3J0ZWQgYXQgdGhlIHVz ZXItaW50ZXJmYWNlLCBjb21tYW5kLCBvciBzY3JpcHRpbmcgbGV2ZWwKKyAgIGluIHRoaXMgdmVy c2lvbiBvZiBDLUtlcm1pdC4KKworICAgIDYuNi41LjEuIEZpbGUgVHJhbnNmZXIKKworICAgS2Vy bWl0IHN1cHBvcnRzIGJvdGggVUNTLTIgYW5kIFVURi04IGFzIGZpbGUgYW5kIHRyYW5zZmVyIGNo YXJhY3RlcgorICAgc2V0cyBpbiB0ZXh0LW1vZGUgZmlsZSB0cmFuc2Zlci4KKworICAgVG8gc2Vs ZWN0IFVDUy0yIG9yIFVURi04IGFzIGEgZmlsZSBjaGFyYWN0ZXItc2V0LCB1c2U6CisKKyAgU0VU IEZJTEUgQ0hBUkFDVEVSLVNFVCB7IFVDUzIsIFVURjggfQorCisgICBJZiB5b3Ugd2FudCB0byBz ZW5kIGEgVUNTLTIgdGV4dCBmaWxlIChvciBzYXZlIGFuIGluY29taW5nIGZpbGUgaW4KKyAgIFVD Uy0yIGZvcm1hdCksIHRlbGwgS2VybWl0IHRvOgorCisgIFNFVCBGSUxFIENIQVJBQ1RFUi1TRVQg VUNTMgorCisgICBhbmQgaWYgeW91IHdhbnQgdG8gc2VuZCBhIFVURi04IHRleHQgZmlsZSAob3Ig c3RvcmUgYW4gaW5jb21pbmcgZmlsZSBpbgorICAgVVRGLTggZm9ybWF0KSwgdGVsbCBLZXJtaXQg dG86CisKKyAgU0VUIEZJTEUgQ0hBUkFDVEVSLVNFVCBVVEY4CisKKyAgIFdoZW4gc2VuZGluZyBV Q1MtMiBmaWxlcywgS2VybWl0IGRldGVybWluZXMgdGhlIGJ5dGUgb3JkZXIgZnJvbSB0aGUKKyAg IEJPTSwgaWYgdGhlcmUgaXMgb25lIChhbmQgaWYgdGhlcmUgaXMgYSBCT00sIGl0IGlzIHN0cmlw cGVkLCBpLmUuIG5vdAorICAgc2VudCkuIElmIHRoZXJlIGlzIG5vIEJPTSwgdGhlIGJ5dGUgb3Jk ZXIgaXMgdGhlIG9uZSBzcGVjaWZpZWQgaW4gdGhlCisgICBtb3N0IHJlY2VudCBTRVQgRklMRSBV Q1MgQllURS1PUkRFUiBjb21tYW5kLCBpZiBhbnksIG90aGVyd2lzZSB0aGUKKyAgIGNvbXB1dGVy J3MgbmF0aXZlIGJ5dGUgb3JkZXIgaXMgYXNzdW1lZC4gV2hlbiBzdG9yaW5nIGluY29taW5nIGZp bGVzIGFzCisgICBVQ1MtMiwgdGhlIGJ5dGUgb3JkZXIgaXMgYWNjb3JkaW5nIFNFVCBGSUxFIFVD UyBCWVRFLU9SREVSLCBpZiBnaXZlbiwKKyAgIG90aGVyd2lzZSB0aGUgbmF0aXZlIG9uZTsgYSBC T00gaXMgd3JpdHRlbiBhY2NvcmRpbmcgdG8gU0VUIEZJTEUgVUNTCisgICBCT00uCisKKyAgIEEg dHJhbnNmZXIgY2hhcmFjdGVyLXNldCBzaG91bGQgYmUgY2hvc2VuIHRoYXQgaW5jbHVkZXMgYWxs IG9mIHRoZQorICAgY2hhcmFjdGVycyBpbiB0aGUgc291cmNlIGZpbGUuIFNvLCBmb3IgZXhhbXBs ZSwgaWYgeW91IGFyZSBzZW5kaW5nIGEKKyAgIFVDUy0yIGZpbGUgY29udGFpbmluZyBvbmx5IEdl cm1hbi1sYW5ndWFnZSB0ZXh0LCB5b3VyIHRyYW5zZmVyCisgICBjaGFyYWN0ZXItc2V0IGNhbiBi ZSBMYXRpbi0xLCBMYXRpbi0yLCBMYXRpbi05LCBVQ1MtMiwgb3IgVVRGLTguIEJ1dCBpZgorICAg eW91IGFyZSBzZW5kaW5nIGEgZmlsZSB0aGF0IGNvbnRhaW5zIGEgY29tYmluYXRpb24gb2YgSGVi cmV3IGFuZCBHcmVlaywKKyAgIHlvdXIgdHJhbnNmZXIgY2hhcmFjdGVyLXNldCBtdXN0IGJlIFVD Uy0yIG9yIFVURi04IGlmIHlvdSBkb24ndCB3YW50IHRvCisgICBsb3NlIG9uZSBzY3JpcHQgb3Ig dGhlIG90aGVyLiBGdXJ0aGVybW9yZSwgdGhlIHRyYW5zZmVyIGNoYXJhY3Rlci1zZXQKKyAgIG11 c3QgYmUgb25lIHRoYXQgaXMgc3VwcG9ydGVkIGJ5IHRoZSByZWNlaXZpbmcgS2VybWl0IHByb2dy YW0uIFNpbmNlCisgICBVQ1Mgc3VwcG9ydCBpcyBuZXcsIGl0IGlzIHBvc3NpYmxlIHRoYXQgdGhl IG90aGVyIEtlcm1pdCBwcm9ncmFtIChpZiBpdAorICAgc3VwcG9ydHMgY2hhcmFjdGVyIHNldHMg YXQgYWxsKSBkb2VzIG5vdCBzdXBwb3J0IGl0LCBidXQgZG9lcyBzdXBwb3J0CisgICBzaW5nbGUt Ynl0ZSBzZXRzIHN1Y2ggYXMgTGF0aW4tMSwgTGF0aW4vQ3lyaWxsaWMsIGV0Yy4KKworICAgVG8g c2VsZWN0IFVDUy0yIG9yIFVURi04IGFzIGEgdHJhbnNmZXIgY2hhcmFjdGVyLXNldCwgdXNlOgor CisgIFNFVCBUUkFOU0ZFUiBDSEFSQUNURVItU0VUIHsgVUNTMiwgVVRGOCB9CisKKyAgIEl0IGlz IHVwIHRvIHRoZSByZWNlaXZpbmcgS2VybWl0IHByb2dyYW0gdG8gY29udmVydCB0aGUgdHJhbnNm ZXIgZm9ybWF0CisgICB0byBpdHMgb3duIGxvY2FsIGZvcm1hdCwgaWYgbmVjZXNzYXJ5LiBJZiBp dCBkb2VzIG5vdCB1bmRlcnN0YW5kIHRoZQorICAgVVRGLTggb3IgVUNTLTIgdHJhbnNmZXIgY2hh cmFjdGVyLXNldCwgYW5kIHlvdXIgZmlsZSBjYW4gbm90IGJlCisgICBhZGVxdWF0ZWx5IHJlcHJl c2VudGVkIGJ5IGFueSBzaW5nbGUtYnl0ZSB0cmFuc2ZlciBjaGFyYWN0ZXItc2V0IChzdWNoCisg ICBhcyBMYXRpbi0xIG9yIExhdGluL0N5cmlsbGljKSB0aGVuLCBpZiBVVEYtOCBmb3JtYXQgaXMg YWNjZXB0YWJsZSBvbgorICAgdGhlIHJlY2VpdmluZyBjb21wdXRlciwgdXNlIFVURi04IGFzIHRo ZSB0cmFuc2ZlciBjaGFyYWN0ZXItc2V0LCB3aXRoCisgICB0aGUgcmVjZWl2ZXIgdG9sZCB0byAi c2V0IHVua25vd24tY2hhciBrZWVwIiwgb3Igd2l0aCB0aGUgc2VuZGVyIHRvbGQKKyAgIHRvICJz ZXQgYXR0cmlidXRlIGNoYXIgb2ZmIi4gSWYgeW91IHdhbnQgdGhlIGZpbGUgdG8gYmUgc3RvcmVk IGluIFVDUy0yCisgICBmb3JtYXQgYXQgdGhlIHJlY2VpdmVyLCBzZW5kIGl0IGl0IGJpbmFyeSBt b2RlIGlmIHRoZSBzb3VyY2UgZmlsZSBpcworICAgYWxzbyBVQ1MtMiwgb3IgZWxzZSB1c2UgdGhl IFRSQU5TTEFURSBjb21tYW5kIChuZXh0IHNlY3Rpb24pIHRvIGNvbnZlcnQKKyAgIGl0IHRvIFVD Uy0yIGZpcnN0LCB0aGVuIHNlbmQgaXQgaW4gYmluYXJ5IG1vZGUuIFlvdSBzaG91bGQgbm90IHVz ZQorICAgVUNTLTIgYXMgYSB0cmFuc2ZlciBjaGFyYWN0ZXItc2V0IGluIHRleHQtbW9kZSB0cmFu c2ZlcnMgdG8gS2VybWl0CisgICBwcm9ncmFtcyB0aGF0IGRvbid0IHN1cHBvcnQgaXQsIGJlY2F1 c2UgdGhleSBhcmUgbGlrZWx5IHRvIGNvcnJ1cHQgdGhlCisgICByZXN1bHQgdGhlIHNhbWUgd2F5 IEZUUCB3b3VsZCAoc2VlIHRoZSBmaW5hbCBwYXJhZ3JhcGggb2YgdGhpcworICAgc2VjdGlvbiku CisKKyAgIFdoZW4gVUNTLTIgaXMgdGhlIHRyYW5zZmVyIGNoYXJhY3RlciBzZXQsIGl0IGFsd2F5 cyBnb2VzIGludG8gS2VybWl0CisgICBwYWNrZXRzIGluIEJpZyBFbmRpYW4gZm9ybWF0LCB3aXRo IG5vIEJPTS4gQXMgYWx3YXlzLCB0aGUgdHJhbnNmZXIKKyAgIGNoYXJhY3Rlci1zZXQgaXMgYW5u b3VuY2VkIGJ5IHRoZSBzZW5kZXIgdG8gdGhlIHJlY2VpdmVyLiBUaGUKKyAgIGFubm91bmNlbWVu dCBmb3IgVUNTLTIgaXMgIkkxNjIiIChJU08gUmVnaXN0cmF0aW9uIDE2MiA9IFVDUy0yIExldmVs IDEpCisgICBhbmQgYnkgZGVmaW5pdGlvbiBpdCBpcyBCaWcgRW5kaWFuICh0aGUgc3RhbmRhcmRz IHNheSB0aGF0IHdoZW4gVUNTLTIKKyAgIGlzIHNlcmlhbGl6ZWQgaW50byBieXRlcywgdGhlIG9y ZGVyIG11c3QgYmUgQmlnIEVuZGlhbikuIFRoZQorICAgYW5ub3VuY2VtZW50IGZvciBVVEYtOCBp cyAiSTE5MCIgKFVURi04IExldmVsIDEpLgorCisgICBXaGVuIHJlY2VpdmluZyBhIGZpbGUgd2hv c2UgdHJhbnNmZXIgY2hhcmFjdGVyLXNldCBpcyBVQ1MtMiBvciBVVEYtOCwKKyAgIHlvdSBtdXN0 IGNob29zZSB0aGUgYXBwcm9wcmlhdGUgZmlsZSBjaGFyYWN0ZXIgc2V0IGZvciB0aGUgcmVzdWx0 LgorICAgVGhlcmUgaXMgbm8gd2F5IEtlcm1pdCBjYW4gZG8gdGhpcyBmb3IgeW91IGF1dG9tYXRp Y2FsbHksIHNpbmNlIFVDUworICAgZGF0YSBjYW4gYmUgaW4gYW55IHNjcmlwdCBhdCBhbGwsIG9y IGFueSBjb21iaW5hdGlvbi4KKworICAgSW4gZ2VuZXJhbCwgVVRGLTggb3IgVUNTLTIgc2hvdWxk IGJlIGNob3NlbiBhcyBhIHRyYW5zZmVyIGNoYXJhY3Rlci1zZXQKKyAgIGlmIHRoZSBzb3VyY2Ug ZmlsZSBpcyBhbHNvIGVuY29kZWQgaW4gc29tZSBmb3JtIG9mIFVDUyBhbmQgaXQgY29udGFpbnMK KyAgIG1vcmUgdGhhbiBvbmUgc2NyaXB0LiBCdXQgdGhlcmUgYXJlIG90aGVyIHNpdHVhdGlvbnMg d2hlcmUgd2hlcmUgVVRGLTgKKyAgIG9yIFVDUy0yIG9mZmVyIGFkdmFudGFnZXMuIEZvciBleGFt cGxlLCBzdXBwb3NlIHRoZSBzb3VyY2UgZmlsZSBpcyBvbiBhCisgICBOZVhUc3RhdGlvbiBhbmQg dGhlIGRlc3RpbmF0aW9uIGZpbGUgaXMgb24gVk1TLiBCb3RoIHRoZSBOZVhUIGFuZCB0aGUKKyAg IERFQyBNdWx0aW5hdGlvbmFsIGNoYXJhY3RlciBzZXRzIGluY2x1ZGUgdGhlIEZyZW5jaCBPRSBk aWdyYXBoLCBidXQKKyAgIExhdGluLTEgZG9lcyBub3QuIFRoZXJlZm9yZSBGcmVuY2ggd29yZHMg Y29udGFpbmluZyB0aGlzIGNoYXJhY3RlcgorICAgbWlnaHQgbm90IGFycml2ZSBpbnRhY3Qgd2hl biBMYXRpbi0xIGlzIHRoZSB0cmFuc2ZlciBjaGFyYWN0ZXItc2V0LCBidXQKKyAgIHdpbGwgd2l0 aCBVVEYtOCBvciBVQ1MtMiwgc2luY2UgdGhlIFVDUyBpbmNsdWRlcyB0aGUgT0UgZGlncmFwaCAo YnV0IHNvCisgICBkb2VzIExhdGluLTkpLgorCisgICBVQ1MtMiBzaG91bGQgYmUgY2hvc2VuIGFz IGEgdHJhbnNmZXIgY2hhcmFjdGVyLXNldCBvbmx5IGZvciBKYXBhbmVzZQorICAgdGV4dCBmaWxl cyB0aGF0IGNvbnRhaW4gYSBsYXJnZSBwcmVwb25kZXJhbmNlIG9mIEthbmppLCBzaW5jZSBpbiB0 aGlzCisgICBjYXNlIChhbmQgb25seSB0aGlzIGNhc2UpIFVDUy0yICh0d28gYnl0ZXMgcGVyIEth bmppKSBpcyBtb3JlIGVmZmljaWVudAorICAgdGhhbiBVVEYtOCAodGhyZWUgYnl0ZXMgcGVyIEth bmppKS4gVGhlIHNhbWUgd2lsbCBiZSB0cnVlIGZvciBDaGluZXNlCisgICBhbmQgS29yZWFuIHdo ZW4gdGhleSBhcmUgc3VwcG9ydGVkIGJ5IEtlcm1pdC4gVUNTLTIgc2hvdWxkIG5ldmVyIGJlCisg ICB1c2VkIGFzIGEgdHJhbnNmZXIgY2hhcmFjdGVyLXNldCB3aXRoIGEgdHJhbnNmZXIgcGFydG5l ciB0aGF0IGRvZXMgbm90CisgICBzdXBwb3J0IFVDUy0yIHNpbmNlIHRoaXMgY2FuIGNhdXNlIGZp bGUgY29ycnVwdGlvbiAoc2VlIGxhc3QgcGFyYWdyYXBoCisgICBpbiB0aGlzIHNlY3Rpb24pLgor CisgICBOb3RlIHRoYXQgS2VybWl0J3MgcmVwZWF0LWNvdW50IGNvbXByZXNzaW9uIGlzIDEwMCUg aW5lZmZlY3RpdmUgZm9yCisgICBVQ1MtMiwgYW5kIGlzIGFsc28gaW5lZmZlY3RpdmUgZm9yIG11 bHRpYnl0ZSBjaGFyYWN0ZXJzIGluIFVURi04IGFuZAorICAgRVVDLUpQOyB0aGlzIGlzIGJlY2F1 c2UgcmVwZWF0LWNvbXByZXNzaW9uIGlzIGEgdHJhbnNwb3J0LWxldmVsCisgICBtZWNoYW5pc20g dGhhdCBvcGVyYXRlcyBvbiBhIHBlci1ieXRlIGJhc2lzOyBpdCBoYXMgbm8ga25vd2xlZGdlIG9m IHRoZQorICAgZGlzdGluY3Rpb24gYmV0d2VlbiBhIGJ5dGUgYW5kIGEgY2hhcmFjdGVyLgorCisg ICBXaGVuIEMtS2VybWl0IHN0YXJ0cywgaXQgc2V0cyB1cCBhc3NvY2lhdGlvbnMgKFs1NTNdU2Vj dGlvbiA2LjUpIGZvcgorICAgaW5jb21pbmcgZmlsZXMgd2hvc2UgdHJhbnNmZXIgY2hhcmFjdGVy IHNldHMgYXJlIFVDUy0yIG9yIFVURi04CisgICBhcHByb3ByaWF0ZWx5IGZvciB0aGUgcGxhdGZv cm0gc28gdGhhdCB0aGUgZmlsZSBjaGFyYWN0ZXItc2V0IGZvciB0aGUKKyAgIGluY29taW5nIGZp bGUgaXMgVUNTLTIgaW4gV2luZG93cyBhbmQgVVRGLTggZWxzZXdoZXJlLiBPdGhlcndpc2UsCisg ICBDLUtlcm1pdCBkb2VzIG5vdCBtYWtlIGFueSBkZWZhdWx0IGFzc29jaWF0aW9ucyBmb3IgVUNT LTIgb3IgVVRGLTgsIGJ1dAorICAgb2YgY291cnNlIHlvdSBtYXkgYWRkIG9yIGNoYW5nZSBhc3Nv Y2lhdGlvbnMgdG8gc3VpdCB5b3VyIG5lZWRzIGFuZAorICAgcHJlZmVyZW5jZXMgYnkgaW5jbHVk aW5nIHRoZSBhcHByb3ByaWF0ZSBBU1NPQ0lBVEUgY29tbWFuZHMgaW4geW91cgorICAgS2VybWl0 IHN0YXJ0dXAgZmlsZS4gRm9yIGV4YW1wbGUsIGlmIHlvdSBhcmUgYSBQQyB1c2VyIGFuZCBkZWFs IG9ubHkKKyAgIHdpdGggdGV4dCB3cml0dGVuIGluIEdyZWVrIGFuZCBFbmdsaXNoLCB5b3UgY2Fu OgorCisgIEFTU09DSUFURSBUUkFOU0ZFUi1DSEFSQUNURVItU0VUIFVURjggQ1A4NjkKKyAgQVNT T0NJQVRFIFRSQU5TRkVSLUNIQVJBQ1RFUi1TRVQgVUNTMiBDUDg2OQorICBBU1NPQ0lBVEUgRklM RS1DSEFSQUNURVItU0VUIENQODY5IFVURjgKKworICAgTm90ZSB0aGF0IHdoZW4gZmlsZSB0cmFu c2ZlciBpbnZvbHZlcyBjb252ZXJzaW9uIGJldHdlZW4gYSBzaW5nbGUtYnl0ZQorICAgY2hhcmFj dGVyIHNldCBhbmQgVUNTLTIgb3IgVVRGLTgsIHRoZSBmaWxlLXRyYW5zZmVyIHRoZXJtb21ldGVy IGFuZAorICAgZXN0aW1hdGVkIHRpbWUgbGVmdCBtaWdodCBiZSBpbmFjY3VyYXRlLCBzaW5jZSB0 aGV5IGFyZSBiYXNlZCBvbiB0aGUKKyAgIHNvdXJjZSBmaWxlIHNpemUsIG5vdCB0aGUgdHJhbnNm ZXIgZW5jb2RpbmcuIFRoaXMgaXMgcHVyZWx5IGEgY29zbWV0aWMKKyAgIGlzc3VlIGFuZCBkb2Vz IG5vdCBlZmZlY3QgdGhlIGZpbmFsIHJlc3VsdC4gKEFuZCBpcyBub3QsIHN0cmljdGx5CisgICBz cGVha2luZywgYSBidWc7IEtlcm1pdCBwcm90b2NvbCBwcmVzZW50bHkgaW5jbHVkZXMgbm8gbWV0 aG9kIGZvciB0aGUKKyAgIHNlbmRlciB0byBmdXJuaXNoIGFuICJlc3RpbWF0ZWQgdHJhbnNmZXIg c2l6ZSIgdG8gdGhlIHJlY2VpdmVyLCBhbmQgaW4KKyAgIGFueSBjYXNlIGFueSBzdWNoIGd1ZXNz IGNvdWxkIGJlIGFzIGZhciBvZmYgYXMgdGhlIGZpbGUgc2l6ZSwgZ2l2ZW4gdGhlCisgICBtYW55 IG90aGVyIGZhY3RvcnMgdGhhdCBjb21lIGludG8gcGxheSwgc3VjaCBhcyBjb21wcmVzc2lvbiBh bmQKKyAgIHByZWZpeGluZykuCisKKyAgIEEgY2F1dGlvbiBhYm91dCBGVFAgYW5kIFVDUy0yLiBB cyBub3RlZCBwcmV2aW91c2x5LCBpZiB5b3UgdHJhbnNmZXIgYQorICAgVUNTLTIgZmlsZSB3aXRo IEZUUCBpbiBiaW5hcnkgbW9kZSBiZXR3ZWVuIHR3byBjb21wdXRlcnMgd2l0aCBvcHBvc2l0ZQor ICAgRW5kaWFubmVzcywgdGhlIHJlc3VsdCB3aWxsIGhhdmUgaXRzIGJ5dGVzIGluIHRoZSB3cm9u ZyBvcmRlci4gSG93ZXZlciwKKyAgIGlmIHlvdSB1c2UgRlRQIHRvIHRyYW5zZmVyIGEgVUNTLTIg ZmlsZSBpbiAiYXNjaWkiICh0ZXh0KSBtb2RlIHRvIEFOWQorICAgY29tcHV0ZXIsIGV2ZW4gaWYg aXQgaXMgaWRlbnRpY2FsIHRvIHlvdXJzLCB0aGUgcmVzdWx0IHdpbGwgYmUKKyAgIGNvcnJ1cHRl ZCBiZWNhdXNlIEZUUCdzIGxpbmUtdGVybWluYXRvciBjb252ZXJzaW9ucyBkbyBub3QgYWNjb3Vu dCBmb3IKKyAgIFVDUy0yLiBUaGUgc2FtZSBob2xkcyB3aGVuIHNlbmRpbmcgZnJvbSBhIFVDUy1h d2FyZSBLZXJtaXQgcHJvZ3JhbSB0bworICAgYW4gb2xkZXIgS2VybWl0IHByb2dyYW0gaW4gdGV4 dCBtb2RlIHdpdGggYSB0cmFuc2ZlciBjaGFyYWN0ZXItc2V0IG9mCisgICBVQ1MtMi4gU28gdXNl IFVDUy0yIGFzIGEgdHJhbnNmZXIgY2hhcmFjdGVyLXNldCBPTkxZIHdpdGggYSBVQ1MtMi1hd2Fy ZQorICAgS2VybWl0IHBhcnRuZXIuCisKKyAgICA2LjYuNS4yLiBUaGUgVFJBTlNMQVRFIENvbW1h bmQKKworICAgSW4gS2VybWl0IHZlcnNpb25zIHRoYXQgaGF2ZSBVbmljb2RlIHN1cHBvcnQgaW5j bHVkZWQsIFRSQU5TTEFURSBub3cKKyAgIGFsd2F5cyBnb2VzIHRocm91Z2ggVW5pY29kZTsgdGhh dCBpcywgdGhlIHNvdXJjZSBzZXQgaXMgY29udmVydGVkIHRvCisgICBVQ1MtMiBhbmQgdGhlbmNl IHRvIHRoZSB0YXJnZXQgc2V0LiBUaGlzIGlzIGEgbWFqb3IgaW1wcm92ZW1lbnQsIHNpbmNlCisg ICBpbiBwcmlvciByZWxlYXNlcywgQy1LZXJtaXQgaGFkIHRvIHBpY2sgdGhlICJtb3N0IGFwcHJv cHJpYXRlIiB0cmFuc2ZlcgorICAgY2hhcmFjdGVyLXNldCBhcyB0aGUgaW50ZXJtZWRpYXRlIHNl dCwgYW5kIHRoaXMgd291bGQgcmVzdWx0IGluIHRoZQorICAgbG9zcyBvZiBhbnkgY2hhcmFjdGVy cyB0aGF0IHRoZSBzb3VyY2UgYW5kIHRhcmdldCBzZXRzIGhhZCBpbiBjb21tb24KKyAgIGJ1dCB3 ZXJlIGxhY2tpbmcgZnJvbSB0aGUgaW50ZXJtZWRpYXRlIHNldCAoZm9yIGV4YW1wbGUgdGhlIE9F IGRpZ3JhcGgKKyAgIHdoZW4gdHJhbnNsYXRpbmcgZnJvbSBOZVhUIHRvIERFQyBNQ1MgdGhyb3Vn aCBMYXRpbi0xKS4gVGhpcyBuZXZlcgorICAgaGFwcGVucyB3aGVuIFVuaWNvZGUgaXMgdGhlIGlu dGVybWVkaWF0ZSBzZXQgYmVjYXVzZSBVbmljb2RlIGlzIGEKKyAgIHN1cGVyc2V0IG9mIGFsbCBv dGhlciBjaGFyYWN0ZXIgc2V0cyBzdXBwb3J0ZWQgYnkgS2VybWl0LiBBIG1vcmUKKyAgIGRyYW1h dGljIGV4YW1wbGUgd291bGQgYmUgdHJhbnNsYXRpb24gYmV0d2VlbiBDeXJpbGxpYyBQQyBjb2Rl IHBhZ2UgODY2CisgICBhbmQgS09JOC1SIChbNTU0XVNlY3Rpb24gNi40KTsgZm9ybWVybHkgYWxs IHRoZSBsaW5lLSBhbmQgYm94LWRyYXdpbmcKKyAgIGNoYXJhY3RlcnMgd291bGQgYmUgbG9zdCAo c2luY2UgSVNPIDg4NTktNSBkb2VzIG5vdCBoYXZlIGFueSk7IG5vdyB0aGUKKyAgIG9uZXMgdGhh dCB0aGVzZSB0d28gc2V0cyBoYXZlIGluIGNvbW1vbiBhcmUgcHJlc2VydmVkLgorCisgICBVQ1Mt MiBhbmQgVVRGLTggYXJlIG5vdyBib3RoIHN1cHBvcnRlZCBhcyBzb3VyY2UtZmlsZSBhbmQKKyAg IGRlc3RpbmF0aW9uLWZpbGUgY2hhcmFjdGVyIHNldHMgYnkgQy1LZXJtaXQncyBUUkFOU0xBVEUg Y29tbWFuZCwgZm9yCisgICBleGFtcGxlOgorCisgIHRyYW5zbGF0ZSBvb2ZhLnR4dCB1Y3MyIGxh dGluMSBvb2ZhLWwxLnR4dAorCisgICB0cmFuc2xhdGVzIG9vZmEudHh0IGZyb20gVUNTLTIgdG8g TGF0aW4tMSwgc3RvcmluZyB0aGUgcmVzdWx0IGFzCisgICBvb2ZhLWwxLnR4dC4gU2ltaWxhcmx5 OgorCisgIHRyYW5zbGF0ZSBvb2ZhLnR4dCB1dGY4IGxhdGluMSBvb2ZhLWwxLnR4dAorICB0cmFu c2xhdGUgb29mYS50eHQgbGF0aW4xIHVjczIgb29mYS11Y3MyLnR4dAorICB0cmFuc2xhdGUgb29m YS50eHQgbGF0aW4xIHV0Zjggb29mYS11dGY4LnR4dAorICB0cmFuc2xhdGUgb29mYS50eHQgdWNz MiB1dGY4IG9vZmEtdXRmOC50eHQKKyAgdHJhbnNsYXRlIG9vZmEudHh0IHV0ZjggdWNzMiBvb2Zh LXVjczIudHh0CisKKyAgIFRyZWF0bWVudCBvZiB0aGUgVUNTLTIgQk9NIGlzIGV4YWN0bHkgdGhl IHNhbWUgYXMgZm9yIGZpbGUgdHJhbnNmZXIuCisgICBOb3RlIHRoYXQgaWYgYSBVQ1MtMiBzb3Vy Y2UgZmlsZSBpcyBpbiB0aGUgIndyb25nIiBieXRlIG9yZGVyIGFuZCBsYWNrcworICAgYSBCT00s IGFuZCB5b3UgZG9uJ3QgdGVsbCBLZXJtaXQgYWJvdXQgaXQgd2l0aCBTRVQgRklMRSBVQ1MgQllU RS1PUkRFUiwKKyAgIHRoZSByZXN1bHQgb2YgdGhlIHRyYW5zbGF0aW9uIGlzIHRvdGFsIGdpYmJl cmlzaC4gUmVjYWxsIHRoYXQgeW91IGNhbgorICAgdXNlIENPUFkgL1NXQVAtQllURVMgdG8gc3dp dGNoIHRoZSBieXRlIG9yZGVyIG9mIGFuIGVycmFudCBVQ1MtMiBmaWxlCisgICAob3IgYW55IG90 aGVyIGZpbGUgZm9yIHRoYXQgbWF0dGVyLCBpZiB5b3UgY2FuIHRoaW5rIG9mIGEgcmVhc29uIHRv KS4KKyAgIEFsc28gbm90ZSB0aGF0OgorCisgIHRyYW5zbGF0ZSBvb2ZhLnR4dCB1Y3MyIHVjczIg bmV3LnR4dAorCisgICBQcm9kdWNlcyBhIHJlc3VsdCBpbiB0aGUgbmF0aXZlIChvciBTRVQgRklM RSBVQ1MpIGJ5dGUtb3JkZXIgYXMgbG9uZyBhcworICAgb29mYS50eHQgaGFzIGEgQk9NLgorCisg ICBBcyBhIHNpZGUgYmVuZWZpdCBvZiB0aGUgVW5pY29kZSB3b3JrLCB0aGUgVFJBTlNMQVRFIGNv bW1hbmQgbm93IHdvcmtzCisgICBmb3IgdGhlIGZpcnN0IHRpbWUgYWxzbyBmb3IgYWxsIEphcGFu ZXNlIGNoYXJhY3RlciBzZXRzIHRoYXQgS2VybWl0CisgICBzdXBwb3J0cy4gSW4gb3RoZXIgd29y ZHMsIGlmIHlvdSBoYXZlIGEgSmFwYW5lc2UgdGV4dCBmaWxlIGluIGFueSBvZgorICAgdGhlIGZv bGxvd2luZyBlbmNvZGluZ3M6CisKKyAgRVVDLUpQCisgIFNoaWZ0LUpJUworICBKSVMtNworICBV Q1MtMgorICBVVEYtOAorCisgICBZb3UgY2FuIHVzZSB0aGUgVFJBTlNMQVRFIGNvbW1hbmQgdG8g Y29udmVydCB0byBhbnkgb3RoZXIgZW5jb2RpbmcgZnJvbQorICAgdGhlIHNhbWUgbGlzdC4KKwor ICAgIDYuNi41LjMuIFRlcm1pbmFsIENvbm5lY3Rpb24KKworICAgVGhlIENPTk5FQ1QgY29tbWFu ZCBub3cgYWxsb3dzIFVURi04IGFzIGEgbG9jYWwgb3IgcmVtb3RlIHRlcm1pbmFsCisgICBjaGFy YWN0ZXItc2V0OgorCisgIFNFVCBURVJNSU5BTCBDSEFSQUNURVItU0VUIHsgLi4uLCBVVEY4IH0g eyAuLi4sIFVURjggfQorICBTRVQgVEVSTUlOQUwgUkVNT1RFLUNIQVJBQ1RFUi1TRVQgeyAuLi4s IFVURjggfQorICBTRVQgVEVSTUlOQUwgTE9DQUwtQ0hBUkFDVEVSLVNFVCB7IC4uLiwgVVRGOCB9 CisKKyAgIChSZWNhbGwgdGhhdCBLZXJtaXQncyB0ZXJtaW5hbCBjaGFyYWN0ZXItc2V0IGhhcyB0 d28gImVuZHMiIC0tIHRoZSBzZXQKKyAgIHVzZWQgb24gdGhlIGhvc3QgdG8gd2hpY2ggS2VybWl0 IGlzIGNvbm5lY3RlZCwgYW5kIHRoZSBzZXQgdXNlZCBvbiB0aGUKKyAgIGxvY2FsIGtleWJvYXJk IGFuZCBzY3JlZW4uKQorCisgICBVQ1MtMiBpcyBub3Qgc3VwcG9ydGVkIGFzIGEgdGVybWluYWwg Y2hhcmFjdGVyLXNldCAoZWl0aGVyIGVuZCkgc2luY2UKKyAgIChhKSBpdCBpcyBub3QgdXNlZCB0 aGF0IHdheSBhbnl3aGVyZSB0byBvdXIga25vd2xlZGdlLCBhbmQgKGIpIHRoZQorICAgcHJvYmxl bXMgb2YgRW5kaWFubmVzcyBhbmQgdGhlIGhpZ2ggbGlrZWxpaG9vZCBvZiBsb3NzIG9mCisgICBz eW5jaHJvbml6YXRpb24gbWFrZSBpdCBpbXByYWN0aWNhbC4gKFRlbGVjb21tdW5pY2F0aW9ucyBp cworICAgYnl0ZS1vcmllbnRlZDsgaWYgb25lIGJ5dGUsIG9yIGFueSBvZGQgbnVtYmVyIG9mIGJ5 dGVzLCBpcyBsb3N0IGJlY2F1c2UKKyAgIG9mIGJ1ZmZlciBvdmVycnVucywgY2lyY3VpdCByZXNl dHMsIGV0YyAob3IgbGlrZXdpc2UgaWYgYSBidXJzdCBvZgorICAgbm9pc2UgYXBwZWFycyB0aGF0 IHRha2VzIHRoZSBndWlzZSBvZiBhbiBvZGQgbnVtYmVyIG9mIGJ5dGVzKSwgdGhlIGJ5dGUKKyAg IG9yZGVyIG9mIHRoZSBzdWJzZXF1ZW50IGRhdGEgc3RyZWFtIHdpbGwgYmUgYmFja3dhcmRzOyB1 bmxpa2UgVVRGLTggYW5kCisgICB0cmFkaXRpb25hbCBieXRlLWJhc2VkIGNoYXJhY3RlciBzZXRz LCBVQ1MtMiBpcyBub3QgInNlbGYKKyAgIHN5bmNocm9uaXppbmciLikKKworICAgVVRGLTggZG9l cyBub3QgaGF2ZSBieXRlLW9yZGVyIG9yIHN5bmNocm9uaXphdGlvbiBwcm9ibGVtcyBhbmQgaXMK KyAgIGdyb3dpbmcgaW4gcG9wdWxhcml0eSBhcyBhIHRlcm1pbmFsIGNoYXJhY3RlciBzZXQgYXMg d2VsbCBhcyBpbiBvdGhlcgorICAgYXBwbGljYXRpb24gYXJlYXMuIEl0IGFsbG93cyBhIHNpbmds ZSB0ZXJtaW5hbCBzZXNzaW9uIHRvIHVzZSBtdWx0aXBsZQorICAgc2NyaXB0cyAoUm9tYW4sIEN5 cmlsbGljLCBHcmVlaywgZXRjKSB3aXRob3V0IElTTyAyMDIyIGNoYXJhY3Rlci1zZXQKKyAgIHN3 aXRjaGluZyAod2hpY2ggdGVybWluYWwgZW11bGF0b3JzIGxpa2UgS2VybWl0IDk1IGNhbiBoYW5k bGUgYnV0IGZldworICAgaG9zdCBhcHBsaWNhdGlvbnMgdW5kZXJzdGFuZCBvciB1c2UpLCBhbmQg bWVzaGVzIG5pY2VseSB3aXRoIHRoZQorICAgVW5pY29kZSBzY3JlZW4gZm9udHMgdGhhdCBhcmUg YmVnaW5uaW5nIHRvIGFwcGVhci4KKworICAgVVRGLTggd2FzIGZpcnN0IHVzZWQgaW4gUGxhbiA5 IGFuZCBzb29uIHdpbGwgYmUgYXZhaWxhYmxlIGluIExpbnV4LiBJdAorICAgd2lsbCBwcm9iYWJs eSBzcHJlYWQgZnJvbSB0aGVyZSAoVW5pY29kZSBpbiBzb21lIGZvcm0gaXMsIG9mIGNvdXJzZSwK KyAgIGFsc28gdXNlZCBpbiBXaW5kb3dzIE5ULCBidXQgb25seSBpbnRlcm5hbGx5IC0tIG5vdCBm b3IgYWNjZXNzIGZyb20KKyAgIG91dHNpZGUpLgorCisgICBUbyB1c2UgVVRGLTggb3IgYW55IG90 aGVyIGNoYXJhY3RlciBzZXQgdGhhdCB1c2VzIDgtYml0IGJ5dGVzIGluIHlvdXIKKyAgIHRlcm1p bmFsIHNlc3Npb24sIGJlIHN1cmUgdG8gdGVsbCBDLUtlcm1pdCB0bzoKKworICBTRVQgVEVSTUlO QUwgQllURVNJWkUgOAorICBTRVQgQ09NTUFORCBCWVRFU0laRSA4CisgIFNFVCBQQVJJVFkgTk9O RQorCisgICAob3IgdXNlIHRoZSBzaG9ydGN1dCBjb21tYW5kLCBFSUdIVEJJVCwgd2hpY2ggZG9l cyBhbGwgdGhyZWUgYXQgb25jZSkuCisKKyAgIEluIGEgc2V0dXAgd2hlcmUgeW91ciBsb2NhbCBL ZXJtaXQgcHJvZ3JhbSB1c2VzIGEgc2luZ2xlLWJ5dGUgY2hhcmFjdGVyCisgICBzZXQgc3VjaCBh cyBQQyBDb2RlIFBhZ2UgODUwIGFuZCB0aGUgcmVtb3RlIGhvc3QgdXNlcyBVVEYtODoKKworICBT RVQgVEVSTSBDSEFSIFVURjggQ1A4NTAKKworICAgb3I6CisKKyAgU0VUIFRFUk0gUkVNT1RFIENI QVIgVVRGOAorICBTRVQgVEVSTSBMT0NBTCBDSEFSIENQODUwCisKKyAgIGFsbCB3b3JrcyBhcyBl eHBlY3RlZC4gVVRGLTggdGV4dCBvbiB0aGUgcmVtb3RlIGRpc3BsYXlzIGNvcnJlY3RseSBvbgor ICAgeW91ciBzY3JlZW4sIGFuZCB3aGVuIHlvdSB0eXBlIENQODUwIGNoYXJhY3RlcnMsIHRoZXkg YXJlIHRyYW5zbGF0ZWQgdG8KKyAgIFVURi04IHNlcXVlbmNlcyBmb3IgdHJhbnNtaXNzaW9uLCBh bmQgdGhlIGVjaG8gZnJvbSB0aGUgaG9zdCBpcworICAgdHJhbnNsYXRlZCBmcm9tIFVURi04IGJh Y2sgdG8gQ1A4NTAuIFRlbG5ldCBuZWdvdGlhdGlvbnMgYW5kCisgICBhdXRvZG93bmxvYWQgdGFr ZSBwbGFjZSBiZWZvcmUgYW55IGNoYXJhY3Rlci1zZXQgdHJhbnNsYXRpb24gYW5kIHdvcmsKKyAg IGFzIGJlZm9yZS4gVGhlIHNlc3Npb24gbG9nIChpZiB0ZXh0IG1vZGUgd2FzIHNlbGVjdGVkIGZv ciBpdCkgY29udGFpbnMKKyAgIG9ubHkgdGhlIGxvY2FsIHRlcm1pbmFsIGNoYXJhY3Rlci1zZXQu IEFuZCBzbyBvbi4KKworICAgS2VybWl0IG1lcmVseSBzdXBwbGllcyB0cmFuc2xhdGlvbnMgZnJv bSBVVEYtOCB0byB5b3VyIGxvY2FsIHRlcm1pbmFsCisgICBjaGFyYWN0ZXItc2V0ICh0aGlzIGlu Y2x1ZGVzIHRyZWF0aW5nIFVURi04IExpbmUgU2VwYXJhdG9yIGFuZAorICAgUGFyYWdyYXBoIHNl cGFyYXRvciBhcyBDUkxGKS4gSG93ZXZlciwgS2VybWl0IGRvZXMgZG9lcyBub3QsIGF0CisgICBw cmVzZW50LCBwZXJmb3JtICJjYW5vbmljYWxpemF0aW9uIiBvZiBjb21wb3NlZCBzZXF1ZW5jZXMs IG5vciBkb2VzIGl0CisgICBhdXRvbWF0aWNhbGx5IGV4ZWN1dGUgYmlkaXJlY3Rpb25hbGl0eSBh bGdvcml0aG1zIGZvciBkaXNwbGF5IG9mCisgICBtaXhlZC1kaXJlY3Rpb24gdGV4dCAoZS5nLiBI ZWJyZXcgYW5kIEVuZ2xpc2gpLiBTdWNoIHByZXNlbnRhdGlvbgorICAgaXNzdWVzLCBsaWtlIGFs bCBvdGhlcnMgaW4gdGhlIHRlcm1pbmFsLWhvc3QgcmVnaW1lLCBhcmUgbGVmdCB0byB0aGUKKyAg IGhvc3QuCisKKyAgIEJ5IHRoZSB3YXksIEMtS2VybWl0IGFsc28gYWxsb3dzIFVURi04IHRvIGJl IHRoZSBsb2NhbCBlbmQgb2YgdGhlCisgICB0ZXJtaW5hbCBjaGFyYWN0ZXItc2V0LCBidXQgc28g ZmFyIHRoaXMgY29kZSBpcyBub3QgdGVzdGVkLCBzaW5jZSB3ZQorICAgZG9uJ3QgaGF2ZSBhIFVU Ri04IGNvbnNvbGUgb3IgdGVybWluYWwgdG8gd29yayB3aXRoLiBIb3dldmVyLCBpdCBjYW4gYmUK KyAgIHN0YXRlZCB3aXRob3V0IGRvdWJ0IHRoYXQgQy1LZXJtaXQncyBrZXkgbWFwcGluZyB3aWxs IG5vdCB3b3JrIGZvcgorICAgVVRGLTggdmFsdWVzLCBzaW5jZSAoYSkgdGhlIGtleSBtYXAgaXMg aW5kZXhlZCBieSA4LWJpdCBieXRlIHZhbHVlcyBhbmQKKyAgIChiKSBDLUtlcm1pdCByZWFkcyBr ZXlzdHJva2VzIGEgYnl0ZSBhdCBhIHRpbWUgKHRoZXNlIGNvbW1lbnRzIGRvIG5vdAorICAgYXBw bHkgdG8gSzk1LCB3aGljaCBoYXMgZGlyZWN0IGFjY2VzcyB0byB0aGUga2V5Ym9hcmQgYW5kIGNh biByZWFkCisgICAid2lkZSIga2V5Y29kZXMgYW5kIHVzZXMgdGhlbSB0byBpbmRleCBhICJ3aWRl IiBrZXltYXApLgorCisgICBSZXN0cmljdGlvbnM6IEFzIG5vdGVkLCB0aGUgQ09OTkVDVCBjb21t YW5kIGRvZXMgbm90IHN1cHBvcnQgVUNTLTIgYXMgYQorICAgUkVNT1RFIFRFUk1JTkFMIGNoYXJh Y3Rlci1zZXQuIE5laXRoZXIgZG9lcyBpdCBzdXBwb3J0IHRoZSBKYXBhbmVzZQorICAgc2V0cyBF VUMtSlAsIEpJUy03LCBhbmQgU2hpZnQtSklTLiBTdXBwb3J0IGZvciB0aGUgSmFwYW5lc2Ugc2V0 cyAoYW5kCisgICBwb3NzaWJseSBDaGluZXNlIGFuZCBLb3JlYW4gdG9vKSBtaWdodCBiZSBhZGRl ZCBpbiBhIGZ1dHVyZSByZWxlYXNlLgorICAgU2luY2UgdGhlIFRSQU5TTUlUIGNvbW1hbmQgKG5l eHQgc2VjdGlvbikgdXNlcyB0aGUgc2FtZSBSRU1PVEUgVEVSTUlOQUwKKyAgIGNoYXJhY3Rlci1z ZXRzIGFzIHRoZSBDT05ORUNUIGNvbW1hbmQsIGl0IGhhcyB0aGUgc2FtZSByZXN0cmljdGlvbnMu CisKKyAgICA2LjYuNS40LiBUaGUgVFJBTlNNSVQgQ29tbWFuZAorCisgICBBcyBkZXNjcmliZWQg aW4gQ2hhcHRlciAxNSBvZiBbNTU1XVVzaW5nIEMtS2VybWl0IGFuZCBbNTU2XVNlY3Rpb24gNC4y MQorICAgb2YgdGhpcyBkb2N1bWVudCwgdGhlIFRSQU5TTUlUIGNvbW1hbmQgY2FuIGJlIHVzZWQg dG8gdXBsb2FkIGEgZmlsZQorICAgd2l0aG91dCBwcm90b2NvbCwgbW9yZSBvciBsZXNzIGFzIGlm IHlvdSB3ZXJlIHR5cGluZyBpdCBvbiB5b3VyCisgICBrZXlib2FyZCB3aGlsZSBjb25uZWN0ZWQg dG8gdGhlIGhvc3QuIFdoZW4gVFJBTlNNSVR0aW5nIGluIHRleHQgbW9kZSwKKyAgIHRoZSBmaWxl J3MgY2hhcmFjdGVyIHNldCBpcyBjb252ZXJ0ZWQgdG8gdGhlIGhvc3QncyB1bmxlc3MgeW91IGhh dmUgU0VUCisgICBURVJNSU5BTCBDSEFSQUNURVItU0VUIFRSQU5TUEFSRU5ULCBvciB5b3UgaW5j bHVkZSB0aGUgbmV3IFRSQU5TTUlUCisgICBzd2l0Y2gsIC9UUkFOU1BBUkVOVC4KKworICAgQmVm b3JlIEMtS2VybWl0IDcuMCwgdGhlIGZpbGUgY2hhcmFjdGVyLXNldCB3YXMgYXNzdW1lZCB0byBi ZSB0aGUgc2FtZQorICAgYXMgdGhlIGxvY2FsIGVuZCBvZiB0aGUgdGVybWluYWwgY2hhcmFjdGVy LXNldCwgYW5kIHRoZSBUUkFOU01JVAorICAgY29tbWFuZCB1c2VkIHRoZSBzYW1lIHRyYW5zbGF0 aW9ucyBhcyB0aGUgQ09OTkVDVCBjb21tYW5kLCBpZ25vcmluZyB0aGUKKyAgIGZpbGUgY2hhcmFj dGVyLXNldC4KKworICAgSW4gQy1LZXJtaXQgNy4wLCB0aGF0IGFzc3VtcHRpb24gKGEgcG9vciBv bmUgdG8gYmVnaW4gd2l0aCkgY2FuIG5vCisgICBsb25nZXIgYmUgbWFkZSwgc2luY2UgVUNTLTIg Y2FuIGJlIGEgZmlsZSBjaGFyYWN0ZXItc2V0IGJ1dCBub3QgYQorICAgdGVybWluYWwgY2hhcmFj dGVyLXNldC4gU28gbm93IHRoZSBmaWxlJ3MgY2hhcmFjdGVyLXNldCBpcyBnaXZlbiBieQorICAg eW91ciBtb3N0IHJlY2VudCBTRVQgRklMRSBDSEFSQUNURVItU0VUIGNvbW1hbmQuIFRoZSBob3N0 J3MgY2hhcmFjdGVyCisgICBzZXQgaXMgdGhlIHJlbW90ZSBlbmQgb2YgeW91ciBtb3N0IHJlY2Vu dCBTRVQgVEVSTUlOQUwgQ0hBUkFDVEVSLVNFVAorICAgY29tbWFuZDoKKworICBTRVQgVEVSTUlO QUwgQ0hBUkFDVEVSLVNFVCByZW1vdGUtc2V0IFsgbG9jYWwtc2V0IF0KKworICAgb3I6CisKKyAg U0VUIFRFUk1JTkFMIFJFTU9URS1DSEFSQUNURVItU0VUIHJlbW90ZS1zZXQKKworICAgVGhlIFRS QU5TTUlUIGNvbW1hbmQgY29udmVydHMgZWFjaCBzb3VyY2UtZmlsZSBjaGFyYWN0ZXIgZnJvbSB0 aGUgRklMRQorICAgY2hhcmFjdGVyLXNldCB0byB0aGUgUkVNT1RFIFRFUk1JTkFMIGNoYXJhY3Rl ci1zZXQsIGFuZCB0aGVuIHRyYW5zbWl0cworICAgdGhlIHRyYW5zbGF0ZWQgY2hhcmFjdGVycyBh Y2NvcmRpbmcgdG8geW91ciBTRVQgVFJBTlNNSVQgcHJlZmVyZW5jZXMKKyAgIChDaGFwdGVyIDE1 KS4KKworICAgSWYgeW91IGhhdmUgU0VUIFRSQU5TTUlUIEVDSE8gT04sIGFuZCB0aGUgaG9zdCBp cyBlY2hvaW5nIHRoZQorICAgdHJhbnNtaXR0ZWQgY2hhcmFjdGVycywgdGhlIGVjaG9zIGFyZSBj b252ZXJ0ZWQgZnJvbSB0aGUgcmVtb3RlCisgICB0ZXJtaW5hbCBjaGFyYWN0ZXItc2V0IHRvIHRo ZSBsb2NhbCB0ZXJtaW5hbCBjaGFyYWN0ZXItc2V0LgorCisgIFsgQSBwaWN0dXJlIHdvdWxkIGhl bHAuLi4gXQorCisgICBDb25mdXNlZD8gTGV0J3Mgd29yayB0aHJvdWdoIGFuIGV4YW1wbGUuIFN1 cHBvc2UgeW91ciBsb2NhbCBjb21wdXRlciBpcworICAgYSBOZVhUc3RhdGlvbiwgb24gd2hpY2gg dGV4dCBmaWxlcyBhcmUgZW5jb2RlZCBpbiB0aGUgTmVYVCBjaGFyYWN0ZXIKKyAgIHNldCwgYW5k IHRoYXQgdGhlIHJlbW90ZSBjb21wdXRlciBpcyBhIERhdGEgR2VuZXJhbCBBVmlpT04sIHdoaWNo IHVzZXMKKyAgIHRoZSBEYXRhIEdlbmVyYWwgSW50ZXJuYXRpb25hbCBjaGFyYWN0ZXIgc2V0LiBG dXJ0aGVyIHN1cHBvc2UgdGhhdCB5b3UKKyAgIGFyZSBsb2dnZWQgaW4gdG8gdGhlIE5lWFQgZnJv bSBhIFZUMjIwIHRlcm1pbmFsIHdoaWNoIHVzZXMgdGhlIERFQworICAgTXVsdGluYXRpb25hbCBj aGFyYWN0ZXIgc2V0LgorCisgICBZb3UgbmVlZCB0byBjb252ZXJ0IHRoZSBmaWxlIGZyb20gTmVY VCBlbmNvZGluZyB0byBERyBlbmNvZGluZyBhbmQKKyAgIGNvbnZlcnQgdGhlIGVjaG9lcyBmcm9t IERHIGVuY29kaW5nIHRvIERFQyBlbmNvZGluZy4gU28gb24gdGhlIE5lWFQsCisgICB0ZWxsIEMt S2VybWl0IHRvOgorCisgIGVpZ2h0Yml0CisgIHNldCBmaWxlIGNoYXJhY3Rlci1zZXQgbmV4dAor ICBzZXQgdGVybSBjaGFyYWN0ZXItc2V0IGRnLWludGVybmF0aW9uYWwgZGVjLW1jcworICB0cmFu c21pdCAvdGV4dCBuZXh0ZGF0YS50eHQKKworICAgKFRoaXMgYXNzdW1lcyB5b3UgaGF2ZSBzb21l IHNvcnQgb2YgY29sbGVjdGlvbiBwcm9jZXNzIGFscmVhZHkgc2V0IHVwCisgICBvbiB0aGUgRGF0 YSBHZW5lcmFsLCBzdWNoIGFzIGEgdGV4dCBlZGl0b3Igb3IgdGhlIHZlbmVyYWJsZSAiY2F0ID4K KyAgIGZvbyIuIFRoZSBFSUdIVEJJVCBjb21tYW5kIGlzIGVxdWl2YWxlbnQgdG8gU0VUIFRFUk1J TkFMIEJZVEVTSVpFIDgsCisgICBTRVQgQ09NTUFORCBCWVRFU0laRSA4LCBTRVQgUEFSSVRZIE5P TkUuKQorCisgICBUbyBmdXJ0aGVyIGNvbXBsaWNhdGUgbWF0dGVycywgc3VwcG9zZSB5b3VyIGxv Y2FsIHRlcm1pbmFsIGNoYXJhY3RlcgorICAgc2V0IGlzIHRoZSBzYW1lIGFzIHRoZSByZW1vdGUg b25lLCBzbyB5b3UgZG9uJ3QgbmVlZCB0ZXJtaW5hbAorICAgY2hhcmFjdGVyLXNldCB0cmFuc2xh dGlvbiwgYnV0IHlvdSBuZWVkIHRvIFRSQU5TTUlUIGEgZmlsZSB0aGF0IGlzIGluIGEKKyAgIGRp ZmZlcmVudCBjaGFyYWN0ZXIgc2V0IGFuZCB5b3Ugd2FudCBpdCB0cmFuc2xhdGVkIHRvIHRoZSBo b3N0IHNldC4gSW4KKyAgIHRoaXMgY2FzZSwgdXNlIFNFVCBURVJNIENIQVJBQ1RFUi1TRVQgdG8g YWN0dWFsbHkgc3BlY2lmeSB0aGUgY2hhcmFjdGVyCisgICBzZXQgdXNlZCBvbiBlYWNoIGVuZCwg cmF0aGVyIHRoYW4gc3BlY2lmeWluZyBUUkFOU1BBUkVOVDoKKworICBlaWdodGJpdAorICBzZXQg ZmlsZSBjaGFyYWN0ZXItc2V0IHVjczIKKyAgc2V0IHRlcm0gY2hhcmFjdGVyLXNldCBsYXRpbjEg bGF0aW4xCisgIHRyYW5zbWl0IC90ZXh0IHVjczJkYXRhLnR4dAorCisgICBUaGUgZGlzdGluY3Rp b24gYmV0d2VlbjoKKworICBTRVQgVEVSTUlOQUwgQ0hBUkFDVEVSLVNFVCB4eHggeXl5CisKKyAg ICh3aGVyZSB4eHggYW5kIHl5eSBhcmUgdGhlIHNhbWUgc2V0KSBhbmQ6CisKKyAgU0VUIFRFUk1J TkFMIENIQVJBQ1RFUi1TRVQgVFJBTlNQQVJFTlQKKworICAgaXMgbmV3IHRvIEMtS2VybWl0IDcu MCwgYnV0IGFmZmVjdHMgb25seSB0aGUgVFJBTlNNSVQgY29tbWFuZC4KKworICAgVGhlIFRSQU5T TUlUIGNvbW1hbmQgY3VycmVudGx5IGRvZXMgbm90aGluZyBzcGVjaWFsIHdpdGggVUNTLTIvVVRG LTgKKyAgIExpbmUgYW5kIFBhcmFncmFwaCBTZXBhcmF0b3IgY2hhcmFjdGVyczsgbW9yZSBleHBl cmllbmNlIGlzIHJlcXVpcmVkIHRvCisgICBmaW5kIG91dCBob3cgdGhlc2UgYmVoYXZlIGluIGEg Z2VudWluZSBVbmljb2RlIHRlcm1pbmFsLWhvc3Qgc2V0dGluZy4KKworICAgUmVzdHJpY3Rpb25z OiBBcyBub3RlZCwgdGhlIFRSQU5TTUlUIGNvbW1hbmQgdHJhbnNsYXRlcyBmcm9tIHRoZSBGSUxF CisgICBjaGFyYWN0ZXItc2V0IHRvIHRoZSBSRU1PVEUgVEVSTUlOQUwgY2hhcmFjdGVyLXNldC4g VGhpcyBydWxlcyBvdXQKKyAgIHRyYW5zbGF0aW9ucyB0byBhbnkgY2hhcmFjdGVyIHNldCB0aGF0 IGlzIG5vdCBzdXBwb3J0ZWQgYXMgYSBSRU1PVEUKKyAgIFRFUk1JTkFMIGNoYXJhY3Rlci1zZXQs IHN1Y2ggYXMgVUNTLTIsIEVVQy1KUCwgSklTLTcsIGFuZCBTaGlmdC1KSVMuCisKKyAgICA2LjYu NS41LiBTdW1tYXJ5IG9mIEtlcm1pdCBVbmljb2RlIENvbW1hbmRzCisKKyAgIFNwZWNpZnlpbmcg ZmlsZSBjaGFyYWN0ZXItc2V0IGFuZCBieXRlIG9yZGVyOgorICAgICAgICAgIFNFVCBGSUxFIENI QVJBQ1RFUi1TRVQgeyAuLi4sIFVDUzIsIFVURjggfQorICAgICAgICAgIFJFTU9URSBTRVQgRklM RSBDSEFSQUNURVItU0VUIHsgLi4uLCBVQ1MyLCBVVEY4IH0gKFNlZSBuZXh0CisgICAgICAgICAg c2VjdGlvbikKKyAgICAgICAgICBTRVQgRklMRSBVQ1MgQk9NIHsgT04sIE9GRiB9CisgICAgICAg ICAgU0VUIEZJTEUgVUNTIEJZVEUtT1JERVIgeyBCSUctRU5ESUFOLCBMSVRUTEUtRU5ESUFOIH0K KworICAgU3BlY2lmeWluZyB0aGUgdHJhbnNmZXIgY2hhcmFjdGVyLXNldDoKKyAgICAgICAgICBT RVQgVFJBTlNGRVIgQ0hBUkFDVEVSLVNFVCB7IC4uLiwgVUNTLTIsIFVURi04IH0KKyAgICAgICAg ICBSRU1PVEUgU0VUIFRSQU5TRkVSIENIQVJBQ1RFUi1TRVQgeyAuLi4sIFVDUy0yLCBVVEYtOCB9 CisKKyAgIFNwZWNpZnlpbmcgdGhlIHRlcm1pbmFsIGNoYXJhY3Rlci1zZXQ6CisgICAgICAgICAg U0VUIFRFUk1JTkFMIENIQVJBQ1RFUi1TRVQgeyAuLi4sIFVURjggfSB7IC4uLiwgVVRGOCB9Cisg ICAgICAgICAgU0VUIFRFUk1JTkFMIFJFTU9URS1DSEFSQUNURVItU0VUIHsgLi4uLCBVVEY4IH0K KyAgICAgICAgICBTRVQgVEVSTUlOQUwgTE9DQUwtQ0hBUkFDVEVSLVNFVCB7IC4uLiwgVVRGOCB9 CisKKyAgIERpc3BsYXlpbmcgc2V0dGluZ3M6CisgICAgICAgICAgU0hPVyBGSUxFCisgICAgICAg ICAgU0hPVyBUUkFOU0ZFUgorICAgICAgICAgIFNIT1cgVEVSTUlOQUwKKyAgICAgICAgICBTSE9X IENIQVJBQ1RFUi1TRVRTCisKKyAgIENvbW1hbmRzIHRoYXQgdXNlIHRoZXNlIHNldHRpbmdzIGlu Y2x1ZGU6CisgICAgICAgICAgU0VORCwgUkVDRUlWRSwgR0VULCBldGMuCisgICAgICAgICAgQ09O TkVDVAorICAgICAgICAgIFRSQU5TTUlUCisgICAgICAgICAgTE9HIFNFU1NJT04KKworICAgQ29u dmVydGluZyBmaWxlczoKKyAgICAgICAgICBUUkFOU0xBVEUgaW5maWxlIHsgLi4uLCBVQ1MtMiwg VVRGLTggfSB7IC4uLiwgVUNTLTIsIFVURi04IH0KKyAgICAgICAgICBvdXRmaWxlCisgICAgICAg ICAgQ09QWSAvU1dBUC1CWVRFUyBpbmZpbGUgb3V0ZmlsZQorCisgIDYuNy4gQ2xpZW50L1NlcnZl ciBDaGFyYWN0ZXItU2V0IFN3aXRjaGluZworCisgICBBIHNpbXBsZSBtZWNoYW5pc20gaGFzIGJl ZW4gYWRkZWQgdG8gYWxsb3cgdGhlIGNsaWVudCB0byBjaGFuZ2UgdGhlCisgICBzZXJ2ZXIncyBG SUxFIENIQVJBQ1RFUi1TRVQ6CisKKyAgIFJFTU9URSBTRVQgRklMRSBDSEFSQUNURVItU0VUIG5h bWUKKyAgICAgICAgICBUaGUgY2xpZW50IGFza3MgdGhlIHNlcnZlciB0byBjaGFuZ2UgaXRzIGZp bGUgY2hhcmFjdGVyLXNldCB0bworICAgICAgICAgIHRoZSBvbmUgZ2l2ZW4uIFRoZSBuYW1lIG11 c3QgbWF0Y2ggb25lIG9mIHRoZSBzZXJ2ZXIncyBmaWxlCisgICAgICAgICAgY2hhcmFjdGVyLXNl dCBuYW1lcy4gRm9yIGNvbnZlbmllbmNlLCBDLUtlcm1pdCB1c2VzIGl0cyBvd24gZmlsZQorICAg ICAgICAgIGNoYXJhY3Rlci1zZXQga2V5d29yZCBsaXN0IGZvciBwYXJzaW5nIHRoaXMgY29tbWFu ZCBzbyB5b3UgY2FuCisgICAgICAgICAgdXNlID8gZm9yIGhlbHAgYW5kIFRhYiBvciBFc2MgZm9y IGNvbXBsZXRpb24uIEhvd2V2ZXIsIHNpbmNlIHRoZQorICAgICAgICAgIHNlcnZlciBtaWdodCBo YXZlIGEgZGlmZmVyZW50IHJlcGVydG9pcmUgKG9yIGV2ZW4gdXNlIGRpZmZlcmVudAorICAgICAg ICAgIG5hbWVzIGZvciB0aGUgc2FtZSBzZXRzKSwgQy1LZXJtaXQgYWNjZXB0cyBhbnkgc3RyaW5n IHlvdSBzdXBwbHkKKyAgICAgICAgICBhbmQgc2VuZHMgaXQgdG8gdGhlIHNlcnZlci4gVGhlIHNl cnZlciwgaWYgaXQgc3VwcG9ydHMgdGhpcworICAgICAgICAgIGNvbW1hbmQgKEMtS2VybWl0IDcu MCBhbmQgSzk1IDEuMS4xOSBkbyksIHNldHMgaXRzIGZpbGUKKyAgICAgICAgICBjaGFyYWN0ZXIt c2V0IGFzIHJlcXVlc3RlZCwgYW5kIGFsc28gZGlzYWJsZXMgYXV0b21hdGljCisgICAgICAgICAg Y2hhcmFjdGVyLXNldCBzd2l0Y2hpbmcgKFs1NTddU2VjdGlvbiA2LjUpLiBJZiB0aGUgc2VydmVy IGRvZXMKKyAgICAgICAgICBub3Qgc3VwcG9ydCB0aGlzIGNvbW1hbmQgb3IgaWYgaXQgZG9lcyBu b3Qgc3VwcG9ydCB0aGUgZ2l2ZW4KKyAgICAgICAgICBjaGFyYWN0ZXIgc2V0LCB0aGUgUkVNT1RF IFNFVCBGSUxFIENIQVJBQ1RFUi1TRVQgY29tbWFuZCBmYWlscy4KKworICAgSGVyZSdzIGFuIGV4 YW1wbGUgdGhhdCBzZW5kcyBhIEphcGFuZXNlIHRleHQgZmlsZSBlbmNvZGVkIGluIFNoaWZ0LUpJ UworICAgdG8gYSBzZXJ2ZXIgdXNpbmcgZXZlcnkgY29tYmluYXRpb24gb2YgS2VybWl0J3MgSmFw YW5lc2UtY2FwYWJsZSBmaWxlCisgICBhbmQgdHJhbnNmZXIgY2hhcmFjdGVyIHNldHM6CisKKyAg ZGNsIFwmeFtdID0gZXVjIHVjczIgdXRmOCAgICAgICAgICAgICA7IHRyYW5zZmVyIGNoYXJhY3Rl ci1zZXRzCisgIGRjbCBcJnlbXSA9IGV1IHVjIHV0ICAgICAgICAgICAgICAgICAgOyAyLWxldHRl ciBhYmJyZXZpYXRpb25zIGZvciB0aGVtCisgIGRjbCBcJmZbXSA9IHNoaWZ0IGV1YyBqaXM3IHVj czIgdXRmOCAgOyBmaWxlIGNoYXJhY3Rlci1zZXRzCisgIGRjbCBcJmdbXSA9IHNqIGV1IGo3IHVj IHV0ICAgICAgICAgICAgOyAyLWxldHRlciBhYmJyZXZpYXRpb25zCisKKyAgc2V0IGZpbGUgY2hh ciBzaGlmdC1qaXMgICAgICAgICAgICAgICA7IGxvY2FsIGZpbGUgY2hhcmFjdGVyLXNldCBpcyBT aGlmdC1KSVMKKyAgZm9yIFwlaSAxIFxmZGltKCZ4KSAxIHsgICAgICAgICAgICAgICA7IGZvciBl YWNoIHRyYW5zZmVyIGNoYXJhY3Rlci1zZXQuLi4KKyAgICAgIHNldCB4ZmVyIGNoYXIgXCZ4W1wl aV0gICAgICAgICAgICA7IHNldCBpdAorICAgICAgZm9yIFwlaiAxIFxmZGltKCZmKSAxIHsgICAg ICAgICAgIDsgZm9yIGVhY2ggcmVtb3RlIGZpbGUgY2hhcmFjdGVyLXNldC4uLgorICAgICAgICAg IHJlbW90ZSBzZXQgZmlsZSBjaGFyIFwmZltcJWpdIDsgc2V0IGl0CisgICAgICAgICAgaWYgZmFp bCBleGl0IDEgU0VSVkVSIFJFSkVDVEVEIENIQVJTRVQKKyAgICAgICAgICBzZW5kIC90ZXh0IG1l aWJvLXNqLmh0bWwgbWVpYm8tc2otXCZ5W1wlaV0tXCZnW1wlal0udHh0IDsgc2VuZCB0aGUgZmls CitlCisgICAgICAgICAgaWYgZmFpbCBleGl0IDEgVFJBTlNGRVIgRkFJTEVECisgICAgICB9Cisg IH0KKworICAgVGhlIEtlcm1pdC0zNzAgc2VydmVyIGRvZXMgbm90IHN1cHBvcnQgUkVNT1RFIFNF VCBGSUxFIENIQVJBQ1RFUi1TRVQsCisgICBidXQgc2luY2UgaXQgc3VwcG9ydHMgUkVNT1RFIEtF Uk1JVCBjb21tYW5kcywgeW91IGNhbiBnZXQgdGhlIHNhbWUKKyAgIGVmZmVjdCB3aXRoIFJFTU9U RSBLRVJNSVQgU0VUIEZJTEUgQ0hBUkFDVEVSLVNFVCBuYW1lLgorCisgIDcuIFNDUklQVCBQUk9H UkFNTUlORworCisgICAoQWxzbyBzZWUgWzU1OF1TZWN0aW9uIDIuOCwgU2NyaXB0aW5nIExvY2Fs IFByb2dyYW1zLikKKworICA3LjAuIEJ1ZyBGaXhlcworCisgICBUaGUgZm9sbG93aW5nIHNjcmlw dCBwcm9ncmFtbWluZyBidWdzIHdlcmUgZml4ZWQgaW4gQy1LZXJtaXQgNy4wOgorCisgICAgICog SUYgRVhJU1QgYW5kIElGIERJUkVDVE9SWSB3ZXJlIGZpeGVkIHRvIHByb3Blcmx5IHN0cmlwIGJy YWNlcyBmcm9tCisgICAgICAgYXJvdW5kIHRoZWlyIGFyZ3VtZW50cywgc28gImlmIGRpcmVjdG9y eSB7QzpcUHJvZ3JhbSBGaWxlc30iLCBldGMsCisgICAgICAgd291bGQgd29yayBhcyBleHBlY3Rl ZC4gSG93ZXZlciwgdGhpcyBtZWFucyB0aGF0IGlmIHRoZSBmaWxlIG9yCisgICAgICAgZGlyZWN0 b3J5IG5hbWUgaXMgYWN0dWFsbHkgZW5jbG9zZWQgaW4gYnJhY2VzLCB0aGUgYnJhY2VzIG11c3Qg YmUKKyAgICAgICBkb3VibGVkLgorICAgICAqIFRoZSBSRUFEIGNvbW1hbmQgZGlkIG5vdCBmYWls IGlmIHRoZSBSRUFEIGZpbGUgd2Fzbid0IG9wZW47IG5vdyBpdAorICAgICAgIGRvZXMuCisgICAg ICogVGhlIFJFQUQgY29tbWFuZCByZWZ1c2VkIHRvIHJlYWQgdGhlIGxhc3Qgb3Igb25seSBsaW5l IG9mIGEgZmlsZSBpZgorICAgICAgIGl0IGRpZCBub3QgZW5kIHdpdGggYSBwcm9wZXIgbGluZSB0 ZXJtaW5hdG9yOyBub3cgaXQgZG9lcy4KKyAgICAgKiBUaGUgRU5EIGNvbW1hbmQsIHdoZW4gZ2l2 ZW4gZnJvbSB3aXRoaW4gYSBTV0lUQ0ggc3RhdGVtZW50LCBkaWQgbm90CisgICAgICAgZXhpdCBm cm9tIHRoZSBjdXJyZW50IG1hY3JvIG9yIGNvbW1hbmQgZmlsZTsgaW5zdGVhZCBpdCBqdXN0Cisg ICAgICAgdGVybWluYXRlZCB0aGUgU1dJVENILgorCisgIDcuMS4gVGhlIElOUFVUIENvbW1hbmQK KworICAgNy4xLjEuIElOUFVUIFRpbWVvdXRzCisKKyAgIFRoZSBkZXNjcmlwdGlvbiBvZiB0aGUg SU5QVVQgY29tbWFuZCBvbiBwYWdlIDQyMiBmYWlscyB0byBtZW50aW9uIHRoZQorICAgZm9sbG93 aW5nIHR3byBwb2ludHMgYWJvdXQgdGhlIHRpbWVvdXQgKHdoaWNoIGFwcGx5IHRvIEMtS2VybWl0 IDYuMCBhbmQKKyAgIGxhdGVyKToKKworICAgIDEuICJJTlBVVCAtMSB0ZXh0IiAob3IgIklOUFVU IFwleCB0ZXh0Iiwgd2hlcmUgXCV4IGlzIGFueSB2YXJpYWJsZQorICAgICAgIHdob3NlIHZhbHVl IGlzIC0xIG9yIGxlc3MpIG1lYW5zICJ3YWl0IGZvcmV2ZXIiLiBUaGlzIGZvcm0gb2YgdGhlCisg ICAgICAgSU5QVVQgY29tbWFuZCBmYWlscyBvbmx5IGlmIGl0IGlzIGludGVycnVwdGVkLCBzaW5j ZSBpdCB3aWxsIG5ldmVyCisgICAgICAgdGltZSBvdXQuCisgICAgMi4gSU5QVVQgMCBwZXJmb3Jt cyBhIG5vbmJsb2NraW5nIHJlYWQgb2YgbWF0ZXJpYWwgdGhhdCBoYXMgYWxyZWFkeQorICAgICAg IGFycml2ZWQgYnV0IGhhcyBub3QgeWV0IGJlZW4gcmVhZCwgYW5kIHN1Y2NlZWRzIGltbWVkaWF0 ZWx5IGlmIHRoZQorICAgICAgIHRhcmdldCBzdHJpbmcgaXMgZm91bmQsIG9yIGZhaWxzIGltbWVk aWF0ZWx5IGlmIGl0IGlzIG5vdCBmb3VuZC4KKworICAgVGhlIHNhbWUgcG9pbnRzIGFwcGx5IHRv IE1JTlBVVC4gUkVJTlBVVCBpZ25vcmVzIGl0cyB0aW1lb3V0IHBhcmFtZXRlci4KKworICAgIDcu MS4yLiBOZXcgSU5QVVQgQ29udHJvbHMKKworICAgVGhlIGZvbGxvd2luZyBuZXcgSU5QVVQgY29u dHJvbHMgd2VyZSBhZGRlZCBpbiB2ZXJzaW9uIDcuMDoKKworICAgU0VUIElOUFVUIEFVVE9ET1dO TE9BRCB7IE9OLCBPRkYgfQorICAgICAgICAgIEV4cGxhaW5lZCBpbiBbNTU5XVNlY3Rpb24gNy43 LgorCisgICBTRVQgSU5QVVQgQ0FOQ0VMTEFUSU9OIHsgT04sIE9GRiB9CisgICAgICAgICAgVGhp cyBnb3Zlcm5zIHdoZXRoZXIgYW4gSU5QVVQgY29tbWFuZCBjYW4gYmUgY2FuY2VsZWQgYnkKKyAg ICAgICAgICAicHJlc3NpbmcgYW55IGtleSIgb24gdGhlIGtleWJvYXJkLiBOb3JtYWxseSBpdCBj YW4gYmUsIGluIHdoaWNoCisgICAgICAgICAgY2FzZSB0aGUgSU5QVVQgY29tbWFuZCBmYWlscyBp bW1lZGlhdGVseSBhbmQgXHYoaW5zdGF0dXMpIGlzIHNldAorICAgICAgICAgIHRvIDIsIGluZGlj YXRpbmcgaW50ZXJydXB0aW9uLiBTRVQgSU5QVVQgQ0FOQ0VMTEFUSU9OIE9GRgorICAgICAgICAg IGRpc2FibGVzIGtleWJvYXJkIGNhbmNlbGxhdGlvbnM7IHRodXMgaWYgdGhlIHNlYXJjaCB0ZXh0 IGlzIG5vdAorICAgICAgICAgIGVuY291bnRlcmVkLCB0aGUgSU5QVVQgY29tbWFuZCB3aWxsIHJ1 biBmb3IgaXRzIGVudGlyZSB0aW1lb3V0CisgICAgICAgICAgaW50ZXJ2YWwuIFNFVCBJTlBVVCBD QU5DRUxMQVRJT04gT0ZGIGRvZXMgbm90IGRpc2FibGUKKyAgICAgICAgICBpbnRlcnJ1cHRpb24g YnkgQ3RybC1DLCBob3dldmVyOyBldmVyeSBjb21tYW5kIG5lZWRzIGFuCisgICAgICAgICAgZW1l cmdlbmN5IGV4aXQuIChJZiB5b3UgcmVhbGx5IHdhbnQgdG8gZGlzYWJsZSBpbnRlcnJ1cHRpb24g YnkKKyAgICAgICAgICBDdHJsLUMsIHVzZSBTRVQgQ09NTUFORCBJTlRFUlJVUFRJT04gT0ZGLikK KworICAgQWxzbyBzZWUgWzU2MF1TZWN0aW9uIDcuMiBmb3IgYW55IG5ldyB2YXJpYWJsZXMgcmVs YXRlZCB0byBJTlBVVC4KKworICAgIDcuMS4zLiBJTlBVVCB3aXRoIFBhdHRlcm4gTWF0Y2hpbmcK KworICAgQy1LZXJtaXQgNy4wIGFsbG93cyBJTlBVVCwgTUlOUFVULCBhbmQgUkVJTlBVVCB0YXJn ZXRzIHRvIGJlIGEgcGF0dGVybgorICAgKGV4cGxhaW5lZCBpbiBbNTYxXVNlY3Rpb25zIDEuMTkg YW5kIFs1NjJdNC45KS4gVGhpcyBzb2x2ZXMgYQorICAgbG9uZy1zdGFuZGluZyBwcm9ibGVtIGls bHVzdHJhdGVkIGJ5IHRoZSBmb2xsb3dpbmcgc2NlbmFyaW86IGEgY2VydGFpbgorICAgY29tcGFu eSBoYXMgYSBiYW5rIG9mIFRDUC9JUCBtb2RlbSBzZXJ2ZXJzLCB3aXRoIGhvc3RuYW1lcyBzZXJ2 ZXIxLAorICAgc2VydmVyMiwgc2VydmVyMywgYW5kIHNvIG9uLiBFYWNoIHNlcnZlcidzIHByb21w dCBpcyBpdHMgbmFtZSwgZm9sbG93ZWQKKyAgIGJ5IGEgY29sb24gKDopLCBmb3IgZXhhbXBsZSAi U2VydmVyNzI6Ii4gV2l0aG91dCBJTlBVVCBwYXR0ZXJucywgaXQKKyAgIHdvdWxkIGJlIHJhdGhl ciBkaWZmaWN1bHQgdG8gd2FpdCBmb3IgdGhlIHByb21wdC4gVGhlIGJydXRlIGZvcmNlCisgICBh cHByb2FjaDoKKworICBtaW5wdXQgMjAgU2VydmVyMTogU2VydmVyMjogU2VydmVyMzogLi4uIChl bnVtZXJhdGluZyBlYWNoIG9uZSkKKworICAgaXMgc3ViamVjdCB0byBmYWlsdXJlIHdoZW5ldmVy IGEgbmV3IHNlcnZlciBpcyBhZGRlZC4gQSBtb3JlIHN1YnRsZQorICAgYXBwcm9hY2g6CisKKyAg aW5wdXQgMjAgU2VydmVyCisgIGlmIGZhaWwgLi4uCisgIGlucHV0IDIgOgorCisgICBpcyBsaWFi bGUgdG8gZmFsc2UgcG9zaXRpdmVzLCBlLmcuICJXZWxjb21lIHRvIHRoZSBYWVogQ29ycCBNb2Rl bQorICAgU2VydmVyLiBQbGVhc2UgcmVhZCB0aGUgZm9sbG93aW5nIG1lc3NhZ2U6Ii4uLgorCisg ICBXaXRoIHBhdHRlcm5zLCB5b3UgY2FuIG1hdGNoIHRoZSBwcm9tcHQgd2l0aCAiU2VydmVyKjoi ICh3aGljaCBkb2Vzbid0CisgICBzb2x2ZSB0aGUgImZhbHNlIHBvc2l0aXZlcyIgcHJvYmxlbSwg YnV0IGNlcnRhaW5seSBpcyBtb3JlIGNvbXBhY3QgdGhhbgorICAgdGhlIGJydXRlIGZvcmNlIG1l dGhvZCksIG9yIHdpdGggbW9yZSBzcGVjaWZpYyBwYXR0ZXJucyBzdWNoIGFzCisgICAiU2VydmVy WzEtOV06IiBhbmQgIlNlcnZlclsxLTldWzAtOV06Iiwgb3IgZXF1aXZhbGVudGx5OgorCisgIFNl cnZlcntbMS05XSxbMS05XVswLTldfToKKworICAgbWVhbmluZyB0aGUgd29yZCAiU2VydmVyIiBm b2xsb3dlZCBieSBhIHNpbmdsZSBkaWdpdCAoMS05KSBvciBieSB0d28KKyAgIGRpZ2l0cyByZXBy ZXNlbnRpbmcgYSBudW1iZXIgZnJvbSAxIHRvIDk5LCBmb2xsb3dlZCBieSBhIGNvbG9uLgorCisg ICBJTlBVVCBwYXR0ZXJuIG1hdGNoaW5nIGhhcyBiZWVuIGFkZGVkIGluIGEgd2F5IHRoYXQgZG9l cyBub3QgaW50ZXJmZXJlCisgICB3aXRoIGV4aXN0aW5nIHNjcmlwdHMuIE5vIG5ldyBjb21tYW5k cyBvciBzd2l0Y2hlcyBhcmUgdXNlZC4gVGhlIHNpbXBsZQorICAgcnVsZSBpczogaWYgYW4gSU5Q VVQgc2VhcmNoIHRhcmdldCBpcyB0aGUgYXJndW1lbnQgb2YgdGhlIChuZXcpCisgICBcZnBhdHRl cm4oKSBmdW5jdGlvbiwgaXQgaXMgYSBwYXR0ZXJuLiBPdGhlcndpc2UgaXQgaXMgdGFrZW4gbGl0 ZXJhbGx5LAorICAgYXMgYmVmb3JlLiBGb3IgZXhhbXBsZToKKworICBpbnB1dCA1IGEqYgorCisg ICBzZWFyY2hlcyBmb3IgYW4gJ2EnIGZvbGxvd2VkIGJ5IGFuIGFzdGVyaXNrICgnKicpLCBmb2xs b3dlZCBieSBhICdiJy4KKyAgIEJ1dDoKKworICBpbnB1dCA1IFxmcGF0dGVybihhKmIpCisKKyAg IHNlYXJjaGVzIGZvciBhbiAnYScgZm9sbG93ZWQgYnkgYW55dGhpbmcgYXQgYWxsIHVwIHRvIGFu ZCBpbmNsdWRpbmcgdGhlCisgICBmaXJzdCAnYicuIFRoaXMgbWVhbnMgdGhhdCBhbnkgc2VhcmNo IHRhcmdldCB0byBJTlBVVCwgTUlOUFVULCBvcgorICAgUkVJTlBVVCBjYW4gYmUgYSBwYXR0ZXJu IG9yIGEgbGl0ZXJhbCBzdHJpbmcsIGFuZCBpbiBwYXJ0aWN1bGFyIHRoYXQKKyAgIE1JTlBVVCBj YW4gYWNjb21tb2RhdGUgYW55IG1peHR1cmUgb2YgcGF0dGVybnMgYW5kIGxpdGVyYWwgc3RyaW5n cy4KKworICAgSW4gc2VsZWN0aW5nIHBhdHRlcm5zLCBub3RlIHRoYXQ6CisKKyAgICAgKiBBIGxl YWRpbmcgJyonIGlzIGFsd2F5cyBpbXBsaWVkIHNvIHRoZXJlIGlzIG5vIG5lZWQgdG8gaW5jbHVk ZSBvbmUuCisgICAgICogQSB0cmFpbGluZyAnKicgaXMgbWVhbmluZ2xlc3MgYW5kIGlnbm9yZWQu CisgICAgICogQSAnKicgYnkgaXRzZWxmIG1hdGNoZXMgdGhlIGZpcnN0IGNoYXJhY3RlciB0aGF0 IGFycml2ZXMuCisKKyAgIEEgc3ludGF4IG5vdGU6IElmIHlvdXIgcGF0dGVybiBpcyBhIHNlbGVj dGlvbiBsaXN0LCBtZWFuaW5nIGEgbGlzdCBvZgorICAgYWx0ZXJuYXRpdmVzIHNlcGFyYXRlZCBi eSBjb21tYXMgYW5kIGVuY2xvc2VkIGluIGJyYWNlcywgdGhlbiB0aGUgb3V0ZXIKKyAgIGJyYWNl cyB3aWxsIGJlIHN0cmlwcGVkIGJ5IHZhcmlvdXMgbGV2ZWxzIG9mIHBhcnNlcnMsIHNvIHlvdSBt dXN0CisgICBpbmNsdWRlIHRocmVlIG9mIGVhY2g6CisKKyAgaW5wdXQgMTAgXGZwYXR0ZXJuKHt7 e2FiYyxtbm8seHl6fX19KQorCisgICBOb3RlIHRoYXQgdGhpcyBpcyBlcXVpdmFsZW50IHRvOgor CisgIG1pbnB1dCAxMCBhYmMgbW5vIHh5egorCisgICBleGNlcHQgZm9yIHRoZSBzZXR0aW5nIG9m IHRoZSBcdihtaW5wdXQpIHZhcmlhYmxlLgorCisgICBBbmQgYSBjYXV0aW9uOiBJTlBVVCBwYXR0 ZXJuIG1hdGNoaW5nIGhhcyBhIGxpbWl0YXRpb24gdGhhdCB5b3UKKyAgIHByb2JhYmx5IG5ldmVy IG5vdGljZWQgd2l0aCBsaXRlcmFsLXN0cmluZyBtYXRjaGluZywgbmFtZWx5IHRoYXQgdGhlcmUK KyAgIGlzIGEgbGltaXQgb24gdGhlIHNpemUgb2YgdGhlIG1hdGNoLiBGb3IgZXhhbXBsZSwgaWYg dGhlIHBhdHRlcm4gaXMKKyAgICJhKmIiLCB0aGUgbWF0Y2ggd2lsbCBzdWNjZWVkIGlmIHRoZSAn YScgYW5kICdiJyBhcmUgbm90IHNlcGFyYXRlZCBieQorICAgbW9yZSB0aGFuIChzYXkpIDhLIGJ5 dGVzLCBidXQgd2lsbCBmYWlsIGlmIHRoZXkgYXJlIGZhcnRoZXIgYXBhcnQgdGhhbgorICAgdGhh dC4gSW4gc3VjaCBjYXNlcywgaXQgYmV0dGVyIHRvIHVzZSB0d28gSU5QVVRzIChlLmcuICJpbnB1 dCAxMCBhIiBhbmQKKyAgIHRoZW4gImlucHV0IDEwMCBiIikuCisKKyAgICA3LjEuNC4gVGhlIElO UFVUIE1hdGNoIFJlc3VsdAorCisgICBUaGUgcmVzdWx0IG9mIGFueSBJTlBVVCwgTUlOUFVULCBv ciBSRUlOUFVUIGNvbW1hbmQsIG5vIG1hdHRlciB3aGV0aGVyCisgICB0aGUgc2VhcmNoIHRhcmdl dHMgYXJlIHBhdHRlcm5zIG9yIGxpdGVyYWwgc3RyaW5ncywgaXMgYXZhaWxhYmxlIGluIHRoZQor ICAgbmV3IFx2KGlubWF0Y2gpIHZhcmlhYmxlLiBGb3IgZXhhbXBsZToKKworICBtaW5wdXQgMTAg Y2F0IFxmcGF0dGVybihbZGhdb2cpCisgIGlmIHN1Y2Nlc3MgZWNobyBNSU5QVVQgbWF0Y2hlZCAi XHYoaW5tYXRjaCkiCisKKyAgIFRoaXMgaXMgZXNwZWNpYWxseSB1c2VmdWwgd2hlbiBhIHBhdHRl cm4gd2FzIG1hdGNoZWQsIHNpbmNlIGl0IG1ha2VzCisgICB0aGUgc3RyaW5nIHRoYXQgbWF0Y2hl ZCB0aGUgcGF0dGVybiBhdmFpbGFibGUgdG8gS2VybWl0OyB0aGVyZSB3b3VsZCBiZQorICAgbm8g d2F5IHRvIGdldCBpdCBvdGhlcndpc2UuCisKKyAgIEFmdGVyIGFuIElOUFVUIGNvbW1hbmQsIHlv dSBjYW4gdmlldyBhbGwgdGhlIElOUFVULXJlbGF0ZWQgdmFyaWFibGVzIGJ5CisgICB0eXBpbmcg InNob3cgdmFyaWFibGVzIGluIiAoYWJicmV2aWF0ZSBhcyAic2hvIHZhciBpbiIpLCB3aGljaCBz aG93cworICAgdGhlIHZhbHVlcyBvZiBhbGwgYnVpbHQtaW4gdmFyaWFibGVzIHdob3NlIG5hbWVz IHN0YXJ0IHdpdGggImluIi4KKworICA3LjIuIE5ldyBvciBJbXByb3ZlZCBCdWlsdC1JbiBWYXJp YWJsZXMKKworICAgXHYoYmxvY2tjaGVjaykKKyAgICAgICAgICBDdXJyZW50IEJMT0NLLUNIRUNL IHNldHRpbmcsIDEsIDIsIDMsIG9yIDQuIDQgaXMgdGhlIGNvZGUgZm9yCisgICAgICAgICAgQkxB TkstRlJFRS0yLgorCisgICBcdihieXRlb3JkZXIpCisgICAgICAgICAgVGhlIG1hY2hpbmUncyBi eXRlIG9yZGVyOiAwID0gQmlnIEVuZGlhbiwgMSA9IExpdHRsZSBFbmRpYW4uCisKKyAgIFx2KGNt ZGJ1ZnNpemUpCisgICAgICAgICAgVGhlIGxlbmd0aCBvZiB0aGUgY29tbWFuZCBidWZmZXIsIHdo aWNoIGlzIHRoZSBtYXhpbXVtIHNpemUgZm9yCisgICAgICAgICAgYSBtYWNybywgYSBjb21tYW5k LCBhIHZhcmlhYmxlLCBvciBhbnl0aGluZyBlbHNlIGluIEMtS2VybWl0J3MKKyAgICAgICAgICBz Y3JpcHQgbGFuZ3VhZ2UuCisKKyAgIFx2KGN0dHkpCisgICAgICAgICAgVGhlIGRldmljZSBuYW1l IG9mIEMtS2VybWl0J3MgY29udHJvbGxpbmcgKGxvZ2luKSB0ZXJtaW5hbC4KKworICAgXHYoZmls ZW5hbWUpCisgICAgICAgICAgRGVzY3JpYmVkIGluIFs1NjNdU2VjdGlvbnMgNC4xIGFuZCBbNTY0 XTQuMi4KKworICAgXHYoZmlsZW51bWJlcikKKyAgICAgICAgICBEZXNjcmliZWQgaW4gWzU2NV1T ZWN0aW9ucyA0LjEgYW5kIFs1NjZdNC4yLgorCisgICBcdihmaWxlc3BlYykKKyAgICAgICAgICBB cyBvZiBDLUtlcm1pdCA3LjAsIGNvbnRhaW5zIGZ1bGx5IHF1YWxpZmllZCBmaWxlbmFtZXMgcmF0 aGVyCisgICAgICAgICAgdGhhbiAodXN1YWxseSkgcmVsYXRpdmUgb25lcy4KKworICAgXHYocmV0 dXJuKQorICAgICAgICAgIE5vdyBob2xkcyB0aGUgRU5EIG4gdmFsdWUgb2YgdGhlIG1hY3JvIHRo YXQgbW9zdCByZWNlbnRseQorICAgICAgICAgIHJldHVybmVkLCBpbiBjYXNlIEVORCB3YXMgdXNl ZCByYXRoZXIgdGhhbiBSRVRVUk4uCisKKyAgIFx2KGVkaXRvcikKKyAgICAgICAgICBQYXRobmFt ZSBvZiBwcmVmZXJyZWQgdGV4dCBlZGl0b3IKKworICAgXHYoZWRpdG9wdHMpCisgICAgICAgICAg Q29tbWFuZC1saW5lIG9wdGlvbnMgZm9yIGVkaXRvcgorCisgICBcdihlZGl0ZmlsZSkKKyAgICAg ICAgICBGaWxlIG1vc3QgcmVjZW50bHkgZWRpdGVkCisKKyAgIFx2KGJyb3dzZXIpCisgICAgICAg ICAgUGF0aG5hbWUgb2YgcHJlZmVycmVkIFdlYiBicm93c2VyCisKKyAgIFx2KGJyb3dzb3B0cykK KyAgICAgICAgICBDb21tYW5kLWxpbmUgb3B0aW9ucyBmb3IgV2ViIGJyb3dzZXIKKworICAgXHYo YnJvd3N1cmwpCisgICAgICAgICAgVVJMIG1vc3QgcmVjZW50bHkgZ2l2ZW4gdG8gV2ViIGJyb3dz ZXIKKworICAgXHYoZGlhbHR5cGUpCisgICAgICAgICAgVHlwZSBvZiBjYWxsIG1vc3QgcmVjZW50 bHkgcGxhY2VkIChzZWUgWzU2N11TZWN0aW9uIDIuMS4xMSkuCisKKyAgIFx2KGtiY2hhcikKKyAg ICAgICAgICBUaGUgY2hhcmFjdGVyLCBpZiBhbnksIHRoYXQgd2FzIHR5cGVkIGF0IHRoZSBrZXli b2FyZCB0byB0bworICAgICAgICAgIGludGVycnVwdCB0aGUgbW9zdCByZWNlbnQgUEFVU0UsIFNM RUVQLCBXQUlULCBNU0xFRVAsIG9yIElOUFVUCisgICAgICAgICAgY29tbWFuZDsgZW1wdHkgaWYg dGhlIG1vc3QgcmVjZW50IHN1Y2ggY29tbWFuZCB3YXMgbm90CisgICAgICAgICAgaW50ZXJydXB0 ZWQgZnJvbSB0aGUga2V5Ym9hcmQuCisKKyAgIFx2KGxvY2tkaXIpCisgICAgICAgICAgVU5JWCBv bmx5IC0gVGhlIG5hbWUgb2YgdGhlIFVVQ1AgbG9ja2ZpbGUgZGlyZWN0b3J5LCBpZiBrbm93biwK KyAgICAgICAgICBvdGhlcndpc2UgIih1bmtub3duKSIuCisKKyAgIFx2KGxvY2twaWQpCisgICAg ICAgICAgVU5JWCBvbmx5IC0gUElEIG9mIHByb2Nlc3MgdGhhdCBvd25zIHRoZSBjb21tdW5pY2F0 aW9uIHBvcnQgdGhhdAorICAgICAgICAgIHlvdSB0cmllZCB0byBvcGVuIHdpdGggYSBTRVQgTElO RSBjb21tYW5kIHRoYXQgZmFpbGVkIGJlY2F1c2UKKyAgICAgICAgICB0aGUgcG9ydCB3YXMgaW4g dXNlLCBvdGhlcndpc2UgZW1wdHkuIFRoaXMgdmFyaWFibGUgaXMgc2V0IHdpdGgKKyAgICAgICAg ICBldmVyeSBTRVQgTElORSBjb21tYW5kLgorCisgICBcdihjeF90aW1lKQorICAgICAgICAgIElm IG5vIGNvbm5lY3Rpb24gKFNFVCBIT1NULCBTRVQgTElORSwgRElBTCwgVEVMTkVULCBldGMpIGlz CisgICAgICAgICAgYWN0aXZlLCB0aGlzIGlzIDAuIElmIGEgY29ubmVjdGlvbiBpcyBhY3RpdmUs IHRoaXMgaXMgdGhlIG51bWJlcgorICAgICAgICAgIG9mIHNlY29uZHMgc2luY2UgdGhlIGNvbm5l Y3Rpb24gd2FzIG1hZGUuCisKKyAgIFx2KGh3cGFyaXR5KQorICAgICAgICAgIElmIGhhcmR3YXJl IHBhcml0eSBpcyBpbiBlZmZlY3QsIHRoaXMgdmFyaWFibGUgZ2l2ZXMgaXRzIHZhbHVlLAorICAg ICAgICAgIHN1Y2ggYXMgImV2ZW4iIG9yICJvZGQiIChpbiB3aGljaCBjYXNlLCB0aGUgXHYocGFy aXR5KSB2YXJpYWJsZQorICAgICAgICAgIHdpbGwgYmUgIm5vbmUiKS4gT3RoZXJ3aXNlIHRoaXMg dmFyaWFibGUgaXMgZW1wdHkuCisKKyAgIFx2KHNlcmlhbCkKKyAgICAgICAgICBDdXJyZW50IHNl cmlhbCBwb3J0IHNldHRpbmdzIGluIDhOMSBmb3JtYXQgKFs1NjhdU2VjdGlvbiAyLjEwKS4KKwor ICAgXHYoZXJybm8pCisgICAgICAgICAgSW4gVU5JWCwgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhl IEMgcnVudGltZSBlcnJubyB2YXJpYWJsZSwKKyAgICAgICAgICB3aGljaCBpcyBxdWl0ZSB2b2xh dGlsZSAobWVhbmluZyB0aGF0IG9mdGVuIGFuICJpbnRlcmVzdGluZyIKKyAgICAgICAgICBlcnJv ciBjb2RlIGNhbiBiZSBvdmVyd3JpdHRlbiBieSBzb21lIG90aGVyIGxpYnJhcnkgY2FsbCBvcgor ICAgICAgICAgIHN5c3RlbSBzZXJ2aWNlIHRoYXQgc2V0cyBlcnJubyBiZWZvcmUgeW91IGhhdmUg YSBjaGFuY2UgdG8gbG9vaworICAgICAgICAgIGF0IGl0KS4gSW4gVk1TLCB0aGUgZXJyb3IgY29k ZSByZXR1cm5lZCBieSB0aGUgc3lzdGVtIG9yIGxpYnJhcnkKKyAgICAgICAgICBjYWxsIHRoYXQg bW9zdCByZWNlbnRseSBmYWlsZWQgKHN1Y2Nlc3MgY29kZXMgYXJlIG5vdCBzYXZlZCkuCisgICAg ICAgICAgTm90IGF2YWlsYWJsZSBpbiBvdGhlciBvcGVyYXRpbmcgc3lzdGVtcy4KKworICAgXHYo ZXJyc3RyaW5nKQorICAgICAgICAgIFRoZSBVTklYIG9yIFZNUyBzeXN0ZW0gZXJyb3IgbWVzc2Fn ZSB0aGF0IGNvcnJlc3BvbmRzIHRvCisgICAgICAgICAgXHYoZXJybm8pLiBOb3QgYXZhaWxhYmxl IGluIGFsbCBPUydzLiBBbHNvIHNlZQorICAgICAgICAgIFs1NjldXGZlcnJzdHJpbmcoKS4KKwor ICAgXHYoc2V0bGluZW1zZykKKyAgICAgICAgICBUaGUgZXJyb3IgbWVzc2FnZSwgaWYgYW55LCBm cm9tIHRoZSBtb3N0IHJlY2VudCBTRVQgTElORSwgU0VUCisgICAgICAgICAgUE9SVCwgU0VUIEhP U1QsIFRFTE5FVCwgb3Igb3RoZXIgY29ubmVjdGlvbi1tYWtpbmcgY29tbWFuZC4gVGhpcworICAg ICAgICAgIGlzIG5vdCBuZWNlc3NhcmlseSB0aGUgc2FtZSBhcyBcdihlcnJzdHJpbmcpIHNpbmNl IHRoZXNlCisgICAgICAgICAgY29tbWFuZHMgbWlnaHQgZmFpbCB3aXRob3V0IGdlbmVyYXRpbmcg YSBzeXN0ZW0gZXJyb3IgY29kZSwgZm9yCisgICAgICAgICAgZXhhbXBsZSAoaW4gVU5JWCkgYmVj YXVzZSBhIGxvY2tmaWxlIGV4aXN0ZWQgaW5kaWNhdGluZyB0aGUKKyAgICAgICAgICBkZXZpY2Ug d2FzIGFzc2lnbmVkIGJ5IGFub3RoZXIgdXNlci4KKworICAgXHYoZXhpdHN0YXR1cykKKyAgICAg ICAgICBUaGUgZXhpdCBzdGF0dXMgQy1LZXJtaXQgd291bGQgcmV0dXJuIGlmIGl0IGV4aXRlZCBu b3cuCisKKyAgIFx2KHBleGl0c3RhdCkKKyAgICAgICAgICBUaGUgZXhpdCBzdGF0dXMgb2YgdGhl IGluZmVyaW9yIHByb2Nlc3MgbW9zdCByZWNlbnRseSBpbnZva2VkIGJ5CisgICAgICAgICAgQy1L ZXJtaXQgKGJ5IFJVTiwgISwgUkVESVJFQ1QsIFNFTkQgL0NPTU1BTkQsIGV0YykuIEluIFZNUywg dGhpcworICAgICAgICAgIGNvZGUgY2FuIGJlIGdpdmVuIHRvIFxmZXJyc3RyaW5nKCkgdG8gZ2V0 IHRoZSBjb3JyZXNwb25kaW5nCisgICAgICAgICAgZXJyb3IgbWVzc2FnZSAoaW4gVU5JWCwgcHJv Z3JhbS9jb21tYW5kIHJldHVybiBjb2RlcyBhcmUgbm90IHRoZQorICAgICAgICAgIHNhbWUgYXMg c3lzdGVtIGVycm9yIGNvZGVzKS4gTm90IGF2YWlsYWJsZSBpbiBvcGVyYXRpbmcgc3lzdGVtcwor ICAgICAgICAgIG90aGVyIHRoYW4gVU5JWCBhbmQgVk1TLiBTZWUgWzU3MF1TZWN0aW9uIDQuMi41 IGZvciBkZXRhaWxzLgorCisgICBcdihpbm1hdGNoKQorICAgICAgICAgIFRoZSBpbmNvbWluZyBz dHJpbmcgb2YgY2hhcmFjdGVycywgaWYgYW55LCB0aGF0IG1hdGNoZWQgdGhlIG1vc3QKKyAgICAg ICAgICByZWNlbnQgSU5QVVQsIFJFSU5QVVQsIG9yIE1JTlBVVCBjb21tYW5kLgorCisgICBcdihp bnRpbWUpCisgICAgICAgICAgVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgKHRob3VzYW5kdGhz IG9mIHNlY29uZHMpIGl0IHRvb2sgZm9yCisgICAgICAgICAgdGhlIG1vc3QgcmVjZW50IElOUFVU IGNvbW1hbmQgdG8gZmluZCBpdHMgbWF0Y2gsIG9yIC0xIGlmIG5vCisgICAgICAgICAgSU5QVVQg Y29tbWFuZCBoYXMgYmVlbiBnaXZlbiB5ZXQuIElmIHRoZSBJTlBVVCBjb21tYW5kIHRpbWVkCisg ICAgICAgICAgb3V0LCB0aGUgdmFsdWUgaXMgYXBwcm94aW1hdGVseSBlcXVhbCB0byAxMDAwIHRp bWVzIHRoZSBJTlBVVAorICAgICAgICAgIHRpbWVvdXQuIElmIElOUFVUIGZhaWxlZCBmb3Igc29t ZSBvdGhlciByZWFzb24sIHRoZSB2YWx1ZSBpcworICAgICAgICAgIHVuZGVmaW5lZCAoXHYoaW5z dGF0dXMpIGdpdmVzIElOUFVUIGNvbXBsZXRpb24gc3RhdHVzKS4gSWYgeW91cgorICAgICAgICAg IHZlcnNpb24gb2YgQy1LZXJtaXQgaXMgYnVpbHQgd2l0aG91dCBoaWdoLXByZWNpc2lvbgorICAg ICAgICAgIGZsb2F0aW5nLXBvaW50IHRpbWVycywgdGhpcyBudW1iZXIgd2lsbCBhbHdheXMgYmUg YSBtdWx0aXBsZSBvZgorICAgICAgICAgIDEwMDAuCisKKyAgIFx2KGlud2FpdCkKKyAgICAgICAg ICBUaGUgbnVtYmVyIG9mIHNlY29uZHMgc3BlY2lmaWVkIGFzIHRoZSB0aW1lb3V0IGluIHRoZSBt b3N0CisgICAgICAgICAgcmVjZW50IElOUFVUIGNvbW1hbmQuCisKKyAgIFx2KGRpYWxzdWZmaXgp CisgICAgICAgICAgRGlhbGluZyBzdWZmaXggZm9yIHVzZSBkdXJpbmcgUERJQUwgc2VxdWVuY2U7 IHNlZSBbNTcxXVNlY3Rpb24KKyAgICAgICAgICAyLjEuMTAuCisKKyAgIFx2KHBpZCkKKyAgICAg ICAgICBVTklYLCBWTVMsIGFuZCBLOTUgb25seS4gQy1LZXJtaXQncyBwcmltYXJ5IHByb2Nlc3Mg SUQsIG51bWVyaWMsCisgICAgICAgICAgZGVjaW1hbC4gSWYgeW91IHdhbnQgdG8gc2hvdyBpdCBp biBoZXgsIHVzZSBcZm4yaGV4KFx2KHBpZCkpIElmCisgICAgICAgICAgeW91IHdhbnQgdG8gc2hv dyBpdCBpbiBvY3RhbCwgdXNlIFxmbjJvY3RhbChcdihwaWQpKS4KKworICAgXHYocHJpbnRlcikK KyAgICAgICAgICBDdXJyZW50IHByaW50ZXIgbmFtZSBvciBTRVQgUFJJTlRFUiB2YWx1ZS4KKwor ICAgXHYocF9jdGwpCisgICAgICAgICAgQ29udHJvbCBwcmVmaXggY2hhciBcdihwXzhiaXQpIDgt Yml0IHByZWZpeCBjaGFyIChpZiBwYXJpdHkgbm90CisgICAgICAgICAgbm9uZSkKKworICAgXHYo cF9ycHQpCisgICAgICAgICAgUmVwZWF0IHByZWZpeCBjaGFyIChpZiByZXBlYXQgY29tcHJlc3Np b24gZW5hYmxlZCkKKworICAgXHYoaGVyYWxkKQorICAgICAgICAgIEtlcm1pdCdzIHZlcnNpb24g aGVyYWxkCisKKyAgIFx2KHRlc3QpCisgICAgICAgICAgS2VybWl0J3MgdGVzdCB2ZXJzaW9uLCBp ZiBhbnksIG9yIDAgaWYgdGhpcyBpcyBub3QgYSB0ZXN0CisgICAgICAgICAgdmVyc2lvbi4gVHlw aWNhbCB2YWx1ZXMgZm9yIHRlc3QgdmVyc2lvbnMgYXJlICJBbHBoYS4wMyIgb3IKKyAgICAgICAg ICAiQmV0YS4xNCIuCisKKyAgIFx2KHNlbmRsaXN0KQorICAgICAgICAgIFRoZSBudW1iZXIgb2Yg ZW50cmllcyBpbiB0aGUgU0VORC1MSVNULCAwIGlmIG5vbmUuIE5vdGU6IGVudHJpZXMKKyAgICAg ICAgICBkbyBub3QgbmVjZXNzYXJpbHkgY29ycmVzcG9uZCB0byBmaWxlcywgc2luY2UgYW4gZW50 cnkgbWlnaHQKKyAgICAgICAgICBjb250YWluIHdpbGRjYXJkcy4gQWxzbyBub3RlIHRoYXQgdGhl IHZhbHVlIGRvZXMgbm90IGdvIGJhY2sgdG8KKyAgICAgICAgICAwIGFmdGVyIHRoZSBmaWxlcyBp biB0aGUgbGlzdCBhcmUgc2VudC4gVG8gcmVzZXQgdGhpcyB2YXJpYWJsZSwKKyAgICAgICAgICB1 c2UgQ0xFQVIgU0VORC1MSVNULiBUaGUgcHVycG9zZSBvZiB0aGlzIHZhcmlhYmxlIGlzIHRvCisg ICAgICAgICAgZGV0ZXJtaW5lIGlmIGEgU0VORCBjb21tYW5kLCB3aGVuIGdpdmVuIHdpdGhvdXQg YW55IGZpbGVuYW1lcywKKyAgICAgICAgICB3aWxsIGJlIGxlZ2FsLiBFeGFtcGxlOgorCisgIHhp ZiBcdihzZW5kbGlzdCkgeyBzZW5kIH0gZWxzZSB7IHNlbmQgb29mYS50eHQgfQorCisgICBcdih0 cmlnZ2VyKQorICAgICAgICAgIElmIHRoZSBtb3N0IHJlY2VudCBDT05ORUNUIHNlc3Npb24gd2Fz IHRlcm1pbmF0ZWQgYXV0b21hdGljYWxseQorICAgICAgICAgIGJ5IGEgdHJpZ2dlciwgdGhpcyB2 YXJpYWJsZSBjb250YWlucyB0aGUgdHJpZ2dlciB2YWx1ZS4KKworICAgXHYodHlfbG4pCisgICAg ICAgICAgVFlQRSBsaW5lIG51bWJlciAoZHVyaW5nIFRZUEUpCisKKyAgIFx2KHR5X2xjKQorICAg ICAgICAgIFRZUEUgbGluZSBjb3VudCAoYWZ0ZXIgVFlQRSkKKworICAgXHYodHlfbWMpCisgICAg ICAgICAgVFlQRSBtYXRjaCBjb3VudCAoYWZ0ZXIgVFlQRSkKKworICAgXHYoeGZlcnN0YXQpCisg ICAgICAgICAgU3RhdHVzIG9mIG1vc3QgcmVjZW50IGZpbGUgdHJhbnNmZXI6CisKKy0xOiBObyB0 cmFuc2ZlciB5ZXQKKyAwOiBTdWNjZWVkZWQKKyAxOiBGYWlsZWQKKworICAgXHYoeGZlcm1zZykK KyAgICAgICAgICBJZiB0aGUgbW9zdCByZWNlbnQgZmlsZSB0cmFuc2ZlciBmYWlsZWQsIHRoaXMg aXMgdGhlIHJlYXNvbi4gSWYKKyAgICAgICAgICBpdCBzdWNjZWVkZWQsIFx2KHhmZXJtc2cpIGlz IGFuIGVtcHR5IHN0cmluZy4KKworICAgXHYodGZ0aW1lKQorICAgICAgICAgIFRvdGFsIGVsYXBz ZWQgdGltZSBvZiBtb3N0IHJlY2VudCBmaWxlIHRyYW5zZmVyIG9wZXJhdGlvbiwgaW4KKyAgICAg ICAgICBzZWNvbmRzLgorCisgICBcdih0ZXh0ZGlyKQorICAgICAgICAgIERpcmVjdG9yeSB0aGF0 IGhvbGRzIChvciBpcyBzdXBwb3NlZCB0byBob2xkKSBLZXJtaXQgdGV4dCBmaWxlcworICAgICAg ICAgIHN1Y2ggYXMgaW5zdGFsbGF0aW9uIGluc3RydWN0aW9ucywgcmVsZWFzZSBub3RlcywgdXBk YXRlIG5vdGVzLAorICAgICAgICAgIHJlYWQtbWUgZmlsZXMsICJiZXdhcmUiIGZpbGVzLCBldGMu CisKKyAgIFx2KG5hbWUpCisgICAgICAgICAgVGhlIG5hbWUgd2l0aCB3aGljaCB0aGUgS2VybWl0 IHByb2dyYW0gd2FzIGludm9rZWQsIGUuZy4KKyAgICAgICAgICAia2VybWl0IiwgIndlcm1pdCIs ICJrOTUiLCAiazIiLCBldGMgKHNlZSBbNTcyXVNlY3Rpb24gOS4xKS4KKworICAgXHYob3NuYW1l KQorICAgICAgICAgIE5hbWUgb2Ygb3BlcmF0aW5nIHN5c3RlbSBvbiBjb21wdXRlciB3aGVyZSBD LUtlcm1pdCBpcyBydW5uaW5nLAorICAgICAgICAgIG9idGFpbmVkIGF0IHJ1bnRpbWUgKGZyb20g dW5hbWUgb3IgZXF1aXZhbGVudCkuCisKKyAgIFx2KG9zdmVyc2lvbikKKyAgICAgICAgICBWZXJz aW9uIG9mIG9wZXJhdGluZyBzeXN0ZW0gb24gY29tcHV0ZXIgd2hlcmUgQy1LZXJtaXQgaXMKKyAg ICAgICAgICBydW5uaW5nLCBvYnRhaW5lZCBhdCBydW50aW1lIChmcm9tIHVuYW1lIG9yIGVxdWl2 YWxlbnQpLgorCisgICBcdihvc3JlbGVhc2UpCisgICAgICAgICAgUmVsZWFzZSBvZiBvcGVyYXRp bmcgc3lzdGVtIG9uIGNvbXB1dGVyIHdoZXJlIEMtS2VybWl0IGlzCisgICAgICAgICAgcnVubmlu Zywgb2J0YWluZWQgYXQgcnVudGltZSAoZnJvbSB1bmFtZSBvciBlcXVpdmFsZW50KS4KKworICAg XHYobW9kZWwpCisgICAgICAgICAgVGhlIHNwZWNpZmljIGhhcmR3YXJlIG1vZGVsIG9mIHRoZSBj b21wdXRlciB3aGVyZSBDLUtlcm1pdCBpcworICAgICAgICAgIHJ1bm5pbmcsIGlmIGtub3duLgor CisgICBcdihtYXRoX3BpKQorICAgICAgICAgIFRoZSB2YWx1ZSBvZiBQaSAoc2VlIFs1NzNdU2Vj dGlvbiA3LjIzKQorCisgICBcdihtYXRoX2UpCisgICAgICAgICAgVGhlIHZhbHVlIG9mIGUgKHNl ZSBbNTc0XVNlY3Rpb24gNy4yMykKKworICAgXHYobWF0aF9wcmVjaXNpb24pCisgICAgICAgICAg SG93IG1hbnkgc2lnbmlmaWNhbnQgZGlnaXRzIGluIGEgZmxvYXRpbmctcG9pbnQgbnVtYmVyLgor CisgICBcdihmX2NvdW50KQorICAgICAgICAgIFJlc3VsdCBvZiB0aGUgbW9zdCByZWNlbnQgRklM RSBDT1VOVCAoRkNPVU5UKSBjb21tYW5kLgorCisgICBcdihmX2Vycm9yKQorICAgICAgICAgIE51 bWVyaWMgZXJyb3IgY29kZSBvZiBtb3N0IHJlY2VudCBGSUxFIGNvbW1hbmQuCisKKyAgIFx2KGZf bWF4KQorICAgICAgICAgIE1heGltdW0gbnVtYmVyIG9mIGZpbGVzIG9wZW4gc2ltdWx0YW5lb3Vz bHkuCisKKyAgIFRoZSBtYXRoIGNvbnN0YW50cyBhcmUgZ2l2ZW4gaW4gdGhlIHByZWNpc2lvbiBv ZiB1bmRlcmx5aW5nIGNvbXB1dGVyJ3MKKyAgIGZsb2F0aW5nLXBvaW50IGFyaXRobWV0aWMuCisK KyAgIE5vdGUgdGhlIGRpc3RpbmN0aW9uIGJldHdlZW4gXHYob3NuYW1lKSwgXHYob3N2ZXJzaW9u KSwgYW5kCisgICBcdihwbGF0Zm9ybSk7IHRoZSBsYXR0ZXIgcmVmZXJzIHRvIHRoZSBwbGF0Zm9y bSBmb3Igd2hpY2ggYW5kL29yIHVwb24KKyAgIHdoaWNoIEMtS2VybWl0IHdhcyBidWlsdCwgYXMg b3Bwb3NlZCB0byB0aGUgb25lIG9uIHdoaWNoIGl0IGlzIGFjdHVhbGx5CisgICBydW5uaW5nLiBB bHNvIG5vdGUgdGhhdCBlYWNoIG9wZXJhdGluZyBzeXN0ZW0gY2FuLCBhbmQgcHJvYmFibHkgd2ls bCwKKyAgIGludGVycHJldCBhbmQgZmlsbCBpbiB0aGUgb3MqIHZhcmlhYmxlcyBkaWZmZXJlbnRs eSwgb3Igbm90IGF0IGFsbC4KKworICAgVGhlIFNIT1cgVkFSSUFCTEVTIGNvbW1hbmQgbm93IGFj Y2VwdHMgYSB2YXJpYWJsZSBuYW1lLCBwcmVmaXgsIG9yCisgICBwYXR0ZXJuOgorCisgIHNob3cg dmFyaWFibGVzICAgICAgICAgU2hvd3MgYWxsIHZhcmlhYmxlcy4KKyAgc2hvdyB2YXJpYWJsZXMg dCAgICAgICBTaG93cyBhbGwgdmFyaWFibGVzIHRoYXQgc3RhcnQgd2l0aCAidCIuCisgIHNob3cg dmFyaWFibGVzICp2ZXIqICAgU2hvd3MgYWxsIHZhcmlhYmxlcyB3aG9zZSBuYW1lcyBjb250YWlu ICJ2ZXIiLgorICBzaG93IHZhcmlhYmxlcyAqdmVyICAgIERpdHRvIChhbiBpbXBsaWVkICIqIiBp cyBhcHBlbmRlZCkuCisKKyAgNy4zLiBOZXcgb3IgSW1wcm92ZWQgQnVpbHQtSW4gRnVuY3Rpb25z CisKKyAgIFRoZSBmb2xsb3dpbmcgbmV3IGZpbGUtaS9vIGZ1bmN0aW9ucyBhcmUgZXhwbGFpbmVk IGluIFs1NzVdU2VjdGlvbgorICAgMS4yMi4KKworICBcZl9zdGF0dXMoY2hhbm5lbCkgICAgICAg ICAgIFN0YXR1cyBvZiBmaWxlIG9wZW4gb24gY2hhbm5lbAorICBcZl9wb3MoY2hhbm5lbCkgICAg ICAgICAgICAgIFJlYWQvd3JpdGUgKGJ5dGUpIHBvaW50ZXIgb2YgZ2l2ZW4gZmlsZQorICBcZl9s aW5lKGNoYW5uZWwpICAgICAgICAgICAgIEN1cnJlbnQgbGluZSBvZiBmaWxlCisgIFxmX2hhbmRs ZShjaGFubmVsKSAgICAgICAgICAgSGFuZGxlIG9mIGZpbGUKKyAgXGZfZW9mKGNoYW5uZWwpICAg ICAgICAgICAgICBXaGV0aGVyIGdpdmVuIGZpbGUgaXMgYXQgRU9GCisgIFxmX2dldGNoYXIoY2hh bm5lbCkgICAgICAgICAgUmVhZCBhIGNoYXIgZnJvbSBnaXZlbiBmaWxlCisgIFxmX2dldGxpbmUo Y2hhbm5lbCkgICAgICAgICAgUmVhZCBhIGxpbmUgZnJvbSBnaXZlbiBmaWxlCisgIFxmX2dldGJs b2NrKGNoYW5uZWwsbikgICAgICAgUmVhZCBhIGJsb2NrIGZyb20gZ2l2ZW4gZmlsZQorICBcZl9w dXRjaGFyKGNoYW5uZWwsYykgICAgICAgIFdyaXRlIGEgY2hhciB0byBnaXZlbiBmaWxlCisgIFxm X3B1dGxpbmUoY2hhbm5lbCxzdHJpbmcpICAgV3JpdGUgYSBsaW5lIHRvIGdpdmVuIGZpbGUKKyAg XGZfcHV0YmxvY2soY2hhbm5lbCxzdHJpbmcpICBXcml0ZSBhIGJsb2NrIHRvIGdpdmVuIGZpbGUK KworICAgVGhlIGZvbGxvd2luZyBuZXcgZGF0ZS10aW1lLXJlbGF0ZWQgZnVuY3Rpb25zIGFyZSBl eHBsYWluZWQgaW4KKyAgIFs1NzZdU2VjdGlvbiAxLjY6CisKKyAgXGZkYXkoKSAgICAgICAgICAg ICAgICBSZXR1cm5zIGRheSBvZiB3ZWVrIG9mIGdpdmVuIGRhdGUKKyAgXGZuZGF5KCkgICAgICAg ICAgICAgICBSZXR1cm5zIG51bWVyaWMgZGF5IG9mIHdlZWsgb2YgZ2l2ZW4gZGF0ZQorICBcZnRp bWUoKSAgICAgICAgICAgICAgIFJldHVybnMgdGltZSBwb3J0aW9uIG9mIGdpdmVuIGRhdGUtdGlt ZQorICBcZm50aW1lKCkgICAgICAgICAgICAgIENvbnZlcnRzIHRpbWUgdG8gc2Vjb25kcyBzaW5j ZSBtaWRuaWdodAorICBcZm4ydGltZSgpICAgICAgICAgICAgIENvbnZlcnRzIHNlY29uZHMgc2lu Y2UgbWlkbmlnaHQgdG8gaGg6bW06c3MKKyAgXGZjdnRkYXRlKGRhdGUtdGltZSkgICBDb252ZXJ0 cyBmcmVlLWZvcm1hdCBkYXRlIHRvIHl5eXltbWRkIGhoOm1tOnNzCisgIFxmZGF5b2Z5ZWFyKGRh dGUtdGltZSkgQ29udmVydHMgZGF0ZSB0byB5eXl5ZGRkIChkYXktb2YteWVhcikgZm9ybWF0Cisg IFxmZG95KGRhdGUtdGltZSkgICAgICAgU3lub255bSBmb3IgXGZkYXlvZnllYXIoKQorICBcZmRv eTJkYXRlKGRheW9meWVhcikgIENvbnZlcnRzIHl5eXlkZGQgdG8geXl5eW1tZGQKKyAgXGZtamQo ZGF0ZS10aW1lKSAgICAgICBDb252ZXJ0cyBmcmVlLWZvcm1hdCBkYXRlIHRvIE1vZGlmaWVkIEp1 bGlhbiBEYXRlCisgIFxmbWpkMmRhdGUobWpkKSAgICAgICAgQ29udmVydHMgbW9kaWZpZWQgSnVs aWFuIGRhdGUgdG8geXl5eW1tZGQKKworICAgVGhlIG5ldyBmbG9hdGluZy1wb2ludCBhcml0aG1l dGljIGZ1bmN0aW9ucyBhcmUgZXhwbGFpbmVkIGluCisgICBbNTc3XVNlY3Rpb24gNy4yMy4gZjEg YW5kIGYyIGFyZSBmbG9hdGluZy1wb2ludCAocmVhbCkgbnVtYmVyczsgZCBpcworICAgdGhlIG51 bWJlciBvZiBkZWNpbWFsIHBsYWNlcyB0byBzaG93OgorCisgIFxmZnBhYnNvbHV0ZShmMSxkKSAg ICAgQWJzb2x1dGUgdmFsdWUgb2YgZjEKKyAgXGZmcGFkZChmMSxmMixkKSAgICAgICBmMSArIGYx CisgIFxmZnBjb3NpbmUoZjEsZCkgICAgICAgQ29zaW5lIG9mIGYxCisgIFxmZnBkaXZpZGUoZjEs ZjIsZCkgICAgZjEgZGl2aWRlZCBieSBmMgorICBcZmZwZXhwKGYxLGQpICAgICAgICAgIGUgdG8g dGhlIGYxIHBvd2VyCisgIFxmZnBpbnQoZjEpICAgICAgICAgICAgSW50ZWdlciBwYXJ0IG9mIGYx CisgIFxmZnBsb2cxMChmMSxkKSAgICAgICAgTG9nIGJhc2UgMTAgb2YgZjEKKyAgXGZmcGxvZ24o ZjEsZCkgICAgICAgICBOYXR1cmFsIGxvZyBvZiBmMQorICBcZmZwbWF4aW11bShmMSxmMixkKSAg IE1heGltdW0gb2YgZjEgYW5kIGYyCisgIFxmZnBtaW5pbXVtKGYxLGYyLGQpICAgTWluaW11bSBv ZiBmMSBhbmQgZjIKKyAgXGZmcG1vZHVsdXMoZjEsZjIsZCkgICBNb2R1bHVzIG9mIGYxIGFuZCBm MgorICBcZmZwbXVsdGlwbHkoZjEsZjIsZCkgIFByb2R1Y3Qgb2YgZjEgYW5kIGYyCisgIFxmZnBy YWlzZShmMSxmMixkKSAgICAgUmFpc2UgZjEgdG8gcG93ZXIgZjIKKyAgXGZmcHJvdW5kKGYxLGQp ICAgICAgICBSb3VuZCBmMSB0byBkIHBsYWNlcworICBcZmZwc2luZShmMSxkKSAgICAgICAgIFNp bmUgb2YgZjEKKyAgXGZmcHNxcnQoZjEsZCkgICAgICAgICBTcXVhcmUgcm9vdCBvZiBmMQorICBc ZmZwc3VidHJhY3QoZjEsZjIsZCkgIGYyIC0gZjEKKyAgXGZmcHRhbmdlbnQoZjEsZCkgICAgICBU YW5nZW50IG9mIGYxCisKKyAgIEludGVnZXIgbnVtYmVyIGZ1bmN0aW9uczoKKworICAgXGZhYnNv bHV0ZShuKQorICAgICAgICAgIEFic29sdXRlIHZhbHVlIG9mIGludGVnZXIgbi4KKworICAgXGZy YW5kb20obikKKyAgICAgICAgICBSZXR1cm5zIGEgcmFuZG9tIGludGVnZXIgYmV0d2VlbiAwIGFu ZCBuLTEuCisKKyAgIFxmcmFkaXgocyxuMSxuMikKKyAgICAgICAgICBJZiB0aGUgc3RyaW5nIHMg aXMgYW4gaW50ZWdlciBpbiByYWRpeCBuMSwgdGhlIHJlc3VsdCBpcyB0aGUKKyAgICAgICAgICBz YW1lIG51bWJlciBleHByZXNzZWQgaW4gcmFkaXggbjIsIHdoZXJlIG4xIGFuZCBuMiBtYXkgYmUg YW55CisgICAgICAgICAgbnVtYmVyIGZyb20gMiB0aHJvdWdoIDM2LCBleHByZXNzZWQgYXMgZGVj aW1hbCBudW1iZXJzLCBvcgorICAgICAgICAgIHZhcmlhYmxlcyAoZXRjKSB0aGF0IGV2YWx1YXRl IHRvIGRlY2ltYWwgbnVtYmVycy4gRm9yIHRoZSBzb3VyY2UKKyAgICAgICAgICBhbmQgcmVzdWx0 LCB0aGUgZGlnaXRzIG9mIGFueSByYWRpeCwgciwgYXJlIHRoZSBmaXJzdCByCisgICAgICAgICAg Y2hhcmFjdGVycyBpbiB0aGUgc2VxdWVuY2UgMC05LGEteiAoY2FzZSBkb2Vzbid0IG1hdHRlciBm b3IgdGhlCisgICAgICAgICAgbGV0dGVycykuIFRoZSBzdHJpbmcgcyBtYXkgaGF2ZSBhIHNpZ24s ICsgb3IgLTsgaWYgaXQgc3RhcnRzCisgICAgICAgICAgd2l0aCBhIG1pbnVzICgtKSBzaWduLCB0 aGUgcmVzdWx0IGFsc28gaGFzIGEgbWludXMgc2lnbi4KKworICAgVGhlIFxmcmFkaXgoKSBmdW5j dGlvbiBkb2VzIG5vdCB3b3JrIHdpdGggZmxvYXRpbmctcG9pbnQgbnVtYmVycy4gSXQKKyAgIGRv ZXMgbm90IHJldmVhbCB0aGUgaW50ZXJuYWwgc3RvcmFnZSBmb3JtYXQgb2YgYSBudW1iZXI7IGZv ciBleGFtcGxlLAorICAgXGZyYWRpeCgtMSwxMCwxNikgaXMgLTEsIG5vdCBzb21ldGhpbmcgbGlr ZSBGRkZGRkZGRkZGLiBJZiBhbGwgdGhyZWUKKyAgIGFyZ3VtZW50cyBhcmUgbm90IGdpdmVuLCBv ciBpZiBuMSBvciBuMiBhcmUgbm90IG51bWJlcnMgYmV0d2VlbiAyIGFuZAorICAgMzYgaW5jbHVz aXZlLCBvciBzIGlzIG5vdCBhIG51bWJlciBpbiByYWRpeCBuMSwgYW4gZXJyb3Igb2NjdXJzIGFu ZCB0aGUKKyAgIGVtcHR5IHN0cmluZyBpcyByZXR1cm5lZC4gXGZyYWRpeCgpIGFsc28gZG9lcyBu b3Qgb2ZmZXIKKyAgIGV4dGVuZGVkLXByZWNpc2lvbiBhcml0aG1ldGljOyBudW1iZXIgdmFsdWVz IGFyZSBsaW1pdGVkIHRvIHRob3NlCisgICBleHByZXNzZWQgYXMgYSBsb25nIGludGVnZXIgaW4g dGhlIGFyY2hpdGVjdHVyZSBvZiB0aGUgdW5kZXJseWluZworICAgY29tcHV0ZXIsIHVzdWFsbHkg MzIgb3IgNjQgYml0cy4gSWYgeW91IGdpdmUgaXQgYW4gYXJndW1lbnQgd2hvc2UKKyAgIGFic29s dXRlIHZhbHVlIGlzIGxhcmdlciB0aGFuIGNhbiBiZSBoZWxkIGluIGFuIHVuc2lnbmVkIGxvbmcs IHRoZQorICAgcmVzdWx0IGlzIC0xLgorCisgICBUaGUgbmV4dCBmb3VyIGFyZSBzaG9ydGhhbmQg ZnVuY3Rpb25zIGZvciBkZWNpbWFsL2hleGFkZWNpbWFsIGFuZAorICAgZGVjaW1hbC9vY3RhbCBu dW1iZXIgY29udmVyc2lvbjoKKworICAgXGZuMmhleChuKQorICAgICAgICAgIFJldHVybnMgdGhl IGhleGFkZWNpbWFsIChiYXNlIDE2KSByZXByZXNlbnRhdGlvbiBvZiB0aGUgaW50ZWdlcgorICAg ICAgICAgIG4uIFRoaXMgaXMgZGlmZmVyZW50IGZyb20gXGZoZXhpZnkocyksIHdoaWNoIHRyZWF0 cyBpdHMgYXJndW1lbnQKKyAgICAgICAgICBhcyBhIHN0cmluZyByYXRoZXIgdGhhbiBhIG51bWJl ci4gVGhlIHJlc3VsdCBpcyBhbHdheXMKKyAgICAgICAgICBsZWZ0LXBhZGRlZCB3aXRoIDAncyB0 byBtYWtlIGl0cyBsZW5ndGggZXZlbi4gRXhhbXBsZXM6CisKKyAgXG4yaGV4KDApICAgPSAiMDAi ICAgICAgICAgICAgICAgICAgICBcZmhleGlmeSgwKSAgID0gIjMwIgorICBcbjJoZXgoMjU1KSA9 ICJmZiIgICAgICAgICAgICAgICAgICAgIFxmaGV4aWZ5KDI1NSkgPSAiMzIzNTM1IgorICBcbjJo ZXgoMjU2KSA9ICIwMTAwIiAgICAgICAgICAgICAgICAgIFxmaGV4aWZ5KDI1NikgPSAiMzIzNTM2 IgorCisgICBcZmhleDJuKHgpCisgICAgICAgICAgQ29udmVydHMgaGV4YWRlY2ltYWwgbnVtYmVy IHggdG8gZGVjaW1hbCBlcXVpdmFsZW50IGRlY2ltYWwKKyAgICAgICAgICBudW1iZXIuIFRoaXMg aXMgdGhlIGludmVyc2Ugb2YgXGZuMmhleCgpLiBFcXVpdmFsZW50IHRvCisgICAgICAgICAgXGZy YWRpeChzLDE2LDEwKS4KKworICAgXGZuMm9jdGFsKG4pCisgICAgICAgICAgUmV0dXJucyB0aGUg b2N0YWwgKGJhc2UgOCkgcmVwcmVzZW50YXRpb24gb2YgdGhlIG51bWJlciBuLgorICAgICAgICAg IEV4YW1wbGVzOgorCisgIFxuMm9jdGFsKDApID0gIjAiCisgIFxuMm9jdCgyNTUpID0gIjM3NyIK KyAgXG4yb2N0KDI1NikgPSAiNDAwIgorICBFcXVpdmFsZW50IHRvIFxmcmFkaXgobiwxMCw4KS4K KworICAgXGZvY3QybihuKQorICAgICAgICAgIFJldHVybnMgdGhlIGRlY2ltYWwgcmVwcmVzZW50 YXRpb24gb2YgdGhlIGdpdmVuIG9jdGFsIG51bWJlciwgbi4KKyAgICAgICAgICBUaGUgaW52ZXJz ZSBvZiBcZm4yb2N0YWwoKS4gRXF1aXZhbGVudCB0byBcZnJhZGl4KG4sOCwxMCkuCisKKyAgIFN0 cmluZyBmdW5jdGlvbnM6CisKKyAgIFxzKG5hbWVbbjptXSkKKyAgICAgICAgICBFcXVpdmFsZW50 IHRvIFxmc3Vic3RyaW5nKFxtKG5hbWUpLG4sbSkgKFs1NzhdU2VjdGlvbiA3LjI0KS4KKworICAg XDoobmFtZVtuOm1dKQorICAgICAgICAgIEVxdWl2YWxlbnQgdG8gXGZzdWJzdHJpbmcobmFtZSxu LG0pICh3aGVyZSAibmFtZSIgaXMgYW55CisgICAgICAgICAgXC1xdWFudGl0eSkgKFs1NzldU2Vj dGlvbiA3LjI0KS4KKworICAgXGZsZWZ0KHMsbikKKyAgICAgICAgICBUaGUgbGVmdG1vc3QgbmNo YXJhY3RlcnMgb2Ygc3RyaW5nIHM7IGVxdWl2YWxlbnQgdG8KKyAgICAgICAgICBcZnN1YnN0cmlu ZyhzLDEsbikuCisKKyAgIFxmc3RyaXB4KHN0cmluZyxjaGFyKQorICAgICAgICAgIFJldHVybnMg dGhlIHBhcnQgb2YgdGhlIHN0cmluZyB1cCB0byB0aGUgcmlnaHRtb3N0IG9jY3VycmVuY2UsCisg ICAgICAgICAgaWYgYW55LCBvZiB0aGUgZ2l2ZW4gY2hhcmFjdGVyLiBUaGUgZGVmYXVsdCBjaGFy YWN0ZXIgaXMgcGVyaW9kCisgICAgICAgICAgKC4pIEV4YW1wbGVzOgorCisgIFxmc3RyaXB4KGZv by9iYXIsLykgICAgICAgICAgICAgICAgID0gImZvbyIKKyAgXGZzdHJpcHgoZm9vL2Jhci9iYXos LykgICAgICAgICAgICAgPSAiZm9vL2JhciIKKyAgXGZzdHJpcHgoYXV0b2V4ZWMuYmF0LC4pICAg ICAgICAgICAgPSAiYXV0b2V4ZWMiCisgIFxmc3RyaXB4KGF1dG9leGVjLmJhdCkgICAgICAgICAg ICAgID0gImF1dG9leGVjIgorICBcZnN0cmlweChmc3RyaXB4KGZvby9iYXIvYmF6LC8pLC8pICA9 ICJmb28iCisKKyAgIFxmbG9wKHN0cmluZyxjaGFyYWN0ZXIpCisgICAgICAgICAgUmV0dXJucyB0 aGUgcG9ydGlvbiBvZiB0aGUgc3RyaW5nIHN0YXJ0aW5nIGFmdGVyIHRoZSBmaXJzdAorICAgICAg ICAgIG9jY3VycmVuY2Ugb2YgdGhlIGdpdmVuIGNoYXJhY3Rlci4gVGhlIGRlZmF1bHQgY2hhcmFj dGVyIGlzCisgICAgICAgICAgcGVyaW9kICguKSBFeGFtcGxlczoKKworICBcZmxvcChhdXRvZXhl Yy5iYXQpICAgICAgICAgICAgICAgICA9ICJiYXQiCisgIFxmbG9wKGJhei5mb28vYmFyKSAgICAg ICAgICAgICAgICAgID0gImZvby9iYXIiCisgIFxmbG9wKGJhei5mb28vYmFyLC8pICAgICAgICAg ICAgICAgID0gImJhcgorCisgICBcZnN0cmlwbihzdHJpbmcsbikKKyAgICAgICAgICBSZXR1cm5z IHRoZSBzdHJpbmcgd2l0aCBuY2hhcmFjdGVycyByZW1vdmVkIGZyb20gdGhlIGVuZC4KKyAgICAg ICAgICBFeGFtcGxlOgorCisgIFxmc3RyaXBuKDEyMzQ1Njc4LDMpICAgICAgICAgICAgICAgID0g IjEyMzQ1IgorCisgICAgICAgICAgKEZvciBtb3JlIGRpc2N1c3Npb24gb2YgXGZzdHJpcHgoKSwg XGZzdHJpcG4oKSwgYW5kIFxmbG9wKCkgc2VlCisgICAgICAgICAgWzU4MF1TZWN0aW9uIDQuMi4z KS4KKworICAgXGZiNjRlbmNvZGUocykKKyAgICAgICAgICBSZXR1cm5zIHRoZSBCYXNlLTY0IGVu Y29kaW5nIG9mIHRoZSBzdHJpbmcgcy4KKworICAgXGZiNjRkZWNvZGUocykKKyAgICAgICAgICBS ZXR1cm5zIHRoZSBkZWNvZGluZyBvZiB0aGUgQmFzZS02NCBzdHJpbmcgcy4gRmFpbHMgaWYgcyBp cyBub3QKKyAgICAgICAgICBhIEJhc2UtNjQgc3RyaW5nLCBvciBpZiBpdHMgbGVuZ3RoIGlzIG5v dCBhIG11bHRpcGxlIG9mIDQuIE5vdGUKKyAgICAgICAgICB0aGF0IGlmIGFueSBvZiB0aGUgcmVz dWx0IGJ5dGVzIGFyZSBudWxsICgwKSwgdGhlIHJlc3VsdCBzdHJpbmcKKyAgICAgICAgICBzdG9w cyB0aGVyZS4gVGhlcmUgaXMgbm8gd2F5IHRvIHJlcHJlc2VudCBzdHJpbmdzIHRoYXQgY29udGFp bgorICAgICAgICAgIG51bGwgYnl0ZXMgaW4gQy1LZXJtaXQgKHRoZSBzYW1lIGlzIHRydWUgZm9y IFxmdW5oZXhpZnkoKSkuCisKKyAgIFxmd29yZChzMSxuLHMyLHMzKQorICAgICAgICAgIEV4dHJh Y3RzIHdvcmQgbnVtYmVyIG5mcm9tIHN0cmluZyBzMS4gQnkgZGVmYXVsdCwgYSAid29yZCIgaXMK KyAgICAgICAgICBhbnkgc2VxdWVuY2Ugb2YgQVNDSUkgbGV0dGVycyBvciBkaWdpdHM7IG5pcyAx LWJhc2VkLiBJZiBuIGlzCisgICAgICAgICAgb21pdHRlZCwgIjEiIGlzIHVzZWQuIEV4YW1wbGVz OgorCisgIFxmd29yZChvbmUgdHdvIHRocmVlKSAgICA9ICJvbmUiCisgIFxmd29yZChvbmUgdHdv IHRocmVlLDEpICA9ICJvbmUiCisgIFxmd29yZChvbmUgdHdvIHRocmVlLDIpICA9ICJ0d28iCisg IFxmd29yZChvbmUgdHdvIHRocmVlLDMpICA9ICJ0aHJlZSIKKworICAgICAgICAgIGFuZDoKKwor ICAgIFxmd29yZChcdihkaWFscmVzdWx0KSwyKSA9ICIzMTIwMCIKKworICAgICAgICAgIGlzICIz MTIwMCIgaWYgXHYoZGlhbHJlc3VsdCkgaXMgKGUuZy4pICJDT05ORUNUCisgICAgICAgICAgMzEy MDAvQVJRL1YzMi9MQVBNL1Y0MkJJUyIuCisKKyAgICAgICAgICBJZiB5b3UgaW5jbHVkZSBzMiwg dGhpcyByZXBsYWNlcyB0aGUgZGVmYXVsdCBicmVhayBzZXQuIEZvcgorICAgICAgICAgIGV4YW1w bGUsIHN1cHBvc2UgeW91IGhhdmUgYSBzdHJpbmcgXCVhIHdob3NlIHZhbHVlIGlzOgorCisgICQx NTAuMDAgJDMwMC4wMCAkMzkuOTUKKworICAgICAgICAgIGFuZCB5b3Ugd2FudCBlYWNoIGRvbGxh ciBhbW91bnQgdG8gYmUgYSB3b3JkOyB1c2U6CisKKyAgXGZ3b3JkKFwlYSxcJW4seyB9KQorCisg ICAgICAgICAgVGhpcyByZXR1cm5zIGRvbGxhciBhbW91bnQgbnVtYmVyIFwlbiwgZS5nLiAiJDMw MC4wMCIgZm9yIFwlbiA9CisgICAgICAgICAgMi4gInsgfSIgZGVub3RlcyBhIHNwYWNlICh5b3Ug bXVzdCBlbmNsb3NlIGl0IGluIGJyYWNlcywKKyAgICAgICAgICBvdGhlcndpc2UgaXQgaXMgc3F1 ZWV6ZWQgb3V0KS4gTm90ZSB0aGF0IEFTQ0lJIGNvbnRyb2wKKyAgICAgICAgICBjaGFyYWN0ZXJz IGFyZSBhbHdheXMgaW5jbHVkZWQgaW4gdGhlIGJyZWFrIHNldDsgeW91IGRvbid0IGhhdmUKKyAg ICAgICAgICB0byBzcGVjaWZ5IHRoZW0gKGFuZCB5b3UgY2FuJ3Qgbm90IHNwZWNpZnkgdGhlbSku CisKKyAgICAgICAgICBUaGUgb3B0aW9uYWwgczMgYXJndW1lbnQgbGlzdHMgY2hhcmFjdGVycyAo ZXZlbiBjb250cm9sCisgICAgICAgICAgY2hhcmFjdGVycykgdGhhdCBub3JtYWxseSB3b3VsZCBi ZSBjb25zaWRlcmVkIHNlcGFyYXRvcnMgdGhhdAorICAgICAgICAgIHlvdSB3YW50IGluY2x1ZGVk IGluIHdvcmRzLiBTbyB0aGUgZG9sbGFycy1hbmQtY2VudHMgZXhhbXBsZQorICAgICAgICAgIGNv dWxkIGFsc28gYmUgaGFuZGxlZCB0aGlzIHdheToKKworICBcZndvcmQoXCVhLFwlbiwsJC4pCisK KyAgICAgICAgICBpbiBvdGhlciB3b3JkcywgdXNlIHRoZSBkZWZhdWx0IHNlcGFyYXRvciBsaXN0 LCBidXQgcmVtb3ZlICIkIgorICAgICAgICAgIGFuZCAiLiIgZnJvbSBpdCBzbyB0aGV5IHdpbGwg YmUgY29uc2lkZXJlZCBwYXJ0IG9mIGEgd29yZC4KKworICAgICAgICAgIE5vdGUgdGhhdCBzaW5j ZSA4LWJpdCBjaGFyYWN0ZXJzIGFyZSBub3QgQVNDSUksIHRoZXkgYWN0IGFzCisgICAgICAgICAg YnJlYWsgY2hhcmFjdGVycyB1bmxlc3MgeW91IHB1dCB0aGVtIGluIHRoZSBpbmNsdWRlIGxpc3Qu CisgICAgICAgICAgU3VwcG9zZSwgZm9yIGV4YW1wbGUsIHlvdSBoYXZlIGEgZmlsZSBpbiB3aGlj aCBlYWNoIGxpbmUgaXMgYQorICAgICAgICAgIFRhYi1zZXBhcmF0ZWQgbGlzdCBvZiB3b3Jkcywg bnVtYmVycywgb3IgcGhyYXNlcyB0aGF0IG1pZ2h0CisgICAgICAgICAgY29udGFpbiBwdW5jdHVh dGlvbiwgc3BlY2lhbCBjaGFyYWN0ZXJzIGxpa2UgJCBhbmQgQCwgOC1iaXQgYml0CisgICAgICAg ICAgY2hhcmFjdGVycywgZXRjIChsaWtlIHNvbWV0aGluZyB0aGF0IG1pZ2h0IGhhdmUgYmVlbiBl eHBvcnRlZAorICAgICAgICAgIGZyb20gYSBzcHJlYWRzaGVldCBvciBkYXRhYmFzZSksIGFuZCB5 b3Ugd2FudCB0byBzcGxpdCBvbmx5IG9uCisgICAgICAgICAgVGFiOyBoZXJlIGlzIGEgd2F5IChc bShsaW5lKSBpcyBhIGxpbmUgcmVhZCBmcm9tIHRoZSBmaWxlKToKKwordW5kZWYga2VlcAorZm9y IFwlaSAxIDI1NSAxIHsKKyAgICBpZiA9PSBcJWkgOSBjb250aW51ZQorICAgIC5rZWVwIDo9IFxt KGtlZXApXGZjaGFyKFwlaSkKK30KK3doaWxlIHRydWUgeworICAgIGZyZWFkIC9saW5lIFwlYyBs aW5lCisgICAgaWYgZmFpbCBicmVhaworICAgIC5cJW4gOj0gXGZzcGxpdChcbShsaW5lKSwmYSxc OSxcbShrZWVwKSkKKyAgICAuLi4KK30KKworICAgICAgICAgIFRoaXMgcHJvYmxlbSBpcyBhZGRy ZXNzZWQgaW4gWzU4MV1DLUtlcm1pdCA5LjAuCisKKyAgIFxmc3BsaXQoczEsJmEsczIsczMpCisg ICAgICAgICAgVGhpcyBpcyBsaWtlIFxmd29yZCgpLCBleGNlcHQgaW5zdGVhZCBvZiBleHRyYWN0 aW5nIGFuZAorICAgICAgICAgIHJldHVybmluZyBhIHBhcnRpY3VsYXIgd29yZCBmcm9tIHN0cmlu ZyBzMSwgaXQgY291bnRzIHRoZSB3b3JkcworICAgICAgICAgIGFuZCBvcHRpb25hbGx5IGFzc2ln bnMgdGhlbSB0byB0aGUgYXJyYXkgd2hvc2UgaWRlbnRpZnlpbmcKKyAgICAgICAgICBsZXR0ZXIs IGEteiwgaXMgZ2l2ZW4gYWZ0ZXIgdGhlICImIiBpbiB0aGUgc2Vjb25kIGFyZ3VtZW50LCB3aXRo CisgICAgICAgICAgdGhlIGZpcnN0IHdvcmQgZ29pbmcgaW50byBlbGVtZW50IDEsIHRoZSBzZWNv bmQgaW50byBlbGVtZW50IDIsCisgICAgICAgICAgYW5kIHNvIG9uLiBUaGUgcnVsZXMgcmVnYXJk aW5nIGJyZWFrIGFuZCBpbmNsdWRlIGxpc3RzIChzMiBhbmQKKyAgICAgICAgICBzMykgYXJlIGV4 YWN0bHkgdGhlIHNhbWUgYXMgZm9yIFxmd29yZCgpLiBcZnNwbGl0KCkgcmV0dXJucyB0aGUKKyAg ICAgICAgICBudW1iZXIgb2Ygd29yZHMgdGhhdCB3ZXJlIGFzc2lnbmVkLCB3aGljaCBpcyBlaXRo ZXIgdGhlIG51bWJlcgorICAgICAgICAgIG9mIHdvcmRzIGluIHRoZSBzdHJpbmcsIG9yIHRoZSBk aW1lbnNpb24gb2YgdGhlIGFycmF5LCB3aGljaGV2ZXIKKyAgICAgICAgICBpcyBsZXNzLiBJZiB0 aGUgYXJyYXkgaXMgbm90IGRlY2xhcmVkLCBcZnNwbGl0KCkgY3JlYXRlcyBpdCBhbmQKKyAgICAg ICAgICByZXR1cm5zIGEgbnVtYmVyIHdoaWNoIGlzIGJvdGggdGhlIG51bWJlciBvZiB3b3JkcyBp biBzMSBhbmQgdGhlCisgICAgICAgICAgZGltZW5zaW9uIG9mIHRoZSBuZXcgYXJyYXkuIEV4YW1w bGVzOgorCisgIGRlY2xhcmUgXCZ3WzIwXSAgICAgICAgOyAoT3B0aW9uYWwuKQorICAuLi4KKyAg cmVhZCBcJXMgICAgICAgICAgICAgICA7IFwlcyBpcyAiVGhpcyBpcyBhIHNlbnRlbmNlIHdpdGgg c2V2ZW4gd29yZHMuIgorICAuLi4KKyAgZWNobyAiXGZzcGxpdChcJXMpIiAgICA7IFRoaXMgd291 bGQgcHJpbnQgIjciLgorICBlY2hvICJcZnNwbGl0KFwlcywmdykiIDsgRGl0dG8sIGFuZCBhbHNv IGFzc2lnbnMgdGhlbSB0byBhcnJheSBcJndbXS4KKworICBlY2hvICJcJndbN10iICAgICAgICAg IDsgVGhpcyB3b3VsZCBwcmludCAid29yZHMiLgorCisgICAgICAgICAgSWYgdGhlIGxpbmUgY29u dGFpbmVkIGZpZWxkcyB0aGF0IHdlcmUgZGVsaW1pdGVkIGJ5IGNvbG9uICg6KSwKKyAgICAgICAg ICB5b3Ugd291bGQgdXNlIFxmc3BsaXQoXCVzLCZ3LDopLiBJZiB0aGUgZmllbGRzIHdlcmUgZGVs aW1pdGVkIGJ5CisgICAgICAgICAgY29tbWEsIHRoZW4geW91IHdvdWxkIHVzZSBcZnNwbGl0KFwl cywmdyx7LH0pOyBpbiB0aGlzIGNhc2UgdGhlCisgICAgICAgICAgbGl0ZXJhbCBjb21tYSBtdXN0 IGJlIGVuY2xvc2VkIGluIGJyYWNlcyB0byBkaXN0aW5ndWlzaCBpdCBmcm9tCisgICAgICAgICAg dGhlIGNvbW1hIHRoYXQgc2VwYXJhdGVzIGZ1bmN0aW9uIGFyZ3VtZW50cy4gVG8gZ2V0IGEgd29y ZCBjb3VudAorICAgICAgICAgIHdpdGhvdXQgbG9hZGluZyBhbiBhcnJheSwgYnV0IHN0aWxsIHNw ZWNpZnkgYnJlYWsgYW5kL29yIGluY2x1ZGUKKyAgICAgICAgICBsaXN0cywgbGVhdmUgdGhlIGFy cmF5IGFyZ3VtZW50IGVtcHR5OgorCisgICBlY2hvICJcZnNwbGl0KFwlcywsOikiIDsgVXNlIGNv bG9uIGFzIHRoZSBzZXBhcmF0b3IuCisKKyAgICAgICAgICBXQVJOSU5HUzoKKworICAgICAgICAg MS4gSWYgeW91IHVzZSB0aGUgc2FtZSBhcnJheSByZXBlYXRlZGx5LCBcZnNwbGl0KCkgbGVhdmVz IGFueQorICAgICAgICAgICAgdHJhaWxpbmcgbWVtYmVycyB1bmRpc3R1cmJlZC4gRm9yIGV4YW1w bGU6CisgIGRjbCBcJndbMTBdCisgIFxmc3BsaXQoMSAyIDMgNCA1LCZ3KSA7IFNldHMgXCZ3WzFd IHRocnUgXCZ3WzVdLgorICBcZnNwbGl0KGEgYiBjLCZ3KSAgICAgOyBTZXRzIFwmd1sxXS1bM10g bGVhdmluZyBbNF0tWzVdIGFzIHRoZXkgd2VyZS4KKworICAgICAgICAgMi4gSWYgeW91IGFsbG93 IFxmc3BsaXQgdG8gY3JlYXRlIHRoZSBhcnJheSAoYnkgbm90IGRlY2xhcmluZyBpdAorICAgICAg ICAgICAgZmlyc3QpLCBpdCBpcyBkaW1lbnNpb25lZCB0byB0aGUgbnVtYmVyIG9mIGVsZW1lbnRz IGl0IHdhcworICAgICAgICAgICAgY3JlYXRlZCB3aXRoOgorICBcZnNwbGl0KDEgMiAzLCZ4KSAg ICAgOyBDcmVhdGVzIGFuIGFycmF5IFwmeFtdIHdpdGggMyBlbGVtZW50cy4KKyAgXGZzcGxpdChh IGIgYyBkIGUsJngpIDsgVGhpcyBvdmVyZmxvd3MgdGhlIGFycmF5LgorCisgICAgICAgICAgVGh1 cyBpZiB5b3Ugd2FudCB0byB1c2UgXGZzcGxpdCgpIHJlcGVhdGVkbHkgb24gdGhlIHNhbWUgYXJy YXksCisgICAgICAgICAgZWl0aGVyIGRpbWVuc2lvbiBpdCBpbiBhZHZhbmNlIHRvIHRoZSBtYXhp bXVtIGV4cGVjdGVkIHNpemUgKGFuZAorICAgICAgICAgIHRoZW4gc29tZSAtLSBtb3JlIGVmZmlj aWVudCksIG9yIGVsc2UgZGVzdHJveSBpdCBhZnRlciBlYWNoIHVzZQorICAgICAgICAgICh0byBh bGxvdyBmb3IgdW5leHBlY3RlZGx5IGxhcmdlIGFyZ3VtZW50cykuIEV4YW1wbGUgdXNpbmcgYQor ICAgICAgICAgIGR5bmFtaWMgYXJyYXk6CisKKyAgZm9wZW4gL3JlYWQgXCVjIHNvbWUtZmlsZQor ICBpZiBmYWlsIC4uLgorICBzZXQgZnVuY3Rpb24gZXJyb3Igb24gICAgOyBTZWUgWzU4Ml1TZWN0 aW9uIDcuMTIKKyAgd2hpbGUgdHJ1ZSB7CisgICAgICBkY2wgXCZ3W10gICAgICAgICAgICA7IERl c3Ryb3kgXCZbd10gZWFjaCB0aW1lIHRocnUgdGhlIGxvb3AKKyAgICAgIGZyZWFkIC9saW5lIFwl YyBcJWEKKyAgICAgIGlmIGZhaWwgYnJlYWsKKyAgICAgIGFzZyBcJXggXGZzcGxpdChcJWEsJncp CisgICAgICBpZiBmYWlsIC4uLgorICAgICAgOyAoZG8gd2hhdCB5b3Ugd2FudCB3aXRoIFwmd1td IGhlcmUuLi4pCisgIH0KKyAgZmNsb3NlIFwlYworCisgICBcZnJpbmRleChzMSxzMixuKQorICAg ICAgICAgIFRoZSAibiIgYXJndW1lbnQgdG8gXGZyaW5kZXgoKSBub3cgd29ya3MgY29uc2lzdGVu dGx5IChpbiBtaXJyb3IKKyAgICAgICAgICBpbWFnZSkgd2l0aCB0aGUgY29ycmVzcG9uZGluZyBc ZmluZGV4KCkgYXJndW1lbnQuIEluIGVhY2ggY2FzZSwKKyAgICAgICAgICB0aGUgKG4tMSktbW9z dCBjaGFyYWN0ZXJzIG9mIHMyIGFyZSBpZ25vcmVkIGluIHRoZSBzZWFyY2g7IGZvcgorICAgICAg ICAgIGZpbmRleCwgdGhpcyBtZWFucyB0aGUgc3RhcnRpbmcgcG9zaXRpb24gb2YgdGhlIHNlYXJj aCBpcyBuICh0aGUKKyAgICAgICAgICBkZWZhdWx0IG4gaXMgMSwgYW5kIDAgaXMgdHJlYXRlZCBs aWtlIDEpLiBGb3IgXGZyaW5kZXgoKSBpdAorICAgICAgICAgIG1lYW5zIHRoZSBkZWZhdWx0IHN0 YXJ0aW5nIHBvaW50IGlzOgorCisgIGxlbmd0aChzMikgLSBsZW5ndGgoczEpIC0gbiAod2l0aCB0 aGUgc2FtZSBkZWZhdWx0cyBmb3IgbikuCisKKyAgIFxmc2VhcmNoKHBhdHRlcm4sc3RyaW5nWyxw b3NpdGlvbl0pCisgICAgICAgICAgRXhhY3RseSBsaWtlIFxmaW5kZXgoKSwgZXhjZXB0IHdpdGgg YSBwYXR0ZXJuIChzZWUgWzU4M11TZWN0aW9uCisgICAgICAgICAgNy45KSByYXRoZXIgdGhhbiBh IGxpdGVyYWwgc3RyaW5nLgorCisgICBcZnJzZWFyY2gocGF0dGVybixzdHJpbmdbLHBvc2l0aW9u XSkKKyAgICAgICAgICBFeGFjdGx5IGxpa2UgXGZyaW5kZXgoKSwgZXhjZXB0IHdpdGggYSBwYXR0 ZXJuIHJhdGhlciB0aGFuIGEKKyAgICAgICAgICBsaXRlcmFsIHN0cmluZy4KKworICAgICAgICAg IEZpbGUgRnVuY3Rpb25zOgorCisgICBcZmZpbGVzKCksIFxmbmV4dGZpbGUoKQorICAgICAgICAg IEl0IGlzIG5vIGxvbmdlciBuZWNlc3NhcnkgdG8gY29weSB0aGUgZmlsZSBsaXN0IHRvIGFuIGFy cmF5CisgICAgICAgICAgYmVmb3JlIHVzZSwgYXMgc2hvd24gb24gcC4zOTggb2YgWzU4NF1Vc2lu ZyBDLUtlcm1pdCAybmQKKyAgICAgICAgICBFZGl0aW9uLiBcZmZpbGVzKCkgYW5kIGZyaWVuZHMg bm93IG1ha2UgdGhlaXIgb3duIHNhZmUgY29waWVzIG9mCisgICAgICAgICAgdGhlIGZpbGUgbGlz dC4gVGh1cyBjb25zdHJ1Y3Rpb25zIGxpa2UgdGhlIGZvbGxvd2luZyBhcmUgbm93CisgICAgICAg ICAgcG9zc2libGU6CisKKyAgZm9yIFwlaSAxIFxmZmlsZXMoKi50eHQpIDEgeyBzZW5kIFxmbmV4 dGZpbGUoKSB9CisKKyAgICAgICAgICBUaGUgc2FtZSBpcyB0cnVlIGZvciB0aGUgbmV3IGZ1bmN0 aW9uIFxmcmZpbGVzKCksCisgICAgICAgICAgXGZkaXJlY3RvcmllcygpLCBhbmQgXGZyZGlyZWN0 b3JpZXMoKSwgZGVzY3JpYmVkIGluIFs1ODVdU2VjdGlvbgorICAgICAgICAgIDQuMTEuMy4KKwor ICAgICAgICAgIEJ1dCBub3RlIHRoYXQgZWFjaCByZWZlcmVuY2UgdG8gXGZuZXh0ZmlsZSgpIHN0 aWxsIGdldHMgeW91IHRoZQorICAgICAgICAgIG5leHQgZmlsZS4gU28gImlmIG5ld2VyIFxmbmV4 dGZpbGUoKSBmb28udHh0IHNlbmQgXGZuZXh0ZmlsZSgpIgorICAgICAgICAgIGNvbXBhcmVzIG9u ZSBmaWxlJ3MgYWdlIHdpdGggdGhhdCBvZiBmb28udHh0LCBhbmQgdGhlbiBzZW5kcyBhbgorICAg ICAgICAgIGVudGlyZWx5IGRpZmZlcmVudCBmaWxlLiBJZiB5b3UncmUgZ29pbmcgdG8gcmVmZXIg dG8gdGhlIHNhbWUKKyAgICAgICAgICBmaWxlIG1vcmUgdGhhbiBvbmNlLCBhc3NpZ24gaXQgdG8g YSB2YXJpYWJsZToKKworICBhc2cgXCVmIFxmbmV4dGZpbGUoKQorICBpZiBuZXdlciBcJWYgZm9v LnR4dCBzZW5kIFwlZgorCisgICAgICAgICAgKG5vdGU6IGFzc2lnbiwgbm90IGRlZmluZSkuCisK KyAgICAgICAgICBBbHNvIG5vdGUgdGhhdCBcZmZpbGVzKCksIFxmcmZpbGVzKCksIFxmZGlyZWN0 b3JpZXMoKSwgYW5kCisgICAgICAgICAgXGZyZGlyZWN0b3JpZXMoKSBhbGwgbm93IGFjY2VwdCBv biBvcHRpb25hbCAybmQgYXJndW1lbnQ6IHRoZQorICAgICAgICAgIG5hbWUgb2YgYW4gYXJyYXkg dG8gbG9hZCB3aXRoIHRoZSByZXN1bHRpbmcgZmlsZSBvciBkaXJlY3RvcnkKKyAgICAgICAgICBs aXN0LCBleHBsYWluZWQgaW4gWzU4Nl1TZWN0aW9uIDQuMTEuMy4gU28geW91IGNhbiBhbHNvIGxv YWQgYW4KKyAgICAgICAgICBhcnJheSB3aXRoIHRoZSBmaWxlbGlzdCB3aGVuIHlvdSBuZWVkIHRv IHJlZmVyIHRvIHRoZSBzYW1lIGZpbGUKKyAgICAgICAgICBtb3JlIHRoYW4gb25jZToKKworICBm b3IgXCVpIDEgXGZmaWxlcygqLCZhKSAxIHsgaWYgbmV3ZXIgXCZhW1wlaV0gZm9vLnR4dCBzZW5k IFwmYVtcJWldIH0KKworICAgXGZwZXJtaXNzaW9ucyhmaWxlKQorICAgICAgICAgIFJldHVybnMg dGhlIHBsYXRmb3JtLXNwZWNpZmljIHBlcm1pc3Npb25zIHN0cmluZyBmb3IgdGhlIGZpbGUsCisg ICAgICAgICAgc3VjaCBhcyAiLXJ3LXJ3LXItLSIgaW4gVU5JWCBvciAiKFJXRSxSV0UsUkUsRSki IGluIFZNUy4KKworICAgXGZkaXJuYW1lKGYpCisgICAgICAgICAgR2l2ZW4gYSBmaWxlIHNwZWNp ZmljYXRpb24gZiwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBjb21wbGV0ZQorICAgICAgICAg IHBhdGhuYW1lIG9mIGRpcmVjdG9yeSB0aGUgZmlsZSBpcyBpbi4KKworICAgQXJyYXkgRnVuY3Rp b25zOgorCisgICBcZmRpbWVuc2lvbigmYSkKKyAgICAgICAgICBSZXR1cm5zIHRoZSBkaW1lbnNp b24gZGVjbGFyZWQgZm9yIHRoZSBhcnJheSB3aG9zZSBpZGVudGlmeWluZworICAgICAgICAgIGxl dHRlciwgYS16LCBvciBzcGVjaWFsIGNoYXJhY3RlciAiXyIgb3IgIkAiLCBpcyBnaXZlbiBhZnRl ciB0aGUKKyAgICAgICAgICAiJiIgaW4gdGhlIGFyZ3VtZW50LiBJZiB0aGUgYXJyYXkgaXMgbm90 IGRlY2xhcmVkLCAwIGlzCisgICAgICAgICAgcmV0dXJuZWQuIE5vdGUgdGhhdCB3aGVuIHVzZWQg d2l0aCB0aGUgbWFjcm8gYXJndW1lbnQgdmVjdG9yCisgICAgICAgICAgYXJyYXksIFwmX1tdIChz ZWUgWzU4N11TZWN0aW9uIDcuNSksIHRoZSB2YWx1ZSBvZiB0aGlzIGZ1bmN0aW9uCisgICAgICAg ICAgaXMgb25lIGxlc3MgdGhhbiBcdihhcmdjKSwgYW5kIHdoZW4gdXNlZCB3aXRoIHRoZSBDLUtl cm1pdAorICAgICAgICAgIGNvbW1hbmQtbGluZSBhcmd1bWVudCB2ZWN0b3IgYXJyYXksIFwmQFtd LCBpdCBpcyBlcXVhbCB0byB0aGUKKyAgICAgICAgICBcdihhcmdzKSB2YXJpYWJsZS4gRXhhbXBs ZXM6CisKKyAgZWNobyBcZmRpbWVuc2lvbigmYSkgICAgICAgOyBOb3QgZGVjbGFyZWQuCisgIDAK KyAgZGVjbGFyZSBcJmFbMTJdICAgICAgICAgICAgOyBOb3cgaXQncyBkZWNsYXJlZC4KKyAgZWNo byBcZmRpbSgmYSkKKyAgMTIKKworICAgXGZhcnJheWxvb2socGF0dGVybixhcnJheW5hbWUpCisg ICAgICAgICAgTG9va3MgaW4gdGhlIGdpdmVuIGFycmF5IGZvciB0aGUgcGF0dGVybiBhbmQgcmV0 dXJucyB0aGUgaW5kZXgKKyAgICAgICAgICBvZiB0aGUgZmlyc3QgZWxlbWVudCB0aGF0IG1hdGNo ZXMsIGlmIGFueSwgb3IgLTEgaWYgbm9uZSBtYXRjaC4KKyAgICAgICAgICBUaGUgYXJyYXluYW1l IGNhbiBpbmNsdWRlIGEgcmFuZ2Ugc3BlY2lmaWVyIHRvIHJlc3RyaWN0IHRvCisgICAgICAgICAg c2VhcmNoIHRvIGEgc2VnbWVudCBvZiB0aGUgYXJyYXksIGUuZy4KKyAgICAgICAgICBcZmFycmF5 bG9vaygqeHl6KiwmYVszMjo2M10pLiBGb3IgZ3JlYXRlciBkZXRhaWwgc2VlCisgICAgICAgICAg WzU4OF1TZWN0aW9uIDcuMTAuNy4KKworICAgXGZ0YWJsZWxvb2soa2V5d29yZCxhcnJheW5hbWVb LGRlbGltaXRlcl0pCisgICAgICAgICAgTG9va3MgaW4gdGhlIGdpdmVuICJ0YWJsZSIsIHdoaWNo IG11c3QgYmUgc29ydGVkLCBmb3IgdGhlIGdpdmVuCisgICAgICAgICAga2V5d29yZC4gUmV0dXJu cyB0aGUgaW5kZXggb2YgdGhlIHRhYmxlIGVsZW1lbnQgdGhhdCB1bmlxdWVseQorICAgICAgICAg IG1hdGNoZXMgdGhlIGdpdmVuIGtleXdvcmQsIG9yIC0xIGlmIG5vbmUgbWF0Y2gsIG9yIC0yIGlm IG1vcmUKKyAgICAgICAgICB0aGFuIDEgbWF0Y2guIEZvciBncmVhdGVyIGRldGFpbCBzZWUgWzU4 OV1TZWN0aW9uIDcuMTAuNy4KKworICAgT3RoZXIgbmV3IGZ1bmN0aW9uczoKKworICAgXGZpcDJo ZXgocykKKyAgICAgICAgICBDb252ZXJ0cyBhIGRvdHRlZCBkZWNpbWFsIElQIGFkZHJlc3MgdG8g YW4gOC1kaWdpdCBoZXhhZGVjaW1hbAorICAgICAgICAgIG51bWJlci4gXGZpcDJoZXgoMTI4LjU5 LjM5LjIpID0gODAzYjI3MDIuCisKKyAgIFxmaGV4MmlwKHgpCisgICAgICAgICAgQ29udmVydHMg YW4gOC1kaWdpdCBoZXhhZGVjaW1hbCBJUCBhZGRyZXNzIHRvIGRvdHRlZCBkZWNpbWFsCisgICAg ICAgICAgZm9ybSwgZS5nLiBcZmhleDJpcCg4MDNiMjcwMikgPSAxMjguNTkuMzkuMi4gVGhlIGlu dmVyc2Ugb2YKKyAgICAgICAgICBcZmlwMmhleCgpLgorCisgICBcZmNvbW1hbmQoKQorICAgXGZy YXdjb21tYW5kKCkKKyAgICAgICAgICBUaGVzZSBydW4gYW4gZXh0ZXJuYWwgY29tbWFuZCBhbmQg cmV0dXJuIGl0cyBvdXRwdXQ7IHNlZQorICAgICAgICAgIFs1OTBdU2VjdGlvbiA0LjIuOC40Lgor CisgICBcZmRpYWxjb252ZXJ0KHMpCisgICAgICAgICAgcyBpcyBhIHBob25lIG51bWJlciBpbiBl aXRoZXIgbGl0ZXJhbCBvciBwb3J0YWJsZSBmb3JtYXQgKG5vdCBhCisgICAgICAgICAgZGlhbGlu ZyBkaXJlY3RvcnkgZW50cnkgbmFtZSkuIFRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBkaWFsCisg ICAgICAgICAgc3RyaW5nIHRoYXQgd291bGQgYWN0dWFsbHkgYmUgdXNlZCB3aGVuIGRpYWxpbmcg ZnJvbSB0aGUgY3VycmVudAorICAgICAgICAgIGxvY2F0aW9uIChhZnRlciBwcm9jZXNzaW5nIGNv dW50cnkgY29kZSwgYXJlYSBjb2RlLCBhbmQgb3RoZXIKKyAgICAgICAgICBTRVQgRElBTCB2YWx1 ZXMpLgorCisgICBcZmVycnN0cmluZyhuKQorICAgICAgICAgIFJldHVybnMgdGhlIHN5c3RlbSBl cnJvciBtZXNzYWdlIGFzc29jaWF0ZWQgd2l0aCB0aGUgKG51bWVyaWMpCisgICAgICAgICAgZXJy b3IgY29kZSBuLiBVTklYIGFuZCBWTVMgb25seS4gVXNlIGluIGNvbmp1bmN0aW9uIHdpdGgKKyAg ICAgICAgICBcdihlcnJubykgb3IgXHYocGV4aXRzdGF0KS4gU2VlIFs1OTFdU2VjdGlvbiA0LjIu NSBmb3IgYSB1c2FnZQorICAgICAgICAgIGV4YW1wbGUuIE5vdGU6IFRoaXMgZnVuY3Rpb24gZG9l c24ndCB3b3JrIGluIFdpbmRvd3MgYmVjYXVzZQorICAgICAgICAgIHRoZXJlIGlzIG5vdCBhIGNv bnNpc3RlbnQgZXJyb3ItY29kZS10by1tZXNzYWdlIG1hcHBpbmc7IGVycm9yCisgICAgICAgICAg Y29kZSAieCIgbWVhbnMgc29tZXRoaW5nIGNvbXBsZXRlbHkgZGlmZmVyZW50IGRlcGVuZGluZyBv bgorICAgICAgICAgIHdoZXRoZXIgaXQgY29tZXMgZnJvbSB0aGUgQyBydW50aW1lIGxpYnJhcnks IFdpbnNvY2ssIGEKKyAgICAgICAgICBXaW5kb3dzLTMyIEFQSSwgVEFQSSwgZXRjLAorCisgICBc ZnBhdHRlcm4ocykKKyAgICAgICAgICBVc2VkIGluIElOUFVULCBSRUlOUFVULCBhbmQgTUlOUFVU IGNvbW1hbmRzIHRvIGRlbm90ZSBzZWFyY2gKKyAgICAgICAgICBzdHJpbmdzIHRoYXQgYXJlIHRv IGJlIHRyZWF0ZWQgYXMgcGF0dGVybnMgcmF0aGVyIHRoYW4KKyAgICAgICAgICBsaXRlcmFsbHku CisKKyAgIEFsc28gc2VlIFs1OTJdU2VjdGlvbiA3Ljggb24gYnVpbHQtaW4gaGVscCBmb3IgZnVu Y3Rpb25zLgorCisgIDcuNC4gTmV3IElGIENvbmRpdGlvbnMKKworICAgSUYgQVZBSUxBQkxFIGZl YXR1cmUgY29tbWFuZAorICAgICAgICAgIEV4ZWN1dGVzIHRoZSBjb21tYW5kIGlmIHRoZSBnaXZl biBmZWF0dXJlIGlzIGF2YWlsYWJsZS4KKyAgICAgICAgICBQcmVzZW50bHkgdXNlZCBvbmx5IHRv IGRldGVybWluZSBpZiBzcGVjaWZpYyBhdXRoZW50aWNhdGlvbiBhbmQKKyAgICAgICAgICBlbmNy eXB0aW9uIG9wdGlvbnMgYXJlIGF2YWlsYWJsZS4gVHlwZSAiaWYgYXZhaWxhYmxlID8iIHRvIHNl ZQorICAgICAgICAgIHdoaWNoIGZlYXR1cmVzIG1heSBiZSB0ZXN0ZWQuCisKKyAgIElGIEZMT0FU IGYxIGNvbW1hbmQKKyAgICAgICAgICBFeGVjdXRlcyBjb21tYW5kIGlmIGYxIGlzIGEgbGVnYWwg ZmxvYXRpbmcgcG9pbnQgbnVtYmVyICh3aGljaAorICAgICAgICAgIGluY2x1ZGVzIGludGVnZXJz KS4gVXNlIHRoaXMgdG8gcHJldmVyaWZ5IGFyZ3VtZW50cyBmb3IgdGhlCisgICAgICAgICAgXGZm cC4uLigpIGZsb2F0aW5nLXBvaW50IGFyaXRobWV0aWMgZnVuY3Rpb25zLCBlLmcuICJpZiBmbG9h dAorICAgICAgICAgIFwlMSBlY2hvIFxmZnBpbnQoXCUxKSIuCisKKyAgIElGID09IG4xIG4yIGNv bW1hbmQKKyAgICAgICAgICBTeW5vbnltIGZvciAiaWYgPSIgKG51bWVyaWMgZXF1YWxpdHkpLiBO b3RlIHRoYXQgYXMgb2YgQy1LZXJtaXQKKyAgICAgICAgICA3LjAsIHRoaXMgYW5kIGFsbCBvdGhl ciBudW1lcmljIGNvbXBhcmlzb24gb3BlcmF0b3JzIGFsc28gd29yaworICAgICAgICAgIGZvciBm bG9hdGluZy1wb2ludCBudW1iZXJzLgorCisgICBJRiAhPSBuMSBuMiBjb21tYW5kCisgICAgICAg ICAgRXhlY3V0ZXMgdGhlIGNvbW1hbmQgaWYgbjEgYW5kIG4yIGFyZSBib3RoIG51bWJlcnMgb3Ig dmFyaWFibGVzCisgICAgICAgICAgY29udGFpbmluZyBudW1iZXJzIGFuZCB0aGUgdmFsdWUgb2Yg bjEgaXMgbm90IGVxdWFsIHRvIHRoZSB2YWx1ZQorICAgICAgICAgIG9mIG4yLiBUaGlzIGlzIGVx dWl2YWxlbnQgdG8gImlmIG5vdCA9IG4xIG4yIi4KKworICAgSUYgPD0gbjEgbjIgY29tbWFuZAor ICAgICAgICAgIEV4ZWN1dGVzIHRoZSBjb21tYW5kIGlmIG4xIGFuZCBuMiBhcmUgYm90aCBudW1i ZXJzIG9yIHZhcmlhYmxlcworICAgICAgICAgIGNvbnRhaW5pbmcgbnVtYmVycyBhbmQgdGhlIHZh bHVlIG9mIG4xIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0bworICAgICAgICAgIHRoZSB2YWx1ZSBv ZiBuMi4gVGhpcyBpcyBlcXVpdmFsZW50IHRvICJpZiBub3QgPiBuMSBuMiIuCisKKyAgIElGID49 IG4xIG4yIGNvbW1hbmQKKyAgICAgICAgICBFeGVjdXRlcyB0aGUgY29tbWFuZCBpZiBuMSBhbmQg bjIgYXJlIGJvdGggbnVtYmVycyBvciB2YXJpYWJsZXMKKyAgICAgICAgICBjb250YWluaW5nIG51 bWJlcnMgYW5kIHRoZSB2YWx1ZSBvZiBuMSBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwKKyAgICAg ICAgICB0byB0aGUgdmFsdWUgb2YgbjIuIEVxdWl2YWxlbnQgdG8gImlmIG5vdCA8IG4xIG4yIi4K KworICAgSUYgQ09NTUFORCB3b3JkIGNvbW1hbmQKKyAgICAgICAgICBFeGVjdXRlcyB0aGUgY29t bWFuZCBpZiB3b3JkIGlzIGEgYnVpbHQtaW4gQy1LZXJtaXQgY29tbWFuZC4KKyAgICAgICAgICBF eGFtcGxlOgorCisgIGlmIG5vdCBjb21tYW5kIGNvcHkgZGVmaW5lIHsgY29weSBydW4gY29weSBc JTEgXCUyIH0iLgorCisgICAgICAgICAgVGhpcyBkZWZpbmVzIGEgQ09QWSBtYWNybyB0aGF0IHJ1 bnMgYW4gZXh0ZXJuYWwgQ09QWSBjb21tYW5kIGlmCisgICAgICAgICAgQ09QWSBpcyBub3QgYWxy ZWFkeSBhIGJ1aWx0LWluIGNvbW1hbmQuCisKKyAgIElGIExPQ0FMIGNvbW1hbmQKKyAgICAgICAg ICBFeGVjdXRlcyB0aGUgY29tbWFuZCBpZiBLZXJtaXQgaXMgaW4gbG9jYWwgbW9kZSwgaS5lLiBp ZiBpdCBoYXMKKyAgICAgICAgICBhIFNFVCBMSU5FLCBTRVQgUE9SVCwgb3IgU0VUIEhPU1QgKFRF TE5FVCwgUkxPR0lOLCBldGMpIGRldmljZQorICAgICAgICAgIG9yIGNvbm5lY3Rpb24gb3Blbi4g RG9lcyBub3QgZXhlY3V0ZSB0aGUgY29tbWFuZCBpZiBpbiByZW1vdGUKKyAgICAgICAgICBtb2Rl LgorCisgICBJRiBNQVRDSCBzdHJpbmcgcGF0dGVybiBjb21tYW5kCisgICAgICAgICAgRXhlY3V0 ZXMgdGhlIGNvbW1hbmQgaWYgdGhlIHN0cmluZyBtYXRjaGVzIHRoZSBwYXR0ZXJuLiBGb3IgYQor ICAgICAgICAgIGRlc2NyaXB0aW9uIG9mIHRoZSBzeW50YXggZm9yIHRoZSBwYXR0ZXJuLCBzZWUg WzU5M11TZWN0aW9uCisgICAgICAgICAgNC45LjEuIElmIHlvdSB3YW50IHRvIHRlc3QgaWYgdGhl IHN0cmluZyBjb250YWlucyBwYXR0ZXJuLCB1c2UKKyAgICAgICAgICBJRiBcZnNlYXJjaChwYXR0 ZXJuLHN0cmluZykuCisKKyAgIElGIE9QRU4geyBERUJVRy1MT0csIFNFU1NJT04tTE9HLCBUUkFO U0FDVElPTi1MT0csIC4uLiB9IGNvbW1hbmQKKyAgICAgICAgICBFeGVjdXRlcyB0aGUgY29tbWFu ZCBpZiB0aGUgZ2l2ZW4gZmlsZSBpcyBvcGVuLCBmYWlscyBpZiBpdCBpcworICAgICAgICAgIG5v dCBvcGVuLiBUeXBlIElGIE9QRU4gPyBmb3IgYSBjb21wbGV0ZSBsaXN0IG9mIGZpbGVzIHRoYXQg Y2FuCisgICAgICAgICAgYmUgY2hlY2tlZCAoYWxsIHRoZSBmaWxlcyB0aGF0IGNhbiBiZSBvcGVu ZWQgd2l0aCB0aGUgT1BFTiBvcgorICAgICAgICAgIExPRyBjb21tYW5kcykuCisKKyAgIElGIFFV SUVUIGNvbW1hbmQKKyAgICAgICAgICBFeGVjdXRlcyB0aGUgY29tbWFuZCBpZiBTRVQgUVVJRVQg aXMgT04sIGFuZCBkb2VzIG5vdCBleGVjdXRlIGl0CisgICAgICAgICAgaWYgU0VUIFFVSUVUIGlz IE9GRi4gRXhhbXBsZTogSUYgTk9UIFFVSUVUIEVDSE8geyBUaGlzIGlzIGEKKyAgICAgICAgICBt ZXNzYWdlLn0uCisKKyAgIElGIFJFQURBQkxFIG5hbWUKKyAgICAgICAgICBTdWNjZWVkcyBpZiBu YW1lIGlzIHRoZSBuYW1lIG9mIGFuIGV4aXN0aW5nIGZpbGUgb3IgZGlyZWN0b3J5CisgICAgICAg ICAgdGhhdCBpcyByZWFkYWJsZS4KKworICAgSUYgV1JJVEVBQkxFIG5hbWUKKyAgICAgICAgICBT dWNjZWVkcyBpZiBuYW1lIGlzIHRoZSBuYW1lIG9mIGFuIGV4aXN0aW5nIGZpbGUgb3IgZGlyZWN0 b3J5CisgICAgICAgICAgdGhhdCBpcyB3cml0YWJsZSwgZS5nLjoKKworICBpZiBub3Qgd3JpdGVh YmxlIFx2KGxvY2tkaXIpIGVjaG8gUGxlYXNlIHJlYWQgaW5zdGFsbGF0aW9uIGluc3RydWN0aW9u cyEKKworICAgSUYgRkxBRyBjb21tYW5kCisgICAgICAgICAgVGhpcyB0ZXN0cyBhIHVzZXItc2V0 dGFibGUgY29uZGl0aW9uLCB3aGljaCBjYW4gbWVhbiBhbnl0aGluZworICAgICAgICAgIHlvdSBs aWtlLiBTRVQgRkxBRyBPTiBjYXVzZXMgc3Vic2VxdWVudCBJRiBGTEFHIGNvbW1hbmRzIHRvCisg ICAgICAgICAgc3VjY2VlZDsgU0VUIEZMQUcgT0ZGIGNhdXNlcyB0aGVtIHRvIGZhaWwuIE9uZSB3 YXkgdG8gdXNlIGl0CisgICAgICAgICAgd291bGQgYmUgZm9yIGRlYnVnZ2luZyB5b3VyIHNjcmlw dHM7IHByZWNlZGUgYW55IGRlYnVnZ2luZworICAgICAgICAgIHN0YXRlbWVudHMgd2l0aCBJRiBG TEFHLiBUaGVuIFNFVCBGTEFHIG9uIHRvIGRlYnVnIHlvdXIgc2NyaXB0LAorICAgICAgICAgIFNF VCBGTEFHIE9GRiB0byBydW4gaXQgd2l0aG91dCBkZWJ1Z2dpbmcuIEFub3RoZXIgY29tbW9uIHVz ZSBpcworICAgICAgICAgIGZvciBjYXVzaW5nIGFuIGlubmVyIGxvb3AgdG8gY2F1c2UgYW4gb3V0 ZXIgbG9vcCB0byBleGl0LgorCisgICBJRiBDLUtFUk1JVCBjb21tYW5kCisgICAgICAgICAgQy1L ZXJtaXQsIGJ1dCBub3QgS2VybWl0IDk1IG9yIE1TLURPUyBLZXJtaXQsIGV4ZWN1dGVzIHRoZQor ICAgICAgICAgIGNvbW1hbmQuCisKKyAgIElGIEstOTUgY29tbWFuZAorICAgICAgICAgIEtlcm1p dCA5NSwgYnV0IG5vdCBDLUtlcm1pdCBvciBNUy1ET1MgS2VybWl0LCBleGVjdXRlcyB0aGUKKyAg ICAgICAgICBjb21tYW5kLgorCisgICBJRiBNUy1LRVJNSVQgY29tbWFuZAorICAgICAgICAgIE1T LURPUyBLZXJtaXQsIGJ1dCBub3QgQy1LZXJtaXQgb3IgS2VybWl0IDk1LCBleGVjdXRlcyB0aGUK KyAgICAgICAgICBjb21tYW5kLgorCisgIDcuNS4gVXNpbmcgTW9yZSB0aGFuIFRlbiBNYWNybyBB cmd1bWVudHMKKworICAgVGhlIFx2KGFyZ2MpIHZhcmlhYmxlIG5vdyBnaXZlcyB0aGUgYWN0dWFs IG51bWJlciBvZiBhcmd1bWVudHMsIGV2ZW4gaWYKKyAgIHRoZSBudW1iZXIgaXMgZ3JlYXRlciB0 aGFuIDk6CisKKyAgQy1LZXJtaXQ+IGRlZmluZSB4eCBlY2hvIFx2KGFyZ2MpCisgIEMtS2VybWl0 PiB4eCBhIGIgYyBkIGUgZiBnIGggaSBqIGsgbCBtIG4gbyBwIHEgciBzIHQgdSB2IHcgeCB5IHoK KyAgMjcKKworICAgUmVtZW1iZXIgdGhhdCBcdihhcmdjKSBpbmNsdWRlcyB0aGUgbmFtZSBvZiB0 aGUgbWFjcm8gaXRzZWxmLCBzbyBpdCBpcworICAgYWx3YXlzIGF0IGxlYXN0IDEsIGFuZCBpcyBh bHdheXMgMSBncmVhdGVyIHRoYW4gdGhlIGFjdHVhbCBudW1iZXIgb2YKKyAgIGFyZ3VtZW50cy4g QXMgaW4gdmVyc2lvbnMgNi4wIGFuZCBlYXJsaWVyLCBpZiBtb3JlIHRoYW4gOSBhcmd1bWVudHMg YXJlCisgICBnaXZlbiwgb25seSB0aGUgZmlyc3QgbmluZSBhcmUgYXNzaWduZWQgdG8gdGhlIHZh cmlhYmxlcyBcJTEuLlwlOS4KKworICAgVGhlIFwmX1tdIGFycmF5LCBkaXNjdXNzZWQgb24gcGFn ZSAzNTMgb2YgWzU5NF1Vc2luZyBDLUtlcm1pdCwgMm5kIGVkLAorICAgbm93IGhvbGRzIGFsbCB0 aGUgYXJndW1lbnRzLCB1cCB0byBzb21lIGltcGxlbWVudGF0aW9uLWRlcGVuZGVudCBsaW1pdAor ICAgKDY0IG9yIGdyZWF0ZXIpLCByYXRoZXIgdGhhbiBvbmx5IHRoZSBmaXJzdCA5LiBUbyBpbGx1 c3RyYXRlOiB0aGUKKyAgIGZvbGxvd2luZyBtYWNybyB0ZWxscyB0aGUgbnVtYmVyIG9mIGFyZ3Vt ZW50cyBpdCB3YXMgY2FsbGVkIHdpdGggYW5kCisgICB0aGVuIHByaW50cyB0aGVtOgorCisgIGRl ZmluZSBzaG93X2FsbF9hcmdzIHsKKyAgICAgIGxvY2FsIFwlaQorICAgICAgZWNobyBcJl9bMF0g LSBOdW1iZXIgb2YgYXJndW1lbnRzOiBcZmV2YWwoXHYoYXJnYyktMSkKKyAgICAgIGZvciBcJWkg MSBcdihhcmdjKS0xIDEgeyBlY2hvIFxmbHBhZChcJWksMykuICJcJl9bXCVpXSIgfQorICB9CisK KyAgIFdpdGhpbiBhIG1hY3JvIFwmX1swXSwgbGlrZSBcJTAsIGNvbnRhaW5zIHRoZSBuYW1lIG9m IHRoZSBtYWNyby4KKworICAgQXQgdG9wIGxldmVsLCB0aGUgXCZfW10gYXJyYXkgaXMgZmlsbGVk IGFzIGZvbGxvd3M6CisKKyAgICAgKiBJZiB0aGUgZmlyc3QgYXJndW1lbnQgb24gdGhlIEMtS2Vy bWl0IGNvbW1hbmQgbGluZSB3YXMgYSBmaWxlbmFtZSwKKyAgICAgICBvciBDLUtlcm1pdCB3YXMg aW52b2tlZCBmcm9tIGEgIktlcmJhbmciIHNjcmlwdCAoWzU5NV1TZWN0aW9uCisgICAgICAgNy4x OSksIGVsZW1lbnQgMCBjb250YWlucyB0aGUgZmlsZW5hbWUsIGFuZCBlbGVtZW50cyAxIHRocm91 Z2gKKyAgICAgICBcdihhcmdjKS0xIGhvbGQgdGhlIHJlbWFpbmluZyBjb21tYW5kLWxpbmUgYXJn dW1lbnRzLgorICAgICAqIE90aGVyd2lzZSB0aGUgcHJvZ3JhbSBuYW1lIGdvZXMgaW4gZWxlbWVu dCAwLCBhbmQgZWxlbWVudHMgMQorICAgICAgIHRocm91Z2ggXHYoYXJnYyktMSBob2xkIGFueSBh cmd1bWVudHMgdGhhdCB3ZXJlIGluY2x1ZGVkIGFmdGVyICItLSIKKyAgICAgICBvciAiPSIKKwor ICAgVGhlIG5ldyBcJSogdmFyaWFibGUsIHdoZW4gdXNlZCB3aXRoaW4gYSBtYWNybywgaXMgcmVw bGFjZWQgYnkgdGhlIHRleHQKKyAgIHRoYXQgZm9sbG93ZWQgdGhlIG1hY3JvIG5hbWUgaW4gdGhl IG1hY3JvIGludm9jYXRpb24uIElmIG5vIGFyZ3VtZW50cworICAgd2VyZSBnaXZlbiwgXCUqIGlz IHJlcGxhY2VkIGJ5IHRoZSBlbXB0eSBzdHJpbmcuIEV4YW1wbGVzOgorCisgIEMtS2VybWl0PiBk ZWZpbmUgeHggZWNobyBbXCUqXQorICBDLUtlcm1pdD4gZGVmaW5lIFwlYSBvb2ZhCisgIEMtS2Vy bWl0PiB4eAorICBbXQorICBDLUtlcm1pdD4geHggXCVhCisgIFtvb2ZhXQorICBDLUtlcm1pdD4g eHggYQorICBbYV0KKyAgQy1LZXJtaXQ+IHh4IGEgYgorICBbYSBiXQorICBDLUtlcm1pdD4geHgg YSBiIGMKKyAgW2EgYiBjXQorICBDLUtlcm1pdD4geHggYSBiIGMgZCBlIGYgZyBoIGkgaiBrIGwg bSBuIG8gcCBxIHIgcyB0IHUgdiB3IHggeSB6CisgIFthIGIgYyBkIGUgZiBnIGggaSBqIGsgbCBt IG4gbyBwIHEgciBzIHQgdSB2IHcgeCB5IHpdCisKKyAgIE5vdGUgdGhhdCBcJSogY2FuIG5vdCBi ZSB1c2VkIGF0IHRvcCBsZXZlbCwgc2luY2UgS2VybWl0IGRvZXMgbm90IGhhdmUKKyAgIGFjY2Vz cyB0byB0aGUgcmF3IGNvbW1hbmQgbGluZSAob25seSB0byBpdHMgZWxlbWVudHMgc2VwYXJhdGVs eSwgYWZ0ZXIKKyAgIHRoZXkgaGF2ZSBiZWVuIHByb2Nlc3NlZCBieSB0aGUgc2hlbGwgYW5kIHRo ZSBDIGxpYnJhcnkpLgorCisgICBDLUtlcm1pdCA3LjAgYWxzbyBhZGRzIGEgU0hJRlQgY29tbWFu ZDoKKworICAgU0hJRlQgWyBudW1iZXIgXQorICAgICAgICAgIFNoaWZ0cyB0aGUgbWFjcm8gYXJn dW1lbnRzIChleGNlcHQgYXJndW1lbnQgMCkgdGhlIGdpdmVuIG51bWJlcgorICAgICAgICAgIG9m IHBsYWNlcyB0byB0aGUgbGVmdCBhbmQgYWRqdXN0cyBcdihhcmdjKSBhY2NvcmRpbmdseS4gVGhl CisgICAgICAgICAgZGVmYXVsdCBudW1iZXIgaXMgMS4KKworICAgVG8gaWxsdXN0cmF0ZSwgc3Vw cG9zZSBtYWNybyBYWFggaXMgaW52b2tlZCBhcyBmb2xsb3dzOgorCisgIHh4eCBhcmcxIGFyZzIg YXJnMworCisgICBUaGVuIGluc2lkZSBYWFgsIFwlMSBpcyAiYXJnMSIsIFwlMiBpcyAiYXJnMiIs IGFuZCBcJTMgaXMgImFyZzMiLiBBZnRlcgorICAgYSBTSElGVCBjb21tYW5kIGlzIGdpdmVuIGlu c2lkZSBYWFgsIHRoZW4gXCUxIGlzICJhcmcyIiwgXCUyIGlzICJhcmczIiwKKyAgIGFuZCBcJTMg aXMgZW1wdHkuIFwlMCAodGhlIG5hbWUgb2YgdGhlIG1hY3JvKSByZW1haW5zIHVuY2hhbmdlZC4K KworICAgSWYgbW9yZSB0aGFuIDkgYXJndW1lbnRzIHdlcmUgZ2l2ZW4sIHRoZW4gYXJndW1lbnRz IGFyZSBzaGlmdGVkIGludG8KKyAgIHRoZSBcJTEuLjkgdmFyaWFibGVzIGZyb20gdGhlIGFyZ3Vt ZW50IHZlY3RvciBhcnJheS4KKworICAgQXQgdG9wIGxldmVsLCB0aGUgU0hJRlQgY29tbWFuZCBv cGVyYXRlcyBvbiB0aGUgXCZfW10gYXJyYXkgYW5kIFwlMS4uOQorICAgdmFyaWFibGVzOyB0aGUg XCZAW10gYXJyYXkgaXMgbm90IGFmZmVjdGVkLiBTZWUgWzU5Nl1TZWN0aW9uIDcuMTYgZm9yCisg ICBkZXRhaWxzLgorCisgICBUaGUgXCUqIHZhcmlhYmxlIGlzIG5vdCBhZmZlY3RlZCBieSB0aGUg U0hJRlQgY29tbWFuZC4KKworICA3LjYuIENsYXJpZmljYXRpb24gb2YgRnVuY3Rpb24gQ2FsbCBT eW50YXgKKworICAgU3BhY2VzIGFyZSBub3JtYWxseSBzdHJpcHBlZCBmcm9tIHRoZSBmcm9udCBh bmQgYmFjayBvZiBlYWNoIGZ1bmN0aW9uCisgICBhcmd1bWVudDsgdG8gcHJldmVudCB0aGlzIGVu Y2xvc2UgdGhlIGFyZ3VtZW50IGluIGJyYWNlczoKKworICBcZnNwbGl0KFwlYSwmYSx7IH0pCisK KyAgIEhvd2V2ZXIsIGZ1bmN0aW9uIGNhbGxzIHRoYXQgY29udGFpbiBzcGFjZXMgY2FuIG1ha2Ug dHJvdWJsZSB3aGVuIHRoZQorICAgZnVuY3Rpb24gaXMgdG8gYmUgdXNlZCBpbiBhICJ3b3JkIiBm aWVsZCwgc2luY2Ugc3BhY2Ugc2VwYXJhdGVzIHdvcmRzLgorICAgRm9yIGV4YW1wbGU6CisKKyAg Zm9yIFwlaSAxIFxmc3BsaXQoXCVhLCZhLHsgfSkgMSB7CisgICAgZWNobyBcJWkuICJcJmFbXCVp XSIKKyAgfQorCisgICBJbiBtb3N0IGNhc2VzLCB0aGUgdHJvdWJsZSBjYW4gYmUgYXZlcnRlZCBi eSBlbmNsb3NpbmcgdGhlIGZ1bmN0aW9uCisgICByZWZlcmVuY2UgaW4gYnJhY2VzOgorCisgIGZv ciBcJWkgMSB7XGZzcGxpdChcJWEsJmEseyB9KX0gMSB7CisgICAgZWNobyBcJWkuICJcJmFbXCVp XSIKKyAgfQorCisgICBvciBieSByZXBsYWNpbmcgc3BhY2VzIHdpdGggXDMyICh0aGUgQVNDSUkg Y29kZSBmb3Igc3BhY2UpOgorCisgIGZvciBcJWkgMSBcZnNwbGl0KFwlYSwmYSxcMzIpIDEgewor ICAgIGVjaG8gXCVpLiAiXCZhW1wlaV0iCisgIH0KKworICAgQnJhY2VzIGFyZSBhbHNvIHVzZWQg aW4gZnVuY3Rpb24gY2FsbHMgdG8gaW5kaWNhdGUgZ3JvdXBpbmcuIEZvcgorICAgZXhhbXBsZToK KworICBcZnN1YnN0cmluZyhhYmNkLDIsMikgPSAiYmMiCisKKyAgIEJ1dCBzdXBwb3NlICJhYmNk IiBuZWVkZWQgdG8gY29udGFpbiBhIGNvbW1hOgorCisgIFxmc3Vic3RyaW5nKGFiLGNkLDIsMikK KworICAgVGhpcyB3b3VsZCBjYXVzZSBhbiBlcnJvciwgc2luY2UgImNkIiBhcHBlYXJzIHRvIGJl IHRoZSBzZWNvbmQKKyAgIGFyZ3VtZW50LCB3aGVuIHJlYWxseSB5b3Ugd2FudCB0aGUgZmlyc3Qg IjIiIHRvIGJlIHRoZSBzZWNvbmQgYXJndW1lbnQuCisgICBCcmFjZXMgdG8gdGhlIHJlc2N1ZToK KworICBcZnN1YnN0cmluZyh7YWIsY2R9LDIsMikgPSAiYiwiCisKKyAgIFNpbWlsYXJseSwgbGVh ZGluZyBhbmQgdHJhaWxpbmcgc3BhY2VzIGFyZSBzdHJpcHBlZCBmcm9tIGVhY2ggYXJndW1lbnQs CisgICBzbzoKKworICBcZnN1YnN0cmluZyggYWJjZCAsMiwyKSA9ICJiYyIKKworICAgYnV0IGJy YWNlcyBwcmVzZXJ2ZSB0aGVtOgorCisgIFxmc3Vic3RyaW5nKHsgYWJjZCB9LDIsMikgPSAiYWIi CisKKyAgIEdpdmVuIHRoZXNlIHNwZWNpYWwgdXNlcyBmb3IgYnJhY2VzLCB0aGVyZSBpcyBubyB3 YXkgdG8gcGFzcyBsaXRlcmFsCisgICBicmFjZXMgdG8gdGhlIGZ1bmN0aW9uIGl0c2VsZi4gRm9y IGV4YW1wbGU6CisKKyAgXGZzdWJzdHJpbmcoYWJ7Y2QsMiwyKQorCisgICBjYXVzZXMgYW4gZXJy b3IuCisKKyAgIFNvIGlmIHlvdSBuZWVkIGEgZnVuY3Rpb24gdG8gaW5jbHVkZSBicmFjZXMsIGRl ZmluZSBhIHZhcmlhYmxlCisgICBjb250YWluaW5nIHRoZSBzdHJpbmcgdGhhdCBoYXMgYnJhY2Vz LiBFeGFtcGxlOgorCisgIGRlZmluZSBcJWEgYWJ7Y2QKKyAgXGZzdWJzdHJpbmcoXCVhLDIsMikg PSAiYnsiCisKKyAgIElmIHRoZSBzdHJpbmcgaXMgdG8gc3RhcnQgd2l0aCBhIGxlYWRpbmcgYnJh Y2UgYW5kIGVuZCB3aXRoIGEgY2xvc2luZworICAgYnJhY2UsIHRoZW4gZG91YmxlIGJyYWNlcyBt dXN0IGFwcGVhciBhcm91bmQgdGhlIHN0cmluZyAod2hpY2ggaXRzZWxmCisgICBpcyBlbmNsb3Nl ZCBpbiBicmFjZXMpOgorCisgIGRlZmluZSBcJWEge3t7Zm9vfX19CisgIFxmc3Vic3RyaW5nKFwl YSkgPSAie2Zvb30iCisKKyAgIFRoaXMgYWxzbyB3b3JrcyBmb3IgYW55IG90aGVyIGtpbmQgb2Yg c3RyaW5nOgorCisgIGRlZmluZSBcJWEge3thYntjZH19CisgIGVjaG8gXGZzdWJzdHJpbmcoXCVh KSA9ICJhYntjZCIKKworICA3LjcuIEF1dG9kb3dubG9hZCBkdXJpbmcgSU5QVVQgQ29tbWFuZCBF eGVjdXRpb24KKworICAgQXMgb2YgNi4xIC8gMS4xLjEyLCBDLUtlcm1pdCBjYW4gYmUgdG9sZCB0 byBsb29rIGZvciBpbmNvbWluZyBLZXJtaXQKKyAgIChvciBabW9kZW0pIHBhY2tldHMgZHVyaW5n IGV4ZWN1dGlvbiBvZiBhbiBJTlBVVCBjb21tYW5kLiBCeSBkZWZhdWx0CisgICAoZm9yIGNvbnNp c3RlbmN5IHdpdGggZWFybGllciByZWxlYXNlcyksIHRoaXMgaXMgbm90IGRvbmUuIFlvdSBjYW4K KyAgIGVuYWJsZSB0aGlzIGZlYXR1cmUgd2l0aDoKKworICBTRVQgSU5QVVQgQVVUT0RPV05MT0FE IE9OCisKKyAgIChhbmQgZGlzYWJsZSBpdCBhZ2FpbiB3aXRoIE9GRi4pCisKKyAgIE9uZSBwb3Nz aWJsZSB1c2UgZm9yIHRoaXMgZmVhdHVyZSBpcyBhcyBhIHNlcnZlciBtb2RlIHdpdGggYSB0aW1l CisgICBsaW1pdDoKKworICBJTlBVVCAzNjAwIHNlY3JldC1zdHJpbmctdG8tZW5kLXRoZS1JTlBV VC1jb21tYW5kCisKKyAgIEluIHRoaXMgZXhhbXBsZSwgYW55IEdFVCwgU0VORCwgb3IgUkVNT1RF IGNvbW1hbmRzIHJlY2VpdmVkIHdpdGhpbiBvbmUKKyAgIGhvdXIgKDM2MDAgc2Vjb25kcykgb2Yg d2hlbiB0aGUgSU5QVVQgY29tbWFuZCB3YXMgaXNzdWVkIHdpbGwgYmUKKyAgIGV4ZWN1dGVkLiBI ZXJlJ3MgYW5vdGhlciBleGFtcGxlLCBpbiB3aGljaCB3ZSB3YW50IHRvIHN0YXkgb3BlbiB1bnRp bAorICAgMTE6MzBwbSwgb3IgdW50aWwgaW50ZXJydXB0ZWQgYnkgc2V2ZW4gY29uc2VjdXRpdmUg Q3RybC1DIChcMykKKyAgIGNoYXJhY3RlcnM6CisKKyAgSU5QVVQgMjM6MzA6MDAgXDNcM1wzXDNc M1wzXDMKKworICAgVGhlIElOUFVUIEFVVE9ET1dOTE9BRCBzZXR0aW5nIGlzIGRpc3BsYXllZCBi eSBTSE9XIFNDUklQVFMgb3IgU0hPVworICAgSU5QVVQuCisKKyAgNy44LiBCdWlsdC1pbiBIZWxw IGZvciBGdW5jdGlvbnMuCisKKyAgIEJlZ2lubmluZyBpbiBDLUtlcm1pdCA3LjAsIHlvdSBtYXkg b2J0YWluIGEgZGVzY3JpcHRpb24gb2YgdGhlIGNhbGxpbmcKKyAgIGNvbnZlbnRpb25zIGFuZCBy ZXR1cm4gdmFsdWVzIG9mIGFueSBidWlsdC1pbiBmdW5jdGlvbiwgc3VjaCBhcworICAgXGZzdWJz dHJpbmcoKSwgd2l0aCB0aGUgbmV3IEhFTFAgRlVOQ1RJT04gY29tbWFuZDsgZ2l2ZSB0aGUgZnVu Y3Rpb24ncworICAgbmFtZSB3aXRob3V0IHRoZSBsZWFkaW5nICJcZiIsIGUuZy4gImhlbHAgZnVu YyBzdWJzdHJpbmciLiBZb3UgY2FuIHVzZQorICAgPywgY29tcGxldGlvbiwgYW5kIGFiYnJldmlh dGlvbiBpbiB0aGUgbm9ybWFsIG1hbm5lci4KKworICA3LjkuIFZhcmlhYmxlIEFzc2lnbm1lbnRz CisKKyAgICA3LjkuMS4gQXNzaWdubWVudCBPcGVyYXRvcnMKKworICAgUHJvZ3JhbW1lcnMgYWNj dXN0b21lZCB0byBsYW5ndWFnZXMgc3VjaCBhcyBDIG9yIEZvcnRyYW4gbWlnaHQgZmluZAorICAg S2VybWl0J3MgbWV0aG9kIG9mIGFzc2lnbmluZyB2YWx1ZXMgdG8gdmFyaWFibGVzIHVubmF0dXJh bCBvciBhd2t3YXJkLgorICAgQmVnaW5uaW5nIGluIEMtS2VybWl0IDcuMCwgeW91IGNhbiB1c2Ug dGhlIGZvbGxvd2luZyBhbHRlcm5hdGl2ZQorICAgbm90YXRpb246CisKKyAubmFtZSA9IHZhbHVl ICAgIGlzIGVxdWl2YWxlbnQgdG8gICBERUZJTkUgbmFtZSB2YWx1ZQorIC5uYW1lIDo9IHZhbHVl ICAgaXMgZXF1aXZhbGVudCB0byAgIEFTU0lHTiBuYW1lIHZhbHVlCisgLm5hbWUgOjo9IHZhbHVl ICBpcyBlcXVpdmFsZW50IHRvICAgQVNTSUdOIG5hbWUgXGZldmFsKHZhbHVlKQorCisgICBXaGVu IHRoZSBjb21tYW5kIGJlZ2lucyB3aXRoIGEgcGVyaW9kICguKSwgdGhpcyBpbmRpY2F0ZXMgYW4K KyAgIGFzc2lnbm1lbnQuIFRoZSBuYW1lIGNhbiBiZSBhIG1hY3JvIG5hbWUsIGEgXCV7ZGlnaXQs bGV0dGVyfSB2YXJpYWJsZSwKKyAgIG9yIGFuIGFycmF5IGVsZW1lbnQuIFRoZXJlIGNhbiBiZSBz cGFjZShzKSBiZXR3ZWVuICIuIiBhbmQgdGhlIG5hbWUuCisgICBFeGFtcGxlczoKKworICAuXCVh ID0gVGhpcyBpcyBhIHN0cmluZyAgOyBTYW1lIGFzICJkZWZpbmUgXCVhIFRoaXMgaXMgYSBzdHJp bmciCisgIGVjaG8gXCVhCisgIFRoaXMgaXMgYSBzdHJpbmcKKworICAueHh4ID0gXCVhICAgICAg ICAgICAgICAgOyBTYW1lIGFzICJkZWZpbmUgeHh4IFwlYSIKKyAgZWNobyBcbSh4eHgpCisgIFwl YQorCisgIC54eHggOj0gXCVhICAgICAgICAgICAgICA7IFNhbWUgYXMgImFzc2lnbiB4eHggXCVh IgorICBlY2hvIFxtKHh4eCkKKyAgVGhpcyBpcyBhIHN0cmluZworCisgIGRlY2xhcmUgXCZhWzJd ICAgICAgICAgICA7IFVzZSB3aXRoIGFycmF5cy4uLgorICBkZWZpbmUgXCVpIDIKKyAgLlwmYVsx XSA9IGZpcnN0CisgIC5cJmFbXCVpXSA9IHNlY29uZAorCisgICBUaGUgZm9sbG93aW5nIHNlcXVl bmNlIGlsbHVzdHJhdGVzIHRoZSBkaWZmZXJlbmNlcyBhbW9uZyB0aHJlZSBsZXZlbHMKKyAgIG9m IGV2YWx1YXRpb246CisKKyAgLlwleCA9IDIgICAgICAgICAgOyBEZWZpbmUgYSB2YXJpYWJsZSB0 byBoYXZlIGEgbnVtZXJpYyB2YWx1ZQorICAuXCV5ID0gKDMgKyBcJXgpICA7IERlZmluZSBhbm90 aGVyIHZhcmlhYmxlIGFzIGFuIGFyaXRobWV0aWMgZXhwcmVzc2lvbgorCisgIC54eHggPSA0ICog XCV5ICAgIDsgIj0iIHNpbXBseSBjb3BpZXMgdGhlIHJpZ2h0LWhhbmQgc2lkZS4KKyAgZWNobyBc bSh4eHgpCisgIDQgKiBcJXkKKworICAueHh4IDo9IDQgKiBcJXkgICA7ICI6PSIgZXZhbHVhdGVz IHRoZSB2YXJpYWJsZXMgZmlyc3QsIHRoZW4gY29waWVzLgorICBlY2hvIFxtKHh4eCkKKyAgNCAq ICgzICsgMikKKworICAueHh4IDo6PSA0ICogXCV5ICA7ICI6Oj0iIGV2YWx1YXRlcyB0aGUgZXhw cmVzc2lvbiwgdGhlbiBjb3BpZXMuCisgIGVjaG8gXG0oeHh4KQorICAyMAorCisgICBZb3UgY2Fu IGFsc28gdXNlIHRoaXMgc3ludGF4IHRvIGNsZWFyICh1bmRlZmluZSkgYSB2YXJpYWJsZToKKwor ICAuXCVhID0gb29mYSAgICAgICA7IERlZmluZSB0aGUgdmFyaWFibGUKKyAgZWNobyAiXCVhIgor ICAib29mYSIKKyAgLlwlYSAgICAgICAgICAgICAgOyBDbGVhciB0aGUgdmFyaWFibGUKKyAgZWNo byAiXCVhIgorICAiIgorCisgICBFeHRyYSBjcmVkaXQ6IENhbiB5b3UgZ3Vlc3Mgd2hhdCBoYXBw ZW5zIGJlbG93IHdoZW4gdGhlIGZpbGUgImFiYyIgZG9lcworICAgbm90IGV4aXN0PworCisgIGZv cGVuIC9yZWFkIFwlYyBhYmMKKyAgaWYgZmFpbCAuLi4KKworICAgIDcuOS4yLiBOZXcgQXNzaWdu bWVudCBDb21tYW5kcworCisgICBSZWNhbGwgdGhlIERFRklORSBhbmQgQVNTSUdOIGNvbW1hbmRz LCBhbmQgdGhlaXIgaGlkZGVuIGNvdW50ZXJwYXJ0cywKKyAgIF9ERUZJTkUgYW5kIF9BU1NJR04u IFRoZSBmb3JtZXIgdGFrZSB0aGUgdmFyaWFibGUgbmFtZSBsaXRlcmFsbHksIHRoZQorICAgbGF0 dGVyIGV2YWx1YXRlIHRoZSB2YXJpYWJsZS1uYW1lIGZpZWxkIHRvIGZvcm0gdGhlIHZhcmlhYmxl IG5hbWUKKyAgIGR5bmFtaWNhbGx5LiBFeGFtcGxlczoKKworICBERUZJTkUgXCV4IGZvbyAgICA7 IFNldHMgdGhlIHZhbHVlIG9mIHRoZSB2YXJpYWJsZSBcJXggdG8gImZvbyIuCisgIERFRklORSBc JWEgXCV4ICAgIDsgU2V0cyB0aGUgdmFsdWUgb2YgdGhlIHZhcmlhYmxlIFwlYSB0byAiXCV4Ii4K KyAgX0RFRklORSB4X1wlYSBcJXggOyBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgdmFyaWFibGUgeF9m b28gdG8gIlwleCIuCisgIEFTU0lHTiBcJWEgXCV4ICAgIDsgU2V0cyB0aGUgdmFsdWUgb2YgdGhl IHZhcmlhYmxlIFwlYSB0byB0aGUgImZvbyIuCisgIF9BU1NJR04geF9cJWEgXCV4IDsgU2V0cyB0 aGUgdmFsdWUgb2YgdGhlIHZhcmlhYmxlIHhfZm9vIHRvICJmb28iLgorCisgICBUaGlzIGNvbmNl cHQgaGFzIGJlZW4gY2FycmllZCBvdmVyIHRvIHRoZSByZW1haW5pbmcgdmFyaWFibGUtYXNzaWdu bWVudAorICAgY29tbWFuZHM6IEVWQUxVQVRFLCBJTkNSRU1FTlQsIGFuZCBERUNSRU1FTlQ6CisK KyAgIEVWQUxVQVRFIHZhcmlhYmxlbmFtZSBleHByZXNzaW9uCisgICAgICAgICAgRXZhbHVhdGVz IHRoZSBhcml0aG1ldGljIGV4cHJlc3Npb24gYW5kIGFzc2lnbnMgaXRzIHZhbHVlIHRvIHRoZQor ICAgICAgICAgIHZhcmlhYmxlIHdob3NlIG5hbWUgaXMgZ2l2ZW4uIEV4YW1wbGU6ICJldmFsIFwl YSAxKzEiIGFzc2lnbnMKKyAgICAgICAgICAiMiIgdG8gXCVhLgorCisgICBfRVZBTFVBVEUgbWV0 YW5hbWUgZXhwcmVzc2lvbgorICAgICAgICAgIEV2YWx1YXRlcyB0aGUgYXJpdGhtZXRpYyBleHBy ZXNzaW9uIGFuZCBhc3NpZ25zIGl0cyB2YWx1ZSB0byB0aGUKKyAgICAgICAgICB2YXJpYWJsZSB3 aG9zZSBuYW1lIGlzIGNvbXB1dGVkIGZyb20gdGhlIGdpdmVuIG1ldGFuYW1lLgorICAgICAgICAg IEV4YW1wbGU6ICJldmFsIGZvbzxcJWE+OjpcJTEgXCUyICogKFwlMyArIFwlNCkiIGFzc2lnbnMg dGhlCisgICAgICAgICAgdmFsdWUgb2YgIlwlMiAqIChcJTMgKyBcJTQpIiB0byB0aGUgdmFyaWFi bGUgd2hvc2UgbmFtZSBpcworICAgICAgICAgIGNvbXB1dGVkIGZyb20gImZvbzxcJWE+OjpcJTEi LgorCisgICBJTkNSRU1FTlQgdmFyaWFibGVuYW1lIFsgZXhwcmVzc2lvbiBdCisgICAgICAgICAg RXZhbHVhdGVzIHRoZSBhcml0aG1ldGljIGV4cHJlc3Npb24gYW5kIGFkZHMgaXRzIHZhbHVlIHRv IHRoZQorICAgICAgICAgIHZhbHVlIG9mIHRoZSB2YXJpYWJsZSB3aG9zZSBuYW1lIGlzIGdpdmVu LiBFeGFtcGxlOiAiaW5jcmVtZW50CisgICAgICAgICAgXCVhIi4KKworICAgX0lOQ1JFTUVOVCBt ZXRhbmFtZSBbIGV4cHJlc3Npb24gXQorICAgICAgICAgIEV2YWx1YXRlcyB0aGUgYXJpdGhtZXRp YyBleHByZXNzaW9uIGFuZCBhZGRzIGl0cyB2YWx1ZSB0byB0aGUKKyAgICAgICAgICB2YWx1ZSBv ZiB0aGUgdmFyaWFibGUgd2hvc2UgbmFtZSBpcyBjb21wdXRlZCBmcm9tIHRoZSBnaXZlbgorICAg ICAgICAgIG1ldGFuYW1lLiBFeGFtcGxlOiAiX2luY3JlbWVudCBXb3Jkczo6XCUxLmNvdW50W1wl Ml0iLgorCisgICBERUNSRU1FTlQgdmFyaWFibGVuYW1lIFsgZXhwcmVzc2lvbiBdCisgICAgICAg ICAgRXZhbHVhdGVzIHRoZSBhcml0aG1ldGljIGV4cHJlc3Npb24gYW5kIHN1YnRyYWN0cyBpdHMg dmFsdWUgZnJvbQorICAgICAgICAgIHRoZSB2YWx1ZSBvZiB0aGUgdmFyaWFibGUgd2hvc2UgbmFt ZSBpcyBnaXZlbi4KKworICAgX0RFQ1JFTUVOVCBtZXRhbmFtZSBbIGV4cHJlc3Npb24gXQorICAg ICAgICAgIEV2YWx1YXRlcyB0aGUgYXJpdGhtZXRpYyBleHByZXNzaW9uIGFuZCBzdWJ0cmFjdHMg aXRzIHZhbHVlIGZyb20KKyAgICAgICAgICB0aGUgdmFsdWUgb2YgdGhlIHZhcmlhYmxlIHdob3Nl IG5hbWUgaXMgY29tcHV0ZWQgZnJvbSB0aGUgZ2l2ZW4KKyAgICAgICAgICBtZXRhbmFtZS4KKwor ICAgV0FSTklORzogVGhlIHN5bnRheCBvZiB0aGUgRVZBTFVBVEUgY29tbWFuZCBoYXMgY2hhbmdl ZCBzaW5jZSBDLUtlcm1pdAorICAgNi4wIGFuZCBLOTUgMS4xLjE3LiBQcmV2aW91c2x5LCBpdCBk aWQgbm90IGluY2x1ZGUgYSB2YXJpYWJsZSBuYW1lLAorICAgb25seSBhbiBleHByZXNzaW9uLiBU byByZXN0b3JlIHRoZSBvbGQgYmVoYXZpb3IsIHVzZSBTRVQgRVZBTFVBVEUgT0xELgorICAgVG8g cmV0dXJuIHRvIHRoZSBuZXcgYmVoYXZpb3IgYWZ0ZXIgcmVzdG9yaW5nIHRoZSBvbGQgYmVoYXZp b3IsIHVzZSBTRVQKKyAgIEVWQUxVQVRFIE5FVy4KKworICAgTk9URTogVGhlcmUgYXJlIG5vIGFu YWxvZ3MgdG8gdGhlICJfIiBjb21tYW5kcyBmb3IgdGhlIG9wZXJhdG9ycworICAgZGVzY3JpYmVk IGluIFs1OTddU2VjdGlvbiA3LjkuMTsgdGhvc2Ugb3BlcmF0b3JzIGNhbiBub3QgYmUgdXNlZCB0 bworICAgYXNzaWduIHZhbHVlcyB0byB2YXJpYWJsZXMgd2hvc2UgbmFtZXMgbXVzdCBiZSBjb21w dXRlZC4KKworICA3LjEwLiBBcnJheXMKKworICAgQy1LZXJtaXQgNy4wIGFkZHMgbG90cyBvZiBu ZXcgYXJyYXktcmVsYXRlZCBmZWF0dXJlcywgYW5kIGdyb3VwcyB0aGVtCisgICB0b2dldGhlciB1 bmRlciB0aGUgTkVXIEFSUkFZIGNvbW1hbmQ6CisKKyAgIEFSUkFZIHsgQ0xFQVIsIENPUFksIERF Q0xBUkUsIERFU1RST1ksIFJFU0laRSwgU0hPVywgU09SVCB9CisKKyAgIEluIGVhY2ggb2YgdGhl IEFSUkFZIGNvbW1hbmRzLCB3aGVyZXZlciBhbiBhcnJheSBuYW1lIGlzIGV4cGVjdGVkLAorICAg InNob3J0IGZvcm1zIiBtYXkgYmUgdXNlZC4gRm9yIGV4YW1wbGUsIGFsbCBvZiB0aGUgZm9sbG93 aW5nIGFyZQorICAgYWNjZXB0YWJsZToKKworICBhcnJheSBzaG93IFwmYVtdICAob3IgU0hPVyBB UlJBWS4uLikKKyAgYXJyYXkgc2hvdyAmYVtdCisgIGFycmF5IHNob3cgYVtdCisgIGFycmF5IHNo b3cgJmEKKyAgYXJyYXkgc2hvdyBhCisKKyAgIEluIGFkZGl0aW9uLCByYW5nZXMgYXJlIGFjY2Vw dGVkIGluIHRoZSBBUlJBWSBDT1BZLCBBUlJBWSBDTEVBUiwgQVJSQVkKKyAgIFNFVCwgQVJSQVkg U0hPVywgYW5kIEFSUkFZIFNPUlQgY29tbWFuZHM6CisKKyAgYXJyYXkgY2xlYXIgXCZhWzE2XSAg ICAgOyBDbGVhcnMgMTYgdGhydSBlbmQKKyAgYXJyYXkgY2xlYXIgJmFbMTZdICAgICAgOyBEaXR0 bworICBhcnJheSBjbGVhciBhWzE2XSAgICAgICA7IERpdHRvCisKKyAgYXJyYXkgY2xlYXIgXCZh WzE2OjMyXSAgOyBDbGVhcnMgMTYgdGhydSAzMgorICBhcnJheSBjbGVhciAmYVsxNjozMl0gICA7 IERpdHRvCisgIGFycmF5IGNsZWFyIGFbMTY6MzJdICAgIDsgRGl0dG8KKworICAgV2hlbiB1c2lu ZyBhcnJheSBuYW1lcyBhcyBmdW5jdGlvbiBhcmd1bWVudHMsIHlvdSBtdXN0IG9taXQgdGhlICJc IiBhbmQKKyAgIHlvdSBtdXN0IGluY2x1ZGUgdGhlICImIi4gWW91IG1heSBvcHRpb25hbGx5IGlu Y2x1ZGUgZW1wdHkgYnJhY2tldHMuCisgICBFeGFtcGxlczoKKworICBcZnNwbGl0KFwlYSxhKSAg ICAgICAgICA7IEJhZAorICBcZnNwbGl0KFwlYSxcJmEpICAgICAgICA7IEJhZAorICBcZnNwbGl0 KFwlYSwmYVszXSkgICAgICA7IEJhZAorCisgIFxmc3BsaXQoXCVhLCZhKSAgICAgICAgIDsgR29v ZAorICBcZnNwbGl0KFwlYSwmYVtdKSAgICAgICA7IEdvb2QKKworICAgIDcuMTAuMS4gQXJyYXkg SW5pdGlhbGl6ZXJzCisKKyAgIEJlZ2lubmluZyBpbiBDLUtlcm1pdCA3LjAsIHlvdSBtYXkgaW5p dGlhbGl6ZSBhbiBhcnJheSAtLSBpbiB3aG9sZSBvcgorICAgaW4gcGFydCAtLSBpbiBpdHMgZGVj bGFyYXRpb246CisKKyAgIFsgQVJSQVkgXSBERUNMQVJFIGFycmF5LW5hbWVbc2l6ZV0gWyA9IF0g WyB2YWx1ZTEgWyB2YWx1ZTIgWy4uLl0gXSBdCisKKyAgIEZvciBjb21wYXRpYmlsaXR5IHdpdGgg dmVyc2lvbnMgNUEgYW5kIDYuMCwgdGhlIEFSUkFZIGtleXdvcmQgaXMKKyAgIG9wdGlvbmFsLiBE RUNMQVJFIGNhbiBhbHNvIGJlIHNwZWxsZWQgRENMLgorCisgICBJbml0aWFsaXplcnMgYXJlIChh KSBvcHRpb25hbCwgKGIpIHN0YXJ0IHdpdGggZWxlbWVudCAxLCAoYykgbXVzdCBiZQorICAgZW5j bG9zZWQgaW4gYnJhY2VzIGlmIHRoZXkgY29udGFpbiBzcGFjZXMsIGFuZCAoZCkgYXJlIGV2YWx1 YXRlZAorICAgYWNjb3JkaW5nIHRvIG5vcm1hbCBydWxlcyBieSB0aGUgREVDTEFSRSBjb21tYW5k IHByaW9yIHRvIGFzc2lnbm1lbnQuCisgICBUaHVzIHRoZSBhc3NpZ25tZW50cyBtYWRlIGhlcmUg YXJlIHRoZSBzYW1lIGFzIHRob3NlIG1hZGUgYnkgdGhlIEFTU0lHTgorICAgY29tbWFuZC4gVGhp cyBhbGxvd3MgeW91IHRvIGluaXRpYWxpemUgYXJyYXkgZWxlbWVudHMgZnJvbSB0aGUgdmFsdWVz CisgICBvZiBvdGhlciB2YXJpYWJsZXMuIElmIHlvdSBhY3R1YWxseSB3YW50IHRvIGluaXRpYWxp emUgYW4gYXJyYXkgZWxlbWVudAorICAgdG8gdmFyaWFibGUncyBuYW1lLCBhcyBvcHBvc2VkIHRv IGl0cyB2YWx1ZSwgdXNlIGRvdWJsZSBiYWNrc2xhc2hlcyAoYXMKKyAgIGluICJcXCZhIiwgIlxc dih0aW1lKSIsIGV0YykuCisKKyAgIFRoZSBzaXplIChkaW1lbnNpb24pIG9mIHRoZSBhcnJheSBp cyBvcHRpb25hbC4gSWYgdGhlIHNpemUgaXMgb21pdHRlZCwKKyAgIGFzIGluICJcJmFbXSIsIHRo ZW4gdGhlIGFycmF5IHNpemVzIGl0c2VsZiB0byB0aGUgbnVtYmVyIG9mCisgICBpbml0aWFsaXpl cnM7IGlmIHRoZXJlIGFyZSBubyBpbml0aWFsaXplcnMgdGhlIGFycmF5IGlzIG5vdCBkZWNsYXJl ZAorICAgb3IsIGlmIGl0IHdhcyBkZWNsYXJlZCBwcmV2aW91c2x5LCBpdCBpcyBkZXN0cm95ZWQu IElmIGEgc2l6ZSBpcyBnaXZlbiwKKyAgIGFueSBleHRyYSBlbGVtZW50cyBpbiB0aGUgaW5pdGlh bGl6YXRpb24gbGlzdCBhcmUgZGlzY2FyZGVkIGFuZAorICAgaWdub3JlZC4KKworICAgTk9URTog VW5saWtlIGluIEMsIHRoZSBsaXN0IG9mIGluaXRpYWxpemVycyBpcyBOT1QgZW5jbG9zZWQgaW4g YnJhY2VzLgorICAgSW5zdGVhZCwgYnJhY2VzIGFyZSB1c2VkIHRvIGdyb3VwIG11bHRpcGxlIHdv cmRzIHRvZ2V0aGVyLiBTbzoKKworICBBUlJBWSBERUNMQVJFIFwmYVtdID0geyBvbmUgdHdvIHRo cmVlIH0KKworICAgd291bGQgY3JlYXRlIGFuIGFycmF5IHdpdGggdHdvIGVsZW1lbnRzICgwIGFu ZCAxKSwgd2l0aCBlbGVtZW50IDEKKyAgIGhhdmluZyB0aGUgdmFsdWUgIiBvbmUgdHdvIHRocmVl ICIuCisKKyAgIEV4YW1wbGVzOgorCisgICBBUlJBWSBERUNMQVJFIFwmYVsxNl0KKyAgICAgICAg ICBEZWNsYXJlcyB0aGUgYXJyYXkgXCZhIHdpdGggMTcgZWxlbWVudHMgKDAgdGhyb3VnaCAxNiks IGluIHdoaWNoCisgICAgICAgICAgYWxsIGVsZW1lbnRzIGFyZSBpbml0aWFsbHkgZW1wdHkuIElm IHRoZSBhcnJheSBcJmFbXSBleGlzdGVkCisgICAgICAgICAgYmVmb3JlLCB0aGUgZWFybGllciBj b3B5IGlzIGRlc3Ryb3llZC4KKworICAgQVJSQVkgREVDTEFSRSAmYVsxNl0KKyAgIEFSUkFZIERF Q0xBUkUgYVsxNl0KKyAgIEFSUkFZIERDTCBcJmFbMTZdCisgICBBUlJBWSBEQ0wgJmFbMTZdCisg ICBBUlJBWSBEQ0wgYVsxNl0KKyAgIERFQ0xBUkUgXCZhWzE2XQorICAgREVDTEFSRSAmYVsxNl0K KyAgIERFQ0xBUkUgYVsxNl0KKyAgIERDTCBcJmFbMTZdCisgICBEQ0wgJmFbMTZdCisgICBEQ0wg YVsxNl0KKyAgICAgICAgICBBbGwgb2YgdGhlIGFib3ZlIGFyZSB0aGUgc2FtZSBhcyB0aGUgZmly c3QgZXhhbXBsZS4KKworICAgQVJSQVkgREVDTEFSRSBcJmFbMTZdID0gYWxwaGEgYmV0YSB7Z2Ft bWEgZGVsdGF9CisgICAgICAgICAgRGVjbGFyZXMgdGhlIGFycmF5IFwmYSB3aXRoIDE3IGVsZW1l bnRzICgwIHRocm91Z2ggMTYpLAorICAgICAgICAgIGluaXRpYWxpemluZyBcJmFbMV0gdG8gImFs cGhhIiwgXCZhWzJdIHRvICJiZXRhIiwgYW5kIFwmYVszXSB0bworICAgICAgICAgICJnYW1tYSBk ZWx0YSIuIFRoZSByZW1haW5pbmcgZWxlbWVudHMgYXJlIGVtcHR5LgorCisgICBBUlJBWSBERUNM QVJFIFwmYVtdID0gYWxwaGEgYmV0YSB7Z2FtbWEgZGVsdGF9CisgICAgICAgICAgU2FtZSBhcyB0 aGUgcHJldmlvdXMgZXhhbXBsZSwgYnV0IHRoZSBhcnJheSBpcyBhdXRvbWF0aWNhbGx5CisgICAg ICAgICAgZGltZW5zaW9uZWQgdG8gMy4KKworICAgQVJSQVkgREVDTEFSRSBcJmFbM10gPSBhbHBo YSBiZXRhIHtnYW1tYSBkZWx0YX0gZXBzaWxvbiB6ZXRhCisgICAgICAgICAgVG9vIG1hbnkgaW5p dGlhbGl6ZXJzOyBvbmx5IHRoZSBmaXJzdCB0aHJlZSBhcmUga2VwdC4KKworICAgQVJSQVkgREVD TEFSRSBcJmFbMF0KKyAgIEFSUkFZIERFQ0xBUkUgXCZhW10KKyAgIEFSUkFZIERFQ0xBUkUgJmFb XQorICAgQVJSQVkgREVDTEFSRSAmYQorICAgQVJSQVkgREVDTEFSRSBhCisgICBERUNMQVJFIFwm WzBdCisgICBERUNMQVJFIGEKKyAgIERDTCBhCisgICAgICAgICAgQWxsIG9mIHRoZXNlIGFyZSBl cXVpdmFsZW50LiBFYWNoIGRlc3Ryb3lzIFwmYVtdIGlmIGl0IGV4aXN0cy4KKyAgICAgICAgICBE ZWNsYXJpbmcgYW4gYXJyYXkgd2l0aCBhIGRpbWVuc2lvbiBvZiAwIGlzIHRoZSBzYW1lIGFzIEFS UkFZCisgICAgICAgICAgREVTVFJPWSBhcnJheW5hbWUuCisKKyAgIEFSUkFZIERFQ0xBUkUgXCZh W10gPSBcJTEgXCUyIFwlMworICAgICAgICAgIERlY2xhcmVzIHRoZSBhcnJheSBcJmEgd2l0aCAz IGVsZW1lbnRzICgwIHRocm91Z2ggMyksCisgICAgICAgICAgaW5pdGlhbGl6aW5nIFwmYVsxXSB0 byB0aGUgdmFsdWUgb2YgXCUxLCBcJmFbMl0gdG8gdGhlIHZhbHVlIG9mCisgICAgICAgICAgXCUy LCBhbmQgXCZhWzNdIHRvIHRoZSB2YWx1ZSBvZiBcJTMuIEluIHRoaXMgY2FzZSwgYW55IHJlZmVy ZW5jZQorICAgICAgICAgIHRvIG9uZSBvZiB0aGVzZSBhcnJheSBlbGVtZW50cyBpcyByZXBsYWNl ZCBieSB0aGUgdmFsdWUgb2YgdGhlCisgICAgICAgICAgY29ycmVzcG9uZGluZyBcJW4gdmFyaWFi bGUgYXQgdGhlIHRpbWUgdGhlIGRlY2xhcmF0aW9uIHdhcworICAgICAgICAgIGV4ZWN1dGVkIChp bW1lZGlhdGUgZXZhbHVhdGlvbjsgdGhlIGFycmF5IGVsZW1lbnQncyB2YWx1ZSBkb2VzCisgICAg ICAgICAgbm90IGNoYW5nZSBpZiB0aGUgaW5pdGlhbGl6ZXIgdmFyaWFibGUncyB2YWx1ZSBjaGFu Z2VzKS4KKworICAgQVJSQVkgREVDTEFSRSBcJmFbXSA9IFxcJTEgXFwlMiBcXCUzCisgICAgICAg ICAgRGVjbGFyZXMgdGhlIGFycmF5IFwmYSB3aXRoIDMgZWxlbWVudHMgKDAgdGhyb3VnaCAzKSwK KyAgICAgICAgICBpbml0aWFsaXppbmcgXCZhWzFdIHRvIHRoZSBzdHJpbmcgIlwlMSIsIFwmYVsy XSB0byAiXCUyIiwgYW5kCisgICAgICAgICAgXCZhWzNdIHRvICJcJTMiLiBJbiB0aGlzIGNhc2Ug YW55IHJlZmVyZW5jZSB0byBvbmUgb2YgdGhlc2UKKyAgICAgICAgICBhcnJheSBlbGVtZW50cyBp cyByZXBsYWNlZCBieSB0aGUgQ1VSUkVOVCB2YWx1ZSBvZiB0aGUKKyAgICAgICAgICBjb3JyZXNw b25kaW5nIFwlbiB2YXJpYWJsZSAoZGVmZXJyZWQgZXZhbHVhdGlvbiAtLSB0aGUgYXJyYXkKKyAg ICAgICAgICBlbGVtZW50J3MgdmFsdWUgZm9sbG93cyB0aGUgdmFsdWUgb2YgdGhlIGluaXRpYWxp emVyIHZhcmlhYmxlKS4KKworICAgVGhlIGVxdWFsIHNpZ24gKD0pIHByZWNlZGluZyB0aGUgaW5p dGlhbGl6ZXIgbGlzdCBpcyBvcHRpb25hbCwgYnV0IGlzCisgICByZWNvbW1lbmRlZCBmb3IgY2xh cml0eS4gSWYgeW91IG5lZWQgdG8gaW5pdGlhbGl6ZSBlbGVtZW50IDEgdG8gYQorICAgbGl0ZXJh bCBlcXVhbCBzaWduLCB1c2UgdHdvIG9mIHRoZW0sIHNlcGFyYXRlZCBieSBhIHNwYWNlLCBhcyBp biB0aGlzCisgICBleGFtcGxlOgorCisgIEFSUkFZIERFQ0xBUkUgXCZhW10gPSA9ICsgLSAqIC8K KworICAgUmVtZW1iZXIsIGVsZW1lbnQgMCBpcyBub3QgaW5pdGlhbGl6ZWQgYnkgdGhlIERFQ0xB UkUgY29tbWFuZC4gVG8KKyAgIGluaXRpYWxpemUgZWxlbWVudCAwLCB1c2UgYSByZWd1bGFyIERF RklORSBvciBBU1NJR04gY29tbWFuZDoKKworICBBUlJBWSBERUNMQVJFIFwmYVtdIG9uZSB0d28g dGhyZWUgZm91ciBmaXZlIHNpeCBzZXZlbiBlaWdodCBuaW5lCisgIERFRklORSBcJmFbMF0gemVy bworCisgICBGaW5hbGx5LCByZW1lbWJlciB0aGF0IGV2ZXJ5IGNvbW1hbmQgbGV2ZWwgaGFzIGl0 cyBvd24gbG9jYWwgYXJyYXksCisgICBcJl9bXSwgY29udGFpbmluZyBhbGwgdGhlIG1hY3JvIGFy Z3VtZW50cyAoXCUwLCBcJTEsIC4uLikgZm9yIHRoYXQKKyAgIGxldmVsLiBTZWUgWzU5OF1TZWN0 aW9uIDcuNSBmb3IgZGV0YWlscy4KKworICAgIDcuMTAuMi4gVHVybmluZyBhIFN0cmluZyBpbnRv IGFuIEFycmF5IG9mIFdvcmRzCisKKyAgIFRoZSBcZnNwbGl0KHMxLCZhLHMyLHMzKSBmdW5jdGlv biBhc3NpZ25zIHRoZSB3b3JkcyBvZiBzdHJpbmcgczEgdG8KKyAgIHN1Y2Nlc3NpdmUgZWxlbWVu dHMgb2YgdGhlIGFycmF5IChiZWdpbm5pbmcgd2l0aCBlbGVtZW50IDEpIHdob3NlCisgICBpZGVu dGlmeWluZyBsZXR0ZXIsIGEteiwgaXMgZ2l2ZW4gYWZ0ZXIgdGhlICImIiBpbiB0aGUgc2Vjb25k IGFyZ3VtZW50LAorICAgdXNpbmcgYnJlYWsgYW5kIGluY2x1ZGUgY2hhcmFjdGVycyBnaXZlbiBp biBzMiBhbmQgczMuIFNlZSBbNTk5XVNlY3Rpb24KKyAgIDcuMyBmb3IgZGV0YWlscy4KKworICAg IDcuMTAuMy4gQXJyYXlzIG9mIEZpbGVuYW1lcworCisgICBTZWUgWzYwMF1TZWN0aW9uIDQuMTEu MyBmb3IgbmV3cyBhYm91dCBob3cgXGZmaWxlcygpIGFuZCByZWxhdGVkCisgICBmdW5jdGlvbnMg Y2FuIGFzc2lnbiBhIGxpc3Qgb2YgZmlsZW5hbWVzIHRvIGFuIGFycmF5LiBUbyByZWNhcGl0dWxh dGUKKyAgIGJyaWVmbHkgaGVyZToKKworICBcZmZpbGVzKCosJmEpCisKKyAgIGFzc2lnbnMgYWxs IGZpbGVzIHRoYXQgbWF0Y2ggdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSBhcnJheSBkZW5vdGVk IGJ5CisgICB0aGUgc2Vjb25kIGFyZ3VtZW50LiBJZiB0aGUgYXJyYXkgaGFzIG5vdCBiZWVuIGRl Y2xhcmVkLCBpdCBpcyBkZWNsYXJlZAorICAgYXV0b21hdGljYWxseSwgd2l0aCBleGFjdGx5IHRo ZSBudW1iZXIgb2YgZWxlbWVudHMgbmVlZGVkIHRvIGhvbGQgdGhlCisgICBmaWxlIGxpc3Q7IGlm IGl0IHdhcyBwcmV2aW91c2x5IGRlY2xhcmVkLCBpdCBpcyBkZXN0cm95ZWQgYW5kIHJldXNlZC4K KyAgIFRoZSBmaWxlbmFtZXMgYXJlIGFzc2lnbmVkIHN0YXJ0aW5nIGF0IGFycmF5IGVsZW1lbnQg MS4gRWxlbWVudCAwIGhvbGRzCisgICB0aGUgbnVtYmVyIG9mIGZpbGVzIGluIHRoZSBsaXN0Lgor CisgICBUaGUgRElSRUNUT1JZIGNvbW1hbmQgKFs2MDFdU2VjdGlvbiA0LjUuMSkgY2FuIGFsc28g Y3JlYXRlIGZpbGVuYW1lCisgICBhcnJheXMgaWYgeW91IGdpdmUgaXQgdGhlIC9BUlJBWTogc3dp dGNoOyB0aGlzIGFsbG93cyBzZWxlY3Rpb24KKyAgIGNyaXRlcmlhIGJleW9uZCB3aGV0aGVyIHRo ZSBmaWxlbmFtZSBtYXRjaGVzIHRoZSBnaXZlbiBwYXR0ZXJuLgorCisgICBBbGwgZnVuY3Rpb25z IGFuZCBjb21tYW5kcyB0aGF0IGNyZWF0ZSBmaWxlbmFtZSBhcnJheXMgc3RvcmUgdGhlIG51bWJl cgorICAgb2YgZmlsZW5hbWVzLCBuLCBhcyBlbGVtZW50IDAgb2YgdGhlIGFycmF5LCBhbmQgdGhl IGZpbGVuYW1lcyBhcworICAgZWxlbWVudHMgMSB0aHJvdWdoIG4uCisKKyAgICA3LjEwLjQuIEF1 dG9tYXRpYyBBcnJheXMKKworICAgSW4gYSBjb21tYW5kIGZpbGUgb3IgbWFjcm8sIHlvdSBjYW4g bm93IGhhdmUgbG9jYWwgKGF1dG9tYXRpYykgYXJyYXlzLgorICAgSnVzdCBnaXZlIHRoZSBuYW1l IGZvbGxvd2VkIGJ5IGVtcHR5IHN1YnNjcmlwdCBicmFja2V0cyAobm8gc3BhY2VzCisgICBpbnNp ZGUgdGhlIGJyYWNrZXRzIHBsZWFzZSkgaW4gYSBMT0NBTCBjb21tYW5kLCBhbmQgdGhlbiBkZWNs YXJlIHRoZQorICAgYXJyYXk6CisKKyAgTE9DQUwgXCVhIFwmYVtdIG9vZmEKKyAgQVJSQVkgREVD TEFSRSBcJmFbMzJdID0gdmFsdWUxIHZhbHVlMiB2YWx1ZTMgLi4uCisKKyAgIFRoaXMgZGVjbGFy ZXMgdGhlIHNjYWxhciB2YXJpYWJsZSBcJWEsIHRoZSBhcnJheSBcJmFbXSwgYW5kIHRoZSBtYWNy bworICAgbmFtZSAib29mYSIgdG8gYmUgbG9jYWwsIGFuZCB0aGVuIGRlY2xhcmVzIHRoZSBuZXcg bG9jYWwgY29weSBvZiBcJmFbXQorICAgd2l0aCAzMiBlbGVtZW50cywgcGVyaGFwcyBhc3NpZ25p bmcgc29tZSBpbml0aWFsIHZhbHVlcy4gV2hlbiBDLUtlcm1pdAorICAgZXhpdHMgZnJvbSB0aGUg Y29tbWFuZCBmaWxlIG9yIG1hY3JvIGNvbnRhaW5pbmcgdGhlc2UgY29tbWFuZCwgdGhlCisgICBw cmV2aW91cyBcJmFbXSBhcnJheSBpcyByZXN0b3JlZCAoYW5kIGlmIHRoZXJlIHdhcyBubyBcJmFb XSBhdCBhbnkKKyAgIGhpZ2hlciBsZXZlbCwgdGhpcyB3aWxsIHN0aWxsIGJlIHRydWUpLiBUaGUg cHJvY2VzcyBjYW4gYmUgcmVwZWF0ZWQgdG8KKyAgIGFueSBsZXZlbC4gVGh1cyBpdCBpcyBub3cg c2FmZSB0byB3cml0ZSBzY3JpcHRzIG9yIG1hY3JvcyBjb250YWluaW5nCisgICBhcnJheXMgd2l0 aG91dCBkYW5nZXIgb2YgaW50ZXJmZXJpbmcgd2l0aCBnbG9iYWwgYXJyYXlzIG9mIHRoZSBzYW1l CisgICBuYW1lLgorCisgICBKdXN0IGFzIHNjYWxhcnMgYXJlIGluaGVyaXRlZCBieSBsb3dlciBj b21tYW5kIGxldmVscywgc28gYXJlIGFycmF5cy4KKyAgIFNvLCBmb3IgZXhhbXBsZSwgaWYgXCZh W10gaXMgZGVjbGFyZWQgYXQgdG9wIGxldmVsLCBhbGwgbG93ZXIgbGV2ZWxzCisgICB3aWxsIHNl ZSBpdCB1bmxlc3MgdGhleSBpbmNsdWRlIGEgImxvY2FsIFwmYVtdIiBzdGF0ZW1lbnQsIGluIHdo aWNoCisgICBjYXNlIGFsbCBsZXZlbHMgYXQgYW5kIGJlbmVhdGggdGhlIGxldmVsIHdoZXJlIHRo ZSBMT0NBTCBzdGF0ZW1lbnQgd2FzCisgICBleGVjdXRlZCB3aWxsIHNlZSB0aGUgbG9jYWwgY29w eS4gVGhpcyB0b28gY2FuIGJlIHJlcGVhdGVkIHRvIGFueQorICAgbGV2ZWwuCisKKyAgIE9uIHRo ZSBvdGhlciBoYW5kLCBpZiB5b3UgREVDTEFSRSBhbiBhcnJheSBhdCBhIGxvd2VyIGNvbW1hbmQg bGV2ZWwKKyAgIHdpdGhvdXQgYWxzbyBtYWtpbmcgaXQgTE9DQUwsIHRoaXMgcmVwbGFjZXMgdGhl IGNvcHkgdGhhdCB3YXMgZGVjbGFyZWQKKyAgIGF0IHRoZSBsb3dlc3QgY29tbWFuZCBsZXZlbCBh Ym92ZSB0aGlzIG9uZS4KKworICAgIDcuMTAuNS4gU29ydGluZyBBcnJheXMKKworICAgQWx0aG91 Z2ggYXJyYXlzIGNhbiBiZSBzb3J0ZWQgdXNpbmcgRk9SIGxvb3BzIGFzIHNob3duIG9uIHBhZ2Ug MzgzIG9mCisgICBVc2luZyBDLUtlcm1pdCwgMm5kIEVkLiwgdGhpcyBpbnZvbHZlcyBxdWl0ZSBh IGJpdCBvZiByZXBldGl0aXZlCisgICBpbnRlcnByZXRhdGlvbiBieSB0aGUgY29tbWFuZCBwYXJz ZXIsIGFuZCBzbyBjYW4gYmUgc2xvdyBmb3IgbGFyZ2UKKyAgIGFycmF5cy4gRm9yIHRoaXMgcmVh c29uLCBDLUtlcm1pdCA3LjAgYWRkcyBhIGJ1aWx0LWluIFNPUlQgY29tbWFuZDoKKworICAgQVJS QVkgU09SVCBbIHN3aXRjaGVzIF0gYXJyYXkgWyBhcnJheTIgXQorICAgICAgICAgIFNvcnRzIHRo ZSBnaXZlbiBhcnJheSBpbiBwbGFjZS4gU29ydGluZyBpcyBzdHJpY3RseSBsZXhpY2FsCisgICAg ICAgICAgKHN0cmluZyBiYXNlZCkuIFRoZSBhcnJheSBuYW1lIGNhbiBiZSBnaXZlbiBmdWxseSwg ZS5nLiAiXCZhW10iLAorICAgICAgICAgIG9yIHRoZSAiXCIgYW5kL29yICImIiBhbmQvb3IgYnJh Y2tldHMgY2FuIGJlIG9taXR0ZWQsIGUuZy4KKyAgICAgICAgICAiYXJyYXkgc29ydCBcJmFbXSIs ICJzb3J0ICZhIiwgInNvcnQgYSIuIEFsc28sIGEgcmFuZ2UgY2FuIGJlCisgICAgICAgICAgaW5k aWNhdGVkIGluIHRoZSBicmFja2V0cyBhcyBub3RlZCBpbiBbNjAyXVNlY3Rpb24gNy4xMCwgdG8K KyAgICAgICAgICByZXN0cmljdCB0aGUgc29ydCB0byBhIHJhbmdlIG9mIGVsZW1lbnRzIChlcXVp dmFsZW50IHRvIHRoZQorICAgICAgICAgIC9SQU5HRSBzd2l0Y2gsIGRlc2NyaWJlZCBqdXN0IGJl bG93KSwgZS5nLiAiYXJyYXkgc29ydAorICAgICAgICAgICZhWzIwOjMwXSIuCisKKyAgIEEgc2Vj b25kIGFycmF5IG1heSBiZSBzcGVjaWZpZWQuIElmIGl0IGlzLCBhbmQgaWYgaXQgaXMgYXQgbGVh c3QgYXMgYmlnCisgICBhcyB0aGUgZmlyc3QgYXJyYXksIGl0IGlzIHNvcnRlZCBhY2NvcmRpbmcg dG8gdGhlIGZpcnN0IGFycmF5LiBGb3IgYQorICAgc2FtcGxlIGFwcGxpY2F0aW9uLCBzZWUgWzYw M11TZWN0aW9uIDcuMTAuMTAuCisKKyAgIFNlZSBbNjA0XVNlY3Rpb24gMS41IGZvciBhbiBleHBs YW5hdGlvbiBvZiBzd2l0Y2hlcy4gVGhlIG9wdGlvbmFsCisgICBzd2l0Y2hlcyBhcmU6CisKKyAg IC9DQVNFOntPTixPRkZ9CisgICAgICAgICAgL0NBU0U6T04gbWVhbnMgdGhhdCBhbHBoYWJldGlj IGNhc2UgaXMgc2lnbmlmaWNhbnQgaW4KKyAgICAgICAgICBjb21wYXJpc29uczsgdXBwZXJjYXNl IGxldHRlcnMgYXJlIHNvcnRlZCBiZWZvcmUgbG93ZXJjYXNlIG9uZXMuCisgICAgICAgICAgL0NB U0U6T0ZGIG1lYW5zIGNhc2UgaXMgaWdub3JlZCwgZS5nLiAiQSIgaXMgdGhlIHNhbWUgYXMgImEi LiBJZgorICAgICAgICAgIHRoaXMgc3dpdGNoIGlzIG5vdCBnaXZlbiwgc29ydGluZyBpcyBhY2Nv cmRpbmcgdGhlIGN1cnJlbnQgU0VUCisgICAgICAgICAgQ0FTRSBzZXR0aW5nLgorCisgICAvS0VZ Om4KKyAgICAgICAgICBDb21wYXJpc29uIGJlZ2lucyBhdCBwb3NpdGlvbiBuKDEtYmFzZWQpIGlu IGVhY2ggc3RyaW5nLiBJZiBubworICAgICAgICAgIGtleSBpcyBnaXZlbiwgdGhlIGVudGlyZSBz dHJpbmdzIGFyZSBjb21wYXJlZC4gT25seSBvbmUga2V5IGNhbgorICAgICAgICAgIGJlIGdpdmVu LiBJZiBhbiBhcnJheSBlbGVtZW50IGlzIHNob3J0ZXIgdGhhbiB0aGUga2V5IHZhbHVlLCBuLAor ICAgICAgICAgIHRoYXQgZWxlbWVudCBpcyBjb25zaWRlcmVkIGVtcHR5IGZvciBjb21wYXJpc29u IHB1cnBvc2VzLCBhbmQKKyAgICAgICAgICB0aGVyZWZvcmUgbGV4aWNhbGx5IGxlc3MgdGhhbiBh bnkgZWxlbWVudCBhdCBsZWFzdCBuY2hhcmFjdGVycworICAgICAgICAgIGxvbmcuCisKKyAgIC9O VU1FUklDCisgICAgICAgICAgSWYgdGhpcyBzd2l0Y2ggaXMgaW5jbHVkZWQsIGl0IG1lYW5zIHNv cnRpbmcgc2hvdWxkIGJlIG51bWVyaWMsCisgICAgICAgICAgcmF0aGVyIHRoYW4gbGV4aWNhbC4g VGhlIHNvcnQga2V5IGlzIHRoZSBzdHJpbmcgc3RhcnRpbmcgYXQgdGhlCisgICAgICAgICAga2V5 IHBvc2l0aW9uLCBza2lwcGluZyBhbnkgbGVhZGluZyBibGFua3Mgb3IgdGFicywgYW5kIHRoZW4g YXMKKyAgICAgICAgICBtdWNoIG9mIHRoZSBzdHJpbmcgZnJvbSB0aGF0IHBvaW50IG9uIHRoYXQg Zml0cyB0aGUgZGVmaW5pdGlvbgorICAgICAgICAgIG9mICJudW1lcmljIiwgdGVybWluYXRpbmcg YXQgdGhlIGZpcnN0IGNoYXJhY3RlciB0aGF0IGRvZXMgbm90CisgICAgICAgICAgcXVhbGlmeS4g QSBudW1lcmljIHN0cmluZyBoYXMgYW4gb3B0aW9uYWwgc2lnbiAoKyBvciAtKSBmb2xsb3dlZAor ICAgICAgICAgIGJ5IG9uZSBvciBtb3JlIGRpZ2l0cywgYW5kIChpZiB5b3VyIHZlcnNpb24gb2Yg S2VybWl0IHdhcyBidWlsdAorICAgICAgICAgIHdpdGggZmxvYXRpbmctcG9pbnQgc3VwcG9ydDsg c2VlIFs2MDVdU2VjdGlvbiA3LjIzICkgemVybyBvciBvbmUKKyAgICAgICAgICBkZWNpbWFsIHBv aW50IChwZXJpb2QpLiBJZiBib3RoIC9DQVNFIGFuZCAvTlVNRVJJQyBhcmUgZ2l2ZW4sCisgICAg ICAgICAgL05VTUVSSUMgdGFrZXMgcHJlY2VkZW5jZS4KKworICAgL1JBTkdFOm5bOm1dCisgICAg ICAgICAgU29ydCBlbGVtZW50cyBudGhyb3VnaCBtIG9mIHRoZSBhcnJheS4gQnkgZGVmYXVsdCwg dGhlIGVudGlyZQorICAgICAgICAgIGFycmF5IGZyb20gZWxlbWVudCAxIHRvIGl0cyBkaW1lbnNp b25lZCBzaXplIGlzIHNvcnRlZCwgd2hpY2gKKyAgICAgICAgICBtaWdodCBwcm9kdWNlIHN1cnBy aXNpbmcgcmVzdWx0cyBpZiB0aGUgYXJyYXkgaXMgbm90IGZ1bGw7IHNlZQorICAgICAgICAgIGV4 YW1wbGUgaW4gWzYwNl1TZWN0aW9uIDcuMTAuNy4gSWYgIjptIiBpcyBvbWl0dGVkIGZyb20gdGhl CisgICAgICAgICAgcmFuZ2UsIHRoZSBkaW1lbnNpb25lZCBzaXplIGlzIHVzZWQuIFRodXMsIHRv IHNvcnQgYW4gZW50aXJlCisgICAgICAgICAgYXJyYXksIFwmYVtdLCBpbmNsdWRpbmcgaXRzIDB0 aCBlbGVtZW50LCB1c2UgInNvcnQgL3JhbmdlOjAgJmEiLgorICAgICAgICAgIFlvdSBjYW4gYWxz byBzb3J0IGFueSBkZXNpcmVkIHNlY3Rpb24gb2YgYW4gYXJyYXksIGUuZy4gInNvcnQKKyAgICAg ICAgICAvcmFuZ2U6MTA6MjAgJmEiIG9yICJzb3J0IC9yYW5nZTpcJWk6XCVqLTEgJmIiLiBBcyBu b3RlZCBhYm92ZSwKKyAgICAgICAgICB5b3UgY2FuIGFsc28gc3BlY2lmeSBhIHJhbmdlIGluIHRo ZSBhcnJheS1uYW1lIGJyYWNrZXRzLiBJZiB5b3UKKyAgICAgICAgICBzcGVjaWZ5IGEgcmFuZ2Ug aW4gdGhlIGFycmF5LW5hbWUgYnJhY2tldHMgQU5EIHdpdGggYSAvUkFOR0UKKyAgICAgICAgICBz d2l0Y2gsIHRoZSBvbmVzIGluIHRoZSBicmFja2V0cyB0YWtlIHByZWNlZGVuY2UuCisKKyAgIC9S RVZFUlNFCisgICAgICAgICAgU29ydCBpbiByZXZlcnNlIG9yZGVyLiBJZiB0aGlzIHN3aXRjaCBp cyBub3QgZ2l2ZW4sIHRoZSBhcnJheSBpcworICAgICAgICAgIHNvcnRlZCBpbiBhc2NlbmRpbmcg b3JkZXIuCisKKyAgIFJlbWVtYmVyIHRoYXQgbnVtZXJpYyBzd2l0Y2ggYXJndW1lbnRzIGNhbiBi ZSBudW1iZXJzLCBhcml0aG1ldGljCisgICBleHByZXNzaW9ucywgb3IgdmFyaWFibGVzIHdob3Nl IHZhbHVlcyBhcmUgbnVtYmVycyBvciBleHByZXNzaW9ucywgYXMKKyAgIGlsbHVzdHJhdGVkIGlu IHRoZSAvUkFOR0UgZXhhbXBsZXMgYWJvdmUuCisKKyAgIEEgdHlwaWNhbCBzb3J0aW5nIGFwcGxp Y2F0aW9uIG1pZ2h0IGJlIHRvIGxpc3Qgc3R1ZGVudHMnIHRlc3Qgc2NvcmVzIGluCisgICBkZXNj ZW5kaW5nIG9yZGVyLiBTdXBwb3NlIHlvdSBoYWQgdGhlIGZvbGxvd2luZyByZWNvcmRzOgorCisg IG9sYWYgICAgICA2NQorICBvbGdhICAgICAgOTgKKyAgaXZhbiAgICAgIDgzCisgIHhlbmEgICAg IDEwMAorCisgICAoYW5kIHNvIG9uKSBzdG9yZWQgaW4gYXJyYXkgXCZzW10gKGUuZy4gYnkgcmVh ZGluZyB0aGVtIGZyb20gYSBmaWxlIGFzCisgICBpbGx1c3RyYXRlZCBpbiBbNjA3XXNlY3Rpb24g Ny4xMC43KS4gSW4gdGhlc2UgcmVjb3JkcywgdGhlIHN0dWRlbnQncworICAgbmFtZSBpcyBpbiBj b2x1bW5zIDEtOSBhbmQgdGhlIHNjb3JlIGluIDEwLTEyLiBTbyB0byByZWFycmFuZ2UgdGhlIGxp c3QKKyAgIGluIGRlc2NlbmRpbmcgb3JkZXIgb2Ygc2NvcmU6CisKKyAgc29ydCAva2V5OjEwIC9y ZXZlcnNlICZzCisKKyAgIFRoZW4gdG8gbGlzdCB5b3VyIHRvcCBmaXZlIHN0dWRlbnRzOgorCisg IGZvciBcJWkgMSA1IDEgeyBlY2hvIFwmc1tcJWldIH0KKworICAgT3IgbW9yZSBzaW1wbHkgKHNl ZSBuZXh0IHNlY3Rpb24pOgorCisgIHNob3cgYXJyYXkgYVsxOjVdCisKKyAgIFRvIGlsbHVzdHJh dGUgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBhIGxleGljYWwgYW5kIGEgbnVtZXJpYyBzb3J0LAor ICAgc3VwcG9zZSB5b3UgaGF2ZSB0aGUgZm9sbG93aW5nIHJlY29yZHMgKHRoZSBsaW5lcyB0aGF0 IGFyZSBudW1iZXJlZCwKKyAgIHN0YXJ0aW5nIGF0IGNvbHVtbiAxKSBpbiBhcnJheSBcJmFbXToK KworICAgIENvbHVtbiAgIDEgICAgICAgICAyCisgICAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAKKwor ICAgMS4gSXZhbiAxMC4wIDIuIE9sYWYgOS45NSAzLiBPbGdhIDEwMS41CisKKyAgIEFSUkFZIFNP UlQgL0tFWToxMCAmYVtdIHdvdWxkIG9yZGVyIHRoZW0gMywxLDIsIGJ1dCBBUlJBWSBTT1JUIC9L RVk6MTAKKyAgIC9OVU1FUklDICZhW10gd291bGQgb3JkZXIgdGhlbSAyLDEsMy4KKworICAgIDcu MTAuNi4gRGlzcGxheWluZyBBcnJheXMKKworICAgVGhlIFNIT1cgQVJSQVkgY29tbWFuZCAob3Ig QVJSQVkgU0hPVykgbm93IGFjY2VwdHMgYW4gb3B0aW9uYWwKKyAgIGFycmF5LW5hbWUgYXJndW1l bnQ6CisKKyAgU0hPVyBBUlJBWSBcJmFbXQorCisgICAoeW91IGNhbiBsZWF2ZSBvZmYgdGhlIFws IHRoZSBcJiwgYW5kL29yIHRoZSBbXSdzIGlmIHlvdSBsaWtlOyAic2hvdworICAgYXJyYXkgYSIg aXMgZXF1aXZhbGVudCB0byAic2hvdyBhcnJheSBcJmFbXSIpLiBXaGVuIGFuIGFycmF5IGlzCisg ICBzcGVjaWZpZWQsIGl0cyBkaW1lbnNpb24gaXMgc2hvd24gYW5kIGFsbCBkZWZpbmVkIChub24t ZW1wdHkpIGVsZW1lbnRzCisgICBhcmUgbGlzdGVkLgorCisgICBFeGFtcGxlOgorCisgIGFzc2ln biBcJW4gXGZmaWxlcygqLCZhKSAgOyBGaWxsIGFuIGFycmF5IHdpdGggZmlsZW5hbWVzIChbNjA4 XVNlY3Rpb24gNC4xMS4zKQorICBzaG93IGFycmF5IFwmYVtdICAgICAgICAgIDsgU2hvdyB0aGUg YXJyYXkgd2UganVzdCByZWFkCisgIGFycmF5IHNob3cgXCZhW10gICAgICAgICAgOyBTYW1lIGFz IHByZXZpb3VzCisgIGFycmF5IHNvcnQgXCZhW10gICAgICAgICAgOyBTb3J0IHRoZSBhcnJheQor ICBhcnJheSBzaG93IFwmYVtdICAgICAgICAgIDsgU2hvdyBpdCBhZnRlciBzb3J0aW5nCisgIGFy cmF5IHNob3cgXCZhICAgICAgICAgICAgOyBTaG93IGl0IGFnYWluCisgIGFycmF5IHNob3cgJmEg ICAgICAgICAgICAgOyBTaG93IGl0IGFnYWluCisgIGFycmF5IHNob3cgYSAgICAgICAgICAgICAg OyBTaG93IGl0IGFnYWluCisKKyAgIChUaGUgZmluYWwgZm91ciBjb21tYW5kcyBkZW1vbnN0cmF0 ZSB0aGUgYWx0ZXJuYXRpdmUgZm9ybXMgdGhhdCBhcmUKKyAgIGFjY2VwdGVkIGZvciB0aGUgYXJy YXkgbmFtZS4pCisKKyAgIElmIHlvdSBTSE9XIEFSUkFZIHdpdGhvdXQgZ2l2aW5nIGFuIGFycmF5 IG5hbWUsIGFsbCBkZWZpbmVkIGFycmF5cyBhcmUKKyAgIGxpc3RlZCBieSBuYW1lIGFuZCBkaW1l bnNpb24sIGJ1dCB0aGVpciBjb250ZW50cyBhcmUgbm90IHNob3duLgorCisgICBZb3UgY2FuIGFs c28gc2hvdyBhIHBpZWNlIG9mIGFuIGFycmF5IGJ5IGluY2x1ZGluZyBhIHN1YnNjcmlwdCBvciBy YW5nZQorICAgd2l0aGluIHRoZSBhcnJheSBicmFja2V0czoKKworICBhcnJheSBzaG93IFwmYVs1 XSAgICAgICAgIDsgU2hvd3MgXCZhWzVdCisgIGFycmF5IHNob3cgJmFbMzo4XSAgICAgICAgOyBT aG93cyBcJmFbM10gdGhyb3VnaCBcJmFbOF0KKyAgYXJyYXkgc2hvdyBhWzpcJW4tMV0gICAgICA7 IFNob3dzIFwmYVswXSB0aHJvdWdoIFwmYVtcJW4tMV0KKworICAgIDcuMTAuNy4gT3RoZXIgQXJy YXkgT3BlcmF0aW9ucworCisgICBBUlJBWSBERVNUUk9ZIGFycmF5bmFtZQorICAgICAgICAgIERl c3Ryb3lzIGFuZCB1bmRlY2xhcmVzIHRoZSBuYW1lZCBhcnJheS4gU3Vic2NyaXB0cyBvciByYW5n ZXMKKyAgICAgICAgICBhcmUgbm90IGFjY2VwdGVkIGluIHRoaXMgY29tbWFuZC4KKworICAgQVJS QVkgQ09QWSBhcnJheTEgYXJyYXkyCisgICAgICAgICAgQ29waWVzIHRoZSBmaXJzdCBhcnJheSB0 byB0aGUgc2Vjb25kIGFycmF5LiBJZiB0aGUgdGFyZ2V0IGFycmF5CisgICAgICAgICAgaGFzIG5v dCBiZWVuIGRlY2xhcmVkLCBpdCBpcyBjcmVhdGVkIGF1dG9tYXRpY2FsbHkgd2l0aCB0aGUgc2Ft ZQorICAgICAgICAgIHNpemUgYXMgdGhlIGZpcnN0LiBJZiBpdCBoYXMgYmVlbiBkZWNsYXJlZCwg aXQgd2lsbCBiZSB1c2VkIGFzCisgICAgICAgICAgZGVjbGFyZWQ7IGlmIHRoZSBzb3VyY2UgYXJy YXkgaXMgbGFyZ2VyLCBvbmx5IGFzIG11Y2ggb2YgaXQgYXMKKyAgICAgICAgICB3aWxsIGZpdCBp cyBjb3BpZWQgdG8gdGhlIHRhcmdldCBhcnJheS4gU3ludGF4IGZvciBhcnJheTEgYW5kCisgICAg ICAgICAgYXJyYXkyIGlzIGFzIGluIEFSUkFZIFNIT1cgKFNIT1cgQVJSQVkpLiBFeGFtcGxlOgor CisgIC5cJW4gOj0gXGZmaWxlcygqLCZhKSAgOyBDcmVhdGUgYW5kIGxvYWQgYXJyYXkgQSB3aXRo IGEgZmlsZSBsaXN0LgorICBhcnJheSBjb3B5ICZhICZiICAgICAgIDsgQ29weSBhcnJheSBBIHRv IGFycmF5IEIuCisKKyAgICAgICAgICBUaGUgQVJSQVkgQ09QWSBjb21tYW5kIGFsc28gbGV0cyB5 b3UgY29weSBwaWVjZXMgb2YgYXJyYXlzIGJ5CisgICAgICAgICAgaW5jbHVkaW5nIHJhbmdlIHNw ZWNpZmllcnMsIGFzIGluIHRoZXNlIGV4YW1wbGVzOgorCisgICAgICAgIEFSUkFZIENPUFkgXCZh WzQ6MjddIFwmYgorICAgICAgICAgICAgICAgIFRoaXMgY29waWVzIFwmYVtdIGVsZW1lbnRzIDQt MjcgdG8gXCZiW10gZWxlbWVudHMgMS0yMywKKyAgICAgICAgICAgICAgICBjcmVhdGluZyBcJmJb XSBpZiBuZWNlc3Nhcnkgb3IsIGlmIFwmYltdIGlzIGFscmVhZHkKKyAgICAgICAgICAgICAgICBk ZWNsYXJlZCwgc3RvcHBpbmcgZWFybHkgaWYgaXRzIHNpemUgaXMgbGVzcyB0aGFuIDIzLgorCisg ICAgICAgIEFSUkFZIENPUFkgXCZhWzQ6MjddIFwmYlsxMl0KKyAgICAgICAgICAgICAgICBUaGlz IGNvcGllcyBcJmFbXSBlbGVtZW50cyA0LTI3IHRvIFwmYltdIGVsZW1lbnRzIDEyLTM1LAorICAg ICAgICAgICAgICAgIGNyZWF0aW5nIFwmYltdIGlmIG5lY2Vzc2FyeSBvciwgaWYgXCZiW10gaXMg YWxyZWFkeQorICAgICAgICAgICAgICAgIGRlY2xhcmVkLCBzdG9wcGluZyBlYXJseSBpZiBpdHMg c2l6ZSBpcyBsZXNzIHRoYW4gMzUuCisKKyAgICAgICAgQVJSQVkgQ09QWSBcJmFbNDoyN10gXCZi WzEyOjE0XQorICAgICAgICAgICAgICAgIFRoaXMgY29waWVzIFwmYVtdIGVsZW1lbnRzIDQtNiB0 byBcJmJbXSBlbGVtZW50cyAxMi0xNCwKKyAgICAgICAgICAgICAgICBjcmVhdGluZyBcJmJbXSBp ZiBuZWNlc3Nhcnkgb3IsIGlmIFwmYltdIGlzIGFscmVhZHkKKyAgICAgICAgICAgICAgICBkZWNs YXJlZCwgc3RvcHBpbmcgZWFybHkgaWYgaXRzIHNpemUgaXMgbGVzcyB0aGFuIDE0LgorCisgICAg ICAgIEFSUkFZIENPUFkgXCZhWzE3Ol0gXCZiCisgICAgICAgICAgICAgICAgVGhpcyBjb3BpZXMg YWxsIHRoZSBlbGVtZW50cyBvZiBcJmFbXSBzdGFydGluZyB3aXRoIDE3CisgICAgICAgICAgICAg ICAgdW50aWwgdGhlIGxhc3QgdG8gXCZiW10sIGNyZWF0aW5nIFwmYltdIGlmIG5lY2Vzc2FyeSBv ciwKKyAgICAgICAgICAgICAgICBpZiBcJmJbXSBpcyBhbHJlYWR5IGRlY2xhcmVkLCBzdG9wcGlu ZyBlYXJseSBpZiBcJmJbXSBpcworICAgICAgICAgICAgICAgIG5vdCBiaWcgZW5vdWdoLiBTdXBw b3NlLCBmb3IgZXhhbXBsZSwgeW91IGhhdmUgYSBzY3JpcHQKKyAgICAgICAgICAgICAgICB3aG9z ZSBhcmd1bWVudHMgYXJlIHN0cmluZzEsIHN0cmluZzIsIGFuZCBhIGxpc3Qgb2YgZmlsZXMsCisg ICAgICAgICAgICAgICAgd2hvc2Ugam9iIGlzIHRvIGNoYW5nZSBhbGwgb2NjdXJyZW5jZXMgb2Yg c3RyaW5nMSB0bworICAgICAgICAgICAgICAgIHN0cmluZzIgaW4gZWFjaCBvZiB0aGUgZmlsZXMu IEJ1dCBpZiB0aGUgbGlzdCBvZiBmaWxlcyBpcworICAgICAgICAgICAgICAgIG9taXR0ZWQsIHRo ZW4gIioiIChhbGwgZmlsZXMgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5KSBpcworICAgICAgICAg ICAgICAgIGFzc3VtZWQ6CisKK2lmIDwgXHYoYXJnYykgMyBleGl0IDEgIlVzYWdlOiBcJTAgc3Ry aW5nMSBzdHJpbmcyIFsgZmlsZXMgXSIKK2lmIG5vdCBkZWYgXCUzIHsKKyAgICAubiA6PSBcZmZp bGVzKCosJmEpCit9IGVsc2UgeworICAgIGFycmF5IGNvcHkgJl9bMzpdICZhCisgICAgLm4gOj0g XGZkaW0oJmEpCit9Citmb3IgaSAxIG4gMSB7CisgICAgISBjYXQgXCZhW2ldIHwgc2VkIC1lICJz fFwlMXxcJTJ8ZyIgPiAvdG1wL194CisgICAgcmVuYW1lIC90bXAvX3ggXCZhW2ldCit9CisKKyAg ICAgICAgQVJSQVkgQ09QWSBcJmFbMTddIFwmYgorICAgICAgICAgICAgICAgIFNhbWUgYXMgcHJl dmlvdXMgZXhhbXBsZS4KKworICAgQVJSQVkgQ0xFQVIgYXJyYXluYW1lCisgICAgICAgICAgU2V0 cyBhbGwgdGhlIGVsZW1lbnRzIG9mIHRoZSBhcnJheSB0byB0aGUgZW1wdHkgdmFsdWUuIFlvdSBt YXkKKyAgICAgICAgICBhbHNvIGluY2x1ZGUgYSByYW5nZSBzcGVjaWZpZXIgdG8gY2xlYXIgb25s eSBhIHNlbGVjdGVkIHBvcnRpb24KKyAgICAgICAgICBvZiB0aGUgYXJyYXk7IGZvciBleGFtcGxl ICJhcnJheSBjbGVhciBcJmFbMzc6MjE0XSIuIElmIHRoZQorICAgICAgICAgIHJhbmdlIGlzIG91 dCBvZiBib3VuZHMsIG9ubHkgdGhlIHBhcnQgb2YgdGhlIGFycmF5IHRoYXQgaXMgaW4KKyAgICAg ICAgICBib3VuZHMgaXMgY2xlYXJlZC4KKworICAgQVJSQVkgU0VUIGFycmF5bmFtZSBbIHZhbHVl IF0KKyAgICAgICAgICBTZXRzIGFsbCB0aGUgZWxlbWVudHMgb2YgdGhlIGFycmF5IHRvIHRoZSBn aXZlbiB2YWx1ZS4gSWYgbm8KKyAgICAgICAgICB2YWx1ZSBpcyBnaXZlbiwgdGhlIGFycmF5IGlz IGNsZWFyZWQuIFlvdSBtYXkgYWxzbyBpbmNsdWRlIGEKKyAgICAgICAgICByYW5nZSBzcGVjaWZp ZXIgdG8gc2V0IG9ubHkgYSBzZWxlY3RlZCBwb3J0aW9uIG9mIHRoZSBhcnJheTsgZm9yCisgICAg ICAgICAgZXhhbXBsZSAiYXJyYXkgc2V0IFwmYVsxOjldIC0xIi4gSWYgdGhlIHJhbmdlIGlzIG91 dCBvZiBib3VuZHMsCisgICAgICAgICAgb25seSB0aGUgcGFydCBvZiB0aGUgYXJyYXkgdGhhdCBp cyBpbiBib3VuZHMgaXMgc2V0LgorCisgICBBUlJBWSBSRVNJWkUgYXJyYXluYW1lIHNpemUKKyAg ICAgICAgICBSZXNpemVzIHRoZSBnaXZlbiBhcnJheS4gSWYgdGhlIHNpemUgaXMgZ3JlYXRlciB0 aGFuIHRoZSBhcnJheSdzCisgICAgICAgICAgY3VycmVudCBkaW1lbnNpb24sIG5ldyBlbXB0eSBl bGVtZW50cyBhcmUgYWRkZWQgdG8gdGhlIGVuZC4gSWYKKyAgICAgICAgICB0aGUgc2l6ZSBpcyBs ZXNzIHRoYW4gdGhlIGN1cnJlbnQgZGltZW5zaW9uLCB0aGUgZXh0cmEgZWxlbWVudHMKKyAgICAg ICAgICBhcmUgZGlzY2FyZGVkLiBOb3RlOiBJZiB5b3UgaGF2ZSBzdG9yZWQgdGhlIGFycmF5IHNp emUgaW4KKyAgICAgICAgICBlbGVtZW50IDAsIEFSUkFZIFJFU0laRSBkb2VzIG5vdCBjaGFuZ2Ug dGhpcyB2YWx1ZS4gQWx0ZXJuYXRpdmUKKyAgICAgICAgICBub3RhdGlvbjogQVJSQVkgUkVTSVpF IGFycmF5bmFtZVtzaXplXS4gRm9yIGEgcHJhY3RpY2FsIGV4YW1wbGUsCisgICAgICAgICAgc2Vl IFs2MDldU2VjdGlvbiA3LjEwLjExLgorCisgICBcZmFycmF5bG9vayhwYXR0ZXJuLGFycmF5bmFt ZSkKKyAgICAgICAgICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBmaXJz dCBlbGVtZW50IG9mIHRoZQorICAgICAgICAgIGdpdmVuIGFycmF5IHRoYXQgbWF0Y2hlcyB0aGUg Z2l2ZW4gcGF0dGVybiAoZm9yIGRldGFpbHMgYWJvdXQKKyAgICAgICAgICBwYXR0ZXJuIHN5bnRh eCwgc2VlIFs2MTBdc2VjdGlvbiA0LjkpLiBUaGUgYXJyYXkgbmFtZSBjYW4KKyAgICAgICAgICBp bmNsdWRlIGEgcmFuZ2Ugc3BlY2lmaWNhdGlvbiB0byByZXN0cmljdCB0aGUgc2VhcmNoIHRvIGEg Z2l2ZW4KKyAgICAgICAgICBzZWdtZW50IG9mIHRoZSBhcnJheS4gSWYgbm8gZWxlbWVudHMgbWF0 Y2ggdGhlIHBhdHRlcm4sIC0xIGlzCisgICAgICAgICAgcmV0dXJuZWQuCisKKyAgIFxmdGFibGVs b29rKGtleXdvcmQsYXJyYXluYW1lWyxkZWxpbWl0ZXJdKQorICAgICAgICAgIExvb2tzIGluIHRo ZSBnaXZlbiAidGFibGUiLCB3aGljaCBtdXN0IGJlIHNvcnRlZCwgZm9yIHRoZSBnaXZlbgorICAg ICAgICAgIGtleXdvcmQuIFRoZSBrZXl3b3JkIG5lZWQgbm90IGJlIHNwZWxsZWQgb3V0IGluIGZ1 bGwuCisgICAgICAgICAgUGF0dGVybi1tYXRjaGluZyBjaGFyYWN0ZXJzIHNob3VsZCBub3QgYmUg aW5jbHVkZWQgYXMgcGFydCBvZgorICAgICAgICAgIHRoZSBrZXl3b3JkLiBUaGUgZnVuY3Rpb24g cmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIHRhYmxlIGVsZW1lbnQKKyAgICAgICAgICB0aGF0IHVu aXF1ZWx5IG1hdGNoZXMgdGhlIGdpdmVuIGtleXdvcmQsIG9yIC0xIGlmIG5vbmUgbWF0Y2gsIG9y CisgICAgICAgICAgLTIgaWYgbW9yZSB0aGFuIDEgbWF0Y2guCisKKyAgIEEgInRhYmxlIiBpcyBh biBhcnJheSB0aGF0IGlzIHNvcnRlZCBpbiBsZXhpY2FsIG9yZGVyOyBlYWNoIG9mIGl0cworICAg ZWxlbWVudHMgbWF5IGNvbnRhaW4gbXVsdGlwbGUgZmllbGRzLCBkZWxpbWl0ZWQgYnkgdGhlIGdp dmVuIGRlbGltaXRlcgorICAgY2hhcmFjdGVyIG9yLCBpZiBubyBkZWxpbWl0ZXIgaXMgc3BlY2lm aWVkLCBhIGNvbG9uICg6KS4KKworICAgVGhlIFxmYXJyYXlsb29rKCkgZnVuY3Rpb24gZG9lcyBl eGFjdGx5IHdoYXQgeW91IHRlbGwgaXQuIElmIHlvdSBnaXZlCisgICBpdCBhIHBhdHRlcm4gdGhh dCBkb2VzIG5vdCBpbmNsdWRlIHdpbGRjYXJkIGNoYXJhY3RlcnMgKHN1Y2ggYXMgKiwgPywKKyAg IGV0YyksIGl0IHJlcXVpcmVzIGFuIGV4YWN0IG1hdGNoLiBGb3IgZXhhbXBsZToKKworICBcZmFy cmF5bG9vayhvb2ZhLCZhKQorCisgICBzZWFyY2hlcyBmb3IgdGhlIGZpcnN0IGVsZW1lbnQgb2Yg XCZhW10gd2hvc2UgdmFsdWUgaXMgIm9vZmEiLiBCdXQ6CisKKyAgXGZhcnJheWxvb2sob29mYSos JmEpCisKKyAgIGZpbmRzIHRoZSBmaXJzdCBlbGVtZW50IHdob3NlIHZhbHVlIHN0YXJ0cyB3aXRo ICJvb2ZhIiwgYW5kOworCisgIFxmYXJyYXlsb29rKCpvb2ZhLCZhKQorCisgICBmaW5kcyB0aGUg Zmlyc3QgZWxlbWVudCB3aG9zZSB2YWx1ZSBlbmRzIHdpdGggIm9vZmEiLCBhbmQ7CisKKyAgXGZh cnJheWxvb2soKm9vZmEqLCZhKQorCisgICBmaW5kcyB0aGUgZmlyc3QgZWxlbWVudCB3aG9zZSB2 YWx1ZSBjb250YWlucyAib29mYSIuCisKKyAgIEhlcmUncyBhIHNpbXBsZSBkZW1vbnN0cmF0aW9u IG9mIGxvb2tpbmcgdXAgcGF0dGVybnMgaW4gYXJyYXlzOgorCisgIGxvY2FsIFwmYVtdIFwleCBc JW4KKyAgZGVjbGFyZSBcJmFbXSA9IHplcm8gb25lIHR3byB0aHJlZSBmb3VyIGZpdmUgc2l4IHNl dmVuIGVpZ2h0IG5pbmUgdGVuCisgIHdoaWxlIHRydWUgeworICAgICAgLlwleCA9IDEKKyAgICAg IC5cJW4gPSAwCisgICAgICBhc2sgXCVhIHsgUGF0dGVybj8gfQorICAgICAgaWYgbm90IGRlZiBc JWEgZXhpdCAwIERvbmUuCisgICAgICB3aGlsZSA8PSBcJXggXGZkaW0oJmEpIHsKKyAgICAgICAg ICAuXCV4IDo9IFxmYXJyYXlsb29rKFwlYSwmYVtcJXhdKQorICAgICAgICAgIGlmICggPCBcJXgg MCApIGJyZWFrCisgICAgICAgICAgZWNobyBcZmxwYWQoXCV4LDMpLiBcJmFbXCV4XQorICAgICAg ICAgIGluY3JlbWVudCBcJXgKKyAgICAgICAgICBpbmNyZW1lbnQgXCVuCisgICAgICB9CisgICAg ICBpZiAoIDwgXCVuIDEgKSBlY2hvIFBhdHRlcm4gbm90IGZvdW5kIC0gIlwlYSIKKyAgfQorCisg ICBUaGUgYXJyYXkgbmVlZCBub3QgYmUgc29ydGVkLiBXaGVuIGEgcGF0dGVybiBpcyBnaXZlbiwg YSBzZWFyY2ggaXMKKyAgIHBlcmZvcm1lZDsgaWYgdGhlcmUgaXMgYSBtYXRjaCwgdGhlIG1hdGNo aW5nIGVsZW1lbnQncyBpbmRleCBhbmQgdGhlCisgICBlbGVtZW50IGl0c2VsZiBhcmUgcHJpbnRl ZCwgYW5kIHRoZSBzZWFyY2ggYmVnaW5zIGFnYWluIGF0IHRoZSBuZXh0CisgICBlbGVtZW50LiBU aHVzIGVhY2ggbWF0Y2hpbmcgZWxlbWVudCBpcyBwcmludGVkLiBJZiBub25lIG1hdGNoLCB0aGUK KyAgICJQYXR0ZXJuIG5vdCBmb3VuZCIgbWVzc2FnZSBpcyBwcmludGVkLiBUaGUgcHJvY2VzcyBy ZXBlYXRzIGZvciBhcyBtYW55CisgICBwYXR0ZXJucyBhcyB0aGUgdXNlciB3YW50cyB0byB0eXBl LCBhbmQgdGVybWluYXRlcyB3aGVuIHRoZSB1c2VyIHR5cGVzCisgICBhbiBlbXB0eSBwYXR0ZXJu LgorCisgICBOb3cgbGV0J3MgYnVpbGQgYSBsaXR0bGUgY29tbWFuZCBwYXJzZXIsIGNvbnNpc3Rp bmcgb2YgYSBrZXl3b3JkIHRhYmxlLAorICAgYW5kIGEgbG9vcCB0byBsb29rIHVwIHRoZSB1c2Vy J3MgY29tbWFuZHMgaW4gaXQgd2l0aCBcZnRhYmxlbG9vaygpLiBJbgorICAgdGhpcyBjYXNlIHRo ZSBhcnJheSBlbGVtZW50cyBoYXZlICJmaWVsZHMiIHNlcGFyYXRlZCBieSBjb2xvbiAoOikgLS0g YQorICAga2V5d29yZCBhbmQgYSB2YWx1ZS4gS2V5d29yZCB0YWJsZXMgbXVzdCBiZSBzb3J0ZWQg aWYgXHRhYmxlbG9vaygpIGlzCisgICB0byB3b3JrIHJpZ2h0LCBzbyBhZnRlciBkZWNsYXJpbmcg YW5kIGluaXRpYWxpemluZyB0aGUgdGFibGUgYXJyYXksIHdlCisgICBzb3J0IGl0LgorCisgIGxv Y2FsIFwma1tdIFwlYSBcJWkgXCVuCisKKyAgYXJyYXkgZGVjbGFyZSBcJmtbXSA9IGRyaXZlOjkg ZG86OCBkaXNjdXNzOjcgbGl2ZTo2IHNwZW5kOjUgaGVscDo0IHF1aXQ6MAorCisgIGFycmF5IHNv cnQgJmsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgTWFrZSBzdXJlIGFycmF5IGlzIHNv cnRlZAorICBlY2hvIFR5cGUgImhlbHAiIGZvciBoZWxwLiAgICAgICAgICAgICAgICA7IFByaW50 IGdyZWV0aW5nICYgaW5zdHJ1Y3Rpb25zCisKKyAgd2hpbGUgdHJ1ZSB7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOyBMb29wIHRvIGdldCBjb21tYW5kcworICAgICAgdW5kZWZpbmUgXCVh CisgICAgICB3aGlsZSBub3QgZGVmaW5lZCBcJWEgeyAgICAgICAgICAgICAgIDsgR2V0IGEgY29t bWFuZAorICAgICAgICAgIGFzayBcJWEgeyBDb21tYW5kPyB9CisgICAgICB9CisgICAgICAuXCVu IDo9IFxmdGFibGVsb29rKFwlYSwmaykgICAgICAgICAgIDsgTG9vayB1cCB0aGUgY29tbWFuZAor ICAgICAgc3dpdGNoIFwlbiB7ICAgICAgICAgICAgICAgICAgICAgICAgICA7IEhhbmRsZSBlcnJv cnMKKyAgICAgICAgOi0xLCBlY2hvIE5vdCBmb3VuZCAtICJcJWEiICAgICAgICAgOyBEb2Vzbid0 IG1hdGNoCisgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgOi0yLCBlY2hvIEFtYmlndW91 cyAtICJcJWEiICAgICAgICAgOyBNYXRjaGVzIHRvbyBtYW55CisgICAgICAgICAgICAgY29udGlu dWUKKyAgICAgIH0KKyAgICAgIHN3aXRjaCBcZndvcmQoXCZrW1wlbl0sMikgeyAgICAgICAgICAg OyBEaXNwYXRjaCBhY2NvcmRpbmcgdG8gdmFsdWUKKyAgICAgICAgIDo5LCBlY2hvIERyaXZpbmcu Li4sIGJyZWFrCisgICAgICAgICA6OCwgZWNobyBEb2luZy4uLiwgYnJlYWsKKyAgICAgICAgIDo3 LCBlY2hvIERpc2N1c3NpbmcuLi4sIGJyZWFrCisgICAgICAgICA6NiwgZWNobyBMaXZpbmcuLi4s IGJyZWFrCisgICAgICAgICA6NSwgZWNobyBTcGVuZGluZy4uLiwgYnJlYWsKKyAgICAgICAgIDo0 LCBlY2hvIHsgQ29tbWFuZHMgKG1heSBiZSBhYmJyZXZpYXRlZCk6fQorICAgICAgICAgICAgIGZv ciBcJWkgMSBcZmRpbSgmaykgMSB7CisgICAgICAgICAgICAgICAgZWNobyB7ICBcJWkuIFxmd29y ZChcJmtbXCVpXSwxKSB9CisgICAgICAgICAgICAgfQorICAgICAgICAgICAgIGJyZWFrCisgICAg ICAgICA6MCwgZXhpdCAwIEJ5ZSEKKyAgICAgICAgIDpkZWZhdWx0LCBzdG9wIDEgSW50ZXJuYWwg ZXJyb3IKKyAgICAgIH0KKyAgfQorCisgICBJbiB0aGlzIGV4YW1wbGUsIGtleXdvcmRzIGFyZSAi ZHJpdmUiLCAiZG8iLCAiZGlzY3VzcyIsIGV0YywgYW5kIHRoZWlyCisgICB2YWx1ZXMgYXJlIHVu aXF1ZSBudW1iZXJzICh2YWx1ZXMgbmVlZCBub3QgYmUgbnVtYmVycywgYW5kIHRoZXJlIG5lZWQK KyAgIG5vdCBiZSBvbmx5IG9uZSB2YWx1ZSAtLSB0aGVyZSBjYW4gYmUgMCwgMSwgMiwgb3IgbW9y ZSBvZiB0aGVtKS4gVGhlCisgICB1c2VyIHR5cGVzIGEgY29tbWFuZCwgd2hpY2ggY2FuIGJlIHRo ZSB3aG9sZSB3b3JkIChsaWtlICJoZWxwIikgb3IgYW55CisgICBhYmJyZXZpYXRpb24gKGxpa2Ug ImhlbCIsICJoZSIsIG9yIGp1c3QgImgiKS4gSWYgdGhpcyBkb2VzIG5vdCBtYXRjaAorICAgYW55 IGtleXdvcmRzLCBcZnRhYmxlbG9vaygpIHJldHVybnMgLTE7IGlmIGl0IG1hdGNoZXMgbW9yZSB0 aGFuIG9uZSAoYXMKKyAgIHdvdWxkICJkIiksIGl0IHJldHVybnMgLTIuIE90aGVyd2lzZSB0aGUg YXJyYXkgaW5kZXggaXMgcmV0dXJuZWQsIDEgb3IKKyAgIGhpZ2hlci4KKworICAgR2l2ZW4gdGhl IGFycmF5IGluZGV4IFwlbiwgd2UgY2FuIGdldCB0aGUgdGFibGUgdmFsdWVzIGFzIGZvbGxvd3M6 CisKKyAgXGZ3b3JkKFwma1tcJW5dLDEpIGlzIHRoZSBrZXl3b3JkIChmaXJzdCBmaWVsZCkKKyAg XGZ3b3JkKFwma1tcJW5dLDIpIGlzIHRoZSB2YWx1ZSAoc2Vjb25kIGZpZWxkLCBpbiB0aGlzIGNh c2UgYSBudW1iZXIpCisKKyAgIEluIG91ciBleGFtcGxlLCB3ZSB1c2UgdGhlIHZhbHVlIChudW1i ZXIpIGFzIHRoZSBTV0lUQ0ggdmFyaWFibGUuIEFzCisgICBub3RlZCwgXGZhYmxlbG9vaygpIGV4 cGVjdHMgdGhlIGFycmF5IGVsZW1lbnRzIHRvIGNvbnRhaW4gbXVsdGlwbGUKKyAgIGZpZWxkcyBz ZXBhcmF0ZWQgYnkgY29sb24gKDopIChvciBvdGhlciBjaGFyYWN0ZXIgdGhhdCB5b3Ugc3BlY2lm eSwKKyAgIGUuZy4gXGZ0YWJsZWxvb2soXCVhLCZhLF4pKSBhbmQgd2hlbiBtYXRjaGluZyB0aGUg a2V5d29yZCwgaWdub3JlcyB0aGUKKyAgIGZpcnN0IGRlbGltaXRlciBhbmQgZXZlcnl0aGluZyBh ZnRlciBpdC4KKworICAgIDcuMTAuOC4gSGludHMgZm9yIFVzaW5nIEFycmF5cworCisgICBDIHBy b2dyYW1tZXJzIGFyZSBhY2N1c3RvbWVkIHRvIG91dC1vZi1ib3VuZHMgYXJyYXkgcmVmZXJlbmNl cyBjYXVzaW5nCisgICBjb3JlIGR1bXBzIG9yIHdvcnNlLiBJbiBDLUtlcm1pdDoKKworICAgICAq IEEgcmVmZXJlbmNlIHRvIGFuIGFuIG91dC1vZi1ib3VuZHMgYXJyYXkgZWxlbWVudCByZXR1cm5z IHRoZSBlbXB0eQorICAgICAgIHN0cmluZy4KKyAgICAgKiBBbiBhdHRlbXB0IHRvIHNldCB0aGUg dmFsdWUgb2YgYW4gYXJyYXkgZWxlbWVudCB0aGF0IGlzIG91dCBvZgorICAgICAgIGJvdW5kcyBv ciB0aGF0IGhhcyBub3QgYmVlbiBkZWNsYXJlZCBzaW1wbHkgZmFpbHMuCisKKyAgIEMgcHJvZ3Jh bW1lcnMgZXhwZWN0IGFuIGFycmF5IG9mIHNpemUgbiB0byBoYXZlIGVsZW1lbnRzIDAgdGhyb3Vn aCBuLTEuCisgICBGb3J0cmFuIHByb2dyYW1tZXJzIGV4cGVjdCB0aGUgc2FtZSBhcnJheSB0byBo YXZlIGVsZW1lbnRzIDEgdGhyb3VnaCBuLgorICAgQy1LZXJtaXQgYWNjb21tb2RhdGVzIGJvdGgg c3R5bGVzOyB3aGVuIHlvdSBkZWNsYXJlIGFuIGFycmF5IG9mIHNpemUgbiwKKyAgIGl0IGhhcyBu KzEgZWxlbWVudHMsIDAgdGhyb3VnaCBuLCBhbmQgeW91IGNhbiB1c2UgdGhlIGFycmF5IGluIHlv dXIKKyAgIGFjY3VzdG9tZWQgbWFubmVyLCAwLWJhc2VkIG9yIDEtYmFzZWQuCisKKyAgIEhvd2V2 ZXIsIG5vdGUgdGhhdCBDLUtlcm1pdCBoYXMgY2VydGFpbiBiaWFzZXMgdG93YXJkcyAxLWJhc2Vk IGFycmF5czoKKworICAgICAqIEFzc2lnbm1lbnQgb2YgZmlsZSBsaXN0cyBzdGFydHMgd2l0aCBl bGVtZW50IDEgKFs2MTFdU2VjdGlvbgorICAgICAgIDcuMTAuMykuCisgICAgICogQXNzaWdubWVu dCBieSBcZnNwbGl0KCkgc3RhcnRzIHdpdGggZWxlbWVudCAxIChbNjEyXVNlY3Rpb24gNy4zKS4K KyAgICAgKiBBcnJheSBpbml0aWFsaXphdGlvbiBza2lwcyB0aGUgMHRoIGVsZW1lbnQuIFRvIGlu aXRpYWxpemUgYSAwLWJhc2VkCisgICAgICAgYXJyYXksIHVzZSBzb21ldGhpbmcgbGlrZSB0aGlz OgorICBkZWNsYXJlIFwmYVszXSA9IG9uZSB0d28gdGhyZWUKKyAgLlwmYVswXSA9IHplcm8KKwor ICAgICAqIFRoZSBBUlJBWSBTT1JUIGNvbW1hbmQgc2tpcHMgdGhlIDB0aCBlbGVtZW50IHVubGVz cyB5b3UgaW5jbHVkZQorICAgICAgIC9SQU5HRTowCisgICAgICogVGhlIFNISUZUIGNvbW1hbmQg aWdub3JlcyBlbGVtZW50IDAgb2YgdGhlIFwmX1tdIGFycmF5LgorCisgICBUaGUgZGlzdGluY3Rp b24gYmV0d2VlbiBhbiBhcnJheSdzIGRpbWVuc2lvbmVkIHNpemUgYW5kIHRoZSBudW1iZXIgb2YK KyAgIGVsZW1lbnRzIGluIHRoZSBhcnJheSBpcyBpbXBvcnRhbnQgd2hlbiBzb3J0aW5nLiBUbyBp bGx1c3RyYXRlOgorCisgIGRlY2xhcmUgXCZhWzEwMF0gICAgICAgICAgICAgICAgICA7IERlY2xh cmUgYXJyYXkgJmEgd2l0aCAxMDAgZWxlbWVudHMKKyAgZm9wZW4gL3JlYWQgXCVjIG9vZmEudHh0 ICAgICAgICAgIDsgT3BlbiBhIGZpbGUKKyAgaWYgZmFpbC4uLgorICBmb3IgXCVpIDEgXGZkaW0o JmEpIDEgeyAgICAgICAgICAgOyBSZWFkIHRoZSBmaWxlIGludG8gdGhlIGFycmF5CisgICAgICBm cmVhZCBcJWMgXCZhW1wlaV0KKyAgICAgIGlmIGZhaWwgYnJlYWsKKyAgfQorICBmY2xvc2UgXCVj CisgIGlmID4gXCVpIFxmZGltKCZhKSBlbmQgMSBGaWxlIGhhcyB0b28gbWFueSBsaW5lcyBmb3Ig YXJyYXkuCisgIC5cJW4gOjo9IFwlaSAtIDEKKyAgZWNobyBGaWxlIGhhcyBcJW4gbGluZShzKS4K KworICAgTGV0J3Mgc2F5IHRoZSBmaWxlIGhhZCA5NSBsaW5lcy4gVGhpcyBsZWF2ZXMgZWxlbWVu dHMgOTYtMTAwIG9mIHRoZQorICAgYXJyYXkgZW1wdHkuIE5vdyBzdXBwb3NlIHlvdSBzb3J0IHRo ZSBhcnJheSBhbmQgd3JpdGUgb3V0IHRoZSByZXN1bHQ6CisKKyAgc29ydCAmYSAgICAgICAgICAg ICAgICAgICAgICAgICAgIDsgU29ydCB0aGUgd2hvbGUgYXJyYXkKKyAgZm9wZW4gL3dyaXRlIFwl byBvb2ZhLnR4dC5zb3J0ZWQgIDsgT3BlbiBhbiBvdXRwdXQgZmlsZQorICBpZiBmYWlsIC4uLgor ICBmb3IgXCVpIDEgXCVuIDEgeyAgICAgICAgICAgICAgICAgOyBXcml0ZSBvdXQgOTUgcmVjb3Jk cworICAgICAgZndyaXRlIC9saW5lIFwlbyBcJmFbXCVpXQorICAgICAgaWYgZmFpbCBlbmQgMSBX cml0ZSBlcnJvcgorICB9CisgIGNsb3NlIHdyaXRlCisKKyAgIFlvdSBtaWdodCBiZSBzdXJwcmlz ZWQgYXQgdGhlIGNvbnRlbnRzIG9mICJvb2ZhLnR4dC5zb3J0ZWQiIC0tIGZpdmUKKyAgIGVtcHR5 IGVsZW1lbnRzLCA5Ni0xMDAsIGZsb2F0ZWQgdG8gdGhlIHRvcCBvZiB0aGUgYXJyYXkgaW4gdGhl IHNvcnQsCisgICBhbmQgc2luY2UgeW91ciB3cml0ZSBsb29wIG9ubHkgaGFkIDk1IGl0ZXJhdGlv bnMsIHRoZSBmaW5hbCA1IGxpbmVzIG9mCisgICB0aGUgc29ydGVkIGZpbGUgYXJlIGxvc3QuCisK KyAgIFRoZXJlZm9yZSwgd2hlbiBkZWFsaW5nIHdpdGggcGFydGlhbGx5IGZpbGxlZCBhcnJheXMg LS0gZXNwZWNpYWxseSB3aGVuCisgICBzb3J0aW5nIHRoZW0gLS0gcmVtZW1iZXIgdG8gc3BlY2lm eSB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzLiBBIGhhbmR5IHdheQorICAgb2YgcmVjb3JkaW5nIGFu IGFycmF5J3MgInRydWUiIHNpemUgaXMgdG8gcHV0IGl0IGluIHRoZSAwdGggZWxlbWVudC4KKyAg IFRoYXQgd2F5LCBpdCAidHJhdmVscyB3aXRoIHRoZSBhcnJheSIuIFRvIGlsbHVzdHJhdGUgKGNv bnRpbnVpbmcgdGhlCisgICBwcmV2aW91cyBleGFtcGxlIGF0IHRoZSAiY2xvc2UgcmVhZCIgc3Rh dGVtZW50KToKKworICBjbG9zZSByZWFkCisgIGlmID4gXCVpIFxmZGltKCZhKSBlbmQgMSBGaWxl IGhhcyB0b28gbWFueSBsaW5lcyBmb3IgYXJyYXkuCisgIC5cJmFbMF0gOjo9IFwlaSAtIDEgICAg IDsgQXNzaWduIG51bWJlciBvZiBsaW5lcyB0byBcJmFbMF0uCisgIGVjaG8gRmlsZSBoYXMgXCZh WzBdIGxpbmUocykuCisgIHNvcnQgL3JhbmdlOjE6XCZhWzBdICZhCisgIG9wZW4gd3JpdGUgb29m YS50eHQuc29ydGVkCisgIGlmIGZhaWwgLi4uCisgIGZvciBcJWkgMSBcJmFbMF0gMSB7CisgICAg ICB3cml0ZWxuIGZpbGUgXCZhW1wlal0KKyAgICAgIGlmIGZhaWwgZW5kIDEgV3JpdGUgZXJyb3IK KyAgfQorICBjbG9zZSB3cml0ZQorCisgICBOb3RlIHRoZSBTT1JUIHN3aXRjaCwgL1JBTkdFOjE6 XCZhWzBdLiBUaGlzIGtlZXBzIHRoZSBzb3J0IDEtYmFzZWQsIGFuZAorICAgdXNlcyBlbGVtZW50 IDAgb2YgdGhlIGFycmF5IGFzIGl0cyBzaXplIGluZGljYXRvci4KKworICAgRmluYWxseSwgbm90 ZSB0aGF0IGV2ZW4gdGhvdWdoIHNvbWUgY29tbWFuZHMgb3IgZnVuY3Rpb25zIG1pZ2h0IHB1dCBh CisgICBzaXplIGluIGFycmF5IGVsZW1lbnQgMCwgbm8gYnVpbHQtaW4gZnVuY3Rpb25zIG9yIGNv bW1hbmRzIGRlcGVuZCBvbiBhCisgICBzaXplIGFjdHVhbGx5IGJlaW5nIHRoZXJlLiBUaHVzIHlv dSBhcmUgcGVyZmVjdGx5IGZyZWUgdG8gcmVwbGFjZSB0aGUKKyAgIHNpemUgd2l0aCBzb21ldGhp bmcgZWxzZSBhbmQgdHJlYXQgdGhlIGFycmF5IGFzIDAtYmFzZWQuCisKKyAgICA3LjEwLjkuIERv LUl0LVlvdXJzZWxmIEFycmF5cworCisgICBLZXJtaXQncyBcJnhbXSBhcnJheXMgYXJlIG5pY2Ug YmVjYXVzZSBvZiB0aGUgYWNjb21wYW55aW5nIGJ1aWx0LWluCisgICBmdW5jdGlvbmFsaXR5IC0t IEFSUkFZIGNvbW1hbmRzLCBidWlsdC1pbiBmdW5jdGlvbnMgdGhhdCBsb2FkIGFuZAorICAgc2Vh cmNoIGFycmF5cywgYXV0b21hdGljIGV2YWx1YXRpb24gb2YgYXJpdGhtZXRpYyBleHByZXNzaW9u cyB3aXRoaW4KKyAgIHRoZSBzdWJzY3JpcHQgYnJhY2tldHMsIGFuZCBzbyBvbi4gWWV0IHRoZXkg YWxzbyBoYXZlIGNlcnRhaW4KKyAgIGxpbWl0YXRpb25zOgorCisgICAgMS4gRXhjZXB0IHdoZW4g Y3JlYXRlZCBieSBkeW5hbWljIGxvYWRpbmcgKGUuZy4gYnkgXGZmaWxlcygpKSB0aGV5CisgICAg ICAgbXVzdCBiZSBkZWNsYXJlZCBhbmQgZGltZW5zaW9uZWQgaW4gYWR2YW5jZS4KKyAgICAyLiBJ bmRpY2VzIG11c3QgYmUgbnVtZXJpYywgcG9zaXRpdmUsIGFuZCBpbiByYW5nZS4KKyAgICAzLiBU aGVyZSBjYW4gYmUgb25seSBvbmUgZGltZW5zaW9uLiBNYXRyaWNlcyBvciBvdGhlcgorICAgICAg IGhpZ2hlci1kaW1lbnNpb25lZCBhcnJheXMgYXJlIG5vdCBhdmFpbGFibGUuCisKKyAgIEJ1dCBu b25lIG9mIHRoaXMgaXMgdG8gc2F5IHlvdSBjYW4ndCBpbnZlbnQgYW55IGtpbmQgb2YgZGF0YSBz dHJ1Y3R1cmUKKyAgIHlvdSBsaWtlLiBJbiBbNjEzXVNlY3Rpb24gNy45LjIgeW91IGNhbiBzZWUg c29tZSBleGFtcGxlcy4gSGVyZSdzCisgICBhbm90aGVyIChjb3VydGVzeSBvZiBEYXQgVGh1YyBO Z3V5ZW4pLCBpbiB3aGljaCBhIHBhaXIgb2YgbWF0cmljZXMgaXMKKyAgIGNyZWF0ZWQgYW5kIHRo ZW4gYWRkZWQ6IG5vIGRpbWVuc2lvbmluZyBuZWNlc3NhcnkuCisKKyAgLnJvdyA9IDQKKyAgLmNv bCA9IDkKKworICA7IE1BQ1JPIFRPIFBSSU5UIEEgTUFUUklYCisgIGRlZmluZSBQTUFUUklYIHsK KyAgICAgIGVjaG8gTWF0cml4IFwlMToKKyAgICAgIGZvciBcJXIgMSBcbShyb3cpIDEgeworICAg ICAgICAgIGZvciBcJWMgMSBcbShjb2wpIDEgeworICAgICAgICAgICAgICB4ZWNobyBcZmxwYWQo XG0oXCUxW1wlcl1bXCVjXSksNCkKKyAgICAgICAgICB9CisgICAgICAgICAgZWNobworICAgICAg fQorICAgICAgZWNobworICB9CisgIDsgQ1JFQVRFIE1BVFJJQ0VTIEEgQU5EIEIKKyAgZm9yIFwl ciAxIFxtKHJvdykgMSB7CisgICAgICBmb3IgXCVjIDEgXG0oY29sKSAxIHsKKyAgICAgICAgICBf ZXZhbCBBW1wlcl1bXCVjXSBcJXIgKyBcJWMKKyAgICAgICAgICBfZXZhbCBCW1wlcl1bXCVjXSBc JXIgKiBcJWMKKyAgICAgIH0KKyAgfQorICA7IENSRUFURSBNQVRSSVggQyA9IFNVTSBPRiBNQVRS SVggQSBBTkQgTUFUUklYIEIKKyAgZm9yIFwlciAxIFxtKHJvdykgMSB7CisgICAgICBmb3IgXCVj IDEgXG0oY29sKSAxIHsKKyAgICAgICAgICBfZXZhbCBDW1wlcl1bXCVjXSBcbShBW1wlcl1bXCVj XSkgKyBcbShCW1wlcl1bXCVjXSkKKyAgICAgIH0KKyAgfQorICBwbWF0cml4IEEgIDsgUHJpbnQg TWF0cml4IEEKKyAgcG1hdHJpeCBCICA7IFByaW50IE1hdHJpeCBCCisgIHBtYXRyaXggQyAgOyBQ cmludCBNYXRyaXggQworCisgICBJbiB0aGUgZXhhbXBsZSwgd2UgdXNlIG1hdHJpeC1saWtlIG5v dGF0aW9uIHRvIGNyZWF0ZSBtYWNyb3Mgd2l0aCBuYW1lcworICAgbGlrZSAiQVsxXVsxXSIsICJC WzNdWzddIiwgYW5kIHNvIG9uLgorCisgICAgNy4xMC4xMC4gQXNzb2NpYXRpdmUgQXJyYXlzCisK KyAgIEFuIGFzc29jaWF0aXZlIGFycmF5IGlzIGEgc3BlY2lhbCBraW5kIG9mIERvLUl0LVlvdXJz ZWxmIGFycmF5LiBJdAorICAgZGlmZmVycyBmcm9tIGEgcmVndWxhciBhcnJheSBpbiB0aGF0IGl0 cyBpbmRpY2VzIG5lZWQgbm90IGJlIG51bWJlcnMgLS0KKyAgIHRoZXkgY2FuIGJlIGFueXRoaW5n IGF0IGFsbCAtLSB3b3JkcywgZmlsZW5hbWVzLCBuYW1lcyBvZiBtb250aHMsIGFueQorICAgY2hh cmFjdGVyIHN0cmluZyBhdCBhbGwsIGFuZCB0aGF0IGl0IGRvZXNuJ3QgaGF2ZSB0byBiZSAoYW5k IGluIGZhY3QKKyAgIGNhbid0IGJlKSBkZWNsYXJlZC4gQW4gYXNzb2NpYXRpdmUgYXJyYXkgZWxl bWVudCBpcyBzaW1wbHkgYSBtYWNybworICAgd2hvc2UgbmFtZSBlbmRzIHdpdGggYW4gaW5kZXgg ZW5jbG9zZWQgaW4gYW5nbGUgYnJhY2tldHMsIGZvciBleGFtcGxlOgorCisgIGZpbGU8b29mYS50 eHQ+CisKKyAgIE1vcmUgZm9ybWFsbHk6CisKKyAgYmFzZW5hbWU8aW5kZXg+CisKKyAgIEFuIGFz c29jaWF0aXZlIGFycmF5IGlzIGEgY29sbGVjdGlvbiBvZiBhbGwgYXNzb2NpYXRpdmUgYXJyYXkg ZWxlbWVudHMKKyAgIHRoYXQgaGF2ZSB0aGUgc2FtZSBiYXNlbmFtZS4gQW55IG51bWJlciBvZiBh c3NvY2lhdGl2ZSBhcnJheXMsIGVhY2gKKyAgIHdpdGggYW55IG51bWJlciBvZiBlbGVtZW50cywg Y2FuIGV4aXN0IGF0IHRoZSBzYW1lIHRpbWUuCisKKyAgIEFuIGFzc29jaWF0aXZlIGFycmF5IGVs ZW1lbnQgY2FuIGJlIGFzc2lnbmVkIGEgdmFsdWUsIHN1Y2ggYXMgIjEiLCBqdXN0CisgICBsaWtl IGFueSBvdGhlciBtYWNybzoKKworICBkZWZpbmUgZmlsZTxvb2ZhLnR4dD4gMSAgICAgOyBHaXZl ICJmaWxlPG9vZmEudHh0PiIgdGhlIHZhbHVlICIxIi4KKworICAgb3I6CisKKyAgYXNzaWduIGZp bGU8b29mYS50eHQ+IFwlYSAgIDsgR2l2ZSBpdCB0aGUgdmFsdWUgb2YgdGhlIHZhcmlhYmxlIFwl YS4KKworICAgSG93ZXZlciwgc2luY2UgYW4gYXNzb2NpYXRpdmUgYXJyYXkgZWxlbWVudCBpcyBh IG1hY3JvLCBpdCBtYXkgbm90IGhhdmUKKyAgIGFuIGVtcHR5IChudWxsKSB2YWx1ZSwgc2luY2Ug YXNzaWduaW5nIGFuIGVtcHR5IHZhbHVlIHRvIGEgbWFjcm8KKyAgIHVuZGVmaW5lcyB0aGUgbWFj cm8uCisKKyAgIFlvdSBjYW4gcmVmZXIgdG8gdGhlIHZhbHVlIG9mIGFuIGFzc29jaWF0aXZlIGFy cmF5IGVsZW1lbnQgdXNpbmcgdGhlCisgICBmYW1pbGlhciBub3RhdGlvbiBmb3IgbWFjcm8gdmFs dWVzOgorCisgIGVjaG8gXG0oZmlsZTxvb2ZhLnR4dD4pICAgICA7IEVjaG8gdGhlIHZhbHVlIG9m ICJmaWxlPG9vZmEudHh0PiIuCisKKyAgIEFzc29jaWF0aXZlIGFycmF5cyBhcmUgbW9zdCB1c2Vm dWwsIGhvd2V2ZXIsIHdoZW4gdGhlIHZhbHVlIG9mIHRoZQorICAgaW5kZXggaXMgYSB2YXJpYWJs ZS4gSW4gdGhhdCBjYXNlLCB5b3UgbXVzdCB1c2UgdGhlICJoaWRkZW4iIGZvcm1zIG9mCisgICB0 aGUgREVGSU5FIG9yIEFTU0lHTiBjb21tYW5kcyB0aGF0IGV2YWx1YXRlIHRoZSBtYWNybyBuYW1l IGJlZm9yZQorICAgbWFraW5nIHRoZSBhc3NpZ25tZW50IChzZWUgWzYxNF1Vc2luZyBDLUtlcm1p dCwgcGFnZSA0NTcpLiBFeGFtcGxlOgorCisgIGRlZmluZSBcJWYgb29mYS50eHQKKyAgX2RlZmlu ZSBmaWxlPFwlZj4gMQorICBlY2hvIGZpbGU8XCVmPiA9IFxtKGZpbGU8XCVmPikKKworICAgcHJp bnRzOgorCisgIGZpbGU8b29mYS50eHQ+ID0gMQorCisgICBhbmQgdGhlbjoKKworICBfaW5jcmVt ZW50IGZpbGU8XCVmPgorICBlY2hvIGZpbGU8XCVmPiA9IFxtKGZpbGU8XCVmPikKKworICAgcHJp bnRzOgorCisgIGZpbGU8b29mYS50eHQ+ID0gMgorCisgICBXaGF0IGFyZSBhc3NvY2lhdGl2ZSBh cnJheXMgZ29vZCBmb3I/IFRoZSBjbGFzc2ljIGV4YW1wbGUgaXMgIndvcmQKKyAgIGNvdW50cyI6 IGZpbmRpbmcgdGhlIG51bWJlciBvZiB0aW1lcyBlYWNoIHdvcmQgaXMgdXNlZCBpbiBhIHRleHQK KyAgIHdpdGhvdXQga25vd2luZyBpbiBhZHZhbmNlIHdoYXQgdGhlIHdvcmRzIGFyZS4gV2l0aG91 dCBhc3NvY2lhdGl2ZQorICAgYXJyYXlzLCB5b3VyIHByb2dyYW0gd291bGQgaGF2ZSB0byBidWls ZCBhIHRhYmxlIG9mIHNvbWUga2luZCwgYW5kCisgICBldmVyeSB0aW1lIGEgd29yZCB3YXMgZW5j b3VudGVyZWQsIGxvb2sgaXQgdXAgaW4gdGhlIHRhYmxlIHRvIGZpbmQgaXRzCisgICBwb3NpdGlv biBhbmQgY291bnRlciwgb3IgYWRkIGl0IHRvIHRoZSB0YWJsZSBpZiBpdCB3YXNuJ3QgZm91bmQg LS0gYQorICAgdGltZS1jb25zdW1pbmcgYW5kIGxhYm9yaW91cyBwcm9jZXNzLiBBc3NvY2lhdGl2 ZSBhcnJheXMsIGhvd2V2ZXIsIGxldAorICAgeW91IHVzZSB0aGUgd29yZCBpdHNlbGYgYXMgdGhl IHRhYmxlIGluZGV4IGFuZCB0aGVyZWZvcmUgc2lkZXN0ZXAgYWxsCisgICB0aGUgdGFibGUgYnVp bGRpbmcgYW5kIGxvb2t1cHMuCisKKyAgIExldCdzIHdvcmsgdGhyb3VnaCBhIHByYWN0aWNhbCBl eGFtcGxlLiBTdXBwb3NlIHlvdSBoYXZlIGEKKyAgIGZpbGUtdHJhbnNmZXIgbG9nIGluIHdoaWNo IGVhY2ggbGluZSBpcyBjb21wb3NlZCBvZiBhIG51bWJlciBvZgorICAgYmxhbmstc2VwYXJhdGVk IGZpZWxkcywgYW5kIHRoZSA5dGggZmllbGQgaXMgYSBmaWxlbmFtZSAod2hpY2ggaGFwcGVucwor ICAgdG8gYmUgdGhlIGZvcm1hdCBvZiBjZXJ0YWluIEZUUCBzZXJ2ZXIgbG9ncywgYXMgd2VsbCBh cyBvZiBDLUtlcm1pdCdzCisgICBuZXcgRlRQLWZvcm1hdCB0cmFuc2FjdGlvbiBsb2csIGRlc2Ny aWJlZCBpbiBbNjE1XVNlY3Rpb24gNC4xNy4yKSwgZm9yCisgICBleGFtcGxlOgorCisgIFdlZCBK dWwgMTQgMDk6MzU6MzEgMTk5OSAyMiB4eC5taXQuZWR1IDEzNDEyIC9wdWIvZnRwL21tL2ludHJv LnR4dCAuLi4uCisKKyAgIGFuZCB5b3Ugd2FudCB0byBmaW5kIG91dCBob3cgbWFueSB0aW1lcyBl YWNoIGZpbGUgd2FzIHRyYW5zZmVycmVkLiBUaGUKKyAgIGZvbGxvd2luZyBjb2RlIGJ1aWxkcyBh biBhc3NvY2lhdGl2ZSBhcnJheSwgZmlsZTw+LCBjb250YWluaW5nIHRoZQorICAgY291bnRzIGZv ciBlYWNoIGZpbGU6CisKKyAgbG9jYWwgbmFtZSBsaW5lIG1heCBcJWMgXCVuICAgICAgICAgIDsg RGVjbGFyZSBsb2NhbCB2YXJpYWJsZXMKKyAgZm9wZW4gL3JlYWQgXCVjIC92YXIvbG9nL2Z0cGQu bG9nICAgIDsgT3BlbiB0aGUgbG9nIGZpbGUgKFs2MTZdU2VjdGlvbiAxLjIyKQorICBpZiBmYWls IGV4aXQgMSBDYW4ndCBvcGVuIGxvZyAgICAgICAgOyBDaGVjaworICB3aGlsZSB0cnVlIHsgICAg ICAgICAgICAgICAgICAgICAgICAgOyBMb29wIGZvciBlYWNoIHJlY29yZAorICAgICAgZnJlYWQg L2xpbmUgXCVjIGxpbmUgICAgICAgICAgICAgOyBSZWFkIGEgbGluZQorICAgICAgaWYgZmFpbCBi cmVhayAgICAgICAgICAgICAgICAgICAgOyBDaGVjayBmb3IgZW5kIG9mIGZpbGUKKyAgICAgIC5u YW1lIDo9IFxmd29yZChcbShsaW5lKSw5LHsgfSkgIDsgR2V0IDl0aCBmaWVsZCA9IGZpbGVuYW1l IChTZWMgNy4zKQorICAgICAgX2luY3JlbWVudCBmaWxlPFxtKG5hbWUpPiAgICAgICAgOyBJbmNy ZW1lbnQgaXRzIGNvdW50ZXIgKFNlYyA3LjkuMikKKyAgfQorICBmY2xvc2UgXCVjICAgICAgICAg ICAgICAgICAgICAgICAgICAgOyBDbG9zZSBmaWxlIHdoZW4gZG9uZS4KKworICAgTm90ZSB0aGF0 IF9JTkNSRU1FTlQgKGFuZCBJTkNSRU1FTlQsIGFuZCBbX11ERUNSRU1FTlQpIHRyZWF0IGFuIGVt cHR5CisgICAoaS5lLiBub25leGlzdGVudCkgdmFyaWFibGUgYXMgaGF2aW5nIGEgdmFsdWUgb2Yg MCwgYW5kIHRoZXJlZm9yZQorICAgY3JlYXRlcyB0aGUgdmFyaWFibGUgd2l0aCBhIHZhbHVlIG9m IDEuCisKKyAgIEF0IHRoaXMgcG9pbnQsIGlmIHlvdSB0b2xkIEtlcm1pdCB0byAic2hvdyBtYWNy byBmaWxlPCIsIGl0IHdvdWxkIGxpc3QKKyAgIHRoZSBhc3NvY2lhdGl2ZSBhcnJheS4gQnV0IHNp bmNlIHlvdSBkb24ndCBuZWNlc3NhcmlseSBrbm93IHRoZSBuYW1lcworICAgb2YgdGhlIGZpbGVz IGluIHRoZSBhcnJheSwgb3IgZXZlbiBob3cgbWFueSBlbGVtZW50cyBhcmUgaW4gdGhlIGFycmF5 LAorICAgaG93IGNhbiB5b3UgdXNlIGl0IGluIGEgc2NyaXB0IHByb2dyYW0/CisKKyAgIFRoZSBp ZGVhIG9mIGNyZWF0aW5nIG1hY3JvIG5hbWVzIHRoYXQgaW5jbHVkZSBjaGFyYWN0ZXItc3RyaW5n IGluZGljZXMKKyAgIGVuY2xvc2VkIGluIGFuZ2xlIGJyYWNrZXRzIGlzIHBlcmZlY3RseSBhcmJp dHJhcnkgYW5kIGRvZXNuJ3QgZGVwZW5kIG9uCisgICBhbnkgS2VybWl0IGZlYXR1cmVzIHRoYXQg d2VyZW4ndCBhbHJlYWR5IHRoZXJlIC0tIHdlIGNvdWxkIGp1c3QgYXMKKyAgIGVhc2lseSBoYXZl IHVzZWQgc29tZSBvdGhlciBub3RhdGlvbiwgc3VjaCBhcyAiZmlsZVtpbmRleF0iLAorICAgImZp bGU6aW5kZXgiLCBvciAiZmlsZS5pbmRleCIsIGFuZCB0aGUgY29kZSBhYm92ZSB3b3VsZCBoYXZl IHdvcmtlZAorICAganVzdCBhcyB3ZWxsICh3aXRoIHRoZSBjb3JyZXNwb25kaW5nIHN5bnRheCBh ZGp1c3RtZW50cykuIEJ1dCB0byBiZQorICAgYWJsZSB0byB1c2UgYW4gYXNzb2NpYXRpdmUgYXJy YXkgaW4gYSBwcm9ncmFtIGFmdGVyIHRoZSBhcnJheSBpcyBidWlsdCwKKyAgIHdlIG5lZWQgYSBt ZXRob2Qgb2YgYWNjZXNzaW5nIGFsbCBpdHMgZWxlbWVudHMgd2l0aG91dCBrbm93aW5nIGluCisg ICBhZHZhbmNlIHdoYXQgdGhleSBhcmUuIFRoYXQncyB3aGVyZSB0aGUgY2hvc2VuIG5vdGF0aW9u IGNvbWVzIGluLgorCisgICBGaXJzdCBvZiBhbGwsIGFueSBtYWNybyBuYW1lIHRoYXQgZW5kcyB3 aXRoICI8eHh4PiIgKHdoZXJlICJ4eHgiIGlzIGFueQorICAgc3RyaW5nKSBpcyBjYXNlIHNlbnNp dGl2ZSwgdW5saWtlIGFsbCBvdGhlciBtYWNybyBuYW1lcywgd2hpY2ggYXJlIGNhc2UKKyAgIGlu ZGVwZW5kZW50LiBUbyBpbGx1c3RyYXRlLCAiZmlsZTxvb2ZhLnR4dD4iIGFuZCAiZmlsZTxPT0ZB LlRYVD4iIGFyZQorICAgdHdvIGRpc3RpbmN0IG1hY3Jvcywgd2hlcmVhcyAiT09GQSIsICJPb2Zh IiwgYW5kICJvb2ZhIiwgd2hlbiB1c2VkIGFzCisgICBtYWNybyBuYW1lcywgYXJlIGFsbCB0aGUg c2FtZS4KKworICAgU2Vjb25kLCB0aGUgbmV3IFxmYWFjb252ZXJ0KCkgZnVuY3Rpb24gY29udmVy dHMgYW4gYXNzb2NpYXRpdmUgYXJyYXkKKyAgICh0aGF0IGlzLCBhbGwgbWFjcm9zIHdpdGggbmFt ZXMgb2YgdGhlIGZvcm0gImJhc2U8aW5kZXg+IiB0aGF0IGhhdmUgdGhlCisgICBzYW1lICJiYXNl IiBwYXJ0KSBpbnRvIGEgcGFpciBvZiByZWd1bGFyIGFycmF5cyBhbmQgcmV0dXJucyB0aGUgbnVt YmVyCisgICBvZiBlbGVtZW50czoKKworICBcZmFhY29udmVydChuYW1lLCZhWywmYl0pCisKKyAg ICJuYW1lIiBpcyB0aGUgbmFtZSBvZiB0aGUgYXNzb2NpYXRpdmUgYXJyYXksIHdpdGhvdXQgdGhl IGFuZ2xlIGJyYWNrZXRzCisgICBvciBpbmRleCAoImZpbGUiIGluIG91ciBleGFtcGxlKS4KKwor ICAgVGhlIHNlY29uZCBhcmd1bWVudCBpcyB0aGUgbmFtZSBvZiBhIHJlZ3VsYXIgYXJyYXkgaW4g d2hpY2ggdG8gc3RvcmUKKyAgIHRoZSBpbmRpY2VzIG9mIHRoZSBhc3NvY2lhdGl2ZSBhcnJheSAo ZmlsZW5hbWVzIGluIG91ciBleGFtcGxlKTsgaWYgYW4KKyAgIGFycmF5IG9mIHRoaXMgbmFtZSBh bHJlYWR5IGV4aXN0cywgaXQgaXMgZGVzdHJveWVkIHVubGVzcyB0aGUgYXJyYXkgaXMKKyAgIExP Q0FMLiBUaGUgdGhpcmQgYXJndW1lbnQgaXMgdGhlIG5hbWUgb2YgYW5vdGhlciByZWd1bGFyIGFy cmF5IGluIHdoaWNoCisgICB0byBzdG9yZSB0aGUgdmFsdWVzICh0aGUgY291bnRzIGluIG91ciBl eGFtcGxlKSwgd2l0aCB0aGUgc2FtZSBydWxlcworICAgYWJvdXQgYXJyYXkgbmFtZSBjb2xsaXNp b25zLiBJZiB5b3UgY2FyZSBvbmx5IGFib3V0IHRoZSBpbmRpY2VzIGFuZCBub3QKKyAgIHRoZSB2 YWx1ZXMsIHlvdSBjYW4gb21pdCB0aGUgdGhpcmQgYXJndW1lbnQgdG8gXGZhYWNvbnZlcnQoKS4g SW4gYW55CisgICBjYXNlLCB0aGUgYXNzb2NpYXRpdmUgYXJyYXkgaXMgY29udmVydGVkLCBub3Qg Y29waWVkOiBpdHMgZWxlbWVudHMgYXJlCisgICBtb3ZlZCB0byB0aGUgc3BlY2lmaWVkIHJlZ3Vs YXIgYXJyYXlzLCBzbyBhZnRlciBjb252ZXJzaW9uIHRoZSBvcmlnaW5hbAorICAgYXNzb2NpYXRp dmUgYXJyYXkgaXMgZ29uZS4KKworICAgQXMgd2l0aCBvdGhlciBhcnJheS1sb2FkaW5nIGZ1bmN0 aW9ucywgXGZhYWNvbnZlcnQoKSBzZXRzIGVsZW1lbnQgMCBvZgorICAgZWFjaCBhcnJheSB0byB0 aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBhcnJheS4KKworICAgVG8gY29udGludWUgb3Vy IGV4YW1wbGU6CisKKyAgLm1heCA6PSAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA7IE1heGltdW0gY291bnQKKyAgLlwlbiA6PSBcZmFhY29udmVydChmaWxlLCZhLCZiKSAgICAg ICAgICAgICA7IENvbnZlcnQKKyAgZm9yIFwlaSAxIFwlbiAxIHsgICAgICAgICAgICAgICAgICAg ICAgICAgICA7IExvb3AgdGhyb3VnaCB2YWx1ZXMKKyAgICAgIGVjaG8gXGZscGFkKFwlaSwzKS4g XCZhW1wlaV06IFwmYltcJWldICA7IEVjaG8gdGhpcyBwYWlyCisgICAgICBpZiAoID4gXCZiW1wl aV0gXG0obWF4KSApIHsgICAgICAgICAgICAgOyBDaGVjayBmb3IgbmV3IG1heGltdW0KKyAgICAg ICAgICAubmFtZSA6PSBcJmFbXCVpXQorICAgICAgICAgIC5tYXggIDo9IFwmYltcJWldCisgICAg ICB9CisgIH0KKyAgZWNobyBNb3N0IHBvcHVsYXIgZmlsZTogXG0obmFtZSksIGFjY2Vzc2VzOiBc bShtYXgpCisKKyAgIFRoaXMgbGlzdHMgdGhlIGZpbGVzIGFuZCBjb3VudHMgYW5kIHRoZW4gYW5u b3VuY2VzIHdoaWNoIGZpbGUgaGFzIHRoZQorICAgaGlnaGVzdCBjb3VudC4KKworICAgTm93IHN1 cHBvc2UgeW91IHdhbnQgdG8gc29ydCB0aGUgYXJyYXkgcGFpciBjcmVhdGVkIGZyb20gYW4gYXNz b2NpYXRpdmUKKyAgIGFycmF5LiBJbiBvdXIgZXhhbXBsZSwgXCZhW10gY29udGFpbnMgZmlsZW5h bWVzLCBhbmQgXCZiW10gY29udGFpbnMgdGhlCisgICBhc3NvY2lhdGVkIGNvdW50cy4gSGVyZSB3 ZSB0YWtlIGFkdmFudGFnZSBvZiB0aGUgQVJSQVkgU09SVCBjb21tYW5kJ3MKKyAgIGFiaWxpdHkg dG8gc29ydCBhIHNlY29uZCBhcnJheSBhY2NvcmRpbmcgdG8gdGhlIGZpcnN0IG9uZToKKworICBh cnJheSBzb3J0IC9yZXZlcnNlIC9udW1lcmljICZiICZhICAgICAgICAgIDsgRGVzY2VuZGluZyBz b3J0IGJ5IGNvdW50CisKKyAgIE5vdyB0byBzZWUgdGhlIHRvcCBmaXZlIGZpbGVzIGFuZCB0aGVp ciBjb3VudHM6CisKKyAgZWNobyBUaGUgdG9wIDUgZmlsZXMgYXJlOgorICBmb3IgXCVpIDEgNSAx IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgTG9vcCB0aHJvdWdoIHRvcCA1IHZhbHVl cworICAgICAgZWNobyBcZmxwYWQoXCVpLDMpLiBcJmFbXCVpXTogXCZiW1wlaV0gIDsgRWNobyB0 aGlzIHBhaXIKKyAgfQorCisgICAgNy4xMC4xMS4gVHJhbnNmZXJyaW5nIEFycmF5IENvbnRlbnRz IHRvIE90aGVyIENvbXB1dGVycworCisgICBUaGUgU0VORCAvQVJSQVk6YXJyYXluYW1lIGNvbW1h bmQgKFs2MTddU2VjdGlvbiA0LjcuMSkgYWxsb3dzIHlvdSB0bworICAgc2VuZCB0aGUgY29udGVu dHMgb2YgYW55IGFycmF5LCBvciBhbnkgY29udGlndW91cyBzZWdtZW50IG9mIGl0LCBpbgorICAg ZWl0aGVyIHRleHQgb3IgYmluYXJ5IG1vZGUgdG8gYW5vdGhlciBjb21wdXRlciwgdXNpbmcgS2Vy bWl0IHByb3RvY29sLgorICAgV2hlbiB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggQy1LZXJtaXQn cyBvdGhlciBmZWF0dXJlcyAodGhlIGFycmF5CisgICBmZWF0dXJlcyBkZXNjcmliZWQgaW4gdGhp cyBzZWN0aW9uOyB0aGUgZmlsZSBpL28gcGFja2FnZSBmcm9tCisgICBbNjE4XVNlY3Rpb24gMS4y MjsgaXRzIGRlY2lzaW9uLW1ha2luZywgcGF0dGVybi1tYXRjaGluZywgYW5kIHN0cmluZworICAg bWFuaXB1bGF0aW9uIGNhcGFiaWxpdGllcywgYW5kIHNvIG9uKSB0aGUgcG9zc2liaWxpdGllcyBh cmUgZW5kbGVzczoKKyAgIGV4dHJhY3RzIG9mIGxhcmdlIGZpbGVzLCByZW1vdGUgZGF0YWJhc2Ug cXVlcmllcywgLi4uLCBhbGwgd2l0aG91dAorICAgcmVjb3Vyc2UgdG8gc3lzdGVtLWRlcGVuZGVu dCBtZWNoYW5pc21zIHN1Y2ggVU5JWCBwaXBlcyBhbmQgZmlsdGVycywKKyAgIHRodXMgZW5zdXJp bmcgY3Jvc3MtcGxhdGZvcm0gcG9ydGFiaWxpdHkgb2Ygc2NyaXB0cyB0aGF0IHVzZSB0aGVzZQor ICAgZmVhdHVyZXMuCisKKyAgIFdoZW4gc2VuZGluZyBhbiBhcnJheSBpbiB0ZXh0IG1vZGUsIEtl cm1pdCBhcHBlbmRzIGEgbGluZSB0ZXJtaW5hdG9yIHRvCisgICBlYWNoIGFycmF5IGVsZW1lbnQs IGV2ZW4gZW1wdHkgb25lcywgYW5kIGl0IGFsc28gY29udmVydHMgdGhlIGNoYXJhY3RlcgorICAg c2V0IGZyb20geW91ciBjdXJyZW50IEZJTEUgY2hhcmFjdGVyLXNldCB0byB5b3VyIGN1cnJlbnQg VFJBTlNGRVIKKyAgIGNoYXJhY3Rlci1zZXQsIGlmIGFueS4gTm8gY29udmVyc2lvbnMgYXJlIG1h ZGUgb3IgbGluZSB0ZXJtaW5hdGlvbnMKKyAgIGFkZGVkIGluIGJpbmFyeSBtb2RlLiBGb3IgZXhh bXBsZSwgdGhlIGZvbGxvd2luZyBhcnJheToKKworICBkY2wgXCZhW10gPSBPbmUgVHdvIFRocmVl IEZvdXIgRml2ZSBTaXgKKworICAgaXMgc2VudCBhcyBzaXggbGluZXMsIG9uZSB3b3JkIHBlciBs aW5lLCBpbiB0ZXh0IG1vZGUsIGFuZCBhcyB0aGUgYmFyZQorICAgdW50ZXJtaW5hdGVkIHN0cmlu ZyAiT25lVHdvVGhyZWVGb3VyRml2ZVNpeCIgaW4gYmluYXJ5IG1vZGUuCisKKyAgIFlvdSBzaG91 bGQgYWx3YXlzIGluY2x1ZGUgYSAvVEVYVCBvciAvQklOQVJZIHN3aXRjaCBpbiBhbnkgU0VORCAv QVJSQVkKKyAgIGNvbW1hbmQgdG8gZm9yY2UgdGhlIGRlc2lyZWQgdHJhbnNmZXIgbW9kZSwgb3Ro ZXJ3aXNlIHlvdSdyZSBsaWtlbHkgdG8KKyAgIGJlIHN1cnByaXNlZCBieSB0aGUgZWZmZWN0cyBk ZXNjcmliZWQgaW4gWzYxOV1TZWN0aW9uIDQuMy4KKworICAgSGVyZSBhcmUgc29tZSBleGFtcGxl czoKKworICAgc2VuZCAvdGV4dCAvYXJyYXk6XCZhW10KKyAgICAgICAgICBTZW5kcyB0aGUgZW50 aXJlIGNvbnRlbnRzIG9mIHRoZSBhcnJheSBcJmFbXSBpbiB0ZXh0IG1vZGUuIFNpbmNlCisgICAg ICAgICAgYW4gYXMtbmFtZSBpcyBub3QgaW5jbHVkZWQsIHRoZSByZWNlaXZlciBpcyB0b2xkIHRo ZSBmaWxlbmFtZSBpcworICAgICAgICAgIF9hcnJheV9hXy4KKworICAgc2VuZCAvdGV4dCAvYXJy YXk6JmFbXQorICAgc2VuZCAvdGV4dCAvYXJyYXk6YVtdCisgICBzZW5kIC90ZXh0IC9hcnJheTom YQorICAgc2VuZCAvdGV4dCAvYXJyYXk6YQorICAgICAgICAgIFRoZXNlIGFyZSBhbGwgZXF1aXZh bGVudCB0byB0aGUgcHJldmlvdXMgZXhhbXBsZS4KKworICAgc2VuZCAvdGV4dCAvYXJyYXk6JmEg L2FzLW5hbWU6Zm9vLmJhcgorICAgICAgICAgIEFzIGFib3ZlLCBidXQgdGhlIGFycmF5IGlzIHNl bnQgdW5kZXIgdGhlIG5hbWUgZm9vLmJhci4KKworICAgc2VuZCAvdGV4dCAvYXJyYXk6JmFbMTAw OjE5OV0gL2FzOmZvby5iYXIKKyAgICAgICAgICBBcyBhYm92ZSwgYnV0IG9ubHkgdGhlIGVsZW1l bnRzIGZyb20gMTAwIHRocm91Z2ggMTk5IGFyZSBzZW50LgorCisgICBJbiB0ZXh0LW1vZGUgdHJh bnNmZXJzLCBjaGFyYWN0ZXIgc2V0cyBhcmUgdHJhbnNsYXRlZCBhY2NvcmRpbmcgdG8geW91cgor ICAgY3VycmVudCBzZXR0aW5ncywganVzdCBhcyBmb3IgdGV4dCBmaWxlcy4gSW4gYmluYXJ5IG1v ZGUsIG9mIGNvdXJzZSwKKyAgIHRoZXJlIGlzIG5vIGNoYXJhY3Rlci1zZXQgdHJhbnNsYXRpb24g b3Igb3RoZXIgY29udmVyc2lvbiBvZiBhbnkga2luZC4KKyAgIEJ1dCByZW1lbWJlciB0aGF0IGFy cmF5IGVsZW1lbnRzIGNhbiBub3QgY29udGFpbiB0aGUgTlVMIChBU0NJSSAwKQorICAgY2hhcmFj dGVyLCBzaW5jZSB0aGV5IGFyZSBpbXBsZW1lbnRlZCBhcyBOVUwtdGVybWluYXRlZCBzdHJpbmdz LgorCisgICBIZXJlJ3MgYW4gZXhhbXBsZSB0aGF0IHNob3dzIGhvdyB0byBzZW5kIGFsbCB0aGUg bGluZXMgKHVwIHRvIDEwMDAgb2YKKyAgIHRoZW0pIGZyb20gYSBmaWxlIGFuaW1hbHMudHh0IHRo YXQgY29udGFpbiB0aGUgd29yZHMgImNhdCIsICJkb2ciLCBvcgorICAgImhvZyIgKHNlZSBbNjIw XVNlY3Rpb24gNC45IGFib3V0IHBhdHRlcm4gbWF0Y2hpbmcpOgorCisgIGRlY2xhcmUgXCZhWzEw MDBdCisgIGZvcGVuIC9yZWFkIFwlYyBhbmltYWxzLnR4dAorICBpZiBmYWlsIGV4aXQgMQorICAu XCVpID0gMAorICB3aGlsZSB0cnVlIHsKKyAgICAgIGZyZWFkIFwlYyBsaW5lCisgICAgICBpZiBm YWlsIGJyZWFrCisgICAgICBpZiBtYXRjaCB7XG0obGluZSl9IHsqe2NhdCxbZGhdb2d9Kn0gewor ICAgICAgICAgIGluY3JlbWVudCBcJWkKKyAgICAgICAgICBpZiAoID4gXCVpIFxmZGltKCZhKSAp IGJyZWFrCisgICAgICAgICAgLlwmYVtcJWldIDo9IFxtKGxpbmUpCisgICAgICB9CisgIH0KKyAg ZmNsb3NlIFwlYworICBzZW5kIC9hcnJheTphWzE6XCVpXSAvdGV4dAorCisgICBOb3RlIHRoYXQg d2UgYXJlIGNhcmVmdWwgdG8gc2VuZCBvbmx5IHRoZSBwYXJ0IG9mIHRoZSBhcnJheSB0aGF0IHdh cworICAgZmlsbGVkLCBub3QgdGhlIGVudGlyZSBhcnJheSwgYmVjYXVzZSB0aGVyZSBhcmUgbGlr ZWx5IHRvIGJlIGxvdHMgb2YKKyAgIHVudXNlZCBlbGVtZW50cyBhdCB0aGUgZW5kLCBhbmQgdGhl c2Ugd291bGQgYmUgc2VudCBhcyBibGFuayBsaW5lcworICAgb3RoZXJ3aXNlLgorCisgICBUaGlz IGV4YW1wbGUgcmFpc2VzIGFuIGludGVyZXN0aW5nIHF1ZXN0aW9uOiB3aGF0IGlmIHdlIHdhbnQg dG8gc2VuZAorICAgQUxMIHRoZSBtYXRjaGluZyBsaW5lcywgZXZlbiBpZiB0aGVyZSBhcmUgbW9y ZSB0aGFuIDEwMDAgb2YgdGhlbSwgYnV0CisgICB3ZSBkb24ndCBrbm93IHRoZSBudW1iZXIgaW4g YWR2YW5jZT8gQ2xlYXJseSB0aGUgcHJvYmxlbSBpcyBsaW1pdGVkIGJ5CisgICBLZXJtaXQncyAo YW5kIHRoZSBjb21wdXRlcidzKSBtZW1vcnkuIElmIHRoZXJlIGFyZSBhIHRob3VzYW5kIHRyaWxs aW9uCisgICBtYXRjaGluZyBsaW5lcywgdGhleSBtb3N0IGxpa2VseSB3aWxsIG5vdCBmaXQgaW4g bWVtb3J5LCBhbmQgaW4gdGhpcworICAgY2FzZSB0aGUgb25seSBzb2x1dGlvbiBpcyB0byB3cml0 ZSB0aGVtIGZpcnN0IHRvIGEgdGVtcG9yYXJ5IGZpbGUgb24KKyAgIG1hc3Mgc3RvcmFnZSBhbmQg dGhlbiBzZW5kIHRoZSB0ZW1wb3JhcnkgZmlsZSBhbmQgZGVsZXRlIGl0IGFmdGVyd2FyZHMuCisK KyAgIEhvd2V2ZXIsIHdoZW4gdGhlIHNlbGVjdGlvbiBpcyBsaWtlbHkgdG8gZml0IGluIG1lbW9y eSwgdGhlCisgICBvbmNlLWZhbWlsaWFyIHRlY2huaXF1ZSBvZiBpbml0aWFsIGFsbG9jYXRpb24g d2l0aCBleHRlbnRzIGNhbiBiZSB1c2VkOgorCisgIGlmIG1hdGNoIHtcbShsaW5lKX0geyp7Y2F0 LFtkaF1vZ30qfSB7CisgICAgICBpbmNyZW1lbnQgXCVpCisgICAgICBpZiAoID4gXCVpIFxmZGlt KCZhKSApIHsKKyAgICAgICAgICBhcnJheSByZXNpemUgYSBcZmRpbSgmYSkrMTAwCisgICAgICAg ICAgaWYgZmFpbCBzdG9wIDEgTUVNT1JZIEZVTEwKKyAgICAgICAgICBlY2hvIE5FVyBESU1FTlNJ T046IFxmZGltKCZhKQorICAgICAgfQorICAgICAgLlwmYVtcJWldIDo9IFxtKGxpbmUpCisgIH0K KworICAgVGhpcyBncm93cyB0aGUgYXJyYXkgaW4gY2h1bmtzIG9mIDEwMCBhcyBuZWVkZWQuCisK KyAgNy4xMS4gT1VUUFVUIENvbW1hbmQgSW1wcm92ZW1lbnRzCisKKyAgIExJTkVPVVQgWyB0ZXh0 IF0KKyAgICAgICAgICBUaGlzIGNvbW1hbmQgaXMgZXhhY3RseSBsaWtlIE9VVFBVVCwgZXhjZXB0 IGl0IHN1cHBsaWVzIGEKKyAgICAgICAgICBjYXJyaWFnZSByZXR1cm4gYXQgdGhlIGVuZCBvZiB0 aGUgdGV4dC4gImxpbmVvdXQgZXhpdCIgaXMKKyAgICAgICAgICBleGFjdGx5IHRoZSBzYW1lIGFz ICJvdXRwdXQgZXhpdFwxMyIuCisKKyAgIFNFVCBPVVRQVVQgU1BFQ0lBTC1FU0NBUEVTIHsgT04s IE9GRiB9CisgICAgICAgICAgVGhpcyBjb21tYW5kIGxldHMgeW91IHRlbGwgQy1LZXJtaXQgd2hl dGhlciB0byBwcm9jZXNzIFxOLCBcTCwKKyAgICAgICAgICBhbmQgXEIgc3BlY2lhbGx5IGluIGFu IE9VVFBVVCBjb21tYW5kLCBhcyBkaXN0aW5jdCBmcm9tIG90aGVyIFwKKyAgICAgICAgICBzZXF1 ZW5jZXMgKHN1Y2ggYXMgXCVhLCBcMTMsIFx2KHRpbWUpLCBldGMpLiBOb3JtYWxseSB0aGUKKyAg ICAgICAgICBzcGVjaWFsIGVzY2FwZXMgYXJlIGhhbmRsZWQuIFVzZSBTRVQgT1VUUFVUIFNQRUNJ QUwtRVNDQVBFUyBPRkYKKyAgICAgICAgICB0byBkaXNhYmxlIHRoZW0uCisKKyAgIERpc2FibGlu ZyBzcGVjaWFsIGVzY2FwZXMgaXMgbmVjZXNzYXJ5IGluIHNpdHVhdGlvbnMgd2hlbiB5b3UgbmVl ZCB0bworICAgdHJhbnNtaXQgbGluZXMgb2YgZGF0YSBhbmQgeW91IGhhdmUgbm8gY29udHJvbCBv dmVyIHdoYXQgaXMgaW4gdGhlCisgICBsaW5lcy4gRm9yIGV4YW1wbGUsIGEgZmlsZSBvb2ZhLnR4 dCB0aGF0IGNvbnRhaW5zOgorCisgIFRoaXMgaXMgYSBmaWxlCisgIEl0IGhhcyBcJWEgdmFyaWFi bGVzIGluIGl0CisgIEFuZCBpdCBoYXMgXEIgaW4gaXQuCisgIEFuZCBpdCBoYXMgXEwgaW4gaXQu CisgIEFuZCBpdCBoYXMgXE4gaW4gaXQuCisgIEFuZCB0aGlzIGlzIHRoZSBsYXN0IGxpbmUuCisK KyAgIGNhbiBiZSBzZW50IGxpa2UgdGhpczoKKworICBsb2NhbCBsaW5lCisgIHNldCBvdXRwdXQg c3BlY2lhbC1lc2NhcGVzIG9mZgorICBmb3BlbiAvcmVhZCBcJWMgb29mYS50eHQKKyAgaWYgZmFp bCBzdG9wIDEgQ2FuJ3Qgb3BlbiBvb2ZhLnR4dAorICB3aGlsZSBzdWNjZXNzIHsKKyAgICAgIGZy ZWFkIFwlYyBsaW5lCisgICAgICBpZiBmYWlsIGJyZWFrCisgICAgICA7IEFkZCBmaWx0ZXJpbmcg b3IgcHJvY2Vzc2luZyBjb21tYW5kcyBoZXJlLi4uCisgICAgICBvdXRwdXQgXG0obGluZSlcMTMK KyAgfQorCisgIDcuMTIuIEZ1bmN0aW9uIGFuZCBWYXJpYWJsZSBEaWFnbm9zdGljcworCisgICBJ biBDLUtlcm1pdCA2LjAgYW5kIGVhcmxpZXIsIHRoZSBvbmx5IGRpYWdub3N0aWMgcmV0dXJuZWQg YnkgYSBmYWlsaW5nCisgICBmdW5jdGlvbiBjYWxsIHdhcyBhbiBlbXB0eSB2YWx1ZSwgd2hpY2gg KGEpIGNvdWxkIG5vdCBiZSBkaXN0aW5ndWlzaGVkCisgICBmcm9tIGFuIGVtcHR5IHZhbHVlIHJl dHVybmVkIGJ5IGEgc3VjY2Vzc2Z1bCBmdW5jdGlvbiBjYWxsOyAoYikgZGlkIG5vdAorICAgZ2l2 ZSBhbnkgaW5kaWNhdGlvbiBvZiB0aGUgY2F1c2Ugb2YgZmFpbHVyZTsgYW5kIChjKSBkaWQgbm90 IGNhdXNlIHRoZQorICAgZW5jbG9zaW5nIHN0YXRlbWVudCB0byBmYWlsLiBDLUtlcm1pdCA3LjAg Y29ycmVjdHMgdGhlc2UgZGVmaWNpZW5jaWVzLgorCisgICBTRVQgRlVOQ1RJT04gRElBR05PU1RJ Q1MgeyBPTiwgT0ZGIH0KKyAgICAgICAgICB3aGVuIE9OLCBhbGxvd3MgYnVpbHQtaW4gZnVuY3Rp b25zIHRvIHJldHVybiBkaWFnbm9zdGljIG1lc3NhZ2VzCisgICAgICAgICAgd2hlbiBpbXByb3Bl cmx5IHJlZmVyZW5jZWQsIGluc3RlYWQgb2YgYW4gZW1wdHkgc3RyaW5nLiBGVU5DVElPTgorICAg ICAgICAgIERJQUdOT1NUSUNTIGFyZSBPTiBieSBkZWZhdWx0LiBXaGVuIE9GRiwgaW1wcm9wZXJs eSByZWZlcmVuY2VkCisgICAgICAgICAgZnVuY3Rpb25zIGNvbnRpbnVlIHRvIHJldHVybiBhbiBl bXB0eSBzdHJpbmcuIFRoaXMgY29tbWFuZCBhbHNvCisgICAgICAgICAgYWZmZWN0cyBidWlsdC1p biB2YXJpYWJsZXM7IGluIHRoaXMgY2FzZSwgYW4gZXJyb3IgbWVzc2FnZSBpcworICAgICAgICAg IHJldHVybmVkIG9ubHkgaWYgdGhlIHZhcmlhYmxlIGRvZXMgbm90IGV4aXN0LiBXaGVuIEZVTkNU SU9OCisgICAgICAgICAgRElBR05PU1RJQ1MgYXJlIE9OLCB0aGUgZXJyb3IgbWVzc2FnZSBpcyBh bHNvIHByaW50ZWQuCisKKyAgIEZvciB2YXJpYWJsZXMsIHRoZSBvbmx5IG1lc3NhZ2UgaXM6CisK KyAgPEVSUk9SOk5PX1NVQ0hfVkFSSUFCTEU6XHYobmFtZSk+CisKKyAgIHdoZXJlICJuYW1lIiBp cyB0aGUgbmFtZSBvZiB0aGUgbm9uZXhpc3RlbnQgdmFyaWFibGUuCisKKyAgIEZvciBmdW5jdGlv bnMsIHRoZSBkaWFnbm9zdGljIG1lc3NhZ2UgaXM6CisKKyAgPEVSUk9SOm1lc3NhZ2U6XGZuYW1l KCk+CisKKyAgIHdoZXJlICJtZXNzYWdlIiBpcyByZXBsYWNlZCBieSBhIG1lc3NhZ2UsIGFuZCAi bmFtZSIgaXMgcmVwbGFjZWQgYnkgdGhlCisgICBmdW5jdGlvbiBuYW1lLCBlLmcuIDxFUlJPUjpB UkdfTk9UX05VTUVSSUM6XGZtb2QoKT4uIE1lc3NhZ2VzIGluY2x1ZGU6CisKKyAgQVJHX0JBRF9B UlJBWSAgICAgICBBbiBhcmd1bWVudCBjb250YWlucyBhIG1hbGZvcm1lZCBhcnJheSByZWZlcmVu Y2UuCisgIEFSR19CQURfREFURSAgICAgICAgQW4gYXJndW1lbnQgY29udGFpbnMgYSBtYWxmb3Jt ZWQgZGF0ZSBhbmQvb3IgdGltZS4KKyAgQVJHX0JBRF9QSE9ORU5VTSAgICBBbiBhcmd1bWVudCBj b250YWlucyBhIG1hbGZvcm1lZCB0ZWxlcGhvbmUgbnVtYmVyLgorICBBUkdfQkFEX1ZBUklBQkxF ICAgIEFuIGFyZ3VtZW50IGNvbnRhaW5zIGEgbWFsZm9ybWVkIFwleCB2YXJpYWJsZS4KKyAgQVJH X0lOQ09NUExFVEUgICAgICBBbiBhcmd1bWVudCBpcyBpbmNvbXBsZXRlIChlLmcuIGEgYnJva2Vu IEJhc2U2NCBzdHJpbmcpLgorICBBUkdfRVZBTF9GQUlMVVJFICAgIEFuIGFyZ3VtZW50IGNvdWxk IG5vdCBiZSBldmFsdWF0ZWQgKGludGVybmFsIGVycm9yKS4KKyAgQVJHX05PVF9BUlJBWSAgICAg ICBBbiBhcmd1bWVudCByZWZlcmVuY2VzIGFuIGFycmF5IHRoYXQgaXMgbm90IGRlY2xhcmVkLgor ICBBUkdfTk9UX05VTUVSSUMgICAgIEFuIGFyZ3VtZW50IHRoYXQgbXVzdCBiZSBpbnRlZ2VyIGNv bnRhaW5zIG5vbi1kaWdpdHMuCisgIEFSR19OT1RfRkxPQVQgICAgICAgQW4gYXJndW1lbnQgaGFz IGJhZCBmbG9hdGluZy1wb2ludCBudW1iZXIgZm9ybWF0LgorICBBUkdfTk9UX1ZBUklBQkxFICAg IEFuIGFyZ3VtZW50IHRoYXQgbXVzdCBiZSBhIHZhcmlhYmxlIGlzIG5vdCBhIHZhcmlhYmxlLgor ICBBUkdfT1VUX09GX1JBTkdFICAgIEFuIGFyZ3VtZW50J3MgbnVtZXJpYyB2YWx1ZSBpcyB0b28g YmlnIG9yIHRvbyBzbWFsbCwKKyAgICAgICAgICAgICAgICAgICAgICBvciBhbiBhcmd1bWVudCBj b250YWlucyBpbGxlZ2FsIGNoYXJhY3RlcnMgKGUuZy4gYSBoZXgKKyAgICAgICAgICAgICAgICAg ICAgICBvciBCYXNlLTY0IHN0cmluZykuCisgIEFSR19UT09fTE9ORyAgICAgICAgQW4gYXJndW1l bnQncyB2YWx1ZSBpcyB0b28gbG9uZy4KKyAgQVJSQVlfRkFJTFVSRSAgICAgICBGYWlsdXJlIHRv IGNyZWF0ZSBhbiBhcnJheS4KKyAgRElWSURFX0JZX1pFUk8gICAgICBFeGVjdXRpb24gb2YgdGhl IGZ1bmN0aW9uIHdvdWxkIGNhdXNlIGRpdmlzaW9uIGJ5IHplcm8uCisgIEZMT0FUSU5HX1BPSU5U X09QICAgRXhlY3V0aW9uIGVycm9yIGluIGEgZmxvYXRpbmctcG9pbnQgb3BlcmF0aW9uLgorICBG SUxFX05PVF9GT1VORCAgICAgIEZpbGVuYW1lIGFyZ3VtZW50IG5hbWVzIGEgZmlsZSB0aGF0IGNh bid0IGJlIGZvdW5kLgorICBGSUxFX05PVF9SRUFEQUJMRSAgIEZpbGVuYW1lIGFyZ3VtZW50IGlz IG5vdCBhIHJlZ3VsYXIgZmlsZS4KKyAgRklMRV9OT1RfQUNDRVNTSUJMRSBGaWxlbmFtZSBhcmd1 bWVudCBuYW1lcyBhIGZpbGUgdGhhdCBpcyByZWFkLXByb3RlY3RlZC4KKyAgRklMRV9FUlJPUiAg ICAgICAgICBPdGhlciBlcnJvciB3aXRoIGZpbGVuYW1lIGFyZ3VtZW50LgorICBGSUxFX05PVF9P UEVOICAgICAgIEEgZmlsZSBmdW5jdGlvbiB3YXMgZ2l2ZW4gYSBjaGFubmVsIHRoYXQgaXMgbm90 IG9wZW4uCisgIEZJTEVfRVJST1JfLW4gICAgICAgQSBmaWxlIGZ1bmN0aW9uIGdvdCBlcnJvciAt biAoWzYyMV1TZWN0aW9uIDEuMjIpLgorICBMT09LVVBfRkFJTFVSRSAgICAgIEVycm9yIGxvb2tp bmcgdXAgZnVuY3Rpb24gKHNob3VsZG4ndCBoYXBwZW4pLgorICBNQUxMT0NfRkFJTFVSRSAgICAg IEZhaWx1cmUgdG8gYWxsb2NhdGUgbmVlZGVkIG1lbW9yeSAoc2hvdWxkbid0IGhhcHBlbikuCisg IE5BTUVfQU1CSUdVT1VTICAgICAgVGhlIGZ1bmN0aW9uIGlzIG5vdCB1bmlxdWVseSBpZGVudGlm aWVkLgorICBNSVNTSU5HX0FSRyAgICAgICAgIEEgcmVxdWlyZWQgYXJndW1lbnQgaXMgbWlzc2lu Zy4KKyAgTk9fU1VDSF9GVU5DVElPTiAgICBBbiBhcmd1bWVudCByZWZlcmVuY2VzIGEgZnVuY3Rp b24gdGhhdCBpcyBub3QgZGVmaW5lZC4KKyAgTk9fU1VDSF9NQUNSTyAgICAgICBBbiBhcmd1bWVu dCByZWZlcmVuY2VzIGEgbWFjcm8gdGhhdCBpcyBub3QgZGVmaW5lZC4KKyAgUkVTVUxUX1RPT19M T05HICAgICBUaGUgcmVzdWx0IG9mIGEgZnVuY3Rpb24gaXMgdG9vIGxvbmcuCisgIFVOS05PV05f RlVOQ1RJT04gICAgSW50ZXJuYWwgZXJyb3IgbG9jYXRpbmcgZnVuY3Rpb24gKHNob3VsZG4ndCBo YXBwZW4pLgorCisgICBFeGFtcGxlczoKKworICBhc3NpZ24gXCVtIFxmbW9kKCkKKyAgPzxFUlJP UjpNSVNTSU5HX0FSRzpcZm1vZCgpPgorICBlY2hvICJcZmNvbnRlbnRzKFwlbSkiCisgICI8RVJS T1I6TUlTU0lOR19BUkc6XGZtb2QoKT4iCisgIGVjaG8gXGZtb2QoMyx4KQorICA/PEVSUk9SOkFS R19OT1RfTlVNRVJJQzpcZm1vZCgpPgorICBlY2hvIFxmbW9kKDMsNC0yKjIpCisgID88RVJST1I6 RElWSURFX0JZX1pFUk86XGZtb2QoKT4KKworICAgTm90aWNlIHRoZSB1c2Ugb2YgXGZjb250ZW50 cygpIGluIGVjaG9pbmcgdGhlIHZhbHVlIG9mIGEgdmFyaWFibGUgdGhhdAorICAgY29udGFpbnMg YSByZXR1cm5lZCBlcnJvciBtZXNzYWdlLiBUaGF0J3MgYmVjYXVzZSB0aGUgZXJyb3IgbWVzc2Fn ZQorICAgaW5jbHVkZXMgdGhlIG5hbWUgb2YgdGhlIHZhcmlhYmxlIG9yIGZ1bmN0aW9uIHRoYXQg ZmFpbGVkLCBzbyB5b3UgbXVzdAorICAgdXNlIFxmY29udGVudHMoKSB0byBwcmV2ZW50IGl0IGZy b20gYmVpbmcgZXZhbHVhdGVkIGFnYWluIC0tIG90aGVyd2lzZQorICAgdGhlIHNhbWUgZXJyb3Ig d2lsbCBvY2N1ci4KKworICAgVGhlIGhhbmRsaW5nIG9mIGZ1bmN0aW9uIGFuZCB2YXJpYWJsZSBl cnJvcnMgaXMgY29udHJvbGxlZCBieToKKworICAgU0VUIEZVTkNUSU9OIEVSUk9SIHsgT04sIE9G RiB9CisgICAgICAgICAgVGVsbHMgd2hldGhlciBpbnZhbGlkIGZ1bmN0aW9uIGNhbGxzIG9yIHZh cmlhYmxlIHJlZmVyZW5jZXMKKyAgICAgICAgICBzaG91bGQgY2F1c2UgY29tbWFuZCBlcnJvcnMu IEZVTkNUSU9OIEVSUk9SIGlzIE9OIGJ5IGRlZmF1bHQuCisgICAgICAgICAgV2hlbiBPTiwgYW5k IGFuIGVycm9yIGlzIGRpYWdub3NlZCBpbiBhIGJ1aWx0LWluIGZ1bmN0aW9uIG9yCisgICAgICAg ICAgdmFyaWFibGUsIHRoZSBjb21tYW5kIHRoYXQgaW5jbHVkZXMgdGhlIGZ1bmN0aW9uIGNhbGwg b3IKKyAgICAgICAgICB2YXJpYWJsZSByZWZlcmVuY2UgZmFpbHMuIFRoZSBmYWlsaW5nIGNvbW1h bmQgY2FuIGJlIGhhbmRsZWQgaW4KKyAgICAgICAgICB0aGUgbm9ybWFsIHdheSB3aXRoIElGIEZB SUxVUkUgLyBJRiBTVUNDRVNTLCBTRVQgVEFLRSBFUlJPUiwgb3IKKyAgICAgICAgICBTRVQgTUFD Uk8gRVJST1IuCisKKyAgIFdoZW4gRlVOQ1RJT04gRElBR05PU1RJQ1MgaXMgT0ZGLCB0aGVyZSBp cyBubyBlcnJvciBtZXNzYWdlLgorCisgICBTSE9XIFNDUklQVFMgZGlzcGxheXMgdGhlIGN1cnJl bnQgRlVOQ1RJT04gRElBR05PU1RJQ1MgYW5kIEVSUk9SCisgICBzZXR0aW5ncy4KKworICA3LjEz LiBSZXR1cm4gVmFsdWUgb2YgTWFjcm9zCisKKyAgIEluIEMtS2VybWl0IDVBIGFuZCA2LjAsIHRo ZXJlIGFyZSB0d28gd2F5cyB0byByZXR1cm4gb25lIGxldmVsIGZyb20gYQorICAgbWFjcm86IFJF VFVSTiB2YWx1ZSBhbmQgRU5EIG51bWJlciB0ZXh0LiBXaGVuIFJFVFVSTiBpcyB1c2VkLCB0aGUK KyAgIHZhbHVlLCB3aGljaCBjYW4gYmUgYSBudW1iZXIgb3IgYSB0ZXh0IHN0cmluZywgaXMgYXNz aWduZWQgdG8KKyAgIFx2KHJldHVybikuIFdoZW4gRU5EIHdhcyB1c2VkLCBob3dldmVyLCBcdihy ZXR1cm4pIHdhcyBub3Qgc2V0LgorICAgU1VDQ0VTUy9GQUlMVVJFIHdhcyBzZXQgYWNjb3JkaW5n IHRvIHdoZXRoZXIgdGhlIG51bWJlciB3YXMgemVybywgYW5kCisgICB0aGUgdGV4dCB3YXMgcHJp bnRlZCwgYnV0IHRoZSBhY3R1YWwgdmFsdWUgb2YgdGhlIG51bWJlciB3YXMgbG9zdC4KKworICAg SW4gQy1LZXJtaXQgNy4wLCB0aGUgRU5EIG51bWJlciBpcyBhdmFpbGFibGUgaW4gdGhlIFx2KHJl dHVybikKKyAgIHZhcmlhYmxlLgorCisgIDcuMTQuIFRoZSBBU1NFUlQsIEZBSUwsIGFuZCBTVUND RUVEIENvbW1hbmRzLgorCisgICBUaGUgQVNTRVJUIGNvbW1hbmQgaXMganVzdCBsaWtlIHRoZSBJ RiBjb21tYW5kLCBidXQgd2l0aG91dCBhIGNvbW1hbmQKKyAgIHRvIGV4ZWN1dGUuIEl0IHNpbXBs eSBzdWNjZWVkcyBvciBmYWlscywgYW5kIHRoaXMgY2FuIGJlIHRlc3RlZCBieSBhCisgICBzdWJz ZXF1ZW50IElGIFNVQ0NFU1Mgb3IgSUYgRkFJTFVSRSBjb21tYW5kLiBFeGFtcGxlOgorCisgIEFT U0VSVCA9IDEgMQorICBJRiBTVUNDRVNTIGVjaG8gMSA9IDEuCisKKyAgIFRoZSBGQUlMIGNvbW1h bmQgZG9lcyBub3RoaW5nLCBidXQgYWx3YXlzIGZhaWxzLiBUaGUgU1VDQ0VFRCBjb21tYW5kCisg ICBkb2VzIG5vdGhpbmcsIGJ1dCBhbHdheXMgc3VjY2VlZHMuCisKKyAgIFRoZXNlIGNvbW1hbmRz IGFyZSBoYW5keSBpbiBkZWJ1Z2dpbmcgc2NyaXB0cyB3aGVuIHlvdSB3YW50IHRvIGluZHVjZSBh CisgICBmYWlsdXJlIChvciBzdWNjZXNzKSB0aGF0IG5vcm1hbGx5IHdvdWxkIG5vdCBvY2N1ciwg ZS5nLiBmb3IgdGVzdGluZworICAgYmxvY2tzIG9mIGNvZGUgdGhhdCBub3JtYWxseSBhcmUgbm90 IGV4ZWN1dGVkLgorCisgIDcuMTUuIFVzaW5nIEFsYXJtcworCisgICBBbGFybXMgbWF5IGJlIHNl dCBpbiB0d28gd2F5czoKKworICAgU0VUIEFMQVJNIG51bWJlcgorICAgICAgICAgIFNldHMgYW4g YWxhcm0gZm9yIHRoZSBnaXZlbiBudW1iZXIgb2Ygc2Vjb25kcyAiZnJvbSBub3ciLCBpLmUuCisg ICAgICAgICAgaW4gdGhlIGZ1dHVyZSwgcmVsYXRpdmUgdG8gd2hlbiB0aGUgU0VUIEFMQVJNIGNv bW1hbmQgd2FzIGdpdmVuLgorICAgICAgICAgIEV4YW1wbGVzOgorCisgIHNldCBhbGFybSA2MCAg ICAgICAgOyA2MCBzZWNvbmRzIGZyb20gbm93CisgIHNldCBhbGFybSArNjAgICAgICAgOyBUaGUg c2FtZSBhcyAiNjAiCisgIHNldCBhbGFybSAtNjAgICAgICAgOyBOb3QgbGVnYWwgLSB5b3UgY2Fu J3Qgc2V0IGFuIGFsYXJtIGluIHRoZSBwYXN0LgorICBzZXQgYWxhcm0gNjAqNjAgICAgIDsgNjAg bWludXRlcyBmcm9tIG5vdy4KKyAgc2V0IGFsYXJtIFwlYSsxMCAgICA7IFlvdSBjYW4gdXNlIHZh cmlhYmxlcywgZXRjLgorCisgICBTRVQgQUxBUk0gaGg6bW06c3MKKyAgICAgICAgICBTZXRzIGFu IGFsYXJtIGZvciB0aGUgc3BlY2lmaWVkIHRpbWUuIElmIHRoZSBnaXZlbiB0aW1lIGlzCisgICAg ICAgICAgZWFybGllciB0aGFuIHRoZSBjdXJyZW50IHRpbWUsIHRoZSBhbGFybSBpcyBzZXQgZm9y IHRoZSBnaXZlbgorICAgICAgICAgIHRpbWUgaW4gdGhlIG5leHQgZGF5LiBZb3UgbWF5IGdpdmUg dGhlIHRpbWUgaW4gdmFyaW91cyBmb3JtYXRzOgorCisgIHNldCBhbGFybSAxNTowMDowMCAgOyAz OjAwOjAwcG0KKyAgc2V0IGFsYXJtIDM6MDA6MDBwbSA7IDM6MDA6MDBwbQorICBzZXQgYWxhcm0g MzowMHBtICAgIDsgMzowMDowMHBtCisgIHNldCBhbGFybSAzcG0gICAgICAgOyAzOjAwOjAwcG0K KworICAgU0hPVyBBTEFSTQorICAgICAgICAgIERpc3BsYXlzIHRoZSBjdXJyZW50IGFsYXJtLCBp ZiBhbnksIGluIHN0YW5kYXJkIGRhdGUtdGltZSBmb3JtYXQKKyAgICAgICAgICAoc2VlIFs2MjJd U2VjdGlvbiAxLjYpOiB5eXl5bW1kZCBoaDptbTpzcy4KKworICAgSUYgQUxBUk0gY29tbWFuZAor ICAgICAgICAgIEV4ZWN1dGVzIHRoZSBjb21tYW5kIGlmIGFuIGFsYXJtIGhhcyBiZWVuIHNldCBh bmQgdGhlIGFsYXJtIHRpbWUKKyAgICAgICAgICBoYXMgcGFzc2VkLgorCisgICBJRiBBTEFSTSB7 IGNvbW1hbmQtbGlzdCB9IFsgRUxTRSB7IGNvbW1hbmQtbGlzdCB9IF0KKyAgICAgICAgICBFeGVj dXRlcyB0aGUgY29tbWFuZC1saXN0IGlmIGFuIGFsYXJtIGhhcyBiZWVuIHNldCBhbmQgdGhlIGFs YXJtCisgICAgICAgICAgdGltZSBoYXMgcGFzc2VkLiBPdGhlcndpc2UsIGlmIGFuIEVMU0UgcGFy dCBpcyBnaXZlbiwgaXRzCisgICAgICAgICAgY29tbWFuZC1saXN0IGlzIGV4ZWN1dGVkLgorCisg ICBDTEVBUiBBTEFSTQorICAgICAgICAgIENsZWFycyB0aGUgYWxhcm0uCisKKyAgIE9ubHkgb25l IGFsYXJtIG1heSBiZSBzZXQgYXQgYSB0aW1lLgorCisgICBFeGFtcGxlOiBTdXBwb3NlIHlvdSBo YXZlIGEgc2NyaXB0IHRoYXQgaXMgYWx3YXlzIHJ1bm5pbmcsIGFuZCB0aGF0CisgICB0cmFuc2Zl cnMgZmlsZXMgcGVyaW9kaWNhbGx5LCBhbmQgdGhhdCBrZWVwcyBhIHRyYW5zYWN0aW9uIGxvZy4g U3VwcG9zZQorICAgeW91IHdhbnQgdG8gc3RhcnQgYSBuZXcgdHJhbnNhY3Rpb24gbG9nIGVhY2gg ZGF5OgorCisgIGxvZyB0cmFuc2FjdGlvbnMgXHYoZGF0ZSkubG9nCisgIHNldCBhbGFybSAwMDow MDowMCAgICAgICAgICAgICAgICAgICAgIDsgU2V0IGFuIGFsYXJtIGZvciBtaWRuaWdodAorICB3 aGlsZSB0cnVlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICA7IE1haW4gc2NyaXB0IGxvb3AK KyAgICAgIHhpZiBhbGFybSB7ICAgICAgICAgICAgICAgICAgICAgICAgOyBJZiB0aGUgYWxhcm0g dGltZSBpcyBwYXN0Li4uCisgICAgICAgICAgY2xvc2UgdHJhbnNhY3Rpb25zICAgICAgICAgICAg IDsgQ2xvc2UgY3VycmVudCBsb2cKKyAgICAgICAgICBsb2cgdHJhbnNhY3Rpb25zIFx2KGRhdGUp LmxvZyAgOyBTdGFydCBuZXcgb25lCisgICAgICAgICAgcGF1c2UgMSAgICAgICAgICAgICAgICAg ICAgICAgIDsgVG8gbWFrZSBzdXJlIDAwOjAwOjAwIGlzIHBhc3QKKyAgICAgICAgICBzZXQgYWxh cm0gMDA6MDA6MDAgICAgICAgICAgICAgOyBTZXQgYSBuZXcgYWxhcm0KKyAgICAgIH0KKyAgICAg IDsgcHV0IHRoZSByZXN0IG9mIHRoZSBzY3JpcHQgaGVyZS4uLgorICB9CisKKyAgIE5vdGUgdGhh dCBJRiBBTEFSTSAtLSBubyBtYXR0ZXIgd2hldGhlciBpdCBzdWNjZWVkcyBvciBmYWlscyAtLSBk b2VzCisgICBOT1QgY2xlYXIgYW4gZXhwaXJlZCBhbGFybS4gVGh1cywgb25jZSBhbiBhbGFybSBo YXMgZXhwaXJlZCwgZXZlcnkgSUYKKyAgIEFMQVJNIHdpbGwgc3VjY2VlZCB1bnRpbCB0aGUgYWxh cm0gaXMgY2xlYXJlZCAod2l0aCB0aGUgQ0xFQVIgQUxBUk0KKyAgIGNvbW1hbmQpIG9yIHJlc2V0 IHdpdGggYSBuZXcgU0VUIEFMQVJNIGNvbW1hbmQuCisKKyAgNy4xNi4gUGFzc2luZyBBcmd1bWVu dHMgdG8gQ29tbWFuZCBGaWxlcworCisgICBCZWdpbm5pbmcgaW4gdmVyc2lvbiA3LjAsIEMtS2Vy bWl0IGFjY2VwdHMgYXJndW1lbnRzIG9uIHRoZSBUQUtFCisgICBjb21tYW5kIGxpbmUsIGZvciBl eGFtcGxlOgorCisgIEMtS2VybWl0PiB0YWtlIG9vZmEua3NjIG9uZSB0d28ge3RoaXMgaXMgdGhy ZWV9IGZvdXIKKworICAgVGhpcyBhdXRvbWF0aWNhbGx5IHNldHMgdGhlIHZhcmlhYmxlcyBcJTEg dGhyb3VnaCBcJTkgdG8gdGhlIGFyZ3VtZW50cywKKyAgIGFuZCBcJTAgdG8gdGhlIG5hbWUgb2Yg dGhlIGZpbGUsIGluIHRoaXMgY2FzZToKKworICBcJTAgPSAvdXNyL29sZ2Evb29mYS5rc2MKKyAg XCUxID0gb25lCisgIFwlMiA9IHR3bworICBcJTMgPSB0aGlzIGlzIHRocmVlCisgIFwlNCA9IGZv dXIKKworICAgYW5kIFwlNS4uXCU5IGFyZSB1bmRlZmluZWQgKGVtcHR5KS4gQXJndW1lbnRzIHBh c3QgdGhlIG5pbnRoIGFyZQorICAgYXZhaWxhYmxlIGluIHRoZSBcJl9bXSBhcmd1bWVudC12ZWN0 b3IgYXJyYXkgKCBbNjIzXVNlY3Rpb24gNy41KS4KKworICAgVGhlIHZhcmlhYmxlcyBhcmUgdGhv c2UgYXQgdGhlIGN1cnJlbnQgbWFjcm8gbGV2ZWwuIFRodXMsIGlmIHRoZSBUQUtFCisgICBjb21t YW5kIGlzIGV4ZWN1dGVkIGZyb20gd2l0aGluIGEgbWFjcm8sIHRoZSBtYWNybydzIGFyZ3VtZW50 cyBhcmUKKyAgIHJlcGxhY2VkIGJ5IHRob3NlIGdpdmVuIG9uIHRoZSBUQUtFIGNvbW1hbmQgbGlu ZSAoYnV0IG9ubHkgaWYgYXQgbGVhc3QKKyAgIG9uZSBhcmd1bWVudCBpcyBnaXZlbikuIFRoZSBj b21tYW5kIHNob3duIGFib3ZlIGlzIGV4YWN0bHkgZXF1aXZhbGVudAorICAgdG86CisKKyAgYXNz aWduIFwlMCAvdXNyL29sZ2Evb29mYS5rc2MKKyAgYXNzaWduIFwlMSBvbmUKKyAgYXNzaWduIFwl MiB0d28KKyAgYXNzaWduIFwlMyB0aGlzIGlzIHRocmVlCisgIGFzc2lnbiBcJTQgZm91cgorICBh c3NpZ24gXCU1CisgIGFzc2lnbiBcJTYKKyAgYXNzaWduIFwlNworICBhc3NpZ24gXCU4CisgIGFz c2lnbiBcJTkKKyAgdGFrZSBvb2ZhLmtzYworCisgICBSZW1lbWJlciwgdGhlIHZhcmlhYmxlcyBc JTAuLlwlOSBhcmUgb24gdGhlIG1hY3JvIGNhbGwgc3RhY2ssIGFuZAorICAgY29tbWFuZCBmaWxl cyBhcmUgaW5kZXBlbmRlbnQgb2YgdGhlIG1hY3JvIHN0YWNrLiBUaHVzLCBpZiBhIGNvbW1hbmQK KyAgIGZpbGUgVEFLRXMgYW5vdGhlciBjb21tYW5kIGZpbGUgYW5kIHBhc3NlcyBhcmd1bWVudHMg dG8gaXQsIHRoZQorICAgdmFyaWFibGVzIGFyZSBjaGFuZ2VkIGZyb20gdGhhdCBwb2ludCBvbiBm b3IgYm90aCBmaWxlcywgYW5kIHNvIGZvcnRoCisgICBmb3IgYWxsIGxldmVscyBvZiBuZXN0ZWQg Y29tbWFuZCBmaWxlcyB3aXRob3V0IGludGVydmVuaW5nIG1hY3JvCisgICBpbnZvY2F0aW9ucy4K KworICAgSXQgd291bGQgaGF2ZSBiZWVuIHBvc3NpYmxlIHRvIGNoYW5nZSBDLUtlcm1pdCB0byB1 c2UgdGhlIG92ZXJhbGwKKyAgIGNvbW1hbmQgc3RhY2ssIHJhdGhlciB0aGFuIHRoZSBtYWNybyBz dGFjaywgZm9yIGFyZ3VtZW50cyAtLSB0aGlzIHdvdWxkCisgICBoYXZlIG1hZGUgVEFLRSB3b3Jr IGV4YWN0bHkgbGlrZSBETywgd2hpY2ggaXMgIm5pY2VyIiwgYnV0IGl0IHdvdWxkCisgICBhbHNv IGhhdmUgYnJva2VuIGNvdW50bGVzcyBleGlzdGluZyBzY3JpcHRzLiBIb3dldmVyLCB0aGUgbmV3 IFNISUZUCisgICBjb21tYW5kIChbNjI0XVNlY3Rpb24gNy41KSBtYWtlcyBpdCBwb3NzaWJsZSB0 byBjcmVhdGUgYW4gYWx0ZXJuYXRpdmUKKyAgIFRBS0UgY29tbWFuZCB0aGF0IGRvZXMgaW5kZWVk IHNhdmUgYW5kIHJlc3RvcmUgdGhlIGFyZ3VtZW50IHZhcmlhYmxlcworICAgYXQgaXRzIG93biBs ZXZlbCBhcm91bmQgZXhlY3V0aW9uIG9mIGEgY29tbWFuZCBmaWxlOgorCisgIGRlZmluZSBtdGFr ZSB7CisgICAgIGxvY2FsIFwlZgorICAgICBhc3NpZ24gXCVmIFxmY29udGVudHMoXCUxKQorICAg ICBzaGlmdAorICAgICB0YWtlIFwlZgorICB9CisKKyAgIEMtS2VybWl0IDcuMCBhbHNvIHN1cHBv cnRzIGEgbmV3LCBlYXNpZXIgd2F5IHRvIHBhc3MgYXJndW1lbnRzIHRvCisgICBzY3JpcHRzIGZy b20gdGhlIHN5c3RlbSBjb21tYW5kIGxpbmU6CisKKyAga2VybWl0IGZpbGVuYW1lIGFyZzEgYXJn MiBhcmczIC4uLgorCisgICBpbiB3aGljaCBhcmcxLCBhcmcyLCBhcmczIChldGMpIGFyZSBhcmd1 bWVudHMgZm9yIHRoZSBzY3JpcHQgKHdob3NlCisgICBmaWxlbmFtZSBpcyBnaXZlbiksIGFuZCBh cmUgYXNzaWduZWQgdG8gXCUxLCBcJTIsIC4uLiBcJTkuIFRoZSBmaWxlbmFtZQorICAgaXMgYXNz aWduZWQgdG8gXCUwLiBUaGlzIGFwcGxpZXMgZXF1YWxseSB0byAiS2VyYmFuZyIgc2NyaXB0cyBp biBVTklYCisgICAoWzYyNV1TZWN0aW9uIDcuMTkpLiBGb3IgZXhhbXBsZSwgc3VwcG9zZSB5b3Ug aGF2ZSBhIGZpbGUgY2FsbGVkCisgICAic2hvd2FyZ3MiIGNvbnRhaW5pbmcgdGhlIGZvbGxvd2lu ZyBsaW5lczoKKworICAjIS91c3IvbG9jYWwvYmluL2tlcm1pdCArCisgIGVjaG8gSGVsbG8gZnJv bSBcJTAKKyAgc2hvdyBhcmdzCisgIGV4aXQKKworICAgKGV4Y2VwdCBub3QgaW5kZW50ZWQsIHNp bmNlIHRoZSAiIyEiIGxpbmUgbXVzdCBiZSBvbiB0aGUgbGVmdCBtYXJnaW4pLgorICAgSWYgeW91 IGdpdmUgdGhpcyBmaWxlIGV4ZWN1dGUgcGVybWlzc2lvbjoKKworICBjaG1vZCAreCBzaG93YXJn cworCisgICB0aGVuIHlvdSBjYW4gcnVuIGl0IGV4YWN0bHkgYXMgeW91IHdvdWxkIHJ1biBhIFVO SVggc2hlbGwgc2NyaXB0LCBlLmcuOgorCisgICQgc2hvd2FyZ3Mgb25lIHR3byB0aHJlZQorICBI ZWxsbyBmcm9tIC91c3Ivb2xnYS9zaG93YXJncworICBUb3AtbGV2ZWwgYXJndW1lbnRzIChcdihh cmdjKSA9IDQpOgorICAgXCZfWzBdID0gL3Vzci9vbGdhL3Nob3dhcmdzCisgICBcJl9bMV0gPSBv bmUKKyAgIFwmX1syXSA9IHR3bworICAgXCZfWzNdID0gdGhyZWUKKworICAgRnVydGhlcm1vcmUs IHRoZSBcJl9bXSBhcnJheSBub3cgY29udGFpbnMgdGhlIGZpbGVuYW1lLCBpZiBvbmUgd2FzCisg ICBnaXZlbiBhcyB0aGUgZmlyc3QgY29tbWFuZCBsaW5lIGFyZ3VtZW50LCBvciBpdCBpcyBhICJL ZXJiYW5nIiBzY3JpcHQsCisgICBpbiBlbGVtZW50IDAuCisKKyAgIE90aGVyd2lzZSBlbGVtZW50 IDAgaXMgcHJvZ3JhbSBuYW1lLCBhbmQgZWxlbWVudHMgMSB0aHJvdWdoIFx2KGFyZ2MpLTEKKyAg IGNvbnRhaW4gdGhlIGNvbW1hbmQtbGluZSBhcmd1bWVudHMsIGlmIGFueSwgdGhhdCBhcHBlYXIg YWZ0ZXIgIi0tIiBvcgorICAgIj0iLCBpZiBhbnkuIFRoaXMgYXJyYXkgaXMgc2F2ZWQgYW5kIHJl c3RvcmVkIGFyb3VuZCBtYWNybyBjYWxsczsKKyAgIHJlY2FsbCB0aGF0IGluc2lkZSBtYWNyb3Mg aXQgY29udGFpbnMgdGhlIG1hY3JvIGFyZ3VtZW50IHZlY3RvcgorICAgKGFsbG93aW5nIHlvdSB0 byBhY2Nlc3MgYXJndW1lbnRzIHByb2dyYW1tYXRpY2FsbHksIGFuZCB0byBoYXZlIG1vcmUKKyAg IHRoYW4gOSBvZiB0aGVtKS4KKworICAgQXQgdG9wIGxldmVsLCBub3RpY2UgdGhlIGRpZmZlcmVu Y2UgYmV0d2VlbiB0aGUgXCZAW10gYW5kIFwmX1tdIGFycmF5cy4KKyAgIFRoZSBmb3JtZXIgaW5j bHVkZXMgQy1LZXJtaXQgb3B0aW9uczsgdGhlIGxhdHRlciBvbWl0cyB0aGVtLgorCisgIDcuMTcu IERpYWxvZ3Mgd2l0aCBUaW1lZCBSZXNwb25zZXMKKworICAgVGhlIEFTSywgQVNLUSwgR0VUT0ss IGFuZCBHRVRDIGNvbW1hbmRzIChsZXQncyBjYWxsIHRoZW0gdGhlICJBU0stY2xhc3MKKyAgIGNv bW1hbmRzIikgbGV0IHlvdSB3cml0ZSBzY3JpcHRzIHRoYXQgY2Fycnkgb24gZGlhbG9ncyB3aXRo IHRoZSB1c2VyLAorICAgYXNraW5nIHRoZW0gZm9yIHRleHQsIGEgWWVzL05vIGFuc3dlciwgb3Ig YSBjaGFyYWN0ZXIsIHJlc3BlY3RpdmVseS4KKyAgIFByaW9yIHRvIEMtS2VybWl0IDcuMCwgdGhl c2UgcXVlc3Rpb25zIHdvdWxkIGFsd2F5cyB3YWl0IGZvcmV2ZXIgZm9yIGFuCisgICBhbnN3ZXIu IEluIEMtS2VybWl0IDcuMCwgeW91IG1heSBzcGVjaWZ5IGEgdGltZSBsaW1pdCBmb3IgdGhlbSB3 aXRoIHRoZQorICAgbmV3IGNvbW1hbmQ6CisKKyAgIFNFVCBBU0stVElNRVIgbnVtYmVyCisgICAg ICAgICAgU2V0cyBhIHRpbWUtbGltaXQgb24gQVNLLUNMQVNTIGNvbW1hbmRzIHRvIHRoZSBnaXZl biBudW1iZXIgb2YKKyAgICAgICAgICBzZWNvbmRzLiBJZiB0aGUgbnVtYmVyIGlzIDAgb3IgbGVz cywgdGhlcmUgaXMgbm8gdGltZSBsaW1pdCBhbmQKKyAgICAgICAgICB0aGVzZSBjb21tYW5kcyB3 YWl0IGZvcmV2ZXIgZm9yIGEgcmVzcG9uc2UuIEFueSB0aW1lciB0aGF0IGlzCisgICAgICAgICAg ZXN0YWJsaXNoZWQgYnkgdGhpcyBjb21tYW5kIHJlbWFpbnMgaW4gZWZmZWN0IGZvciBhbGwgZnV0 dXJlCisgICAgICAgICAgQVNLLWNsYXNzIGNvbW1hbmRzIHVudGlsIGFub3RoZXIgU0VUIEFTSy1U SU1FUiBjb21tYW5kIGlzIGdpdmVuCisgICAgICAgICAgKGUuZy4gd2l0aCBhIHZhbHVlIG9mIDAg dG8gZGlzYWJsZSBBU0sgdGltZW91dHMpLgorCisgICBJRiBBU0tUSU1FT1VUIGNvbW1hbmQKKyAg ICAgICAgICBBbiBBU0stY2xhc3MgY29tbWFuZCB0aGF0IHRpbWVzIG91dCByZXR1cm5zIGEgZmFp bHVyZSBzdGF0dXMuCisgICAgICAgICAgWW91IGNhbiB0ZXN0IGV4cGxpY2l0bHkgZm9yIGEgdGlt ZW91dCB3aXRoOgorCisgIDcuMTguIEluY3JlYXNlZCBGbGV4aWJpbGl0eSBvZiBTV0lUQ0ggQ2Fz ZSBMYWJlbHMKKworICAgUHJpb3IgdG8gQy1LZXJtaXQgNy4wIC8gSzk1IDEuMS4xOSwgdGhlIGNh c2UgbGFiZWxzIGluIFNXSVRDSAorICAgc3RhdGVtZW50cyB3ZXJlIHN0cmluZyBjb25zdGFudHMu CisKKyAgIE5vdyBjYXNlIGxhYmVscyBjYW4gYmUgdmFyaWFibGVzLCBmdW5jdGlvbiBjYWxscywg b3IgYW55IG1peHR1cmUgb2YKKyAgIHRoZXNlIHdpdGggZWFjaCBvdGhlciBhbmQvb3Igd2l0aCBy ZWd1bGFyIGNoYXJhY3RlcnMuCisKKyAgIEZ1cnRoZXJtb3JlLCBhZnRlciB0aGUgY2FzZSBsYWJl bCBpcyBldmFsdWF0ZWQsIGl0IGlzIHRyZWF0ZWQgbm90IGFzIGEKKyAgIHN0cmluZyBjb25zdGFu dCwgYnV0IGFzIGEgcGF0dGVybiBhZ2FpbnN0IHdoaWNoIHRoZSBTV0lUQ0ggdmFyaWFibGUgaXMK KyAgIG1hdGNoZWQgKFs2MjZdU2VjdGlvbiA0LjkuMSkuCisKKyAgIFRoaXMgaW50cm9kdWNlcyBh IHBvc3NpYmxlIGluY29tcGF0aWJpbGl0eSB3aXRoIHByZXZpb3VzIHJlbGVhc2VzLAorICAgc2lu Y2UgdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXJzIGluIGNhc2UgbGFiZWxzIGFyZSBubyBsb25nZXIg dGFrZW4KKyAgIGxpdGVyYWxseToKKworICBcICogPyBbIHsKKworICAgQW55IHNjcmlwdHMgdGhh dCBwcmV2aW91c2x5IGluY2x1ZGVkIGFueSBvZiB0aGVzZSBjaGFyYWN0ZXJzIGluIGNhc2UKKyAg IGxhYmVscyBtdXN0IG5vdyBxdW90ZSB0aGVtIHdpdGggYmFja3NsYXNoIChcKS4KKworICA3LjE5 LiAiS2VyYmFuZyIgU2NyaXB0cworCisgICBJbiBVTklYIG9ubHksIEtlcm1pdCBzY3JpcHRzIGNh biBiZSBzdG9yZWQgaW4gZmlsZXMgYW5kIHJ1biAiZGlyZWN0bHkiLAorICAgd2l0aG91dCBzdGFy dGluZyBLZXJtaXQgZmlyc3QgKGFzIG5vdGVkIG9uIHBhZ2UgNDY3IG9mIHRoZSBtYW51YWwpLAor ICAganVzdCBhcyBhIHNoZWxsIHNjcmlwdCBjYW4gYmUgInJ1biIgYXMgaWYgaXQgd2VyZSBhIHBy b2dyYW0uIFRoaXMKKyAgIHNlY3Rpb24gYW1wbGlmaWVzIG9uIHRoYXQgaWRlYSBhIGJpdCwgYW5k IHByZXNlbnRzIHNvbWUgbmV3IGFzcGVjdHMgb2YKKyAgIHZlcnNpb24gNy4wIHRoYXQgbWFrZSBp dCBlYXNpZXIgdG8gd3JpdGUgYW5kIHJ1biBLZXJtaXQgc2NyaXB0cworICAgZGlyZWN0bHkuCisK KyAgICAgTk9URTogT24gbm9uLVVOSVggcGxhdGZvcm1zLCBzdWNoIGFzIFZNUyBvciBXaW5kb3dz LCBLZXJiYW5nIHNjcmlwdHMKKyAgICAgY2FuIGJlIHJ1biBhcyAia2VybWl0ICsgc2NyaXB0Zmls ZW5hbWUgYXJnMSBhcmcyIGFyZzMgLi4uIi4gV2luZG93cworICAgICA5NS85OC9OVCBmaWxlIGFz c29jaWF0aW9ucyBkbyBub3QgYWxsb3cgZm9yIHRoZSBwYXNzaW5nIG9mCisgICAgIHBhcmFtZXRl cnMuIEluIFZNUywgaG93ZXZlciwgeW91IGNhbiBhY2hpZXZlIHRoZSBLZXJiYW5nIGVmZmVjdCBi eQorICAgICBkZWZpbmluZyBhIHN5bWJvbCwgYXMgaW4gdGhpcyBleGFtcGxlOgorCisgICQgYXV0 b3RlbG5ldCA6PT0gIiRTWVMkVE9PTFM6S0VSTUlULkVYRSArIEFVVE9URUxORVQuS1NDIgorCisg ICAgIGFuZCB0aGVuIHJ1bm5pbmcgdGhlIHNjcmlwdCBsaWtlIGFueSBvdGhlciBjb21tYW5kOgor CisgICQgYXV0b3RlbG5ldCB4eXpjb3JwLmNvbSBteXVzZXJpZAorCisgICAgIFNlZSBbNjI3XVNl Y3Rpb24gOS4zIGZvciBhbiBleHBsYW5hdGlvbiBvZiB0aGUgIisiIHN5bWJvbC4KKworICAgVU5J WCBzaGVsbCBzY3JpcHRzIGNhbiBzcGVjaWZ5IHdoaWNoIHNoZWxsIHNob3VsZCBydW4gdGhlbSBi eSBpbmNsdWRpbmcKKyAgIGEgInNoZWJhbmciIGxpbmUgYXQgdGhlIHRvcCwgZS5nLjoKKworICAj IS9iaW4vc2gKKworICAgKGJ1dCBub3QgaW5kZW50ZWQ7IHRoZSBzaGViYW5nIGxpbmUgbXVzdCBi ZSBvbiB0aGUgbGVmdCBtYXJnaW4pLiBUaGUKKyAgIHRlcm0gInNoZWJhbmciIGlzIGEgY29udHJh Y3Rpb24gb2YgInNoZWxsIiBhbmQgImJhbmciLiAiQmFuZyIgaXMgYQorICAgc2xhbmcgd29yZCBm b3IgdGhlIGV4Y2xhbWF0aW9uIG1hcmsgKCIhIik7ICJzaGViYW5nIiBpdHNlbGYgaXMgYW4KKyAg IEFtZXJpY2FuIHNsYW5nIHdvcmQgdXNlZCBpbiBpbiB0aGUgcGhyYXNlICJ0aGUgd2hvbGUgc2hl YmFuZyIuCisKKyAgIFdlIGNhbiBydW4gS2VybWl0IHNjcmlwdHMgZGlyZWN0bHkgdG9vLCBieSBp bmNsdWRpbmcgYSAic2hlYmFuZyIgbGluZQorICAgdGhhdCBuYW1lcyBLZXJtaXQgYXMgdGhlICJz aGVsbCI7IHRodXMgd2UgY2FsbCB0aGVzZSAiS2VyYmFuZyIgc2NyaXB0cy4KKyAgIFRoaXMgbWVj aGFuaXNtIGhhcyBiZWVuIGNvbnNpZGVyYWJseSBzaW1wbGlmaWVkIGluIEMtS2VybWl0IDcuMCB0 bworICAgZmFjaWxpdGF0ZSBDLUtlcm1pdCdzIHVzZSBhIHNjcmlwdGluZyB0b29sIGp1c3QgbGlr ZSBhbnkgb2YgdGhlIFVOSVgKKyAgIHNoZWxscyBvciBzY3JpcHRpbmcgbGFuZ3VhZ2VzLiBUaGUg cnVsZXMgYXJlIHRoZSBzYW1lIGFzIGZvciBzaGVsbAorICAgc2NyaXB0czoKKworICAgIDEuIFRo ZSBmaXJzdCBsaW5lIG9mIHRoZSBLZXJtaXQgc2NyaXB0IG11c3QgYmVnaW4gd2l0aCAiIyEiCisg ICAgICAgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgdGhlIGZ1bGwgcGF0aG5hbWUgb2YgdGhlIHBy b2dyYW0gdGhhdCB3aWxsCisgICAgICAgZXhlY3V0ZSB0aGUgc2NyaXB0IChpbiB0aGlzIGNhc2Us IEMtS2VybWl0IHJhdGhlciB0aGFuIGEgVU5JWAorICAgICAgIHNoZWxsKSwgZm9sbG93ZWQgYnkg YW55IEtlcm1pdCBjb21tYW5kLWxpbmUgb3B0aW9ucy4gVG8gc3VwcHJlc3MKKyAgICAgICBleGVj dXRpb24gb2YgdGhlIEMtS2VybWl0IGluaXRpYWxpemF0aW9uIGZpbGUgYW5kIHRvIG1ha2UgY29t bWFuZAorICAgICAgIGxpbmUgYXJndW1lbnRzIGF2YWlsYWJsZSB0byB0aGUgc2NyaXB0LCB0aGUg ZmluYWwgb3B0aW9uIHNob3VsZCBiZQorICAgICAgICIrIjoKKyAgIyEvdXNyL2xvY2FsL2Jpbi9r ZXJtaXQgKworCisgICAgICAgU29tZSB1c2VycyBoYXZlIHJlcG9ydGVkIHRoYXQgaW4gc29tZSBj aXJjdW1zdGFuY2VzIGEgc3BhY2UgbWlnaHQKKyAgICAgICBiZSBuZWNlc3NhcnkgYWZ0ZXIgdGhl IHBsdXMgc2lnbjsgdGhpcyBkZXBlbmRzIG9uIHlvdXIgc2hlbGwgLS0gaXQKKyAgICAgICBoYXMg bm90aGluZyB0byBkbyB3aXRoIEtlcm1pdC4gSW4gbW9zdCBjYXNlcywgbm8gc3BhY2UgaXMgbmVl ZGVkLgorICAgIDIuIFRoZSBmaWxlIG11c3QgaGF2ZSBleGVjdXRlIHBlcm1pc3Npb24gKGdyYW50 ZWQgdmlhICJjaG1vZCAreAorICAgICAgIGZpbGVuYW1lIikuCisKKyAgIFdoZW4gQy1LZXJtaXQg aXMgaW52b2tlZCBmcm9tIGEgS2VyYmFuZyBzY3JpcHQgKG9yIGZyb20gdGhlIHN5c3RlbQorICAg cHJvbXB0IHdpdGggYSAiKyIgY29tbWFuZC1saW5lIGFyZ3VtZW50LCB3aGljaCBhbW91bnRzIHRv IHRoZSBzYW1lCisgICB0aGluZyksIHRoZSBmb2xsb3dpbmcgc3BlY2lhbCBydWxlcyBhcHBseToK KworICAgIDEuIFRoZSBDLUtlcm1pdCBpbml0aWFsaXphdGlvbiBmaWxlIGlzIE5PVCBleGVjdXRl ZCBhdXRvbWF0aWNhbGx5LiBJZgorICAgICAgIHlvdSB3YW50IGl0IHRvIGJlIGV4ZWN1dGVkLCBp bmNsdWRlIGEgVEFLRSBjb21tYW5kIGZvciBpdCBpbiB0aGUKKyAgICAgICBzY3JpcHQsIGUuZy4g InRha2UgXHYoaG9tZSkua2VybXJjIi4gKEluIHByZXZpb3VzIHJlbGVhc2VzLCB0aGUKKyAgICAg ICBpbml0aWFsaXphdGlvbiBmaWxlIHdhcyBhbHdheXMgZXhlY3V0ZWQsIHdpdGggbm8gd2F5IHRv IHByZXZlbnQgaXQKKyAgICAgICBleGNlcHQgZm9yIHRoZSB1c2VyIHRvIGluY2x1ZGUgS2VybWl0 LXNwZWNpZmljIGNvbW1hbmQgbGluZSBvcHRpb25zCisgICAgICAgd2hpY2ggaGFkIG5vdGhpbmcg dG8gZG8gd2l0aCB0aGUgc2NyaXB0KS4gTWFueSBzY3JpcHRzIGhhdmUgbm8gbmVlZAorICAgICAg IGZvciB0aGUgc3RhbmRhcmQgS2VybWl0IGluaXRpYWxpemF0aW9uIGZpbGUsIHdoaWNoIGlzIHF1 aXRlIGxlbmd0aHkKKyAgICAgICBhbmQgbm90IG9ubHkgZGVsYXlzIHN0YXJ0dXAgb2YgdGhlIHNj cmlwdCwgYnV0IGFsc28gc3Bld3MgZm9ydGgKKyAgICAgICBudW1lcm91cyBtZXNzYWdlcyB0aGF0 IGFyZSBtb3N0IGxpa2VseSB1bnJlbGF0ZWQgdG8gdGhlIHNjcmlwdC4KKyAgICAyLiBJZiB0aGUg aW5pdGlhbGl6YXRpb24gZmlsZSBpcyBub3QgZXhlY3V0ZWQsIG5laXRoZXIgaXMgeW91cgorICAg ICAgIGN1c3RvbWl6YXRpb24gZmlsZSwgc2luY2UgdGhlIGluaXRpYWxpemF0aW9uIGZpbGUgaXMg dGhlIGNvbW1hbmQKKyAgICAgICBmaWxlIGZyb20gd2hpY2ggdGhlIGN1c3RvbWl6YXRpb24gZmls ZSBpcyBUQUtFbi4gQWdhaW4sIHlvdSBjYW4KKyAgICAgICBpbmNsdWRlIGEgVEFLRSBjb21tYW5k IGZvciB0aGUgaW5pdGlhbGl6YXRpb24gZmlsZSBpZiBkZXNpcmVkLCBvcgorICAgICAgIGZvciB0 aGUgY3VzdG9taXphdGlvbiBmaWxlIGJ5IGl0c2VsZiwgb3IgZm9yIGFueSBvdGhlciBmaWxlLgor ICAgIDMuIEMtS2VybWl0IGRvZXMgbm90IHByb2Nlc3MgY29tbWFuZC1saW5lIGFyZ3VtZW50cyBh dCBhbGwuIEluc3RlYWQsCisgICAgICAgaXQgcGFzc2VzIGFsbCB3b3JkcyBvbiB0aGUgY29tbWFu ZCBsaW5lIGFmdGVyIHRoZSAiKyIgdG8gdGhlIHNjcmlwdAorICAgICAgIGFzIFwlMCAodGhlIHNj cmlwdCBuYW1lKSwgXCUxLi5cJTkgKHRoZSBmaXJzdCBuaW5lIGFyZ3VtZW50cyksIGFzCisgICAg ICAgd2VsbCBhcyBpbiB0aGUgYXJndW1lbnQgdmVjdG9yIGFycmF5IFwmX1tdLiBUaGUgdmFyaWFi bGUgXHYoYXJnYykKKyAgICAgICBpcyBzZXQgdG8gdGhlIHRvdGFsIG51bWJlciBvZiAid29yZHMi IChhcyBwYXNzZWQgYnkgdGhlIHNoZWxsIHRvCisgICAgICAgS2VybWl0KSBpbmNsdWRpbmcgdGhl IHNjcmlwdCBuYW1lLiBRdW90aW5nIGFuZCBncm91cGluZyBydWxlcyBhcmUKKyAgICAgICB0aG9z ZSBvZiB0aGUgc2hlbGwuCisgICAgNC4gQXQgYW55IHBvaW50IHdoZXJlIHRoZSBzY3JpcHQgdGVy bWluYXRlcywgaXQgbXVzdCBpbmNsdWRlIGFuIEVYSVQKKyAgICAgICBjb21tYW5kIGlmIHlvdSB3 YW50IGl0IHRvIGV4aXQgYmFjayB0byB0aGUgc2hlbGw7IG90aGVyd2lzZQorICAgICAgIEMtS2Vy bWl0IGVudGVycyBpbnRlcmFjdGl2ZSBwcm9tcHRpbmcgbW9kZSB3aGVuIHRoZSBzY3JpcHQKKyAg ICAgICB0ZXJtaW5hdGVzLiBUaGUgRVhJVCBjb21tYW5kIGNhbiBpbmNsdWRlIGEgbnVtZXJpYyBz dGF0dXMgdG8gYmUKKyAgICAgICByZXR1cm5lZCB0byB0aGUgc2hlbGwgKDAsIDEsIGV0YyksIHBs dXMgYW4gb3B0aW9uYWwgbWVzc2FnZS4KKworICAgSGVyZSBpcyBhIHNpbXBsZSBLZXJiYW5nIHNj cmlwdCB0aGF0IHByaW50cyBpdHMgYXJndW1lbnRzOgorCisgICMvdXNyL2xvY2FsL2Jpbi9rZXJt aXQgKworICBlY2hvIEhlbGxvIGZyb20gXCUwCisgIGZvciBcJWkgMCBcdihhcmdjKS0xIDEgewor ICAgICAgZWNobyBcJWkuICJcJl9bXCVpXSIKKyAgfQorICBleGl0IDAKKworICAgU2F2ZSB0aGlz IGZpbGUgYXMgKHNheSkgInNob3dhcmdzIiwgdGhlbiBnaXZlIGl0IGV4ZWN1dGUgcGVybWlzc2lv biBhbmQKKyAgIHJ1biBpdCAodGhlIFwmX1tdIGFycmF5IGlzIHRoZSBzYW1lIGFzIFwlMC4uXCU5 LCBidXQgYWxsb3dzIHlvdSB0bworICAgcmVmZXIgdG8gYXJndW1lbnQgdmFyaWFibGVzIHByb2dy YW1tYXRpY2FsbHk7IHNlZSBbNjI4XVNlY3Rpb24gNy41KS4KKyAgIChZZXMsIHlvdSBjb3VsZCBz dWJzdGl0dXRlIFNIT1cgQVJHVU1FTlRTIGZvciB0aGUgbG9vcC4pCisKKyAgJCBjaG1vZCAreCBz aG93YXJncworICAkIC4vc2hvd2FyZ3Mgb25lICJ0aGlzIGlzIHR3byIgdGhyZWUKKworICAgVGhl IHNjcmlwdCBkaXNwbGF5cyBpdHMgYXJndW1lbnRzOgorCisgIEhlbGxvIGZyb20gL3Vzci9vbGdh L3Nob3dhcmdzCisgIDAuICIvdXNyL29sZ2Evc2hvd2FyZ3MiCisgIDEuICJvbmUiCisgIDIuICJ0 aGlzIGlzIHR3byIKKyAgMy4gInRocmVlIgorICAkCisKKyAgIE5vdGljZSB0aGF0IG5vIGJhbm5l cnMgb3IgZ3JlZXRpbmdzIGFyZSBwcmludGVkIGFuZCB0aGF0IHN0YXJ0dXAgaXMKKyAgIGluc3Rh bnRhbmVvdXMsIGp1c3QgbGlrZSBhIHNoZWxsIHNjcmlwdC4gQWxzbyBub3RpY2UgdGhhdCBncm91 cGluZyBvZgorICAgYXJndW1lbnRzIGlzIGRldGVybWluZWQgYnkgKnNoZWxsKiBxdW90aW5nIHJ1 bGVzLCBub3QgS2VybWl0IG9uZXMsCisgICBzaW5jZSB0aGUgY29tbWFuZCBsaW5lIGlzIHBhcnNl ZCBieSB0aGUgc2hlbGwgYmVmb3JlIEtlcm1pdCBldmVyIHNlZXMKKyAgIGl0LgorCisgICBPZiBj b3Vyc2UgeW91IGNhbiBwdXQgYW55IGNvbW1hbmRzIGF0IGFsbCBpbnRvIGEgS2VyYmFuZyBzY3Jp cHQuIEl0IGNhbgorICAgcmVhZCBhbmQgd3JpdGUgZmlsZXMsIG1ha2UgY29ubmVjdGlvbnMsIHRy YW5zZmVyIGZpbGVzLCBhbnl0aGluZyB0aGF0CisgICBLZXJtaXQgY2FuIGRvIC0tIGJlY2F1c2Ug aXQgKmlzKiBLZXJtaXQuIEFuZCBvZiBjb3Vyc2UsIEtlcmJhbmcgc2NyaXB0cworICAgY2FuIGFs c28gYmUgZXhlY3V0ZWQgZnJvbSB0aGUgS2VybWl0IHByb21wdCAob3IgZnJvbSBhbm90aGVyIHNj cmlwdCkKKyAgIHdpdGggYSBUQUtFIGNvbW1hbmQ7IHRoZSBLZXJiYW5nIGxpbmUgaXMgaWdub3Jl ZCBzaW5jZSBpdCBzdGFydHMgd2l0aAorICAgIiMiLCB3aGljaCBpcyBhIGNvbW1lbnQgaW50cm9k dWNlciB0byBLZXJtaXQganVzdCBhcyBpdCBpcyB0byB0aGUgVU5JWAorICAgc2hlbGwuIEluIFZN UyBhbmQgb3RoZXIgbm9uLVVOSVggcGxhdGZvcm1zLCB0aGUgS2VyYmFuZyBsaW5lIGhhcyBubwor ICAgZWZmZWN0IGFuZCBjYW4gYmUgb21pdHRlZC4KKworICAgSXQgbWlnaHQgYmUgZGVzaXJhYmxl IGZvciBhIHNjcmlwdCB0byBrbm93IHdoZXRoZXIgaXQgaGFzIGJlZW4gaW52b2tlZAorICAgZGly ZWN0bHkgZnJvbSB0aGUgc2hlbGwgKGFzIGEgS2VyYmFuZyBzY3JpcHQpIG9yIGJ5IGEgVEFLRSBj b21tYW5kCisgICBnaXZlbiB0byB0aGUgS2VybWl0IHByb21wdCBvciBpbiBhIEtlcm1pdCBjb21t YW5kIGZpbGUgb3IgbWFjcm8uIFRoaXMKKyAgIGNhbiBiZSBkb25lIGFzIGluIHRoaXMgZXhhbXBs ZToKKworICAjIS91c3IvbG9jYWwvYmluL2tlcm1pdCArCisgIGFzc2lnbiBcJW0gXGZiYXNlbmFt ZShcJTApCisgIGRlZmluZSB1c2FnZSB7IGV4aXQgMSB7dXNhZ2U6IFwlbSBwaG9uZW51bWJlciBt ZXNzYWdlfSB9CisgIGRlZmluZSBhcGFnZSB7IChkZWZpbml0aW9uIG9mIEFQQUdFLi4uKSB9IDsg KFNlZSBbNjI5XWJvb2sgcHAuNDU0LTQ1NikKKyAgeGlmIGVxdWFsICJcJTAiICJcdihjbWRmaWwp IiB7CisgICAgICBpZiBub3QgZGVmIFwlMSB1c2FnZQorICAgICAgaWYgbm90IGRlZiBcJTIgdXNh Z2UKKyAgICAgIGFwYWdlIHtcJTF9IHtcJTJ9CisgICAgICBleGl0IFx2KHN0YXR1cykKKyAgfQor CisgICBJbiBhIEtlcmJhbmcgc2NyaXB0LCBcJTAgYW5kIFx2KGNtZGZpbGUpIGFyZSB0aGUgc2Ft ZTsgYm90aCBvZiB0aGVtIGFyZQorICAgdGhlIG5hbWUgb2YgdGhlIHNjcmlwdC4gV2hlbiBhIHNj cmlwdCBpcyBpbnZva2VkIGJ5IGEgS2VybWl0IFRBS0UKKyAgIGNvbW1hbmQsIFwlMCBpcyB0aGUg bmFtZSBvZiB0aGUgS2VybWl0IHByb2dyYW0sIGJ1dCBcdihjbWRmaWxlKSBpcyB0aGUKKyAgIG5h bWUgb2YgdGhlIHNjcmlwdC4gSW4gdGhlIGV4YW1wbGUgYWJvdmUsIGEgbWFjcm8gY2FsbGVkIEFQ QUdFIGlzCisgICBkZWZpbmVkLiBJZiB0aGUgc2NyaXB0IHdhcyBpbnZva2VkIGRpcmVjdGx5LCB0 aGUgQVBBR0UgbWFjcm8gaXMgYWxzbworICAgZXhlY3V0ZWQuIE90aGVyd2lzZSwgaXQgaXMgYXZh aWxhYmxlIGZvciBzdWJzZXF1ZW50IGFuZCBwZXJoYXBzCisgICByZXBlYXRlZCB1c2UgbGF0ZXIg aW4gdGhlIEtlcm1pdCBzZXNzaW9uLgorCisgICBBbiBlc3BlY2lhbGx5IGhhbmR5IHVzZSBmb3Ig S2VyYmFuZyBzY3JpcHRzIGlzIHRvIGhhdmUgdGhlCisgICBpbml0aWFsaXphdGlvbiBmaWxlIGl0 c2VsZiBiZSBvbmUuIFNpbmNlIHRoZSBzdGFuZGFyZCBpbml0aWFsaXphdGlvbgorICAgZmlsZSBp cyByYXRoZXIgbG9uZyBhbmQgdGltZS1jb25zdW1pbmcgdG8gZXhlY3V0ZSwgaXQgaXMgb2Z0ZW4g b3ZlcmtpbGwKKyAgIGlmIHlvdSB3YW50IHRvIHN0YXJ0IEtlcm1pdCBqdXN0IHRvIHRyYW5zZmVy IGEgZmlsZS4gT2YgY291cnNlIHRoZXJlCisgICBhcmUgY29tbWFuZC1saW5lIHN3aXRjaGVzIHRv IHN1cHByZXNzIGluaXRpYWxpemF0aW9uLWZpbGUgZXhlY3V0aW9uLAorICAgZXRjLCBidXQgYW5v dGhlciBhcHByb2FjaCBpcyB0byAicnVuIiB0aGUgaW5pdGlhbGl6YXRpb24gZmlsZSB3aGVuIHlv dQorICAgd2FudCBpdHMgZmVhdHVyZXMgKG5vdGFibHkgdGhlIHNlcnZpY2VzIGRpcmVjdG9yeSks IGFuZCBydW4gQy1LZXJtaXQKKyAgIGRpcmVjdGx5IHdoZW4geW91IGRvbid0LiBBIHNldHVwIGxp a2UgdGhpcyByZXF1aXJlcyB0aGF0IChhKSB0aGUKKyAgIEMtS2VybWl0IGluaXRpYWxpemF0aW9u IGZpbGUgaXMgY29uZmlndXJlZCBhcyBhIEtlcmJhbmcgc2NyaXB0IChoYXMKKyAgICMhL3BhdGgu Li4va2VybWl0IGFzIGZpcnN0IGxpbmUpLCBoYXMgZXhlY3V0ZSBwZXJtaXNzaW9uLCBhbmQgaXMg aW4KKyAgIHlvdXIgUEFUSDsgYW5kIChiKSB0aGF0IHlvdSBkb24ndCBoYXZlIGEgLmtlcm1yYyBm aWxlIGluIHlvdXIgbG9naW4KKyAgIGRpcmVjdG9yeS4KKworICA3LjIwLiBJRiBhbmQgWElGIFN0 YXRlbWVudCBTeW50YXgKKworICAgVGhlIElGIGNvbW1hbmQgaGFzIGJlZW4gaW1wcm92ZWQgaW4g dHdvIHNpZ25pZmljYW50IHdheXMgaW4gQy1LZXJtaXQKKyAgIDcuMCwgZGVzY3JpYmVkIGluIHRo ZSBmb2xsb3dpbmcgc3Vic2VjdGlvbnMuIEFsbCBjaGFuZ2VzIGFyZSBiYWNrd2FyZHMKKyAgIGNv bXBhdGlibGUuCisKKyAgICA3LjIwLjEuIFRoZSBJRi9YSUYgRGlzdGluY3Rpb24KKworICAgVGhl IGRpc3RpbmN0aW9uIGJldHdlZW4gSUYgYW5kIFhJRiBpcyBubyBsb25nZXIgaW1wb3J0YW50IGFz IG9mCisgICBDLUtlcm1pdCA3LjAuIFlvdSBzaG91bGQgYmUgYWJsZSB0byB1c2UgSUYgaW4gYWxs IGNhc2VzIChhbmQgb2YgY291cnNlLAorICAgYWxzbyBYSUYgZm9yIGJhY2t3YXJkcyBjb21wYXRp YmlsaXR5KS4gSW4gdGhlIHBhc3QsIElGIHdhcyB1c2VkIGZvcgorICAgc2luZ2xlLWNvbW1hbmQg VEhFTiBwYXJ0cywgZm9sbG93ZWQgb3B0aW9uYWxseSBieSBhIHNlcGFyYXRlIEVMU0UKKyAgIGNv bW1hbmQ6CisKKyAgSUYgY29uZGl0aW9uIGNvbW1hbmQxICAgIDsgVEhFTiBwYXJ0CisgIEVMU0Ug Y29tbWFuZDIgICAgICAgICAgICA7IEVMU0UgcGFydAorCisgICB3aGVyZWFzIFhJRiB3YXMgcmVx dWlyZWQgaWYgZWl0aGVyIHBhcnQgaGFkIG11bHRpcGxlIGNvbW1hbmRzOgorCisgIFhJRiBjb25k aXRpb24geyBjb21tYW5kLCBjb21tYW5kLCAuLi4gfSBFTFNFIHsgY29tbWFuZCwgY29tbWFuZCwg Li4uIH0KKworICAgVGhlIHN5bnRhY3RpYyBkaWZmZXJlbmNlcyB3ZXJlIHByaW1hcmlseSB0aGF0 IElGIC8gRUxTRSB3YXMgdHdvCisgICBjb21tYW5kcyBvbiB0d28gc2VwYXJhdGUgbGluZXMsIHdo ZXJlYXMgWElGIHdhcyBvbmUgY29tbWFuZCBvbiBvbmUKKyAgIGxpbmUsIGFuZCB0aGF0IFhJRiBh bGxvd2VkIChhbmQgaW4gZmFjdCByZXF1aXJlZCkgYnJhY2VzIGFyb3VuZCBpdHMKKyAgIGNvbW1h bmQgbGlzdHMsIHdoZXJlYXMgSUYgZGlkIG5vdCBhbGxvdyB0aGVtLgorCisgICBGdXJ0aGVybW9y ZSwgdGhlIGNoYWluaW5nIG9yIG5lc3Rpbmcgb2YgcGFydHMgYW5kIGNvbmRpdGlvbnMgd2FzCisg ICBpbmNvbnNpc3RlbnQuIEZvciBleGFtcGxlLCB0aGUgSUYgY29tbWFuZCBjb3VsZCBiZSB1c2Vk IGxpa2UgdGhpczoKKworICBJRiBjb25kaXRpb24gY29tbWFuZAorICBFTFNFIElGIGNvbmRpdGlv biBjb21tYW5kCisgIEVMU0UgSUYgY29uZGl0aW9uIGNvbW1hbmQKKyAgRUxTRSBJRiBjb25kaXRp b24gY29tbWFuZAorICAuLi4KKworICAgYnV0IFhJRiBjb3VsZCBub3QuIEMtS2VybWl0IDcuMCBh Y2NlcHRzIHRoZSBvbGQgc3ludGF4IGFuZCBleGVjdXRlcyBpdAorICAgdGhlIHNhbWUgYXMgcHJl dmlvdXMgdmVyc2lvbnMsIGJ1dCBhbHNvIGFjY2VwdHMgYSBuZXcgdW5pZmllZCBhbmQgbW9yZQor ICAgY29udmVuaWVudCBzeW50YXg6CisKKyAgIElGIGNvbmRpdGlvbiBjb21tYW5kLWxpc3QgWyBF TFNFIGNvbW1hbmQtbGlzdCBdCisKKyAgIG9yOgorCitJRiBjb25kaXRpb24gY29tbWFuZC1saXN0 CitFTFNFIGNvbW1hbmQtbGlzdAorCisgICBpbiB3aGljaCB0aGUgRUxTRSBwYXJ0IGlzIG9wdGlv bmFsLCBhbmQgd2hlcmUgY29tbWFuZC1saXN0IGNhbiBiZSBhCisgICBzaW5nbGUgY29tbWFuZCAo d2l0aCBvciB3aXRob3V0IGJyYWNlcyBhcm91bmQgaXQpIG9yIGEgbGlzdCBvZiBjb21tYW5kcwor ICAgZW5jbG9zZWQgaW4gYnJhY2VzLiBFeGFtcGxlczoKKworICAgRXhhbXBsZSAxOgorCisgIElG IGNvbmRpdGlvbiB7IGNvbW1hbmQxLCBjb21tYW5kMiB9IEVMU0UgeyBjb21tYW5kMywgY29tbWFu ZDQgfQorCisgICBFeGFtcGxlIDIgKHNhbWUgYXMgRXhhbXBsZSAxKToKKworICBJRiBjb25kaXRp b24geworICAgICBjb21tYW5kMQorICAgICBjb21tYW5kMgorICB9IEVMU0UgeworICAgICBjb21t YW5kMworICAgICBjb21tYW5kNAorICB9CisKKyAgIEV4YW1wbGUgMyAoc2FtZSBhcyAxIGFuZCAy KToKKworICBJRiBjb25kaXRpb24geworICAgICBjb21tYW5kMQorICAgICBjb21tYW5kMgorICB9 CisgIEVMU0UgeyBjb21tYW5kMywgY29tbWFuZDQgfQorCisgICBFeGFtcGxlIDQgKHNhbWUgYXMg MS0zKToKKworICBJRiBjb25kaXRpb24geworICAgICBjb21tYW5kMQorICAgICBjb21tYW5kMgor ICB9CisgIEVMU0UgeworICAgICBjb21tYW5kMworICAgICBjb21tYW5kNAorICB9CisKKyAgIEV4 YW1wbGUgNSAoRUxTRSBjYW4gYmUgZm9sbG93ZWQgYnkgYW5vdGhlciBjb21tYW5kKToKKworICBJ RiBjb25kaXRpb24xIHsKKyAgICAgY29tbWFuZDEKKyAgICAgY29tbWFuZDIKKyAgfSBFTFNFIElG IGNvbmRpdGlvbjIgeworICAgICBjb21tYW5kMworICAgICBjb21tYW5kNAorICB9IEVMU0Ugewor ICAgICBjb21tYW5kNQorICAgICBjb21tYW5kNgorICB9CisKKyAgIEV4YW1wbGUgNSBzdWdnZXN0 cyBvdGhlciBwb3NzaWJpbGl0aWVzOgorCisgIElGIGNvbmRpdGlvbiB7CisgICAgIGNvbW1hbmQx CisgICAgIGNvbW1hbmQyCisgIH0gRUxTRSBGT1IgdmFyaWFibGUgaW5pdGlhbCBmaW5hbCBpbmNy ZW1lbnQgeworICAgICBjb21tYW5kMworICAgICBjb21tYW5kNAorICB9CisKKyAgIEFuZCB0aGlz IHRvbyBpcyBwb3NzaWJsZSwgZXhjZXB0IGZvciBzb21lIG5vbi1vYnZpb3VzIHF1b3RpbmcKKyAg IGNvbnNpZGVyYXRpb25zOgorCisgIGRjbCBcJmFbNl0gPSBvbmUgdHdvIHRocmVlIGZvdXIgZml2 ZSBzaXgKKworICBJRiA8IFwlbiAzIHsKKyAgICAgIGVjaG8gXFwlbiBpcyB0b28gc21hbGw6IFwl bgorICB9IEVMU0UgRk9SIFxcJWkgMSBcXCVuIDEgeworICAgICAgZWNobyBcXCVpLiBcXCZhW1xc JWldCisgIH0KKworICAgKFRoZSBsb29wIHZhcmlhYmxlIG11c3QgYmUgcXVvdGVkIGluIHRoaXMg Y29udGV4dCB0byBwcmV2ZW50IHByZW1hdHVyZQorICAgZXZhbHVhdGlvbi4pCisKKyAgIE1hbnkg QyBwcm9ncmFtbWVycyBwcmVmZXIgdG8gY29kZSBJRi1FTFNFLCBXSElMRSwgRk9SLCBhbmQgU1dJ VENIIHdpdGgKKyAgIHRoZSBibG9jay1vcGVuIGJyYWNrZXQgb24gaXRzIG93biBsaW5lLiBUaGlz IGRvZXMgbm90IHdvcmsgaW4gS2VybWl0OgorCisgIElGIGNvbmRpdGlvbiAgICAgICAgOyBUSElT IEZPUk1BVCBET0VTIE5PVCBOT1QgV09SSworICB7CisgICAgIGNvbW1hbmQxCisgICAgIGNvbW1h bmQyCisgIH0KKyAgRUxTRQorICB7CisgICAgIGNvbW1hbmQzCisgICAgIGNvbW1hbmQ0CisgIH0K KworICAgRXhwbGFuYXRpb246IHRoZSBLZXJtaXQgY29tbWFuZCBsYW5ndWFnZSBpcyBsaW5lIG9y aWVudGVkOyBlYWNoIGxpbmUgaXMKKyAgIGEgY29tbWFuZCwgZWFjaCBjb21tYW5kIGlzIGEgbGlu ZS4gVGhlIGZpcnN0IGxpbmUgYWJvdmUsIGhhdmluZyBubyBoaW50CisgICBvZiBjb250aW51YXRp b24sIGlzIGFuIGluY29tcGxldGUgY29tbWFuZCwgeWV0IHN5bnRhY3RpY2FsbHkgY29ycmVjdCAt LQorICAgYW4gSUYgc3RhdGVtZW50IHdpdGggYW4gZW1wdHkgVEhFTiBwYXJ0LiBJbnRlcmVzdGlu Z2x5IGVub3VnaCwgc2luY2UKKyAgIHRoZSBuZXh0IGxpbmUgYmVnaW5zIHdpdGggInsiIGl0IGlz IGEgYmxvY2sgdGhhdCAoaW4gWzYzMF1DLUtlcm1pdCA4LjAKKyAgIGFuZCBsYXRlcikgaXMgYSBi bG9jayB0aGF0IGlzIGV4ZWN1dGVkIHVuY29uZGl0aW9uYWxseS4gVGh1cyB0aGUKKyAgIGNvbW1h bmRzIGluIHRoZSBUSEVOIHBhcnQgYXJlIGV4ZWN1dGVkIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0 aGUKKyAgIGNvbmRpdGlvbiBpcyB0cnVlIC0tIG5vdCB3aGF0IHlvdSB3YW50ZWQhCisKKyAgIFRo ZSBuZXcgYmxvY2sgc3ludGF4IHVzZWQgaW4gdGhlIElGLCBXSElMRSwgRk9SLCBhbmQgU1dJVENI IGNvbW1hbmRzCisgICBlbXBsb3lzIGNlcnRhaW4gdHJpY2tzIHRvIGFsbG93IG11bHRpcGxlIGxp bmVzIHRvIGJlIHRyZWF0ZWQgYXMgYQorICAgc2luZ2xlIGxpbmU6CisKKyAgICAgKiBBbnkgbGlu ZSBlbmRpbmcgd2l0aCAieyIgKGlnbm9yaW5nIHdoaXRlc3BhY2UgYW5kIGNvbW1lbnRzKSBtYXJr cworICAgICAgIHRoZSBiZWdpbm5pbmcgb2YgYSBibG9jazsKKyAgICAgKiBBbnkgbGluZSBiZWdp bm5pbmcgd2l0aCAifSIgKGlnbm9yaW5nIHdoaXRlc3BhY2UpIG1hcmtzIHRoZSBlbmQgb2YKKyAg ICAgICBhIGJsb2NrOworICAgICAqIExpbmUgYnJlYWtzIHdpdGhpbiBhIGJsb2NrIHNlcGFyYXRl IGNvbW1hbmRzOyB0aGUgY29tbWEgaXMgaW1wbGllZAorICAgICAgIGJ5IHRoZSBsaW5lIGVuZC4K KworICAgVGh1czoKKworICBJRiBjb25kaXRpb24geworICAgICBjb21tYW5kMQorICAgICBjb21t YW5kMgorICB9IEVMU0UgeworICAgICBjb21tYW5kMworICAgICBjb21tYW5kNAorICB9CisKKyAg IGlzICJhc3NlbWJsZWQiIGludG86CisKKyAgSUYgY29uZGl0aW9uIHsgY29tbWFuZDEsIGNvbW1h bmQyIH0gRUxTRSB7IGNvbW1hbmQzLCBjb21tYW5kNCB9CisKKyAgIE5vdGUgdGhlIGFkZGl0aW9u IG9mIGNvbW1hcyB0byBzZXBhcmF0ZSBjb21tYW5kcyB3aXRoaW4gYmxvY2tzLiBBcworICAgYWx3 YXlzLCBpZiB5b3UgbmVlZCBjb250aW51ZSBhIGNvbW1hbmQgb250byBhZGRpdGlvbmFsIGxpbmVz LCB5b3UgY2FuCisgICBlbmQgdGhlIGNvbnRpbnVlZCBsaW5lcyB3aXRoIHRoZSBjb250aW51YXRp b24gY2hhcmFjdGVyLCAiLSIuIFlvdSBjYW4KKyAgIGFsc28gZG8gdGhpcyBpZiB5b3Ugd2FudCB0 byBwdXQgb3BlbmluZyBicmFja2V0cyBvbiB0aGVpciBvd24gbGluZToKKworICBJRiBjb25kaXRp b24gLQorICB7CisgICAgIGNvbW1hbmQxCisgICAgIGNvbW1hbmQyCisgIH0KKyAgRUxTRSAtCisg IHsKKyAgICAgY29tbWFuZDMKKyAgICAgY29tbWFuZDQKKyAgfQorCisgICAgNy4yMC4yLiBCb29s ZWFuIEV4cHJlc3Npb25zIChUaGUgSUYvV0hJTEUgQ29uZGl0aW9uKQorCisgICBQcmlvciB0byBD LUtlcm1pdCA3LjAsIHRoZSBJRiBhbmQgV0hJTEUgY29tbWFuZHMgYWNjZXB0ZWQgb25seSBhIHNp bmdsZQorICAgQm9vbGVhbiAoInRydWUgb3IgZmFsc2UiKSBhc3NlcnRpb24sIGUuZy4gImlmID4g XCVtIDAgY29tbWFuZCIgb3IgImlmCisgICBleGlzdCBmaWxlbmFtZSBjb21tYW5kIi4gVGhlcmUg d2FzIG5vIHdheSB0byBmb3JtIEJvb2xlYW4gZXhwcmVzc2lvbnMKKyAgIGFuZCwgaW4gcGFydGlj dWxhciwgbm90aGluZyB0aGF0IGFwcHJvYWNoZWQgYSBCb29sZWFuIE9SIGZ1bmN0aW9uIChBTkQK KyAgIGNvdWxkIGJlIHNpbXVsYXRlZCBieSBjb25jYXRlbmF0aW5nIElGIHN0YXRlbWVudHM6ICJp ZiBjb25kaXRpb24xIGlmCisgICBjb25kaXRpb24yLi4iKS4KKworICAgQy1LZXJtaXQgNy4wIChh bmQgSzk1IDEuMS4xOSkgYWxsb3cgZ3JvdXBpbmcgb2YgQm9vbGVhbiBhc3NlcnRpb25zCisgICB1 c2luZyBwYXJlbnRoZXNlcyBhbmQgY29tYmluaW5nIHRoZW0gdXNpbmcgQU5EIChvciAmJikgYW5k IE9SIChvciB8fCkuCisgICBFYWNoIG9mIHRoZXNlIG9wZXJhdG9ycyAtLSBpbmNsdWRpbmcgdGhl IHBhcmVudGhlc2VzIC0tIGlzIGEgZmllbGQgYW5kCisgICBtdXN0IGJlIHNldCBvZmYgYnkgc3Bh Y2VzLiBBTkQgaGFzIGhpZ2hlciBwcmVjZWRlbmNlIHRoYW4gT1IsIE5PVCBoYXMKKyAgIGhpZ2hl ciBwcmVjZWRlbmNlIHRoYW4gQU5ELCBidXQgcGFyZW50aGVzZXMgY2FuIGJlIHVzZWQgdG8gZm9y Y2UgYW55CisgICBkZXNpcmVkIG9yZGVyIG9mIGV2YWx1YXRpb24uIFRoZSBvbGQgc3ludGF4IGlz IHN0aWxsIGFjY2VwdGVkLgorCisgICBIZXJlIGFyZSBzb21lIGV4YW1wbGVzOgorCisgIGRlZmlu ZSBcJXogMCAgICAgICAgICAgICAgICAgICAgICAgICAgOyBEZWZpbmUgc29tZSB2YXJpYWJsZXMK KyAgZGVmaW5lIFwlbiAxICAgICAgICAgICAgICAgICAgICAgICAgICA7IGZvciB1c2UgaW4gdGhl IGV4YW1wbGVzLgorCisgIGlmID4gXCVuIFwleiBlY2hvIFwlbiBpcyBncmVhdGVyLiAgICAgOyBP cmlnaW5hbCBmb3JtYXQgLSBzdGlsbCBhY2NlcHRlZC4KKyAgaWYgKCA+IFwlbiBcJXogKSBlY2hv IFwlbiBpcyBncmVhdGVyLiA7IFBhcmVudGhlc2VzIG1heSBiZSB1c2VkIGluIDcuMC4KKyAgaWYg KCA+IFwlbiBcJXogJiYgbm90ID0gXCV6IDAgKSAuLi4gICA7IFR3byBhc3NlcnRpb25zIGNvbWJp bmVkIHdpdGggQU5ELgorICBpZiAoID4gXCVuIFwleiBhbmQgbm90ID0gXCV6IDAgKSAuLi4gIDsg U2FtZSBhcyBwcmV2aW91cyAoImFuZCIgPSAiJiYiKS4KKyAgaWYgKCA+IFwlbiBcJXogfHwgbm90 ID0gXCV6IDAgKSAuLi4gICA7IFR3byBhc3NlcnRpb25zIGNvbWJpbmVkIHdpdGggT1IuCisgIGlm ICggPiBcJW4gXCV6IG9yIG5vdCA9IFwleiAwICkgLi4uICAgOyBTYW1lIGFzIHByZXZpb3VzICgi b3IiID0gInx8IikuCisgIGlmICggPiBcJW4gXCV6IHx8ICE9IFwleiAwICkgLi4uICAgICAgOyBE aXR0byAoIiE9IiA9ICJub3QgPSIpLgorICB3aGlsZSAoIDEgKSB7IC4uLiB9ICAgICAgICAgICAg ICAgICAgIDsgSnVzdCBsaWtlIEMuCisKKyAgIE5vdGljZSB0aGUgc3BhY2VzIGFyb3VuZCBhbGwg b3BlcmF0b3JzIGluY2x1ZGluZyB0aGUgcGFyZW50aGVzZXMgLS0KKyAgIHRoZXNlIGFyZSByZXF1 aXJlZC4gVGhlIGZvbGxvd2luZyBleGFtcGxlcyBzaG93IGhvdyBwYXJlbnRoZXNlcyBjYW4gYmUK KyAgIHVzZWQgdG8gYWx0ZXIgdGhlIHByZWNlZGVuY2Ugb2YgdGhlIEFORCBhbmQgT1Igb3BlcmF0 b3JzOgorCisgIGlmICggZmFsc2UgfHwgZmFsc2UgJiYgZmFsc2UgfHwgdHJ1ZSApICwuLiAgICAg ICAgIDsgVHJ1ZQorICBpZiAoIGZhbHNlIHx8ICggZmFsc2UgJiYgZmFsc2UgKSB8fCB0cnVlICkg Li4uICAgICA7IFNhbWUgYXMgcHJldmlvdXMKKyAgaWYgKCAoIGZhbHNlIHx8IGZhbHNlICkgJiYg KCBmYWxzZSB8fCB0cnVlICkgKSAuLi4gOyBGYWxzZQorCisgICBTaW1pbGFybHkgZm9yIE5PVDoK KworICBpZiAoIG5vdCB0cnVlICYmIGZhbHNlICkgLi4uICAgICAgICAgIDsgRmFsc2UgKE5PVCBi aW5kcyB0byBUUlVFIG9ubHkpCisgIGlmICggKCBub3QgdHJ1ZSApICYmIGZhbHNlICkgLi4uICAg ICAgOyBTYW1lIGFzIHByZXZpb3VzCisgIGlmICggbm90ICggdHJ1ZSAmJiBmYWxzZSApICkgLi4u ICAgICAgOyBUcnVlIChOT1QgYmluZHMgdG8gKFRSVUUgJiYgRkFMU0UpKQorCisgICBOb3RlczoK KworICAgIDEuIFRoZSBzeW50YXggb2YgdGhlIEJvb2xlYW4gZXhwcmVzc2lvbiBpdHNlbGYgaGFz IG5vdCBjaGFuZ2VkOyBlYWNoCisgICAgICAgZXhwcmVzc2lvbiBiZWdpbnMgd2l0aCBhIGtleXdv cmQgb3IgdG9rZW4gc3VjaCBhcyAiRVhJU1QiLCAiPiIsIG9yCisgICAgICAgIj0iLCBldGM7IG9w ZXJhdG9ycyBzdWNoIGFzICI8IiwgIj0iLCBhbmQgIj4iIGRvIG5vdCBnbyBiZXR3ZWVuCisgICAg ICAgdGhlaXIgb3BlcmFuZHMgYnV0IHByZWNlZGUgdGhlbSBhcyBiZWZvcmU7IHRoaXMgbWlnaHQg YmUgY2FsbGVkCisgICAgICAgInJldmVyc2UgcmV2ZXJzZSBQb2xpc2ggbm90YXRpb24iOyBpdCBh bGxvd3MgZGV0ZXJtaW5pc3RpYworICAgICAgIG9uLXRoZS1mbHkgcGFyc2luZyBvZiB0aGVzZSBl eHByZXNzaW9ucyBhdCB0aGUgQy1LZXJtaXQ+IHByb21wdCBhcworICAgICAgIHdlbGwgYXMgaW4g c2NyaXB0cywgYW5kIGFsbG93cyA/LWhlbHAgdG8gYmUgZ2l2ZW4gZm9yIGVhY2ggaXRlbQorICAg ICAgIHdoZW4gSUYgb3IgV0hJTEUgY29tbWFuZHMgYXJlIHR5cGVkIGF0IHRoZSBwcm9tcHQuCisg ICAgMi4gUGFyZW50aGVzZXMgYXJlIHJlcXVpcmVkIHdoZW4gdGhlcmUgaXMgbW9yZSB0aGFuIG9u ZSBCb29sZWFuCisgICAgICAgYXNzZXJ0aW9uLgorICAgIDMuIFBhcmVudGhlc2VzIGFyZSBub3Qg cmVxdWlyZWQsIGJ1dCBhcmUgYWxsb3dlZCwgd2hlbiB0aGVyZSBpcyBvbmx5CisgICAgICAgb25l IEJvb2xlYW4gYXNzZXJ0aW9uLgorICAgIDQuIEV2YWx1YXRpb24gb2YgQm9vbGVhbiBhc3NlcnRp b25zIG9jY3VycyBsZWZ0IHRvIHJpZ2h0LCBidXQgdGhlCisgICAgICAgcmVzdWx0aW5nIEJvb2xl YW4gZXhwcmVzc2lvbiBpcyBldmFsdWF0ZWQgYWZ0ZXJ3YXJkcyBhY2NvcmRpbmcgdG8KKyAgICAg ICB0aGUgcnVsZXMgb2YgcHJlY2VkZW5jZS4gQWxsIEJvb2xlYW4gYXNzZXJ0aW9ucyBhcmUgYWx3 YXlzCisgICAgICAgZXZhbHVhdGVkOyB0aGVyZSBpcyBubyAiZWFybHkgc3RvcHBpbmciIHByb3Bl cnR5IGFuZCB0aGVyZWZvcmUgbm8KKyAgICAgICBxdWVzdGlvbiBhYm91dCB3aGVuIG9yIGlmIHNp ZGUgZWZmZWN0cyB3aWxsIG9jY3VyIC0tIGlmIGFueSBCb29sZWFuCisgICAgICAgYXNzZXJ0aW9u IGhhcyBzaWRlIGVmZmVjdHMsIHRoZXkgd2lsbCBhbHdheXMgb2NjdXIuIChFYXJseSBzdG9wcGlu ZworICAgICAgIGlzLCBob3dldmVyLCBwb3NzaWJsZSB3aXRoIHRoZSBbNjMxXVMtRXhwcmVzc2lv biBJRiBpbnRyb2R1Y2VkIGluCisgICAgICAgQy1LZXJtaXQgOC4wLikKKworICAgQ29uc3RydWN0 aW9ucyBvZiBhcmJpdHJhcnkgY29tcGxleGl0eSBhcmUgcG9zc2libGUsIHdpdGhpbiByZWFzb24u CisKKyAgIEFsc28gc2VlIFs2MzJdU2VjdGlvbiA3LjQgZm9yIG5ldyBJRiAvIFdISUxFIGNvbmRp dGlvbnMuCisKKyAgNy4yMS4gU2NyZWVuIEZvcm1hdHRpbmcgYW5kIEN1cnNvciBDb250cm9sCisK KyAgIEMtS2VybWl0IDcuMCBhZGRzIGEgc2ltcGxlIHdheSB0byBjcmVhdGUgZm9ybWF0dGVkIHNj cmVlbnMsIHRoZSBTQ1JFRU4KKyAgIGNvbW1hbmQ6CisKKyAgIFNDUkVFTiB7IENMRUFSLCBDTEVP TCwgTU9WRS1UTyByb3cgWyBjb2x1bW4gXSB9CisgICAgICAgICAgUGVyZm9ybXMgc2NyZWVuLWZv cm1hdHRpbmcgYWN0aW9ucy4gQ29ycmVjdCBvcGVyYXRpb24gb2YgdGhlc2UKKyAgICAgICAgICBj b21tYW5kcyBkZXBlbmRzIG9uIHByb3BlciB0ZXJtaW5hbCBzZXR1cCBvbiBib3RoIGVuZHMgb2Yg dGhlCisgICAgICAgICAgY29ubmVjdGlvbiAtLSBtYWlubHkgdGhhdCB0aGUgaG9zdCB0ZXJtaW5h bCB0eXBlIGlzIHNldCB0byBhZ3JlZQorICAgICAgICAgIHdpdGggdGhlIGtpbmQgb2YgdGVybWlu YWwgb3IgdGhlIGVtdWxhdGlvbiB5b3UgYXJlIHZpZXdpbmcKKyAgICAgICAgICBDLUtlcm1pdCB0 aHJvdWdoLiBUaGUgVU5JWCB2ZXJzaW9uIHVzZXMgdGVybWluZm8gb3IgdGVybWNhcCAobm90Cisg ICAgICAgICAgY3Vyc2VzKTsgdGhlIFZNUyB2ZXJzaW9uIHVzZXMgU01HOyBLLTk1IHVzZXMgaXRz IGJ1aWx0IGluIHNjcmVlbgorICAgICAgICAgIG1hbmFnZXIuCisKKyAgIFNDUkVFTiBDTEVBUgor ICAgICAgICAgIE1vdmVzIHRoZSBjdXJzb3IgdG8gaG9tZSBwb3NpdGlvbiBhbmQgY2xlYXJzIHRo ZSBlbnRpcmUgc2NyZWVuLgorICAgICAgICAgIFN5bm9ueW1zOiBDTEVBUiBDT01NQU5ELVNDUkVF TiBBTEwgKEstOTUgb25seSksIENMUywgQ0xFQVIKKyAgICAgICAgICBTQ1JFRU4uCisKKyAgIFND UkVFTiBDTEVPTAorICAgICAgICAgIENsZWFycyBmcm9tIHRoZSBjdXJyZW50IGN1cnNvciBwb3Np dGlvbiB0byB0aGUgZW5kIG9mIHRoZSBsaW5lLgorICAgICAgICAgIFN5bm9ueW06IENMRUFSIENP TU1BTkQtU0NSRUVOIEVPTCAoSy05NSBvbmx5KQorCisgICBTQ1JFRU4gTU9WRS1UTyByb3cgY29s dW1uCisgICAgICAgICAgTW92ZXMgdGhlIGN1cnNvciB0byB0aGUgaW5kaWNhdGVkIHJvdyBhbmQg Y29sdW1uLiBUaGUgcm93IGFuZAorICAgICAgICAgIGNvbHVtbiBudW1iZXJzIGFyZSAxLWJhc2Vk LCBzbyBvbiBhIDI0eDgwIHNjcmVlbiB0aGUgaG9tZQorICAgICAgICAgIHBvc2l0aW9uIGlzIDEg MSBhbmQgdGhlIGxvd2VyIHJpZ2h0IGNvcm5lciBpcyAyNCA4MC4gSWYgYSByb3cgb3IKKyAgICAg ICAgICBjb2x1bW4gbnVtYmVyIGlzIGdpdmVuIHRoYXQgdG9vIGxhcmdlIGZvciB3aGF0IEtlcm1p dCBvciB0aGUKKyAgICAgICAgICBvcGVyYXRpbmcgc3lzdGVtIHRoaW5rcyBpcyB5b3VyIHNjcmVl biBzaXplLCB0aGUgYXBwcm9wcmlhdGUKKyAgICAgICAgICBudW1iZXIgaXMgc3Vic3RpdHV0ZWQu CisKKyAgIFRoZXNlIGVzY2FwZSBzZXF1ZW5jZXMgdXNlZCBieSB0aGVzZSBjb21tYW5kcyBkZXBl bmRzIG9uIHRoZSBwbGF0Zm9ybS4KKyAgIEluIFVOSVgsIHlvdXIgVEVSTSBlbnZpcm9ubWVudCB2 YXJpYWJsZSBpcyB1c2VkIHRvIHF1ZXJ5IHRoZQorICAgdGVybWluZm8vdGVybWNhcCBkYXRhYmFz ZTsgaWYgdGhlIHF1ZXJ5IGZhaWxzLCBBTlNJL1ZUMTAwIHNlcXVlbmNlcyBhcmUKKyAgIHVzZWQu IEluIFZNUywgdGhlIFNNRyBsaWJyYXJ5IGlzIHVzZWQsIHdoaWNoIHNlbmRzIHNlcXVlbmNlcyBi YXNlZCBvbgorICAgeW91ciBWTVMgdGVybWluYWwgdHlwZS4gSzk1IGRvZXMgaXRzIG93biBzY3Jl ZW4gY29udHJvbC4gT24gb3RoZXIKKyAgIHBsYXRmb3JtcyAoc3VjaCBhcyBBT1MvVlMsIFZPUywg ZXRjKSwgc2NyZWVuIGZvcm1hdHRpbmcgaXMgbm90CisgICBzdXBwb3J0ZWQsIGFuZCB0aGUgU0NS RUVOIGNvbW1hbmQgZG9lcyBub3RoaW5nLgorCisgICBUaGUgdGhyZWUgU0NSRUVOIGFjdGlvbnMg Y2FuIGJlIHVzZWQgaW4gc2NyaXB0cyB0byBwcm9kdWNlIG1lbnVzLAorICAgZm9ybWF0dGVkIHNj cmVlbnMsIGR5bmFtaWMgZGlzcGxheXMsIGV0Yy4gUmVsYXRlZCB2YXJpYWJsZXMgaW5jbHVkZToK KworICBcdih0ZXJtaW5hbCkgICAgIFRoZSB0eXBlIHRlcm1pbmFsIEMtS2VybWl0IHRoaW5rcyB5 b3UgaGF2ZS4KKyAgXHYocm93cykgICAgICAgICBUaGUgbnVtYmVyIG9mIHJvd3MgQy1LZXJtaXQg dGhpbmtzIHlvdXIgdGVybWluYWwgaGFzLgorICBcdihjb2x1bW5zKSAgICAgIFRoZSBudW1iZXIg b2YgY29sdW1ucyBDLUtlcm1pdCB0aGlua3MgeW91ciB0ZXJtaW5hbCBoYXMuCisKKyAgIEFuZCBm dW5jdGlvbnM6CisKKyAgXGZzY3JuY3VyeCgpICAgICBUaGUgY3VycmVudCBYIGNvb3JkaW5hdGUg b2YgdGhlIGN1cnNvciAoSy05NSBvbmx5KS4KKyAgXGZzY3JuY3VyeSgpICAgICBUaGUgY3VycmVu dCBZIGNvb3JkaW5hdGUgb2YgdGhlIGN1cnNvciAoSy05NSBvbmx5KS4KKyAgXGZzY3Juc3RyKHgs eSxuKSBUaGUgc3RyaW5nIG9mIGxlbmd0aCBuYXQgcG9zaXRpb24gKHgseSkgKEstOTUgb25seSku CisKKyAgIEFuZCBjb21tYW5kczoKKworICBFQ0hPIHN0cmluZyAgICAgIFdyaXRlcyBzdHJpbmcg KyBDUkxGIGF0IHRoZSBjdXJyZW50IGN1cnNvciBwb3NpdGlvbi4KKyAgWEVDSE8gc3RyaW5nICAg ICBXcml0ZXMgc3RyaW5nIGF0IGN1cnJlbnQgY3Vyc29yIHBvc2l0aW9uOyBDUkxGIG5vdCBzdXBw bGllZC4KKyAgR0VUQyB2IHByb21wdCAgICBJc3N1ZXMgcHJvbXB0LCByZWFkcyBvbmUgY2hhcmFj dGVyIGludG8gdmFyaWFibGUgdiwgbm8gZWNoby4KKworICAgQW5kIHNwZWNpYWwgY2hhcmFjdGVy czoKKworICBDdHJsLUwgICAgICAgICAgIEF0IHRoZSBDLUtlcm1pdD4gY29tbWFuZCBwcm9tcHQs IG9yIGluIGEgQy1LZXJtaXQgY29tbWFuZCwKKyAgICAgICAgICAgICAgICAgICB3b3JrcyBsaWtl IFJldHVybiBvciBFbnRlciwgYnV0IGFsc28gY2xlYXJzIHRoZSBzY3JlZW4KKworICAgRXhhbXBs ZSAxOiBBIG1hY3JvIHRoYXQgcHJpbnRzIGEgbWVzc2FnZSBcJTEgYXQgY3Vyc29yIHBvc2l0aW9u CisgICAoXCUyLFwlMyk6CisKKyAgZGVmaW5lIE1TRyB7CisgICAgICBpZiBub3QgZGVmIFwlMyBk ZWYgXCUzIDAgICAgICAgICAgICAgOyBEZWZhdWx0IGNvbHVtbiB0byAwCisgICAgICBpZiA+IFx2 KGFyZ2MpIDIgc2NyZWVuIG1vdmUgXCUyIFwlMyAgOyBNb3ZlIHRvIGdpdmVuIHJvdy9jb2wgKGlm IGFueSkKKyAgICAgIHNjcmVlbiBjbGVvbCAgICAgICAgICAgICAgICAgICAgICAgICA7IENsZWFy IHRvIGVuZCBvZiBsaW5lCisgICAgICBpZiBkZWYgXCUxIHhlY2hvIFxmY29udGVudHMoXCUxKSAg ICAgOyBQcmludCBtZXNzYWdlIChpZiBhbnkpCisgIH0KKworICAgRXhhbXBsZSAyOiBBIG1hY3Jv IHB1dCB0aGUgY3Vyc29yIG9uIHRoZSBib3R0b20gc2NyZWVuIGxpbmUsIGxlZnQKKyAgIG1hcmdp bjoKKworICBkZWZpbmUgQk9UIHsKKyAgICAgIHNjcmVlbiBtb3ZlIFx2KHJvd3MpIDAKKyAgfQor CisgICBFeGFtcGxlIDM6IEEgbWFjcm8gdG8gY2VudGVyIG1lc3NhZ2UgXCUxIG9uIGxpbmUgXCUy LgorCisgIGRlZmluZSBDRU5URVIgeworICAgICAgaWYgbm90IGRlZiBcJTIgZGVmIFwlMiAxCisg ICAgICAuXCV4IDo6PSAoXHYoY29scyktXGZsZW4oXCUxKSkvMgorICAgICAgbXNnIHtcJTF9IHtc JTJ9IHtcJXh9CisgIH0KKworICAgRXhhbXBsZSA0OiBBIHNpbXBsZSBtZW51IChidWlsZGluZyBv biBFeGFtcGxlcyAxLTMpOgorCisgIGRlZiBcJWMgMCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOyBNZW51IGNob2ljZSB2YXJpYWJsZQorICBzY3JlZW4gY2xlYXIgICAgICAgICAgICAgICAg ICAgICAgICAgIDsgQ2xlYXIgdGhlIHNjcmVlbgorICBjZW50ZXIge1dlbGNvbWUgdG8gVGhpcyBN ZW51fSAyICAgICAgIDsgRGlzcGxheSB0aGUgbWVudQorICBtc2cge0Nob2ljZXM6fSA0CisgIG1z ZyB7IDEuIEZpbGV9IDYKKyAgbXNnIHsgMi4gRWRpdH0gNworICBtc2cgeyAzLiBFeGl0fSA4Cisg IHdoaWxlICggIT0gXCVjIDMgKSB7ICAgICAgICAgICAgICAgICAgOyBSZWFkIGFuZCB2ZXJpZnkg Y2hvaWNlCisgICAgICB3aGlsZSB0cnVlIHsgICAgICAgICAgICAgICAgICAgICAgOyBLZWVwIHRy eWluZyB0aWxsIHdlIGdldCBhIGdvb2Qgb25lCisgICAgICAgICAgc2NyZWVuIG1vdmUgMTAgICAg ICAgICAgICAgICAgOyBNb3ZlIHRvIGxpbmUgMTAKKyAgICAgICAgICBzY3JlZW4gY2xlb2wgICAg ICAgICAgICAgICAgICA7IENsZWFyIHRoaXMgbGluZQorICAgICAgICAgIGdldGMgXCVjIHtZb3Vy IGNob2ljZTogfSAgICAgIDsgUHJvbXB0IGFuZCBnZXQgYW5kIGVjaG8gMSBjaGFyYWN0ZXIKKyAg ICAgICAgICB4ZWNobyBcJWMKKyAgICAgICAgICBpZiAoIG5vdCBudW1lcmljIFwlYyApIHsgbXNn IHtOb3QgbnVtZXJpYyAtICJcJWMifSAxMiwgY29udGludWUgfQorICAgICAgICAgIGlmICggPj0g XCVjIDEgJiYgPD0gXCVjIDMgKSBicmVhaworICAgICAgICAgIG1zZyB7T3V0IG9mIHJhbmdlIC0g IlwlYyJ9IDEyCisgICAgICB9CisgICAgICBzd2l0Y2ggXCVjIHsgICAgICAgICAgICAgICAgICAg ICAgOyBWYWxpZCBjaG9pY2UgLSBleGVjdXRlIGl0LgorICAgICAgICA6MSwgbXNnIHtGaWxpbmcu Li4gfSAxMiwgYnJlYWsKKyAgICAgICAgOjIsIG1zZyB7RWRpdGluZy4uLn0gMTIsIGJyZWFrCisg ICAgICAgIDozLCBtc2cge0V4aXRpbmcuLi59IDEyLCBicmVhaworICAgICAgfQorICB9CisgIGVj aG8gQnllICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBFeGl0IGNob3NlbiAtIHNheSBn b29kYnllLgorICBib3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgTGVhdmUg Y3Vyc29yIGF0IHNjcmVlbiBib3R0b20uCisgIGV4aXQgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOyBBbmQgZXhpdC4KKworICAgU2ltaWxhciBzY3JpcHRzIGNhbiB3b3JrIG92ZXIg dGhlIGNvbW11bmljYXRpb24gY29ubmVjdGlvbjsgc3Vic3RpdHV0ZQorICAgSU5QVVQgYW5kIE9V VFBVVCBmb3IgR0VUQyBhbmQgRUNITy9YRUNITy4KKworICA3LjIyLiBFdmFsdWF0aW5nIEFyaXRo bWV0aWMgRXhwcmVzc2lvbnMKKworICAgQSBuZXcgYXJpdGhtZXRpYyBvcGVyYXRvciB3YXMgYWRk ZWQgdG8gdGhlIGxpc3QgcmVjb2duaXplZCBieSB0aGUKKyAgIEVWQUxVQVRFIGNvbW1hbmQsIHRo ZSBcZmV2YWwoKSBmdW5jdGlvbiwgYW5kIHdoaWNoIGNhbiBhbHNvIGJlIHVzZWQKKyAgIGFueXdo ZXJlIGVsc2UgYXJpdGhtZXRpYyBleHByZXNzaW9ucyBhcmUgYWNjZXB0ZWQgKG51bWVyaWMgY29t bWFuZAorICAgZmllbGRzLCBhcnJheSBzdWJzY3JpcHRzLCBldGMpOgorCisgICBQcmVmaXggIiEi CisgICAgICAgICAgVGhpcyBvcGVyYXRvciBpbnZlcnRzIHRoZSAidHJ1dGggdmFsdWUiIG9mIHRo ZSBudW1iZXIgb3IKKyAgICAgICAgICBhcml0aG1ldGljIGV4cHJlc3Npb24gdGhhdCBmb2xsb3dz LiBJZiB0aGUgdmFsdWUgb2YgdGhlIG9wZXJhbmQKKyAgICAgICAgICBpcyAwLCB0aGUgcmVzdWx0 IGlzIDEuIElmIHRoZSB2YWx1ZSBpcyBub256ZXJvLCB0aGUgcmVzdWx0IGlzIDAuCisKKyAgIEV4 YW1wbGVzOgorCisgIHNldCBldmFsIG9sZAorICBldmFsdWF0ZSAwCisgIDAKKworICBldmFsdWF0 ZSAhMAorICAxCisKKyAgZXZhbHVhdGUgITMKKyAgMAorCisgIGV2YWx1YXRlICEoLTMpCisgIDAK KworICAuXCVhID0gMQorICAuXCViID0gMAorICBldmFsdWF0ZSAhKFwlYXxcJWIpCisgIDAKKwor ICBldmFsdWF0ZSAhKFwlYSZcJWIpCisgIDEKKworICBldmFsdWF0ZSAhKCEoXCVhJlwlYikpCisg IDAKKworICAgTm90ZSB0aGUgZGlzdGluY3Rpb24gYmV0d2VlbiBQcmVmaXggISAoaW52ZXJ0IHRy dXRoIHZhbHVlKSBhbmQgU3VmZml4ICEKKyAgIChmYWN0b3JpYWwpLiBBbHNvIHRoZSBkaXN0aW5j dGlvbiBiZXR3ZWVuIFByZWZpeCAhIGFuZCBQcmVmaXggfiAod2hpY2gKKyAgIGludmVydHMgYWxs IHRoZSBiaXRzIGluIGl0cyBvcGVyYW5kKS4gQWxzbyBub3RlIHRoYXQgcHJlZml4IG9wZXJhdG9y cworICAgKCEsIC0sIGFuZCB+KSBjYW4gbm90IGJlIGFkamFjZW50IHVubGVzcyB5b3UgdXNlIHBh cmVudGhlc2VzIHRvCisgICBzZXBhcmF0ZSB0aGVtLCBhcyBzaG93biBpbiB0aGUgZmluYWwgZXhh bXBsZSBhYm92ZS4KKworICA3LjIzLiBGbG9hdGluZy1Qb2ludCBBcml0aG1ldGljCisKKyAgICAg Rm9yIGEgbW9yZSBjb252ZW5pZW50IHdheSBvZiBkZWFsaW5nIHdpdGggZmxvYXRpbmctcG9pbnQg bnVtYmVycworICAgICB0aGFuIHRoZSBvbmUgZGVzY3JpYmVkIGhlcmUsIHNlZSB0aGUgWzYzM11D LUtlcm1pdCA4LjAgdXBkYXRlIG5vdGVzLAorICAgICB0aGUgc2VjdGlvbiBvbiBbNjM0XVMtRXhw cmVzc2lvbnMuCisKKyAgIEMtS2VybWl0IDcuMCBhZGRzIGxpbWl0ZWQgc3VwcG9ydCBmb3IgZmxv YXRpbmctcG9pbnQgbnVtYmVycyAobnVtYmVycworICAgdGhhdCBoYXZlIGZyYWN0aW9uYWwgcGFy dHMsIGxpa2UgMy4xNDE1OTI2NTMpLiBUaGlzIHN1cHBvcnQgaXMgcHJvdmlkZWQKKyAgIHRocm91 Z2ggYSBzbWFsbCByZXBlcnRvaXJlIG9mIGZ1bmN0aW9ucyBhbmQgaW4gQm9vbGVhbiBleHByZXNz aW9ucyB0aGF0CisgICBjb21wYXJlIG51bWJlcnMsIGJ1dCBkb2VzIG5vdCBhcHBseSB0byBudW1i ZXIgcGFyc2luZyBpbiBnZW5lcmFsLCBvciB0bworICAgZXhwcmVzc2lvbiBldmFsdWF0aW9uLCBh cnJheSBzdWJzY3JpcHRzLCB0aGUgSU5DUkVNRU5UIGFuZCBERUNSRU1FTlQKKyAgIGNvbW1hbmRz LCBvciBpbiBhbnkgY29udGV4dCBvdGhlciB0aGFuIHRob3NlIGxpc3RlZCBpbiB0aGlzIHNlY3Rp b24uCisKKyAgIEEgZmxvYXRpbmcgcG9pbnQgbnVtYmVyIGhhcyBhbiBvcHRpb25hbCBzaWduICgr IG9yIC0pLCBmb2xsb3dlZCBieSBhCisgICBzZXJpZXMgb2YgZGVjaW1hbCBkaWdpdHMgY29udGFp bmluZyBlaXRoZXIgemVybyBvciBvbmUgcGVyaW9kICguKQorICAgY2hhcmFjdGVyLCB3aGljaCBp cyB0aGUgZGVjaW1hbCBwb2ludC4gVGhlIHVzZSBvZiBjb21tYSBvciBhbnkgb3RoZXIKKyAgIGNo YXJhY3RlciBiZXNpZGVzIHBlcmlvZCBhcyBhIGRlY2ltYWwgcG9pbnQgaXMgbm90IHN1cHBvcnRl ZC4KKyAgIFNjaWVudGlmaWMgbm90YXRpb24gaXMgbm90IHN1cHBvcnRlZCBlaXRoZXIuIEV4YW1w bGVzIG9mIGxlZ2FsCisgICBmbG9hdGluZy1wb2ludCBudW1iZXJzOgorCisgIDAgICAgICAgICAg ICAgICAgSW50ZWdlcnMgY2FuIGJlIHVzZWQKKyAgMSAgICAgICAgICAgICAgICBEaXR0bworICAy LiAgICAgICAgICAgICAgIEEgZGVjaW1hbCBwb2ludCB3aXRob3V0IGRlY2ltYWwgZGlnaXRzCisg IDMuMCAgICAgICAgICAgICAgQSBkZWNpbWFsIHBvaW50IHdpdGggZGVjaW1hbCBkaWdpdHMKKyAg My4xNDE1OTI2NTMgICAgICBEaXR0bworIC00LjAgICAgICAgICAgICAgIEEgbmVnYXRpdmUgc2ln biBjYW4gYmUgaW5jbHVkZWQKKyArNS4wICAgICAgICAgICAgICBBIHBvc2l0aXZlIHNpZ24gY2Fu IGJlIGluY2x1ZGVkCisKKyAgIEV4YW1wbGVzIG9mIG5vdGF0aW9ucyB0aGF0IGFyZSBub3QgYWNj ZXB0ZWQ6CisKKyAgMSwwMDAsMDAwICAgICAgICBTZXBhcmF0b3JzIGNhbiBub3QgYmUgdXNlZAor ICAxLjAwMC4wMDAgICAgICAgIERpdHRvIChvciBtdWx0aXBsZSBkZWNpbWFsIHBvaW50cykKKyAg Ni4wMjIxMzdFMjMgICAgICBObyBzY2llbnRpZmljIG5vdGF0aW9uCisgIDYuNjI2MDY4NjhlLTM0 ICAgRGl0dG8KKyAgMTIuNSs2LjI1ICAgICAgICBObyAiYmFyZSIgZXhwcmVzc2lvbnMKKworICAg WW91IGNhbiB1c2UgSUYgRkxPQVQgdGVzdCBhIHN0cmluZyBvciB2YXJpYWJsZSB0byBzZWUgaWYg aXQncyBpbgorICAgYWNjZXB0YWJsZSBmbG9hdGluZy1wb2ludCBmb3JtYXQuIEV4YW1wbGU6CisK KyAgYXNrIFwlZiB7IFR5cGUgYSBudW1iZXI6IH0KKyAgaWYgbm90IGRlZiBcJWYgLlwlZiA9IDAu MAorICBpZiBub3QgZmxvYXQgXCVmIHN0b3AgMSBJbnZhbGlkIGZsb2F0aW5nLXBvaW50IG51bWJl cjogIlwlZiIKKworICAgQy1LZXJtaXQncyBmbG9hdGluZy1wb2ludCBzdXBwb3J0LCBsaWtlIGl0 cyBzdXBwb3J0IGZvciB3aG9sZSBudW1iZXJzCisgICAoaW50ZWdlcnMpLCByZWxpZXMgb24gdGhl IGNhcGFiaWxpdGllcyBvZiB0aGUgdW5kZXJseWluZyBjb21wdXRlci4gWW91cgorICAgY29tcHV0 ZXIgaGFzIG9ubHkgYSBsaW1pdGVkIGFtb3VudCBvZiBwcmVjaXNpb24gZm9yIG51bWJlcnMsIGRl cGVuZGluZworICAgb24gaXRzIGFyY2hpdGVjdHVyZS4gVGh1cyBmbG9hdGluZy1wb2ludCBudW1i ZXJzIHRoYXQgaGF2ZSB0b28gbWFueQorICAgZGlnaXRzIHdpbGwgbm90IGJlIGFjY3VyYXRlOyBh ZGRpbmcgYSB2ZXJ5IHNtYWxsIG51bWJlciB0byBhIHZlcnkgbGFyZ2UKKyAgIG9uZSBtaWdodCBo YXZlIG5vIGVmZmVjdCBhdCBhbGw7IGFuZCBzbyBvbi4gRm9yIGRldGFpbHMsIHJlYWQgYSB0ZXh0 IG9uCisgICBudW1lcmljYWwgYW5hbHlzaXMuIEV4YW1wbGU6CisKKyAgLlwlYSA9IDExMTExMTEx MTExMTExMTExMTExICA7IEEgbG9uZyBudW1iZXIKKyAgLlwlYiA9IDIyMjIyMjIyMjIyMjIyMjIy MjIyICA7IEFub3RoZXIgb25lCisgIGVjaG8gXGZmcGFkZChcJWEsXCViKSAgICAgICAgOyBBZGQg dGhlbSAtIHRoZSByZXN1bHQgc2hvdWxkIGJlIGFsbCAzJ3MKKyAgMzMzMzMzMzMzMzMzMzMzMzAw MDAuMCAgICAgICA7IFNlZSB0aGUgcmVzdWx0CisKKyAgIEluIHRoaXMgZXhhbXBsZSwgdGhlIGNv bXB1dGVyIGhhcyAxNiBkaWdpdHMgb2YgcHJlY2lzaW9uOyBhZnRlciB0aGF0LAorICAgdGhlIChs b3ctb3JkZXIpIGRpZ2l0cyBhcmUgc2V0IHRvIDAsIHNpbmNlIHRoZSBjb21wdXRlciBkb2Vzbid0 IGtub3cKKyAgIHdoYXQgdGhleSByZWFsbHkgYXJlLiBJbiBmYWN0LCB0aGUgY29tcHV0ZXIgcmV0 dXJucyByYW5kb20gZGlnaXRzLCBidXQKKyAgIEtlcm1pdCBzZXRzIGFsbCBkaWdpdHMgYmV5b25k IHRoZSBjb21wdXRlcidzIHByZWNpc2lvbiB0byAwLgorCisgICBDLUtlcm1pdCdzIGZsb2F0aW5n LXBvaW50IGZ1bmN0aW9ucyBoYXZlIG5hbWVzIG9mIHRoZSBmb3JtCisgICAiXGZmcHh4eChhcmdz KSIgKCJcZiIgZm9yIGZ1bmN0aW9uLCAiZnAiIGZvciBmbG9hdGluZy1wb2ludCksIHdoZXJlCisg ICAieHh4IiBpcyByZXBsYWNlZCBieSB0aGUgbmFtZSBvZiB0aGUgZnVuY3Rpb24sIHN1Y2ggYXMg InNxcnQiLCBhbmQKKyAgICJhcmdzIiBpcyB0aGUgYXJndW1lbnQgbGlzdCwgY29uc2lzdGluZyBv ZiBvbmUgb3IgdHdvIGZsb2F0aW5nLXBvaW50CisgICBudW1iZXJzIChkZXBlbmRpbmcgb24gdGhl IGZ1bmN0aW9uKSwgYW5kIGFuIG9wdGlvbmFsICJkIiBhcmd1bWVudCB0aGF0CisgICBzYXlzIG5v dyBtYW55IGRlY2ltYWwgcGxhY2VzIHNob3VsZCBiZSBzaG93biBpbiB0aGUgcmVzdWx0LiBFeGFt cGxlOgorCisgIFxmZnBkaXYoMTAsMywxKSByZXR1cm5zICIzLjMiCisgIFxmZnBkaXYoMTAsMywy KSByZXR1cm5zICIzLjMzIgorICBcZmZwZGl2KDEwLDMsMykgcmV0dXJucyAiMy4zMzMiCisKKyAg IGFuZCBzbyBvbiwgdXAgdG8gdGhlIHByZWNpc2lvbiBvZiB0aGUgY29tcHV0ZXIuIElmIHRoZSBk ZWNpbWFsLXBsYWNlcworICAgYXJndW1lbnQgaXMgbGVzcyB0aGFuIHplcm8sIHRoZSBmcmFjdGlv bmFsIHBhcnQgb2YgdGhlIHJlc3VsdCBpcworICAgdHJ1bmNhdGVkOgorCisgIFxmZnBkaXYoMTAs MywtMSkgcmV0dXJucyAiMyIuCisKKyAgIElmIHRoZSBkZWNpbWFsLXBsYWNlcyBhcmd1bWVudCBp cyAwLCBvciBpcyBvbWl0dGVkLCBDLUtlcm1pdCByZXR1cm5zIGFzCisgICBtYW55IGRlY2ltYWwg cGxhY2VzIGFzIGFyZSBtZWFuaW5nZnVsIGluIHRoZSBjb21wdXRlcidzIGZsb2F0aW5nLXBvaW50 CisgICBwcmVjaXNpb24sIHRydW5jYXRpbmcgYW55IGV4dHJhbmVvdXMgdHJhaWxpbmcgMCdzOgor CisgIFxmZnBkaXYoMTAsOCkgcmV0dXJucyAiMS4yNSIuCisgIFxmZnBkaXYoMTAsNCkgcmV0dXJu cyAiMi41Ii4KKyAgXGZmcGRpdigxMCwyKSByZXR1cm5zICI1LjAiLgorICBcZmZwZGl2KDEwLDMp IHJldHVybnMgIjMuMzMzMzMzMzMzMzMzMzMzIiAoZm9yIDE2LWRpZ2l0IHByZWNpc2lvbikuCisK KyAgIFRoZXJlIGlzIG5vIHdheSB0byByZXF1ZXN0IHRoYXQgYSBmbG9hdGluZy1wb2ludCBmdW5j dGlvbiByZXR1cm4gYQorICAgZGVjaW1hbCBwb2ludCBidXQgbm8gZGVjaW1hbCBwbGFjZXMuIEhv d2V2ZXIsIHRoaXMgaXMgZWFzeSBlbm91Z2ggdG8KKyAgIGFjY29tcGxpc2ggaW4gb3RoZXIgd2F5 cywgZm9yIGV4YW1wbGUgYnkgc3VwcGx5aW5nIGl0IG91dHNpZGUgdGhlCisgICBmdW5jdGlvbiBj YWxsOgorCisgIGVjaG8gXGZmcGFkZChcJWEsXCViLC0xKS4KKworICAgS2VybWl0J3MgZmxvYXRp bmctcG9pbnQgZnVuY3Rpb25zIGFsd2F5cyByb3VuZCB0aGUgcmVzdWx0IGZvciB0aGUKKyAgIHJl cXVlc3RlZCBudW1iZXIgb2YgZGVjaW1hbCBwbGFjZXMgd2hlbiB0aGUgImQiIGFyZ3VtZW50IGlz IGdpdmVuIGFuZAorICAgaGFzIGEgdmFsdWUgZ3JlYXRlciB0aGFuIDAgKHNlZSB0aGUgZGVzY3Jp cHRpb24gb2YgXGZmcHJvdW5kKCkganVzdAorICAgYmVsb3cpLgorCisgICBGbG9hdGluZy1wb2lu dCBhcmd1bWVudHMgY2FuIGJlIGNvbnN0YW50cyBpbiBmbG9hdGluZy1wb2ludCBmb3JtYXQgb3IK KyAgIHZhcmlhYmxlcyB3aG9zZSB2YWx1ZXMgYXJlIGZsb2F0aW5nLXBvaW50IG51bWJlcnMuIElm IGEgZmxvYXRpbmctcG9pbnQKKyAgIGFyZ3VtZW50IGlzIG9taXR0ZWQsIG9yIGlzIGEgdmFyaWFi bGUgd2l0aCBubyB2YWx1ZSwgMC4wIGlzIHN1cHBsaWVkCisgICBhdXRvbWF0aWNhbGx5LiBFeGFt cGxlOgorCisgIGRlZiBcJXggOTk5Ljk5OQorICB1bmRlZiBcJXkKKyAgZWNobyBcZmZwbWluKFwl eCxcJXkpCisgIDAuMAorCisgICBPciBlcXVpdmFsZW50bHk6CisKKyAgZWNobyBcZmZwbWluKDk5 OS45OTkpCisgIDAuMAorCisgICBUaGUgZmxvYXRpbmctcG9pbnQgZnVuY3Rpb25zIGFyZToKKwor ICAgXGZmcHJvdW5kKGYxLGQpCisgICAgICAgICAgUmV0dXJucyBmMSByb3VuZGVkIHRvIGQgZGVj aW1hbCBwbGFjZXMuIEZvciB0aGlzIGZ1bmN0aW9uIG9ubHksCisgICAgICAgICAgZCA9IDAgKG9y IGQgb21pdHRlZCkgaGFzIGEgc3BlY2lhbCBtZWFuaW5nOiByZXR1cm4gdGhlIGludGVnZXIKKyAg ICAgICAgICBwYXJ0IG9mIGYxIHJvdW5kZWQgYWNjb3JkaW5nIHRvIHRoZSBmcmFjdGlvbmFsIHBh cnQuIEV4YW1wbGVzOgorCisgIFxmZnByb3VuZCgyLjc0NjUzLC0xKSByZXR1cm5zICIyIiAoZnJh Y3Rpb24gdHJ1bmNhdGVkLCBubyByb3VuZGluZykuCisgIFxmZnByb3VuZCgyLjc0NjUzLDApICBy ZXR1cm5zICIzIiAoaW50ZWdlciBwYXJ0IGlzIHJvdW5kZWQpLgorICBcZmZwcm91bmQoMi43NDY1 MykgICAgcmV0dXJucyAiMyIgKGQgb21pdHRlZCBzYW1lIGFzIGQgPSAwKS4KKyAgXGZmcHJvdW5k KDIuNzQ2NTMsMSkgIHJldHVybnMgIjIuNyIuCisgIFxmZnByb3VuZCgyLjc0NjUzLDIpICByZXR1 cm5zICIyLjc1Ii4KKyAgXGZmcHJvdW5kKDIuNzQ2NTMsMykgIHJldHVybnMgIjIuNzQ3Ii4KKyAg XGZmcHJvdW5kKDIuNzQ2NTMsNCkgIHJldHVybnMgIjIuNzQ2NSIsIGV0Yy4KKworICAgXGZmcGFk ZChmMSxmMixkKQorICAgICAgICAgIFJldHVybnMgdGhlIHN1bSBvZiBmMSBhbmQgZjIuCisKKyAg IFxmZnBzdWJ0cmFjdChmMSxmMixkKQorICAgICAgICAgIFN1YnRyYWN0cyBmMiBmcm9tIGYxIGFu ZCByZXR1cm5zIHRoZSByZXN1bHQuCisKKyAgIFxmZnBtdWx0aXBseShmMSxmMixkKQorICAgICAg ICAgIFJldHVybnMgdGhlIHByb2R1Y3Qgb2YgZjEgYW5kIGYyLgorCisgICBcZmZwZGl2aWRlKGYx LGYyLGQpCisgICAgICAgICAgSWYgZjIgaXMgbm90IDAsIGRpdmlkZXMgZjEgYnkgZjIgYW5kIHJl dHVybnMgdGhlIHF1b3RpZW50LgorICAgICAgICAgIElmIGYyIGlzIDAsIGEgRElWSURFX0JZX1pF Uk8gZXJyb3Igb2NjdXJzLgorCisgICBcZmZwcmFpc2UoZjEsZjIsZCkKKyAgICAgICAgICBJZiBm MSA9IDAgYW5kIGYyIDw9IDAsIG9yIGlmIGYxIDwgMCBhbmQgZjIgaGFzIGEgZnJhY3Rpb25hbAor ICAgICAgICAgIHBhcnQsIGFuIEFSR19PVVRfT0ZfUkFOR0UgZXJyb3Igb2NjdXJzOyBvdGhlcndp c2UgZjEgcmFpc2VkIHRvCisgICAgICAgICAgdGhlIGYyIHBvd2VyIGlzIHJldHVybmVkLgorCisg ICBcZmZwc3FydChmMSxkKQorICAgICAgICAgIElmIGYxID49IDAsIHJldHVybnMgdGhlIHNxdWFy ZSByb290IG9mIGYxOyBvdGhlcndpc2UKKyAgICAgICAgICBBUkdfT1VUX09GX1JBTkdFLgorCisg ICBcZmZwYWJzb2x1dGUoZjEsZCkKKyAgICAgICAgICBSZXR1cm5zIHRoZSBhYnNvbHV0ZSB2YWx1 ZSBvZiBmMSAoaS5lLiBmMSB3aXRob3V0IGEgc2lnbikuIFRoaXMKKyAgICAgICAgICBpcyB0aGUg ZmxvYXRpbmctcG9pbnQgYW5hbG9nIG9mIFxmYWJzb2x1dGUobjEpLgorCisgICBcZmZwaW50KGYx KQorICAgICAgICAgIFJldHVybnMgdGhlIGludGVnZXIgcGFydCBvZiBmMS4gRXF1aXZhbGVudCB0 byBcZmZwcm91bmQoZjEsLTEpLgorCisgICBcZmZwZXhwKGYxLGQpCisgICAgICAgICAgVGhlIGJh c2Ugb2YgbmF0dXJhbCBsb2dhcml0aG1zLCBlICgyLjcxODI4Mi4uLiksIHJhaXNlZCB0byB0aGUK KyAgICAgICAgICBmMSBwb3dlci4KKworICAgXGZmcGxvZ24oZjEsZCkKKyAgICAgICAgICBUaGUg bmF0dXJhbCBsb2dhcml0aG0gb2YgZjEgKHRoZSBwb3dlciB0byB3aGljaCBlIG11c3QgYmUgcmFp c2VkCisgICAgICAgICAgdG8gb2J0YWluIGYxKS4KKworICAgXGZmcGxvZzEwKGYxLGQpCisgICAg ICAgICAgVGhlIGJhc2UtMTAgbG9nYXJpdGhtIG9mIGYxICh0aGUgcG93ZXIgdG8gd2hpY2ggMTAg bXVzdCBiZQorICAgICAgICAgIHJhaXNlZCB0byBvYnRhaW4gZjEpLgorCisgICBcZmZwbW9kdWx1 cyhmMSxmMixkKQorICAgICAgICAgIElmIGYyIGlzIG5vdCAwLCB0aGUgcmVtYWluZGVyIGFmdGVy IGRpdmlkaW5nIGYxIGJ5IGYyLgorICAgICAgICAgIElmIGYyIGlzIDAsIGEgRElWSURFX0JZX1pF Uk8gZXJyb3Igb2NjdXJzLgorICAgICAgICAgIFRoaXMgaXMgdGhlIGZsb2F0aW5nLXBvaW50IGFu YWxvZyBvZiBcZm1vZChuMSxuMikuCisKKyAgIFxmZnBtYXhpbXVtKGYxLGYyLGQpCisgICAgICAg ICAgUmV0dXJucyB0aGUgbWF4aW11bSBvZiBmMSBhbmQgZjIuIFRoaXMgaXMgdGhlIGZsb2F0aW5n LXBvaW50CisgICAgICAgICAgYW5hbG9nIG9mIFxmbWF4KG4xLG4yKS4KKworICAgXGZmcG1pbmlt dW0oZjEsZjIsZCkKKyAgICAgICAgICBSZXR1cm5zIHRoZSBtaW5pbXVtIG9mIGYxIGFuZCBmMi4g VGhpcyBpcyB0aGUgZmxvYXRpbmctcG9pbnQKKyAgICAgICAgICBhbmFsb2cgb2YgXGZtaW4objEs bjIpLgorCisgICBcZmZwc2luZShmMSxkKQorICAgICAgICAgIFJldHVybnMgdGhlIHNpbmUgb2Yg ZjEgcmFkaWFucy4KKworICAgXGZmcGNvc2luZShmMSxkKQorICAgICAgICAgIFJldHVybnMgdGhl IGNvc2luZSBvZiBmMSByYWRpYW5zLgorCisgICBcZmZwdGFuZ2VudChmMSxkKQorICAgICAgICAg IFJldHVybnMgdGhlIHRhbmdlbnQgb2YgZjEgcmFkaWFucy4KKworICAgTm90ZSB0aGF0IGFsbCBv ZiB0aGVzZSBmdW5jdGlvbnMgY2FuIGJlIHVzZWQgd2l0aCBpbnRlZ2VyIGFyZ3VtZW50cy4gSWYK KyAgIHlvdSB3YW50IGFuIGludGVnZXIgcmVzdWx0LCBzcGVjaWZ5IGQgPSAtMSAodG8gdHJ1bmNh dGUpIG9yIGZlZWQgdGhlCisgICByZXN1bHQgdG8gXGZmcHJvdW5kKHh4eCwwKSAodG8gcm91bmQp LgorCisgICBGbG9hdGluZy1wb2ludCBudW1iZXJzIChvciB2YXJpYWJsZXMgb3IgZnVuY3Rpb25z IHRoYXQgcmV0dXJuIHRoZW0pIGNhbgorICAgYmUgdXNlZCBpbiBCb29sZWFuIGV4cHJlc3Npb25z IChzZWUgWzYzNV1TZWN0aW9uIDcuMjAuMikgdGhhdCBjb21wYXJlCisgICBudW1iZXJzOgorCisg ID0geCB5CisgICE9IHggeQorICA8IHggeQorICA+IHggeQorICA8PSB4IHkKKyAgPj0geCB5CisK KyAgIEluIHRoZXNlIGV4YW1wbGVzLCB4IGFuZCB5IGNhbiBiZSBlaXRoZXIgaW50ZWdlcnMgb3Ig ZmxvYXRpbmctcG9pbnQKKyAgIG51bWJlcnMgaW4gYW55IGNvbWJpbmF0aW9uLiBJbiBhbiBhcml0 aG1ldGljIGNvbXBhcmlzb24gb2YgYW4gaW50ZWdlcgorICAgYW5kIGEgZmxvYXRpbmctcG9pbnQg bnVtYmVyLCB0aGUgaW50ZWdlciBpcyBjb252ZXJ0ZWQgdG8gZmxvYXRpbmctcG9pbnQKKyAgIGJl Zm9yZSB0aGUgY29tcGFyaXNvbiBpcyBtYWRlLiBFeGFtcGxlczoKKworICAuXCV0ID0gMy4wMDAw MDAwMDAKKyAgLlwlZiA9IDMuMTQxNTkyNjUzCisgIC5cJWkgPSAzCisKKyAgaWYgPiBcJWYgXCVp IGVjaG8gUGkgaXMgZ3JlYXRlci4KKyAgaWYgPSBcJXQgXCVpIGVjaG8gIlwlaSIgPSAiXCV0Ii4K KworICAgQSBmbG9hdGluZy1wb2ludCBudW1iZXIgY2FuIGFsc28gYmUgdXNlZCBpbjoKKworICBJ RiBudW1iZXIgY29tbWFuZAorCisgICB3aGVyZSB0aGUgY29tbWFuZCBpcyBleGVjdXRlZCBpZiB0 aGUgbnVtYmVyIGlzIG5vbnplcm8uIElmIHRoZSBudW1iZXIKKyAgIGlzIGZsb2F0aW5nLXBvaW50 LCB0aGUgY29tbWFuZCBpcyBub3QgZXhlY3V0ZWQgaWYgdGhlIG51bWJlciBpcyAwLjAsCisgICBh bmQgaXMgZXhlY3V0ZWQgb3RoZXJ3aXNlLgorCisgICBGbG9hdGluZy1wb2ludCBudW1iZXJzIGNh biBiZSBzb3J0ZWQgdXNpbmcgQVJSQVkgU09SVCAvTlVNRVJJQyAoc2VlCisgICBbNjM2XVNlY3Rp b24gNy4xMC41ICkuCisKKyAgIFR3byBmbG9hdGluZy1wb2ludCBjb25zdGFudHMgYXJlIHByb3Zp ZGVkOgorCisgIFx2KG1hdGhfcGkpID0gUGkgKDMuMTQxNTkyNjUzLi4uKQorICBcdihtYXRoX2Up ICA9IGUsIHRoZSBiYXNlIG9mIG5hdHVyYWwgbG9nYXJpdGhtcyAoMi43MTgyOC4uLikKKworICAg VGhlc2UgYXJlIGdpdmVuIHRvIHRoZSBjb21wdXRlcidzIHByZWNpc2lvbiwgZS5nLiAxNiBkaWdp dHMuIFRoaXMKKyAgIG51bWJlciBpdHNlbGYgaXMgYXZhaWxhYmxlIGluIGEgdmFyaWFibGU6CisK KyAgIFx2KG1hdGhfcHJlY2lzaW9uKQorICAgICAgICAgIEhvdyBtYW55IHNpZ25pZmljYW50IGRp Z2l0cyBpbiBhIGZsb2F0aW5nLXBvaW50IG51bWJlci4KKworICA3LjI0LiBUcmFjaW5nIFNjcmlw dCBFeGVjdXRpb24KKworICAgVGhlIFRSQUNFIGNvbW1hbmQgaXMgaGFuZHkgZm9yIGRlYnVnZ2lu ZyBzY3JpcHRzLgorCisgICBUUkFDRSBbIHsgL09OLCAvT0ZGIH0gXSBbIHsgQVNTSUdOTUVOVFMs IENPTU1BTkQtTEVWRUwsIEFMTCB9IF0KKyAgICAgICAgICBTZWxlY3RzIHRyYWNpbmcgb2YgdGhl IGdpdmVuIG9iamVjdC4KKworICAgT3B0aW9uYWwgc3dpdGNoZXMgYXJlIC9PTiBhbmQgL09GRi4g SWYgbm8gc3dpdGNoIGlzIGdpdmVuLCAvT04gaXMKKyAgIGltcGxpZWQuIFRoZSB0cmFjZSBvYmpl Y3RzIGFyZSBBU1NJR05NRU5UUywgQ09NTUFORC1MRVZFTCwgYW5kIEFMTC4gVGhlCisgICBkZWZh dWx0IG9iamVjdCBpcyBBTEwsIG1lYW5pbmcgdG8gc2VsZWN0IGFsbCB0cmFjZSBvYmplY3RzIChi ZXNpZGVzCisgICBBTEwpLiBUaHVzIFRSQUNFIGJ5IGl0c2VsZiBzZWxlY3RzIHRyYWNpbmcgb2Yg ZXZlcnl0aGluZywgYXMgZG9lcyBUUkFDRQorICAgL09OLCBhbmQgVFJBQ0UgL09GRiB0dXJucyBv ZmYgYWxsIHRyYWNpbmcuCisKKyAgIFdoZW4gdHJhY2luZyBvZiBBU1NJR05NRU5UUyBpcyBvbiwg ZXZlcnkgdGltZSB0aGUgdmFsdWUgb2YgYW55CisgICB1c2VyLWRlZmluZWQgdmFyaWFibGUgb3Ig bWFjcm8gY2hhbmdlcywgQy1LZXJtaXQgcHJpbnRzIG9uZSBvZiB0aGUKKyAgIGZvbGxvd2luZzoK KworICAgPj4+IG5hbWU6ICJ2YWx1ZSIKKyAgICAgICAgICBUaGUgbmFtZSBvZiB0aGUgdmFyaWFi bGUgb3IgbWFjcm8gZm9sbG93ZWQgYnkgdGhlIG5ldyB2YWx1ZSBpbgorICAgICAgICAgIHF1b3Rl cy4gVGhpcyBpbmNsdWRlcyBpbXBsaWNpdCBtYWNyby1wYXJhbWV0ZXIgYXNzaWdubWVudHMKKyAg ICAgICAgICBkdXJpbmcgbWFjcm8gaW52b2NhdGlvbi4KKworICAgPj4+IG5hbWU6ICh1bmRlZikK KyAgICAgICAgICBUaGlzIGluZGljYXRlcyB0aGF0IHRoZSB2YXJpYWJsZSBvciBtYWNybyBoYXMg YmVlbiB1bmRlZmluZWQuCisKKyAgIDw8PCBuYW1lOiAidmFsdWUiCisgICAgICAgICAgRm9yIFJF VFVSTiBzdGF0ZW1lbnRzOiB0aGUgbmFtZSBvZiB0aGUgbWFjcm8gYW5kIHRoZSByZXR1cm4KKyAg ICAgICAgICB2YWx1ZS4KKworICAgPDw8IG5hbWU6IChudWxsKQorICAgICAgICAgIEZvciBSRVRV Uk4gc3RhdGVtZW50cyB0aGF0IGluY2x1ZGUgbm8gdmFsdWUgb3IgYW4gZW1wdHkgdmFsdWUuCisK KyAgIFdoZW4gdHJhY2luZyBvZiBDT01NQU5ELUxFVkVMIGlzIG9uLCBDLUtlcm1pdCBwcmludHM6 CisKKyAgIFtuXSArRjogIm5hbWUiCisgICAgICAgICAgV2hlbmV2ZXIgYSBjb21tYW5kIGZpbGUg aXMgZW50ZXJlZCwgd2hlcmUgIm4iIGlzIHRoZSBjb21tYW5kCisgICAgICAgICAgbGV2ZWwgKDAg PSB0b3ApOyB0aGUgbmFtZSBvZiB0aGUgY29tbWFuZCBmaWxlIGlzIHNob3duIGluCisgICAgICAg ICAgcXVvdGVzLgorCisgICBbbl0gK006ICJuYW1lIgorICAgICAgICAgIFdoZW5ldmVyIGEgbWFj cm8gaXMgZW50ZXJlZDsgIm4iIGlzIHRoZSBjb21tYW5kIGxldmVsLiBUaGUgbmFtZQorICAgICAg ICAgIG9mIHRoZSBtYWNybyBpcyBzaG93biBpbiBxdW90ZXMuCisKKyAgIFtuXSAtRjogIm5hbWUi CisgICAgICAgICAgV2hlbmV2ZXIgYSBjb21tYW5kIGZpbGUgaXMgcmVlbnRlcmVkIGZyb20gYmVs b3csIHdoZW4gYSBtYWNybyBvcgorICAgICAgICAgIGNvbW1hbmQgZmlsZSB0aGF0IGl0IGhhcyBp bnZva2VkIGhhcyByZXR1cm5lZC4KKworICAgW25dIC1NOiAibmFtZSIKKyAgICAgICAgICBXaGVu ZXZlciBhIG1hY3JvIGlzIHJlZW50ZXJlZCBmcm9tIGJlbG93LgorCisgICBGb3Igb3RoZXIgZGVi dWdnaW5nIHRvb2xzLCBzZWUgU0hPVyBBUkdTLCBTSE9XIFNUQUNLLCBTRVQgVEFLRSwgU0VUCisg ICBNQUNSTywgYW5kIG9mIGNvdXJzZSwgRUNITy4KKworICA3LjI1LiBDb21wYWN0IFN1YnN0cmlu ZyBOb3RhdGlvbgorCisgICBJdCBpcyBvZnRlbiBkZXNpcmFibGUgdG8gZXh0cmFjdCBhIHN1YnN0 cmluZyBmcm9tIGEgc3RyaW5nIHdoaWNoIGlzCisgICBzdG9yZWQgaW4gYSB2YXJpYWJsZSwgYW5k IGZvciB0aGlzIHdlIGhhdmUgdGhlIFxmc3Vic3RyaW5nKCkgZnVuY3Rpb24sCisgICB3aGljaCBp cyB1c2VkIGxpa2UgdGhpczoKKworICBkZWZpbmUgXCVhIDEyMzQ1Njc4OTAKKyAgZWNobyBcZnN1 YnN0cmluZyhcJWEsMyw0KSA7IHN1YnN0cmluZyBmcm9tIDNyZCBjaGFyYWN0ZXIgbGVuZ3RoIDQK KyAgMzQ1NgorCisgICBvciBsaWtlIHRoaXMgd2l0aCBtYWNyby1uYW1lZCB2YXJpYWJsZXM6CisK KyAgZGVmaW5lIHN0cmluZyAxMjM0NTY3ODkwCisgIGVjaG8gXGZzdWJzdHJpbmcoXG0oc3RyaW5n KSwzLDQpCisgIDM0NTYKKworICAgQy1LZXJtaXQgNy4wIGFkZHMgYSBwYWlyIG9mIGFsdGVybmF0 aXZlIGNvbXBhY3Qgbm90YXRpb25zOgorCitcOih2YXJpYWJsZW5hbWVbc3RhcnQ6bGVuZ3RoXSkg IDwtLSBTdWJzdHJpbmcgb2YgdmFyaWFibGUncyB2YWx1ZQorXHMobWFjcm9uYW1lW3N0YXJ0Omxl bmd0aF0pICAgICA8LS0gU3Vic3RyaW5nIG9mIG1hY3JvJ3MgZGVmaW5pdGlvbgorCisgICBUaGVz ZSBhcmUgZXhhY3RseSBlcXVpdmFsZW50IHRvIHVzaW5nIFxmc3Vic3RyaW5nKCksIGV4Y2VwdCBt b3JlCisgICBjb21wYWN0IHRvIHdyaXRlIGFuZCBhbHNvIGZhc3RlciBzaW5jZSBldmFsdWF0aW9u IGlzIGluIG9uZSBzdGVwCisgICBpbnN0ZWFkIG9mIHR3by4KKworICAgVGhlICJcOigpIiBub3Rh dGlvbiBjYW4gYmUgdXNlZCB3aXRoIGFueSBLZXJtaXQgdmFyaWFibGUsIHRoYXQgaXMsCisgICBh bG1vc3QgYW55dGhpbmcgdGhhdCBzdGFydHMgd2l0aCBhIGJhY2tzbGFzaDoKKworICBcOihcJWFb Mjo2XSkgICAgICA8LS0gZXF1aXZhbGVudCB0byBcZnN1YnN0cmluZyhcJWEsMiw2KQorICBcOihc JnhbMV1bMjo2XSkgICA8LS0gZXF1aXZhbGVudCB0byBcZnN1YnN0cmluZyhcJnhbMV0sMiw2KQor ICBcOihcbShmb28pWzI6Nl0pICA8LS0gZXF1aXZhbGVudCB0byBcZnN1YnN0cmluZyhcbShmb28p LDIsNikKKyAgXDooXHYodGltZSlbMjo2XSkgPC0tIGVxdWl2YWxlbnQgdG8gXGZzdWJzdHJpbmco XHYodGltZSksMiw2KQorICBcOihcJChURVJNKVsyOjZdKSA8LS0gZXF1aXZhbGVudCB0byBcZnN1 YnN0cmluZyhcJChURVJNKSwyLDYpCisgIFw6KEFCQ0RFRkdIWzI6Nl0pIDwtLSBlcXVpdmFsZW50 IHRvIFxmc3Vic3RyaW5nKEFCQ0RFRkdILDIsNikKKworICAgV2hhdGV2ZXIgYXBwZWFycyBiZXR3 ZWVuIHRoZSBsZWZ0IHBhcmVudGhlc2lzIGFuZCB0aGUgbGVmdCBicmFja2V0IGlzCisgICBldmFs dWF0ZWQgYW5kIHRoZW4gdGhlIGluZGljYXRlZCBzdWJzdHJpbmcgb2YgdGhlIHJlc3VsdCBpcyBy ZXR1cm5lZC4KKworICAgVGhlICJccygpIiBub3RhdGlvbiBpcyB0aGUgc2FtZSwgZXhjZXB0IGFm dGVyIGV2YWx1YXRpbmcgdGhlIHZhcmlhYmxlLAorICAgdGhlIHJlc3VsdCBpcyB0cmVhdGVkIGFz IGEgbWFjcm8gbmFtZSBhbmQgaXMgbG9va2VkIHVwIGluIHRoZSBtYWNybworICAgdGFibGUuIFRo ZW4gdGhlIGluZGljYXRlZCBzdWJzdHJpbmcgb2YgdGhlIG1hY3JvIGRlZmluaXRpb24gaXMKKyAg IHJldHVybmVkLiBFeGFtcGxlOgorCisgIGRlZmluZSB0ZXN0aW5nIGFiY2RlZmdoaWprbG1ub3Bx cnN0dXZ3eHl6CisgIGRlZmluZSBcJWEgdGVzdGluZworCisgIFxzKHRlc3RpbmdbMjo2XSkgIC0t PiAgYmNkZWZnCisgIFw6KHRlc3RpbmdbMjo2XSkgIC0tPiAgZXN0aW5nCisgIFw6KFwlYVsyOjZd KSAgICAgIC0tPiAgZXN0aW5nCisgIFxzKFwlYVsyOjZdKSAgICAgIC0tPiAgYmNkZWZnCisKKyAg IE5vdGUgdGhhdCB0aGUgZm9sbG93aW5nIHR3byBleGFtcGxlcyBhcmUgZXF1aXZhbGVudDoKKwor ICBcOihcbShmb28pWzI6Nl0pCisgIFxzKGZvb1syOjZdKQorCisgICBUaGUgZmlyc3QgbnVtYmVy IGluIHRoZSBicmFja2V0cyBpcyB0aGUgMS1iYXNlZCBzdGFydGluZyBwb3NpdGlvbi4gSWYKKyAg IGl0IGlzIG9taXR0ZWQsIG9yIGxlc3MgdGhhbiAxLCBpdCBpcyB0cmVhdGVkIGFzIDEuIElmIGl0 IGlzIGdyZWF0ZXIKKyAgIHRoYW4gdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nLCBhbiBlbXB0eSBz dHJpbmcgaXMgcmV0dXJuZWQuCisKKyAgIFRoZSBzZWNvbmQgbnVtYmVyIGlzIHRoZSBsZW5ndGgg b2YgdGhlIGRlc2lyZWQgc3Vic3RyaW5nLiBJZiB0aGUgc2Vjb25kCisgICBudW1iZXIgaXMgb21p dHRlZCwgaXMgbGVzcyB0aGFuIDAsIG9yIHdvdWxkIGJlIHBhc3QgdGhlIGVuZCBvZiB0aGUKKyAg IHN0cmluZywgdGhlbiAidGhyb3VnaCB0aGUgZW5kIG9mIHRoZSBzdHJpbmciIGlzIGFzc3VtZWQu IElmIGl0IGlzIDAsCisgICB0aGUgZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkLgorCisgICBJZiB0 aGUgYnJhY2tldHMgYXJlIGVtcHR5IG9yIG9taXR0ZWQsIHRoZSBvcmlnaW5hbCBzdHJpbmcgaXMg cmV0dXJuZWQuCisKKyAgIFRoZSBzdGFydGluZyBwb3NpdGlvbiBhbmQgbGVuZ3RoIG5lZWQgbm90 IGJlIGxpdGVyYWwgbnVtYmVyczsgdGhleSBjYW4KKyAgIGFsc28gYmUgdmFyaWFibGVzLCBmdW5j dGlvbnMsIGFyaXRobWV0aWMgZXhwcmVzc2lvbnMsIG9yIGV2ZW4gb3RoZXIKKyAgIFxzKCkgb3Ig XDooKSBxdWFudGl0aWVzOyBhbnl0aGluZyB0aGF0IGV2YWx1YXRlcyB0byBhIG51bWJlciwgZm9y CisgICBleGFtcGxlOgorCisgIFxzKGJsb2NrWzEwMjU6XGZoZXgybihccyhibG9ja1tcJWI6XCVu KzRdKSkvMl0pCisKKyAgIFN5bnRhY3RpY2FsbHksIFxtKG5hbWUpIGFuZCBccyhuYW1lKSBkaWZm ZXIgb25seSBpbiB0aGF0IHRoZSBzZXF1ZW5jZQorICAgWypdIGF0IHRoZSBlbmQgb2YgdGhlIG5h bWUgKHdoZXJlICogaXMgYW55IHNlcXVlbmNlIG9mIDAgb3IgbW9yZQorICAgY2hhcmFjdGVycykg aXMgdHJlYXRlZCBhcyBzdWJzdHJpbmcgbm90YXRpb24gaW4gXHMobmFtZSksIGJ1dCBpcworICAg Y29uc2lkZXJlZCBwYXJ0IG9mIHRoZSBuYW1lIGluIFxtKG5hbWUpICh0byBzZWUgd2h5LCBzZWUg WzYzN11TZWN0aW9uCisgICA3LjEwLjkpLgorCisgIDcuMjYuIE5ldyBXQUlUIENvbW1hbmQgT3B0 aW9ucworCisgICBUaGUgV0FJVCBjb21tYW5kIGhhcyBiZWVuIGV4dGVuZGVkIHRvIGFsbG93IHdh aXRpbmcgZm9yIGRpZmZlcmVudCBraW5kcworICAgb2YgdGhpbmdzIChmb3JtZXJseSBpdCBvbmx5 IHdhaXRlZCBmb3IgbW9kZW0gc2lnbmFscykuIE5vdyBpdCBhbHNvIGNhbgorICAgd2FpdCBmb3Ig ZmlsZSBldmVudHMuCisKKyAgICA3LjI2LjEuIFdhaXRpbmcgZm9yIE1vZGVtIFNpZ25hbHMKKwor ICAgVGhlIHByZXZpb3VzIHN5bnRheDoKKworICBXQUlUIHRpbWUgeyBDRCwgRFNSLCBSVFMsIFJJ LCAuLi4gfQorCisgICBoYXMgY2hhbmdlZCB0bzoKKworICBXQUlUIHRpbWUgTU9ERU0tU0lHTkFM UyB7IENELCBEU1IsIFJUUywgUkksIC4uLiB9CisKKyAgIEhvd2V2ZXIsIHRoZSBwcmV2aW91cyBz eW50YXggaXMgc3RpbGwgYWNjZXB0ZWQuIFRoZSBiZWhhdmlvciBpcyB0aGUKKyAgIHNhbWUgaW4g ZWl0aGVyIGNhc2UuCisKKyAgICA3LjI2LjIuIFdhaXRpbmcgZm9yIEZpbGUgRXZlbnRzCisKKyAg IFRoZSBuZXcgV0FJVCBvcHRpb246CisKKyAgV0FJVCB0aW1lIEZJTEUgeyBDUkVBVElPTiwgREVM RVRJT04sIE1PRElGSUNBVElPTiB9IGZpbGVuYW1lCisKKyAgIGxldHMgeW91IHRlbGwgS2VybWl0 IHRvIHdhaXQgdGhlIGdpdmVuIGFtb3VudCBvZiB0aW1lIChvciB1bnRpbCB0aGUKKyAgIGdpdmVu IHRpbWUgb2YgZGF5KSBmb3IgYSBmaWxlIHdob3NlIG5hbWUgaXMgZmlsZW5hbWUgdG8gYmUgY3Jl YXRlZCwKKyAgIGRlbGV0ZWQsIG9yIG1vZGlmaWVkLCByZXNwZWN0aXZlbHkuIFRoZSBmaWxlbmFt ZSBtYXkgbm90IGNvbnRhaW4KKyAgIHdpbGRjYXJkcy4gSWYgdGhlIHNwZWNpZmllZCBldmVudCBk b2VzIG5vdCBvY2N1ciB3aXRoaW4gdGhlIHRpbWUgbGltaXQsCisgICBvciBpZiBXQUlUIENBTkNF TExBVElPTiBpcyBPTiBhbmQgeW91IGludGVycnVwdCBmcm9tIHRoZSBrZXlib2FyZAorICAgYmVm b3JlIHRoZSB0aW1lIGlzIHVwLCB0aGUgV0FJVCBjb21tYW5kIGZhaWxzLiBJZiB0aGUgZXZlbnQg aXMKKyAgIE1PRElGSUNBVElPTiBhbmQgdGhlIGZpbGUgZG9lcyBub3QgZXhpc3QsIHRoZSBjb21t YW5kIGZhaWxzLiBPdGhlcndpc2UsCisgICBpZiB0aGUgZ2l2ZW4gZXZlbnQgb2NjdXJzIHdpdGhp biB0aGUgdGltZSBsaW1pdCwgdGhlIGNvbW1hbmQgc3VjY2VlZHMuCisgICBFeGFtcGxlczoKKwor ICAgV0FJVCA2MDAgRklMRSBERUxFVElPTiBvb2ZhLnRtcAorICAgICAgICAgIFdhaXQgdXAgdG8g MTAgbWludXRlcyBmb3IgZmlsZSBvb2ZhLnRtcCB0byBkaXNhcHBlYXIuCisKKyAgIFdBSVQgMjM6 NTk6NTkgRklMRSBNT0Qgb3JkZXJzLmRiCisgICAgICAgICAgV2FpdCB1bnRpbCBqdXN0IGJlZm9y ZSBtaWRuaWdodCBmb3IgdGhlIG9yZGVycy5kYiBmaWxlIHRvIGJlCisgICAgICAgICAgY2hhbmdl ZC4KKworICAgRXhhbXBsZTogU3VwcG9zZSB5b3Ugd2FudCB0byBoYXZlIHRoZSBjdXJyZW50IGNv cHkgb2YgL2V0Yy9tb3RkIG9uIHlvdXIKKyAgIHNjcmVlbiBhdCBhbGwgdGltZXMsIGFuZCB5b3Ug d2FudCB0byBoZWFyIGEgYmVsbCB3aGVuZXZlciBpdCBjaGFuZ2VzOgorCisgIGRlZiBcJWYgL2V0 Yy9tb3RkICAgICAgICAgICAgICAgICAgICAgIDsgVGhlIGZpbGUgb2YgaW50ZXJlc3QuCisgIHdo aWxlIDEgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgTG9vcCBmb3JldmVyLi4uCisg ICAgICBjbHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgQ2xlYXIgdGhlIHNjcmVl bi4KKyAgICAgIGVjaG8gXCVmOiBcdihkYXRlKSBcdih0aW1lKS4uLiAgICAgOyBQcmludCAyLWxp bmUgaGVhZGluZy4uLgorICAgICAgZWNobworICAgICAgaWYgKCBub3QgZXhpc3QgXCVmICkgeyAg ICAgICAgICAgICA7IElmIGZpbGUgZG9lc24ndCBleGlzdCwKKyAgICAgICAgICBlY2hvIFwlZiBk b2VzIG5vdCBleGlzdC4uLiAgICAgOyBwcmludCBtZXNzYWdlLAorICAgICAgICAgIHdhaXQgNjAw IGZpbGUgY3JlYXQgXCVmICAgICAgICA7IGFuZCB3YWl0IGZvciBpdCB0byBhcHBlYXIuCisgICAg ICAgICAgY29udGludWUKKyAgICAgIH0KKyAgICAgIGJlZXAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOyBTb21ldGhpbmcgbmV3IC0gYmVlcC4KKyAgICAgIHR5cGUgL2hlYWQ6XHYocm93 cy0yKSBcJWYgICAgICAgICAgOyBEaXNwbGF5IHRoZSBmaWxlCisgICAgICBpZiBmYWlsIGV4aXQg MSBcJWY6IFxmZXJyc3RyaW5nKCkgIDsgKGNoZWNraW5nIGZvciBlcnJvcnMpLgorICAgICAgd2Fp dCA5OTkgZmlsZSBtb2QgXCVmICAgICAgICAgICAgICA7IFdhaXQgZm9yIGl0IHRvIGNoYW5nZS4K KyAgfQorCisgICBUaGlzIG5vdGljZXMgd2hlbiB0aGUgZmlsZSBpcyBjcmVhdGVkLCBkZWxldGVk LCBvciBtb2RpZmllZCwgYW5kIGFjdHMKKyAgIG9ubHkgdGhlbiAob3Igd2hlbiB5b3UgaW50ZXJy dXB0IGl0IHdpdGgpOyB0aGUgdGltZSBzaG93biBpbiB0aGUKKyAgIGhlYWRpbmcgaXMgdGhlIHRp bWUgb2YgdGhlIG1vc3QgcmVjZW50IGV2ZW50IChpbmNsdWRpbmcgd2hlbiB0aGUKKyAgIHByb2dy YW0gc3RhcnRlZCkuCisKKyAgIFNlZSBbNjM4XVNlY3Rpb24gMS4xMCwgd2hlcmUgdGhlIFx2KGti Y2hhcikgdmFyaWFibGUgaXMgZXhwbGFpbmVkLiBUaGlzCisgICBsZXRzIHlvdSBtb2RpZnkgYSBs b29wIGxpa2UgdGhlIG9uZSBhYm92ZSB0byBhbHNvIGFjY2VwdAorICAgc2luZ2xlLWNoYXJhY3Rl ciBjb21tYW5kcywgd2hpY2ggaW50ZXJydXB0IHRoZSBXQUlULCBhbmQgZGlzcGF0Y2gKKyAgIGFj Y29yZGluZ2x5LiBGb3IgZXhhbXBsZToKKworICB3YWl0IDk5OSBmaWxlIG1vZCBcJWYgICAgICAg ICAgICAgIDsgV2FpdCBmb3IgdGhlIGZpbGUgdG8gY2hhbmdlLgorICBpZiBkZWZpbmVkIFx2KGti Y2hhcikgeyAgICAgICAgICAgIDsgSW50ZXJydXB0ZWQgZnJvbSBrZXlib2FyZD8KKyAgICAgIHN3 aXRjaCBcdihrYmNoYXIpIHsgICAgICAgICAgICA7IEhhbmRsZSB0aGUga2V5c3Ryb2tlLi4uCisg ICAgICAgIDpxLCBleGl0ICAgICAgICAgICAgICAgICAgICAgOyBRIHRvIFF1aXQKKyAgICAgICAg OmgsIGVjaG8gYmxhaCBibGFoLCBicmVhayAgICA7IEggZm9yIEhlbHAKKyAgICAgICAgOmRlZmF1 bHQsIGJlZXAsIGNvbnRpbnVlICAgICA7IEFueXRoaW5nIGVsc2UgYmVlcCBhbmQgaWdub3JlCisg ICAgICB9CisgIH0KKworICAgVGhpcyBsZXRzIHlvdSB3cml0ZSBldmVudC1kcml2ZW4gYXBwbGlj YXRpb25zIHRoYXQgd2FpdCBmb3IgdXAgdG8gdGhyZWUKKyAgIGV2ZW50cyBhdCBvbmNlOiBhIGZp bGUgb3IgbW9kZW0gZXZlbnQsIGEgdGltZW91dCwgYW5kIGEga2V5c3Ryb2tlLgorCisgIDcuMjcu IFJlbGF4ZWQgRk9SIGFuZCBTV0lUQ0ggU3ludGF4CisKKyAgIEZvciBjb25zaXN0ZW5jeSB3aXRo IHRoZSBleHRlbmRlZCBJRiBhbmQgV0hJTEUgc3ludGF4LCB0aGUgRk9SIGFuZAorICAgU1dJVENI IGNvbnRyb2wgbGlzdHMgbWF5IChidXQgbmVlZCBub3QgYmUpIGVuY2xvc2VkIGluIHBhcmVudGhl c2VzOgorCisgIEZPUiAoIFwlaSAxIFwlbiAxICkgeyBjb21tYW5kLWxpc3QuLi4gfQorICBTV0lU Q0ggKCBcJWMgKSB7IGNvbW1hbmQtbGlzdC4uLiB9CisKKyAgIEluIHRoZSBGT1IgY29tbWFuZCwg dGhlIGluY3JlbWVudCBpdGVtIGNhbiBiZSBvbWl0dGVkIGlmIHRoZSBjb250cm9sCisgICBsaXN0 IGlzIGVuY2xvc2VkIGluIHBhcmVudGhlc2VzLCBpbiB3aGljaCBjYXNlIHRoZSBpbmNyZW1lbnQg ZGVmYXVsdHMKKyAgIGFwcHJvcHJpYXRlbHkgdG8gMSBvciAtMSwgZGVwZW5kaW5nIG9uIHRoZSB2 YWx1ZXMgb2YgdGhlIGZpcnN0IHR3bworICAgdmFyaWFibGVzLgorCisgICBBcyB3aXRoIElGLCB0 aGUgcGFyZW50aGVzZXMgYXJvdW5kIHRoZSBGT1ItY29tbWFuZCBjb250cm9sIGxpc3QgbXVzdCBi ZQorICAgc2V0IG9mZiBieSBzcGFjZXMgKGluIHRoZSBTV0lUQ0ggY29tbWFuZCwgdGhlIHNwYWNl cyBhcmUgbm90IHJlcXVpcmVkCisgICBzaW5jZSB0aGUgU1dJVENIIGV4cHJlc3Npb24gaXMgYSBz aW5nbGUgYXJpdGhtZXRpYyBleHByZXNzaW9uKS4KKworICAgQWxzbywgb3V0ZXIgYnJhY2VzIGFy b3VuZCB0aGUgY29tbWFuZCBsaXN0IGFyZSBzdXBwbGllZCBhdXRvbWF0aWNhbGx5CisgICBpZiB5 b3Ugb21pdCB0aGVtLCBlLmcuOgorCisgIEZPUiAoIFwlaSAxICVuIDEgKSBlY2hvIFwlaQorCisg IDguIFVTSU5HIE9USEVSIEZJTEUgVFJBTlNGRVIgUFJPVE9DT0xTCisKKyAgIEluIEMtS2VybWl0 IDcuMCwgYWx0ZXJuYXRpdmUgcHJvdG9jb2xzIGNhbiBiZSBzZWxlY3RlZCB1c2luZyBzd2l0Y2hl cy4KKyAgIFN3aXRjaGVzIGFyZSBkZXNjcmliZWQgaW4gWzYzOV1TZWN0aW9uIDEuNTsgdGhlIHVz ZSBvZgorICAgcHJvdG9jb2wtc2VsZWN0aW9uIHN3aXRjaGVzIGlzIGRlc2NyaWJlZCBpbiBbNjQw XVNlY3Rpb24gNC43LjEuCisgICBFeGFtcGxlOgorCisgIHNlbmQgL2JpbmFyeSAvcHJvdG9jb2w6 em1vZGVtIHgudGFyLmd6CisKKyAgIE5vdGUgdGhhdCBmaWxlIHRyYW5zZmVyIHJlY292ZXJ5IHdv cmtzIG9ubHkgd2l0aCBLZXJtaXQgYW5kIFptb2RlbQorICAgcHJvdG9jb2xzLiBXaXRoIFptb2Rl bSwgcmVjb3ZlcnkgY2FuIGJlIGluaXRpYXRlZCBvbmx5IGJ5IHRoZSBzZW5kZXIuCisKKyAgIE9u bHkgcHJlLTE5ODggdmVyc2lvbnMgb2YgdGhlIHB1YmxpY2x5LWRpc3RyaWJ1dGVkIHN6L3J6IHBy b2dyYW1zIHVzZQorICAgU3RhbmRhcmQgSS9POyB0aG9zZSByZWxlYXNlZCBsYXRlciB0aGFuIHRo YXQgZG8gbm90IHVzZSBTdGFuZGFyZCBJL08KKyAgIGFuZCB0aGVyZWZvcmUgZG8gbm90IHdvcmsg d2l0aCBSRURJUkVDVC4gSG93ZXZlciwgT21lbiBUZWNobm9sb2d5IGRvZXMKKyAgIG9mZmVyIGFu IHVwLXRvLWRhdGUgcmVkaXJlY3RhYmxlIHZlcnNpb24gY2FsbGVkIGNyenN6LCB3aGljaCBtdXN0 IGJlCisgICBsaWNlbnNlZCBmb3IgdXNlOgorCisgICAgICJVbml4IENyeiBhbmQgQ3N6IHN1cHBv cnQgWE1PREVNLCBZTU9ERU0sIGFuZCBaTU9ERU0gdHJhbnNmZXJzIHdoZW4KKyAgICAgY2FsbGVk IGJ5IGRpYWwtb3V0IHByb2dyYW1zIHN1Y2ggYXMgS2VybWl0IGFuZCBjZXJ0YWluIHZlcnNpb25z IG9mCisgICAgIGN1KDEpLiBUaGV5IGFyZSBjbGllbnRzIGRlc2lnbmVkIGZvciB0aGlzIHVzZS4K KworICAgICAiQ3J6IGFuZCBDc3ogYXJlIENvcHlyaWdodGVkIHNoYXJld2FyZSBwcm9ncmFtcy4g VXNlIG9mIHRoZXNlCisgICAgIHByb2dyYW1zIGJleW9uZCBhIGJyaWVmIGV2YWx1YXRpb24gcGVy aW9kIHJlcXVpcmVzIHJlZ2lzdHJhdGlvbi4KKyAgICAgUGxlYXNlIHByaW50IHRoZSAibWFpbGVy LnJ6IiBmaWxlLCBmaWxsIG91dCB0aGUgZm9ybSBhbmQgcmV0dXJuIHNhbWUKKyAgICAgd2l0aCB5 b3VyIHJlZ2lzdHJhdGlvbi4iCisKKyAgIFRvIHVzZSB0aGUgY3J6c3ogcHJvZ3JhbXMgYXMgeW91 ciBleHRlcm5hbCBYWVpNT0RFTSBwcm9ncmFtcyBpbgorICAgQy1LZXJtaXQsIGZvbGxvdyB0aGUg aW5zdHJ1Y3Rpb25zIGluIHRoZSBib29rLCBidXQgcHV0IGEgImMiIGJlZm9yZQorICAgZWFjaCBj b21tYW5kLCBlLmcuOgorCisgIHNldCBwcm90b2NvbCB6bW9kZW0ge2NzeiAlc30ge2NzeiAtYSAl c30gY3J6IGNyeiBjcnogY3J6CisKKyAgIFRvIHVzZSBabW9kZW0gcHJvdG9jb2wgb3ZlciBUZWxu ZXQgb3Igb3RoZXIgbm9uLXRyYW5zcGFyZW50CisgICBjb25uZWN0aW9ucywgeW91IG1pZ2h0IG5l ZWQgdG8gYWRkIHRoZSAtZSAoRXNjYXBlKSBvcHRpb246CisKKyAgc2V0IHByb3RvY29sIHptb2Rl bSB7Y3N6IC1lICVzfSB7Y3N6IC1lIC1hICVzfSBjcnogY3J6IGNyeiBjcnoKKworICA5LiBDT01N QU5ELUxJTkUgT1BUSU9OUworCisgIDkuMC4gRXh0ZW5kZWQtRm9ybWF0IENvbW1hbmQtTGluZSBP cHRpb25zCisKKyAgIFN0YW5kYXJkIFVOSVggY29tbWFuZCBsaW5lIG9wdGlvbnMgYXJlIGEgc2lu Z2xlIGxldHRlci4gQy1LZXJtaXQgaGFzCisgICBydW4gb3V0IG9mIGxldHRlcnMsIHNvIG5ldyBv cHRpb25zIGFyZSBpbiBhIG5ldyBleHRlbmRlZCBmb3JtYXQ6CisKKyAtLXdvcmRbOmFyZ10KKwor ICAgd2hlcmUgYSBrZXl3b3JkIChyYXRoZXIgdGhhbiBhIHNpbmdsZSBsZXR0ZXIpIHNwZWNpZmll cyB0aGUgZnVuY3Rpb24sCisgICBhbmQgaWYgYW4gYXJndW1lbnQgaXMgdG8gYmUgaW5jbHVkZWQs IGl0IGlzIHNlcGFyYXRlZCBieSBhIGNvbG9uIChvcgorICAgZXF1YWwgc2lnbikuIE1vc3Qgb2Yg dGhlIG5ldyBleHRlbmRlZC1mb3JtYXQgY29tbWFuZC1saW5lIG9wdGlvbnMgYXJlCisgICBvbmx5 IGZvciB1c2Ugd2l0aCB0aGUgSW50ZXJuZXQgS2VybWl0IFNlcnZpY2UgRGFlbW9uOyBzZWUgdGhl IFs2NDFdSUtTRAorICAgQWRtaW5pc3RyYXRpb24gR3VpZGUgZm9yIGRldGFpbHMuIEhvd2V2ZXIs IHNldmVyYWwgb2YgdGhlbSBhcmUgYWxzbworICAgZ2VuZXJhbCBpbiBuYXR1cmU6CisKKyAgIC0t bm9pbnRlcnJ1cHRzCisgICAgICAgICAgRGlzYWJsZXMga2V5Ym9hcmQgaW50ZXJydXB0cyB0aGF0 IGFyZSBub3JtYWxseSBlbmFibGVkLCB3aGljaAorICAgICAgICAgIGFyZSB1c3VhbGx5IEN0cmwt QyAodG8gaW50ZXJydXB0IGEgY29tbWFuZCkgYW5kIEN0cmwtWiAoVU5JWAorICAgICAgICAgIG9u bHksIHRvIHN1c3BlbmQgQy1LZXJtaXQpLgorCisgICAtLWhlbHAKKyAgICAgICAgICBMaXN0cyB0 aGUgZXh0ZW5kZWQgY29tbWFuZC1saW5lIG9wdGlvbnMgdGhhdCBhcmUgYXZhaWxhYmxlIGluCisg ICAgICAgICAgeW91ciB2ZXJzaW9uIG9mIEMtS2VybWl0LiBJZiBhbnkgb3B0aW9ucyBzZWVtIHRv IGJlIG1pc3NpbmcsCisgICAgICAgICAgdGhhdCBpcyBiZWNhdXNlIHlvdXIgY29weSBvZiBDLUtl cm1pdCB3YXMgYnVpbHQgd2l0aAorICAgICAgICAgIGNvbXBpbGUtdGltZSBvcHRpb25zIHRvIGRl c2VsZWN0IHRoZW0uCisKKyAgIC0taGVscGZpbGU6ZmlsZW5hbWUKKyAgICAgICAgICBTcGVjaWZp ZXMgdGhlIG5hbWUgb2YgYSBmaWxlIHRvIGJlIGRpc3BsYXllZCBpZiB0aGUgdXNlciB0eXBlcwor ICAgICAgICAgIEhFTFAgKG5vdCBmb2xsb3dlZCBieSBhIHNwZWNpZmljIGNvbW1hbmQgb3IgdG9w aWMpLCBpbiBwbGFjZSBvZgorICAgICAgICAgIHRoZSBidWlsdC1pbiB0b3AtbGV2ZWwgaGVscCB0 ZXh0LiBUaGUgZmlsZSBuZWVkIG5vdCBmaXQgb24gb25lCisgICAgICAgICAgc2NyZWVuOyBtb3Jl LXByb21wdGluZyBpcyB1c2VkIGlmIHRoZSBmaWxlIGlzIG1vcmUgdGhhbiBvbmUKKyAgICAgICAg ICBzY3JlZW4gbG9uZyBpZiBDT01NQU5EIE1PUkUtUFJPTVBUSU5HIGlzIE9OLCBhcyBpdCBpcyBi eQorICAgICAgICAgIGRlZmF1bHQuCisKKyAgIC0tYmFubmVyZmlsZTpmaWxlbmFtZQorICAgICAg ICAgIFRoZSBuYW1lIG9mIGEgZmlsZSBjb250YWluaW5nIGEgbWVzc2FnZSB0byBiZSBwcmludGVk IGFmdGVyIHRoZQorICAgICAgICAgIHVzZXIgbG9ncyBpbiwgaW4gcGxhY2Ugb2YgdGhlIG5vcm1h bCBtZXNzYWdlIChDb3B5cmlnaHQgbm90aWNlLAorICAgICAgICAgICJUeXBlIEhFTFAgb3IgPyBm b3IgaGVscCIsICJEZWZhdWx0IHRyYW5zZmVyIG1vZGUgaXMuLi4iLCBldGMpLgorCisgICAtLWNk bWVzc2FnZTp7b24sb2ZmLDAsMSwyfQorICAgICAgICAgIEZvciB1c2UgaW4gdGhlIFNlcnZlci1T aWRlIFNlcnZlciBjb25maWd1cmF0aW9uOyB3aGVuZXZlciB0aGUKKyAgICAgICAgICBjbGllbnQg dGVsbHMgdGhlIHNlcnZlciB0byBjaGFuZ2UgZGlyZWN0b3J5LCB0aGUgc2VydmVyIHNlbmRzCisg ICAgICAgICAgdGhlIGNvbnRlbnRzIG9mIGEgInJlYWQgbWUiIGZpbGUgdG8gdGhlIGNsaWVudCdz IHNjcmVlbi4gVGhpcworICAgICAgICAgIGZlYXR1cmUgaXMgT24gYnkgZGVmYXVsdCwgYW5kIG9w ZXJhdGVzIG9ubHkgaW4gY2xpZW50L3NlcnZlcgorICAgICAgICAgIG1vZGUgd2hlbiBPTiBvciAx LiBJZiBzZXQgdG8gMiBvciBoaWdoZXIsIGl0IGFsc28gb3BlcmF0ZXMgd2hlbgorICAgICAgICAg IHRoZSBDRCBjb21tYW5kIGlzIGdpdmVuIGF0IHRoZSBJS1NEPiBwcm9tcHQuIFN5bm9ueW06IC0t Y2Rtc2cuCisKKyAgIC0tY2RmaWxlOmZpbGVuYW1lCisgICAgICAgICAgV2hlbiBjZG1lc3NhZ2Ug aXMgb24sIHRoaXMgaXMgdGhlIG5hbWUgb2YgdGhlICJyZWFkIG1lIiBmaWxlIHRvCisgICAgICAg ICAgYmUgc2VudC4gTm9ybWFsbHkgeW91IHdvdWxkIHNwZWNpZnkgYSByZWxhdGl2ZSAobm90IGFi c29sdXRlKQorICAgICAgICAgIG5hbWUsIHNpbmNlIHRoZSBmaWxlIGlzIG9wZW5lZCB1c2luZyB0 aGUgbGl0ZXJhbCBuYW1lIHlvdQorICAgICAgICAgIHNwZWNpZmllZCwgYWZ0ZXIgY2hhbmdpbmcg dG8gdGhlIG5ldyBkaXJlY3RvcnkuIEV4YW1wbGU6CisKKyAgLS1jZGZpbGU6UkVBRC5NRQorCisg ICAgICAgICAgWW91IGNhbiBhbHNvIGdpdmUgYSBsaXN0IG9mIHVwIHRvIDggZmlsZW5hbWVzIGJ5 IChhKSBlbmNsb3NpbmcKKyAgICAgICAgICBlYWNoIGZpbGVuYW1lIGluIGJyYWNlcywgYW5kIChi KSBlbmNsb3NpbmcgdGhlIGVudGlyZSBsaXN0IGluCisgICAgICAgICAgYnJhY2VzLiBFeGFtcGxl OgorICAgICAgICAgIC0tY2RmaWxlOnt7Li8ucmVhZG1lfXtSRUFELk1FfXthYWFyZWFkbWUudHh0 fXtSRUFETUV9e3JlYWQtdGhpcy0KKyAgICAgICAgICBmaXJzdH19IFdoZW4gYSBsaXN0IGlzIGdp dmVuLCBpdCBpcyBzZWFyY2hlZCBmcm9tIGxlZnQgdG8gcmlnaHQKKyAgICAgICAgICBhbmQgdGhl IGZpcnN0IGZpbGUgZm91bmQgaXMgZGlzcGxheWVkLiBUaGUgZGVmYXVsdCBsaXN0IGZvciBVTklY CisgICAgICAgICAgaXM6CisKKyAge3suLy5yZWFkbWV9e1JFQURNRS5UWFR9e1JFQUQuTUV9fQor CisgIDkuMS4gQ29tbWFuZCBMaW5lIFBlcnNvbmFsaXRpZXMKKworICAgQmVnaW5uaW5nIGluIHZl cnNpb24gNy4wLCBpZiB0aGUgQy1LZXJtaXQgYmluYXJ5IGlzIHJlbmFtZWQgdG8gInRlbG5ldCIK KyAgIChvciBURUxORVQuRVhFLCB0ZWxuZXQucHIsIGV0YywgZGVwZW5kaW5nIG9uIHRoZSBwbGF0 Zm9ybSksIGl0IGFjY2VwdHMKKyAgIHRoZSBUZWxuZXQgY29tbWFuZCBsaW5lOgorCisgIHRlbG5l dCBbIGhvc3QgWyBwb3J0IF0gXQorCisgICBJbiBVbml4LCB5b3UgY2FuIGFjaGlldmUgdGhlIHNh bWUgZWZmZWN0IHdpdGggYSBzeW1saW5rOgorCisgIGNkIC91c3IvYmluCisgIG12IHRlbG5ldCBv bGR0ZWxuZXQKKyAgbG4gLWxzIC91c3IvbG9jYWwvYmluL2tlcm1pdCB0ZWxuZXQKKworICAgV2hl biBpbnN0YWxsZWQgaW4gdGhpcyBtYW5uZXIsIEMtS2VybWl0IGFsd2F5cyByZWFkcyBpdHMgaW5p dGlhbGl6YXRpb24KKyAgIGZpbGUuIElmIG5vIGhvc3QgKGFuZCB0aGVyZWZvcmUgbm8gcG9ydCkg aXMgZ2l2ZW4sIEMtS2VybWl0IHN0YXJ0cyBpbgorICAgaW50ZXJhY3RpdmUgcHJvbXB0aW5nIG1v ZGUuIElmIGEgaG9zdCBpcyBnaXZlbiBhcyB0aGUgZmlyc3QKKyAgIGNvbW1hbmQtbGluZSBhcmd1 bWVudCwgQy1LZXJtaXQgbWFrZXMgYSBjb25uZWN0aW9uIHRvIGl0LiBUaGUgaG9zdAorICAgYXJn dW1lbnQgY2FuIGJlIGFuIElQIGhvc3QgbmFtZSBvciBhZGRyZXNzLCBvciB0aGUgbmFtZSBvZiBh IFRDUC9JUAorICAgZW50cnkgaW4geW91ciBDLUtlcm1pdCBuZXR3b3JrIGRpcmVjdG9yeS4KKwor ICAgSWYgYSBwb3J0IGlzIGdpdmVuLCBpdCBpcyB1c2VkLiBJZiBhIHBvcnQgaXMgbm90IGdpdmVu LCB0aGVuIGlmIHRoZQorICAgaG9zdG5hbWUgd2FzIGZvdW5kIGluIHlvdXIgbmV0d29yayBkaXJl Y3RvcnkgYW5kIHBvcnQgd2FzIGFsc28gbGlzdGVkCisgICB0aGVyZSwgdGhlbiB0aGF0IHBvcnQg aXMgdXNlZC4gT3RoZXJ3aXNlIHBvcnQgMjMgKHRoZSBUZWxuZXQgcG9ydCkgaXMKKyAgIHVzZWQu CisKKyAgIFdoZW4gQy1LZXJtaXQgaXMgY2FsbGVkICJ0ZWxuZXQiIGFuZCBpdCBpcyBpbnZva2Vk IHdpdGggYSBob3N0bmFtZSBvbgorICAgdGhlIGNvbW1hbmQgbGluZSwgaXQgZXhpdHMgYXV0b21h dGljYWxseSB3aGVuIHRoZSBjb25uZWN0aW9uIGlzIGNsb3NlZC4KKyAgIFdoaWxlIHRoZSBjb25u ZWN0aW9uIGlzIG9wZW4sIGhvd2V2ZXIsIHlvdSBtYXkgZXNjYXBlIGJhY2sgYW5kIGZvcnRoIGFz CisgICBtYW55IHRpbWVzIGFzIHlvdSBsaWtlLCB0cmFuc2ZlciBmaWxlcywgZXRjLgorCisgICBB biBybG9naW4gcGVyc29uYWxpdHkgaXMgYWxzbyBhdmFpbGFibGUsIGJ1dCBpdCBpcyBsZXNzIHVz ZWZ1bCwgYXQKKyAgIGxlYXN0IGluIFVOSVggYW5kIFZNUywgd2hlcmUgdGhlIFJsb2dpbiBUQ1Ag cG9ydCBpcyBwcml2aWxlZ2VkLgorCisgICBUaGUgbmV3IHZhcmlhYmxlIFx2KG5hbWUpIGluZGlj YXRlcyB0aGUgbmFtZSB3aXRoIHdoaWNoIEMtS2VybWl0IHdhcworICAgaW52b2tlZCAoImtlcm1p dCIsICJ3ZXJtaXQiLCAiazk1IiwgInRlbG5ldCIsIGV0YykuCisKKyAgOS4yLiBCdWlsdC1pbiBI ZWxwIGZvciBDb21tYW5kIExpbmUgT3B0aW9ucworCisgICAia2VybWl0IC1oIiwgZ2l2ZW4gZnJv bSB0aGUgc3lzdGVtIHByb21wdCwgbGlzdHMgYXMgbWFueSBjb21tYW5kLWxpbmUKKyAgIG9wdGlv bnMgYXMgd2lsbCBmaXQgb24gYSBzdGFuZGFyZCAyNHg4MCBzY3JlZW4uIEZvciBtb3JlIGNvbXBy ZWhlbnNpdmUKKyAgIGhlbHAsIHVzZSB0aGUgaW50ZXJhY3RpdmUgSEVMUCBPUFRJT05TIGNvbW1h bmQgdGhhdCB3YXMgYWRkZWQgaW4KKyAgIEMtS2VybWl0IDcuMDoKKworICAgSEVMUCBPUFRJT05T CisgICBFeHBsYWlucyBob3cgY29tbWFuZC1saW5lIG9wdGlvbnMgd29yaywgdGhlaXIgc3ludGF4 LCBldGMuCisKKyAgIEhFTFAgT1BUSU9OUyBBTEwKKyAgIExpc3RzIGFsbCBjb21tYW5kLWxpbmUg b3B0aW9ucyBhbmQgZ2l2ZXMgYnJpZWYgaGVscCBhYm91dCBlYWNoIG9uZS4KKworICAgSEVMUCBP UFRJT04geAorICAgR2l2ZXMgYnJpZWYgaGVscCBhYm91dCBvcHRpb24gIngiLgorCisgICBIRUxQ IEVYVEVOREVELU9QVElPTlMKKyAgIExpc3RzIHRoZSBhdmFpbGFibGUgZXh0ZW5kZWQtZm9ybWF0 IGNvbW1hbmQtbGluZSBvcHRpb25zLgorCisgICBIRUxQIEVYVEVOREVELU9QVElPTiB4eHgKKyAg IEdpdmVzIGhlbHAgZm9yIHRoZSBzcGVjaWZpZWQgZXh0ZW5kZWQgb3B0aW9uLgorCisgIDkuMy4g TmV3IENvbW1hbmQtTGluZSBPcHRpb25zCisKKyAgIENvbW1hbmQtbGluZSBvcHRpb25zIGFkZGVk IHNpbmNlIEMtS2VybWl0IDYuMCBhcmU6CisKKyAgICsKKyAgICAgICAgICAocGx1cyBzaWduIGJ5 IGl0c2VsZik6IFRoZSBuZXh0IGFyZ3VtZW50IGlzIHRoZSBuYW1lIG9mIGEgc2NyaXB0CisgICAg ICAgICAgdG8gZXhlY3V0ZTsgYWxsIHN1YnNlcXVlbnQgYXJndW1lbnRzIGFyZSBpZ25vcmVkIGJ5 IEMtS2VybWl0CisgICAgICAgICAgaXRzZWxmLCBidXQgcGFzc2VkIHRvIHRoZSBzY3JpcHQgYXMg dG9wLWxldmVsIGNvcGllcyBvZiBcJTEsCisgICAgICAgICAgXCUyLCBldGM7IHRoZSBcJl9bXSBp cyBhbHNvIHNldCBhY2NvcmRpbmdseS4gXCUwIGFuZCBcJl9bMF0KKyAgICAgICAgICBiZWNvbWUg dGhlIG5hbWUgb2YgdGhlIHNjcmlwdCBmaWxlLCByYXRoZXIgdGhhbiB0aGUgcGF0aG5hbWUgb2YK KyAgICAgICAgICB0aGUgQy1LZXJtaXQgcHJvZ3JhbSwgd2hpY2ggaXMgaXRzIG5vcm1hbCB2YWx1 ZS4gUHJpbWFyaWx5IGZvcgorICAgICAgICAgIHVzZSBpbiB0aGUgdG9wIGxpbmUgb2YgIktlcmJh bmciIHNjcmlwdHMgaW4gVU5JWCAoc2VlCisgICAgICAgICAgWzY0Ml1TZWN0aW9uIDcuMTkpLiBF eGFtcGxlIGZyb20gVU5JWCBjb21tYW5kIGxpbmU6CisKKyAgJCBrZXJtaXQgWyByZWd1bGFyIGtl cm1pdCBhcmdzIF0gKyBmaWxlbmFtZQorCisgICAgICAgICAgU2FtcGxlIGZpcnN0IGxpbmUgb2Yg S2VyYmFuZyBzY3JpcHQ6CisKKyAgIyEvdXNyL2xvY2FsL2Jpbi9rZXJtaXQgKworCisgICAtLQor ICAgICAgICAgICh0d28gaHlwaGVucyBzdXJyb3VuZGVkIGJ5IHdoaXRlc3BhY2UpIEVxdWl2YWxl bnQgdG8gIj0iLCBmb3IKKyAgICAgICAgICBjb21wYXRpYmlsaXR5IHdpdGggVU5JWCBnZXRvcHQo MSwzKS4KKworICAgLUcKKyAgICAgICAgICBHRVQgKGxpa2UgLWcpLCBidXQgc2VuZCB0aGUgaW5j b21pbmcgZmlsZSB0byBzdGFuZGFyZCBvdXRwdXQuCisgICAgICAgICAgRXhhbXBsZTogImtlcm1p dCAtRyBvb2ZhLnR4dCB8IGxwciIgcmV0cmlldmVzIGEgZmlsZSBmcm9tIHlvdXIKKyAgICAgICAg ICBsb2NhbCBjb21wdXRlciAocHJvdmlkaW5nIGl0IGlzIHJ1bm5pbmcgYSBLZXJtaXQgcHJvZ3Jh bSB0aGF0CisgICAgICAgICAgc3VwcG9ydHMgdGhlIGF1dG9kb3dubG9hZCBmZWF0dXJlIGFuZCBo YXMgaXQgZW5hYmxlZCkgYW5kIHByaW50cworICAgICAgICAgIGl0LgorCisgICAtTworICAgICAg ICAgIGVxdWl2YWxlbnQgdG8gLXggKHN0YXJ0IHVwIGluIHNlcnZlciBtb2RlKSwgYnV0IGV4aXRz IGFmdGVyIHRoZQorICAgICAgICAgIGZpcnN0IGNsaWVudCBjb21tYW5kIGhhcyBiZWVuIGV4ZWN1 dGVkIChtbmVtb25pYzogTyA9IE9ubHkgT25lKS4KKyAgICAgICAgICBUaGlzIG9uZSBpcyBoYW5k eSByZXBsYWNpbmcgImtlcm1pdCAteCIgaW4gdGhlICJhdXRvbWF0aWNhbGx5CisgICAgICAgICAg c3RhcnQgS2VybWl0IG9uIHRoZSBvdGhlciBlbmQiIHN0cmluZzoKKworICBzZXQgcHJvdG9jb2wg a2VybWl0IHtrZXJtaXQgLWlyfSB7a2VybWl0IC1yfSB7a2VybWl0IC14fQorCisgICAgICAgICAg c2luY2UgLXggbGVhdmVzIHRoZSByZW1vdGUgS2VybWl0IGluIHNlcnZlciBtb2RlIGFmdGVyIHRo ZQorICAgICAgICAgIHRyYW5zZmVyLCB3aGljaCBjYW4gYmUgY29uZnVzaW5nLCB3aGVyZWFzIC1P IG1ha2VzIGl0IGdvIGF3YXkKKyAgICAgICAgICBhdXRvbWF0aWNhbGx5IGFmdGVyIHRoZSB0cmFu c2Zlci4KKworICAgLUwKKyAgICAgICAgICBSZWN1cnNpdmUsIHdoZW4gdXNlZCBpbiBjb21iaW5h dGlvbiB3aXRoIC1zIChtbmVtb25pYzogTCA9CisgICAgICAgICAgTGV2ZWxzKS4gSW4gVU5JWCBv ciBvdGhlciBlbnZpcm9ubWVudHMgd2hlcmUgdGhlIHNoZWxsIGV4cGFuZHMKKyAgICAgICAgICB3 aWxkY2FyZHMgaXRzZWxmLCB0aGUgLXMgYXJndW1lbnQsIGlmIGl0IGNvbnRhaW5zIHdpbGRjYXJk cywKKyAgICAgICAgICBtdXN0IGJlIHF1b3RlZCB0byBwcmV2ZW50IHRoaXMsIGUuZy46CisKKyAg a2VybWl0IC1MIC1zICIqLmMiCisKKyAgICAgICAgICBJbiBVTklYIG9ubHksICJrZXJtaXQgLUwg LXMgLiIgbWVhbnMgdG8gc2VuZCB0aGUgY3VycmVudAorICAgICAgICAgIGRpcmVjdG9yeSB0cmVl LiBTZWUgWzY0M11TZWN0aW9ucyA0LjEwIGFuZCBbNjQ0XTQuMTEgYWJvdXQKKyAgICAgICAgICBy ZWN1cnNpdmUgZmlsZSB0cmFuc2Zlci4KKworICAgLVYKKyAgICAgICAgICBFcXVpdmFsZW50IHRv IFNFVCBGSUxFIFBBVFRFUk5TIE9GRiAoWzY0NV1TZWN0aW9uIDQuMykgYW5kIFNFVAorICAgICAg ICAgIFRSQU5TRkVSIE1PREUgTUFOVUFMLiBJbiBvdGhlciB3b3JkcywgdGFrZSB0aGUgRklMRSBU WVBFIHNldHRpbmcKKyAgICAgICAgICBsaXRlcmFsbHkuIEZvciBleGFtcGxlLCAia2VybWl0IC1W VCBvb2ZhLmJpbiIgbWVhbnMgc2VuZCB0aGUKKyAgICAgICAgICBmaWxlIGluIFRleHQgbW9kZSwg bm8gbWF0dGVyIHdoYXQgaXRzIG5hbWUgaXMgYW5kIG5vIG1hdHRlcgorICAgICAgICAgIHdoZXRo ZXIgYSBraW5kcmVkIHNwaXJpdCBpcyByZWNvZ25pemVkIGF0IHRoZSBvdGhlciBlbmQgb2YgdGhl CisgICAgICAgICAgY29ubmVjdGlvbi4KKworICAgLTAKKyAgICAgICAgICAoZGlnaXQgemVybykg bWVhbnMgImJlIDEwMCUgdHJhbnNwYXJlbnQgaW4gQ09OTkVDVCBtb2RlIi4gVGhpcworICAgICAg ICAgIGlzIGVxdWl2YWxlbnQgdG8gdGhlIGZvbGxvd2luZyBzZXJpZXMgb2YgY29tbWFuZHM6IFNF VCBQQVJJVFkKKyAgICAgICAgICBOT05FLCBTRVQgQ09NTUFORCBCWVRFU0laRSA4LCBTRVQgVEVS TUlOQUwgQllURVNJWkUgOCwgU0VUIEZMT1cKKyAgICAgICAgICBOT05FLCBTRVQgVEVSTSBFU0NB UEUgRElTQUJMRUQsIFNFVCBURVJNIENIQVIgVFJBTlNQQVJFTlQsIFNFVAorICAgICAgICAgIFRF Uk0gQVVUT0RPV05MT0FEIE9GRiwgU0VUIFRFUk0gQVBDIE9GRiwgU0VUIFRFTE9QVCBLRVJNSVQK KyAgICAgICAgICBSRUZVU0UgUkVGVVNFLgorCisgIDEwLiBDLUtFUk1JVCBBTkQgRy1LRVJNSVQK KworICAgRXZlcnkgbXVsdGlmdW5jdGlvbmVkIGFuZCBsb25nLWxpdmVkIHNvZnR3YXJlIHByb2dy YW0gZ3Jvd3MgaW4KKyAgIGNvbXBsZXhpdHkgYW5kIHNpemUgb3ZlciB0aW1lIHRvIG1lZXQgdGhl IG5lZWRzIGFuZCByZXF1ZXN0cyBvZiBpdHMKKyAgIHVzZXJzIGFuZCB0aGUgZGVtYW5kcyBvZiB0 aGUgdW5kZXJseWluZyB0ZWNobm9sb2d5IGFzIGl0IGNoYW5nZXMuCisKKyAgIEV2ZW50dWFsbHkg dXNlcnMgYmVnaW4gdG8gbm90aWNlIGhvdyBiaWcgdGhlIGFwcGxpY2F0aW9uIGhhcyBncm93biwg aG93CisgICBtdWNoIGRpc2sgc3BhY2UgaXQgb2NjdXBpZXMsIGhvdyBsb25nIGl0IHRha2VzIHRv IGxvYWQsIGFuZCB0aGV5IHN0YXJ0CisgICB0byBsb25nIGZvciB0aGUgZ29vZCBvbGQgZGF5cyB3 aGVuIGl0IHdhcyBsZWFuIGFuZCBtZWFuLiBOb3QgbG9uZyBhZnRlcgorICAgdGhhdCB0aGV5IGJl Z2luIGFza2luZyBmb3IgYSAibGlnaHQiIHZlcnNpb24gdGhhdCBvbmx5IGRvZXMgdGhlIGJhc2lj cworICAgd2l0aCBubyBmcmlsbHMuCisKKyAgIEFuZCBzbyBpdCBpcyB3aXRoIEMtS2VybWl0LiBB ICJsaWdodCIgdmVyc2lvbiBvZiBLZXJtaXQgd2FzIHJlbGVhc2VkCisgICAoZm9yIFVOSVggb25s eSkgaW4gRGVjZW1iZXIgMTk5OSB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2U7 CisgICB0aHVzIGl0IGlzIGNhbGxlZCBHLUtlcm1pdCAoZm9yIEdOVSBLZXJtaXQpLiBBbGwgaXQg ZG9lcyBpcyBzZW5kIGFuZAorICAgcmVjZWl2ZSBmaWxlcywgcGVyaW9kLiBZb3UgY2FuIGZpbmQg aXQgYXQ6CisKKyAgWzY0Nl1odHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvZ2tlcm1pdC5o dG1sCisKKyAgIFdoZXJlIHRoZSBDLUtlcm1pdCA3LjAgYmluYXJ5IG1pZ2h0IGJlIGFueXdoZXJl IGZyb20gMSB0byAzIG1pbGxpb24KKyAgIGJ5dGVzIGluIHNpemUsIHRoZSBHLUtlcm1pdCBiaW5h cnkgcmFuZ2VzIGZyb20gMzBLIHRvIDEwMEssIGRlcGVuZGluZworICAgb24gdGhlIHVuZGVybHlp bmcgYXJjaGl0ZWN0dXJlIChSSVNDIHZzIENJU0MsIGV0YykuCisKKyAgIEctS2VybWl0IGFuZCBD LUtlcm1pdCBtYXkgcmVzaWRlIHNpZGUtYnktc2lkZSBvbiB0aGUgc2FtZSBjb21wdXRlci4KKyAg IEctS2VybWl0IGRvZXMgbm90IG1ha2UgY29ubmVjdGlvbnM7IGl0IGRvZXMgbm90IGhhdmUgYSBz Y3JpcHQgbGFuZ3VhZ2U7CisgICBpdCBkb2VzIG5vdCB0cmFuc2xhdGUgY2hhcmFjdGVyIHNldHMu IEctS2VybWl0IG1heSBiZSB1c2VkIGluc3RlYWQgb2YKKyAgIEMtS2VybWl0IHdoZW46CisKKyAg ICAgKiBJdCBpcyBvbiB0aGUgcmVtb3RlIGVuZC4KKyAgICAgKiBGaWxlcyBhcmUgdG8gYmUgdHJh bnNmZXJyZWQgaW4gYmluYXJ5IG1vZGUgb3IgaW4gdGV4dCBtb2RlIHdpdGhvdXQKKyAgICAgICBj aGFyYWN0ZXItc2V0IHRyYW5zbGF0aW9uLgorICAgICAqIEZpbGUgdGltZXN0YW1wcyBkb24ndCBu ZWVkIHRvIGJlIHByZXNlcnZlZC4KKworICAgSW4gc3VjaCBjYXNlcyBHLUtlcm1pdCBtaWdodCBi ZSBwcmVmZXJyZWQgc2luY2UgaXQgZ2VuZXJhbGx5IHN0YXJ0cyB1cAorICAgZmFzdGVyLCBhbmQg eWV0IHRyYW5zZmVycyBmaWxlcyBqdXN0IGFzIGZhc3Qgb24gbW9zdCAoYnV0IG5vdAorICAgbmVj ZXNzYXJpbHkgYWxsKSBraW5kcyBvZiBjb25uZWN0aW9uczsgZm9yIGV4YW1wbGUsIGl0IHN1cHBv cnRzCisgICBzdHJlYW1pbmcgKFs2NDddU2VjdGlvbiA0LjIwKS4KKworICAgRy1LZXJtaXQgaXMg YWxzbyBoYW5keSBmb3IgYm9vdHN0cmFwcGluZy4gSXQgaXMgZWFzaWVyIHRvIGxvYWQgb24gYSBu ZXcKKyAgIGNvbXB1dGVyIHRoYW4gQy1LZXJtaXQgLS0gaXQgZml0cyBvbiBhIGZsb3BweSBkaXNr ZXR0ZSB3aXRoIHBsZW50eSBvZgorICAgcm9vbSB0byBzcGFyZS4gVGh1cyBpZiB5b3UgaGF2ZSAo c2F5KSBhbiBvbGQgUEMgcnVubmluZyAoc2F5KSBTQ08gWGVuaXgKKyAgIGFuZCBubyBuZXR3b3Jr IGNvbm5lY3Rpb24sIHlvdSBjYW4gZG93bmxvYWQgdGhlIFhlbml4IHZlcnNpb24gb2YKKyAgIEct S2VybWl0IHRvIChzYXkpIGEgRE9TIG9yIFdpbmRvd3MgUEMsIGNvcHkgaXQgdG8gZGlza2V0dGUs IHJlYWQgdGhlCisgICBkaXNrZXR0ZSBvbiBYZW5peCB3aXRoICJkb3NyZWFkIiwgYW5kIHRoZW4g dXNlIEctS2VybWl0IHRvIHJlY2VpdmUKKyAgIEMtS2VybWl0ICh3aGljaCBkb2VzIG5vdCBmaXQg b24gYSBkaXNrZXR0ZSkuIElmIGRpc2tldHRlcyBhcmVuJ3QgYW4KKyAgIG9wdGlvbiwgb3RoZXIg Ym9vdHN0cmFwcGluZyBtZXRob2RzIGFyZSBwb3NzaWJsZSB0b28gLS0gc2VlIHRoZQorICAgWzY0 OF1HLUtlcm1pdCB3ZWIgcGFnZSBmb3IgZGV0YWlscy4KKworSUlJLiBBUFBFTkRJQ0VTCisKKyAg SUlJLjEuIENoYXJhY3RlciBTZXQgVGFibGVzCisKKyAgICBJSUkuMS4xLiBUaGUgSGV3bGV0dCBQ YWNrYXJkIFJvbWFuOCBDaGFyYWN0ZXIgU2V0CisKK2RlYyBjb2wvcm93IG9jdCBoZXggIGRlc2Ny aXB0aW9uCisxNjAgIDEwLzAwICAyNDAgIEEwICAoVW5kZWZpbmVkKQorMTYxICAxMC8wMSAgMjQx ICBBMSAgQSBncmF2ZQorMTYyICAxMC8wMiAgMjQyICBBMiAgQSBjaXJjdW1mbGV4CisxNjMgIDEw LzAzICAyNDMgIEEzICBFIGdyYXZlCisxNjQgIDEwLzA0ICAyNDQgIEE0ICBFIGNpcmN1bWZsZXgK KzE2NSAgMTAvMDUgIDI0NSAgQTUgIEUgZGlhZXJlc2lzCisxNjYgIDEwLzA2ICAyNDYgIEE2ICBJ IGNpcmN1bWZsZXgKKzE2NyAgMTAvMDcgIDI0NyAgQTcgIEkgZGlhZXJlc2lzCisxNjggIDEwLzA4 ICAyNTAgIEE4ICBBY3V0ZSBhY2NlbnQKKzE2OSAgMTAvMDkgIDI1MSAgQTkgIEdyYXZlIGFjY2Vu dAorMTcwICAxMC8xMCAgMjUyICBBQSAgQ2lyY3VtZmxleCBhY2NlbnQKKzE3MSAgMTAvMTEgIDI1 MyAgQUIgIERpYWVyZXNpcworMTcyICAxMC8xMiAgMjU0ICBBQyAgVGlsZGUgYWNjZW50CisxNzMg IDEwLzEzICAyNTUgIEFEICBVIGdyYXZlCisxNzQgIDEwLzE0ICAyNTYgIEFFICBVIGNpcmN1bWZs ZXgKKzE3NSAgMTAvMTUgIDI1NyAgQUYgIExpcmEgc3ltYm9sCisxNzYgIDExLzAwICAyNjAgIEIw ICBUb3AgYmFyIChtYWNyb24pCisxNzcgIDExLzAxICAyNjEgIEIxICBZIGFjdXRlCisxNzggIDEx LzAyICAyNjIgIEIyICB5IGFjdXRlCisxNzkgIDExLzAzICAyNjMgIEIzICBEZWdyZWUgU2lnbgor MTgwICAxMS8wNCAgMjY0ICBCNCAgQyBjZWRpbGxhCisxODEgIDExLzA1ICAyNjUgIEI1ICBjIGNl ZGlsbGEKKzE4MiAgMTEvMDYgIDI2NiAgQjYgIE4gdGlsZGUKKzE4MyAgMTEvMDcgIDI2NyAgQjcg IG4gdGlsZGUKKzE4NCAgMTEvMDggIDI3MCAgQjggIEludmVydGVkIGV4Y2xhbWF0aW9uIG1hcmsK KzE4NSAgMTEvMDkgIDI3MSAgQjkgIEludmVydGVkIHF1ZXN0aW9uIG1hcmsKKzE4NiAgMTEvMTAg IDI3MiAgQkEgIEN1cnJlbmN5IHN5bWJvbAorMTg3ICAxMS8xMSAgMjczICBCQiAgUG91bmQgc3Rl cmxpbmcgc3ltYm9sCisxODggIDExLzEyICAyNzQgIEJDICBZZW4gc3ltYm9sCisxODkgIDExLzEz ICAyNzUgIEJEICBQYXJhZ3JhcGgKKzE5MCAgMTEvMTQgIDI3NiAgQkUgIEZsb3JpbiAoR3VpbGRl cikgc3ltYm9sCisxOTEgIDExLzE1ICAyNzcgIEJGICBDZW50IHN5bWJvbAorMTkyICAxMi8wMCAg MzAwICBDMCAgYSBjaXJjdW1mbGV4CisxOTMgIDEyLzAxICAzMDEgIEMxICBlIGNpcmN1bWZsZXgK KzE5NCAgMTIvMDIgIDMwMiAgQzIgIG8gY2lyY3VtZmxleAorMTk1ICAxMi8wMyAgMzAzICBDMyAg dSBjaXJjdW1mbGV4CisxOTYgIDEyLzA0ICAzMDQgIEM0ICBhIGFjdXRlCisxOTcgIDEyLzA1ICAz MDUgIEM1ICBlIGFjdXRlCisxOTggIDEyLzA2ICAzMDYgIEM2ICBvIGFjdXRlCisxOTkgIDEyLzA3 ICAzMDcgIEM3ICB1IGFjdXRlCisyMDAgIDEyLzA4ICAzMTAgIEM4ICBhIGdyYXZlCisyMDEgIDEy LzA5ICAzMTEgIEM5ICBlIGdyYXZlCisyMDIgIDEyLzEwICAzMTIgIENBICBvIGdyYXZlCisyMDMg IDEyLzExICAzMTMgIENCICB1IGdyYXZlCisyMDQgIDEyLzEyICAzMTQgIENDICBhIGRpYWVyZXNp cworMjA1ICAxMi8xMyAgMzE1ICBDRCAgZSBkaWFlcmVzaXMKKzIwNiAgMTIvMTQgIDMxNiAgQ0Ug IG8gZGlhZXJlc2lzCisyMDcgIDEyLzE1ICAzMTcgIENGICB1IGRpYWVyZXNpcworMjA4ICAxMy8w MCAgMzIwICBEMCAgQSByaW5nCisyMDkgIDEzLzAxICAzMjEgIEQxICBpIGNpcmN1bWZsZXgKKzIx MCAgMTMvMDIgIDMyMiAgRDIgIE8gd2l0aCBzdHJva2UKKzIxMSAgMTMvMDMgIDMyMyAgRDMgIEFF IGRpZ3JhcGgKKzIxMiAgMTMvMDQgIDMyNCAgRDQgIGEgcmluZworMjEzICAxMy8wNSAgMzI1ICBE NSAgaSBhY3V0ZQorMjE0ICAxMy8wNiAgMzI2ICBENiAgbyB3aXRoIHN0cm9rZQorMjE1ICAxMy8w NyAgMzI3ICBENyAgYWUgZGlncmFwaAorMjE2ICAxMy8wOCAgMzMwICBEOCAgQSBkaWFlcmVzaXMK KzIxNyAgMTMvMDkgIDMzMSAgRDkgIGkgZ3JhdmUKKzIxOCAgMTMvMTAgIDMzMiAgREEgIE8gZGlh ZXJlc2lzCisyMTkgIDEzLzExICAzMzMgIERCICBVIGRpYWVyZXNpcworMjIwICAxMy8xMiAgMzM0 ICBEQyAgRSBhY3V0ZQorMjIxICAxMy8xMyAgMzM1ICBERCAgaSBkaWFlcmVzaXMKKzIyMiAgMTMv MTQgIDMzNiAgREUgIEdlcm1hbiBzaGFycCBzCisyMjMgIDEzLzE1ICAzMzcgIERGICBPIGNpcmN1 bWZsZXgKKzIyNCAgMTQvMDAgIDM0MCAgRTAgIEEgYWN1dGUKKzIyNSAgMTQvMDEgIDM0MSAgRTEg IEEgdGlsZGUKKzIyNiAgMTQvMDIgIDM0MiAgRTIgIGEgdGlsZGUKKzIyNyAgMTQvMDMgIDM0MyAg RTMgIEljZWxhbmRpYyBFdGgKKzIyOCAgMTQvMDQgIDM0NCAgRTQgIEljZWxhbmRpYyBldGgKKzIy OSAgMTQvMDUgIDM0NSAgRTUgIEkgYWN1dGUKKzIzMCAgMTQvMDYgIDM0NiAgRTYgIEkgZ3JhdmUK KzIzMSAgMTQvMDcgIDM0NyAgRTcgIE8gYWN1dGUKKzIzMiAgMTQvMDggIDM1MCAgRTggIE8gZ3Jh dmUKKzIzMyAgMTQvMDkgIDM1MSAgRTkgIE8gdGlsZGUKKzIzNCAgMTQvMTAgIDM1MiAgRUEgIG8g dGlsZGUKKzIzNSAgMTQvMTEgIDM1MyAgRUIgIFMgY2Fyb24KKzIzNiAgMTQvMTIgIDM1NCAgRUMg IHMgY2Fyb24KKzIzNyAgMTQvMTMgIDM1NSAgRUQgIFUgYWN1dGUKKzIzOCAgMTQvMTQgIDM1NiAg RUUgIFkgZGlhZXJlc2lzCisyMzkgIDE0LzE1ICAzNTcgIEVGICB5IGRpYWVyZXNpcworMjQwICAx NS8wMCAgMzYwICBGMCAgSWNlbGFuZGljIFRob3JuCisyNDEgIDE1LzAxICAzNjEgIEYxICBJY2Vs YW5kaWMgdGhvcm4KKzI0MiAgMTUvMDIgIDM2MiAgRjIgIE1pZGRsZSBkb3QKKzI0MyAgMTUvMDMg IDM2MyAgRjMgIEdyZWVrIG11CisyNDQgIDE1LzA0ICAzNjQgIEY0ICBQaWxjcm93IHNpZ24KKzI0 NSAgMTUvMDUgIDM2NSAgRjUgIEZyYWN0aW9uIDMvNAorMjQ2ICAxNS8wNiAgMzY2ICBGNiAgTG9u ZyBkYXNoLCBob3Jpem9udGFsIGJhcgorMjQ3ICAxNS8wNyAgMzY3ICBGNyAgRnJhY3Rpb24gMS80 CisyNDggIDE1LzA4ICAzNzAgIEY4ICBGcmFjdGlvbiAxLzIKKzI0OSAgMTUvMDkgIDM3MSAgRjkg IEZlbWluaW5lIG9yZGluYWwKKzI1MCAgMTUvMTAgIDM3MiAgRkEgIE1hc2N1bGluZSBvcmRpbmFs CisyNTEgIDE1LzExICAzNzMgIEZCICBMZWZ0IGd1aWxsZW1vdAorMjUyICAxNS8xMiAgMzc0ICBG QyAgU29saWQgYm94CisyNTMgIDE1LzEzICAzNzUgIEZEICBSaWdodCBndWlsbGVtb3QKKzI1NCAg MTUvMTQgIDM3NiAgRkUgIFBsdXMgb3IgbWludXMgc2lnbgorMjU1ICAxNS8xNSAgMzc3ICBGRiAg KFVuZGVmaW5lZCkKKworICAgIElJSS4xLjIuIEdyZWVrIENoYXJhY3RlciBTZXRzCisKKyAgICBJ SUkuMS4yLjEuIFRoZSBJU08gODg1OS03IExhdGluIC8gR3JlZWsgQWxwaGFiZXQgPSBFTE9UIDky OAorCitkZWMgY29sL3JvdyBvY3QgaGV4ICBkZXNjcmlwdGlvbgorMTYwICAxMC8wMCAgMjQwICBB MCAgTm8tYnJlYWsgc3BhY2UKKzE2MSAgMTAvMDEgIDI0MSAgQTEgIExlZnQgc2luZ2xlIHF1b3Rh dGlvbiBtYXJrCisxNjIgIDEwLzAyICAyNDIgIEEyICByaWdodCBzaW5nbGUgcXVvdGF0aW9uIG1h cmsKKzE2MyAgMTAvMDMgIDI0MyAgQTMgIFBvdW5kIHNpZ24KKzE2NCAgMTAvMDQgIDI0NCAgQTQg IChVTlVTRUQpCisxNjUgIDEwLzA1ICAyNDUgIEE1ICAoVU5VU0VEKQorMTY2ICAxMC8wNiAgMjQ2 ICBBNiAgQnJva2VuIGJhcgorMTY3ICAxMC8wNyAgMjQ3ICBBNyAgUGFyYWdyYXBoIHNpZ24KKzE2 OCAgMTAvMDggIDI1MCAgQTggIERpYWVyZXNpcyAoRGlhbHl0aWthKQorMTY5ICAxMC8wOSAgMjUx ICBBOSAgQ29weXJpZ2h0IHNpZ24KKzE3MCAgMTAvMTAgIDI1MiAgQUEgIChVTlVTRUQpCisxNzEg IDEwLzExICAyNTMgIEFCICBMZWZ0IGFuZ2xlIHF1b3RhdGlvbgorMTcyICAxMC8xMiAgMjU0ICBB QyAgTm90IHNpZ24KKzE3MyAgMTAvMTMgIDI1NSAgQUQgIFNvZnQgaHlwaGVuCisxNzQgIDEwLzE0 ICAyNTYgIEFFICAoVU5VU0VEKQorMTc1ICAxMC8xNSAgMjU3ICBBRiAgSG9yaXpvbnRhbCBiYXIg KFBhcmVudGhldGlraSBwYXZsYSkKKzE3NiAgMTEvMDAgIDI2MCAgQjAgIERlZ3JlZSBzaWduCisx NzcgIDExLzAxICAyNjEgIEIxICBQbHVzLW1pbnVzIHNpZ24KKzE3OCAgMTEvMDIgIDI2MiAgQjIg IFN1cGVyc2NyaXB0IHR3bworMTc5ICAxMS8wMyAgMjYzICBCMyAgU3VwZXJzY3JpcHQgdGhyZWUK KzE4MCAgMTEvMDQgIDI2NCAgQjQgIEFjY2VudCAodG9ub3MpCisxODEgIDExLzA1ICAyNjUgIEI1 ICBEaWFlcmVzaXMgYW5kIGFjY2VudCAoRGlhbHl0aWthIGFuZCBUb25vcykKKzE4MiAgMTEvMDYg IDI2NiAgQjYgIEFscGhhIHdpdGggYWNjZW50CisxODMgIDExLzA3ICAyNjcgIEI3ICBNaWRkbGUg ZG90IChBbm8gVGVsZWlhKQorMTg0ICAxMS8wOCAgMjcwICBCOCAgRXBzaWxvbiB3aXRoIGFjY2Vu dAorMTg1ICAxMS8wOSAgMjcxICBCOSAgRXRhIHdpdGggYWNjZW50CisxODYgIDExLzEwICAyNzIg IEJBICBJb3RhIHdpdGggYWNjZW50CisxODcgIDExLzExICAyNzMgIEJCICBSaWdodCBhbmdsZSBx dW90YXRpb24KKzE4OCAgMTEvMTIgIDI3NCAgQkMgIE9taWNyb24gd2l0aCBhY2NlbnQKKzE4OSAg MTEvMTMgIDI3NSAgQkQgIE9uZSBoYWxmCisxOTAgIDExLzE0ICAyNzYgIEJFICBVcHNpbG9uIHdp dGggYWNjZW50CisxOTEgIDExLzE1ICAyNzcgIEJGICBPbWVnYSB3aXRoIGFjY2VudAorMTkyICAx Mi8wMCAgMzAwICBDMCAgaW90YSB3aXRoIGRpYWVyZXNpcyBhbmQgYWNjZW50CisxOTMgIDEyLzAx ICAzMDEgIEMxICBBbHBoYQorMTk0ICAxMi8wMiAgMzAyICBDMiAgQmV0YQorMTk1ICAxMi8wMyAg MzAzICBDMyAgR2FtbWEKKzE5NiAgMTIvMDQgIDMwNCAgQzQgIERlbHRhCisxOTcgIDEyLzA1ICAz MDUgIEM1ICBFcHNpbG9uCisxOTggIDEyLzA2ICAzMDYgIEM2ICBaZXRhCisxOTkgIDEyLzA3ICAz MDcgIEM3ICBFdGEKKzIwMCAgMTIvMDggIDMxMCAgQzggIFRoZXRhCisyMDEgIDEyLzA5ICAzMTEg IEM5ICBJb3RhCisyMDIgIDEyLzEwICAzMTIgIENBICBLYXBwYQorMjAzICAxMi8xMSAgMzEzICBD QiAgTGFtZGEKKzIwNCAgMTIvMTIgIDMxNCAgQ0MgIE11CisyMDUgIDEyLzEzICAzMTUgIENEICBO dQorMjA2ICAxMi8xNCAgMzE2ICBDRSAgS3NpCisyMDcgIDEyLzE1ICAzMTcgIENGICBPbWljcm9u CisyMDggIDEzLzAwICAzMjAgIEQwICBQaQorMjA5ICAxMy8wMSAgMzIxICBEMSAgUmhvCisyMTAg IDEzLzAyICAzMjIgIEQyICAoVU5VU0VEKQorMjExICAxMy8wMyAgMzIzICBEMyAgU2lnbWEKKzIx MiAgMTMvMDQgIDMyNCAgRDQgIFRhdQorMjEzICAxMy8wNSAgMzI1ICBENSAgVXBzaWxvbgorMjE0 ICAxMy8wNiAgMzI2ICBENiAgUGhpCisyMTUgIDEzLzA3ICAzMjcgIEQ3ICBLaGkKKzIxNiAgMTMv MDggIDMzMCAgRDggIFBzaQorMjE3ICAxMy8wOSAgMzMxICBEOSAgT21lZ2EKKzIxOCAgMTMvMTAg IDMzMiAgREEgIElvdGEgd2l0aCBkaWFlcmVzaXMKKzIxOSAgMTMvMTEgIDMzMyAgREIgIFVwc2ls b24gd2l0aCBkaWFlcmVzaXMKKzIyMCAgMTMvMTIgIDMzNCAgREMgIGFscGhhIHdpdGggYWNjZW50 CisyMjEgIDEzLzEzICAzMzUgIEREICBlcHNpbG9uIHdpdGggYWNjZW50CisyMjIgIDEzLzE0ICAz MzYgIERFICBldGEgd2l0aCBhY2NlbnQKKzIyMyAgMTMvMTUgIDMzNyAgREYgIGlvdGEgd2l0aCBh Y2NlbnQKKzIyNCAgMTQvMDAgIDM0MCAgRTAgIHVwc2lsb24gd2l0aCBkaWFlcmVzaXMgYW5kIGFj Y2VudAorMjI1ICAxNC8wMSAgMzQxICBFMSAgYWxwaGEKKzIyNiAgMTQvMDIgIDM0MiAgRTIgIGJl dGEKKzIyNyAgMTQvMDMgIDM0MyAgRTMgIGdhbW1hCisyMjggIDE0LzA0ICAzNDQgIEU0ICBkZWx0 YQorMjI5ICAxNC8wNSAgMzQ1ICBFNSAgZXBzaWxvbgorMjMwICAxNC8wNiAgMzQ2ICBFNiAgemV0 YQorMjMxICAxNC8wNyAgMzQ3ICBFNyAgZXRhCisyMzIgIDE0LzA4ICAzNTAgIEU4ICB0aGV0YQor MjMzICAxNC8wOSAgMzUxICBFOSAgaW90YQorMjM0ICAxNC8xMCAgMzUyICBFQSAga2FwcGEKKzIz NSAgMTQvMTEgIDM1MyAgRUIgIGxhbWRhCisyMzYgIDE0LzEyICAzNTQgIEVDICBtdQorMjM3ICAx NC8xMyAgMzU1ICBFRCAgbnUKKzIzOCAgMTQvMTQgIDM1NiAgRUUgIGtzaQorMjM5ICAxNC8xNSAg MzU3ICBFRiAgb21pY3JvbgorMjQwICAxNS8wMCAgMzYwICBGMCAgcGkKKzI0MSAgMTUvMDEgIDM2 MSAgRjEgIHJobworMjQyICAxNS8wMiAgMzYyICBGMiAgdGVybWluYWwgc2lnbWEKKzI0MyAgMTUv MDMgIDM2MyAgRjMgIHNpZ21hCisyNDQgIDE1LzA0ICAzNjQgIEY0ICB0YXUKKzI0NSAgMTUvMDUg IDM2NSAgRjUgIHVwc2lsb24KKzI0NiAgMTUvMDYgIDM2NiAgRjYgIHBoaQorMjQ3ICAxNS8wNyAg MzY3ICBGNyAga2hpCisyNDggIDE1LzA4ICAzNzAgIEY4ICBwc2kKKzI0OSAgMTUvMDkgIDM3MSAg RjkgIG9tZWdhCisyNTAgIDE1LzEwICAzNzIgIEZBICBpb3RhIHdpdGggZGlhZXJlc2lzCisyNTEg IDE1LzExICAzNzMgIEZCICB1cHNpbG9uIHdpdGggZGlhZXJlc2lzCisyNTIgIDE1LzEyICAzNzQg IEZDICBvbWljcm9uIHdpdGggZGlhZXJlc2lzCisyNTMgIDE1LzEzICAzNzUgIEZEICB1cHNpbG9u IHdpdGggYWNjZW50CisyNTQgIDE1LzE0ICAzNzYgIEZFICBvbWVnYSB3aXRoIGFjY2VudAorMjU1 ICAxNS8xNSAgMzc3ICBGRiAgKFVOVVNFRCkKKworICAgIElJSS4xLjIuMi4gVGhlIEVMT1QgOTI3 IENoYXJhY3RlciBTZXQKKworZGVjIGNvbC9yb3cgb2N0IGhleCAgZGVzY3JpcHRpb24KKyAzMiAg MDIvMDAgICA0MCAgMjAgIFNQQUNFCisgMzMgIDAyLzAxICAgNDEgIDIxICBFWENMQU1BVElPTiBN QVJLCisgMzQgIDAyLzAyICAgNDIgIDIyICBRVU9UQVRJT04gTUFSSworIDM1ICAwMi8wMyAgIDQz ICAyMyAgTlVNQkVSIFNJR04KKyAzNiAgMDIvMDQgICA0NCAgMjQgIERPTExBUiBTSUdOCisgMzcg IDAyLzA1ICAgNDUgIDI1ICBQRVJDRU5UIFNJR04KKyAzOCAgMDIvMDYgICA0NiAgMjYgIEFNUEVS U0FORAorIDM5ICAwMi8wNyAgIDQ3ICAyNyAgQVBPU1RST1BIRQorIDQwICAwMi8wOCAgIDUwICAy OCAgTEVGVCBQQVJFTlRIRVNJUworIDQxICAwMi8wOSAgIDUxICAyOSAgUklHSFQgUEFSRU5USEVT SVMKKyA0MiAgMDIvMTAgICA1MiAgMkEgIEFTVEVSSVNLCisgNDMgIDAyLzExICAgNTMgIDJCICBQ TFVTIFNJR04KKyA0NCAgMDIvMTIgICA1NCAgMkMgIENPTU1BCisgNDUgIDAyLzEzICAgNTUgIDJE ICBIWVBIRU4sIE1JTlVTIFNJR04KKyA0NiAgMDIvMTQgICA1NiAgMkUgIFBFUklPRCwgRlVMTCBT VE9QCisgNDcgIDAyLzE1ICAgNTcgIDJGICBTT0xJRFVTLCBTTEFTSAorIDQ4ICAwMy8wMCAgIDYw ICAzMCAgRElHSVQgWkVSTworIDQ5ICAwMy8wMSAgIDYxICAzMSAgRElHSVQgT05FCisgNTAgIDAz LzAyICAgNjIgIDMyICBESUdJVCBUV08KKyA1MSAgMDMvMDMgICA2MyAgMzMgIERJR0lUIFRIUkVF CisgNTIgIDAzLzA0ICAgNjQgIDM0ICBESUdJVCBGT1VSCisgNTMgIDAzLzA1ICAgNjUgIDM1ICBE SUdJVCBGSVZFCisgNTQgIDAzLzA2ICAgNjYgIDM2ICBESUdJVCBTSVgKKyA1NSAgMDMvMDcgICA2 NyAgMzcgIERJR0lUIFNFVkVOCisgNTYgIDAzLzA4ICAgNzAgIDM4ICBESUdJVCBFSUdIVAorIDU3 ICAwMy8wOSAgIDcxICAzOSAgRElHSVQgTklORQorIDU4ICAwMy8xMCAgIDcyICAzQSAgQ09MT04K KyA1OSAgMDMvMTEgICA3MyAgM0IgIFNFTUlDT0xPTgorIDYwICAwMy8xMiAgIDc0ICAzQyAgTEVT Uy1USEFOIFNJR04sIExFRlQgQU5HTEUgQlJBQ0tFVAorIDYxICAwMy8xMyAgIDc1ICAzRCAgRVFV QUxTIFNJR04KKyA2MiAgMDMvMTQgICA3NiAgM0UgIEdSRUFURVItVEhBTiBTSUdOLCBSSUdIVCBB TkdMRSBCUkFDS0VUCisgNjMgIDAzLzE1ICAgNzcgIDNGICBRVUVTVElPTiBNQVJLCisgNjQgIDA0 LzAwICAxMDAgIDQwICBDT01NRVJDSUFMIEFUIFNJR04KKyA2NSAgMDQvMDEgIDEwMSAgNDEgIENB UElUQUwgTEVUVEVSIEEKKyA2NiAgMDQvMDIgIDEwMiAgNDIgIENBUElUQUwgTEVUVEVSIEIKKyA2 NyAgMDQvMDMgIDEwMyAgNDMgIENBUElUQUwgTEVUVEVSIEMKKyA2OCAgMDQvMDQgIDEwNCAgNDQg IENBUElUQUwgTEVUVEVSIEQKKyA2OSAgMDQvMDUgIDEwNSAgNDUgIENBUElUQUwgTEVUVEVSIEUK KyA3MCAgMDQvMDYgIDEwNiAgNDYgIENBUElUQUwgTEVUVEVSIEYKKyA3MSAgMDQvMDcgIDEwNyAg NDcgIENBUElUQUwgTEVUVEVSIEcKKyA3MiAgMDQvMDggIDExMCAgNDggIENBUElUQUwgTEVUVEVS IEgKKyA3MyAgMDQvMDkgIDExMSAgNDkgIENBUElUQUwgTEVUVEVSIEkKKyA3NCAgMDQvMTAgIDEx MiAgNEEgIENBUElUQUwgTEVUVEVSIEoKKyA3NSAgMDQvMTEgIDExMyAgNEIgIENBUElUQUwgTEVU VEVSIEsKKyA3NiAgMDQvMTIgIDExNCAgNEMgIENBUElUQUwgTEVUVEVSIEwKKyA3NyAgMDQvMTMg IDExNSAgNEQgIENBUElUQUwgTEVUVEVSIE0KKyA3OCAgMDQvMTQgIDExNiAgNEUgIENBUElUQUwg TEVUVEVSIE4KKyA3OSAgMDQvMTUgIDExNyAgNEYgIENBUElUQUwgTEVUVEVSIE8KKyA4MCAgMDUv MDAgIDEyMCAgNTAgIENBUElUQUwgTEVUVEVSIFAKKyA4MSAgMDUvMDEgIDEyMSAgNTEgIENBUElU QUwgTEVUVEVSIFEKKyA4MiAgMDUvMDIgIDEyMiAgNTIgIENBUElUQUwgTEVUVEVSIFIKKyA4MyAg MDUvMDMgIDEyMyAgNTMgIENBUElUQUwgTEVUVEVSIFMKKyA4NCAgMDUvMDQgIDEyNCAgNTQgIENB UElUQUwgTEVUVEVSIFQKKyA4NSAgMDUvMDUgIDEyNSAgNTUgIENBUElUQUwgTEVUVEVSIFUKKyA4 NiAgMDUvMDYgIDEyNiAgNTYgIENBUElUQUwgTEVUVEVSIFYKKyA4NyAgMDUvMDcgIDEyNyAgNTcg IENBUElUQUwgTEVUVEVSIFcKKyA4OCAgMDUvMDggIDEzMCAgNTggIENBUElUQUwgTEVUVEVSIFgK KyA4OSAgMDUvMDkgIDEzMSAgNTkgIENBUElUQUwgTEVUVEVSIFkKKyA5MCAgMDUvMTAgIDEzMiAg NUEgIENBUElUQUwgTEVUVEVSIFoKKyA5MSAgMDUvMTEgIDEzMyAgNUIgIExFRlQgU1FVQVJFIEJS QUNLRVQKKyA5MiAgMDUvMTIgIDEzNCAgNUMgIFJFVkVSU0UgU09MSURVUywgQkFDS1NMQVNICisg OTMgIDA1LzEzICAxMzUgIDVEICBSSUdIVCBTUVVBUkUgQlJBQ0tFVAorIDk0ICAwNS8xNCAgMTM2 ICA1RSAgQ0lSQ1VNRkxFWCBBQ0NFTlQKKyA5NSAgMDUvMTUgIDEzNyAgNUYgIFVOREVSU0NPUkUK KyA5NiAgMDYvMDAgIDE0MCAgNjAgIEFDQ0VOVCBHUkFWRQorIDk3ICAwNi8wMSAgMTQxICA2MSAg R1JFRUsgTEVUVEVSIEFMUEhBCisgOTggIDA2LzAyICAxNDIgIDYyICBHUkVFSyBMRVRURVIgQkVU QQorIDk5ICAwNi8wMyAgMTQzICA2MyAgR1JFRUsgTEVUVEVSIEdBTU1BCisxMDAgIDA2LzA0ICAx NDQgIDY0ICBHUkVFSyBMRVRURVIgREVMVEEKKzEwMSAgMDYvMDUgIDE0NSAgNjUgIEdSRUVLIExF VFRFUiBFUFNJTE9OCisxMDIgIDA2LzA2ICAxNDYgIDY2ICBHUkVFSyBMRVRURVIgWkVUQQorMTAz ICAwNi8wNyAgMTQ3ICA2NyAgR1JFRUsgTEVUVEVSIEVUQQorMTA0ICAwNi8wOCAgMTUwICA2OCAg R1JFRUsgTEVUVEVSIFRIRVRBCisxMDUgIDA2LzA5ICAxNTEgIDY5ICBHUkVFSyBMRVRURVIgSU9U QQorMTA2ICAwNi8xMCAgMTUyICA2QSAgR1JFRUsgTEVUVEVSIEtBUFBBCisxMDcgIDA2LzExICAx NTMgIDZCICBHUkVFSyBMRVRURVIgTEFNREEKKzEwOCAgMDYvMTIgIDE1NCAgNkMgIEdSRUVLIExF VFRFUiBNVQorMTA5ICAwNi8xMyAgMTU1ICA2RCAgR1JFRUsgTEVUVEVSIE5VCisxMTAgIDA2LzE0 ICAxNTYgIDZFICBHUkVFSyBMRVRURVIgS1NJCisxMTEgIDA2LzE1ICAxNTcgIDZGICBHUkVFSyBM RVRURVIgT01JQ1JPTgorMTEyICAwNy8wMCAgMTYwICA3MCAgR1JFRUsgTEVUVEVSIFBJCisxMTMg IDA3LzAxICAxNjEgIDcxICBHUkVFSyBMRVRURVIgUkhPCisxMTQgIDA3LzAyICAxNjIgIDcyICBH UkVFSyBMRVRURVIgU0lHTUEKKzExNSAgMDcvMDMgIDE2MyAgNzMgIEdSRUVLIExFVFRFUiBUQVUK KzExNiAgMDcvMDQgIDE2NCAgNzQgIEdSRUVLIExFVFRFUiBVUFNJTE9OCisxMTcgIDA3LzA1ICAx NjUgIDc1ICBHUkVFSyBMRVRURVIgRkkKKzExOCAgMDcvMDYgIDE2NiAgNzYgIEdSRUVLIExFVFRF UiBYSQorMTE5ICAwNy8wNyAgMTY3ICA3NyAgR1JFRUsgTEVUVEVSIFBTSQorMTIwICAwNy8wOCAg MTcwICA3OCAgR1JFRUsgTEVUVEVSIE9NRUdBCisxMjEgIDA3LzA5ICAxNzEgIDc5ICBTUEFDRQor MTIyICAwNy8xMCAgMTcyICA3QSAgU1BBQ0UKKzEyMyAgMDcvMTEgIDE3MyAgN0IgIExFRlQgQ1VS TFkgQlJBQ0tFVCwgTEVGVCBCUkFDRQorMTI0ICAwNy8xMiAgMTc0ICA3QyAgVkVSVElDQUwgTElO RSwgVkVSVElDQUwgQkFSCisxMjUgIDA3LzEzICAxNzUgIDdEICBSSUdIVCBDVVJMWSBCUkFDS0VU LCBSSUdIVCBCUkFDRQorMTI2ICAwNy8xNCAgMTc2ICA3RSAgVElMREUKKzEyNyAgMDcvMTUgIDE3 NyAgN0YgIFJVQk9VVCwgREVMRVRFCisKKyAgICBJSUkuMS4yLjMuIFBDIENvZGUgUGFnZSA4NjkK KworICAgKHRvIGJlIGZpbGxlZCBpbi4uLikKKworICAgIElJSS4yLiBVcGRhdGVkIENvdW50cnkg Q29kZXMKKworICAgRGF0ZTogTW9uLCA3IEFwciAxOTk3IDIzOjIzOjQ5IEVEVAorICAgRnJvbTog RGF2ZSBMZWlib2xkIDxkbGVpYm9sZEBlbHNlLm5ldD4KKyAgIE5ld3Nncm91cHM6IGNvbXAuZGNv bS50ZWxlY29tCisgICBTdWJqZWN0OiBFeC1VU1NSIENvdW50cnkgQ29kZXMgUHJvZmlsZQorICAg T3JnYW5pemF0aW9uOiBURUxFQ09NIERpZ2VzdAorCisgICBFeC1VU1NSIENvdW50cnkgQ29kZXMg UHJvZmlsZQorICAgNCBBcHJpbCAxOTk3CisKKyAgIEJlbG93IGlzIGEgc3VtbWFyeSBvZiB0aGUg Y291bnRyeSBjb2RlcyB0aGF0IGhhdmUgZm9ybWVkIGluIHRoZSB3YWtlIG9mCisgICB0aGUgVVNT UiBkaXNzb2x1dGlvbiwgYWxvbmcgd2l0aCBzb21lIHVwZGF0ZWQgZmluZGluZ3MgYW5kIHJlcG9y dHMuCisgICBBZGRpdGlvbmFsIG9yIGNvcnJlY3RlZCBpbmZvcm1hdGlvbiBvbiBhbnkgb2YgdGhl c2UgbmF0aW9ucyB3b3VsZCBiZQorICAgd2VsY29tZSAoYy9vIGRsZWlib2xkQGVsc2UubmV0KS4K KyAgICAgKiBLeXJneXogUmVwdWJsaWMgY291bnRyeSBjb2RlIDk5NiB3aWxsIHRha2UgZWZmZWN0 LCBhdCBsZWFzdCBpbgorICAgICAgIENhbmFkYSwgZWZmZWN0aXZlIDEgTWF5IDE5OTcsIGFjY29y ZGluZyB0byBDUlRDIFRlbGVjb20gT3JkZXIKKyAgICAgICA5Ny00NjQsIGJhc2VkIG9uIFN0ZW50 b3IgVGFyaWZmIE5vdGljZSA0MzMuIFRoZXJlIGlzIG5vIGluZGljYXRpb24KKyAgICAgICB3aGV0 aGVyIHRoZXJlIHdpbGwgYmUgYSBwZXJtaXNzaXZlIGRpYWxpbmcgcGVyaW9kIGludm9sdmVkIG9y IGZvcgorICAgICAgIGhvdyBsb25nIHN1Y2ggYSBwZXJtaXNzaXZlIG9wZXJhdGlvbiB3b3VsZCBy ZW1haW4uCisgICAgICogQ291bnRyeSBjb2RlIDk5MiB3YXMgcmVwb3J0ZWQgYXMgYSByZWNlbnQg YXNzaWdubWVudCBmb3IKKyAgICAgICBUYWppa2lzdGFuLCB3aGljaCB3aWxsIGJlIG1vdmluZyBm cm9tIGNvdW50cnkgY29kZSA3IGF0IHNvbWUKKyAgICAgICB1bmtub3duIHRpbWUuCisgICAgICog VXpiZWtpc3RhbiBoYXMgaXRzIG93biBjb3VudHJ5IGNvZGUgYXNzaWdubWVudCwgYnV0IEkgaGF2 ZSBubworICAgICAgIGluZm9ybWF0aW9uIGlmIHRoaXMgaXMgaW4gc2VydmljZSB5ZXQgb3Igd2hh dCBpbXBsZW1lbnRhdGlvbiBkYXRlcworICAgICAgIGhhdmUgYmVlbiBzZXQuCisgICAgICogS2F6 YWtzdGFuIGRvZXMgbm90IGhhdmUgYSBrbm93biBzZXBhcmF0ZSBjb3VudHJ5IGNvZGUgYXNzaWdu bWVudCBhdAorICAgICAgIHByZXNlbnQuIEl0IHJlbWFpbnMgaW4gY291bnRyeSBjb2RlIDcgZm9y IHRoZSB0aW1lIGJlaW5nLgorICAgICAqIFJ1c3NpYSBzZWVtcyBkZXN0aW5lZCB0byBrZWVwIGNv dW50cnkgY29kZSA3LgorICAgICAqIFJlY2VudCBuZXdzIHJlcG9ydHMgc3BlYWsgb2Ygc29tZSBh Z3JlZW1lbnRzIGZvcm1pbmcgYmV0d2VlbiBSdXNzaWEKKyAgICAgICBhbmQgQmVsYXJ1cy4gV2hp bGUgdGhlcmUgaXMgbm8gb3V0cmlnaHQgcmV1bmlmaWNhdGlvbiB5ZXQsIHRoZXJlIGlzCisgICAg ICAgZXhwZWN0ZWQgdG8gYmUgbXVjaCBjbG9zZXIgdGllcyBiZXR3ZWVuIHRoZSB0d28gbmF0aW9u cy4gV2hldGhlcgorICAgICAgIHRoaXMgd2lsbCBsZWFkIHRvIGEgcmV1bmlmaWNhdGlvbiBvZiB0 ZWxlcGhvbmUgY29kZXMgcmVtYWlucyB0byBiZQorICAgICAgIHNlZW4uCisKKyAgIEluIHRoZSB0 YWJsZSwgIkVmZmVjdGl2ZSIgbWVhbnMgdGhlIGRhdGUgYXQgd2hpY2ggdGhlIGNvdW50cnkgY29k ZQorICAgYmVnYW4gc2VydmljZSAod2hpY2ggY291bGQgdmFyeSBhY2NvcmRpbmcgdG8gdGhlIG5h dGlvbikuICJNYW5kYXRvcnkiCisgICBtZWFucyB0aGUgZGF0ZSBhdCB3aGljaCB0aGUgY291bnRy eSBjb2RlIDcgaXMgaW52YWxpZCBmb3IgY2FsbHMgdG8gdGhhdAorICAgbmF0aW9uLiBUaGVyZSBh cmUgYSBudW1iZXIgb2YgcXVlc3Rpb24gbWFya3Mgc2luY2UgZXhhY3QgZGF0ZXMgaGF2ZSBub3QK KyAgIGJlZW4gY29sbGVjdGVkIGluIGFsbCBjYXNlcy4KKworQ0MgIE5hdGlvbiAgICAgICAgICAg IEVmZmVjdGl2ZSAgICAgTWFuZGF0b3J5ICAgIE5vdGVzCisKKzM3MCBMaXRodWFuaWEgICAgICAg ICAxOTkzPyAgICAgICAgID8/PyAgICAgICAgICBBbm5vdW5jZWQgSmFuIDE5OTMKKzM3MSBMYXR2 aWEgICAgICAgICAgICAxOTkzPyAgICAgICAgID8/PworMzcyIEVzdG9uaWEgICAgICAgICAgIDEg RmViIDE5OTM/ICAgTWFyY2ggMTk5Mz8KKzM3MyBNb2xkb3ZhICAgICAgICAgICAxOTkzPyAgICAg ICAgID8/PyAgICAgICAgICBBbm5vdW5jZWQgSmFuIDE5OTMKKzM3NCBBcm1lbmlhICAgICAgICAg ICAxIE1heSAxOTk1ICAgIDEgSnVseSAxOTk1ICBBbm5vdW5jZWQgSmFuIDE5OTUgKElUVSkKKzM3 NSBCZWxhcnVzICAgICAgICAgICAxNiBBcHIgMTk5NSAgIDE5OTc/CiszODAgVWtyYWluZSAgICAg ICAgICAgMTYgQXByIDE5OTUgICBPY3QgMTk5NT8KKzcgICBLYXpha3N0YW4gICAgICAgICAobm8g a25vd24gY2hhbmdlcykKKzcgICBSdXNzaWEgICAgICAgICAgICAocHJlc3VtYWJseSBub3QgY2hh bmdpbmcpCis5OTIgVGFqaWtpc3RhbiAgICAgICAgPz8/ICAgICAgICAgICA/Pz8gICAgICAgICAg QW5ub3VuY2VkIDE5OTYtNz8KKzk5MyBUdXJrbWVuaXN0YW4gICAgICAzIEphbiAxOTk3ICAgIDMg QXByIDE5OTcgICBDYW5hZGEgYXMgb2YgMjkgTm92IDE5OTYKKzk5NCBBemVyYmFpamFuICAgICAg ICBTZXB0IDE5OTQ/ICAgID8/PyAgICAgICAgICBBbm5vdW5jZWQgMTk5MgorOTk1IEdlb3JnaWEg ICAgICAgICAgIDE5OTQ/ICAgICAgICAgPz8/ICAgICAgICAgIHJlZjogVGVsZWNvbSBEaWdlc3Qg T2N0IDE5OTQKKzk5NiBLeXJneXogUmVwdWJsaWMgICAxIE1heSAxOTk3ICAgID8/PyAgICAgICAg ICByZWY6IFN0ZW50b3IgQ2FuYWRhL0NSVEMKKzk5OCBVemJla2lzdGFuICAgICAgICA/Pz8gICAg ICAgICAgID8/PyAgICAgICAgICBBbm5vdW5jZWQgMTk5Nj8gKElUVSkKKworICAgRGV0YWlscyBj b3VydGVzeSBUb2J5IE5peG9uLCBJVFUsIFN0ZW50b3IgKENhbmFkYSksIENSVEMgKENhbmFkYSks CisgICBURUxFQ09NIERpZ2VzdCAoaW5jbHVkaW5nIGluZm9ybWF0aW9uIGNvbGxlY3RlZCBmb3Ig dGhlIGNvdW50cnkgY29kZQorICAgbGlzdGluZ3MpLgorCitJVi4gRVJSQVRBICYgQ09SUklHRU5E QQorCisgICBUaGUgZm9sbG93aW5nIGVycm9ycyBpbiBbNjQ5XVVzaW5nIEMtS2VybWl0LCBTZWNv bmQgRWRpdGlvbiwgZmlyc3QKKyAgIHByaW50aW5nLCBoYXZlIGJlZW4gbm90ZWQuCisKKyAgIEZp cnN0LCBzb21lIG1pc3NpbmcgYWNrbm93bGVkZ2VtZW50cyBmb3IgQy1LZXJtaXQgNi4wOiBKRSBK b25lcyBvZgorICAgTWljcm93YXJlIGZvciBoZWxwIHdpdGggT1MtOSwgTmlnZWwgUm9sZXMgZm9y IGhpcyBoZWxwIHdpdGggUGxhbiA5LAorICAgTHVjYXMgSGFydCBmb3IgaGVscCB3aXRoIFZNUyBh bmQgRGlnaXRhbCBVTklYLCBJZ29yIEtvdmFsZW5rbyBmb3IgaGlzCisgICBoZWxwIHdpdGggUU5Y LiBBbmQgbGF0ZXIsIHRvIFN1c2FuIEtsZWlubWFubiBmb3IgaGVyIGhlbHAgd2l0aCBEZWJpYW4K KyAgIExpbnV4IHBhY2thZ2luZzsgUGF0cmljayBWb2xrZXJkaW5nIGZvciBoaXMgaGVscCB3aXRo IFNsYWNrd2FyZSBMaW51eAorICAgcGFja2FnaW5nOyBKaW0gS25vYmxlIGZvciBoaXMgaGVscCB3 aXRoIFJlZCBIYXQgTGludXggcGFja2FnaW5nOyBhbmQgdG8KKyAgIGRvemVucyBvZiBvdGhlcnMg Zm9yIHNlbmRpbmcgaW5kaXZpZHVhbCBDLUtlcm1pdCBiaW5hcmllcyBmb3IgdmFyaWVkCisgICBh bmQgZGl2ZXJzZSBwbGF0Zm9ybXMuCisKKyAgIFRoYW5rcyB0byBKYW1lcyBTcGF0aCBmb3IgYm90 aCBiaW5hcmllcyBhbmQgcmVwb3J0aW5nIG1hbnkgb2YgdGhlIHR5cG9zCisgICBub3RlZCBiZWxv dy4gQWxzbyB0byBEYXQgVGh1YyBOZ3V5ZW4gZm9yIHNwb3R0aW5nIHNldmVyYWwgdHlwb3MuCisK K1BBR0UgICAgUkVNQVJLUworQ09WRVIgICAiQ09TIiBpcyBhIG1pc3ByaW50LiAgVGhlcmUgaXMg bm8gQ09TLiAgUHJldGVuZCBpdCBzYXlzICJTQ08iIG9yICJWT1MiLgorICAgICAgICAoVGhpcyBp cyBmaXhlZCBpbiB0aGUgc2Vjb25kIHByaW50aW5nLikKKyB4eGkgICAgU2Vjb25kIGxpbmU6IEZy ZWQgU21pdGgncyBhZmZpbGlhdGlvbiBzaG91bGQgYmUgQ29tcHV0cml0aW9uLgorIDgzICAgICBD aGFuZ2UgImNvbW1hbmRzIG90aGVyIiB0byAiY29tbWFuZHMgYXMgb3RoZXIiICgxc3QgcGFyYWdy YXBoKQorIDg3ICAgICBDaGFuZ2UgIlRoZSB0aGUiIHRvICJUaGUiICgybmQgcGFyYWdyYXBoKQor IDkyICAgICAic2V0IG1vZGVtLXR5cGUgdXNlci1kZWZpbmVkIHN1cHJhIiBzaG91bGQgYmUgInNl dCBtb2RlbSB0eXBlIC4uLiIKKyA5NSAgICAgQ2hhbmdlICJWSSIgdG8gInZpIiAoMXN0IHBhcmFn cmFwaCkKKyA5NiAgICAgQ2hhbmdlICJpdCBpdCIgdG8gIml0IGlzIiAoMXN0IHBhcmFncmFwaCkK KyA5NyAgICAgQ2hhbmdlICJhZHZhbnRhZ2UgYSBsaXRlcmFsIiB0byAiYWR2YW50YWdlIG9mIGEg bGl0ZXJhbCIgKDJuZAorICAgICAgICBwYXJhZ3JhcGgpCisxMDIgICAgIFRoZSBjYWxsLXdhaXRp bmcgZXhhbXBsZSB3b3VsZCBiZSBiZXR0ZXIgYXMgU0VUIERJQUwgUFJFRklYICo3MFcKKyAgICAg ICAgKHJhdGhlciB0aGFuICIqNzAsIikgYmVjYXVzZSB0aGUgZm9ybWVyIHdpbGwgbm90IGNhdXNl IGFuIGluY29ycmVjdAorICAgICAgICBjYWxsIHRvIGJlIHBsYWNlZCB3aXRoIHB1bHNlIGRpYWxp bmcuCisxMjMgICAgIFRoaXJkIHBhcmFncmFwaCBmcm9tIGJvdHRvbTogIi4ub3RoZXJ3aXNlIGlm IGEgeW91ciBsb2NhbCB1c2VybmFtZS4uIgorICAgICAgICBzaG91bGQgYmUgIi4ub3RoZXJ3aXNl IHlvdXIgbG9jYWwgdXNlcm5hbWUuLiIuCisxNjAgICAgIERlbGV0ZSB0aGUgIml0IiBiZXR3ZWVu ICJhbmQiIGFuZCAidG8iICgybmQgcGFyYWdyYXBoKQorMTg1ICAgICBJbiAiV2hlbiBUUkFOU0ZF UiBESVNQTEFZIGlzIE9GRiwgQy1LZXJtaXQgc2tpcHMgdGhlIGRpc3BsYXkuLi4iLAorICAgICAg ICAiT0ZGIiBzaG91bGQgYmUgIk5PTkUiLgorMTg3ICAgICBUaGUgbGFzdCBwYXJhZ3JhcGggc2F5 cyB0aGUgIkEgY29tbWFuZCIgaXMgaWdub3JlZCwgc2hvdWxkIGJlICJTIi4KKzE5NCAgICAgQ2hh bmdlICJpdCBrbm93biIgdG8gIml0IGlzIGtub3duIiAoNHRoIHBhcmFncmFwaCkuCisyMzUgICAg IEluIEMtS2VybWl0IDcuMCwgdGhlIHN5bnRheCBvZiB0aGUgR0VUIGNvbW1hbmQgY2hhbmdlZC4g IE1HRVQgbm93CisgICAgICAgIG11c3QgYmUgdXNlZCB0byBnZXQgYSBsaXN0IG9mIGZpbGVzIGFu ZCB0aGVyZSBpcyBubyBtb3JlIG11bHRpbGluZQorICAgICAgICBHRVQgY29tbWFuZC4KKzI2OCAg ICAgTGFzdCBwYXJhZ3JhcGg6ICJlZmZlY3QiIHNob3VsZCBiZSAiYWZmZWN0Ii4KKzI3NSAgICAg SW4gdGhlIFNFVCBQUk9UT0NPTCBLRVJNSVQgZGVzY3JpcHRpb24sIHRoZSBmb2xsb3dpbmcgc2Vu dGVuY2UgaXMKKyAgICAgICAgaW5jb3JyZWN0IGFuZCBzaG91bGQgYmUgcmVtb3ZlZDogJ0lmIHlv dSBvbWl0IHRoZSBjb21tYW5kcywgdGhlCisgICAgICAgIGRlZmF1bHQgb25lcyBhcmUgcmVzdG9y ZWQ6ICJrZXJtaXQgLWlyIiBhbmQgImtlcm1pdCAtciIgcmVzcGVjdGl2ZWx5Ii4KKyAgICAgICAg VGhlIGNvcnJlY3QgaW5mb3JtYXRpb24gaXMgZ2l2ZW4gYXQgdGhlIGJvdHRvbSBvZiBwYWdlIDI4 MS4KKzI3OSAgICAgOXRoIGxpbmUuICBUaGUgZGVjaW1hbCB2YWx1ZSBvZiBTVCBpcyAxNTYsIG5v dCAxNTUuCisyOTUgICAgIEluIHRoZSBzdGVwcGluZyBzdG9uZXMsIHNraXAgYWhlYWQgdG8gQ2hh cHRlciAxNyBvbiBwLiAzMjcuCisyOTggICAgIFRhYmxlIDE2LTIsIFBvcnR1Z3Vlc2UgZW50cnku ICBDb2x1bW4gNC8wMCBzaG91bGQgc2hvdyBzZWN0aW9uIHNpZ24sCisgICAgICAgIG5vdCBhY3V0 ZSBhY2NlbnQuCiszMTYgICAgIE90aGVyIGxhbmd1YWdlcyB3cml0dGVuIGluIHRoZSBIZWJyZXcg YWxwaGFiZXQgaW5jbHVkZSBLYXJhaW0gKGEgVHVya2ljCisgICAgICAgIGxhbmd1YWdlIHNwb2tl biBpbiBMaXRodWFuaWEgYW5kIFBvbGFuZCksIEp1ZGVvLUt1cmRpc2gsIGFuZCBKdWRlby0KKyAg ICAgICAgR2VvcmdpYW4uCiszMzIgICAgIFVOREVGSU5FIGRlZmluaXRpb24sIGNoYW5nZSAiVGhp cyBqdXN0IiB0byAiVGhpcyBpcyBqdXN0Ii4KKzM0NCAgICAgSXQgbWlnaHQgYmUgbmVjZXNzYXJ5 IHRvIHNldCB0aGUgbW9kZW0ncyBwdWxzZSBnZW5lcmF0aW9uIHJhdGUgd2hlbgorICAgICAgICBz ZW5kaW5nIG51bWVyaWMgcGFnZXM7IG1vc3QgSGF5ZXMgY29tcGF0aWJsZSBtb2RlbXMgdXNlIHRo ZSBTMTEKKyAgICAgICAgcmVnaXN0ZXIgZm9yIHRoaXMuCiszNTAgICAgIERlbGV0ZSAiaXMiIGZy b20gYmV0d2VlbiAiSXQiIGFuZCAiY2Vhc2VzIiAoNHRoIHBhcmFncmFwaCkKKzM1MSAgICAgVG9w IC0gYm90aCBvY2N1cnJlbmNlcyBvZiAicHJpbnQgXCVhIiBzaG91bGQgYmUgImVjaG8gXCVhIi4K KzM2NCAgICAgXHYoaW5wdXQpIGFuZCBcdihxdWVyeSkgb3V0IG9mIGFscGhhYmV0aWNhbCBvcmRl ci4KKzM3OCAgICAgSW4gdGhlIE1ZU0VORCBtYWNybywgImlmIG5vdCBcbShyYykgZ290byBiYWQi IHNob3VsZCBiZToKKyAgICAgICAgImlmIFxtKHJjKSBnb3RvIGJhZCIgKHJlbW92ZSB0aGUgIm5v dCIpLgorMzgyLTM4MyBJdCBzaG91bGQgYmUgc3RhdGVkIHRoYXQgdGhlIGxvb3AgY29udHJvbCB2 YXJpYWJsZSBtdXN0IGJlIG9mIHRoZSBcJWEKKyAgICAgICAgdHlwZSwgb3IgZWxzZSBhbiBhcnJh eSBlbGVtZW50OyBtYWNybyBuYW1lcyBjYW4gbm90IGJlIHVzZWQgZm9yIHRoaXMuCiszODMgICAg IEluIGxpbmUgMywgIlwlZltcJWldIiBzaG91bGQgYmUgIlwmZltcJWldIi4KKzM4MyAgICAgSW4g dGhlIHNvcnQgZXhhbXBsZSwgaXQgc2hvdWxkIGJlIHN0YXRlZCB0aGF0IHRoZSBhcnJheSBpcyAx LWJhc2VkLgorMzg3ICAgICBDaGFuZ2UgIllvdSBjYW4gbGlzdCIgdG8gIllvdSBjYW4gZ2V0IGEg bGlzdCIgKDV0aCBwYXJhZ3JhcGgpCiszOTMgICAgIFxGdmVyaWZ5KCkgZGVzY3JpcHRpb24uICBU aGUgM3JkIHNlbnRlbmNlIGNvdWxkIGJlIHN0YXRlZCBtb3JlIGNsZWFybHkKKyAgICAgICAgYXMg IklmIGFsbCBjaGFyYWN0ZXJzIGluIHN0cmluZzIgYXJlIGFsc28gaW4gc3RyaW5nMSwgMCBpcyBy ZXR1cm5lZC4iCiszOTggICAgIENvcHlpbmcgXGZmaWxlcygpIHJlc3VsdHMgdG8gYW4gYXJyYXkg YmVmb3JlIGlzIG5vdCByZXF1aXJlZCBhcyBvZgorICAgICAgICBDLUtlcm1pdCA3LjAgKHNlZSBb NjUwXVNlY3Rpb24gNy4zKS4KKzQwMyAgICAgSW4gIihcJWEgKyAzKSAqIChcJWIgIDUpIiwgYSBt aW51cyBzaWduIGlzIG1pc3NpbmcgYmV0d2VlbiBiIGFuZCA1LgorNDA3ICAgICBDLUtlcm1pdCA3 LjAgbm8gbG9uZ2VyIHN1cHBvcnRzIG11bHRpbGluZSBHRVQuICBDaGFuZ2UKKyAgICAgICAgImdl dCwgXCUxLCBcJTIiIHRvICJnZXQge1wlMX0ge1wlMn0iIG9yICJnZXQgL2FzOntcJTJ9IHtcJTF9 Ii4KKzQwOSAgICAgUkVBRCBleGFtcGxlIHdoaWxlIGxvb3Agc2hvdWxkIGJlOgorICAgICAgICB3 aGlsZSBzdWNjZXNzIHsgZWNobyBcbShsaW5lKSwgcmVhZCBsaW5lIH0KKzQwOSAgICAgIldSSVRF IGZpbGUiIHNob3VsZCBiZSAiV1JJVEUga2V5d29yZCIgKHlvdSBjYW4ndCBwdXQgYSBmaWxlbmFt ZSB0aGVyZSkKKyAgICAgICAgKFRoZSBzYW1lIGFwcGxpZXMgdG8gV1JJVEUtTElORSAvIFdSSVRF TE4pLgorNDE0ICAgICBcRnVuaGV4aWZ5KCkgbWlzc2luZyBmcm9tIFRhYmxlIDE4LTMuCis0MjUg ICAgIE1JTlBVVCBkZWZpbml0aW9uLCBjaGFuZ2UgMm5kICJ0ZXh0MiIgdG8gInRleHQzIi4KKzQz NiAgICAgU2V2ZXJhbCBsaW5lcyBhcmUgbWlzc2luZyBmcm9tIHRoZSBVTklYTE9HSU4gbWFjcm8g bGlzdGluZy4KKyAgICAgICAgQWZ0ZXIgdGhlICJ4aWYgZmFpbCIgYmxvY2ssIGluc2VydDoKKwor ICAgICAgICAgIG91dCBcJTFcMTMgICAgICAgICAgICAgICAgICAgIDsgU2VuZCB1c2VybmFtZSwg Y2FycmlhZ2UgcmV0dXJuCisgICAgICAgICAgaW5wIDUgUGFzc3dvcmQ6ICAgICAgICAgICAgICAg OyBXYWl0IDUgc2VjIGZvciB0aGlzIHByb21wdAorICAgICAgICAgIGlmIGZhaWwgZW5kIDEgTm8g cGFzc3dvcmQgcHJvbXB0CisgICAgICAgICAgcGF1c2UgICAgICAgICAgICAgICAgICAgICAgICAg OyBXYWl0IGEgc2VjCisgICAgICAgICAgb3V0IFwlMlwxMyAgICAgICAgICAgICAgICAgICAgOyBT ZW5kIHBhc3N3b3JkCisKKzQ0MCAgICAgQ2hhbmdlICJzZXQgdGVybWluYWwgYnl0ZXN6aWUiIHRv ICJzZXQgdGVybWluYWwgYnl0ZXNpemUiLgorICAgICAgICBDaGFuZ2UgImlucHV0IFBhc3N3b3Jk OiIgdG8gImlucHV0IDEwIFBhc3N3b3JkIi4KKzQ0OCAgICAgRnJhbmNoaXNlIHNjcmlwdDogImFj Y2VzcyBsaW5lIiBzaG91bGQgYmUgImFjY2VzcyBcbShsaW5lKSIuCis0NTMgICAgIFRoZXJlIGFy ZSB0d28gaW5jb3JyZWN0bHkgY29kZWQgSUYgc3RhdGVtZW50cyBpbiB0aGUgREVMSVZFUiBtYWNy bworICAgICAgICBkZWZpbml0aW9uLiAgUmVwbGFjZSBib3RoIG9jY3VycmVuY2VzIG9mICJpZiA+ IFwlMSBcJTMgeyIgd2l0aAorICAgICAgICAieGlmID4gXCVpIFwlMyB7IiAocmVwbGFjZSAiaWYi IGJ5ICJ4aWYiIGFuZCAiXCUxIiB3aXRoICJcJWkiKS4KKzQ1MyAgICAgInRoZSB0aGUiIChsYXN0 IHBhcmFncmFwaCkgc2hvdWxkIGJlICJ0aGUiLgorNDU0ICAgICBFT1QgKGxhc3QgcGFyYWdyYXBo KSBpcyBFbmQgb2YgVHJhbnNtaXNzaW9uLCBub3QgRW5kIG9mIFRleHQuCis0NTcgICAgIF9ERUZJ TkUgZGVmaW5pdGlvbjogIm5hbWUgY29uc3RydWN0ZWQiIHNob3VsZCBiZSAibmFtZSBpcyBjb25z dHJ1Y3RlZCIuCis0NTcgICAgICJtYWNybyBmb3IgYW5kIiAobGFzdCBwYXJhZ3JhcGgpIHNob3Vs ZCBiZSAibWFjcm8gYW5kIi4KKzQ1OSAgICAgU2hvdWxkIGV4cGxhaW4gdGhhdCBcdih1c2VyKSBp cyBhIGxlZ2FsIGFiYnJldmlhdGlvbiBvZiBcdih1c2VyaWQpLgorNDgwICAgICBGaWd1cmUgSUkt MiBpcyBiYWNrd2FyZHM7IHRoZSBsZWFzdC1zaWduaWZpY2FudCBiaXQgaXMgdHJhbnNtaXR0ZWQK KyAgICAgICAgZmlyc3QsIHRoZW4gdXAgdG8gdGhlIGhpZ2hlc3QsIGFuZCB0aGUgcGFyaXR5IGJp dCBsYXN0LgorNTM0ICAgICBUaGUgVk1TIEFwcGVuZGl4IHNlY3Rpb24gb24gT2RkIFJlY29yZCBM ZW5ndGhzIG5vIGxvbmdlciBhcHBsaWVzOworICAgICAgICBDLUtlcm1pdCA3LjAgaGFuZGxlcyBv ZGQgcmVjb3JkIGxlbmd0aHMgYXMgd2VsbCBhcyBldmVuIG9uZXMuCis1NTkgICAgIFRhYmxlIFZJ SUktMywgUG9ydHVndWVzZSBlbnRyeS4gIENvbHVtbiA0LzAwIHNob3VsZCBzaG93IHNlY3Rpb24g c2lnbiwKKyAgICAgICAgbm90IGFjdXRlIGFjY2VudC4KKzU2MC01NjMgSFAtUm9tYW44IG1pc3Np bmcgZnJvbSBUYWJsZSBWSUktNDsgdGhlcmUgd2Fzbid0IHJvb20gdG8gc3F1ZWV6ZSBpdCBpbi4K KyAgICAgICAgSXQgaXMgbGlzdGVkIGluIHNlY3Rpb24gSUkoNikuCis1NjUgICAgICJkIHN0cm9r ZSIgaW4gVGFibGUgVklJLTUgaGFzIHRoZSB3cm9uZyBhcHBlYXJhbmNlOyB0aGUgc3RlbSBzaG91 bGQKKyAgICAgICAgYmUgdXByaWdodC4gIFRoZSBsZXR0ZXIgc2hvd24gaW4gdGhlIHRhYmxlIGlz IGFjdHVhbGx5IGEgbG93ZXJjYXNlCisgICAgICAgIEljZWxhbmRpYyBldGgsIHdoaWNoIGhhcyBh IGN1cnZlZCBzdGVtLgorNjAxLTYwNCBCZUJveCwgQmVPUywgUGxhbiA5LCBhbmQgcHJvYmFibHkg b3RoZXJzIG5vdCBsaXN0ZWQgaW4gdHJhZGVtYXJrcy4KKzYwNCAgICAgVGhlIHdvcmRzICJTQ1JJ QkUgVEVYVCBGT1JNQVRURVIiIGFwcGVhciBhdCB0aGUgZW5kIG9mIHRoZSBsYXN0CisgICAgICAg IHNlbnRlbmNlIG9mIHRoZSBmaXJzdCBwYXJhZ3JhcGggb2YgdGhlIENvbG9waG9uLiAgVGhleSBz aG91bGQgaGF2ZQorICAgICAgICBiZWVuIGluIHRoZSBJbmRleC4KK0luZGV4OiAgTWlzc2luZyBl bnRyaWVzOiBTRVQgeyBTRU5ELCBSRUNFSVZFIH0gUEFUSE5BTUVTLCBDYWxsIHdhaXRpbmcsIC4u LgorICAgICAgICBcRigpICAgICAgICAgICAgUGFnZSA2MDUsIGFkZCBhbHNvIDQxMy00MTQKKyAg ICAgICAgXEZicmVhayAgICAgICAgIDM4OQorICAgICAgICBcRmNhcGl0YWxpemUgICAgMzkwCisg ICAgICAgIFxGY2hlY2tzdW0gICAgICA0MTQKKyAgICAgICAgXEZjcmMxNiAgICAgICAgIDQxNAor ICAgICAgICBcRmV4ZWN1dGUgICAgICAgNDE0CisgICAgICAgIFxGaGV4aWZ5ICAgICAgICAzOTAK KyAgICAgICAgXEZsdHJpbSAgICAgICAgIDM5MQorICAgICAgICBcRnJlcGVhdCAgICAgICAgMzky CisgICAgICAgIFxGc3Bhd24gICAgICAgICAzOTIKKyAgICAgICAgXEZ0b2Qyc2VjcyAgICAgIDM5 OQorICAgICAgICBcdigpIGJ1aWx0X2luICAgUGFnZSA2MDYsIGFkZCBhbHNvIDM2MS0zNjQKKyAg ICAgICAgXHYoX2xpbmUpICAgICAgIDM1NCwgMzYxCisgICAgICAgIFx2KGFwY2FjdGl2ZSkgICAz NjEKKyAgICAgICAgXHYoY2hhcnNldCkgICAgIDM2MgorICAgICAgICBcdihjcHUpICAgICAgICAg MzYyCisgICAgICAgIFx2KGNyYzE2KSAgICAgICAzNTcsIDM2MgorICAgICAgICBcdihkJHh4eCkg ICAgICAgYWRkIHBhZ2UgMzYyCisgICAgICAgIFx2KGRpYWxudW1iZXIpICAzNjIKKyAgICAgICAg XHYoZGlhbHJlc3VsdCkgIDM2MgorICAgICAgICBcdihlcnJubykgICAgICAgMzYyCisgICAgICAg IFx2KGVycnN0cmluZykgICAzNjIKKyAgICAgICAgXHYoZXhlZGlyKSAgICAgIDM2MgorICAgICAg ICBcdihpbmlkaXIpICAgICAgMzYzCisgICAgICAgIFx2KGlwYWRkcmVzcykgICAzNjMKKyAgICAg ICAgXHYoa2V5Ym9hcmQpICAgIDM2MworICAgICAgICBcdihtYWNybykgICAgICAgMzYzCisgICAg ICAgIFx2KG1pbnB1dCkgICAgICAzNjMKKyAgICAgICAgXHYobV94eHgpICAgICAgIDk0LCAzNjMK KyAgICAgICAgXHYocGFzc3dvcmQpICAgIDM2NAorICAgICAgICBcdihxdWVyeSkgICAgICAgMzY0 CisgICAgICAgIFx2KHByb21wdCkgICAgICAzNjQKKyAgICAgICAgXHYoc3BlZWQpICAgICAgIDM1 NiwgMzY0CisgICAgICAgIFx2KHN0YXJ0dXApICAgICAzNjQKKyAgICAgICAgXHYoc3RhdHVzKSAg ICAgIDM2NAorICAgICAgICBcdihzeXNpZCkgICAgICAgMzY0CisgICAgICAgIFx2KHN5c3RlbSkg ICAgICAzNjQKKyAgICAgICAgXHYoZnNpemUpICAgICAgIGF0IGxvd2VyIGhhbGYgcGFnZSA2MDYg c2hvdWxkIHJlYWQgXHYodGZzaXplKQorICAgICAgICBcdih4dmVyc2lvbikgICAgMzY0CisgICAg ICAgIEJFRVAgQ29tbWFuZCAgICA0MAorICAgICAgICBTRVQgRkxPVyAgICAgICAgNjIsIDIxMgor CisgICBGaWd1cmUgSUktNSBvbiBwYWdlIDQ5My4gVGhlIHBpbiBhc3NpZ25tZW50cyBvZiB0aGUg TWluaSBEaW4tOAorICAgY29ubmVjdG9yIGFyZSBub3QgZGVzY3JpYmVkIGFueXdoZXJlLiBBcyBu b3RlZCBpbiB0aGUgdGV4dCwgdGhlc2UgdGVuZAorICAgdG8gdmFyeSBmcm9tIHZlbmRvciB0byB2 ZW5kb3IuIE9uZSBjb21tb24gYXJyYW5nZW1lbnQgaXM6CisKKyAgMS4gSFNLb3V0IChIYW5kc2hh a2Ugb3V0IC0tIGRlZmluaXRpb24gZGVwZW5kcyBvbiBzb2Z0d2FyZSkKKyAgMi4gSFNLaW4gIChI YW5kc2hha2UgaW4gb3IgZXh0ZXJuYWwgY2xvY2spCisgIDMuIFR4RC0KKyAgNC4gTm90IHVzZWQK KyAgNS4gUnhELQorICA2LiBUeEQrCisgIDcuIE5vdCB1c2VkCisgIDguIFJ4RCsKKworICAgTm90 ZSB0aGUgImJhbGFuY2VkIHBhaXJzIiBmb3IgUmVjZWl2ZSBEYXRhIChSeEQpIGFuZCBUcmFuc21p dCBEYXRhCisgICAoVHhEKSwgYW5kIHRoZSB1dHRlciBsYWNrIG9mIG1vZGVtIHNpZ25hbHMuIFRo ZXNlIGNvbm5lY3RvcnMgZm9sbG93IHRoZQorICAgUlMtNDIzIHN0YW5kYXJkLCByYXRoZXIgdGhh biBSUy0yMzIuIEluIHNvbWUgYXJyYW5nZW1lbnRzLCBQaW4gMSBpcworICAgdXNlZCBmb3IgRFRS IGFuZCBQaW4gMiBmb3IgQ0Q7IGluIG90aGVycyBQaW4gMSBpcyBSVFMgYW5kIFBpbiAyIGlzIENU Uy4KKworICAgUGxlYXNlIHNlbmQgcmVwb3J0cyBvZiBvdGhlciBlcnJvcnMgdG8gdGhlIGF1dGhv cnMsIGFzIHdlbGwgYXMKKyAgIHN1Z2dlc3Rpb25zIGZvciBpbXByb3ZlbWVudHMsIGFkZGl0aW9u YWwgaW5kZXggZW50cmllcywgYW5kIGFueSBvdGhlcgorICAgY29tbWVudHM6CisKKyAgIFs2NTFd a2VybWl0QGNvbHVtYmlhLmVkdQorCitBUFBFTkRJWCBWLiBBRERJVElPTkFMIENPUFlSSUdIVCBO T1RJQ0VTCisKKyAgIFRoZSBmb2xsb3dpbmcgY29weXJpZ2h0cyBjb3ZlciBzb21lIG9mIHRoZSBz b3VyY2UgY29kZSB1c2VkIGluIHRoZQorICAgZGV2ZWxvcG1lbnQgb2YgQy1LZXJtaXQsIEtlcm1p dCA5NSwgb3IgS2VybWl0IDk1IHN1cHBvcnQgbGlicmFyaWVzLgorCisvKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgQ29weXJpZ2h0 IChjKSAxOTk1IGJ5IE95IE9ubGluZSBTb2x1dGlvbnMgTHRkLiAgICAgICAgICAgICAgICovCisv KiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICovCisvKiAgIERpc3RyaWJ1dGlvbiBvZiB0aGlzIHNvdXJjZSBj b2RlIGlzIHN0cmljdGx5IGZvcmJpZGRlbi4gVXNlIG9mIHRoaXMgICAgKi8KKy8qICAgc291cmNl IGNvZGUgaXMgZ3JhbnRlZCB0byB0aGUgVW5pdmVyc2l0eSBvZiBDb2x1bWJpYSBDLUtlcm1pdCBw cm9qZWN0ICAgKi8KKy8qICAgdG8gYmUgZGlzdHJpYnV0ZWQgaW4gYmluYXJ5IGZvcm1hdCBvbmx5 LiBQbGVhc2UgZmFtaWxpYXJpemUgeW91cnNlbGYgICAgKi8KKy8qICAgd2l0aCB0aGUgYWNjb21w YW55aW5nIExJQ0VOU0UuUCBmaWxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Ki8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICAg dXNlZCBmb3IgWG1vZGVtLCBZbW9kZW0sIGFuZCBabW9kZW0gcHJvdG9jb2wgaW4gS2VybWl0IDk1 IChwOTUuZGxsLAorICAgcDIuZGxsKQorCisgICBDb3B5cmlnaHQgKGMpIDE5OTcgU3RhbmZvcmQg VW5pdmVyc2l0eQorCisgICBUaGUgdXNlIG9mIHRoaXMgc29mdHdhcmUgZm9yIHJldmVudWUtZ2Vu ZXJhdGluZyBwdXJwb3NlcyBtYXkgcmVxdWlyZSBhCisgICBsaWNlbnNlIGZyb20gdGhlIG93bmVy cyBvZiB0aGUgdW5kZXJseWluZyBpbnRlbGxlY3R1YWwgcHJvcGVydHkuCisgICBTcGVjaWZpY2Fs bHksIHRoZSBTUlAtMyBwcm90b2NvbCBtYXkgbm90IGJlIHVzZWQgZm9yIHJldmVudWUtZ2VuZXJh dGluZworICAgcHVycG9zZXMgd2l0aG91dCBhIGxpY2Vuc2UuCisKKyAgIFdpdGhpbiB0aGF0IGNv bnN0cmFpbnQsIHBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRl CisgICB0aGlzIHNvZnR3YXJlIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2Ug aXMgaGVyZWJ5IGdyYW50ZWQKKyAgIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92 ZSBjb3B5cmlnaHQgbm90aWNlcyBhbmQgdGhpcworICAgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFy IGluIGFsbCBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlIGFuZCByZWxhdGVkCisgICBkb2N1bWVudGF0 aW9uLgorCisgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTLUlTIiBBTkQgV0lUSE9VVCBX QVJSQU5UWSBPRiBBTlkgS0lORCwKKyAgIEVYUFJFU1MsIElNUExJRUQgT1IgT1RIRVJXSVNFLCBJ TkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkKKyAgIFdBUlJBTlRZIE9GIE1FUkNIQU5U QUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworICAgSU4gTk8g RVZFTlQgU0hBTEwgU1RBTkZPUkQgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5DSURFTlRB TCwKKyAgIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPRiBBTlkgS0lORCwgT1Ig QU5ZIERBTUFHRVMKKyAgIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERB VEEgT1IgUFJPRklUUywgV0hFVEhFUiBPUiBOT1QKKyAgIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM SVRZIE9GIERBTUFHRSwgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAorICAgQVJJU0lO RyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0Yg VEhJUworICAgU09GVFdBUkUuCisKKyAgIFVzZWQgZm9yIFNlY3VyZSBSZW1vdGUgUGFzc3dvcmQg KFRNKSBwcm90b2NvbCAoU1JQKSBpbiBDLUtlcm1pdCwgS2VybWl0CisgICA5NSAoazk1LmV4ZSwg azIuZXhlLCBrOTVjcnlwdC5kbGwsIGsyY3J5cHQuZGxsKQorCisgICBDb3B5cmlnaHQgMTk5MCBi eSB0aGUgTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neS4gQWxsIFJpZ2h0cwor ICAgUmVzZXJ2ZWQuCisKKyAgIEV4cG9ydCBvZiB0aGlzIHNvZnR3YXJlIGZyb20gdGhlIFVuaXRl ZCBTdGF0ZXMgb2YgQW1lcmljYSBtYXkgcmVxdWlyZSBhCisgICBzcGVjaWZpYyBsaWNlbnNlIGZy b20gdGhlIFVuaXRlZCBTdGF0ZXMgR292ZXJubWVudC4gSXQgaXMgdGhlCisgICByZXNwb25zaWJp bGl0eSBvZiBhbnkgcGVyc29uIG9yIG9yZ2FuaXphdGlvbiBjb250ZW1wbGF0aW5nIGV4cG9ydCB0 bworICAgb2J0YWluIHN1Y2ggYSBsaWNlbnNlIGJlZm9yZSBleHBvcnRpbmcuCisKKyAgIFdJVEhJ TiBUSEFUIENPTlNUUkFJTlQsIHBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBk aXN0cmlidXRlCisgICB0aGlzIHNvZnR3YXJlIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55 IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIGlzCisgICBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQg dGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsCisgICBjb3BpZXMg YW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBu b3RpY2UKKyAgIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRo ZSBuYW1lIG9mIE0uSS5ULiBub3QgYmUKKyAgIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IgcHVibGlj aXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZQorICAgc29mdHdhcmUgd2l0aG91 dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLiBNLkkuVC4gbWFrZXMgbm8KKyAg IHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBm b3IgYW55IHB1cnBvc2UuCisgICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVz cyBvciBpbXBsaWVkIHdhcnJhbnR5LgorCisgICBVc2VkIGZvciBUZWxuZXQgQXV0aGVudGljYXRp b24gT3B0aW9uLCBUZWxuZXQgRW5jcnlwdGlvbiBPcHRpb24sIGFuZAorICAgS2VyYmVyb3MgKFRN KSBhdXRoZW50aWNhdGlvbiBpbiBDLUtlcm1pdCwgS2VybWl0IDk1IChrOTUuZXhlLCBrMi5leGUs CisgICBrOTVjcnlwdC5kbGwsIGsyY3J5cHQuZGxsKQorCisgICBDb3B5cmlnaHQgKGMpIDE5OTEs IDE5OTMgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KKyAgIEFs bCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAgbW9kaWZpY2F0aW9uLCBhcmUg cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICAg bWV0OgorICAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0 aGUgYWJvdmUgY29weXJpZ2h0CisgICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgIDIuIFJlZGlzdHJpYnV0aW9ucyBp biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgICAg bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp bWVyIGluIHRoZQorICAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw cm92aWRlZCB3aXRoIHRoZQorICAgICAgIGRpc3RyaWJ1dGlvbi4KKyAgICAzLiBBbGwgYWR2ZXJ0 aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKyAgICAg ICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisK KyAgICAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgVW5p dmVyc2l0eSBvZgorICAgICBDYWxpZm9ybmlhLCBCZXJrZWxleSBhbmQgaXRzIGNvbnRyaWJ1dG9y cy4KKyAgICA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFt ZXMgb2YgaXRzCisgICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCisgICBUSElTIFNPRlRXQVJF IElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFO RAorICAgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO T1QgTElNSVRFRCBUTywgVEhFCisgICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAgIFBVUlBPU0UgQVJFIERJU0NMQUlN RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUworICAgQkUg TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF TVBMQVJZLCBPUgorICAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUgorICAgQlVTSU5FU1MgSU5URVJS VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCisg ICBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ TkcgTkVHTElHRU5DRSBPUgorICAgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRgorICAgQURWSVNFRCBPRiBUSEUgUE9T U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyAgIFVzZWQgZm9yIFRlbG5ldCBBdXRoZW50aWNh dGlvbiBPcHRpb24sIFRlbG5ldCBFbmNyeXB0aW9uIE9wdGlvbiwgYW5kCisgICBLZXJiZXJvcyAo VE0pIGF1dGhlbnRpY2F0aW9uIGluIEMtS2VybWl0LCBLZXJtaXQgOTUgKGs5NS5leGUsIGsyLmV4 ZSwKKyAgIGs5NWNyeXB0LmRsbCwgazJjcnlwdC5kbGwpCisKKyAgIENvcHlyaWdodCAoQykgMTk5 NS0xOTk3IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKSBBbGwgcmlnaHRzCisgICByZXNl cnZlZC4KKworICAgVGhpcyBwYWNrYWdlIGlzIGFuIERFUyBpbXBsZW1lbnRhdGlvbiB3cml0dGVu IGJ5IEVyaWMgWW91bmcKKyAgIChlYXlAY3J5cHRzb2Z0LmNvbSkuIFRoZSBpbXBsZW1lbnRhdGlv biB3YXMgd3JpdHRlbiBzbyBhcyB0byBjb25mb3JtCisgICB3aXRoIE1JVCdzIGxpYmRlcy4KKwor ICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgZm9yIGNvbW1lcmNpYWwgYW5kIG5vbi1jb21tZXJjaWFs IHVzZSBhcyBsb25nIGFzCisgICB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIGFoZWFyZWQg dG8uIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcHBseQorICAgdG8gYWxsIGNvZGUgZm91bmQg aW4gdGhpcyBkaXN0cmlidXRpb24uCisKKyAgIENvcHlyaWdodCByZW1haW5zIEVyaWMgWW91bmcn cywgYW5kIGFzIHN1Y2ggYW55IENvcHlyaWdodCBub3RpY2VzIGluCisgICB0aGUgY29kZSBhcmUg bm90IHRvIGJlIHJlbW92ZWQuIElmIHRoaXMgcGFja2FnZSBpcyB1c2VkIGluIGEgcHJvZHVjdCwK KyAgIEVyaWMgWW91bmcgc2hvdWxkIGJlIGdpdmVuIGF0dHJpYnV0aW9uIGFzIHRoZSBhdXRob3Ig b2YgdGhhdCB0aGUgU1NMCisgICBsaWJyYXJ5LiBUaGlzIGNhbiBiZSBpbiB0aGUgZm9ybSBvZiBh IHRleHR1YWwgbWVzc2FnZSBhdCBwcm9ncmFtCisgICBzdGFydHVwIG9yIGluIGRvY3VtZW50YXRp b24gKG9ubGluZSBvciB0ZXh0dWFsKSBwcm92aWRlZCB3aXRoIHRoZQorICAgcGFja2FnZS4KKwor ICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0 aCBvciB3aXRob3V0CisgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgICBtZXQ6CisgICAgMS4gUmVkaXN0cmli dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBjb3B5cmlnaHQgbm90aWNlLAor ICAgICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt ZXIuCisgICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICAgICAgZG9jdW1lbnRh dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgICAgICAgZGlz dHJpYnV0aW9uLgorICAgIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBm ZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworICAgICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUg Zm9sbG93aW5nIGFja25vd2xlZGdlbWVudDogVGhpcyBwcm9kdWN0CisgICAgICAgaW5jbHVkZXMg c29mdHdhcmUgZGV2ZWxvcGVkIGJ5IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKQorCisg ICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEVSSUMgWU9VTkcgYGBBUyBJUycnIEFORCBB TlkgRVhQUkVTUyBPUgorICAgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAgIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAgIERJU0NMQUlNRUQu IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG T1IKKyAgIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB UlksIE9SIENPTlNFUVVFTlRJQUwKKyAgIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgICBPUiBTRVJWSUNFUzsg TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikK KyAgIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF UiBJTiBDT05UUkFDVCwKKyAgIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORworICAgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgICBQT1NTSUJJ TElUWSBPRiBTVUNIIERBTUFHRS4KKworICAgVGhlIGxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGlvbiB0 ZXJtcyBmb3IgYW55IHB1YmxpY2FsbHkgYXZhaWxhYmxlIHZlcnNpb24KKyAgIG9yIGRlcml2YXRp dmUgb2YgdGhpcyBjb2RlIGNhbm5vdCBiZSBjaGFuZ2VkLiBpLmUuIHRoaXMgY29kZSBjYW5ub3QK KyAgIHNpbXBseSBiZSBjb3BpZWQgYW5kIHB1dCB1bmRlciBhbm90aGVyIGRpc3RyaWJ1dGlvbiBs aWNlbnNlIFtpbmNsdWRpbmcKKyAgIHRoZSBHTlUgUHVibGljIExpY2Vuc2UuXQorCisgICBUaGUg cmVhc29uIGJlaGluZCB0aGlzIGJlaW5nIHN0YXRlZCBpbiB0aGlzIGRpcmVjdCBtYW5uZXIgaXMg cGFzdAorICAgZXhwZXJpZW5jZSBpbiBjb2RlIHNpbXBseSBiZWluZyBjb3BpZWQgYW5kIHRoZSBh dHRyaWJ1dGlvbiByZW1vdmVkIGZyb20KKyAgIGl0IGFuZCB0aGVuIGJlaW5nIGRpc3RyaWJ1dGVk IGFzIHBhcnQgb2Ygb3RoZXIgcGFja2FnZXMuIFRoaXMKKyAgIGltcGxlbWVudGF0aW9uIHdhcyBh IG5vbi10cml2aWFsIGFuZCB1bnBhaWQgZWZmb3J0LgorCisgICBVc2VkIERFUyBlbmNyeXB0aW9u IGluIEtlcm1pdCA5NSAoazk1Y3J5cHQuZGxsLCBrMmNyeXB0LmRsbCkKKyAgICAgX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f CisKKyAqIFRoaXMgaXMgdmVyc2lvbiAxLjEgb2YgQ3J5cHRvTGliCisgKgorICogVGhlIGF1dGhv cnMgb2YgdGhpcyBzb2Z0d2FyZSBhcmUgSmFjayBMYWN5LCBEb24gTWl0Y2hlbGwgYW5kIE1hdHQg QmxhemUKKyAqICAgICAgICAgICAgICBDb3B5cmlnaHQgKGMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5 OTQsIDE5OTUgYnkgQVQmVC4KKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBhbmQgbW9kaWZ5 IHRoaXMgc29mdHdhcmUgd2l0aG91dCBmZWUKKyAqIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRl ZCB0aGF0IHRoaXMgZW50aXJlIG5vdGljZSBpcyBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBv ZiBhbnkgc29mdHdhcmUgd2hpY2ggaXMgb3IgaW5jbHVkZXMgYSBjb3B5IG9yCisgKiBtb2RpZmlj YXRpb24gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgaW4gYWxsIGNvcGllcyBvZiB0aGUgc3VwcG9ydGlu ZworICogZG9jdW1lbnRhdGlvbiBmb3Igc3VjaCBzb2Z0d2FyZS4KKyAqCisgKiBOT1RFOgorICog U29tZSBvZiB0aGUgYWxnb3JpdGhtcyBpbiBjcnlwdG9saWIgbWF5IGJlIGNvdmVyZWQgYnkgcGF0 ZW50cy4KKyAqIEl0IGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgdXNlciB0byBlbnN1cmUg dGhhdCBhbnkgcmVxdWlyZWQKKyAqIGxpY2Vuc2VzIGFyZSBvYnRhaW5lZC4KKyAqCisgKgorICog U09NRSBQQVJUUyBPRiBDUllQVE9MSUIgTUFZIEJFIFJFU1RSSUNURUQgVU5ERVIgVU5JVEVEIFNU QVRFUyBFWFBPUlQKKyAqIFJFR1VMQVRJT05TLgorICoKKyAqCisgKiBUSElTIFNPRlRXQVJFIElT IEJFSU5HIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAor ICogV0FSUkFOVFkuICBJTiBQQVJUSUNVTEFSLCBORUlUSEVSIFRIRSBBVVRIT1JTIE5PUiBBVCZU IE1BS0UgQU5ZCisgKiBSRVBSRVNFTlRBVElPTiBPUiBXQVJSQU5UWSBPRiBBTlkgS0lORCBDT05D RVJOSU5HIFRIRSBNRVJDSEFOVEFCSUxJVFkKKyAqIE9GIFRISVMgU09GVFdBUkUgT1IgSVRTIEZJ VE5FU1MgRk9SIEFOWSBQQVJUSUNVTEFSIFBVUlBPU0UuCisKKyAgIFVzZWQgZm9yIEJpZyBOdW1i ZXIgbGlicmFyeSBpbiBLZXJtaXQgOTUgKGs5NWNyeXB0LmRsbCwgazJjcnlwdC5kbGwpLgorCisg ICBbIFs2NTJdVG9wIF0gWyBbNjUzXUMtS2VybWl0IF0gWyBbNjU0XUtlcm1pdCBIb21lIF0KKyAg ICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fCisKKyAgIENLRVJNSVQ3MC5IVE0gLyBUaGUgS2VybWl0IFByb2plY3QgLyBD b2x1bWJpYSBVbml2ZXJzaXR5IC8gOCBGZWIgMjAwMCAvCisgICBMYXN0IHVwZGF0ZTogOCBBdWcg MjAxMQorCitSZWZlcmVuY2VzCisKKyAgIDEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1LworICAg Mi4gbWFpbHRvOmtlcm1pdEBjb2x1bWJpYS5lZHUKKyAgIDMuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9pbmRleC5odG1sCisgICA0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvazk1Lmh0bWwKKyAgIDUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0 Lmh0bWwKKyAgIDYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3NjcmlwdHMuaHRt bAorICAgNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2N1cnJlbnQuaHRtbAorICAg OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L3doYXRzbmV3Lmh0bWwKKyAgIDkuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9mYXEuaHRtbAorICAxMC4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L3N1cHBvcnQuaHRtbAorICAxMS4gaHR0cDovL3d3dy5hbWF6b24u Y29tL2dwL3Byb2R1Y3QvMTU1NTU4MTY0MT9pZT1VVEY4JnRhZz1hbGVpZG1vcmVsZG9tLTIwJmxp bmtDb2RlPWFzMiZjYW1wPTE3ODkmY3JlYXRpdmU9OTMyNSZjcmVhdGl2ZUFTSU49MTU1NTU4MTY0 MQorICAxMi4gbWFpbHRvOmtlcm1pdC1zdXBwb3J0QGNvbHVtYmlhLmVkdQorICAxMy4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0LworICAxNC4gaHR0cDovL3d3dy5rZXJtaXQtcHJvamVj dC5vcmcvCisgIDE1LiBodHRwOi8vd3d3LmNvbHVtYmlhLm55Yy5ueS51cy9rZXJtaXQvCisgIDE2 LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9mL0NPUFlJTkcuVFhUCisgIDE3LiBm dHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9mL2NrY21haS5jCisgIDE4LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeHYKKyAgMTkuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2IyLmh0bQorICAyMC4gZnRwOi8va2VybWl0LmNvbHVt YmlhLmVkdS9rZXJtaXQvZi9ja2Nid3IudHh0CisgIDIxLiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEu ZWR1L2tlcm1pdC9mL2NrdWJ3ci50eHQKKyAgMjIuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUv a2VybWl0L2YvY2t2YndyLnR4dAorICAyMy4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJt aXQvZi9ja3Vid3IudHh0CisgIDI0LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9m L2NrZXJtaXQ3MC50eHQKKyAgMjUuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Yv c2VjdXJpdHkudHh0CisgIDI2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvc2VjdXJp dHkuaHRtCisgIDI3LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9mL2lrc2QudHh0 CisgIDI4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaWtzZC5odG0KKyAgMjkuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9jdWlrc2QuaHRtCisgIDMwLiBmdHA6Ly9rZXJt aXQuY29sdW1iaWEuZWR1L2tlcm1pdC9mL3RlbG5ldC50eHQKKyAgMzEuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC90ZWxuZXQuaHRtCisgIDMyLiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEu ZWR1L2tlcm1pdC9mL0NPUFlJTkcuVFhUCisgIDMzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvazk1Lmh0bWwKKyAgMzQuIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvCisgIDM1LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tiMi5odG0KKyAgMzYuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4aQorICAzNy4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3hpaQorICAzOC4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gwCisgIDM5LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDEKKyAgNDAuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4MS4wCisgIDQxLiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDEuMQorICA0Mi4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gxLjIKKyAgNDMuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4MS4zCisgIDQ0LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDEuNAorICA0NS4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gxLjUKKyAgNDYuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4MS41LjEKKyAgNDcuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4MS41LjIKKyAgNDguIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4MS41LjMKKyAgNDku IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4MS41LjQKKyAg NTAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4MS41LjUK KyAgNTEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4MS42 CisgIDUyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDEu NworICA1My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gx LjgKKyAgNTQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4 MS45CisgIDU1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwj eDEuMTAKKyAgNTYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRt bCN4MS4xMQorICA1Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5o dG1sI3gxLjExLjEKKyAgNTguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0 NzAuaHRtbCN4MS4xMS4yCisgIDU5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tl cm1pdDcwLmh0bWwjeDEuMTEuMworICA2MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQ3MC5odG1sI3gxLjExLjQKKyAgNjEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2VybWl0NzAuaHRtbCN4MS4xMS41CisgIDYyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDEuMTEuNgorICA2My4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gxLjExLjcKKyAgNjQuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4MS4xMgorICA2NS4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gxLjEzCisgIDY2LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDEuMTQKKyAgNjcuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4MS4xNQorICA2OC4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gxLjE2CisgIDY5LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDEuMTcKKyAgNzAuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4MS4xOAorICA3MS4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gxLjE5CisgIDcy LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDEuMjAKKyAg NzMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4MS4yMQor ICA3NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gxLjIy CisgIDc1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDEu MjIuMQorICA3Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1s I3gxLjIyLjIKKyAgNzcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAu aHRtbCN4MS4yMi4zCisgIDc4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dDcwLmh0bWwjeDEuMjIuNAorICA3OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQ3MC5odG1sI3gxLjIyLjUKKyAgODAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0NzAuaHRtbCN4MS4yMi42CisgIDgxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDEuMjIuNworICA4Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gxLjIyLjgKKyAgODMuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4MS4yMworICA4NC4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gxLjI0CisgIDg1LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDIKKyAgODYuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Mi4wCisgIDg3LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDIuMQorICA4OC4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gyLjEuMQorICA4OS4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gyLjEuMgorICA5MC4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gyLjEuMworICA5MS4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gyLjEuNAorICA5Mi4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gyLjEuNQorICA5 My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gyLjEuNgor ICA5NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gyLjEu NworICA5NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gy LjEuOAorICA5Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1s I3gyLjEuOQorICA5Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5o dG1sI3gyLjEuMTAKKyAgOTguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0 NzAuaHRtbCN4Mi4xLjExCisgIDk5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tl cm1pdDcwLmh0bWwjeDIuMS4xMgorIDEwMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQ3MC5odG1sI3gyLjEuMTMKKyAxMDEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2VybWl0NzAuaHRtbCN4Mi4xLjE0CisgMTAyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDIuMS4xNQorIDEwMy4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gyLjEuMTYKKyAxMDQuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Mi4yCisgMTA1LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDIuMi4xCisgMTA2LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDIuMi4yCisgMTA3LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDIuMworIDEwOC4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gyLjMuMAorIDEwOS4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gyLjMuMQorIDExMC4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gyLjMuMgorIDEx MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gyLjMuMwor IDExMi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gyLjMu NAorIDExMy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gy LjMuNQorIDExNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1s I3gyLjMuNgorIDExNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5o dG1sI3gyLjQKKyAxMTYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAu aHRtbCN4Mi41CisgMTE3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcw Lmh0bWwjeDIuNgorIDExOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3 MC5odG1sI3gyLjcKKyAxMTkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0 NzAuaHRtbCN4Mi43LjAKKyAxMjAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0NzAuaHRtbCN4Mi43LjEKKyAxMjEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2VybWl0NzAuaHRtbCN4Mi43LjIKKyAxMjIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0NzAuaHRtbCN4Mi43LjMKKyAxMjMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2VybWl0NzAuaHRtbCN4Mi43LjQKKyAxMjQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Mi43LjQuMQorIDEyNS4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gyLjcuNC4yCisgMTI2LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDIuNy40LjMKKyAxMjcuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Mi43LjQuNAorIDEyOC4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gyLjcuNC41CisgMTI5 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDIuOAorIDEz MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gyLjkKKyAx MzEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Mi45LjEK KyAxMzIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Mi45 LjIKKyAxMzMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4 Mi4xMAorIDEzNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1s I3gyLjExCisgMTM1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0 bWwjeDIuMTIKKyAxMzYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAu aHRtbCN4Mi4xMworIDEzNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3 MC5odG1sI3gyLjE0CisgMTM4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dDcwLmh0bWwjeDIuMTUKKyAxMzkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0NzAuaHRtbCN4MworIDE0MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQ3MC5odG1sI3gzLjEKKyAxNDEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0NzAuaHRtbCN4My4yCisgMTQyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tl cm1pdDcwLmh0bWwjeDMuMworIDE0My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQ3MC5odG1sI3gzLjQKKyAxNDQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2VybWl0NzAuaHRtbCN4NAorIDE0NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQ3MC5odG1sI3g0LjAKKyAxNDYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2VybWl0NzAuaHRtbCN4NC4xCisgMTQ3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tlcm1pdDcwLmh0bWwjeDQuMS4xCisgMTQ4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tlcm1pdDcwLmh0bWwjeDQuMS4yCisgMTQ5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMS4zCisgMTUwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMgorIDE1MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjIuMQorIDE1Mi4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjIuMS4xCisgMTUzLiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMi4xLjIKKyAxNTQuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4yLjEuMworIDE1NS4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjIuMgorIDE1Ni4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjIuMi4xCisg MTU3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMi4y LjIKKyAxNTguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4 NC4yLjMKKyAxNTkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRt bCN4NC4yLjMuMQorIDE2MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3 MC5odG1sI3g0LjIuMy4yCisgMTYxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tl cm1pdDcwLmh0bWwjeDQuMi40CisgMTYyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tlcm1pdDcwLmh0bWwjeDQuMi41CisgMTYzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tlcm1pdDcwLmh0bWwjeDQuMi42CisgMTY0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMi43CisgMTY1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMi44CisgMTY2LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMi44LjEKKyAxNjcuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4yLjguMgorIDE2OC4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjIuOC4zCisgMTY5LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMi44LjQKKyAxNzAu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4zCisgMTcx LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMy4xCisg MTcyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMy4y CisgMTczLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQu My4zCisgMTc0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwj eDQuMy40CisgMTc1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0 bWwjeDQuNAorIDE3Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5o dG1sI3g0LjQuMQorIDE3Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3 MC5odG1sI3g0LjQuMS4xCisgMTc4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tl cm1pdDcwLmh0bWwjeDQuNC4xLjIKKyAxNzkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0NzAuaHRtbCN4NC40LjIKKyAxODAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2VybWl0NzAuaHRtbCN4NC40LjIuMQorIDE4MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjQuMi4xLjEKKyAxODIuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC40LjIuMS4yCisgMTgzLiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuNC4yLjIKKyAxODQuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC41CisgMTg1LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuNS4xCisgMTg2 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuNS4yCisg MTg3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuNS4y LjEKKyAxODguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4 NC41LjIuMgorIDE4OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5o dG1sI3g0LjUuMworIDE5MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3 MC5odG1sI3g0LjUuNAorIDE5MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQ3MC5odG1sI3g0LjYKKyAxOTIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0NzAuaHRtbCN4NC43CisgMTkzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tl cm1pdDcwLmh0bWwjeDQuNy4xCisgMTk0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tlcm1pdDcwLmh0bWwjeDQuNy4yCisgMTk1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tlcm1pdDcwLmh0bWwjeDQuNy4zCisgMTk2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuOAorIDE5Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjguMQorIDE5OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjguMgorIDE5OS4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjkKKyAyMDAuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC45LjEKKyAyMDEuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC45LjIKKyAyMDIuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC45LjMKKyAyMDMuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4xMAorIDIwNC4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjExCisgMjA1LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMTEuMQorIDIwNi4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjExLjIKKyAy MDcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4xMS4z CisgMjA4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQu MTEuNAorIDIwOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1s I3g0LjExLjUKKyAyMTAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAu aHRtbCN4NC4xMS42CisgMjExLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dDcwLmh0bWwjeDQuMTIKKyAyMTIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0NzAuaHRtbCN4NC4xMworIDIxMy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQ3MC5odG1sI3g0LjE0CisgMjE0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tlcm1pdDcwLmh0bWwjeDQuMTUKKyAyMTUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0NzAuaHRtbCN4NC4xNgorIDIxNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZXJtaXQ3MC5odG1sI3g0LjE3CisgMjE3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMTcuMQorIDIxOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjE3LjIKKyAyMTkuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4xOAorIDIyMC4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjE5CisgMjIxLiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMjAKKyAyMjIuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4yMC4xCisgMjIzLiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMjAuMgorIDIyNC4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjIwLjIuMQorIDIy NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjIwLjIu MgorIDIyNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0 LjIwLjIuMworIDIyNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5o dG1sI3g0LjIwLjIuNAorIDIyOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQ3MC5odG1sI3g0LjIwLjIuNQorIDIyOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQ3MC5odG1sI3g0LjIwLjMKKyAyMzAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2VybWl0NzAuaHRtbCN4NC4yMQorIDIzMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjIyCisgMjMyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMjIuMQorIDIzMy4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjIyLjIKKyAyMzQuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4yMi4zCisgMjM1LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMjIuNAorIDIzNi4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjIyLjUKKyAyMzcuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4yMi42CisgMjM4 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMjIuNwor IDIzOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjIy LjgKKyAyNDAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4 NC4yMworIDI0MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1s I3g0LjI0CisgMjQyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0 bWwjeDQuMjUKKyAyNDMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAu aHRtbCN4NQorIDI0NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5o dG1sI3g1LjAKKyAyNDUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAu aHRtbCN4NS4xCisgMjQ2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcw Lmh0bWwjeDUuMgorIDI0Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3 MC5odG1sI3g1LjMKKyAyNDguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0 NzAuaHRtbCN4NS4zLjEKKyAyNDkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0NzAuaHRtbCN4NS4zLjIKKyAyNTAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2VybWl0NzAuaHRtbCN4NS40CisgMjUxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tlcm1pdDcwLmh0bWwjeDUuNQorIDI1Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQ3MC5odG1sI3g1LjYKKyAyNTMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0NzAuaHRtbCN4NS43CisgMjU0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tlcm1pdDcwLmh0bWwjeDYKKyAyNTUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0NzAuaHRtbCN4Ni4wCisgMjU2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tlcm1pdDcwLmh0bWwjeDYuMQorIDI1Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZXJtaXQ3MC5odG1sI3g2LjIKKyAyNTguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2VybWl0NzAuaHRtbCN4Ni4zCisgMjU5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDYuNAorIDI2MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrZXJtaXQ3MC5odG1sI3g2LjUKKyAyNjEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ni42CisgMjYyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDYuNi4xCisgMjYzLiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDYuNi4yCisgMjY0LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDYuNi4yCisgMjY1LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDYuNi4zCisgMjY2LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDYuNi40CisgMjY3LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDYuNi41CisgMjY4LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDYuNi41LjEKKyAyNjku IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ni42LjUuMgor IDI3MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g2LjYu NS4zCisgMjcxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwj eDYuNi41LjQKKyAyNzIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAu aHRtbCN4Ni42LjUuNQorIDI3My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQ3MC5odG1sI3g2LjcKKyAyNzQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0NzAuaHRtbCN4NworIDI3NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQ3MC5odG1sI3g3LjAKKyAyNzYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0NzAuaHRtbCN4Ny4xCisgMjc3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tl cm1pdDcwLmh0bWwjeDcuMS4xCisgMjc4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tlcm1pdDcwLmh0bWwjeDcuMS4yCisgMjc5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tlcm1pdDcwLmh0bWwjeDcuMS4zCisgMjgwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuMS40CisgMjgxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuMgorIDI4Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g3LjMKKyAyODMuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny40CisgMjg0LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuNQorIDI4NS4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g3LjYKKyAyODYuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny43CisgMjg3LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuOAorIDI4OC4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g3LjkKKyAyODkuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny45LjEKKyAyOTAuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny45LjIKKyAyOTEuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny4xMAorIDI5Mi4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g3LjEwLjEKKyAyOTMuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny4xMC4yCisgMjk0 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuMTAuMwor IDI5NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g3LjEw LjQKKyAyOTYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4 Ny4xMC41CisgMjk3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0 bWwjeDcuMTAuNgorIDI5OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3 MC5odG1sI3g3LjEwLjcKKyAyOTkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0NzAuaHRtbCN4Ny4xMC44CisgMzAwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tlcm1pdDcwLmh0bWwjeDcuMTAuOQorIDMwMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZXJtaXQ3MC5odG1sI3g3LjEwLjEwCisgMzAyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuMTEKKyAzMDMuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny4xMgorIDMwNC4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g3LjEzCisgMzA1LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuMTQKKyAzMDYuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny4xNQorIDMwNy4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g3LjE2CisgMzA4LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuMTcKKyAzMDkuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny4xOAorIDMxMC4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g3LjE5CisgMzExLiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuMjAKKyAzMTIuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny4yMC4xCisgMzEz LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuMjAuMgor IDMxNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g3LjIx CisgMzE1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcu MjIKKyAzMTYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4 Ny4yMworIDMxNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1s I3g3LjI0CisgMzE4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0 bWwjeDcuMjUKKyAzMTkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAu aHRtbCN4Ny4yNgorIDMyMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3 MC5odG1sI3g3LjI2LjEKKyAzMjEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0NzAuaHRtbCN4Ny4yNi4yCisgMzIyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tlcm1pdDcwLmh0bWwjeDcuMjcKKyAzMjMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0NzAuaHRtbCN4OAorIDMyNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQ3MC5odG1sI3g5CisgMzI1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tlcm1pdDcwLmh0bWwjeDkuMAorIDMyNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQ3MC5odG1sI3g5LjEKKyAzMjcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0NzAuaHRtbCN4OS4yCisgMzI4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tlcm1pdDcwLmh0bWwjeDkuMworIDMyOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZXJtaXQ3MC5odG1sI3gxMAorIDMzMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZXJtaXQ3MC5odG1sI3hpaWkKKyAzMzEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2VybWl0NzAuaHRtbCN4aWlpLjEKKyAzMzIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4aWlpLjEuMQorIDMzMy4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3hpaWkuMS4yCisgMzM0LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeGlpaS4xLjIuMQorIDMzNS4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3hpaWkuMS4yLjIKKyAzMzYu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4aWlpLjEuMi4z CisgMzM3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeGlp aS4yCisgMzM4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwj eGl2CisgMzM5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwj eHYKKyAzNDAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2IyLmh0bQorIDM0MS4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrYnJldmlld3MuaHRtbAorIDM0Mi4gaHR0 cDovL3d3dy5iaHVzYS5jb20vCisgMzQzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv bWFudWFscy5odG1sI2NrZGUKKyAzNDQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9t YW51YWxzLmh0bWwja3RiCisgMzQ1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvbmV3 cy5odG1sCisgMzQ2LiBuZXdzOmNvbXAucHJvdG9jb2xzLmtlcm1pdC5hbm5vdW5jZQorIDM0Ny4g bmV3czpjb21wLnByb3RvY29scy5rZXJtaXQubWlzYworIDM0OC4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrYjIuaHRtCisgMzQ5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tlcm1pdDcwLmh0bWwjeDQKKyAzNTAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0NzAuaHRtbCN4NC4zCisgMzUxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tlcm1pdDcwLmh0bWwjeDQuMjMKKyAzNTIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2VybWl0NzAuaHRtbCN4NC41LjEKKyAzNTMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4MS41CisgMzU0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuNy4xCisgMzU1LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuOS4KKyAzNTYuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2IyLmh0bQorIDM1Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZXJtaXQ3MC5odG1sI3g3LjkuMgorIDM1OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrZXJtaXQ3MC5odG1sI3gyLjE1CisgMzU5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDkuMQorIDM2MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gxLjYKKyAzNjEuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny40CisgMzYyLiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuOS4xCisgMzYzLiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjbWpkCisgMzY0LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjbWpkCisgMzY1LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuOQorIDM2Ni4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrYjIuaHRtCisgMzY3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tiMi5odG0KKyAzNjguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0NzAuaHRtbCN4Ny41CisgMzY5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tl cm1pdDcwLmh0bWwjeDIuMTIKKyAzNzAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2VybWl0NzAuaHRtbCN4MS41CisgMzcxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tlcm1pdDcwLmh0bWwjeDQuOS4xCisgMzcyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tlcm1pdDcwLmh0bWwjeDYuNi41CisgMzczLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuOQorIDM3NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrZXJtaXQ3MC5odG1sI3g3LjE4CisgMzc1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuNAorIDM3Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gxLjE1CisgMzc3LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMworIDM3OC4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g3LjMKKyAzNzkuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny4xMC43CisgMzgwLiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuMQorIDM4MS4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjkuMQorIDM4Mi4gZnRwOi8va2Vy bWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvZi9ja2NjZmcudHh0CisgMzgzLiBmdHA6Ly9rZXJtaXQu Y29sdW1iaWEuZWR1L2tlcm1pdC9mL2NrY2NmZy50eHQKKyAzODQuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4MS4yMi40CisgMzg1LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDEuMjIuNQorIDM4Ni4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrYjIuaHRtCisgMzg3LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDEuMjIuNQorIDM4OC4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g3LjEyCisgMzg5LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDIuMS4xNgorIDM5MC4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gyLjcKKyAzOTEuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Mi4zLjUKKyAzOTIuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny41CisgMzkzLiBodHRw Oi8vd3d3LnRlbGVmb25pY2EuZXMvY2FtYmlvZGVudW1lcmFjaW9uLworIDM5NC4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g3LjUKKyAzOTUuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2IyLmh0bQorIDM5Ni4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gyLjIuMgorIDM5Ny4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gyLjEuMTEKKyAzOTguIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Mi4xLjEzCisgMzk5LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDIuMS4xMgorIDQwMC4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrYjIuaHRtCisgNDAxLiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDIuMS4xCisgNDAyLiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tiMi5odG0KKyA0MDMuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2IyLmh0bQorIDQwNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQ3MC5odG1sI3gyLjEuNworIDQwNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZXJtaXQ3MC5odG1sI3gyLjEuNgorIDQwNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrYjIuaHRtCisgNDA3LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9m L3RlbG5ldC50eHQKKyA0MDguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC90ZWxuZXQu aHRtCisgNDA5LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9mL3RlbG5ldC50eHQK KyA0MTAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC90ZWxuZXQuaHRtCisgNDExLiBm dHA6Ly9mdHAuaXNpLmVkdS9pbi1ub3Rlcy9yZmMxNTcyLnR4dAorIDQxMi4gZnRwOi8vZnRwLmlz aS5lZHUvaW4tbm90ZXMvcmZjNzc5LnR4dAorIDQxMy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrYjIuaHRtCisgNDE0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tl cm1pdDcwLmh0bWwjeDIuMTAKKyA0MTUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2VybWl0NzAuaHRtbCN4Mi44CisgNDE2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tlcm1pdDcwLmh0bWwjeDEuNQorIDQxNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQ3MC5odG1sI3g0LjIwCisgNDE4LiBodHRwOi8vd3d3LnBzeS51cS5vei5hdS9+ZnRw L0NyeXB0by8KKyA0MTkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9zZWN1cml0eS5o dG0KKyA0MjAuIGh0dHA6Ly9zcnAuc3RhbmZvcmQuZWR1L3NycC8KKyA0MjEuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Mi43LjEsCisgNDIyLiBmdHA6Ly9r ZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9mL2NrY2NmZy50eHQKKyA0MjMuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9zZWN1cml0eS5odG0KKyA0MjQuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2IyLmh0bQorIDQyNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZXJtaXQ3MC5odG1sI3gyLjcKKyA0MjYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2VybWl0NzAuaHRtbCN4Mi4wCisgNDI3LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1 L2tlcm1pdC9mL2NrdWlucy50eHQKKyA0MjguIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2Vy bWl0L2YvY2t1YndyLnR4dAorIDQyOS4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQv Zi9ja3VpbnMudHh0CisgNDMwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaWtzZC5o dG1sI3g0LjIKKyA0MzEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pa3NkLmh0bWwK KyA0MzIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4y LjguMQorIDQzMy4gZnRwOi8vZnRwLmlzaS5lZHUvaW4tbm90ZXMvcmZjMTk0NS50eHQKKyA0MzQu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4MS41CisgNDM1 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDMuMgorIDQz Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gzLjIKKyA0 MzcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2IyLmh0bQorIDQzOC4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrYjIuaHRtCisgNDM5LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDUuNAorIDQ0MC4gZnRwOi8va2VybWl0LmNv bHVtYmlhLmVkdS9rZXJtaXQvZi9ja3Vid3IudHh0CisgNDQxLiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMTAKKyA0NDIuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC43LjEKKyA0NDMuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC43LjMKKyA0NDQuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4zCisgNDQ1LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMTAKKyA0NDYuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4xMQorIDQ0Ny4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjE1CisgNDQ4LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMi40CisgNDQ5LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuNworIDQ1MC4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjIuMworIDQ1 MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjIuMS4z CisgNDUyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tiMi5odG0KKyA0NTMuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4yLjIKKyA0NTQu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4MS41CisgNDU1 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMi44LjIK KyA0NTYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4z CisgNDU3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQu MTAKKyA0NTguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4 NC4xMQorIDQ1OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1s I3g0LjE1CisgNDYwLiBodHRwOi8vd3d3LnRlbHN0cmEuY29tLmF1L2RvY3MvUEdQLworIDQ2MS4g aHR0cDovL3d3dy50ZWxzdHJhLmNvbS5hdS9kb2NzL1BHUC9wZ3Bkb2MyL3BncGRvYzJfMTcuaHRt bAorIDQ2Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L3NlY3VyaXR5Lmh0bQorIDQ2 My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gyLjcKKyA0 NjQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2IyLmh0bQorIDQ2NS4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gyLjE0CisgNDY2LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDEuMjMKKyA0NjcuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC43CisgNDY4LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tiMi5odG0KKyA0NjkuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2IyLmh0bQorIDQ3MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjkKKyA0NzEuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2IyLmh0bQorIDQ3Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQ3MC5odG1sI3gxLjUuNAorIDQ3My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZXJtaXQ3MC5odG1sI3g0LjMKKyA0NzQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2VybWl0NzAuaHRtbCN4MS41LjUKKyA0NzUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny41CisgNDc2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuOQorIDQ3Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gxLjUuNAorIDQ3OC4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjkKKyA0NzkuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4MS41LjQKKyA0ODAuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4MS41LjUKKyA0ODEuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2IyLmh0bQorIDQ4Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrYjIuaHRtCisgNDgzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tlcm1pdDcwLmh0bWwjeDEuNQorIDQ4NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQ3MC5odG1sI3gxLjYKKyA0ODUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0NzAuaHRtbCN4Ny4xMAorIDQ4Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZXJtaXQ3MC5odG1sI3g3LjEwLjExCisgNDg3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDEuNgorIDQ4OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjIuMgorIDQ4OS4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjExCisgNDkwLiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDEuNS40CisgNDkxLiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuOS4xCisgNDkyLiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMC42CisgNDkzLiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMgorIDQ5NC4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjEKKyA0OTUuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC43LjEKKyA0OTYuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2IyLmh0bQorIDQ5Ny4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gxLjUKKyA0OTguIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4yLjIKKyA0OTkuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC43LjEKKyA1MDAuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4yCisgNTAxLiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMTAKKyA1MDIuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4yLjIKKyA1MDMu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC43LjEKKyA1 MDQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4yCisg NTA1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMTAK KyA1MDYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4MS4x MS41CisgNTA3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwj eDQuMC42CisgNTA4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0 bWwjeDQuMTEKKyA1MDkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAu aHRtbCN4NC45LjEKKyA1MTAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0 NzAuaHRtbCN4NC4xMS4zCisgNTExLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tl cm1pdDcwLmh0bWwjeDQuOQorIDUxMi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQ3MC5odG1sI3g0LjkKKyA1MTMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2VybWl0NzAuaHRtbCN4NC41LjEKKyA1MTQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0NzAuaHRtbCN4Ny4xMAorIDUxNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZXJtaXQ3MC5odG1sI3g3LjEwLjUKKyA1MTYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny4xMC4zCisgNTE3LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuMTAuNQorIDUxOC4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrYjIuaHRtCisgNTE5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMworIDUyMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjEwCisgNTIxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMworIDUyMi4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjEwCisgNTIzLiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMTUKKyA1MjQuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4xOAorIDUyNS4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjIwCisgNTI2LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMjAKKyA1MjcuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4yMAorIDUyOC4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjE5CisgNTI5LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMTYKKyA1MzAuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4xOQorIDUzMS4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjIwLjIuMworIDUz Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gxLjUKKyA1 MzMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ni42LjUu NAorIDUzNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0 LjIyLjIKKyA1MzUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRt bCN4NC4yMi4zCisgNTM2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tiMi5odG0K KyA1MzcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2IyLmh0bQorIDUzOC4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g5LjMKKyA1MzkuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NS4yLjEKKyA1NDAu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC41LjEKKyA1 NDEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC41LjIK KyA1NDIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ni42 CisgNTQzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeGlp aQorIDU0NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3hp aWkKKyA1NDUuIGZ0cDovL2Z0cC5pc2kuZWR1L2luLW5vdGVzL3JmYzE0ODkudHh0CisgNTQ2LiBm dHA6Ly9mdHAuaXNpLmVkdS9pbi1ub3Rlcy9yZmMyMzE5LnR4dAorIDU0Ny4gaHR0cDovL3d3dy51 bmljb2RlLm9yZy8KKyA1NDguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0 NzAuaHRtbCN4Ni42LjIKKyA1NDkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0NzAuaHRtbCN4Ni42LjUuMQorIDU1MC4gZnRwOi8vZnRwLmlzaS5lZHUvaW4tbm90ZXMvcmZj MjY0MC50eHQKKyA1NTEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAu aHRtbCN4Ni42LjIKKyA1NTIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0 NzAuaHRtbCN4Ni4wCisgNTUzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dDcwLmh0bWwjeDYuNQorIDU1NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQ3MC5odG1sI3g2LjQKKyA1NTUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Iy Lmh0bQorIDU1Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1s I3g0LjIxCisgNTU3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0 bWwjeDYuNQorIDU1OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5o dG1sI3gyLjgKKyA1NTkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAu aHRtbCN4Ny43CisgNTYwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcw Lmh0bWwjeDcuMgorIDU2MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3 MC5odG1sI3gxLjE5CisgNTYyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dDcwLmh0bWwjeDQuOQorIDU2My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQ3MC5odG1sI3g0LjEKKyA1NjQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0NzAuaHRtbCN4NC4yCisgNTY1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tl cm1pdDcwLmh0bWwjeDQuMQorIDU2Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQ3MC5odG1sI3g0LjIKKyA1NjcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2VybWl0NzAuaHRtbCN4Mi4xLjExCisgNTY4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tlcm1pdDcwLmh0bWwjeDIuMTAKKyA1NjkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2VybWl0NzAuaHRtbCNmZXJyc3RyaW5nCisgNTcwLiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMi41CisgNTcxLiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDIuMS4xMAorIDU3Mi4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g5LjEKKyA1NzMuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny4yMworIDU3NC4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g3LjIzCisgNTc1LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDEuMjIKKyA1NzYuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4MS42CisgNTc3LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuMjMKKyA1NzguIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny4yNAorIDU3OS4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g3LjI0CisgNTgw LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMi4zCisg NTgxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2s5MC5odG1sCisgNTgyLiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuMTIKKyA1ODMuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny45CisgNTg0LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tiMi5odG0KKyA1ODUuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4xMS4zCisgNTg2LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMTEuMworIDU4Ny4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g3LjUKKyA1ODguIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny4xMC43CisgNTg5 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuMTAuNwor IDU5MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjIu OC40CisgNTkxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwj eDQuMi41CisgNTkyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0 bWwjeDcuOAorIDU5My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5o dG1sI3g0LjkuMQorIDU5NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrYjIuaHRt CisgNTk1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcu MTkKKyA1OTYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4 Ny4xNgorIDU5Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1s I3g3LjkuMQorIDU5OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5o dG1sI3g3LjUKKyA1OTkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAu aHRtbCN4Ny4zCisgNjAwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcw Lmh0bWwjeDQuMTEuMworIDYwMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQ3MC5odG1sI3g0LjUuMQorIDYwMi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQ3MC5odG1sI3g3LjEwCisgNjAzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tlcm1pdDcwLmh0bWwjeDcuMTAuMTAKKyA2MDQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2VybWl0NzAuaHRtbCN4MS41CisgNjA1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuMjMKKyA2MDYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny4xMC43CisgNjA3LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuMTAuNworIDYwOC4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjExLjMKKyA2MDkuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny4xMC4xMQorIDYxMC4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjkKKyA2MTEuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny4xMC4zCisgNjEyLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuMworIDYxMy4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g3LjkuMgorIDYx NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrYjIuaHRtCisgNjE1LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMTcuMgorIDYxNi4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gxLjIyCisgNjE3LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuNy4xCisgNjE4 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDEuMjIKKyA2 MTkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4zCisg NjIwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuOQor IDYyMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gxLjIy CisgNjIyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDEu NgorIDYyMy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g3 LjUKKyA2MjQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4 Ny41CisgNjI1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwj eDcuMTkKKyA2MjYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRt bCN4NC45LjEKKyA2MjcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAu aHRtbCN4OS4zCisgNjI4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcw Lmh0bWwjeDcuNQorIDYyOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrYjIuaHRt CisgNjMwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwKKyA2 MzEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4OQorIDYz Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g3LjQKKyA2 MzMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbAorIDYzNC4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3g5CisgNjM1LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuMjAuMgorIDYz Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g3LjEwLjUK KyA2MzcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny4x MC45CisgNjM4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwj eDEuMTAKKyA2MzkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRt bCN4MS41CisgNjQwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0 bWwjeDQuNy4xCisgNjQxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaWtzZC5odG1s CisgNjQyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcu MTkKKyA2NDMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4 NC4xMAorIDY0NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1s I3g0LjExCisgNjQ1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0 bWwjeDQuMworIDY0Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2drZXJtaXQuaHRt bAorIDY0Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0 LjIwCisgNjQ4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvZ2tlcm1pdC5odG1sCisg NjQ5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tiMi5odG0KKyA2NTAuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny4zCisgNjUxLiBtYWls dG86a2VybWl0QGNvbHVtYmlhLmVkdQorIDY1Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZXJtaXQ3MC5odG1sI3RvcAorIDY1My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZXJtaXQuaHRtbAorIDY1NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2lu ZGV4Lmh0bWwKCmRpZmYgLS1naXQgYS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAu MzAyL2NrZXJtaXQ4MC50eHQgYi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAy L2NrZXJtaXQ4MC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk2YjY4 YgotLS0gL2Rldi9udWxsCisrKyBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4z MDIvY2tlcm1pdDgwLnR4dApAQCAtMCwwICsxLDEwMjg2IEBACisKKyAgIFsxXVRoZSBDb2x1bWJp YSBDcm93biBUaGUgS2VybWl0IFByb2plY3QgfCBDb2x1bWJpYSBVbml2ZXJzaXR5CisgICA2MTIg V2VzdCAxMTV0aCBTdHJlZXQsIE5ldyBZb3JrIE5ZIDEwMDI1IFVTQSBvIFsyXWtlcm1pdEBjb2x1 bWJpYS5lZHUKKyAgIC4uLnNpbmNlIDE5ODEKKyAgIFszXUhvbWUgWzRdS2VybWl0IDk1IFs1XUMt S2VybWl0IFs2XVNjcmlwdHMgWzddQ3VycmVudCBbOF1OZXcgWzldRkFRCisgICBbMTBdU3VwcG9y dAorCitDLUtlcm1pdCA4LjAgVXBkYXRlIE5vdGVzCisKKyAgIFsgWzExXUNvbnRlbnRzIF0gWyBb MTJdQy1LZXJtaXQgXSBbIFsxM11LZXJtaXQgSG9tZSBdCisKK1NlY29uZCBTdXBwbGVtZW50IHRv IFsxNF1Vc2luZyBDLUtlcm1pdCwgMm5kIEVkaXRpb24KKworRm9yIEMtS2VybWl0IDguMAorCisg ICBBcyBvZiBDLUtlcm1pdCB2ZXJzaW9uOiA4LjAuMjExCisgICBEYXRlIG9mIEMtS2VybWl0IHJl bGVhc2U6IDEwIEFwcmlsIDIwMDMKKyAgIFRoaXMgZmlsZSBsYXN0IHVwZGF0ZWQ6IE1vbiBTZXAg MTMgMDg6NTI6MzYgMjAxMAorCisgICAgICogSUYgWU9VIEFSRSBSRUFESU5HIEEgUExBSU4tVEVY VCB2ZXJzaW9uIG9mIHRoaXMgZG9jdW1lbnQsIG5vdGUgdGhhdAorICAgICAgIGl0IGlzIGEgcGxh aW4tdGV4dCBkdW1wIG9mIGEgV2ViIHBhZ2UuIFlvdSBjYW4gdmlzaXQgdGhlIG9yaWdpbmFsCisg ICAgICAgKGFuZCBwb3NzaWJseSBtb3JlIHVwLXRvLWRhdGUpIFdlYiBwYWdlIGhlcmU6CisgIFsx NV1odHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwKKworICAgICAq IElmIHlvdSBhcmUgcmVhZGluZyB0aGUgSFRNTCB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB3aXRoIGEg R1VJIFdlYgorICAgICAgIGJyb3dzZXIsIHRoZSBmZWF0dXJlcyBhZGRlZCBzaW5jZSBDLUtlcm1p dCA4LjAuMjAxIGFyZSBzaG93biBpbiByZWQKKyAgICAgICBpZiB5b3VyIGJyb3dzZXIgYW5kIG1v bml0b3IgcGVybWl0LiBGZWF0dXJlcyB0aGF0IHdlcmUgbmV3IHRvCisgICAgICAgdmVyc2lvbnMg OC4wLjIwMCBhbmQgMjAxIGFyZSBpbiBibGFjay4KKworQXV0aG9yczogRnJhbmsgZGEgQ3J1eiBh bmQgQ2hyaXN0aW5lIE0uIEdpYW5vbmUKK0FkZHJlc3M6IFRoZSBLZXJtaXQgUHJvamVjdAorICAg ICAgICAgQ29sdW1iaWEgVW5pdmVyc2l0eQorICAgICAgICAgNjEyIFdlc3QgMTE1dGggU3RyZWV0 CisgICAgICAgICBOZXcgWW9yayBOWSAxMDAyNS03Nzk5CisgICAgICAgICBVU0EKK0ZheDogICAg ICsxICgyMTIpIDY2Mi02NDQyCitFLU1haWw6ICBbMTZda2VybWl0LXN1cHBvcnRAY29sdW1iaWEu ZWR1CitXZWI6ICAgICBbMTddaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0LworT3I6ICAg ICAgWzE4XWh0dHA6Ly93d3cua2VybWl0LXByb2plY3Qub3JnLworT3I6ICAgICAgWzE5XWh0dHA6 Ly93d3cuY29sdW1iaWEubnljLm55LnVzL2tlcm1pdC8KKworTk9USUNFUworCisgICBUaGlzIGRv Y3VtZW50OgorICAgICAgICAgIENvcHlyaWdodCDvv70gMTk5NywgMjAwMiwgRnJhbmsgZGEgQ3J1 eiBhbmQgQ2hyaXN0aW5lIE0uIEdpYW5vbmUuCisgICAgICAgICAgQWxsIHJpZ2h0cyByZXNlcnZl ZC4KKworICAgS2VybWl0IDk1OgorICAgICAgICAgIENvcHlyaWdodCDvv70gMTk5NSwgMjAwMiwg VHJ1c3RlZXMgb2YgQ29sdW1iaWEgVW5pdmVyc2l0eSBpbiB0aGUKKyAgICAgICAgICBDaXR5IG9m IE5ldyBZb3JrLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgICBDLUtlcm1pdDoKKyAgICAgICAg ICBDb3B5cmlnaHQg77+9IDE5ODUsIDIwMDIsCisgICAgICAgICAgVHJ1c3RlZXMgb2YgQ29sdW1i aWEgVW5pdmVyc2l0eSBpbiB0aGUgQ2l0eSBvZiBOZXcgWW9yay4gQWxsCisgICAgICAgICAgcmln aHRzIHJlc2VydmVkLiBTZWUgdGhlIEMtS2VybWl0IFsyMF1DT1BZSU5HLlRYVCBmaWxlIG9yIHRo ZQorICAgICAgICAgIGNvcHlyaWdodCB0ZXh0IGluIHRoZSBbMjFdY2tjbWFpLmMgbW9kdWxlIGZv ciBkaXNjbGFpbWVyIGFuZAorICAgICAgICAgIHBlcm1pc3Npb25zLgorCisgICBXaGVuIEtlcmJl cm9zKFRNKSBhbmQvb3IgU1JQKFRNKSAoU2VjdXJlIFJlbW90ZSBQYXNzd29yZCkgYW5kL29yCisg ICAgICAgICAgU1NML1RMUyBwcm90b2NvbCBhcmUgaW5jbHVkZWQ6CisgICAgICAgICAgUG9ydGlv bnMgQ29weXJpZ2h0IO+/vSAxOTkwLCBNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZgorICAgICAg ICAgIFRlY2hub2xvZ3kuCisgICAgICAgICAgUG9ydGlvbnMgQ29weXJpZ2h0IO+/vSAxOTkxLCAx OTkzIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YKKyAgICAgICAgICBDYWxpZm9ybmlhLgor ICAgICAgICAgIFBvcnRpb25zIENvcHlyaWdodCDvv70gMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwg MTk5NSBieSBBVCZULgorICAgICAgICAgIFBvcnRpb25zIENvcHlyaWdodCDvv70gMTk5NywgU3Rh bmZvcmQgVW5pdmVyc2l0eS4KKyAgICAgICAgICBQb3J0aW9ucyBDb3B5cmlnaHQg77+9IDE5OTUt MTk5NywgRXJpYyBZb3VuZyA8ZWF5QGNyeXB0b3NvZnQuY29tPi4KKworICAgRm9yIHRoZSBmdWxs IHRleHQgb2YgdGhlIHRoaXJkLXBhcnR5IGNvcHlyaWdodCBub3RpY2VzLCBzZWUKKyAgIFsyMl1B cHBlbmRpeCBWLgorCitXSEFUIElTIElOIFRISVMgRklMRQorCisgICBUaGlzIGZpbGUgbGlzdHMg Y2hhbmdlcyBtYWRlIHRvIEMtS2VybWl0IHNpbmNlIHZlcnNpb24gNy4wIHdhcyByZWxlYXNlZAor ICAgaW4gSmFudWFyeSAyMDAwLiBVc2UgdGhpcyBmaWxlIGFzIGEgc3VwcGxlbWVudCB0bzoKKwor ICAgICAqIFRoZSBzZWNvbmQgZWRpdGlvbiBvZiBbMjNdVXNpbmcgQy1LZXJtaXQ7IGFuZDoKKyAg ICAgKiBUaGUgWzI0XUMtS2VybWl0IDcuMCBVcGRhdGUgTm90ZXMuIEFsc28gYXZhaWxhYmxlIGlu IHBsYWluLXRleHQKKyAgICAgICBmb3JtIGFzIFsyNV1ja2VybWl0NzAudHh0LgorCisgICB1bnRp bCB0aGUgdGhpcmQgZWRpdGlvbiBvZiBVc2luZyBDLUtlcm1pdCBpcyBwdWJsaXNoZWQuIFdlIGFw b2xvZ2l6ZQorICAgZm9yIHRoZSBzY2F0dGVyZWQgZG9jdW1lbnRhdGlvbiBhbmQgd2lsbCBjb25z b2xpZGF0ZSBpdCB3aGVuIHdlIGFyZQorICAgYWJsZS4KKworQURESVRJT05BTCBGSUxFUworCisg ICBTZXZlcmFsIG90aGVyIGZpbGVzIGFjY29tcGFueSB0aGlzIG5ldyBLZXJtaXQgcmVsZWFzZToK KworICAgWzI2XWNrdXR1dG9yLmh0bWwKKyAgICAgICAgICBDLUtlcm1pdCBUdXRvcmlhbCAoZm9y IFVuaXgpLiBBbHNvIGRpc3RyaWJ1dGVkIGluIE5yb2ZmIGZvcm0gYXMKKyAgICAgICAgICBbMjdd Y2t1a2VyLm5yLCB0aGUgVW5peCBDLUtlcm1pdCBtYW51YWwgcGFnZS4KKworICAgWzI4XXNlY3Vy aXR5Lmh0bQorICAgICAgICAgIERpc2N1c3Npb24gb2YgS2VybWl0J3MgbmV3IGF1dGhlbnRpY2F0 aW9uIGFuZCBlbmNyeXB0aW9uCisgICAgICAgICAgZmVhdHVyZXMsIHVwZGF0ZWQgZm9yIEMtS2Vy bWl0IDguMC4KKworICAgWzI5XXRlbG5ldC5odG0KKyAgICAgICAgICBEZXRhaWxlZCBkb2N1bWVu dGF0aW9uIG9mIEtlcm1pdCdzIFRlbG5ldCBjbGllbnQsIHVwZGF0ZWQgZm9yCisgICAgICAgICAg Qy1LZXJtaXQgOC4wLgorCisgICBbMzBdZnRwc2NyaXB0cy5odG1sCisgICAgICAgICAgVHV0b3Jp YWw6IFdyaXRpbmcgRlRQIGF1dG9tYXRpb24gc2NyaXB0cworCisgICBbMzFdY2tjYndyLmh0bWwK KyAgICAgICAgICBQbGF0Zm9ybS1pbmRlcGVuZGVudCBDLUtlcm1pdCBoaW50cyBhbmQgdGlwcy4g QWxzbyBkaXN0cmlidXRlZAorICAgICAgICAgIGluIHBsYWluIHRleHQgZm9ybSBhcyBbMzJdY2tj YndyLnR4dAorCisgICBbMzNdY2t1YndyLmh0bWwKKyAgICAgICAgICBVbml4LXNwZWNpZmljIEMt S2VybWl0IGhpbnRzIGFuZCB0aXBzLiBBbHNvIGRpc3RyaWJ1dGVkIGluIHBsYWluCisgICAgICAg ICAgdGV4dCBmb3JtIGFzIFszNF1ja3Vid3IudHh0LgorCisgICBbMzVdY2t2YndyLmh0bWwKKyAg ICAgICAgICBWTVMtc3BlY2lmaWMgQy1LZXJtaXQgaGludHMgYW5kIHRpcHMuIEFsc28gZGlzdHJp YnV0ZWQgaW4gcGxhaW4KKyAgICAgICAgICB0ZXh0IGZvcm0gYXMgWzM2XWNrdmJ3ci50eHQuCisK KyAgIFszN11ja3VpbnMuaHRtbAorICAgICAgICAgIFVuaXggQy1LZXJtaXQgaW5zdGFsbGF0aW9u IGluc3RydWN0aW9ucy4gQWxzbyBkaXN0cmlidXRlZCBpbgorICAgICAgICAgIHBsYWluIHRleHQg Zm9ybSBhcyBbMzhdY2t1aW5zLnR4dC4KKworICAgWzM5XWNrdmlucy5odG1sCisgICAgICAgICAg Vk1TIEMtS2VybWl0IGluc3RhbGxhdGlvbiBpbnN0cnVjdGlvbnMuIEFsc28gZGlzdHJpYnV0ZWQg aW4KKyAgICAgICAgICBwbGFpbiB0ZXh0IGZvcm0gYXMgWzQwXWNrdmlucy50eHQuCisKKyAgIFs0 MV1ja2NjZmcuaHRtbAorICAgICAgICAgIENvbXBpbGUtdGltZSBjb25maWd1cmF0aW9uIG9wdGlv bnMuIEFsc28gZGlzdHJpYnV0ZWQgaW4gcGxhaW4KKyAgICAgICAgICB0ZXh0IGZvcm0gYXMgWzQy XWNrY2NmZy50eHQuCisKKyAgIFs0M11ja2NwbG0uaHRtbAorICAgICAgICAgIEMtS2VybWl0IFBy b2dyYW0gTG9naWMgTWFudWFsLiBBbHNvIGRpc3RyaWJ1dGVkIGluIHBsYWluIHRleHQKKyAgICAg ICAgICBmb3JtIGFzIFs0NF1ja2NwbG0udHh0LgorCisgICBbNDVdaWtzZC5odG1sCisgICAgICAg ICAgSW50ZXJuZXQgS2VybWl0IFNlcnZpY2UgQWRtaW5pc3RyYXRvcnMgR3VpZGUgZm9yIFVuaXgu CisKKyAgIFs0Nl1za2VybWl0Lmh0bWwKKyAgICAgICAgICBDLUtlcm1pdCBhcyBhbiBTU0ggU3Vi c3lzdGVtIChTRlRQIHNlcnZlciByZXBsYWNlbWVudCkuCisKKyAgIFsgWzQ3XVRvcCBdIFsgWzQ4 XUMtS2VybWl0IF0gWyBbNDldS2VybWl0IEhvbWUgXQorCitDT05URU5UUworCisgICAgIFs1MF0w LiBXSEFUJ1MgTkVXCisgICAgIFs1MV0xLiBGSVhFUyBTSU5DRSBWRVJTSU9OIDcuMC4xOTYKKyAg ICAgWzUyXTIuIFNTSCBBTkQgSFRUUAorICAgICAgICAgWzUzXTIuMS4gU1NIIENvbm5lY3Rpb25z CisgICAgICAgICBbNTRdMi4yLiBIVFRQIENvbm5lY3Rpb25zCisgICAgICAgICAgICBbNTVdMi4y LjEuIEhUVFAgQ29tbWFuZCBTd2l0Y2hlcworICAgICAgICAgICAgWzU2XTIuMi4yLiBIVFRQIEFj dGlvbiBDb21tYW5kcworICAgICAgICAgICAgWzU3XTIuMi4zLiBIVFRQIEhlYWRlcnMKKyAgICAg ICAgICAgIFs1OF0yLjIuNC4gU2VjdXJlIEhUVFAgQ29ubmVjdGlvbnMKKyAgICAgICAgICAgIFs1 OV0yLjIuNS4gSFRUUCBWYXJpYWJsZXMKKyAgICAgICAgICAgIFs2MF0yLjIuNi4gVGhlIEhUVFAg Q29tbWFuZC1MaW5lIFBlcnNvbmFsaXR5CisgICAgIFs2MV0zLiBUSEUgQlVJTFQtSU4gRlRQIENM SUVOVAorICAgICAgICAgWzYyXTMuMS4gTWFraW5nIGFuZCBNYW5hZ2luZyBGVFAgQ29ubmVjdGlv bnMKKyAgICAgICAgICAgIFs2M10zLjEuMS4gS2VybWl0IENvbW1hbmQtTGluZSBPcHRpb25zIGZv ciBGVFAKKyAgICAgICAgICAgIFs2NF0zLjEuMi4gVGhlIEZUUCBDb21tYW5kLUxpbmUgUGVyc29u YWxpdHkKKyAgICAgICAgICAgIFs2NV0zLjEuMy4gVGhlIEZUUCBVUkwgSW50ZXJwcmV0ZXIKKyAg ICAgICAgICAgIFs2Nl0zLjEuNC4gSW50ZXJhY3RpdmUgRlRQIFNlc3Npb24gRXN0YWJsaXNobWVu dAorICAgICAgICAgWzY3XTMuMi4gTWFraW5nIFNlY3VyZSBGVFAgQ29ubmVjdGlvbnMKKyAgICAg ICAgIFs2OF0zLjMuIFNldHRpbmcgRlRQIFByZWZlcmVuY2VzCisgICAgICAgICBbNjldMy40LiBN YW5hZ2luZyBEaXJlY3RvcmllcyBhbmQgRmlsZXMKKyAgICAgICAgIFs3MF0zLjUuIFVwbG9hZGlu ZyBGaWxlcyBXaXRoIEZUUAorICAgICAgICAgICAgWzcxXTMuNS4xLiBGVFAgUFVUIFN3aXRjaGVz CisgICAgICAgICAgICBbNzJdMy41LjIuIFVwZGF0ZSBNb2RlCisgICAgICAgICAgICBbNzNdMy41 LjMuIFJlY292ZXJ5CisgICAgICAgICBbNzRdMy42LiBEb3dubG9hZGluZyBGaWxlcyBXaXRoIEZU UAorICAgICAgICAgICAgWzc1XTMuNi4xLiBGVFAgR0VUIFN3aXRjaGVzCisgICAgICAgICAgICBb NzZdMy42LjIuIEZpbGVuYW1lIENvbGxpc2lvbnMKKyAgICAgICAgICAgIFs3N10zLjYuMy4gUmVj b3ZlcnkKKyAgICAgICAgIFs3OF0zLjcuIFRyYW5zbGF0aW5nIENoYXJhY3RlciBTZXRzCisgICAg ICAgICAgICBbNzldMy43LjEuIENoYXJhY3RlciBTZXRzIGFuZCBVcGxvYWRpbmcKKyAgICAgICAg ICAgIFs4MF0zLjcuMi4gQ2hhcmFjdGVyIFNldHMgYW5kIERvd25sb2FkaW5nCisgICAgICAgICBb ODFdMy44LiBGVFAgQ29tbWFuZCBTaG9ydGN1dHMKKyAgICAgICAgIFs4Ml0zLjkuIER1YWwgU2Vz c2lvbnMKKyAgICAgICAgIFs4M10zLjEwLiBBdXRvbWF0aW5nIEZUUCBTZXNzaW9ucworICAgICAg ICAgICAgWzg0XTMuMTAuMS4gRlRQLVNwZWNpZmljIFZhcmlhYmxlcyBhbmQgRnVuY3Rpb25zCisg ICAgICAgICAgICBbODVdMy4xMC4yLiBFeGFtcGxlcworICAgICAgICAgICAgWzg2XTMuMTAuMy4g QXV0b21hdGluZyBTZWN1cmUgRlRQIENvbm5lY3Rpb25zCisgICAgICAgICBbODddMy4xMS4gQWR2 YW5jZWQgRlRQIFByb3RvY29sIEZlYXR1cmVzICBbODhdNC4gRklMRSBTQ0FOTklORworICAgIFs4 OV01LiBGSUxFIEFORCBESVJFQ1RPUlkgTkFNRVMgQ09OVEFJTklORyBTUEFDRVMKKyAgICBbOTBd Ni4gT1RIRVIgQ09NTUFORCBQQVJTSU5HIElNUFJPVkVNRU5UUworICAgICAgICAgWzkxXTYuMS4g R3JvdXBpbmcgTWFjcm8gQXJndW1lbnRzCisgICAgICAgICBbOTJdNi4yLiBEaXJlY3RvcnkgYW5k IEZpbGUgTmFtZSBDb21wbGV0aW9uCisgICAgICAgICBbOTNdNi4zLiBQYXNzaW5nIEFyZ3VtZW50 cyB0byBDb21tYW5kIEZpbGVzCisgICAgICAgICBbOTRdNi40LiBNb3JlLVByb21wdGluZworICAg ICAgICAgWzk1XTYuNS4gQ29tbWFzIGluIE1hY3JvIERlZmluaXRpb25zCisgICAgICAgICBbOTZd Ni42LiBBcnJvdyBLZXlzCisgICAgWzk3XTcuIE5FVyBDT01NQU5EUyBBTkQgU1dJVENIRVMKKyAg ICBbOThdOC4gU0NSSVBUSU5HIElNUFJPVkVNRU5UUworICAgICAgICAgWzk5XTguMS4gUGVyZm9y bWFuY2UgYW5kIERlYnVnZ2luZworICAgICAgICAgWzEwMF04LjIuIFVzaW5nIE1hY3JvcyBhcyBO dW1lcmljIFZhcmlhYmxlcworICAgICAgICAgWzEwMV04LjMuIE5ldyBJRiBDb25kaXRpb25zCisg ICAgICAgICBbMTAyXTguNC4gVGhlIE9OX1VOS05PV05fQ09NTUFORCBhbmQgT05fQ0QgTWFjcm9z CisgICAgICAgICBbMTAzXTguNS4gVGhlIFNIT1cgTUFDUk8gQ29tbWFuZAorICAgICAgICAgWzEw NF04LjYuIEFycmF5cworICAgICAgICAgWzEwNV04LjcuIE5ldyBvciBJbXByb3ZlZCBCdWlsdC1p biBWYXJpYWJsZXMgYW5kIEZ1bmN0aW9ucworICAgICAgICAgWzEwNl04LjguIFRoZSBSRVRVUk4g YW5kIEVORCBDb21tYW5kcworICAgICAgICAgWzEwN104LjkuIFVOREVGSU5pbmcgR3JvdXBzIG9m IFZhcmlhYmxlcworICAgICAgICAgWzEwOF04LjEwLiBUaGUgSU5QVVQgYW5kIE1JTlBVVCBDb21t YW5kcworICAgICAgICAgWzEwOV04LjExLiBMZWFybmVkIFNjcmlwdHMKKyAgICAgICAgIFsxMTBd OC4xMi4gUGF0dGVybiBNYXRjaGluZworICAgICAgICAgWzExMV04LjEzLiBEYXRlcyBhbmQgVGlt ZXMKKyAgICAgICAgIFsxMTJdOC4xNC4gVHJhcHBpbmcgS2V5Ym9hcmQgSW50ZXJydXB0aW9uCisg ICAgWzExM105LiBTLUVYUFJFU1NJT05TCisgICAgICAgICBbMTE0XTkuMS4gV2hhdCBpcyBhbiBT LUV4cHJlc3Npb24/CisgICAgICAgICBbMTE1XTkuMi4gSW50ZWdlciBhbmQgRmxvYXRpbmctUG9p bnQtQXJpdGhtZXRpYworICAgICAgICAgWzExNl05LjMuIEhvdyB0byBVc2UgUy1FeHByZXNzaW9u cworICAgICAgICAgWzExN105LjQuIFN1bW1hcnkgb2YgQnVpbHQtaW4gQ29uc3RhbnRzIGFuZCBP cGVyYXRvcnMKKyAgICAgICAgIFsxMThdOS41LiBWYXJpYWJsZXMKKyAgICAgICAgIFsxMTldOS42 LiBBc3NpZ25tZW50cyBhbmQgU2NvcGUKKyAgICAgICAgIFsxMjBdOS43LiBDb25kaXRpb25hbCBF eHByZXNzaW9ucworICAgICAgICAgWzEyMV05LjguIEV4dGVuc2liaWxpdHkKKyAgICAgICAgIFsx MjJdOS45LiBFeGFtcGxlcworICAgICAgICAgWzEyM105LjEwLiBEaWZmZXJlbmNlcyBmcm9tIEFs Z2VicmFpYyBOb3RhdGlvbgorICAgICAgICAgWzEyNF05LjExLkRpZmZlcmVuY2VzIGZyb20gTGlz cAorICAgIFsxMjVdMTAuIEZJTEUgVFJBTlNGRVIKKyAgICBbMTI2XTExLiBNT0RFTVMgQU5EIERJ QUxJTkcKKyAgICBbMTI3XTEyLiBURVJNSU5BTCBDT05ORUNUSU9OCisgICAgWzEyOF0xMy4gQ0hB UkFDVEVSIFNFVFMKKyAgICBbMTI5XTE0LiBESUFMT1VUIEZST00gVEVMTkVUIFRFUk1JTkFMIFNF UlZFUlMKKyAgICBbMTMwXTE1LiBDT1BJTkcgV0lUSCBCUk9LRU4gS0VSTUlUIFBBUlRORVJTCisg ICAgWzEzMV0xNi4gTkVXIENPTU1BTkQtTElORSBPUFRJT05TCisgICAgWzEzMl0xNy4gTE9HUwor CisgICBbIFsxMzNdVG9wIF0gWyBbMTM0XUMtS2VybWl0IF0gWyBbMTM1XUtlcm1pdCBIb21lIF0K KworMC4gV0hBVCdTIE5FVworCisgICBUaGUgSW5pdGlhbGl6YXRpb24gYW5kIEN1c3RvbWl6YXRp b24gRmlsZXMKKyAgICAgICAgICBDLUtlcm1pdCA4LjAgbm93IHN1cHBvcnRzIHNwZWNpZmljYXRp b24gb2YgdGhlIGluaXRpYWxpemF0aW9uCisgICAgICAgICAgZmlsZSBuYW1lIChwYXRoKSBpbiBh biBlbnZpcm9ubWVudCB2YXJpYWJsZSwgQ0tFUk1JVF9JTkkuIEl0CisgICAgICAgICAgYWxzbyBy ZWxpZXMgZmFyIGxlc3MgdGhhbiBiZWZvcmUgb24gdGhlIGluaXRpYWxpemF0aW9uIGZvcgorICAg ICAgICAgIGZ1bmN0aW9uaW5nLiBTZWUgWzEzNl1TZWN0aW9uIDUgb2YgdGhlIFVuaXggQy1LZXJt aXQKKyAgICAgICAgICBbMTM3XWluc3RhbGxhdGlvbiBpbnN0cnVjdGlvbnMgZm9yIGRldGFpbHMu IEFzIG9mIHZlcnNpb24KKyAgICAgICAgICA4LjAuMjAxLCBDLUtlcm1pdCBhbHNvIGV4ZWN1dGVz IHlvdXIgY3VzdG9taXphdGlvbiBmaWxlIChpZiB5b3UKKyAgICAgICAgICBoYXZlIG9uZSkgZXZl biBpZiB0aGUgaW5pdGlhbGl6YXRpb24gZmlsZSB3YXMgbm90IGZvdW5kLgorICAgICAgICAgIFBy ZXZpb3VzbHksIHRoZSBjdXN0b21pemF0aW9uIGZpbGUgd2FzIGV4ZWN1dGVkIGJ5IGEgVEFLRQor ICAgICAgICAgIGNvbW1hbmQgaW4gdGhlIGluaXRpYWxpemF0aW9uIGZpbGUgKGFuZCBpdCBzdGls bCBpcywgaWYgYW4KKyAgICAgICAgICBpbml0aWFsaXphdGlvbiBpcyBmb3VuZCkuCisKKyAgIElu Y29tcGF0aWJsZSBDaGFuZ2VzCisgICAgICAgICAgQXMgYWx3YXlzLCB3ZSBkbyBvdXIgYmVzdCB0 byBhdm9pZCBjaGFuZ2VzIHRoYXQgYnJlYWsgZXhpc3RpbmcKKyAgICAgICAgICBzY3JpcHRzLiBI b3dldmVyLCBDLUtlcm1pdCA4LjAgZG9lcyBpbmNsdWRlIGEgcmF0aGVyIHBlcnZhc2l2ZQorICAg ICAgICAgIHN5bnRheCBjaGFuZ2UgdGhhdCBtaWdodCBhbHRlciB0aGUgYmVoYXZpb3Igb2Ygc2Ny aXB0cyB0aGF0CisgICAgICAgICAgZGVwZW5kIG9uIHRoZSBwcmV2aW91cyBiZWhhdmlvci4gQXMg ZGVzY3JpYmVkIGluIFsxMzhdU2VjdGlvbiA1LAorICAgICAgICAgIEMtS2VybWl0IG5vdyBhY2Nl cHRzIGRvdWJsZXF1b3RlcyBpbiBtb3N0IGNvbnRleHRzIHdoZXJlIHlvdQorICAgICAgICAgIHBy ZXZpb3VzbHkgaGFkIHRvIHVzZSBicmFjZXMgdG8gZ3JvdXAgbXVsdGlwbGUgd29yZHMgaW50byBh CisgICAgICAgICAgc2luZ2xlIGZpZWxkLCBvciB0byBmb3JjZSBpbmNsdXNpb24gb2YgbGVhZGlu ZyBvciB0cmFpbGluZworICAgICAgICAgIGJsYW5rcy4gTW9zdCBub3RpY2VhYmx5LCBpbiBDLUtl cm1pdCA3LjAgYW5kIGVhcmxpZXI6CisKKyAgZWNobyB7dGhpcyBpcyBhIHN0cmluZ30KKworICAg ICAgICAgIHdvdWxkIHByaW50OgorCisgIHRoaXMgaXMgYSBzdHJpbmcKKworICAgICAgICAgIHdo ZXJlYXM6CisKKyAgZWNobyAidGhpcyBpcyBhIHN0cmluZyIKKworICAgICAgICAgIHByaW50ZWQ6 CisKKyAgInRoaXMgaXMgYSBzdHJpbmciCisKKyAgICAgICAgICBJbiBDLUtlcm1pdCA4LjAsIGJv dGggcHJpbnQ6CisKKyAgdGhpcyBpcyBhIHN0cmluZworCisgICAgICAgICAgVG8gZm9yY2UgdGhl IGRvdWJsZXF1b3RlcyB0byBiZSB0cmVhdGVkIGFzIHBhcnQgb2YgdGhlIHN0cmluZywKKyAgICAg ICAgICB1c2UgZWl0aGVyIG9mIHRoZSBmb2xsb3dpbmcgZm9ybXM6CisKKyAgZWNobyB7InRoaXMg aXMgYSBzdHJpbmcifQorICBlY2hvICIidGhpcyBpcyBhIHN0cmluZyIiCisKKyAgICAgICAgICBT aW1pbGFybHksIHRvIGZvcmNlIGJyYWNlcyB0byBiZSB0cmVhdGVkIGFzIHBhcnQgb2YgdGhlIHN0 cmluZzoKKworICBlY2hvICJ7dGhpcyBpcyBhIHN0cmluZ30iCisgIGVjaG8ge3t0aGlzIGlzIGEg c3RyaW5nfX0KKworICAgICAgICAgIE90aGVyIGluY29tcGF0aWJpbGl0aWVzOgorCisgICAgICAg ICAxLiBVc2luZyB0aGUgU0VUIEhPU1QgY29tbWFuZCB0byBtYWtlIEhUVFAgY29ubmVjdGlvbnMg aXMgbm8KKyAgICAgICAgICAgIGxvbmdlciBzdXBwb3J0ZWQuIEluc3RlYWQsIHVzZSB0aGUgbmV3 IEhUVFAgT1BFTiBjb21tYW5kLAorICAgICAgICAgICAgZGVzY3JpYmVkIGluIFsxMzldU2VjdGlv biAyLjIuCisKKyAgIEMtS2VybWl0IDcuMSBBbHBoYS4wMSAoOCBEZWNlbWJlciAyMDAwKQorCisg ICAgIEl0cyBtYWpvciBuZXcgZmVhdHVyZXMgYXJlIHRob3NlIGxpc3RlZCBpbiB0aGUgWzE0MF1U YWJsZSBvZgorICAgICAgICAgIENvbnRlbnRzOiB0aGUgRlRQIGNsaWVudCwgZmlsZSBzY2Fubmlu ZywgY29tbWFuZCBwYXJzaW5nIGFuZAorICAgICAgICAgIHNjcmlwdGluZyBpbXByb3ZlbWVudHMs IFMtRXhwcmVzc2lvbnMsIGFuZCBzdXBwb3J0IGZvciB0aGUKKyAgICAgICAgICBUZWxuZXQgQ29t IFBvcnQgT3B0aW9uLCBwbHVzIHdpZGVyIGF2YWlsYWJpbGl0eSBvZiB0aGUgS2VyYmVyb3MsCisg ICAgICAgICAgU1NML1RMUywgYW5kIFNSUCBzZWN1cml0eSBvcHRpb25zIGZvciBzZWN1cmUgSW50 ZXJuZXQKKyAgICAgICAgICBjb25uZWN0aW9ucy4KKworICAgQy1LZXJtaXQgNy4xLjE5OSBBbHBo YS4wMiAoNCBKYW51YXJ5IDIwMDEpCisKKyAgICAgICAgICArIEMtS2VybWl0IG5vdyBhY2NlcHRz IFsxNDFdRlRQLCBURUxORVQsIGFuZCBJS1NEIFVSTHMgYXMgaXRzCisgICAgICAgICAgICBmaXJz dCBjb21tYW5kLWxpbmUgYXJndW1lbnQuCisgICAgICAgICAgKyBDaGFyYWN0ZXItc2V0IHRyYW5z bGF0aW9uIGFkZGVkIHRvIHRoZSBGVFAgY2xpZW50IGZvcgorICAgICAgICAgICAgWzE0Ml1maWxl bmFtZXMuCisgICAgICAgICAgKyBPcHRpb25hbCBbMTQzXXNldHRpbmcgb2YgZGF0ZSBvZiBpbmNv bWluZyBmaWxlcyBieSBGVFAgW01dR0VUCisgICAgICAgICAgICBmcm9tIHRoZSBzZXJ2ZXIgZGF0 ZS4KKyAgICAgICAgICArIFsxNDRdRlRQIENIRUNLIGZpbGVuYW1lIGFkZGVkIHRvIGxldCBGVFAg Y2xpZW50IGNoZWNrIHRoZQorICAgICAgICAgICAgZXhpc3RlbmNlIG9mIGEgZmlsZSBvbiB0aGUg c2VydmVyLgorICAgICAgICAgICsgWzE0NV1GVFAgR0VUIC9OQU1FTElTVDpmaWxlbmFtZSBhZGRl ZCB0byBnZXQgbGlzdCBvZiBzZXJ2ZXIKKyAgICAgICAgICAgIGZpbGVuYW1lcyBpbnRvIGEgbG9j YWwgZmlsZS4KKyAgICAgICAgICArIFsxNDZdRlRQIFtNXVBVVCAvU0VSVkVSLVJFTkFNRTp0ZW1w bGF0ZSBhZGRlZCB0byBtYWtlIHNlcnZlcgorICAgICAgICAgICAgcmVuYW1lIGEgZmlsZSBhcyBp bmRpY2F0ZWQgYnkgdGhlIHRlbXBsYXRlIGFmdGVyIGl0IGhhcworICAgICAgICAgICAgYXJyaXZl ZCBjb21wbGV0ZWx5LgorICAgICAgICAgICsgRlRQIFtNXUdFVCAvU0VSVkVSLVJFTkFNRTp0ZW1w bGF0ZSBhZGRlZCB0byBtYWtlIHNlcnZlciByZW5hbWUKKyAgICAgICAgICAgIGEgZmlsZSBhcyBp bmRpY2F0ZWQgYnkgdGhlIHRlbXBsYXRlIGFmdGVyIGl0IGhhcyBiZWVuIHNlbnQKKyAgICAgICAg ICAgIGNvbXBsZXRlbHkuCisgICAgICAgICAgKyBGVFAgWzE0N11WRElSRUNUT1JZIGFkZGVkIGZv ciBnZXR0aW5nIHZlcmJvc2UgZGlyZWN0b3J5CisgICAgICAgICAgICBsaXN0aW5ncyBmcm9tIFRP UFMtMjAuCisgICAgICAgICAgKyBbMTQ4XUZUUCBUWVBFIFRFTkVYIGFkZGVkIGZvciB0cmFuc2Zl cnJpbmcgOC1iaXQgYmluYXJ5IGZpbGVzCisgICAgICAgICAgICB3aXRoIFBEUC0xMHMuCisgICAg ICAgICAgKyBBZGRlZCBbMTQ5XWF1dG9tYXRpYyB0ZXh0L2JpbmFyeSBtb2RlIHN3aXRjaGluZyBm b3IgRlRQCisgICAgICAgICAgICBbTV1HRVQsIGJhc2VkIG9uIGZpbGVuYW1lIHBhdHRlcm5zIChl LmcuICouemlwLCAqLmd6LCAqLmV4ZQorICAgICAgICAgICAgYXJlIGJpbmFyeTsgKi50eHQsICou YyBhcmUgdGV4dCkuCisgICAgICAgICAgKyBbMTUwXVNFVCBTRU5EIEktUEFDS0VUUyBPRkYgYWRk ZWQgZm9yIGNvcGluZyB3aXRoIEtlcm1pdAorICAgICAgICAgICAgc2VydmVycyB0aGF0IGRvIG5v dCBzdXBwb3J0IEkgcGFja2V0cy4KKyAgICAgICAgICArIEEgbmV3IG9wdGlvbiB3YXMgYWRkZWQg dG8gWzE1MV1cZndvcmQoKSBhbmQgXGZzcGxpdCgpIGZvcgorICAgICAgICAgICAgcGFyc2luZyBj b21tYS1zZXBhcmF0ZWQgbGlzdHMgdGhhdCBtaWdodCBjb250YWluIGVtcHR5CisgICAgICAgICAg ICBlbGVtZW50cy4KKyAgICAgICAgICArIEJ1ZyBmaXhlcyBpbmNsdWRpbmc6CisgICAgICAgICAg ICAgICBvIHt9IG9yICIiIGNvdWxkIG5vdCBiZSB1c2VkIGFzIGV4cGVjdGVkIHRvIHJlcHJlc2Vu dCB0aGUKKyAgICAgICAgICAgICAgICAgZW1wdHkgc3RyaW5nLgorICAgICAgICAgICAgICAgbyAs LSBvbiBhIGxpbmUgYnkgaXRzZWxmIGluIGEgbWFjcm8gZGVmaW5pdGlvbiBjYXVzZWQKKyAgICAg ICAgICAgICAgICAgc3Vic2VxdWVudCBzdGF0ZW1lbnRzIHRvIGJlIHNraXBwZWQuCisgICAgICAg ICAgICAgICBvIEZUUCBbTV1HRVQgZGlkbid0IHdvcmsgcmlnaHQgaWYgcGF0aCBzZWdtZW50cyB3 ZXJlCisgICAgICAgICAgICAgICAgIGluY2x1ZGVkIGluIHRoZSBmaWxlc3BlYy4KKyAgICAgICAg ICAgICAgIG8gRlRQIE1HRVQsIGlmIGludGVycnVwdGVkLCBkaWQgbm90IGNsZWFyIGl0cyBmaWxl IGxpc3QuCisgICAgICAgICAgICAgICBvIFZhcmlvdXMgcHJvYmxlbXMgd2l0aCBGVFAgUFVUIC9B Uy1OQU1FIHRoYXQgbm9ib2R5CisgICAgICAgICAgICAgICAgIG5vdGljZWQuCisgICAgICAgICAg ICAgICBvIFNvbWUgRlRQIG1lc3NhZ2VzIGFuZCBkaXNwbGF5cyBpbnRlcmZlcmVkIHdpdGggZWFj aAorICAgICAgICAgICAgICAgICBvdGhlci4KKyAgICAgICAgICAgICAgIG8gUGFyc2luZyBvZiBZ RVNURVJEQVksIFRPREFZLCBhbmQgVE9NT1JST1cgaW4gZGF0ZS10aW1lCisgICAgICAgICAgICAg ICAgIGZpZWxkcyB3YXMgYnJva2VuLgorICAgICAgICAgICAgICAgbyBBdXRvbWF0aWMgb2xkLXRv LW5ldyBkaWFsaW5nIGRpcmVjdG9yeSBmb3JtYXQgY29udmVyc2lvbgorICAgICAgICAgICAgICAg ICB3YXMgYnJva2VuIG9uIFZNUy4KKyAgICAgICAgICAgICAgIG8gVmFyaW91cyBzb3VyY2UtY29k ZSBwb3J0YWJpbGl0eSBwcm9ibGVtcyBmaXhlZC4KKyAgICAgICAgICArIEltcHJvdmVtZW50IG9m IHZhcmlvdXMgSEVMUCBhbmQgU0hPVyBtZXNzYWdlcy4KKworICAgQy1LZXJtaXQgNy4xLjE5OSBB bHBoYS4wNCAoMSBBcHJpbCAyMDAxKQorCisgICAgICAgICAgKyBCaWcgY2hhbmdlczoKKyAgICAg ICAgICAgICAgIG8gQ2hhbmdlZCBkZWZhdWx0IG1vZGVtIHR5cGUgZnJvbSBOT05FIHRvIEdFTkVS SUMuCisgICAgICAgICAgICAgICBvIEdlbmVyaWMgZGlhbGluZyBub3cgc2VuZHMgbm8gaW5pdCBz dHJpbmcgYXQgYWxsLgorICAgICAgICAgICAgICAgbyBDaGFuZ2VkIGRlZmF1bHQgdGVybWluYWwg Ynl0ZXNpemUgZnJvbSA3IHRvIDguCisgICAgICAgICAgKyBOZXcgZmVhdHVyZXM6CisgICAgICAg ICAgICAgICBvIFNFVCBTRVNTSU9OLUxPRyBUSU1FU1RBTVBFRC1URVhUIGZvciB0aW1lc3RhbXBl ZCBzZXNzaW9uCisgICAgICAgICAgICAgICAgIGxvZy4KKyAgICAgICAgICArIE5ldyBtb2RlbSB0 eXBlczoKKyAgICAgICAgICAgICAgIG8gQ29uZXhhbnQgbW9kZW0gZmFtaWx5CisgICAgICAgICAg ICAgICBvIEx1Y2VudCBWRU5VUyBjaGlwc2V0CisgICAgICAgICAgICAgICBvIFBDVGVsIFYuOTAg Y2hpcHNldAorICAgICAgICAgICAgICAgbyBab29tIFYuOTAKKyAgICAgICAgICAgICAgIG8gWm9v bSBWLjkyCisgICAgICAgICAgKyBGVFAgY2xpZW50OgorICAgICAgICAgICAgICAgbyBGVFAgT1BF TiAvUEFTU0lWRSBhbmQgL0FDVElWRSBzd2l0Y2hlcyBhZGRlZC4KKyAgICAgICAgICAgICAgIG8g Tm93IHdvcmtzIHdpdGggc2VydmVycyB0aGF0IHRoYXQgZG9uJ3QgaW5jbHVkZSBwYXRoIGluCisg ICAgICAgICAgICAgICAgIE5MU1QgcmVzcG9uc2UuCisgICAgICAgICAgICAgICBvIEZpeGVkIFNF TkQgL1JFQ1VSU0lWRSBub3QgdG8gZm9sbG93IHN5bWxpbmtzIChVTklYKS4KKyAgICAgICAgICAg ICAgIG8gU0VUIEZUUCBWRVJCT1NFLU1PREUgZGVmYXVsdCBpcyBub3cgT0ZGIGluc3RlYWQgb2Yg T04uCisgICAgICAgICAgKyBLZXJtaXQgcHJvdG9jb2w6CisgICAgICAgICAgICAgICBvIEZpeGVk IHdoYXQgSSBob3BlIGlzIHRoZSBsYXN0ICJSZWNlaXZlIHdpbmRvdyBmdWxsIgorICAgICAgICAg ICAgICAgICBlcnJvci4KKyAgICAgICAgICAgICAgIG8gU0VUIFBSRUZJWElORyBvciBTRVQgQ09O VFJPTCBQUkVGSVggbm93IGF1dG9tYXRpY2FsbHkKKyAgICAgICAgICAgICAgICAgc2V0cyBDTEVB UkNIQU5ORUwgT0ZGLgorICAgICAgICAgICAgICAgbyBGaXhlZCBpbmNvcnJlY3QgcmVwb3J0IG9m IG51bWJlciBvZiBmaWxlcyB0cmFuc2ZlcnJlZCBhdAorICAgICAgICAgICAgICAgICBlbmQgb2Yg dHJhbnNmZXIuCisgICAgICAgICAgICAgICBvIEZpeGVkIFNFTkQgL1JFQ1VSU0lWRSBub3QgdG8g Zm9sbG93IHN5bWxpbmtzIChVTklYKS4KKyAgICAgICAgICArIFVOSVg6CisgICAgICAgICAgICAg ICBvIEhUVFAgYW5kIHNoYWRvdyBwYXNzd29yZHMgZW5hYmxlZCBmb3IgU0NPIDUuMC42LgorICAg ICAgICAgICAgICAgbyBFdmVuIHdpdGggU0VUIEZJTEVOQU1FUyBDT05WRVJURUQsIHNwYWNlcyB3 ZXJlIHN0aWxsCisgICAgICAgICAgICAgICAgIGFjY2VwdGVkIGluIGluY29taW5nIGZpbGVuYW1l czsgbm93IHRoZXkgYXJlIGNvbnZlcnRlZCB0bworICAgICAgICAgICAgICAgICB1bmRlcnNjb3Jl cy4KKyAgICAgICAgICAgICAgIG8gQWRkZWQgc3VwcG9ydCBmb3IgY29tcGlsZS10aW1lIG1rdGVt cCgpL21rc3RlbXAoKQorICAgICAgICAgICAgICAgICBzZWxlY3Rpb24uCisgICAgICAgICAgKyBW TVM6CisgICAgICAgICAgICAgICBvIFNlc3Npb24tbG9nIGZvcm1hdCBmb3Igc2NyaXB0ZWQgc2Vz c2lvbnMgZml4ZWQuCisgICAgICAgICAgKyBTY3JpcHRpbmc6CisgICAgICAgICAgICAgICBvIEZp eGVkIFxmcmRpcigpIG5vdCB0byBmb2xsb3cgc3ltbGlua3MgKFVOSVgpLgorICAgICAgICAgICAg ICAgbyBGaXhlZCBcZmRheSgpIG5vdCB0byBkdW1wIGNvcmUgZm9yIGRhdGVzIHByaW9yIHRvIDE3 IE1hcgorICAgICAgICAgICAgICAgICAxODU4LgorICAgICAgICAgICsgR2VuZXJhbDoKKyAgICAg ICAgICAgICAgIG8gIkNsb3NpbmcgYmxhaC4uLiIgbWVzc2FnZSB1cG9uIGV4aXQgY291bGQgbm90 IGJlCisgICAgICAgICAgICAgICAgIHN1cHByZXNzZWQuCisgICAgICAgICAgICAgICBvIEFkZGVk IC9QQUdFIGFuZCAvTk9QQUdFIHRvIERFTEVURSBzd2l0Y2hlcy4KKyAgICAgICAgICAgICAgIG8g QWRkZWQgR08gcmVzcG9uc2UgZm9yIERFTEVURSAvQVNLIChkZWxldGUgYWxsIHRoZSByZXN0Cisg ICAgICAgICAgICAgICAgIHdpdGhvdXQgYXNraW5nKS4KKyAgICAgICAgICAgICAgIG8gQWRkZWQg R08gcmVzcG9uc2UgdG8gIm1vcmU/IiBwcm9tcHQgKGZvciBtdWx0aS1wYWdlCisgICAgICAgICAg ICAgICAgIHNjcmVlbiBvdXRwdXQpLgorICAgICAgICAgICAgICAgbyBVcGRhdGVkIEhFTFAgdGV4 dHMuCisKKyAgIEMtS2VybWl0IDcuMS4xOTkgQmV0YS4wMSAoMTAgTWF5IDIwMDEpCisKKyAgICAg ICAgICArIEZUUCBjbGllbnQgdmVyYm9zaXR5IGFkanVzdG1lbnRzLgorICAgICAgICAgICsgQnVn IHdpdGggZ2VuZXJpYyBtb2RlbSBkaWFsaW5nIHBhdXNpbmcgc2V2ZXJhbCBzZWNzIGZpeGVkLgor ICAgICAgICAgICsgU0VUIEhPU1QgL1VTRVI6LCBTRVQgTE9HSU4gVVNFUklELCBldGMsIGZpeGVk IHdoZW4gZ2l2ZW4gbm8KKyAgICAgICAgICAgIHVzZXIgSUQuCisgICAgICAgICAgKyBBIGNvdXBs ZSBcdihkbV9ibGFoKSBkaWFsIG1vZGlmaWVyIHZhcmlhYmxlcyBhZGRlZC4KKyAgICAgICAgICAr ICItLXZlcnNpb24iIGNvbW1hbmQtbGluZSBzd2l0Y2ggYWRkZWQuCisgICAgICAgICAgKyBGaXhl ZCBOZXRCU0Qgc2VyaWFsLXBvcnQgRFRSIGhhbmRsaW5nLgorICAgICAgICAgICsgTG90cyBvZiBz eW50YXggY2xlYW51cHMgZm9yIEZsZXhlbGludCBhbmQgZ2NjIC1XYWxsLgorICAgICAgICAgICsg Rml4ZWQgbW9kZW0tdHlwZSBhbGlhc2VzIHRvIG5vdCB0YWtlIHByZWNlZGVuY2Ugb3ZlciByZWFs CisgICAgICAgICAgICBuYW1lcy4KKyAgICAgICAgICArIEZpeGVkIGZ1bm55IHRyZWF0bWVudCBv ZiBkb3VibGVxdW90ZXMgYnkgRUNITyBjb21tYW5kLgorICAgICAgICAgICsgRW5hYmxlZCBTRVQg U0VTU0lPTi1MT0cgZm9yIFZNUyBhbmQgb3RoZXIgbm9uLVVOSVggcGxhdGZvcm1zLgorICAgICAg ICAgICsgRml4ZWQgY2hhbmdpbmcgZGlyZWN0aW9uIGluIGNvbW1hbmQgaGlzdG9yeSBidWZmZXIu CisgICAgICAgICAgKyBGaXhlZCBoYW5kbGluZyBvZiBJS1NEIFVSTHMuCisgICAgICAgICAgKyBN YWRlIHN1cmUgREVMRVRFIHByaW50cyBhIG1lc3NhZ2UgaWYgaXQgZ290IGFueSBlcnJvcnMuCisK KyAgIEMtS2VybWl0IDguMC4yMDAgQmV0YS4wMiAoMjggSnVuZSAyMDAxKQorCisgICAgICAgICAg KyBNYWpvciB2ZXJzaW9uIG51bWJlciBpbmNyZWFzZWQgZnJvbSA3IHRvIDguCisgICAgICAgICAg KyBbMTUyXVNTSCBjb21tYW5kLgorICAgICAgICAgICsgTW9yZS1jb25zaXN0ZW50IEtlcm1pdCBw cm90b2NvbCBkZWZhdWx0cy4KKyAgICAgICAgICArIENPTk5FQ1QgaWRsZSB0aW1lb3V0IGFuZCBh Y3Rpb24gc2VsZWN0aW9uLgorICAgICAgICAgICsgQ09OTkVDVCBzdGF0dXMgdmFyaWFibGUuCisg ICAgICAgICAgKyBBIHdheSB0byBhbGxvY2F0ZSBtb3JlIHNwYWNlIGZvciBmaWxlbmFtZSBsaXN0 cy4KKyAgICAgICAgICArIFBzZXVkb3Rlcm1pbmFsIGhhbmRsZXIgZml4ZWQgZm9yIGxhdGUtbW9k ZWwgTGludXhlcy4KKyAgICAgICAgICArIENvbW1hbmQtbGluZSBvcHRpb24gLWRkIGZvciB0aW1l c3RhbXBlZCBkZWJ1ZyBsb2cuCisgICAgICAgICAgKyBEb3dubG9hZCBkaXJlY3Rvcnkgbm93IHdv cmtzIGZvciBleHRlcm5hbCBwcm90b2NvbHMgdG9vLgorICAgICAgICAgICsgR1JFUCAvQ09VTlQ6 dmFyaWFibGUuCisgICAgICAgICAgKyBTRVQgQVRUUklCVVRFIFJFQ09SRC1GT1JNQVQgeyBPRkYs IE9OIH0uCisgICAgICAgICAgKyBCdWcgZml4ZXMuCisKKyAgIEMtS2VybWl0IDguMC4yMDAgQmV0 YS4wMyAoOSBTZXAgMjAwMSkKKworICAgICAgICAgICsgWzE1M11IVFRQIDEuMSBjb25uZWN0aW9u cyBhbmQgc2NyaXB0aW5nCisgICAgICAgICAgKyBbMTU0XU9OX0NUUkxDIG1hY3JvIGZvciB0cmFw cGluZyBDdHJsLUMgaW4gc2NyaXB0cworICAgICAgICAgICsgWzE1NV1EYXRlLXRpbWUgcGFyc2lu ZyBpbXByb3ZlbWVudHMsIHRpbWV6b25lcywgY29tcGFyaXNvbiwKKyAgICAgICAgICAgIGFyaXRo bWV0aWMKKyAgICAgICAgICArIFsxNTZdUGF0dGVybi1tYXRjaGluZyBpbXByb3ZlbWVudHMKKyAg ICAgICAgICArIEZUUCBpbXByb3ZlbWVudHMKKyAgICAgICAgICArIFNFVCBFWElUIEhBTkdVUCB7 IE9OLCBPRkYgfQorICAgICAgICAgICsgU0VUIEZJTEUgRU9GIHsgQ1RSTC1aLCBMRU5HVEggfQor ICAgICAgICAgICsgQVNLW1FdIC9USU1FT1VUCisgICAgICAgICAgKyBCdWcgZml4ZXMKKyAgICAg ICAgICArIE5ldyBwbGF0Zm9ybXMKKworICAgQy1LZXJtaXQgOC4wLjIwMCBCZXRhLjA0ICgxNiBO b3YgMjAwMSkKKworICAgICAgICAgICsgWzE1N11OZXcgVW5peCBtYW4gcGFnZQorICAgICAgICAg ICsgWzE1OF1OZXcgVW5peCBpbnN0YWxsYXRpb24gaW5zdHJ1Y3Rpb25zCisgICAgICAgICAgKyBT RVQgVEVMT1BUIHBvbGljaWVzIGFyZSBub3cgZW5mb3JjZWQgb24gbm9uLVRlbG5ldCBwb3J0cyBp ZgorICAgICAgICAgICAgdGhlIHNlcnZlciBiZWdpbnMgVGVsbmV0IG5lZ290aWF0aW9ucy4KKyAg ICAgICAgICArIFNFVCBURVJNSU5BTCBJRExFLUFDVElPTiB7IFRFTE5FVC1OT1AsIFRFTE5FVC1B WVQgfS4KKyAgICAgICAgICArIFVVQ1AgbG9ja2ZpbGUgY3JlYXRpb24gcmFjZSBjb25kaXRpb24g Zml4ZWQuCisgICAgICAgICAgKyBEaWFsb3V0LCBtb2RlbSBzaWduYWxzLCBoYW5ndXAsIGhhcmR3 YXJlIGZsb3cgY29udHJvbCwgZXRjLAorICAgICAgICAgICAgdGVzdGVkIGV4dGVuc2l2ZWx5IG9u IG1hbnkgcGxhdGZvcm1zLCBudW1lcm91cyBwcm9ibGVtcyBmaXhlZC4KKyAgICAgICAgICArIElt cHJvdmVkIGhpbnRzIHdoZW4gZGlhbGluZyBmYWlscy4KKyAgICAgICAgICArIFNFVCBTVE9QLUJJ VFMgMiBjYW4gbm93IGJlIGdpdmVuIHdpdGhvdXQgU0VUIEZMT1cgSEFSRFdBUkUuCisgICAgICAg ICAgKyBNYWpvciBpbXByb3ZlbWVudHMgaW4gUkZDIDIyMTcgVGVsbmV0IENvbS1Qb3J0IENvbnRy b2wuCisgICAgICAgICAgKyBJbXByb3ZlZCBhYmlsaXR5IHRvIFJFRElBTCBhIG1vZGVtIHNlcnZl ciBwb3J0LgorICAgICAgICAgICsga2VybWl0IC1oIG5vdyBzaG93cyB0aGUgY29tbWFuZCBuYW1l IGluIHRoZSB1c2FnZSB1c2FnZQorICAgICAgICAgICAgc3RyaW5nLgorICAgICAgICAgICsga2Vy bWl0IC1oIG5vdyBzaG93cyBBTEwgY29tbWFuZC1saW5lIG9wdGlvbnMuCisgICAgICAgICAgKyBr ZXJtaXQgLXMgYmxhaCwgd2hlcmUgYmxhaCBpcyBhIHN5bWxpbmssIG5vdyB3b3Jrcy4KKyAgICAg ICAgICArIC0tbm9wZXJtcyBjb21tYW5kLWxpbmUgb3B0aW9uID0gU0VUIEFUVFJJQlVURSBQRVJN SVNTSU9OUyBPRkYuCisgICAgICAgICAgKyBIVFRQIGFuZCBIVFRQUyBVUkxzIG5vdyBzdXBwb3J0 ZWQgb24gdGhlIGNvbW1hbmQgbGluZS4KKyAgICAgICAgICArIEFuIGh0dHAgY29tbWFuZC1saW5l IHBlcnNvbmFsaXR5IGlzIG5vdyBhdmFpbGFibGUuCisgICAgICAgICAgKyBJbml0aWFsaXphdGlv biBmaWxlIHN0cmVhbWxpbmVkIHRvIGxvYWQgZmFzdGVyLCBhbmFjaHJvbmlzbXMKKyAgICAgICAg ICAgIHJlbW92ZWQuCisgICAgICAgICAgKyBVcGRhdGVkIE5FV1MsIElOVFJPLCBIRUxQIHRleHQs IFNIT1cgY29tbWFuZHMuIEluIHBhcnRpY3VsYXIsCisgICAgICAgICAgICBzZWUgU0hPVyBDT01N LCBIRUxQIFNFVCBMSU5FLCBIRUxQIFdBSVQuCisgICAgICAgICAgKyBEYXRlL3RpbWUgYXJpdGht ZXRpYyByb3V0aW5lcyBjb252ZXJ0ZWQgZnJvbSBmbG9hdGluZy1wb2ludCB0bworICAgICAgICAg ICAgaW50ZWdlciBhcml0aG1ldGljIChpbnRlcm5hbGx5KSBmb3IgZ3JlYXRlciBhY2N1cmFjeSBh bmQKKyAgICAgICAgICAgIHBvcnRhYmlsaXR5LgorICAgICAgICAgICsgUXVvdGVkIHN0cmluZ3Mg Y29udGFpbmluZyBjb21tYXMgbm8gbG9uZ2VyIGJyZWFrIG1hY3JvCisgICAgICAgICAgICBleGVj dXRpb24uCisgICAgICAgICAgKyBEeW5hbWljIEtlcm1pdCBmaWxlLXRyYW5zZmVyIHRpbWVvdXRz IGFyZSBub3cgbXVjaCBtb3JlCisgICAgICAgICAgICBhZ2dyZXNzaXZlLgorICAgICAgICAgICsg TmV3ICJob3Qga2V5cyIgdG8gdHVybiBkZWJ1Zy5sb2cgb24vb2ZmIGR1cmluZyBmaWxlIHRyYW5z ZmVyLgorICAgICAgICAgICsgSW1wcm92ZWQgaGludHMgd2hlbiBmaWxlIHRyYW5zZmVyIGZhaWxz LgorICAgICAgICAgICsgRlRQIENEIG9yaWVudGF0aW9uIG1lc3NhZ2VzIGFyZSBub3cgcHJpbnRl ZC4KKyAgICAgICAgICArIC1SIG5vdyBhY2NlcHRlZCBvbiB0aGUgRlRQIGNvbW1hbmQgbGluZSB0 byByZXF1ZXN0IFJlY3Vyc2lvbi4KKyAgICAgICAgICArIC1tIGFsbG93cyBBY3RpdmUgb3IgUGFz c2l2ZSBtb2RlIHRvIGJlIGNob3NlbiBvbiB0aGUgRlRQCisgICAgICAgICAgICBjb21tYW5kIGxp bmUuCisgICAgICAgICAgKyAtZGQgb24gdGhlIEZUUCBjb21tYW5kIGxpbmUgY3JlYXRlcyBhIHRp bWVzdGFtcGVkIGRlYnVnLmxvZy4KKyAgICAgICAgICArIEZUUCBjb21tYW5kLWxpbmUgc2VjdXJp dHkgb3B0aW9ucyBmaWxsZWQgaW4uCisgICAgICAgICAgKyBJbXByb3ZlZCBhdXRvbWF0aWMgdGV4 dC9iaW5hcnkgbW9kZSBzd2l0Y2hpbmcgZm9yIE1HRVQuCisgICAgICAgICAgKyBSZW1vdmVkIHNw dXJpb3VzIGVycm9yIG1lc3NhZ2VzIHRoYXQgc29tZXRpbWVzIG9jY3VyIGR1cmluZworICAgICAg ICAgICAgTUdFVC4KKyAgICAgICAgICArIERJUkVDVE9SWSwgR1JFUCwgVFlQRSwgSEVBRCwgYW5k IFRBSUwgbm93IGhhdmUgYSAvT1VUUFVUOmZpbGUKKyAgICAgICAgICAgIG9wdGlvbi4KKyAgICAg ICAgICArIFRZUEUgL05VTUJFUiBhZGRzIGxpbmUgbnVtYmVycy4KKyAgICAgICAgICArIENBVCA9 IFRZUEUgL05PUEFHRTsgTU9SRSA9IFRZUEUgL1BBR0UuCisgICAgICAgICAgKyBHRVRPSyA/LWhl bHAgZml4ZWQuCisgICAgICAgICAgKyBcdih0aW1lc3RhbXApICg9ICJcdihuZGF0ZSkgXHYodGlt ZSkiKQorICAgICAgICAgICsgXHYoaG91cikgKGhvdXIgb2YgdGhlIGRheSwgMC0yMykKKyAgICAg ICAgICArIFxmdW5peDJkb3NwYXRoKCkgY29udmVydHMgYSBVTklYIHBhdGggKC8pIHRvIGEgRE9T IG9uZSAoXCkuCisgICAgICAgICAgKyBcZmRvczJ1bml4cGF0aCgpIGNvbnZlcnRzIGEgRE9TIChX aW5kb3dzLCBPUy8yKSBwYXRoIHRvIGEgVU5JWAorICAgICAgICAgICAgb25lLgorICAgICAgICAg ICsgXGZrZXl3b3JkdmFsKCkgcGFyc2VzIG5hbWU9dmFsdWUgcGFpciwgYWxsb3dzIG1hY3JvIGtl eXdvcmQKKyAgICAgICAgICAgIHBhcmFtZXRlcnMuCisgICAgICAgICAgKyBXZSBub3cgbWFrZSBl dmVyeSBhdHRlbXB0IHRvIG5vdCB3cml0ZSBwYXNzd29yZHMgdG8gdGhlCisgICAgICAgICAgICBk ZWJ1Zy5sb2cuCisgICAgICAgICAgKyBOZXcgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IGNlcnRpZmlj YXRlcyBmaWxlLCBpbmNsdWRlcyB0aGUKKyAgICAgICAgICAgIEtlcm1pdCBQcm9qZWN0IGF0IENv bHVtYmlhIFVuaXZlcnNpdHkgc28geW91IGNhbiBhY2Nlc3Mgb3VyCisgICAgICAgICAgICBJS1NE IHNlY3VyZWx5LgorICAgICAgICAgICsgU2VjdXJlIHRhcmdldHMgaW1wcm92ZWQgYW5kIGJldHRl ciBkb2N1bWVudGVkIGluIFVuaXgKKyAgICAgICAgICAgIG1ha2VmaWxlLgorICAgICAgICAgICsg QWxsIExpbnV4IChsaWJjIGFuZCBnbGliYykgYnVpbGRzIGNvbnNvbGlkYXRlZCB1bmRlciAibWFr ZQorICAgICAgICAgICAgbGludXgiLgorICAgICAgICAgICsgSFAtVVggbWFrZWZpbGUgdGFyZ2V0 cyBub3cgaGF2ZSBjb25zaXN0ZW50IG5hbWVzLgorICAgICAgICAgICsgTmV3IGFpeDUwIGFuZCBh aXg1MSB0YXJnZXRzIGFkZGVkLgorCisgICBDLUtlcm1pdCA4LjAuMjAwIEZpbmFsICgxMiBEZWMg MjAwMSkKKworICAgICAgICAgICsgUmVtb3RlL2xvY2FsLW1vZGUgY29uZnVzaW9uIG9uIHNvbWUg cGxhdGZvcm1zIGludHJvZHVjZWQgaW4KKyAgICAgICAgICAgIEJldGEuMDQsIGZpeGVkLgorICAg ICAgICAgICsgTWFueSBvZiB0aGUgbWFrZWZpbGUgdGFyZ2V0cyBhZGp1c3RlZCwgbmV3IG9uZXMg YWRkZWQuCisgICAgICAgICAgKyBOZXcgIm1ha2UgaW5zdGFsbCIgdGFyZ2V0IHNob3VsZCBwbGVh c2UgbW9zdCBwZW9wbGUuCisgICAgICAgICAgKyBOZXcgY29tbWFuZDogU0hPVyBJS1NELgorICAg ICAgICAgICsgRlRQIG92ZXIgVExTLgorICAgICAgICAgICsgTGFzdC1taW51dGUgdG91Y2h1cHMg dG8gdGV4dCBtZXNzYWdlcywgSEVMUCB0ZXh0LCBldGMuCisgICAgICAgICAgKyBFbmFibGUgbW9k ZW0tc2lnbmFsIHJlYWRpbmcgZm9yIFNDTyBPU1I1IGFuZCBVbml4d2FyZSA3LgorICAgICAgICAg ICsgU3BlY2lhbCBzdXBlcmZhc3QgVFJBTlNNSVQgL0JJTkFSWSAvTk9FQ0hPIC9OT1dBSVQgbW9k ZSBhZGRlZC4KKyAgICAgICAgICArIEZpeGVkIFBCWCBkaWFsaW5nIGluIHVubWFya2VkLWFyZWEt Y29kZSBjYXNlLgorICAgICAgICAgICsgSW1wcm92ZWQgU0hPVyBDT01NVU5JQ0FUSU9OUyB0ZWxs cyBsb2NrZmlsZSBkaXJlY3RvcnksIHR5cGljYWwKKyAgICAgICAgICAgIGRpYWxvdXQgZGV2aWNl IG5hbWUuCisgICAgICAgICAgKyBTb21lIEZUUCBPUEVOIGNvbW1hbmQgcGFyc2luZyBwcm9ibGVt cyBmaXhlZC4KKyAgICAgICAgICArIFNvbWUgZXJyb3JzIGluIGRhdGUgYXJpdGhtZXRpYyBmaXhl ZC4KKyAgICAgICAgICArIE5ldyBjb21tYW5kOiBTRVQgVEVSTUlOQUwgQVVUT0RPV05MT0FEIHsg Li4uLCBFUlJPUiB7IFNUT1AsCisgICAgICAgICAgICBDT05USU5VRSB9IH0KKyAgICAgICAgICAr IE5ldyBjb21tYW5kOiBIRUxQIEZJUkVXQUxMLgorICAgICAgICAgICsgU0VUIE1PREVNIEhBTkdV UC1NRVRIT0QgRFRSIGFkZGVkIGFzIHN5bm9ueW0gZm9yIFJTMjMyLVNJR05BTAorICAgICAgICAg ICsgU3VwcG9ydCBmb3Igc2VjdXJlIFVSTCBwcm90b2NvbHMgYWRkZWQ6IHRlbG5ldHM6LCBmdHBz OiwKKyAgICAgICAgICAgIGh0dHBzOi4KKworICAgQy1LZXJtaXQgOC4wLjIwMSAoOCBGZWIgMjAw MikKKworICAgICAgICAgICsgSW5zdGFsbGFiaWxpdHkgYXMgYW4gWzE1OV1TU0ggdjIgU3Vic3lz dGVtLgorICAgICAgICAgICsgWzE2MF1TRVQgTE9DVVMgY29tbWFuZC4KKyAgICAgICAgICArIFsx NjFdTC12ZXJzaW9ucyBvZiBDRCwgRElSLCBERUxFVEUsIE1LRElSLCBldGMsIHRvIGZvcmNlIGxv Y2FsCisgICAgICAgICAgICBleGVjdXRpb24uCisgICAgICAgICAgKyBbMTYyXVVTRVIgYW5kIEFD Q09VTlQgYWRkZWQgYXMgc3lub255bXMgZm9yIEZUUCBVU0VSIGFuZCBGVFAKKyAgICAgICAgICAg IEFDQ09VTlQuCisgICAgICAgICAgKyBbMTYzXVNIT1cgVkFSSUFCTEVTIG5vdyBhY2NlcHRzIGEg bGlzdCBvZiB2YXJpYWJsZXMuCisgICAgICAgICAgKyBSdWRpbWVudGFyeSBzdXBwb3J0IGZvciBb MTY0XUNhbGxlciBJRCB3aGVuIHJlY2VpdmluZyBwaG9uZQorICAgICAgICAgICAgY2FsbHMuCisg ICAgICAgICAgKyBVcC9Eb3duIFsxNjVdQXJyb3cta2V5IG5hdmlnYXRpb24gb2YgY29tbWFuZCBo aXN0b3J5IGJ1ZmZlci4KKyAgICAgICAgICArIFsxNjZdQXV0b21hdGljIGV4ZWN1dGlvbiBvZiBj dXN0b21pemF0aW9uIGZpbGUgaWYgaW5pdCBmaWxlIGlzCisgICAgICAgICAgICBtaXNzaW5nLgor CisgICBDLUtlcm1pdCA4LjAuMjA2IEJldGEuMDEgKDExIE9jdCAyMDAyKQorCisgICAgICAgIE5l dyBjb21tYW5kczoKKworICAgICAgICAgICAgICAgbyBPUklFTlRBVElPTiBsaXN0cyBsb2NhdGlv bi1yZWxhdGVkIHZhcmlhYmxlcyBhbmQgdGhlaXIKKyAgICAgICAgICAgICAgICAgdmFsdWVzLgor ICAgICAgICAgICAgICAgbyBLQ0QgY2hhbmdlcyB0byBzcGVjaWFsIGRpcmVjdG9yaWVzIGJ5IHRo ZWlyIHN5bWJvbGljCisgICAgICAgICAgICAgICAgIG5hbWVzICgia2NkID8iIGZvciBhIGxpc3Qp LgorICAgICAgICAgICAgICAgbyBTRVQgQ0QgSE9NRSBwYXRoIHRvIHNwZWNpZnkgaG9tZSBkaXJl Y3RvcnkgZm9yIENEIGFuZCBLQ0QKKyAgICAgICAgICAgICAgICAgY29tbWFuZHMuCisgICAgICAg ICAgICAgICBvIENPTlRJTlVFIGdpdmVuIGF0IHRvcCBsZXZlbCBpcyBlcXVpdmFsZW50IHRvIEVO RCAtLSBoYW5keQorICAgICAgICAgICAgICAgICB3aGVuIFBST01QVCdlZCBvdXQgb2YgYSBzY3Jp cHQsIHRvIGNvbnRpbnVlIHRoZSBzY3JpcHQuCisKKyAgICAgICAgTmV3IHN3aXRjaGVzIG9yIG9w ZXJhbmRzIGZvciBleGlzdGluZyBjb21tYW5kczoKKworICAgICAgICAgICAgICAgbyBHRVRPSyAv VElNRU9VVAorICAgICAgICAgICAgICAgbyBBU0ssIEFTS1EsIEdFVE9LIC9RVUlFVCAoc3VwcHJl c3NlcyBlcnJvciBtZXNzYWdlIG9uCisgICAgICAgICAgICAgICAgIHRpbWVvdXQpCisgICAgICAg ICAgICAgICBvIENPUFkgL0FQUEVORCBub3cgYWxsb3dzIGNvbmNhdGVuYXRpbmcgbXVsdGlwbGUg c291cmNlCisgICAgICAgICAgICAgICAgIGZpbGVzIGludG8gb25lIGRlc3QgZmlsZS4KKyAgICAg ICAgICAgICAgIG8gU0VUIFRDUCB7IEhUVFAtUFJPWFksIFNPQ0tTLVNFUlZFUiB9IC9VU0VSLCAv UEFTU1dPUkQuCisgICAgICAgICAgICAgICBvIERJUkVDVE9SWSBjb21tYW5kIG5vdyBhY2NlcHRz IG11bHRpcGxlIGZpbGVzcGVjcywgZS5nLgorICAgICAgICAgICAgICAgICAiZGlyIGEgYiBjIi4K KworICAgICAgICBTRVQgUVVJRVQgT04gbm93IGFsc28gYXBwbGllcyB0bzoKKworICAgICAgICAg ICAgICAgbyBTRVQgSE9TVCBjb25uZWN0aW9uIHByb2dyZXNzIG1lc3NhZ2VzLgorICAgICAgICAg ICAgICAgbyAiUHJlc3MgdGhlIFggb3IgRSBrZXkgdG8gY2FuY2VsIiBmaWxlLXRyYW5zZmVyIG1l c3NhZ2UuCisgICAgICAgICAgICAgICBvIFJFTU9URSBDRCByZXNwb25zZS4KKyAgICAgICAgICAg ICAgIG8gUkVNT1RFIExPR0lOIHJlc3BvbnNlLgorCisgICAgICAgIEltcHJvdmVtZW50cyBhbmQg bmV3IGZlYXR1cmVzOgorCisgICAgICAgICAgICAgICBvIE51bWVyb3VzIEZUUCBjbGllbnQgZml4 ZXMgYW5kIG5ldyBmZWF0dXJlcywgbGlzdGVkIGJlbG93LgorICAgICAgICAgICAgICAgbyBDLUtl cm1pdCwgd2hlbiBpbiByZW1vdGUgbW9kZSBhdCB0aGUgZW5kIG9mIGEgZmlsZQorICAgICAgICAg ICAgICAgICB0cmFuc2Zlciwgbm93IHByaW50cyBhIG9uZS1saW5lICJ3aGVyZSIgbWVzc2FnZS4g Q29udHJvbAorICAgICAgICAgICAgICAgICB3aXRoIFNFVCBUUkFOU0ZFUiBSRVBPUlQuCisgICAg ICAgICAgICAgICBvIFVuaXggbWFrZWZpbGUgImluc3RhbGwiIHRhcmdldCBub3cgY3JlYXRlcyBh biBVTklOU1RBTEwKKyAgICAgICAgICAgICAgICAgc2NyaXB0LgorICAgICAgICAgICAgICAgbyBJ bXByb3ZlZCBvcGVyYXRpb24gYW5kIHBlcmZvcm1hbmNlIG9uIFJGQyAyMjE3IFRlbG5ldAorICAg ICAgICAgICAgICAgICBjb25uZWN0aW9ucy4KKyAgICAgICAgICAgICAgIG8gSW1wcm92ZWQgQ09O TkVDVCAoaW50ZXJhY3RpdmUgdGVybWluYWwgY29ubmVjdGlvbikKKyAgICAgICAgICAgICAgICAg cGVyZm9ybWFuY2UuCisgICAgICAgICAgICAgICBvIEhFTFAgdGV4dCB1cGRhdGVkIGZvciBtYW55 IGNvbW1hbmRzLgorCisgICAgICAgIE5ldyBvciBmaXhlZCBtYWtlZmlsZSB0YXJnZXRzOgorCisg ICAgICAgICAgICAgICBvIFNvbGFyaXMgOSAoc2V2ZXJhbCB2YXJpYXRpb25zKQorICAgICAgICAg ICAgICAgbyBDb25jdXJyZW50IFBvd2VyTUFYCisgICAgICAgICAgICAgICBvIE1hYyBPUyBYIDEw LjIKKyAgICAgICAgICAgICAgIG8gRnJlZUJTRCAxLjAKKyAgICAgICAgICAgICAgIG8gRnJlZUJT RCA0LjYsIDUuMAorICAgICAgICAgICAgICAgbyBBSVggNS4yLCA1LjMKKworICAgICAgICBCdWdz IGZpeGVkIChnZW5lcmFsKToKKworICAgICAgICAgICAgICAgbyBGYWlsdXJlIHRvIHJ1biBpbiBW TVMgQmF0Y2ggZml4ZWQuCisgICAgICAgICAgICAgICBvIExESVJFQ1RPUlkgZml4ZWQgdG8gcnVu IEtlcm1pdCdzIGJ1aWx0LWluIERJUkVDVE9SWQorICAgICAgICAgICAgICAgICBjb21tYW5kIHJh dGhlciB0aGFuIGFuIGV4dGVybmFsIG9uZS4KKyAgICAgICAgICAgICAgIG8gRml4ZWQgU29sYXJp cyBhbmQgb3RoZXIgU1ZPUlBPU0lYIGJ1aWxkcyB0byBmaW5kIG91dAorICAgICAgICAgICAgICAg ICB0aGVpciBmdWxsIGhvc3RuYW1lcyByYXRoZXIgdGhhbiBqdXN0IHRoZSAidW5hbWUgLW4iCisg ICAgICAgICAgICAgICAgIG5hbWUuCisgICAgICAgICAgICAgICBvIEZpeGVkIHNvbWUgcHJvYmxl bXMgbWF0Y2hpbmcgc3RyaW5ncyB0aGF0IHN0YXJ0IHdpdGggIi4iLgorICAgICAgICAgICAgICAg byBGaXhlZCBzb21lIHByb2JsZW1zIG1hdGNoaW5nIHBhdHRlcm4gdGhhdCBjb250YWluIHthLGIs Y30KKyAgICAgICAgICAgICAgICAgbGlzdHMuCisgICAgICAgICAgICAgICBvIEZpeGVkIGVycm9u ZW91cyByZXBvcnRpbmcgb2YgdGV4dC1tb2RlIHJlY2VwdGlvbiBhcworICAgICAgICAgICAgICAg ICBiaW5hcnkgd2hlbiBzZW5kZXIgZGlkIG5vdCByZXBvcnQgdGhlIGZpbGUgc2l6ZSAoY29zbWV0 aWMKKyAgICAgICAgICAgICAgICAgb25seSkuCisgICAgICAgICAgICAgICBvIE1hbnkgcHJvYmxl bXMgd2l0aCBTV0lUQ0ggc3RhdGVtZW50cyBmaXhlZC4KKyAgICAgICAgICAgICAgIG8gRml4ZWQg U0VUIE9QVElPTlMgRElSRUNUT1JZIC9ET1RGSUxFUyB0byB3b3JrIGZvciBzZXJ2ZXIKKyAgICAg ICAgICAgICAgICAgdG9vLgorICAgICAgICAgICAgICAgbyBGaXhlZCBERUxFVEUgdG8gcHJpbnQg YW4gZXJyb3IgbWVzc2FnZSBpZiB0aGUgZmlsZSB3YXMKKyAgICAgICAgICAgICAgICAgbm90IGZv dW5kLgorICAgICAgICAgICAgICAgbyBGaXhlZCBTRVQgQ09OVFJPTCBVTlBSRUZJWCBBTEwgYW5k IFNFVCBQUkVGSVhJTkcgTk9ORSB0bworICAgICAgICAgICAgICAgICBkbyB0aGUgc2FtZSB0aGlu Zy4KKyAgICAgICAgICAgICAgIG8gRml4ZWQgYnVncyBleGVjdXRpbmcgbWFjcm9zIGZyb20gd2l0 aGluIHRoZSBPTl9FWElUCisgICAgICAgICAgICAgICAgIG1hY3JvLgorICAgICAgICAgICAgICAg byBcZmRheSgpIGFuZCBcZm5kYXkoKSBmaXhlZCBmb3IgZGF0ZXMgcHJpb3IgdG8gMTcgTm92Cisg ICAgICAgICAgICAgICAgIDE4NTguCisgICAgICAgICAgICAgICBvIFNlcmlhbCBzcGVlZC1jaGFu Z2luZyBidWcgaW4gTGludXggZml4ZWQuCisgICAgICAgICAgICAgICBvICJVbmJhbGFuY2VkIGJy YWNlcyIgc2NyaXB0IHBhcnNpbmcgZXJyb3JzIHdoZW4gdXNpbmcKKyAgICAgICAgICAgICAgICAg XHtudW1iZXJ9IGZpeGVkLgorICAgICAgICAgICAgICAgbyAiaWYgZGVmaW5lZCBcdihuYW1lKSIg Zml4ZWQgdG8gYmVoYXZlIGFzIGRlc2NyaWJlZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgYm9v ay4KKyAgICAgICAgICAgICAgIG8gRml4ZWQgUHJvYmxlbXMgY2F1c2VkIGJ5IExPQ0FMIHZhcmlh YmxlcyB3aG9zZSBuYW1lcyBhcmUKKyAgICAgICAgICAgICAgICAgbGVmdCBzdWJzdHJpbmdzIG9m IG1hY3JvIG5hbWVzLgorICAgICAgICAgICAgICAgbyBUaGUgSU5QVVQgY29tbWFuZCB3YXMgZml4 ZWQgdG8gaG9ub3IgdGhlIFBBUklUWSBzZXR0aW5nLgorICAgICAgICAgICAgICAgbyBGaXhlZCBi dWcgd2l0aCBDT1BZIHRvIGV4aXN0aW5nIGZpbGUgdGhhdCBpcyBsb25nZXIgdGhhbgorICAgICAg ICAgICAgICAgICBzb3VyY2UgZmlsZS4KKyAgICAgICAgICAgICAgIG8gUkVJTlBVVCBjb21tYW5k IGZhaWxlZCB0byBzdHJpcCBicmFjZXMvcXVvdGVzIGFyb3VuZCBpdHMKKyAgICAgICAgICAgICAg ICAgdGFyZ2V0IHN0cmluZy4KKyAgICAgICAgICAgICAgIG8gTmV0d29yayBkaXJlY3RvcnkgbG9v a3VwcyBkaWRuJ3Qgd29yayBmb3IgU1NICisgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb25zLgor ICAgICAgICAgICAgICAgbyBSRU1PVEUgU0VUIHsgRklMRSwgVFJBTlNGRVIgfSBDSEFSQUNURVIt U0VUIGZpeGVkLgorICAgICAgICAgICAgICAgbyBDbG9zZWQgc29tZSBob2xlcyB3aGVyZWJ5IGFu IGluY29tcGxldGVseSByZWNlaXZlZCBmaWxlCisgICAgICAgICAgICAgICAgIHdhcyBub3QgZGVs ZXRlZCB3aGVuIFNFVCBGSUxFIElOQ09NUExFVEUgaXMgRElTQ0FSRCwgZS5nLgorICAgICAgICAg ICAgICAgICB3aGVuIHRoZSBLZXJtaXQgaXMgaHVuZyB1cCB1cG9uLgorICAgICAgICAgICAgICAg byBTRVQgWEZFUiBDSEFSQUNURVItU0VUIFRSQU5TUEFSRU5UIGZpeGVkIHRvIGRvIHRoZSBzYW1l CisgICAgICAgICAgICAgICAgIGFzIFNFVCBYRkVSIFRSQU5TTEFUSU9OIE9GRi4KKyAgICAgICAg ICAgICAgIG8gU0VUIEhPU1QgUFRZIChlLmcuIFNTSCkgY29ubmVjdGlvbiBmaXhlZCB0byBwYXNz IGFsb25nCisgICAgICAgICAgICAgICAgIHdpbmRvdy1zaXplIGNoYW5nZXMuCisgICAgICAgICAg ICAgICBvIEMtS2VybWl0IHNlYXJjaCBwYXRoIGZvciBUQUtFIGZpbGVzIHdhcyBhY2NpZGVudGFs bHkKKyAgICAgICAgICAgICAgICAgZGlzYWJsZWQuCisKKyAgICAgICAgRlRQIGNsaWVudCBidWdz IGZpeGVkOgorCisgICAgICAgICAgICAgICBvIENoYXJhY3RlciBzZXQgdHJhbnNsYXRpb24gd2Fz IGJyb2tlbiBvbiBsaXR0bGUtZW5kaWFuCisgICAgICAgICAgICAgICAgIChlLmcuIFBDKSBhcmNo aXRlY3R1cmVzLgorICAgICAgICAgICAgICAgbyBGVFAgUFVUIC9TRVJWRVItUkVOQU1FOiwgL1JF TkFNRS1UTzosIC9NT1ZFLVRPOiBzd2l0Y2hlcworICAgICAgICAgICAgICAgICB3ZXJlIHN0aWNr eS4KKyAgICAgICAgICAgICAgIG8gTWFrZSBTRVQgVFJBTlNGRVIgTU9ERSBNQU5VQUwgYXBwbHkg dG8gRlRQLgorICAgICAgICAgICAgICAgbyBNYWtlIFNFVCBGSUxFIElOQ09NUExFVEUgeyBLRUVQ LCBESVNDQVJEIH0gYXBwbHkgdG8gRlRQLgorICAgICAgICAgICAgICAgbyBGVFAgTUdFVCAvVVBE QVRFIGhhbmRsZWQgZXF1YWwgdGltZXMgaW5jb3JyZWN0bHkuCisgICAgICAgICAgICAgICBvIEZU UCBNR0VUIC9SRUNPVkVSIGZpeGVkIHRvIGlnbm9yZSBmaWxlIGRhdGVzLCB1c2Ugb25seQorICAg ICAgICAgICAgICAgICBzaXplLgorICAgICAgICAgICAgICAgbyBGVFAgTUdFVCAvUkVDT1ZFUiBz b21ldGltZXMgZG93bmxvYWRlZCBmaWxlcyBpdCBkaWRuJ3QKKyAgICAgICAgICAgICAgICAgbmVl ZCB0by4KKyAgICAgICAgICAgICAgIG8gRlRQIGRvd25sb2FkcyB3aXRoIFRSQU5TRkVSIERJU1BM QVkgQlJJRUYgY291bGQgZ2l2ZQorICAgICAgICAgICAgICAgICBtaXNsZWFkaW5nIGVycm9yIG1l c3NhZ2VzLgorICAgICAgICAgICAgICAgbyBGVFAgTUdFVCB0ZW1wIGZpbGUgbm90IGRlbGV0ZWQg aWYgRlRQIERFQlVHIHNldCB0byBPRkYKKyAgICAgICAgICAgICAgICAgYWZ0ZXIgaXQgd2FzIE9O LgorICAgICAgICAgICAgICAgbyBMT0NVUyBub3Qgc3dpdGNoZWQgYmFjayB3aGVuIEZUUCBjb25u ZWN0aW9uIGlzIGxvc3QuCisgICAgICAgICAgICAgICBvIFNldCBpbmNvbWluZyBmaWxlIGRhdGUg ZXZlbiBpZiBpdCB3YXMgbm90IGNvbXBsZXRlbHkKKyAgICAgICAgICAgICAgICAgcmVjZWl2ZWQu CisgICAgICAgICAgICAgICBvIEZUUCBNR0VUIHNlbnQgU0laRSBhbmQgTURUTSBjb21tYW5kcyBl dmVuIHdoZW4gaXQgZGlkbid0CisgICAgICAgICAgICAgICAgIGhhdmUgdG8uCisgICAgICAgICAg ICAgICBvIEZUUCBNR0VUIHNlbnQgU0laRSBhbmQgTURUTSBjb21tYW5kcyBldmVuIHdoZW4gaXQg a25ldworICAgICAgICAgICAgICAgICB0aGV5IHdvdWxkbid0IHdvcmsuCisgICAgICAgICAgICAg ICBvIEZUUCBNR0VUIGZhaWxlZCBpZiBubyBmaWxlcyB3ZXJlIHNlbGVjdGVkIGZvciBkb3dubG9h ZC4KKyAgICAgICAgICAgICAgIG8gRlRQIE1HRVQgYSogYiogYyogd291bGQgZmFpbCB0byBnZXQg YW55IGMqJ3MgaWYgbm8gYioncworICAgICAgICAgICAgICAgICBleGlzdGVkLgorICAgICAgICAg ICAgICAgbyBCaWcgcHJvYmxlbXMgY2FuY2VsaW5nIE1HRVQgd2l0aCBDdHJsLUMuCisgICAgICAg ICAgICAgICBvIFNvbWUgZXh0cmFuZW91cyBMT0NVUyBkaWFsb2dzIHNxdWVsY2hlZC4KKyAgICAg ICAgICAgICAgIG8gU29tZSBpbmNvbnNpc3RlbmNpZXMgaW4gU0VUIEZUUCBGSUxFTkFNRVMgQVVU TyBmaXhlZC4KKyAgICAgICAgICAgICAgIG8gRml4ZWQgZmlsZS1kZXNjcmlwdG9yIHBpbGV1cCBh ZnRlciBtdWx0aXBsZSBNR0VUcyB3aGVuCisgICAgICAgICAgICAgICAgIHVzaW5nIG1rc3RlbXAo KS4KKyAgICAgICAgICAgICAgIG8gRml4ZWQgIm1nZXQgZm9vIiwgd2hlcmUgZm9vIGlzIGEgZGly ZWN0b3J5IG5hbWUuCisKKyAgICAgICAgRlRQIGltcHJvdmVtZW50czoKKworICAgICAgICAgICAg ICAgbyBOZXcgWzE2N11GVFAgcHJvdG9jb2wgZmVhdHVyZXMgYWRkZWQgKEZFQVQsIE1MU0QpLgor ICAgICAgICAgICAgICAgbyBGVFAgTUdFVCAvUkVDVVJTSVZFIG5vdyB3b3JrcyBhcyBleHBlY3Rl ZCBpZiBzZXJ2ZXIKKyAgICAgICAgICAgICAgICAgc3VwcG9ydHMgTUxTRC4KKyAgICAgICAgICAg ICAgIG8gRlRQIE1HRVQgL0RBVEVTLURJRkZFUiB0byBkb3dubG9hZCBpZiBsb2NhbCBhbmQgcmVt b3RlCisgICAgICAgICAgICAgICAgIGZpbGUgZGF0ZXMgZGlmZmVyLgorICAgICAgICAgICAgICAg byBGVFAgREFURVMgZGVmYXVsdCBjaGFuZ2VkIHRvIE9OLgorICAgICAgICAgICAgICAgbyBGVFAg TVBVVCwgTUdFVCAvRVhDRVBUIG5vdyBhbGxvd3MgdXAgdG8gNjQgcGF0dGVybnMgKHVwCisgICAg ICAgICAgICAgICAgIGZyb20gOCkuCisgICAgICAgICAgICAgICBvIFRvcC1sZXZlbCBTSVRFIGFu ZCBQQVNTSVZFIGNvbW1hbmRzIGFkZGVkIGZvcgorICAgICAgICAgICAgICAgICBjb252ZW5pZW5j ZS4KKyAgICAgICAgICAgICAgIG8gTUdFVCAvQ09MTElTSU9OOkFQUEVORCAvQVMtTkFNRTpuZXdm aWxlICouKiBwdXRzIGFsbAorICAgICAgICAgICAgICAgICByZW1vdGUgZmlsZXMgaW50byBvbmUg bG9jYWwgZmlsZS4KKyAgICAgICAgICAgICAgIG8gU0VUIEZUUCBTRVJWRVItVElNRS1PRkZTRVQg Zm9yIHdoZW4gc2VydmVyIGhhcyB3cm9uZworICAgICAgICAgICAgICAgICB0aW1lem9uZSBzZXQu CisgICAgICAgICAgICAgICBvIEFsbG93IGZvciBhbHRlcm5hdGl2ZSBzZXJ2ZXIgaW50ZXJwcmV0 YXRpb25zIG9mIFtNXU1QVVQKKyAgICAgICAgICAgICAgICAgL1VOSVFVRS4KKyAgICAgICAgICAg ICAgIG8gU0VUIEZUUCBBTk9OWU1PVVMtUEFTU1dPUkQgbGV0cyB5b3Ugc3BlY2lmeSB0aGUgZGVm YXVsdAorICAgICAgICAgICAgICAgICBhbm9ueW1vdXMgcGFzc3dvcmQuCisgICAgICAgICAgICAg ICBvIEFsbG93ICJHRVQgL1JFQ1VSU0lWRSBwYXRoL2ZpbGUiIHRvIGZvcmNlIGxvY2FsCisgICAg ICAgICAgICAgICAgIHN1YmRpcmVjdG9yeSBjcmVhdGlvbi4KKyAgICAgICAgICAgICAgIG8gU0VU IEZUUCBESVNQTEFZIGlzIGxpa2UgU0VUIFRSQU5TRkVSIERJU1BMQVkgYnV0IGFwcGxpZXMKKyAg ICAgICAgICAgICAgICAgb25seSB0byBGVFAuCisgICAgICAgICAgICAgICBvIEZUUCB7IEVOQUJM RSwgRElTQUJMRSB9IG5ldy1wcm90b2NvbC1mZWF0dXJlLW5hbWUuCisgICAgICAgICAgICAgICBv IEZUUCBNR0VUIC9OT0RPVEZJTEVTLgorICAgICAgICAgICAgICAgbyBEZWJ1ZyBsb2cgbm93IHJl Y29yZHMgRlRQIGNvbW1hbmRzIGFuZCByZXNwb25zZXMgaW4KKyAgICAgICAgICAgICAgICAgZ3Jl cC1hYmxlIGZvcm1hdC4KKworICAgWyBbMTY4XVRvcCBdIFsgWzE2OV1Db250ZW50cyBdIFsgWzE3 MF1DLUtlcm1pdCBdIFsgWzE3MV1LZXJtaXQgSG9tZSBdCisKKzEuIEZJWEVTIFNJTkNFIFZFUlNJ T04gNy4wLjE5NiBGaXJzdCwgdGhlIGNoYW5nZXMgZnJvbSA3LjAuMTk2IHRvIDcuMC4xOTcuLi4K K1NvdXJjZSBhbmQgbWFrZWZpbGUgdHdlYWtzIHRvIGdldCBzdWNjZXNzZnVsIGJ1aWxkcyBvbiBw bGF0Zm9ybXMgdGhhdCB3ZXJlCitub3QgYXZhaWxhYmxlIGluIHRpbWUgZm9yIHRoZSA3LjAgcmVs ZWFzZToKKworICAgICAqIDQuMkJTRAorICAgICAqIDQuM0JTRAorICAgICAqIEFJWCA0LjMKKyAg ICAgKiBBVCZUIDNCMiBhbmQgM0IyMAorICAgICAqIEJlT1MgNC41CisgICAgICogQ0xJWAorICAg ICAqIEludGVyYWN0aXZlIFVOSVggU3lzdGVtIFYvMzg2IFIzLjIgVjQuMS4xCisgICAgICogT1Mt OS82ODAwMAorICAgICAqIE9TRi8xIDEuMy4KKyAgICAgKiBQUy8yIEFJWCAxLjIuMQorICAgICAq IFNDTyBPU1I1LjAueAorICAgICAqIFNDTyBYZW5peCAyLjMuNAorICAgICAqIFNJTklYIDUuNDEv SW50ZWwKKyAgICAgKiBTdHJhdHVzIEZUWAorICAgICAqIFN0cmF0dXMgVk9TCisgICAgICogU3Vu T1MgNC4xIHdpdGggWC4yNQorICAgICAqIFVsdHJpeCA0LjIKKyAgICAgKiBVbml4d2FyZSAyLjAK KworICAgVGhlcmUgd2VyZSBubyBmdW5jdGlvbmFsIGNoYW5nZXMgZnJvbSAxOTYgdG8gMTk3Lgor CisgICBGaXhlcyBhcHBsaWVkIGFmdGVyIEMtS2VybWl0IDcuMC4xOTcgd2FzIHJlbGVhc2VkOgor CisgICBTb3VyY2UgY29kZTogQmlnIGZsZXhlbGludCBhbmQgImdjYyAtV2FsbCIgYXVkaXQgYW5k IGNsZWFudXAuCisKKyAgIENvbmZpZ3VyYXRpb246CisgICAgICogU29sYXJpcyBSVFMvQ1RTICho YXJkd2FyZSBmbG93IGNvbnRyb2wpIGRpZG4ndCB3b3JrLgorICAgICAqIEJTREkgUlRTL0NUUyB3 b3JrZWQgb25seSBpbiBvbmUgZGlyZWN0aW9uLgorICAgICAqIEZyZWVCU0QgNC4wIHdpdGggbmN1 cnNlcyA1LjAgYnJva2UgaW50ZXJhY3RpdmUgY29tbWFuZCBwYXJzaW5nLgorICAgICAqIFFOWC0z MiBidWlsZCBsYWNrZWQgLURCSUdCVUZPSyBzbyBjb3VsZG4ndCBleGVjdXRlIGJpZyBtYWNyb3Mu CisKKyAgIENvbm5lY3Rpb25zOgorICAgICAqIFNFVCBIT1NUIC9QVFkgZGlkbid0IHdvcmsgb24g c29tZSBwbGF0Zm9ybXMuCisgICAgICogQnJva2VuIFNFVCBIT1NUIC9VU0VSOnh4eCAvUEFTU1dP UkQ6eXl5IC9BQ0NPVU5UOnp6eiBzd2l0Y2hlcworICAgICAgIGZpeGVkLgorICAgICAqIFRyYW5z cGFyZW50IHByaW50aW5nIHdhcyBicm9rZW4gaW4gVW5peC4KKyAgICAgKiBBTlNXRVIgMCAod2Fp dCBmb3JldmVyKSBkaWRuJ3Qgd29yay4KKyAgICAgKiBTb21lIHByb2JsZW1zIGluIE11bHRpdGVj aCBtb2RlbSBjb21tYW5kIHN0cmluZ3MuCisgICAgICogU3B1cmlvdXMgIj9Tb3JyeSwgY2FuJ3Qg Y29uZGl0aW9uIGNvbnNvbGUgdGVybWluYWwiIGVycm9ycy4KKyAgICAgKiBEaXNhYmxpbmcgbW9k ZW0gY29tbWFuZCBzdHJpbmdzIGJ5IHNldHRpbmcgdGhlbSB0byBub3RoaW5nIGJyb2tlCisgICAg ICAgZGlhbGluZy4KKyAgICAgKiBTRVQgRElBTCBUSU1FT1VUIHZhbHVlIHdhcyB1c3VhbGx5IGln bm9yZWQuCisgICAgICogU0VUIERJQUwgTUVUSE9EIFBVTFNFIGRpZG4ndCB3b3JrLgorICAgICAq IENlcnRhaW4gbW9kZW0gY29tbWFuZHMsIGlmIGNoYW5nZWQsIG5vdCByZWZyZXNoZWQgaWYgbW9k ZW0gdHlwZQorICAgICAgIGNoYW5nZWQuCisgICAgICogU0VUIFNFU1NJT04tTE9HIGNvbW1hbmQg d2FzIG1pc3NpbmcgZnJvbSBWTVMuCisgICAgICogVk1TIHNlc3Npb24gbG9nIGZvcm1hdCBmaXhl ZCBmb3Igc2NyaXB0cy4KKyAgICAgKiBIQU5HVVAgYnkgZHJvcHBpbmcgRFRSIGRpZG4ndCB3b3Jr IGluIE5ldEJTRC4KKyAgICAgKiBTRVQgRkxPVyAvQVVUTyB2ZXJzdXMgU0VUIEZMT1cgY29uZnVz aW9uIGZpeGVkLgorICAgICAqIFNwdXJpb3VzIHNlY29uZGFyeSBTb2xhcmlzIGxvY2tmaWxlIHJl bW92ZWQuCisgICAgICogU0NPIE9TUjUgRFRSIE9uL09mZiBoYW5ndXAuCisgICAgICogVVVDUCBs b2NrZmlsZSByYWNlIGNvbmRpdGlvbi4KKworICAgQ29tbWFuZHMgYW5kIHNjcmlwdHM6CisgICAg ICogTWlzc2luZyBDQVVUSU9VUyBhbmQgRkFTVCBjb21tYW5kcyByZXN0b3JlZC4KKyAgICAgKiBC cm9rZW4gUFRZIGNvbW1hbmQgaW4gbGF0ZS1tb2RlbCBMaW51eGVzIGZpeGVkIChBUEkgY2hhbmdl ZCkuCisgICAgICogRml4ZWQgb2ZmLWJ5LW9uZSBlcnJvciBpbiBjb21tYW5kIHJlY2FsbCB3aGVu IHN3aXRjaGluZyBkaXJlY3Rpb24uCisgICAgICogRml4ZWQgcmVjYWxsIG9mIGNvbW1hbmRzIHRo YXQgY29udGFpbiAnPycuCisgICAgICogQ09QWSAvU1dBUC1CWVRFUyBkaWRuJ3Qgd29yayBvbiBz b21lIGFyY2hpdGVjdHVyZXMuCisgICAgICogVmFyaW91cyBjb21iaW5hdGlvbnMgb2YgQ09QWSBz d2l0Y2hlcyBkaWRuJ3Qgd29yay4KKyAgICAgKiBWYXJpb3VzIHByb2JsZW1zIHdpdGggQ09QWSBv ciBSRU5BTUUgd2l0aCBhIGRpcmVjdG9yeSBuYW1lIGFzCisgICAgICAgdGFyZ2V0LgorICAgICAq IFNISUZUIGRpZG4ndCBkZWNyZW1lbnQgXHYoYXJnYykgaWYgdXNlZCB3aXRoaW4gSUYsIEVMU0Us IG9yIFNXSVRDSAorICAgICAgIGJsb2NrLgorICAgICAqIFNISUZUIGRpZG4ndCBhZmZlY3QgdGhl IFwlKiB2YXJpYWJsZS4KKyAgICAgKiBEaXZpZGUgYnkgemVybyBpbXByb3Blcmx5IGhhbmRsZWQg aW4gc29tZSBcZnVuY3Rpb24oKXMuCisgICAgICogUHJvYmxlbXMgd2l0aCBSRVRVUk4gZnJvbSBy aWdodC1yZWN1cnNpdmUgZnVuY3Rpb25zLgorICAgICAqIEZTRUVLIC9MSU5FIFwlYyBMQVNUIGRp ZG4ndCB3b3JrIGlmIGFscmVhZHkgYXQgZW5kLgorICAgICAqIFNvbWUgYnVmZmVyIHZ1bG5lcmFi aWxpdGllcyBhbmQgcG90ZW50aWFsIG1lbW9yeSBsZWFrcyB3ZXJlCisgICAgICAgZGlzY292ZXJl ZCBhbmQgZml4ZWQuCisgICAgICogXGZyZGlyZWN0b3J5KCkgZml4ZWQgbm90IHRvIGZvbGxvdyBz eW1ib2xpYyBsaW5rcy4KKyAgICAgKiBTRVQgRVhJVCBXQVJOSU5HIE9GRiBmaXhlZCB0byB3b3Jr IHdoZW4gRVhJVCBnaXZlbiBpbiBhIHNjcmlwdC4KKyAgICAgKiBNaXNzaW5nIERFTEVURSBhbmQg TUtESVIgZXJyb3IgbWVzc2FnZSBmaXhlZC4KKyAgICAgKiBcZmRheSgpIGNvcmUgZHVtcCBmb3Ig YW5jaWVudCBkYXRlcyBmaXhlZC4KKworICAgRmlsZSB0cmFuc2ZlcjoKKyAgICAgKiBTRU5EIC9D T01NQU5EIHdhcyBicm9rZW4uCisgICAgICogQ1JFQ0VJVkUgd2FzIGJyb2tlbiAoYnV0IFJFQ0VJ VkUgL0NPTU1BTkQgd2FzIE9LKS4KKyAgICAgKiBRdW90aW5nIHdpbGRjYXJkIGNoYXJzIGluIGZp bGVuYW1lcyBkaWRuJ3Qgd29yay4KKyAgICAgKiBQcm9ibGVtcyBjYW5jZWxpbmcgc3RyZWFtaW5n IGZpbGUgdHJhbnNmZXJzIHdpdGggWCBvciBaLgorICAgICAqIFByb2JsZW1zIHNoaWZ0aW5nIGJl dHdlZW4gc3RyZWFtaW5nIGFuZCB3aW5kb3dpbmcgZmlsZSB0cmFuc2Zlci4KKyAgICAgKiBOb24t RlVMTCBmaWxlLXRyYW5zZmVyIGRpc3BsYXlzIGVycm9uZW91c2x5IHNhaWQgU1RSRUFNSU5HIHdo ZW4KKyAgICAgICBub3QuCisgICAgICogQW4gYWN0aXZlIFNFTkQtTElTVCBwcmV2ZW50ZWQgR0VU IGZyb20gd29ya2luZy4KKyAgICAgKiBTRVQgU0VSVkVSIEdFVC1QQVRIIGludGVycHJldGF0aW9u IG9mIHJlbGF0aXZlIG5hbWVzIGxpa2UgIi4iIHdhcworICAgICAgIHdyb25nLgorICAgICAqIFRo ZSBNQUlMIGNvbW1hbmQgd2FzIGJyb2tlbi4KKyAgICAgKiAia2VybWl0IC1zICoiIG1pZ2h0IGhh dmUgc2tpcHBlZCBzb21lIGZpbGVzLgorICAgICAqIFRyYW5zYWN0aW9uIGxvZyBlbnRyaWVzIHdl cmUgbm90IG1hZGUgZm9yIGV4dGVybmFsIHByb3RvY29sCisgICAgICAgdHJhbnNmZXJzLgorICAg ICAqIEZpbGUgY291bnQgcmVwb3J0IGZpeGVkIHRvIHNob3cgbnVtYmVyIG9mIGZpbGVzIGFjdHVh bGx5CisgICAgICAgdHJhbnNmZXJyZWQuCisgICAgICogRml4ZWQgZmlsZW5hbWUgY29udmVyc2lv biB0byBjb252ZXJ0IHNwYWNlcyB0byB1bmRlcnNjb3Jlcy4KKyAgICAgKiBNYWRlIFNFVCBQUkVG SVhJTkcgLyBTRVQgQ09OVFJPTCBQUkVGSVggYWxzbyBhZGp1c3QgQ0xFQVJDSEFOTkVMLgorICAg ICAqIE1vcmUgIlJlY2VpdmUgd2luZG93IGZ1bGwiIGVycm9ycyBmaXhlZC4KKyAgICAgKiBCcm9r ZW4gdGVybWluYWwgYnVmZmVyaW5nIGFmdGVyIGN1cnNlcyBkaXNwbGF5IGluIFNvbGFyaXMgZml4 ZWQuCisgICAgICogU0VUIEZJTEUgSU5DT01QTEVURSBESVNDQVJEIGRpZCBub3Qgd29yayBpbiBh bGwgY2FzZXMuCisgICAgICogUGFja2V0IGxvZyBjaGFuZ2VkIHRvIHJlZm9ybWF0IHRoZSBzdGFy dC1vZi1wYWNrZXQgY2hhcmFjdGVyCisgICAgICAgcHJpbnRhYmx5LgorICAgICAqIER5bmFtaWMg dGltZW91dHMgY291bGQgZ3JvdyByaWRpY3Vsb3VzbHkgbGFyZ2UuCisKKyAgIENoYXJhY3RlciBz ZXRzOgorICAgICAqIEhlYnJldy03IHRyYW5zbGF0aW9ucyBtaXNzZWQgdGhlIGxldHRlciBUYXYu CisgICAgICogQzEgYXJlYSBvZiBDUDEyNTIgd2FzIGlnbm9yZWQuCisgICAgICogU0VUIFRSQU5T RkVSIENIQVJBQ1RFUi1TRVQgVFJBTlNQQVJFTlQgY291bGQgZ2l2ZSBnYXJiYWdlCisgICAgICAg dHJhbnNsYXRpb25zLgorICAgICAqIFRSQU5TTEFURSBtaWdodCBub3Qgd29yayBvbiBMaXR0bGUg RW5kaWFuIGFyY2hpdGVjdHVyZXMuCisgICAgICogSW5zdWZmaWNpZW50IHJhbmdlIGNoZWNraW5n IGluIGNlcnRhaW4gVFJBTlNMQVRFIG9wZXJhdGlvbnMuCisKKyAgIFRoZSBmb2xsb3dpbmcgYnVn cyBpbiBDLUtlcm1pdCA4LjAuMjAwIHdlcmUgZml4ZWQgaW4gOC4wLjIwMToKKworICAgICAqIEFu IG9ic2N1cmUgcGF0aCB0aHJvdWdoIHRoZSBjb2RlIGNvdWxkIGNhdXNlIHRoZSBVbml4IHZlcnNp b24gb2YKKyAgICAgICBDLUtlcm1pdCB0byBkdW1wIGNvcmUgZHVyaW5nIGl0cyBzdGFydHVwIHNl cXVlbmNlLiBUaGlzIGhhcHBlbmVkIHRvCisgICAgICAgb25seSBvbmUgcGVyc29uLCBidXQgbm93 IGl0J3MgZml4ZWQuCisgICAgICogV2hlbiBDLUtlcm1pdCA4LjAgaXMgaW4gS2VybWl0IHNlcnZl ciBtb2RlIGFuZCB0aGUgY2xpZW50IHNheXMgImdldAorICAgICAgIGJsYWgiLCB3aGVyZSBibGFo IChvbiB0aGUgc2VydmVyKSBpcyBhIHN5bWxpbmsgcmF0aGVyIHRoYW4gYSByZWFsCisgICAgICAg ZmlsZSwgdGhlIHNlcnZlciB1bnJlYXNvbmFibHkgcmVmdXNlZCB0byBzZW5kIHRoZSBsaW5rZWQt dG8gZmlsZS4KKyAgICAgKiBXaGVuIEMtS2VybWl0IGlzIGFuIEZUUCBjbGllbnQgYW5kIHNheXMg ImdldCBmb28vYmFyIiAoaS5lLiBhCisgICAgICAgZmlsZW5hbWUgdGhhdCBpbmNsdWRlcyBvbmUg b3IgbW9yZSBwYXRoIHNlZ21lbnRzKSwgaXQgZmFpbGVkIHRvCisgICAgICAgYWNjZXB0IHRoZSBp bmNvbWluZyBmaWxlICh0aGlzIGhhcHBlbmVkIG9ubHkgd2l0aCBHRVQsIG5vdCBNR0VUKS4KKyAg ICAgKiBBcnJheSByZWZlcmVuY2VzIHNob3VsZCBiZSBjYXNlIGluc2Vuc2l0aXZlIGJ1dCBvbmx5 IGxvd2VyY2FzZQorICAgICAgIGFycmF5IGxldHRlcnMgd2VyZSBhY2NlcHRlZC4KKyAgICAgKiBT SE9XIFZBUklBQkxFUyBkdW1wZWQgY29yZSBvbiBcdihzZXhwcmVzc2lvbikgYW5kIFx2KHN2YWx1 ZSkuCisgICAgICogU3B1cmlvdXMgcmVmdXNhbHMgb2YgcmVtb3RlIGRpcmVjdG9yeSBsaXN0aW5n cyBpZiB0aGUgcmVtb3RlCisgICAgICAgc2VydmVyJ3MgZGF0ZSB3YXMgc2V0IGluIHRoZSBwYXN0 LgorICAgICAqIEluIEFJWCwgYW5kIG1heWJlIGVsc2V3aGVyZSB0b28sIEtlcm1pdCdzIENPUFkg Y29tbWFuZCBhbHdheXMKKyAgICAgICBmYWlsZWQgd2l0aCAiU291cmNlIGFuZCBkZXN0aW5hdGlv biBhcmUgdGhlIHNhbWUgZmlsZSIgd2hlbiB0aGUKKyAgICAgICBkZXN0aW5hdGlvbiBmaWxlIGRp ZG4ndCBleGlzdC4KKyAgICAgKiBUaGUgVk1TIHZlcnNpb24gb2YgQy1LZXJtaXQgZGlkIG5vdCB3 b3JrIGluIEJhdGNoIG9yIHdoZW4gU1BBV04nZC4KKyAgICAgICBUbyBjb21wb3VuZCB0aGUgcHJv YmxlbSwgaXQgYWxzbyBwcmV0dHkgbXVjaCBpZ25vcmVkIHRoZSAtQiBhbmQgLXoKKyAgICAgICBj b21tYW5kLWxpbmUgb3B0aW9ucywgd2hvc2UgcHVycG9zZSBpcyB0byB3b3JrIGFyb3VuZCBzdWNo CisgICAgICAgcHJvYmxlbXMuCisgICAgICogQy1LZXJtaXQgOC4wIGNvdWxkIG5vdCBiZSBidWls dCBvbiBJUklYIDUueC4KKyAgICAgKiBUaGUgQy1LZXJtaXQgOC4wIGJ1aWxkIGZvciBRTlg2IHNh aWQgaXQgd2FzIGFuICIodW5rbm93biB2ZXJzaW9uKSIuCisKKyAgIE90aGVyIGZpeGVzIGFyZSBs aXN0ZWQgaW4gdGhlIFsxNzJdcHJldmlvdXMgc2VjdGlvbi4KKworICAgWyBbMTczXVRvcCBdIFsg WzE3NF1Db250ZW50cyBdIFsgWzE3NV1DLUtlcm1pdCBdIFsgWzE3Nl1LZXJtaXQgSG9tZSBdCisK KzIuIFNTSCBBTkQgSFRUUAorCisyLjEuIFNTSCBDb25uZWN0aW9ucworCisgICAgIFRoaXMgc2Vj dGlvbiBkb2VzIG5vdCBhcHBseSB0byBbMTc3XUtlcm1pdCA5NSAyLjAsIHdoaWNoIGhhcyBpdHMg b3duCisgICAgIGJ1aWx0LWluIFNTSCBjbGllbnQsIHdoaWNoIGlzIGRvY3VtZW50ZWQgWzE3OF1T RVBBUkFURUxZLgorCisgICBPbiBtb3N0IFVOSVggcGxhdGZvcm1zLCBDLUtlcm1pdCBjYW4gbWFr ZSBTU0ggKFNlY3VyZSBTSGVsbCkgY29ubmVjdGlvbgorICAgYnkgcnVubmluZyB0aGUgZXh0ZXJu YWwgU1NIIGNvbW1hbmQgb3IgcHJvZ3JhbSB0aHJvdWdoIGl0cworICAgcHNldWRvdGVybWluYWwg aW50ZXJmYWNlLiBUaGUgY29tbWFuZCBpczoKKworICAgU1NIIHRleHQKKyAgICAgICAgICBUZWxs cyBLZXJtaXQgdG8gc3RhcnQgdGhlIGV4dGVybmFsIFNTSCBjbGllbnQsIHBhc3NpbmcgdGhlIGdp dmVuCisgICAgICAgICAgdGV4dCB0byBpdCBvbiB0aGUgY29tbWFuZCBsaW5lLiBOb3JtYWxseSB0 aGUgdGV4dCBpcyBqdXN0IHRoZQorICAgICAgICAgIGhvc3RuYW1lLCBidXQgaXQgY2FuIGJlIGFu eXRoaW5nIGVsc2UgdGhhdCBpcyBhY2NlcHRhYmxlIHRvIHRoZQorICAgICAgICAgIHNzaCBjbGll bnQuIElmIHRoZSBjb21tYW5kIHN1Y2NlZWRzLCB0aGUgY29ubmVjdGlvbiBpcyBtYWRlIGFuZAor ICAgICAgICAgIEtlcm1pdCBhdXRvbWF0aWNhbGx5IGVudGVycyBDT05ORUNUICh0ZXJtaW5hbCkg bW9kZS4gWW91IGNhbiB1c2UKKyAgICAgICAgICB0aGUgU1NIIGNvbW1hbmQgdG8gbWFrZSBhIGNv bm5lY3Rpb24gdG8gYW55IGhvc3QgdGhhdCBoYXMgYW4gU1NICisgICAgICAgICAgc2VydmVyLgor CisgICBLZXJtaXQncyBTU0ggY29tbWFuZCBnaXZlcyB5b3UgYWxsIHRoZSBmZWF0dXJlcyBvZiBL ZXJtaXQgb24gYW4gU1NICisgICBjb25uZWN0aW9uOiBjb21tYW5kIGxhbmd1YWdlLCBmaWxlIHRy YW5zZmVyLCBjaGFyYWN0ZXItc2V0IHRyYW5zbGF0aW9uLAorICAgc2NyaXB0aW5nLCBhbmQgYWxs IHRoZSByZXN0LiBCeSBkZWZhdWx0LCBDLUtlcm1pdCBpbnZva2VzIFNTSCB3aXRoICItZQorICAg bm9uZSIsIHdoaWNoIGRpc2FibGVzIHRoZSBzc2ggZXNjYXBlIGNoYXJhY3RlciBhbmQgbWFrZXMg dGhlIGNvbm5lY3Rpb24KKyAgIHRyYW5zcGFyZW50IGZvciBwdXJwb3NlcyBvZiBmaWxlIHRyYW5z ZmVyLiBZb3UgY2FuLCBob3dldmVyLCBjaGFuZ2UgdGhlCisgICBTU0ggaW52b2NhdGlvbiB0byB3 aGF0ZXZlciBlbHNlIHlvdSBtaWdodCBuZWVkIChhbiBleHBsaWNpdCBwYXRoLAorICAgYWRkaXRp b25hbCBjb21tYW5kLWxpbmUgYXJndW1lbnRzLCBldGMpIHdpdGg6CisKKyAgIFNFVCBTU0ggQ09N TUFORCB0ZXh0CisgICAgICAgICAgU3BlY2lmaWVzIHRoZSBzeXN0ZW0gY29tbWFuZCB0aGF0IEtl cm1pdCdzIFNTSCBjb21tYW5kIHNob3VsZAorICAgICAgICAgIHVzZSB0byBpbnZva2UgdGhlIGV4 dGVybmFsIFNTSCBjbGllbnQuIFVzZSB0aGlzIGNvbW1hbmQgdG8KKyAgICAgICAgICBzdXBwbHkg YSBzcGVjaWZpYyBwYXRoIG9yIGFsdGVybmF0aXZlIG5hbWUsIG9yIHRvIGluY2x1ZGUKKyAgICAg ICAgICBkaWZmZXJlbnQgb3IgbW9yZSBjb21tYW5kLWxpbmUgb3B0aW9ucy4KKworICAgSW4gbW9z dCBjYXNlcywgdGhlc2UgY29ubmVjdGlvbnMgd29yayBxdWl0ZSB3ZWxsLiBUaGV5IGNhbiBiZSBz Y3JpcHRlZAorICAgbGlrZSBhbnkgb3RoZXIgY29ubmVjdGlvbiwgYW5kIGZpbGUgdHJhbnNmZXIg Z29lcyBhcyBmYXN0IGFzLCBvciBmYXN0ZXIKKyAgIHRoYW4sIG9uIGEgcmVndWxhciBUZWxuZXQg Y29ubmVjdGlvbi4gSW4gc29tZSBjYXNlcywgaG93ZXZlciwgdGhlCisgICB1bmRlcmx5aW5nIHBz ZXVkb3Rlcm1pbmFsIGRyaXZlciBpcyBhIGxpbWl0aW5nIGZhY3RvciwgcmVzdWx0aW5nIGluCisg ICBzbG93IG9yIGZhaWxlZCBmaWxlIHRyYW5zZmVycy4gU29tZXRpbWVzIHlvdSBjYW4gd29yayBh cm91bmQgc3VjaAorICAgcHJvYmxlbXMgYnkgcmVkdWNpbmcgdGhlIEtlcm1pdCBwYWNrZXQgbGVu Z3RoLiBOb3RlIHRoYXQgS2VybWl0IGRvZXMKKyAgIG5vdCBjb25zaWRlciBTU0ggY29ubmVjdGlv bnMgdG8gYmUgcmVsaWFibGUsIHNvIGl0IGRvZXMgbm90IG9mZmVyIHRvCisgICB1c2Ugc3RyZWFt aW5nIGluIEtlcm1pdCBwcm90b2NvbCB0cmFuc2ZlcnMgKGJ1dCB5b3UgY2FuIGZvcmNlIGl0IHdp dGgKKyAgIFNFVCBSRUxJQUJMRSBvciBTRVQgU1RSRUFNSU5HIGlmIHlvdSB3aXNoKS4KKworICAg VGhlIFNTSCBjb21tYW5kIGlzIGxpa2UgdGhlIFRFTE5FVCBjb21tYW5kOiBpdCBlbnRlcnMgQ09O TkVDVCBtb2RlCisgICBhdXRvbWF0aWNhbGx5IHdoZW4gdGhlIGNvbm5lY3Rpb24gaXMgbWFkZS4g VGhlcmVmb3JlLCB0byBzY3JpcHQgYW4gU1NICisgICBjb25uZWN0aW9uLCB1c2U6CisKKyAgc2V0 IGhvc3QgL3B0eSBzc2ggLWUgbm9uZSBbIG90aGVyLW9wdGlvbnMgXSBob3N0CisgIGlmIGZhaWwg Li4uCisKKyAgIHRvIG1ha2UgdGhlIGNvbm5lY3Rpb24uCisKKyAgIEhlcmUncyBhIHNlcXVlbmNl IHRoYXQgY2FuIGJlIHVzZWQgdG8gbWFrZSBhIGNvbm5lY3Rpb24gdG8gYSBnaXZlbiBob3N0Cisg ICB1c2luZyBUZWxuZXQgaWYgdGhlIGhvc3QgYWNjZXB0cyBpdCwgb3RoZXJ3aXNlIFNTSDoKKwor ICBpZiBub3QgZGVmaW5lZCBcJTEgZXhpdCAxIFVzYWdlOiBcJTAgaG9zdAorICBzZXQgcXVpZXQg b24KKyAgc2V0IGhvc3QgXCUxIDIzIC90ZWxuZXQKKyAgaWYgZmFpbCB7CisgICAgICBzZXQgaG9z dCAvcHR5IHNzaCAtbCBcbSh1c2VyKSAtZSBub25lIFwlMQorICAgICAgaWYgZmFpbCBleGl0IDEg XCUxOiBUZWxuZXQgYW5kIFNTSCBib3RoIGZhaWwKKyAgICAgIGVjaG8gU1NIIGNvbm5lY3Rpb24g dG8gXCUxIHN1Y2Nlc3NmdWwKKyAgfSBlbHNlIHsKKyAgICAgIGVjaG8gVGVsbmV0IGNvbm5lY3Rp b24gdG8gXCUxIHN1Y2Nlc3NmdWwKKyAgfQorCisgICBJbiBTU0ggdjIsIGl0IGlzIHBvc3NpYmxl IHRvIG1ha2UgYW4gU1NIIGNvbm5lY3Rpb24gZGlyZWN0IHRvIGEgS2VybWl0CisgICBzZXJ2ZXIg c3lzdGVtIGlmIHRoZSBob3N0IGFkbWluaXN0cmF0b3IgaGFzIGNvbmZpZ3VyZWQgdGhlIFNTSCBz ZXJ2ZXIKKyAgIHRvIGFsbG93IHRoaXM7IFsxNzldQ0xJQ0sgSEVSRSBmb3IgZGV0YWlscy4KKwor ICAgU2luY2UgS2VybWl0IHVzZXMgZXh0ZXJuYWwgc3NoIGNsaWVudCBzb2Z0d2FyZSwgYW5kIHNp bmNlIHRoZXJlIGFyZQorICAgZGlmZmVyZW50IHNzaCBjbGllbnRzIChhbmQgZGlmZmVyZW50IHJl bGVhc2VzIG9mIGVhY2ggb25lKSwgdGhlIGV4YWN0CisgICBjb21tYW5kIHRvIGJlIHVzZWQgdG8g bWFrZSBhbiBTU0gvS2VybWl0IGNvbm5lY3Rpb24gY2FuIHZhcnkuIEhlcmUgaXMKKyAgIHRoZSBj b21tYW5kIGZvciB0aGUgT3BlblNTSCAzLjAuMnAxIGNsaWVudDoKKworc2V0IGhvc3QgL3BpcGUg c3NoIC1lIG5vbmUgWyAtbCB1c2VybmFtZSBdIC1UIC1zIGhvc3RuYW1lIGtlcm1pdAorCisgICBF eGFtcGxlOgorCitzZXQgaG9zdCAvcGlwZSBzc2ggLWUgbm9uZSAtbCBvbGdhIC1UIC1zIGhxLnh5 emNvcnAuY29tIGtlcm1pdAorCisgICBUaGUgU1NIIGNsaWVudCBtaWdodCBvciBtaWdodCBub3Qg cHJvbXB0IHlvdSBmb3IgYSBwYXNzd29yZCBvciBvdGhlcgorICAgaW5mb3JtYXRpb24gYmVmb3Jl IGl0IG1ha2VzIHRoZSBjb25uZWN0aW9uOyB0aGlzIGRlcGVuZHMgb24geW91ciBTU0gKKyAgIGNv bmZpZ3VyYXRpb24gKHlvdXIgcHVibGljIGFuZCBwcml2YXRlIGtleXMsIHlvdXIgYXV0aG9yaXpl ZCBob3N0cworICAgZmlsZSwgZXRjKS4gSGVyZSdzIGEgYnJpZWYgc3lub3BzaXMgb2YgdGhlIE9w ZW5TU0ggY2xpZW50IGNvbW1hbmQKKyAgIHN5bnRheCAoIm1hbiBzc2giIGZvciBkZXRhaWxzKToK KworICAgLWUgbm9uZQorICAgICAgICAgIFRoaXMgdGVsbHMgdGhlIFNTSCBjbGllbnQgdG8gdXNl IG5vIGVzY2FwZSBjaGFyYWN0ZXIuIFNpbmNlIHdlCisgICAgICAgICAgd2lsbCBiZSB0cmFuc2Zl cnJpbmcgZmlsZXMgYWNyb3NzIHRoZSBjb25uZWN0aW9uLCB3ZSBkb24ndCB3YW50CisgICAgICAg ICAgdGhlIGNvbm5lY3Rpb24gdG8gc3VkZGVubHkgYmxvY2sgYmVjYXVzZSBzb21lIGNoYXJhY3Rl ciBpbiB0aGUKKyAgICAgICAgICBkYXRhLgorCisgICAtbCB1c2VybmFtZQorICAgICAgICAgIFRo aXMgaXMgdGhlIHVzZXJuYW1lIG9uIHRoZSByZW1vdGUgaG9zdC4gWW91IGNhbiBvbWl0IHRoZSAt bAorICAgICAgICAgIG9wdGlvbiBhbmQgaXRzIGFyZ3VtZW50IGlmIHlvdXIgbG9jYWwgYW5kIHJl bW90ZSB1c2VybmFtZXMgYXJlCisgICAgICAgICAgdGhlIHNhbWUuIElmIHRoZXkgYXJlIGRpZmZl cmVudCwgeW91IG11c3Qgc3VwcGx5IHRoZSByZW1vdGUKKyAgICAgICAgICB1c2VybmFtZS4KKwor ICAgLVQKKyAgICAgICAgICBUaGlzIHRlbGxzIHRoZSBTU0ggY2xpZW50IHRvIHRlbGwgdGhlIFNT SCBzZXJ2ZXIgbm90IHRvIGFsbG9jYXRlCisgICAgICAgICAgYSBwc2V1ZG90ZXJtaW5hbC4gV2Ug YXJlIG5vdCBtYWtpbmcgYSB0ZXJtaW5hbCBjb25uZWN0aW9uLCB3ZQorICAgICAgICAgIGRvbid0 IG5lZWQgYSB0ZXJtaW5hbCwgYW5kIGluIGZhY3QgaWYgYSB0ZXJtaW5hbCB3ZXJlIGFsbG9jYXRl ZAorICAgICAgICAgIG9uIHRoZSByZW1vdGUgZW5kLCB0aGUgY29ubmVjdGlvbiB3b3VsZCBub3Qg d29yay4KKworICAgLXMgLi4uIGtlcm1pdAorICAgICAgICAgIFRoaXMgdGVsbHMgdGhlIFNTSCBj bGllbnQgdG8gdGVsbCB0aGUgU1NIIHNlcnZlciB0byBzdGFydCB0aGUKKyAgICAgICAgICBzcGVj aWZpZWQgc3Vic3lzdGVtICgia2VybWl0Iikgb25jZSB0aGUgY29ubmVjdGlvbiBpcyBtYWRlLiBU aGUKKyAgICAgICAgICBzdWJzeXN0ZW0gbmFtZSBjb21lcyBhZnRlciB0aGUgaG9zdG5hbWUuCisK KyAgIGhvc3RuYW1lCisgICAgICAgICAgVGhlIElQIGhvc3QgbmFtZSBvciBhZGRyZXNzIG9mIHRo ZSBkZXNpcmVkIGhvc3QuCisKKyAgIFlvdSBtaWdodCB3YW50IHRvIGluY2x1ZGUgb3RoZXIgb3Ig YWRkaXRpb25hbCBzc2ggY29tbWFuZC1saW5lIG9wdGlvbnM7CisgICAibWFuIHNzaCIgZXhwbGFp bnMgd2hhdCB0aGV5IGFyZS4gSGVyZSBhcmUgc29tZSBleGFtcGxlcyBmb3IgdGhlCisgICBPcGVu U1NIIDMuMC4ycDEgY2xpZW50OgorCisgICAtb0NsZWFyQWxsRm9yd2FyZGluZ3MgeWVzCisgICAt b0ZvcndhcmRBZ2VudCBubworICAgLW9Gb3J3YXJkWDExIG5vCisgICAtb0ZhbGxiYWNrVG9Sc2gg bm8KKyAgICAgICAgICBUaGVzZSBlbnN1cmUgdGhhdCBhIHNlY3VyZSBjb25uZWN0aW9uIGlzIHVz ZWQgYW5kIHRoYXQgdGhlCisgICAgICAgICAgY29ubmVjdGlvbiB1c2VkIGZvciBmaWxlIHRyYW5z ZmVyIGlzIG5vdCBhbHNvIHVzZWQgZm9yCisgICAgICAgICAgZm9yd2FyZGluZyBvdGhlciB0aGlu Z3MgdGhhdCBtaWdodCBiZSBzcGVjaWZpZWQgaW4gdGhlCisgICAgICAgICAgc3NoX2NvbmZpZyBm aWxlLgorCisgICAtb1Byb3RvY29sIDIKKyAgICAgICAgICAoaS5lLiBTU0ggdjIpIEVuc3VyZXMg dGhhdCB0aGUgbmVnb3RpYXRlZCBwcm90b2NvbCBzdXBwb3J0cworICAgICAgICAgIHN1YnN5c3Rl bXMuCisKKyAgIE9uY2UgeW91IGhhdmUgYW4gU1NIIGNvbm5lY3Rpb24gdG8gYSBLZXJtaXQgc2Vy dmVyLCBpdCdzIGp1c3QgbGlrZSBhbnkKKyAgIG90aGVyIGNvbm5lY3Rpb24gdG8gYSBLZXJtaXQg c2VydmVyIChhbmQgdmVyeSBzaW1pbGFyIHRvIGEgY29ubmVjdGlvbgorICAgdG8gYW4gRlRQIHNl cnZlcikuIFlvdSBnaXZlIHRoZSBjbGllbnQgZmlsZSB0cmFuc2ZlciBhbmQgbWFuYWdlbWVudAor ICAgY29tbWFuZHMgZm9yIHRoZSBzZXJ2ZXIsIGFuZCB0aGUgc2VydmVyIGV4ZWN1dGVzIHRoZW0u IE9mIGNvdXJzZSB5b3UKKyAgIGNhbiBhbHNvIGdpdmUgdGhlIGNsaWVudCBhbnkgb3RoZXIgY29t bWFuZHMgeW91IHdpc2guCisKKyAgIFsgWzE4MF1TU0ggS2VybWl0IFNlcnZlciBTdWJzeXN0ZW0g XSBbIFsxODFdS2VybWl0IDk1IEJ1aWx0LWluIFNTSAorICAgQ2xpZW50IF0KKworMi4yLiBIVFRQ IENvbm5lY3Rpb25zCisKKyAgIEh5cGVydGV4dCBUcmFuc2ZlciBQcm90b2NvbCwgb3IgSFRUUCwg aXMgdGhlIGFwcGxpY2F0aW9uIHByb3RvY29sIG9mCisgICB0aGUgV29ybGQgV2lkZSBXZWIgKFdX VyksIHVzZWQgYmV0d2VlbiBXZWIgYnJvd3NlcnMgKGNsaWVudHMpIGFuZCBXZWIKKyAgIHNlcnZl cnMuIEl0IGFsbG93cyBhIGNsaWVudCB0byBnZXQgZmlsZXMgZnJvbSB3ZWJzaXRlcywgdXBsb2Fk IGZpbGVzIHRvCisgICB3ZWJzaXRlcywgZGVsZXRlIGZpbGVzIGZyb20gd2Vic2l0ZXMsIGdldCBp bmZvcm1hdGlvbiBhYm91dCB3ZWJzaXRlCisgICBkaXJlY3RvcmllcyBhbmQgZmlsZXMsIGFuZCBp bnRlcmFjdCB3aXRoIHNlcnZlci1zaWRlIENHSSBzY3JpcHRzLgorICAgQy1LZXJtaXQgaW5jbHVk ZXMgYW4gSFRUUCBjbGllbnQgY2FwYWJsZSBvZiBib3RoIGNsZWFyLXRleHQgYW5kIHNlY3VyZQor ICAgSFRUUCBjb25uZWN0aW9ucywgdGhhdCBjYW4gZG8gYWxsIHRoZXNlIHRhc2tzIGFuZCBjYW4g YmUgYXV0b21hdGVkCisgICB0aHJvdWdoIHRoZSBLZXJtaXQgc2NyaXB0aW5nIGxhbmd1YWdlLgor CisgICBBbHRob3VnaCBDLUtlcm1pdCA3LjAgY291bGQgbWFrZSBIVFRQIGNvbm5lY3Rpb25zIHRv IFdlYiBzZXJ2ZXJzLCBpdAorICAgY291bGQgZG8gc28gb25seSB3aGVuIG5vIG90aGVyIGNvbm5l Y3Rpb24gd2FzIG9wZW4sIGFuZCB0aGUgcHJvY2VkdXJlCisgICB3YXMgc29tZXdoYXQgYXdrd2Fy ZC4gQy1LZXJtaXQgOC4wIGltcHJvdmVzIG1hdHRlcnMgYnk6CisKKyAgICAgKiBBbGxvd2luZyBh biBIVFRQIGNvbm5lY3Rpb24gdG8gYmUgb3BlbiBhdCB0aGUgc2FtZSB0aW1lIGFzIGEKKyAgICAg ICByZWd1bGFyIFNFVCBMSU5FIG9yIFNFVCBIT1NUIGNvbm5lY3Rpb24sIGFuZCBhbHNvIGF0IHRo ZSBzYW1lIHRpbWUKKyAgICAgICBhcyBhbiBGVFAgY29ubmVjdGlvbiAoWzE4Ml1TZWN0aW9uIDMp OworICAgICAqIFVwZ3JhZGluZyB0aGUgSFRUUCBwcm90b2NvbCBsZXZlbCBmcm9tIDEuMCB0byAx LjEsIHRodXMgYWxsb3dpbmcKKyAgICAgICBmb3IgcGVyc2lzdGVudCBjb25uZWN0aW9ucywgaW4g d2hpY2ggYSBzZXJpZXMgb2YgY29tbWFuZHMgY2FuIGJlCisgICAgICAgc2VudCBvbiB0aGUgc2Ft ZSBjb25uZWN0aW9uLCByYXRoZXIgdGhhbiBvbmx5IG9uZSBhcyBpbiBIVFRQIDEuMAorICAgICAg IChhbmQgQy1LZXJtaXQgNy4wKTsKKyAgICAgKiBQcm92aWRpbmcgZm9yICJvbmUtc2hvdCIgVVJM LWRyaXZlbiBIVFRQIG9wZXJhdGlvbnMgc3VjaCBhcyBHRVQgb3IKKyAgICAgICBQVVQuCisgICAg ICogUHJvdmlkaW5nIGEgZGlzdGluY3QgSFRUUCBjb21tYW5kLWxpbmUgcGVyc29uYWxpdHkuCisK KyAgIFBlcnNpc3RlbnQgSFRUUCBjb25uZWN0aW9ucyBhcmUgbWFuYWdlZCB3aXRoIHRoZSBmb2xs b3dpbmcgY29tbWFuZHM6CisKKyAgIEhUVFAgWyBzd2l0Y2hlcyBdIE9QRU4gWyBzZWN1cml0eS1v cHRpb25zIF0gaG9zdC1vci11cmwgWyBwb3J0IF0KKyAgICAgICAgICBPcGVucyBhIHBlcnNpc3Rl bnQgY29ubmVjdGlvbiB0byB0aGUgc3BlY2lmaWVkIGhvc3QgKElQIGhvc3QKKyAgICAgICAgICBu YW1lIG9yIGFkZHJlc3MpIG9uIHRoZSBzcGVjaWZpZWQgcG9ydC4gSWYgYW55IHN3aXRjaGVzCisg ICAgICAgICAgKG9wdGlvbnMsIGxpc3RlZCBpbiB0aGUgbmV4dCBzZWN0aW9uKSBhcmUgaW5jbHVk ZWQsIHRoZWlyIHZhbHVlcworICAgICAgICAgIGFyZSBzYXZlZCBhbmQgdXNlZCBmb3IgYWxsIHN1 YnNlcXVlbnQgSFRUUCBhY3Rpb24gY29tbWFuZHMgb24KKyAgICAgICAgICB0aGUgc2FtZSBjb25u ZWN0aW9uLiBJZiBubyBwb3J0IGlzIHNwZWNpZmllZCwgSFRUUCAoODApIGlzIHVzZWQuCisgICAg ICAgICAgQSBVbmlmb3JtIFJlc291cmNlIExvY2F0b3IgKFVSTCwgWzE4M11SRkMgMTczOCkgY2Fu IGJlIGdpdmVuCisgICAgICAgICAgaW5zdGVhZCBvZiBhIGhvc3RuYW1lIChvciBhZGRyZXNzKSBh bmQgcG9ydCAoYnV0IHRoZSBVUkwgY2FuIG5vdAorICAgICAgICAgIGluY2x1ZGUgYSBkaXJlY3Rv cnkvZmlsZSBwYXRoKS4gVGhlIHNlY3VyaXR5IG9wdGlvbnMgYXJlCisgICAgICAgICAgZXhwbGFp bmVkIFsxODRdYmVsb3cuIFRoZSBIVFRQIE9QRU4gY29tbWFuZCByZXBsYWNlcyB0aGUKKyAgICAg ICAgICBDLUtlcm1pdCA3LjAgU0VUIEhPU1QgaG9zdG5hbWUgSFRUUCBjb21tYW5kLCB3aGljaCBu byBsb25nZXIKKyAgICAgICAgICB3b3JrcyB3aXRoIEhUVFAgR0VUIGFuZCByZWxhdGVkIGNvbW1h bmRzLgorCisgICBIVFRQIENMT1NFCisgICAgICAgICAgQ2xvc2VzIGFueSBvcGVuIEhUVFAgY29u bmVjdGlvbiBhbmQgY2xlYXJzIGFueSBzYXZlZCBzd2l0Y2gKKyAgICAgICAgICB2YWx1ZXMuCisK KyAgIEEgVVJMIHN0YXJ0cyB3aXRoIGEgcHJvdG9jb2wgbmFtZSwgd2hpY2ggbXVzdCBiZSBodHRw IG9yIGh0dHBzIGluIHRoaXMKKyAgIGNhc2U7IG9wdGlvbmFsbHkgaW5jbHVkZXMgYSB1c2VybmFt ZSBhbmQgcGFzc3dvcmQ7IGFuZCBtdXN0IGNvbnRhaW4gYQorICAgaG9zdCBuYW1lIG9yIGFkZHJl c3M6CisKKyAgcHJvdG9jb2w6Ly9bdXNlclsucGFzc3dvcmRdXUBob3N0Wzpwb3J0XVtVUkldCisK KyAgIEhUVFAgaXMgSHlwZXJ0ZXh0IFRyYW5zZmVyIFByb3RvY29sLiBIVFRQUyBpcyB0aGUgc2Vj dXJlIChTU0wvVExTKQorICAgdmVyc2lvbiBvZiBIVFRQLiBUaGUgVENQIHNlcnZpY2UgcG9ydCBp cyBkZXJpdmVkIGZyb20gdGhlIHByb3RvY29sCisgICBwcmVmaXggKHNvIG5vcm1hbGx5IHRoZSAi OnBvcnQiIGZpZWxkIGlzIG9taXR0ZWQpLiBUaHVzIHRoZSBVUkwKKyAgIHByb3RvY29sIG5hbWUg c3BlY2lmaWVzIGEgZGVmYXVsdCBUQ1Agc2VydmljZSBwb3J0IGFuZCB0aGUgVVJMIHVzZXIgYW5k CisgICBwYXNzd29yZCBmaWVsZHMgY2FuIHRha2UgdGhlIHBsYWNlIG9mIHRoZSAvVVNFUiBhbmQg L1BBU1NXT1JEIHN3aXRjaGVzCisgICAoWzE4NV1TZWN0aW9uIDIuMi4xKS4gVGhlIG9wdGlvbmFs IFVSSSBpcyBhICJjb21wYWN0IHN0cmluZyBvZgorICAgY2hhcmFjdGVycyBmb3IgaWRlbnRpZnlp bmcgYW4gYWJzdHJhY3Qgb3IgcGh5c2ljYWwgcmVzb3VyY2UiIChbMTg2XVJGQworICAgMjM5Niks IHN1Y2ggYXMgYSBmaWxlLiBJdCBtdXN0IGJlZ2luIHdpdGggYSBzbGFzaCAoLyk7IGlmIHRoZSBV UkkgaXMKKyAgIG9taXR0ZWQsICIvIiBpcyBzdXBwbGllZC4gRXhhbXBsZXM6CisKKyAgIGh0dHAg b3BlbiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS8KKyAgICAgICAgICBFcXVpdmFsZW50IHRvIGh0 dHAgb3BlbiB3d3cuY29sdW1iaWEuZWR1IG9yIGh0dHAgb3BlbgorICAgICAgICAgIHd3dy5jb2x1 bWJpYS5lZHUgaHR0cC4KKworICAgaHR0cCBvcGVuIGh0dHBzOi8vb2xnYS5zZWNyZXRAd3d3MS54 eXpjb3JwLmNvbS8KKyAgICAgICAgICBFcXVpdmFsZW50IHRvIGh0dHAgL3VzZXI6b2xnYSAvcGFz czpzZWNyZXQgb3BlbiB3d3cxLnh5emNvcnAuY29tCisgICAgICAgICAgaHR0cHMuCisKKyAgIFBl cnNpc3RlbmNlIGlzIGFjY29tcGxpc2hlZCB1bmlsYXRlcmFsbHkgYnkgQy1LZXJtaXQgOC4wLiBB biBIVFRQIDEuMAorICAgc2VydmVyIGNsb3NlcyB0aGUgY29ubmVjdGlvbiBhZnRlciBlYWNoIGFj dGlvbi4gQWx0aG91Z2ggSFRUUCAxLjEKKyAgIGFsbG93cyBtdWx0aXBsZSBhY3Rpb25zIG9uIHRo ZSBzYW1lIGNvbm5lY3Rpb24sIGFuIEhUVFAgMS4xIHNlcnZlcgorICAgdGVuZHMgdG8gY2xvc2Ug dGhlIGNvbm5lY3Rpb24gaWYgaXQgaXMgaWRsZSBmb3IgbW9yZSB0aGFuIGEgZmV3CisgICBzZWNv bmRzLCB0byBkZWZlbmQgaXRzZWxmIGFnYWluc3QgZGVuaWFsLW9mLXNlcnZpY2UgYXR0YWNrcy4g QnV0IHdoZW4KKyAgIHlvdSB1c2UgS2VybWl0J3MgSFRUUCBPUEVOIGNvbW1hbmQgdG8gY3JlYXRl IGEgY29ubmVjdGlvbiwgS2VybWl0CisgICByZW9wZW5zIGl0IGF1dG9tYXRpY2FsbHkgKGlmIG5l Y2Vzc2FyeSkgZm9yIGVhY2ggSFRUUCBhY3Rpb24gdW50aWwgeW91CisgICBjbG9zZSBpdCB3aXRo IEhUVFAgQ0xPU0UsIHJlZ2FyZGxlc3Mgb2YgdGhlIHNlcnZlcidzIEhUVFAgcHJvdG9jb2wKKyAg IHZlcnNpb24sIG9yIGhvdyBtYW55IHRpbWVzIGl0IGNsb3NlcyB0aGUgY29ubmVjdGlvbi4KKwor ICAgRmlyZXdhbGxzIGNhbiBiZSBuZWdvdGlhdGVkIHRocm91Z2ggcHJveGllcyB3aXRoIHRoZSBm b2xsb3dpbmcKKyAgIGNvbW1hbmRzOgorCisgICBTRVQgVENQIEhUVFAtUFJPWFkgWyBob3N0Wzpw b3J0XSBdCisgICAgICAgICAgSWYgYSBob3N0IChieSBob3N0bmFtZSBvciBJUCBhZGRyZXNzKSBp cyBzcGVjaWZpZWQsIEtlcm1pdCB1c2VzCisgICAgICAgICAgaXQgYXMgYSBwcm94eSBzZXJ2ZXIg d2hlbiBhdHRlbXB0aW5nIG91dGdvaW5nIFRDUCBjb25uZWN0aW9ucyAtLQorICAgICAgICAgIG5v dCBvbmx5IEhUVFAgY29ubmVjdGlvbnMsIGJ1dCBhbGwgVENQL0lQIGNvbm5lY3Rpb25zLCBUZWxu ZXQKKyAgICAgICAgICBhbmQgRlRQIGluY2x1ZGVkLiBUaGlzIGFsbG93cyBLZXJtaXQgdG8gYWRh cHQgdG8gdGhlIEhUVFAKKyAgICAgICAgICBmaXJld2FsbCBwZW5ldHJhdGlvbiBtZXRob2QgKGFz IG9wcG9zZWQgdG8gb3RoZXIgbWV0aG9kcyBzdWNoIGFzCisgICAgICAgICAgU09DS1M0KS4gSWYg bm8gaG9zdG5hbWUgb3IgaXAtYWRkcmVzcyBpcyBzcGVjaWZpZWQsIGFueQorICAgICAgICAgIHBy ZXZpb3VzbHkgc3BlY2lmaWVkIFByb3h5IHNlcnZlciBpcyByZW1vdmVkLiBJZiBubyBwb3J0IG51 bWJlcgorICAgICAgICAgIGlzIHNwZWNpZmllZCwgdGhlICJodHRwIiBzZXJ2aWNlIGlzIHVzZWQu IFRoaXMgY29tbWFuZCBtdXN0IGJlCisgICAgICAgICAgZ2l2ZW4gYmVmb3JlIHRoZSBIVFRQIE9Q RU4gY29tbWFuZCBpZiBhIHByb3h5IGlzIHRvIGJlIHVzZWQgb3IKKyAgICAgICAgICBjYW5jZWxl ZC4KKworICAgSFRUUCBbIHN3aXRjaGVzIF0gQ09OTkVDVCBob3N0Wzpwb3J0XQorICAgICAgICAg IEluc3RydWN0cyB0aGUgSFRUUCBzZXJ2ZXIgdG8gYWN0IGFzIGEgcHJveHksIGVzdGFibGlzaGlu ZyBhCisgICAgICAgICAgY29ubmVjdGlvbiB0byB0aGUgc3BlY2lmaWVkIGhvc3QgKElQIGhvc3Ru YW1lIG9yIGFkZHJlc3MpIG9uIHRoZQorICAgICAgICAgIGdpdmVuIHBvcnQgKDgwID0gSFRUUCBi eSBkZWZhdWx0KSBhbmQgdG8gcmVkaXJlY3QgYWxsIGRhdGEKKyAgICAgICAgICB0cmFuc21pdHRl ZCBiZXR3ZWVuIEtlcm1pdCBhbmQgaXRzZWxmIHRvIHRoZSBnaXZlbiBob3N0IGZvciB0aGUKKyAg ICAgICAgICBsaWZlIG9mIHRoZSBjb25uZWN0aW9uLiBUaGlzIGNvbW1hbmQgaXMgdG8gYmUgdXNl ZCBvbmx5IGZvcgorICAgICAgICAgIGRlYnVnZ2luZyBIVFRQIHByb3h5IGNvbm5lY3Rpb25zLiBJ ZiBhIHByb3h5IGNvbm5lY3Rpb24gaXMKKyAgICAgICAgICByZXF1aXJlZCwgaW5zdHJ1Y3QgS2Vy bWl0IHRvIHVzZSB0aGUgcHJveHkgd2l0aCB0aGUgU0VUIFRDUAorICAgICAgICAgIEhUVFAtUFJP WFkgY29tbWFuZC4KKworMi4yLjEuIEhUVFAgQ29tbWFuZCBTd2l0Y2hlcworCisgICBIVFRQIHN3 aXRjaGVzLCBsaWtlIGFsbCBvdGhlciBzd2l0Y2hlcywgYXJlIG9wdGlvbmFsLiBXaGVuIEhUVFAK KyAgIHN3aXRjaGVzIGFyZSBpbmNsdWRlZCB3aXRoIHRoZSBIVFRQIE9QRU4gY29tbWFuZCwgdGhl eSBhcHBseQorICAgYXV0b21hdGljYWxseSB0byB0aGlzIGFuZCBhbGwgc3Vic2VxdWVudCBIVFRQ IGFjdGlvbnMgKEdFVCwgUFVULCAuLi4pCisgICBvbiB0aGUgc2FtZSBjb25uZWN0aW9uIHVudGls IGFuIEhUVFAgQ0xPU0UgY29tbWFuZCBpcyBnaXZlbi4gU28gaWYgeW91CisgICBpbmNsdWRlIHN3 aXRjaGVzIChvciB0aGUgZXF1aXZhbGVudCBVUkwgZmllbGRzLCBzdWNoIGFzIHVzZXIgYW5kCisg ICBwYXNzd29yZCkgaW4gdGhlIEhUVFAgT1BFTiBjb21tYW5kLCB5b3UgY2FuIG9taXQgdGhlbSBm cm9tIHN1YnNlcXVlbnQKKyAgIGNvbW1hbmRzIG9uIHRoZSBzYW1lIGNvbm5lY3Rpb24uIElmIHRo ZSBjb25uZWN0aW9uIGhhcyBjbG9zZWQgc2luY2UKKyAgIHlvdXIgbGFzdCBjb21tYW5kLCBpdCBp cyBhdXRvbWF0aWNhbGx5IHJlb3BlbmVkIHdpdGggdGhlIHNhbWUgb3B0aW9ucy4KKworICAgSWYg eW91IGluY2x1ZGUgc3dpdGNoZXMgd2l0aCBhbiBIVFRQIGFjdGlvbiBjb21tYW5kIChzdWNoIGFz IEdFVCBvcgorICAgUFVUKSwgdGhleSBhcHBseSBvbmx5IHRvIHRoYXQgY29tbWFuZC4KKworICAg L1VTRVI6bmFtZQorICAgICAgICAgIFRvIGJlIHVzZWQgaW4gY2FzZSBhIHBhZ2UgcmVxdWlyZXMg YSB1c2VybmFtZSBmb3IgYWNjZXNzLiBUaGUKKyAgICAgICAgICB1c2VybmFtZSBpcyBzZW50IHdp dGggcGFnZSByZXF1ZXN0cy4gSWYgaXQgaXMgZ2l2ZW4gd2l0aCB0aGUKKyAgICAgICAgICBPUEVO IGNvbW1hbmQgaXQgaXMgc2F2ZWQgdW50aWwgbmVlZGVkLiBJZiBhIHVzZXJuYW1lIGlzIGluY2x1 ZGVkCisgICAgICAgICAgaW4gYSBVUkwsIGl0IG92ZXJyaWRlcyB0aGUgdXNlcm5hbWUgZ2l2ZW4g aW4gdGhlIHN3aXRjaC4KKyAgICAgICAgICBDQVVUSU9OOiBVc2VybmFtZSBhbmQgcGFzc3dvcmQg KGFuZCBhbGwgb3RoZXIgaW5mb3JtYXRpb24sCisgICAgICAgICAgaW5jbHVkaW5nIGNyZWRpdCBj YXJkIG51bWJlcnMgYW5kIG90aGVyIG1hdGVyaWFsIHRoYXQgeW91IG1pZ2h0CisgICAgICAgICAg cHJlZmVyIHRvIHByb3RlY3QgZnJvbSBwdWJsaWMgdmlldykgYXJlIHNlbnQgYWNyb3NzIHRoZSBu ZXR3b3JrCisgICAgICAgICAgaW4gY2xlYXIgdGV4dCBvbiByZWd1bGFyIEhUVFAgY29ubmVjdGlv bnMsIGJ1dCBhdXRoZW50aWNhdGlvbiBpcworICAgICAgICAgIHBlcmZvcm1lZCBzZWN1cmVseSBv biBIVFRQUyBjb25uZWN0aW9ucy4KKworICAgL1BBU1NXT1JEOnRleHQKKyAgICAgICAgICBUbyBi ZSB1c2VkIGluIGNhc2UgYSB3ZWIgcGFnZSByZXF1aXJlcyBhIHBhc3N3b3JkIGZvciBhY2Nlc3Mu CisgICAgICAgICAgVGhlIHBhc3N3b3JkIGlzIHNlbnQgd2l0aCBwYWdlIHJlcXVlc3RzLiBJZiBp dCBpcyBnaXZlbiB3aXRoIHRoZQorICAgICAgICAgIE9QRU4gY29tbWFuZCBpdCBpcyBzYXZlZCB1 bnRpbCBuZWVkZWQuIElmIGEgcGFzc3dvcmQgaXMgZ2l2ZW4gaW4KKyAgICAgICAgICBhIFVSTCwg aXQgb3ZlcnJpZGVzIHRoZSBvbmUgZ2l2ZW4gaGVyZS4gQ0FVVElPTjogKHNhbWUgYXMgZm9yCisg ICAgICAgICAgL1VTRVI6KS4KKworICAgL0FHRU5UOnVzZXItYWdlbnQKKyAgICAgICAgICBJZGVu dGlmaWVzIHRoZSBjbGllbnQgdG8gdGhlIHNlcnZlci4gT3ZlcnJpZGVzIHRoZSBkZWZhdWx0IGFn ZW50CisgICAgICAgICAgc3RyaW5nLCB3aGljaCBpcyAiQy1LZXJtaXQiIChmb3IgQy1LZXJtaXQp IG9yICJLZXJtaXQtOTUiIChmb3IKKyAgICAgICAgICBLZXJtaXQgOTUpLgorCisgICAvQVJSQVk6 YXJyYXktZGVzaWduYXRvcgorICAgICAgICAgIFRlbGxzIEtlcm1pdCB0byBzdG9yZSB0aGUgcmVz cG9uc2UgaGVhZGVycyBpbiB0aGUgZ2l2ZW4gYXJyYXksCisgICAgICAgICAgb25lIGxpbmUgcGVy IGVsZW1lbnQuIFRoZSBhcnJheSBuZWVkIG5vdCBiZSBkZWNsYXJlZCBpbiBhZHZhbmNlLgorICAg ICAgICAgIEV4YW1wbGU6IC9hcnJheTomYS4KKworICAgL1RPU0NSRUVOCisgICAgICAgICAgVGVs bHMgS2VybWl0IHRvIGRpc3BsYXkgYW55IHJlc3BvbnNlIHRleHQgb24gdGhlIHNjcmVlbi4gSXQK KyAgICAgICAgICBhcHBsaWVzIGluZGVwZW5kZW50bHkgb2YgdGhlIG91dHB1dCBmaWxlIHNwZWNp ZmljYXRpb247IHRodXMgaXQKKyAgICAgICAgICBpcyBwb3NzaWJsZSB0byBoYXZlIHRoZSBzZXJ2 ZXIgcmVzcG9uc2UgZ28gdG8gdGhlIHNjcmVlbiwgYQorICAgICAgICAgIGZpbGUsIGJvdGgsIG9y IG5laXRoZXIuCisKKyAgIC9IRUFERVI6aGVhZGVyLWl0ZW0ocykKKyAgICAgICAgICBVc2VkIGZv ciBzcGVjaWZ5aW5nIGFueSBvcHRpb25hbCBoZWFkZXJzIHRvIGJlIHNlbnQgd2l0aCBIVFRQCisg ICAgICAgICAgcmVxdWVzdHMuCisKKyAgL0hFQURFUjp0YWc6dmFsdWUKKworICAgICAgICAgIFRv IHNlbmQgbW9yZSB0aGFuIG9uZSBoZWFkZXIsIHVzZSBicmFjZXMgZm9yIGdyb3VwaW5nOgorCisg IC9IRUFERVI6e3t0YWc6dmFsdWV9e3RhZzp2YWx1ZX0uLi59CisKKyAgICAgICAgICBGb3IgYSBs aXN0IG9mIHZhbGlkIHRhZ3MgYW5kIHZhbHVlIGZvcm1hdHMgc2VlIFsxODddUkZDIDI2MTYsCisg ICAgICAgICAgIkh5cGVydGV4dCBUcmFuc2ZlciBQcm90b2NvbCAtLSBIVFRQLzEuMSIuIEEgbWF4 aW11bSBvZiBlaWdodAorICAgICAgICAgIGhlYWRlcnMgbWF5IGJlIHNwZWNpZmllZC4KKworMi4y LjIuIEhUVFAgQWN0aW9uIENvbW1hbmRzCisKKyAgIEhUVFAgYWN0aW9ucyBjYW4gb2NjdXIgd2l0 aGluIGEgcGVyc2lzdGVudCBjb25uZWN0aW9uLCBvciB0aGV5IGNhbiBiZQorICAgc2VsZi1jb250 YWluZWQgKCJjb25uZWN0aW9ubGVzcyIpLiBBIHBlcnNpc3RlbnQgSFRUUCBjb25uZWN0aW9uIGJl Z2lucworICAgd2l0aCBhbiBIVFRQIE9QRU4gY29tbWFuZCwgZm9sbG93ZWQgYnkgemVybyBvciBt b3JlIEhUVFAgYWN0aW9uCisgICBjb21tYW5kcywgYW5kIGlzIHRlcm1pbmF0ZWQgd2l0aCBhbiBI VFRQIENMT1NFIGNvbW1hbmQ6CisKKyAgaHR0cCBvcGVuIHd3dy5jb2x1bWJpYS5lZHUKKyAgaWYg ZmFpbHVyZSBzdG9wIDEgSFRUUCBPUEVOIGZhaWxlZDogXHYoaHR0cF9tZXNzYWdlKQorICBodHRw IGdldCBrZXJtaXQvaW5kZXguaHRtbAorICBpZiBmYWlsdXJlIHN0b3AgMSBIVFRQIEdFVCBmYWls ZWQ6IFx2KGh0dHBfbWVzc2FnZSkKKyAgKG1vcmUgYWN0aW9ucyBwb3NzaWJsZSBoZXJlLi4uKQor ICBodHRwIGNsb3NlCisKKyAgIEEgc2VsZi1jb250YWluZWQgSFRUUCBhY3Rpb24gb2NjdXJzIHdo ZW4gYSBVUkwgaXMgZ2l2ZW4gaW5zdGVhZCBvZiBhCisgICByZW1vdGUgZmlsZSBuYW1lIHRvIGFu IEhUVFAgYWN0aW9uIGNvbW1hbmQuIEluIHRoaXMgY2FzZSwgS2VybWl0IG1ha2VzCisgICB0aGUg SFRUUCBjb25uZWN0aW9uLCB0YWtlcyB0aGUgYWN0aW9uLCBhbmQgdGhlbiBjbG9zZXMgdGhlIGNv bm5lY3Rpb24uCisgICBJZiBhbiBIVFRQIGNvbm5lY3Rpb24gd2FzIGFscmVhZHkgb3BlbiwgaXQg aXMgY2xvc2VkIHNpbGVudGx5IGFuZAorICAgYXV0b21hdGljYWxseS4KKworICBodHRwIGdldCBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRtbAorCisgICBLZXJtaXQncyBI VFRQIGFjdGlvbiBjb21tYW5kcyBhcmUgYXMgZm9sbG93cy4gU3dpdGNoZXMgbWF5IGJlIGluY2x1 ZGVkCisgICB3aXRoIGFueSBvZiB0aGVzZSB0byBvdmVycmlkZSBzd2l0Y2ggKG9yIGRlZmF1bHQp IHZhbHVlcyBnaXZlbiBpbiB0aGUKKyAgIEhUVFAgT1BFTiBjb21tYW5kLgorCisgICBIVFRQIFsg c3dpdGNoZXMgXSBHRVQgcmVtb3RlLWZpbGVuYW1lIFsgbG9jYWwtZmlsZW5hbWUgXQorICAgICAg ICAgIFJldHJpZXZlcyB0aGUgbmFtZWQgZmlsZSBmcm9tIHRoZSBzZXJ2ZXIgc3BlY2lmaWVkIGlu IHRoZSBtb3N0CisgICAgICAgICAgcmVjZW50IEhUVFAgT1BFTiBjb21tYW5kIGZvciB3aGljaCBh IGNvcnJlc3BvbmRpbmcgSFRUUCBDTE9TRQorICAgICAgICAgIGNvbW1hbmQgaGFzIG5vdCBiZWVu IGdpdmVuLiBUaGUgZmlsZW5hbWUgbWF5IG5vdCBpbmNsdWRlCisgICAgICAgICAgd2lsZGNhcmRz IChIVFRQIHByb3RvY29sIGRvZXMgbm90IHN1cHBvcnQgdGhlbSkuIElmIG5vIEhUVFAgT1BFTgor ICAgICAgICAgIGNvbW1hbmQgaXMgaW4gZWZmZWN0LCB0aGlzIGZvcm0gb2YgdGhlIEhUVFAgR0VU IGNvbW1hbmQgZmFpbHMuCisgICAgICAgICAgVGhlIGRlZmF1bHQgbG9jYWwgZmlsZW5hbWUgaXMg dGhlIHNhbWUgYXMgdGhlIHJlbW90ZSBuYW1lLCBidXQKKyAgICAgICAgICB3aXRoIGFueSBwYXRo bmFtZSBzdHJpcHBlZC4gRm9yIGV4YW1wbGUsIHRoZSBjb21tYW5kIGh0dHAgZ2V0CisgICAgICAg ICAga2VybWl0L2luZGV4Lmh0bWwgc3RvcmVzIHRoZSBmaWxlIGluIHRoZSBjdXJyZW50IGxvY2Fs IGRpcmVjdG9yeQorICAgICAgICAgIGFzIGluZGV4Lmh0bWwuIElmIHRoZSAvSEVBREVSUzogc3dp dGNoIGlzIGluY2x1ZGVkLCBpbmZvcm1hdGlvbgorICAgICAgICAgIGFib3V0IHRoZSBmaWxlIGlz IGFsc28gc3RvcmVkIGluIHRoZSBzcGVjaWZpZWQgYXJyYXkgKGV4cGxhaW5lZAorICAgICAgICAg IGluIFsxODhdU2VjdGlvbiAyLjIuMykuIEFsbCBmaWxlcyBhcmUgdHJhbnNmZXJyZWQgaW4gYmlu YXJ5CisgICAgICAgICAgbW9kZS4gSFRUUCBkb2VzIG5vdCBwcm92aWRlIGZvciByZWNvcmQtZm9y bWF0IG9yIGNoYXJhY3Rlci1zZXQKKyAgICAgICAgICBjb252ZXJzaW9uLgorCisgICBIVFRQIFsg c3dpdGNoZXMgXSBHRVQgdXJsIFsgbG9jYWwtZmlsZW5hbWUgXQorICAgICAgICAgIFdoZW4gSFRU UCBHRVQgaXMgZ2l2ZW4gYSBVUkwgcmF0aGVyIHRoYW4gYSBmaWxlbmFtZSwgS2VybWl0CisgICAg ICAgICAgb3BlbnMgYSBjb25uZWN0aW9uIHRvIHRoZSBkZXNpZ25hdGVkIHNlcnZlciAoY2xvc2lu ZyBhbnkKKyAgICAgICAgICBwcmV2aW91c2x5IG9wZW4gSFRUUCBjb25uZWN0aW9uKSwgZ2V0cyB0 aGUgZmlsZSwgYW5kIHRoZW4gY2xvc2VzCisgICAgICAgICAgdGhlIGNvbm5lY3Rpb24uIElmIHRo ZSBVUkwgZG9lcyBub3QgaW5jbHVkZSBhIGZpbGVuYW1lLAorICAgICAgICAgIGluZGV4Lmh0bWwg aXMgc3VwcGxpZWQuIFRoaXMgaXMgdGhlIHNlbGYtY29udGFpbmVkIG9uZS1zdGVwCisgICAgICAg ICAgImNvbm5lY3Rpb25sZXNzIiBtZXRob2QgZm9yIGdldHRpbmcgYSBmaWxlIGZyb20gYSBXZWIg c2VydmVyLgorICAgICAgICAgIFRoZSBkYXRhIGlzIG5vdCBpbnRlcnByZXRlZDsgSFRUUCBHRVQg aXMgbGlrZSAibHlueCAtc291cmNlIgorICAgICAgICAgIHJhdGhlciB0aGFuICJseW54IC1kdW1w Ii4KKworICAgSW4gdGhlIHJlbWFpbmluZyBIVFRQIGFjdGlvbiBjb21tYW5kcywgdGhlIGRpc3Rp bmN0aW9uIGJldHdlZW4gYSByZW1vdGUKKyAgIGZpbGVuYW1lIGFuZCBhIFVSTCBhcmUgdGhlIHNh bWUgYXMgaW4gdGhlIEhUVFAgR0VUIGNvbW1hbmQuCisKKyAgIEhUVFAgWyBzd2l0Y2hlcyBdIEhF QUQgcmVtb3RlLWZpbGVuYW1lLW9yLXVybCBbIGxvY2FsLWZpbGVuYW1lIF0KKyAgICAgICAgICBM aWtlIEdFVCBleGNlcHQgd2l0aG91dCBhY3R1YWxseSBnZXR0aW5nIHRoZSBmaWxlOyBpbnN0ZWFk IGl0CisgICAgICAgICAgcmV0cmlldmVzIG9ubHkgdGhlIGhlYWRlcnMuIElmIHRoZSAvQVJSQVk6 IG9yIC9UT1NDUkVFTiBzd2l0Y2gKKyAgICAgICAgICBpcyBpbmNsdWRlZCwgdGhlcmUgaXMgbm8g ZGVmYXVsdCBsb2NhbCBvdXRwdXQgZmlsZW5hbWUgYnV0IHlvdQorICAgICAgICAgIGNhbiBzdGls bCBzcGVjaWZ5IG9uZS4gSWYgbmVpdGhlciBvZiB0aGVzZSBzd2l0Y2hlcyBpcyBpbmNsdWRlZCwK KyAgICAgICAgICB0aGUgZGVmYXVsdCBsb2NhbCBmaWxlbmFtZSBpcyB0aGUgc2FtZSBhcyB0aGUg cmVtb3RlIGZpbGVuYW1lLAorICAgICAgICAgIGJ1dCB3aXRoIGFueSBwYXRoIHN0cmlwcGVkIGFu ZCB3aXRoICIuaGVhZCIgYXBwZW5kZWQuIFRoZSBIRUFECisgICAgICAgICAgY29tbWFuZCBjYW4g YmUgdXNlZCBpbiBhIHNjcmlwdCB3aXRoIHRoZSAvQVJSQVk6IHN3aXRjaCB0bworICAgICAgICAg IHJldHJpZXZlIGluZm9ybWF0aW9uIGFib3V0IHRoZSByZXF1ZXN0ZWQgcmVzb3VyY2UgdG8gZGV0 ZXJtaW5lCisgICAgICAgICAgd2hldGhlciB0aGUgcmVzb3VyY2Ugc2hvdWxkIGFjdHVhbGx5IGJl IHJldHJpZXZlZCB3aXRoIGEKKyAgICAgICAgICBzdWJzZXF1ZW50IEdFVCByZXF1ZXN0LgorCisg ICBIVFRQIFsgc3dpdGNoZXMgXSBJTkRFWCByZW1vdGUtZGlyZWN0b3J5LW9yLXVybCBbIGxvY2Fs LWZpbGVuYW1lIF0KKyAgICAgICAgICBBc2tzIHRoZSBzZXJ2ZXIgdG8gc2VuZCBhIGxpc3Rpbmcg b2YgdGhlIGZpbGVzIGluIHRoZSBnaXZlbgorICAgICAgICAgIHNlcnZlciBkaXJlY3RvcnkuIFRo aXMgY29tbWFuZCBpcyBub3Qgc3VwcG9ydGVkIGJ5IG1vc3QgV2ViCisgICAgICAgICAgc2VydmVy cy4gRXZlbiB3aGVuIGl0IGlzIHN1cHBvcnRlZCwgdGhlcmUgaXMgbm8gc3RhbmRhcmQgZm9ybWF0 CisgICAgICAgICAgZm9yIHRoZSBsaXN0aW5nLgorCisgICBIVFRQIFsgc3dpdGNoZXMgXSBQT1NU IFsgL01JTUUtVFlQRTp0eXBlIF0gc291cmNlLWZpbGUKKyAgICAgICAgICByZW1vdGUtcGF0aC1v ci11cmwgWyByZXN1bHQtZmlsZSBdCisgICAgICAgICAgU2VuZHMgZGF0YSB0byBhIHByb2Nlc3Mg cnVubmluZyBvbiB0aGUgcmVtb3RlIGhvc3Q7IHRoZSByZXN1bHQKKyAgICAgICAgICBpcyB1c3Vh bGx5IGFuIEhUTUwgZmlsZSBidXQgY291bGQgYmUgYW55dGhpbmcuIFRoZSBkYXRhIHRvIGJlCisg ICAgICAgICAgcG9zdGVkIG11c3QgYmUgcmVhZCBmcm9tIGEgbG9jYWwgZmlsZSAodGhlIHNvdXJj ZS1maWxlKS4gSWYgYQorICAgICAgICAgIHJlc3VsdCBmaWxlIGlzIHNwZWNpZmllZCwgS2VybWl0 IHN0b3JlcyB0aGUgc2VydmVyJ3MgcmVzcG9uc2UgaW4KKyAgICAgICAgICBpdC4KKworICAgSFRU UCBbIHN3aXRjaGVzIF0gUFVUIFsgTUlNRS1UWVBFOnR5cGUgXSBsb2NhbC1maWxlIFsKKyAgICAg ICAgICByZW1vdGUtZmlsZS1vci11cmwgWyByZXN1bHQtZmlsZSBdIF0KKyAgICAgICAgICBVcGxv YWRzIGEgbG9jYWwgZmlsZSB0byB0aGUgc2VydmVyLiBPbmx5IHRoZSBuYW1lIG9mIGEgc2luZ2xl CisgICAgICAgICAgZmlsZSBjYW4gYmUgZ2l2ZW47IHdpbGRjYXJkcyAoYW5kIGdyb3VwIHRyYW5z ZmVycykgYXJlIG5vdAorICAgICAgICAgIHN1cHBvcnRlZCBieSBIVFRQIHByb3RvY29sLiBJZiBu byByZW1vdGUgZmlsZW5hbWUgaXMgZ2l2ZW4sIHRoZQorICAgICAgICAgIGZpbGUgaXMgc2VudCB3 aXRoIHRoZSBzYW1lIG5hbWUgYXMgdGhlIGxvY2FsIGZpbGUsIGJ1dCB3aXRoIGFueQorICAgICAg ICAgIHBhdGhuYW1lIHN0cmlwcGVkLgorCisgICBIVFRQIFsgc3dpdGNoZXMgXSBERUxFVEUgcmVt b3RlLWZpbGUtb3ItdXJsIFsgbG9jYWwtcmVzdWx0LWZpbGUgXQorICAgICAgICAgIEFza3MgdGhl IHNlcnZlciB0byBkZWxldGUgdGhlIHNwZWNpZmllZCBzaW5nbGUgZmlsZS4gSWYgYSByZXN1bHQK KyAgICAgICAgICBmaWxlIGlzIHNwZWNpZmllZCwgaXQgd2lsbCBjb250YWluIGFueSByZXNwb25z ZSBkYXRhIHJldHVybmVkIGJ5CisgICAgICAgICAgdGhlIHNlcnZlci4KKworICAgTm90ZSB0aGUg bGltaXRhdGlvbnMgb2YgSFRUUCBwcm90b2NvbCBjb21wYXJlZCB0byAoc2F5KSBGVFAgb3IgS2Vy bWl0LgorICAgVGhlcmUgaXMgbm8gY29tbWFuZCBmb3IgY2hhbmdpbmcgZGlyZWN0b3JpZXMsIG5v IHN0YW5kYXJkIHdheSB0byBnZXQKKyAgIGZpbGUgb3IgZGlyZWN0b3J5IGxpc3RzLCBubyB3YXkg dG8gdHJhbnNmZXIgZmlsZSBncm91cHMgYnkgdXNpbmcKKyAgIHdpbGRjYXJkIG5vdGF0aW9uLCBl dGMsIGFuZCB0aGVyZWZvcmUgbm8gZ29vZCB3YXkgdG8gKHNheSkgZmV0Y2ggYWxsCisgICBwYWdl cywgZGVzY2VuZCB0aHJvdWdoIHN1YmRpcmVjdG9yaWVzLCBwZXJmb3JtIGF1dG9tYXRpYyB1cGRh dGVzLCBldGMuCisgICBUaGVyZSBpcyBubyBhc3N1cmFuY2UgYSBjb25uZWN0aW9uIHdpbGwgc3Rh eSBvcGVuIGFuZCwgYXMgbm90ZWQsIHRoZXJlCisgICBpcyBubyBwcm92aXNpb24gZm9yIGRhdGEg Y29udmVyc2lvbiBiZXR3ZWVuIHVubGlrZSBwbGF0Zm9ybXMuIFRoZQorICAgZGF0YSdzIE1JTUUg aGVhZGVycyBjYW4gYmUgdXNlZCBmb3IgcG9zdHByb2Nlc3NpbmcuCisKKzIuMi4zLiBIVFRQIEhl YWRlcnMKKworICAgRWFjaCBIVFRQIHJlcXVlc3QgYW5kIHJlc3BvbnNlIGNvbnRhaW5zIGEgc2V0 IG9mIG5hbWUvdmFsdWUgcGFpcnMKKyAgIGNhbGxlZCBoZWFkZXJzLiBIVFRQIGhlYWRlcnMgYXJl IHNwZWNpZmllZCBpbiBbMTg5XVJGQyAyNjE2LiBGb3IKKyAgIGV4YW1wbGUsIGFuIEhUVFAgR0VU IHJlcXVlc3QgZm9yIC9pbmRleC5odG1sIG9uIHd3dy5jb2x1bWJpYS5lZHUKKyAgIGNvbnRhaW5z IHRoZSBmb2xsb3dpbmcgaGVhZGVyczoKKworICBHRVQgL2luZGV4Lmh0bWwgSFRUUC8xLjEKKyAg SG9zdDogd3d3LmNvbHVtYmlhLmVkdTo4MAorICBVc2VyLWFnZW50OiBDLUtlcm1pdCA4LjAKKyAg QXV0aG9yaXphdGlvbjogQmFzaWMgYmFzZTY0LWVuY29kZWQtdXNlcm5hbWUtcGFzc3dvcmQKKwor ICAgVGhlc2UgbWlnaHQgYmUgZm9sbG93ZWQgYnkgYW55IG90aGVycyBzcGVjaWZpZWQgd2l0aCBh IC9IRUFERVJTOgorICAgc3dpdGNoOgorCisgIEFjY2VwdDogaW1hZ2UvZ2lmLCBpbWFnZS94LXhi aXRtYXAsIGltYWdlL2pwZWcsICouKgorICBBY2NlcHQtRW5jb2Rpbmc6IGd6aXAKKyAgQWNjZXB0 LUxhbmd1YWdlOiBlbgorICBBY2NlcHQtQ2hhcnNldDogaXNvLTg4NTktMSx1dGYtOAorICBDb29r aWU6IGNvb2tpZS1kYXRhCisKKyAgIFRoZSBzZXJ2ZXIgc2VuZHMgYmFjayBhIHNob3J0IHJlcG9y dCBhYm91dCB0aGUgZmlsZSBwcmlvciB0byBzZW5kaW5nCisgICB0aGUgZmlsZSBjb250ZW50cy4g RXhhbXBsZToKKworICBIVFRQLzEuMSAyMDAgT0sKKyAgRGF0ZTogRnJpLCAyNCBBdWcgMjAwMSAy MTowOTozOSBHTVQKKyAgU2VydmVyOiBBcGFjaGUvMS4zLjQgKFVuaXgpCisgIExhc3QtTW9kaWZp ZWQ6IE1vbiwgMDYgQXVnIDIwMDEgMjE6MTY6MTMgR01UCisgIEVUYWc6ICIxZmExMzctMTBkNy0z YjZmMDkxZCIKKyAgQWNjZXB0LVJhbmdlczogYnl0ZXMKKyAgQ29udGVudC1MZW5ndGg6IDQzMTEK KyAgQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwKKworICAgSWYgeW91IHdhbnQgdG8gaGF2ZSB0aGlz IGluZm9ybWF0aW9uIGF2YWlsYWJsZSB0byBhIEtlcm1pdCBzY3JpcHQgeW91CisgICBjYW4gdXNl IHRoZSAvQVJSQVkgc3dpdGNoIHRvIGhhdmUgS2VybWl0IHB1dCBpdCBpbiBhcnJheSwgb25lIGxp bmUgcGVyCisgICBhcnJheSBlbGVtZW50LiBFeGFtcGxlOgorCisgIHNldCBleGl0IHdhcm5pbmcg b2ZmCisgIGh0dHAgb3BlbiB3d3cuY29sdW1iaWEuZWR1CisgIGlmIGZhaWwgZXhpdCAxIENhbid0 IHJlYWNoIHNlcnZlcgorICBodHRwIC9hcnJheTomYSBnZXQgL2luZGV4Lmh0bWwKKyAgaWYgZmFp bCBleGl0IDEgQ2FuJ3QgZ2V0IGZpbGUKKyAgZWNobyBIZWFkZXIgbGluZXM6IFxmZGltKCZhKQor ICBmb3IgXCVpIDEgXGZkaW0oJmEpIDEgeworICAgICAgZWNobyBcJWkuIFwmYVtcJWldCisgIH0K KworICAgTm90ZSB0aGF0IHRoZSAiRGF0ZToiIGl0ZW0gaXMgdGhlIGN1cnJlbnQgZGF0ZSBhbmQg dGltZTsgdGhlCisgICAiTGFzdC1Nb2RpZmllZDoiIGl0ZW0gaXMgdGhlIGZpbGUncyBtb2RpZmlj YXRpb24gZGF0ZSBhbmQgdGltZS4gQW4KKyAgIGV4YW1wbGUgc2hvd2luZyBob3cgdG8gdXNlIHRo aXMgaW5mb3JtYXRpb24gaXMgcHJlc2VudGVkIGluCisgICBbMTkwXVNlY3Rpb24gOC4xMy43Lgor CisyLjIuNC4gU2VjdXJlIEhUVFAgQ29ubmVjdGlvbnMKKworICAgU1NML1RMUyAoU2VjdXJlIFNv Y2tldHMgTGF5ZXIgLyBUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkpIGlzIHRoZQorICAgcHJvdG9j b2wgdXNlZCB0byBzZWN1cmUgSFRUUCwgU01UUCwgYW5kIG90aGVyIEludGVybmV0IGFwcGxpY2F0 aW9ucy4KKyAgIFNlZSB0aGUgWzE5MV1DLUtlcm1pdCBSZWZlcmVuY2UgU2VjdGlvbiA1LjQgZm9y IGFuIGludHJvZHVjdGlvbiB0bworICAgU1NML1RMUy4gVG8gbWFrZSBhIHNlY3VyZSBIVFRQIGNv bm5lY3Rpb24sIHlvdSBuZWVkOgorCisgICAgMS4gQSBzZWN1cmUgY2xpZW50IChhIHZlcnNpb24g b2YgQy1LZXJtaXQgb3IgS2VybWl0IDk1IHdpdGggU1NML1RMUworICAgICAgIHNlY3VyaXR5IGJ1 aWx0IGluKS4gVHlwZSAiY2hlY2sgc3NsIiBhdCB0aGUgS2VybWl0IHByb21wdCB0byBtYWtlCisg ICAgICAgc3VyZSB5b3UgaGF2ZSBpdC4KKyAgICAyLiBBIHNlY3VyZSBzZXJ2ZXIgdG8gY29ubmVj dCB0by4KKyAgICAzLiBUaGUgQ0EgUm9vdCBDZXJ0aWZpY2F0ZSB1c2VkIHRvIGF1dGhlbnRpY2F0 ZSB0aGUgc2VydmVyIHRvIHRoZQorICAgICAgIGNsaWVudC4gKHNlZSBbMTkyXVNlY3Rpb24gMTUg b2YgdGhlIHNlY3VyaXR5IHJlZmVyZW5jZSBmb3IgYW4KKyAgICAgICBpbnRyb2R1Y3Rpb24gdG8g Y2VydGlmaWNhdGVzKS4KKworICAgQW5kIHlvdSBtdXN0IG1ha2UgYSBjb25uZWN0aW9uIHRvIHRo ZSBzZWN1cmUgSFRUUCBwb3J0OiBzZXJ2aWNlIG5hbWUKKyAgIEhUVFBTLCBwb3J0IG51bWJlciA0 NDMgKGFzIG9wcG9zZWQgdG8gc2VydmljZSBIVFRQLCBwb3J0IDgwKS4gWW91IGNhbgorICAgYWxz byBtYWtlIHNlY3VyZSBjb25uZWN0aW9ucyB0byBvdGhlciBwb3J0cyBieSBpbmNsdWRpbmcgdGhl IC9UTFMgb3IKKyAgIC9TU0wgc3dpdGNoIHdpdGggdGhlIEhUVFAgT1BFTiBjb21tYW5kLCBpZiB0 aGUgaG9zdCBzdXBwb3J0cyBTU0wvVExTIG9uCisgICB0aGUgZ2l2ZW4gcG9ydDoKKworICAgVGhl IHF1YWxpdHkgb2YgdGhlIFNTTC9UTFMgY29ubmVjdGlvbiBkZXBlbmRzIG9uIHRoZSBjaXBoZXIg c3VpdGUuCisgICBUaGVyZSBhcmUgc2V2ZXJhbCBwb3NzaWJpbGl0aWVzOgorCisgICBBbm9ueW1v dXMgY2lwaGVyIHN1aXRlOgorICAgICAgICAgIElmIGFuIGFub255bW91cyBjaXBoZXIgc3VpdGUg aXMgbmVnb3RpYXRlZCwgdGhlIGNvbm5lY3Rpb24gaXMKKyAgICAgICAgICBlbmNyeXB0ZWQgYnV0 IHRoZXJlIGlzIG5vIGF1dGhlbnRpY2F0aW9uLiBUaGlzIGNvbm5lY3Rpb24gaXMKKyAgICAgICAg ICBzdWJqZWN0IHRvIGEgTWFuLUluLVRoZS1NaWRkbGUgKE1JVE0pIGF0dGFjay4KKworICAgWC41 MDkgY2VydGlmaWNhdGUgb24gdGhlIHNlcnZlcjoKKyAgICAgICAgICBXaGVuIHlvdSBjb25uZWN0 IHRvIGNlcnRhaW4gc2VjdXJlIHNlcnZlcnMsIGFuIFguNTA5IGNlcnRpZmljYXRlCisgICAgICAg ICAgaXMgcmV0dXJuZWQuIFRoaXMgY2VydGlmaWNhdGUgaXMgaXNzdWVkIHRvIGEgc3BlY2lhbCBo b3N0bmFtZSwKKyAgICAgICAgICBzb21ldGhpbmcgbGlrZSB3d3cxLnh5emNvcnAuY29tIG9yIHd3 d3MueHl6Y29ycC5jb20gKHJhdGhlciB0aGFuCisgICAgICAgICAgdGhlIG5vcm1hbCB3d3cueHl6 Y29ycC5jb20pLiBJdCBpcyBzaWduZWQgYnkgdGhlIGhvc3QncworICAgICAgICAgIENlcnRpZmlj YXRlIEF1dGhvcml0eSAoQ0EpLiBJZiB0aGUgaG9zdCBjZXJ0aWZpY2F0ZSBpcworICAgICAgICAg IGNvbmZpZ3VyZWQgb24gdGhlIGNsaWVudCwgaXQgY2FuIGJlIHVzZWQgdG8gdmVyaWZ5IHRoZQor ICAgICAgICAgIGNlcnRpZmljYXRlIHJlY2VpdmVkIGZyb20gdGhlIHNlcnZlci4gSWYgdGhlIGNl cnRpZmljYXRlIGl0CisgICAgICAgICAgdmVyaWZpZWQgYXMgYXV0aGVudGljLCBhIGNoZWNrIGlz IG1hZGUgdG8gZW5zdXJlIGl0IGhhcyBub3QKKyAgICAgICAgICBleHBpcmVkIGFuZCBpdCB3YXMg aXNzdWVkIHRvIHRoZSBob3N0IHlvdSB3ZXJlIGF0dGVtcHRpbmcgdG8KKyAgICAgICAgICBjb25u ZWN0IHRvLiBJZiB5b3UgaGFkIGFza2VkIHRvIGNvbm5lY3QgdG8gKHNheSkgd3d3Lnh5emNvcnAu Y29tCisgICAgICAgICAgYnV0IHdlcmUgZ2l2ZW4gYSBjZXJ0aWZpY2F0ZSBmb3Igd3d3MS54eXpj b3JwLmNvbSwgeW91IHdvdWxkIGJlCisgICAgICAgICAgcHJvbXB0ZWQgZm9yIHBlcm1pc3Npb24g dG8gY29udGludWUuCisKKyAgICAgICAgICBJZiB0aGUgdmVyaWZpY2F0aW9uIHN1Y2NlZWRlZCwg dGhlIGNvbm5lY3Rpb24gd291bGQgYmUgZW5jcnlwdGVkCisgICAgICAgICAgd2l0aCBvbmUtd2F5 IChzZXJ2ZXItdG8tY2xpZW50KSBhdXRoZW50aWNhdGlvbi4gVGhpcyBjb25uZWN0aW9uCisgICAg ICAgICAgaXMgbm90IHN1YmplY3QgdG8gYSBNSVRNIGF0dGFjay4KKworICAgICAgICAgIElmIGEg dXNlcm5hbWUgYW5kIHBhc3N3b3JkIGFyZSB0cmFuc21pdHRlZCBvdmVyIHRoaXMgY29ubmVjdGlv biwKKyAgICAgICAgICB0aGV5IGFyZSBub3Qgc3ViamVjdCB0byBpbnRlcmNlcHRpb24uIEhvd2V2 ZXIsIHRoZSBzdGFuZGFyZAorICAgICAgICAgIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBwYXNzaW5n IHRoZSBwYXNzd29yZCB0byB0aGUgaG9zdCBmb3IKKyAgICAgICAgICB2ZXJpZmljYXRpb24gYXBw bHk7IGZvciBleGFtcGxlLCBpZiB0aGUgaG9zdCBoYXMgYmVlbgorICAgICAgICAgIGNvbXByb21p c2VkLCB0aGUgcGFzc3dvcmQgd2lsbCBiZSBjb21wcm9taXNlZC4KKworICAgWC41MDkgY2xpZW50 IGNlcnRpZmljYXRlOgorICAgICAgICAgIElmIGEgY29ubmVjdGlvbiBoYXMgYmVlbiBlc3RhYmxp c2hlZCB3aXRoIGFuIFguNTA5IHNlcnZlcgorICAgICAgICAgIGNlcnRpZmljYXRlLCB0aGUgc2Vy dmVyIGNhbiBhc2sgdGhlIGNsaWVudCB0byBzZW5kIGEgY2VydGlmaWNhdGUKKyAgICAgICAgICBv ZiBpdHMgb3duLiBUaGlzIGNlcnRpZmljYXRlIG11c3QgYmUgdmVyaWZpZWQgYWdhaW5zdCBhIENB IFJvb3QKKyAgICAgICAgICBjZXJ0aWZpY2F0ZS4gVGhlIGNlcnRpZmljYXRlIGl0c2VsZiAob3Ig c3ViamVjdCBpbmZvIGZyb20gdGhlCisgICAgICAgICAgY2VydGlmaWNhdGUpIGlzIHVzZWQgdG8g ZGV0ZXJtaW5lIHRoZSBhdXRob3JpemF0aW9uIGZvciB0aGUKKyAgICAgICAgICBjbGllbnQsIGFu ZCBpZiBzdWNjZXNzZnVsLCB0aGUgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIG5lZWQgbm90IGJlCisg ICAgICAgICAgc2VudCB0byB0aGUgc2VydmVyLgorCisgICBLZXJiZXJvcyA1OgorICAgICAgICAg IEluc3RlYWQgb2YgdXNpbmcgWC41MDkgY2VydGlmaWNhdGVzLCBLZXJiZXJvcyA1IGNhbiBiZSB1 c2VkIHRvCisgICAgICAgICAgcGVyZm9ybSB0aGUgYXV0aGVudGljYXRpb24gYW5kIGtleSBleGNo YW5nZS4gSW4gdGhpcyBzaXR1YXRpb24sCisgICAgICAgICAgdGhlcmUgaXMgbXV0dWFsIGF1dGhl bnRpY2F0aW9uIGJldHdlZW4gdGhlIGNsaWVudCBhbmQgc2VydmVyLgorICAgICAgICAgIFRoZSBL ZXJiZXJvcyA1IHByaW5jaXBhbCBpcyB1c2VkIGJ5IHRoZSBzZXJ2ZXIgdG8gbG9vayB1cCB0aGUK KyAgICAgICAgICBhcHByb3ByaWF0ZSBhdXRob3JpemF0aW9uIGRhdGEuIFRoZXJlIGlzIG5vIG5l ZWQgdG8gc2VuZAorICAgICAgICAgIHVzZXJuYW1lIGFuZCBwYXNzd29yZC4KKworICAgQW4gSFRU UCBjb25uZWN0aW9uIGlzIG1hZGUgd2l0aCB0aGUgSFRUUCBPUEVOIGNvbW1hbmQ6CisKKyAgIEhU VFAgWyBzd2l0Y2hlcyBdIE9QRU4gWyB7IC9TU0wsIC9UTFMgfSBdIGhvc3QgWyBwb3J0IF0KKyAg ICAgICAgICBJZiAvU1NMIG9yIC9UTFMgc3dpdGNoZXMgYXJlIGluY2x1ZGVkICh0aGVzZSBhcmUg c3lub255bXMpLCBvcgorICAgICAgICAgIGlmIHRoZSBzZXJ2aWNlIGlzIEhUVFBTIG9yIHRoZSBw b3J0IGlzIDQ0MywgYSBzZWN1cmUgY29ubmVjdGlvbgorICAgICAgICAgIGlzIGF0dGVtcHRlZCB1 c2luZyB0aGUgY3VycmVudCBhdXRoZW50aWNhdGlvbiBzZXR0aW5nczsgc2VlIEhFTFAKKyAgICAg ICAgICBTRVQgQVVUSEVOVElDQVRJT04gZm9yIGRldGFpbHMgKFsxOTNdU2VjdGlvbiA2LjIgb2Yg dGhlIHNlY3VyaXR5CisgICAgICAgICAgcmVmZXJlbmNlKS4gSWYgdGhlIG5vIC9TU0wgb3IgL1RM UyBzd2l0Y2ggaXMgaW5jbHVkZWQgYnV0IHRoZQorICAgICAgICAgIHBvcnQgaXMgNDQzIG9yIHRo ZSBzZXJ2aWNlIGlzIEhUVFBTLCBhIHNlY3VyZSBjb25uZWN0aW9uIGlzCisgICAgICAgICAgYXR0 ZW1wdGVkLiBJZiBhbiAvU1NMIG9yIC9UTFMgc3dpdGNoIGlzIGluY2x1ZGVkIGJ1dCBhIHBvcnQg aXMKKyAgICAgICAgICBub3Qgc3BlY2lmaWVkLCBhbiBTU0wvVExTIGNvbm5lY3Rpb24gaXMgYXR0 ZW1wdGVkIG9uIHRoZSBkZWZhdWx0CisgICAgICAgICAgcG9ydCAoODApLgorCisgICBDZXJ0aWZp Y2F0ZXMgYXJlIGNvdmVyZWQgaW4gdGhlIHNlcGFyYXRlIFsxOTRdS2VybWl0IFNlY3VyaXR5IFJl ZmVyZW5jZQorICAgZm9yIEMtS2VybWl0IDguMC4gWW91IHNob3VsZCBsZXQgS2VybWl0IGtub3cg dG8gdmVyaWZ5IGNlcnRpZmljYXRlcworICAgd2l0aCB0aGUgU0VUIEFVVEhFTlRJQ0FUSU9OIFRM UyBjb21tYW5kLiBGb3IgZXhhbXBsZToKKworICAgU0VUIEFVVEhFTlRJQ0FUSU9OIFRMUyBDUkwt RElSIGRpcmVjdG9yeQorICAgICAgICAgIFNwZWNpZmllcyBhIGRpcmVjdG9yeSB0aGF0IGNvbnRh aW5zIGNlcnRpZmljYXRlIHJldm9jYXRpb24gZmlsZXMKKyAgICAgICAgICB3aGVyZSBlYWNoIGZp bGUgaXMgbmFtZWQgYnkgdGhlIGhhc2ggb2YgdGhlIGNlcnRpZmljYXRlIHRoYXQgaGFzCisgICAg ICAgICAgYmVlbiByZXZva2VkLgorCisgICBTRVQgQVVUSEVOVElDQVRJT04gVExTIENSTC1GSUxF IGZpbGVuYW1lCisgICAgICAgICAgU3BlY2lmaWVzIGEgZmlsZSB0aGF0IGNvbnRhaW5zIGEgbGlz dCBvZiBjZXJ0aWZpY2F0ZQorICAgICAgICAgIHJldm9jYXRpb25zLgorCisgICBTRVQgQVVUSEVO VElDQVRJT04gVExTIFZFUklGWS1ESVIgZGlyZWN0b3J5CisgICAgICAgICAgU3BlY2lmaWVzIGEg ZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgcm9vdCBDQSBjZXJ0aWZpY2F0ZSBmaWxlcworICAgICAg ICAgIHVzZWQgdG8gdmVyaWZ5IHRoZSBjZXJ0aWZpY2F0ZSBjaGFpbnMgcHJlc2VudGVkIGJ5IHRo ZSBwZWVyLgorICAgICAgICAgIEVhY2ggZmlsZSBpcyBuYW1lZCBieSBhIGhhc2ggb2YgdGhlIGNl cnRpZmljYXRlLgorCisgICBTRVQgQVVUSEVOVElDQVRJT04gVExTIFZFUklGWS1GSUxFIGZpbGVu YW1lCisgICAgICAgICAgU3BlY2lmaWVzIGEgZmlsZSB0aGF0IGNvbnRhaW5zIHJvb3QgQ0EgY2Vy dGlmaWNhdGVzIHRvIGJlIHVzZWQKKyAgICAgICAgICBmb3IgdmVyaWZ5aW5nIGNlcnRpZmljYXRl IGNoYWlucy4KKworICAgU0VUIEFVVEhFTlRJQ0FUSU9OIFRMUyBWRVJJRlkgT0ZGCisgICAgICAg ICAgVGVsbHMgS2VybWl0IG5vdCB0byByZXF1aXJlIGEgY2VydGlmaWNhdGUgYW5kIGFjY2VwdCBh bnkKKyAgICAgICAgICBjZXJ0aWZpY2F0ZSB0aGF0IGlzIHByZXNlbnRlZCByZWdhcmRsZXNzIG9m IHdoZXRoZXIgaXQgaXMgdmFsaWQuCisKKyAgIFRoZXJlIGFyZSBtYW55IG90aGVyIG9wdGlvbnM7 IHNlZSB0aGUgc2VjdXJpdHkgZG9jdW1lbnQgZm9yIGRldGFpbHMuCisKKyAgIE5vdyBzdXBwb3Nl IHlvdSBuZWVkIG5lZWQgdG8gZmV0Y2ggdGhlIGZpbGUgZGVub3RlZCBieSB0aGUgZm9sbG93aW5n CisgICBVUkw6CisKKyAgaHR0cHM6Ly9teXVzZXJpZDpteXBhc3N3b3JkQHd3d3MueHl6Y29ycC5j b20vY2xpZW50cy9pbmZvL3NlY3JldC5odG1sCisKKyAgIE9uY2UgeW91IGhhdmUgc2V0IHVwIHRo ZSBoYW5kbGluZyBvZiBjZXJ0aWZpY2F0ZXMgYXMgZGVzaXJlZCwgeW91IGNhbgorICAgdXNlIHRo ZSBmb2xsb3dpbmcgS2VybWl0IGNvbW1hbmRzOgorCisgIGh0dHAgL3VzZXI6bXl1c2VyaWQgL3Bh c3N3b3JkOm15cGFzc3dvcmQgb3BlbiB3d3cxLnh5emNvcnAuY29tIGh0dHBzCisgIGlmIHN1Y2Nl c3MgeworICAgICAgaHR0cCBnZXQgL2NsaWVudHMvaW5mby9zZWNyZXQuaHRtbAorICAgICAgaHR0 cCBjbG9zZQorICB9CisKKyAgIEFzIGFub3RoZXIgZXhhbXBsZSwgbGV0J3Mgc2F5IHRoYXQgeW91 IGhhdmUgYSB3ZWIgZm9ybSB5b3UgbmVlZCB0bworICAgcG9wdWxhdGUgd2l0aCB0aHJlZSBmaWVs ZHM6IHJlZCx3aGl0ZSBhbmQgYmx1ZS4KKworICA8Rk9STSBBQ1RJT049Imh0dHA6Ly93d3cueHl6 Y29ycC5jb20vY2dpLWJpbi9mb3JtLmNnaSIgTUVUSE9EPSJQT1NUIj4KKyAgPElOUFVUIE5BTUU9 IlJlZCI+CisgIDxJTlBVVCBOQU1FPSJXaGl0ZSI+CisgIDxJTlBVVCBOQU1FPSJCbHVlIj4KKyAg PC9GT1JNPgorCisgICBZb3UgY2FuIGhhbmRsZSB0aGlzIHdpdGggdGhlIEhUVFAgUE9TVCBjb21t YW5kLiBUaGUgZGF0YSB0byBiZSBwb3N0ZWQKKyAgIGlzIHN0b3JlZCBpbiB0aGUgbG9jYWwgZmls ZSBkYXRhLnR4dC4KKworICBSZWQ9c2V2ZW4gc3RyaXBlcyZXaGl0ZT1zaXggc3RyaXBlcyZCbHVl PWZpZnR5IHN0YXJzCisKKyAgIGFuZCB0aGUgcmVzcG9uc2UgZnJvbSB0aGUgc2VydmVyIHdpbGwg YmUgc3RvcmVkIGludG8gcmVzcG9uc2UudHh0LgorCisgIGh0dHAgb3BlbiB3d3cueHl6Y29ycC5j b20gaHR0cAorICBpZiBzdWNjZXNzIHsKKyAgICBodHRwIC9hcnJheTpjIHBvc3QgZGF0YS50eHQg L2NnaS1iaW4vZm9ybS5jZ2kgcmVzcG9uc2UudHh0CisgICAgaHR0cCBjbG9zZQorICB9CisKKyAg IEluIHRoaXMgc2NlbmFyaW8sIHRoZSBDb21tb24gR2F0ZXdheSBJbnRlcmZhY2UgKENHSSkgc2Vu ZHMgYSByZXNwb25zZQorICAgd2hldGhlciBpdCBzdWNjZWVkcyBvciBmYWlscyBpbiBhIHNjcmlw dC1kZXBlbmRlbnQgbWFubmVyLiBUaGUgc2NyaXB0CisgICBjYW4gZWl0aGVyIHJlcG9ydCBzdWNj ZXNzIGFuZCBlbmNsb3NlIHRoZSByZXNwb25zZSBkYXRhOyBvciBpdCBtaWdodAorICAgc2VuZCBh IDMwMiBGb3VuZCBlcnJvciB3aGljaCBpbmRpY2F0ZXMgdGhhdCB0aGUgIkxvY2F0aW9uOiIgaGVh ZGVyCisgICBzaG91bGQgYmUgdXNlZCB0byBkZXRlcm1pbmUgdGhlIFVSTCBhdCB3aGljaCB0aGUg ZGF0YSBjYW4gYmUgZm91bmQuCisKKzIuMi41LiBIVFRQIFZhcmlhYmxlcworCisgICBcdihodHRw X2NvZGUpCisgICAgICAgICAgVGhlIEhUVFAgcHJvdG9jb2wgY29kZSBudW1iZXIgb2YgdGhlIG1v c3QgcmVjZW50IHNlcnZlciByZXBseSwKKyAgICAgICAgICBlLmcuIDQwNCBmb3IgIm5vdCBmb3Vu ZCIuCisKKyAgIFx2KGh0dHBfY29ubmVjdGVkKQorICAgICAgICAgIDEgd2hlbiBhbiBIVFRQIGNv bm5lY3Rpb24gaXMgb3BlbiwgMCB3aGVuIHRoZXJlIGlzIG5vIEhUVFAKKyAgICAgICAgICBjb25u ZWN0aW9uLgorCisgICBcdihodHRwX2hvc3QpCisgICAgICAgICAgSWYgYW4gSFRUUCBjb25uZWN0 aW9uIGlzIG9wZW4sIHRoZSBob3N0bmFtZTpwb3J0LCBlLmcuCisgICAgICAgICAgd3d3LmNvbHVt YmlhLmVkdTo4MDsgb3RoZXJ3aXNlLCBlbXB0eS4KKworICAgXHYoaHR0cF9tZXNzYWdlKQorICAg ICAgICAgIFNlcnZlciBlcnJvciBtZXNzYWdlLCBpZiBhbnksIGZyb20gbW9zdCByZWNlbnQgSFRU UCBjb21tYW5kLgorCisgICBcdihodHRwX3NlY3VyaXR5KQorICAgICAgICAgIEEgbGlzdCBvZiB0 aGUgc2VjdXJpdHkgcGFyYW1ldGVycyBhbmQgdmFsdWVzIGZvciB0aGUgY3VycmVudAorICAgICAg ICAgIGNvbm5lY3Rpb24sIGlmIGFueS4gRW1wdHkgaWYgdGhlIGNvbm5lY3Rpb24gaXMgbm90IHRv IGEgc2VjdXJlCisgICAgICAgICAgc2VydmVyLCBvciB0aGVyZSBpcyBubyBjb25uZWN0aW9uLgor CisgICBUbyBkaXNwbGF5IGFsbCB0aGUgSFRUUCB2YXJpYWJsZXMgYXQgb25jZSwgdHlwZSBTSE9X IFZBUiBIVFRQOgorCisgIEMtS2VybWl0PiBodHRwIG9wZW4gd3d3LmNvbHVtYmlhLmVkdQorICBD LUtlcm1pdD4gaHR0cCBnZXQgbGtqbGtqbGtqbGtqCisgIEMtS2VybWl0PiBzaG8gdmFyIGh0dHAK KyAgIFx2KGh0dHBfY29kZSkgPSA0MDQKKyAgIFx2KGh0dHBfY29ubmVjdGVkKSA9IDEKKyAgIFx2 KGh0dHBfaG9zdCkgPSB3d3cuY29sdW1iaWEuZWR1OjgwCisgICBcdihodHRwX21lc3NhZ2UpID0g Tm90IEZvdW5kCisgICBcdihodHRwX3NlY3VyaXR5KSA9IE5VTEwKKyAgQy1LZXJtaXQ+CisKKzIu Mi42LiBUaGUgSFRUUCBDb21tYW5kLUxpbmUgUGVyc29uYWxpdHkKKworICAgSWYgeW91IGludm9r ZSBDLUtlcm1pdCB3aXRoIHRoZSBuYW1lICJodHRwIiBvciAiaHR0cHMiLCB5b3UgY2FuIHVzZSBh CisgICBzcGVjaWFsIHNldCBvZiBIVFRQLXNwZWNpZmljIGNvbW1hbmQtbGluZSBvcHRpb25zLiBZ b3UgY2FuIGRvIHRoaXMgYnkKKyAgIGNyZWF0aW5nIGEgc3ltYm9saWMgbGlua2UgImh0dHAiIG9y ICJodHRwcyIgdG8gdGhlIEMtS2VybWl0IDguMAorICAgZXhlY3V0YWJsZSwgb3IgYnkgaGF2aW5n IGEgc2VwYXJhdGUgY29weSBvZiBpdCBjYWxsZWQgImh0dHAiIG9yCisgICAiaHR0cHMiLiBIZXJl J3MgdGhlIHVzYWdlIG1lc3NhZ2UgKCJodHRwIC1oIik6CisKKyAgVXNhZ2U6IC4vaHR0cCBob3N0 IFsgb3B0aW9ucy4uLiBdCisgICAtaCAgICAgICAgICAgICBUaGlzIG1lc3NhZ2UuCisgICAtZCAg ICAgICAgICAgICBEZWJ1ZyB0byBkZWJ1Zy5sb2cuCisgICAtUyAgICAgICAgICAgICBTdGF5IChp c3N1ZSBjb21tYW5kIHByb21wdCB3aGVuIGRvbmUpLgorICAgLVkgICAgICAgICAgICAgRG8gbm90 IGV4ZWN1dGUgS2VybWl0IGluaXRpYWxpemF0aW9uIGZpbGUuCisgICAtcSAgICAgICAgICAgICBR dWlldCAoc3VwcHJlc3MgbW9zdCBtZXNzYWdlcykuCisgICAtdSBuYW1lICAgICAgICBVc2VybmFt ZS4KKyAgIC1QIHBhc3N3b3JkICAgIFBhc3N3b3JkLgorICAgLWcgcGF0aG5hbWUgICAgR2V0IHJl bW90ZSBwYXRobmFtZS4KKyAgIC1wIHBhdGhuYW1lICAgIFB1dCByZW1vdGUgcGF0aG5hbWUuCisg ICAtSCBwYXRobmFtZSAgICBIZWFkIHJlbW90ZSBwYXRobmFtZS4KKyAgIC1sIHBhdGhuYW1lICAg IExvY2FsIHBhdGggZm9yIC1nLCAtcCwgYW5kIC1ILgorICAgLXogb3B0Wz12YWx1ZV0gU2VjdXJp dHkgb3B0aW9ucy4uLgorICAgICAgY2VydD1maWxlICAgQ2xpZW50IGNlcnRpZmljYXRlIGZpbGUK KyAgICAgIGNlcnRzb2sgICAgIEFjY2VwdCBhbGwgY2VydGlmaWNhdGVzCisgICAgICBrZXk9Zmls ZSAgICBDbGllbnQgcHJpdmF0ZSBrZXkgZmlsZQorICAgICAgc2VjdXJlICAgICAgVXNlIFNTTAor ICAgICAgdmVyaWZ5PW4gICAgMCA9IG5vbmUsIDEgPSBwZWVyICwgMiA9IGNlcnRpZmljYXRlIHJl cXVpcmVkCisKKyAgIFRoZSAiaG9zdCIgYXJndW1lbnQgaXMgdGhlIG5hbWUgb2YgYSBXZWIgaG9z dCwgZS5nLiB3d3cuY29sdW1iaWEuZWR1LgorICAgVGhlIGFjdGlvbiBvcHRpb25zIGFyZSAtcCwg LWcsIGFuZCAtSC4gSWYgeW91IGdpdmUgYW4gYWN0aW9uIG9wdGlvbiwKKyAgIEtlcm1pdCBkb2Vz IHRoZSBhY3Rpb24gYW5kIHRoZW4gZXhpdHMuIElmIHlvdSBnaXZlIGEgaG9zdCB3aXRob3V0IGFu CisgICBhY3Rpb24gb3B0aW9uLCBLZXJtaXQgbWFrZXMgYW4gSFRUUCBjb25uZWN0aW9uIHRvIHRo ZSBob3N0IGFuZCB0aGVuCisgICBnaXZlcyB5b3UgdGhlIEMtS2VybWl0IHByb21wdC4gSGVyZSdz IGEgc2ltcGxlIGV4YW1wbGUgdGhhdCBmZXRjaGVzIGEKKyAgIHB1YmxpY2x5IHJlYWRhYmxlIFdl YiBwYWdlOgorCisgIGh0dHAgd3d3LmNvbHVtYmlhLmVkdSAtZyBrZXJtaXQvaW5kZXguaHRtbAor CisgICBJZiB5b3UgbmVlZCB0byBhY2Nlc3MgYSB3ZWJzaXRlIGZvciB3aGljaCBhIHVzZXJuYW1l IGFuZCBwYXNzd29yZCBhcmUKKyAgIHJlcXVpcmVkLCB5b3UgY2FuIHN1cHBseSB0aGVtIG9uIHRo ZSBjb21tYW5kIGxpbmUgd2l0aCAtdSBhbmQgLVAuIElmCisgICB5b3UgaW5jbHVkZSBhIHVzZXJu YW1lIGJ1dCBvbWl0IHRoZSBwYXNzd29yZCwgS2VybWl0IHByb21wdHMgeW91IGZvcgorICAgaXQ6 CisKKyAgaHR0cCB3d3cuY29sdW1iaWEuZWR1IC11IG9sZ2EgLXAga2VybWl0L2luZGV4Lmh0bWwg LWwgaW5kZXguaHRtbAorICBQYXNzd29yZDoKKworICAgTm90ZSB0aGF0IHdoZW4gUFVUJ2luZyBm aWxlcyB0byB3ZWJzaXRlcywgeW91IGhhdmUgdG8gc3VwcGx5IGJvdGggdGhlCisgICAtcCAocmVt b3RlIHBhdGhuYW1lKSBhbmQgLWwgKGxvY2FsIHBhdGgpIG9wdGlvbnMuCisKKyAgIElmIHlvdXIg dmVyc2lvbiBvZiBLZXJtaXQgaXMgYnVpbHQgd2l0aCBTU0wvVExTIHNlY3VyaXR5LCB5b3UgY2Fu IGFsc28KKyAgIHVzZSB0aGUgLXogb3B0aW9uIHRvIG1ha2Ugc2VjdXJlIEhUVFAgKGh0dHBzKSBj b25uZWN0aW9ucy4KKworICAgRmluYWxseSwgYXMgbm90ZWQgaW4gWzE5NV1TZWN0aW9uIDE2LCB5 b3UgY2FuIGFsc28gZ2l2ZSBhIFVSTCBpbnN0ZWFkCisgICBvZiBhIGhvc3QgbmFtZSBhbmQgb3B0 aW9ucy4KKworICAgWyBbMTk2XVRvcCBdIFsgWzE5N11Db250ZW50cyBdIFsgWzE5OF1DLUtlcm1p dCBIb21lIF0gWyBbMTk5XUtlcm1pdAorICAgSG9tZSBdCisKKzMuIEtFUk1JVCdTIEJVSUxULUlO IEZUUCBDTElFTlQKKworICAgICAzLjEuICBbMjAwXU1ha2luZyBhbmQgTWFuYWdpbmcgRlRQIENv bm5lY3Rpb25zCisgICAgIDMuMi4gIFsyMDFdTWFraW5nIFNlY3VyZSBGVFAgQ29ubmVjdGlvbnMK KyAgICAgMy4zLiAgWzIwMl1TZXR0aW5nIEZUUCBQcmVmZXJlbmNlcworICAgICAzLjQuICBbMjAz XU1hbmFnaW5nIERpcmVjdG9yaWVzIGFuZCBGaWxlcworICAgICAzLjUuICBbMjA0XVVwbG9hZGlu ZyBGaWxlcyBXaXRoIEZUUAorICAgICAzLjYuICBbMjA1XURvd25sb2FkaW5nIEZpbGVzIFdpdGgg RlRQCisgICAgIDMuNy4gIFsyMDZdVHJhbnNsYXRpbmcgQ2hhcmFjdGVyIFNldHMKKyAgICAgMy44 LiAgWzIwN11GVFAgQ29tbWFuZCBTaG9ydGN1dHMKKyAgICAgMy45LiAgWzIwOF1EdWFsIFNlc3Np b25zCisgICAgIDMuMTAuIFsyMDldQXV0b21hdGluZyBGVFAgU2Vzc2lvbnMKKyAgICAgMy4xMS4g WzIxMF1BZHZhbmNlZCBGVFAgUHJvdG9jb2wgRmVhdHVyZXMKKworICAgRWFybGllciB2ZXJzaW9u cyBvZiBDLUtlcm1pdCBhbmQgSzk1IGluY2x1ZGVkIGFuIEZUUCBjb21tYW5kLCBidXQgaXQKKyAg IHNpbXBseSBpbnZva2VkIGFuIGV4dGVybmFsIEZUUCBjbGllbnQuIE5vdywgYnkgcG9wdWxhciBk ZW1hbmQsIEtlcm1pdAorICAgaW5jbHVkZXMgaXRzIG93biBidWlsdC1pbiBGVFAgY2xpZW50IHRo YXQgb2ZmZXJzIHRoZSBmb2xsb3dpbmcKKyAgIGFkdmFudGFnZXMgb3ZlciB0cmFkaXRpb25hbCBG VFAgY2xpZW50cyAoYW5kIGl0cyBwcmV2aW91cyBpbnRlcmZhY2UgdG8KKyAgIHRoZW0pOgorCisg ICAgICogQW55IG9mIEtlcm1pdCdzIGJ1aWx0LWluIFsyMTFdc2VjdXJpdHkgbWV0aG9kcyBjYW4g YmUgdXNlZCB0bworICAgICAgIGVzdGFibGlzaCBhbmQgY29uZHVjdCBzZWN1cmUgRlRQIHNlc3Np b25zIHdpdGggWzIxMl1GVFAgc2VydmVycworICAgICAgIHRoYXQgc3VwcG9ydCB0aGVzZSBtZXRo b2RzLiAoU2VjdXJpdHkgbW9kdWxlcyBjYW4gYmUgc3ViamVjdCB0bworICAgICAgIGV4cG9ydCBy ZXN0cmljdGlvbnMuKQorICAgICAqIEtlcm1pdCdzIEZUUCBjbGllbnQgdXNlcyAicGFzc2l2ZSBt b2RlIiBieSBkZWZhdWx0IHRvIGF2b2lkCisgICAgICAgYmxvY2thZ2UgYnkgZmlyZXdhbGxzIGFu ZCBuZXR3b3JrIGFkZHJlc3MgdHJhbnNsYXRvcnMuIE9mIGNvdXJzZQorICAgICAgIGFjdGl2ZSBt b2RlIGNhbiBiZSBjaG9zZW4gdG9vIHdoZW4gbmVlZGVkLgorICAgICAqIFsyMTNdQ2hhcmFjdGVy IHNldHMgY2FuIGJlIHRyYW5zbGF0ZWQgYXMgcGFydCBvZiB0aGUgdHJhbnNmZXIKKyAgICAgICBw cm9jZXNzIGV2ZW4gd2hlbiB0aGUgRlRQIHNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IGNoYXJhY3Rl ci1zZXQKKyAgICAgICB0cmFuc2xhdGlvbiwgaW5jbHVkaW5nIHRvL2Zyb20gdGhlIG5ldyBJbnRl cm5ldCBzdGFuZGFyZAorICAgICAgIGludGVybmF0aW9uYWwgY2hhcmFjdGVyIHNldCwgWzIxNF1V bmljb2RlIFVURi04LiBUaGlzIGluY2x1ZGVzIGJvdGgKKyAgICAgICB0aGUgZmlsZSdzIG5hbWUg YW5kIChmb3IgdGV4dCBmaWxlcyBvbmx5KSBpdHMgY29udGVudHMuCisgICAgICogQWxsIG9mIEMt S2VybWl0J3MgWzIxNV1maWxlLXNlbGVjdGlvbiBtZWNoYW5pc21zIGFyZSBhdmFpbGFibGU6Cisg ICAgICAgc2l6ZSwgZGF0ZSwgbmFtZSBwYXR0ZXJucyBhbmQgbGlzdHMsIGV4Y2VwdGlvbiBsaXN0 cywgZXRjLgorICAgICAqIFsyMTZdQXRvbWljIGZpbGUgbW92ZW1lbnQgY2FwYWJpbGl0aWVzIGFy ZSBwcm92aWRlZCAoZGVsZXRlLCBtb3ZlLAorICAgICAgIG9yIHJlbmFtZSBmaWxlcyBhdXRvbWF0 aWNhbGx5IGFmdGVyIHN1Y2Nlc3NmdWwgdHJhbnNmZXIpLgorICAgICAqIFRoZSBjb3JyZWN0IGZp bGUgdHlwZSwgImFzY2lpIiAoaS5lLiB0ZXh0KSBvciBiaW5hcnksIGlzIGNob3NlbgorICAgICAg IGF1dG9tYXRpY2FsbHkgZm9yIGVhY2ggZmlsZSAoZXhwbGFpbmVkIGluIFsyMTddU2VjdGlvbiA0 KSwgYW5kIGFueQorICAgICAgIG1peHR1cmUgb2YgdGV4dCBhbmQgYmluYXJ5IGZpbGVzIGNhbiBi ZSBzZW50IGluIGEgc2luZ2xlIG9wZXJhdGlvbiwKKyAgICAgICBldmVuIGFjcm9zcyBwbGF0Zm9y bXMuCisgICAgICogVXBkYXRlIG1vZGUgKCJkb24ndCBib3RoZXIgdHJhbnNmZXJyaW5nIGZpbGVz IHRoYXQgZGlkbid0IGNoYW5nZQorICAgICAgIHNpbmNlIGxhc3QgdGltZSIpIGFuZCByZWNvdmVy eSAocmVzdW1wdGlvbiBvZiBhbiBpbnRlcnJ1cHRlZAorICAgICAgIHRyYW5zZmVyIGZyb20gdGhl IHBvaW50IG9mIGZhaWx1cmUpIGFyZSBhdmFpbGFibGUgaW4gYm90aAorICAgICAgIGRpcmVjdGlv bnMuCisgICAgICogV2hlbiB1cGxvYWRpbmcgZmlsZXMgZnJvbSBVTklYIHRvIFVOSVgsIHRoZSBm aWxlJ3MgcGVybWlzc2lvbnMgY2FuCisgICAgICAgYmUgcHJlc2VydmVkIGlmIGRlc2lyZWQuCisg ICAgICogUmVjdXJzaXZlIGRpcmVjdG9yeS10cmVlIFBVVHMgYXJlIHN1cHBvcnRlZCBiZXR3ZWVu IGFueSB0d28KKyAgICAgICBwbGF0Zm9ybXMgdGhhdCBoYXZlIHRyZWUtc3RydWN0dXJlZCBmaWxl IHN5c3RlbXMuIFJlY3Vyc2l2ZSBHRVRzCisgICAgICAgYXJlIHN1cHBvcnRlZCBiZXR3ZWVuIGxp a2UgcGxhdGZvcm1zIGlmIHRoZSBzZXJ2ZXIgY29vcGVyYXRlcyBhbmQKKyAgICAgICBiZXR3ZWVu IGxpa2Ugb3IgdW5saWtlIHBsYXRmb3JtcyBpZiB0aGUgc2VydmVyIHN1cHBvcnRzIE1MU0QKKyAg ICAgICAoWzIxOF1TZWN0aW9uIDMuMTEpLgorICAgICAqIFdoZW4gcmVjZWl2aW5nIGZpbGVzLCBh bGwgb2YgS2VybWl0J3MgZmlsZSBjb2xsaXNpb24gYWN0aW9ucyBhcmUKKyAgICAgICBhdmFpbGFi bGU6IGJhY2t1cCwgdXBkYXRlLCByZWZ1c2UsIHJlbmFtZSwgZXRjLgorICAgICAqIE11bHRpLWZp bGUgdHJhbnNmZXJzIGNhbiBiZSBpbnRlcnJ1cHRlZCBvbiBhIHBlci1maWxlIGJhc2lzLAorICAg ICAgIGF1dG9tYXRpY2FsbHkgc2tpcHBpbmcgdG8gdGhlIG5leHQgZmlsZS4KKyAgICAgKiBGVFAg c2Vzc2lvbnMgYXJlIFsyMTldZnVsbHkgc2NyaXB0YWJsZS4KKyAgICAgKiBBbiBlbnRpcmUgRlRQ IHNlc3Npb24gKGNvbm5lY3QsIGxvZ2luLCBDRCwgdXBsb2FkIG9yIGRvd25sb2FkLAorICAgICAg IGxvZ291dCkgY2FuIGJlIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lIHdpdGhvdXQgdXNp bmcgYQorICAgICAgIHNjcmlwdC4KKyAgICAgKiBBbGwgb2YgS2VybWl0J3MgbG9nZ2luZyBvcHRp b25zIGFuZCBmb3JtYXRzIGFyZSBhdmFpbGFibGUgdG8ga2VlcAorICAgICAgIGFuIGFjY3VyYXRl IGFuZCBjb21wbGV0ZSByZWNvcmQgb2YgZWFjaCBjb25uZWN0aW9uIGFuZCBmaWxlCisgICAgICAg dHJhbnNmZXIsIGFuZCB0byBhaWQgaW4gdHJvdWJsZXNob290aW5nLgorICAgICAqIEFsbCBvZiBL ZXJtaXQncyBmaWxlLXRyYW5zZmVyIGRpc3BsYXkgb3B0aW9ucyBhcmUgYXZhaWxhYmxlCisgICAg ICAgKGZ1bGxzY3JlZW4sIGJyaWVmLCBDUlQsIHNlcmlhbCwgbm9uZSkuCisKKyAgIEFuZCBiZXN0 IG9mIGFsbDoKKyAgICAgKiBLZXJtaXQgZG9lc24ndCBnaXZlIHlvdSB0aG9zZSBhbm5veWluZyBw ZXItZmlsZSBwcm9tcHRzIGV2ZXJ5IHRpbWUKKyAgICAgICB5b3Ugc3RhcnQgYSBtdWx0aS1maWxl IHRyYW5zZmVyIHdpdGhvdXQgcmVtZW1iZXJpbmcgdG8gZ2l2ZSBhCisgICAgICAgInByb21wdCIg Y29tbWFuZCBmaXJzdCA6LSkuCisKKyAgIFsgWzIyMF1Ub3AgXSBbIFsyMjFdRlRQIFRvcCBdIFsg WzIyMl1GVFAgQ2xpZW50IE92ZXJ2aWV3IF0gWyBbMjIzXUZUUAorICAgU2NyaXB0IFR1dG9yaWFs IF0gWyBbMjI0XUMtS2VybWl0IEhvbWUgXSBbIFsyMjVdS2VybWl0IEhvbWUgXQorCiszLjEuIE1h a2luZyBhbmQgTWFuYWdpbmcgRlRQIENvbm5lY3Rpb25zCisKKyAgIEVhY2ggY29weSBvZiBLZXJt aXQgY2FuIGhhdmUgb25lIEZUUCBjb25uZWN0aW9uIG9wZW4gYXQgYSB0aW1lLiBGVFAKKyAgIGNv bm5lY3Rpb25zIGFyZSBpbmRlcGVuZGVudCBvZiByZWd1bGFyIHRlcm1pbmFsIGNvbm5lY3Rpb25z OyBhIHRlcm1pbmFsCisgICBjb25uZWN0aW9uIChzZXJpYWwgb3IgbmV0d29yayB2aWEgU0VUIExJ TkUsIERJQUwsIFNFVCBIT1NULCBURUxORVQsCisgICBldGMpIG1heSBiZSwgYnV0IG5lZWQgbm90 IGJlLCBvcGVuIGF0IHRoZSBzYW1lIHRpbWUgYXMgYW4gRlRQCisgICBjb25uZWN0aW9uLCBhbmQg dGVybWluYWwgY29ubmVjdGlvbnMgY2FuIGFsc28gYmUgY2xvc2VkLCBhbmQgbmV3CisgICBjb25u ZWN0aW9ucyBvcGVuZWQsIHdpdGhvdXQgaW50ZXJmZXJpbmcgd2l0aCB0aGUgRlRQIGNvbm5lY3Rp b24gKGFuZAorICAgdmljZSB2ZXJzYSkuIFRodXMsIGZvciBleGFtcGxlLCBLZXJtaXQgY2FuIGhh dmUgYW4gRlRQIGNvbm5lY3Rpb24gYW5kIGEKKyAgIFRFTE5FVCBjb25uZWN0aW9uIG9wZW4gdG8g dGhlIHNhbWUgaG9zdCBzaW11bHRhbmVvdXNseSwgdXNpbmcgdGhlCisgICBURUxORVQgY29ubmVj dGlvbiAoZS5nLikgdG8gc2VuZCBtYWlsIG9yIHRha2Ugb3RoZXIgZGVzaXJlZCBhY3Rpb25zIGFz CisgICB2YXJpb3VzIEZUUCBhY3Rpb25zIGNvbXBsZXRlLiBPZiBjb3Vyc2UsIGVhY2ggY29weSBv ZiBLZXJtaXQgY2FuIGRvCisgICBvbmx5IG9uZSB0aGluZyBhdCBhIHRpbWUsIHNvIGl0IGNhbid0 IChmb3IgZXhhbXBsZSkgdHJhbnNmZXIgYSBmaWxlCisgICB3aXRoIEZUUCBhbmQgYW5vdGhlciBm aWxlIHdpdGggS2VybWl0IHByb3RvY29sIHNpbXVsdGFuZW91c2x5LgorCisgICBBIEtlcm1pdCBG VFAgc2Vzc2lvbiBjYW4gYmUgZXN0YWJsaXNoZWQgYnkgWzIyNl1jb21tYW5kLWxpbmUgb3B0aW9u cywKKyAgIGJ5IFsyMjddVVJMLCBvciBieSBbMjI4XWludGVyYWN0aXZlIGNvbW1hbmRzLgorCisz LjEuMS4gS2VybWl0IENvbW1hbmQtTGluZSBPcHRpb25zIGZvciBGVFAKKworICAgVGhlIG5ldyBj b21tYW5kLWxpbmUgb3B0aW9uICctOScgKHNvcnJ5LCB3ZSdyZSBvdXQgb2YgbGV0dGVycykgY2Fu IGJlCisgICB1c2VkIHdoZW4gc3RhcnRpbmcgQy1LZXJtaXQsIHRlbGxpbmcgaXQgdG8gbWFrZSBh biBGVFAgY29ubmVjdGlvbjoKKworICBrZXJtaXQgLTkgaG9zdG5hbWUKKworICAgb3IgaWYgYSBu b24tZGVmYXVsdCBGVFAgcG9ydCBpcyBuZWVkZWQ6CisKKyAga2VybWl0IC05IGhvc3RuYW1lOnBv cnQKKworICAgWW91IGNhbiBhbHNvIHNwZWNpZnkgdGhlIHVzZXJuYW1lIG9uIHRoZSBjb21tYW5k IGxpbmUgd2l0aCB0aGUgLU0gKCJNeQorICAgVXNlciBJRCIpIG9wdGlvbiB0aGF0IHdhcyBhbHJl YWR5IHRoZXJlIGZvciBvdGhlciBjb25uZWN0aW9uIHR5cGVzOgorCisgIGtlcm1pdCAtOSBob3N0 bmFtZSAtTSBvbGdhCisKKyAgIElmIHlvdSBzcGVjaWZ5IHRoZSB1c2VybmFtZSBvbiB0aGUgY29t bWFuZCBsaW5lLCBLZXJtaXQgdXNlcyBpdCB3aGVuCisgICBtYWtpbmcgdGhlIGNvbm5lY3Rpb24g YW5kIGRvZXMgbm90IHByb21wdCB5b3UgZm9yIGl0IChidXQgaXQgZG9lcworICAgcHJvbXB0IHlv dSBmb3IgdGhlIHBhc3N3b3JkIGlmIG9uZSBpcyByZXF1aXJlZCkuCisKKyAgIE9uY2UgdGhlIGNv bm5lY3Rpb24gaXMgbWFkZSwgeW91IGdldCB0aGUgcmVndWxhciBLZXJtaXQgcHJvbXB0LCBhbmQg Y2FuCisgICBnaXZlIGludGVyYWN0aXZlIGNvbW1hbmRzIHN1Y2ggYXMgdGhlIG9uZXMgZGVzY3Jp YmVkIGJlbG93LiBXaGVuIHlvdQorICAgZ2l2ZSBhIEJZRSBjb21tYW5kLCBLZXJtaXQgY2xvc2Vz IHRoZSBzZXNzaW9uIGFuZCBleGl0cywganVzdCBhcyBhCisgICByZWd1bGFyIEZUUCBjbGllbnQg d291bGQgZG8uIElmIHlvdSBkb24ndCB3YW50IEtlcm1pdCB0byBleGl0IHdoZW4geW91CisgICBn aXZlIGEgQllFIGNvbW1hbmQsIGluY2x1ZGUgdGhlIC1TICgiU3RheSIpIG9wdGlvbiBvbiB0aGUg Y29tbWFuZCBsaW5lLgorCisgICBPdGhlciBLZXJtaXQgY29tbWFuZC1saW5lIG9wdGlvbnMgdGhh dCBhcmUgbm90IHNwZWNpZmljIHRvIG5vbi1GVFAKKyAgIGNvbm5lY3Rpb25zIHNob3VsZCBhZmZl Y3QgdGhlIEZUUCBzZXNzaW9uIGluIHRoZSBleHBlY3RlZCB3YXlzOyBmb3IKKyAgIGV4YW1wbGUs IC1pIGFuZCAtVCBmb3JjZSBiaW5hcnkgYW5kIHRleHQgbW9kZSB0cmFuc2ZlcnMsIHJlc3BlY3Rp dmVseS4KKworICAgRmlsZSB0cmFuc2ZlcnMgY2FuIG5vdCBiZSBpbml0aWF0ZWQgb24gdGhlICJr ZXJtaXQgLTkiIGNvbW1hbmQgbGluZTsKKyAgIGZvciB0aGF0IHlvdSBuZWVkIHRvIHVzZSBLZXJt aXQncyBGVFAgcGVyc29uYWxpdHkgKG5leHQgc2VjdGlvbikgb3IgeW91CisgICBjYW4gdXNlIFVS THMgKFsyMjldU2VjdGlvbiAzLjEuMykuCisKKzMuMS4yLiBUaGUgRlRQIENvbW1hbmQtTGluZSBQ ZXJzb25hbGl0eQorCisgICBJZiB5b3Ugd2FudCB0byByZXBsYWNlIHlvdXIgcmVndWxhciBGVFAg Y2xpZW50IHdpdGggQy1LZXJtaXQsIHlvdSBjYW4KKyAgIG1ha2UgYSBsaW5rIGNhbGxlZCAiZnRw IiB0byB0aGUgQy1LZXJtaXQgYmluYXJ5IChvciB5b3UgY2FuIHN0b3JlIGEKKyAgIGNvcHkgb2Yg dGhlIEMtS2VybWl0IGJpbmFyeSB1bmRlciB0aGUgbmFtZSAiZnRwIikuIFdoZW4gQy1LZXJtaXQg aXMKKyAgIGludm9rZWQgd2l0aCBhIHByb2dyYW0gbmFtZSBvZiAiZnRwIiAob3IgIkZUUCIsIGNh c2UgZG9lc24ndCBtYXR0ZXIpLAorICAgaXQgYXNzdW1lcyB0aGUgY29tbWFuZC1saW5lIHBlcnNv bmFsaXR5IG9mIHRoZSByZWd1bGFyIEZUUCBjbGllbnQ6CisKKyAgZnRwIFsgb3B0aW9ucyBdIGhv c3RuYW1lIFsgcG9ydCBdCisKKyAgIEluIHRoaXMgY2FzZSB0aGUgb3B0aW9ucyBhcmUgbGlrZSB0 aG9zZSBvZiBhIHJlZ3VsYXIgRlRQIGNsaWVudDoKKworICAtZCAgRGVidWc6IGVuYWJsZXMgZGVi dWcgbWVzc2FnZXMgYW5kIGNyZWF0ZXMgYSBkZWJ1Zy5sb2cgZmlsZS4KKyAgLW4gIE5vIGF1dG9s b2dpbjogS2VybWl0IHNob3VsZCBub3Qgc2VuZCB5b3VyIHVzZXIgSUQgYXV0b21hdGljYWxseS4K KyAgLXQgIFBhY2tldCB0cmFjZTogYWNjZXB0ZWQgYnV0IGlzIHRyZWF0ZWQgdGhlIHNhbWUgYXMg LWQuCisgIC12ICBWZXJib3NlOiBhY2NlcHRlZCBidXQgaWdub3JlZCAob3BlcmF0aW9uIGlzIHZl cmJvc2UgYnkgZGVmYXVsdCkuCisgIC1pICBOb3QgaW50ZXJhY3RpdmU6IGFjY2VwdGVkIGJ1dCBp Z25vcmVkLgorCisgICBhbmQgdGhlIGhvc3RuYW1lIGNhbiBhbHNvIGJlIGEgVVJMIChleHBsYWlu ZWQgaW4gWzIzMF1TZWN0aW9uIDMuMS4zKS4KKyAgIFRvIHNwZWNpZnkgYSBub24tZGVmYXVsdCBU Q1AgcG9ydCBmb3IgdGhlIEZUUCBzZXJ2ZXIsIGluY2x1ZGUgdGhlIHBvcnQKKyAgIG51bWJlciBv ciBuYW1lIGFmdGVyIHRoZSBob3N0bmFtZS4KKworICAgVGhlcmUgYXJlIGFsc28gc29tZSBib251 cyBvcHRpb25zIHRoYXQgYWxsb3cgeW91IHRvIGV4ZWN1dGUgYW4gZW50aXJlCisgICBGVFAgc2Vz c2lvbiBmcm9tIHRoZSBzaGVsbCBjb21tYW5kIGxpbmUsIGFzIGxvbmcgYXMgeW91IGRvbid0IGlu Y2x1ZGUKKyAgIHRoZSAtbiBvcHRpb24uIFRoZXNlIGFyZSBub3QgYXZhaWxhYmxlIHdpdGggcmVn dWxhciBGVFAgY2xpZW50cywgYW5kIGF0CisgICBsZWFzdCBvbmUgb2YgdGhlc2Ugb3B0aW9ucyAo LWcpIGNvbmZsaWN0cyB3aXRoIFVOSVggZnRwICh3aGVyZSAtZyBtZWFucworICAgIm5vIGdsb2Ji aW5nIiwgd2hpY2ggZG9lcyBub3QgYXBwbHkgdG8gS2VybWl0KSwgYW5kIHNvbWUgb2YgdGhlbSAo bGlrZQorICAgdGhlIG9wdGlvbnMgYWJvdmUpIGFsc28gY29uZmxpY3Qgd2l0aCByZWd1bGFyIEtl cm1pdCBjb21tYW5kLWxpbmUKKyAgIG9wdGlvbnM6CisKKyAgLW0gbW9kZSAgICAgID0gInBhc3Np dmUiIChkZWZhdWx0KSBvciAiYWN0aXZlIgorICAtWSAgICAgICAgICAgIERvbid0IGV4ZWN1dGUg dGhlIEtlcm1pdCBpbml0aWFsaXphdGlvbiBmaWxlIFsxXQorICAtcSAgICAgICAgICAgIFF1aWV0 LCBzdXBwcmVzc2VzIGFsbCBidXQgZXJyb3IgbWVzc2FnZXMgWzFdCisgIC1TICAgICAgICAgICAg U3RheSwgZG9uJ3QgZXhpdCBhdXRvbWF0aWNhbGx5IFsxXQorICAtQSAgICAgICAgICAgIEF1dG9s b2dpbiBhbm9ueW1vdXNseSBbMl0KKyAgLXUgbmFtZSAgICAgICBVc2VybmFtZSBmb3IgYXV0b2xv Z2luIFsyXSAoc3lub255bTogLU0gWzFdKQorICAtUCBwYXNzd29yZCAgIFBhc3N3b3JkIGZvciBh dXRvbG9naW4gKHNlZSBjYXV0aW9ucyBiZWxvdykgWzJdCisgIC1EIGRpcmVjdG9yeSAgY2QgYWZ0 ZXIgYXV0b2xvZ2luIFsyXQorICAtYiAgICAgICAgICAgIEJpbmFyeSBtb2RlIFsyXQorICAtYSAg ICAgICAgICAgIFRleHQgKCJhc2NpaSIpIG1vZGUgWzJdIChzeW5vbnltOiAtVCBbMV0pCisgIC1S ICAgICAgICAgICAgUmVjdXJzaXZlICh3b3JrcyB3aXRoIC1wKSBbNF0KKyAgLXAgZmlsZXMgICAg ICBGaWxlcyB0byBwdXQgKHVwbG9hZCkgYWZ0ZXIgYXV0b2xvZ2luIFsyXSAoc3lub255bTogLXMg WzFdKQorICAtZyBmaWxlcyAgICAgIEZpbGVzIHRvIGdldCAoZG93bmxvYWQpIGFmdGVyIGF1dG9s b2dpbiBbM10KKworICAgWzFdIFNhbWUgYXMgS2VybWl0LCBub3QgYXZhaWxhYmxlIGluIHJlZ3Vs YXIgRlRQIGNsaWVudHMuCisgICBbMl0gQ29uZmxpY3RzIHdpdGggS2VybWl0LCBub3QgYXZhaWxh YmxlIGluIHJlZ3VsYXIgRlRQIGNsaWVudHMuCisgICBbM10gU2FtZSBhcyBLZXJtaXQsIGNvbmZs aWN0cyB3aXRoIHJlZ3VsYXIgRlRQIGNsaWVudHMuCisgICBbNF0gQ29uZmxpY3RzIHdpdGggS2Vy bWl0LCBhdmFpbGFibGUgaW4gc29tZSBGVFAgY2xpZW50cy4KKworICAgRmFuY2llciBvcHRpb25z IHN1Y2ggYXMgcmVzdGFydCwgY2hhcmFjdGVyLXNldCB0cmFuc2xhdGlvbiwgZmlsZW5hbWUKKyAg IGNvbGxpc2lvbiBzZWxlY3Rpb24sIGF1dG9tYXRpYyBtb3ZlL3JlbmFtZS9kZWxldGUsIGV0Yywg YXJlIG5vdAorICAgYXZhaWxhYmxlIGZyb20gdGhlIGNvbW1hbmQgbGluZTsgZm9yIHRoZXNlIHlv dSBjYW4gdXNlIHRoZSBjb21tYW5kcworICAgZGVzY3JpYmVkIGluIHRoZSBmb2xsb3dpbmcgc2Vj dGlvbnMuIFRoZSAtUiBvcHRpb24gbWlnaHQgYWxzbyB3b3JrIHdpdGgKKyAgIC1nIChHRVQpIGJ1 dCB0aGF0IGRlcGVuZHMgb24gdGhlIHNlcnZlci4KKworICAgVGhlIGZvbGxvd2luZyBzZWN1cml0 eSBvcHRpb25zIGFyZSBhbHNvIGF2YWlsYWJsZSwgZXhwbGFpbmVkIGluCisgICBbMjMxXVNlY3Rp b24gMy4yOgorCisgIC1rIHJlYWxtICAgICAgS2VyYmVyb3MgNCByZWFsbSBbNF0KKyAgLWYgICAg ICAgICAgICBLZXJiZXJvcyA1IGNyZWRlbnRpYWxzIGZvcndhcmRpbmcgWzRdCisgIC14ICAgICAg ICAgICAgYXV0b2VuY3J5cHRpb24gbW9kZSBbNF0KKyAgLWMgY2lwaGVyICAgICBTUlAgY2lwaGVy IHR5cGUgWzRdCisgIC1IIGhhc2ggICAgICAgU1JQIGVuY3J5cHRpb24gaGFzaCBbNF0KKyAgLXog b3B0aW9uICAgICBTZWN1cml0eSBvcHRpb25zIFs0XQorCisgICBJZiB5b3UgaW5jbHVkZSAtQSBv ciBzcGVjaWZ5IGEgbmFtZSBvZiAiYW5vbnltb3VzIiBvciAiZnRwIiwgeW91IGFyZQorICAgbG9n Z2VkIGluIGFub255bW91c2x5IGFuZCwgaW4gdGhlIGFic2VuY2Ugb2YgLVAsIEtlcm1pdCBhdXRv bWF0aWNhbGx5CisgICBzdXBwbGllcyBhIHBhc3N3b3JkIG9mICJ1c2VyQGhvc3QiLCB3aGVyZSAi dXNlciIgaXMgeW91ciBsb2NhbCB1c2VyIElELAorICAgYW5kICJob3N0IiBpcyB0aGUgaG9zdG5h bWUgb2YgdGhlIGNvbXB1dGVyIHdoZXJlIEtlcm1pdCBpcyBydW5uaW5nLiBJZgorICAgeW91IGRv IG5vdCBpbmNsdWRlIC1wIG9yIC1nLCBLZXJtaXQgZW50ZXJzIGNvbW1hbmQgbW9kZSBzbyB5b3Ug Y2FuIHR5cGUKKyAgIGNvbW1hbmRzIG9yIGV4ZWN1dGUgdGhlbSBmcm9tIGEgc2NyaXB0LgorCisg ICBJZiB5b3UgaW5jbHVkZSAtcCBvciAtZywgS2VybWl0IGF0dGVtcHRzIHRvIHRyYW5zZmVyIHRo ZSBzcGVjaWZpZWQKKyAgIGZpbGVzIGFuZCB0aGVuIGV4aXRzIGF1dG9tYXRpY2FsbHkgYXQgdGhl IGVuZCBvZiB0aGUgdHJhbnNmZXIgdW5sZXNzCisgICB5b3UgYWxzbyBpbmNsdWRlZCAtUyAoU3Rh eSkuIEl0IHVzZXMgdGhlICJicmllZiIgZmlsZSB0cmFuc2ZlciBkaXNwbGF5CisgICAob25lIGxp bmUgcGVyIGZpbGUpIHVubGVzcyB5b3UgaW5jbHVkZSB0aGUgLXEgb3B0aW9uIHRvIHN1cHByZXNz IGl0LgorCisgICBXaGVuIHVwbG9hZGluZyBmaWxlcyB3aXRoIC1wLCBLZXJtaXQgc3dpdGNoZXMg YXV0b21hdGljYWxseSBiZXR3ZWVuCisgICB0ZXh0IGFuZCBiaW5hcnkgbW9kZSBmb3IgZWFjaCBm aWxlLgorCisgICBXaGVuIGRvd25sb2FkaW5nLCB5b3UgY2FuIGVpdGhlciBzcGVjaWZ5IGEgcGFy dGljdWxhciBtb2RlICh0ZXh0IG9yCisgICBiaW5hcnkpIHRvIGJlIHVzZWQgZm9yIGFsbCB0aGUg ZmlsZXMsIG9yIHlvdSBjYW4gbGV0IEtlcm1pdCBzZWxlY3QgdGhlCisgICB0eXBlIGZvciBlYWNo IGZpbGUgYXV0b21hdGljYWxseSwgYmFzZWQgb24gaXRzIG5hbWUgKHNlZSBbMjMyXVNlY3Rpb25z CisgICAzLjUgYW5kIFsyMzNdMy42IGZvciBncmVhdGVyIGRldGFpbCkuIEluIFVOSVggYmUgc3Vy ZSB0byBxdW90ZSBhbnkKKyAgIHdpbGRjYXJkIGNoYXJhY3RlcnMgdG8gcHJldmVudCB0aGUgc2hl bGwgZnJvbSBleHBhbmRpbmcgdGhlbSwgYXMgc2hvd24KKyAgIGluIHRoZSBleGFtcGxlcyBqdXN0 IGJlbG93LiBGaWxlbmFtZSBjb2xsaXNpb25zIGFyZSBoYW5kbGVkIGFjY29yZGluZworICAgS2Vy bWl0J3MgRklMRSBDT0xMSVNJT04gc2V0dGluZyAoaWYgc3BlY2lmaWVkIGluIHlvdXIgS2VybWl0 CisgICBjdXN0b21pemF0aW9uIGZpbGU7IG90aGVyd2lzZSB0aGUgZGVmYXVsdCwgd2hpY2ggaXMg QkFDS1VQKS4KKworICAgSXQgc2hvdWxkIGdvIHdpdGhvdXQgc2F5aW5nIHRoYXQgdGhlIC1QIG9w dGlvbiBzaG91bGQgYmUgdXNlZCB3aXRoCisgICBjYXV0aW9uLiBJbiBhZGRpdGlvbiB0byB0aGUg d2VsbC1rbm93biByaXNrcyBvZiB0cmFuc21pdHRpbmcgcGxhaW50ZXh0CisgICBwYXNzd29yZHMg b3ZlciB0aGUgSW50ZXJuZXQsIGluIHRoaXMgY2FzZSB0aGUgcGFzc3dvcmQgYWxzbyBlY2hvcyB0 bworICAgdGhlIHNjcmVlbiBpZiB5b3UgdHlwZSBpdCwgYW5kIGNhbiBiZSBzZWVuIGluIHBzIGFu ZCB3IGxpc3RpbmdzIHRoYXQKKyAgIHNob3cgdGhlIHVzZXIncyBjdXJyZW50bHkgYWN0aXZlIGNv bW1hbmQgYW5kIGNvbW1hbmQtbGluZSBhcmd1bWVudHMuCisgICBUaHVzIGNvbW1hbmQtbGluZSBG VFAgc2Vzc2lvbnMgYXJlIG1vc3QgYXBwcm9wcmlhdGUgZm9yIHNlY3VyZSBvcgorICAgYW5vbnlt b3VzIGNvbm5lY3Rpb25zICh0aG9zZSB0aGF0IGRvIG5vdCByZXF1aXJlIHBhc3N3b3JkcykuCisK KyAgIEhlcmUncyBhbiBleGFtcGxlIGluIHdoaWNoIHlvdSBkb3dubG9hZCB0aGUgbGF0ZXN0IEMt S2VybWl0ICJ0YXJiYWxsIgorICAgZnJvbSB0aGUgQ29sdW1iaWEgVW5pdmVyc2l0eSBGVFAgYXJj aGl2ZToKKworICBmdHAgLUEga2VybWl0LmNvbHVtYmlhLmVkdSAtYmcga2VybWl0L2FyY2hpdmVz L2NrZXJtaXQudGFyLmd6CisKKyAgIFRoaXMgYXNzdW1lcyB0aGF0ICJmdHAiIGlzIGEgc3ltYm9s aWMgbGluayB0byBDLUtlcm1pdC4gSXQgbG9ncyB5b3UgaW4KKyAgIGFub255bW91c2x5IGFuZCBn ZXRzIHRoZSBja2VybWl0LnRhci5neiBmaWxlIGluIGJpbmFyeSBtb2RlIGZyb20gdGhlCisgICBr ZXJtaXQvYXJjaGl2ZXMgZGlyZWN0b3J5LgorCisgICBIZXJlJ3MgYSBzbGlnaHRseSBtb3JlIGFt Yml0aW91cyBleGFtcGxlIHRoYXQgaWxsdXN0cmF0ZXMgQ0QnaW5nIHRvIHRoZQorICAgZGVzaXJl ZCBzZXJ2ZXIgZGlyZWN0b3J5IHRvIGdldCBhIGdyb3VwIG9mIGZpbGVzIGluIHRleHQgbW9kZSAo aW4gdGhpcworICAgY2FzZSB0aGUgQy1LZXJtaXQgc291cmNlIGZpbGVzKToKKworICBmdHAgLUEg a2VybWl0LmNvbHVtYmlhLmVkdSAtRCBrZXJtaXQvZiAtYWcgImNrW2N1d10qLltjd2hdIiBtYWtl ZmlsZQorCisgICBJbiB0aGlzIGNhc2Ugd2UgQ0QgdG8gdGhlIGtlcm1pdC9mIGRpcmVjdG9yeSBz byB3ZSBkb24ndCBoYXZlIHRvCisgICBpbmNsdWRlIGl0IGluIGVhY2ggZmlsZSBzcGVjaWZpY2F0 aW9uLCBhbmQgd2UgcXVvdGUgdGhlIGNrW2N1d10qLltjd2hdCisgICBzcGVjaWZpY2F0aW9uIHNv IHRoZSBzaGVsbCBkb2Vzbid0IGV4cGFuZCBpdCwgc2luY2Ugd2UgaGF2ZSB0byBwYXNzIGl0Cisg ICBhcy1pcyB0byB0aGUgc2VydmVyLiBOb3RlIGFsc28gdGhhdCB0aGUgcXVvdGVzIGRvbid0IGdv IGFyb3VuZCB0aGUKKyAgIGVudGlyZSBmaWxlIGxpc3Q7IG9ubHkgYXJvdW5kIGVhY2ggZmlsZSBz cGVjaWZpY2F0aW9uIHRoYXQgbmVlZHMgdG8gYmUKKyAgIHF1b3RlZC4KKworICAgSGVyZSdzIG9u ZSBtb3JlIGV4YW1wbGUsIHRoYXQgdXBsb2FkcyBhIGRlYnVnIGxvZyBmaWxlIGluIGJpbmFyeSBt b2RlCisgICB0byB0aGUgS2VybWl0IGluY29taW5nIGRpcmVjdG9yeSAoYXMgd2UgbWlnaHQgYXNr IHlvdSB0byBkbyB3aGVuCisgICBmb2xsb3dpbmcgdXAgb24gYSBwcm9ibGVtIHJlcG9ydCk6CisK KyAgZnRwIC1BIGtlcm1pdC5jb2x1bWJpYS5lZHUgLUQga2VybWl0L2luY29taW5nIC1icCBkZWJ1 Zy5sb2cKKworICAgSW4gdGhpcyBjYXNlIHRoZSAtRCBvcHRpb24gaXMgcmVxdWlyZWQgdG8gdGVs bCB0aGUgc2VydmVyIHdoZXJlIHRvIHB1dAorICAgdGhlIGluY29taW5nIGZpbGUuCisKKyAgIFVu bGVzcyB0aGUgLVkgb3B0aW9uIGlzIGluY2x1ZGVkLCB5b3VyIEtlcm1pdCBpbml0aWFsaXphdGlv biBmaWxlCisgICAoLm15a2VybXJjIGluIFVOSVgsIEs5NS5JTkkgaW4gV2luZG93cykgaXMgZXhl Y3V0ZWQgYmVmb3JlIHRoZSBjb21tYW5kCisgICBsaW5lIG9wdGlvbnMsIHNvIHlvdSBjYW4gc2V0 IGFueSBGVFAtcmVsYXRlZCBwcmVmZXJlbmNlcyB0aGVyZSwgYXMKKyAgIGRlc2NyaWJlZCBpbiB0 aGUgc3Vic2VxdWVudCBzZWN0aW9ucy4KKworMy4xLjMuIFRoZSBGVFAgVVJMIEludGVycHJldGVy CisKKyAgIElmIEtlcm1pdCBpcyBpbnZva2VkIHdpdGggZWl0aGVyIGl0cyByZWd1bGFyIHBlcnNv bmFsaXR5IChhcyAia2VybWl0IikKKyAgICAgICAgICBvciBpdHMgRlRQIHBlcnNvbmFsaXR5IChh cyAiZnRwIiksIHlvdSBjYW4gYWxzbyBnaXZlIGEgVVJMCisgICAgICAgICAgKFVuaXZlcnNhbCBS ZXNvdXJjZSBMb2NhdG9yKSBpbnN0ZWFkIG9mIGEgaG9zdG5hbWUgYW5kIG9wdGlvbnMsCisgICAg ICAgICAgd2l0aCBvciB3aXRob3V0IGEgdXNlcm5hbWUgYW5kIHBhc3N3b3JkOgorICAgICAgICAg IGZ0cCBmdHA6Ly91c2VyOnBhc3N3b3JkQGhvc3QvcGF0aAorICAgICAgICAgIGZ0cCBmdHA6Ly91 c2VyQGhvc3QvcGF0aAorICAgICAgICAgIGZ0cCBmdHA6Ly9AaG9zdC9wYXRoICAgKG9yIGZ0cDov LzpAaG9zdC9wYXRoKQorICAgICAgICAgIGZ0cCBmdHA6Ly9ob3N0L3BhdGgKKyAgICAgICAgICBr ZXJtaXQgZnRwOi8vaG9zdC9wYXRoCisKKyAgIElmIHRoZSBGVFAgcGVyc29uYWxpdHkgaXMgdXNl ZCwgdGhlIHNlcnZpY2UgbXVzdCBiZSAiZnRwIi4gSW4gYWxsCisgICBjYXNlcywgYSBob3N0bmFt ZSBvciBhZGRyZXNzIG11c3QgYmUgaW5jbHVkZWQuIElmIGEgdXNlciBpcyBpbmNsdWRlZAorICAg YnV0IG5vIHBhc3N3b3JkLCB5b3UgYXJlIHByb21wdGVkIGZvciB0aGUgcGFzc3dvcmQuIElmIGEg cGF0aAorICAgKGZpbGVuYW1lKSBpcyBpbmNsdWRlZDoKKyAgICAgKiBJZiAiQCIgaXMgaW5jbHVk ZWQgd2l0aG91dCBhIHVzZXIsIEtlcm1pdCBwcm9tcHRzIGZvciB0aGUgdXNlcm5hbWUKKyAgICAg ICBhbmQgcGFzc3dvcmQuCisgICAgICogSWYgbm8gdXNlciBhbmQgbm8gIkAiIGFyZSBpbmNsdWRl ZCwgImFub255bW91cyIgaXMgdXNlZC4KKyAgICAgKiBHRVQgaXMgYXNzdW1lZC4KKworICAgSWYg bm8gcGF0aCAoYW5kIG5vIGFjdGlvbiBvcHRpb25zKSBhcmUgaW5jbHVkZWQsIGFuIGludGVyYWN0 aXZlIEZUUAorICAgICAgICAgIHNlc3Npb24gaXMgc3RhcnRlZCwgYXMgaW4gdGhpcyBleGFtcGxl OgorICAgICAgICAgIGZ0cCBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1CisKKyAgIElmIGEgcGF0 aCBpcyBpbmNsdWRlZCwgYnV0IGEgdXNlcm5hbWUgaXMgbm90IGluY2x1ZGVkLCAiYW5vbnltb3Vz IiBpcworICAgdXNlZCBhbmQgYW4gYXBwcm9wcmlhdGUgdXNlckBob3N0IHBhc3N3b3JkIGlzIHN1 cHBsaWVkIGF1dG9tYXRpY2FsbHkuCisgICBJZiBhdXRoZW50aWNhdGlvbiBpcyBzdWNjZXNzZnVs LCBLZXJtaXQgYXR0ZW1wdHMgdG8gR0VUIHRoZSBmaWxlCisgICBpbmRpY2F0ZWQgYnkgdGhlIHBh dGggb3IsIGlmIHRoZSBwYXRoIGlzIHRoZSBuYW1lIG9mIGEgZGlyZWN0b3J5LCBpdAorICAgYXNr cyB0aGUgc2VydmVyIGZvciBhIGRpcmVjdG9yeSBsaXN0aW5nLiBJbiBib3RoIGNhc2VzLCBLZXJt aXQKKyAgIGRpc2Nvbm5lY3RzIGZyb20gdGhlIHNlcnZlciBhbmQgZXhpdHMgYWZ0ZXIgdGhlIG9w ZXJhdGlvbiBpcyBjb21wbGV0ZQorICAgKHVubGVzcyB5b3UgaGF2ZSBpbmNsdWRlZCB0aGUgLVMg b3B0aW9uIG9uIHRoZSBjb21tYW5kIGxpbmUpLgorCisgICBIZXJlJ3MgYW4gZXhhbXBsZSB0aGF0 IGdldHMgYSBsaXN0aW5nIG9mIHRoZSBLZXJtaXQgZGlyZWN0b3J5IGF0IHRoZQorICAgICAgICAg IEtlcm1pdCBmdHAgc2l0ZToKKyAgICAgICAgICBmdHAgZnRwOi8va2VybWl0LmNvbHVtYmlhLmVk dS9rZXJtaXQvCisKKyAgIFRoaXMgZXhhbXBsZSBnZXRzIHRoZSB0b3AtbGV2ZWwgUkVBRC5NRSBm aWxlIGZyb20gdGhlIHNhbWUgZGlyZWN0b3J5OgorICAgICAgICAgIGZ0cCBmdHA6Ly9rZXJtaXQu Y29sdW1iaWEuZWR1L2tlcm1pdC9SRUFELk1FCisKKyAgIEhlcmUncyB0aGUgc2FtZSBleGFtcGxl LCBidXQgcmVxdWVzdGluZyBhIHRleHQtbW9kZSB0cmFuc2ZlcjoKKyAgICAgICAgICBmdHAgLVQg ZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvUkVBRC5NRQorICAgICAgICAgIFRoaXMg aWxsdXN0cmF0ZXMgdGhhdCB5b3UgY2FuIG1peCBjb21tYW5kLWxpbmUgb3B0aW9ucyBhbmQgVVJM cworICAgICAgICAgIGlmIHlvdSBkZXNpcmUuCisKKyAgIEhlcmUncyBhbiBleGFtcGxlIHRoYXQg bG9ncyBpbiBhcyBhIChmaWN0aXRpb3VzKSByZWFsIHVzZXIgdG8gZ2V0IGEKKyAgICAgICAgICBm aWxlOgorICAgICAgICAgIGZ0cCBmdHA6Ly9vbGdhQGZ0cC54eXpjb3JwLmNvbS9yZXN1bWUudHh0 CisgICAgICAgICAgVGhlIHBhc3N3b3JkIGlzIG5vdCBpbmNsdWRlZCwgc28gS2VybWl0IHByb21w dHMgZm9yIGl0LgorCisgICBUaGlzIHNjaGVtZSBhbGxvd3MgS2VybWl0IHRvIGJlIHVzZWQgYXMg dGhlIEZUUCBoZWxwZXIgb2Ygb3RoZXIKKyAgIGFwcGxpY2F0aW9ucywgc3VjaCBhcyBXZWIgYnJv d3NlcnMsIHdpdGggYWxsIGl0cyBhZHZhbnRhZ2VzIG92ZXIgb3RoZXIKKyAgIEZUUCBjbGllbnRz IChlc3BlY2lhbGx5IHRoZSBvbmVzIHRoYXQgYXJlIGJ1aWx0IGluIHRvIG1vc3QgV2ViCisgICBi cm93c2VycyksIGUuZy4gdGhhdCBpdCBjYW4gYmUgZ2l2ZW4gd2lsZGNhcmRzLCBhbmQgaXQgY2Fu IHBpY2sgdGV4dAorICAgYW5kIGJpbmFyeSBtb2RlIGF1dG9tYXRpY2FsbHkgZm9yIGVhY2ggZmls ZS4KKworICAgSElOVDogc3VwcG9zZSBzb21lYm9keSBzZW5kcyB5b3UgYW4gRlRQIFVSTCBpbiBl bWFpbCwgb3IgeW91IHNlZSBpdCBpbgorICAgc29tZSB0ZXh0LiBJZiB5b3VyIHRlcm1pbmFsIHNj cmVlbiBzdXBwb3J0cyBjb3B5L3Bhc3RlLCBjb3B5IHRoZSB1cmwsCisgICBhbmQgdGhlbiBhdCB0 aGUgc2hlbGwgcHJvbXB0IHR5cGUgImtlcm1pdCIsIGEgc3BhY2UsIGFuZCB0aGVuIHBhc3RlIHRo ZQorICAgVVJMLCBlLmcuOgorCisgICQga2VybWl0IGZ0cDovL2FscGhhLmdyZWVuaWUubmV0L3B1 Yi9tZ2V0dHkvc291cmNlLzEuMS9tZ2V0dHkxLjEuMjctTworCisgICAiJCBpcyB0aGUgc2hlbGwg cHJvbXB0OyB0aGUgcGFydCB5b3UgdHlwZSBpcyB1bmRlcmxpbmVkLCB0aGUgcmVzdCBpcworICAg cGFzdGVkIGluLiBLZXJtaXQgZG9lcyB0aGUgcmVzdC4KKworMy4xLjQuIEludGVyYWN0aXZlIEZU UCBTZXNzaW9uIEVzdGFibGlzaG1lbnQKKworICAgQXMgeW91IHJlYWQgdGhpcyBhbmQgdGhlIGZv bGxvd2luZyBzZWN0aW9ucywgYmVhciBpbiBtaW5kIHRoYXQgYW55CisgICBjb21tYW5kIHRoYXQg Y2FuIGJlIGdpdmVuIGF0IHRoZSBwcm9tcHQgY2FuIGFsc28gYmUgdXNlZCBpbiBhIHNjcmlwdAor ICAgcHJvZ3JhbS4gS2VybWl0J3Mgc2NyaXB0IHByb2dyYW1taW5nIGxhbmd1YWdlIGlzIHRoZSBz YW1lIGFzIGl0cworICAgaW50ZXJhY3RpdmUgY29tbWFuZCBsYW5ndWFnZS4gWzIzNF1DTElDSyBI RVJFIGlmIHlvdSB3b3VsZCBsaWtlIHRvCisgICBsZWFybiBhIGJpdCBtb3JlIGFib3V0IHNjcmlw dCB3cml0aW5nLgorCisgICBBbiBGVFAgc2Vzc2lvbiBpcyBlc3RhYmxpc2hlZCB3aXRoIHRoZSBG VFAgT1BFTiBjb21tYW5kOgorCisgICBGVFAgWyBPUEVOIF0gWyB7IC9TU0wsIC9UTFMgfSBdIGhv c3RuYW1lIFsgc3dpdGNoZXMgXSBbIHBvcnQgXQorICAgICAgICAgIE9wZW5zIGFuIEZUUCBjb25u ZWN0aW9uIHRvIHRoZSBnaXZlbiBob3N0IG9uIHRoZSBnaXZlbiBwb3J0IGFuZCwKKyAgICAgICAg ICBpZiBGVFAgQVVUT0xPR0lOIGlzIE9OLCBhbHNvIGxvZ3MgeW91IGluIHRvIHRoZSBzZXJ2ZXIs CisgICAgICAgICAgcHJvbXB0aW5nIGZvciB1c2VybmFtZSBhbmQgcGFzc3dvcmQgaWYgbmVjZXNz YXJ5LiBJZiBubyBwb3J0IGlzCisgICAgICAgICAgc3BlY2lmaWVkLCB0aGUgcmVndWxhciBGVFAg cHJvdG9jb2wgcG9ydCAoMjEpIGlzIHVzZWQuIFRoZSBPUEVOCisgICAgICAgICAga2V5d29yZCBp cyBvcHRpb25hbCAodW5sZXNzIHRoZSBob3N0bmFtZSBjb25mbGljdHMgd2l0aCBvbmUgb2YKKyAg ICAgICAgICB0aGUgRlRQIGNvbW1hbmQga2V5d29yZHMsIHdoaWNoIHlvdSBjYW4gbGlzdCBieSB0 eXBpbmcgImZ0cCA/IikuCisKKyAgIFRoZSBob3N0bmFtZSBjYW4gYmUgYW4gSVAgaG9zdCBuYW1l LCBudW1lcmljIElQIGFkZHJlc3MsIG9yIGlmIHlvdSBoYXZlCisgICBhIG5ldHdvcmsgZGlyZWN0 b3J5IGFjdGl2ZSAoU0VUIE5FVFdPUksgRElSRUNUT1JZOyBzZWUgQ2hhcHRlciA2IG9mCisgICBb MjM1XVVzaW5nIEMtS2VybWl0KSwgYW4gZW50cnkgbmFtZSBpbiB0aGUgZGlyZWN0b3J5LiBJbiB0 aGUgbGF0dGVyCisgICBjYXNlLCBpZiB0aGUgZ2l2ZW4gaG9zdG5hbWUgbWF0Y2hlcyBleGFjdGx5 IG9uZSBlbnRyeSwgdGhlIGFzc29jaWF0ZWQKKyAgIG5hbWUgb3IgYWRkcmVzcyBpcyB1c2VkOyBp ZiBpdCBtYXRjaGVzIG1vcmUgdGhhbiBvbmUsIEtlcm1pdCBjeWNsZXMKKyAgIHRocm91Z2ggdGhl bSB1bnRpbCBvbmUgaXMgZm91bmQgdGhhdCBjYW4gYmUgb3BlbmVkOyBpZiBpdCBtYXRjaGVzIG5v bmUsCisgICB0aGVuIHRoZSBob3N0bmFtZSBpcyB1c2VkIGFzLWlzLiBJZiBhIGRpcmVjdG9yeSBp cyBhY3RpdmUgYnV0IHlvdSB3YW50CisgICB0byBieXBhc3MgZGlyZWN0b3J5IGxvb2t1cCwgaW5j bHVkZSBhbiAiPSIgc2lnbiBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZQorICAgaG9zdG5hbWUsIGFu ZC9vciB1c2UgYSBudW1lcmljIElQIGFkZHJlc3MuCisKKyAgIFdoZW4gYW4gRlRQIGNvbm5lY3Rp b24gaXMgb3BlbmVkLCB0aGUgZGVmYXVsdCBmaWxlLXRyYW5zZmVyIG1vZGUgaXMgc2V0CisgICB0 byBiaW5hcnkgaWYgdGhlIGNsaWVudCBhbmQgc2VydmVyIHBsYXRmb3JtcyBhcmUgYWxpa2UgKGUu Zy4gYm90aCBvZgorICAgdGhlbSBhcmUgc29tZSBraW5kIG9mIFVOSVgpLCBhbmQgdG8gdGV4dCAo ImFzY2lpIikgaWYgdGhleSBhcmUgbm90CisgICBhbGlrZS4gVGhpcyBoYXMgbm8gcGFydGljdWxh ciBlZmZlY3QgZm9yIHVwbG9hZGluZyBzaW5jZSBLZXJtaXQKKyAgIGF1dG9tYXRpY2FsbHkgc3dp dGNoZXMgYmV0d2VlbiB0ZXh0IGFuZCBiaW5hcnkgbW9kZSBmb3IgZWFjaCBmaWxlLCBidXQKKyAg IG1pZ2h0IGJlIGltcG9ydGFudCBmb3IgZG93bmxvYWRpbmcuIFRoZSBjb25uZWN0aW9uIGlzIGFs c28gc2V0IHRvCisgICBTdHJlYW0gbW9kZSBhbmQgRmlsZSBzdHJ1Y3R1cmUuIFJlY29yZC0gb3Ig cGFnZS1vcmllbnRlZCBmaWxlIHRyYW5zZmVycworICAgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgQy1L ZXJtaXQncyBGVFAgY2xpZW50LgorCisgICBUaGUgb3B0aW9uYWwgRlRQIE9QRU4gc3dpdGNoZXMg YXJlOgorCisgICAvQU5PTllNT1VTCisgICAgICAgICAgTG9ncyB5b3UgaW4gYW5vbnltb3VzbHks IGF1dG9tYXRpY2FsbHkgc3VwcGx5aW5nIHVzZXJuYW1lCisgICAgICAgICAgImFub255bW91cyIg YW5kIHVzZXJAaG9zdCBhcyB0aGUgcGFzc3dvcmQsIGJhc2VkIG9uIHlvdXIgbG9jYWwKKyAgICAg ICAgICB1c2VyIGFuZCBob3N0IG5hbWVzLgorCisgICAvTk9MT0dJTgorCisgICAgICAgICAgT3Zl cnJpZGVzIFNFVCBGVFAgQVVUT0xPR0lOIE9OIGZvciB0aGlzIGNvbm5lY3Rpb24gb25seS4KKwor ICAgL1VTRVI6bmFtZQorICAgICAgICAgIFVzZXMgdGhlIGdpdmVuIHVzZXJuYW1lIHRvIGxvZyB5 b3UgaW4sIHRodXMgYXZvaWRpbmcgdGhlIE5hbWU6CisgICAgICAgICAgcHJvbXB0LgorICAgICAg ICAgIE92ZXJyaWRlcyBTRVQgRlRQIEFVVE9MT0dJTiBPRkYgZm9yIHRoaXMgY29ubmVjdGlvbiBv bmx5LgorCisgICAvUEFTU1dPUkQ6dGV4dAorICAgICAgICAgIFVzZXMgdGhlIGdpdmVuIHRleHQg YXMgeW91ciBwYXNzd29yZCwgdGh1cyBhdm9pZGluZyB0aGUKKyAgICAgICAgICBQYXNzd29yZDog cHJvbXB0LiBUaGlzIHN3aXRjaCBpcyBub3QgcmVjb21tZW5kZWQgZm9yIHVzZSBpbgorICAgICAg ICAgIHNjcmlwdCBmaWxlcywgd2hpY2ggd291bGQgYmUgYSBzZWN1cml0eSByaXNrLgorCisgICAv QUNDT1VOVDp0ZXh0CisgICAgICAgICAgVXNlcyB0aGUgZ2l2ZW4gdGV4dCBhcyB5b3VyIGFjY291 bnQgKG9yIHNlY29uZGFyeSBwYXNzd29yZCwKKyAgICAgICAgICBkZXBlbmRpbmcgb24gdGhlIHJl cXVpcmVtZW50cyBvZiB0aGUgc2VydmVyOyBtb3N0IHNlcnZlcnMgZG8gbm90CisgICAgICAgICAg cmVxdWlyZSBvciBhY2NlcHQgYW4gYWNjb3VudCBuYW1lKS4gSWYgYW4gYWNjb3VudCBpcyBub3QK KyAgICAgICAgICBzdXBwbGllZCwgeW91IGFyZSBub3QgcHJvbXB0ZWQgZm9yIG9uZS4KKworICAg L1BBU1NJVkUKKyAgICAgICAgICBPcGVucyB0aGUgY29ubmVjdGlvbiBpbiBwYXNzaXZlIG1vZGUu IFBhc3NpdmUgbW9kZSBpcyB0aGUKKyAgICAgICAgICBkZWZhdWx0IGluIEtlcm1pdCdzIEZUUCBj bGllbnQsIHVubGlrZSBpbiBtb3N0IG90aGVycywgc2luY2UgaXQKKyAgICAgICAgICB3b3JrcyBi ZXR0ZXIgdGhyb3VnaCBmaXJld2FsbHMuIFRoZSAvUEFTU0lWRSBhbmQgL0FDVElWRQorICAgICAg ICAgIHN3aXRjaGVzIGFwcGx5IG9ubHkgdG8gdGhlIGNvbm5lY3Rpb24gdGhhdCBpcyBiZWluZyBv cGVuZWQsIGFuZAorICAgICAgICAgIGRvIG5vdCBhZmZlY3QgdGhlIGdsb2JhbCBGVFAgUEFTU0lW RS1NT0RFIHNldHRpbmcuCisKKyAgIC9BQ1RJVkUKKyAgICAgICAgICBPcGVucyB0aGUgY29ubmVj dGlvbiBpbiBhY3RpdmUgbW9kZS4gVXNlIHRoaXMgc3dpdGNoIGlmIHRoZQorICAgICAgICAgIHNl cnZlciBkb2VzIG5vdCBzdXBwb3J0IHBhc3NpdmUgbW9kZSwgb3IgdXNlIHRoZSBjb21tYW5kIFNF VCBGVFAKKyAgICAgICAgICBQQVNTSVZFLU1PREUgT0ZGLgorCisgICAvTk9JTklUCisgICAgICAg ICAgQWRkZWQgaW4gQy1LZXJtaXQgOC4wLjIwMS4gICBUZWxscyBDLUtlcm1pdCBub3QgdG8gc2Vu ZCBSRVNULAorICAgICAgICAgIFNUUlUsIEZFQVQsIGFuZCBNT0RFIGNvbW1hbmRzIHRvIHRoZSBz ZXJ2ZXIgd2hlbiB0aGUgY29ubmVjdGlvbgorICAgICAgICAgIGlzIG9wZW5lZCwgc2luY2UgdGhl c2UgaGF2ZSBiZWVuIHJlcG9ydGVkIHRvIGNhdXNlIGNvbmZ1c2lvbiBpbgorICAgICAgICAgIGNl cnRhaW4gc2VydmVycy4KKworICAgV2hlbiBhIHVzZXJuYW1lIG9yIHBhc3N3b3JkIGlzIG1pc3Np bmcsIGEgcHJvbXB0IGlzIGlzc3VlZCBhdCB0aGUKKyAgIGNvbnRyb2xsaW5nIHRlcm1pbmFsIGFu ZCB5b3UgbXVzdCB0eXBlIHRoZSByZXNwb25zZTsgdGhlIHJlc3BvbnNlIGNhbgorICAgbm90IGJl IHNjcmlwdGVkLiBVc2UgdGhlIHN3aXRjaGVzIHRvIGF2b2lkIHByb21wdHMsIG9yIG9uZSBvZiB0 aGUKKyAgIHNlY3VyZSBhdXRoZW50aWNhdGlvbiBtZXRob2RzIGRlc2NyaWJlZCBpbiB0aGUgbmV4 dCBzZWN0aW9uLCBvciBzZWUKKyAgIFsyMzZdU0VUIEZUUCBBVVRPTE9HSU4gYW5kIHRoZSBbMjM3 XUZUUCBVU0VSIGFuZCBzaW1pbGFyIGNvbW1hbmRzCisgICBkZXNjcmliZWQgbGF0ZXIgaW4gdGhp cyBzZWN0aW9uLgorCisgICBFeGFtcGxlczoKKworICBmdHAgb3BlbiBrZXJtaXQuY29sdW1iaWEu ZWR1IC9hbm9ueW1vdXMgIDsgT3BlbiBhbmQgbG9nIGluIGFub255bW91c2x5CisgIGZ0cCBrZXJt aXQuY29sdW1iaWEuZWR1IC9hbm9ueW1vdXMgICAgICAgOyBUaGUgT1BFTiBrZXl3b3JkIGNhbiBi ZSBvbWl0dGVkCisgIGZ0cCB4eXpjb3JwLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgOyBP cGVuIGFuZCBtYXliZSBwcm9tcHQgZm9yIHVzZXJuYW1lCisgIGZ0cCB4eXpjb3JwLmNvbSAvdXNl cjpvbGdhICAgICAgICAgICAgICAgOyBPcGVuIGFuZCBsb2cgaW4gYXMgb2xnYQorICBmdHAgdGVz dGluZy5hYmNjb3JwLmNvbSA0NDkgICAgICAgICAgICAgIDsgU3BlY2lmeSBhIHNwZWNpYWwgVENQ IHBvcnQgbnVtYmVyCisgIGZ0cCB0ZXN0aW5nLmFiY2NvcnAuY29tIC91c2VyOm9sYWYgL3Bhc3N3 b3JkOnNlY3JldCA0NDkKKworICAgVGhlIEZUUCBPUEVOIGNvbW1hbmQgc3VjY2VlZHMgaWYgYSBj b25uZWN0aW9uIHdhcyBvcGVuZWQgdG8gdGhlIHNlcnZlcgorICAgKGV2ZW4gaWYgdGhlIGdpdmVu IHVzZXJuYW1lIGFuZCBwYXNzd29yZCB3ZXJlIG5vdCB2YWxpZCkgYW5kIGZhaWxzCisgICBvdGhl cndpc2UgKHNlZSBbMjM4XVNlY3Rpb24gMy44IGZvciBkZXRhaWxzKS4KKworICAgV2hlbiB5b3Vy IEZUUCBzZXNzaW9uIGlzIGNvbXBsZXRlLCB5b3UgY2FuIHRlcm1pbmF0ZSBpdCBhcyBmb2xsb3dz OgorCisgICBGVFAgQllFCisgICAgICAgICAgQ2xvc2VzIHRoZSBGVFAgY29ubmVjdGlvbiBpZiBv bmUgd2FzIG9wZW4uIFRoZSBGVFAgcHJlZml4IGNhbiBiZQorICAgICAgICAgIG9taXR0ZWQgaWYg bm8gb3RoZXIgY29ubmVjdGlvbiBpcyBvcGVuIGF0IHRoZSBzYW1lIHRpbWUgKHNlZQorICAgICAg ICAgIFsyMzldU2VjdGlvbiAzLjggZm9yIGRldGFpbHMpLiBJZiBhIGNvbm5lY3Rpb24gbG9nIGlz IGFjdGl2ZSwgYW4KKyAgICAgICAgICBGVFAgcmVjb3JkIGlzIHdyaXR0ZW4gdG8gaXQuIElmIEtl cm1pdCB3YXMgc3RhcnRlZCB3aXRoIHRoZSAtOQorICAgICAgICAgIGNvbW1hbmQtbGluZSBvcHRp b24gb3Igd2l0aCBpdHMgRlRQIGNvbW1hbmQtbGluZSBwZXJzb25hbGl0eSwKKyAgICAgICAgICBh bmQgdGhlIC1TIChTdGF5KSBvcHRpb24gd2FzIG5vdCBnaXZlbiwgQU5EIHRoZXJlIGlzIG5vIG90 aGVyCisgICAgICAgICAgYWN0aXZlIGNvbm5lY3Rpb24sIHRoZSBGVFAgQllFIGNvbW1hbmQgYWxz byBleGl0cywganVzdCBhcyBpdAorICAgICAgICAgIGRvZXMgb24gYSByZWd1bGFyIEZUUCBjbGll bnQuIFN5bm9ueW1zOiBGVFAgQ0xPU0UsIEZUUCBRVUlUIChidXQKKyAgICAgICAgICBpZiB0aGUg RlRQIHByZWZpeCBpcyBvbWl0dGVkIGZyb20gUVVJVCwgdGhpcyBiZWNvbWVzIHRoZSByZWd1bGFy CisgICAgICAgICAgS2VybWl0IFFVSVQgY29tbWFuZCwgd2hpY2ggaXMgZXF1aXZhbGVudCB0byBF WElUOyBpLmUuIGl0IGNsb3NlcworICAgICAgICAgIHRoZSBjb25uZWN0aW9uIGFuZCBleGl0cyBm cm9tIEtlcm1pdCkuCisKKyAgIFRoZSBmb2xsb3dpbmcgY29tbWFuZHMgY2FuIGJlIHVzZWQgdG8g YWNoaWV2ZSBncmVhdGVyIGNvbnRyb2wgb3ZlciB0aGUKKyAgIGNvbm5lY3Rpb24gYW5kIGxvZ2lu IHByb2Nlc3M6CisKKyAgIFNFVCBGVFAgQU5PTllNT1VTLVBBU1NXT1JEIHRleHQKKyAgICAgICAg ICBBbGxvd3MgeW91IHRvIGNob29zZSB0aGUgcGFzc3dvcmQgdGV4dCB0byBiZSBzZW50IGF1dG9t YXRpY2FsbHkKKyAgICAgICAgICBieSBLZXJtaXQgd2hlbiB5b3Ugb3BlbiBhbiBGVFAgY29ubmVj dGlvbiB3aXRoIHRoZSAvQU5PTllNT1VTCisgICAgICAgICAgc3dpdGNoLgorCisgICBTRVQgRlRQ IEFVVE9MT0dJTiB7IE9OLCBPRkYgfQorICAgICAgICAgIElmIHlvdSBnaXZlIHRoaXMgY29tbWFu ZCBwcmlvciB0byBvcGVuaW5nIGFuIEZUUCBjb25uZWN0aW9uLCBpdAorICAgICAgICAgIGNvbnRy b2xzIHdoZXRoZXIgS2VybWl0IHRyaWVzIHRvIGxvZyB5b3UgaW4gYXV0b21hdGljYWxseSBhcwor ICAgICAgICAgIHBhcnQgb2YgdGhlIGNvbm5lY3Rpb24gcHJvY2Vzcy4gTm9ybWFsbHkgT04sIHdo aWNoIG1lYW5zIHRoZQorICAgICAgICAgIHVzZXJuYW1lIGFuZCBwYXNzd29yZCBhcmUgc2VudCBh dXRvbWF0aWNhbGx5IChhbmQgcHJvbXB0ZWQgZm9yCisgICAgICAgICAgaWYgdGhleSBhcmUgbm90 IHlldCBrbm93bikuIFdoZW4gT0ZGLCBGVFAgT1BFTiBjb25uZWN0cyB0byB0aGUKKyAgICAgICAg ICBzZXJ2ZXIgd2l0aG91dCBsb2dnaW5nIGluLiBPRkYgaXMgZXF1aXZhbGVudCB0byB0aGUgLW4K KyAgICAgICAgICBjb21tYW5kLWxpbmUgb3B0aW9uIHdoZW4gdXNpbmcgS2VybWl0J3MgRlRQIGNv bW1hbmQtbGluZQorICAgICAgICAgIHBlcnNvbmFsaXR5LgorCisgICBGVFAgVVNFUiBuYW1lIFsg cGFzc3dvcmQgWyBhY2NvdW50IF0gXQorICAgICAgICAgIFVzZWQgdG8gbG9nIGluIHRvIGFuIEZU UCBzZXJ2ZXIgdG8gd2hpY2ggYSBjb25uZWN0aW9uIGhhcyBiZWVuCisgICAgICAgICAgbWFkZSB3 aXRob3V0IGF1dG9sb2dpbiwgb3Igd2hlbiBhdXRvbG9naW4gZmFpbGVkLiBJZiB0aGUKKyAgICAg ICAgICBwYXNzd29yZCBpcyBmdXJuaXNoZWQgb24gdGhlIGNvbW1hbmQgbGluZSwgaXQgaXMgdXNl ZDsgb3RoZXJ3aXNlCisgICAgICAgICAgeW91IGFyZSBwcm9tcHRlZCBmb3IgYSBwYXNzd29yZC4g QW4gYWNjb3VudCBtYXkgYWxzbyBiZQorICAgICAgICAgIGZ1cm5pc2hlZCBpZiByZXF1aXJlZCBi eSB0aGUgc2VydmVyOyBpdCBpcyBub3QgcmVxdWlyZWQgYnkKKyAgICAgICAgICBLZXJtaXQgYW5k IGlzIG5vdCBwcm9tcHRlZCBmb3IgaWYgb21pdHRlZC4gU3lub255bXM6IFVTRVIsIEZUUAorICAg ICAgICAgIExPR0lOLgorCisgICBGVFAgQUNDT1VOVCB0ZXh0CisgICAgICAgICAgU2VuZHMgYW4g YWNjb3VudCBuYW1lIHRvIGEgc2VydmVyIHRoYXQgc3VwcG9ydHMgYWNjb3VudHMuIElmIHRoZQor ICAgICAgICAgIHNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IGFjY291bnRzLCBhbiBlcnJvciByZXNw b25zZSBvY2N1cnMuIElmCisgICAgICAgICAgdGhlIHNlcnZlciBkb2VzIHN1cHBvcnQgYWNjb3Vu dHMsIHRoZSBhY2NvdW50IGlzIGFjY2VwdGVkIGlmIGl0CisgICAgICAgICAgaXMgdmFsaWQgYW5k IHJlamVjdGVkIGlmIGl0IGlzIG5vdC4gVGhlIGFjY291bnQgbWlnaHQgYmUgdXNlZAorICAgICAg ICAgIGZvciBjaGFyZ2luZyBwdXJwb3NlcyBvciBpdCBtaWdodCBiZSBhIHNlY29uZGFyeSBwYXNz d29yZCwgb3IgaXQKKyAgICAgICAgICBtaWdodCBiZSB1c2VkIGZvciBhbnkgb3RoZXIgcHVycG9z ZSwgc3VjaCBhcyBhbiBhY2Nlc3MgcGFzc3dvcmQKKyAgICAgICAgICBmb3IgYSBwYXJ0aWN1bGFy IGRpc2suIFNlcnZlcnMgdGhhdCBzdXBwb3J0IGFjY291bnRzIG1pZ2h0IG9yCisgICAgICAgICAg bWlnaHQgbm90IGFsbG93IG9yIHJlcXVpcmUgdGhlIGFjY291bnQgdG8gYmUgc2VudCBwcmlvciB0 bworICAgICAgICAgIGxvZ2luOyB1c3VhbGx5IGl0IGlzIHNlbnQgYWZ0ZXIgbG9naW4sIGlmIGF0 IGFsbC4gU3lub255bToKKyAgICAgICAgICBBQ0NPVU5ULgorCisgICBFeGFtcGxlOgorCitzZXQg ZnRwIGF1dG9sb2dpbiBvZmYgICAgICAgICAgICAgICAgICA7IE9uZSB0aGluZyBhdCBhIHRpbWUg cGxlYXNlCitmdHAgeHl6Y29ycC5jb20gICAgICAgICAgICAgICAgICAgICAgICA7IFRyeSB0byBt YWtlIHRoZSBjb25uZWN0aW9uCitpZiBmYWlsIGV4aXQgMSBGVFAgY29ubmVjdGlvbiBmYWlsZWQg ICA7IENoZWNrIHRoYXQgaXQgd2FzIG1hZGUKK2Z0cCB1c2VyIG9sZ2Egc2VjcmV0ICAgICAgICAg ICAgICAgICAgIDsgTm93IGxvZyBpbiB0byB0aGUgc2VydmVyCitpZiBmYWlsIGV4aXQgMSBGVFAg bG9naW4gZmFpbGVkICAgICAgICA7IENoZWNrIHRoYXQgaXQgd29ya2VkCitmdHAgYWNjb3VudCAx MDM4OTY4NTQgICAgICAgICAgICAgICAgICA7IExvZ2luIE9LIC0gc2VuZCBhY2NvdW50CitpZiBm YWlsIGVjaG8gV0FSTklORyAtIEZUUCBBQ0NUIGZhaWxlZCA7IFdhcm4gaWYgcHJvYmxlbQorLi4u ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAoaGF2ZSBzZXNzaW9uIGhlcmUp CitieWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IExvZyBvdXQgYW5kIGRp c2Nvbm5lY3QKKworICAgVGhlIGZvbGxvd2luZyBjb21tYW5kcyBhcmUgdXNlZCB0byBjb250cm9s IG9yIGdldCBpbmZvcm1hdGlvbiBhYm91dCB0aGUKKyAgIEZUUCBjb25uZWN0aW9uLiBBbnkgcGFy dGljdWxhciBGVFAgc2VydmVyIGRvZXMgbm90IG5lY2Vzc2FyaWx5IHN1cHBvcnQKKyAgIGFsbCBv ZiB0aGVtLgorCisgICBGVFAgUkVTRVQKKyAgICAgICAgICBUZXJtaW5hdGVzIGEgdXNlciBzZXNz aW9uIGJ1dCBsZWF2ZXMgdGhlIGNvbm5lY3Rpb24gb3BlbiwKKyAgICAgICAgICBhbGxvd2luZyBh IG5ldyBsb2dpbiB2aWEgRlRQIFVTRVIuCisKKyAgIEZUUCBJRExFIFsgbnVtYmVyIF0KKyAgICAg ICAgICBNb3N0IEZUUCBzZXJ2ZXJzIGF1dG9tYXRpY2FsbHkgbG9nIHlvdSBvdXQgYW5kIGFuZCBk aXNjb25uZWN0CisgICAgICAgICAgeW91ciBzZXNzaW9uIGlmIHRoZXJlIGhhcyBiZWVuIG5vIGFj dGl2aXR5IGZvciBhIGNlcnRhaW4gYW1vdW50CisgICAgICAgICAgb2YgdGltZS4gVXNlIHRoaXMg Y29tbWFuZCB0byBhc2sgdGhlIHNlcnZlciB0byBzZXQgaXRzIGlkbGUKKyAgICAgICAgICBsaW1p dCB0byB0aGUgZ2l2ZW4gbnVtYmVyIG9mIHNlY29uZHMuIE9taXQgdGhlIG51bWJlciB0byBhc2sg dGhlCisgICAgICAgICAgc2VydmVyIHRvIGluZm9ybSB5b3Ugb2YgaXRzIGN1cnJlbnQgaWRsZSBs aW1pdC4KKworICAgRlRQIFNUQVRVUyBbIGZpbGVuYW1lIF0KKyAgICAgICAgICBBc2tzIHRoZSBG VFAgc2VydmVyIHRvIHNlbmQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJlbnQKKyAgICAgICAg ICBzZXNzaW9uLiBUaGUgcmVzdWx0IGlzIGEgZnJlZS1mb3JtYXQgcmVwb3J0IHRoYXQgbWlnaHQg aW5jbHVkZQorICAgICAgICAgIHNlcnZlciBpZGVudGlmaWNhdGlvbiwgdXNlcm5hbWUgYW5kIGxv Z2luIHRpbWUsIEZUUCBwcm90b2NvbAorICAgICAgICAgIHNldHRpbmdzLCBhbmQgZmlsZS10cmFu c2ZlciBzdGF0aXN0aWNzLiBJZiBhIGZpbGVuYW1lIGlzIGdpdmVuLAorICAgICAgICAgIHRoZSBz ZXJ2ZXIgaXMgc3VwcG9zZWQgdG8gc2VuZCBkZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dCB0aGUK KyAgICAgICAgICBmaWxlLgorCisgICBGVFAgU1lTVEVNCisgICAgICAgICAgQXNrcyB0aGUgRlRQ IHNlcnZlciB0byBpZGVudGlmeSBpdHMgb3BlcmF0aW5nIHN5c3RlbSAoTGlzdGVkIGluCisgICAg ICAgICAgSW50ZXJuZXQgQXNzaWduZWQgTnVtYmVycywgT3BlcmF0aW5nIFN5c3RlbSBOYW1lcyku IEV4YW1wbGVzOgorICAgICAgICAgIFVOSVgsIFZNUywgVk0vQ01TLCBXSU5ET1dTLU5ULiBVbmZv cnR1bmF0ZWx5IG1hbnkgdmFyaWF0aW9ucyBhcmUKKyAgICAgICAgICBhbGxvd2VkIChlLmcuIExJ TlVYLTIuMCwgTElOVVgtMi4yLCBGUkVFQlNELCBVTFRSSVgsIGV0YywKKyAgICAgICAgICBpbnN0 ZWFkIG9mIFVOSVg7IFdJTkRPV1MtTlQtMywgV0lORE9XUy1OVC0zLjUsIFdJTkRPV1MtTlQtMy41 MSwKKyAgICAgICAgICBXSU5ET1dTLU5ULTQsIGV0YykuIFRoZSByZXBvcnQgbWlnaHQgYWxzbyBp bmNsdWRlIG90aGVyCisgICAgICAgICAgaW5mb3JtYXRpb24gbGlrZSAiVHlwZSBMOCIsICJUeXBl IEkiLCBvciAiVHlwZSBBIiwgaW5kaWNhdGluZworICAgICAgICAgIHRoZSBmaWxlLXRyYW5zZmVy IG1vZGUuCisKKyAgIEZUUCBIRUxQIFsga2V5d29yZCBbIGtleXdvcmQgWyAuLi4gXSBdCisgICAg ICAgICAgQXNrcyB0aGUgc2VydmVyIHRvIGxpc3QgdGhlIGNvbW1hbmRzIGl0IHN1cHBvcnRzLiBU aGUgcmVzcG9uc2UKKyAgICAgICAgICBpcyB1c3VhbGx5IGNyeXB0aWMsIGxpc3RpbmcgRlRQIGNv bW1hbmQgbW5lbW9uaWNzLCBub3QgdGhlCisgICAgICAgICAgY29tbWFuZHMgdXNlZCBieSB0aGUg Y2xpZW50IChzaW5jZSB0aGUgc2VydmVyIGhhcyBubyB3YXkgb2YKKyAgICAgICAgICBrbm93aW5n IGFueXRoaW5nIGFib3V0IHRoZSBjbGllbnQncyB1c2VyIGludGVyZmFjZSkuIEZvcgorICAgICAg ICAgIGV4YW1wbGUsIHRoZSBQVVQgY29tbWFuZCBpcyBTVE9SIGluIEZUUCBwcm90b2NvbC4gSWYg YSBrZXl3b3JkCisgICAgICAgICAgaXMgZ2l2ZW4sIHdoaWNoIHNob3VsZCBiZSBhbiBGVFAgcHJv dG9jb2wgY29tbWFuZCwKKyAgICAgICAgICBzbGlnaHRseS1tb3JlLSBkZXRhaWxlZCBoZWxwIGlz IGdpdmVuIGFib3V0IHRoZSBjb3JyZXNwb25kaW5nCisgICAgICAgICAgY29tbWFuZCAoaWYgdGhl IEZUUCBzZXJ2ZXIgc3VwcG9ydHMgdGhpcyBmZWF0dXJlKS4gRXhhbXBsZXM6CisgICAgICAgICAg ImZ0cCBoZWxwIiwgImZ0cCBoZWxwIHN0b3IiLgorCisgICBGVFAgU0lURSB0ZXh0CisgICAgICAg ICAgKEFkdmFuY2VkKSBTZW5kcyBhbiBGVFAgU0lURSAoc2l0ZS1zcGVjaWZpYykgY29tbWFuZC4g VXN1YWxseQorICAgICAgICAgIHRoaXMgbWVhbnMgdGhhdCB0aGUgRlRQIHNlcnZlciBpcyBhc2tl ZCB0byBydW4gYW4gZXh0ZXJuYWwKKyAgICAgICAgICBjb21tYW5kIHdpdGggdGhlIGdpdmVuIGFy Z3VtZW50cy4gWW91IG1pZ2h0IGJlIGFibGUgdG8gZmluZCBvdXQKKyAgICAgICAgICB3aGF0IFNJ VEUgY29tbWFuZHMgYXJlIGF2YWlsYWJsZSBieSBzZW5kaW5nICJmdHAgaGVscCBzaXRlIiB0bwor ICAgICAgICAgIHRoZSBzZXJ2ZXIsIGJ1dCBpbiBnZW5lcmFsIHRoZSBhdmFpbGFiaWxpdHkgb2Yg YW5kIHJlc3BvbnNlIHRvCisgICAgICAgICAgU0lURSBjb21tYW5kcyBpcyAobm90IHN1cnByaXNp bmdseSkgc2l0ZSBzcGVjaWZpYy4KKworICAgRlRQIFFVT1RFIHRleHQKKyAgICAgICAgICAoQWR2 YW5jZWQpIFNlbmRzIGFuIEZUUCBjb21tYW5kIGluIEZUUCBwcm90b2NvbCBmb3JtYXQuIFVzZSB0 aGlzCisgICAgICAgICAgY29tbWFuZCB0byBzZW5kIGNvbW1hbmRzIHRvIHRoZSBzZXJ2ZXIgdGhh dCB0aGUgRlRQIGNsaWVudCBtaWdodAorICAgICAgICAgIG5vdCBrbm93IGFib3V0LgorCisgICBT SE9XIEZUUAorICAgICAgICAgIExpc3RzIGNsaWVudCAoS2VybWl0KSBGVFAgc2V0dGluZ3MgYW5k IGluZm9ybWF0aW9uLiBBbHNvIFNIT1cKKyAgICAgICAgICBDT05ORUNUSU9OLCBTSE9XIENPTU1V TklDQVRJT05TLgorCisgICBIRUxQIEZUUCBbIGtleXdvcmQgXQorICAgICAgICAgIEFza3MgS2Vy bWl0IHRvIGxpc3QgYW5kIGRlc2NyaWJlIGl0cyBidWlsdC1pbiBGVFAgY29tbWFuZHMuCisKKyAg IEhFTFAgU0VUIEZUUCBbIGtleXdvcmQgXQorICAgICAgICAgIEFza3MgS2VybWl0IHRvIGxpc3Qg YW5kIGRlc2NyaWJlIGl0cyBidWlsdC1pbiBTRVQgRlRQIGNvbW1hbmRzLgorCisgICBbIFsyNDBd VG9wIF0gWyBbMjQxXUZUUCBUb3AgXSBbIFsyNDJdQy1LZXJtaXQgSG9tZSBdIFsgWzI0M11LZXJt aXQgSG9tZQorICAgXQorCiszLjEuNS4gTWFraW5nIFByb3h5IENvbm5lY3Rpb25zCisKKyAgIFRo ZSBzaW1wbGlzdCBmb3JtIG9mIGZpcmV3YWxsIHRyYXZlcnNhbCBpcyB0aGUgSFRUUCBDT05ORUNU IGNvbW1hbmQuCisgICBUaGUgQ09OTkVDVCBjb21tYW5kIHdhcyBpbXBsZW1lbnRlZCB0byBhbGxv dyBhIHB1YmxpYyB3ZWIgc2VydmVyIHdoaWNoCisgICB1c3VhbGx5IHJlc2lkZXMgb24gdGhlIGJv dW5kYXJ5IGJldHdlZW4gdGhlIHB1YmxpYyBhbmQgcHJpdmF0ZSBuZXR3b3JrcworICAgdG8gZm9y d2FyZCBIVFRQIHJlcXVlc3RzIGZyb20gY2xpZW50cyBvbiB0aGUgcHJpdmF0ZSBuZXR3b3JrIHRv IHB1YmxpYworICAgd2ViIHNpdGVzLiBJbiBvcmRlciB0byBhbGxvdyBzZWN1cmUgd2ViIGNvbm5l Y3Rpb25zIHRvIGJlIGVzdGFibGlzaGVkLAorICAgdGhlIENPTk5FQ1QgY29tbWFuZCB3b3JrcyBi eSBhdXRoZW50aWNhdGluZyB0aGUgY2xpZW50IHdpdGggYQorICAgdXNlcm5hbWUvcGFzc3dvcmQg YW5kIHRoZW4gZXN0YWJsaXNoaW5nIGEgdHVubmVsIHRvIHRoZSBkZXNpcmVkIGhvc3QuCisKKyAg IE1hbnkgd2ViIHNlcnZlcnMgc3VwcG9ydCB0aGUgQ09OTkVDVCBjb21tYW5kIGFuZCBpdCBjYW4g YmUgY29uZmlndXJlZAorICAgdG8gYWxsb3cgb3V0Z29pbmcgY29ubmVjdGlvbnMgdG8gYXV0aGVu dGljYXRlZCB1c2VyIHRvIGFueSBUQ1AvSVAKKyAgIGhvc3RuYW1lL3BvcnQgY29tYmluYXRpb24g YWNjZXNzaWJsZSB0byB0aGUgd2ViIHNlcnZlci4gVGhlIGxpbWl0YXRpb25zCisgICBvZiBIVFRQ IENPTk5FQ1QgaXMgdGhhdCBpdCBjYW4gb25seSBiZSB1c2VkIGZvciBvdXRnb2luZyBjb25uZWN0 aW9ucworICAgZm9yIHByb3RvY29scyB0aGF0IGFyZSBpbXBsZW1lbnRlZCB1c2luZyBUQ1AvSVAu IFByb3RvY29scyBzdWNoIGFzCisgICBLZXJiZXJvcyBhdXRoZW50aWNhdGlvbiB0aGF0IHVzZSBV RFAvSVAgY2Fubm90IGJlIHR1bm5lbGVkIHVzaW5nIEhUVFAKKyAgIENPTk5FQ1QuCisKKyAgIEtl cm1pdCBwcm92aWRlcyBzdXBwb3J0IGZvciB0aGUgdXNlIG9mIEhUVFAgQ09OTkVDVCBwcm94eSBz ZXJ2aWNlcyB3aXRoCisgICB0aGUgY29tbWFuZDoKKworICBTRVQgVENQIEhUVFAtUFJPWFkgWy9V U0VSOnVzZXJuYW1lIC9QQVNTV09SRDpwYXNzd29yZF0gaG9zdG5hbWUvaXAtYWRkcmVzc1s6cG8K K3J0XQorCisgICBXaGVuIGEgcG9ydCBpcyBub3Qgc3BlY2lmaWVkIHRoZSBkZWZhdWx0IHBvcnQg Y29uZmlndXJlZCBvbiB0aGUgSFRUUAorICAgc2VydmVyIGlzIHVzZWQuIFRoaXMgaXMgZnJlcXVl bnRseSBwb3J0IDQ0My4gV2hlbiBhIGhvc3RuYW1lIGlzCisgICBzcGVjaWZpZWQsIGl0IGlzIHJl c29sdmVkIHVzaW5nIHRoZSBETlMgYXZhaWxhYmxlIHRvIHRoZSB3ZWIgc2VydmVyLgorCiszLjIu IE1ha2luZyBTZWN1cmUgRlRQIENvbm5lY3Rpb25zCisKKyAgIEFsc28gc2VlOiBbMjQ0XUFjY2Vz c2luZyBJQk0gSW5mb3JtYXRpb24gRXhjaGFuZ2Ugd2l0aCBLZXJtaXQuCisKKyAgIEluIHRoZSBw cmV2aW91cyBzZWN0aW9uLCB5b3UgY2FuIHNlZSBzZXZlcmFsIGV4YW1wbGVzIG9mIHRyYWRpdGlv bmFsCisgICBpbnNlY3VyZSBhdXRoZW50aWNhdGlvbjogdXNlcm5hbWUgYW5kIHBhc3N3b3JkIHNl bnQgYWNyb3NzIHRoZSBuZXR3b3JrCisgICBpbiBjbGVhciB0ZXh0LiBPZiBjb3Vyc2UgdGhpcyBp cyBiYWQgcHJhY3RpY2Ugb24gYXQgbGVhc3QgdHdvIGNvdW50czoKKyAgICgxKSBzdG9yaW5nIHBh c3N3b3JkcyBpbiBmaWxlcyAoc3VjaCBhcyBzY3JpcHQgZmlsZXMpIGdpdmVzIGFjY2VzcyB0bwor ICAgdGhlIHRhcmdldCBzeXN0ZW1zIHRvIGFueWJvZHkgd2hvIGNhbiBvYnRhaW4gcmVhZCBhY2Nl c3MgdG8geW91cgorICAgc2NyaXB0czsgYW5kICgyKSBzZW5kaW5nIHRoaXMgaW5mb3JtYXRpb24g b3ZlciB0aGUgbmV0d29yayBsZWF2ZXMgaXQKKyAgIG9wZW4gdG8gaW50ZXJjZXB0aW9uIGJ5IG5l dHdvcmsgc25pZmZlcnMgb3IgY29tcHJvbWlzZWQgaG9zdHMuCisKKyAgIEJlY2F1c2Ugb2YgdGhl IGluY3JlYXNpbmcgbmVlZCBmb3Igc2VjdXJpdHkgb24gdGhlIEludGVybmV0LCBGVFAKKyAgIHNl cnZlcnMgYXJlIGJlZ2lubmluZyB0byBhcHBlYXIgdGhhdCBvZmZlciBzZWN1cmUgZm9ybXMgb2YK KyAgIGF1dGhlbnRpY2F0aW9uLCBpbiB3aGljaCBubyBpbmZvcm1hdGlvbiBpcyBzZW50IG92ZXIg dGhlIG5ldHdvcmsgdGhhdAorICAgd291bGQgYWxsb3cgYW55b25lIHdobyBpbnRlcmNlcHRzIGl0 IHRvIHVzdXJwIHlvdXIgaWRlbnRpdHkgYW5kIGdhaW4KKyAgIHlvdXIgYWNjZXNzIHJpZ2h0cy4K KworICAgS2VybWl0IHByb3ZpZGVzIGFuIGVxdWl2YWxlbnQgZm9ybSBvZiBGVFAgc2VjdXJpdHkg Zm9yIGVhY2ggdHlwZSBvZgorICAgSUVURiBzdGFuZGFyZCBzZWN1cml0eSBpbXBsZW1lbnRlZCBp biBUZWxuZXQuIFRoZXNlIGluY2x1ZGUKKyAgIEdTU0FQSS1LRVJCRVJPUzUsIEtFUkJFUk9TNCwg U2VjdXJlIFJlbW90ZSBQYXNzd29yZCAoU1JQKSwgYW5kCisgICBUcmFuc3BvcnQgTGF5ZXIgU2Vj dXJpdHkgKFNTTCBhbmQgVExTKS4gSXQgZG9lcyBub3QgcHJlc2VudGx5IGluY2x1ZGUKKyAgIFNT TCB0dW5uZWxpbmcgbm9yIGFueSBmb3JtIG9mIFNTSCB2MSBvciB2Mi4gV2hlbiBLZXJtaXQgaXMg YnVpbHQgd2l0aAorICAgdGhlIG5lY2Vzc2FyeSBsaWJyYXJpZXMsIHNlY3VyZSBGVFAgY29ubmVj dGlvbnMgYXJlIGF0dGVtcHRlZCBieQorICAgZGVmYXVsdCwgaW4gd2hpY2ggYWxsIGNvbm5lY3Rp b25zIGFyZSBhdXRoZW50aWNhdGVkIGFuZCB0aGUgY29tbWFuZCBhbmQKKyAgIGRhdGEgY2hhbm5l bHMgYXJlIHByaXZhdGUuCisKKyAgIFRoZSB1c2Ugb2YgYXV0aGVudGljYXRpb24gYW5kIGVuY3J5 cHRpb24gZm9yIEZUUCBjb25uZWN0aW9ucyBjYW4gYmUKKyAgIGFkanVzdGVkIHdpdGggdGhlIGNv bW1hbmRzIGxpc3RlZCBiZWxvdywgd2hpY2ggYXJlIGF2YWlsYWJsZSBvbmx5IGlmCisgICB5b3Vy IHZlcnNpb24gb2YgS2VybWl0IHdhcyBidWlsdCB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIHNlY3Vy aXR5CisgICBvcHRpb25zIGFuZCBsaWJyYXJpZXM6CisKKyAgIFNFVCBGVFAgQVVUSFRZUEUgeyBB VVRPTUFUSUMsIEdTU0FQSS1LUkI1LCBLRVJCRVJPUzQsIFNSUCwgU1NMLCBUTFMgfQorICAgICAg ICAgIFNwZWNpZmllcyBhbiBvcmRlcmVkIGxpc3Qgb2YgYXV0aGVudGljYXRpb24gbWV0aG9kcyB0 byBiZQorICAgICAgICAgIGF0dGVtcHRlZCB3aGVuIEFVVE9BVVRIRU5USUNBVElPTiBpcyBPTi4g VGhlIGRlZmF1bHQgbGlzdCBpczoKKyAgICAgICAgICBHU1NBUEktS1JCNSwgU1JQLCBLRVJCRVJP U19WNCwgVExTLCBTU0wuIElmIG5vbmUgb2YgdGhlIHNlbGVjdGVkCisgICAgICAgICAgbWV0aG9k cyBhcmUgc3VwcG9ydGVkIGJ5IHRoZSBzZXJ2ZXIsIGFuIGluc2VjdXJlIGxvZ2luIGlzIHVzZWQK KyAgICAgICAgICBhcyBhIGZhbGxiYWNrLiBOb3RlLCBieSB0aGUgd2F5LCB0aGF0IFNTTCBvciBU TFMgY2FuIGJlIHVzZWQgdG8KKyAgICAgICAgICBzZWN1cmUgYW4gYW5vbnltb3VzIGNvbm5lY3Rp b24uCisKKyAgIFNFVCBGVFAgQVVUT0FVVEhFTlRJQ0FUSU9OIHsgT04sIE9GRiB9CisgICAgICAg ICAgVGVsbHMgd2hldGhlciBhdXRoZW50aWNhdGlvbiBzaG91bGQgYmUgbmVnb3RpYXRlZCBieSB0 aGUgRlRQCisgICAgICAgICAgT1BFTiBjb21tYW5kLiBEZWZhdWx0IGlzIE9OLiBVc2UgU0VUIEZU UCBBVVRPQVVUSEVOVElDQVRJT04gT0ZGCisgICAgICAgICAgdG8gZm9yY2UgYSBjbGVhci10ZXh0 LCB1bmVuY3J5cHRlZCBjb25uZWN0aW9uIHRvIEZUUCBzZXJ2ZXJzCisgICAgICAgICAgKHN1Y2gg YXMgdGhlIG9uZSBhdCB0aGUgS2VybWl0IEZUUCBzaXRlKSB0aGF0IG5vcm1hbGx5IHdvdWxkIHRy eQorICAgICAgICAgIHRvIG5lZ290aWF0ZSBzZWN1cmUgYXV0aGVudGljYXRpb24gYW5kIGVuY3J5 cHRpb24uCisKKyAgIFNFVCBGVFAgQVVUT0VOQ1JZUFRJT04geyBPTiwgT0ZGIH0KKyAgICAgICAg ICBUZWxscyB3aGV0aGVyIGVuY3J5cHRpb24gKHByaXZhY3kpIHNob3VsZCBiZSBuZWdvdGlhdGVk IGJ5IHRoZQorICAgICAgICAgIEZUUCBPUEVOIGNvbW1hbmQsIHdoaWNoIGNhbiBoYXBwZW4gb25s eSBpZiBzZWN1cmUgYXV0aGVudGljYXRpb24KKyAgICAgICAgICBpcyBhbHNvIG5lZ290aWF0ZWQu IERlZmF1bHQgaXMgT04uCisKKyAgIFNFVCBGVFAgQVVUT0xPR0lOIHsgT04sIE9GRiB9CisgICAg ICAgICAgVGVsbHMgS2VybWl0IHdoZXRoZXIgdG8gdHJ5IGxvZ2dpbmcgaW4gYXV0b21hdGljYWxs eSB3aGVuIHlvdQorICAgICAgICAgIG1ha2UgYW4gRlRQIGNvbm5lY3Rpb24sIGFzIG9wcG9zZWQg dG8gbGV0dGluZyB5b3UgZG8gaXQgImJ5CisgICAgICAgICAgaGFuZCIgd2l0aCB0aGUgRlRQIFVT RVIgY29tbWFuZC4KKworICAgU0VUIEZUUCBDT01NQU5ELVBST1RFQ1RJT04tTEVWRUwgeyBDTEVB UiwgQ09ORklERU5USUFMLCBQUklWQVRFLCBTQUZFIH0KKyAgICAgICAgICBEZXRlcm1pbmVzIHRo ZSBsZXZlbCBvZiBwcm90ZWN0aW9uIGFwcGxpZWQgdG8gdGhlIGNvbW1hbmQKKyAgICAgICAgICBj aGFubmVsOgorCisgIENMRUFSICAgICAgICAgRGF0YSBpcyBzZW50IGluIHBsYWludGV4dCBhbmQg bm90IHByb3RlY3RlZCBhZ2FpbnN0IHRhbXBlcmluZy4KKyAgQ09ORklERU5USUFMICBEYXRhIGlz IGVuY3J5cHRlZCBidXQgbm90IHByb3RlY3RlZCBhZ2FpbnN0IHRhbXBlcmluZy4KKyAgUFJJVkFU RSAgICAgICBEYXRhIGlzIGVuY3J5cHRlZCBhbmQgaXMgcHJvdGVjdGVkIGFnYWluc3QgdGFtcGVy aW5nLgorICBTQUZFICAgICAgICAgIERhdGEgaXMgc2VudCBpbiBwbGFpbnRleHQgYnV0IHByb3Rl Y3RlZCBhZ2FpbnN0IHRhbXBlcmluZy4KKworICAgICAgICAgIFRoZSBkZWZhdWx0IGlzIFBSSVZB VEUuCisKKyAgIFNFVCBGVFAgQ1JFREVOVElBTC1GT1JXQVJESU5HIHsgT04sIE9GRiB9CisgICAg ICAgICAgVGVsbHMgd2hldGhlciBlbmQtdXNlciBjcmVkZW50aWFscyBhcmUgdG8gYmUgZm9yd2Fy ZGVkIHRvIHRoZQorICAgICAgICAgIHNlcnZlciBpZiBzdXBwb3J0ZWQgYnkgdGhlIGF1dGhlbnRp Y2F0aW9uIG1ldGhvZCAoR1NTQVBJLUtSQjUKKyAgICAgICAgICBvbmx5KS4gVGhpcyBpcyBvZnRl biByZXF1aXJlZCB0byBhbGxvdyBhY2Nlc3MgdG8gZGlzdHJpYnV0ZWQKKyAgICAgICAgICBmaWxl IHN5c3RlbXMgKGUuZy4gQUZTLikKKworICAgU0VUIEZUUCBEQVRBLVBST1RFQ1RJT04tTEVWRUwg eyBDTEVBUiwgQ09ORklERU5USUFMLCBQUklWQVRFLCBTQUZFIH0KKyAgICAgICAgICBUZWxscyB3 aGF0IGxldmVsIG9mIHByb3RlY3Rpb24gaXMgYXBwbGllZCB0byBzdWJzZXF1ZW50IGRhdGEKKyAg ICAgICAgICBjaGFubmVscy4gVGhlIG1lYW5pbmdzIG9mIHRoZSBwcm90ZWN0aW9uLWxldmVsIGtl eXdvcmRzIGFyZSB0aGUKKyAgICAgICAgICBzYW1lIGFzIGZvciBTRVQgRlRQIENPTU1BTkQtUFJP VEVDVElPTi1MRVZFTC4gVGhlIGRlZmF1bHQgaXMKKyAgICAgICAgICBQUklWQVRFLgorCisgICBT RVQgRlRQIFNSUCBDSVBIRVIgbmFtZQorICAgICAgICAgIFNwZWNpZmllcyB0aGUgY2lwaGVyIHRv IGJlIHVzZWQgZm9yIGVuY3J5cHRpb24gd2hlbiBTUlAKKyAgICAgICAgICBhdXRoZW50aWNhdGlv biBpcyBpbiB1c2UuIFRoZSBsaXN0IG9mIHBvc3NpYmxlIGNob2ljZXMgaXMKKyAgICAgICAgICBj b21wdXRlZCBiYXNlZCBvbiB0aGUgY2FwYWJpbGl0aWVzIG9mIHRoZSBsb2NhbCBTUlAgbGlicmFy eSBhbmQKKyAgICAgICAgICBpbmNsdWRlcyBOT05FIHBsdXMgemVybyBvciBtb3JlIG9mIHRoZSBm b2xsb3dpbmc6CisKKyAgQkxPV0ZJU0hfRUNCICAgICAgICBDQVNUNV9FQ0IgICAgICAgICAgREVT X0VDQiAgICAgICAgICBERVMzX0VDQgorICBCTE9XRklTSF9DQkMgICAgICAgIENBU1Q1X0NCQyAg ICAgICAgICBERVNfQ0JDICAgICAgICAgIERFUzNfQ0JDCisgIEJMT1dGSVNIX0NGQjY0ICAgICAg Q0FTVDVfQ0ZCNjQgICAgICAgIERFU19DRkI2NCAgICAgICAgREVTM19DRkI2NAorICBCTE9XRklT SF9PRkI2NCAgICAgIENBU1Q1X09GQjY0ICAgICAgICBERVNfT0ZCNjQgICAgICAgIERFUzNfT0ZC NjQKKworICAgICAgICAgIFRoZSBkZWZhdWx0IGlzIERFUzNfRUNCLgorCisgICBTRVQgRlRQIFNS UCBIQVNIIG5hbWUKKyAgICAgICAgICBTcGVjaWZpZXMgdGhlIGhhc2ggdG8gYmUgdXNlZCBmb3Ig ZGF0YSBwcm90ZWN0aW9uIHdoZW4gU1JQCisgICAgICAgICAgYXV0aGVudGljYXRpb24gaXMgaW4g dXNlLiBUaGUgY2hvaWNlcyBhcmUgTUQ1IGFuZCBTSEEuIFRoZQorICAgICAgICAgIGRlZmF1bHQg aXMgU0hBLgorCisgICBDb21tYW5kLWxpbmUgb3B0aW9uczoKKworICAgLWsgbmFtZQorICAgICAg ICAgIFNwZWNpZmllcyB0aGUgcmVhbG0gdG8gYmUgdXNlZCB3aXRoIEtlcmJlcm9zIDQgYXV0aGVu dGljYXRpb24gKD0KKyAgICAgICAgICBTRVQgQVVUSCBLNCBSRUFMTSBuYW1lKS4KKworICAgLWYK KyAgICAgICAgICBFbmFibGVzIGZvcndhcmRpbmcgb2YgS2VyYmVyb3MgNSBjcmVkZW50aWFscyB0 byB0aGUgaG9zdCB3aGVuCisgICAgICAgICAgdXNpbmcgR1NTQVBJIGF1dGhlbnRpY2F0aW9uICg9 IFNFVCBBVVRIIEs1IEZPUldBUkRBQkxFIE9OKS4KKworICAgLXgKKyAgICAgICAgICBFbmFibGVz IGF1dG9lbmNyeXB0aW9uICg9IFNFVCBGVFAgQVVUT0VOQ1JZUFRJT04gT04pLgorCisgICAtYyBj aXBoZXIKKyAgICAgICAgICBTcGVjaWZpZXMgdGhlIGtpbmQgb2YgY2lwaGVyIHRvIGJlIHVzZWQg Zm9yIGVuY3J5cHRpb24gd2l0aCBTUlAKKyAgICAgICAgICBhdXRoZW50aWNhdGlvbi4gRXF1aXZh bGVudCB0byBTRVQgRlRQIFNSUCBDSVBIRVIsIHdpdGggdGhlIHNhbWUKKyAgICAgICAgICBjaG9p Y2VzLiBJZiB0aGlzIG9wdGlvbiBpcyBub3QgZ2l2ZW4sIENBU1Q1X0NCQyBpcyB1c2VkLgorCisg ICAtSCBoYXNoCisgICAgICAgICAgU3BlY2lmaWVzIHRoZSBoYXNoIHRvIGJlIHVzZWQgZm9yIGVu Y3J5cHRpb24gd2l0aCBTUlAKKyAgICAgICAgICBhdXRoZW50aWNhdGlvbi4gRXF1aXZhbGVudCB0 byBTRVQgRlRQIFNSUCBIQVNILCB3aXRoIHRoZSBzYW1lCisgICAgICAgICAgY2hvaWNlcy4gSWYg dGhpcyBvcHRpb24gaXMgbm90IGdpdmVuLCBTSEEgaXMgdXNlZC4KKworICAgLXogZGVidWcKKyAg ICAgICAgICBUdXJucyBvbiBTU0wvVExTIGRlYnVnZ2luZy4KKworICAgLXogc2VjdXJlCisgICAg ICAgICAgUmVxdWlyZXMgc2VjdXJlIGNvbm5lY3Rpb24uCisKKyAgIC16IGNlcnRzb2sKKyAgICAg ICAgICBTYXlzIHRvIGFjY2VwdCBhbGwgY2VydGlmaWNhdGVzIHdpdGhvdXQgY2hlY2tpbmcgdmFs aWRpdHkuCisKKyAgIC16IHZlcmlmeT1uCisgICAgICAgICAgU2V0cyBjZXJ0aWZpY2F0ZSB2ZXJp ZmljYXRpb24gbW9kZSB0byB0aGUgZ2l2ZW4gbnVtYmVyLCBuOgorICAgICAgICAgICAgMCA9IG5v IHZlcmlmaWNhdGlvbgorICAgICAgICAgICAgMSA9IHZlcmlmeSBjZXJ0aWZpY2F0ZSBpZiBwcmVz ZW50ZWQKKyAgICAgICAgICAgIDIgPSByZXF1aXJlIHZlcmlmaWNhdGlvbiBvZiBjZXJ0aWZpY2F0 ZQorCisgICAteiBjZXJ0PWZpbGVuYW1lCisgICAgICAgICAgU3BlY2lmaWVzIGEgZmlsZSBjb250 YWluaW5nIGEgY2xpZW50IGNlcnRpZmljYXRlIHRvIGJlIHByZXNlbnRlZAorICAgICAgICAgIHRv IHRoZSBGVFAgc2VydmVyLgorCisgICAteiBrZXk9ZmlsZW5hbWUKKyAgICAgICAgICBTcGVjaWZp ZXMgYSBmaWxlIGNvbnRhaW5pbmcgYSBwcml2YXRlIGtleSBtYXRjaGluZyB0aGUgY2xpZW50Cisg ICAgICAgICAgY2VydGlmaWNhdGUuCisKKyAgIC16ICFrcmI0CisgICAgICAgICAgKG5va3JiNCkg RGlzYWJsZXMgdGhlIHVzZSBvZiBLZXJiZXJvcyA0LgorCisgICAteiAhZ3NzCisgICAteiBub2dz cworICAgICAgICAgIERpc2FibGVzIHRoZSB1c2Ugb2YgR1NTQVBJIC0gS2VyYmVyb3MgNS4KKwor ICAgLXogIXNycAorICAgLXogbm9zcnAKKyAgICAgICAgICBEaXNhYmxlcyB1c2Ugb2YgU1JQLgor CisgICAteiAhc3NsCisgICAteiBub3NzbAorICAgICAgICAgIERpc2FibGVzIHRoZSB1c2Ugb2Yg U1NMLgorCisgICAteiAhdGxzCisgICAteiBub3RscworICAgICAgICAgIERpc2FibGVzIHRoZSB1 c2Ugb2YgVExTLgorCisgICBDYXV0aW9uOiBJZiB5b3VyIEZUUCBjb25uZWN0aW9uIGlzIHNlY3Vy ZWQgdmlhIEFVVEggVExTLCBpdCBpcyBub3QKKyAgIHBvc3NpYmxlIHRvIGludGVycnVwdCBhIGZp bGUgdHJhbnNmZXIuIFRoaXMgaXMgYSBsaW1pdGF0aW9uIG9mIGFsbAorICAga25vd24gRlRQIHNl cnZlcnMgdGhhdCBzdXBwb3J0IEFVVEggVExTLgorCisgICBOb3RlIHRoYXQgd2hlbiB1c2luZyBj ZXJ0YWluIHNlY3VyaXR5IG1ldGhvZHMsIHN1Y2ggYXMgU1NMIG9yIFRMUywgeW91CisgICBtYXkg YmUgcHJvbXB0ZWQgdG8gY29uZmlybSBvciB2ZXJpZnkgY2VydGFpbiBhY3Rpb25zIG9yIGNvbmRp dGlvbnMsIGZvcgorICAgZXhhbXBsZSwgd2hldGhlciB0byBhY2NlcHQgc2VsZi1zaWduZWQgY2Vy dGlmaWNhdGVzLiBUaGlzIGNhbiBpbnRlcmZlcmUKKyAgIHdpdGggdW5hdHRlbmRlZCBvcGVyYXRp b24gb2Ygc2NyaXB0czsgc2VlIFsyNDVdU2VjdGlvbiAzLjEwLgorCisgICBbIFsyNDZdVG9wIF0g WyBbMjQ3XUZUUCBUb3AgXSBbIFsyNDhdQy1LZXJtaXQgSG9tZSBdIFsgWzI0OV1LZXJtaXQgSG9t ZQorICAgXQorCiszLjMuIFNldHRpbmcgRlRQIFByZWZlcmVuY2VzCisKKyAgIEZUUCBwcmVmZXJl bmNlcyBjYW4gYmUgc2V0IGdsb2JhbGx5IGFuZCBwZXJzaXN0ZW50bHkgd2l0aCB0aGUgY29tbWFu ZHMKKyAgIGluIHRoZSBmb2xsb3dpbmcgc2VjdGlvbnM7IG1hbnkgb2YgdGhlc2UgY2FuIGFsc28g YmUgb3ZlcnJpZGRlbiBvbiBhCisgICBwZXItY29tbWFuZCBiYXNpcyB3aXRoIHN3aXRjaGVzIHRo YXQgaGF2ZSB0aGUgc2FtZSBuYW1lLgorCiszLjMuMS4gTG9ncywgTWVzc2FnZXMsIGFuZCBPdGhl ciBGZWVkYmFjaworCisgICBZb3UgY2FuIGNvbnRyb2wgdGhlIGFtb3VudCBvZiBmZWVkYmFjayBy ZWNlaXZlZCBmcm9tIHlvdXIgRlRQIHNlc3Npb24KKyAgIHdpdGggdGhlIGNvbW1hbmRzIGluIHRo aXMgc2VjdGlvbi4gRmlyc3QsIHlvdSBjYW4gY3JlYXRlIGEgbG9nIG9mIHlvdXIKKyAgIEZUUCB0 cmFuc2ZlcnMgd2l0aCB0aGUgZm9sbG93aW5nIGNvbW1hbmRzOgorCisgICBTRVQgVFJBTlNBQ1RJ T04tTE9HIHsgVkVSQk9TRSwgRlRQLCBCUklFRiB9CisgICAgICAgICAgU2VsZWN0cyB0aGUgbG9n IGZvcm1hdC4gVkVSQk9TRSBpcyB0aGUgZGVmYXVsdCwgYW5kIGlzIGRlc2NyaWJlZAorICAgICAg ICAgIGluIFsyNTBddGhlIG1hbnVhbC4gRlRQIGNob29zZXMgYSBXVS1GVFBEIGZvcm1hdCwgdGhl IHNhbWUgYXMgaXMKKyAgICAgICAgICB1c2VkIGJ5IHRoZSBwb3B1bGFyIEZUUCBzZXJ2ZXIuIEJS SUVGIGNyZWF0ZXMgcGVyLWZpbGUgcmVjb3JkcworICAgICAgICAgIGluIGNvbW1hLXNlcGFyYXRl ZC1saXN0IGZvcm1hdC4gRm9yIGdyZWF0ZXIgZGV0YWlsLCBzZWUKKyAgICAgICAgICBbMjUxXVNl Y3Rpb24gNC4xNyBvZiB0aGUgWzI1Ml1DLUtlcm1pdCA3LjAgVXBkYXRlIE5vdGVzLgorCisgICBM T0cgVFJBTlNBQ1RJT05TIGZpbGVuYW1lCisgICAgICAgICAgUmVjb3JkcyBGVFAgKG9yIEtlcm1p dCwgb3IgYW55IG90aGVyIHByb3RvY29sKSB1cGxvYWRzIGFuZAorICAgICAgICAgIGRvd25sb2Fk cyBpbiB0aGUgZ2l2ZW4gZmlsZSB1c2luZyB0aGUgZm9ybWF0IHNlbGVjdGVkIGJ5IHRoZQorICAg ICAgICAgIG1vc3QgcmVjZW50IFNFVCBUUkFOU0FDVElPTi1MT0cgY29tbWFuZCwgaWYgYW55LCBv ciBlbHNlIHRoZQorICAgICAgICAgIGRlZmF1bHQgZm9ybWF0LgorCisgICBGVFAgc2NyZWVuIG1l c3NhZ2VzIGFuZCBkaXNwbGF5cyBhcmUgY29udHJvbGxlZCBieSB0aGUgZm9sbG93aW5nCisgICBj b21tYW5kczoKKworICAgU0VUIFRSQU5TRkVSIERJU1BMQVkgeyBGVUxMU0NSRUVOLCBDUlQsIFNF UklBTCwgQlJJRUYsIE5PTkUsIE9GRiB9CisgICAgICAgICAgRlRQIHRyYW5zZmVycyB1c2UgS2Vy bWl0J3Mgbm9ybWFsIGZpbGUtdHJhbnNmZXIgZGlzcGxheSBzdHlsZXMuCisgICAgICAgICAgVXNl IHRoaXMgY29tbWFuZCB0byBjaG9vc2UgdGhlIGRlc2lyZWQgZm9ybWF0OyB0aGUgZGVmYXVsdCBv bgorICAgICAgICAgIG1vc3QgcGxhdGZvcm1zIGlzIEZVTExTQ1JFRU4uIFRoZSBkaXNwbGF5IGlz IGF1dG9tYXRpY2FsbHkKKyAgICAgICAgICBkaXNhYmxlZCBpZiBLZXJtaXQgaXMgcnVubmluZyBp biB0aGUgYmFja2dyb3VuZCBvciBpbiBiYXRjaC4KKyAgICAgICAgICBCUklFRiBpcyBhbHdheXMg dXNlZCBmb3IgY29tbWFuZC1saW5lIGluaXRpYXRlZCB0cmFuc2ZlcnMKKyAgICAgICAgICAodW5s ZXNzIHN1cHByZXNzZWQgYnkgLXEpLiBXaGlsZSBhIGZpbGUtdHJhbnNmZXIgaXMgaW4gcHJvZ3Jl c3MsCisgICAgICAgICAgeW91IGNhbiBpbnRlcnJ1cHQgaXQgaW4gdGhlIG5vcm1hbCBLZXJtaXQg d2F5IGJ5IHR5cGluZyBvbmUgb2YKKyAgICAgICAgICB0aGUgZm9sbG93aW5nIGtleXMgb3Iga2V5 IGNvbWJpbmF0aW9uczoKKyAgICAgICAgICAgIFggLSBDYW5jZWwgY3VycmVudCBmaWxlIGJ1dCBn byBvbiB0byB0aGUgbmV4dCBvbmUgKGlmIGFueSkuCisgICAgICAgICAgICBaIC0gQ2FuY2VsIHRo ZSBlbnRpcmUgdHJhbnNmZXIuICAgQ3RybC1MIG9yIEN0cmwtVyAtIFJlZnJlc2gKKyAgICAgICAg ICB0aGUgZmlsZS10cmFuc2ZlciBkaXNwbGF5IChpZiBhbnkpLgorCisgICBTRVQgRlRQIERJU1BM QVkgeyBGVUxMU0NSRUVOLCBDUlQsIFNFUklBTCwgQlJJRUYsIE5PTkUsIE9GRiB9CisgICAgICAg ICAgTGlrZSBTRVQgVFJBTlNGRVIgRElTUExBWSwgYnV0IGFwcGxpZXMgb25seSB0byBGVFAgY29u bmVjdGlvbnMsCisgICAgICAgICAgYW5kIGRvZXMgbm90IGFmZmVjdCBLZXJtaXQtIG9yIG90aGVy IHByb3RvY29sIGZpbGUgdHJhbnNmZXJzLgorCisgICBTRVQgUVVJRVQgeyBPTiwgT0ZGIH0KKyAg ICAgICAgICBUaGlzIGNvbW1hbmQgYXBwbGllcyB0byBLZXJtaXQgaW4gZ2VuZXJhbCwgbm90IGp1 c3QgRlRQLiBPRkYgYnkKKyAgICAgICAgICBkZWZhdWx0OyB3aGVuIE9OLCBpdCBzdXBwcmVzc2Vz IG1vc3QgbWVzc2FnZXMgZnJvbSBtb3N0IGNvbW1hbmRzCisgICAgICAgICAgYXMgd2VsbCBhcyB0 aGUgZmlsZS10cmFuc2ZlciBkaXNwbGF5LgorCisgICBTRVQgRlRQIFBST0dSRVNTLU1FU1NBR0VT IHsgT04sIE9GRiB9CisgICAgICAgICAgVGVsbHMgd2hldGhlciBLZXJtaXQgc2hvdWxkIHByaW50 IGxvY2FsbHktZ2VuZXJhdGVkIGZlZWRiYWNrCisgICAgICAgICAgbWVzc2FnZXMgZm9yIGVhY2gg bm9uLWZpbGUtdHJhbnNmZXIgY29tbWFuZC4gT04gYnkgZGVmYXVsdC4KKworICAgU0VUIEZUUCBW RVJCT1NFLU1PREUgeyBPTiwgT0ZGIH0KKyAgICAgICAgICBUZWxscyB3aGV0aGVyIHRvIGRpc3Bs YXkgYWxsIHJlc3BvbnNlcyBmcm9tIHRoZSBGVFAgc2VydmVyLiBPRkYKKyAgICAgICAgICBieSBk ZWZhdWx0LiBUaGlzIHNob3dzIGFsbCByZXNwb25zZXMgdG8gYWxsIGNvbW1hbmRzLCBleGNlcHQK KyAgICAgICAgICB3aGVuIHRoZSBmaWxlLXRyYW5zZmVyIGRpc3BsYXkgaXMgYWN0aXZlLCBhbmQg dW5sZXNzIHlvdSBoYXZlCisgICAgICAgICAgU0VUIFFVSUVUIE9OLiBXaGVuIE9GRiwgcmVzcG9u c2VzIGFyZSBzaG93biBvbmx5IGZvciBjb21tYW5kcworICAgICAgICAgIHN1Y2ggYXMgRlRQIFBX RCB3aG9zZSBwdXJwb3NlIGlzIHRvIGRpc3BsYXkgYSByZXNwb25zZS4KKworICAgU0VUIEZUUCBE RUJVRyB7IE9OLCBPRkYgfQorICAgICAgICAgIFRlbGxzIHdoZXRoZXIgbG9jYWwgY2xpZW50IGRl YnVnZ2luZyBpbmZvcm1hdGlvbiBzaG91bGQgYmUKKyAgICAgICAgICBkaXNwbGF5ZWQuIE9GRiBi eSBkZWZhdWx0LiBXaGVuIE9OLCB0aGUgY29tbWFuZHMgdGhhdCBhcmUgc2VudAorICAgICAgICAg IHRvIHRoZSBzZXJ2ZXIgYXJlIHNob3duLCBhcyB3ZWxsIGFzIGl0cyByZXNwb25zZXMgKGV2ZW4g aWYKKyAgICAgICAgICBWRVJCT1NFLU1PREUgaXMgT0ZGKSwgcGx1cyBhZGRpdGlvbmFsIGluZm9y bWF0aW9uYWwgbWVzc2FnZXMgYXJlCisgICAgICAgICAgcHJpbnRlZCByZWdhcmRpbmcgdGhlIHBy b2dyZXNzIG9mIHNlY3VyZSBvcGVyYXRpb25zLiBBbHNvLCB0aGUKKyAgICAgICAgICB0ZW1wb3Jh cnkgZmlsZSBjcmVhdGVkIGJ5IHRoZSBbMjUzXU1HRVQgY29tbWFuZCBpcyBub3QgZGVsZXRlZAor ICAgICAgICAgIHNvIHlvdSBjYW4gc2VlIHdoYXQncyBpbiBpdC4KKworICAgU2V0IGFsbCBvZiB0 aGVzZSB0byBPRkYgd2hlbiBzaWxlbnQgcnVubmluZyBpcyBkZXNpcmVkLgorCiszLjMuMi4gT3Bl cmF0aW9uYWwgUHJlZmVyZW5jZXMKKworICAgRlRQIERJU0FCTEUgbmV3LXByb3RvY29sLWZlYXR1 cmUtbmFtZQorICAgRlRQIEVOQUJMRSBuZXctcHJvdG9jb2wtZmVhdHVyZS1uYW1lCisgICAgICAg ICAgRXhwbGFpbmVkIGluIFsyNTRdU2VjdGlvbiAzLjExLgorCisgICBTRVQgRlRQIEFVVE9MT0dJ TiB7IE9OLCBPRkYgfQorICAgICAgICAgIElmIHlvdSBnaXZlIHRoaXMgY29tbWFuZCBwcmlvciB0 byBvcGVuaW5nIGFuIEZUUCBjb25uZWN0aW9uLCBpdAorICAgICAgICAgIGNvbnRyb2xzIHdoZXRo ZXIgS2VybWl0IHRyaWVzIHRvIGxvZyB5b3UgaW4gYXV0b21hdGljYWxseSBhcworICAgICAgICAg IHBhcnQgb2YgdGhlIGNvbm5lY3Rpb24gcHJvY2Vzcy4gTm9ybWFsbHkgT04sIHdoaWNoIG1lYW5z IHRoZQorICAgICAgICAgIHVzZXJuYW1lIGFuZCBwYXNzd29yZCBhcmUgc2VudCBhdXRvbWF0aWNh bGx5IChhbmQgcHJvbXB0ZWQgZm9yCisgICAgICAgICAgaWYgdGhleSBhcmUgbm90IHlldCBrbm93 bikuIFdoZW4gT0ZGLCBGVFAgT1BFTiBjb25uZWN0cyB0byB0aGUKKyAgICAgICAgICBzZXJ2ZXIg d2l0aG91dCBsb2dnaW5nIGluLiBPRkYgaXMgZXF1aXZhbGVudCB0byB0aGUgLW4KKyAgICAgICAg ICBjb21tYW5kLWxpbmUgb3B0aW9uIHdoZW4gdXNpbmcgS2VybWl0J3MgRlRQIGNvbW1hbmQtbGlu ZQorICAgICAgICAgIHBlcnNvbmFsaXR5LiBTZWUgWzI1NV1TZWN0aW9uIDMuMS40IGZvciB1c2Fn ZS4KKworICAgU0VUIEZUUCBQQVNTSVZFLU1PREUgeyBPTiwgT0ZGIH0KKyAgICAgICAgICBPTiBi eSBkZWZhdWx0LCB0byBhdm9pZCByYW5kb20gVENQIHBvcnQgYXNzaWdubWVudCBmb3IgZGF0YQor ICAgICAgICAgIGNvbm5lY3Rpb25zLCB3aGljaCBjYW4gcHJldmVudCBGVFAgcHJvdG9jb2wgZnJv bSB3b3JraW5nIHRocm91Z2gKKyAgICAgICAgICBmaXJld2FsbHMgYW5kIG5ldHdvcmsgYWRkcmVz cyB0cmFuc2xhdG9ycyAoZm9yIG1vcmUgb24gdGhlc2UKKyAgICAgICAgICB0b3BpY3MsIHNlZSB0 aGUgWzI1Nl1LZXJtaXQgc2VjdXJpdHkgcmVmZXJlbmNlLiBTZXQgdG8gT0ZGIGluCisgICAgICAg ICAgY2FzZSB0aGUgRlRQIHNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IHBhc3NpdmUgbW9kZSwgb3Ig aW4gY2FzZQorICAgICAgICAgIHRoZSBjbGllbnQgaGFzIHByb2JsZW1zIHdpdGggaXQgKGl0IGhh cyBiZWVuIG9ic2VydmVkLCBmb3IKKyAgICAgICAgICBleGFtcGxlLCB0aGF0IHdoZW4gdXNpbmcg cGFzc2l2ZSBtb2RlLCB0aGUgU0NPIFhFTklYIDIuMy40CisgICAgICAgICAgVENQL0lQIHN0YWNr IGhhbmdzIGluIHRoZSBjb25uZWN0KCkgY2FsbCBmb3JldmVyKS4gU3lub255bXM6CisgICAgICAg ICAgUEFTU0lWRSBbIE9OIF0sIFBBU1NJVkUgT0ZGLCBQQVNWIFsgT04gXSwgUEFTViBPRkYuCisK KyAgIFNFVCBGVFAgU0VORC1QT1JULUNPTU1BTkRTIHsgT04sIE9GRiB9CisgICAgICAgICAgVGhp cyBjb21tYW5kIGRldGVybWluZXMgd2hldGhlciB0aGUgRlRQIGNsaWVudCBzZW5kcyBhIG5ldyBQ T1JUCisgICAgICAgICAgY29tbWFuZCB0byB0aGUgc2VydmVyIHdoZW4gYWNjZXB0aW5nIGluY29t aW5nIGRhdGEgY29ubmVjdGlvbnMKKyAgICAgICAgICAoYXMgd2hlbiBub3QgdXNpbmcgcGFzc2l2 ZSBtb2RlLikgV2hlbiBQQVNTSVZFLU1PREUgaXMgT0ZGIGFuZAorICAgICAgICAgIFNFVCBTRU5E LVBPUlQgaXMgT0ZGLCB0aGUgcG9ydCB0aGF0IHdhcyBvcmlnaW5hbGx5IHNwZWNpZmllZCBpcwor ICAgICAgICAgIHJldXNlZC4gVGhpcyBpcyB0aGUgZGVmYXVsdCBiZWhhdmlvciBmb3Igbm9ybWFs IEZUUCBjbGllbnRzIGJ1dAorICAgICAgICAgIGl0IGlzIG5vdCBjb21wYXRpYmxlIHdpdGggbWFu eSBmaXJld2FsbHMuCisKKyAgIFNFVCBGVFAgQ0hBUkFDVEVSLVNFVC1UUkFOU0xBVElPTiB7IE9O LCBPRkYgfQorICAgICAgICAgIFdoZXRoZXIgdG8gdHJhbnNsYXRlIGNoYXJhY3RlciBzZXRzIHdo ZW4gdHJhbnNmZXJyaW5nIGZpbGVzIHdpdGgKKyAgICAgICAgICBGVFAgKGV4cGxhaW5lZCBpbiBb MjU3XVNlY3Rpb24gMy43KS4gT0ZGIGJ5IGRlZmF1bHQuCisKKyAgIFNFVCBGVFAgU0VSVkVSLUNI QVJBQ1RFUi1TRVQgbmFtZQorICAgICAgICAgIFRlbGxzIEtlcm1pdCB0aGUgY2hhcmFjdGVyIHNl dCB1c2VkIGJ5IHRoZSBGVFAgc2VydmVyLCBVVEYtOCBieQorICAgICAgICAgIGRlZmF1bHQgKFsy NThdU2VjdGlvbiAzLjcpLgorCisgICBTRVQgRlRQIFNFUlZFUi1USU1FLU9GRlNFVCBkZWx0YS10 aW1lCisgICAgICAgICAgVGVsbHMgS2VybWl0IHRvIGFwcGx5IHRoZSBnaXZlbiBbMjU5XWRlbHRh IHRpbWUgdG8gZmlsZQorICAgICAgICAgIHRpbWVzdGFtcHMgcHJvdmlkZWQgYnkgdGhlIHNlcnZl ciBmb3IgaXRzIGZpbGVzOyBmb3IgdXNlIHdoZW4KKyAgICAgICAgICAoZm9yIGV4YW1wbGUpIHRo ZSBzZXJ2ZXIgZG9lcyBub3QgaGF2ZSBpdHMgdGltZXpvbmUgc2V0CisgICAgICAgICAgY29ycmVj dGx5LgorCisgICBTRVQgRlRQIEVSUk9SLUFDVElPTiB7IFBST0NFRUQsIFFVSVQgfQorICAgICAg ICAgIFdoZW4gdHJhbnNmZXJyaW5nIGEgZ3JvdXAgb2YgZmlsZXMgd2l0aCBGVFAsIGFuZCBhbiBl cnJvciBvY2N1cnMKKyAgICAgICAgICB3aXRoIG9uZSBvZiB0aGUgZmlsZXMsIEtlcm1pdCBub3Jt YWxseSBnb2VzIG9uIHRoZSBuZXh0IGZpbGUuCisgICAgICAgICAgVXNlIFNFVCBGVFAgRVJST1It QUNUSU9OIHRvIFFVSVQgdG8gbWFrZSBLZXJtaXQgc3RvcCB0aGUKKyAgICAgICAgICB0cmFuc2Zl ciBpbW1lZGlhdGVseSBhbmQgZmFpbCBpZiBhbiBlcnJvciBvY2N1cnMgd2l0aCBhbnkgc2luZ2xl CisgICAgICAgICAgZmlsZSBpbiB0aGUgZ3JvdXAuIEV4YW1wbGU6IHlvdSBoYXZlIGdpdmVuIEtl cm1pdCBhIGxpc3Qgb2YKKyAgICAgICAgICBmaWxlcyB0byBzZW5kLCBhbmQgb25lIG9mIHRoZSBm aWxlcyBjYW4gbm90IGJlIGZvdW5kLCBvciByZWFkCisgICAgICAgICAgcGVybWlzc2lvbiBpcyBk ZW5pZWQuIE5vdGUgdGhhdCBjYW5jZWxpbmcgYSBmaWxlIGJ5IHR5cGluZyAnWCcKKyAgICAgICAg ICBkdXJpbmcgdHJhbnNmZXIgaXMgbm90IGNvbnNpZGVyZWQgYW4gZXJyb3IgKGlmIHlvdSB3YW50 IHRvCisgICAgICAgICAgY2FuY2VsIHRoZSBlbnRpcmUgdHJhbnNmZXIsIHR5cGUgJ1onIG9yIEN0 cmwtQykuCisKKyAgIFNFVCBGVFAgUEVSTUlTU0lPTlMgeyBBVVRPLCBPTiwgT0ZGIH0KKyAgICAg ICAgICBXaGVuIHVwbG9hZGluZyBmaWxlcyB3aXRoIFBVVCBvciBNUFVULCB0aGlzIHRlbGxzIHdo ZXRoZXIgS2VybWl0CisgICAgICAgICAgc2hvdWxkIHNlbmQgZWFjaCBmaWxlJ3MgcGVybWlzc2lv bnMuIFRoZSBkZWZhdWx0IGlzIE9GRiwgd2hpY2gKKyAgICAgICAgICBtZWFucyBub3QgdG8gc2Vu ZCBwZXJtaXNzaW9ucywgaW4gd2hpY2ggY2FzZSB0aGUgdXBsb2FkZWQgZmlsZSdzCisgICAgICAg ICAgcGVybWlzc2lvbnMgYXJlIHNldCBieSB0aGUgRlRQIHNlcnZlciBhY2NvcmRpbmcgdG8gaXRz IG93bgorICAgICAgICAgIGNyaXRlcmlhLiBPTiBtZWFucyB0byBzZW5kIHRoZW0sIEFVVE8gbWVh bnMgdG8gc2VuZCB0aGVtIG9ubHkgaWYKKyAgICAgICAgICB0aGUgY2xpZW50IChLZXJtaXQpIGFu ZCBzZXJ2ZXIgYXJlIG9uIGxpa2UgcGxhdGZvcm1zIChlLmcuIGJvdGgKKyAgICAgICAgICBVTklY KS4gVGhpcyBjb21tYW5kIGhhcyBubyBlZmZlY3Qgd2hlbiBkb3dubG9hZGluZywgc2luY2UgdGhl CisgICAgICAgICAgRlRQIHByb3RvY29sIGRvZXMgbm90IGluY2x1ZGUgYSB3YXkgZm9yIHRoZSBz ZXJ2ZXIgdG8gaW5mb3JtIHRoZQorICAgICAgICAgIGNsaWVudCBvZiBhIGZpbGUncyBwZXJtaXNz aW9ucy4gQWxzbyBzZWUgWzI2MF1GVFAgUFVUCisgICAgICAgICAgL1BFUk1JU1NJT05TLiBOb3Rl IHRoYXQgc2V0dGluZyBwZXJtaXNzaW9ucyBhZnRlciB1cGxvYWRpbmcgaXMKKyAgICAgICAgICBs aWtlbHkgdG8gd29yayAoY29ycmVjdGx5IG9yIGF0IGFsbCkgb25seSB3aGVuIHRoZSBjbGllbnQg YW5kCisgICAgICAgICAgc2VydmVyIHBsYXRmb3JtcyBhcmUgYWxpa2UgKGUuZy4gYm90aCBvZiB0 aGVtIGFyZSBzb21lIGZvcm0gb2YKKyAgICAgICAgICBVTklYKS4gQWxzbyBub3RlIHRoYXQgV2lu ZG93cyBmaWxlcyBkb24ndCBoYXZlIHBlcm1pc3Npb25zLiBBbHNvCisgICAgICAgICAgc2VlIFsy NjFdRlRQIENITU9ELgorCisgICBTRVQgRlRQIERBVEVTIHsgT04sIE9GRiB9CisgICAgICAgICAg V2hlbiBkb3dubG9hZGluZyBmaWxlcyB3aXRoIEdFVCBvciBNR0VULCB0aGlzIHRlbGxzIHdoZXRo ZXIKKyAgICAgICAgICBLZXJtaXQgc2hvdWxkIHRyeSB0byBzZXQgdGhlIHJlY2VpdmVkIGZpbGUn cyBkYXRlIGZyb20gdGhlCisgICAgICAgICAgc2VydmVyJ3MgZGF0ZS4gRlRQIERBVEVTIGlzIE9O IGJ5IGRlZmF1bHQuIE5vdGUsIGhvd2V2ZXIsIHRoYXQKKyAgICAgICAgICBGVFAgcHJvdG9jb2wg ZG9lcyBub3QgYWxsb3cgZGF0ZSBwcmVzZXJ2YXRpb24gd2hlbiB1cGxvYWRpbmcuIFNvCisgICAg ICAgICAgYXQgYmVzdCwgU0VUIEZUUCBEQVRFUyBPTiBjYW4gd29yayBvbmx5IHdoZW4gZG93bmxv YWRpbmcsIGFuZAorICAgICAgICAgIHRoZW4gb25seSB3aGVuIHRoZSBzZXJ2ZXIgYWdyZWVzIHRv IGZ1cm5pc2ggZmlsZSBkYXRlcy4KKworICAgU0VUIEZUUCBGSUxFTkFNRVMgeyBBVVRPLCBDT05W RVJURUQsIExJVEVSQUwgfQorICAgICAgICAgIFdoZW4gdXBsb2FkaW5nIChzZW5kaW5nKSBmaWxl cywgdGhpcyB0ZWxscyB3aGV0aGVyIHRvIGNvbnZlcnQKKyAgICAgICAgICBvdXRib3VuZCBmaWxl bmFtZXMgdG8gImNvbW1vbiBmb3JtIi4gVGhpcyBtZWFucyBhbGxvd2luZyBvbmx5CisgICAgICAg ICAgb25lIHBlcmlvZCBpbiBhIG5hbWUsIHVwcGVyY2FzaW5nIGFueSBsb3dlcmNhc2UgbGV0dGVy cywKKyAgICAgICAgICByZXBsYWNpbmcgc3BhY2VzIGJ5IHVuZGVyc2NvcmVzLCBldGMuIEFVVE9N QVRJQyBpcyB0aGUgZGVmYXVsdCwKKyAgICAgICAgICBtZWFuaW5nIExJVEVSQUwgd2hlbiBjbGll bnQgYW5kIHNlcnZlciBhcmUgdGhlIHNhbWUgdHlwZSBvZgorICAgICAgICAgIHN5c3RlbSAoZS5n LiBVTklYKSBhbmQgQ09OVkVSVEVEIG90aGVyd2lzZS4gU3BlY2lhbCBjYXNlOiBpZiB0aGUKKyAg ICAgICAgICBzZXR0aW5nIGlzIEFVVE9NQVRJQyBhbmQgdGhlIGNsaWVudCBpcyBub3QgVU5JWCBh bmQgdGhlIHNlcnZlcgorICAgICAgICAgIGlkZW50aWZpZXMgaXRzZWxmIGFzIFVOSVgsIEtlcm1p dCB1c2VzIGEgbGVzcy1zdHJpY3QgZm9ybSBvZgorICAgICAgICAgIGNvbnZlcnNpb24sIGluIHdo aWNoIGxvd2VyY2FzZSBsZXR0ZXJzIGFyZSBub3QgdXBwZXJjYXNlZCBhbmQKKyAgICAgICAgICB0 aGUgZmlsZW5hbWUgY2FuIGNvbnRhaW4gYW55IG51bWJlciBvZiBwZXJpb2RzLCBidXQgc3BhY2Vz IGFyZQorICAgICAgICAgIHN0aWxsIGNvbnZlcnRlZCB0byB1bmRlcnNjb3JlLiBXaGVuIHJlY2Vp dmluZywgY29udmVyc2lvbgorICAgICAgICAgIGdlbmVyYWxseSBtZWFucyB0byBjaGFuZ2UgYWxs LXVwcGVyY2FzZSBuYW1lcyB0byBsb3dlcmNhc2UgYW5kCisgICAgICAgICAgc3BhY2VzIHRvIHVu ZGVyc2NvcmUuCisKKyAgIFNFVCBGVFAgVU5JUVVFLVNFUlZFUi1OQU1FUyB7IE9OLCBPRkYgfQor ICAgICAgICAgIEFwcGxpZXMgb25seSB0byB1cGxvYWRzLiBUZWxscyB0aGUgc2VydmVyIHRvIGNy ZWF0ZSBuZXcsIHVuaXF1ZQorICAgICAgICAgIG5hbWVzIGZvciBpbmNvbWluZyBmaWxlcyB0aGF0 IGhhdmUgdGhlIHNhbWUgbmFtZXMgYXMgZXhpc3RpbmcKKyAgICAgICAgICBmaWxlcy4gT0ZGIGJ5 IGRlZmF1bHQsIGluIHdoaWNoIGNhc2UgdGhlIHNlcnZlciBvdmVyd3JpdGVzCisgICAgICAgICAg ZXhpc3RpbmcgZmlsZXMgd2l0aCBuZXcgZmlsZXMgb2YgdGhlIHNhbWUgbmFtZS4gV2hlbiBPTiwg dGhlCisgICAgICAgICAgc2VydmVyIHVzZXMgaXRzIG93biBidWlsdC1pbiBtZXRob2QgZm9yIGNy ZWF0aW5nIG5ldyBuYW1lcyBmb3IKKyAgICAgICAgICBpbmNvbWluZyBmaWxlczsgZm9yIGV4YW1w bGUsIGFwcGVuZGluZyBhIHBlcmlvZCAoLikgYW5kIGEgbnVtYmVyCisgICAgICAgICAgdG8gdGhl IG5hbWUuIENBVVRJT046IFVzZSB0aGlzIG9wdGlvbiBvbmx5IGlmIHlvdSBkbyBub3QgbmVlZCB0 bworICAgICAgICAgIHJlZmVyIHRvIHRoZSBmaWxlIGFmdGVyIGl0IGlzIHVwbG9hZGVkLCBzaW5j ZSBGVFAgcHJvdG9jb2wKKyAgICAgICAgICBwcm92aWRlcyBubyBtZWNoYW5pc20gZm9yIHRoZSBj bGllbnQgdG8gZmluZCBvdXQgd2hhdCBuYW1lIHdhcworICAgICAgICAgIGFzc2lnbmVkIGJ5IHRo ZSBzZXJ2ZXIuCisKKyAgIFNFVCBGVFAgQ09MTElTSU9OIHsgLi4uIH0KKyAgICAgICAgICBXaGVu IGRvd25sb2FkaW5nLCB3aGF0IHRvIGRvIGlmIGFuIGluY29taW5nIGZpbGUgaGFzIHRoZSBzYW1l CisgICAgICAgICAgbmFtZSBhcyBhbiBleGlzdGluZyBmaWxlLiBPcHRpb25zIGFyZSB0aGUgc2Ft ZSBhcyBmb3IgU0VUIEZJTEUKKyAgICAgICAgICBDT0xMSVNJT04uIElmIHRoaXMgY29tbWFuZCBp cyBub3QgZ2l2ZW4sIEtlcm1pdCdzIHJlZ3VsYXIgRklMRQorICAgICAgICAgIENPTExJU0lPTiBz ZXR0aW5nIGlzIHVzZWQuIElmIHRoaXMgY29tbWFuZCBpcyBnaXZlbiwgaXQKKyAgICAgICAgICBv dmVycmlkZXMgdGhlIEZJTEUgQ09MTElTSU9OIHNldHRpbmcgZm9yIEZUUCB0cmFuc2ZlcnMgb25s eS4gU2VlCisgICAgICAgICAgWzI2Ml1TZWN0aW9uIDMuNi4yIGZvciBkZXRhaWxzLgorCisgICBT RVQgRlRQIFRZUEUgeyBURVhULCBCSU5BUlksIFRFTkVYIH0KKyAgICAgICAgICBDaGFuZ2VzIHRo ZSBkZWZhdWx0IHRyYW5zZmVyIG1vZGUuIFdoZW4gc2VuZGluZyAodXBsb2FkaW5nKQorICAgICAg ICAgIGZpbGVzLCB0aGlzIGNvbW1hbmQgaGFzIG5vIGVmZmVjdCB1bmxlc3MgeW91IGRpc2FibGUg YXV0b21hdGljCisgICAgICAgICAgdGV4dC9iaW5hcnkgbW9kZSBzd2l0Y2hpbmcgKFsyNjNdU2Vj dGlvbiA0KSB3aXRoIFNFVCBGSUxFIFNDQU4KKyAgICAgICAgICBPRkYgb3IgU0VUIFRSQU5TRkVS IE1PREUgTUFOVUFMLiBXaGVuIHJlY2VpdmluZyAoZG93bmxvYWRpbmcpCisgICAgICAgICAgZmls ZXMsIHRoaXMgY29tbWFuZCBlc3RhYmxpc2hlcyB0aGUgdHJhbnNmZXIgbW9kZSB0byBiZSB1c2Vk CisgICAgICAgICAgd2hlbiBhIGZpbGVuYW1lIGRvZXMgbm90IG1hdGNoIGFueSBvZiBLZXJtaXQn cyB0ZXh0IG9yIGJpbmFyeQorICAgICAgICAgIGZpbGVuYW1lIHBhdHRlcm5zLCB1bmxlc3MgeW91 IHVzZSBTRVQgRlRQIEdFVC1GSUxFVFlQRS1TV0lUQ0hJTkcKKyAgICAgICAgICBvciBTRVQgVFJB TlNGRVIgTU9ERSBNQU5VQUwgdG8gZGlzYWJsZSBhdXRvbWF0aWMgc3dpdGNoaW5nLCBpbgorICAg ICAgICAgIHdoaWNoIGNhc2UsIHRoaXMgY29tbWFuZCBlc3RhYmxpc2hlcyB0aGUgdHJhbnNmZXIg bW9kZSBmb3IgYWxsCisgICAgICAgICAgZG93bmxvYWRlZCBmaWxlcy4gSW4gYWxsIGNhc2VzLCBo b3dldmVyLCB0aGUgRlRQIFRZUEUgY2FuIGJlCisgICAgICAgICAgb3ZlcnJpZGRlbiBpbiBhbnkg R0VUIG9yIFBVVCBjb21tYW5kIGJ5IGluY2x1ZGluZyBhIC9URVhUCisgICAgICAgICAgKC9BU0NJ SSksIC9CSU5BUlksIG9yIC9URU5FWCBzd2l0Y2guIFRoZSBGVFAgVFlQRSBpcyBpbmRlcGVuZGVu dAorICAgICAgICAgIG9mIHRoZSBLZXJtaXQgRklMRSBUWVBFIHNldHRpbmcuIFRFTkVYIGlzIHVz ZWQgZm9yIHNlbmRpbmcgOC1iaXQKKyAgICAgICAgICBiaW5hcnkgZmlsZXMgdG8gMzYtYml0IHBs YXRmb3JtcyBzdWNoIGFzIFRPUFMtMTAsIFRPUFMtMjAsIGFuZAorICAgICAgICAgIFRFTkVYLCBh bmQgZ2V0dGluZyB0aGVtIGJhY2sgYWdhaW4uIFN5bm9ueW06IEFTQ0lJID0gVEVYVC4gTm90ZToK KyAgICAgICAgICB0aGVyZSBpcyBhbHNvIGFuIEZUUCBUWVBFIGNvbW1hbmQsIHdoaWNoIGRvZXMg d2hhdCBTRVQgRlRQIFRZUEUKKyAgICAgICAgICBkb2VzIGJ1dCBhbHNvIHNlbmRzIGEgVFlQRSBj b21tYW5kIHRvIHRoZSBzZXJ2ZXIgaW1tZWRpYXRlbHkgaWYKKyAgICAgICAgICB0aGUgZ2l2ZW4g dHlwZSBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgY3VycmVudCBvbmUuCisKKyAgIElmIHlvdSB3YW50 IHdhbnQgc3BlY2lmaWMgRlRQIHByZWZlcmVuY2Ugc2V0dGluZ3MgdG8gYmUgaW4gZWZmZWN0IGZv cgorICAgYWxsIHlvdXIgS2VybWl0IEZUUCBzZXNzaW9ucywgcHV0IHRoZSBkZXNpcmVkIFNFVCBG VFAgY29tbWFuZHMgaW4geW91cgorICAgS2VybWl0IGN1c3RvbWl6YXRpb24gZmlsZSAofi8ubXlr ZXJtcmMgaW4gVU5JWCwgSzk1Q1VTVE9NLklOSSBpbgorICAgV2luZG93cykuCisKKyAgIFsgWzI2 NF1Ub3AgXSBbIFsyNjVdRlRQIFRvcCBdIFsgWzI2Nl1DLUtlcm1pdCBIb21lIF0gWyBbMjY3XUtl cm1pdCBIb21lCisgICBdCisKKzMuNC4gTWFuYWdpbmcgRGlyZWN0b3JpZXMgYW5kIEZpbGVzCisK KyAgIEluIEtlcm1pdCwgY29tbWFuZHMgZm9yIGRpcmVjdG9yeSBhbmQgZmlsZSBtYW5hZ2VtZW50 IGNhbiByZWZlciB0bzoKKworICAgICAqIFRoZSBsb2NhbCBjb21wdXRlcgorICAgICAqIEEgcmVt b3RlIGNvbXB1dGVyIHdoZW4geW91IGhhdmUgYSBjb25uZWN0aW9uIHRvIGEgS2VybWl0IHNlcnZl ciBvcgorICAgICAgIElLU0QuCisgICAgICogQSByZW1vdGUgY29tcHV0ZXIgd2hlbiB5b3UgaGF2 ZSBhIGNvbm5lY3Rpb24gdG8gYW4gRlRQIHNlcnZlci4KKworICAgKFRoZXJlIGNhbiBhbHNvIGJl IGFuIEhUVFAgY29ubmVjdGlvbiwgYnV0IHRoZSBjb21tYW5kcyBpbiB0aGlzIHNlY3Rpb24KKyAg IGRvbid0IGFwcGx5IHRvIEhUVFAgY29ubmVjdGlvbnMuKQorCisgICBUaHVzIGluIGdlbmVyYWws IGVhY2ggc3VjaCBjb21tYW5kIGNvbWVzIGluIHRocmVlIGZvcm1zOgorCisgICAgMS4gV2l0aCBu byBwcmVmaXggaW4gQy1LZXJtaXQgOC4wLjIwMCwgaXQgcmVmZXJzIHRvIHRoZSBsb2NhbCBjb21w dXRlcgorICAgICAgIChDRCwgRElSLCBldGMpLiBJbiBDLUtlcm1pdCA4LjAuMjAxIGFuZCBsYXRl ciwgaG93ZXZlciwgdGhlICJsb2N1cyIKKyAgICAgICBzd2l0Y2hlcyB0byBhdXRvbWF0aWNhbGx5 IHRvIHRoZSByZW1vdGUgRlRQIHNlcnZlciB3aGVuIHlvdSBtYWtlIGFuCisgICAgICAgRlRQIGNv bm5lY3Rpb24gKHNlZSB0aGUgU0VUIExPQ1VTIGRlc2NyaXB0aW9uIFsyNjhdU2VjdGlvbiA3KTsg dGh1cworICAgICAgIEMtS2VybWl0IDguMC4yMDEgYWN0cyBhbG1vc3QgZXhhY3RseSBsaWtlIGEg cmVndWxhciBGVFAgY2xpZW50IHdoZW4KKyAgICAgICBpdCBoYXMgYW4gRlRQIGNvbm5lY3Rpb24s IHlldCBzdGlsbCBhY3RzIGxpa2UgaXRzZWxmIG9uIG90aGVyIGtpbmRzCisgICAgICAgb2YgY29u bmVjdGlvbnMuCisgICAgMi4gV2l0aCB0aGUgUkVNT1RFIHByZWZpeCwgaXQgaXMgZm9yIGEgS2Vy bWl0IHNlcnZlciAoUkVNT1RFIENELAorICAgICAgIFJFTU9URSBESVIpLgorICAgIDMuIFdpdGgg dGhlIEZUUCBwcmVmaXgsIGl0J3MgZm9yIGFuIEZUUCBzZXJ2ZXIgKEZUUCBDRCwgRlRQIERJUiku CisgICAgNC4gQWxzbyBzZWUgWzI2OV1TZWN0aW9uIDMuOCwgd2hpY2ggZXhwbGFpbnMgIlItY29t bWFuZHMiIGFuZAorICAgICAgICJMLWNvbW1hbmRzIi4KKworICAgS2VybWl0J3MgRlRQIGZpbGUg YW5kIGRpcmVjdG9yeSBtYW5hZ2VtZW50IGNvbW1hbmRzIGFyZSBhcyBmb2xsb3dzLgorICAgV2hl biBhbiBSLWNvbW1hbmQgaXMgaW5jbHVkZWQgaW4gdGhlIFN5bm9ueW1zIGxpc3QsIGJlIHN1cmUg dG8gcmVhZAorICAgWzI3MF1TZWN0aW9uIDMuOCBhYm91dCBydWxlcyBmb3IgdXNlIG9mIFItY29t bWFuZHMuCisKKyAgIEZUUCBDRCBbIGRpcmVjdG9yeSBdCisgICAgICAgICAgVGVsbHMgdGhlIEZU UCBzZXJ2ZXIgdG8gY2hhbmdlIGl0cyBkZWZhdWx0ICh3b3JraW5nKSBkaXJlY3RvcnkKKyAgICAg ICAgICB0byB0aGUgb25lIGdpdmVuLCB3aGljaCB1c3VhbGx5IG11c3QgYmUgZXhwcmVzc2VkIGlu IHRoZSBzeW50YXgKKyAgICAgICAgICBvZiB0aGUgc2VydmVyIHBsYXRmb3JtIChVTklYLCBWTVMs IGV0YykuIElmIHRoZSBkaXJlY3RvcnkgaXMgbm90CisgICAgICAgICAgc3BlY2lmaWVkLCB0aGUg cmVzdWx0IGRlcGVuZHMgb24gdGhlIEZUUCBzZXJ2ZXIgLS0gaXQgbWlnaHQKKyAgICAgICAgICBj b21wbGFpbiB0aGF0IHRoZSBjb21tYW5kIGlzIGlsbGVnYWwsIG9yIGl0IG1pZ2h0IGNoYW5nZSB0 byB5b3VyCisgICAgICAgICAgb3JpZ2luYWwgbG9naW4gZGlyZWN0b3J5LiBTeW5vbnltczogRlRQ IENXRCAoQ2hhbmdlIFdvcmRpbmcKKyAgICAgICAgICBEaXJlY3RvcnkpOyBSQ0QuCisKKyAgIEZU UCBDRFVQCisgICAgICAgICAgVGVsbHMgdGhlIEZUUCBzZXJ2ZXIgdG8gY2hhbmdlIGl0cyBkZWZh dWx0ICh3b3JraW5nKSBkaXJlY3RvcnkKKyAgICAgICAgICB0byB0aGUgcGFyZW50IGRpcmVjdG9y eSBvZiBpdHMgY3VycmVudCBvbmUgKGVxdWl2YWxlbnQgdG8KKyAgICAgICAgICAiY2QgLi4iIGlu IFVOSVgsIG9yICJjZCBbLV0iIGluIFZNUykuIFN5bm9ueW1zOiBSQ0RVUCwgRlRQIFVQLgorCisg ICBGVFAgUFdECisgICAgICAgICAgQXNrcyB0aGUgRlRQIHNlcnZlciB0byByZXBvcnQgKCJwcmlu dCIpIGl0cyBjdXJyZW50IHdvcmtpbmcKKyAgICAgICAgICBkaXJlY3RvcnkuIFN5bm9ueW06IFJQ V0QuCisKKyAgIEZUUCBNS0RJUiBkaXJlY3RvcnkKKyAgICAgICAgICBBc2tzIHRoZSBGVFAgc2Vy dmVyIHRvIGNyZWF0ZSB0aGUgZGlyZWN0b3J5IHdob3NlIG5hbWUgaXMgZ2l2ZW4uCisgICAgICAg ICAgSW4gZ2VuZXJhbCwgdGhlIG5hbWUgbXVzdCBiZSBpbiB0aGUgc3ludGF4IG9mIHRoZSBzZXJ2 ZXIncyBmaWxlCisgICAgICAgICAgc3lzdGVtLCBhbmQgaXQgbXVzdCBiZSBlaXRoZXIgYWJzb2x1 dGUgKGEgZnVsbCBwYXRobmFtZSkgb3IKKyAgICAgICAgICByZWxhdGl2ZSB0byB0aGUgc2VydmVy J3MgY3VycmVudCAod29ya2luZykgZGlyZWN0b3J5LiBUaGlzCisgICAgICAgICAgY29tbWFuZCBm YWlscyBpZiB0aGUgZGlyZWN0b3J5IGNhbid0IGJlIGNyZWF0ZWQgZm9yIGFueSByZWFzb24sCisg ICAgICAgICAgaW5jbHVkaW5nIHRoYXQgaXQgZXhpc3RzIGFscmVhZHkuIFN5bm9ueW06IFJNS0RJ Ui4KKworICAgRlRQIFJNRElSIGRpcmVjdG9yeQorICAgICAgICAgIEFza3MgdGhlIEZUUCBzZXJ2 ZXIgdG8gcmVtb3ZlIHRoZSBkaXJlY3Rvcnkgd2hvc2UgbmFtZSBpcyBnaXZlbi4KKyAgICAgICAg ICBUaGUgcnVsZXMgYXJlIHRoZSBzYW1lIGFzIGZvciBNS0RJUiwgcGx1cyBpbiBtb3N0IGNhc2Vz LCB0aGUKKyAgICAgICAgICBzZXJ2ZXIgd2lsbCBub3QgcmVtb3ZlIGFueSBkaXJlY3RvcnkgdW5s ZXNzIGl0IGlzIGVtcHR5LgorICAgICAgICAgIFN5bm9ueW06IFJSTURJUi4KKworICAgRlRQIERJ UkVDVE9SWSBbIGZpbGVzcGVjIF0gWyByZWRpcmVjdG9ycyBdCisgICAgICAgICAgVGVsbHMgdGhl IEZUUCBzZXJ2ZXIgdG8gc2VuZCBhIGRpcmVjdG9yeSBsaXN0aW5nIG9mIHRoZQorICAgICAgICAg IHNwZWNpZmllZCBmaWxlcy4gSWYgbm8gZmlsZXNwZWMgaXMgZ2l2ZW4sIHRoZSBzZXJ2ZXIgbGlz dHMgYWxsCisgICAgICAgICAgZmlsZXMgaW4gaXRzIGN1cnJlbnQgd29ya2luZyBkaXJlY3Rvcnku IFRoZSByZXN1bHRzIGFyZSBpbgorICAgICAgICAgIHdoYXRldmVyIGZvcm1hdCB0aGUgc2VydmVy IGNob29zZXMgdG8gc2VuZCB0aGVtLiBZb3UgY2FuIHVzZQorICAgICAgICAgIFVOSVgtbGlrZSBy ZWRpcmVjdG9ycyB0byBzZW5kIHRoZSBsaXN0aW5nIHRvIGEgZmlsZSBvciBhCisgICAgICAgICAg cGlwZWxpbmUsIGV4YWN0bHkgYXMgd2l0aCB0aGUgcmVndWxhciBLZXJtaXQgY2xpZW50L3NlcnZl cgorICAgICAgICAgIFJFTU9URSBESVJFQ1RPUlkgY29tbWFuZCAoWzI3MV1Vc2luZyBDLUtlcm1p dCwgQ2hhcHRlciAxMSkuCisgICAgICAgICAgU3lub255bTogUkRJUkVDVE9SWS4gRXhhbXBsZXM6 CisKKyAgICBmdHAgZGlyICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBTaG93IGxpc3Rpbmcg b2YgYWxsIGZpbGVzIG9uIHNjcmVlbgorICAgIGZ0cCBkaXIgKi50eHQgICAgICAgICAgICAgICAg ICAgICA7IExpc3QgKi50eHQgZmlsZXMgb24gc2NyZWVuCisgICAgZnRwIGRpciAqLnR4dCA+IHNv bWVmaWxlICAgICAgICAgIDsgUHV0IGxpc3RpbmcgaW4gc29tZWZpbGUKKyAgICBmdHAgZGlyICou dHh0ID4+IHNvbWVmaWxlICAgICAgICAgOyBBcHBlbmQgbGlzdGluZyB0byBzb21lZmlsZQorICAg IGZ0cCBkaXIgKi50eHQgfCBzb3J0ID4gc29tZWZpbGUgICA7IFB1dCBzb3J0ZWQgbGlzdGluZyBp biBzb21lZmlsZQorICAgIGZ0cCBkaXIgfCBtb3JlICAgICAgICAgICAgICAgICAgICA7IFJ1bnMg bGlzdCB0aHJvdWdoICJtb3JlIgorICAgIGZ0cCBkaXIgfCBzb3J0IHwgbW9yZSAgICAgICAgICAg ICA7IFJ1bnMgbGlzdCB0aHJvdWdoICJzb3J0IiBhbmQgIm1vcmUiCisKKyAgIEZUUCBWRElSRUNU T1JZIFsgZmlsZXNwZWMgXSBbIHJlZGlyZWN0b3JzIF0KKyAgICAgICAgICAiVmVyYm9zZSIgZGly ZWN0b3J5LiBUaGlzIGlzIGFuIGFsdGVybmF0aXZlIEZUUCBESVJFQ1RPUlkKKyAgICAgICAgICBj b21tYW5kIHByaW1hcmlseSBmb3IgdXNlIHdpdGggREVDU1lTVEVNLTIwIChUT1BTLTIwKSBGVFAK KyAgICAgICAgICBzZXJ2ZXJzLCB3aGljaCBzZW5kIG9ubHkgZmlsZW5hbWVzIHdoZW4gZ2l2ZW4g YSBESVJFQ1RPUlkKKyAgICAgICAgICBjb21tYW5kOyB0aGUgVkRJUkVDVE9SWSBjb21tYW5kIG1h a2VzIHRoZW0gYWxzbyBzZW5kIGZpbGUgc2l6ZXMsCisgICAgICAgICAgZGF0ZXMsIGFuZCBhdHRy aWJ1dGVzLgorCisgICBGVFAgQ0hFQ0sgZmlsZXNwZWMKKyAgICAgICAgICBBc2tzIHRoZSBGVFAg c2VydmVyIHdoZXRoZXIgdGhlIGdpdmVuIGZpbGUgZXhpc3RzIG9yLCBpZiB0aGUKKyAgICAgICAg ICBmaWxlc3BlYyBjb250YWlucyB3aWxkY2FyZHMsIGlmIGFueSBmaWxlcyBtYXRjaCwgYW5kIHRo aXMKKyAgICAgICAgICBjb21tYW5kIHN1Y2NlZWRzIG9yIGZhaWxzIGFjY29yZGluZ2x5LgorCisg ICBGVFAgTU9EVElNRSBmaWxlbmFtZQorICAgICAgICAgIEFza3MgdGhlIEZUUCBzZXJ2ZXIsIHZp YSB0aGUgbm90LXlldC1zdGFuZGFyZCBGVFAgTURUTSBjb21tYW5kLAorICAgICAgICAgIHRvIHNl bmQgdGhlIG1vZGlmaWNhdGlvbiBkYXRlIGFuZCB0aW1lIG9mIHRoZSBnaXZlbiBmaWxlLiBUaGUK KyAgICAgICAgICByZXNwb25zZSBzaG91bGQgYmUgYSBudW1lcmljIHN0cmluZyBpbiB0aGUgZm9y bWF0OgorICAgICAgICAgIHl5eXltbWRkaGhtbXNzeHh4eHguLi4gd2hlcmUgeXl5eSBpcyB0aGUg eWVhciwgbW0gaXMgdGhlIG1vbnRoLAorICAgICAgICAgIGRkIGlzIHRoZSBkYXksIGhoIGlzIHRo ZSBob3VyICgwLTIzKSwgbW0gaXMgdGhlIG1pbnV0ZSwgc3MgaXMKKyAgICAgICAgICB0aGUgc2Vj b25kLCBhbmQgeHh4Li4uIGlzIHRoZSBvcHRpb25hbCBmcmFjdGlvbiBvZiB0aGUgc2Vjb25kICgw CisgICAgICAgICAgb3IgbW9yZSBkaWdpdHMpLiBUaGUgZGF0ZSBhbmQgdGltZSBpcyBleHByZXNz ZWQgaW4gVVRDIChHTVQsCisgICAgICAgICAgWnVsdSwgWmVyby1NZXJpZGlhbikuIFRoZSByZXN1 bHQgaXMgYXZhaWxhYmxlIHByb2dyYW1tYXRpY2FsbHkKKyAgICAgICAgICBpbiB0aGUgWzI3Ml1c dihmdHBfbWVzc2FnZSkgdmFyaWFibGUsIGFuZCBpcyB1bmRlcnN0YW5kYWJsZSBieQorICAgICAg ICAgIEtlcm1pdCdzIGRhdGUtdGltZSBzd2l0Y2hlcyBhbmQgZnVuY3Rpb25zLiBGb3IgZXhhbXBs ZSwgc3VwcG9zZQorICAgICAgICAgIHdlIHdhbnQgdG8gdXBsb2FkIGFsbCBsb2NhbCBmaWxlcyB0 aGF0IGFyZSBuZXdlciB0aGFuIGEKKyAgICAgICAgICBwYXJ0aWN1bGFyIGZpbGUgb24gdGhlIHNl cnZlcjoKKworICBDLUtlcm1pdD4gZnRwIG1vZHRpbWUgc2lnbnBvc3QKKyAgQy1LZXJtaXQ+IGVj aG8gXHYoZnRwX21lc3NhZ2UpCisgIDIwMDEwODA3MTEzNTQyLjAxNAorICBDLUtlcm1pdD4gZnRw IG1wdXQgL2FmdGVyOlx2KGZ0cF9tZXNzYWdlKUdNVCAqCisKKyAgICAgICAgICBOb3RlIHRoYXQg d2UgbXVzdCBhcHBlbmQgIkdNVCIgdG8gdGhlIGRhdGUtdGltZSBzdHJpbmcgdG8gbGV0CisgICAg ICAgICAgdGhlIC9BRlRFUiBzd2l0Y2gga25vdyB0aGUgdGltZSBpcyBHTVQgcmF0aGVyIHRoYW4g bG9jYWwuCisKKyAgIEZUUCBTSVpFIGZpbGVuYW1lCisgICAgICAgICAgQXNrcyB0aGUgRlRQIHNl cnZlciB0byBzZW5kIHRoZSBzaXplIChpbiBieXRlcykgb2YgdGhlIGdpdmVuCisgICAgICAgICAg ZmlsZS4gVGhlIHJlc3VsdCBtaWdodCB2YXJ5IGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBjdXJy ZW50IEZUUAorICAgICAgICAgIFRZUEUgaXMgYmluYXJ5IG9yIHRleHQgKCJhc2NpaSIpLiBGb3Ig YSByZWxpYWJsZSBieXRlIGNvdW50LCBkbworICAgICAgICAgIEZUUCBUWVBFIEJJTkFSWSBmaXJz dC4gVGhlIHJlc3VsdCBpcyBhdmFpbGFibGUgcHJvZ3JhbW1hdGljYWxseQorICAgICAgICAgIGlu IHRoZSBbMjczXVx2KGZ0cF9tZXNzYWdlKSB2YXJpYWJsZS4KKworICAgRlRQIENITU9EIHBlcm1p c3Npb25zIGZpbGVuYW1lCisgICAgICAgICAgVGVsbHMgdGhlIEZUUCBzZXJ2ZXIgdG8gc2V0IHRo ZSBwZXJtaXNzaW9ucyAocHJvdGVjdGlvbikgb2YgdGhlCisgICAgICAgICAgZ2l2ZW4gZmlsZSB0 byB0aGUgb25lcyBnaXZlbi4gVGhlIHBlcm1pc3Npb25zIGFuZCBmaWxlbmFtZSBtdXN0CisgICAg ICAgICAgYmUgZ2l2ZW4gaW4gd2hhdGV2ZXIgc3ludGF4IGlzIHJlcXVpcmVkIGJ5IHRoZSBzZXJ2 ZXIuIEV4YW1wbGUKKyAgICAgICAgICAoZm9yIGEgVU5JWC1iYXNlZCBGVFAgc2VydmVyKToKKwor ICBmdHAgY2htb2QgNjY0IG9vZmEudHh0CisKKyAgICAgICAgICBOb3QgYWxsIHNlcnZlcnMgc3Vw cG9ydCB0aGlzIGNvbW1hbmQuIEZvciBub24tVU5JWC1iYXNlZAorICAgICAgICAgIHNlcnZlcnMs IHlvdSBtaWdodCBuZWVkIHRvIHVzZSBGVFAgUVVPVEUgb3IgRlRQIFNJVEUgYW5kIHRoZQorICAg ICAgICAgIGFwcHJvcHJpYXRlIHBsYXRmb3JtLXNwZWNpZmljIEZUUCBzZXJ2ZXIgY29tbWFuZC4K KworICAgRlRQIFVNQVNLIFsgbnVtYmVyIF0KKyAgICAgICAgICBUaGlzIGNvbW1hbmQgaXMgcHJv YmFibHkgc3BlY2lmaWMgdG8gVU5JWC1iYXNlZCBzZXJ2ZXJzOyBpdCBzZXRzCisgICAgICAgICAg dGhlIFVOSVggInVtYXNrIiwgd2hpY2ggaXMgdGhlIGRlZmF1bHQgcGVybWlzc2lvbnMgbWFzayBm b3IgbmV3CisgICAgICAgICAgKGluIHRoaXMgY2FzZSwgaW5jb21pbmcpIGZpbGVzLiBDcnVkZWx5 IHB1dCwgdGhlIFVOSVggdW1hc2sgaXMKKyAgICAgICAgICBhbiBvY3RhbCByZXByZXNlbnRhdGlv biBvZiBhIGJpbmFyeSBudW1iZXIgaW4gaW4gd2hpY2ggYSAxIGJpdAorICAgICAgICAgIHN0YW5k cyBmb3IgYSBwZXJtaXNzaW9uIGJpdCB0aGF0IG11c3QgYmUgMCwgYW5kIGEgMCBiaXQgc3RhbmRz CisgICAgICAgICAgZm9yIGEgcGVybWlzc2lvbiBiaXQgdGhhdCBjYW4gYmUgMCBvciAxIGRlcGVu ZGluZyBvbiBvdGhlcgorICAgICAgICAgIGZhY3RvcnMsIHN1Y2ggYXMgdGhlIHBlcm1pc3Npb25z IG9mIHRoZSBwYXJlbnQgZGlyZWN0b3J5LgorICAgICAgICAgIEV4YW1wbGU6ICJ1bWFzayAwMDci IHJlcXVpcmVzIHRoYXQgbmV3IGZpbGVzIGFyZSBjcmVhdGVkIHdpdGhvdXQKKyAgICAgICAgICBy ZWFkL3dyaXRlL2V4ZWN1dGUgd29ybGQgcGVybWlzc2lvbi4gSWYgdGhlIG51bWJlciBpcyBub3QK KyAgICAgICAgICBzcGVjaWZpZWQsIHRoZSBzZXJ2ZXIncyBjdXJyZW50IHVtYXNrIGlzIHJlcG9y dGVkLgorCisgICBGVFAgUkVOQU1FIGZpbGVuYW1lIG5ld25hbWUKKyAgICAgICAgICBBc2tzIHRo ZSBGVFAgc2VydmVyIHRvIHJlbmFtZSB0aGUgZmlsZSB3aG9zZSBuYW1lIGlzICJmaWxlbmFtZSIK KyAgICAgICAgICB0byAibmV3bmFtZSIuIFdvcmtzIG9ubHkgZm9yIG9uZSBmaWxlOyBjYW4gbm90 IGJlIHVzZWQgd2l0aAorICAgICAgICAgIHdpbGRjYXJkcy4gVGhlIHNlcnZlcidzIGludGVycHJl dGF0aW9uIG9mICJuZXduYW1lIiBjYW4gdmFyeSAoaW4KKyAgICAgICAgICBzb21lIGNhc2VzIGl0 IG11c3QgYmUgYSBmaWxlbmFtZSwgaW4gb3RoZXJzIHBlcmhhcHMgaXQgY2FuIGFsc28KKyAgICAg ICAgICBiZSBhIGRpcmVjdG9yeSBuYW1lLCBpbiB3aGljaCBjYXNlIGlmIHRoZSBmaWxlbmFtZSBk ZW5vdGUgYQorICAgICAgICAgIHJlZ3VsYXIgZmlsZSwgdGhlIGZpbGUgbWlnaHQgYmUgbW92ZWQg dG8gdGhlIGdpdmVuIGRpcmVjdG9yeSkuCisgICAgICAgICAgU29tZSBzZXJ2ZXJzIG1pZ2h0IGFs bG93IGZpbGVzIHRvIGJlIHJlbmFtZWQgKCJtb3ZlZCIpIGJldHdlZW4KKyAgICAgICAgICBwaHlz aWNhbCBkaXNrcyBvciBwYXJ0aXRpb25zLCBvdGhlcnMgbWlnaHQgbm90LiBTeW5vbnltOgorICAg ICAgICAgIFJSRU5BTUUuCisKKyAgIEZUUCBERUxFVEUgWyBzd2l0Y2hlcyBdIGZpbGVzcGVjIFsg ZmlsZXNwZWMgWyAuLi4gXSBdCisgICAgICAgICAgVGVsbHMgdGhlIEZUUCBzZXJ2ZXIgdG8gZGVs ZXRlIHRoZSBmaWxlIG9yIGZpbGVzIGxpc3RlZC4gRWFjaAorICAgICAgICAgIGZpbGUgc3BlY2lm aWNhdGlvbiBtYXksIGJ1dCBuZWVkIG5vdCwgY29udGFpbiB3aWxkY2FyZAorICAgICAgICAgIGNo YXJhY3RlcnMgdG8gbWF0Y2ggbXVsdGlwbGUgZmlsZXMuIEZpbGUgc3BlY2lmaWNhdGlvbnMgYW5k CisgICAgICAgICAgd2lsZGNhcmQgc3ludGF4IG11c3QgYmUgdGhvc2Ugb2YgdGhlIHNlcnZlci4g QW55IGZpbGUKKyAgICAgICAgICBzcGVjaWZpY2F0aW9ucyB0aGF0IGNvbnRhaW4gc3BhY2VzIG11 c3QgYmUgZW5jbG9zZWQgaW4gYnJhY2VzIG9yCisgICAgICAgICAgZG91YmxlcXVvdGVzLiBGVFAg REVMRVRFIHN3aXRjaGVzIGFyZToKKworIC9FUlJPUi1BQ1RJT046ICAvRklMRU5BTUVTOiAgICAg L05PQkFDS1VQRklMRVMgIC9RVUlFVAorIC9FWENFUFQ6ICAgICAgICAvTEFSR0VSLVRIQU46ICAg L05PRE9URklMRVMgICAgIC9OT1BBR0UKKyAvUEFHRSAgICAgICAgICAgL1JFQ1VSU0lWRSAgICAg IC9TTUFMTEVSLVRIQU46CisKKyAgICAgICAgICBXaGVuIHVzZWQgd2l0aCBGVFAgREVMRVRFLCB0 aGUgL1JFQ1VSU0lWRSBzd2l0Y2ggZGVsZXRlcyBmaWxlcworICAgICAgICAgIGJ1dCBub3QgZGly ZWN0b3JpZXMsIGFuZCBmdXJ0aGVybW9yZSBkZXBlbmRzIG9uIHRoZSBzZXJ2ZXIKKyAgICAgICAg ICBwcm92aWRpbmcgcmVjdXJzaXZlIGZpbGUgbGlzdHMsIHdoaWNoIGlzIG5vdCB0aGUgbm9ybWFs CisgICAgICAgICAgYmVoYXZpb3IuIEZvciBmdXJ0aGVyIGRldGFpbHMsIHNlZSB0aGUgZGVzY3Jp cHRpb25zIG9mIHRoZXNlCisgICAgICAgICAgc3dpdGNoZXMgaW4gWzI3NF1TZWN0aW9uIDMuNi4g U3lub255bXM6IEZUUCBNREVMRVRFIChLZXJtaXQKKyAgICAgICAgICBtYWtlcyBubyBkaXN0aW5j dGlvbiBiZXR3ZWVuIERFTEVURSBhbmQgTURFTEVURSk7IFJERUxFVEUuCisKKyAgIEZUUCBUWVBF IHsgVEVYVCwgQklOQVJZLCBURU5FWCB9CisgICAgICAgICAgVGVsbHMgdGhlIEZUUCBzZXJ2ZXIg dG8gY2hhbmdlIGl0cyBmaWxlLXRyYW5zZmVyIHR5cGUgdG8gdGhlIG9uZQorICAgICAgICAgIGdp dmVuLCBpbW1lZGlhdGVseS4gU2VlIFsyNzVdU0VUIEZUUCBUWVBFIGZvciBkZXRhaWxzLgorCisg ICBbIFsyNzZdVG9wIF0gWyBbMjc3XUZUUCBUb3AgXSBbIFsyNzhdQy1LZXJtaXQgSG9tZSBdIFsg WzI3OV1LZXJtaXQgSG9tZQorICAgXQorCiszLjUuIFVwbG9hZGluZyBGaWxlcyBXaXRoIEZUUAor CisgICBVcGxvYWRpbmcgbWVhbnMgc2VuZGluZyBmaWxlcyBmcm9tIHRoZSBjbGllbnQgKEtlcm1p dCkgdG8gdGhlIEZUUAorICAgc2VydmVyLiBUaGUgYmFzaWMgY29tbWFuZCBmb3IgdXBsb2FkaW5n IGZpbGVzIHdpdGggRlRQIGlzIFBVVDoKKworICAgRlRQIFBVVCBbIHN3aXRjaGVzIF0gWyBmaWxl c3BlYyBbIGFzLW5hbWUgXSBdCisgICAgICAgICAgVXBsb2FkcyAoc2VuZHMpIHRoZSBmaWxlIG9y IGZpbGVzIHRoYXQgbWF0Y2ggdGhlIGZpbGUKKyAgICAgICAgICBzcGVjaWZpY2F0aW9uLCB3aGlj aCBtYXkgaW5jbHVkZSB3aWxkY2FyZHMsIHRvIHRoZSBzZXJ2ZXIuIElmIG5vCisgICAgICAgICAg ZmlsZXNwZWMgaXMgZ2l2ZW4sIHRoZSBuYW1lcyBvZiBmaWxlcyB0byBzZW5kIGFyZSB0YWtlbiBm cm9tIHRoZQorICAgICAgICAgIC9MSVNURklMRTogZmlsZSwgaWYgYW55LCBvdGhlcndpc2UgZnJv bSB0aGUgU0VORC1MSVNULCBpZiBhbnkuCisgICAgICAgICAgVW5sZXNzIHlvdSBnbyBvdXQgb2Yg eW91ciB3YXkgdG8gcHJldmVudCBpdCwgS2VybWl0IGRldGVybWluZXMKKyAgICAgICAgICB0aGUg dHJhbnNmZXIgbW9kZSAodGV4dCBvciBiaW5hcnkpIGZvciBlYWNoIGZpbGUgYXV0b21hdGljYWxs eSwKKyAgICAgICAgICBhbmQgc3dpdGNoZXMgYXV0b21hdGljYWxseSBvbiBhIHBlci1maWxlIGJh c2lzLiBJZiBhbiBhcy1uYW1lIGlzCisgICAgICAgICAgZ2l2ZW4sIHRoZSBmaWxlIGlzIHNlbnQg dW5kZXIgdGhhdCBuYW1lIGluc3RlYWQgb2YgaXRzIG93biAoaWYKKyAgICAgICAgICBhbiBhcy1u YW1lIGlzIGdpdmVuIHdpdGggYSB3aWxkY2FyZCBmaWxlc3BlYywgdGhlIHJlc3VsdCBpcyBhCisg ICAgICAgICAgYml0IG1vcmUgY29tcGxpY2F0ZWQsIGFuZCBpcyBleHBsYWluZWQgbGF0ZXIgaW4g dGhpcyBzZWN0aW9uKS4KKworICAgVW5saWtlIG5vcm1hbCBGVFAgY2xpZW50cywgS2VybWl0IGRv ZXMgbm90IHByb21wdCB5b3UgYnkgZGVmYXVsdCAob3IgYXQKKyAgIGFsbCkgZm9yIGVhY2ggZmls ZTsgaXQganVzdCBzZW5kcyB0aGVtLCBqdXN0IGFzIGl0IGRvZXMgd2l0aCBLZXJtaXQKKyAgIHBy b3RvY29sLiBUaGUgZmlsZXNwZWMgY2FuIGJlIGEgbGl0ZXJhbCBmaWxlbmFtZSBvciBhIEtlcm1p dCBwYXR0ZXJuLAorICAgZGVzY3JpYmVkIGluOgorCisgIFsyODBdaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjkKKworICAgS2VybWl0IHBhdHRlcm5zIGFy ZSBlcXVpdmFsZW50IHRvIEMtU2hlbGwgcGF0dGVybnMgYW5kIHByb3ZpZGUgYSBmYWlyCisgICBh bW91bnQgb2YgZmxleGliaWxpdHkgaW4gc2VsZWN0aW5nIHdoaWNoIGZpbGVzIHRvIHNlbmQsIHdo aWNoIGlzCisgICBhdWdtZW50ZWQgYnkgdGhlIGZpbGUtc2VsZWN0aW9uIHN3aXRjaGVzIHByZXNl bnRlZCBpbiBbMjgxXVNlY3Rpb24KKyAgIDMuNS4xLgorCisgICBGVFAgTVBVVCBbIHN3aXRjaGVz IF0gZmlsZXNwZWMgWyBmaWxlc3BlYyBbIC4uLiBdIF0KKyAgICAgICAgICBGVFAgTVBVVCBpcyBq dXN0IGxpa2UgRlRQIFBVVCBleGNlcHQgaXQgYWxsb3dzIHlvdSB0byBnaXZlIG1vcmUKKyAgICAg ICAgICB0aGFuIG9uZSBmaWxlIHNwZWNpZmljYXRpb24sIGFuZCBpdCBkb2VzIG5vdCBhbGxvdyBh biBhcy1uYW1lIGluCisgICAgICAgICAgdGhlIGZpbGUgbGlzdC4gSG93ZXZlciwgYXMtbmFtZXMg Y2FuIGJlIGdpdmVuIHRvIGVpdGhlciBQVVQgb3IKKyAgICAgICAgICBNUFVUIHdpdGggdGhlIC9B Uy1OQU1FOiBzd2l0Y2guCisKKyAgIElmIGEgUFVUIG9yIE1QVVQgY29tbWFuZCByZXN1bHRzIGlu IG9uZSBmaWxlIGJlaW5nIHVwbG9hZGVkLCBpdAorICAgc3VjY2VlZHMgaWYgdGhlIGZpbGUgaXMg dXBsb2FkZWQgY29tcGxldGVseSBhbmQgZmFpbHMgb3RoZXJ3aXNlLiBJZgorICAgbW9yZSB0aGFu IG9uZSBmaWxlIGlzIHNlbGVjdGVkIGZvciB1cGxvYWQsIHN1Y2Nlc3Mgb3IgZmFpbHVyZSBkZXBl bmRzCisgICBvbiB0aGUgWzI4Ml1GVFAgRVJST1ItQUNUSU9OIHNldHRpbmc7IGlmIGl0IGlzIFBS T0NFRUQgKHRoZSBkZWZhdWx0CisgICBzZXR0aW5nKSwgdGhlbiB0aGUgW01dUFVUIGNvbW1hbmQg c3VjY2VlZHMgaWYgYXQgbGVhc3Qgb25lIG9mIHRoZSBmaWxlcworICAgd2FzIGNvbXBsZXRlbHkg dXBsb2FkZWQsIGFuZCBmYWlscyBvdGhlcndpc2UsIElmIEZUUCBFUlJPUi1BQ1RJT04gaXMKKyAg IFFVSVQsIHRoZSBbTV1QVVQgY29tbWFuZCBzdWNjZWVkcyBpZiBhbGwgc2VsZWN0ZWQgZmlsZXMg d2VyZSB1cGxvYWRlZAorICAgc3VjY2Vzc2Z1bGx5LCBhbmQgZmFpbHMgaWYgYW55IGZpbGUgZmFp bGVkLgorCisgICBGVFAgdXBsb2FkcyBtYXkgYmUgaW50ZXJydXB0ZWQganVzdCBsaWtlIEtlcm1p dCB1cGxvYWRzLiBXaGlsZSB0aGUKKyAgIHRyYW5zZmVyIGlzIGluIHByb2dyZXNzLCB0eXBlOgor CisgIFggdG8gaW50ZXJydXB0IHRoZSBjdXJyZW50IGZpbGUgYW5kIGdvIG9uIHRvIHRoZSBuZXh0 IGZpbGUuCisgIFogdG8gY2FuY2VsIHRoZSBjdXJyZW50IGZpbGUgYW5kIGFsbCByZW1haW5pbmcg ZmlsZXMuCisgIF5DIChDb250cm9sLUMpOiBMaWtlIFosIGJ1dCBtaWdodCBhY3QgbW9yZSBxdWlj a2x5LgorCisgICBNUFVUIG1heSBiZSB1c2VkIGFzIGluIHJlZ3VsYXIgRlRQIGNsaWVudHMsIGJ1 dCBpdCBpcyBub3QgcmVxdWlyZWQgdG8KKyAgIHNlbmQgbXVsdGlwbGUgZmlsZXM7IGluIEtlcm1p dCBpdCBpcyByZXF1aXJlZCBvbmx5IGlmIHlvdSB3YW50IHRvIGdpdmUKKyAgIG11bHRpcGxlIGZp bGUgc3BlY2lmaWNhdGlvbnMuIEV4YW1wbGVzOgorCisgIGZ0cCBwdXQgb29mYS50eHQgICAgICAg ICAgICAgICA7IFNlbmQgYSBzaW5nbGUgZmlsZSBvb2ZhLnR4dAorICBmdHAgcHV0IG9vZmEudHh0 IGJ1ZGdldC50eHQgICAgOyBTZW5kIHNpbmdsZSBmaWxlIG9vZmEudHh0IGFzIGJ1ZGdldC50eHQK KyAgZnRwIHB1dCAqLnR4dCAgICAgICAgICAgICAgICAgIDsgU2VuZCBhbGwgKi50eHQgZmlsZXMK KyAgZnRwIG1wdXQgKi50eHQgICAgICAgICAgICAgICAgIDsgU2VuZCBhbGwgKi50eHQgZmlsZXMg KHNhbWUgYXMgInB1dCAqLnR4dCIpCisgIGZ0cCBtcHV0ICoudHh0IGZvby5iYXIgICAgICAgICA7 IFNlbmQgYWxsICoudHh0IGZpbGVzIHBsdXMgZm9vLmJhcgorCisgICBUaGUgZGlzdGluY3Rpb24g YmV0d2VlbiBQVVQgYW5kIE1QVVQgaXMgaW1wb3J0YW50IG9ubHkgd2hlbiBtb3JlIHRoYW4KKyAg IG9uZSBmaWxlc3BlYyBpcyBnaXZlbiwganVzdCBsaWtlIHRoZSBkaXN0aW5jdGlvbiBiZXR3ZWVu IEtlcm1pdCBTRU5ECisgICBhbmQgTVNFTkQ6CisKKyAgZnRwIHB1dCBvb2ZhLnR4dCBidWRnZXQu dHh0ICAgIDsgU2VuZCBvb2ZhLnR4dCBBUyBidWRnZXQudHh0CisgIGZ0cCBtcHV0IG9vZmEudHh0 IGJ1ZGdldC50eHQgICA7IFNlbmQgb29mYS50eHQgQU5EIGJ1ZGdldC50eHQKKworICAgSWYgdGhl IHNvdXJjZSBmaWxlIHNwZWNpZmljYXRpb24gaW5jbHVkZXMgYW55IHBhdGggc2VnbWVudHMsIGZv cgorICAgZXhhbXBsZToKKworICBwdXQgL3RtcC9vb2ZhLnR4dAorICBwdXQgc3ViZGlyL2Fub3Ro ZXIvYW5kYW5vdGhlci9vb2ZhLnR4dAorCisgICB0aGUgcGF0aCBwb3J0aW9uIGlzIHN0cmlwcGVk IGZyb20gdGhlIGZpbGVuYW1lIHRoYXQgaXMgc2VudCB0byB0aGUKKyAgIHNlcnZlci4gSG93ZXZl ciwgaWYgYW4gYXMtbmFtZSBjb250YWlucyBhIHBhdGgsIGl0IGlzIHJldGFpbmVkLgorICAgRXhh bXBsZXM6CisKKyAgZnRwIHB1dCAvdXNyL2RvYy9vb2ZhLnR4dCAgICAgIDsgU2VuZCBhcyAib29m YS50eHQiLgorICBmdHAgcHV0IG9vZmEudHh0IC90bXAvb29mYS50eHQgOyBTZW5kIGFzICIvdG1w L29vZmEudHh0IgorCisgICBUaGUgbGF0dGVyIGV4YW1wbGUgc2VuZHMgdGhlIGZpbGUgb29mYS50 eHQgZnJvbSB5b3VyIGN1cnJlbnQgbG9jYWwKKyAgIGRpcmVjdG9yeSB0byB0aGUgc2VydmVyJ3Mg L3RtcCBkaXJlY3RvcnkuIFRoaXMgd29ya3Mgb25seSBpZiB0aGUgc2VydmVyCisgICB1c2VzIHRo ZSBzYW1lIGRpcmVjdG9yeSBub3RhdGlvbiB0aGF0IHlvdSB1c2VkIGluIHRoZSBhcy1uYW1lIEFO RCB0aGUKKyAgIGdpdmVuIGRpcmVjdG9yeSBhbHJlYWR5IGV4aXN0cyBvbiB0aGUgc2VydmVyIEFO RCBpZiB5b3UgaGF2ZSB3cml0ZQorICAgYWNjZXNzIHRvIGl0LgorCisgICBVc2UgY2F1dGlvbiB3 aGVuIHVwbG9hZGluZyBmcm9tIGEgY2FzZS1zZW5zaXRpdmUgZmlsZSBzeXN0ZW0sIHN1Y2ggYXMK KyAgIFVOSVgsIHRvIGEgZmlsZSBzeXN0ZW0gdGhhdCBpcyBub3QgY2FzZSBzZW5zaXRpdmUsIHN1 Y2ggYXMgV2luZG93cyBvcgorICAgVk1TLiBJZiB5b3UgaGF2ZSB0d28gZmlsZXMgaW4gVU5JWCwg QUEgYW5kIGFhIGFuZCB1cGxvYWQgYm90aCBvZiB0aGVtLAorICAgdGhlIHNlY29uZCBvbmUgd2ls bCBvdmVyd3JpdGUgdGhlIGZpcnN0LiBUaGUgb25seSB3YXkgYXJvdW5kIHRoaXMKKyAgIHByb3Zp ZGVkIGJ5IEZUUCBwcm90b2NvbCBpcyBpdHMgInVuaXF1ZSBzZXJ2ZXIgbmFtZXMiIGZlYXR1cmUg KFNFVCBGVFAKKyAgIFVOSVFVRS1TRVJWRVItTkFNRVMgb3IgdGhlIC9VTklRVUUgc3dpdGNoIGRl c2NyaWJlZCBiZWxvdykuCisKKzMuNS4xLiBGVFAgUFVUIFN3aXRjaGVzCisKKyAgIEZUUCBQVVQg YW5kIE1QVVQgYXJlIHNpbWlsYXIgaW4gZm9ybWF0IGFuZCBiZWhhdmlvciB0byB0aGUgcmVndWxh cgorICAgS2VybWl0IFNFTkQgYW5kIE1TRU5EIGNvbW1hbmRzLCBhbmQgdGhleSBhbGxvdyBtb3N0 IG9mIHRoZSBzYW1lCisgICBvcHRpb25hbCBzd2l0Y2hlczoKKworQy1LZXJtaXQ+ZnRwIHB1dCA/ IEZpbGVuYW1lLCBvciBzd2l0Y2gsIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorIC9hZnRlcjogICAg ICAgICAgICAgICAgIC9sYXJnZXItdGhhbjogICAgICAgICAgIC9yZW5hbWUtdG86CisgL2FycmF5 OiAgICAgICAgICAgICAgICAgL2xpc3RmaWxlOiAgICAgICAgICAgICAgL3NlcnZlci1jaGFyYWN0 ZXItc2V0OgorIC9hcy1uYW1lOiAgICAgICAgICAgICAgIC9sb2NhbC1jaGFyYWN0ZXItc2V0OiAg IC9zZXJ2ZXItcmVuYW1lLXRvOgorIC9iZWZvcmU6ICAgICAgICAgICAgICAgIC9tb3ZlLXRvOiAg ICAgICAgICAgICAgIC9zaW11bGF0ZQorIC9iaW5hcnkgICAgICAgICAgICAgICAgIC9ub2JhY2t1 cGZpbGVzICAgICAgICAgIC9zbWFsbGVyLXRoYW46CisgL2NvbW1hbmQgICAgICAgICAgICAgICAg L25vZG90ZmlsZXMgICAgICAgICAgICAgL3RlbmV4CisgL2RlbGV0ZSAgICAgICAgICAgICAgICAg L25vZm9sbG93bGlua3MgICAgICAgICAgL3RleHQKKyAvZG90ZmlsZXMgICAgICAgICAgICAgICAv bm90LWFmdGVyOiAgICAgICAgICAgICAvdHJhbnNwYXJlbnQKKyAvZXJyb3ItYWN0aW9uOiAgICAg ICAgICAvbm90LWJlZm9yZTogICAgICAgICAgICAvdHlwZToKKyAvZXhjZXB0OiAgICAgICAgICAg ICAgICAvcGVybWlzc2lvbnM6ICAgICAgICAgICAvdXBkYXRlCisgL2ZpbGVuYW1lczogICAgICAg ICAgICAgL3F1aWV0ICAgICAgICAgICAgICAgICAgL3VuaXF1ZS1zZXJ2ZXItbmFtZXMKKyAvZmls dGVyOiAgICAgICAgICAgICAgICAvcmVjb3ZlcgorIC9mb2xsb3dsaW5rcyAgICAgICAgICAgIC9y ZWN1cnNpdmUKKworICAgU2luY2UgbW9zdCBvZiB0aGVzZSBzd2l0Y2hlcyBhcmUgY29tbW9uIHRv IEtlcm1pdCdzIFNFTkQgYW5kIE1TRU5ECisgICBjb21tYW5kcywgdGhleSBkZXNjcmliZWQgb25s eSBicmllZmx5IGhlcmUuIEZvciBncmVhdGVyIGRldGFpbCBzZWU6CisKKyAgICAgWzI4M11odHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDEuNSAoZXhwbGFuYXRp b24KKyAgIG9mIHN3aXRjaGVzKQorICAgICBbMjg0XWh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2VybWl0NzAuaHRtbCN4NC43CisgICAoZmlsZS10cmFuc2ZlciBzd2l0Y2hlcykKKwor ICAgRmlyc3QgdGhlIGZpbGUtc2VsZWN0aW9uIHN3aXRjaGVzOgorCisgICAvQUZURVI6ZGF0ZS10 aW1lCisgICAvQkVGT1JFOmRhdGUtdGltZQorICAgL05PVC1BRlRFUjpkYXRlLXRpbWUKKyAgIC9O T1QtQkVGT1JFOmRhdGUtdGltZQorICAgICAgICAgIE9ubHkgc2VuZCB0aG9zZSBmaWxlcyBtb2Rp ZmllZCBvbiBvciBhZnRlciBvciBiZWZvcmUgdGhlIGdpdmVuCisgICAgICAgICAgZGF0ZSBhbmQg dGltZS4gVGhlc2Ugc3dpdGNoZXMgY2FuIGJlIGNvbWJpbmVkIHRvIHNlbGVjdCBmaWxlcworICAg ICAgICAgIG1vZGlmaWVkIGJldHdlZW4gdHdvIGRhdGUvdGltZXMuIFZhcmlvdXMgZGF0ZS10aW1l IGZvcm1hdHMgYXJlCisgICAgICAgICAgYWNjZXB0ZWQ7IGlmIHRoZSBkYXRlLXRpbWUgY29udGFp bnMgc3BhY2VzLCBpdCBtdXN0IGJlIGVuY2xvc2VkCisgICAgICAgICAgaW4gYnJhY2VzIG9yIGRv dWJsZXF1b3Rlcy4gU2VlCisgICAgICAgICAgWzI4NV1odHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDEuNiBhbmQKKyAgICAgICAgICBbMjg2XVNlY3Rpb24gOC4x MyBvZiB0aGlzIGRvY3VtZW50IGZvciBkZXRhaWxzIGFib3V0IGRhdGUtdGltZQorICAgICAgICAg IGZvcm1hdHMuIEV4YW1wbGVzOgorCisgIGZ0cCBwdXQgL2FmdGVyOnsxIGphbiAyMDAwIDA6MDA6 MDB9ICoKKyAgZnRwIHB1dCAvYWZ0ZXI6LTVkYXlzICoKKworICAgL0xBUkdFUi1USEFOOm51bWJl cgorICAgL1NNQUxMRVItVEhBTjpudW1iZXIKKyAgICAgICAgICBPbmx5IHNlbmQgZmlsZXMgbGFy Z2VyIChzbWFsbGVyKSB0aGFuIHRoZSBnaXZlbiBudW1iZXIgb2YgYnl0ZXMKKyAgICAgICAgICAo b2N0ZXRzKS4gVGhlc2Ugc3dpdGNoZXMgY2FuIGJlIGNvbWJpbmVkIHRvIHNlbGVjdCBmaWxlcyBp biBhCisgICAgICAgICAgY2VydGFpbiBzaXplIHJhbmdlLgorCisgICAvVFlQRTp7VEVYVCxCSU5B Ull9CisgICAgICAgICAgT25seSBzZW5kIGZpbGVzIHRoYXQgYXJlIHRoZSBnaXZlbiB0eXBlLCB3 aGljaCBpcyBkZXRlcm1pbmVkIGZvcgorICAgICAgICAgIGVhY2ggZmlsZSBqdXN0IGJlZm9yZSBz ZW5kaW5nIGl0IGJ5IGZpbGUgc2Nhbm5pbmcuIEJJTkFSWQorICAgICAgICAgIGluY2x1ZGVzIFRF TkVYOyBpZiB5b3UgaGF2ZSBpbmNsdWRlZCBhIC9URU5FWCBzd2l0Y2gsIG9yCisgICAgICAgICAg cHJldmlvdXNseSBnaXZlbiBhIFtTRVRdIEZUUCBUWVBFIFRFTkVYIGNvbW1hbmQsIGJpbmFyeSBm aWxlcworICAgICAgICAgIGFyZSBzZW50IGluIFRFTkVYLCByYXRoZXIgdGhhbiBCSU5BUlkgbW9k ZS4KKworICAgL1tOT11ET1RGSUxFUworICAgICAgICAgIFtEb24ndF0gaW5jbHVkZSBmaWxlcyB3 aG9zZSBuYW1lcyBiZWdpbiB3aXRoIGRvdCAoLikuIEJ5CisgICAgICAgICAgZGVmYXVsdCwgc3Vj aCBmaWxlcyBhcmUgbm90IGluY2x1ZGVkIHVubGVzcyB5b3VyIGZpbGVzcGVjCisgICAgICAgICAg ZXhwbGljaXRseSBtZW50aW9ucyB0aGVtLgorCisgICAvTk9CQUNLVVBGSUxFUworICAgICAgICAg IERvbid0IGluY2x1ZGUgZmlsZXMgd2hvc2UgbmFtZXMgZW5kIHdpdGggLn5ubm5+LCB3aGVyZSBu bm4gaXMgYQorICAgICAgICAgIG51bWJlciwgZS5nLiBvb2ZhLnR4dC5+Mjd+LiBUaGVzZSBhcmUg YmFja3VwIGZpbGVzIGNyZWF0ZWQgYnkKKyAgICAgICAgICBLZXJtaXQsIEVNQUNTLCBhbmQgb3Ro ZXIgYXBwbGljYXRpb25zLiBCeSBkZWZhdWx0LCBiYWNrdXAgZmlsZXMKKyAgICAgICAgICBhcmUg aW5jbHVkZWQuCisKKyAgIC9OT0ZPTExPV0xJTktTCisgICAgICAgICAgKFVOSVggb25seSkgU2tp cCBvdmVyIHN5bWJvbGljIGxpbmtzIHJhdGhlciB0aGFuIGZvbGxvd2luZyB0aGVtCisgICAgICAg ICAgKGRlZmF1bHQpLiBUaGlzIGFwcGxpZXMgdG8gd2lsZGNhcmQgYW5kL29yIHJlY3Vyc2l2ZSBb TV1QVVRzOyBpZgorICAgICAgICAgIGEgc2luZ2xlIGZpbGVuYW1lIGlzIGdpdmVuLCBhbmQgaXQg aGFwcGVucyB0byBiZSBhIHN5bWJvbGljCisgICAgICAgICAgbGluaywgdGhlIGZpbGUgaXQgcG9p bnRzIHRvIGlzIHNlbnQuCisKKyAgIC9GT0xMT1dMSU5LUworICAgICAgICAgIChVTklYIG9ubHkp IEFsd2F5cyBmb2xsb3cgKHJlc29sdmUpIHN5bWJvbGljIGxpbmtzLCBldmVuIGluCisgICAgICAg ICAgd2lsZGNhcmQgb3IgcmVjdXJzaXZlIFtNXVBVVHMuIFVzZSB3aXRoIGNhdXRpb24uIFdhdGNo IG91dCBmb3IKKyAgICAgICAgICBjaXJjdWxhciBsaW5rcywgZW5kbGVzcyBsb29wcywgZXRjLgor CisgICAvRVhDRVBUOnBhdHRlcm4KKyAgICAgICAgICBFeGNlcHRpb24gbGlzdCAtLSBkb24ndCBz ZW5kIGZpbGVzIHdob3NlIG5hbWVzIG1hdGNoIHRoZSBnaXZlbgorICAgICAgICAgIHBhdHRlcm4u IFNlZSBbMjg3XVNlY3Rpb24gMS41LjQgb2YgdGhlIFsyODhdQy1LZXJtaXQgNy4wIFVwZGF0ZQor ICAgICAgICAgIE5vdGVzIGZvciBkZXRhaWxzLiBJZiB5b3Ugd2FudCB0byBleGNsdWRlIGEgZGly ZWN0b3J5IGZyb20gYQorICAgICAgICAgIHJlY3Vyc2l2ZSBbTV1QVVQsIHVzZSAvRVhDRVBUOntk aXJuYW1lLyp9LgorCisgICAvUkVDVVJTSVZFCisgICAgICAgICAgU2VuZHMgdGhlIGRlc2lyZWQg ZmlsZXMgZnJvbSB0aGUgY3VycmVudCAob3IgZ2l2ZW4pIGRpcmVjdG9yeSwKKyAgICAgICAgICBw bHVzIGFsbCBkaXJlY3RvcmllcyBiZW5lYXRoIGl0LCBpbmNsdWRpbmcgZW1wdHkgZGlyZWN0b3Jp ZXMsCisgICAgICAgICAgcmVwbGljYXRpbmcgdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgb24gdGhl IHNlcnZlci4gTm8gc3BlY2lhbAorICAgICAgICAgIGNhcGFiaWxpdGllcyBhcmUgcmVxdWlyZWQg aW4gdGhlIHNlcnZlciwgYnV0IG9mIGNvdXJzZSB5b3VyCisgICAgICAgICAgbG9naW4gSUQgb24g dGhlIHNlcnZlciBtdXN0IGhhdmUgdGhlIGFwcHJvcHJpYXRlIGFjY2VzcyBhbmQKKyAgICAgICAg ICBwZXJtaXNzaW9uIHRvIGNyZWF0ZSBkaXJlY3Rvcmllcy4gUmVjdXJzaXZlIFBVVHMgd29yayBu b3Qgb25seQorICAgICAgICAgIGJldHdlZW4gbGlrZSBwbGF0Zm9ybXMgKGUuZy4gVU5JWCB0byBV TklYKSBidXQgYWxzbyBiZXR3ZWVuCisgICAgICAgICAgdW5saWtlIG9uZXMgKGUuZy4gVU5JWCB0 byBWTVMgb3IgV2luZG93cyksIGluIHdoaWNoIGNhc2UKKyAgICAgICAgICB0ZXh0LWZpbGUgZm9y bWF0IGRpZmZlcmVuY2VzIGFyZSBoYW5kbGVkIGJ5IEtlcm1pdCdzIGF1dG9tYXRpYworICAgICAg ICAgIHRleHQvYmluYXJ5IG1vZGUgc3dpdGNoaW5nIChbMjg5XVNlY3Rpb24gNCkgYW5kIGNoYXJh Y3Rlci1zZXQKKyAgICAgICAgICB0cmFuc2xhdGlvbiAoWzI5MF1TZWN0aW9uIDMuNykuIFN5bm9u eW06IC9TVUJESVJFQ1RPUklFUy4KKworICAgL1VQREFURQorICAgICAgICAgIFNlbmQgb25seSBm aWxlcyB0aGF0IGhhdmUgY2hhbmdlZCBzaW5jZSBsYXN0IHRpbWUgKFsyOTFdU2VjdGlvbgorICAg ICAgICAgIDMuNS4yKS4KKworICAgL0FSUkFZOmFycmF5bmFtZQorICAgICAgICAgIFRoZSAiZmls ZSIgdG8gYmUgc2VudCBpcyBhbiBhcnJheSwgb3IgYSBzZWdtZW50IG9mIG9uZSwgcmF0aGVyCisg ICAgICAgICAgdGhhbiBhIHJlYWwgZmlsZS4gSW4gdGhpcyBjYXNlIHRoZSBvdGhlciBzZWxlY3Rp b24gc3dpdGNoZXMKKyAgICAgICAgICBkb24ndCBhcHBseS4gVGhlIGFycmF5IGNvbnRlbnRzIGFy ZSBzZW50IGluIHRleHQgbW9kZSwgYW5kIGVhY2gKKyAgICAgICAgICBhcnJheSBlbGVtZW50IGlz IHRyZWF0ZWQgYXMgYSBsaW5lLiBFeGFtcGxlOgorCisgIGZ0cCBwdXQgL2FzLW5hbWU6YXJyYXku dHh0IC9hcnJheTomYQorCisgICAgICAgICAgKG9yLCB0byBzZW5kIGEgc2VnbWVudCBvZiB0aGUg YXJyYXksIC9hcnJheTomYVsxMDA6MTk5XSkuIElmIHlvdQorICAgICAgICAgIGRvbid0IGluY2x1 ZGUgYW4gL0FTLU5BTUUsIGEgbmFtZSBvZiAiX2FycmF5X3hfIiBpcyB1c2VkICh3aGVyZQorICAg ICAgICAgIHggaXMgdGhlIGFycmF5IGxldHRlcikuIElmIHlvdSBpbmNsdWRlIHRoaXMgc3dpdGNo LCBtb3N0IG90aGVyCisgICAgICAgICAgc3dpdGNoZXMgYXJlIG1lYW5pbmdsZXNzIGFuZCBpZ25v cmVkLgorCisgICAvQ09NTUFORAorICAgICAgICAgIFRoZSAiZmlsZSIgdG8gYmUgc2VudCBpcyB0 aGUgc3RhbmRhcmQgb3V0cHV0IG9mIGEgY29tbWFuZCwKKyAgICAgICAgICByYXRoZXIgdGhhbiBh IHJlYWwgZmlsZS4gSXQgaXMgc2VudCBpbiB0ZXh0IG9yIGJpbmFyeSBtb2RlCisgICAgICAgICAg YWNjb3JkaW5nIHRvIHRoZSBwcmV2YWlsaW5nIEZUUCBUWVBFLCB3aGljaCBjYW4gYmUgb3ZlcnJp ZGRlbgorICAgICAgICAgIHdpdGggYSAvVEVYVCBvciAvQklOQVJZIHN3aXRjaC4gRXhhbXBsZTog RXhhbXBsZToKKworICBmdHAgcHV0IC9jb21tYW5kIC9hcy1uYW1lOnt1c2VybGlzdH0ge2Zpbmdl ciB8IHNvcnQgLXJ9CisKKyAgIC9MSVNURklMRTpmaWxlbmFtZQorICAgICAgICAgIFRlbGxzIEtl cm1pdCB0byBvYnRhaW4gdGhlIGxpc3Qgb2YgZmlsZXMgdG8gYmUgc2VudCBmcm9tIHRoZQorICAg ICAgICAgIGZpbGUgd2hvc2UgbmFtZSBpcyBnaXZlbi4gVGhpcyBmaWxlIG11c3QgY29udGFpbiBv bmUgZmlsZQorICAgICAgICAgIHNwZWNpZmljYXRpb24gKHdoaWNoIG1heSBiZSB3aWxkKSBwZXIg bGluZS4gSWYgdGhlIGxpc3QgaW5jbHVkZXMKKyAgICAgICAgICBmaWxlcyBmcm9tIGRpZmZlcmVu dCBkaXJlY3Rvcmllcywgc3VjaCBhcyBhIHJlY3Vyc2l2ZSBsaXN0aW5nIG9mCisgICAgICAgICAg YSBkaXJlY3RvcnkgdHJlZSwgdGhlIHBhdGhzIGFyZSByZWNyZWF0ZWQgb24gdGhlIHNlcnZlciAo aWYKKyAgICAgICAgICBwb3NzaWJsZSkgaWYgeW91IGluY2x1ZGUgdGhlIC9SRUNVUlNJVkUgc3dp dGNoOyBvdGhlcndpc2UgYWxsCisgICAgICAgICAgdGhlIGZpbGVzIGFyZSBzZW50IHRvIHRoZSBj dXJyZW50IGRpcmVjdG9yeSBvbiB0aGUgc2VydmVyLgorCisgICBOb3cgdGhlIG90aGVyIHN3aXRj aGVzOgorCisgICAvQVMtTkFNRTp0ZXh0CisgICAgICAgICAgSWYgYSBzaW5nbGUgZmlsZSBpcyBi ZWluZyBzZW50LCBzZW5kIGl0IHdpdGggdGhlIGdpdmVuIHRleHQgYXMKKyAgICAgICAgICBpdHMg bmFtZS4gSWYgbXVsdGlwbGUgZmlsZXMgYXJlIGJlaW5nIHNlbnQsIHRoZSB0ZXh0IG11c3QgYmUg YQorICAgICAgICAgIHRlbXBsYXRlIHRoYXQgaW5jbHVkZXMgdmFyaWFibGVzIHN1Y2ggYXMgXHYo ZmlsZW5hbWUpLAorICAgICAgICAgIFx2KGZpbGVudW1iZXIpLCBcdihudGltZSksIHRvIGFsbG93 IGR5bmFtaWMgY3JlYXRpb24gb2YgZWFjaAorICAgICAgICAgIG5hbWUuIFRoZSBzYW1lIGFwcGxp ZXMgdG8gdGhlIGFzLW5hbWUgZmllbGQgb2YgdGhlIEZUUCBQVVQKKyAgICAgICAgICBjb21tYW5k LiBJZiB0aGlzIHN3aXRjaCBpcyBub3QgaW5jbHVkZWQgKGFuZCBhbiBhcy1uYW1lIGlzIG5vdAor ICAgICAgICAgIGluY2x1ZGVkIGFzIHRoZSBzZWNvbmQgZmlsZW5hbWUgdG8gUFVUKSwgZWFjaCBm aWxlIGlzIHNlbnQgd2l0aAorICAgICAgICAgIGl0cyBvd24gbmFtZS4KKworICAgL0JJTkFSWQor ICAgL1RFWFQKKyAgIC9URU5FWAorICAgICAgICAgIEZvcmNlcyB0aGlzIHVwbG9hZCB0byB0YWtl IHBsYWNlIGluIHRoZSBnaXZlbiBtb2RlLCByZWdhcmRsZXNzCisgICAgICAgICAgb2YgdGhlIGN1 cnJlbnQgRlRQIFRZUEUgc2V0dGluZywgYW5kIHdpdGhvdXQgYXV0b21hdGljCisgICAgICAgICAg dGV4dC9iaW5hcnkgc3dpdGNoaW5nLiAvQVNDSUkgaXMgYSBzeW5vbnltIGZvciAvVEVYVC4KKwor ICAgL0ZJTFRFUjpjb21tYW5kCisgICAgICAgICAgU3BlY2lmaWVzIHRoYXQgdGhlIGZpbGUocykg aXMvYXJlIHRvIGJlIHBhc3NlZCB0aHJvdWdoIHRoZSBnaXZlbgorICAgICAgICAgIGNvbW1hbmQg b3IgcGlwZWxpbmUgb24gdGhlaXIgd2F5IHRvIHRoZSBzZXJ2ZXIuIEV4YW1wbGU6CisKKyAgZnRw IHB1dCAvYmluYXJ5IC9maWx0ZXI6e2d6aXAgLWMgXHYoZmlsZW5hbWUpfSAvYXMtbmFtZTpcdihm aWxlbmFtZSkuZ3ogKgorCisgICAvVFJBTlNQQVJFTlQKKyAgIC9MT0NBTC1DSEFSQUNURVItU0VU Om5hbWUKKyAgIC9TRVJWRVItQ0hBUkFDVEVSLVNFVDpuYW1lCisgICAgICAgICAgQ2hhcmFjdGVy LXNldCB0cmFuc2xhdGlvbiBmb3IgdGV4dCBmaWxlcywgZXhwbGFpbmVkIGluCisgICAgICAgICAg WzI5Ml1TZWN0aW9uIDMuNy4KKworICAgL0VSUk9SLUFDVElPTjp7UFJPQ0VFRCxRVUlUfQorICAg ICAgICAgIE92ZXJyaWRlcyB0aGUgcHJldmFpbGluZyBbMjkzXUZUUCBFUlJPUi1BQ1RJT04gZm9y IHRoZSBkdXJhdGlvbgorICAgICAgICAgIG9mIHRoaXMgUFVUIG9yIE1QVVQgY29tbWFuZCBvbmx5 LgorCisgICAvUkVDT1ZFUgorICAgICAgICAgIFJlc3VtZSBhbiBpbnRlcnJ1cHRlZCB0cmFuc2Zl ciB3aGVyZSBmcm9tIHRoZSBwb2ludCBvZgorICAgICAgICAgIGludGVycnVwdGlvbiAoZXhwbGFp bmVkIGluIFsyOTRdU2VjdGlvbiAzLjUuMikuIFN5bm9ueW06CisgICAgICAgICAgL1JFU1RBUlQu CisKKyAgIC9ERUxFVEUKKyAgICAgICAgICBUZWxscyBLZXJtaXQgdG8gZGVsZXRlIGVhY2ggc291 cmNlIGZpbGUgaW1tZWRpYXRlbHkgYWZ0ZXIsIGFuZAorICAgICAgICAgIG9ubHkgaWYsIGl0IGhh cyBiZWVuIHVwbG9hZGVkIGNvbXBsZXRlbHkgYW5kIHN1Y2Nlc3NmdWxseS4gVGhpcywKKyAgICAg ICAgICBpbiBlZmZlY3QsIG1vdmVzIHRoZSBmaWxlIGZyb20gdGhlIGNsaWVudCB0byB0aGUgc2Vy dmVyLgorCisgICAvTU9WRS1UTzpkaXJlY3RvcnkKKyAgICAgICAgICBUZWxscyBLZXJtaXQgdG8g bW92ZSBlYWNoIHNvdXJjZSBmaWxlIHRvIHRoZSBuYW1lZCBsb2NhbAorICAgICAgICAgIGRpcmVj dG9yeSBhZnRlciwgYW5kIG9ubHkgaWYsIGl0IGhhcyBiZWVuIHVwbG9hZGVkIGNvbXBsZXRlbHkK KyAgICAgICAgICBhbmQgc3VjY2Vzc2Z1bGx5LgorCisgICAvUkVOQU1FLVRPOnRlbXBsYXRlCisg ICAgICAgICAgVGVsbHMgS2VybWl0IHRvIHJlbmFtZSBlYWNoIChsb2NhbCkgc291cmNlIGZpbGUg YWNjb3JkaW5nIHRvIHRoZQorICAgICAgICAgIGdpdmVuIHRlbXBsYXRlIGFmdGVyLCBhbmQgb25s eSBpZiwgaXQgaGFzIGJlZW4gdXBsb2FkZWQKKyAgICAgICAgICBjb21wbGV0ZWx5IGFuZCBzdWNj ZXNzZnVsbHkuIFRoZSB0ZW1wbGF0ZSB3b3JrcyBhcyBpbiAvQVMtTkFNRS4KKworICAgL1NFUlZF Ui1SRU5BTUUtVE86dGVtcGxhdGUKKyAgICAgICAgICBUZWxscyBLZXJtaXQgdG8gYXNrIHRoZSBz ZXJ2ZXIgdG8gcmVuYW1lIGVhY2ggZmlsZSBhY2NvcmRpbmcgdG8KKyAgICAgICAgICB0aGUgZ2l2 ZW4gdGVtcGxhdGUgYXMgc29vbiBhcywgYW5kIG9ubHkgaWYsIGl0IGhhcyBiZWVuIHJlY2VpdmVk CisgICAgICAgICAgY29tcGxldGVseSBhbmQgc3VjY2Vzc2Z1bGx5LiBUaGUgdGVtcGxhdGUgd29y a3MgYXMgaW4gL0FTLU5BTUUuCisgICAgICAgICAgUmVxdWlyZXMgd3JpdGUgYW5kIHJlbmFtZSBh Y2Nlc3Mgb24gdGhlIHNlcnZlciwgc28gZG9lc24ndAorICAgICAgICAgIHVzdWFsbHkgd29yayB3 aXRoIChlLmcuKSBhbm9ueW1vdXMgdXBsb2FkcyB0byBwdWJsaWMgaW5jb21pbmcKKyAgICAgICAg ICBhcmVhcyB3aGVyZSB0aGUgcGVybWlzc2lvbnMgZG9uJ3QgYWxsb3cgcmVuYW1pbmcuIEV4YW1w bGVzOgorCisgICAgICAgIGZ0cCBtcHV0IC9zZXJ2ZXItcmVuYW1lOlx2KGZpbGVuYW1lKS5vayAq CisgICAgICAgICAgICAgICAgQXBwZW5kcyAiLm9rIiB0byBlYWNoIGZpbGVuYW1lIG9uIHRoZSBz ZXJ2ZXIgd2hlbiBpdCdzCisgICAgICAgICAgICAgICAgZmluaXNoZWQgdXBsb2FkaW5nLgorCisg ICAgICAgIGZ0cCBtcHV0IC9hcy1uYW1lOlx2KGZpbGVuYW1lKS50bXAgL3NlcnZlci1yZW5hbWU6 XHYoZmlsZW5hbWUpICoKKyAgICAgICAgICAgICAgICBUaGlzIGlzIHRoZSByZXZlcnNlIG9mIHRo ZSBwcmV2aW91cyBleGFtcGxlOyBpdCB1c2VzIGEKKyAgICAgICAgICAgICAgICB0ZW1wb3Jhcnkg bmFtZSB3aGlsZSB1cGxvYWRpbmcgaXMgaW4gcHJvZ3Jlc3MgYW5kIHJldmVydHMKKyAgICAgICAg ICAgICAgICB0aGUgZmlsZSB0byBpdHMgcmVhbCBuYW1lIHdoZW4gdXBsb2FkaW5nIGlzIGNvbXBs ZXRlLgorCisgICAgICAgIGZ0cCBtcHV0IC9hcy1uYW1lOlx2KGZpbGVuYW1lKQorICAgICAgICAg ICAgICAgIC9zZXJ2ZXItcmVuYW1lOi4uL2ZpbmFsL1x2KGZpbGVuYW1lKSAqCisgICAgICAgICAg ICAgICAgTW92ZXMgdGhlIGZpbGUgZnJvbSB0aGUgd29ya2luZyBkaXJlY3RvcnkgdG8gYSBmaW5h bAorICAgICAgICAgICAgICAgIGRpcmVjdG9yeSB3aGVuIHRoZSB1cGxvYWQgaXMgY29tcGxldGUs IGJ1dCBpbiB0aGlzIGNhc2UKKyAgICAgICAgICAgICAgICB5b3UgaGF2ZSB0byBrbm93IHRoZSBw YXRobmFtZSBzeW50YXggb2YgdGhlIHNlcnZlci4gSWYgdGhlCisgICAgICAgICAgICAgICAgcmVu YW1lIGZhaWxzLCB0aGUgW01dUFVUIGNvbW1hbmQgZmFpbHMgYWNjb3JkaW5nIHRvIHRoZQorICAg ICAgICAgICAgICAgIFsyOTVdRlRQIEVSUk9SLUFDVElPTiBzZWxlY3Rpb24uCisKKyAgIC9GSUxF TkFNRVM6e0FVVE9NQVRJQyxDT05WRVJURUQsTElURVJBTH0KKyAgICAgICAgICBPdmVycmlkZXMg dGhlIFsyOTZdRlRQIEZJTEVOQU1FUyBzZXR0aW5nIGZvciB0aGlzIHVwbG9hZCBvbmx5LgorCisg ICAvUEVSTUlTU0lPTlM6e09OLE9GRn0KKyAgICAgICAgICBPdmVycmlkZXMgdGhlIFsyOTddRlRQ IFBFUk1JU1NJT05TIHNldHRpbmcgZm9yIHRoaXMgdXBsb2FkIG9ubHkuCisKKyAgIC9VTklRVUUK KyAgICAgICAgICBUZWxscyBLZXJtaXQgdG8gdGVsbCB0aGUgc2VydmVyIHRvIGdpdmUgWzI5OF11 bmlxdWUgbmFtZXMgdG8KKyAgICAgICAgICBpbmNvbWluZyBmaWxlcyB0aGF0IHdvdWxkIG90aGVy d2lzZSBvdmVyd3JpdGUgZXhpc3RpbmcgZmlsZXMKKyAgICAgICAgICB0aGF0IGhhdmUgdGhlIHNh bWUgbmFtZS4gVGhpcyBzd2l0Y2ggY29uZmxpY3RzIHdpdGggL1VQREFURSwKKyAgICAgICAgICAv UkVDT1ZFUiwgL1BFUk1JU1NJT05TLCBhbmQgL1NFUlZFUi1SRU5BTUUgc2luY2UgdGhlIGNsaWVu dCBoYXMKKyAgICAgICAgICBubyB3YXkgb2Yga25vd2luZyB0aGUgbmFtZSBhc3NpZ25lZCBieSB0 aGUgc2VydmVyLgorCisgICAvUVVJRVQKKyAgICAgICAgICBEb24ndCBkaXNwbGF5IGZpbGUtdHJh bnNmZXIgcHJvZ3Jlc3Mgb3Igc3RhdGlzdGljcy4KKworICAgL1NJTVVMQVRFCisgICAgICAgICAg U2hvd3Mgd2hpY2ggZmlsZXMgd291bGQgYmUgc2VudCB3aXRob3V0IGFjdHVhbGx5IHNlbmRpbmcg dGhlbS4KKyAgICAgICAgICBVc2VmdWwgKGZvciBleGFtcGxlKSB3aXRoIC9VUERBVEUgKG5leHQg c2VjdGlvbikuIFRoZSByZXN1bHRzCisgICAgICAgICAgYXJlIHNob3duIGluIHRoZSBmaWxlLXRy YW5zZmVyIGRpc3BsYXkgKGlmIGl0IGlzIG5vdCBkaXNhYmxlZCkKKyAgICAgICAgICBhbmQgaW4g dGhlIHRyYW5zYWN0aW9uIGxvZyAoaWYgb25lIGlzIGFjdGl2ZSkuIEhpbnQ6IHVzZSBTRVQKKyAg ICAgICAgICBUUkFOU0ZFUiBESVNQTEFZIEJSSUVGLgorCiszLjUuMi4gVXBkYXRlIE1vZGUKKwor ICAgV2hlbiB5b3UgaW5jbHVkZSB0aGUgL1VQREFURSBzd2l0Y2gsIHRoaXMgbWVhbnMgdG8gc2tp cCBzZW5kaW5nIGFueQorICAgZmlsZSB0aGF0IGFscmVhZHkgZXhpc3RzIG9uIHRoZSBzZXJ2ZXIg aWYgdGhlIGxvY2FsIGZpbGUncyBtb2RpZmljYXRpb24KKyAgIGRhdGUvdGltZSBpcyBub3QgbGF0 ZXIgdGhhbiB0aGF0IG9mIHRoZSBjb3JyZXNwb25kaW5nIGZpbGUgb24gdGhlCisgICBzZXJ2ZXIu IEhlcmUgaXMgYSB0eXBpY2FsIGFwcGxpY2F0aW9uIGZvciB1cGRhdGUgbW9kZTogU3VwcG9zZSB0 aGF0IG9uCisgICBDb21wdXRlciBBLCB5b3UgbWFpbnRhaW4gYSBsYXJnZSBzZXQgb2YgZmlsZXMg KHNheSwgYSBjb2xsZWN0aW9uIG9mIFdlYgorICAgcGFnZXMgYW5kIGdyYXBoaWNzIGltYWdlcywg b3IgdGhlIHNvdXJjZSBmaWxlcyBmb3IgYSBzb2Z0d2FyZQorICAgYXBwbGljYXRpb24pLCBhbmQg eW91IG5lZWQgdG8ga2VlcCBhIHBhcmFsbGVsIGNvcHkgb24gYW5vdGhlciBDb21wdXRlciwKKyAg IEIuIE9mIGNvdXJzZSB5b3UgY291bGQgdXBsb2FkIHRoZSBlbnRpcmUgY29sbGVjdGlvbiBldmVy eSBkYXk6CisKKyAgY2Qgc291cmNlLWRpcmVjdG9yeQorICBmdHAgY29tcHV0ZXJiLnh5emNvcnAu Y29tCisgICggYXV0aGVudGljYXRpb24gZGV0YWlscy4uLiApCisgIGZ0cCBjZCB0YXJnZXQtZGly ZWN0b3J5CisgIGZ0cCBwdXQgWyBzd2l0Y2hlcyBdICoKKworICAgQnV0IGlmIHRoZSB0b3RhbCBz aXplIGlzIGxhcmdlIG9yIHRoZSBuZXR3b3JrIHNsb3csIHRoaXMgd291bGQgYmUKKyAgIHVubmVj ZXNzYXJpbHkgdGltZS1jb25zdW1pbmcuIFdvcnNlLCBpZiBvdGhlciB1c2VycyBvciBzaXRlcyBo YWQgdG8KKyAgIHVwZGF0ZSB3aGVuZXZlciBuZXcgZmlsZXMgYXBwZWFyZWQgaW4gQidzIGRpcmVj dG9yeSwgdGhpcyB3b3VsZCBjYXVzZQorICAgdGhlbSB1bm5lY2Vzc2FyeSB3b3JrLiBCeSBpbmNs dWRpbmcgdGhlIC9VUERBVEUgc3dpdGNoOgorCisgIGZ0cCBwdXQgL3VwZGF0ZSBbIG90aGVyLXN3 aXRjaGVzIF0gKgorCisgICBvbmx5IHRob3NlIGZpbGVzIHRoYXQgY2hhbmdlZCBzaW5jZSBsYXN0 IHRpbWUgYXJlIHVwbG9hZGVkLiBIZXJlJ3MgaG93CisgICBpdCB3b3Jrcy4gRm9yIGVhY2ggbG9j YWwgZmlsZSB0aGF0IGlzIHNlbGVjdGVkIGZvciB1cGxvYWRpbmc6CisKKyAgICAgKiBUaGUgcmVt b3RlIGZpbGVuYW1lIGlzIGRldGVybWluZWQgaW4gdGhlIG5vcm1hbCB3YXksIGFjY29yZGluZyB0 bworICAgICAgIHRoZSBbMjk5XUZUUCBGSUxFTkFNRVMgc2V0dGluZywgL0ZJTEVOQU1FUyBzd2l0 Y2gsIG9yIHRoZSBhcy1uYW1lLAorICAgICAgIGlmIGFueS4KKyAgICAgKiBLZXJtaXQgc2VuZHMg YW4gTURUTSAobW9kaWZpY2F0aW9uIHRpbWUpIGNvbW1hbmQgZm9yIHRoZQorICAgICAgIGNvcnJl c3BvbmRpbmcgcmVtb3RlIGZpbGVuYW1lIHRvIHRoZSBzZXJ2ZXIuCisgICAgICogSWYgdGhlIHNl cnZlciBkb2VzIG5vdCB1bmRlcnN0YW5kIHRoZSBNRFRNIGNvbW1hbmQsIHRoZSBmaWxlIGlzCisg ICAgICAgc2VudC4KKyAgICAgKiBJZiB0aGUgc2VydmVyIGNhbid0IGZpbmQgYSBmaWxlIHdpdGgg dGhlIGdpdmVuIG5hbWUsIHRoZSBmaWxlIGlzCisgICAgICAgc2VudC4KKyAgICAgKiBJZiB0aGUg bG9jYWwgZmlsZSdzIG1vZGlmaWNhdGlvbiB0aW1lIGlzIGxhdGVyIHRoYW4gdGhhdCBvZiB0aGUK KyAgICAgICByZW1vdGUgZmlsZSwgdGhlIGZpbGUgaXMgc2VudC4KKyAgICAgKiBPdGhlcndpc2Ug LS0gdGhlIHJlbW90ZSBmaWxlIGV4aXN0cyBidXQgaXRzIG1vZGlmaWNhdGlvbiB0aW1lIGlzCisg ICAgICAgZXF1YWwgdG8gb3IgZWFybGllciB0aGFuIHRoYXQgb2YgdGhlIGxvY2FsIGZpbGUgLS0g dGhlIGZpbGUgaXMKKyAgICAgICBza2lwcGVkLgorCisgICBBbGwgdGltZSBjb21wYXJpc29ucyB0 YWtlIHBsYWNlIGluIENvb3JkaW5hdGVkIFVuaXZlcnNhbCBUaW1lCisgICAoVVRDKShbMzAwXTEp LCBhbHNvIGtub3duIGFzIEdNVCBvciBadWx1IHRpbWU6IFRpbWV6b25lIDA7IHN0YW5kYXJkCisg ICB0aW1lLCB3aXRob3V0IGRheWxpZ2h0IHNhdmluZ3MuCisKKyAgICAgV0FSTklORzogU29tZSBG VFAgc2VydmVycywgc3VjaCBhcyBOb3ZlbGwgTldGVFBELk5MTSwgaWdub3JlIG9yCisgICAgIG1p c2ltcGxlbWVudCB0aGUgRlRQIHNwZWNpZmljYXRpb24gYW5kIHNlbmQgbG9jYWwgdGltZSByYXRo ZXIgdGhhbgorICAgICBVVEMuCisKKyAgIFVwZGF0ZSBtb2RlIGlzIHVzZWZ1bCBvbmx5IHdoZW4g YWx3YXlzIHVzZWQgaW4gdGhlIHNhbWUgZGlyZWN0aW9uLiBXaGVuCisgICB5b3UgdXBsb2FkIChQ VVQpIGEgZmlsZSB3aXRoIEZUUCwgdGhlIGRlc3RpbmF0aW9uIGZpbGUgcmVjZWl2ZXMgdGhlCisg ICBjdXJyZW50IHRpbWVzdGFtcCBvbiB0aGUgc2VydmVyJ3MgY29tcHV0ZXIsIG5vdCB0aGUgb3Jp Z2luYWwgZmlsZSdzCisgICB0aW1lc3RhbXAgKFszMDFdMikuIElmIHlvdSB0cnkgdG8gRlRQIFBV VCAvVVBEQVRFIHRoZSBzYW1lIGZpbGUgYWdhaW4sCisgICBpdCB3aWxsIGJlIHNraXBwZWQgKGFz IGV4cGVjdGVkKSBzaW5jZSB0aGUgcmVtb3RlIGNvcHkgaXMgbmV3ZXIuCisgICBIb3dldmVyLCBp ZiB5b3UgdHJ5IHRvIEZUUCBHRVQgL1VQREFURSB0aGUgc2FtZSBmaWxlIChbMzAyXVNlY3Rpb24K KyAgIDMuNiksIGl0IHdpbGwgYmUgdHJhbnNmZXJyZWQgZm9yIHRoZSBzYW1lIHJlYXNvbi4KKwor ICAgVG8gY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSBvZiBQVVQgL1VQREFURSBvbiBhIHBhcnRpY3Vs YXIgY29ubmVjdGlvbiwKKyAgIGlzc3VlIGFuIEZUUCBNT0RUSU1FIGNvbW1hbmQgZm9yIGEgZmls ZSB0aGF0IGlzIGtub3duIHRvIGV4aXN0IG9uIHRoZQorICAgc2VydmVyLiBJZiBpdCBzdWNjZWVk cywgUFVUIC9VUERBVEUgc2hvdWxkIHdvcmsgYW5kIGluIHRoYXQgY2FzZSwgeW91CisgICBjYW4g cnVuIGEgcHJvY2VkdXJlIGxpa2UgdGhlIG9uZSBhYm92ZSBldmVyeSBkYXk6IHRoZSBmaXJzdCB0 aW1lLCBpdAorICAgc2VuZHMgYWxsIHRoZSBmaWxlczsgYWZ0ZXIgdGhhdCwgaXQgc2VuZHMgb25s eSB0aGUgb25lcyB0aGF0IGNoYW5nZWQuCisgICBJZiBhIHRyYW5zYWN0aW9uIGxvZyBpcyBhY3Rp dmUsIGEgbm90YXRpb24gaXMgaW5jbHVkZWQgZm9yIGFueSBmaWxlcworICAgdGhhdCBhcmUgc2tp cHBlZC4KKworICAgTm90ZXM6CisgICAgMS4gV2h5IGlzIENvb3JkaW5hdGVkIFVuaXZlcnNhbCBU aW1lIGFiYnJldmlhdGVkIFVUQz8gRnJvbSB0aGUKKyAgICAgICBbMzAzXU5hdGlvbmFsIEluc3Rp dHV0ZSBvZiBTdGFuZGFyZHMgYW5kIFRlY2hub2xvZ3kgRkFROiAiSW4gMTk3MAorICAgICAgIHRo ZSBDb29yZGluYXRlZCBVbml2ZXJzYWwgVGltZSBzeXN0ZW0gd2FzIGRldmlzZWQgYnkgYW4KKyAg ICAgICBpbnRlcm5hdGlvbmFsIGFkdmlzb3J5IGdyb3VwIG9mIHRlY2huaWNhbCBleHBlcnRzIHdp dGhpbiB0aGUKKyAgICAgICBJbnRlcm5hdGlvbmFsIFRlbGVjb21tdW5pY2F0aW9uIFVuaW9uIChJ VFUpLiBUaGUgSVRVIGZlbHQgaXQgd2FzCisgICAgICAgYmVzdCB0byBkZXNpZ25hdGUgYSBzaW5n bGUgYWJicmV2aWF0aW9uIGZvciB1c2UgaW4gYWxsIGxhbmd1YWdlcyBpbgorICAgICAgIG9yZGVy IHRvIG1pbmltaXplIGNvbmZ1c2lvbi4gU2luY2UgdW5hbmltb3VzIGFncmVlbWVudCBjb3VsZCBu b3QgYmUKKyAgICAgICBhY2hpZXZlZCBvbiB1c2luZyBlaXRoZXIgdGhlIEVuZ2xpc2ggd29yZCBv cmRlciwgQ1VULCBvciB0aGUgRnJlbmNoCisgICAgICAgd29yZCBvcmRlciwgVFVDLCB0aGUgYWNy b255bSBVVEMgd2FzIGNob3NlbiBhcyBhIGNvbXByb21pc2UuIgorICAgIDIuIFRoZSBLZXJtaXQg RlRQIGNsaWVudCBpcyB1bnVzdWFsIGluIHRoYXQsIHdoZW4gZG93bmxvYWRpbmcgb25seSwgaXQK KyAgICAgICBjYW4gc2V0IHRoZSByZWNlaXZlZCBmaWxlJ3MgZGF0ZSBmcm9tIHRoZSBmaWxlJ3Mg ZGF0ZSBvbiB0aGUKKyAgICAgICBzZXJ2ZXIsIGJ1dCB0aGlzIHNob3VsZCBub3QgYWZmZWN0IHRo ZSB1cGRhdGUgZmVhdHVyZS4gV2hlbgorICAgICAgIHVwbG9hZGluZyB0byBhbiBGVFAgc2VydmVy LCBob3dldmVyLCB0aGVyZSBpcyBubyBtZWNoYW5pc20gZm9yIHRoZQorICAgICAgIGNsaWVudCB0 byBzZXQgdGhlIGRhdGUgb2YgdGhlIHVwbG9hZGVkIGZpbGUgb24gdGhlIHNlcnZlci4KKworMy41 LjMgUmVjb3ZlcnkKKworICAgU3VwcG9zZSB0aGF0IHdoaWxlIHlvdSBhcmUgdXBsb2FkaW5nIGEg bGFyZ2UgZmlsZSBvdmVyIGEgc2xvdworICAgY29ubmVjdGlvbiwgdGhlIGNvbm5lY3Rpb24gaXMg bG9zdCBiZWZvcmUgdGhlIGVudGlyZSBmaWxlIGlzCisgICB0cmFuc2ZlcnJlZC4gV2l0aCBtb3N0 IEZUUCBjbGllbnRzLCB5b3Ugd291bGQgaGF2ZSB0byBzdGFydCBvdmVyLCB0aHVzCisgICByZXNl bmRpbmcgdGhlIHBvcnRpb24gb2YgdGhlIGZpbGUgdGhhdCB3YXMgc2VudCBhbHJlYWR5LCBhbmQg dGhhdCBpcworICAgYWxyZWFkeSBvbiB0aGUgc2VydmVyLiBCdXQgS2VybWl0J3MgL1JFQ09WRVIg c3dpdGNoIChTeW5vbnltOiAvUkVTVEFSVCkKKyAgIGxldHMgeW91IGNvbnRpbnVlIGFuIGludGVy cnVwdGVkIHRyYW5zZmVyIGZyb20gdGhlIHBvaW50IG9mIGZhaWx1cmUsCisgICB0aHVzIHRyYW5z ZmVycmluZyBvbmx5IHRoZSBwYXJ0IHRoYXQgd2Fzbid0IHNlbnQgYWxyZWFkeS4gVGhlCisgICBw cmVyZXF1aXNpdGVzIGZvciByZWNvdmVyeSBhcmU6CisKKyAgICAgKiBUaGUgdHJhbnNmZXIgbXVz dCBiZSBpbiBCSU5BUlkgbW9kZSwgb3IgZWxzZSB0aGUgY2xpZW50IGFuZCBzZXJ2ZXIKKyAgICAg ICBtdXN0IHJlc2lkZSBvbiBsaWtlIHN5c3RlbXMgKGUuZy4gYm90aCBvbiBzb21lIGZvcm0gb2Yg VU5JWCkuCisgICAgICogVGhlIEZUUCBzZXJ2ZXIgbXVzdCBzdXBwb3J0IHRoZSBTSVpFIGNvbW1h bmQuCisKKyAgIEhlcmUncyBob3cgaXQgd29ya3MuIFdoZW4geW91IGluY2x1ZGUgdGhlIC9SRUNP VkVSIHN3aXRjaDoKKworICAgICAqIEtlcm1pdCBjaGVja3MgZm9yIGNvbmZsaWN0aW5nIHN3aXRj aGVzLCBzdWNoIGFzIC9VUERBVEUgYW5kCisgICAgICAgL1VOSVFVRTsgaWYgL1JFQ09WRVIgaXMg Z2l2ZW4gd2l0aCB0aGVzZSBzd2l0Y2hlcyBhbiBlcnJvciBvY2N1cnMuCisgICAgICAgSWYgL1JF Q09WRVIgaXMgZ2l2ZW4gaW4gb3RoZXIgY2lyY3Vtc3RhbmNlcyB3aGVyZSBpdCBjb3VsZCBzZXJ2 ZSBubworICAgICAgIHVzZWZ1bCBwdXJwb3NlIChlLmcuIHdpdGggYXJyYXlzLCBwaXBlcywgb3Ig ZmlsdGVycyksIGl0IGlzCisgICAgICAgaWdub3JlZC4KKworICAgSWYgdGhlIHN3aXRjaCBpcyBh Y2NlcHRlZCwgdGhlbiBmb3IgZWFjaCBzZWxlY3RlZCBmaWxlOgorCisgICAgICogSWYgaXQgaXMg bm90IGJpbmFyeSAoZGV0ZXJtaW5lZCBieSBzY2FubmluZykgYW5kIHRoZSBjbGllbnQgYW5kCisg ICAgICAgc2VydmVyIGFyZSBub3Qgb24gbGlrZSBwbGF0Zm9ybXMsIHJlY292ZXJ5IGlzIGNhbmNl bGVkICh0aGUgZW50aXJlCisgICAgICAgZmlsZSBpcyBzZW50KS4gT3RoZXJ3aXNlOgorICAgICAq IEEgU0laRSBjb21tYW5kIGlzIHNlbnQgZm9yIHRoZSBmaWxlICh1c2luZyBpdHMgcmVtb3RlIG5h bWUpLiBJZiB0aGUKKyAgICAgICByZXBseSBpbmRpY2F0ZXMgdGhlIGZpbGUgd2FzIG5vdCBmb3Vu ZCwgb3IgdGhlIFNJWkUgY29tbWFuZCB3YXMgbm90CisgICAgICAgdW5kZXJzdG9vZCwgb3IgYW55 IG90aGVyIGtpbmQgb2YgZXJyb3IsIHJlY292ZXJ5IGlzIGNhbmNlbGVkLgorICAgICAgIE90aGVy d2lzZToKKyAgICAgKiBBIE1EVE0gKG1vZGlmaWNhdGlvbiB0aW1lKSBjb21tYW5kIGlzIHNlbnQg Zm9yIHRoZSBmaWxlLiBJZiBhIHZhbGlkCisgICAgICAgcmVwbHkgaXMgcmVjZWl2ZWQsIGFuZCB0 aGUgbW9kaWZpY2F0aW9uIHRpbWUgb2YgdGhlIGxvY2FsIGZpbGUgaXMKKyAgICAgICBsYXRlciB0 aGFuIHRoYXQgb2YgdGhlIHJlbW90ZSBmaWxlLCByZWNvdmVyeSBpcyBjYW5jZWxlZC4KKyAgICAg ICBPdGhlcndpc2U6CisgICAgICogSWYgdGhlIHNpemVzIG9mIHRoZSB0d28gZmlsZXMgYXJlIGlk ZW50aWNhbCwgdGhlIGZpbGUgaXMgbm90IHNlbnQuCisgICAgICAgT3RoZXJ3aXNlOgorICAgICAq IEtlcm1pdCBzZWVrcyB0byB0aGUgcmVjb3Zlcnkgc3BvdCBpbiB0aGUgbG9jYWwgZmlsZSwgdGVs bHMgdGhlCisgICAgICAgc2VydmVyIHRvIEFQUEVORCB0aGUgZGF0YSB3aGljaCBpcyBhYm91dCB0 byBhcnJpdmUgdG8gdGhlIHJlbW90ZQorICAgICAgIGZpbGUsIGFuZCB0aGVuIHNlbmRzIHRoZSBk YXRhIHN0YXJ0aW5nIGF0IHRoZSByZWNvdmVyeSBwb2ludC4KKworICAgVG8gc2FmZWd1YXJkIGZp bGUgaW50ZWdyaXR5LCByZWNvdmVyeSBpcyBub3QgYXR0ZW1wdGVkIHVubGVzcyBhbGwgdGhlCisg ICBwcmVjb25kaXRpb25zIGFyZSBtZXQuIEZvciB0aGUgd2lkZXN0IHBvc3NpYmxlIHVzZWZ1bG5l c3MsIEFQUEVORCBpcworICAgdXNlZCByYXRoZXIgdGhhbiBSRVNUQVJULiBGb3Igc3RyZWFtIHRy YW5zZmVycyAodGhlIG9ubHkga2luZCB0aGF0CisgICBLZXJtaXQgc3VwcG9ydHMpIHRoZSByZXN1 bHRzIGFyZSB0aGUgc2FtZS4KKworICAgQnkgZGVzaWduLCB0aGUgL1JFQ09WRVIgc3dpdGNoIGNh biBiZSBpbmNsdWRlZCB3aXRoIGFueSBGVFAgUFVUIG9yIE1QVVQKKyAgIGNvbW1hbmQsIGV2ZW4g aWYgaXQgc3BlY2lmaWVzIGEgZ3JvdXAgb2YgZmlsZXMuIFRoaXMgYWxsb3dzIHlvdSB0bworICAg cmVzdW1lIGFuIGludGVycnVwdGVkIGJhdGNoIHRyYW5zZmVyIGZyb20gd2hlcmUgaXQgbGVmdCBv ZmYuIFRoZSBmaWxlcworICAgdGhhdCB3ZXJlIGFscmVhZHkgY29tcGxldGVseSBzZW50IGFyZSBz a2lwcGVkLCB0aGUgZmlsZSB0aGF0IHdhcworICAgaW50ZXJydXB0ZWQgaXMgcmVjb3ZlcmVkLCBh bmQgdGhlIHJlbWFpbmluZyBmaWxlcyBhcmUgdXBsb2FkZWQuCisKKyAgIEJ5IHRoZSB3YXksIGl0 IGRvZXNuJ3QgbWF0dGVyIGhvdyB0aGUgb3JpZ2luYWwgcGFydGlhbCBmaWxlIHdhcworICAgdXBs b2FkZWQgLS0gRlRQLCBLZXJtaXQsIFptb2RlbSwgZXRjOiBhcyBsb25nIGFzIHRoZSBwcmVjb25k aXRpb25zIGFyZQorICAgbWV0LCBpdCBjYW4gYmUgcmVjb3ZlcmVkIHdpdGggRlRQIFBVVCAvUkVD T1ZFUiwgb3IgZm9yIHRoYXQgbWF0dGVyIGFsc28KKyAgIHVzaW5nIEtlcm1pdCBwcm90b2NvbCBh bmQgU0VORCAvUkVDT1ZFUi4KKworICAgQSB3b3JkIG9mIGNhdXRpb24sIGhvd2V2ZXIsIHdoZW4g dGhlIG9yaWdpbmFsIHVwbG9hZCB3YXMgaW4gdGV4dCBtb2RlCisgICB3aXRoIGNoYXJhY3Rlci1z ZXQgdHJhbnNsYXRpb24gKFszMDRdU2VjdGlvbiAzLjcpOgorCisgICAgICogSWYgdGhlIG9yaWdp bmFsIHVwbG9hZCBpbnZvbHZlZCBhIHRyYW5zbGF0aW9uIGZyb20gb25lIHNpbmdsZS1ieXRlCisg ICAgICAgY2hhcmFjdGVyIHNldCB0byBhbm90aGVyIChlLmcuIENvZGUgUGFnZSA4NTAgdG8gTGF0 aW4tMSksIHJlY292ZXJ5CisgICAgICAgaXMgc2FmZSBpZiB5b3Ugc3BlY2lmeSB0aGUgc2FtZSB0 cmFuc2xhdGlvbnMgZm9yIHRoZSByZWNvdmVyeS4gSWYKKyAgICAgICB5b3UgZG9uJ3QsIHRoZSBy ZXN1bHRpbmcgZmlsZSB3aWxsIGNvbnRhaW4gYSBtaXh0dXJlIG9mIGNoYXJhY3RlcgorICAgICAg IHNldHMuCisgICAgICogSWYgdGhlIG9yaWdpbmFsIHVwbG9hZCBpbnZvbHZlZCBhIHRyYW5zbGF0 aW9uIHRoYXQgY2hhbmdlZCB0aGUgc2l6ZQorICAgICAgIG9mIHRoZSBmaWxlIChlLmcuIGZyb20g YW4gYWxwaGFiZXRpYyBDb2RlIFBhZ2Ugb3IgTGF0aW4gQWxwaGFiZXQgdG8KKyAgICAgICBVbmlj b2RlLCBvciB2aWNlIHZlcnNhKSwgcmVjb3ZlcnkgaXMgTk9UIHNhZmUsIGV2ZW4gaWYgeW91IHNw ZWNpZnkKKyAgICAgICB0aGUgc2FtZSB0cmFuc2xhdGlvbnMuCisKKyAgIEtlcm1pdCBoYXMgbm8g d2F5IG9mIGtub3dpbmcgYW55dGhpbmcgYWJvdXQgdGhlIHByZXZpb3VzIHVwbG9hZC4gQXMgYQor ICAgc2FmZWd1YXJkLCBhbiBlcnJvciBvY2N1cnMgaWYgeW91IGluY2x1ZGUgL1JFQ09WRVIgYW5k IGFsc28gc3BlY2lmeSBhCisgICBjaGFyYWN0ZXItc2V0IG9mIFVDUzIgb3IgVVRGOCwgc2luY2Ug cmVjb3ZlcnkgY2FuJ3QgcG9zc2libHkgd29yayBpbgorICAgdGhhdCBzaXR1YXRpb24uIE90aGVy d2lzZSwgaXQncyB1cCB0byB5b3UgdG8gYXZvaWQgdW5zYWZlIHJlY292ZXJ5CisgICBvcGVyYXRp b25zLgorCisgICBbIFszMDVdVG9wIF0gWyBbMzA2XUZUUCBUb3AgXSBbIFszMDddQy1LZXJtaXQg SG9tZSBdIFsgWzMwOF1LZXJtaXQgSG9tZQorICAgXQorCiszLjYuIERvd25sb2FkaW5nIEZpbGVz IFdpdGggRlRQCisKKyAgIEFsdGhvdWdoIHVwbG9hZGluZyBmaWxlcyB3aXRoIEtlcm1pdCdzIEZU UCBjbGllbnQgaXMganVzdCBhcyBlYXN5IGFuZAorICAgZmxleGlibGUgYXMgc2VuZGluZyBmaWxl cyB3aXRoIEtlcm1pdCBwcm90b2NvbCwgdGhlIHNhbWUgaXMgbm90IGFsd2F5cworICAgdHJ1ZSBm b3IgZG93bmxvYWRpbmcgYmVjYXVzZSBGVFAgc2VydmVycyBsYWNrIHNvbWUgb2YgdGhlIGNhcGFi aWxpdGllcworICAgb2YgYSBLZXJtaXQgc2VydmVyOgorCisgICAgICogSWYgeW91IHdhbnQgdG8g Z2V0IG1vcmUgdGhhbiBvbmUgZmlsZSwgeW91IGhhdmUgdG8gdXNlIE1HRVQsIG5vdAorICAgICAg IEdFVCwgc2luY2UgdGhlIHVuZGVybHlpbmcgRlRQIHByb3RvY29sIGlzIGRpZmZlcmVudCBpbiB0 aGUgdHdvCisgICAgICAgY2FzZXMuIEtlcm1pdCBjYW4ndCAiYXV0b2RldGVjdCIgd2hpY2ggb25l IHlvdSBtZWFuLCBhcyBpdCBjYW4gd2l0aAorICAgICAgIFBVVCBhbmQgTVBVVCwgc2luY2UgaXQg Y2FuJ3QgYmUgZXhwZWN0ZWQgdG8ga25vdyB0aGUgd2lsZGNhcmQKKyAgICAgICBzeW50YXggb2Yg dGhlIHJlbW90ZSBwbGF0Zm9ybSBhbmQvb3IgRlRQIHNlcnZlciAodGhlIHNhbWUgaXMgdHJ1ZQor ICAgICAgIGZvciBhbGwgb3RoZXIgRlRQIGNsaWVudHMpLiBUbyBjb21wbGljYXRlIG1hdHRlcnMs IEZUUCBwcm90b2NvbCBub3cKKyAgICAgICBpbmNsdWRlcyB0d28gdW5kZXJseWluZyBtZWNoYW5p c21zIChOTFNUIGFuZCBNTFNEKSBmb3IKKyAgICAgICBhY2NvbXBsaXNoaW5nIE1HRVQgb3BlcmF0 aW9ucyBhbmQsIGFzIGV4cGxhaW5lZCBpbiBbMzA5XVNlY3Rpb24KKyAgICAgICAzLjExLCB0aGUg dHdvIGJlaGF2ZSBkaWZmZXJlbnRseS4KKyAgICAgKiBBdXRvbWF0aWMgdGV4dC1iaW5hcnkgbW9k ZSBzd2l0Y2hpbmcgaXMgbm90IGRvbmUgYnkgdGhlIHNlcnZlci4gSXQKKyAgICAgICBjYW4gYmUg ZG9uZSBieSB0aGUgY2xpZW50IChLZXJtaXQpLCBidXQgaW4gdGhpcyBjYXNlIGl0IGlzIG5vdAor ICAgICAgIGJhc2VkIG9uIGEgZmlsZSBzY2FuIChzaW5jZSB0aGVyZSBpcyBubyB3YXkgZm9yIEtl cm1pdCBwcmVzY2FuIGEKKyAgICAgICBzZXJ2ZXIgZmlsZSksIGJ1dCByYXRoZXIgb24gdGhlIGZp bGVuYW1lLCB1c2luZyBDLUtlcm1pdCA3LjAKKyAgICAgICBbMzEwXWZpbGVuYW1lIHBhdHRlcm5z LgorICAgICAqIFNvbWUgb3B0aW9ucyB0aGF0IGFyZSBhdmFpbGFibGUgd2l0aCBGVFAgUFVUIGNh biBub3QgYmUgdXNlZCB3aXRoCisgICAgICAgRlRQIFtNXUdFVCBvciBkb24ndCB3b3JrIHRoZSBz YW1lIHdheToKKyAgICAgICAgIC9QRVJNSVNTSU9OUyAoRlRQIHByb3RvY29sIGhhcyBubyBtZWNo YW5pc20gZm9yIHRoaXMpLgorICAgICAgICAgL1tOT1QtXUJFRk9SRSwgL1tOT1QtXUFGVEVSIChi ZWNhdXNlIG9mIHRoZSB0aW1lem9uZSBwcm9ibGVtKS4KKyAgICAgICAgIC9SRUNPVkVSIHdvcmtz IG9ubHkgaW4gYmluYXJ5IG1vZGUuICAgL1JFQ1VSU0lWRSBoYXMgbGltaXRlZAorICAgICAgIHV0 aWxpdHkuCisKKyAgIFRoZSBjb21tYW5kcyBmb3IgZG93bmxvYWRpbmcgYXJlOgorCisgICBTRVQg RklMRSBET1dOTE9BRC1ESVJFQ1RPUlkgWyBkaXJlY3RvcnkgXQorICAgICAgICAgIEFzIHdpdGgg S2VybWl0IHRyYW5zZmVycywgdGhpcyBjb21tYW5kLCBpZiBnaXZlbiwgdGVsbHMgQy1LZXJtaXQK KyAgICAgICAgICB3aGVyZSB0byBzdG9yZSBpbmNvbWluZyBmaWxlcyBpbiB0aGUgYWJzZW5jZSBv ZiBhIHNwZWNpZmljCisgICAgICAgICAgYXMtbmFtZS4gSWYgbm90IGdpdmVuLCBpbmNvbWluZyBm aWxlcyBhcmUgc3RvcmVkIGFzIGluZGljYXRlZCBieQorICAgICAgICAgIHRoZSBhcy1uYW1lLCBp ZiBhbnksIG90aGVyd2lzZSBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnksIGp1c3QgYXMKKyAgICAg ICAgICB3aXRoIEtlcm1pdCB0cmFuc2ZlcnMuIFRoZSBtb3JlIHZlcmJvc2UgdHJhbnNmZXIgZGlz cGxheSBmb3JtYXRzCisgICAgICAgICAgZ2l2ZSB0aGUgZnVsbCBwYXRobmFtZSBvZiBlYWNoIHJl Y2VpdmVkIGZpbGUsIGFuZCwgaW4gY2FzZSB5b3UKKyAgICAgICAgICBoYXZlIHRyb3VibGUgZmlu ZGluZyBhIGRvd25sb2FkZWQgZmlsZSBhZnRlcndhcmRzLCBpdHMgZnVsbCBwYXRoCisgICAgICAg ICAgaXMgYWxzbyBsaXN0ZWQgaW4gdGhlIHRyYW5zYWN0aW9uIGxvZyAoaWYgeW91IGtlcHQgb25l KSwgYW5kIHlvdQorICAgICAgICAgIGNhbiBhbHNvIGFzayBLZXJtaXQgd2hlcmUgaXQgd2VudCB3 aXRoIHRoZSBbMzExXVdIRVJFIGNvbW1hbmQuCisKKyAgIFNFVCBGVFAgR0VULUZJTEVUWVBFLVNX SVRDSElORyB7IE9OLCBPRkYgfQorICAgICAgICAgIE9OIGJ5IGRlZmF1bHQsIGNhdXNpbmcgS2Vy bWl0IHRvIHN3aXRjaCBhdXRvbWF0aWNhbGx5IGludG8gdGV4dAorICAgICAgICAgIG9yIGJpbmFy eSBtb2RlIGZvciBlYWNoIGZpbGUgYmFzZWQgb24gd2hldGhlciBpdHMgbmFtZSBtYXRjaGVzIGEK KyAgICAgICAgICB0ZXh0IHBhdHRlcm4gb3IgYmluYXJ5IHBhdHRlcm4uIFNldCB0aGlzIE9GRiwg b3IgdXNlIGEgL1RFWFQsCisgICAgICAgICAgL0JJTkFSWSwgb3IgL1RFTkVYIHN3aXRjaCB0byBk ZWZlYXQgdGhpcyBmZWF0dXJlLiBVc2UgU0hPVworICAgICAgICAgIFBBVFRFUk5TIHRvIHNlZSB0 aGUgY3VycmVudCBwYXR0ZXJuIGxpc3QuCisKKyAgIFsgRlRQIF0gR0VUIFsgc3dpdGNoZXMgXSBm aWxlbmFtZSBbIGFzLW5hbWUgXQorICAgICAgICAgIEFza3MgdGhlIHNlcnZlciB0byBzZW5kIHRo ZSBnaXZlbiBmaWxlLCBhbmQgaWYgaXQgY29tZXMsIHN0b3JlcworICAgICAgICAgIGl0IGxvY2Fs bHkgdW5kZXIgdGhlIGdpdmVuIGFzLW5hbWUsIGlmIGFueSwgb3RoZXJ3aXNlIHVuZGVyIGl0cwor ICAgICAgICAgIG9yaWdpbmFsIG5hbWUgKG1vZGlmaWVkIGFjY29yZGluZyB0byB0aGUgc2VsZWN0 ZWQgZmlsZW5hbWUKKyAgICAgICAgICBjb252ZXJzaW9uIG9wdGlvbiksIGluIHlvdXIgZG93bmxv YWQgZGlyZWN0b3J5LCBpZiB5b3UgaGF2ZQorICAgICAgICAgIHNwZWNpZmllZCBvbmUsIG90aGVy d2lzZSBpbiB0aGUgZGlyZWN0b3J5IGluZGljYXRlZCBpbiB0aGUKKyAgICAgICAgICBhcy1uYW1l LCBpZiBhbnksIG90aGVyd2lzZSBpbiB5b3VyIGN1cnJlbnQgZGlyZWN0b3J5LiBJZiB5b3UKKyAg ICAgICAgICBhY2NpZGVudGFsbHkgdXNlIGEgd2lsZGNhcmQgaW4gdGhlIGZpbGVuYW1lICgiZ2V0 ICoudHh0IikgdGhlCisgICAgICAgICAgc2VydmVyIHdpbGwgcmVwbHkgd2l0aCBhIG1lc3NhZ2Ug bGlrZSAiRmlsZSBub3QgZm91bmQiICh1bmxlc3MKKyAgICAgICAgICB0aGVyZSBpcyBhIGZpbGUg d2hvc2UgbmFtZSBhY3R1YWxseSBpcyAiKi50eHQiKS4gSWYgRlRQCisgICAgICAgICAgR0VULUZJ TEVUWVBFLVNXSVRDSElORyBpcyBPTiwgYW5kIGluIHRoZSBhYnNlbmNlIG9mIGFueSBHRVQKKyAg ICAgICAgICBzd2l0Y2hlcyB0byBvdmVycmlkZSBpdCwgdGhlIGZpbGUgaXMgdHJhbnNmZXJyZWQg aW4gYmluYXJ5IG1vZGUKKyAgICAgICAgICBpZiBpdCBtYXRjaGVzIGFueSBvZiBLZXJtaXQncyBi aW5hcnkgbmFtZSBwYXR0ZXJucywgYW5kIGluIHRleHQKKyAgICAgICAgICBtb2RlIGlmIGl0IG1h dGNoZXMgYW55IG9mIEtlcm1pdCdzIHRleHQgbmFtZSBwYXR0ZXJucywgYW5kIGluCisgICAgICAg ICAgdGhlIHByZXZhaWxpbmcgRlRQIFRZUEUgaWYgaXQgbWF0Y2hlcyBub25lIG9mIHRoZXNlIHBh dHRlcm5zLgorCisgICBbIEZUUCBdIE1HRVQgWyBzd2l0Y2hlcyBdIGZpbGVzcGVjIFsgZmlsZXNw ZWMgWyBmaWxlc3BlYyBbIC4uLiBdIF0gXQorICAgICAgICAgIExpa2UgR0VULCBidXQgZm9yIG11 bHRpcGxlIGZpbGVzLiBPbmUgb3IgbW9yZSBmaWxlCisgICAgICAgICAgc3BlY2lmaWNhdGlvbnMg Y2FuIGJlIGdpdmVuLCBhbmQgYW55IG9yIGFsbCAob3Igbm9uZSkgb2YgdGhlbQorICAgICAgICAg IGNhbiBjb250YWluIHdpbGRjYXJkcyBvciBjYW4gYmUgZGlyZWN0b3J5IG5hbWVzLiBUaGUgZmls ZSBsaXN0CisgICAgICAgICAgbWF5IG5vdCBpbmNsdWRlIGFuIGFzLW5hbWUsIGJ1dCB5b3UgY2Fu IHN0aWxsIGdpdmUgb25lIHdpdGggdGhlCisgICAgICAgICAgL0FTLU5BTUU6IHN3aXRjaC4KKwor ICAgSW4gYm90aCB0aGUgRlRQIEdFVCBhbmQgTUdFVCBjb21tYW5kcywgYW55IGZpbGVuYW1lcyB0 aGF0IGNvbnRhaW4KKyAgIHNwYWNlcyBtdXN0IGJlIGVuY2xvc2VkIGluIGJyYWNlcyBvciBkb3Vi bGVxdW90ZXMgKHNlZSBbMzEyXVNlY3Rpb24gNQorICAgZm9yIGRldGFpbHMpLgorCisgICBGVFAg ZG93bmxvYWRzIG1heSBiZSBpbnRlcnJ1cHRlZCBqdXN0IGxpa2UgS2VybWl0IHRyYW5zZmVycy4g V2hpbGUgdGhlCisgICB0cmFuc2ZlciBpcyBpbiBwcm9ncmVzcywgdHlwZToKKworICAgICAqIFgg dG8gaW50ZXJydXB0IHRoZSBjdXJyZW50IGZpbGUgYW5kIGdvIG9uIHRvIHRoZSBuZXh0IGZpbGUu CisgICAgICogWiAob3IgQ29udHJvbC1DKSB0byBjYW5jZWwgdGhlIGN1cnJlbnQgZmlsZSBhbmQg YWxsIHJlbWFpbmluZworICAgICAgIGZpbGVzLgorCisgICBCZWZvcmUgcHJvY2VlZGluZywgYSBi cmllZiB3b3JkIGFib3V0IHRlbXBvcmFyeSBmaWxlcy4gSW4gRlRQIHByb3RvY29sLAorICAgdGhl IE1HRVQgY29tbWFuZCB3b3JrcyBieSByZXF1ZXN0aW5nIGEgZmlsZSBsaXN0IGZyb20gdGhlIHNl cnZlciwgYW5kCisgICB0aGVuIChpbnRlcm5hbGx5KSBpc3N1aW5nIGEgR0VUIGNvbW1hbmQgKEZU UCBSRVRSIHByb3RvY29sIGRpcmVjdGl2ZSkKKyAgIGZvciBlYWNoIGZpbGUuIFRoZSBmaWxlIGxp c3QgcmV0dXJuZWQgYnkgdGhlIHNlcnZlciBjYW4gYmUgYW55IHNpemUgYXQKKyAgIGFsbCwgc28g aW4gY2FzZSBpdCBpcyBodWdlLCB3ZSBkb24ndCBzdG9yZSBpdCBpbiBtZW1vcnk7IGluc3RlYWQg d2UgcHV0CisgICBpdCBpbiBhIHRlbXBvcmFyeSBmaWxlLiBGb3IgdHJvdWJsZXNob290aW5nIHB1 cnBvc2VzLCB5b3Ugc2hvdWxkIGJlCisgICBhd2FyZSBvZiB0d28gcG9pbnRzOgorCisgICAgMS4g VGhlIGxvY2F0aW9uIG9mIHRoZSB0ZW1wb3JhcnkgZmlsZSBpcyBjaG9zZW4gYWNjb3JkaW5nIHRo ZSBUTVAgb3IKKyAgICAgICBURU1QIGVudmlyb25tZW50IHZhcmlhYmxlcy4gSWYgbmVpdGhlciBv ZiB0aGVzZSB2YXJpYWJsZXMgaXMKKyAgICAgICBkZWZpbmVkLCB5b3UgbWlnaHQgbmVlZCB0byBk ZWZpbmUgaXQuIEluIGNhc2UgdGhlcmUgaXMgbm90IGVub3VnaAorICAgICAgIHNwYWNlIG9uIHRo ZSBpbmRpY2F0ZWQgZGlzayBvciBwYXJ0aXRpb24gZm9yIHRoZSBzZXJ2ZXIncyBmaWxlCisgICAg ICAgbGlzdCwgeW91IG1pZ2h0IG5lZWQgdG8gZWl0aGVyIGNsZWFuIHVwIHRoZSB0ZW1wb3Jhcnkg YXJlYSwgb3IKKyAgICAgICByZWRlZmluZSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gaW5k aWNhdGUgYSBkaWZmZXJlbnQgYXJlYSB0aGF0CisgICAgICAgaGFzIHN1ZmZpY2llbnQgc3BhY2Uu CisgICAgMi4gSWYgeW91IHdhbnQgdG8gbG9vayBhdCB0aGUgbGlzdCB5b3Vyc2VsZiwgdXNlIFNF VCBGVFAgREVCVUcgT04uCisgICAgICAgVGhpcyB0ZWxscyBLZXJtaXQgdG8gKGEpIGdpdmUgeW91 IHRoZSBmdWxsIHBhdGhuYW1lIG9mIHRoZQorICAgICAgIHRlbXBvcmFyeSBmaWxlIGF0IHRoZSBl bmQgb2YgZWFjaCBNR0VUIGNvbW1hbmQsIGFuZCAoYikgbm90IHRvCisgICAgICAgZGVsZXRlIGl0 LCBhcyBpdCBub3JtYWxseSBkb2VzLgorCiszLjYuMS4gRlRQIEdFVCBTd2l0Y2hlcworCisgICBU aGUgZm9sbG93aW5nIHN3aXRjaGVzIGFyZSBhdmFpbGFibGUgd2l0aCBGVFAgR0VUIGFuZCBNR0VU OgorCisgICAvVEVYVAorICAgICAgICAgIFNwZWNpZmllcyBhIHRleHQtbW9kZSB0cmFuc2Zlci4g T3ZlcnJpZGVzIHRoZSBnbG9iYWwgRlRQIFRZUEUKKyAgICAgICAgICBzZXR0aW5nIGFuZCBmaWxl bmFtZSBwYXR0ZXJuLW1hdGNoaW5nIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlCisgICAgICAgICAg Y3VycmVudCBjb21tYW5kIG9ubHksIEFsbCBmaWxlcyBhcmUgZG93bmxvYWRlZCBpbiB0ZXh0IG1v ZGUuCisgICAgICAgICAgU3lub255bTogL0FTQ0lJLgorCisgICAvQklOQVJZCisgICAgICAgICAg U3BlY2lmaWVzIGEgYmluYXJ5LW1vZGUgdHJhbnNmZXIuIE92ZXJyaWRlcyB0aGUgZ2xvYmFsIEZU UCBUWVBFCisgICAgICAgICAgc2V0dGluZyBhbmQgZmlsZW5hbWUgcGF0dGVybi1tYXRjaGluZyBm b3IgdGhlIGR1cmF0aW9uIG9mIHRoZQorICAgICAgICAgIGN1cnJlbnQgY29tbWFuZCBvbmx5LiBB bGwgZmlsZXMgYXJlIGRvd25sb2FkZWQgaW4gYmluYXJ5IG1vZGUuCisKKyAgIC9URU5FWAorICAg ICAgICAgIExpa2UgL0JJTkFSWSBidXQgc3BlY2lmaWVzIGEgc3BlY2lhbCBiaW5hcnkgdHJhbnNm ZXIgbW9kZSB0byBiZQorICAgICAgICAgIHVzZWQgd2hlbiBnZXR0aW5nIDgtYml0IGJpbmFyeSBm aWxlcyBmcm9tIGEgMzYtYml0IHBsYXRmb3JtIHN1Y2gKKyAgICAgICAgICBhcyBUT1BTLTEwLCBU T1BTLTIwLCBvciBURU5FWC4gQWxsIGZpbGVzIGFyZSBkb3dubG9hZGVkIGluIHRoZQorICAgICAg ICAgIHNwZWNpYWwgYmluYXJ5IG1vZGUuCisKKyAgIC9SRUNPVkVSCisgICAgICAgICAgVGhpcyBp bnN0cnVjdHMgS2VybWl0IHRvIHRyeSB0byByZWNvdmVyIGFuIGluY29tcGxldGUgZG93bmxvYWQK KyAgICAgICAgICBmcm9tIHRoZSBwb2ludCBvZiBmYWlsdXJlLiBXb3JrcyBvbmx5IGluIGJpbmFy eSBtb2RlLCBhbmQgb25seQorICAgICAgICAgIGlmIHRoZSBzZXJ2ZXIgc3VwcG9ydHMgdGhlIChu b3QteWV0LXN0YW5kYXJkKSBGVFAgIlJFU1QiCisgICAgICAgICAgZGlyZWN0aXZlLiBTZWUgWzMx M11TZWN0aW9uIDMuNi4zIGZvciBkZXRhaWxzLiBTeW5vbnltOgorICAgICAgICAgIC9SRVNUQVJU LgorCisgICAvRklMRU5BTUVTOntDT05WRVJURUQsTElURVJBTH0KKyAgICAgICAgICBPdmVycmlk ZXMgdGhlIFszMTRdRlRQIEZJTEVOQU1FUyAoZmlsZW5hbWUgY29udmVyc2lvbikgc2V0dGluZwor ICAgICAgICAgIGZvciB0aGlzIGRvd25sb2FkIG9ubHksIGZvcmNpbmcgaW5jb21pbmcgZmlsZW5h bWVzIHRvIGJlIGVpdGhlcgorICAgICAgICAgIGNvbnZlcnRlZCBvciB0YWtlbiBsaXRlcmFsbHku CisKKyAgIC9BUy1OQU1FOnRleHQKKyAgICAgICAgICBGb3IgR0VULCB0aGlzIGlzIGVxdWl2YWxl bnQgdG8gZ2l2aW5nIGFuIGFzLW5hbWUgYWZ0ZXIgdGhlCisgICAgICAgICAgZmlsZW5hbWUuIEZv ciBNR0VULCB0aGlzIGlzIHRoZSBvbmx5IHdheSB0byBzcGVjaWZ5IGFsdGVybmF0aXZlCisgICAg ICAgICAgbmFtZXMgZm9yIHRoZSBpbmNvbWluZyBmaWxlcy4gV2l0aCBNR0VULCB0aGUgL0FTLU5B TUUgdGV4dAorICAgICAgICAgIHNob3VsZCAobXVzdCkgY29udGFpbiBhIEtlcm1pdCB2YXJpYWJs ZSwgdXN1YWxseSBcdihmaWxlbmFtZSkgb3IKKyAgICAgICAgICBcdihmaWxlbnVtYmVyKS4gRXhh bXBsZToKKworICBtZ2V0IC90ZXh0IC9hcy1uYW1lOlx2KGZpbGVuYW1lKS5uZXcgKi5jCisKKyAg ICAgICAgICBUaGlzIGdldHMgYWxsICIuYyIgZmlsZXMgYW5kIHN0b3JlcyB0aGVtIHdpdGggIgor CisgICAgICAgICAgLm5ldyIgYXBwZW5kZWQgdG8gdGhlaXIgbmFtZXMuIFNlZSB0aGUgWzMxNV1D LUtlcm1pdCA3LjAgVXBkYXRlCisgICAgICAgICAgTm90ZXMgZm9yIGRldGFpbHMuCisKKyAgIC9D T01NQU5ECisgICAgICAgICAgVGhpcyBzcGVjaWZpZXMgdGhhdCB0aGUgaW5jb21pbmcgZmlsZSBp cyB0byBiZSB3cml0dGVuIHRvIHRoZQorICAgICAgICAgIHN0YW5kYXJkIGlucHV0IG9mIGEgY29t bWFuZCwgcmF0aGVyIHRoYW4gdG8gYSBmaWxlLiBUaGUgY29tbWFuZAorICAgICAgICAgIG5hbWUg aXMgdGhlIGFzLW5hbWUgZnJvbSB0aGUgR0VUIGNvbW1hbmQgb3IgdGhlIC9BUy1OQU1FCisgICAg ICAgICAgYXJndW1lbnQuIElmIHlvdSBuZWVkIHRvIHJlZmVyIHRvIHRoZSBpbmNvbWluZyBmaWxl J3MgbmFtZSBpbgorICAgICAgICAgIHRoZSBjb21tYW5kLCB1c2UgXHYoZmlsZW5hbWUpLiBTZWUg dGhlIGRlc2NyaXB0aW9uIG9mIHRoZQorICAgICAgICAgIHJlZ3VsYXIgS2VybWl0IFszMTZdR0VU IC9DT01NQU5EIGNvbW1hbmQgZm9yIGRldGFpbHMgYW5kCisgICAgICAgICAgZXhhbXBsZXMuCisK KyAgIC9RVUlFVAorICAgICAgICAgIFRyYW5zZmVycyB0aGUgZmlsZXMgcXVpZXRseTsgZG9uJ3Qg cHV0IHVwIGEgZmlsZS10cmFuc2ZlcgorICAgICAgICAgIGRpc3BsYXkuCisKKyAgIC9FUlJPUi1B Q1RJT046e1FVSVQsUFJPQ0VFRH0KKyAgICAgICAgICBUaGlzIHN3aXRjaCBhZmZlY3RzIG9ubHkg TUdFVC4gSWYgYW4gZXJyb3Igb2NjdXJzIHdpdGggYQorICAgICAgICAgIHBhcnRpY3VsYXIgZmls ZSwgdGhpcyB0ZWxscyB3aGV0aGVyIHRvIGdvIG9uIHRvIHRoZSBuZXh0IGZpbGUKKyAgICAgICAg ICAoUFJPQ0VFRCkgb3IgdG8gc3RvcCByaWdodCBhd2F5IGFuZCBmYWlsIChRVUlUKS4gVGhlIGRl ZmF1bHQgaXMKKyAgICAgICAgICBQUk9DRUVELgorCisgICBUaGUgZmlsZSBzZWxlY3Rpb24gc3dp dGNoZXMgYXJlOgorCisgICAvRVhDRVBUOntwYXR0ZXJufSBvciAvRVhDRVBUOnt7cGF0dGVybn17 cGF0dGVybn17Li4ufX0KKyAgICAgICAgICBFeGNlcHRpb24gbGlzdCBmb3IgTUdFVDsgc2tpcCBk b3dubG9hZGluZyBhbnkgZmlsZSB3aG9zZSBuYW1lCisgICAgICAgICAgbWF0Y2hlcyBhbnkgb2Yg dGhlIGdpdmVuIHBhdHRlcm5zICh3aGVuIHVzaW5nIHRoZSBzZWNvbmQgZm9ybWF0LAorICAgICAg ICAgIHVwIHRvIDY0IHBhdHRlcm5zIG1heSBiZSBzcGVjaWZpZWQpLiBbMzE3XUNMSUNLIEhFUkUg Zm9yIHN5bnRheAorICAgICAgICAgIGRldGFpbHMuCisKKyAgIC9TTUFMTEVSLVRIQU46bnVtYmVy CisgICAgICAgICAgRG93bmxvYWQgb25seSBmaWxlcyB3aG9zZSBzaXplIGlzIHNtYWxsZXIgdGhh biB0aGUgZ2l2ZW4gbnVtYmVyCisgICAgICAgICAgb2YgYnl0ZXMgKG9jdGV0cykuIFJlcXVpcmVz IHRoYXQgdGhlIEZUUCBzZXJ2ZXIgc3VwcG9ydCB0aGUgU0laRQorICAgICAgICAgIG9yIE1MU0Qg ZGlyZWN0aXZlLgorCisgICAvTEFSR0VSLVRIQU46bnVtYmVyCisgICAgICAgICAgRG93bmxvYWQg b25seSBmaWxlcyB3aG9zZSBzaXplIGlzIGdyZWF0ZXIgdGhhbiB0aGUgZ2l2ZW4gbnVtYmVyCisg ICAgICAgICAgb2YgYnl0ZXMuIFJlcXVpcmVzIHRoYXQgdGhlIEZUUCBzZXJ2ZXIgc3VwcG9ydCB0 aGUgU0laRSBvciBNTFNECisgICAgICAgICAgZGlyZWN0aXZlLgorCisgICAvTk9CQUNLVVBGSUxF UworICAgICAgICAgIER1cmluZyBNR0VULCBkb24ndCBkb3dubG9hZCBhbnkgZmlsZXMgd2hvc2Ug bmFtZXMgZW5kIHdpdGgKKyAgICAgICAgICBiYWNrdXAgc3VmZml4ZXMgKC5+bn4gd2hlcmUgbiBp cyBhIG51bWJlcikuCisKKyAgIC9OT0RPVEZJTEVTCisgICAgICAgICAgRHVyaW5nIE1HRVQsIGRv bid0IGRvd25sb2FkIGFueSBmaWxlcyB3aG9zZSBuYW1lcyBiZWdpbiB3aXRoCisgICAgICAgICAg cGVyaW9kICguKS4gRXF1aXZhbGVudCB0byAvRVhDRVBUOnsuKn0uCisKKyAgIC9MSVNURklMRTps b2NhbC1maWxlbmFtZQorICAgICAgICAgIFRoZSBnaXZlbiBmaWxlIGNvbnRhaW5zIGEgbGlzdCBv ZiBmaWxlcyB0byBHRVQsIG9uZSBwZXIgbGluZS4KKyAgICAgICAgICBGaWxlbmFtZXMgaW4gdGhl IGxpc3RmaWxlIGNhbiBjb250YWluIHdpbGRjYXJkIGNoYXJhY3RlcnMgaW4gdGhlCisgICAgICAg ICAgc3ludGF4IG9mIHRoZSBzZXJ2ZXIuIFRoZXJlIGlzIG5vIGxpbWl0IG9uIHRoZSBudW1iZXIg b2YgbGluZXMKKyAgICAgICAgICBpbiB0aGUgbGlzdGZpbGUuCisKKyAgIC9OQU1FTElTVDpsb2Nh bC1maWxlbmFtZQorICAgICAgICAgIElmIHRoaXMgc3dpdGNoIGlzIGdpdmVuLCB0aGVuIGluc3Rl YWQgb2YgYWN0dWFsbHkgcmV0cmlldmluZyB0aGUKKyAgICAgICAgICBzZWxlY3RlZCBmaWxlcywg dGhlIEdFVCBjb21tYW5kIHJldHJpZXZlcyBhIGxpc3Qgb2YgdGhlIG5hbWVzIG9mCisgICAgICAg ICAgdGhlIGZpbGVzIHRoYXQgd291bGQgYmUgcmV0cmlldmVkLCBhbmQgcGxhY2VzIGl0IGluIHRo ZQorICAgICAgICAgIHNwZWNpZmllZCBmaWxlLiBUaGUgcmVzdWx0aW5nIGZpbGUgaXMgYW4gb3Jk aW5hcnkgdGV4dCBmaWxlLAorICAgICAgICAgIHdpdGggb25lIGZpbGVuYW1lIHBlciBsaW5lLCBz dWl0YWJsZSBmb3IgcmVhZGluZyBieSBhIHBlcnNvbiwgb3IKKyAgICAgICAgICBwcm9jZXNzaW5n IGJ5IGEgY29tcHV0ZXIgcHJvZ3JhbSwgaW5jbHVkaW5nIEtlcm1pdCBpdHNlbGYgKEZPUEVOCisg ICAgICAgICAgLyBGUkVBRCAvIEZXUklURSAvIEZDTE9TRSksIGFuZCBhcyAvRklMRUxJU1Q6IGZp bGUuIElmIHRoZQorICAgICAgICAgIGZpbGVuYW1lIGlzIG9taXR0ZWQgb3IgZ2l2ZW4gYXMgIi0i IChkYXNoLCBoeXBoZW4pLCB0aGUgbGlzdAorICAgICAgICAgIGdvZXMgdG8gdGhlIHNjcmVlbi4g Tk9URTogaWYgeW91IHdhbnQgYSBjb3B5IG9mIHRoZSBjb21wbGV0ZQorICAgICAgICAgIGxpc3Qg c2VudCBieSB0aGUgc2VydmVyLCB1c2UgU0VUIEZUUCBERUJVRyBPTiwgcGVyZm9ybSBhbiBNR0VU LAorICAgICAgICAgIGFuZCB0aGUgdGVtcG9yYXJ5IGZpbGUgY29udGFpbmluZyB0aGUgbGlzdCB3 aWxsIGJlIGtlcHQgcmF0aGVyCisgICAgICAgICAgdGhhbiBkZWxldGVkIChhbmQgS2VybWl0IHRl bGxzIHlvdSBpdHMgbmFtZSkuCisKKyAgIC9VUERBVEUsIC9DT0xMSVNJT046a2V5d29yZAorICAg ICAgICAgIEV4cGxhaW5lZCBpbiBbMzE4XVNlY3Rpb24gMy42LjIuCisKKyAgIC9SRUNVUlNJVkUK KyAgICAgICAgICBUaGlzIG1lYW5zIHRvIHRyeSB0byBkb3dubG9hZCBhbiBlbnRpcmUgZGlyZWN0 b3J5IHRyZWUsIHJhdGhlcgorICAgICAgICAgIHRoYW4ganVzdCBmaWxlcyBmcm9tIGEgcGFydGlj dWxhciBkaXJlY3RvcnkuIEluIGZhY3QsIEZUUAorICAgICAgICAgIHByb3RvY29sIGRvZXMgbm90 IHByb3ZpZGUgYSBtZXRob2QgdG8gcmVxdWVzdCBhIHJlY3Vyc2l2ZQorICAgICAgICAgIGRvd25s b2FkICh1bmxlc3MgdGhlIHNlcnZlciBzdXBwb3J0cyBNTFNEOyBzZWUgWzMxOV1TZWN0aW9uCisg ICAgICAgICAgMy4xMSksIHNvIHRoaXMgd29ya3Mgb25seSBpZiB0aGUgRlRQIHNlcnZlciBkb2Vz IGl0IGFueXdheSwKKyAgICAgICAgICB3aXRob3V0IGJlaW5nIGFza2VkLCBhcyBzb21lIGRvLiBJ biB0aGlzIGNhc2UsIEtlcm1pdCBkZXRlY3RzCisgICAgICAgICAgdGhhdCBuYW1lcyBpbiB0aGUg cmV0dXJuZWQgZmlsZSBsaXN0IGNvbnRhaW4gZGlyZWN0b3J5CisgICAgICAgICAgc2VwYXJhdG9y cywgYW5kIHRoZXJlZm9yZSBhdHRlbXB0cyB0byBjcmVhdGUgdGhlIG5lZWRlZAorICAgICAgICAg IGRpcmVjdG9yaWVzIGFzIHRoZSBmaWxlcyBhcnJpdmUuIEJ1dCB0aGlzIGNhbiB3b3JrIG9ubHkg aWYgdGhlCisgICAgICAgICAgc2VydmVyIGlzIG9uIHRoZSBzYW1lIGtpbmQgb2YgcGxhdGZvcm0g YXMgdGhlIGNsaWVudCwgc28gdGhlCisgICAgICAgICAgcGF0aG5hbWUgc3ludGF4IGNhbiBiZSBy ZWNvZ25pemVkLCBhbmQgYWxzbyBiZWNhdXNlIHRoZSBzZXJ2ZXIKKyAgICAgICAgICBkb2VzIG5v dCBzd2l0Y2ggYmV0d2VlbiB0ZXh0IGFuZCBiaW5hcnkgbW9kZSwgd2hpY2ggd291bGQgYmUKKyAg ICAgICAgICB2aXRhbCBmb3IgY3Jvc3MtcGxhdGZvcm0gdHJhbnNmZXJzLiBVc2Ugd2l0aCBjYXV0 aW9uLiBTeW5vbnltOgorICAgICAgICAgIC9TVUJESVJFQ1RPUklFUy4KKworICAgICAgICAgIEV2 ZW4gd2hlbiB0aGUgc2VydmVyIGRvZXMgbm90IHByb3ZpZGUgcmVjdXJzaXZlIGZpbGUgbGlzdHMs CisgICAgICAgICAgW01dR0VUIC9SRUNVUlNJVkUgZm9yY2VzIEtlcm1pdCB0byByZXBsaWNhdGUg YW55IGRpcmVjdG9yeQorICAgICAgICAgIHN0cnVjdHVyZSBpbXBsaWVkIG9yIGV4cHJlc3NlZCBi eSB0aGUgc2VydmVyJ3MgZmlsZSBsaXN0LiBGb3IKKyAgICAgICAgICBleGFtcGxlOgorCisgIGdl dCBzb21lcGF0aC9zb21lZmlsZQorCisgICAgICAgICAgR2V0cyB0aGUgZmlsZSBuYW1lZCBzb21l ZmlsZSBmcm9tIHRoZSBzZXJ2ZXIncyBzb21lcGF0aAorICAgICAgICAgIGRpcmVjdG9yeSBhbmQg cHV0cyBpdCBLZXJtaXQncyBjdXJyZW50IChvciBkb3dubG9hZCkgZGlyZWN0b3J5LAorICAgICAg ICAgIHdoZXJlYXM6CisKKyAgZ2V0IC9yZWN1cnNpdmUgc29tZXBhdGgvc29tZWZpbGUKKworICAg ICAgICAgIGNyZWF0ZXMgdGhlIHBhdGggbG9jYWxseSBhbmQgdGhlbiBwdXRzIHRoZSBmaWxlIGlu IGl0LiBTaW1pbGFybHkKKyAgICAgICAgICBmb3IgTUdFVDoKKworICBtZ2V0ICovZGF0YS8qCisK KyAgICAgICAgICBkb3dubG9hZHMgYWxsIHRoZSBmaWxlcyBpbiBhbGwgdGhlIGRhdGEgc3ViZGly ZWN0b3JpZXMgb2YgYWxsCisgICAgICAgICAgdGhlIHN1YmRpcmVjdG9yaWVzIG9mIHRoZSBzZXJ2 ZXIncyBjdXJyZW50IGRpcmVjdG9yeSBhbmQgc3RvcmVzCisgICAgICAgICAgdGhlbSBsb2NhbGx5 IGluIEtlcm1pdCdzIGN1cnJlbnQgKG9yIGRvd25sb2FkKSBkaXJlY3RvcnksCisgICAgICAgICAg d2hlcmVhczoKKworICBtZ2V0IC9yZWN1cnNpdmUgKi9kYXRhLyoKKworICAgICAgICAgIHJlLWNy ZWF0ZXMgdGhlIHNlcnZlcidzIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgbG9jYWxseS4KKworICAgVGhl IEZUUCBwcm90b2NvbCBkb2VzIG5vdCBpbmNsdWRlIGV4cGxpY2l0IG1lY2hhbmlzbXMgZm9yIHJl Y3Vyc2lvbiwgc28KKyAgIEtlcm1pdCBidWlsZHMgdXBvbiB3aGF0IGlzIGF2YWlsYWJsZS4gQWx0 aG91Z2ggYW4gSW50ZXJuZXQgZHJhZnQKKyAgIGRlc2NyaWJlcyBhIG1lY2hhbmlzbSAoIk1MU0Qi KSB0aGF0IHdvdWxkIGFsbG93IHByb3RvY29sLWRyaXZlbgorICAgcmVjdXJzaW9uLCBzaW1pbGFy IHRvIEtlcm1pdCdzIEZpbGUgQXR0cmlidXRlIHBhY2tldHMgKGNpcmNhIDE5ODQpLCBpdAorICAg aGFzIG5vdCB5ZXQgYXR0YWluZWQgUkZDIG9yIHN0YW5kYXJkIHN0YXR1cywgYW5kIHNlcnZlcnMg YXJlIG5vdCB5ZXQKKyAgIHdpZGVseSBhdmFpbGFibGUgdGhhdCBvZmZlciB0aGlzIGZlYXR1cmUu IEluIHRoZSBtZWFudGltZSwgdGhlCisgICBlZmZlY3RpdmVuZXNzIG9mIE1HRVQgL1JFQ1VSU0lW RSBkZXBlbmRzIG9uIHRoZSBGVFAgc2VydmVyCisgICBpbXBsZW1lbnRhdGlvbi4gSWYgdGhlIHNl cnZlciByZXR1cm5zIGEgcmVjdXJzaXZlIGxpc3QgaW4gcmVzcG9uc2UgdG8KKyAgIHRoZSBzdGFu ZGFyZCBOTFNUIGNvbW1hbmQgKHdob3NlIGJlaGF2aW9yIGlzIGlsbC1kZWZpbmVkKSwgS2VybWl0 J3MgRlRQCisgICBNR0VUIC9SRUNVUlNJVkUgY29tbWFuZCB1c2VzIGl0IHRvIHJlLWNyZWF0ZSB0 aGUgcmVtb3RlIGRpcmVjdG9yeSB0cmVlCisgICBsb2NhbGx5LiBJZiB0aGUgc2VydmVyIHN1cHBv cnRzIE1MU0QsIEMtS2VybWl0IDguMC4yMDYgYW5kIEtlcm1pdCA5NQorICAgMi4xIGFuZCBsYXRl ciBhcmUgYWJsZSB0byBzZW5zZSBpdCBhdXRvbWF0aWNhbGx5IGFuZCB1c2UgaXQsIGFzCisgICBk ZXNjcmliZWQgYmVsb3cgaW4gWzMyMF1TZWN0aW9uIDMuMTEuCisKKyAgIFRoZSAvQkVGT1JFOiwg L0FGVEVSOiwgL05PVC1CRUZPUkU6LCBhbmQgL05PVC1BRlRFUjogc3dpdGNoZXMgYXJlIG5vdAor ICAgYXZhaWxhYmxlIGZvciBkb3dubG9hZGluZyBiZWNhdXNlIG9mIHRoZSBjb25mdXNpb24gd2l0 aCB0aW1lem9uZXMuCisgICBXb3VsZCB0aGUgZ2l2ZW4gdGltZXMgYmUgaW4gdGhlIGxvY2FsIHRp bWV6b25lLCB0aGUgc2VydmVyJ3MgdGltZXpvbmUsCisgICBvciBHTVQ/IFRoZSBGVFAgc2VydmVy J3MgZGlyZWN0b3J5IGxpc3RpbmdzIHNob3cgaXRzIG93biBsb2NhbCB0aW1lcworICAgYnV0IHNp bmNlIHdlIGRvbid0IGtub3cgd2hhdCB0aW1lem9uZSB0aGUgc2VydmVyIGlzIGluLCB0aGVyZSdz IG5vIHdheQorICAgdG8gcmVjb25jaWxlIG91ciBsb2NhbCB0aW1lcyB3aXRoIHRoZSBzZXJ2ZXIn cy4gU2ltaWxhcmx5LCAvUEVSTUlTU0lPTlMKKyAgIGNhbid0IGJlIHByZXNlcnZlZCBpbiBkb3du bG9hZHMgYmVjYXVzZSBGVFAgcHJvdG9jb2wgcHJvdmlkZXMgbm8gbWVhbnMKKyAgIG9mIHF1ZXJ5 aW5nIHRoZSBzZXJ2ZXIgZm9yIGEgZmlsZSdzIHBlcm1pc3Npb24uCisKKyAgIFNvdXJjZS1maWxl IGRpc3Bvc2l0aW9uIHN3aXRjaGVzOgorCisgICAvREVMRVRFCisgICAgICAgICAgRWFjaCBmaWxl IHRoYXQgaXMgZG93bmxvYWRlZCBzdWNjZXNzZnVsbHkgaXMgdG8gYmUgZGVsZXRlZCBmcm9tCisg ICAgICAgICAgdGhlIHNlcnZlci4gUmVxdWlyZXMgdGhlIGFwcHJvcHJpYXRlIGZpbGUgYWNjZXNz IHJpZ2h0cyBvbiB0aGUKKyAgICAgICAgICBzZXJ2ZXIuCisKKyAgIC9TRVJWRVItUkVOQU1FLVRP OnRlbXBsYXRlCisgICAgICAgICAgQXNrcyB0aGUgc2VydmVyIHRvIHJlbmFtZSBlYWNoIChyZW1v dGUpIHNvdXJjZSBmaWxlIGltbWVkaWF0ZWx5CisgICAgICAgICAgYWZ0ZXIsIGFuZCBvbmx5IGlm LCBpdCBpcyBzZW50IGNvcnJlY3RseS4gU2VlIFszMjFdUFVUCisgICAgICAgICAgL1NFUlZFUi1S RU5BTUUtVE86IGZvciBkZXRhaWxzLgorCisgICBEZXN0aW5hdGlvbi1maWxlIGRpc3Bvc2l0aW9u IHN3aXRjaGVzOgorCisgICAvVE8tU0NSRUVOCisgICAgICAgICAgRGlzcGxheXMgdGhlIGluY29t aW5nIGZpbGUgb24gdGhlIHNjcmVlbiByYXRoZXIgdGhhbiBzdG9yaW5nIGl0CisgICAgICAgICAg b24gZGlzay4gSWYgdGhpcyBzd2l0Y2ggaXMgZ2l2ZW4sIHRoZSAvUkVOQU1FLVRPIGFuZCAvTU9W RS1UTworICAgICAgICAgIHN3aXRjaGVzIGFyZSBpZ25vcmVkLCB0aGUgZmlsZS10cmFuc2ZlciBk aXNwbGF5IGlzIHN1cHByZXNzZWQsCisgICAgICAgICAgYW5kIHRoZSBnaXZlbiBmaWxlKHMpIGlz L2FyZSBzaG93biBvbiB0aGUgc2NyZWVuLiBDYW4gYmUgdXNlZAorICAgICAgICAgIHdpdGggL0ZJ TFRFUiwgZS5nLgorCisgIGdldCAvdGV4dCAvdG8tc2NyZWVuIC9maWx0ZXI6bW9yZSBvb2ZhLnR4 dAorCisgICAgICAgICAgSW4gZmFjdCwgeW91IHNob3VsZCBhbHdheXMgdXNlIC9UTy1TQ1JFRU4g d2l0aCAvRklMVEVSIG9yCisgICAgICAgICAgL0NPTU1BTkQgd2hlbiB0aGUgY29tbWFuZCB3b3Vs ZCByZXN1bHQgaW4gZGlzcGxheWluZyB0aGUKKyAgICAgICAgICBpbmNvbWluZyBmaWxlIG9uIHRo ZSBzY3JlZW47IG90aGVyd2lzZSBDLUtlcm1pdCB3b3VsZCBoYXZlIG5vCisgICAgICAgICAgd2F5 IG9mIGtub3dpbmcgdG8gc3VwcHJlc3MgaXRzIGZpbGUgdHJhbnNmZXIgZGlzcGxheSAoc2luY2Ug aXQKKyAgICAgICAgICBjYW4ndCBiZSBleHBlY3RlZCB0byBrbm93IHdoYXQgdGhlIGNvbW1hbmQg b3IgZmlsdGVyIGRvZXMpLgorCisgICAvUkVOQU1FLVRPOnRlbXBsYXRlCisgICAgICAgICAgRWFj aCBmaWxlIHRoYXQgaXMgZG93bmxvYWRlZCBpcyB0byBiZSByZW5hbWVkIGFzIGluZGljYXRlZCBp ZgorICAgICAgICAgIGFuZCBvbmx5IGlmIGl0IHdhcyByZWNlaXZlZCBjb21wbGV0ZWx5IGFuZCB3 aXRob3V0IGVycm9yLiBUaGUKKyAgICAgICAgICB0ZW1wbGF0ZSBjYW4gYmUgbGl0ZXJhbCB0ZXh0 IG9yIGNhbiBjb250YWluIHZhcmlhYmxlcyB0aGF0IGFyZQorICAgICAgICAgIGV2YWx1YXRlZCBm b3IgZWFjaCBmaWxlLiBGb3IgTUdFVCwgdGhlIHRleHQgbXVzdCBjb250YWluCisgICAgICAgICAg dmFyaWFibGVzOyBmb3IgR0VUIGl0IGNhbiBiZSBhIGxpdGVyYWwgc3RyaW5nLiBUaGUgXHYoZmls ZW5hbWUpCisgICAgICAgICAgdmFyaWFibGUgY29udGFpbnMgdGhlIG5hbWUgb2YgdGhlIGN1cnJl bnQgZmlsZSwgc286CisKKyAgZnRwIG1nZXQgL3JlbmFtZS10bzpcdihmaWxlbmFtZSkub2sgKgor CisgICAgICAgICAgY2F1c2VzIGVhY2ggZmlsZSB0aGF0IGlzIHN1Y2Nlc3NmdWxseSBkb3dubG9h ZGVkIHRvIGhhdmUgIi5vayIKKyAgICAgICAgICBhcHBlbmRlZCB0byBpdHMgbmFtZS4gRm9yIGRl dGFpbHMgc2VlIFszMjJdU2VjdGlvbiA0LjEgb2YgdGhlCisgICAgICAgICAgWzMyM11DLUtlcm1p dCA3LjAgVXBkYXRlIE5vdGVzLgorCisgICAvTU9WRS1UTzp0ZXh0CisgICAgICAgICAgSnVzdCBs aWtlIC9SRU5BTUUtVE86LCBleGNlcHQgdGhlIHRleHQgZGVub3RlcyB0aGUgbmFtZSBvZiBhCisg ICAgICAgICAgZGlyZWN0b3J5IHRvIHdoaWNoIHN1Y2Nlc3NmdWxseSBkb3dubG9hZGVkIGZpbGVz IGFyZSB0byBiZQorICAgICAgICAgIG1vdmVkLiBJZiB0aGUgZGlyZWN0b3J5IGRvZXMgbm90IGV4 aXN0LCBpdCBpcyBjcmVhdGVkLgorCisgICBUaGUgZmlsZSB0cmFuc2ZlciBkaXNwbGF5IGRvZXMg bm90IHNob3cgdGhlIC9NT1ZFLVRPIG9yIC9SRU5BTUUtVE8KKyAgIHZhbHVlLCBzaW5jZSB0aGUg aW5jb21pbmcgZmlsZSBoYXMgbm90IHlldCBiZWVuIG1vdmVkIG9yIHJlbmFtZWQuCisKKzMuNi4y LiBGaWxlbmFtZSBDb2xsaXNpb25zCisKKyAgIFdoYXQgc2hvdWxkIGhhcHBlbiBpZiBhbiBpbmNv bWluZyBmaWxlIGhhcyB0aGUgc2FtZSBuYW1lIGFzIGFuIGV4aXN0aW5nCisgICBmaWxlIGluIHRo ZSBzYW1lIGRpcmVjdG9yeT8gQnkgZGVmYXVsdCwgS2VybWl0J3MgRklMRSBDT0xMSVNJT04gc2V0 dGluZworICAgYXBwbGllczogQkFDS1VQLCBSRU5BTUUsIFVQREFURSwgRElTQ0FSRCwgZXRjLCBh cyBkZXNjcmliZWQgaW4KKyAgIFszMjRdVXNpbmcgQy1LZXJtaXQuIEtlcm1pdCdzIGRlZmF1bHQg RklMRSBDT0xMSVNJT04gc2V0dGluZyBpcyBCQUNLVVAKKyAgIChyZW5hbWUgdGhlIGV4aXN0aW5n IGZpbGUgYW5kIHN0b3JlIHRoZSBpbmNvbWluZyBmaWxlIHVuZGVyIGl0cyBvd24KKyAgIG5hbWUp IGFuZCB0aGVyZWZvcmUgdGhpcyBpcyBhbHNvIHRoZSBkZWZhdWx0IEZUUCBjb2xsaXNpb24gYWN0 aW9uLgorCisgICBUaGUgbmFtZSB1bmRlciB3aGljaCBhbiBpbmNvbWluZyBmaWxlIGlzIHRvIGJl IHN0b3JlZCBpcyBkZXRlcm1pbmVkIGFzCisgICBmb2xsb3dzOgorCisgICAgICogSWYgYW4gYXMt bmFtZSB3YXMgZ2l2ZW4sIHRoZSBhcy1uYW1lIGlzIHVzZWQuIE90aGVyd2lzZToKKyAgICAgKiBJ ZiB0aGUgY2xpZW50IGFuZCBzZXJ2ZXIgcGxhdGZvcm1zIGFyZSBhbGlrZSBvciBbMzI1XUZUUCBG SUxFTkFNRVMKKyAgICAgICBpcyBzZXQgdG8gTElURVJBTCAob3IgdGhlIC9GSUxFTkFNRVM6TElU RVJBTCBzd2l0Y2ggd2FzIGdpdmVuIGZvcgorICAgICAgIHRoaXMgZG93bmxvYWQpLCB0aGUgaW5j b21pbmcgZmlsZW5hbWUgaXMgdXNlZCBsaXRlcmFsbHkuIE90aGVyd2lzZToKKyAgICAgKiBUaGUg aW5jb21pbmcgZmlsZW5hbWUgaXMgY29udmVydGVkIHRvIGEgZm9ybSB0aGF0IGlzIGZyaWVuZGx5 IHRvCisgICAgICAgdGhlIGxvY2FsIHBsYXRmb3JtLiBGb3IgVU5JWCwgZm9yIGV4YW1wbGUsIGlu Y29taW5nIGZpbGVuYW1lcyB0aGF0CisgICAgICAgYXJlIGFsbCB1cHBlcmNhc2UgKGFzIHRoZXkg bWlnaHQgYmUgZnJvbSwgc2F5LCBWTVMgb3IgYW4gSUJNCisgICAgICAgbWFpbmZyYW1lKSBhcmUg Y29udmVydGVkIHRvIGxvd2VyY2FzZS4KKworICAgSWYgdGhlIHJlc3VsdGluZyBuYW1lIGNvaW5j aWRlcyB3aXRoIHRoZSBuYW1lIG9mIGEgbG9jYWwgZmlsZSB0aGF0CisgICBhbHJlYWR5IGV4aXN0 cywgd2UgaGF2ZSBhIGZpbGVuYW1lIGNvbGxpc2lvbi4gQ29sbGlzaW9ucyBhcmUgaGFuZGxlZAor ICAgYWNjb3JkaW5nIHRvIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgY29sbGlzaW9uIGFjdGlvbjoK KworICAgU0VUIEZUUCBDT0xMSVNJT04geyBCQUNLVVAsIFJFTkFNRSwgVVBEQVRFLCBESVNDQVJE LCBBUFBFTkQsIE9WRVJXUklURQorICAgICAgICAgIH0KKyAgICAgICAgICBUaGlzIGVzdGFibGlz aGVzIGEgZmlsZW5hbWUgY29sbGlzaW9uIGZvciBGVFAsIHNlcGFyYXRlIGZyb20gdGhlCisgICAg ICAgICAgS2VybWl0IG9uZS4gVGhlIGluaXRpYWwgRlRQIGNvbGxpc2lvbiBzZXR0aW5nIGlzIGlu aGVyaXRlZCBmcm9tCisgICAgICAgICAgS2VybWl0J3MgRklMRSBDT0xMSVNJT04gc2V0dGluZyB3 aGVuIHRoZSBmaXJzdCBGVFAgY29tbWFuZCBpcworICAgICAgICAgIGdpdmVuLCBidXQgc3Vic2Vx dWVudCBjaGFuZ2VzIHRvIEtlcm1pdCdzIEZJTEUgQ09MTElTSU9OIHNldHRpbmcKKyAgICAgICAg ICBkbyBub3QgYWZmZWN0IHRoZSBGVFAgQ09MTElTSU9OIHNldHRpbmcuIFNIT1cgRlRQIHRlbGxz IHRoZQorICAgICAgICAgIGN1cnJlbnQgRlRQIENPTExJU0lPTiBzZXR0aW5nLgorCisgICBGVFAg R0VUIC9DT0xMSVNJT046e0JBQ0tVUCxSRU5BTUUsVVBEQVRFLERJU0NBUkQsQVBQRU5ELE9WRVJX UklURX0KKyAgICAgICAgICBPdmVycmlkZXMgdGhlIGN1cnJlbnQgRlRQIENPTExJU0lPTiBhY3Rp b24gZm9yIHRoaXMgZG93bmxvYWQKKyAgICAgICAgICBvbmx5LgorCisgICBGVFAgR0VUIC9VUERB VEUKKyAgICAgICAgICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gR0VUIC9DT0xMSVNJT046VVBEQVRF LCBhbmQgaXMgaW5jbHVkZWQgZm9yCisgICAgICAgICAgc3ltbWV0cnkgd2l0aCBQVVQgL1VQREFU RQorCisgICBGVFAgR0VUIC9VUERBVEUgYW5kIC9DT0xMSVNJT046VVBEQVRFIG1lYW4gdG8gZG93 bmxvYWQgb25seSB0aG9zZSBmaWxlcworICAgd2hvc2UgbW9kaWZpY2F0aW9uIGRhdGVzIG9uIHRo ZSBzZXJ2ZXIgYXJlIGxhdGVyIHRoYW4gdGhvc2Ugb24gdGhlCisgICBjbGllbnQuIERhdGUtdGlt ZSBjb21wYXJpc29ucyBhcmUgZG9uZSBpbiBDb29yZGluYXRlZCBVbml2ZXJzYWwgVGltZQorICAg KFVUQywgR01ULCBaVUxVKS4gVGhlIGNvbW1hbmQ6CisKKyAgICAgRlRQIE1HRVQgL0NPTExJU0lP TjpBUFBFTkQgL0FTLU5BTUU6bmV3ZmlsZW5hbWUgKi4qCisKKyAgIERvd25sb2FkcyBhbGwgbWF0 Y2hpbmcgcmVtb3RlIGZpbGVzIGludG8gYSBzaW5nbGUgbG9jYWwgZmlsZSAoaW4KKyAgIHdoYXRl dmVyIG9yZGVyIHRoZSBzZXJ2ZXIgc2VuZHMgdGhlbSkuCisKKzMuNi4zLiBSZWNvdmVyeQorCisg ICBSZWNvdmVyeSBpcyBhdmFpbGFibGUgZm9yIGRvd25sb2FkcyB0b28sIGJ1dCB0aGVyZSBhcmUg c29tZSBkaWZmZXJlbmNlcworICAgZnJvbSB0aGUgdXBsb2FkaW5nIGNhc2UgZGVzY3JpYmVkIGlu IFszMjZdU2VjdGlvbiAzLjUuMzoKKworICAgICAqIFRoZSB0cmFuc2ZlciBtdXN0IGJlIGluIEJJ TkFSWSBtb2RlLiBJdCBjYW4gbm90IGJlIGluIHRleHQgbW9kZSwKKyAgICAgICBldmVuIGlmIHRo ZSBGVFAgc2VydmVyIGlzIG9uIHRoZSBzYW1lIGtpbmQgb2YgcGxhdGZvcm0gYXMgS2VybWl0LAor ICAgICAgIGFuZCBldmVuIGlmIHRoZXJlIGlzIG5vIGNoYXJhY3Rlci1zZXQgdHJhbnNsYXRpb24u IFRoZSBvcmlnaW5hbAorICAgICAgIGRvd25sb2FkIG11c3QgYWxzbyBoYXZlIGJlZW4gaW4gYmlu YXJ5IG1vZGUuCisgICAgICogVGhlIEZUUCBzZXJ2ZXIgbXVzdCBzdXBwb3J0IHRoZSBSRVNUICgi cmVzdGFydCIpIGRpcmVjdGl2ZS4KKyAgICAgICBVbmZvcnR1bmF0ZWx5LCB0aGlzIGlzIG5vdCBh IHN0YW5kYXJkIGNvbW1hbmQ7IGF0IHRoaXMgd3JpdGluZywgaXQKKyAgICAgICBpcyBkZXNjcmli ZWQgb25seSBpbiBhbiBJbnRlcm5ldCBEcmFmdCwgbm90IGFuIFJGQyBvciBJbnRlcm5ldAorICAg ICAgIFN0YW5kYXJkLCBidXQgbmV2ZXJ0aGVsZXNzIGl0IGlzIGZvdW5kIGluIHNldmVyYWwgcG9w dWxhciBGVFAKKyAgICAgICBzZXJ2ZXJzLCBzdWNoIGFzIFszMjddUHJvRlRQRC4KKworICAgSGVy ZSdzIGhvdyBkb3dubG9hZCByZWNvdmVyeSB3b3JrczoKKworICAgICAqIEtlcm1pdCBjaGVja3Mg Zm9yIGNvbmZsaWN0aW5nIHN3aXRjaGVzLCBzdWNoIGFzIC9VUERBVEUsIC9DT01NQU5ELAorICAg ICAgIG9yIC9GSUxURVIuIElmIC9SRUNPVkVSIGlzIGdpdmVuIHdpdGggdGhlc2Ugc3dpdGNoZXMg YW4gZXJyb3IKKyAgICAgICBvY2N1cnMuCisgICAgICogVGhlIHByZXZhaWxpbmcgdHJhbnNmZXIg bW9kZSAoU0VUIEZUUCBUWVBFKSBtdXN0IGJlIEJJTkFSWS4gSWYgaXQKKyAgICAgICBpcyBub3Qs IHRoZSAvQklOQVJZIHN3aXRjaCBtdXN0IGhhdmUgYmVlbiBpbmNsdWRlZCB3aXRoIHRoZSBGVFAK KyAgICAgICBbTV1HRVQgY29tbWFuZC4KKworICAgSWYgdGhlIC9SRUNPVkVSIHN3aXRjaCBpcyBh Y2NlcHRlZCwgdGhlbiBmb3IgZWFjaCBzZWxlY3RlZCBmaWxlOgorCisgICAgICogQSBTSVpFIGNv bW1hbmQgaXMgc2VudCBmb3IgdGhlIGZpbGUgKHVzaW5nIGl0cyByZW1vdGUgbmFtZSkuIElmIHRo ZQorICAgICAgIHJlcGx5IGluZGljYXRlcyB0aGUgZmlsZSB3YXMgbm90IGZvdW5kLCBvciB0aGUg U0laRSBjb21tYW5kIHdhcyBub3QKKyAgICAgICB1bmRlcnN0b29kLCBvciBhbnkgb3RoZXIga2lu ZCBvZiBlcnJvciwgcmVjb3ZlcnkgaXMgY2FuY2VsZWQgKGkuZS4KKyAgICAgICB0aGUgZW50aXJl IGZpbGUgaXMgZG93bmxvYWRlZCkuCisgICAgICogSWYgdGhlIHNpemVzIG9mIHRoZSB0d28gZmls ZXMgYXJlIGlkZW50aWNhbCwgdGhlIGZpbGUgaXMgbm90IHNlbnQuCisgICAgICAgT3RoZXJ3aXNl OgorICAgICAqIEtlcm1pdCBzZW5kcyB0aGUgUkVTVCBkaXJlY3RpdmUgdG8gdGhlIHNlcnZlciwg aW5kaWNhdGluZyB0aGUgc2l6ZQorICAgICAgIG9mIHRoZSBsb2NhbCBmaWxlLiBJZiB0aGUgc2Vy dmVyIHJlc3BvbmRzIGFmZmlybWF0aXZlbHksIEtlcm1pdAorICAgICAgIG9wZW5zIHRoZSBsb2Nh bCBmaWxlIGluIGFwcGVuZCBtb2RlIGFuZCBhcHBlbmRzIHRoZSBpbmNvbWluZyBkYXRhCisgICAg ICAgdG8gaXQuIE90aGVyd2lzZSwgcmVjb3ZlcnkgaXMgY2FuY2VsZWQgYW5kIHRoZSBlbnRpcmUg ZmlsZSBpcworICAgICAgIGRvd25sb2FkZWQuCisKKyAgIFRoZSAvUkVDT1ZFUiBzd2l0Y2ggY2Fu IGJlIGluY2x1ZGVkIHdpdGggYW55IEZUUCBHRVQgb3IgTUdFVCBjb21tYW5kLAorICAgZXZlbiBp ZiBpdCBzcGVjaWZpZXMgYSBncm91cCBvZiBmaWxlcy4gVGhpcyBsZXRzIHlvdSByZXN1bWUgYW4K KyAgIGludGVycnVwdGVkIGJhdGNoIHRyYW5zZmVyIGZyb20gd2hlcmUgaXQgbGVmdCBvZmYuIFRo ZSBmaWxlcyB0aGF0IHdlcmUKKyAgIGFscmVhZHkgY29tcGxldGVseSBzZW50IGFyZSBza2lwcGVk LCB0aGUgZmlsZSB0aGF0IHdhcyBpbnRlcnJ1cHRlZCBpcworICAgcmVjb3ZlcmVkLCBhbmQgdGhl IHJlbWFpbmluZyBmaWxlcyBhcmUgdXBsb2FkZWQuIEJVVC4uLiB1bmxpa2Ugd2l0aAorICAgdXBs b2FkaW5nLCB3aGVyZSB0aGlzIGNhbiBiZSBkb25lIHdpdGggYW55IG1peHR1cmUgb2YgdGV4dCBh bmQgYmluYXJ5CisgICBmaWxlcywgd2hlbiBkb3dubG9hZGluZywgaXQgY2FuIG9ubHkgYmUgZG9u ZSBpZiBhbGwgdGhlIGZpbGVzIGFyZQorICAgYmluYXJ5LgorCisgICBJdCBkb2Vzbid0IG1hdHRl ciBob3cgdGhlIG9yaWdpbmFsIHBhcnRpYWwgZmlsZSB3YXMgZG93bmxvYWRlZCAtLSBGVFAsCisg ICBLZXJtaXQsIEhUVFAsIFptb2RlbSwgZXRjOiBhcyBsb25nIGFzIHRoZSBwcmVjb25kaXRpb25z IGFyZSBtZXQsIGl0IGNhbgorICAgYmUgcmVjb3ZlcmVkIHdpdGggRlRQIFtNXUdFVCAvUkVDT1ZF Uiwgb3IgZm9yIHRoYXQgbWF0dGVyIGFsc28gd2l0aCBHRVQKKyAgIC9SRUNPVkVSICh1c2luZyBL ZXJtaXQgcHJvdG9jb2wpLgorCisgICBbIFszMjhdVG9wIF0gWyBbMzI5XUZUUCBUb3AgXSBbIFsz MzBdQy1LZXJtaXQgSG9tZSBdIFsgWzMzMV1LZXJtaXQgSG9tZQorICAgXQorCiszLjcuIFRyYW5z bGF0aW5nIENoYXJhY3RlciBTZXRzCisKKyAgIEEgcG9zc2libHkgdW5pcXVlIGZlYXR1cmUgb2Yg S2VybWl0J3MgRlRQIGNsaWVudCBpcyBpdHMgYWJpbGl0eSB0bworICAgY29udmVydCBjaGFyYWN0 ZXIgc2V0cyB3aGVuIHRyYW5zZmVycmluZyBmaWxlcyBpbiB0ZXh0IG1vZGUsCisgICBpbmRlcGVu ZGVudCBvZiB0aGUgY2FwYWJpbGl0aWVzIG9mIHRoZSBGVFAgc2VydmVyLCBhcyB3ZWxsIGFzIHRv CisgICB0cmFuc2xhdGUgdGhlIGNoYXJhY3RlciBzZXRzIG9mIGZpbGVuYW1lcyByZWdhcmRsZXNz IG9mIHRyYW5zZmVyIG1vZGUuCisgICBGb3IgY29tcGF0aWJpbGl0eSB3aXRoIGV4aXN0aW5nIEZU UCBjbGllbnRzLCBhbmQgYmVjYXVzZSB0aGVyZSBpcyBhCisgICBjZXJ0YWluIHBlcmZvcm1hbmNl IHBlbmFsdHksIEtlcm1pdCB3b24ndCBkbyB0aGlzIHVubGVzcyB5b3UgYXNrIGZvcgorICAgaXQu IElmIHlvdSBlbmFibGUgdGhpcyBmZWF0dXJlLCB5b3UgbmVlZCB0byBpbmZvcm0gS2VybWl0IG9m IHRoZQorICAgY2hhcmFjdGVyIHNldCAodG8gYmUpIHVzZWQgb24gdGhlIHNlcnZlciBhbmQgaW4g c29tZSBjYXNlcyAoZXhwbGFpbmVkCisgICBiZWxvdykgYWxzbyB0aGUgbG9jYWwgZmlsZSBjaGFy YWN0ZXIgc2V0LiBUaGlzIGRpc2N1c3Npb24gYXNzdW1lcyB5b3UKKyAgIGtub3cgYSBiaXQgYWJv dXQgY2hhcmFjdGVyIHNldHMgKGFzIHlvdSBtdXN0IGlmIHlvdSBoYXZlIHRvIHVzZSB0aGVtKTsK KyAgIHNlZSBDaGFwdGVyIDE2IG9mIFszMzJdVXNpbmcgQy1LZXJtaXQgZm9yIGEgZGV0YWlsZWQg dHJlYXRtZW50LiBUaGUKKyAgIEtlcm1pdCBjb21tYW5kcyBmb3IgRlRQIGNoYXJhY3Rlci1zZXQg Y29udmVyc2lvbiBhcmU6CisKKyAgIFNFVCBGVFAgQ0hBUkFDVEVSLVNFVC1UUkFOU0xBVElPTiB7 IE9OLCBPRkYgfQorICAgICAgICAgIFdoZXRoZXIgdG8gdHJhbnNsYXRlIGNoYXJhY3RlciBzZXRz IHdoZW4gdHJhbnNmZXJyaW5nIHRleHQgZmlsZXMKKyAgICAgICAgICB3aXRoIEZUUC4gT0ZGIGJ5 IGRlZmF1bHQuIFNldCB0aGlzIHRvIE9OIHRvIGVuYWJsZSBjaGFyYWN0ZXItc2V0CisgICAgICAg ICAgdHJhbnNsYXRpb24gZm9yIHN1YnNlcXVlbnQgRlRQIHVwbG9hZHMgYW5kIGRvd25sb2Fkcy4K KworICAgU0VUIEZUUCBTRVJWRVItQ0hBUkFDVEVSLVNFVCBbMzMzXW5hbWUKKyAgICAgICAgICBU ZXh0IGNoYXJhY3RlciBzZXQgKHRvIGJlKSB1c2VkIGJ5IHRoZSBzZXJ2ZXIuIE1vc3QgRlRQIHNl cnZlcnMKKyAgICAgICAgICBhcmUgaWdub3JhbnQgb2YgY2hhcmFjdGVyIHNldHMsIHNvIGFsbCB0 cmFuc2xhdGlvbnMgYXJlIGRvbmUKKyAgICAgICAgICB1bmlsYXRlcmFsbHkgYnkgS2VybWl0J3Mg RlRQIGNsaWVudC4gVGhpcyBtZWFucyB0aGF0IHdoZW4KKyAgICAgICAgICBkb3dubG9hZGluZyBm aWxlcywgeW91IG11c3Qga25vdyBpbiBhZHZhbmNlIHRoZSBjaGFyYWN0ZXItc2V0CisgICAgICAg ICAgdXNlZCBpbiB0aGUgZmlsZXMgeW91IGFyZSBkb3dubG9hZGluZyAoYW5kIGluIHRoZWlyIG5h bWVzKS4gV2hlbgorICAgICAgICAgIHVwbG9hZGluZywgeW91IG11c3Qgc3BlY2lmeSB0aGUgY2hh cmFjdGVyLXNldCB0byB3aGljaCBsb2NhbAorICAgICAgICAgIGZpbGVuYW1lcyBhbmQgdGV4dC1m aWxlIGNvbnRlbnRzIGFyZSB0byBiZSB0cmFuc2xhdGVkIGZvcgorICAgICAgICAgIHRyYW5zbWlz c2lvbiB0byB0aGUgc2VydmVyLiBJZiB5b3UgU0VUIEZUUAorICAgICAgICAgIENIQVJBQ1RFUi1T RVQtVFJBTlNMQVRJT04gT04gYnV0IGRvIG5vdCBzcGVjaWZ5IGFuIEZUUAorICAgICAgICAgIFNF UlZFUi1DSEFSQUNURVItU0VULCBbMzM0XVVURjggaXMgdXNlZCwgc2luY2UgdGhpcyBpcyB0aGUg bmV3CisgICAgICAgICAgSW50ZXJuZXQgc3RhbmRhcmQgaW50ZXJuYXRpb25hbCBjaGFyYWN0ZXIg c2V0OyBpdCBpcyB1cHdhcmRzCisgICAgICAgICAgY29tcGF0aWJsZSB3aXRoIEFTQ0lJIGFuZCBp dCBlbmNvbXBhc3NlcyBtb3N0IHdyaXR0ZW4gbGFuZ3VhZ2VzCisgICAgICAgICAgYW5kIHRoZXJl Zm9yZSBkb2VzIG5vdCBmYXZvciBhbnkgcGFydGljdWxhciBncm91cCBvZiBwZW9wbGUsIGFzCisg ICAgICAgICAgYW55IG90aGVyIGRlZmF1bHQgd291bGQgZG8uIElmIHlvdSBTRVQgRlRQIFNFUlZF Ui1DSEFSQUNURVItU0VUCisgICAgICAgICAgdG8gc29tZXRoaW5nIChhbnl0aGluZykgd2hlbiBG VFAgQ0hBUkFDVEVSLVNFVCBUUkFOU0xBVElPTiBpcworICAgICAgICAgIE9GRiwgdGhpcyBhbHNv IHNldHMgdGhlIGxhdHRlciBPTi4KKworICAgU0VUIEZJTEUgQ0hBUkFDVEVSLVNFVCBbMzM1XW5h bWUKKyAgICAgICAgICBUaGlzIGlzIHRoZSByZWd1bGFyIEtlcm1pdCAobm9uLUZUUC1zcGVjaWZp YykgY29tbWFuZCBmb3IKKyAgICAgICAgICBpZGVudGlmeWluZyB0aGUgY2hhcmFjdGVyIHNldCAo dG8gYmUpIHVzZWQgaW4gbG9jYWwgdGV4dCBmaWxlcworICAgICAgICAgIGFuZCBmaWxlbmFtZXMu CisKKyAgIFRPIFJFSVRFUkFURTogSWYgeW91IFNFVCBGVFAgQ0hBUkFDVEVSLVNFVCBUUkFOU0xB VElPTiBPTiBidXQgZG8gbm90CisgICBzcGVjaWZ5IGFuIEZUUCBTRVJWRVItQ0hBUkFDVEVSLVNF VCwgb3V0Ym91bmQgdGV4dCBmaWxlcyBhcmUgY29udmVydGVkCisgICB0byBVVEYtOCBhbmQgaW5i b3VuZCB0ZXh0IGZpbGVzIGFyZSBhc3N1bWVkIHRvIGJlIFVURi04LiBJZiB0aGlzIGlzIG5vdAor ICAgYXBwcm9wcmlhdGUsIGJlIHN1cmUgdG8gYWxzbyBzcGVjaWZ5IHRoZSBkZXNpcmVkIEZUUAor ICAgU0VSVkVSLUNIQVJBQ1RFUi1TRVQuCisKKyAgIFlvdSBjYW4gdXNlICJzcGVjaWFsIiAobm9u LUFTQ0lJKSBjaGFyYWN0ZXJzIGluIGZpbGVuYW1lcyBpbiBhbGwgdGhlCisgICBjbGllbnQgLyBz ZXJ2ZXIgZmlsZSBtYW5hZ2VtZW50IGNvbW1hbmRzIChGVFAgTUtESVIsIFJNRElSLCBESVJFQ1RP UlksCisgICBWRElSRUNUT1JZLCBERUxFVEUsIGV0YyksIGFuZCBhbHNvIGluIGZpbGUtdHJhbnNm ZXIgY29tbWFuZHMuIFdoZW4KKyAgIGdpdmluZyBjb21tYW5kcyBzdWNoIGFzIEZUUCBESVIgKFJE SVIpIGFuZCBGVFAgUFdEIChSUFdEKSwgdGhlIHJlcGx5IGlzCisgICB0cmFuc2xhdGVkIHRvbywg c28geW91IGNhbiByZWFkIGl0LiBJbiB0aGlzIGV4YW1wbGUsIHRoZSBjbGllbnQgYW5kCisgICBz ZXJ2ZXIgdXNlIGVudGlyZWx5IGRpZmZlcmVudCBjb2RlcyB0byByZXByZXNlbnQgdGhlIHNwZWNp YWwgY2hhcmFjdGVycworICAgb2YgR2VybWFuOgorCisgIEMtS2VybWl0PiBmdHAgeHl6Y29ycC5k ZSAvYW5vbnltb3VzCisgIEMtS2VybWl0PiBzZXQgZnRwIHNlcnZlci1jaGFyYWN0ZXItc2V0IGxh dGluMQorICBDLUtlcm1pdD4gc2V0IGZpbGUgY2hhcmFjdGVyLXNldCBnZXJtYW4KKyAgQy1LZXJt aXQ+IHJjZCBTdO+/vWR0ZQorICBDLUtlcm1pdD4gcnB3ZAorICAiL3B1Yi9mdHAvU3Tvv71kdGUg aXMgY3VycmVudCBkaXJlY3RvcnkiCisgIEMtS2VybWl0PiByZGlyCisgIC1ydy1ydy0tLS0gIDEg b2xhZiAgICAgNTQwMTggSmFuICA2IDE3OjU4IEFkZW5i77+9dHRlbC50eHQKKyAgLXJ3LXJ3LS0t LSAgMSB1cnN1bGEgICAgIDM3MyBKYW4gIDUgMTU6MTkgQe+/vWxhci50eHQKKyAgLXJ3LXJ3LS0t LSAgMSBnaXNiZXJ0ICAgIDQ4MiBKYW4gIDUgMTU6MjAgQmxvd2F0ei50eHQKKyAgLXJ3LXJ3LS0t LSAgMSBndWRydW4gICAgIDEyNCBKYW4gIDUgMTU6MTkgQu+/vWJsaW5nZW4udHh0CisgIC1ydy1y dy0tLS0gIDEgb2xnYSAgICAgMTQzNDggSmFuICA3IDE0OjIzIEvvv71sbi50eHQKKworICAgV2hl biB0aGUgY2xpZW50IGFuZCBzZXJ2ZXIgZmlsZSBzeXN0ZW1zIHVzZSBkaWZmZXJlbnQgY2hhcmFj dGVyIHNldHMsCisgICB5b3Ugc2hvdWxkIHRha2UgY2FyZSB0byB1c2Ugb25seSB0aG9zZSBjaGFy YWN0ZXJzIHRoYXQgdGhlIHR3byBzZXRzCisgICBzaGFyZSBpbiBjb21tb24gd2hlbiBjcmVhdGlu ZyBmaWxlbmFtZXMgb3IgdGV4dC1maWxlIGNvbnRlbnRzLiBGb3IKKyAgIGV4YW1wbGUsIFBDIGNv ZGUgcGFnZXMgY29udGFpbiBhIGxvdCBsaW5lLSBhbmQgYm94LWRyYXdpbmcgY2hhcmFjdGVycywK KyAgIGFuZCBzb21ldGltZXMgInNtYXJ0IHF1b3RlcyIsIGV0YywgdGhhdCBhcmUgbm90IGZvdW5k IGluIElTTyBzdGFuZGFyZAorICAgOC1iaXQgY2hhcmFjdGVyIHNldHMuIFlvdSBzaG91bGQgYmUg ZXNwZWNpYWxseSBjYXJlZnVsIHRvIGF2b2lkIHVzaW5nCisgICBzdWNoIGNoYXJhY3RlcnMgaW4g ZmlsZW5hbWVzLgorCisgICBbIFszMzZdQy1LZXJtaXQgQ2hhcmFjdGVyIFNldHMgXQorCiszLjcu MS4gQ2hhcmFjdGVyIFNldHMgYW5kIFVwbG9hZGluZworCisgICBLZXJtaXQncyBQVVQgYW5kIE1Q VVQgY29tbWFuZHMgaW5jbHVkZSBmdWxsIGZpbGUtc2Nhbm5pbmcgY2FwYWJpbGl0aWVzLAorICAg YXMgZGVzY3JpYmVkIGluIFszMzddU2VjdGlvbiA0LiBUaHVzIGlmIEZUUCBDSEFSQUNURVItU0VU LVRSQU5TTEFUSU9OCisgICBpcyBPTiBhbmQgeW91ciBjaGFyYWN0ZXItc2V0IGFzc29jaWF0aW9u cyBhcmUgc2V0IHVwIGFwcHJvcHJpYXRlbHksCisgICBLZXJtaXQgYXV0b21hdGljYWxseSBzd2l0 Y2hlcyBvbiBhIHBlci1maWxlIGJhc2lzIGJldHdlZW4gdGV4dCBhbmQKKyAgIGJpbmFyeSBtb2Rl LCBhbmQgZm9yIGVhY2ggdGV4dCBmaWxlIGJldHdlZW4geW91ciBjaG9zZW4gNy1iaXQgdGV4dAor ICAgY2hhcmFjdGVyIHNldCAoZS5nLiBBU0NJSSBvciBJU08gNjQ2IEdlcm1hbiksIDgtYml0IHRl eHQgKGUuZy4gTGF0aW4tMQorICAgb3IgSmFwYW5lc2UgRVVDKSwgVUNTLTIsIGFuZCBVVEYtOCwg YW5kIGNvbnZlcnRzIGVhY2ggb2YgdGhlc2UKKyAgIGF1dG9tYXRpY2FsbHkgdG8gdGhlIHNlcnZl ciBjaGFyYWN0ZXItc2V0LCBhbmQgZnVydGhlcm1vcmUKKyAgIGF1dG9tYXRpY2FsbHkgZGlmZmVy ZW50aWF0ZXMgYmV0d2VlbiB0aGUgTGl0dGxlIGFuZCBCaWcgRW5kaWFuIGZvcm1zIG9mCisgICBV Q1MtMiwgYWx3YXlzIHNlbmRpbmcgaW4gQmlnIEVuZGlhbiBmb3JtLgorCisgICAgIFdBUk5JTkc6 IEl0IGlzIG5vdCBhZHZpc2FibGUgdG8gdXNlIFVDUy0yIChvciBhbnkgVW5pY29kZQorICAgICB0 cmFuc2Zvcm1hdGlvbiBvdGhlciB0aGFuIFVURi04KSAib24gdGhlIHdpcmUiLCBpLmUuIGFzIGEg c2VydmVyCisgICAgIGNoYXJhY3RlciBzZXQuIE1vc3QgRlRQIHNlcnZlcnMgYXJlIG5vdCBhYmxl IHRvIGNvcGUgd2l0aCBpdCwgc2luY2UKKyAgICAgaXQgY29udGFpbnMgbG90cyBvZiAwIChOVUwp IGNoYXJhY3RlcnMuIElmIHlvdSBkbyB1c2UgaXQsIEtlcm1pdAorICAgICBkb2VzIG5vdCB0cmFu c2xhdGUgZmlsZW5hbWVzIHRvIG9yIGZyb20gVUNTLTIsIGZvciByZWFzb25zIHdlbGwKKyAgICAg a25vd24gdG8gQyBwcm9ncmFtbWVycyAoZm9yIGV4YW1wbGUsIFVOSVggQVBJcyBhc3N1bWUgZmls ZW5hbWUKKyAgICAgc3RyaW5ncyBhcmUgTlVMLXRlcm1pbmF0ZWQpLiBbMzM4XVVURi04IGlzIHRo ZSBwcmVmZXJyZWQgKGFuZAorICAgICBzdGFuZGFyZCkgVW5pY29kZSBmb3JtYXQgZm9yIHRoZSBJ bnRlcm5ldC4KKworICAgRlRQIGNoYXJhY3Rlci1zZXQgdHJhbnNsYXRpb25zIGRpZmZlciBmcm9t IHRoZSByZWd1bGFyIEtlcm1pdCBvbmVzIGJ5CisgICBub3QgcmVzdHJpY3RpbmcgdHJhbnNsYXRp b25zIHRvIGEgZmlsZS1jaGFyYWN0ZXItc2V0IC8KKyAgIHRyYW5zZmVyLWNoYXJhY3Rlci1zZXQg cGFpci4gWW91IGNhbiBoYXZlIEtlcm1pdCdzIEZUUCBjbGllbnQgdHJhbnNsYXRlCisgICBiZXR3 ZWVuIGFueSBwYWlyIG9mIGNoYXJhY3RlciBzZXRzIGl0IGtub3dzIGFib3V0LiBZb3UgY2FuIHNl ZSB0aGUgbGlzdAorICAgb2Ygc3VwcG9ydGVkIGNoYXJhY3RlciBzZXRzIGJ5IHR5cGluZyBlaXRo ZXIgb2YgdGhlIGZvbGxvd2luZzoKKworICBzZXQgZnRwIHNlcnZlci1jaGFyYWN0ZXItc2V0ID8K KyAgc2V0IGZpbGUgY2hhcmFjdGVyLXNldCA/CisKKyAgIEEgdHlwaWNhbCBsaXN0IGxvb2tzIGxp a2UgdGhpcyAoWzMzOV1DTElDSyBIRVJFIGZvciBhbiBleHBsYW5hdGlvbiBvZgorICAgdGhlIG5h bWVzKToKKworICBDLUtlcm1pdD5zZXQgZmlsZSBjaGFyID8gT25lIG9mIHRoZSBmb2xsb3dpbmc6 CisgICBhc2NpaSAgICAgICAgICAgIGNwODY5LWdyZWVrICAgICAgIGhlYnJldy03ICAgICAgICAg bWF6b3ZpYS1wYworICAgYnJpdGlzaCAgICAgICAgICBjeXJpbGxpYy1pc28gICAgICBoZWJyZXct aXNvICAgICAgIG5leHQtbXVsdGluYXRpb25hbAorICAgYnVsZ2FyaWEtcGMgICAgICBkYW5pc2gg ICAgICAgICAgICBocC1yb21hbjggICAgICAgIG5vcndlZ2lhbgorICAgY2FuYWRpYW4tZnJlbmNo ICBkZWMta2FuamkgICAgICAgICBodW5nYXJpYW4gICAgICAgIHBvcnR1Z3Vlc2UKKyAgIGNwMTI1 MCAgICAgICAgICAgZGVjLW11bHRpbmF0aW9uYWwgaXNvMjAyMmpwLWthbmppICBzaGlmdC1qaXMt a2FuamkKKyAgIGNwMTI1MS1jeXJpbGxpYyAgZGctaW50ZXJuYXRpb25hbCAgaXRhbGlhbiAgICAg ICAgICBzaG9ydC1rb2kKKyAgIGNwMTI1MiAgICAgICAgICAgZHV0Y2ggICAgICAgICAgICAgamlz Ny1rYW5qaSAgICAgICBzcGFuaXNoCisgICBjcDQzNyAgICAgICAgICAgIGVsb3Q5MjctZ3JlZWsg ICAgIGtvaTggICAgICAgICAgICAgc3dlZGlzaAorICAgY3A4NTAgICAgICAgICAgICBlbG90OTI4 LWdyZWVrICAgICBrb2k4ciAgICAgICAgICAgIHN3aXNzCisgICBjcDg1MiAgICAgICAgICAgIGV1 Yy1qcCAgICAgICAgICAgIGtvaTh1ICAgICAgICAgICAgdWNzMgorICAgY3A4NTUtY3lyaWxsaWMg ICBmaW5uaXNoICAgICAgICAgICBsYXRpbjEtaXNvICAgICAgIHV0ZjgKKyAgIGNwODU4ICAgICAg ICAgICAgZnJlbmNoICAgICAgICAgICAgbGF0aW4yLWlzbworICAgY3A4NjItaGVicmV3ICAgICBn ZXJtYW4gICAgICAgICAgICBsYXRpbjktaXNvCisgICBjcDg2Ni1jeXJpbGxpYyAgIGdyZWVrLWlz byAgICAgICAgIG1hY2ludG9zaC1sYXRpbgorICBDLUtlcm1pdD4KKworICAgVGh1cyB5b3UgY2Fu IHRyYW5zbGF0ZSBub3Qgb25seSBiZXR3ZWVuIHByaXZhdGUgc2V0cyAobGlrZSBQQyBjb2RlCisg ICBwYWdlcykgYW5kIHN0YW5kYXJkIG9uZXMgKGxpa2UgTGF0aW4tMSkgYXMgaW4gS2VybWl0IHBy b3RvY29sLCBidXQgYWxzbworICAgYmV0d2VlbiBhbnkgZ2l2ZW4gcGFpciBvZiBwcml2YXRlIHNl dHMgKGUuZy4gQ1A4NTIgYW5kIE1hem92aWEpLiBBbGwKKyAgIGNvbnZlcnNpb25zIGdvIHRocm91 Z2ggVW5pY29kZSBhcyB0aGUgaW50ZXJtZWRpYXRlIGNoYXJhY3RlciBzZXQsCisgICByZXN1bHRp bmcgaW4gYSBtaW5pbXVtIG9mIGNoYXJhY3RlciBsb3NzLCBzaW5jZSBVbmljb2RlIGlzIGEgc3Vw ZXJzZXQKKyAgIG9mIGFsbCBvdGhlciBjaGFyYWN0ZXIgc2V0cyBrbm93biB0byBLZXJtaXQuCisK KyAgIEluIGFkZGl0aW9uIHRvIHRoZSBTRVQgY29tbWFuZHMgbGlzdGVkIGFib3ZlLCB0aGUgRlRQ IFBVVCBhbmQgTVBVVAorICAgY29tbWFuZHMgaW5jbHVkZSBzd2l0Y2hlcyB0aGF0IGFwcGx5IG9u bHkgdG8gdGhlIGN1cnJlbnQgY29tbWFuZDoKKworICAgL0xPQ0FMLUNIQVJBQ1RFUi1TRVQ6bmFt ZQorICAgL1NFUlZFUi1DSEFSQUNURVItU0VUOm5hbWUKKyAgICAgICAgICBVc2UgdGhlc2Ugc3dp dGNoZXMgdG8gZm9yY2UgYSBwYXJ0aWN1bGFyIHRyYW5zbGF0aW9uLiBUaGVzZQorICAgICAgICAg IHN3aXRjaGVzIG92ZXJyaWRlIHRoZSBnbG9iYWwgRlRQIENIQVJBQ1RFUi1TRVQtVFJBTlNMQVRJ T04gYW5kCisgICAgICAgICAgU0VSVkVSLUNIQVJBQ1RFUi1TRVQgc2V0dGluZ3MgYW5kIGFsc28g Y2hhcmFjdGVyLXNldAorICAgICAgICAgIGRpZmZlcmVudGlhdGlvbiBieSBmaWxlIHNjYW5uaW5n IGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIFBVVCBvcgorICAgICAgICAgIE1QVVQgY29tbWFuZC4g VGhlIGZpbGUgc2NhbiBpcyBzdGlsbCBwZXJmb3JtZWQsIGhvd2V2ZXIsIHRvCisgICAgICAgICAg ZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGZpbGUgaXMgdGV4dCBvciBiaW5hcnk7IHRodXMgdGhlc2UK KyAgICAgICAgICBzd2l0Y2hlcyBkbyBub3QgYWZmZWN0IGJpbmFyeSBmaWxlcyB1bmxlc3MgeW91 IGFsc28gaW5jbHVkZSB0aGUKKyAgICAgICAgICAvVEVYVCBzd2l0Y2ggdG8gZm9yY2UgYWxsIGZp bGVzIHRvIGJlIHRyZWF0ZWQgYXMgdGV4dC4KKworICAgSW4gb3RoZXIgd29yZHMsIGlmIHlvdSBp bmNsdWRlIG9uZSBvciBib3RoIG9mIHRoZXNlIHN3aXRjaGVzIHdpdGggYSBQVVQKKyAgIG9yIE1Q VVQgY29tbWFuZCwgdGhleSBhcmUgdXNlZC4gU2ltaWxhcmx5LCB0aGUgL1RSQU5TUEFSRU5UIHN3 aXRjaAorICAgZGlzYWJsZXMgY2hhcmFjdGVyLXNldCB0cmFuc2xhdGlvbiBmb3IgdGhlIFBVVCBv ciBNUFVUIGNvbW1hbmQgZGVzcGl0ZQorICAgdGhlIHByZXZhaWxpbmcgRlRQIENIQVJBQ1RFUi1T RVQtVFJBTlNMQVRJT04gYW5kIFNFUlZFUi1DSEFSQUNURVItU0VUCisgICBzZXR0aW5ncy4KKwor ICAgV2hlbiB1cGxvYWRpbmcsIHRoZSBGSUxFIENIQVJBQ1RFUi1TRVQgc2V0dGluZyBpcyBpZ25v cmVkIHVubGVzcyB5b3UKKyAgIGhhdmUgZm9yY2VkIEtlcm1pdCBub3QgdG8gWzM0MF1zY2FuIGxv Y2FsIGZpbGVzIGJ5IGluY2x1ZGluZyBhIC9URVhUIG9yCisgICAvQklOQVJZIHN3aXRjaCB3aXRo IHlvdXIgW01dUFVUIGNvbW1hbmQsIG9yIGJ5IGRpc2FibGluZyBhdXRvbWF0aWMKKyAgIHRleHQv YmluYXJ5IHN3aXRjaGluZyBpbiBzb21lIG90aGVyIHdheS4KKworICAgRXhhbXBsZXM6CisKKyAg ICAxLiBTdXBwb3NlIHlvdSBoYXZlIGEgQ1A4NTIgKEVhc3QgRXVyb3BlYW4pIHRleHQgZmlsZSB0 aGF0IHlvdSB3YW50IHRvCisgICAgICAgdXBsb2FkIGFuZCBzdG9yZSBpbiBJU08gTGF0aW4gQWxw aGFiZXQgMiBlbmNvZGluZzoKKyAgZnRwIHB1dCAvbG9jYWwtY2hhcjpjcDg1MiAvc2VydmVyLWNo YXI6bGF0aW4yIG1hZ3lhci50eHQKKworICAgIDIuIFN1cHBvc2UgeW91IGFsd2F5cyB3YW50IHlv dXIgdGV4dCBmaWxlcyBjb252ZXJ0ZWQgdG8gTGF0aW4tMiB3aGVuCisgICAgICAgdXBsb2FkaW5n IHdpdGggRlRQLiBUaGVuIHB1dDoKKyAgc2V0IGZ0cCBzZXJ2ZXItY2hhcmFjdGVyLXNldCBsYXRp bjIKKworICAgICAgIGluIHlvdXIgS2VybWl0IGN1c3RvbWl6YXRpb24gZmlsZSwgYW5kIHRoZW4g eW91IGNhbiBvbWl0IHRoZQorICAgICAgIC9TRVJWRVItQ0hBUkFDVEVSLVNFVDogc3dpdGNoIGZy b20geW91ciBGVFAgUFVUIGNvbW1hbmRzOgorICBmdHAgcHV0IC9sb2NhbC1jaGFyOmNwODUyIG1h Z3lhci50eHQKKworICAgIDMuIE5vdyBzdXBwb3NlIHRoYXQgYWxsIHRoZSB0ZXh0IGZpbGVzIG9u IHlvdXIgUEMgYXJlIHdyaXR0ZW4gaW4KKyAgICAgICBIdW5nYXJpYW4sIGJ1dCB0aGV5IGhhdmUg YSB2YXJpZXR5IG9mIGVuY29kaW5ncywgYW5kIHlvdSBkb24ndCB3YW50CisgICAgICAgdG8gaGF2 ZSB0byBpbmNsdWRlIHRoZSAvTE9DQUwtQ0hBUkFDVEVSLVNFVDogc3dpdGNoIG9uIGV2ZXJ5IEZU UAorICAgICAgIFBVVCBjb21tYW5kLCBvciAobW9yZSB0byB0aGUgcG9pbnQpIHlvdSB3YW50IHRv IGJlIGFibGUgdG8gc2VuZCBhCisgICAgICAgbWl4dHVyZSBvZiB0aGVzZSBmaWxlcyBhbGwgYXQg b25jZS4gUHV0IHRoZXNlIGNvbW1hbmRzIGluIHlvdXIKKyAgICAgICBLZXJtaXQgY3VzdG9taXph dGlvbiBmaWxlOgorICBzZXQgZnRwIHNlcnZlci1jaGFyYWN0ZXItc2V0IGxhdGluMiAgICAgICAg ICAgIDsgSVNPIDg4NTktMgorICBzZXQgZmlsZSBkZWZhdWx0IDctYml0LWNoYXJhY3Rlci1zZXQg aHVuZ2FyaWFuIDsgSVNPIDY0NiBIdW5nYXJpYW4KKyAgc2V0IGZpbGUgZGVmYXVsdCA4LWJpdC1j aGFyYWN0ZXItc2V0IGNwODUyICAgICA7IFBDIEVhc3QgRXVyb3BlYW4gQ29kZSBQYWdlCisKKyAg ICAgICBhbmQgbm93IFBVVCBhbmQgTVBVVCB3aWxsIGF1dG9tYXRpY2FsbHkgZGV0ZWN0IGFuZCBz d2l0Y2ggYW1vbmcgSVNPCisgICAgICAgNjQ2IEh1bmdhcmlhbiwgQ29kZSBQYWdlIDg1MiwgVVRG LTgsIGFuZCBVQ1MtMiBlbmNvZGluZ3MsCisgICAgICAgdHJhbnNsYXRpbmcgZWFjaCBvbmUgdG8g TGF0aW4tMiBmb3IgdXBsb2FkaW5nOgorICBmdHAgcHV0ICoudHh0CisKKyAgIEFuZCBzaW5jZSBi aW5hcnkgZmlsZXMgYXJlIGFsc28gZGV0ZWN0ZWQgYXV0b21hdGljYWxseSwgdGhlIGxhdHRlciBj YW4KKyAgIGJlIHNpbXBsaWZpZWQgdG86CisKKyAgZnRwIHB1dCAqCisKKyAgIGV2ZW4gd2hlbiAi KiIgbWF0Y2hlcyBhIGRpdmVyc2UgY29sbGVjdGlvbiBvZiBiaW5hcnkgYW5kIHRleHQgZmlsZXMs CisgICBiZWNhdXNlIHRyYW5zbGF0aW9ucyBhcmUgc2tpcHBlZCBhdXRvbWF0aWNhbGx5IGZvciBi aW5hcnkgZmlsZXMuCisKKzMuNy4yLiBDaGFyYWN0ZXIgU2V0cyBhbmQgRG93bmxvYWRpbmcKKwor ICAgVGhlIGNvbW1hbmRzIGFuZCBzd2l0Y2hlcyBhcmUgdGhlIHNhbWUgYXMgZm9yIHVwbG9hZGlu ZywgYnV0IGF1dG9tYXRpYworICAgY2hhcmFjdGVyLXNldCBzd2l0Y2hpbmcgd29ya3MgZGlmZmVy ZW50bHksIHNpbmNlIEtlcm1pdCBjYW4ndCBzY2FuIHRoZQorICAgc2VydmVyIGZpbGVzIGluIGFk dmFuY2UuIEluc3RlYWQsIHRoZSB0cmFuc2ZlciBtb2RlICh0ZXh0IG9yIGJpbmFyeSkgaXMKKyAg IGJhc2VkIG9uIHRoZSBmaWxlbmFtZXM7IGVhY2ggbmFtZSBpcyBjb21wYXJlZCB3aXRoIEtlcm1p dCdzIGxpc3Qgb2YKKyAgIHRleHQgbmFtZSBwYXR0ZXJucyBhbmQgYmluYXJ5IG5hbWUgcGF0dGVy bnMuIElmIHRoZSBuYW1lIG1hdGNoZXMgYQorICAgYmluYXJ5IHBhdHRlcm4gKGZvciBleGFtcGxl LCBpZiB0aGUgZmlsZW5hbWUgaXMgb29mYS50YXIuZ3ogYW5kIG9uZSBvZgorICAgdGhlIGZpbGVu YW1lIHBhdHRlcm5zIGlzICIqLmd6IiksIHRoZSBmaWxlIGlzIGRvd25sb2FkZWQgaW4gYmluYXJ5 CisgICBtb2RlOyBvdGhlcndpc2UgaWYgaXQgbWF0Y2hlcyBhIHRleHQgcGF0dGVybiAoZS5nLiBv b2ZhLnR4dCBtYXRjaGVzCisgICAiKi50eHQiKSwgaXQgaXMgdHJhbnNmZXJyZWQgaW4gdGV4dCAo ImFzY2lpIikgbW9kZS4gT3RoZXJ3aXNlLCBpdCBpcworICAgdHJhbnNmZXJyZWQgaW4gdGhlIHBy ZXZhaWxpbmcgRlRQIFRZUEUuCisKKyAgIEluIEMtS2VybWl0IDguMCwgdGhlIHBhdHRlcm4gbGlz dHMgdXNlZCB3aXRoIEZUUCBHRVQgYXJlIG5vdCB0aGUgc2FtZQorICAgbGlzdHMgdXNlZCB3aXRo IEtlcm1pdCB0cmFuc2ZlcnMsIGFuZCBjYW4gbm90IGJlIHZpZXdlZCB3aXRoIFNIT1cKKyAgIFBB VFRFUk5TLCBub3IgYWRqdXN0ZWQgd2l0aCBBREQgYW5kIFJFTU9WRSBURVhULVBBVFRFUk5TIGFu ZAorICAgQklOQVJZLVBBVFRFUk5TLCBvciBTRVQgRklMRSBURVhULVBBVFRFUk5TIGFuZCBCSU5B UlktUEFUVEVSTlMuCisgICBDb25maWd1cmF0aW9uIG9mIHRoZSBGVFAgcGF0dGVybnMgbGlzdCB3 aWxsIGJlIGFkZGVkIGluIGEgZnV0dXJlCisgICByZWxlYXNlLgorCisgICBFeGFtcGxlczoKKwor ICAgZ2V0IC9zZXJ2ZXItY2hhcjpsYXRpbjEgL2xvY2FsLWNoYXI6Y3A4NTAgR3Lvv73vv71lLnR4 dAorICAgICAgICAgIEluIHRoaXMgY29tbWFuZCwgdGhlIGZpbGVuYW1lIGNvbnRhaW5zIHNwZWNp YWwgY2hhcmFjdGVycywgd2hpY2gKKyAgICAgICAgICB5b3UgZW50ZXIgdXNpbmcgd2hhdGV2ZXIg Y2hhcmFjdGVyIHNldCB5b3VyIGxvY2FsIGNvbXB1dGVyIHVzZXMsCisgICAgICAgICAgaW4gdGhp cyBjYXNlIFBDIENvZGUgUGFnZSA4NTAgKGNwODUwKS4gVGhlIGNvbW1hbmQgdGVsbHMgS2VybWl0 CisgICAgICAgICAgKGluIGNhc2UgaXQgZGlkbid0IGtub3cgYWxyZWFkeSBmcm9tIGl0cyBGSUxF IENIQVJBQ1RFUi1TRVQKKyAgICAgICAgICBzZXR0aW5nKSB0aGF0IHRoZSBsb2NhbCBjaGFyYWN0 ZXIgc2V0IGlzIGNwODUwIGFuZCB0aGUgc2VydmVyJ3MKKyAgICAgICAgICBjaGFyYWN0ZXItc2V0 IGlzIElTTyA4ODU5LTEgTGF0aW4gQWxwaGFiZXQgMSAobGF0aW4xKS4gS2VybWl0CisgICAgICAg ICAgdHJhbnNsYXRlcyB0aGUgZmlsZW5hbWUgZnJvbSBjcDg1MCB0byBsYXRpbjEgYW5kIHNlbmRz IHRoZQorICAgICAgICAgIGxhdGluMSBuYW1lIHRvIHRoZSBzZXJ2ZXIuIFNpbmNlIGl0J3MgYSB0 ZXh0IGZpbGUgKG1hdGNoZXMKKyAgICAgICAgICAiKi50eHQiKSwgaXRzIGNvbnRlbnRzIGFyZSB0 cmFuc2xhdGVkIHRvIGNwODUwIG9uIGFycml2YWwsIGFuZAorICAgICAgICAgIGl0IGlzIHNhdmVk IHdpdGggYSBjcDg1MCBuYW1lLgorCisgICBtZ2V0IC90ZXh0IC9zZXJ2ZXI6bGF0aW4xIC9sb2Nh bDp1dGY4ICoudHh0CisgICAgICAgICAgVGhpcyBjb21tYW5kOgorCisgICAgICAgICAgKyBUZWxs cyBDLUtlcm1pdCB0aGF0IHRoZSBzZXJ2ZXIncyBmaWxlcyBhcmUgZW5jb2RlZCBpbiBJU08KKyAg ICAgICAgICAgIDg4NTktMSBMYXRpbiBBbHBoYWJldCAxLgorICAgICAgICAgICsgVGVsbHMgQy1L ZXJtaXQgdG8gdHJhbnNsYXRlIHRoZSBpbmNvbWluZyBmaWxlcyBpbnRvIFVuaWNvZGUKKyAgICAg ICAgICAgIFVURi04IGZvciBzdG9yYWdlLgorICAgICAgICAgICsgQXNrcyB0aGUgc2VydmVyIHRv IHNlbmQgYWxsICIudHh0IiBmaWxlcyBpbiB0ZXh0IG1vZGUuCisKKyAgIG1nZXQgL3NlcnZlcjps YXRpbjEgL2xvY2FsOnV0ZjggKgorICAgICAgICAgIFRlbGxzIEtlcm1pdCB0byBnZXQgYWxsIGZp bGVzIGZyb20gdGhlIHNlcnZlcidzIGRpcmVjdG9yeSwKKyAgICAgICAgICBzd2l0Y2hpbmcgYmV0 d2VlbiB0ZXh0IGFuZCBiaW5hcnkgbW9kZSBiYXNlZCBvbiB0aGUgZmlsZW5hbWUuCisgICAgICAg ICAgVGhlIG5hbWVzIG9mIGFsbCB0aGUgZmlsZXMgYXJlIHRyYW5zbGF0ZWQgKHRvIFVURi04IGlu IHRoaXMKKyAgICAgICAgICBjYXNlKSwgYnV0IGNvbnRlbnRzIGFyZSB0cmFuc2xhdGVkIChhbHNv IHRvIFVURi04KSBvbmx5IGZvciB0ZXh0CisgICAgICAgICAgZmlsZXMuCisKKyAgIE5vdGUgdGhh dCBhbnkgcGFpciBvZiA4LWJpdCBjaGFyYWN0ZXIgc2V0cyBpcyBsaWtlbHkgdG8gaGF2ZSBzb21l CisgICBpbmNvbXBhdGliaWxpdGllcy4gQW55IGNoYXJhY3RlcnMgaW4gdGhlIHNvdXJjZSBmaWxl IHRoYXQgZG8gbm90IGhhdmUKKyAgIGVxdWl2YWxlbnRzIGluIHRoZSBkZXN0aW5hdGlvbiBmaWxl J3MgY2hhcmFjdGVyIHNldCBhcmUgY29udmVydGVkIHRvCisgICBxdWVzdGlvbiBtYXJrcy4gVGhp cyBhcHBsaWVzIHRvIGJvdGggZmlsZW5hbWVzIGFuZCB0byB0ZXh0IGZpbGUKKyAgIGNvbnRlbnRz LgorCisgICBBbHNvIG5vdGUgdGhhdCB0aGUgc2VydmVyJ3MgYWJpbGl0eSB0byBhY2NlcHQgc3Bl Y2lhbCBjaGFyYWN0ZXJzIGluCisgICBmaWxlbmFtZXMgZGVwZW5kcyBvbiB0aGUgcGFydGljdWxh ciBzZXJ2ZXIuIEZvciBleGFtcGxlOgorCisgIGdldCBHcu+/ve+/vWUudHh0CisKKyAgIHdvcmtz IHdpdGggV1UtRlRQRCwgYnV0OgorCisgIG1nZXQgR3Lvv73vv70qLnR4dAorCisgICBkb2VzIG5v dC4KKworMy43LjMuIFJGQzI2NDAKKworICAgWzM0MV1SRkMyNjQwLCBKdWx5IDE5OTksIHNwZWNp ZmllcyBhIG1ldGhvZCBieSB3aGljaCB0aGUgRlRQIGNsaWVudCBhbmQKKyAgIHNlcnZlciBjYW4g bmVnb3RpYXRlIHRoZSB1c2Ugb2YgVVRGOC4gSG93ZXZlciwgUkZDMjY0MC1jYXBhYmxlIHNlcnZl cnMKKyAgIGFyZSByYXJlIHRvIG5vbmV4aXN0ZW50IGF0IHRoaXMgd3JpdGluZywgYW5kIGluIGFu eSBjYXNlIHlvdSBkb24ndCBuZWVkCisgICB0aGVtIHRvIGJlIGFibGUgdG8gdHJhbnNmZXIgdGV4 dCBpbiBVVEY4LiBDLUtlcm1pdCBsZXRzIHlvdSB1cGxvYWQgYW5kCisgICBkb3dubG9hZCB0ZXh0 IGZpbGVzIGluIGFueSBjaGFyYWN0ZXIgc2V0IGl0IGtub3dzIGFib3V0LCBjb252ZXJ0aW5nIHRv CisgICBvciBmcm9tIGFueSBvdGhlciBjaGFyYWN0ZXIgc2V0IGl0IGtub3dzIGFib3V0LCB3aXRo b3V0IHRoZSBrbm93bGVkZ2UsCisgICBwZXJtaXNzaW9uLCBvciBjb29wZXJhdGlvbiBvZiB0aGUg c2VydmVyLCBhbmQgcmVnYXJkbGVzcyBvZiBpdHMKKyAgIGNhcGFiaWxpdGllcy4KKworICAgWyBb MzQyXVRvcCBdIFsgWzM0M11GVFAgVG9wIF0gWyBbMzQ0XUMtS2VybWl0IEhvbWUgXSBbIFszNDVd S2VybWl0IEhvbWUKKyAgIF0KKworMy44LiBGVFAgQ29tbWFuZCBTaG9ydGN1dHMKKworICAgQy1L ZXJtaXQncyBGVFAgY2xpZW50IGNvZXhpc3RzIHdpdGggb3RoZXIgQy1LZXJtaXQgZnVuY3Rpb25z IGJ5CisgICByZXF1aXJpbmcgdGhlICJmdHAiIHByZWZpeCBmb3IgZWFjaCBGVFAtcmVsYXRlZCBj b21tYW5kOiBGVFAgT1BFTiwgRlRQCisgICBHRVQsIEZUUCBCWUUsIGFuZCBzbyBvbi4gRm9yIGlu dGVyYWN0aXZlIHVzZSwgaG93ZXZlciwgdGhpcyBjYW4gYmUKKyAgIHJhdGhlciBhd2t3YXJkIGFu ZCBzb21ldGltZXMgc3VycHJpc2luZywgZm9yIGV4YW1wbGUgd2hlbiBhIEdFVCBjb21tYW5kCisg ICBzdGFydHMgYSBLZXJtaXQgR0VUIHJhdGhlciB0aGFuIGFuIEZUUCBHRVQuIEluIGZhY3QsIG1h bnkgS2VybWl0CisgICBjb21tYW5kcyBtaWdodCBqdXN0IGFzIGVhc2lseSBhcHBseSB0byBhbiBG VFAgY29ubmVjdGlvbjogR0VULCBQVVQKKyAgIChTRU5EKSwgQllFLCBhbmQgQ0xPU0UuIFRoZSBm b2xsb3dpbmcgY29tbWFuZCBsZXRzIHlvdSBjaG9vc2UgaG93IHRoZXNlCisgICBjb21tYW5kcyBh cmUgaW50ZXJwcmV0ZWQ6CisKKyAgIFNFVCBHRVQtUFVULVJFTU9URSB7IEFVVE8sIEtFUk1JVCwg RlRQIH0KKyAgICAgICAgICBDb250cm9scyB0aGUgb3JpZW50YXRpb24gb2YgR0VULCBQVVQsIFJF TU9URSBhbmQgb3RoZXIKKyAgICAgICAgICBmaWxlLXRyYW5zZmVyIGFuZCBjbGllbnQvc2VydmVy IGNvbW1hbmRzIHRoYXQgbWlnaHQgYXBwbHkgdG8KKyAgICAgICAgICBlaXRoZXIgS2VybWl0IG9y IEZUUC4gVGhlIGRlZmF1bHQgc2V0dGluZyBpcyBBVVRPLCBtZWFuaW5nIHRoYXQKKyAgICAgICAg ICB0aGVzZSBjb21tYW5kcyBhcHBseSB0byBGVFAgaWYgYW4gRlRQIGNvbm5lY3Rpb24gaXMgb3Bl biwgYW5kIHRvCisgICAgICAgICAgS2VybWl0IG90aGVyd2lzZS4gS0VSTUlUIG1lYW5zIHRoZXkg YWx3YXlzIGFwcGx5IHRvIEtlcm1pdCwgRlRQCisgICAgICAgICAgbWVhbnMgdGhleSBhbHdheXMg YXBwbHkgdG8gRlRQLgorCisgICBIZXJlIGlzIGEgY29tcGxldGUgbGlzdCBvZiBhZmZlY3RlZCBj b21tYW5kczoKKworIEtlcm1pdCBDb21tYW5kICAgICAgICAgICAgICAgRlRQIEVxdWl2YWxlbnQK KyAgKG5vbmUpICAgICAgICAgICAgICAgICAgICAgICBGVFAgWyBPUEVOIF0KKyAgTE9HSU4gICAg ICAgICAgICAgICAgICAgICAgICBGVFAgVVNFUgorICBMT0dPVVQgICAgICAgICAgICAgICAgICAg ICAgIEZUUCBSRVNFVAorICBCWUUgICAgICAgICAgICAgICAgICAgICAgICAgIEZUUCBCWUUKKyAg RklOSVNIICAgICAgICAgICAgICAgICAgICAgICBGVFAgQllFCisgIENMT1NFICAgICAgICAgICAg ICAgICAgICAgICAgRlRQIEJZRQorICBIQU5HVVAgICAgICAgICAgICAgICAgICAgICAgIEZUUCBC WUUKKyAgQklOQVJZICAgICAgICAgICAgICAgICAgICAgICBGVFAgVFlQRSBCSU5BUlkKKyAgVEVY VCAob3IgQVNDSUkpICAgICAgICAgICAgICBGVFAgVFlQRSBBU0NJSQorICBTRU5EIChvciBQVVQp ICAgICAgICAgICAgICAgIEZUUCBQVVQKKyAgTVNFTkQgKG9yIE1QVVQpICAgICAgICAgICAgICBG VFAgTVBVVAorICBSRVNFTkQgICAgICAgICAgICAgICAgICAgICAgIEZUUCBQVVQgL1JFQ09WRVIK KyAgQ1NFTkQgICAgICAgICAgICAgICAgICAgICAgICBGVFAgUFVUIC9DT01NQU5ECisgIEdFVCAg ICAgICAgICAgICAgICAgICAgICAgICAgRlRQIEdFVAorICBNR0VUICAgICAgICAgICAgICAgICAg ICAgICAgIEZUUCBNR0VUCisgIFJFR0VUICAgICAgICAgICAgICAgICAgICAgICAgRlRQIEdFVCAv UkVDT1ZFUgorICBSRU1PVEUgSEVMUCAgICAgIChSSEVMUCkgICAgIEZUUCBIRUxQCisgIFJFTU9U RSBDRCAgICAgICAgKFJDRCkgICAgICAgRlRQIENEIChDV0QpCisgIFJFTU9URSBQV0QgICAgICAg KFJQV0QpICAgICAgRlRQIFBXRAorICBSRU1PVEUgRElSRUNUT1JZIChSRElSKSAgICAgIEZUUCBE SVJFQ1RPUlkKKyAgUkVNT1RFIERFTEVURSAgICAoUkRFTCkgICAgICBGVFAgREVMRVRFCisgIFJF TU9URSBNS0RJUiAgICAgKFJNS0RJUikgICAgRlRQIE1LRElSCisgIFJFTU9URSBSTURJUiAgICAg KFJSTURJUikgICAgRlRQIFJNRElSCisgIFJFTU9URSBSRU5BTUUgICAgKFJSRU5BTUUpICAgRlRQ IFJFTkFNRQorICBSRU1PVEUgVFlQRSAgICAgIChSVFlQRSkgICAgIEZUUCBUWVBFCisgIFJFTU9U RSBFWElUICAgICAgKFJFWElUKSAgICAgRlRQIEJZRQorCisgICBUaGUgY29tbWFuZHMgaW4gdGhl IHJpZ2h0LWhhbmQgY29sdW1uIGFsd2F5cyBhY2Nlc3MgRlRQLiBUaGUgY29tbWFuZHMKKyAgIGlu IHRoZSBsZWZ0IGNvbHVtbiBjYW4gYWNjZXNzIGVpdGhlciBLZXJtaXQgcHJvdG9jb2wgb3IgRlRQ OgorCisgICAgICogV2hlbiBHRVQtUFVULVJFTU9URSBpcyBzZXQgdG8gS0VSTUlULCBvciB0byBB VVRPIHdoZW4gdGhlcmUgaXMgbm8KKyAgICAgICBGVFAgY29ubmVjdGlvbiwgdGhlIGNvbW1hbmRz IGluIHRoZSBsZWZ0LWhhbmQgY29sdW1uIGFjY2VzcyBLZXJtaXQKKyAgICAgICBwcm90b2NvbCwg YW5kIHRob3NlIHJpZ2h0LWhhbmQgY29sdW1uIGFyZSByZXF1aXJlZCBmb3IgRlRQLgorICAgICAq IFdoZW4gR0VULVBVVC1SRU1PVEUgaXMgc2V0IHRvIEZUUCwgb3IgdG8gQVVUTyB3aGVuIHRoZXJl IGlzIGFuCisgICAgICAgYWN0aXZlIEZUUCBjb25uZWN0aW9uLCB0aGUgY29tbWFuZHMgaW4gdGhl IGxlZnQtaGFuZCBjb2x1bW4gYWNjZXNzCisgICAgICAgdGhlIEZUUCBjb25uZWN0aW9uIGFuZCBj YW4gbm90IGJlIHVzZWQgdG8gYWNjZXNzIEtlcm1pdCBwcm90b2NvbC4KKyAgICAgICBJbiB0aGlz IGNhc2UsIGlmIHlvdSB3YW50IHRvIGJlIGFibGUgdG8gdXNlIGJvdGggS2VybWl0IHByb3RvY29s CisgICAgICAgYW5kIHRoZSBGVFAgY29ubmVjdGlvbiwgeW91IG11c3QgU0VUIEdFVC1QVVQtUkVN T1RFIEtFUk1JVCwgYW5kCisgICAgICAgdGhlbiB1c2UgdGhlIEZUUCBjb21tYW5kcyBpbiB0aGUg cmlnaHQtaGFuZCBjb2x1bW4gdG8gYWNjZXNzIHRoZQorICAgICAgIEZUUCBjb25uZWN0aW9uLgor CisgICBOb3RlIHRoYXQgZmlsZS1tYW5hZ2VtZW50IGNvbW1hbmRzIHN1Y2ggYXMgRElSRUNUT1JZ LCBERUxFVEUsIENELCBQV0QsCisgICBNS0RJUiwgUk1ESVIsIEhFTFAsIFJFTkFNRSwgQ09QWSwg VFlQRSwgYW5kIHNvIG9uLCBhbHdheXMgYXBwbHkKKyAgIGxvY2FsbHksIG5vIG1hdHRlciB3aGF0 IGtpbmQgb2YgY29ubmVjdGlvbiB5b3UgaGF2ZS4gVGhpcyBpcyB0aGUKKyAgIG9wcG9zaXRlIG9m IG1vc3QgRlRQIGNsaWVudHMsIHdoZXJlIHRoZXNlIGNvbW1hbmRzIGFyZSBpbnRlbmRlZCBmb3Ig dGhlCisgICBzZXJ2ZXIsIGFuZCByZXF1aXJlIGFuICJMIiBwcmVmaXggZm9yIGxvY2FsIGV4ZWN1 dGlvbiAoZS5nLiAiZGlyIiBnZXRzCisgICBhIGRpcmVjdG9yeSBsaXN0aW5nIGZyb20gdGhlIHNl cnZlciwgImxkaXIiIGdldHMgYSBsb2NhbCBkaXJlY3RvcnkKKyAgIGxpc3RpbmcpLiBUbyBpbGx1 c3RyYXRlIHdpdGggdGhlIENEIGNvbW1hbmQgYW5kIGEgdHlwaWNhbCBVTklYIEZUUAorICAgY2xp ZW50OgorCisgQ2xpZW50ICAgU2VydmVyICAgICAgQ2hhbmdlIExvY2FsIERpcmVjdG9yeSAgICAg Q2hhbmdlIFJlbW90ZSBEaXJlY3RvcnkKKyAgRlRQICAgICAgRlRQICAgICAgICAgbGNkICAgICAg ICAgICAgICAgICAgICAgICAgY2QgKGN3ZCkKKyAgS2VybWl0ICAgS2VybWl0ICAgICAgY2QgICAg ICAgICAgICAgICAgICAgICAgICAgcmNkLCByZW1vdGUgY2QKKyAgS2VybWl0ICAgRlRQICAgICAg ICAgY2QgICAgICAgICAgICAgICAgICAgICAgICAgZnRwIGNkLCByY2QsIHJlbW90ZSBjZAorCisg ICBBbHNvIG5vdGUgdGhhdCBub3QgYWxsIFJFTU9URSBjb21tYW5kcyBhcmUgdXNlZnVsIHdpdGgg RlRQLCBzaW5jZSBGVFAKKyAgIHNlcnZlcnMgZG8gbm90IG9mZmVyIHRoZSBjb3JyZXNwb25kaW5n IGZ1bmN0aW9ucy4gVGhlc2UgaW5jbHVkZToKKworICAgICAqIFJFTU9URSBBU1NJR04gIC0gRlRQ IHNlcnZlcnMgZG9uJ3QgaGF2ZSB2YXJpYWJsZXMKKyAgICAgKiBSRU1PVEUgQ09QWSAgICAtIEZU UCBzZXJ2ZXJzIGRvbid0IGNvcHkgZmlsZXMKKyAgICAgKiBSRU1PVEUgSE9TVCAgICAtIEZUUCBz ZXJ2ZXJzIGRvbid0IGV4ZWN1dGUgaG9zdCAoc2hlbGwpIGNvbW1hbmRzCisgICAgICogUkVNT1RF IEtFUk1JVCAgLSBGVFAgc2VydmVycyBkb24ndCBleGVjdXRlIEtlcm1pdCBjb21tYW5kcworICAg ICAqIFJFTU9URSBQUklOVCAgIC0gRlRQIHNlcnZlcnMgZG9uJ3QgcHJpbnQgZmlsZXMKKyAgICAg KiBSRU1PVEUgUVVFUlkgICAtIEZUUCBzZXJ2ZXJzIGRvbid0IGhhdmUgdmFyaWFibGVzCisgICAg ICogUkVNT1RFIFNFVCAgICAgLSBGVFAgc2VydmVycyBkb24ndCBoYXZlIEtlcm1pdCBzZXR0aW5n cworICAgICAqIFJFTU9URSBXSE8gICAgIC0gRlRQIHNlcnZlcnMgZG9uJ3Qgc2VuZCB1c2VyIGxp c3RzCisKKyAgIEZpbmFsbHkgbm90ZSB0aGF0IGNvbW1hbmQgc2hvcnRjdXRzIGRvIG5vdCBhcHBs eSB0byB0aGUgSEVMUCBjb21tYW5kLgorICAgRm9yIGhlbHAgYWJvdXQgYW4gRlRQIGNvbW1hbmQs IHVzZSAoZm9yIGV4YW1wbGUpICJoZWxwIGZ0cCBkZWxldGUiLCBub3QKKyAgICJoZWxwIGRlbGV0 ZSIgb3IgImhlbHAgcmRlbGV0ZSIuCisKKyAgIFsgWzM0Nl1Ub3AgXSBbIFszNDddRlRQIFRvcCBd IFsgWzM0OF1DLUtlcm1pdCBIb21lIF0gWyBbMzQ5XUtlcm1pdCBIb21lCisgICBdCisKKzMuOS4g RHVhbCBTZXNzaW9ucworCisgICBZb3UgY2FuIGhhdmUgYW4gRlRQIHNlc3Npb24gb3BlbiBhdCB0 aGUgc2FtZSB0aW1lIGFzIGEgcmVndWxhciBLZXJtaXQKKyAgIFNFVCBMSU5FIG9yIFNFVCBIT1NU ICh0ZXJtaW5hbCkgc2Vzc2lvbi4gSW4gdGhpcyBjYXNlLCB0aGUgZGVmYXVsdCBTRVQKKyAgIEdF VC1QVVQtUkVNT1RFIEFVVE8gc2V0dGluZyBzaG91bGQgZW5zdXJlIHRoYXQgYWxsICJ0d28tZmFj ZWQiIGNvbW1hbmRzCisgICBsaWtlIEdFVCwgUFVULCBSRU1PVEUsIEhBTkdVUCwgQllFLCBldGMs IGFwcGx5IHRvIHRoZSBLZXJtaXQgc2Vzc2lvbiwKKyAgIGFuZCBhbGwgY29tbWFuZHMgZm9yIHRo ZSBGVFAgc2Vzc2lvbiBtdXN0IGluY2x1ZGUgdGhlIEZUUCBwcmVmaXguIFRvIGJlCisgICBhYnNv bHV0ZWx5IGNlcnRhaW4sIHlvdSBjYW4gdXNlIFNFVCBHRVQtUFVULVJFTU9URSBLRVJNSVQuCisK KyAgZnRwIGZvby5iYXIuYmF6LmNvbQorICBpZiBmYWlsIC4uLgorICAobG9nIGluKQorICBzZXQg aG9zdCBmb28uYmFyLmJhei5jb20KKyAgaWYgZmFpbCAuLi4KKyAgKGxvZyBpbikKKworICAgTm93 IHlvdSBoYXZlIGJvdGggYW4gRlRQIGFuZCBUZWxuZXQgY29ubmVjdGlvbiB0byB0aGUgc2FtZSBo b3N0IChvZgorICAgY291cnNlIHRoZXkgY291bGQgYWxzbyBiZSB0byBkaWZmZXJlbnQgaG9zdHMs IGFuZCB5b3UgY291bGQgYWxzbyBoYXZlIGEKKyAgIGRpcmVjdCBvciBkaWFsZWQgc2VyaWFsIGNv bm5lY3Rpb24gaW5zdGVhZCBvZiBhIFRlbG5ldCBjb25uZWN0aW9uKS4gTm93CisgICBhc3N1bWlu ZyB5b3UgaGF2ZSBhIEtlcm1pdCBzZXJ2ZXIgb24gdGhlIGZhciBlbmQgb2YgdGhlIEtlcm1pdAor ICAgY29ubmVjdGlvbjoKKworICByY2QgaW5jb21pbmcgICAgICA7IENoYW5nZXMgS2VybWl0IHNl cnZlcidzIGRpcmVjdG9yeSAoPSBSRU1PVEUgQ0QpCisgIGZ0cCBjZCBpbmNvbWluZyAgIDsgQ2hh bmdlcyBGVFAgc2VydmVyJ3MgZGlyZWN0b3J5CisgIHB1dCBvb2ZhLnR4dCAgICAgIDsgU2VuZHMg YSBmaWxlIG9uIHRoZSBLZXJtaXQgY29ubmVjdGlvbgorICBmdHAgcHV0IG9vZmEudHh0ICA7IFNl bmRzIGEgZmlsZSBvbiB0aGUgRlRQIGNvbm5lY3Rpb24KKyAgYnllICAgICAgICAgICAgICAgOyBT aHV0cyBkb3duIHRoZSBLZXJtaXQgY29ubmVjdGlvbgorICBmdHAgYnllICAgICAgICAgICA7IFNo dXRzIGRvd24gdGhlIEZUUCBjb25uZWN0aW9uCisKKyAgIE5vdGUgdGhhdCBQVVQgYW5kIFNFTkQg YXJlIHN5bm9ueW1zIGZvciBib3RoIEZUUCBhbmQgS2VybWl0CisgICBjb25uZWN0aW9ucy4KKwor ICAgWW91IGNhbiBhbHNvIGVzdGFibGlzaCBkdWFsIHNlc3Npb25zIG9uIHRoZSBLZXJtaXQgY29t bWFuZCBsaW5lOgorCisgIGtlcm1pdCAtaiBob3N0MSAtOSBob3N0MgorCisgICBUaGlzIG1ha2Vz IGEgVGVsbmV0IGNvbm5lY3Rpb24gdG8gaG9zdDEgYW5kIGFuIEZUUCBjb25uZWN0aW9uIHRvIGhv c3QyLgorCisgICBbIFszNTBdVG9wIF0gWyBbMzUxXUZUUCBUb3AgXSBbIFszNTJdQy1LZXJtaXQg SG9tZSBdIFsgWzM1M11LZXJtaXQgSG9tZQorICAgXQorCiszLjEwLiBBdXRvbWF0aW5nIEZUUCBT ZXNzaW9ucworCisgICBNb3N0IG9mIEtlcm1pdCdzIHNjcmlwdGluZyBmZWF0dXJlcyBjYW4gYmUg dXNlZCB0byBtYWtlIGFuZCBjb250cm9sIEZUUAorICAgc2Vzc2lvbnM6IEZPUiBhbmQgV0hJTEUg bG9vcHMsIElGLUVMU0UgYW5kIFNXSVRDSCBjb25zdHJ1Y3Rpb25zLAorICAgdmFyaWFibGVzLCBh cnJheXMsIGJ1aWx0LWluIGZ1bmN0aW9ucywgYW5kIGFsbCB0aGUgcmVzdC4gWW91IGNhbid0IHVz ZQorICAgSU5QVVQsIE1JTlBVVCwgT1VUUFVULCBDTEVBUiwgb3IgU0NSSVBUIG9uIGFuIEZUUCBz ZXNzaW9uLCBidXQgdGhlc2UKKyAgIGFyZSBub3QgbmVlZGVkIHNpbmNlIHRoZSBGVFAgcHJvdG9j b2wgaXMgd2VsbCBkZWZpbmVkLgorCisgICBbMzU0XUNMSUNLIEhFUkUgZm9yIGFuIEZUUCBzY3Jp cHRpbmcgdHV0b3JpYWwuCisKKzMuMTAuMS4gRlRQLVNwZWNpZmljIFZhcmlhYmxlcyBhbmQgRnVu Y3Rpb25zCisKKyAgIFRoZSBmb2xsb3dpbmcgdmFyaWFibGUgdGVsbHMgd2hldGhlciBhbiBGVFAg Y29ubmVjdGlvbiBpcyBvcGVuOgorCisgICBcdihmdHBfY29ubmVjdGVkKQorICAgICAgICAgIDEg aWYgdGhlcmUgaXMgYW4gYWN0aXZlIEZUUCBjb25uZWN0aW9uLCAwIGlmIHRoZXJlIGlzbid0Lgor CisgICBUaGUgRlRQIE9QRU4gY29tbWFuZCBzZXRzOgorCisgICBcdihmdHBfaG9zdCkKKyAgICAg ICAgICBUaGUgaG9zdCB0byB3aGljaCB0aGUgbW9zdCByZWNlbnQgRlRQIGNvbm5lY3Rpb24gd2Fz IG1hZGUuCisKKyAgIFx2KGZ0cF9zZWN1cml0eSkKKyAgICAgICAgICBUaGUgc2VjdXJpdHkgbWV0 aG9kIG5lZ290aWF0ZWQgZm9yIHRoZSBjdXJyZW50IEZUUCBzZXNzaW9uLiBUaGUKKyAgICAgICAg ICB2YWx1ZSBpcyAiTlVMTCIgd2hlbiBubyBzZWN1cml0eSBpcyB1c2VkLiBPdGhlciBwb3NzaWJp bGl0aWVzCisgICAgICAgICAgYXJlIEdTU0FQSSwgS0VSQkVST1NfVjQsIFNTTCwgVExTLCBhbmQg U1JQLiBBbHNvIHNlZQorICAgICAgICAgIFx2KGF1dGhuYW1lKSwgXHYoYXV0aHN0YXRlKSwgYW5k IFx2KGF1dGh0eXBlKS4gU2VlIFszNTVdMy4yLgorICAgICAgICAgIE1ha2luZyBTZWN1cmUgRlRQ IENvbm5lY3Rpb25zLgorCisgICBcdihmdHBfc2VydmVyKQorICAgICAgICAgIFRoZSBPUyB0eXBl IChVTklYLCBWTVMsIGV0Yykgb2YgdGhlIEZUUCBzZXJ2ZXIgaG9zdC4KKworICAgVGhlIEZUUCBV U0VSIGNvbW1hbmQgKG9yIEZUUCBPUEVOIC9VU0VSOiwgb3IgRlRQIHdpdGggYXV0b21hdGljIGxv Z2luKQorICAgc2V0czoKKworICAgXHYoZnRwX2xvZ2dlZGluKQorICAgICAgICAgIDEgaWYgeW91 IGFyZSBsb2dnZWQgaW4gdG8gYW4gRlRQIHNlcnZlciwgMCBpZiB5b3UgYXJlIG5vdC4KKworICAg VGhlIGN1cnJlbnQgQ09NTUFORC1QUk9URUNUSU9OLUxFVkVMIGFuZCBEQVRBLVBST1RFQ1RJT04t TEVWRUwgdmFsdWVzCisgICBhcmUgcmVmbGVjdGVkIGluOgorCisgICBcdihmdHBfY3BsKQorICAg XHYoZnRwX2RwbCkKKyAgICAgICAgICBUaGUgdmFsdWVzIGFyZSAiY2xlYXIiLCAiY29uZmlkZW50 aWFsIiwgInNhZmUiIG9yICJwcml2YXRlIi4gU2VlCisgICAgICAgICAgWzM1Nl0zLjIuIE1ha2lu ZyBTZWN1cmUgRlRQIENvbm5lY3Rpb25zLgorCisgICBUaGUgRlRQIEdFVC1QVVQtUkVNT1RFIHNl dHRpbmcgaXMgcmVmbGVjdGVkIGluOgorCisgICBcdihmdHBfZ2V0cHV0cmVtb3RlKQorICAgICAg ICAgIFRoZSB2YWx1ZXMgYXJlICJhdXRvIiwgImZ0cCIsIG9yICJrZXJtaXQiLgorCisgICBFdmVy eSBGVFAgY29tbWFuZCBzZXRzIHRoZSBcdihzdWNjZXNzKSB2YXJpYWJsZSwgYXMgd2VsbCBhcyB0 aGUKKyAgIGZvbGxvd2luZyB0d28gRlRQLXNwZWNpZmljIHZhcmlhYmxlczoKKworICAgXHYoZnRw X2NvZGUpCisgICAgICAgICAgVGhlIHN0YW5kYXJkaXplZCBudW1lcmljIEZUUCBwcm90b2NvbCBj b2RlIGZyb20gdGhlIHNlcnZlcidzCisgICAgICAgICAgcmVzcG9uc2UgdG8gdGhlIGxhc3QgY2xp ZW50IGNvbW1hbmQsIGEgMy1kaWdpdCBkZWNpbWFsIG51bWJlcgorICAgICAgICAgIGRlZmluZWQg aW4gWzM1N11SRkM5NTkuIEJyaWVmbHk6CisKKyAgICAgICAgICAxeHggPSBQb3NpdGl2ZSBQcmVs aW1pbmFyeSBSZXBseQorICAgICAgICAgIDJ4eCA9IFBvc2l0aXZlIENvbXBsZXRpb24gUmVwbHkK KyAgICAgICAgICAzeHggPSBQb3NpdGl2ZSBJbnRlcm1lZGlhdGUgUmVwbHkKKyAgICAgICAgICA0 eHggPSBUcmFuc2llbnQgTmVnYXRpdmUgQ29tcGxldGlvbiBSZXBseQorICAgICAgICAgIDV4eCA9 IFBlcm1hbmVudCBOZWdhdGl2ZSBDb21wbGV0aW9uIFJlcGx5CisKKyAgIFx2KGZ0cF9tZXNzYWdl KQorICAgICAgICAgIFRoZSB0ZXh0IG1lc3NhZ2UsIGlmIGFueSwgZnJvbSB0aGUgc2VydmVyJ3Mg cmVzcG9uc2UgdG8gdGhlIGxhc3QKKyAgICAgICAgICBjbGllbnQgY29tbWFuZC4gSWYgdGhlIG1v c3QgcmVjZW50IHJlc3BvbnNlIGhhZCBtdWx0aXBsZSBsaW5lcywKKyAgICAgICAgICB0aGlzIHZh cmlhYmxlIGhhcyBvbmx5IHRoZSBmaW5hbCBsaW5lLiBUaGVzZSBtZXNzYWdlcyBhcmUgbm90Cisg ICAgICAgICAgc3RhbmRhcmRpemVkIGFuZCB2YXJ5IGluIGZvcm1hdCBhbmQgY29udGVudCBmcm9t IHNlcnZlciB0bworICAgICAgICAgIHNlcnZlci4gU3lub255bTogXHYoZnRwX21zZykuCisKKyAg IEZUUCBmaWxlIHRyYW5zZmVycyBzZXQgdGhlIHJlZ3VsYXIgS2VybWl0IHRyYW5zZmVyIHN0YXR1 cyB2YXJpYWJsZXM6CisKKyAgXHYoY3BzKSAgICAgICAgIENoYXJhY3RlcnMgcGVyIHNlY29uZCBv ZiBtb3N0IHJlY2VudCB0cmFuc2Zlci4KKyAgXHYoZmlsZXNwZWMpICAgIEZpbGUgc3BlY2lmaWNh dGlvbiB1c2VkIGluIG1vc3QgcmVjZW50IHRyYW5zZmVyLgorICBcdihmc2l6ZSkgICAgICAgU2l6 ZSBvZiBmaWxlIG1vc3QgcmVjZW50bHkgdHJhbnNmZXJyZWQuCisgIFx2KHRmc2l6ZSkgICAgICBU b3RhbCBzaXplIG9mIGZpbGUgZ3JvdXAgbW9zdCByZWNlbnRseSB0cmFuc2ZlcnJlZC4KKyAgXHYo eGZlcnN0YXR1cykgIFN0YXR1cyBvZiBtb3N0IHJlY2VudCB0cmFuc2ZlciAoMCA9IHN1Y2Nlc3Ms IDEgPSBmYWlsdXJlKS4KKyAgXHYodGZ0aW1lKSAgICAgIEVsYXBzZWQgdGltZSBvZiBtb3N0IHJl Y2VudCB0cmFuc2ZlciwgaW4gc2Vjb25kcy4KKworICAgRHVyaW5nIGFuIEZUUCB0cmFuc2Zlciwg dGhlIHBlci1maWxlIHZhcmlhYmxlcyBhcmU6CisKKyAgXHYoZmlsZW5hbWUpICAgIE5hbWUgb2Yg Y3VycmVudCBmaWxlLgorICBcdihmaWxlbnVtYmVyKSAgT3JkaW5hbCBmaWxlIG51bWJlciBpbiBn cm91cCAoMSwgMiwgMywgLi4uKQorCiszLjEwLjIuIEV4YW1wbGVzCisKKyAgIExldCdzIGJlZ2lu IHdpdGggYSBzaW1wbGUgZXhhbXBsZSBzaG93aW5nIGhvdyB0byBsb2cgaW4sIHNlbmQgc29tZQor ICAgZmlsZXMsIGFuZCBsb2cgb3V0OgorCisgIGRlZmluZSBlcnJvciBpZiBmYWlsIHsgZnRwIGJ5 ZSwgc3RvcCAxIEVycm9yOiBcJTEgfQorICBzZXQgdHJhbnNhY3QgYnJpZWYKKyAgbG9nIHQKKyAg ZnRwIGZ0cC54eXpjb3JwLmNvbSAvYW5vbnltb3VzCisgIGlmIGZhaWwgc3RvcCAxIENvbm5lY3Rp b24gZmFpbGVkCisgIGlmIG5vdCBcdihmdHBfbG9nZ2VkaW4pIHN0b3AgMSBMb2dpbiBmYWlsZWQK KyAgZnRwIGNkIGluY29taW5nCisgIGVycm9yIHtmdHAgY2R9CisgIGNkIHVwbG9hZAorICBlcnJv ciB7bG9jYWwgY2R9CisgIGZ0cCBwdXQgL2RlbGV0ZSAqCisgIGVycm9yIHtwdXR9CisgIGZ0cCBi eWUKKworICAgRmlyc3Qgd2UgZGVmaW5lIGFuIGVycm9yIGhhbmRsaW5nIG1hY3JvIHRvIGJlIHVz ZWQgYWZ0ZXIgdGhlIGNvbm5lY3Rpb24KKyAgIGlzIG1hZGUuIFRoZW4gd2Ugc2V0IHVwIGEgYnJp ZWYtZm9ybWF0IHRyYW5zYWN0aW9uIGxvZyB0byBrZWVwIGEgcmVjb3JkCisgICBvZiBvdXIgZmls ZSB0cmFuc2ZlcnMuIFRoZW4gd2UgbWFrZSBhIGNvbm5lY3Rpb24gdG8gdGhlIGhvc3QgYW5kIGxv ZyBpbgorICAgYW5vbnltb3VzbHkuIFRoZSAiaWYgZmFpbCIgY29tbWFuZCBjaGVja3Mgd2hldGhl ciB0aGUgY29ubmVjdGlvbiB3YXMKKyAgIG1hZGUuIFRoZSAiaWYgbm90IiBjb21tYW5kIGNoZWNr cyB3aGV0aGVyIGxvZ2luIHdhcyBzdWNjZXNzZnVsLgorICAgT2J2aW91c2x5IHRoZSBzY3JpcHQg c2hvdWxkIG5vdCBjb250aW51ZSB1bmxlc3MgYm90aCB0ZXN0cyBzdWNjZWVkLgorCisgICBOZXh0 IHdlIGNoYW5nZSB0byB0aGUgc2VydmVyJ3MgJ2luY29taW5nJyBkaXJlY3RvcnkgYW5kIHRvIG91 ciBvd24KKyAgICd1cGxvYWQnIGRpcmVjdG9yeSwgYW5kIHNlbmQgYWxsIHRoZSBmaWxlcyB0aGF0 IGFyZSBpbiBpdCAodGhleSBjYW4gYmUKKyAgIGFueSBtaXh0dXJlIG9mIHRleHQgYW5kIGJpbmFy eSBmaWxlcyksIGRlbGV0aW5nIGVhY2ggc291cmNlIGZpbGUKKyAgIGF1dG9tYXRpY2FsbHkgYWZ0 ZXIgaXQgaXMgc3VjY2Vzc2Z1bGx5IHVwbG9hZGVkLiBFYWNoIG9mIHRoZXNlCisgICBvcGVyYXRp b25zIGlzIGNoZWNrZWQgd2l0aCB0aGUgRVJST1IgbWFjcm8sIHdoaWNoIHByZXZlbnRzIHRoZSBz Y3JpcHQKKyAgIGZyb20gY29udGludWluZyBwYXN0IGEgZmFpbHVyZS4KKworICAgRmluYWxseSB3 ZSBjbG9zZSB0aGUgRlRQIHNlc3Npb24gd2l0aCB0aGUgImJ5ZSIgY29tbWFuZC4KKworICAgSnVz dCBsaWtlIGFueSBvdGhlciBLZXJtaXQgc2NyaXB0LCB0aGlzIG9uZSBjYW4gYmUgdXNlZCBpbiBt YW55IHdheXM6CisKKyAgICAgKiBJdCBjYW4gYmUgc3RvcmVkIGluIGEgZmlsZSwgYW5kIEtlcm1p dCBjYW4gYmUgdG9sZCB0byBUQUtFIHRoZQorICAgICAgIGZpbGUuCisgICAgICogSW4gVU5JWCwg aXQgY2FuIGJlIGEgIlszNThda2VyYmFuZyIgc2NyaXB0IGFuZCB0aGVyZWZvcmUgcnVuCisgICAg ICAgZGlyZWN0bHkgZnJvbSB0aGUgc2hlbGwgcHJvbXB0IG9yIGFzIGEgY3JvbiBqb2IuCisKKyAg IFdlIGNvdWxkIGhhdmUgdXNlZCBjb21tYW5kIHNob3J0Y3V0cyBsaWtlICJyY2QiLCAicHV0Iiwg YW5kICJieWUiLCBidXQKKyAgIHNpbmNlIHRoZXkgY2FuIGJlIGFtYmlndW91cyB1bmRlciBjZXJ0 YWluIGNpcmN1bXN0YW5jZXMsIGl0IGlzIGJldHRlcgorICAgdG8gYXZvaWQgdGhlbSBpbiBzY3Jp cHRzOyB0aGV5IGFyZSBpbnRlbmRlZCBtYWlubHkgZm9yIGNvbnZlbmllbmNlCisgICBkdXJpbmcg aW50ZXJhY3RpdmUgdXNlLiBIb3dldmVyLCBpZiB5b3Ugd2lzaCB0byB1c2UgdGhlIHNob3J0Y3V0 cyBpbiBhCisgICBzY3JpcHQsIHlvdSBjYW4gZG8gaXQgdGhpcyB3YXkgKGVycm9yIGhhbmRsaW5n IG9taXR0ZWQgZm9yIGJyZXZpdHkpOgorCisgIGxvY2FsIFwldCAgICAgICAgICAgICAgICAgICAg ICAgOyBEZWNsYXJlIGEgbG9jYWwgdGVtcG9yYXJ5IHZhcmlhYmxlCisgIGFzc2lnbiBcJXQgXHYo ZnRwX2dldHB1dHJlbW90ZSkgOyBTYXZlIGN1cnJlbnQgRlRQIEdFVC1QVVQtUkVNT1RFIHNldHRp bmcKKyAgc2V0IGZ0cCBnZXQtcHV0LXJlbW90ZSBmdHAgICAgICA7IENob29zZSBGVFAgb3JpZW50 YXRpb24KKyAgZnRwIHh5emNvcnAuY29tIC9hbm9ueW1vdXMgICAgICA7IE9wZW4gYW4gRlRQIGNv bm5lY3Rpb24KKyAgZ2V0IG9vZmEudHh0ICAgICAgICAgICAgICAgICAgICA7IEdFVCBhIGZpbGUK KyAgcHV0IGZvby5iYXIgICAgICAgICAgICAgICAgICAgICA7IFBVVCBhIGZpbGUKKyAgcmRlbCB5 ZXN0ZXJkYXkubG9nICAgICAgICAgICAgICA7IERlbGV0ZSBhIGZpbGUgb24gdGhlIHNlcnZlcgor ICBieWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgTG9nIG91dCBhbmQgZGlzY29ubmVj dCBmcm9tIHNlcnZlci4KKyAgc2V0IGZ0cCBnZXQtcHV0LXJlbW90ZSBcJXQgICAgICA7IFJlc3Rv cmUgcHJldmlvdXMgR0VULVBVVC1SRU1PVEUgc2V0dGluZworCisgICBPZiBjb3Vyc2UsIEZUUCBz Y3JpcHRzIGNhbiBhbHNvIGJlIHdyaXR0ZW4gYXMgbWFjcm9zLiBUaGlzIGxldHMgeW91CisgICBw YXNzIHBhcmFtZXRlcnMgc3VjaCBhcyBob3N0bmFtZXMsIHVzZXJuYW1lcywgYW5kIGZpbGVuYW1l cyB0byB0aGVtOgorCisgIGRlZmluZSBkb2Z0cGdldCB7CisgICAgICBpZiA8IFx2KGFyZ2MpIDQg ZW5kIDEgVXNhZ2U6IFwlMCBob3N0IHVzZXIgcmVtb3RlZmlsZSBbIGxvY2FsZmlsZSBdCisgICAg ICBmdHAgXCUxIC91c2VyOlwlMgorICAgICAgaWYgZmFpbCBlbmQgMSBGVFAgT1BFTiBcJTEgZmFp bGVkCisgICAgICBpZiBub3QgXHYoZnRwX2xvZ2dlZGluKSBlbmQgMSBGVFAgTE9HSU4gZmFpbGVk CisgICAgICBmdHAgZ2V0IHtcJTN9IHtcJTR9CisgICAgICBpZiBmYWlsIGVuZCAxIEZUUCBHRVQg XCUzIGZhaWxlZAorICAgICAgZnRwIGJ5ZQorICB9CisKKyAgIEFkZCB0aGlzIGRlZmluaXRpb24g dG8geW91ciBLZXJtaXQgY3VzdG9taXphdGlvbiBmaWxlLCBhbmQgaXQgd2lsbAorICAgYWx3YXlz IGJlIGF2YWlsYWJsZSB3aGVuIHlvdSBzdGFydCBLZXJtaXQuIFRoaXMgbWFjcm8gbGV0cyB5b3Ug ZG93bmxvYWQKKyAgIGEgZmlsZSB3aXRoIEZUUCBieSBnaXZpbmcgYSBzaW5nbGUgY29tbWFuZCwg ZS5nLjoKKworICBkb2Z0cGdldCB4eXpjb3JwLmNvbSBhbm9ueW1vdXMgb29mYS50eHQKKworMy4x MC4zLiBBdXRvbWF0aW5nIFNlY3VyZSBGVFAgU2Vzc2lvbnMKKworICAgT2Z0ZW4gd2hlbiBtYWtp bmcgc2VjdXJlIGNvbm5lY3Rpb25zLCB5b3UgYXJlIHByb21wdGVkIGludGVyYWN0aXZlbHkKKyAg IGZvciBjZXJ0YWluIGluZm9ybWF0aW9uIG9yIHBlcm1pc3Npb24gdG8gcHJvY2VlZC4gVGhlc2Ug cHJvbXB0cyBjYW4KKyAgIHN0b3AgYW4gYXV0b21hdGVkIHByb2NlZHVyZS4gVG8gYXZvaWQgdGhl bSwgeW91IG11c3QgZ2l2ZSB0aGUKKyAgIGFwcHJvcHJpYXRlIGNvbW1hbmRzIHRvIGRpc2FibGUg dGhlbSwgYW5kL29yIHN1cHBseSB0aGUgcHJvbXB0ZWQtZm9yCisgICBpbmZvcm1hdGlvbiBiZWZv cmVoYW5kLiBIZXJlIGFyZSBhIGZldyBoaW50czoKKworICAgICAqIE1ha2Ugc3VyZSB0aGF0IFNF VCBUQUtFIEVSUk9SIGFuZCBTRVQgTUFDUk8gRVJST1IgYXJlIGJvdGggT0ZGLgorICAgICAgIFRo aXMgaXMgdGhlIGRlZmF1bHQsIGJ1dCBpbiBjYXNlIHlvdSBoYXZlIHNldCBlaXRoZXIgb25lIG9m IHRoZXNlCisgICAgICAgT04gaW4geW91ciBzY3JpcHQgb3IgaW5pdGlhbGl6YXRpb24gZmlsZSwg dGhpcyBtYWtlcyB0aGUgc2NyaXB0CisgICAgICAgaGFsdCBvbiBhbnkga2luZCBvZiBlcnJvci4g Tm9ybWFsbHkgeW91IHdvdWxkIHdhbnQgdG8gY2hlY2sgZWFjaAorICAgICAgIG9wZXJhdGlvbiBm b3Igc3VjY2VzcyBvciBmYWlsdXJlIGFuZCB0YWtlIGFwcHJvcHJpYXRlIGFjdGlvbi4KKyAgICAg KiBPbiBTU0wgYW5kIFRMUyBjb25uZWN0aW9ucywgeW91IG1heSBiZSBhc2tlZCB3aGV0aGVyIGl0 IGlzIE9LIHRvCisgICAgICAgcHJvY2VlZCB3aXRoIGEgY29ubmVjdGlvbiB0byBzZXJ2ZXIgdGhh dCBwcmVzZW50cyBhIHNlbGYtc2lnbmVkCisgICAgICAgY2VydGlmaWNhdGUuIFlvdSBjYW4gdXNl IHRoZSBTRVQgQVVUSEVOVElDQVRJT04gU1NMIChvciBUTFMpIFZFUklGWQorICAgICAgIG9yIFNF VCBBVVRIIFNTTCAob3IgVExTKSBDRVJUUy1PSyBjb21tYW5kcyB0byBhdm9pZCB0aGlzIHByb21w dCBieQorICAgICAgIG5vdCByZXF1ZXN0aW5nIGEgY2VydGlmaWNhdGUgZnJvbSB0aGUgcGVlci4K KyAgICAgKiAoTW9yZSB0byBiZSBhZGRlZC4uLikKKworICAgWyBbMzU5XVRvcCBdIFsgWzM2MF1G VFAgVG9wIF0gWyBbMzYxXUZUUCBTY3JpcHQgVHV0b3JpYWwgXSBbCisgICBbMzYyXUMtS2VybWl0 IEhvbWUgXSBbIFszNjNdS2VybWl0IEhvbWUgXQorCiszLjExLiBBZHZhbmNlZCBGVFAgUHJvdG9j b2wgRmVhdHVyZXMKKworICAgVGhlIHJlbWFpbmRlciBvZiB0aGUgRlRQIGRvY3VtZW50YXRpb24g KHRocm91Z2ggdGhlIGVuZCBvZiBTZWN0aW9uIDMpCisgICBpcyBuZXcgdG8gQy1LZXJtaXQgOC4w LjIwNiwgYnV0IHdlIGxlYXZlIGl0IGluIGJsYWNrIHRvIHByZXZlbnQKKyAgIGhlYWRhY2hlcy4g RXhjZXB0IGZvciB0aXRsZXMuCisgICAgICogWzM2NF1URVJNSU5PTE9HWQorICAgICAqIFszNjVd RkVBVFVSRSBORUdPVElBVElPTgorICAgICAqIFszNjZdVVNJTkcgTUdFVDogTkxTVCBWRVJTVVMg TUxTRAorICAgICAqIFszNjddRVhBTVBMRVMKKyAgICAgKiBbMzY4XVJFRkVSRU5DRVMKKworICAg VGhlIG5ldyByZWxlYXNlcyBvZiBbMzY5XUMtS2VybWl0ICg4LjAuMjA2KSBhbmQgWzM3MF1LZXJt aXQgOTUgKDIuMSkKKyAgIHN1cHBvcnQgbmV3IEZUUCBwcm90b2NvbCBmZWF0dXJlcyBmcm9tIFJG QyAyMzg5IGFzIHdlbGwgYXMgbW9zdCBvZgorICAgd2hhdCdzIGluIHRoZSBFbHogYW5kIEhldGht b24gRXh0ZW5zaW9ucyB0byBGVFAgSW50ZXJuZXQgRHJhZnQgKHNlZQorICAgWzM3MV1SZWZlcmVu Y2VzKS4gU29tZSBvZiB0aGVzZSBmZWF0dXJlcywgc3VjaCBhcyBTSVpFIChyZXF1ZXN0IGEKKyAg IGZpbGUncyBzaXplKSwgTURUTSAocmVxdWVzdCBmaWxlJ3MgbW9kaWZpY2F0aW9uIHRpbWUpLCBh bmQgUkVTVAorICAgKHJlc3RhcnQgaW50ZXJydXB0ZWQgdHJhbnNmZXIpIGhhdmUgYmVlbiB3aWRl bHkgaW1wbGVtZW50ZWQgaW4gRlRQCisgICBjbGllbnRzIGFuZCBzZXJ2ZXJzIGZvciB5ZWFycyAo YXMgd2VsbCBhcyBpbiB0aGUgaW5pdGlhbCByZWxlYXNlIG9mIHRoZQorICAgS2VybWl0IEZUUCBj bGllbnRzKS4gT3RoZXJzIHN1Y2ggYXMgRkVBVCBhbmQgTUxTRCBhcmUgcmFyZWx5IHNlZW4gYW5k CisgICBhcmUgbmV3IHRvIHRoZSB1cGNvbWluZyBLZXJtaXQgcmVsZWFzZXMuIFRWRlMgKFRyaXZp YWwgVmlydHVhbCBGaWxlCisgICBTdG9yZSkgaXMgc3VwcG9ydGVkIGltcGxpY2l0bHksIGFuZCB0 aGUgVVRGLTggY2hhcmFjdGVyLXNldCBpcyBhbHJlYWR5CisgICBmdWxseSBzdXBwb3J0ZWQgYXQg dGhlIHByb3RvY29sIGFuZCBkYXRhLWludGVyY2hhbmdlIGxldmVsLgorCisgICBGb3IgS2VybWl0 IHVzZXJzLCB0aGUgbWFpbiBiZW5lZml0IG9mIHRoZSBuZXcgRlRQIHByb3RvY29sIGV4dGVuc2lv bnMKKyAgIGlzIHRoZSBhYmlsaXR5IHRvIGRvIHJlY3Vyc2l2ZSBkb3dubG9hZHMuIEJ1dCB0aGUg ZXh0ZW5zaW9ucyBhbHNvCisgICBpbnRyb2R1Y2UgY29tcGxpY2F0aW9ucyBhbmQgdHJhZGVvZmZz IHRoYXQgeW91IHNob3VsZCBiZSBhd2FyZSBvZi4gT2YKKyAgIGNvdXJzZSBLZXJtaXQgdHJpZXMg dG8gImRvIHRoZSByaWdodCB0aGluZyIgYXV0b21hdGljYWxseSBpbiBldmVyeSBjYXNlCisgICBm b3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuIEJ1dCAoYXMgbm90ZWQgbGF0ZXIpIHNvbWUgY2Fz ZXMgYXJlCisgICBpbmhlcmVudGx5IGFtYmlndW91cyBhbmQvb3IgY2FuIHJlc3VsdCBpbiBuYXN0 eSBzdXJwcmlzZXMsIGFuZCBmb3IKKyAgIHRob3NlIHNpdHVhdGlvbnMgbmV3IGNvbW1hbmRzIGFu ZCBzd2l0Y2hlcyBhcmUgYXZhaWxhYmxlIHRvIGdpdmUgeW91CisgICBwcmVjaXNlIGNvbnRyb2wg b3ZlciBLZXJtaXQncyBiZWhhdmlvciwgaW4gY2FzZSB0aGUgZGVmYXVsdHMgZG9uJ3QKKyAgIHBy b2R1Y2UgdGhlIGRlc2lyZWQgcmVzdWx0cy4KKworMy4xMS4xLiBUZXJtaW5vbG9neQorCisgICBD b21tYW5kLWxpbmUgRlRQIGNsaWVudHMgc3VjaCBhcyBLZXJtaXQgKGFzIHdlbGwgYXMgdGhlIHRy YWRpdGlvbmFsIEZUUAorICAgcHJvZ3JhbXMgZm91bmQgb24gVW5peCwgVk1TLCAuLi4sIGV2ZW4g V2luZG93cykgaGF2ZSBjb21tYW5kcyBsaWtlIFBVVCwKKyAgIE1QVVQsIEdFVCwgTUdFVCwgYW5k IEJZRSwgd2hpY2ggdGhleSBjb252ZXJ0IGludG8gemVybyBvciBtb3JlIEZUUAorICAgcHJvdG9j b2wgY29tbWFuZHMsIHN1Y2ggYXMgTkxTVCwgUkVUUiwgUVVJVC4gRm9yIGNsYXJpdHksIHdlJ2xs IHVzZQorICAgImNvbW1hbmQiIHRvIHJlZmVyIHRvIGNvbW1hbmRzIGdpdmVuIGJ5IHRoZSB1c2Vy IHRvIHRoZSBGVFAgY2xpZW50LCBhbmQKKyAgICJkaXJlY3RpdmUiIGZvciBGVFAgcHJvdG9jb2wg Y29tbWFuZHMgc2VudCBieSB0aGUgRlRQIGNsaWVudCB0byB0aGUgRlRQCisgICBzZXJ2ZXIuCisK KzMuMTEuMi4gRmVhdHVyZSBOZWdvdGlhdGlvbgorCisgICBOZXcgRlRQIHByb3RvY29sIGZlYXR1 cmVzIGFyZSBuZWdvdGlhdGVkIGJ5IHRoZSBjbGllbnQgc2VuZGluZyBhIEZFQVQKKyAgIGRpcmVj dGl2ZSBhbmQgdGhlIHNlcnZlciByZXNwb25kaW5nIHdpdGggYSBsaXN0IG9mIChuZXcpIGZlYXR1 cmVzIGl0CisgICBzdXBwb3J0cywgb3IgZWxzZSB3aXRoIGFuIGVycm9yIGluZGljYXRpb24gaWYg aXQgZG9lcyBub3Qgc3VwcG9ydCB0aGUKKyAgIEZFQVQgZGlyZWN0aXZlIGF0IGFsbCwgaW4gd2hp Y2ggY2FzZSB0aGUgY2xpZW50IGhhcyB0byBndWVzcyB3aGljaCBuZXcKKyAgIGZlYXR1cmVzIGl0 IHN1cHBvcnRzIChLZXJtaXQgZ3Vlc3NlcyB0aGF0IGl0IHN1cHBvcnRzIFNJWkUgYW5kIE1EVE0g YnV0CisgICBub3QgTUxTVCkuIE5vdGUgdGhhdCB0aGUgTUxTVCBmZWF0dXJlIGluY2x1ZGVzIE1M U0QsIHdoaWNoIGlzIG5vdAorICAgbGlzdGVkIHNlcGFyYXRlbHkgYXMgYSBmZWF0dXJlLgorCisg ICBHdWVzc2luZyBpcyBuaWNlIHdoZW4gaXQgd29ya3MsIGJ1dCBzb21ldGltZXMgaXQgZG9lc24n dCwgYW5kIHNvbWUgRlRQCisgICBzZXJ2ZXJzIGJlY29tZSBjb25mdXNlZCB3aGVuIHlvdSBzZW5k IHRoZW0gYSBkaXJlY3RpdmUgdGhleSBkb24ndAorICAgdW5kZXJzdGFuZCwgb3IgdGhleSBkbyBz b21ldGhpbmcgeW91IGRpZG4ndCB3YW50LCBzb21ldGltZXMgdG8gdGhlCisgICBwb2ludCBvZiBj bG9zaW5nIHRoZSBjb25uZWN0aW9uLiBGb3IgdGhpcyByZWFzb24sIEtlcm1pdCBsZXRzIHlvdQor ICAgb3ZlcnJpZGUgZGVmYXVsdCBvciBuZWdvdGlhdGVkIGZlYXR1cmVzIHdpdGggdGhlIGZvbGxv d2luZyBuZXcKKyAgIGNvbW1hbmRzOgorCisgICBGVFAgeyBFTkFCTEUsIERJU0FCTEUgfSBGRUFU CisgICAgICAgICAgRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgYXV0b21hdGljIHNlbmRpbmcgb2Yg YSBGRUFUIGRpcmVjdGl2ZQorICAgICAgICAgIHVwb24gY29ubmVjdGlvbiB0byBhbiBGVFAgc2Vy dmVyLiBOb3RlIHRoYXQgRlRQIFsgT1BFTiBdIC9OT0lOSVQKKyAgICAgICAgICAgIGFsc28gaW5o aWJpdHMgc2VuZGluZyB0aGUgRkVBVCBkaXJlY3RpdmUgKGFuZCBzZXZlcmFsIG90aGVycykKKyAg ICAgICAgICBmb3IgdGhlIGNvbm5lY3Rpb24gYmVpbmcgT1BFTidkLCBidXQgd2l0aG91dCBuZWNl c3NhcmlseQorICAgICAgICAgIGRpc2FibGluZyBGRUFUIGZvciBzdWJzZXF1ZW50IGNvbm5lY3Rp b25zIGluIHRoZSBzYW1lIEtlcm1pdAorICAgICAgICAgIGluc3RhbmNlLiBGRUFUIGlzIEVOQUJM RUQgYnkgZGVmYXVsdCwgaW4gd2hpY2ggY2FzZSBtYW55IEZUUAorICAgICAgICAgIHNlcnZlcnMg YXJlIGxpa2VseSB0byByZXBseToKKworNTAwICdGRUFUJzogY29tbWFuZCBub3QgdW5kZXJzdG9v ZAorCisgICAgICAgICAgd2hpY2ggaXMgbm9ybWFsbHkgaGFybWxlc3MgKGJ1dCB5b3UgbmV2ZXIg a25vdykuIChJbiBDLUtlcm1pdAorICAgICAgICAgIDguMC4yMDgsIHRoaXMgZXJyb3IgbWVzc2Fn ZSBpcyBzdXBwcmVzc2VkIHVubGVzcyB5b3UgU0VUIEZUUAorICAgICAgICAgIERFQlVHIE9OLikK KworICAgRlRQIEVOQUJMRSB7IE1EVE0sIE1MU1QsIFNJWkUgfQorICAgICAgICAgIEVuYWJsZXMg dGhlIGdpdmVuIGRpcmVjdGl2ZSBmb3IgaW1wbGljaXQgdXNlIGJ5IHRoZSBGVFAgR0VUIGFuZAor ICAgICAgICAgIE1HRVQgY29tbWFuZHMgaW4gY2FzZSBpdCBoYXMgYmVlbiBkaXNhYmxlZCBvciBl cnJvbmVvdXNseQorICAgICAgICAgIG9taXR0ZWQgYnkgdGhlIHNlcnZlciBpbiBpdHMgRkVBVCBy ZXNwb25zZS4gTm90ZTogTUxTRCBjYW4gYmUKKyAgICAgICAgICB1c2VkIGluIHRoZSBGVFAgRU5B QkxFIGFuZCBESVNBQkxFIGNvbW1hbmRzIGFzIGEgc3lub255bSBmb3IKKyAgICAgICAgICBNTFNU LiBZT1UgTVVTVCBHSVZFIFRISVMgQ09NTUFORCBBRlRFUiBNQUtJTkcgVEhFIEZUUAorICAgICAg ICAgIENPTk5FQ1RJT04uCisKKyAgIEZUUCBESVNBQkxFIHsgTURUTSwgTUxTVCwgU0laRSB9Cisg ICAgICAgICAgRGlzYWJsZXMgaW1wbGljaXQgdXNlIG9mIHRoZSBnaXZlbiBkaXJlY3RpdmUgYnkg R0VUIG9yIE1HRVQgaW4KKyAgICAgICAgICBjYXNlIGl0IGNhdXNlcyBwcm9ibGVtczsgZm9yIGV4 YW1wbGUsIGJlY2F1c2UgaXQgbWFrZXMgbXVsdGlmaWxlCisgICAgICAgICAgZG93bmxvYWRzIHRh a2UgdG9vIGxvbmcgb3IgdGhlIHNlcnZlciBhbm5vdW5jZXMgaXQgZXJyb25lb3VzbHkKKyAgICAg ICAgICBvciBtaXNpbXBsZW1lbnRzIGl0LiBVc2UgRElTQUJMRSBGRUFUIGJlZm9yZSBtYWtpbmcg YSBjb25uZWN0aW9uCisgICAgICAgICAgdG8gcHJldmVudCBLZXJtaXQgZnJvbSBzZW5kaW5nIHRo ZSBGRUFUIGRpcmVjdGl2ZSBhcyBwYXJ0IG9mIGl0cworICAgICAgICAgIGluaXRpYWwgc2VxdWVu Y2UuIE5vdGUgdGhhdCBkaXNhYmxpbmcgRkVBVCwgU0laRSwgb3IgTURUTSBkb2VzCisgICAgICAg ICAgbm90IHByZXZlbnQgeW91IGZyb20gZXhlY3V0aW5nIGV4cGxpY2l0IEZUUCBGRUFUVVJFUywg RlRQIFNJWkUsCisgICAgICAgICAgb3IgRlRQIE1PRFRJTUUgY29tbWFuZHMuIEFsc28gbm90ZSB0 aGF0IGRpc2FibGluZyBTSVpFIHByZXZlbnRzCisgICAgICAgICAgUFVUIC9SRVNUQVJUIChyZWNv dmVyeSBvZiBpbnRlcnJ1cHRlZCB1cGxvYWRzKSBmcm9tIHdvcmtpbmcuIFlPVQorICAgICAgICAg IE1VU1QgR0lWRSBUSElTIENPTU1BTkQgQUZURVIgTUFLSU5HIFRIRSBGVFAgQ09OTkVDVElPTi4K KworICAgVG8gZW5hYmxlIG9yIGRpc2FibGUgbW9yZSB0aGFuIG9uZSBmZWF0dXJlLCB1c2UgbXVs dGlwbGUgRlRQIEVOQUJMRSBvcgorICAgRlRQIERJU0FCTEUgY29tbWFuZHMuIFRoZSBTSE9XIEZU UCBjb21tYW5kIHNob3dzIHdoaWNoIGZlYXR1cmVzIGFyZQorICAgY3VycmVudGx5IGVuYWJsZWQg YW5kIGRpc2FibGVkLgorCisgICBGVFAgRkVBVFVSRVMKKyAgICAgICAgICBUaGlzIGNvbW1hbmQg c2VuZHMgYSBGRUFUIGRpcmVjdGl2ZSB0byB0aGUgc2VydmVyLiBJbiBjYXNlIHlvdQorICAgICAg ICAgIGhhdmUgYmVlbiBkaXNhYmxpbmcgYW5kIGVuYWJsaW5nIGRpZmZlcmVudCBmZWF0dXJlcywg dGhpcworICAgICAgICAgIHJlc3luY2hyb25pemVzIEtlcm1pdCdzIGZlYXR1cmUgbGlzdCB3aXRo IHRoZSBzZXJ2ZXIncy4gSWYgdGhlCisgICAgICAgICAgc2VydmVyIGRvZXMgbm90IHN1cHBvcnQg dGhlIEZFQVQgZGlyZWN0aXZlLCBLZXJtaXQncyBmZWF0dXJlCisgICAgICAgICAgbGlzdCBpcyBu b3QgY2hhbmdlZC4KKworICAgRlRQIE9QVElPTlMgZGlyZWN0aXZlCisgICAgICAgICAgSW5mb3Jt YXRpb25hbCBvbmx5OiB0aGUgc2VydmVyIHRlbGxzIHdoYXQgb3B0aW9ucywgaWYgYW55LCBpdAor ICAgICAgICAgIHN1cHBvcnRzIGZvciB0aGUgZ2l2ZW4gZGlyZWN0aXZlLCBlLmcuIE1MU1QuIEZh aWxzIGlmIHRoZSBzZXJ2ZXIKKyAgICAgICAgICBkb2VzIG5vdCBzdXBwb3J0IHRoZSBPUFRTIGRp cmVjdGl2ZSBvciBpZiB0aGUgZGlyZWN0aXZlIGZvcgorICAgICAgICAgIHdoaWNoIG9wdGlvbnMg YXJlIHJlcXVlc3RlZCBpcyBub3QgdmFsaWQuIFRoZSBkaXJlY3RpdmUgaXMKKyAgICAgICAgICBj YXNlLWluc2Vuc2l0aXZlLgorCisgICBGVFAgU0laRSBmaWxlbmFtZQorICAgICAgICAgIFNlbmRz IGEgU0laRSBkaXJlY3RpdmUgdG8gdGhlIHNlcnZlciBmb3IgdGhlIGdpdmVuIGZpbGUuIFRoZQor ICAgICAgICAgIGZpbGVuYW1lIG11c3Qgbm90IGNvbnRhaW4gd2lsZGNhcmRzLiBUaGUgc2VydmVy IHJlc3BvbmRzIHdpdGggYW4KKyAgICAgICAgICBlcnJvciBpZiB0aGUgZmlsZSBjYW4ndCBiZSBm b3VuZCwgaXMgbm90IGFjY2Vzc2libGUsIG9yIHRoZSBTSVpFCisgICAgICAgICAgZGlyZWN0aXZl IGlzIG5vdCBzdXBwb3J0ZWQsIG90aGVyd2lzZSB3aXRoIHRoZSBsZW5ndGggb2YgdGhlCisgICAg ICAgICAgZmlsZSBpbiBieXRlcywgd2hpY2ggS2VybWl0IGRpc3BsYXlzIGFuZCBhbHNvIG1ha2Vz IGF2YWlsYWJsZSB0bworICAgICAgICAgIHlvdSBpbiBpdHMgXHYoZnRwX21lc3NhZ2UpIHZhcmlh YmxlLiBJZiB0aGUgZGlyZWN0aXZlIGlzCisgICAgICAgICAgc3VjY2Vzc2Z1bCwgS2VybWl0IChy ZS0pZW5hYmxlcyBpdCBmb3IgaW50ZXJuYWwgdXNlIGJ5IHRoZSBHRVQKKyAgICAgICAgICBhbmQg TUdFVCBkaXJlY3RpdmVzIG9uIHRoaXMgY29ubmVjdGlvbi4KKworICAgRlRQIE1PRFRJTUUgZmls ZW5hbWUKKyAgICAgICAgICBXb3JrcyBqdXN0IGxpa2UgdGhlIFNJWkUgZGlyZWN0aXZlIGV4Y2Vw dCBpdCBzZW5kcyBhbiBNRFRNCisgICAgICAgICAgZGlyZWN0aXZlLiBVcG9uIHN1Y2Nlc3MsIHRo ZSBzZXJ2ZXIgc2VuZHMgbW9kaWZpY2F0aW9uIGRhdGUtdGltZQorICAgICAgICAgIHN0cmluZywg d2hpY2ggS2VybWl0IGludGVycHJldHMgZm9yIHlvdSBhbmQgYWxzbyBtYWtlcyBhdmFpbGFibGUK KyAgICAgICAgICBpbiBpdHMgXHYoZnRwX21lc3NhZ2UpIHZhcmlhYmxlLgorCisgICBXaGVuZXZl ciBhIFNJWkUgb3IgTURUTSBkaXJlY3RpdmUgaXMgc2VudCBpbXBsaWNpdGx5IGFuZCByZWplY3Rl ZCBieQorICAgdGhlIHNlcnZlciBiZWNhdXNlIGl0IGlzIHVua25vd24sIEtlcm1pdCBhdXRvbWF0 aWNhbGx5IGRpc2FibGVzIGl0LgorCiszLjExLjMuIFVzaW5nIE1HRVQ6IE5MU1QgdmVyc3VzIE1M U0QKKworICAgV2hlbiB5b3UgZ2l2ZSBhbiBNR0VUIGNvbW1hbmQgdG8gYW4gRlRQIGNsaWVudCwg aXQgc2VuZHMgYSByZXF1ZXN0IHRvCisgICB0aGUgRlRQIHNlcnZlciBmb3IgYSBsaXN0IG9mIGZp bGVzLCBhbmQgdGhlbiB1cG9uIHN1Y2Nlc3NmdWwgcmVjZWlwdCBvZgorICAgdGhlIGxpc3QsIGdv ZXMgdGhyb3VnaCBpdCBhbmQgaXNzdWVzIGEgUkVUUiAocmV0cmlldmUpIGRpcmVjdGl2ZSBmb3IK KyAgIGVhY2ggZmlsZSBvbiB0aGUgbGlzdCAob3IgcG9zc2libHkgb25seSBmb3Igc2VsZWN0ZWQg ZmlsZXMpLgorCisgICBXaXRoIHRoZSBuZXcgRlRQIHByb3RvY29sIGV4dGVuc2lvbnMsIG5vdyB0 aGVyZSBhcmUgdHdvIHdheXMgdG8gZ2V0IHRoZQorICAgbGlzdCBvZiBmaWxlczogdGhlIE5MU1Qg ZGlyZWN0aXZlLCB3aGljaCBoYXMgYmVlbiBwYXJ0IG9mIEZUUCBwcm90b2NvbAorICAgc2luY2Ug dGhlIGJlZ2lubmluZywgYW5kIHRoZSBuZXcgTUxTRCBkaXJlY3RpdmUsIHdoaWNoIGlzIG5ldyBh bmQgbm90CisgICB5ZXQgd2lkZWx5IGltcGxlbWVudGVkLiBXaGVuIE5MU1QgaXMgdXNlZCBhbmQg eW91IGdpdmUgYSBjb21tYW5kIGxpa2UKKyAgICJtZ2V0ICoudHh0IiwgdGhlIEZUUCBjbGllbnQg c2VuZHM6CisKK05MU1QgKi50eHQKKworICAgYW5kIHRoZSBzZXJ2ZXIgc2VuZHMgYmFjayBhIGxp c3Qgb2YgdGhlIGZpbGVzIHdob3NlIG5hbWVzIG1hdGNoLCBlLmcuCisKK2Zvby50eHQKK2Jhci50 eHQKK2Jhei50eHQKKworICAgVGhlbiB3aGVuIGRvd25sb2FkaW5nIGVhY2ggZmlsZSwgdGhlIGNs aWVudCBzZW5kcyBTSVpFIChpZiBpdCB3YW50cworICAgaGF2ZSBhIHBlcmNlbnQtZG9uZSBkaXNw bGF5KSBhbmQgTURUTSAoaWYgaXQgd2FudHMgdG8gc2V0IHRoZQorICAgZG93bmxvYWRlZCBmaWxl J3MgdGltZXN0YW1wIHRvIG1hdGNoIHRoYXQgb2YgdGhlIG9yaWdpbmFsKSwgYXMgd2VsbCBhcwor ICAgUkVUUiAodG8gcmV0cmlldmUgdGhlIGZpbGUpLgorCisgICBCdXQgd2hlbiBNTFNEIGlzIHVz ZWQsIHRoZSBjbGllbnQgaXMgbm90IHN1cHBvc2VkIHRvIHNlbmQgdGhlIGZpbGVuYW1lCisgICBv ciB3aWxkY2FyZCB0byB0aGUgc2VydmVyOyBpbnN0ZWFkIGl0IHNlbmRzIGFuIE1MU0QgZGlyZWN0 aXZlIHdpdGggbm8KKyAgIGFyZ3VtZW50IChvciB0aGUgbmFtZSBvZiBhIGRpcmVjdG9yeSksIGFu ZCB0aGUgc2VydmVyIHNlbmRzIGJhY2sgYSBsaXN0CisgICBvZiBhbGwgdGhlIGZpbGVzIGluIHRo ZSBjdXJyZW50IG9yIGdpdmVuIGRpcmVjdG9yeTsgdGhlbiB0aGUgY2xpZW50CisgICBnb2VzIHRo cm91Z2ggdGhlIGxpc3QgYW5kIGNoZWNrcyBlYWNoIGZpbGUgdG8gc2VlIGlmIGl0IG1hdGNoZXMg dGhlCisgICBnaXZlbiBwYXR0ZXJuLCB0aGUgcmF0aW9uYWxlIGJlaW5nIHRoYXQgdGhlIHVzZXIg a25vd3Mgb25seSB0aGUgbG9jYWwKKyAgIGNvbnZlbnRpb25zIGZvciB3aWxkY2FyZHMgYW5kIG5v dCBuZWNlc3NhcmlseSB0aGUgc2VydmVyJ3MgY29udmVudGlvbnMuCisgICBTbyB3aXRoIE5MU1Qg dGhlIHNlcnZlciBpbnRlcnByZXRzIHdpbGRjYXJkczsgd2l0aCBNTFNEIHRoZSBjbGllbnQKKyAg IGRvZXMuCisKKyAgICAgVGhlIGludGVycHJldGF0aW9uIG9mIE5MU1Qgd2lsZGNhcmRzIGJ5IHRo ZSBzZXJ2ZXIgaXMgbm90CisgICAgIG5lY2Vzc2FyaWx5IHJlcXVpcmVkIG9yIGV2ZW4gZW52aXNp b25lZCBieSB0aGUgRlRQIHByb3RvY29sCisgICAgIGRlZmluaXRpb24gKFJGQyA5NTkpLCBidXQg aW4gcHJhY3RpY2UgbW9zdCBjbGllbnRzIGFuZCBzZXJ2ZXJzIHdvcmsKKyAgICAgdGhpcyB3YXku CisKKyAgIFRoZSBwcmluY2lwYWwgYWR2YW50YWdlIG9mIE1MU0QgaXMgdGhhdCBpbnN0ZWFkIG9m IHNlbmRpbmcgYmFjayBhCisgICBzaW1wbGUgbGlzdCBvZiBmaWxlbmFtZXMsIGl0IHNlbmRzIGJh Y2sgYSBraW5kIG9mIGRhdGFiYXNlIGluIHdoaWNoCisgICBlYWNoIGVudHJ5IGNvbnRhaW5zIGEg ZmlsZW5hbWUgdG9nZXRoZXIgd2l0aCBpbmZvcm1hdGlvbiBhYm91dCB0aGUKKyAgIGZpbGU6IHR5 cGUsIHNpemUsIHRpbWVzdGFtcCwgYW5kIHNvIG9uOyBmb3IgZXhhbXBsZToKKworc2l6ZT0wO3R5 cGU9ZGlyO3Blcm09ZWw7bW9kaWZ5PTIwMDIwNDA5MTkxNTMwOyBiaW4KK3NpemU9MzkxOTMxMjt0 eXBlPWZpbGU7cGVybT1yO21vZGlmeT0yMDAwMDMxMDE0MDQwMDsgYmFyLnR4dAorc2l6ZT02Njg2 MTc2O3R5cGU9ZmlsZTtwZXJtPXI7bW9kaWZ5PTIwMDAxMjE1MTgxMDAwOyBiYXoudHh0CitzaXpl PTM4MjAwOTI7dHlwZT1maWxlO3Blcm09cjttb2RpZnk9MjAwMDAzMTAxNDAzMDA7IGZvby50eHQK K3NpemU9Mjc0Mzk7dHlwZT1maWxlO3Blcm09cjttb2RpZnk9MjAwMjA5MjMxNTEzMTI7IGZvby56 aXAKKyhldGMgZXRjLi4uKQorCisgICAoSWYgdGhlIGZvcm1hdCBvZiB0aGUgZmlsZSBsaXN0IHdl cmUgdGhlIG9ubHkgZGlmZmVyZW5jZSBiZXR3ZWVuIE5MU1QKKyAgIGFuZCBNTFNELCB0aGUgZGlz Y3Vzc2lvbiB3b3VsZCBiZSBmaW5pc2hlZDogaXQgd291bGQgYWx3YXlzIGJlIGJldHRlcgorICAg dG8gdXNlIE1MU0Qgd2hlbiBhdmFpbGFibGUsIGFuZCB0aGUgTUdFVCB1c2VyIGludGVyZmFjZSB3 b3VsZCBuZWVkIG5vCisgICBjaGFuZ2VzLiBCdXQgdGhlcmUncyBhIGxvdCBtb3JlIHRvIE1MU0Qg dGhhbiB0aGUgZmlsZS1saXN0IGZvcm1hdDsgcmVhZAorICAgb24uLi4pCisKKyAgIFRoZSBjbGll bnQgbGVhcm5zIHdoZXRoZXIgdGhlIHNlcnZlciBzdXBwb3J0cyBNTFNEIGluIEZFQVQgZXhjaGFu Z2UuCisgICBCdXQgdGhlIGZhY3QgdGhhdCB0aGUgc2VydmVyIHN1cHBvcnRzIE1MU0QgZG9lc24n dCBtZWFuIHRoZSBjbGllbnQKKyAgIHNob3VsZCBhbHdheXMgdXNlIGl0LiBJdCBpcyBiZXR0ZXIg dG8gdXNlIE1MU0Q6CisKKyAgICAgKiBPbiBjb25uZWN0aW9ucyB3aGVyZSB0aGUgc2VydmVyIGlt cG9zZXMgYSB0aW1lIHBlbmFsdHkgZm9yIGV2ZXJ5CisgICAgICAgY29tbWFuZCwgZS5nLiB0aGUg UmVkIEhhdCBSYXdoaWRlIHNlcnZlci4gV2l0aCBNTFNELCB0aGUgY2xpZW50CisgICAgICAgbmVl ZHMgdG8gc2VuZCBvbmx5IG9uZSBjb21tYW5kIChSRVRSKSBwZXIgZmlsZSwgd2hlcmVhcyBOTFNU CisgICAgICAgcmVxdWlyZXMgdGhyZWUgKFNJWkUsIFJFVFIsIGFuZCBNRFRNKS4gU3VwcG9zZSB0 aGVyZSBpcyBhIDMwLXNlY29uZAorICAgICAgIGRlbGF5IGZvciBlYWNoIGNvbW1hbmQgYW5kIDEw MDAgZmlsZXMgYXJlIHRvIGJlIGZldGNoZWQ7IGluIHRoYXQKKyAgICAgICBjYXNlLCBNTFNEIHNh dmVzIDYwLDAwMCBzZWNvbmRzID0gMTAwMCBtaW51dGVzID0gMTYgaG91cnMgYW5kIDQwCisgICAg ICAgbWludXRlcy4KKyAgICAgKiBGb3IgcmVjdXJzaXZlIGRvd25sb2FkcyBzaW5jZSB0aGVyZSBp cyBubyBkZXBlbmRhYmxlIHdheSB0bworICAgICAgIGRvd25sb2FkIGRpcmVjdG9yeSB0cmVlcyB3 aXRoIE5MU1QuCisKKyAgIEJ1dCBpdCBpcyBiZXR0ZXIgdG8gdXNlIE5MU1Q6CisKKyAgICAgKiBJ ZiB5b3Ugd2FudCBvbmx5IGEgY291cGxlIHNob3J0IGZpbGVzIG91dCBvZiBhIGxhcmdlIGRpcmVj dG9yeS4gSW4KKyAgICAgICB0aGlzIGNhc2UsIE5MU1QgaXMgdGhlIGJldHRlciBjaG9pY2Ugc2lu Y2UgdGhlIHNlcnZlciBzZW5kcyBhIGxpc3QKKyAgICAgICBvZiBvbmx5IHRoZSBmaWxlcyB5b3Ug d2FudCwgbm90IGEgbGlzdCBvZiAoc2F5KSBhIG1pbGxpb24gZmlsZXMsCisgICAgICAgd2hpY2gg Y2FuIG1ha2UgYSBiaWcgZGlmZmVyZW5jZSBvbiBzbG93IGNvbm5lY3Rpb25zLiBGb3IgZXhhbXBs ZSwKKyAgICAgICBzdXBwb3NlIHlvdXIgd2lsZGNhcmQgbWF0Y2hlcyB0aHJlZSBmaWxlcyBvZiAx SyBlYWNoLCBidXQgdGhlCisgICAgICAgbWlsbGlvbi1maWxlIGxpc3RpbmcgaXMgODBNQiBsb25n LCBhbmQgeW91ciBjb25uZWN0aW9uIGlzIHRocm91Z2ggYQorICAgICAgIG1vZGVtLiBUaGUgb3Zl cmhlYWQgb2YgdXNpbmcgTUxTRCBpcyBwcmFjdGljYWxseSBpbmZpbml0ZS4KKyAgICAgKiBJZiB0 aGUgc2VydmVyIHN1cHBvcnRzIHdpbGRjYXJkaW5nIGZlYXR1cmVzIG5vdCBrbm93biB0byB0aGUK KyAgICAgICBjbGllbnQsIGJ1dCB0aGF0IGNhbiBiZSB1c2VkIHRvIGFjaGlldmUgZGVzaXJhYmxl IGVmZmVjdHMgb3RoZXJ3aXNlCisgICAgICAgdW5vYnRhaW5hYmxlLCBzdWNoIGFzICJbZGlyLi4u XSoudHh0IiBpbiBWTVMgb3IgQU9TL1ZTICJleGNlcHQiCisgICAgICAgY2xhdXNlcy4KKyAgICAg KiBJZiB5b3UgaGF2ZSBiZWVuIGdpdmVuIGEgd2lsZGNhcmQgc3RyaW5nIGJ5IGFuIEZUUCBzaXRl CisgICAgICAgYWRtaW5pc3RyYXRvciBmb3IgZmV0Y2hpbmcgYSBzcGVjaWZpYyBncm91cCBvZiBm aWxlcyBvdXQgb2YgYQorICAgICAgIGxhcmdlciBkaXJlY3RvcnksIGUuZy4gIm1nZXQgY2tbY3V3 XSouW2N3aF0gbWFrZWZpbGUiLCB0aGF0IGlzCisgICAgICAgZXhwZWN0ZWQgdG8gd29yayB3aXRo IGFueSBjbGllbnQgKGFuIEZUUCBzaXRlIGFkbWluaXN0cmF0b3IgY2FuJ3QKKyAgICAgICBiZSBl eHBlY3RlZCB0byBrbm93IHRoZSB3aWxkY2FyZCBzeW50YXggb2YgZXZlcnkgRlRQIGNsaWVudCku CisKKyAgIEJ1dCB3aGVuIHVzaW5nIE1MU0QgdGhlcmUgYXJlIGNvbXBsaWNhdGlvbnM6CisKKyAg ICAgKiBNTFNEIHdhbnRzIGVpdGhlciBhIGJsYW5rIGFyZ3VtZW50IChtZWFuaW5nIHRoZSBjdXJy ZW50IGRpcmVjdG9yeSkKKyAgICAgICBvciBlbHNlIHRoZSBuYW1lIG9mIGEgc3BlY2lmaWMgZGly ZWN0b3J5LiBUaGUgY2xpZW50IG11c3Qgbm90IHNlbmQKKyAgICAgICBpdCBhIHdpbGRjYXJkIG9y IGEgZmlsZW5hbWUuCisgICAgICogQnV0IGlmIHRoZSB1c2VyJ3MgY29tbWFuZCBpcyAibWdldCB4 eHgiLCBob3cgZG9lcyB0aGUgY2xpZW50IGtub3cKKyAgICAgICB3aGV0aGVyIHRvIHNlbmQgInh4 eCIgaW4gdGhlIE1MU0QgZGlyZWN0aXZlPyBJdCBtaWdodCBiZSB0aGUgbmFtZQorICAgICAgIG9m IGEgZGlyZWN0b3J5IG9uIG9uIHRoZSBzZXJ2ZXIsIGluIHdoaWNoIGNhc2UgaXQgc2hvdWxkIGJl IHNlbnQsCisgICAgICAgb3IgaXQgbWlnaHQgYmUgdGhlIG5hbWUgb2YgYSBmaWxlIG9uIHRoZSBz ZXJ2ZXIgKG9yIGEgd2lsZGNhcmQpLCBpbgorICAgICAgIHdoaWNoIGNhc2UgaXQgbXVzdCBub3Qg YmUgc2VudC4gU2luY2UgdGhlIGNsaWVudCBrbm93cyBpdHMgb3duCisgICAgICAgd2lsZGNhcmQg c3ludGF4LCB0aGVuIGluIG1vc3QgY2FzZXMgaXQgd291bGQgYmUgcmlnaHQgdG8gc2VuZAorICAg ICAgICJNTFNEIiB3aXRoIG5vIGFyZ3VtZW50IGlmIHh4eCBpcyB3aWxkLCBhbmQgdG8gc2VuZCAi TUxTRCB4eHgiIGlmCisgICAgICAgaXQgaXMgbm90LgorICAgICAqIEJ1dCBzdXBwb3NlIHRoZSBz ZXJ2ZXIncyBmaWxlIHN5c3RlbSBhbGxvd3MgZmlsZW5hbWUgY2hhcmFjdGVycworICAgICAgIHRo YXQgY29ycmVzcG9uZCB3aXRoIHRoZSBjbGllbnQncyB3aWxkY2FyZCBzeW50YXg/IEZvciBleGFt cGxlOgorICAgICAgICJbYWJjXSIgY291bGQgYmUgZWl0aGVyIGEgdmFsaWQgVk1TIGRpcmVjdG9y eSBuYW1lIG9yIGEgd2lsZGNhcmQKKyAgICAgICBwYXR0ZXJuIHVzZWQgYnkgdGhlIEZUUCBjbGll bnQuIFdoYXQgc2hvdWxkIHRoZSBjbGllbnQgZG8gd2l0aAorICAgICAgICJtZ2V0IFthYmNdIj8g SW4gdGhpcyBjYXNlIHRoZXJlIG11c3QgYmUgYSB3YXkgZm9yIHRoZSB1c2VyIHRvCisgICAgICAg Zm9yY2Ugc2VuZGluZyB0aGUgTUdFVCBhcmd1bWVudCBhcyB0aGUgTUxTRCBhcmd1bWVudC4KKyAg ICAgKiBJZiAieHh4IiBpcyBhIHJlZ3VsYXIgZmlsZSBpbiB0aGUgc2VydmVyJ3MgY3VycmVudCBk aXJlY3RvcnksICJtZ2V0CisgICAgICAgeHh4IiB3b3JrcyB3aXRoIE5MU1QgYnV0IG5vdCB3aXRo IE1MU0QuCisKKyAgIFRvIGZ1cnRoZXIgY29tcGxpY2F0ZSBtYXR0ZXJzLCBOTFNUIGNhbiAoaW4g dGhlb3J5KSB3b3JrIGp1c3QgbGlrZQorICAgTUxTRDogaWYgc2VudCB3aXRoIGEgYmxhbmsgYXJn dW1lbnQgb3IgYSBkaXJlY3RvcnkgbmFtZSwgaXQgaXMgc3VwcG9zZWQKKyAgIHRvIHJldHVybiBh IGNvbXBsZXRlIGxpc3Qgb2YgZmlsZXMgaW4gdGhlIGN1cnJlbnQgb3IgZ2l2ZW4gZGlyZWN0b3J5 LAorICAgd2hpY2ggdGhlIGNsaWVudCBjYW4gbWF0Y2ggbG9jYWxseSBhZ2FpbnN0IHNvbWUgcGF0 dGVybi4gSXQgaXMgbm90CisgICBrbm93biBpZiBhbnkgRlRQIHNlcnZlciBvciBjbGllbnQgZG9l cyB0aGlzIGJ1dCBuZXZlcnRoZWxlc3MsIGl0IHNob3VsZAorICAgYmUgcG9zc2libGUgc2luY2Ug dGhpcyBiZWhhdmlvciBjYW4gYmUgaW5mZXJyZWQgZnJvbSBSRkMgOTU5LgorCisgICBJbiB2aWV3 IG9mIHRoZXNlIGNvbnNpZGVyYXRpb25zLCBhbmQgZ2l2ZW4gdGhlIG5lZWQgdG8gcHJlc2VydmUg dGhlCisgICB0cmFkaXRpb25hbCBGVFAgY2xpZW50IGNvbW1hbmQgc3RydWN0dXJlIGFuZCBiZWhh dmlvciBzbyB0aGUgc29mdHdhcmUKKyAgIHdpbGwgYmUgdXNhYmxlIGJ5IG1vc3QgcGVvcGxlOgor CisgICAgMS4gVGhlIE1HRVQgY29tbWFuZCBzaG91bGQgcHJvZHVjZSB0aGUgZXhwZWN0ZWQgcmVz dWx0IGluIHRoZSBjb21tb24KKyAgICAgICBjYXNlcywgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIE5M U1Qgb3IgTUxTRCBpcyB1c2VkIHVuZGVybmVhdGguCisgICAgMi4gRm9yIGFub21hbG91cyBjYXNl cywgdGhlIHVzZXIgbmVlZHMgYSB3YXkgdG8gY29udHJvbCB3aGV0aGVyIHRoZQorICAgICAgIE1H RVQgYXJndW1lbnQgaXMgc2VudCB0byB0aGUgc2VydmVyIG9yIGtlcHQgZm9yIGxvY2FsIHVzZS4K KyAgICAzLiBBdCB0aGUgc2FtZSB0aW1lLCB0aGUgdXNlciBtaWdodCBuZWVkIGEgd2F5IHRvIHNl bmQgYSBkaXJlY3RvcnkKKyAgICAgICBuYW1lIHRvIHRoZSBzZXJ2ZXIsIGluZGVwZW5kZW50IG9m IGFueSB3aWxkY2FyZCBwYXR0ZXJuLgorICAgIDQuIFRoZSB1c2VyIG5lZWRzIGEgd2F5IHRvIGZv cmNlIE5MU1Qgb3IgTUxTRCBmb3IgYSBnaXZlbiBNR0VUCisgICAgICAgY29tbWFuZC4KKworICAg QnkgZGVmYXVsdCwgS2VybWl0J3MgTUdFVCBjb21tYW5kIHVzZXMgTUxTRCBpZiBNTFNUIGlzIHJl cG9ydGVkIGJ5IHRoZQorICAgc2VydmVyIGluIGl0cyBGRUFUIGxpc3QuIFdoZW4gTUxTRCBpcyB1 c2VkLCB0aGUgZmlsZXNwZWMgaXMgc2VudCB0byB0aGUKKyAgIHNlcnZlciBpZiBpdCBpcyBub3Qg d2lsZCAoYWNjb3JkaW5nIHRvIEtlcm1pdCdzIG93biBkZWZpbml0aW9uIG9mCisgICAid2lsZCIg c2luY2UgaXQgY2FuJ3QgcG9zc2libHkga25vdyB0aGUgc2VydmVyJ3MgZGVmaW5pdGlvbikuIElm IHRoZQorICAgZmlsZXNwZWMgaXMgd2lsZCBpdCBpcyBoZWxkIGZvciBsb2NhbCB1c2UgdG8gc2Vs ZWN0IGZpbGVzIGZyb20gdGhlIGxpc3QKKyAgIHJldHVybmVkIGJ5IHRoZSBzZXJ2ZXIuIElmIE1M U1QgaXMgbm90IHJlcG9ydGVkIGJ5IHRoZSBzZXJ2ZXIgb3IgaXMKKyAgIGRpc2FibGVkLCBLZXJt aXQgc2VuZHMgdGhlIE1HRVQgZmlsZXNwZWMgd2l0aCB0aGUgTkxTVCBkaXJlY3RpdmUuCisKKyAg IFRoZSBkZWZhdWx0IGJlaGF2aW9yIGNhbiBiZSBvdmVycmlkZGVuIGdsb2JhbGx5IHdpdGggRlRQ IERJU0FCTEUgTUxTVCwKKyAgIHdoaWNoIGZvcmNlcyBLZXJtaXQgdG8gdXNlIE5MU1QgdG8gZ2V0 IGZpbGUgbGlzdHMuIEFuZCB0aGVuIGZvcgorICAgc2l0dWF0aW9ucyBpbiB3aGljaCBNTFNEIGlz IGVuYWJsZWQsIHRoZSBmb2xsb3dpbmcgTUdFVCBzd2l0Y2hlcyBjYW4gYmUKKyAgIHVzZWQgdG8g b3ZlcnJpZGUgdGhlIGRlZmF1bHRzIGZvciBhIHNwZWNpZmljIE1HRVQgb3BlcmF0aW9uOgorCisg ICAvTkxTVAorICAgICAgICAgIEZvcmNlcyB0aGUgY2xpZW50IHRvIHNlbmQgTkxTVC4gRXhhbXBs ZToKKworbWdldCAvbmxzdCBmb28uKgorCisgICAvTUxTRAorICAgICAgICAgIEZvcmNlcyB0aGUg Y2xpZW50IHRvIHNlbmQgTUxTRCAoZXZlbiBpZiBNTFNUIGlzIGRpc2FibGVkKS4KKyAgICAgICAg ICBFeGFtcGxlOgorCittZ2V0IC9tbHNkIGZvby4qCisKKyAgIC9NQVRDSDpwYXR0ZXJuCisgICAg ICAgICAgV2hlbiB0aGlzIHN3aXRjaCBpcyBnaXZlbiwgaXQgZm9yY2VzIHRoZSBjbGllbnQgdG8g aG9sZCB0aGUKKyAgICAgICAgICBwYXR0ZXJuIGZvciBsb2NhbCB1c2UgYWdhaW5zdCB0aGUgcmV0 dXJuZWQgZmlsZSBsaXN0LiBJZiBhCisgICAgICAgICAgcmVtb3RlIGZpbGVzcGVjIGlzIGFsc28g Z2l2ZW4gKGUuZy4gdGhlICJibGFoIiBpbiAibWdldAorICAgICAgICAgIC9tYXRjaDoqLnR4dCBi bGFoIiksIHRoZW4gaXQgaXMgc2VudCBhcyB0aGUgTkxTVCBvciBNTFNECisgICAgICAgICAgYXJn dW1lbnQsIHByZXN1bWFibHkgdG8gc3BlY2lmeSB0aGUgZGlyZWN0b3J5IHdob3NlIGZpbGVzIGFy ZSB0bworICAgICAgICAgIGJlIGxpc3RlZC4gV2hlbiB0aGUgL01BVENIIHN3aXRjaCBpcyBub3Qg Z2l2ZW4sIHRoZSBNR0VUCisgICAgICAgICAgZmlsZXNwZWMgaXMgc2VudCB0byB0aGUgc2VydmVy IGlmIHRoZSBkaXJlY3RpdmUgaXMgTkxTVCBvciBpZgorICAgICAgICAgIHRoZSBmaWxlc3BlYyBp cyBub3Qgd2lsZC4gRXhhbXBsZXM6CisKKyAgQ29tbWFuZDogICAgICAgICAgICAgICAgICAgV2l0 aCBOTFNUOiAgICAgV2l0aCBNTFNEOgorICAgIG1nZXQgICAgICAgICAgICAgICAgICAgICAgTkxT VCAgICAgICAgICAgTUxTRAorICAgIG1nZXQgKi50eHQgICAgICAgICAgICAgICAgTkxTVCAqLnR4 dCAgICAgTUxTRAorICAgIG1nZXQgZm9vICAgICAgICAgICAgICAgICAgTkxTVCBmb28gICAgICAg TUxTRCBmb28KKyAgICBtZ2V0IC9tYXRjaDoqLnR4dCAgICAgICAgIE5MU1QgICAgICAgICAgIE1M U0QKKyAgICBtZ2V0IC9tYXRjaDoqLnR4dCBmb28gICAgIE5MU1QgZm9vICAgICAgIE1MU0QgZm9v CisKKyAgIEluIG90aGVyIHdvcmRzLCB0aGUgcGF0dGVybiBpcyBhbHdheXMgaW50ZXJwcmV0ZWQg bG9jYWxseSB1bmxlc3MgTUdFVAorICAgdXNlcyBOTFNUIGFuZCBubyAvTUFUQ0ggc3dpdGNoIHdh cyBnaXZlbi4KKworMy4xMS40LiBFeGFtcGxlcworCiszLjExLjQuMS4gRG93bmxvYWRpbmcgYSBT aW5nbGUgRmlsZQorCisgICBUaGVyZSBhcmUgbm8gY2hvaWNlcyBoZXJlLCBqdXN0IHVzZSB0aGUg RlRQIEdFVCBjb21tYW5kLiBLZXJtaXQgYWx3YXlzCisgICBzZW5kcyB0aGUgUkVUUiBkaXJlY3Rp dmUsIGFuZCBwb3NzaWJseSBTSVpFIGFuZC9vciBNRFRNLiBUaGUgc21hbGwKKyAgIGFkdmFudGFn ZSBvZiB1c2luZyBNTFNUIGluIHRoaXMgY2FzZSBpcyBvdXR3ZWlnaGVkIGJ5IHRoZSByaXNrIGFu ZAorICAgZWZmb3J0IG9mIGNvZGluZyBhIHNwZWNpYWwgY2FzZS4KKworMy4xMS40LjIuIERvd25s b2FkaW5nIGEgR3JvdXAgb2YgRmlsZXMgZnJvbSBhIFNpbmdsZSBEaXJlY3RvcnkKKworICAgVGhp cyBjYXNlIHByZXNlbnRzIHRyYWRlb2ZmcywgZXNwZWNpYWxseSBvbiBzbG93IGNvbm5lY3Rpb25z OgorCisgICAgICogRm9yIGRvd25sb2FkaW5nIGFsbCBvciBtb3N0IG9mIHRoZSBmaWxlcyBpbiBh IGRpcmVjdG9yeSwgTUxTRCBpcworICAgICAgIGJldHRlciBiZWNhdXNlIGl0IGVsaW1pbmF0ZXMg dGhlIG5lZWQgdG8gc2VuZCBTSVpFIGFuZCBNRFRNIGZvcgorICAgICAgIGVhY2ggZmlsZS4gTm8g c3BlY2lhbCBhY3Rpb25zIGFyZSByZXF1aXJlZCBpbiB0aGlzIGNhc2U7IEtlcm1pdAorICAgICAg IHVzZXMgTUxTRCBhdXRvbWF0aWNhbGx5IGlmIHRoZSBzZXJ2ZXIgc3VwcG9ydHMgaXQgKHVubGVz cyB5b3UgaGF2ZQorICAgICAgIGRpc2FibGVkIGl0KS4KKyAgICAgKiBGb3IgYSBzbWFsbCBudW1i ZXIgb2YgZmlsZXMgZnJvbSBhIGxhcmdlIGRpcmVjdG9yeSwgTkxTVCBpcyBiZXR0ZXIKKyAgICAg ICBiZWNhdXNlIGl0IGJ5cGFzc2VzIGRvd25sb2FkaW5nIG9mIGEgcG90ZW50aWFsbHkgaHVnZSBm aWxlIGxpc3QKKyAgICAgICBwcmlvciB0byB0aGUgZmlsZXMgdGhlbXNlbHZlcy4gSWYgeW91IGhh dmUgYSBjb25uZWN0aW9uIHRvIGEgc2VydmVyCisgICAgICAgdGhhdCBzdXBwb3J0cyBNTFNELCB1 c2UgdGhlIC9OTFNUIHN3aXRjaCB0byBmb3JjZSBOTFNUOgorCittZ2V0IC9ubHN0IHRbMTIzNF0u aAorCisgICAgICogSWYgdGhlIHNlcnZlciBzdXBwb3J0cyBNTFNEIGJ1dCBkb2VzIG5vdCBzdXBw b3J0IHNlcGFyYXRlIFNJWkUgb3IKKyAgICAgICBNRFRNIGRpcmVjdGl2ZXMsIGFuZCB5b3UgbmVl ZCB0aGUgc2l6ZSBhbmQvb3IgdGltZXN0YW1wCisgICAgICAgaW5mb3JtYXRpb24sIE1MU0QgaXMg YmV0dGVyOyBubyBzcGVjaWFsIGFjdGlvbnMgcmVxdWlyZWQuCisgICAgICogSWYgdGhlIHNlcnZl ciBzdXBwb3J0cyBNTFNEIGJ1dCBkb2VzIG5vdCBzdXBwb3J0IHRoZSAic2l6ZSIgYW5kCisgICAg ICAgIm1vZGlmeSIgZmFjdHMsIGJ1dCBpdCBkb2VzIHN1cHBvcnQgdGhlIFNJWkUgb3IgTURUTSBk aXJlY3RpdmVzLAorICAgICAgIGFuZCB5b3UgbmVlZCB0aGUgc2l6ZSBhbmQvb3IgdGltZXN0YW1w IGluZm9ybWF0aW9uLCBOTFNUIGlzIGJldHRlci4KKworMy4xMS40LjMuIERvd25sb2FkaW5nIGEg RGlyZWN0b3J5IFRyZWUKKworICAgTUxTRCBpcyB0aGUgb25seSBjaG9pY2UgZm9yIHJlY3Vyc2l2 ZSBkb3dubG9hZHM7IHRoZXkgcmFyZWx5LCBpZiBldmVyLAorICAgd29yayB3aXRoIE5MU1QgKHRo ZSBmZXcgY2FzZXMgd2hlcmUgdGhleSBkbyB3b3JrIHJlbHkgb24gZXh0cmEtcHJvdG9jb2wKKyAg ICJzZWNyZXQiIG5vdGF0aW9ucyBmb3IgdGhlIE5MU1QgYXJndW1lbnQpLiBObyBzcGVjaWFsIGFj dGlvbnMgYXJlCisgICByZXF1aXJlZCB0byBmb3JjZSBNTFNEIHdoZW4gdGhlIHNlcnZlciBzdXBw b3J0cyBpdCwgdW5sZXNzIHlvdSBoYXZlCisgICBkaXNhYmxlZCBpdC4gRXhhbXBsZXM6CisKKyAg IE1HRVQgL1JFQ1VSU0lWRQorICAgICAgICAgIFRoaXMgdGVsbHMgdGhlIHNlcnZlciB0byBzZW5k IGFsbCBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgaW4gdGhlCisgICAgICAgICAgdHJlZSByb290ZWQg YXQgaXRzIGN1cnJlbnQgZGlyZWN0b3J5LgorCisgICBNR0VUIC9SRUNVUlNJVkUgKi50eHQKKyAg ICAgICAgICBUaGlzIHRlbGxzIHRoZSBzZXJ2ZXIgdG8gc2VuZCBhbGwgKi50eHQgZmlsZXMgaW4g dGhlIHRyZWUgcm9vdGVkCisgICAgICAgICAgYXQgaXRzIGN1cnJlbnQgZGlyZWN0b3J5LgorCisg ICBNR0VUIC9NTFNEIC9SRUNVUlNJVkUgKi50eHQKKyAgICAgICAgICBTYW1lIGFzIHRoZSBwcmV2 aW91cyBleGFtcGxlIGJ1dCBmb3JjZXMgS2VybWl0IHRvIHNlbmQgTUxTRCBpbgorICAgICAgICAg IGNhc2UgaXQgd2FzIGRpc2FibGVkLCBvciBpbiBjYXNlIHRoZSBzZXJ2ZXIgaXMga25vd24gdG8g c3VwcG9ydAorICAgICAgICAgIGl0IGV2ZW4gdGhvdWdoIGl0IGRpZCBub3QgYW5ub3VuY2UgaXQg aW4gaXRzIEZFQVQgbGlzdGluZy4KKworICAgTUdFVCAvUkVDVVJTSVZFIC9NQVRDSDoqLnppcCBh cmNoaXZlcworICAgICAgICAgIFRlbGxzIHRoZSBzZXJ2ZXIgdG8gc2VuZCBhbGwgWklQIGZpbGVz IGluIHRoZSB0cmVlIHJvb3RlZCBhdCBpdHMKKyAgICAgICAgICAiYXJjaGl2ZXMiIGRpcmVjdG9y eS4KKworICAgTUdFVCAvUkVDVVJTSVZFIC9NQVRDSDoqIFthYmNdCisgICAgICAgICAgVGhlIHNl cnZlciBpcyBydW5uaW5nIG9uIFZNUyBhbmQgeW91IHdhbnQgaXQgdG8gc2VuZCBhbGwgdGhlCisg ICAgICAgICAgZmlsZXMgaW4gdGhlIGRpcmVjdG9yeSB0cmVlIHJvb3RlZCBhdCBbQUJDXS4gQnV0 IHNpbmNlICJbYWJjXSIKKyAgICAgICAgICBsb29rcyBqdXN0IGxpa2UgYSB3aWxkY2FyZCwgeW91 IGhhdmUgdG8gaW5jbHVkZSBhIC9NQVRDSDogc3dpdGNoCisgICAgICAgICAgdG8gZm9yY2UgS2Vy bWl0IHRvIHNlbmQgIlthYmNdIiBhcyB0aGUgTUxTRCBhcmd1bWVudC4KKworICAgSW4gYWxsIGNh c2VzIGluIHdoaWNoIHRoZSAvUkVDVVJTSVZFIHN3aXRjaCBpcyBpbmNsdWRlZCwgdGhlIHNlcnZl cidzCisgICB0cmVlIGlzIGR1cGxpY2F0ZWQgbG9jYWxseS4KKworICAgICBBbHRob3VnaCBNTFNE IGFsbG93cyByZWN1cnNpb24gYW5kIE5MU1QgZG9lcyBub3QsIHRoZSBNTFNECisgICAgIHNwZWNp ZmljYXRpb24gcGxhY2VzIGEgaGVhdnkgYnVyZGVuIG9uIHRoZSBjbGllbnQ7IHRoZSBvYnZpb3Vz LAorICAgICBzdHJhaWdodGZvcndhcmQsIGFuZCBlbGVnYW50IGltcGxlbWVudGF0aW9uIChkZXB0 aC1maXJzdCwgdGhlIG9uZQorICAgICB0aGF0IEtlcm1pdCBjdXJyZW50bHkgdXNlcykgcmVxdWly ZXMgYXMgbWFueSBvcGVuIHRlbXBvcmFyeSBmaWxlcyBhcworICAgICB0aGUgc2VydmVyJ3MgZGly ZWN0b3J5IHRyZWUgaXMgZGVlcCwgYW5kIHRoZXJlZm9yZSBjbGllbnQgcmVzb3VyY2UKKyAgICAg ZXhoYXVzdGlvbiAtLSBlLmcuIGV4Y2VlZGluZyB0aGUgbWF4aW11bSBudW1iZXIgb2Ygb3BlbiBm aWxlcyAtLSBpcworICAgICBhIGRhbmdlci4gVW5mb3J0dW5hdGVseSBNTFNEIHdhcyBub3QgZGVz aWduZWQgd2l0aCByZWN1cnNpb24gaW4KKyAgICAgbWluZC4gKEJyZWFkdGgtZmlyc3QgdHJhdmVy c2FsIGNvdWxkIGJlIHByb2JsZW1hdGljIGR1ZSB0byBsYWNrIG9mCisgICAgIHN1ZmZpY2llbnQg bmF2aWdhdGlvbiBpbmZvcm1hdGlvbi4pCisKKyAgIE9mIGNvdXJzZSBhbGwgb2YgS2VybWl0J3Mg b3RoZXIgTUdFVCBzd2l0Y2hlcyBjYW4gYmUgdXNlZCB0b28sIGUuZy4gZm9yCisgICBmaW5lci1n cmFpbmVkIGZpbGUgc2VsZWN0aW9uIChieSBkYXRlLCBzaXplLCBldGMpLCBmb3IgbW92aW5nIG9y CisgICByZW5hbWluZyBmaWxlcyBhcyB0aGV5IGFycml2ZSwgdG8gb3ZlcnJpZGUgS2VybWl0J3Mg YXV0b21hdGljIHBlci1maWxlCisgICB0ZXh0L2JpbmFyeSBtb2RlIHN3aXRjaGluZywgdG8gcGFz cyB0aGUgaW5jb21pbmcgZmlsZXMgdGhyb3VnaCBhCisgICBmaWx0ZXIsIHRvIGNvbnZlcnQgdGV4 dC1maWxlIGNoYXJhY3RlciBzZXRzLCBhbmQgc28gb24uCisKKzMuMTEuNC40LiBOTFNUL01MU0Qg U3VtbWFyeSBUYWJsZQorCisgICBIZXJlJ3MgYSB0YWJsZSBzdW1tYXJpemluZyBNR0VUIGJlaGF2 aW9yIHdoZW4gdGhlIHNlcnZlciBzdXBwb3J0cyBib3RoCisgICBOTFNUIGFuZCBNTFNELiAvTkxT VCBhbmQgL01MU0Qgc3dpdGNoZXMgYXJlIGluY2x1ZGVkIGZvciBjbGFyaXR5IHRvCisgICBpbmRp Y2F0ZSB3aGljaCBwcm90b2NvbCBpcyBiZWluZyB1c2VkLCBhbmQgdGhlIGV4cGVjdGVkIGVmZmVj dHMuIEluCisgICBwcmFjdGljZSB5b3UgY2FuIG9taXQgdGhlIC9OTFNUIGFuZCAvTUxTRCBzd2l0 Y2hlcyBhbmQgdGhlIEtlcm1pdAorICAgY2xpZW50IGNob29zZXMgdGhlIGFwcHJvcHJpYXRlIG9y IGRlc2lyZWQgcHJvdG9jb2wgYXMgZGVzY3JpYmVkIGFib3ZlLgorICAgU2FtcGxlIGNvbW1hbmRz IHByZXN1bWUgYSBVbml4IGZpbGUgc3lzdGVtIG9uIHRoZSBzZXJ2ZXIsIGJ1dCBvZiBjb3Vyc2UK KyAgIHRoZSBzZXJ2ZXIgY2FuIGhhdmUgYW55IGZpbGUgc3lzdGVtIG9yIHN5bnRheCBhdCBhbGwu CisKKyAgIFVzZXIncyBDb21tYW5kIEZUUCBTZW5kcyBSZW1hcmtzCisgICBtZ2V0IC9ubHN0IE5M U1QgR2V0cyBhIGxpc3Qgb2YgYWxsIHRoZSBmaWxlcyBpbiB0aGUgc2VydmVyJ3MgY3VycmVudAor ICAgYW5kIGRvd25sb2FkcyBlYWNoIGZpbGUuIFRoZSBsaXN0IGluY2x1ZGVzIG5hbWVzIG9ubHks IHNvIEtlcm1pdCBhbHNvCisgICBtdXN0IHNlbmQgU0laRSBhbmQgTURUTSBkaXJlY3RpdmVzIGlm IHNpemUgYW5kIHRpbWVzdGFtcCBpbmZvcm1hdGlvbiBpcworICAgcmVxdWlyZWQgKHRoaXMgaXMg YWx3YXlzIHRydWUgb2YgTkxTVCkuIFNlbmRpbmcgTkxTVCB3aXRob3V0IGFuCisgICBhcmd1bWVu dCBpcyBhbGxvd2VkIGJ5IHRoZSBSRkM5NTkgTkxTVCBkZWZpbml0aW9uIGFuZCBieSB0aGUgS2Vy bWl0IEZUUAorICAgY2xpZW50LCBidXQgbWlnaHQgbm90IHdvcmsgd2l0aCBvdGhlciBjbGllbnRz LCBhbmQgYWxzbyBtaWdodCBub3Qgd29yaworICAgd2l0aCBldmVyeSBzZXJ2ZXIuCisgICBtZ2V0 IC9ubHN0IGZvbyBOTFNUIGZvbyBJZiAiZm9vIiBpcyBhIGRpcmVjdG9yeSwgdGhpcyBnZXRzIGEg bGlzdCBvZgorICAgYWxsIHRoZSBmaWxlcyBmcm9tIHRoZSBzZXJ2ZXIncyAiZm9vIiBkaXJlY3Rv cnkgYW5kIGRvd25sb2FkcyBlYWNoCisgICBmaWxlOyBvdGhlcndpc2UgdGhpcyBkb3dubG9hZHMg dGhlIGZpbGUgbmFtZWQgImZvbyIgKGlmIGFueSkgZnJvbSB0aGUKKyAgIHNlcnZlcidzIGN1cnJl bnQgZGlyZWN0b3J5LgorICAgbWdldCAvbmxzdCAqLnR4dCBOTFNUICoudHh0IEdldHMgYSBsaXN0 IG9mIHRoZSBmaWxlcyBpbiB0aGUgc2VydmVyJ3MKKyAgIGN1cnJlbnQgZGlyZWN0b3J5IHdob3Nl IG5hbWVzIG1hdGNoIHRoZSBwYXR0ZXJuICoudHh0LCBhbmQgdGhlbgorICAgZG93bmxvYWRzIGVh Y2ggZmlsZSBmcm9tIHRoZSBsaXN0LiBCZWNhdXNlIHdlIGFyZSB1c2luZyBOTFNULCB3ZSBzZW5k CisgICB0aGUgZmlsZXNwZWMgKCoudHh0KSB0byB0aGUgc2VydmVyIGFuZCB0aGUgc2VydmVyIGlu dGVycHJldHMgYW55CisgICB3aWxkY2FyZHMuCisgICBtZ2V0IC9ubHN0IGZvby8qLnR4dCBOTFNU IGZvby8qLnR4dCAgR2V0cyBhIGxpc3Qgb2YgdGhlIGZpbGVzIGluIHRoZQorICAgc2VydmVyJ3Mg ImZvbyIgZGlyZWN0b3J5IHdob3NlIG5hbWVzIG1hdGNoIHRoZSBwYXR0ZXJuICoudHh0LCBhbmQg dGhlbgorICAgZG93bmxvYWRzIGVhY2ggZmlsZSBmcm9tIHRoZSBsaXN0IChzZXJ2ZXIgaW50ZXJw cmV0cyB3aWxkY2FyZHMpLgorICAgbWdldCAvbmxzdCAvbWF0Y2g6Ki50eHQgTkxTVCBHZXRzIGEg bGlzdCBvZiBhbGwgdGhlIGZpbGVzIGluIHRoZQorICAgc2VydmVyJ3MgY3VycmVudCBkaXJlY3Rv cnkgYW5kIHRoZW4gZG93bmxvYWRzIGVhY2ggb25lIHdob3NlIG5hbWUKKyAgIG1hdGNoZXMgdGhl IHBhdHRlcm4gKi50eHQgKGNsaWVudCBpbnRlcnByZXRzIHdpbGRjYXJkcykuCisgICBtZ2V0IC9u bHN0IC9tYXRjaDoqLnR4dCBmb28gIE5MU1QgZm9vIEdldHMgYSBsaXN0IG9mIGFsbCB0aGUgZmls ZXMgaW4KKyAgIHRoZSBzZXJ2ZXIncyAiZm9vIiBkaXJlY3RvcnkgYW5kIHRoZW4gZG93bmxvYWRz IGVhY2ggb25lIHdob3NlIG5hbWUKKyAgIG1hdGNoZXMgdGhlIHBhdHRlcm4gKi50eHQgKGNsaWVu dCBpbnRlcnByZXRzIHdpbGRjYXJkcykuCisgICBtZ2V0IC9tbHNkIE1MU0QgR2V0cyBhIGxpc3Qg b2YgYWxsIHRoZSBmaWxlcyBmcm9tIHRoZSBzZXJ2ZXIncyBjdXJyZW50CisgICBkaXJlY3Rvcnkg YW5kIHRoZW4gZG93bmxvYWRzIGVhY2ggb25lLiBUaGUgbGlzdCBtaWdodCBpbmNsdWRlIHNpemUg YW5kCisgICB0aW1lc3RhbXAgaW5mb3JtYXRpb24sIGluIHdoaWNoIGNhc2UgS2VybWl0IGRvZXMg bm90IG5lZWQgdG8gc2VuZCBTSVpFCisgICBhbmQgTURUTSBkaXJlY3RpdmVzIGZvciBlYWNoIGZp bGUgKHRoaXMgaXMgYWx3YXlzIHRydWUgb2YgTUxTRCkuCisgICBtZ2V0IC9tbHNkIGZvbyBNTFNE IGZvbyBHZXRzIGEgbGlzdCBvZiBhbGwgdGhlIGZpbGVzIGZyb20gdGhlIHNlcnZlcidzCisgICAi Zm9vIiBkaXJlY3RvcnkgKHdoZXJlIHRoZSBzdHJpbmcgImZvbyIgZG9lcyBub3QgY29udGFpbiB3 aWxkY2FyZHMpIGFuZAorICAgdGhlbiBkb3dubG9hZHMgZWFjaCBvbmUuIElmICJmb28iIGlzIGEg cmVndWxhciBmaWxlIGFuZCBub3QgYQorICAgZGlyZWN0b3J5LCB0aGlzIGNvbW1hbmQgaXMgc3Vw cG9zZWQgdG8gZmFpbCwgYnV0IHNvbWUgc2VydmVycyBoYXZlIGJlZW4KKyAgIG9ic2VydmVkIHRo YXQgc2VuZCB0aGUgZmlsZS4KKyAgIG1nZXQgL21sc2QgKi50eHQgTUxTRCBHZXRzIGEgbGlzdCBv ZiBhbGwgdGhlIGZpbGVzIGZyb20gdGhlIHNlcnZlcidzCisgICBjdXJyZW50IGRpcmVjdG9yeSBh bmQgdGhlbiBkb3dubG9hZHMgb25seSB0aGUgb25lcyB3aG9zZSBuYW1lcyBtYXRjaAorICAgdGhl IHBhdHRlcm4gIioudHh0Ii4gQmVjYXVzZSB3ZSBhcmUgdXNpbmcgTUxTRCBhbmQgdGhlIE1HRVQg ZmlsZXNwZWMgaXMKKyAgIHdpbGQsIHdlIGRvIG5vdCBzZW5kIHRoZSBmaWxlc3BlYyB0byB0aGUg c2VydmVyLCBidXQgdHJlYXQgaXQgYXMgdGhvdWdoCisgICBpdCBoYWQgYmVlbiBnaXZlbiBpbiBh IC9NQVRDSDogc3dpdGNoIGFuZCB1c2UgaXQgbG9jYWxseSB0byBtYXRjaCB0aGUKKyAgIG5hbWVz IGluIHRoZSBsaXN0LgorICAgbWdldCAvbWxzZCBmb28vKi50eHQgTUxTRCBUaGlzIG9uZSB3b24n dCB3b3JrIGJlY2F1c2UgTUxTRCByZXF1aXJlcworICAgdGhhdCB0aGUgbm90aW9ucyBvZiBzZXJ2 ZXIgZGlyZWN0b3J5IGFuZCBmaWxlbmFtZS1tYXRjaGluZyBwYXR0ZXJuIGJlCisgICBzZXBhcmF0 ZWQuIEhvd2V2ZXIsIHRoZSBjbGllbnQsIHdoaWNoIGNhbid0IGJlIGV4cGVjdGVkIHRvIGtub3cg dGhlCisgICBzZXJ2ZXIncyBmaWxlLXN5c3RlbSBzeW50YXgsIHdpbmRzIHVwIHNlbmRpbmcgYSBy ZXF1ZXN0IHRoYXQgdGhlIHNlcnZlcgorICAgd2lsbCAob3Igc2hvdWxkKSByZWplY3QuCisgICBt Z2V0IC9tbHNkIC9tYXRjaDoqLnR4dCBNTFNEIEdldHMgYSBsaXN0IG9mIGFsbCB0aGUgZmlsZXMg ZnJvbSB0aGUKKyAgIHNlcnZlcidzIGN1cnJlbnQgZGlyZWN0b3J5IGFuZCB0aGVuIGRvd25sb2Fk cyBvbmx5IHRoZSBvbmVzIHdob3NlIG5hbWVzCisgICBtYXRjaCB0aGUgcGF0dGVybiAiKi50eHQi IChjbGllbnQgaW50ZXJwcmV0cyB3aWxkY2FyZHMpLgorICAgbWdldCAvbWxzZCAvbWF0Y2g6Ki50 eHQgZm9vIE1MU0QgZm9vIElmICJmb28iIGlzIGEgZGlyZWN0b3J5IG9uIHRoZQorICAgc2VydmVy LCB0aGlzIGdldHMgYSBsaXN0IG9mIGFsbCB0aGUgZmlsZXMgZnJvbSB0aGUgc2VydmVyJ3MgImZv byIKKyAgIGRpcmVjdG9yeSBhbmQgdGhlbiBkb3dubG9hZHMgb25seSB0aGUgb25lcyB3aG9zZSBu YW1lcyBtYXRjaCB0aGUKKyAgIHBhdHRlcm4gIioudHh0IiAoY2xpZW50IGludGVycHJldHMgd2ls ZGNhcmRzKS4gVGhpcyBsZWF2ZXMgdGhlIHNlcnZlcgorICAgQ0QnZCB0byB0aGUgImZvbyIgZGly ZWN0b3J5OyB0aGVyZSdzIG5vIHdheSB0aGUgY2xpZW50IGNhbiByZXN0b3JlIHRoZQorICAgc2Vy dmVyJ3Mgb3JpZ2luYWwgZGlyZWN0b3J5IGJlY2F1c2UgTUxTRCBkb2Vzbid0IGdpdmUgdGhhdCBp bmZvcm1hdGlvbiwKKyAgIGFuZCBzaW5jZSB0aGUgY2xpZW50IGNhbiBub3QgYmUgZXhwZWN0ZWQg dG8ga25vdyB0aGUgc2VydmVyJ3MKKyAgIGZpbGUtc3lzdGVtIHN5bnRheCwgaXQgd291bGQgbm90 IGJlIHNhZmUgdG8gZ3Vlc3MuIElmICJmb28iIGlzIGEKKyAgIHJlZ3VsYXIgZmlsZSwgTUxTRCBm YWlscy4KKyAgIG1nZXQgL21sc2QgZm9vIGJhciBNTFNEIFRoaXMgb25lIGlzIHByb2JsZW1hdGlj LiBZb3UncmUgc3VwcG9zZWQgdG8gYmUKKyAgIGFibGUgdG8gZ2l2ZSBNR0VUIGEgbGlzdCBhIGZp bGVzcGVjczsgaW4gdGhpcyBjYXNlIHdlIG5hbWUgdHdvCisgICBkaXJlY3Rvcmllcy4gVGhlIGNs aWVudCBtdXN0IGNoYW5nZSB0aGUgc2VydmVyJ3MgZGlyZWN0b3J5IHRvICJmb28iIHRvCisgICBn ZXQgdGhlIGxpc3Qgb2YgZmlsZXMsIGFuZCB0aGVuIHRoZSBmaWxlcyB0aGVtc2VsdmVzLiBCdXQg dGhlbiBpdCBoYXMKKyAgIG5vIHdheSB0byByZXR1cm4gdG8gdGhlIHNlcnZlcidzIHByZXZpb3Vz IGRpcmVjdG9yeSBpbiBvcmRlciB0byBkbyB0aGUKKyAgIHNhbWUgZm9yICJiYXIiLCBhcyBleHBs YWluZWQgaW4gdGhlIHByZXZpb3VzIGV4YW1wbGUuCisgICBtZ2V0IC9tbHNkIC9tYXRjaDoqIFth YmNdIE1MU0QgW2FiY10gSW5jbHVkaW5nIGEgL01BVENIOiBzd2l0Y2ggZm9yY2VzCisgICBbYWJj XSB0byBiZSBzZW50IHRvIHRoZSBzZXJ2ZXIgZXZlbiB0aG91Z2ggdGhlIGNsaWVudCB3b3VsZCBu b3JtYWxseQorICAgdGhpbmsgaXQgd2FzIGEgd2lsZGNhcmQgYW5kIGhvbGQgaXQgZm9yIGxvY2Fs IGludGVycHJldGF0aW9uLiBJbiB0aGlzCisgICBleGFtcGxlLCBbYWJjXSBtaWdodCBiZSBhIFZN UyBkaXJlY3RvcnkgbmFtZS4KKyAgIG1nZXQgL21sc2QgL21hdGNoOiogdCouaCBNTFNEIHQqLmgg Q29udHJhcnkgdG8gdGhlIE1MU0Qgc3BlY2lmaWNhdGlvbiwKKyAgIHNvbWUgTUxTRC1jYXBhYmxl IEZUUCBzZXJ2ZXJzIGRvIGludGVycHJldCB3aWxkY2FyZHMuIFRoaXMgZm9ybSBvZiB0aGUKKyAg IE1HRVQgY29tbWFuZCBjYW4gYmUgdXNlZCB0byBmb3JjZSBhIHdpbGRjYXJkIHRvIGJlIHNlbnQg dG8gdGhlIHNlcnZlcgorICAgZm9yIGludGVycHJldGF0aW9uLgorCisgICBXaGVuIE1MU0QgaXMg dXNlZCBpbXBsaWNpdGx5ICh0aGF0IGlzLCB3aXRob3V0IGFuIC9NTFNEIHN3aXRjaCBnaXZlbiB0 bworICAgZm9yY2UgdGhlIHVzZSBvZiBNTFNEKSBhbmQgYW4gTUdFVCBjb21tYW5kIHN1Y2ggYXMg Im1nZXQgZm9vLyoudHh0IgorICAgZmFpbHMsIEtlcm1pdCBhdXRvbWF0aWNhbGx5IGZhbGxzIGJh Y2sgdG8gTkxTVCBhbmQgdHJpZXMgYWdhaW4uCisKKzMuMTEuNS4gUmVmZXJlbmNlcworCisgICAg MS4gUG9zdGVsLCBKLiwgYW5kIEouIFJleW5vbGRzLCBGaWxlIFRyYW5zZmVyIFByb3RvY29sIChG VFApLCBSRkMgOTU5LAorICAgICAgIE9jdG9iZXIgMTk4NTogWzM3Ml1mdHA6Ly9mdHAuaXNpLmVk dS9pbi1ub3Rlcy9yZmM5NTkudHh0LgorICAgIDIuIEhldGhtb24sIFAsIGFuZCBSLiBFbHosIEZl YXR1cmUgbmVnb3RpYXRpb24gbWVjaGFuaXNtIGZvciB0aGUgRmlsZQorICAgICAgIFRyYW5zZmVy IFByb3RvY29sLCBSRkMgMjM4OSwgQXVndXN0IDE5OTg6CisgICAgICAgWzM3M11mdHA6Ly9mdHAu aXNpLmVkdS9pbi1ub3Rlcy9yZmMyMzg5LnR4dC4KKyAgICAzLiBFbHosIFIsIGFuZCBQLiBIZXRo bW9uLCBFeHRlbnNpb25zIHRvIEZUUCwgSW50ZXJuZXQgRHJhZnQKKyAgICAgICBkcmFmdC1pZXRm LWZ0cGV4dC1tbHN0LTE2LnR4dCwgU2VwdGVtYmVyIDIwMDI6CisgICAgICAgWzM3NF1odHRwOi8v d3d3LmlldGYub3JnL2ludGVybmV0LWRyYWZ0cy9kcmFmdC1pZXRmLWZ0cGV4dC1tbHN0LTE2Lgor ICAgICAgIHR4dC4KKyAgICA0LiBbMzc1XVRoZSBLZXJtaXQgRlRQIENsaWVudCAob3ZlcnZpZXcp LgorCisgICBbIFszNzZdVG9wIF0gWyBbMzc3XUZUUCBUb3AgXSBbIFszNzhdQy1LZXJtaXQgSG9t ZSBdIFsgWzM3OV1LZXJtaXQgSG9tZQorICAgXQorCis0LiBGSUxFIFNDQU5OSU5HCisKKyAgIEEg bmV3IGZlYXR1cmUgY2FsbGVkIGZpbGUgc2Nhbm5pbmcgaXMgdXNlZCBpbiB2YXJpb3VzIGNvbnRl eHRzIHRvCisgICBkZXRlcm1pbmUgaWYgYSBmaWxlIGlzIHRleHQgb3IgYmluYXJ5LCBhbmQgaWYg aXQgaXMgdGV4dCwgd2hhdCBraW5kIG9mCisgICB0ZXh0LiBUaGUgb3ZlcmhlYWQgb2YgZmlsZSBz Y2FubmluZyBpcyBzdXJwcmlzaW5nbHkgdG9sZXJhYmxlLCB1c3VhbGx5CisgICBhYm91dCBhIHF1 YXJ0ZXIgc2Vjb25kIHBlciBmaWxlLiBGaWxlIHNjYW5uaW5nIGlzIG5vdyB1c2VkIGluc3RlYWQg b2YKKyAgIGZpbGVuYW1lIHBhdHRlcm5zIHVubGVzcyB5b3UgU0VUIEZJTEUgU0NBTiBPRkYsIHdo aWNoIHJlc3RvcmVzIHRoZQorICAgcHJldmlvdXMgYmVoYXZpb3IuCisKKyAgIFRoZSBwcmltYXJ5 IGJlbmVmaXQgb2YgZmlsZSBzY2FubmluZyBpcyBpbiBmaWxlIHRyYW5zZmVyLiBGb3IgYWxsCisg ICBwcmFjdGljYWwgcHVycG9zZXMsIG5vdyB5b3UgY2FuIHN0b3Agd29ycnlpbmcgYWJvdXQgd2hl dGhlciBhIGZpbGUKKyAgIHNob3VsZCBiZSBzZW50IGluIGJpbmFyeSBvciB0ZXh0IG1vZGUsIG9y IGFib3V0IHNlbmRpbmcgbWl4dHVyZXMgb2YKKyAgIHRleHQgYW5kIGJpbmFyeSBmaWxlcyBpbiBh IHNpbmdsZSBvcGVyYXRpb24sIG9yIGNvbmZpZ3VyaW5nIGFuZAorICAgZmluZS10dW5pbmcgeW91 ciBsaXN0cyBvZiBiaW5hcnktZmlsZSBhbmQgdGV4dC1maWxlIG5hbWUgcGF0dGVybnM6IG5vdwor ICAgaXQgYWxsIGp1c3Qgd29ya3MuCisKKyAgIEZpbGUgc2Nhbm5pbmcgaXMgZG9uZSBieSB0aGUg ZmlsZSBzZW5kZXIsIHdoaWNoIGRldGVybWluZXMgdGhlIHR5cGUgb2YKKyAgIGVhY2ggZmlsZSBi ZWZvcmUgaXQgc2VuZHMgaXQgYW5kIGluZm9ybXMgdGhlIHJlY2VpdmVyIChLZXJtaXQgb3IgRlRQ CisgICBzZXJ2ZXIpIG9mIHRoZSB0eXBlLiBGaWxlIHNjYW5uaW5nIGlzIE5PVCBkb25lIGJ5IHRo ZSByZWNlaXZlciwgYmVjYXVzZQorICAgaXQgaXMgdGhlIHNlbmRlcidzIHJlc3BvbnNpYmlsaXR5 IHRvIGRldGVybWluZSBlYWNoIGZpbGUncyB0eXBlLCBzZW5kCisgICB0aGUgZmlsZSBpbiB0aGUg cmlnaHQgbW9kZSwgYW5kIGluZm9ybSB0aGUgcmVjZWl2ZXIgb2YgdGhlIG1vZGUuIElmCisgICBi b3RoIHRyYW5zZmVyIHBhcnRuZXJzIGFyZSBjYXBhYmxlIG9mIHRoaXMgKG9yIGFueSBvdGhlcikg Zm9ybSBvZgorICAgYXV0b21hdGljIHRleHQvYmluYXJ5IG1vZGUgc3dpdGNoaW5nLCB0aGVuIGZp bGVzIGNhbiBiZSBzZW50IGluIGJvdGgKKyAgIGRpcmVjdGlvbnMgd2l0aCBubyB3b3JyaWVzIGFi b3V0IGNvcnJ1cHRpb24gZHVlIHRvIGluYXBwcm9wcmlhdGUKKyAgIHRyYW5zZmVyIG1vZGUuIChB cyBub3RlZCBpbiBbMzgwXVNlY3Rpb24gMywgRlRQIHNlcnZlcnMgZG9uJ3QgZG8gdGhpcywKKyAg IHNvIHRoaXMgZGlzY3Vzc2lvbiBkb2VzIG5vdCBhcHBseSB3aGVuIHVzaW5nIEtlcm1pdCB0byBk b3dubG9hZCBmcm9tIGFuCisgICBGVFAgc2VydmVyLikKKworICAgVGhlIHJlc3Qgb2YgdGhpcyBz ZWN0aW9uIGlzIG1haW5seSBmb3IgdGhlIGN1cmlvdXMuIElmIHlvdSBkb24ndCByZWFkCisgICBp dCBhbmQgc2ltcGx5IGFjY2VwdCBhbGwgZGVmYXVsdHMsIGV2ZXJ5IGZpbGUgeW91IHNlbmQgc2hv dWxkIGdvIGluIHRoZQorICAgYXBwcm9wcmlhdGUgbW9kZSBhdXRvbWF0aWNhbGx5LiBBcyBhbHdh eXMsIGhvd2V2ZXIsIGZvciBjaGFyYWN0ZXItc2V0CisgICB0cmFuc2xhdGlvbiB0byB3b3JrIGZv ciA3LSBhbmQgOC1iaXQgY2hhcmFjdGVyLXNldCBmaWxlcywgdGhlCisgICBhcHByb3ByaWF0ZSBT RVQgRklMRSBDSEFSQUNURVItU0VUIGNvbW1hbmQocykgbXVzdCBoYXZlIGJlZW4gZXhlY3V0ZWQK KyAgIHRvIGlkZW50aWZ5IHRoZWlyIGVuY29kaW5nIChLZXJtaXQncyBkZWZhdWx0IGZpbGUgY2hh cmFjdGVyLXNldCBpcworICAgbmV1dHJhbCBBU0NJSSBleGNlcHQgb24gcGxhdGZvcm1zIGxpa2Ug SFAtVVggb3IgREcvVVgsIHdoZXJlIHRoZQorICAgZGVmYXVsdCBmaWxlIGNoYXJhY3Rlci1zZXQg aXMga25vd24pLiBBbmQgb2YgY291cnNlLCByZWNlaXZpbmcgaXMKKyAgIGFub3RoZXIgbWF0dGVy IC0tIG9idmlvdXNseSB0aGUgb3RoZXIgS2VybWl0IG11c3QgYWxzbyBzZW5kIGVhY2ggZmlsZQor ICAgaW4gdGhlIGFwcHJvcHJpYXRlIG1vZGUuCisKKyAgIFNjYW5uaW5nIGlzIG1vcmUgcmVsaWFi bGUgdGhhbiBmaWxlbmFtZSBwYXR0ZXJucyBzaW1wbHkgYmVjYXVzZQorICAgZmlsZW5hbWVzIGFy ZSBub3QgcmVsaWFibGUgaW5kaWNhdG9ycyBvZiB0aGUgZmlsZSdzIGNvbnRlbnRzLiBDbGFzc2lj CisgICBleGFtcGxlcyBpbmNsdWRlICIuZG9jIiBmaWxlcywgd2hpY2ggYXJlIGJpbmFyeSBpZiBN aWNyb3NvZnQgV29yZAorICAgZG9jdW1lbnRzIGJ1dCB0ZXh0IG9uIG1vc3Qgb3RoZXIgcGxhdGZv cm1zLCBhbmQgIi5jb20iIGZpbGVzLCB3aGljaCBhcmUKKyAgIGJpbmFyeSBvbiBET1MgYW5kIFdp bmRvd3MgYnV0IHRleHQgb24gVk1TLiBBbnl3YXksIG5vYm9keSBrbm93cyB0aGUKKyAgIG5hbWlu ZyBjb252ZW50aW9ucyAoaWYgYW55KSBvZiBhbGwgdGhlIGFwcGxpY2F0aW9ucyAoYW5kIHBlcnNv bnMhKSBvbgorICAgeW91ciBjb21wdXRlci4gU2Nhbm5pbmcsIG9uIHRoZSBvdGhlciBoYW5kLCBk ZXRlcm1pbmVzIGVhY2ggZmlsZSdzIHR5cGUKKyAgIGJ5IGluc3BlY3RpbmcgaXRzIGNvbnRlbnRz IHJhdGhlciB0aGFuIGp1c3QgbG9va2luZyBhdCBpdHMgbmFtZS4KKworICAgQWxzbywgZmlsZSBw YXR0ZXJucyAtLSBldmVuIHdoZW4gdGhleSB3b3JrIGFzIGludGVuZGVkIC0tIGNhdGVnb3JpemUK KyAgIGVhY2ggZmlsZSBvbmx5IGFzIHRleHQgb3IgYmluYXJ5LCB3aGVyZWFzIGZpbGUgc2Nhbm5p bmcgY2FuIG1ha2UgZmluZXIKKyAgIGRpc3RpbmN0aW9uczoKKworICAgQklOQVJZCisgICAgICAg ICAgQmluYXJ5IGRhdGEsIG5vdCB0byBiZSBjb252ZXJ0ZWQgaW4gYW55IHdheS4gRXhhbXBsZXMg aW5jbHVkZQorICAgICAgICAgIGJpbmFyeSBtYWNoaW5lIGNvZGUgKGV4ZWN1dGFibGUgcHJvZ3Jh bXMpLCBncmFwaGljcyBpbWFnZXMgKEdJRiwKKyAgICAgICAgICBKUEcsIGV0YyksIGNvbXByZXNz ZWQgZmlsZXMgKFosIEdaLCBldGMpLCBhcmNoaXZlcyBhbmQgcGFja2FnZXMKKyAgICAgICAgICAo WklQLCBUQVIsIFJQTSwgZXRjKSwgb2JqZWN0IGZpbGVzIGFuZCBsaWJyYXJpZXMgKE9CSiwgRExM LAorICAgICAgICAgIGV0YykuCisKKyAgIDctQklUIFRFWFQKKyAgICAgICAgICBUZXh0IGVuY29k ZWQgaW4gYSA3LWJpdCBjaGFyYWN0ZXIgc2V0IHN1Y2ggYXMgQVNDSUkgb3Igb25lIG9mCisgICAg ICAgICAgdGhlIElTTyA2NDYgbmF0aW9uYWwgdmVyc2lvbnMuIEtlcm1pdCBoYXMgbm8gd2F5IHRv IHRlbGwgd2hpY2gKKyAgICAgICAgICBjaGFyYWN0ZXIgaXMgdXNlZCwgb25seSB0aGF0IGl0J3Mg Ny1iaXQgdGV4dC4gVHlwaWNhbCBleGFtcGxlcworICAgICAgICAgIGluY2x1ZGUgcHJvZ3JhbSBz b3VyY2UgY29kZSwgUkVBRE1FIGZpbGVzLCBQZXJsIG9yIEtlcm1pdAorICAgICAgICAgIHNjcmlw dHMsIHBsYWluLXRleHQgZW1haWwsIEhUTUwsIFRlWCwgYW5kIHZhcmlvdXMgdGV4dHVhbAorICAg ICAgICAgIGVuY29kaW5ncyBvZiBiaW5hcnkgZmlsZXM6IEhleCwgQmFzZTY0LCBldGMuIFdoZW4g c2VuZGluZyBzdWNoCisgICAgICAgICAgZmlsZXMsIHRoZSBGSUxFIERFRkFVTFQgN0JJVC1DSEFS QUNURVItU0VUIGlzIHVzZWQgYXMgdGhlIGZpbGUKKyAgICAgICAgICBjaGFyYWN0ZXItc2V0LCBh bmQgdGhlbiB0aGUgYXBwcm9wcmlhdGUgdHJhbnNmZXIgY2hhcmFjdGVyIHNldAorICAgICAgICAg IGlzIGNob3NlbiBmcm9tIHRoZSBhc3NvY2lhdGlvbnMgbGlzdCAoQVNTT0NJQVRFLCBTSE9XCisg ICAgICAgICAgQVNTT0NJQVRJT05TKS4KKworICAgOC1CSVQgVEVYVAorICAgICAgICAgIFRleHQg ZW5jb2RlZCBpbiBhbiA4LWJpdCBjaGFyYWN0ZXIgc2V0IHN1Y2ggYXMgTGF0aW4tMSwgTGF0aW4t MiwKKyAgICAgICAgICBMYXRpbi9IZWJyZXcsIExhdGluL0N5cmlsbGljLCBLT0k4LCBIUC1Sb21h bjgsIEpJUyBYIDAyMDgsIENvZGUKKyAgICAgICAgICBQYWdlIDQzNywgb3IgQ29kZSBQYWdlIDEy NTIuIEFnYWluLCBLZXJtaXQgaGFzIG5vIHdheSBvZiBrbm93aW5nCisgICAgICAgICAgd2hpY2gg cGFydGljdWxhciBzZXQgaXMgaW4gdXNlLCBvbmx5IHRoYXQgaXQncyA4LWJpdCB0ZXh0LiBXaGVu CisgICAgICAgICAgc2VuZGluZyBzdWNoIGZpbGVzLCB0aGUgRklMRSBERUZBVUxUIDhCSVQtQ0hB UkFDVEVSLVNFVCBpcyB1c2VkCisgICAgICAgICAgYXMgdGhlIGZpbGUgY2hhcmFjdGVyLXNldCwg YW5kIHRoZW4gdGhlIGFwcHJvcHJpYXRlIHRyYW5zZmVyCisgICAgICAgICAgY2hhcmFjdGVyIHNl dCBpcyBjaG9zZW4gZnJvbSB0aGUgYXNzb2NpYXRpb25zIGxpc3QuCisKKyAgIFVDUzIgVEVYVAor ICAgICAgICAgIFVuaWNvZGUgaW4gaXRzIGJhc2ljIGZvcm0sIDE2IGJpdHMgKDIgb2N0ZXRzKSBw ZXIgY2hhcmFjdGVyLgorICAgICAgICAgIFdoZW4gc2VuZGluZyBzdWNoIGZpbGVzLCBVQ1MyIGlz IHRoZSBmaWxlIGNoYXJhY3Rlci1zZXQgYW5kIHRoZQorICAgICAgICAgIGJ5dGUgb3JkZXIgaXMg aWRlbnRpZmllZCBhdXRvbWF0aWNhbGx5OyB0aGUgYXBwcm9wcmlhdGUgdHJhbnNmZXIKKyAgICAg ICAgICBjaGFyYWN0ZXIgc2V0IGlzIGNob3NlbiBmcm9tIHRoZSBhc3NvY2lhdGlvbnMgbGlzdC4g Tm9ybWFsbHkKKyAgICAgICAgICB0aGlzIHdvdWxkIGJlIFVURjguIFVURi0xNiBpcyBub3Qgc3Vw cG9ydGVkIHlldDsgS2VybWl0J3MKKyAgICAgICAgICBVbmljb2RlIHRyYW5zbGF0aW9ucyBhcmUg cmVzdHJpY3RlZCB0byBQbGFuZSAwLCB0aGUgQmFzZQorICAgICAgICAgIE11bHRpbGluZ3VhbCBQ bGFuZSAoQk1QKS4KKworICAgVVRGOCBURVhUCisgICAgICAgICAgVW5pY29kZSBpbiBpdHMgOC1i aXQgdHJhbnNmb3JtYXRpb24gZm9ybWF0LiBXaGVuIHNlbmRpbmcgc3VjaAorICAgICAgICAgIGZp bGVzLCBVVEY4IGlzIHRoZSBmaWxlIGNoYXJhY3Rlci1zZXQ7IHRoZSBhcHByb3ByaWF0ZSB0cmFu c2ZlcgorICAgICAgICAgIGNoYXJhY3RlciBzZXQgaXMgY2hvc2VuIGZyb20gdGhlIGFzc29jaWF0 aW9ucyBsaXN0LCBub3JtYWxseQorICAgICAgICAgIFVDUzIgb3IgVVRGOC4KKworICAgRmlsZSBz Y2FubmluZyBpcyBhdmFpbGFibGUgaW4gVU5JWCBDLUtlcm1pdCwgaW4gSy05NSwgYW5kIHRvIGEg bGltaXRlZAorICAgZXh0ZW50LCBpbiBWTVMgQy1LZXJtaXQgKGZ1bGwgc2Nhbm5pbmcgaXMgcHJv YmxlbWF0aWMgaW4gVk1TIGJlY2F1c2UKKyAgIGV2ZW4gcGxhaW4tdGV4dCBmaWxlcyBtaWdodCBj b250YWluIGJpbmFyeSByZWNvcmQtZm9ybWF0IGluZm9ybWF0aW9uKS4KKyAgIFRoZSByZWxldmFu dCBjb21tYW5kcyBhcmU6CisKKyAgIFNFVCBUUkFOU0ZFUiBNT0RFIHsgQVVUT01BVElDLCBNQU5V QUwgfQorICAgICAgICAgIFRlbGxzIHdoZXRoZXIgdGhlIGZpbGUtdHJhbnNmZXIgbW9kZSAodGV4 dCBvciBiaW5hcnkpIHNob3VsZCBiZQorICAgICAgICAgIHNldCBieSBhdXRvbWF0aWMgb3IgIm1h bnVhbCIgbWVhbnMuIEFVVE9NQVRJQyBpcyB0aGUgZGVmYXVsdCwKKyAgICAgICAgICB3aGljaCBh bGxvd3MgYW55IG9mIHRoZSBhdXRvbWF0aWMgbWV0aG9kcyB0aGF0IGFyZSBlbmFibGVkIHRvIGRv CisgICAgICAgICAgdGhlaXIgam9iczogRklMRSBTQ0FOLCBGSUxFIFBBVFRFUk5TLCBwZWVyIHJl Y29nbml0aW9uLCBldGMuCisgICAgICAgICAgTUFOVUFMIGxldHMgeW91IGNvbnRyb2wgdGhlIHRy YW5zZmVyIG1vZGUgd2l0aCB0aGUgU0VUIEZJTEUgVFlQRQorICAgICAgICAgIGNvbW1hbmRzLiBB cyBhbHdheXMsIC9URVhUIGFuZCAvQklOQVJZIHN3aXRjaGVzIG9uIHlvdXIKKyAgICAgICAgICBm aWxlLXRyYW5zZmVyIGNvbW1hbmRzIG92ZXJyaWRlIGFsbCBvdGhlciBtZXRob2RzOyBpZiB5b3Ug Z2l2ZQorICAgICAgICAgIG9uZSBvZiB0aGVzZSBzd2l0Y2hlcywgc2Nhbm5pbmcgaXMgbm90IGRv bmUuIFNIT1cgVFJBTlNGRVIKKyAgICAgICAgICBkaXNwbGF5cyB0aGUgY3VycmVudCBUUkFOU0ZF UiBNT0RFIHNldHRpbmcuCisKKyAgIFNFVCBGSUxFIFNDQU4geyBPTiBbIG51bWJlciBdLCBPRkYg fQorICAgICAgICAgIFR1cm5zIHRoaXMgZmVhdHVyZSBvbiBhbmQgb2ZmLiBJdCdzIE9OIGJ5IGRl ZmF1bHQuIFdoZW4gT0ZGLCB0aGUKKyAgICAgICAgICBwcmV2aW91cyBydWxlcyBhcHBseSAoU0VU IEZJTEUgUEFUVEVSTlMsIGV0YykuIFdoZW4gT04gaXMgZ2l2ZW4sCisgICAgICAgICAgeW91IGNh biBhbHNvIHNwZWNpZnkgYSBudW1iZXIgb2YgYnl0ZXMgdG8gYmUgc2Nhbm5lZC4gVGhlCisgICAg ICAgICAgZGVmYXVsdCBpcyA0OTE1MiAoPSA0OEspLiBJZiBhIG5lZ2F0aXZlIG51bWJlciBpcyBn aXZlbiwgdGhlCisgICAgICAgICAgZW50aXJlIGZpbGUgaXMgc2Nhbm5lZCwgbm8gbWF0dGVyIGhv dyBiaWcsIGZvciBtYXhpbXVtIGNlcnRhaW50eQorICAgICAgICAgIChmb3IgZXhhbXBsZSwgYSBQ b3N0U2NyaXB0IGZpbGUgdGhhdCBhcHBlYXJzIHRvIGJlIHBsYWluIHRleHQKKyAgICAgICAgICBt aWdodCBpbmNsdWRlIGFuIGVtYmVkZGVkIGdyYXBoaWMgcGFzdCB0aGUgbm9ybWFsIHNjYW5uaW5n CisgICAgICAgICAgbGltaXQpLiBTSE9XIEZJTEUgZGlzcGxheXMgdGhlIGN1cnJlbnQgRklMRSBT Q0FOIHNldHRpbmcuCisKKyAgIFNFVCBGSUxFIERFRkFVTFQgN0JJVC1DSEFSQUNURVItU0VUIG5h bWUKKyAgICAgICAgICBUZWxscyB0aGUgNy1iaXQgY2hhcmFjdGVyLXNldCB0byB1c2UgaWYgc2Nh bm5pbmcgaWRlbnRpZmllcyBhCisgICAgICAgICAgNy1iaXQgdGV4dCBmaWxlLCBlLmcuIEdFUk1B Ti4gU0hPVyBGSUxFIGRpc3BsYXlzIHRoZSBjdXJyZW50IFNFVAorICAgICAgICAgIEZJTEUgREVG QVVMVCBzZXR0aW5ncy4gU28gZG9lcyBTSE9XIENIQVJBQ1RFUi1TRVRTLgorCisgICBTRVQgRklM RSBERUZBVUxUIDhCSVQtQ0hBUkFDVEVSLVNFVCBuYW1lCisgICAgICAgICAgVGVsbHMgdGhlIDgt Yml0IGNoYXJhY3Rlci1zZXQgdG8gdXNlIGlmIHNjYW5uaW5nIGlkZW50aWZpZXMgYW4KKyAgICAg ICAgICA4LWJpdCB0ZXh0IGZpbGUsIGUuZy4gTEFUSU4xLiBTSE9XIEZJTEUgYW5kIFNIT1cgQ0hB UkFDVEVSLVNFVAorICAgICAgICAgIGRpc3BsYXkgdGhpcy4KKworICAgQVNTT0NJQVRFIEZJTEUt Q0hBUkFDVEVSLVNFVCBmY3MgdGNzCisgICAgICAgICAgV2hlbiBzZW5kaW5nIGZpbGVzIGFuZCBh IGZpbGUgY2hhcmFjdGVyLXNldCAoZmNzKSBpcyBpZGVudGlmaWVkCisgICAgICAgICAgYnkgc2Nh bm5pbmcsIHRoaXMgdGVsbHMgQy1LZXJtaXQgd2hpY2ggdHJhbnNmZXIgY2hhcmFjdGVyLXNldAor ICAgICAgICAgICh0Y3MpIHRvIHRyYW5zbGF0ZSBpdCB0by4gSXQgYWxzbyBhbGxvd3MgQy1LZXJt aXQgdG8gc2V0IHRoZQorICAgICAgICAgIGFwcHJvcHJpYXRlIHRyYW5zZmVyIGNoYXJhY3Rlci1z ZXQgYXV0b21hdGljYWxseSB3aGVuZXZlciB5b3UKKyAgICAgICAgICBnaXZlIGEgU0VUIEZJTEUg Q0hBUkFDVEVSLVNFVCBjb21tYW5kLgorCisgICBBU1NPQ0lBVEUgVFJBTlNGRVItQ0hBUkFDVEVS LVNFVCB0Y3MgZmNzCisgICAgICAgICAgV2hlbiByZWNlaXZpbmcgZmlsZXMgYW5kIGEgZmlsZSBh cnJpdmVzIHdob3NlIHRyYW5zZmVyCisgICAgICAgICAgY2hhcmFjdGVyLXNldCAodGNzKSBpcyBh bm5vdW5jZWQgYnkgdGhlIHNlbmRlciwgdGhpcyBjb21tYW5kCisgICAgICAgICAgdGVsbHMgQy1L ZXJtaXQgd2hpY2ggZmlsZSBjaGFyYWN0ZXItc2V0IChmY3MpIHRvIHRyYW5zbGF0ZSBpdAorICAg ICAgICAgIHRvLiBJdCBhbHNvIGFsbG93cyBDLUtlcm1pdCB0byBzZXQgdGhlIGFwcHJvcHJpYXRl IGZpbGUKKyAgICAgICAgICBjaGFyYWN0ZXItc2V0IHdoZW5ldmVyIHlvdSBnaXZlIGEgU0VUIFRS QU5TRkVSIENIQVJBQ1RFUi1TRVQKKyAgICAgICAgICBjb21tYW5kLgorCisgICBTRVQgRklMRSBD SEFSQUNURVItU0VUIG5hbWUKKyAgICAgICAgICBXaGVuIGdpdmVuIGZvciBhIDctYml0IHNldCwg YWxzbyBzZXRzIEZJTEUgREVGQVVMVAorICAgICAgICAgIDdCSVQtQ0hBUkFDVEVSLVNFVCB0byB0 aGUgc2FtZSBzZXQuIFdoZW4gZ2l2ZW4gZm9yIGFuIDgtYml0IHNldCwKKyAgICAgICAgICBhbHNv IHNldHMgRklMRSBERUZBVUxUIDhCSVQtQ0hBUkFDVEVSLVNFVCB0byB0aGUgc2FtZSBzZXQuIElm IGFuCisgICAgICAgICAgQVNTT0NJQVRFIEZJTEUtQ0hBUkFDVEVSLVNFVCBjb21tYW5kIGhhcyBi ZWVuIGdpdmVuIGZvciB0aGlzCisgICAgICAgICAgc2V0LCBhbHNvIHNldHMgdGhlIGNvcnJlc3Bv bmRpbmcgdHJhbnNmZXIgY2hhcmFjdGVyLXNldC4KKworICAgRElSRUNUT1JZIC9YRkVSTU9ERSBb IGZpbGVzcGVjIF0KKyAgICAgICAgICBQZXJmb3JtcyBhIGZpbGUgc2NhbiBvZiB0aGUgZ2l2ZW4g ZmlsZXMsIGxpc3RpbmcgdGhlIHJlc3VsdCBmb3IKKyAgICAgICAgICBlYWNoIGZpbGUuIElmIEZJ TEUgU0NBTiBpcyBPRkYgYnV0IFBBVFRFUk5TIGFyZSBPTiwgdGhlIHJlc3VsdAorICAgICAgICAg IHNob3duIGFjY29yZGluZyB0byB0aGUgY3VycmVudCBGSUxFIFRFWFQtUEFUVEVSTlMgYW5kCisg ICAgICAgICAgQklOQVJZLVBBVFRFUk5TLCBhbmQgYXJlIHJlc3RyaWN0ZWQgdG8gKEIpIGFuZCAo VCkuIFdoZW4gRklMRQorICAgICAgICAgIFNDQU4gaXMgT04sIHRoZSByZXN1bHRzIGFyZToKKwor ICAoQikgICAgICAgICAgQmluYXJ5CisgIChUKSg3QklUKSAgICBUZXh0OiA3LWJpdAorICAoVCko OEJJVCkgICAgVGV4dDogOC1iaXQKKyAgKFQpKFVURjgpICAgIFRleHQ6IFVuaWNvZGUgVVRGOAor ICAoVCkoVUNTMkJFKSAgVGV4dDogVW5pY29kZSBVQ1MyIEJpZyBFbmRpYW4KKyAgKFQpKFVDUzJM RSkgIFRleHQ6IFVuaWNvZGUgVUNTMiBMaXR0bGUgRW5kaWFuCisKKyAgICAgICAgICBTbyB5b3Ug Y2FuIHVzZSBESVIgL1hGRVIgdG8gZ2V0IGEgcHJldmlldyBvZiBob3cgZWFjaCBmaWxlIGluIGEK KyAgICAgICAgICBzZWxlY3RlZCBncm91cCB3aWxsIGJlIHRyYW5zZmVycmVkLiBFdmVyeXRoaW5n IHRvIHRoZSByaWdodCBvZgorICAgICAgICAgIHRoZSAoQikgb3IgKFQpIGlzIG5ldy4gSWYgRklM RSBTQ0FOIGlzIE9GRiwgeW91IG9ubHkgZ2V0IHRoZSAoQikKKyAgICAgICAgICBvciAoVCkgYXMg YmVmb3JlLgorCisgICAgICAgICAgTm90ZTogQmlnIGFuZCBMaXR0bGUgRW5kaWFuIHJlZmVyIHRv IHRoZSBvcmRlcmluZyBvZiBieXRlcworICAgICAgICAgIHdpdGhpbiBhIGNvbXB1dGVyIHdvcmQu IEJpZyBFbmRpYW4gYXJjaGl0ZWN0dXJlIGlzIHN0YW5kYXJkIGFuZAorICAgICAgICAgIGlzIHVz ZWQgb24gbW9zdCBub24tUEMgY29tcHV0ZXJzLiBMaXR0bGUgRW5kaWFuIGFyY2hpdGVjdHVyZSBp cworICAgICAgICAgIHVzZWQgb24gUENzLgorCisgICBUbyBpbGx1c3RyYXRlIGZpbGUtdHJhbnNm ZXIgd2l0aCBzY2FubmluZywgc3VwcG9zZSB5b3UgaGF2ZSBhIGRpcmVjdG9yeQorICAgY29udGFp bmluZyBhIG1peHR1cmUgb2YgdGV4dCBhbmQgYmluYXJ5IGZpbGVzLCBhbmQgZWFjaCB0ZXh0IGZp bGUgY2FuCisgICBiZSA3LWJpdCBHZXJtYW4gSVNPIDY0NiwgOC1iaXQgTGF0aW4tMSwgb3IgVW5p Y29kZSBpbiBhbnkgb2YgdGhlCisgICBmb2xsb3dpbmcgZm9ybXM6IFVDUzIgTGl0dGxlIEVuZGlh biwgVUNTMiBCaWcgRW5kaWFuLCBvciBVVEY4CisgICAoWzM4MV1VVEYtMTYgaXMgbm90IHN1cHBv cnRlZCB5ZXQpLiBBc3N1bWluZyBhbGwgdGhlIGJ1aWx0LWluIGRlZmF1bHRzCisgICBhcmUgaW4g ZWZmZWN0LCB0aGUgZm9sbG93aW5nIHRocmVlIGNvbW1hbmRzIGRvIHRoZSBqb2I6CisKKyAgc2V0 IGZpbGUgY2hhciBnZXJtYW4gICA7IFRoaXMgc2V0cyB0aGUgZGVmYXVsdCBmb3IgNy1iaXQgdGV4 dCBmaWxlcworICBzZXQgZmlsZSBjaGFyIGxhdGluMSAgIDsgVGhpcyBzZXRzIHRoZSBkZWZhdWx0 IGZvciA4LWJpdCB0ZXh0IGZpbGVzCisgIHNlbmQgKgorCisgICBFYWNoIGZpbGUgaXMgc2VudCBp biB0aGUgYXBwcm9wcmlhdGUgbW9kZSAodGV4dCBvciBiaW5hcnkpLCB3aXRoIHRleHQKKyAgIGZp bGVzIGNvbnZlcnRlZCB0byB0aGUgYXBwcm9wcmlhdGUgdHJhbnNmZXIgY2hhcmFjdGVyLXNldCBh bmQgbGFiZWxlZAorICAgc28gdGhlIHJlY2VpdmVyIGNhbiBjb252ZXJ0IHRoZW0gYWNjb3JkaW5n IHRvIGl0cyBvd24gbG9jYWwKKyAgIGNvbnZlbnRpb25zLgorCisgICBCeSB0aGUgd2F5LCB3aGF0 IGlmIHlvdSB3YW50IHRvIGluaGliaXQgY2hhcmFjdGVyLXNldCB0cmFuc2xhdGlvbiBidXQKKyAg IHN0aWxsIGFsbG93IGF1dG9tYXRpYyB0ZXh0L2JpbmFyeSBtb2RlIHN3aXRjaGluZz8gUHJldmlv dXNseSwgeW91IGNvdWxkCisgICBzaW1wbHkgU0VUIFRSQU5TRkVSIENIQVJBQ1RFUi1TRVQgVFJB TlNQQVJFTlQuIEJ1dCBub3cgd2l0aCBmaWxlCisgICBzY2FubmluZywgdGhlIGZpbGUgYW5kIHRy YW5zZmVyIGNoYXJhY3Rlci1zZXRzIGFyZSBzZXQgYXV0b21hdGljYWxseQorICAgcGVyIGZpbGUu IEEgbmV3IGNvbW1hbmQgd2FzIGFkZGVkIGZvciB0aGlzIHB1cnBvc2U6CisKKyAgIFNFVCBUUkFO U0ZFUiBUUkFOU0xBVElPTiB7IE9OLCBPRkYgfQorICAgICAgICAgIEVuYWJsZXMgYW5kIGRpc2Fi bGVzIGZpbGUtdHJhbnNmZXIgY2hhcmFjdGVyLXNldCB0cmFuc2xhdGlvbi4gSXQKKyAgICAgICAg ICBpcyBlbmFibGVkIGJ5IGRlZmF1bHQuCisKKyAgIFdoZW4gVFJBTlNGRVIgVFJBTlNMQVRJT04g aXMgT0ZGIGJ1dCBGSUxFIFNDQU4gaXMgT04sIGZpbGVzIGFyZSBzdGlsbAorICAgc2Nhbm5lZCB0 byBzZWUgaWYgdGhleSBhcmUgdGV4dCBvciBiaW5hcnksIGJ1dCBubyBjaGFyYWN0ZXItc2V0Cisg ICB0cmFuc2xhdGlvbiBpcyBkb25lIHdoZW4gdGhleSB0ZXh0OiBvbmx5IHRoZSBub3JtYWwgcmVj b3JkLWZvcm1hdAorICAgY29udmVyc2lvbi4KKworICAgTGlrZSBhbGwgU0VUIGNvbW1hbmRzLCBT RVQgVFJBTlNGRVIgVFJBTlNMQVRJT04gaXMgZ2xvYmFsIGFuZAorICAgcGVyc2lzdGVudC4gWW91 IGNhbiBhbHNvIGZvcmNlIGEgcGFydGljdWxhciBmaWxlLXRyYW5zZmVyIGNvbW1hbmQKKyAgIChT RU5ELCBNU0VORCwgR0VULCBSRUNFSVZFLCBUUkFOU01JVCwgZXRjKSB0byBub3QgdHJhbnNsYXRl IHdpdGhvdXQKKyAgIGFmZmVjdGluZyB0aGUgZ2xvYmFsIHRyYW5zbGF0aW9uIHNldHRpbmdzIGJ5 IGluY2x1ZGluZyB0aGUgbmV3CisgICAvVFJBTlNQQVJFTlQgc3dpdGNoLCBlLmcuCisKKyAgc2Vu ZCAvdHJhbnNwYXJlbnQgb29mYS50eHQKKworICAgQXMgb2YgQy1LZXJtaXQgOC4wLjIwNiwgU0VU IFRSQU5TRkVSIENIQVJBQ1RFUi1TRVQgVFJBTlNQQVJFTlQgaW1wbGllcworICAgU0VUIFRSQU5T RkVSIFRSQU5TTEFUSU9OIE9GRi4KKworICAgRmlsZSBzY2FubmluZyBpcyBhbHNvIHVzZWQgaW4g dGhlIFRZUEUgY29tbWFuZC4gVGhlIHNvdXJjZSBmaWxlIHR5cGUKKyAgIGFuZCBjaGFyYWN0ZXIg c2V0IGFyZSBkZXRlcm1pbmVkIGFzIGFib3ZlLCBhbmQgdGhlbiB0aGUgZmlsZSBpcworICAgYXV0 b21hdGljYWxseSBjb252ZXJ0ZWQgdG8geW91ciBkaXNwbGF5IGNoYXJhY3Rlci1zZXQsIGxpbmUg YnkgbGluZS4gSW4KKyAgIEtlcm1pdCA5NSwgdGhlIGRpc3BsYXkgY2hhcmFjdGVyLXNldCBpcyBV bmljb2RlLCBwZXJoYXBzIGNvbnZlcnRlZCB0bworICAgeW91ciBjdXJyZW50IGNvbnNvbGUgY29k ZSBwYWdlOyBpbiBvdGhlciB2ZXJzaW9ucyBvZiBDLUtlcm1pdCwgaXQgaXMKKyAgIHlvdXIgY3Vy cmVudCBmaWxlIGNoYXJhY3Rlci1zZXQuIFRodXMgaWYgeW91IGhhdmUgdGhlIGZvbGxvd2luZyBz ZXQKKyAgIGFwcHJvcHJpYXRlbHk6CisKKyAgU0VUIEZJTEUgQ0hBUkFDVEVSLVNFVCAobmVjZXNz YXJ5IGluIFVuaXggYnV0IG5vdCBLOTUpCisgIFNFVCBGSUxFIERFRkFVTFQgN0JJVCBDSEFSQUNU RVItU0VUCisgIFNFVCBGSUxFIERFRkFVTFQgOEJJVCBDSEFSQUNURVItU0VUCisKKyAgIHRoZW4g eW91IHNob3VsZCBiZSBhYmxlIHRvIFRZUEUgYW55IHRleHQgZmlsZSBhbmQgc2VlIHNvbWV0aGlu ZworICAgcmVhc29uYWJsZS4gRm9yIGV4YW1wbGUsIGluIFVuaXgsIGlmIHlvdXIgREVGQVVMVCA3 QklULUNIQVJBQ1RFUi1TRVQgaXMKKyAgIElUQUxJQU4gYW5kIHlvdXIgREVGQVVMVCA4QklULUNI QVJBQ1RFUi1TRVQgaXMgTEFUSU4xLCBhbmQgeW91ciBGSUxFCisgICBDSEFSQUNURVItU0VUIGlz IExBVElOMSwgeW91IGNhbiBUWVBFIGFuIEl0YWxpYW4gSVNPIDY0NiBmaWxlLCBhCisgICBMYXRp bi0xIGZpbGUsIG9yIGFueSBraW5kIG9mIFVuaWNvZGUgZmlsZSwgYW5kIGhhdmUgaXQgdHJhbnNs YXRlZAorICAgYXV0b21hdGljYWxseSB0byBMYXRpbi0xIGZvciB5b3VyIGRpc3BsYXkuCisKKyAg IEluIHRoZSBHVUkgdmVyc2lvbiBvZiBLZXJtaXQgOTUsIHlvdSBjYW4gc2VlIG1peHR1cmVzIG9m IG1hbnkgZGlmZmVyZW50CisgICBzY3JpcHRzIGlmIHRoZSBmaWxlIGlzIFVURjggb3IgVUNTMjog Um9tYW4sIEN5cmlsbGljLCBIZWJyZXcsIEdyZWVrLAorICAgQXJtZW5pYW4sIEdlb3JnaWFuLCBl dGMsIGFsbCBvbiB0aGUgc2FtZSBzY3JlZW4gYXQgb25jZS4KKworICAgRmlsZSBzY2FubmluZyBh bHNvIGFkZHMgYSBuZXcgY3JpdGVyaW9uIGZvciBmaWxlIHNlbGVjdGlvbiwgaS5lLiB0bworICAg c2VsZWN0IG9ubHkgdGV4dCAob3IgYmluYXJ5KSBmaWxlcy4gU2V2ZXJhbCBjb21tYW5kcyBub3cg aW5jbHVkZSBhIG5ldworICAgc3dpdGNoLCAvVFlQRTp7QklOQVJZLFRFWFQsQUxMfS4gQklOQVJZ IG1lYW5zIHNlbGVjdCBvbmx5IGJpbmFyeQorICAgcmVndWxhciBmaWxlcyAobm90IGRpcmVjdG9y aWVzKS4gVEVYVCBtZWFucyBzZWxlY3Qgb25seSB0ZXh0IGZpbGVzLiBBTEwKKyAgIG1lYW5zIGRv bid0IHNjYW47IHNlbGVjdCBhbGwgZmlsZXMuIEV4YW1wbGVzOgorCisgICBTRU5EIC9UWVBFOkJJ TkFSWSAqLioKKyAgICAgICAgICBTZW5kcyBvbmx5IGJpbmFyeSBmaWxlcywgc2tpcHBpbmcgb3Zl ciB0ZXh0IGZpbGVzLgorCisgICBOT1RFOiBGaWxlIHNjYW5uaW5nIGlzIE5PVCBkb25lIHdoZW4g dXNpbmcgZXh0ZXJuYWwgcHJvdG9jb2xzIChiZWNhdXNlCisgICB0aGUgZXh0ZXJuYWwgcHJvdG9j b2wgcHJvZ3JhbXMsIHN1Y2ggYXMgc3osIGFyZSBwcm9jZXNzaW5nIGVhY2ggZmlsZSwKKyAgIG5v dCBLZXJtaXQpLgorCisgICBESVJFQ1RPUlkgL1RZUEU6VEVYVAorICAgICAgICAgIExpc3RzIG9u bHkgdGV4dCBmaWxlcyBidXQgbm90IGJpbmFyeSBmaWxlcy4KKworICAgREVMRVRFIC9UWVBFOkJJ TkFSWSBmb28uKgorICAgICAgICAgIERlbGV0ZXMgYWxsIGZvby4qIGZpbGVzIHRoYXQgYXJlIHJl Z3VsYXIgYmluYXJ5IGZpbGVzIGJ1dCBkb2VzCisgICAgICAgICAgbm90IGRlbGV0ZSBhbnkgdGV4 dCBmaWxlcy4KKworICAgQ0hNT0QgL1RZUEU6QklOQVJZIDc3NSAqCisgICAgICAgICAgKFVOSVgp IENoYW5nZXMgdGhlIHBlcm1pc3Npb25zIG9mIGFsbCBiaW5hcnkgZmlsZXMgdG8gNzc1LgorCisg ICBXaGVuIEZJTEUgU0NBTiBpcyBPRkYgYW5kIEZJTEUgUEFUVEVSTlMgYXJlIE9OLCBiZWhhdmlv ciBpcyBhcyBiZWZvcmUKKyAgIHdpdGggUEFUVEVSTlMgT04sIGJ1dCB3aXRoIHNvbWUgaW1wcm92 ZW1lbnRzOgorCisgICAgICogUGF0aG5hbWVzIGFyZSBub3cgc3RyaXBwZWQgcHJpb3IgdG8gcGF0 dGVybiBtYXRjaGluZy4KKyAgICAgKiBCYWNrdXAgc3VmZml4ZXMgKGxpa2UgLn4zfikgYXJlIHN0 cmlwcGVkIHByaW9yIHRvIHBhdHRlcm4gbWF0Y2hpbmcuCisKKyAgIFsgWzM4Ml1Ub3AgXSBbIFsz ODNdQ29udGVudHMgXSBbIFszODRdQy1LZXJtaXQgSG9tZSBdIFsgWzM4NV1LZXJtaXQKKyAgIEhv bWUgXQorCis1LiBGSUxFIEFORCBESVJFQ1RPUlkgTkFNRVMgQ09OVEFJTklORyBTUEFDRVMKKwor ICAgUHJpb3IgdG8gdGhlIGludHJvZHVjdGlvbiBvZiB0aGUgZ3JhcGhpY2FsIHVzZXIgaW50ZXJm YWNlIChHVUkpLCBpdCB3YXMKKyAgIGluY29uY2VpdmFibGUgdGhhdCBmaWxlIG9yIGRpcmVjdG9y eSBuYW1lcyBjb3VsZCBjb250YWluIHNwYWNlcywKKyAgIGJlY2F1c2Ugc3BhY2UgaXMgYSBmaWVs ZCBkZWxpbWl0ZXIgaW4gYWxsIGNvbW1hbmQgbGFuZ3VhZ2VzLiBHVUlzLAorICAgaG93ZXZlciwg dXNlIGRpYWxvZyBib3hlcyBmb3IgZmlsZW5hbWVzLCBzbyB0aGVyZSBpcyBuZXZlciBhbnkgcXVl c3Rpb24KKyAgIG9mIGRpc3Rpbmd1aXNoaW5nIGEgZmlsZW5hbWUgZnJvbSBhZGphY2VudCBmaWVs ZHMgLS0gYmVjYXVzZSB0aGVyZSBhcmUKKyAgIG5vIGFkamFjZW50IGZpZWxkcyAtLSBhbmQgdGhl cmVmb3JlIGl0IGhhcyBiZWNvbWUgcXVpdGUgY29tbW9uIG9uCisgICBjb21wdXRlcnMgdGhhdCBo YXZlIEdVSXMgdG8gaGF2ZSBmaWxlIGFuZCBkaXJlY3RvcnkgbmFtZXMgY29tcG9zZWQgb2YKKyAg IG11bHRpcGxlIHdvcmRzLiBPZiBjb3Vyc2UgdGhpcyBwb3NlcyBwcm9ibGVtcyBmb3IgY29tbWFu ZCBzaGVsbHMgYW5kCisgICBvdGhlciB0ZXh0LW9yaWVudGVkIHByb2dyYW1zLgorCisgICBNb3N0 IGNvbW1hbmQgc2hlbGxzIGFkZHJlc3MgdGhlc2UgcHJvYmxlbXMgYnkgYWxsb3dpbmcgc3VjaCBu YW1lcyB0byBiZQorICAgZW5jbG9zZWQgaW4gZG91YmxlcXVvdGVzLCBlLmcuOgorCisgIGNkICJj OlxQcm9ncmFtIEZpbGVzIgorCisgICBDLUtlcm1pdCBwcmV2aW91c2x5IHVzZWQgYnJhY2VzIGZv ciB0aGlzOgorCisgIGNkIHtjOlxQcm9ncmFtIEZpbGVzfQorCisgICB3aGljaCB3YXMgbm90IHdo YXQgbW9zdCBwZW9wbGUgZXhwZWN0ZWQuIEFuZCBldmVuIHdoZW4gYnJhY2VzIHdlcmUKKyAgIHVz ZWQsIEtlcm1pdCBoYWQgZGlmZmljdWx0aWVzIHdpdGggY29tcGxldGlvbiwgZmlsZSBtZW51cywg YW5kIHNvCisgICBmb3J0aCwgd2l0aGluIGJyYWNlZCBmaWVsZHMuCisKKyAgIEMtS2VybWl0IDgu MCBhbGxvd3MgZWl0aGVyIGRvdWJsZXF1b3RlcyBvciBicmFjZXMgdG8gYmUgdXNlZCBmb3IKKyAg IGdyb3VwaW5nOgorCisgIHNlbmQgInRoaXMgZmlsZSIKKyAgc2VuZCB7dGhpcyBmaWxlfQorICBy ZW5hbWUgInRoaXMgZmlsZSIgInRoYXQgZmlsZSIKKyAgcmVuYW1lIHt0aGlzIGZpbGV9ICJ0aGF0 IGZpbGUiCisgIHJlbmFtZSAidGhpcyBmaWxlIiB7dGhhdCBmaWxlfQorICBjZCB7UHJvZ3JhbSBG aWxlc30KKyAgY2QgIlByb2dyYW0gRmlsZXMiCisKKyAgIE5vdGUgdGhhdCB0aGUgZG91YmxlcXVv dGVzIG9yIGJyYWNrZXRzIG11c3QgZW5jbG9zZSB0aGUgd2hvbGUgZmlsZSBvcgorICAgZGlyZWN0 b3J5IHNwZWNpZmljYXRpb246CisKKyAgImM6XE15IERpcmVjdG9yeSIKKworICAgbm90OgorCisg IGM6XCJNeSBEaXJlY3RvcnkiCisKKyAgIEluIEMtS2VybWl0IDguMCwgeW91IGNhbiBhbHNvIHVz ZSBjb21wbGV0aW9uIG9uIHRoZXNlIGZpbGVuYW1lcywgaW4KKyAgIHdoaWNoIGNhc2UgS2VybWl0 IHN1cHBsaWVzIHRoZSBxdW90ZXMgKG9yIGJyYWNlcykgYXV0b21hdGljYWxseS4KKyAgIEV4YW1w bGUgKGluIHdoaWNoIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBjb250YWlucyBvbmx5IG9uZSBmaWxl IHdob3NlCisgICBuYW1lIHN0YXJ0cyB3aXRoICJ0aCIgYW5kIGl0cyBmdWxsIG5hbWUgaXMgInRo aXMgZmlsZSIgKHdpdGhvdXQgdGhlCisgICBxdW90ZXMsIGJ1dCB3aXRoIHRoZSBzcGFjZSkpOgor CisgIGNhdCB0aDxUYWI+CisKKyAgIEtlcm1pdCByZXBhaW50cyB0aGUgZmlsZW5hbWUgZmllbGQg bGlrZSB0aGlzOgorCisgIGNhdCAidGhpcyBmaWxlIgorCisgICBUaGF0IGlzLCBpdCBiYWNrc3Bh Y2VzIG92ZXIgdGhlIG9yaWdpbmFsICJ0aCIgYW5kIHRoZW4gd3JpdGVzIHRoZQorICAgZmlsZW5h bWUgaW4gZG91YmxlcXVvdGVzLgorCisgICBJZiBjb21wbGV0aW9uIGlzIG9ubHkgcGFydGlhbCwg S2VybWl0IHN0aWxsIHN1cHBsaWVzIHRoZSBxdW90ZXMsIGJ1dCBpbgorICAgdGhpcyBjYXNlIGFs c28gYmVlcHMuIFRvIGNvbnRpbnVlIHRoZSBmaWxlbmFtZSwgeW91IG11c3QgZmlyc3QKKyAgIGJh Y2tzcGFjZSBvdmVyIHRoZSBjbG9zaW5nIHF1b3RlLiBUaGUgY2xvc2luZyBxdW90ZSBpcyBzdXBw bGllZCBpbiB0aGlzCisgICBjYXNlIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdSBjYW4gc2VlIHRoZSBz cGFjZXMsIGVzcGVjaWFsbHkgaWYgdGhleSBhcmUKKyAgIHRyYWlsaW5nLiBGb3IgZXhhbXBsZSwg aWYgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGNvbnRhaW5zIHR3byBmaWxlcworICAgd2hvc2UgbmFt ZXMgc3RhcnQgd2l0aCAidGgiLCBhbmQgdGhlaXIgZmlsbCBuYW1lcyBhcmUgInRoaXMgZmlsZSIg YW5kCisgICAidGhpcyBvdGhlciBmaWxlIjoKKworICBjYXQgdGg8VGFiPgorCisgICBLZXJtaXQg cHJpbnRzOgorCisgIGNhdCAidGhpcyAiPEJlZXA+CisKKyAgIElmIGl0IGRpZG4ndCBwcmludCB0 aGUgY2xvc2luZyBxdW90ZSwgeW91IHdvdWxkIHByb2JhYmx5IHdvbmRlciB3aHkgaXQKKyAgIHdh cyBiZWVwaW5nLgorCisgICBBbHNvLCBpZiB5b3UgYmVnaW4gYSBmaWxlbmFtZSBmaWVsZCB3aXRo IGEgZG91YmxlcXVvdGUgb3Igb3BlbmluZworICAgYnJhY2UsIG5vdyB5b3UgY2FuIHVzZSBjb21w bGV0aW9uIG9yIGdldCA/LWhlbHA7IHRoaXMgd2FzIG5ldmVyCisgICBwb3NzaWJsZSBiZWZvcmUu CisKKyBDLUtlcm1pdD50eXBlICJ0aGk/IElucHV0IGZpbGUgc3BlY2lmaWNhdGlvbiwgb25lIG9m IHRoZSBmb2xsb3dpbmc6CisgICB0aGlzIGZpbGUgICAgICAgIHRoaXMgb3RoZXIgZmlsZQorIEMt S2VybWl0PnR5cGUgInRoaV8KKworICAgWyBbMzg2XVRvcCBdIFsgWzM4N11Db250ZW50cyBdIFsg WzM4OF1DLUtlcm1pdCBIb21lIF0gWyBbMzg5XUtlcm1pdAorICAgSG9tZSBdCisKKzYuIE9USEVS IENPTU1BTkQgUEFSU0lORyBJTVBST1ZFTUVOVFMKKworNi4xLiBHcm91cGluZyBNYWNybyBBcmd1 bWVudHMKKworICAgRG91YmxlcXVvdGVzIG5vdyBjYW4gYmUgdXNlZCBpbiBtYWNybyBpbnZvY2F0 aW9ucyB0byBncm91cCBhcmd1bWVudHMKKyAgIGNvbnRhaW5pbmcgc3BhY2VzLCB3aGVyZSBwcmV2 aW91c2x5IG9ubHkgYnJhY2VzIGNvdWxkIGJlIHVzZWQ6CisKKyAgZGVmaW5lIHh4IHNob3cgYXJn cworICB4eCBvbmUgInRoaXMgaXMgdHdvIiB0aHJlZQorCisgICBSZXN1bHQ6CisKKyAgTWFjcm8g YXJndW1lbnRzIGF0IGxldmVsIDAgKFx2KGFyZ2MpID0gNCk6CisgICBcJTAgPSB4eAorICAgXCUx ID0gb25lCisgICBcJTIgPSB0aGlzIGlzIHR3bworICAgXCUzID0gdGhyZWUKKworICAgQWxzbywg eW91IGNhbiBub3cgcXVvdGUgYnJhY2VzIGFuZCBxdW90ZXMgaW4gbWFjcm8gYXJncyAodGhpcyBk aWRuJ3QKKyAgIHdvcmsgYmVmb3JlKS4gRXhhbXBsZXM6CisKKyAgeHggInsiICA7IFRoZSBhcmd1 bWVudCBpcyBhIHNpbmdsZSBsZWZ0IGJyYWNlCisgIHh4IHsifSAgOyBUaGUgYXJndW1lbnQgaXMg YSBkb3VibGVxdW90ZSBjaGFyYWN0ZXIKKworICAgSW4gY2FzZSB0aGlzIG5ldyBiZWhhdmlvciBp bnRlcmZlcmVzIHdpdGggeW91ciBzY3JpcHRzLCB5b3UgY2FuIHJlc3RvcmUKKyAgIHRoZSBwcmV2 aW91cyBiZWhhdmlvciB3aXRoOgorCisgIFNFVCBDT01NQU5EIERPVUJMRVFVT1RJTkcgT0ZGCisK KzYuMi4gRGlyZWN0b3J5IGFuZCBGaWxlIE5hbWUgQ29tcGxldGlvbgorCisgICBDLUtlcm1pdCA4 LjAgYWxzbyBpbmNsdWRlcyBiZXR0ZXIgY29tcGxldGlvbiBmb3IgZGlyZWN0b3J5IG5hbWVzLCBl LmcuCisgICBpbiB0aGUgQ0QgY29tbWFuZC4gSWYgdGhlIG5hbWUgdHlwZWQgc28gZmFyIHVuaXF1 ZWx5IG1hdGNoZXMgYQorICAgZGlyZWN0b3J5IG5hbWUsIGl0IGlzIGNvbXBsZXRlZCAoYXMgYmVm b3JlKSwgYnV0IG5vdyBpZiB0aGUgZGlyZWN0b3J5CisgICBjb250YWlucyBhbnkgc3ViZGlyZWN0 b3JpZXMsIGNvbXBsZXRpb24gaXMgcGFydGlhbCAoYWxsb3dpbmcgeW91IHRvCisgICBzdXBwbHkg YWRkaXRpb25hbCBwYXRoIHNlZ21lbnRzIHdpdGhvdXQgYmFja3NwYWNpbmcpOyBvdGhlcndpc2Ug aXQgaXMKKyAgIGNvbXBsZXRlLgorCisgICBDb21wbGV0aW9uIGhhcyBhbHNvIGJlZW4gaW1wcm92 ZWQgZm9yIGZpbGUgYW5kIGRpcmVjdG9yeSBuYW1lcyB0aGF0CisgICBjb250YWluIG5vdCBvbmx5 IHNwYWNlcyAoYXMgZGVzY3JpYmVkIGFib3ZlKSBidXQgYWxzbyAibWV0YWNoYXJhY3RlcnMiCisg ICBzdWNoIGFzIGFzdGVyaXNrICgqKSBhbmQgdGlsZGUgKH4pOiBub3cgdGhlIGZpZWxkIGlzIHJl cGFpbnRlZCBpZgorICAgbmVjZXNzYXJ5LiBGb3IgZXhhbXBsZSwgaWYgdGhlIGN1cnJlbnQgZGly ZWN0b3J5IGNvbnRhaW5zIG9ubHkgb25lIGZpbGUKKyAgIHdob3NlIG5hbWUgY29udGFpbnMgImJs YWgiLCB0aGVuIGluOgorCisgIHR5cGUgKmJsYWg8VGFiPgorCisgICAiKmJsYWgiIGlzIHJlcGxh Y2VkIGJ5IHRoZSBmaWxlbmFtZS4gSW4gZWFybGllciByZWxlYXNlcywgdGhlIHBhcnQKKyAgIHR5 cGVkIHNvIGZhciB3YXMgbGVmdCBvbiB0aGUgY29tbWFuZCBsaW5lIChhbmQgaW4gdGhlIGhpc3Rv cnkgYnVmZmVyKSwKKyAgIHNvIGV2ZW4gd2hlbiB0aGUgb3JpZ2luYWwgY29tbWFuZCB3b3JrZWQs IHRoZSByZWNhbGxlZCB2ZXJzaW9uIHdvdWxkCisgICBub3QuIFNpbWlsYXJseSBmb3IgfiAodGhl IG5lYXJseS11bml2ZXJzYWwgVW5peCBub3RhdGlvbiBmb3IgdXNlcm5hbWUpOgorCisgIHR5cGUg fm9sZ2EveDxUYWI+CisKKyAgIGlzIHJlcGFpbnRlZCBhcyAoZS5nLik6CisKKyAgdHlwZSAvdXNl cnMvaG9tZS9vbGdhL3goQmVlcCkKKworICAgU3BlYWtpbmcgb2YgY29tbWFuZCBoaXN0b3J5LCB0 aGUgbmV3IFNIT1cgSElTVE9SWSBjb21tYW5kIHNob3dzIHlvdXIKKyAgIGNvbW1hbmQgaGlzdG9y eSBhbmQgcmVjYWxsIGJ1ZmZlci4gU0FWRSBDT01NQU5EIEhJU1RPUlkgc2F2ZXMgaXQgaW50byBh CisgICBmaWxlIG9mIHlvdXIgY2hvaWNlLgorCis2LjMuIFBhc3NpbmcgQXJndW1lbnRzIHRvIENv bW1hbmQgRmlsZXMKKworICAgVGhlIG1ldGhvZCBmb3IgcGFzc2luZyBhcmd1bWVudHMgdG8gY29t bWFuZCBmaWxlcyBoYXMgYmVlbiBpbXByb3ZlZC4KKyAgIFByaW9yIHRvIEMtS2VybWl0IDcuMCB0 aGVyZSB3YXMgbm8gcHJvdmlzaW9uIGZvciBkb2luZyB0aGlzLiBJbgorICAgQy1LZXJtaXQgNy4w LCB0aGUgVEFLRSBjb21tYW5kIHdhcyBjaGFuZ2VkIHRvIGFsbG93IGFyZ3VtZW50cyB0byBiZQor ICAgZ2l2ZW4gYWZ0ZXIgdGhlIGZpbGVuYW1lOgorCisgIHRha2UgY29tbWFuZGZpbGUgYXJnMSBh cmcyIC4uLgorCisgICBUaGlzIHdhcyBhY2NvbXBsaXNoZWQgYnkgcmVwbGFjaW5nIHRoZSBjdXJy ZW50IFwlMSwgXCUyLCBldGMsIHdpdGggdGhlCisgICBnaXZlbiBhcmd1bWVudHMsIHNpbmNlIGEg bmV3IHNldCBvZiBtYWNybyBhcmd1bWVudCB2YXJpYWJsZXMgaXMgY3JlYXRlZAorICAgb25seSB3 aGVuIGEgbWFjcm8gaXMgZXhlY3V0ZWQsIG5vdCBhIGNvbW1hbmQgZmlsZS4gSXQgaXMgbXVjaCBt b3JlCisgICBpbnR1aXRpdmUsIGhvd2V2ZXIsIGlmIGFyZ3VtZW50cyB0byBjb21tYW5kIGZpbGVz IHdvcmtlZCBsaWtlIHRob3NlIHRvCisgICBtYWNyb3M6IHRoZSBjb21tYW5kIGZpbGUgc2VlcyB0 aGUgYXJndW1lbnRzIGFzIGl0cyBvd24gXCUxLCBcJTIsIGV0YywKKyAgIGJ1dCB0aGUgY2FsbGVy J3MgdmFyaWFibGVzIGFyZSBub3QgZGlzdHVyYmVkLiBDLUtlcm1pdCA4LjAgYWNjb21wbGlzaGVz CisgICB0aGlzIGJ5IGF1dG9tYXRpY2FsbHkgY3JlYXRpbmcgYW4gaW50ZXJtZWRpYXRlIHRlbXBv cmFyeSBtYWNybyB0byBzdGFydAorICAgdGhlIGNvbW1hbmQgZmlsZSAoaWYgYW55IGFyZ3VtZW50 cyB3ZXJlIGdpdmVuKSwgdGh1cyBjcmVhdGluZyBhIG5ldworICAgbGV2ZWwgb2YgYXJndW1lbnRz IGFzIGV4cGVjdGVkLgorCis2LjQuIE1vcmUtUHJvbXB0aW5nCisKKyAgIFRoZSBmYW1pbGlhciAt LW1vcmU/LS0gcHJvbXB0IHRoYXQgYXBwZWFycyBhdCB0aGUgZW5kIG9mIGVhY2ggc2NyZWVuZnVs CisgICBvZiBjb21tYW5kLXJlc3BvbnNlIG91dHB1dCBub3cgYWNjZXB0cyBhIG5ldyBhbnN3ZXI6 IEcgKEdvKSBtZWFuaW5nCisgICAic2hvdyBhbGwgdGhlIHJlc3Qgd2l0aG91dCBwYXVzaW5nIGFu ZCBhc2tpbmcgbWUgYW55IG1vcmUgcXVlc3Rpb25zIi4gUAorICAgKFByb2NlZWQpIGlzIGEgc3lu b255bSBmb3IgRy4KKworNi41LiBDb21tYXMgaW4gTWFjcm8gRGVmaW5pdGlvbnMKKworICAgQXMg bm90ZWQgaW4gdGhlIFszOTBdQy1LZXJtaXQgbWFudWFsLCBjb21tYSBpcyB1c2VkIHRvIHNlcGFy YXRlCisgICBjb21tYW5kcyBpbiBhIG1hY3JvIGRlZmluaXRpb24uIEV2ZW4gd2hlbiB0aGUgbWFj cm8gaXMgZGVmaW5lZCBvbgorICAgbXVsdGlwbGUgbGluZXMgdXNpbmcgY3VybHktYnJhY2UgYmxv Y2stc3RydWN0dXJlIG5vdGF0aW9uIHdpdGhvdXQKKyAgIGNvbW1hcywgdGhlIGRlZmluaXRpb24g aXMgc3RpbGwgc3RvcmVkIGludGVybmFsbHkgYXMgYSBjb21tYS1zZXBhcmF0ZWQKKyAgIGxpc3Qg b2YgY29tbWFuZHMuIFRoZXJlZm9yZSBzcGVjaWFsIHRyaWNrcyBhcmUgbmVlZGVkIHRvIGluY2x1 ZGUgYQorICAgY29tbWEgaW4gYSBjb21tYW5kLiBUaGUgY2xhc3NpYyBleGFtcGxlIGlzOgorCisg IGRlZmluZSBmb28geworICAgICAgKHNvbWUgY29tbWFuZCkKKyAgICAgIGlmIGZhaWwgZWNobyBT b3JyeSwgYmxhaCBmYWlsZWQuLi4KKyAgfQorCisgICBUaGlzIHdvdWxkIHJlc3VsdCBpbiBLZXJt aXQgdHJ5aW5nIHRvIGV4ZWN1dGUgYSAiYmxhaCIgY29tbWFuZC4gVGhpcworICAgY291bGQgYWx3 YXlzIGJlIGhhbmRsZWQgYnkgZW5jbG9zaW5nIHRoZSB0ZXh0IGluIGJyYWNlczoKKworICBkZWZp bmUgZm9vIHsKKyAgICAgIChzb21lIGNvbW1hbmQpCisgICAgICBpZiBmYWlsIGVjaG8ge1NvcnJ5 LCBibGFoIGZhaWxlZC4uLn0KKyAgfQorCisgICBidXQgZG91YmxlcXVvdGVzIChtb3JlIGludHVp dGl2ZSkgc2hvdWxkIGhhdmUgd29ya2VkIHRvby4gTm93IHRoZXkgZG86CisKKyAgZGVmaW5lIGZv byB7CisgICAgICAoc29tZSBjb21tYW5kKQorICAgICAgaWYgZmFpbCBlY2hvICJTb3JyeSwgYmxh aCBmYWlsZWQuLi4iCisgIH0KKworNi42LiBBcnJvdyBLZXlzCisKKyAgIEFzIG9mIHZlcnNpb24g OC4wLjIwMSwgQy1LZXJtaXQgb24gbW9zdCBwbGF0Zm9ybXMgbGV0cyB5b3UgYWNjZXNzIHRoZQor ICAgY29tbWFuZCBoaXN0b3J5IGJ1ZmZlciB3aXRoIGFycm93IGtleXMsIGp1c3QgYXMgeW91IGFs d2F5cyBjb3VsZCB3aXRoCisgICBjb250cm9sIGNoYXJhY3RlcnMuIFRoZSByZXN0cmljdGlvbnMg YXJlOgorCisgICAgMS4gT25seSBVcCBhbmQgRG93biBhcnJvdyBrZXlzIGFyZSBhY2NlcHRlZC4K KyAgICAyLiBPbmx5IDctYml0IEFOU0kgYXJyb3cta2V5IHNlcXVlbmNlcyBhcmUgdW5kZXJzdG9v ZCAoRVNDIGZvbGxvd2VkIGJ5CisgICAgICAgWyBvciB1cHBlcmNhc2UgbGV0dGVyIE8sIGZvbGxv d2VkIGJ5IHVwcGVyY2FzZSBsZXR0ZXIgQSBvciAodXApIEIKKyAgICAgICAoZG93bikuCisKKyAg IFRoaXMgY2hhbmdlIHdhcyBtYWRlIHRvIGZhY2lsaXRhdGUgY29tbWFuZCByZWNhbGwgaW4gTGlu dXgtYmFzZWQgUERBcworICAgdGhhdCBkb24ndCBoYXZlIGEgQ29udHJvbCBrZXksIG9yIGF0IGxl YXN0IG5vdCBvbmUgdGhhdCdzIGVhc2lseSAob3IKKyAgIGFsd2F5cykgYWNjZXNzaWJsZSwgc3Vj aCBhcyB0aGUgU2hhcnAgWmF1cnVzIFNMNTUwMC4KKworICAgWyBbMzkxXVRvcCBdIFsgWzM5Ml1D b250ZW50cyBdIFsgWzM5M11DLUtlcm1pdCBIb21lIF0gWyBbMzk0XUtlcm1pdAorICAgSG9tZSBd CisKKzcuIE5FVyBDT01NQU5EUyBBTkQgU1dJVENIRVMKKworICAgU2VlIFszOTVdU2VjdGlvbiA0 IGZvciBtb3JlIGFib3V0IGZpbGUgc2Nhbm5pbmcgYW5kIHRoZSAvVFlQRTogc3dpdGNoLgorCisg ICBBU0tbUV0gWyAvVElNRU9VVDpudW1iZXIgL1FVSUVUIC9ERUZBVUxUOnRleHQgXSB2YXJpYWJs ZSBbIHByb21wdCBdCisgICAgICAgICAgVGhlIG5ldyBvcHRpb25hbCAvVElNRU9VVDogc3dpdGNo IGZvciBBU0sgYW5kIEFTS1EgY2F1c2VzIHRoZQorICAgICAgICAgIGNvbW1hbmQgdG8gdGltZSBv dXQgYW5kIGFuZCBmYWlsIGlmIG5vIHJlc3BvbnNlIGlzIGdpdmVuIHdpdGhpbgorICAgICAgICAg IHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIHNlY29uZHMsIDEgb3IgZ3JlYXRlciAoMCBvciBsZXNz IG1lYW5zCisgICAgICAgICAgbm8gdGltZW91dCwgd2FpdCBmb3JldmVyKS4gVGhpcyB3b3JrcyBq dXN0IGxpa2UgU0VUIEFTSy1USU1FUiwKKyAgICAgICAgICBleGNlcHQgaXRzIGVmZmVjdCBpcyBs b2NhbCB0byB0aGUgQVNLIGNvbW1hbmQgd2l0aCB3aGljaCBpdCBpcworICAgICAgICAgIGdpdmVu IGFuZCBpdCBkb2VzIG5vdCBkaXN0dXJiIHRoZSBnbG9iYWwgYXNrIHRpbWVyIHNldHRpbmcuIFRo ZQorICAgICAgICAgIG5ldyAvUVVJRVQgc3dpdGNoIHRlbGxzIEtlcm1pdCBub3QgdG8gcHJpbnQg YW4gZXJyb3IgbWVzc2FnZSBpZgorICAgICAgICAgIHRoZSBBU0sgb3IgQVNLUSBjb21tYW5kIHRp bWVzIG91dCB3YWl0aW5nIGZvciBhIHJlc3BvbnNlLgorCisgICAgICAgICAgVmVyc2lvbiA4LjAu MjExIGFkZHMgdGhlIC9ERUZBVUxUOnRleHQgc3dpdGNoIGZvciBBU0stQ2xhc3MKKyAgICAgICAg ICBjb21tYW5kcyAoQVNLLCBBU0tRLCBhbmQgR0VUT0spLiBUaGlzIGxldHMgeW91IHN1cHBseSBh IGRlZmF1bHQKKyAgICAgICAgICBhbnN3ZXIgaW4gY2FzZSB0aGUgdXNlciBzdXBwbGllcyBhbiBl bXB0eSBhbnN3ZXIgb3IgdGhlCisgICAgICAgICAgL1RJTUVPVVQ6IHN3aXRjaCB3YXMgaW5jbHVk ZWQgYW5kIHRoZSB0aW1lIGxpbWl0IGV4cGlyZWQgd2l0aG91dAorICAgICAgICAgIGFuIGFuc3dl ci4gSW4gYm90aCB0aGVzZSBjYXNlcywgdGhlIGNvbW1hbmQgc3VjY2VlZHMuCisKKyAgIENBVCBm aWxlbmFtZQorICAgICAgICAgIEVxdWl2YWxlbnQgdG8gVFlQRSAvTk9QQUdFLgorCisgICBDRFVQ CisgICAgICAgICAgQ2hhbmdlcyBLZXJtaXQncyBsb2NhbCB3b3JraW5nIGRpcmVjdG9yeSB0byB0 aGUgcGFyZW50IG9mIHRoZQorICAgICAgICAgIGN1cnJlbnQgb25lLiBFcXVpdmFsZW50IHRvICJj ZCAuLiIgaW4gVU5JWCBvciBXaW5kb3dzLCAiY2QgWy1dIgorICAgICAgICAgIGluIFZNUywgImNk IF4iIGluIEFPUy9WUywgZXRjOyBpbiBvdGhlciB3b3JkcywgaXQncyBhCisgICAgICAgICAgcGxh dGZvcm0taW5kZXBlbmRlbnQgd2F5IG9mIG1vdmluZyBvbmUgbGV2ZWwgdXAgaW4gYSBkaXJlY3Rv cnkKKyAgICAgICAgICB0cmVlLgorCisgICBDSE1PRCBbIHN3aXRjaGVzIF0gcGVybWlzc2lvbiBm aWxlcworICAgICAgICAgIFVOSVggb25seS4gU2V0cyBmaWxlIHBlcm1pc3Npb25zIGZvciBvbmUg b3IgbW9yZSBmaWxlcyBvcgorICAgICAgICAgIGRpcmVjdG9yaWVzLiBUaGUgcGVybWlzc2lvbiBt dXN0IGJlIGdpdmVuIGFzIGFuIG9jdGFsIG51bWJlciwKKyAgICAgICAgICBlLmcuIDY2NCwgNzU1 LiBTd2l0Y2hlczogL0RJUkVDVE9SSUVTLCAvRklMRVMsIC9OT0xJU1QsIC9QQUdFLAorICAgICAg ICAgIC9ET1RGSUxFUywgL0xJU1QsIC9OT1BBR0UsIC9SRUNVUlNJVkUsIC9UWVBFOntURVhULEJJ TkFSWSxBTEx9LAorICAgICAgICAgIC9TSU1VTEFURS4gVGhlIC9UWVBFOiBzd2l0Y2ggYWxsb3dz IHNlbGVjdGlvbiBvZiBvbmx5IHRleHQgb3IKKyAgICAgICAgICBiaW5hcnkgZmlsZXMuIEZvciBl eGFtcGxlLCBpZiB5b3UgaGF2ZSBhIG1peHR1cmUgb2Ygc291cmNlIGZpbGVzCisgICAgICAgICAg YW5kIGV4ZWN1dGFibGVzLCB5b3UgY2FuIHVzZSAiY2htb2QgL2ZpbGVzIC90eXBlOnRleHQgNjY0 IiB0bworICAgICAgICAgIGdpdmUgb3duZXIvZ3JvdXAgcmVhZC93cml0ZSBhbmQgd29ybGQgcmVh ZCBwZXJtaXNzaW9uIHRvIHRoZQorICAgICAgICAgIHRleHQgZmlsZXMsIGFuZCAiY2htb2QgL2Zp bGVzIC90eXBlOmJpbmFyeSA3NzUiIHRvIGdpdmUgdGhlIHNhbWUKKyAgICAgICAgICBwbHVzIGV4 ZWN1dGUgcGVybWlzc2lvbiB0byB0aGUgZXhlY3V0YWJsZXMuIFVzZSAvU0lNVUxBVEUgdG8gc2Vl CisgICAgICAgICAgd2hpY2ggZmlsZXMgd291bGQgYmUgYWZmZWN0ZWQsIHdpdGhvdXQgYWN0dWFs bHkgY2hhbmdpbmcgdGhlaXIKKyAgICAgICAgICBwZXJtaXNzaW9ucy4KKworICAgQ0xFQVIgS0VZ Qk9BUkQtQlVGRkVSCisgICAgICAgICAgRmx1c2hlcyBhbnkgYXMteWV0IHVucmVhZCBjaGFyYWN0 ZXJzIGZyb20gdGhlIGtleWJvYXJkIGlucHV0CisgICAgICAgICAgYnVmZmVyLiBVc2VmdWwgZm9y IGZsdXNoaW5nIHR5cGVhaGVhZCBpbiBzY3JpcHRzLgorCisgICBDT05USU5VRQorICAgICAgICAg IFdoZW4gZ2l2ZW4gYXQgYW4gaW50ZXJhY3RpdmUgY29tbWFuZCBwcm9tcHQgdGhhdCB3YXMgcmVh Y2hlZCBieQorICAgICAgICAgIGlzc3VpbmcgYSBQUk9NUFQgY29tbWFuZCAoZGVzY3JpYmVkIGlu IHRoaXMgc2VjdGlvbikgZnJvbSBhCisgICAgICAgICAgc2NyaXB0LCB0aGlzIGNvbW1hbmQgcmV0 dXJucyB0byB0aGUgc2NyaXB0LCBjb250aW51aW5nIGl0cworICAgICAgICAgIGV4ZWN1dGlvbiBh dCB0aGUgY29tbWFuZCBhZnRlciB0aGUgUFJPTVBUIGNvbW1hbmQuIEluIHRoaXMKKyAgICAgICAg ICBjb250ZXh0LCBDT05USU5VRSBpcyBzaW1wbHkgYSBtb3JlLWludHVpdGl2ZSBzeW5vbnltIGZv ciBFTkQuCisKKyAgIENPUFksIFJFTkFNRSwgYW5kIFRSQU5TTEFURQorICAgICAgICAgIFRoZXNl IGNvbW1hbmRzIG5vdyB3b3JrIG9uIGZpbGUgZ3JvdXBzIGlmIHRoZSB0YXJnZXQgZmlsZW5hbWUg aXMKKyAgICAgICAgICBhIGRpcmVjdG9yeSwgZS5nLiAiY29weSBvb2ZhLiogLi4iLCAicmVuYW1l ICogfm9sZ2EvdG1wLyIKKworICAgQ09QWSAvQVBQRU5EIHNvdXJjZSBkZXN0aW5hdGlvbgorICAg ICAgICAgIFRoZSBzb3VyY2UgZmlsZSBzcGVjaWZpY2F0aW9uIGNhbiBub3cgaW5jbHVkZSB3aWxk Y2FyZHMsIGluCisgICAgICAgICAgd2hpY2ggY2FzZSBhbGwgb2YgdGhlIHNvdXJjZSBmaWxlcyB0 aGF0IG1hdGNoIHdpbGwgZ28gaW50byB0aGUKKyAgICAgICAgICBkZXN0aW5hdGlvbiBmaWxlIGlu IGFscGhhYmV0aWNhbCBvcmRlciBieSBuYW1lLgorCisgICBERUxFVEUgL0FTSworICAgICAgICAg IEFza3MgcGVybWlzc2lvbiB0byBkZWxldGUgZWFjaCBmaWxlIGJlZm9yZSBkZWxldGluZyBpdC4g SW4KKyAgICAgICAgICBDLUtlcm1pdCA3LjAsIHRoZSBhbnN3ZXJzIHdlcmUgInllcyIgKG9yICJv ayIpIGFuZCAibm8iLgorICAgICAgICAgIEMtS2VybWl0IDguMCBhZGRzICJnbyIgKG1lYW5pbmcs IGRlbGV0ZSBhbGwgdGhlIHJlc3Qgd2l0aG91dAorICAgICAgICAgIGFza2luZykgYW5kICJxdWl0 IiAoY2FuY2VsIHRoZSBERUxFVEUgY29tbWFuZCBhbmQgcmV0dXJuIHRvIHRoZQorICAgICAgICAg IHByb21wdCkuCisKKyAgIERFTEVURSAvRElSRUNUT1JJRVMKKyAgICAgICAgICBEZWxldGVzIG5v dCBvbmx5IGZpbGVzIGJ1dCBhbHNvIGRpcmVjdG9yaWVzLgorCisgICBERUxFVEUgL1JFQ1VSU0lW RQorICAgICAgICAgIERlbGV0ZXMgYWxsIGZpbGVzIHRoYXQgbWF0Y2ggdGhlIGdpdmVuIGZpbGUg c3BlY2lmaWNhdGlvbiBpbiB0aGUKKyAgICAgICAgICBjdXJyZW50IChvciBnaXZlbikgZGlyZWN0 b3J5IGFuZCBhbGwgZGlyZWN0b3JpZXMgYmVuZWF0aCBpdC4KKworICAgREVMRVRFIC9TVU1NQVJZ CisgICAgICAgICAgUHJpbnRzIG9ubHkgdGhlIG51bWJlciBvZiBmaWxlcyBkZWxldGVkIGFuZCB0 b3RhbCBzaXplIGZyZWVkLAorICAgICAgICAgIHdpdGhvdXQgbGlzdGluZyBlYWNoIGZpbGUuCisK KyAgIERFTEVURSAvVFJFRQorICAgICAgICAgIFNob3J0aGFuZCBmb3IgREVMRVRFIC9SRUNVUlNJ VkUgL0RJUkVDVE9SSUVTIC9ET1RGSUxFUy8uCisgICAgICAgICAgRXF1aXZhbGVudCB0byBXaW5k b3dzIERFTFRSRUUgb3IgVW5peCAicm0gLVJmIi4gSWYgbm8gZmlsZQorICAgICAgICAgIHNwZWNp ZmljYXRpb24gaXMgZ2l2ZW4sIHRoZSBjb250ZW50cyBvZiB0aGUgY3VycmVudCBkaXJlY3Rvcnks CisgICAgICAgICAgcGx1cyBhbGwgb2YgaXRzIHN1YmRpcmVjdG9yaWVzIGFuZCB0aGVpciBjb250 ZW50cywgYXJlIGRlbGV0ZWQuCisKKyAgIERFTEVURSAvVFlQRTpCSU5BUlkKKyAgICAgICAgICBE ZWxldGUgb25seSByZWd1bGFyIGJpbmFyeSBmaWxlcyAocmVxdWlyZXMgRklMRSBTQ0FOIE9OKS4K KworICAgREVMRVRFIC9UWVBFOlRFWFQKKyAgICAgICAgICBEZWxldGUgb25seSByZWd1bGFyIHRl eHQgZmlsZXMgKHJlcXVpcmVzIEZJTEUgU0NBTiBPTikuCisKKyAgIERJUkVDVE9SWSBbIHN3aXRj aGVzIF0gWyBmaWxlc3BlYyBbIGZpbGVzcGVjIFsgZmlsZXNwZWMgLi4uIF0gXSBdCisgICAgICAg ICAgVGhlIERJUkVDVE9SWSBjb21tYW5kIG5vdyBhY2NlcHRzIG1vcmUgdGhhbiBvbmUgZmlsZQor ICAgICAgICAgIHNwZWNpZmljYXRpb247IGUuZy4gImRpcmVjdG9yeSBtb29uLnR4dCBzdW4uZG9j IHN0YXJzLioiLgorCisgICBESVJFQ1RPUlkgL05PUkVDVVJTSVZFIHh4eAorICAgICAgICAgIElm IHh4eCBpcyBhIGRpcmVjdG9yeSBuYW1lLCBmb3JjZXMgbGlzdGluZyBvZiB0aGUgZGlyZWN0b3J5 CisgICAgICAgICAgaXRzZWxmIHJhdGhlciB0aGFuIGl0cyBjb250ZW50cy4KKworICAgRElSRUNU T1JZIC9GT0xMT1dMSU5LUyB4eHgKKyAgICAgICAgICAoVU5JWCBvbmx5KSBUZWxscyB0aGUgRElS RUNUT1JZIGNvbW1hbmQgdG8gZm9sbG93IHN5bWJvbGljCisgICAgICAgICAgbGlua3MuIFRoaXMg bm90IHRoZSBkZWZhdWx0IGJlY2F1c2UgaXQgY2FuIGNhdXNlIGVuZGxlc3MgbG9vcHMuCisKKyAg IERJUkVDVE9SWSAvTk9GT0xMT1dMSU5LUyB4eHgKKyAgICAgICAgICAoVU5JWCBvbmx5KSBUZWxs cyB0aGUgRElSRUNUT1JZIGNvbW1hbmQgbm90IHRvIGZvbGxvdyBzeW1ib2xpYworICAgICAgICAg IGxpbmtzLCBidXQgcmF0aGVyLCBtZXJlbHkgdG8gbGlzdCB0aGVtLiBUaGlzIGlzIHRoZSBkZWZh dWx0LgorCisgICBESVJFQ1RPUlkgL09VVFBVVDpmaWxlbmFtZQorICAgICAgICAgIFNlbmRzIHRo ZSByZXN1bHRzIG9mIHRoZSBESVJFQ1RPUlkgY29tbWFuZCB0byB0aGUgZ2l2ZW4gZmlsZS4KKwor ICAgRElSRUNUT1JZIC9TVU1NQVJZCisgICAgICAgICAgUHJpbnRzIG9ubHkgdGhlIG51bWJlciBv ZiBkaXJlY3RvcmllcyBhbmQgZmlsZXMgYW5kIHRoZSB0b3RhbAorICAgICAgICAgIHNpemUsIHdp dGhvdXQgbGlzdGluZyBlYWNoIGZpbGUuCisKKyAgIERJUkVDVE9SWSAvVFlQRTp7VEVYVCxCSU5B Ull9CisgICAgICAgICAgU2hvd3Mgb25seSBmaWxlcyBvZiB0aGUgc2VsZWN0ZWQgdHlwZSwgYmFz ZWQgb24gZmlsZSBzY2FuLgorCisgICBESVJFQ1RPUlkgL1hGRVJNT0RFCisgICAgICAgICAgTm93 IHNob3dzIHJlc3VsdHMgb2YgZmlsZSBzY2FuIChzZWUgWzM5Nl1TZWN0aW9uIDQpLgorCisgICBG T1BFTiBbIHN3aXRjaGVzIF0gY2hhbm5lbCBmaWxlbmFtZQorCisgICAgICAgICAgQXMgb2YgdmVy c2lvbiA4LjAuMjExLCBGT1BFTiBhbGxvd3MgL2Rldi90dHkgYXMgYSBmaWxlbmFtZSBpbgorICAg ICAgICAgIFVuaXgtYmFzZWQgb3BlcmF0aW5nIHN5c3RlbXMuCisKKyAgIEZSRUFEIC9UUklNCisg ICAgICAgICAgKDguMC4yMTEpIFRyaW1zIGFueSB0cmFpbGluZyBibGFua3Mgb3IgdGFicyBmcm9t IHRoZSBpdGVtIChzdWNoCisgICAgICAgICAgYXMgYSBsaW5lIG9mIHRleHQpIHRoYXQgaXQgaGFz IHJlYWQuCisKKyAgIEZSRUFEIC9VTlRBQklGWQorICAgICAgICAgICg4LjAuMjExKSBDb252ZXJ0 cyBIb3Jpem9udGFsIFRhYiBjaGFyYWN0ZXJzIHRvIHRoZSBhcHByb3ByaWF0ZQorICAgICAgICAg IG51bWJlciBvZiBzcGFjZXMsIGJhc2VkIG9uIFZUMTAwLWxpa2UgdGFiIHN0b3BzICgxLDksMTcs MjUsLi4uKS4KKworICAgR1JFUCBbIHN3aXRjaGVzIF0gcGF0dGVybiBmaWxlcworICAgICAgICAg IFNpbWlsYXIgdG8gVW5peCBncmVwIGNvbW1hbmQ6IGRpc3BsYXlzIGZpbGUgbGluZXMgdGhhdCBt YXRjaCB0aGUKKyAgICAgICAgICBnaXZlbiBbMzk3XXBhdHRlcm4uIFN3aXRjaGVzOgorCisgICAg ICAgIC9DT1VOVFs6dmFyaWFibGVdCisgICAgICAgICAgICAgICAgRG9uJ3Qgc2hvdyB0aGUgbWF0 Y2hpbmcgbGluZXMsIGp1c3QgdGVsbCBob3cgbWFueSBsaW5lcworICAgICAgICAgICAgICAgIG1h dGNoLiBJZiBhIHZhcmlhYmxlIG5hbWUgaXMgc3BlY2lmaWVkLCB0aGUgY291bnQgaXMKKyAgICAg ICAgICAgICAgICBzdG9yZWQgaW4gdGhlIGdpdmVuIHZhcmlhYmxlLgorCisgICAgICAgIC9ET1RG SUxFUworICAgICAgICAgICAgICAgIEluY2x1ZGUgZmlsZXMgd2hvc2UgbmFtZXMgYmVnaW4gd2l0 aCBkb3QuCisKKyAgICAgICAgL0xJTkVOVU1CRVJTCisgICAgICAgICAgICAgICAgU2hvdyBsaW5l IG51bWJlcnMgb2YgbWF0Y2hpbmcgbGluZXMuCisKKyAgICAgICAgL05BTUVPTkxZCisgICAgICAg ICAgICAgICAgb25seSBsaXN0IHRoZSBuYW1lcyBvZiBmaWxlcyB0aGF0IGNvbnRhaW4gbWF0Y2hp bmcgbGluZXMsCisgICAgICAgICAgICAgICAgYnV0IG5vdCB0aGUgbGluZXMgdGhlbXNlbHZlcy4K KworICAgICAgICAvTk9CQUNLVVAKKyAgICAgICAgICAgICAgICBTa2lwIGJhY2t1cCBmaWxlcy4K KworICAgICAgICAvTk9DQVNFCisgICAgICAgICAgICAgICAgSWdub3JlIGFscGhhYmV0aWMgY2Fz ZSB3aGlsZSBwYXR0ZXJuIG1hdGNoaW5nLgorCisgICAgICAgIC9OT0RPVEZJTEVTCisgICAgICAg ICAgICAgICAgc2tpcCBmaWxlcyB3aG9zZSBuYW1lcyBzdGFydCB3aXRoIGRvdCAocGVyaW9kKS4K KworICAgICAgICAvTk9MSVNUCisgICAgICAgICAgICAgICAgU3VwcHJlc3Mgb3V0cHV0IGJ1dCBz ZXQgU1VDQ0VTUyBvciBGQUlMVVJFIGFjY29yZGluZyB0bworICAgICAgICAgICAgICAgIHNlYXJj aCByZXN1bHQuCisKKyAgICAgICAgL05PTUFUQ0gKKyAgICAgICAgICAgICAgICBMb29rIGZvciBs aW5lcyB0aGF0IGRvIG5vdCBtYXRjaCB0aGUgcGF0dGVybi4KKworICAgICAgICAvTk9QQUdFCisg ICAgICAgICAgICAgICAgRG9uJ3QgcGF1c2UgYmV0d2VlbiBzY3JlZW5zIG9mIG91dHB1dC4KKwor ICAgICAgICAvT1VUUFVUOmZpbGVuYW1lCisgICAgICAgICAgICAgICAgV3JpdGUgcmVzdWx0cyBp bnRvIHRoZSBnaXZlbiBmaWxlLgorCisgICAgICAgIC9QQUdFCisgICAgICAgICAgICAgICAgUGF1 c2UgYmV0d2VlbiBzY3JlZW5zIG9mIG91dHB1dC4KKworICAgICAgICAvUkVDVVJTSVZFCisgICAg ICAgICAgICAgICAgU2VhcmNoIGZpbGVzIGluIHN1YmRpcmVjdG9yaWVzIHRvby4KKworICAgICAg ICAvVFlQRTp7VEVYVCxCSU5BUll9CisgICAgICAgICAgICAgICAgU2VhcmNoIG9ubHkgZmlsZXMg b2YgdGhlIHNwZWNpZmllZCB0eXBlLgorCisgICAgICAgICAgU3lub255bXM6IEZJTkQsIFNFQVJD SC4KKworICAgR0VUT0sgL1RJTUVPVVQ6biAvUVVJRVQgL0RFRkFVTFQ6dGV4dAorICAgICAgICAg IFRoZSBuZXcgL1FVSUVUIHN3aXRjaCBpbnN0cnVjdHMgR0VUT0ssIHdoZW4gZ2l2ZW4gYSB0aW1l b3V0LCBub3QKKyAgICAgICAgICB0byBwcmludCBhbiBlcnJvciBtZXNzYWdlIGlmIGl0IHRpbWVz IG91dC4gQXMgb2YgOC4wLjIxMSwgYQorICAgICAgICAgIGRlZmF1bHQgYW5zd2VyIGNhbiBiZSBz dXBwbGllZCAoc2VlIEFTSykuCisKKyAgIEhFQUQgWyBzd2l0Y2hlcyBdIGZpbGVuYW1lCisgICAg ICAgICAgRXF1aXZhbGVudCB0byBUWVBFIC9IRUFEIFsgb3RoZXItc3dpdGNoZXMgXSBmaWxlbmFt ZS4KKworICAgSEVMUCBEQVRFCisgICAgICAgICAgRXhwbGFpbnMgZGF0ZS10aW1lIGZvcm1hdHMs IGluY2x1ZGluZyB0aW1lem9uZSBub3RhdGlvbiBhbmQKKyAgICAgICAgICBkZWx0YSB0aW1lcy4K KworICAgSEVMUCBGSVJFV0FMTFMKKyAgICAgICAgICBFeHBsYWlucyB0aGUgZmlyZXdhbGwgbmVn b3RpYXRpb24gY2FwYWJpbGl0aWVzIG9mIHlvdXIgdmVyc2lvbgorICAgICAgICAgIG9mIEtlcm1p dC4KKworICAgS0NEIFsgc3ltYm9saWMtZGlyZWN0b3J5LW5hbWUgXQorICAgICAgICAgIENoYW5n ZXMgS2VybWl0J3Mgd29ya2luZyBkaXJlY3RvcnkgdG8gdGhlIG5hbWVkIHN5bWJvbGljCisgICAg ICAgICAgZGlyZWN0b3J5LCBzdWNoIGFzIHN1Y2ggYXMgZXhlZGlyLCBpbmlkaXIsIHN0YXJ0dXAs IGRvd25sb2FkLCBvcgorICAgICAgICAgIGFuZCBob21lLiBUeXBlICJrY2QgPyIgZm9yIGEgbGlz dCBvZiBzeW1ib2xpYyBkaXJlY3RvcnkgbmFtZXMKKyAgICAgICAgICBrbm93biB0byB5b3VyIGNv cHkgb2YgS2VybWl0LCBvciBnaXZlIHRoZSBuZXcgT1JJRU5UQVRJT04KKyAgICAgICAgICBjb21t YW5kIGZvciBhIG1vcmUgZGV0YWlsZWQgZXhwbGFuYXRpb24uIElmIHlvdSBnaXZlIGEgS0NECisg ICAgICAgICAgY29tbWFuZCB3aXRob3V0IGEgZGlyZWN0b3J5IG5hbWUsIEtlcm1pdCByZXR1cm5z IHRvIGl0cyAiaG9tZSIKKyAgICAgICAgICBkaXJlY3RvcnksIHdoaWNoIGlzIGRldGVybWluZWQg aW4gc29tZSB3YXkgdGhhdCBkZXBlbmRzIG9uIHRoZQorICAgICAgICAgIHVuZGVybHlpbmcgb3Bl cmF0aW5nIHN5c3RlbSwgYnV0IHdoaWNoIHlvdSBjYW4gcmVkZWZpbmUgd2l0aCB0aGUKKyAgICAg ICAgICAobmV3KSBTRVQgQ0QgSE9NRSBjb21tYW5kLiBZb3VyIGhvbWUgZGlyZWN0b3J5IGlzIHNo b3duIGJ5IFNIT1cKKyAgICAgICAgICBDRCBhbmQgaXQncyBhbHNvIHRoZSB2YWx1ZSBvZiB0aGUg XHYoaG9tZSkgdmFyaWFibGUuCisKKyAgIExJQ0VOU0UKKyAgICAgICAgICBEaXNwbGF5cyB0aGUg Qy1LZXJtaXQgbGljZW5zZS4KKworICAgTC1jb21tYW5kcworICAgICAgICAgIFdoZW4gS2VybWl0 IGhhcyBhIGNvbm5lY3Rpb24gdG8gYSBLZXJtaXQgb3IgRlRQIHNlcnZlciwgZmlsZQorICAgICAg ICAgIG1hbmFnZW1lbnQgY29tbWFuZHMgc3VjaCBhcyBDRCwgRElSRUNUT1JZLCBhbmQgREVMRVRF IG1pZ2h0IGJlCisgICAgICAgICAgaW50ZW5kZWQgZm9yIHRoZSBsb2NhbCBjb21wdXRlciBvciB0 aGUgcmVtb3RlIHNlcnZlci4gQy1LZXJtaXQKKyAgICAgICAgICA4LjAuMjAwIGFuZCBlYXJsaWVy IGFsd2F5cyBleGVjdXRlcyB0aGVzZSBjb21tYW5kcyBvbiB0aGUgbG9jYWwKKyAgICAgICAgICBj b21wdXRlci4gSWYgeW91IHdhbnQgdGhlbSBleGVjdXRlZCBieSB0aGUgcmVtb3RlIHNlcnZlciwg eW91CisgICAgICAgICAgaGF2ZSB0byBwcmVmaXggdGhlbSB3aXRoIFJFTU9URSAoZS5nLiBSRU1P VEUgQ0QpIG9yIHVzZSBzcGVjaWFsCisgICAgICAgICAgUi1jb21tYW5kIGFsaWFzZXMgKGUuZy4g UkNEID0gUkVNT1RFIENELCBSRElSID0gUkVNT1RFIERJUiwKKyAgICAgICAgICBldGMpLiBCdXQg dGhpcyBmZWVscyB1bm5hdHVyYWwgdG8gRlRQIHVzZXJzLCB3aG8gZXhwZWN0CisgICAgICAgICAg dW5wcmVmaXhlZCBmaWxlIG1hbmFnZW1lbnQgY29tbWFuZHMgdG8gYmUgZXhlY3V0ZWQgYnkgdGhl IHJlbW90ZQorICAgICAgICAgIHNlcnZlciwgcmF0aGVyIHRoYW4gbG9jYWxseS4gQy1LZXJtaXQg OC4wLjIwMSBhZGRzIGF1dG9tYXRpYworICAgICAgICAgIGxvY3VzIHN3aXRjaGluZyB0byBwcmVz ZW50IGFuIEZUUC1saWtlIGludGVyZmFjZSBmb3IgRlRQCisgICAgICAgICAgY29ubmVjdGlvbnMg YW5kIHRoZSBub3JtYWwgS2VybWl0IGludGVyZmFjZSBmb3IgS2VybWl0CisgICAgICAgICAgY29u bmVjdGlvbnMsIGFuZCBhIFNFVCBMT0NVUyBjb21tYW5kIChkZXNjcmliZWQgYmVsb3cpIHRvCisg ICAgICAgICAgY29udHJvbCB3aGV0aGVyIG9yIGhvdyB0aGlzIGlzIGRvbmUuIEZvciB3aGVuIExP Q1VTIGlzIFJFTU9URSwgYQorICAgICAgICAgIG5ldyBzZXQgb2YgY29tbWFuZHMgd2FzIGFkZGVk IGZvciBsb2NhbCBtYW5hZ2VtZW50OiBMQ0QgKExvY2FsCisgICAgICAgICAgQ0QpLCBMRElSIChM b2NhbCBESVIpLCBldGMuIFRoZXNlIGFyZSBkZXNjcmliZWQgYmVsb3cgdW5kZXIgU0VUCisgICAg ICAgICAgTE9DVVMuCisKKyAgIE1PUkUgZmlsZW5hbWUKKyAgICAgICAgICBFcXVpdmFsZW50IHRv IFRZUEUgL1BBR0UuCisKKyAgIE9SSUVOVEFUSU9OCisgICAgICAgICAgRGlzcGxheXMgc3ltYm9s aWMgZGlyZWN0b3J5IG5hbWVzIGFuZCB0aGUgY29ycmVzcG9uZGluZyB2YXJpYWJsZQorICAgICAg ICAgIG5hbWVzIGFuZCB2YWx1ZXMuIFRoZSBzeW1ib2xpYyBuYW1lcywgc3VjaCBhcyBleGVkaXIs IGluaWRpciwKKyAgICAgICAgICBzdGFydHVwLCBkb3dubG9hZCwgYW5kIGhvbWUsIGNhbiBiZSB1 c2VkIGFzIGFyZ3VtZW50cyB0byB0aGUgbmV3CisgICAgICAgICAgS0NEIGNvbW1hbmQuCisKKyAg IFBST01QVCBbIHRleHQgXQorICAgICAgICAgIEZvciB1c2UgaW4gYSBtYWNybyBvciBjb21tYW5k IGZpbGU6IGVudGVycyBpbnRlcmFjdGl2ZSBjb21tYW5kCisgICAgICAgICAgbW9kZSB3aXRoaW4g dGhlIGN1cnJlbnQgY29udGV4dCAoWzM5OF1TZWN0aW9uIDguMSkuIElmIHRoZQorICAgICAgICAg IG9wdGlvbmFsIHRleHQgaXMgaW5jbHVkZWQsIHRoZSBwcm9tcHQgaXMgc2V0IHRvIGl0LiBUaGUg dGV4dCBjYW4KKyAgICAgICAgICBpbmNsdWRlIHZhcmlhYmxlcywgZnVuY3Rpb25zLCBldGMsIGFz IGluIHRoZSBTRVQgUFJPTVBUIGNvbW1hbmQuCisgICAgICAgICAgVGhleSBhcmUgZXZhbHVhdGVk IGVhY2ggdGltZSB0aGUgcHJvbXB0IGlzIHByaW50ZWQuIFVubGlrZSB0aGUKKyAgICAgICAgICBT RVQgUFJPTVBUIGNvbW1hbmQsIHRoZSB0ZXh0IGFyZ3VtZW50IGFwcGxpZXMgb25seSB0byB0aGUK KyAgICAgICAgICBjdXJyZW50IGNvbW1hbmQgbGV2ZWwuIFRodXMgeW91IGNhbiBoYXZlIGRpZmZl cmVudCBwcm9tcHRzIGF0CisgICAgICAgICAgZGlmZmVyZW50IGxldmVscy4KKworICAgUkVNT1RF IFNFVCBNQVRDSCB7IERPVEZJTEUsIEZJRk8gfSB7IE9OLCBPRkYgfQorICAgICAgICAgIEFsbG93 cyB0aGUgY2xpZW50IHRvIHRlbGwgdGhlIHNlcnZlciB3aGV0aGVyIHdpbGRjYXJkcyBzZW50IHRv CisgICAgICAgICAgdGhlIHNlcnZlciBzaG91bGQgbWF0Y2ggZG90IGZpbGVzIChmaWxlcyB3aG9z ZSBuYW1lcyBiZWdpbiB3aXRoCisgICAgICAgICAgcGVyaW9kKSBvciBGSUZPcyAobmFtZWQgcGlw ZXMpLiBTZWUgU0VUIE1BVENILgorCisgICBTRVQgQVRUUklCVVRFIFJFQ09SRC1GT1JNQVQgeyBP TiwgT0ZGIH0KKyAgICAgICAgICBBbGxvd3MgY29udHJvbCBvZiB0aGUgS2VybWl0J3MgUmVjb3Jk LUZvcm1hdCBhdHRyaWJ1dGUuIFNldCB0aGlzCisgICAgICAgICAgdG8gT0ZGIGluIGNhc2UgaW5j b21pbmcgZmlsZSBhcmUgcmVmdXNlZCBkdWUgdG8gdW5rbm93biBvcgorICAgICAgICAgIGludmFs aWQgcmVjb3JkIGZvcm1hdHMgaWYgeW91IHdhbnQgdG8gYWNjZXB0IHRoZSBmaWxlIGFueXdheQor ICAgICAgICAgIChhbmQsIHBlcmhhcHMsIHBvc3Rwcm9jZXNzIGl0IHRvIGZpeCBpdHMgcmVjb3Jk IGZvcm1hdCkuCisKKyAgIFNFVCBDRCBIT01FIFsgZGlyZWN0b3J5IF0KKyAgICAgICAgICBTcGVj aWZpZXMgdGhlIHRhcmdldCBkaXJlY3RvcnkgZm9yIHRoZSBDRCBhbmQgS0NEIGNvbW1hbmRzLCB3 aGVuCisgICAgICAgICAgdGhleSBhcmUgZ2l2ZW4gd2l0aG91dCBhbiBhcmd1bWVudCwgYW5kIGFs c28gc2V0cyB0aGUgdmFsdWUgb2YKKyAgICAgICAgICB0aGUgXHYoaG9tZSkgdmFyaWFibGUuCisK KyAgIFNFVCBFWElUIEhBTkdVUCB7IE9GRiwgT04gfQorICAgICAgICAgIE5vcm1hbGx5IE9OLCBt ZWFuaW5nIHRoYXQgd2hlbiBLZXJtaXQgZXhpdHMsIGl0IGFsc28gZXhwbGljaXRseQorICAgICAg ICAgIGhhbmdzIHVwIHRoZSBjdXJyZW50IFNFVCBMSU5FIC8gU0VUIFBPUlQgc2VyaWFsIHBvcnQg YWNjb3JkaW5nCisgICAgICAgICAgdG8gdGhlIGN1cnJlbnQgU0VUIE1PREVNIFRZUEUgYW5kIFNF VCBNT0RFTSBIQU5HVVAgTUVUSE9ELCBhbmQKKyAgICAgICAgICBjbG9zZXMgdGhlIHBvcnQgZGV2 aWNlIGlmIGl0IHdhcyBvcGVuZWQgYnkgS2VybWl0IGluIHRoZSBmaXJzdAorICAgICAgICAgIHBs YWNlIChhcyBvcHBvc2VkIHRvIGluaGVyaXRlZCkuIFNFVCBFWElUIEhBTkdVUCBPRkYgdGVsbHMK KyAgICAgICAgICBLZXJtaXQgbm90IHRvIGRvIHRoaXMuIFRoaXMgY2FuJ3QgcHJldmVudCB0aGUg b3BlcmF0aW5nIHN5c3RlbQorICAgICAgICAgIGZyb20gY2xvc2luZyB0aGUgZGV2aWNlIHdoZW4g S2VybWl0IGV4aXRzIChhbmQgaXQncyBhICJsYXN0CisgICAgICAgICAgY2xvc2UiKSBidXQgaWYg dGhlIHBvcnQgb3IgbW9kZW0gaGF2ZSBiZWVuIGNvbmRpdGlvbmVkIHRvCisgICAgICAgICAgc29t ZWhvdyBpZ25vcmUgdGhlIGNsb3NlIGFuZCBrZWVwIHRoZSBjb25uZWN0aW9uIG9wZW4sIGF0IGxl YXN0CisgICAgICAgICAgS2VybWl0IGl0c2VsZiB3b24ndCBkbyBhbnl0aGluZyBleHBsaWNpdCB0 byBoYW5nIGl0IHVwIG9yIGNsb3NlCisgICAgICAgICAgaXQuCisKKyAgIFNFVCBGSUxFIEVPRiB7 IENUUkwtWiwgTEVOR1RIIH0KKyAgICAgICAgICBTcGVjaWZpZXMgdGhlIGVuZC1vZi1maWxlIGRl dGVjdGlvbiBtZXRob2QgdG8gYmUgdXNlZCBieQorICAgICAgICAgIEMtS2VybWl0IHdoZW4gc2Vu ZGluZyBhbmQgcmVjZWl2aW5nIHRleHQgZmlsZXMsIGFuZCBpbiB0aGUgVFlQRQorICAgICAgICAg IGFuZCBzaW1pbGFyIHRleHQtZmlsZSBvcmllbnRlZCBjb21tYW5kcy4gVGhlIG5vcm1hbCBhbmQg ZGVmYXVsdAorICAgICAgICAgIG1ldGhvZCBpcyBMRU5HVEguIFlvdSBjYW4gc3BlY2lmeSBDVFJM LVogd2hlbiBoYW5kbGluZyBDUC9NIG9yCisgICAgICAgICAgTVMtRE9TIGZvcm1hdCB0ZXh0IGZp bGVzLCBpbiB3aGljaCBhIEN0cmwtWiAoQVNDSUkgMjYpIGNoYXJhY3RlcgorICAgICAgICAgIHdp dGhpbiB0aGUgZmlsZSBtYXJrcyB0aGUgZW5kIG9mIHRoZSBmaWxlLgorCisgICBTRVQgRklMRSBM SVNUU0laRSBudW1iZXIKKyAgICAgICAgICBBbGxvY2F0ZXMgc3BhY2UgZm9yIHRoZSBnaXZlbiBu dW1iZXIgb2YgZmlsZW5hbWVzIHRvIGJlIGZpbGxlZAorICAgICAgICAgIGluIGJ5IHRoZSB3aWxk Y2FyZCBleHBhbmRlci4gVGhlIGN1cnJlbnQgbnVtYmVyIGlzIHNob3duIGJ5IFNIT1cKKyAgICAg ICAgICBGSUxFLiBJZiB5b3UgZ2l2ZSBhIGNvbW1hbmQgdGhhdCBpbmNsdWRlcyBhIGZpbGVuYW1l IGNvbnRhaW5pbmcKKyAgICAgICAgICBhIHdpbGRjYXJkIChzdWNoIGFzICIqIikgdGhhdCBtYXRj aGVzIG1vcmUgZmlsZXMgdGhhdCBLZXJtaXQncworICAgICAgICAgIGxpc3QgaGFzIHJvb20gZm9y LCB5b3UgY2FuIGFkanVzdCB0aGUgbGlzdCBzaXplIHdpdGggdGhpcworICAgICAgICAgIGNvbW1h bmQuCisKKyAgIFNFVCBGSUxFIFNUUklOR1NQQUNFIG51bWJlcgorICAgICAgICAgIEFsbG9jYXRl cyBzcGFjZSBmb3IgdGhlIGdpdmVuIGFtb3VudCBvZiBmaWxlbmFtZSBzdHJpbmdzIGZvciB1c2UK KyAgICAgICAgICBieSB0aGUgd2lsZGNhcmQgZXhwYW5kZXIuIFRoZSBjdXJyZW50IG51bWJlciBp cyBzaG93biBieSBTSE9XCisgICAgICAgICAgRklMRS4gVGhlIG51bWJlciBpcyB0aGUgdG90YWwg bnVtYmVyIG9mIGJ5dGVzIG9mIGFsbCB0aGUgZmlsZQorICAgICAgICAgIHNwZWNpZmljYXRpb25z IHRoYXQgbWF0Y2ggdGhlIGdpdmVuIHdpbGRjYXJkLgorCisgICAgIElmIHlvdSBuZWVkIHRvIHBy b2Nlc3MgYSBiaWdnZXIgbGlzdCBvZiBmaWxlcyB0aGFuIHlvdXIgY29tcHV0ZXIgaGFzCisgICAg IG1lbW9yeSBmb3IsIHlvdSBtaWdodCBiZSBhYmxlIHVzZSBhbiBleHRlcm5hbCBmaWxlIGxpc3Qu IFRoZSBLZXJtaXQKKyAgICAgU0VORCBhbmQgdGhlIEZUUCBQVVQgYW5kIEdFVCBjb21tYW5kcyBh Y2NlcHQgYSAvTElTVEZJTEU6IHN3aXRjaCwKKyAgICAgd2hpY2ggZ2l2ZXMgdGhlIG5hbWUgb2Yg YSBmaWxlIHRoYXQgY29udGFpbnMgdGhlIGxpc3Qgb2YgZmlsZXMgdG8gYmUKKyAgICAgdHJhbnNm ZXJyZWQuIEV4YW1wbGUgZm9yIFVOSVg6CisKKyAgIWZpbmQgLiAtcHJpbnQgfCBncmVwIC8gPiAv dG1wL25hbWVzCisgIGZ0cCBwdXQgL3VwZGF0ZSAvcmVjdXJzaXZlIC9saXN0ZmlsZTovdG1wL25h bWVzCisKKyAgIFNFVCBMT0NVUyB7IEFVVE8sIExPQ0FMLCBSRU1PVEUgfQorICAgICAgICAgIEFk ZGVkIGluIEMtS2VybWl0IDguMC4yMDEuICAgU2V0cyB0aGUgbG9jdXMgZm9yIHVucHJlZml4ZWQg ZmlsZQorICAgICAgICAgIG1hbmFnZW1lbnQgY29tbWFuZHMgc3VjaCBhcyBDRCwgRElSRUNUT1JZ LCBNS0RJUiwgZXRjLiBXaGVuCisgICAgICAgICAgTE9DVVMgaXMgTE9DQUwgdGhlc2UgY29tbWFu ZHMgYWN0IGxvY2FsbHkgYW5kIGEgUkVNT1RFIChvciBSKQorICAgICAgICAgIHByZWZpeCAoZS5n LiBSRU1PVEUgQ0QsIFJDRCwgUkRJUikgaXMgcmVxdWlyZWQgdG8gc2VuZCBmaWxlCisgICAgICAg ICAgbWFuYWdlbWVudCBjb21tYW5kcyB0byBhIHJlbW90ZSBzZXJ2ZXIuIFdoZW4gTE9DVVMgaXMg UkVNT1RFLCBhbgorICAgICAgICAgIEwgcHJlZml4IGlzIHJlcXVpcmVkIHRvIGlzc3VlIGxvY2Fs IGZpbGUgbWFuYWdlbWVudCBjb21tYW5kcworICAgICAgICAgIChlLmcuIExDRCwgTERJUikuIFRo ZSB3b3JkIExPQ0FMIGNhbid0IGJlIHVzZWQgYXMgYSBwcmVmaXggc2luY2UKKyAgICAgICAgICBp dCBpcyBhbHJlYWR5IHVzZWQgZm9yIGRlY2xhcmluZyBsb2NhbCB2YXJpYWJsZXMuIExPQ1VTIGFw cGxpZXMKKyAgICAgICAgICB0byBhbGwgdHlwZXMgb2YgY29ubmVjdGlvbnMsIGFuZCB0aHVzIGlz IG9ydGhvZ29uYWwgdG8gU0VUCisgICAgICAgICAgR0VULVBVVC1SRU1PVEUsIHdoaWNoIHNlbGVj dHMgYmV0d2VlbiBLZXJtaXQgYW5kIEZUUCBmb3IgcmVtb3RlCisgICAgICAgICAgZmlsZS10cmFu c2ZlciBhbmQgbWFuYWdlbWVudCBjb21tYW5kcy4gVGhlIGRlZmF1bHQgTE9DVVMgaXMKKyAgICAg ICAgICBBVVRPLCB3aGljaCBtZWFucyB3ZSBzd2l0Y2ggdG8gUkVNT1RFIHdoZW5ldmVyIGFuIEZU UCBjb25uZWN0aW9uCisgICAgICAgICAgaXMgbWFkZSwgYW5kIHRvIExPQ0FMIHdoZW5ldmVyIGEg bm9uLUZUUCBjb25uZWN0aW9uIGlzIG1hZGUsIGFuZAorICAgICAgICAgIHN3aXRjaCBiYWNrIGFj Y29yZGluZ2x5IHdoZW5ldmVyIGEgY29ubmVjdGlvbiBpcyBjbG9zZWQuIFNvIGJ5CisgICAgICAg ICAgZGVmYXVsdCwgS2VybWl0IGJlaGF2ZXMgaW4gaXRzIHRyYWRpdGlvbmFsIG1hbm5lciB1bmxl c3MgeW91CisgICAgICAgICAgbWFrZSBhbiBGVFAgY29ubmVjdGlvbiwgaW4gd2hpY2ggY2FzZSBp dCBhY3RzIGxpa2UgYSByZWd1bGFyIEZUUAorICAgICAgICAgIGNsaWVudCAoYnV0IGJldHRlciA6 LSkgICBMT0NVUyBhcHBsaWVzIHRvIHRoZSBmb2xsb3dpbmcKKyAgICAgICAgICBjb21tYW5kczoK KworICBVbnByZWZpeGVkICAgIFJlbW90ZSAgICAgICBMb2NhbCAgICAgICAgRGVzY3JpcHRpb24K KyAgIENEIChDV0QpICAgICAgUkNEICAgICAgICAgIExDRCAgICAgICAgICBDaGFuZ2UgKFdvcmtp bmcpIERpcmVjdG9yeQorICAgQ0RVUCAgICAgICAgICBSQ0RVUCAgICAgICAgTENEVVAgICAgICAg IENEIFVwCisgICBQV0QgICAgICAgICAgIFJQV0QgICAgICAgICBMUFdEICAgICAgICAgUHJpbnQg V29ya2luZyBEaXJlY3RvcnkKKyAgIERJUkVDVE9SWSAgICAgUkRJUiAgICAgICAgIExESVIgICAg ICAgICBSZXF1ZXN0IGEgZGlyZWN0b3J5IGxpc3RpbmcKKyAgIERFTEVURSAgICAgICAgUkRFTCAg ICAgICAgIExERUwgICAgICAgICBEZWxldGUgKGEpIGZpbGUocykKKyAgIFJFTkFNRSAgICAgICAg UlJFTiAgICAgICAgIExSRU4gICAgICAgICBSZW5hbWUgYSBmaWxlCisgICBNS0RJUiAgICAgICAg IFJNS0RJUiAgICAgICBMTUtESVIgICAgICAgQ3JlYXRlIGEgZGlyZWN0b3J5CisgICBSTURJUiAg ICAgICAgIFJSTURJUiAgICAgICBMUk1ESVIgICAgICAgUmVtb3ZlIGEgZGlyZWN0b3J5CisKKyAg IFNFVCBNQVRDSCB7IERPVEZJTEUsIEZJRk8gfSB7IE9OLCBPRkYgfQorICAgICAgICAgIFdoZXRo ZXIgQy1LZXJtaXQgZmlsZW5hbWUgcGF0dGVybnMgKHdpbGRjYXJkcykgc2hvdWxkIG1hdGNoCisg ICAgICAgICAgZmlsZW5hbWVzIHRoYXQgc3RhcnQgd2l0aCBkb3QgKHBlcmlvZCksIG9yIChVbml4 IG9ubHkpIEZJRk9zCisgICAgICAgICAgKG5hbWVkIHBpcGVzKS4gVGhlIGRlZmF1bHRzIGFyZSB0 byBza2lwIGRvdGZpbGVzIGluIFVuaXggYnV0CisgICAgICAgICAgbWF0Y2ggdGhlbSBlbHNld2hl cmUsIGFuZCB0byBza2lwIEZJRk9zLiBBcHBsaWVzIHRvIGJvdGgKKyAgICAgICAgICBpbnRlcmFj dGl2ZSB1c2UgYW5kIHRvIHNlcnZlciBtb2RlLCB3aGVuIHRoZSBzZXJ2ZXIgcmVjZWl2ZXMKKyAg ICAgICAgICB3aWxkY2FyZHMsIGUuZy4gaW4gYSBHRVQgY29tbWFuZC4gQWxzbyBzZWUgUkVNT1RF IFNFVCBNQVRDSC4KKworICAgU0VUIE9QVElPTlMgRElSRUNUT1JZIC9ET1RGSUxFUworICAgICAg ICAgIE5vdyB3b3JrcyBmb3Igc2VydmVyIGxpc3RpbmdzIHRvbyAoVU5JWCBvbmx5KS4gR2l2ZSB0 aGlzIGNvbW1hbmQKKyAgICAgICAgICBwcmlvciB0byBoYXZpbmcgS2VybWl0IGVudGVyIHNlcnZl ciBtb2RlLCBhbmQgdGhlbiBpdCB3aWxsIHNob3cKKyAgICAgICAgICBmaWxlcyB3aG9zZSBuYW1l cyBiZWdpbiB3aXRoIGRvdCAocGVyaW9kKSB3aGVuIHNlbnQgYSBSRU1PVEUKKyAgICAgICAgICBE SVJFQ1RPUlkgY29tbWFuZC4KKworICAgU0VUIFFVSUVUIE9OCisgICAgICAgICAgKGFzIHdlbGwg YXMgdGhlIC1xIGNvbW1hbmQtbGluZSBvcHRpb24pIE5vdyBhcHBsaWVzIGFsc28gdG86CisKKyAg ICAgICAgICArIFNFVCBIT1NUIGNvbm5lY3Rpb24gcHJvZ3Jlc3MgbWVzc2FnZXMuCisgICAgICAg ICAgKyAiUHJlc3MgdGhlIFggb3IgRSBrZXkgdG8gY2FuY2VsIiBmaWxlLXRyYW5zZmVyIG1lc3Nh Z2UuCisgICAgICAgICAgKyBSRU1PVEUgQ0QgcmVzcG9uc2UuCisgICAgICAgICAgKyBSRU1PVEUg TE9HSU4gcmVzcG9uc2UuCisKKyAgIFNFVCBSRUNFSVZFIFBFUk1JU1NJT05TIHsgT04sIE9GRiB9 CisgICAgICAgICAgVGVsbHMgQy1LZXJtaXQgd2hldGhlciB0byBzZXQgdGhlIHBlcm1pc3Npb25z IG9mIGluY29taW5nIGZpbGVzCisgICAgICAgICAgKHJlY2VpdmVkIHdpdGggS2VybWl0IHByb3Rv Y29sKSBmcm9tIHRoZSBwZXJtaXNzaW9ucyBzdXBwbGllZCBpbgorICAgICAgICAgIHRoZSBmaWxl J3MgQXR0cmlidXRlIHBhY2tldCAoaWYgYW55KS4gTm9ybWFsbHkgT04uIEFsc28gc2VlIFNFVAor ICAgICAgICAgIFNFTkQgUEVSTUlTU0lPTlMuCisKKyAgIFNFVCBST09UIGRpcmVjdG9yeQorICAg ICAgICAgIExpa2UgVU5JWCBjaHJvb3QsIHdpdGhvdXQgcmVxdWlyaW5nIHByaXZpbGVnZS4gU2V0 cyB0aGUgcm9vdCBmb3IKKyAgICAgICAgICBmaWxlIGFjY2VzcywgZG9lcyBub3QgYWxsb3cgcmVm ZXJlbmNlIHRvIG9yIGNyZWF0aW9uIG9mIGZpbGVzCisgICAgICAgICAgb3V0c2lkZSB0aGUgcm9v dCwgYW5kIGNhbid0IGJlIHVuZG9uZS4KKworICAgU0VUIFNFTkQgUEVSTUlTU0lPTlMgeyBPTiwg T0ZGIH0KKyAgICAgICAgICBUZWxscyBDLUtlcm1pdCB3aGV0aGVyIHRvIGluY2x1ZGUgZmlsZSBw ZXJtaXNzaW9ucyBpbiB0aGUKKyAgICAgICAgICBhdHRyaWJ1dGVzIGl0IGluY2x1ZGVzIHdpdGgg ZWFjaCBmaWxlIHdoZW4gc2VuZGluZyB3aXRoIEtlcm1pdAorICAgICAgICAgIHByb3RvY29sLiBB bHNvIHNlZSBTRVQgUkVDRUlWRSBQRVJNSVNTSU9OUy4KKworICAgU0VUIFRDUCB7IEhUVFAtUFJP WFksIFNPQ0tTLVNFUlZFUiB9IC9VU0VSOm5hbWUgL1BBU1NXT1JEOnRleHQKKyAgICAgICAgICBU aGVzZSBjb21tYW5kcyBub3cgYWxsb3cgc3BlY2lmaWNhdGlvbiBvZiB1c2VybmFtZSBhbmQgcGFz c3dvcmQuCisKKyAgIFNFVCBURVJNSU5BTCAuIC4gLgorICAgICAgICAgIChTZWUgWzM5OV1TZWN0 aW9uIDEyLikKKworICAgU0VUIFRSQU5TRkVSIE1FU1NBR0UgWyB0ZXh0IF0KKyAgICAgICAgICBT ZXRzIGFuIGluaXRpYWwgdGV4dCBtZXNzYWdlIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUKKyAgICAg ICAgICBmaWxlLXRyYW5zZmVyIGRpc3BsYXkuIFRoZSB0cmFuc2ZlciBtZXNzYWdlIGlzIGF1dG9t YXRpY2FsbHkKKyAgICAgICAgICBkZWxldGVkIG9uY2UgdXNlZCwgc28gbXVzdCBiZSBzZXQgZWFj aCB0aW1lIGEgbWVzc2FnZSBhIGRlc2lyZWQuCisgICAgICAgICAgQW55IHZhcmlhYmxlcyBpbiB0 aGUgbWVzc2FnZSBhcmUgZXZhbHVhdGVkIGF0IHRoZSB0aW1lIHRoZSBTRVQKKyAgICAgICAgICBj b21tYW5kIGlzIGdpdmVuLiBJZiB0aGUgb3B0aW9uYWwgdGV4dCBpcyBvbWl0dGVkLCBhbnkgdHJh bnNmZXIKKyAgICAgICAgICBtZXNzYWdlIHRoYXQgaXMgY3VycmVudGx5IHNldCBpcyByZW1vdmVk LiBTeW5vbnltOiBTRVQgWEZFUiBNU0cuCisgICAgICAgICAgU0hPVyBUUkFOU0ZFUiBkaXNwbGF5 cyBpdCBpZiBpdCBoYXMgYmVlbiBzZXQgYnV0IG5vdCB5ZXQgdXNlZC4KKworICAgU0hPVyBDT01N VU5JQ0FUSU9OUworICAgICAgICAgIEluIEMtS2VybWl0IDguMCwgU0hPVyBDT01NVU5JQ0FUSU9O Uywgd2hlbiBnaXZlbiBpbiByZW1vdGUgbW9kZQorICAgICAgICAgIChpLmUuIGJlZm9yZSBhbnkg Y29ubmVjdGlvbiBoYXMgYmVlbiBlc3RhYmxpc2hlZCksIHRlbGxzIHRoZQorICAgICAgICAgIHR5 cGljYWwgZGlhbG91dCBkZXZpY2UgbmFtZSBmb3IgdGhlIHBhcnRpY3VsYXIgcGxhdGZvcm0gb24g d2hpY2gKKyAgICAgICAgICBpdCdzIHJ1bm5pbmcgKGUuZy4gVFhBMDogZm9yIFZNUywgb3IgL2Rl di9jdWEwcDAgZm9yIEhQLVVYKS4gT24KKyAgICAgICAgICBVbml4IHBsYXRmb3JtcywgaXQgYWxz byB0ZWxscyB0aGUgbmFtZSBvZiB0aGUgbG9ja2ZpbGUKKyAgICAgICAgICBkaXJlY3RvcnkuIFRo aXMgd2F5LCB5b3UgaGF2ZSBhbiBpZGVhIG9mIHdoYXQgdGhlIFNFVCBMSU5FCisgICAgICAgICAg ZGV2aWNlIG5hbWUgc2hvdWxkIGxvb2sgbGlrZSwgYW5kIGlmIHRoZSBTRVQgTElORSBjb21tYW5k IGZhaWxzLAorICAgICAgICAgIHlvdSBrbm93IHRoZSBuYW1lIG9mIHRoZSBkaXJlY3Rvcnkgb3Ig ZGV2aWNlIHRoYXQgaXMgcHJvdGVjdGVkCisgICAgICAgICAgYWdhaW5zdCB5b3UuCisKKyAgIFNI T1cgVkFSSUFCTEVTIFsgbmFtZSBbIG5hbWUgWyAuLi4gXSBdIF0KKyAgICAgICAgICBJbiBDLUtl cm1pdCA4LjAuMjAxIHlvdSBjYW4gcmVxdWVzdCB2YWx1ZXMgb2YgYSBsaXN0IG9mIGJ1aWx0LWlu CisgICAgICAgICAgKFx2KHh4eCkpIHZhcmlhYmxlcy4gRWFjaCBuYW1lIGlzIGEgcGF0dGVybiwg YXMgYmVmb3JlLCBidXQgbm93CisgICAgICAgICAgaXQgYSBmcmVlIHBhdHRlcm4gcmF0aGVyIHRo YW4gYW4gYW5jaG9yZWQgb25lIChleHBsYWluZWQgaW4KKyAgICAgICAgICBbNDAwXVNlY3Rpb24g OC4xMikgc28gbm93ICJzaG93IHZhciBkYXRlIHRpbWUiIHNob3dzIHRoZSB2YWx1ZXMKKyAgICAg ICAgICBvZiBhbGwgdmFyaWFibGVzIHdob3NlIG5hbWVzIGluY2x1ZGUgdGhlIHN0cmluZ3MgImRh dGUiIG9yCisgICAgICAgICAgInRpbWUiLgorCisgICBUQUlMIFsgc3dpdGNoZXMgXSBmaWxlbmFt ZQorICAgICAgICAgIEVxdWl2YWxlbnQgdG8gVFlQRSAvVEFJTCBbIG90aGVyLXN3aXRjaGVzIF0g ZmlsZW5hbWUuCisKKyAgIFRSQU5TTUlUIC9OT0VDSE8gWyBvdGhlciBzd2l0Y2hlcyBdIGZpbGVu YW1lCisgICAgICAgICAgVGhlIC9OT0VDSE8gc3dpdGNoIGlzIGVxdWl2YWxlbnQgdG8gZ2l2aW5n IHRoZSBjb21tYW5kIFNFVAorICAgICAgICAgIFRSQU5TTUlUIEVDSE8gT0ZGIHByaW9yIHRvIHRo ZSBUUkFOU01JVCBjb21tYW5kLCBleGNlcHQgdGhlCisgICAgICAgICAgc3dpdGNoIGFmZmVjdHMg b25seSB0aGUgY29tbWFuZCB3aXRoIHdoaWNoIGl0IHdhcyBnaXZlbiBhbmQgZG9lcworICAgICAg ICAgIG5vdCBhZmZlY3QgdGhlIHByZXZhaWxpbmcgZ2xvYmFsIHNldHRpbmcuCisKKyAgIFRSQU5T TUlUIC9OT1dBSVQgWyBvdGhlciBzd2l0Y2hlcyBdIGZpbGVuYW1lCisgICAgICAgICAgVGhlIC9O T1dBSVQgc3dpdGNoIGlzIGVxdWl2YWxlbnQgdG8gZ2l2aW5nIHRoZSBjb21tYW5kIFNFVAorICAg ICAgICAgIFRSQU5TTUlUIFBST01QVCAwIHByaW9yIHRvIHRoZSBUUkFOU01JVCBjb21tYW5kLCBl eGNlcHQgdGhlCisgICAgICAgICAgc3dpdGNoIGFmZmVjdHMgb25seSB0aGUgY29tbWFuZCB3aXRo IHdoaWNoIGl0IHdhcyBnaXZlbiBhbmQgZG9lcworICAgICAgICAgIG5vdCBhZmZlY3QgdGhlIHBy ZXZhaWxpbmcgZ2xvYmFsIHNldHRpbmcuCisKKyAgIFRSQU5TTUlUIC9OT1dBSVQgL05PRUNITyAv QklOQVJZIFsgb3RoZXIgc3dpdGNoZXMgXSBmaWxlbmFtZQorICAgICAgICAgIFdoZW4gdGhlIFRS QU5TTUlUIGNvbW1hbmQgaXMgZ2l2ZW4gd2l0aCB0aGUgL05PV0FJVCwgL05PRUNITywKKyAgICAg ICAgICBhbmQgL0JJTkFSWSBzd2l0Y2hlcywgdGhpcyBhY3RpdmF0ZXMgYSBzcGVjaWFsICJibGFz dCB0aGUgd2hvbGUKKyAgICAgICAgICBmaWxlIG91dCB0aGUgY29tbXVuaWNhdGlvbnMgY29ubmVj dGlvbiBhbGwgYXQgb25jZSIgbW9kZSB0aGF0CisgICAgICAgICAgS2VybWl0IGRpZG4ndCBoYXZl IHByaW9yIHRvIHZlcnNpb24gOC4wLiBUaGVyZSBoYXMgYmVlbgorICAgICAgICAgIGluY3JlYXNp bmcgZGVtYW5kIGZvciB0aGlzIHR5cGUgb2YgdHJhbnNtaXNzaW9uIHdpdGggdGhlIGFkdmVudAor ICAgICAgICAgIG9mIGRldmljZXMgdGhhdCBleHBlY3QgaW1hZ2UgKGUuZy4gLkpQRykgb3Igc291 bmQgKGUuZy4gLk1QMykKKyAgICAgICAgICBmaWxlcyBhcyByYXcgaW5wdXQuIFRoZSBvYnZpb3Vz IHF1ZXN0aW9uIGlzOiBob3cgZG9lcyB0aGUKKyAgICAgICAgICByZWNlaXZpbmcgZGV2aWNlIGtu b3cgd2hlbiBpdCBoYXMgdGhlIHdob2xlIGZpbGU/IFRoaXMgZGVwZW5kcworICAgICAgICAgIG9u IHRoZSBkZXZpY2UsIG9mIGNvdXJzZTsgdXN1YWxseSBhZnRlciBhIGNlcnRhaW4gYW1vdW50IG9m IHRpbWUKKyAgICAgICAgICBlbGFwc2VzIHdpdGggbm90aGluZyBhcnJpdmluZywgb3IgZWxzZSB3 aGVuIEtlcm1pdCBoYW5ncyB1cCBvcgorICAgICAgICAgIGNsb3NlcyB0aGUgY29ubmVjdGlvbi4K KworICAgVFlQRSAvQ0hBUkFDVEVSLVNFVDpuYW1lCisgICAgICAgICAgQWxsb3dzIHlvdSB0byBz cGVjaWZ5IHRoZSBjaGFyYWN0ZXIgc2V0IGluIHdoaWNoIHRoZSBmaWxlIHRvIGJlCisgICAgICAg ICAgdHlwZWQgaXMgZW5jb2RlZC4KKworICAgVFlQRSAvTlVNQkVSCisgICAgICAgICAgQWRkcyBs aW5lIG51bWJlcnMuCisKKyAgIFRZUEUgL09VVFBVVDpmaWxlbmFtZQorICAgICAgICAgIFNlbmRz IHRoZSByZXN1bHRzIG9mIHRoZSBUWVBFIGNvbW1hbmQgdG8gdGhlIGdpdmVuIGZpbGUuCisKKyAg IFRZUEUgL1RSQU5TTEFURS1UTzpuYW1lCisgICAgICAgICAgVXNlZCBpbiBjb25qdW5jdGlvbiB3 aXRoIFRZUEUgL0NIQVJBQ1RFUi1TRVQ6eHh4OyBhbGxvd3MgeW91IHRvCisgICAgICAgICAgc3Bl Y2lmeSB0aGUgY2hhcmFjdGVyIHNldCBpbiB3aGljaCB0aGUgZmlsZSBpcyB0byBiZSBkaXNwbGF5 ZWQuCisKKyAgIFRZUEUgL1RSQU5TUEFSRU5UCisgICAgICAgICAgVXNlZCB0byBkaXNhYmxlIGNo YXJhY3Rlci1zZXQgdHJhbnNsYXRpb24gaW4gdGhlIFRZUEUgY29tbWFuZCwKKyAgICAgICAgICB3 aGljaCBvdGhlcndpc2UgY2FuIHRha2UgcGxhY2UgYXV0b21hdGljYWxseSBiYXNlZCBvbiBmaWxl CisgICAgICAgICAgc2Nhbm5pbmcsIGV2ZW4gd2hlbiAvQ0hBUkFDVEVSLVNFVCBhbmQgL1RSQU5T TEFURS1UTyBzd2l0Y2hlcworICAgICAgICAgIGFyZSBub3QgZ2l2ZW4uCisKKyAgIFZPSUQgdGV4 dAorICAgICAgICAgIFBhcnNlcyB0aGUgdGV4dCwgZXZhbHVhdGluZyBhbnkgYmFja3NsYXNoIGl0 ZW1zIGluIGl0IChzdWNoIGFzCisgICAgICAgICAgZnVuY3Rpb24gY2FsbHMpIGJ1dCBkb2Vzbid0 IGRvIGFueXRoaW5nIGZ1cnRoZXIsIGV4Y2VwdCBwb3NzaWJseQorICAgICAgICAgIHByaW50aW5n IGVycm9yIG1lc3NhZ2VzLiBVc2VmdWwgZm9yIGludm9raW5nIGZ1bmN0aW9ucyB0aGF0IGhhdmUK KyAgICAgICAgICBzaWRlIGVmZmVjdHMgd2l0aG91dCB1c2luZyBvciBwcmludGluZyB0aGVpciBk aXJlY3QgcmVzdWx0cywKKyAgICAgICAgICBlLmcuICJ2b2lkIFxmc3BsaXQoXCVhLCZhKSIuCisK K1N5bWJvbGljIExpbmtzIGluIFVOSVgKKworICAgVGhlIFVOSVggdmVyc2lvbnMgb2YgQy1LZXJt aXQgaGF2ZSBoYWQgL0ZPTExPV0xJTktTIGFuZCAvTk9GT0xMT1dMSU5LUworICAgc3dpdGNoZXMg YWRkZWQgdG8gc2V2ZXJhbCBjb21tYW5kcyB0byBjb250cm9sIHRoZSB0cmVhdG1lbnQgb2Ygc3lt Ym9saWMKKyAgIGxpbmtzLiBEaWZmZXJlbnQgY29tbWFuZHMgZGVhbCBkaWZmZXJlbnRseSB3aXRo IHN5bWJvbGljIGxpbmtzOgorCisgICBLZXJtaXQgU0VORCwgRlRQIE1QVVQKKyAgICAgICAgICAv Tk9GT0xMT1dMSU5LUyBpcyB0aGUgZGVmYXVsdCwgd2hpY2ggbWVhbnMgc3ltYm9saWMgbGlua3Mg YXJlCisgICAgICAgICAgc2tpcHBlZCBlbnRpcmVseS4gVGhlIGFsdGVybmF0aXZlLCAvRk9MTE9X TElOS1MsIHNob3VsZCBiZSB1c2VkCisgICAgICAgICAgd2l0aCBjYXV0aW9uLCBzaW5jZSBhbiBp bm5vY2VudCBsaW5rIG1pZ2h0IHBvaW50IHRvIGEgd2hvbGUgZmlsZQorICAgICAgICAgIHN5c3Rl bSwgb3IgaXQgbWlnaHQgY2F1c2UgYSBsb29wLiBUaGVyZSBpcyBubyB3YXkgaW4gS2VybWl0IG9y CisgICAgICAgICAgRlRQIHByb3RvY29sIHRvIHNlbmQgdGhlIGxpbmsgaXRzZWxmLiBXZSBlaXRo ZXIgc2tpcCB0aGVtIG9yCisgICAgICAgICAgZm9sbG93IHRoZW07IHdlIGNhbid0IGR1cGxpY2F0 ZSB0aGVtLgorCisgICBESVJFQ1RPUlkKKyAgICAgICAgICAvTk9GT0xMT1dMSU5LUyBpcyB0aGUg ZGVmYXVsdCwgd2hpY2ggbWVhbnMgdGhlIERJUkVDVE9SWSBjb21tYW5kCisgICAgICAgICAgbGlz dHMgc3ltYm9saWMgbGlua3MgaW4gYSB3YXkgdGhhdCBzaG93cyB0aGV5IGFyZSBsaW5rcywgYnV0 IGl0CisgICAgICAgICAgZG9lcyBub3QgZm9sbG93IHRoZW0uIFRoZSBhbHRlcm5hdGl2ZSwgL0ZP TExPV0xJTktTLCBmb2xsb3dzCisgICAgICAgICAgbGlua3MgYW5kIGdpdmVzIGluZm9ybWF0aW9u IGFib3V0IHRoZSBsaW5rZWQtdG8gZGlyZWN0b3JpZXMgYW5kCisgICAgICAgICAgZmlsZXMuCisK KyAgIERFTEVURSwgUk1ESVIKKyAgICAgICAgICBUaGUgREVMRVRFIGNvbW1hbmQgZG9lcyBub3Qg aGF2ZSBsaW5rLXNwZWNpZmljIHN3aXRjaGVzLiBERUxFVEUKKyAgICAgICAgICBuZXZlciBmb2xs b3dzIGxpbmtzLiBJZiB5b3UgdGVsbCBLZXJtaXQgdG8gZGVsZXRlIGEgc3ltYm9saWMKKyAgICAg ICAgICBsaW5rLCBpdCBkZWxldGVzIHRoZSBsaW5rIGl0c2VsZiwgbm90IHRoZSBsaW5rZWQtdG8g ZmlsZS4gRGl0dG8KKyAgICAgICAgICBmb3IgUk1ESVIuCisKKyAgIENPUFkKKyAgICAgICAgICBU aGUgQ09QWSBjb21tYW5kIGJlaGF2ZXMganVzdCBsaWtlIHRoZSBVTklYIGNwIGNvbW1hbmQ7IGl0 CisgICAgICAgICAgYWx3YXlzIGZvbGxvd3MgbGlua3MuCisKKyAgIFJFTkFNRQorICAgICAgICAg IFRoZSBSRU5BTUUgY29tbWFuZCBiZWhhdmVzIGp1c3QgbGlrZSB0aGUgVU5JWCBtdiBjb21tYW5k OyBpdAorICAgICAgICAgIG9wZXJhdGVzIG9uIGxpbmtzIGRpcmVjdGx5IHJhdGhlciB0aGFuIGZv bGxvd2luZy4KKworICAgWyBbNDAxXVRvcCBdIFsgWzQwMl1Db250ZW50cyBdIFsgWzQwM11DLUtl cm1pdCBIb21lIF0gWyBbNDA0XUtlcm1pdAorICAgSG9tZSBdCisKKzguIE9USEVSIFNDUklQVElO RyBJTVBST1ZFTUVOVFMKKworOC4xLiBQZXJmb3JtYW5jZSBhbmQgRGVidWdnaW5nCisKKyAgIEEg Y29tbWFuZCBjYWNoZSBmb3IgZnJlcXVlbnRseSB1c2VkIGNvbW1hbmRzIHBsdXMgc29tZSByZWxh dGVkCisgICBvcHRpbWl6YXRpb25zIGluY3JlYXNlcyB0aGUgc3BlZWQgb2YgY29tcHV0ZS1ib3Vu ZCBzY3JpcHRzIGJ5IGFueXdoZXJlCisgICBmcm9tIDUwJSB0byAxMDAwJS4KKworICAgVGhlIG5l dyBQUk9NUFQgY29tbWFuZCBjYW4gYmUgdXNlZCB0byBzZXQgYnJlYWtwb2ludHMgZm9yIGRlYnVn Z2luZworICAgc2NyaXB0cy4gSWYgZXhlY3V0ZWQgaW4gYSBjb21tYW5kIGZpbGUgb3IgbWFjcm8s IGl0IGdpdmVzIHlvdSBhbgorICAgaW50ZXJhY3RpdmUgY29tbWFuZCBwcm9tcHQgaW4gdGhlIGN1 cnJlbnQgY29udGV4dCBvZiB0aGUgc2NyaXB0LCB3aXRoCisgICBhbGwgaXRzIHZhcmlhYmxlcywg YXJndW1lbnRzLCBjb21tYW5kIHN0YWNrLCBldGMsIGF2YWlsYWJsZSBmb3IKKyAgIGV4YW1pbmF0 aW9uIG9yIGNoYW5nZSwgYW5kIHRoZSBhYmlsaXR5IHRvIHJlc3VtZSB0aGUgc2NyaXB0IGF0IGFu eQorICAgcG9pbnQgKEVORCByZXN1bWVzIGl0LCBDdHJsLUMgb3IgU1RPUCBjYW5jZWxzIGl0IGFu ZCByZXR1cm5zIHRvIHRvcAorICAgbGV2ZWwpLgorCisgICBUaGUgbmV3IEN0cmwtQyB0cmFwcGlu ZyBmZWF0dXJlIChbNDA1XVNlY3Rpb24gOC4xNCkgbGV0cyB5b3UgaW50ZXJjZXB0CisgICBpbnRl cnJ1cHRpb24gb2Ygc2NyaXB0cy4gVGhpcyBjYW4gYmUgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRo IHRoZQorICAgUFJPTVBUIGNvbW1hbmQgdG8gZGVidWcgc2NyaXB0cy4gRXhhbXBsZToKKworZGVm aW5lIE9OX0NUUkxDIHsKKyAgICBlY2hvIElOVEVSUlVQVEVEIEJZIENUUkwtQy4uLgorICAgIGVj aG8gVGhlIGNvbW1hbmQgc3RhY2sgaGFzIG5vdCB5ZXQgYmVlbiByb2xsZWQgYmFjazoKKyAgICBz aG93IHN0YWNrCisgICAgZWNobyBUeXBlIEN0cmwtQyBhZ2FpbiBvciB1c2UgdGhlIEVORCBjb21t YW5kIHRvIHJldHVybiB0byB0b3AgbGV2ZWwuCisgICAgcHJvbXB0IERlYnVnPgorfQorCisgICBB ZGRpbmcgdGhpcyBPTl9DVFJMIGRlZmluaXRpb24gdG8geW91ciBzY3JpcHQgbGV0cyB5b3UgaW50 ZXJydXB0IGl0IGF0CisgICBhbnkgcG9pbnQgYW5kIGdldCBwcm9tcHQgdGhhdCBpcyBpc3N1ZWQg YXQgdGhlIGN1cnJlbnQgY29tbWFuZCBsZXZlbCwKKyAgIHNvIHlvdSBjYW4gcXVlcnkgbG9jYWwg dmFyaWFibGVzLCBldGMuCisKKyAgIFsgWzQwNl1Ub3AgXSBbIFs0MDddQ29udGVudHMgXSBbIFs0 MDhdQy1LZXJtaXQgSG9tZSBdIFsgWzQwOV1LZXJtaXQKKyAgIEhvbWUgXQorCis4LjIuIFVzaW5n IE1hY3JvcyBhcyBOdW1lcmljIFZhcmlhYmxlcworCisgICBBIG1hY3JvIGlzIGEgd2F5IHRvIGFz c2lnbiBhIHZhbHVlIHRvIGEgbmFtZSwgYW5kIHRoZW4gdXNlIHRoZSBuYW1lIHRvCisgICByZWZl ciB0byB0aGUgdmFsdWUuIE1hY3JvcyBhcmUgdXNlZCBpbiB0d28gd2F5cyBpbiBLZXJtaXQ6IGFz CisgICAic3Vicm91dGluZXMiIG9yIGZ1bmN0aW9ucyBjb21wb3NlZCBvZiBLZXJtaXQgY29tbWFu ZHMsIHdoaWNoIGFyZQorICAgZXhlY3V0ZWQsIG9yIGFzIHZhcmlhYmxlcyB0byBob2xkIGFyYml0 cmFyeSB2YWx1ZXMgLS0gdGV4dCwgbnVtYmVycywKKyAgIGZpbGVuYW1lcywgZXRjLgorCisgICBX aGVuIGEgbWFjcm8gaXMgdG8gYmUgZXhlY3V0ZWQsIGl0cyBuYW1lIGlzIGdpdmVuIGFzIGlmIGl0 IHdlcmUgYQorICAgQy1LZXJtaXQgY29tbWFuZCwgb3B0aW9uYWxseSBwcmVjZWRlZCBieSB0aGUg d29yZCAiZG8iLiBXaGVuIGEgbWFjcm8gaXMKKyAgIHVzZWQgYXMgYSB2YXJpYWJsZSwgaXQgbXVz dCBiZSAiZXNjYXBlZCIgd2l0aCBcbSh4eHgpIChvciBlcXVpdmFsZW50CisgICBmdW5jdGlvbiwg ZS5nLiBccyh4eHgpLCBcOih4eHgpLCBcZmRlZmluaXRpb24oeHh4KSksIHdoZXJlIHh4eCBpcyB0 aGUKKyAgIG1hY3JvIG5hbWUsIGZvciBleGFtcGxlOgorCisgIGRlZmluZSBmaWxlbmFtZSAvdXNy L29sZ2Evb29mYS50eHQKKyAgc2VuZCBcbShmaWxlbmFtZSkKKworICAgT2YgY291cnNlIHZhcmlh YmxlcyBjYW4gYWxzbyBob2xkIG51bWJlcnM6CisKKyAgZGVmaW5lIHNpemUgMTcKKyAgZGVjbGFy ZSBcJmFbXG0oc2l6ZSldCisgIC4uLgorICBkZWZpbmUgaW5kZXggMworICBpZiAoID09IFxtKGlu ZGV4KSAzICkgZWNobyBUaGUgdGhpcmQgdmFsdWUgaXM6IFwmYVtcbShpbmRleCldCisgIGV2YWx1 YXRlIGluZGV4IChcbShpbmRleCkgKiA0KQorICBpZiAoID4gXG0oaW5kZXgpIFxtKHNpemUpICkg ZWNobyBPdXQgb2YgcmFuZ2UhCisKKyAgIEJ1dCB0aGVzZSBhcmUgY29udGV4dHMgaW4gd2hpY2gg b25seSBudW1iZXJzIGFyZSB2YWxpZC4gQy1LZXJtaXQgOC4wCisgICBoYXMgYmVlbiBjaGFuZ2Vk IHRvIHRyZWF0IG5vbi1lc2NhcGVkIG5vbi1udW1lcmljIGl0ZW1zIGluIHN0cmljdGx5CisgICBu dW1lcmljIGNvbnRleHRzIGFzIG1hY3JvIG5hbWVzLiBTbyBpdCBpcyBub3cgcG9zc2libGUgKGJ1 dCBub3QKKyAgIHJlcXVpcmVkKSB0byBvbWl0IHRoZSBcbSguLi4pIG5vdGF0aW9uIGFuZCBqdXN0 IHVzZSB0aGUgbWFjcm8gbmFtZSBpbgorICAgdGhlc2UgY29udGV4dHM6CisKKyAgZGVmaW5lIHNp emUgMTcKKyAgZGVjbGFyZSBcJmFbc2l6ZV0KKyAgLi4uCisgIGRlZmluZSBpbmRleCAzCisgIGlm ICggPT0gaW5kZXggMyApIGVjaG8gVGhlIHRoaXJkIHZhbHVlIGlzOiBcJmFbaW5kZXhdCisgIGV2 YWx1YXRlIGluZGV4IChpbmRleCAqIDQpCisgIGlmICggPiBpbmRleCBzaXplICkgZWNobyBPdXQg b2YgcmFuZ2UhCisKKyAgIFRoaXMgaXMgZXNwZWNpYWxseSBuaWNlIGZvciBsb29wcyB0aGF0IGRl YWwgd2l0aCBhcnJheXMuIEhlcmUsIGZvcgorICAgZXhhbXBsZSwgaXMgYSBsb29wIHRoYXQgcmV2 ZXJzZXMgdGhlIG9yZGVyIG9mIHRoZSBlbGVtZW50cyBpbiBhbiBhcnJheS4KKyAgIFdoZXJlYXMg Zm9ybWVybHkgaXQgd2FzIG5lY2Vzc2FyeSB0byB3cml0ZToKKworICAuXCVuIDo6PSBcZmRpbSgm YSkKKyAgZm9yIFwlaSAxIFwlbi8yIDEgeworICAgICAgLnRtcCA6PSBcJmFbXCVuLVwlaSsxXQor ICAgICAgLlwmYVtcJW4tXCVpKzFdIDo9IFwmYVtcJWldCisgICAgICAuXCZhW1wlaV0gOj0gXG0o dG1wKQorICB9CisKKyAgIFJlY29kaW5nIHRoaXMgdG8gdXNlIG1hY3JvIG5hbWVzICJpIiBhbmQg Im4iIGluc3RlYWQgb2YgdGhlIGJhY2tzbGFzaAorICAgdmFyaWFibGVzIFwlaSBhbmQgXCVuLCB3 ZSBoYXZlOgorCisgIC5uIDo6PSBcZmRpbSgmYSkKKyAgZm9yIGkgMSBuLzIgMSB7CisgICAgICAu dG1wIDo9IFwmYVtuLWkrMV0KKyAgICAgIC5cJmFbbi1pKzFdIDo9IFwmYVtpXQorICAgICAgLlwm YVtpXSA6PSBcbSh0bXApCisgIH0KKworICAgd2hpY2ggcmVkdWNlcyB0aGUgYmFja3NsYXNoIGNv dW50IHRvIGxlc3MgdGhhbiBoYWxmLiBUaGUgZmluYWwKKyAgIHN0YXRlbWVudCBpbiB0aGUgbG9v cCBjb3VsZCBiZSB3cml0dGVuICIuXCZhW2ldIDo6PSB0bXAiIGlmIHRoZSBhcnJheQorICAgY29u dGFpbmVkIG9ubHkgbnVtYmVycyAoc2luY2UgOjo9IGluZGljYXRlcyBhcml0aG1ldGljIGV4cHJl c3Npb24KKyAgIGV2YWx1YXRpb24pLgorCisgICBBbHNvLCBub3cgeW91IGNhbiB1c2UgZmxvYXRp bmctcG9pbnQgbnVtYmVycyBpbiBpbnRlZ2VyIGNvbnRleHRzIChzdWNoCisgICBhcyBhcnJheSBz dWJzY3JpcHRzKSwgaW4gd2hpY2ggY2FzZSB0aGV5IGFyZSB0cnVuY2F0ZWQgdG8gYW4gaW50ZWdl cgorICAgdmFsdWUgKGkuZS4gdGhlIGZyYWN0aW9uYWwgcGFydCBpcyBkaXNjYXJkZWQpLgorCisg ICBFeGFtcGxlcyBvZiBudW1lcmljIGNvbnRleHRzIGluY2x1ZGU6CisKKyAgICAgKiBBcnJheSBz dWJzY3JpcHRzLgorICAgICAqIEFueSBudW1lcmljIGZ1bmN0aW9uIGFyZ3VtZW50LgorICAgICAq IFJpZ2h0LWhhbmQgc2lkZSBvZiA6Oj0gYXNzaWdubWVudHMuCisgICAgICogRVZBTFVBVEUgY29t bWFuZCBvciBcZmV2YWx1YXRlKCkgZnVuY3Rpb24gZXhwcmVzc2lvbi4KKyAgICAgKiBUaGUgSU5D UkVNRU5UIG9yIERFQ1JFTUVOVCBieS12YWx1ZS4KKyAgICAgKiBJRiA9LCA+LCA8LCAhPSwgPj0s IGFuZCA8PSBjb21wYXJhbmRzLgorICAgICAqIFRoZSBJRiBudW1iZXIgY29uc3RydWN0LgorICAg ICAqIEZPUi1sb29wIHZhcmlhYmxlcy4KKyAgICAgKiBTVE9QLCBFTkQsIGFuZCBFWElUIHN0YXR1 cyBjb2Rlcy4KKyAgICAgKiBUaGUgSU5QVVQgdGltZW91dCB2YWx1ZS4KKyAgICAgKiBQQVVTRSwg V0FJVCwgU0xFRVAsIE1TTEVFUCBpbnRlcnZhbHMuCisgICAgICogVGhlIFNISUZUIGFyZ3VtZW50 LgorICAgICAqIE51bWVyaWMgc3dpdGNoIGFyZ3VtZW50cywgZS5nLiBUWVBFIC9XSURUSDpudW1i ZXIsIFNFTkQKKyAgICAgICAvTEFSR0VSOm51bWJlci4KKyAgICAgKiBTQ1JFRU4gTU9WRS1UTyBy b3cgYW5kIGNvbHVtbiBudW1iZXIuCisgICAgICogVmFyaW91cyBTRVQgRElBTCBwYXJhbWV0ZXJz ICh0aW1lb3V0LCByZXRyeSBsaW1pdCwgZXRjKS4KKyAgICAgKiBWYXJpb3VzIFNFVCBTRU5EIG9y IFJFQ0VJVkUgcGFyYW1ldGVycyAocGFja2V0IGxlbmd0aCwgd2luZG93IHNpemUsCisgICAgICAg ZXRjKS4KKyAgICAgKiBWYXJpb3VzIG90aGVyIFNFVCBwYXJhbWV0ZXJzLgorCisgICBhbmQ6CisK KyAgICAgKiBTLUV4cHJlc3Npb25zIChleHBsYWluZWQgaW4gWzQxMF1TZWN0aW9uIDkpLgorCisg ICBNYWNybyBuYW1lcyB1c2VkIGluIG51bWVyaWMgY29udGV4dHMgbXVzdCBub3QgaW5jbHVkZSBt YXRoZW1hdGljYWwKKyAgIG9wZXJhdG9ycy4gQWx0aG91Z2ggaXQgaXMgbGVnYWwgdG8gY3JlYXRl IGEgbWFjcm8gY2FsbGVkICJmb28rYmFyIiwgaW4KKyAgIGEgbnVtZXJpYyBjb250ZXh0IHRoaXMg d291bGQgYmUgdGFrZW4gYXMgdGhlIHN1bSBvZiB0aGUgdmFsdWVzIG9mICJmb28iCisgICBhbmQg ImJhciIuIEFueSBzdWNoIGNvbmZsaWN0IGNhbiBiZSBhdm9pZGVkLCBvZiBjb3Vyc2UsIGJ5IGVu Y2xvc2luZworICAgdGhlIG1hY3JvIG5hbWUgaW4gXG0oLi4uKS4KKworICAgWyBbNDExXVRvcCBd IFsgWzQxMl1Db250ZW50cyBdIFsgWzQxM11DLUtlcm1pdCBIb21lIF0gWyBbNDE0XUtlcm1pdAor ICAgSG9tZSBdCisKKzguMy4gTmV3IElGIENvbmRpdGlvbnMKKworICAgU2V2ZXJhbCBuZXcgSUYg Y29uZGl0aW9ucyBhcmUgYXZhaWxhYmxlOgorCisgICBJRiBERUNMQVJFRCBhcnJheW5hbWUKKyAg ICAgICAgICBFeHBsYWluZWQgaW4gWzQxNV1TZWN0aW9uIDguNi4KKworICAgSUYgS0JISVQKKyAg ICAgICAgICBBbGxvd3MgYSBzY3JpcHQgdG8gdGVzdCB3aGV0aGVyIGEga2V5IHdhcyBwcmVzc2Vk IHdpdGhvdXQKKyAgICAgICAgICBhY3R1YWxseSB0cnlpbmcgdG8gcmVhZCBpdC4KKworICAgSUYg S0VSQkFORyAoVW5peCBvbmx5KQorICAgICAgICAgIFRydWUgaWYgS2VybWl0IHdhcyBzdGFydGVk IGZyb20gYSBLZXJiYW5nIHNjcmlwdC4gVGhpcyBpcyB1c2VmdWwKKyAgICAgICAgICBmb3Iga25v d2luZyBob3cgdG8gaW50ZXJwcmV0IHRoZSBcJkBbXSBhbmQgXCZfW10gYXJndW1lbnQgdmVjdG9y CisgICAgICAgICAgYXJyYXlzLCBhbmQgdW5kZXIgd2hhdCBjb25kaXRpb25zIHRvIGV4aXQuCisK KyAgIElGIElOVEVHRVIgbgorICAgICAgICAgIFRoaXMgaXMganVzdCBhIHN5bm9ueW0gZm9yIElG IE5VTUVSSUMsIHdoaWNoIGlzIHRydWUgaWYgbgorICAgICAgICAgIGNvbnRhaW5zIG9ubHkgZGln aXRzIChvciwgaWYgbiBpcyBhIHZhcmlhYmxlLCBpdHMgdmFsdWUgY29udGFpbnMKKyAgICAgICAg ICBvbmx5IGRpZ2l0cykuCisKKyAgIEJ5IGNvbnRyYXN0LCBJRiBGTE9BVCBuIHN1Y2NlZWRzIGlm IG4gaXMgYSBmbG9hdGluZy1wb2ludCBudW1iZXIgT1IgYW4KKyAgIGludGVnZXIgKG9yIGEgdmFy aWFibGUgd2l0aCBmbG9hdGluZy1wb2ludCBvciBpbnRlZ2VyIHZhbHVlKS4KKyAgIFRoZXJlZm9y ZSwgSUYgRkxPQVQgc2hvdWxkIGJlIHVzZWQgd2hlbmV2ZXIgYW55IGtpbmQgb2YgbnVtYmVyIGlz CisgICBhY2NlcHRhYmxlLCB3aGVyZWFzIElGIElOVEVHRVIgKG9yIElGIE5VTUVSSUMpIHdoZW4g b25seSBhbiBpbnRlZ2VyIGNhbgorICAgYmUgdXNlZC4KKworICAgWyBbNDE2XVRvcCBdIFsgWzQx N11Db250ZW50cyBdIFsgWzQxOF1DLUtlcm1pdCBIb21lIF0gWyBbNDE5XUtlcm1pdAorICAgSG9t ZSBdCisKKzguNC4gVGhlIE9OX1VOS05PV05fQ09NTUFORCBNYWNybworCisgICBUaGUgbmV3IE9O X1VOS05PV05fQ09NTUFORCBtYWNybywgaWYgZGVmaW5lZCwgaXMgZXhlY3V0ZWQgd2hlbmV2ZXIg eW91CisgICBnaXZlIGEgY29tbWFuZCB0aGF0IGlzIG5vdCBrbm93biB0byBDLUtlcm1pdDsgYW55 IG9wZXJhbmRzIGFyZSBwYXNzZWQKKyAgIGFzIGFyZ3VtZW50cy4gSGVyZSBhcmUgc29tZSBzYW1w bGUgZGVmaW5pdGlvbnM6CisKKyAgREVGIE9OX1VOS05PV05fQ09NTUFORCB0ZWxuZXQgXCUxIDsg VHJlYXQgdW5rbm93biBjb21tYW5kcyBhcyBob3N0bmFtZXMKKyAgREVGIE9OX1VOS05PV05fQ09N TUFORCBkaWFsIFwlMSAgIDsgVHJlYXQgdW5rbm93biBjb21tYW5kcyBwaG9uZSBudW1iZXJzCisg IERFRiBPTl9VTktOT1dOX0NPTU1BTkQgdGFrZSBcJTEgICA7IFRyZWF0IHVua25vd24gY29tbWFu ZHMgYXMgZmlsZW5hbWVzCisgIERFRiBPTl9VTktOT1dOX0NPTU1BTkQgIVwlKiAgICAgICA7IFRy ZWF0IHVua25vd24gY29tbWFuZHMgYXMgc2hlbGwgY29tbWFuZHMKKworICAgVGhlIE9OX0NEIG1h Y3JvLCBpZiBkZWZpbmVkLCBpcyBleGVjdXRlZCB3aGVuZXZlciBLZXJtaXQgaXMgZ2l2ZW4gYSBD RAorICAgKGNoYW5nZSBkaXJlY3RvcnkpIGNvbW1hbmQgKDguMC4yMTEpLiBVcG9uIGVudHJ5IHRv IHRoaXMgbWFjcm8sIHRoZQorICAgZGlyZWN0b3J5IGhhcyBhbHJlYWR5IGNoYW5nZWQgYW5kIHRo ZSBuZXcgZGlyZWN0b3J5IHN0cmluZyBpcyBhdmFpbGFibGUKKyAgIGluIHRoZSBcdihkaXJlY3Rv cnkpIHZhcmlhYmxlLCBhbmQgYWxzbyBhcyB0aGUgZmlyc3QgYXJndW1lbnQgKFwlMSkuCisKKyAg IFsgWzQyMF1Ub3AgXSBbIFs0MjFdQ29udGVudHMgXSBbIFs0MjJdQy1LZXJtaXQgSG9tZSBdIFsg WzQyM11LZXJtaXQKKyAgIEhvbWUgXQorCis4LjUuIFRoZSBTSE9XIE1BQ1JPIENvbW1hbmQKKwor ICAgVGhlIFNIT1cgTUFDUk8gY29tbWFuZCBoYXMgYmVlbiBjaGFuZ2VkIHRvIGFjY2VwdCBtb3Jl IHRoYW4gb25lIG1hY3JvCisgICBuYW1lOgorCisgIChzZXRxIGEgMSBiIDIgYyAzKQorICBzaG93 IG1hYyBhIGIgYworICBhID0gMQorICBiID0gMgorICBjID0gMworCisgICBBbiBleGFjdCBtYXRj aCBpcyByZXF1aXJlZCBmb3IgZWFjaCBuYW1lIChleGNlcHQgdGhhdCBjYXNlIGRvZXNuJ3QKKyAg IG1hdHRlcikuIElmIHlvdSBpbmNsdWRlIHdpbGRjYXJkIGNoYXJhY3RlcnMsIGhvd2V2ZXIsIGEg cGF0dGVybiBtYXRjaAorICAgaXMgcGVyZm9ybWVkOgorCisgIHNob3cgbWFjIFthLWNdKngKKwor ICAgc2hvd3MgYWxsIG1hY3JvcyB3aG9zZSBuYW1lcyBzdGFydCB3aXRoIGEsIGIsIG9yIGMsIGFu ZCBlbmQgd2l0aCB4LgorCisgICBbIFs0MjRdVG9wIF0gWyBbNDI1XUNvbnRlbnRzIF0gWyBbNDI2 XUMtS2VybWl0IEhvbWUgXSBbIFs0MjddS2VybWl0CisgICBIb21lIF0KKworOC42LiBBcnJheXMK KworICAgQSBjbGFyaWZpY2F0aW9uIHJlZ2FyZGluZyByZWZlcmVuY2VzIHRvIGFycmF5IG5hbWVz IChhcyBvcHBvc2VkIHRvCisgICBhcnJheSBlbGVtZW50cyk6IFlvdSBjYW4gdXNlIGFycmF5LW5h bWUgImFiYnJldmlhdGlvbnMiIGxpa2UgJmEgb25seSBpbgorICAgY29udGV4dHMgdGhhdCBleHBl Y3QgYXJyYXkgbmFtZXMsIGxpa2UgQVJSQVkgY29tbWFuZHMgb3IgYXJyYXktbmFtZQorICAgZnVu Y3Rpb24gYXJndW1lbnRzIHN1Y2ggYXMgdGhlIHNlY29uZCBhcmd1bWVudCBvZiBcZnNwbGl0KCku IEluIGEgTE9DQUwKKyAgIHN0YXRlbWVudCwgaG93ZXZlciwgeW91IGhhdmUgdG8gd3JpdGUgXCZh W10sIHNpbmNlICJsb2NhbCAmYSIgbWlnaHQKKyAgIHJlZmVyIHRvIGEgbWFjcm8gbmFtZWQgIiZh Ii4KKworICAgSW4gZnVuY3Rpb24gYXJndW1lbnRzLCBob3dldmVyLCB5b3UgTVVTVCB1c2UgdGhl IGFiYnJldmlhdGVkIGZvcm06CisgICBcZnNwbGl0KFwlYSwmYSkgb3IgXGZzcGxpdChcJWEsJmFb XSkuIElmIHlvdSBpbmNsdWRlIHRoZSBiYWNrc2xhc2ggKGFzCisgICBpbiAiXGZzcGxpdChcJWEs XCZhW10pIikgYSBwYXJzZSBlcnJvciBvY2N1cnMuCisKKyAgIEhlcmUgYXJlIHRoZSBuZXcgYXJy YXktcmVsYXRlZCBjb21tYW5kczoKKworICAgSUYgREVDTEFSRUQgYXJyYXluYW1lCisgICAgICAg ICAgQWxsb3dzIGEgc2NyaXB0IHRvIHRlc3Qgd2hldGhlciBhbiBhcnJheSBoYXMgYmVlbiBkZWNs YXJlZC4gVGhlCisgICAgICAgICAgYXJyYXluYW1lIGNhbiBiZSBhIG5vbi1hcnJheSBiYWNrc2xh c2ggdmFyaWFibGUgc3VjaCBhcyBcJTEgb3IKKyAgICAgICAgICBcbShuYW1lKSwgaW4gd2hpY2gg Y2FzZSBpdCBpcyBldmFsdWF0ZWQgZmlyc3QsIGFuZCB0aGUgcmVzdWx0IGlzCisgICAgICAgICAg dHJlYXRlZCBhcyB0aGUgYXJyYXkgbmFtZS4gT3RoZXJ3aXNlLCBhcnJheW5hbWUgaXMgdHJlYXRl ZCBhcyBpbgorICAgICAgICAgIHRoZSBBUlJBWSBjb21tYW5kczogaXQgY2FuIGJlIGEsICZhLCAm YVtdLCBcJmEsIFwmYVtdLCBcJmFbM10sCisgICAgICAgICAgXCZhWzM6OV0sIGV0Yywgd2l0aCB0 aGUgYXBwcm9wcmlhdGUgcmVzdWx0cyBpbiBlYWNoIGNhc2UuCisgICAgICAgICAgU3lub255bTog SUYgRENMLgorCisgICBVTkRFQ0xBUkUgYXJyYXluYW1lCisgICAgICAgICAgVU5ERUNMQVJFIGlz IGEgbmV3IHRvcC1sZXZlbCBjb21tYW5kIHRvIHVuZGVjbGFyZSBhbiBhcnJheS4KKyAgICAgICAg ICBQcmV2aW91c2x5IHRoaXMgY291bGQgb25seSBiZSBkb25lIHdpdGggImRlY2xhcmUgXCZhWzBd IiAoaS5lLgorICAgICAgICAgIHJlLWRlY2xhcmUgdGhlIGFycmF5IHdpdGggYSBkaW1lbnNpb24g b2YgMCkuCisKKyAgIEFSUkFZIExJTksgbGlua25hbWUgYXJyYXluYW1lCisgICAgICAgICAgQ3Jl YXRlcyBhIHN5bWJvbGljIGxpbmsgZnJvbSB0aGUgYXJyYXkgbmFtZWQgYnkgbGlua25hbWUgKHdo aWNoCisgICAgICAgICAgbXVzdCBiZSB0aGUgbmFtZSBvZiBhbiBhcnJheSB0aGF0IGlzIG5vdCB5 ZXQgZGVjbGFyZWQgaW4gdGhlCisgICAgICAgICAgY3VycmVudCBjb250ZXh0KSB0byB0aGUgYXJy YXkgbmFtZWQgYnkgYXJyYXluYW1lICh3aGljaCBtdXN0IHRoZQorICAgICAgICAgIG5hbWUgb2Yg YSBjdXJyZW50bHkgZGVjbGFyZWQgYXJyYXkgdGhhdCBpcyBub3QgaXRzZWxmIGEgbGluaywgb3IK KyAgICAgICAgICBhIHZhcmlhYmxlIGNvbnRhaW5pbmcgdGhlIG5hbWUgb2Ygc3VjaCBhbiBhcnJh eSkuIFRoZSB0d28gbmFtZXMKKyAgICAgICAgICBpbmRpY2F0ZSB0aGUgc2FtZSBhcnJheTogaWYg eW91IGNoYW5nZSBhbiBhcnJheSBlbGVtZW50LCB0aGUKKyAgICAgICAgICBjaGFuZ2UgaXMgcmVm bGVjdGVkIGluIHRoZSBsaW5rIHRvbywgYW5kIHZpY2UgdmVyc2EuIElmIHlvdQorICAgICAgICAg IHVuZGVjbGFyZSB0aGUgbGluaywgdGhlIHJlYWwgYXJyYXkgaXMgdW5hZmZlY3RlZC4gSWYgeW91 CisgICAgICAgICAgdW5kZWNsYXJlIHRoZSByZWFsIGFycmF5LCBhbGwgbGlua3MgdG8gaXQgZGlz YXBwZWFyLiBJZiB5b3UKKyAgICAgICAgICByZXNpemUgYW4gYXJyYXkgKGRpcmVjdGx5IG9yIHRo cm91Z2ggYSBsaW5rKSwgYWxsIGxpbmtzIHRvIGl0CisgICAgICAgICAgYXJlIHVwZGF0ZWQgYXV0 b21hdGljYWxseS4KKworICAgQXJyYXkgbGlua3MgbGV0IHlvdSBwYXNzIGFycmF5IG5hbWVzIGFz IGFyZ3VtZW50cyB0byBtYWNyb3MuIEZvcgorICAgZXhhbXBsZSwgc3VwcG9zZSB5b3UgaGFkIGEg cHJvZ3JhbSB0aGF0IG5lZWRlZCB0byB1cHBlcmNhc2UgYWxsIHRoZQorICAgZWxlbWVudHMgb2Yg ZGlmZmVyZW50IGFycmF5cyBhdCBkaWZmZXJlbnQgdGltZXMuIFlvdSBjb3VsZCB3cml0ZSBhCisg ICBtYWNybyB0byBkbyB0aGlzLCB3aXRoIHRoZSBhcnJheSBuYW1lIGFzIGFuIGFyZ3VtZW50LiBC dXQgd2l0aG91dCBhcnJheQorICAgbGlua3MsIHRoZXJlIHdvdWxkIGJlIG5vIHdheSB0byByZWZl ciB0byB0aGUgYXJndW1lbnQgYXJyYXkgd2l0aGluIHRoZQorICAgbWFjcm8uIEFycmF5IGxpbmtz IG1ha2UgaXQgZWFzeToKKworICBkZWZpbmUgYXJyYXl1cHBlciB7CisgICAgICBsb2NhbCBcJmVb XSBcJWkKKyAgICAgIGFycmF5IGxpbmsgXCZlW10gXCUxCisgICAgICBmb3IgaSAxIFxmZGltKCZl KSAxIHsgLlwmZVtpXSA6PSBcZnVwcGVyKFwmZVtpXSkgfQorICB9CisgIGRlY2xhcmUgXCZhW10g PSB0aGVzZSBhcmUgc29tZSB3b3JkcworICBhcnJheXVwcGVyICZhCisgIHNob3cgYXJyYXkgJmEK KworICAgVGhlIG1hY3JvIGRlY2xhcmVzIHRoZSBhcnJheSBsaW5rIExPQ0FMLCB3aGljaCBtZWFu cyBpdCBkb2Vzbid0CisgICBjb25mbGljdCB3aXRoIGFueSBhcnJheSBvZiB0aGUgc2FtZSBuYW1l IHRoYXQgbWlnaHQgZXhpc3Qgb3V0c2lkZSB0aGUKKyAgIG1hY3JvLCBhbmQgdGhhdCB0aGUgbGlu ayBpcyBkZXN0cm95ZWQgYXV0b21hdGljYWxseSB3aGVuIHRoZSBtYWNybworICAgZXhpdHMuIFRo aXMgd29ya3MsIGJ5IHRoZSB3YXksIGV2ZW4gaWYgdGhlIGxpbmsgbmFtZSBhbmQgdGhlIG1hY3Jv CisgICBhcmd1bWVudCBuYW1lIGFyZSB0aGUgc2FtZSwgYXMgbG9uZyBhcyB0aGUgbGluayBpcyBk ZWNsYXJlZCBMT0NBTC4KKworICAgQXMgbm90ZWQsIHlvdSBjYW4ndCBtYWtlIGEgbGluayB0byBh IG5vbmV4aXN0ZW50IGFycmF5LiBTbyB3aGVuIHdyaXRpbmcKKyAgIGEgbWFjcm8gd2hvc2Ugam9i IGlzIHRvIGNyZWF0ZSBhbiBhcnJheSB3aG9zZSBuYW1lIGlzIHBhc3NlZCBhcyBhbgorICAgYXJn dW1lbnQsIHlvdSBtdXN0IGRlY2xhcmUgdGhlIGFycmF5IGZpcnN0ICh0aGUgc2l6ZSBkb2Vzbid0 IG1hdHRlciBhcworICAgbG9uZyBhcyBpdCdzIGdyZWF0ZXIgdGhhbiAwKS4gRXhhbXBsZToKKwor ICBkZWZpbmUgdHJ5bWUgeyAgICAgICAgICAgICAgICA7IERlbW9uc3RyYXRpb24gbWFjcm8KKyAg ICAgIGxvY2FsIFwmZVtdICAgICAgICAgICAgICAgOyBXZSBvbmx5IG5lZWQgdGhpcyBpbnNpZGUg dGhlIG1hY3JvCisgICAgICBhcnJheSBsaW5rIFwmZVtdIFwlMSAgICAgIDsgTWFrZSBsb2NhbCBs aW5rCisgICAgICBzaGlmdCAgICAgICAgICAgICAgICAgICAgIDsgU2hpZnQgYXJndW1lbnQgbGlz dAorICAgICAgdm9pZCBcZnNwbGl0KFwlKiwmZSkgICAgICA7IFNwbGl0IHJlbWFpbmRlciBvZiBh cmcgbGlzdCBpbnRvIGFycmF5CisgIH0KKyAgZGVjbGFyZSBcJmFbMV0gICAgICAgICAgICAgICAg OyBEZWNsYXJlIHRhcmdldCBhcnJheSBpbiBhZHZhbmNlCisgIHRyeW1lICZhIGhlcmUgYXJlIHNv bWUgd29yZHMgIDsgSW52b2tlIHRoZSBtYWNybyB3aXRoIGFycmF5IG5hbWUgYW5kIHdvcmRzCisg IHNob3cgYXJyYXkgYSAgICAgICAgICAgICAgICAgIDsgU2VlIHRoZSByZXN1bHRzCisKKyAgIE9u ZSBmaW5hbCBpbXByb3ZlbWVudCBhbGxvd3MgdGhlIG1hY3JvIGl0c2VsZiB0byBkZWNsYXJlIHRo ZSBhcnJheQorICAgKHRoaXMgd2FzIG5vdCBwb3NzaWJsZSBpbiBlYXJsaWVyIEtlcm1pdCByZWxl YXNlcyk6IGlmIHRoZSBhcnJheSBuYW1lCisgICBpbiB0aGUgREVDTEFSRSBjb21tYW5kIGlzIGEg dmFyaWFibGUgKGFuZCBub3QgYW4gYXJyYXkgbmFtZSksIG9yCisgICBpbmNsdWRlcyB2YXJpYWJs ZXMsIHRoZSByZXN1bHRpbmcgdmFsdWUgaXMgdXNlZCBhcyB0aGUgYXJyYXkgbmFtZS4gU286CisK KyAgZGVmaW5lIHRyeW1lIHsgICAgICAgICAgICAgICAgOyBEZW1vbnN0cmF0aW9uIG1hY3JvCisg ICAgICBkZWNsYXJlIFwlMVsxXSAgICAgICAgICAgIDsgUHJlbGltaW5hcnkgZGVjbGFyYXRpb24g Zm9yIHRhcmdldCBhcnJheQorICAgICAgbG9jYWwgXCZlW10gICAgICAgICAgICAgICA7IFdlIG9u bHkgbmVlZCB0aGlzIGluc2lkZSB0aGUgbWFjcm8KKyAgICAgIGFycmF5IGxpbmsgXCZlW10gXCUx ICAgICAgOyBNYWtlIGxvY2FsIGxpbmsKKyAgICAgIHNoaWZ0ICAgICAgICAgICAgICAgICAgICAg OyBTaGlmdCBhcmd1bWVudCBsaXN0CisgICAgICB2b2lkIFxmc3BsaXQoXCUqLCZlKSAgICAgIDsg U3BsaXQgcmVtYWluZGVyIG9mIGFyZyBsaXN0IGludG8gYXJyYXkKKyAgfQorICB0cnltZSAmYSBo ZXJlIGFyZSBzb21lIHdvcmRzICA7IEludm9rZSB0aGUgbWFjcm8gd2l0aCBhcnJheSBuYW1lIGFu ZCB3b3JkcworICBzaG93IGFycmF5IGEgICAgICAgICAgICAgICAgICA7IFNlZSB0aGUgcmVzdWx0 cworCisgICBUaGUgU0hPVyBBUlJBWSBjb21tYW5kIG5vdyBpbmRpY2F0ZXMgd2hldGhlciBhbiBh cnJheSBuYW1lIGlzIGEgbGluay4KKworICAgQWxzbyBzZWUgdGhlIGRlc2NyaXB0aW9ucyBvZiBb NDI4XVxmam9pbigpIGFuZCBbNDI5XVxmc3BsaXQoKSwgcGx1cworICAgWzQzMF1TZWN0aW9uIDgu MTAgb24gdGhlIE1JTlBVVCBjb21tYW5kLCB3aGljaCBzaG93cyBob3cgYW4gZW50aXJlCisgICBh cnJheSAob3Igc2VnbWVudCBvZiBpdCkgY2FuIGJlIHVzZWQgYXMgdGhlIE1JTlBVVCB0YXJnZXQg bGlzdC4KKworICAgWyBbNDMxXVRvcCBdIFsgWzQzMl1Db250ZW50cyBdIFsgWzQzM11DLUtlcm1p dCBIb21lIF0gWyBbNDM0XUtlcm1pdAorICAgSG9tZSBdCisKKzguNy4gTmV3IG9yIEltcHJvdmVk IEJ1aWx0LWluIFZhcmlhYmxlcyBhbmQgRnVuY3Rpb25zCisKKyAgIFRoZSBmb2xsb3dpbmcgbmV3 IGJ1aWx0LWluIHZhcmlhYmxlcyBhcmUgYXZhaWxhYmxlOgorCisgIFx2KGJ1aWxkaWQpICAgICAg IEEgZGF0ZSBzdHJpbmcgbGlrZSAiMjAwMDA4MDgiIGluZGljYXRpbmcgd2hlbiBDLUtlcm1pdCB3 YXMgYgordWlsdC4KKyAgXHYoZnRpbWUpICAgICAgICAgQ3VycmVudCB0aW1lLCBzZWNzIHNpbmNl IG1pZG5pZ2h0LCBpbmNsdWRpbmcgZnJhY3Rpb24gb2Ygc2VjCitvbmQuCisgIFx2KGlwcm9tcHQp ICAgICAgIFRoZSBjdXJyZW50IFNFVCBQUk9NUFQgdmFsdWUKKyAgXHYoc2V4cCkgICAgICAgICAg VGhlIG1vc3QgcmVjZW50IFMtRXhwcmVzc2lvbiAoc2VlIFs0MzVdU2VjdGlvbiA5KQorICBcdihz ZGVwdGgpICAgICAgICBUaGUgY3VycmVudCBTLUV4cHJlc3Npb24gaW52b2NhdGlvbiBkZXB0aCAo WzQzNl1TZWN0aW9uIDkpCisgIFx2KHN2YWx1ZSkgICAgICAgIFRoZSB2YWx1ZSBvZiB0aGUgbW9z dCByZWNlbnQgUy1FeHByZXNzaW9uIChbNDM3XVNlY3Rpb24gOSkKKworICBcdihmdHBfY29kZSkg ICAgICBNb3N0IHJlY2VudCBGVFAgcmVzcG9uc2UgY29kZSAoWzQzOF1TZWN0aW9uIDMpCisgIFx2 KGZ0cF9jb25uZWN0ZWQpIEZUUCBjb25uZWN0aW9uIHN0YXR1cyAoWzQzOV1TZWN0aW9uIDMpCisg IFx2KGZ0cF9jcGwpICAgICAgIEZUUCBDb21tYW5kIFByb3RlY3Rpb24gTGV2ZWwgKFs0NDBdU2Vj dGlvbiAzLjIpCisgIFx2KGZ0cF9kcGwpICAgICAgIEZUUCBEYXRhIFByb3RlY3Rpb24gTGV2ZWwg KFs0NDFdU2VjdGlvbiAzLjIpCisgIFx2KGZ0cF9nZXRwdXRyZW1vdGUpIFRoZSBjdXJyZW50IFNF VCBHRVQtUFVULVJFTU9URSBzZXR0aW5nIChbNDQyXVNlY3Rpb24gMy44KQorCisgIFx2KGZ0cF9o b3N0KSAgICAgIE5hbWUgb3IgSVAgYWRkcmVzcyBvZiBGVFAgc2VydmVyIChbNDQzXVNlY3Rpb24g MykKKyAgXHYoZnRwX2xvZ2dlZGluKSAgRlRQIGxvZ2luIHN0YXR1cyAoWzQ0NF1TZWN0aW9uIDMp CisgIFx2KGZ0cF9tZXNzYWdlKSAgIE1vc3QgcmVjZW50IEZUUCByZXNwb25zZSBtZXNzYWdlIChb NDQ1XVNlY3Rpb24gMykKKyAgXHYoZnRwX3NlY3VyaXR5KSAgRlRQIFNlY3VyaXR5IG1ldGhvZCAo WzQ0Nl1TZWN0aW9uIDMuMikKKyAgXHYoZnRwX3NlcnZlcikgICAgT1MgdHlwZSBvZiBGVFAgc2Vy dmVyIChbNDQ3XVNlY3Rpb24gMykKKworICBcdihodHRwX2NvZGUpICAgICAgIE1vc3QgcmVjZW50 IEhUVFAgcmVzcG9uc2UgY29kZQorICBcdihodHRwX2Nvbm5lY3RlZCkgIEhUVFAgY29ubmVjdGlv biBzdGF0dXMKKyAgXHYoaHR0cF9ob3N0KSAgICAgICBOYW1lIG9yIElQIGFkZHJlc3Mgb2YgSFRU UCBzZXJ2ZXIKKyAgXHYoaHR0cF9tZXNzYWdlKSAgICBNb3N0IHJlY2VudCBIVFRQIHJlc3BvbnNl IG1lc3NhZ2UKKyAgXHYoaHR0cF9zZWN1cml0eSkgICBUTFMgY2lwaGVyIHVzZWQgdG8gc2VjdXJl IHRoZSBIVFRQIHNlc3Npb24KKworICBcdihob3VyKSAgICAgICAgICAgIEhvdXIgb2YgdGhlIGRh eSwgMCB0byAyMy4KKyAgXHYodGltZXN0YW1wKSAgICAgICBFcXVpdmFsZW50IHRvICJcdihuZGF0 ZSkgXHYodGltZSkiLgorCisgIFx2KGxvZ19kZWJ1ZykgICAgICAgQ3VycmVudCBkZWJ1ZyBsb2cg ZmlsZSwgaWYgYW55LgorICBcdihsb2dfcGFja2V0KSAgICAgIEN1cnJlbnQgcGFja2V0IGxvZyBm aWxlLCBpZiBhbnkuCisgIFx2KGxvZ19zZXNzaW9uKSAgICAgQ3VycmVudCBzZXNzaW9uIGxvZyBm aWxlLCBpZiBhbnkuCisgIFx2KGxvZ190cmFuc2FjdGlvbikgQ3VycmVudCB0cmFuc2FjdGlvbiBs b2cgZmlsZSwgaWYgYW55LgorICBcdihsb2dfY29ubmVjdGlvbikgIEN1cnJlbnQgY29ubmVjdGlv biBsb2cgZmlsZSwgaWYgYW55LgorCisgICBUaGUgZm9sbG93aW5nIG5ldyBvciBpbXByb3ZlZCBi dWlsdC1pbiBmdW5jdGlvbnMgYXJlIGF2YWlsYWJsZToKKworICBcZmNtZHN0YWNrKCkgICAgICAg ICAgICBBbGxvd3MgcHJvZ3JhbW1hdGljIGFjY2VzcyB0byB0aGUgY29tbWFuZCBzdGFjay4KKyAg XGZjdnRkYXRlKCkgICAgICAgICAgICAgWzQ0OF1TZWN0aW9uIDguMTMsIGZvcm1hdCBvcHRpb25z IGFkZGVkCisgIFxmZGVsdGEyc2VjcygpICAgICAgICAgIFs0NDldU2VjdGlvbiA4LjEzCisgIFxm ZG9zdG91bml4cGF0aChzMSkgICAgIENvbnZlcnRzIGEgRE9TIGZpbGVuYW1lIHRvIFVuaXggZm9y bWF0LgorICBcZnNwbGl0KCkgICAgICAgICAgICAgICBOb3cgYWxsb3dzIGdyb3VwaW5nL25lc3Rp bmcgaW4gc291cmNlIHN0cmluZy4KKyAgXGZ3b3JkKCkgICAgICAgICAgICAgICAgQWxsb3dzIHRo ZSBzYW1lIGdyb3VwaW5nIGFuZCBuZXN0aW5nLgorICBcZmpvaW4oJmEsczEsbjEsbjIpICAgICBD b3BpZXMgYW4gYXJyYXkgaW50byBhIHNpbmdsZSBzdHJpbmcuCisgIFxmc3Vic3RpdHV0ZShzMSxz MixzMykgIFN1YnN0aXR1dGVzIGNoYXJhY3RlcnMgd2l0aGluIGEgc3RyaW5nLgorICBcZnJlcGxh Y2UoKSAgICAgICAgICAgICBIYXMgbmV3IDR0aCAib2NjdXJyZW5jZSIgYXJndW1lbnQuCisgIFxm c2V4cHJlc3Npb24oKSAgICAgICAgIEV2YWx1YXRlcyBhbiBTLUV4cHJlc3Npb24gKGV4cGxhaW5l ZCBpbiBbNDUwXVNlY3Rpb24gOQorKS4KKyAgXGZ0cmltKCksIFxmbHRyaW0oKSAgICAgTm93IHRy aW0gQ1IgYW5kIExGIGJ5IGRlZmF1bHQsIGFzIHdlbGwgYXMgU1AgYW5kIFRhYi4KKyAgXGZ1bml4 dG9kb3NwYXRoKHMxKSAgICAgQ29udmVydHMgYSBVbml4IGZpbGVuYW1lIHRvIERPUyBmb3JtYXQu CisgIFxma2V5d29yZHZhbChzMSxjMSkgICAgIEFzc2lnbnMgdmFsdWVzIHRvIGtleXdvcmRzICht YWNyb3MpIChleHBsYWluZWQgYmVsb3cpLgorCisgICBNb3N0IGZ1bmN0aW9ucyB0aGF0IGhhdmUg IjIiIGluIHRoZWlyIG5hbWVzIHRvIHN0YW5kIGZvciB0aGUgd29yZCAidG8iCisgICBjYW4gbm93 IGFsc28gYmUgd3JpdHRlbiB3aXRoICJ0byIsIGUuZy4gIlxmZGVsdGEyc2VjcygpLCIKKyAgIFxm ZGVsdGF0b3NlY3MoKS4iCisKKyAgIFxmdW50YWJpZnkoc3RyaW5nKQorICAgICAgICAgIChOZXcg dG8gOC4wLjIxMSkgUmVwbGFjZXMgSG9yaXpvbnRhbCBUYWIgY2hhcmFjdGVycyBpbiB0aGUgZ2l2 ZW4KKyAgICAgICAgICBzdHJpbmcgd2l0aCBzcGFjZXMgYmFzZWQgb24gVlQxMDAtbGlrZSB0YWIg c3RvcHMuCisKKyAgIFxmdmVyaWZ5KHMxLHMyLG4pCisgICAgICAgICAgQXMgb2YgdmVyc2lvbiA4 LjAuMjExLCByZXR1cm5zIC0xIGlmIHMyIGlzIGFuIGVtcHR5IHN0cmluZy4KKyAgICAgICAgICBQ cmV2aW91c2x5IGl0IHJldHVybmVkIDAsIG1ha2luZyBcZnZlcmlmeShhYmMsXCVhKSBsb29rIGFz IGlmCisgICAgICAgICAgXCVhIHdhcyBhIHN0cmluZyBjb21wb3NlZCBvZiBhJ3MsIGIncywgYW5k L29yIGMncyB3aGVuIGluIGZhY3QKKyAgICAgICAgICBpdCBjb250YWluZWQgbm90aGluZy4KKwor ICAgXGZjb2RlKHN0cmluZykKKyAgICAgICAgICBBcyBvZiB2ZXJzaW9uIDguMC4yMTEsIHJldHVy bnMgMCBpZiBzdHJpbmcgaXMgZW1wdHkgb3IgbWlzc2luZy4KKyAgICAgICAgICBQcmV2aW91c2x5 IGl0IHJldHVybmVkIHRoZSBlbXB0eSBzdHJpbmcsIHdoaWNoIG1hZGUgaXQgdW5zYWZlIHRvCisg ICAgICAgICAgdXNlIGluIGFyaXRobWV0aWMgb3IgYm9vbGVhbiBleHByZXNzaW9ucy4KKworICAg XHYoaW5zY2FsZSkKKyAgICAgICAgICBOZXcgdG8gdmVyc2lvbiA4LjAuMjExLCBpdHMgdmFsdWUg aXMgdGhlIElOUFVUIFNDQUxFLUZBQ1RPUgorICAgICAgICAgIChbNDUxXVNlY3Rpb24gOC4xMCks IGRlZmF1bHQgMS4wLgorCis4LjcuMS4gVGhlIFxma2V5d29yZHZhbCgpIEZ1bmN0aW9uCisKKyAg IFxma2V5d29yZHZhbChzMSxjMSkgaXMgbmV3IHRvIEMtS2VybWl0IDguMC4gR2l2ZW4gYSBzdHJp bmcgczEgb2YgdGhlCisgICBmb3JtICJuYW1lPXZhbHVlIiwgaXQgY3JlYXRlcyBhIG1hY3JvIHdp dGggdGhlIGdpdmVuIG5hbWUgYW5kIGFzc2lnbnMKKyAgIGl0IHRoZSBnaXZlbiB2YWx1ZS4gSWYg bm8gdmFsdWUgYXBwZWFycyBhZnRlciB0aGUgZXF1YWwgc2lnbiwgYW55CisgICBleGlzdGluZyBt YWNybyBvZiB0aGUgZ2l2ZW4gbmFtZSBpcyB1bmRlZmluZWQuIEJsYW5rcyBhcmUgYXV0b21hdGlj YWxseQorICAgdHJpbW1lZCBmcm9tIGFyb3VuZCB0aGUgbmFtZSBhbmQgdmFsdWUuIFRoZSBvcHRp b25hbCBjMSBwYXJhbWV0ZXIgaXMKKyAgIHRoZSBhc3NpZ25tZW50IG9wZXJhdG9yIGNoYXJhY3Rl ciwgZXF1YWwgc2lnbiAoPSkgYnkgZGVmYXVsdC4gVGhpcworICAgZnVuY3Rpb24gaXMgaGFuZHkg Zm9yIHByb2Nlc3Npbmcga2V5d29yZCBwYXJhbWV0ZXJzIG9yIGFueSBvdGhlciBmb3JtCisgICBv ZiBwYXJhbWV0ZXItdmFsdWUgcGFpci4gU3VwcG9zZSwgZm9yIGV4YW1wbGUsIHlvdSB3YW50IHRv IHdyaXRlIGEKKyAgIG1hY3JvIHRoYXQgYWNjZXB0cyBrZXl3b3JkIHBhcmFtZXRlcnMgcmF0aGVy IHRoYW4gcG9zaXRpb25hbCBvbmVzOgorCisgIGRlZmluZSBNWURJQUwgeworICAgICAgbG9jYWwg XCVpIG1vZGVtIGhhbmd1cCBtZXRob2QgZGV2aWNlIHNwZWVkIG51bWJlcgorICAgICAgZGVmIG51 bWJlciA1NTUxMjM0ICAgICAgICAgIDsgQXNzaWduIGRlZmF1bHQgcGFyYW1ldGVyIHZhbHVlcwor ICAgICAgZGVmIHNwZWVkIDU3NjAwCisgICAgICBkZWYgbW9kZW0gdXNyb2JvdGljcworICAgICAg ZGVmIGhhbmd1cCByczIzMgorICAgICAgZGVmIG1ldGhvZCB0b25lCisgICAgICBkZWYgY291bnRy eSAxCisgICAgICBmb3IgXCVpIDEgXHYoYXJnYyktMSAxIHsgICAgOyBQYXJzZSBhbnkga2V5d29y ZCBwYXJhbWV0ZXJzLi4uCisgICAgICAgICAgaWYgbm90IFxma2V5d29yZHZhbChcJl9bXCVpXSkg ZW5kIDEgQmFkIHBhcmFtZXRlcjogIlwmX1tcJWldIgorICAgICAgfQorICAgICAgc2V0IGRpYWwg Y291bnRyeSBcbShjb3VudHJ5KQorICAgICAgc2V0IG1vZGVtIHR5cGUgXG0obW9kZW0pCisgICAg ICBzZXQgbW9kZW0gaGFuZyBcbShoYW5ndXApCisgICAgICBzZXQgZGlhbCBtZXRob2QgXG0odG9u ZSkKKyAgICAgIHNldCBsaW5lIFxtKGRldmljZSkKKyAgICAgIGlmIGZhaWwgc3RvcCAxCisgICAg ICBzZXQgc3BlZWQgXG0oc3BlZWQpCisgICAgICBpZiBmYWlsIHN0b3AgMQorICAgICAgc2hvdyBj b21tCisgICAgICBzZXQgZGlhbCBkaXNwbGF5IG9uCisgICAgICBkaWFsIFxtKG51bWJlcikKKyAg ICAgIGlmIHN1Y2Nlc3MgY29ubmVjdAorICB9CisKKyAgIEluIHRoaXMgZXhhbXBsZSwgYWxsIHRo ZSBkZWZhdWx0cyBhcmUgc2V0IHVwIGluc2lkZSB0aGUgbWFjcm8sIGFuZAorICAgdGhlcmVmb3Jl IGl0IGNhbiBiZSBpbnZva2VkIHdpdGggbm8gcGFyYW1ldGVycyBhdCBhbGwuIEJ1dCBpZiB5b3Ug d2FudAorICAgdG8gaGF2ZSB0aGUgbWFjcm8gZGlhbCBhIGRpZmZlcmVudCBudW1iZXIsIHlvdSBj YW4gc3VwcGx5IGl0IGFzCisgICBmb2xsb3dzOgorCisgIG15ZGlhbCBudW1iZXI9NzY1NDMyMQor CisgICBZb3UgY2FuIHN1cHBseSBhbnkgbnVtYmVyIG9mIGtleXdvcmQgcGFyYW1ldGVycywgYW5k IHlvdSBjYW4gZ2l2ZSB0aGVtCisgICBpbiBhbnkgb3JkZXI6CisKKyAgbXlkaWFsIG51bWJlcj03 NjU0MzIxIGhhbmd1cD1tb2RlbSBzcGVlZD0xMTUyMDAKKworOC43LjIuIFRoZSBcZnNwbGl0KCks IFxmam9pbigpLCBhbmQgXGZ3b3JkKCkgRnVuY3Rpb25zCisKKyAgIFxmam9pbigmYSxzMSxuMSxu MikgaXMgYWxzbyBuZXc7IGl0IGNyZWF0ZXMgYSBzdHJpbmcgZnJvbSBhbiBhcnJheSAob3IKKyAg IGEgcGllY2Ugb2Ygb25lKS4gJmEgaXMgdGhlIG5hbWUgb2YgdGhlIGFycmF5IChhIHJhbmdlIHNw ZWNpZmllciBjYW4gYmUKKyAgIGluY2x1ZGVkKTsgczEgaXMgYSBjaGFyYWN0ZXIgb3Igc3RyaW5n IHRvIHNlcGFyYXRlIGVhY2ggZWxlbWVudCBpbiB0aGUKKyAgIHJlc3VsdCBzdHJpbmcgKGNhbiBi ZSBvbWl0dGVkLCBpbiB3aGljaCBjYXNlIHRoZSBlbGVtZW50cyBhcmUgbm90CisgICBzZXBhcmF0 ZWQgYXQgYWxsKSwgYW5kIG4xIGlzIGEgZ3JvdXBpbmcgbWFzaywgZXhwbGFpbmVkIGJlbG93LiBJ ZiBzMSBpcworICAgZW1wdHkgb3Igbm90IHNwZWNpZmllZCwgdGhlIGFycmF5IGVsZW1lbnRzIGFy ZSBzZXBhcmF0ZWQgd2l0aCBzcGFjZXMuCisgICBJZiB5b3Ugd2FudCB0aGUgZWxlbWVudHMgY29u Y2F0ZW5hdGVkIHdpdGggbm8gc2VwYXJhdG9yLCBpbmNsdWRlIGEKKyAgIG5vbnplcm8gbjIgYXJn dW1lbnQuIEdpdmVuIHRoZSBhcnJheToKKworICBkZWNsYXJlIFwmYVtdID0gMCAxIDIgMyA0IDUg NiA3IDggOQorCisgICB5b3UgY2FuIGdldCBlZmZlY3RzIGxpa2UgdGhpczoKKworICBcZmpvaW4o JmEpICAgICAgMCAxIDIgMyA0IDUgNiA3IDggOQorICBcZmpvaW4oJmEsOikgICAgMDoxOjI6Mzo0 OjU6Njo3Ojg6OQorICBcZmpvaW4oJmEseyx9KSAgMCwxLDIsMyw0LDUsNiw3LDgsOQorICBcZmpv aW4oJmEsLi4uKSAgMC4uLjEuLi4yLi4uMy4uLjQuLi41Li4uNi4uLjcuLi44Li4uOQorICBcZmpv aW4oJmEsLCwxKSAgMDEyMzQ1Njc4OQorCisgICBcZnNwbGl0KCksIFxmd29yZCgpLCBcZnN0cmlw YigpLCBhbmQgXGZqb2luKCkgYWNjZXB0IGEgImdyb3VwaW5nIG1hc2siCisgICBhcmd1bWVudCwg bjEsIHdoaWNoIGlzIGEgbnVtYmVyIGZyb20gMCB0byA2MywgaW4gd2hpY2g6CisKKyAgIDEgPSAi IiBkb3VibGVxdW90ZXMKKyAgIDIgPSB7fSBicmFjZXMKKyAgIDQgPSAnJyBzaW5nbGVxdW90ZXMK KyAgIDggPSAoKSBwYXJlbnRoZXNlcworICAxNiA9IFtdIHNxdWFyZSBicmFja2V0cworICAzMiA9 IDw+IGFuZ2xlIGJyYWNrZXRzCisKKyAgIFRoZXNlIGNhbiBiZSBPUidkIChhZGRlZCkgdG9nZXRo ZXIgdG8gbWFrZSBhbnkgbnVtYmVyIDAtNjMgKC0xIGlzCisgICB0cmVhdGVkIHRoZSBzYW1lIGFz IDYzLCAwIG1lYW5zIG5vIGdyb3VwaW5nKS4gSWYgYSBiaXQgaXMgb24sIHRoZQorICAgY29ycmVz cG9uZGluZyBraW5kIG9mIGdyb3VwaW5nIGlzIHNlbGVjdGVkLiAoSWYgbW9yZSB0aGFuIDEgYml0 IGlzIHNldAorICAgZm9yIFxmam9pbigpLCBvbmx5IHRoZSBsb3dlc3Qtb3JkZXIgb25lIGlzIHVz ZWQuKQorCisgICBJZiB5b3UgaW5jbHVkZSB0aGUgc2FtZSBjaGFyYWN0ZXIgaW4gdGhlIGdyb3Vw aW5nIG1hc2sgYW5kIHRoZSBpbmNsdWRlCisgICBsaXN0LCB0aGUgZ3JvdXBpbmcgbWFzayB0YWtl cyBwcmVjZWRlbmNlLiBFeGFtcGxlOgorCisgIGRlZiBcJWEgIGEgImIgYyBkIiBlCisgIFxmc3Bs aXQoXCVhLCZhW10sLCwtMSkgID0gMyAgPC0tIGRvdWJsZXF1b3RlIHVzZWQgZm9yIGdyb3VwaW5n CisgIFxmc3BsaXQoXCVhLCZhW10sLCIsLTEpID0gMyAgPC0tIGRvdWJsZXF1b3RlIHN0aWxsIHVz ZWQgZm9yIGdyb3VwaW5nCisKKyAgIE5lc3Rpbmcgb2YgbWF0Y2hlZCBsZWZ0IGFuZCByaWdodCBn cm91cGluZyBjaGFyYWN0ZXJzIChwYXJlbnRoZXNlcywKKyAgIGJyYWNlcywgYW5kIGJyYWNrZXRz LCBidXQgbm90IHF1b3RlcykgaXMgcmVjb2duaXplZC4gRXhhbXBsZToKKworICBkZWYgXCVhIGEg KGIgYyA8ZCBlIFtmIGcge2ggaX0gaiBrXSBsIG0+IG4gbykgcAorICBcZnNwbGl0KFwlYSwmYSws LDApICA9IDE2IChubyBncm91cGluZykKKyAgXGZzcGxpdChcJWEsJmEsLCwyKSAgPSAxNSAoYnJh Y2VzIG9ubHkpCisgIFxmc3BsaXQoXCVhLCZhLCwsMTYpID0gMTEgKHNxdWFyZSBicmFja2V0cyBv bmx5KQorICBcZnNwbGl0KFwlYSwmYSwsLDMyKSA9ICA3IChhbmdsZSBicmFja2V0cyBvbmx5KQor ICBcZnNwbGl0KFwlYSwmYSwsLDYzKSA9ICAzIChhbGwpCisgIFxmc3BsaXQoXCVhLCZhLCwsLTEp ID0gIDMgKGFsbCkKKworICAgXGZzcGxpdCgpIGFuZCBcZmpvaW4oKSBhcmUgInJlY2lwcm9jYWwi IGZ1bmN0aW9ucy4gWW91IGNhbiBzcGxpdCBhCisgICBzdHJpbmcgdXAgaW50byBhbiBhcnJheSBh bmQgam9pbiBpdCBiYWNrIGludG8gYSBuZXcgc3RyaW5nIHRoYXQgaXMKKyAgIGVxdWl2YWxlbnQs IGFzIGxvbmcgYXMgXGZzcGxpdCgpIGFuZCBcZmpvaW4oKSBhcmUgZ2l2ZW4gZXF1aXZhbGVudAor ICAgZ3JvdXBpbmcgbWFza3MsIGV4Y2VwdCB0aGF0IHRoZSB0eXBlIG9mIGJyYWNlcyBtaWdodCBj aGFuZ2UuIEV4YW1wbGU6CisKKyAgZGVmIFwlYSBhIHtiIGMgW2QgZV0gZiBnfSAiaCBpIiBqIDxr IGw+IG0KKyAgZWNobyBTVFJJTkc9W1wlYV0KKyAgZWNobyBXT1JEUz1cZnNwbGl0KFwlYSwmYSws LC0xKQorICBzaG93IGFycmF5IGEKKyAgYXNnIFwlYiBcZmpvaW4oJmEseyB9LDIpCisgIGVjaG8g Sk9JTiAgPVtcJWJdCisgIGVjaG8gV09SRFM9XGZzcGxpdChcJWIsJmIsLCwtMSkKKyAgc2hvdyBh cnJheSBiCisKKyAgIFRoZSBhcnJheXMgYSBhbmQgYiBhcmUgaWRlbnRpY2FsLiBUaGUgc3RyaW5n cyBhIGFuZCBiIGFyZSBhcyBmb2xsb3dzOgorCisgIFwlYTogYSB7YiBjIFtkIGVdIGYgZ30gImgg aSIgaiA8ayBsPiBtCisgIFwlYjogYSB7YiBjIFtkIGVdIGYgZ30ge2ggaX0gaiB7ayBsfSBtCisK KyAgIEl0IGlzIHBvc3NpYmxlIHRvIHF1b3RlIHNlcGFyYXRvciBncm91cGluZyBjaGFyYWN0ZXJz IHdpdGggYmFja3NsYXNoIHRvCisgICBvdmVycmlkZSB0aGVpciBncm91cGluZyBmdW5jdGlvbi4g QW5kIG9mIGNvdXJzZSB0byBpbmNsdWRlIGJhY2tzbGFzaAorICAgaXRzZWxmIGluIHRoZSBzdHJp bmcsIGl0IG11c3QgYmUgcXVvdGVkIHRvby4gRnVydGhlcm1vcmUsIGVhY2gKKyAgIGJhY2tzbGFz aCBtdXN0IGJlIGRvdWJsZWQsIHNvIHRoZSBjb21tYW5kIHBhcnNlciB3aWxsIHN0aWxsIHBhc3Mg b25lCisgICBiYWNrc2xhc2ggdG8gXGZzcGxpdCgpIGZvciBlYWNoIHR3byB0aGF0IGl0IHNlZXMu IEhlcmUgYXJlIHNvbWUKKyAgIGV4YW1wbGVzIHVzaW5nIFxmc3BsaXQoKSB3aXRoIGEgZ3JvdXBp bmcgbWFzayBvZiA4ICh0cmVhdCBwYXJlbnRoZXNlcworICAgYXMgZ3JvdXBpbmcgY2hhcmFjdGVy cykuCisKKyAgU3RyaW5nICAgICAgICAgICAgICAgICAgUmVzdWx0CisgICAgYSBiIGMgZCBlIGYg ICAgICAgICAgICAgNgorICAgIGEgYlxcIGMgZCBlIGYgICAgICAgICAgIDUKKyAgICBhIGIgKGMg ZCBlKSBmICAgICAgICAgICA0CisgICAgYSBiIFxcKGMgZCBlXFwpIGYgICAgICAgNgorICAgIGEg YiBcXFxcKGMgZCBlXFxcXCkgZiAgIDcKKworICAgXGZzcGxpdCgpIGhhcyBhbHNvIGJlZW4gY2hh bmdlZCB0byBjcmVhdGUgaXRzIGFycmF5IChpZiBvbmUgaXMgZ2l2ZW4pCisgICBlYWNoIHRpbWUg aXQgaXMgY2FsbGVkLCBzbyBub3cgaXQgY2FuIGJlIGNvbnZlbmllbnRseSBjYWxsZWQgaW4gYSBs b29wCisgICB3aXRob3V0IGhhdmluZyB0byByZWRlY2xhcmUgdGhlIGFycmF5IGVhY2ggdGltZS4K KworICAgSW5jaWRlbnRhbGx5Li4uIFNvbWV0aW1lcyB5b3UgbWlnaHQgd2FudCB0byBpbnZva2Ug XGZzcGxpdCgpIGluIGEKKyAgIHNpdHVhdGlvbiB3aGVyZSB5b3UgZG9uJ3QgY2FyZSBhYm91dCBp dHMgcmV0dXJuIHZhbHVlLCBlLmcuIHdoZW4geW91CisgICBqdXN0IHdhbnQgdG8gZmlsbCB0aGUg YXJyYXkuIE5vdyB5b3UgY2FuICJjYWxsIiBcZnNwbGl0KCkgb3IgYW55IG90aGVyCisgICBmdW5j dGlvbiB3aXRoIHRoZSBuZXcgWzQ1Ml1WT0lEIGNvbW1hbmQ6CisKKyAgdm9pZCBcZnNwbGl0KFwl YSwmYSkKKworICAgXGZzcGxpdCgpIGFuZCBcZmpvaW4oKSBhbHNvIGFjY2VwdCBhIG5ldywgb3B0 aW9uYWwgNnRoIGFyZ3VtZW50LCBhbgorICAgb3B0aW9ucyBmbGFnLCBhIG51bWJlciB0aGF0IGNh biBzcGVjaWZ5IGEgbnVtYmVyIG9mIG9wdGlvbnMuIFNvIGZhcgorICAgdGhlcmUgaXMganVzdCBv bmUgb3B0aW9uLCB3aG9zZSB2YWx1ZSBpcyAxOgorCisgICBzZXBhcmF0b3ItZmxhZworICAgICAg ICAgIE5vcm1hbGx5IHNlcGFyYXRvcnMgYXJlIGNvbGxhcHNlZC4gU28sIGZvciBleGFtcGxlLAor CisgIFxmd29yZChUaHJlZSAgICAgICAgbGl0dGxlICAgICAgICAgIHdvcmRzLDIpCisKKyAgICAg ICAgICByZXR1cm5zICJsaXR0bGUiICh0aGUgc2Vjb25kIHdvcmQpLiBTcGFjZSBpcyBhIHNlcGFy YXRvciwgYnV0CisgICAgICAgICAgdGhlcmUgYXJlIG11bHRpcGxlIHNwYWNlcyBiZXR3ZWVuIGVh Y2ggd29yZC4gSWYgdGhlIHZhbHVlIDEgaXMKKyAgICAgICAgICBpbmNsdWRlZCBpbiB0aGUgb3B0 aW9uIGZsYWcsIGhvd2V2ZXIsIGVhY2ggc2VwYXJhdG9yIGNvdW50cy4gSWYKKyAgICAgICAgICB0 d28gc2VwYXJhdG9ycyBhcmUgYWRqYWNlbnQsIGFuIGVtcHR5IHdvcmQgaXMgcHJvZHVjZWQgYmV0 d2VlbgorICAgICAgICAgIHRoZW0uIFRoaXMgaXMgdXNlZnVsIGZvciBwYXJzaW5nIChlLmcuKSBj b21tYS1zZXBhcmF0ZWQgbGlzdHMKKyAgICAgICAgICBleHBvcnRlZCBmcm9tIGRhdGFiYXNlcyBv ciBzcHJlYWRzaGVldHMuCisKKzguNy4zLiBUaGUgXGZjbWRzdGFjaygpIEZ1bmN0aW9uCisKKyAg IFRoZSBuZXcgXGZjbWRzdGFjaygpIGZ1bmN0aW9uIGdpdmVzIGFjY2VzcyB0byB0aGUgY29tbWFu ZCBzdGFjazoKKworICAgXGZjbWRzdGFjayhuMSxuMikKKyAgICAgICAgICBBcmd1bWVudHM6IG4x IGlzIHRoZSBjb21tYW5kIHN0YWNrIGxldmVsLiBJZiBvbWl0dGVkLCB0aGUKKyAgICAgICAgICBj dXJyZW50IGxldmVsLCBcdihjbWRsZXZlbCksIGlzIHVzZWQuIG4yIGlzIGEgZnVuY3Rpb24gY29k ZQorICAgICAgICAgIHNwZWNpZnlpbmcgdGhlIGRlc2lyZWQgdHlwZSBvZiBpbmZvcm1hdGlvbjoK KworICAwIChkZWZhdWx0KSA9IG5hbWUgb2Ygb2JqZWN0IGF0IGxldmVsIG4xLgorICAxIChub256 ZXJvKSA9IG9iamVjdCB0eXBlICgwID0gcHJvbXB0OyAxID0gY29tbWFuZCBmaWxlOyAyID0gbWFj cm8pLgorCisgICAgICAgICAgVGhlIGRlZmF1bHQgZm9yIG4yIGlzIDAuCisKKyAgIFRoZSBuYW1l IGFzc29jaWF0ZWQgd2l0aCBwcm9tcHQgaXMgIihwcm9tcHQpIi4gSGVyZSdzIGEgbG9vcCB0aGF0 IGNhbgorICAgYmUgaW5jbHVkZWQgaW4gYSBtYWNybyBvciBjb21tYW5kIGZpbGUgdG8gc2hvdyB0 aGUgc3RhY2sgKHNpbWlsYXIgdG8KKyAgIHdoYXQgdGhlIFNIT1cgU1RBQ0sgY29tbWFuZCBkb2Vz KToKKworICBmb3IgXCVpIFx2KGNtZGxldmVsKSAwIC0xIHsKKyAgICAgIGVjaG8gXCVpLiBbXGZj bWRzdGFjayhcJWksMSldIFxmY21kc3RhY2soXCVpLDApCisgIH0KKworICAgSW4gdGhpcyBjb25u ZWN0aW9uLCBub3RlIHRoYXQgXHYoY21kZmlsZSkgYWx3YXlzIGluZGljYXRlcyB0aGUgbW9zdAor ICAgcmVjZW50bHkgaW52b2tlZCBhY3RpdmUgY29tbWFuZCBmaWxlIChpZiBhbnkpLCBldmVuIGlm IHRoYXQgZmlsZSBpcworICAgZXhlY3V0aW5nIGEgbWFjcm8uIFNpbWlsYXJseSwgXHYobWFjcm8p IGluZGljYXRlcyB0aGUgbW9zdCByZWNlbnRseQorICAgaW52b2tlZCBtYWNybyAoaWYgYW55KSwg ZXZlbiBpZiB0aGUgY3VycmVudCBjb21tYW5kIHNvdXJjZSBpcyBub3QgYQorICAgbWFjcm8uIFRo ZSBuYW1lIG9mIHRoZSAiY2FsbGVyIiBvZiB0aGUgY3VycmVudGx5IGV4ZWN1dGluZyBvYmplY3QK KyAgIChjb21tYW5kIGZpbGUgb3IgbWFjcm8pIGlzOgorCisgIFxmY21kc3RhY2soXHYoY21kbGV2 ZWwpLTEpCisKKyAgIGFuZCBpdHMgdHlwZSBpczoKKworICBcZmNtZHN0YWNrKFx2KGNtZGxldmVs KS0xLDEpCisKKyAgIFRvIGZpbmQgdGhlIG5hbWUgb2YgdGhlIG1hY3JvIHRoYXQgaW52b2tlZCB0 aGUgY3VycmVudGx5IGV4ZWN1dGluZworICAgb2JqZWN0LCBldmVuIGlmIG9uZSBvciBtb3JlIGlu dGVybWVkaWF0ZSBjb21tYW5kIGZpbGVzIChvciBwcm9tcHRpbmcKKyAgIGxldmVscykgYXJlIGlu dm9sdmVkLCB1c2UgYSBsb29wIGxpa2UgdGhpczoKKworICBmb3IgXCVpIFx2KGNtZGxldmVsKS0x IDAgLTEgeworICAgICAgaWYgPSBcZmNtZHN0YWNrKFwlaSwxKSAyIGVjaG8gQ0FMTEVSID0gXGZj bWRzdGFjayhcJWksMCkKKyAgfQorCisgICBPZiBjb3Vyc2UgaWYgeW91IG1ha2UgYSBtYWNybyB0 byBkbyB0aGlzLCB0aGUgbWFjcm8gbXVzdCBhY2NvdW50IGZvcgorICAgaXRzIG93biBhZGRpdGlv bmFsIGxldmVsOgorCisgIGRlZmluZSBDQUxMRVIgeworICAgICAgZm9yIFwlaSBcdihjbWRsZXZl bCktMiAwIC0xIHsKKyAgICAgICAgICBpZiA9IFxmY21kc3RhY2soXCVpLDEpIDIgcmV0dXJuIFxm Y21kc3RhY2soXCVpLDApCisgICAgICB9CisgICAgICByZXR1cm4gIihub25lKSIKKyAgfQorCisg ICBUaGUgYnVpbHQtaW4gdmFyaWFibGUgXHYoY21kc291cmNlKSBnaXZlcyB0aGUgY3VycmVudCBj b21tYW5kIHNvdXJjZSBhcworICAgYSB3b3JkICgicHJvbXB0IiwgImZpbGUiLCBvciAibWFjcm8i KS4KKworOC43LjQuIFRoZSBWT0lEIENvbW1hbmQKKworICAgVk9JRCBpcyBsaWtlIEVDSE8gaW4g dGhhdCBhbGwgZnVuY3Rpb25zIGFuZCB2YXJpYWJsZXMgaW4gaXRzIGFyZ3VtZW50CisgICB0ZXh0 IGFyZSBldmFsdWF0ZWQuIGJ1dCBpdCBkb2Vzbid0IHByaW50IGFueXRoaW5nIChleGNlcHQgcG9z c2libHkgYW4KKyAgIGVycm9yIG1lc3NhZ2UgaWYgYSBmdW5jdGlvbiB3YXMgaW52b2NhdGlvbiBj b250YWluZWQgb3IgcmVzdWx0ZWQgaW4gYW55CisgICBlcnJvcnMpLiBWT0lEIHNldHMgRkFJTFVS RSBpZiBpdCBlbmNvdW50ZXJzIGFueSBlcnJvcnMsIFNVQ0NFU1MKKyAgIG90aGVyd2lzZS4KKwor ICAgWyBbNDUzXVRvcCBdIFsgWzQ1NF1Db250ZW50cyBdIFsgWzQ1NV1DLUtlcm1pdCBIb21lIF0g WyBbNDU2XUtlcm1pdAorICAgSG9tZSBdCisKKzguOC4gVGhlIFJFVFVSTiBhbmQgRU5EIENvbW1h bmRzCisKKyAgIFRoZSBleGVjdXRpb24gb2YgYSBtYWNybyBpcyB0ZXJtaW5hdGVkIGluIGFueSBv ZiB0aGUgZm9sbG93aW5nIHdheXM6CisKKyAgICAgKiBXaXRoIGFuIEVORCBbIG51bWJlciBbIG1l c3NhZ2UgXSBdIGNvbW1hbmQuIElmIGEgbnVtYmVyIGlzIGdpdmVuLAorICAgICAgIHRoZSBtYWNy byBzdWNjZWVkcyBpZiB0aGUgbnVtYmVyIGlzIDAsIGFuZCBmYWlscyBpZiBpdCBpcyBub3QgemVy bzsKKyAgICAgICBpZiBhIG51bWJlciBpcyBub3QgZ2l2ZW4sIHRoZSBtYWNybyBzdWNjZWVkcy4K KyAgICAgKiBXaXRoIGEgU1RPUCBjb21tYW5kLCB3aGljaCB3b3JrcyBqdXN0IGxpa2UgRU5EIGV4 Y2VwdCBpdCBwZWVscyBiYWNrCisgICAgICAgdGhlIGNvbW1hbmQgc3RhY2sgYWxsIHRoZSB3YXkg dG8gdG9wIGxldmVsLgorICAgICAqIFdpdGggYSBSRVRVUk4gWyB0ZXh0IF0gY29tbWFuZCwgaW4g d2hpY2ggY2FzZSB0aGUgbWFjcm8gYWx3YXlzCisgICAgICAgc3VjY2VlZHMuCisgICAgICogQnkg cnVubmluZyBvdXQgb2YgY29tbWFuZHMgdG8gZXhlY3V0ZSwgaW4gd2hpY2ggY2FzZSB0aGUgbWFj cm8KKyAgICAgICBzdWNjZWVkcyBvciBmYWlscyBhY2NvcmRpbmcgdGhlIG1vc3QgcmVjZW50bHkg ZXhlY3V0ZWQgY29tbWFuZCB0aGF0CisgICAgICAgc2V0cyBzdWNjZXNzIG9yIGZhaWx1cmUuCisK KyAgIFRoZSBzYW1lIGNvbnNpZGVyYXRpb25zIGFwcGx5IHRvIGNvbW1hbmQgZmlsZXMgaW52b2tl ZCBieSB0aGUgVEFLRQorICAgY29tbWFuZC4KKworICAgSWYgYSBtYWNybyBkb2VzIG5vdCBleGVj dXRlIGFueSBjb21tYW5kcyB0aGF0IHNldCBzdWNjZXNzIG9yIGZhaWx1cmUsCisgICB0aGVuIGlu dm9raW5nIHRoZSBtYWNybyBkb2VzIG5vdCBjaGFuZ2UgdGhlIGN1cnJlbnQgU1VDQ0VTUy9GQUlM VVJFCisgICBzdGF0dXMuIEl0IGZvbGxvd3MsIHRoZW4sIHRoYXQgdGhlIG1lcmUgaW52b2NhdGlv biBvZiBhIG1hY3JvIGRvZXMgbm90CisgICBjaGFuZ2UgdGhlIFNVQ0NFU1MvRkFJTFVSRSBzdGF0 dXMgZWl0aGVyLiBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRvCisgICB3cml0ZSBtYWNyb3MgdG8g cmVhY3QgdG8gdGhlIHN0YXR1cyBvZiBvdGhlciBjb21tYW5kcyAob3IgbWFjcm9zKSwgZm9yCisg ICBleGFtcGxlOgorCisgIGRlZmluZSBDSEtMSU5FIHsKKyAgICAgIGlmIHN1Y2Nlc3MgZW5kIDAK KyAgICAgIHN0b3AgMSBTRVQgTElORSBmYWlsZWQgLSBwbGVhc2UgdHJ5IGFub3RoZXIgZGV2aWNl LgorICB9CisgIHNldCBtb2RlbSB0eXBlIHVzcm9ib3RpY3MKKyAgc2V0IGxpbmUgL2Rldi9jdWEw CisgIGNoa2xpbmUKKyAgc2V0IHNwZWVkIDU3NjAwCisgIGRpYWwgNzY1NDMyMQorCisgICBCeSB0 aGUgd2F5LCBub25lIG9mIHRoaXMgaXMgbmV3cy4gQnV0IGl0IHdhcyBub3QgZXhwbGljaXRseSBk b2N1bWVudGVkCisgICBiZWZvcmUsIGFuZCBDLUtlcm1pdCA3LjAgYW5kIGVhcmxpZXIgZGlkIG5v dCBhbHdheXMgaGFuZGxlIHRoZSBSRVRVUk4KKyAgIHN0YXRlbWVudCBhcyBpdCBzaG91bGQgaGF2 ZS4KKworICAgWyBbNDU3XVRvcCBdIFsgWzQ1OF1Db250ZW50cyBdIFsgWzQ1OV1DLUtlcm1pdCBI b21lIF0gWyBbNDYwXUtlcm1pdAorICAgSG9tZSBdCisKKzguOS4gVU5ERUZJTmluZyBHcm91cHMg b2YgVmFyaWFibGVzCisKKyAgIFRoZSBVTkRFRklORSBjb21tYW5kLCB3aGljaCBwcmV2aW91c2x5 IGFjY2VwdGVkIG9uZSB2YXJpYWJsZSBuYW1lLCBub3cKKyAgIGFjY2VwdHMgYSBsaXN0IG9mIHRo ZW0sIGFuZCBhbHNvIGFjY2VwdHMgd2lsZGNhcmQgbm90YXRpb24gdG8gYWxsb3cKKyAgIGRlbGV0 aW9uIG9mIHZhcmlhYmxlcyB0aGF0IG1hdGNoIGEgZ2l2ZW4gcGF0dGVybi4KKworICAgVU5ERUZJ TkUgWyBzd2l0Y2hlcyBdIG5hbWUgWyBuYW1lIFsgbmFtZSBbIC4uLiBdIF0gXQorICAgICAgICAg IFVuZGVmaW5lcyB0aGUgdmFyaWFibGVzIHdob3NlIG5hbWVzIGFyZSBnaXZlbi4gVXAgdG8gNjQg bmFtZXMKKyAgICAgICAgICBtYXkgYmUgZ2l2ZW4gaW4gb25lIFVOREVGSU5FIGNvbW1hbmQuCisK KyAgIElmIHlvdSBvbWl0IHRoZSBzd2l0Y2hlcyBhbmQgaW5jbHVkZSBvbmx5IG9uZSBuYW1lLCB0 aGUgVU5ERUZJTkUKKyAgIGNvbW1hbmQgd29ya3MgYXMgYmVmb3JlLgorCisgICBTd2l0Y2hlcyBp bmNsdWRlOgorCisgICAvTUFUQ0hJTkcKKyAgICAgICAgICBTcGVjaWZpZXMgdGhhdCB0aGUgbmFt ZXMgZ2l2ZW4gYXJlIHRvIHRyZWF0ZWQgYXMgcGF0dGVybnMgcmF0aGVyCisgICAgICAgICAgdGhh biBsaXRlcmFsIHZhcmlhYmxlIG5hbWVzLiBOb3RlOiBwYXR0ZXJuIG1hdGNoaW5nIGNhbid0IGJl CisgICAgICAgICAgdXNlZCB3aXRoIGFycmF5IHJlZmVyZW5jZXM7IHVzZSB0aGUgQVJSQVkgY29t bWFuZCB0byBtYW5pcHVsYXRlCisgICAgICAgICAgYXJyYXlzIGFuZCBzdWJhcnJheXMuCisKKyAg IC9MSVNUCisgICAgICAgICAgTGlzdCB0aGUgbmFtZSBvZiBlYWNoIHZhcmlhYmxlIHRvIGJlIHVu ZGVmaW5lZCwgYW5kIHdoZXRoZXIgaXQKKyAgICAgICAgICB3YXMgdW5kZWZpbmVkIHN1Y2Nlc3Nm dWxseSAoIm9rIiBvciAiZXJyb3IiKSwgcGx1cyBhIHN1bW1hcnkKKyAgICAgICAgICBjb3VudCBh dCB0aGUgZW5kLgorCisgICAvU0lNVUxBVEUKKyAgICAgICAgICBMaXN0IHRoZSBuYW1lcyBvZiB0 aGUgdmFyaWFibGVzIHRoYXQgd291bGQgYmUgZGVsZXRlZCB3aXRob3V0CisgICAgICAgICAgYWN0 dWFsbHkgZGVsZXRpbmcgdGhlbS4gSW1wbGllcyAvTElTVC4KKworICAgVGhlIFVOREVGSU5FIGNv bW1hbmQgZmFpbHMgaWYgdGhlcmUgd2VyZSBhbnkgZXJyb3JzIGFuZCBzdWNjZWVkcworICAgb3Ro ZXJ3aXNlLgorCisgICBUaGUgbmV3IF9VTkRFRklORSBjb21tYW5kIGlzIGxpa2UgVU5ERUZJTkUs IGV4Y2VwdCB0aGUgbmFtZXMgYXJlCisgICBhc3N1bWVkIHRvIGJlIHZhcmlhYmxlIG5hbWVzIHRo ZW1zZWx2ZXMsIHdoaWNoIGNvbnRhaW4gdGhlIG5hbWVzIChvcgorICAgcGFydHMgb2YgdGhlbSkg b2YgdGhlIHZhcmlhYmxlcyB0byBiZSB1bmRlZmluZWQuIEZvciBleGFtcGxlLCBpZiB5b3UKKyAg IGhhdmUgdGhlIGZvbGxvd2luZyBkZWZpbml0aW9uczoKKworICBkZWZpbmUgXCVhIGZvbworICBk ZWZpbmUgZm9vIFRoaXMgaXMgc29tZSB0ZXh0CisKKyAgIHRoZW46CisKKyAgdW5kZWYgXCVhCisK KyAgIHVuZGVmaW5lcyB0aGUgdmFyaWFibGUgXCVhLCBidXQ6CisKKyAgX3VuZGVmIFwlYQorCisg ICB1bmRlZmluZXMgdGhlIG1hY3JvIGZvby4KKworICAgTm9ybWFsIEtlcm1pdCBwYXR0ZXJucyBh cmUgdXNlZCBmb3IgbWF0Y2hpbmc7IG1ldGFjaGFyYWN0ZXJzIGluY2x1ZGUKKyAgIGFzdGVyaXNr LCBxdWVzdGlvbiBtYXJrLCBicmFjZXMsIGFuZCBzcXVhcmUgYnJhY2tldHMuIFRodXMsIHdoZW4g dXNpbmcKKyAgIHRoZSAvTUFUQ0hJTkcgc3dpdGNoLCBpZiB0aGUgbmFtZXMgb2YgdGhlIG1hY3Jv cyB5b3Ugd2FudCB0byB1bmRlZmluZQorICAgY29udGFpbiBhbnkgb2YgdGhlc2UgY2hhcmFjdGVy cywgeW91IG11c3QgcXVvdGUgdGhlbSB3aXRoIGJhY2tzbGFzaCB0bworICAgZm9yY2UgdGhlbSB0 byBiZSB0YWtlbiBsaXRlcmFsbHkuIEFsc28gbm90ZSB0aGF0IFwlKiBpcyBub3QgdGhlIG5hbWUg b2YKKyAgIGEgdmFyaWFibGU7IGl0IGlzIGEgc3BlY2lhbCBub3RhdGlvbiB1c2VkIHdpdGhpbiBh IG1hY3JvIGZvciAiYWxsIG15CisgICBhcmd1bWVudHMiLiBUaGUgY29tbWFuZCAidW5kZWYgL21h dGNoIFwlKiIgZGVsZXRlcyBhbGwgXCV4IHZhcmlhYmxlcywKKyAgIHdoZXJlIHggaXMgMC4uOSBh bmQgYS4uei4gVXNlICJ1bmRlZiAvbWF0Y2ggXCVbMC05XSIgdG8gZGVsZXRlIG1hY3JvCisgICBh cmd1bWVudCB2YXJpYWJsZXMgb3IgInVuZGVmIC9tYXRjaCBcJVtpLW5dIiB0byBkZWxldGUgYSBy YW5nZSBvZiBcJXgKKyAgIHZhcmlhYmxlcy4KKworICAgWyBbNDYxXVRvcCBdIFsgWzQ2Ml1Db250 ZW50cyBdIFsgWzQ2M11DLUtlcm1pdCBIb21lIF0gWyBbNDY0XUtlcm1pdAorICAgSG9tZSBdCisK KzguMTAuIFRoZSBJTlBVVCBhbmQgTUlOUFVUIENvbW1hbmRzCisKKyAgIEFzIG9mIEMtS2VybWl0 IDguMC4yMTEsIHRoZSBJTlBVVCBhbmQgTUlOUFVUIGNvbW1hbmRzIGFjY2VwdCBhIHN3aXRjaDoK KworICAgW01dSU5QVVQgL05PTUFUQ0ggdGltZW91dAorICAgICAgICAgIFRoZSAvTk9NQVRDSCBz d2l0Y2ggYWxsb3dzIElOUFVUIG9yIE1JTlBVVCB0byByZWFkIGluY29taW5nCisgICAgICAgICAg bWF0ZXJpYWwgZm9yIHRoZSBzcGVjaWZpZWQgYW1vdW50IG9mIHRpbWUsIHdpdGhvdXQgYXR0ZW1w dGluZyB0bworICAgICAgICAgIG1hdGNoIGl0IHdpdGggYW55IHRleHQgb3IgcGF0dGVybnMuIFdo ZW4gdGhpcyBzd2l0Y2ggaXMKKyAgICAgICAgICBpbmNsdWRlZCwgdGhlIFtNXUlOUFVUIGNvbW1h bmQgc3VjY2VlZHMgd2hlbiB0aGUgdGltZW91dAorICAgICAgICAgIGludGVydmFsIGV4cGlyZXMs IHdpdGggXHYoaW5zdGF0dXMpIHNldCB0byAxLCBtZWFuaW5nICJ0aW1lZAorICAgICAgICAgIG91 dCIsIG9yIGZhaWxzIHVwb24gaW50ZXJydXB0aW9uIG9yIGkvbyBlcnJvci4KKworICAgQWxzbyBp biB2ZXJzaW9uIDguMC4yMTEsIHRoZXJlIGlzIGEgbmV3IHdheSB0byBhcHBseSBhIHNjYWxlIGZh Y3RvciB0bworICAgW01dSU5QVVQgdGltZW91dHM6CisKKyAgIFNFVCBJTlBVVCBTQ0FMRS1GQUNU T1IgZmxvYXRpbmctcG9pbnQtbnVtYmVyCisgICAgICAgICAgVGhpcyBzY2FsZXMgYWxsIFtNXUlO UFVUIHRpbWVvdXRzIGJ5IHRoZSBnaXZlbiBmYWN0b3IsIGFsbG93aW5nCisgICAgICAgICAgdGlt ZS1zZW5zaXRpdmUgc2NyaXB0cyB0byBiZSBhZGp1c3RlZCB0byBjaGFuZ2luZyBjb25kaXRpb25z CisgICAgICAgICAgc3VjaCBhcyBjb25nZXN0ZWQgbmV0d29ya3Mgb3IgZGlmZmVyZW50LXNwZWVk IG1vZGVtcyB3aXRob3V0CisgICAgICAgICAgaGF2aW5nIHRvIGNoYW5nZSBlYWNoIElOUFVULWNs YXNzIGNvbW1hbmQuIFRoaXMgYWZmZWN0cyBvbmx5CisgICAgICAgICAgdGhvc2UgdGltZW91dHMg dGhhdCBhcmUgZ2l2ZW4gaW4gc2Vjb25kcywgbm90IGFzIHdhbGwtY2xvY2sKKyAgICAgICAgICB0 aW1lcy4gQWx0aG91Z2ggdGhlIHNjYWxlIGZhY3RvciBjYW4gaGF2ZSBhIGZyYWN0aW9uYWwgcGFy dCwgdGhlCisgICAgICAgICAgSU5QVVQgdGltZW91dCBpcyBzdGlsbCBhbiBpbnRlZ2VyLiBUaGUg bmV3IGJ1aWx0LWluIHZhcmlhYmxlCisgICAgICAgICAgXHYoaW5zY2FsZSkgdGVsbHMgdGhlIGN1 cnJlbnQgSU5QVVQgU0NBTEUtRkFDVE9SLgorCisgICBUaGUgTUlOUFVUIGNvbW1hbmQgY2FuIGJl IHVzZWQgdG8gc2VhcmNoIHRoZSBpbmNvbWluZyBkYXRhIHN0cmVhbSBmb3IKKyAgIHNldmVyYWwg dGFyZ2V0cyBzaW11bHRhbmVvdXNseS4gRm9yIGV4YW1wbGU6CisKKyAgTUlOUFVUIDggb25lIHR3 byB0aHJlZQorCisgICB3YWl0cyB1cCB0byA4IHNlY29uZHMgZm9yIG9uZSBvZiB0aGUgd29yZHMg Im9uZSIsICJ0d28iLCBvciAidGhyZWUiIHRvCisgICBhcnJpdmUuIFdvcmRzIGNhbiBiZSBncm91 cGVkIHRvIGluZGljYXRlIHRhcmdldHMgdGhhdCBjb250YWluIHNwYWNlczoKKworICBNSU5QVVQg OCBuaW5ldGVlbiB0d2VudHkgInR3ZW50eSBvbmUiCisKKyAgIEFuZCBvZiBjb3Vyc2UgeW91IGNh biBhbHNvIHVzZSB2YXJpYWJsZXMgaW4gcGxhY2Ugb2YgKG9yIGFzIHBhcnQgb2YpCisgICB0aGUg dGFyZ2V0IG5hbWVzOgorCisgIE1JTlBVVCA4IFwlYSBcJnhbM10gXG0oZm9vKQorCisgICBVbnRp bCBub3cgeW91IGhhZCB0byBrbm93IHRoZSBudW1iZXIgb2YgdGFyZ2V0cyBpbiBhZHZhbmNlIHdo ZW4gd3JpdGluZworICAgdGhlIE1JTlBVVCBzdGF0ZW1lbnQuIEVhY2ggb2YgdGhlIGV4YW1wbGVz IGFib3ZlIGhhcyBleGFjdGx5IHRocmVlCisgICB0YXJnZXRzLgorCisgICBCdXQgc3VwcG9zZSB5 b3VyIHNjcmlwdCBuZWVkcyB0byBsb29rIGZvciBhIHZhcmlhYmxlIG51bWJlciBvZiB0YXJnZXRz LgorICAgRm9yIHRoaXMgeW91IGNhbiB1c2UgYXJyYXlzIGFuZCBcZmpvaW4oKSwgZGVzY3JpYmVk IGluIFs0NjVdU2VjdGlvbgorICAgOC43LiBBbnkgbnVtYmVyIG9mIFxmam9pbigpIGludm9jYXRp b25zIGNhbiBiZSBpbmNsdWRlZCBpbiB0aGUgTUlOUFVUCisgICB0YXJnZXQgbGlzdCwgYW5kIGVh Y2ggb25lIGlzIGV4cGFuZGVkIGludG8gdGhlIGFwcHJvcHJpYXRlIG51bWJlciBvZgorICAgc2Vw YXJhdGUgdGFyZ2V0cyBlYWNoIHRpbWUgdGhlIE1JTlBVVCBjb21tYW5kIGlzIGV4ZWN1dGVkLiBF eGFtcGxlOgorCisgIGRlY2xhcmUgXCZhWzEwXSA9IG9uZSB0d28gdGhyZWUKKyAgbWlucHV0IDEw IGZvbyBcZmpvaW4oJmEpIGJhcgorCisgICBUaGlzIGRlY2xhcmVzIGFuIGFycmF5IG9mIHRlbiBl bGVtZW50cywgYW5kIGFzc2lnbnMgdmFsdWVzIHRvIHRoZSBmaXJzdAorICAgdGhyZWUgb2YgdGhl bS4gVGhlIE1JTlBVVCBjb21tYW5kIGxvb2tzIGZvciB0aGVzZSB0aHJlZSAoYXMgd2VsbCBhcyB0 aGUKKyAgIHdvcmRzICJmb28iIGFuZCAiYmFyIikuIExhdGVyLCBpZiB5b3UgYXNzaWduIGFkZGl0 aW9uYWwgZWxlbWVudHMgdG8gdGhlCisgICBhcnJheSwgdGhlIHNhbWUgTUlOUFVUIGNvbW1hbmQg YWxzbyBsb29rcyBmb3IgdGhlIG5ldyBlbGVtZW50cy4KKworICAgSWYgYW4gYXJyYXkgZWxlbWVu dCBjb250YWlucyBzcGFjZXMsIGVhY2ggd29yZCBiZWNvbWVzIGEgc2VwYXJhdGUKKyAgIHRhcmdl dC4gVG8gY3JlYXRlIG9uZSB0YXJnZXQgcGVyIGFycmF5IGVsZW1lbnQsIHVzZSBcZmpvaW4oKSdz IGdyb3VwaW5nCisgICBmZWF0dXJlOgorCisgIGRjbCBcJmFbXSA9IHthYWEgYmJifSB7Y2NjIGRk ZH0ge3h4eCB5eXkgenp6fQorCisgIG1pbnB1dCAxMCBcZmpvaW4oJmEpICAgICA8LS0gNyB0YXJn ZXRzCisgIG1pbnB1dCAxMCBcZmpvaW4oJmEsLDIpICA8LS0gMyB0YXJnZXRzCisKKyAgIFsgWzQ2 Nl1Ub3AgXSBbIFs0NjddQ29udGVudHMgXSBbIFs0NjhdQy1LZXJtaXQgSG9tZSBdIFsgWzQ2OV1L ZXJtaXQKKyAgIEhvbWUgXQorCis4LjExLiBMZWFybmVkIFNjcmlwdHMKKworICAgQy1LZXJtaXQg bm93IGluY2x1ZGVzIGEgc2ltcGxlIHNjcmlwdCByZWNvcmRlciB0aGF0IG1vbml0b3JzIHlvdXIK KyAgIGNvbW1hbmRzLCBwbHVzIHlvdXIgYWN0aW9ucyBkdXJpbmcgQ09OTkVDVCBtb2RlLCBhbmQg YXV0b21hdGljYWxseQorICAgZ2VuZXJhdGVzIGEgc2NyaXB0IHByb2dyYW0gdGhhdCBtaW1pY3Mg d2hhdCBpdCBvYnNlcnZlZC4gWW91IHNob3VsZAorICAgdGhpbmsgb2YgdGhpcyBmZWF0dXJlIGFz IGEgc2NyaXB0LXdyaXRpbmcgQVNTSVNUQU5UIHNpbmNlLCBhcyB5b3Ugd2lsbAorICAgc2VlIFs0 NzBdbGF0ZXIgaW4gdGhpcyBzZWN0aW9uLCB0aGUgcmVzdWx0IGdlbmVyYWxseSBuZWVkcyBzb21l IGVkaXRpbmcKKyAgIHRvIG1ha2UgaXQgYm90aCBzZWN1cmUgYW5kIGZsZXhpYmxlLiBUaGUgc2Ny aXB0IHJlY29yZGVyIGlzIGNvbnRyb2xsZWQKKyAgIGJ5IHRoZSBuZXcgTEVBUk4gY29tbWFuZDoK KworICAgTEVBUk4gWyAvT04gL09GRiAvQ0xPU0UgXSBbIGZpbGVuYW1lIF0KKyAgICAgICAgICBJ ZiB5b3UgZ2l2ZSBhIGZpbGVuYW1lLCB0aGUgZmlsZSBpcyBvcGVuZWQgZm9yIHN1YnNlcXVlbnQK KyAgICAgICAgICByZWNvcmRpbmcuIFRoZSAvT04gc3dpdGNoIGVuYWJsZXMgcmVjb3JkaW5nIHRv IHRoZSBjdXJyZW50IGZpbGUKKyAgICAgICAgICAoaWYgYW55KTsgL09GRiBkaXNhYmxlcyByZWNv cmRpbmcuIC9DTE9TRSBjbG9zZXMgdGhlIGN1cnJlbnQKKyAgICAgICAgICBzY3JpcHQgcmVjb3Jk aW5nIGZpbGUgKGlmIGFueSkuIElmIHlvdSBnaXZlIGEgZmlsZW5hbWUgd2l0aG91dAorICAgICAg ICAgIGFueSBzd2l0Y2hlcywgL09OIGlzIGFzc3VtZWQuCisKKyAgIFRoZSAvT0ZGIGFuZCAvT04g c3dpdGNoZXMgbGV0IHlvdSB0dXJuIHJlY29yZGluZyBvZmYgYW5kIG9uIGR1cmluZyBhCisgICBz ZXNzaW9uIHdpdGhvdXQgY2xvc2luZyB0aGUgZmlsZS4KKworICAgV2hlbiByZWNvcmRpbmc6CisK KyAgICAgKiBBbGwgY29tbWFuZHMgdGhhdCB5b3UgdHlwZSAob3IgcmVjYWxsKSBhdCB0aGUgcHJv bXB0IGFyZSByZWNvcmRlZAorICAgICAgIGluIHRoZSBmaWxlIGV4Y2VwdDoKKyAgICAgICAgICAr IExFQVJOIGNvbW1hbmRzIGFyZSBub3QgcmVjb3JkZWQuCisgICAgICAgICAgKyBUaGUgQ09OTkVD VCBjb21tYW5kIGlzIG5vdCByZWNvcmRlZC4KKyAgICAgICAgICArIFRoZSBURUxORVQgY29tbWFu ZCBpcyBjb252ZXJ0ZWQgdG8gU0VUIEhPU1QgL05FVFdPUks6VENQLgorICAgICAqIENvbW1hbmRz IG9idGFpbmVkIGZyb20gbWFjcm9zIG9yIGNvbW1hbmQgZmlsZXMgYXJlIG5vdCByZWNvcmRlZC4K KyAgICAgKiBEdXJpbmcgQ09OTkVDVDoKKyAgICAgICAgICArIEV2ZXJ5IGxpbmUgeW91IHR5cGUg aXMgY29udmVydGVkIHRvIGFuIE9VVFBVVCBjb21tYW5kLgorICAgICAgICAgICsgVGhlIGxhc3Qg cHJvbXB0IGJlZm9yZSBhbnkgbGluZSB5b3UgdHlwZSBiZWNvbWVzIGFuIElOUFVUCisgICAgICAg ICAgICBjb21tYW5kLgorICAgICAgICAgICsgVGltZW91dHMgYXJlIGNhbGN1bGF0ZWQgYXV0b21h dGljYWxseSBmb3IgZWFjaCBJTlBVVCBjb21tYW5kLgorICAgICAgICAgICsgQSBQQVVTRSBjb21t YW5kIGlzIGluc2VydGVkIGJlZm9yZSBlYWNoIE9VVFBVVCBjb21tYW5kIGp1c3QgdG8KKyAgICAg ICAgICAgIGJlIHNhZmUuCisKKyAgIFRodXMgdGhlIHNjcmlwdCByZWNvcmRlciBpcyBpbmhlcmVu dGx5IGxpbmUtb3JpZW50ZWQuIEl0IGNhbid0IGJlIHVzZWQKKyAgIHRvIHNjcmlwdCBjaGFyYWN0 ZXItb3JpZW50ZWQgaW50ZXJhY3Rpb25zIGxpa2UgdHlwaW5nIFNwYWNlIHRvIGEKKyAgICJNb3Jl PyIgcHJvbXB0IG9yIGVkaXRpbmcgYSB0ZXh0IGZpbGUgd2l0aCBWSSBvciBFTUFDUy4KKworICAg QnV0IGl0IGhhcyBhZHZhbnRhZ2VzIHRvbzsgZm9yIGV4YW1wbGUgaXQgdGFrZXMgY29udHJvbCBj aGFyYWN0ZXJzIGludG8KKyAgIGFjY291bnQgdGhhdCBtaWdodCBub3QgYmUgdmlzaWJsZSB0byB5 b3Ugb3RoZXJ3aXNlLCBhbmQgaXQKKyAgIGF1dG9tYXRpY2FsbHkgY29udmVydHMgY29udHJvbCBj aGFyYWN0ZXJzIGluIGJvdGggdGhlIGlucHV0IGFuZCBvdXRwdXQKKyAgIHN0cmVhbXMgdG8gdGhl IGFwcHJvcHJpYXRlIG5vdGF0aW9uLiBJdCBjYW4gdGVsbCwgZm9yIGV4YW1wbGUgdGhhdCB0aGUK KyAgICIkICIgcHJvbXB0IG9uIHRoZSBsZWZ0IG1hcmdpbiBpbiBVTklYIGlzIHJlYWxseSB7XHsx M31cezEwfSQgfSwKKyAgIHdoZXJlYXMgaW4gVk1TIGl0IG1pZ2h0IGJlIHtcezEzfVx7MTB9XHsx M30kIH0uIFRoZXNlIHNlcXVlbmNlcyBhcmUKKyAgIGRldGVjdGVkIGFuZCByZWNvcmRlZCBhdXRv bWF0aWNhbGx5LgorCisgICBBIGxlYXJuZWQgc2NyaXB0IHNob3VsZCBleGVjdXRlIGNvcnJlY3Rs eSB3aGVuIHlvdSBnaXZlIGEgVEFLRSBjb21tYW5kCisgICBmb3IgaXQuIEhvd2V2ZXIsIGl0IGlz IHVzdWFsbHkgYXBwcm9wcmlhdGUgdG8gZWRpdCB0aGUgc2NyaXB0IGEgYml0LgorICAgVGhlIG1v c3QgaW1wb3J0YW50IGNoYW5nZSB3b3VsZCBiZSB0byByZW1vdmUgYW55IHBhc3N3b3JkcyBmcm9t IGl0LiBGb3IKKyAgIGV4YW1wbGUsIGlmIHRoZSBzY3JpcHQgY29udGFpbnM6CisKKyAgSU5QVVQg OSB7XHsxM31cezEwfVBhc3N3b3JkOiB9CisgIElGIEZBSUwgU1RPUCAxIElOUFVUIHRpbWVvdXQK KyAgUEFVU0UgMQorICBPVVRQVVQgYmlnc2VjcmV0XHsxM30KKworICAgeW91IHNob3VsZCByZXBs YWNlIHRoaXMgYnkgc29tZXRoaW5nIGxpa2U6CisKKyAgSU5QVVQgOSB7XHsxM31cezEwfVBhc3N3 b3JkOiB9CisgIElGIEZBSUwgU1RPUCAxIElOUFVUIHRpbWVvdXQKKyAgQVNLUSBwc3dkIFBsZWFz ZSB0eXBlIHlvdXIgcGFzc3dvcmQ6CisgIFBBVVNFIDEKKyAgT1VUUFVUIFxtKHBzd2QpXHsxM30K KworICAgVGhlIExFQVJOIGNvbW1hbmQgY2FuJ3QgZG8gdGhpcyBmb3IgeW91IHNpbmNlIGl0IGtu b3dzIG5vdGhpbmcgYWJvdXQKKyAgICJjb250ZW50IjsgaXQgb25seSBrbm93cyBhYm91dCBsaW5l cyBhbmQgY2FuJ3QgYmUgZXhwZWN0ZWQgdG8gcGFyc2Ugb3IKKyAgIHVuZGVyc3RhbmQgdGhlbSAt LSBhZnRlciBhbGwsIHRoZSBQYXNzd29yZCBwcm9tcHQgbWlnaHQgYmUgaW4gc29tZQorICAgb3Ro ZXIgbGFuZ3VhZ2UuIFNvIHJlbWVtYmVyOiBpZiB5b3UgdXNlIHRoZSBMRUFSTiBjb21tYW5kIHRv IHJlY29yZCBhCisgICBsb2dpbiBzY3JpcHQsIGJlIHN1cmUgZWRpdCB0aGUgcmVzdWx0aW5nIGZp bGUgdG8gcmVtb3ZlIGFueSBwYXNzd29yZHMuCisgICBBbHNvIGJlIHN1cmUgdG8gZGVsZXRlIGFu eSBiYWNrdXAgY29waWVzIHlvdXIgZWRpdG9yIG9yIE9TIG1pZ2h0IGhhdmUKKyAgIG1hZGUgb2Yg dGhlIGZpbGUuCisKKyAgIE90aGVyIG1hbnVhbCBhZGp1c3RtZW50cyBtaWdodCBhbHNvIGJlIGFw cHJvcHJpYXRlOgorCisgICAgICogSWYgdGhlIHRhcmdldCBvZiBhbiBJTlBVVCBjb21tYW5kIGNh biB2YXJ5LCB5b3UgY2FuIHJlcGxhY2UgdGhlCisgICAgICAgSU5QVVQgY29tbWFuZCB3aXRoIE1J TlBVVCBhbmQgdGhlIGFwcHJvcHJpYXRlIHRhcmdldCBsaXN0LCBhbmQvb3IKKyAgICAgICB0aGUg dGFyZ2V0IHdpdGggYSBcZnBhdHRlcm4oKS4gRm9yIGV4YW1wbGUsIHN1cHBvc2UgeW91IGFyZSBk aWFsaW5nCisgICAgICAgYSBudW1iZXIgdGhhdCBjYW4gYmUgYW5zd2VyZWQgYnkgYW55IG9uZSBv ZiAxMDAgdGVybWluYWwgc2VydmVycywKKyAgICAgICB3aG9zZSBwcm9tcHRzIGFyZSB0cy0wMD4s IHRzLTAxPiwgdHMtMDI+LCAuLi4gdHMtOTk+LiBUaGUgc2NyaXB0CisgICAgICAgcmVjb3JkcyBh IHBhcnRpY3VsYXIgb25lIG9mIHRoZXNlLCBidXQgeW91IHdhbnQgaXQgdG8gd29yayBmb3IgYWxs CisgICAgICAgb2YgdGhlbSwgc28gY2hhbmdlIChlLmcuKToKKyAgSU5QVVQgMTAgdHMtMjM+ICA7 IG9yIHdoYXRldmVyCisKKyAgICAgICB0bzoKKyAgSU5QVVQgMTAgXGZwYXR0ZXJuKHRzLVswLTld WzAtOV0+KQorCisgICAgICogVGhlIElOUFVUIHRpbWVvdXQgdmFsdWVzIGFyZSBjb25zZXJ2YXRp dmUsIGJ1dCB0aGV5IGFyZSBiYXNlZCBvbmx5CisgICAgICAgb24gYSBzaW5nbGUgb2JzZXJ2YXRp b247IHlvdSBtaWdodCBuZWVkIHRvIHR1bmUgdGhlbS4KKyAgICAgKiBUaGUgUEFVU0UgY29tbWFu ZHMgbWlnaHQgbm90IGJlIG5lY2Vzc2FyeSwgb3IgdGhlIFBBVVNFIGludGVydmFsCisgICAgICAg bWlnaHQgbmVlZCBhZGp1c3RtZW50LgorICAgICAqIEluIGNhc2UgeW91IG1hZGUgdHlwb2dyYXBo aWNhbCBlcnJvcnMgZHVyaW5nIHJlY29yZGluZywgdGhleSBhcmUKKyAgICAgICBpbmNvcnBvcmF0 ZWQgaW4geW91ciBzY3JpcHQ7IHlvdSBjYW4gZWRpdCB0aGVtIG91dCBpZiB5b3Ugd2FudCB0by4K KworICAgSGVyZSBpcyBhIHNhbXBsZSBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEtlcm1pdCAoImxlYXJu IHZtcy5rc2MiKSBpbiB3aGljaAorICAgYSBUZWxuZXQgY29ubmVjdGlvbiBpcyBtYWRlIHRvIGEg Vk1TIGNvbXB1dGVyLCB0aGUgdXNlciBsb2dzIGluLCBzdGFydHMKKyAgIEtlcm1pdCBvbiBWTVMs IHNlbmRzIGl0IGEgZmlsZSwgYW5kIHRoZW4gbG9ncyBvdXQ6CisKKyAgOyBTY3JpcHRmaWxlOiB2 bXMua3NjCisgIDsgRGlyZWN0b3J5OiAgL3Vzci9vbGdhCisgIDsgUmVjb3JkZWQ6ICAgMjAwMDEx MjQgMTU6MjE6MjMKKworICBTRVQgSE9TVCAvTkVUV09SSzpUQ1Agdm1zLnh5emNvcnAuY29tCisg IElGIEZBSUwgU1RPUCAxIENvbm5lY3Rpb24gZmFpbGVkCisKKyAgSU5QVVQgNyB7XHsxM31cezEw fVx7MTN9VXNlcm5hbWU6IH0KKyAgSUYgRkFJTCBTVE9QIDEgSU5QVVQgdGltZW91dAorICBQQVVT RSAxCisgIE9VVFBVVCBvbGdhXHsxM30KKyAgSU5QVVQgMyB7XHsxM31cezEwfVx7MTN9UGFzc3dv cmQ6IH0KKyAgSUYgRkFJTCBTVE9QIDEgSU5QVVQgdGltZW91dAorICBQQVVTRSAxCisgIE9VVFBV VCBzZWNyZXRcezEzfQorICBJTlBVVCAxOCB7XHsxM31cezEwfVx7MTN9JCB9CisgIElGIEZBSUwg U1RPUCAxIElOUFVUIHRpbWVvdXQKKyAgUEFVU0UgMQorICBPVVRQVVQgc2V0IGRlZmF1bHQgWy5p bmNvbWluZ11cezEzfQorICBJTlBVVCAxMiB7XHsxM31cezEwfVx7MTN9JCB9CisgIElGIEZBSUwg U1RPUCAxIElOUFVUIHRpbWVvdXQKKyAgUEFVU0UgMQorICBPVVRQVVQga2VybWl0XHsxM30KKyAg SU5QVVQgMTUge1x7MTN9XHsxMH1cezEzfUFMVE86W09MR0EuSU5DT01JTkddIEMtS2VybWl0Pn0K KyAgSUYgRkFJTCBTVE9QIDEgSU5QVVQgdGltZW91dAorICBQQVVTRSAxCisgIE9VVFBVVCByZWNl aXZlXHsxM30KKyAgc2VuZCBteWZpbGUudHh0CisKKyAgSU5QVVQgMTgge1x7MTN9XHsxMH1cezEz fUFMVE86W09MR0EuSU5DT01JTkddIEMtS2VybWl0Pn0KKyAgSUYgRkFJTCBTVE9QIDEgSU5QVVQg dGltZW91dAorICBQQVVTRSAxCisgIE9VVFBVVCBleGl0XHsxM30KKyAgSU5QVVQgNiB7XHsxM31c ezEwfVx7MTN9JCB9CisgIElGIEZBSUwgU1RPUCAxIElOUFVUIHRpbWVvdXQKKyAgUEFVU0UgMQor ICBPVVRQVVQgbG9nb3V0XHsxM30KKyAgY2xvc2UKKyAgZXhpdAorCisgICBUaGUgY29tbWFuZHMg Z2VuZXJhdGVkIGJ5IEtlcm1pdCBkdXJpbmcgQ09OTkVDVCAoSU5QVVQsIElGIEZBSUwsIFBBVVNF LAorICAgYW5kIE9VVFBVVCkgaGF2ZSB1cHBlcmNhc2Uga2V5d29yZHM7IHRoZSBjb21tYW5kcyB0 eXBlZCBieSB0aGUgdXNlciBhcmUKKyAgIGluIHdoYXRldmVyIGZvcm0gdGhlIHVzZXIgdHlwZWQg dGhlbSAoaW4gdGhpcyBjYXNlLCBsb3dlcmNhc2UpLgorCisgICBbIFs0NzFdVG9wIF0gWyBbNDcy XUNvbnRlbnRzIF0gWyBbNDczXUMtS2VybWl0IEhvbWUgXSBbIFs0NzRdS2VybWl0CisgICBIb21l IF0KKworOC4xMi4gUGF0dGVybiBNYXRjaGluZworCisgICBBIHBhdHRlcm4gaXMgYSBjaGFyYWN0 ZXIgc3RyaW5nIHRoYXQgaXMgdXNlZCB0byBtYXRjaCBvdGhlciBzdHJpbmdzLgorICAgUGF0dGVy bnMgY2FuIGNvbnRhaW4gbWV0YWNoYXJhY3RlcnMgdGhhdCByZXByZXNlbnQgc3BlY2lhbCBhY3Rp b25zIGxpa2UKKyAgICJtYXRjaCBhbnkgc2luZ2xlIGNoYXJhY3RlciIsICJtYXRjaCB6ZXJvIG9y IG1vcmUgY2hhcmFjdGVycyIsICJtYXRjaAorICAgYW55IHNpbmdsZSBjaGFyYWN0ZXIgZnJvbSBh IGxpc3QiLCBhbmQgc28gb24uIFRoZSBiZXN0IGtub3duCisgICBhcHBsaWNhdGlvbiBvZiBwYXR0 ZXJucyBpcyBpbiBmaWxlIHNwZWNpZmljYXRpb25zIHRoYXQgY29udGFpbgorICAgd2lsZGNhcmRz LCBhcyBpbiAic2VuZCAqLnR4dCIsIG1lYW5pbmcgInNlbmQgYWxsIGZpbGVzIHdob3NlIG5hbWVz IGVuZAorICAgd2l0aCAudHh0Ii4KKworICAgUGF0dGVybnMgYXJlIGFsc28gdXNlZCBpbiBpbmNy ZWFzaW5nbHkgbWFueSBvdGhlciB3YXlzLCB0byB0aGUgZXh0ZW50CisgICBpdCBpcyB1c2VmdWwg dG8gcG9pbnQgb3V0IGNlcnRhaW4gaW1wb3J0YW50IGRpc3RpbmN0aW9ucyBpbiB0aGUgd2F5cyBp bgorICAgd2hpY2ggdGhleSBhcmUgdXNlZDoKKworICAgQW5jaG9yZWQgUGF0dGVybnMKKyAgICAg ICAgICBJZiBhbiBhbmNob3JlZCBwYXR0ZXJuIGRvZXMgbm90IGJlZ2luIHdpdGggIioiLCBpdCBt dXN0IG1hdGNoCisgICAgICAgICAgdGhlIGJlZ2lubmluZyBvZiB0aGUgc3RyaW5nLCBhbmQgaWYg aXQgZG9lcyBub3QgZW5kIHdpdGggIioiLCBpdAorICAgICAgICAgIG11c3QgbWF0Y2ggdGhlIGVu ZCBvZiB0aGUgc3RyaW5nLiBGb3IgZXhhbXBsZSwgdGhlIGFuY2hvcmVkCisgICAgICAgICAgcGF0 dGVybiAiYWJjIiBtYXRjaGVzIG9ubHkgdGhlIHN0cmluZyAiYWJjIiwgbm90ICJhYmNkZSIgb3IK KyAgICAgICAgICAieHl6YWJjIiBvciAiYWJjYWJjIi4gVGhlIGFuY2hvcmVkIHBhdHRlcm4gImFi YyoiIG1hdGNoZXMgYW55CisgICAgICAgICAgc3RyaW5nIHRoYXQgc3RhcnRzIHdpdGggImFiYyI7 IHRoZSBhbmNob3JlZCBwYXR0ZXJuICIqYWJjIgorICAgICAgICAgIG1hdGNoZXMgYW55IHN0cmlu ZyB0aGF0IGVuZHMgd2l0aCAiYWJjIjsgdGhlIGFuY2hvcmVkIHBhdHRlcm4KKyAgICAgICAgICAi KmFiYyoiIG1hdGNoZXMgYW55IHN0cmluZyB0aGF0IGNvbnRhaW5zICJhYmMiIChpbmNsdWRpbmcg YW55CisgICAgICAgICAgdGhhdCBzdGFydCBhbmQvb3IgZW5kIHdpdGggaXQpLgorCisgICBGbG9h dGluZyBQYXR0ZXJucworICAgICAgICAgIEEgZmxvYXRpbmcgcGF0dGVybiBtYXRjaGVzIGFueSBz dHJpbmcgdGhhdCBjb250YWlucyBhIHN1YnN0cmluZworICAgICAgICAgIHRoYXQgbWF0Y2hlcyB0 aGUgcGF0dGVybi4gSW4gb3RoZXIgd29yZHMsIGEgZmxvYXRpbmcgcGF0dGVybiBoYXMKKyAgICAg ICAgICBhbiBpbXBsaWVkICIqIiBhdCB0aGUgYmVnaW5uaW5nIGFuZCBlbmQuIFlvdSBjYW4gYW5j aG9yIGEKKyAgICAgICAgICBmbG9hdGluZyBwYXR0ZXJuIHRvIHRoZSBiZWdpbm5pbmcgYnkgc3Rh cnRpbmcgaXQgd2l0aCAiXiIsIGFuZAorICAgICAgICAgIHlvdSBjYW4gYW5jaG9yIGl0IHRvIHRo ZSBlbmQgYnkgZW5kaW5nIGl0IHdpdGggIiQiIChzZWUgZXhhbXBsZXMKKyAgICAgICAgICBiZWxv dykuCisKKyAgIFdpbGRjYXJkcworICAgICAgICAgIEEgd2lsZGNhcmQgaXMgYW4gYW5jaG9yZWQg cGF0dGVybiB0aGF0IGhhcyB0aGUgYWRkaXRpb25hbAorICAgICAgICAgIHByb3BlcnR5IHRoYXQg IioiIGRvZXMgbm90IG1hdGNoIGRpcmVjdG9yeSBzZXBhcmF0b3JzLgorCisgICBUaGlzIHRlcm1p bm9sb2d5IGxldHMgdXMgZGVzY3JpYmUgS2VybWl0J3MgY29tbWFuZHMgd2l0aCBhIGJpdCBtb3Jl CisgICBwcmVjaXNpb24uIFdoZW4gYSBwYXR0ZXJuIGlzIHVzZWQgZm9yIG1hdGNoaW5nIGZpbGVu YW1lcywgaXQgaXMgYQorICAgd2lsZGNhcmQsIGV4Y2VwdCBpbiB0aGUgVEVYVC1QQVRURVJOUyBh bmQgQklOQVJZLVBBVFRFUk5TIGxpc3RzIGFuZAorICAgL0VYQ0VQVDogY2xhdXNlcywgaW4gd2hp Y2ggY2FzZSBkaXJlY3Rvcnkgc2VwYXJhdG9ycyBhcmUgbm90CisgICBzaWduaWZpY2FudCAoZm9y IGV4YW1wbGUsIGEgQklOQVJZLVBBVFRFUk4gb2YgIiouZXhlIiBtYXRjaGVzIGFueSBmaWxlCisg ICB3aG9zZSBuYW1lIGVuZHMgaW4gLmV4ZSwgbm8gbWF0dGVyIGhvdyBkZWVwbHkgaXQgbWlnaHQg YmUgYnVyaWVkIGluCisgICBzdWJkaXJlY3RvcmllcykuIFdoZW4gS2VybWl0IHBhcnNlcyBhIGZp bGUgc3BlY2lmaWNhdGlvbiBkaXJlY3RseSwKKyAgIGhvd2V2ZXIsIGl0IHVzZXMgdGhlIHN0cmlj dCB3aWxkY2FyZCBkZWZpbml0aW9uLiBGb3IgZXhhbXBsZSwgInNlbmQKKyAgIGEqYiIgc2VuZHMg YWxsIGZpbGVzIHdob3NlIG5hbWVzIHN0YXJ0IHdpdGggImEiIGFuZCBlbmQgd2l0aCAiYiIgaW4g dGhlCisgICBjdXJyZW50IGRpcmVjdG9yeSwgYW5kIG5vdCBhbnkgZmlsZXMgd2hvc2UgbmFtZXMg ZW5kIHdpdGggImIiIHRoYXQKKyAgIGhhcHBlbiB0byBiZSBpbiBzdWJkaXJlY3RvcmllcyB3aG9z ZSBuYW1lcyBzdGFydCB3aXRoICJhIi4gQW5kIGFzCisgICBub3RlZCwgd2lsZGNhcmRzIGFyZSBh bmNob3JlZCwgc28gImRlbGV0ZSBmb28iIGRlbGV0ZXMgdGhlIGZpbGUgbmFtZWQKKyAgICJmb28i LCBhbmQgbm90IGFsbCBmaWxlcyB3aG9zZSBuYW1lcyBoYXBwZW4gdG8gY29udGFpbiAiZm9vIi4K KworICAgTW9zdCBvdGhlciBwYXR0ZXJucyBhcmUgYW5jaG9yZWQuIEZvciBleGFtcGxlOgorCisg IGlmIG1hdGNoIGFiYyBiYyAuLi4KKworICAgZG9lcyBub3Qgc3VjY2VlZCAoYW5kIHlvdSB3b3Vs ZCBiZSBzdXJwcmlzZWQgaWYgaXQgZGlkISkuIEluIGZhY3QsIHRoZQorICAgb25seSBmbG9hdGlu ZyBwYXR0ZXJucyBhcmUgdGhlIG9uZXMgdXNlZCBieSBjb21tYW5kcyBvciBmdW5jdGlvbnMgdGhh dAorICAgc2VhcmNoIGZvciBwYXR0ZXJucyBpbiBmaWxlcywgYXJyYXlzLCBvciBzdHJpbmdzLiBU aGVzZSBpbmNsdWRlOgorCisgICAgICogVGhlIEdSRVAgYW5kIFRZUEUgL01BVENIIGNvbW1hbmRz LgorICAgICAqIFRoZSBcZnNlYXJjaCgpLCBcZnJzZWFyY2goKSwgYW5kIFxmYXJyYXlsb29rKCkg ZnVuY3Rpb25zLgorCisgICBUaHVzIHRoZXNlIGFyZSB0aGUgb25seSBjb250ZXh0cyBpbiB3aGlj aCBleHBsaWNpdCBhbmNob3JzICgiXiIgYW5kCisgICAiJCIpIG1heSBiZSB1c2VkOgorCisgICBn cmVwIGFiYyAqLnR4dAorICAgICAgICAgIFByaW50cyBhbGwgbGluZXMgY29udGFpbmluZyAiYWJj IiBpbiBhbGwgZmlsZXMgd2hvc2UgbmFtZXMgZW5kCisgICAgICAgICAgd2l0aCAiLnR4dCIuCisK KyAgIGdyZXAgXmFiYyAqLnR4dAorICAgICAgICAgIFByaW50cyBhbGwgbGluZXMgdGhhdCBzdGFy dCB3aXRoICJhYmMiIGluIGFsbCAiLnR4dCIgZmlsZXMuCisKKyAgIGdyZXAgYWJjJCAqLnR4dAor ICAgICAgICAgIFByaW50cyBhbGwgbGluZXMgdGhhdCBlbmQgd2l0aCAiYWJjIiBpbiBhbGwgIi50 eHQiIGZpbGVzLgorCisgICBncmVwIF5hKnokICoudHh0CisgICAgICAgICAgUHJpbnRzIGFsbCBs aW5lcyB0aGF0IHN0YXJ0IHdpdGggImEiIGFuZCBlbmQgd2l0aCAieiIgaW4gYWxsCisgICAgICAg ICAgIi50eHQiIGZpbGVzLgorCisgICBTaW1pbGFybHkgZm9yIFRZUEUgL1BBR0UsIC9mc2VhcmNo KCksIC9mcnNlYXJjaCgpLCBhbmQgXGZhcnJheWxvb2soKS4KKworICAgSGVyZSBpcyBhIGJyaWVm IHN1bW1hcnkgb2YgYW5jaG9yZWQgYW5kIGZsb2F0aW5nIHBhdHRlcm4gZXF1aXZhbGVuY2VzOgor CisgIEFuY2hvcmVkICAgRmxvYXRpbmcKKyAgICBhYmMgICAgICAgXmFiYyQKKyAgICAqYWJjICAg ICAgYWJjJAorICAgIGFiYyogICAgICBeYWJjCisgICAgKmFiYyogICAgIGFiYworCisgICBbIFs0 NzVdVG9wIF0gWyBbNDc2XUNvbnRlbnRzIF0gWyBbNDc3XUMtS2VybWl0IEhvbWUgXSBbIFs0Nzhd S2VybWl0CisgICBIb21lIF0KKworOC4xMy4gRGF0ZXMgYW5kIFRpbWVzCisKKyAgIEMtS2VybWl0 J3MgY29tcHJlaGVuc2lvbiBvZiBkYXRlLXRpbWUgZm9ybWF0cyBpcyBjb25zaWRlcmFibHkgZXhw YW5kZWQKKyAgIGluIHZlcnNpb24gOC4wLiBBbnkgY29tbWFuZCB0aGF0IHJlYWRzIGRhdGVzLCBp bmNsdWRpbmcgdGhlIERBVEUKKyAgIGNvbW1hbmQgaXRzZWxmLCBvciBhbnkgc3dpdGNoLCBzdWNo IGFzIHRoZSAvQkVGT1JFOiBhbmQgL0FGVEVSOgorICAgc3dpdGNoZXMsIG9yIGFueSBmdW5jdGlv biBzdWNoIGFzIFxmY3Z0ZGF0ZSgpLCBub3cgY2FuIHVuZGVyc3RhbmQgZGF0ZXMKKyAgIGFuZCB0 aW1lcyBleHByZXNzZWQgaW4gYW55IElTTyA4NjAxIGZvcm1hdCwgaW4gVW5peCAiYXNjdGltZSIg Zm9ybWF0LAorICAgaW4gRlRQIE1EVE0gZm9ybWF0LCBhbmQgaW4gcHJhY3RpY2FsbHkgYW55IGZv cm1hdCB1c2VkIGluIFJGQyA4MjIgb3IKKyAgIFJGQyAyODIyIGVsZWN0cm9uaWMgbWFpbCwgd2l0 aCBvciB3aXRob3V0IHRpbWV6b25lcywgYW5kIGluIGEgZ3JlYXQKKyAgIG1hbnkgb3RoZXIgZm9y bWF0cyBhcyB3ZWxsLiBIRUxQIERBVEUgYnJpZWZseSBzdW1tYXJpemVzIHRoZSBhY2NlcHRhYmxl CisgICBkYXRlLXRpbWUgZm9ybWF0cy4KKworICAgRnVydGhlcm1vcmUsIEMtS2VybWl0IDguMCBp bmNsdWRlcyBhIG5ldyBhbmQgZWFzeS10by11c2UgZm9ybSBvZgorICAgZGF0ZS10aW1lIGFyaXRo bWV0aWMsIGluIHdoaWNoIGFueSBkYXRlIG9yIHRpbWUgY2FuIGJlIGNvbWJpbmVkIHdpdGggYQor ICAgImRlbHRhIHRpbWUiLCB0byBhZGQgb3Igc3VidHJhY3QgdGhlIGRlc2lyZWQgdGltZSBpbnRl cnZhbCAoeWVhcnMsCisgICBtb250aHMsIHdlZWtzLCBkYXlzLCBob3VycywgbWludXRlcywgc2Vj b25kcykgdG8vZnJvbSB0aGUgZ2l2ZW4gZGF0ZS4KKyAgIEFuZCBuZXcgZnVuY3Rpb25zIGFyZSBh dmFpbGFibGUgdG8gY29tcGFyZSBkYXRlcyBhbmQgdG8gY29tcHV0ZSB0aGVpcgorICAgZGlmZmVy ZW5jZXMuCisKKyAgIEFzIHlvdSBjYW4gaW1hZ2luZSwgYWxsIHRoaXMgcmVxdWlyZXMgcXVpdGUg YSBiaXQgb2YgInN5bnRheCIuIFRoZQorICAgYmFzaWMgZm9ybWF0IGlzOgorCisgIFsgZGF0ZSBd IFsgdGltZSBdIFsgZGVsdGEgXQorCisgICBFYWNoIGZpZWxkIGlzIG9wdGlvbmFsLCBidXQgaW4g bW9zdCBjYXNlcyAoZGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0KQorICAgdGhlcmUgbXVzdCBiZSBh dCBsZWFzdCBvbmUgZmllbGQuIElmIGEgZGF0ZSBpcyBnaXZlbiwgaXQgbXVzdCBjb21lCisgICBm aXJzdC4gSWYgbm8gZGF0ZSBpcyBnaXZlbiwgdGhlIGN1cnJlbnQgZGF0ZSBpcyBhc3N1bWVkLiBJ ZiBubyB0aW1lIGlzCisgICBnaXZlbiwgYW4gYXBwcm9wcmlhdGUgdGltZSBpcyBzdXBwbGllZCBk ZXBlbmRpbmcgb24gd2hldGhlciBhIGRhdGUgd2FzCisgICBzdXBwbGllZC4gSWYgbm8gZGVsdGEg aXMgZ2l2ZW4sIG5vIGFyaXRobWV0aWMgaXMgZG9uZS4gSWYgYSBkZWx0YSBpcworICAgZ2l2ZW4g d2l0aG91dCBhIGRhdGUgb3IgdGltZSwgdGhlIGN1cnJlbnQgZGF0ZSBhbmQgdGltZSBhcmUgdXNl ZCBhcyB0aGUKKyAgIGJhc2UuCisKKyAgIERhdGUtdGltZS1kZWx0YSBmaWVsZHMgYXJlIGxpa2Vs eSB0byBjb250YWluIHNwYWNlcyAoYWx0aG91Z2ggdGhleSBuZWVkCisgICBub3Q7IHNwYWNlLWZy ZWUgZm9ybXMgYXJlIGFsd2F5cyBhdmFpbGFibGUpLiBUaGVyZWZvcmUsIGluIG1vc3QKKyAgIGNv bnRleHRzIC0tIGFuZCBub3RhYmx5IGFzIHN3aXRjaCBhcmd1bWVudHMgLS0gZGF0ZS10aW1lIGlu Zm9ybWF0aW9uCisgICBtdXN0IGJlIGVuY2xvc2VkIGluIGJyYWNlcyBvciBkb3VibGVxdW90ZXMs IGZvciBleGFtcGxlOgorCisgIHNlbmQgL2FmdGVyOiI4LUF1Zy0yMDAxIDEyOjAwIFVUQyIgKi50 eHQKKworICAgS2VybWl0J3Mgc3RhbmRhcmQgaW50ZXJuYWwgZm9ybWF0IGZvciBkYXRlcyBhbmQg dGltZXMgaXM6CisKKyAgeXl5eW1tZGQgaGg6bW06c3MKKworICAgZm9yIGV4YW1wbGU6CisKKyAg MjAwMTAyMDggMTA6Mjg6MDEKKworICAgRGF0ZS10aW1lcyBjYW4gYWx3YXlzIGJlIGdpdmVuIGlu IHRoaXMgZm9ybWF0LiB5eXl5IGlzIHRoZSA0LWRpZ2l0CisgICB5ZWFyLCBtbSBpcyB0aGUgdHdv LWRpZ2l0IG1vbnRoICgxLTEyOyBzdXBwbHkgbGVhZGluZyB6ZXJvIGZvcgorICAgSmFuLVNlcCks IGRkIGlzIHRoZSAyLWRpZ2l0IGRheSAobGVhZGluZyB6ZXJvIGZvciAxLTkpLCBoaCBpcyB0aGUg aG91cgorICAgKDAtMjMpLCBtbSB0aGUgbWludXRlICgwLTU5KSwgc3MgdGhlIHNlY29uZCAoMC01 OSksIGVhY2ggd2l0aCBsZWFkaW5nCisgICB6ZXJvIGlmIGxlc3MgdGhhbiB0aGUgZmllbGQgd2lk dGguIFRoZSBkYXRlIGFuZCB0aW1lIGNhbiBiZSBzZXBhcmF0ZWQKKyAgIGJ5IGEgc3BhY2UsIGFu IHVuZGVyc2NvcmUsIGEgY29sb24sIG9yIHRoZSBsZXR0ZXIgVC4gVGhlIHRpbWUgaXMgaW4KKyAg IDI0LWhvdXIgZm9ybWF0LiBUaHVzIHRoZSB2YXJpb3VzIHF1YW50aXRpZXMgYXJlIGF0IHRoZSBm b2xsb3dpbmcgZml4ZWQKKyAgIHBvc2l0aW9uczoKKworUG9zaXRpb24gIENvbnRlbnRzCisgICAx LTQgICAgWWVhciAgICg0IGRpZ2l0cywgMDAwMC05OTk5KQorICAgNS02ICAgIE1vbnRoICAoMiBk aWdpdHMsIDEtMTIpCisgICA3LTggICAgRGF5ICAgICgyIGRpZ2l0cywgMS0zMSkKKyAgIDkgICAg ICBEYXRlLVRpbWUgU2VwYXJhdG9yIChzcGFjZSwgOiwgXywgb3IgdGhlIGxldHRlciBUKQorICAx MC0xMSAgIEhvdXIgICAoMiBkaWdpdHMsIDAtMjMpCisgIDEyICAgICAgSG91ci1NaW51dGUgU2Vw YXJhdG9yIChjb2xvbikKKyAgMTMtMTQgICBNaW51dGUgKDIgZGlnaXRzLCAwLTU5KQorICAxNSAg ICAgIE1pbnV0ZS1TZWNvbmQgU2VwYXJhdG9yIChjb2xvbikKKyAgMTYtMTcgICBTZWNvbmQgKDIg ZGlnaXRzLCAwLTU5KQorCisgICBFeGFtcGxlOgorCisgIDE5ODAwNTI2IDEzOjA3OjEyICAyNiBN YXkgMTk4MCwgMTM6MDc6MTIgKDE6MDc6MTJQTSkKKworICAgVGhpcyBpcyB0aGUgZm9ybWF0IHBy b2R1Y2VkIGJ5IHRoZSBEQVRFIGNvbW1hbmQgYW5kIGJ5IGFueSBmdW5jdGlvbgorICAgdGhhdCBy ZXR1cm5zIGEgZGF0ZS10aW1lLiBJdCBpcyBzdWl0YWJsZSBmb3IgbGV4aWNhbCBjb21wYXJpc29u IGFuZAorICAgc29ydGluZywgYW5kIGZvciB1c2UgYXMgYSBkYXRlLXRpbWUgaW4gYW55IEtlcm1p dCBjb21tYW5kLiBXaGVuIHRoaXMKKyAgIGZvcm1hdCBpcyBnaXZlbiBhcyBpbnB1dCB0byBhIGNv bW1hbmQgb3IgZnVuY3Rpb24sIHZhcmlvdXMgZGF0ZS10aW1lCisgICBzZXBhcmF0b3JzIChhcyBu b3RlZCkgYXJlIGFjY2VwdGVkOgorCisgIDE5ODAwNTI2IDEzOjA3OjEyICAyNiBNYXkgMTk4MCwg MTM6MDc6MTIgKDE6MDc6MTJQTSkKKyAgMjAwMTAyMDhfMTA6Mjg6MzUgIDIgRmVicnVhcnkgMjAw MSwgMTA6Mjg6MzUgQU0KKyAgMTg1ODAxMDE6MTI6MDA6MDAgIDEgSmFudWFyeSAxODU4LCBub29u CisgIDIwMTEwMjA4VDAwOjAwOjAwICAyIEZlYnJ1YXJ5IDIwMTEsIG1pZG5pZ2h0CisKKyAgIENl cnRhaW4gb3RoZXIgc3BlY2lhbCBkYXRlLXRpbWUgZm9ybWF0cyB0aGF0IGFyZSBlbmNvdW50ZXJl ZCBvbgorICAgY29tcHV0ZXIgbmV0d29ya3MgYXJlIHJlY29nbml6ZWQ6CisKKyAgIEFzY3RpbWUg Rm9ybWF0CisgICAgICAgICAgVGhpcyBpcyBhIGZpeGVkIGZvcm1hdCB1c2VkIGJ5IFVuaXgsIG5h bWVkIGFmdGVyIFVuaXgncworICAgICAgICAgIGFzY3RpbWUoKSAoIkFTQ0lJIHRpbWUiKSBmdW5j dGlvbi4gSXQgaXMgYWx3YXlzIGV4YWN0bHkgMjQKKyAgICAgICAgICBjaGFyYWN0ZXJzIGxvbmcu IEV4YW1wbGU6IEZyaSBBdWcgMTAgMTY6Mzg6MDEgMjAwMQorCisgICBBc2N0aW1lIHdpdGggVGlt ZXpvbmUKKyAgICAgICAgICBUaGlzIGlzIGxpa2UgQXNjdGltZSBmb3JtYXQsIGJ1dCBpbmNsdWRl cyBhIDMtY2hhcmFjdGVyIHRpbWV6b25lCisgICAgICAgICAgYmV0d2VlbiB0aGUgdGltZSBhbmQg eWVhci4gSXQgaXMgZXhhY3RseSAyOCBjaGFyYWN0ZXJzIGxvbmcuCisgICAgICAgICAgRXhhbXBs ZTogRnJpIEF1ZyAxMCAxNjozODowMSBHTVQgMjAwMQorCisgICBFLU1haWwgRm9ybWF0CisgICAg ICAgICAgRS1tYWlsIGRhdGUtdGltZSBmb3JtYXRzIGFyZSBkZWZpbmVkIGluIFs0NzldUkZDIDI4 MjIgd2l0aCBhCisgICAgICAgICAgZmFpciBhbW91bnQgb2YgZmxleGliaWxpdHkgYW5kIG9wdGlv bnMuIFRoZSBmb2xsb3dpbmcgZXhhbXBsZXMKKyAgICAgICAgICBhcmUgdHlwaWNhbCBvZiBlLW1h aWxzIGFuZCBIVFRQICh3ZWItcGFnZSkgaGVhZGVyczoKKworICBTYXQsIDE0IEp1bCAyMDAxIDEx OjQ5OjI5ICAgICAgICAgICAgICAgIChObyB0aW1lem9uZSkKKyAgRnJpLCAyNCBNYXIgMjAwMCAx NDoxOTo1OSBFU1QgICAgICAgICAgICAoU3ltYm9saWMgdGltZXpvbmUpCisgIFR1ZSwgMjYgSnVu IDIwMDEgMTA6MTk6NDUgLTA0MDAgKEVEVCkgICAgKEdNVCBPZmZzZXQgKyBjb21tZW50KQorCisg ICBGVFAgTURUTSBGb3JtYXQKKyAgICAgICAgICBUaGlzIGlzIHRoZSBkYXRlLXRpbWUgZm9ybWF0 IHN1cHBsaWVkIGJ5IEZUUCBzZXJ2ZXJzIHRoYXQKKyAgICAgICAgICBzdXBwb3J0IHRoZSAobm90 IHlldCBzdGFuZGFyZCBidXQgd2lkZWx5IHVzZWQgbmV2ZXJ0aGVsZXNzKSBNRFRNCisgICAgICAg ICAgY29tbWFuZCwgYnkgd2hpY2ggdGhlIEZUUCBjbGllbnQgYXNrcyBmb3IgYSBmaWxlJ3MgbW9k aWZpY2F0aW9uCisgICAgICAgICAgdGltZToKKworICB5eXl5bW1kZGhobW1zc1suZmZmZl0KKwor ICAgICAgICAgIHdoZXJlIHl5eXkgaXMgdGhlIDQtZGlnaXQgeWVhciwgbW0gaXMgdGhlIDItZGln aXQgbW9udGgsIGFuZCBzbworICAgICAgICAgIG9uLCBleGFjdGx5IDE0IGRpZ2l0cyBsb25nLiBB biBvcHRpb25hbCBmcmFjdGlvbmFsIHBhcnQKKyAgICAgICAgICAoZnJhY3Rpb24gb2Ygc2Vjb25k KSBtYXkgYWxzbyBiZSBpbmNsdWRlZCwgc2VwYXJhdGVkIGJ5IGEKKyAgICAgICAgICBkZWNpbWFs IHBvaW50IChwZXJpb2QpLiBLZXJtaXQgcm91bmRzIHRvIHRoZSBuZWFyZXN0IHNlY29uZC4KKyAg ICAgICAgICBFeGFtcGxlOgorCisgIDIwMDIwMjA4MTAyODM1LjUxNSAgICAgICAgICAgICAgICAg ICAgICAgKDggRmVicnVhcnkgMjAwMiAxMDoyODozNiBBTSkKKworOC4xMy4xLiBUaGUgRGF0ZQor CisgICBUaGUgZGF0ZSwgaWYgZ2l2ZW4sIG11c3QgcHJlY2VkZSB0aGUgdGltZSBhbmQvb3IgZGVs dGEsIGFuZCBjYW4gYmUgaW4KKyAgIG1hbnksIG1hbnkgZm9ybWF0cy4gRm9yIHN0YXJ0ZXJzLCB5 b3UgY2FuIHVzZSBzZXZlcmFsIHN5bWJvbGljIGRhdGUKKyAgIG5hbWVzIGluIHBsYWNlIG9mIGFj dHVhbCBkYXRlczoKKworICAgTk9XCisgICAgICAgICAgVGhpcyBpcyByZXBsYWNlZCBieSB0aGUg Y3VycmVudCBkYXRlIGFuZCB0aW1lLiBUaGUgdGltZSBjYW4gbm90CisgICAgICAgICAgYmUgb3Zl cnJpZGVuIChpZiB5b3Ugd2FudCB0byBzdXBwbHkgYSBzcGVjaWZpYyB0aW1lLCB1c2UgVE9EQVkK KyAgICAgICAgICByYXRoZXIgdGhhbiBOT1cpLgorCisgICBUT0RBWQorICAgICAgICAgIFRoaXMg aXMgcmVwbGFjZWQgYnkgdGhlIGN1cnJlbnQgZGF0ZSBhbmQgYSBkZWZhdWx0IHRpbWUgb2YKKyAg ICAgICAgICAwMDowMDowMCBpcyBzdXBwbGllZCwgYnV0IGNhbiBiZSBvdmVycmlkZGVuIGJ5IGEg c3BlY2lmaWMgdGltZTsKKyAgICAgICAgICBmb3IgZXhhbXBsZSwgaWYgdG9kYXkgaXMgOCBGZWJy dWFyeSAyMDAyLCB0aGVuICJUT0RBWSIgaXMKKyAgICAgICAgICAiMjAwMjA4MDIgMDA6MDA6MDAi IGJ1dCAiVE9EQVkgMTA6MjgiIGlzICIyMDAyMDgwMiAxMDoyODowMCIuCisKKyAgIFRPTU9SUk9X CisgICAgICAgICAgTGlrZSBUT0RBWSwgYnV0IG9uZSBkYXkgbGF0ZXIgKGlmIHRvZGF5IGlzIDgg RmVicnVhcnkgMjAwMiwgdGhlbgorICAgICAgICAgICJUT01PUlJPVyIgaXMgIjIwMDIwODAzIDAw OjAwOjAwIiBidXQgIlRPTU9SUk9XIDE2OjMwIiBpcworICAgICAgICAgICIyMDAyMDgwMyAxNjoz MDowMCIpLgorCisgICBZRVNURVJEQVkKKyAgICAgICAgICBMaWtlIFRPREFZLCBidXQgb25lIGRh eSBlYXJsaWVyLgorCisgICBNT05EQVksIFRVRVNEQVksIFdFRE5FU0RBWSwgLi4uLCBTVU5EQVkK KyAgICAgICAgICBUaGUgZGF0ZSBvbiB0aGUgZ2l2ZW4gZGF5IG9mIHRoZSB3ZWVrLCB0b2RheSBv ciBsYXRlci4gQSBkZWZhdWx0CisgICAgICAgICAgdGltZSBvZiAwMDowMDowMCBpcyBzdXBwbGll ZCBidXQgY2FuIGJlIG92ZXJyaWRkZW4uIEV4YW1wbGU6CisgICAgICAgICAgIlNBVFVSREFZIDEy OjAwIiBtZWFucyBuZXh0IFNhdHVyZGF5IChvciB0b2RheSwgaWYgdG9kYXkgaXMKKyAgICAgICAg ICBTYXR1cmRheSkgYXQgbm9vbi4KKworICAgWW91IGNhbiBnaXZlIGFuIGV4cGxpY2l0IGRhdGUg aW4gYWxtb3N0IGFueSBjb25jZWl2YWJsZSBmb3JtYXQsIGJ1dAorICAgdGhlcmUgYXJlIHNvbWUg cnVsZXM6CisKKyAgICAgKiBJZiBhIGRhdGUgaXMgZ2l2ZW4sIGl0IG11c3QgaGF2ZSB0aHJlZSBm aWVsZHM6IGRheSwgbW9udGgsIGFuZAorICAgICAgIHllYXI7IHRoZSBvcmRlciBjYW4gdmFyeSAo ZXhjZXB0IHRoYXQgdGhlIG1vbnRoIGNhbiBub3QgYmUgbGFzdCkuCisgICAgICogSWYgbmFtZXMg YXJlIHVzZWQgZm9yIGRheXMsIG1vbnRocywgZXRjLCB0aGV5IG11c3QgYmUgRW5nbGlzaC4KKyAg ICAgKiBUaGUgeWVhciBtdXN0IGxpZSBiZXR3ZWVuIDAwMDAgYW5kIDk5OTksIGluY2x1c2l2ZS4K KyAgICAgKiBBbGwgY2FsZW5kYXIgY2FsY3VsYXRpb25zIHVzZSBHcmVnb3JpYW4gZGF0aW5nLCBz byBjYWxjdWxhdGVkIGRhdGVzCisgICAgICAgZm9yIHllYXJzIHByaW9yIHRvIDE1ODIgKG9yIGxh dGVyLCBkZXBlbmRpbmcgb24gdGhlIGNvdW50cnkpIHdpbGwKKyAgICAgICBub3QgYWdyZWUgd2l0 aCBoaXN0b3JpY2FsIGRhdGVzLiBPdGhlciBmb3JtcyBvZiBkYXRpbmcgKGUuZy4KKyAgICAgICBI ZWJyZXcsIENoaW5lc2UpIGFyZSBub3Qgc3VwcG9ydGVkLgorCisgICBWYXJpb3VzIGRhdGUtZmll bGQgc2VwYXJhdG9ycyBhcmUgYWNjZXB0ZWQ6IGh5cGhlbiwgc2xhc2gsIHNwYWNlLAorICAgdW5k ZXJzY29yZSwgcGVyaW9kLiBUaGUgc2FtZSBmaWVsZCBzZXBhcmF0b3IgKGlmIGFueSkgbXVzdCBi ZSB1c2VkIGluCisgICBib3RoIHBsYWNlczsgZm9yIGV4YW1wbGUgMTgtU2VwLTIwMDEgYnV0IG5v dCAxOC1TZXAvMjAwMS4gTW9udGhzIGNhbiBiZQorICAgbnVtZXJpYyAoMS0xMikgb3IgRW5nbGlz aCBuYW1lcyBvciBhYmJyZXZpYXRpb25zLiBNb250aCBuYW1lCisgICBhYmJyZXZpYXRpb25zIGFy ZSBub3JtYWxseSB0aHJlZSBsZXR0ZXJzLCBlLmcuIEFwciwgTWF5LCBKdW4sIEp1bC4KKyAgIENh cGl0YWxpemF0aW9uIGRvZXNuJ3QgbWF0dGVyLgorCisgICBIZXJlIGFyZSBhIGZldyBleGFtcGxl czoKKworICAxOCBTZXAgMjAwMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChFbmdsaXNo IG1vbnRoLCBhYmJyZXZpYXRlZCkKKyAgMTggU2VwdGVtYmVyIDIwMDEgICAgICAgICAgICAgICAg ICAgICAgICAoRW5nbGlzaCBtb250aCwgc3BlbGxlZCBvdXQpCisgIDIwMDEgU2VwdCAxOCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKFllYXIsIG1vbnRoLCBkYXkpCisgIDE4LVNlcC0yMDAx ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFdpdGggaHlwaGVucykKKyAgMTgvMDkvMjAw MSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQWxsIG51bWVyaWMgd2l0aCBzbGFzaGVz KQorICAxOC4wOS4yMDAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChEaXR0bywgd2l0 aCBwZXJpb2RzKQorICAxOF8wOV8yMDAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChE aXR0bywgd2l0aCB1bmRlcnNjb3JlcykKKyAgMDkvMTgvMjAwMSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoU2VlIGJlbG93KQorICAyMDAxLzA5LzE4ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChTZWUgYmVsb3cpCisgIFNlcHRlbWJlciAxOCwgMjAwMSAgICAgICAgICAgICAg ICAgICAgICAgKENvcnJlc3BvbmRlbmNlIHN0eWxlKQorICBTZXAtMTgtMjAwMSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChNb250aC1kYXkteWVhcikKKyAgMjAwMTA5MTggICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoTnVtZXJpYywgbm8gc2VwYXJhdG9ycykKKworICAgWW91 IGNhbiBhbHNvIGluY2x1ZGUgdGhlIGRheSBvZiB0aGUgd2VlayB3aXRoIGEgc3BlY2lmaWMgZGF0 ZSwgaW4gd2hpY2gKKyAgIGNhc2UgaXQgaXMgYWNjZXB0ZWQgKGlmIGl0IGlzIGEgdmFsaWQgZGF5 IG5hbWUpLCBidXQgbm90IHZlcmlmaWVkIHRvCisgICBhZ3JlZSB3aXRoIHRoZSBnaXZlbiBkYXRl OgorCisgIFR1ZSwgMTggU2VwIDIwMDEgICAgICAgICAgICAgICAgICAgICAgICAgKEFiYnJldmlh dGVkLCB3aXRoIGNvbW1hKQorICBUdWUsMTggU2VwIDIwMDEgICAgICAgICAgICAgICAgICAgICAg ICAgIChDb21tYSBidXQgbm8gc3BhY2UpCisgIFR1ZSAxOCBTZXAgMjAwMSAgICAgICAgICAgICAg ICAgICAgICAgICAgKEFiYnJldmlhdGVkLCBubyBjb21tYSkKKyAgVHVlc2RheSAxOCBTZXAgMjAw MSAgICAgICAgICAgICAgICAgICAgICAoU3BlbGxlZCBvdXQpCisgIFR1ZXNkYXksIDE4IFNlcCAy MDAxICAgICAgICAgICAgICAgICAgICAgKGV0YykKKyAgRnJpZGF5LCAxOCBTZXAgMjAwMSAgICAg ICAgICAgICAgICAgICAgICAoQWNjZXB0ZWQgZXZlbiBpZiBub3QgRnJpZGF5KQorCisgICBJbiBh bGwtbnVtZXJpYyBkYXRlcyB3aXRoIHRoZSB5ZWFyIGxhc3QsIHN1Y2ggYXMgMTgvMDkvMjAwMSwg S2VybWl0CisgICBpZGVudGlmaWVzIHRoZSB5ZWFyIGJlY2F1c2UgaXQncyA0IGRpZ2l0cywgdGhl biBkZWNpZGVzIHdoaWNoIG9mIHRoZQorICAgb3RoZXIgdHdvIG51bWJlcnMgaXMgdGhlIG1vbnRo IG9yIGRheSBiYXNlZCBvbiBpdHMgdmFsdWUuIElmIGJvdGggYXJlCisgICAxMiBvciBsZXNzIGFu ZCBhcmUgdW5lcXVhbCwgdGhlIGRhdGUgaXMgYW1iaWd1b3VzIGFuZCBpcyByZWplY3RlZC4gSW4K KyAgIGFsbC1udW1lcmljIGRhdGVzIHdpdGggdGhlIHllYXIgZmlyc3QsIHRoZSBzZWNvbmQgZmll bGQgaXMgYWx3YXlzIHRoZQorICAgbW9udGggYW5kIHRoZSB0aGlyZCBpcyB0aGUgZGF5LiBUaGUg bW9udGggbmV2ZXIgY29tZXMgbGFzdC4gQSBkYXRlIHdpdGgKKyAgIG5vIHNlcGFyYXRvcnMgaXMg YWNjZXB0ZWQgb25seSBpZiBpdCBpcyBhbGwgbnVtZXJpYyBhbmQgaGFzIGV4YWN0bHkKKyAgIGVp Z2h0IGRpZ2l0cywgYW5kIGlzIGFzc3VtZWQgdG8gYmUgaW4geXl5eW1tZGQgZm9ybWF0LgorCisg IDIwMDEwOTE4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDE4LVNlcC0yMDAxIDAw OjAwOjAwKQorCisgICBvciAxNCBkaWdpdHMgKGFzIGluIEZUUCBNRFRNIGZvcm1hdCk6CisKKyAg MjAwMTA5MTgxMjM0NTYgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTgtU2VwLTIwMDEgMTI6 MzQ6NTYpCisKKyAgIFlvdSBjYW4gYWx3YXlzIGF2b2lkIGFtYmlndWl0eSBieSBwdXR0aW5nIHRo ZSB5ZWFyIGZpcnN0LCBvciBieSB1c2luZworICAgYW4gRW5nbGlzaCwgcmF0aGVyIHRoYW4gbnVt ZXJpYywgbW9udGguIEEgZGF0ZSBzdWNoIGFzIDA5LzA4LzIwMDEgd291bGQKKyAgIGJlIGFtYmln dW91cyBidXQgMjAwMS8wOS8wOCBpcyBub3QsIG5vciBpcyAwOS1BdWctMjAwMS4KKworICAgVW50 aWwgdGhlIGxhdGUgMTk5MHMsIGl0IHdhcyBjb21tb24gdG8gZW5jb3VudGVyIDItZGlnaXQgeWVh cnMsIGFuZAorICAgdGhlc2UgYXJlIGZvdW5kIHRvIHRoaXMgZGF5IGluIG9sZCBlLW1haWxzIGFu ZCBvdGhlciBkb2N1bWVudHMuIEtlcm1pdAorICAgYWNjZXB0cyB0aGVzZSBkYXRlcyBpZiB0aGV5 IGhhdmUgRW5nbGlzaCBtb250aHMsIGFuZCBpbnRlcnByZXRzIHRoZW0KKyAgIGFjY29yZGluZyB0 byB0aGUgd2luZG93aW5nIHJ1bGVzIG9mIFs0ODBdUkZDIDI4MjI6ICJJZiBhIHR3byBkaWdpdCB5 ZWFyCisgICBpcyBlbmNvdW50ZXJlZCB3aG9zZSB2YWx1ZSBpcyBiZXR3ZWVuIDAwIGFuZCA0OSwg dGhlIHllYXIgaXMKKyAgIGludGVycHJldGVkIGJ5IGFkZGluZyAyMDAwLCBlbmRpbmcgdXAgd2l0 aCBhIHZhbHVlIGJldHdlZW4gMjAwMCBhbmQKKyAgIDIwNDkuIElmIGEgdHdvIGRpZ2l0IHllYXIg aXMgZW5jb3VudGVyZWQgd2l0aCBhIHZhbHVlIGJldHdlZW4gNTAgYW5kCisgICA5OSwgb3IgYW55 IHRocmVlIGRpZ2l0IHllYXIgaXMgZW5jb3VudGVyZWQsIHRoZSB5ZWFyIGlzIGludGVycHJldGVk IGJ5CisgICBhZGRpbmcgMTkwMC4iCisKKyAgIElmIHlvdSBuZWVkIHRvIHNwZWNpZnkgYSB5ZWFy IHByaW9yIHRvIDEwMDAsIHVzZSBsZWFkaW5nIHplcm9zIHRvCisgICBlbnN1cmUgaXQgaXMgbm90 IG1pc2ludGVycHJldGVkIGFzIGEgIm5vbi1ZMkstY29tcGxpYW50IiBtb2Rlcm4geWVhcjoKKwor ICA3LU9jdC03NyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxOTc3MTAwNyAwMDow MDowMCkKKyAgNy1PY3QtMDA3NyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMDA3NzEw MDcgMDA6MDA6MDApCisKKzguMTMuMi4gVGhlIFRpbWUKKworICAgVGhlIGJhc2ljIHRpbWUgZm9y bWF0IGlzIGhoOm1tOmRkOyB0aGF0IGlzIGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzLAorICAgc2Vw YXJhdGVkIGJ5IGNvbG9ucywgcGVyaGFwcyB3aXRoIGFuIG9wdGlvbmFsIGZyYWN0aW9uYWwgc2Vj b25kCisgICBzZXBhcmF0ZWQgYnkgYSBkZWNpbWFsIHBvaW50IChwZXJpb2QpLiBUaGUgaG91cnMg YXJlIGluIDI0LWhvdXIgZm9ybWF0OworICAgMTIgaXMgbm9vbiwgMTMgaXMgMXBtLCBhbmQgc28g b24uIEZpZWxkcyBvbWl0dGVkIGZyb20gdGhlIHJpZ2h0IGRlZmF1bHQKKyAgIHRvIHplcm8uIEZp ZWxkcyBjYW4gYmUgb21pdHRlZCBmcm9tIHRoZSBsZWZ0IG9yIG1pZGRsZSBieSBpbmNsdWRpbmcg dGhlCisgICBmaWVsZCdzIHRlcm1pbmF0aW5nIGNvbG9uLiBFeGFtcGxlczoKKworICAxMTo1OTo1 OSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxMTo1OTo1OSBBTSkKKyAgMTE6NTkg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTE6NTk6MDAgQU0pCisgIDExICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDExOjAwOjAwIEFNKQorICAxMTo1 OTo1OS4zMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxMTo1OTo1OSBBTSkKKyAgMTE6 NTk6NTkuNjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTm9vbikKKyAgMDM6MjE6MDAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMzoyMTowMCBBTSkKKyAgMzoyMTowMCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMzoyMTowMCBBTSkKKyAgMTU6MjE6MDAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMzoyMTowMCBQTSkKKyAgOjIxOjAwICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMDA6MjE6MDAgQU0pCisgIDo6MDEgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAwOjAwOjAxIEFNKQorICAxMTo6NTkg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxMTowMDo1OSBBTSkKKworICAgTGVh ZGluZyB6ZXJvcyBjYW4gYmUgb21pdHRlZCwgYnV0IGl0IGlzIGN1c3RvbWFyeSBhbmQgbW9yZSBy ZWFkYWJsZSB0bworICAga2VlcCB0aGVtIGluIHRoZSBtaW51dGUgYW5kIHNlY29uZCBmaWVsZHM6 CisKKyAgMDM6MDI6MDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMDM6MDI6MDEg QU0pCisgIDM6MDI6MDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAzOjAyOjAx IEFNKQorICAzOjI6MSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwMzowMjow MSBBTSkKKworICAgQU0vUE0gbm90YXRpb24gaXMgYWNjZXB0ZWQgaWYgeW91IHdpc2ggdG8gdXNl IGl0OgorCisgIDExOjU5OjU5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDExOjU5 OjU5IEFNKQorICAxMTo1OTo1OUFNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxMTo1 OTo1OSBBTSkKKyAgMTE6NTk6NTlBLk0uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTE6 NTk6NTkgQU0pCisgIDExOjU5OjU5YW0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEx OjU5OjU5IEFNKQorICAxMTo1OTo1OWEubS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICgx MTo1OTo1OSBBTSkKKyAgMTE6NTk6NTlQTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo MTE6NTk6NTkgUE0gPSAyMzo1OTo1OSkKKyAgMTE6NTk6NTlQLk0uICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoMTE6NTk6NTkgUE0gPSAyMzo1OTo1OSkKKyAgMTE6NTk6NTlwbSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoMTE6NTk6NTkgUE0gPSAyMzo1OTo1OSkKKyAgMTE6NTk6 NTlwLm0uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTE6NTk6NTkgUE0gPSAyMzo1OTo1 OSkKKworICAgWW91IGNhbiBvbWl0IHRoZSBjb2xvbnMgaWYgeW91IHdpc2gsIGluIHdoaWNoIGNh c2UgS2VybWl0IHVzZXMgdGhlCisgICBmb2xsb3dpbmcgcnVsZXMgdG8gaW50ZXJwcmV0IHRoZSB0 aW1lOgorCisgICAgMS4gNiBkaWdpdHMgaXMgaGg6bW06c3MsIGUuZy4gMTIzNDU2IGlzIDEyOjM0 OjU2LgorICAgIDIuIDUgZGlnaXRzIGlzIGg6bW06c3MsIGUuZy4gMTIzNDUgaXMgMToyMzo0NS4K KyAgICAzLiA0IGRpZ2l0cyBpcyBoaDptbSwgZS5nLiAxMjM0IGlzIDEyOjM0LgorICAgIDQuIDMg ZGlnaXRzIGlzIGg6bW0sIGUuZy4gMTIzIGlzIDE6MjMuCisgICAgNS4gMiBkaWdpdHMgaXMgaGgs IGUuZy4gMTIgaXMgMTI6MDAuCisgICAgNi4gMSBkaWdpdCBpcyBoICh0aGUgaG91ciksIGUuZy4g MSBpcyAxOjAwLgorCisgICBFeGFtcGxlczoKKworICAxICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICgwMTowMDowMCBBTSkKKyAgMTAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoMTA6MDA6MDAgQU0pCisgIDIzMCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKDAyOjMwOjAwIEFNKQorICAyMzBwbSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICgwMjozMDowMCBQTSA9IDE0OjMwOjAwKQorICAxMTE1ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxMToxNTowMCBBTSkKKyAgMjMxNSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTE6MTU6MDAgUE0gPSAyMzoxNTowMCBQ TSkKKyAgMjMxNTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMDI6MzE6NTAg QU0pCisgIDIzMTUwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDIzOjE1OjAw IFBNKQorCis4LjEzLjMuIFRpbWUgWm9uZXMKKworICAgSWYgYSB0aW1lIGlzIGdpdmVuLCBpdCBj YW4gKGJ1dCBuZWVkIG5vdCkgYmUgZm9sbG93ZWQgYnkgYSB0aW1lIHpvbmUKKyAgIGRlc2lnbmF0 b3IuIElmIG5vIHRpbWUgem9uZSBpcyBpbmNsdWRlZCwgdGhlIHRpbWUgaXMgdHJlYXRlZCBhcyBs b2NhbAorICAgdGltZSBhbmQgbm8gdGltZXpvbmUgY29udmVyc2lvbnMgYXJlIHBlcmZvcm1lZC4K KworICAgVGhlIHByZWZlcnJlZCB0aW1lIHpvbmUgZGVzaWduYXRvciBpcyB0aGUgVVRDIE9mZnNl dCwgYXMgc3BlY2lmaWVkIGluCisgICBbNDgxXVJGQyAyODIyOiBhIHBsdXMgc2lnbiBvciBtaW51 cyBzaWduIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5CisgICBleGFjdGx5IGZvdXIgZGVjaW1hbCBk aWdpdHMsIHNpZ25pZnlpbmcgdGhlIGRpZmZlcmVuY2UgaW4gaGggKGhvdXJzKQorICAgYW5kIG1t IChtaW51dGVzKSBmcm9tIFVuaXZlcnNhbCBDb29yZGluYXRlZCBUaW1lIChVVEMsIGFsc28ga25v d24gYXMKKyAgIEdyZWVud2ljaCBNZWFuIFRpbWUsIG9yIEdNVCksIHdpdGggbmVnYXRpdmUgbnVt YmVycyB0byB0aGUgV2VzdCBhbmQKKyAgIHBvc2l0aXZlIG51bWJlcnMgdG8gdGhlIEVhc3QuIEZv ciBleGFtcGxlOgorCisgIEZyaSwgMTMgSnVsIDIwMDEgMTI6NTQ6MjkgLTA3MDAKKworICAgaW5k aWNhdGVzIGEgbG9jYWwgdGltZSBvZiAxMjo1NDoyOSB0aGF0IGlzIDA3IGhvdXJzIGFuZCAwMCBt aW51dGVzCisgICBiZWhpbmQgKGxlc3MgdGhhbiwgRWFzdCBvZikgVW5pdmVyc2FsIFRpbWUuIFRo ZSBzcGFjZSBpcyBvcHRpb25hbCwgc28KKyAgIHRoZSBleGFtcGxlIGNvdWxkIGFsc28gYmUgd3Jp dHRlbiBhczoKKworICBGcmksIDEzIEp1bCAyMDAxIDEyOjU0OjI5LTA3MDAKKworICAgVGhlIGZv bGxvd2luZyBzeW1ib2xpYyB0aW1lIHpvbmVzIGFyZSBhbHNvIGFjY2VwdGVkLCBhcyBzcGVjaWZp ZWQgYnkKKyAgIFs0ODJdUkZDIDI4MjIgYW5kL29yIGluIElTTyA4NjAxOgorCisgIEdNVCAgPSAg KzAwMDAgICAgICAgR3JlZW53aWNoIE1lYW4gVGltZQorICBaICAgID0gICswMDAwICAgICAgIFp1 bHUgKFplcm8gTWVyaWRpYW4pIFRpbWUKKyAgVVRDICA9ICArMDAwMCAgICAgICBVbml2ZXJzYWwg Q29vcmRpbmF0ZWQgVGltZQorICBVVCAgID0gICswMDAwICAgICAgIFVuaXZlcnNhbCBUaW1lCisg IEVEVCAgPSAgLTA0MDAgICAgICAgRWFzdGVybiAoVVNBKSBEYXlsaWdodCBUaW1lCisgIEVTVCAg PSAgLTA1MDAgICAgICAgRWFzdGVybiAoVVNBKSBTdGFuZGFyZCBUaW1lCisgIENEVCAgPSAgLTA1 MDAgICAgICAgQ2VudHJhbCAoVVNBKSBEYXlsaWdodCBUaW1lCisgIENTVCAgPSAgLTA2MDAgICAg ICAgQ2VudHJhbCAoVVNBKSBTdGFuZGFyZCBUaW1lCisgIE1EVCAgPSAgLTA2MDAgICAgICAgTW91 bnRhaW4gKFVTQSkgRGF5bGlnaHQgVGltZQorICBNU1QgID0gIC0wNzAwICAgICAgIE1vdW50YWlu IChVU0EpIFN0YW5kYXJkIFRpbWUKKyAgUERUICA9ICAtMDcwMCAgICAgICBQYWNpZmljIChVU0Ep IERheWxpZ2h0IFRpbWUKKyAgUFNUICA9ICAtMDgwMCAgICAgICBQYWNpZmljIChVU0EpIFN0YW5k YXJkIFRpbWUKKworICAgTm90ZSB0aGF0IEdNVCwgWiwgVVRDLCBhbmQgVVQgYWxsIGV4cHJlc3Mg dGhlIHNhbWUgY29uY2VwdDogc3RhbmRhcmQKKyAgIChub3QgZGF5bGlnaHQpIHRpbWUgYXQgdGhl IFplcm8gTWVyaWRpYW4uIFVUQywgYnkgdGhlIHdheSwgaXMgYW4KKyAgIGludGVybmF0aW9uYWwg c3RhbmRhcmQgc3ltYm9sIGFuZCBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIHRoZSBvcmRlciBvZgor ICAgdGhlIEVuZ2xpc2ggd29yZHMsIFVuaXZlcnNhbCBDb29yZGluYXRlZCBUaW1lLCBidXQgaXQg aGFwcGVucyB0byBoYXZlCisgICB0aGUgc2FtZSBpbml0aWFsIGxldHRlcnMgYXMgdGhlc2Ugd29y ZHMuIE9mIGNvdXJzZSBodW5kcmVkcyBvZiBvdGhlcgorICAgc3ltYm9saWMgdGltZXpvbmVzIGFu ZCB2YXJpYXRpb25zIGV4aXN0LCBidXQgdGhleSBhcmUgbm90IHN0YW5kYXJkaXplZCwKKyAgIGFu ZCBhcmUgdGhlcmVmb3JlIG5vdCBzdXBwb3J0ZWQgYnkgS2VybWl0LgorCisgICBXaGVuIGEgdGlt ZSB6b25lIGlzIGluY2x1ZGVkIHdpdGggYSB0aW1lLCB0aGUgdGltZSBpcyBjb252ZXJ0ZWQgdG8K KyAgIGxvY2FsIHRpbWUuIEluIGNhc2UgdGhlIGNvbnZlcnNpb24gY3Jvc3NlcyBhIG1pZG5pZ2h0 IGJvdW5kYXJ5LCB0aGUKKyAgIGRhdGUgaXMgYWRqdXN0ZWQgYWNjb3JkaW5nbHkuIEV4YW1wbGVz IGNvbnZlcnRpbmcgdG8gRVNUIChFYXN0ZXJuIFVTQQorICAgU3RhbmRhcmQgVGltZSA9IC0wNTAw KToKKworIDExOjMwOjAwICAgICAgPSAgMTE6MzA6MDAKKyAxMTozMDowMCBFU1QgID0gIDExOjMw OjAwCisgMTE6MzA6MDAgR01UICA9ICAwNjozMDowMAorIDExOjMwOjAwIFBTVCAgPSAgMTQ6MzA6 MDAKKyAxMTozMDowMFogICAgID0gIDA2OjMwOjAwCisgMTE6MzBQTSBHTVQgICA9ICAxODozMDow MAorIDExOjMwIC0wNTAwICAgPSAgMTE6MzA6MDAKKyAxMTozMCAtMDgwMCAgID0gIDA4OjMwOjAw CisgMTE6MzAgKzAyMDAgICA9ICAwNDozMDowMAorCisgICBVbmxpa2UgbW9zdCBvZiBLZXJtaXQn cyBvdGhlciBkYXRlLXRpbWUgY29udmVyc2lvbnMsIHRpbWV6b25lIGtub3dsZWRnZQorICAgKHNw ZWNpZmljYWxseSwgdGhlIG9mZnNldCBvZiBsb2NhbCB0aW1lIGZyb20gVVRDKSBpcyBlbWJvZGll ZCBpbiB0aGUKKyAgIHVuZGVybHlpbmcgb3BlcmF0aW5nIHN5c3RlbSwgbm90IGluIEtlcm1pdCBp dHNlbGYsIGFuZCBhbnkgY29udmVyc2lvbgorICAgZXJyb3JzIGluIHRoaXMgZGVwYXJ0bWVudCBh cmUgdGhlIGZhdWx0IG9mIHRoZSBPUy4gRm9yIGV4YW1wbGUsIG1vc3QKKyAgIFVOSVggcGxhdGZv cm1zIGRvIG5vdCBwZXJmb3JtIGNvbnZlcnNpb25zIGZvciB5ZWFycyBwcmlvciB0byAxOTcwLgor Cis4LjEzLjQuIERlbHRhIFRpbWUKKworICAgRGF0ZS90aW1lIGV4cHJlc3Npb25zIGNhbiBiZSBj b21wb3NlZCBvZiBhIGRhdGUgYW5kL29yIHRpbWUgYW5kIGEgZGVsdGEKKyAgIHRpbWUsIG9yIGEg ZGVsdGEgdGltZSBieSBpdHNlbGYuIFdoZW4gYSBkZWx0YSB0aW1lIGlzIGdpdmVuIGJ5IGl0c2Vs ZiwKKyAgIGl0IGlzIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IGxvY2FsIGRhdGUgYW5kIHRpbWUu IERlbHRhIHRpbWVzIGhhdmUgdGhlCisgICBmb2xsb3dpbmcgZ2VuZXJhbCBmb3JtYXQ6CisKKyAg eyssLX1bbnVtYmVyIHVuaXRzXVtoaFs6bW1bOnNzXV1dCisKKyAgIEluIG90aGVyIHdvcmRzLCBh IGRlbHRhIHRpbWUgYWx3YXlzIHN0YXJ0cyB3aXRoIGEgcGx1cyBvciBtaW51cyBzaWduLAorICAg d2hpY2ggaXMgZm9sbG93ZWQgYnkgYSAicGFydDEiLCBhICJwYXJ0MiIsIG9yIGJvdGguIFRoZSAi cGFydDEiLCBpZgorICAgZ2l2ZW4sIHNwZWNpZmllcyBhIG51bWJlciBvZiBkYXlzLCB3ZWVrcywg bW9udGhzLCBvciB5ZWFyczsgInBhcnQyIgorICAgc3BlY2lmaWVzIGEgdGltZSBpbiBoaDptbTpz cyBub3RhdGlvbi4gSW4gYXJpdGhtZXRpYyB0ZXJtcywgdGhlc2UKKyAgIHJlcHJlc2VudHMgc29t ZSBudW1iZXIgb2YgZGF5cyBvciBvdGhlciBiaWcgdGltZSB1bml0cywgYW5kIHRoZW4gYQorICAg ZnJhY3Rpb24gb2YgYSBkYXkgZXhwcmVzc2VkIGFzIGhvdXJzLCBtaW51dGVzLCBhbmQgc2Vjb25k czsgdGhlc2UgYXJlCisgICB0byBiZSBhZGRlZCB0byBvciBzdWJ0cmFjdGVkIGZyb20gdGhlIGdp dmVuIChvciBpbXBsaWVkKSBkYXRlIGFuZCB0aW1lLgorICAgVGhlIHN5bnRheCBpcyBzb21ld2hh dCBmbGV4aWJsZSwgYXMgc2hvd24gYnkgdGhlIGZvbGxvd2luZyBleGFtcGxlczoKKworICArMSBk YXkgICAgICAgICAgICAgICAgKFBsdXMgb25lIGRheSkKKyAgKzFkYXkgICAgICAgICAgICAgICAg IChEaXR0bykKKyAgKzFkICAgICAgICAgICAgICAgICAgIChEaXR0bykKKyAgKyAxIGRheSAgICAg ICAgICAgICAgIChEaXR0bykKKyAgKyAxIGRheSAzOjAwICAgICAgICAgIChQbHVzIG9uZSBkYXkg YW5kIDMgaG91cnMpCisgICsxZDM6MDAgICAgICAgICAgICAgICAoRGl0dG8pCisgICsxZDMgICAg ICAgICAgICAgICAgICAoRGl0dG8pCisgICszOjAwOjAwICAgICAgICAgICAgICAoUGx1cyAzIGhv dXJzKQorICArMzowMCAgICAgICAgICAgICAgICAgKERpdHRvKQorICArMyAgICAgICAgICAgICAg ICAgICAgKERpdHRvKQorICArMiBkYXlzICAgICAgICAgICAgICAgKFBsdXMgMiBkYXlzKQorICAt MTIgZGF5cyA3OjE0OjIyICAgICAgKE1pbnVzIDEyIGRheXMsIDcgaG91cnMsIDE0IG1pbnV0ZXMs IGFuZCAyMiBzZWNvbmRzKQorCisgICBUaGUgd29yZHMgIndlZWsiLCAibW9udGgiLCBhbmQgInll YXIiIGNhbiBiZSB1c2VkIGxpa2UgImRheSIgaW4gdGhlCisgICBleGFtcGxlcyBhYm92ZS4gQSB3 ZWVrIGlzIGV4YWN0bHkgZXF1aXZhbGVudCB0byA3IGRheXMuIFdoZW4gbW9udGhzIGFyZQorICAg c3BlY2lmaWVkLCB0aGUgbnVtZXJpYyBtb250aCBudW1iZXIgb2YgdGhlIGRhdGUgaXMgaW5jcmVt ZW50ZWQgb3IKKyAgIGRlY3JlbWVudGVkIGJ5IHRoZSBnaXZlbiBudW1iZXIsIGFuZCB0aGUgeWVh ciBhbmQgZGF5IGFkanVzdGVkCisgICBhY2NvcmRpbmdseSBpZiBuZWNlc3NhcnkgKGZvciBleGFt cGxlLCAzMS1KYW4tMjAwMSArMW1vbnRoID0KKyAgIDAzLU1hci0yMDAxIGJlY2F1c2UgRmVicnVh cnkgZG9lcyBub3QgaGF2ZSAzMSBkYXlzKS4gV2hlbiB5ZWFycyBhcmUKKyAgIHNwZWNpZmllZCwg dGhleSBhcmUgYWRkZWQgb3Igc3VidHJhY3RlZCB0byB0aGUgYmFzZSB5ZWFyLiBFeGFtcGxlcwor ICAgKGFzc3VtaW5nIHRoZSBjdXJyZW50IGRhdGUgaXMgMTAtQXVnLTIwMDEgYW5kIHRoZSBjdXJy ZW50IHRpbWUgaXMKKyAgIDE5OjIxOjExKToKKworICAxOC1TZXAtMjAwMSArMWRheSAgICAgICAg ICAgICAgKDIwMDEwOTE4IDAwOjAwOjAwKQorICB0b2RheSArMWRheSAgICAgICAgICAgICAgICAg ICAgKDIwMDEwODExIDAwOjAwOjAwKQorICBub3crMWQgICAgICAgICAgICAgICAgICAgICAgICAg KDIwMDEwODExIDE5OjIxOjExKQorICArIDEgZGF5ICAgICAgICAgICAgICAgICAgICAgICAgKDIw MDEwODExIDE5OjIxOjExKQorICArIDEgZGF5IDM6MTQ6NDIgICAgICAgICAgICAgICAgKDIwMDEw ODExIDIyOjM1OjU0KQorICArIDcgd2Vla3MgICAgICAgICAgICAgICAgICAgICAgKDIwMDEwOTI4 IDE5OjIxOjExKQorICArMWQzOjE0OjQyICAgICAgICAgICAgICAgICAgICAgKDIwMDEwODExIDIy OjM1OjU0KQorICArMXczOjE0OjQyICAgICAgICAgICAgICAgICAgICAgKDIwMDEwODE3IDIyOjM1 OjU0KQorICArMW0zOjE0OjQyICAgICAgICAgICAgICAgICAgICAgKDIwMDEwOTEwIDIyOjM1OjU0 KQorICArMXkzOjE0OjQyICAgICAgICAgICAgICAgICAgICAgKDIwMDIwODEwIDIyOjM1OjU0KQor ICAyIGZlYiAyMDAxICsgMTAgeWVhcnMgICAgICAgICAgKDIwMTEwMjA4IDAwOjAwOjAwKQorICAy MDAxLTAyLTA4ICsxMHkxMiAgICAgICAgICAgICAgKDIwMTEwMjA4IDEyOjAwOjAwKQorICAzMS1k ZWMtMTk5OSAyMzo1OTo1OSswMDowMDowMSAgKDIwMDAwMTAxIDAwOjAwOjAwKQorICAyOC1mZWIt MTk5NiArMWRheSAgICAgICAgICAgICAgKDE5OTYwMjI5IDAwOjAwOjAwKSAobGVhcCB5ZWFyKQor ICAyOC1mZWItMTk5NyArMWRheSAgICAgICAgICAgICAgKDE5OTcwMzAxIDAwOjAwOjAwKSAobm9u bGVhcCB5ZWFyKQorICAyOC1mZWItMTk5NyArMW1vbnRoICAgICAgICAgICAgKDE5OTcwMzI4IDAw OjAwOjAwKQorICAyOC1mZWItMTk5NyArMW1vbnRoIDExOjU5OjU5ICAgKDE5OTcwMzI4IDExOjU5 OjU5KQorICAyOC1mZWItMTk5NyArMjB5ZWFycyAgICAgICAgICAgKDIwMTcwMjI4IDAwOjAwOjAw KQorICAyOC1mZWItMTk5NyArODAwMHllYXJzICAgICAgICAgKDk5OTcwMjI4IDAwOjAwOjAwKQor CisgICBGb3IgY29tcGF0aWJpbGl0eSB3aXRoIFZNUywgdGhlIGZvbGxvd2luZyBzcGVjaWFsIGRl bHRhLXRpbWUgZm9ybWF0IGlzCisgICBhbHNvIGFjY2VwdGVkOgorCisgICtudW1iZXItaGg6bW06 c3MKKyAgLW51bWJlci1oaDptbTpzcworCisgICAobm8gc3BhY2VzKS4gVGhlIGh5cGhlbiBhZnRl ciB0aGUgbnVtYmVyIGluZGljYXRlcyBkYXlzLiBJdCBjb3JyZXNwb25kcworICAgZXhhY3RseSB0 byB0aGUgS2VybWl0IG5vdGF0aW9uOgorCisgICtudW1iZXJkaGg6bW06c3MKKyAgLW51bWJlcmRo aDptbTpzcworCisgICBUaGUgZm9sbG93aW5nIGZvcm1zIGFsbCBpbmRpY2F0ZSBleGFjdGx5IHRo ZSBzYW1lIGRhdGUgYW5kIHRpbWU6CisKKyAgMTgtU2VwLTIwMDEgMTI6MzQ6NTYgKzEtMzoyMzow MQorICAxOC1TZXAtMjAwMSAxMjozNDo1NiArMWQzOjIzOjAxCisgIDE4LVNlcC0yMDAxIDEyOjM0 OjU2ICsxIGRheSAzOjIzOjAxCisKKyAgIGFuZCBtZWFuICJhZGQgYSBkYXkgcGx1cyAzIGhvdXJz LCAyMyBtaW51dGVzLCBhbmQgMSBzZWNvbmQiIHRvIHRoZQorICAgZ2l2ZW4gZGF0ZS4KKworICAg Tm90ZSB0aGF0IGRlbHRhIHRpbWVzIGFyZSBub3QgYXQgYWxsIHRoZSBzYW1lIGFzIFVUQyBvZmZz ZXRzOyB0aGUKKyAgIGZvcm1lciBzcGVjaWZpZXMgYW4gYWRqdXN0bWVudCB0byB0aGUgZ2l2ZW4g ZGF0ZS90aW1lIGFuZCB0aGUgbGF0dGVyCisgICBzcGVjaWZpZXMgdGhhdCB0aGUgbG9jYWwgdGlt ZSBpcyBhIHBhcnRpY3VsYXIgZGlzdGFuY2UgZnJvbSBVbml2ZXJzYWwKKyAgIFRpbWUsIGZvciBl eGFtcGxlOgorCisgIDExLUF1Zy0yMDAxIDEyOjM0OjU2IC0wODAwICAgICAgICAgICgyMDAxMDgx MSAxNjozNDo1NiAtLSBVVEMgT2Zmc2V0KQorICAxMS1BdWctMjAwMSAxMjozNDo1NiAtMDg6MDAg ICAgICAgICAoMjAwMTA4MTEgMDQ6MzQ6NTYgLS0gRGVsdGEgdGltZSkKKworICAgSWYgeW91IGdp dmUgYSB0aW1lIGZvbGxvd2VkIGJ5IGEgbW9kaWZpZXIgdGhhdCBzdGFydHMgd2l0aCBhICsgb3Ig LQorICAgc2lnbiwgaG93IGRvZXMgS2VybWl0IGtub3cgd2hldGhlciBpdCdzIGEgVVRDIG9mZnNl dCBvciBhIGRlbHRhIHRpbWU/CisgICBJdCBpcyB0cmVhdGVkIGFzIGEgVVRDIG9mZnNldCBpZiB0 aGUgc2lnbiBpcyBmb2xsb3dlZCBieSBleGFjdGx5IGZvdXIKKyAgIGRlY2ltYWwgZGlnaXRzOyBv dGhlcndpc2UgaXQgaXMgYSBkZWx0YSB0aW1lLiBFeGFtcGxlcyAoZm9yIFVTQSBFYXN0ZXJuCisg ICBEYXlsaWdodCBUaW1lKToKKworICAxMS1BdWctMjAwMSAxMjozNDo1NiAtMDgwMCAgICAgICAg ICAoMjAwMTA4MTEgMTY6MzQ6NTYgLS0gVVRDIE9mZnNldCkKKyAgMTEtQXVnLTIwMDEgMTI6MzQ6 NTYgLTA4OjAwICAgICAgICAgKDIwMDEwODExIDA0OjM0OjU2IC0tIERlbHRhIHRpbWUpCisgIDEx LUF1Zy0yMDAxIDEyOjM0OjU2IC04MDAgICAgICAgICAgICgyMDAxMDgxMSAwNDozNDo1NiAtLSBE ZWx0YSB0aW1lKQorICAxMS1BdWctMjAwMSAxMjozNDo1NiAtOCAgICAgICAgICAgICAoMjAwMTA4 MTEgMDQ6MzQ6NTYgLS0gRGVsdGEgdGltZSkKKworICAgVGhlIGZpcnN0IGV4YW1wbGUgc2F5cyB0 aGF0IGF0IHNvbWUgdW5rbm93biBwbGFjZSB3aGljaCBpcyA4IGhvdXJzCisgICBhaGVhZCBvZiBV bml2ZXJzYWwgVGltZSwgdGhlIHRpbWUgaXMgMTI6MzQ6NTYsIGFuZCB0aGlzIGNvcnJlc3BvbmRz IHRvCisgICAxNjozNDo1NiBpbiBFYXN0ZXJuIERheWxpZ2h0IHRpbWUuIFRoZSBzZWNvbmQgZXhh bXBsZSBzYXlzIHRvIHN1YnRyYWN0CisgICA4IGhvdXJzIGZyb20gdGhlIGxvY2FsIHRpbWUuIFRo ZSB0aGlyZCBhbmQgZm91cnRoIGFyZSBkZWx0YSB0aW1lcworICAgYmVjYXVzZSwgZXZlbiB0aG91 Z2ggYSBjb2xvbiBpcyBub3QgaW5jbHVkZWQsIHRoZSB0aW1lIGRvZXMgbm90IGNvbnNpc3QKKyAg IG9mIGV4YWN0bHkgNCBkaWdpdHMuCisKKyAgIFdoZW4gYSBkZWx0YSB0aW1lIGlzIHdyaXR0ZW4g YWZ0ZXIgYSB0aW1lem9uZSwgaG93ZXZlciwgdGhlcmUgaXMgbm8KKyAgIGFtYmlndWl0eSBhbmQg bm8gc3ludGF4IGRpc3RpbmN0aW9uIGlzIHJlcXVpcmVkOgorCisgIDExLUF1Zy0yMDAxIDEyOjM0 OjU2IC0wODAwIC0wODAwICAgICgyMDAxMDgxMSAwODozNDo1NikKKyAgMTEtQXVnLTIwMDEgMTI6 MzQ6NTYgLTA4MDAgLTA4OjAwICAgKERpdHRvKQorICAxMS1BdWctMjAwMSAxMjozNDo1NiAtMDg6 MDAgLTA4OjAwICAoSWxsZWdhbCkKKworOC4xMy41LiBUaGUgREFURSBDb21tYW5kCisKKyAgIE9i dmlvdXNseSBhIGdyZWF0IG1hbnkgY29tYmluYXRpb25zIG9mIGRhdGUsIHRpbWUsIHRpbWUgem9u ZSwgYW5kIGRlbHRhCisgICB0aW1lIGFyZSBwb3NzaWJsZSwgYXMgd2VsbCBhcyBtYW55IGZvcm1h dHRpbmcgb3B0aW9ucy4gVGhlIHB1cnBvc2Ugb2YKKyAgIGFsbCB0aGlzIGZsZXhpYmlsaXR5IGlz IHRvIGNvbXBseSB3aXRoIGFzIG1hbnkgc3RhbmRhcmRzIGFzIHBvc3NpYmxlIC0tCisgICBJbnRl cm5ldCBSRkNzLCBJU08gc3RhbmRhcmRzLCBhbmQgcHJvdmVuIGNvcnBvcmF0ZSBzdGFuZGFyZHMg LS0gYXMgd2VsbAorICAgYXMgd2l0aCBub3RhdGlvbnMgY29tbW9ubHkgdXNlZCBieSByZWFsIHBl b3BsZSwgaW4gb3JkZXIgdGhhdCBkYXRlcyBhbmQKKyAgIHRpbWVzIGZyb20gdGhlIHdpZGVzdCB2 YXJpZXR5IG9mIHNvdXJjZXMgY2FuIGJlIGFzc2lnbmVkIHRvIGEgdmFyaWFibGUKKyAgIGFuZCB1 c2VkIGluIGFueSBkYXRlLXRpbWUgZmllbGQgaW4gYW55IEtlcm1pdCBjb21tYW5kLgorCisgICBZ b3UgY2FuIHRlc3QgYW55IGRhdGUtYW5kL29yLXRpbWUgZm9ybWF0IHdpdGggdGhlIERBVEUgY29t bWFuZCwgd2hpY2gKKyAgIGNvbnZlcnRzIGl0IHRvIHN0YW5kYXJkIHl5eXltbWRkIGhoOm1tOnNz IGZvcm1hdCBpZiBpdCBpcyB1bmRlcnN0b29kLAorICAgb3IgZWxzZSBnaXZlcyBhbiBleHBsaWNp dCBlcnJvciBtZXNzYWdlIChyYXRoZXIgdGhhbiBqdXN0ICJCQUQgREFURSIgYXMKKyAgIGluIHBy ZXZpb3VzIEMtS2VybWl0IHJlbGVhc2VzKSB0byBpbmRpY2F0ZSB3aGF0IGlzIHdyb25nIHdpdGgg aXQuCisgICBFeGFtcGxlcyAob24gVHVlc2RheSwgMzEgSnVseSAyMDAxIGluIE5ldyBZb3JrIENp dHksIEVhc3Rlcm4gRGF5bGlnaHQKKyAgIFRpbWUsIFVUQyAtMDQwMCk6CisKKyAgREFURSBjb21t YW5kIGFyZ3VtZW50ICAgICAgICAgICAgICAgICAgIFJlc3VsdAorICAxMjozMCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgMjAwMTA3MzEgMTI6MzA6MDAKKyAgMTI6MzA6MDEgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwMDEwNzMxIDEyOjMwOjAxCisgIDEyOjMwOjAx LjUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMDAxMDczMSAxMjozMDowMgorICAxMjMw ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAwMTA3MzEgMTI6MzA6MDAKKyAg MjMwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwMDEwNzMxIDAyOjMwOjAw CisgIDIzMCsxZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMDAxMDgwMSAwMjoz MDowMAorICAyMzArMWQzOjAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAwMTA4MDEg MDU6MzA6MDAKKyAgMjAwMTA3MTggMTk6MjE6MTUgICAgICAgICAgICAgICAgICAgICAgIDIwMDEw NzE4IDE5OjIxOjE1CisgIDIwMDEwNzE4XzE5MjExNSAgICAgICAgICAgICAgICAgICAgICAgICAy MDAxMDcxOCAxOToyMToxNQorICAyMDAxMDcxOFQxOTIxMTUgICAgICAgICAgICAgICAgICAgICAg ICAgMjAwMTA3MTggMTk6MjE6MTUKKyAgMTggSnVsIDIwMDEgKzA0MDAgICAgICAgICAgICAgICAg ICAgICAgIDIwMDEwNzE3IDIzOjU5OjU5CisgIDE4IEp1bCAyMDAxIDE5MjExNSAgICAgICAgICAg ICAgICAgICAgICAyMDAxMDcxOCAxOToyMToxNQorICAxOCBKdWwgMjAwMSAxOTIxMTUuOCAgICAg ICAgICAgICAgICAgICAgMjAwMTA3MTggMTk6MjE6MTYKKyAgMTgtSnVsLTIwMDFUMTkyMSAgICAg ICAgICAgICAgICAgICAgICAgIDIwMDEwNzE4IDE5OjIxOjAwCisgIDE4LUp1bC0yMDAxIDE5MjFa ICAgICAgICAgICAgICAgICAgICAgICAyMDAxMDcxOCAxNToyMTowMAorICAxOC1KdWwtMjAwMSAx OTIxIEdNVCAgICAgICAgICAgICAgICAgICAgMjAwMTA3MTggMTU6MjE6MDAKKyAgMTgtSnVsLTIw MDEgMTkyMSBVVEMgICAgICAgICAgICAgICAgICAgIDIwMDEwNzE4IDE1OjIxOjAwCisgIDE4LUp1 bC0yMDAxIDE5MjEgWiAgICAgICAgICAgICAgICAgICAgICAyMDAxMDcxOCAxNToyMTowMAorICAx OC1KdWwtMjAwMSAxOTIxWiAgICAgICAgICAgICAgICAgICAgICAgMjAwMTA3MTggMTU6MjE6MDAK KyAgMTgtSnVsLTIwMDEgMTkyMSAtMDQ6MDA6MDAgICAgICAgICAgICAgIDIwMDEwNzE4IDE5OjIx OjAwCisgIDIxLUp1bC0yMDAxXzA4OjIwOjAwYW0gICAgICAgICAgICAgICAgICAyMDAxMDcyMSAw ODoyMDowMAorICAyMS1KdWwtMjAwMV84OjIwOjAwUC5NLiAgICAgICAgICAgICAgICAgMjAwMTA3 MjEgMjA6MjA6MDAKKyAgRnJpIEp1bCAyMCAxMToyNjoyNSAyMDAxICAgICAgICAgICAgICAgIDIw MDEwNzIwIDExOjI2OjI1CisgIEZyaSBKdWwgMjAgMTE6MjY6MjUgR01UIDIwMDEgICAgICAgICAg ICAyMDAxMDcyMCAwNzoyNjoyNQorICBTdW4sIDkgQXByIDIwMDAgMDY6NDY6NDYgKzAxMDAgICAg ICAgICAgMjAwMDA0MDkgMDE6NDY6NDYKKyAgU3VuZGF5LCA5IEFwciAyMDAwIDA2OjQ2OjQ2ICsw MTAwICAgICAgIDIwMDAwNDA5IDAxOjQ2OjQ2CisgIG5vdyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAyMDAxMDczMSAxOTo0MToxMgorICB0b2RheSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgMjAwMTA3MzEgMDA6MDA6MDAKKyAgdG9kYXkgMDk6MDAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDIwMDEwNzMxIDA5OjAwOjAwCisgIHRvbW9ycm93ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAyMDAxMDgwMSAwMDowMDowMAorICB0b21vcnJvdyAw OTowMCAgICAgICAgICAgICAgICAgICAgICAgICAgMjAwMTA4MDEgMDk6MDA6MDAKKyAgdG9tb3Jy b3cgMDk6MDAgR01UICAgICAgICAgICAgICAgICAgICAgIDIwMDEwODAxIDA1OjAwOjAwCisgIHll c3RlcmRheSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMDAxMDczMCAwMDowMDowMAor ICB5ZXN0ZXJkYXkgMDk6MDAgICAgICAgICAgICAgICAgICAgICAgICAgMjAwMTA3MzAgMDk6MDA6 MDAKKyAgKyAzIGRheXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwMDEwODAzIDAw OjAwOjAwCisgICszIGRheXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMDAxMDgw MyAwMDowMDowMAorICArM2RheXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAw MTA4MDMgMDA6MDA6MDAKKyAgKyAzZGF5cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDIwMDEwODAzIDAwOjAwOjAwCisgICsgMyBkYXlzIDA5OjAwICAgICAgICAgICAgICAgICAgICAg ICAgICAyMDAxMDgwMyAwOTowMDowMAorICArIDIgd2Vla3MgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgMjAwMTA4MTQgMDA6MDA6MDAKKyAgKyAxIG1vbnRoICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDIwMDEwODMxIDAwOjAwOjAwCisgIC0gNyBtb250aHMgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAyMDAwMTIzMSAwMDowMDowMAorICArIDEwIHllYXJzICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgMjAxMTA3MzEgMDA6MDA6MDAKKyAgZnJpZGF5ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDIwMDEwODAzIDAwOjAwOjAwCisgIHNhdHVyZGF5ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMDAxMDgwNCAwMDowMDowMAorICBzdW5kYXkg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAwMTA4MDUgMDA6MDA6MDAKKyAgbW9u ZGF5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwMDEwODA2IDAwOjAwOjAwCisg IHR1ZXNkYXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMDAxMDczMSAwMDowMDow MAorICB3ZWRuZXNkYXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAwMTA4MDEgMDA6 MDA6MDAKKyAgdGh1cnNkYXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwMDEwODAy IDAwOjAwOjAwCisgIGZyaWRheSAwNzowMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMDAx MDgwMyAwNzowMDowMAorICB0aHVyc2RheSAxOjAwcG0gICAgICAgICAgICAgICAgICAgICAgICAg MjAwMTA4MDIgMTM6MDA6MDAKKyAgdGh1cnNkYXkgMTowMHBtIEdNVCAgICAgICAgICAgICAgICAg ICAgIDIwMDEwODAyIDA5OjAwOjAwCisgIFRodSwgMTAgTm92IDk0IDEwOjUwOjQ3IEVTVCAgICAg ICAgICAgICAxOTk0MTExMCAxMDo1MDo0NworICBGcmksIDIwIE9jdCAxOTk1IDE4OjM1OjE1IC0w NDAwIChFRFQpICAgMTk5NTEwMjAgMTg6MzU6MTUKKyAgMzEvMTIvMjAwMSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDIwMDExMjMxIDAwOjAwOjAwCisgIDEyLzMxLzIwMDEgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAyMDAxMTIzMSAwMDowMDowMAorICAyMDAxLUp1bHktMjAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgMjAwMTA3MjAgMDA6MDA6MDAKKyAgMjAwMS1TZXB0ZW1i ZXItMzAgICAgICAgICAgICAgICAgICAgICAgIDIwMDEwOTMwIDAwOjAwOjAwCisgIDMwLVNlcHRl bWJlci0yMDAxICAgICAgICAgICAgICAgICAgICAgICAyMDAxMDkzMCAwMDowMDowMAorICBTZXAg MzAsIDIwMDEgMTI6MzQ6NTYgICAgICAgICAgICAgICAgICAgMjAwMTA5MzAgMTI6MzQ6NTYKKyAg U2VwdGVtYmVyIDMwLCAyMDAxICAgICAgICAgICAgICAgICAgICAgIDIwMDEwOTMwIDAwOjAwOjAw CisgIFNlcHRlbWJlciAzMCwgMjAwMSA2MzAgICAgICAgICAgICAgICAgICAyMDAxMDkzMCAwNjoz MDowMAorICBTZXB0ZW1iZXIgMzAgMjAwMSA2MzAgICAgICAgICAgICAgICAgICAgMjAwMTA5MzAg MDY6MzA6MDAKKyAgU2VwLTMwLTIwMDEgMTI6MzQ6NTkgICAgICAgICAgICAgICAgICAgIDIwMDEw OTMwIDEyOjM0OjU5CisgIDIwMDEwODA3MTEzNTQyLjAxNCAgICAgICAgICAgICAgICAgICAgICAy MDAxMDgwNyAxMTozNS40MgorICAyMDAxMDgwNzExMzU0Mi4wMTRaICAgICAgICAgICAgICAgICAg ICAgMjAwMTA4MDcgMDc6MzU6NDIKKworOC4xMy42LiBOZXcgRGF0ZS1UaW1lIEZ1bmN0aW9ucwor CisgICBJbiB0aGUgZm9sbG93aW5nIGRlc2NyaXB0aW9ucywgZGF0ZS10aW1lIGZ1bmN0aW9uIGFy Z3VtZW50cyBhcmUgdGhlCisgICBzYW1lIGZyZWUtZm9ybWF0IGRhdGUtdGltZSBzdHJpbmdzIGRp c2N1c3NlZCBhYm92ZSwgd2l0aCB0aGUgc2FtZQorICAgZGVmYXVsdHMgZm9yIG1pc3NpbmcgZmll bGRzLiBUaGV5IGFyZSBhdXRvbWF0aWNhbGx5IGNvbnZlcnRlZCB0bworICAgc3RhbmRhcmQgZm9y bWF0IGludGVybmFsbHkgcHJpb3IgdG8gcHJvY2Vzc2luZy4KKworICAgXGZjdnRkYXRlKGQxKQor ICAgICAgICAgIENvbnZlcnRzIHRoZSBkYXRlLXRpbWUgZDEgdG8gc3RhbmRhcmQgZm9ybWF0IGFu ZCBsb2NhbCB0aW1lLgorICAgICAgICAgIFRoaXMgZnVuY3Rpb24gaXMgbm90IG5ldywgYnV0IG5v dyBpdCBhY2NlcHRzIGEgd2lkZXIgcmFuZ2Ugb2YKKyAgICAgICAgICBhcmd1bWVudCBmb3JtYXRz IHRoYXQgY2FuIGluY2x1ZGUgdGltZXpvbmVzIGFuZC9vciBkZWx0YSB0aW1lcy4KKyAgICAgICAg ICBJZiB0aGUgZmlyc3QgYXJndW1lbnQgaXMgb21pdHRlZCwgdGhlIGN1cnJlbnQgZGF0ZSBhbmQg dGltZSBhcmUKKyAgICAgICAgICBhc3N1bWVkLiBUaGUgb3B0aW9uYWwgc2Vjb25kIGFyZ3VtZW50 IGlzIGEgZm9ybWF0IGNvZGUgZm9yIHRoZQorICAgICAgICAgIHJlc3VsdDoKKworICAgICBuMSA9 IDE6IHl5eXktbW1tLWRkIGhoOm1tOnNzIChtbW0gPSBFbmdsaXNoIDMtbGV0dGVyIG1vbnRoCisg ICAgIGFiYnJldmlhdGlvbikKKyAgICAgbjEgPSAyOiBkZC1tbW0teXl5eSBoaDptbTpzcyAoZGl0 dG8pCisgICAgIG4xID0gMzogeXl5eW1tZGRoaG1tc3MgKGFsbCBudW1lcmljKQorCisgICBcZnV0 Y2RhdGUoZDEpCisgICAgICAgICAgQ29udmVydHMgdGhlIGRhdGUtdGltZSBkMSB0byBVbml2ZXJz YWwgQ29vcmRpbmF0ZWQgVGltZSAoVVRDKSwKKyAgICAgICAgICBhbHNvIGtub3duIGFzIEdNVCBv ciBadWx1IG9yIFplcm8tTWVyaWRpYW4gdGltZS4gVGhlIGRlZmF1bHQgZDEKKyAgICAgICAgICBp cyBOT1cuIElmIGQxIGlzIGEgdmFsaWQgZGF0ZS10aW1lLCB0aGUgVVRDIHJlc3VsdCBpcyByZXR1 cm5lZAorICAgICAgICAgIGluIHN0YW5kYXJkIGZvcm1hdCwgeXl5eW1tZGQgaGg6c3M6bW0uCisK KyAgIFxmY21wZGF0ZXMoZDEsZDIpCisgICAgICAgICAgQ29tcGFyZXMgdHdvIGZyZWUtZm9ybWF0 IGRhdGUtdGltZXMsIGQxIGFuZCBkMiwgYW5kLCBpZiBib3RoCisgICAgICAgICAgYXJndW1lbnRz IGFyZSB2YWxpZCwgcmV0dXJucyBhIG51bWJlcjogLTEgaWYgZDEgaXMgZWFybGllciB0aGFuCisg ICAgICAgICAgKGJlZm9yZSkgZDI7IDAgaWYgZDEgaXMgdGhlIHNhbWUgYXMgZDI7IDEgaWYgZDEg aXMgbGF0ZXIgdGhhbgorICAgICAgICAgIChhZnRlcikgZDIuCisKKyAgIFxmZGlmZmRhdGVzKGQx LGQyKQorICAgICAgICAgIENvbXB1dGVzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdHdvIGZyZWUt Zm9ybWF0IGRhdGUtdGltZXMsIGQxCisgICAgICAgICAgYW5kIGQyLiBJZiBib3RoIGFyZ3VtZW50 cyBhcmUgdmFsaWQsIHJldHVybnMgYSBkZWx0YSB0aW1lIHdoaWNoCisgICAgICAgICAgaXMgbmVn YXRpdmUgaWYgZDEgaXMgZWFybGllciB0aGFuIChiZWZvcmUpIGQyIGFuZCBwb3NpdGl2ZQorICAg ICAgICAgIG90aGVyd2lzZS4gSWYgZDEgYW5kIGQyIGFyZSBlcXVhbCwgdGhlIHJlc3VsdCBpcyAi KzA6MDAiLgorICAgICAgICAgIE90aGVyd2lzZSwgdGhlIHJlc3VsdCBjb25zaXN0cyBvZiB0aGUg bnVtYmVyIG9mIGRheXMsIGhvdXJzLAorICAgICAgICAgIG1pbnV0ZXMsIGFuZCBzZWNvbmRzIHRo YXQgc2VwYXJhdGUgdGhlIHR3byBkYXRlLXRpbWVzLiBJZiB0aGUKKyAgICAgICAgICBudW1iZXIg b2YgZGF5cyBpcyB6ZXJvLCBpdCBpcyBvbWl0dGVkLiBJZiB0aGUgbnVtYmVyIG9mIGRheXMgaXMK KyAgICAgICAgICBub256ZXJvIGJ1dCB0aGUgaG91cnMsIG1pbnV0ZXMsIGFuZCBzZWNvbmRzIGFy ZSBhbGwgemVybywgdGhlCisgICAgICAgICAgdGltZSBpcyBvbWl0dGVkLiBpZiB0aGUgc2Vjb25k cyBhcmUgemVybywgdGhleSBhcmUgb21pdHRlZC4KKworICAgXGZkZWx0YTJzZWNzKGR0KQorICAg ICAgICAgIENvbnZlcnRzIGEgZGVsdGEgdGltZSB0byBzZWNvbmRzLiBGb3IgZXhhbXBsZSwgIisx ZDAwOjAwOjAxIiB0bworICAgICAgICAgIDg2NDAxLiBWYWxpZCBkZWx0YSB0aW1lcyBtdXN0IHN0 YXJ0IHdpdGggYSArIG9yIC0gc2lnbi4gRGF5cyBhcmUKKyAgICAgICAgICBhY2NlcHRlZCBhcyB0 aW1lIHVuaXRzLCBidXQgbm90IHllYXJzLCBtb250aHMsIG9yIHdlZWtzLiBJZiB0aGUKKyAgICAg ICAgICByZXN1bHQgd291bGQgb3ZlcmZsb3cgYSBjb21wdXRlciBsb25nIHdvcmQgKGFzIHdvdWxk IGhhcHBlbiB3aXRoCisgICAgICAgICAgMzItYml0IGxvbmcgd29yZHMgd2hlbiB0aGUgbnVtYmVy IG9mIGRheXMgaXMgZ3JlYXRlciB0aGFuCisgICAgICAgICAgMjQ4NTQpLCB0aGUgZnVuY3Rpb24g ZmFpbHMuCisKKyAgIEhJTlQ6IEFsdGhvdWdoIEtlcm1pdCBoYXMgYSBudW1iZXIgb2YgYnVpbHQt aW4gZGF0ZSBhbmQgdGltZSB2YXJpYWJsZXMsCisgICBpdCBkb2Vzbid0IGhhdmUgYSBzaW5nbGUg b25lIHN1aXRhYmxlIGZvciB3cml0aW5nIGEgdGltZXN0YW1wLiBGb3IgdGhpcworICAgeW91IHdv dWxkIG5vcm1hbGx5IHVzZSBzb21ldGhpbmcgbGlrZSAiXHYobmRhdGUpIFx2KHRpbWUpIi4gQnV0 CisgICBcZmN2dGRhdGUoKSAod2l0aCBubyBhcmd1bWVudHMpIGlzIGVxdWl2YWxlbnQ6IGl0IHJl dHVybnMgdGhlIGN1cnJlbnQKKyAgIGRhdGUgYW5kIHRpbWUgaW4geXl5eW1tZGQgaGg6bW06c3Mg Zm9ybWF0LCBzdWl0YWJsZSBmb3IgdGltZSBzdGFtcGluZy4KKworOC4xMy43LiBEYXRlLVRpbWUg UHJvZ3JhbW1pbmcgRXhhbXBsZXMKKworICAgSGVyZSdzIGEgbWFjcm8gdGhhdCBjb252ZXJ0cyBh bnkgZGF0ZS10aW1lIHRvIFVUQywgd2hpY2ggeW91IG1pZ2h0IHVzZQorICAgaWYgQy1LZXJtaXQg ZGlkbid0IGFscmVhZHkgaGF2ZSBhIFxmdXRjZGF0ZSgpIGZ1bmN0aW9uOgorCisgIGRlZmluZSB1 dGNkYXRlIHsKKyAgICAgIC5sb2NhbCA6PSBcZmN2dGRhdGUoXCUqKSAgICAgICAgICAgICAgICAg OyAxLgorICAgICAgLnRtcCA6PSBcZmN2dGRhdGUoXG0obG9jYWwpVVRDKSAgICAgICAgICA7IDIu CisgICAgICAub2Zmc2V0IDo9IFxmZGlmZmRhdGUoXG0obG9jYWwpLFxtKHRtcCkpIDsgMy4KKyAg ICAgIC51dGMgOj0gXGZjdnRkYXRlKFxtKGxvY2FsKVxtKG9mZnNldCkpICAgOyA0LgorICAgICAg c2hvIG1hYyB1dGMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IDUuCisgIH0KKworICAg QnJpZWYgZXhwbGFuYXRpb246IExpbmUgMSBjb252ZXJ0cyB0aGUgbWFjcm8gYXJndW1lbnQsIGEg ZnJlZS1mb3JtYXQKKyAgIGRhdGUtdGltZSwgdG8gc3RhbmRhcmQtZm9ybWF0IGxvY2FsIHRpbWUu IExpbmUgMiBhcHBlbmRzIHRoZSAiVVRDIgorICAgdGltZXpvbmUgdG8gdGhlIGxvY2FsIHRpbWUg YW5kIGNvbnZlcnRzIHRoZSByZXN1bHQgdG8gbG9jYWwgdGltZS4gSW4KKyAgIG90aGVyIHdvcmRz LCB3ZSB0YWtlIHRoZSBzYW1lIHRpbWUgYXMgdGhlIGxvY2FsIHRpbWUsIGJ1dCBwcmV0ZW5kIGl0 J3MKKyAgIFVUQyB0aW1lLCBhbmQgY29udmVydCBpdCB0byBsb2NhbCB0aW1lLiBGb3IgZXhhbXBs ZSwgaWYgTmV3IFlvcmsgdGltZQorICAgaXMgNCBob3VycyBhaGVhZCBvZiBVVEMsIHRoZW4gNjow MHBtIE5ldyBZb3JrIHRpbWUgaXMgMjowMHBtIFVUQy4gTGluZQorICAgMyBnZXRzIHRoZSBkaWZm ZXJlbmNlIG9mIHRoZSB0d28gcmVzdWx0cyAoZS5nLiAiKzA0OjAwIikuIExpbmUgNAorICAgYXBw ZW5kcyB0aGUgZGlmZmVyZW5jZSAoZGVsdGEgdGltZSkgdG8gdGhlIGxvY2FsIHRpbWUsIGFuZCBj b252ZXJ0cyBpdAorICAgYWdhaW4sIHdoaWNoIGFkZHMgKG9yIHN1YnRyYWN0cykgdGhlIFVUQyBv ZmZzZXQgdG8gdGhlIGdpdmVuIHRpbWUuIExpbmUKKyAgIDUgZGlzcGxheXMgdGhlIHJlc3VsdC4K KworICAgSGVyZSdzIGEgc2NyaXB0IHRoYXQgb3BlbnMgYSB3ZWIgcGFnZSwgZ2V0cyBpdHMgaGVh ZGVycyBpbnRvIGFuIGFycmF5LAorICAgc2NhbnMgdGhlIGFycmF5IGZvciB0aGUgIkxhc3QtTW9k aWZpZWQ6IiBoZWFkZXIsIGFuZCBpbnRlcnByZXRzIGl0OgorICBodHRwIG9wZW4gd3d3LmNvbHVt YmlhLmVkdQorICBpZiBmYWlsIHN0b3AgMSBIVFRQIE9QRU4gZmFpbGVkCisgIGh0dHAgL2FycmF5 OmEgaGVhZCBpbmRleC5odG1sIC9kZXYvbnVsbAorICBpZiBmYWlsIHN0b3AgMSBIVFRQIEdFVCBm YWlsZWQKKyAgc2hvdyBhcnJheSBhCisgIGZvciBcJWkgMSBcZmRpbSgmYSkgMSB7CisgICAgICAu XCV4IDo9IFxmaW5kZXgoOixcJmFbXCVpXSkKKyAgICAgIGlmIG5vdCBcJXggY29udGludWUKKyAg ICAgIC50YWcgOj0gXGZsZWZ0KFwmYVtcJWldLFwleC0xKQorICAgICAgLnZhbCA6PSBcZmx0cmlt KFxmc3Vic3RyKFwmYVtcJWldLFwleCsxKSkKKyAgICAgIGlmICggZXEgIlxtKHRhZykiICJMYXN0 LU1vZGlmaWVkIiApIHsKKyAgICAgICAgICBlY2hvIEhUVFAgRGF0ZTogXG0odmFsKQorICAgICAg ICAgIC5yZGF0ZSA6PSBcZmN2dGRhdGUoXG0odmFsKSkKKyAgICAgICAgICBlY2hvIHtTdGFuZGFy ZCBEYXRlIChsb2NhbCk6IFxtKHJkYXRlKX0KKyAgICAgICAgICBlY2hvIHtTdGFuZGFyZCBEYXRl IChVVEMpOiAgIFxmdXRjZGF0ZShcbShyZGF0ZSkpfQorICAgICAgICAgIGJyZWFrCisgICAgICB9 CisgIH0KKyAgaHR0cCBjbG9zZQorCisgICBUaGUgcmVzdWx0OgorCisgIEhUVFAgRGF0ZTogTW9u LCAxMyBBdWcgMjAwMSAyMDowNTo0MiBHTVQKKyAgU3RhbmRhcmQgRGF0ZSAobG9jYWwpOiAyMDAx MDgxMyAxNjowNTo0MgorICBTdGFuZGFyZCBEYXRlIChVVEMpOiAgIDIwMDEwODEzIDIwOjA1OjQy CisKKyAgIEFzIHlvdSBjYW4gc2VlLCBLZXJtaXQgaGFkIG5vIHRyb3VibGUgZGVjb2RpbmcgdGhl IGRhdGUtdGltZS1zdHJpbmcKKyAgIGZyb20gdGhlIHdlYnNpdGUsIGNvbnZlcnRpbmcgdG8gbG9j YWwgdGltZSwgYW5kIGNvbnZlcnRpbmcgYmFjayB0byBVVEMKKyAgIHdpdGggbm8gY29uZmxpY3Rz IG9yIGxvc3Mgb2YgaW5mb3JtYXRpb24uIElmIGl0IGhhZCBiZWVuIGluIGFueSBvdGhlcgorICAg a25vd24gZm9ybWF0LCB0aGUgcmVzdWx0IHdvdWxkIGhhdmUgYmVlbiB0aGUgc2FtZS4KKworICAg Tm93IHN1cHBvc2Ugd2Ugd2FudCB0byBkb3dubG9hZCB0aGUgd2ViIHBhZ2Ugb25seSBpZiBpdCBp cyBuZXdlciB0aGFuCisgICBvdXIgbG9jYWwgY29weS4gVGhlIFxmZGF0ZShmaWxlbmFtZSkgZnVu Y3Rpb24gKHdoaWNoIHJldHVybnMgdGhlCisgICBtb2RpZmljYXRpb24gZGF0ZS10aW1lIG9mIHRo ZSBnaXZlbiBmaWxlKSBhbmQgdGhlIG5ldyBcZmNtcGRhdGVzKCkKKyAgIGZ1bmN0aW9uIG1ha2Ug aXQgZWFzeS4gSW5zZXJ0IHRoZSBmb2xsb3dpbmcganVzdCBiZWZvcmUgdGhlIEJSRUFLCisgICBz dGF0ZW1lbnQ6CisKKyAgaWYgKCA8IDAgXGZjbXBkYXRlcyhcbShyZGF0ZSksXGZkYXRlKGluZGV4 Lmh0bWwpKSApIHsKKyAgICAgZWNobyBHRVRUSU5HIGluZGV4Lmh0bWwuLi4KKyAgICAgaHR0cCBn ZXQgaW5kZXguaHRtbCBpbmRleC5odG1sCisgICAgIGlmIHN1Y2Nlc3MgZWNobyBIVFRQIEdFVCBP SworICB9IGVsc2UgeworICAgICBlY2hvIGluZGV4Lmh0bWw6IG5vIHVwZGF0ZSBuZWVkZWQKKyAg fQorICBodHRwIGNsb3NlCisgIGV4aXQKKworICAgVGhpcyBzYXlzLCAiaWYgMCBpcyBsZXNzIHRo YW4gdGhlIGNvbXBhcmlzb24gb2YgdGhlIHJlbW90ZSBmaWxlIGRhdGUKKyAgIGFuZCB0aGUgbG9j YWwgZmlsZSBkYXRlLCBnZXQgdGhlIHJlbW90ZSBmaWxlLCBvdGhlcndpc2Ugc2tpcCBpdC4iIEFu ZAorICAgaXQgYXV0b21hdGljYWxseSByZWNvbmNpbGVzIHRoZSB0aW1lLXpvbmUgZGlmZmVyZW5j ZSAoaWYgYW55KS4KKworICAgSXQgd291bGQgYmUgbmljZSB0byBiZSBhYmxlIHRvIGV4dGVuZCB0 aGlzIHNjcmlwdCBpbnRvIGEKKyAgIGdlbmVyYWwtcHVycG9zZSB3ZWJzaXRlIHVwZGF0ZXIsIGJ1 dCB1bmZvcnR1bmF0ZWx5IEhUVFAgcHJvdG9jb2wKKyAgIGRvZXNuJ3QgcHJvdmlkZSBhbnkgbWVj aGFuaXNtIGZvciB0aGUgY2xpZW50IHRvIGFzayB0aGUgc2VydmVyIGZvciBhCisgICBsaXN0IG9m IGZpbGVzLCByZWN1cnNpdmUgb3Igb3RoZXJ3aXNlLgorCisgICBbIFs0ODNdVG9wIF0gWyBbNDg0 XUNvbnRlbnRzIF0gWyBbNDg1XUMtS2VybWl0IEhvbWUgXSBbIFs0ODZdS2VybWl0CisgICBIb21l IF0KKworOC4xNC4gVHJhcHBpbmcgS2V5Ym9hcmQgSW50ZXJydXB0aW9uCisKKyAgIE5vcm1hbGx5 IHdoZW4geW91IHR5cGUgQ3RybC1DIGFuZCBLZXJtaXQgaXMgaW4gY29tbWFuZCBtb2RlIChhcyBv cHBvc2VkCisgICB0byBDT05ORUNUIG1vZGUpIHdpdGggQ09NTUFORCBJTlRFUlJVUFRJT04gT04g KGFzIGl0IGlzIHVubGVzcyB5b3UgaGF2ZQorICAgc2V0IGl0IE9GRiksIEtlcm1pdCBpbnRlcnJ1 cHRzIGFueSBjb21tYW5kIHRoYXQgaXMgY3VycmVudGx5IGluCisgICBwcm9ncmVzcywgYW5kIGlm IGEgY29tbWFuZCBmaWxlIG9yIG1hY3JvIGlzIGV4ZWN1dGluZywgcm9sbHMgdGhlCisgICBjb21t YW5kIHN0YWNrIGJhY2sgdG8gdG9wIGxldmVsLCBjbG9zaW5nIGFsbCBvcGVuIGNvbW1hbmQgZmls ZXMsCisgICBkZWFjdGl2YXRpbmcgYWxsIG1hY3JvcywgZGVhbGxvY2F0aW5nIGFsbCBsb2NhbCB2 YXJpYWJsZXMgYW5kIGFycmF5cywKKyAgIGFuZCBsZWF2aW5nIHlvdSBhdCB0aGUgY29tbWFuZCBw cm9tcHQuCisKKyAgIFN1cHBvc2UsIGhvd2V2ZXIsIHlvdSB3YW50IGNlcnRhaW4gYWN0aW9ucyB0 byBvY2N1ciB3aGVuIGEgc2NyaXB0IGlzCisgICBpbnRlcnJ1cHRlZDsgZm9yIGV4YW1wbGUsIGNs b3Npbmcgb3BlbiBmaWxlcywgd3JpdGluZyBsb2cgZW50cmllcywgb3IKKyAgIGRpc3BsYXlpbmcg c3VtbWFyeSByZXN1bHRzLiBZb3UgY2FuIGRvIHRoaXMgYnkgZGVmaW5pbmcgYSBtYWNybyBuYW1l ZAorICAgT05fQ1RSTEMuIFdoZW4gQ3RybC1DIGlzIGRldGVjdGVkLCBhbmQgYSBtYWNybyB3aXRo IHRoaXMgbmFtZSBpcworICAgZGVmaW5lZCwgS2VybWl0IGV4ZWN1dGVzIGl0IGZyb20gdGhlIGN1 cnJlbnQgY29tbWFuZCBsZXZlbCwgdGh1cyBnaXZpbmcKKyAgIGl0IGZ1bGwgYWNjZXNzIHRvIHRo ZSBlbnZpcm9ubWVudCBpbiB3aGljaCB0aGUgaW50ZXJydXB0aW9uIG9jY3VycmVkLAorICAgaW5j bHVkaW5nIGxvY2FsIHZhcmlhYmxlcyBhbmQgb3BlbiBmaWxlcy4gT25seSB3aGVuIHRoZSBPTl9D VFJMQyBtYWNybworICAgY29tcGxldGVzIGV4ZWN1dGlvbiBpcyB0aGUgY29tbWFuZCBzdGFjayBy b2xsZWQgYmFjayB0byB0b3AgbGV2ZWwuCisKKyAgIE9uY2UgdGhlIE9OX0NUUkxDIG1hY3JvIGlz IGRlZmluZWQsIGl0IGNhbiBiZSBleGVjdXRlZCBvbmx5IG9uY2UuIFRoaXMKKyAgIGlzIHRvIHBy ZXZlbnQgcmVjdXJzaW9uIGlmIHRoZSB1c2VyIHR5cGVzIEN0cmwtQyB3aGlsZSB0aGUgT05fQ1RS TEMKKyAgIG1hY3JvIGlzIGV4ZWN1dGluZy4gSWYgeW91IHR5cGUgQ3RybC1DIHdoaWxlIHRoZSBD dHJsLUMgbWFjcm8gaXMKKyAgIGFjdGl2ZSwgdGhpcyBkb2VzIG5vdCBzdGFydCBhIG5ldyBjb3B5 IG9mIE9OX0NUUkxDOyByYXRoZXIsIGl0IHJldHVybnMKKyAgIHRvIHRoZSB0b3AtbGV2ZWwgY29t bWFuZCBwcm9tcHQuIEFmdGVyIHRoZSBPTl9DVFJMQyBtYWNybyByZXR1cm5zLCBpdAorICAgaGFz IGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBtYWNybyB0YWJsZSBzbyBpZiB5b3Ugd2FudCB0byB1c2Ug aXQgYWdhaW4gb3IKKyAgIGluc3RhbGwgYSBkaWZmZXJlbnQgQ3RybC1DIHRyYXAsIHlvdSBtdXN0 IGV4ZWN1dGUgYSBuZXcgREVGSU5FIE9OX0NUUkxDCisgICBjb21tYW5kLiBJbiBhbnkgY2FzZSwg YXMgYWx3YXlzIHdoZW4geW91IGludGVycnVwdCBhIHNjcmlwdCB3aXRoCisgICBDdHJsLUMsIGl0 cyBjb21wbGV0aW9uIHN0YXR1cyBpcyBGQUlMVVJFLgorCisgICBOb3JtYWxseSB0aGUgT05fQ1RS TEMgbWFjcm8gd291bGQgYmUgZGVmaW5lZCBpbiB0aGUgY29tbWFuZCBmaWxlIG9yCisgICBtYWNy byB0byB3aGljaCBpdCBhcHBsaWVzLCBhbmQgc2hvdWxkIGJlIGRlY2xhcmVkIExPQ0FMLiBUaGlz IHdheSwgaWYKKyAgIHRoZSBjb21tYW5kIGZpbGUgb3IgbWFjcm8gY29tcGxldGVzIHN1Y2Nlc3Nm dWxseSB3aXRob3V0IGJlaW5nCisgICBpbnRlcnJ1cHRlZCwgdGhlIE9OX0NUUkxDIGRlZmluaXRp b24gZGlzYXBwZWFycyBhdXRvbWF0aWNhbGx5LgorICAgT3RoZXJ3aXNlIHRoZSBkZWZpbml0aW9u IHdvdWxkIHN0aWxsIGJlIHZhbGlkIGFuZCB0aGUgbWFjcm8gd291bGQgYmUKKyAgIGV4ZWN1dGVk LCBwcm9iYWJseSBvdXQgb2YgY29udGV4dCwgdGhlIG5leHQgdGltZSB5b3UgdHlwZWQgQ3RybC1D LgorCisgICBIZXJlJ3MgYSBzaW1wbGUgZXhhbXBsZSBvZiBhIGNvbW1hbmQgZmlsZSB0aGF0IHNl dHMgYSBDdHJsLUMgdHJhcCBmb3IKKyAgIGl0c2VsZjoKKworICBsb2NhbCBvbl9jdHJsYyAgICAg ICAgICAgICAgOyBNYWtlIEN0cmwtQyB0cmFwIGxvY2FsIHRvIHRoaXMgY29tbWFuZCBmaWxlLgor ICBkZWZpbmUgb25fY3RybGMgeyAgICAgICAgICAgOyBEZWZpbmUgdGhlIE9OX0NUUkxDIG1hY3Jv LgorICAgICAgZWNobyBJbnRlcnJ1cHRlZCBhdCBcdih0aW1lKS4KKyAgICAgIGVjaG8gSXRlcmF0 aW9uczogXCVuCisgIH0KKyAgeGVjaG8gVHlwZSBDdHJsLUMgdG8gcXVpdAorICBmb3IgXCVuIDEg OTk5IDEgeyAgICAgICAgICAgOyBQcmludHMgYSBkb3QgZXZlcnkgc2Vjb25kIHVudGlsIGludGVy cnVwdGVkLgorICAgICAgc2xlZXAgMQorICAgICAgeGVjaG8gLgorICB9CisgIGVjaG8gRmluaXNo ZWQgbm9ybWFsbHkgYXQgXHYodGltZSkgOyBHZXQgaGVyZSBvbmx5IGlmIG5vdCBpbnRlcnJ1cHRl ZC4KKyAgZGVjcmVtZW50IFwlbgorICBlY2hvIEl0ZXJhdGlvbnM6IFwlbgorCisgICBUaGlzIHBy aW50cyBhIHN1bW1hcnkgbm8gbWF0dGVyIHdoZXRoZXIgaXQgY29tcGxldGVzIG5vcm1hbGx5IG9y IGlzCisgICBpbnRlcnJ1cHRlZCBmcm9tIHRoZSBrZXlib2FyZC4gSW4gYm90aCBjYXNlcyB0aGUg dHJhcCBpcyBhdXRvbWF0aWNhbGx5CisgICByZW1vdmVkIGFmdGVyd2FyZHMuCisKKyAgIEZvciBh biBleGFtcGxlIG9mIGhvdyB0byB1c2UgT05fQ1RSTEMgdG8gZGVidWcgc2NyaXB0cywgc2VlCisg ICBbNDg3XVNlY3Rpb24gOC4xLgorCisgICBbIFs0ODhdVG9wIF0gWyBbNDg5XUNvbnRlbnRzIF0g WyBbNDkwXUMtS2VybWl0IEhvbWUgXSBbIFs0OTFdS2VybWl0CisgICBIb21lIF0KKworOS4gUy1F WFBSRVNTSU9OUworCisgICBUaGlzIHNlY3Rpb24gaXMgcHJpbWFyaWx5IGZvciB0aG9zZSB3aG8g d2FudCB0byB3cml0ZQorICAgY2FsY3VsYXRpb24taW50ZW5zaXZlIHNjcmlwdHMsIGVzcGVjaWFs bHkgaWYgdGhleSByZXF1aXJlCisgICBmbG9hdGluZy1wb2ludCBhcml0aG1ldGljLCBhbmQvb3Ig Zm9yIHRob3NlIHdobyBhcmUgZmFtaWxpYXIgd2l0aCB0aGUKKyAgIExJU1AgcHJvZ3JhbW1pbmcg bGFuZ3VhZ2UuCisKKyAgIEV2ZXIgc2luY2UgQy1LZXJtaXQgdmVyc2lvbiA1IHdhcyByZWxlYXNl ZCBpbiAxOTg4LCBzY3JpcHRpbmcgaGFzIGJlZW4KKyAgIG9uZSBvZiBpdHMgbWFqb3IgYXR0cmFj dGlvbnMsIGFuZCBhcml0aG1ldGljIGlzIGEga2V5IHBhcnQgb2YgaXQuCisgICBWZXJzaW9ucyA1 IGFuZCA2IGluY2x1ZGVkIGludGVnZXIgYXJpdGhtZXRpYyBvbmx5LCB1c2luZyB0cmFkaXRpb25h bAorICAgYWxnZWJyYWljIG5vdGF0aW9uLCBlLmcuOgorCisgIGVjaG8gXGZldmFsdWF0ZSgzKigy KzcpLzIpCisgIDEzCisKKyAgIEMtS2VybWl0IDcuMCBhZGRlZCBzdXBwb3J0IGZvciBmbG9hdGlu Zy1wb2ludCBhcml0aG1ldGljLCBidXQgb25seQorICAgdGhyb3VnaCBmdW5jdGlvbiBjYWxsczoK KworICBlY2hvIFxmZnBkaXZpZGUoXGZmcG11bHRpcGx5KDMuMCxcZmZwYWRkKDIuMCw3LjApKSwy LjApCisgIDEzLjUKKworICAgQy1LZXJtaXQgOC4wIGludHJvZHVjZXMgYSB0aGlyZCBmb3JtIG9m IGFyaXRobWV0aWMgdGhhdCB0cmVhdHMgaW50ZWdlcnMKKyAgIGFuZCBmbG9hdGluZy1wb2ludCBu dW1iZXJzIHVuaWZvcm1seSwgaXMgZWFzaWVyIHRvIHJlYWQgYW5kIHdyaXRlLCBhbmQKKyAgIGV4 ZWN1dGVzIHZlcnkgcXVpY2tseToKKworICAoLyAoKiAzICgrIDIgNykpIDIpCisgIDEzLjUKKwor ICAgQnV0IGZpcnN0IHNvbWUgYmFja2dyb3VuZC4KKworICAgVGhlIEtlcm1pdCBjb21tYW5kIGFu ZCBzY3JpcHRpbmcgbGFuZ3VhZ2UgZGlmZmVycyBmcm9tIHRydWUgcHJvZ3JhbW1pbmcKKyAgIGxh bmd1YWdlcyAoc3VjaCBhcyBDIG9yIEZvcnRyYW4pIGluIG1hbnkgd2F5czsgb25lIG9mIHRoZSBt b3N0CisgICBwcm9taW5lbnQgZGlmZmVyZW5jZXMgaXMgdGhlIHdheSBpbiB3aGljaCB2YXJpYWJs ZXMgYXJlIGRpc3Rpbmd1aXNoZWQKKyAgIGZyb20gY29uc3RhbnRzLiBJbiBhIGNvbW1hbmQgbGFu Z3VhZ2UsIHdvcmRzIGFyZSB0YWtlbiBsaXRlcmFsbHk7IGZvcgorICAgZXhhbXBsZSwgdGhlIFVu aXggc2hlbGw6CisKKyAgY2F0IGZvby5iYXIKKworICAgZGlzcGxheXMgdGhlIGZpbGUgbmFtZWQg Zm9vLmJhci4gV2hlcmVhcyBpbiBhIHByb2dyYW1taW5nIGxhbmd1YWdlIGxpa2UKKyAgIEMsIHdv cmRzIGFyZSBhc3N1bWVkIHRvIGJlIHZhcmlhYmxlczoKKworICBzID0gZm9vLmJhcjsgICAgLyog QXNzaWducyB0aGUgdmFsdWUgb2YgZm9vLmJhciB0byB0aGUgdmFyaWFibGUgcyAqLworCisgICBU byBtYWtlIGEgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UgdGFrZSB3b3JkcyBsaXRlcmFsbHksIHlvdSBo YXZlIHRvIHF1b3RlCisgICBvciAiZXNjYXBlIiB0aGVtOgorCisgIHMgPSAiZm9vLmJhciI7ICAv KiBBc3NpZ25zIGEgcG9pbnRlciB0byB0aGUgc3RyaW5nICJmb28uYmFyIiB0byB0aGUgdmFyaWFi bGUgcworICovCisKKyAgIFRoZSBvcHBvc2l0ZSBob2xkcyBmb3IgY29tbWFuZCBsYW5ndWFnZXM6 IHRvIGdldCB0aGVtIHRvIHRyZWF0IGEgd29yZAorICAgYXMgYSB2YXJpYWJsZSByYXRoZXIgdGhh biBhIGNvbnN0YW50LCB5b3UgaGF2ZSB0byBlc2NhcGUgdGhlbS4gRm9yCisgICBleGFtcGxlLCBp biB0aGUgVW5peCBzaGVsbDoKKworICBmb289MTIzICAgICAgICAgOyBBc3NpZ24gdmFsdWUgMTIz IHRvIHZhcmlhYmxlIGZvby4KKyAgZWNobyBmb28gICAgICAgIDsgUHJpbnRzICJmb28iCisgIGVj aG8gJGZvbyAgICAgICA7IFByaW50cyAiMTIzIgorCisgICBBbmQgaW4gS2VybWl0OgorCisgIGRl ZmluZSBmb28gMTIzICA7IEFzc2lnbiB2YWx1ZSAxMjMgdG8gdmFyaWFibGUgZm9vLgorICBlY2hv IDEyMyAgICAgICAgOyBUaGlzIHByaW50cyAiMTIzIi4KKyAgZWNobyBmb28gICAgICAgIDsgVGhp cyBwcmludHMgImZvbyIuCisgIGVjaG8gXG0oZm9vKSAgICA7IFRoaXMgcHJpbnRzICIxMjMiLgor CisgICBJbiBvdGhlciB3b3JkcywgY2hhcmFjdGVyIHN0cmluZ3MgKHN1Y2ggYXMgImZvbyIgYWJv dmUpIGFyZSBpbnRlcnByZXRlZAorICAgYXMgbGl0ZXJhbCBzdHJpbmdzLCByYXRoZXIgdGhhbiB2 YXJpYWJsZSBuYW1lcywgZXhjZXB0IGluIHNwZWNpYWwKKyAgIGNvbW1hbmRzIGxpa2UgREVGSU5F IHRoYXQgZGVhbCBzcGVjaWZpY2FsbHkgd2l0aCB2YXJpYWJsZSBuYW1lcyAob3IgaW4KKyAgIG51 bWVyaWMgY29udGV4dHMgYXMgZXhwbGFpbmVkIGluIFs0OTJdU2VjdGlvbiA4LjIpLiBUaGUgc3Bl Y2lhbAorICAgImVzY2FwZSIgY2hhcmFjdGVyIChkb2xsYXIgc2lnbiAoJCkgZm9yIHRoZSBzaGVs bCwgYmFja3NsYXNoIChcKSBmb3IKKyAgIEtlcm1pdCkgaW5kaWNhdGVzIHRoYXQgYSB2YXJpYWJs ZSBpcyB0byBiZSByZXBsYWNlZCBieSBpdHMgdmFsdWUuCisKKyAgIFRoZSByZXF1aXJlbWVudCB0 byBlc2NhcGUgdmFyaWFibGUgbmFtZXMgaW4gY29tbWFuZCBsYW5ndWFnZXMgbm9ybWFsbHkKKyAg IGRvZXMgbm90IGltcG9zZSBhbnkgc3BlY2lhbCBoYXJkc2hpcCwgYnV0IGNhbiBhZGQgYSBjb25z aWRlcmFibGUKKyAgIG5vdGF0aW9uYWwgYnVyZGVuIHRvIGFyaXRobWV0aWMgZXhwcmVzc2lvbnMs IHdoaWNoIGFyZSB0eXBpY2FsbHkgZnVsbAorICAgb2YgdmFyaWFibGVzLiBFc3BlY2lhbGx5IGlu IEtlcm1pdCB3aGVuIGZsb2F0aW5nIHBvaW50IG51bWJlcnMgYXJlCisgICBpbnZvbHZlZCwgd2hl cmUgeW91IG11c3QgdXNlIHNwZWNpYWwgXGZmcHh4eCgpIGZ1bmN0aW9ucywgZS5nLgorICAgIlxm ZnBhZGQoXG0oYSksXG0oYikpIiByYXRoZXIgdGhhbiB0aGUgc2ltcGxlICIrIiBvcGVyYXRvciB0 byBhZGQgdHdvCisgICBmbG9hdGluZy1wb2ludCBudW1iZXJzIHRvZ2V0aGVyLCBiZWNhdXNlIHRo ZSBvcmlnaW5hbCBhcml0aG1ldGljCisgICBoYW5kbGVyIGRvZXNuJ3Qgc3VwcG9ydCBmbG9hdGlu ZyBwb2ludCAodGhpcyBtaWdodCBjaGFuZ2UgaW4gdGhlCisgICBmdXR1cmUpLiBUbyBpbGx1c3Ry YXRlLCB0aGUgZ2VuZXJhbCBmb3JtdWxhIGZvciB0aGUgYXJlYSBvZiBhIHRyaWFuZ2xlCisgICBp czoKKworICBzcXJ0KHMgKiAocyAtIGEpICogKHMgLSBiKSAqIChzIC0gYykpCisKKyAgIHdoZXJl IGEsIGIsIGFuZCBjIGFyZSB0aGUgbGVuZ3RocyBvZiB0aGUgdHJpYW5nbGUncyB0aHJlZSBzaWRl cyBhbmQ6CisKKyAgcyA9IChhICsgYiArIGMpIC8gMgorCisgICBFeGNlcHQgaW4gc3BlY2lhbCBj YXNlcyAoZS5nLiBhID0gMywgYiA9IDQsIGMgPSA1KSwgdGhlIHJlc3VsdCBoYXMgYQorICAgZnJh Y3Rpb25hbCBwYXJ0IHNvIHRoZSBjb21wdXRhdGlvbiBtdXN0IGJlIGRvbmUgdXNpbmcgZmxvYXRp bmctcG9pbnQKKyAgIGFyaXRobWV0aWMuIFdlIGNhbiBjcmVhdGUgYSBLZXJtaXQgNy4wIGZ1bmN0 aW9uIGZvciB0aGlzIGFzIGZvbGxvd3M6CisKKyAgZGVmIGFyZWEgeworICAgICAgbG9jYWwgcyB0 MSB0MiB0MworICAgICAgYXNzaWduIHMgXGZmcGRpdihcZmZwYWRkKFxmZnBhZGQoXCUxLFwlMiks XCUzKSwyLjApCisgICAgICBhc3NpZ24gdDEgXGZmcHN1YihcbShzKSxcJTEpCisgICAgICBhc3Np Z24gdDIgXGZmcHN1YihcbShzKSxcJTIpCisgICAgICBhc3NpZ24gdDMgXGZmcHN1YihcbShzKSxc JTMpCisgICAgICByZXR1cm4gXGZmcHNxcnQoXGZmcG11bChcbShzKSxcZmZwbXVsKFxtKHQxKSxc ZmZwbXVsKFxtKHQyKSxcbSh0MykpKSkpCisgIH0KKworICAgQnV0IGFzIHlvdSBjYW4gc2VlLCB0 aGlzIGlzIHJhdGhlciBjdW1iZXJzb21lLiBOb3RlLCBpbiBwYXJ0aWN1bGFyLAorICAgdGhhdCBh cml0aG1ldGljIGZ1bmN0aW9ucyBsaWtlIFxmZnBhZGQoKSwgXGZmcG11bCgpLCBldGMsIHRha2Ug ZXhhY3RseQorICAgdHdvIG9wZXJhbmRzIChsaWtlIHRoZWlyIHN5bWJvbGljIGNvdW50ZXJwYXJ0 cyArIGFuZCAqKSwgc28gb2J0YWluaW5nCisgICB0aGUgcHJvZHVjdCBvZiB0aHJlZSBvciBtb3Jl IG51bWJlcnMgKGFzIHdlIGRvIGluIHRoaXMgY2FzZSkgaXMKKyAgIGF3a3dhcmQuCisKKyAgIFVz aW5nIHRoZSBhbHRlcm5hdGl2ZSBTLUV4cHJlc3Npb24gbm90YXRpb24sIHdlIGNhbiByZWR1Y2Ug dGhpcyB0byBhCisgICBmb3JtIHRoYXQgaXMgYm90aCBlYXNpZXIgdG8gcmVhZCBhbmQgZXhlY3V0 ZXMgZmFzdGVyICh0aGUgZGV0YWlscyBhcmUKKyAgIGV4cGxhaW5lZCBsYXRlcik6CisKKyAgZGVm IG5ld2FyZWEgeworICAgICAgKGxldCBzICgvICgrIFwlMSBcJTIgXCUzKSAyLjApKQorICAgICAg KHNxcnQgKCogcyAoLSBzIFwlMSkgKC0gcyBcJTIpICgtIHMgXCUzKSkpCisgIH0KKworICAgSW4g Ym90aCBleGFtcGxlcywgdGhlIFwlMS4uMyB2YXJpYWJsZXMgYXJlIHRoZSBub3JtYWwgS2VybWl0 IG1hY3JvCisgICBhcmd1bWVudHMsIHJlZmVyZW5jZWQgYnkgdGhlIG5vcm1hbCBlc2NhcGluZyBt ZWNoYW5pc20uIEZvciBpbmNyZWFzZWQKKyAgIHJlYWRhYmlsaXR5LCB3ZSBjYW4gYWxzbyBhc3Np Z24gdGhlIG1hY3JvIGFyZ3VtZW50cyBcJTEsIFwlMiwgYW5kIFwlMworICAgdG8gdGhlIGxldHRl cnMgYSwgYiwgYW5kIGMgY29ycmVzcG9uZGluZyB0byBvdXIgZm9ybXVsYToKKworZGVmIG5ld2Fy ZWEgeworICAgIChsZXQgYSBcJTEgYiBcJTIgYyBcJTMpCisgICAgKGxldCBzICgvICgrIGEgYiBj KSAyLjApKQorICAgIChzcXJ0ICgqIHMgKC0gcyBhKSAoLSBzIGIpICgtIHMgYykpKQorfQorCisg ICBBbmQgbm93IHRoZSBLZXJtaXQgZnVuY3Rpb24gcmVhZHMgYWxtb3N0IGxpa2UgdGhlIG9yaWdp bmFsIGZvcm11bGEuCisgICBIZXJlIEtlcm1pdCBiZWhhdmVzIG1vcmUgbGlrZSBhIHJlZ3VsYXIg cHJvZ3JhbW1pbmcgbGFuZ3VhZ2UuIEluIGFuCisgICBTLUV4cHJlc3Npb24sIG1hY3JvIG5hbWVz IG5lZWQgbm90IGJlIGVzY2FwZWQgd2hlbiB0aGV5IGFyZSB1c2VkIGFzIHRoZQorICAgbmFtZXMg b2YgbnVtZXJpYyB2YXJpYWJsZXMuCisKKyAgIFsgWzQ5M11Ub3AgXSBbIFs0OTRdQ29udGVudHMg XSBbIFs0OTVdQy1LZXJtaXQgSG9tZSBdIFsgWzQ5Nl1LZXJtaXQKKyAgIEhvbWUgXQorCis5LjEu IFdoYXQgaXMgYW4gUy1FeHByZXNzaW9uPworCisgICBUaGUgUy1FeHByZXNzaW9uIGNvbmNlcHQg aXMgYm9ycm93ZWQgZnJvbSB0aGUgTGlzcCBwcm9ncmFtbWluZworICAgbGFuZ3VhZ2UuICJTLUV4 cHJlc3Npb24iIGlzIHNob3J0IGZvciBTeW1ib2xpYyBFeHByZXNzaW9uIChpdHNlbGYKKyAgIHNv bWV0aW1lcyBzaG9ydGVuZWQgdG8gU0VYUCkuIFMtRXhwcmVzc2lvbnMgcHJvdmlkZSBhIGtpbmQg b2YKKyAgIEFsdGVybmF0aXZlIE1pbmktVW5pdmVyc2Ugd2l0aGluIHRoZSBLZXJtaXQgY29tbWFu ZCBsYW5ndWFnZSB3aGVuIHRoZQorICAgcmVndWxhciBydWxlcyBkb24ndCBhcHBseSwgYSB1bml2 ZXJzZSBlbmNsb3NlZCBpbiBwYXJlbnRoZXNlcy4KKworICAgQy1LZXJtaXQgZG9lcyBub3QgcHJl dGVuZCB0byBiZSBhIGZ1bGwgTGlzcCBpbnRlcnByZXRlcjsgb25seSB0aGUKKyAgIGFyaXRobWV0 aWMgcGFydHMgb2YgTGlzcCBoYXZlIGJlZW4gaW5jb3Jwb3JhdGVkOiBTLUV4cHJlc3Npb25zIHRo YXQKKyAgIG9wZXJhdGUgb24gbnVtYmVycyBhbmQgcmV0dXJuIG51bWVyaWMgdmFsdWVzIChwbHVz IGV4dGVuc2liaWxpdHkKKyAgIGZlYXR1cmVzIGRlc2NyaWJlZCBpbiBbNDk3XVNlY3Rpb24gOS44 LCB3aGljaCBhbGxvdyBzb21lIGRlZ3JlZSBvZgorICAgc3RyaW5nIHByb2Nlc3NpbmcpLgorCisg ICBBbiBTLUV4cHJlc3Npb24gaXMgYSBsaXN0IG9mIHplcm8gb3IgbW9yZSBpdGVtcywgc2VwYXJh dGVkIGJ5IHNwYWNlcywKKyAgIHdpdGhpbiBwYXJlbnRoZXNlcy4gRXhhbXBsZXM6CisKKyAgKCkK KyAgKDEpCisgIChhKQorICAoKyBhIDEpCisgICgqIDIgYSBiKQorCisgICBJZiB0aGUgUy1FeHBy ZXNzaW9uIGlzIGVtcHR5LCBpdCBoYXMgdGhlIE5JTCAoZW1wdHkpIHZhbHVlLiBJZiBpdCBpcwor ICAgbm90IGVtcHR5IGFuZCB0aGUgZmlyc3QgaXRlbSBpcyBhbiBvcGVyYXRvciAoc3VjaCBhcyAr IG9yICopLCB0aGVyZSBjYW4KKyAgIGJlIHplcm8gb3IgbW9yZSBzdWJzZXF1ZW50IGl0ZW1zLCBj YWxsZWQgdGhlIG9wZXJhbmRzOgorCisgICgrIDEgMikKKworICAgSGVyZSB0aGUgb3BlcmF0b3Ig aXMgIisiIGFuZCB0aGUgb3BlcmFuZHMgYXJlICIxIiBhbmQgIjIiLCBhbmQgdGhlCisgICB2YWx1 ZSBvZiB0aGUgUy1FeHByZXNzaW9uIGlzIHRoZSB2YWx1ZSBvZiB0aGUgb3BlcmF0aW9uIChpbiB0 aGlzIGNhc2UKKyAgIDMpLiBUaGUgb3BlcmF0b3IgYWx3YXlzIGNvbWVzIGZpcnN0LCB3aGljaCBp cyBkaWZmZXJlbnQgZnJvbSB0aGUKKyAgIGZhbWlsaWFyIGFsZ2VicmFpYyBub3RhdGlvbjsgdGhp cyBiZWNhdXNlIFMtRXhwcmVzc2lvbiBvcGVyYXRvcnMgY2FuCisgICBoYXZlIGRpZmZlcmVudCBu dW1iZXJzIG9mIG9wZXJhbmRzOgorCisgICgrIDEpCisgICgrIDEgMikKKyAgKCsgMSAyIDMgNCA1 IDYgNyA4IDkpCisKKyAgIElmIHRoZSBmaXJzdCBpdGVtIGluIHRoZSBTLUV4cHJlc3Npb24gaXMg bm90IGFuIG9wZXJhdG9yLCB0aGVuIGl0IG11c3QKKyAgIGJlIGEgdmFyaWFibGUgb3IgYSBudW1i ZXIgKG9yIGEgbWFjcm87IHNlZSBbNDk4XVNlY3Rpb24gOS44KSwgYW5kIHRoZQorICAgUy1FeHBy ZXNzaW9uIGNhbiBvbmx5IGNvbnRhaW4gb25lIGl0ZW07IGluIHRoaXMgY2FzZSwgdGhlCisgICBT LUV4cHJlc3Npb24ncyB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhlIHZhcmlhYmxlIG9yIG51bWJl cjoKKworICAoYSkKKyAgKDMpCisKKyAgIE9wZXJhbmRzIGNhbiBiZSBudW1iZXJzLCB2YXJpYWJs ZXMgdGhhdCBoYXZlIG51bWVyaWMgdmFsdWVzLCBmdW5jdGlvbnMKKyAgIHRoYXQgcmV0dXJuIG51 bWJlcnMsIG9yIG90aGVyIFMtRXhwcmVzc2lvbnMuIFRvIGlsbHVzdHJhdGUgYW4KKyAgIFMtRXhw cmVzc2lvbiB3aXRoaW4gYW4gUy1FeHByZXNzaW9uLCBvYnNlcnZlIHRoYXQ6CisKKyAgKCsgMSAy KQorCisgICBpcyBlcXVpdmFsZW50IHRvIGFueSBvZiB0aGUgZm9sbG93aW5nIChwbHVzIGFuIGlu ZmluaXRlIG51bWJlciBvZgorICAgb3RoZXJzKToKKworICAoKyAxICgrIDEgMSkpCisgICgrICgt IDMgMikgKC8gMTQgKCsgMyA0KSkpCisKKyAgIFMtRXhwcmVzc2lvbnMgY2FuIGJlIG5lc3RlZCB0 byBhbnkgcmVhc29uYWJsZSBsZXZlbDsgZm9yIGV4YW1wbGUsIHRoZQorICAgdmFsdWUgb2YgdGhl IGZvbGxvd2luZyBTLUV4cHJlc3Npb24gaXMgNjQ6CisKKyAgKC0gKCogKCsgMiAoKiAzIDQpKSAo LSA5ICgqIDIgMikpKSA2KQorCisgICBPcGVyYXRvcnMgaGF2ZSBubyBwcmVjZWRlbmNlLCBpbXBs aWVkIG9yIG90aGVyd2lzZSwgc2luY2UgdGhleSBjYW4ndCBiZQorICAgbWl4ZWQuIFRoZSBvbmx5 IGV4Y2VwdGlvbnMgYXJlIHVuYXJ5ICsgYW5kIC0sIHdoaWNoIHNpbXBseSBpbmRpY2F0ZSB0aGUK KyAgIHNpZ24gb2YgYSBudW1iZXI6CisKKyAgKCogMyAtMSkKKworICAgT3JkZXIgb2YgZXZhbHVh dGlvbiBpcyBzcGVjaWZpZWQgZW50aXJlbHkgYnkgcGFyZW50aGVzZXMsIHdoaWNoIGFyZQorICAg cmVxdWlyZWQgYXJvdW5kIGVhY2ggb3BlcmF0b3IgYW5kIGl0cyBvcGVyYW5kczogKCsgYSAoKiBi IGMpKSBpbnN0ZWFkCisgICBvZiAoYSArIGIgKiBjKS4KKworICAgUy1FeHByZXNzaW9ucyBwcm92 aWRlIGEgc2ltcGxlIGFuZCBpc29sYXRlZCBlbnZpcm9ubWVudCBpbiB3aGljaAorICAgS2VybWl0 J3MgbWFjcm8gbmFtZXMgY2FuIGJlIHVzZWQgd2l0aG91dCB0aGUgXG0oLi4uKSBlc2NhcGluZyB0 aGF0IGlzCisgICBub3JtYWxseSByZXF1aXJlZC4gR2l2ZW46CisKKyAgZGVmaW5lIGEgMQorICBk ZWZpbmUgYiAyCisgIGRlZmluZSBjIDMKKworICAgVGhlbjoKKworICAoKyBcbShhKSBcbShiKSBc bShjKSkKKworICAgaXMgZXF1aXZhbGVudCB0bzoKKworICAoKyBhIGIgYykKKworICAgV2l0aGlu IGFuIFMtRXhwcmVzc2lvbiwgYXMgaW4gb3RoZXIgc3RyaWN0bHkgbnVtZXJpYyBjb250ZXh0cwor ICAgKFs0OTldU2VjdGlvbiA4LjIpLCBhbnkgb3BlcmFuZCB0aGF0IHN0YXJ0cyB3aXRoIGEgbGV0 dGVyIGlzIHRyZWF0ZWQgYXMKKyAgIGEgS2VybWl0IG1hY3JvIG5hbWUuIEluIHRoaXMgY29udGV4 dCwgYWJicmV2aWF0aW9ucyBhcmUgbm90IGFjY2VwdGVkOworICAgdmFyaWFibGUgbmFtZXMgbXVz dCBiZSBzcGVsbGVkIG91dCBpbiBmdWxsLiBBbHBoYWJldGljIGNhc2UgaXMgbm90CisgICBzaWdu aWZpY2FudDsgImEiIGFuZCAiQSIgYXJlIHRoZSBzYW1lIHZhcmlhYmxlLCBidXQgYm90aCBhcmUg ZGlmZmVyZW50CisgICBmcm9tICJhcmVhIi4KKworICAgT2YgY291cnNlLCByZWd1bGFyIEtlcm1p dCB2YXJpYWJsZXMgYW5kIGZ1bmN0aW9ucyBjYW4gYmUgdXNlZCBpbgorICAgUy1FeHByZXNzaW9u cyBpbiB0aGUgbm9ybWFsIHdheXM6CisKKyAgKCogXHYobWF0aF9waSkgKF4gXCVyIDIpKSAgICAg ICAgICAgICA7IEFyZWEgb2YgYSBjaXJjbGUgd2l0aCByYWRpdXMgXCVyCisgICgrIFxmam9pbigm YSkpICAgICAgICAgICAgICAgICAgICAgICAgOyBTdW0gb2YgYWxsIGVsZW1lbnRzIG9mIGFycmF5 IFwmYVtdCisKKyAgIFsgWzUwMF1Ub3AgXSBbIFs1MDFdQ29udGVudHMgXSBbIFs1MDJdQy1LZXJt aXQgSG9tZSBdIFsgWzUwM11LZXJtaXQKKyAgIEhvbWUgXQorCis5LjIuIEludGVnZXIgYW5kIEZs b2F0aW5nLVBvaW50LUFyaXRobWV0aWMKKworICAgTm9ybWFsbHksIGlmIGFsbCBudW1iZXJzIGlu IGFuIFMtRXhwcmVzc2lvbiBhcmUgaW50ZWdlcnMsIHRoZSByZXN1bHQgaXMKKyAgIGFuIGludGVn ZXI6CisKKyAgKCsgMSAxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IFJlc3VsdCBp cyAyCisgICgvIDkgMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBSZXN1bHQgaXMg MworCisgICBJZiBhbnkgb2YgdGhlIG9wZXJhbmRzIGlzIGZsb2F0aW5nIHBvaW50LCBob3dldmVy LCB0aGUgcmVzdWx0IGlzIGFsc28KKyAgIGZsb2F0aW5nIHBvaW50OgorCisgICgrIDEgMS4wKSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBSZXN1bHQgaXMgMi4wCisgICgvIDkuMCAzKSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBSZXN1bHQgaXMgMy4wCisKKyAgIElmIGFsbCB0 aGUgb3BlcmFuZHMgYXJlIGludGVnZXJzIGJ1dCB0aGUgcmVzdWx0IGhhcyBhIGZyYWN0aW9uYWwg cGFydCwKKyAgIHRoZSByZXN1bHQgaXMgZmxvYXRpbmcgcG9pbnQ6CisKKyAgKC8gMTAgMykgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA7IFJlc3VsdCBpcyAzLjMzMzMzMzMzMzMzMzMzMwor CisgICBUbyBmb3JjZSBhbiBpbnRlZ2VyIHJlc3VsdCBpbiBzdWNoIGNhc2VzLCB1c2UgdGhlIFRS VU5DQVRFIG9wZXJhdG9yOgorCisgICh0cnVuY2F0ZSAoLyAxMCAzKSkgICAgICAgICAgICAgICAg ICAgOyBSZXN1bHQgaXMgMworCisgICBTaW1pbGFybHksIHRvIGZvcmNlIGEgY29tcHV0YXRpb24g dG8gb2NjdXIgaW4gZmxvYXRpbmcgcG9pbnQsIHlvdSBjYW4KKyAgIGNvZXJjZSBvbmUgb2YgaXRz IG9wZXJhbmRzIHRvIEZMT0FUOgorCisgICgrIDEgKGZsb2F0IDEpKSAgICAgICAgICAgICAgICAg ICAgICAgOyBSZXN1bHQgaXMgMi4wCisKKyAgIFRoZSByZXN1bHQgaXMgYWxzbyBmbG9hdGluZyBw b2ludCBpZiB0aGUgbWFnbml0dWRlIG9mIGFueSBpbnRlZ2VyCisgICBvcGVyYW5kLCBpbnRlcm1l ZGlhdGUgcmVzdWx0LCBvciB0aGUgcmVzdWx0IGl0c2VsZiwgaXMgbGFyZ2VyIHRoYW4gdGhlCisg ICBtYXhpbXVtIGZvciB0aGUgdW5kZXJseWluZyBtYWNoaW5lIGFyY2hpdGVjdHVyZToKKworICAo XiAxMDAgMTAwKQorCisgICBJZiB0aGUgcmVzdWx0IGlzIHRvbyBsYXJnZSBldmVuIGZvciBmbG9h dGluZy1wb2ludCByZXByZXNlbnRhdGlvbiwKKyAgICJJbmZpbml0eSIgaXMgcHJpbnRlZDsgaWYg aXQgaXMgdG9vIHNtYWxsIHRvIGJlIGRpc3Rpbmd1aXNoZWQgZnJvbSAwLAorICAgMC4wIGlzIHJl dHVybmVkLgorCisgICBMYXJnZSBudW1iZXJzIGNhbiBiZSB1c2VkIGFuZCBsYXJnZSByZXN1bHRz IGdlbmVyYXRlZCwgYnV0IHRoZXkgYXJlCisgICBhY2N1cmF0ZSBvbmx5IHRvIHRoZSBwcmVjaXNp b24gb2YgdGhlIHVuZGVybHlpbmcgbWFjaGluZS4gRm9yIGV4YW1wbGUsCisgICB0aGUgcmVzdWx0 IG9mOgorCisgKCsgMTExMTExMTExMTExMTExMTExMTExIDIyMjIyMjIyMjIyMjIyMjIyMjIyMikK KworICAgc2hvdWxkIGJlIDMzMzMzMzMzMzMzMzMzMzMzMzMzMywgYnV0IDMzMzMzMzMzMzMzMzMz MzMwMDAwMC4wIGlzCisgICBwcm9kdWNlZCBpbnN0ZWFkIGlmIHRoZSBtYWNoaW5lIGlzIGFjY3Vy YXRlIHRvIG9ubHkgYWJvdXQgMTYgZGVjaW1hbAorICAgZGlnaXRzLCBldmVuIHdpdGggY29lcmNp b24gdG8gZmxvYXRpbmctcG9pbnQuIFRoZSBvcmRlciBvZiBtYWduaXR1ZGUgaXMKKyAgIGNvcnJl Y3QgYnV0IHRoZSBsZWFzdCBzaWduaWZpY2FudCBkaWdpdHMgYXJlIHdyb25nLiBUaGUgaW1wcmVj aXNlCisgICBuYXR1cmUgb2YgdGhlIHJlc3VsdCBpcyBpbmRpY2F0ZWQgYnkgdGhlICIuMCIgYXQg dGhlIGVuZC4gQ29udHJhc3QKKyAgIHdpdGg6CisKKyAoKyAxMTExMTExMTEgMjIyMjIyMjIyKQor CisgICB3aGljaCBwcm9kdWNlcyBhbiBleGFjdCBpbnRlZ2VyIHJlc3VsdC4KKworICAgWyBbNTA0 XVRvcCBdIFsgWzUwNV1Db250ZW50cyBdIFsgWzUwNl1DLUtlcm1pdCBIb21lIF0gWyBbNTA3XUtl cm1pdAorICAgSG9tZSBdCisKKzkuMy4gSG93IHRvIFVzZSBTLUV4cHJlc3Npb25zCisKKyAgIFMt RXhwcmVzc2lvbnMgbWF5IGJlIGdpdmVuIGFzIGNvbW1hbmRzIHRvIEMtS2VybWl0LiBBbnkgY29t bWFuZCB3aG9zZQorICAgZmlyc3QgY2hhcmFjdGVyIGlzICIoIiAobGVmdCBwYXJlbnRoZXNpcykg aXMgaW50ZXJwcmV0ZWQgYXMgYW4KKyAgIFMtRXhwcmVzc2lvbi4KKworICAgSWYgeW91IGVudGVy IGFuIFMtRXhwcmVzc2lvbiBhdCB0aGUgQy1LZXJtaXQ+IHByb21wdCwgaXRzIHJlc3VsdCBpcwor ICAgcHJpbnRlZDoKKworICBDLUtlcm1pdD4oLyAxMC4wIDMpCisgICAzLjMzMzMzMzMzMzMzMzMz MworICBDLUtlcm1pdD4KKworICAgSWYgYW4gUy1FeHByZXNzaW9uIGlzIGV4ZWN1dGVkIHdpdGhp biBhIG1hY3JvIG9yIGNvbW1hbmQgZmlsZSwgaXRzCisgICB2YWx1ZSBpcyBub3QgcHJpbnRlZC4g SG93ZXZlciwgeW91IGNhbiBjb250cm9sIHRoZSBwcmludGluZyBhY3Rpb24KKyAgIHdpdGg6CisK KyAgIFNFVCBTRVhQUkVTU0lPTiBFQ0hPIHsgQVVUTywgT04sIE9GRiB9CisgICAgICAgICAgQVVU TyBpcyB0aGUgZGVmYXVsdCwgbWVhbmluZyBwcmludCB0aGUgdmFsdWUgYXQgdG9wIGxldmVsIG9u bHk7CisgICAgICAgICAgT04gbWVhbnMgYWx3YXlzIHByaW50IHRoZSB2YWx1ZTsgT0ZGIG1lYW5z IG5ldmVyIHByaW50IGl0LgorCisgICBJbiBhbnkgY2FzZSwgdGhlIHZhbHVlIG9mIHRoZSBtb3N0 IHJlY2VudCBTLUV4cHJlc3Npb24gKGFuZCB0aGUKKyAgIFMtRXhwcmVzc2lvbiBpdHNlbGYpIG1h eSBiZSBhY2Nlc3NlZCBwcm9ncmFtbWF0aWNhbGx5IHRocm91Z2ggdGhlCisgICBmb2xsb3dpbmcg dmFyaWFibGVzOgorCisgICBcdihzZXhwcmVzc2lvbikKKyAgICAgICAgICBUaGUgUy1FeHByZXNz aW9uIG1vc3QgcmVjZW50bHkgZXhlY3V0ZWQuCisKKyAgIFx2KHN2YWx1ZSkKKyAgICAgICAgICBU aGUgdmFsdWUgb2YgdGhlIFMtRXhwcmVzc2lvbiBtb3N0IHJlY2VudGx5IGV4ZWN1dGVkLgorCisg ICBCZXNpZGVzIGlzc3VpbmcgUy1FeHByZXNzaW9ucyBhcyBjb21tYW5kcyBpbiB0aGVtc2VsdmVz LCB5b3UgY2FuIGFsc28KKyAgIGV4ZWN1dGUgdGhlbSBhbnl3aGVyZSB3aXRoaW4gYSBLZXJtaXQg Y29tbWFuZCwgYnV0IGluIHRoaXMgY2FzZSB0aGV5CisgICBtdXN0IGJlIGVuY2xvc2VkIGluIGEg ZnVuY3Rpb24gY2FsbCAob3RoZXJ3aXNlIHRoZXkgYXJlIHRha2VuCisgICBsaXRlcmFsbHkpOgor CisgICBcZnNleHByZXNzaW9uKHMpCisgICAgICAgICAgVGhlIGFyZ3VtZW50ICJzIiBpcyBhbiBT LUV4cHJlc3Npb247IHRoZSBvdXRlciBwYXJlbnRoZXNlcyBtYXkKKyAgICAgICAgICBiZSBvbWl0 dGVkLiBUaGUgdmFsdWUgb2YgdGhlIFMtRXhwcmVzc2lvbiBpcyByZXR1cm5lZC4gTm90ZSB0aGF0 CisgICAgICAgICAgc2luY2UgUy1FeHByZXNzaW9ucyB1c3VhbGx5IGNvbnRhaW4gc3BhY2VzLCBz b21lIGZvcm0gb2YKKyAgICAgICAgICBncm91cGluZyBvciBxdW90aW5nIG1pZ2h0IGJlIG5lZWRl ZCBpbiBzb21lIGNvbnRleHRzOgorCisgIGVjaG8gXGZzZXhwcmVzc2lvbigoKyAxIDEpKSAgICAg ICAgICAgIDsgT3V0ZXIgcGFyZW50aGVzZXMgbWF5IGJlIGluY2x1ZGVkCisgIGVjaG8gXGZzZXhw cigrIDEgMSkgICAgICAgICAgICAgICAgICAgIDsgT3V0ZXIgcGFyZW50aGVzZXMgbWF5IGJlIG9t aXR0ZWQKKyAgZWNobyBWYWx1ZSA9ICJcZnNleHAoKyAxIGEpIiAgICAgICAgICAgOyBDYW4gYmUg ZW1iZWRkZWQgaW4gc3RyaW5ncworICBlY2hvIFZhbHVlID0gXCZhW1xmc2V4cCgvIGIgMildICAg ICAgICA7IENhbiBiZSB1c2VkIGluIGFycmF5IHN1YnNjcmlwdHMKKyAgaWYgPSB7XGZzZXhwKCsg MSAxKX0gMiB7ICAgICAgICAgICAgICAgOyBCcmFjZXMgbmVlZGVkIGhlcmUgZm9yIGdyb3VwaW5n CisgICAgICBlY2hvIE9uZSBwbHVzIG9uZSBzdGlsbCBlcXVhbHMgdHdvCisgIH0KKworICAgVGhl IElGIHN0YXRlbWVudCBpbGx1c3RyYXRlcyBob3cgdG8gdXNlIFMtRXhwcmVzc2lvbnMgYXMgKG9y IGluKSBJRiBvcgorICAgV0hJTEUgY29uZGl0aW9uczoKKworICAgICAqIEFsdGhvdWdoIFMtRXhw cmVzc2lvbnMgYW5kIElGIGNvbmRpdGlvbnMgYXJlIHNpbWlsYXIgaW4gYXBwZWFyYW5jZSwKKyAg ICAgICB0aGV5IGFyZSBub3QgaW50ZXJjaGFuZ2VhYmxlLiBUaGVyZWZvcmUgeW91IG11c3QgdXNl IFxmc2V4cHIoKSB0bworICAgICAgIGxldCBLZXJtaXQga25vdyBpdCdzIGFuIFMtRXhwcmVzc2lv biByYXRoZXIgdGhhbiBhIHJlZ3VsYXIgSUYKKyAgICAgICBjb25kaXRpb24sIG9yIGEgYm9vbGVh biBvciBhbGdlYnJhaWMgZXhwcmVzc2lvbiB3aXRoaW4gYW4gSUYKKyAgICAgICBjb25kaXRpb24u CisgICAgICogSW4gY29udGV4dHMgd2hlcmUgYSBzaW5nbGUgIndvcmQiIGlzIGV4cGVjdGVkLCB5 b3UgbXVzdCBlbmNsb3NlIHRoZQorICAgICAgIFxmc2V4cCgpIGludm9jYXRpb24gaW4gYnJhY2Vz IGlmIHRoZSBTLUV4cHJlc3Npb24gY29udGFpbnMgc3BhY2VzCisgICAgICAgKGFuZCBtb3N0IG9m IHRoZW0gZG8pLgorCisgICBJZiBhbiBTLUV4cHJlc3Npb24gaXMgdGhlIGxhc3QgY29tbWFuZCBl eGVjdXRlZCBpbiBhIG1hY3JvLCBpdHMgdmFsdWUKKyAgIGJlY29tZXMgdGhlIHJldHVybiB2YWx1 ZSBvZiB0aGUgbWFjcm87IG5vIFJFVFVSTiBjb21tYW5kIGlzIG5lZWRlZC4KKyAgIEV4YW1wbGU6 CisKKyAgZGVmIG5ld2FyZWEgeworICAgICAgKGxldCBzICgvICgrIFwlMSBcJTIgXCUzKSAyLjAp KQorICAgICAgKHNxcnQgKCogcyAoLSBzIFwlMSkgKC0gcyBcJTIpICgtIHMgXCUzKSkpCisgIH0K KworICAgVGhpcyBpcyBlcXVpdmFsZW50IHRvIChidXQgbW9yZSBlZmZpY2llbnQgdGhhbik6CisK KyAgZGVmIG5ld2FyZWEgeworICAgICAgKGxldCBzICgvICgrIFwlMSBcJTIgXCUzKSAyLjApKQor ICAgICAgcmV0dXJuIFxmc2V4cChzcXJ0ICgqIHMgKC0gcyBcJTEpICgtIHMgXCUyKSAoLSBzIFwl MykpKQorICB9CisKKyAgIFdoZW4gYW4gUy1FeHByZXNzaW9uIGlzIGVudGVyZWQgYXMgYSBjb21t YW5kIC0tIHRoYXQgaXMsIHRoZSBmaXJzdAorICAgbm9uYmxhbmsgY2hhcmFjdGVyIG9mIHRoZSBj b21tYW5kIGlzIGEgbGVmdCBwYXJlbnRoZXNpcyAtLSB0aGVuIGl0IGlzCisgICBhbGxvd2VkIHRv IHNwYW4gbXVsdGlwbGUgbGluZXMsIGFzIG1hbnkgYXMgeW91IGxpa2UsIHVudGlsIHRoZSBmaXJz dAorICAgbGVmdCBwYXJlbnRoZXNpcyBpcyBtYXRjaGVkOgorCisgIChsZXQgcyAoLworICAgICAg ICAgICgrCisgICAgICAgICAgIFwlMQorICAgICAgICAgICBcJTIKKyAgICAgICAgICAgXCUzCisg ICAgICAgICAgICkKKyAgICAgICAgICAyLjAKKyAgICAgICAgICApCisgICAgICAgKQorICAoc3Fy dCAoKgorICAgICAgICAgcworICAgICAgICAgKC0gcyBcJTEpCisgICAgICAgICAoLSBzIFwlMikK KyAgICAgICAgICgtIHMgXCUzKQorICAgICAgICAgKQorICAgICAgICApCisKKyAgIFRoZSBTLUV4 cHJlc3Npb24gY29uY2VwdCBsZW5kcyBpdHNlbGYgZWFzaWx5IHRvIGVtYmVkZGluZyBhbmQKKyAg IHJlY3Vyc2lvbiwgYnV0IHRoZSBkZXB0aCB0byB3aGljaCByZWN1cnNpb24gY2FuIG9jY3VyIGlz IGxpbWl0ZWQgYnkgdGhlCisgICByZXNvdXJjZXMgb2YgdGhlIGNvbXB1dGVyIChtZW1vcnkgc2l6 ZSwgYWRkcmVzcyBzcGFjZSwgc3dhcCBzcGFjZSBvbgorICAgZGlzaykgYW5kIG90aGVyIGZhY3Rv cnMuIFRoZXJlIGlzIG5vIHdheSB0aGF0IEMtS2VybWl0IGNhbiBrbm93IHdoYXQKKyAgIHRoaXMg bGltaXQgaXMsIHNpbmNlIGl0IHZhcmllcyBub3Qgb25seSBmcm9tIGNvbXB1dGVyIHRvIGNvbXB1 dGVyLCBidXQKKyAgIGFsc28gZnJvbSBtb21lbnQgdG8gbW9tZW50LiBJZiByZXNvdXJjZXMgYXJl IGV4aGF1c3RlZCBieSByZWN1cnNpb24sCisgICBDLUtlcm1pdCBzaW1wbHkgY3Jhc2hlczsgdGhl cmUncyBubyB3YXkgdG8gdHJhcCB0aGlzIGVycm9yLiBIb3dldmVyLAorICAgeW91IGNhbiBzZXQg YSBkZXB0aCBsaW1pdCBvbiBTLUV4cHJlc3Npb25zOgorCisgICBTRVQgU0VYUFJFU1NJT04gREVQ VEgtTElNSVQgbnVtYmVyCisgICAgICAgICAgTGltaXRzIHRoZSBudW1iZXIgb2YgdGltZXMgdGhl IFMtRXhwcmVzc2lvbiByZWFkZXIgY2FuIGludm9rZQorICAgICAgICAgIGl0c2VsZiB3aXRob3V0 IHJldHVybmluZyB0byB0aGUgZ2l2ZW4gbnVtYmVyLiBUaGUgZGVmYXVsdCBsaW1pdAorICAgICAg ICAgIGlzIDEwMDAuIFRoaXMgbGltaXQgYXBwbGllcyB0byBTLUV4cHJlc3Npb25zIGVtYmVkZGVk IHdpdGhpbgorICAgICAgICAgIG90aGVyIFMtRXhwcmVzc2lvbnMgYXMgd2VsbCBhcyB0byBTLUV4 cHJlc3Npb25zIHRoYXQgaW52b2tlCisgICAgICAgICAgcmVjdXJzaXZlIG1hY3Jvcy4gSWYgdGhl IGxpbWl0IGlzIGV4Y2VlZGVkLCBLZXJtaXQgcHJpbnRzCisgICAgICAgICAgIj9TLUV4cHJlc3Np b24gZGVwdGggbGltaXQgZXhjZWVkZWQiIGFuZCByZXR1cm5zIHRvIGl0cyBwcm9tcHQuCisgICAg ICAgICAgTW9yZSBhYm91dCByZWN1cnNpb24gaW4gWzUwOF1TZWN0aW9uIDkuOC4KKworICAgWW91 IGNhbiBhbHNvIHRlc3QgdGhlIGRlcHRoIHByb2dyYW1tYXRpY2FsbHk6CisKKyAgIFx2KHNkZXB0 aCkKKyAgICAgICAgICBUaGUgY3VycmVudCBTLUV4cHJlc3Npb24gaW52b2NhdGlvbiBkZXB0aC4g VGhlIGRlcHRoIGluY2x1ZGVzCisgICAgICAgICAgYm90aCBuZXN0aW5nIGxldmVsIGFuZCByZWN1 cnNpb24uIEZvciBleGFtcGxlLCBpbjoKKyAgICAgICAgICAoZm9vIChmb28gKGZvbyAoZm9vIChm b28pKSkpKSwgdGhlIGlubmVybW9zdCAoZm9vKSBpcyBhdCBkZXB0aAorICAgICAgICAgIDUuCisK KyAgIEhlbHAsIGNvbXBsZXRpb24sIGFuZCBzeW50YXggY2hlY2tpbmcgYXJlIG5vdCBhdmFpbGFi bGUgd2l0aGluIGFuCisgICBTLUV4cHJlc3Npb24uIElmIHlvdSB0eXBlID8gd2l0aGluIGFuIFMt RXhwcmVzc2lvbiwgaXQgc2F5czoKKworICBDLUtlcm1pdD4oPyBTLUV4cHJlc3Npb24gKCJoZWxw IHNleHAiIGZvciBkZXRhaWxzKQorCisgICBBcyBpdCBzYXlzLCB0eXBpbmcgImhlbHAgc2V4cCIg d2lsbCBkaXNwbGF5IGEgYnJpZWYgaGVscCB0ZXh0LgorCisgICBUaGUgU0hPVyBTRVhQUkVTU0lP TiBjb21tYW5kIGRpc3BsYXlzIGN1cnJlbnQgU0VUIFNFWFBSRVNTSU9OIHNldHRpbmdzCisgICBh bmQgcmVsYXRlZCBpbmZvcm1hdGlvbi4KKworICAgWyBbNTA5XVRvcCBdIFsgWzUxMF1Db250ZW50 cyBdIFsgWzUxMV1DLUtlcm1pdCBIb21lIF0gWyBbNTEyXUtlcm1pdAorICAgSG9tZSBdCisKKzku NC4gU3VtbWFyeSBvZiBCdWlsdC1pbiBDb25zdGFudHMgYW5kIE9wZXJhdG9ycworCisgICBUaHJl ZSBjb25zdGFudHMgYXJlIGJ1aWx0IGluOgorCisgICAgICogUEksIHdob3NlIHZhbHVlIGlzIHRo ZSB2YWx1ZSBvZiBwaSAodGhlIHF1b3RpZW50IG9mIGNpcmN1bWZlcmVuY2UKKyAgICAgICBvZiBh bnkgY2lyY2xlIGFuZCBpdHMgZGlhbWV0ZXIsIDMuMTQxNTkyNjUzLi4uKSB0byB0aGUgdW5kZXJs eWluZworICAgICAgIG1hY2hpbmUncyBwcmVjaXNpb247CisgICAgICogVCwgd2hpY2ggYWx3YXlz IGhhcyB0aGUgdmFsdWUgMSwgd2hpY2ggc2lnbmlmaWVzIHRydXRoIGluIEtlcm1pdAorICAgICAg IGxvZ2ljYWwgZXhwcmVzc2lvbnMgb3IgUy1FeHByZXNzaW9uczsKKyAgICAgKiBOSUwsIHdoaWNo IGFsd2F5cyBoYXMgdGhlIGVtcHR5IHZhbHVlLCBhbmQgY2FuIHNlcnZlIGFzIGEgRmFsc2UKKyAg ICAgICB0cnV0aCB2YWx1ZS4KKworICAgVGhlc2UgY29uc3RhbnRzIGFyZSBzcGVjaWZpYyB0byBT LUV4cHJlc3Npb25zIGFuZCBhcmUgbm90IHZpc2libGUKKyAgIG91dHNpZGUgdGhlbS4gVGhleSBt YXkgbm90IGJlIHVzZWQgYXMgdGhlIHRhcmdldCBvZiBhbiBhc3NpZ25tZW50LiBTbywKKyAgIGZv ciBleGFtcGxlOgorCisgIChzZXRxIHQgMCkgICBGYWlscworICBhc3NpZ24gdCAwICAgU3VjY2Vl ZHMgYnV0IHRoaXMgaXMgbm90IHRoZSBzYW1lIFQhCisKKyAgIEUgKHRoZSBiYXNlIG9mIG5hdHVy YWwgbG9nYXJpdGhtcywgMi43MTgyODE4MTg0Li4uKSBpcyBub3QgYnVpbHQgaW4KKyAgIHNpbmNl IGl0IGlzIG5vdCBpbnRyaW5zaWMgaW4gbW9zdCBMaXNwIGRpYWxlY3RzLiBJZiB5b3Ugd2FudCBF IHRvIGJlCisgICB0aGUgYmFzZSBvZiBuYXR1cmFsIGxvZ2FyaXRobXMgeW91IGNhbjoKKworICAo c2V0cSBlIChleHAgMSkpCisKKyAgIE9wZXJhdG9ycyBhcmUgZWl0aGVyIHN5bWJvbHMgKHN1Y2gg YXMgIisiKSBvciB3b3Jkcy4gV29yZHMgbXVzdCBiZQorICAgc3BlbGxlZCBvdXQgaW4gZnVsbCwg bm90IGFiYnJldmlhdGVkLiBEaWZmZXJlbmNlcyBvZiBhbHBoYWJldGljIGNhc2UKKyAgIGFyZSBp Z25vcmVkLgorCisgICBUaGUgbW9zdCBiYXNpYyBvcGVyYXRpb24gaW4gUy1FeHByZXNzaW9ucyBp cyBldmFsdWF0aW9uOgorCisgICBFVkFMIFsgcy1leHByZXNzaW9uIG9yIHZhcmlhYmxlIG9yIG51 bWJlciBbIGFub3RoZXIgWyBhbm90aGVyIC4uLiBdIF0gXQorICAgICAgICAgIEV2YWx1YXRlcyBp dHMgb3BlcmFuZHMgYW5kIHJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBsYXN0IG9uZQorICAgICAg ICAgIGV2YWx1YXRlZC4gRXhhbXBsZXM6CisKKyAgKGV2YWwpICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAwCisgIChldmFsIDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQor ICAoZXZhbCBhKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIG9mIGEKKyAgKGV2 YWwgKCsgMSBhKSkgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSBvZiBhKzEKKyAgKGV2YWwg KHNldHEgYSAxKSAoc2V0cSBiICgrIGEgMC41KSkpICB2YWx1ZSBvZiBiICg9IGErMC41KQorCisg ICAgICAgICAgWW91IGNhbiB1c2UgIi4iIGFzIGEgc2hvcnRoYW5kIGZvciBFVkFMOgorCisgICgu KQorICAoLiAxKQorICAoLiBhKQorICAoLiAoKyAxIGEpKQorICAoLiAoc2V0cSBhIDEpIChzZXRx IGIgKCsgYSAwLjUpKSkKKworICAgT3Bwb3NpdGUgb2YgRVZBTCBpcyB0aGUgb3BlcmF0b3IgdGhh dCBzdXBwcmVzc2VzIGV2YWx1YXRpb24gb2YgaXRzCisgICBvcGVyYW5kOgorCisgICBRVU9URSBp dGVtCisgICAgICAgICAgVGhlIHZhbHVlIChxdW90ZSBpdGVtKSBpcyAiaXRlbSIuIElmIHRoZSBp dGVtIGlzIGl0c2VsZiBhbgorICAgICAgICAgIFMtRXhwcmVzc2lvbiwgdGhlIHJlc3VsdCBpcyB0 aGUgUy1FeHByZXNzaW9uIHdpdGggdGhlIG91dGVyCisgICAgICAgICAgcGFyZW50aGVzZXMgc3Ry aXBwZWQuIEV4YW1wbGVzOgorCisgIChxdW90ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKGlsbGVnYWwpCisgIChxdW90ZSBhKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYQor ICAocXVvdGUgaGVsbG8pICAgICAgICAgICAgICAgICAgICAgICAgIGhlbGxvCisgIChxdW90ZSAo dGhpcyBpcyBhIHN0cmluZykpICAgICAgICAgICAgdGhpcyBpcyBhIHN0cmluZworICAocXVvdGUg dGhpcyBpcyBhIHN0cmluZykgICAgICAgICAgICAgIChpbGxlZ2FsKQorCisgICAgICAgICAgQSBz aG9ydGhhbmQgbm90YXRpb24gaXMgYWxzbyBhY2NlcHRlZCBmb3IgcXVvdGluZzoKKyAgICAgICAg ICAnYSBpcyBlcXVpdmFsZW50IHRvIChxdW90ZSBhKS4gQW5kIHRoZXJlZm9yZToKKyAgICAgICAg ICAnKGEgYiBjKSBpcyBlcXVpdmFsZW50IHRvIChxdW90ZSAoYSBiIGMpKS4KKyAgICAgICAgICBN b3JlIGFib3V0IHF1b3RpbmcgaW4gWzUxM11TZWN0aW9uIDkuOC4KKworICAgU1RSSU5HIGl0ZW0K KyAgICAgICAgICBJcyBhIGNvbWJpbmF0aW9uIG9mIEVWQUwgYW5kIFFVT1RFLiBJdCBldmFsdWF0 ZXMgdGhlIGl0ZW0gYXMgYW4KKyAgICAgICAgICBTLUV4cHJlc3Npb24sIGFuZCB0aGVuIHB1dHMg cXVvdGVzIGFyb3VuZCB0aGUgcmVzdWx0IChtb3JlIGFib3V0CisgICAgICAgICAgdGhpcyBpbiBb NTE0XVNlY3Rpb24gOS44KS4KKworICAgVGhlIGZvbGxvd2luZyBvcGVyYXRvcnMgYXNzaWduIHZh bHVlcyB0byB2YXJpYWJsZXM6CisKKyAgIFNFVFEgWyB2YXJpYWJsZSBbIHZhbHVlIFsgdmFyaWFi bGUgWyB2YWx1ZSBbIC4uLiBdIF0gXSBdIF0KKyAgICAgICAgICBBcHBsaWVzIHRvIGdsb2JhbCB2 YXJpYWJsZXMuIEZvciBlYWNoIHZhcmlhYmxlIGdpdmVuOiBpZiBhIHZhbHVlCisgICAgICAgICAg aXMgbm90IGdpdmVuLCB0aGUgdmFyaWFibGUgaXMgdW5kZWZpbmVkLiBJZiBhIHZhbHVlIGlzIGdp dmVuLAorICAgICAgICAgIGFzc2lnbnMgdGhlIHZhbHVlIHRvIHRoZSB2YXJpYWJsZS4gVGhlIHZh bHVlIG1heSBiZSBhIG51bWJlciwgYQorICAgICAgICAgIHZhcmlhYmxlLCBvciBhbnl0aGluZyB0 aGF0IHJlc29sdmVzIHRvIGEgbnVtYmVyIGluY2x1ZGluZyBhbgorICAgICAgICAgIFMtRXhwcmVz c2lvbi4gUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGxhc3QgYXNzaWdubWVudC4KKyAgICAgICAg ICBFeGFtcGxlczoKKworICAoc2V0cSkgICAgICAgICAgICAgRG9lcyBub3RoaW5nLCByZXR1cm5z IE5JTC4KKyAgKHNldHEgYSkgICAgICAgICAgIFVuZGVmaW5lcyBhLCByZXR1cm5zIE5JTC4KKyAg KHNldHEgYSAxKSAgICAgICAgIEFzc2lnbnMgMSB0byBhLCByZXR1cm5zIDEuCisgIChzZXRxIGEg MSBiIDIpICAgICBBc3NpZ25zIDEgdG8gYSwgMiB0byBiLCByZXR1cm5zIDIuCisgIChzZXRxIGEg MSBiIDIgYykgICBBc3NpZ25zIDEgdG8gYSwgMiB0byBiLCB1bmRlZmluZXMgYywgcmV0dXJucyBO SUwuCisKKyAgIFRvIHVuZGVmaW5lIGEgdmFyaWFibGUgdGhhdCBpcyBub3QgdGhlIGZpbmFsIG9u ZSBpbiB0aGUgbGlzdCwgZ2l2ZSBpdCBhCisgICB2YWx1ZSBvZiAiKCkiIG9yIE5JTDoKKworICAo c2V0cSBhICgpIGIgMikgICAgVW5kZWZpbmVzIGEsIGFzc2lnbnMgMiB0byBiLCByZXR1cm5zIDIu CisgIChzZXRxIGEgbmlsIGIgMikgICBEaXR0by4KKworICAgTm90ZSB0aGF0IGEgdmFyaWFibGUg Y2FuIGJlIHVzZWQgcmlnaHQgYXdheSBvbmNlIGl0IGhhcyBhIHZhbHVlOgorCisgIChzZXRxIGEg MSBiIGEpICAgICBBc3NpZ25zIDEgdG8gYSwgdGhlIHZhbHVlIG9mIGEgKDEpIHRvIGIsIHJldHVy bnMgMS4KKworICAgVGhlIHJlc3VsdHMgb2YgU0VUUSAod2hlbiB1c2VkIHdpdGggbWFjcm8gbmFt ZXMpIGNhbiBiZSBjaGVja2VkCisgICBjb252ZW5pZW50bHkgd2l0aCBTSE9XIE1BQ1JPLCBlLmc6 CisKKyAgc2hvdyBtYWMgYSBiIGMKKworICAgTEVUIFsgdmFyaWFibGUgWyB2YWx1ZSBbIHZhcmlh YmxlIFsgdmFsdWUgWyAuLi4gXSBdIF0gXSBdCisgICAgICAgICAgTGlrZSBTRVRRLCBidXQgYXBw bGllcyB0byBsb2NhbCB2YXJpYWJsZXMuIE5vdGUgdGhhdCAibG9jYWwiIGlzCisgICAgICAgICAg dXNlZCBpbiB0aGUgS2VybWl0IHNlbnNlLCBub3QgdGhlIExpc3Agc2Vuc2U7IGl0IGFwcGxpZXMg dG8gdGhlCisgICAgICAgICAgY3VycmVudCBLZXJtaXQgY29tbWFuZCBsZXZlbCwgbm90IHRvIHRo ZSBjdXJyZW50IFMtRXhwcmVzc2lvbi4KKworICAgSWYgeW91IHdhbnQgdG8gdXNlIFNFVFEgb3Ig TEVUIHRvIGFzc2lnbiBhIHZhbHVlIHRvIGEgYmFja3NsYXNoCisgICB2YXJpYWJsZSBzdWNoIGFz IFwlYSBvciBcJmFbMl0sIHlvdSBtdXN0IGRvdWJsZSB0aGUgYmFja3NsYXNoOgorCisgIChzZXRx IFxcJWEgMykKKyAgKHNldHEgXFwlYiAoKyBcJWEgMSkpCisgIChzZXRxIFxcJmFbMl0gKHNldHEg KFxcJWMgKCsgXCVhIFwlYikpKSkKKworICAgSW4gb3RoZXIgd29yZHM6CisKKyAgICAgKiBEb3Vi bGUgdGhlIGJhY2tzbGFzaCB3aGVuIHlvdSB3YW50IHRvIGluZGljYXRlIHRoZSB2YXJpYWJsZSdz IE5BTUU7CisgICAgICogRG9uJ3QgZG91YmxlIHRoZSBiYWNrc2xhc2ggd2hlbiB5b3Ugd2FudCBp dHMgVkFMVUUuCisKKyAgIFNlZSBbNTE1XVNlY3Rpb24gOS42IGZvciBhIGZ1bGxlciBleHBsYW5h dGlvbiBvZiB2YXJpYWJsZSBzeW50YXggYW5kCisgICBzY29wZS4KKworICAgSGVyZSdzIGEgc3Vt bWFyeSB0YWJsZSBvZiBhcml0aG1ldGljIG9wZXJhdG9yczsgaW4gdGhlIGV4YW1wbGVzLCBhIGlz IDIKKyAgIGFuZCBiIGlzIC0xLjM6CisKKyAgT3BlcmF0b3IgIERlc2NyaXB0aW9uICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEV4YW1wbGUgICAgICAgICAgIFJlc3VsdAorICArICAgICAgICAg QWRkcyBhbGwgb3BlcmFuZHMgKDAgb3IgbW9yZSkgICAgICAgICAgKCsgYSBiKSAgICAgICAgICAg MC43CisgIC0gICAgICAgICBTdWJ0cmFjdHMgYWxsIG9wZXJhbmRzICgwIG9yIG1vcmUpICAgICAo LSA5IDUgMiAxKSAgICAgICAxCisgICogICAgICAgICBNdWx0aXBsaWVzIGFsbCBvcGVyYW5kcyAo MCBvciBtb3JlKSAgICAoKiBhICgrIGIgMSkgMykgIC0xLjgwCisgIC8gICAgICAgICBEaXZpZGVz IGFsbCBvcGVyYW5kcyAoMiBvciBtb3JlKSAgICAgICAoLyBiIGEgMikgICAgICAgIC0wLjMyNQor ICBeICAgICAgICAgUmFpc2UgZ2l2ZW4gbnVtYmVyIHRvIGdpdmVuIHBvd2VyICAgICAgKF4gMyAy KSAgICAgICAgICAgOQorICArKyAgICAgICAgSW5jcmVtZW50cyB2YXJpYWJsZXMgICAgICAgICAg ICAgICAgICAgKCsrIGEgMS4yKSAgICAgICAgMy4yCisgIC0tICAgICAgICBEZWNyZW1lbnRzIHZh cmlhYmxlcyAgICAgICAgICAgICAgICAgICAoLS0gYSkgICAgICAgICAgICAxCisgIEFCUyAgICAg ICBBYnNvbHV0ZSB2YWx1ZSBvZiAxIG9wZXJhbmQgICAgICAgICAgICAoYWJzICgqIGEgYiAzKSkg ICA3LjgKKyAgTUFYICAgICAgIE1heGltdW0gb2YgYWxsIG9wZXJhbmRzICgxIG9yIG1vcmUpICAg IChtYXggMSAyIDMgNCkgICAgIDQKKyAgTUlOICAgICAgIE1pbmltdW0gb2YgYWxsIG9wZXJhbmRz ICgxIG9yIG1vcmUpICAgIChtaW4gMSAyIDMgNCkgICAgIDEKKyAgTU9EICglKSAgIE1vZHVsdXMg b2YgYWxsIG9wZXJhbmRzICgxIG9yIG1vcmUpICAgIChtb2QgNyA0IDIpICAgICAgIDEKKyAgRkxP QVQgICAgIENvbnZlcnQgYW4gaW50ZWdlciB0byBmbG9hdGluZy1wb2ludCAgIChmbG9hdCAxKSAg ICAgICAgIDEuMAorICBUUlVOQ0FURSAgSW50ZWdlciBwYXJ0IG9mIGZsb2F0aW5nLXBvaW50IG9w ZXJhbmQgKHRydW5jYXRlIDMuMzMzKSAgMworICBDRUlMSU5HICAgQ2VpbGluZyBvZiBmbG9hdGlu Zy1wb2ludCBvcGVyYW5kICAgICAgKGNlaWxpbmcgMS4yNSkgICAgMgorICBGTE9PUiAgICAgRmxv b3Igb2YgZmxvYXRpbmctcG9pbnQgb3BlcmFuZCAgICAgICAgKGZsb29yIDEuMjUpICAgICAgMQor ICBST1VORCAgICAgT3BlcmFuZCByb3VuZGVkIHRvIG5lYXJlc3QgaW50ZWdlciAgICAgKHJvdW5k IDEuNzUpICAgICAgMgorICBTUVJUICAgICAgU3F1YXJlIHJvb3Qgb2YgMSBvcGVyYW5kICAgICAg ICAgICAgICAgKHNxcnQgMikgICAgICAgICAgMS40MTQuLgorICBFWFAgICAgICAgZSAoMi43MTgy OC4uKSB0byB0aGUgZ2l2ZW4gcG93ZXIgICAgICAgKGV4cCAtMSkgICAgICAgICAgMC4zNjcuLgor ICBTSU4gICAgICAgU2luZSBvZiBhbmdsZS1pbi1yYWRpYW5zICAgICAgICAgICAgICAgKHNpbiAo LyBwaSAyKSkgICAgMS4wCisgIENPUyAgICAgICBDb3NpbmUgb2YgYW5nbGUtaW4tcmFkaWFucyAg ICAgICAgICAgICAoY29zIHBpKSAgICAgICAgIC0xLjAKKyAgVEFOICAgICAgIFRhbmdlbnQgb2Yg YW5nbGUtaW4tcmFkaWFucyAgICAgICAgICAgICh0YW4gcGkpICAgICAgICAgIDAuMAorICBMT0cg ICAgICAgTmF0dXJhbCBsb2cgKGJhc2UgZSkgb2YgZ2l2ZW4gbnVtYmVyICAgKGxvZyAyLjcxODMp ICAgICAgMS4wMDAuLgorICBMT0cxMCAgICAgTG9nIGJhc2UgMTAgb2YgZ2l2ZW4gbnVtYmVyICAg ICAgICAgICAgKGxvZzEwIDEwMDApICAgICAgMy4wCisKKyAgIFRoZSArKyBhbmQgLS0gb3BlcmF0 b3JzIGFyZSBhbHNvIGFzc2lnbm1lbnQgb3BlcmF0b3JzIGFuZCB3b3JrIGp1c3QKKyAgIGxpa2Ug U0VUUSBhbmQgTEVUIGluIHRoZWlyIGludGVycHJldGF0aW9ucyBvZiBvcGVyYXRvcnMgYW5kIG9w ZXJhbmRzLAorICAgYnV0OgorCisgICAgICogRWFjaCB0YXJnZXQgdmFyaWFibGUgbXVzdCBhbHJl YWR5IGJlIGRlZmluZWQgYW5kIGhhdmUgYSBudW1lcmljCisgICAgICAgdmFsdWU7CisgICAgICog VGhlIGFzc2lnbm1lbnQgdmFsdWUgaXMgdGhlIGFtb3VudCBieSB3aGljaCB0byBpbmNyZW1lbnQg b3IKKyAgICAgICBkZWNyZW1lbnQgdGhlIHZhcmlhYmxlLgorICAgICAqIElmIGFuIGFzc2lnbm1l bnQgdmFsdWUgaXMgbm90IGdpdmVuLCAxIGlzIHVzZWQuCisKKyAgIElmIHlvdSBpbmNsdWRlIG1v cmUgdGhhbiBvbmUgdmFyaWFibGUtdmFsdWUgcGFpciBpbiBhICsrIG9yIC0tCisgICBleHByZXNz aW9uLCBldmVyeSB2YXJpYWJsZSAoZXhjZXB0LCBvcHRpb25hbGx5LCB0aGUgbGFzdCkgbXVzdCBi ZQorICAgZm9sbG93ZWQgYnkgYSB2YWx1ZS4gRXhhbXBsZXM6CisKKyAgKCsrIGEpICAgICAgICAg ICAgICAgIEVxdWl2YWxlbnQgdG8gKHNldHEgYSAoKyBhIDEpKSBhbmQgdG8gKCsrIGEgMSkKKyAg KCsrIGEgMikgICAgICAgICAgICAgIEVxdWl2YWxlbnQgdG8gKHNldHEgYSAoKyBhIDIpKQorICAo LS0gYSAoKiAyIHBpKSkgICAgICAgRXF1aXZhbGVudCB0byAoc2V0cSBhICgtIGEgKCogMiBwaSkp KQorICAoKysgYSAxIGIgMSBjIDEgZCkgICAgRXF1aXZhbGVudCB0byBmb3VyIFNFVFFzIGluY3Jl bWVudGluZyBhLGIsYyxkIGJ5IDEuCisKKyAgIEFub3RoZXIgZ3JvdXAgb2Ygb3BlcmF0b3JzIGZv cm1zIHRoZSBwcmVkaWNhdGVzLiBUaGVzZSByZXR1cm4gYSAidHJ1dGgKKyAgIHZhbHVlIiwgaW4g d2hpY2ggMCAob3IgTklMKSBpcyBmYWxzZSwgYW5kIDEgb3IgYW55IG90aGVyIG5vbnplcm8gbnVt YmVyCisgICBpcyB0cnVlLgorCisgIE9wZXJhdG9yICBEZXNjcmlwdGlvbiAgICAgICAgICAgICAg ICAgICAgICAgICAgICBFeGFtcGxlICAgICAgICAgICBSZXN1bHQKKyAgPSAob3IgPT0pIE9wZXJh bmRzIGFyZSBlcXVhbCAgICAgICAgICAgICAgICAgICAgICg9IDEgMS4wKSAgICAgICAgIDEKKyAg IT0gICAgICAgIE9wZXJhbmRzIGFyZSBub3QgZXF1YWwgICAgICAgICAgICAgICAgICghPSAxIDEu MCkgICAgICAgIDAKKyAgPCAgICAgICAgIE9wZXJhbmRzIGluIHN0cmljdGx5IGFzY2VuZGluZyBv cmRlciAgICg8IDEgMiAzKSAgICAgICAgIDEKKyAgPD0gICAgICAgIE9wZXJhbmRzIGluIGFzY2Vu ZGluZyBvcmRlciAgICAgICAgICAgICg8PSAxIDEgMiAzKSAgICAgIDEKKyAgPiAgICAgICAgIE9w ZXJhbmRzIGluIHN0cmljdGx5IGRlc2NlbmRpbmcgb3JkZXIgICg+IDMgMiAxKSAgICAgICAgIDEK KyAgPj0gICAgICAgIE9wZXJhbmRzIGluIGRlc2NlbmRpbmcgb3JkZXIgICAgICAgICAgICg8PSAz IDMgMiAxKSAgICAgIDEKKyAgQU5EICgmJikgIE9wZXJhbmRzIGFyZSBhbGwgdHJ1ZSAgICAgICAg ICAgICAgICAgIChhbmQgMSAxIDEgMSAwKSAgIDAKKyAgT1IgICh8fCkgIEF0IGxlYXN0IG9uZSBv cGVyYW5kIGlzIHRydWUgICAgICAgICAgIChvciAxIDEgMSAxIDApICAgIDEKKyAgWE9SICAgICAg IExvZ2ljYWwgRXhjbHVzaXZlIE9SICAgICAgICAgICAgICAgICAgICh4b3IgMyAxKSAgICAgICAg IDAKKyAgTk9UICghKSAgIFJldmVyc2VzIHRydXRoIHZhbHVlIG9mIG9wZXJhbmQgICAgICAgIChu b3QgMykgICAgICAgICAgIDAKKworICAgVGhlIEV4Y2x1c2l2ZSBPUiBvZiB0d28gdmFsdWVzIGlz IHRydWUgaWYgb25lIHZhbHVlIGlzIHRydWUgYW5kIHRoZQorICAgb3RoZXIgdmFsdWUgaXMgZmFs c2UuCisKKyAgIEFuZCBhbm90aGVyIGdyb3VwIG9wZXJhdGVzIG9uIGJpdHMgd2l0aGluIGFuIGlu dGVnZXIgd29yZDoKKworICBPcGVyYXRvciAgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAg ICAgICAgICAgRXhhbXBsZSAgICAgICAgICAgUmVzdWx0CisgICYgICAgICAgICBCaXR3aXNlIEFO RCAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJiA3IDIpICAgICAgICAgICAyCisgIHwgICAg ICAgICBCaXR3aXNlIE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAofCAxIDIgMyA0KSAg ICAgICA3CisgICMgICAgICAgICBCaXR3aXNlIEV4Y2x1c2l2ZSBPUiAgICAgICAgICAgICAgICAg ICAoIyAzIDEpICAgICAgICAgICAyCisgIH4gICAgICAgICBSZXZlcnNlcyBhbGwgYml0cyAgICAg ICAgICAgICAgICAgICAgICAofiAzKSAgICAgICAgICAgIC00CisKKyAgIFRoZXNlIG9wZXJhdG9y cyBjb2VyY2UgdGhlaXIgb3BlcmFuZHMgdG8gaW50ZWdlciBieSB0cnVuY2F0aW9uIGlmCisgICBu ZWNlc3NhcnkuIFRoZSByZXN1bHQgb2YgYml0IHJldmVyc2FsIGlzIGhhcmR3YXJlIGRlcGVuZGVu dC4KKworICAgVGhlIGZpbmFsIGNhdGVnb3J5IG9mIG9wZXJhdG9yIHdvcmtzIG9uIHRydXRoIHZh bHVlczoKKworICBPcGVyYXRvciAgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAg ICAgRXhhbXBsZSAgICAgICAgICAgUmVzdWx0CisgIElGICAgICAgICBDb25kaXRpb25hbCBldmFs dWF0aW9uICAgICAgICAgICAgICAgICAoaWYgKDEpIDIgMykgICAgICAyCisKKyAgIElGIChwcmVk aWNhdGUpIChzMSkgWyAoczIpIF0KKyAgICAgICAgICBUaGUgSUYgb3BlcmF0b3IgaXMgc2ltaWxh ciB0byBLZXJtaXQncyBJRiBjb21tYW5kLiBJZiB0aGUKKyAgICAgICAgICBwcmVkaWNhdGUgaXMg dHJ1ZSAoaS5lLiBldmFsdWF0ZXMgdG8gYSBub256ZXJvIG51bWJlciksIHRoZQorICAgICAgICAg IGZpcnN0IFMtRXhwcmVzc2lvbiAoczEpIGlzIGV2YWx1YXRlZCBhbmQgaXRzIHZhbHVlIGlzIHJl dHVybmVkLgorICAgICAgICAgIE90aGVyd2lzZSwgaWYgKHMyKSBpcyBnaXZlbiwgaXQgaXMgZXZh bHVhdGVkIGFuZCBpdHMgdmFsdWUKKyAgICAgICAgICByZXR1cm5lZDsgaWYgKHMyKSBpcyBub3Qg Z2l2ZW4sIG5vdGhpbmcgaGFwcGVucyBhbmQgdGhlIE5JTAorICAgICAgICAgIChlbXB0eSkgdmFs dWUgaXMgcmV0dXJuZWQuCisKKyAgIFlvdSBjYW4gZ3JvdXAgbXVsdGlwbGUgZXhwcmVzc2lvbnMg aW4gdGhlIHMxIGFuZCBzMiBleHByZXNzaW9ucyB1c2luZworICAgRVZBTCAob3IgIi4iKToKKwor ICAoaWYgKDwgYSAwKSAoZXZhbCAoc2V0cSB4IDApIChzZXRxIHkgMCkpIChldmFsIChzZXRxIHgg YSkgKHNldHEgeSBiKSkpCisKKyAgIG9yIGVxdWl2YWxlbnRseToKKworICAoaWYgKDwgYSAwKSAo LiAoc2V0cSB4IDApIChzZXRxIHkgMCkpICguIChzZXRxIHggYSkgKHNldHEgeSBiKSkpCisKKyAg IEVhY2ggb3BlcmF0b3IgaGFzIGl0cyBvd24gcmVxdWlyZW1lbnQgYXMgdG8gbnVtYmVyIGFuZCB0 eXBlIG9mCisgICBvcGVyYW5kcy4gSW4gdGhlIGZvbGxvd2luZyB0YWJsZSwgIm51bWJlciIgbWVh bnMgYW55IGtpbmQgb2YgbnVtYmVyIC0tCisgICBpbnRlZ2VyIG9yIGZsb2F0aW5nLXBvaW50IC0t IG9yIGEgdmFyaWFibGUsIGZ1bmN0aW9uLCBtYWNybywgb3IKKyAgIFMtRXhwcmVzc2lvbiB0aGF0 IHJldHVybnMgYSBudW1iZXI7ICJ2bmFtZSIgbWVhbnMgdmFyaWFibGUgbmFtZSwKKyAgICJmcG51 bWJlciIgbWVhbnMgYSBmbG9hdGluZy1wb2ludCBudW1iZXIgKG9yIGFueXRoaW5nIHRoYXQgcmVz b2x2ZXMgdG8KKyAgIG9uZSksIGFuZCAiaW50ZWdlciIgbWVhbnMgaW50ZWdlciAob3IgYW55dGhp bmcgdGhhdCByZXNvbHZlcyB0byBvbmUpLgorICAgInRydXRodmFsdWUiIG1lYW5zIGFueXRoaW5n IHRoYXQgcmVzb2x2ZXMgdG8gYSB2YWx1ZSBvZiB6ZXJvIG9yIGFuCisgICBlbXB0eSB2YWx1ZSAo d2hpY2ggaW5kaWNhdGVzIGZhbHNlKSBvciBhIG5vbnplcm8gdmFsdWUgKHdoaWNoIGluZGljYXRl cworICAgdHJ1ZSkuICJhbnkiIG1lYW5zIGFueSBraW5kIG9mIHZhbHVlLCBpbmNsdWRpbmcgbm9u ZSBhdCBhbGwuCisKKyAgT3BlcmF0b3IgIE51bWJlciBvZiBvcGVyYW5kcyAgIFR5cGUgb2Ygb3Bl cmFuZHMgICAgUmV0dXJucworICBFVkFMICAoLikgMCBvciBtb3JlICAgICAgICAgICAgUy1FeHBy ZXNzaW9uICAgICAgICBMYXN0IHZhbHVlIChkZWZhdWx0IE5JTCkKKyAgU1RSSU5HICAgIDEgICAg ICAgICAgICAgICAgICAgIFMtRXhwcmVzc2lvbiAgICAgICAgc3RyaW5nCisgIFFVT1RFICgnKSAx ICAgICAgICAgICAgICAgICAgICB3b3JkICAgICAgICAgICAgICAgIHN0cmluZworICBTRVRRICAg ICAgMCBvciBtb3JlICAgICAgICAgICAgdm5hbWUgdmFsdWUgcGFpcnMgICBMYXN0IHZhbHVlIChk ZWZhdWx0IE5JTCkKKyAgTEVUICAgICAgIDAgb3IgbW9yZSAgICAgICAgICAgIHZuYW1lIHZhbHVl IHBhaXJzICAgTGFzdCB2YWx1ZSAoZGVmYXVsdCBOSUwpCisgICsgICAgICAgICAwIG9yIG1vcmUg ICAgICAgICAgICBudW1iZXIgICAgICAgICAgICAgIG51bWJlciAgICAgKGRlZmF1bHQgMCkKKyAg LSAgICAgICAgIDAgb3IgbW9yZSAgICAgICAgICAgIG51bWJlciAgICAgICAgICAgICAgbnVtYmVy ICAgICAoZGVmYXVsdCAwKQorICAqICAgICAgICAgMCBvciBtb3JlICAgICAgICAgICAgbnVtYmVy ICAgICAgICAgICAgICBudW1iZXIgICAgIChzZWUgbm90ZSAoMSkpCisgIC8gICAgICAgICAyIG9y IG1vcmUgICAgICAgICAgICBudW1iZXIgICAgICAgICAgICAgIG51bWJlcgorICBeICAgICAgICAg MiBvciBtb3JlICAgICAgICAgICAgbnVtYmVyICAgICAgICAgICAgICBudW1iZXIKKyAgKysgICAg ICAgIDEgb3IgbW9yZSAgICAgICAgICAgIHZuYW1lIHZhbHVlIHBhaXJzICAgUmVzdWx0IG9mIGxh c3QgaW5jcmVtZW50CisgIC0tICAgICAgICAxIG9yIG1vcmUgICAgICAgICAgICB2bmFtZSB2YWx1 ZSBwYWlycyAgIFJlc3VsdCBvZiBsYXN0IGRlY3JlbWVudAorICBBQlMgICAgICAgMSAgICAgICAg ICAgICAgICAgICAgbnVtYmVyICAgICAgICAgICAgICBudW1iZXIKKyAgTUFYICAgICAgIDEgb3Ig bW9yZSAgICAgICAgICAgIG51bWJlciAgICAgICAgICAgICAgbnVtYmVyCisgIE1JTiAgICAgICAx IG9yIG1vcmUgICAgICAgICAgICBudW1iZXIgICAgICAgICAgICAgIG51bWJlcgorICBNT0QgKCUp ICAgMiAgICAgICAgICAgICAgICAgICAgbnVtYmVyICAgICAgICAgICAgICBudW1iZXIKKyAgRkxP QVQgICAgIDEgICAgICAgICAgICAgICAgICAgIG51bWJlciAgICAgICAgICAgICAgZnBudW1iZXIK KyAgVFJVTkNBVEUgIDEgICAgICAgICAgICAgICAgICAgIG51bWJlciAgICAgICAgICAgICAgaW50 ZWdlcgorICBDRUlMSU5HICAgMSAgICAgICAgICAgICAgICAgICAgbnVtYmVyICAgICAgICAgICAg ICBpbnRlZ2VyCisgIEZMT09SICAgICAxICAgICAgICAgICAgICAgICAgICBudW1iZXIgICAgICAg ICAgICAgIGludGVnZXIKKyAgUk9VTkQgICAgIDEgICAgICAgICAgICAgICAgICAgIG51bWJlciAg ICAgICAgICAgICAgaW50ZWdlcgorICBTUVJUICAgICAgMSAgICAgICAgICAgICAgICAgICAgbnVt YmVyICAgICAgICAgICAgICBmcG51bWJlcgorICBFWFAgICAgICAgMSAgICAgICAgICAgICAgICAg ICAgbnVtYmVyICAgICAgICAgICAgICBmcG51bWJlcgorICBTSU4gICAgICAgMSAgICAgICAgICAg ICAgICAgICAgbnVtYmVyICAgICAgICAgICAgICBmcG51bWJlcgorICBDT1MgICAgICAgMSAgICAg ICAgICAgICAgICAgICAgbnVtYmVyICAgICAgICAgICAgICBmcG51bWJlcgorICBUQU4gICAgICAg MSAgICAgICAgICAgICAgICAgICAgbnVtYmVyICAgICAgICAgICAgICBmcG51bWJlcgorICBMT0cg ICAgICAgMSAgICAgICAgICAgICAgICAgICAgbnVtYmVyICAgICAgICAgICAgICBmcG51bWJlcgor ICBMT0cxMCAgICAgMSAgICAgICAgICAgICAgICAgICAgbnVtYmVyICAgICAgICAgICAgICBmcG51 bWJlcgorICA9ICg9PSkgICAgMSBvciBtb3JlICAgICAgICAgICAgbnVtYmVyICAgICAgICAgICAg ICB0cnV0aHZhbHVlCisgICE9ICAgICAgICAxIG9yIG1vcmUgICAgICAgICAgICBudW1iZXIgICAg ICAgICAgICAgIHRydXRodmFsdWUKKyAgPCAgICAgICAgIDEgb3IgbW9yZSAgICAgICAgICAgIG51 bWJlciAgICAgICAgICAgICAgdHJ1dGh2YWx1ZQorICA8PSAgICAgICAgMSBvciBtb3JlICAgICAg ICAgICAgbnVtYmVyICAgICAgICAgICAgICB0cnV0aHZhbHVlCisgID4gICAgICAgICAxIG9yIG1v cmUgICAgICAgICAgICBudW1iZXIgICAgICAgICAgICAgIHRydXRodmFsdWUKKyAgPj0gICAgICAg IDEgb3IgbW9yZSAgICAgICAgICAgIG51bWJlciAgICAgICAgICAgICAgdHJ1dGh2YWx1ZQorICBB TkQgKCYmKSAgMSBvciBtb3JlICAgICAgICAgICAgdHJ1dGh2YWx1ZSAgICAgICAgICB0cnV0aHZh bHVlCisgIE9SICAofHwpICAxIG9yIG1vcmUgICAgICAgICAgICB0cnV0aHZhbHVlICAgICAgICAg IHRydXRodmFsdWUKKyAgWE9SICAgICAgIDIgICAgICAgICAgICAgICAgICAgIHRydXRodmFsdWUg ICAgICAgICAgdHJ1dGh2YWx1ZQorICBOT1QgKCEpICAgMSAgICAgICAgICAgICAgICAgICAgdHJ1 dGh2YWx1ZSAgICAgICAgICB0cnV0aHZhbHVlCisgICYgICAgICAgICAxIG9yIG1vcmUgICAgICAg ICAgICBudW1iZXIgKHNlZSBub3RlIDIpIGludGVnZXIKKyAgfCAgICAgICAgIDEgb3IgbW9yZSAg ICAgICAgICAgIG51bWJlciAoc2VlIG5vdGUgMikgaW50ZWdlcgorICAjICAgICAgICAgMiAgICAg ICAgICAgICAgICAgICAgbnVtYmVyIChzZWUgbm90ZSAyKSBpbnRlZ2VyCisgIH4gICAgICAgICAx ICAgICAgICAgICAgICAgICAgICBudW1iZXIgKHNlZSBub3RlIDIpIGludGVnZXIKKyAgSUYgICAg ICAgIDIgb3IgMyAgICAgICAgICAgICAgIHRydXRodmFsdWUsYW55LGFueSAgYW55CisKKyAgIE9w ZXJhdG9ycyB0aGF0IGRvbid0IHJlcXVpcmUgYW55IGFyZ3VtZW50cyByZXR1cm4gdGhlIGRlZmF1 bHQgdmFsdWVzCisgICBzaG93bi4KKworICAgIDEuIFRoZSB2YWx1ZSBvZiAiKiIsIHdoZW4gdXNl ZCBhcyBhbiBvcGVyYW5kLCBpcyBpbml0aWFsbHkgIjEiIGFuZCB0aGUKKyAgICAgICB2YWx1ZSBv ZiB0aGUgbW9zdCByZWNlbnQgUy1FeHByZXNzaW9uIHRoZXJlYWZ0ZXIsIGFzIGluIEZyYW56IExp c3AuCisgICAgICAgVGhpcyBpcyBoYW5keSB3aGVuIGRvaW5nIGEgc2VyaWVzIG9mIGNhbGN1bGF0 aW9ucyBieSBoYW5kOgorICBDLUtlcm1pdD4oKiAxMzI3Mi40MiAwLjQwKQorICAgNTMwOC45NjgK KyAgQy1LZXJtaXQ+KC8gKiAyKQorICAgMjY1NC40ODQwCisgIEMtS2VybWl0PgorCisgICAgMi4g VGhlIGJpdHdpc2Ugb3BlcmF0b3JzIGNvZXJjZSB0aGVpciBvcGVyYW5kcyB0byBpbnRlZ2VyIGJ5 CisgICAgICAgdHJ1bmNhdGlvbi4KKworICAgWyBbNTE2XVRvcCBdIFsgWzUxN11Db250ZW50cyBd IFsgWzUxOF1DLUtlcm1pdCBIb21lIF0gWyBbNTE5XUtlcm1pdAorICAgSG9tZSBdCisKKzkuNS4g VmFyaWFibGVzCisKKyAgIEFzIG5vdGVkIGVsc2V3aGVyZSBpbiB0aGlzIGRpc2N1c3Npb24sIGFs bCBiYWNrc2xhc2ggaXRlbXMgKHZhcmlhYmxlcworICAgc3VjaCBhcyBcJWEsIG1hY3JvIHBhcmFt ZXRlcnMgc3VjaCBhcyBcJTEsIGFycmF5IGVsZW1lbnRzIHN1Y2ggYXMKKyAgIFwmYVtcJWldLCBi dWlsdC1pbiB2YXJpYWJsZXMgc3VjaCBhcyBcdihuZGF0ZSksIGJ1aWx0LWluIGZ1bmN0aW9ucyBz dWNoCisgICBhcyBcZmpvaW4oKSwgbWFjcm8gbmFtZXMgZW5jbG9zZWQgaW4gXG0oKSwgXHMoKSwg b3IgXDooKSwgZXRjKSBhcmUKKyAgIGV2YWx1YXRlZCBhdCAidG9wIGxldmVsIiBiZWZvcmUgdGhl IFMtRXhwcmVzc2lvbiBpcyBzZW50IHRvIHRoZQorICAgUy1FeHByZXNzaW9uIHJlYWRlci4gVG8g dXNlIGEgYmFja3NsYXNoIHZhcmlhYmxlIGFzIHRoZSB0YXJnZXQgb2YgYW4KKyAgIGFzc2lnbm1l bnQgKGUuZy4gYnkgU0VUUSwgTEVULCArKywgb3IgLS0pLCB5b3UgbXVzdCBkb3VibGUgdGhlCisg ICBiYWNrc2xhc2gsIGUuZy4gKHNldHEgXFwlciAxMjM0KS4gVGhpcyBpcyBkaXNjdXNzZWQgYXQg Z3JlYXRlciBsZW5ndGgKKyAgIGluIHRoZSBuZXh0IHNlY3Rpb24uCisKKyAgIFRodXMgUy1FeHBy ZXNzaW9uIHJlYWRlciBnZW5lcmFsbHkgZGVhbHMgb25seSB3aXRoIG1hY3JvIG5hbWVzIChub3QK KyAgIGJhY2tzbGFzaCBpdGVtcykgYXMgdmFyaWFibGVzLiBJdCBpcyBpbXBvcnRhbnQgdG8gdW5k ZXJzdGFuZCBob3cgdGhlCisgICByZWFkZXIgaGFuZGxlcyBtYWNybyBuYW1lcy4gVGhlcmUgYXJl IGZ1bmRhbWVudGFsbHkgdHdvIGtpbmRzIG9mCisgICBTLUV4cHJlc3Npb25zOiB0aG9zZSB0aGF0 IGNvbnRhaW4gYSBzaW5nbGUgZWxlbWVudCwgc3VjaCBhczoKKworICAoZm9vKQorCisgICBhbmQg dGhvc2UgdGhhdCBjb250YWluIG1vcmUgdGhhbiBvbmUgZWxlbWVudDoKKworICAoZm9vIGEgYiBj KQorCisgICBJZiBhbiBTLUV4cHJlc3Npb24gY29udGFpbnMgb25seSBvbmUgZWxlbWVudCwgYW5k IGl0IGlzIHRoZSBuYW1lIG9mIGEKKyAgIG1hY3JvLCB0aGUgbWFjcm8ncyBkZWZpbml0aW9uIGlz IGV4YW1pbmVkLiBJZiB0aGUgZGVmaW5pdGlvbiBpcyBhCisgICBudW1iZXIgKGludGVnZXIgb3Ig ZmxvYXRpbmctcG9pbnQsIHBvc2l0aXZlIG9yIG5lZ2F0aXZlKSwgdGhlbiB0aGlzCisgICBiZWNv bWVzIHRoZSB2YWx1ZSBvZiB0aGUgZXhwcmVzc2lvbi4gSWYgdGhlIGRlZmluaXRpb24gc3RhcnRz IHdpdGggJworICAgKGFwb3N0cm9waGUpLCB0aGVuIHRoZSBxdW90ZWQgd29yZCBvciBzdHJpbmcg aXMgdGhlIHZhbHVlIG9mIHRoZQorICAgZXhwcmVzc2lvbiAoZXhwbGFpbmVkIGluIFs1MjBdU2Vj dGlvbiA5LjgpLiBPdGhlcndpc2UsIHRoZSBtYWNybyBpcworICAgYXNzdW1lZCB0byBiZSBjb21w b3NlZCBvZiBLZXJtaXQgY29tbWFuZHMgKHBvc3NpYmx5IGluY2x1ZGluZworICAgUy1FeHByZXNz aW9ucyksIHdoaWNoIGFyZSBleGVjdXRlZC4gSWYgdGhlIG1hY3JvIGhhcyBhIFJFVFVSTiB2YWx1 ZSwgb3IKKyAgIGl0IGV4ZWN1dGVzIGFuIFMtRXhwcmVzc2lvbiBhcyBpdHMgbGFzdCBjb21tYW5k LCB0aGUgcmVzdWx0IGJlY29tZXMgdGhlCisgICB2YWx1ZSBvZiB0aGUgUy1FeHByZXNzaW9uOyBv dGhlcndpc2UgdGhlIHJlc3VsdCBpcyBlbXB0eS4KKworICAgRm9yIFMtRXhwcmVzc2lvbnMgdGhh dCBjb250YWluIG1vcmUgdGhhbiBvbmUgZWxlbWVudCwgYW5kIHRoZSBmaXJzdAorICAgZWxlbWVu dCBpcyB0aGUgbmFtZSBvZiBhIG1hY3JvLCB0aGVuIHRoaXMgbWFjcm8gaXMgZXhlY3V0ZWQgd2l0 aCB0aGUKKyAgIGFyZ3VtZW50cyB0aGF0IGFyZSBnaXZlbiwgYWZ0ZXIgdGhlIGFyZ3VtZW50cyBh cmUgZXZhbHVhdGVkIGJ5IHRoZQorICAgUy1FeHByZXNzaW9uIHJlYWRlci4gTGlrZXdpc2UsIElm IHRoZSBmaXJzdCBlbGVtZW50IGlzIGEgYnVpbHQtaW4KKyAgIG9wZXJhdG9yLCB0aGVuIGl0IGlz IGFwcGxpZWQgdG8gdGhlIG9wZXJhbmRzIGFmdGVyIHRoZXkgYXJlIGV2YWx1YXRlZC4KKyAgIElu IGJvdGggY2FzZXMsIGVhY2ggb3BlcmFuZCBpcyBmZWQgdG8gdGhlIFMtRXhwcmVzc2lvbiByZWFk ZXIKKyAgIHJlY3Vyc2l2ZWx5IGZvciBldmFsdWF0aW9uLiBJZiBhbiBvcGVyYW5kIGlzIGEgbnVt YmVyIG9yIGEgcXVvdGVkCisgICBzdHJpbmcsIGl0IGlzIHVzZWQgYXMtaXMuIEJ1dCBpZiBpdCdz IGEgbWFjcm8gbmFtZSwgdGhpcyBkZWdlbmVyYXRlcworICAgaW50byB0aGUgZmlyc3QgY2FzZSwg YW5kIHRoZSBwcmV2aW91cyBwYXJhZ3JhcGggYXBwbGllcy4KKworICAgRXhhbXBsZXM6CisKKyAg ZGVmaW5lIGZvbyAxMjMKKyAgKGZvbykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJl c3VsdDogMTIzCisgIGRlZmluZSBmb28gJ2FiYworICAoZm9vKSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUmVzdWx0OiBhYmMKKyAgZGVmaW5lIGZvbyAnKG9uZSB0d28gdGhyZWUpCisg IChmb28pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXN1bHQ6IG9uZSB0d28gdGhy ZWUKKyAgZGVmaW5lIGZvbyByZXR1cm4gXGZyYW5kb20oMTAwMCkKKyAgKGZvbykgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFJlc3VsdDogNzEzIChvciBvdGhlciBudW1iZXIpCisgIGRl ZmluZSBmb28gKCsgYSBiKQorICAoZm9vKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UmVzdWx0OiBUaGUgc3VtIG9mIGEgYW5kIGIKKworICAgQSBtb3JlIGRpZmZpY3VsdCBleGFtcGxl OgorCisgIGRlZmluZSBmb28gYWJjCisgIChmb28pICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBSZXN1bHQ6ID8/PworCisgICBUaGUgcmVzdWx0IGluIHRoZSBsYXN0IGV4YW1wbGUgZGVw ZW5kcyBvbiB0aGUgZGVmaW5pdGlvbiBvZiBhYmM6CisKKyAgICAgKiBJZiBpdCBoYXMgbm8gZGVm aW5pdGlvbiwgYW4gZXJyb3Igb2NjdXJzOyBvdGhlcndpc2U6CisgICAgICogSWYgdGhlIGRlZmlu aXRpb24gaXMgYW4gUy1FeHByZXNzaW9uLCB0aGUgcmVzdWx0IGlzIHRoZQorICAgICAgIFMtRXhw cmVzc2lvbidzIHZhbHVlOyBvdGhlcndpc2U6CisgICAgICogSWYgdGhlIGRlZmluaXRpb24gY29u c2lzdHMgb2YgS2VybWl0IGNvbW1hbmRzLCB0aGV5IGFyZSBleGVjdXRlZC4KKyAgICAgICBCdXQg aW4gdGhpcyBjYXNlICIoZm9vKSIgcHJvZHVjZXMgdGhlIGVtcHR5IHJlc3VsdCwgYmVjYXVzZSBp dAorICAgICAgIGRvZXNuJ3QgUkVUVVJOIGFueXRoaW5nLgorCisgICBUaGUgdXNlIG9mIG1hY3Jv cyBhcyBTLUV4cHJlc3Npb24gb3BlcmF0b3JzIGlzIGRlc2NyaWJlZCBpbgorICAgWzUyMV1TZWN0 aW9uIDkuOC4KKworICAgWyBbNTIyXVRvcCBdIFsgWzUyM11Db250ZW50cyBdIFsgWzUyNF1DLUtl cm1pdCBIb21lIF0gWyBbNTI1XUtlcm1pdAorICAgSG9tZSBdCisKKzkuNi4gQXNzaWdubWVudHMg YW5kIFNjb3BlCisKKyAgIFRoZSBhc3NpZ25tZW50IG9wZXJhdG9ycyBTRVRRIGFuZCBMRVQgYXBw bHkgdG8gZ2xvYmFsIGFuZCBsb2NhbAorICAgdmFyaWFibGVzLCByZXNwZWN0aXZlbHkuIFNFVFEg YW5kIExFVCBhcmUgc3RhbmRhcmQgTGlzcCBvcGVyYXRvcnMKKyAgIGFkYXB0ZWQgdG8gS2VybWl0 IHNjb3BpbmcgcnVsZXMuIFdoZW4gdGhlIG9wZXJhbmRzIGFyZSBudW1lcmljIG9yCisgICBhcml0 aG1ldGljLCBTRVRRIGlzIGVxdWl2YWxlbnQgdG8gS2VybWl0J3MgRVZBTFVBVEUgY29tbWFuZDoK KworICAoc2V0cSBhICgrIDEgMikpCisgIGV2YWx1YXRlIGEgMSArIDIKKworICAgV2hlbiB0aGUg b3BlcmFuZCBpcyBhIHN0cmluZywgU0VUUSBpcyBlcXVpdmFsZW50IHRvIERFRklORToKKworICAo c2V0cSBhICcodGhpcyBpcyBhIHN0cmluZykpCisgIGRlZmluZSBhIHRoaXMgaXMgYSBzdHJpbmcK KworICAgSW4gdGhlIGZpcnN0IGNhc2UsIGJvdGggc3RhdGVtZW50cyBjcmVhdGUgYSBtYWNybyBu YW1lZCAiYSIgd2l0aCBhCisgICB2YWx1ZSBvZiAzLiBCdXQgaW4gbmVpdGhlciBjYXNlIGlzIHRo ZSBtYWNybyAiYSIgbmVjZXNzYXJpbHkgZ2xvYmFsLiBJZgorICAgZWl0aGVyIG9mIHRoZXNlIGNv bW1hbmRzIGV4ZWN1dGVzIGluIGFuIGVudmlyb25tZW50IChpLmUuIG1hY3JvCisgICBpbnZvY2F0 aW9uIGxldmVsKSB3aGVyZSBhICJsb2NhbCBhIiBjb21tYW5kIGhhcyBiZWVuIGdpdmVuLCB0aGUg ImEiCisgICBtYWNybyBpcyBnbG9iYWwgdG8gdGhhdCBlbnZpcm9ubWVudCwgYnV0IGlzIG5vdCB2 aXNpYmxlIG91dHNpZGUgaXQuCisKKyAgIExFVCBpcyBlcXVpdmFsZW50IHRvIHRoZSBLZXJtaXQg TE9DQUwgY29tbWFuZCwgZm9sbG93ZWQgYnkgdGhlCisgICBjb3JyZXNwb25kaW5nIEVWQUxVQVRF OgorCisgIChsZXQgYSAoKyAxIDIpKQorCisgICBpcyBlcXVpdmFsZW50IHRvOgorCisgIGxvY2Fs IGEKKyAgZXZhbHVhdGUgYSAxICsgMgorCisgICBBZ2FpbiwgImxvY2FsIiBpbiB0aGlzIGNvbnRl eHQgYXBwbGllcyB0byB0aGUgS2VybWl0IG1hY3JvIGludm9jYXRpb24KKyAgIHN0YWNrLCBub3Qg dG8gdGhlIFMtRXhwcmVzc2lvbiBuZXN0aW5nIGxldmVsLiBUbyBpbGx1c3RyYXRlLCByZWNhbGwg b3VyCisgICAibmV3YXJlYSIgbWFjcm86CisKK2RlZiBuZXdhcmVhIHsKKyAgICAobGV0IGEgXCUx IGIgXCUyIGMgXCUzKQorICAgIChsZXQgcyAoLyAoKyBhIGIgYykgMi4wKSkKKyAgICAoc3FydCAo KiBzICgtIHMgYSkgKC0gcyBiKSAoLSBzIGMpKSkKK30KKworICAgQmVjYXVzZSBTRVRRIGFuZCBM RVQgZXhwcmVzc2lvbnMgcmV0dXJuIGEgdmFsdWUsIHRoZXkgY2FuIGJlIHBsYWNlZAorICAgd2l0 aGluIGEgbGFyZ2VyIFMtRXhwcmVzc2lvbi4gSW4gdGhpcyBjYXNlIHdlIGNhbiByZXBsYWNlIHRo ZSBmaXJzdAorICAgcmVmZXJlbmNlIHRvIHRoZSAicyIgdmFyaWFibGUgYnkgaXRzIGRlZmluaW5n IGV4cHJlc3Npb246CisKK2RlZiBuZXdhcmVhIHsKKyAgICAobGV0IGEgXCUxIGIgXCUyIGMgXCUz KQorICAgIChzcXJ0ICgqIChsZXQgcyAoLyAoKyBhIGIgYykgMi4wKSkgKC0gcyBhKSAoLSBzIGIp ICgtIHMgYykpKQorfQorCisgICBUaGlzIHdvdWxkIG5vdCB3b3JrIGlmIExFVCB3ZXJlIGxvY2Fs IHRvIHRoZSBTLUV4cHJlc3Npb24sIGJ1dCBpdCB3b3JrcworICAgbmljZWx5IGluIHRoZSBjb250 ZXh0IG9mIEtlcm1pdCBtYWNyb3MuIFRoZSBwcmV2aW91cyBkZWZpbml0aW9uIGlzCisgICBlcXVp dmFsZW50IHRvOgorCitkZWYgbmV3YXJlYSB7CisgICAgbG9jYWwgYSBiIGMgcworICAgIChzZXRx IGEgXCUxIGIgXCUyIGMgXCUzKQorICAgIChzcXJ0ICgqIChzZXRxIHMgKC8gKCsgYSBiIGMpIDIu MCkpICgtIHMgYSkgKC0gcyBiKSAoLSBzIGMpKSkKK30KKworICAgSW4gYm90aCBjYXNlcywgdGhl IHZhcmlhYmxlcyBhLCBiLCBjLCBhbmQgcyBhcmUgbG9jYWwgdG8gdGhlICJuZXdhcmVhIgorICAg bWFjcm8sIGFuZCBnbG9iYWwgd2l0aGluIGl0LgorCisgICBNdWx0aXBsZSBhc3NpZ25tZW50cyBj YW4gYmUgaGFuZGxlZCBpbiBzZXZlcmFsIHdheXMuIEhlcmUgaXMgdGhlCisgICBvYnZpb3VzIHdh eSB0byBpbml0aWFsaXplIGEgc2VyaWVzIG9mIHZhcmlhYmxlcyB0byB0aGUgc2FtZSB2YWx1ZToK KworICAoc2V0cSBhIDApCisgIChzZXRxIGIgMCkKKyAgKHNldHEgYyAwKQorICAoc2V0cSBzIDAp CisKKyAgIEhlcmUgaXMgYSBtb3JlIGNvbXBhY3QgYW5kIGVmZmljaWVudCB3YXkgb2YgZG9pbmcg dGhlIHNhbWUgdGhpbmc6CisKKyAgKHNldHEgYSAwIGIgMCBjIDAgcyAwKQorCisgICBIb3dldmVy LCBpbiBjYXNlIHRoZSB2YWx1ZSB3YXMgbW9yZSBjb21wbGV4LCBpdCdzIGJldHRlciB0byBwdXQg b25seQorICAgb25lIGNvcHkgb2YgaXQgaW4gdGhlIFMtRXhwcmVzc2lvbjsgaW4gdGhpcyBjYXNl IHdlIHJlbHkgb24gdGhlIGZhY3QKKyAgIHRoYXQgU0VUUSByZXR1cm5zIHRoZSB2YWx1ZSBvZiBp dHMgbGFzdCBhc3NpZ25tZW50OgorCisgIChzZXRxIGEgKHNldHEgYiAoc2V0cSBjIChzZXRxIHMg KCogeCAoXiB5IDIpKSkpKSkKKworICAgU2ltaWxhcmx5LCB0byBzZXQgYSBzZXJpZXMgb2YgdmFy aWFibGVzIHRvIHgsIHgrMSwgeCsyLCAuLi4KKworICAoc2V0cSBjICgrIChzZXRxIGIgKCsgKHNl dHEgYSAoKyAoc2V0cSBzIHgpIDEpKSAxKSkgMSkpCisKKyAgIEluIHRoZSBsYXN0IGV4YW1wbGUs IHlvdSBjYW4gc2VlIHdoeSAibGFzdCIgZG9lcyBub3QgYWx3YXlzIGNvcnJlc3BvbmQKKyAgIHRv ICJyaWdodG1vc3QiICh0aGUgbGVmdG1vc3QgdmFyaWFibGUgImMiIGlzIGFzc2lnbmVkIGxhc3Qp LgorCisgICBJZiB5b3UgYXJlIHdvcmtpbmcgd2l0aCBiYWNrc2xhc2ggdmFyaWFibGVzIGxpa2Ug XCVhIG9yIGFycmF5IGVsZW1lbnRzCisgICBsaWtlIFwmYVsxXSwgcmVtZW1iZXIgdHdvIHJ1bGVz OgorICAgIDEuIERvbid0IHB1dCBzcGFjZXMgaW5zaWRlIGFycmF5IGJyYWNrZXRzLgorICAgIDIu IFlvdSBtdXN0IGRvdWJsZSB0aGUgYmFja3NsYXNoIHdoZW4gdXNpbmcgU0VUUSwgTEVULCArKywg b3IgLS0gdG8KKyAgICAgICBhc3NpZ24gYSB2YWx1ZSB0byBhIGJhY2tzbGFzaCB2YXJpYWJsZS4K KworICAgRXhhbXBsZXMgb2YgYXNzaWduaW5nIHRvIGEgYmFja3NsYXNoIHZhcmlhYmxlOgorCisg IChzZXRxIHggMSkKKyAgKHNldHEgXFwlYSAwKQorICAoc2V0cSBcXCZhW3grMV0gMSkKKyAgKCsr IFxcJXgpCisgICgtLSBcXCZhW3grMl0pCisKKyAgIEV4YW1wbGVzIG9mIHJlZmVycmluZyB0byBh IGJhY2tzbGFzaCB2YXJpYWJsZSdzIHZhbHVlOgorCisgIChzZXRxIGEgKCsgXCVhIDEpKQorICAo c2V0cSBiICgrIFwlYSBcJmFbMV0pKQorICAoKysgYSBcJXgpCisgICgtLSBiIFwmYVsxXSkKKwor ICAgVGhlIHNwZWNpYWwgbm90YXRpb24gaXMgcmVxdWlyZWQgYmVjYXVzZSBhbGwgYmFja3NsYXNo ZWQgaXRlbXMgKFwleAorICAgdmFyaWFibGVzLCBhcnJheSBlbGVtZW50cywgYnVpbHQtaW4gXHYo eHh4KSB2YXJpYWJsZXMsIGFuZCBcZnh4eCgpCisgICBmdW5jdGlvbiBpbnZvY2F0aW9ucykgYXJl IGV2YWx1YXRlZCBpbiBhIHNpbmdsZSBwYXNzIEJFRk9SRSB0aGUKKyAgIFMtRXhwcmVzc2lvbiBp cyBleGVjdXRlZDsgYW55IG90aGVyIGFwcHJvYWNoIHdvdWxkIHJlc3VsdCBpbgorICAgdW5hY2Nl cHRhYmxlIHBlcmZvcm1hbmNlLiBTbywgZm9yIGV4YW1wbGUsIGluOgorCisgIGRlY2xhcmUgXCZh W10gPSAxIDIgMworICBkZWZpbmUgXCV4IDQKKyAgZGVmaW5lIFwleSAwCisgIChzZXRxIFxcJXkg KCsgXCV4IFwmYVsxXSkpCisKKyAgIHRoZSBTLUV4cHJlc3Npb24gYmVjb21lczoKKworICAoc2V0 cSBcJXkgKCsgNCAxKSkKKworICAgYmVmb3JlIGl0IGlzIHNlbnQgdG8gdGhlIFMtRXhwcmVzc2lv biBldmFsdWF0b3IuIElmIHRoZSBiYWNrc2xhc2ggaGFkCisgICBub3QgYmVlbiBkb3VibGVkIG9u IHRoZSBhc3NpZ25tZW50IHRhcmdldCwgdGhlIHJlc3VsdCB3b3VsZCBoYXZlIGJlZW46CisKKyAg KHNldHEgMCAoKyA0IDEpKQorCisgICB3aGljaCBpcyBpbGxlZ2FsIGJlY2F1c2UgeW91IGNhbid0 IGFzc2lnbiBhIHZhbHVlIHRvIGEgbnVtYmVyLgorICAgQ29udmVyc2VseSwgaWYgYmFja3NsYXNo ZXMgd2VyZSBkb3VibGVkIG9uIHJpZ2h0LWhhbmQtc2lkZSB2YWx1ZXM6CisKKyAgKHNldHEgXFwl eSAoKyBcXCV4IFxcJmFbMV0pCisKKyAgIHRoaXMgdG9vLCB3b3VsZCBnaXZlIGFuIGVycm9yIChu b3QgbnVtZXJpYyAtICJcJXgiKS4KKworICAgSWYgeW91IG9taXQgdGhlIGRvdWJsZSBiYWNrc2xh c2ggaW4gdGhlIGFzc2lnbm1lbnQgdGFyZ2V0LCB0aGUgcmVzdWx0CisgICBkZXBlbmRzIG9uIHdo ZXRoZXIgdGhlIHZhcmlhYmxlIGFscmVhZHkgaGFzIGEgdmFsdWU6CisKKyAgKHNldHEgXCVhICgq IDMgMykpCisKKyAgIElmIFwlYSBoYXMgYSBub24tbnVtZXJpYyBzaW5nbGUtd29yZCB2YWx1ZSwg dGhlbiB0aGlzIGJlY29tZXMgdGhlIG5hbWUKKyAgIG9mIHRoZSB2YXJpYWJsZSB0aGF0IGlzIGFz c2lnbmVkIGJ5IFNFVFEuIFRvIGlsbHVzdHJhdGU6CisKKyAgZGVmaW5lIFwlYSBmb28KKyAgZWNo byBcJWEKKyAgZm9vCisgIChzZXRxIFwlYSAoKiAzIDMpKQorICBlY2hvIFwlYQorICBmb28KKyAg c2hvdyBtYWNybyBmb28KKyAgZm9vID0gOQorCisgICBJZiBcJWEgaGFzIG5vIHZhbHVlLCBhIG51 bWVyaWMgdmFsdWUsIG9yIGEgbXVsdGl3b3JkIHZhbHVlLCBhbiAiaW52YWxpZAorICAgYXNzaWdu bWVudCIgZXJyb3Igb2NjdXJzLgorCisgICBbIFs1MjZdVG9wIF0gWyBbNTI3XUNvbnRlbnRzIF0g WyBbNTI4XUMtS2VybWl0IEhvbWUgXSBbIFs1MjldS2VybWl0CisgICBIb21lIF0KKworOS43LiBD b25kaXRpb25hbCBFeHByZXNzaW9ucworCisgICBUaGUgSUYgb3BlcmF0b3IgcHJvdmlkZXMgYSBj b21wYWN0IGZvcm0gb2YgZGVjaXNpb24tbWFraW5nIHdpdGhpbgorICAgUy1FeHByZXNzaW9ucy4g QW4gSUYgZXhwcmVzc2lvbiBjYW4gc3RhbmQgd2hlcmV2ZXIgYSBudW1iZXIgbWlnaHQKKyAgIHN0 YW5kLCBhcyBsb25nIGlzIGl0IHJldHVybnMgYSBudW1iZXIuIEhlcmUncyBhIHF1aWNrIHdheSB0 byBvYnRhaW4gdGhlCisgICBhdmVyYWdlIHZhbHVlIG9mIGFsbCB0aGUgZWxlbWVudHMgaW4gYW4g YXJyYXkgdGhhdCBjb250YWlucyBvbmx5CisgICBudW1iZXJzOgorCisgICgvICgrIFxmam9pbigm YSkpIChmbG9hdCBcZmRpbSgmYSkpKQorCisgICBUaGlzIHJlc3VsdHMgaW4gYSAiRGl2aWRlIGJ5 IHplcm8iIGVycm9yIGlmIHRoZSBhcnJheSBpcyBlbXB0eS4gSWYgeW91CisgICB3YW50IHRvIGRl ZmluZSB0aGUgYXZlcmFnZSB2YWx1ZSBvZiBhbiBlbXB0eSBhcnJheSB0byBiZSAwIGluc3RlYWQg b2YKKyAgIGdldHRpbmcgYW4gZXJyb3IsIHlvdSBjYW4gdXNlIElGIHRvIGNoZWNrIHRoZSBhcnJh eSBzaXplOgorCisgIChpZiBcZmRpbSgmYSkgKC8gKCsgXGZqb2luKCZhKSkgKGZsb2F0IFxmZGlt KCZhKSkpIDApCisKKyAgIG9yIGVxdWl2YWxlbnRseToKKworICAoaWYgKG5vdCBcZmRpbSgmYSkp IDAgKC8gKCsgXGZqb2luKCZhKSkgKGZsb2F0IFxmZGltKCZhKSkpKQorCisgICBPZiBjb3Vyc2Us IElGIGNhbiBmaXQgYW55d2hlcmUgZWxzZSBpbnRvIGFuIFMtRXhwcmVzc2lvbjoKKworICAoc2V0 cSBhICgrIGIgKGlmICg8IGMgMCkgMCBjKSkpCisKKyAgIGFuZCB0aGUgSUYgZXhwcmVzc2lvbiBj YW4gYmUgYXMgY29tcGxleCBhcyB5b3UgbGlrZToKKworICAoc2V0cSBhICgrIGIgKGlmIChhbmQg KG9yICg+IHggMCkgKD4geSAwKSkgKDwgYyAwKSAoPiBkIDEpICghPSBlIDApKSAxIDApKSkKKwor ICAgYW5kIHRoZSAidGhlbiIgYW5kICJlbHNlIiBwYXJ0cyBjYW4gY29udGFpbiBtdWx0aXBsZSBT LUV4cHJlc3Npb25zCisgICBlbmNsb3NlZCB3aXRoaW4gKEVWQUwgLi4uKToKKworICAoaWYgeCAo ZXZhbCAoLi4uKSAoLi4uKSAoLi4uKSkgKGV2YWwgKC4uLikgKC4uLikgKC4uLikpKQorCisgICBB TkQgYW5kIE9SIG9wZXJhdG9ycyBhcmUgZ3VhcmFudGVlZCB0byAic2hvcnQgY2lyY3VpdCIuIElm IGFueSBvcGVyYW5kCisgICBvZiBBTkQgaXMgZmFsc2UsIG5vbmUgb2YgdGhlIHN1YnNlcXVlbnQg b3BlcmFuZHMgaXMgZXZhbHVhdGVkOworICAgbGlrZXdpc2UsIGlmIGFuIE9SIG9wZXJhbmQgaXMg dHJ1ZSwgbm8gZnVydGhlciBvcGVyYW5kcyBhcmUgZXZhbHVhdGVkLgorCisgICBCZWFyIGluIG1p bmQgdGhhdCB0aGUgUy1FeHByZXNzaW9uIElGIGlzIG5vdCB0aGUgc2FtZSBhcyBLZXJtaXQgSUY7 IHRoZQorICAgY29uZGl0aW9uIGlzIG9ubHkgYWxsb3dlZCB0byBiZSBhbiBTLUV4cHJlc3Npb24g b3IgYSB2YXJpYWJsZSBvcgorICAgbnVtYmVyLCBub3QgdGhlIHdob2xlIGxpc3Qgb2YgcG9zc2li aWxpdGllcyB5b3Ugc2VlIHdoZW4geW91IHR5cGUgImlmCisgICA/IiBhdCB0aGUgQy1LZXJtaXQ+ IHByb21wdC4gQnV0IGtlZXAgcmVhZGluZy4uLgorCisgICBbIFs1MzBdVG9wIF0gWyBbNTMxXUNv bnRlbnRzIF0gWyBbNTMyXUMtS2VybWl0IEhvbWUgXSBbIFs1MzNdS2VybWl0CisgICBIb21lIF0K KworOS44LiBFeHRlbnNpYmlsaXR5CisKKyAgIFRvIGV4dGVuZCB0aGUgY2FwYWJpbGl0aWVzIG9m IFMtRXhwcmVzc2lvbnMsIHlvdSBjYW4gdXNlIEtlcm1pdCBtYWNybworICAgbmFtZXMgYXMgb3Bl cmF0b3JzLCB3aXRoIHRoZSBmb2xsb3dpbmcgbGltaXRhdGlvbnM6CisKKyAgICAgKiBUaGUgbWFj cm8gbXVzdCBub3QgaGF2ZSB0aGUgc2FtZSBuYW1lIGFzIGEgYnVpbHQtaW4gb3BlcmF0b3IuCisg ICAgICogWW91IG11c3QgdXNlIHRoZSBmdWxsIG1hY3JvIG5hbWUsIG5vdCBhbiBhYmJyZXZpYXRp b24uCisKKyAgIEFuZCB3aXRoIHRoZSBmb2xsb3dpbmcgZW5oYW5jZW1lbnQ6CisKKyAgICAgKiBJ ZiB0aGUgbGFzdCBzdGF0ZW1lbnQgZXhlY3V0ZWQgYnkgdGhlIG1hY3JvIGlzIGFuIFMtRXhwcmVz c2lvbiwgaXRzCisgICAgICAgdmFsdWUgaXMgcmV0dXJuZWQgYXV0b21hdGljYWxseS4gSW4gb3Ro ZXIgd29yZHM6CisKKyAgZGVmaW5lIGJ1bXAgKCsrIFwlMSkKKworICAgaXMgZXF1aXZhbGVudCB0 bzoKKworICBkZWZpbmUgYnVtcCByZXR1cm4gXGZzZXhwcmVzc2lvbigrKyBcJTEpCisKKyAgIEhl cmUncyBhbiBleGFtcGxlIGluIHdoaWNoIHdlIGRlZmluZSBhIEZJQk9OQUNDSSBvcGVyYXRvciB0 aGF0IHJldHVybnMKKyAgIHRoZSBudGggZWxlbWVudCwgbiA+PSAwLCBvZiB0aGUgRmlib25hY2Np IHNlcmllcywgMCAxIDEgMiAzIDUgOCAxMyAyMQorICAgMzQgNTUsIC4gLiAuLCBpbiB3aGljaCB0 aGUgZmlyc3QgZWxlbWVudCBpcyAwLCB0aGUgc2Vjb25kIGlzIDEsIGFuZAorICAgZWFjaCBzdWJz ZXF1ZW50IGVsZW1lbnQgaXMgdGhlIHN1bSBvZiB0aGUgdHdvIGJlZm9yZSBpdC4gVGhpcyBzZXJp ZXMKKyAgIHdhcyBkZXZpc2VkIGJ5IExlb25hcmRvIFBpc2FubywgRmlsaXVzIEJvbmFjY2kgKEZp Ym9uYWNjaSBmb3Igc2hvcnQpIGluCisgICAxMjAyIHRvIGRlc2NyaWJlIGhvdyBmYXN0IHJhYmJp dHMgY2FuIGJyZWVkLCBhbmQgYWxzbyBmb3JtcyB0aGUgYmFzaXMKKyAgIGZvciB0aGUgR29sZGVu IE1lYW4sIHRoZSBicmFuY2hpbmcgYmVoYXZpb3Igb2YgcGxhbnRzLCB0aGUgc3BpcmFsIG9mIGEK KyAgIG5hdXRpbHVzIHNoZWxsLCBldGMuIChUaGFua3MgdG8gWzUzNF1EYXQgVGh1YyBOZ3V5ZW4g Zm9yIERlY2VtYmVyIDIwMDMKKyAgIGNvcnJlY3Rpb25zIHRvIHRoaXMgc2VjdGlvbiEpCisKKyAg IFdlIGNhbiB3cml0ZSBhIEZJQk9OQUNDSSBmdW5jdGlvbiBhcyBhIG1hY3JvIGVhc2lseSB3aXRo IFMtRXhwcmVzc2lvbnM6CisKKyAgZGVmaW5lIEZJQk9OQUNDSSB7CisgICAgKGlmICg9PSBcJTEg MCkgMAorICAgICAgICAoaWYgKD09IFwlMSAxKSAxICgrIChmaWJvbmFjY2kgKC0gXCUxIDIpKSAo Zmlib25hY2NpICgtIFwlMSAxKSkpKSkKKyAgfQorCisgICBZb3UgY2FuIHJlYWQgdGhpcyBhczoK KworICAgICBJZiB0aGUgYXJndW1lbnQgKFwlMSkgaXMgMCwgcmV0dXJuIGEgcmVzdWx0IG9mIDA7 IGlmIGl0IGlzIDEsCisgICAgIHJldHVybiAxOyBvdGhlcndpc2U6CisgICAgIHJldHVybiB0aGUg c3VtIG9mIGZpYm9uYWNjaShhcmd1bWVudCAtIDIpIGFuZCBmaWJvbmFjY2koYXJndW1lbnQgLQor ICAgICAxKQorCisgICBOb3RlIHRoYXQgYSBSRVRVUk4gc3RhdGVtZW50IGlzIG5vdCBuZWVkZWQs IHNpbmNlIFMtRXhwcmVzc2lvbnMKKyAgIGF1dG9tYXRpY2FsbHkgc2V0IHRoZSByZXR1cm4gdmFs dWUgb2YgdGhlaXIgY29udGFpbmluZyBtYWNyb3MuCisKKyAgIEZvciBjb21wYXJpc29uLCBoZXJl J3MgaG93IGl0IHdvdWxkIGJlIGNvZGVkIHdpdGhvdXQgUy1FeHByZXNzaW9uczoKKworICBkZWZp bmUgRklCT05BQ0NJIHsKKyAgICAgIGlmID09IFwlMSAwIHsKKyAgICAgICAgICByZXR1cm4gMAor ICAgICAgfSBlbHNlIGlmID09IFwlMSAxIHsKKyAgICAgICAgICByZXR1cm4gMQorICAgICAgfSBl bHNlIHsKKyAgICAgICAgICByZXR1cm4gXGZldmFsKFxmZXhlYyhmaWJvbmFjY2kgXGZldmFsKFwl MS0yKSkgLQorICAgICAgICAgICAgICAgKyBcZmV4ZWMoZmlib25hY2NpIFxmZXZhbChcJTEtMSkp KQorICAgICAgfQorICB9CisKKyAgIE5vdyB3ZSBjYW4gdXNlIHRoZSBGSUJPTkFDQ0kgZnVuY3Rp b24gKHdoaWNoZXZlciB3YXkgeW91IHdyaXRlIGl0KSBqdXN0CisgICBhcyBpZiBpdCB3ZXJlIGEg YnVpbHQtaW4gb3BlcmF0b3I6CisKKyAgKGZpYm9uYWNjaSA2KQorCisgICBPcjoKKworICAoc2V0 cSBhIDEwKQorICAoZmlib25hY2NpIGEpCisKKyAgIFdpdGhpbiBTLUV4cHJlc3Npb25zIG9ubHkg KG5vdCBvdXRzaWRlIHRoZW0pLCBTLUV4cHJlc3Npb25zIHRoZW1zZWx2ZXMKKyAgIGNhbiBiZSB1 c2VkIGFzIG1hY3JvIGFyZ3VtZW50czoKKworICAoc2V0cSBhIDIgYiA0KQorICAoc2V0cSB4IChm aWJvbmFjY2kgKCogYSBiICkpKQorCisgICBUaGUgdmFsdWUgb2YgdGhlIFMtRXhwcmVzc2lvbiAo aW4gdGhpcyBjYXNlICI4IiksIGFuZCBub3QgdGhlCisgICBTLUV4cHJlc3Npb24gaXRzZWxmLCBp cyBzZW50IHRvIHRoZSBtYWNyby4KKworICAgWW91ciBtYWNybyBpcyByZXNwb25zaWJsZSBmb3Ig YXJndW1lbnQgdmFsaWRhdGlvbiBhbmQgZXJyb3IgaGFuZGxpbmcuIEEKKyAgIHJvYnVzdCBGaWJv bmFjY2kgbWFjcm8gd291bGQgYmUgbW9yZSBsaWtlIHRoaXM6CisKKyAgZGVmaW5lIEZJQk9OQUND SSB7CisgICAgICBpZiA8IFx2KGFyZ2MpIDIgZW5kIDEgP1wlMDogTWlzc2luZyBhcmd1bWVudAor ICAgICAgaWYgPiBcdihhcmdjKSAyIGVuZCAxID9cJTA6IFRvbyBtYW55IGFyZ3VtZW50cworICAg ICAgaWYgbm90IGludGVnZXIgXCUxIGVuZCAxID9cJTA6IEludGVnZXJzIG9ubHkKKyAgICAgIGlm IDwgXCUxIDEgZW5kIDEgP1wlMDogQXJndW1lbnQgb3V0IG9mIHJhbmdlCisgICAgICAoaWYgKD09 IFwlMSAwKSAwCisgICAgICAgICAoaWYgKD09IFwlMSAxKSAxICgrIChmaWJvbmFjY2kgKC0gXCUx IDIpKSAoZmlib25hY2NpICgtIFwlMSAxKSkpKSkKKyAgfQorCisgICBSZWNhbGwgdGhhdCAiRU5E IG5vbnplcm8tbnVtYmVyIFsgbWVzc2FnZSBdIiBjYXVzZXMgYSBtYWNybyBpbnZvY2F0aW9uCisg ICB0byBmYWlsLiBXaGVuIHRoZSBtYWNybyBpcyB0aGUgb3BlcmF0b3IgaW4gYW4gUy1FeHByZXNz aW9uLCB0aGlzIG1ha2VzCisgICB0aGUgUy1FeHByZXNzaW9uIGZhaWwgdG9vLiBBbHNvIG5vdGUg dGhhdCBvdXIgRmlib25hY2NpIG1hY3JvIGlzIGp1c3QKKyAgIGFuIGlsbHVzdHJhdGlvbiwgbm90 IGEgcHJhY3RpY2FsIGV4YW1wbGUuIFNpbmNlIGl0IGlzIHJlY3Vyc2l2ZSAoY2FsbHMKKyAgIGl0 c2VsZiksIGl0IHdvbid0IHdvcmsgZm9yIGxhcmdlIGFyZ3VtZW50cyBiZWNhdXNlIHRoZSBjYWxs IHN0YWNrIGNhbgorICAgZXhjZWVkIGF2YWlsYWJsZSBtZW1vcnkuIFNlZSBbNTM1XVNlY3Rpb24g OS45LjIgZm9yIGEgcHJhY3RpY2FsCisgICBhbHRlcm5hdGl2ZS4KKworICAgS2VybWl0IG1hY3Jv cywgd2hlbiB1c2VkIGFzIFMtRXhwcmVzc2lvbiBvcGVyYXRvcnMsIGNhbiBkbyBhbnl0aGluZyBh dAorICAgYWxsIGV4Y2VwdCBpbml0aWF0ZSBmaWxlIHRyYW5zZmVyczogdGhleSBjYW4gcHJpbnQg bWVzc2FnZXMgb24gdGhlCisgICBzY3JlZW4sIHJlYWQgYW5kIHdyaXRlIGZpbGVzLCBpbnRlcmFj dCB3aXRoIHRoZSB1c2VyLCBhbmQgc28gb24uIEZvcgorICAgZXhhbXBsZSwgaGVyZSdzIGEgbWFj cm8gQVNLTUUgdGhhdCBhc2tzIHlvdSB0byBlbnRlciBhIG51bWJlciwgbWFrZXMKKyAgIHN1cmUg dGhhdCB5b3UgZGlkLCBhbmQgdGhlbiByZXR1cm5zIGl0cyB2YWx1ZSBmb3IgdXNlIGluIHRoZQor ICAgUy1FeHByZXNzaW9uOgorCisgIGRlZmluZSBBU0tNRSB7CisgICAgICBsb2NhbCBcJW4KKyAg ICAgIHdoaWxlIHRydWUgeworICAgICAgICAgIGFzayBcJW4geyBOdW1iZXI6IH0KKyAgICAgICAg ICBpZiBub3QgZGVmIFwlbiBjb250aW51ZQorICAgICAgICAgIGlmIG5vdCBudW1lcmljIFwlbiB7 CisgICAgICAgICAgICAgIGVjaG8gTm90IG51bWVyaWMgLSAiXCVuIgorICAgICAgICAgICAgICBj b250aW51ZQorICAgICAgICAgIH0KKyAgICAgICAgICBicmVhaworICAgICAgfQorICAgICAgcmV0 dXJuIFwlbgorICB9CisgIChzZXRxIGEgKCogMiAoYXNrbWUpKSkgOyBHZXQgbnVtYmVyIGZyb20g dXNlciwgZG91YmxlIGl0LCBhc3NpZ24gcmVzdWx0IHRvIGEuCisKKyAgIEhlcmUncyBhIG1hY3Jv IHlvdSBjYW4gdXNlIHRvIHZhbGlkYXRlIHRoYXQgYSBudW1iZXIgaXMgaW4gYSBnaXZlbgorICAg cmFuZ2U6CisKKyAgZGVmaW5lIGlucmFuZ2UgeworICAgICAgaWYgIT0gXHYoYXJnYykgNCBlbmQg MSA/XCUwOiBXcm9uZyBudW1iZXIgb2YgYXJndW1lbnRzCisgICAgICBpZiAoIDwgXCUxIFwlMiB8 fCA+IFwlMSBcJTMgKSByZXR1cm4gMAorICAgICAgcmV0dXJuIDEKKyAgfQorCisgICBUaGUgZmly c3QgYXJndW1lbnQgaXMgdGhlIG51bWJlciB0byBiZSBjaGVja2VkLCB0aGUgc2Vjb25kIGlzIHRo ZQorICAgbWluaW11bSBhY2NlcHRhYmxlIHZhbHVlLCB0aGUgdGhpcmQgaXMgdGhlIG1heGltdW0u IFlvdSBjYW4gdXNlIHRoaXMKKyAgIChmb3IgZXhhbXBsZSkgaW4gSUYgY29uZGl0aW9uczoKKwor ICBkZWZpbmUgeWVzIGVjaG8gXCUxIElTIE9LCisgIGRlZmluZSBubyBlY2hvIFwlMSBJUyBOT1Qg T0sKKworICAoc2V0cSBhIC0xIGIgOTk5KQorICAoaWYgKGlucmFuZ2UgYSAwIDEwMCkgKHllcyBh KSAobm8gYSkpCisgIChpZiAoaW5yYW5nZSBiIC0xMDAwICsxMDAwKSAoeWVzIGIpIChubyBiKSkK KworICAgVGhpcyBpcyBqdXN0IGFuIGlsbHVzdHJhdGlvbiwgb2YgY291cnNlOyB0aGVyZSdzIGFs cmVhZHkgYSBidWlsdC1pbgorICAgb3BlcmF0b3IgdG8gbGV0IHlvdSBkbyByYW5nZSBjaGVja2lu ZyB3aXRob3V0IGhlbHAgZnJvbSBtYWNyb3M6CisKKyAgKGlmICg8PSAwIGEgMTAwKSAoeWVzIGEp IChubyBhKSkKKyAgKGlmICg8PSAtMTAwMCBiICsxMDAwKSAoeWVzIGIpIChubyBiKSkKKworICAg VG8gc2VuZCBzdHJpbmcgcGFyYW1ldGVycyB0byBhIG1hY3JvLCBzb21lIGtpbmQgb2YgcXVvdGlu ZyBpcyByZXF1aXJlZAorICAgdG8gdGVsbCB0aGUgUy1FeHByZXNzaW9uIHBhcnNlciB0byB0YWtl IGEgZ2l2ZW4gIndvcmQiIGxpdGVyYWxseSByYXRoZXIKKyAgIHRoYW4gcmVwbGFjaW5nIGl0IGJ5 IGl0cyB2YWx1ZS4gRm9yIHRoaXMgd2UgdXNlIHRoZSBMaXNwIFFVT1RFCisgICBvcGVyYXRvcjoK KworICBkZWZpbmUgbGVuZ3RoIHJldHVybiBcZmxlbmd0aChcJTEpCisgIChsZW5ndGggKHF1b3Rl IGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6KSkKKyAgMjYKKworICAgVGhpcyBjYXVzZXMgdGhl IHN0cmluZyAiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiIHRvIGJlIHNlbnQKKyAgIGxpdGVy YWxseSB0byB0aGUgTEVOR1RIIG1hY3JvLiBLZXJtaXQsIGxpa2UgTGlzcCwgYWxzbyBvZmZlcnMg YQorICAgc2hvcnRjdXQgZm9yIFFVT1RFLCB0aGF0IGxldHMgdXMgcXVvdGUgYSB3b3JkIGJ5IHBy ZWZpeGluZyBpdCB3aXRoIGEKKyAgIHNpbmdsZSBxdW90ZSAoJykgY2hhcmFjdGVyLCBhbHNvIGNh bGxlZCBhcG9zdHJvcGhlIChBU0NJSSAzOSk6CisKKyAgKGxlbmd0aCAnYWJjZGVmZ2hpamtsbW5v cHFyc3R1dnd4eXopCisgIDI2CisKKyAgIFRoZSB0d28gZm9ybXMgYXJlIGVxdWl2YWxlbnQuCisK KyAgIEhvdyB0aGUgbWFjcm8gdHJlYXRzIGl0cyBhcmd1bWVudHMgaXMgdXAgdG8gdGhlIG1hY3Jv LiBJbiB0aGUgZXhhbXBsZQorICAgYWJvdmUsIHRoZSBhcmd1bWVudCBpcyB0cmVhdGVkIGFzIGEg bGl0ZXJhbCBzdHJpbmcuIEhvd2V2ZXIsIGl0IGNhbgorICAgYWxzbyBiZSB0cmVhdGVkIGFzIGEg dmFyaWFibGUgbmFtZToKKworICBkZWZpbmUgc3RyaW5nIFRoaXMgaXMgYSBzdHJpbmcKKyAgZGVm aW5lIGxlbmd0aCByZXR1cm4gXGZsZW5ndGgoXG0oXCUxKSkKKyAgKGxlbmd0aCAnc3RyaW5nKQor ICAxNgorCisgICBOb3RlIHRoZSBjb25zdHJ1Y3QgXG0oXCUxKS4gVGhpcyBtZWFucyAidGhlIHZh bHVlIG9mIHRoZSBtYWNybyB3aG9zZQorICAgbmFtZSBpcyB0aGUgdmFsdWUgb2YKKyAgIFwlMSIu IFRoZSB2YWx1ZSBvZiBcJTEgaW4gdGhpcyBjYXNlIGlzIHRoZSB3b3JkICJzdHJpbmciLCBhbmQg dGhlIHZhbHVlCisgICBvZiB0aGUgbWFjcm8gd2hvc2UgbmFtZSBpcyAic3RyaW5nIiBpcyAiVGhp cyBpcyBhIHN0cmluZyIuCisKKyAgIFdoYXQgaWYgdGhlIG1hY3JvIHRha2VzIG11bHRpcGxlIGFy Z3VtZW50cywgb3IgYSB2YXJpYWJsZSBudW1iZXIgb2YKKyAgIHRoZW0/IEhlcmUncyBhIHNpbXBs ZSBtYWNybyB0aGF0IHByaW50cyBhIHBocmFzZSB0aGF0IGluY2x1ZGVzIGl0cworICAgYXJndW1l bnRzOgorCisgIGRlZmluZSBjb21wbGFpbiBlY2hvIEl0J3MgdG9vIFwlKiEKKworICAgKFJlY2Fs bCB0aGF0IFwlKiBtZWFucyAiYWxsIGFyZ3VtZW50cyIuKQorCisgICBJdCBjYW4gYmUgY2FsbGVk IGluIHRoZSB0cmFkaXRpb25hbCB3YXk6CisKKyAgY29tcGxhaW4gaG90ICAgICAgICAgICAgICAg ICAgICAgICBSZXN1bHQ6ICJJdCdzIHRvbyBob3QhIgorICBjb21wbGFpbiBjb2xkIGFuZCB3ZXQg ICAgICAgICAgICAgIFJlc3VsdDogIkl0J3MgdG9vIGNvbGQgYW5kIHdldCEiCisKKyAgIE9yIGZy b20gYW4gUy1FeHByZXNzaW9uIGlmIHlvdSBxdW90ZSB0aGUgYXJndW1lbnRzOgorCisgIChjb21w bGFpbiAnaG90KSAgICAgICAgICAgICAgICAgICAgUmVzdWx0OiAiSXQncyB0b28gaG90ISIKKyAg KGNvbXBsYWluICdjb2xkICdhbmQgJ3dldCkgICAgICAgICBSZXN1bHQ6ICJJdCdzIHRvbyBjb2xk IGFuZCB3ZXQhIgorCisgICBUbyBncm91cCBtdWx0aXBsZSB3b3JkcyBpbnRvIGEgc2luZ2xlIGFy Z3VtZW50LCB1c2UgcGFyZW50aGVzZXM6CisKKyAgKGNvbXBsYWluIChxdW90ZSAoY29sZCBhbmQg d2V0KSkpICBSZXN1bHQ6ICJJdCdzIHRvbyBjb2xkIGFuZCB3ZXQhIgorICAoY29tcGxhaW4gJyhj b2xkIGFuZCB3ZXQpKSAgICAgICAgIFJlc3VsdDogIkl0J3MgdG9vIGNvbGQgYW5kIHdldCEiCisK KyAgIE5vdGUgdGhlIGRpZmZlcmVuY2U6CisKKyAgKGNvbXBsYWluICdjb2xkICdhbmQgJ3dldCkg ICAgICAgICBUaHJlZSBhcmd1bWVudHMKKyAgKGNvbXBsYWluICcoY29sZCBhbmQgd2V0KSkgICAg ICAgICBPbmUgYXJndW1lbnQKKworICAgU2luY2UgdGhlIENPTVBMQUlOIG1hY3JvIHVzZXMgXCUq IHRvIHJlZmVyIHRvIGFsbCBpdHMgYXJndW1lbnRzLCBubworICAgbWF0dGVyIGhvdyBtYW55LCBp dCBkb2Vzbid0IGNhcmUgd2hpY2ggZm9ybSB5b3UgdXNlLiBCdXQgaXQgbWFrZXMgYQorICAgZGlm ZmVyZW5jZSBpbiBjYXNlcyB3aGVyZSB0aGUgbWFjcm8gcmVmZXJzIHRvIGl0cyBhcmd1bWVudHMK KyAgIGluZGl2aWR1YWxseS4KKworICAgVG8gaWxsdXN0cmF0ZSwgbGV0J3MgY29uc2lkZXIgYSBt YWNybyB0aGF0IHJlY2VpdmVzIHRoZSBuYW1lIG9mIGEgbWFjcm8KKyAgIGFuZCBpdHMgYXJndW1l bnQgbGlzdCBhbmQgZXhlY3V0ZXMgaXQgd2l0aCBpdHMgYXJndW1lbnRzLCB3aXRob3V0CisgICBr bm93aW5nIGhvdyBtYW55IGFyZ3VtZW50cyB0aGVyZSBhcmUuIFRoZSBmb2xsb3dpbmcgTE9PUCBt YWNybyBpcyB1c2VkCisgICB0byBleGVjdXRlIHRoZSBnaXZlbiBtYWNybyB3aXRoIHRoZSBnaXZl biBhcmd1bWVudCBsaXN0IHRoZSByZXF1ZXN0ZWQKKyAgIG51bWJlciBvZiB0aW1lczoKKworICBk ZWYgbG9vcCB7IGxvY2FsIGksIGZvciBpIDEgXCUxIDEgZG8gXCUyIFwlMyB9CisKKyAgIFdpdGhp biB0aGUgTE9PUCBtYWNybywgdGhlIGZpcnN0IGFyZ3VtZW50IChcJTEpIGlzIHRoZSBsb29wIGNv dW50LCBcJTIKKyAgIGlzIHRoZSBtYWNybyBuYW1lLCBhbmQgXCUzIGlzIHRoZSBhcmd1bWVudCBs aXN0LiBXaGVuIHRoZSBMT09QIG1hY3JvIGlzCisgICBpbnZva2VkIHRyYWRpdGlvbmFsbHkgbGlr ZSB0aGlzOgorCisgIGxvb3AgMyBjb21wbGFpbiBob3QKKworICAgaXQgcHJpbnRzICJJdCdzIHRv byBob3QhIiB0aHJlZSB0aW1lcy4gVG8gaW52b2tlIGl0IGZyb20gYW4KKyAgIFMtRXhwcmVzc2lv biwgeW91IG11c3QgcXVvdGUgYm90aCB0aGUgbWFjcm8gbmFtZSBhcyB3ZWxsIGFzIHRoZQorICAg YXJndW1lbnQsIHNpbmNlIGluIHRoaXMgY2FzZSB0aGUgbWFjcm8gbmFtZSBpdHNlbGYgaXMgYW4g YXJndW1lbnQ6CisKKyAgKGxvb3AgMyAnY29tcGxhaW4gJ2hvdCkKKworICAgTm93IHdoYXQgaWYg eW91IG5lZWQgdG8gc2VuZCBkaWZmZXJlbnQgb3IgdmFyaWFibGUgbnVtYmVycyBvZiBhcmd1bWVu dHMKKyAgIHRvIHRoZSBMT09QIG1hY3JvPyBUaGUgTE9PUCBtYWNybyBjYW4gaGFuZGxlIGl0IGFs cmVhZHksIHByb3ZpZGVkIHlvdQorICAgZ3JvdXAgdGhlIGFyZ3VtZW50cyBpbnRvIExPT1AncyB0 aGlyZCBhcmd1bWVudCAoXCUzKS4gSW4gS2VybWl0IHN5bnRheCwKKyAgIHdpdGhvdXQgZ3JvdXBp bmc6CisKKyAgbG9vcCAzIGNvbXBsYWluIGNvbGQgYW5kIHdldAorCisgICBwcmludHMgIkl0J3Mg dG9vIGNvbGQhIiB0aHJlZSB0aW1lcyAoImFuZCB3ZXQiIGlzIGxvc3QpOyBidXQgd2l0aAorICAg Z3JvdXBpbmcgKGVpdGhlciBvZiB0aGUgZm9sbG93aW5nIHR3byBmb3Jtcyk6CisKKyAgbG9vcCAz IGNvbXBsYWluIHtjb2xkIGFuZCB3ZXR9CisgIGxvb3AgMyBjb21wbGFpbiAiY29sZCBhbmQgd2V0 IgorCisgICB0aGUgTE9PUCBtYWNybyBwcmludHMgIkl0J3MgdG9vIGNvbGQgYW5kIHdldCEiIHRo cmVlIHRpbWVzIGFzIGRlc2lyZWQuCisKKyAgIFRvIGRvIHRoZSBzYW1lIHRoaW5nIGluIGFuIFMt RXhwcmVzc2lvbiwganVzdCB1c2UgdGhlIExpc3AgZm9ybXMgb2YKKyAgIHF1b3RpbmcgaW5zdGVh ZCBvZiB0aGUgS2VybWl0IGZvcm1zOyB0aGUgZm9sbG93aW5nIHR3byBhcmUgZXF1aXZhbGVudDoK KworICAobG9vcCAzICdjb21wbGFpbiAocXVvdGUgKGNvbGQgYW5kIHdldCkpKQorICAobG9vcCAz ICdjb21wbGFpbiAnKGNvbGQgYW5kIHdldCkpCisKKyAgIEhlcmUncyBhIHNpbWlsYXIgZXhhbXBs ZSBpbiB3aGljaCB3ZSB3cml0ZSBhIG1hY3JvIHRoYXQgc2hvd3MgYm90aCB0aGUKKyAgIG5hbWUg YW5kIHRoZSB2YWx1ZSBvZiBvbmUgb3IgbW9yZSBvdGhlciBtYWNyb3MsIHdob3NlIG5hbWVzIGFy ZSBnaXZlbgorICAgYXMgYXJndW1lbnRzIChzaW1pbGFyIHRvICJzaG93IG1hY3JvIik6CisKKyAg ZGVmaW5lIGRpc3BsYXkgeworICAgICAgbG9jYWwgXCVpCisgICAgICBmb3IgXCVpIDEgXHYoYXJn YyktMSAxIHsKKyAgICAgICAgICBlY2hvIFwmX1tcJWldID0gXG0oXCZfW1wlaV0pCisgICAgICB9 CisgIH0KKworICAgKFJlY2FsbCB0aGF0IFwmX1tdIGlzIHRoZSBtYWNybydzIGFyZ3VtZW50IHZl Y3RvciBhcnJheSwgZXF1aXZhbGVudCB0bworICAgXCUxLCBcJTIsIC4uLikgVGhlIERJU1BMQVkg bWFjcm8gY2FuIGJlIHVzZWQgaW4gUy1FeHByZXNzaW9ucyBsaWtlCisgICB0aGlzOgorCisgIChz ZXRxIGEgMSBiIDIgYyAzKQorICAoZGlzcGxheSAnYSAnYiAnYyAnZCkKKworICAgd2hpY2ggcHJp bnRzOgorCisgIGEgPSAxCisgIGIgPSAyCisgIGMgPSAzCisgIGQgPQorCisgICBUaGUgbmFtZXMg bXVzdCBiZSBxdW90ZWQgdG8gcHJldmVudCB0aGVpciBldmFsdWF0aW9uIGJlZm9yZSB0aGV5IGFy ZQorICAgc2VudCB0byB0aGUgbWFjcm8uIFRoaXMgYWJpbGl0eSB0byBwYXNzIHZhcmlhYmxlcyAi YnkgbmFtZSIgdG8gbWFjcm9zLAorICAgcmF0aGVyIHRoYW4gYnkgdmFsdWUsIGxldHMgeW91IHdy aXRlIG1hY3JvcyB0aGF0IGNoYW5nZSB0aGUgdmFsdWVzIG9mCisgICBhcmd1bWVudCB2YXJpYWJs ZXMuIEZvciBleGFtcGxlLCBoZXJlJ3MgYSBtYWNybyB0aGF0IGRvdWJsZXMgdGhlIHZhbHVlCisg ICBvZiBpdHMgYXJndW1lbnQgdmFyaWFibGU6CisKKyAgZGVmaW5lIGRvdWJsZSAoKysgXCUxIFwl MSkKKworICAgd2hpY2ggeW91IGNhbiBjYWxsIGxpa2UgdGhpczoKKworICAoc2V0cSBhIDEyKQor ICAoZG91YmxlICdhKQorCisgICBJbiB0aGUgbWFjcm8sIFwlMSBpcyByZXBsYWNlIGJ5IHRoZSB2 YXJpYWJsZSBuYW1lICJhIjsgIigrKyBhIGEpIiBhZGRzCisgICAiYSIgdG8gaXRzZWxmLCBhbmQg c2V0cyB0aGUgdmFsdWUgb2YgImEiIHRvIHRoZSByZXN1bHQuCisKKyAgIFRoZXJlIGFyZSBubyBi dWlsdC1pbiBvcGVyYXRvcnMgb3RoZXIgdGhhbiBRVU9URSwgJywgYW5kIFNUUklORyBmb3IKKyAg IGhhbmRsaW5nIHN0cmluZ3MgaW4gUy1FeHByZXNzaW9ucywgYnV0IHVzaW5nIGp1c3QgdGhlc2Us IHBsdXMgbWFjcm9zCisgICB0aGF0IHVzZSBLZXJtaXQncyByZWd1bGFyIHN0cmluZy1oYW5kbGlu ZyBmZWF0dXJlcywgeW91IGNhbiBlYXNpbHkKKyAgIGV4dGVuZCBTLUV4cHJlc3Npb25zIHRvIGRv IHN0cmluZyBtYW5pcHVsYXRpb246CisKKyAgZGVmaW5lIGxlbiByZXR1cm4gXGZsZW4oXCUxKSAg ICAgICAgICAgICAgIFJldHVybnMgbGVuZ3RoIG9mIGFyZ3VtZW50IHN0cmluZworICBkZWZpbmUg Y2FwIHJldHVybiBcZnVwcGVyKFwlMSkgICAgICAgICAgICAgVXBwZXJjYXNlIGFyZ3VtZW50IHN0 cmluZworICBkZWZpbmUgcmV2IHJldHVybiBcZnJldmVyc2UoXCUxKSAgICAgICAgICAgUmV2ZXJz ZXMgYXJndW1lbnQgc3RyaW5nCisgIGRlZmluZSBzdWIgcmV0dXJuIFxmc3Vic3RyKFwlMSxcJTIs XCUzKSAgICBSZXR1cm5zIHN1YnN0cmluZyBvZiBhcmcgc3RyaW5nCisKKyAgKGxlbiAnKHRoaXMg aXMgYSBzdHJpbmcpKSAgICAgICAgICAgICAgICAgIFJlc3VsdDogMTYKKyAgKHJldiAnKHRoaXMg aXMgYSBzdHJpbmcpKSAgICAgICAgICAgICAgICAgIFJlc3VsdDogZ25pcnRzIGEgc2kgc2lodAor ICAocmV2IChjYXAgJyh0aGlzIGlzIGEgc3RyaW5nKSkpICAgICAgICAgICAgUmVzdWx0OiBHTklS VFMgQSBTSSBTSUhUCisgIChzdWIgKHJldiAoY2FwICcodGhpcyBpcyBhIHN0cmluZykpKSA1IDkp ICBSZXN1bHQ6IFRTIEEgU0kgUworCisgICBZb3UgY2FuIGFzc2lnbiBhIHN0cmluZyB0byBhIG1h Y3JvIG5hbWUgYXMgZm9sbG93czoKKworICAoc2V0cSBmb28gJyh0aGlzIGlzIGEgc3RyaW5nKSkK KyAgKHNldHEgZm9vIChxdW90ZSAodGhpcyBpcyBhIHN0cmluZykpKQorCisgICBUaGUgdHdvIGFy ZSBleGFjdGx5IGVxdWl2YWxlbnQuIEluIGJvdGggY2FzZXMsIHRoZSBtYWNybyAiZm9vIiBoYXMg dGhlCisgICB2YWx1ZToKKworICAnKHRoaXMgaXMgYSBzdHJpbmcpCisKKyAgIHNvIHdoZW4gaXQg aXMgcmV0cmlldmVkIGl0IGNhbiBiZSBpZGVudGlmaWVkIGFzIGEgc3RyaW5nIHJhdGhlciB0aGFu IGEKKyAgIG51bWJlciBvciBjb21tYW5kcyB0byBiZSBleGVjdXRlZC4gVGh1czoKKworICAoc2V0 cSBmb28gKHF1b3RlICh0aGlzIGlzIGEgc3RyaW5nKSkpCisgIHNob3cgbWFjcm8gZm9vCisgIGZv byA9ICcodGhpcyBpcyBhIHN0cmluZykKKyAgKGZvbykKKyAgdGhpcyBpcyBhIHN0cmluZworCisg ICBOb3RlIHRoZSBkaWZmZXJlbnQgcmVzdWx0cyBmb3IgInNob3cgbWFjcm8gZm9vIiBhbmQgIihm b28pIi4gVGhlIGZvcm1lcgorICAgc2hvd3MgdGhlIGludGVybmFsIGRlZmluaXRpb247IHRoZSBs YXR0ZXIgZXZhbHVhdGVzIHRoZSB2YXJpYWJsZSwgd2hpY2gKKyAgIHJlbW92ZXMgdGhlIHF1b3Rp bmcuIEFuZCBwZXJoYXBzIG1vcmUgaW1wb3J0YW50LCBub3RlIHRoYXQgaWYgdGhlCisgICBhcG9z dHJvcGhlIGFuZCBzdXJyb3VuZGluZyBwYXJlbnRoZXNlcyB3ZXJlIG5vdCBzdG9yZWQgYXMgcGFy dCBvZiB0aGUKKyAgIGRlZmluaXRpb24sIChmb28pIHdvdWxkIHRyeSB0byBleGVjdXRlICJ0aGlz IGlzIGEgc3RyaW5nIiBhcyBhIGNvbW1hbmQuCisKKyAgIEdpdmVuIHRoZSBhc3NpZ25tZW50IGFi b3ZlLCB0aGUgZm9sbG93aW5nIHdvcmsgYXMgZXhwZWN0ZWQ6CisKKyAgKGxlbiBmb28pICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc3VsdDogMTYKKyAgKHJldiBmb28pICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc3VsdDogZ25pcnRzIGEgc2kgc2lodAorICAo cmV2IChjYXAgZm9vKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzdWx0OiBHTklSVFMg QSBTSSBTSUhUCisgIChzdWIgKHJldiAoY2FwIGZvbykpIDUgOCkgICAgICAgICAgICAgICAgICBS ZXN1bHQ6IFRTIEEgU0kgUworCisgICBOb3RlIHRoYXQsIHVubGlrZSBidWlsdC1pbiBTLUV4cHJl c3Npb24gb3BlcmF0b3JzIHRoYXQgcmV0dXJuIG51bWJlcnMKKyAgIG9yIHRydXRoIHZhbHVlcywg dGhlc2Ugb3BlcmF0b3JzIHJldHVybiBzdHJpbmdzLiBJZiB5b3Ugd2FudCB0byBhc3NpZ24KKyAg IHRoZWlyIHJldHVybiB2YWx1ZXMgdG8gb3RoZXIgdmFyaWFibGVzLCB5b3UgY2FuIGRvIHNvOgor CisgIChzZXRxIGJhciAocmV2IChjYXAgZm9vKSkpICAgICAgICAgICAgICAgICBSZXN1bHQ6IEdO SVJUUyBBIFNJIFNJSFQKKworICAgQnV0IG5vdyB0aGUgUy1FeHByZXNzaW9uIHByb2Nlc3NvciBk b2Vzbid0IGtub3cgdGhlIHZhbHVlIG9mICJiYXIiIGlzCisgICBzdXBwb3NlZCB0byBiZSBhIHN0 cmluZywgcmF0aGVyIHRoYW4gYSBtYWNybyB0byBleGVjdXRlLiBGb3IgdGhpcyB5b3UKKyAgIG5l ZWQgb25lIGZpbmFsIHNwZWNpYWwgb3BlcmF0b3IsIFNUUklORy4gVGhlIFNUUklORyBvcGVyYXRv ciB0YWtlcyBhbgorICAgUy1FeHByZXNzaW9uIGFzIGFuIG9wZXJhbmQsIGV2YWx1YXRlcyBpdCwg YW5kIHRoZW4gcmV0dXJucyBpdHMgdmFsdWUKKyAgIGVuY2xvc2VkIGluICcoKSwgc28geW91IGNh biB1c2UgdGhlIHZhbHVlIGFzIGEgc3RyaW5nIGlzIHN1YnNlcXVlbnQKKyAgIFMtRXhwcmVzc2lv bnMuIFVzZSBTVFJJTkcgZm9yIHJlZmVyZW5jaW5nIG1hY3JvcyB0aGF0IHJldHVybiBzdHJpbmdz OgorCisgIChzZXRxIGJhciAoc3RyaW5nIChyZXYgKGNhcCBmb28pKSkpICAgICAgICBSZXN1bHQ6 ICcoR05JUlRTIEEgU0kgU0lIVCkKKworICAgU1RSSU5HIGlzIGxpa2UgUVVPVEUsIGV4Y2VwdCB0 aGF0IGl0IGV2YWx1YXRlcyBpdHMgb3BlcmFuZCBiZWZvcmUKKyAgIGFwcGx5aW5nIHRoZSBxdW90 aW5nLCByYXRoZXIgdGhhbiB0YWtpbmcgdGhlIG9wZXJhbmQgbGl0ZXJhbGx5LgorCisgICBUbyBy ZWZlcmVuY2UgYmFja3NsYXNoIHZhcmlhYmxlcyBvciBmdW5jdGlvbnMgdGhhdCByZXR1cm4gc3Ry aW5nCisgICB2YWx1ZXMsIHlvdSBtdXN0IHVzZSB0aGUgcmVndWxhciBxdW90aW5nIG1lY2hhbmlz bXM6CisKKyAgKHNldHEgdGltZSAnKFx2KHRpbWUpKSkKKyAgKHNldHEgZGF0ZSAnKFx2KGRhdGUp KSkKKyAgYXNzaWduIFwlciB0aGlzIGlzIGEgc3RyaW5nCisgIChzZXRxIHMxICcoXCVyKSkKKwor ICAgVGhhdCdzIGJlY2F1c2UgYmFja3NsYXNoIGl0ZW1zIGFyZSBldmFsdWF0ZWQgQkVGT1JFIHRo ZSBTLUV4cHJlc3Npb24KKyAgIHBhcnNlciBldmVyIHNlZXMgdGhlbSwgYW5kIHRoZSB2YWx1ZXMg b2YgXHYodGltZSkgYW5kIHNvIG9uIGFyZSBub3QKKyAgIHZhbGlkIFMtRXhwcmVzc2lvbnMsIHNv IFNUUklORyB3b24ndCBsaWtlIHRoZW0uCisKKyAgIEZpbmFsbHkgYSBicmllZiB3b3JkIG9uIHRo ZSB0b3VjaHkgdG9waWMgb2YgcXVvdGluZy4gU3VwcG9zZSB5b3Ugd2FudAorICAgdG8gaW5jbHVk ZSAoc2F5KSBsaXRlcmFsIHBhcmVudGhlc2VzIGluIGEgc3RyaW5nIHRoYXQgd2lsbCBsYXRlciBi ZQorICAgcHJvY2Vzc2VkIGJ5IHRoZSBTLUV4cHJlc3Npb24gcmVhZGVyIChvciBcZnNwbGl0KCkg b3IgXGZ3b3JkKCkpLgorICAgTm9ybWFsbHksIHlvdSBjYW4ndCBkbyB0aGlzIGJlY2F1c2UgcGFy ZW50aGVzZXMgYXJlIG1lYW5pbmdmdWwgaW4gdGhlc2UKKyAgIGNvbnRleHRzLiBUbyBkZWZlYXQg dGhlIG5vcm1hbCBwYXJzaW5nIHJ1bGVzLCB5b3UgY2FuIHF1b3RlIHRoZQorICAgcGFyZW50aGVz ZXMgd2l0aCBiYWNrc2xhc2guIEhvd2V2ZXIsIGR1ZSB0byB0aGUgbWFueSBsZXZlbHMgb2Ygc3Ry aW5nCisgICBwcm9jZXNzaW5nIGludm9sdmVkLCBhIHN1cnByaXNpbmdseSBsYXJnZSBhbW91bnQg b2YgYmFja3NsYXNoZXMgbWlnaHQKKyAgIGJlIHJlcXVpcmVkLCBmb3IgZXhhbXBsZToKKworICAo c2V0cSBzICcoYSBiIChjIGQpIFxcXFxcXFxcXFxcXFxcXFwoZSBmIChnIGgpIHhcXFxcXFxcXFxc XFxcXFxcKSBqIGspKQorCisgICBUaGlzIGlzIG5lYXJseSBpbXBvc3NpYmxlIHRvIGV4cGxhaW4o KikuIEluc3RlYWQsIGp1c3QgcmVtZW1iZXIgdHdvCisgICBwb2ludHM6CisKKyAgICAgKiBJbiBz aXR1YXRpb25zIGxpa2UgdGhpcywgaXQncyBiZXR0ZXIgdG8gdXNlIERFRklORSB0byBjcmVhdGUg dGhlCisgICAgICAgc3RyaW5nLCByYXRoZXIgdGhhbiBTRVRRLiBUaGUgZXhhbXBsZSBhYm92ZSBy ZXF1aXJlcyBvbmx5IGRvdWJsZQorICAgICAgIGJhY2tzbGFzaGVzIHdoZW4gREVGSU5FIGlzIHVz ZWQ6CisgIGRlZmluZSBzICcoYSBiIChjIGQpIFxcKGUgZiAoZyBoKSB4XFwpIGogaykKKworICAg ICAqIFRoZSBsZXZlbCBvZiBxdW90aW5nIGRlcGVuZHMgb24gaG93IG1hbnkgbGV2ZWxzIG9mIGV2 YWx1YXRpb24gdGhlCisgICAgICAgc3RyaW5nIG11c3QgcGFzcyB0aHJvdWdoLCB3aGljaCBpcyBu b3QgYWx3YXlzIG9idmlvdXMuIEhvd2V2ZXIsIHRoZQorICAgICAgIG51bWJlciBvZiBiYWNrc2xh c2hlcyByZXF1aXJlZCBpbiBhbnkgZ2l2ZW4gc2l0dWF0aW9uIGlzIGFsd2F5cyBhCisgICAgICAg cG93ZXIgb2YgMi4gU28gaWYgMSBkb2Vzbid0IHdvcmssIHRyeSAyOyBpZiAyIGRvZXNuJ3Qgd29y aywgdHJ5IDQ7CisgICAgICAgaWYgNCBkb2Vzbid0IHdvcmssIHRyeSA4LCAxNiwgMzIsIGFuZCBz byBvbi4KKworICAgQ29uc2lkZXJhdGlvbnMgbGlrZSB0aGlzIGFwcGx5IGluIGFueSBzY3JpcHRp bmcgbGFuZ3VhZ2UgKHNoZWxsLCBUY2wsCisgICBQZXJsLCBQeXRob24sIGV0YykuIFRoZSBzaXR1 YXRpb24gaXMga25vd24gYXMgIlF1b3RpbmcgSGVsbCIuCisKKyAgICgqKSBJZiB5b3UgcmVhbGx5 IHdhbnQgYW4gZXhwbGFuYXRpb24sIGhlcmUgaXQgaXM6CisKKyAgICAgKiBFdmVyeSBTRVhQIGhh cyBpdHMgYmFja3NsYXNoIGl0ZW1zIGV2YWx1YXRlZCBpbiBhIHNpbmdsZSBwYXNzIGF0CisgICAg ICAgdG9wIGxldmVsIGJlZm9yZSBiZWluZyBwYXNzZWQgdG8gdGhlIFNFWFAgcmVhZGVyLCBzbyBc JTEsCisgICAgICAgXHYoZnRpbWUpLCBldGMsIGNhbiBiZSBldmFsdWF0ZWQgdXAgZnJvbnQsIGZy ZWVpbmcgdGhlIFNFWFAgcmVhZGVyCisgICAgICAgb2YgaGF2aW5nIHRvIGtub3cgYWJvdXQgc3Vj aCB0aGluZ3MsIHdoaWNoIGluIHR1cm4gbWFrZXMgaXQgbXVjaAorICAgICAgIG1vcmUgZWZmaWNp ZW50LiBUaGVyZWZvcmUgb25lIGxldmVsIG9mIHF1b3RpbmcgaXMgbG9zdCByaWdodCBhd2F5LAor ICAgICAgIGFuZCB0aGVyZWZvcmUgeW91IG11c3QgZG91YmxlIGVhY2ggYmFja3NsYXNoIHRoYXQg aXMgdG8gYmUgdXNlZCBhcworICAgICAgIGEgcXVvdGUuCisgICAgICogV2hlbiB0aGUgU0VYUCBy ZWFkZXIgc2VlcyAnXCcsIGl0IHRyZWF0cyBpdCBhcyBhIHF1b3RlOyBkaXNjYXJkcyBpdAorICAg ICAgIGFuZCBrZWVwcyB0aGUgbmV4dCBjaGFyYWN0ZXIuIFRodXMgJ1xcJyBiZWNvbWVzICdcJy4g VGhpcyB3b3VsZCBiZQorICAgICAgIHRoZSBlbmQgb2YgaXQsIGV4Y2VwdCB0aGF0OgorICAgICAq IFRoZSBTRVhQIHJlYWRlciBtdXN0IGNhbGwgaXRzZWxmIHJlY3Vyc2l2ZWx5IG9uIGl0cyBvcGVy YW5kcywgc28gd2UKKyAgICAgICBtdXN0IGRvdWJsZSBhbnkgcXVvdGVzIGluIHRoZSBvcGVyYW5k czogMl4yID0gNC4KKyAgICAgKiBJZiB0aGUgcmVzdWx0IGlzIHRvIGJlIHBhc3NlZCBhcyBhbiBh cmd1bWVudCB0byBhIG1hY3JvLCB0aGUKKyAgICAgICBiYWNrc2xhc2hlcyBtdXN0IGFnYWluIGJl IGRvdWJsZWQsIGJlY2F1c2UgdGhlIG1hY3JvIHByb2Nlc3NvcgorICAgICAgIGV2YWx1YXRlcyB0 aGUgYXJndW1lbnRzIGJlZm9yZSBzZW5kaW5nIHRoZW0gdG8gdGhlIG1hY3JvOiAyXjMgPSA4Lgor ICAgICAqIElmIHRoZSBtYWNybyBpdHNlbGYgaXMgdG8gc2VlIHRoZSBxdW90ZXMsIHJhdGhlciB0 aGFuIGp1c3QgdGhlCisgICAgICAgcmVzdWx0IG9mIHRoZSBxdW90aW5nLCB0aGUgcXVvdGVzIG11 c3QgYmUgZG91YmxlZCBhZ2FpbjogMl40ID0gMTYuCisKKyAgIE1vcmFsOiBUbyBjcmVhdGUgc3Ry aW5nIGNvbnN0YW50cyBpbiB3aGljaCBncm91cGluZyBjaGFyYWN0ZXJzIG11c3QgYmUKKyAgIHF1 b3RlZCwgdXNlIERFRklORSByYXRoZXIgdGhhbiBTRVRRLgorCisgICBbIFs1MzZdVG9wIF0gWyBb NTM3XUNvbnRlbnRzIF0gWyBbNTM4XUMtS2VybWl0IEhvbWUgXSBbIFs1MzldS2VybWl0CisgICBI b21lIF0KKworOS45LiBFeGFtcGxlcworCis5LjkuMS4gU3RhdGlzdGljcworCisgICBUaGUgZm9s bG93aW5nIHByb2dyYW0gY29tcHV0ZXMgc3RhdGlzdGljcyAtLSBtZWFucywgbWF4aW1hLCBtaW5p bWEsCisgICB2YXJpYW5jZSwgc3RhbmRhcmQgZGV2aWF0aW9uLCBhbmQgY29ycmVsYXRpb24gLS0g ZnJvbSBkYXRhIHN0b3JlZCBpbgorICAgcGFyYWxsZWwgYXJyYXlzLCBcJnhbXSBhbmQgXCZ5W10s IHdoaWNoIGNhbiBjb250YWluIGFueSBtaXh0dXJlIG9mCisgICBpbnRlZ2VyIGFuZCBmbG9hdGlu Zy1wb2ludCBudW1iZXJzOiBwb3NpdGl2ZSwgbmVnYXRpdmUsIG9yIHplcm8uIEFycmF5CisgICBz ZXR1cCBhbmQgdmFsaWRhdGlvbiBhcmUgbm90IHNob3duLiBFeGNlcHQgZm9yIHRoZSB0cmFkaXRp b25hbCBGT1IgbG9vcAorICAgYW5kIHByaW50aW5nIHRoZSByZXN1bHRzIGF0IHRoZSBlbmQsIHRo ZSBlbnRpcmUgY29tcHV0YXRpb24gaXMgZG9uZQorICAgd2l0aCBTLUV4cHJlc3Npb25zOgorCis7 IEluaXRpYWxpemUgc3VtcywgbWF4aW1hLCBtaW5pbWEsIGFuZCBudW1iZXIgb2YgZWxlbWVudHMK KworICAoc2V0cSB4c3VtIDAgeXN1bSAwIHhzdW0yIDAgeXN1bTIgMCB4eXN1bSAwKQorICAoc2V0 cSB4bWluIChzZXRxIHhtYXggXCZ4WzFdKSB5bWluIChzZXRxIHltYXggXCZ5WzFdKSkKKyAgKHNl dHEgbiBcZmRpbSgmeCkpCisKKzsgTG9vcCB0aHJvdWdoIGVsZW1lbnRzIGFuZCBhY2N1bXVsYXRl IHN1bXMsIG1heGltYSwgYW5kIG1pbmltYQorCisgIGZvciBpIDEgbiAxIHsKKyAgICAgIChzZXRx IHggXCZ4W2ldIHkgXCZ5W2ldKSAgICAgICAgICAgICAgICAgICAgOyBOb3RhdGlvbmFsIGNvbnZl bmllbmNlCisgICAgICAoc2V0cSB4bWF4IChtYXggeG1heCB4KSB5bWF4IChtYXggeW1heCB5KSkg IDsgWCBhbmQgWSBtYXhpbWEKKyAgICAgIChzZXRxIHhtaW4gKG1pbiB4bWluIHgpIHltaW4gKG1p biB5bWluIHkpKSAgOyBYIGFuZCBZIG1pbmltYQorICAgICAgKCsrIHhzdW0geCB5c3VtIHkpICAg ICAgICAgICAgICAgICAgICAgICAgICA7IFggYW5kIFkgc3VtcworICAgICAgKCsrIHhzdW0yIChe IHggMikgeXN1bTIgKF4geSAyKSkgICAgICAgICAgICA7IFN1bSBvZiBYIGFuZCBZIHNxdWFyZXMK KyAgICAgICgrKyB4eXN1bSAoKiB4IHkpKSAgICAgICAgICAgICAgICAgICAgICAgICAgOyBTdW0g b2YgWFkgcHJvZHVjdHMKKyAgfQorCis7IENhbGN1bGF0ZSByZXN1bHRzCisKKyAgKHNldHEgeG1l YW4gKC8geHN1bSBuKSB5bWVhbiAoLyB5c3VtIG4pKSAgICAgICAgOyBNZWFuIFggYW5kIFkKKyAg KHNldHEgeHNzICgtIHhzdW0yICgvICheIHhzdW0gMikgbikpKSAgICAgICAgICAgOyBJbnRlcm1l ZGlhdGUgdmFsdWVzCisgIChzZXRxIHlzcyAoLSB5c3VtMiAoLyAoXiB5c3VtIDIpIG4pKSkKKyAg KHNldHEgeHlzcyAoLSB4eXN1bSAoLyAoKiB4c3VtIHlzdW0pIG4pKSkKKyAgKHNldHEgeHZhciAo LyB4c3MgbikgeXZhciAoLyB5c3MgbikpICAgICAgICAgICAgOyBYIGFuZCBZIHZhcmlhbmNlCisg IChzZXRxIHNkeCAoc3FydCB4dmFyKSBzZHkgKHNxcnQgeXZhcikpICAgICAgICAgIDsgU3RkIGRl dmlhdGlvbiBpbiBYIGFuZCBZCisgIChzZXRxIHRtcCAoKiB4c3MgeXNzKSkKKyAgKHNldHEgY2Mg KGlmIHRtcCAoLyB4eXNzIChzcXJ0IHRtcCkpIDEuMCkpICAgICAgOyBDb3JyZWxhdGlvbiBjb2Vm ZmljaWVudAorICBzaG93IG1hY3JvIHhtZWFuIHltZWFuIHh2YXIgeXZhciBzZHggc2R5IGNjICAg ICA7IFByaW50IHRoZSByZXN1bHRzCisKKyAgIFRoZSBmaW5hbCAiaWYgdG1wIiBjaGVjayBhY2Nv dW50cyBmb3IgdGhlIHBvc3NpYmlsaXR5IHRoYXQgYm90aCBhcnJheXMKKyAgIGNvbnRhaW4gYWxs IDAncy4gUmVzdWx0cyBjYW4gYWxzbyBiZSBwcmludGVkIHdpdGggImVjaG8gQ0MgPSBcbShjYyki LAorICAgb3IgYW55IG90aGVyIGRlc2lyZWQgd2F5LiBJbnRlcmVzdGluZ2x5LCBpZiB3ZSBoYWQg bm90IG5lZWRlZCB0aGUgc3VtCisgICBvZiB0aGUgc3F1YXJlcyBhbmQgcHJvZHVjdHMsIHdlIGNv dWxkIGhhdmUgb2J0YWluZWQgdGhlIHN1bXMsIG1heGltYSwKKyAgIGFuZCBtaW5pbWEgb2YgdGhl IFgncyBhbmQgWSdzIHdpdGhvdXQgYSBsb29wIGxpa2UgdGhpczoKKworICAoc2V0cSB4c3VtICgr IFxmam9pbigmeCkpIHlzdW0gKCsgXGZqb2luKCZ5KSkpCisgIChzZXRxIHhtYXggKG1heCBcZmpv aW4oJngpKSB5bWF4IChtYXggXGZqb2luKCZ5KSkpCisgIChzZXRxIHhtaW4gKG1pbiBcZmpvaW4o JngpKSB5bWluIChtaW4gXGZqb2luKCZ5KSkpCisKKyAgIEFueSBLZXJtaXQgZnVuY3Rpb24gdGhh dCByZXR1cm5zIG51bWJlcnMgb3IgbGlzdHMgb2YgbnVtYmVycyBjYW4gYmUKKyAgIGluY2x1ZGVk IGluIGFuIFMtRXhwcmVzc2lvbiBhcyBhbiBvcGVyYW5kLgorCis5LjkuMi4gUHJhY3RpY2FsIEZp Ym9uYWNjaSBTZXJpZXMKKworICAgVGhlIHJlY3Vyc2l2ZSBGaWJvbmFjY2kgZXhhbXBsZSBnaXZl biBwcmV2aW91c2x5IGlzIHNpbXBsZSBhbmQgZWxlZ2FudCwKKyAgIGJ1dCBub3QgdmVyeSB1c2Vm dWwgc2luY2UgaXQgY2F1c2VzIG1lbW9yeSBvY2N1cGF0aW9uIHRvIGdyb3cgZWFjaCB0aW1lCisg ICBpdCBjYWxscyBpdHNlbGYsIHVudGlsIGV2ZW50dWFsbHkgYm90aCBwaHlzaWNhbCBtZW1vcnkg YW5kIGRpc2sgc3dhcAorICAgc3BhY2UgYXJlIGZpbGxlZCBhbmQgdGhlIHByb2dyYW0gY3Jhc2hl cy4gRXZlbiBmb3Igc21hbGwgYXJndW1lbnRzLAorICAgbGlrZSAxNywgZXhlY3V0aW9uIHRpbWUg Y2FuIGJlIHByb2hpYml0aXZlOgorCisgIChzZXRxIHQxIFx2KGZ0aW1lKSkKKyAgKHNldHEgcmVz dWx0IChmaWJvbmFjY2kgMTcpKQorICAoc2V0cSB0MiAoLSBcdihmdGltZSkgdDEpKQorICBlY2hv IEZJQk9OQUNDSSgxNykgPSBcbShyZXN1bHQpOiBUSU1FID0gXGZmcHJvdW5kKHQyLDMpCisKKyAg IHByaW50cyAob24gYSBjZXJ0YWluIHJhdGhlciBzbG93IGNvbXB1dGVyKToKKworICBGSUJPTkFD Q0koMTcpID0gMTU5NzogVElNRSA9IDUuODYxCisKKyAgIEFueSByZWN1cnNpdmUgZnVuY3Rpb24g Y2FuIGJlIHJlY29kZWQgaXRlcmF0aXZlbHkuIFRoZSByZXN1bHQgaXMgbm90IGFzCisgICBwcmV0 dHksIGJ1dCBleGVjdXRpb24gaXMgZmFyIGxlc3MgZXhwZW5zaXZlOgorCisgICAgZGVmaW5lIEZJ QklURVIgeworICAgICAgICAoaWYgKD09IFwlMyAwKSAoXCUyKSAoZmliaXRlciAoKyBcJTEgXCUy KSBcJTEgKC0gXCUzIDEpKSkKKyAgICB9CisgICAgZGVmaW5lIEZJQk9OQUNDSSB7CisgICAgICAg IChmaWJpdGVyIDEgMCBcJTEpCisgICAgfQorCisgICBIZXJlJ3MgdGhlIHJlc3VsdCBvbiB0aGUg c2FtZSBjb21wdXRlciBmb3IgdGhlIHNhbWUgYXJndW1lbnQgb2YgMTc6CisKKyAgRklCT05BQ0NJ KDE3KSA9IDE1OTc6IFRJTUUgPSAwLjAxNQorCisgICAoNDcgdGltZXMgZmFzdGVyLikgRXhlY3V0 aW9uIHRpbWUgaW5jcmVhc2VzIHByb3BvcnRpb25hbGx5IHRvIHRoZSBzaXplCisgICBvZiB0aGUg YXJndW1lbnQgaW4gdGhlIGl0ZXJhdGl2ZSBjYXNlLCB3aGVyZWFzIGluIHRoZSByZWN1cnNpdmUg Y2FzZSBpdAorICAgZ29lcyB1cCBnZW9tZXRyaWNhbGx5LCBxdWlja2x5IHJlYWNoaW5nIGluZmlu aXR5LgorCisgICBbIFs1NDBdVG9wIF0gWyBbNTQxXUNvbnRlbnRzIF0gWyBbNTQyXUMtS2VybWl0 IEhvbWUgXSBbIFs1NDNdS2VybWl0CisgICBIb21lIF0KKworOS4xMC4gRGlmZmVyZW5jZXMgZnJv bSBBbGdlYnJhaWMgTm90YXRpb24KKworICAgSW4gQy1LZXJtaXQ6CisKKyAgICAgKiBBbGdlYnJh aWMgbm90YXRpb24gdXNlcyBpbmZpeCBvcGVyYXRvcnMgYW5kIG5vcm1hbCBydWxlcyBvZgorICAg ICAgIG9wZXJhdG9yIHByZWNlZGVuY2UsIHdpdGggcGFyZW50aGVzZXMgdXNlZCB0byBmb3JjZSBl eGNlcHRpb25zIHRvCisgICAgICAgdGhlIHJ1bGVzOyBtYW55IG9wZXJhdGlvbnMgY2FuIGJlIGlu Y2x1ZGVkIGluIGFuIGV4cHJlc3Npb24uCisgICAgICAgUy1FeHByZXNzaW9ucyB1c2UgcHJlZml4 IG9wZXJhdG9ycyB3aXRoIG5vIGludHJpbnNpYyBwcmVjZWRlbmNlOworICAgICAgIGVhY2ggb3Bl cmF0aW9uIGlzIGVuY2xvc2VkIGluIHBhcmVudGhlc2VzLCBhbmQgdGhlIGFycmFuZ2VtZW50IG9m CisgICAgICAgcGFyZW50aGVzZXMgZGV0ZXJtaW5lcyBwcmVjZWRlbmNlLgorICAgICAqIEFsZ2Vi cmFpYyBpbmZpeCBvcGVyYXRvcnMgcmVxdWlyZSB0d28gb3BlcmFuZHM7IFMtRXhwcmVzc2lvbiBw cmVmaXgKKyAgICAgICBvcGVyYXRvcnMgY2FuIGFjY2VwdCBhIHZhcmlhYmxlIG51bWJlciBvZiBv cGVyYW5kcy4KKyAgICAgKiBZb3UgY2FuIHVzZSBhbGdlYnJhaWMgbm90YXRpb24gYW55d2hlcmUg dGhhdCBDLUtlcm1pdCBhY2NlcHRzIGEKKyAgICAgICBudW1iZXIsIGUuZy4gImVjaG8gXCZhWygo MSsxKSoyLTFdIiwgYnV0IHlvdSBjYW4gdXNlIFMtRXhwcmVzc2lvbnMKKyAgICAgICBvbmx5IGFz IHRvcC1sZXZlbCBjb21tYW5kcy4gWW91IGNhbiwgaG93ZXZlciwgdXNlIGVpdGhlciBhbGdlYnJh aWMKKyAgICAgICBvciBTLUV4cHJlc3Npb25zIGFueXdoZXJlIGF0IGFsbCBieSBlbmNsb3Npbmcg dGhlbSBpbiBcZmV2YWx1YXRlKCkKKyAgICAgICBvciBcZnNleHByZXNzaW9uKCksIHJlc3BlY3Rp dmVseS4KKyAgICAgKiBZb3UgY2FuIHVzZSBhbnkgbWl4dHVyZSBvZiBpbnRlZ2VyIGFuZCBmbG9h dGluZy1wb2ludCBudW1iZXJzIGluCisgICAgICAgUy1FeHByZXNzaW9ucywgYnV0IG9ubHkgaW50 ZWdlcnMgYXJlIHBlcm1pdHRlZCBpbiBhbGdlYnJhaWMKKyAgICAgICBleHByZXNzaW9ucy4gT3V0 c2lkZSBvZiBTLUV4cHJlc3Npb25zLCBmbG9hdGluZyBwb2ludCBhcml0aG1ldGljIGlzCisgICAg ICAgc3VwcG9ydGVkIG9ubHkgYnkgXGZmcC4uLigpIGZ1bmN0aW9uIGNhbGxzLgorICAgICAqIE9w ZXJhdG9ycyBhbmQgb3BlcmFuZHMgaW4gUy1FeHByZXNzaW9ucyBtdXN0IGJlIHNlcGFyYXRlZCBi eQorICAgICAgIHNwYWNlcywgZS5nLiAiKCsgYSBiKSIuIFNwYWNlcyBhcmUgbm90IHJlcXVpcmVk IGluIGFsZ2VicmFpYworICAgICAgIGV4cHJlc3Npb25zOiAiKChhK2IpKmMpIi4KKyAgICAgKiBX aGVuIGFzc2lnbmluZyB2YWx1ZXMgdG8gYmFja3NsYXNoIHZhcmlhYmxlcyAoc3VjaCBhcyBcJXgg b3IKKyAgICAgICBcJmFbMl0pIHVzaW5nIFNFVFEgb3IgTEVULCB5b3UgbXVzdCBkb3VibGUgdGhl IGJhY2tzbGFzaC4KKworICAgWyBbNTQ0XVRvcCBdIFsgWzU0NV1Db250ZW50cyBdIFsgWzU0Nl1D LUtlcm1pdCBIb21lIF0gWyBbNTQ3XUtlcm1pdAorICAgSG9tZSBdCisKKzkuMTEuIERpZmZlcmVu Y2VzIGZyb20gTGlzcAorCisgICAgICogS2VybWl0IGhhcyBhIGxvdCBvZiBidWlsdC1pbiBvcGVy YXRvcnMgbm90IGZvdW5kIGluIExpc3A6ICsrLCBeLAorICAgICAgIGV0Yy4KKyAgICAgKiBNb3N0 IGRpYWxlY3RzIG9mIHJlYWwgTGlzcCBkbyBub3QgYWxsb3cgUy1FeHByZXNzaW9ucyB0aGF0IGRv bid0CisgICAgICAgc3RhcnQgd2l0aCBhbiBvcGVyYXRvciwgZm9yIGV4YW1wbGU6CisgIChhKQor CisgICAgICAgVGhpcyBleHByZXNzaW9uIGNhbiBjYXVzZSBhbiBlcnJvciBpbiBMaXNwIChldmVu IGlmICJhIiBoYXMgYQorICAgICAgIHZhbHVlKSwgYnV0IGlzIGFjY2VwdGFibGUgaW4gS2VybWl0 LCB3aGVyZSBpdCByZXR1cm5zIHRoZSB2YWx1ZSBvZgorICAgICAgIHRoZSB2YXJpYWJsZSAiYSIu IFNpbWlsYXJseSwgKDEpIHJldHVybnMgdGhlIHZhbHVlICIxIi4KKyAgICAgKiBJbiByZWFsIExp c3AsIEVWQUwgcmVxdWlyZXMgZXhhY3RseSBvbmUgb3BlcmFuZC4gSW4gS2VybWl0LCBpdCBjYW4K KyAgICAgICBoYXZlIDAsIDEsIDIsIG9yIG1vcmUgb3BlcmFuZHMuIEl0IHJldHVybnMgdGhlIHZh bHVlIG9mIHRoZSBsYXN0CisgICAgICAgb3BlcmFuZCBldmFsdWF0ZWQuCisgICAgICogUmVhbCBM aXNwIFNFVFEgYW5kIExFVCB1c3VhbGx5IHJlcXVpcmUgYW4gZXZlbiBudW1iZXIgb2Ygb3BlcmFu ZHMuCisgICAgICAgS2VybWl0IGFsbG93cyBhbiBvZGQgbnVtYmVyLCBpbiB3aGljaCBjYXNlIHRo ZSBsYXN0IChvciBvbmx5KQorICAgICAgIHZhcmlhYmxlIGlzIHVuZGVmaW5lZCAoaS5lLiBkZWxl dGVkLCBkZXN0cm95ZWQpLgorICAgICAqIEtlcm1pdCBkb2VzIG5vdCBzdXBwb3J0IHJhdGlvcyBz dWNoIGFzICI3LzgiLiBTb21lIExpc3AgZGlhbGVjdHMKKyAgICAgICBhY2NlcHQgcmF0aW9zIGFz IG51bWJlcnMsIGFuZCBnZW5lcmF0ZSByYXRpb3Mgd2hlbiB0b2xkIHRvIGRpdmlkZQorICAgICAg IHR3byBpbnRlZ2VycyB3aG9zZSBxdW90aWVudCBpcyBub3QgYSB3aG9sZSBudW1iZXI7IGUuZy4g aW4gQ29tbW9uCisgICAgICAgTGlzcDoKKyAgWzEzXSBVU0VSKDM3KTogKC8gKCsgMSAyIDMgNCkg MykKKyAgMTAvMworICBbMTNdIFVTRVIoMzgpOgorCisgICAgICogVGhlIHJlc3VsdCBvZiAoLyAx MCAzKSBpcyAzLjMzMy4uLi4gU29tZSBMaXNwIGRpYWxlY3RzIHRydW5jYXRlIHRoZQorICAgICAg IHJlc3VsdCB0byAzIHNpbmNlIGJvdGggb3BlcmFuZHMgYXJlIGludGVnZXJzLCBzb21lIGRvbid0 OyBzb21lIGdpdmUKKyAgICAgICB0aGUgcmVzdWx0IGFzIGEgcmF0aW8uIEMtS2VybWl0IGFsd2F5 cyBnaXZlcyBhIGZsb2F0aW5nIHBvaW50CisgICAgICAgcmVzdWx0IHdoZW4gdGhlcmUgaXMgYSBm cmFjdGlvbmFsIHBhcnQuIElmIHlvdSB3YW50IGFuIGludGVnZXIKKyAgICAgICByZXN1bHQsIHlv dSBjYW4gdXNlIFRSVU5DQVRFLCBGTE9PUiwgb3IgQ0VJTElORywgZS5nLiAodHJ1bmNhdGUgKC8K KyAgICAgICAxMCAzKSkuCisgICAgICogVGhlcmUgaXMgY3VycmVudGx5IG5vICJiaWdudW0iIHN1 cHBvcnQuIExhcmdlIG51bWJlcnMgY2FuIGJlIHVzZWQKKyAgICAgICBhbmQgbGFyZ2UgcmVzdWx0 cyBnZW5lcmF0ZWQsIGJ1dCAoYXMgbm90ZWQgaW4gWzU0OF1TZWN0aW9uIDkuMikKKyAgICAgICB0 aGV5IGFyZSBhY2N1cmF0ZSBvbmx5IHRvIHRoZSBwcmVjaXNpb24gb2YgdGhlIHVuZGVybHlpbmcg bWFjaGluZS4KKyAgICAgICBcdihtYXRoX3ByZWNpc2lvbikgZ2l2ZXMgdGhlIG1hY2hpbmUgcHJl Y2lzaW9uIGFzIGEgbnVtYmVyIG9mCisgICAgICAgZGVjaW1hbCBkaWdpdHMsIGUuZy4gMTYuCisg ICAgICogU2NpZW50aWZpYyBub3RhdGlvbiBmb3IgZmxvYXRpbmctcG9pbnQgbnVtYmVycyBpcyBu b3Qgc3VwcG9ydGVkLiBJZgorICAgICAgIHRoZSBtYWduaXR1ZGUgb2YgYSBudW1iZXIgaXMgZ3Jl YXRlciB0aGFuIHRoZSBwcmVjaXNpb24gb2YgdGhlCisgICAgICAgdW5kZXJseWluZyBoYXJkd2Fy ZSwgdGhlIGxlc3Mtc2lnbmlmaWNhbnQgZGlnaXRzIGFyZSBzaG93biBidXQKKyAgICAgICB0aGVp ciB2YWx1ZXMgYXJlIG1lYW5pbmdsZXNzLiBJZiBpdCB0aGUgbnVtYmVyIGlzIHRvbyBzbWFsbCB0 byBiZQorICAgICAgIHJlcHJlc2VudGVkIGludGVybmFsbHksIGl0IGlzIHNob3duIGFzICIwLjAi LgorICAgICAqIE1hbnkgTGlzcCBmZWF0dXJlcyBhcmUgb21pdHRlZDogTGlzdCBwcm9jZXNzaW5n IChDQVIsIENEUiwgZXRjKSwKKyAgICAgICBERUZVTiwgTGlzcC1zcGVjaWZpYyBjb250cm9sIHN0 cnVjdHVyZXMsIGFuZCBzbyBvbi4KKworICAgWyBbNTQ5XVRvcCBdIFsgWzU1MF1Db250ZW50cyBd IFsgWzU1MV1DLUtlcm1pdCBIb21lIF0gWyBbNTUyXUtlcm1pdAorICAgSG9tZSBdCisKKzEwLiBG SUxFIFRSQU5TRkVSCisKKyAgIE5ldyBjb21tYW5kcyBhbmQgc3dpdGNoZXM6CisKKyAgIFNFVCBU UkFOU0ZFUiBSRVBPUlQgeyBPRkYsIE9OIH0KKyAgICAgICAgICBFbmFibGVzIG9yIGRpc2FibGVz IHRoZSAobmV3KSBvbmUtbGluZSBtZXNzYWdlIHByaW50ZWQgYnkgS2VybWl0CisgICAgICAgICAg YWZ0ZXIgYSByZW1vdGUtbW9kZSBmaWxlIHRyYW5zZmVyIHRvIGluZGljYXRlIHRoZSBzb3VyY2Ug YW5kCisgICAgICAgICAgZGVzdGluYXRpb24gZmlsZSwgY29tcGxldGUgd2l0aCBwYXRoLCB0byBs ZXQgeW91IGtub3cgd2hlcmUgdGhlCisgICAgICAgICAgZmlsZSB3ZW50LgorCisgICBTRU5EIC9U WVBFOntURVhULEJJTkFSWX0KKyAgICAgICAgICBTZW5kcyBvbmx5IGZpbGVzIG9mIHRoZSBnaXZl biB0eXBlIChzZWUgWzU1M11TZWN0aW9uIDQpLgorCisgICBTRU5EIC9OT0ZPTExPV0xJTktTOgor ICAgICAgICAgIChVTklYIG9ubHkpIFNraXAgb3ZlciBzeW1ib2xpYyBsaW5rcyByYXRoZXIgdGhh biBmb2xsb3dpbmcgdGhlbQorICAgICAgICAgIChkZWZhdWx0KS4gVGhpcyBhcHBsaWVzIHRvIHdp bGRjYXJkIGFuZC9vciByZWN1cnNpdmUgU0VORHM7IGlmIGEKKyAgICAgICAgICBzaW5nbGUgZmls ZW5hbWUgaXMgZ2l2ZW4sIGFuZCBpdCBoYXBwZW5zIHRvIGJlIGEgc3ltYm9saWMgbGluaywKKyAg ICAgICAgICB0aGUgZmlsZSBpdCBwb2ludHMgdG8gaXMgc2VudC4KKworICAgU0VORCAvRk9MTE9X TElOS1M6CisgICAgICAgICAgKFVOSVggb25seSkgRm9sbG93IChyZXNvbHZlKSBzeW1ib2xpYyBs aW5rcy4gV2F0Y2ggb3V0IGZvcgorICAgICAgICAgIGNpcmN1bGFyIGxpbmtzLCBlbmRsZXNzIGxv b3BzLCBldGMuCisKKyAgIFNFVCBTRU5EIEktUEFDS0VUUyB7IE9GRiwgT04gfQorICAgICAgICAg IFdoZW4gc2VuZGluZyBjb21tYW5kcyB0byBhIEtlcm1pdCBzZXJ2ZXIsIHRoaXMgdGVsbHMgd2hl dGhlcgorICAgICAgICAgIGNvbW1hbmQgcGFja2V0cyBzaG91bGQgYmUgcHJlY2VkZWQgYnkgYW4g SSAoaW5mb3JtYXRpb24pIHBhY2tldCwKKyAgICAgICAgICB3aGljaCBpcyB1c2VkIHRvIHN5bmNo cm9uaXplIHBhcmFtZXRlcnMgcHJpb3IgdG8gZXhlY3V0aW5nIHRoZQorICAgICAgICAgIGNvbW1h bmQuIE5vcm1hbGx5IE9OLiBUaGUgb25seSByZWFzb24gdG8gc2V0IHRoaXMgT0ZGIGlzIGZvcgor ICAgICAgICAgIGNvbW11bmljYXRpbmcgd2l0aCBidWdneSBLZXJtaXQgc2VydmVycyB0aGF0IG1p c2JlaGF2ZSB3aGVuIGFuIEkKKyAgICAgICAgICBwYWNrZXQgaXMgc2VudCB0byB0aGVtLiBUaGVy ZSBpcyBhbHNvIGEgU0VUIFJFQ0VJVkUgSS1QQUNLRVRTCisgICAgICAgICAgY29tbWFuZCwgYnV0 IHByZXNlbnRseSBpdCBoYXMgbm8gZWZmZWN0LgorCisgICBTRVQgVFJBTlNGRVIgTUVTU0FHRSBb IHRleHQgXQorICAgICAgICAgIFNldHMgYW4gaW5pdGlhbCBtZXNzYWdlIHRvIGJlIHNob3duIGlu IHRoZSBMYXN0IE1lc3NhZ2UgZmllbGQgb2YKKyAgICAgICAgICB0aGUgZnVsbHNjcmVlbiBmaWxl LXRyYW5zZmVyIGRpc3BsYXkuCisKKyAgIFNFVCBUUkFOU0ZFUiBUUkFOU0xBVElPTiB7IE9OLCBP RkYgfQorICAgICAgICAgIEluaGliaXRzIG9yIHJlLWVuYWJsZXMgdGV4dC1maWxlIHRyYW5zZmVy IGNoYXJhY3Rlci1zZXQKKyAgICAgICAgICB0cmFuc2xhdGlvbiBnbG9iYWxseS4KKworICAgeyBT RU5ELCBNU0VORCwgR0VULCBSRUNFSVZFIH0gL1RSQU5TUEFSRU5UCisgICAgICAgICAgSW5oaWJp dHMgY2hhcmFjdGVyLXNldCB0cmFuc2xhdGlvbiBmb3IgdGhpcyB0cmFuc2ZlciBvbmx5LgorCisg ICB7IEdFVCwgUkVDRUlWRSB9IC9QSVBFUzp7T04sT0ZGfQorICAgICAgICAgIE92ZXJyaWRlcyBn bG9iYWwgVFJBTlNGRVIgUElQRVMgc2V0dGluZyBmb3IgdGhpcyB0cmFuc2ZlciBvbmx5OworICAg ICAgICAgIE9OIGFsbG93cyBpbmNvbWluZyBmaWxlcyB3aXRoIG5hbWVzIGxpa2UgIiF0YXIgeGYg LSIgdG8gYmUKKyAgICAgICAgICBvcGVuZWQgYXMgcGlwZWxpbmVzIHJhdGhlciB0aGFuIHJlZ3Vs YXIgZmlsZXMuCisKKyAgIFRoZSBmb2xsb3dpbmcgbmV3ICJob3Qga2V5cyIgYXJlIGF2YWlsYWJs ZSB3aGVuIEtlcm1pdCdzIGZpbGUtdHJhbnNmZXIKKyAgIGRpc3BsYXkgaXMgdmlzaWJsZToKKwor ICAgICBEOiBUdXJuIG9uIGRlYnVnZ2luZywgb3BlbiAiZGVidWcubG9nIiBpZiBub3QgYWxyZWFk eSBvcGVuLgorICAgICBkOiBUdXJuIG9mZiBkZWJ1Z2dpbmcgYnV0IGxlYXZlIGxvZyBvcGVuIChp ZiBpdCB3YXMgb3BlbikuCisgICAgIFQ6IFR1cm4gb24gZGVidWctbG9nIHRpbWVzdGFtcHMuCisg ICAgIHQ6IFR1cm4gb2ZmIGRlYnVnLWxvZyB0aW1lc3RhbXBzLgorCisgICBPdGhlciBpbXByb3Zl bWVudHM6CisgICAgICogU0VUIEZJTEUgRE9XTkxPQUQtRElSRUNUT1JZIG5vdyB3b3JrcyBmb3Ig ZXh0ZXJuYWwgcHJvdG9jb2xzIChlLmcuCisgICAgICAgc3ovcnopIHRvby4KKyAgICAgKiBJbXBy b3ZlZCBhdXRvbWF0aWMgcGVyLWZpbGUgdGV4dC9iaW5hcnkgc3dpdGNoaW5nLCBkZXNjcmliZWQg aW4KKyAgICAgICBbNTU0XVNlY3Rpb24gNC4KKyAgICAgKiBXaGVuIHNlbmRpbmcgYSBmaWxlIGdy b3VwIChlLmcuICJzZW5kICouKiIpLCBmYWlsdXJlIHRvIG9wZW4gYSBmaWxlCisgICAgICAgaXMg bm8gbG9uZ2VyIGZhdGFsOyBub3cgQy1LZXJtaXQgc2ltcGx5IGdvZXMgYWhlYWQgdG8gdGhlIG5l eHQKKyAgICAgICBmaWxlLgorICAgICAqIFRyYW5zYWN0aW9uIGxvZyBlbnRyaWVzIGFyZSBub3cg bWFkZSBmb3IgZXh0ZXJuYWwgcHJvdG9jb2xzIHRvby4KKworICAgWyBbNTU1XVRvcCBdIFsgWzU1 Nl1Db250ZW50cyBdIFsgWzU1N11DLUtlcm1pdCBIb21lIF0gWyBbNTU4XUtlcm1pdAorICAgSG9t ZSBdCisKKzExLiBNT0RFTVMgQU5EIERJQUxJTkcKKworICAgSW4gQy1LZXJtaXQgOC4wLCB0aGUg ZGVmYXVsdCBtb2RlbSB0eXBlIGZvciBkaWFsaW5nIGhhcyBjaGFuZ2VkIGZyb20KKyAgIE5PTkUg KD0gRElSRUNULCBtZWFuaW5nIG5vIG1vZGVtKSB0byBHRU5FUklDLiBUaGlzIGNoYW5nZSBzaG91 bGQgaGF2ZQorICAgbm8gaW1wYWN0IG9uIGRpcmVjdCBjb25uZWN0aW9ucy4gRm9yIGRpYWxpbmcs IGl0IG1lYW5zIHRoYXQsIHVubGVzcyB5b3UKKyAgIFNFVCBNT0RFTSBUWVBFIHRvIGEgc3BlY2lm aWMgdHlwZSwgc3VjaCBhcyBVU1JPQk9USUNTIG9yIENPTkVYQU5ULAorICAgS2VybWl0IGFzc3Vt ZXM6CisKKyAgICAxLiBUaGUgbW9kZW0gdXNlcyB0aGUgSGF5ZXMgQVQgY29tbWFuZCBzZXQuCisg ICAgMi4gVGhlIG1vZGVtIHN1cHBvcnRzIGVycm9yIGNvcnJlY3Rpb24sIGRhdGEgY29tcHJlc3Np b24sIGFuZCBoYXJkd2FyZQorICAgICAgIGZsb3cgY29udHJvbCBhbmQgaXMgYWxyZWFkeSBjb25m aWd1cmVkIHRvIHVzZSB0aGVtLgorCisgICBJbiBmYWN0LCBLZXJtaXQgYXNzdW1lcyB0aGUgbW9k ZW0gaXMgY29tcGxldGVseSBjb25maWd1cmVkLCBhbmQKKyAgIHRoZXJlZm9yZSBkb2VzIG5vdCBz ZW5kIGl0IGFuIGluaXRpYWxpemF0aW9uIHN0cmluZyBvciBhbnkKKyAgIGNvbmZpZ3VyYXRpb24g Y29tbWFuZHMuIEluc3RlYWQsIGl0IHNlbmRzIG9ubHkgdGhlIHNpbXBsZXN0IGFuZCBtb3N0Cisg ICBwb3J0YWJsZSBjb21tYW5kczoKKworICAgICBBVFEwVjEgICAgICAgICAgR2l2ZSBkaWFsIHJl c3VsdCBjb2Rlcy4KKyAgICAgQVREVG51bWJlciAgICAgIERpYWwgdGhlIG51bWJlci4KKworICAg KG9yIEFURCBvciBBVERQLCBhcyBhcHByb3ByaWF0ZSkuCisKKyAgIFRoZSBuZXcgZGVmYXVsdHMg d29yayBmb3IgZGlyZWN0IGNvbm5lY3Rpb25zIGFuZCBmb3IgbW9zdCBtb2Rlcm4gbW9kZW1zCisg ICBvbiBtb3N0IHBsYXRmb3JtcywgYW5kIHRoZXkgd29yayBtdWNoIGZhc3RlciB0aGFuICJmdWxs LXRyZWF0bWVudCIKKyAgIGRpYWxpbmcuIElmIHRoZSBuZXcgZGVmYXVsdHMgZG9uJ3Qgd29yayBm b3IgeW91LCBvciBpZiB5b3UgbmVlZCB0bworICAgcGVyZm9ybSBleHBsaWNpdCBtb2RlbSBjb25m aWd1cmF0aW9ucyBvciBpbnRlcmFjdGlvbnMsIHRoZW4gc2V0IGEKKyAgIHNwZWNpZmljIG1vZGVt IHR5cGUgYW5kIHVzZSB0aGUgU0VUIE1PREVNIGFuZCBTRVQgRElBTCBjb21tYW5kcyBhcworICAg ZG9jdW1lbnRlZCBpbiBVc2luZyBDLUtlcm1pdC4KKworICAgICBXQVJOSU5HOiBEb24ndCB1c2Ug dGhlIGdlbmVyaWMgbW9kZW0gb24gaG9zdHMgdGhhdCBkbyBub3Qgc3VwcG9ydAorICAgICBSVFMv Q1RTIGZsb3cgY29udHJvbC4gSWYgWG9uL1hvZmYgaXMgaW4gdXNlIG9uIHRoZSBzZXJpYWwgcG9y dCwKKyAgICAgeW91J2xsIG5lZWQgdG8gc2VsZWN0IGEgcGFydGljdWxhciBtb2RlbSB0eXBlIHNv IEtlcm1pdCBrbm93cyB3aGF0CisgICAgIGNvbW1hbmQgdG8gZ2l2ZSBpdCB0byBlbmFibGUgWG9u L1hvZmYgZmxvdyBjb250cm9sIGJldHdlZW4gaXRzZWxmCisgICAgIGFuZCB5b3VyIHNlcmlhbCBw b3J0LgorCisgICBUaGUgZm9sbG93aW5nIG5ldyBtb2RlbSB0eXBlcyB3ZXJlIGFkZGVkIGluIEMt S2VybWl0IDguMDoKKworICAgICBsdWNlbnQ6ICAgICAgICAgIEx1Y2VudCBWZW51cyBjaGlwc2V0 CisgICAgIHBjdGVsOiAgICAgICAgICAgUENUZWwgVi45MCBjaGlwc2V0CisgICAgIGNvbmV4YW50 OiAgICAgICAgQ29uZXhhbnQgKGV4LVJvY2t3ZWxsKSBtb2RlbSBmYW1pbHkKKyAgICAgem9vbS12 MzJiaXM6ICAgICBOZXcgbmFtZSBmb3IgIlpvb20iCisgICAgIHpvb20tdjM0ICAgICAgICAgWm9v bSBWLjM0CisgICAgIHpvb20tdjkwICAgICAgICAgWm9vbSBWLjkwIDU2SworICAgICB6b29tLXY5 MjogICAgICAgIFpvb20gVi45MiB3aXRoIFYuNDQgZGF0YSBjb21wcmVzc2lvbgorICAgICB6b2x0 cml4LXYzNDogICAgIE5ldyBuYW1lIGZvciAiem9sdHJpeCIKKyAgICAgem9sdHJpeC1oc3Atdjkw OiBTeW5vbnltIGZvciBQQ1RlbAorICAgICB6b2x0cml4LWhjZi12OTA6IFN5bm9ueW0gZm9yIElU VS1ULVYyNTAKKyAgICAgc21hcnRsaW5rLXY5MDogICBTeW5vbnltIGZvciB1c3JvYm90aWNzIChz YW1lIGNoaXBzZXQpCisgICAgIGFjZXItdjkwOiAgICAgICAgU3lub255bSBmb3IgUm9ja3dlbGwt djkwCisKKyAgIE5ldyBESUFMLXJlbGF0ZWQgdmFyaWFibGVzOgorCisgICAgIFx2KGRtX2hmKTog IERpYWwgbW9kaWZpZXI6IFdhaXQgZm9yIEhvb2stRmxhc2guCisgICAgIFx2KGRtX3diKTogIERp YWwgbW9kaWZpZXI6IFdhaXQgZm9yIEJvbmcuCisKKyAgIEZpbmFsbHksIGlmIGRpYWxpbmcgZmFp bHMsIEtlcm1pdCBub3cgcHJpbnRzIGEgY29udGV4dC1zZW5zaXRpdmUgaGludAorICAgc3VnZ2Vz dGluZyBwb3NzaWJsZSByZWFzb25zIGFuZCByZW1lZGllcy4KKworICAgQWRkZWQgaW4gQy1LZXJt aXQgOC4wLjIwMTogICBSdWRpbWVudGFyeSBzdXBwb3J0IGZvciBDYWxsZXIgSUQsIGZvciB1c2UK KyAgIHdpdGggdGhlIEFOU1dFUiBjb21tYW5kLiBJZiB0aGUgbW9kZW0gcmVwb3J0cyBDYWxsZXIg SUQgaW5mb3JtYXRpb24sCisgICBLZXJtaXQgc3RvcmVzIGl0IGluIHZhcmlhYmxlcyB0aGF0IHlv dSBjYW4gYWNjZXNzIGFmdGVyIHRoZSBjYWxsIGlzCisgICBhbnN3ZXJlZDoKKworICBcdihjYWxs aWRfZGF0ZSkgICBUaGUgZGF0ZSBvZiB0aGUgY2FsbAorICBcdihjYWxsaWRfdGltZSkgICBUaGUg dGltZSBvZiB0aGUgY2FsbAorICBcdihjYWxsaWRfbmFtZSkgICBUaGUgbmFtZSBvZiB0aGUgY2Fs bGVyCisgIFx2KGNhbGxpZF9ubWJyKSAgIFRoZSB0ZWxlcGhvbmUgbnVtYmVyIG9mIHRoZSBjYWxs ZXIKKyAgXHYoY2FsbGlkX21lc2cpICAgQSBtZXNzYWdlCisKKyAgIFRoZSBmb3JtYXQgb2YgdGhl c2UgaXRlbXMgZGVwZW5kcyBvbiB0aGUgb3JpZ2luYXRpbmcgYW5kIGFuc3dlcmluZworICAgcGhv bmUgY29tcGFuaWVzIGFuZCB0aGUgbW9kZW1zIGFuZCB0aGVpciBjb25maWd1cmF0aW9uLgorCisg ICBOb3QgdmVyeSBtYW55IG1vZGVtcyBzdXBwb3J0IENhbGxlciBJRCwgYW5kIHRob3NlIHRoYXQg ZG8gKGEpIHRlbmQgdG8KKyAgIGhhdmUgaXQgZGlzYWJsZWQgYnkgZGVmYXVsdCwgYW5kIChiKSB1 c2UgZGlmZmVyZW50IGNvbW1hbmRzIHRvIGVuYWJsZQorICAgaXQuIEEgcXVpY2sgc3VydmV5IHNo b3dzIG9mIHNvbWUgY3VycmVudCBtb2RlbHMgc2hvd3M6CisKKyAgIC0gVVNSIFYuOTA6ICAgICAg Tm8KKyAgIC0gSVRVLVQgVi4yNTA6ICAgTm8KKyAgIC0gTHVjZW50IFZlbnVzOiAgTm8KKyAgIC0g RGlhbW9uZCBTdXByYTogI0NJRD0xCisgICAtIFJvY2t3ZWxsIDU2SzogICNDSUQ9MQorICAgLSBQ Q1RFTDogICAgICAgICAjQ0lEPTEKKyAgIC0gWm9sdHJpeDogICAgICAgK1ZDSUQ9MQorICAgLSBD b25leGFudDogICAgICArVkNJRD0xCisKKyAgIFRvIHVzZSBLZXJtaXQncyBDYWxsZXIgSUQgZmVh dHVyZSwgeW91IGhhdmUgdG8gc2V0IHRoZSBtb2RlbSB0byB3YWl0CisgICBmb3IgYXQgbGVhc3Qg dHdvIHJpbmdzIGJlZm9yZSBhbnN3ZXJpbmcsIGFuZCB5b3UgaGF2ZSB0byBnaXZlIHRoZQorICAg Y29tbWFuZCB0byBlbmFibGUgQ2FsbGVyIElEOyBmb3IgZXhhbXBsZSAoYWZ0ZXIgY2hvb3Npbmcg YSBtb2RlbSB3aXRoCisgICBTRVQgTU9ERU0gVFlQRSk6CisKKyAgc2V0IG1vZGVtIGNvbW1hbmQg YXV0b2Fuc3dlciBvbiBBVFMwPTIjQ0lEPTFcezEzfQorICBzZXQgbW9kZW0gY29tbWFuZCBhdXRv YW5zd2VyIG9uIEFUUzA9MitWQ0lEPTFcezEzfQorCisgICBUaGVzZSBjb21tYW5kcyBjYW4gYmUg dW5kb25lIHdpdGg6CisKKyAgc2V0IG1vZGVtIGNvbW1hbmQgYXV0b2Fuc3dlciBvbiBBVFMwPTEj Q0lEPTBcezEzfQorICBzZXQgbW9kZW0gY29tbWFuZCBhdXRvYW5zd2VyIG9uIEFUUzA9MStWQ0lE PTBcezEzfQorCisgICBLZXJtaXQgcHJlc2VudGx5IGhhcyBubyBidWlsdC1pbiBrbm93bGVkZ2Ug b2YgdGhlIENhbGxlciBJRAorICAgY2FwYWJpbGl0aWVzIG9yIGNvbW1hbmRzIG9mIHRoZSBtb2Rl bXMgaW4gaXRzIGRhdGFiYXNlLgorCisgICBTaW5jZSB0aGUgdmFyaWFibGVzIGNhbiBiZSBhY2Nl c3NlZCBvbmx5IGFmdGVyIHRoZSBjYWxsIGlzIGFuc3dlcmVkLAorICAgdGhlIG9ubHkgd2F5IHRv IHJlZnVzZSBhIGNhbGwgaXMgdG8gYW5zd2VyIGl0LCBpbnNwZWN0IHRoZSB2YXJpYWJsZXMsCisg ICBhbmQgdGhlbiBoYW5nIGl0IHVwIGlmIGRlc2lyZWQuCisKKyAgIFsgWzU1OV1Ub3AgXSBbIFs1 NjBdQ29udGVudHMgXSBbIFs1NjFdQy1LZXJtaXQgSG9tZSBdIFsgWzU2Ml1LZXJtaXQKKyAgIEhv bWUgXQorCisxMi4gVEVSTUlOQUwgQ09OTkVDVElPTgorCisgICBOb3cgdGhhdCA3LWJpdCBjb25u ZWN0aW9ucyBhcmUgbm8gbG9uZ2VyIHRoZSBub3JtLCB0aGUgZGVmYXVsdCB0ZXJtaW5hbAorICAg Ynl0ZXNpemUgKGFsc28gY2FsbGVkICJkYXRhIHNpemUiIG9yICJ3b3JkIHNpemUiKSBpbiBDLUtl cm1pdCA4LjAgaXMgOAorICAgYml0cywgcmF0aGVyIHRoYW4gNyBiaXRzIGFzIGl0IHdhcyBpbiBD LUtlcm1pdCA3LjAgYW5kIGVhcmxpZXI6CisKKyAgIFNFVCBFU0NBUEUgY2hhcmFjdGVyCisgICAg ICAgICAgVGhpcyBjb21tYW5kLCB3aGljaCBzcGVjaWZpZXMgeW91ciBDT05ORUNULW1vZGUgZXNj YXBlCisgICAgICAgICAgY2hhcmFjdGVyLCBhbGxvd3MgeW91IHRvIHNwZWNpZnkgYW55IEFTQ0lJ IGNvbnRyb2wgY2hhcmFjdGVyIGluCisgICAgICAgICAgYSB2YXJpZXR5IG9mIGZvcm1hdHMuIEMt S2VybWl0IDguMC4yMDEgbm93IGFsc28gbGV0cyB5b3Ugc3BlY2lmeQorICAgICAgICAgIGFueSA4 LWJpdCB2YWx1ZSwgMTI4LTI1NSwgYXMgdGhlIGVzY2FwZSBjaGFyYWN0ZXIuIEluIHRoZSBTRVQK KyAgICAgICAgICBFU0NBUEUgY29tbWFuZCwgeW91IGNhbiB0eXBlIHRoZSA4LWJpdCBjaGFyYWN0 ZXIgbGl0ZXJhbGx5IG9yCisgICAgICAgICAgeW91IGNhbiBlbnRlciBpdHMgbnVtZXJpYyBjb2Rl LiBIZXJlIGFyZSBleGFtcGxlcyB0aGF0IHlvdSBjYW4KKyAgICAgICAgICBlbnRlciBmcm9tIGEg dGVybWluYWwgb3IgY29uc29sZSB0aGF0IHVzZXMgdGhlIElTTyBMYXRpbi0xCisgICAgICAgICAg Y2hhcmFjdGVyIHNldDoKKworICBDLUtlcm1pdD4gc2V0IGVzY2FwZSDvv70KKyAgQy1LZXJtaXQ+ IHNldCBlc2NhcGUgMTk1CisgIEMtS2VybWl0PiBzaG93IGVzY2FwZQorICAgRXNjYXBlIGNoYXJh Y3RlcjogQ29kZSAxOTUgKO+/vSk6IGVuYWJsZWQKKyAgQy1LZXJtaXQ+CisKKyAgICAgICAgICBC b3RoIG9mIHRoZXNlIGNvbW1hbmRzIHNldCB0aGUgZXNjYXBlIGNoYXJhY3RlciB2YWx1ZSB0byAx OTUKKyAgICAgICAgICAoZGVjaW1hbCksIHdoaWNoIGhhcHBlbnMgdG8gYmUgdXBwZXJjYXNlIGxl dHRlciBBIHdpdGggVGlsZGUgaW4KKyAgICAgICAgICBMYXRpbi0xLiBTSE9XIEVTQ0FQRSBhbmQg U0hPVyBURVJNSU5BTCBzaG93IHRoZSB2YWx1ZSwgYXMgZG9lcworICAgICAgICAgIHRoZSBDT05O RUNUIG1lc3NhZ2UuCisKKyAgIFNFVCBURVJNSU5BTCBBVVRPRE9XTkxPQUQgRVJST1IgeyBTVE9Q LCBDT05USU5VRSB9CisgICAgICAgICAgV2hlbiBLZXJtaXQgaGFzIGEgdGVybWluYWwgY29ubmVj dGlvbiB0byBhbm90aGVyIGNvbXB1dGVyLCBhbmQgYQorICAgICAgICAgIGZpbGUgdHJhbnNmZXIg aXMgaW5pdGlhdGVkIGF1dG9tYXRpY2FsbHkgYmVjYXVzZSBhIEtlcm1pdCBwYWNrZXQKKyAgICAg ICAgICB3YXMgcmVjZWl2ZWQgaW4gQ09OTkVDVCBtb2RlIChpLmUuIGluIHRoZSB0ZXJtaW5hbCBz Y3JlZW4pLCB0aGlzCisgICAgICAgICAgY29tbWFuZCB0ZWxscyB3aGF0IEtlcm1pdCBzaG91bGQg ZG8gaWYgdGhlIHRyYW5zZmVyIGZhaWxzLiBUaGUKKyAgICAgICAgICBkZWZhdWx0IGlzIHRvIFNU T1AsIHdoaWNoIGxlYXZlcyBLZXJtaXQgaW4gY29tbWFuZCBtb2RlIHdpdGggaXRzCisgICAgICAg ICAgZmlsZS10cmFuc2ZlciBkaXNwbGF5IHNob3dpbmcsIHNvIHlvdSBjYW4gc2VlIHRoYXQgdGhl IHRyYW5zZmVyCisgICAgICAgICAgZmFpbGVkIGFuZCB3aHkuIElmIHlvdSBTRVQgVEVSTUlOQUwg QVVUT0RPV05MT0FEIEVSUk9SIENPTlRJTlVFLAorICAgICAgICAgIHRoaXMgY2F1c2VzIEtlcm1p dCB0byByZXR1cm4gYXV0b21hdGljYWxseSB0byBpdHMgdGVybWluYWwKKyAgICAgICAgICBzY3Jl ZW4gKGkuZS4gcmVzdW1lIGl0cyBDT05ORUNUIHNlc3Npb24pIGFzIGlmIHRoZSB0cmFuc2ZlciBo YWQKKyAgICAgICAgICBzdWNjZWVkZWQ7IHRoaXMgY2FuIGJlIGRlc2lyYWJsZSBpZiB0aGUgZW50 aXJlIHNlc3Npb24gaXMgdW5kZXIKKyAgICAgICAgICBjb250cm9sIG9mIGEgaG9zdC1iYXNlZCBz Y3JpcHQuCisKKyAgIFNFVCBURVJNSU5BTCBCWVRFU0laRSB7IDcsIDggfQorICAgICAgICAgIFRo ZSBieXRlIHNpemUgdG8gdXNlIGR1cmluZyBDT05ORUNUIGFuZCBJTlBVVCBjb21tYW5kIGV4ZWN1 dGlvbiwKKyAgICAgICAgICB3aGljaCBjYW4gYmUgbW9yZSByZXN0cmljdGl2ZSB0aGFuIHRoZSBi eXRlc2l6ZSBpbXBsaWVkIGJ5IHRoZQorICAgICAgICAgIGN1cnJlbnQgUEFSSVRZIHNldHRpbmcs IGJ1dCBub3QgbGVzcyByZXN0cmljdGl2ZS4gSW4gQy1LZXJtaXQKKyAgICAgICAgICA3LjAgYW5k IGVhcmxpZXIsIHRoZSB0ZXJtaW5hbCBieXRlc2l6ZSB3YXMgNyBieSBkZWZhdWx0IHRvCisgICAg ICAgICAgcHJvdGVjdCBhZ2FpbnN0IHRoZSBsaWtlbGlob29kIHRoYXQgcGFyaXR5IHdhcyBpbiB1 c2Ugb24gdGhlCisgICAgICAgICAgY29ubmVjdGlvbiB3aXRob3V0IHRoZSB1c2VyJ3Mga25vd2xl ZGdlLiBXaGVuIHRoZSB0ZXJtaW5hbAorICAgICAgICAgIGJ5dGVzaXplIGlzIDggKGFzIGl0IGlz IGluIEMtS2VybWl0IDguMCBhbmQgbGF0ZXIpLCB0aGUgdXNlcgorICAgICAgICAgIHdpbGwgc2Vl IGdhcmJhZ2UgaW4gdGhpcyAoaW5jcmVhc2luZ2x5IHVubGlrZWx5KSBzaXR1YXRpb24uIE5vdGUK KyAgICAgICAgICB0aGF0IDggZGF0YSBiaXRzIGFyZSByZXF1aXJlZCBmb3IgbW9zdCBjaGFyYWN0 ZXIgc2V0cyBvdGhlciB0aGFuCisgICAgICAgICAgQVNDSUk6IExhdGluLTEsIFVURi04LCBhbmQg c28gb24uCisKKyAgIEEgbmV3IGNvbW1hbmQgaGFzIGJlZW4gYWRkZWQgdG8gcHJvZHVjZSB0aW1l c3RhbXBlZCBzZXNzaW9uIGxvZ3M6CisKKyAgIFNFVCBURVJNSU5BTCBTRVNTSU9OLUxPRyBUSU1F U1RBTVBFRC1URVhUCisgICAgICAgICAgUmVjb3JkcyB0aGUgdGVybWluYWwgc2Vzc2lvbiBpbiB0 ZXh0IG1vZGUgKGxpa2UgU0VUIFRFUk1JTkFMCisgICAgICAgICAgU0VTU0lPTi1MT0cgVEVYVCkg YnV0IGFkZHMgYSB0aW1lc3RhbXAgYXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoCisgICAgICAgICAg bGluZS4gVGhlIHRpbWVzdGFtcCBmb3JtYXQgaXMgaGg6bW06c3Mubm5uLCBhbmQgaW5kaWNhdGVz IHRoZQorICAgICAgICAgIHRpbWUgYXQgd2hpY2ggdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUg bGluZSBhcHBlYXJlZC4KKworICAgSW4gbW9zdCBVTklYIHZlcnNpb25zICh0aG9zZSBidWlsdCB3 aXRoIHRoZSBzZWxlY3QoKS1jYXBhYmxlIENPTk5FQ1QKKyAgIG1vZHVsZSAtLSBwcmV0dHkgbXVj aCBhbGwgdGhlIG9uZXMgdGhhdCBoYXZlIG9yIGNvdWxkIGhhdmUgVEVMTkVUCisgICBpbmNsdWRl ZCksIGFuIGlkbGUgdGltZW91dCBmZWF0dXJlIGhhcyBiZWVuIGFkZGVkOgorCisgICBTRVQgVEVS TUlOQUwgSURMRS1USU1FT1VUIG51bWJlcgorICAgICAgICAgIElmIHRoZSBudW1iZXIgaXMgbm90 IDAsIHRoZW4gS2VybWl0IGlzIHRvIHRha2UgYW4gYWN0aW9uIHdoZW4KKyAgICAgICAgICB0aGUg Z2l2ZW4gYW1vdW50IG9mIHRpbWUgcGFzc2VzIHdpdGggbm8gYWN0aXZpdHkgZHVyaW5nIENPTk5F Q1QKKyAgICAgICAgICBtb2RlLiBJZiB0aGUgbnVtYmVyIGlzIHBvc2l0aXZlIGl0IGlzIHRoZSBt YXhpbXVtIG51bWJlciBvZiBpZGxlCisgICAgICAgICAgc2Vjb25kczsgaWYgbnVtYmVyIGlzIG5l Z2F0aXZlIGl0IHJlcHJlc2VudHMgbWlsbGlzZWNvbmRzCisgICAgICAgICAgKHRob3VzYW5kdGhz IG9mIHNlY29uZHMpLiBJZiAwIGlzIGdpdmVuIGFzIHRoZSBudW1iZXIsIHRoZXJlIGFyZQorICAg ICAgICAgIG5vIGlkbGUgdGltZW91dHMuIFN5bm9ueW06IFNFVCBURVJNSU5BTCBJRExFLUxJTUlU LgorCisgICBTRVQgVEVSTUlOQUwgSURMRS1BQ1RJT04geyBSRVRVUk4sIEhBTkdVUCwgRVhJVCwg T1VUUFVUIFsgc3RyaW5nIF0gfQorICAgICAgICAgIFRoZSBhY3Rpb24gdG8gYmUgdGFrZW4gdXBv biBhbiBpZGxlIHRpbWVvdXQgaW4gQ09OTkVDVCBtb2RlLgorICAgICAgICAgIFJFVFVSTiB0byB0 aGUgcHJvbXB0LCBIQU5HVVAgdGhlIGNvbm5lY3Rpb24sIEVYSVQgZnJvbSBLZXJtaXQsCisgICAg ICAgICAgb3IgT1VUUFVUIHRoZSBnaXZlbiBzdHJpbmcgKGlmIG5vIHN0cmluZyBpcyBnaXZlbiwg YSBOVUwgKEFTQ0lJCisgICAgICAgICAgMCkgY2hhcmFjdGVyIGlzIHNlbnQpLgorCisgICBTRVQg VEVSTUlOQUwgSURMRS1BQ1RJT04geyBURUxORVQtTk9QLCBURUxORVQtQVlUIH0KKyAgICAgICAg ICBBY3Rpb25zIHRoYXQgY2FuIGJlIHNlbGVjdGVkIG9uIFRlbG5ldCBjb25uZWN0aW9ucyBvbmx5 LCB0aGF0CisgICAgICAgICAgbWlnaHQgYmUgdXNlZnVsIGlmIGlkbGUgbGltaXRzIGFyZSBlbmZv cmNlZCBieSB0aGUgVGVsbmV0IHNlcnZlcgorICAgICAgICAgIG9yIGluIHRoZSBUQ1AvSVAgcHJv dG9jb2w6IFRFTE5FVC1OT1Agc2VuZHMgYSAiTk8gT3BlcmF0aW9uIgorICAgICAgICAgIChkby1u b3RoaW5nKSBjb21tYW5kLCB3aGljaCBjYXVzZXMgbm8gcmVzcG9uc2UgZnJvbSB0aGUgc2VydmVy OworICAgICAgICAgIFRFTE5FVC1BWVQgc2VuZHMgYW4gIkFyZSBZb3UgVGhlcmUiIG1lc3NhZ2Ug dG8gdGhlIHNlcnZlciwgd2hpY2gKKyAgICAgICAgICBzaG91bGQgbWFrZSB0aGUgc2VydmVyIHNl bmQgYmFjayBhIG1lc3NhZ2UuIE5laXRoZXIgb2YgdGhlc2UKKyAgICAgICAgICBhY3Rpb25zIGlu dGVyZmVyZXMgd2l0aCB5b3VyIHJlbW90ZSBzZXNzaW9uLgorCisgICBTRVQgVEVSTUlOQUwgSURM RS1BQ1RJT04gaXMgdXNlZnVsIGZvciBjb25uZWN0aW9ucyB0byBob3N0cyBvciBzZXJ2aWNlcwor ICAgdGhhdCBhdXRvbWF0aWNhbGx5IGxvZyB5b3Ugb3V0IGFmdGVyIGEgY2VydGFpbiBhbW91bnQg b2YgaWRsZSB0aW1lLAorICAgZS5nLjoKKworICBzZXQgdGVybSBpZGxlLXRpbWVvdXQgMzAwCisg IHNldCB0ZXJtIGlkbGUtYWN0aW9uIG91dHB1dCBcMzIKKworICAgc2VuZHMgYSBzcGFjZSAoYXMg aWYgeW91IGhhZCBwcmVzc2VkIHRoZSBzcGFjZSBiYXIpIGV2ZXJ5IDMwMCBzZWNvbmRzCisgICAo Zml2ZSBtaW51dGVzKSB3aGlsZSB0aGVyZSBpcyBubyBhY3Rpdml0eSAoMzIgaXMgdGhlIEFTQ0lJ IGNvZGUgZm9yCisgICBzcGFjZSkuCisKKyAgIFdoZW4gQy1LZXJtaXQgcmV0dXJucyBmcm9tIENP Tk5FQ1QgdG8gY29tbWFuZCBtb2RlLCB0aGUgcmVhc29uIGZvciB0aGUKKyAgIHRyYW5zaXRpb24g aXMgZ2l2ZW4gaW4gYSBuZXcgdmFyaWFibGUsIFx2KGN4X3N0YXR1cyk6CisKKyAgICAgIDAgIE5v IENPTk5FQ1QgY29tbWFuZCBnaXZlbiB5ZXQuCisgICAgICAxICBVc2VyIGVzY2FwZWQgYmFjayBt YW51YWxseS4KKyAgICAgIDIgIEEgdHJpZ2dlciBzdHJpbmcgd2FzIGVuY291bnRlcmVkLgorICAg ICAgMyAgSUtTRCBlbnRlcmVkIHNlcnZlciBtb2RlLgorICAgICAgNCAgQXBwbGljYXRpb24gUHJv Z3JhbSBDb21tYW5kIHJlY2VpdmVkIGZyb20gaG9zdC4KKyAgICAgIDUgIElkbGUgdGltZW91dC4K KyAgICAgIDYgIFRlbG5ldCBwcm90b2NvbCBlcnJvci4KKyAgICAgIDcgIEtleXN0cm9rZSBtYWNy by4KKyAgICAgIDggIFRpbWUgbGltaXQgZXhjZWVkZWQuCisgICAgMTAwICBJbnRlcm5hbCBlcnJv ci4KKyAgICAxMDEgIENhcnJpZXIgcmVxdWlyZWQgYnkgbm90IGRldGVjdGVkLgorICAgIDEwMiAg SS9PIGVycm9yIG9uIGNvbm5lY3Rpb24uCisgICAgMTAzICBEaXNjb25uZWN0ZWQgYnkgaG9zdC4K KyAgICAxMDQgIERpc2Nvbm5lY3RlZCBieSB1c2VyLgorICAgIDEwNSAgU2Vzc2lvbiBsaW1pdCBl eGNlZWRlZC4KKyAgICAxMDYgIFJlamVjdGVkIGR1ZSB0byBUZWxuZXQgcG9saWN5LgorICAgIDEw NyAgUmVjZWl2ZWQga2lsbCBzaWduYWwuCisKKyAgIFZhbHVlcyAxMDAgYW5kIGFib3ZlIGluZGlj YXRlIHRoZXJlIGlzIG5vIGNvbm5lY3Rpb24uCisKKyAgIFsgWzU2M11Ub3AgXSBbIFs1NjRdQ29u dGVudHMgXSBbIFs1NjVdQy1LZXJtaXQgSG9tZSBdIFsgWzU2Nl1LZXJtaXQKKyAgIEhvbWUgXQor CisxMy4gQ0hBUkFDVEVSIFNFVFMKKworICAgU2VlIHRoZSBzZWN0aW9uIG9uIFs1NjddZmlsZSBz Y2FubmluZyBhYm92ZSwgYW5kIHRoZSBzZWN0aW9uIG9uCisgICBjaGFyYWN0ZXItc2V0IGNvbnZl cnNpb24gaW4gWzU2OF1GVFAuIEFsc286CisKKyAgICAgKiBUcnVlIHN1cHBvcnQgZm9yIENQMTI1 MiAocmF0aGVyIHRoYW4gdHJlYXRpbmcgaXQgYXMgTGF0aW4tMSkuCisgICAgICogUHJvcGVyIGhh bmRsaW5nIG9mIEMxIHZhbHVlcyB3aGVuIGNvbnZlcnRpbmcgSVNPIDgtYml0IHRleHQgdG8KKyAg ICAgICBVVEYtOC4KKyAgICAgKiBUWVBFIC9DSEFSQUNURVItU0VUOiAvVFJBTlNMQVRFLVRPOiBh bGxvd3Mgc3BlY2lmaWMgdHJhbnNsYXRpb25zLgorICAgICAqIFRoZSBUUkFOU0xBVEUgY29tbWFu ZCBub3cgd29ya3Mgb24gbXVsdGlwbGUgZmlsZXMuCisgICAgICogS19DSEFSU0VUIGVudmlyb25t ZW50IHZhcmlhYmxlIHRvIHNldCB0aGUgZmlsZSBjaGFyYWN0ZXItc2V0LgorICAgICAqIFNFVCBU UkFOU0ZFUiBUUkFOU0xBVElPTiBPRkYuCisgICAgICogRlRQIGNsaWVudCBjaGFyYWN0ZXItc2V0 IHRyYW5zbGF0aW9uIChbNTY5XVNlY3Rpb24gMy43KS4KKworICAgWyBbNTcwXVRvcCBdIFsgWzU3 MV1Db250ZW50cyBdIFsgWzU3Ml1DLUtlcm1pdCBIb21lIF0gWyBbNTczXUtlcm1pdAorICAgSG9t ZSBdCisKKzE0LiBESUFMT1VUIEZST00gVEVMTkVUIFRFUk1JTkFMIFNFUlZFUlMKKworICAgRm9y IHllYXJzLCBDLUtlcm1pdCBoYXMgc3VwcG9ydGVkIGRpYWxpbmcgb3V0IGZyb20gVGVsbmV0IG1v ZGVtIHNlcnZlcnMKKyAgIChhbHNvIGNhbGxlZCByZXZlcnNlIHRlcm1pbmFsIHNlcnZlcnMgb3Ig YWNjZXNzIHNlcnZlcnMpLCBidXQgdW50aWwgbm93CisgICB0aGVyZSB3YXMgbm8gd2F5IGZvciBL ZXJtaXQgdG8gY29udHJvbCB0aGUgY29tbXVuaWNhdGlvbiBwYXJhbWV0ZXJzCisgICAoc3BlZWQs IHBhcml0eSwgZXRjKSBvbiB0aGUgc2VyaWFsIHBvcnQgb2YgdGhlIHRlcm1pbmFsIHNlcnZlcjsg aXQgaGFkCisgICB0byB1c2Ugd2hhdGV2ZXIgd2FzIHRoZXJlLgorCisgICBCdXQgbm93LCBpZiB5 b3UgbWFrZSBhIGNvbm5lY3Rpb24gdG8gYSBzZXJ2ZXIgdGhhdCBzdXBwb3J0cyB0aGUgVGVsbmV0 CisgICBDb20gUG9ydCBDb250cm9sIE9wdGlvbiwgWzU3NF1SRkMgMjIxNywgeW91IGhhdmUgdGhl IHNhbWUgZGVncmVlIG9mCisgICBjb250cm9sIGFzIHlvdSB3b3VsZCBoYXZlIG92ZXIgYSBzZXJp YWwgcG9ydCBvbiB0aGUgY29tcHV0ZXIgd2hlcmUKKyAgIEtlcm1pdCBpcyBydW5uaW5nOiBTRVQg U1BFRUQsIFNFVCBGTE9XLCBTRVQgUEFSSVRZLCBTRVQgU1RPUC1CSVRTLCBTSE9XCisgICBDT01N LCBXQUlULCBTRVQgQ0FSUklFUi1XQVRDSCwgdGhlIG1vZGVtLXNpZ25hbCB2YXJpYWJsZXMsIHNl bmRpbmcKKyAgIEJyZWFrLCBhbmQgc28gb24sIGFwcGx5IHRvIHRoZSBjb25uZWN0aW9uIGJldHdl ZW4gdGhlIHRlcm1pbmFsIHNlcnZlcgorICAgYW5kIHRoZSBtb2RlbS4KKworICAgRm9yIGV4YW1w bGUsIHVzaW5nIGEgQ2lzY28gQWNjZXNzIFNlcnZlciAyNTA5LCB3aGVyZSBzcGVjaWZ5aW5nIGEg VENQCisgICBwb3J0IGluIHRoZSA2MDAwJ3Mgc2VsZWN0cyBhIHNlcmlhbCBwb3J0IHRoYXQgY2Fu IGJlIHVzZWQgZm9yIGRpYWxpbmcKKyAgIG91dDoKKworICBzZXQgaG9zdCB4eHggNjAwMSAgICAg IDsgeHh4IGlzIHRoZSBJUCBob3N0bmFtZSBvciBhZGRyZXNzIG9mIHRoZSBzZXJ2ZXIKKyAgKGxv ZyBpbiBpZiBuZWNlc3NhcnkpICA7IFdpdGggYSBzY3JpcHQgb3IgYnkgaGFuZAorICBzZXQgbW9k ZW0gdHlwZSB1c3IgICAgIDsgVGVsbCBLZXJtaXQgd2hhdCBraW5kIG9mIG1vZGVtIGl0IGhhcwor ICBzZXQgc3BlZWQgNTc2MDAgICAgICAgIDsgVGhpcyBhZmZlY3RzIHRoZSBzZXJ2ZXIncyBwb3J0 CisgIHNldCBmbG93IHJ0cy9jdHMgICAgICAgOyBEaXR0bworICBkaWFsIDc2NTQzMjEKKworICAg VGhlIG1vZGVtIHNlcnZlciBtaWdodCBvciBtaWdodCBub3QgcmVxdWlyZSBhIGxvZ2luIHNlcXVl bmNlLiBJdCBtaWdodAorICAgYWxzbyBhbGxvdyBmb3IgYXV0b21hdGljIGF1dGhlbnRpY2F0aW9u LCBlLmcuIHZpYSBLZXJiZXJvcyB0aWNrZXRzLgorICAgTk9URTogSWYgdGhlIG1vZGVtIHNlcnZl ciByZXF1aXJlcyBhIGxvZ2luIHNlcXVlbmNlLCB0aGVuIFJFRElBTCBtaWdodAorICAgbm90IHdv cmsgYXMgZXhwZWN0ZWQuCisKKyAgIFdoZW4geW91IGhhdmUgYSBUZWxuZXQgQ29tIFBvcnQgY29u bmVjdGlvbiwgeW91ciBTRVQgU1BFRUQgYW5kIFNFVCBGTE9XCisgICBvcHRpb25zIGNoYW5nZSBh dXRvbWF0aWNhbGx5IHRvIHJlZmxlY3QgdGhlIGNhcGFiaWxpdGllcyBvZiB0aGUgc2VydmVyLAor ICAgcmF0aGVyIHRoYW4gdGhvc2Ugb2YgeW91ciBsb2NhbCBjb21wdXRlci4KKworICAgU2VlIHRo ZSBjb25maWd1cmF0aW9uIG1hbnVhbCBmb3IgeW91ciBzZXJ2ZXIgZm9yIGFkZGl0aW9uYWwKKyAg IGluZm9ybWF0aW9uLiBGb3IgZXhhbXBsZSwgaG93IHRvIHNldCB1cCB0aGUgc2VydmVyIHRvIGRy b3AgdGhlIFRlbG5ldAorICAgY29ubmVjdGlvbiBhdXRvbWF0aWNhbGx5IHdoZW4gdGhlIHRlbGVw aG9uZSBjYWxsIGlzIGh1bmcgdXAgKGUuZy4KKyAgICJhdXRvaGFuZ3VwIiBvbiBDaXNjbyBtb2Rl bHMpLgorCisgICBGb3IgYSBMaW51eC1iYXNlZCBUZWxuZXQgQ29tLVBvcnQgc2VydmVyLCBjbGlj ayB0aGUgU3JlZGlyZCBsaW5rOgorCisgICBbIFs1NzVdVG9wIF0gWyBbNTc2XUNvbnRlbnRzIF0g WyBbNTc3XVNyZWRpcmQgXSBbIFs1NzhdQy1LZXJtaXQgSG9tZSBdCisgICBbIFs1NzldS2VybWl0 IEhvbWUgXQorCisxNS4gQ09QSU5HIFdJVEggQlJPS0VOIEtFUk1JVCBQQVJUTkVSUworCisgICBU aGVyZSBhcmUgbG90cyBvZiBmYXVsdHkgS2VybWl0IHByb3RvY29sIGltcGxlbWVudGF0aW9ucyBv dXQgdGhlcmUsCisgICBmb3VuZCBtYWlubHkgaW4gM3JkLXBhcnR5IHByb2R1Y3RzIHJhbmdpbmcg ZnJvbSBjb21tdW5pY2F0aW9ucyBzb2Z0d2FyZQorICAgcGFja2FnZXMgdG8gZmlsZS10cmFuc2Zl ciBmdW5jdGlvbnMgZW1iZWRkZWQgd2l0aGluIGRldmljZXMuIFRoaXMgdG9waWMKKyAgIGlzIGNv dmVyZWQgWzU4MF1IRVJFIGZvciBDLUtlcm1pdCA3LjAsIGJ1dCBDLUtlcm1pdCA4LjAgYWRkcyBz b21lCisgICBhZGRpdGlvbmFsIHRyaWNrcy4KKworICAgU0VUIEFUVFJJQlVURSBSRUNPUkQtRk9S TUFUIHsgT04sIE9GRiB9CisgICAgICAgICAgQWxsb3dzIGNvbnRyb2wgb2YgdGhlIEtlcm1pdCdz IFJlY29yZC1Gb3JtYXQgYXR0cmlidXRlLiBTZXQgdGhpcworICAgICAgICAgIHRvIE9GRiBpbiBj YXNlIGluY29taW5nIGZpbGUgYXJlIHJlZnVzZWQgZHVlIHRvIHVua25vd24gb3IKKyAgICAgICAg ICBpbnZhbGlkIHJlY29yZCBmb3JtYXRzIGlmIHlvdSB3YW50IHRvIGFjY2VwdCB0aGUgZmlsZSBh bnl3YXkuCisKKyAgIFNFVCBBVFRSSUJVVEVTIE9GRgorICAgICAgICAgIFRoaXMgaXMgbm90IGEg bmV3IHRyaWNrLCBidXQgaXQgd2FzIHJlY2VudGx5IGRpc2NvdmVyZWQgdGhhdCB0aGUKKyAgICAg ICAgICBLZXJtaXQgaW1wbGVtZW50YXRpb24gZW1iZWRkZWQgd2l0aGluIGEgY2VydGFpbiBraW5k IG9mCisgICAgICAgICAgcHVuY2hpbmcvYmVuZGluZyBtYWNoaW5lIChTYWx2YWduaW5pIGlmIHlv dSBtdXN0IGtub3cpIGhhbmdzCisgICAgICAgICAgdXBvbiByZWNlcHRpb24gb2Ygc3RhbmRhcmQg Zm9ybWF0IEtlcm1pdCBhdHRyaWJ1dGVzIHdoZW4KKyAgICAgICAgICByZWNlaXZpbmcgZmlsZXMu IFdoZW4gc2VuZGluZyBmaWxlcywgaXQgc2VuZHMgYXR0cmlidXRlcyBvZiBpdHMKKyAgICAgICAg ICBvd24sIG9uZSBwZXIgQS1wYWNrZXQsIHdoaWNoIGlzIHNsaWdodGx5IHVudXN1YWwgYnV0IGxl Z2FsLiBXaGVuCisgICAgICAgICAgcmVjZWl2aW5nIGZpbGVzIGZyb20gQy1LZXJtaXQsIEs5NSwg TVMtRE9TIEtlcm1pdCwgS2VybWl0LTM3MCwKKyAgICAgICAgICBldGMsIGl0IHNpbXBseSBleGl0 cyB1cG9uIHJlY2VwdGlvbiBvZiB0aGUgZmlyc3QgQS1wYWNrZXQ7CisgICAgICAgICAgYXBwYXJl bnRseSBpdCB3YXMgbm90IGNvZGVkIGFjY29yZGluZyB0byB0aGUgcHJvdG9jb2wKKyAgICAgICAg ICBzcGVjaWZpY2F0aW9uLCB3aGljaCBhbGxvd3MgbXVsdGlwbGUgYXR0cmlidXRlcyBwZXIgQS1w YWNrZXQuCisgICAgICAgICAgU29sdXRpb246IHRlbGwgdGhlIGZpbGUgc2VuZGVyIHRvIFNFVCBB VFRSSUJVVEVTIE9GRi4KKworICAgU0VUIFNFTkQgSS1QQUNLRVRTIHsgT04sIE9GRiB9CisgICAg ICAgICAgQSBLZXJtaXQgc2VydmVyIGlzIHN1cHBvc2VkIHRvIGFjY2VwdCBJLXBhY2tldHM7IHRo aXMgaXMgaG93IHRoZQorICAgICAgICAgIGNsaWVudCBsZXRzIHRoZSBzZXJ2ZXIga25vdyBpdHMg Y2FwYWJpbGl0aWVzIGFuZCBwcmVmZXJlbmNlcworICAgICAgICAgIGJlZm9yZSBzZW5kaW5nIGEg Y29tbWFuZC4gQXBwYXJlbnRseSB0aGVyZSBpcyBhdCBsZWFzdCBvbmUKKyAgICAgICAgICBLZXJt aXQgc2VydmVyIGltcGxlbWVudGF0aW9uIHRoYXQgZG9lcyBub3QgYWNjZXB0IEktcGFja2V0cywg YW5kCisgICAgICAgICAgZG9lcyBub3QgcHJvcGVybHkgcmVzcG9uZCB3aXRoIGFuIEVycm9yIHBh Y2tldCBpZiBpdCBnZXRzIG9uZS4KKyAgICAgICAgICBUbyBnZXQgYXJvdW5kIHN1Y2ggc2l0dWF0 aW9ucyBpbiBDLUtlcm1pdCA4LjAsIHlvdSBjYW4gdXNlIFNFVAorICAgICAgICAgIFNFTkQgSS1Q QUNLRVRTIE9GRiB0byBpbmhpYml0IHRoZSBzZW5kaW5nIG9mIEkgcGFja2V0cy4gSW4gdGhpcwor ICAgICAgICAgIGNhc2UsIHRoZSBjbGllbnQgbXVzdCBiZSBhYmxlIHRvIGFkanVzdCB0byB0aGUg c2VydmVyJ3MKKyAgICAgICAgICBjb25maWd1cmF0aW9uLCByYXRoZXIgdGhhbiB0aGUgb3RoZXIg d2F5IGFyb3VuZCBhcyB3ZSBhcmUgdXNlZAorICAgICAgICAgIHRvLgorCisgICBTRVQgUFJPVE9D T0wgS0VSTUlUIHt9IHt9IHt9CisgICAgICAgICAgQy1LZXJtaXQgNi4wIGFuZCBsYXRlciBhdXRv bWF0aWNhbGx5IHNlbmQgImF1dG91cGxvYWQiIGFuZAorICAgICAgICAgICJhdXRvZG93bmxvYWQi IGNvbW1hbmRzIHdoZW4gaW4gbG9jYWwgbW9kZSBhbmQgeW91IGdpdmUgYSBmaWxlCisgICAgICAg ICAgdHJhbnNmZXIgY29tbWFuZC4gRm9yIGV4YW1wbGUsIGlmIHlvdSB0ZWxsIGtlcm1pdCB0byAi c2VuZAorICAgICAgICAgIG9vZmEudHh0IiwgS2VybWl0IHNlbmRzICJrZXJtaXQgLXIiIGFuZCBh IGNhcnJpYWdlIHJldHVybiwgaW4KKyAgICAgICAgICBjYXNlIHlvdSBoYWQgZm9yZ290dGVuIHRv IHN0YXJ0IEtlcm1pdCBvbiB0aGUgZmFyIGVuZCBhbmQgdG9sZAorICAgICAgICAgIGl0IHRvIHJl Y2VpdmUgYSBmaWxlLiBJZiBhIEtlcm1pdCBwcm9ncmFtIGhhZCBhbHJlYWR5IGJlZW4KKyAgICAg ICAgICBzdGFydGVkIG9uIHRoZSBmYXIgZW5kLCBpdCBzaG91bGQgaGFybWxlc3NseSBhYnNvcmIg dGhpcyBzdHJpbmcuCisgICAgICAgICAgSG93ZXZlciwgc29tZSBLZXJtaXQgcHJvZ3JhbXMgdmlv bGF0ZSB0aGUgS2VybWl0IHByb3RvY29sCisgICAgICAgICAgZGVmaW5pdGlvbiBhbmQgdHJlYXQg c3VjaCBzdHJpbmdzIGFzIEtlcm1pdCBwYWNrZXRzIGV2ZW4gdGhvdWdoCisgICAgICAgICAgdGhl eSBhcmUgbm90LiBJbiBzdWNoIGNhc2VzLCBnaXZlIHRoaXMgY29tbWFuZCB0byBzZXQgdGhlIEtl cm1pdAorICAgICAgICAgIHByb3RvY29sIGF1dG91cGxvYWQgYW5kIGRvd25sb2FkIHN0cmluZ3Mg dG8gbm90aGluZywgd2hpY2ggdGVsbHMKKyAgICAgICAgICBLZXJtaXQgbm90IHRvIHNlbmQgdGhl bS4gKFRoaXMgaXMgbm90IGEgbmV3IGZlYXR1cmUsIGJ1dCBpdCB3YXMKKyAgICAgICAgICBub3Qg cHJldmlvdXNseSBpbmNsdWRlZCBpbiB0aGUgIkNvcGluZyIgc2VjdGlvbiBvZiB0aGUKKyAgICAg ICAgICBkb2N1bWVudGF0aW9uLikKKworICAgWyBbNTgxXVRvcCBdIFsgWzU4Ml1Db250ZW50cyBd IFsgWzU4M11DLUtlcm1pdCBIb21lIF0gWyBbNTg0XUtlcm1pdAorICAgSG9tZSBdCisKKzE2LiBO RVcgQ09NTUFORC1MSU5FIE9QVElPTlMKKworICAga2VybWl0IC1oIE5vdyBwcmludHMgYSBjb21w bGV0ZSBsaXN0aW5nIG9mIGl0cyBjb21tYW5kLWxpbmUgb3B0aW9ucywKKyAgIHJhdGhlciB0aGFu IGFuIGFiYnJldmlhdGVkIGxpc3Qgc3F1ZWV6ZWQgaW50byBhIDI0eDgwIHNwYWNlLgorCisgICAt ZGQgICAgICAgICAgICAgIERlYnVnLCBsaWtlIC1kIGJ1dCBhZGRzIHRpbWVzdGFtcHMKKyAgIC0t dmVyc2lvbiAgU2hvd3MgQy1LZXJtaXQgdmVyc2lvbiBudW1iZXIuCisgICAtLW5vcGVybXMgIEVx dWl2YWxlbnQgdG8gU0VUIEFUVFJJQlVURSBQUk9URUNUSU9OIE9GRi4KKworICAgS2VybWl0IG5v dyBhY2NlcHRzIGEgc2VsZWN0aW9uIG9mIFVSTHMgKFVuaXZlcnNhbCBSZXNvdXJjZSBMb2NhdG9y cykgYXMKKyAgIGl0cyBmaXJzdCBjb21tYW5kLWxpbmUgYXJndW1lbnQuIFRoZXNlIGFyZToKKwor ICAgdGVsbmV0Omhvc3RuYW1lCisgICAgICAgICAgTWFrZXMgYSBUZWxuZXQgY29ubmVjdGlvbiB0 byB0aGUgZ2l2ZW4gaG9zdCAoSVAgaG9zdG5hbWUgb3IKKyAgICAgICAgICBhZGRyZXNzKS4KKwor ICAgZnRwOi8vW3VzZXJbOnBhc3N3b3JkXUBdaG9zdG5hbWVbL3BhdGguLi5dCisgICAgICAgICAg TWFrZXMgYW4gRlRQIGNvbm5lY3Rpb24gdG8gdGhlIGdpdmVuIGhvc3QgKElQIGhvc3RuYW1lIG9y CisgICAgICAgICAgYWRkcmVzcykuIElmIGEgdXNlcm5hbWUgaXMgZ2l2ZW4sIEtlcm1pdCB0cmll cyB0byBsb2cgeW91IGluOyBpZgorICAgICAgICAgIGEgcGFzc3dvcmQgaXMgZ2l2ZW4sIGl0IGlz IHVzZWQ7IGlmIG5vdCwgeW91IGFyZSBwcm9tcHRlZCBmb3IKKyAgICAgICAgICBvbmUuIElmIG5v IHVzZXJuYW1lIGlzIGdpdmVuLCBhbiBhbm9ueW1vdXMgbG9naW4gaXMgcGVyZm9ybWVkLgorICAg ICAgICAgIElmIGEgcGF0aG5hbWUgaXMgaW5jbHVkZWQsIEtlcm1pdCB0cmllcyB0byBHRVQgdGhl IGdpdmVuIGZpbGUuCisgICAgICAgICAgU2VlIFs1ODVdU2VjdGlvbiAzLjEuMyBmb3IgZGV0YWls cy4KKworICAgZnRwczovL1t1c2VyWzpwYXNzd29yZF1AXWhvc3RuYW1lWy9wYXRoLi4uXQorICAg ICAgICAgIE1ha2VzIGEgc2VjdXJlIEZUUCBjb25uZWN0aW9uIG92ZXIgU1NMLgorCisgICB0ZWxu ZXRzOi8vW3VzZXJbOnBhc3N3b3JkXUBdaG9zdG5hbWUKKyAgICAgICAgICBNYWtlcyBhIHNlY3Vy ZSBUZWxuZXQgY29ubmVjdGlvbiBvdmVyIFNTTC4KKworICAga2VybWl0Oi8vW3VzZXJbOnBhc3N3 b3JkXUBdaG9zdG5hbWVbL3BhdGguLi5dCisgICAgICAgICAgTWFrZXMgYSBjb25uZWN0aW9uIHRv IGFuIFs1ODZdSW50ZXJuZXQgS2VybWl0IFNlcnZlci4KKworICAgaHR0cDovL1t1c2VyWzpwYXNz d29yZF1AXWhvc3RuYW1lWy9wYXRoLi4uXQorICAgICAgICAgIE1ha2VzIGEgY29ubmVjdGlvbiB0 byBXZWIgc2VydmVyLgorCisgICBodHRwczovL1t1c2VyWzpwYXNzd29yZF1AXWhvc3RuYW1lWy9w YXRoLi4uXQorICAgICAgICAgIE1ha2VzIGEgY29ubmVjdGlvbiB0byBzZWN1cmUgV2ViIHNlcnZl ci4KKworICAgWyBbNTg3XVRvcCBdIFsgWzU4OF1Db250ZW50cyBdIFsgWzU4OV1DLUtlcm1pdCBI b21lIF0gWyBbNTkwXUtlcm1pdAorICAgSG9tZSBdCisKKzE3LiBMT0dTCisKKyAgIEluIEMtS2Vy bWl0IDguMCwgd2UgbWFrZSBhbiBlZmZvcnQgdG8ga2VlcCBwYXNzd29yZHMgb3V0IG9mIHRoZSBk ZWJ1ZworICAgbG9nLiBUaGlzIGNhbiBuZXZlciBiZSAxMDAlIGVmZmVjdGl2ZSwgYnV0IGl0J3Mg YmV0dGVyIHRoYW4gYmVmb3JlLAorICAgd2hlbiB0aGVyZSB3ZXJlIG5vIHByZWNhdXRpb25zIGF0 IGFsbC4gV2hlbmV2ZXIgS2VybWl0IGtub3dzIGl0J3MKKyAgIHByb21wdGluZyBmb3IsIHBhcnNp bmcsIG9yIHRyYW5zbWl0dGluZyBhIHBhc3N3b3JkLCBpdCB0ZW1wb3JhcmlseQorICAgdHVybnMg b2ZmIGxvZ2dpbmcgYW5kIHRoZW4gdHVybnMgaXQgYmFjayBvbiBhZnRlcndhcmRzLiBUaGlzIGtl ZXBzIHRoZQorICAgZGVidWcgbG9nIHBhc3N3b3JkLWZyZWUgaW4gbW9zdCBjb21tb24gY2FzZXMs IGJ1dCB0aGVyZSBjYW4gYmUgbm8KKyAgIGd1YXJhbnRlZXMuCisKKyAgIEFzIG5vdGVkIGVsc2V3 aGVyZSwgdGhlIG5ldyAiLWRkIiBjb21tYW5kLWxpbmUgb3B0aW9uIHNlbGVjdHMgYQorICAgdGlt ZXN0YW1wZWQgZGVidWcgbG9nIChlcXVpdmFsZW50IHRvICJzZXQgZGVidWcgdGltZXN0YW1wcyBv biIsICJsb2cKKyAgIGRlYnVnIGRlYnVnLmxvZyIpLgorCisgICBDLUtlcm1pdCA4LjAgYWxzbyBz dXBwb3J0cyBhIG5ldyB0aW1lc3RhbXBlZCBzZXNzaW9uIGxvZyB2aWEgInNldAorICAgc2Vzc2lv bi1sb2cgdGltZXN0YW1wZWQtdGV4dCIsICJsb2cgc2Vzc2lvbiIuCisKKyAgIFRoZXJlIGhhdmUg YmVlbiByZXF1ZXN0cyBmb3Igb3RoZXIga2luZHMgb2YgbG9ncywgZm9yIGV4YW1wbGUgYSBjb21t YW5kCisgICBsb2cuIFRoZXNlIG1pZ2h0IGJlIGFkZGVkIGF0IHNvbWUgcG9pbnQuIE9uZSBwZXJz b24gd2FudGVkIHRvIGJlIGFibGUKKyAgIHRvIGxvZyBjb21tYW5kcyB3aXRoIHRpbWVzdGFtcHMs IGJ1dCBvbmx5IGNvbW1hbmRzIGlzc3VlZCBhdCB0aGUKKyAgIHByb21wdCwgbm90IGNvbW1hbmRz IGZyb20gZmlsZXMgb3IgbWFjcm9zLCBhbmQgYWxzbyB3YW50ZWQgYSBoZWFkZXIKKyAgIGxpbmUg YXQgdGhlIGJlZ2lubmluZyBzaG93aW5nIHRoZSBkYXRlLCB1c2VyLCBhbmQgaG9zdC4gVGhpcyBj YW4gYmUKKyAgIGRvbmUgYXMgZm9sbG93czoKKworICAuZmlsZW5hbWUgOj0gXHYoaG9tZSljb21t YW5kcy5sb2cgIDsgKGZvciBleGFtcGxlKQorICBmb3BlbiAvd3JpdGUgXCVjIFxtKGZpbGVuYW1l KQorICBpZiBzdWNjZXNzIHsKKyAgICAgIGZ3cml0ZSAvbGluZSBcJWMgXHYoZGF0ZSk6IFVzZXI9 XHYodXNlcikgSG9zdD1cdihob3N0KQorICAgICAgZmNsb3NlIFwlYworICAgICAgc2V0IGRlYnVn IHRpbWVzdGFtcHMgb24KKyAgICAgIGxvZyBkZWJ1ZyB7fCBncmVwICJDTUQoUCkiID4+IFxtKGZp bGVuYW1lKX0gYXBwZW5kCisgIH0KKworICAgWyBbNTkxXVRvcCBdIFsgWzU5Ml1Db250ZW50cyBd IFsgWzU5M11DLUtlcm1pdCBIb21lIF0gWyBbNTk0XUtlcm1pdAorICAgSG9tZSBdCisgICAgIF9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXworCisKKyAgICBDLUtlcm1pdCA4LjAgVXBkYXRlIE5vdGVzIC8gWzU5NV1UaGUgS2Vy bWl0IFByb2plY3QgLyBDb2x1bWJpYQorICAgIFVuaXZlcnNpdHkgLyAxNSBEZWMgMjAwMyAtIDEz IFNlcCAyMDEwCisKK1JlZmVyZW5jZXMKKworICAgMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv CisgICAyLiBtYWlsdG86a2VybWl0QGNvbHVtYmlhLmVkdQorICAgMy4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0bWwKKyAgIDQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9rOTUuaHRtbAorICAgNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQuaHRtbAorICAgNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nrc2NyaXB0 cy5odG1sCisgICA3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY3VycmVudC5odG1s CisgICA4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvd2hhdHNuZXcuaHRtbAorICAg OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2ZhcS5odG1sCisgIDEwLiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvc3VwcG9ydC5odG1sCisgIDExLiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjY29udGVudHMKKyAgMTIuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKKyAgMTMuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9pbmRleC5odG1sCisgIDE0LiBodHRwOi8vd3d3LmFtYXpvbi5jb20v Z3AvcHJvZHVjdC8xNTU1NTgxNjQxP2llPVVURjgmdGFnPWFsZWlkbW9yZWxkb20tMjAmbGlua0Nv ZGU9YXMyJmNhbXA9MTc4OSZjcmVhdGl2ZT05MzI1JmNyZWF0aXZlQVNJTj0xNTU1NTgxNjQxCisg IDE1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwKKyAgMTYu IG1haWx0bzprZXJtaXQtc3VwcG9ydEBjb2x1bWJpYS5lZHUKKyAgMTcuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC8KKyAgMTguIGh0dHA6Ly93d3cua2VybWl0LXByb2plY3Qub3JnLwor ICAxOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5ueWMubnkudXMva2VybWl0LworICAyMC4gZnRwOi8v a2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvZi9DT1BZSU5HLlRYVAorICAyMS4gZnRwOi8va2Vy bWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvZi9ja2NtYWkuYworICAyMi4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3h2CisgIDIzLiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2s2MG1hbnVhbC5odG1sCisgIDI0LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pNzAuaHRtbAorICAyNS4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVk dS9rZXJtaXQvZi9ja2VybWl0NzAudHh0CisgIDI2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t1dHV0b3IuaHRtbAorICAyNy4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJt aXQvZi9ja3VrZXIubnIKKyAgMjguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9zZWN1 cml0eS5odG0KKyAgMjkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC90ZWxuZXQuaHRt CisgIDMwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvZnRwc2NyaXB0cy5odG1sCisg IDMxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjYndyLmh0bWwKKyAgMzIuIGZ0 cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2YvY2tjYndyLnR4dAorICAzMy4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sCisgIDM0LiBmdHA6Ly9rZXJtaXQu Y29sdW1iaWEuZWR1L2tlcm1pdC9mL2NrdWJ3ci50eHQKKyAgMzUuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja3Zid3IuaHRtbAorICAzNi4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVk dS9rZXJtaXQvZi9ja3Zid3IudHh0CisgIDM3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2t1aW5zLmh0bWwKKyAgMzguIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Yv Y2t1aW5zLnR4dAorICAzOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nrdmlucy5o dG1sCisgIDQwLiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9mL2Nrdmlucy50eHQK KyAgNDEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NjZmcuaHRtbAorICA0Mi4g ZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvZi9ja2NjZmcudHh0CisgIDQzLiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjcGxtLmh0bWwKKyAgNDQuIGZ0cDovL2tlcm1p dC5jb2x1bWJpYS5lZHUva2VybWl0L2YvY2tjcGxtLnR4dAorICA0NS4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2lrc2QuaHRtbAorICA0Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L3NrZXJtaXQuaHRtbAorICA0Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQ4MC5odG1sI3RvcAorICA0OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQuaHRtbAorICA0OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4 Lmh0bWwKKyAgNTAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRt bCN4MAorICA1MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1s I3gxCisgIDUyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwj eDIKKyAgNTMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4 Mi4xCisgIDU0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwj eDIuMgorICA1NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1s I3gyLjIuMQorICA1Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5o dG1sI3gyLjIuMgorICA1Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4 MC5odG1sI3gyLjIuMworICA1OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQ4MC5odG1sI3gyLjIuNAorICA1OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQ4MC5odG1sI3gyLjIuNQorICA2MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQ4MC5odG1sI3gyLjIuNgorICA2MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZXJtaXQ4MC5odG1sI3gzCisgIDYyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tlcm1pdDgwLmh0bWwjeDMuMQorICA2My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZXJtaXQ4MC5odG1sI3gzLjEuMQorICA2NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrZXJtaXQ4MC5odG1sI3gzLjEuMgorICA2NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gzLjEuMworICA2Ni4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gzLjEuNAorICA2Ny4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gzLjIKKyAgNjguIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4My4zCisgIDY5LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDMuNAorICA3MC4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gzLjUKKyAgNzEuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4My41LjEKKyAgNzIuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4My41LjIKKyAgNzMuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4My41LjMKKyAgNzQuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4My42CisgIDc1LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDMuNi4xCisgIDc2 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDMuNi4yCisg IDc3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDMuNi4z CisgIDc4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDMu NworICA3OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gz LjcuMQorICA4MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1s I3gzLjcuMgorICA4MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5o dG1sI3gzLjgKKyAgODIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAu aHRtbCN4My45CisgIDgzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgw Lmh0bWwjeDMuMTAKKyAgODQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0 ODAuaHRtbCN4My4xMC4xCisgIDg1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tl cm1pdDgwLmh0bWwjeDMuMTAuMgorICA4Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQ4MC5odG1sI3gzLjEwLjMKKyAgODcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2VybWl0ODAuaHRtbCN4My4xMQorICA4OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrZXJtaXQ4MC5odG1sI3g0CisgIDg5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDUKKyAgOTAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2VybWl0ODAuaHRtbCN4NgorICA5MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZXJtaXQ4MC5odG1sI3g2LjEKKyAgOTIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2VybWl0ODAuaHRtbCN4Ni4yCisgIDkzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDYuMworICA5NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrZXJtaXQ4MC5odG1sI3g2LjQKKyAgOTUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4Ni41CisgIDk2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDYuNgorICA5Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3g3CisgIDk4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDgKKyAgOTkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4OC4xCisgMTAwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDguMgorIDEwMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3g4LjMKKyAxMDIuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4OC40CisgMTAzLiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDguNQorIDEwNC4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3g4LjYKKyAxMDUuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4OC43CisgMTA2LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDguOAorIDEwNy4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3g4LjkKKyAxMDguIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4OC4xMAorIDEwOS4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3g4LjExCisgMTEwLiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDguMTIKKyAxMTEuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4OC4xMworIDExMi4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3g4LjE0CisgMTEzLiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDkKKyAxMTQuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4OS4xCisgMTE1LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDkuMgorIDExNi4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3g5LjMKKyAxMTcuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4OS40CisgMTE4LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDkuNQorIDExOS4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3g5LjYKKyAxMjAu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4OS43CisgMTIx LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDkuOAorIDEy Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3g5LjkKKyAx MjMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4OS4xMAor IDEyNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3g5LjEx CisgMTI1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDEw CisgMTI2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDEx CisgMTI3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDEy CisgMTI4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDEz CisgMTI5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDE0 CisgMTMwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDE1 CisgMTMxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDE2 CisgMTMyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDE3 CisgMTMzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjdG9w CisgMTM0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCisgMTM1 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRtbAorIDEzNi4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g1CisgMTM3LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwKKyAxMzguIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4NQorIDEzOS4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gyLjIKKyAxNDAuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCNjb250ZW50cworIDE0MS4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gxNQorIDE0Mi4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gzLjcKKyAxNDMuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCNmdHBkYXRlcworIDE0NC4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI2Z0cGNoZWNrCisgMTQ1LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjZnRwbmFtZWxpc3QK KyAxNDYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCNzcnZy ZW5hbWUKKyAxNDcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRt bCNmdHB2ZGlyCisgMTQ4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgw Lmh0bWwjc2V0ZnRwdHlwZQorIDE0OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQ4MC5odG1sI3gzLjYKKyAxNTAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2VybWl0ODAuaHRtbCN4MTUKKyAxNTEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2VybWl0ODAuaHRtbCN4OC43CisgMTUyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tlcm1pdDgwLmh0bWwjeDIuMQorIDE1My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQ4MC5odG1sI3gyLjIKKyAxNTQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0ODAuaHRtbCN4OC4xNAorIDE1NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZXJtaXQ4MC5odG1sI3g4LjEzCisgMTU2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDguMTMKKyAxNTcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja3V0dXRvci5odG1sCisgMTU4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2t1aW5zLmh0bWwKKyAxNTkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9za2Vy bWl0Lmh0bWwKKyAxNjAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAu aHRtbCNzZXRsb2N1cworIDE2MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQ4MC5odG1sI2xjb21tYW5kcworIDE2Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQ4MC5odG1sI2Z0cHVzZXIKKyAxNjMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2VybWl0ODAuaHRtbCNzaG93dmFyCisgMTY0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjY2FsbGVyaWQKKyAxNjUuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4Ni42CisgMTY2LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDAKKyAxNjcuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4My4xMQorIDE2OC4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3RvcAorIDE2OS4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI2NvbnRlbnRzCisgMTcwLiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCisgMTcxLiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvaW5kZXguaHRtbAorIDE3Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrZXJtaXQ4MC5odG1sI3gwCisgMTczLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tlcm1pdDgwLmh0bWwjdG9wCisgMTc0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tlcm1pdDgwLmh0bWwjY29udGVudHMKKyAxNzUuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKKyAxNzYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9pbmRleC5odG1sCisgMTc3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvazk1 Lmh0bWwKKyAxNzguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9zc2hjbGllbnQuaHRt bAorIDE3OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L3NrZXJtaXQuaHRtbAorIDE4 MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L3NrZXJtaXQuaHRtbAorIDE4MS4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L3NzaGNsaWVuLmh0bQorIDE4Mi4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gzCisgMTgzLiBmdHA6Ly9mdHAu aXNpLmVkdS9pbi1ub3Rlcy9yZmMxNzM4LnR4dAorIDE4NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gyLjIuMgorIDE4NS4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gyLjIuMQorIDE4Ni4gZnRwOi8vZnRwLmlzaS5l ZHUvaW4tbm90ZXMvcmZjMjM5Ni50eHQKKyAxODcuIGZ0cDovL2Z0cC5pc2kuZWR1L2luLW5vdGVz L3JmYzI2MTYudHh0CisgMTg4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dDgwLmh0bWwjeDIuMi4zCisgMTg5LiBmdHA6Ly9mdHAuaXNpLmVkdS9pbi1ub3Rlcy9yZmMyNjE2 LnR4dAorIDE5MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1s I3g4LjEzLjcKKyAxOTEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9zZWN1cml0eS5o dG0jeDUuNAorIDE5Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L3NlY3VyaXR5Lmh0 bSN4MTUKKyAxOTMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9zZWN1cml0eS5odG0j eDYuMgorIDE5NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L3NlY3VyaXR5Lmh0bWwK KyAxOTUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4MTYK KyAxOTYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN0b3AK KyAxOTcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCNjb250 ZW50cworIDE5OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAor IDE5OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0bWwKKyAyMDAuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4My4xCisgMjAxLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDMuMgorIDIwMi4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gzLjMKKyAyMDMu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4My40CisgMjA0 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDMuNQorIDIw NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gzLjYKKyAy MDYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4My43Cisg MjA3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDMuOAor IDIwOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gzLjkK KyAyMDkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4My4x MAorIDIxMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gz LjExCisgMjExLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvc2VjdXJpdHkuaHRtCisg MjEyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvc2VjdXJpdHkuaHRtI3NlcnZlcnMK KyAyMTMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NzZXRzLmh0bWwKKyAyMTQu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC91bmljb2RlLmh0bWwKKyAyMTUuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWk3MC5odG0jeDEuNS40CisgMjE2LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2FzZTEwLmh0bWwKKyAyMTcuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4NAorIDIxOC4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gzLjExCisgMjE5LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvZnRwc2NyaXB0cy5odG1sCisgMjIwLiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjdG9wCisgMjIxLiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjZnRwCisgMjIyLiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvZnRwY2xpZW50Lmh0bWwKKyAyMjMuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9mdHBzY3JpcHRzLmh0bWwKKyAyMjQuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKKyAyMjUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9pbmRleC5odG1sCisgMjI2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tl cm1pdDgwLmh0bWwjeDMuMS4xCisgMjI3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tlcm1pdDgwLmh0bWwjeDMuMS4zCisgMjI4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tlcm1pdDgwLmh0bWwjeDMuMS40CisgMjI5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDMuMS4zCisgMjMwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDMuMS4zCisgMjMxLiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDMuMgorIDIzMi4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gzLjUKKyAyMzMuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4My42CisgMjM0LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvZnRwc2NyaXB0cy5odG1sCisgMjM1LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tiMi5odG0KKyAyMzYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0ODAuaHRtbCNmdHBhdXRvbG9nCisgMjM3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjZnRwdXNlcgorIDIzOC4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gzLjgKKyAyMzkuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4My44CisgMjQwLiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjdG9wCisgMjQxLiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjZnRwCisgMjQyLiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCisgMjQzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvaW5kZXguaHRtbAorIDI0NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2libV9pZS5odG1sCisgMjQ1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dDgwLmh0bWwjeDMuMTAKKyAyNDYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0ODAuaHRtbCN0b3AKKyAyNDcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0ODAuaHRtbCNmdHAKKyAyNDguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0Lmh0bWwKKyAyNDkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5odG1s CisgMjUwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2s2MG1hbnVhbC5odG1sCisg MjUxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMTcK KyAyNTIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbAorIDI1 My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gzLjYKKyAy NTQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4My4xMQor IDI1NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gzLjEu NAorIDI1Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L3NlY3VyaXR5Lmh0bWwKKyAy NTcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4My43Cisg MjU4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDMuNwor IDI1OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3g4LjEz LjQKKyAyNjAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCNw ZXJtc3dpdGNoCisgMjYxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgw Lmh0bWwjZnRwY2htb2QKKyAyNjIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0ODAuaHRtbCN4My42LjIKKyAyNjMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2VybWl0ODAuaHRtbCN4NAorIDI2NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQ4MC5odG1sI3RvcAorIDI2NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQ4MC5odG1sI2Z0cAorIDI2Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQuaHRtbAorIDI2Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0 bWwKKyAyNjguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4 NworIDI2OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gz LjgKKyAyNzAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4 My44CisgMjcxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tiMi5odG0KKyAyNzIu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4My4xMAorIDI3 My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gzLjEwCisg Mjc0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDMuNgor IDI3NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3NldGZ0 cHR5cGUKKyAyNzYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRt bCN0b3AKKyAyNzcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRt bCNmdHAKKyAyNzguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwK KyAyNzkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5odG1sCisgMjgwLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuOQorIDI4MS4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gzLjUuMQorIDI4 Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI2Vycm9yYWN0 aW9uCisgMjgzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwj eDEuNQorIDI4NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1s I3g0LjcKKyAyODUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRt bCN4MS42CisgMjg2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0 bWwjeDguMTMKKyAyODcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWk3MC5o dG0jeDEuNS40CisgMjg4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pNzAu aHRtCisgMjg5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwj eDQKKyAyOTAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4 My43CisgMjkxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwj eDMuNS4yCisgMjkyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0 bWwjeDMuNworIDI5My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5o dG1sI2Vycm9yYWN0aW9uCisgMjk0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tl cm1pdDgwLmh0bWwjeDMuNS4yCisgMjk1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tlcm1pdDgwLmh0bWwjZXJyb3JhY3Rpb24KKyAyOTYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2VybWl0ODAuaHRtbCNmdHBmaWxlbmFtZXMKKyAyOTcuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCNmdHBwZXJtcworIDI5OC4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI2Z0cHVuaXF1ZQorIDI5OS4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI2Z0cGZpbGVuYW1lcwor IDMwMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI25vdGVf dXRjCisgMzAxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwj bm90ZV9kYXRlCisgMzAyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgw Lmh0bWwjeDMuNgorIDMwMy4gaHR0cDovL3d3dy5ib3VsZGVyLm5pc3QuZ292L3RpbWVmcmVxL2Zh cS9mYXEuaHRtIzEwOgorIDMwNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQ4MC5odG1sI3gzLjcKKyAzMDUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0ODAuaHRtbCN0b3AKKyAzMDYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0ODAuaHRtbCNmdHAKKyAzMDcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0Lmh0bWwKKyAzMDguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5odG1s CisgMzA5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDMu MTEKKyAzMTAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWk3MC5odG0jeDQu MworIDMxMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sCisg MzEyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDUKKyAz MTMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4My42LjMK KyAzMTQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCNmdHBm aWxlbmFtZXMKKyAzMTUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWk3MC5o dG0jeDQuMQorIDMxNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaTcwLmh0 bSN4NC4yLjIKKyAzMTcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWk3MC5o dG0jeDEuNS40CisgMzE4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgw Lmh0bWwjeDMuNi4yCisgMzE5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dDgwLmh0bWwjeDMuMTEKKyAzMjAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0ODAuaHRtbCN4My4xMQorIDMyMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQ4MC5odG1sI3NydnJlbmFtZQorIDMyMi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZXJtaTcwLmh0bSN4NC4xCisgMzIzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tlcm1pNzAuaHRtCisgMzI0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2ti Mi5odG0KKyAzMjUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRt bCNmdHBmaWxlbmFtZXMKKyAzMjYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0ODAuaHRtbCN4My41LjMKKyAzMjcuIGh0dHA6Ly93d3cucHJvZnRwZC5uZXQvCisgMzI4LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjdG9wCisgMzI5LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjZnRwCisgMzMwLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCisgMzMxLiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRtbAorIDMzMi4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrYjIuaHRtCisgMzMzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tjc2V0cy5odG1sCisgMzM0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv dW5pY29kZS5odG1sCisgMzM1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjc2V0 cy5odG1sCisgMzM2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjc2V0cy5odG1s CisgMzM3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDQK KyAzMzguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC91dGY4Lmh0bWwKKyAzMzkuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NzZXRzLmh0bWwKKyAzNDAuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4NAorIDM0MS4gZnRwOi8vZnRw LmlzaS5lZHUvaW4tbm90ZXMvcmZjMjY0MC50eHQKKyAzNDIuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN0b3AKKyAzNDMuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCNmdHAKKyAzNDQuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKKyAzNDUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9pbmRleC5odG1sCisgMzQ2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tl cm1pdDgwLmh0bWwjdG9wCisgMzQ3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tl cm1pdDgwLmh0bWwjZnRwCisgMzQ4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tl cm1pdC5odG1sCisgMzQ5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRt bAorIDM1MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3Rv cAorIDM1MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI2Z0 cAorIDM1Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAorIDM1 My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0bWwKKyAzNTQuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9mdHBzY3JpcHRzLmh0bWwKKyAzNTUuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4My4yCisgMzU2LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDMuMgorIDM1Ny4gZnRwOi8v ZnRwLmlzaS5lZHUvaW4tbm90ZXMvcmZjOTU5LnR4dAorIDM1OC4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2Nrc2NyaXB0cy5odG1sCisgMzU5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjdG9wCisgMzYwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjZnRwCisgMzYxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvZnRwc2NyaXB0Lmh0bWwKKyAzNjIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2VybWl0Lmh0bWwKKyAzNjMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9p bmRleC5odG1sCisgMzY0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgw Lmh0bWwjeDMuMTEuMQorIDM2NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQ4MC5odG1sI3gzLjExLjIKKyAzNjYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2VybWl0ODAuaHRtbCN4My4xMS4zCisgMzY3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tlcm1pdDgwLmh0bWwjeDMuMTEuNAorIDM2OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrZXJtaXQ4MC5odG1sI3gzLjExLjUKKyAzNjkuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKKyAzNzAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9rOTUuaHRtbAorIDM3MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQ4MC5odG1sI3gzLjExLjUKKyAzNzIuIGZ0cDovL2Z0cC5pc2kuZWR1L2luLW5vdGVzL3JmYzk1 OS50eHQKKyAzNzMuIGZ0cDovL2Z0cC5pc2kuZWR1L2luLW5vdGVzL3JmYzIzODkudHh0CisgMzc0 LiBodHRwOi8vd3d3LmlldGYub3JnL2ludGVybmV0LWRyYWZ0cy9kcmFmdC1pZXRmLWZ0cGV4dC1t bHN0LTE2LnR4dAorIDM3NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Z0cGNsaWVu dC5odG1sCisgMzc2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0 bWwjdG9wCisgMzc3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0 bWwjZnRwCisgMzc4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1s CisgMzc5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRtbAorIDM4MC4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gzCisgMzgxLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjdWNzMgorIDM4Mi4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3RvcAorIDM4My4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI2NvbnRlbnRzCisg Mzg0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCisgMzg1LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRtbAorIDM4Ni4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3RvcAorIDM4Ny4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI2NvbnRlbnRzCisgMzg4LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCisgMzg5LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRtbAorIDM5MC4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrYjIuaHRtCisgMzkxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tlcm1pdDgwLmh0bWwjdG9wCisgMzkyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tlcm1pdDgwLmh0bWwjY29udGVudHMKKyAzOTMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2VybWl0Lmh0bWwKKyAzOTQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9pbmRleC5odG1sCisgMzk1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dDgwLmh0bWwjeDQKKyAzOTYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0 ODAuaHRtbCN4NAorIDM5Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4 MC5odG1sI3g4LjEyCisgMzk4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dDgwLmh0bWwjeDguMQorIDM5OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQ4MC5odG1sI3gxMgorIDQwMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQ4MC5odG1sI3g4LjEyCisgNDAxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tl cm1pdDgwLmh0bWwjdG9wCisgNDAyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tl cm1pdDgwLmh0bWwjY29udGVudHMKKyA0MDMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0Lmh0bWwKKyA0MDQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRl eC5odG1sCisgNDA1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0 bWwjeDguMTQKKyA0MDYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAu aHRtbCN0b3AKKyA0MDcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAu aHRtbCNjb250ZW50cworIDQwOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQuaHRtbAorIDQwOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0bWwK KyA0MTAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4OQor IDQxMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3RvcAor IDQxMi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI2NvbnRl bnRzCisgNDEzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCisg NDE0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRtbAorIDQxNS4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3g4LjYKKyA0MTYuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN0b3AKKyA0MTcuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCNjb250ZW50cworIDQx OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAorIDQxOS4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0bWwKKyA0MjAuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN0b3AKKyA0MjEuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCNjb250ZW50cworIDQyMi4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAorIDQyMy4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0bWwKKyA0MjQuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN0b3AKKyA0MjUuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCNjb250ZW50cworIDQyNi4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAorIDQyNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2luZGV4Lmh0bWwKKyA0MjguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0ODAuaHRtbCNmam9pbgorIDQyOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZXJtaXQ4MC5odG1sI2ZzcGxpdAorIDQzMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrZXJtaXQ4MC5odG1sI3g4LjEwCisgNDMxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjdG9wCisgNDMyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjY29udGVudHMKKyA0MzMuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKKyA0MzQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9pbmRleC5odG1sCisgNDM1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tlcm1pdDgwLmh0bWwjeDkKKyA0MzYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2VybWl0ODAuaHRtbCN4OQorIDQzNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQ4MC5odG1sI3g5CisgNDM4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tl cm1pdDgwLmh0bWwjeDMKKyA0MzkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0ODAuaHRtbCN4MworIDQ0MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQ4MC5odG1sI3gzLjIKKyA0NDEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0ODAuaHRtbCN4My4yCisgNDQyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tl cm1pdDgwLmh0bWwjeDMuOAorIDQ0My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQ4MC5odG1sI3gzCisgNDQ0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tl cm1pdDgwLmh0bWwjeDMKKyA0NDUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0ODAuaHRtbCN4MworIDQ0Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQ4MC5odG1sI3gzLjIKKyA0NDcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0ODAuaHRtbCN4MworIDQ0OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQ4MC5odG1sI3g4LjEzCisgNDQ5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tl cm1pdDgwLmh0bWwjeDguMTMKKyA0NTAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2VybWl0ODAuaHRtbCN4OQorIDQ1MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQ4MC5odG1sI3g4LjEwCisgNDUyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tlcm1pdDgwLmh0bWwjeDguNy40CisgNDUzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tlcm1pdDgwLmh0bWwjdG9wCisgNDU0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tlcm1pdDgwLmh0bWwjY29udGVudHMKKyA0NTUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2VybWl0Lmh0bWwKKyA0NTYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9pbmRleC5odG1sCisgNDU3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dDgwLmh0bWwjdG9wCisgNDU4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dDgwLmh0bWwjY29udGVudHMKKyA0NTkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2VybWl0Lmh0bWwKKyA0NjAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5o dG1sCisgNDYxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwj dG9wCisgNDYyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwj Y29udGVudHMKKyA0NjMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0 bWwKKyA0NjQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5odG1sCisgNDY1 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDguNworIDQ2 Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3RvcAorIDQ2 Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI2NvbnRlbnRz CisgNDY4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCisgNDY5 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRtbAorIDQ3MC4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3NjcmlwdGVkaXQKKyA0NzEu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN0b3AKKyA0NzIu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCNjb250ZW50cwor IDQ3My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAorIDQ3NC4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0bWwKKyA0NzUuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN0b3AKKyA0NzYuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCNjb250ZW50cworIDQ3Ny4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAorIDQ3OC4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0bWwKKyA0NzkuIGZ0cDovL2Z0cC5pc2kuZWR1 L2luLW5vdGVzL3JmYzI4MjIudHh0CisgNDgwLiBmdHA6Ly9mdHAuaXNpLmVkdS9pbi1ub3Rlcy9y ZmMyODIyLnR4dAorIDQ4MS4gZnRwOi8vZnRwLmlzaS5lZHUvaW4tbm90ZXMvcmZjMjgyMi50eHQK KyA0ODIuIGZ0cDovL2Z0cC5pc2kuZWR1L2luLW5vdGVzL3JmYzI4MjIudHh0CisgNDgzLiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjdG9wCisgNDg0LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjY29udGVudHMKKyA0ODUu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKKyA0ODYuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5odG1sCisgNDg3LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDguMQorIDQ4OC4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3RvcAorIDQ4OS4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI2NvbnRlbnRzCisgNDkwLiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCisgNDkxLiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRtbAorIDQ5Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3g4LjIKKyA0OTMuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN0b3AKKyA0OTQuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCNjb250ZW50cworIDQ5NS4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAorIDQ5Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2luZGV4Lmh0bWwKKyA0OTcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0ODAuaHRtbCN4OS44CisgNDk4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tlcm1pdDgwLmh0bWwjeDkuOAorIDQ5OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZXJtaXQ4MC5odG1sI3g4LjIKKyA1MDAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2VybWl0ODAuaHRtbCN0b3AKKyA1MDEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2VybWl0ODAuaHRtbCNjb250ZW50cworIDUwMi4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaXQuaHRtbAorIDUwMy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2luZGV4Lmh0bWwKKyA1MDQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0ODAuaHRtbCN0b3AKKyA1MDUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0ODAuaHRtbCNjb250ZW50cworIDUwNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQuaHRtbAorIDUwNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4 Lmh0bWwKKyA1MDguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRt bCN4OS44CisgNTA5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0 bWwjdG9wCisgNTEwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0 bWwjY29udGVudHMKKyA1MTEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0 Lmh0bWwKKyA1MTIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5odG1sCisg NTEzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDkuOAor IDUxNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3g5LjgK KyA1MTUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4OS42 CisgNTE2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjdG9w CisgNTE3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjY29u dGVudHMKKyA1MTguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwK KyA1MTkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5odG1sCisgNTIwLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDkuOAorIDUyMS4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3g5LjgKKyA1MjIu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN0b3AKKyA1MjMu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCNjb250ZW50cwor IDUyNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAorIDUyNS4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0bWwKKyA1MjYuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN0b3AKKyA1MjcuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCNjb250ZW50cworIDUyOC4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAorIDUyOS4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0bWwKKyA1MzAuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN0b3AKKyA1MzEuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCNjb250ZW50cworIDUzMi4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAorIDUzMy4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2luZGV4Lmh0bWwKKyA1MzQuIG1haWx0bzp0aHVjZGF0QGhvdG1haWwuY29t CisgNTM1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDku OS4yCisgNTM2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwj dG9wCisgNTM3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwj Y29udGVudHMKKyA1MzguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0 bWwKKyA1MzkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5odG1sCisgNTQw LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjdG9wCisgNTQx LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjY29udGVudHMK KyA1NDIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKKyA1NDMu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5odG1sCisgNTQ0LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjdG9wCisgNTQ1LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjY29udGVudHMKKyA1NDYuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKKyA1NDcuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5odG1sCisgNTQ4LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDkuMgorIDU0OS4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3RvcAorIDU1MC4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI2NvbnRlbnRzCisgNTUxLiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCisgNTUyLiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvaW5kZXguaHRtbAorIDU1My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrZXJtaXQ4MC5odG1sI3g0CisgNTU0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDQKKyA1NTUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2VybWl0ODAuaHRtbCN0b3AKKyA1NTYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2VybWl0ODAuaHRtbCNjb250ZW50cworIDU1Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaXQuaHRtbAorIDU1OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2luZGV4Lmh0bWwKKyA1NTkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0ODAuaHRtbCN0b3AKKyA1NjAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0ODAuaHRtbCNjb250ZW50cworIDU2MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQuaHRtbAorIDU2Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4 Lmh0bWwKKyA1NjMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRt bCN0b3AKKyA1NjQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRt bCNjb250ZW50cworIDU2NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQu aHRtbAorIDU2Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0bWwKKyA1 NjcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4NAorIDU2 OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gzLjcKKyA1 NjkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4My43Cisg NTcwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjdG9wCisg NTcxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjY29udGVu dHMKKyA1NzIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKKyA1 NzMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5odG1sCisgNTc0LiBmdHA6 Ly9mdHAuaXNpLmVkdS9pbi1ub3Rlcy9yZmMyMjE3LnR4dAorIDU3NS4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3RvcAorIDU3Ni4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI2NvbnRlbnRzCisgNTc3LiBmdHA6Ly9rZXJt aXQuY29sdW1iaWEuZWR1L2tlcm1pdC9zcmVkaXJkLworIDU3OC4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAorIDU3OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2luZGV4Lmh0bWwKKyA1ODAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2VybWk3MC5odG0jeDQuMjIKKyA1ODEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2VybWl0ODAuaHRtbCN0b3AKKyA1ODIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2VybWl0ODAuaHRtbCNjb250ZW50cworIDU4My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZXJtaXQuaHRtbAorIDU4NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2lu ZGV4Lmh0bWwKKyA1ODUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAu aHRtbCN4My4xLjMKKyA1ODYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9jdWlrc2Qu aHRtbAorIDU4Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1s I3RvcAorIDU4OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1s I2NvbnRlbnRzCisgNTg5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5o dG1sCisgNTkwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRtbAorIDU5 MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3RvcAorIDU5 Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI2NvbnRlbnRz CisgNTkzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCisgNTk0 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRtbAorIDU5NS4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0bWwKCmRpZmYgLS1naXQgYS9ja2VybWl0 LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrZXJtaXQ5MC50eHQgYi9ja2VybWl0LTku MC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrZXJtaXQ5MC50eHQKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMC4uYWRmNmVlMwotLS0gL2Rldi9udWxsCisrKyBiL2NrZXJtaXQt OS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2tlcm1pdDkwLnR4dApAQCAtMCwwICsxLDIx NTIgQEAKKworICAgWzFdVGhlIENvbHVtYmlhIENyb3duIFRoZSBLZXJtaXQgUHJvamVjdCB8IENv bHVtYmlhIFVuaXZlcnNpdHkKKyAgIDYxMiBXZXN0IDExNXRoIFN0cmVldCwgTmV3IFlvcmsgTlkg MTAwMjUgVVNBIG8gWzJda2VybWl0QGNvbHVtYmlhLmVkdQorICAgLi4uc2luY2UgMTk4MQorICAg WzNdSG9tZSBbNF1LZXJtaXQgOTUgWzVdQy1LZXJtaXQgWzZdU2NyaXB0cyBbN11DdXJyZW50IFs4 XU5ldyBbOV1GQVEKKyAgIFsxMF1TdXBwb3J0CisKKworICAgICAgWzExXUNMSUNLIEhFUkUgdG8g cmVhZCBhYm91dCBzb21lIG9mIHRoZXNlIGl0ZW1zLgorCisgICAgICAgICAgWzEyXVRhYmxlIG9m IHBsYXRmb3JtcyAgIFsxM11Cb29rOiBVc2luZyBDLUtlcm1pdCAgIFsxNF1Eb3dubG9hZAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBDLUtlcm1pdCA5LjAKKworQy1LZXJtaXQgOS4wIFVwZGF0ZSBOb3RlcworCisgICBOb3RlOiAg IEMtS2VybWl0IDkuMC4zMDEgY29udGFpbnMgYSBjb3JyZWN0aW9uIHRoYXQgYXBwbGllcyBvbmx5 IHRvCisgICBTb2xhcmlzIDEwIGFuZCAxMS4KKyAgICAgQy1LZXJtaXQgOS4wLjMwMiBjb250YWlu cyBjb3JyZWN0aW9ucyB0aGF0IGFwcGx5IG9ubHkgdG8gRnJlZUJTRCA4CisgICBhbmQgOS4KKyAg ICAgKiBbMTVdTGFyZ2UgRmlsZXMKKyAgICAgKiBbMTZdSG93IHRvIFRlc3QgTGFyZ2UtRmlsZSBU cmFuc2ZlcgorICAgICAqIFsxN11Bcml0aG1ldGljIHdpdGggTGFyZ2UgSW50ZWdlcnMKKyAgICAg KiBbMThdRk9SQ0UtMyBQYWNrZXQgUHJvdG9jb2wKKyAgICAgKiBbMTldVmFyaWFibGUgRXZhbHVh dGlvbgorCisgICAgICogWzIwXVRoZSBSRU5BTUUgQ29tbWFuZCBZb3UgQWx3YXlzIFdhbnRlZAor ICAgICAqIFsyMV1PdGhlciBOZXcgRmVhdHVyZXMKKyAgICAgKiBbMjJdSW5jb21wYXRpYmlsaXRp ZXMKKyAgICAgKiBbMjNdV2hhdCdzIE5vdCBJbiBDLUtlcm1pdCA5LjAKKyAgICAgKiBbMjRdQW5k IGEgTG9vc2UgRW5kCisKKyAgICAgKiBbMjVdRGVtb25zdHJhdGlvbjogU2VjdXJlIFBPUCBtYWls IGZldGNoZXIKKyAgICAgKiBbMjZdRGVtb25zdHJhdGlvbjogSFAgU3dpdGNoIENvbmZpZ3VyYXRp b24gQmFja3VwCisgICAgICogWzI3XURlbW9uc3RyYXRpb246IEhQIGlMTyBCbGFkZSBDb25maWd1 cmF0aW9uCisgICAgICogWzI4XURlbW9uc3RyYXRpb246IElCTS9Sb2xtL1NpZW1lbnMgQ0JYIE1h bmFnZW1lbnQKKyAgICAgKiBbMjldRGVtb25zdHJhdGlvbjogQ1NWIGFuZCBUU1YgRmlsZXMKKyAg ICAgKiBbMzBdRGVtb25zdHJhdGlvbiBTY3JpcHRzIGZvciBXZWJtYXN0ZXJzCisKKyAgIFRoaXMg aXMgdGhlIHRoaXJkIHN1cHBsZW1lbnQgdG8gWzMxXVVzaW5nIEMtS2VybWl0LCBTZWNvbmQgRWRp dGlvbi4gSQorICAgYXBvbG9naXplIGZvciB0aGUgc2NhdHRlcmVkIG5hdHVyZSBvZiB0aGUgaW5m b3JtYXRpb24gYW5kIEkgaG9wZSBJIGNhbgorICAgb3JnYW5pemUgaXQgYW5kIGdhdGhlciBpdCBh bGwgaW50byBvbmUgcGxhY2UgZm9yIGVhc3kgYW5kIGRlZmluaXRpdmUKKyAgIHJlZmVyZW5jZSBz b21lIGRheS4gSXQncyBhIGJpZyBqb2Igc28gaXQgZGVwZW5kcyBvbiB0aGUgZGVtYW5kLiBGb3Ig dGhlCisgICB0aW1lIGJlaW5nIHRoZSBkZWZpbml0aXZlIHJlZmVyZW5jZSBhbmQgaW50cm9kdWN0 aW9uIGlzIHRoZSBib29rICh3aGljaAorICAgaXMgbm93IGF2YWlsYWJsZSBhbHNvIGluIGEgWzMy XUtpbmRsZSBFZGl0aW9uKSwgcGx1cyB0aGUgWzMzXUMtS2VybWl0CisgICA3LjAgdXBkYXRlLCBb MzRdQy1LZXJtaXQgOC4wIHVwZGF0ZSwgYW5kIG5vdyB0aGlzIG9uZS4gUGx1cyB0b25zIG9mCisg ICBvdGhlciB3ZWIgcGFnZXMgb24gdGhpcyBzaXRlLCBzYW1wbGUgc2NyaXB0IHByb2dyYW1zLCBh bmQgc28gb24uCisKKyAgIEluIHZlcnNpb24gNi4wLCBDLUtlcm1pdCB3YXMgYSBwcmV0dHkgcG93 ZXJmdWwgYW5kIGZsZXhpYmxlCisgICBjb21tdW5pY2F0aW9uIHByb2dyYW0gd2l0aCBzY3JpcHRp bmcgY2FwYWJpbGl0aWVzLiBCeSB2ZXJzaW9uIDkuMCwgSSdkCisgICBsaWtlIHRvIHRoaW5rIG9m IGl0IG1vcmUgYXMgYSBzY3JpcHRpbmcgbGFuZ3VhZ2Ugd2l0aCBidWlsdC1pbgorICAgY29tbXVu aWNhdGlvbnMuIFlvdSBjYW4gZ2V0IGFuIGlkZWEgb2YgdGhlIGtpbmRzIG9mIHByb2dyYW1zIHlv dSBjYW4KKyAgIHdyaXRlIGluIEtlcm1pdCBsYW5ndWFnZSBbMzVdaGVyZS4gWW91IGNhbiBkZXZl bG9wIHByb2dyYW1zIHF1aWNrbHkKKyAgIGJlY2F1c2UgaXQncyBhbiBpbnRlcmFjdGl2ZSBwcm9n cmFtLCBub3QgYSBjb21waWxlci4gVGhlIHNjcmlwdGluZworICAgbGFuZ3VhZ2UgaXMgdGhlIGNv bW1hbmQgbGFuZ3VhZ2UuIEtpbmQgb2YgbGlrZSB0aGUgVW5peCBzaGVsbCBidXQKKyAgICJzb21l d2hhdCIgbGVzcyBjcnlwdGljLCBpbmNsdWRpbmcgY29uY2VwdHMgbm90IG9ubHkgZnJvbSBDIGJ1 dCBmcm9tCisgICBQTC9JLCBTbm9ib2wsIExJU1AsIEJsaXNzLCBhbmQgU21hbGx0YWxrLiBUaGUg bGFuZ3VhZ2UgaXRzZWxmIGlzIGJ1aWx0CisgICB1cG9uIHRoZSBjb21tYW5kIGxhbmd1YWdlIG9m IHRoZSBtdWNoLWxvdmVkIFszNl1ERUNTWVNURU0tMjAgZnJvbSB0aGUKKyAgIDE5NzBzIGFuZCA4 MHMsIHRoZSBDbGlwcGVyIFNoaXAgb2YgdGhlIFRleHQgRXJhLiAoVGV4dCBpcyBub3QgYSBiYWQK KyAgIHdvcmQuIFRob3NlIG9mIHVzIHdobyBjYW4gdG91Y2gtdHlwZSBhbmQgd2hvIGFyZSBwcm9m aWNpZW50IGluCisgICB0ZXh0LWJhc2VkIGNvbXB1dGluZyBlbnZpcm9ubWVudHMgbGlrZSBVbml4 IHNoZWxsIG9yIFZNUyBEQ0wgYXJlIGxpa2VseQorICAgdG8gYmUgb3JkZXJzIG9mIG1hZ25pdHVk ZSBtb3JlIHByb2R1Y3RpdmUgdGhhbiB1c2VycyBvZiBHVUlzLikKKworICAgVGhhbmtzIHRvIChh dCBsZWFzdCkgSmVmZiBBbHRtYW4sIFdpbGxpYW0gQmFkZXIsIElhbiBCZWNrd2l0aCwgTmVsc29u CisgICBCZWViZSwgR2VycnkgQmVsYW5nZXIsIEpvb3AgQm9vbmVuLCBSb2IgQnJvd24sIENocmlz dGlhbiBDb3J0aSwgQWxleGV5CisgICBEb2t1Y2hhZXYsIEpvaG4gRHVubGFwLCBQZXRlciBFaWNo aG9ybiwgQ2FybCBGcmllZGJlcmcsIFRlcnJ5IEtlbm5lZHksCisgICBH77+9bnRlciBLbmF1Ziwg SmFzb24gTGVociwgQXJ0aHVyIE1hcnNoLCBMZXdpcyBNY0NhcnRoeSwgR2FyeSBNaWxscywgRWQK KyAgIFJhdmluLCBKb25hdGhhbiBSZWFtcywgTWlrZSBSZWNodG1hbiwgTWFyayBTYXBpcm8sIFN0 ZXZlbiBTY2h3ZWRhCisgICAoU01TKSwgS2luamFsIFNoYWgsIE1pY2hhZWwgU29rb2xvdiwgQW5k eSBUYW5lbmJhdW0sIFNldGggVGhlcmlhdWx0LAorICAgWmFjaCBBLiBUaG9tYXMsIE1hcnRpbiBW b3Js77+9bmRlciwgYW5kIEVyaWMgV2VhdmVyIGZvciBhc3Npc3RhbmNlLCBhbmQKKyAgIHRvIEhl d2xldHQtUGFja2FyZCBDb21wYW55IGZvciBzdXBwb3J0LgorCisgICAgIC0gRnJhbmsgZGEgQ3J1 eiAgIFszN11mZGNAY29sdW1iaWEuZWR1LCAzMCBKdW5lIDIwMTEKKworICAgUC5TLiBJdCBvY2N1 cnJlZCB0byBtZSBqdXN0IGJlZm9yZSB0aGUgZW5kIG9mIHRoZSBkYXkgdGhhdCBtYXliZSBJCisg ICBzaG91bGQgYmFjayB1cCB0aGUgS2VybWl0IHdlYnNpdGUgb24gRFZELCBqdXN0IGluIGNhc2Uu IFVzaW5nCisgICBbMzhdS2VybWl0IDk1IG9uIHRoZSBkZXNrdG9wIG92ZXIgYW4gU1NIIGNvbm5l Y3Rpb24gdG8gdGhlIFVuaXggZmlsZQorICAgc3lzdGVtIHdoZXJlIHRoZSB3ZWJzaXRlIHJlc2lk ZXMsIEkgbWFkZSBhIGZyZXNoIGRpcmVjdG9yeSBvbiB0aGUgUEMsCisgICBDRCdkIHRvIGl0LCBh bmQgb24gVW5peCBjZCdkIHRvIHRoZSBXZWJzaXRlIGRpcmVjdG9yeSwgYW5kIHRvbGQKKyAgIEMt S2VybWl0IDkuMCB0bzoKKworQy1LZXJtaXQ+IHNlbmQgL3JlY3Vyc2l2ZSAvZG90ZmlsZXMgL25v YmFja3VwICoKKworICAgYW5kIGl0IHJlLWNyZWF0ZWQgdGhlIHdlYnNpdGUgZGlyZWN0b3J5IHRy ZWUgaW4gdGhlIFBDIGRpcmVjdG9yeSwgdGV4dAorICAgZmlsZXMgY29ycmVjdGx5IGNvbnZlcnRl ZCB0byBXaW5kb3dzIGZvcm1hdCBhbmQgYmluYXJ5IGZpbGVzIGNvcnJlY3RseQorICAgbGVmdCBh cy1pcy4gVGhlIC9kb3RmaWxlcyBzd2l0Y2ggbWVhbnMgdG8gaW5jbHVkZSBmaWxlcyBzdWNoIGFz CisgICAuaHRhY2Nlc3Mgd2hvc2UgbmFtZXMgc3RhcnQgd2l0aCBhIGRvdCAocGVyaW9kKSwgYW5k IHRoZSAvbm9iYWNrdXAKKyAgIHN3aXRjaCBtZWFucyB0byBza2lwIGJhY2t1cCBmaWxlcyBjcmVh dGVkIGJ5IEVNQUNzIChzdWNoIGFzCisgICBpbmRleC5odG1sLn4yNDN+KS4gQW5kIHRoZW4gSSBk aWQgdGhlIHNhbWUgd2l0aCB0aGUgRlRQIHNpdGVzLCBhYm91dAorICAgOEdCIGluIGFsbC4gV2F0 Y2hpbmcgdGhlIGZpbGUtdHJhbnNmZXIgZGlzcGxheSB3YXMga2luZCBvZiBsaWtlIGhhdmluZwor ICAgMzAgeWVhcnMgb2YgbXkgbGlmZSBmbGFzaCBiZWZvcmUgbXkgZXllcyBpbiBhIGZldyBtaW51 dGVzLiBUaGVuIEkKKyAgIGNvcGllZCB0aGUgdHdvIGRpcmVjdG9yaWVzIHRvIERWRCAodGhlIEZU UCBzaXRlIGhhZCB0byBiZSBzcGxpdCBvdmVyIDIKKyAgIERWRHMpLiBUaGUgd2hvbGUgb3BlcmF0 aW9uIHRvb2sgdW5kZXIgaGFsZiBhbiBob3VyLiBUaGUgZGlyZWN0b3J5IHRyZWUKKyAgIG9uIHRo ZSBDRCBpcyBkaXJlY3RseSB1c2FibGUgaW4gV2luZG93cywgVW5peCwgb3IgYW55IG90aGVyIG9w ZXJhdGluZworICAgc3lzdGVtICh1bmxpa2UgaWYgSSBoYWQgdHJhbnNmZXJyZWQgdGhlIGZpbGVz IGFsbCBpbiBiaW5hcnkgbW9kZSBvciBhbGwKKyAgIGluIHRleHQgbW9kZSwgb3IgaWYgSSBoYWQg bWFkZSwgc2F5LCBhIGd6aXBwZWQgdGFyIGFyY2hpdmUgb3IgYSB6aXAKKyAgIGFyY2hpdmUpLiBJ IGJlbGlldmUgdGhhdCwgdG8gdGhpcyBkYXksIEtlcm1pdCBpcyB0aGUgb25seSBzb2Z0d2FyZSB0 aGF0CisgICBjYW4gZG8gdGhpcy4gSWYgc29tZWRheSBJIGhhdmUgdG8gdXBsb2FkIGZyb20gdGhl c2UgRFZEcyB0byBVbml4LCBWTVMsCisgICBvciBhbnkgb3RoZXIgb3BlcmF0aW5nIHN5c3RlbSwg aXQgY2FuIGJlIGRvbmUgZXhhY3RseSB0aGUgc2FtZSB3YXksCisgICB3aXRoIGFueSBuZWNlc3Nh cnkgY29udmVyc2lvbnMgb24gdGV4dCBmaWxlcyBkb25lIGF1dG9tYXRpY2FsbHksIGFuZAorICAg YmluYXJ5IGZpbGVzIGxlZnQgaW50YWN0LCByZWN1cnNpdmVseSB0aHJvdWdoIGEgd2hvbGUgdmVy eSBsYXJnZQorICAgZGlyZWN0b3J5IHRyZWUuCisKK1doYXQncyBOZXcgaW4gR2VuZXJhbAorCisg ICBWZXJ5IGJyaWVmbHksIHRoZSBtYWpvciBpdGVtczoKKyAgICAgKiBbMzldT3BlbiBTb3VyY2Ug bGljZW5zZS4KKyAgICAgKiBbNDBdNjQtYml0IGZpbGUgYWNjZXNzIGFuZCB0cmFuc2ZlciBhbmQg NjQtYml0IGludGVnZXIgYXJpdGhtZXRpYworICAgICAgIG9uIG1vc3QgY29tbW9uIHBsYXRmb3Jt cy4KKyAgICAgKiBTdXBwb3J0IGZvciByZWNlbnQgcmVsZWFzZXMgb2YgTGludXgsIE1hYyBPUyBY LCAqQlNELCBldGMgKFs0MV1zZWUKKyAgICAgICB0YWJsZSkuCisgICAgICogU3VwcG9ydCBmb3Ig bmV3ZXIgT3BlblNTTCByZWxlYXNlcyB1cCB0byBhbmQgaW5jbHVkaW5nIDEuMC4wZAorICAgICAg IChbNDJdc2VlIHRhYmxlKS4KKyAgICAgKiBbNDNdU3RyZW5ndGhlbmVkIGVycm9yIGNoZWNraW5n IGZvciBmaWxlIHRyYW5zZmVyIHVuZGVyIGV4dHJlbWVseQorICAgICAgIGhhcnNoIGNvbmRpdGlv bnMuCisgICAgICogWzQ0XVNpbXBsaWZpZWQgc2VtYW50aWNzIGZvciB2YXJpYWJsZXMgdXNlZCBp biBzY3JpcHRzLgorICAgICAqIFN1cGVyLWhhbmR5IFs0NV1leHRlbnNpb25zIHRvIHRoZSBSRU5B TUUgY29tbWFuZC4KKyAgICAgKiBPdGhlciBzY3JpcHRpbmcgaW1wcm92ZW1lbnRzIGluY2x1ZGlu ZyBzdXBwb3J0IGZvciByZWFkaW5nIGFuZAorICAgICAgIHdyaXRpbmcgWzQ2XUNTViBhbmQgVFNW IGZpbGVzLgorICAgICAqIFs0N11NSU1FIGNoYXJhY3Rlci1zZXQgbmFtZXMgYXJlIG5vdyByZWNv Z25pemVkLgorICAgICAqIEltcHJvdmVkIGxvZ2dpbmcgYW5kIGRlYnVnZ2luZyAoc2VlIGRlbW8g WzQ4XWhlcmUpLgorICAgICAqIExvdHMgbW9yZSBkZXNjcmliZWQgb3IgbGlzdGVkIGJlbG93LCBh bmQgWzQ5XWhlcmUuCisKK09wZW4gU291cmNlIExpY2Vuc2UKKworICAgQy1LZXJtaXQgOS4wIGhh cyB0aGUgWzUwXVJldmlzZWQgMy1DbGF1c2UgQlNEIExpY2Vuc2UsIGFuIG9wZW4gc291cmNlCisg ICBsaWNlbnNlIGFwcHJvdmVkIGJ5IE9TSSwgdGhlIFs1MV1PcGVuIFNvdXJjZSBJbml0aWF0aXZl LgorCitMYXJnZSBGaWxlcworCisgICBLZXJtaXQgaXMsIGZpcnN0IGFuZCBmb3JlbW9zdCwgYSBm aWxlLXRyYW5zZmVyIHByb2dyYW0uIE9uZSBtaWdodAorICAgZXhwZWN0IGl0IHRvIGJlIGFibGUg dG8gdHJhbnNmZXIgYW55IGtpbmQgb2YgZmlsZSwgYnV0IHRoYXQgaGFzIGJlZW4KKyAgIGRlY3Jl YXNpbmdseSB0aGUgY2FzZSBhcyBmaWxlIHNpemVzIGJlZ2FuIHRvIGNyb3NzIHRoZSAyIGdpZ2Fi eXRlCisgICB0aHJlc2hvbGQuCisKKyAgIFRoZSBiaWdnZXN0IGNoYW5nZSBzaW5jZSBDLUtlcm1p dCA4LjAuMjExIGlzIHN1cHBvcnQgZm9yIGxhcmdlIGZpbGVzIG9uCisgICBwbGF0Zm9ybXMgdGhh dCBzdXBwb3J0IHRoZW0uIEEgImxhcmdlIGZpbGUiIGlzIG9uZSB3aG9zZSBzaXplIGlzCisgICBn cmVhdGVyIHRoYW4gMl4zMS0xICgyLDE0Nyw0ODMsNjQ3KSBieXRlcyAoMkdCLTEpOyB0aGF0IGlz LCBvbmUgd2hvc2UKKyAgIHNpemUgcmVxdWlyZXMgbW9yZSB0aGFuIDMxIGJpdHMgdG8gcmVwcmVz ZW50LiBCZWZvcmUgbm93LCBLZXJtaXQgd2FzCisgICBhYmxlIHRvIGFjY2VzcyBzdWNoIGZpbGVz IG9ubHkgb24gMTAwJSA2NC1iaXQgcGxhdGZvcm1zIHN1Y2ggYXMgRGlnaXRhbAorICAgVW5peCwg bGF0ZXIga25vd24gYXMgVHJ1NjQgVW5peC4gSW4gdGhlIG5ldyByZWxlYXNlLCBLZXJtaXQgdGFr ZXMKKyAgIGFkdmFudGFnZSBvZiB0aGUgWC9PcGVuIFNpbmdsZSBVTklYIFNwZWNpZmljYXRpb24g VmVyc2lvbiAyIChVTklYIDk4KQorICAgTGFyZ2UgRmlsZSBTdXBwb3J0IChMRlMpIHNwZWNpZmlj YXRpb24sIHdoaWNoIGFsbG93cyAzMi1iaXQgcGxhdGZvcm1zCisgICB0byBjcmVhdGUsIGFjY2Vz cywgYW5kIG1hbmFnZSBmaWxlcyBsYXJnZXIgdGhhbiAyR0IuCisKKyAgIEFjY29tbW9kYXRpbmcg bGFyZ2UgZmlsZXMgcmVxdWlyZWQgY29kZSBjaGFuZ2VzIGluIG1hbnkgbW9kdWxlcywKKyAgIGFm ZmVjdGluZyBub3Qgb25seSBmaWxlIHRyYW5zZmVyLCBidXQgYWxzbyBmaWxlIG1hbmFnZW1lbnQg ZnVuY3Rpb25zCisgICBmcm9tIGRpcmVjdG9yeSBsaXN0aW5ncyB0byBsb2NhbCBmaWxlIG1hbmlw dWxhdGlvbiwgcGx1cyB0aGUgdXNlcgorICAgaW50ZXJmYWNlIGl0c2VsZiB0byBhbGxvdyBlbnRy eSBhbmQgZGlzcGxheSBvZiBsYXJnZSBudW1iZXJzLiBBbGwgdGhpcworICAgaGFkIHRvIGJlIGRv bmUgaW4gYSB3YXkgdGhhdCB3b3VsZCBub3QgYWZmZWN0IHB1cmUgMzItYml0IGJ1aWxkcyBvbgor ICAgcGxhdGZvcm1zIHRoYXQgZG8gbm90IHN1cHBvcnQgbGFyZ2UgZmlsZXMuIExhcmdlIGZpbGUg c3VwcG9ydCBpcworICAgc3VtbWFyaXplZCBpbiB0aGUgWzUyXVRhYmxlIG9mIFBsYXRmb3Jtczsg ZW50cmllcyBpbiBZZWxsb3cgKDMyLWJpdAorICAgYnVpbGRzIHRoYXQgc3VwcG9ydCA2NC1iaXQg aW50ZWdlcnMpIGFuZCBHcmVlbiAoNjQtYml0IGJ1aWxkcykgc3VwcG9ydAorICAgbGFyZ2UgZmls ZXMuCisKKyAgIE5vdGUgdGhhdCBWTVMgQy1LZXJtaXQgYW5kIEtlcm1pdCA5NSBmb3IgV2luZG93 cyBoYXZlIGFsd2F5cyBiZWVuIGFibGUKKyAgIHRvIHRyYW5zZmVyIGxhcmdlIGZpbGVzLiBIb3dl dmVyIHRoZWlyIHVzZXIgaW50ZXJmYWNlIHVzZWQgMzItYml0CisgICBpbnRlZ2VycyBmb3Igc3Rh dGlzdGljcyBhbmQgdGhlIGZpbGUgdHJhbnNmZXIgZGlzcGxheS4gSW4gQy1LZXJtaXQgOS4wCisg ICBBbHBoYS4wMywgVk1TIEMtS2VybWl0IG9uIDY0LWJpdCBwbGF0Zm9ybXMgKEFscGhhIGFuZCBJ dGFuaXVtKSBzaG91bGQKKyAgIG5vdyBnaXZlIGNvcnJlY3Qgc3RhdGlzdGljcyBhbmQgcHJvZ3Jl c3MgZGlzcGxheXMuIChXZSdsbCBzZWUgYWJvdXQKKyAgIEtlcm1pdCA5NSBsYXRlci4pCisKK0hv dyB0byBUZXN0IExhcmdlLUZpbGUgVHJhbnNmZXIKKworICAgU2V2ZXJhbCBtZXRob2RzIGFyZSBh dmFpbGFibGUgZm9yIHRlc3RpbmcgbGFyZ2UtZmlsZSB0cmFuc2ZlcnM6CisgICAgICogQnkgdHJh bnNmZXJyaW5nIGEgcmVhbCBmaWxlIHRoYXQgaXMgbW9yZSB0aGFuIDIxNDc0ODM2NDggYnl0ZXMg bG9uZworICAgICAgIChhIGZpbGUgd2hvc2UgbGVuZ3RoIHJlcXVpcmVzIG1vcmUgdGhhbiAzMSBi aXRzIHRvIGV4cHJlc3MpOyBvciB0bworICAgICAgIGJlIHRvdGFsbHkgc3VyZSwgdGhhdCBpcyBs b25nZXIgdGhhbiA0Mjk0OTY3Mjk2IGJ5dGVzICgzMiBiaXRzIG9yCisgICAgICAgbW9yZSkuIE9y IHRvIGJlIGRvdWJsZSBzdXBlciBzdXJlLCBsb25nZXIgdGhhbiA4NTg5OTM0NTkyICgzMworICAg ICAgIGJpdHMpLgorICAgICAqIElmIHlvdSBkb24ndCBoYXZlIHN1Y2ggYSBmaWxlIG9yIHRoZXJl IGlzIG5vdCBzdWZmaWNpZW50IGRpc2sgc3BhY2UKKyAgICAgICBmb3Igc3VjaCBhIGZpbGUsIHlv dSBjYW4gY3JlYXRlIGEgc3BlY2lhbCBraW5kIG9mIGZpbGUgdGhhdCB0YWtlcworICAgICAgIHVw IG9uZSBibG9jayBvbiB0aGUgZGlzayBidXQgYXBwZWFycyB0byBiZSA0LjNHQiBsb25nIGJ5IGNv bXBpbGluZworICAgICAgIGFuZCBydW5uaW5nIFs1M11USElTIEMgUFJPR1JBTSBvbiBMaW51eCwg U29sYXJpcywgSFAtVVgsIG9yIG90aGVyCisgICAgICAgVW5peCBwbGF0Zm9ybSB0aGF0IHN1cHBv cnRzIGxhcmdlIGZpbGVzLiBLZXJtaXQgb3IgRlRQIG9yIGFueSBvdGhlcgorICAgICAgIGZpbGUg dHJhbnNmZXIgcHJvZ3JhbSB3aWxsIHRyYW5zZmVyIHRoZSByZXN1bHQgKEJJR0ZJTEUpIGluIHN1 Y2ggYQorICAgICAgIHdheSBhcyB0byBhY3R1YWxseSBwdXQgNC4zR0IgKG9yIG90aGVyIGRlc2ly ZWQgc2l6ZTsgc2VlIHNvdXJjZSkgb24KKyAgICAgICB0aGUgd2lyZS4KKyAgICAgKiBZb3UgY2Fu IHVzZSBLZXJtaXQncyBDQUxJQlJBVEUgZmVhdHVyZSB0byB0cmFuc2ZlciBhIGxhcmdlIGZpbGUK KyAgICAgICB0aGF0IGRvZXNuJ3QgZXhpc3QuIEF0IHRoZSByZWNlaXZlciwgdXNlIFJFQ0VJVkUg L0NBTElCUkFURS4gQXQgdGhlCisgICAgICAgc2VuZGVyLCB1c2UgU0VORCAvQ0FMSUJSQVRFOmxl bmd0aCwgZS5nLjoKKworICAgICAoQXQgcmVtb3RlIGtlcm1pdC4uLikKKyAgICAgJCBrZXJtaXQg LVkKKyAgICAgQy1LZXJtaXQ+IHJlY2VpdmUgL2NhbGlicmF0ZQorICAgICAoUmV0dXJuIHRvIGxv Y2FsIGtlcm1pdC4uLikKKyAgICAgQ3RybC1cYworICAgICBDLUtlcm1pdD4gc2VuZCAvY2FsaWJy YXRlOjQzMDAwMDAwMDAKKyAgICAgICBUaGlzIHNlbmRzIGEgc2ltdWxhdGVkIGZpbGUgNC4zR0Ig aW4gbGVuZ3RoLCB0aGF0IGRvZXMgbm90IGV4aXN0IG9uCisgICAgICAgdGhlIHNlbmRlciBhbmQg d2lsbCBub3QgdGFrZSB1cCBhbnkgZGlzayBzcGFjZSBvbiB0aGUgcmVjZWl2ZXIuCisgICAgICAg U0VORCAvQ0FMSUJSQVRFOiBhY2NlcHRzIGJpZyBudW1iZXJzIG9ubHkgaW4gS2VybWl0IHZlcnNp b25zIHRoYXQKKyAgICAgICBzdXBwb3J0IHRoZW0gKHRoaXMgZG9lcyBub3QgaW5jbHVkZSBLZXJt aXQgOTUgb24gV2luZG93cykuIFRoaXMKKyAgICAgICBtZXRob2QgdGVzdHMgb25seSBLZXJtaXQn cyBhYmlsaXR5IHRvIGV4cHJlc3MgYW5kIHVuZGVyc3RhbmQgbGFyZ2UKKyAgICAgICBmaWxlIHNp emVzLCBidXQgZG9lcyBub3QgdGVzdCBLZXJtaXQncyBmaWxlLXN5c3RlbSBpbnRlcmZhY2UsIHNp bmNlCisgICAgICAgbm8gZmlsZXMgYXJlIGludm9sdmVkLgorCitBcml0aG1ldGljIHdpdGggTGFy Z2UgSW50ZWdlcnMKKworICAgQmVjYXVzZSBsYXJnZSBmaWxlIHN1cHBvcnQgcmVxdWlyZXMgdGhl IGF2YWlsYWJpbGl0eSBvZiBhIDY0LWJpdCBzaWduZWQKKyAgIGludGVnZXIgZGF0YSB0eXBlLCBv dGhlciBhc3BlY3RzIG9mIEMtS2VybWl0IHdlcmUgYWRhcHRlZCB0byB1c2UgaXQKKyAgIHRvbywg bW9zdCBub3RhYmx5IEtlcm1pdCdzIGFsZ2VicmFpYyBleHByZXNzaW9uIGV2YWx1YXRvciBhbmQg aXRzCisgICBbNTRdUy1FeHByZXNzaW9uIGludGVycHJldGVyLCBvbiBhbGwgcGxhdGZvcm1zIHRo YXQgc3VwcG9ydCBsYXJnZSBmaWxlcworICAgKHRob3NlIGxpc3RlZCBhcyA2NCBvciAzMi82NCBp biB0aGUgV29yZCBjb2x1bW4gb2YgdGhlIFs1NV10YWJsZSkuIEluCisgICBmYWN0LCBldmVyeSBL ZXJtaXQgY29tbWFuZCB0aGF0IHBhcnNlcyBhIG51bWJlciBpbiBhbnkgZmllbGQgY2FuIG5vdwor ICAgcGFyc2UgYSBsYXJnZSBudW1iZXIgb24gdGhvc2UgcGxhdGZvcm1zLgorCisgICBTLUV4cHJl c3Npb25zIGNhbiBub3cgYmUgZm9yY2VkIHRvIG9wZXJhdGUgd2l0aCBpbnRlZ2VycyBvbmx5LCB3 aXRob3V0CisgICBmbG9hdGluZy1wb2ludCBjb252ZXJzaW9uIG9yIGhhdmluZyB0byBleHBsaWNp dGx5IHRydW5jYXRlIGVhY2ggcmVzdWx0OworICAgYXMgYW4gZXhhbXBsZS4gc2VlIHRoZSByZXZp c2VkIFs1Nl1FYXN0ZXIgZGF0ZSBjYWxjdWxhdGlvbiBzY3JpcHQuCisKK0ZPUkNFLTMgUGFja2V0 IFByb3RvY29sCisKKyAgIFRoZSBLZXJtaXQgcHJvdG9jb2wgaGFzIHByb3ZlbiBpdHNlbGYgb3Zl ciB0aGUgcGFzdCAzMCB5ZWFycyB0byBiZQorICAgcm9idXN0IGluIHRlcm1zIG9mIHN1cnZpdmlu ZyBoYXJzaCB0cmFuc21pc3Npb24gZW52aXJvbm1lbnRzIGFuZAorICAgZGVsaXZlcmluZyB0aGUg ZGF0YSBjb3JyZWN0bHkgYW5kIGNvbXBsZXRlbHkuIEluIHRoZXNlIHRpbWVzIG9mCisgICBJbnRl cm5ldCBldmVyeXdoZXJlIGFuZCBlcnJvci1jb3JyZWN0aW5nIG1vZGVtcyBpbiB0aGUgZmV3IHBs YWNlcyB3aGVyZQorICAgdGhlIEludGVybmV0IGlzbid0LCBmZXcgcGVvcGxlIGV2ZW4gcmVjYWxs IHRoZSBraW5kcyBvZiBkaWZmaWN1bHQKKyAgIGNvbmRpdGlvbnMgdGhhdCB3ZXJlIGNvbW1vbiB3 aGVuIHRoZSBLZXJtaXQgcHJvdG9jb2wgd2FzIGZpcnN0CisgICBkZXZlbG9wZWQ6IG5vaXN5IHRl bGVwaG9uZSBsaW5lcywgc2VyaWFsIGludGVyZmFjZXMgdGhhdCBkcm9wCisgICBjaGFyYWN0ZXJz LCBsYWNrIG9mIHRyYW5zcGFyZW5jeSB0byBjb250cm9sIG9yIDgtYml0IGNoYXJhY3RlcnMsCisg ICBhYnNlbmNlIG9mIGZsb3cgY29udHJvbCwgImJhcmUiIG1vZGVtcyB3aXRob3V0IGVycm9yIGNv cnJlY3Rpb24uCisKKyAgIEJ1dCB0aGUgSW50ZXJuZXQgaXMgbm90IGV2ZXJ5d2hlcmUsIGFuZCBu b3QgYWxsIG1vZGVtcyBhcmUKKyAgIGVycm9yLWNvcnJlY3RpbmcuIFBlcmhhcHMgdGhlIG1vc3Qg ZGlmZmljdWx0IHRyaWFsIHNvIGZhciBmb3IgS2VybWl0IG9yCisgICBhbnkgb3RoZXIgcHJvdG9j b2wgaXMgdGhlIFs1N11FTS1BUEVYIHByb2plY3QsIGluIHdoaWNoIGZsb2F0cyBhcmUKKyAgIGRy b3BwZWQgaW50byB0aGUgb2NlYW4gZnJvbSBhbiBhaXJjcmFmdCBpbnRvIHRoZSBwYXRoIG9mIGEg aHVycmljYW5lOworICAgdGhlc2UgZmxvYXRzIGRpdmUgaW50byB0aGUgd2F0ZXIgbWVhc3VyaW5n IGN1cnJlbnQsIHRlbXBlcmF0dXJlLCBhbmQKKyAgIHNhbGluaXR5IGF0IGRpZmZlcmVudCBkZXB0 aHMgYW5kIHRoZW4gc3VyZmFjZSB0byBwaG9uZSBob21lLCBzZW5kaW5nCisgICB0aGUgZGF0YSB0 byBsYW5kIHN0YXRpb25zIHVzaW5nIEtlcm1pdCBwcm90b2NvbCBvdmVyCisgICBub24tZXJyb3It Y29ycmVjdGluZyAzMDBicHMgWzU4XUlyaWRpdW0gc2F0ZWxsaXRlIG1vZGVtcywgd2l0aCBoaWdo CisgICBzZWFzIGFuZCB3aW5kcyBiYXR0ZXJpbmcgdGhlIGZsb2F0cyBhbmQgaGVhdnkgKFs1OV1z b21ldGltZXMKKyAgIGVsZWN0cmljYWwpIHN0b3JtcyBiZXR3ZWVuIHRoZSBtb2RlbSBhbmQgdGhl IHNhdGVsbGl0ZS4KKworICAgQmVjYXVzZSBvZiB0aGUgdHJhbnNtaXNzaW9uIHNwZWVkIGFuZCBs b25nIGRpc3RhbmNlcyBpbnZvbHZlZCwgdGhlCisgICB0cmFuc2ZlcnMgd2VyZSB2ZXJ5IHNsb3cu IFRoZSBLZXJtaXQgc29mdHdhcmUgaW4gdGhlIGZsb2F0cyBpcworICAgWzYwXUVtYmVkZGVkIEtl cm1pdCwgd2hpY2ggZGlkIG5vdCBpbXBsZW1lbnQgc2xpZGluZyB3aW5kb3dzLCB3aGljaAorICAg d291bGQgaGF2ZSBzcGVkIHVwIHRoZSBmbG93IGNvbnNpZGVyYWJseS4gSm9obiBEdW5sYXAsIGVu Z2luZWVyIGF0IHRoZQorICAgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uJ3MgQXBwbGllZCBQaHlz aWNzIExhYm9yYXRvcnksIHVuZGVydG9vayB0aGUKKyAgIHRhc2sgb2YgYWRkaW5nIHNsaWRpbmcg d2luZG93cyB0byBFLUtlcm1pdC4gRm9yIHRlc3RpbmcsIGhlIHJpZ2dlZCB1cCBhCisgICBbNjFd c2ltdWxhdG9yIGluIHdoaWNoIEtlcm1pdCB0cmFuc2ZlcnMgdGFrZSBwbGFjZSBvdmVyIGEgY29u bmVjdGlvbgorICAgd2l0aCBkaWZmZXJlbnQgYW1vdW50cyBvZiBub2lzZSBhbmQgZGVsYXkuIEhl IGZvdW5kIHRoYXQgb2NjYXNpb25hbGx5LAorICAgYSB0cmFuc2ZlciB3b3VsZCBhcHBlYXIgdG8g c3VjY2VlZCwgYnV0IHRoZSByZWNlaXZlZCBmaWxlIHdvdWxkIGJlCisgICBjb3JydXB0LgorCisg ICBBY2NvcmRpbmcgdG8gdGhlIEtlcm1pdCBwcm90b2NvbCBkZWZpbml0aW9uLCB0aGUgZmlyc3Qg cGFja2V0IGFsd2F5cworICAgaGFzIGJsb2NrLWNoZWNrIHR5cGUgMSwgYSA2LWJpdCBjaGVja3N1 bSwgd2hpY2ggaXMgdGhlIG9ubHkgYmxvY2sgY2hlY2sKKyAgIHR5cGUgdGhhdCBhbGwgS2VybWl0 IGltcGxlbWVudGF0aW9ucyBhcmUgcmVxdWlyZWQgdG8gc3VwcG9ydDsgdGh1cyBhbnkKKyAgIEtl cm1pdCBwYXJ0bmVyIGNhbiBwcm9jZXNzIHRoaXMgcGFja2V0LiBUaGlzIHBhY2tldCBpdHNlbGYg Y2FuCisgICBuZWdvdGlhdGUgYSBoaWdoZXIgbGV2ZWwgb2YgY2hlY2tpbmcsIHN1Y2ggdGhhdCBz dWJzZXF1ZW50IHBhY2tldHMgaGF2ZQorICAgKHNheSkgYmxvY2stY2hlY2sgdHlwZSAzLCBhIDE2 LWJpdCBjeWNsaWMgcmVkdW5kYW5jeSBjaGVjayAoQ1JDKQorICAgZW5jb2RlZCBhcyB0aHJlZSBw cmludGFibGUgNy1iaXQgQVNDSUkgY2hhcmFjdGVycy4gVGhlIDE2LWJpdCBDUkMgY2FuCisgICBj YXRjaCBhbGwgZXJyb3JzIG9mIGNlcnRhaW4ga2luZHMgKHNpbmdsZS1iaXQsIGRvdWJsZS1iaXQs IGJ1cnN0cyBvZiAxNgorICAgYml0cyBvciBsZXNzKSwgYW5kIG1vcmUgdGhhbiA5OS45OTg0NzQx MjEwOTM3JSBvZiBhbGwgb3RoZXIgcG9zc2libGUKKyAgIGVycm9ycy4KKworICAgSm9obidzIHNp bXVsYXRpb25zIHJldmVhbGVkIHRoYXQgZmlsZSBjb3JydXB0aW9uIGNvdWxkIG9jY3VyIHVuZGV0 ZWN0ZWQKKyAgIHdoZW4gdGhlIGluaXRpYWwgcGFja2V0IHdhcyBjb3JydXB0ZWQgaW4gc3VjaCBh IHdheSB0aGF0IGEgcGFyYW1ldGVyIG9yCisgICBjYXBhYmlsaXR5IGJ5dGUgd2FzIGNoYW5nZWQg YW5kIHRoZSBjaGVja3N1bSBhbHNvIGNoYW5nZWQgdG8gbWFrZSB0aGUKKyAgIHBhY2tldCBhcHBl YXIgdG8gYmUgY29ycmVjdCwgdGh1cyBhbGxvd2luZyB0aGUgdHJhbnNmZXIgdG8gcHJvY2VlZCB3 aXRoCisgICB0aGUgdHdvIEtlcm1pdCBwYXJ0bmVycyBvdXQgb2Ygc3luYyBhcyB0byBwYWNrZXQg ZW5jb2RpbmcgYW5kCisgICBpbnRlcnByZXRhdGlvbiAodGhlIGNoYW5jZXMgb2YgdHdvIHN1Y2gg ZXJyb3JzIHByb2R1Y2luZyBhIHNlZW1pbmdseQorICAgdmFsaWQgcGFja2V0IGFyZSBhYm91dCAx IGluIDYwMDAgd2hlbiB1c2luZyB0aGUgNi1iaXQgY2hlY2tzdW0pLiBGb3IKKyAgIGV4YW1wbGUs IHRoZSBjb21wcmVzc2lvbiB0ZWNobmlxdWUgbWlnaHQgYmUgbWlzbmVnb3RpYXRlZCBhbmQgdGhl biB0aGUKKyAgIHJlY2VpdmVyIG1pZ2h0IHN0b3JlIGluY29taW5nIGRhdGEgd2l0aG91dCBkZWNv bXByZXNzaW5nIGl0LgorCisgICBUaGUgc29sdXRpb24gaXMgYSBuZXcgb3B0aW9uLCBzZWxlY3Rl ZCBieToKKworICAgICBCTE9DSy1DSEVDSyBUWVBFIDUKKworICAgdG8gcmVxdWlyZSBhIHR5cGUg MyBibG9jayBjaGVjayAoMTYtYml0IENSQykgb24gZXZlcnkgcGFja2V0LCBpbmNsdWRpbmcKKyAg IHRoZSBpbml0aWFsIG9uZXMsIHRodXMgcmVkdWNpbmcgdGhlIHByb2JhYmlsaXR5IG9mIGEgbWlz bmVnb3RpYXRpb24gYnkKKyAgIG1hbnkgb3JkZXJzIG9mIG1hZ25pdHVkZS4gVEhJUyBQQVJBTUVU RVIgQ0FOIE5PVCBCRSBORUdPVElBVEVELiBFYWNoCisgICBLZXJtaXQgcHJvZ3JhbSBtdXN0IGJl IGdpdmVuIHRoZSAic2V0IGJsb2NrIDUiIGNvbW1hbmQgcHJpb3IgdG8KKyAgIHRyYW5zZmVyLiBU aGF0J3MgYmVjYXVzZSBub3JtYWxseSBldmVyeSBLZXJtaXQgcHJvZ3JhbSBleHBlY3RzIHRoZQor ICAgZmlyc3QgcGFja2V0IHRvIGhhdmUgYSA2LWJpdCBjaGVja3N1bSwgYW5kIGlmIHRoZSBmaXJz dCBwYWNrZXQgaGFzIGEKKyAgIDMtYnl0ZSwgMTYtYml0IENSQywgdGhlIHBhY2tldCByZWNlaXZl ciB3aWxsIHRoaW5rIGl0IGlzIGNvcnJ1cHRlZC4KKworICAgSW4gcHJhY3RpY2UsIGhvd2V2ZXIs IGl0IGlzIHBvc3NpYmxlIHRvIGNvZGUgdGhlIHBhY2tldCByZWNlaXZlcgorICAgImNoZWF0IiBi eSByZWFkaW5nIHRoZSBwYWNrZXQgZGF0YSBiZWZvcmUgdmVyaWZ5aW5nIHRoZSBibG9jayBjaGVj ay4KKyAgIFRodXMgd2hlbiB0aGUgcmVjZWl2ZXIgaXMgQy1LZXJtaXQgOS4wIG9yIGxhdGVyIG9y IEUtS2VybWl0IDEuNyBvcgorICAgbGF0ZXIsIGl0IGlzIG9ubHkgbmVjZXNzYXJ5IHRvIGdpdmUg dGhlICJzZXQgYmxvY2sgNSIgY29tbWFuZCB0byB0aGUKKyAgIGZpbGUgc2VuZGVyLCBhbmQgdGhl IHJlY2VpdmVyIHdpbGwgY2hlY2sgZm9yIGEgRk9SQ0UtMyBmaXJzdCBwYWNrZXQuIElmCisgICB0 aGUgcmVjZWl2ZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUsIGhvd2V2ZXIsIHRoZSBp bml0aWFsIHBhY2tldAorICAgd2lsbCBiZSBiZSByZWplY3RlZCAoYWZ0ZXIgc2V2ZXJhbCByZXRy aWVzKSBhbmQgdGhlIGZpbGUgdHJhbnNmZXIgd2lsbAorICAgbm90IHRha2UgcGxhY2UuIFRoZXJl IGlzIG5vIGF0dGVtcHQgdG8gImJhY2sgb2ZmIiB0byBub3JtYWwgYmVoYXZpb3IuCisKKyAgIENB UFRJT046IFRhYmxlIDQuIEtlcm1pdCBQcm90b2NvbCBQYWNrZXQgQmxvY2sgQ2hlY2sgVHlwZXMK KworICAgVHlwZSBDb21tYW5kIEJ5dGVzIFN0YXR1cyBFeHBsYW5hdGlvbgorICAgMSBTRVQgQkxP Q0sgMSAxIFJlcXVpcmVkIGluIGFsbCBLZXJtaXQgaW1wbGVtZW50YXRpb25zLiBOZWdvdGlhdGVk LgorICAgNi1iaXQgY2hlY2tzdW0sIHN1aXRhYmxlIGZvciBnb29kIGNvbm5lY3Rpb25zLgorICAg MiBTRVQgQkxPQ0sgMiAyIE9wdGlvbmFsLCBuZWdvdGlhdGVkLiAxMi1iaXQgY2hlY2tzdW0uIDY0 IHRpbWVzCisgICBzdHJvbmdlciB0aGFuIHR5cGUgMS4KKyAgIDMgU0VUIEJMT0NLIDMgMyBPcHRp b25hbCwgbmVnb3RpYXRlZC4gMTYtYml0IENSQy4KKyAgIEJMQU5LLUZSRUUtMiBTRVQgQkxPQ0sg NCAyIE9wdGlvbmFsLCBuZWdvdGlhdGVkLiAxMi1iaXQgY2hlY2tzdW0sIHR3bworICAgbm9uYmxh bmsgYnl0ZXMuCisgICBGT1JDRS0zIFNFVCBCTE9DSyA1IDMgT3B0aW9uYWwsIG5vdCBuZWdvdGlh dGVkLiAxNi1iaXQgQ1JDIGZvcmNlZCBhbGwKKyAgIHBhY2tldHMuCisKKyAgIEJMQU5LLUZSRUUt MiBpcyBmb3IgZW52aXJvbm1lbnRzIHdoZXJlIEtlcm1pdCBwYWNrZXRzIGFyZSB0cmVhdGVkIGFz CisgICBsaW5lcyBvZiB0ZXh0LCBhbmQgaW4gd2hpY2ggdHJhaWxpbmcgYmxhbmtzIGNhbiBiZSBz dHJpcHBlZDsgZm9yCisgICBleGFtcGxlLCB3aGVuIHRyYW5zZmVycmluZyBmaWxlcyB3aXRoIGFu IElCTSBtYWluZnJhbWUgdGhyb3VnaCBhIDMyNzAKKyAgIHByb3RvY29sIGNvbnZlcnRlci4KKyAg IFs2Ml1FLUtlcm1pdCAxLjcKKworVmFyaWFibGUgRXZhbHVhdGlvbgorCisgICAgIERvZXMgdGhl IHN0cmFuZ2UgYmVoYXZpb3Igb2YgS2VybWl0J3MgXCV4IHZhcmlhYmxlcyBwdXp6bGUgb3IgYW5u b3kKKyAgICAgeW91PworCisgICBLZXJtaXQgc29mdHdhcmUgZGV2ZWxvcG1lbnQgaGFzIGJlZW4g YSBjb2xsYWJvcmF0aXZlIHByb2plY3Qgb3ZlciB0aGUKKyAgIHllYXJzLCB3aXRoIGNvbnRyaWJ1 dGlvbnMgY29taW5nIGluIGZyb20gYWxtb3N0IGV2ZXJ5IGNvdW50cnkgYW5kIGV2ZXJ5CisgICBz ZWN0b3Igb2YgdGhlIGVjb25vbXkgLSBhY2FkZW1pYywgY29ycG9yYXRlLCBnb3Zlcm5tZW50LiBU aHVzIG5vdCBhbGwKKyAgIHZlcnNpb25zLCBhbmQgbm90IGFsbCBmZWF0dXJlcyBvZiBhIGdpdmVu IHZlcnNpb24sIGFyZSBhIHByb2R1Y3Qgb2YKKyAgIHN5c3RlbWF0aWMgZGVzaWduLgorCisgICBP bmUgZXhhbXBsZSB3YXMgdGhlIGludHJvZHVjdGlvbiBvZiB2YXJpYWJsZXMgZm9yIHRleHQgc3Vi c3RpdHV0aW9uLAorICAgZmlyc3QgaW4gYSB2ZXJzaW9uIG9mIE1TLURPUyBLZXJtaXQgdGhhdCB3 YXMgc2VudCBpbiBieSBzb21lb25lCisgICBzb21ld2hlcmUgKEkgY291bGQgbG9vayBpdCB1cCwg YnV0IG5vIHRpbWUuLi4pIEFsdGhvdWdoIHRoZSBkZXNpZ24gb2YKKyAgIHRoZSBub3RhdGlvbiBm b3IgdmFyaWFibGUgbmFtZXMgKHRhYmxlIGJlbG93KSBpcyBtaW5lLCB0aGUgdW5kZXJseWluZwor ICAgY29kZSB3YXMgY29udHJpYnV0ZWQuIEluIHRoYXQgY29kZSB0aGVyZSB3YXMgb25seSBvbmUg a2luZCBvZiB2YXJpYWJsZSwKKyAgIGFuZCBpZiBJIHJlY2FsbCBjb3JyZWN0bHkgdGhlIHZhcmlh YmxlIG5hbWUgd2FzIGEgYmFja3NsYXNoIGZvbGxvd2VkIGJ5CisgICBhIHNpbmdsZSBsZXR0ZXIs IGZvciBleGFtcGxlIFxhLCBcYiwgZXRjLiBUaGUgY29udHJpYnV0ZWQgY29kZQorICAgZXZhbHVh dGVkIHRoZXNlIHZhcmlhYmxlcyByZWN1cnNpdmVseSwgbWVhbmluZyBpZiB0aGUgZGVmaW5pdGlv biBvZiBhCisgICB2YXJpYWJsZSBjb250YWluZWQgdmFyaWFibGUgcmVmZXJlbmNlcywgdGhlbiB0 aGVzZSB3ZXJlIHJlc29sdmVkIHdoZW4KKyAgIGRlcmVmZXJlbmNpbmcgdGhlIHZhcmlhYmxlLCBh bmQgdGhlIHByb2Nlc3Mgd291bGQgY29udGludWUgYXMgZGVlcCBkb3duCisgICBhcyBuZWNlc3Nh cnkgdG8gcmVzb2x2ZSB0aGUgdGhpbmcgZnVsbHkuCisKKyAgIFRoaXMgd2FzIHNvbWV0aW1lcyBo YW5keSwgYnV0IGl0IGhhZCBvbmUgc2V2ZXJlIGRyYXdiYWNrOiBUaGVyZSB3YXMgbm8KKyAgIHdh eSB0byB1c2UgdmFyaWFibGVzIGluIGEgc3RyYWlnaHRmb3J3YXJkIHdheSB0byByZXByZXNlbnQg c3RyaW5ncyB0aGF0CisgICBjb250YWluZWQgbGl0ZXJhbCBiYWNrc2xhc2hlczsgZm9yIGV4YW1w bGUsIERPUyBvciBXaW5kb3dzIHBhdGhuYW1lcy4KKyAgIFRoaXMgZ2F2ZSByaXNlIHRvIGFsbCBr aW5kcyBvZiBxdW90aW5nIHJ1bGVzIGFuZCBjb252ZW50aW9ucyAoZS5nLgorICAgZG91Ymxpbmcg YmFja3NsYXNoZXMgb3IgZm9yY2luZyBzaW5nbGUtbGV2ZWwgZXZhbHVhdGlvbiB3aXRoCisgICBc XGZjb250ZW50cygpKSwgYW5kIGFsc28gdG8gdGhlIGludHJvZHVjdGlvbiBvZiBvdGhlciBraW5k cyBvZgorICAgdmFyaWFibGVzIHRoYXQgd2VyZSBldmFsdWF0ZWQgb25lIGxldmVsIGRlZXAsIHJh dGhlciB0aGFuIHJlY3Vyc2l2ZWx5LgorCisgICBUbyBhY2NvbW1vZGF0ZSBjb2V4aXN0ZW5jZSBv ZiBkaWZmZXJlbnQga2luZHMgb2YgdmFyaWFibGVzIGFzIHdlbGwgYXMKKyAgICJlc2NhcGUgc2Vx dWVuY2VzIiBmb3IgcmVwcmVzZW50aW5nIGNvbnRyb2wgYW5kIDgtYml0IGNoYXJhY3RlcnMsIHRo ZQorICAgc3ludGF4IGZvciB2YXJpYWJsZSBuYW1lcyB3YXMgZXh0ZW5kZWQgdG8gaW5jbHVkZSB0 aHJlZSBlbGVtZW50czogdGhlCisgICBsZWFkaW5nIGJhY2tzbGFzaCwgdGhlbiBhIHNpbmdsZSBj aGFyYWN0ZXIgaW5kaWNhdGluZyB0aGUgdHlwZSBvZgorICAgdmFyaWFibGUsIGFuZCB0aGVuIHRo ZSBuYW1lIG9mIHRoZSB2YXJpYWJsZSBpbiBhIGZvcm1hdCBjb3JyZXNwb25kaW5nCisgICB0byB0 aGUgdHlwZSBkZXNpZ25hdG9yLCBhcyBzaG93biBpbiB0aGlzIHNvbWV3aGF0IHNpbXBsaWZpZWQg dGFibGU6CisKKyAgIENBUFRJT046IFRhYmxlIDEuIFZhcmlhYmxlLW5hbWUgU3ludGF4IGluIEtl cm1pdAorCisgICBOb3RhdGlvbiBNZWFuaW5nCisgICBcMDAwIC0gXDI1NSA4LWJpdCBjaGFyYWN0 ZXIgY29uc3RhbnQgKGRlY2ltYWwpCisgICBcZDAwMCAtIFxkMjU1IEFsdGVybmF0aXZlIG5vdGF0 aW9uIGZvciA4LWJpdCBjaGFyYWN0ZXIgKGJ5dGUpIGNvbnN0YW50CisgICAoZGVjaW1hbCkKKyAg IFxvMDAwIC0gXG8zNzcgOC1iaXQgY2hhcmFjdGVyIGNvbnN0YW50IChvY3RhbCkKKyAgIFx4MDAg LSBceGZmIDgtYml0IGNoYXJhY3RlciBjb25zdGFudCAoaGV4YWRlY2ltYWwpCisgICBcJWEgLSBc JXogU2NhbGFyIHZhcmlhYmxlLCBldmFsdWF0ZWQgcmVjdXJzaXZlbHkuCisgICBcJTAgLSBcJTkg TWFjcm8gYXJndW1lbnQsIHNjYWxhciwgZXZhbHVhdGVkIHJlY3Vyc2l2ZWx5LgorICAgXCZhIC0g XCUmIEFycmF5IG5hbWUKKyAgIFwmYVt4XSBBcnJheSByZWZlcmVuY2UsIGV2YWx1YXRlZCByZWN1 cnNpdmVseSAoeCBpcyBhbnkgY29uc3RhbnQgb3IKKyAgIHZhcmlhYmxlKQorICAgXHYobmFtZSkg QnVpbHQtaW4gc2NhbGFyIHZhcmlhYmxlLCBldmFsdWF0ZWQgb25lIGxldmVsIGRlZXAuCisgICBc bShuYW1lKSBVc2VyLWRlZmluZWQgc2NhbGFyIHZhcmlhYmxlLCBldmFsdWF0ZWQgb25lIGxldmVs IGRlZXAuCisgICBcJChuYW1lKSBBbiBlbnZpcm9ubWVudCB2YXJpYWJsZSwgZXZhbHVhdGVkIG9u ZSBsZXZlbCBkZWVwLgorICAgXHMobmFtZVtuOm1dKSBDb21wYWN0IHN1YnN0cmluZyBub3RhdGlv biwgZXZhbHVhdGVkIG9uZSBsZXZlbCBkZWVwLgorICAgXGZuYW1lKGFyZ3MuLi4pIEJ1aWx0LWlu IGZ1bmN0aW9uIHdpdGggemVybyBvciBtb3JlIGFyZ3VtZW50cy4KKyAgIFxcIExpdGVyYWwgYmFj a3NsYXNoCisgICBcTiBPVVRQVVQgY29tbWFuZCBvbmx5OiBOVUwsIEFTQ0lJIDAKKyAgIFxCIE9V VFBVVCBjb21tYW5kIG9ubHk6IEJSRUFLICgyNTBtcywgZm9yIHNlcmlhbCBjb25uZWN0aW9ucykK KyAgIFxMIE9VVFBVVCBjb21tYW5kIG9ubHk6IExvbmcgQlJFQUsgKDEuNXNlYywgZGl0dG8pCisK KyAgIFZhcmlhYmxlIG5hbWVzIGluIEtlcm1pdCBhcmUgY2FzZS1pbmRlcGVuZGVudC4gVGhlIHNp bXBsaWZpY2F0aW9ucyBpbgorICAgdGhlIHRhYmxlIGFyZSB0aGF0IHRoZSBub3RhdGlvbiBmb3Ig ZGVjaW1hbCBhbmQgb2N0YWwgYnl0ZXMgY2FuIGhhdmUKKyAgIGZyb20gb25lIHRvIHRocmVlIGRp Z2l0cywgYW5kIGNhbiBpbmNsdWRlIGJyYWNlcyB0byBzZXBhcmF0ZSB0aGVtIGZyb20KKyAgIHRl eHQgZGlnaXRzLCBlLmcuIFw3LCBcezEyM30sIFxvezUwfS4gSGV4IGJ5dGVzIHRvbywgZXhjZXB0 IHRoZXkgbXVzdAorICAgYWx3YXlzIGhhdmUgZXhhY3RseSB0d28gaGV4IGRpZ2l0cywgMC05YS1m LiBBcnJheSBpbmRpY2VzIG11c3QgYmUsIG9yCisgICBtdXN0IGV2YWx1YXRlIHRvLCBudW1iZXJz IChmbG9hdGluZyBwb2ludCBudW1iZXJzIGFyZSB0cnVuY2F0ZWQpLgorICAgQXNzb2NpYXRpdmUg YXJyYXlzIGFyZSBhbHNvIGF2YWlsYWJsZSAoZHluYW1pYyBhcnJheXMgd2l0aCBhcmJpdHJhcnkK KyAgIHRleHQgYXMgc3Vic2NyaXB0KSwgYnV0IHRoZXkgYXJlIHJlYWxseSBqdXN0IGEgdmFyaWF0 aW9uIG9uIFxtKCkKKyAgIHZhcmlhYmxlcyAocmVhZCBhYm91dCBhc3NvY2lhdGl2ZSBhcnJheXMg WzYzXWhlcmUpLiBBbHNvLCB0aGVyZSBhcmUKKyAgIHNvbWUgYWx0ZXJuYXRpdmUgbm90YXRpb25z IGZvciBjb21wYWN0IHN1YnN0cmluZyBub3RhdGlvbi4KKworICAgV2UgZGlkbid0IHdhbnQgdG8g aGF2ZSBsb3RzIG9mICJkaXN0aW5ndWlzaGVkIiBjaGFyYWN0ZXJzLCBhcyB0aGUgVU5JWAorICAg c2hlbGwgZG9lczsgb25lIGlzIGVub3VnaCwgY2xhcml0eSBvdmVyIGJyZXZpdHkuIEFsdGhvdWdo IHRoZSBub3RhdGlvbgorICAgY2FuIGJlIGEgYml0IGN1bWJlcnNvbWUsIHdlIGNhbiB1c2UgdGhl IFxtKG5hbWUpIGZvcm0gdG8gY2lyY3VtdmVudCB0aGUKKyAgIG92ZXJldmFsdWF0aW9uIGluIG1v c3QgY29udGV4dHMuIEJ1dCBtYWNybyBhcmd1bWVudHMgYXJlIGFsd2F5cworICAgYXNzaWduZWQg dG8gdGhlIFwlMC05IHZhcmlhYmxlcywgYW5kIHRodXMgYWx3YXlzIGV2YWx1YXRlZCByZWN1cnNp dmVseSwKKyAgIG1ha2luZyBpdCBkaWZmaWN1bHQgYW5kIGNvbmZ1c2luZyB0byBwYXNzIChlLmcu KSBXaW5kb3dzIHBhdGhuYW1lcyBhcworICAgYXJndW1lbnRzIHRvIG1hY3Jvcy4gVGhlIHNhbWUg aXMgdHJ1ZSBmb3IgYXJyYXkgZWxlbWVudHMsIGVzcGVjaWFsbHkgaW4KKyAgIGNvbnRleHRzIHdo ZXJlIHRoZXkgYXJlIHVzZWQgdG8gcmV0dXJuIHJlc3VsdHMgZnJvbSBidWlsdC1pbiBmdW5jdGlv bnMKKyAgIChmb3IgZXhhbXBsZSwgXGZzcGxpdCgpIHVzZWQgdG8gcmV0dXJuIHRoZSBlbGVtZW50 cyBvZiBhCisgICBbNjRdY29tbWEtc2VwYXJhdGVkIHZhbHVlIGxpc3QgaWYgYW55IG9mIHRoZSB2 YWx1ZXMgY29udGFpbmVkCisgICBiYWNrc2xhc2hlcykuIEFuIGV2ZW4gd29yc2Ugc2NlbmFyaW8g aXMgd2hlbiBtYWNybyBhcmd1bWVudHMgYXJlIHBhc3NlZAorICAgZnJvbSBvbmUgbWFjcm8gdG8g YW5vdGhlcjsgZm9yIHNvbWUgZ3JhcGhpYyBpbGx1c3RyYXRpb25zIHNlZQorICAgWzY1XVRhbWlu ZyB0aGUgV2lsZCBCYWNrc2xhc2ggLSBQYXJ0IERldXggZnJvbSB0aGUgWzY2XUMtS2VybWl0IDcu MAorICAgVXBkYXRlIE5vdGVzLgorCisgICBXZSBjYW4ndCBqdXN0IGNoYW5nZSBob3cgdmFyaWFi bGVzIGFyZSBldmFsdWF0ZWQgYmVjYXVzZSB0aGF0IHdvdWxkCisgICBicmVhayBleGlzdGluZyBz Y3JpcHRzLiBCdXQgd2UgY2FuIGFsd2F5cyBhZGQgWWV0IEFub3RoZXIgU0VUIENvbW1hbmQ6CisK KyAgICAgU0VUIENPTU1BTkQgVkFSSUFCTEUtRVZBTFVBVElPTiB7IFJFQ1VSU0lWRSwgU0lNUExF IH0KKworICAgVGhpcyBhcHBsaWVzIG9ubHkgdG8gXCVhLXogYW5kIFwlMC05IHZhcmlhYmxlcyBh bmQgdG8gXCZhLXpbXSBhcnJheXMKKyAgIChzaW5jZSBhbGwgb3RoZXIga2luZHMgb2YgdmFyaWFi bGVzIGFyZSBldmFsdWF0ZWQgb25seSBvbmUgbGV2ZWwgZGVlcCkuCisgICBUaGUgZGVmYXVsdCwg b2YgY291cnNlLCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIGlzIFJFQ1VSU0lWRS4KKyAg IFNJTVBMRSBmb3JjZXMgdGhlIGV2YWx1YXRpb24gb2YgdGhlc2UgdmFyaWFibGVzIHRvIHJldHVy biB0aGVpciBsaXRlcmFsCisgICBjb250ZW50cywgd2l0aG91dCBmdXJ0aGVyIGV2YWx1YXRpb246 CisKKyAgICAgKiBBbiBleGNlcHRpb24gaXMgbWFkZSBpbiB0aGUgY2FzZSBvZiBhcnJheSBzdWJz Y3JpcHRzLCBiZWNhdXNlCisgICAgICAgY2hhbmdpbmcgaG93IHRoZXkgYXJlIGV2YWx1YXRlZCBj b3VsZCBicmVhayBhIGxvdCBvZiBzY3JpcHRzLCBhbmQKKyAgICAgICBhbnl3YXkgdGhlcmUgc2hv dWxkIG5ldmVyIGJlIGFueSBoYXJtIGluIGV2YWx1YXRpbmcgdGhlbQorICAgICAgIHJlY3Vyc2l2 ZWx5IGJlY2F1c2UgdGhlaXIgZmluYWwgdmFsdWUgaXMgYWx3YXlzIChvciBzaG91bGQgYmUpCisg ICAgICAgbnVtZXJpYywgbm90IHNvbWUgc3RyaW5nIHRoYXQgbWlnaHQgY29udGFpbiBiYWNrc2xh c2hlcy4KKyAgICAgKiBUaGUgVkFSSUFCTEUtRVZBTFVBVElPTiBzZXR0aW5nIGlzIG9uIHRoZSBj b21tYW5kIHN0YWNrLiBUaHVzIHlvdQorICAgICAgIGNhbiBnaXZlIHRoaXMgY29tbWFuZCBpbiBh IG1hY3JvLCBjb21tYW5kIGZpbGUsIG9yIHVzZXItZGVmaW5lZAorICAgICAgIGZ1bmN0aW9uIHdp dGhvdXQgYWZmZWN0aW5nIHRoZSBjYWxsaW5nIGVudmlyb25tZW50LgorICAgICAqIFRoZSBuZXcg XGZyZWN1cnNlKCkgZnVuY3Rpb24gZm9yY2VzIHJlY3Vyc2l2ZSBldmFsdWF0aW9uIG9mIGl0cwor ICAgICAgIGFyZ3VtZW50IHJlZ2FyZGxlc3Mgb2YgdGhlIFZBUklBQkxFLUVWQUxVQVRJT04gc2V0 dGluZy4gVGhlCisgICAgICAgYXJndW1lbnQgY2FuIGJlIGFueSBzdHJpbmcgKG9yIG5vdGhpbmcg YXQgYWxsKTsgYWxsIHRoZSB2YXJpYWJsZXMKKyAgICAgICBpbiB0aGUgc3RyaW5nLCBldmVuIFxt KCkgb25lcywgYXJlIGV2YWx1YXRlZCByZWN1cnNpdmVseToKKworZGVmIFwlYSAxIFwlYiAzCitk ZWYgXCViIDIKK2RlZiB4eCBlYXN5IGFzIFwlYQorc2hvdyBtYWMgeHgKK2VjaG8gXGZyZWN1cnNl KFxtKHh4KSkKK2Vhc3kgYXMgMSAyIDMKK2VjaG8gXGZyZWN1cnNlKGl0J3MgYXMgZWFzeSBhcyBc bSh4eCkpCitpdCdzIGFzIGVhc3kgYXMgZWFzeSBhcyAxIDIgMworCisgICAgICogVGhlIG5ldyBc dih2YXJldmFsKSBidWlsdC1pbiB2YXJpYWJsZSBjb250YWlucyB0aGUgY3VycmVudCBzZXR0aW5n CisgICAgICAgKHJlY3Vyc2l2ZSBvciBzaW1wbGUpIGF0IHRoZSBjdXJyZW50IGNvbW1hbmQtc3Rh Y2sgbGV2ZWwuCisKKyAgIEhlcmUncyBhIHNob3J0IHNjcmlwdCBmb3IgaWxsdXN0cmF0aW9uOgor CitkZWZpbmUgcGF0aCBjOlx1c2Vyc1xmZGNcc29tZWZpbGUudHh0CitkZWZpbmUgdGVzdDEgeyAg ICAgICAgIyBOb3JtYWwgcmVjdXJzaXZlIGFyZ3VtZW50IGV2YWx1YXRpb24KKyAgZWNobyBcJTA6 IGFyZz1cJTEKK30KK2RlZmluZSB0ZXN0MiB7ICAgICAgICAjIFNpbXBsZSBhcmd1bWVudCBldmFs dWF0aW9uCisgIHNldCB2YXIgc2ltcGxlCisgIGVjaG8gXCUwOiBhcmc9XCUxCit9Cit0ZXN0MSBc bShwYXRoKQordGVzdDIgXG0ocGF0aCkKK2V4aXQKKworICAgQW5kIGhlcmUncyB0aGUgcmVzdWx0 OgorCis/PEVSUk9SOk5PX1NVQ0hfRlVOQ1RJT046XGZkY1xzb21lZmlsZS50eHQoKT4KK3Rlc3Qy OiBhcmc9YzpcdXNlcnNcZmRjXHNvbWVmaWxlLnR4dAorCisgICBUaGUgZmlyc3QgbGluZSBtaWdo dCBzZWVtIHN1cnByaXNpbmcsIGJ1dCB1bmRlciB0aGUgbm9ybWFsIHJ1bGVzIChzZWUKKyAgIHRh YmxlIGFib3ZlKSBcZiBpbmRpY2F0ZXMgYSBmdW5jdGlvbiBjYWxsLCB3aXRoIHRoZSBsZXR0ZXJz IGZvbGxvd2luZworICAgdGhlICdmJyBiZWluZyB0aGUgbmFtZSBvZiB0aGUgZnVuY3Rpb24uIEJ1 dCB0aGVyZSBpcyBubyBmdW5jdGlvbiBieQorICAgdGhhdCBuYW1lLi4uIGFuZCBpZiB0aGVyZSB3 ZXJlLCB5b3UgcHJvYmFibHkgZGlkbid0IGludGVuZCB0byBjYWxsIGl0IQorCisgICBTRVQgQ09N TUFORCBWQVJJQUJMRS1FVkFMVUFUSU9OIFNJTVBMRSBoYXMgbm8gZWZmZWN0IG9uIGNvbnN0YW50 cywgb25seQorICAgb24gdmFyaWFibGVzLiBOb3RlIGhvdyBcbShwYXRoKSBpcyBkZWZpbmVkLiBU aGUgREVGSU5FIGNvbW1hbmQgYXNzaWducworICAgdGhlIGxpdGVyYWwgdmFsdWUgb2YgaXRzIGFy Z3VtZW50IHRvIHRoZSBuYW1lZCB2YXJpYWJsZSAoc2VlIFRhYmxlIDMKKyAgIGJlbG93KSwgdGh1 cyBpbiB0aGlzIGNhc2Ugbm8gc3BlY2lhbCBzeW50YXggaXMgbmVlZGVkLiBCdXQgaW4gb3RoZXIK KyAgIGNvbnRleHRzLCB5b3UgbXVzdCBkb3VibGUgdGhlIGJhY2tzbGFzaGVzIG9yIHVzZSB0aGUg XGZsaXRlcmFsKCkKKyAgIGZ1bmN0aW9uIHRvIHVzZSBsaXRlcmFsIGJhY2tzbGFzaGVzIGluIGRh dGE6CisKK3Rlc3QyIGM6XFx1c2Vyc1xcZmRjXFxzb21lZmlsZS50eHQKK3Rlc3QyIFxmbGl0ZXJh bChjOlx1c2Vyc1xmZGNcc29tZWZpbGUudHh0KQorCisgICBDLUtlcm1pdCA5LjAgYWRkcyBhIG5l dyBub3RhdGlvbiBmb3IgXGZsaXRlcmFsKCkgd2hpY2ggYWxzbyBoYXMgY2VydGFpbgorICAgYWR2 YW50YWdlcyBvdmVyIGl0OiBccShzdHJpbmcpOgorCit0ZXN0MiBccShjOlx1c2Vyc1xmZGNcc29t ZWZpbGUudHh0KQorCisgICBTaW5jZSBcZmxpdGVyYWwoKSBpcyBhIGZ1bmN0aW9uLCBpdHMgYXJn dW1lbnQgbGlzdCAodGhlIHRleHQgd2l0aGluCisgICBwYXJlbnRoZXNlcykgaGFzIHNwZWNpYWwg c3ludGF4IG9mIGl0cyBvd24sIGluIHdoaWNoIGNvbW1hcyBhbmQgYnJhY2VzCisgICBhcmUgdHJl YXRlZCBzcGVjaWFsbHkgYW5kIGludHJvZHVjZSBhbm90aGVyIHNldCBvZiBxdW90aW5nIHByb2Js ZW1zLgorICAgXHEoc3RyaW5nKSBkb2Vzbid0IGhhdmUgdGhlc2UgcHJvYmxlbXMuIFRoZSBvbmx5 IGNvbnNpZGVyYXRpb24gaXMgdGhhdAorICAgcGFyZW50aGVzZXMgbXVzdCBiZSBiYWxhbmNlZCBv ciBlbHNlIHF1b3RlZCAocHJlY2VkZWQgYnkgYmFja3NsYXNoKSwgb3IKKyAgIHJlcHJlc2VudGVk IGFzIG51bWVyaWMgY2hhcmFjdGVyIGVudGl0aWVzIChsZWZ0IHBhcmVuID0gXDQwLCAocmlnaHQK KyAgIHBhcmVuID0gXDQxKS4KKworICAgT3IgZWxzZSBob2xkIHRoZSB2YWx1ZSBpbiBhIHNpbXBs ZSB2YXJpYWJsZSBhcyB3ZSBkaWQgd2l0aCBcXG0ocGF0aCkKKyAgIGFib3ZlLgorCisgICBTRVQg Q09NTUFORCBWQVJJQUJMRS1FVkFMVUFUSU9OIFNJTVBMRSBpcyBhIGJpZyBjaGFuZ2UgYW5kIG1p Z2h0IGhhdmUKKyAgIHJlcGVyY3Vzc2lvbnMgdGhhdCBkaWRuJ3Qgc2hvdyB1cCBpbiB0aGUgaW5p dGlhbCB0ZXN0czsgYSBsb3QgbW9yZQorICAgdGVzdGluZyBpcyBuZWVkZWQuCisKKyAgIE9uIHRo ZSB0b3BpYyBvZiB2YXJpYWJsZXMsIGxldCdzIHN1bW1hcml6ZSBpbiBvbmUgcGxhY2UgdGhlIHdh eXMgaW4KKyAgIHdoaWNoIHZhbHVlcyBjYW4gYmUgZXhwbGljaXRseSBhc3NpZ25lZCB0byB2YXJp YWJsZXMuIFRoZXJlIGlzIG5vdGhpbmcKKyAgIG5ldyBoZXJlIGV4Y2VwdCB0aGUgdGFibGUgaXRz ZWxmOgorCisgICBDQVBUSU9OOiBUYWJsZSAyLiBWYXJpYWJsZSBBc3NpZ25tZW50IGluIEtlcm1p dAorCisgICBDb21tYW5kIFNob3J0aGFuZCBFeHBsYW5hdGlvbgorICAgREVGSU5FIG5hbWUgdmFs dWUgLm5hbWUgPSB2YWx1ZSBUaGUgbGl0ZXJhbCB2YWx1ZSBiZWNvbWVzIHRoZSBjb250ZW50cwor ICAgb2YgdGhlIG5hbWVkIHZhcmlhYmxlOyB2YXJpYWJsZXMgbmFtZXMgaW4gdGhlIHZhbHVlIGFy ZSBjb3BpZWQgd2l0aG91dAorICAgZXZhbHVhdGlvbi4gVGhpcyBjb21tYW5kIGlzIGZvciBkZWZp bmluZyBtYWNyb3MgdGhhdCB0YWtlIHBhcmFtZXRlcnMsCisgICBhcyB3ZWxsIGFzIGZvciBkZWZp bmluZyBzaW1wbGUgdmFyaWFibGVzLCBlc3BlY2lhbGx5IGlmIHRoZSB2YWx1ZXMKKyAgIGNvbnRh aW4gYmFja3NsYXNoZXMuCisgICBfREVGSU5FIG5hbWUgdmFsdWUgICBMaWtlIERFRklORSBidXQg dGhlIG5hbWUgaXMgZXZhbHVhdGVkIGJlZm9yZSB1c2UuCisgICBBU1NJR04gbmFtZSB2YWx1ZSAu bmFtZSA6PSB2YWx1ZSBUaGUgdmFsdWUgaXMgZXZhbHVhdGVkIGFuZCB0aGUgcmVzdWx0CisgICBi ZWNvbWVzIHRoZSBjb250ZW50cyBvZiB0aGUgbmFtZWQgdmFyaWFibGUuCisgICBfQVNTSUdOIG5h bWUgdmFsdWUgICBMaWtlIEFTU0lHTiBidXQgdGhlIG5hbWUgaXMgZXZhbHVhdGVkIGJlZm9yZSB1 c2UuCisgICBFVkFMVUFURSBuYW1lIGV4cHJlc3Npb24gLm5hbWUgOjo9IHZhbHVlIFRoZSBleHBy ZXNzaW9uIChpbiByZWd1bGFyCisgICBhbGdlYnJhaWMgbm90YXRpb24pIGlzIGV2YWx1YXRlZCBh cml0aG1ldGljYWxseSBhbmQgdGhlIHJlc3VsdCBiZWNvbWVzCisgICB0aGUgY29udGVudHMgb2Yg dGhlIG5hbWVkIHZhcmlhYmxlLiBJZiB0aGUgZXhwcmVzc2lvbiBjb250YWlucyBhbnkKKyAgIHZh cmlhYmxlcyB0aGV5IGFyZSBldmFsdWF0ZWQgZmlyc3QuCisgICBfRVZBTFVBVEUgbmFtZSBleHBy ZXNzaW9uICAgTGlrZSBFVkFMVUFURSBidXQgdGhlIG5hbWUgaXMgZXZhbHVhdGVkCisgICBiZWZv cmUgdXNlLgorICAgSU5DUkVNRU5UIG5hbWUgZXhwcmVzc2lvbiAgIEV2YWx1YXRlcyB0aGUgdmFy aWFibGVzIGluIHRoZSBleHByZXNzaW9uLAorICAgdGhlbiBldmFsdWF0ZXMgdGhlIGV4cHJlc3Np b24gYXJpdGhtZXRpY2FsbHksIGFuZCB0aGVuIGFkZHMgdGhlIHZhbHVlCisgICB0byB0aGUgY29u dGVudHMgb2YgdGhlIG5hbWVkIHZhcmlhYmxlLCB3aGljaCBtdXN0IGJlIGEgbnVtYmVyIG9yIGFu CisgICBhbGdlYnJhaWMgZXhwcmVzc2lvbi4gSWYgdGhlIGV4cHJlc3Npb24gaXMgZW1wdHksIGEg dmFsdWUgb2YgMSBpcyB1c2VkLgorICAgX0lOQ1JFTUVOVCBuYW1lIGV4cHJlc3Npb24gICBMaWtl IElOQ1JFTUVOVCBidXQgdGhlIG5hbWUgaXMgZXZhbHVhdGVkCisgICBiZWZvcmUgdXNlLgorICAg REVDUkVNRU5UIG5hbWUgZXhwcmVzc2lvbiAgIEV2YWx1YXRlcyB0aGUgdmFyaWFibGVzIGluIHRo ZSBleHByZXNzaW9uLAorICAgdGhlbiBldmFsdWF0ZXMgdGhlIGV4cHJlc3Npb24gYXJpdGhtZXRp Y2FsbHksIGFuZCB0aGVuIHN1YnRyYWN0cyB0aGUKKyAgIHZhbHVlIGZyb20gdGhlIGNvbnRlbnRz IG9mIHRoZSBuYW1lZCB2YXJpYWJsZSwgd2hpY2ggbXVzdCBiZSBhIG51bWJlcgorICAgb3IgYW4g YWxnZWJyYWljIGV4cHJlc3Npb24uIElmIHRoZSBleHByZXNzaW9uIGlzIGVtcHR5LCBhIHZhbHVl IG9mIDEgaXMKKyAgIHVzZWQuCisgICBfREVDUkVNRU5UIG5hbWUgZXhwcmVzc2lvbiAgIExpa2Ug REVDUkVNRU5UIGJ1dCB0aGUgbmFtZSBpcyBldmFsdWF0ZWQKKyAgIGJlZm9yZSB1c2UuCisgICBE RUNMQVJFIG5hbWUgPSBsaXN0ICAgQW4gYXJyYXkgZGVjbGFyYXRpb24gY2FuIGluY2x1ZGUgYW4g aW5pdGlhbGl6ZXIKKyAgIGxpc3Q7IGl0ZW1zIGluIHRoZSBsaXN0IGFyZSBldmFsdWF0ZWQgYmVm b3JlIGFzc2lnbm1lbnQuIFRoaXMgY2FuIGJlCisgICBkZWZlYXRlZCBieSBkb3VibGluZyBhbnkg YmFja3NsYXNoZXMgb3IgZW5jbG9zaW5nIGluZGl2aWR1YWwgYXJndW1lbnRzCisgICBpbiBcZmxp dGVyYWwoKS4KKyAgIERPIG5hbWUgYXJndW1lbnRzIG5hbWUgYXJndW1lbnRzIFdoZW4gaW52b2tp bmcgYSBtYWNybyB3aXRoIGEgRE8KKyAgIGNvbW1hbmQgKG9yIGFuIGltcGxpZWQgb25lKSwgdGhl IGFyZ3VtZW50cyBhcmUgZXZhbHVhdGVkLCB0aGVuIGFzc2lnbmVkCisgICB0byBcJTEsIFwlMiwg ZXRjLCBhbmQgdGhlIG1hY3JvJ3MgbmFtZSB0byBcJTAuCisgICAoU0VUUSBuYW1lIHZhbHVlKSAg IEtlcm1pdCBhbHNvIGluY2x1ZGVzIGEgbWluaS1bNjddTElTUCBpbnRlcnByZXRlcgorCisgICBW YXJpYWJsZXMgYXJlIGV2YWx1YXRlZCBhdXRvbWF0aWNhbGx5IGluIEtlcm1pdCBjb21tYW5kcyBz aW1wbHkgYnkKKyAgIHJlZmVyZW5jaW5nIHRoZW0sIGFjY29yZGluZyB0byBydWxlcyBnaXZlbiBp biBUYWJsZSAxLiBUaGUgZm9sbG93aW5nCisgICBmdW5jdGlvbnMgY2FuIGJlIHVzZWQgdG8gY2hh bmdlIGhvdyBhIGEgcGFydGljdWxhciB2YXJpYWJsZSBpcworICAgZXZhbHVhdGVkOgorCisgICBD QVBUSU9OOiBUYWJsZSAzLiBLZXJtaXQgRnVuY3Rpb25zIGZvciBFdmFsdWF0aW5nIFZhcmlhYmxl cworCisgICBGdW5jdGlvbiBBcmd1bWVudCBEZXNjcmlwdGlvbgorICAgXGZjb250ZW50cygpIFwl eCBvciBcJnhbeV0gRXZhbHVhdGVzIHRoZSB2YXJpYWJsZSBvciBhcnJheSBlbGVtZW50CisgICAo d2hpY2ggbm9ybWFsbHkgd291bGQgYmUgZXZhbHVhdGVkIHJlY3Vyc2l2ZWx5KSBvbmUgbGV2ZWwg ZGVlcC4KKyAgIFxmZGVmaW5pdGlvbigpIG5hbWUgSWYgdGhlIGFyZ3VtZW50IGlzIGEgXCV4IHZh cmlhYmxlIG9yIGFuIGFycmF5CisgICBlbGVtZW50LCBpdCBpcyBldmFsdWF0ZWQgdG8gZ2V0IHRo ZSBuYW1lOyBvdGhlcndpc2UgdGhlIGFyZ3VtZW50IGlzIHRoZQorICAgbmFtZS4gSXRzIGRlZmlu aXRpb24gaXMgcmV0dXJuZWQgd2l0aCBubyByZWN1cnNpb24uCisgICBcbSgpIG5hbWUgRXF1aXZh bGVudCB0byBcZmRlZmluaXRpb24oKS4KKyAgIFxmcmVjdXJzZSgpIFxtKG5hbWUpIEZvcmNlcyBy ZWN1cnNpdmUgZXZhbHVhdGlvbiBvZiBhIG1hY3JvIGRlZmluaXRpb24KKyAgIChhLmsuYS4gbG9u ZyB2YXJpYWJsZSBuYW1lKS4gTk9URTogXGZyZWN1cnNlKCkgY2FuIG9wZXJhdGUgb24gYW55IGtp bmQKKyAgIG9mIHZhcmlhYmxlIGFzIHdlbGwgYXMgb24gYW55IHN0cmluZyBjb250YWluaW5nIGFu eSBtaXh0dXJlIG9mCisgICB2YXJpYWJsZXMuCisKK0MtS2VybWl0J3MgUkVOQU1FIENvbW1hbmQK KworICAgQy1LZXJtaXQncyBSRU5BTUUgY29tbWFuZCwgd2hpY2ggaXMgdXNlZCBmb3IgY2hhbmdp bmcgdGhlIG5hbWVzIG9mCisgICBsb2NhbCBmaWxlcyBvciBmb3IgbW92aW5nIGZpbGVzIGxvY2Fs bHksIGhhcyB0d28gYmFzaWMgZm9ybXM6CisKKyAgIFJFTkFNRSBbIG9wdGlvbmFsLXN3aXRjaGVz IF0gb2xkZmlsZW5hbWUgbmV3ZmlsZW5hbWUKKyAgICAgICAgICBUaGlzIGZvcm0gbGV0cyB5b3Ug Y2hhbmdlIHRoZSBuYW1lIG9mIGEgc2luZ2xlIGZpbGUgZnJvbQorICAgICAgICAgIG9sZGZpbGVu YW1lIHRvIG5ld2ZpbGVuYW1lLiBFeGFtcGxlOgorICAgICAgICAgIHJlbmFtZSB0aGlzbW9udGgu bG9nIGxhc3Rtb250aC5sb2cKKworICAgUkVOQU1FIFsgb3B0aW9uYWwtc3dpdGNoZXMgXSBmaWxl c3BlYyBkaXJlY3RvcnluYW1lCisgICAgICAgICAgVGhpcyBmb3JtIGxldHMgeW91IG1vdmUgKHdp dGhvdXQgcmVuYW1pbmcpIG9uZSBvciBtb3JlIGZpbGVzCisgICAgICAgICAgKGFsbCB0aGUgZmls ZXMgdGhhdCBtYXRjaCB0aGUgZmlsZXNwZWMsIHdoaWNoIG1heSBjb250YWluCisgICAgICAgICAg d2lsZGNhcmQgY2hhcmFjdGVycyBzdWNoIGFzICIqIikgdG8gdGhlIGdpdmVuIGRpcmVjdG9yeS4K KyAgICAgICAgICBFeGFtcGxlOgorICAgICAgICAgIHJlbmFtZSAqLnR4dCB+L3RleHRmaWxlcy8K KworICAgVHJhZGl0aW9uYWxseSwgdGhlIG9wdGlvbmFsIHN3aXRjaGVzIGhhdmUgYmVlbjoKKwor ICAgUkVOQU1FIC9MSVNUIG9sZG5hbWUgbmV3bmFtZQorICAgICAgICAgIERpc3BsYXkgdGhlIG9s ZCBhbmQgbmV3IG5hbWUgZm9yIGVhY2ggZmlsZSB3aGlsZSByZW5hbWluZy4KKyAgICAgICAgICBT eW5vbnltczogL0xPRywgL1ZFUkJPU0UuIEV4YW1wbGU6CisgICAgICAgICAgcmVuYW1lIC9saXN0 ICoudHh0IH4vdGV4dGZpbGVzLworCisgICBSRU5BTUUgL05PTElTVCBvbGRuYW1lIG5ld25hbWUK KyAgICAgICAgICBEb24ndCBkaXNwbGF5IHRoZSBvbGQgYW5kIG5ldyBuYW1lIGZvciBlYWNoIGZp bGUgd2hpbGUgcmVuYW1pbmcuCisgICAgICAgICAgVGhpcyBpcyB0aGUgZGVmYXVsdCBiZWhhdmlv ci4gU3lub255bXM6IC9OT0xPRywgL1FVSUVULiBFeGFtcGxlOgorICAgICAgICAgIHJlbmFtZSAv bm9saXN0ICoudHh0IH4vdGV4dGZpbGVzLworCisgICBSZW1pbmRlcjogRXZlcnkgc3dpdGNoIHN0 YXJ0cyB3aXRoIGEgc2xhc2ggKC8pIGFuZCBtdXN0IGJlIHByZWNlZGVkIGJ5CisgICBhIHNwYWNl LgorCitOZXcgUkVOQU1FIEZlYXR1cmVzIGZvciBDLUtlcm1pdCA5LjAKKworICAgQSBzZXJpZXMg b2YgbmV3IG9wdGlvbnMgKHN3aXRjaGVzKSBoYXZlIGJlZW4gYWRkZWQgdG8gbGV0IHlvdSBjaGFu Z2UKKyAgIHRoZSBuYW1lcyBvZiBtdWx0aXBsZSBmaWxlcyBhdCBvbmNlIGJ5IGNhc2UgY29udmVy c2lvbiwgc3RyaW5nCisgICBzdWJzdGl0dXRpb24sIG9yIGNoYXJhY3Rlci1zZXQgY29udmVyc2lv biwgYW5kIG9wdGlvbmFsbHkgYWxzbyBtb3ZlCisgICB0aGVtIHRvIGEgZGlmZmVyZW50IGRpcmVj dG9yeToKKworICAgICAvTE9XRVI6ICAgICAgQ29udmVydCB0aGUgZmlsZW5hbWUgdG8gbG93ZXJj YXNlCisgICAgIC9VUFBFUjogICAgICBDb252ZXJ0IHRoZSBmaWxlbmFtZSB0byB1cHBlcmNhc2UK KyAgICAgL0NPTlZFUlQ6ICAgIENoYW5nZSB0aGUgZmlsZW5hbWUncyBjaGFyYWN0ZXIgZW5jb2Rp bmcKKyAgICAgL1JFUExBQ0U6ICAgIERvIHN0cmluZyBzdWJzdGl0dXRpb25zIG9uIHRoZSBmaWxl bmFtZQorCisgICBJZiB0aGUgc291cmNlLWZpbGUgc3BlY2lmaWNhdGlvbiBpbmNsdWRlcyBhIHBh dGggb3IgZGlyZWN0b3J5LCBhbnkKKyAgIGNoYW5nZXMgYXJlIGFwcGxpZWQgdG8gdGhlIGZpbGVu YW1lcyBvbmx5LCBub3QgdG8gdGhlIGRpcmVjdG9yeSBvciBwYXRoCisgICBzcGVjaWZpY2F0aW9u LgorCisgICBTaW5jZSBuYW1lIGNoYW5nZXMsIHdoZW4gYXBwbGllZCB0byBtYW55IGZpbGVzIGF0 IG9uY2UsIGNhbiBoYXZlCisgICBjb25zZXF1ZW5jZXMgdGhhdCBhcmUgbm90IGVhc2lseSB1bmRv bmUsIHRoZXJlIGFyZSBhbHNvIHNvbWUgbmV3CisgICBjb250cm9scywgc2FmZWd1YXJkcywgYW5k IGNvbnZlbmllbmNlczoKKworICAgUkVOQU1FIC9TSU1VTEFURQorICAgICAgICAgIFRoaXMgc3dp dGNoIHRlbGxzIEtlcm1pdCB0byBzaG93IHlvdSB3aGF0IHRoZSBSRU5BTUUgY29tbWFuZAorICAg ICAgICAgIHdvdWxkIGRvIHdpdGhvdXQgYWN0dWFsbHkgZG9pbmcgaXQuIC9TSU1VTEFURSBpbXBs aWVzIC9MSVNULgorCisgICBSRU5BTUUgL0NPTExJU0lPTjp7RkFJTCxTS0lQLE9WRVJXUklURX0K KyAgICAgICAgICBUaGlzIHN3aXRjaCBnb3Zlcm5zIEtlcm1pdCdzIGJlaGF2aW9yIHdoZW4gcmVu YW1pbmcgbXVsdGlwbGUKKyAgICAgICAgICBmaWxlcywgYW5kIGFueSBvZiB0aGUgbmFtZXMgd291 bGQgY29sbGlkZSB3aXRoIHRoZSBuYW1lIG9mIGEKKyAgICAgICAgICBmaWxlIHRoYXQgYWxyZWFk eSBleGlzdHMuIFRoZSBkZWZhdWx0LCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoCisgICAgICAgICAg ZWFybGllciByZWxlYXNlcyBvZiBDLUtlcm1pdCwgaXMgT1ZFUldSSVRFLCBpLmUuIHdyaXRlIG92 ZXIgdGhlCisgICAgICAgICAgZXhpc3RpbmcgZmlsZS4gVGhlIG90aGVyIHR3byBwcm90ZWN0IGV4 aXN0aW5nIGZpbGVzLiBTS0lQIG1lYW5zCisgICAgICAgICAgdG8gc2tpcCAobm90IHJlbmFtZSkg dGhlIGZpbGUgdGhhdCB3b3VsZCBjYXVzZSB0aGUgY29sbGlzaW9uLAorICAgICAgICAgIGFuZCBw cm9jZWVkIHRvIHRoZSBuZXh0IGZpbGUsIGlmIGFueS4gRkFJTCBtZWFucyB0aGF0IG5vIGZpbGVz CisgICAgICAgICAgd2lsbCBiZSByZW5hbWVkIGlmIHRoZXJlIHdvdWxkIGJlIGFueSBjb2xsaXNp b25zOyBmb3IgdGhpcworICAgICAgICAgIEtlcm1pdCBtYWtlcyB0d28gcGFzc2VzLCBjaGVja2lu ZyBlYWNoIG5ldyBuYW1lIGl0IGNvbnN0cnVjdHMKKyAgICAgICAgICBmb3IgZXhpc3RlbmNlIGJl Zm9yZSBzdGFydGluZyB0aGUgc2Vjb25kIHBhc3MgKGhvd2V2ZXIsIHRoZXJlIGlzCisgICAgICAg ICAgbm8gZ3VhcmFudGVlIHRoYXQgaW4gdGhlIHNlY29uZCBwYXNzLCBpdCB3b24ndCBjcmVhdGUg dGhlIHNhbWUKKyAgICAgICAgICBuZXcgbmFtZSBmb3IgbW9yZSB0aGFuIG9uZSBmaWxlOyBpbiB0 aGF0IGNhc2UsIGl0IHdpbGwgc3RvcAorICAgICAgICAgIGJlZm9yZSBleGVjdXRpbmcgdGhlIHNl Y29uZCByZW5hbWUpLiBFeGFtcGxlOgorICAgICAgICAgIHJlbmFtZSAvc2ltdWxhdGUgL2NvbGxp c2lvbjpwcm9jZWVkICogfi90bXAvCisKKyAgIFJlbWluZGVyOiBJbiBzd2l0Y2hlcyBzdWNoIGFz IC9DT0xMSVNJT04gdGhhdCB0YWtlIGFyZ3VtZW50cworICAgKG9wZXJhbmRzKSwgdGhlIHN3aXRj aCBuYW1lIGFuZCBpdHMgYXJndW1lbnQocykgYXJlIHNlcGFyYXRlZCBieSBhCisgICBjb2xvbiAo Oikgd2l0aCBubyBpbnRlcnZlbmluZyBzcGFjZXMuIEFsc28gcmVtZW1iZXIgdGhhdCBLZXJtaXQK KyAgIGtleXdvcmRzIGNhbiBhbHdheXMgYmUgYWJicmV2aWF0ZWQgYnkgbGVhdmluZyBvZmYgY2hh cmFjdGVycyBmcm9tIHRoZQorICAgcmlnaHQsIGFzIGxvbmcgYXMgdGhlIHJlc3VsdCBpcyBzdGls bCB1bmlxdWUgaW4gaXRzIGNvbnRleHQuIFRodXMgInJlbgorICAgL2NvbDpmIiB3b3VsZCBiZSBl cXVpdmFsZW50IHRvICJyZW5hbWUgL2NvbGxpc2lvbjpmYWlsIi4KKworICAgWW91IGNhbiBjaGFu Z2UgdGhlIGZvbGxvd2luZyBwcmVmZXJlbmNlcyBmb3IgdGhlIFJFTkFNRSBjb21tYW5kIHdpdGgK KyAgIHRoZSBuZXcgU0VUIFJFTkFNRSBjb21tYW5kOgorCisgICBTRVQgUkVOQU1FIExJU1QgeyBP TiwgT0ZGIH0KKyAgICAgICAgICBUZWxscyB0aGUgUkVOQU1FIGNvbW1hbmQgd2hldGhlciB0byBs aXN0IGl0cyBhY3Rpb25zIGlmIHlvdQorICAgICAgICAgIGRvbid0IGluY2x1ZGUgYSAvTElTVCBv ciAvTk9MSVNUIG9yIGVxdWl2YWxlbnQgc3dpdGNoLgorCisgICBTRVQgUkVOQU1FIENPTExJU0lP TiB7IEZBSUwsIE9WRVJXUklURSwgU0tJUCB9CisgICAgICAgICAgVGVsbHMgdGhlIFJFTkFNRSBj b21tYW5kIGhvdyB0byBoYW5kbGUgZmlsZW5hbWUgY29sbGlzaW9ucyBpbgorICAgICAgICAgIHRo ZSBhYnNlbmNlIG9mIGEgL0NPTExJU0lPTiBzd2l0Y2guIFRoYXQgaXMsIGl0IHJlcGxhY2VzIHRo ZQorICAgICAgICAgIGRlZmF1bHQgYWN0aW9uIG9mIE9WRVJXUklURSB3aXRoIGFjdGlvbiBvZiB5 b3VyIGNob29zaW5nLCB3aGljaAorICAgICAgICAgIGlzIHRoZW4gdXNlZCBpbiBhbnkgUkVOQU1F IGNvbW1hbmQgdGhhdCBkb2VzIG5vdCBpbmNsdWRlIGFuCisgICAgICAgICAgZXhwbGljaXQgL0NP TExJU0lPTiBzd2l0Y2guCisKKyAgIFNIT1cgUkVOQU1FCisgICAgICAgICAgRGlzcGxheXMgdGhl IGN1cnJlbnQgU0VUIFJFTkFNRSBzZXR0aW5ncy4KKworQ2hhbmdpbmcgdGhlIENhc2Ugb2YgRmls ZW5hbWVzCisKKyAgIFJFTkFNRSAvVVBQRVI6e0FMTCxMT1dFUn0gZmlsZXNwZWMgWyBkaXJlY3Rv cnkgXQorICAgICAgICAgIFJFTkFNRSAvTE9XRVI6e0FMTCxVUFBFUn0gZmlsZXNwZWMgWyBkaXJl Y3RvcnkgXQorICAgICAgICAgIFRoZXNlIHN3aXRjaGVzIGxldCB5b3UgY2hhbmdlIHRoZSBhbHBo YWJldGljIGNhc2Ugb2YgbGV0dGVycyBpbgorICAgICAgICAgIGFsbCB0aGUgZmlsZXMgd2hvc2Ug bmFtZXMgbWF0Y2ggdGhlIGZpbGVzcGVjLiBJZiBhIGRpcmVjdG9yeQorICAgICAgICAgIG5hbWUg aXMgZ2l2ZW4gYWZ0ZXIgdGhlIGZpbGVzcGVjLCB0aGVuIHRoZSBmaWxlcyBhcmUgYWxzbyBtb3Zl ZAorICAgICAgICAgIHRvIHRoZSBnaXZlbiBkaXJlY3RvcnkuCisKKyAgIEJ5IGRlZmF1bHQsIGFs bCBmaWxlcyB0aGF0IG1hdGNoIHRoZSBnaXZlbiBmaWxlc3BlYyBoYXZlIHRoZWlyIG5hbWVzCisg ICBjaGFuZ2VkIChpZiBuZWNlc3NhcnkpLiBUaGlzIGlzIHdoYXQgdGhlIEFMTCBhcmd1bWVudCBt ZWFucywgZS5nLjoKKworICAgICBSRU5BTUUgL0xPV0VSOkFMTCAqCisgICAgIFJFTkFNRSAvTE9X RVIgKgorCisgICBZb3UgY2FuIHVzZSBlaXRoZXIgZm9ybTogUkVOQU1FIC9MT1dFUiBpcyBlcXVp dmFsZW50IHRvIFJFTkFNRQorICAgL0xPV0VSOkFMTC4gVGhlIG90aGVyIGFyZ3VtZW50ICgvTE9X RVI6VVBQRVIgb3IgL1VQUEVSOkxPV0VSKSBtZWFucyB0bworICAgbGVhdmUgbWl4ZWQtY2FzZSBm aWxlbmFtZXMgYWxvbmUsIGFuZCByZW5hbWUgb25seSB0aG9zZSBmaWxlcyB3aG9zZQorICAgbmFt ZXMgY29udGFpbiBsZXR0ZXJzIG9mIG9ubHkgdGhlIGdpdmVuIGNhc2UuIEV4YW1wbGVzOgorCisg ICBSRU5BTUUgL1VQUEVSOkFMTCBmb28uYmFyCisgICAgICAgICAgQ2hhbmdlcyB0aGUgZmlsZW5h bWUgdG8gRk9PLkJBUi4KKworICAgUkVOQU1FIC9VUFBFUiBmb28uYmFyCisgICAgICAgICAgU2Ft ZSBhcyAicmVuYW1lIC91cHBlcjphbGwgZm9vLmJhciIuCisKKyAgIFJFTkFNRSAvVVBQRVIgZm9v LmJhciB+L29sZC8KKyAgICAgICAgICBSZW5hbWVzIGZvby5iYXIgdG8gRk9PLkJBUiBhbmQgbW92 ZXMgaXQgdG8gdGhlIHVzZXIncyBvbGQKKyAgICAgICAgICBkaXJlY3RvcnkgKFVuaXgpLgorCisg ICBSRU5BTUUgL0xPV0VSICoKKyAgICAgICAgICBDaGFuZ2VzIHRoZSBuYW1lcyBvZiBhbGwgZmls ZXMgdG8gaGF2ZSBvbmx5IGxvd2VyY2FzZSBsZXR0ZXJzLgorCisgICBSRU5BTUUgL0xPV0VSOlVQ UEVSICoKKyAgICAgICAgICBDaGFuZ2VzIHRoZSBuYW1lcyBvZiBvbmx5IHRob3NlIGZpbGVzIHdo b3NlIG5hbWVzIGNvbnRhaW4gbm8KKyAgICAgICAgICBsb3dlcmNhc2UgbGV0dGVycyB0byBoYXZl IG9ubHkgbG93ZXJjYXNlIGxldHRlcnMuIEZvciBleGFtcGxlLAorICAgICAgICAgIEZPTy5CQVIg d291bGQgYmUgY2hhbmdlZCwgRm9vLkJhciB3b3VsZCBub3QgYmUgY2hhbmdlZC4gZm9vLmJhcgor ICAgICAgICAgIHdvdWxkIG5vdCBiZSBjaGFuZ2VkIGVpdGhlciBiZWNhdXNlIGl0J3MgYWxyZWFk eSBhbGwgbG93ZXJjYXNlLgorCisgICBSRU5BTUUgL0xPV0VSOlVQUEVSICogfi9uZXcvCisgICAg ICAgICAgU2FtZSBhcyB0aGUgcHJldmlvdXMgZXhhbXBsZSwgYnV0IGFsc28gbW92ZXMgZWFjaCBm aWxlIHRvIHRoZQorICAgICAgICAgIHVzZXIncyBuZXcgZGlyZWN0b3J5ICh3aGV0aGVyIGl0IHdh cyByZW5hbWVkIG9yIG5vdCkuCisKKyAgIENhc2UgY29udmVyc2lvbiB3b3JrcyByZWxpYWJseSBm b3IgQVNDSUkgY2hhcmFjdGVycyBvbmx5LiBLZXJtaXQgdXNlcworICAgdGhlIEMgbGlicmFyeSBm b3IgdGhpcywgd2hpY2ggb24gYW55IGdpdmVuIHBsYXRmb3JtIG1pZ2h0IG9yIG1pZ2h0IG5vdAor ICAgaGFuZGxlIG5vbi1BU0NJSSBsZXR0ZXJzLCBhbmQgaWYgaXQgZG9lcywgdGhlbiBob3cgaXQg d29ya3Mgd291bGQKKyAgIG5vcm1hbGx5IGRlcGVuZCBvbiB5b3VyIGxvY2FsZSBkZWZpbml0aW9u cyAodGhlIExDX0NUWVBFIGFuZC9vciBMQU5HCisgICBlbnZpcm9ubWVudCB2YXJpYWJsZSBpbiBV bml4KS4gV2hlbiBub24tQVNDSUkgbGV0dGVycyBhcmUgbm90IGhhbmRsZWQKKyAgIGJ5IHRoZSBD IGxpYnJhcnksIHRoZSBSRU5BTUUgY29tbWFuZCBkb2VzIGNoYW5nZSB0aGVpciBjYXNlLiBGb3IK KyAgIGV4YW1wbGUsIE9sZ2FfVGHvv73vv71uLnR4dCBtaWdodCBiZWNvbWUgT0xHQV9UQe+/ve+/ vU4uVFhULgorCitTdHJpbmcgUmVwbGFjZW1lbnQgaW4gRmlsZW5hbWVzCisKKyAgIFRoZSBSRU5B TUUgY29tbWFuZCBhbHNvIGxldHMgeW91IGNoYW5nZSBmaWxlbmFtZXMgYnkgc3RyaW5nCisgICBz dWJzdGl0dXRpb24uCisKKyAgIFJFTkFNRSAvRklYU1BBQ0VTWzpTdHJpbmddIGZpbGVzcGVjIFsg ZGlyZWN0b3J5IF0KKyAgICAgICAgICBSZXBsYWNlcyBhbGwgc3BhY2VzIGluIGVhY2ggbWF0Y2hp bmcgZmlsZW5hbWUgYnkgdGhlIGdpdmVuCisgICAgICAgICAgc3RyaW5nLCBpZiBhbnksIG9yIGlm IG5vbmUgaXMgZ2l2ZW4sIGJ5IHVuZGVyc2NvcmUuIEV4YW1wbGVzOgorCisgICAgIFJFTkFNRSAv RklYICoKKyAgICAgUkVOQU1FIC9GSVhTUEFDRVM6XyAqCisgICAgIFJFTkFNRSAvRklYU1BBQ0VT OiIiICoKKyAgICAgUkVOQU1FIC9GSVhTUEFDRVM6PDA0MD4gKgorCisgICAgICAgICAgVGhlIGZp cnN0IHR3byBhcmUgZXF1aXZhbGVudCwgcmVwbGFjaW5nIGVhY2ggc3BhY2Ugd2l0aAorICAgICAg ICAgIHVuZGVyc2NvcmU7IGEgZmlsZSBjYWxsZWQgIk15IEZhdm9yaXRlIFBob3RvLmpwZyIgYmVj b21lcworICAgICAgICAgICJNeV9GYXZvcml0ZV9QaG90by5qcGciLiBUaGUgdGhpcmQgZXhhbXBs ZSByZW1vdmVzIGFsbCBzcGFjZXMKKyAgICAgICAgICAoIk15RmF2b3JpdGVQaG90by5qcGciKS4g VGhlIGZvdXJ0aCByZXBsYWNlcyBlYWNoIHNwYWNlIHdpdGggdGhlCisgICAgICAgICAgc3RyaW5n ICI8MDQwPiIgKCJNeTwwNDA+RmF2b3JpdGU8MDQwPlBob3RvLmpwZyIpLgorCisgICBSRU5BTUUg L1JFUExBQ0U6e3tTdHJpbmcxfXtTdHJpbmcyfX0gZmlsZXNwZWMgWyBkaXJlY3RvcnkgXQorICAg ICAgICAgIFJlbmFtZXMgZWFjaCBtYXRjaGluZyBmaWxlIGJ5IGNoYW5naW5nIG9jY3VycmVuY2Vz IG9mIFN0cmluZzEgaW4KKyAgICAgICAgICBpdHMgbmFtZSB0byBTdHJpbmcyLiBJZiBhIGRpcmVj dG9yeSBzcGVjaWZpY2F0aW9uIGlzIGluY2x1ZGVkLAorICAgICAgICAgIHRoZSBmaWxlIGlzIGFs c28gbW92ZWQgdG8gdGhlIGdpdmVuIGRpcmVjdG9yeSAoZXZlbiBpZiB0aGUgbmFtZQorICAgICAg ICAgIHdhcyBub3QgY2hhbmdlZCkuIE5vdGUgdGhhdCBpbiB0aGlzIGNhc2UsIHRoZSBjdXJseSBi cmFjZXMgYXJlCisgICAgICAgICAgcGFydCBvZiB0aGUgY29tbWFuZC4gRXhhbXBsZToKKworICAg ICBSRU5BTUUgL1JFUExBQ0U6e3suanBlZ317LmpwZ319ICoKKworICAgICAgICAgIGNoYW5nZXMg YWxsICouanBlZyBmaWxlcyB0byAqLmpwZy4KKworICAgQnkgZGVmYXVsdCwgUkVOQU1FIC9SRVBM QUNFIGNoYW5nZXMgYWxsIG9jY3VycmVuY2VzIG9mIFN0cmluZzEgaW4gZWFjaAorICAgZmlsZW5h bWUgdG8gU3RyaW5nMiBzbywgZm9yIGV4YW1wbGUsIGlmIHlvdSBoYWQgYSBmaWxlIGNhbGxlZAor ICAgYWJjanBlZ3h5ei5qcGVnLCB0aGUgY29tbWFuZCBqdXN0IHNob3duIHdvdWxkIGNoYW5nZSBp dHMgbmFtZSB0bworICAgYWJjanBneHl6LmpwZy4KKworICAgRm9yIGdyZWF0ZXIgY29udHJvbCBh bmQgZmxleGliaWxpdHksIHRoZSAvUkVQTEFDRTogc3dpdGNoIGFyZ3VtZW50IGNhbgorICAgdGFr ZSBzZXZlcmFsIGRpc3RpbmN0IGZvcm1zOgorCisgICBSRU5BTUUgL1JFUExBQ0U6U3RyaW5nMSBm aWxlc3BlYyBbIGRpcmVjdG9yeSBdCisgICAgICAgICAgVGhpcyBtZWFucyB0byByZW1vdmUgYWxs IG9jY3VycmVuY2VzIG9mIFN0cmluZzEgZnJvbSB0aGUgZ2l2ZW4KKyAgICAgICAgICBmaWxlbmFt ZXMgbmFtZS4gSXQgaXMgZXF1aXZhbGVudCB0byAvUkVQTEFDRTp7e1N0cmluZzF9e319LiBBCisg ICAgICAgICAgaGFuZHkgdXNlIGZvciB0aGlzIG9wdGlvbiBpcyB0byByZW1vdmUgc3BhY2VzIGZy b20gZmlsZW5hbWVzLgorCisgICBSRU5BTUUgL1JFUExBQ0U6e3tTdHJpbmcxfXtTdHJpbmcyfX0g ZmlsZXNwZWMgWyBkaXJlY3RvcnkgXQorICAgICAgICAgIEFzIGFscmVhZHkgbm90ZWQsIHRoaXMg cmVwbGFjZXMgZXZlcnkgb2NjdXJyZW5jZSBvZiBTdHJpbmcxIHdpdGgKKyAgICAgICAgICBTdHJp bmcyIGluIGVhY2ggZmlsZW5hbWUuIEFscGhhYmV0aWMgY2FzZSBpbiBzdHJpbmcgbWF0Y2hpbmcg aXMKKyAgICAgICAgICBkb25lIGFjY29yZGluZyB0byB0aGUgY3VycmVudCBTRVQgQ0FTRSBzZXR0 aW5nLgorCisgICBSRU5BTUUgL1JFUExBQ0U6e3sgfXtffX0gZmlsZXNwZWMgWyBkaXJlY3Rvcnkg XQorICAgICAgICAgIFRoaXMgcmVwbGFjZXMgYWxsIHNwYWNlcyBpbiB0aGUgZ2l2ZW4gZmlsZW5h bWVzIHdpdGggdW5kZXJzY29yZSwKKyAgICAgICAgICBlcXVpdmFsZW50IHRvIFJFTkFNRSAvRklY U1BBQ0VTLgorCisgICBSRU5BTUUgL1JFUExBQ0U6e3tTdHJpbmcxfXtTdHJpbmcyfXtPcHRpb25z fX0gZmlsZXNwZWMgWyBkaXJlY3RvcnkgXQorICAgICAgICAgIE9wdGlvbnMgY2FuIGJlIGluY2x1 ZGVkIHRoYXQgYWRkIG1vcmUgY29udHJvbCB0byB0aGUgcHJvY2Vzcy4KKyAgICAgICAgICBUaGUg b3B0aW9uIHN0cmluZyBpcyBhIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnM7IGVhY2ggY2hhcmFjdGVy IGluCisgICAgICAgICAgdGhlIHN0cmluZyBpcyBhbiBvcHRpb24uIFRoZSBjaG9pY2VzIGFyZToK KworICAgQSBTdHJpbmcgbWF0Y2hpbmcgaXMgdG8gYmUgY2FzZS1zZW5zaXRpdmUsIHJlZ2FyZGxl c3Mgb2YgU0VUIENBU0UuCisgICBhIFN0cmluZyBtYXRjaGluZyBpcyB0byBiZSBjYXNlLWluZGVw ZW5kZW50LCByZWdhcmRsZXNzIG9mIFNFVCBDQVNFLgorICAgXiBTdHJpbmcgcmVwbGFjZW1lbnQg d2lsbCBvY2N1ciBvbmx5IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGVuYW1lLgorICAgJCBT dHJpbmcgcmVwbGFjZW1lbnQgd2lsbCBvY2N1ciBvbmx5IGF0IHRoZSBlbmQgb2YgdGhlIGZpbGVu YW1lLgorICAgMSBPbmx5IHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIHRoZSBzdHJpbmcgd2lsbCBi ZSByZXBsYWNlZC4KKyAgIDIgT25seSB0aGUgc2Vjb25kIG9jY3VycmVuY2Ugb2YgdGhlIHN0cmlu ZyB3aWxsIGJlIHJlcGxhY2VkLgorICAgMyA0IDUgNiA3IDggLi4uCisgICA5IE9ubHkgdGhlIG5p bnRoIG9jY3VycmVuY2Ugb2YgdGhlIHN0cmluZyB3aWxsIGJlIHJlcGxhY2VkLgorICAgLSAoaHlw aGVuLCBtaW51cyBzaWduKSBCZWZvcmUgYSBkaWdpdDogb2NjdXJyZW5jZXMgd2lsbCBiZSBjb3Vu dGVkIGZyb20KKyAgIHRoZSByaWdodC4KKyAgIH4gKHRpbGRlKSBCZWZvcmUgZGlnaXQgb3IgbWlu dXMgc2lnbjogYWxsIG9jY3VycmVuY2VzIGJ1dCB0aGUgZ2l2ZW4gb25lCisgICB3aWxsIGJlIHJl cGxhY2VkLgorCisgICBUaGUgdGlsZGUgbW9kaWZpZXIgd29ya3Mgb25seSB3aXRoIHNpbmdsZS1i eXRlIGNoYXJhY3RlciBzZXRzIHN1Y2ggYXMKKyAgIEFTQ0lJLCBDUDQzNywgSVNPIDg4NTktMSwg ZXRjLCBidXQgbm90IHdpdGggbXVsdGlieXRlIGNoYXJhY3RlciBzZXRzCisgICBzdWNoIGFzIFVD UzIsIFVURjgsIG9yIGFueSBvZiB0aGUgSmFwYW5lc2UgS2Fuamkgc2V0cy4KKworICAgSGVyZSBh cmUgc29tZSBleGFtcGxlcyBzaG93aW5nIGhvdyB0byB1c2UgdGhlIC9SRVBMQUNFIG9wdGlvbnM6 CisKKyAgIFJFTkFNRSAvUkVQTEFDRTp7e2Zvb317YmFyfXtefX0gKgorICAgICAgICAgIEZvciBh bGwgZmlsZXMgd2hvc2UgbmFtZXMgc3RhcnQgd2l0aCAiZm9vIiwgcmVwbGFjZXMgdGhlICJmb28i CisgICAgICAgICAgYXQgdGhlIGJlZ2lubmluZyB3aXRoICJiYXIiLgorCisgICBSRU5BTUUgL1JF UExBQ0U6e3t9e05ldy19e159fSAqCisgICAgICAgICAgUHJlcGVuZHMgIk5ldy0iIHRvIHRoZSBu YW1lIG9mIGVhY2ggZmlsZS4KKworICAgUkVOQU1FIC9SRVBMQUNFOnt7LmpwZWd9ey5qcGd9eyR9 fSAqCisgICAgICAgICAgUmVwbGFjZXMgIi5qcGVnIiBhdCB0aGUgZW5kIG9mIGVhY2ggZmlsZW5h bWUgd2l0aCAiLmpwZyIuCisKKyAgIFJFTkFNRSAvUkVQTEFDRTp7e317LU9sZH17JH19ICoKKyAg ICAgICAgICBBcHBlbmRzICItT2xkIiB0byB0aGUgbmFtZSBvZiBlYWNoIGZpbGUuCisKKyAgIFJF TkFNRSAvUkVQTEFDRTp7e2Zvb317YmFyfXthfX0gKgorICAgICAgICAgIFJlcGxhY2VzICJmb28i LCAiRk9PIiwgIkZvbyIsICJmT08iLCBldGMsIHdpdGggImJhciIgaW4gZWFjaAorICAgICAgICAg IGZpbGVuYW1lLgorCisgICBSRU5BTUUgL1JFUExBQ0U6e3tmb299e2Jhcn17QX19ICoKKyAgICAg ICAgICBSZXBsYWNlcyBvbmx5IChsb3dlcmNhc2UpICJmb28iIGluIGZpbGVuYW1lcyB3aXRoICJi YXIiLgorCisgICBSRU5BTUUgL1JFUExBQ0U6e3thfXtYWH19ICoKKyAgICAgICAgICBDaGFuZ2Vz IGV2ZXJ5ICJhIiB0byAiWFgiLiBGb3IgZXhhbXBsZSBhIGZpbGUgY2FsbGVkICJhLmEuYS5hIgor ICAgICAgICAgIHdvdWxkIGJlY29tZSAiWFguWFguWFguWFgiLgorCisgICBSRU5BTUUgL1JFUExB Q0U6e3thfXtYfXsyfX0KKyAgICAgICAgICBDaGFuZ2VzIG9ubHkgdGhlIHNlY29uZCAiYSIgdG8g IlgiLiBGb3IgZXhhbXBsZSBhIGZpbGUgY2FsbGVkCisgICAgICAgICAgImEuYS5hLmEiIHdvdWxk IGJlY29tZSAiYS5YLmEuYSIuCisKKyAgIFJFTkFNRSAvUkVQTEFDRTp7e2F9e1h9ey0xfX0KKyAg ICAgICAgICBDaGFuZ2VzIG9ubHkgdGhlIGZpbmFsICJhIiBpbiB0aGUgZmlsZW5hbWUgKGl0IGRv ZXNuJ3QgaGF2ZSB0bworICAgICAgICAgIGJlIGF0IHRoZSBlbmQpIHRvICJYIi4gRm9yIGV4YW1w bGUgYSBmaWxlIGNhbGxlZCAiYS5iLmEuYy5hLmQiCisgICAgICAgICAgd291bGQgYmVjb21lICJh LmIuYS5jLlguZCIuCisKKyAgIFJFTkFNRSAvUkVQTEFDRTp7e2Zvb317Tk9URk9PfXstMn19Cisg ICAgICAgICAgQ2hhbmdlcyB0aGUgc2Vjb25kLXRvLWxhc3QgImZvbyIgKGlmIGFueSkgaW4gdGhl IGZpbGVuYW1lIHRvCisgICAgICAgICAgIk5PVEZPTyIuCisKKyAgIFJFTkFNRSAvUkVQTEFDRTp7 e2Zvb317fXstMn19CisgICAgICAgICAgRGVsZXRlcyB0aGUgc2Vjb25kLXRvLWxhc3QgImZvbyIg KGlmIGFueSkgZnJvbSB0aGUgZmlsZW5hbWUuCisKKyAgIFJFTkFNRSAvUkVQTEFDRTp7ey59e199 e34xfX0KKyAgICAgICAgICBDaGFuZ2VzIGFsbCBidXQgdGhlIGZpcnN0IHBlcmlvZCB0byBhbiB1 bmRlcnNjb3JlOyBmb3IgZXhhbXBsZSwKKyAgICAgICAgICAiYS5iLmMuZC5lIiB3b3VsZCBiZWNv bWUgImEuYl9jX2RfZSIuCisKKyAgIFJFTkFNRSAvUkVQTEFDRTp7ey59e199e34tMX19CisgICAg ICAgICAgQ2hhbmdlcyBhbGwgYnV0IHRoZSBmaW5hbCBwZXJpb2QgdG8gYW4gdW5kZXJzY29yZTsg Zm9yIGV4YW1wbGUsCisgICAgICAgICAgImEuYi5jLmQuZSIgd291bGQgYmVjb21lICJhX2JfY19k LmUiLgorCisgICBJbiB0aGUgT3B0aW9ucyBmaWVsZCwgZGlnaXRzIChhbmQgdGhlaXIgbW9kaWZp ZXJzKSwgXiwgYW5kICQgYXJlCisgICBtdXR1YWxseSBleGNsdXNpdmUuIElmIHlvdSBpbmNsdWRl IG1vcmUgdGhhbiBvbmUgb2YgdGhlc2UgaW4gdGhlIG9wdGlvbgorICAgc3RyaW5nLCBvbmx5IHRo ZSBsYXN0IG9uZSBpcyB1c2VkLiBTaW1pbGFybHkgZm9yICdhJyBhbmQgJ0EnOgorCisgICBSRU5B TUUgL1JFUExBQ0U6e3tmb299e2Jhcn17QWEyJF59fSAqCisgICAgICAgICAgVGhpcyByZXBsYWNl cyAiZm9vIiB3aXRoICJiYXIiIG5vIG1hdHRlciB3aGF0IGNvbWJpbmF0aW9uIG9mCisgICAgICAg ICAgdXBwZXIgYW5kIGxvd2VyIGNhc2UgbGV0dGVycyBhcmUgdXNlZCBpbiAiZm9vIiAoJ2EnIG92 ZXJyaWRlcworICAgICAgICAgICdBJyBpbiB0aGUgb3B0aW9uIHN0cmluZyksIGJ1dCBvbmx5IGlm ICJmb28iIGlzIGF0IHRoZSBiZWdpbm5pbmcKKyAgICAgICAgICBvZiB0aGUgZmlsZW5hbWUgKCde JyBvdmVycmlkZXMgJyQnIGFuZCAnMicpLgorCisgICBJZiB5b3UgZ2l2ZSBhbiAvVVBQRVIgb3Ig L0xPV0VSIHN3aXRjaCBhbmQgYSAvUkVQTEFDRSBzd2l0Y2ggaW4gdGhlCisgICBzYW1lIFJFTkFN RSBjb21tYW5kLCB0aGUgL1JFUExBQ0UgYWN0aW9uIG9jY3VycyBmaXJzdCwgdGhlbiB0aGUgY2Fz ZQorICAgY29udmVyc2lvbjoKKworICAgUkVOQU1FIC9SRVBMQUNFOnt7Zm9vfXtiYXJ9fSAvVVBQ RVIgKiAvdG1wCisgICAgICAgICAgRm9yIGVhY2ggZmlsZTogY2hhbmdlcyBhbGwgb2NjdXJyZW5j ZXMgb2YgImZvbyIgaW4gdGhlIG5hbWUgdG8KKyAgICAgICAgICAiYmFyIiwgdGhlbiBjb252ZXJ0 cyB0aGUgcmVzdWx0IHRvIHVwcGVyY2FzZSwgYW5kIHRoZW4gbW92ZXMgdGhlCisgICAgICAgICAg ZmlsZSB0byB0aGUgL3RtcCBkaXJlY3RvcnkuIFNvIChmb3IgZXhhbXBsZSkgImZvb3QudHh0IiB3 b3VsZAorICAgICAgICAgIGJlY29tZSAiL3RtcC9CQVJULlRYVCIuCisKK0NoYW5naW5nIHRoZSBD aGFyYWN0ZXIgRW5jb2Rpbmcgb2YgRmlsZW5hbWVzCisKKyAgIEFzIHlvdSBrbm93LCB0ZXh0IGlz IHJlcHJlc2VudGVkIG9uIHRoZSBjb21wdXRlciBhcyBhIHNlcmllcyBvZgorICAgbnVtYmVycywg d2l0aCBhIGdpdmVuIG51bWJlciBjb3JyZXNwb25kaW5nIHRvIGEgZ2l2ZW4gY2hhcmFjdGVyCisg ICBhY2NvcmRpbmcgdG8gc29tZSBjb252ZW50aW9uIG9yIHN0YW5kYXJkLiBGaWxlbmFtZXMgYXJl IHJlcHJlc2VudGVkIHRoZQorICAgc2FtZSB3YXkuIFRoZSB0cm91YmxlIGlzLCBkaWZmZXJlbnQg Y29tcHV0ZXJzLCBvciBldmVuIGRpZmZlcmVudAorICAgYXBwbGljYXRpb25zIG9uIHRoZSBzYW1l IGNvbXB1dGVyLCBtaWdodCB1c2UgZGlmZmVyZW50IHN0YW5kYXJkcyBvcgorICAgY29udmVudGlv bnMgKCJjaGFyYWN0ZXIgc2V0cyIpIGZvciByZXByZXNlbnRpbmcgdGhlIHNhbWUgY2hhcmFjdGVy cy4KKyAgIFVzdWFsbHkgQVNDSUkgaXMgc2FmZSwgYnV0IGFueXRoaW5nIGJleW9uZCB0aGF0IC0t IG5vbi1BU0NJSSBjaGFyYWN0ZXJzCisgICBzdWNoIGFzIGFjY2VudGVkIG9yIG5vbi1Sb21hbiBs ZXR0ZXJzIC0tIGlzIGxpa2VseSB0byB2YXJ5LiBTb21ldGltZXMKKyAgIHlvdSBoYXZlIHRleHQg dGhhdCdzIGluIHRoZSAid3JvbmciIGNoYXJhY3RlciBzZXQgYW5kIHlvdSBuZWVkIHRvCisgICBj b252ZXJ0IGl0IHRvIHNvbWV0aGluZyB5b3UgY2FuIGNhbiB1c2UuIEtlcm1pdCBoYXMgYWx3YXlz IGJlZW4gYWJsZSB0bworICAgaGFuZGxlIHRoaXMgYXMgcGFydCBvZiBmaWxlIHRyYW5zZmVyIGFu ZCB0ZXJtaW5hbCBlbXVsYXRpb24sIGFzIHdlbGwgYXMKKyAgIGJlaW5nIGFibGUgdG8gY29udmVy dCB0ZXh0IGZpbGVzIGxvY2FsbHkgd2l0aCBpdHMgVFJBTlNMQVRFIGNvbW1hbmQuCisgICBOb3cg dGhlcmUncyBhIHdheSB0byBjb252ZXJ0IGZpbGVuYW1lcyB0b28sIGZvciBleGFtcGxlIGFmdGVy IGNvcHlpbmcKKyAgIGZpbGVzIGZyb20gYSBDRCB0aGF0IHVzZXMgYSBkaWZmZXJlbnQgZW5jb2Rp bmc6CisKKyAgIFJFTkFNRSAvQ09OVkVSVDpjaGFyc2V0MTpjaGFyc2V0MiBmaWxlc3BlYyBbIGRp cmVjdG9yeSBdCisgICAgICAgICAgQ29udmVydHMgZmlsZW5hbWVzIGZyb20gdGhlIGZpcnN0IGNo YXJhY3RlciBzZXQgdG8gdGhlIHNlY29uZAorICAgICAgICAgIG9uZS4gVGhlIHR3byBjaGFyYWN0 ZXIgc2V0cyBjYW4gYmUgY2hvc2VuIGZyb20gdGhlIFNFVCBGSUxFCisgICAgICAgICAgQ0hBUkFD VEVSLVNFVCBsaXN0OyBmb3IgY29tcGxldGUgZGV0YWlscyBzZWUgWzY4XXRoaXMgcGFnZS4gRm9y CisgICAgICAgICAgZXhhbXBsZSBzdXBwb3NlIHlvdSBoYXZlIGEgZmlsZSBjYWxsZWQgIk9sZ2Ff VGHvv73vv71uLnR4dCIgb24gYQorICAgICAgICAgIGNvbXB1dGVyIHdoZXJlIElTTyA4ODU5LTEg TGF0aW4gQWxwaGFiZXQgMSBpcyB1c2VkLCBhbmQgeW91IGhhdmUKKyAgICAgICAgICB0cmFuc3Bv cnRlZCBpdCAoZS5nLiBvbiBDRFJPTSkgdG8gYW5vdGhlciBjb21wdXRlciB3aGVyZSB0aGUKKyAg ICAgICAgICB0ZXh0IGVuY29kaW5nIGlzIFVURjguIE1heWJlIHlvdSBhbHNvIGhhdmUgYSBsb3Qg b2Ygb3RoZXIgZmlsZXMKKyAgICAgICAgICB3aXRoIHNpbWlsYXIgbmFtZXMgaW4gdGhlIHNhbWUg ZGlyZWN0b3J5LiBZb3UgY2FuIGNvbnZlcnQgdGhlCisgICAgICAgICAgZmlsZW5hbWVzIHRvIFVU RjggbGlrZSB0aGlzOgorCisgICAgIFJFTkFNRSAvQ09OVkVSVDpsYXRpbjE6dXRmOCAqCisKKyAg IC9DT05WRVJUIGNhbiBub3QgYmUgY29tYmluZWQgd2l0aCAvVVBQRVIsIC9MT1dFUiwgb3IgL1JF UExBQ0UuCisKKyAgIFlvdSBzaG91bGQgTk9UIHVzZSBVQ1MyIGZvciBmaWxlbmFtZXMgc2luY2Ug dGhpcyBlbmNvZGluZyBpcyBub3QKKyAgIGNvbXBhdGlibGUgd2l0aCBDIHN0cmluZ3MgdXNlZCBp biBVbml4IGFuZCBlbHNld2hlcmUuCisKKyAgIFJFTkFNRSAvQ09OVkVSVCBhZmZlY3RzIG9ubHkg dGhlIGZpbGVuYW1lLCBub3QgdGhlIGZpbGUncyBjb250ZW50cy4gWW91CisgICBjYW4gdXNlIHRo ZSBUUkFOU0xBVEUgY29tbWFuZCB0byBjb252ZXJ0IHRoZSBlbmNvZGluZyBvZiB0aGUgY29udGVu dHMKKyAgIG9mIGEgdGV4dCBmaWxlLgorCitPdGhlciBOZXcgRmVhdHVyZXMKKworICAgU2VlIHRo ZSBbNjldQy1LZXJtaXQgRGFpbHkgQnVpbGRzIHBhZ2UgZm9yIGRldGFpbHMuIFZlcnkgYnJpZWZs eToKKworICAgICAqIFBlcmhhcHMgbW9zdCBpbXBvcnRhbnQsIG1vZGVybml6ZWQgbWFrZWZpbGUg dGFyZ2V0cyBmb3IgdGhlIG1ham9yCisgICAgICAgVW5peCBwbGF0Zm9ybXM6IExpbnV4LCBNYWMg T1MgWCwgQUlYLCBTb2xhcmlzLCBldGMuIFRoZXNlIGFyZQorICAgICAgIHNvbWV3aGF0IGF1dG9t YXRlZDsgbm90IGF1dG9jb25mIGV4YWN0bHksIGJ1dCB0aGV5IGN1dCBkb3duCisgICAgICAgc2ln bmlmaWNhbnRseSBvbiByZWR1bmRhbnQgdGFyZ2V0cy4gRm9yIGV4YW1wbGUsIG9uZSBzaW5nbGUg ImxpbnV4IgorICAgICAgIHRhcmdldCB3b3JrcyBvbiBtYW55IChob3BlZnVsbHkgYWxsKSBkaWZm ZXJlbnQgTGludXgKKyAgICAgICBjb25maWd1cmF0aW9ucywgd2hlcmUgYmVmb3JlIGRpZmZlcmVu dCB0YXJnZXRzIHdlcmUgcmVxdWlyZWQgZm9yCisgICAgICAgZGlmZmVyZW50IGNvbWJpbmF0aW9u cyBvZiAoZS5nLikgY3Vyc2VzIC8gbmN1cnNlcyAvIG5vIGN1cnNlczsKKyAgICAgICAzMi1iaXQg LyA2NC1iaXQ7IGRpZmZlcmVudCBmZWF0dXJlIHNldHMgYW5kIGxpYnJhcnkgbG9jYXRpb25zLgor ICAgICAgIChTZXBhcmF0ZSB0YXJnZXRzIGFyZSBzdGlsbCByZXF1aXJlZCBmb3IgS2VyYmVyb3Mg YW5kL29yIFNTTAorICAgICAgIGJ1aWxkcywgYnV0IHRoZXkgYXJlICJzdWJyb3V0aW5pemVkIi4p CisgICAgICogQmlnZ2VyIGJ1ZmZlcnMsIG1vcmUgc3RvcmFnZSBmb3IgY29tbWFuZHMsIG1hY3Jv cywgc2NyaXB0cywKKyAgICAgICBzdHJpbmdzLCBhbmQgZmlsZW5hbWUgZXhwYW5zaW9uIGluIDY0 LWJpdCB2ZXJzaW9ucyBhbmQgaW4gMzItYml0CisgICAgICAgdmVyc2lvbnMgdGhhdCBzdXBwb3J0 IGxhcmdlIGZpbGVzLgorICAgICAqIFVzZXItc2V0dGFibGUgRlRQIHRpbWVvdXQsIHdvcmtzIG9u IGJvdGggdGhlIGRhdGEgYW5kIGNvbnRyb2wKKyAgICAgICBjb25uZWN0aW9uLgorICAgICAqIEZU UCBhY2Nlc3MgdG8gcG9ydHMgaGlnaGVyIHRoYW4gMTYzODMuCisgICAgICogQnVpbHQtaW4gRlRQ IGNsaWVudCBmb3IgVk1TLiBUaGlzIGlzIHRoZSBbNzBdc2FtZSBGVFAgY2xpZW50IFVuaXgKKyAg ICAgICBDLUtlcm1pdCBoYXMgaGFkIHNpbmNlIHZlcnNpb24gOC4wLCBtaW5pbWFsbHkgYWRhcHRl ZCB0byBWTVMgYnkKKyAgICAgICBTTVMsIHN1cHBvcnRpbmcgYmluYXJ5IGFuZCBTdHJlYW1fTEYg ZmlsZSB0cmFuc2ZlciBvbmx5IChpbiBvdGhlcgorICAgICAgIHdvcmRzLCBub3RoaW5nIHRvIGhh bmRsZSBSTVMgZmlsZXMpLCBidXQgb3RoZXJ3aXNlIGZ1bGx5IGZ1bmN0aW9uYWwKKyAgICAgICAo YW5kIHNjcmlwdGFibGUpIGFuZCB0aGVvcmV0aWNhbGx5IGNhcGFibGUgb2YgbWFraW5nIGNvbm5l Y3Rpb25zCisgICAgICAgc2VjdXJlZCBieSBTU0wgKGF0IGxlYXN0IGl0IGNvbXBpbGVzIGFuZCBs aW5rcyBPSyB3aXRoIFNTTCAtIEhQIFNTTAorICAgICAgIDEuMyBpbiB0aGlzIGNhc2UpLgorICAg ICAqIExhcmdlIGZpbGUgc3VwcG9ydCBpbiBWTVMsIGFsc28gYnkgU01TLiBBbHBoYSBhbmQgSXRh bml1bSBvbmx5IChub3QKKyAgICAgICBWQVgpLiBWTVMgQy1LZXJtaXQgd2FzIGFscmVhZHkgYWJs ZSB0byB0cmFuc2ZlciBsYXJnZSBmaWxlcywgYnV0CisgICAgICAgdGhlIGZpbGUtdHJhbnNmZXIg ZGlzcGxheSAobnVtYmVycyBhbmQgcHJvZ3Jlc3MgYmFyKSBhbmQgc3RhdGlzdGljcworICAgICAg IHdlcmUgd3JvbmcgYmVjYXVzZSB0aGV5IHVzZWQgaW50cy4gSW4gdGhlIHByZXNlbnQgQWxwaGEg dGVzdAorICAgICAgIHJlbGVhc2UsIHRoaXMgaXMgYW4gb3B0aW9uYWwgZmVhdHVyZSByZXF1ZXN0 ZWQgYnkgaW5jbHVkaW5nIHRoZSAiZiIKKyAgICAgICBvcHRpb24gaW4gUDEuCisgICAgICogTmV3 IFBVVEVOViBjb21tYW5kIHRoYXQgYWxsb3dzIEtlcm1pdCB0byBwYXNzIGVudmlyb25tZW50IHZh cmlhYmxlcworICAgICAgIHRvIHN1YnByb2Nlc3NlcyAoVW5peCBvbmx5LCAiaGVscCBwdXRlbnYi KS4KKyAgICAgKiBOZXcgVE9VQ0ggY29tbWFuZCwgbWFueSBmaWxlIHNlbGVjdGlvbiBvcHRpb25z ICgiaGVscCB0b3VjaCIpLgorICAgICAqIE5ldyBESVJFQ1RPUlkgY29tbWFuZCBvcHRpb25zIGFu ZCBzd2l0Y2hlcyAoL1RPUCwgL0NPVU5UOworICAgICAgIEhESVJFQ1RPUlksIFdESVJFQ1RPUlku Li4pLiBUbyBzZWUgdGhlIHRlbiBiaWdnZXN0IGZpbGVzIGluIHRoZQorICAgICAgIGN1cnJlbnQg ZGlyZWN0b3J5OiAiZGlyIC90b3A6MTAgL3NvcnQ6c2l6ZSAvcmV2ZXJzZSAqIiBvcgorICAgICAg IGVxdWl2YWxlbnRseSwgImhkaXIgL3RvcDoxMCAqIi4gV0RJUiBsaXN0cyBmaWxlcyBpbiByZXZl cnNlCisgICAgICAgY2hyb25vbG9naWNhbCBvcmRlciwgc2hvcnRoYW5kIGZvciAiZGlyIC9zb3J0 OmRhdGUgL3JldmVyc2UiLgorICAgICAqIE5ldyBjb21tYW5kIEZTRUVLIC9GSU5EOnN0cmluZy1v ci1wYXR0ZXJuLCBzZWVrcyB0byB0aGUgZmlyc3QgbGluZQorICAgICAgIGluIGFuIEZPUEVOJ2Qg ZmlsZSB0aGF0IGNvbnRhaW5zIHRoZSBnaXZlbiBzdHJpbmcgb3IgbWF0Y2hlcyB0aGUKKyAgICAg ICBnaXZlbiBwYXR0ZXJuLiBFeGFtcGxlOiBTdXBwb3NlIHlvdSBoYXZlIGEgZmlsZSBvZiBsaW5l cyBsaWtlIHRoaXM6CisKKyAgICAgcXVhbnRpdHkgICBkZXNjcmlwdGlvbi4uLgorICAgICAgIGlu IHdoaWNoIHRoZSBmaXJzdCAid29yZCIgaXMgYSBudW1iZXIsIGZvbGxvd2VkIGJ5IGEgZGVzY3Jp cHRpb24KKyAgICAgICAoZm9yIGV4YW1wbGUsIHRoZSBuYW1lIG9mIGFuIGl0ZW0pLiBIZXJlIGlz IGhvdyB0byB1c2UgRlNFRUsgdG8KKyAgICAgICBxdWlja2x5IGdldCB0aGUgdG90YWwgcXVhbnRp dHkgb2YgYW55IGdpdmVuIGl0ZW0sIHdoaWNoIGlzIHBhc3NlZAorICAgICAgIGFzIGEgcGFyYW1l dGVyIChlaXRoZXIgYSBsaXRlcmFsIHN0cmluZyBvciBhIHBhdHRlcm4pIG9uIHRoZQorICAgICAg IGNvbW1hbmQgbGluZToKKworIyEvdXNyL2xvY2FsL2Jpbi9rZXJtaXQgKworaWYgbm90IGRlZiBc JTEgZXhpdCAxIFVzYWdlOiBcZmJhc2VuYW1lKFwlMCkgc3RyaW5nLW9yLXBhdHRlcm4KKworLmZp bGVuYW1lID0gL3Vzci9sb2NhbC9kYXRhL2l0ZW1zLmxvZyAgICAgICAgIyBTdWJzdGl0dXRlIHRo ZSBhY3R1YWwgZmlsZW5hbWUKK3NldCBjYXNlIG9mZiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICMgU2VhcmNoZXMgYXJlIGNhc2UtaW5kZXBlbmRlbnQKK2ZvcGVuIC9yZWFkIFwlYyBc bShmaWxlbmFtZSkgICAgICAgICAgICAgICAgICMgT3BlbiB0aGUgZmlsZQoraWYgZmFpbCBleGl0 IDEgIlxtKGZpbGVuYW1lKTogXHYoZXJyc3RyaW5nKSIgIyBGYWlsOiBleGl0IHdpdGggZXJyb3Ig bWVzc2FnZQorLnRvdGFsID0gMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBP SzogSW5pdGlhbGl6ZSB0aGUgdG90YWwKK2VjaG8gU2VhcmNoaW5nICJcJTEiLi4uCisKK3doaWxl IHRydWUgeworICAgIGZzZWVrIC9saW5lIC9yZWxhdGl2ZSAvZmluZDpcJTEgXCVjIDAgICAgIyBH ZXQgbmV4dCBsaW5lIHRoYXQgaGFzIHRhcmdldAorICAgIGlmIGZhaWwgYnJlYWsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIyBGYWlsdXJlIGluZGljYXRlcyBFT0YKKyAgICBmcmVhZCAvbGlu ZSBcJWMgbGluZSAgICAgICAgICAgICAgICAgICAgICMgUmVhZCBpdAorICAgIGlmIGZhaWwgYnJl YWsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAoc2hvdWxkbid0IGhhcHBlbikKKyAgICBp bmNyZW1lbnQgdG90YWwgXGZ3b3JkKFxtKGxpbmUpLDEpICAgICAgICMgSW5jcmVtZW50IHRoZSB0 b3RhbAorfQorZmNsb3NlIFwlYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBD bG9zZSB0aGUgZmlsZQorZWNobyBUb3RhbCBmb3IgIlwlMSIgOiBcbSh0b3RhbCkgICAgICAgICAg ICAgIyBQcmludCB0aGUgcmVzdWx0CitleGl0IDAKKworICAgICAgIFRoZSBzeW50YXggb2YgdGhl IEZTRUVLIGNvbW1hbmQgaW4gdGhpcyBleGFtcGxlIGluZGljYXRlcyB0aGF0IGVhY2gKKyAgICAg ICBzZWFyY2ggc2hvdWxkIHN0YXJ0IHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IGZpbGUgbGluZS4g U2luY2UgS2VybWl0CisgICAgICAgaXMgYW4gaW50ZXJwcmV0aXZlIGxhbmd1YWdlLCBGU0VFSyBp cyBhIGxvdCBmYXN0ZXIgdGhhbiBGUkVBRCdpbmcKKyAgICAgICBlYWNoIGxpbmUgYW5kIGNoZWNr aW5nIGl0IGZvciB0aGUgdGFyZ2V0LCBlc3BlY2lhbGx5IGZvciBiaWcgZmlsZXMuCisgICAgICAg QW4gZXNwZWNpYWxseSBoYW5keSB1c2UgZm9yIEZTRUVLIGlzIGZvciB1c2Ugd2l0aCBwb3RlbnRp YWxseSBodWdlCisgICAgICAgc2VxdWVudGlhbGx5IHRpbWVzdGFtcGVkIGxvZ3MsIHRvIHNlZWsg ZGlyZWN0bHkgdG8gdGhlIGRhdGUtdGltZQorICAgICAgIHdoZXJlIHlvdSB3YW50IHRvIHN0YXJ0 IHByb2Nlc3NpbmcuIFNvbWUgb3RoZXIgaW1wcm92ZW1lbnRzIGZvciB0aGUKKyAgICAgICBGT1BF Ti9GUkVBRC9GV1JJVEUvRkNMT1NFIGZhbWlseSBvZiBjb21tYW5kcyBhcmUgaW5jbHVkZWQgYWxz bworICAgICAgIChwZXJmb3JtYW5jZSwgYnVnIGZpeGVzLCBjb252ZW5pZW5jZSBmZWF0dXJlcyks IGxpc3RlZCBpbiB0aGUKKyAgICAgICBbNzFdY2hhbmdlIGxvZy4gKFByaW9yIHRvIDkuMC4yOTkg QWxwaGEuMDIsIHRoZSBGU0VFSyAvRklORDoKKyAgICAgICBjb21tYW5kIGFsd2F5cyBzdGFydGVk IGZyb20gdGhlIHRvcC4pCisgICAgICogTUlNRSBzeW5vbnltcyBmb3IgY2hhcmFjdGVyLXNldCBu YW1lczogQSBuZXcgZXF1aXZhbGVuY2UgYmV0d2VlbgorICAgICAgIE1JTUUgbmFtZXMgYW5kIEtl cm1pdCBuYW1lcyBmb3IgY2hhcmFjdGVyIHNldHMsIHdpdGggYSBuZXcgdGFibGUKKyAgICAgICBz aG93aW5nIHRoZSBzdXBwb3J0ZWQgc2V0cyBbNzJdSEVSRSAodGhpcyBmZWF0dXJlIGlzIGFsc28K KyAgICAgICBpbGx1c3RyYXRlZCBpbiB0aGUgWzczXVdlYmxvZyBzY3JpcHQpLgorICAgICAqIFVu aXggQy1LZXJtaXQgU0VUIFRFUk1JTkFMIFRZUEUgbm93IHBhc3NlcyBpdHMgYXJndW1lbnRzIHRv CisgICAgICAgc3VicHJvY2Vzc2VzIGFzIGFuIGVudmlyb25tZW50IHZhcmlhYmxlLgorICAgICAq IFNFVCBTRVNTSU9OLUxPRyBURVhUIG5vdyBzdHJpcHMgb3V0IEFOU0kgZXNjYXBlIHNlcXVlbmNl cyBmcm9tIHRoZQorICAgICAgIHNlc3Npb24gbG9nLgorICAgICAqIEZvciBpbnRlcmFjdGluZyB3 aXRoIFBPUCBzZXJ2ZXJzIG92ZXIgY2xlYXItdGV4dCBvciBTU0wtc2VjdXJlZAorICAgICAgIGNv bm5lY3Rpb25zOgorICAgICAgICAgICsgTmV3IFNTTCBhbmQgVExTICJyYXciIGNvbm5lY3Rpb25z IChubyBUZWxuZXQgcHJvdG9jb2wpLgorICAgICAgICAgICsgTmV3IElOUFVUIGNvbW1hbmQgb3B0 aW9ucyBmb3IgcmVhZGluZyBhbmQgY2FwdHVyaW5nIChwZXJoYXBzCisgICAgICAgICAgICB3aGls ZSBzY2FubmluZykgY29udGludW91cyBpbmNvbWluZyB0ZXh0LCBzdWNoIGFzIElOUFVUCisgICAg ICAgICAgICAvTk9XUkFQIChleHBsYWluZWQgWzc0XUhFUkUpLgorICAgICAgICAgICsgTmV3IFxm ZW1haWxhZGRyZXNzKCkgY29tbWFuZCB0byBleHRyYWN0IHRoZSBlLW1haWwgYWRkcmVzcworICAg ICAgICAgICAgZnJvbSBhbiBJbnRlcm5ldCBtYWlsIG1lc3NhZ2UgVG86IG9yIEZyb206IGxpbmUs IHVzZWQgaW4KKyAgICAgICAgICAgIGZldGNoaW5nIG1haWwgZnJvbSBQT1Agc2VydmVycy4KKyAg ICAgICAgICArIEltcHJvdmVkIGRhdGUgcGFyc2luZyBjb21tYW5kcyBhbmQgZnVuY3Rpb25zIGZv ciBwYXJzaW5nIHRoZQorICAgICAgICAgICAgZGlmZmVyZW50IGRhdGUgZm9ybWF0cyB0aGF0IGNh biBhcHBlYXIgaW4gZS1tYWlsLgorICAgICAgICAgICsgUHJvZHVjdGlvbiBzY3JpcHRzIGZvciBm ZXRjaGluZyBtYWlsIGZyb20gYSBzZWN1cmUgUE9QIHNlcnZlciwKKyAgICAgICAgICAgIGF2YWls YWJsZSBbNzVdSEVSRS4KKyAgICAgKiBWYXJpb3VzIGZlYXR1cmVzIGFkZGVkIHRvIG1ha2UgS2Vy bWl0IG1vcmUgdXNlZnVsIGZvciB3cml0aW5nIENHSQorICAgICAgIHNjcmlwdHMgc3VjaCBhcyBJ TlBVVCAvQ09VTlQ6biB0byBJTlBVVCBleGFjdGx5IG4gY2hhcmFjdGVycworICAgICAgICh1c2Vm dWwgZm9yIHJlYWRpbmcgZm9ybSBkYXRhKS4KKyAgICAgKiBOZXcgXGZwaWN0dXJlaW5mbygpIGZ1 bmN0aW9uIGZvciBnZXR0aW5nIG9yaWVudGF0aW9uIGFuZCBkaW1lbnNpb25zCisgICAgICAgb2Yg SlBHIGFuZCBHSUYgaW1hZ2VzLCBkZXNjcmliZWQgWzc2XUhFUkUuCisgICAgICogTmV3IFxmZ2V0 cGlkaW5mbygpIGZ1bmN0aW9uIGZvciB0ZXN0aW5nIHdoZXRoZXIgYSBnaXZlbiBwcm9jZXNzCisg ICAgICAgZXhpc3RzLgorICAgICAqIFxma3dkdmFsdWUoKSBmdW5jdGlvbiBmaXhlZCB0byBhbGxv dyBtdWx0aXdvcmQgdmFsdWVzLgorICAgICAqIE5ldyBmdW5jdGlvbiBcZmNvdW50KHMxLHMyKSB0 byB0ZWxsIHRoZSBudW1iZXIgb2Ygb2NjdXJyZW5jZXMgb2YgczEKKyAgICAgICBpbiBzMi4KKyAg ICAgKiBOZXcgXGZsb3B4KCkgZnVuY3Rpb24gcmV0dXJucyByaWdodG1vc3QgZmllbGQgZnJvbSBz dHJpbmcgKHN1Y2ggYXMKKyAgICAgICBhIGZpbGUncyBleHRlbnNpb24pLgorICAgICAqIE5ldyBm dW5jdGlvbiBcZmZ1bmN0aW9uKHMxKSB0byB0ZWxsIHdoZXRoZXIgYSBidWlsdC1pbiBzMSBmdW5j dGlvbgorICAgICAgIGV4aXN0cy4KKyAgICAgKiBOZXcgXGZzcXVlZXplKHMxKSBmdW5jdGlvbiBy ZW1vdmVzIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRlc3BhY2UKKyAgICAgICBmcm9tIHN0cmlu ZyBzMSwgY2hhbmdlcyB0YWJzIHRvIHNwYWNlcywgc3F1ZWV6aW5nIGVhY2ggcnVuIG9mCisgICAg ICAgcmVwZWF0ZWQgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzIHRvIGEgc2luZ2xlIHNwYWNlLgorICAg ICAqIENvbXBhY3Qgc3Vic3RyaW5nIG5vdGF0aW9uOiBccyhzb21lc3RyaW5nWzEyOjE4XSkgaXMg dGhlIHNhbWUgYXMKKyAgICAgICBcZnN1YnN0cmluZyhcbShzb21lc3RyaW5nKSwxMiwxOCksIGku ZS4gdGhlIHN1YnN0cmluZyBzdGFydGluZyBhdAorICAgICAgIHBvc2l0aW9uIDEyLCAxOCBjaGFy YWN0ZXJzIGxvbmcuIFxzKHNvbWVzdHJpbmdbMTJfMThdKSBtZWFucworICAgICAgIGNoYXJhY3Rl cnMgMTIgdGhyb3VnaCAxOCBvZiB0aGUgc3RyaW5nICg3IGNoYXJhY3RlcnMpLiBBbHNvLAorICAg ICAgIFxzKHNvbWVzdHJpbmdbMTcuXSkgcmV0dXJucyBjaGFyYWN0ZXIgbnVtYmVyIDE3IG9mIHNv bWVzdHJpbmcuCisgICAgICogVGhlIHN0cmluZyBpbmRleGluZyBmdW5jdGlvbnMgbm93IGFjY2Vw dCBhbiBvcHRpb25hbCB0cmFpbGluZworICAgICAgIGFyZ3VtZW50IHNwZWNpZnlpbmcgdGhlIG9j Y3VycmVuY2UgbnVtYmVyIG9mIHRoZSB0YXJnZXQgc3RyaW5nLgorICAgICAgIExpa2V3aXNlLCBc ZndvcmQoKSBjYW4gZmV0Y2ggd29yZHMgZnJvbSB0aGUgcmlnaHQgYXMgd2VsbCBhcyB0aGUKKyAg ICAgICBsZWZ0LgorICAgICAqIFRoZSBDT1BZIGNvbW1hbmQgaW4gVW5peCBDLUtlcm1pdCBoYXMg YSBuZXcgL1BSRVNFUlZFIHN3aXRjaCwKKyAgICAgICBlcXVpdmFsZW50IHRvIFVuaXggImNwIC1w Ii4KKyAgICAgKiBBU0tRIC9FQ0hPOmMgY2FuIGJlIHVzZWQgdG8gbWFrZSB0aGUgY2hhcmFjdGVy cyB0aGUgdXNlciB0eXBlcyBlY2hvCisgICAgICAgYXMgdGhlIGNoYXJhY3RlciBjLCBlLmcuIGFz dGVyaXNrIHdoZW4gdHlwaW5nIGEgcGFzc3dvcmQuCisgICAgICogSUYgTElOSyBmaWxlbmFtZSB0 byB0ZXN0IGlmIHRoZSBmaWxlbmFtZSBpcyBhIHN5bWxpbmsuCisgICAgICogQ3RybC1LLCB3aGVu IHR5cGVkIGF0IHRoZSBjb21tYW5kIHBhcnNlciwgcmVwbGFjZXMgaXRzZWxmIHdpdGggbW9zdAor ICAgICAgIHJlY2VudGx5IGVudGVyZWQgZmlsZSBzcGVjaWZpY2F0aW9uLgorICAgICAqIEluIFVu aXgsIHRoZSBhYmlsaXR5IHRvIGxvZyBhIHRlcm1pbmFsIHNlc3Npb24gdG8gYSBzZXJpYWwgcG9y dCwKKyAgICAgICBmb3IgdXNlIHdpdGggc3BlYWtpbmcgZGV2aWNlcyBvciBzZXJpYWwgcHJpbnRl cnM7IGRlc2NyaWJlZAorICAgICAgIFs3N11IRVJFLiBBbHNvIGZvciB0aGUgc2FtZSBwdXJwb3Nl LCBTRVQgU0VTU0lPTi1MT0cKKyAgICAgICBOVUxMLVBBRERFRC1MSU5FUyBmb3IgYSBzcGVlY2gg c3ludGhlc2l6ZXIgdGhhbiBuZWVkZWQgdGhpcy4KKyAgICAgKiBBZGFwdGF0aW9uIHRvIE9wZW5T U0wgMC45LjggYW5kIDEuMC4wLgorICAgICAqIExpZnRlZCB0aGUgcmVzdHJpY3Rpb24gb24gaGF2 aW5nIGEgcmVtb3RlIEtlcm1pdCBwcm9ncmFtIHNlbmQKKyAgICAgICBSRU1PVEUgY29tbWFuZHMg dG8gdGhlIGxvY2FsLiBBIHZlcnkgYmlnIGV4LWNsaWVudCBuZWVkZWQgdG8gYmUKKyAgICAgICBh YmxlIHRvIGRvIHRoaXMgKGJyYW5jaGVzIHdvdWxkIGNvbm5lY3QgdG8gaGVhZHF1YXJ0ZXJzIGFu ZCB1cGxvYWQKKyAgICAgICBmaWxlczsgSFEgd291bGQgdGhlbiBkb3dubG9hZCBwYXRjaGVzLCBh IFJFTU9URSBIT1NUIGNvbW1hbmQgd2FzCisgICAgICAgbmVjZXNzYXJ5IHRvIGFsbG93IHRoZSBy ZW1vdGUgaGVhZHF1YXJ0ZXJzIG1hY2hpbmVzIHRvIGluc3RhbGwgdGhlCisgICAgICAgcGF0Y2hl cyBvbiB0aGUgbG9jYWwgY2xpZW50OyBvZiBjb3Vyc2UgdGhlIGNsaWVudCBmaXJzdCBoYXMgdG8K KyAgICAgICBFTkFCTEUgSE9TVCBiZWNhdXNlIHRoaXMgaXMgYSByaXNreSBzY2VuYXJpbykuIFRo ZSByZWFzb24gZm9yIHRoZQorICAgICAgIHJlc3RyaWN0aW9uIHdhcyB0aGF0IHRoZSBzZXJ2ZXIs IHVwb24gcmVjZWl2aW5nIGFueSBSRU1PVEUgY29tbWFuZAorICAgICAgIHdvdWxkIHNlbmQgdGhl IHJlc3VsdHMgKG91dHB1dCkgYmFjayB0byB0aGUgY2xpZW50IGFzIGEgZmlsZQorICAgICAgIHRy YW5zZmVyIHdpdGggImRlc3RpbmF0aW9uIHNjcmVlbiIsIGJ1dCBvZiBjb3Vyc2UgdGhlIHJlbW90 ZSBoYXMgbm8KKyAgICAgICBzY3JlZW4uCisgICAgICogQWRkZWQgWE1FU1NBR0UsIHdoaWNoIGlz IHRvIFs3OF1NRVNTQUdFIGFzIFhFQ0hPIGlzIEVDSE86IGl0CisgICAgICAgb3V0cHV0cyBhIHN0 cmluZyB3aXRoIG5vIGxpbmUgdGVybWluYXRvciBERUJVRyBNRVNTQUdFIGlzIE9OLgorICAgICAq IEZpeGVkIFxmcmVjdXJzZSgpIHRvIG5vdCBkdW1wIGNvcmUgd2hlbiBpbnZva2VkIHdpdGggbm8g YXJndW1lbnRzLgorICAgICAqIEltcHJvdmVkIHRleHQgZm9yIEhFTFAgRlVOQ1RJT04gU1BMSVQg YW5kIEhFTFAgRlVOQ1RJT04gV09SRC4KKyAgICAgKiBQYXRjaGVzIGZvciBEZWJpYW4gNi4wICJT cXVlZXplIiBmcm9tIElhbiBCZWNrd2l0aC4KKyAgICAgKiBcZmNvbnRlbnRzKFwmYVszXSkgZ290 IGFuIGVycm9yIGlmIHRoZSBhcnJheSB3YXMgZGVjbGFyZWQgYnV0IGl0cworICAgICAgIGRpbWVu c2lvbiB3YXMgbGVzcyB0aGFuIDMuIE5vdyBpdCBzaW1wbHkgcmV0dXJucyBhbmQgZW1wdHkgc3Ry aW5nLgorICAgICAqIFxmc3BsaXQoKSwgd2hlbiBwYXJzaW5nIGxpbmVzIGZyb20gQ1NWIGFuZCBU U1YgZmlsZXMsIHdhcyB0cmVhdGluZworICAgICAgIGJhY2tzbGFzaCBpbiB0aGUgZGF0YSB0aGUg c2FtZSB3YXkgaXQgdHJlYXRzIGJhY2tzbGFzaCBpbiBLZXJtaXQKKyAgICAgICBjb21tYW5kcy4g VGhpcyB3YXMgZml4ZWQgdG8gdHJlYXQgYmFja3NsYXNoIGxpa2UgYW55IG90aGVyCisgICAgICAg Y2hhcmFjdGVyLgorICAgICAqIEJ1aWxkcyBmb3IgU29sYXJpcyA5IGFuZCBsYXRlciBub3cgdXNl IHN0cmVhbXMgcHR5cyByYXRoZXIgdGhlbiB0aGUKKyAgICAgICBvbGQgQlNELXN0eWxlIHB0eXMu IFRoYW5rcyB0byBHYXJ5IE1pbGxzIGZvciB0aGlzIG9uZSwgd2hvIG5vdGljZWQKKyAgICAgICB0 aGF0IGhlIGNvdWxkbid0IGhhdmUgbW9yZSB0aGFuIDQ4IEMtS2VybWl0IFNTSCBzZXNzaW9ucyBn b2luZyBhdAorICAgICAgIG9uY2UgYW5kIGZpZ3VyZWQgb3V0IHdoeS4KKyAgICAgKiBBcyBub3Rl ZCBbNzldYmVsb3cgREVTIGVuY3J5cHRpb24gaXMgYmVpbmcgcmV0aXJlZCBmcm9tIG1hbnkKKyAg ICAgICBwbGF0Zm9ybXMgYW5kIGxpYnJhcmllcyB0aGF0IG9uY2UgdXNlZCBpdC4gSSBjaGFuZ2Vk IHRoZSBTb2xhcmlzCisgICAgICAgYW5kIExpbnV4IE9wZW5TU0wgYnVpbGRzIHRvIGFjY291bnQg Zm9yIHRoaXMgYnkgdGVzdGluZyBmb3IgaXQuIEkKKyAgICAgICBwcm9iYWJseSBzaG91bGQgYWxz byBhZGQgYSBPTUlUREVTIG9wdGlvbiB0byBvbWl0IERFUyBldmVuIGlmIGl0IGlzCisgICAgICAg aW5zdGFsbGVkLCBidXQgIktGTEFHUz0tVUNLX0RFUyIgc2VlbXMgdG8gZG8gdGhlIGpvYiBmb3Ig bm93LgorICAgICAqIEkgY2hhbmdlZCB0aGUgTGludXggYnVpbGQgdG8gdGVzdCBmb3IgdGhlIE9w ZW5TU0wgdmVyc2lvbiAobGlrZSB0aGUKKyAgICAgICBTb2xhcmlzIHZlcnNpb24gYWxyZWFkeSBk aWQpLCByYXRoZXIgdGhhbiBhc3N1bWluZyBPcGVuU1NMIDAuOS43LgorICAgICAqIEEgY291cGxl IG1pbm9yIGNoYW5nZXMgZm9yIFRydTY0IFVuaXggNS4xQiBmcm9tIFN0ZXZlbiBTY2h3ZWRhIGJ1 dAorICAgICAgIHdlIHN0aWxsIGhhdmUgc29tZSB0cm91YmxlIG9uIHRoYXQgcGxhdGZvcm0uIEFz IGEgd29ya2Fyb3VuZCAibWFrZQorICAgICAgIG9zZjEiIGNhbiBiZSB1c2VkIHRoZXJlLgorICAg ICAqIFVuaXggbWFrZWZpbGUgYW5kIG1hbiBwYWdlIGFyZSBub3cgaW5jbHVkZWQgaW4gdGhlIFpp cAorICAgICAgIGRpc3RyaWJ1dGlvbi4KKyAgICAgKiBcZmpvaW4oKSwgd2hpY2ggaXMgdGhlIGlu dmVyc2UgZnVuY3Rpb24gb2YgZnNwbGl0KCkgbm93IGFjY2VwdHMgQ1NWCisgICAgICAgYW5kIFRT ViBhcyBhIHNlY29uZCBhcmd1bWVudCwgdG8gdHJhbnNmb3JtIGFuIGFycmF5IGludG8gYQorICAg ICAgIGNvbW1hLXNlcGFyYXRlZCBvciB0YWItc2VwYXJhdGVkIHZhbHVlIGxpc3QsIGFzIGRlc2Ny aWJlZCBbODBdSEVSRS4KKyAgICAgKiBFdmVuIGluIDIwMTAsIFVuaXggZGlzdHJpYnV0aW9ucyBj b250aW51ZSB0byBjaGFuZ2UgdGhlaXIgVVVDUAorICAgICAgIGxvY2tmaWxlIGNvbnZlbnRpb25z LiBDLUtlcm1pdCA5LjAgY29udGFpbnMgc3VwcG9ydCBmcm9tIEpvb3AKKyAgICAgICBCb29uZW4g Zm9yIE9wZW5TdVNFID49IDExLjMgYW5kIHJlY2VudCBEZWJpYW4sIHdoaWNoIG5vIGxvbmdlciBo YXZlCisgICAgICAgYmF1ZGJveS5oLCB3aGljaCBmaXJzdCBhcHBlYXJlZCBpbiBSZWQgSGF0IDcu MiBpbiAyMDAzLgorICAgICAqIEZyb20gTGV3aXMgTWNDYXJ0aHk6CisKKyAgICAgQmFzZWQgb24g Y29kZSBpbnNwZWN0aW9uLCBDLUtlcm1pdCBhcHBlYXJzIHRvIGhhdmUgYW4gU1NMLXJlbGF0ZWQK KyAgICAgc2VjdXJpdHkgdnVsbmVyYWJpbGl0eSBhbmFsb2dvdXMgdG8gdGhhdCBpZGVudGlmaWVk IGFzIENWRS0yMDA5LTM3NjcKKyAgICAgKHNlZSBlLmcuCisgICAgIFs4MV1odHRwOi8vY3ZlLm1p dHJlLm9yZy9jZ2ktYmluL2N2ZW5hbWUuY2dpP25hbWU9Q1ZFLTIwMDktMzc2NykuCisKKyAgICAg SSdtIGF0dGFjaGluZyBhIHBhdGNoIGZvciB0aGlzIGlzc3VlIHJlbGF0aXZlIHRvIHRoZSByZXZp c2lvbiBvZgorICAgICBja19zc2wuYyBvYnRhaW5lZCBmcm9tIGEgY29weSBvZgorICAgICBbODJd aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Z0cC90ZXN0L3Rhci94LnppcCBkb3dubG9h ZGVkIG9uCisgICAgIDIwMTAvMDcvMzAsIHdoaWNoIEkgYmVsaWV2ZSBpcyB0aGUgbGF0ZXN0Lgor ICAgICBXaGVuIHRoaXMgZmxhdyB3YXMgZmlyc3Qgd2lkZWx5IHB1YmxpY2l6ZWQgYXQgbGFzdCB5 ZWFyJ3MgQmxhY2sgSGF0CisgICAgIGNvbmZlcmVuY2UsIGl0IHdhcyBjbGFpbWVkIHRoYXQgc29t ZSBwdWJsaWMgY2VydGlmaWNhdGUgYXV0aG9yaXRpZXMKKyAgICAgaGFkIGluZGVlZCBpc3N1ZWQg Y2VydGlmaWNhdGVzIHRoYXQgY291bGQgYmUgdXNlZCB0byBleHBsb2l0IHRoaXMKKyAgICAgY2xh c3Mgb2YgdnVsbmVyYWJpbGl0eS4gQXMgZmFyIGFzIEkga25vdyB0aGV5IGhhdmUgbm90IHJldmVh bGVkCisgICAgIHNwZWNpZmljYWxseSB3aGljaCBwdWJsaWMgQ0EocykgaGFkIGJlZW4gZm91bmQg aXNzdWluZyBzdWNoCisgICAgIGNlcnRpZmljYXRlcy4gU29tZSByZWZlcmVuY2VzOgorICAgICAg ICAgICsgWzgzXWh0dHA6Ly93d3cubXNlY2xhYi5jb20vP3A9MTgwCisgICAgICAgICAgKyBbODRd aHR0cDovL3d3dy50aGVyZWdpc3Rlci5jby51ay8yMDA5LzA3LzMwL3VuaXZlcnNhbF9zc2xfY2Vy dAorICAgICAgICAgICAgaWZpY2F0ZS8KKworICAgICAqIFBldGVyIEVpY2hob3JuIHJlcG9ydGVk IHRoYXQgIlJFTkFNRSAuLi94IC4iIGRpZG4ndCB3b3JrOyBmaXhlZAorICAgICAgIG5vdy4KKyAg ICAgKiBJZiBvbmx5IG9uZSBmaWxlIGlzIEZPUEVOJ2QsIEZDTE9TRSBnaXZlbiB3aXRoIG5vIGFy Z3VtZW50cyB3b3VsZAorICAgICAgIGNsb3NlIGl0OyB0aGlzIHdhcyBhICJjb252ZW5pZW5jZSBm ZWF0dXJlIiB0aGF0IHR1cm5lZCBvdXQgdG8gYmUKKyAgICAgICBkYW5nZXJvdXMuIEZvciBzYWZl dHkgRkNMT1NFIGhhcyB0byByZXF1aXJlIGEgc3BlY2lmaWMgY2hhbm5lbAorICAgICAgIG51bWJl ciBvciB0aGUgd29yZCBBTEwuCisgICAgICogQWRkZWQgXGZzdHJjbXAoczEsczIsY2FzZSxzdGFy dCxsZW5ndGgpLCB3aGljaCBoYXMgdGhlIGFkdmFudGFnZQorICAgICAgIG92ZXIgSUYgRVFVLExH VCxMTFQgdGhhdCBjYXNlIHNlbnNpdGl2aXR5IGNhbiBiZSBzcGVjaWZpZWQgYXMgYQorICAgICAg IGZ1bmN0aW9uIGFyZywgYW5kIGFsc28gc3Vic3RyaW5ncyBjYW4gYmUgc3BlY2lmaWVkLgorICAg ICAqIE5ldyBidWlsdC1pbiBmdW5jdGlvbnM6CisKKyAgICAgICAgXGZjdnRjc2V0cyhzdHJpbmcs Y3MxLGNzMikKKyAgICAgICAgICAgICAgICBGdW5jdGlvbiB0byBjb252ZXJ0IGEgc3RyaW5nIGZy b20gb25lIGNoYXJhY3RlciBzZXQgdG8KKyAgICAgICAgICAgICAgICBhbm90aGVyLgorCisgICAg ICAgIFxmZGVjb2RlaGV4KHN0cmluZ1sscHJlZml4XSkKKyAgICAgICAgICAgICAgICBGdW5jdGlv biB0byBkZWNvZGUgYSBzdHJpbmcgY29udGFpbmluZyBoZXggZXNjYXBlcy4KKworICAgICAgICBc ZnN0cmluZ3R5cGUoc3RyaW5nKQorICAgICAgICAgICAgICAgIEZ1bmN0aW9uIHRvIHRlbGwgd2hl dGhlciBhIHN0cmluZyBpcyA3LWJpdCwgOC1iaXQsIG9yCisgICAgICAgICAgICAgICAgVVRGLTgu CisKKyAgICAgICBGb3IgdGhlIG1vdGl2YXRpb24gZm9yIHRoZXNlIGZlYXR1cmVzIGFuZCBhbiBh cHBsaWNhdGlvbiB0aGF0IHVzZXMKKyAgICAgICB0aGVtIHRvIGFuYWx5emUgd2ViIGxvZ3MsIHNl ZSB0aGUgV2VibG9nIHNjcmlwdCBiZWxvdy4KKyAgICAgKgorCisgICAgICAgIExhenkgSUYgQ29u ZGl0aW9uczogTm93IHlvdSBjYW4gZG8gdGhpczoKKyAgICAgICAgICAgICAgICBkZWZpbmUgZm9v IHNvbWUgbnVtYmVyCisgICAgICAgICAgICAgICAgaWYgZm9vIGNvbW1hbmQKKworICAgICAgICBp bnN0ZWFkIG9mIHRoaXM6CisgICAgICAgICAgICAgICAgZGVmaW5lIGZvbyBzb21lIG51bWJlcgor ICAgICAgICAgICAgICAgIGlmIFxtKGZvbykgY29tbWFuZAorCisgICAgICAgT2YgY291cnNlIHRo ZSBvbGQgd2F5IHN0aWxsIHdvcmtzIHRvby4gQnV0IHdhdGNoIG91dCBiZWNhdXNlIGlmIHRoZQor ICAgICAgIHZhcmlhYmxlIG5hbWUgaXMgdGhlIHNhbWUgYXMgYSBzeW1ib2xpYyBJRiBjb25kaXRp b24gKGZvciBleGFtcGxlCisgICAgICAgQ09VTlQpLCBpdCB3b24ndCBkbyB3aGF0IHlvdSBleHBl Y3RlZC4gKElGIENPVU5UIHdhcyB1c2VkIGZvciBsb29wCisgICAgICAgY29udHJvbCBpbiBlYXJs eSB2ZXJzaW9ucyBvZiBNUy1ET1MgS2VybWl0LCBiZWZvcmUgaXQgZ290IHJlYWwgRk9SCisgICAg ICAgYW5kIFdISUxFIGxvb3BzOyBpdCB3YXMgYWRkZWQgdG8gQy1LZXJtaXQgZm9yIGNvbXBhdGli aWxpdHksIGFuZCBpdAorICAgICAgIGNhbid0IGJlIHJlbW92ZWQgYmVjYXVzZSB0aGF0IGNvdWxk IGJyZWFrIGV4aXN0aW5nIHNjcmlwdHMpLgorICAgICAqIEVzY2FwZSBzZXF1ZW5jZXMgYXJlIG5v dyBzdHJpcHBlZCBmcm9tIHRleHQtbW9kZSBzZXNzaW9uIGxvZ3Mgbm90CisgICAgICAgb25seSBp biBDT05ORUNUIHNlc3Npb25zIGJ1dCBhbHNvIGluIHdoYXRldmVyIGlzIGxvZ2dlZCBieSB0aGUK KyAgICAgICBJTlBVVCBjb21tYW5kOyBkZXNjcmliZWQgaW4gdGhlIFs4NV1uZXh0IHNlY3Rpb24u CisgICAgICogTmV3IGNvbW1hbmRzIGZvciBzZWxlY3RpdmVseSBpc3N1aW5nIHByb2dyZXNzIG9y IGRlYnVnZ2luZyBtZXNzYWdlcworICAgICAgIGZyb20gc2NyaXB0cywgYWxzbyBkZXNjcmliZWQg aW4gdGhlIG5leHQgc2VjdGlvbi4KKyAgICAgKiBGaXggZnJvbSBbODZdSm9obiBEdW5sYXAgdG8g cHJldmVudCB0aGUgZml4ZWQgcGFja2V0LXRpbWVvdXQKKyAgICAgICBpbnRlcnZhbCBmcm9tIGdv aW5nIHRvIGFuIHVuZXhwZWN0ZWQgdmFsdWUuCisgICAgICogQWxwaGEuMDQgZml4ZXMgYSBwcm9i bGVtIHdpdGggRlRQIGNvbm5lY3Rpb25zIG1hZGUgZnJvbSA2NC1iaXQgVW5peAorICAgICAgIHBs YXRmb3Jtcy4gQWxsIHRoZSBvdGhlciBjaGFuZ2VzIGluIHRoaXMgc2VjdGlvbiB3ZXJlIHRvIEFs cGhhLjAzLgorICAgICAqIFJlbGF1bmNoaW5nIGEgY2xvc2VkIFNTSCBjb25uZWN0aW9uIHdpdGgg dGhlIENPTk5FQ1QgY29tbWFuZCBpcyBub3cKKyAgICAgICBwb3NzaWJsZSwgYXMgaXQgYWx3YXlz IGhhcyBiZWVuIHdpdGggVGVsbmV0IGFuZCBvdGhlciBjb25uZWN0aW9uCisgICAgICAgdHlwZXM7 IHN1Z2dlc3RlZCBieSBQZXRlciBFaWNoaG9ybiAobmVlZHMgdGVzdGluZykuCisgICAgICogQSBz eW1ib2wgY29uZmxpY3QgZml4ZWQgdGhhdCBwcmV2ZW50ZWQgc3VjY2Vzc2Z1bCBidWlsZCBvbgor ICAgICAgIFs4N11GcmVlQlNEIDguMC4KKyAgICAgKiBGaXhlcyBmcm9tIENocmlzdGlhbiBDb3J0 aSBmb3IgYnVpbGRpbmcgb24gU3VuT1MgNC4xLgorICAgICAqIE5ldyBhaXhnIHRhcmdldCBmb3Ig YnVpbGRpbmcgb24gQUlYIHdpdGggZ2NjLgorICAgICAqIE5ldyBhaXgraWJtc3NsIHRhcmdldC4g VGhpcyBpcyBuaWNlIGJlY2F1c2UgdGhlIElCTS1zdXBwbGllZCBTU0wKKyAgICAgICBsaWJyYXJp ZXMgYW5kIGhlYWRlciBmaWxlcyBhcmUgaW4gYSBrbm93biBsb2NhdGlvbjsgbm8gbmVlZCB0bwor ICAgICAgIFs4OF1zZXQgZW52aXJvbm1lbnQgdmFyaWFibGVzIGdpdmluZyB0aGVpciBsb2NhdGlv bnMuCisgICAgICogIkxhcmdlIEZpbGUgU3VwcG9ydCIgaXMgbm93IGluY2x1ZGVkIGJ5IGRlZmF1 bHQgb24gQWxwaGEgYW5kIElBNjQKKyAgICAgICBoYXJkd2FyZSBvbiBWTVMgNy4zIGFuZCBsYXRl ciwgYW5kIGl0IHNob3VsZCB3b3JrIG11Y2ggYmV0dGVyIHRoYW4KKyAgICAgICBiZWZvcmUuCisg ICAgICogS2VybWl0J3MgaW50ZXJuYWwgRlRQIGNsaWVudCBpcyBub3cgaW5jbHVkZWQgYnkgZGVm YXVsdCBpbiBhbnkKKyAgICAgICBidWlsZCB0aGF0IGFsc28gaW5jbHVkZXMgVENQL0lQIG5ldHdv cmtpbmcuIEF0IHByZXNlbnQsIHRoZSBGVFAKKyAgICAgICBjbGllbnQgc2VlbXMgdG8gd29yayB3 ZWxsIGZvciBiaW5hcnktbW9kZSB0cmFuc2ZlcnM7IHRleHQgKEFTQ0lJKQorICAgICAgIG1vZGUg dHJhbnNmZXJzIHN0aWxsIG5lZWQgc29tZSB3b3JrLiBJbiBidWlsZHMgdGhhdCBhbHNvIGluY2x1 ZGUKKyAgICAgICBTZWN1cmUgU29ja2V0cyBMYXllciAoU1NMKSBzZWN1cml0eSAobmV4dCBpdGVt KSB0aGUgRlRQIGNsaWVudAorICAgICAgIHNob3VsZCBiZSBhYmxlIHRvIG1ha2Ugc2VjdXJlbHkg YXV0aGVudGljYXRlZCBhbmQgZW5jcnlwdGVkCisgICAgICAgY29ubmVjdGlvbnMuCisgICAgICog SW4gbmV0d29yayBidWlsZHMgdGhhdCByZXF1ZXN0IE9wZW5TU0wgc3VwcG9ydCwgZS5nLjoKKwor ICAgICAkIEBja3ZrZXIgICIiICAiIiAgIkNLX1NTTCIKKyAgICAgICB0aGUgT3BlblNTTCB2ZXJz aW9uIGlzIGRldGVjdGVkIGF1dG9tYXRpY2FsbHkgYW5kIHRoZSBhcHByb3ByaWF0ZQorICAgICAg IGNvbXBpbGUtdGltZSBvcHRpb25zIGFyZSBlbWl0dGVkIChzdWNoIGFzCisgICAgICAgT1BFTlNT TF9ESVNBQkxFX09MRF9ERVNfU1VQUE9SVCkuCisgICAgICogUHJlbGltaW5hcnkgLyBsaW1pdGVk IHN1cHBvcnQgZm9yIHRoZSBPRFMtNSBmaWxlIHN5c3RlbSBvbiBWTVMgNy4yCisgICAgICAgYW5k IGxhdGVyLCBBbHBoYSBhbmQgSXRhbml1bSBvbmx5IChuZWVkcyB0ZXN0aW5nKTogRmlsZW5hbWVz IGNhbiBiZQorICAgICAgIG1peGVkIGNhc2UgYW5kIGNhbiBiZSBsb25nZXIuCisgICAgICogU3Vw cG9ydCBmb3Igb2xkZXIgYW5kIG9sZGVyIFZNUyB2ZXJzaW9ucy4KKyAgICAgKiBJbiB0aGUgVk1T IGJ1aWxkIHByb2NlZHVyZSwgQ0tWS0VSLkNPTSwgdGhlICJpIiBvcHRpb24gaW4gUDEgbm93Cisg ICAgICAgbWVhbnMgZG9uJ3QgaW5jbHVkZSB0aGUgaW50ZXJuYWwgRlRQIGNsaWVudCwgYW5kIHRo ZSAiZiIgb3B0aW9uCisgICAgICAgbWVhbnMgZG8gbm90IGluY2x1ZGUgIkxhcmdlIEZpbGUiIHN1 cHBvcnQuIExhcmdlIEZpbGUgc3VwcG9ydCBpbgorICAgICAgIFZNUyByZWFsbHkgb25seSBhcHBs aWVzIHRvIHRoZSBmaWxlLXRyYW5zZmVyIGRpc3BsYXkgYW5kCisgICAgICAgc3RhdGlzdGljcywg d2hpY2ggd291bGQgZ28gb3V0IG9mIHdoYWNrIGFzIHNvb24gYXMgdGhlIGJ5dGUgY291bnQKKyAg ICAgICBvdmVyZmxvd2VkIDMxIGJpdHMgYmVjYXVzZSB0aGlzIGlzIEMtS2VybWl0LCBidWlsdCB3 aXRoIHRoZSBDCisgICAgICAgY29tcGlsZXIgYW5kIHRoZSBDIGxpYnJhcnkgKHJ1bnRpbWUgc3lz dGVtKSwgd2hpY2ggZGlkIG5vdCBzdXBwb3J0CisgICAgICAgbG9uZyBpbnRlZ2VycyB1bnRpbCBW TVMgNy4zLgorICAgICAqIFRoZSBbODldTElTUCBPcGVyYXRvciBST1VORCBub3cgdGFrZXMgYW4g b3B0aW9uYWwgc2Vjb25kIGFyZ3VtZW50CisgICAgICAgdGhhdCBzcGVjaWZpZXMgdGhlIG51bWJl ciBvZiBwbGFjZXMgdG8gcm91bmQgdG8sIGUuZy4KKyAgICAgICAoUk9VTkQgZG9sbGFycyAyKSBy b3VuZHMgZG9sbGFycyB0byAyIGRlY2ltYWwgcGxhY2VzLgorICAgICAqIEltcHJvdmVkIHBhdHRl cm4gbWF0Y2hpbmcgaW4gbWFueSBjb21tYW5kcyBmb3IgYm90aCBzdHJpbmdzIGFuZAorICAgICAg IGZpbGVuYW1lcy4KKyAgICAgKiBWYXJpb3VzIG1pbm9yIG5ldyBmZWF0dXJlcywgcGx1cyBudW1l cm91cyBidWcgZml4ZXMgYW5kIHNwZWVkdXBzLgorCitJbmNvbXBhdGliaWxpdGllcworCisgICBB IHRvcCBwcmlvcml0eSBmb3IgbmV3IEtlcm1pdCBzb2Z0d2FyZSByZWxlYXNlcyBoYXMgYWx3YXlz IGJlZW4KKyAgIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LiBBIHNjcmlwdCB3cml0dGVuIGZvciBh IHByZXZpb3VzIEtlcm1pdCByZWxlYXNlCisgICBzaG91bGQgcnVuIHRoZSBzYW1lIHdheSBpbiB0 aGUgbmV3IHJlbGVhc2UuCisKKyAgIFRoZXJlJ3Mgb25lIGV4Y2VwdGlvbiB0aGlzIHRpbWUuIFRo ZSBbOTBdXGZzcGxpdCgpIGZ1bmN0aW9uIGlzCisgICBpbmNyZWRpYmx5IGhhbmR5LCBpdCBjYW4g ZG8gYWxtb3N0IGFueXRoaW5nLCB1cCB0byBhbmQgaW5jbHVkaW5nCisgICBwYXJzaW5nIGEgTElT UCBwcm9ncmFtICh0aGUgdW5kZXJseWluZyBjb2RlIGlzIHRoZSBiYXNpcyBvZiB0aGUKKyAgIFs5 MV1TLUV4cHJlc3Npb24gaW50ZXJwcmV0ZXIpLiBCdXQgZGlkIHlvdSBldmVyIHRyeSB0byB1c2Ug aXQgdG8gcGFyc2UKKyAgIChzYXkpIGEgVGFiLVNlcGFyYXRlZC1MaXN0IChUU1YgZmlsZSkgb3Ig Q29tbWEtU2VwYXJhdGVkLUxpc3QgKENTVik/IEl0CisgICB3b3JrcyBhcyBleHBlY3RlZCBhcyBs b25nIGFzIHRoZSBkYXRhIGNvbnRhaW5zIG9ubHkgNy1iaXQgY2hhcmFjdGVycy4KKyAgIEJ1dCBp ZiB5b3VyIGRhdGEgY29udGFpbnMgKHNheSkgU3BhbmlzaCBvciBHZXJtYW4gb3IgUnVzc2lhbiB0 ZXh0CisgICB3cml0dGVuIGluIGFuIDgtYml0IGNoYXJhY3RlciBzZXQgc3VjaCBhcyBJU08gODg1 OS0xLCBldmVyeSA4LWJpdAorICAgY2hhcmFjdGVyIChhbnkgdmFsdWUgMTI4LTI1NSkgaXMgdHJl YXRlZCBhcyBhIGJyZWFrIGNoYXJhY3Rlci4gVGhpcyBpcworICAgZml4ZWQgaW4gQy1LZXJtaXQg OS4wIGJ5IHRyZWF0aW5nIGFsbCA4LWJpdCBieXRlcyBhcyAiaW5jbHVkZSIKKyAgIGNoYXJhY3Rl cnMgcmF0aGVyIHRoYW4gYnJlYWsgY2hhcmFjdGVycywgYSB0b3RhbCByZXZlcnNhbCBvZiBwYXN0 CisgICBiZWhhdmlvci4gSSBkb24ndCB0aGluayBpdCB3aWxsIGFmZmVjdCBhbnlvbmUgdGhvdWdo LCBiZWNhdXNlIGlmIHRoaXMKKyAgIGhhZCBoYXBwZW5lZCB0byBhbnlvbmUsIEkgd291bGQgaGF2 ZSBoZWFyZCBhYm91dCBpdCEKKworICAgU2luY2UgbW9zdCBzdGFuZGFyZCA4LWJpdCBjaGFyYWN0 ZXIgc2V0cyBoYXZlIGNvbnRyb2wgY2hhcmFjdGVycyBpbgorICAgcG9zaXRpb25zIDEyOC0xNjAs IGl0IG1pZ2h0IGhhdmUgbWFkZSBzZW5zZSB0byBrZWVwIDEyOC0xNjAgaW4gdGhlCisgICBicmVh ayBzZXQsIGJ1dCB3aXRoIHRoZSBwcm9saWZlcmF0aW9uIG9mIE1pY3Jvc29mdCBXaW5kb3dzIGNv ZGUgcGFnZXMsCisgICB0aGVyZSBpcyBubyB0ZWxsaW5nIHdoaWNoIDgtYml0IGNoYXJhY3RlciBp cyBsaWtlbHkgdG8gYmUgc29tZSBraW5kIG9mCisgICB0ZXh0LCBlLmcuICJzbWFydCBxdW90ZXMi IG9yIEVhc3QgRXVyb3BlYW4gb3IgVHVya2lzaCBhY2NlbnRlZCBsZXR0ZXJzLgorCitXaGF0J3Mg Tm90IEluIEMtS2VybWl0IDkuMAorCisgICBTb21lIGxhcmdlIHByb2plY3RzIHRoYXQgd2VyZSBj b250ZW1wbGF0ZWQgaGF2ZSBub3QgYmVlbiBkb25lLAorICAgaW5jbHVkaW5nOgorICAgICAqIElQ djYuIEhvbmVzdGx5LCB0aGVyZSBoYXMgYmVlbiB6ZXJvIGRlbWFuZCBmb3IgdGhpcywgYW5kIGl0 IHdvdWxkCisgICAgICAgYmUgYSBsb3Qgb2Ygd29yayBhbmQgZGlzcnVwdGlvbiB0byB0aGUgY29k ZSBiYXNlLiBWb2x1bnRlZXJzCisgICAgICAgd2VsY29tZSwgSSBndWVzcy4gSXQgY291bGQgYmUg YSBDUyBwcm9qZWN0LgorICAgICAqIEEgZGF0YWJhc2UgaW50ZXJmYWNlIC0gTXlTUUwgb3IgT0RC Qy4gRm9yIHRoaXMgb25lLCB0aGVyZSBpcyBzb21lCisgICAgICAgZGVtYW5kIGJ1dCBJIGhhdmVu J3QgaGFkIGEgY2hhbmNlIHRvIGV2ZW4gbG9vayBpbnRvIGl0LgorICAgICAqIFRoZXJlJ3MgYSBs b29taW5nIGlzc3VlIHdpdGggREVTIGVuY3J5cHRpb247IG1ham9yIHZlbmRvcnMgYXJlCisgICAg ICAgcmVtb3ZpbmcgaXQgZnJvbSB0aGVpciBwbGF0Zm9ybXMsIHN0YXJ0aW5nIHdpdGggQXBwbGUg aW4gTWFjIE9TIFgKKyAgICAgICAxMC42LCB3aXRoIE1pY3Jvc29mdCB0byBmb2xsb3cgc3VpdC4g QSBzZWN1cmUgdmVyc2lvbiBvZiBLZXJtaXQgY2FuCisgICAgICAgYmUgYnVpbHQgd2l0aG91dCBE RVMsIGJ1dCBpbiBsaW1pdGVkIHRlc3Rpbmcgc3VjY2Vzc2Z1bCBjb25uZWN0aW9ucworICAgICAg IHdlcmUgc3BvdHR5IChlLmcuIHdpdGggS2VyYmVyb3MgNSkuCisgICAgICogQ2xlYW5pbmcgdXAg dGhlIFVuaXggbWFrZWZpbGUuIEl0IGhhcyAyNSB5ZWFycycgd29ydGggb2YgdGFyZ2V0cyBpbgor ICAgICAgIGl0LiBJdCBpcyB2ZXJ5IGxpa2VseSBzYWZlIHRvIHJlbW92ZSBtb3N0IG9mIHRoZW0s IHNpbmNlIChhKSBtb3N0CisgICAgICAgb2xkIHBsYXRmb3JtcyBoYXZlIGdvbmUgYXdheSBieSBu b3csIG9yIGhhdmUgYmVlbiB1cGdyYWRlZCwgZHVlIHRvCisgICAgICAgaGFja2luZyB2dWxuZXJh YmlsaXRpZXM7IChiKSB0aGUgbWFya2V0IGhhcyBjb25zb2xpZGF0ZWQKKyAgICAgICBjb25zaWRl cmFibHk7IGFuZCAoYykgbW9zdCBvZiB0aGUgbmV3IGZlYXR1cmVzIG9mIEMtS2VybWl0IDkuMCwK KyAgICAgICBzdWNoIGFzIGxhcmdlIGZpbGVzLCB3b24ndCBiZSBvZiBhbnkgdXNlIG9uIG9sZGVy IHBsYXRmb3JtcyBhbmQKKyAgICAgICBwcmV2aW91cyBDLUtlcm1pdCB2ZXJzaW9ucyB3aWxsIHJl bWFpbiBhdmFpbGFibGUuCisgICAgICogUGFja2FnZXMuIEV2ZXJ5Ym9keSB3YW50cyBhbiBpbnN0 YWxsIHBhY2thZ2UgY3VzdG9tIG1hZGUgZm9yIHRoZWlyCisgICAgICAgb3duIGNvbXB1dGVyLCBM aW51eCBSUE1zIGJlaW5nIHRoZSBwcmltZSBleGFtcGxlIGJ1dCBmYXIgZnJvbSB0aGUKKyAgICAg ICBvbmx5IG9uZS4gVGhlc2Ugd2lsbCBjb21lLCBJIHN1cHBvc2UgKGVzcGVjaWFsbHkgd2l0aCBz b21lIExpbnV4CisgICAgICAgc2l0ZXMgaGF2aW5nIGEgcG9saWN5IGFnYWluc3QgaW5zdGFsbGlu ZyBhbnkgYXBwbGljYXRpb24gdGhhdCBkb2VzCisgICAgICAgbm90IGNvbWUgYXMgYW4gUlBNKS4g SW4gdGhlIG1lYW50aW1lLCBoZXJlJ3MgYSBwYWdlIHRoYXQgZGVzY3JpYmVzCisgICAgICAgc29t ZSBLZXJtaXQtc3BlY2lmaWMgaXNzdWVzIGluIHBhY2thZ2UgY29uc3RydWN0aW9uOgorICAgICAg IFs5Ml1ja3BhY2thZ2VzLmh0bWwuCisKK0FuZCBhIExvb3NlIEVuZC4uLgorVXNpbmcgRXh0ZXJu YWwgRmlsZS1UcmFuc2ZlciBQcm90b2NvbHMgb24gU2VjdXJlIENvbm5lY3Rpb25zCisKKyAgIEFm dGVyIEMtS2VybWl0IDguMC4yMTIgRGV2LjI3ICgyMDA2LzEyLzIyKSwgSSBzcGVudCBhIGJpZyBj aHVuayBvZiB0aW1lCisgICB0cnlpbmcgdG8gc29sdmUgYSBwYXJ0aWN1bGFyIHByb2JsZW0gdGhh dCBzb21lIG9mIHlvdSBoYXZlIGNvbXBsYWluZWQKKyAgIGFib3V0IGFuZCBvdGhlcnMgbWlnaHQg YmUgZmFtaWxpYXIgd2l0aDogSWYgeW91IHVzZSBDLUtlcm1pdCB0byBtYWtlIGEKKyAgIHNlY3Vy ZSBUZWxuZXQgY29ubmVjdGlvbiB0byBhbm90aGVyIGhvc3QgKGUuZy4gd2l0aCBUZWxuZXQgU1NM L1RMUywKKyAgIEtlcmJlcm9zLCBvciBTUlApIGFuZCB0aGVuIGF0dGVtcHQgdG8gdHJhbnNmZXIg YSBmaWxlIHVzaW5nIGFuIGV4dGVybmFsCisgICBwcm90b2NvbCBzdWNoIGFzIFptb2RlbSwgaXQg ZG9lc24ndCB3b3JrLgorCisgICBUaGF0J3MgYmVjYXVzZSBhcyBjb2RlZCAodGhyb3VnaCA4LjAu MjExKSwgQy1LZXJtaXQgc2ltcGx5IHN0YXJ0cyB0aGUKKyAgIGV4dGVybmFsIHByb3RvY29sIGlu IGEgZm9yayB3aXRoIGl0cyBzdGFuZGFyZCBpL28gcmVkaXJlY3RlZCB0byB0aGUKKyAgIGNvbm5l Y3Rpb24uIFRoaXMgY29tcGxldGVseSBieXBhc3NlcyB0aGUgZW5jcnlwdGlvbiBhbmQgZGVjcnlw dGlvbiB0aGF0CisgICBpcyBkb25lIGJ5IEMtS2VybWl0IGl0c2VsZiwgYW5kIG9mIGNvdXJzZSBp dCBkb2Vzbid0IHdvcmsuIFRoZSBzYW1lCisgICB0aGluZyBvY2N1cnMgaWYgeW91IHVzZSB0aGUg UkVESVJFQ1QgY29tbWFuZC4gVGhlIHJvdXRpbmUgdGhhdCBoYW5kbGVzCisgICB0aGlzIGlzIHR0 cnVuY21kKCkgaW4gY2t1dGlvLmMuCisKKyAgIEluIG9yZGVyIHRvIGFsbG93IChzYXkpIFptb2Rl bSB0cmFuc2ZlcnMgb24gc2VjdXJlIGNvbm5lY3Rpb25zLCBpdCBpcworICAgbmVjZXNzYXJ5IGZv ciBDLUtlcm1pdCB0byBpbnRlcnBvc2UgaXRzZWxmIGJldHdlZW4gdGhlIGV4dGVybmFsIFptb2Rl bQorICAgcHJvZ3JhbSBhbmQgdGhlIGNvbm5lY3Rpb24sIGRlY3J5cHRpbmcgdGhlIGluY29taW5n IHN0cmVhbSBiZWZvcmUKKyAgIGZlZWRpbmcgaXQgdG8gWm1vZGVtIGFuZCBlbmNyeXB0aW5nIFpt b2RlbSdzIG91dHB1dCBiZWZvcmUgc2VuZGluZyBvdXQKKyAgIHRoZSBjb25uZWN0aW9uLgorCisg ICBJbiBwcmluY2lwYWwsIHRoaXMgaXMgc2ltcGxlIGVub3VnaC4gV2Ugb3BlbiBhIHBzZXVkb3Rl cm1pbmFsIHBhaXIKKyAgICgibWFzdGVyIiBhbmQgInNsYXZlIikgZm9yIFptb2RlbSdzIGkvbyBh bmQgd2UgY3JlYXRlIGEgZm9yayBhbmQgc3RhcnQKKyAgIFptb2RlbSBpbiBpdDsgd2UgcmVhZCBm cm9tIHRoZSBmb3JrIHB0eSdzIHN0YW5kYXJkIG91dHB1dCwgZW5jcnlwdCwgYW5kCisgICBzZW5k IHRvIHRoZSBuZXQ7IHdlIHJlYWQgZnJvbSB0aGUgbmV0LCBkZWNyeXB0LCBhbmQgd3JpdGUgdG8g dGhlIGZvcmsKKyAgIHB0eSdzIHN0YW5kYXJkIGlucHV0LgorCisgICBJbiBwcmFjdGljZSwgaXQn cyBub3Qgc28gc2ltcGxlLiBGaXJzdCBvZiBhbGwsIHBzZXVkb3Rlcm1pbmFscyAocHR5cykKKyAg IGRvbid0IHNlZW0gdG8gaW50ZXJmYWNlIGNvcnJlY3RseSB3aXRoIGNlcnRhaW4gY3J1Y2lhbCBB UElzLCBhdCBsZWFzdAorICAgbm90IGluIHRoZSBPUydzIEkgaGF2ZSB0cmllZCAoTWFjIE9TIFgs IExpbnV4LCBOZXRCU0QsIGV0YyksIHN1Y2ggYXMKKyAgIHNlbGVjdCgpLiBBbmQgaS9vIHdpdGgg dGhlIHB0eSBvZnRlbiAtIHBlcmhhcHMgYWx3YXlzIC0gZmFpbHMgdG8KKyAgIGluZGljYXRlIGVy cm9ycyB3aGVuIHRoZXkgb2NjdXI7IGZvciBleGFtcGxlLCB3aGVuIHRoZSBmb3JrIGhhcyBleGl0 ZWQuCisKKyAgIEJ1dCwgZXZlbiBhZnRlciBjb2RpbmcgYXJvdW5kIHRoZSBhcHBhcmVudCB1c2Vs ZXNzbmVzcyBvZiBzZWxlY3QoKSBmb3IKKyAgIG11bHRpcGxleGluZyBwdHkgYW5kIG5ldCwgYW5k IHVzaW5nIHZhcmlvdXMgdHJpY2tzIHRvIGRldGVjdCB3aGVuIHRoZQorICAgZXh0ZXJuYWwgcHJv dG9jb2wgZXhpdHMgYW5kIHdoYXQgaXRzIGV4aXQgc3RhdHVzIGlzLCBJJ20gc3RpbGwgbGVmdAor ICAgd2l0aCBhIHNob3ctc3RvcHBpbmcgcHJvYmxlbTogSSBqdXN0IHNpbXBseSBjYW4gbm90IGRv d25sb2FkIChyZWNlaXZlKQorICAgYSBmaWxlIHdpdGggWm1vZGVtLCB3aGljaCBpcyB0aGUgbWFp biB0aGluZyB0aGF0IHBlb3BsZSB3b3VsZCBwcm9iYWJseQorICAgd2FudCB0byBkby4gSSBjYW4g c2VuZCBmaWxlcyBqdXN0IGZpbmUsIGJ1dCBub3QgcmVjZWl2ZS4gVGhlIGluY29taW5nCisgICBz dHJlYW0gaXMgZGVsaXZlcmVkIHRvIFptb2RlbSAodG8gdGhlIHB0eSBzbGF2ZSkgYnV0IHVwb24g YXJyaXZhbCBhdAorICAgdGhlIFptb2RlbSBwcm9jZXNzIGl0c2VsZiwgcGllY2VzIGFyZSBhbHdh eXMgbWlzc2luZyBhbmQvb3IgY29ycnVwdC4KKyAgIFlldCBJIGNhbiByZWNlaXZlIGZpbGVzIGp1 c3QgZmluZSBpZiBJIHVzZSBLZXJtaXQgaXRzZWxmIChDLUtlcm1pdCBvcgorICAgRy1LZXJtaXQp IGFzIHRoZSBleHRlcm5hbCBwcm90b2NvbCwgcmF0aGVyIHRoYW4gWm1vZGVtLgorCisgICBJIGNh biB0aGluayBvZiB0d28gcmVhc29ucyB3aHkgdGhpcyBtaWdodCBiZSB0aGUgY2FzZToKKworICAg IDEuIFptb2RlbSBzZW5kcyBhbGwgOC1iaXQgYnl0ZXMgYW5kIGNvbnRyb2wgY29kZXMgaW4gdGhl IGNsZWFyLCBhbmQKKyAgICAgICBtYXliZSB0aGUgcHR5IGlzIGNob2tpbmcgb24gdGhlbSBiZWNh dXNlIGl0IHRoaW5rcyBpdCBpcyBhIHJlYWwKKyAgICAgICB0ZXJtaW5hbC4KKworICAgQnV0IFpt b2RlbSBwdXRzIGl0cyBjb250cm9sbGluZyB0ZXJtaW5hbCBpbnRvIHJhdyBtb2RlLiBBbmQgQy1L ZXJtaXQKKyAgIHB1dHMgdGhlIHB0eSBpbnRvIHJhdyBtb2RlIHRvbywganVzdCBmb3IgZ29vZCBt ZWFzdXJlLiBJZiBhbnkgMHhGRgorICAgY29kZXMgYXJlIGluIHRoZSBabW9kZW0gZGF0YSBzdHJl YW0sIGFuZCBpdCdzIGEgVGVsbmV0IHNlc3Npb24sIEtlcm1pdAorICAgZG9lcyBhbnkgbmVlZGVk IGJ5dGUgc3R1ZmZpbmcvdW5zdHVmZmluZyBhdXRvbWF0aWNhbGx5LiBBbnl3YXksIGlmIEkKKyAg IHRlbGwgWm1vZGVtIHRvIHByZWZpeCBldmVyeXRoaW5nLCBpdCBtYWtlcyBubyBkaWZmZXJlbmNl LgorCisgICAgMi4gWm1vZGVtIGlzIGEgc3RyZWFtaW5nIHByb3RvY29sIGFuZCBwZXJoYXBzIHRo ZSBwdHkgZHJpdmVyIGNhbid0CisgICAgICAga2VlcCB1cCB3aXRoIGEgc3VzdGFpbmVkIHN0cmVh bSBvZiBpbnB1dCBhdCBuZXR3b3JrIHNwZWVkcy4gV2hhdAorICAgICAgIHdvdWxkIGJlIHRoZSBt ZXRob2Qgb2YgZmxvdyBjb250cm9sPworCisgICBJIGNhbiB2YXJ5IHRoZSBzaXplIG9mIHRoZSBp L28gYnVmZmVycyB1c2VkIGZvciB3cml0aW5nIHRvIHRoZSBwdHksIGFuZAorICAgZ2V0IGRpZmZl cmVudCBlZmZlY3RzLCBidXQgSSBhbSBub3QgYWJsZSB0byBnZXQgYSBjbGVhbiBkb3dubG9hZCwg bm8KKyAgIG1hdHRlciB3aGF0IGJ1ZmZlciBzaXplIEkgdXNlLiB3cml0ZSgpJ2luZyB0byB0aGUg cHR5IGRvZXMgbm90IHJldHVybgorICAgYW4gZXJyb3IsIGFuZCBJIGNhbid0IHNlZSB0aGUgZXJy b3JzIGJlY2F1c2UgdGhleSBoYXBwZW4gb24gdGhlIG1hc3RlcgorICAgc2lkZS4gSXQncyBhcyBp ZiB0aGUgcGF0aCBiZXR3ZWVuIHRoZSBwdHkgc2xhdmUgYW5kIG1hc3RlciBsYWNrcyBmbG93Cisg ICBjb250cm9sOyBJIGRlbGl2ZXIgYSB2YWxpZCBkYXRhIHN0cmVhbSB0byB0aGUgcHR5IHNsYXZl IGFuZCB0aGUgbWFzdGVyCisgICBnZXRzIGJpdHMgYW5kIHBpZWNlcy4gVGhpcyBpbXByZXNzaW9u IGlzIGJvbHN0ZXJlZCBzb21ld2hhdCBieSB0aGUKKyAgICJbOTNdbWFuIDcgcHR5IiBwYWdlIGlu IEhQLVVYLCB3aGljaCB0YWxrcyBhYm91dCBzb21lIHNwZWNpYWwgbW9kZXMgZm9yCisgICBwdHlz IHRoYXQgdHVybiBvZmYgYWxsIHRlcm1pbyBwcm9jZXNzaW5nIGFuZCBndWFyYW50ZWUgYQorICAg Zmxvdy1jb250cm9sbGVkIHJlbGlhYmxlIHN0cmVhbSBvZiBieXRlcyBpbiBib3RoIGRpcmVjdGlv bnMgLSBhIGZlYXR1cmUKKyAgIHRoYXQgc2VlbXMgdG8gYmUgc3BlY2lmaWMgdG8gSFAtVVgsIGFu ZCBleGFjdGx5IHRoZSBvbmUgd2UgbmVlZAorICAgZXZlcnl3aGVyZS4KKworICAgV2VsbCwgaW4g UGFzcyBPbmUgSSB1c2VkIEMtS2VybWl0J3MgZXhpc3RpbmcgcHR5IHJvdXRpbmVzIGZyb20KKyAg IGNrdXB0eS5bY2hdLCB3aGljaCBhcmUgd2VsbC1wcm92ZW4gaW4gdGVybXMgb2YgcG9ydGFiaWxp dHkgYW5kIG9mCisgICBhY3R1YWxseSB3b3JraW5nLiBUaGV5IGFyZSBjdXJyZW50bHkgdXNlZCBi eSBTRVQgSE9TVCAvUFRZIGZvciBtYWtpbmcKKyAgIHRlcm1pbmFsIGNvbm5lY3Rpb25zIHRvIGV4 dGVybmFsIHByb2Nlc3Nlcy4gQnV0IHRoZXNlIHJvdXRpbmVzIGFyZQorICAgd3JpdHRlbiBvbiB0 aGUgYXNzdW1wdGlvbiB0aGF0IHRoZSBwdHkgaXMgdG8gYmUgYWNjZXNzZWQgaW50ZXJhY3RpdmVs eSwKKyAgIGFuZCBtYXliZSB0aGV5IGFyZSBzZXR0aW5nIHRoZSBmb3JrL3B0eSBhcnJhbmdlbWVu dCB1cCBpbiBzdWNoIGEgd2F5CisgICB0aGF0IHRoYXQncyBub3Qgc3VpdGFibGUgZm9yIGZpbGUg dHJhbnNmZXIuIFRoZSBQYXNzIE9uZSByb3V0aW5lIGlzCisgICBjYWxsZWQgeHR0cHR5Y21kKCkg aW4gY2t1dGlvLmMuCisKKyAgIFNvIGluIFBhc3MgVHdvIEkgbWFkZSBhIHNlY29uZCBjb3B5IG9m IHRoZSByb3V0aW5lLCB5dHRwdHljbWQoKSwgdGhhdAorICAgbWFuYWdlcyB0aGUgcHR5IGFuZCBm b3JrIGl0c2VsZiwgc28gYWxsIHRoZSBjb2RlIGlzIGluIG9uZSBwbGFjZSBhbmQKKyAgIGl0J3Mg c2ltcGxlIGFuZCB1bmRlcnN0YW5kYWJsZS4gQnV0IGl0IHN0aWxsIGRvZXNuJ3Qgd29yayBmb3Ig Wm1vZGVtCisgICBkb3dubG9hZHMuIEluIHRoaXMgcm91dGluZSwgSSB1c2Ugb3BlbnB0eSgpIHRv IGdldCB0aGUgcHR5IHBhaXIsIHdoaWNoCisgICBpcyBub3QgcG9ydGFibGUsIHNvIEkgY2FuIGhh dmUgYWNjZXNzIHRvIGJvdGggdGhlIG1hc3RlciBhbmQgc2xhdmUgcHR5CisgICBmaWxlIGRlc2Ny aXB0b3JzLiBUaGlzIHZlcnNpb24gY2FuIGJlIHVzZWQgb25seSBhIHBsYXRmb3JtcyB0aGF0IGhh dmUKKyAgIG9wZW5wdHkoKTogTGludXgsIE1hYyBPUyBYLCBOZXRCU0QsIGV0Yy4KKworICAgSW4g UGFzcyBUaHJlZSwgenR0cHR5Y21kKCksIEkgdHJpZWQgdXNpbmcgcGlwZXMgaW5zdGVhZCBvZiBw dHlzLCBpbgorICAgY2FzZSBwdHlzIGFyZSBzaW1wbHkgbm90IHVwIHRvIHRoaXMgdGFzayAoYnV0 IHRoYXQgY2FuJ3QgYmUgdHJ1ZQorICAgYmVjYXVzZSBpZiBJIG1ha2UgYSBUZWxuZXQgb3IgU1NI IGNvbm5lY3Rpb24gaW50byBhIGhvc3QsIEkgY2FuIHNlbmQKKyAgIGZpbGVzIHRvIGl0IHdpdGgg Wm1vZGVtLCBhbmQgdGhlIHJlbW90ZSBabW9kZW0gcmVjZWl2ZXIgaXMsIGluZGVlZCwKKyAgIHJ1 bm5pbmcgb24gYSBwdHkpLiBCdXQgcGlwZXMgZGlkbid0IHdvcmsgZWl0aGVyLgorCisgICBJbiBQ YXNzIEZvdXIsIEkgZXh0cmFjdGVkIHRoZSByZWxldmFudCByb3V0aW5lcyBpbnRvIGEgc3RhbmRh bG9uZQorICAgcHJvZ3JhbSBiYXNlZCBvbiB5dHRwdHljbWQoKSAodGhlIG9wZW5wdHkoKSB2ZXJz aW9uLCBmb3Igc2ltcGxpY2l0eSksCisgICB3aGljaCBJIHRlc3RlZCBvbiBNYWMgT1MgWCwgdGhl IGlkZWEgYmVpbmcgdG8gcnVsZSBvdXQgYW55CisgICAiZW52aXJvbm1lbnRhbCIgZWZmZWN0cyBv ZiBydW5uaW5nIGluc2lkZSB0aGUgQy1LZXJtaXQgcHJvY2Vzcy4gVGhlcmUKKyAgIHdhcyBubyBk aWZmZXJlbmNlIC0tIEtlcm1pdCB0cmFuc2ZlcnMgKHdpdGggQy1LZXJtaXQgaXRzZWxmIGFzIHRo ZQorICAgZXh0ZXJuYWwgcHJvdG9jb2wpIHdvcmtlZDsgWm1vZGVtIHRyYW5zZmVycyAobmVpdGhl ciBzeiBvciBsc3opIGRpZAorICAgbm90LgorCisgICBXZWxsLCBpdCdzIGEgbXVjaCBsb25nZXIg c3RvcnkuIEFzIHRoZSBleHRlcm5hbCBwcm90b2NvbCwgSSd2ZSB0cmllZAorICAgcnpzeiwgY3J6 c3osIGFuZCBscnpzei4gV2Uga25vdyB0aGF0IHNvbWUgb2YgdGhlc2UgaGF2ZSBxdWlya3MKKyAg IHJlZ2FyZGluZyBzdGFuZGFyZCBpL28sIGV0Yywgd2hpY2ggaXMgb25lIG9mIHRoZSByZWFzb25z IGZvciB1c2luZyBwdHlzCisgICBpbiB0aGUgZmlyc3QgcGxhY2UsIGFuZCBpL28gZG9lcyB3b3Jr IC0ganVzdCBub3QgcmVsaWFibHkuIEFueXdheSwgdGhlCisgICAxMTAwIGxpbmVzIG9yIHNvIG9m IFs5NF1ja2MyOTkudHh0LCBzdGFydGluZyBqdXN0IGJlbG93IHdoZXJlIGl0IHNheXMKKyAgICIt LS0gRGV2LjI3IC0tLSIgdGVsbCB0aGUgZnVsbCBzdG9yeS4gQXQgdGhpcyBwb2ludCBJIGhhdmUg dG8gZ2l2ZSB1cAorICAgYW5kIG1vdmUgb247IGl0IG1pZ2h0IGJlIG1vcmUgcHJvZHVjdGl2ZSB0 byBsZXQgc29tZWJvZHkgZWxzZSB3aG8gaGFzCisgICBtb3JlIGV4cGVyaWVuY2Ugd2l0aCBwdHlz IHRha2UgYSBsb29rIGF0IGl0IC0gaWYgaW5kZWVkIGFueW9uZSBzdGlsbAorICAgY2FyZXMgYWJv dXQgYmVpbmcgYWJsZSB0byBkbyBabW9kZW0gdHJhbnNmZXJzIG92ZXIgc2VjdXJlIFRlbG5ldAor ICAgY29ubmVjdGlvbnMuCisKKyAgIEMtS2VybWl0IDkuMCBjb250YWlucyB0aGUgdGhyZWUgbmV3 IHJvdXRpbmVzIChhbmQgc29tZSBhdXhpbGlhcnkgb25lcyksCisgICBidXQgdGhleSBhcmUgbm90 IGNvbXBpbGVkIG9yIGNhbGxlZCB1bmxlc3MgeW91IGJ1aWxkIGl0IHNwZWNpYWxseToKKworICAg ICBtYWtlIHRhcmdldG5hbWUgS0ZMQUdTPS1EWFRUUFRZQ01EIChidWlsZHMgd2l0aCB4dHRwdHlj bWQoKSkKKyAgICAgbWFrZSB0YXJnZXRuYW1lIEtGTEFHUz0tRFlUVFBUWUNNRCAoYnVpbGRzIHdp dGggeXR0cHR5Y21kKCkpCisgICAgIG1ha2UgdGFyZ2V0bmFtZSBLRkxBR1M9LURaVFRQVFlDTUQg KGJ1aWxkcyB3aXRoIHp0dHB0eWNtZCgpKQorCisgICBUaGVzZSBhcmUgYWxsIGluIFs5NV1ja3V0 aW8uYy4gQXMgbm90ZWQsIHRoZSBzZWNvbmQgb25lIHdvcmtzIG9ubHkgZm9yCisgICBMaW51eCwg RnJlZUJTRCwgTmV0QlNELCBhbmQgTWFjIE9TIFgsIGJlY2F1c2UgaXQgdXNlcyBub24tUE9TSVgs CisgICBub24tcG9ydGFibGUgb3BlbnB0eSgpLiBJZiB5b3Ugd2FudCB0byB0cnkgaXQgb24gc29t ZSBvdGhlciBwbGF0Zm9ybQorICAgdGhhdCBoYXMgb3BlbnB0eSgpLCB5b3UgY2FuIGJ1aWxkIGl0 IGxpa2UgdGhpczoKKworICAgICBtYWtlIHRhcmdldG5hbWUgIktGTEFHUz0tRFlUVFBUWUNNRCAt REhBVkVfT1BFTlBUWSIKKworICAgKGFuZCBsZXQgbWUga25vdywgc28gSSBjYW4gaGF2ZSBIQVZF X09QRU5QVFkgcHJlZGVmaW5lZCBmb3IgdGhhdAorICAgcGxhdGZvcm0gdG9vKS4gVGhlIGJlc3Qg c3RyYXRlZ3kgdG8gZ2V0IHRoaXMgd29ya2luZywgSSB0aGluaywgd291bGQgYmUKKyAgIHRvIGNv bmNlbnRyYXRlIG9uIHl0dHB0eWNtZCgpLCB3aGljaCBpcyB0aGUgc2ltcGxlciBvZiB0aGUgdHdv CisgICBwdHktYmFzZWQgcm91dGluZXMuIElmIGl0IGNhbiBiZSBtYWRlIHRvIHdvcmssIHRoZW4g d2UnbGwgc2VlIGlmIHdlIGNhbgorICAgcmV0cm9maXQgaXQgdG8gdXNlIHRoZSBja3VwdHkuYyBy b3V0aW5lcyBzbyBpdCB3aWxsIGJlIHBvcnRhYmxlIHRvCisgICBub24tQlNEIHBsYXRmb3Jtcy4K KworICAgQnkgdGhlIHdheSwgaWYgeW91IGJ1aWxkIHdpdGggYW55IG9mIFtYWVpdVFRQVFlDTUQg ZGVmaW5lZCwgdGhlbiB0aGUKKyAgIHNlbGVjdGVkIHJvdXRpbmUgd2lsbCBhbHdheXMgYmUgdXNl ZCBpbiBwbGFjZSBvZiB0dHJ1bmNtZCgpLiBUaGlzIGlzIHRvCisgICBhbGxvdyB0ZXN0aW5nIG9u IGFsbCBraW5kcyBvZiBjb25uZWN0aW9ucywgbm90IGp1c3Qgc2VjdXJlIG9uZXMsIGluCisgICBi b3RoIGxvY2FsIGFuZCByZW1vdGUgbW9kZS4gT25jZSB0aGUgdGhpbmcgd29ya3MsIGlmIGl0IGV2 ZXIgZG9lcywgSSdsbAorICAgYWRkIHRoZSBhcHByb3ByaWF0ZSB0ZXN0cyBhbmQvb3IgY29tbWFu ZHMuCisKKyAgIEJ5IGRlZmF1bHQsIGluIHRoZSBpbml0aWFsIHRlc3QgcmVsZWFzZSwgQy1LZXJt aXQgOS4wIHVzZXMgdHRydW5jbWQoKQorICAgb24gc2VyaWFsIGNvbm5lY3Rpb25zIGFuZCB0dHlw dHljbWQoKSBvbiBuZXR3b3JrIGNvbm5lY3Rpb25zLiBFdmVuIHdoZW4KKyAgIGEgbmV0d29yayBj b25uZWN0aW9uIGlzIG5vdCBlbmNyeXB0ZWQsIEtlcm1pdCBzdGlsbCBuZWVkcyB0byBoYW5kbGUg dGhlCisgICBuZXR3b3JrIHByb3RvY29sLCBlLmcuIHRoZSBxdW90aW5nIG9mIDB4ZmYgYnl0ZXMg b24gVGVsbmV0IGNvbm5lY3Rpb25zLgorCitEZW1vbnN0cmF0aW9uOiBGZXRjaCBNYWlsIGZyb20g UE9QIFNlcnZlciBTZWN1cmVkIGJ5IFNTTAorCisgICBbOTZdcG9wLmtzYyBpcyBhIGZ1bGx5IGVs YWJvcmF0ZWQgcHJvZHVjdGlvbiBzY3JpcHQgZm9yIGZldGNoaW5nIG9uZSdzCisgICBtYWlsIGZy b20gYSBQT1AzIHNlcnZlciBvdmVyIGEgY29ubmVjdGlvbiBzZWN1cmVkIGJ5IFNTTC4gRm9yCisg ICBleHBsYW5hdGlvbiBhbmQgZG9jdW1lbnRhdGlvbiwgWzk3XUNMSUNLIEhFUkUuIFs5OF1tYWls Y2hlY2sgaXMgYQorICAgd3JhcHBlciBmb3IgdGhlIHBvcC5rc2Mgc2NyaXB0LCB3aGljaCBjb2xs ZWN0cyB5b3VyIHBhc3N3b3JkIG9uZSB0aW1lLAorICAgYW5kIHRoZW4gY2hlY2tzIGZvciBuZXcg bWFpbCBldmVyeSA1IG1pbnV0ZXMgKG9yIG90aGVyIHNlbGVjdGVkCisgICBpbnRlcnZhbCkgYW5k IGNhbGxzIHBvcC5rc2MgdG8gZmV0Y2ggaXQgaWYgdGhlcmUgaXMgYW55LgorCitEZW1vbnN0cmF0 aW9uOiBIUCBTd2l0Y2ggQ29uZmlndXJhdGlvbiBCYWNrdXAKKworICAgQSBjb21tb24gdXNlIGZv ciBLZXJtaXQgc29mdHdhcmUgaXMgdG8gbWFrZSBhdXRvbWF0ZWQgYmFja3VwcyBvZiB0aGUKKyAg IGNvbmZpZ3VyYXRpb24gb2YgbmV0d29yayBzd2l0Y2hlcyBhbmQgcm91dGVycywgc3VjaCBhcyB0 aG9zZSBtYWRlIGJ5CisgICBDaXNjbyBvciBIZXdsZXR0LVBhY2thcmQgKGFsdGhvdWdoIFs5OV10 ZnRwIGNhbiBiZSB1c2VkIGZvciB0aGlzLCBpdCBpcworICAgbm90IGF2YWlsYWJsZSBpbiBhbGwg c3VjaCBkZXZpY2VzOyBLZXJtaXQsIGhvd2V2ZXIsIHdvcmtzIHdpdGggdGhvc2UKKyAgIHRoYXQg aGF2ZSB0ZnRwIGFzIHdlbGwgYXMgdGhvc2UgdGhhdCBkb24ndCkuCisKKyAgIFR5cGljYWxseSBh IGJhY2t1cCBjYW4gYmUgZG9uZSBieSBtYWtpbmcgYSBUZWxuZXQsIFNTSCwgb3Igc2VyaWFsCisg ICBjb25uZWN0aW9uIHRvIHRoZSBkZXZpY2Ugd2l0aCBLZXJtaXQgYW5kIGdpdmluZyBhIGNvbW1h bmQgc3VjaCBhcyAic2hvdworICAgY29uZmlnIiBhdCB0aGUgY29tbWFuZC1saW5lIHByb21wdCBv ZiB0aGUgZGV2aWNlIHdpdGggS2VybWl0J3Mgc2Vzc2lvbgorICAgbG9nIGFjdGl2YXRlZC4gVGhl IHJlc3VsdCBpcyBhIGxpc3Qgb2YgdGhlIGNvbW1hbmRzIHRoYXQgd2VyZSB1c2VkIHRvCisgICBl c3RhYmxpc2ggdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiwgc3VpdGFibGUgZm9yIGZlZWRpbmcg YmFjayB0byB0aGUKKyAgIGRldmljZSdzIGNvbnNvbGUgKGUuZy4gd2l0aCBDLUtlcm1pdCdzIFRS QU5TTUlUIGNvbW1hbmQpIHRvIHJlZXN0YWJsaXNoCisgICB0aGUgc2FtZSBjb25maWd1cmF0aW9u IG9yIHRvIGR1cGxpY2F0ZSBpdCBvbiBhbm90aGVyIGRldmljZS4KKworICAgQXQgYW4gSFAgaW5z dGFsbGF0aW9uIGl0IHdhcyBub3RlZCwgaG93ZXZlciwgdGhhdCB3aGlsZSB0aGUgSFAgc3dpdGNo ZXMKKyAgICh2YXJpb3VzIFByb0N1cnZlIG1vZGVscykgcHJvZHVjZWQgdGhlIGRlc2lyZWQgbGlz dCBvZiBjb21tYW5kcywgdGhleQorICAgd2VyZSBpbnRlcnNwZXJzZWQgd2l0aCBlc2NhcGUgc2Vx dWVuY2VzIGZvciBzcGVjaWFsIGVmZmVjdHMsIHRodXMKKyAgIHJlbmRlcmluZyB0aGUgcmVjb3Jk ZWQgc2Vzc2lvbnMgdW5zdWl0YWJsZSBmb3IgZmVlZGluZyBiYWNrIGludG8gdGhlCisgICBzd2l0 Y2hlcy4KKworICAgQy1LZXJtaXQgOS4wIGludHJvZHVjZXMgYSBuZXcgZmVhdHVyZSB0byBzdHJp cCB0aGUgb2ZmZW5kaW5nIHNlcXVlbmNlcworICAgb3V0IG9mIGEgc2Vzc2lvbiBsb2csIGxlYXZp bmcganVzdCB0aGUgdGV4dC4gVGhlIGNvbW1hbmQgU0VUCisgICBTRVNTSU9OLUxPRyBURVhUIGFj dGl2YXRlcyB0aGlzIGZlYXR1cmUuIEluIEMtS2VybWl0IDkuMCBBbHBoYS4wMiBhbmQKKyAgIGVh cmxpZXIsIGVzY2FwZSBzZXF1ZW5jZSBzdHJpcHBpbmcgb2NjdXJyZWQgb25seSB3aGlsZSBsb2dn aW5nCisgICBpbnRlcmFjdGl2ZSAoQ09OTkVDVCkgc2Vzc2lvbnM7IGJlZ2lubmluZyB3aXRoIEFs cGhhLjAzIGl0IGlzIGRvbmUgYWxzbworICAgZm9yIGRhdGEgdGhhdCBpcyByZWFkIGJ5IElOUFVU IGNvbW1hbmRzIGFuZCB0aGVyZWZvcmUgd29ya3MgZm9yIHNjcmlwdHMKKyAgIHRvby4KKworICAg QSBzYW1wbGUgSFAgU3dpdGNoIENvbmZpZ3VyYXRpb24gQmFja3VwIHNjcmlwdCBpcyBbMTAwXUhF UkUsIGFuZCBpdHMKKyAgIGRhdGEgZmlsZSBpcyBbMTAxXUhFUkUuIFRoaXMgc2NyaXB0IGFsc28g aWxsdXN0cmF0ZXMgc29tZSBvdGhlciBuZXcKKyAgIGZlYXR1cmVzIG9mIEFscGhhLjAzOgorCisg ICBNRVNTQUdFIHRleHQKKyAgICAgICAgICBUaGlzIGxldHMgeW91IHB1dCBkZWJ1Z2dpbmcgbWVz c2FnZXMgaW4geW91ciBzY3JpcHQgdGhhdCBjYW4gYmUKKyAgICAgICAgICBkaXNwbGF5ZWQgb3Ig bm90LCBhY2NvcmRpbmcgdG8gU0VUIERFQlVHIE1FU1NBR0UgKGJlbG93KS4gVGhpcworICAgICAg ICAgIHdheSB5b3UgZG9uJ3QgaGF2ZSB0byBjaGFuZ2UgeW91ciBzY3JpcHQgZm9yIGRlYnVnZ2lu Zy4gIEhpbnQ6CisgICAgICAgICAgSW4gVW5peCwgaW52b2tlIHRoZSBzY3JpcHQgbGlrZSB0aGlz OgorCisgICAgICQgREVCVUc9MSBzY3JpcHRuYW1lIGFyZzEgYXJnMi4uLgorCisgICAgICAgICAg YW5kIHRoZW4gaW5jbHVkZSB0aGUgZm9sbG93aW5nIGNvbW1hbmQgaW4geW91ciBzY3JpcHQ6CisK KyAgICAgaWYgZGVmaW5lZCBcJChERUJVRykgc2V0IGRlYnVnIG1lc3NhZ2Ugb24KKworICAgWE1F U1NBR0UgdGV4dAorICAgICAgICAgIExpa2UgTUVTU0FHRSBidXQgcHJpbnRzIHRoZSB0ZXh0IHdp dGggbm8gbGluZSB0ZXJtaW5hdG9yLCBzbyBpdAorICAgICAgICAgIGNhbiBiZSBjb250aW51ZWQg Ynkgc3Vic2VxdWVudCBtZXNzYWdlcy4KKworICAgU0VUIERFQlVHIE1FU1NBR0UgeyBPTiwgT0ZG LCBTVERFUlIgfQorICAgICAgICAgIE9OIG1lYW5zIE1FU1NBR0UgY29tbWFuZHMgc2hvdWxkIHBy aW50IHRvIHN0YW5kYXJkIG91dHB1dDsgT0ZGCisgICAgICAgICAgbWVhbnMgdGhleSBzaG91bGRu J3QgcHJpbnQgYW55dGhpbmc7IFNUREVSUiBtZWFucyB0aGUgbWVzc2FnZXMKKyAgICAgICAgICBz aG91bGQgYmUgcHJpbnRlZCB0byBbMTAyXXN0ZGVyci4gREVCVUcgTUVTU0FHRSBpcyBPRkYgYnkK KyAgICAgICAgICBkZWZhdWx0LCBpLmUuIHVubGVzcyB5b3UgU0VUIGl0IHRvIE9OIG9yIFNUREVS Ui4KKworICAgSUYgREVCVUcgY29tbWFuZAorICAgICAgICAgIEV4ZWN1dGVzIHRoZSBjb21tYW5k IGlmIFNFVCBERUJVRyBNRVNTQUdFIGlzIG5vdCBPRkYuCisKKyAgIFRoZSBcdihsYXN0Y29tbWFu ZCkgdmFyaWFibGUKKyAgICAgICAgICBUaGlzIHZhcmlhYmxlIGNvbnRhaW5zIHRoZSBwcmV2aW91 cyBjb21tYW5kLiBZb3UgY2FuIHVzZSBpdCBpbgorICAgICAgICAgIGRlYnVnZ2luZyBhbmQgZXJy b3IgbWVzc2FnZSB0byBzaG93IChmb3IgZXhhbXBsZSkgZXhhY3RseSB3aGF0CisgICAgICAgICAg dGhlIGNvbW1hbmQgd2FzIHRoYXQganVzdCBmYWlsZWQsIHdpdGhvdXQgaGF2aW5nIHRvIG1ha2Ug YSBjb3B5CisgICAgICAgICAgb2YgdGhlIGNvbW1hbmQ6CisKK3NldCBob3N0IHNvbWVob3N0LnNv bWVjb21wYW55LmNvbQoraWYgZmFpbCBleGl0IDEgIkZBVEFMIC0gXHYobGFzdGNvbW1hbmQpIgor CisgICAgICAgICAgd2hpY2gsIGlmIHRoZSBTRVQgSE9TVCBjb21tYW5kIGZhaWxzLCBwcmludHMg IkZBVEFMIC0gc2V0IGhvc3QKKyAgICAgICAgICBzb21laG9zdC5zb21lY29tcGFueS5jb20iIGFu ZCB0aGVuIGV4aXRzIHdpdGggc3RhdHVzIDEgKHdoaWNoCisgICAgICAgICAgbm9ybWFsbHkgaW5k aWNhdGVzIGZhaWx1cmUpLgorCitEZW1vbnN0cmF0aW9uOiBIUCBpTE8gQmxhZGUgQ29uZmlndXJh dGlvbgorCisgICBbMTAzXVRISVMgRE9DVU1FTlQgZGVzY3JpYmVzIGEgc2NyaXB0IGluIHByb2R1 Y3Rpb24gdXNlIGF0IENvbHVtYmlhCisgICBVbml2ZXJzaXR5IGZvciBjb25maWd1cmluZyBhbmQg ZGVwbG95aW5nIHJhY2tzIGZ1bGwgb2YgSFAgYmxhZGUgc2VydmVycworICAgdGhyb3VnaCB0aGVp ciAiaW50ZWdyYXRlZCBMaWdodHMgT3V0IiAoaUxPKSBtYW5hZ2VtZW50IGludGVyZmFjZSwKKyAg IGJ5cGFzc2luZyB0aGUgdGVkaW91cyBhbmQgZXJyb3ItcHJvbmUgcHJvY2VzcyBvZiBjb25maWd1 cmluZyB0aGUKKyAgIHNlcnZlcnMgb25lIGJ5IG9uZSB0aHJvdWdoIHRoZSB2ZW5kb3ItcHJvdmlk ZWQgcG9pbnQtYW5kLWNsaWNrIFdlYgorICAgaW50ZXJmYWNlLCB3aGljaCBpcyBpbGwtc3VpdGVk IHRvIGNvbmZpZ3VyaW5nIGxhcmdlIG51bWJlcnMgb2YgYmxhZGVzLgorICAgVGhlIHNjcmlwdCBp bGx1c3RyYXRlcyBzb21lIG9mIEMtS2VybWl0IDkuMCdzIG5ldyBmZWF0dXJlczsgc291cmNlIGNv ZGUKKyAgIGlzIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSBsaW5rLiBUaGUgY29kZSBpcyBhcHQgdG8g Y2hhbmdlIGZyb20gdGltZSB0bworICAgdGltZSBhcyBuZXcgcmVxdWlyZW1lbnRzIHN1cmZhY2Uu CisKK0RlbW9uc3RyYXRpb246IElCTS9Sb2xtL1NpZW1lbnMgQ0JYIE1hbmFnZW1lbnQKKworICAg WzEwNF1USElTIERPQ1VNRU5UIGRlc2NyaWJlcyBhIHN1aXRlIG9mIHNjcmlwdHMgKHNvbWUgaW4g cHJvZHVjdGlvbiwKKyAgIHNvbWUgaW4gZGV2ZWxvcG1lbnQpIHVzZWQgdG8gbWFuYWdlIHRoZSBD b2x1bWJpYSBjYW1wdXMgMjAsMDAwLWxpbmUKKyAgIG1haW4gdGVsZXBob25lIHN3aXRjaCwgYWxv bmcgd2l0aCBhYm91dCAxMCBzYXRlbGxpdGUgc3dpdGNoZXMgYXQKKyAgIG9mZi1jYW1wdXMgbG9j YXRpb25zLiBUaGVzZSBzd2l0Y2hlcyBhcmUgMTk4MHMgdGVjaG5vbG9neSosIHRoZWlyCisgICBt YW5hZ2VtZW50IGNvbnNvbGVzIGFyZSBzZXJpYWwgcG9ydHMuIEFjY2VzcyBpcyB2aWEgVGVsbmV0 IHRvIHJldmVyc2UKKyAgIHRlcm1pbmFsIHNlcnZlcnMuIFRoZSBzY3JpcHRzIGFsbG93IGZvciBp bnRlcmFjdGl2ZSBzZXNzaW9ucyBhcyB3ZWxsIGFzCisgICBhdXRvbWF0aWMgcHJvZHVjdGlvbiAo YW5kIGluIHNvbWUgY2FzZXMgZm9ybWF0dGluZykgb2YgZGlmZmVyZW50CisgICByZXBvcnRzIHJl cXVpcmVkIGJ5IGRpZmZlcmVudCBncm91cHMgYXQgZGlmZmVyZW50IGludGVydmFscy4gVGhlc2UK KyAgIHNjcmlwdHMgcmVwbGFjZSBhIHdob2xlIGFzc29ydG1lbnQgb2YgYWQtaG9jIFByb0NvbW0g QVNQRUNUIHNjcmlwdHMKKyAgIHRoYXQgd2VyZSBzY2F0dGVyZWQgYWxsIG92ZXIgdGhlIHBsYWNl LCB3aXRoIHBhc3N3b3JkcyBlbWJlZGRlZC4gVGhlCisgICBuZXcgc2NyaXB0cyBhcmUgaW50ZW5k ZWQgdG8gYmUgcnVuIGZyb20gYSBjZW50cmFsaXplZCBzZXJ2ZXIgd2hlcmUKKyAgIHRoZXJlIGlz IGEgc2luZ2xlIHdlbGwtc2VjdXJlZCBjb25maWd1cmF0aW9uIGZpbGUsIGFuZCB3aGVyZSB0aGV5 IGNhbgorICAgYmUgdXNlZCBvbiBkZW1hbmQsIG9yIGluIGNyb24gam9icy4gVGhleSBhcmUgbW9k dWxhciBzbyBjb2RlCisgICBkdXBsaWNhdGlvbiBpcyBtaW5pbWFsLgorICAgX19fX19fX19fX19f X19fX19fX19fX19fX18KKyAgICogIE9mIGNvdXJzZSB0aGUgVW5pdmVyc2l0eSBpcyBkZXBsb3lp bmcgbmV3IHRlY2hub2xvZ3kgYnV0IHRoZSBidXQgdGhlCisgICBvbGQgc3lzdGVtIHdpbGwgYmUg dXNlZCBpbiBwYXJhbGxlbCBmb3Igc29tZSB0aW1lIHRvIGNvbWUuCisKK0RlbW9uc3RyYXRpb246 IENTViBhbmQgVFNWIEZpbGVzCisKKyAgIENvbnRlbnRzCisKKyAgICAgKiBbMTA1XVJlYWRpbmcg YSBDU1Ygb3IgVFNWIFJlY29yZCBhbmQgQ29udmVydGluZyBpdCB0byBhbiBBcnJheQorICAgICAq IFsxMDZdVXNpbmcgXGZqb2luKCkgdG8gY3JlYXRlIGEgQ29tbWEtIG9yIFRhYi1TZXBhcmF0ZWQg VmFsdWUgTGlzdAorICAgICAgIGZyb20gYW4gQXJyYXkKKyAgICAgKiBbMTA3XVVzaW5nIENTViBv ciBUU1YgRmlsZXMKKworICAgQ29tbWEtU2VwYXJhdGVkIFZhbHVlIChDU1YpIGZvcm1hdCBpcyBj b21tb25seSBvdXRwdXQgYnkgc3ByZWFkc2hlZXRzCisgICBhbmQgZGF0YWJhc2VzIHdoZW4gZXhw b3J0aW5nIGRhdGEgaW50byBwbGFpbi10ZXh0IGZpbGVzIGZvciBpbXBvcnQgaW50bworICAgb3Ro ZXIgYXBwbGljYXRpb25zLiBIZXJlIGFyZSB0aGUgZGV0YWlsczoKKworICAgQ29tbWEtU2VwYXJh dGVkIExpc3QgU3ludGF4CisKKyAgICAxLiBFYWNoIHJlY29yZCBpcyBhIHNlcmllcyBvZiBmaWVs ZHMuCisgICAgMi4gUmVjb3JkcyBhcmUgaW4gd2hhdGV2ZXIgZm9ybWF0IGlzIHVzZWQgYnkgdGhl IHVuZGVybHlpbmcgZmlsZQorICAgICAgIHN5c3RlbSBmb3IgbGluZXMgb2YgdGV4dC4KKyAgICAz LiBGaWVsZHMgd2l0aGluIHJlY29yZHMgYXJlIHNlcGFyYXRlZCBieSBjb21tYXMsIHdpdGggemVy byBvciBtb3JlCisgICAgICAgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzIChzcGFjZSBvciB0YWIpIGJl Zm9yZSBhbmQvb3IgYWZ0ZXIgdGhlIGNvbW1hOworICAgICAgIHN1Y2ggd2hpdGVzcGFjZSBpcyBj b25zaWRlcmVkIHBhcnQgb2YgdGhlIHNlcGFyYXRvci4KKyAgICA0LiBGaWVsZHMgd2l0aCBlbWJl ZGRlZCBjb21tYXMgbXVzdCBiZSBlbmNsb3NlZCBpbiBBU0NJSSBkb3VibGVxdW90ZQorICAgICAg IGNoYXJhY3RlcnMuCisgICAgNS4gRmllbGRzIHdpdGggbGVhZGluZyBvciB0cmFpbGluZyBzcGFj ZXMgbXVzdCBiZSBlbmNsb3NlZCBpbiBBU0NJSQorICAgICAgIGRvdWJsZXF1b3Rlcy4KKyAgICA2 LiBBbnkgZmllbGQgbWF5IGJlIGVuY2xvc2VkIGluIEFTQ0lJIGRvdWJsZXF1b3Rlcy4KKyAgICA3 LiBGaWVsZHMgd2l0aCBlbWJlZGRlZCBkb3VibGVxdW90ZXMgbXVzdCBiZSBlbmNsb3NlZCBpbiBk b3VibGVxdW90ZXMKKyAgICAgICBhbmQgZWFjaCBpbnRlcmlvciBkb3VibGVxdW90ZSBpcyBkb3Vi bGVkLgorCisgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisKK2FhYSwgYmJiLCBoYXMgc3BhY2VzLCwi ZGRkLGVlZSxmZmYiLCAiIGhhcyBzcGFjZXMgIiwiTXVoYW1tYWQgIiJUaGUgR3JlYXRlc3QiIiBB CitsaSIKKworICAgVGhlIGZpcnN0IHR3byBhcmUgcmVndWxhciBmaWVsZHMuIFRoZSBzZWNvbmQg aXMgYSBmaWVsZCB0aGF0IGhhcyBhbgorICAgZW1iZWRkZWQgc3BhY2UgYnV0IGluIHdoaWNoIGFu eSBsZWFkaW5nIG9yIHRyYWlsaW5nIHNwYWNlcyBhcmUgdG8gYmUKKyAgIGlnbm9yZWQuIFRoZSBm b3VydGggaXMgYW4gZW1wdHkgZmllbGQsIGJ1dCBzdGlsbCBhIGZpZWxkLiBUaGUgZmlmdGggaXMK KyAgIGEgZmllbGQgdGhhdCBjb250YWlucyBlbWJlZGRlZCBjb21tYXMuIFRoZSBzaXh0aCBoYXMg bGVhZGluZyBhbmQKKyAgIHRyYWlsaW5nIHNwYWNlcy4gVGhlIGxhc3QgZmllbGQgaGFzIGVtYmVk ZGVkIHF1b3RhdGlvbiBtYXJrcy4KKworICAgUHJpb3IgdG8gQy1LZXJtaXQgOS4wIEFscGhhLjA2 LCBDLUtlcm1pdCBkaWQgbm90IGhhbmRsZSBDU1YgZmlsZXMKKyAgIGFjY29yZGluZyB0byB0aGUg c3BlY2lmaWNhdGlvbiBhYm92ZS4gTW9zdCBzZXJpb3VzbHksIHRoZXJlIHdhcyBubworICAgcHJv dmlzaW9uIGZvciBhIHNlcGFyYXRvciB0byBiZSBzdXJyb3VuZGVkIGJ5IHdoaXRlc3BhY2UgdGhh dCB3YXMgdG8gYmUKKyAgIGNvbnNpZGVyZWQgcGFydCBvZiB0aGUgc2VwYXJhdG9yLiBBbHNvIHRo ZXJlIHdhcyBubyBwcm92aXNpb24gZm9yCisgICBxdW90aW5nIGRvdWJsZXF1b3RlcyBpbnNpZGUg b2YgYSBxdW90ZWQgc3RyaW5nLgorCitSZWFkaW5nIGEgQ1NWIHJlY29yZAorCisgICBOb3cgdGhl IFxmc3BsaXQoKSBmdW5jdGlvbiBjYW4gaGFuZGxlIGFueSBDU1YtZm9ybWF0IHN0cmluZyBpZiB5 b3UKKyAgIGluY2x1ZGUgdGhlIHN5bWJvbGljIGluY2x1ZGUgc2V0ICJDU1YiIGFzIHRoZSA0dGgg cGFyYW1ldGVyLiBUbworICAgaWxsdXN0cmF0ZSwgdGhpcyBwcm9ncmFtOgorCitkZWYgeHggewor ICAgZWNobyBbXGZjb250ZW50cyhcJTEpXQorICAgLlwlOSA6PSBcZnNwbGl0KFxmY29udGVudHMo XCUxKSwgJmEsIFw0NCwgQ1NWKQorICAgZm9yIFwlaSAxIFwlOSAxIHsgZWNobyAiXGZscGFkKFwl aSwzKS4gW1wmYVtcJWldXSIgfQorICAgZWNobyAiLS0tLS0tLS0tLS0iCit9Cit4eCB7YSxiLGN9 Cit4eCB7IGEgLCBiICwgYyB9Cit4eCB7IGFhYSwsY2NjLCIgd2l0aCBzcGFjZXMgIix6enogfQor eHggeyAiMSIsIjIiLCIzIiwiIiwiNSIgfQoreHggeyB0aGlzIGlzIGEgc2luZ2xlIGZpZWxkIH0K K3h4IHsgdGhpcyBpcyBvbmUgZmllbGQsICIgYW5kIHRoaXMgaXMgYW5vdGhlciAgIiB9Cit4eCB7 IG5hbWUsIk1vaGFtbWFkICIiVGhlIEdyZWF0ZXN0IiIgQWxpIiwgYWdlLCA2NyB9Cit4eCB7ICIi ImZpZWxkIGVuY2xvc2VkIGluIGRvdWJsZXF1b3RlcyIiIiB9CitleGl0CisKKyAgIGdpdmVzIHRo ZSBmb2xsb3dpbmcgcmVzdWx0czoKKworW2EsYixjXQorICAxLiBbYV0KKyAgMi4gW2JdCisgIDMu IFtjXQorLS0tLS0tLS0tLS0KK1sgYSAsIGIgLCBjIF0KKyAgMS4gW2FdCisgIDIuIFtiXQorICAz LiBbY10KKy0tLS0tLS0tLS0tCitbIGFhYSwsY2NjLCIgd2l0aCBzcGFjZXMgIix6enogXQorICAx LiBbYWFhXQorICAyLiBbXQorICAzLiBbY2NjXQorICA0LiBbIHdpdGggc3BhY2VzIF0KKyAgNS4g W3p6el0KKy0tLS0tLS0tLS0tCitbICIxIiwiMiIsIjMiLCIiLCI1IiBdCisgIDEuIFsxXQorICAy LiBbMl0KKyAgMy4gWzNdCisgIDQuIFtdCisgIDUuIFs1XQorLS0tLS0tLS0tLS0KK1sgdGhpcyBp cyBhIHNpbmdsZSBmaWVsZCBdCisgIDEuIFt0aGlzIGlzIGEgc2luZ2xlIGZpZWxkXQorLS0tLS0t LS0tLS0KK1sgdGhpcyBpcyBvbmUgZmllbGQsICIgYW5kIHRoaXMgaXMgYW5vdGhlciAgIiBdCisg IDEuIFt0aGlzIGlzIG9uZSBmaWVsZF0KKyAgMi4gWyBhbmQgdGhpcyBpcyBhbm90aGVyICBdCist LS0tLS0tLS0tLQorWyBuYW1lLCJNb2hhbW1hZCAiIlRoZSBHcmVhdGVzdCIiIEFsaSIsIGFnZSwg NjcgXQorICAxLiBbbmFtZV0KKyAgMi4gW01vaGFtbWFkICJUaGUgR3JlYXRlc3QiIEFsaV0KKyAg My4gW2FnZV0KKyAgNC4gWzY3XQorLS0tLS0tLS0tLS0KK1sgIiIiZmllbGQgZW5jbG9zZWQgaW4g ZG91YmxlcXVvdGVzIiIiIF0KKyAgMS4gWyJmaWVsZCBlbmNsb3NlZCBpbiBkb3VibGVxdW90ZXMi XQorLS0tLS0tLS0tLS0KKworICAgVGhlIHNlcGFyYXRvciBcNDQgKGNvbW1hKSBtdXN0IHN0aWxs IGJlIHNwZWNpZmllZCBhcyB0aGUgYnJlYWsgc2V0ICgzcmQKKyAgIFxmc3BsaXQoKSBwYXJhbWV0 ZXIpLiBXaGVuICJDU1YiIGlzIHNwZWNpZmllZCBhcyB0aGUgaW5jbHVkZSBzZXQ6CisgICAgICog VGhlIEdyb3VwaW5nIE1hc2sgaXMgYXV0b21hdGljYWxseSBzZXQgdG8gMSAod2hpY2ggc3BlY2lm aWVzIHRoYXQKKyAgICAgICB0aGUgQVNDSUkgZG91YmxlcXVvdGUgY2hhcmFjdGVyICgiKSBpcyB1 c2VkIGZvciBncm91cGluZzsKKyAgICAgKiBUaGUgU2VwYXJhdG9yIEZsYWcgaXMgYXV0b21hdGlj YWxseSBzZXQgdG8gMSBzbyB0aGF0IGFkamFjZW50IGZpZWxkCisgICAgICAgc2VwYXJhdG9ycyB3 aWxsIG5vdCBiZSBjb2xsYXBzZWQ7CisgICAgICogQWxsIGJ5dGVzICh2YWx1ZXMgMCB0aHJvdWdo IDI1NSkgb3RoZXIgdGhhbiB0aGUgYnJlYWsgY2hhcmFjdGVyIGFyZQorICAgICAgIGFkZGVkIHRv IHRoZSBpbmNsdWRlIHNldDsKKyAgICAgKiBBbnkgbGVhZGluZyB3aGl0ZXNwYWNlIGlzIHN0cmlw cGVkIGZyb20gdGhlIGZpcnN0IGVsZW1lbnQgdW5sZXNzIGl0CisgICAgICAgaXMgZW5jbG9zZWQg aW4gZG91YmxlcXVvdGVzOworICAgICAqIEFueSB0cmFpbGluZyB3aGl0ZXNwYWNlIGlzIHRyaW1t ZWQgZnJvbSB0aGUgZW5kIG9mIHRoZSBsYXN0IGVsZW1lbnQKKyAgICAgICB1bmxlc3MgaXQgaXMg ZW5jbG9zZWQgaW4gZG91YmxlcXVvdGVzOworICAgICAqIElmIHRoZSBzZXBhcmF0b3IgY2hhcmFj dGVyIGhhcyBhbnkgc3BhY2VzIG9yIHRhYnMgcHJlY2VkaW5nIGl0IG9yCisgICAgICAgZm9sbG93 aW5nIGl0LCB0aGV5IGFyZSBpZ25vcmVkIGFuZCBkaXNjYXJkZWQ7CisgICAgICogVGhlIHNlcGFy YXRvciBjaGFyYWN0ZXIgaXMgdHJlYXRlZCBhcyBhbiBvcmRpbmFyeSBkYXRhIGNoYXJhY3RlciBp ZgorICAgICAgIGl0IGFwcGVhcnMgaW4gYSBxdW90ZWQgZmllbGQ7CisgICAgICogQSBzZXF1ZW5j ZSBvZiB0d28gZG91YmxlcXVvdGUgY2hhcmFjdGVycyAoIiIpIHdpdGhpbiBhIHF1b3RlZCBmaWVs ZAorICAgICAgIGlzIGNvbnZlcnRlZCB0byBhIHNpbmdsZSBkb3VibGVxdW90ZS4KKworICAgVGhl cmUgaXMgYWxzbyBhIG5ldyBUU1Ygc3ltYm9saWMgaW5jbHVkZSBzZXQsIHdoaWNoIGlzIGxpa2Ug Q1NWIGV4Y2VwdAorICAgd2l0aG91dCB0aGUgcXVvdGluZyBydWxlcyBvciB0aGUgc3RyaXBwaW5n IG9mIHdoaXRlc3BhY2UgYXJvdW5kIHRoZQorICAgc2VwYXJhdG9yIGJlY2F1c2UsIGJ5IGRlZmlu aXRpb24sIFRTViBmaWVsZHMgZG8gbm90IGNvbnRhaW4gdGFicy4KKworICAgT2YgY291cnNlIHlv dSBjYW4gc3BlY2lmeSBhbnkgc2VwYXJhdG9yKHMpIHlvdSB3YW50IHdpdGggZWl0aGVyIHRoZQor ICAgQ1NWLCBUU1YsIG9yIEFMTCBzeW1ib2xpYyBpbmNsdWRlIHNldHMuIEZvciBleGFtcGxlLCBp ZiB5b3UgaGF2ZSBhIFRTVgorICAgZmlsZSBpbiB3aGljaCB5b3Ugd2FudCB0aGUgc3BhY2VzIGFy b3VuZCBlYWNoIFRhYiB0byBiZSBkaXNjYXJkZWQsIHlvdQorICAgY2FuIHVzZToKKworXGZzcGxp dCh2YXJpYWJsZSwgJmEsIFw5LCBDU1YpCisKKyAgIFw5IGlzIFRhYi4KKworICAgVGhlIG5ldyBz eW1ib2xpYyBpbmNsdWRlIHNldHMgY2FuIGFsc28gYmUgdXNlZCB3aXRoIFxmd29yZCgpLCB3aGlj aCBpcworICAganVzdCBsaWtlIFxmc3BsaXQoKSBleGNlcHQgdGhhdCBpdCByZXRyaWV2ZXMgdGhl IG50aCB3b3JkIGZyb20gdGhlCisgICBhcmd1bWVudCBzdHJpbmcsIHJhdGhlciB0aGFuIGFuIGFy cmF5IG9mIGFsbCB0aGUgd29yZHMuIEluIEMtS2VybWl0IHlvdQorICAgY2FuIGdldCBpbmZvcm1h dGlvbiBhYm91dCB0aGVzZSBvciBhbnkgb3RoZXIgZnVuY3Rpb25zIHdpdGggdGhlIEhFTFAKKyAg IEZVTkNUSU9OIGNvbW1hbmQsIGUuZy46CisKK0MtS2VybWl0PiBoZWxwIGZ1bmMgd29yZAorCitG dW5jdGlvbiBcZndvcmQoczEsbjEsczIsczMsbjIsbjMpIC0gRXh0cmFjdHMgYSB3b3JkIGZyb20g YSBzdHJpbmcuCisgICAgczEgPSBzb3VyY2Ugc3RyaW5nLgorICAgIG4xID0gd29yZCBudW1iZXIg KDEtYmFzZWQpIGNvdW50aW5nIGZyb20gbGVmdDsgaWYgbmVnYXRpdmUsIGZyb20gcmlnaHQuCisg ICAgczIgPSBvcHRpb25hbCBicmVhayBzZXQuCisgICAgczMgPSBvcHRpb25hbCBpbmNsdWRlIHNl dCAob3IgQUxMLCBDU1YsIG9yIFRTVikuCisgICAgbjIgPSBvcHRpb25hbCBncm91cGluZyBtYXNr LgorICAgIG4zID0gb3B0aW9uYWwgc2VwYXJhdG9yIGZsYWc6CisgICAgICAgMCA9IGNvbGxhcHNl IGFkamFjZW50IHNlcGFyYXRvcnM7CisgICAgICAgMSA9IGRvbid0IGNvbGxhcHNlIGFkamFjZW50 IHNlcGFyYXRvcnMuCisKKyAgXGZ3b3JkKCkgcmV0dXJucyB0aGUgbjF0aCAid29yZCIgb2YgdGhl IHN0cmluZyBzMSwgYWNjb3JkaW5nIHRvIHRoZQorICBjcml0ZXJpYSBzcGVjaWZpZWQgYnkgdGhl IG90aGVyIHBhcmFtZXRlcnMuCisKKyAgVGhlIEJSRUFLIFNFVCBpcyB0aGUgc2V0IG9mIGFsbCBj aGFyYWN0ZXJzIHRoYXQgc2VwYXJhdGUgd29yZHMuIFRoZQorICBkZWZhdWx0IGJyZWFrIHNldCBp cyBhbGwgY2hhcmFjdGVycyBleGNlcHQgQVNDSUkgbGV0dGVycyBhbmQgZGlnaXRzLgorICBBU0NJ SSAoQzApIGNvbnRyb2wgY2hhcmFjdGVycyBhcmUgdHJlYXRlZCBhcyBicmVhayBjaGFyYWN0ZXJz IGJ5IGRlZmF1bHQsCisgIGFzIGFyZSBzcGFjaW5nIGFuZCBwdW5jdHVhdGlvbiBjaGFyYWN0ZXJz LCBicmFja2V0cywgYW5kIHNvIG9uLCBhbmQKKyAgYWxsIDgtYml0IGNoYXJhY3RlcnMuCisKKyAg VGhlIElOQ0xVREUgU0VUIGlzIHRoZSBzZXQgb2YgY2hhcmFjdGVycyB0aGF0IGFyZSB0byBiZSB0 cmVhdGVkIGFzCisgIHBhcnRzIG9mIHdvcmRzIGV2ZW4gdGhvdWdoIHRoZXkgbm9ybWFsbHkgd291 bGQgYmUgc2VwYXJhdG9ycy4gIFRoZQorICBkZWZhdWx0IGluY2x1ZGUgc2V0IGlzIGVtcHR5LiAg VGhyZWUgc3BlY2lhbCBzeW1ib2xpYyBpbmNsdWRlIHNldHMgYXJlCisgIGFsc28gYWxsb3dlZDoK KworICAgIEFMTCAobWVhbmluZyBpbmNsdWRlIGFsbCBieXRlcyB0aGF0IGFyZSBub3QgaW4gdGhl IGJyZWFrIHNldCkKKyAgICBDU1YgKHNwZWNpYWwgdHJlYXRtZW50IGZvciBDb21tYS1TZXBhcmF0 ZWQtVmFsdWUgcmVjb3JkcykKKyAgICBUU1YgKHNwZWNpYWwgdHJlYXRtZW50IGZvciBUYWItU2Vw YXJhdGVkLVZhbHVlIHJlY29yZHMpCisKKyAgRm9yIG9wZXJhdGluZyBvbiA4LWJpdCBjaGFyYWN0 ZXIgc2V0cywgdGhlIGluY2x1ZGUgc2V0IHNob3VsZCBiZSBBTEwuCisKKyAgSWYgdGhlIEdST1VQ SU5HIE1BU0sgaXMgZ2l2ZW4gYW5kIGlzIG5vbnplcm8sIHdvcmRzIGNhbiBiZSBncm91cGVkIGJ5 CisgIHF1b3RlcyBvciBicmFja2V0cyBzZWxlY3RlZCBieSB0aGUgc3VtIG9mIHRoZSBmb2xsb3dp bmc6CisKKyAgICAgMSA9IGRvdWJsZXF1b3RlczogICAgImEgYiBjIgorICAgICAyID0gYnJhY2Vz OiAgICAgICAgICB7YSBiIGN9CisgICAgIDQgPSBhcG9zdHJvcGhlczogICAgICdhIGIgYycKKyAg ICAgOCA9IHBhcmVudGhlc2VzOiAgICAgKGEgYiBjKQorICAgIDE2ID0gc3F1YXJlIGJyYWNrZXRz OiBbYSBiIGNdCisgICAgMzIgPSBhbmdsZSBicmFja2V0czogIDxhIGIgYz4KKworICBOZXN0aW5n IGlzIHBvc3NpYmxlIHdpdGgge30oKVtdPD4gYnV0IG5vdCB3aXRoIHF1b3RlcyBvciBhcG9zdHJv cGhlcy4KKworUmV0dXJucyBzdHJpbmc6CisgIFdvcmQgbnVtYmVyIG4xLCBpZiB0aGVyZSBpcyBv bmUsIG90aGVyd2lzZSBhbiBlbXB0eSBzdHJpbmcuCisKK0Fsc28gc2VlOgorICBIRUxQIEZVTkNU SU9OIFNQTElUCisKK0MtS2VybWl0PgorCitVc2luZyBcZmpvaW4oKSB0byBjcmVhdGUgQ29tbWEt IG9yIFRhYi1TZXBhcmF0ZWQgVmFsdWUgTGlzdHMgZnJvbSBBcnJheXMKKworICAgSW4gQy1LZXJt aXQgOS4wLCBcZnNwbGl0KCkncyBpbnZlcnNlIGZ1bmN0aW9uLCBbMTA4XVxmam9pbigpIHJlY2Vp dmVkCisgICB0aGUgY2FwYWJpbGl0eSBvZiBjb252ZXJ0aW5nIGFuIGFycmF5IGludG8gYSBjb21t YS1zZXBhcmF0ZWQgb3IgYQorICAgdGFiLXNlcGFyYXRlZCB2YWx1ZSBsaXN0LiBUaHVzLCBnaXZl biBhIENTViwgaWYgeW91IHNwbGl0IGl0IGludG8gYW4KKyAgIGFycmF5IHdpdGggXGZzcGxpdCgp IGFuZCB0aGVuIGpvaW4gdGhlIGFycmF5IHdpdGggXGZqb2luKCksIGdpdmluZyBlYWNoCisgICBm dW5jdGlvbiB0aGUgbmV3IENTViBwYXJhbWV0ZXIgaW4gdGhlIGFwcHJvcHJpYXRlIGFyZ3VtZW50 IHBvc2l0aW9uLAorICAgdGhlIHJlc3VsdCB3aWxsIGJlIHdpbGwgYmUgZXF1aXZhbGVudCB0byB0 aGUgb3JpZ2luYWwsIGFjY29yZGluZyB0byB0aGUKKyAgIENTViBkZWZpbml0aW9uLiBJdCBtaWdo dCBub3QgYmUgaWRlbnRpY2FsLCBiZWNhdXNlIGlmIHRoZSByZXN1bHQgaGFkCisgICBleHRyYW5l b3VzIHNwYWNlcyBiZWZvcmUgb3IgYWZ0ZXIgdGhlIHNlcGFyYXRpbmcgY29tbWFzLCB0aGVzZSBh cmUKKyAgIGRpc2NhcmRlZCwgYnV0IHRoYXQgZG9lcyBub3QgYWZmZWN0IHRoZSBlbGVtZW50cyB0 aGVtc2VsdmVzLiBUaGUgbmV3CisgICBzeW50YXggZm9yIFxmam9pbigpIGlzOgorCisgICBcZmpv aW4oJmEsQ1NWKQorICAgICAgICAgIEdpdmVuIHRoZSBhcnJheSBcJmFbXSBvciBhbnkgb3RoZXIg dmFsaWQgYXJyYXkgZGVzaWduYXRvciwgam9pbnMKKyAgICAgICAgICBpdHMgZWxlbWVudHMgaW50 byBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IGFjY29yZGluZyB0byB0aGUKKyAgICAgICAgICBbMTA5 XXJ1bGVzIGxpc3RlZCBhYm92ZS4KKworICAgXGZqb2luKCZhLFRTVikKKyAgICAgICAgICBKb2lu cyB0aGUgZWxlbWVudHMgb2YgdGhlIGdpdmVuIGFycmF5IGludG8gYSB0YWItc2VwYXJhdGVkIGxp c3QsCisgICAgICAgICAgYWxzbyBkZXNjcmliZWQgYWJvdmUuCisKKyAgIFsxMTBdUHJldmlvdXMg Y2FsbGluZyBjb252ZW50aW9ucyBmb3IgXGZqb2luKCkgYXJlIHVuZGlzdHVyYmVkLAorICAgaW5j bHVkaW5nIHRoZSBhYmlsaXR5IHRvIHNwZWNpZnkgYSBwb3J0aW9uIG9mIGFuIGFycmF5LCByYXRo ZXIgdGhhbiB0aGUKKyAgIHdob2xlIGFycmF5OgorCitkZWNsYXJlIFwmYVtdID0gMSAyIDMgNCA1 IDYgNyA4IDkKK2VjaG8gXGZqb2luKCZhWzM6N10sQ1NWKQorMyw0LDUsNiw3CisKKyAgIFVzaW5n IFxmc3BsaXQoKSBhbmQgXGZqb2luKCkgaXQgaXMgbm93IHBvc3NpYmxlIHRvIGNvbnZlcnQgYQor ICAgY29tbWEtc2VwYXJhdGVkIHZhbHVlIGxpc3QgaW50byBhIHRhYi1zZXBhcmF0ZWQgdmFsdWUg bGlzdCwgYW5kIHZpY2UKKyAgIHZlcnNhICh3aGljaCBpcyBub3QgYSBzaW1wbGUgbWF0dGVyIG9m IGNoYW5naW5nIGNvbW1hcyB0byB0YWJzIG9yIHZpY2UKKyAgIHZlcnNhKS4KKworQXBwbGljYXRp b25zIGZvciBDU1YgRmlsZXMKKworICAgRGF0YWJhc2VzIHN1Y2ggYXMgTVMgQWNjZXNzIG9yIE15 U1FMIGNhbiBleHBvcnQgdGFibGVzIG9yIHJlcG9ydHMgaW4KKyAgIENTViBmb3JtYXQsIGFuZCB0 aGVuIEtlcm1pdCBjYW4gcmVhZCB0aGUgcmVzdWx0aW5nIENTViBmaWxlIGFuZCBkbworICAgd2hh dGV2ZXIgeW91IGxpa2Ugd2l0aCBpdDsgdHlwaWNhbGx5IHNvbWV0aGluZyB0aGF0IGNvdWxkIG5v dCBiZSBkb25lCisgICB3aXRoIHRoZSBkYXRhYmFzZSBxdWVyeSBsYW5ndWFnZSBpdHNlbGYgKG9y IHRoYXQgeW91IGRpZG4ndCBrbm93IGhvdyB0bworICAgZG8gdGhhdCB3YXkpOiBjcmVhdGUgcmVw b3J0cyBvciBkYXRhc2V0cyBiYXNlZCBvbiBjb21wbGV4IGNyaXRlcmlhIG9yCisgICBwcm9jZWR1 cmVzLCBlZGl0IG9yIG1vZGlmeSBzb21lIGZpZWxkcywgZXRjLCBhbmQgdGhlbiB1c2UgXGZqb2lu KCkgdG8KKyAgIHB1dCBlYWNoIHJlY29yZCBiYWNrIGluIENTViBmb3JtIHNvIGl0IGNhbiBiZSBy ZWltcG9ydGVkIGludG8gYQorICAgc3ByZWFkc2hlZXQgb3IgZGF0YWJhc2UuCisKKyAgIEhlcmUg aXMgYSBzaW1wbGUgZXhhbXBsZSBpbiB3aGljaCB3ZSBwdXJnZSBhbGwgcmVjb3JkcyBvZiBjdXN0 b21lcnMgd2hvCisgICBoYXZlIHR3byBvciBtb3JlIHVucGFpZCBiaWxscy4gVGhlIGZpbGUgaXMg c29ydGVkIHNvIHRoYXQgZWFjaCBsaWNlbnNlCisgICBwdXJjaGFzZSByZWNvcmQgaXMgZm9sbG93 ZWQgYnkgaXRzIGFubnVhbCBtYWludGVuYW5jZSBwYXltZW50IHJlY29yZHMKKyAgIGluIGNocm9u b2xvZ2ljYWwgb3JkZXIuCisKKyMhL3Vzci9sb2NhbC9iaW4va2VybWl0CisuZmlsZW5hbWUgPSBz b21lZmlsZS5jc3YgICAgICAgICMgSW5wdXQgZmlsZSBpbiBDU1YgZm9ybWF0Citmb3BlbiAvcmVh ZCBcJWMgXG0oZmlsZW5hbWUpICAgICMgT3BlbiBpdAoraWYgZmFpbCBleGl0ICAgICAgICAgICAg ICAgICAgICAjIERvbid0IGdvIG9uIGlmIG9wZW4gZmFpbGVkCitjb3B5IFxtKGZpbGVuYW1lKSAu L25ldyAgICAgICAgICMgTWFrZSBhIGNvcHkgb2YgdGhlIGZpbGUKKworLm9sZHNlcmlhbCA9IDAw MDAwMDAwMDAwICAgICAgICAjIE11bHRpcGxlIHJlY29yZHMgZm9yIGVhY2ggc2VyaWFsIG51bWJl cgorLnplcm9zID0gMCAgICAgICAgICAgICAgICAgICAgICAjIFVucGFpZCBiaWxsIGNvdW50ZXIK Kword2hpbGUgdHJ1ZSB7ICAgICAgICAgICAgICAgICAgICAjIExvb3AKKyAgICBmcmVhZCAvbGlu ZSBcJWMgbGluZSAgICAgICAgIyBHZXQgYSByZWNvcmQKKyAgICBpZiBmYWlsIGV4aXQgICAgICAg ICAgICAgICAgIyBFbmQgb2YgZmlsZQorICAgIC5uIDo9IFxmc3BsaXQoXG0obGluZSksJmEsXDQ0 LENTVikgICAgIyBTcGxpdCB0aGUgZmllbGRzIGludG8gYW4gYXJyYXkKKyAgICBpZiBub3QgZXF1 ICJcbShvbGRzZXJpYWwpIiAiXCZhWzZdIiB7ICMgSGF2ZSBuZXcgc2VyaWFsIG51bWJlcj8KKyAg ICAgICAgIyBSZW1vdmUgYWxsIHJlY29yZHMgZm9yIHByZXZpb3VzIHNlcmlhbCBudW1iZXIKKyAg ICAgICAgIyBpZiB0d28gb3IgbW9yZSBiaWxscyB3ZXJlIG5vdCBwYWlkLi4uCisgICAgICAgIGlm ID4gXG0oemVyb3MpIDEgeworICAgICAgICAgICAgZ3JlcCAvbm9tYXRjaCBcbShvbGRzZXJpYWwp IC9vdXRwdXQ6Li9uZXcyIC4vbmV3CisgICAgICAgICAgICByZW5hbWUgLi9uZXcyIC4vbmV3Cisg ICAgICAgIH0KKyAgICAgICAgLm9sZHNlcmlhbCA6PSBcJmFbNl0gICAgIyBUbyBkZXRlY3QgbmV4 dCB0aW1lIHNlcmlhbCBudW1iZXIgY2hhbmdlcworICAgICAgICAuemVyb3MgPSAwICAgICAgICAg ICAgICAjIFJlc2V0IHVucGFpZCBiaWxsIGNvdW50ZXIKKyAgICB9CisgICAgaWYgZXF1ICJcJmFb NV0iICIkMC4wMCIgeyAgICMgRWxlbWVudCA1IGlzIGFtb3VudCBwYWlkCisgICAgICAgIGluY3Jl bWVudCB6ZXJvcyAgICAgICAgICMgSWYgaXQncyB6ZXJvLCBjb3VudCBpdC4KKyAgICB9Cit9Citm Y2xvc2UgXCVjCisKKyAgIFJld3JpdGluZyB0aGUgZmlsZSBtdWx0aXBsZSB0aW1lcyBpcyBpbmVs ZWdhbnQsIGJ1dCB0aGlzIGlzIGEgcXVpY2sgYW5kCisgICBkaXJ0eSB1c2Utb25jZS1hbmQtZGlz Y2FyZCBzY3JpcHQsIHNvIGVsZWdhbmNlIGRvZXNuJ3QgY291bnQuIFRoZQorICAgZXhhbXBsZSBp cyBpbnRlcmVzdGluZyBpbiB0aGF0IGl0IHB1cmdlcyBjZXJ0YWluIHJlY29yZHMgYmFzZWQgb24g dGhlCisgICBjb250ZW50cyBvZiBvdGhlciByZWNvcmRzLiBNYXliZSB0aGVyZSBpcyBhIHdheSB0 byBkbyB0aGlzIGRpcmVjdGx5CisgICB3aXRoIFNRTCwgYnV0IHdoeSB1c2UgU1FMIHdoZW4geW91 IGNhbiB1c2UgS2VybWl0PworCisgICBIZXJlIGlzIHRoZSBzYW1lIHRhc2sgYnV0IHRoaXMgdGlt ZSBubyBzaGVsbGluZyBvdXQsIGFuZCB0aGlzIHRpbWUgd2UKKyAgIGRvIGNoYW5nZSBhbmQgYWRk IHNvbWUgZmllbGRzIGFuZCB0aGVuIGpvaW4gdGhlIHJlc3VsdCBiYWNrIGludG8gYSBDU1YKKyAg IHJlY29yZCBhbmQgd3JpdGUgaXQgb3V0IHRvIGEgbmV3IGZpbGUuIFRoZSBvYmplY3QgaXMgdG8g Y3JlYXRlIGEgcmVjb3JkCisgICBmb3IgZWFjaCBsaWNlbnNlIHRoYXQgc2hvd3Mgbm90IG9ubHkg dGhlIGRhdGUgYW5kIHB1cmNoYXNlIHByaWNlIG9mIHRoZQorICAgbGljZW5zZSBidXQgYWxzbyB0 aGUgZGF0ZSBhbmQgYW1vdW50IG9mIHRoZSBsYXN0IG1haW50ZW5hbmNlIHBheW1lbnQsCisgICBh bmQgdG8gYWRkIG5ldyBmaWVsZHMgZm9yIHNvcnRpbmcgYnkgYW5uaXZlcnNhcnkgKG1vbnRoIGFu ZCBkYXkpOgorCisjIXVzci9sb2NhbC9iaW4va2VybWl0ICsKK2NkIH4vc29tZWRpcmVjdG9yeSAg ICAgICAgICAgICAgICAgICAgICAjIENEIHRvIGFwcHJvcHJpYXRlIGRpcmVjdG9yeQoraWYgZmFp bCBleGl0IDEgICAgICAgICAgICAgICAgICAgICAgICAgICMgTWFrZSBzdXJlIHdlIGRpZAorLmZp bGVuYW1lIDo9IFwlMSAgICAgICAgICAgICAgICAgICAgICAgICMgRmlsZW5hbWUgZnJvbSBjb21t YW5kIGxpbmUKK2lmIG5vdCBkZWYgZmlsZW5hbWUgeyAgICAgICAgICAgICAgICAgICAjIElmIG5v bmUgZ2l2ZSB1c2FnZSBtZXNzYWdlCisgICAgZXhpdCAxICJVc2FnZTogXCUwOiBpbmZpbGUgWyBv dXRmaWxlIF0iCit9Citmb3BlbiAvcmVhZCBcJWMgXG0oZmlsZW5hbWUpICAgICAgICAgICAgIyBP cGVuIHRoZSBpbnB1dCBDU1YgZmlsZQoraWYgZmFpbCBleGl0ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICMgTWFrZSBzdXJlIHdlIGRpZAorCisub3V0cHV0IDo9IFwlMiAgICAgICAgICAgICAg ICAgICAgICAgICAgIyBPdXRwdXQgZmlsZW5hbWUgZnJvbSBjb21tYW5kIGxpbmUKK2lmIG5vdCBk ZWYgb3V0cHV0IHsgICAgICAgICAgICAgICAgICAgICAjIFN1cHBseSBvbmUgaWYgbm90IGdpdmVu CisgICAgLm91dHB1dCA6PSBOZXdfXG0oZmlsZW5hbWUpCit9Citmb3BlbiAvd3JpdGUgXCVvIFxt KG91dHB1dCkgICAgICAgICAgICAgIyBPcGVuIG91dHB1dCBmaWxlCitpZiBmYWlsIGV4aXQgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIyBDaGVjayB0aGF0IHdlIGRpZAorCisuc2VyaWFsID0g MDAwMDAwMDAwMDAgICAgICAgICAgICAgICAgICAgIyBJbml0aWFsaXplIHNlcmlhbCBudW1iZXIK Ky5saWNlbnNlcyA9IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGFuZCBsaWNlbnNlIGNv dW50ZXIKKworZnJlYWQgL2xpbmUgXCVjIGxpbmUgICAgICAgICAgICAgICAgICAgICAgICAjIEZp cnN0IGxpbmUgaXMgY29sdW1uIGxhYmVscworaWYgZmFpbCBleGl0ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAjIENoZWNrCitmd3JpdGUgL2xpbmUgXCVvICJcbShsaW5lKSxBTU1fREQs QVlZWVkiICAgICMgV3JpdGUgbmV3IGxhYmVscyBsaW5lCisKKyMgUmVtYWluaW5nIGxpbmVzIGFy ZSBsaWNlbnNlIHB1cmNoYXNlcyAoSzk1QikgZm9sbG93ZWQgYnkgemVybyBvciBtb3JlCisjIG1h aW50ZW5hbmNlIGludm9pY2VzIChLOTVCTSkgZm9yIGVhY2ggbGljZW5zZS4KKworLmRhdGVwYWlk ID0gMDAvMDAvMDAwMCAgICAgICAgICAgICAgICAgICMgSW5pdGlhbGl6ZSBsYXN0IG1haW50IHBh eW1lbnQgZGF0ZQorLmFtdHBhaWQgPSAkMC4wMCAgICAgICAgICAgICAgICAgICAgICAgICMgSW5p dGlhbGl6ZSBsYXN0IG1haW50IHBheW1lbnQgYW1vdW50CitzZXQgZmxhZyBvZmYgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIyBGb3IgcmVtZW1iZXJpbmcgd2UncmUgYXQgZW5kIG9mIGZpbGUK K3doaWxlIG5vdCBmbGFnIHsgICAgICAgICAgICAgICAgICAgICAgICAjIExvb3AgdG8gcmVhZCBh bGwgcmVjb3JkcworICAgIGZyZWFkIC9saW5lIFwlYyBsaW5lICAgICAgICAgICAgICAgICMgUmVh ZCBhIHJlY29yZAorICAgIGlmIGZhaWwgc2V0IGZsYWcgb24gICAgICAgICAgICAgICAgICMgSWYg RU9GIHNldCBmbGFnIGZvciBsYXRlcgorICAgIC5uIDo9IFxmc3BsaXQoXG0obGluZSksJmEsXDQ0 LENTVikgICMgQnJlYWsgcmVjb3JkIGludG8gYXJyYXkKKyAgICBpZiAoIGZsYWcgfHwgZXF1ICJc JmFbM10iICJLOTVCIiApIHsgIyBMaWNlbnNlIG9yIEVPRgorICAgICAgICBpZiBmYWlsIGV4aXQg MSAiRkFJTEVEOiBcdihsYXN0Y29tbWFuZCkiCisgICAgICAgIGlmIGxpY2Vuc2VzIHsgICAgICAg ICAgICAgICAgICAgIyBJZiB0aGlzIGlzIG5vdCB0aGUgZmlyc3QgbGljZW5zZQorICAgICAgICAg ICAgLlwmeFs1XSA6PSBcbShhbXRwYWlkKSAgICAgICMgU3Vic3RpdHV0ZSBtb3N0IHJlY2VudCBh bW91bnQgcGFpZAorICAgICAgICAgICAgLlwmeFsyMV0gOj0gXG0oZGF0ZXBhaWQpICAgICMgU3Vi c3RpdHV0ZSBtb3N0IHJlY2VudCBkYXRlIHBhaWQKKyAgICAgICAgICAgIHZvaWQgXGZzcGxpdChc JnhbMThdLCZkLC8pICAjIEJyZWFrIHVwIG9yaWdpbmFsIChhbm5pdmVyc2FyeSkgZGF0ZQorICAg ICAgICAgICAgIyBhbmQgcHV0IG1tX2RkIGFuZCB5eXl5IGluIHNlcGFyYXRlIGZpZWxkcyBmb3Ig c29ydGluZy4uLgorICAgICAgICAgICAgZndyaXRlIC9saW5lIFwlbyAiXGZqb2luKCZ4LENTViks XGZscGFkKFwmZFsxXSwyLDApX1xmbHBhZChcJmRbMl0sMiwKKzApLFwmZFszXSIKKyAgICAgICAg ICAgIGlmIGZhaWwgZXhpdCAxIFdSSVRFICAgICAgICAjIENoZWNrIGZvciBlcnJvcgorICAgICAg ICAgICAgeGVjaG8gLiAgICAgICAgICAgICAgICAgICAgICMgU2hvdyBwcm9ncmVzcyBhcyBvbmUg ZG90IHBlciByZWNvcmQKKyAgICAgICAgfQorICAgICAgICBpZiBmbGFnIGJyZWFrICAgICAgICAg ICAgICAgICAgICMgV2UncmUgYXQgRU9GIHNvIHdlJ3JlIGZpbmlzaGVkCisgICAgICAgIGluY3Jl bWVudCBsaWNlbnNlcyAgICAgICAgICAgICAgIyBOZXcgbGljZW5zZSAtIGNvdW50IGl0CisgICAg ICAgIGFycmF5IGNvcHkgJmEgJnggICAgICAgICAgICAgICAgIyBLZWVwIHRoaXMgcmVjb3JkIHdo aWxlIHJlYWRpbmcgbmV4dAorICAgICAgICAuc2VyaWFsIDo9IFwmYVs2XSAgICAgICAgICAgICAg ICMgUmVtZW1iZXIgc2VyaWFsIG51bWJlcgorICAgICAgICAuZGF0ZXBhaWQgPSAwMC8wMC8wMDAw ICAgICAgICAgICMgSW5pdGlhbCBtYWludGVuYW5jZSBwYXltZW50IGRhdGUKKyAgICAgICAgLmFt dHBhaWQgPSAkMC4wMCAgICAgICAgICAgICAgICAjIGFuZCBhbW91bnQKKyAgICAgICAgY29udGlu dWUgICAgICAgICAgICAgICAgICAgICAgICAjIGFuZCBnbyBiYWNrIHRvIHJlYWQgbmV4dCByZWNv cmQKKyAgICB9CisgICAgaWYgbm90IGVxICJcbShzZXJpYWwpIiAiXCZhWzZdIiB7ICAgIyBDYXRj aCBvdXQtb2Ytc2VxdWVuY2UgcmVjb3JkCisgICAgICAgIGVjaG8KKyAgICAgICAgZWNobyAiU0VR VUVOQ0U6IFxtKHNlcmlhbCkuLlwmYVs2XTogXCZhWzddIFtcJmFbMV1dIgorICAgICAgICBjb250 aW51ZQorICAgIH0KKyAgICBpZiBlcXUgIlwmYVs1XSIgIiIgLlwmYVs1XSA9ICQwLjAwICAjIElm IGFtb3VudCBpcyBlbXB0eSBtYWtlIGl0ICQwLjAwCisgICAgaWYgbm90IGVxdSAiXCZhWzVdIiAi JDAuMDAiIHsgICAgICAgIyBJZiBhbW91bnQgaXMgbm90ICQwLjAwCisgICAgICAgIC5kYXRlcGFp ZCA6PSBcJmFbMjFdICAgICAgICAgICAgIyByZW1lbWJlciBkYXRlIHBhaWQKKyAgICAgICAgLmFt dHBhaWQgOj0gXCZhWzVdICAgICAgICAgICAgICAjIGFuZCBhbW91bnQgcGFpZAorICAgIH0KK30K K2ZjbG9zZSBBTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIERvbmUgLSBjbG9zZSBh bGwgZmlsZXMgYW5kIGV4aXQKK2V4aXQgMCBEb25lLgorCisKKyAgIFRoZSByZXN1bHQgaW1wb3J0 cyBiYWNrIGludG8gRXhjZWwsIHdoZXJlIGl0IGNhbiBiZSBzb3J0ZWQsIGZvcm1hdHRlZCwKKyAg IG9yIG90aGVyd2lzZSBtYW5pcHVsYXRlZCBhcyBkZXNpcmVkLgorCitVc2luZyBDU1YgRmlsZXM6 IEV4dGVuZGluZyBLZXJtaXQncyBEYXRhIFN0cnVjdHVyZXMKKworICAgTm93IHRoYXQgd2UgY2Fu IHBhcnNlIGEgQ1NWIHJlY29yZCwgd2hhdCB3b3VsZCB3ZSBkbyB3aXRoIGEgQ1NWIGZpbGUgLQor ICAgdGhhdCBpcywgYSBzZXF1ZW5jZSBvZiByZWNvcmRzPyBJZiB3ZSBuZWVkZWQgYWxsIHRoZSBk YXRhIGF2YWlsYWJsZSBhdAorICAgb25jZSwgd2Ugd291bGQgd2FudCB0byBsb2FkIGl0IGludG8g YSBtYXRyaXggb2YgKHJvdyxjb2x1bW4pIHZhbHVlcy4KKyAgIEJ1dCBLZXJtaXQgZG9lc24ndCBo YXZlIG1hdHJpY2VzLiBPciBkb2VzIGl0PworCisgICBLZXJtaXQgaGFzIHNldmVyYWwgYnVpbHQt aW4gZGF0YSB0eXBlcywgYnV0IHlvdSBjYW4gaW52ZW50IHlvdXIgb3duCisgICBkYXRhIHR5cGVz IGFzIG5lZWRlZCB1c2luZyBLZXJtaXQncyBtYWNybyBmZWF0dXJlOgorCitkZWZpbmUgdmFyaWFi bGVuYW1lIHZhbHVlCisKKyAgIEZvciBleGFtcGxlOgorCitkZWZpbmUgYWxwaGFiZXQgYWJjZGVm Z2hpamtsbW5vcHFyc3R1dnd4eXoKKworICAgVGhpcyBkZWZpbmVzIGEgbWFjcm8gbmFtZWQgYWxw aGFiZXQgYW5kIGdpdmVzIGl0IHRoZSB2YWx1ZQorICAgYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4 eXouIEEgbW9yZSBjb252ZW5pZW50IG5vdGF0aW9uIChhZGRlZCBpbgorICAgQy1LZXJtaXQgNy4w LCBzZWUgWzExMV1UYWJsZSAyKSBmb3IgdGhpcyBpczoKKworLmFscGhhYmV0ID0gYWJjZGVmZ2hp amtsbW5vcHFyc3R1dnd4eXoKKworICAgVGhlIHR3byBhcmUgZXhhY3RseSBlcXVpdmFsZW50OiB0 aGV5IG1ha2UgYSBsaXRlcmFsIGNvcHkgdGhlICJyaWdodAorICAgaGFuZCBzaWRlIiBhcyB0aGUg dmFsdWUgb2YgdGhlIG1hY3JvLiBUaGVuIHlvdSBjYW4gcmVmZXIgdG8gdGhlIG1hY3JvCisgICBh bnl3aGVyZSBpbiBhIEtlcm1pdCBjb21tYW5kIGFzICJcbShtYWNyb25hbWUpIjoKKworZWNobyAi QWxwaGFiZXQgPSBcbShhbHBoYWJldCkiCisKKyAgIFRoZXJlIGlzIGEgc2Vjb25kIHdheSB0byBk ZWZpbmUgYSBtYWNybywgd2hpY2ggaXMgbGlrZSB0aGUgZmlyc3QgZXhjZXB0CisgICB0aGF0IHRo ZSByaWdodC1oYW5kIHNpZGUgaXMgZXZhbHVhdGVkIGZpcnN0OyB0aGF0IGlzLCBhbnkgdmFyaWFi bGUKKyAgIHJlZmVyZW5jZXMgb3IgZnVuY3Rpb24gY2FsbHMgaW4gdGhlIHJpZ2h0LWhhbmQgc2lk ZSBhcmUgcmVwbGFjZWQgYnkKKyAgIHRoZWlyIHZhbHVlcyBiZWZvcmUgdGhlIHJlc3VsdCBpcyBh c3NpZ25lZCB0byB0aGUgbWFjcm8uIFRoZSBjb21tYW5kCisgICBmb3IgdGhpcyBpcyBBU1NJR04g cmF0aGVyIHRoYW4gREVGSU5FOgorCitkZWZpbmUgYWxwaGFiZXQgYWJjZGVmZ2hpamtsbW5vcHFy c3R1dnd4eXoKK2Fzc2lnbiBiYWNrd2FyZHMgXGZyZXZlcnNlKFxtKGFscGhhYmV0KSkKK2VjaG8g IkFscGhhYmV0IGJhY2t3YXJkcyA9IFxtKGJhY2t3YXJkcykiCisKKyAgIHdoaWNoIHByaW50czoK KworQWxwaGFiZXQgYmFja3dhcmRzID0genl4d3Z1dHNycXBvbm1sa2ppaGdmZWRjYmEKKworICAg VGhpcyBraW5kIG9mIGFzc2lnbm1lbnQgY2FuIGFsc28gYmUgZG9uZSBsaWtlIHRoaXM6CisKKy5h bHBoYWJldCA9IGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6CisuYmFja3dhcmRzIDo9IFxmcmV2 ZXJzZShcbShhbHBoYWJldCkpCisKKyAgIFsxMTJdQW55IGNvbW1hbmQgc3RhcnRpbmcgd2l0aCBh IHBlcmlvZCBpcyBhbiBhc3NpZ25tZW50LCBhbmQgdGhlCisgICBvcGVyYXRvciAoPSBvciA6PSkg dGVsbHMgd2hhdCB0byBkbyB3aXRoIHRoZSByaWdodC1oYW5kIHNpZGUgYmVmb3JlCisgICBtYWtp bmcgdGhlIGFzc2lnbm1lbnQuCisKKyAgIEluIGJvdGggdGhlIERFRklORSBhbmQgQVNTSUdOIGNv bW1hbmRzLCB0aGUgdmFyaWFibGUgbmFtZSBpdHNlbGYgaXMKKyAgIHRha2VuIGxpdGVyYWxseS4g SXQgaXMgYWxzbyBwb3NzaWJsZSwgaG93ZXZlciwgdG8gaGF2ZSBLZXJtaXQgY29tcHV0ZQorICAg dGhlIHZhcmlhYmxlIG5hbWUuIFRoaXMgaXMgZG9uZSAoYXMgZGVzY3JpYmVkIGluIFsxMTNdVXNp bmcgQy1LZXJtaXQsCisgICAybmQgRWQuLCBwLjQ1NyksIHVzaW5nIHBhcmFsbGVsIGNvbW1hbmRz IHRoYXQgc3RhcnQgd2l0aCB1bmRlcnNjb3JlOgorICAgX0RFRklORSBhbmQgX0FTU0lHTiAoYWxp YXMgX0RFRiBhbmQgX0FTRykuIFRoZXNlIGFyZSBqdXN0IGxpa2UgREVGSU5FCisgICBhbmQgQVNT SUdOIGV4Y2VwdCB0aGV5IGV2YWx1YXRlIHRoZSB2YXJpYWJsZSBuYW1lIGJlZm9yZSBtYWtpbmcg dGhlCisgICBhc3NpZ25tZW50LiBGb3IgZXhhbXBsZToKKworZGVmaW5lIFwlYSBvbmUKK19kZWZp bmUgXCVhXCVhXCVhIDExMQorCisgICB3b3VsZCBjcmVhdGUgYSBtYWNybyBuYW1lZCBPTkVPTkVP TkUgd2l0aCBhIHZhbHVlIG9mIDExMSwgYW5kOgorCitkZWZpbmUgXCVhIG9uZQorZGVmaW5lIG51 bWJlciAxMTEKK19hc3NpZ24gXCVhXCVhXCVhIFxtKG51bWJlcikKKworICAgd291bGQgY3JlYXRl IHRoZSBzYW1lIG1hY3JvIHdpdGggdGhlIHNhbWUgdmFsdWUsIGJ1dDoKKworZGVmaW5lIFwlYSBv bmUKK2RlZmluZSBudW1iZXIgMTExCitfZGVmaW5lIFwlYVwlYVwlYSBcbShudW1iZXIpCisKKyAg IHdvdWxkIGdpdmUgdGhlIG1hY3JvIGEgdmFsdWUgb2YgIlxtKG51bWJlcikiLgorCisgICBZb3Ug Y2FuIHVzZSB0aGUgX0FTU0lHTiBjb21tYW5kIHRvIGNyZWF0ZSBhbnkga2luZCBvZiBkYXRhIHN0 cnVjdHVyZQorICAgeW91IHdhbnQ7IHlvdSBjYW4gZmluZCBzb21lIGV4YW1wbGVzIGluIHRoZSBb MTE0XU9iamVjdC1PcmllbnRlZAorICAgUHJvZ3JhbW1pbmcgc2VjdGlvbiBvZiB0aGUgWzExNV1L ZXJtaXQgU2NyaXB0IExpYnJhcnkuIEluIHRoZSBmb2xsb3dpbmcKKyAgIHByb2dyYW0gd2UgdXNl IHRoaXMgY2FwYWJpbGl0eSB0byBjcmVhdGUgYSB0d28tZGltZW5zaW9uYWwgYXJyYXksIG9yCisg ICBtYXRyaXgsIHRvIGhvbGQgdGhlIGFsbCB0aGUgZWxlbWVudHMgb2YgdGhlIENTViBmaWxlLCBh bmQgdGhlbiB0bworICAgZGlzcGxheSB0aGUgbWF0cml4OgorCitmb3BlbiAvcmVhZCBcJWMgZGF0 YS5jc3YgICAgICAgICAgICAgICAgIyBPcGVuIENTViBmaWxlCitpZiBmYWlsIGV4aXQgMQorCisu XCVyID0gMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBSb3cKKy5cJW0gPSAwICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIE1heGltdW0gY29sdW1ucword2hpbGUgdHJ1 ZSB7CisgICAgZnJlYWQgL2xpbmUgXCVjIGxpbmUgICAgICAgICAgICAgICAgIyBSZWFkIGEgcmVj b3JkCisgICAgaWYgZmFpbCBicmVhayAgICAgICAgICAgICAgICAgICAgICAgIyBFbmQgb2YgZmls ZQorICAgIC5cJW4gOj0gXGZzcGxpdChcbShsaW5lKSwmYSxcNDQsQ1NWKSAjIFNwbGl0IHJlY29y ZCBpbnRvIGl0ZW1zCisgICAgaW5jciBcJXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBD b3VudCB0aGlzIHJvdworICAgIGZvciBcJWkgMSBcJW4gMSB7ICAgICAgICAgICAgICAgICAgICMg QXNzaWduIGl0ZW1zIHRvIHRoaXMgcm93IG9mIG1hdHJpeAorICAgICAgICBfYXNnIGFbXCVyXVtc JWldIFwmYVtcJWldCisgICAgfQorICAgIGlmID4gXCVpIFwlbSB7IC5cJW0gOj0gXCVpIH0gICAg ICAgICMgUmVtZW1iZXIgd2lkdGggb2Ygd2lkZXN0IHJvdworfQorZmNsb3NlIFwlYyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICMgQ2xvc2UgQ1NWIGZpbGUKK2RlY3JlbWVudCBcJW0gICAg ICAgICAgICAgICAgICAgICAgICAgICAjIChiZWNhdXNlIG9mIGhvdyBGT1IgbG9vcCB3b3JrcykK K2VjaG8gTUFUUklYIEEgUk9XUzogXCVyIENPTFVNTlM6IFwlbSAgICAjIFNob3cgdGhlIG1hdHJp eAorCitmb3IgXCVpIDEgXCVyIDEgeyAgICAgICAgICAgICAgICAgICAgICAgIyBMb29wIHRocm91 Z2ggcm93cworICAgIGZvciBcJWogMSBcJW0gMSB7ICAgICAgICAgICAgICAgICAgICMgTG9vcCB0 aHJvdWdoIGNvbHVtbnMgb2YgZWFjaCByb3cKKyAgICAgICAgeGVjaG8gIlxmbHBhZChcbShhW1wl aV1bXCVqXSksNikiCisgICAgfQorICAgIGVjaG8KK30KK2V4aXQgMAorCisgICBUaGUgbWF0cml4 IGlzIGNhbGxlZCBhIGFuZCBpdHMgZWxlbWVudHMgYXJlIGFbMV1bMV0sIGFbMV1bMl0sIGFbMV1b M10sCisgICAuLi4gYVsyXVsxXSwgZXRjLCBhbmQgeW91IGNhbiB0cmVhdCB0aGlzIGRhdGEgc3Ry dWN0dXJlIGV4YWN0bHkgbGlrZSBhCisgICB0d28tZGltZW5zaW9uYWwgYXJyYXksIGluIHdoaWNo IHlvdSBjYW4gcmVmZXIgdG8gYW55IGVsZW1lbnQgYnkgaXRzICJYCisgICBhbmQgWSBjb29yZGlu YXRlcyIuIEZvciBleGFtcGxlLCBpZiB0aGUgQ1NWIGZpbGUgY29udGFpbmVkIG51bWVyaWMgZGF0 YQorICAgeW91IGNvdWxkIGNvbXB1dGUgcm93IGFuZCBjb2x1bW4gc3VtcyB1c2luZyBzaW1wbGUg Rk9SIGxvb3BzIGFuZAorICAgS2VybWl0J3MgYnVpbHQtaW4gb25lLWRpbWVuc2lvbmFsIGFycmF5 IGRhdGEgdHlwZToKKworZGVjbGFyZSBcJnJbXCVyXSAgICAgICAgICAgICAgICAgICAgICAgICMg TWFrZSBhbiBhcnJheSBmb3IgdGhlIHJvdyBzdW1zCitkZWNsYXJlIFwmY1tcJW1dICAgICAgICAg ICAgICAgICAgICAgICAgIyBNYWtlIGFuIGFycmF5IGZvciB0aGUgY29sdW1uIHN1bXMKK2ZvciBc JWkgMSBcJXIgMSB7ICAgICAgICAgICAgICAgICAgICAgICAjIExvb3AgdGhyb3VnaCByb3dzCisg ICAgZm9yIFwlaiAxIFwlbSAxIHsgICAgICAgICAgICAgICAgICAgIyBMb29wIHRocm91Z2ggY29s dW1ucyBvZiBlYWNoIHJvdworICAgICAgICBpbmNyZW1lbnQgXCZyW1wlaV0gXG0oYVtcJWldW1wl al0pICMgQWNjdW11bGF0ZSByb3cgc3VtCisgICAgICAgIGluY3JlbWVudCBcJmNbXCVqXSBcbShh W1wlaV1bXCVqXSkgIyBBY2N1bXVsYXRlIGNvbHVtbiBzdW0KKyAgICB9Cit9CisKKyAgIE5vdGUg dGhhdCB0aGUgc3VtIGFycmF5cyBkb24ndCBoYXZlIHRvIGJlIGluaXRpYWxpemVkIHRvIHplcm8g YmVjYXVzZQorICAgS2VybWl0J3MgSU5DUkVNRU5UIGNvbW1hbmQgdHJlYXRzIGVtcHR5IGRlZmlu aXRpb25zIGFzIHplcm8uCisKK0RlbW9uc3RyYXRpb24gU2NyaXB0cyBmb3IgV2VibWFzdGVycwor CisgICBUaGVzZSBzY3JpcHRzIGFsbCB1c2UgbmV3IGZlYXR1cmVzIG9mIEMtS2VybWl0IDkuMC4K KworICAgWzExNl1rc2l0ZW1hcAorICAgICAgICAgIEEgQy1LZXJtaXQgOS4wIHNjcmlwdCB0byBi dWlsZCBzaXRlbWFwLnhtbCBmb3IgYSB3ZWJzaXRlLAorICAgICAgICAgIGNvbXBsZXRlIHdpdGgg R29vZ2xlIGltYWdlIGV4dGVuc2lvbnMgKHRoaXMgaXMgdGhlIGZpbGUgdXNlZCBieQorICAgICAg ICAgIHdlYm1hc3RlcnMgdG8gZ2V0IHRoZWlyIHNpdGVzIGNyYXdsZWQgYW5kIGluZGV4ZWQgb3B0 aW1hbGx5KS4KKworICAgWzExN11UaGUgV2VibG9nIFNjcmlwdAorICAgICAgICAgIFJlYWRzIGEg d2ViIGxvZywgZXh0cmFjdHMgdGhlIEdvb2dsZSBzZWFyY2hlcywgbm9ybWFsaXplcyB0aGUKKyAg ICAgICAgICBzZWFyY2ggc3RyaW5ncywgYW5kIHByaW50cyB0aGUgdG9wIDIwIHNlYXJjaGVzLCBh bG9uZyB3aXRoIHRoZWlyCisgICAgICAgICAgY291bnRzLgorCisgICBbMTE4XVRoZSBBbWF6b24g U2NyaXB0CisgICAgICAgICAgUmVhZHMgYW4gQW1hem9uIEFzc29jaWF0ZSBvcmRlcnMgcmVwb3J0 IGFuZCBsaXN0cyB0aGUgcHJvZHVjdHMKKyAgICAgICAgICBhY2NvcmRpbmcgdG8gdGhlIG51bWJl ciBvZiBvcmRlcnMgZm9yIGVhY2gsIG9yIHRoZSBudW1iZXIgb2YKKyAgICAgICAgICBjbGlja3Mg b24gZWFjaC4KKworICAgWzExOV1QaG90b2FsYnVtCisgICAgICAgICAgTWFrZXMgYSB3ZWJzaXRl IGZyb20gYSBjb2xsZWN0aW9uIG9mIEpQRyBpbWFnZXMuCisKKyAgICAgICAgICAgIFsxMjBdSG9t ZSBbMTIxXUtlcm1pdCA5NSBbMTIyXUMtS2VybWl0IFsxMjNdU2NyaXB0cyBbMTI0XUN1cnJlbnQK KyAgIFsxMjVdTmV3IFsxMjZdRkFRICBbMTI3XVN1cHBvcnQKKworCisgICAgQy1LZXJtaXQgOS4w IC8gWzEyOF1UaGUgS2VybWl0IFByb2plY3QgLyBbMTI5XUNvbHVtYmlhIFVuaXZlcnNpdHkgLwor ICAgIFsxMzBda2VybWl0QGNvbHVtYmlhLmVkdSAvIFsxMzFddmFsaWRhdGUKKworUmVmZXJlbmNl cworCisgICAxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS8KKyAgIDIuIG1haWx0bzprZXJtaXRA Y29sdW1iaWEuZWR1CisgICAzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXgu aHRtbAorICAgNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2s5NS5odG1sCisgICA1 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCisgICA2LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tzY3JpcHRzLmh0bWwKKyAgIDcuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9jdXJyZW50Lmh0bWwKKyAgIDguIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC93aGF0c25ldy5odG1sCisgICA5LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvZmFxLmh0bWwKKyAgMTAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9zdXBwb3J0Lmh0bWwKKyAgMTEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2N1L2NvbXB1dGlu Z2hpc3RvcnkvYm9va3MvI21lbmFnZXJpZQorICAxMi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrOTB0YWJsZXMuaHRtbAorICAxMy4gaHR0cDovL3d3dy5hbWF6b24uY29tL2dwL3By b2R1Y3QvMTU1NTU4MTY0MT9pZT1VVEY4JnRhZz1hbGVpZG1vcmVsZG9tLTIwJmxpbmtDb2RlPWFz MiZjYW1wPTE3ODkmY3JlYXRpdmU9OTMyNSZjcmVhdGl2ZUFTSU49MTU1NTU4MTY0MQorICAxNC4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbCNkb3dubG9hZAorICAx NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ5MC5odG1sI0xhcmdlRmls ZXMKKyAgMTYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0OTAuaHRtbCNU ZXN0TGFyZ2VGaWxlcworICAxNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQ5MC5odG1sI0JpZ251bXMKKyAgMTguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2VybWl0OTAuaHRtbCNmb3JjZTMKKyAgMTkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0OTAuaHRtbCNWYXJldmFsCisgIDIwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tlcm1pdDkwLmh0bWwjcmVuYW1lCisgIDIxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tlcm1pdDkwLmh0bWwjT3RoZXIKKyAgMjIuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0OTAuaHRtbCNJbmNvbXBhdGliaWxpdGllcworICAyMy4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ5MC5odG1sI05vdEluOS4wCisgIDI0LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDkwLmh0bWwjTG9vc2VFbmQKKyAg MjUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0OTAuaHRtbCNwb3AKKyAg MjYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0OTAuaHRtbCNIUHN3aXRj aAorICAyNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ5MC5odG1sI2lM TworICAyOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ5MC5odG1sI1Jv bG0KKyAgMjkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0OTAuaHRtbCND U1YKKyAgMzAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0OTAuaHRtbCNP dGhlcmRlbW9zCisgIDMxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2s2MG1hbnVh bC5odG1sCisgIDMyLiBodHRwOi8vd3d3LmFtYXpvbi5jb20vZ3AvcHJvZHVjdC9CMDAyQUNQRjlN P2llPVVURjgmdGFnPWFsZWlkbW9yZWxkb20tMjAmbGlua0NvZGU9YXMyJmNhbXA9MTc4OSZjcmVh dGl2ZT0zOTA5NTcmY3JlYXRpdmVBU0lOPUIwMDJBQ1BGOU0KKyAgMzMuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbAorICAzNC4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sCisgIDM1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tzY3JpcHRzLmh0bWwKKyAgMzYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2N1 L2NvbXB1dGluZ2hpc3RvcnkvZGVjMjAuaHRtbAorICAzNy4gbWFpbHRvOmZkY0Bjb2x1bWJpYS5l ZHUKKyAgMzguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9rOTUuaHRtbAorICAzOS4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2N1LWJzZC1saWNlbnNlLmh0bWwKKyAgNDAu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0OTAuaHRtbCNMYXJnZUZpbGVz CisgIDQxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2s5MHRhYmxlcy5odG1sCisg IDQyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2s5MHRhYmxlcy5odG1sCisgIDQz LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDkwLmh0bWwjZm9yY2UzCisg IDQ0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDkwLmh0bWwjVmFyZXZh bAorICA0NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrcmVuYW1lLmh0bWwKKyAg NDYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9jc3YuaHRtbAorICA0Ny4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NzZXRuYW1lcy5odG1sCisgIDQ4LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDkwLmh0bWwjSFBzd2l0Y2gKKyAgNDkuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2RhaWx5Lmh0bWwKKyAgNTAuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9jdS1ic2QtbGljZW5zZS5odG1sCisgIDUxLiBodHRwOi8vd3d3 Lm9wZW5zb3VyY2Uub3JnLworICA1Mi4gaHR0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUvY2s5MHRh Ymxlcy5odG1sI0xGCisgIDUzLiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC91dGls cy9iaWdmaWxlLmMKKyAgNTQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0 ODAuaHRtbCN4OQorICA1NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrOTB0YWJs ZXMuaHRtbCNMRgorICA1Ni4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvc2NyaXB0 cy9ja2VybWl0L2Vhc3RlcjIKKyAgNTcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9l bS1hcGV4Lmh0bWwKKyAgNTguIGh0dHA6Ly93d3cuaXJpZGl1bS5jb20vCisgIDU5LiBodHRwOi8v c2NpZW5jZTEubmFzYS5nb3Yvc2NpZW5jZS1uZXdzL3NjaWVuY2UtYXQtbmFzYS8yMDA2LzA5amFu X2VsZWN0cmljaHVycmljYW5lcy8KKyAgNjAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9lay5odG1sCisgIDYxLiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9lay9zaW1p cmlkLworICA2Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2VrLmh0bWwKKyAgNjMu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny4xMC4xMAor ICA2NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nzdi5odG1sCisgIDY1LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDEuMTEKKyAgNjYuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbAorICA2Ny4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3g5CisgIDY4LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY3NldG5hbWVzLmh0bWwKKyAgNjkuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2RhaWx5Lmh0bWwKKyAgNzAuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9mdHBjbGllbnQuaHRtbAorICA3MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZGFpbHkuaHRtbAorICA3Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NzZXRuYW1lcy5odG1sCisgIDczLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tlcm1pdDkwLmh0bWwjT3RoZXJkZW1vcworICA3NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2lucHV0X25vd3JhcC5odG1sCisgIDc1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9+ ZmRjL21tL2luZGV4Lmh0bWwKKyAgNzYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9w aG90b2FsYnVtLmh0bWwKKyAgNzcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L35mZGMva2VybWl0 L2xvZ3NlcmlhbC5odG1sCisgIDc4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tl cm1pdDkwLmh0bWwjbWVzc2FnZQorICA3OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQ5MC5odG1sI05vdEluOS4wCisgIDgwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY3N2Lmh0bWwjam9pbgorICA4MS4gaHR0cDovL2N2ZS5taXRyZS5vcmcvY2dpLWJpbi9j dmVuYW1lLmNnaT9uYW1lPUNWRS0yMDA5LTM3NjcKKyAgODIuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9mdHAvdGVzdC90YXIveC56aXAKKyAgODMuIGh0dHA6Ly93d3cubXNlY2xhYi5j b20vP3A9MTgwCisgIDg0LiBodHRwOi8vd3d3LnRoZXJlZ2lzdGVyLmNvLnVrLzIwMDkvMDcvMzAv dW5pdmVyc2FsX3NzbF9jZXJ0aWZpY2F0ZS8KKyAgODUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2VybWl0OTAuaHRtbCNIUHN3aXRjaAorICA4Ni4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2VtLWFwZXguaHRtbAorICA4Ny4gaHR0cDovL3d3dy5mcmVlYnNkLm9yZy9y ZWxlYXNlcy84LjBSL2Fubm91bmNlLmh0bWwKKyAgODguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9zZWN1cml0eTgxLmh0bWwjeDQuMi4zCisgIDg5LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDkKKyAgOTAuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4OC43LjIKKyAgOTEuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4OQorICA5Mi4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrcGFja2FnZXMuaHRtbAorICA5My4gaHR0cDovL2RvY3MuaHAuY29tL2Vu L0I5MTA2LTkwMDEzL3B0eS43Lmh0bWwKKyAgOTQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC90ZXN0L3RleHQvY2tjMjk5LnR4dAorICA5NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L3Rlc3QvdGV4dC9ja3V0aW8uYworICA5Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv fmZkYy9tbS9wb3AKKyAgOTcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L35mZGMvbW0vCisgIDk4 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9+ZmRjL21tL21haWxjaGVjaworICA5OS4gaHR0cDov L2VuLndpa2lwZWRpYS5vcmcvd2lraS9Ucml2aWFsX0ZpbGVfVHJhbnNmZXJfUHJvdG9jb2wKKyAx MDAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9mdHAvc2NyaXB0cy9ja2VybWl0L2dl dGhwY29uZmlnCisgMTAxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvZnRwL3Njcmlw dHMvY2tlcm1pdC9UZXN0U3dpdGNoZXMudHh0CisgMTAyLiBodHRwOi8vZW4ud2lraXBlZGlhLm9y Zy93aWtpL1N0YW5kYXJkX3N0cmVhbXMKKyAxMDMuIGh0dHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1 L2N1ZG9jcy9pbG9zZXR1cC5odG1sCisgMTA0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY3Vkb2NzL2NieC5odG1sCisgMTA1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tlcm1pdDkwLmh0bWwjcmVjb3JkCisgMTA2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tlcm1pdDkwLmh0bWwjam9pbgorIDEwNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZXJtaXQ5MC5odG1sI2ZpbGUKKyAxMDguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2VybWl0ODAuaHRtbCNmam9pbgorIDEwOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrZXJtaXQ5MC5odG1sI3J1bGVzCisgMTEwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjZmpvaW4KKyAxMTEuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0OTAuaHRtbCN2YXJhc2cKKyAxMTIuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny45CisgMTEzLiBodHRwOi8vd3d3LmFtYXpv bi5jb20vZ3AvcHJvZHVjdC8xNTU1NTgxNjQxP2llPVVURjgmdGFnPWFsZWlkbW9yZWxkb20tMjAm bGlua0NvZGU9YXMyJmNhbXA9MTc4OSZjcmVhdGl2ZT05MzI1JmNyZWF0aXZlQVNJTj0xNTU1NTgx NjQxCisgMTE0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tzY3JpcHRzLmh0bWwj b29wcworIDExNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nrc2NyaXB0cy5odG1s CisgMTE2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQva3NpdGVtYXAuaHRtbAorIDEx Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L3dlYmxvZy5odG1sCisgMTE4LiBodHRw Oi8va2VybWl0LmNvbHVtYmlhLmVkdS9mdHAvc2NyaXB0cy9ja2VybWl0L2FtYXpvbgorIDExOS4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L3Bob3RvYWxidW0uaHRtbAorIDEyMC4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0bWwKKyAxMjEuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9rOTUuaHRtbAorIDEyMi4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaXQuaHRtbAorIDEyMy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2Nrc2NyaXB0cy5odG1sCisgMTI0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y3VycmVudC5odG1sCisgMTI1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvd2hhdHNu ZXcuaHRtbAorIDEyNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2ZhcS5odG1sCisg MTI3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvc3VwcG9ydC5odG1sCisgMTI4LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRtbAorIDEyOS4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUvCisgMTMwLiBtYWlsdG86a2VybWl0QGNvbHVtYmlhLmVkdQorIDEzMS4g aHR0cDovL3ZhbGlkYXRvci53My5vcmcvY2hlY2s/dXJpPWh0dHAlM0ElMkYlMkZrZXJtaXQuY29s dW1iaWEuZWR1JTJGY2tlcm1pdDkwLmh0bWwKCmRpZmYgLS1naXQgYS9ja2VybWl0LTkuMC4zMDIt YnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrZXJtb2QuaW5pIGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxk L2NrZXJtaXQtOS4wLjMwMi9ja2VybW9kLmluaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi42YjEzYzg1Ci0tLSAvZGV2L251bGwKKysrIGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxk L2NrZXJtaXQtOS4wLjMwMi9ja2VybW9kLmluaQpAQCAtMCwwICsxLDggQEAKKzsgRmlsZSBDS0VS TU9ELklOSSwgU2FtcGxlIEMtS2VybWl0IDcuMCBjdXN0b21pemF0aW9uIGZpbGUuCis7CitlY2hv CitlY2hvIFRoZSB2ZXJ5IGxvbmcgc3RhbmRhcmQgaW5pdGlhbGl6YXRpb24gZmlsZSB0aGF0IHdh cyBkaXN0cmlidXRlZAorZWNobyB3aXRoIEMtS2VybWl0IDYsIDcsIGFuZCA4IGlzIG5vIGxvbmdl ciByZWNvbW1lbmRlZCBhcyAic3RhbmRhcmQiLAorZWNobyBzaW5jZSBpdHMgZmVhdHVyZXMgd2Vy ZSBsaXR0bGUgdXNlZC4gIEl0IGlzIHN0aWxsIGF2YWlsYWJsZSBpbgorZWNobyB0aGUgQy1LZXJt aXQgZGlzdHJpYnV0aW9uIGFzIG9ja2VybW9kLmluaS4KK2VjaG8KCmRpZmYgLS1naXQgYS9ja2Vy bWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdWF0Mi5oIGIvY2tlcm1pdC05LjAu MzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3VhdDIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwLi44Njc5YTk5Ci0tLSAvZGV2L251bGwKKysrIGIvY2tlcm1pdC05LjAuMzAy LWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3VhdDIuaApAQCAtMCwwICsxLDM1OCBAQAorLyoKKyAg QyBLIFUgQSBUIDIgLiBIICAtLSAgS2VyYmVyb3MgaGVhZGVycyBmb3IgQy1LZXJtaXQKKworICBD b3B5cmlnaHQgKEMpIDE5ODUsIDIwMDksCisgICAgVHJ1c3RlZXMgb2YgQ29sdW1iaWEgVW5pdmVy c2l0eSBpbiB0aGUgQ2l0eSBvZiBOZXcgWW9yay4KKyAgICBBbGwgcmlnaHRzIHJlc2VydmVkLiAg U2VlIHRoZSBDLUtlcm1pdCBDT1BZSU5HLlRYVCBmaWxlIG9yIHRoZQorICAgIGNvcHlyaWdodCB0 ZXh0IGluIHRoZSBja2NtYWkuYyBtb2R1bGUgZm9yIGRpc2NsYWltZXIgYW5kIHBlcm1pc3Npb25z LgorCisgIEF1dGhvcjoKKyAgICBLZXJiZXJvcyBJViBhbmQgViBpbnRlcmdyYXRpb24uCisgICAg SmVmZnJleSBFIEFsdG1hbiAoamFsdG1hbkBzZWN1cmUtZW5kcG9pbnRzLmNvbSkKKyAgICBTZWN1 cmUgRW5kcG9pbnRzIEluYy4sIE5ldyBZb3JrIENpdHkKKyovCisvKgorICogQmFzZWQgb24gYSBj b25jYXRlbmF0aW9uIG9mIGFsbCBuZWNlc3NhcnkgaW5jbHVkZSBmaWxlcyBkaXN0cmlidXRlZCB3 aXRoCisgKiB0aGUgS2VyYmVyb3MgNSBOVCBBbHBoYSAyIFRlbG5ldCBwYWNrYWdlIGZyb20gTUlU LgorICovCisKKyNpZm5kZWYgS1JCNV9URUxORVRfSAorI2RlZmluZSBLUkI1X1RFTE5FVF9ICisv Ki0KKyAqIENvcHlyaWdodCAoYykgMTk5MSwgMTk5MworICogICAgICBUaGUgUmVnZW50cyBvZiB0 aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0 IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0 aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1 Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0 aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv bi4KKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBv ciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcg YWNrbm93bGVkZ2VtZW50OgorICogICAgICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUg ZGV2ZWxvcGVkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mCisgKiAgICAgIENhbGlmb3JuaWEsIEJlcmtl bGV5IGFuZCBpdHMgY29udHJpYnV0b3JzLgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUg VW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBi ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBz b2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09O VFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMg T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFH RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU VVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7 IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFC SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO RyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiAg ICAgIEAoIyllbmNyeXB0LmggICA4LjEgKEJlcmtlbGV5KSA2LzQvOTMKKyAqLworCisvKgorICog Q29weXJpZ2h0IChDKSAxOTkwIGJ5IHRoZSBNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNo bm9sb2d5CisgKgorICogRXhwb3J0IG9mIHRoaXMgc29mdHdhcmUgZnJvbSB0aGUgVW5pdGVkIFN0 YXRlcyBvZiBBbWVyaWNhIG1heQorICogcmVxdWlyZSBhIHNwZWNpZmljIGxpY2Vuc2UgZnJvbSB0 aGUgVW5pdGVkIFN0YXRlcyBHb3Zlcm5tZW50LgorICogSXQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5 IG9mIGFueSBwZXJzb24gb3Igb3JnYW5pemF0aW9uIGNvbnRlbXBsYXRpbmcKKyAqIGV4cG9ydCB0 byBvYnRhaW4gc3VjaCBhIGxpY2Vuc2UgYmVmb3JlIGV4cG9ydGluZy4KKyAqCisgKiBXSVRISU4g VEhBVCBDT05TVFJBSU5ULCBwZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQKKyAq IGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBw dXJwb3NlIGFuZAorICogd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRo YXQgdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFu ZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZAorICogdGhpcyBwZXJtaXNzaW9u IG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdAorICog dGhlIG5hbWUgb2YgTS5JLlQuIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0 eSBwZXJ0YWluaW5nCisgKiB0byBkaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlIHdpdGhvdXQg c3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IKKyAqIHBlcm1pc3Npb24uICBNLkkuVC4gbWFrZXMgbm8g cmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZgorICogdGhpcyBzb2Z0d2Fy ZSBmb3IgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVz cworICogb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqLworCisjaWZkZWYgIENLX0VOQ1JZUFRJT04K KworI2lmbmRlZiBfX0VOQ1JZUFRJT05fXworI2RlZmluZSBfX0VOQ1JZUFRJT05fXworCisjZGVm aW5lIERJUl9ERUNSWVBUICAgICAgICAgICAgIDEKKyNkZWZpbmUgRElSX0VOQ1JZUFQgICAgICAg ICAgICAgMgorCisjaWZuZGVmIENLX0RFU19DCisjaWZuZGVmIE5PQkxPQ0tERUYKK3R5cGVkZWYg dW5zaWduZWQgY2hhciBCbG9ja1s4XTsKKyNlbmRpZiAvKiBOT0JMT0NLREVGICovCit0eXBlZGVm IHVuc2lnbmVkIGNoYXIgKkJsb2NrVDsKKyNpZm5kZWYgS1JCNCAgICAvKiBhbHJlYWR5IGRlZmlu ZWQgaW4ga2VyYmVyb3Npdi9kZXMuaCAqLwordHlwZWRlZiBzdHJ1Y3QgZGVzX2tzX3N0cnVjdCB7 IEJsb2NrIF87IH0gU2NoZWR1bGVbMTZdOworI2Vsc2UgLyogS1JCNCAqLworI2lmbmRlZiBPUzIK KyNpZm5kZWYgTk9CTE9DS0RFRiAgICAvKiBhbHJlYWR5IGRlZmluZWQgaW4ga2VyYmVyb3Npdi9k ZXMuaCAqLwordHlwZWRlZiBzdHJ1Y3QgZGVzX2tzX3N0cnVjdCB7IEJsb2NrIF87IH0gU2NoZWR1 bGVbMTZdOworI2VuZGlmIC8qIE5PQkxPQ0tERUYgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRp ZiAvKiBLUkI0ICovCisKKyNkZWZpbmUgVkFMSURLRVkoa2V5KSAoa2V5WzBdfGtleVsxXXxrZXlb Ml18a2V5WzNdfGtleVs0XXxrZXlbNV18a2V5WzZdfGtleVs3XSkKKworI2RlZmluZSBTQU1FS0VZ KGsxLCBrMikgKCFtZW1jbXAoKHZvaWQgKilrMSwgKHZvaWQgKilrMiwgc2l6ZW9mKEJsb2NrKSkp CisjZW5kaWYgLyogQ0tfREVTX0MgKi8KKwordHlwZWRlZiBzdHJ1Y3QgX3Nlc3Npb25fa2V5IHsK KyAgc2hvcnQgICAgICAgICB0eXBlOworICBpbnQgICAgICAgICAgIGxlbmd0aDsKKyAgdW5zaWdu ZWQgY2hhciAqZGF0YTsKK30gU2Vzc2lvbl9LZXk7CisKKyNpZmRlZiBfX1NURENfXwordHlwZWRl ZiBzdHJ1Y3QgeworICBjaGFyICAqbmFtZTsKKyAgaW50ICAgdHlwZTsKKyAgdm9pZCAgKCpvdXRw dXQpKHVuc2lnbmVkIGNoYXIgKiwgaW50KTsKKyAgaW50ICAgKCppbnB1dCkoaW50KTsKKyAgdm9p ZCAgKCppbml0KShpbnQpOworICBpbnQgICAoKnN0YXJ0KShpbnQsIGludCk7CisgIGludCAgICgq aXMpKHVuc2lnbmVkIGNoYXIgKiwgaW50KTsKKyAgaW50ICAgKCpyZXBseSkodW5zaWduZWQgY2hh ciAqLCBpbnQpOworICBpbnQgICAoKnNlc3Npb24pKFNlc3Npb25fS2V5ICosIGludCk7CisgIGlu dCAgICgqa2V5aWQpKGludCwgdW5zaWduZWQgY2hhciAqLCBpbnQgKik7CisgIHZvaWQgICgqcHJp bnRzdWIpKHVuc2lnbmVkIGNoYXIgKiwgaW50LCB1bnNpZ25lZCBjaGFyICosIGludCk7Cit9IEVu Y3J5cHRpb25zOworI2lmICFkZWZpbmVkKFApCisjZGVmaW5lIFAoeCkgeAorI2VuZGlmCisjZWxz ZQordHlwZWRlZiBzdHJ1Y3QgeworICBjaGFyICAqbmFtZTsKKyAgaW50ICAgdHlwZTsKKyAgdm9p ZCAgKCpvdXRwdXQpKCk7CisgIGludCAgICgqaW5wdXQpKCk7CisgIHZvaWQgICgqaW5pdCkoKTsK KyAgaW50ICAgKCpzdGFydCkoKTsKKyAgaW50ICAgKCppcykoKTsKKyAgaW50ICAgKCpyZXBseSko KTsKKyAgaW50ICAgKCpzZXNzaW9uKSgpOworICBpbnQgICAoKmtleWlkKSgpOworICB2b2lkICAo KnByaW50c3ViKSgpOworfSBFbmNyeXB0aW9uczsKKyNpZiAhZGVmaW5lZChQKQorI2RlZmluZSBQ KHgpICgpCisjZW5kaWYKKyNlbmRpZgorCitpbnQgZW5jcnlwdF9wYXJzZSh1bnNpZ25lZCBjaGFy ICosIGludCk7CisKKyNpZmRlZiBERUJVRworaW50IHByaW50c3ViKGNoYXIsIHVuc2lnbmVkIGNo YXIgKiwgc2l6ZV90KTsKKyNlbmRpZgorCisjZGVmaW5lIFNLX0dFTkVSSUMgICAgICAwICAgICAg IC8qIEp1c3QgYSBzdHJpbmcgb2YgYml0cyAqLworI2RlZmluZSBTS19ERVMgICAgICAgICAgMSAg ICAgICAvKiBNYXRjaGVkIEtlcmJlcm9zIHY1IEVOQ1RZUEVfREVTICovCisKK3ZvaWQgZW5jcnlw dF9pbml0IFAoKGtzdHJlYW0saW50KSk7CitFbmNyeXB0aW9ucyAqZmluZGVuY3J5cHRpb24gUCgo aW50KSk7Cit2b2lkIGVuY3J5cHRfc2VuZF9zdXBwb3J0IFAoKHZvaWQpKTsKK3ZvaWQgZW5jcnlw dF9hdXRvIFAoKGludCkpOwordm9pZCBkZWNyeXB0X2F1dG8gUCgoaW50KSk7CitpbnQgIGVuY3J5 cHRfaXMgUCgodW5zaWduZWQgY2hhciAqLCBpbnQpKTsKK2ludCAgZW5jcnlwdF9yZXBseSBQKCh1 bnNpZ25lZCBjaGFyICosIGludCkpOwordm9pZCBlbmNyeXB0X3N0YXJ0X2lucHV0IFAoKGludCkp OworaW50ICBlbmNyeXB0X3Nlc3Npb25fa2V5IFAoKFNlc3Npb25fS2V5ICosIGludCkpOworaW50 ICBlbmNyeXB0X2RvbnRfc3VwcG9ydCBQKChpbnQpKTsKK3ZvaWQgZW5jcnlwdF9lbmRfaW5wdXQg UCgodm9pZCkpOwordm9pZCBlbmNyeXB0X3N0YXJ0X291dHB1dCBQKChpbnQpKTsKK3ZvaWQgZW5j cnlwdF9lbmRfb3V0cHV0IFAoKHZvaWQpKTsKK3ZvaWQgZW5jcnlwdF9zZW5kX3JlcXVlc3Rfc3Rh cnQgUCgodm9pZCkpOwordm9pZCBlbmNyeXB0X3NlbmRfcmVxdWVzdF9lbmQgUCgodm9pZCkpOwor dm9pZCBlbmNyeXB0X3NlbmRfZW5kIFAoKHZvaWQpKTsKK3ZvaWQgZW5jcnlwdF93YWl0IFAoKHZv aWQpKTsKK2ludCAgZW5jcnlwdF9pc19lbmNyeXB0aW5nIFAoKHZvaWQpKTsKK3ZvaWQgZW5jcnlw dF9zZW5kX3N1cHBvcnQgUCgodm9pZCkpOworaW50ICBlbmNyeXB0X3NlbmRfa2V5aWQgUCgoaW50 LCB1bnNpZ25lZCBjaGFyICosIGludCwgaW50KSk7CisKK2ludCBlbmNyeXB0X2NtZCBQKChpbnQs IGNoYXIgKiopKTsKK3ZvaWQgZW5jcnlwdF9kaXNwbGF5IFAoKHZvaWQpKTsKKworI2lmZGVmIENL X0tFUkJFUk9TCit2b2lkIGtyYmRlc19lbmNyeXB0IFAoKHVuc2lnbmVkIGNoYXIgKiwgaW50KSk7 CitpbnQgIGtyYmRlc19kZWNyeXB0IFAoKGludCkpOworaW50ICBrcmJkZXNfaXMgUCgodW5zaWdu ZWQgY2hhciAqLCBpbnQpKTsKK2ludCAga3JiZGVzX3JlcGx5IFAoKHVuc2lnbmVkIGNoYXIgKiwg aW50KSk7Cit2b2lkIGtyYmRlc19pbml0IFAoKGludCkpOworaW50ICBrcmJkZXNfc3RhcnQgUCgo aW50LCBpbnQpKTsKK3ZvaWQga3JiZGVzX3Nlc3Npb24gUCgoU2Vzc2lvbl9LZXkgKiwgaW50KSk7 Cit2b2lkIGtyYmRlc19wcmludHN1YiBQKCh1bnNpZ25lZCBjaGFyICosIGludCwgdW5zaWduZWQg Y2hhciAqLCBpbnQpKTsKKyNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLworCit2b2lkIGNmYjY0X2Vu Y3J5cHQgUCgodW5zaWduZWQgY2hhciAqLCBpbnQpKTsKK2ludCBjZmI2NF9kZWNyeXB0IFAoKGlu dCkpOwordm9pZCBjZmI2NF9pbml0IFAoKGludCkpOworaW50IGNmYjY0X3N0YXJ0IFAoKGludCwg aW50KSk7CitpbnQgY2ZiNjRfaXMgUCgodW5zaWduZWQgY2hhciAqLCBpbnQpKTsKK2ludCBjZmI2 NF9yZXBseSBQKCh1bnNpZ25lZCBjaGFyICosIGludCkpOworaW50IGNmYjY0X3Nlc3Npb24gUCgo U2Vzc2lvbl9LZXkgKiwgaW50KSk7CitpbnQgY2ZiNjRfa2V5aWQgUCgoaW50LCB1bnNpZ25lZCBj aGFyICosIGludCAqKSk7Cit2b2lkIGNmYjY0X3ByaW50c3ViIFAoKHVuc2lnbmVkIGNoYXIgKiwg aW50LCB1bnNpZ25lZCBjaGFyICosIGludCkpOworCit2b2lkIG9mYjY0X2VuY3J5cHQgUCgodW5z aWduZWQgY2hhciAqLCBpbnQpKTsKK2ludCBvZmI2NF9kZWNyeXB0IFAoKGludCkpOwordm9pZCBv ZmI2NF9pbml0IFAoKGludCkpOworaW50IG9mYjY0X3N0YXJ0IFAoKGludCwgaW50KSk7CitpbnQg b2ZiNjRfaXMgUCgodW5zaWduZWQgY2hhciAqLCBpbnQpKTsKK2ludCBvZmI2NF9yZXBseSBQKCh1 bnNpZ25lZCBjaGFyICosIGludCkpOworaW50IG9mYjY0X3Nlc3Npb24gUCgoU2Vzc2lvbl9LZXkg KiwgaW50KSk7CitpbnQgb2ZiNjRfa2V5aWQgUCgoaW50LCB1bnNpZ25lZCBjaGFyICosIGludCAq KSk7Cit2b2lkIG9mYjY0X3ByaW50c3ViIFAoKHVuc2lnbmVkIGNoYXIgKiwgaW50LCB1bnNpZ25l ZCBjaGFyICosIGludCkpOworCit2b2lkIGRlczNfY2ZiNjRfZW5jcnlwdCBQKCh1bnNpZ25lZCBj aGFyICosIGludCkpOworaW50ICBkZXMzX2NmYjY0X2RlY3J5cHQgUCgoaW50KSk7Cit2b2lkIGRl czNfY2ZiNjRfaW5pdCBQKChpbnQpKTsKK2ludCAgZGVzM19jZmI2NF9zdGFydCBQKChpbnQsIGlu dCkpOworaW50ICBkZXMzX2NmYjY0X2lzIFAoKHVuc2lnbmVkIGNoYXIgKiwgaW50KSk7CitpbnQg IGRlczNfY2ZiNjRfcmVwbHkgUCgodW5zaWduZWQgY2hhciAqLCBpbnQpKTsKK2ludCAgZGVzM19j ZmI2NF9zZXNzaW9uIFAoKFNlc3Npb25fS2V5ICosIGludCkpOworaW50ICBkZXMzX2NmYjY0X2tl eWlkIFAoKGludCwgdW5zaWduZWQgY2hhciAqLCBpbnQgKikpOwordm9pZCBkZXMzX2NmYjY0X3By aW50c3ViIFAoKHVuc2lnbmVkIGNoYXIgKiwgaW50LCB1bnNpZ25lZCBjaGFyICosIGludCkpOwor Cit2b2lkIGRlczNfb2ZiNjRfZW5jcnlwdCBQKCh1bnNpZ25lZCBjaGFyICosIGludCkpOworaW50 ICBkZXMzX29mYjY0X2RlY3J5cHQgUCgoaW50KSk7Cit2b2lkIGRlczNfb2ZiNjRfaW5pdCBQKChp bnQpKTsKK2ludCAgZGVzM19vZmI2NF9zdGFydCBQKChpbnQsIGludCkpOworaW50ICBkZXMzX29m YjY0X2lzIFAoKHVuc2lnbmVkIGNoYXIgKiwgaW50KSk7CitpbnQgIGRlczNfb2ZiNjRfcmVwbHkg UCgodW5zaWduZWQgY2hhciAqLCBpbnQpKTsKK2ludCAgZGVzM19vZmI2NF9zZXNzaW9uIFAoKFNl c3Npb25fS2V5ICosIGludCkpOworaW50ICBkZXMzX29mYjY0X2tleWlkIFAoKGludCwgdW5zaWdu ZWQgY2hhciAqLCBpbnQgKikpOwordm9pZCBkZXMzX29mYjY0X3ByaW50c3ViIFAoKHVuc2lnbmVk IGNoYXIgKiwgaW50LCB1bnNpZ25lZCBjaGFyICosIGludCkpOworCisjaWZkZWYgQ0FTVF9FTkNS WVBUSU9OCit2b2lkIGNhc3RfY2ZiNjRfZW5jcnlwdCBQKCh1bnNpZ25lZCBjaGFyICosIGludCkp OworaW50ICBjYXN0X2NmYjY0X2RlY3J5cHQgUCgoaW50KSk7Cit2b2lkIGNhc3RfY2ZiNjRfaW5p dCBQKChpbnQpKTsKK2ludCAgY2FzdF9jZmI2NF9zdGFydCBQKChpbnQsIGludCkpOworaW50ICBj YXN0X2NmYjY0X2lzIFAoKHVuc2lnbmVkIGNoYXIgKiwgaW50KSk7CitpbnQgIGNhc3RfY2ZiNjRf cmVwbHkgUCgodW5zaWduZWQgY2hhciAqLCBpbnQpKTsKK2ludCAgY2FzdF9jZmI2NF9zZXNzaW9u IFAoKFNlc3Npb25fS2V5ICosIGludCkpOworaW50ICBjYXN0X2NmYjY0X2tleWlkIFAoKGludCwg dW5zaWduZWQgY2hhciAqLCBpbnQgKikpOwordm9pZCBjYXN0X2NmYjY0X3ByaW50c3ViIFAoKHVu c2lnbmVkIGNoYXIgKiwgaW50LCB1bnNpZ25lZCBjaGFyICosIGludCkpOworCit2b2lkIGNhc3Rf b2ZiNjRfZW5jcnlwdCBQKCh1bnNpZ25lZCBjaGFyICosIGludCkpOworaW50ICBjYXN0X29mYjY0 X2RlY3J5cHQgUCgoaW50KSk7Cit2b2lkIGNhc3Rfb2ZiNjRfaW5pdCBQKChpbnQpKTsKK2ludCAg Y2FzdF9vZmI2NF9zdGFydCBQKChpbnQsIGludCkpOworaW50ICBjYXN0X29mYjY0X2lzIFAoKHVu c2lnbmVkIGNoYXIgKiwgaW50KSk7CitpbnQgIGNhc3Rfb2ZiNjRfcmVwbHkgUCgodW5zaWduZWQg Y2hhciAqLCBpbnQpKTsKK2ludCAgY2FzdF9vZmI2NF9zZXNzaW9uIFAoKFNlc3Npb25fS2V5ICos IGludCkpOworaW50ICBjYXN0X29mYjY0X2tleWlkIFAoKGludCwgdW5zaWduZWQgY2hhciAqLCBp bnQgKikpOwordm9pZCBjYXN0X29mYjY0X3ByaW50c3ViIFAoKHVuc2lnbmVkIGNoYXIgKiwgaW50 LCB1bnNpZ25lZCBjaGFyICosIGludCkpOworCit2b2lkIGNhc3RleHBfY2ZiNjRfZW5jcnlwdCBQ KCh1bnNpZ25lZCBjaGFyICosIGludCkpOworaW50ICBjYXN0ZXhwX2NmYjY0X2RlY3J5cHQgUCgo aW50KSk7Cit2b2lkIGNhc3RleHBfY2ZiNjRfaW5pdCBQKChpbnQpKTsKK2ludCAgY2FzdGV4cF9j ZmI2NF9zdGFydCBQKChpbnQsIGludCkpOworaW50ICBjYXN0ZXhwX2NmYjY0X2lzIFAoKHVuc2ln bmVkIGNoYXIgKiwgaW50KSk7CitpbnQgIGNhc3RleHBfY2ZiNjRfcmVwbHkgUCgodW5zaWduZWQg Y2hhciAqLCBpbnQpKTsKK2ludCAgY2FzdGV4cF9jZmI2NF9zZXNzaW9uIFAoKFNlc3Npb25fS2V5 ICosIGludCkpOworaW50ICBjYXN0ZXhwX2NmYjY0X2tleWlkIFAoKGludCwgdW5zaWduZWQgY2hh ciAqLCBpbnQgKikpOwordm9pZCBjYXN0ZXhwX2NmYjY0X3ByaW50c3ViIFAoKHVuc2lnbmVkIGNo YXIgKiwgaW50LCB1bnNpZ25lZCBjaGFyICosIGludCkpOworCit2b2lkIGNhc3RleHBfb2ZiNjRf ZW5jcnlwdCBQKCh1bnNpZ25lZCBjaGFyICosIGludCkpOworaW50ICBjYXN0ZXhwX29mYjY0X2Rl Y3J5cHQgUCgoaW50KSk7Cit2b2lkIGNhc3RleHBfb2ZiNjRfaW5pdCBQKChpbnQpKTsKK2ludCAg Y2FzdGV4cF9vZmI2NF9zdGFydCBQKChpbnQsIGludCkpOworaW50ICBjYXN0ZXhwX29mYjY0X2lz IFAoKHVuc2lnbmVkIGNoYXIgKiwgaW50KSk7CitpbnQgIGNhc3RleHBfb2ZiNjRfcmVwbHkgUCgo dW5zaWduZWQgY2hhciAqLCBpbnQpKTsKK2ludCAgY2FzdGV4cF9vZmI2NF9zZXNzaW9uIFAoKFNl c3Npb25fS2V5ICosIGludCkpOworaW50ICBjYXN0ZXhwX29mYjY0X2tleWlkIFAoKGludCwgdW5z aWduZWQgY2hhciAqLCBpbnQgKikpOwordm9pZCBjYXN0ZXhwX29mYjY0X3ByaW50c3ViIFAoKHVu c2lnbmVkIGNoYXIgKiwgaW50LCB1bnNpZ25lZCBjaGFyICosIGludCkpOworI2VuZGlmIC8qIENB U1RfRU5DUllQVElPTiAqLworCisvKiBpbnQgIGRlc19zdHJpbmdfdG9fa2V5IFAoKGNoYXIgKiwg QmxvY2spKTsgKi8KKworI2lmZGVmIERFQlVHCitleHRlcm4gaW50IGVuY3J5cHRfZGVidWdfbW9k ZTsKKyNlbmRpZgorCitpbnQgZGVjcnlwdF9rc19oYWNrKHVuc2lnbmVkIGNoYXIgKiwgaW50KTsK KworI2VuZGlmIC8qIF9fRU5DUllQVElPTl9fICovCisjZW5kaWYgLyogRU5DUllQVElPTiAqLwor CisjaWZkZWYgQ1JZUFRfRExMCitzdHJ1Y3QgX2NyeXB0X2RsbF9pbml0IHsKKyAgICBpbnQgdmVy c2lvbjsKKworICAgIC8qIFZlcnNpb24gMSB2YXJpYWJsZXMgKi8KKyAgICBpbnQgKCpwX3R0b2wp KGNoYXIgKixpbnQpOworICAgIGludCAoKnBfZG9kZWJ1ZykoaW50LGNoYXIgKixjaGFyICosQ0tf T0ZGX1QpOworICAgIGludCAoKnBfZG9oZXhkdW1wKShjaGFyICosY2hhciAqLGludCk7CisgICAg dm9pZCAoKnBfdG5fZGVidWcpKGNoYXIgKik7CisgICAgaW50ICgqcF92c2NybnByaW50ZikoY2hh ciAqLCAuLi4pOworCisgICAgLyogVmVyc2lvbiAyIHZhcmlhYmxlcyAqLworICAgIHZvaWQgKiBw X2s1X2NvbnRleHQ7CisKKyAgICAvKiBWZXJzaW9uIDMgdmFyaWFibGVzICovCisgICAgdm9pZCAo KnBfaW5zdGFsbF9mdW5jcykoY2hhciAqLHZvaWQgKik7CisKKyAgICAvKiBWZXJzaW9uIDUgdmFy aWFibGVzICovCisgICAgdW5zaWduZWQgbG9uZyAoKnBfcmVxdGVsbXV0ZXgpKHVuc2lnbmVkIGxv bmcpOworICAgIHVuc2lnbmVkIGxvbmcgKCpwX3JlbHRlbG11dGV4KSh2b2lkKTsKK307CisjZW5k aWYgLyogQ1JZUFRfRExMICovCisKKy8qIHBlciBLZXJiZXJvcyB2NSBwcm90b2NvbCBzcGVjICov CisjaWZuZGVmIEVOQ1RZUEVfTlVMTAorI2RlZmluZSBFTkNUWVBFX05VTEwgICAgICAgICAgICAw eDAwMDAKKyNlbmRpZgorI2lmbmRlZiAgRU5DVFlQRV9ERVNfQ0JDX0NSQworI2RlZmluZSBFTkNU WVBFX0RFU19DQkNfQ1JDICAgICAweDAwMDEgIC8qIERFUyBjYmMgbW9kZSB3aXRoIENSQy0zMiAq LworI2VuZGlmCisjaWZuZGVmICBFTkNUWVBFX0RFU19DQkNfTUQ0CisjZGVmaW5lIEVOQ1RZUEVf REVTX0NCQ19NRDQgICAgIDB4MDAwMiAgLyogREVTIGNiYyBtb2RlIHdpdGggUlNBLU1ENCAqLwor I2VuZGlmCisjaWZuZGVmICBFTkNUWVBFX0RFU19DQkNfTUQ1CisjZGVmaW5lIEVOQ1RZUEVfREVT X0NCQ19NRDUgICAgIDB4MDAwMyAgLyogREVTIGNiYyBtb2RlIHdpdGggUlNBLU1ENSAqLworI2Vu ZGlmCisjaWZuZGVmICBFTkNUWVBFX0RFU19DQkNfUkFXCisjZGVmaW5lIEVOQ1RZUEVfREVTX0NC Q19SQVcgICAgIDB4MDAwNCAgLyogREVTIGNiYyBtb2RlIHJhdyAqLworI2VuZGlmCisvKiBYWFgg ZGVwcmVjYXRlZD8gKi8KKyNpZm5kZWYgIEVOQ1RZUEVfREVTM19DQkNfU0hBCisjZGVmaW5lIEVO Q1RZUEVfREVTM19DQkNfU0hBICAgIDB4MDAwNSAgLyogREVTLTMgY2JjIG1vZGUgd2l0aCBOSVNU LVNIQSAqLworI2VuZGlmCisjaWZuZGVmICBFTkNUWVBFX0RFUzNfQ0JDX1JBVworI2RlZmluZSBF TkNUWVBFX0RFUzNfQ0JDX1JBVyAgICAweDAwMDYgIC8qIERFUy0zIGNiYyBtb2RlIHJhdyAqLwor I2VuZGlmCisjaWZuZGVmICBFTkNUWVBFX0RFU19ITUFDX1NIQTEKKyNkZWZpbmUgRU5DVFlQRV9E RVNfSE1BQ19TSEExICAgMHgwMDA4CisjZW5kaWYKKyNpZm5kZWYgIEVOQ1RZUEVfREVTM19DQkNf U0hBMQorI2RlZmluZSBFTkNUWVBFX0RFUzNfQ0JDX1NIQTEgIDB4MDAxMAorI2VuZGlmCisjaWZu ZGVmIEVOQ1RZUEVfQUVTMTI4X0NUU19ITUFDX1NIQTFfOTYKKyNkZWZpbmUgRU5DVFlQRV9BRVMx MjhfQ1RTX0hNQUNfU0hBMV85NiAgMHgwMDExCisjZW5kaWYKKyNpZm5kZWYgRU5DVFlQRV9BRVMy NTZfQ1RTX0hNQUNfU0hBMV85NgorI2RlZmluZSBFTkNUWVBFX0FFUzI1Nl9DVFNfSE1BQ19TSEEx Xzk2ICAweDAwMTIKKyNlbmRpZgorI2lmbmRlZiBFTkNUWVBFX0FSQ0ZPVVJfSE1BQworI2RlZmlu ZSBFTkNUWVBFX0FSQ0ZPVVJfSE1BQyAgICAgMHgwMDE3CisjZW5kaWYKKyNpZm5kZWYgRU5DVFlQ RV9BUkNGT1VSX0hNQUNfRVhQCisjZGVmaW5lIEVOQ1RZUEVfQVJDRk9VUl9ITUFDX0VYUCAweDAw MTgKKyNlbmRpZgorI2lmbmRlZiBFTkNUWVBFX0xPQ0FMX1JDNF9NRDQKKyNkZWZpbmUgRU5DVFlQ RV9MT0NBTF9SQzRfTUQ0ICAgIDB4RkZGRkZGODAKKyNlbmRpZgorI2lmbmRlZiAgRU5DVFlQRV9V TktOT1dOCisjZGVmaW5lIEVOQ1RZUEVfVU5LTk9XTiAgICAgICAgIDB4MDFmZgorI2VuZGlmCisv KiBsb2NhbCBjcnVkICovCisvKiBtYXJjJ3MgREVTLTMgd2l0aCAzMi1iaXQgbGVuZ3RoICovCisj aWZuZGVmICBFTkNUWVBFX0xPQ0FMX0RFUzNfSE1BQ19TSEExCisjZGVmaW5lIEVOQ1RZUEVfTE9D QUxfREVTM19ITUFDX1NIQTEgMHg3MDA3CisjZW5kaWYKKyNlbmRpZiAvKiBLUkI1X1RFTE5FVF9I ICovCgpkaWZmIC0tZ2l0IGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9j a3VhdGguYyBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1YXRoLmMK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWE5YmM3ZAotLS0gL2Rldi9udWxs CisrKyBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1YXRoLmMKQEAg LTAsMCArMSwxMzM2MiBAQAorY2hhciAqY2thdGh2ID0gIkF1dGhlbnRpY2F0aW9uLCA5LjAuMjM1 LCAxNiBNYXIgMjAxMCI7CisvKgorICBDIEsgVSBBIFQgSCAuIEMgIC0tICBBdXRoZW50aWNhdGlv biBmb3IgQy1LZXJtaXQKKworICBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMTAsCisgICAgVHJ1c3Rl ZXMgb2YgQ29sdW1iaWEgVW5pdmVyc2l0eSBpbiB0aGUgQ2l0eSBvZiBOZXcgWW9yay4KKyAgICBB bGwgcmlnaHRzIHJlc2VydmVkLiAgU2VlIHRoZSBDLUtlcm1pdCBDT1BZSU5HLlRYVCBmaWxlIG9y IHRoZQorICAgIGNvcHlyaWdodCB0ZXh0IGluIHRoZSBja2NtYWkuYyBtb2R1bGUgZm9yIGRpc2Ns YWltZXIgYW5kIHBlcm1pc3Npb25zLgorCisgICAgQXV0aG9yOiAgSmVmZnJleSBFIEFsdG1hbiAo amFsdG1hbkBzZWN1cmUtZW5kcG9pbnRzLmNvbSkKKyAgICAgICAgICAgICAgIFNlY3VyZSBFbmRw b2ludHMgSW5jLiwgTmV3IFlvcmsgQ2l0eQorKi8KKy8qCisgKiBBZGRpdGlvbmFsIGNvcHlyaWdo dHMgaW5jbHVkZWQgd2l0aCBhZmZlY3RlZCBjb2RlLgorICovCisKKyNpZmRlZiBIRUlNREFMCisv KgorICBUdXJuZWQgb2ZmIFVzZXIgdG8gVXNlciBzdXBwb3J0CisgIFR1cm5lZCBvZmYgS0RFU1RS T1kgc3VwcG9ydAorICBUdXJuZWQgb2ZmIEtMSVNUIHN1cHBvcnQKKyAgVHVybmVkIG9mZiBrcmI1 X3Byb21wdGVyKCkgc3VwcG9ydAorICBUdXJuZWQgb2ZmIHRpY2tldCB2YWxpZGF0aW9uCisgIFR1 cm5lZCBvZmYgdGlja2V0IHJlbmV3YWwKKyAgVHVybmVkIG9mZiBhbHRlcm5hdGl2ZSBjYWNoZSBz dXBwb3J0IGluIGs1X2dldF9jY2FjaGUoKQorCisgIFJlbWFpbmluZyBsaW5rIHByb2JsZW1zOgor CisgIGNrdWF0aC5vOiBJbiBmdW5jdGlvbiBgY2tfa3JiNV9pbml0VEdUJzoKKyAgY2t1YXRoLm8o LnRleHQrMHg1MGMyKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBga3JiNV9zdHJpbmdfdG9fZGVs dGF0JworICBja3VhdGgubygudGV4dCsweDUxNmQpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBr cmI1X3N0cmluZ190b19kZWx0YXQnCisgIGNrdWF0aC5vKC50ZXh0KzB4NTFlZik6IHVuZGVmaW5l ZCByZWZlcmVuY2UgdG8gYGtyYjVfc3RyaW5nX3RvX2RlbHRhdCcKKyovCisjZW5kaWYgLyogSEVJ TURBTCAqLworCisvKgorICogSW1wbGVtZW50cyBLZXJiZXJvcyA0LzUsIFNSUCwgU1NMLCBOVExN IGF1dGhlbnRpY2F0aW9uIGFuZCBTVEFSVF9UTFMKKyAqLworCisjaW5jbHVkZSAiY2tjc3ltLmgi CisjaW5jbHVkZSAiY2tjZGViLmgiCisKKyNpZmRlZiBDS19TRUNVUklUWQorCisjZGVmaW5lIENL VUFUSF9DCisjaW5jbHVkZSAiY2tja2VyLmgiCisjaW5jbHVkZSAiY2t1dXNyLmgiCisjaW5jbHVk ZSAiY2t1Y21kLmgiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGb3Igc3RydWN0IGtl eXRhYiAqLworI2luY2x1ZGUgImNrY25ldC5oIgorI2luY2x1ZGUgImNrY3RlbC5oIgorCitjaGFy IHN6VXNlck5hbWVSZXF1ZXN0ZWRbVUlEQlVGTEVOKzFdOyAgICAvKiBmb3IgaW5jb21pbmcgY29u bmVjdGlvbnMgKi8KK2NoYXIgc3pVc2VyTmFtZUF1dGhlbnRpY2F0ZWRbVUlEQlVGTEVOKzFdOy8q IGZvciBpbmNvbWluZyBjb25uZWN0aW9ucyAqLworY2hhciBzekhvc3ROYW1lW1VJREJVRkxFTisx XTsKK2NoYXIgc3pVc2VyTmFtZVtVSURCVUZMRU4rMV07CitzdGF0aWMgY2hhciBzeklQWzE2XTsK K3N0YXRpYyBpbnQgIHZhbGlkVXNlciA9IEFVVEhfUkVKRUNUOyAgICAvKiBVc2VyIHN0YXJ0cyBv dXQgaW52YWxpZCAqLworaW50IGF1dGhlbnRpY2F0aW9uX3ZlcnNpb24gPSBBVVRIVFlQRV9OVUxM OworaW50IGFjY2VwdF9jb21wbGV0ZSA9IDA7CisKKyNpZmRlZiBDS19BVVRIRU5USUNBVElPTgor I2lmZGVmIENLX1NTTAorI2lmZGVmIEtSQjUKKyNkZWZpbmUgVExTX1ZFUklGWQorI2VuZGlmIC8q IEtSQjUgKi8KKyNlbmRpZiAvKiBDS19TU0wgKi8KKworI2lmZGVmIENLX0RFUworI2lmZGVmIENL X1NTTAorI2lmbmRlZiBMSUJERVMKKyNkZWZpbmUgTElCREVTCisjZW5kaWYgLyogTElCREVTICov CisjZW5kaWYgLyogQ0tfU1NMICovCisjZW5kaWYgLyogQ0tfREVTICovCisKKyNpZmRlZiBDUllQ VF9ETEwKKyNpZm5kZWYgTElCREVTCisjZGVmaW5lIExJQkRFUworI2VuZGlmIC8qIExJQkRFUyAq LworI2lmZGVmIE9TMgorI2lmZGVmIE5UCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2Vsc2UgLyog TlQgKi8KKyNkZWZpbmUgSU5DTF9ET1NNT0RVTEVNR1IKKyNpbmNsdWRlIDxvczIuaD4KKyNlbmRp ZiAvKiBOVCAqLworI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIENSWVBUX0RMTCAqLworCisj aWZkZWYgTlQKKyNkZWZpbmUgS1JCNV9BVVRPQ09ORl9fCisjZGVmaW5lIE5UTE0KKyNlbmRpZiAv KiBOVCAqLworCisjaWZkZWYgQ0tfS0VSQkVST1MKKyNkZWZpbmUgS0lOSVQKKyNpZm5kZWYgSEVJ TURBTAorI2RlZmluZSBLTElTVAorI2RlZmluZSBLREVTVFJPWQorI2VuZGlmIC8qIEhFSU1EQUwg Ki8KKyNkZWZpbmUgQ0hFQ0tBRERSUworI2Vsc2UgLyogQ0tfS0VSQkVST1MgKi8KKyNpZmRlZiBL UkI0CisjdW5kZWYgS1JCNAorI2VuZGlmIC8qIEtSQjQgKi8KKyNpZmRlZiBLUkI1CisjdW5kZWYg S1JCNQorI2VuZGlmIC8qIEtSQjUgKi8KKyNpZmRlZiBLUkI1MjQKKyN1bmRlZiBLUkI1MjQKKyNl bmRpZiAvKiBLUkI1MjQgKi8KKyNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLworCisjaW5jbHVkZSA8 c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNs dWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2lm bmRlZiBtYWxsb2MKKyNpZm5kZWYgVk1TCisjaWZuZGVmIEZSRUVCU0Q0CisjaWZuZGVmIE9wZW5C U0QKKyNpZmRlZiBNQUNPU1gKKyNpbmNsdWRlIDxzeXMvbWFsbG9jLmg+CisjZWxzZSAvKiBNQUNP U1ggKi8KKyNpbmNsdWRlIDxtYWxsb2MuaD4KKyNlbmRpZiAvKiBNQUNPU1ggKi8KKyNlbmRpZiAv KiBPcGVuQlNEICovCisjZW5kaWYgLyogRlJFRUJTRDQgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKyNl bmRpZiAvKiBtYWxsb2MgKi8KKyNpZmRlZiBPUzIKKyNpbmNsdWRlIDxpby5oPgorI2VuZGlmIC8q IE9TMiAqLworCisjaWZkZWYgS1JCNQorI2lmZGVmIEhFSU1EQUwKKyNpZmRlZiBwcmludGYKKyNk ZWZpbmUgc2F2ZXByaW50ZiBwcmludGYKKyN1bmRlZiBwcmludGYKKyNlbmRpZiAvKiBwcmludGYg Ki8KKyNpbmNsdWRlICJrcmI1LmgiCisKKyNpbmNsdWRlICJjb21fZXJyLmgiCisKKyNpZmRlZiBz YXZlcHJpbnRmCisjZGVmaW5lIHByaW50ZiBzYXZlcHJpbnRmCisjZW5kaWYgLyogc2F2ZXByaW50 ZiAqLworI2Vsc2UgLyogSEVJTURBTCAqLworI2luY2x1ZGUgImtyYjUuaCIKKyNpbmNsdWRlICJw cm9maWxlLmgiCisjaW5jbHVkZSAiY29tX2Vyci5oIgorI2lmZGVmIEtSQjVfR0VUX0lOSVRfQ1JF RFNfT1BUX1RLVF9MSUZFCisjZGVmaW5lIEtSQjVfSEFWRV9HRVRfSU5JVF9DUkVEUworI2Vsc2UK KyNkZWZpbmUga3JiNV9mcmVlX3VucGFyc2VkX25hbWUoY29uLHZhbCkga3JiNV94ZnJlZSgoY2hh ciAqKSh2YWwpKQorI2VuZGlmCisjaWZuZGVmIEtSQjVfSEFWRV9HRVRfSU5JVF9DUkVEUworI2Rl ZmluZSBrcmI1X2ZyZWVfZGF0YV9jb250ZW50cyhjLHYpIGtyYjVfeGZyZWUoKGNoYXIgKikodikt PmRhdGEpCisjZW5kaWYKKyNlbmRpZiAvKiBIRUlNREFMICovCisjaWZkZWYgSEFWRV9QV0RfSAor I2luY2x1ZGUgPHB3ZC5oPgorI2VuZGlmCisjZW5kaWYgLyogS1JCNSAqLworCisjaWZkZWYgS1JC NAorI2RlZmluZSAgZGVzX2NibG9jayBCbG9jaworI2RlZmluZSAgY29uc3RfZGVzX2NibG9jayBj b25zdCBCbG9jaworI2RlZmluZSAgZGVzX2tleV9zY2hlZHVsZSBTY2hlZHVsZQorI2lmZGVmIEtS QjUyNAorI2lmZGVmIE5UCisjZGVmaW5lIF9XSU5ET1dTCisjZW5kaWYgLyogTlQgKi8KKyNpbmNs dWRlICJrZXJiZXJvc0lWL2tyYi5oIgorI2lmbmRlZiBPUzIKKyNpZmRlZiBLUkI1MjRfQ09OVgor I2luY2x1ZGUgImtyYjUyNC5oIgorI2VuZGlmIC8qIEtSQjUyNF9DT05WICovCitfUFJPVE9UWVAo Y29uc3QgY2hhciAqIGtyYl9nZXRfZXJyX3RleHRfZW50cnksIChpbnQpKTsKKyNlbmRpZiAvKiBP UzIgKi8KKyNlbHNlIC8qIEtSQjUyNCAqLworI2lmZGVmIFNPTEFSSVMKKyNpZm5kZWYgc3VuCisv KiBmb3Igc29tZSByZWFzb24gdGhlIE1ha2VmaWxlIGVudHJpZXMgZm9yIHRoZSBTb2xhcmlzIHN5 c3RlbXMgaGF2ZSAtVXN1biAqLworI2RlZmluZSBzdW4KKyNlbmRpZiAvKiBzdW4gKi8KKyNlbmRp ZiAvKiBTT0xBUklTICovCisjaW5jbHVkZSAia3JiLmgiCisjZGVmaW5lIGtyYl9nZXRfZXJyX3Rl eHRfZW50cnkga3JiX2dldF9lcnJfdGV4dAorI2VuZGlmIC8qIEtSQjUyNCAqLworI2Vsc2UgLyog S1JCNCAqLworI2lmZGVmIENLX1NTTAorI2RlZmluZSAgZGVzX2NibG9jayBCbG9jaworI2lmZGVm IENPTU1FTlQKKyNkZWZpbmUgIGNvbnN0X2Rlc19jYmxvY2sgY29uc3QgQmxvY2sKKyNlbmRpZiAv KiBDT01NRU5UICovCisjZGVmaW5lICBkZXNfa2V5X3NjaGVkdWxlIFNjaGVkdWxlCisjZW5kaWYg LyogQ0tfU1NMICovCisjZW5kaWYgLyogS1JCNCAqLworCisjaW5jbHVkZSAiY2t1YXRoLmgiCisj aWZkZWYgQ0tfS0VSQkVST1MKKyNpZm5kZWYgS1JCNQorI2RlZmluZSBOT0JMT0NLREVGCisjZWxz ZSAvKiBLUkI1ICovCisjaWZkZWYgS1JCNTI0CisjZGVmaW5lIE5PQkxPQ0tERUYKKyNlbmRpZiAv KiBLUkI1MjQgKi8KKyNlbmRpZiAvKiBLUkI1ICovCisjZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8K KyNpbmNsdWRlICJja3VhdDIuaCIKKworI2lmZGVmIENLX1NTTAorI2lmZGVmIExJQkRFUworI2lm ZGVmIE9QRU5TU0xfMDk3CisjaWZkZWYgQ0tfREVTCisjZGVmaW5lIE9QRU5TU0xfRU5BQkxFX09M RF9ERVNfU1VQUE9SVAorI2luY2x1ZGUgPG9wZW5zc2wvZGVzLmg+CisjZW5kaWYJLyogQ0tfREVT ICovCisjZW5kaWYgLyogT1BFTlNTTF8wOTcgKi8KKyNpZm5kZWYgSEVBREVSX0RFU19ICisjZGVm aW5lIEhFQURFUl9ERVNfSAorI2VuZGlmIC8qIEhFQURFUl9ERVNfSCAqLworI2VuZGlmIC8qIExJ QkRFUyAqLworI2luY2x1ZGUgImNrX3NzbC5oIgorZXh0ZXJuIGludCBzc2xfZmluaXNoZWRfbWVz c2FnZXM7CisjZW5kaWYgLyogU1NMICovCisKKyNkZWZpbmUgUFdEX1NaIDEyOAorCisjaWZuZGVm IExJQkRFUworI2lmZGVmIFVOSVgKKyNkZWZpbmUgZGVzX3NldF9yYW5kb21fZ2VuZXJhdG9yX3Nl ZWQoeCkgZGVzX2luaXRfcmFuZG9tX251bWJlcl9nZW5lcmF0b3IoeCkKKyNlbmRpZiAvKiBVTklY ICovCisjZWxzZSAvKiBMSUJERVMgKi8KKyNkZWZpbmUgZGVzX2ZpeHVwX2tleV9wYXJpdHkgZGVz X3NldF9vZGRfcGFyaXR5CisjZW5kaWYgLyogTElCREVTICovCisKKyNpZmRlZiBPUzIKKyNpZmRl ZiBDS19FTkNSWVBUSU9OCisjZGVmaW5lIE1BUF9ERVMKKyNlbmRpZiAvKiBDS19FTkNSWVBUSU9O ICovCisjaWZkZWYgS1JCNAorI2RlZmluZSBNQVBfS1JCNAorI2VuZGlmIC8qIEtSQjQgKi8KKyNp ZmRlZiBTUlBETEwKKyNkZWZpbmUgTUFQX1NSUAorI2VuZGlmIC8qIFNSUERMTCAqLworI2lmZGVm IEtSQjUKKyNkZWZpbmUgTUFQX0tSQjUKKyNlbmRpZiAvKiBLUkI1ICovCisjaWZkZWYgQ1JZUFRf RExMCisjZGVmaW5lIE1BUF9DUllQVAorI2VuZGlmIC8qIENSWVBUX0RMTCAqLworI2RlZmluZSBN QVBfTlRMTQorI2luY2x1ZGUgImNrb2F0aC5oIgorI2luY2x1ZGUgImNrb3N5bi5oIgorI2VuZGlm IC8qIE9TMiAqLworCisvKgorICogR2xvYmFscworICovCitpbnQgYXV0aF90eXBlX3VzZXJbQVVU SFRZUExTVFNaXSA9IHtBVVRIVFlQRV9BVVRPLCBBVVRIVFlQRV9OVUxMfTsKK2ludCBhdXRoX2hv dz0wOworaW50IGF1dGhfY3J5cHQ9MDsKK2ludCBhdXRoX2Z3ZD0wOworCisvKiBUaGVzZSBhcmUg c3RhdGUgY29tcGxldGlvbiB2YXJpYWJsZXMgKi8KK3N0YXRpYyBpbnQgbXV0dWFsX2NvbXBsZXRl ID0gMDsKKworI2lmZGVmIEtSQjQKKyNpZmRlZiBPUzIKK3N0YXRpYyBMRUFTSF9DUkVERU5USUFM UyBjcmVkOworI2Vsc2UgLyogT1MyICovCitzdGF0aWMgQ1JFREVOVElBTFMgY3JlZDsKKyNlbmRp ZiAvKiBPUzIgKi8KK3N0YXRpYyBLVEVYVF9TVCBrNF9hdXRoOworc3RhdGljIGNoYXIgICAgIGs0 X25hbWVbQU5BTUVfU1pdOworc3RhdGljIEFVVEhfREFUIGs0X2FkYXQgID0geyAwIH07CitzdGF0 aWMgTVNHX0RBVCAgazRfbXNnX2RhdGE7CisjaWZkZWYgQ0tfRU5DUllQVElPTgorc3RhdGljIEJs b2NrICAgIGs0X3Nlc3Npb25fa2V5ICAgICA9IHsgMCB9Oworc3RhdGljIFNjaGVkdWxlIGs0X3Nj aGVkOworc3RhdGljIEJsb2NrICAgIGs0X2NoYWxsZW5nZSAgICAgICA9IHsgMCB9OworI2lmZGVm IE1JVF9DVVJSRU5UCitzdGF0aWMga3JiNV9rZXlibG9jayBrNF9rcmJrZXk7CisjZW5kaWYgLyog TUlUX0NVUlJFTlQgKi8KKyNlbmRpZiAvKiBFTkNSWVBUSU9OICovCisjZGVmaW5lIEtSQjRfU0VS VklDRV9OQU1FICAgICJyY21kIgorCitfUFJPVE9UWVAoc3RhdGljIGludCBrNF9hdXRoX3NlbmQs KFZPSUQpKTsKK19QUk9UT1RZUChzdGF0aWMgaW50IGs0X2F1dGhfcmVwbHksKHVuc2lnbmVkIGNo YXIgKiwgaW50KSk7CitfUFJPVE9UWVAoc3RhdGljIGludCBrNF9hdXRoX2lzLCh1bnNpZ25lZCBj aGFyICosIGludCkpOworI2VuZGlmIC8qIEtSQjQgKi8KKworI2lmZGVmIEtSQjUKK3N0YXRpYyBr cmI1X2RhdGEgICAgICAgICAgazVfYXV0aDsKK3N0YXRpYyBrcmI1X2F1dGhfY29udGV4dCAgYXV0 aF9jb250ZXh0Oworc3RhdGljIGtyYjVfa2V5YmxvY2sgICAgICprNV9zZXNzaW9uX2tleSA9IE5V TEw7CitzdGF0aWMga3JiNV90aWNrZXQgICAgICAgKms1X3RpY2tldCA9IE5VTEw7CisjaWZuZGVm IEtSQjVfU0VSVklDRV9OQU1FCisjZGVmaW5lIEtSQjVfU0VSVklDRV9OQU1FICAgICJob3N0Igor I2lmZGVmIE1BQ09TWAorI2RlZmluZSBNSVRfQ1VSUkVOVCAxCisjZGVmaW5lIGRlY29kZV9rcmI1 X3RpY2tldCAga3JiNV9kZWNvZGVfdGlja2V0CisjZGVmaW5lIGtyYjVfcmVhZF9tZXNzYWdlICAg Y2tfa3JiNV9yZWFkX21lc3NhZ2UKKyNkZWZpbmUga3JiNV93cml0ZV9tZXNzYWdlICBja19rcmI1 X3dyaXRlX21lc3NhZ2UKKyNlbmRpZiAvKiBNQUNPU1ggKi8KKyNlbmRpZgorCitfUFJPVE9UWVAo c3RhdGljIGludCBrNV9hdXRoX3NlbmQsKGludCxpbnQsaW50KSk7CitfUFJPVE9UWVAoc3RhdGlj IGludCBrNV9hdXRoX3JlcGx5LChpbnQsIHVuc2lnbmVkIGNoYXIgKiwgaW50KSk7CitfUFJPVE9U WVAoc3RhdGljIGludCBrNV9hdXRoX2lzLChpbnQsdW5zaWduZWQgY2hhciAqLCBpbnQpKTsKK19Q Uk9UT1RZUChzdGF0aWMgaW50IFNlbmRLNUF1dGhTQiwoaW50LCB2b2lkICosIGludCkpOworI2lm ZGVmIFRMU19WRVJJRlkKK3N0YXRpYyBpbnQga3JiNV90bHNfdmVyaWZpZWQgPSAwOworI2VuZGlm IC8qIFRMU19WRVJJRlkgKi8KKyNlbmRpZiAvKiBLUkI1ICovCisKKyNpZmRlZiBHU1NBUElfS1JC NQorI2luY2x1ZGUgPGdzc2FwaS9nc3NhcGkuaD4KKyNpbmNsdWRlIDxnc3NhcGkvZ3NzYXBpX2dl bmVyaWMuaD4KKyNpbmNsdWRlIDxnc3NhcGkvZ3NzYXBpX2tyYjUuaD4KKworc3RhdGljIGdzc19j dHhfaWRfdCBnY29udGV4dDsKKyNkZWZpbmUgR1NTX0JVRlNJWiA0MDk2CitzdGF0aWMgZ3NzX2J1 ZmZlcl9kZXNjIGdzc19zZW5kX3RvaywgZ3NzX3JlY3ZfdG9rLCAqZ3NzX3Rva2VuX3B0cjsKK3N0 YXRpYyBjaGFyIGdzc19zdGJ1ZltHU1NfQlVGU0laXTsKK3N0YXRpYyBnc3NfbmFtZV90IGdzc190 YXJnZXRfbmFtZTsKK3N0YXRpYyBzdHJ1Y3QgZ3NzX2NoYW5uZWxfYmluZGluZ3Nfc3RydWN0IGdz c19jaGFuOworCitfUFJPVE9UWVAoc3RhdGljIGludCBnc3NrNV9hdXRoX3NlbmQsKGludCxpbnQs aW50KSk7CitfUFJPVE9UWVAoc3RhdGljIGludCBnc3NrNV9hdXRoX3JlcGx5LChpbnQsIHVuc2ln bmVkIGNoYXIgKiwgaW50KSk7CitfUFJPVE9UWVAoc3RhdGljIGludCBnc3NrNV9hdXRoX2lzLChp bnQsdW5zaWduZWQgY2hhciAqLCBpbnQpKTsKK19QUk9UT1RZUChzdGF0aWMgaW50IFNlbmRHU1NL NUF1dGhTQiwoaW50LCB2b2lkICosIGludCkpOworI2VuZGlmIC8qIEdTU0FQSV9LUkI1ICovCisK KyNpZmRlZiBDS19TUlAKKyNpZmRlZiBQUkVfU1JQXzFfN18zCitfUFJPVE9UWVAoc3RhdGljIGlu dCBzcnBfcmVwbHksKGludCwgdW5zaWduZWQgY2hhciAqLCBpbnQpKTsKK19QUk9UT1RZUChzdGF0 aWMgaW50IHNycF9pcywoaW50LCB1bnNpZ25lZCBjaGFyICosIGludCkpOworI2Vsc2UgLyogUFJF X1NSUF8xXzdfMyAqLworX1BST1RPVFlQKHN0YXRpYyBpbnQgbmV3X3NycF9yZXBseSwoaW50LCB1 bnNpZ25lZCBjaGFyICosIGludCkpOworX1BST1RPVFlQKHN0YXRpYyBpbnQgbmV3X3NycF9pcywo aW50LCB1bnNpZ25lZCBjaGFyICosIGludCkpOworI2VuZGlmIC8qIFBSRV9TUlBfMV83XzMgKi8K KyNlbmRpZiAvKiBTUlAgKi8KKworI2lmZGVmIENLX0VOQ1JZUFRJT04KK2ludCBlbmNyeXB0X2Zs YWcgPSAxOworI2VuZGlmCisjaWZkZWYgRk9SV0FSRAoraW50IGZvcndhcmRfZmxhZyA9IDA7ICAg ICAgICAgICAgICAvKiBmb3J3YXJkIHRpY2tldHM/ICovCitpbnQgZm9yd2FyZGFibGVfZmxhZyA9 IDE7ICAgICAgICAgIC8qIGdldCBmb3J3YXJkYWJsZSB0aWNrZXRzIHRvIGZvcndhcmQ/ICovCitp bnQgZm9yd2FyZGVkX3RpY2tldHMgPSAwOyAgICAgICAgIC8qIHdlcmUgdGlja2V0cyBmb3J3YXJk ZWQ/ICovCisjZW5kaWYKKworc3RhdGljIHVuc2lnbmVkIGNoYXIgc3RyX2RhdGFbNDA5Nl0gPSB7 IElBQywgU0IsIFRFTE9QVF9BVVRIRU5USUNBVElPTiwgMCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBBVVRIVFlQRV9LRVJCRVJPU19WNSwgfTsKKyNkZWZpbmUgQVVU SFRNUEJMIDIwNDgKK3N0YXRpYyBjaGFyIHN0clRtcFtBVVRIVE1QQkwrMV07CitzdGF0aWMgY2hh ciBzekxvY2FsSG9zdE5hbWVbVUlEQlVGTEVOKzFdOworc3RhdGljIGtzdHJlYW0gZ19rc3RyZWFt PU5VTEw7CisKKyNpZmRlZiBLUkI1CitrcmI1X2NvbnRleHQgazVfY29udGV4dD1OVUxMOworc3Rh dGljIGtyYjVfY3JlZHMgKiByZXRfY3JlZD1OVUxMOworc3RhdGljIGtyYjVfY29udGV4dCB0ZWxu ZXRfY29udGV4dD1OVUxMOworc3RhdGljIGNoYXIgKiB0ZWxuZXRfa3JiNV9yZWFsbSA9IE5VTEw7 CitzdGF0aWMga3JiNV9wcmluY2lwYWwgZndkX3NlcnZlciA9IE5VTEw7CisjZW5kaWYgLyogS1JC NSAqLworCisjaWZkZWYgQ0tfU1JQCisjaWZkZWYgUFJFX1NSUF8xXzRfNAorI2lmbmRlZiBQUkVf U1JQXzFfNF81CisjZGVmaW5lIFBSRV9TUlBfMV80XzUKKyNlbmRpZiAvKiBQUkVfU1JQXzFfNF81 ICovCisjZW5kaWYgLyogUFJFX1NSUF8xXzRfNSAqLworI2lmZGVmIFBSRV9TUlBfMV80XzUKKyNp Zm5kZWYgUFJFX1NSUF8xXzdfMworI2RlZmluZSBQUkVfU1JQXzFfN18zCisjZW5kaWYgLyogUFJF X1NSUF8xXzdfMyAqLworI2VuZGlmIC8qIFBSRV9TUlBfMV80XzUgKi8KKyNpbmNsdWRlIDx0X3B3 ZC5oPgorI2luY2x1ZGUgPHRfY2xpZW50Lmg+CisjaW5jbHVkZSA8dF9zZXJ2ZXIuaD4KK3N0YXRp YyBzdHJ1Y3QgdF9zZXJ2ZXIgKiB0cyA9IE5VTEw7CitzdGF0aWMgc3RydWN0IHRfY2xpZW50ICog dGMgPSBOVUxMOworI2lmZGVmIFBSRV9TUlBfMV80XzQKK3N0YXRpYyBzdHJ1Y3QgdF9wdyAqIHRw dyA9IE5VTEw7CitzdGF0aWMgc3RydWN0IHRfY29uZiAqIHRjb25mID0gTlVMTDsKKyNlbmRpZiAv KiBQUkVfU1JQXzFfNF80ICovCisjaWZuZGVmIFBSRV9TUlBfMV83XzMKKyNpZm5kZWYgU1REQ19I RUFERVJTCisjZGVmaW5lIFNURENfSEVBREVSUyAxCisjZW5kaWYgLyogU1REQ19IRUFERVJTICov CisjaW5jbHVkZSA8c3JwLmg+CitzdGF0aWMgU1JQICogc19zcnAgPSBOVUxMOworc3RhdGljIGNz dHIgKiBzX2tleSA9IE5VTEw7CitzdGF0aWMgU1JQICogY19zcnAgPSBOVUxMOworc3RhdGljIGNz dHIgKiBjX2tleSA9IE5VTEw7CisjZW5kaWYgLyogUFJFX1NSUF8xXzdfMyAqLworc3RhdGljIGlu dCBzcnBfd2FpdHJlc3AgPSAwOyAgICAvKiBGbGFnIHRvIGluZGljYXRlIHJlYWRpbmVzcyBmb3Ig cmVzcG9uc2UgKi8KK3N0YXRpYyBjaGFyIHNycF9wYXNzd2RbUFdEX1NaXTsKKyNlbmRpZiAvKiBD S19TUlAgKi8KKworI2lmZGVmIENLX0tFUkJFUk9TCisjaWZkZWYgUkxPR0NPREUKKyNkZWZpbmUg T1BUU19GT1JXQVJEX0NSRURTICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIE9QVFNfRk9S V0FSREFCTEVfQ1JFRFMgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBLQ01EX0tFWVVTQUdFICAg ICAgICAgICAgICAgIDEwMjYKKworI2RlZmluZSBSTE9HX0JVRlNJWiA1MTIwCitzdGF0aWMgaW50 IHJsb2dfZW5jcnlwdCA9IDA7CitjaGFyIGRlc19pbmJ1ZlsyKlJMT0dfQlVGU0laXTsgICAgICAg LyogbmVlZHMgdG8gYmUgPiBsYXJnZXN0IHJlYWQgc2l6ZSAqLworY2hhciBkZXNfb3V0cGt0WzIq UkxPR19CVUZTSVorNF07ICAgIC8qIG5lZWRzIHRvIGJlID4gbGFyZ2VzdCB3cml0ZSBzaXplICov CisjaWZkZWYgS1JCNQora3JiNV9kYXRhIGRlc2luYnVmLGRlc291dGJ1ZjsKK2tyYjVfZW5jcnlw dF9ibG9jayBlYmxvY2s7ICAgICAgICAgICAgIC8qIGVibG9jayBmb3IgZW5jcnlwdC9kZWNyeXB0 ICovCitzdGF0aWMga3JiNV9kYXRhIGVuY2l2ZWNfaVsyXSwgZW5jaXZlY19vWzJdOworCitlbnVt IGtyYjVfa2NtZF9wcm90byB7CisgIC8qIE9sZCBwcm90b2NvbDogREVTIGVuY3J5cHRpb24gb25s eS4gIE5vIHN1YmtleXMuICBObyBwcm90ZWN0aW9uCisgICAgIGZvciBjbGVhcnRleHQgbGVuZ3Ro LiAgTm8gaXZlYyBzdXBwbGllZC4gIE9PQiBoYWNrcyB1c2VkIGZvcgorICAgICBybG9naW4uICBD aGVja3N1bSBtYXkgYmUgb21pdHRlZCBhdCBjb25uZWN0aW9uIHN0YXJ0dXAuICAqLworICBLQ01E X09MRF9QUk9UT0NPTCA9IDEsCisgIC8qIE5ldyBwcm90b2NvbDogQW55IGVuY3J5cHRpb24gc2No ZW1lLiAgQ2xpZW50LWdlbmVyYXRlZCBzdWJrZXkKKyAgICAgcmVxdWlyZWQuICBQcmVwZW5kIGNs ZWFydGV4dC1sZW5ndGggdG8gY2xlYXJ0ZXh0IGRhdGEgKGJ1dCBkb24ndAorICAgICBpbmNsdWRl IGl0IGluIGNvdW50KS4gIFN0YXJ0aW5nIGl2ZWMgZGVmaW5lZCwgY2hhaW5lZC4gIEluLWJhbmQK KyAgICAgc2lnbmFsbGluZy4gIENoZWNrc3VtIHJlcXVpcmVkLiAgKi8KKyAgS0NNRF9ORVdfUFJP VE9DT0wsCisgIC8qIEhhY2s6IEdldCBjcmVkZW50aWFscywgYW5kIHVzZSB0aGUgb2xkIHByb3Rv Y29sIGlmZiB0aGUgc2Vzc2lvbgorICAgICBrZXkgdHlwZSBpcyBzaW5nbGUtREVTLiAgKi8KKyAg S0NNRF9QUk9UT0NPTF9DT01QQVRfSEFDSywKKyAgS0NNRF9VTktOT1dOX1BST1RPQ09MCit9Owor ZW51bSBrcmI1X2tjbWRfcHJvdG8ga3JiNV9ybG9nX3ZlciA9IEtDTURfUFJPVE9DT0xfQ09NUEFU X0hBQ0s7CisjZW5kaWYgLyogS1JCNSAqLworI2VuZGlmIC8qIFJMT0dDT0RFICovCitzdGF0aWMg Y2hhciBzdG9yYWdlWzY1NTM2XTsgICAgICAgICAgICAvKiBzdG9yYWdlIGZvciB0aGUgZGVjcnlw dGlvbiAqLworc3RhdGljIGludCBuc3RvcmVkID0gMDsKK3N0YXRpYyBjaGFyICpzdG9yZV9wdHIg PSBzdG9yYWdlOworCitleHRlcm4gY2hhciAqIGtyYjVfZF9wcmluY2lwYWw7ICAgICAgICAgLyog RGVmYXVsdCBwcmluY2lwYWwgKi8KK2V4dGVybiBjaGFyICoga3JiNV9kX2luc3RhbmNlOyAgICAg ICAgICAvKiBEZWZhdWx0IGluc3RhbmNlICovCitleHRlcm4gY2hhciAqIGtyYjVfZF9yZWFsbTsg ICAgICAgICAgICAgLyogRGVmYXVsdCByZWFsbSAqLworZXh0ZXJuIGNoYXIgKiBrcmI1X2RfY2M7 ICAgICAgICAgICAgICAgIC8qIERlZmF1bHQgY3JlZGVudGlhbHMgY2FjaGUgKi8KK2V4dGVybiBj aGFyICoga3JiNV9kX3NydjsgICAgICAgICAgICAgICAvKiBEZWZhdWx0IHNlcnZpY2UgbmFtZSAq LworZXh0ZXJuIGludCAgICBrcmI1X2RfbGlmZXRpbWU7ICAgICAgICAgIC8qIERlZmF1bHQgbGlm ZXRpbWUgKi8KK2V4dGVybiBpbnQgICAga3JiNV9kX2ZvcndhcmRhYmxlOworZXh0ZXJuIGludCAg ICBrcmI1X2RfcHJveGlhYmxlOworZXh0ZXJuIGludCAgICBrcmI1X2RfcmVuZXdhYmxlOworZXh0 ZXJuIGludCAgICBrcmI1X2F1dG9nZXQ7CitleHRlcm4gaW50ICAgIGtyYjVfY2hlY2thZGRyczsK K2V4dGVybiBpbnQgICAga3JiNV9kX2dldGs0OworZXh0ZXJuIGludCAgICBrcmI1X2Rfbm9fYWRk cmVzc2VzOworZXh0ZXJuIGNoYXIgKiBrNV9rZXl0YWI7CisKK2V4dGVybiBpbnQgICAga3JiNV9l cnJubzsKK2V4dGVybiBjaGFyICoga3JiNV9lcnJtc2c7CisKK2V4dGVybiBjaGFyICoga3JiNF9k X3ByaW5jaXBhbDsgICAgICAgICAvKiBEZWZhdWx0IHByaW5jaXBhbCAqLworZXh0ZXJuIGNoYXIg KiBrcmI0X2RfcmVhbG07ICAgICAgICAgICAgIC8qIERlZmF1bHQgcmVhbG0gKi8KK2V4dGVybiBj aGFyICoga3JiNF9kX3NydjsgICAgICAgICAgICAgICAvKiBEZWZhdWx0IHNlcnZpY2UgbmFtZSAq LworZXh0ZXJuIGludCAgICBrcmI0X2RfbGlmZXRpbWU7ICAgICAgICAgIC8qIERlZmF1bHQgbGlm ZXRpbWUgKi8KK2V4dGVybiBpbnQgICAga3JiNF9kX3ByZWF1dGg7CitleHRlcm4gY2hhciAqIGty YjRfZF9pbnN0YW5jZTsKK2V4dGVybiBpbnQgICAga3JiNF9hdXRvZ2V0OworZXh0ZXJuIGludCAg ICBrcmI0X2NoZWNrYWRkcnM7CitleHRlcm4gY2hhciAqIGs0X2tleXRhYjsKKworZXh0ZXJuIGlu dCAgICBrcmI0X2Vycm5vOworZXh0ZXJuIGNoYXIgKiBrcmI0X2Vycm1zZzsKKyNlbmRpZiAvKiBD S19LRVJCRVJPUyAqLworCitleHRlcm4gY2hhciB0bl9tc2dbXSwgaGV4YnVmW107ICAgICAgICAg LyogZnJvbSBja2NuZXQuYyAqLworZXh0ZXJuIENIQVIgcHdidWZbXTsKK2V4dGVybiBpbnQgIHB3 ZmxnLCBwd2NyeXB0OworZXh0ZXJuIGludCBkZWJsb2csIGRlYnNlcywgdG5fZGViOworZXh0ZXJu IGludCBzc3RlbG5ldCwgaW5zZXJ2ZXI7CisjaWZkZWYgQ0tfTE9HSU4KK2V4dGVybiBpbnQgY2t4 YW5vbjsKKyNlbmRpZiAvKiBDS19MT0dJTiAqLworZXh0ZXJuIGludCB0bl9hdXRoX2hvdzsKK2V4 dGVybiBpbnQgdG5fYXV0aF9lbmM7CisjaWZkZWYgQ0tfRU5DUllQVElPTgorZXh0ZXJuIGludCBj eF90eXBlOworI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KK2V4dGVybiBpbnQgcXVpZXQsIHR0 eWZkLCB0dG5wcm90bzsKKworaW50Citja19nc3NhcGlfaXNfaW5zdGFsbGVkKCkKK3sKKyNpZmRl ZiBLUkI1CisjaWZkZWYgT1MyCisgICAgcmV0dXJuKGhHU1NBUEkgIT0gTlVMTCk7CisjZWxzZSAv KiBPUzIgKi8KKyAgICByZXR1cm4oMSk7CisjZW5kaWYgLyogT1MyICovCisjZWxzZSAvKiBLUkI1 ICovCisgICAgcmV0dXJuKDApOworI2VuZGlmIC8qIEtSQjUgKi8KK30KKworaW50Citja19rcmI1 X2lzX2luc3RhbGxlZCgpCit7CisjaWZkZWYgS1JCNQorI2lmZGVmIE9TMgorICAgIHJldHVybiho S1JCNV8zMiAhPSBOVUxMKTsKKyNlbHNlIC8qIE9TMiAqLworICAgIHJldHVybigxKTsKKyNlbmRp ZiAvKiBPUzIgKi8KKyNlbHNlIC8qIEtSQjUgKi8KKyAgICByZXR1cm4oMCk7CisjZW5kaWYgLyog S1JCNSAqLworfQorCisKK2ludAorY2tfa3JiNV9pc19pbnN0YWxsZWRfYXNfc2VydmVyKCkKK3sK KyNpZmRlZiBLUkI1CisjaWZkZWYgSEVJTURBTAorICAgIGtyYjVfZXJyb3JfY29kZSByZXQ7Cisg ICAga3JiNV9rZXl0YWIga3Q7CisgICAga3JiNV9rdF9jdXJzb3IgY3Vyc29yOworCisgICAgcmV0 ID0ga3JiNV9rdF9kZWZhdWx0KGs1X2NvbnRleHQsICZrdCk7CisgICAgaWYgKCByZXQgKSB7Cisg ICAgICAgIGtyYjVfa3RfY2xvc2UoazVfY29udGV4dCwga3QpOworICAgICAgICByZXR1cm4oMCk7 CisgICAgfSBlbHNlIHsKKyAgICAgICAga3JiNV9rdF9lbmRfc2VxX2dldChrNV9jb250ZXh0LCBr dCwgJmN1cnNvcik7CisgICAgICAgIGtyYjVfa3RfY2xvc2UoazVfY29udGV4dCwga3QpOworICAg ICAgICByZXR1cm4oMSk7CisgICAgfQorI2Vsc2UgLyogSEVJTURBTCAqLworI2lmbmRlZiBDT01N RU5UCisgICAgY2hhciBrdG5hbWVbQ0tNQVhQQVRIXT0iIjsKKworICAgIGlmICggazVfa2V5dGFi ICkgeworICAgICAgICBja3N0cm5jcHkoa3RuYW1lLGs1X2tleXRhYixDS01BWFBBVEgpOworICAg IH0gZWxzZSB7CisgICAgICAgIGtyYjVfZXJyb3JfY29kZSBjb2RlOworCisgICAgICAgIGlmICgg azVfY29udGV4dCA9PSBOVUxMKQorICAgICAgICAgICAgaWYgKGtyYjVfaW5pdF9jb250ZXh0KCZr NV9jb250ZXh0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4oMCk7CisKKyAgICAgICAgY29kZSA9 IGtyYjVfa3RfZGVmYXVsdF9uYW1lKGs1X2NvbnRleHQsa3RuYW1lLENLTUFYUEFUSCk7CisgICAg ICAgIGRlYnVnKEYxMDEsImtyYjVfa3RfZGVmYXVsdF9uYW1lIiwiIixjb2RlKTsKKyAgICAgICAg aWYgKCBjb2RlICkgeworICAgICAgICAgICAgLyogV2UgY2FuJ3QgY2hlY2sgdGhlIGV4aXN0ZW5j ZSBvZiB0aGUgZmlsZSBzaW5jZSB3ZSBjYW4ndCAgICovCisgICAgICAgICAgICAvKiBkZXRlcm1p bmUgdGhlIGZpbGUgbmFtZS4gIFNvIHdlIHJldHVybiBUUlVFIGFuZCBsZXQgICAgICAgKi8KKyAg ICAgICAgICAgIC8qIEtyYjUgYmUgb2ZmZXJlZCB0byB0aGUgdXNlciBldmVuIHRob3VnaCBpdCBt YXkgZmFpbCBsYXRlciAqLworICAgICAgICAgICAgcmV0dXJuKDEpOworICAgICAgICB9CisgICAg fQorCisgICAgaWYgKCAhc3RybmNtcCgiRklMRToiLGt0bmFtZSw1KSApIHsKKyAgICAgICAgaWYg KCB6Y2hraSgma3RuYW1lWzVdKSA+IDAgKQorICAgICAgICAgICAgcmV0dXJuKDEpOworICAgICAg ICBlbHNlCisgICAgICAgICAgICByZXR1cm4oMCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYg KGt0bmFtZVswXSkKKyAgICAgICAgICAgIHJldHVybigxKTsKKyAgICAgICAgZWxzZQorICAgICAg ICAgICAgcmV0dXJuKDApOworICAgIH0KKyNlbHNlIC8qIENPTU1FTlQgKi8KKyAgICBrcmI1X2Vy cm9yX2NvZGUgICAgICAgICAgICAga3JiNXJjID0gS1JCNUtSQl9FUlJfR0VORVJJQzsKKyAgICBr cmI1X2NvbnRleHQgICAgICAgICAgICAgICAga3JiNWNvbnRleHQgPSBOVUxMOworICAgIGtyYjVf Y2NhY2hlICAgICAgICAgICAgICAgICBrcmI1Y2NkZWYgPSBOVUxMOworICAgIGtyYjVfY3JlZHMg ICAgICAgICAgICAgICAgICBrcmI1Y3JlZHMsICprcmI1Y3JlZHNwID0gTlVMTDsKKyAgICBpbnQg ICAgICAgICAgICAgICAgICAgICAgICAgcmMgPSAwOworCisgICAgaWYgKCAhY2tfa3JiNV9pc19p bnN0YWxsZWQoKSApCisgICAgICAgIHJldHVybigwKTsKKworICAgIG1lbXNldCgoY2hhciAqKSZr cmI1Y3JlZHMsIDAsIHNpemVvZihrcmI1Y3JlZHMpKTsKKworICAgIGlmICgoa3JiNXJjID0ga3Ji NV9pbml0X2NvbnRleHQoJmtyYjVjb250ZXh0KSkgIT0gMCkKKyAgICAgICAgZ290byBlcnI7CisK KyAgICBpZiAoKGtyYjVyYyA9IGtyYjVfc25hbWVfdG9fcHJpbmNpcGFsKGtyYjVjb250ZXh0LAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3pIb3N0TmFtZSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtyYjVfZF9zcnYgPworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3JiNV9kX3NydiA6CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBLUkI1X1NFUlZJQ0VfTkFNRSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtSQjVfTlRfU1JWX0hT VCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZrcmI1Y3JlZHMu c2VydmVyKSkgIT0gMCkKKyAgICAgIGdvdG8gZXJyOworCisgICAgaWYgKChrcmI1cmMgPSBrcmI1 X2NjX2RlZmF1bHQoa3JiNWNvbnRleHQsICZrcmI1Y2NkZWYpKSAhPSAwKQorICAgICAgICBnb3Rv IGVycjsKKworICAgIGlmICgoa3JiNXJjID0ga3JiNV9jY19nZXRfcHJpbmNpcGFsKGtyYjVjb250 ZXh0LCBrcmI1Y2NkZWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICZrcmI1Y3JlZHMuY2xpZW50KSkgIT0gMCkKKyAgICAgICAgZ290byBlcnI7CisKKyAgICBpZiAo KGtyYjVyYyA9IGtyYjVfZ2V0X2NyZWRlbnRpYWxzKGtyYjVjb250ZXh0LCAwLCBrcmI1Y2NkZWYs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmtyYjVjcmVkcywgJmty YjVjcmVkc3ApKSAhPSAwKQorICAgICAgICBnb3RvIGVycjsKKyAgICByYyA9IDE7CisKKyAgZXJy OgorCisgICAgaWYgKGtyYjVjcmVkcy5jbGllbnQpCisgICAgICBrcmI1X2ZyZWVfcHJpbmNpcGFs KGtyYjVjb250ZXh0LCBrcmI1Y3JlZHMuY2xpZW50KTsKKyAgICBpZiAoa3JiNWNyZWRzLnNlcnZl cikKKyAgICAgIGtyYjVfZnJlZV9wcmluY2lwYWwoa3JiNWNvbnRleHQsIGtyYjVjcmVkcy5zZXJ2 ZXIpOworICAgIGlmIChrcmI1Y29udGV4dCkKKyAgICAgIGtyYjVfZnJlZV9jb250ZXh0KGtyYjVj b250ZXh0KTsKKyAgICByZXR1cm4ocmMpOworCisjZW5kaWYgLyogQ09NTUVOVCAqLworI2VuZGlm IC8qIEhFSU1EQUwgKi8KKyNlbHNlIC8qIEtSQjUgKi8KKyAgICByZXR1cm4oMCk7CisjZW5kaWYg LyogS1JCNSAqLworfQorCitpbnQKK2NrX2tyYjRfaXNfaW5zdGFsbGVkKCkKK3sKKyNpZmRlZiBL UkI0CisjaWZkZWYgT1MyCisgICAgcmV0dXJuKGhLUkI0XzMyICE9IE5VTEwpOworI2Vsc2UgLyog T1MyICovCisgICAgcmV0dXJuKDEpOworI2VuZGlmIC8qIE9TMiAqLworI2Vsc2UgLyogS1JCNCAq LworICAgIHJldHVybigwKTsKKyNlbmRpZiAvKiBLUkI0ICovCit9CisKK2ludAorY2tfa3JiNF9p c19pbnN0YWxsZWRfYXNfc2VydmVyKCkKK3sKKyAgICBpZiAoICFja19rcmI0X2lzX2luc3RhbGxl ZCgpICkKKyAgICAgICAgcmV0dXJuKDApOworCisjaWZkZWYgS1JCNAorICAgIGlmICggIWs0X2tl eXRhYiApIHsKKyNpZmRlZiBOVAorICAgICAgICBjaGFyIG5hbWVbQ0tNQVhQQVRIXT0iIjsKKyAg ICAgICAgRFdPUkQgbGVuID0gQ0tNQVhQQVRIOworCisgICAgICAgIGxlbiA9IEdldFdpbmRvd3NE aXJlY3RvcnkobmFtZSxsZW4pOworICAgICAgICBpZiAoIGxlbiA+IDAgKQorICAgICAgICAgICAg Y2tzdHJuY2F0KG5hbWUsIi9zcnZ0YWIiLENLTUFYUEFUSCk7CisgICAgICAgIGlmICggbmFtZVsw XSApCisgICAgICAgICAgICBtYWtlc3RyKCZrNF9rZXl0YWIsbmFtZSk7CisjZWxzZSAvKiBOVCAq LworICAgICAgICBtYWtlc3RyKCZrNF9rZXl0YWIsIi9ldGMvc3J2dGFiIik7CisjZW5kaWYgLyog TlQgKi8KKyAgICB9CisKKyAgICBpZiAoICFrNF9rZXl0YWIgKQorICAgICAgICByZXR1cm4oMCk7 CisKKyAgICBpZiAoIHpjaGtpKGs0X2tleXRhYikgPiAwICkKKyAgICAgICAgcmV0dXJuKDEpOwor I2lmZGVmIEtSQjUyNAorICAgIGVsc2UgaWYgKGNrX2tyYjVfaXNfaW5zdGFsbGVkX2FzX3NlcnZl cigpKQorICAgICAgICByZXR1cm4oMSk7CisjZW5kaWYgLyogS1JCNTI0ICovCisgICAgZWxzZQor ICAgICAgICByZXR1cm4oMCk7CisjZW5kaWYgLyogS1JCNCAqLworfQorCitpbnQKK2NrX3NycF9p c19pbnN0YWxsZWRfYXNfc2VydmVyKCkKK3sKKyNpZmRlZiBDS19TUlAKKyNpZmRlZiBTUlBETEwK KyAgICBpZiAoIGhTUlAgPT0gTlVMTCApCisgICAgICAgIHJldHVybigwKTsKKyNlbmRpZiAvKiBT UlBETEwgKi8KKyNpZmRlZiBDT01NRU5UCisgICAgLyogVGhpcyBpcyB0aGUgbmV3IEFQSSBhcyBv ZiAxLjcuNC4gIEhvd2V2ZXIsIGFsbCBpdCBkb2VzCisgICAgICAgaXMgYWxsb2NhdGUgYSBkYXRh IHN0cnVjdHVyZS4gIEl0IGNhbiBuZXZlciBmYWlsLgorICAgICAqLworICAgIHsKKyAgICAgICAg U1JQICogc19zcnAgPSBTUlBfbmV3KFNSUF9SRkMyOTQ1X3NlcnZlcl9tZXRob2QoKSk7CisgICAg ICAgIGlmICggc19zcnAgKSB7CisgICAgICAgICAgICBTUlBfZnJlZShzX3NycCk7CisgICAgICAg ICAgICBzX3NycCA9IE5VTEw7CisgICAgICAgICAgICByZXR1cm4oMSk7CisgICAgICAgIH0KKyAg ICAgICAgcmV0dXJuKDApOworICAgIH0KKyNlbHNlIC8qIENPTU1FTlQgKi8KKyAgICB7CisgICAg ICAgIHN0cnVjdCB0X3B3ICogdHB3ID0gTlVMTDsKKyAgICAgICAgc3RydWN0IHRfY29uZiAqIHRj b25mID0gTlVMTDsKKyAgICAgICAgaWYoKHRjb25mID0gdF9vcGVuY29uZihOVUxMKSkgPT0gTlVM TCkKKyAgICAgICAgICAgIHJldHVybigwKTsKKyAgICAgICAgaWYoKHRwdyA9IHRfb3BlbnB3KE5V TEwpKSA9PSBOVUxMKSB7CisgICAgICAgICAgICB0X2Nsb3NlY29uZih0Y29uZik7CisgICAgICAg ICAgICByZXR1cm4oMCk7CisgICAgICAgIH0KKyAgICAgICAgdF9jbG9zZWNvbmYodGNvbmYpOwor ICAgICAgICB0X2Nsb3NlcHcodHB3KTsKKyAgICAgICAgcmV0dXJuKDEpOworICAgIH0KKyNlbmRp ZiAvKiBDT01NRU5UICovCisjZWxzZSAvKiBTUlAgKi8KKyAgICByZXR1cm4oMCk7CisjZW5kaWYg LyogU1JQICovCit9CisKK2ludAorY2tfc3JwX2lzX2luc3RhbGxlZCgpCit7CisjaWZkZWYgQ0tf U1JQCisjaWZkZWYgU1JQRExMCisgICAgaWYgKCBoU1JQID09IE5VTEwgKQorICAgICAgICByZXR1 cm4oMCk7CisjZW5kaWYgLyogU1JQRExMICovCisgICAgcmV0dXJuKDEpOworI2Vsc2UgLyogQ0tf U1JQICovCisgICAgcmV0dXJuKDApOworI2VuZGlmIC8qIENLX1NSUCAqLworfQorCitpbnQKK2Nr X2tyeXB0b19pc19pbnN0YWxsZWQoKQoreworI2lmZGVmIENLX1NSUAorI2lmZGVmIE9TMgorICAg IGlmICggaExJQktSWVBUTyA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKDApOworI2VuZGlmIC8q IE9TMiAqLworICAgIHJldHVybigxKTsKKyNlbHNlIC8qIENLX1NSUCAqLworICAgIHJldHVybigw KTsKKyNlbmRpZiAvKiBDS19TUlAgKi8KK30KKworaW50Citja19jcnlwdF9pc19pbnN0YWxsZWQo KQoreworI2lmZGVmIENLX0VOQ1JZUFRJT04KKyNpZmRlZiBDUllQVF9ETEwKKyAgICByZXR1cm4o aENSWVBUICE9IE5VTEwpOworI2Vsc2UgLyogQ1JZUFRfRExMICovCisgICAgcmV0dXJuKDEpOwor I2VuZGlmIC8qIENSWVBUX0RMTCAqLworI2Vsc2UgLyogRU5DUllQVElPTiAqLworICAgIHJldHVy bigwKTsKKyNlbmRpZiAvKiBFTkNSWVBUSU9OICovCit9CisKK2ludAorY2tfbnRsbV9pc19pbnN0 YWxsZWQoKQoreworI2lmZGVmIE5UCisgICAgcmV0dXJuKGhTU1BJICE9IE5VTEwpOworI2Vsc2Ug LyogTlQgKi8KKyAgICByZXR1cm4oMCk7CisjZW5kaWYgLyogTlQgKi8KK30KKworaW50Citja190 bl9hdXRoX3ZhbGlkKCkKK3sKKyAgICByZXR1cm4odmFsaWRVc2VyKTsKK30KKworLyogQyBLIF8g SyBSIEIgXyBBIFUgVCBIIF8gSSBOIF8gUCBSIE8gRyBSIEUgUyBTCisgKgorICogSXMgYW4gYXV0 aGVudGljYXRpb24gbmVnb3RpYXRpb24gc3RpbGwgaW4gcHJvZ3Jlc3M/CisgKgorICovCisKK2lu dAorI2lmZGVmIENLX0FOU0lDCitja190bl9hdXRoX2luX3Byb2dyZXNzKHZvaWQpCisjZWxzZQor Y2tfdG5fYXV0aF9pbl9wcm9ncmVzcygpCisjZW5kaWYKK3sKKyAgICBzd2l0Y2ggKGF1dGhlbnRp Y2F0aW9uX3ZlcnNpb24pIHsKKyAgICBjYXNlIEFVVEhUWVBFX0FVVE86CisgICAgICAgIHJldHVy bigxKTsKKyAgICBjYXNlIEFVVEhUWVBFX05VTEw6CisgICAgICAgIHJldHVybigwKTsKKyNpZmRl ZiBLUkI0CisgICAgY2FzZSBBVVRIVFlQRV9LRVJCRVJPU19WNDoKKyAgICAgICAgaWYgKCFhY2Nl cHRfY29tcGxldGUpIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMDAsImNrX2F1dGhfaW5fcHJvZ3Jl c3MoKSBLZXJiZXJvcyA0ICFhY2NlcHRfY29tcGxldGUiLAorICAgICAgICAgICAgICAgICAgICIi LDApOworICAgICAgICAgICAgcmV0dXJuKDEpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYg KChhdXRoX2hvdyAmIEFVVEhfSE9XX01BU0spICYmICFtdXR1YWxfY29tcGxldGUpIHsKKyAgICAg ICAgICAgIGRlYnVnKEYxMDAsImNrX2F1dGhfaW5fcHJvZ3Jlc3MoKSBLZXJiZXJvcyA0ICFtdXR1 YWxfY29tcGxldGUiLAorICAgICAgICAgICAgICAgICAgICIiLDApOworICAgICAgICAgICAgcmV0 dXJuKDEpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybigwKTsK KyNlbmRpZiAvKiBLUkI0ICovCisjaWZkZWYgS1JCNQorICAgIGNhc2UgQVVUSFRZUEVfS0VSQkVS T1NfVjU6CisgICAgICAgIGlmICghYWNjZXB0X2NvbXBsZXRlKSB7CisgICAgICAgICAgICBkZWJ1 ZyhGMTAwLCJja19hdXRoX2luX3Byb2dyZXNzKCkgS2VyYmVyb3MgNSAhYWNjZXB0X2NvbXBsZXRl IiwKKyAgICAgICAgICAgICAgICAgICAiIiwwKTsKKyAgICAgICAgICAgIHJldHVybigxKTsKKyAg ICAgICAgfQorICAgICAgICBlbHNlIGlmICgoYXV0aF9ob3cgJiBBVVRIX0hPV19NQVNLKSAmJiAh bXV0dWFsX2NvbXBsZXRlKSB7CisgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJja19hdXRoX2luX3By b2dyZXNzKCkgS2VyYmVyb3MgNSAhbXV0dWFsX2NvbXBsZXRlIiwKKyAgICAgICAgICAgICAgICAg ICAiIiwwKTsKKyAgICAgICAgICAgIHJldHVybigxKTsKKyAgICAgICAgfQorICAgICAgICBlbHNl CisgICAgICAgICAgICByZXR1cm4oMCk7CisjaWZkZWYgR1NTQVBJX0s1CisgICAgY2FzZSBBVVRI VFlQRV9HU1NBUElfS1JCNToKKyAgICAgICAgaWYgKCFhY2NlcHRfY29tcGxldGUpIHsKKyAgICAg ICAgICAgIGRlYnVnKEYxMDAsCisJCSAgImNrX2F1dGhfaW5fcHJvZ3Jlc3MoKSBHU1NBUEkgS2Vy YmVyb3MgNSAhYWNjZXB0X2NvbXBsZXRlIiwKKwkJICAiIiwKKwkJICAwCisJCSAgKTsKKyAgICAg ICAgICAgIHJldHVybigxKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICgoYXV0aF9ob3cg JiBBVVRIX0hPV19NQVNLKSAmJiAhbXV0dWFsX2NvbXBsZXRlKSB7CisgICAgICAgICAgICBkZWJ1 ZyhGMTAwLAorCQkgICJja19hdXRoX2luX3Byb2dyZXNzKCkgR1NTQVBJIEtlcmJlcm9zIDUgIW11 dHVhbF9jb21wbGV0ZSIsCisJCSAgIiIsCisJCSAgMAorCQkgICk7CisgICAgICAgICAgICByZXR1 cm4oMSk7CisgICAgICAgIH0gZWxzZQorCSAgcmV0dXJuKDApOworICAgICAgICBicmVhazsKKyNl bmRpZiAvKiBHU1NBUElfSzUgKi8KKyNlbmRpZiAvKiBLUkI1ICovCisjaWZkZWYgQ0tfU1JQCisg ICAgY2FzZSBBVVRIVFlQRV9TUlA6CisgICAgICAgIGlmICghYWNjZXB0X2NvbXBsZXRlIHx8IHNy cF93YWl0cmVzcCkKKyAgICAgICAgICAgIHJldHVybigxKTsKKyAgICAgICAgZWxzZQorICAgICAg ICAgICAgcmV0dXJuKDApOworI2VuZGlmIC8qIENLX1NSUCAqLworI2lmZGVmIE5UTE0KKyAgICBj YXNlIEFVVEhUWVBFX05UTE06CisgICAgICAgIGlmICghYWNjZXB0X2NvbXBsZXRlKSB7CisgICAg ICAgICAgICBkZWJ1ZyhGMTAwLCJja19hdXRoX2luX3Byb2dyZXNzKCkgTlRMTSAhYWNjZXB0X2Nv bXBsZXRlIiwKKyAgICAgICAgICAgICAgICAgICAiIiwwKTsKKyAgICAgICAgICAgIHJldHVybigx KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4oMCk7CisjZW5k aWYgLyogTlRMTSAqLworICAgIGNhc2UgQVVUSFRZUEVfU1NMOgorICAgICAgICBpZiAoIWFjY2Vw dF9jb21wbGV0ZSkgeworICAgICAgICAgICAgZGVidWcoRjEwMCwiY2tfYXV0aF9pbl9wcm9ncmVz cygpIFNTTCAhYWNjZXB0X2NvbXBsZXRlIiwKKyAgICAgICAgICAgICAgICAgICAiIiwwKTsKKyAg ICAgICAgICAgIHJldHVybigxKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAg ICByZXR1cm4oMCk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuKDApOworICAgIH0KKyAg ICByZXR1cm4oMCk7Cit9CisKKworLyogIEMgSyBfIEsgUiBCIF8gVCBOIF8gQSBVIFQgSCBfIFIg RSBRIFUgRSBTIFQKKyAqCisgKiAgQnVpbGRzIGEgVGVsbmV0IEF1dGhlbnRpY2F0aW9uIFNlbmQg TmVnb3RpYXRpb24gcHJvdmlkaW5nIHRoZQorICogIGxpc3Qgb2Ygc3VwcG9ydGVkIGF1dGhlbnRp Y2F0aW9uIG1ldGhvZHMuICBUbyBiZSB1c2VkIG9ubHkKKyAqICB3aGVuIGFjY2VwdGluZyBpbmNv bWluZyBjb25uZWN0aW9ucyBhcyBvbmx5IHRoZSBzZXJ2ZXIgKERPKSBzaWRlIG9mIHRoZQorICog IFRlbG5ldCBuZWdvdGlhdGlvbiBpcyBhbGxvd2VkIHRvIHNlbmQgYW4gQVVUSCBTRU5ELgorICoK KyAqICBSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MgYW5kIC0xIG9uIGZhaWx1cmUKKyAqLworCitzdGF0 aWMgdW5zaWduZWQgY2hhciBzdHJfcmVxdWVzdFs2NF0gPSB7IElBQywgU0IsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBURUxPUFRfQVVUSEVOVElDQVRJT04s CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBURUxRVUFMX1NF TkQgfTsKKyNpZmRlZiBHU1NBUElfSzUKK3N0YXRpYyBpbnQKK2NrX3RuX2F1dGhfcmVxdWVzdF9n c3NrcmI1KGludCBpKQoreworICAgIGlmIChja19nc3NhcGlfaXNfaW5zdGFsbGVkKCkgJiYgY2tf a3JiNV9pc19pbnN0YWxsZWRfYXNfc2VydmVyKCkpIHsKKyAgICAgICAgaWYgKCAodG5fYXV0aF9o b3cgPT0gVE5fQVVUSF9IT1dfQU5ZIHx8CisgICAgICAgICAgICAgICB0bl9hdXRoX2hvdyA9PSBU Tl9BVVRIX0hPV19NVVRVQUwpICAmJgorICAgICAgICAgICAgICh0bl9hdXRoX2VuYyA9PSBUTl9B VVRIX0VOQ19BTlkgfHwKKyAgICAgICAgICAgICAgIHRuX2F1dGhfZW5jID09IFROX0FVVEhfRU5D X0VYQ0gpICkgeworICAgICAgICAgICAgc3RyX3JlcXVlc3RbaSsrXSA9IEFVVEhUWVBFX0tFUkJF Uk9TX1Y1OworICAgICAgICAgICAgc3RyX3JlcXVlc3RbaV0gPSBBVVRIX0NMSUVOVF9UT19TRVJW RVIgfCBBVVRIX0hPV19NVVRVQUw7CisgICAgICAgICAgICBzdHJfcmVxdWVzdFtpXSB8PSBBVVRI X0VOQ1JZUFRfQUZURVJfRVhDSEFOR0U7CisKKyAgICAgICAgICAgIGlmICggZGVibG9nIHx8IHRu X2RlYiB8fCBkZWJzZXMgKQorICAgICAgICAgICAgICAgIGNrc3RybmNhdCh0bl9tc2csCisgICAg ICAgICAgICAgICAgIktFUkJFUk9TX1Y1IENMSUVOVF9UT19TRVJWRVJ8TVVUVUFMfEVOQ1JZUFRf QUZURVJfRVhDSEFOR0UgIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVE5fTVNHX0xFTik7 CisgICAgICAgICAgICBpKys7CisgICAgICAgIH0KKyAgICB9Cit9CisjZW5kaWYgLyogR1NTQVBJ X0s1ICovCisKKyNpZmRlZiBLUkI1CitzdGF0aWMgaW50Citja190bl9hdXRoX3JlcXVlc3Rfa3Ji NShpbnQgaSkKK3sKKyAgICBpZiAoY2tfa3JiNV9pc19pbnN0YWxsZWRfYXNfc2VydmVyKCkpIHsK KyNpZmRlZiBDS19TU0wKKyAgICAgICAgaWYgKCBja19zc2xlYXlfaXNfaW5zdGFsbGVkKCkgJiYK KyAgICAgICAgICAgICAodGxzX2FjdGl2ZV9mbGFnIHx8IHNzbF9hY3RpdmVfZmxhZykgJiYKKyAg ICAgICAgICAgICBzc2xfZmluaXNoZWRfbWVzc2FnZXMgKQorICAgICAgICB7CisjaWZkZWYgVVNF X0lOSV9DUkVEX0ZXRAorICAgICAgICAgICAgaWYgKCBmb3J3YXJkX2ZsYWcgJiYKKyAgICAgICAg ICAgICAgICAgKHRuX2F1dGhfaG93ID09IFROX0FVVEhfSE9XX0FOWSB8fAorICAgICAgICAgICAg ICAgICAgIHRuX2F1dGhfaG93ID09IFROX0FVVEhfSE9XX01VVFVBTCkgICYmCisgICAgICAgICAg ICAgICAgICh0bl9hdXRoX2VuYyA9PSBUTl9BVVRIX0VOQ19BTlkgfHwKKyAgICAgICAgICAgICAg ICAgICB0bl9hdXRoX2VuYyA9PSBUTl9BVVRIX0VOQ19URUxPUFQpCisgICAgICAgICAgICAgICAg ICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzdHJfcmVxdWVzdFtpKytdID0gQVVU SFRZUEVfS0VSQkVST1NfVjU7CisgICAgICAgICAgICAgICAgc3RyX3JlcXVlc3RbaV0gPSBBVVRI X0NMSUVOVF9UT19TRVJWRVIgfCBBVVRIX0hPV19NVVRVQUw7CisgICAgICAgICAgICAgICAgc3Ry X3JlcXVlc3RbaV0gfD0gQVVUSF9FTkNSWVBUX1NUQVJUX1RMUzsKKyAgICAgICAgICAgICAgICBz dHJfcmVxdWVzdFtpXSB8PSBJTklfQ1JFRF9GV0RfT047CisKKyAgICAgICAgICAgICAgICBpZiAo IGRlYmxvZyB8fCB0bl9kZWIgfHwgZGVic2VzICkKKyAgICAgICAgICAgICAgICAgICAgY2tzdHJu Y2F0KHRuX21zZywKKyAiS0VSQkVST1NfVjUgQ0xJRU5UX1RPX1NFUlZFUnxNVVRVQUx8RU5DUllQ VF9TVEFSVF9UTFN8SU5JX0NSRURfRldEX09OICIsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgVE5fTVNHX0xFTik7CisgICAgICAgICAgICAgICAgaSsrOworICAgICAgICAgICAgfQor I2VuZGlmIC8qIFVTRV9JTklfQ1JFRF9GV0QgKi8KKyAgICAgICAgICAgIGlmICggKHRuX2F1dGhf aG93ID09IFROX0FVVEhfSE9XX0FOWSB8fAorICAgICAgICAgICAgICAgICAgIHRuX2F1dGhfaG93 ID09IFROX0FVVEhfSE9XX01VVFVBTCkgICYmCisgICAgICAgICAgICAgICAgICh0bl9hdXRoX2Vu YyA9PSBUTl9BVVRIX0VOQ19BTlkgfHwKKyAgICAgICAgICAgICAgICAgICB0bl9hdXRoX2VuYyA9 PSBUTl9BVVRIX0VOQ19URUxPUFQpICkgeworICAgICAgICAgICAgICAgIHN0cl9yZXF1ZXN0W2kr K10gPSBBVVRIVFlQRV9LRVJCRVJPU19WNTsKKyAgICAgICAgICAgICAgICBzdHJfcmVxdWVzdFtp XSA9IEFVVEhfQ0xJRU5UX1RPX1NFUlZFUiB8IEFVVEhfSE9XX01VVFVBTDsKKyAgICAgICAgICAg ICAgICBzdHJfcmVxdWVzdFtpXSB8PSBBVVRIX0VOQ1JZUFRfU1RBUlRfVExTOworCisgICAgICAg ICAgICAgICAgaWYgKCBkZWJsb2cgfHwgdG5fZGViIHx8IGRlYnNlcyApCisgICAgICAgICAgICAg ICAgICAgIGNrc3RybmNhdCh0bl9tc2csCisgICAgICAgICAgICAgICAgICAgICAgIktFUkJFUk9T X1Y1IENMSUVOVF9UT19TRVJWRVJ8TVVUVUFMfEVOQ1JZUFRfU1RBUlRfVExTICIsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBUTl9NU0dfTEVOKTsKKyAgICAgICAgICAgICAgICBpKys7 CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIHRuX2F1dGhfaG93ID09IFROX0FVVEhf SE9XX0FOWSB8fAorICAgICAgICAgICAgICAgICB0bl9hdXRoX2hvdyA9PSBUTl9BVVRIX0hPV19P TkVfV0FZICkgeworICAgICAgICAgICAgICAgIHN0cl9yZXF1ZXN0W2krK10gPSBBVVRIVFlQRV9L RVJCRVJPU19WNTsKKyAgICAgICAgICAgICAgICBzdHJfcmVxdWVzdFtpXSA9IEFVVEhfQ0xJRU5U X1RPX1NFUlZFUiB8IEFVVEhfSE9XX09ORV9XQVk7CisgICAgICAgICAgICAgICAgc3RyX3JlcXVl c3RbaV0gfD0gQVVUSF9FTkNSWVBUX1NUQVJUX1RMUzsKKworICAgICAgICAgICAgICAgIGlmICgg ZGVibG9nIHx8IHRuX2RlYiB8fCBkZWJzZXMgKQorICAgICAgICAgICAgICAgICAgICBja3N0cm5j YXQodG5fbXNnLAorICAgICAgICAgICAgICAgICAgICAiS0VSQkVST1NfVjUgQ0xJRU5UX1RPX1NF UlZFUnxPTkVfV0FZfEVOQ1JZUFRfU1RBUlRfVExTICIsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgVE5fTVNHX0xFTik7CisgICAgICAgICAgICAgICAgaSsrOworICAgICAgICAgICAg fQorICAgICAgICB9CisjaWZkZWYgQ0tfRU5DUllQVElPTgorICAgICAgICBlbHNlCisgICAgICAg IHsKKyNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCisjZW5kaWYgLyogQ0tfU1NMICovCisjaWZk ZWYgQ0tfRU5DUllQVElPTgorI2lmZGVmIFVTRV9JTklfQ1JFRF9GV0QKKyAgICAgICAgICAgIGlm ICggZm9yd2FyZF9mbGFnICYmCisgICAgICAgICAgICAgICAgIFRFTE9QVF9NRV9NT0RFKFRFTE9Q VF9FTkNSWVBUSU9OKSAhPSBUTl9OR19SRiAmJgorICAgICAgICAgICAgICAgICBURUxPUFRfVV9N T0RFKFRFTE9QVF9FTkNSWVBUSU9OKSAhPSBUTl9OR19SRiAmJgorICAgICAgICAgICAgICAgICAo dG5fYXV0aF9ob3cgPT0gVE5fQVVUSF9IT1dfQU5ZIHx8CisgICAgICAgICAgICAgICAgICAgdG5f YXV0aF9ob3cgPT0gVE5fQVVUSF9IT1dfTVVUVUFMKSAgJiYKKyAgICAgICAgICAgICAgICAgKHRu X2F1dGhfZW5jID09IFROX0FVVEhfRU5DX0FOWSB8fAorICAgICAgICAgICAgICAgICAgIHRuX2F1 dGhfZW5jID09IFROX0FVVEhfRU5DX1RFTE9QVCkKKyAgICAgICAgICAgICAgICAgKQorICAgICAg ICAgICAgeworICAgICAgICAgICAgICAgIHN0cl9yZXF1ZXN0W2krK10gPSBBVVRIVFlQRV9LRVJC RVJPU19WNTsKKyAgICAgICAgICAgICAgICBzdHJfcmVxdWVzdFtpXSA9IEFVVEhfQ0xJRU5UX1RP X1NFUlZFUiB8IEFVVEhfSE9XX01VVFVBTDsKKyAgICAgICAgICAgICAgICBzdHJfcmVxdWVzdFtp XSB8PSBBVVRIX0VOQ1JZUFRfVVNJTkdfVEVMT1BUOworICAgICAgICAgICAgICAgIHN0cl9yZXF1 ZXN0W2ldIHw9IElOSV9DUkVEX0ZXRF9PTjsKKworICAgICAgICAgICAgICAgIGlmICggZGVibG9n IHx8IHRuX2RlYiB8fCBkZWJzZXMgKQorICAgICAgICAgICAgICAgICAgICBja3N0cm5jYXQodG5f bXNnLAorICAiS0VSQkVST1NfVjUgQ0xJRU5UX1RPX1NFUlZFUnxNVVRVQUx8RU5DUllQVF9VU0lO R19URUxPUFR8SU5JX0NSRURfRldEX09OICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgVE5fTVNHX0xFTik7CisgICAgICAgICAgICAgICAgaSsrOworICAgICAgICAgICAgfQorI2Vu ZGlmIC8qIFVTRV9JTklfQ1JFRF9GV0QgKi8KKworICAgICAgICAgICAgaWYgKCBURUxPUFRfTUVf TU9ERShURUxPUFRfRU5DUllQVElPTikgIT0gVE5fTkdfUkYgJiYKKyAgICAgICAgICAgICAgICAg VEVMT1BUX1VfTU9ERShURUxPUFRfRU5DUllQVElPTikgIT0gVE5fTkdfUkYgJiYKKyAgICAgICAg ICAgICAgICAgKHRuX2F1dGhfaG93ID09IFROX0FVVEhfSE9XX0FOWSB8fAorICAgICAgICAgICAg ICAgICAgIHRuX2F1dGhfaG93ID09IFROX0FVVEhfSE9XX01VVFVBTCkgICYmCisgICAgICAgICAg ICAgICAgICh0bl9hdXRoX2VuYyA9PSBUTl9BVVRIX0VOQ19BTlkgfHwKKyAgICAgICAgICAgICAg ICAgICB0bl9hdXRoX2VuYyA9PSBUTl9BVVRIX0VOQ19URUxPUFQpICkgeworICAgICAgICAgICAg ICAgIHN0cl9yZXF1ZXN0W2krK10gPSBBVVRIVFlQRV9LRVJCRVJPU19WNTsKKyAgICAgICAgICAg ICAgICBzdHJfcmVxdWVzdFtpXSA9IEFVVEhfQ0xJRU5UX1RPX1NFUlZFUiB8IEFVVEhfSE9XX01V VFVBTDsKKyAgICAgICAgICAgICAgICBzdHJfcmVxdWVzdFtpXSB8PSBBVVRIX0VOQ1JZUFRfVVNJ TkdfVEVMT1BUOworCisgICAgICAgICAgICAgICAgaWYgKCBkZWJsb2cgfHwgdG5fZGViIHx8IGRl YnNlcyApCisgICAgICAgICAgICAgICAgICAgIGNrc3RybmNhdCh0bl9tc2csCisgICAgICAgICAg ICAgICJLRVJCRVJPU19WNSBDTElFTlRfVE9fU0VSVkVSfE1VVFVBTHxFTkNSWVBUX1VTSU5HX1RF TE9QVCAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFROX01TR19MRU4pOworICAg ICAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICAgIH0KKyNpZmRlZiBDS19TU0wKKyAgICAgICAg fQorI2VuZGlmIC8qIENLX1NTTCAqLworI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KKworICAg ICAgICBpZiAoIFRFTE9QVF9NRV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSAhPSBUTl9OR19NVSAm JgorICAgICAgICAgICAgIFRFTE9QVF9VX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pICE9IFROX05H X01VICYmCisgICAgICAgICAgICAgKHRuX2F1dGhfZW5jID09IFROX0FVVEhfRU5DX0FOWSB8fAor ICAgICAgICAgICAgICAgdG5fYXV0aF9lbmMgPT0gVE5fQVVUSF9FTkNfTk9ORSkKKyNpZmRlZiBD S19TU0wKKyAgICAgICAgICAgICAmJiAhKGNrX3NzbGVheV9pc19pbnN0YWxsZWQoKSAmJgorICAg ICAgICAgICAgICAgICAgICh0bHNfYWN0aXZlX2ZsYWcgfHwgc3NsX2FjdGl2ZV9mbGFnKSAmJgor ICAgICAgICAgICAgICAgICAgIHRsc19pc19hbm9uKDApKQorI2VuZGlmIC8qIENLX1NTTCAqLwor ICAgICAgICAgICAgICkKKyAgICAgICAgeworI2lmZGVmIENLX0VOQ1JZUFRJT04KKyAgICAgICAg ICAgIC8qIENhbid0IHBlcmZvcm0gbXV0dWFsIGF1dGhlbnRpY2F0aW9uIHdpdGhvdXQgZW5jcnlw dGlvbiAqLworICAgICAgICAgICAgaWYgKCB0bl9hdXRoX2hvdyA9PSBUTl9BVVRIX0hPV19BTlkg fHwKKyAgICAgICAgICAgICAgICAgdG5fYXV0aF9ob3cgPT0gVE5fQVVUSF9IT1dfTVVUVUFMICkg eworICAgICAgICAgICAgICAgIHN0cl9yZXF1ZXN0W2krK10gPSBBVVRIVFlQRV9LRVJCRVJPU19W NTsKKyAgICAgICAgICAgICAgICBzdHJfcmVxdWVzdFtpXSA9IEFVVEhfQ0xJRU5UX1RPX1NFUlZF UiB8IEFVVEhfSE9XX01VVFVBTDsKKyAgICAgICAgICAgICAgICBzdHJfcmVxdWVzdFtpXSB8PSBB VVRIX0VOQ1JZUFRfT0ZGOworCisgICAgICAgICAgICAgICAgaWYgKCBkZWJsb2cgfHwgdG5fZGVi IHx8IGRlYnNlcyApCisgICAgICAgICAgICAgICAgICAgIGNrc3RybmNhdCh0bl9tc2csIktFUkJF Uk9TX1Y1IENMSUVOVF9UT19TRVJWRVJ8TVVUVUFMICIsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgVE5fTVNHX0xFTik7CisgICAgICAgICAgICAgICAgaSsrOworICAgICAgICAgICAg fQorI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KKyAgICAgICAgICAgIGlmICggdG5fYXV0aF9o b3cgPT0gVE5fQVVUSF9IT1dfQU5ZIHx8CisgICAgICAgICAgICAgICAgIHRuX2F1dGhfaG93ID09 IFROX0FVVEhfSE9XX09ORV9XQVkgKSB7CisgICAgICAgICAgICAgICAgc3RyX3JlcXVlc3RbaSsr XSA9IEFVVEhUWVBFX0tFUkJFUk9TX1Y1OworICAgICAgICAgICAgICAgIHN0cl9yZXF1ZXN0W2ld ID0gQVVUSF9DTElFTlRfVE9fU0VSVkVSIHwgQVVUSF9IT1dfT05FX1dBWTsKKyAgICAgICAgICAg ICAgICBzdHJfcmVxdWVzdFtpXSB8PSBBVVRIX0VOQ1JZUFRfT0ZGOworCisgICAgICAgICAgICAg ICAgaWYgKCBkZWJsb2cgfHwgdG5fZGViIHx8IGRlYnNlcyApCisgICAgICAgICAgICAgICAgICAg IGNrc3RybmNhdCh0bl9tc2csIktFUkJFUk9TX1Y1IENMSUVOVF9UT19TRVJWRVJ8T05FX1dBWSAi LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFROX01TR19MRU4pOworICAgICAgICAg ICAgICAgIGkrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4o aSk7Cit9CisjZW5kaWYgLyogS1JCNSAqLworI2lmZGVmIEtSQjQKK3N0YXRpYyBpbnQKK2NrX3Ru X2F1dGhfcmVxdWVzdF9rcmI0KGludCBpKQoreworICAgIGlmIChja19rcmI0X2lzX2luc3RhbGxl ZF9hc19zZXJ2ZXIoKSkgeworI2lmZGVmIENLX0VOQ1JZUFRJT04KKyAgICAgICAgaWYgKFRFTE9Q VF9NRV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSAhPSBUTl9OR19SRiAmJgorICAgICAgICAgICAg IFRFTE9QVF9VX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pICE9IFROX05HX1JGICYmCisgICAgICAg ICAgICAgKHRuX2F1dGhfaG93ID09IFROX0FVVEhfSE9XX0FOWSB8fAorICAgICAgICAgICAgICAg dG5fYXV0aF9ob3cgPT0gVE5fQVVUSF9IT1dfTVVUVUFMKSAgJiYKKyAgICAgICAgICAgICAodG5f YXV0aF9lbmMgPT0gVE5fQVVUSF9FTkNfQU5ZIHx8CisgICAgICAgICAgICAgICB0bl9hdXRoX2Vu YyA9PSBUTl9BVVRIX0VOQ19URUxPUFQpICkKKyAgICAgICAgeworICAgICAgICAgICAgc3RyX3Jl cXVlc3RbaSsrXSA9IEFVVEhUWVBFX0tFUkJFUk9TX1Y0OworICAgICAgICAgICAgc3RyX3JlcXVl c3RbaV0gPSBBVVRIX0NMSUVOVF9UT19TRVJWRVIgfCBBVVRIX0hPV19NVVRVQUw7CisgICAgICAg ICAgICBzdHJfcmVxdWVzdFtpXSB8PSBBVVRIX0VOQ1JZUFRfVVNJTkdfVEVMT1BUOworCisgICAg ICAgICAgICBpZiAoIGRlYmxvZyB8fCB0bl9kZWIgfHwgZGVic2VzICkKKyAgICAgICAgICAgICAg Y2tzdHJuY2F0KHRuX21zZywiS0VSQkVST1NfVjQgQ0xJRU5UX1RPX1NFUlZFUnxNVVRVQUx8RU5D UllQVCAiLAorICAgICAgICAgICAgICAgICAgICAgICAgVE5fTVNHX0xFTik7CisgICAgICAgICAg ICBpKys7CisgICAgICAgIH0KKyNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCisKKyAgICAgICAg aWYgKFRFTE9QVF9NRV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSAhPSBUTl9OR19NVSAmJgorICAg ICAgICAgICAgIFRFTE9QVF9VX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pICE9IFROX05HX01VICYm CisgICAgICAgICAgICAgKHRuX2F1dGhfZW5jID09IFROX0FVVEhfRU5DX0FOWSB8fAorICAgICAg ICAgICAgICAgdG5fYXV0aF9lbmMgPT0gVE5fQVVUSF9FTkNfTk9ORSkgKQorICAgICAgICB7Cisj aWZkZWYgQ0tfRU5DUllQVElPTgorICAgICAgICAgICAgLyogQ2FuJ3QgcGVyZm9ybSBtdXR1YWwg YXV0aGVudGljYXRpb24gd2l0aG91dCBlbmNyeXB0aW9uICovCisgICAgICAgICAgICBpZiAoIHRu X2F1dGhfaG93ID09IFROX0FVVEhfSE9XX0FOWSB8fAorICAgICAgICAgICAgICAgICB0bl9hdXRo X2hvdyA9PSBUTl9BVVRIX0hPV19NVVRVQUwgKSB7CisgICAgICAgICAgICAgICAgc3RyX3JlcXVl c3RbaSsrXSA9IEFVVEhUWVBFX0tFUkJFUk9TX1Y0OworICAgICAgICAgICAgICAgIHN0cl9yZXF1 ZXN0W2ldID0gQVVUSF9DTElFTlRfVE9fU0VSVkVSIHwgQVVUSF9IT1dfTVVUVUFMOworICAgICAg ICAgICAgICAgIHN0cl9yZXF1ZXN0W2ldIHw9IEFVVEhfRU5DUllQVF9PRkY7CisKKyAgICAgICAg ICAgICAgICBpZiAoIGRlYmxvZyB8fCB0bl9kZWIgfHwgZGVic2VzICkKKyAgICAgICAgICAgICAg ICAgICAgY2tzdHJuY2F0KHRuX21zZywiS0VSQkVST1NfVjQgQ0xJRU5UX1RPX1NFUlZFUnxNVVRV QUwgIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUTl9NU0dfTEVOKTsKKyAgICAg ICAgICAgICAgICBpKys7CisgICAgICAgICAgICB9CisjZW5kaWYgLyogQ0tfRU5DUllQVElPTiAq LworICAgICAgICAgICAgaWYgKCB0bl9hdXRoX2hvdyA9PSBUTl9BVVRIX0hPV19BTlkgfHwKKyAg ICAgICAgICAgICAgICAgdG5fYXV0aF9ob3cgPT0gVE5fQVVUSF9IT1dfT05FX1dBWSApIHsKKyAg ICAgICAgICAgICAgICBzdHJfcmVxdWVzdFtpKytdID0gQVVUSFRZUEVfS0VSQkVST1NfVjQ7Cisg ICAgICAgICAgICAgICAgc3RyX3JlcXVlc3RbaV0gPSBBVVRIX0NMSUVOVF9UT19TRVJWRVIgfCBB VVRIX0hPV19PTkVfV0FZOworICAgICAgICAgICAgICAgIHN0cl9yZXF1ZXN0W2ldIHw9IEFVVEhf RU5DUllQVF9PRkY7CisKKyAgICAgICAgICAgICAgICBpZiAoIGRlYmxvZyB8fCB0bl9kZWIgfHwg ZGVic2VzICkKKyAgICAgICAgICAgICAgICAgICAgY2tzdHJuY2F0KHRuX21zZywiS0VSQkVST1Nf VjQgQ0xJRU5UX1RPX1NFUlZFUnxPTkVfV0FZICIsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgVE5fTVNHX0xFTik7CisgICAgICAgICAgICAgICAgaSsrOworICAgICAgICAgICAgfQor ICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuKGkpOworfQorI2VuZGlmIC8qIEtSQjQgKi8K KworI2lmZGVmIENLX1NSUAorc3RhdGljIGludAorY2tfdG5fYXV0aF9yZXF1ZXN0X3NycChpbnQg aSkKK3sKKyAgICBpZiAoY2tfc3JwX2lzX2luc3RhbGxlZF9hc19zZXJ2ZXIoKSkgeworI2lmbmRl ZiBQUkVfU1JQXzFfNF81CisgICAgICAgIC8qIERvbnQnIGRvIHRoaXMgeWV0LiAgU1JQIHdoZW4g aXQgdXNlcyB0aGUgRU5DUllQVF9VU0lOR19URUxPUFQgICAqLworICAgICAgICAvKiBmbGFnIGl0 IG11c3QgcGVyZm9ybSBhIGNoZWNrc3VtIG9mIHRoZSBhdXRoLXR5cGUtcGFpciBidXQgdGhlcmUg Ki8KKyAgICAgICAgLyogaXMgbm8gbWVjaGFuc2ltIHRvIGRvIHRoYXQgeWV0LiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICovCisjaWZkZWYgQ0tfU1NMCisgICAgICAgIGlmICggY2tf c3NsZWF5X2lzX2luc3RhbGxlZCgpICYmCisgICAgICAgICAgICAgKHRsc19hY3RpdmVfZmxhZyB8 fCBzc2xfYWN0aXZlX2ZsYWcpICYmCisgICAgICAgICAgICAgc3NsX2ZpbmlzaGVkX21lc3NhZ2Vz ICYmCisgICAgICAgICAgICAgICAgICh0bl9hdXRoX2hvdyA9PSBUTl9BVVRIX0hPV19BTlkgfHwK KyAgICAgICAgICAgICAgICAgICB0bl9hdXRoX2hvdyA9PSBUTl9BVVRIX0hPV19PTkVfV0FZKSAg JiYKKyAgICAgICAgICAgICAgICAgKHRuX2F1dGhfZW5jID09IFROX0FVVEhfRU5DX0FOWSB8fAor ICAgICAgICAgICAgICAgICAgIHRuX2F1dGhfZW5jID09IFROX0FVVEhfRU5DX1RFTE9QVCkpCisg ICAgICAgIHsKKyAgICAgICAgICAgIHN0cl9yZXF1ZXN0W2krK10gPSBBVVRIVFlQRV9TUlA7Cisg ICAgICAgICAgICBzdHJfcmVxdWVzdFtpXSA9IEFVVEhfQ0xJRU5UX1RPX1NFUlZFUiB8IEFVVEhf SE9XX09ORV9XQVk7CisgICAgICAgICAgICBzdHJfcmVxdWVzdFtpXSB8PSBBVVRIX0VOQ1JZUFRf U1RBUlRfVExTOworCisgICAgICAgICAgICBpZiAoIGRlYmxvZyB8fCB0bl9kZWIgfHwgZGVic2Vz ICkKKyAgICAgICAgICAgICAgICBja3N0cm5jYXQodG5fbXNnLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgIlNSUCBDTElFTlRfVE9fU0VSVkVSfE9ORV9XQVl8RU5DUllQVF9TVEFSVF9UTFMg IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFROX01TR19MRU4pOworICAgICAgICAgICAg aSsrOworICAgICAgICB9CisjaWZkZWYgQ0tfRU5DUllQVElPTgorICAgICAgICBlbHNlIHsKKyNl bmRpZiAvKiBDS19FTkNSWVBUSU9OICovCisjZW5kaWYgLyogQ0tfU1NMICovCisjaWZkZWYgQ0tf RU5DUllQVElPTgorICAgICAgICAgICAgaWYgKFRFTE9QVF9NRV9NT0RFKFRFTE9QVF9FTkNSWVBU SU9OKSAhPSBUTl9OR19SRiAmJgorICAgICAgICAgICAgICAgICBURUxPUFRfVV9NT0RFKFRFTE9Q VF9FTkNSWVBUSU9OKSAhPSBUTl9OR19SRiAmJgorICAgICAgICAgICAgICAgICAodG5fYXV0aF9o b3cgPT0gVE5fQVVUSF9IT1dfQU5ZIHx8CisgICAgICAgICAgICAgICAgICAgdG5fYXV0aF9ob3cg PT0gVE5fQVVUSF9IT1dfT05FX1dBWSkgICYmCisgICAgICAgICAgICAgICAgICh0bl9hdXRoX2Vu YyA9PSBUTl9BVVRIX0VOQ19BTlkgfHwKKyAgICAgICAgICAgICAgICAgICB0bl9hdXRoX2VuYyA9 PSBUTl9BVVRIX0VOQ19URUxPUFQpCisgICAgICAgICAgICAgICAgICkgeworICAgICAgICAgICAg ICAgIHN0cl9yZXF1ZXN0W2krK10gPSBBVVRIVFlQRV9TUlA7CisgICAgICAgICAgICAgICAgc3Ry X3JlcXVlc3RbaV0gPSBBVVRIX0NMSUVOVF9UT19TRVJWRVIgfCBBVVRIX0hPV19PTkVfV0FZOwor ICAgICAgICAgICAgICAgIHN0cl9yZXF1ZXN0W2ldIHw9IEFVVEhfRU5DUllQVF9VU0lOR19URUxP UFQ7CisKKyAgICAgICAgICAgICAgICBpZiAoIGRlYmxvZyB8fCB0bl9kZWIgfHwgZGVic2VzICkK KyAgICAgICAgICAgICAgICAgICAgY2tzdHJuY2F0KHRuX21zZywKKyAgICAgICAgICAgICAgICAg ICAgIlNSUCBDTElFTlRfVE9fU0VSVkVSfE9ORV9XQVl8RU5DUllQVF9VU0lOR19URUxPUFQgIiwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUTl9NU0dfTEVOKTsKKyAgICAgICAgICAg ICAgICBpKys7CisgICAgICAgICAgICB9CisjaWZkZWYgQ0tfU1NMCisgICAgICAgIH0KKyNlbmRp ZiAvKiBDS19TU0wgKi8KKyNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCisjZW5kaWYgLyogUFJF X1NSUF8xXzRfNSAqLworICAgICAgICBpZiAoVEVMT1BUX01FX01PREUoVEVMT1BUX0VOQ1JZUFRJ T04pICE9IFROX05HX01VICYmCisgICAgICAgICAgICAgVEVMT1BUX1VfTU9ERShURUxPUFRfRU5D UllQVElPTikgIT0gVE5fTkdfTVUgJiYKKyAgICAgICAgICAgICAodG5fYXV0aF9ob3cgPT0gVE5f QVVUSF9IT1dfQU5ZIHx8CisgICAgICAgICAgICAgICB0bl9hdXRoX2hvdyA9PSBUTl9BVVRIX0hP V19NVVRVQUwpICAmJgorICAgICAgICAgICAgICh0bl9hdXRoX2VuYyA9PSBUTl9BVVRIX0VOQ19B TlkgfHwKKyAgICAgICAgICAgICAgIHRuX2F1dGhfZW5jID09IFROX0FVVEhfRU5DX05PTkUpCisj aWZkZWYgQ0tfU1NMCisgICAgICAgICAgICAgJiYgIShja19zc2xlYXlfaXNfaW5zdGFsbGVkKCkg JiYKKyAgICAgICAgICAgICAgICAgICAodGxzX2FjdGl2ZV9mbGFnIHx8IHNzbF9hY3RpdmVfZmxh ZykgJiYKKyAgICAgICAgICAgICAgICAgICB0bHNfaXNfYW5vbigwKSkKKyNlbmRpZiAvKiBDS19T U0wgKi8KKyAgICAgICAgICAgICApCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0cl9yZXF1ZXN0 W2krK10gPSBBVVRIVFlQRV9TUlA7CisgICAgICAgICAgICBzdHJfcmVxdWVzdFtpXSA9IEFVVEhf Q0xJRU5UX1RPX1NFUlZFUiB8IEFVVEhfSE9XX09ORV9XQVk7CisgICAgICAgICAgICBzdHJfcmVx dWVzdFtpXSB8PSBBVVRIX0VOQ1JZUFRfT0ZGOworCisgICAgICAgICAgICBpZiAoIGRlYmxvZyB8 fCB0bl9kZWIgfHwgZGVic2VzICkKKyAgICAgICAgICAgICAgICBja3N0cm5jYXQodG5fbXNnLCJT UlAgQ0xJRU5UX1RPX1NFUlZFUnxPTkVfV0FZICIsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICBUTl9NU0dfTEVOKTsKKyAgICAgICAgICAgIGkrKzsKKyAgICAgICAgfQorICAgIH0KKworICAg IHJldHVybihpKTsKK30KKyNlbmRpZiAvKiBDS19TUlAgKi8KKworI2lmZGVmIENLX1NTTAorc3Rh dGljIGludAorY2tfdG5fYXV0aF9yZXF1ZXN0X3NzbChpbnQgaSkKK3sKKyAgICBpZiAoY2tfc3Ns ZWF5X2lzX2luc3RhbGxlZCgpCisgICAgICAgICAmJiAhdGxzX2FjdGl2ZV9mbGFnICYmICFzc2xf YWN0aXZlX2ZsYWcgJiYgc3NsX2luaXRpYWxpemVkCisgICAgICAgICApIHsKKyAgICAgICAgaWYg KFRFTE9QVF9NRV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSAhPSBUTl9OR19NVSAmJgorICAgICAg ICAgICAgIFRFTE9QVF9VX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pICE9IFROX05HX01VICYmCisg ICAgICAgICAgICAgKHRuX2F1dGhfaG93ID09IFROX0FVVEhfSE9XX0FOWSB8fAorICAgICAgICAg ICAgICAgdG5fYXV0aF9ob3cgPT0gVE5fQVVUSF9IT1dfT05FX1dBWSkgICYmCisgICAgICAgICAg ICAgKHRuX2F1dGhfZW5jID09IFROX0FVVEhfRU5DX0FOWSB8fAorICAgICAgICAgICAgICAgdG5f YXV0aF9lbmMgPT0gVE5fQVVUSF9FTkNfTk9ORSkgKQorICAgICAgICB7CisgICAgICAgICAgICBz dHJfcmVxdWVzdFtpKytdID0gQVVUSFRZUEVfU1NMOworICAgICAgICAgICAgc3RyX3JlcXVlc3Rb aV0gPSBBVVRIX0NMSUVOVF9UT19TRVJWRVIgfCBBVVRIX0hPV19PTkVfV0FZOworICAgICAgICAg ICAgc3RyX3JlcXVlc3RbaV0gfD0gQVVUSF9FTkNSWVBUX09GRjsKKyAgICAgICAgICAgIGlmICgg ZGVibG9nIHx8IHRuX2RlYiB8fCBkZWJzZXMgKQorICAgICAgICAgICAgICAgIGNrc3RybmNhdCh0 bl9tc2csIlNTTCBDTElFTlRfVE9fU0VSVkVSfE9ORV9XQVkgIiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIFROX01TR19MRU4pOworICAgICAgICAgICAgaSsrOworICAgICAgICB9CisgICAg fQorCisgICAgcmV0dXJuKGkpOworfQorI2VuZGlmIC8qIENLX1NTTCAqLworI2lmZGVmIE5UTE0K K3N0YXRpYyBpbnQKK2NrX3RuX2F1dGhfcmVxdWVzdF9udGxtKGludCBpKQoreworICAgIC8qIE1p Y3Jvc29mdCdzIFRlbG5ldCBjbGllbnQgd29uJ3QgcGVyZm9ybSBhdXRoZW50aWNhdGlvbiBpZiAq LworICAgIC8qIE5UTE0gaXMgbm90IGZpcnN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAqLworICAgIGlmICggY2tfbnRsbV9pc192YWxpZCgxKSApIHsKKyAgICAgICAg aWYgKFRFTE9QVF9NRV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSAhPSBUTl9OR19NVSAmJgorICAg ICAgICAgICAgIFRFTE9QVF9VX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pICE9IFROX05HX01VICYm CisgICAgICAgICAgICAgKHRuX2F1dGhfaG93ID09IFROX0FVVEhfSE9XX0FOWSB8fAorICAgICAg ICAgICAgICAgdG5fYXV0aF9ob3cgPT0gVE5fQVVUSF9IT1dfT05FX1dBWSkgICYmCisgICAgICAg ICAgICAgKHRuX2F1dGhfZW5jID09IFROX0FVVEhfRU5DX0FOWSB8fAorICAgICAgICAgICAgICAg dG5fYXV0aF9lbmMgPT0gVE5fQVVUSF9FTkNfTk9ORSkgKQorICAgICAgICB7CisgICAgICAgICAg ICBzdHJfcmVxdWVzdFtpKytdID0gQVVUSFRZUEVfTlRMTTsKKyAgICAgICAgICAgIHN0cl9yZXF1 ZXN0W2ldID0gQVVUSF9DTElFTlRfVE9fU0VSVkVSIHwgQVVUSF9IT1dfT05FX1dBWTsKKyAgICAg ICAgICAgIHN0cl9yZXF1ZXN0W2ldIHw9IEFVVEhfRU5DUllQVF9PRkY7CisgICAgICAgICAgICBp ZiAoIGRlYmxvZyB8fCB0bl9kZWIgfHwgZGVic2VzICkKKyAgICAgICAgICAgICAgICBja3N0cm5j YXQodG5fbXNnLCJOVExNIENMSUVOVF9UT19TRVJWRVJ8T05FX1dBWSAiLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgVE5fTVNHX0xFTik7CisgICAgICAgICAgICBpKys7CisgICAgICAgIH0K KyAgICB9CisKKyAgICByZXR1cm4oaSk7Cit9CisjZW5kaWYgLyogTlRMTSAqLworaW50CisjaWZk ZWYgQ0tfQU5TSUMKK2NrX3RuX2F1dGhfcmVxdWVzdCh2b2lkKQorI2Vsc2UKK2NrX3RuX2F1dGhf cmVxdWVzdCgpCisjZW5kaWYKK3sKKyAgICBpbnQgaSA9IDQsIHJjID0gLTE7CisKKyNpZmRlZiBD S19TU0wKKyAgICBpZiAoVEVMT1BUX1NCKFRFTE9QVF9TVEFSVF9UTFMpLnN0YXJ0X3Rscy5tZV9m b2xsb3dzKSB7CisgICAgICAgIHJldHVybigwKTsKKyAgICB9CisjZW5kaWYgLyogQ0tfU1NMICov CisKKyAgICBpZiAoIGRlYmxvZyB8fCB0bl9kZWIgfHwgZGVic2VzICkKKyAgICAgICAgc3RyY3B5 KHRuX21zZywiVEVMTkVUIFNFTlQgU0IgQVVUSEVOVElDQVRJT04gU0VORCAiKTsKKworICAgIC8q IENyZWF0ZSBhIGxpc3Qgb2YgYWNjZXB0YWJsZSBBdXRoZW50aWNhdGlvbiB0eXBlcyB0byBzZW5k IHRvICovCisgICAgLyogdGhlIGNsaWVudCBhbmQgbGV0IGl0IGNob29zZSBmaW5kIG9uZSB0aGF0 IHdlIHN1cHBvcnQgICAgICAgKi8KKworICAgIC8qIEZvciB0aG9zZSBhdXRoZW50aWNhdGlvbiBt ZXRob2RzIHRoYXQgc3VwcG9ydCBFbmNyeXB0aW9uIG9yICovCisgICAgLyogQ3JlZGVudGlhbHMg Rm9yd2FyZGluZyB3ZSBtdXN0IHNlbmQgYWxsIG9mIHRoZSBhcHByb3ByaWF0ZSAgKi8KKyAgICAv KiBjb21iaW5hdGlvbnMgYmFzZWQgdXBvbiB0aGUgc3RhdGUgb2YgICAgICAgICAgICAgICAgICAg ICAgICAqLworICAgIC8qIFRFTE9QVF94X01PREUoVEVMT1BUX0VOQ1JZUFRJT04pIGFuZCBmb3J3 YXJkX2ZsYWcuICAgICAgICAgICovCisKKyAgICBpZiAoIGF1dGhfdHlwZV91c2VyWzBdID09IEFV VEhUWVBFX0FVVE8gKSB7CisjaWZkZWYgR1NTQVBJX0s1CisgICAgICAgIGkgPSBja190bl9hdXRo X3JlcXVlc3RfZ3Nza3JiNShpKTsKKyNlbmRpZiAvKiBHU1NBUElfSzUgKi8KKyNpZmRlZiBLUkI1 CisgICAgICAgIGkgPSBja190bl9hdXRoX3JlcXVlc3Rfa3JiNShpKTsKKyNlbmRpZiAvKiBLUkI1 ICovCisjaWZkZWYgS1JCNAorICAgICAgICBpID0gY2tfdG5fYXV0aF9yZXF1ZXN0X2tyYjQoaSk7 CisjZW5kaWYgLyogS1JCNCAqLworI2lmZGVmIENLX1NSUAorICAgICAgICBpID0gY2tfdG5fYXV0 aF9yZXF1ZXN0X3NycChpKTsKKyNlbmRpZiAvKiBTUlAgKi8KKyNpZmRlZiBDS19TU0wKKyAgICAg ICAgaSA9IGNrX3RuX2F1dGhfcmVxdWVzdF9zc2woaSk7CisjZW5kaWYgLyogQ0tfU1NMICovCisj aWZkZWYgTlRMTQorICAgICAgICBpID0gY2tfdG5fYXV0aF9yZXF1ZXN0X250bG0oaSk7CisjZW5k aWYgLyogTlRMTSAqLworICAgIH0gZWxzZSB7CisgICAgICAgIGludCBqOworICAgICAgICBmb3Ig KCBqPTA7CisgICAgICAgICAgICAgIGo8QVVUSFRZUExTVFNaICYmIGF1dGhfdHlwZV91c2VyW2pd ICE9IEFVVEhUWVBFX05VTEw7CisgICAgICAgICAgICAgIGorKykgeworI2lmZGVmIE5UTE0KKyAg ICAgICAgICAgIGlmIChhdXRoX3R5cGVfdXNlcltqXSA9PSBBVVRIVFlQRV9OVExNKQorICAgICAg ICAgICAgICAgIGkgPSBja190bl9hdXRoX3JlcXVlc3RfbnRsbShpKTsKKyNlbmRpZiAvKiBOVExN ICovCisjaWZkZWYgQ0tfU1NMCisgICAgICAgICAgICBpZiAoIGF1dGhfdHlwZV91c2VyW2pdID09 IEFVVEhUWVBFX1NTTCApCisgICAgICAgICAgICAgICAgaSA9IGNrX3RuX2F1dGhfcmVxdWVzdF9z c2woaSk7CisjZW5kaWYgLyogQ0tfU1NMICovCisjaWZkZWYgQ0tfU1JQCisgICAgICAgICAgICBp ZiAoIGF1dGhfdHlwZV91c2VyW2pdID09IEFVVEhUWVBFX1NSUCApCisgICAgICAgICAgICAgICAg aSA9IGNrX3RuX2F1dGhfcmVxdWVzdF9zcnAoaSk7CisjZW5kaWYgLyogU1JQICovCisjaWZkZWYg R1NTQVBJX0s1CisgICAgICAgICAgICBpZiAoIGF1dGhfdHlwZV91c2VyW2pdID09IEFVVEhUWVBF X0dTU0FQSV9LUkI1ICkKKyAgICAgICAgICAgICAgICBpID0gY2tfdG5fYXV0aF9yZXF1ZXN0X2dz c2tyYjUoaSk7CisjZW5kaWYgLyogR1NTQVBJX0s1ICovCisjaWZkZWYgS1JCNQorICAgICAgICAg ICAgaWYgKCBhdXRoX3R5cGVfdXNlcltqXSA9PSBBVVRIVFlQRV9LRVJCRVJPU19WNSApCisgICAg ICAgICAgICAgICAgaSA9IGNrX3RuX2F1dGhfcmVxdWVzdF9rcmI1KGkpOworI2VuZGlmIC8qIEtS QjUgKi8KKyNpZmRlZiBLUkI0CisgICAgICAgICAgICBpZiAoIGF1dGhfdHlwZV91c2VyW2pdID09 IEFVVEhUWVBFX0tFUkJFUk9TX1Y0ICkKKyAgICAgICAgICAgICAgICBpID0gY2tfdG5fYXV0aF9y ZXF1ZXN0X2tyYjQoaSk7CisjZW5kaWYgLyogS1JCNCAqLworICAgICAgICB9CisgICAgfQorCisg ICAgc3RyX3JlcXVlc3RbaSsrXSA9IElBQzsKKyAgICBzdHJfcmVxdWVzdFtpKytdID0gU0U7Cisg ICAgaWYgKCBkZWJsb2cgfHwgdG5fZGViIHx8IGRlYnNlcyApIHsKKyAgICAgICAgY2tzdHJuY2F0 KHRuX21zZywiSUFDIFNFIixUTl9NU0dfTEVOKTsKKyAgICAgICAgZGVidWcoRjEwMCx0bl9tc2cs IiIsMCk7CisgICAgICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKSB0bl9kZWJ1Zyh0bl9tc2cpOwor ICAgIH0KKworICAgIC8qIFNlbmQgZGF0YSAqLworI2lmZGVmIE9TMgorICAgIFJlcXVlc3RUZWxu ZXRNdXRleCggU0VNX0lOREVGSU5JVEVfV0FJVCApOworI2VuZGlmCisgICAgcmMgPSB0dG9sKChD SEFSICopc3RyX3JlcXVlc3QsIGkpOworI2lmZGVmIE9TMgorICAgIFJlbGVhc2VUZWxuZXRNdXRl eCgpOworI2VuZGlmCisgICAgaWYgKCByYyA9PSBpICkKKyAgICAgICAgcmV0dXJuKDApOworICAg IGVsc2UKKyAgICAgICAgcmV0dXJuKC0xKTsKK30KKworI2lmZGVmIENLX0VOQ1JZUFRJT04KK1ZP SUQKK2NrX3RuX2VuY19zdGFydCgpCit7CisgICAgaWYgKCFURUxPUFRfTUUoVEVMT1BUX0VOQ1JZ UFRJT04pICYmICFURUxPUFRfVShURUxPUFRfRU5DUllQVElPTikpCisgICAgICAgIHJldHVybjsK KyAgICBpZiAoIVRFTE9QVF9TQihURUxPUFRfRU5DUllQVElPTikuZW5jcnlwdC5zdG9wICYmCisg ICAgICAgICAoIWVuY3J5cHRfaXNfZGVjcnlwdGluZygpIHx8ICFlbmNyeXB0X2lzX2VuY3J5cHRp bmcoKSkpIHsKKyAgICAgICAgZGVidWcoRjExMCwiY2tfdG5fZW5jX3N0YXJ0Iiwibm90aGluZyB0 byBkbyIsMCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgVEVMT1BUX1NCKFRFTE9QVF9F TkNSWVBUSU9OKS5lbmNyeXB0LnN0b3AgPSAwOworICAgIGlmIChURUxPUFRfTUUoVEVMT1BUX0VO Q1JZUFRJT04pICYmICFlbmNyeXB0X2lzX2VuY3J5cHRpbmcoKSkgeworICAgICAgICBkZWJ1ZyhG MTEwLCJja190bl9lbmNfc3RhcnQiLCJlbmNyeXB0X3JlcXVlc3Rfc3RhcnQiLDApOworICAgICAg ICBlbmNyeXB0X3JlcXVlc3Rfc3RhcnQoKTsKKyAgICB9CisgICAgaWYgKFRFTE9QVF9VKFRFTE9Q VF9FTkNSWVBUSU9OKSAmJiAhZW5jcnlwdF9pc19kZWNyeXB0aW5nKCkpIHsKKyAgICAgICAgZGVi dWcoRjExMCwiY2tfdG5fZW5jX3N0YXJ0IiwiZW5jcnlwdF9zZW5kX3JlcXVlc3Rfc3RhcnQiLDAp OworICAgICAgICBlbmNyeXB0X3NlbmRfcmVxdWVzdF9zdGFydCgpOworICAgIH0KKyAgICB0bl93 YWl0KCJlbmNyeXB0IHN0YXJ0Iik7CisgICAgdG5fcHVzaCgpOworfQorCitWT0lECitja190bl9l bmNfc3RvcCgpCit7CisgICAgaWYgKCFURUxPUFRfTUUoVEVMT1BUX0VOQ1JZUFRJT04pICYmICFU RUxPUFRfVShURUxPUFRfRU5DUllQVElPTikpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoVEVM T1BUX1NCKFRFTE9QVF9FTkNSWVBUSU9OKS5lbmNyeXB0LnN0b3AgfHwKKyAgICAgICAgICEoZW5j cnlwdF9pc19kZWNyeXB0aW5nKCkgfHwgZW5jcnlwdF9pc19lbmNyeXB0aW5nKCkpKSB7CisgICAg ICAgIGRlYnVnKEYxMTAsImNrX3RuX2VuY19zdG9wIiwibm90aGluZyB0byBkbyIsMCk7CisgICAg ICByZXR1cm47CisgICAgfQorICAgIFRFTE9QVF9TQihURUxPUFRfRU5DUllQVElPTikuZW5jcnlw dC5zdG9wID0gMTsKKyAgICBpZiAoVEVMT1BUX1UoVEVMT1BUX0VOQ1JZUFRJT04pICYmIGVuY3J5 cHRfaXNfZGVjcnlwdGluZygpKSB7CisgICAgICAgIGRlYnVnKEYxMTAsImNrX3RuX2VuY19zdG9w IiwiZW5jcnlwdF9zZW5kX3JlcXVlc3RfZW5kIiwwKTsKKyAgICAgICAgZW5jcnlwdF9zZW5kX3Jl cXVlc3RfZW5kKCk7CisgICAgfQorICAgIGlmIChURUxPUFRfTUUoVEVMT1BUX0VOQ1JZUFRJT04p ICYmIGVuY3J5cHRfaXNfZW5jcnlwdGluZygpKSB7CisgICAgICAgIGRlYnVnKEYxMTAsImNrX3Ru X2VuY19zdG9wIiwiZW5jcnlwdF9zZW5kX2VuZCIsMCk7CisgICAgICAgIGVuY3J5cHRfc2VuZF9l bmQoKTsKKyAgICB9CisgICAgdG5fd2FpdCgiZW5jcnlwdCBzdG9wIik7CisgICAgdG5fcHVzaCgp OworfQorI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KKworLyogIEMgSyBfIEsgUiBCIF8gVCBO IF8gUyBCIF8gQSBVIFQgSAorICogIEFuIGludGVyZmFjZSBiZXR3ZWVuIHRoZSBDLUtlcm1pdCBU ZWxuZXQgQ29tbWFuZCBQYXJzZXIgYW5kIHRoZSBBdXRoZW50LQorICogIGljYXRpb24gb3B0aW9u IHBhcnNlciBpbXBsZW1lbnRlZCBpbiB0aGUgS2VyYmVyb3MgVGVsbmV0IGNsaWVudC4KKyAqCisg KiAgc2IgICAtIHRoZSBzdWJuZWdvdGlhdGlvbiBhcyBjYWxjdWxhdGVkIGluIGNrY25ldC5jCisg KiAgbGVuICAtIHRoZSBsZW5ndGggb2YgdGhlIGJ1ZmZlcgorICoKKyAqICBSZXR1cm5zOiAwIG9u IHN1Y2Nlc3MgYW5kIC0xIG9uIGZhaWx1cmUKKyAqLworCitpbnQKKyNpZmRlZiBDS19BTlNJQwor Y2tfdG5fc2JfYXV0aChjaGFyICogc2IsIGludCBsZW4pCisjZWxzZSAvKiBDS19BTlNJQyAqLwor Y2tfdG5fc2JfYXV0aChzYixsZW4pIGNoYXIgKiBzYjsgaW50IGxlbjsKKyNlbmRpZiAvKiBDS19B TlNJQyAqLworeworICAgIC8qIGF1dGhfcGFyc2UoKSBhc3N1bWVzIHRoYXQgc2Igc3RhcnRzIGF0 IHBvcyAxIG5vdCAwIGFzIGluIGNrY25ldC5jICovCisgICAgLyogYW5kIGl0IHdhbnRzIHRoZSBs ZW5ndGggdG8gZXhjbHVkZSB0aGUgSUFDIFNFIGJ5dGVzICAgICAgICAgICAgICAgKi8KKyAgICBD SEFSICogYnVmOworICAgIGludCByYyA9IC0xOworCisgICAgYnVmID0gbWFsbG9jKGxlbi0xKTsK KyAgICBpZiAoICFidWYgKSByZXR1cm4oLTEpOworCisgICAgYnVmWzBdID0gU0I7CisgICAgbWVt Y3B5KCAmYnVmWzFdLCBzYiwgbGVuLTIgKTsKKyAgICByYyA9IGF1dGhfcGFyc2UoYnVmLGxlbi0x KTsKKyAgICBmcmVlKGJ1Zik7CisgICAgZGVidWcoRjExMSwiY2tfdG5fc2JfYXV0aCIsInJjIixy Yyk7CisgICAgaWYgKHJjID09IEFVVEhfRkFJTFVSRSkgeworICAgICAgICBhdXRoZW50aWNhdGlv bl92ZXJzaW9uID0gQVVUSFRZUEVfTlVMTDsKKyNpZm5kZWYgTk9MT0NBTAorI2lmZGVmIE9TMgor ICAgICAgICBpcGFkbDI1KCk7CisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogTk9MT0NBTCAq LworICAgICAgICByZXR1cm4oLTEpOworICAgIH0KKyNpZm5kZWYgTk9MT0NBTAorI2lmZGVmIE9T MgorICAgIGlwYWRsMjUoKTsKKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBOT0xPQ0FMICov CisgICAgcmV0dXJuKDApOworfQorCisvKiAgQyBLIF8gSyBSIEIgXyBUIE4gXyBTIEIgXyBFIE4g QyBSIFkgUCBUCisgKiAgQW4gaW50ZXJmYWNlIGJldHdlZW4gdGhlIEMtS2VybWl0IFRlbG5ldCBD b21tYW5kIFBhcnNlciBhbmQgdGhlIEVuY3J5cHRpb24KKyAqICBvcHRpb24gcGFyc2VyIGltcGxl bWVudGVkIGluIHRoZSBLZXJiZXJvcyBUZWxuZXQgY2xpZW50LgorICoKKyAqICBzYiAgIC0gdGhl IHN1Ym5lZ290aWF0aW9uIGFzIGNhbGN1bGF0ZWQgaW4gY2tjbmV0LmMKKyAqICBsZW4gIC0gdGhl IGxlbmd0aCBvZiB0aGUgYnVmZmVyCisgKgorICogIFJldHVybnM6IEFsd2F5cyByZXR1cm5zIDAg Zm9yIHN1Y2Nlc3Mgc2luY2UgZW5jcnlwdF9wYXJzZSBpcyB2b2lkCisgKi8KKworCitpbnQKKyNp ZmRlZiBDS19BTlNJQworY2tfdG5fc2JfZW5jcnlwdChjaGFyICogc2IsIGludCBsZW4pCisjZWxz ZQorY2tfdG5fc2JfZW5jcnlwdChzYixsZW4pIGNoYXIgKiBzYjsgaW50IGxlbjsKKyNlbmRpZiAv KiBDS19BTlNJQyAqLworeworICAgIC8qIGVuY3J5cHRfcGFyc2UoKSBhc3N1bWVzIHRoYXQgc2Ig c3RhcnRzIGF0IHBvcyAxIG5vdCAwIGFzIGluIGNrY25ldC5jICovCisgICAgLyogYW5kIGl0IHdh bnRzIHRoZSBsZW5ndGggdG8gZXhjbHVkZSB0aGUgSUFDIFNFIGJ5dGVzICAgICAgICAgICAgICAg ICAgKi8KKyNpZmRlZiBDS19FTkNSWVBUSU9OCisgICAgY2hhciAqIGJ1ZjsKKyAgICBpbnQgcmMg PSAtMTsKKworICAgIGJ1ZiA9IG1hbGxvYyhsZW4tMSk7CisgICAgaWYgKCAhYnVmICkgcmV0dXJu KC0xKTsKKworICAgIGJ1ZlswXSA9IFNCOworICAgIG1lbWNweSggJmJ1ZlsxXSwgc2IsIGxlbi0y ICk7CisgICAgcmMgPSBlbmNyeXB0X3BhcnNlKChDSEFSICopYnVmLGxlbi0xKTsKKworICAgIGlm IChyYyA8IDApIHsKKyAgICAgICAgZnJlZShidWYpOworICAgICAgICByZXR1cm4oLTEpOworICAg IH0KKworICAgIC8qIFRoaXMgaXMgYSBoYWNrLiAgSXQgZG9lcyBub3QgYmVsb25nIGhlcmUgYnV0 IHNob3VsZCByZWFsbHkgYmUgaW4gKi8KKyAgICAvKiBlbmNyeXB0X3BhcnNlKCkgYnV0IGluIEs5 NSB0aGUgZW5jcnlwdF9wYXJzZSgpIHJvdXRpbmUgZG9lcyBub3QgICovCisgICAgLyogaGF2ZSBh Y2Nlc3MgdG8gdGhlIHRlbG9wdF9zdGF0ZXMgYXJyYXkuICAgICAgICAgICAgICAgICAgICAgICAg ICAqLworICAgIGlmICggYnVmWzFdID09IEVOQ1JZUFRfUkVRRU5EICkKKyAgICAgICAgVEVMT1BU X1NCKFRFTE9QVF9FTkNSWVBUSU9OKS5lbmNyeXB0LnN0b3AgPSAxOworICAgIGVsc2UgaWYgKCBi dWZbMV0gPT0gRU5DUllQVF9SRVFTVEFSVCApCisgICAgICAgIFRFTE9QVF9TQihURUxPUFRfRU5D UllQVElPTikuZW5jcnlwdC5zdG9wID0gMDsKKyNpZm5kZWYgTk9MT0NBTAorI2lmZGVmIE9TMgor ICAgIGlwYWRsMjUoKTsKKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBOT0xPQ0FMICovCisg ICAgZnJlZShidWYpOworI2VuZGlmIC8qIEVOQ1JZUFRJT04gKi8KKyAgICByZXR1cm4oMCk7Cit9 CisKKworLyogIEMgSyBfIEsgUiBCIF8gRSBOIEMgUiBZIFAgVCBJIE4gRworICogIFJldHVybnMg MSBpZiB3ZSBhcmUgZW5jcnlwdGluZyBhbmQgMCBpZiB3ZSBhcmUgbm90CisgKi8KKworaW50Cisj aWZkZWYgQ0tfQU5TSUMKK2NrX3RuX2VuY3J5cHRpbmcoVk9JRCkKKyNlbHNlIC8qIENLX0FOU0lD ICovCitja190bl9lbmNyeXB0aW5nKCkKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworI2lmZGVm IENLX0VOQ1JZUFRJT04KKyAgICBpZiAoIGdfa3N0cmVhbSA9PSBOVUxMICkKKyAgICAgICAgcmV0 dXJuKDApOworICAgIGlmICggZ19rc3RyZWFtLT5lbmNyeXB0ICYmIGVuY3J5cHRfaXNfZW5jcnlw dGluZygpKSB7CisgICAgICAgIGRlYnVnKEYxMTEsImNrX3RuX2VuY3J5cHRpbmciLCJlbmNyeXB0 aW5nIiwKKyAgICAgICAgICAgICAgIGdfa3N0cmVhbS0+ZW5jcnlwdF90eXBlKTsKKyAgICAgICAg cmV0dXJuKGdfa3N0cmVhbS0+ZW5jcnlwdF90eXBlKTsKKyAgICB9CisjZW5kaWYgLyogQ0tfRU5D UllQVElPTiAqLworICAgIGRlYnVnKEYxMTAsImNrX3RuX2VuY3J5cHRpbmciLCJub3QgZW5jcnlw dGluZyIsMCk7CisgICAgcmV0dXJuKDApOworfQorCisvKiAgQyBLIF8gSyBSIEIgXyBEIEUgQyBS IFkgUCBUIEkgTiBHCisgKiAgUmV0dXJucyAxIGlmIHdlIGFyZSBkZWNyeXB0aW5nIGFuZCAwIGlm IHdlIGFyZSBub3QKKyAqLworCitpbnQKKyNpZmRlZiBDS19BTlNJQworY2tfdG5fZGVjcnlwdGlu ZyhWT0lEKQorI2Vsc2UKK2NrX3RuX2RlY3J5cHRpbmcoKQorI2VuZGlmIC8qIENLX0FOU0lDICov Cit7CisjaWZkZWYgQ0tfRU5DUllQVElPTgorICAgIGlmICggZ19rc3RyZWFtID09IE5VTEwgKQor ICAgICAgICByZXR1cm4oMCk7CisgICAgaWYgKCBnX2tzdHJlYW0tPmRlY3J5cHQgJiYgZW5jcnlw dF9pc19kZWNyeXB0aW5nKCkpIHsKKyAgICAgICAgZGVidWcoRjExMSwiY2tfdG5fZGVjcnlwdGlu ZyIsImRlY3J5cHRpbmciLAorICAgICAgICAgICAgICAgZ19rc3RyZWFtLT5kZWNyeXB0X3R5cGUp OworICAgICAgICByZXR1cm4oZ19rc3RyZWFtLT5kZWNyeXB0X3R5cGUpOworICAgIH0KKyNlbmRp ZiAvKiBDS19FTkNSWVBUSU9OICovCisgICAgZGVidWcoRjExMCwiY2tfdG5fZGVjcnlwdGluZyIs Im5vdCBkZWNyeXB0aW5nIiwwKTsKKyAgICByZXR1cm4oMCk7Cit9CisKKy8qICBDIEsgXyBLIFIg QiBfIEEgVSBUIEggRSBOIFQgSSBDIEEgVCBFIEQKKyAqICBSZXR1cm5zIHRoZSBhdXRoZW50aWNh dGlvbiB0eXBlOiBBVVRIVFlQRV9OVUxMLCBBVVRIVFlQRV9LRVJCRVJPUzQsCisgKiAgb3IgQVVU SFRZUEVfS0VSQkVST1M1LCBBVVRIVFlQRV9TUlAsIC4uLiAoc2VlIGNrY3RlbC5oKQorICovCisK K2ludAorI2lmZGVmIENLX0FOU0lDCitja190bl9hdXRoZW50aWNhdGVkKFZPSUQpCisjZWxzZQor Y2tfdG5fYXV0aGVudGljYXRlZCgpCisjZW5kaWYKK3sKKyAgICByZXR1cm4oYXV0aGVudGljYXRp b25fdmVyc2lvbik7Cit9CisKKy8qICBDIEsgXyBLIFIgQiBfIEUgTiBDIFIgWSBQIFQKKyAqICBl bmNyeXB0cyBuIGNoYXJhY3RlcnMgaW4gcyBpZiB3ZSBhcmUgZW5jcnlwdGluZworICovCisKK1ZP SUQKKyNpZmRlZiBDS19BTlNJQworY2tfdG5fZW5jcnlwdCggY2hhciAqIHMsIGludCBuICkKKyNl bHNlCitja190bl9lbmNyeXB0KCBzLG4gKSBjaGFyICogczsgaW50IG47CisjZW5kaWYKK3sKKyNp ZmRlZiBDS19FTkNSWVBUSU9OCisgICAgc3RydWN0IGtzdHJlYW1fZGF0YV9ibG9jayBpOworCisg ICAgaWYgKGdfa3N0cmVhbS0+ZW5jcnlwdCAmJiBlbmNyeXB0X2lzX2VuY3J5cHRpbmcoKSkgewor I2lmZGVmIERFQlVHCisgICAgICBja2hleGR1bXAoImZyb20gcGxhaW50ZXh0Iiwgcywgbik7Cisj ZW5kaWYKKyAgICAgICAgaS5wdHIgPSBzOworICAgICAgICBpLmxlbmd0aCA9IG47CisgICAgICAg IGdfa3N0cmVhbS0+ZW5jcnlwdCgmaSwgTlVMTCk7CisjaWZkZWYgREVCVUcKKyAgICAgICAgY2to ZXhkdW1wKCJ0byBjeXBoZXJ0ZXh0Iiwgcywgbik7CisjZW5kaWYKKyAgICB9CisgICAgZWxzZSBk ZWJ1ZyhGMTAxLCJja190bl9lbmNyeXB0IG5vdCBlbmNyeXB0aW5nIiwiIixuKTsKKyNlbmRpZiAv KiBFTkNSWVBUSU9OICovCit9CisKKy8qICBDIEsgXyBLIFIgQiBfIEQgRSBDIFIgWSBQIFQKKyAq ICBkZWNyeXB0cyBuIGNoYXJhY3RlcnMgaW4gcyBpZiB3ZSBhcmUgZGVjcnlwdGluZworICovCisK K1ZPSUQKKyNpZmRlZiBDS19BTlNJQworY2tfdG5fZGVjcnlwdCggY2hhciAqIHMsIGludCBuICkK KyNlbHNlCitja190bl9kZWNyeXB0KCBzLG4gKSBjaGFyICogczsgaW50IG47CisjZW5kaWYKK3sK KyNpZmRlZiBDS19FTkNSWVBUSU9OCisgICAgc3RydWN0IGtzdHJlYW1fZGF0YV9ibG9jayBpOwor CisgICAgaWYgKGdfa3N0cmVhbS0+ZGVjcnlwdCAmJiBlbmNyeXB0X2lzX2RlY3J5cHRpbmcoKSkg eworCisjaWZkZWYgREVCVUcKKyAgICAgICAgY2toZXhkdW1wKCJmcm9tIGN5cGhlcnRleHQiLCBz LCBuKTsKKyNlbmRpZgorCisgICAgICAgIGkucHRyID0gczsKKyAgICAgICAgaS5sZW5ndGggPSBu OworICAgICAgICBnX2tzdHJlYW0tPmRlY3J5cHQoJmksIE5VTEwpOworI2lmZGVmIERFQlVHCisg ICAgICAgIGNraGV4ZHVtcCgidG8gcGxhaW50ZXh0Iiwgcywgbik7CisjZW5kaWYKKyAgICB9Cisg ICAgZWxzZSBkZWJ1ZyhGMTAxLCJja190bl9kZWNyeXB0IG5vdCBkZWNyeXB0aW5nIiwiIixuKTsK KyNlbmRpZiAvKiBFTkNSWVBUSU9OICovCit9CisKKy8qICBTIEUgTiBEIEsgNSBBIFUgVCBIIFMg QgorICogIFNlbmQgYSBLZXJiZXJvcyA1IEF1dGhlbnRpY2F0aW9uIFN1Ym5lZ290aWF0aW9uIHRv IGhvc3QgYW5kCisgKiAgb3V0cHV0IGFwcHJvcHJpYXRlIFRlbG5ldCBEZWJ1ZyBtZXNzYWdlcwor ICoKKyAqICB0eXBlIC0gU3ViIE5lZ290aWF0aW9uIHR5cGUKKyAqICBkYXRhIC0gcHRyIHRvIGJ1 ZmZlciBjb250YWluaW5nIGRhdGEKKyAqICBsZW4gIC0gbGVuIG9mIGJ1ZmZlciBpZiBub3QgTlVM IHRlcm1pbmF0ZWQKKyAqCisgKiAgcmV0dXJucyBudW1iZXIgb2YgY2hhcmFjdGVycyBzZW50IG9y IGVycm9yIHZhbHVlCisgKi8KKworc3RhdGljIGludAorI2lmZGVmIENLX0FOU0lDCitTZW5kSzVB dXRoU0IoaW50IHR5cGUsIHZvaWQgKmRhdGEsIGludCBsZW4pCisjZWxzZQorU2VuZEs1QXV0aFNC KHR5cGUsZGF0YSxsZW4pIGludCB0eXBlOyB2b2lkICpkYXRhOyBpbnQgbGVuOworI2VuZGlmCit7 CisgICAgaW50IHJjOworICAgIHVuc2lnbmVkIGNoYXIgKnAgPSBzdHJfZGF0YSArIDM7CisgICAg dW5zaWduZWQgY2hhciAqY2QgPSAodW5zaWduZWQgY2hhciAqKWRhdGE7CisgICAgZXh0ZXJuIGlu dCBzc3RlbG5ldDsKKworI2lmZGVmIENLX1NTTAorICAgIGlmIChURUxPUFRfU0IoVEVMT1BUX1NU QVJUX1RMUykuc3RhcnRfdGxzLm1lX2ZvbGxvd3MpIHsKKyAgICAgICAgaWYgKHR0Y2hrKCkgPCAw KQorICAgICAgICAgIHJldHVybigwKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIHJldHVybigx KTsKKyAgICB9CisjZW5kaWYgLyogQ0tfU1NMICovCisKKyAgICBpZiAoIHR5cGUgPCAwIHx8IHR5 cGUgPiA3ICkgICAgICAgICAvKiBDaGVjayBmb3IgaW52YWxpZCB2YWx1ZXMgKi8KKyAgICAgICAg cmV0dXJuKDApOworCisgICAgaWYgKCFjZCkgeworICAgICAgICBjZCA9ICh1bnNpZ25lZCBjaGFy ICopIiI7CisgICAgICAgIGxlbiA9IDA7CisgICAgfQorCisgICAgaWYgKGxlbiA9PSAtMSkgICAg ICAgICAgICAgICAgICAgICAgICAvKiBVc2Ugc3RybGVuKCkgZm9yIGxlbiAqLworICAgICAgICBs ZW4gPSBzdHJsZW4oKGNoYXIgKiljZCk7CisKKyAgICAvKiBDb25zdHJ1Y3QgTWVzc2FnZSAqLwor ICAgICpwKysgPSBzc3RlbG5ldCA/IFRFTFFVQUxfUkVQTFkgOiBURUxRVUFMX0lTOworICAgICpw KysgPSBBVVRIVFlQRV9LRVJCRVJPU19WNTsKKyAgICAqcCA9IEFVVEhfQ0xJRU5UX1RPX1NFUlZF UjsKKyAgICAqcCB8PSBhdXRoX2hvdzsKKyNpZmRlZiBDS19FTkNSWVBUSU9OCisgICAgKnAgfD0g YXV0aF9jcnlwdDsKKyNlbmRpZgorI2lmZGVmIFVTRV9JTklfQ1JFRF9GV0QKKyAgICBpZiAoYXV0 aF9md2QpCisgICAgICAgICpwIHw9IElOSV9DUkVEX0ZXRF9PTjsKKyNlbmRpZiAvKiBVU0VfSU5J X0NSRURfRldEICovCisgICAgcCsrOworICAgICpwKysgPSB0eXBlOworICAgIHdoaWxlIChsZW4t LSA+IDApIHsKKyAgICAgICAgaWYgKCgqcCsrID0gKmNkKyspID09IElBQykKKyAgICAgICAgICAg ICpwKysgPSBJQUM7CisgICAgfQorICAgICpwKysgPSBJQUM7CisgICAgKnArKyA9IFNFOworCisg ICAgLyogSGFuZGxlIFRlbG5ldCBEZWJ1Z2dpbmcgTWVzc2FnZXMgKi8KKyAgICBpZiAoZGVibG9n IHx8IHRuX2RlYiB8fCBkZWJzZXMpIHsKKyAgICAgICAgaW50IGk7CisgICAgICAgIGludCBkZWJs ZW49cC1zdHJfZGF0YS0yOworICAgICAgICBjaGFyICpzPU5VTEw7CisgICAgICAgIGludCBtb2Rl ID0gQVVUSF9DTElFTlRfVE9fU0VSVkVSIHwgKGF1dGhfaG93ICYgQVVUSF9IT1dfTUFTSykgfAor ICAgICAgICAgICAgYXV0aF9jcnlwdAorI2lmZGVmIFVTRV9JTklfQ1JFRF9GV0QKKyAgICAgICAg ICAgICAgfCAoYXV0aF9md2Q/SU5JX0NSRURfRldEX09OOklOSV9DUkVEX0ZXRF9PRkYpCisjZW5k aWYgLyogVVNFX0lOSV9DUkVEX0ZXRCAqLworICAgICAgICAgICAgICAgICAgICA7CisKKyAgICAg ICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgIHMgPSAiQVVU SCI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgcyA9 ICJSRUpFQ1QiOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMjoKKyAgICAgICAg ICAgIHMgPSAiQUNDRVBUIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDM6Cisg ICAgICAgICAgICBzID0gIlJFU1BPTlNFIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj YXNlIDQ6CisgICAgICAgICAgICBzID0gIkZPUldBUkQiOworICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgIGNhc2UgNToKKyAgICAgICAgICAgIHMgPSAiRk9SV0FSRF9BQ0NFUFQiOworICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgNjoKKyAgICAgICAgICAgIHMgPSAiRk9SV0FSRF9S RUpFQ1QiOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgNzoKKyAgICAgICAgICAg IHMgPSAiVExTX1ZFUklGWSI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwor ICAgICAgICBja21ha3htc2codG5fbXNnLFROX01TR19MRU4sCisgICAgICAgICAgICAgICAgICAi VEVMTkVUIFNFTlQgU0IgIiwKKyAgICAgICAgICAgICAgICAgVEVMT1BUKFRFTE9QVF9BVVRIRU5U SUNBVElPTiksIiAiLAorICAgICAgICAgICAgICAgICBzdHJfZGF0YVszXSA9PSBURUxRVUFMX0lT ID8gIklTIiA6CisgICAgICAgICAgICAgICAgIHN0cl9kYXRhWzNdID09IFRFTFFVQUxfUkVQTFkg PyAiUkVQTFkiIDogIj8/PyIsIiAiLAorICAgICAgICAgICAgICAgICBBVVRIVFlQRV9OQU1FKGF1 dGhlbnRpY2F0aW9uX3ZlcnNpb24pLCIgIiwKKyAgICAgICAgICAgICAgICAgQVVUSE1PREVfTkFN RShtb2RlKSwiICIsCisgICAgICAgICAgICAgICAgIHMsIiAiLE5VTEwpOworICAgICAgICB0bl9o ZXgoKENIQVIgKil0bl9tc2csVE5fTVNHX0xFTiwmc3RyX2RhdGFbN10sZGVibGVuLTcpOworICAg ICAgICBja3N0cm5jYXQodG5fbXNnLCJJQUMgU0UiLFROX01TR19MRU4pOworICAgICAgICBkZWJ1 ZyhGMTAwLHRuX21zZywiIiwwKTsKKyAgICAgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpIHRuX2Rl YnVnKHRuX21zZyk7CisgICAgfQorCisgICAgLyogU2VuZCBkYXRhICovCisjaWZkZWYgT1MyCisg ICAgUmVxdWVzdFRlbG5ldE11dGV4KCBTRU1fSU5ERUZJTklURV9XQUlUICk7CisjZW5kaWYKKyAg ICByYyA9IHR0b2woKENIQVIgKilzdHJfZGF0YSwgcCAtIHN0cl9kYXRhKTsKKyNpZmRlZiBPUzIK KyAgICBSZWxlYXNlVGVsbmV0TXV0ZXgoKTsKKyNlbmRpZgorICAgIGRlYnVnKEYxMTEsIlNlbmRL NUF1dGhTQiIsInR0b2woKSIscmMpOworICAgIHJldHVybihyYyk7Cit9CisKKy8qICBTIEUgTiBE IEsgNCBBIFUgVCBIIFMgQgorICogIFNlbmQgYSBLZXJiZXJvcyA0IEF1dGhlbnRpY2F0aW9uIFN1 Ym5lZ290aWF0aW9uIHRvIGhvc3QgYW5kCisgKiAgb3V0cHV0IGFwcHJvcHJpYXRlIFRlbG5ldCBE ZWJ1ZyBtZXNzYWdlcworICoKKyAqICB0eXBlIC0gU3ViIE5lZ290aWF0aW9uIHR5cGUKKyAqICBk YXRhIC0gcHRyIHRvIGJ1ZmZlciBjb250YWluaW5nIGRhdGEKKyAqICBsZW4gIC0gbGVuIG9mIGJ1 ZmZlciBpZiBub3QgTlVMIHRlcm1pbmF0ZWQKKyAqCisgKiAgcmV0dXJucyBudW1iZXIgb2YgY2hh cmFjdGVycyBzZW50IG9yIGVycm9yIHZhbHVlCisgKi8KKworc3RhdGljIGludAorI2lmZGVmIENL X0FOU0lDCitTZW5kSzRBdXRoU0IoaW50IHR5cGUsIHZvaWQgKmRhdGEsIGludCBsZW4pCisjZWxz ZQorU2VuZEs0QXV0aFNCKHR5cGUsZGF0YSxsZW4pIGludCB0eXBlOyB2b2lkICpkYXRhOyBpbnQg bGVuOworI2VuZGlmCit7CisgICAgaW50IHJjOworICAgIHVuc2lnbmVkIGNoYXIgKnAgPSBzdHJf ZGF0YSArIDM7CisgICAgdW5zaWduZWQgY2hhciAqY2QgPSAodW5zaWduZWQgY2hhciAqKWRhdGE7 CisgICAgZXh0ZXJuIGludCBzc3RlbG5ldDsKKyAgICBpbnQgbW9kZSA9IChhdXRoX2hvdyAmIEFV VEhfSE9XX01BU0spIHwKKyAgICAgICAgYXV0aF9jcnlwdDsKKworICAgIGlmICggdHlwZSA8IDAg fHwgdHlwZSA+IDQgKSAgICAgICAgIC8qIENoZWNrIGZvciBpbnZhbGlkIHZhbHVlcyAqLworICAg ICAgICByZXR1cm4oMCk7CisKKyNpZmRlZiBDS19TU0wKKyAgICBpZiAoVEVMT1BUX1NCKFRFTE9Q VF9TVEFSVF9UTFMpLnN0YXJ0X3Rscy5tZV9mb2xsb3dzKSB7CisgICAgICAgIGlmICh0dGNoaygp IDwgMCkKKyAgICAgICAgICByZXR1cm4oMCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICByZXR1 cm4oMSk7CisgICAgfQorI2VuZGlmIC8qIENLX1NTTCAqLworCisgICAgaWYgKCFjZCkgeworICAg ICAgICBjZCA9ICh1bnNpZ25lZCBjaGFyICopIiI7CisgICAgICAgIGxlbiA9IDA7CisgICAgfQor CisgICAgaWYgKGxlbiA9PSAtMSkgICAgICAgICAgICAgICAgICAgICAgICAvKiBVc2Ugc3RybGVu KCkgZm9yIGxlbiAqLworICAgICAgICBsZW4gPSBzdHJsZW4oKGNoYXIgKiljZCk7CisKKworICAg IC8qIENvbnN0cnVjdCBNZXNzYWdlICovCisgICAgKnArKyA9IHNzdGVsbmV0ID8gVEVMUVVBTF9S RVBMWSA6IFRFTFFVQUxfSVM7CisgICAgKnArKyA9IEFVVEhUWVBFX0tFUkJFUk9TX1Y0OworICAg ICpwID0gQVVUSF9DTElFTlRfVE9fU0VSVkVSOworICAgICpwIHw9IG1vZGU7CisgICAgcCsrOwor ICAgICpwKysgPSB0eXBlOworICAgIHdoaWxlIChsZW4tLSA+IDApIHsKKyAgICAgICAgaWYgKCgq cCsrID0gKmNkKyspID09IElBQykKKyAgICAgICAgICAgICpwKysgPSBJQUM7CisgICAgICAgIH0K KyAgICAqcCsrID0gSUFDOworICAgICpwKysgPSBTRTsKKworICAgIC8qIEhhbmRsZSBUZWxuZXQg RGVidWdnaW5nIE1lc3NhZ2VzICovCisgICAgaWYgKGRlYmxvZyB8fCB0bl9kZWIgfHwgZGVic2Vz KSB7CisgICAgICAgIGludCBpOworICAgICAgICBpbnQgZGVibGVuPXAtc3RyX2RhdGEtMjsKKyAg ICAgICAgY2hhciAqcz1OVUxMOworCisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBj YXNlIDA6CisgICAgICAgICAgICBzID0gIkFVVEgiOworICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgIGNhc2UgMToKKyAgICAgICAgICAgIHMgPSAiUkVKRUNUIjsKKyAgICAgICAgICAgIGJyZWFr OworICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICBzID0gIkFDQ0VQVCI7CisgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgcyA9ICJDSEFMTEVOR0UiOwor ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgIHMgPSAiUkVT UE9OU0UiOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBja21ha3ht c2codG5fbXNnLFROX01TR19MRU4sIlRFTE5FVCBTRU5UIFNCICIsCisgICAgICAgICAgICAgICAg IFRFTE9QVChURUxPUFRfQVVUSEVOVElDQVRJT04pLCIgIiwKKyAgICAgICAgICAgICAgICAgc3Ry X2RhdGFbM10gPT0gVEVMUVVBTF9JUyA/ICJJUyIgOgorICAgICAgICAgICAgICAgICAoc3RyX2Rh dGFbM10gPT0gVEVMUVVBTF9SRVBMWSA/ICJSRVBMWSIgOiAiPz8/IiksIiAiLAorICAgICAgICAg ICAgICAgICBBVVRIVFlQRV9OQU1FKGF1dGhlbnRpY2F0aW9uX3ZlcnNpb24pLCIgIiwKKyAgICAg ICAgICAgICAgICAgQVVUSE1PREVfTkFNRShtb2RlKSwiICIsCisgICAgICAgICAgICAgICAgIHMs IiAiLE5VTEwpOworICAgICAgICB0bl9oZXgoKENIQVIgKil0bl9tc2csVE5fTVNHX0xFTiwmc3Ry X2RhdGFbN10sZGVibGVuLTcpOworICAgICAgICBja3N0cm5jYXQodG5fbXNnLCJJQUMgU0UiLFRO X01TR19MRU4pOworICAgICAgICBkZWJ1ZyhGMTAwLHRuX21zZywiIiwwKTsKKyAgICAgICAgaWYg KHRuX2RlYiB8fCBkZWJzZXMpIHRuX2RlYnVnKHRuX21zZyk7CisgICAgfQorCisgICAgLyogU2Vu ZCBkYXRhICovCisjaWZkZWYgT1MyCisgICAgUmVxdWVzdFRlbG5ldE11dGV4KCBTRU1fSU5ERUZJ TklURV9XQUlUICk7CisjZW5kaWYKKyAgICByYyA9IHR0b2woKENIQVIgKilzdHJfZGF0YSwgcCAt IHN0cl9kYXRhKTsKKyNpZmRlZiBPUzIKKyAgICBSZWxlYXNlVGVsbmV0TXV0ZXgoKTsKKyNlbmRp ZgorICAgIGRlYnVnKEYxMTEsIlNlbmRLNEF1dGhTQiIsInR0b2woKSIscmMpOworICAgIHJldHVy bihyYyk7Cit9CisKKy8qICBTIEUgTiBEIFMgUiBQIEEgVSBUIEggUyBCCisgKiAgU2VuZCBhIFNS UCBBdXRoZW50aWNhdGlvbiBTdWJuZWdvdGlhdGlvbiB0byBob3N0IGFuZAorICogIG91dHB1dCBh cHByb3ByaWF0ZSBUZWxuZXQgRGVidWcgbWVzc2FnZXMKKyAqCisgKiAgdHlwZSAtIFN1YiBOZWdv dGlhdGlvbiB0eXBlCisgKiAgZGF0YSAtIHB0ciB0byBidWZmZXIgY29udGFpbmluZyBkYXRhCisg KiAgbGVuICAtIGxlbiBvZiBidWZmZXIgaWYgbm90IE5VTCB0ZXJtaW5hdGVkCisgKgorICogIHJl dHVybnMgbnVtYmVyIG9mIGNoYXJhY3RlcnMgc2VudCBvciBlcnJvciB2YWx1ZQorICovCisKK3N0 YXRpYyBpbnQKKyNpZmRlZiBDS19BTlNJQworU2VuZFNSUEF1dGhTQihpbnQgdHlwZSwgdm9pZCAq ZGF0YSwgaW50IGxlbikKKyNlbHNlCitTZW5kU1JQQXV0aFNCKHR5cGUsZGF0YSxsZW4pIGludCB0 eXBlOyB2b2lkICpkYXRhOyBpbnQgbGVuOworI2VuZGlmCit7CisgICAgaW50IHJjOworICAgIHVu c2lnbmVkIGNoYXIgKnAgPSBzdHJfZGF0YSArIDM7CisgICAgdW5zaWduZWQgY2hhciAqY2QgPSAo dW5zaWduZWQgY2hhciAqKWRhdGE7CisgICAgZXh0ZXJuIGludCBzc3RlbG5ldDsKKworICAgIC8q IENoZWNrIGZvciBpbnZhbGlkIHZhbHVlcyAqLworICAgIGlmICggdHlwZSAhPSBTUlBfRVhQICYm IHR5cGUgIT0gU1JQX1JFU1BPTlNFICYmCisgICAgICAgICB0eXBlICE9IFNSUF9SRUpFQ1QgJiYg dHlwZSAhPSBTUlBfQUNDRVBUICYmCisgICAgICAgICB0eXBlICE9IFNSUF9DSEFMTEVOR0UgJiYg dHlwZSAhPSBTUlBfUEFSQU1TICYmCisgICAgICAgICB0eXBlICE9IFNSUF9BVVRIKQorICAgICAg ICByZXR1cm4oMCk7CisKKyAgICBpZiAobGVuID09IC0xKSAgICAgICAgICAgICAgICAgICAgICAg IC8qIFVzZSBzdHJsZW4oKSBmb3IgbGVuICovCisgICAgICAgIGxlbiA9IHN0cmxlbigoY2hhciAq KWNkKTsKKworICAgIC8qIENvbnN0cnVjdCBNZXNzYWdlICovCisgICAgKnArKyA9IHNzdGVsbmV0 ID8gVEVMUVVBTF9SRVBMWSA6IFRFTFFVQUxfSVM7CisgICAgKnArKyA9IEFVVEhUWVBFX1NSUDsK KyAgICAqcCA9IEFVVEhfQ0xJRU5UX1RPX1NFUlZFUjsKKyAgICAqcCB8PSBhdXRoX2hvdzsKKyNp ZmRlZiBDS19FTkNSWVBUSU9OCisgICAgKnAgfD0gYXV0aF9jcnlwdDsKKyNlbmRpZgorICAgIHAr KzsKKyAgICAqcCsrID0gdHlwZTsKKyAgICB3aGlsZSAobGVuLS0gPiAwKSB7CisgICAgICAgIGlm ICgoKnArKyA9ICpjZCsrKSA9PSBJQUMpCisgICAgICAgICAgICAqcCsrID0gSUFDOworICAgICAg ICB9CisgICAgKnArKyA9IElBQzsKKyAgICAqcCsrID0gU0U7CisKKyAgICAvKiBIYW5kbGUgVGVs bmV0IERlYnVnZ2luZyBNZXNzYWdlcyAqLworICAgIGlmIChkZWJsb2cgfHwgdG5fZGViIHx8IGRl YnNlcykgeworICAgICAgICBpbnQgaTsKKyAgICAgICAgaW50IGRlYmxlbj1wLXN0cl9kYXRhLTI7 CisgICAgICAgIGNoYXIgKnM9TlVMTDsKKyAgICAgICAgaW50IG1vZGUgPSBBVVRIX0NMSUVOVF9U T19TRVJWRVIgfCAoYXV0aF9ob3cgJiBBVVRIX0hPV19NQVNLKSB8CisgICAgICAgICAgICBhdXRo X2NyeXB0OworCisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIDA6CisgICAg ICAgICAgICBzID0gIkFVVEgiOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMToK KyAgICAgICAgICAgIHMgPSAiUkVKRUNUIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj YXNlIDI6CisgICAgICAgICAgICBzID0gIkFDQ0VQVCI7CisgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgY2FzZSAzOgorICAgICAgICAgICAgcyA9ICJDSEFMTEVOR0UiOworICAgICAgICAgICAg YnJlYWs7CisgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgIHMgPSAiUkVTUE9OU0UiOworICAg ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgNToKKyAgICAgICAgICAgIHMgPSAiRk9SV0FS RCI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSA2OgorICAgICAgICAgICAgcyA9 ICJGT1JXQVJEX0FDQ0VQVCI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSA3Ogor ICAgICAgICAgICAgcyA9ICJGT1JXQVJEX1JFSkVDVCI7CisgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgY2FzZSA4OgorICAgICAgICAgICAgcyA9ICJFWFAiOworICAgICAgICAgICAgYnJlYWs7 CisgICAgICAgIGNhc2UgOToKKyAgICAgICAgICAgIHMgPSAiUEFSQU1TIjsKKyAgICAgICAgICAg IGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2ttYWt4bXNnKHRuX21zZyxUTl9NU0dfTEVO LAorICAgICAgICAgICAgICAgICAgIlRFTE5FVCBTRU5UIFNCICIsCisgICAgICAgICAgICAgICAg IFRFTE9QVChURUxPUFRfQVVUSEVOVElDQVRJT04pLCIgIiwKKyAgICAgICAgICAgICAgICAgc3Ry X2RhdGFbM10gPT0gVEVMUVVBTF9SRVBMWSA/ICJSRVBMWSIgOgorICAgICAgICAgICAgICAgICBz dHJfZGF0YVszXSA9PSBURUxRVUFMX0lTID8gIklTIiA6ICI/Pz8iLCIgIiwKKyAgICAgICAgICAg ICAgICAgQVVUSFRZUEVfTkFNRShhdXRoZW50aWNhdGlvbl92ZXJzaW9uKSwiICIsCisgICAgICAg ICAgICAgICAgIEFVVEhNT0RFX05BTUUobW9kZSksIiAiLAorICAgICAgICAgICAgICAgICBzLCIg IixOVUxMKTsKKyAgICAgICAgdG5faGV4KChDSEFSICopdG5fbXNnLFROX01TR19MRU4sJnN0cl9k YXRhWzddLGRlYmxlbi03KTsKKyAgICAgICAgY2tzdHJuY2F0KHRuX21zZywiSUFDIFNFIixUTl9N U0dfTEVOKTsKKyAgICAgICAgZGVidWcoRjEwMCx0bl9tc2csIiIsMCk7CisgICAgICAgIGlmICh0 bl9kZWIgfHwgZGVic2VzKSB0bl9kZWJ1Zyh0bl9tc2cpOworICAgIH0KKworICAgIC8qIFNlbmQg ZGF0YSAqLworI2lmZGVmIE9TMgorICAgIFJlcXVlc3RUZWxuZXRNdXRleCggU0VNX0lOREVGSU5J VEVfV0FJVCApOworI2VuZGlmCisgICAgcmMgPSB0dG9sKChDSEFSICopc3RyX2RhdGEsIHAgLSBz dHJfZGF0YSk7CisjaWZkZWYgT1MyCisgICAgUmVsZWFzZVRlbG5ldE11dGV4KCk7CisjZW5kaWYK KyAgICByZXR1cm4ocmMpOworfQorCisjaWZkZWYgQ0tfRU5DUllQVElPTgorLyoKKyAqIEZ1bmN0 aW9uOiBFbmFibGUgb3IgZGlzYWJsZSB0aGUgZW5jcnlwdGlvbiBwcm9jZXNzLgorICoKKyAqIFBh cmFtZXRlcnM6CisgKiAgICAgIGVuYWJsZSAtIFRSVUUgdG8gZW5hYmxlLCBGQUxTRSB0byBkaXNh YmxlLgorICovCitzdGF0aWMgVk9JRAorI2lmZGVmIENLX0FOU0lDCithdXRoX2VuY3J5cHRfZW5h YmxlKEJPT0wgZW5hYmxlKQorI2Vsc2UKK2F1dGhfZW5jcnlwdF9lbmFibGUoZW5hYmxlKSBCT09M IGVuYWJsZTsKKyNlbmRpZgoreworICBlbmNyeXB0X2ZsYWcgPSBlbmFibGU7Cit9CisjZW5kaWYK KworLyoKKyAqIEZ1bmN0aW9uOiBBYm9ydCB0aGUgYXV0aGVudGljYXRpb24gcHJvY2VzcworICoK KyAqIFBhcmFtZXRlcnM6CisgKi8KK3N0YXRpYyBWT0lECisjaWZkZWYgQ0tfQU5TSUMKK2F1dGhf YWJvcnQoY2hhciAqZXJybXNnLCBsb25nIHIpCisjZWxzZQorYXV0aF9hYm9ydChlcnJtc2cscikg Y2hhciAqZXJybXNnOyBsb25nIHI7CisjZW5kaWYKK3sKKyAgICBjaGFyIGJ1Zls5XTsKKyAgICBl eHRlcm4gaW50IHNzdGVsbmV0OworCisjaWZkZWYgQ0tfU1NMCisgICAgaWYgKFRFTE9QVF9TQihU RUxPUFRfU1RBUlRfVExTKS5zdGFydF90bHMubWVfZm9sbG93cykgeworICAgICAgICByZXR1cm47 CisgICAgfQorI2VuZGlmIC8qIENLX1NTTCAqLworICAgIGRlYnVnKEYxMTEsImF1dGhfYWJvcnQi LGVycm1zZyxyKTsKKworICAgIC8qIENvbnN0cnVjdCBUZWxuZXQgRGVidWdnaW5nIG1lc3NhZ2Vz ICovCisgICAgaWYgKGRlYmxvZyB8fCB0bl9kZWIgfHwgZGVic2VzKSB7CisgICAgICAgIGNrbWFr eG1zZyh0bl9tc2csVE5fTVNHX0xFTiwKKyAgICAgICAgICAgICAgICAgICJURUxORVQgU0VOVCBT QiAiLFRFTE9QVChURUxPUFRfQVVUSEVOVElDQVRJT04pLAorICAgICAgICAgICAgICAgICAgIiBJ UyAiLEFVVEhUWVBFX05BTUUoQVVUSFRZUEVfTlVMTCksIiAiLAorICAgICAgICAgICAgICAgICAg IEFVVEhUWVBFX05BTUUoQVVUSFRZUEVfTlVMTCksIiBJQUMgU0UiLAorICAgICAgICAgICAgICAg ICAgIE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTAorICAgICAgICAgICAgICAgICApOworICAgICAg ICBkZWJ1ZyhGMTAwLHRuX21zZywiIiwwKTsKKyAgICAgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMp IHRuX2RlYnVnKHRuX21zZyk7CisgICAgfQorCisgICAgLyogQ29uc3RydWN0IHRoZSBBYm9ydCBt ZXNzYWdlIHRvIHNlbmQgdG8gdGhlIGhvc3QgICAqLworICAgIC8qIEJhc2ljbHkgd2UgY2hhbmdl IHRoZSBhdXRoZW50aWNhdGlvbiB0eXBlIHRvIE5VTEwgKi8KKyAgICBzcHJpbnRmKGJ1ZiwgIiVj JWMlYyVjJWMlYyVjJWMiLCBJQUMsIFNCLCBURUxPUFRfQVVUSEVOVElDQVRJT04sCisgICAgICAg ICAgICAgc3N0ZWxuZXQgPyBURUxRVUFMX1JFUExZIDogVEVMUVVBTF9JUywgQVVUSFRZUEVfTlVM TCwKKyAgICAgICAgICAgICBBVVRIVFlQRV9OVUxMLCBJQUMsIFNFKTsgICAvKiBzYWZlICovCisj aWZkZWYgT1MyCisgICAgUmVxdWVzdFRlbG5ldE11dGV4KCBTRU1fSU5ERUZJTklURV9XQUlUICk7 CisjZW5kaWYKKyAgICB0dG9sKChDSEFSICopYnVmLCA4KTsKKyNpZmRlZiBPUzIKKyAgICBSZWxl YXNlVGVsbmV0TXV0ZXgoKTsKKyNlbmRpZgorCisgICAgLyogSWYgdGhlcmUgaXMgYW4gZXJyb3Ig bWVzc2FnZSwgYW5kIGVycm9yIG51bWJlciBjb25zdHJ1Y3QgKi8KKyAgICAvKiBhbiBleHBsYW5h dGlvbiB0byBkaXNwbGF5IHRvIHRoZSB1c2VyICAgICAgICAgICAgICAgICAgICAqLworICAgIGlm IChlcnJtc2cgIT0gTlVMTCkgeworICAgICAgICBja3N0cm5jcHkoc3RyVG1wLCBlcnJtc2csIEFV VEhUTVBCTCk7CisgICAgfSBlbHNlCisgICAgICAgIHN0clRtcFswXSA9ICdcMCc7CisKKworICAg IGlmIChyICE9IEFVVEhfU1VDQ0VTUykgeworICAgICAgICBja3N0cm5jYXQoc3RyVG1wLCAiXHJc biIsQVVUSFRNUEJMKTsKKyNpZmRlZiBLUkI0CisgICAgICAgIGlmICggYXV0aGVudGljYXRpb25f dmVyc2lvbiA9PSBBVVRIVFlQRV9LRVJCRVJPU19WNCApIHsKKyAgICAgICAgICAgIGNrc3RybmNh dChzdHJUbXAsIChjaGFyICopa3JiX2dldF9lcnJfdGV4dF9lbnRyeShyKSwKKyAgICAgICAgICAg ICAgICAgICAgICAgQVVUSFRNUEJMKTsKKyAgICAgICAgICAgIGRlYnVnKEYxMTEsImF1dGhfYWJv cnQiLChjaGFyICopa3JiX2dldF9lcnJfdGV4dF9lbnRyeShyKSxyKTsKKyAgICAgICAgfQorI2Vu ZGlmCisjaWZkZWYgS1JCNQorICAgICAgICBpZiAoIGF1dGhlbnRpY2F0aW9uX3ZlcnNpb24gPT0g QVVUSFRZUEVfS0VSQkVST1NfVjUgKSB7CisgICAgICAgICAgICBja3N0cm5jYXQoc3RyVG1wLCBl cnJvcl9tZXNzYWdlKHIpLEFVVEhUTVBCTCk7CisgICAgICAgICAgICBkZWJ1ZyhGMTExLCJhdXRo X2Fib3J0IixlcnJvcl9tZXNzYWdlKHIpLHIpOworICAgICAgICB9CisjZW5kaWYKKyAgICB9Cisg ICAgcHJpbnRmKCJBdXRoZW50aWNhdGlvbiBmYWlsZWQ6ICVzXHJcbiIsc3RyVG1wKTsKKyNpZmRl ZiBDS1NZU0xPRworICAgIGlmIChja3hzeXNsb2cgPj0gU1lTTEdfTEkgJiYgY2t4bG9nZ2luZykg eworICAgICAgICBja3N5c2xvZyhTWVNMR19MSSwgMCwgIlRlbG5ldCBhdXRoZW50aWNhdGlvbiBm YWlsdXJlIiwKKyAgICAgICAgICAgICAgICAgIChjaGFyICopIHN6VXNlck5hbWVSZXF1ZXN0ZWQs CisgICAgICAgICAgICAgICAgICBzdHJUbXApOworICAgIH0KKyNlbmRpZiAvKiBDS1NZU0xPRyAq LworICAgIGF1dGhlbnRpY2F0aW9uX3ZlcnNpb24gPSBBVVRIVFlQRV9OVUxMOworfQorCisKKy8q CisgKiBGdW5jdGlvbjogQ29weSBkYXRhIHRvIGJ1ZmZlciwgZG91YmxpbmcgSUFDIGNoYXJhY3Rl ciBpZiBwcmVzZW50LgorICoKKyAqLworaW50CisjaWZkZWYgQ0tfQU5TSUMKK2NvcHlfZm9yX25l dCh1bnNpZ25lZCBjaGFyICp0bywgdW5zaWduZWQgY2hhciAqZnJvbSwgaW50IGMpCisjZWxzZQor Y29weV9mb3JfbmV0KHRvLGZyb20sYykgdW5zaWduZWQgY2hhciAqdG87IHVuc2lnbmVkIGNoYXIg KmZyb207IGludCBjOworI2VuZGlmCit7CisgICAgaW50IG47CisKKyAgICBuID0gYzsKKyAgICBk ZWJ1ZyhGMTExLCJjb3B5X2Zvcl9uZXQiLCJiZWZvcmUiLG4pOworICAgIHdoaWxlIChjLS0gPiAw KSB7CisgICAgICAgIGlmICgoKnRvKysgPSAqZnJvbSsrKSA9PSBJQUMpIHsKKyAgICAgICAgICAg IG4rKzsKKyAgICAgICAgICAgICp0bysrID0gSUFDOworICAgICAgICB9CisgICAgfQorICAgIGRl YnVnKEYxMTEsImNvcHlfZm9yX25ldCIsImFmdGVyIixuKTsKKyAgICByZXR1cm4gbjsKK30KKwor I2lmZGVmIENLX1NTTAorLyogIFMgRSBOIEQgUyBTIEwgQSBVIFQgSCBTIEIKKyAqICBTZW5kIGEg U1NMIEF1dGhlbnRpY2F0aW9uIFN1Ym5lZ290aWF0aW9uIHRvIGhvc3QgYW5kCisgKiAgb3V0cHV0 IGFwcHJvcHJpYXRlIFRlbG5ldCBEZWJ1ZyBtZXNzYWdlcworICoKKyAqICB0eXBlIC0gU3ViIE5l Z290aWF0aW9uIHR5cGUKKyAqICBkYXRhIC0gcHRyIHRvIGJ1ZmZlciBjb250YWluaW5nIGRhdGEK KyAqICBsZW4gIC0gbGVuIG9mIGJ1ZmZlciBpZiBub3QgTlVMIHRlcm1pbmF0ZWQKKyAqCisgKiAg cmV0dXJucyBudW1iZXIgb2YgY2hhcmFjdGVycyBzZW50IG9yIGVycm9yIHZhbHVlCisgKi8KKwor aW50CisjaWZkZWYgQ0tfQU5TSUMKK1NlbmRTU0xBdXRoU0IoaW50IHR5cGUsIHZvaWQgKmRhdGEs IGludCBsZW4pCisjZWxzZQorU2VuZFNTTEF1dGhTQih0eXBlLGRhdGEsbGVuKSBpbnQgdHlwZTsg dm9pZCAqZGF0YTsgaW50IGxlbjsKKyNlbmRpZgoreworICAgIGludCByYzsKKyAgICB1bnNpZ25l ZCBjaGFyICpwID0gc3RyX2RhdGEgKyAzOworICAgIHVuc2lnbmVkIGNoYXIgKmNkID0gKHVuc2ln bmVkIGNoYXIgKilkYXRhOworICAgIGV4dGVybiBpbnQgc3N0ZWxuZXQ7CisKKyAgICAvKiBDaGVj ayBmb3IgaW52YWxpZCB2YWx1ZXMgKi8KKyAgICBpZiAoIHR5cGUgIT0gU1NMX1NUQVJUICYmIHR5 cGUgIT0gU1NMX0FDQ0VQVCAmJgorICAgICAgICAgdHlwZSAhPSBTU0xfUkVKRUNUKQorICAgICAg ICByZXR1cm4oMCk7CisKKyAgICBpZiAoVEVMT1BUX1NCKFRFTE9QVF9TVEFSVF9UTFMpLnN0YXJ0 X3Rscy5tZV9mb2xsb3dzKSB7CisgICAgICAgIGlmICh0dGNoaygpIDwgMCkKKyAgICAgICAgICBy ZXR1cm4oMCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICByZXR1cm4oMSk7CisgICAgfQorCisg ICAgaWYgKGxlbiA9PSAtMSkgICAgICAgICAgICAgICAgICAgICAgICAvKiBVc2Ugc3RybGVuKCkg Zm9yIGxlbiAqLworICAgICAgICBsZW4gPSBzdHJsZW4oKGNoYXIgKiljZCk7CisKKyAgICAvKiBD b25zdHJ1Y3QgTWVzc2FnZSAqLworICAgICpwKysgPSBzc3RlbG5ldCA/IFRFTFFVQUxfUkVQTFkg OiBURUxRVUFMX0lTOworICAgICpwKysgPSBBVVRIVFlQRV9TU0w7CisgICAgKnAgPSBBVVRIX0NM SUVOVF9UT19TRVJWRVI7CisgICAgKnAgfD0gYXV0aF9ob3c7CisjaWZkZWYgQ0tfRU5DUllQVElP TgorICAgICpwIHw9IGF1dGhfY3J5cHQ7CisjZW5kaWYKKyAgICBwKys7CisgICAgKnArKyA9IHR5 cGU7CisgICAgd2hpbGUgKGxlbi0tID4gMCkgeworICAgICAgICBpZiAoKCpwKysgPSAqY2QrKykg PT0gSUFDKQorICAgICAgICAgICAgKnArKyA9IElBQzsKKyAgICAgICAgfQorICAgICpwKysgPSBJ QUM7CisgICAgKnArKyA9IFNFOworCisgICAgLyogSGFuZGxlIFRlbG5ldCBEZWJ1Z2dpbmcgTWVz c2FnZXMgKi8KKyAgICBpZiAoZGVibG9nIHx8IHRuX2RlYiB8fCBkZWJzZXMpIHsKKyAgICAgICAg aW50IGk7CisgICAgICAgIGludCBkZWJsZW49cC1zdHJfZGF0YS0yOworICAgICAgICBjaGFyICpz PU5VTEw7CisgICAgICAgIGludCBtb2RlID0gQVVUSF9DTElFTlRfVE9fU0VSVkVSIHwgKGF1dGhf aG93ICYgQVVUSF9IT1dfTUFTSykgfAorICAgICAgICAgICAgKGF1dGhfY3J5cHQ/QVVUSF9FTkNS WVBUX1VTSU5HX1RFTE9QVDpBVVRIX0VOQ1JZUFRfT0ZGKTsKKworICAgICAgICBzd2l0Y2ggKHR5 cGUpIHsKKyAgICAgICAgY2FzZSBTU0xfU1RBUlQ6CisgICAgICAgICAgICBzID0gIlNUQVJUIjsK KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNTTF9BQ0NFUFQ6CisgICAgICAgICAg ICBzID0gIkFDQ0VQVCI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTU0xfUkVK RUNUOgorICAgICAgICAgICAgcyA9ICJSRUpFQ1QiOworICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgIH0KKworICAgICAgICBja21ha3htc2codG5fbXNnLFROX01TR19MRU4sCisgICAgICAgICAg ICAgICAgICAiVEVMTkVUIFNFTlQgU0IgIiwKKyAgICAgICAgICAgICAgICAgVEVMT1BUKFRFTE9Q VF9BVVRIRU5USUNBVElPTiksIiAiLAorICAgICAgICAgICAgICAgICBzdHJfZGF0YVszXSA9PSBU RUxRVUFMX1JFUExZID8gIlJFUExZIiA6CisgICAgICAgICAgICAgICAgIHN0cl9kYXRhWzNdID09 IFRFTFFVQUxfSVMgPyAiSVMiIDogIj8/PyIsIiAiLAorICAgICAgICAgICAgICAgICBBVVRIVFlQ RV9OQU1FKGF1dGhlbnRpY2F0aW9uX3ZlcnNpb24pLCIgIiwKKyAgICAgICAgICAgICAgICAgQVVU SE1PREVfTkFNRShtb2RlKSwiICIsCisgICAgICAgICAgICAgICAgIHMsIiAiLE5VTEwpOworICAg ICAgICB0bl9oZXgoKENIQVIgKil0bl9tc2csVE5fTVNHX0xFTiwmc3RyX2RhdGFbN10sZGVibGVu LTcpOworICAgICAgICBja3N0cm5jYXQodG5fbXNnLCJJQUMgU0UiLFROX01TR19MRU4pOworICAg ICAgICBkZWJ1ZyhGMTAwLHRuX21zZywiIiwwKTsKKyAgICAgICAgaWYgKHRuX2RlYiB8fCBkZWJz ZXMpIHRuX2RlYnVnKHRuX21zZyk7CisgICAgfQorCisgICAgLyogU2VuZCBkYXRhICovCisjaWZk ZWYgT1MyCisgICAgUmVxdWVzdFRlbG5ldE11dGV4KCBTRU1fSU5ERUZJTklURV9XQUlUICk7Cisj ZW5kaWYKKyAgICByYyA9IHR0b2woKENIQVIgKilzdHJfZGF0YSwgcCAtIHN0cl9kYXRhKTsKKyNp ZmRlZiBPUzIKKyAgICBSZWxlYXNlVGVsbmV0TXV0ZXgoKTsKKyNlbmRpZgorICAgIHJldHVybihy Yyk7Cit9CisjZW5kaWYgIC8qIENLX1NTTCAqLworCitpbnQKK3RuX2hvd19vayhpbnQgaG93KQor eworICAgIHN3aXRjaCAoIHRuX2F1dGhfaG93ICkgeworICAgIGNhc2UgVE5fQVVUSF9IT1dfQU5Z OgorICAgICAgICByZXR1cm4oMSk7CisgICAgY2FzZSBUTl9BVVRIX0hPV19PTkVfV0FZOgorICAg ICAgICByZXR1cm4oKGhvdyAmIEFVVEhfSE9XX01BU0spID09IEFVVEhfSE9XX09ORV9XQVkpOwor ICAgIGNhc2UgVE5fQVVUSF9IT1dfTVVUVUFMOgorICAgICAgICByZXR1cm4oKGhvdyAmIEFVVEhf SE9XX01BU0spID09IEFVVEhfSE9XX01VVFVBTCk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0 dXJuKDApOworICAgIH0KK30KKworaW50Cit0bl9lbmNfb2soaW50IGVuYykKK3sKKyAgICBzd2l0 Y2ggKCB0bl9hdXRoX2VuYyApIHsKKyAgICBjYXNlIFROX0FVVEhfRU5DX0FOWToKKyAgICAgICAg aWYgKChlbmMgJiBBVVRIX0VOQ1JZUFRfTUFTSykgPT0gQVVUSF9FTkNSWVBUX1NUQVJUX1RMUyAm JgorICAgICAgICAgICAgKCFja19zc2xlYXlfaXNfaW5zdGFsbGVkKCkKKyNpZmRlZiBDS19TU0wK KyAgICAgICAgICAgICB8fCAhc3NsX2ZpbmlzaGVkX21lc3NhZ2VzIHx8CisgICAgICAgICAgICAg ISh0bHNfYWN0aXZlX2ZsYWcgfHwgc3NsX2FjdGl2ZV9mbGFnKQorI2VuZGlmIC8qIENLX1NTTCAq LworICAgICAgICAgICAgICkpIHsKKyNpZmRlZiBDS19TU0wKKyAgICAgICAgICAgIGlmICghc3Ns X2ZpbmlzaGVkX21lc3NhZ2VzKQorICAgICAgICAgICAgICAgIGRlYnVnKEYxMDAsInRuX2VuY19v ayAhc3NsX2ZpbmlzaGVkX21lc3NhZ2VzIiwiIiwwKTsKKyNlbmRpZiAvKiBDS19TU0wgKi8KKyAg ICAgICAgICAgIHJldHVybigwKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4oMSk7CisgICAg Y2FzZSBUTl9BVVRIX0VOQ19OT05FOgorICAgICAgICByZXR1cm4oKGVuYyAmIEFVVEhfRU5DUllQ VF9NQVNLKSA9PSBBVVRIX0VOQ1JZUFRfT0ZGKTsKKyAgICBjYXNlIFROX0FVVEhfRU5DX1RFTE9Q VDoKKyAgICAgICAgcmV0dXJuKChlbmMgJiBBVVRIX0VOQ1JZUFRfTUFTSykgPT0gQVVUSF9FTkNS WVBUX1VTSU5HX1RFTE9QVCk7CisgICAgY2FzZSBUTl9BVVRIX0VOQ19FWENIOgorICAgICAgICBy ZXR1cm4oKGVuYyAmIEFVVEhfRU5DUllQVF9NQVNLKSA9PSBBVVRIX0VOQ1JZUFRfQUZURVJfRVhD SEFOR0UpOworICAgIGNhc2UgVE5fQVVUSF9FTkNfVExTOgorICAgICAgICByZXR1cm4oKChlbmMg JiBBVVRIX0VOQ1JZUFRfTUFTSykgPT0gQVVUSF9FTkNSWVBUX1NUQVJUX1RMUykgJiYKKyAgICAg ICAgICAgICAgIGNrX3NzbGVheV9pc19pbnN0YWxsZWQoKQorI2lmZGVmIENLX1NTTAorICAgICAg ICAgICAgICAgJiYgc3NsX2ZpbmlzaGVkX21lc3NhZ2VzICYmCisgICAgICAgICAgICAgICAodGxz X2FjdGl2ZV9mbGFnIHx8IHNzbF9hY3RpdmVfZmxhZykKKyNlbmRpZiAvKiBDS19TU0wgKi8KKyAg ICAgICAgICAgKTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4oMCk7CisgICAgfQorfQor CitzdGF0aWMgaW50CithdG9rKGludCBhdCkgeworICAgIGludCBpOworICAgIGlmICggYXV0aF90 eXBlX3VzZXJbMF0gPT0gQVVUSFRZUEVfQVVUTyApCisgICAgICAgIHJldHVybigxKTsKKyAgICBp ZiAoIGF1dGhfdHlwZV91c2VyWzBdID09IEFVVEhUWVBFX05VTEwgKQorICAgICAgICByZXR1cm4o MCk7CisKKyAgICBmb3IgKCBpPTA7CisgICAgICAgICAgaTxBVVRIVFlQTFNUU1ogJiYgYXV0aF90 eXBlX3VzZXJbaV0gIT0gQVVUSFRZUEVfTlVMTDsKKyAgICAgICAgICBpKysgKSB7CisgICAgICAg IGlmICggYXV0aF90eXBlX3VzZXJbaV0gPT0gYXQgKQorICAgICAgICAgICAgcmV0dXJuKDEpOwor ICAgIH0KKworICAgIHJldHVybigwKTsKK30KKworCisvKgorICogRnVuY3Rpb246IFBhcnNlIGF1 dGhlbnRpY2F0aW9uIHNlbmQgY29tbWFuZAorICoKKyAqIFBhcmFtZXRlcnM6CisgKiAgcGFyc2Vk YXQgLSB0aGUgc3ViLWNvbW1hbmQgZGF0YS4KKyAqCisgKiAgICAgIGVuZF9zdWIgLSBpbmRleCBv ZiB0aGUgY2hhcmFjdGVyIGluIHRoZSAncGFyc2VkYXQnIGFycmF5IHdoaWNoCisgKiAgICAgICAg ICAgICAgaXMgdGhlIGxhc3QgYnl0ZSBpbiBhIHN1Yi1uZWdvdGlhdGlvbgorICoKKyAqIFJldHVy bnM6IEtlcmJlcm9zIGVycm9yIGNvZGUuCisgKi8KKworc3RhdGljIHVuc2lnbmVkIGNoYXIgc2Vu ZF9saXN0WzUxMl07CitzdGF0aWMgaW50ICBzZW5kX2xlbiA9IDA7CisKK19QUk9UT1RZUChzdGF0 aWMgaW50IGF1dGhfc2VuZCwgKHVuc2lnbmVkIGNoYXIgKnBhcnNlZGF0LCBpbnQgZW5kX3N1Yikp OworCitzdGF0aWMgaW50CisjaWZkZWYgQ0tfQU5TSUMKK2F1dGhfcmVzZW5kKGludCB0eXBlKQor I2Vsc2UKK2F1dGhfcmVzZW5kKHR5cGUpIGludCB0eXBlOworI2VuZGlmIC8qIENLX0FOU0lDICov Cit7CisgICAgaW50IGk9MjsKKyAgICB3aGlsZSAoaSsxIDw9IHNlbmRfbGVuKSB7CisgICAgICAg IGlmIChzZW5kX2xpc3RbaV0gPT0gdHlwZSkgeworICAgICAgICAgICAgaW50IGo7CisgICAgICAg ICAgICBzZW5kX2xlbiAtPSAyOworICAgICAgICAgICAgZm9yIChqID0gaTsgaiA8IHNlbmRfbGVu OyBqKyspCisgICAgICAgICAgICAgICAgc2VuZF9saXN0W2pdID0gc2VuZF9saXN0W2orMl07Cisg ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpICs9IDI7CisgICAgICAgIH0KKyAgICB9Cisg ICAgcmV0dXJuKGF1dGhfc2VuZChzZW5kX2xpc3Qsc2VuZF9sZW4pKTsKK30KKworc3RhdGljIGlu dAorI2lmZGVmIENLX0FOU0lDCithdXRoX3NlbmQodW5zaWduZWQgY2hhciAqcGFyc2VkYXQsIGlu dCBlbmRfc3ViKQorI2Vsc2UKK2F1dGhfc2VuZChwYXJzZWRhdCxlbmRfc3ViKSB1bnNpZ25lZCBj aGFyICpwYXJzZWRhdDsgaW50IGVuZF9zdWI7CisjZW5kaWYKK3sKKyAgICBzdGF0aWMgdW5zaWdu ZWQgY2hhciBidWZbNDA5Nl07CisgICAgdW5zaWduZWQgY2hhciAqcG5hbWU7CisgICAgaW50IHBs ZW47CisgICAgaW50IHI7CisgICAgaW50IGk7CisgICAgaW50IG1vZGU7CisjaWZkZWYgTUlUX0NV UlJFTlQKKyNpZmRlZiBDS19FTkNSWVBUSU9OCisgICAga3JiNV9kYXRhIGRhdGE7CisgICAga3Ji NV9lbmNfZGF0YSBlbmNkYXRhOworICAgIGtyYjVfZXJyb3JfY29kZSBjb2RlOworICAgIGtyYjVf a2V5YmxvY2sgcmFuZG9tX2tleTsKKyNlbmRpZiAvKiBFTkNSWVBUSU9OICovCisjZW5kaWYgLyog TUlUX0NVUlJFTlQgKi8KKyNpZmRlZiBLUkI1CisgICAgaW50IGtyYjVfbXNnID0gMDsKKyNlbmRp ZiAvKiBLUkI1ICovCisjaWZkZWYgS1JCNAorICAgIGludCBrcmI0X21zZyA9IDA7CisjZW5kaWYg LyogS1JCNCAqLworI2lmZGVmIEdTU0FQSV9LUkI1CisgICAgaW50IGdzc2s1X21zZyA9IDA7Cisj ZW5kaWYgLyogR1NTQVBJX0tSQjUgKi8KKyAgICBpbnQgaWFjY250PTA7CisKKyNpZmRlZiBDS19T U0wKKyAgICBpZiAoVEVMT1BUX1NCKFRFTE9QVF9TVEFSVF9UTFMpLnN0YXJ0X3Rscy5tZV9mb2xs b3dzKQorICAgICAgICByZXR1cm4oQVVUSF9TVUNDRVNTKTsKKyNlbmRpZiAvKiBDS19TU0wgKi8K KworICAgIGF1dGhfaG93ID0gLTE7ICAgICAgICAgICAgICAvKiBXZSBoYXZlIG5vdCBmb3VuZCBh biBhdXRoIG1ldGhvZCAgKi8KKyAgICBhdXRoX2NyeXB0ID0gMDsgICAgICAgICAgICAgLyogV2Ug YXJlIG5vdCB1c2luZyBlbmNyeXB0aW9uICh5ZXQpICovCisgICAgc2VuZF9sZW4gPSBlbmRfc3Vi ID4gNTEyID8gNTEyIDogZW5kX3N1YjsKKyAgICBtZW1jcHkoc2VuZF9saXN0LHBhcnNlZGF0LHNl bmRfbGVuKTsKKworICAgIC8qIFNlYXJjaCB0aGUgbGlzdCBvZiBhY2NlcHRhYmxlIEF1dGhlbnRp Y2F0aW9uIHR5cGVzIHNlbnQgZnJvbSAqLworICAgIC8qIHRoZSBob3N0IGFuZCBmaW5kIG9uZSB0 aGF0IHdlIHN1cHBvcnQgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgICAgLyogRm9yIEtl cmJlcm9zIGF1dGhlbnRpY2F0aW9ucywgdHJ5IHRvIGRldGVybWluZSBpZiB3ZSBoYXZlIGEgICov CisgICAgLyogdmFsaWQgVEdULCBpZiBub3Qgc2tpcCBvdmVyIHRoZSBhdXRoZW50aWNhdGlvbiB0 eXBlIGJlY2F1c2UgICovCisgICAgLyogd2Ugd291bGRuJ3QgYmUgYWJsZSB0byBzdWNjZXNzZnVs bHkgbG9naW4gYW55d2F5LiAgUGVyaGFwcyAgICovCisgICAgLyogdGhlcmUgaXMgYW5vdGhlciBz dXBwb3J0ZWQgYXV0aGVudGljYXRpb24gd2hpY2ggd2UgY291bGQgdXNlICovCisKKyNpZmRlZiBO T19GVFBfQVVUSAorICAgIC8qIElmIHRoZSB1c2VyaWQgaXMgImZ0cCIgb3IgImFub255bW91cyIg cmVmdXNlIHRvIHBlcmZvcm0gQVVUSCAqLworICAgIC8qIGZvciBLZXJiZXJvcyBvciBTUlAuICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2VuZGlmIC8qIE5PX0ZU UF9BVVRIICovCisKKyAgICBpZiAoIGF1dGhfdHlwZV91c2VyWzBdID09IEFVVEhUWVBFX0FVVE8g KSB7CisgICAgZm9yIChpID0gMjsgaSsxIDw9IGVuZF9zdWI7IGkgKz0gMikgeworI2lmZGVmIE5U TE0KKyAgICAgICAgaWYgKHBhcnNlZGF0W2ldID09IEFVVEhUWVBFX05UTE0gJiYKKyAgICAgICAg ICAgICBja19udGxtX2lzX3ZhbGlkKDEpICYmCisgICAgICAgICAgICAgbnRsbV9hdXRoX3NlbmQo KSA9PSAwKSB7CisgICAgICAgICAgICBpZiAoKHBhcnNlZGF0W2krMV0gJiBBVVRIX1dIT19NQVNL KSA9PSBBVVRIX0NMSUVOVF9UT19TRVJWRVIgJiYKKyAgICAgICAgICAgICAgICAgdG5faG93X29r KHBhcnNlZGF0W2krMV0pICYmIHRuX2VuY19vayhwYXJzZWRhdFtpKzFdKSkgeworI2lmZGVmIENL X0VOQ1JZUFRJT04KKyAgICAgICAgICAgICAgICAvKiBOVExNIGRvZXMgbm90IHN1cHBvcnQgVGVs bmV0IEVuY3J5cHRpb24gKi8KKyAgICAgICAgICAgICAgICBpZiAoKHBhcnNlZGF0W2krMV0gJiBB VVRIX0VOQ1JZUFRfTUFTSykpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg ICAgICAgICAgIGF1dGhfY3J5cHQgPSBwYXJzZWRhdFtpKzFdICYgQVVUSF9FTkNSWVBUX01BU0s7 CisjZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLworICAgICAgICAgICAgICAgIFRFTE9QVF9NRV9N T0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9IFROX05HX1JGOworICAgICAgICAgICAgICAgIFRFTE9Q VF9VX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pID0gVE5fTkdfUkY7CisgICAgICAgICAgICAgICAg YXV0aGVudGljYXRpb25fdmVyc2lvbiA9IEFVVEhUWVBFX05UTE07CisgICAgICAgICAgICAgICAg YXV0aF9ob3cgPSBwYXJzZWRhdFtpKzFdICYgQVVUSF9IT1dfTUFTSzsKKyAgICAgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorI2VuZGlmIC8qIE5UTE0gKi8KKyNp ZmRlZiBDS19TU0wKKyAgICAgICAgaWYgKCBwYXJzZWRhdFtpXSA9PSBBVVRIVFlQRV9TU0wgJiYg c3NsX2luaXRpYWxpemVkICYmCisjaWZkZWYgU1NMRExMCisgICAgICAgICAgICAgY2tfc3NsZWF5 X2lzX2luc3RhbGxlZCgpICYmCisjZW5kaWYgLyogU1NMRExMICovCisgICAgICAgICAgICAgIXRs c19hY3RpdmVfZmxhZyAmJiAhc3NsX2FjdGl2ZV9mbGFnCisjaWZuZGVmIFVTRV9DRVJUX0NCCisg ICAgICAgICAgICAgJiYgdGxzX2xvYWRfY2VydHMoc3NsX2N0eCxzc2xfY29uLDApCisjZW5kaWYg LyogVVNFX0NFUlRfQ0IgKi8KKyAgICAgICAgICAgICApIHsKKworICAgICAgICAgICAgaWYgKChw YXJzZWRhdFtpKzFdICYgQVVUSF9XSE9fTUFTSykgPT0gQVVUSF9DTElFTlRfVE9fU0VSVkVSICYm CisgICAgICAgICAgICAgICAgIHRuX2hvd19vayhwYXJzZWRhdFtpKzFdKSAmJiB0bl9lbmNfb2so cGFyc2VkYXRbaSsxXSkpIHsKKyNpZmRlZiBDS19FTkNSWVBUSU9OCisgICAgICAgICAgICAgICAg LyogU1NMIGRvZXMgbm90IHN1cHBvcnQgVGVsbmV0IEVuY3J5cHRpb24gKi8KKyAgICAgICAgICAg ICAgICBpZiAoKHBhcnNlZGF0W2krMV0gJiBBVVRIX0VOQ1JZUFRfTUFTSykpCisgICAgICAgICAg ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGF1dGhfY3J5cHQgPSBwYXJzZWRh dFtpKzFdICYgQVVUSF9FTkNSWVBUX01BU0s7CisjZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLwor ICAgICAgICAgICAgICAgIFRFTE9QVF9NRV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9IFROX05H X1JGOworICAgICAgICAgICAgICAgIFRFTE9QVF9VX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pID0g VE5fTkdfUkY7CisgICAgICAgICAgICAgICAgYXV0aGVudGljYXRpb25fdmVyc2lvbiA9IEFVVEhU WVBFX1NTTDsKKyAgICAgICAgICAgICAgICBhdXRoX2hvdyA9IHBhcnNlZGF0W2krMV0gJiBBVVRI X0hPV19NQVNLOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg ICB9CisjZW5kaWYgLyogU1NMICovCisjaWZkZWYgQ0tfU1JQCisgICAgICAgIGlmICggcGFyc2Vk YXRbaV0gPT0gQVVUSFRZUEVfU1JQCisjaWZkZWYgU1JQRExMCisgICAgICAgICAgICAgJiYgaFNS UAorI2VuZGlmIC8qIFNSUERMTCAqLworI2lmZGVmIE5PX0ZUUF9BVVRICisgICAgICAgICAgICAg JiYgc3RyY21wKCJmdHAiLHN6VXNlck5hbWUpICYmIHN0cmNtcCgiYW5vbnltb3VzIixzelVzZXJO YW1lKQorI2VuZGlmIC8qIE5PX0ZUUF9BVVRIICovCisgICAgICAgICAgICAgKSB7CisgICAgICAg ICAgICBpZiAoKHBhcnNlZGF0W2krMV0gJiBBVVRIX1dIT19NQVNLKSA9PSBBVVRIX0NMSUVOVF9U T19TRVJWRVIgJiYKKyAgICAgICAgICAgICAgICAgdG5faG93X29rKHBhcnNlZGF0W2krMV0pICYm IHRuX2VuY19vayhwYXJzZWRhdFtpKzFdKSkgeworI2lmZGVmIFBSRV9TUlBfMV80XzUKKyAgICAg ICAgICAgICAgICBpZiAocGFyc2VkYXRbaSsxXSAmIEFVVEhfRU5DUllQVF9NQVNLKQorICAgICAg ICAgICAgICAgICAgICAgLyogRG8gbm90IHN1cHBvcnQgRU5DUllQVF9VU0lOR19URUxPUFQgeWV0 LiAqLworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyNlbmRpZiAvKiBQUkVfU1JQXzFf NF81ICovCisgICAgICAgICAgICAgICAgaWYgKCgocGFyc2VkYXRbaSsxXSAmIEFVVEhfRU5DUllQ VF9NQVNLKSA9PQorICAgICAgICAgICAgICAgICAgICAgQVVUSF9FTkNSWVBUX1VTSU5HX1RFTE9Q VCkgJiYKKyAgICAgICAgICAgICAgICAgICAgKFRFTE9QVF9NRV9NT0RFKFRFTE9QVF9FTkNSWVBU SU9OKSA9PSBUTl9OR19SRiB8fAorICAgICAgICAgICAgICAgICAgICAgVEVMT1BUX1VfTU9ERShU RUxPUFRfRU5DUllQVElPTikgPT0gVE5fTkdfUkYpKQorICAgICAgICAgICAgICAgICAgICBjb250 aW51ZTsKKworICAgICAgICAgICAgICAgIGF1dGhfY3J5cHQgPSBwYXJzZWRhdFtpKzFdICYgQVVU SF9FTkNSWVBUX01BU0s7CisjaWZkZWYgQ0tfRU5DUllQVElPTgorICAgICAgICAgICAgICAgIGlm ICggYXV0aF9jcnlwdCA9PSBBVVRIX0VOQ1JZUFRfVVNJTkdfVEVMT1BUICkgeworICAgICAgICAg ICAgICAgICAgICBURUxPUFRfTUVfTU9ERShURUxPUFRfRU5DUllQVElPTikgPSBUTl9OR19NVTsK KyAgICAgICAgICAgICAgICAgICAgVEVMT1BUX1VfTU9ERShURUxPUFRfRU5DUllQVElPTikgPSBU Tl9OR19NVTsKKyAgICAgICAgICAgICAgICB9CisjZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLwor I2lmZGVmIENLX1NTTAorICAgICAgICAgICAgICAgIGlmICggYXV0aF9jcnlwdCA9PSBBVVRIX0VO Q1JZUFRfU1RBUlRfVExTICYmCisgICAgICAgICAgICAgICAgICAgICBja19zc2xlYXlfaXNfaW5z dGFsbGVkKCkgJiYKKyAgICAgICAgICAgICAgICAgICAgICh0bHNfYWN0aXZlX2ZsYWcgfHwgc3Ns X2FjdGl2ZV9mbGFnKSApIHsKKyAgICAgICAgICAgICAgICAgICAgVEVMT1BUX01FX01PREUoVEVM T1BUX0VOQ1JZUFRJT04pID0gVE5fTkdfUkY7CisgICAgICAgICAgICAgICAgICAgIFRFTE9QVF9V X01PREUoVEVMT1BUX0VOQ1JZUFRJT04pID0gVE5fTkdfUkY7CisgICAgICAgICAgICAgICAgfQor I2VuZGlmIC8qIENLX1NTTCAqLworICAgICAgICAgICAgICAgIGF1dGhlbnRpY2F0aW9uX3ZlcnNp b24gPSBBVVRIVFlQRV9TUlA7CisgICAgICAgICAgICAgICAgYXV0aF9ob3cgPSBwYXJzZWRhdFtp KzFdICYgQVVUSF9IT1dfTUFTSzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg IH0KKyAgICAgICAgfQorI2VuZGlmIC8qIFNSUCAqLworI2lmZGVmIEdTU0FQSV9LUkI1CisgICAg ICAgIGlmIChwYXJzZWRhdFtpXSA9PSBBVVRIVFlQRV9HU1NBUElfS1JCNSAmJgorICAgICAgICAg ICAgKHBhcnNlZGF0W2krMV0gJiBBVVRIX0VOQ1JZUFRfTUFTSykgPT0KKyAgICAgICAgICAgIEFV VEhfRU5DUllQVF9BRlRFUl9FWENIQU5HRSAmJgorI2lmZGVmIE9TMgorICAgICAgICAgICAgaEdT U0FQSSAmJgorI2VuZGlmIC8qIE9TMiAqLworI2lmZGVmIE5PX0ZUUF9BVVRICisgICAgICAgICAg ICAgc3RyY21wKCJmdHAiLHN6VXNlck5hbWUpICYmIHN0cmNtcCgiYW5vbnltb3VzIixzelVzZXJO YW1lKSAmJgorI2VuZGlmIC8qIE5PX0ZUUF9BVVRIICovCisgICAgICAgICAgICAgY2tfZ3NzYXBp X2lzX2luc3RhbGxlZCgpICYmICFnc3NrNV9tc2cpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlm ICggIWdzc2s1X2F1dGhfc2VuZChwYXJzZWRhdFtpKzFdICYgQVVUSF9IT1dfTUFTSywKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZWRhdFtpKzFdICYgQVVUSF9FTkNSWVBU X01BU0ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VkYXRbaSsxXSAm IElOSV9DUkVEX0ZXRF9NQVNLKSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyog SWYgd2UgYXJlIGF1dG8tZ2V0dGluZyBUR1RzLCB0cnkgKi8KKyAgICAgICAgICAgICAgICBpZiAo ICFja19rcmI1X2lzX3RndF92YWxpZCgpICkgeworICAgICAgICAgICAgICAgIHByaW50ZigiS2Vy YmVyb3MgNTogVGlja2V0IEdldHRpbmcgVGlja2V0IG5vdCB2YWxpZC5cclxuIik7CisgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGdzc2s1X21zZyA9IDE7CisgICAgICAgICAgICB9 CisgICAgICAgICAgICBlbHNlIGlmICgocGFyc2VkYXRbaSsxXSAmIEFVVEhfV0hPX01BU0spID09 CisgICAgICAgICAgICAgICAgICAgICAgQVVUSF9DTElFTlRfVE9fU0VSVkVSICYmCisgICAgICAg ICAgICAgICAgICAgICAgdG5faG93X29rKHBhcnNlZGF0W2krMV0pICYmIHRuX2VuY19vayhwYXJz ZWRhdFtpKzFdKSkgeworICAgICAgICAgICAgICAgIGF1dGhfY3J5cHQgPSBwYXJzZWRhdFtpKzFd ICYgQVVUSF9FTkNSWVBUX01BU0s7CisjaWZkZWYgQ0tfRU5DUllQVElPTgorICAgICAgICAgICAg ICAgIGlmICggYXV0aF9jcnlwdCA9PSBBVVRIX0VOQ1JZUFRfQUZURVJfRVhDSEFOR0UgKSB7Cisg ICAgICAgICAgICAgICAgICAgIFRFTE9QVF9NRV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9IFRO X05HX1JGOworICAgICAgICAgICAgICAgICAgICBURUxPUFRfVV9NT0RFKFRFTE9QVF9FTkNSWVBU SU9OKSA9IFROX05HX1JGOworICAgICAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBDS19FTkNSWVBU SU9OICovCisgICAgICAgICAgICAgICAgYXV0aF9md2QgPSBwYXJzZWRhdFtpKzFdICYgSU5JX0NS RURfRldEX01BU0s7CisgICAgICAgICAgICAgICAgYXV0aGVudGljYXRpb25fdmVyc2lvbiA9IEFV VEhUWVBFX0dTU0FQSV9LUkI1OworICAgICAgICAgICAgICAgIGF1dGhfaG93ID0gcGFyc2VkYXRb aSsxXSAmIEFVVEhfSE9XX01BU0s7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg ICB9CisgICAgICAgIH0KKyNlbmRpZiAvKiBHU1NBUElfS1JCNSAqLworI2lmZGVmIEtSQjUKKyAg ICAgICAgaWYgKHBhcnNlZGF0W2ldID09IEFVVEhUWVBFX0tFUkJFUk9TX1Y1ICYmCisjaWZkZWYg T1MyCisgICAgICAgICAgICAgaEtSQjVfMzIgJiYKKyNlbmRpZiAvKiBPUzIgKi8KKyNpZmRlZiBO T19GVFBfQVVUSAorICAgICAgICAgICAgIHN0cmNtcCgiZnRwIixzelVzZXJOYW1lKSAmJiBzdHJj bXAoImFub255bW91cyIsc3pVc2VyTmFtZSkgJiYKKyNlbmRpZiAvKiBOT19GVFBfQVVUSCAqLwor ICAgICAgICAgICAgIGNrX2tyYjVfaXNfaW5zdGFsbGVkKCkgJiYgIWtyYjVfbXNnKSB7CisKKyAg ICAgICAgICAgIC8qIFdpdGhvdXQgZW5jcnlwdGlvbiB3ZSBjYW4ndCBwZXJmb3JtIG11dHVhbCBh dXRoZW50aWNhdGlvbiAqLworICAgICAgICAgICAgaWYgKCAocGFyc2VkYXRbaSsxXSAmIEFVVEhf SE9XX01BU0spID09IEFVVEhfSE9XX01VVFVBTCAmJgorICAgICAgICAgICAgICAgICAhY2tfY3J5 cHRfaXNfaW5zdGFsbGVkKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg ICAgIC8qIFNraXAgb3ZlciBlbnRyaWVzIHRoYXQgcmVxdWVzdCBjcmVkZW50aWFsIGZvcndhcmRp bmcgKi8KKyAgICAgICAgICAgIC8qIGlmIHdlIGFyZSBub3QgZm9yd2FyZGluZy4gICAgICAgICAg ICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGlmICgoIWZvcndhcmRfZmxhZyAmJiAo cGFyc2VkYXRbaSsxXSAmIElOSV9DUkVEX0ZXRF9NQVNLKSkgfHwKKyAgICAgICAgICAgICAgICAo Zm9yd2FyZF9mbGFnICYmCisgICAgICAgICAgICAgICAgICAoKHBhcnNlZGF0W2krMV0gJiBBVVRI X0hPV19NQVNLKSA9PSBBVVRIX0hPV19PTkVfV0FZKSkpCisgICAgICAgICAgICAgICAgY29udGlu dWU7CisKKyAgICAgICAgICAgIGlmICggIWs1X2F1dGhfc2VuZChwYXJzZWRhdFtpKzFdICYgQVVU SF9IT1dfTUFTSywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VkYXRbaSsx XSAmIEFVVEhfRU5DUllQVF9NQVNLLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw YXJzZWRhdFtpKzFdICYgSU5JX0NSRURfRldEX01BU0spICkKKyAgICAgICAgICAgIHsKKyAgICAg ICAgICAgICAgICAvKiBJZiB3ZSBhcmUgYXV0by1nZXR0aW5nIFRHVHMsIHRyeSAqLworICAgICAg ICAgICAgICAgIGlmICggIWNrX2tyYjVfaXNfdGd0X3ZhbGlkKCkgKSB7CisgICAgICAgICAgICAg ICAgcHJpbnRmKCJLZXJiZXJvcyA1OiBUaWNrZXQgR2V0dGluZyBUaWNrZXQgbm90IHZhbGlkLlxy XG4iKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAga3JiNV9tc2cgPSAxOwor ICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoKHBhcnNlZGF0W2krMV0gJiBBVVRI X1dIT19NQVNLKSA9PQorICAgICAgICAgICAgICAgICAgICAgIEFVVEhfQ0xJRU5UX1RPX1NFUlZF UiAmJgorICAgICAgICAgICAgICAgICAgICAgIHRuX2hvd19vayhwYXJzZWRhdFtpKzFdKSAmJiB0 bl9lbmNfb2socGFyc2VkYXRbaSsxXSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoKChwYXJzZWRh dFtpKzFdICYgQVVUSF9FTkNSWVBUX01BU0spID09CisgICAgICAgICAgICAgICAgICAgICBBVVRI X0VOQ1JZUFRfVVNJTkdfVEVMT1BUKSAmJgorICAgICAgICAgICAgICAgICAgICAgKFRFTE9QVF9N RV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9PSBUTl9OR19SRiB8fAorICAgICAgICAgICAgICAg ICAgICAgICBURUxPUFRfVV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9PSBUTl9OR19SRikpCisg ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGlmICgoKHBhcnNl ZGF0W2krMV0gJiBBVVRIX0VOQ1JZUFRfTUFTSykgPT0KKyAgICAgICAgICAgICAgICAgICAgIEFV VEhfRU5DUllQVF9TVEFSVF9UTFMpICYmCisgICAgICAgICAgICAgICAgICAgICAoIWNrX3NzbGVh eV9pc19pbnN0YWxsZWQoKQorI2lmZGVmIENLX1NTTAorICAgICAgICAgICAgICAgICAgICAgICB8 fCAhKHRsc19hY3RpdmVfZmxhZyB8fCBzc2xfYWN0aXZlX2ZsYWcpCisjZW5kaWYgLyogQ0tfU1NM ICovCisgICAgICAgICAgICAgICAgICAgICAgICkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRp bnVlOworCisgICAgICAgICAgICAgICAgYXV0aF9jcnlwdCA9IHBhcnNlZGF0W2krMV0gJiBBVVRI X0VOQ1JZUFRfTUFTSzsKKyNpZmRlZiBDS19FTkNSWVBUSU9OCisgICAgICAgICAgICAgICAgaWYg KCBhdXRoX2NyeXB0ID09IEFVVEhfRU5DUllQVF9VU0lOR19URUxPUFQgKSB7CisgICAgICAgICAg ICAgICAgICAgIFRFTE9QVF9NRV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9IFROX05HX01VOwor ICAgICAgICAgICAgICAgICAgICBURUxPUFRfVV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9IFRO X05HX01VOworICAgICAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCisj aWZkZWYgQ0tfU1NMCisgICAgICAgICAgICAgICAgaWYgKCBhdXRoX2NyeXB0ID09IEFVVEhfRU5D UllQVF9TVEFSVF9UTFMgJiYKKyAgICAgICAgICAgICAgICAgICAgIGNrX3NzbGVheV9pc19pbnN0 YWxsZWQoKSAmJgorICAgICAgICAgICAgICAgICAgICAgKHRsc19hY3RpdmVfZmxhZyB8fCBzc2xf YWN0aXZlX2ZsYWcpICkgeworICAgICAgICAgICAgICAgICAgICBURUxPUFRfTUVfTU9ERShURUxP UFRfRU5DUllQVElPTikgPSBUTl9OR19SRjsKKyAgICAgICAgICAgICAgICAgICAgVEVMT1BUX1Vf TU9ERShURUxPUFRfRU5DUllQVElPTikgPSBUTl9OR19SRjsKKyAgICAgICAgICAgICAgICB9Cisj ZW5kaWYgLyogQ0tfU1NMICovCisgICAgICAgICAgICAgICAgYXV0aF9md2QgPSBwYXJzZWRhdFtp KzFdICYgSU5JX0NSRURfRldEX01BU0s7CisgICAgICAgICAgICAgICAgYXV0aGVudGljYXRpb25f dmVyc2lvbiA9IEFVVEhUWVBFX0tFUkJFUk9TX1Y1OworICAgICAgICAgICAgICAgIGF1dGhfaG93 ID0gcGFyc2VkYXRbaSsxXSAmIEFVVEhfSE9XX01BU0s7CisgICAgICAgICAgICAgICAgaWYgKCBh dXRoX2hvdyA9PSBBVVRIX0hPV19PTkVfV0FZICkgeworICAgICAgICAgICAgICAgICAgICBURUxP UFRfTUVfTU9ERShURUxPUFRfRU5DUllQVElPTikgPSBUTl9OR19SRjsKKyAgICAgICAgICAgICAg ICAgICAgVEVMT1BUX1VfTU9ERShURUxPUFRfRU5DUllQVElPTikgPSBUTl9OR19SRjsKKyAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg ICAgIH0KKyNlbmRpZiAvKiBLUkI1ICovCisjaWZkZWYgS1JCNAorICAgICAgICBpZiAocGFyc2Vk YXRbaV0gPT0gQVVUSFRZUEVfS0VSQkVST1NfVjQgJiYKKyNpZmRlZiBPUzIKKyAgICAgICAgICAg ICBoS1JCNF8zMiAmJgorI2VuZGlmIC8qIE9TMiAqLworI2lmZGVmIE5PX0ZUUF9BVVRICisgICAg ICAgICAgICAgc3RyY21wKCJmdHAiLHN6VXNlck5hbWUpICYmIHN0cmNtcCgiYW5vbnltb3VzIixz elVzZXJOYW1lKSAmJgorI2VuZGlmIC8qIE5PX0ZUUF9BVVRIICovCisgICAgICAgICAgICAgY2tf a3JiNF9pc19pbnN0YWxsZWQoKSAmJiAha3JiNF9tc2cpIHsKKyAgICAgICAgICAgIGludCByYyA9 IDA7CisKKyAgICAgICAgICAgIC8qIFdpdGhvdXQgZW5jcnlwdGlvbiB3ZSBjYW4ndCBwZXJmb3Jt IG11dHVhbCBhdXRoZW50aWNhdGlvbiAqLworICAgICAgICAgICAgaWYgKCAocGFyc2VkYXRbaSsx XSAmIEFVVEhfSE9XX01BU0spID09IEFVVEhfSE9XX01VVFVBTCAmJgorICAgICAgICAgICAgICAg ICAhY2tfY3J5cHRfaXNfaW5zdGFsbGVkKCkgKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor CisgICAgICAgICAgICBpZiAoICFrNF9hdXRoX3NlbmQoKSApCisgICAgICAgICAgICB7CisgICAg ICAgICAgICAgICAgLyogSWYgd2UgYXJlIGF1dG8tZ2V0dGluZyBUR1RzLCB0cnkgKi8KKyAgICAg ICAgICAgICAgICBpZiAoICFja19rcmI0X2lzX3RndF92YWxpZCgpICkgeworICAgICAgICAgICAg ICAgICAgICBwcmludGYoIktlcmJlcm9zIDQ6IFRpY2tldCBHZXR0aW5nIFRpY2tldCBub3QgdmFs aWQuXHJcbiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBrcmI0X21zZyA9 IDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmICgocGFyc2VkYXRbaSsxXSAm IEFVVEhfV0hPX01BU0spID09CisgICAgICAgICAgICAgICAgICAgICAgQVVUSF9DTElFTlRfVE9f U0VSVkVSICYmCisgICAgICAgICAgICAgICAgICAgICAgdG5faG93X29rKHBhcnNlZGF0W2krMV0p ICYmIHRuX2VuY19vayhwYXJzZWRhdFtpKzFdKSkgeworI2lmZGVmIENLX0VOQ1JZUFRJT04KKyAg ICAgICAgICAgICAgICBpZiAoKHBhcnNlZGF0W2krMV0gJiBBVVRIX0VOQ1JZUFRfTUFTSykgJiYK KyAgICAgICAgICAgICAgICAgICAgIChURUxPUFRfTUVfTU9ERShURUxPUFRfRU5DUllQVElPTikg PT0gVE5fTkdfUkYgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgVEVMT1BUX1VfTU9ERShURUxP UFRfRU5DUllQVElPTikgPT0gVE5fTkdfUkYpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51 ZTsKKyAgICAgICAgICAgICAgICBhdXRoX2NyeXB0ID0gcGFyc2VkYXRbaSsxXSAmIEFVVEhfRU5D UllQVF9NQVNLOworICAgICAgICAgICAgICAgIGlmICggYXV0aF9jcnlwdCA9PSBBVVRIX0VOQ1JZ UFRfVVNJTkdfVEVMT1BUICkgeworICAgICAgICAgICAgICAgICAgICBURUxPUFRfTUVfTU9ERShU RUxPUFRfRU5DUllQVElPTikgPSBUTl9OR19NVTsKKyAgICAgICAgICAgICAgICAgICAgVEVMT1BU X1VfTU9ERShURUxPUFRfRU5DUllQVElPTikgPSBUTl9OR19NVTsKKyAgICAgICAgICAgICAgICB9 CisjZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLworICAgICAgICAgICAgICAgIGF1dGhlbnRpY2F0 aW9uX3ZlcnNpb24gPSBBVVRIVFlQRV9LRVJCRVJPU19WNDsKKyAgICAgICAgICAgICAgICBhdXRo X2hvdyA9IHBhcnNlZGF0W2krMV0gJiBBVVRIX0hPV19NQVNLOworICAgICAgICAgICAgICAgIGlm ICggYXV0aF9ob3cgPT0gQVVUSF9IT1dfT05FX1dBWSApIHsKKyAgICAgICAgICAgICAgICAgICAg VEVMT1BUX01FX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pID0gVE5fTkdfUkY7CisgICAgICAgICAg ICAgICAgICAgIFRFTE9QVF9VX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pID0gVE5fTkdfUkY7Cisg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor ICAgICAgICB9CisjZW5kaWYgLyogS1JCNCAqLworICAgIH0KKyAgICB9IGVsc2UgeworICAgICAg ICBmb3IgKGkgPSAyOyBpKzEgPD0gZW5kX3N1YjsgaSArPSAyKSB7CisjaWZkZWYgQ0tfU1NMCisg ICAgICAgICAgICBpZiAoIGF0b2soQVVUSFRZUEVfU1NMKSAmJiBwYXJzZWRhdFtpXSA9PSBBVVRI VFlQRV9TU0wgJiYKKyNpZmRlZiBTU0xETEwKKyAgICAgICAgICAgICAgICAgY2tfc3NsZWF5X2lz X2luc3RhbGxlZCgpICYmCisjZW5kaWYgLyogU1NMRExMICovCisgICAgICAgICAgICAgICAgICF0 bHNfYWN0aXZlX2ZsYWcgJiYgIXNzbF9hY3RpdmVfZmxhZyAmJiBzc2xfaW5pdGlhbGl6ZWQKKyNp Zm5kZWYgVVNFX0NFUlRfQ0IKKyAgICAgICAgICAgICAgICAgJiYgdGxzX2xvYWRfY2VydHMoc3Ns X2N0eCxzc2xfY29uLDApCisjZW5kaWYgLyogVVNFX0NFUlRfQ0IgKi8KKyAgICAgICAgICAgICAg ICAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICgocGFyc2VkYXRbaSsxXSAm IEFVVEhfV0hPX01BU0spID09IEFVVEhfQ0xJRU5UX1RPX1NFUlZFUiAmJgorICAgICAgICAgICAg ICAgICAgICAgdG5faG93X29rKHBhcnNlZGF0W2krMV0pICYmIHRuX2VuY19vayhwYXJzZWRhdFtp KzFdKSkgeworI2lmZGVmIENLX0VOQ1JZUFRJT04KKyAgICAgICAgICAgICAgICAgICAgLyogU1NM IGRvZXMgbm90IHN1cHBvcnQgVGVsbmV0IEVuY3J5cHRpb24gKi8KKyAgICAgICAgICAgICAgICAg ICAgaWYgKChwYXJzZWRhdFtpKzFdICYgQVVUSF9FTkNSWVBUX01BU0spKQorICAgICAgICAgICAg ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIGF1dGhfY3J5cHQgPSBw YXJzZWRhdFtpKzFdICYgQVVUSF9FTkNSWVBUX01BU0s7CisjZW5kaWYgLyogQ0tfRU5DUllQVElP TiAqLworICAgICAgICAgICAgICAgICAgICBURUxPUFRfTUVfTU9ERShURUxPUFRfRU5DUllQVElP TikgPSBUTl9OR19SRjsKKyAgICAgICAgICAgICAgICAgICAgVEVMT1BUX1VfTU9ERShURUxPUFRf RU5DUllQVElPTikgPSBUTl9OR19SRjsKKyAgICAgICAgICAgICAgICAgICAgYXV0aGVudGljYXRp b25fdmVyc2lvbiA9IEFVVEhUWVBFX1NTTDsKKyAgICAgICAgICAgICAgICAgICAgYXV0aF9ob3cg PSBwYXJzZWRhdFtpKzFdICYgQVVUSF9IT1dfTUFTSzsKKyAgICAgICAgICAgICAgICAgICAgYnJl YWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorI2VuZGlmIC8qIFNTTCAqLwor I2lmZGVmIENLX1NSUAorICAgICAgICAgICAgaWYgKCBhdG9rKEFVVEhUWVBFX1NSUCkgJiYKKyAg ICAgICAgICAgICAgICAgcGFyc2VkYXRbaV0gPT0gQVVUSFRZUEVfU1JQCisjaWZkZWYgU1JQRExM CisgICAgICAgICAgICAgICAgICYmIGhTUlAKKyNlbmRpZiAvKiBTUlBETEwgKi8KKyNpZmRlZiBO T19GVFBfQVVUSAorICAgICAgICAgICAgICAgICAmJiBzdHJjbXAoImZ0cCIsc3pVc2VyTmFtZSkg JiYgc3RyY21wKCJhbm9ueW1vdXMiLHN6VXNlck5hbWUpCisjZW5kaWYgLyogTk9fRlRQX0FVVEgg Ki8KKyAgICAgICAgICAgICAgICAgKSB7CisgICAgICAgICAgICAgICAgaWYgKChwYXJzZWRhdFtp KzFdICYgQVVUSF9XSE9fTUFTSykgPT0gQVVUSF9DTElFTlRfVE9fU0VSVkVSICYmCisgICAgICAg ICAgICAgICAgICAgICB0bl9ob3dfb2socGFyc2VkYXRbaSsxXSkgJiYgdG5fZW5jX29rKHBhcnNl ZGF0W2krMV0pKSB7CisjaWZkZWYgUFJFX1NSUF8xXzRfNQorICAgICAgICAgICAgICAgIGlmIChw YXJzZWRhdFtpKzFdICYgQVVUSF9FTkNSWVBUX01BU0spCisgICAgICAgICAgICAgICAgICAgICAv KiBEbyBub3Qgc3VwcG9ydCBFTkNSWVBUX1VTSU5HX1RFTE9QVCB5ZXQuICovCisgICAgICAgICAg ICAgICAgICAgIGNvbnRpbnVlOworI2VuZGlmIC8qIFBSRV9TUlBfMV80XzUgKi8KKyAgICAgICAg ICAgICAgICBpZiAoKChwYXJzZWRhdFtpKzFdICYgQVVUSF9FTkNSWVBUX01BU0spID09CisgICAg ICAgICAgICAgICAgICAgICBBVVRIX0VOQ1JZUFRfVVNJTkdfVEVMT1BUKSAmJgorICAgICAgICAg ICAgICAgICAgICAgKFRFTE9QVF9NRV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9PSBUTl9OR19S RiB8fAorICAgICAgICAgICAgICAgICAgICAgICBURUxPUFRfVV9NT0RFKFRFTE9QVF9FTkNSWVBU SU9OKSA9PSBUTl9OR19SRikpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg ICAgICAgICAgIGlmICgoKHBhcnNlZGF0W2krMV0gJiBBVVRIX0VOQ1JZUFRfTUFTSykgPT0KKyAg ICAgICAgICAgICAgICAgICAgIEFVVEhfRU5DUllQVF9TVEFSVF9UTFMpICYmCisgICAgICAgICAg ICAgICAgICAgICAoIWNrX3NzbGVheV9pc19pbnN0YWxsZWQoKQorI2lmZGVmIENLX1NTTAorICAg ICAgICAgICAgICAgICAgICAgICB8fCAhKHRsc19hY3RpdmVfZmxhZyB8fCBzc2xfYWN0aXZlX2Zs YWcpCisjZW5kaWYgLyogQ0tfU1NMICovCisgICAgICAgICAgICAgICAgICAgICAgICkpCisgICAg ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICBhdXRoX2NyeXB0 ID0gcGFyc2VkYXRbaSsxXSAmIEFVVEhfRU5DUllQVF9NQVNLOworI2lmZGVmIENLX0VOQ1JZUFRJ T04KKyAgICAgICAgICAgICAgICAgICAgaWYgKCBhdXRoX2NyeXB0ID09IEFVVEhfRU5DUllQVF9V U0lOR19URUxPUFQgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBURUxPUFRfTUVfTU9ERShU RUxPUFRfRU5DUllQVElPTikgPSBUTl9OR19NVTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFRF TE9QVF9VX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pID0gVE5fTkdfTVU7CisgICAgICAgICAgICAg ICAgICAgIH0KKyNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCisjaWZkZWYgQ0tfU1NMCisgICAg ICAgICAgICAgICAgaWYgKCBhdXRoX2NyeXB0ID09IEFVVEhfRU5DUllQVF9TVEFSVF9UTFMgJiYK KyAgICAgICAgICAgICAgICAgICAgIGNrX3NzbGVheV9pc19pbnN0YWxsZWQoKSAmJgorICAgICAg ICAgICAgICAgICAgICAgKHRsc19hY3RpdmVfZmxhZyB8fCBzc2xfYWN0aXZlX2ZsYWcpICkgewor ICAgICAgICAgICAgICAgICAgICBURUxPUFRfTUVfTU9ERShURUxPUFRfRU5DUllQVElPTikgPSBU Tl9OR19SRjsKKyAgICAgICAgICAgICAgICAgICAgVEVMT1BUX1VfTU9ERShURUxPUFRfRU5DUllQ VElPTikgPSBUTl9OR19SRjsKKyAgICAgICAgICAgICAgICB9CisjZW5kaWYgLyogQ0tfU1NMICov CisgICAgICAgICAgICAgICAgICAgIGF1dGhlbnRpY2F0aW9uX3ZlcnNpb24gPSBBVVRIVFlQRV9T UlA7CisgICAgICAgICAgICAgICAgICAgIGF1dGhfaG93ID0gcGFyc2VkYXRbaSsxXSAmIEFVVEhf SE9XX01BU0s7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBTUlAgKi8KKyNpZmRlZiBHU1NBUElfS1JCNQorICAg ICAgICBpZiAoYXRvayhBVVRIVFlQRV9HU1NBUElfS1JCNSkgJiYKKyAgICAgICAgICAgIHBhcnNl ZGF0W2ldID09IEFVVEhUWVBFX0dTU0FQSV9LUkI1ICYmCisgICAgICAgICAgICAocGFyc2VkYXRb aSsxXSAmIEFVVEhfRU5DUllQVF9NQVNLKSA9PQorICAgICAgICAgICAgQVVUSF9FTkNSWVBUX0FG VEVSX0VYQ0hBTkdFICYmCisjaWZkZWYgT1MyCisgICAgICAgICAgICBoR1NTQVBJICYmCisjZW5k aWYgLyogT1MyICovCisjaWZkZWYgTk9fRlRQX0FVVEgKKyAgICAgICAgICAgIHN0cmNtcCgiZnRw IixzelVzZXJOYW1lKSAmJiBzdHJjbXAoImFub255bW91cyIsc3pVc2VyTmFtZSkgJiYKKyNlbmRp ZiAvKiBOT19GVFBfQVVUSCAqLworICAgICAgICAgICAgY2tfZ3NzYXBpX2lzX2luc3RhbGxlZCgp ICYmICFnc3NrNV9tc2cpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICggIWdzc2s1X2F1dGhf c2VuZChwYXJzZWRhdFtpKzFdICYgQVVUSF9IT1dfTUFTSywKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBwYXJzZWRhdFtpKzFdICYgQVVUSF9FTkNSWVBUX01BU0ssCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VkYXRbaSsxXSAmIElOSV9DUkVEX0ZXRF9N QVNLKSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogSWYgd2UgYXJlIGF1dG8t Z2V0dGluZyBUR1RzLCB0cnkgKi8KKyAgICAgICAgICAgICAgICBpZiAoICFja19rcmI1X2lzX3Rn dF92YWxpZCgpICkgeworICAgICAgICAgICAgICAgIHByaW50ZigiS2VyYmVyb3MgNTogVGlja2V0 IEdldHRpbmcgVGlja2V0IG5vdCB2YWxpZC5cclxuIik7CisgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICAgIGdzc2s1X21zZyA9IDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBl bHNlIGlmICgocGFyc2VkYXRbaSsxXSAmIEFVVEhfV0hPX01BU0spID09CisgICAgICAgICAgICAg ICAgICAgICAgQVVUSF9DTElFTlRfVE9fU0VSVkVSICYmCisgICAgICAgICAgICAgICAgICAgICAg dG5faG93X29rKHBhcnNlZGF0W2krMV0pICYmIHRuX2VuY19vayhwYXJzZWRhdFtpKzFdKSkgewor ICAgICAgICAgICAgICAgIGF1dGhfY3J5cHQgPSBwYXJzZWRhdFtpKzFdICYgQVVUSF9FTkNSWVBU X01BU0s7CisjaWZkZWYgQ0tfRU5DUllQVElPTgorICAgICAgICAgICAgICAgIGlmICggYXV0aF9j cnlwdCA9PSBBVVRIX0VOQ1JZUFRfQUZURVJfRVhDSEFOR0UgKSB7CisgICAgICAgICAgICAgICAg ICAgIFRFTE9QVF9NRV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9IFROX05HX1JGOworICAgICAg ICAgICAgICAgICAgICBURUxPUFRfVV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9IFROX05HX1JG OworICAgICAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCisgICAgICAg ICAgICAgICAgYXV0aF9md2QgPSBwYXJzZWRhdFtpKzFdICYgSU5JX0NSRURfRldEX01BU0s7Cisg ICAgICAgICAgICAgICAgYXV0aGVudGljYXRpb25fdmVyc2lvbiA9IEFVVEhUWVBFX0dTU0FQSV9L UkI1OworICAgICAgICAgICAgICAgIGF1dGhfaG93ID0gcGFyc2VkYXRbaSsxXSAmIEFVVEhfSE9X X01BU0s7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0K KyNlbmRpZiAvKiBHU1NBUElfS1JCNSAqLworI2lmZGVmIEtSQjUKKyAgICAgICAgICAgIGlmICgg YXRvayhBVVRIVFlQRV9LRVJCRVJPU19WNSkgJiYKKyAgICAgICAgICAgICAgICAgcGFyc2VkYXRb aV0gPT0gQVVUSFRZUEVfS0VSQkVST1NfVjUgJiYKKyNpZmRlZiBPUzIKKyAgICAgICAgICAgICAg ICAgaEtSQjVfMzIgJiYKKyNlbmRpZiAvKiBPUzIgKi8KKyNpZmRlZiBOT19GVFBfQVVUSAorICAg ICAgICAgICAgICAgICBzdHJjbXAoImZ0cCIsc3pVc2VyTmFtZSkgJiYgc3RyY21wKCJhbm9ueW1v dXMiLHN6VXNlck5hbWUpICYmCisjZW5kaWYgLyogTk9fRlRQX0FVVEggKi8KKyAgICAgICAgICAg ICAgICAgY2tfa3JiNV9pc19pbnN0YWxsZWQoKSAmJiAha3JiNV9tc2cpIHsKKworICAgICAgICAg ICAgICAgIC8qIFdpdGhvdXQgZW5jcnlwdGlvbiB3ZSBjYW4ndCBwZXJmb3JtIG11dHVhbCBhdXRo ZW50aWNhdGlvbiAqLworICAgICAgICAgICAgICAgIGlmICggKHBhcnNlZGF0W2krMV0gJiBBVVRI X0hPV19NQVNLKSA9PSBBVVRIX0hPV19NVVRVQUwgJiYKKyAgICAgICAgICAgICAgICAgICAgICFj a19jcnlwdF9pc19pbnN0YWxsZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisK KyAgICAgICAgICAgICAgICAvKiBTa2lwIG92ZXIgZW50cmllcyB0aGF0IHJlcXVlc3QgY3JlZGVu dGlhbCBmb3J3YXJkaW5nICovCisgICAgICAgICAgICAgICAgLyogaWYgd2UgYXJlIG5vdCBmb3J3 YXJkaW5nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIGlm ICgoIWZvcndhcmRfZmxhZyAmJiAocGFyc2VkYXRbaSsxXSAmIElOSV9DUkVEX0ZXRF9NQVNLKSkg fHwKKyAgICAgICAgICAgICAgICAgICAgIChmb3J3YXJkX2ZsYWcgJiYKKyAgICAgICAgICAgICAg ICAgICAgICAgKChwYXJzZWRhdFtpKzFdICYgQVVUSF9IT1dfTUFTSykgPT0gQVVUSF9IT1dfT05F X1dBWSkpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgICAg IGlmICggIWs1X2F1dGhfc2VuZChwYXJzZWRhdFtpKzFdICYgQVVUSF9IT1dfTUFTSywKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZGF0W2krMV0gJiBBVVRIX0VOQ1JZ UFRfTUFTSywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZGF0W2kr MV0gJiBJTklfQ1JFRF9GV0RfTUFTSykgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg ICAgICAgICAgLyogSWYgd2UgYXJlIGF1dG8tZ2V0dGluZyBUR1RzLCB0cnkgKi8KKyAgICAgICAg ICAgICAgICAgICAgaWYgKCAhY2tfa3JiNV9pc190Z3RfdmFsaWQoKSApIHsKKyAgICAgICAgICAg ICAgICAgICAgICAgIHByaW50ZigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJLZXJiZXJv cyA1OiBUaWNrZXQgR2V0dGluZyBUaWNrZXQgbm90IHZhbGlkLlxyXG4iKTsKKyAgICAgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBrcmI1X21zZyA9IDE7CisgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKChwYXJzZWRhdFtpKzFdICYgQVVUSF9X SE9fTUFTSykgPT0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVUSF9DTElFTlRfVE9fU0VS VkVSICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgIHRuX2hvd19vayhwYXJzZWRhdFtpKzFd KSAmJiB0bl9lbmNfb2socGFyc2VkYXRbaSsxXSkpCisgICAgICAgICAgICAgICAgeworICAgICAg ICAgICAgICAgICAgICBpZiAoKChwYXJzZWRhdFtpKzFdICYgQVVUSF9FTkNSWVBUX01BU0spID09 CisgICAgICAgICAgICAgICAgICAgICAgICAgQVVUSF9FTkNSWVBUX1VTSU5HX1RFTE9QVCkgJiYK KyAgICAgICAgICAgICAgICAgICAgICAgICAoVEVMT1BUX01FX01PREUoVEVMT1BUX0VOQ1JZUFRJ T04pID09IFROX05HX1JGIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICBURUxPUFRfVV9N T0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9PSBUTl9OR19SRikpCisgICAgICAgICAgICAgICAgICAg ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCgocGFyc2VkYXRbaSsxXSAm IEFVVEhfRU5DUllQVF9NQVNLKSA9PQorICAgICAgICAgICAgICAgICAgICAgICAgIEFVVEhfRU5D UllQVF9TVEFSVF9UTFMpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgKCFja19zc2xlYXlf aXNfaW5zdGFsbGVkKCkKKyNpZmRlZiBDS19TU0wKKyAgICAgICAgICAgICAgICAgICAgICAgICAg IHx8ICEodGxzX2FjdGl2ZV9mbGFnIHx8IHNzbF9hY3RpdmVfZmxhZykKKyNlbmRpZiAvKiBDS19T U0wgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICkpCisgICAgICAgICAgICAgICAgICAg ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgYXV0aF9jcnlwdCA9IHBhcnNlZGF0 W2krMV0gJiBBVVRIX0VOQ1JZUFRfTUFTSzsKKyNpZmRlZiBDS19FTkNSWVBUSU9OCisgICAgICAg ICAgICAgICAgICAgIGlmIChhdXRoX2NyeXB0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBU RUxPUFRfTUVfTU9ERShURUxPUFRfRU5DUllQVElPTikgPSBUTl9OR19NVTsKKyAgICAgICAgICAg ICAgICAgICAgICAgIFRFTE9QVF9VX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pID0gVE5fTkdfTVU7 CisgICAgICAgICAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCisjaWZk ZWYgQ0tfU1NMCisgICAgICAgICAgICAgICAgICAgIGlmICggYXV0aF9jcnlwdCA9PSBBVVRIX0VO Q1JZUFRfU1RBUlRfVExTICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgY2tfc3NsZWF5X2lz X2luc3RhbGxlZCgpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgKHRsc19hY3RpdmVfZmxh ZyB8fCBzc2xfYWN0aXZlX2ZsYWcpICkgeworICAgICAgICAgICAgICAgICAgICAgICAgVEVMT1BU X01FX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pID0gVE5fTkdfUkY7CisgICAgICAgICAgICAgICAg ICAgICAgICBURUxPUFRfVV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9IFROX05HX1JGOworICAg ICAgICAgICAgICAgICAgICB9CisjZW5kaWYgLyogQ0tfU1NMICovCisgICAgICAgICAgICAgICAg ICAgIGF1dGhlbnRpY2F0aW9uX3ZlcnNpb24gPSBBVVRIVFlQRV9LRVJCRVJPU19WNTsKKyAgICAg ICAgICAgICAgICAgICAgYXV0aF9ob3cgPSBwYXJzZWRhdFtpKzFdICYgQVVUSF9IT1dfTUFTSzsK KyAgICAgICAgICAgICAgICAgICAgaWYgKCBhdXRoX2hvdyA9PSBBVVRIX0hPV19PTkVfV0FZICkg eworICAgICAgICAgICAgICAgICAgICAgICAgVEVMT1BUX01FX01PREUoVEVMT1BUX0VOQ1JZUFRJ T04pID0gVE5fTkdfUkY7CisgICAgICAgICAgICAgICAgICAgICAgICBURUxPUFRfVV9NT0RFKFRF TE9QVF9FTkNSWVBUSU9OKSA9IFROX05HX1JGOworICAgICAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K KyNlbmRpZiAvKiBLUkI1ICovCisjaWZkZWYgS1JCNAorICAgICAgICAgICAgaWYgKCBhdG9rKEFV VEhUWVBFX0tFUkJFUk9TX1Y0KSAmJgorICAgICAgICAgICAgICAgICBwYXJzZWRhdFtpXSA9PSBB VVRIVFlQRV9LRVJCRVJPU19WNCAmJgorI2lmZGVmIE9TMgorICAgICAgICAgICAgICAgICBoS1JC NF8zMiAmJgorI2VuZGlmIC8qIE9TMiAqLworI2lmZGVmIE5PX0ZUUF9BVVRICisgICAgICAgICAg ICAgICAgIHN0cmNtcCgiZnRwIixzelVzZXJOYW1lKSAmJiBzdHJjbXAoImFub255bW91cyIsc3pV c2VyTmFtZSkgJiYKKyNlbmRpZiAvKiBOT19GVFBfQVVUSCAqLworICAgICAgICAgICAgICAgICBj a19rcmI0X2lzX2luc3RhbGxlZCgpICYmICFrcmI0X21zZykgeworICAgICAgICAgICAgICAgIGlu dCByYyA9IDA7CisKKyAgICAgICAgICAgICAgICAvKiBXaXRob3V0IGVuY3J5cHRpb24gd2UgY2Fu J3QgcGVyZm9ybSBtdXR1YWwgYXV0aGVudGljYXRpb24gKi8KKyAgICAgICAgICAgICAgICBpZiAo IChwYXJzZWRhdFtpKzFdICYgQVVUSF9IT1dfTUFTSykgPT0gQVVUSF9IT1dfTVVUVUFMICYmCisg ICAgICAgICAgICAgICAgICAgICAhY2tfY3J5cHRfaXNfaW5zdGFsbGVkKCkpCisgICAgICAgICAg ICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgaWYgKCAhazRfYXV0aF9zZW5k KCkgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLyogSWYgd2UgYXJl IGF1dG8tZ2V0dGluZyBUR1RzLCB0cnkgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKCAhY2tf a3JiNF9pc190Z3RfdmFsaWQoKSApIHsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJLZXJi ZXJvcyA0OiBUaWNrZXQgR2V0dGluZyBUaWNrZXQgbm90IHZhbGlkLlxyXG4iKTsKKyAgICAgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBrcmI0X21zZyA9IDE7CisgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKChwYXJzZWRhdFtpKzFdICYgQVVU SF9XSE9fTUFTSykgPT0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgQVVUSF9DTElFTlRfVE9f U0VSVkVSICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgIHRuX2hvd19vayhwYXJzZWRhdFtp KzFdKSAmJiB0bl9lbmNfb2socGFyc2VkYXRbaSsxXSkpCisgICAgICAgICAgICAgICAgeworI2lm ZGVmIENLX0VOQ1JZUFRJT04KKyAgICAgICAgICAgICAgICAgICAgaWYgKChwYXJzZWRhdFtpKzFd ICYgQVVUSF9FTkNSWVBUX01BU0spICYmCisgICAgICAgICAgICAgICAgICAgICAgICAoVEVMT1BU X01FX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pID09IFROX05HX1JGIHx8CisgICAgICAgICAgICAg ICAgICAgICAgICAgVEVMT1BUX1VfTU9ERShURUxPUFRfRU5DUllQVElPTikgPT0gVE5fTkdfUkYp KQorICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICBh dXRoX2NyeXB0ID0gcGFyc2VkYXRbaSsxXSAmIEFVVEhfRU5DUllQVF9NQVNLOworICAgICAgICAg ICAgICAgICAgICBpZiAoYXV0aF9jcnlwdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgVEVM T1BUX01FX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pID0gVE5fTkdfTVU7CisgICAgICAgICAgICAg ICAgICAgICAgICBURUxPUFRfVV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9IFROX05HX01VOwor ICAgICAgICAgICAgICAgICAgICB9CisjZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLworICAgICAg ICAgICAgICAgICAgICBhdXRoZW50aWNhdGlvbl92ZXJzaW9uID0gQVVUSFRZUEVfS0VSQkVST1Nf VjQ7CisgICAgICAgICAgICAgICAgICAgIGF1dGhfaG93ID0gcGFyc2VkYXRbaSsxXSAmIEFVVEhf SE9XX01BU0s7CisgICAgICAgICAgICAgICAgICAgIGlmICggYXV0aF9ob3cgPT0gQVVUSF9IT1df T05FX1dBWSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFRFTE9QVF9NRV9NT0RFKFRFTE9Q VF9FTkNSWVBUSU9OKSA9IFROX05HX1JGOworICAgICAgICAgICAgICAgICAgICAgICAgVEVMT1BU X1VfTU9ERShURUxPUFRfRU5DUllQVElPTikgPSBUTl9OR19SRjsKKyAgICAgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICB9CisjZW5kaWYgLyogS1JCNCAqLworI2lmZGVmIE5UTE0KKyAgICAgICAgaWYgKCBh dG9rKEFVVEhUWVBFX05UTE0pICYmCisgICAgICAgICAgICAgcGFyc2VkYXRbaV0gPT0gQVVUSFRZ UEVfTlRMTSAmJgorICAgICAgICAgICAgIGNrX250bG1faXNfdmFsaWQoMSkgJiYKKyAgICAgICAg ICAgICBudGxtX2F1dGhfc2VuZCgpID09IDApIHsKKyAgICAgICAgICAgIGlmICgocGFyc2VkYXRb aSsxXSAmIEFVVEhfV0hPX01BU0spID09IEFVVEhfQ0xJRU5UX1RPX1NFUlZFUiAmJgorICAgICAg ICAgICAgICAgICB0bl9ob3dfb2socGFyc2VkYXRbaSsxXSkgJiYgdG5fZW5jX29rKHBhcnNlZGF0 W2krMV0pKSB7CisjaWZkZWYgQ0tfRU5DUllQVElPTgorICAgICAgICAgICAgICAgIC8qIE5UTE0g ZG9lcyBub3Qgc3VwcG9ydCBUZWxuZXQgRW5jcnlwdGlvbiAqLworICAgICAgICAgICAgICAgIGlm ICgocGFyc2VkYXRbaSsxXSAmIEFVVEhfRU5DUllQVF9NQVNLKSkKKyAgICAgICAgICAgICAgICAg ICAgY29udGludWU7CisgICAgICAgICAgICAgICAgYXV0aF9jcnlwdCA9IHBhcnNlZGF0W2krMV0g JiBBVVRIX0VOQ1JZUFRfTUFTSzsKKyNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCisgICAgICAg ICAgICAgICAgVEVMT1BUX01FX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pID0gVE5fTkdfUkY7Cisg ICAgICAgICAgICAgICAgVEVMT1BUX1VfTU9ERShURUxPUFRfRU5DUllQVElPTikgPSBUTl9OR19S RjsKKyAgICAgICAgICAgICAgICBhdXRoZW50aWNhdGlvbl92ZXJzaW9uID0gQVVUSFRZUEVfTlRM TTsKKyAgICAgICAgICAgICAgICBhdXRoX2hvdyA9IHBhcnNlZGF0W2krMV0gJiBBVVRIX0hPV19N QVNLOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9Cisj ZW5kaWYgLyogTlRMTSAqLworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGF1dGhfaG93ID09 IC0xKSB7ICAgICAgICAgICAgICAgLyogRGlkIHdlIGZpbmQgb25lPyAqLworICAgICAgICBzd2l0 Y2ggKCBhdXRoX3R5cGVfdXNlclswXSApIHsgIC8qIElmIG5vdCwgYWJvcnQgdGhlIG5lZ290aWF0 aW9uICovCisgICAgICAgIGNhc2UgQVVUSFRZUEVfTlVMTDoKKyAgICAgICAgICAgIGF1dGhfYWJv cnQoIlVzZXIgcmVmdXNlZCB0byBhY2NlcHQgYW55IGF1dGhlbnRpY2F0aW9uIG1ldGhvZCIsMCk7 CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBVVRIVFlQRV9BVVRPOgorICAgICAg ICAgICAgYXV0aF9hYm9ydCgiTm8gYXV0aGVudGljYXRpb24gbWV0aG9kIGF2YWlsYWJsZSIsIDAp OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgICAgIGNo YXIgbXNnWzgwXTsKKyAgICAgICAgICAgIGNrbWFrbXNnKG1zZyw4MCxBVVRIVFlQRV9OQU1FKGF1 dGhfdHlwZV91c2VyWzBdKSwKKyAgICAgICAgICAgICAgICAgICAgICAiIGNvdWxkIG5vdCBiZSBu ZWdvdGlhdGVkIixOVUxMLE5VTEwKKyAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAg ICBhdXRoX2Fib3J0KG1zZywgMCk7CisgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBhdXRo X2ZpbmlzaGVkKEFVVEhfUkVKRUNUKTsKKyAgICAgICAgcmV0dXJuIEFVVEhfRkFJTFVSRTsKKyAg ICB9CisKKyAgICBwcmludGYoIkF1dGhlbnRpY2F0aW5nIHdpdGggJXNcclxuIiwKKyAgICAgICAg ICAgIEFVVEhUWVBFX05BTUUoYXV0aGVudGljYXRpb25fdmVyc2lvbikpOworCisgICAgLyogU2Vu ZCBUZWxuZXQgQXV0aCBOYW1lIG1lc3NhZ2UgKGlmIG5lY2Vzc2FyeSkgKi8KKyAgICBzd2l0Y2gg KCBhdXRoZW50aWNhdGlvbl92ZXJzaW9uICkgeworICAgIGNhc2UgQVVUSFRZUEVfU1JQOgorICAg IGNhc2UgQVVUSFRZUEVfS0VSQkVST1NfVjQ6CisgICAgY2FzZSBBVVRIVFlQRV9LRVJCRVJPU19W NToKKyAgICBjYXNlIEFVVEhUWVBFX0dTU0FQSV9LUkI1OgorICAgICAgICAvKiBpZiB3ZSBkbyBu b3QgaGF2ZSBhIG5hbWUgdG8gbG9naW4gd2l0aCBnZXQgb25lIG5vdy4gKi8KKyAgICAgICAgd2hp bGUgKCBzelVzZXJOYW1lWzBdID09ICdcMCcgKSB7CisgICAgICAgICAgICBleHRlcm4gY2hhciAq IHRuX3ByX3VpZDsKKyAgICAgICAgICAgIGludCBvayA9IHVxX3R4dChOVUxMLAorICAgICAgICAg ICAgICAgICAgICAgdG5fcHJfdWlkICYmIHRuX3ByX3VpZFswXSA/IHRuX3ByX3VpZCA6ICJIb3N0 IFVzZXJpZDogIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCBOVUxMLCBzelVzZXJO YW1lLCA2MywgTlVMTCxERUZBVUxUX1VRX1RJTUVPVVQpOworICAgICAgICAgICAgaWYgKCAhb2sg KQorICAgICAgICAgICAgICAgIHJldHVybiBBVVRIX0ZBSUxVUkU7CisgICAgICAgIH0KKyAgICAg ICAgcGxlbiA9IHN0cmxlbihzelVzZXJOYW1lKTsKKyAgICAgICAgcG5hbWUgPSAodW5zaWduZWQg Y2hhciAqKSBzelVzZXJOYW1lOworCisgICAgICAgIC8qIENvbnN0cnVjdCBUZWxuZXQgRGVidWdn aW5nIE1lc3NhZ2UgKi8KKyAgICAgICAgaWYgKGRlYmxvZyB8fCB0bl9kZWIgfHwgZGVic2VzKSB7 CisgICAgICAgICAgICBja21ha3htc2codG5fbXNnLFROX01TR19MRU4sCisgICAgICAgICAgICAg ICAgICAgICAgICJURUxORVQgU0VOVCBTQiAiLFRFTE9QVChURUxPUFRfQVVUSEVOVElDQVRJT04p LAorICAgICAgICAgICAgICAgICAgICAgICAiIE5BTUUgIiwoY2hhciAqKXBuYW1lLCIgSUFDIFNF IixOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEws TlVMTAorICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIGRlYnVnKEYxMDAsdG5f bXNnLCIiLDApOworICAgICAgICAgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpIHRuX2RlYnVnKHRu X21zZyk7CisgICAgICAgIH0KKworICAgICAgICAvKiBDb25zdHJ1Y3QgYW5kIHNlbmQgQXV0aGVu dGljYXRpb24gTmFtZSBzdWJuZWdvdGlhdGlvbiAqLworICAgICAgICBpZiAoIHBsZW4gPCBzaXpl b2YoYnVmKSAtIDYgKSB7CisgICAgICAgICAgICBzcHJpbnRmKChjaGFyICopYnVmLCAiJWMlYyVj JWMiLCBJQUMsIFNCLCAKKyAgICAgICAgICAgICAgICAgICAgIFRFTE9QVF9BVVRIRU5USUNBVElP TiwKKyAgICAgICAgICAgICAgICAgICAgIFRFTFFVQUxfTkFNRSk7CisgICAgICAgICAgICBtZW1j cHkoJmJ1Zls0XSwgcG5hbWUsIHBsZW4pOyAgICAgICAgICAgICAgIC8qIHNhZmUgKi8KKyAgICAg ICAgICAgIHNwcmludGYoKGNoYXIgKikmYnVmW3BsZW4gKyA0XSwgIiVjJWMiLCBJQUMsIFNFKTsg ICAvKiBzYWZlICovCisjaWZkZWYgT1MyCisgICAgICAgICAgICBSZXF1ZXN0VGVsbmV0TXV0ZXgo IFNFTV9JTkRFRklOSVRFX1dBSVQgKTsKKyNlbmRpZgorICAgICAgICAgICAgdHRvbCgoQ0hBUiAq KWJ1ZiwgcGxlbis2KTsKKyNpZmRlZiBPUzIKKyAgICAgICAgICAgIFJlbGVhc2VUZWxuZXRNdXRl eCgpOworI2VuZGlmCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzcHJpbnRmKChjaGFy ICopYnVmLCAiJWMlYyVjJWMlYyVjIiwgSUFDLCBTQiwgCisgICAgICAgICAgICAgICAgICAgICBU RUxPUFRfQVVUSEVOVElDQVRJT04sCisgICAgICAgICAgICAgICAgICAgICBURUxRVUFMX05BTUUs IElBQywgU0UpOyAgICAvKiBzYWZlICovCisjaWZkZWYgT1MyCisgICAgICAgICAgICBSZXF1ZXN0 VGVsbmV0TXV0ZXgoIFNFTV9JTkRFRklOSVRFX1dBSVQgKTsKKyNlbmRpZgorICAgICAgICAgICAg dHRvbCgoQ0hBUiAqKWJ1ZiwgNik7CisjaWZkZWYgT1MyCisgICAgICAgICAgICBSZWxlYXNlVGVs bmV0TXV0ZXgoKTsKKyNlbmRpZgorICAgICAgICB9CisgICAgfQorCisgICAgLyogQ29uc3RydWN0 IEF1dGhlbnRpY2F0aW9uIE1vZGUgc3VibmVnb3RpYXRpb24gbWVzc2FnZSAoaWYgbmVjZXNzYXJ5 KSAqLworICAgIHN3aXRjaCAoIGF1dGhlbnRpY2F0aW9uX3ZlcnNpb24gKSB7CisgICAgY2FzZSBB VVRIVFlQRV9TUlA6CisgICAgY2FzZSBBVVRIVFlQRV9LRVJCRVJPU19WNDoKKyAgICBjYXNlIEFV VEhUWVBFX0tFUkJFUk9TX1Y1OgorICAgIGNhc2UgQVVUSFRZUEVfR1NTQVBJX0tSQjU6CisgICAg Y2FzZSBBVVRIVFlQRV9OVExNOgorICAgICAgICBtb2RlID0gQVVUSF9DTElFTlRfVE9fU0VSVkVS IHwgKGF1dGhfaG93ICYgQVVUSF9IT1dfTUFTSykgfCBhdXRoX2NyeXB0CisjaWZkZWYgVVNFX0lO SV9DUkVEX0ZXRAorICAgICAgICAgICAgICAgfCAoKChhdXRoZW50aWNhdGlvbl92ZXJzaW9uID09 IEFVVEhUWVBFX0tFUkJFUk9TX1Y1KSAmJgorICAgICAgICAgICAgICAgICAgYXV0aF9md2QpP0lO SV9DUkVEX0ZXRF9PTjpJTklfQ1JFRF9GV0RfT0ZGKQorI2VuZGlmIC8qIFVTRV9JTklfQ1JFRF9G V0QgKi8KKyAgICAgICAgICAgICAgIDsKKyAgICAgICAgc3ByaW50ZigoY2hhciAqKWJ1ZiwgIiVj JWMlYyVjJWMlYyVjIiwKKyAgICAgICAgICAgICAgICAgSUFDLCBTQiwgVEVMT1BUX0FVVEhFTlRJ Q0FUSU9OLAorICAgICAgICAgICAgICAgICBURUxRVUFMX0lTLAorICAgICAgICAgICAgICAgICBh dXRoZW50aWNhdGlvbl92ZXJzaW9uLAorICAgICAgICAgICAgICAgICBtb2RlLAorICAgICAgICAg ICAgICAgICBLUkJfQVVUSCk7ICAgICAvKiBzYWZlICovCisgICAgICAgIGJyZWFrOworICAgIH0K KworICAgIC8qIFNlbmQgaW5pdGlhbCBhdXRoZW50aWNhdGlvbiBkYXRhICovCisgICAgc3dpdGNo ICggYXV0aGVudGljYXRpb25fdmVyc2lvbiApIHsKKyNpZmRlZiBDS19TU0wKKyAgICBjYXNlIEFV VEhUWVBFX1NTTDoKKyAgICAgICAgU2VuZFNTTEF1dGhTQihTU0xfU1RBUlQsTlVMTCwwKTsKKyAg ICAgICAgYnJlYWs7CisjZW5kaWYgLyogU1NMICovCisjaWZkZWYgQ0tfU1JQCisgICAgY2FzZSBB VVRIVFlQRV9TUlA6CisgICAgICAgIHNwcmludGYoJmJ1Zls3XSwgIiVjJWMiLCBJQUMsIFNFKTsg ICAgICAvKiBzYWZlICovCisgICAgICAgIGlmIChkZWJsb2cgfHwgdG5fZGViIHx8IGRlYnNlcykg eworICAgICAgICAgICAgY2ttYWt4bXNnKHRuX21zZyxUTl9NU0dfTEVOLAorICAgICAgICAgICAg ICAgICAgICAgICJURUxORVQgU0VOVCBTQiAiLFRFTE9QVChURUxPUFRfQVVUSEVOVElDQVRJT04p LAorICAgICAgICAgICAgICAgICAgICAgICIgSVMgIixBVVRIVFlQRV9OQU1FKGF1dGhlbnRpY2F0 aW9uX3ZlcnNpb24pLAorICAgICAgICAgICAgICAgICAgICAgICIgQVVUSCAiLEFVVEhNT0RFX05B TUUobW9kZSksIiBJQUMgU0UiLAorICAgICAgICAgICAgICAgICAgICAgIE5VTEwsTlVMTCxOVUxM LE5VTEwsTlVMTAorICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIGRlYnVnKEYx MDAsdG5fbXNnLCIiLDApOworICAgICAgICAgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpIHRuX2Rl YnVnKHRuX21zZyk7CisgICAgICAgIH0KKyNpZmRlZiBPUzIKKyAgICAgICAgUmVxdWVzdFRlbG5l dE11dGV4KCBTRU1fSU5ERUZJTklURV9XQUlUICk7CisjZW5kaWYKKyAgICAgICAgdHRvbCgoQ0hB UiAqKWJ1ZiwgOSk7CisjaWZkZWYgT1MyCisgICAgICAgIFJlbGVhc2VUZWxuZXRNdXRleCgpOwor I2VuZGlmCisgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIFNSUCAqLworI2lmZGVmIE5UTE0KKyAg ICBjYXNlIEFVVEhUWVBFX05UTE06IHsKKyAgICAgICAgaW50IGxlbmd0aCA9IDA7CisKKyAgICAg ICAgZm9yICggaT0wIDsgaTxOVExNU2VjQnVmWzBdLmNiQnVmZmVyIDsgaSsrICkgeworICAgICAg ICAgICAgaWYgKCAoKGNoYXIgKilOVExNU2VjQnVmWzBdLnB2QnVmZmVyKVtpXSA9PSBJQUMgKQor ICAgICAgICAgICAgICAgIGlhY2NudCsrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCAoIDIq c2l6ZW9mKFVMT05HKSArIE5UTE1TZWNCdWZbMF0uY2JCdWZmZXIgKyBpYWNjbnQgKyAxMCkgIDwK KyAgICAgICAgICAgICBzaXplb2YoYnVmKSApIHsKKyAgICAgICAgICAgIGxlbmd0aCA9IGNvcHlf Zm9yX25ldCgmYnVmWzddLChjaGFyICopJk5UTE1TZWNCdWZbMF0sCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDIqc2l6ZW9mKFVMT05HKSk7CisgICAgICAgICAgICBsZW5ndGgg Kz0gY29weV9mb3JfbmV0KCZidWZbNytsZW5ndGhdLCBOVExNU2VjQnVmWzBdLnB2QnVmZmVyLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5UTE1TZWNCdWZbMF0uY2JCdWZmZXIp OworICAgICAgICB9CisgICAgICAgIHNwcmludGYoJmJ1Zls3K2xlbmd0aF0sICIlYyVjIiwgSUFD LCBTRSk7CisKKyAgICAgICAgaWYgKGRlYmxvZyB8fCB0bl9kZWIgfHwgZGVic2VzKSB7CisgICAg ICAgICAgICBpbnQgaTsKKyAgICAgICAgICAgIGNrbWFreG1zZyh0bl9tc2csVE5fTVNHX0xFTiwK KyAgICAgICAgICAgICAgICAgICAgICAiVEVMTkVUIFNFTlQgU0IgIixURUxPUFQoVEVMT1BUX0FV VEhFTlRJQ0FUSU9OKSwKKyAgICAgICAgICAgICAgICAgICAgICAiIElTICIsQVVUSFRZUEVfTkFN RShhdXRoZW50aWNhdGlvbl92ZXJzaW9uKSwiICIsCisgICAgICAgICAgICAgICAgICAgICAgQVVU SE1PREVfTkFNRShtb2RlKSwiIE5UTE1fQVVUSCAiLAorICAgICAgICAgICAgICAgICAgICAgICBO VUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwKKyAgICAgICAgICAgICAgICAgICAgICApOworICAgICAg ICAgICAgdG5faGV4KChjaGFyICopdG5fbXNnLFROX01TR19MRU4sJmJ1Zls3XSxsZW5ndGgpOwor ICAgICAgICAgICAgY2tzdHJuY2F0KHRuX21zZywiSUFDIFNFIixUTl9NU0dfTEVOKTsKKyAgICAg ICAgICAgIGRlYnVnKEYxMDAsdG5fbXNnLCIiLDApOworICAgICAgICAgICAgaWYgKHRuX2RlYiB8 fCBkZWJzZXMpIHRuX2RlYnVnKHRuX21zZyk7CisgICAgICAgIH0KKyNpZmRlZiBPUzIKKyAgICAg ICAgUmVxdWVzdFRlbG5ldE11dGV4KCBTRU1fSU5ERUZJTklURV9XQUlUICk7CisjZW5kaWYKKyAg ICAgICAgdHRvbCgoQ0hBUiAqKWJ1ZiwgbGVuZ3RoKzkpOworI2lmZGVmIE9TMgorICAgICAgICBS ZWxlYXNlVGVsbmV0TXV0ZXgoKTsKKyNlbmRpZgorICAgICAgICBicmVhazsKKyAgICB9CisjZW5k aWYgLyogTlRMTSAqLworI2lmZGVmIEtSQjQKKyAgICBjYXNlIEFVVEhUWVBFX0tFUkJFUk9TX1Y0 OgorICAgICAgICBmb3IgKCBpPTAgOyBpPGs0X2F1dGgubGVuZ3RoIDsgaSsrICkgeworICAgICAg ICAgICAgaWYgKCBrNF9hdXRoLmRhdFtpXSA9PSBJQUMgKQorICAgICAgICAgICAgICAgIGlhY2Nu dCsrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCBrNF9hdXRoLmxlbmd0aCArIGlhY2NudCAr IDEwIDwgc2l6ZW9mKGJ1ZikgKQorICAgICAgICAgIGs0X2F1dGgubGVuZ3RoID0gY29weV9mb3Jf bmV0KCZidWZbN10sIGs0X2F1dGguZGF0LCBrNF9hdXRoLmxlbmd0aCk7CisgICAgICAgIGVsc2UK KyAgICAgICAgICAgIGs0X2F1dGgubGVuZ3RoID0gMDsKKyAgICAgICAgc3ByaW50ZigmYnVmW2s0 X2F1dGgubGVuZ3RoKzddLCAiJWMlYyIsIElBQywgU0UpOworCisgICAgICAgIGlmIChkZWJsb2cg fHwgdG5fZGViIHx8IGRlYnNlcykgeworICAgICAgICAgICAgaW50IGk7CisgICAgICAgICAgICBj a21ha3htc2codG5fbXNnLFROX01TR19MRU4sCisgICAgICAgICAgICAgICAgICAgICAgIlRFTE5F VCBTRU5UIFNCICIsVEVMT1BUKFRFTE9QVF9BVVRIRU5USUNBVElPTiksIiBJUyAiLAorICAgICAg ICAgICAgICAgICAgICAgIEFVVEhUWVBFX05BTUUoYXV0aGVudGljYXRpb25fdmVyc2lvbiksIiAi LAorICAgICAgICAgICAgICAgICAgICAgIEFVVEhNT0RFX05BTUUobW9kZSksIiBBVVRIICIsCisg ICAgICAgICAgICAgICAgICAgICAgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMCisgICAgICAgICAg ICAgICAgICAgICApOworICAgICAgICAgICAgdG5faGV4KChjaGFyICopdG5fbXNnLFROX01TR19M RU4sJmJ1Zls3XSxrNF9hdXRoLmxlbmd0aCk7CisgICAgICAgICAgICBja3N0cm5jYXQodG5fbXNn LCJJQUMgU0UiLFROX01TR19MRU4pOworICAgICAgICAgICAgZGVidWcoRjEwMCx0bl9tc2csIiIs MCk7CisgICAgICAgICAgICBpZiAodG5fZGViIHx8IGRlYnNlcykgdG5fZGVidWcodG5fbXNnKTsK KyAgICAgICAgfQorI2lmZGVmIE9TMgorICAgICAgICBSZXF1ZXN0VGVsbmV0TXV0ZXgoIFNFTV9J TkRFRklOSVRFX1dBSVQgKTsKKyNlbmRpZgorICAgICAgICB0dG9sKChDSEFSICopYnVmLCBrNF9h dXRoLmxlbmd0aCs5KTsKKyNpZmRlZiBPUzIKKyAgICAgICAgUmVsZWFzZVRlbG5ldE11dGV4KCk7 CisjZW5kaWYKKworI2lmbmRlZiBSRU1PVkVfRk9SX0VYUE9SVAorI2lmZGVmIENLX0VOQ1JZUFRJ T04KKyAgICAgICAgLyoKKyAgICAgICAgICogSWYgd2UgYXJlIGRvaW5nIG11dHVhbCBhdXRoZW50 aWNhdGlvbiwgZ2V0IHNldCB1cCB0byBzZW5kCisgICAgICAgICAqIHRoZSBjaGFsbGVuZ2UsIGFu ZCB2ZXJpZnkgaXQgd2hlbiB0aGUgcmVzcG9uc2UgY29tZXMgYmFjay4KKyAgICAgICAgICovCisg ICAgICAgIGlmICgoYXV0aF9ob3cgJiBBVVRIX0hPV19NQVNLKSA9PSBBVVRIX0hPV19NVVRVQUwp IHsKKyAgICAgICAgICAgIHJlZ2lzdGVyIGludCBpOworICAgICAgICAgICAgaW50IHJjID0gMDsK KworI2lmZGVmIE1JVF9DVVJSRU5UCisgICAgICAgICAgICBkYXRhLmRhdGEgPSBjcmVkLnNlc3Np b247CisgICAgICAgICAgICBkYXRhLmxlbmd0aCA9IDg7IC8qIHNpemVvZihjcmVkLnNlc3Npb24p ICovOworCisgICAgICAgICAgICBpZiAoY29kZSA9IGtyYjVfY19yYW5kb21fc2VlZChrNV9jb250 ZXh0LCAmZGF0YSkpIHsKKyAgICAgICAgICAgICAgICBjb21fZXJyKCJsaWJ0ZWxuZXQiLCBjb2Rl LAorICAgICAgICAgICAgICAgICAgICAgICAgICJ3aGlsZSBzZWVkaW5nIHJhbmRvbSBudW1iZXIg Z2VuZXJhdG9yIik7CisgICAgICAgICAgICAgICAgcmV0dXJuKDApOworICAgICAgICAgICAgfQor CisgICAgICAgICAgICBpZiAoY29kZSA9IGtyYjVfY19tYWtlX3JhbmRvbV9rZXkoazVfY29udGV4 dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRU5DVFlQ RV9ERVNfQ0JDX1JBVywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJnJhbmRvbV9rZXkpKSB7CisgICAgICAgICAgICAgICAgY29tX2VycigibGlidGVsbmV0 IiwgY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAid2hpbGUgY3JlYXRpbmcgcmFuZG9t IHNlc3Npb24ga2V5Iik7CisgICAgICAgICAgICAgICAgcmV0dXJuKDApOworICAgICAgICAgICAg fQorCisgICAgICAgICAgICAvKiB0aGUga3JiNCBjb2RlIHVzZXMgZWNiIG1vZGUsIGJ1dCBvbiBh IHNpbmdsZSBibG9jaworICAgICAgICAgICAgd2l0aCBhIHplcm8gaXZlYywgZWNiIGFuZCBjYmMg YXJlIHRoZSBzYW1lICovCisgICAgICAgICAgICBrNF9rcmJrZXkuZW5jdHlwZSA9IEVOQ1RZUEVf REVTX0NCQ19SQVc7CisgICAgICAgICAgICBrNF9rcmJrZXkubGVuZ3RoID0gODsKKyAgICAgICAg ICAgIGs0X2tyYmtleS5jb250ZW50cyA9IGNyZWQuc2Vzc2lvbjsKKworICAgICAgICAgICAgZW5j ZGF0YS5jaXBoZXJ0ZXh0LmRhdGEgPSByYW5kb21fa2V5LmNvbnRlbnRzOworICAgICAgICAgICAg ZW5jZGF0YS5jaXBoZXJ0ZXh0Lmxlbmd0aCA9IHJhbmRvbV9rZXkubGVuZ3RoOworICAgICAgICAg ICAgZW5jZGF0YS5lbmN0eXBlID0gRU5DVFlQRV9VTktOT1dOOworCisgICAgICAgICAgICBkYXRh LmRhdGEgPSBrNF9zZXNzaW9uX2tleTsKKyAgICAgICAgICAgIGRhdGEubGVuZ3RoID0gODsKKwor ICAgICAgICAgICAgY29kZSA9IGtyYjVfY19kZWNyeXB0KGs1X2NvbnRleHQsICZrNF9rcmJrZXks IDAsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlbmNkYXRhLCAmZGF0 YSk7CisKKyAgICAgICAgICAgIGtyYjVfZnJlZV9rZXlibG9ja19jb250ZW50cyhrNV9jb250ZXh0 LCAmcmFuZG9tX2tleSk7CisKKyAgICAgICAgICAgIGlmIChjb2RlKSB7CisgICAgICAgICAgICAg ICAgY29tX2VycigibGlidGVsbmV0IiwgY29kZSwgIndoaWxlIGVuY3J5cHRpbmcgcmFuZG9tIGtl eSIpOworICAgICAgICAgICAgICAgIHJldHVybigwKTsKKyAgICAgICAgICAgIH0KKworICAgICAg ICAgICAgZW5jZGF0YS5jaXBoZXJ0ZXh0LmRhdGEgPSBrNF9zZXNzaW9uX2tleTsKKyAgICAgICAg ICAgIGVuY2RhdGEuY2lwaGVydGV4dC5sZW5ndGggPSA4OworICAgICAgICAgICAgZW5jZGF0YS5l bmN0eXBlID0gRU5DVFlQRV9VTktOT1dOOworCisgICAgICAgICAgICBkYXRhLmRhdGEgPSBrNF9j aGFsbGVuZ2U7CisgICAgICAgICAgICBkYXRhLmxlbmd0aCA9IDg7CisKKyAgICAgICAgICAgIGNv ZGUgPSBrcmI1X2NfZGVjcnlwdChrNV9jb250ZXh0LCAmazRfa3Jia2V5LCAwLCAwLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZW5jZGF0YSwgJmRhdGEpOworI2Vsc2UgLyog TUlUX0NVUlJFTlQgKi8KKyAgICAgICAgICAgIG1lbXNldChrNF9zY2hlZCwwLHNpemVvZihTY2hl ZHVsZSkpOworICAgICAgICAgICAgY2toZXhkdW1wKCJhdXRoX3NlbmQiLGNyZWQuc2Vzc2lvbiw4 KTsKKyAgICAgICAgICAgIHJjID0gZGVzX2tleV9zY2hlZChjcmVkLnNlc3Npb24sIGs0X3NjaGVk KTsKKyAgICAgICAgICAgIGlmICggcmMgPT0gLTEgKSB7CisgICAgICAgICAgICAgICAgcHJpbnRm KCI/SW52YWxpZCBERVMga2V5IHNwZWNpZmllZCBpbiBjcmVkZW50aWFsc1xyXG4iKTsKKyAgICAg ICAgICAgICAgICBkZWJ1ZyhGMTEwLCJhdXRoX3NlbmQiLAorICAgICAgICAgICAgICAgICAgICAg ICJpbnZhbGlkIERFUyBLZXkgc3BlY2lmaWVkIGluIGNyZWRlbnRpYWxzIiwwKTsKKyAgICAgICAg ICAgIH0gZWxzZSBpZiAoIHJjID09IC0yICkgeworICAgICAgICAgICAgICAgIHByaW50ZigiP1dl YWsgREVTIGtleSBzcGVjaWZpZWQgaW4gY3JlZGVudGlhbHNcclxuIik7CisgICAgICAgICAgICAg ICAgZGVidWcoRjExMCwiYXV0aF9zZW5kIiwKKyAgICAgICAgICAgICAgICAgICAgICAid2VhayBE RVMgS2V5IHNwZWNpZmllZCBpbiBjcmVkZW50aWFscyIsMCk7CisgICAgICAgICAgICB9IGVsc2Ug aWYgKCByYyAhPSAwICkgeworICAgICAgICAgICAgICAgIHByaW50ZigiP0RFUyBLZXkgU2NoZWR1 bGUgbm90IHNldCBieSBjcmVkZW50aWFsc1xyXG4iKTsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhG MTEwLCJhdXRoX3NlbmQiLAorICAgICAgICAgICAgICAgICAgICAgICJERVMgS2V5IFNjaGVkdWxl IG5vdCBzZXQgYnkgY3JlZGVudGlhbHMiLDApOworICAgICAgICAgICAgfQorICAgICAgICAgICAg Y2toZXhkdW1wKCJhdXRoX3NlbmQgc2NoZWR1bGUiLGs0X3NjaGVkLDgqMTYpOworCisgICAgICAg ICAgICBkZXNfc2V0X3JhbmRvbV9nZW5lcmF0b3Jfc2VlZChjcmVkLnNlc3Npb24pOworCisgICAg ICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgZGVzX25ld19yYW5kb21fa2V5KGs0X3Nlc3Np b25fa2V5KTsKKyAgICAgICAgICAgICAgICBkZXNfZml4dXBfa2V5X3Bhcml0eShrNF9zZXNzaW9u X2tleSk7CisgICAgICAgICAgICB9IHdoaWxlICggY2tfZGVzX2lzX3dlYWtfa2V5KGs0X3Nlc3Np b25fa2V5KSApOworCisgICAgICAgICAgICBja2hleGR1bXAoImF1dGhfc2VuZCBkZXNfbmV3X3Jh bmRvbV9rZXkoazRfc2Vzc2lvbl9rZXkpIiwKKyAgICAgICAgICAgICAgICAgICAgIGs0X3Nlc3Np b25fa2V5LDgpOworCisgICAgICAgICAgICAvKiBEZWNyeXB0IHRoZSBzZXNzaW9uIGtleSBzbyB0 aGF0IHdlIGNhbiBzZW5kIGl0IHRvIHRoZSAqLworICAgICAgICAgICAgLyogaG9zdCBhcyBhIGNo YWxsZW5nZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNpZmRlZiBOVAor ICAgICAgICAgICAgZGVzX2VjYl9lbmNyeXB0KGs0X3Nlc3Npb25fa2V5LCBrNF9zZXNzaW9uX2tl eSwgazRfc2NoZWQsIDApOworI2Vsc2UgLyogTlQgKi8KKyAgICAgICAgICAgIGRlc19lY2JfZW5j cnlwdCgmazRfc2Vzc2lvbl9rZXksICZrNF9zZXNzaW9uX2tleSwgazRfc2NoZWQsIDApOworI2Vu ZGlmIC8qIE5UICovCisgICAgICAgICAgICBja2hleGR1bXAoCisgICAgICAgICAgICAgICAgImF1 dGhfc2VuZCBkZXNfZWNiX2VuY3J5cHQoazRfc2Vzc2lvbl9rZXksazRfc2Vzc2lvbl9rZXksMCki LAorICAgICAgICAgICAgICAgIGs0X3Nlc3Npb25fa2V5LDgKKyAgICAgICAgICAgICAgICAgICAg KTsKKyAgICAgICAgICAgIC8qIFByZXBhcmUgdGhlIHJlc3VsdCBvZiB0aGUgY2hhbGxlbmdlICov CisgICAgICAgICAgICAvKiBEZWNyeXB0IHRoZSBzZXNzaW9uX2tleSwgYWRkIDEsIGFuZCB0aGVu IGVuY3J5cHQgaXQgKi8KKyAgICAgICAgICAgIC8qIFRoZSByZXN1bHQgc3RvcmVkIGluIGs0X2No YWxsZW5nZSBzaG91bGQgbWF0Y2ggdGhlICAqLworICAgICAgICAgICAgLyogS1JCNF9SRVNQT05T RSB2YWx1ZSBmcm9tIHRoZSBob3N0LiAgICAgICAgICAgICAgICAgICovCisjaWZkZWYgTlQKKyAg ICAgICAgICAgIGRlc19lY2JfZW5jcnlwdChrNF9zZXNzaW9uX2tleSwgazRfY2hhbGxlbmdlLCBr NF9zY2hlZCwgMCk7CisjZWxzZSAvKiBOVCAqLworICAgICAgICAgICAgZGVzX2VjYl9lbmNyeXB0 KCZrNF9zZXNzaW9uX2tleSwgJms0X2NoYWxsZW5nZSwgazRfc2NoZWQsIDApOworI2VuZGlmIC8q IE5UICovCisKKyAgICAgICAgICAgIGNraGV4ZHVtcCgiYXV0aF9zZW5kIGRlc19lY2JfZW5jcnlw dChrNF9zZXNzaW9uX2tleSxrNF9jaGFsbGVuZ2UsMCkiLAorICAgICAgICAgICAgICAgICAgICAg azRfY2hhbGxlbmdlLDgpOworI2VuZGlmIC8qIE1JVF9DVVJSRU5UICovCisgICAgICAgICAgICAv KgorICAgICAgICAgICAgKiBJbmNyZW1lbnQgdGhlIGNoYWxsZW5nZSBieSAxLCBhbmQgZW5jcnlw dCBpdCBmb3IKKyAgICAgICAgICAgICogbGF0ZXIgY29tcGFyaXNvbi4KKyAgICAgICAgICAgICov CisgICAgICAgICAgICBmb3IgKGkgPSA3OyBpID49IDA7IC0taSkgeworICAgICAgICAgICAgICAg IHJlZ2lzdGVyIGludCB4OworICAgICAgICAgICAgICAgIHggPSAodW5zaWduZWQgaW50KWs0X2No YWxsZW5nZVtpXSArIDE7CisgICAgICAgICAgICAgICAgazRfY2hhbGxlbmdlW2ldID0geDsgICAg LyogaWdub3JlIG92ZXJmbG93ICovCisgICAgICAgICAgICAgICAgaWYgKHggPCAyNTYpICAgICAg ICAgICAgLyogaWYgbm8gb3ZlcmZsb3csIGFsbCBkb25lICovCisgICAgICAgICAgICAgICAgICAg IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2toZXhkdW1wKCJhdXRoX3NlbmQg azRfY2hhbGxlbmdlKzEiLGs0X2NoYWxsZW5nZSw4KTsKKyNpZmRlZiBNSVRfQ1VSUkVOVAorICAg ICAgICAgICAgZGF0YS5kYXRhID0gazRfY2hhbGxlbmdlOworICAgICAgICAgICAgZGF0YS5sZW5n dGggPSA4OworCisgICAgICAgICAgICBlbmNkYXRhLmNpcGhlcnRleHQuZGF0YSA9IGs0X2NoYWxs ZW5nZTsKKyAgICAgICAgICAgIGVuY2RhdGEuY2lwaGVydGV4dC5sZW5ndGggPSA4OworICAgICAg ICAgICAgZW5jZGF0YS5lbmN0eXBlID0gRU5DVFlQRV9VTktOT1dOOworCisgICAgICAgICAgICBp ZiAoY29kZSA9IGtyYjVfY19lbmNyeXB0KGs1X2NvbnRleHQsICZrNF9rcmJrZXksIDAsIDAsICZk YXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVuY2RhdGEpKSB7 CisgICAgICAgICAgICAgICAgY29tX2VycigibGlidGVsbmV0IiwgY29kZSwgIndoaWxlIGVuY3J5 cHRpbmcgcmFuZG9tIGtleSIpOworICAgICAgICAgICAgICAgIHJldHVybigwKTsKKyAgICAgICAg ICAgIH0KKyNlbHNlIC8qIE1JVF9DVVJSRU5UICovCisjaWZkZWYgTlQKKyAgICAgICAgICAgIGRl c19lY2JfZW5jcnlwdChrNF9jaGFsbGVuZ2UsIGs0X2NoYWxsZW5nZSwgazRfc2NoZWQsIDEpOwor I2Vsc2UgLyogTlQgKi8KKyAgICAgICAgICAgIGRlc19lY2JfZW5jcnlwdCgmazRfY2hhbGxlbmdl LCAmazRfY2hhbGxlbmdlLCBrNF9zY2hlZCwgMSk7CisjZW5kaWYgLyogTlQgKi8KKyAgICAgICAg ICAgIGNraGV4ZHVtcCgiYXV0aF9zZW5kIGRlc19lY2JfZW5jcnlwdChrNF9zZXNzaW9uX2tleSxr NF9jaGFsbGVuZ2UsMSkiLAorICAgICAgICAgICAgICAgICAgICAgazRfY2hhbGxlbmdlLDgpOwor I2VuZGlmIC8qIE1JVF9DVVJSRU5UICovCisgICAgICAgIH0KKyNlbmRpZiAgLyogRU5DUllQVElP TiAqLworI2VuZGlmIC8qIFJFTU9WRV9GT1JfRVhQT1JUICovCisgICAgICAgIGJyZWFrOworI2Vu ZGlmIC8qIEtSQjQgKi8KKyNpZmRlZiBHU1NBUElfS1JCNQorICAgIGNhc2UgQVVUSFRZUEVfR1NT QVBJX0tSQjU6CisgICAgICAgIGZvciAoIGk9MCA7IGk8Z3NzX3NlbmRfdG9rLmxlbmd0aCA7IGkr KyApIHsKKyAgICAgICAgICAgIGlmICggKChjaGFyICopZ3NzX3NlbmRfdG9rLnZhbHVlKVtpXSA9 PSBJQUMgKQorICAgICAgICAgICAgICAgIGlhY2NudCsrOworICAgICAgICB9CisKKyAgICAgICAg aWYgKCBnc3Nfc2VuZF90b2subGVuZ3RoICsgaWFjY250ICsgMTAgPCBzaXplb2YoYnVmKSApCisg ICAgICAgICAgICBnc3Nfc2VuZF90b2subGVuZ3RoID0gY29weV9mb3JfbmV0KCZidWZbN10sIGdz c19zZW5kX3Rvay52YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZ3NzX3NlbmRfdG9rLmxlbmd0aCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg IGdzc19zZW5kX3Rvay5sZW5ndGggPSAwOworICAgICAgICBzcHJpbnRmKCZidWZbZ3NzX3NlbmRf dG9rLmxlbmd0aCs3XSwgIiVjJWMiLCBJQUMsIFNFKTsgICAgICAgLyogc2FmZSAqLworICAgICAg ICBpZiAoZGVibG9nIHx8IHRuX2RlYiB8fCBkZWJzZXMpIHsKKyAgICAgICAgICAgIGludCBpOwor ICAgICAgICAgICAgY2ttYWt4bXNnKHRuX21zZyxUTl9NU0dfTEVOLAorICAgICAgICAgICAgICAg ICAgICAgICJURUxORVQgU0VOVCBTQiAiLFRFTE9QVChURUxPUFRfQVVUSEVOVElDQVRJT04pLCIg SVMgIiwKKyAgICAgICAgICAgICAgICAgICAgICBBVVRIVFlQRV9OQU1FKGF1dGhlbnRpY2F0aW9u X3ZlcnNpb24pLCIgIiwKKyAgICAgICAgICAgICAgICAgICAgICBBVVRITU9ERV9OQU1FKG1vZGUp LCIgQVVUSCAiLAorICAgICAgICAgICAgICAgICAgICAgIE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVM TAorICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIHRuX2hleCgoY2hhciAqKXRu X21zZyxUTl9NU0dfTEVOLCZidWZbN10sZ3NzX3NlbmRfdG9rLmxlbmd0aCk7CisgICAgICAgICAg ICBja3N0cm5jYXQodG5fbXNnLCJJQUMgU0UiLFROX01TR19MRU4pOworICAgICAgICAgICAgZGVi dWcoRjEwMCx0bl9tc2csIiIsMCk7CisgICAgICAgICAgICBpZiAodG5fZGViIHx8IGRlYnNlcykg dG5fZGVidWcodG5fbXNnKTsKKyAgICAgICAgfQorI2lmZGVmIE9TMgorICAgICAgICBSZXF1ZXN0 VGVsbmV0TXV0ZXgoIFNFTV9JTkRFRklOSVRFX1dBSVQgKTsKKyNlbmRpZgorICAgICAgICB0dG9s KChDSEFSICopYnVmLCBnc3Nfc2VuZF90b2subGVuZ3RoKzkpOworI2lmZGVmIE9TMgorICAgICAg ICBSZWxlYXNlVGVsbmV0TXV0ZXgoKTsKKyNlbmRpZgorICAgICAgICBicmVhazsKKyNlbmRpZiAv KiBHU1NBUElfS1JCNSAqLworI2lmZGVmIEtSQjUKKyAgICBjYXNlIEFVVEhUWVBFX0tFUkJFUk9T X1Y1OgorICAgICAgICBkZWJ1ZyhGMTExLCJhdXRoX3NlbmQgS1JCNSIsIms1X2F1dGgubGVuZ3Ro IixrNV9hdXRoLmxlbmd0aCk7CisgICAgICAgIGZvciAoIGk9MCA7IGk8azVfYXV0aC5sZW5ndGgg OyBpKysgKSB7CisgICAgICAgICAgICBpZiAoIChjaGFyICopazVfYXV0aC5kYXRhW2ldID09IElB QyApCisgICAgICAgICAgICAgICAgaWFjY250Kys7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCBr NV9hdXRoLmxlbmd0aCArIGlhY2NudCArIDEwIDwgc2l6ZW9mKGJ1ZikgKSB7CisJICAgIGs1X2F1 dGgubGVuZ3RoID0gY29weV9mb3JfbmV0KCZidWZbN10sCisJCQkJCSAgKENIQVIgKilrNV9hdXRo LmRhdGEsCisJCQkJCSAgazVfYXV0aC5sZW5ndGgpOworCX0gZWxzZSB7CisgICAgICAgICAgZGVi dWcoRjEwMCwiYXV0aF9zZW5kKCkgS1JCNSBhdXRoIGRhdGEgdG9vIGxhcmdlIGZvciBidWZmZXIi LCIiLDApOworICAgICAgICAgIGs1X2F1dGgubGVuZ3RoID0gMDsKKyAgICAgICAgfQorCisgICAg ICAgIHNwcmludGYoKGNoYXIgKikmYnVmW2s1X2F1dGgubGVuZ3RoKzddLCAiJWMlYyIsIElBQywg U0UpOyAvKiBzYWZlICovCisgICAgICAgIGlmIChkZWJsb2cgfHwgdG5fZGViIHx8IGRlYnNlcykg eworICAgICAgICAgICAgaW50IGk7CisgICAgICAgICAgICBja21ha3htc2codG5fbXNnLFROX01T R19MRU4sCisgICAgICAgICAgICAgICAgICAgICAgIlRFTE5FVCBTRU5UIFNCICIsVEVMT1BUKFRF TE9QVF9BVVRIRU5USUNBVElPTiksIiBJUyAiLAorICAgICAgICAgICAgICAgICAgICAgIEFVVEhU WVBFX05BTUUoYXV0aGVudGljYXRpb25fdmVyc2lvbiksIiAiLAorICAgICAgICAgICAgICAgICAg ICAgIEFVVEhNT0RFX05BTUUobW9kZSksIiBBVVRIICIsCisgICAgICAgICAgICAgICAgICAgICAg TlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMCisgICAgICAgICAgICAgICAgICAgICApOworICAgICAg ICAgICAgdG5faGV4KChDSEFSICopdG5fbXNnLFROX01TR19MRU4sJmJ1Zls3XSxrNV9hdXRoLmxl bmd0aCk7CisgICAgICAgICAgICBja3N0cm5jYXQodG5fbXNnLCJJQUMgU0UiLFROX01TR19MRU4p OworICAgICAgICAgICAgZGVidWcoRjEwMCx0bl9tc2csIiIsMCk7CisgICAgICAgICAgICBpZiAo dG5fZGViIHx8IGRlYnNlcykgdG5fZGVidWcodG5fbXNnKTsKKyAgICAgICAgfQorI2lmZGVmIE9T MgorICAgICAgICBSZXF1ZXN0VGVsbmV0TXV0ZXgoIFNFTV9JTkRFRklOSVRFX1dBSVQgKTsKKyNl bmRpZgorICAgICAgICB0dG9sKChDSEFSICopYnVmLCBrNV9hdXRoLmxlbmd0aCs5KTsKKyNpZmRl ZiBPUzIKKyAgICAgICAgUmVsZWFzZVRlbG5ldE11dGV4KCk7CisjZW5kaWYKKyNpZmRlZiBIRUlN REFMCisgICAgICAgIGtyYjVfZGF0YV9mcmVlKCZrNV9hdXRoKTsKKyNlbHNlIC8qIEhFSU1EQUwg Ki8KKyAgICAgICAga3JiNV9mcmVlX2RhdGFfY29udGVudHMoazVfY29udGV4dCwmazVfYXV0aCk7 CisgICAgICAgIG1lbXNldCgmazVfYXV0aCwwLHNpemVvZihrcmI1X2RhdGEpKTsKKyNlbmRpZiAv KiBIRUlNREFMICovCisgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIEtSQjUgKi8KKyAgICB9Cisg ICAgcmV0dXJuIEFVVEhfU1VDQ0VTUzsKK30KKworLyoKKyAqIEZ1bmN0aW9uOiBQYXJzZSBhdXRo ZW50aWNhdGlvbiBSRVBMWSBjb21tYW5kCisgKgorICogUGFyYW1ldGVyczoKKyAqICBwYXJzZWRh dCAtIHRoZSBzdWItY29tbWFuZCBkYXRhLgorICoKKyAqICAgICAgZW5kX3N1YiAtIGluZGV4IG9m IHRoZSBjaGFyYWN0ZXIgaW4gdGhlICdwYXJzZWRhdCcgYXJyYXkgd2hpY2gKKyAqICAgICAgICAg ICAgICBpcyB0aGUgbGFzdCBieXRlIGluIGEgc3ViLW5lZ290aWF0aW9uCisgKgorICogUmV0dXJu czogS2VyYmVyb3MgZXJyb3IgY29kZS4KKyAqLworc3RhdGljIGludAorI2lmZGVmIENLX0FOU0lD CithdXRoX3JlcGx5KHVuc2lnbmVkIGNoYXIgKnBhcnNlZGF0LCBpbnQgZW5kX3N1YikKKyNlbHNl CithdXRoX3JlcGx5KHBhcnNlZGF0LGVuZF9zdWIpIHVuc2lnbmVkIGNoYXIgKnBhcnNlZGF0OyBp bnQgZW5kX3N1YjsKKyNlbmRpZgoreworICAgIGludCBuID0gQVVUSF9GQUlMVVJFOworCisgICAg aWYgKCBwYXJzZWRhdFsyXSAhPSBhdXRoZW50aWNhdGlvbl92ZXJzaW9uICkgeworICAgICAgICBw cmludGYoIkF1dGhlbnRpY2F0aW9uIHZlcnNpb24gbWlzbWF0Y2ggKCVzIFslZF0gIT0gJXMgWyVk XSlcclxuIiwKKyAgICAgICAgICAgICAgICBBVVRIVFlQRV9OQU1FKHBhcnNlZGF0WzJdKSxwYXJz ZWRhdFsyXSwKKyAgICAgICAgICAgICAgICBBVVRIVFlQRV9OQU1FKGF1dGhlbnRpY2F0aW9uX3Zl cnNpb24pLGF1dGhlbnRpY2F0aW9uX3ZlcnNpb24pOworICAgICAgICBhdXRoX2ZpbmlzaGVkKEFV VEhfUkVKRUNUKTsKKyAgICAgICAgcmV0dXJuKEFVVEhfRkFJTFVSRSk7CisgICAgfQorICAgIGlm ICggcGFyc2VkYXRbM10gIT0gKGF1dGhfaG93fGF1dGhfY3J5cHR8YXV0aF9md2QpICkgeworICAg ICAgICBwcmludGYoIkF1dGhlbnRpY2F0aW9uIG1vZGUgbWlzbWF0Y2ggKCVzICE9ICVzKVxyXG4i LAorICAgICAgICAgICAgICAgIEFVVEhNT0RFX05BTUUocGFyc2VkYXRbM10pLAorICAgICAgICAg ICAgICAgIEFVVEhNT0RFX05BTUUoYXV0aF9ob3d8YXV0aF9jcnlwdHxhdXRoX2Z3ZCkpOworICAg ICAgICBhdXRoX2ZpbmlzaGVkKEFVVEhfUkVKRUNUKTsKKyAgICAgICAgcmV0dXJuKEFVVEhfRkFJ TFVSRSk7CisgICAgfQorCisjaWZkZWYgS1JCNAorICAgIGlmIChhdXRoZW50aWNhdGlvbl92ZXJz aW9uID09IEFVVEhUWVBFX0tFUkJFUk9TX1Y0KQorICAgICAgICBuID0gazRfYXV0aF9yZXBseShw YXJzZWRhdCwgZW5kX3N1Yik7CisjZW5kaWYKKyNpZmRlZiBLUkI1CisgICAgaWYgKGF1dGhlbnRp Y2F0aW9uX3ZlcnNpb24gPT0gQVVUSFRZUEVfS0VSQkVST1NfVjUpCisgICAgICAgIG4gPSBrNV9h dXRoX3JlcGx5KGF1dGhfaG93fGF1dGhfY3J5cHR8YXV0aF9md2QsIHBhcnNlZGF0LCBlbmRfc3Vi KTsKKyNlbmRpZgorI2lmZGVmIENLX1NSUAorICAgIGlmIChhdXRoZW50aWNhdGlvbl92ZXJzaW9u ID09IEFVVEhUWVBFX1NSUCkgeworI2lmbmRlZiBQUkVfU1JQXzFfN18zCisgICAgICAgIG4gPSBu ZXdfc3JwX3JlcGx5KGF1dGhfaG93fGF1dGhfY3J5cHR8YXV0aF9md2QsIHBhcnNlZGF0LCBlbmRf c3ViKTsKKyNlbHNlIC8qIFBSRV9TUlBfMV83XzMgKi8KKyAgICAgICAgbiA9IHNycF9yZXBseShh dXRoX2hvd3xhdXRoX2NyeXB0fGF1dGhfZndkLCBwYXJzZWRhdCwgZW5kX3N1Yik7CisjZW5kaWYg LyogUFJFX1NSUF8xXzdfMyAqLworICAgIH0KKyNlbmRpZiAvKiBTUlAgKi8KKyNpZmRlZiBDS19T U0wKKyAgICBpZiAoYXV0aGVudGljYXRpb25fdmVyc2lvbiA9PSBBVVRIVFlQRV9TU0wpCisgICAg ICAgIG4gPSBzc2xfcmVwbHkoYXV0aF9ob3d8YXV0aF9jcnlwdHxhdXRoX2Z3ZCwgcGFyc2VkYXQs IGVuZF9zdWIpOworI2VuZGlmIC8qIFNTTCAqLworI2lmZGVmIE5UTE0KKyAgICBpZiAoYXV0aGVu dGljYXRpb25fdmVyc2lvbiA9PSBBVVRIVFlQRV9OVExNKQorICAgICAgICBuID0gbnRsbV9yZXBs eShhdXRoX2hvd3xhdXRoX2NyeXB0fGF1dGhfZndkLCBwYXJzZWRhdCwgZW5kX3N1Yik7CisjZW5k aWYgLyogTlRMTSAqLworICAgIHJldHVybiBuOworfQorCisKKy8qCisgKiBGdW5jdGlvbjogUGFy c2UgYXV0aGVudGljYXRpb24gSVMgY29tbWFuZAorICoKKyAqIFBhcmFtZXRlcnM6CisgKiAgcGFy c2VkYXQgLSB0aGUgc3ViLWNvbW1hbmQgZGF0YS4KKyAqCisgKiAgICAgIGVuZF9zdWIgLSBpbmRl eCBvZiB0aGUgY2hhcmFjdGVyIGluIHRoZSAncGFyc2VkYXQnIGFycmF5IHdoaWNoCisgKiAgICAg ICAgICAgICAgaXMgdGhlIGxhc3QgYnl0ZSBpbiBhIHN1Yi1uZWdvdGlhdGlvbgorICoKKyAqIFJl dHVybnM6IEtlcmJlcm9zIGVycm9yIGNvZGUuCisgKi8KK3N0YXRpYyBpbnQKKyNpZmRlZiBDS19B TlNJQworYXV0aF9pcyh1bnNpZ25lZCBjaGFyICpwYXJzZWRhdCwgaW50IGVuZF9zdWIpCisjZWxz ZQorYXV0aF9pcyhwYXJzZWRhdCxlbmRfc3ViKSB1bnNpZ25lZCBjaGFyICpwYXJzZWRhdDsgaW50 IGVuZF9zdWI7CisjZW5kaWYKK3sKKyAgICBpbnQgbiA9IEFVVEhfRkFJTFVSRTsKKworICAgIGlm ICggcGFyc2VkYXRbMl0gPT0gQVVUSFRZUEVfTlVMTCApIHsKKyAgICAgICAgYXV0aF9maW5pc2hl ZChBVVRIX1JFSkVDVCk7CisgICAgICAgIHJldHVybihBVVRIX0ZBSUxVUkUpOworICAgIH0KKwor ICAgIC8qCisgICAgICogIElmIENMSUVOVF9DSE9PU0VfT05DRSBpcyBzZWxlY3RlZCB0aGUgc2Vy dmVyIHdpbGwgbm90IGFsbG93IHRoZQorICAgICAqICBjbGllbnQgdG8gc3dpdGNoIHRvIGFuIGFs dGVybmF0ZSBhdXRoZW50aWNhdGlvbiBtZXRob2QgaWYgdGhlIG9uZQorICAgICAqICBpdCBvcmln aW5hbGx5IHNlbGVjdGVkIGZhaWxzLiAgKGllLCBpZiB0aGUgaG9zdCdzIFNSUCBwYXJhbWV0ZXJz CisgICAgICogIGFyZSBpbnZhbGlkLikgIEhvd2V2ZXIsIEkgdGhpbmsgdGhpcyBpcyBhIGJpdCBv ZiBhIHNlY3VyaXR5IHJpc2sKKyAgICAgKiAgc2luY2UgYWxsb3dpbmcgdGhhdCBmdW5jdGlvbmFs aXR5IG1lYW5zIHRoYXQgaXQgaXMgaW1wb3NzaWJsZSB0bworICAgICAqICBkZXRlY3QgaWYgYW4g YXR0YWNrIGlzIGJlaW5nIGNhcnJpZWQgb3V0IG9uCisgICAgICovCisjZGVmaW5lIENMSUVOVF9D SE9PU0VfT05DRQorI2lmZGVmIENMSUVOVF9DSE9PU0VfT05DRQorICAgIGlmICggYXV0aGVudGlj YXRpb25fdmVyc2lvbiA9PSBBVVRIVFlQRV9BVVRPICkKKyNlbmRpZiAvKiBDTElFTlRfQ0hPT1NF X09OQ0UgKi8KKyAgICB7CisgICAgICAgIC8qIHRoaXMgYmxvY2sgb2YgY29kZSBuZWVkcyB0byBj aGVjayB0aGUgaW5pdGlhbCBwYXJhbWV0ZXJzICovCisgICAgICAgIC8qIHRvIGVuc3VyZSB0aGF0 IHRob3NlIHJldHVybmVkIG1hdGNoIG9uZSBvZiB0aGUgc2V0cyB0aGF0ICovCisgICAgICAgIC8q IHdlcmUgc2VudCB0byB0aGUgY2xpZW50IGluIHRoZSBmaXJzdCBwbGFjZS4gICAgICAgICAgICAg ICovCisKKyAgICAgICAgaW50IGk9MDsKKyAgICAgICAgZm9yICggaT00OyBzdHJfcmVxdWVzdFtp XSAhPSBJQUMgOyBpKz0yKSB7CisgICAgICAgICAgICBpZiAoc3RyX3JlcXVlc3RbaV0gPT0gcGFy c2VkYXRbMl0gJiYKKyAgICAgICAgICAgICAgICAgc3RyX3JlcXVlc3RbaSsxXSA9PSBwYXJzZWRh dFszXSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgg c3RyX3JlcXVlc3RbaV0gPT0gSUFDICkgeworICAgICAgICAgICAgcHJpbnRmKCJJbnZhbGlkIGF1 dGhlbnRpY2F0aW9uIHR5cGUgcGFpciAoJXMsJXMpXHJcbiIsCisgICAgICAgICAgICAgICAgICAg IEFVVEhUWVBFX05BTUUocGFyc2VkYXRbMl0pLAorICAgICAgICAgICAgICAgICAgICBBVVRITU9E RV9OQU1FKHBhcnNlZGF0WzNdKSk7CisgICAgICAgICAgICBhdXRoX2ZpbmlzaGVkKEFVVEhfUkVK RUNUKTsKKyAgICAgICAgICAgIHJldHVybihBVVRIX0ZBSUxVUkUpOworICAgICAgICB9CisKKyAg ICAgICAgaWYgKGF1dGhlbnRpY2F0aW9uX3ZlcnNpb24gIT0gcGFyc2VkYXRbMl0pIHsKKyAgICAg ICAgICAgIGF1dGhlbnRpY2F0aW9uX3ZlcnNpb24gPSBwYXJzZWRhdFsyXTsKKyAgICAgICAgICAg IGF1dGhfaG93ID0gKHBhcnNlZGF0WzNdICYgQVVUSF9IT1dfTUFTSyk7CisgICAgICAgICAgICBh dXRoX2NyeXB0ID0gKHBhcnNlZGF0WzNdICYgQVVUSF9FTkNSWVBUX01BU0spOworICAgICAgICAg ICAgYXV0aF9md2QgPSAocGFyc2VkYXRbM10gJiBJTklfQ1JFRF9GV0RfTUFTSyk7CisgICAgICAg ICAgICBkZWJ1ZyhGMTExLCJhdXRoX2lzIiwiYXV0aGVudGljYXRpb25fdmVyc2lvbiIsCisgICAg ICAgICAgICAgICAgICBhdXRoZW50aWNhdGlvbl92ZXJzaW9uKTsKKyAgICAgICAgICAgIGRlYnVn KEYxMTEsImF1dGhfaXMiLCJhdXRoX2hvdyIsYXV0aF9ob3cpOworICAgICAgICAgICAgZGVidWco RjExMSwiYXV0aF9pcyIsImF1dGhfY3J5cHQiLGF1dGhfY3J5cHQpOworICAgICAgICAgICAgZGVi dWcoRjExMSwiYXV0aF9pcyIsImF1dGhfZndkIixhdXRoX2Z3ZCk7CisgICAgICAgIH0KKyAgICB9 CisKKyNpZmRlZiBDTElFTlRfQ0hPT1NFX09OQ0UKKyAgICBpZiAoIHBhcnNlZGF0WzJdICE9IGF1 dGhlbnRpY2F0aW9uX3ZlcnNpb24gKSB7CisgICAgICAgIHByaW50ZigiQXV0aGVudGljYXRpb24g dmVyc2lvbiBtaXNtYXRjaCAoJXMgWyVkXSAhPSAlcyBbJWRdKVxyXG4iLAorICAgICAgICAgICAg ICAgIEFVVEhUWVBFX05BTUUocGFyc2VkYXRbMl0pLHBhcnNlZGF0WzJdLAorICAgICAgICAgICAg ICAgIEFVVEhUWVBFX05BTUUoYXV0aGVudGljYXRpb25fdmVyc2lvbiksYXV0aGVudGljYXRpb25f dmVyc2lvbik7CisgICAgICAgIGF1dGhfZmluaXNoZWQoQVVUSF9SRUpFQ1QpOworICAgICAgICBy ZXR1cm4oQVVUSF9GQUlMVVJFKTsKKyAgICB9CisgICAgaWYgKCBwYXJzZWRhdFszXSAhPSAoYXV0 aF9ob3d8YXV0aF9jcnlwdHxhdXRoX2Z3ZCkgKSB7CisgICAgICAgIHByaW50ZigiQXV0aGVudGlj YXRpb24gbW9kZSBtaXNtYXRjaCAoJXMgIT0gJXMpXHJcbiIsCisgICAgICAgICAgICAgICAgQVVU SE1PREVfTkFNRShwYXJzZWRhdFszXSksCisgICAgICAgICAgICAgICAgQVVUSE1PREVfTkFNRShh dXRoX2hvd3xhdXRoX2NyeXB0fGF1dGhfZndkKSk7CisgICAgICAgIGF1dGhfZmluaXNoZWQoQVVU SF9SRUpFQ1QpOworICAgICAgICByZXR1cm4oQVVUSF9GQUlMVVJFKTsKKyAgICB9CisjZW5kaWYg LyogQ0xJRU5UX0NIT09TRV9PTkNFICovCisKKyAgICBzd2l0Y2ggKGF1dGhlbnRpY2F0aW9uX3Zl cnNpb24pIHsKKyNpZmRlZiBLUkI0CisgICAgY2FzZSBBVVRIVFlQRV9LRVJCRVJPU19WNDoKKyAg ICAgICAgbiA9IGs0X2F1dGhfaXMocGFyc2VkYXQsIGVuZF9zdWIpOworICAgICAgICBicmVhazsK KyNlbmRpZgorI2lmZGVmIEtSQjUKKyAgICBjYXNlIEFVVEhUWVBFX0tFUkJFUk9TX1Y1OgorICAg ICAgICBuID0gazVfYXV0aF9pcyhwYXJzZWRhdFszXSxwYXJzZWRhdCwgZW5kX3N1Yik7CisgICAg ICAgIGJyZWFrOworI2VuZGlmCisjaWZkZWYgQ0tfU1JQCisgICAgY2FzZSBBVVRIVFlQRV9TUlA6 CisjaWZuZGVmIFBSRV9TUlBfMV83XzMKKyAgICAgICAgbiA9IG5ld19zcnBfaXMocGFyc2VkYXRb M10sIHBhcnNlZGF0LCBlbmRfc3ViKTsKKyNlbHNlIC8qIFBSRV9TUlBfMV83XzMgKi8KKyAgICAg ICAgbiA9IHNycF9pcyhwYXJzZWRhdFszXSwgcGFyc2VkYXQsIGVuZF9zdWIpOworI2VuZGlmIC8q IFBSRV9TUlBfMV83XzMgKi8KKyAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogU1JQICovCisjaWZk ZWYgQ0tfU1NMCisgICAgY2FzZSBBVVRIVFlQRV9TU0w6CisgICAgICAgIFRFTE9QVF9NRV9NT0RF KFRFTE9QVF9FTkNSWVBUSU9OKSA9IFROX05HX1JGOworICAgICAgICBURUxPUFRfVV9NT0RFKFRF TE9QVF9FTkNSWVBUSU9OKSA9IFROX05HX1JGOworICAgICAgICBuID0gc3NsX2lzKHBhcnNlZGF0 LCBlbmRfc3ViKTsKKyAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogU1NMICovCisjaWZkZWYgTlRM TQorICAgIGNhc2UgQVVUSFRZUEVfTlRMTToKKyAgICAgICAgVEVMT1BUX01FX01PREUoVEVMT1BU X0VOQ1JZUFRJT04pID0gVE5fTkdfUkY7CisgICAgICAgIFRFTE9QVF9VX01PREUoVEVMT1BUX0VO Q1JZUFRJT04pID0gVE5fTkdfUkY7CisgICAgICAgIG4gPSBudGxtX2lzKHBhcnNlZGF0LCBlbmRf c3ViKTsKKyAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogTlRMTSAqLworICAgIGNhc2UgQVVUSFRZ UEVfTlVMTDoKKyAgICBkZWZhdWx0OgorICAgICAgICBuID0gQVVUSF9GQUlMVVJFOworICAgIH0K KyAgICBkZWJ1ZyhGMTExLCJhdXRoX2lzIiwibiIsbik7CisgICAgcmV0dXJuIG47Cit9CisKKy8q CisgKiBGdW5jdGlvbjogUGFyc2UgYXV0aGVudGljYXRpb24gTkFNRSBjb21tYW5kCisgKgorICog UGFyYW1ldGVyczoKKyAqICBwYXJzZWRhdCAtIHRoZSBzdWItY29tbWFuZCBkYXRhLgorICoKKyAq ICAgICAgZW5kX3N1YiAtIGluZGV4IG9mIHRoZSBjaGFyYWN0ZXIgaW4gdGhlICdwYXJzZWRhdCcg YXJyYXkgd2hpY2gKKyAqICAgICAgICAgICAgICBpcyB0aGUgbGFzdCBieXRlIGluIGEgc3ViLW5l Z290aWF0aW9uCisgKgorICogUmV0dXJuczogS2VyYmVyb3MgZXJyb3IgY29kZS4KKyAqLworc3Rh dGljIGludAorI2lmZGVmIENLX0FOU0lDCithdXRoX25hbWUodW5zaWduZWQgY2hhciAqcGFyc2Vk YXQsIGludCBlbmRfc3ViKQorI2Vsc2UKK2F1dGhfbmFtZShwYXJzZWRhdCxlbmRfc3ViKSB1bnNp Z25lZCBjaGFyICpwYXJzZWRhdDsgaW50IGVuZF9zdWI7CisjZW5kaWYKK3sKKyAgICBpbnQgbGVu ID0gKGVuZF9zdWItMikgPiA2MyA/IDYzIDogKGVuZF9zdWItMik7CisgICAgaWYgKCBsZW4gPiAw ICYmIChsZW4gKyAxKSA8IHNpemVvZihzelVzZXJOYW1lUmVxdWVzdGVkKSkgeworICAgICAgICBt ZW1jcHkoc3pVc2VyTmFtZVJlcXVlc3RlZCwmcGFyc2VkYXRbMl0sbGVuKTsgICAgICAgICAgIC8q IHNhZmUgKi8KKyAgICAgICAgc3pVc2VyTmFtZVJlcXVlc3RlZFtsZW5dID0gJ1wwJzsKKyAgICB9 IGVsc2UKKyAgICAgIHN6VXNlck5hbWVSZXF1ZXN0ZWRbMF0gPSAnXDAnOworICAgIGRlYnVnKEYx MTEsImF1dGhfbmFtZSBzelVzZXJOYW1lUmVxdWVzdGVkIixzelVzZXJOYW1lUmVxdWVzdGVkLGxl bik7CisgICAgcmV0dXJuKEFVVEhfU1VDQ0VTUyk7Cit9CisKKy8qCisgKiBGdW5jdGlvbjogUGFy c2UgdGhlIGF0aG9yaXphdGlvbiBzdWItb3B0aW9ucyBhbmQgcmVwbHkuCisgKgorICogUGFyYW1l dGVyczoKKyAqICAgICAgcGFyc2VkYXQgLSBzdWItb3B0aW9uIHN0cmluZyB0byBwYXJzZS4KKyAq CisgKiAgICAgIGVuZF9zdWIgLSBsYXN0IGNoYXJjdGVyIHBvc2l0aW9uIGluIHBhcnNlZGF0Lgor ICovCitpbnQKK2F1dGhfcGFyc2UodW5zaWduZWQgY2hhciAqcGFyc2VkYXQsIGludCBlbmRfc3Vi KQoreworICAgIGludCByYyA9IEFVVEhfRkFJTFVSRTsKKyAgICBzd2l0Y2ggKHBhcnNlZGF0WzFd KSB7CisgICAgY2FzZSBURUxRVUFMX1NFTkQ6CisgICAgICAgIHJjID0gYXV0aF9zZW5kKHBhcnNl ZGF0LCBlbmRfc3ViKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBURUxRVUFMX1JFUExZOgor ICAgICAgICByYz0gYXV0aF9yZXBseShwYXJzZWRhdCwgZW5kX3N1Yik7CisgICAgICAgIGJyZWFr OworICAgIGNhc2UgVEVMUVVBTF9JUzoKKyAgICAgICAgcmMgPSBhdXRoX2lzKHBhcnNlZGF0LCBl bmRfc3ViKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBURUxRVUFMX05BTUU6CisgICAgICAg IHJjID0gYXV0aF9uYW1lKHBhcnNlZGF0LCBlbmRfc3ViKTsKKyAgICAgICAgYnJlYWs7CisgICAg fQorICAgIGRlYnVnKEYxMTEsImF1dGhfcGFyc2UiLCJyYyIscmMpOworICAgIHJldHVybihyYyk7 Cit9CisKKworLyoKKyAqIEZ1bmN0aW9uOiBJbml0aWFsaXphdGlvbiByb3V0aW5lIGNhbGxlZCBr c3RyZWFtIGVuY3J5cHRpb24gc3lzdGVtLgorICoKKyAqIFBhcmFtZXRlcnM6CisgKiAgZGF0YSAt IHVzZXIgZGF0YS4KKyAqLworaW50CisjaWZkZWYgQ0tfQU5TSUMKK2F1dGhfaW5pdChrc3RyZWFt IGtzKQorI2Vsc2UKK2F1dGhfaW5pdChrcykga3N0cmVhbV9wdHIga3M7CisjZW5kaWYKK3sKKyNp ZmRlZiBGT1JXQVJECisgICAgZm9yd2FyZGVkX3RpY2tldHMgPSAwOyAgLyogd2VyZSB0aWNrZXRz IGZvcndhcmRlZD8gKi8KKyNlbmRpZiAvKiBGT1JXQVJEICovCisjaWZkZWYgQ0tfRU5DUllQVElP TgorICAgIGVuY3J5cHRfaW5pdChrcyxjeF90eXBlKTsKKyNlbmRpZgorICAgIHJldHVybiAwOwor fQorCisKKy8qCisgKiBGdW5jdGlvbjogRGVzdHJveSByb3V0aW5lIGNhbGxlZCBrc3RyZWFtIGVu Y3J5cHRpb24gc3lzdGVtLgorICoKKyAqIFBhcmFtZXRlcnM6CisgKiAgZGF0YSAtIHVzZXIgZGF0 YS4KKyAqLworVk9JRAorI2lmZGVmIENLX0FOU0lDCithdXRoX2Rlc3Ryb3kodm9pZCkKKyNlbHNl CithdXRoX2Rlc3Ryb3koKQorI2VuZGlmCit7Cit9CisKKworLyoKKyAqIEZ1bmN0aW9uOiBDYWxs YmFjayB0byBlbmNyeXB0IGEgYmxvY2sgb2YgY2hhcmFjdGVycworICoKKyAqIFBhcmFtZXRlcnM6 CisgKiAgb3V0IC0gcmV0dXJuIGFzIHBvaW50ZXIgdG8gY29udmVydGVkIGJ1ZmZlci4KKyAqCisg KiAgaW4gLSB0aGUgYnVmZmVyIHRvIGNvbnZlcnQKKyAqCisgKiBSZXR1cm5zOiBudW1iZXIgb2Yg Y2hhcmFjdGVycyBjb252ZXJ0ZWQuCisgKi8KK2ludAorI2lmZGVmIENLX0FOU0lDCithdXRoX2Vu Y3J5cHQoc3RydWN0IGtzdHJlYW1fZGF0YV9ibG9jayAqb3V0LAorICAgICAgICAgICAgIHN0cnVj dCBrc3RyZWFtX2RhdGFfYmxvY2sgKmluKQorI2Vsc2UKK2F1dGhfZW5jcnlwdChvdXQsaW4pCisg ICAgc3RydWN0IGtzdHJlYW1fZGF0YV9ibG9jayAqb3V0OyBzdHJ1Y3Qga3N0cmVhbV9kYXRhX2Js b2NrICppbjsKKyNlbmRpZgoreworICAgIG91dC0+cHRyID0gaW4tPnB0cjsKKworICAgIG91dC0+ bGVuZ3RoID0gaW4tPmxlbmd0aDsKKworICAgIHJldHVybihvdXQtPmxlbmd0aCk7Cit9CisKKwor LyoKKyAqIEZ1bmN0aW9uOiBDYWxsYmFjayB0byBkZWNyeXB0IGEgYmxvY2sgb2YgY2hhcmFjdGVy cworICoKKyAqIFBhcmFtZXRlcnM6CisgKiAgb3V0IC0gcmV0dXJuIGFzIHBvaW50ZXIgdG8gY29u dmVydGVkIGJ1ZmZlci4KKyAqCisgKiAgaW4gLSB0aGUgYnVmZmVyIHRvIGNvbnZlcnQKKyAqCisg KiBSZXR1cm5zOiBudW1iZXIgb2YgY2hhcmFjdGVycyBjb252ZXJ0ZWQuCisgKi8KK2ludAorI2lm ZGVmIENLX0FOU0lDCithdXRoX2RlY3J5cHQoc3RydWN0IGtzdHJlYW1fZGF0YV9ibG9jayAqb3V0 LAorICAgICAgICAgICAgIHN0cnVjdCBrc3RyZWFtX2RhdGFfYmxvY2sgKmluKQorI2Vsc2UKK2F1 dGhfZGVjcnlwdChvdXQsaW4pCisgICAgc3RydWN0IGtzdHJlYW1fZGF0YV9ibG9jayAqb3V0OyBz dHJ1Y3Qga3N0cmVhbV9kYXRhX2Jsb2NrICppbjsKKyNlbmRpZgoreworICAgIG91dC0+cHRyID0g aW4tPnB0cjsKKworICAgIG91dC0+bGVuZ3RoID0gaW4tPmxlbmd0aDsKKworICAgIHJldHVybihv dXQtPmxlbmd0aCk7Cit9CisKKyNpZmRlZiBLUkI0CisjaWZkZWYgTlQKK3ZvaWQKK2NrX2tyYjRf ZGVidWcoaW50IHgpCit7CisgICAgc2V0X2tyYl9kZWJ1Zyh4KTsKKyAgICBzZXRfa3JiX2FwX3Jl cV9kZWJ1Zyh4KTsKK30KKyNlbmRpZiAvKiBOVCAqLworaW50Citja19rcmI0X2F1dG9nZXRfVEdU KGNoYXIgKiByZWFsbSkKK3sKKyAgICBleHRlcm4gc3RydWN0IGtyYl9vcF9kYXRhIGtyYl9vcDsK KyAgICBleHRlcm4gc3RydWN0IGtyYjRfaW5pdF9kYXRhIGtyYjRfaW5pdDsKKyAgICBjaGFyIHBh c3N3ZFtQV0RfU1pdOworICAgIGNoYXIgcHJvbXB0WzI1Nl07CisgICAgY2hhciAqIHNhdmVyZWFs bT1OVUxMOworICAgIGludCAgcmMgPSAtMTsKKyAgICBleHRlcm4gY2hhciAqIGs0cHJwcm9tcHQ7 CisgICAgZXh0ZXJuIGNoYXIgKiBrNHB3cHJvbXB0OworCisgICAgaW5pX2tlcmIoKTsgICAgICAg ICAvKiBQbGFjZSBkZWZhdWx0cyBpbiBhYm92ZSBzdHJ1Y3RzICovCisgICAgcGFzc3dkWzBdID0g J1wwJzsKKworICAgIGlmICgga3JiNF9pbml0LnByaW5jaXBhbCA9PSBOVUxMIHx8CisgICAgICAg ICBrcmI0X2luaXQucHJpbmNpcGFsWzBdID09ICdcMCcpIHsKKyAgICAgICAgaW50IG9rID0gdXFf dHh0KE5VTEwsIAorICAgICAgICAgICAgICAgICBrNHBycHJvbXB0ICYmIGs0cHJwcm9tcHRbMF0g PworICAgICAgICAgICAgICAgICBrNHBycHJvbXB0IDoKKyAgICAgICAgICAgICAgICAgIktlcmJl cm9zIDQgUHJpbmNpcGFsOiAiLAorICAgICAgICAgICAgICAgICAyLCBOVUxMLCBwYXNzd2QsUFdE X1NaLTEsIE5VTEwsIERFRkFVTFRfVVFfVElNRU9VVCk7CisgICAgICAgIGlmICggb2sgJiYgcGFz c3dkWzBdICkKKyAgICAgICAgICAgIG1ha2VzdHIoJmtyYjRfaW5pdC5wcmluY2lwYWwscGFzc3dk KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuKDApOworICAgIH0KKworICAgIC8q IFNhdmUgcmVhbG0gaW4gaW5pdCBzdHJ1Y3R1cmUgc28gaXQgY2FuIGJlIHJlc3RvcmVkICovCisg ICAgaWYgKCByZWFsbSApIHsKKyAgICAgICAgc2F2ZXJlYWxtID0ga3JiNF9pbml0LnJlYWxtOwor ICAgICAgICBrcmI0X2luaXQucmVhbG0gPSByZWFsbTsKKyAgICB9CisKKyAgICBpZiAoIHBhc3N3 ZFswXSB8fCAhKHB3YnVmWzBdICYmIHB3ZmxnKSApIHsKKyAgICAgICAgaW50IG9rOworICAgICAg ICBpZiAoIGs0cHdwcm9tcHQgJiYgazRwd3Byb21wdFswXSAmJgorICAgICAgICAgICAgIChzdHJs ZW4oazRwd3Byb21wdCkgKyBzdHJsZW4oa3JiNF9pbml0LnByaW5jaXBhbCkgKworICAgICAgICAg ICAgICAgc3RybGVuKGtyYjRfaW5pdC5yZWFsbSkgLSA0KSA8IHNpemVvZihwcm9tcHQpKSB7Cisg ICAgICAgICAgICBzcHJpbnRmKHByb21wdCxrNHB3cHJvbXB0LGtyYjRfaW5pdC5wcmluY2lwYWws a3JiNF9pbml0LnJlYWxtKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBja21ha3htc2co cHJvbXB0LHNpemVvZihwcm9tcHQpLAorICAgICAgICAgICAgICAgICAgIktlcmJlcm9zIDQgUGFz c3dvcmQgZm9yICIsa3JiNF9pbml0LnByaW5jaXBhbCwiQCIsCisgICAgICAgICAgICAgICAgICBr cmI0X2luaXQucmVhbG0sIjogIiwKKyAgICAgICAgICAgICAgICAgIE5VTEwsTlVMTCxOVUxMLE5V TEwsTlVMTCxOVUxMLE5VTEwpOworICAgICAgICBvayA9IHVxX3R4dChOVUxMLHByb21wdCwyLE5V TEwscGFzc3dkLFBXRF9TWi0xLE5VTEwsCisJCSAgICBERUZBVUxUX1VRX1RJTUVPVVQpOworICAg ICAgICBpZiAoICFvayApCisgICAgICAgICAgICBwYXNzd2RbMF0gPSAnXDAnOworICAgIH0gZWxz ZSB7CisgICAgICAgIGNrc3RybmNweShwYXNzd2QscHdidWYsc2l6ZW9mKHBhc3N3ZCkpOworI2lm ZGVmIE9TMgorICAgICAgICBpZiAoIHB3Y3J5cHQgKQorICAgICAgICAgICAgY2tfZW5jcnlwdCgo Y2hhciAqKXBhc3N3ZCk7CisjZW5kaWYgLyogT1MyICovCisgICAgfQorCisgICAgaWYgKCBwYXNz d2RbMF0gKSB7CisgICAgICAgIG1ha2VzdHIoJmtyYjRfaW5pdC5wYXNzd29yZCxwYXNzd2QpOwor ICAgICAgICByYyA9IGNrX2tyYjRfaW5pdFRHVCgma3JiX29wLCAma3JiNF9pbml0KTsKKyAgICAg ICAgZnJlZShrcmI0X2luaXQucGFzc3dvcmQpOworICAgICAgICBrcmI0X2luaXQucGFzc3dvcmQg PSBOVUxMOworICAgIH0KKworICAgIGtyYjRfaW5pdC5wYXNzd29yZCA9IE5VTEw7CisgICAgbWVt c2V0KHBhc3N3ZCwwLFBXRF9TWik7CisKKyAgICAvKiByZXN0b3JlIHJlYWxtIHRvIGluaXQgc3Ry dWN0dXJlIGlmIG5lZWRlZCAqLworICAgIGlmICggc2F2ZXJlYWxtICkKKyAgICAgICAga3JiNF9p bml0LnJlYWxtID0gc2F2ZXJlYWxtOworICAgIHJldHVybihyYyA9PSAwKTsKK30KKworY2hhciAq Citja19rcmI0X3JlYWxtb2Zob3N0KGNoYXIgKmhvc3QpCit7CisgICAgcmV0dXJuIChjaGFyICop a3JiX3JlYWxtb2Zob3N0KGhvc3QpOworfQorCisvKgorICoKKyAqIEs0X2F1dGhfc2VuZCAtIGdl dHMgYXV0aGVudGljYXRpb24gYml0cyB3ZSBuZWVkIHRvIHNlbmQgdG8gS0RDLgorICoKKyAqIFJl c3VsdCBpcyBsZWZ0IGluIGF1dGgKKyAqCisgKiBSZXR1cm5zOiAwIG9uIGZhaWx1cmUsIDEgb24g c3VjY2VzcworICovCitzdGF0aWMgaW50CisjaWZkZWYgQ0tfQU5TSUMKK2s0X2F1dGhfc2VuZCh2 b2lkKQorI2Vsc2UKK2s0X2F1dGhfc2VuZCgpCisjZW5kaWYKK3sKKyAgICBpbnQgcj0wOyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJldHVybiB2YWx1ZSAqLworICAgIGNo YXIgaW5zdGFuY2VbSU5TVF9TWisxXT0iIjsKKyAgICBjaGFyICpyZWFsbT1OVUxMOworICAgIGNo YXIgdGd0WzQqUkVBTE1fU1orMV07CisKKyAgICBtZW1zZXQoaW5zdGFuY2UsIDAsIHNpemVvZihp bnN0YW5jZSkpOworCisjaWZkZWYgQ09NTUVOVAorICAgIC8qIHdlIG9ubHkgbmVlZCB0byBjYWxs IGtyYl9nZXRfcGhvc3QgaWYgdGhlIGhvc3RuYW1lICovCisgICAgLyogaXMgbm90IGZ1bGx5IHF1 YWxpZmllZC4gIEJ1dCB3ZSBoYXZlIGFscmVhZHkgZG9uZSAgKi8KKyAgICAvKiB0aGlzIGluIG5l dG9wZW4oKSBjYWxsLiAgVGhpcyB3aWxsIHNhdmUgYSByb3VuZCBvZiAqLworICAgIC8qIEROUyBx dWVyaWVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgZGVi dWcoRjExMCwiazRfYXV0aF9zZW5kIiwia3JiX2dldF9waG9zdCIsMCk7CisgICAgaWYgKHJlYWxt ID0gKGNoYXIgKilrcmJfZ2V0X3Bob3N0KHN6SG9zdE5hbWUpKSB7CisgICAgICAgIGNrc3RybmNw eShpbnN0YW5jZSwgcmVhbG0sIElOU1RfU1opOworICAgIH0KKyNlbHNlIC8qIENPTU1FTlQgKi8K KyAgICB7CisgICAgICAgIGNoYXIgKnA7CisgICAgICAgIGNrc3RybmNweShpbnN0YW5jZSwgc3pI b3N0TmFtZSwgSU5TVF9TWik7CisgICAgICAgIGZvciAoIHA9aW5zdGFuY2U7ICpwICYmICpwICE9 ICcuJyA7IHArKyApOworICAgICAgICAqcCA9ICdcMCc7CisgICAgfQorI2VuZGlmIC8qIENPTU1F TlQgKi8KKworICAgIGRlYnVnKEYxMTAsIms0X2F1dGhfc2VuZCIsImtyYl9nZXRfcmVhbG1vZmhv c3QiLDApOworICAgIHJlYWxtID0gKGNoYXIgKilrcmJfcmVhbG1vZmhvc3Qoc3pIb3N0TmFtZSk7 CisKKyAgICBpZiAoIXJlYWxtKSB7CisgICAgICAgIHN0cmNweShzdHJUbXAsICJDYW4ndCBmaW5k IHJlYWxtIGZvciBob3N0IFwiIik7CisgICAgICAgIGNrc3RybmNhdChzdHJUbXAsIHN6SG9zdE5h bWUsQVVUSFRNUEJMKTsKKyAgICAgICAgY2tzdHJuY2F0KHN0clRtcCwgIlwiIixBVVRIVE1QQkwp OworICAgICAgICBwcmludGYoIj9LZXJiZXJvcyA0IGVycm9yOiAlc1xyXG4iLHN0clRtcCk7Cisg ICAgICAgIGtyYjRfZXJybm8gPSByOworICAgICAgICBtYWtlc3RyKCZrcmI0X2Vycm1zZyxzdHJU bXApOworICAgICAgICByZXR1cm4oMCk7CisgICAgfQorCisgICAgY2ttYWttc2codGd0LHNpemVv Zih0Z3QpLCJrcmJ0Z3QuIixyZWFsbSwiQCIscmVhbG0pOworICAgIHIgPSBja19rcmI0X3RrdF9p c3ZhbGlkKHRndCk7CisKKyAgICBpZiAoIHIgPD0gMCAmJiBrcmI0X2F1dG9nZXQgKQorICAgICAg ICBja19rcmI0X2F1dG9nZXRfVEdUKHJlYWxtKTsKKworICAgIGRlYnVnKEYxMTAsIms0X2F1dGhf c2VuZCIsImtyYl9ta19yZXEiLDApOworICAgIHIgPSBrcmJfbWtfcmVxKCZrNF9hdXRoLCBrcmI0 X2Rfc3J2ID8ga3JiNF9kX3NydiA6IEtSQjRfU0VSVklDRV9OQU1FLAorICAgICAgICAgICAgICAg ICAgICBpbnN0YW5jZSwgcmVhbG0sIDApOworCisgICAgaWYgKHIgPT0gMCkgeworICAgICAgICBk ZWJ1ZyhGMTEwLCJrNF9hdXRoX3NlbmQiLCJrcmJfZ2V0X2NyZWQiLDApOworICAgICAgICByID0g a3JiX2dldF9jcmVkKGtyYjRfZF9zcnYgPyBrcmI0X2Rfc3J2IDogS1JCNF9TRVJWSUNFX05BTUUs CisgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLCByZWFsbSwgJmNyZWQpOworICAg ICAgICBpZiAocikKKyAgICAgICAgICAgIGRlYnVnKEYxMTEsIms0X2F1dGhfc2VuZCIsImtyYl9n ZXRfY3JlZCgpIGZhaWxlZCIscik7CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgZGVidWcoRjEx MSwiazRfYXV0aF9zZW5kIiwia3JiX21rX3JlcSgpIGZhaWxlZCIscik7CisKKyAgICBpZiAocikg eworICAgICAgICBzdHJjcHkoc3RyVG1wLCAiQ2FuJ3QgZ2V0IFwiIik7CisgICAgICAgIGNrc3Ry bmNhdChzdHJUbXAsCisgICAgICAgICAgICAgICAgICBrcmI0X2Rfc3J2ID8ga3JiNF9kX3NydiA6 IEtSQjRfU0VSVklDRV9OQU1FLEFVVEhUTVBCTCk7CisgICAgICAgIGlmIChpbnN0YW5jZVswXSAh PSAwKSB7CisgICAgICAgICAgICBja3N0cm5jYXQoc3RyVG1wLCAiLiIsQVVUSFRNUEJMKTsKKyAg ICAgICAgICAgIGNrc3RybmNhdChzdHJUbXAsIGluc3RhbmNlLEFVVEhUTVBCTCk7CisgICAgICAg IH0KKyAgICAgICAgY2tzdHJuY2F0KHN0clRtcCwgIkAiLEFVVEhUTVBCTCk7CisgICAgICAgIGNr c3RybmNhdChzdHJUbXAsIHJlYWxtLEFVVEhUTVBCTCk7CisgICAgICAgIGNrc3RybmNhdChzdHJU bXAsICJcIiB0aWNrZXRcclxuICAiLEFVVEhUTVBCTCk7CisgICAgICAgIGNrc3RybmNhdChzdHJU bXAsIChjaGFyICopa3JiX2dldF9lcnJfdGV4dF9lbnRyeShyKSxBVVRIVE1QQkwpOworICAgICAg ICBkZWJ1ZyhGMTExLCJrNF9hdXRoX3NlbmQiLChjaGFyICopa3JiX2dldF9lcnJfdGV4dF9lbnRy eShyKSxyKTsKKyAgICAgICAgcHJpbnRmKCI/S2VyYmVyb3MgNCBlcnJvcjogJXNcclxuIixzdHJU bXApOworICAgICAgICBrcmI0X2Vycm5vID0gcjsKKyAgICAgICAgbWFrZXN0cigma3JiNF9lcnJt c2csa3JiX2dldF9lcnJfdGV4dF9lbnRyeShrcmI0X2Vycm5vKSk7CisgICAgICAgIHJldHVybigw KTsKKyAgICB9CisKKyNpZmRlZiBPUzIKKyAgICBpZiAoICFzelVzZXJOYW1lWzBdIHx8ICFzdHJp Y21wKHN6VXNlck5hbWUsY3JlZC5wbmFtZSkgKSB7CisgICAgICAgIGNrc3RybmNweShzelVzZXJO YW1lLCBjcmVkLnBuYW1lLCBVSURCVUZMRU4pOworICAgIH0KKyNlbmRpZiAvKiBPUzIgKi8KKyAg ICBrcmI0X2Vycm5vID0gcjsKKyAgICBtYWtlc3RyKCZrcmI0X2Vycm1zZyxrcmJfZ2V0X2Vycl90 ZXh0X2VudHJ5KGtyYjRfZXJybm8pKTsKKyAgICBkZWJ1ZyhGMTEwLCJrNF9hdXRoX3NlbmQiLGty YjRfZXJybXNnLDApOworICAgIHJldHVybigxKTsKK30KKworLyoKKyAqIEZ1bmN0aW9uOiBLNCBw YXJzZSBhdXRoZW50aWNhdGlvbiByZXBseSBjb21tYW5kCisgKgorICogUGFyYW1ldGVyczoKKyAq ICBwYXJzZWRhdCAtIHRoZSBzdWItY29tbWFuZCBkYXRhLgorICoKKyAqICBlbmRfc3ViIC0gaW5k ZXggb2YgdGhlIGNoYXJhY3RlciBpbiB0aGUgJ3BhcnNlZGF0JyBhcnJheSB3aGljaAorICogICAg ICAgICAgICAgIGlzIHRoZSBsYXN0IGJ5dGUgaW4gYSBzdWItbmVnb3RpYXRpb24KKyAqCisgKiBS ZXR1cm5zOiBLZXJiZXJvcyBlcnJvciBjb2RlLgorICovCitzdGF0aWMgaW50CisjaWZkZWYgQ0tf QU5TSUMKK2s0X2F1dGhfcmVwbHkodW5zaWduZWQgY2hhciAqcGFyc2VkYXQsIGludCBlbmRfc3Vi KQorI2Vsc2UKK2s0X2F1dGhfcmVwbHkocGFyc2VkYXQsZW5kX3N1YikgdW5zaWduZWQgY2hhciAq cGFyc2VkYXQ7IGludCBlbmRfc3ViOworI2VuZGlmCit7CisjaWZkZWYgQ0tfRU5DUllQVElPTgor ICAgIFNlc3Npb25fS2V5IHNrZXk7CisjaWZkZWYgTUlUX0NVUlJFTlQKKyAgICBrcmI1X2RhdGEg a2RhdGE7CisgICAga3JiNV9lbmNfZGF0YSBlbmNkYXRhOworICAgIGtyYjVfZXJyb3JfY29kZSBj b2RlOworI2VuZGlmIC8qIE1JVF9DVVJSRU5UICovCisjZW5kaWYKKyAgICB0aW1lX3QgdDsKKyAg ICBpbnQgeDsKKyAgICBpbnQgaTsKKworICAgIGlmIChlbmRfc3ViIDwgNCB8fCBwYXJzZWRhdFsy XSAhPSBBVVRIVFlQRV9LRVJCRVJPU19WNCkgeworICAgICAgICBhdXRoX2ZpbmlzaGVkKEFVVEhf UkVKRUNUKTsKKyAgICAgICAgcmV0dXJuIEFVVEhfRkFJTFVSRTsKKyAgICB9CisKKyAgICBpZiAo cGFyc2VkYXRbNF0gPT0gS1JCX1JFSkVDVCkgeworICAgICAgICBzdHJUbXBbMF0gPSAwOworCisg ICAgICAgIGZvciAoaSA9IDU7IGkgPD0gZW5kX3N1YjsgaSsrKSB7CisgICAgICAgICAgICBpZiAo cGFyc2VkYXRbaV0gPT0gSUFDKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg c3RyVG1wW2ktNV0gPSBwYXJzZWRhdFtpXTsKKyAgICAgICAgICAgIHN0clRtcFtpLTRdID0gMDsK KyAgICAgICAgfQorCisgICAgICAgIGlmICghc3RyVG1wWzBdKQorICAgICAgICAgICAgc3RyY3B5 KHN0clRtcCwgIkF1dGhlbnRpY2F0aW9uIHJlamVjdGVkIGJ5IHJlbW90ZSBtYWNoaW5lISIpOwor ICAgICAgICBwcmludGYoIktlcmJlcm9zIFY0IGF1dGhlbnRpY2F0aW9uIGZhaWxlZCFcclxuJXNc clxuIixzdHJUbXApOworICAgICAgICBrcmI0X2Vycm5vID0gLTE7CisgICAgICAgIG1ha2VzdHIo JmtyYjRfZXJybXNnLHN0clRtcCk7CisgICAgICAgIGF1dGhfZmluaXNoZWQoQVVUSF9SRUpFQ1Qp OworICAgICAgICByZXR1cm4gQVVUSF9GQUlMVVJFOworICAgIH0KKworICAgIGlmIChwYXJzZWRh dFs0XSA9PSBLUkJfQUNDRVBUKSB7CisgICAgICAgIGludCBuZXRfbGVuOworICAgICAgICBpZiAo KHBhcnNlZGF0WzNdICYgQVVUSF9IT1dfTUFTSykgPT0gQVVUSF9IT1dfT05FX1dBWSkgeworICAg ICAgICAgICAgY2ttYWttc2coc3RyVG1wLHNpemVvZihzdHJUbXApLCJLZXJiZXJvcyBWNCBhY2Nl cHRzIHlvdSBhcyAiLAorICAgICAgICAgICAgICAgICAgICAgIHN6VXNlck5hbWUsTlVMTCxOVUxM KTsKKyAgICAgICAgICAgIHByaW50ZigiJXNcclxuIixzdHJUbXApOworICAgICAgICAgICAgYWNj ZXB0X2NvbXBsZXRlID0gMTsKKyAgICAgICAgICAgIGtyYjRfZXJybm8gPSAwOworICAgICAgICAg ICAgbWFrZXN0cigma3JiNF9lcnJtc2csc3RyVG1wKTsKKyAgICAgICAgICAgIGF1dGhfZmluaXNo ZWQoQVVUSF9VU0VSKTsKKyAgICAgICAgICAgIHJldHVybiBBVVRIX1NVQ0NFU1M7CisgICAgICAg IH0KKworICAgICAgICBpZiAoKHBhcnNlZGF0WzNdICYgQVVUSF9IT1dfTUFTSykgIT0gQVVUSF9I T1dfTVVUVUFMKSB7CisgICAgICAgICAgICBwcmludGYoIktlcmJlcm9zIFY0IGF1dGhlbnRpY2F0 aW9uIGZhaWxlZCFcclxuIik7CisgICAgICAgICAgICBja3N0cm5jcHkoc3RyVG1wLAorICAgICAg ICAiS2VyYmVyb3MgVjQgYWNjZXB0ZWQgeW91LCBidXQgZGlkbid0IHByb3ZpZGUgbXV0dWFsIGF1 dGhlbnRpY2F0aW9uIiwKKyAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0clRtcCkpOwor ICAgICAgICAgICAgcHJpbnRmKCIlc1xyXG4iLHN0clRtcCk7CisgICAgICAgICAgICBrcmI0X2Vy cm5vID0gLTE7CisgICAgICAgICAgICBtYWtlc3RyKCZrcmI0X2Vycm1zZyxzdHJUbXApOworICAg ICAgICAgICAgYXV0aF9maW5pc2hlZChBVVRIX1JFSkVDVCk7CisgICAgICAgICAgICByZXR1cm4g QVVUSF9GQUlMVVJFOworICAgICAgICB9CisKKyNpZm5kZWYgUkVNT1ZFX0ZPUl9FWFBPUlQKKyNp ZmRlZiBDS19FTkNSWVBUSU9OCisgICAgICAgIFNlbmRLNEF1dGhTQihLUkI0X0NIQUxMRU5HRSxr NF9zZXNzaW9uX2tleSxzaXplb2YoazRfc2Vzc2lvbl9rZXkpKTsKKworICAgICAgICAvKiBXZSBo YXZlIHNlbnQgdGhlIGRlY3J5cHRlZCBzZXNzaW9uIGtleSB0byB0aGUgaG9zdCBhcyBhIGNoYWxs ZW5nZSAqLworICAgICAgICAvKiBub3cgZW5jcnlwdCBpdCB0byByZXN0b3JlIGl0IHRvIGl0cyBv cmlnaW5hbCB2YWxpZCBERVMga2V5IHZhbHVlICovCisjaWZkZWYgTUlUX0NVUlJFTlQKKyAgICAg ICAga2RhdGEuZGF0YSA9IGs0X3Nlc3Npb25fa2V5OworICAgICAgICBrZGF0YS5sZW5ndGggPSA4 OworCisgICAgICAgIGVuY2RhdGEuY2lwaGVydGV4dC5kYXRhID0gazRfc2Vzc2lvbl9rZXk7Cisg ICAgICAgIGVuY2RhdGEuY2lwaGVydGV4dC5sZW5ndGggPSA4OworICAgICAgICBlbmNkYXRhLmVu Y3R5cGUgPSBFTkNUWVBFX1VOS05PV047CisKKyAgICAgICAgaWYgKGNvZGUgPSBrcmI1X2NfZW5j cnlwdChrNV9jb250ZXh0LCAmazRfa3Jia2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAwLCAwLCAma2RhdGEsICZlbmNkYXRhKSkgeworICAgICAgICAgICAgY29tX2Vycigi azRfYXV0aF9yZXBseSIsIGNvZGUsCisgICAgICAgICAgICAgICAgICAgICAid2hpbGUgZW5jcnlw dGluZyBzZXNzaW9uX2tleSIpOworICAgICAgICAgICAgYXV0aF9maW5pc2hlZChBVVRIX1JFSkVD VCk7CisgICAgICAgICAgICByZXR1cm4gQVVUSF9GQUlMVVJFOworICAgICAgICB9CisjZWxzZSAv KiBNSVRfQ1VSUkVOVCAqLworI2lmZGVmIE5UCisgICAgICAgIGRlc19lY2JfZW5jcnlwdChrNF9z ZXNzaW9uX2tleSwgazRfc2Vzc2lvbl9rZXksIGs0X3NjaGVkLCAxKTsKKyNlbHNlIC8qIE5UICov CisgICAgICAgIGRlc19lY2JfZW5jcnlwdCgmazRfc2Vzc2lvbl9rZXksICZrNF9zZXNzaW9uX2tl eSwgazRfc2NoZWQsIDEpOworI2VuZGlmIC8qIE5UICovCisgICAgICAgIGNraGV4ZHVtcCgKKyAg ICAgICAgICAgICJrNF9hdXRoX3JlcGx5IGRlc19lY2JfZW5jcnlwdChrNF9zZXNzaW9uX2tleSxr NF9zZXNzaW9uX2tleSwxKSIsCisgICAgICAgICAgICAgazRfc2Vzc2lvbl9rZXksCisgICAgICAg ICAgICAgOAorICAgICAgICAgICAgICAgICk7CisjZW5kaWYgLyogTUlUX0NVUlJFTlQgKi8KKwor I2lmZGVmIENLX1NTTAorICAgICAgICBpZiAoIShzc2xfYWN0aXZlX2ZsYWcgfHwgdGxzX2FjdGl2 ZV9mbGFnKSkKKyNlbmRpZiAvKiBDS19TU0wgKi8KKyAgICAgICAgeworICAgICAgICAvKiBBbmQg dGhlbiB1c2UgaXQgdG8gY29uZmlndXJlIHRoZSBlbmNyeXB0aW9uIHN0YXRlIG1hY2hpbmUuICov CisgICAgICAgICAgICBza2V5LnR5cGUgPSBTS19ERVM7CisgICAgICAgICAgICBza2V5Lmxlbmd0 aCA9IDg7CisgICAgICAgICAgICBza2V5LmRhdGEgPSBrNF9zZXNzaW9uX2tleTsKKyAgICAgICAg ICAgIGVuY3J5cHRfc2Vzc2lvbl9rZXkoJnNrZXksIEFVVEhfQ0xJRU5UX1RPX1NFUlZFUik7Cisg ICAgICAgIH0KKyNlbmRpZiAvKiBFTkNSWVBUSU9OICovCisjZW5kaWYgLyogUkVNT1ZFX0ZPUl9F WFBPUlQgKi8KKyAgICAgICAgYWNjZXB0X2NvbXBsZXRlID0gMTsKKyAgICAgICAgY2ttYWttc2co c3RyVG1wLHNpemVvZihzdHJUbXApLAorICAgICAgICAgICAgICAgICAiS2VyYmVyb3MgVjQgYWNj ZXB0cyB5b3UgYXMgIixzelVzZXJOYW1lLE5VTEwsTlVMTCk7CisgICAgICAgIHByaW50ZigiJXNc clxuIixzdHJUbXApOworICAgICAgICBrcmI0X2Vycm5vID0gMDsKKyAgICAgICAgbWFrZXN0cigm a3JiNF9lcnJtc2csc3RyVG1wKTsKKyAgICAgICAgYXV0aF9maW5pc2hlZChBVVRIX1VTRVIpOwor ICAgICAgICByZXR1cm4gQVVUSF9TVUNDRVNTOworICAgIH0KKworICAgIGlmIChwYXJzZWRhdFs0 XSA9PSBLUkI0X1JFU1BPTlNFKSB7CisgICAgICAgIGlmIChlbmRfc3ViIDwgMTIpIHsKKyAgICAg ICAgICAgIGF1dGhfZmluaXNoZWQoQVVUSF9SRUpFQ1QpOworICAgICAgICAgICAgcmV0dXJuIEFV VEhfRkFJTFVSRTsKKyAgICAgICAgfQorCisgICAgICAgIGNraGV4ZHVtcCgiS1JCNF9SRVNQT05T RSAmcGFyc2VkYXRbNV0iLCZwYXJzZWRhdFs1XSw4KTsKKyNpZmRlZiBDS19FTkNSWVBUSU9OCisg ICAgICAgIGNraGV4ZHVtcCgiS1JCNF9SRVNQT05TRSBrNF9jaGFsbGVuZ2UiLGs0X2NoYWxsZW5n ZSw4KTsKKworICAgICAgICAvKiBUaGUgZGF0YWJsb2NrIHJldHVybmVkIGZyb20gdGhlIGhvc3Qg c2hvdWxkIG1hdGNoIHRoZSB2YWx1ZSAqLworICAgICAgICAvKiB3ZSBzdG9yZWQgaW4gazRfY2hh bGxlbmdlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICBpZiAo bWVtY21wKCZwYXJzZWRhdFs1XSwgazRfY2hhbGxlbmdlLCBzaXplb2YoazRfY2hhbGxlbmdlKSkg IT0gMCkgeworICAgICAgICAgICAgcHJpbnRmKCJLZXJiZXJvcyBWNCBhdXRoZW50aWNhdGlvbiBm YWlsZWQhXHJcbiVzXHJcbiIsCisgICAgICAgICAgICAiUmVtb3RlIG1hY2hpbmUgaXMgYmVpbmcg aW1wZXJzb25hdGVkISIpOworICAgICAgICAgICAga3JiNF9lcnJubyA9IC0xOworICAgICAgICAg ICAgbWFrZXN0cigma3JiNF9lcnJtc2csIlJlbW90ZSBtYWNoaW5lIGlzIGJlaW5nIGltcGVyc29u YXRlZCEiKTsKKyAgICAgICAgICAgIGF1dGhfZmluaXNoZWQoQVVUSF9SRUpFQ1QpOworICAgICAg ICAgICAgcmV0dXJuIEFVVEhfRkFJTFVSRTsKKyAgICAgICAgfQorI2Vsc2UgLyogRU5DUllQVElP TiAqLworICAgICAgICBtYWtlc3RyKCZrcmI0X2Vycm1zZywiS2VybWl0IGJ1aWx0IHdpdGhvdXQg c3VwcG9ydCBmb3IgZW5jcnlwdGlvbi4iKTsKKyAgICAgICAgcmV0dXJuIEFVVEhfRkFJTFVSRTsK KyNlbmRpZiAvKiBFTkNSWVBUSU9OICovCisgICAgICAgIG11dHVhbF9jb21wbGV0ZSA9IDE7Cisg ICAgICAgIGNrc3RybmNweShzdHJUbXAsIlJlbW90ZSBtYWNoaW5lIGhhcyBiZWVuIG11dHVhbGx5 IGF1dGhlbnRpY2F0ZWQiLAorICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJUbXApKTsKKyAg ICAgICAgcHJpbnRmKCIlc1xyXG4iLHN0clRtcCk7CisgICAgICAgIGtyYjRfZXJybm8gPSAwOwor ICAgICAgICBtYWtlc3RyKCZrcmI0X2Vycm1zZyxzdHJUbXApOworICAgICAgICBhdXRoX2Zpbmlz aGVkKEFVVEhfVVNFUik7CisgICAgICAgIHJldHVybiBBVVRIX1NVQ0NFU1M7CisgICAgfQorICAg IGF1dGhfZmluaXNoZWQoQVVUSF9SRUpFQ1QpOworICAgIHJldHVybiBBVVRIX0ZBSUxVUkU7Cit9 CisKKy8qCisgKiBGdW5jdGlvbjogSzQgcGFyc2UgYXV0aGVudGljYXRpb24gSVMgY29tbWFuZAor ICoKKyAqIFBhcmFtZXRlcnM6CisgKiAgcGFyc2VkYXQgLSB0aGUgc3ViLWNvbW1hbmQgZGF0YS4K KyAqCisgKiAgZW5kX3N1YiAtIGluZGV4IG9mIHRoZSBjaGFyYWN0ZXIgaW4gdGhlICdwYXJzZWRh dCcgYXJyYXkgd2hpY2gKKyAqICAgICAgICAgICAgaXMgdGhlIGxhc3QgYnl0ZSBpbiBhIHN1Yi1u ZWdvdGlhdGlvbgorICoKKyAqIFJldHVybnM6IEtlcmJlcm9zIGVycm9yIGNvZGUuCisgKi8KKwor c3RhdGljIGludAorI2lmZGVmIENLX0FOU0lDCitrNF9hdXRoX2lzKHVuc2lnbmVkIGNoYXIgKnBh cnNlZGF0LCBpbnQgZW5kX3N1YikKKyNlbHNlCitrNF9hdXRoX2lzKHBhcnNlZGF0LGVuZF9zdWIp IHVuc2lnbmVkIGNoYXIgKnBhcnNlZGF0OyBpbnQgZW5kX3N1YjsKKyNlbmRpZgoreworI2lmZGVm IENLX0VOQ1JZUFRJT04KKyAgICBTZXNzaW9uX0tleSBza2V5OworI2lmZGVmIE1JVF9DVVJSRU5U CisgICAgQmxvY2sgZGF0YWJsb2NrLCB0bXBrZXk7CisgICAga3JiNV9kYXRhIGtkYXRhOworICAg IGtyYjVfZW5jX2RhdGEgZW5jZGF0YTsKKyAgICBrcmI1X2Vycm9yX2NvZGUgY29kZTsKKyNlbHNl IC8qIE1JVF9DVVJSRU5UICovCisgICAgQmxvY2sgZGF0YWJsb2NrOworI2VuZGlmIC8qIE1JVF9D VVJSRU5UICovCisjZW5kaWYgIC8qIEVOQ1JZUFRJT04gKi8KKyAgICBjaGFyIHJlYWxtW1JFQUxN X1NaKzFdOworICAgIGNoYXIgaW5zdGFuY2VbSU5TVF9TWl07CisgICAgaW50IHIgPSAwOworICAg IGNoYXIgKiBkYXRhID0gJnBhcnNlZGF0WzVdOworICAgIGludCAgICBjbnQgPSBlbmRfc3ViIC0g NTsKKyAgICBleHRlcm4gY2hhciBteWlwYWRkcltdOworICAgIHN0cnVjdCBob3N0ZW50ICpob3N0 OworICAgIHN0cnVjdCBpbl9hZGRyIGluYWRkcjsKKyAgICBpbnQgaTsKKworICAgIGlmIChlbmRf c3ViIDwgNCB8fCBwYXJzZWRhdFsyXSAhPSBBVVRIVFlQRV9LRVJCRVJPU19WNCkgeworICAgICAg ICBkZWJ1ZyhGMTEwLCJrNF9hdXRoX2lzIiwiTm90IGtlcmJlcm9zIHY0IiwwKTsKKyAgICAgICAg YXV0aF9maW5pc2hlZChBVVRIX1JFSkVDVCk7CisgICAgICAgIHJldHVybiBBVVRIX0ZBSUxVUkU7 CisgICAgfQorCisgICAgc3dpdGNoIChwYXJzZWRhdFs0XSkgeworICAgIGNhc2UgS1JCX0FVVEg6 CisgICAgICAgIGRlYnVnKEYxMTAsIms0X2F1dGhfaXMiLCJLUkJfQVVUSCIsMCk7CisgICAgICAg IGNrc3RybmNweShyZWFsbSxja19rcmI0X2dldHJlYWxtKCksUkVBTE1fU1orMSk7CisgICAgICAg IGlmIChyZWFsbVswXSA9PSAnXDAnKSB7CisgICAgICAgICAgICBTZW5kSzRBdXRoU0IoS1JCX1JF SkVDVCwgKHZvaWQgKikiTm8gbG9jYWwgVjQgUmVhbG0uIiwgLTEpOworICAgICAgICAgICAgcHJp bnRmKCJcclxuPyBLZXJiZXJvcyA0IC0gTm8gTG9jYWwgUmVhbG1cclxuIik7CisgICAgICAgICAg ICBkZWJ1ZyhGMTEwLCJrNF9hdXRoX2lzIiwiTm8gbG9jYWwgcmVhbG0iLDApOworICAgICAgICAg ICAga3JiNF9lcnJubyA9IC0xOworICAgICAgICAgICAgbWFrZXN0cigma3JiNF9lcnJtc2csIk5v IGxvY2FsIHJlYWxtIik7CisgICAgICAgICAgICBhdXRoX2ZpbmlzaGVkKEFVVEhfUkVKRUNUKTsK KyAgICAgICAgICAgIHJldHVybiBBVVRIX0ZBSUxVUkU7CisgICAgICAgIH0KKyAgICAgICAgZGVi dWcoRjExMCwiazRfYXV0aF9pcyIscmVhbG0sMCk7CisgICAgICAgIGlmICggY250IDwgc2l6ZW9m KGs0X2F1dGguZGF0KSApIHsKKyAgICAgICAgICAgIGs0X2F1dGgubGVuZ3RoID0gY250OworICAg ICAgICAgICAgbWVtY3B5KCh2b2lkICopazRfYXV0aC5kYXQsICh2b2lkICopZGF0YSwgazRfYXV0 aC5sZW5ndGgpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGs0X2F1dGgubGVuZ3RoID0g MDsKKyAgICAgICAgY2toZXhkdW1wKCJrNF9hdXRoLmRhdCIsazRfYXV0aC5kYXQsIGs0X2F1dGgu bGVuZ3RoKTsKKworICAgICAgICAvKiBHZXQgSW5zdGFuY2UgKi8KKyAgICAgICAgaW5hZGRyLnNf YWRkciA9IGluZXRfYWRkcihteWlwYWRkcik7CisgICAgICAgIGhvc3QgPSBnZXRob3N0YnlhZGRy KCh1bnNpZ25lZCBjaGFyICopJmluYWRkciw0LFBGX0lORVQpOworICAgICAgICBpZiAoIGhvc3Qg KSB7CisjaWZkZWYgSEFERFJMSVNUCisgICAgICAgICAgICBob3N0ID0gY2tfY29weWhvc3RlbnQo aG9zdCk7CisjZW5kaWYgLyogSEFERFJMSVNUICovCisgICAgICAgICAgICBja3N0cm5jcHkoaW5z dGFuY2UsaG9zdC0+aF9uYW1lLElOU1RfU1opOworICAgICAgICAgICAgZm9yICggaT0wO2k8SU5T VF9TWjtpKysgKSB7CisgICAgICAgICAgICAgICAgaWYgKCBpbnN0YW5jZVtpXSA9PSAnLicgKQor ICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZVtpXSA9ICdcMCc7CisgICAgICAgICAgICAgICAg ZWxzZQorICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZVtpXSA9IHRvbG93ZXIoaW5zdGFuY2Vb aV0pOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaW5zdGFu Y2VbMF0gPSAnKic7CisgICAgICAgICAgICBpbnN0YW5jZVsxXSA9IDA7CisgICAgICAgIH0KKwor ICAgICAgICBpZiAociA9IGtyYl9yZF9yZXEoJms0X2F1dGgsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAga3JiNF9kX3NydiA/IGtyYjRfZF9zcnYgOiBLUkI0X1NFUlZJQ0VfTkFNRSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZSwgMCwgJms0X2FkYXQsIGs0X2tleXRh YikpIHsKKworICAgICAgICAgICAgY2toZXhkdW1wKCJrNF9hZGF0IiwgJms0X2FkYXQsIHNpemVv ZihBVVRIX0RBVCkpOworICAgICAgICAgICAga3JiX2tudG9sbigmazRfYWRhdCwgazRfbmFtZSk7 CisgICAgICAgICAgICBja21ha21zZyhzdHJUbXAsc2l6ZW9mKHN0clRtcCksCisgICAgICAgICAg ICAgICAgICAgICAiS2VyYmVyb3MgZmFpbGVkIGhpbSBhcyAiLCBrNF9uYW1lLE5VTEwsTlVMTCk7 CisgICAgICAgICAgICBwcmludGYoIiVzXHJcbiIsc3RyVG1wKTsKKyAgICAgICAgICAgIGtyYjRf ZXJybm8gPSByOworICAgICAgICAgICAgbWFrZXN0cigma3JiNF9lcnJtc2csc3RyVG1wKTsKKyAg ICAgICAgICAgIFNlbmRLNEF1dGhTQihLUkJfUkVKRUNULCAodm9pZCAqKWtyYl9nZXRfZXJyX3Rl eHRfZW50cnkociksIC0xKTsKKyAgICAgICAgICAgIGF1dGhfZmluaXNoZWQoQVVUSF9SRUpFQ1Qp OworICAgICAgICAgICAgcmV0dXJuIEFVVEhfRkFJTFVSRTsKKyAgICAgICAgfQorCisjaWZkZWYg Q0tfRU5DUllQVElPTgorICAgICAgICBtZW1jcHkoKHZvaWQgKilrNF9zZXNzaW9uX2tleSwgKHZv aWQgKilrNF9hZGF0LnNlc3Npb24sCisgICAgICAgICAgICAgICAgc2l6ZW9mKEJsb2NrKSk7ICAg ICAgICAgICAgICAgICAvKiBzYWZlICovCisgICAgICAgIGNraGV4ZHVtcCgiazRfYXV0aF9pcyBr NF9zZXNzaW9uX2tleSIsazRfc2Vzc2lvbl9rZXksc2l6ZW9mKEJsb2NrKSk7CisjZW5kaWYgLyog RU5DUllQVElPTiAqLworICAgICAgICBrcmJfa250b2xuKCZrNF9hZGF0LCBrNF9uYW1lKTsKKwor ICAgICAgICBja3N0cm5jcHkoc3pVc2VyTmFtZUF1dGhlbnRpY2F0ZWQsazRfbmFtZSxVSURCVUZM RU4pOworICAgICAgICBpZiAoc3pVc2VyTmFtZVJlcXVlc3RlZCAmJiAha3VzZXJvaygmazRfYWRh dCwgazRfbmFtZSkpIHsKKyAgICAgICAgICAgIFNlbmRLNEF1dGhTQihLUkJfQUNDRVBULCAodm9p ZCAqKTAsIDApOworICAgICAgICAgICAgaWYgKCAhc3RyY21wKGs0X25hbWUsc3pVc2VyTmFtZVJl cXVlc3RlZCkgKQorICAgICAgICAgICAgICAgIGF1dGhfZmluaXNoZWQoQVVUSF9WQUxJRCk7Cisg ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYXV0aF9maW5pc2hlZChBVVRIX1VTRVIp OworICAgICAgICAgICAgYWNjZXB0X2NvbXBsZXRlID0gMTsKKyAgICAgICAgfQorICAgICAgICBl bHNlIHsKKyAgICAgICAgICAgIFNlbmRLNEF1dGhTQihLUkJfUkVKRUNULAorICAgICAgICAgICAg ICAgICAgKHZvaWQgKikidXNlciBpcyBub3QgYXV0aG9yaXplZCIsIC0xKTsKKyAgICAgICAgICAg IGF1dGhfZmluaXNoZWQoQVVUSF9SRUpFQ1QpOworICAgICAgICAgICAga3JiNF9lcnJubyA9IHI7 CisgICAgICAgICAgICBtYWtlc3RyKCZrcmI0X2Vycm1zZywidXNlciBpcyBub3QgYXV0aG9yaXpl ZCIpOworICAgICAgICAgICAgcmV0dXJuKEFVVEhfRkFJTFVSRSk7CisgICAgICAgIH0KKyAgICAg ICAgYnJlYWs7CisKKyAgICBjYXNlIEtSQjRfQ0hBTExFTkdFOgorICAgICAgICBkZWJ1ZyhGMTEw LCJrNF9hdXRoX2lzIiwiS1JCX0NIQUxMRU5HRSIsMCk7CisjaWZuZGVmIENLX0VOQ1JZUFRJT04K KyAgICAgICAgU2VuZEs0QXV0aFNCKEtSQjRfUkVTUE9OU0UsICh2b2lkICopMCwgMCk7CisjZWxz ZSAgIC8qIEVOQ1JZUFRJT04gKi8KKyAgICAgICAgaWYgKCFWQUxJREtFWShrNF9zZXNzaW9uX2tl eSkpIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAqIFdlIGRvbid0IGhhdmUgYSB2YWxp ZCBzZXNzaW9uIGtleSwgc28ganVzdAorICAgICAgICAgICAgKiBzZW5kIGJhY2sgYSByZXNwb25z ZSB3aXRoIGFuIGVtcHR5IHNlc3Npb24KKyAgICAgICAgICAgICoga2V5LgorICAgICAgICAgICAg Ki8KKyAgICAgICAgICAgIFNlbmRLNEF1dGhTQihLUkI0X1JFU1BPTlNFLCAodm9pZCAqKTAsIDAp OworICAgICAgICAgICAgbXV0dWFsX2NvbXBsZXRlID0gMTsKKyAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICB9CisKKyAgICAgICAgLyoKKyAgICAgICAgKiBJbml0aWFsaXplIHRoZSByYW5kb20g bnVtYmVyIGdlbmVyYXRvciBzaW5jZSBpdCdzCisgICAgICAgICogdXNlZCBsYXRlciBvbiBieSB0 aGUgZW5jcnlwdGlvbiByb3V0aW5lLgorICAgICAgICAqLworI2lmZGVmIE1JVF9DVVJSRU5UCisg ICAgICAgIGtkYXRhLmRhdGEgPSBrNF9zZXNzaW9uX2tleTsKKyAgICAgICAga2RhdGEubGVuZ3Ro ID0gODsKKworICAgICAgICBpZiAoY29kZSA9IGtyYjVfY19yYW5kb21fc2VlZChrNV9jb250ZXh0 LCAma2RhdGEpKSB7CisgICAgICAgICAgICBjb21fZXJyKCJrNF9hdXRoX2lzIiwgY29kZSwKKyAg ICAgICAgICAgICAgICAgICAgICJ3aGlsZSBzZWVkaW5nIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9y Iik7CisgICAgICAgICAgICBhdXRoX2ZpbmlzaGVkKEFVVEhfUkVKRUNUKTsKKyAgICAgICAgICAg IHJldHVybiBBVVRIX0ZBSUxVUkU7CisgICAgICAgIH0KKworICAgICAgICBtZW1jcHkoKHZvaWQg KilkYXRhYmxvY2ssICh2b2lkICopZGF0YSwgc2l6ZW9mKEJsb2NrKSk7IC8qIHNhZmUgKi8KKyAg ICAgICAgLyoKKyAgICAgICAgKiBUYWtlIHRoZSByZWNlaXZlZCBlbmNyeXB0ZWQgY2hhbGxlbmdl LCBhbmQgZW5jcnlwdAorICAgICAgICAqIGl0IGFnYWluIHRvIGdldCBhIHVuaXF1ZSBzZXNzaW9u X2tleSBmb3IgdGhlCisgICAgICAgICogRU5DUllQVCBvcHRpb24uCisgICAgICAgICovCisgICAg ICAgIGs0X2tyYmtleS5lbmN0eXBlID0gRU5DVFlQRV9ERVNfQ0JDX1JBVzsKKyAgICAgICAgazRf a3Jia2V5Lmxlbmd0aCA9IDg7CisgICAgICAgIGs0X2tyYmtleS5jb250ZW50cyA9IGs0X3Nlc3Np b25fa2V5OworCisgICAgICAgIGtkYXRhLmRhdGEgPSBkYXRhYmxvY2s7CisgICAgICAgIGtkYXRh Lmxlbmd0aCA9IDg7CisKKyAgICAgICAgZW5jZGF0YS5jaXBoZXJ0ZXh0LmRhdGEgPSB0bXBrZXk7 CisgICAgICAgIGVuY2RhdGEuY2lwaGVydGV4dC5sZW5ndGggPSA4OworICAgICAgICBlbmNkYXRh LmVuY3R5cGUgPSBFTkNUWVBFX1VOS05PV047CisKKyAgICAgICAgaWYgKGNvZGUgPSBrcmI1X2Nf ZW5jcnlwdChrNV9jb250ZXh0LCAmazRfa3Jia2V5LCAwLCAwLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAma2RhdGEsICZlbmNkYXRhKSkgeworICAgICAgICAgICAgY29tX2Vy cigiazRfYXV0aF9pcyIsIGNvZGUsICJ3aGlsZSBlbmNyeXB0aW5nIHJhbmRvbSBrZXkiKTsKKyAg ICAgICAgICAgIGF1dGhfZmluaXNoZWQoQVVUSF9SRUpFQ1QpOworICAgICAgICAgICAgcmV0dXJu IEFVVEhfRkFJTFVSRTsKKyAgICAgICAgfQorCisjaWZkZWYgQ0tfU1NMCisgICAgICAgIGlmICgh KHNzbF9hY3RpdmVfZmxhZyB8fCB0bHNfYWN0aXZlX2ZsYWcpKQorI2VuZGlmIC8qIENLX1NTTCAq LworICAgICAgICB7CisgICAgICAgICAgICBza2V5LnR5cGUgPSBTS19ERVM7CisgICAgICAgICAg ICBza2V5Lmxlbmd0aCA9IDg7CisgICAgICAgICAgICBza2V5LmRhdGEgPSB0bXBrZXk7CisgICAg ICAgICAgICBlbmNyeXB0X3Nlc3Npb25fa2V5KCZza2V5LCBBVVRIX1NFUlZFUl9UT19DTElFTlQp OworICAgICAgICB9CisgICAgICAgIC8qCisgICAgICAgICogTm93IGRlY3J5cHQgdGhlIHJlY2Vp dmVkIGVuY3J5cHRlZCBjaGFsbGVuZ2UsCisgICAgICAgICogaW5jcmVtZW50IGJ5IG9uZSwgcmUt ZW5jcnlwdCBpdCBhbmQgc2VuZCBpdCBiYWNrLgorICAgICAgICAqLworICAgICAgICBlbmNkYXRh LmNpcGhlcnRleHQuZGF0YSA9IGRhdGFibG9jazsKKyAgICAgICAgZW5jZGF0YS5jaXBoZXJ0ZXh0 Lmxlbmd0aCA9IDg7CisgICAgICAgIGVuY2RhdGEuZW5jdHlwZSA9IEVOQ1RZUEVfVU5LTk9XTjsK KworICAgICAgICBrZGF0YS5kYXRhID0gazRfY2hhbGxlbmdlOworICAgICAgICBrZGF0YS5sZW5n dGggPSA4OworCisgICAgICAgIGlmIChjb2RlID0ga3JiNV9jX2RlY3J5cHQoazVfY29udGV4dCwg Jms0X2tyYmtleSwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVu Y2RhdGEsICZrZGF0YSkpIHsKKyAgICAgICAgICAgIGNvbV9lcnIoIms0X2F1dGhfaXMiLCBjb2Rl LCAid2hpbGUgZGVjcnlwdGluZyBjaGFsbGVuZ2UiKTsKKyAgICAgICAgICAgIGF1dGhfZmluaXNo ZWQoQVVUSF9SRUpFQ1QpOworICAgICAgICAgICAgcmV0dXJuIEFVVEhfRkFJTFVSRTsKKyAgICAg ICAgfQorI2Vsc2UgLyogTUlUX0NVUlJFTlQgKi8KKyAgICAgICAgZGVzX3NldF9yYW5kb21fZ2Vu ZXJhdG9yX3NlZWQoazRfc2Vzc2lvbl9rZXkpOworICAgICAgICByID0gZGVzX2tleV9zY2hlZChr NF9zZXNzaW9uX2tleSwgazRfc2NoZWQpOworICAgICAgICBpZiAoIHIgPT0gLTEgKSB7CisgICAg ICAgICAgICBwcmludGYoIj9JbnZhbGlkIERFUyBrZXkgc3BlY2lmaWVkIGluIGNyZWRlbnRpYWxz XHJcbiIpOworICAgICAgICAgICAgZGVidWcoRjExMCwiYXV0aF9pcyBDSEFMTEVOR0UiLAorICAg ICAgICAgICAgICAgICAgICJpbnZhbGlkIERFUyBLZXkgc3BlY2lmaWVkIGluIGNyZWRlbnRpYWxz IiwwKTsKKyAgICAgICAgfSBlbHNlIGlmICggciA9PSAtMiApIHsKKyAgICAgICAgICAgIHByaW50 ZigiP1dlYWsgREVTIGtleSBzcGVjaWZpZWQgaW4gY3JlZGVudGlhbHNcclxuIik7CisgICAgICAg ICAgICBkZWJ1ZyhGMTEwLCJhdXRoX2lzIENIQUxMRU5HRSIsCisgICAgICAgICAgICAgICAgICAg IndlYWsgREVTIEtleSBzcGVjaWZpZWQgaW4gY3JlZGVudGlhbHMiLDApOworICAgICAgICB9IGVs c2UgaWYgKCByICE9IDAgKSB7CisgICAgICAgICAgICBwcmludGYoIj9ERVMgS2V5IFNjaGVkdWxl IG5vdCBzZXQgYnkgY3JlZGVudGlhbHNcclxuIik7CisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJh dXRoX2lzIENIQUxMRU5HRSIsCisgICAgICAgICAgICAgICAgICAgIkRFUyBLZXkgU2NoZWR1bGUg bm90IHNldCBieSBjcmVkZW50aWFscyIsMCk7CisgICAgICAgIH0KKyAgICAgICAgY2toZXhkdW1w KCJhdXRoX2lzIHNjaGVkdWxlIixrNF9zY2hlZCw4KjE2KTsKKworICAgICAgICBtZW1jcHkoKHZv aWQgKilkYXRhYmxvY2ssICh2b2lkICopZGF0YSwgc2l6ZW9mKEJsb2NrKSk7IC8qIHNhZmUgKi8K KyAgICAgICAgY2toZXhkdW1wKCJhdXRoX2lzIGNoYWxsZWdlIixkYXRhYmxvY2ssc2l6ZW9mKEJs b2NrKSk7CisKKyAgICAgICAgLyoKKyAgICAgICAgKiBUYWtlIHRoZSByZWNlaXZlZCBlbmNyeXB0 ZWQgY2hhbGxlbmdlLCBhbmQgZW5jcnlwdAorICAgICAgICAqIGl0IGFnYWluIHRvIGdldCBhIHVu aXF1ZSBrNF9zZXNzaW9uX2tleSBmb3IgdGhlCisgICAgICAgICogRU5DUllQVCBvcHRpb24uCisg ICAgICAgICovCisjaWZkZWYgTlQKKyAgICAgICAgZGVzX2VjYl9lbmNyeXB0KGRhdGFibG9jaywg azRfc2Vzc2lvbl9rZXksIGs0X3NjaGVkLCAxKTsKKyNlbHNlIC8qIE5UICovCisgICAgICAgIGRl c19lY2JfZW5jcnlwdCgmZGF0YWJsb2NrLCAmazRfc2Vzc2lvbl9rZXksIGs0X3NjaGVkLCAxKTsK KyNlbmRpZiAvKiBOVCAqLworICAgICAgICBja2hleGR1bXAoImF1dGhfaXMgZGVzX2VjYl9lbmNy eXB0KGRhdGFibG9jayxrNF9zZXNzaW9uX2tleSwxKSIsCisgICAgICAgICAgICAgICAgIGs0X3Nl c3Npb25fa2V5LDgpOworCisjaWZkZWYgQ0tfU1NMCisgICAgICAgIGlmICghKHNzbF9hY3RpdmVf ZmxhZyB8fCB0bHNfYWN0aXZlX2ZsYWcpKQorI2VuZGlmIC8qIENLX1NTTCAqLworICAgICAgICB7 CisgICAgICAgICAgICBza2V5LnR5cGUgPSBTS19ERVM7CisgICAgICAgICAgICBza2V5Lmxlbmd0 aCA9IDg7CisgICAgICAgICAgICBza2V5LmRhdGEgPSBrNF9zZXNzaW9uX2tleTsKKyAgICAgICAg ICAgIGVuY3J5cHRfc2Vzc2lvbl9rZXkoJnNrZXksIEFVVEhfU0VSVkVSX1RPX0NMSUVOVCk7Cisg ICAgICAgIH0KKyAgICAgICAgLyoKKyAgICAgICAgKiBOb3cgZGVjcnlwdCB0aGUgcmVjZWl2ZWQg ZW5jcnlwdGVkIGNoYWxsZW5nZSwKKyAgICAgICAgKiBpbmNyZW1lbnQgYnkgb25lLCByZS1lbmNy eXB0IGl0IGFuZCBzZW5kIGl0IGJhY2suCisgICAgICAgICovCisjaWZkZWYgTlQKKyAgICAgICAg ZGVzX2VjYl9lbmNyeXB0KGRhdGFibG9jaywgazRfY2hhbGxlbmdlLCBrNF9zY2hlZCwgMCk7Cisj ZWxzZSAvKiBOVCAqLworICAgICAgICBkZXNfZWNiX2VuY3J5cHQoJmRhdGFibG9jaywgJms0X2No YWxsZW5nZSwgazRfc2NoZWQsIDApOworI2VuZGlmIC8qIE5UICovCisgICAgICAgIGNraGV4ZHVt cCgiYXV0aF9pcyBkZXNfZWNiX2VuY3J5cHQoZGF0YWJsb2NrLGs0X2NoYWxsZW5nZSwwKSIsCisg ICAgICAgICAgICAgICAgIGs0X3Nlc3Npb25fa2V5LDgpOworI2VuZGlmIC8qIE1JVF9DVVJSRU5U ICovCisgICAgICAgIGZvciAociA9IDc7IHIgPj0gMDsgci0tKSB7CisgICAgICAgICAgICByZWdp c3RlciBpbnQgdDsKKyAgICAgICAgICAgIHQgPSAodW5zaWduZWQgaW50KWs0X2NoYWxsZW5nZVty XSArIDE7CisgICAgICAgICAgICBrNF9jaGFsbGVuZ2Vbcl0gPSB0OyAgICAgICAgLyogaWdub3Jl IG92ZXJmbG93ICovCisgICAgICAgICAgICBpZiAodCA8IDI1NikgICAgICAgICAgICAgICAgLyog aWYgbm8gb3ZlcmZsb3csIGFsbCBkb25lICovCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgIH0KKyAgICAgICAgY2toZXhkdW1wKCJhdXRoX2lzIGs0X2NoYWxsZW5nZSsxIixrNF9jaGFs bGVuZ2UsOCk7CisKKyNpZmRlZiBNSVRfQ1VSUkVOVAorICAgICAgICBrZGF0YS5kYXRhID0gazRf Y2hhbGxlbmdlOworICAgICAgICBrZGF0YS5sZW5ndGggPSA4OworCisgICAgICAgIGVuY2RhdGEu Y2lwaGVydGV4dC5kYXRhID0gazRfY2hhbGxlbmdlOworICAgICAgICBlbmNkYXRhLmNpcGhlcnRl eHQubGVuZ3RoID0gODsKKyAgICAgICAgZW5jZGF0YS5lbmN0eXBlID0gRU5DVFlQRV9VTktOT1dO OworCisgICAgICAgIGlmIChjb2RlID0ga3JiNV9jX2VuY3J5cHQoazVfY29udGV4dCwgJms0X2ty YmtleSwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmtkYXRhLCAm ZW5jZGF0YSkpIHsKKyAgICAgICAgICAgIGNvbV9lcnIoIms0X2F1dGhfaXMiLCBjb2RlLCAid2hp bGUgZGVjcnlwdGluZyBjaGFsbGVuZ2UiKTsKKyAgICAgICAgICAgIGF1dGhfZmluaXNoZWQoQVVU SF9SRUpFQ1QpOworICAgICAgICAgICAgcmV0dXJuIEFVVEhfRkFJTFVSRTsKKyAgICAgICAgfQor I2Vsc2UgLyogTUlUX0NVUlJFTlQgKi8KKyNpZmRlZiBOVAorICAgICAgICBkZXNfZWNiX2VuY3J5 cHQoazRfY2hhbGxlbmdlLCBrNF9jaGFsbGVuZ2UsIGs0X3NjaGVkLCAxKTsKKyNlbHNlIC8qIE5U ICovCisgICAgICAgIGRlc19lY2JfZW5jcnlwdCgmazRfY2hhbGxlbmdlLCAmazRfY2hhbGxlbmdl LCBrNF9zY2hlZCwgMSk7CisjZW5kaWYgLyogTlQgKi8KKyAgICAgICAgY2toZXhkdW1wKCJhdXRo X2lzIGRlc19lY2JfZW5jcnlwdChrNF9jaGFsbGVuZ2Vfa2V5LGs0X2NoYWxsZW5nZSwxKSIsCisg ICAgICAgICAgICAgICAgIGs0X2NoYWxsZW5nZSw4KTsKKworI2VuZGlmIC8qIE1JVF9DVVJSRU5U ICovCisgICAgICAgIFNlbmRLNEF1dGhTQihLUkI0X1JFU1BPTlNFLCh2b2lkICopazRfY2hhbGxl bmdlLHNpemVvZihrNF9jaGFsbGVuZ2UpKTsKKyNlbmRpZiAgLyogRU5DUllQVElPTiAqLworICAg ICAgICBtdXR1YWxfY29tcGxldGUgPSAxOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6 CisgICAgICAgIGlmICgxKQorICAgICAgICAgICAgcHJpbnRmKCJVbmtub3duIEtlcmJlcm9zIG9w dGlvbiAlZFxyXG4iLCBkYXRhWy0xXSk7CisgICAgICAgIFNlbmRLNEF1dGhTQihLUkJfUkVKRUNU LCAwLCAwKTsKKyAgICAgICAgcmV0dXJuKEFVVEhfRkFJTFVSRSk7CisgICAgfQorICAgIGtyYjRf ZXJybm8gPSByOworICAgIG1ha2VzdHIoJmtyYjRfZXJybXNnLGtyYl9nZXRfZXJyX3RleHRfZW50 cnkoa3JiNF9lcnJubykpOworICAgIHJldHVybihBVVRIX1NVQ0NFU1MpOworfQorI2VuZGlmIC8q IEtSQjQgKi8KKworI2lmZGVmIEtSQjUKK2ludAorY2tfa3JiNV9hdXRvZ2V0X1RHVChjaGFyICog cmVhbG0pCit7CisgICAgZXh0ZXJuIHN0cnVjdCBrcmJfb3BfZGF0YSBrcmJfb3A7CisgICAgZXh0 ZXJuIHN0cnVjdCBrcmI1X2luaXRfZGF0YSBrcmI1X2luaXQ7CisgICAgY2hhciBwYXNzd2RbUFdE X1NaXTsKKyAgICBjaGFyIHByb21wdFs2NF07CisgICAgY2hhciAqIHNhdmVyZWFsbT1OVUxMOwor ICAgIGludCAgcmMgPSAtMTsKKyAgICBleHRlcm4gY2hhciAqIGs1cHJwcm9tcHQ7CisgICAgZXh0 ZXJuIGNoYXIgKiBrNXB3cHJvbXB0OworCisgICAgaW5pX2tlcmIoKTsgICAgICAgICAvKiBQbGFj ZSBkZWZhdWx0cyBpbiBhYm92ZSBzdHJ1Y3RzICovCisgICAgcGFzc3dkWzBdID0gJ1wwJzsKKwor ICAgIGlmICgga3JiNV9pbml0LnByaW5jaXBhbCA9PSBOVUxMIHx8CisgICAgICAgICBrcmI1X2lu aXQucHJpbmNpcGFsWzBdID09ICdcMCcpIHsKKyAgICAgICAgaW50IG9rID0gdXFfdHh0KE5VTEws azVwcnByb21wdCAmJiBrNXBycHJvbXB0WzBdID8gazVwcnByb21wdCA6CisgICAgICAgICAgICAg ICAgICAiS2VyYmVyb3MgNSBQcmluY2lwYWw6ICIsMixOVUxMLHBhc3N3ZCxQV0RfU1otMSxOVUxM LAorCQkJREVGQVVMVF9VUV9USU1FT1VUKTsKKyAgICAgICAgaWYgKCBvayAmJiBwYXNzd2RbMF0g KQorICAgICAgICAgICAgbWFrZXN0cigma3JiNV9pbml0LnByaW5jaXBhbCxwYXNzd2QpOworICAg ICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4oMCk7CisgICAgfQorCisgICAgLyogU2F2ZSBy ZWFsbSBpbiBpbml0IHN0cnVjdHVyZSBzbyBpdCBjYW4gYmUgcmVzdG9yZWQgKi8KKyAgICBpZiAo IHJlYWxtICkgeworICAgICAgICBzYXZlcmVhbG0gPSBrcmI1X2luaXQucmVhbG07CisgICAgICAg IGtyYjVfaW5pdC5yZWFsbSA9IHJlYWxtOworICAgIH0KKworICAgIGlmICggcGFzc3dkWzBdIHx8 ICEocHdidWZbMF0gJiYgcHdmbGcpICkgeworICAgICAgICBpbnQgb2s7CisgICAgICAgIGlmICgg azVwd3Byb21wdCAmJiBrNXB3cHJvbXB0WzBdICYmCisgICAgICAgICAgICAgKHN0cmxlbihrNXB3 cHJvbXB0KSArIHN0cmxlbihrcmI1X2luaXQucHJpbmNpcGFsKSArCisgICAgICAgICAgICAgIHN0 cmxlbihrcmI1X2luaXQucmVhbG0pIC0gNCkgPCBzaXplb2YocHJvbXB0KSkgeworICAgICAgICAg ICAgc3ByaW50Zihwcm9tcHQsazVwd3Byb21wdCxrcmI1X2luaXQucHJpbmNpcGFsLGtyYjVfaW5p dC5yZWFsbSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICBja21ha3htc2cocHJvbXB0LHNpemVv Zihwcm9tcHQpLAorICAgICAgICAgICAgICAgICAgazVwd3Byb21wdCAmJiBrNXB3cHJvbXB0WzBd ID8gazVwd3Byb21wdCA6CisgICAgICAgICAgICAgICAgICAiS2VyYmVyb3MgNSBQYXNzd29yZCBm b3IgIiwKKyAgICAgICAgICAgICAgICAgIGtyYjVfaW5pdC5wcmluY2lwYWwsIkAiLGtyYjVfaW5p dC5yZWFsbSwiOiAiLAorICAgICAgICAgICAgICAgICAgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxM LE5VTEwsTlVMTAorICAgICAgICAgICAgICAgICApOworICAgICAgICBvayA9IHVxX3R4dChOVUxM LHByb21wdCwyLE5VTEwscGFzc3dkLFBXRF9TWi0xLE5VTEwsCisJCSAgICBERUZBVUxUX1VRX1RJ TUVPVVQpOworICAgICAgICBpZiAoICFvayApCisgICAgICAgICAgICBwYXNzd2RbMF0gPSAnXDAn OworICAgIH0gZWxzZSB7CisgICAgICAgIGNrc3RybmNweShwYXNzd2QsKGNoYXIgKilwd2J1Zixz aXplb2YocGFzc3dkKSk7CisjaWZkZWYgT1MyCisgICAgICAgIGlmICggcHdjcnlwdCApCisgICAg ICAgICAgICBja19lbmNyeXB0KChjaGFyICopcGFzc3dkKTsKKyNlbmRpZiAvKiBPUzIgKi8KKyAg ICB9CisKKyAgICBpZiAoIHBhc3N3ZFswXSApIHsKKyAgICAgICAgZXh0ZXJuIHN0cnVjdCBrcmI0 X2luaXRfZGF0YSBrcmI0X2luaXQ7CisgICAgICAgIGNoYXIgKiBzYXZlazRyZWFsbT1OVUxMOwor CisgICAgICAgIG1ha2VzdHIoJmtyYjVfaW5pdC5wYXNzd29yZCxwYXNzd2QpOworCisgICAgICAg IGlmICgga3JiNV9kX2dldGs0ICkgeworICAgICAgICAgICAga3JiNV9pbml0LmdldGs0ID0gMTsK KyAgICAgICAgICAgIG1ha2VzdHIoJmtyYjRfaW5pdC5wcmluY2lwYWwsa3JiNV9pbml0LnByaW5j aXBhbCk7CisgICAgICAgICAgICBtYWtlc3RyKCZrcmI0X2luaXQucGFzc3dvcmQscGFzc3dkKTsK KyAgICAgICAgICAgIGlmICggcmVhbG0gKSB7CisgICAgICAgICAgICAgICAgc2F2ZWs0cmVhbG0g PSBrcmI0X2luaXQucmVhbG07CisgICAgICAgICAgICAgICAga3JiNF9pbml0LnJlYWxtID0gcmVh bG07CisgICAgICAgICAgICB9CisgICAgICAgICAgICByYyA9IGNrX2tyYjVfaW5pdFRHVCgma3Ji X29wLCAma3JiNV9pbml0LCZrcmI0X2luaXQpOworCisgICAgICAgICAgICBpZiAoIHNhdmVrNHJl YWxtICkKKyAgICAgICAgICAgICAgICBrcmI0X2luaXQucmVhbG0gPSBzYXZlazRyZWFsbTsKKyAg ICAgICAgICAgIGZyZWUoa3JiNF9pbml0LnBhc3N3b3JkKTsKKyAgICAgICAgICAgIGtyYjRfaW5p dC5wYXNzd29yZCA9IE5VTEw7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByYyA9IGNr X2tyYjVfaW5pdFRHVCgma3JiX29wLCAma3JiNV9pbml0LE5VTEwpOworICAgICAgICB9CisKKyAg ICAgICAgZnJlZShrcmI1X2luaXQucGFzc3dvcmQpOworICAgICAgICBrcmI1X2luaXQucGFzc3dv cmQgPSBOVUxMOworCisgICAgICAgIG1lbXNldChwYXNzd2QsMCxQV0RfU1opOworICAgIH0KKwor ICAgIC8qIHJlc3RvcmUgcmVhbG0gdG8gaW5pdCBzdHJ1Y3R1cmUgaWYgbmVlZGVkICovCisgICAg aWYgKCBzYXZlcmVhbG0gKQorICAgICAgICBrcmI1X2luaXQucmVhbG0gPSBzYXZlcmVhbG07Cisg ICAgcmV0dXJuKHJjID09IDApOworfQorCitzdGF0aWMga3JiNV9lcnJvcl9jb2RlCisjaWZkZWYg Q0tfQU5TSUMKK2s1X2dldF9jY2FjaGUoIGtyYjVfY29udGV4dCBrNV9jb250ZXh0LCBrcmI1X2Nj YWNoZSAqIHBfY2NhY2hlLAorICAgICAgICAgICAgICAgY2hhciAqIGNjX25hbWUgKQorI2Vsc2Ug IC8qIENLX0FOU0lDICovCitrNV9nZXRfY2NhY2hlKGs1X2NvbnRleHQsIHBfY2NhY2hlLCBjY19u YW1lKQorICAgIGtyYjVfY29udGV4dCBrNV9jb250ZXh0OworICAgIGtyYjVfY2NhY2hlICogcF9j Y2FjaGU7CisgICAgY2hhciAqIGNjX25hbWU7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAg ICBrcmI1X2Vycm9yX2NvZGUgcj0wOworICAgIGNoYXIgY2NfdG1wW0NLTUFYUEFUSCsxXTsKKyAg ICBjb25zdCBjaGFyICogZGVmX25hbWUgPSBOVUxMOworCisjaWZuZGVmIEhFSU1EQUwKKyAgICBp ZiAoIGNjX25hbWUgKSB7CisgICAgICAgIGlmICggc3RybmNtcCgiRklMRToiLGNjX25hbWUsNSkg JiYKKyAgICAgICAgICAgICBzdHJuY21wKCJNRU1PUlk6IixjY19uYW1lLDcpICYmCisgICAgICAg ICAgICAgc3RybmNtcCgiQVBJOiIsY2NfbmFtZSw0KSAmJgorICAgICAgICAgICAgIHN0cm5jbXAo IlNURElPOiIsY2NfbmFtZSw2KSAmJgorCSAgICAgc3RybmNtcCgiTVNMU0E6IixjY19uYW1lLDYp KQorI2lmZGVmIE5UCisgICAgICAgICAgICBja21ha21zZyhjY190bXAsQ0tNQVhQQVRILCJBUEk6 IixjY19uYW1lLE5VTEwsTlVMTCk7CisjZWxzZSAvKiBOVCAqLworICAgICAgICAgICAgY2ttYWtt c2coY2NfdG1wLENLTUFYUEFUSCwiRklMRToiLGNjX25hbWUsTlVMTCxOVUxMKTsKKyNlbmRpZiAv KiBOVCAqLworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGNrc3RybmNweShjY190bXAsY2Nf bmFtZSxDS01BWFBBVEgpOworICAgICAgICB9CisgICAgICAgIHIgPSBrcmI1X2NjX3Jlc29sdmUg KGs1X2NvbnRleHQsIGNjX3RtcCwgcF9jY2FjaGUpOworICAgICAgICBpZiAociAhPSAwKSB7Cisg ICAgICAgICAgICBjb21fZXJyKCJrNV9nZXRfY2NhY2hlIHJlc29sdmluZyBjY2FjaGUiLHIsCisg ICAgICAgICAgICAgICAgICAgICBjY190bXApOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg ICAgLyogTWFrZSBzdXJlIEdTU0FQSSBzZWVzIHRoZSBzYW1lIGNhY2hlIHdlIGFyZSB1c2luZyAq LworICAgICAgICAgICAgY2hhciBidWZbMTI4XTsKKyAgICAgICAgICAgIGNrbWFrbXNnKChjaGFy ICopYnVmLDEyOCwiS1JCNUNDTkFNRT0iLGNjX3RtcCxOVUxMLE5VTEwpOworICAgICAgICAgICAg cHV0ZW52KGJ1Zik7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKCBrcmI1X2RfY2MgKSB7Cisg ICAgICAgIGlmICggc3RybmNtcCgiRklMRToiLGtyYjVfZF9jYyw1KSAmJgorICAgICAgICAgICAg IHN0cm5jbXAoIk1FTU9SWToiLGtyYjVfZF9jYyw3KSAmJgorICAgICAgICAgICAgIHN0cm5jbXAo IkFQSToiLGtyYjVfZF9jYyw0KSAmJgorICAgICAgICAgICAgIHN0cm5jbXAoIlNURElPOiIsa3Ji NV9kX2NjLDYpICYmCisJICAgICBzdHJuY21wKCJNU0xTQToiLCBrcmI1X2RfY2MsNikpCisjaWZk ZWYgTlQKKyAgICAgICAgICAgIGNrbWFrbXNnKGNjX3RtcCxDS01BWFBBVEgsIkFQSToiLGtyYjVf ZF9jYyxOVUxMLE5VTEwpOworI2Vsc2UgLyogTlQgKi8KKyAgICAgICAgICAgIGNrbWFrbXNnKGNj X3RtcCxDS01BWFBBVEgsIkZJTEU6IixrcmI1X2RfY2MsTlVMTCxOVUxMKTsKKyNlbmRpZiAvKiBO VCAqLworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGNrc3RybmNweShjY190bXAsa3JiNV9k X2NjLENLTUFYUEFUSCk7CisgICAgICAgIH0KKyAgICAgICAgciA9IGtyYjVfY2NfcmVzb2x2ZSAo azVfY29udGV4dCwgY2NfdG1wLCBwX2NjYWNoZSk7CisgICAgICAgIGlmIChyICE9IDApIHsKKyAg ICAgICAgICAgIGNvbV9lcnIoIms1X2dldF9jY2FjaGUgcmVzb2x2aW5nIGNjYWNoZSIsciwKKyAg ICAgICAgICAgICAgICAgICAgIGtyYjVfZF9jYyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg ICAgICAvKiBNYWtlIHN1cmUgR1NTQVBJIHNlZXMgdGhlIHNhbWUgY2FjaGUgd2UgYXJlIHVzaW5n ICovCisgICAgICAgICAgICBjaGFyIGJ1ZlsxMjhdOworICAgICAgICAgICAgY2ttYWttc2coKGNo YXIgKilidWYsMTI4LCJLUkI1Q0NOQU1FPSIsY2NfdG1wLE5VTEwsTlVMTCk7CisgICAgICAgICAg ICBwdXRlbnYoYnVmKTsKKyAgICAgICAgfQorICAgIH0gZWxzZQorI2VuZGlmIC8qIEhFSU1EQUwg Ki8KKyAgICB7CisgICAgICAgIGlmICgociA9IGtyYjVfY2NfZGVmYXVsdChrNV9jb250ZXh0LCBw X2NjYWNoZSkpKSB7CisgICAgICAgICAgICBjb21fZXJyKCJrNV9nZXRfY2NhY2hlIixyLCJ3aGls ZSBnZXR0aW5nIGRlZmF1bHQgY2NhY2hlIik7CisgICAgICAgIH0KKyAgICB9CisgICAgLyogZG8g bm90IHNldCBrcmI1X2Vycm5vL2tyYjVfZXJybXNnIGhlcmUgc2luY2UgdGhlIHZhbHVlIHJldHVy bmVkICovCisgICAgLyogaXMgYmVpbmcgcGFzc2VkIGludGVybmFsbHkgd2l0aGluIHRoZSBrcmI1 IGZ1bmN0aW9ucy4gICAgICAgICAgICovCisgICAgcmV0dXJuKHIpOworfQorCisKK2NoYXIgKgor Y2tfa3JiNV9yZWFsbW9maG9zdChjaGFyICpob3N0KQoreworICAgIGNoYXIgKiogcmVhbG1saXN0 PU5VTEw7CisgICAga3JiNV9jb250ZXh0IHByaXZhdGVfY29udGV4dD1OVUxMOworICAgIHN0YXRp YyBjaGFyICogcmVhbG0gPSBOVUxMOworCisgICAgaWYgKCAhaG9zdCApCisgICAgICAgIHJldHVy biBOVUxMOworCisgICAgaWYgKCByZWFsbSApIHsKKyAgICAgICAgZnJlZShyZWFsbSk7CisgICAg ICAgIHJlYWxtID0gTlVMTDsKKyAgICB9CisKKyAgICAvKiBjcmVhdGUgcHJpdmF0ZV9jb250ZXh0 ICovCisgICAgaWYgKGtyYjVfaW5pdF9jb250ZXh0KCZwcml2YXRlX2NvbnRleHQpKSB7CisgICAg ICAgIGRlYnVnKEYxMTAsImNrX2tyYjVfcmVhbG1vZmhvc3QoKSIsInVuYWJsZSB0byBpbml0X2Nv bnRleHQiLDApOworICAgICAgICByZXR1cm4oTlVMTCk7CisgICAgfQorCisgICAga3JiNV9nZXRf aG9zdF9yZWFsbShwcml2YXRlX2NvbnRleHQsaG9zdCwmcmVhbG1saXN0KTsKKyAgICBpZiAocmVh bG1saXN0ICYmIHJlYWxtbGlzdFswXSkgeworICAgICAgICBtYWtlc3RyKCZyZWFsbSxyZWFsbWxp c3RbMF0pOworICAgICAgICBrcmI1X2ZyZWVfaG9zdF9yZWFsbShwcml2YXRlX2NvbnRleHQscmVh bG1saXN0KTsKKyAgICAgICAgcmVhbG1saXN0ID0gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoIHBy aXZhdGVfY29udGV4dCApIHsKKyAgICAgICAga3JiNV9mcmVlX2NvbnRleHQocHJpdmF0ZV9jb250 ZXh0KTsKKyAgICAgICAgcHJpdmF0ZV9jb250ZXh0ID0gTlVMTDsKKyAgICB9CisKKyAgICBpZiAo Y2tzdHJjaHIocmVhbG0sJy4nKSA9PSBOVUxMKSB7CisgICAgICAgIGludCBuID0gMDsKKyAgICAg ICAgY2hhciAqIHAgPSBob3N0OworICAgICAgICB3aGlsZSAoIChwID0gY2tzdHJjaHIocCwnLicp KSAhPSBOVUxMICkgeworICAgICAgICAgICAgbisrOworICAgICAgICAgICAgcCsrOworICAgICAg ICB9CisgICAgICAgIGlmIChuID09IDEpIHsKKyAgICAgICAgICAgIG1ha2VzdHIoJnJlYWxtLGhv c3QpOworICAgICAgICAgICAgY2t1cHBlcihyZWFsbSk7CisgICAgICAgIH0gZWxzZSB7CisgICAg ICAgICAgICBmcmVlKHJlYWxtKTsKKyAgICAgICAgICAgIHJlYWxtID0gTlVMTDsKKyAgICAgICAg fQorICAgIH0KKyAgICByZXR1cm4ocmVhbG0pOworfQorCisvKgorICoKKyAqIEs1X2F1dGhfc2Vu ZCAtIGdldHMgYXV0aGVudGljYXRpb24gYml0cyB3ZSBuZWVkIHRvIHNlbmQgdG8gS0RDLgorICoK KyAqIENvZGUgbGlmdGVkIGZyb20gdGVsbmV0IHNhbXBsZSBjb2RlIGluIHRoZSBhcHBsIGRpcmVj dG9yeS4KKyAqCisgKiBSZXN1bHQgaXMgbGVmdCBpbiBrNV9hdXRoCisgKgorICogUmV0dXJuczog MCBvbiBmYWlsdXJlLCAxIG9uIHN1Y2Nlc3MKKyAqCisgKi8KKworc3RhdGljIGludAorI2lmZGVm IENLX0FOU0lDCitrNV9hdXRoX3NlbmQoaW50IGhvdywgaW50IGVuY3J5cHQsIGludCBmb3J3YXJk KQorI2Vsc2UKK2s1X2F1dGhfc2VuZChob3csZW5jcnlwdCxmb3J3YXJkKSBpbnQgaG93OyBpbnQg ZW5jcnlwdDsgaW50IGZvcndhcmQ7CisjZW5kaWYKK3sKKyAgICBrcmI1X2Vycm9yX2NvZGUgcj0w OworICAgIGtyYjVfY2NhY2hlIGNjYWNoZT1OVUxMOworI2lmbmRlZiBIRUlNREFMCisgICAga3Ji NV9jcmVkcyBjcmVkczsKKyNlbmRpZiAvKiBIRUlNREFMICovCisgICAga3JiNV9jcmVkcyAqIG5l d19jcmVkcz1OVUxMOworI2lmZGVmIENLX0VOQ1JZUFRJT04KKyAgICBrcmI1X2tleWJsb2NrICpu ZXdrZXkgPSAwOworI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KKyAgICBrcmI1X2ZsYWdzIGFw X29wdHMsIGF1dGhfZmxhZ3M7CisgICAgY2hhciB0eXBlX2NoZWNrWzMyXTsKKyAgICBrcmI1X2Rh dGEgY2hlY2tzdW07CisgICAgaW50IGxlbj0wOworICAgIGNoYXIgKiByZWFsbSA9IE5VTEw7Cisg ICAgY2hhciB0Z3RbMjU2XTsKKworICAgIHJlYWxtID0gY2tfa3JiNV9yZWFsbW9maG9zdChzekhv c3ROYW1lKTsKKyAgICBpZiAoIXJlYWxtKSB7CisgICAgICAgIGNrc3RybmNweShzdHJUbXAsICJD YW4ndCBmaW5kIHJlYWxtIGZvciBob3N0IFwiIixBVVRIVE1QQkwpOworICAgICAgICBja3N0cm5j YXQoc3RyVG1wLCBzekhvc3ROYW1lLEFVVEhUTVBCTCk7CisgICAgICAgIGNrc3RybmNhdChzdHJU bXAsICJcIiIsQVVUSFRNUEJMKTsKKyAgICAgICAgcHJpbnRmKCI/S2VyYmVyb3MgNSBlcnJvcjog JXNcclxuIixzdHJUbXApOworICAgICAgICBrcmI1X2Vycm5vID0gS1JCNV9FUlJfSE9TVF9SRUFM TV9VTktOT1dOOworICAgICAgICBtYWtlc3RyKCZrcmI1X2Vycm1zZyxzdHJUbXApOworICAgICAg ICByZXR1cm4oMCk7CisgICAgfQorCisgICAgY2ttYWttc2codGd0LHNpemVvZih0Z3QpLCJrcmJ0 Z3QvIixyZWFsbSwiQCIscmVhbG0pOworICAgIGRlYnVnKEYxMTAsIms1X2F1dGhfc2VuZCBUR1Qi LHRndCwwKTsKKyAgICBpZiAoIGtyYjVfYXV0b2dldCAmJgorICAgICAgICAgISgoY2tfa3JiNV90 a3RfaXN2YWxpZChOVUxMLHRndCkgPiAwKSB8fAorICAgICAgICAgIChja19rcmI1X2lzX3RndF92 YWxpZCgpID4gMCkpICkKKyAgICAgICAgY2tfa3JiNV9hdXRvZ2V0X1RHVChyZWFsbSk7CisKKyAg ICByID0gazVfZ2V0X2NjYWNoZShrNV9jb250ZXh0LCZjY2FjaGUsTlVMTCk7CisgICAgaWYgKCBy ICkgeworICAgICAgICBjb21fZXJyKE5VTEwsIHIsICJ3aGlsZSBhdXRob3JpemluZyAoMCkuIik7 CisgICAgICAgIGtyYjVfZXJybm8gPSByOworICAgICAgICBtYWtlc3RyKCZrcmI1X2Vycm1zZyxl cnJvcl9tZXNzYWdlKGtyYjVfZXJybm8pKTsKKyAgICAgICAgcmV0dXJuKDApOworICAgIH0KKwor I2lmbmRlZiBIRUlNREFMCisgICAgbWVtc2V0KChjaGFyICopJmNyZWRzLCAwLCBzaXplb2YoY3Jl ZHMpKTsKKyAgICBpZiAociA9IGtyYjVfc25hbWVfdG9fcHJpbmNpcGFsKGs1X2NvbnRleHQsIHN6 SG9zdE5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtyYjVfZF9zcnYgPyBr cmI1X2Rfc3J2IDogS1JCNV9TRVJWSUNFX05BTUUsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEtSQjVfTlRfU1JWX0hTVCwgJmNyZWRzLnNlcnZlcikpIHsKKyAgICAgICAgY29tX2Vy cihOVUxMLCByLCAid2hpbGUgYXV0aG9yaXppbmcgKDEpLiIpOworICAgICAgICBrcmI1X2Vycm5v ID0gcjsKKyAgICAgICAgbWFrZXN0cigma3JiNV9lcnJtc2csZXJyb3JfbWVzc2FnZShrcmI1X2Vy cm5vKSk7CisgICAgICAgIHJldHVybigwKTsKKyAgICB9CisKKyAgICBpZiAoZm9yd2FyZF9mbGFn KSB7CisgICAgICAgIGlmIChmd2Rfc2VydmVyKSB7CisgICAgICAgICAgICBrcmI1X2ZyZWVfcHJp bmNpcGFsKGs1X2NvbnRleHQsZndkX3NlcnZlcik7CisgICAgICAgICAgICBmd2Rfc2VydmVyID0g TlVMTDsKKyAgICAgICAgfQorICAgICAgICBrcmI1X2NvcHlfcHJpbmNpcGFsKGs1X2NvbnRleHQs Y3JlZHMuc2VydmVyLCZmd2Rfc2VydmVyKTsKKyAgICB9CisKKyAgICByID0ga3JiNV9jY19nZXRf cHJpbmNpcGFsKGs1X2NvbnRleHQsIGNjYWNoZSwgJmNyZWRzLmNsaWVudCk7CisgICAgaWYgKHIp IHsKKyAgICAgICAgY29tX2VycihOVUxMLCByLCAid2hpbGUgYXV0aG9yaXppbmcgKDIpLiIpOwor ICAgICAgICBrcmI1X2ZyZWVfY3JlZF9jb250ZW50cyhrNV9jb250ZXh0LCAmY3JlZHMpOworICAg ICAgICBrcmI1X2Vycm5vID0gcjsKKyAgICAgICAgbWFrZXN0cigma3JiNV9lcnJtc2csZXJyb3Jf bWVzc2FnZShrcmI1X2Vycm5vKSk7CisgICAgICAgIHJldHVybigwKTsKKyAgICB9CisKKyAgICBp ZiAoc3pVc2VyTmFtZVswXSA9PSAnXDAnKSB7ICAgICAgICAgICAgICAgIC8qIEdldCB1c2VyIG5h bWUgbm93ICovCisgICAgICAgIGxlbiAgPSBrcmI1X3ByaW5jX2NvbXBvbmVudChrNV9jb250ZXh0 LCBjcmVkcy5jbGllbnQsIDApLT5sZW5ndGg7CisgICAgICAgIGlmICggbGVuIDwgc2l6ZW9mKHN6 VXNlck5hbWUpICkgeworICAgICAgICAgICAgbWVtY3B5KHN6VXNlck5hbWUsCisgICAgICAgICAg ICAgICAgICAgIGtyYjVfcHJpbmNfY29tcG9uZW50KGs1X2NvbnRleHQsIGNyZWRzLmNsaWVudCwg MCktPmRhdGEsCisgICAgICAgICAgICAgICAgICAgIGxlbik7ICAgICAgICAgICAgICAgICAgICAg ICAvKiBzYWZlICovCisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbGVuID0gMDsKKyAgICAg ICAgc3pVc2VyTmFtZVtsZW5dID0gJ1wwJzsKKyAgICB9IGVsc2UgeworICAgICAgICBjaGFyICog bmFtZSA9IE5VTEw7CisgICAgICAgIGxlbiAgPSBrcmI1X3ByaW5jX2NvbXBvbmVudChrNV9jb250 ZXh0LCBjcmVkcy5jbGllbnQsIDApLT5sZW5ndGg7CisgICAgICAgIGlmICggbGVuID09IHN0cmxl bihzelVzZXJOYW1lKSApIHsKKyAgICAgICAgICAgIG5hbWUgPSBrcmI1X3ByaW5jX2NvbXBvbmVu dChrNV9jb250ZXh0LCBjcmVkcy5jbGllbnQsIDApLT5kYXRhOworI2lmZGVmIE9TMgorICAgICAg ICAgICAgaWYgKCAhc3RybmljbXAoc3pVc2VyTmFtZSxuYW1lLGxlbikgKQorICAgICAgICAgICAg ICAgIG1lbWNweShzelVzZXJOYW1lLG5hbWUsbGVuKTsgICAgLyogc2FmZSAqLworI2VuZGlmIC8q IE9TMiAqLworICAgICAgICB9CisgICAgfQorICAgIGlmICggdG5fYXV0aF9rcmI1X2Rlc19idWcg KSB7ICAgLyogIUFMTE9XX0tSQl8zREVTX0VOQ1JZUFQgKi8KKyAgICAgICAgLyogTm90IHN1cmUg aWYgdGhpcyBpcyBuZWNlc3NhcnkgYW55bW9yZS4gIFdoYXQgaW1wYWN0IGRvZXMgaXQgaGF2ZQor ICAgICAgICAgKiBvbiBXaW4yMDAwIFRHVHMgdGhhdCB1c2UgREVTX0NCQ19NRDUgb3IgUkM0X0hN QUM/CisgICAgICAgICAqCisgICAgICAgICAqIFRoaXMgcHJldmVudHMgdXNpbmcgM0RFUyBTZXJ2 aWNlIFRpY2tldHMuCisgICAgICAgICAqLworICAgICAgICBjcmVkcy5rZXlibG9jay5lbmN0eXBl PUVOQ1RZUEVfREVTX0NCQ19DUkM7CisgICAgfQorCisgICAgaWYgKHIgPSBrcmI1X2dldF9jcmVk ZW50aWFscyhrNV9jb250ZXh0LCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNjYWNoZSwgJmNyZWRzLCAmbmV3X2NyZWRzKSkgeworICAgICAgICBjb21fZXJyKE5VTEwsIHIs ICJ3aGlsZSBhdXRob3JpemluZyAoMykuIik7CisgICAgICAgIGtyYjVfZnJlZV9jcmVkX2NvbnRl bnRzKGs1X2NvbnRleHQsICZjcmVkcyk7CisgICAgICAgIGtyYjVfZXJybm8gPSByOworICAgICAg ICBtYWtlc3RyKCZrcmI1X2Vycm1zZyxlcnJvcl9tZXNzYWdlKGtyYjVfZXJybm8pKTsKKyAgICAg ICAgcmV0dXJuKDApOworICAgIH0KKyNlbmRpZiAvKiBIRUlNREFMICovCisKKyAgICBpZiAoYXV0 aF9jb250ZXh0KSB7CisgICAgICAgIGtyYjVfYXV0aF9jb25fZnJlZShrNV9jb250ZXh0LCBhdXRo X2NvbnRleHQpOworICAgICAgICBhdXRoX2NvbnRleHQgPSAwOworICAgIH0KKyAgICBpZiAociA9 IGtyYjVfYXV0aF9jb25faW5pdChrNV9jb250ZXh0LCAmYXV0aF9jb250ZXh0KSkgeworICAgICAg ICBjb21fZXJyKE5VTEwsIHIsICJ3aGlsZSBpbml0aWFsaXppbmcgYXV0aCBjb250ZXh0Iik7Cisg ICAgICAgIGtyYjVfZXJybm8gPSByOworICAgICAgICBtYWtlc3RyKCZrcmI1X2Vycm1zZyxlcnJv cl9tZXNzYWdlKGtyYjVfZXJybm8pKTsKKyAgICAgICAgcmV0dXJuKDApOworICAgIH0KKworICAg IC8qIFVQREFURSBmb3IgU1RBUlRfVExTLiAgQVVUSF9FTkNSWVBUX1NUQVJUX1RMUyBhbmQgaW5j bHVzaW9uIG9mICovCisgICAgLyogY2xpZW50IGFuZCB0aGVuIHNlcnZlciBmaW5pc2hlZCBtZXNz YWdlcy4gICAgICAgICAgICAgICAgICAgICAgKi8KKworICAgIHR5cGVfY2hlY2tbMF0gPSBBVVRI VFlQRV9LRVJCRVJPU19WNTsKKyAgICB0eXBlX2NoZWNrWzFdID0gQVVUSF9DTElFTlRfVE9fU0VS VkVSIHwKKyAgICAgICAgKGhvdyA/IEFVVEhfSE9XX01VVFVBTCA6IEFVVEhfSE9XX09ORV9XQVkp IHwKKyAgICAgICAgKGVuY3J5cHQpIHwKKyAgICAgICAgKGZvcndhcmQgPyBJTklfQ1JFRF9GV0Rf T04gOiBJTklfQ1JFRF9GV0RfT0ZGKTsKKyNpZmRlZiBDS19TU0wKKyAgICBpZiAoZW5jcnlwdCA9 PSBBVVRIX0VOQ1JZUFRfU1RBUlRfVExTKSB7CisgICAgICAgIHNzbF9nZXRfY2xpZW50X2Zpbmlz aGVkKCZ0eXBlX2NoZWNrWzJdLDEyKTsKKyAgICAgICAgc3NsX2dldF9zZXJ2ZXJfZmluaXNoZWQo JnR5cGVfY2hlY2tbMTRdLDEyKTsKKyAgICB9CisjZW5kaWYgLyogQ0tfU1NMICovCisKKyNpZm5k ZWYgSEVJTURBTAorICAgIGNoZWNrc3VtLm1hZ2ljID0gS1Y1TV9EQVRBOworI2VuZGlmIC8qIEhF SU1EQUwgKi8KKyAgICBjaGVja3N1bS5sZW5ndGggPQorI2lmZGVmIENLX1NTTAorICAgICAgICAo ZW5jcnlwdCA9PSBBVVRIX0VOQ1JZUFRfU1RBUlRfVExTKSA/IDI2IDoKKyNlbmRpZiAvKiBDS19T U0wgKi8KKyAgICAgICAgMjsKKyAgICBjaGVja3N1bS5kYXRhID0gKGNoYXIgKikmdHlwZV9jaGVj azsKKworICAgIGFwX29wdHMgPSAwOworICAgIGlmICgoaG93ICYgQVVUSF9IT1dfTUFTSykgPT0g QVVUSF9IT1dfTVVUVUFMKQorICAgICAgICBhcF9vcHRzIHw9IEFQX09QVFNfTVVUVUFMX1JFUVVJ UkVEOworCisjaWZkZWYgSEVJTURBTAorICAgIHIgPSBrcmI1X2F1dGhfc2V0a2V5dHlwZShrNV9j b250ZXh0LCBhdXRoX2NvbnRleHQsIEtFWVRZUEVfREVTKTsKKyAgICBpZiAocikKKyAgICAgICAg Y29tX2VycihOVUxMLCByLCAid2hpbGUgc2V0dGluZyBhdXRoIGtleXR5cGUiKTsKKyAgICByID0g a3JiNV9hdXRoX2Nvbl9zZXRhZGRyc19mcm9tX2ZkKGs1X2NvbnRleHQsYXV0aF9jb250ZXh0LCAm dHR5ZmQpOworICAgIGlmIChyKQorICAgICAgICBjb21fZXJyKE5VTEwsIHIsICJ3aGlsZSBzZXR0 aW5nIGF1dGggYWRkcnMiKTsKKyAgICByID0ga3JiNV9ta19yZXEoazVfY29udGV4dCwgJmF1dGhf Y29udGV4dCwgYXBfb3B0cywKKyAgICAgICAgICAgICAgICAgICAga3JiNV9kX3NydiA/IGtyYjVf ZF9zcnYgOiBLUkI1X1NFUlZJQ0VfTkFNRSwKKyAgICAgICAgICAgICAgICAgICAgc3pIb3N0TmFt ZSwgJmNoZWNrc3VtLCBjY2FjaGUsICZrNV9hdXRoKTsKKyAgICBpZiAocikKKyAgICAgICAgY29t X2VycihOVUxMLCByLCAid2hpbGUgbWFraW5nIHJlcXVlc3QiKTsKKyNlbHNlIC8qIEhFSU1EQUwg Ki8KKyAgICBhdXRoX2ZsYWdzID0gS1JCNV9BVVRIX0NPTlRFWFRfUkVUX1RJTUU7CisjaWZkZWYg Q0tfRU5DUllQVElPTgorICAgIGFwX29wdHMgfD0gQVBfT1BUU19VU0VfU1VCS0VZOworI2VuZGlm IC8qIENLX0VOQ1JZUFRJT04gKi8KKyNpZmRlZiBUTFNfVkVSSUZZCisgICAgaWYgKChob3cgJiBB VVRIX0VOQ1JZUFRfTUFTSykgPT0gQVVUSF9FTkNSWVBUX1NUQVJUX1RMUykgeworICAgICAgICBh dXRoX2ZsYWdzIHw9IEtSQjVfQVVUSF9DT05URVhUX0RPX1NFUVVFTkNFOworICAgICAgICBpZiAo IWtyYjVfZF9ub19hZGRyZXNzZXMpCisgICAgICAgICAgICByID0ga3JiNV9hdXRoX2Nvbl9nZW5h ZGRycyhrNV9jb250ZXh0LCBhdXRoX2NvbnRleHQsIHR0eWZkLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgS1JCNV9BVVRIX0NPTlRFWFRfR0VORVJBVEVfUkVNT1RFX0ZVTExfQURE Uik7CisgICAgfQorI2VuZGlmIC8qIENLX1NTTCAqLworICAgIGtyYjVfYXV0aF9jb25fc2V0Zmxh Z3MoazVfY29udGV4dCwgYXV0aF9jb250ZXh0LCBhdXRoX2ZsYWdzKTsKKyAgICByID0ga3JiNV9t a19yZXFfZXh0ZW5kZWQoazVfY29udGV4dCwgJmF1dGhfY29udGV4dCwgYXBfb3B0cywKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICZjaGVja3N1bSwgbmV3X2NyZWRzLCAmazVfYXV0aCk7 CisjZW5kaWYgLyogSEVJTURBTCAqLworCisjaWZkZWYgQ0tfRU5DUllQVElPTgorICAgIGlmICgh cikgeworICAgICAgICByID0ga3JiNV9hdXRoX2Nvbl9nZXRsb2NhbHN1YmtleShrNV9jb250ZXh0 LCBhdXRoX2NvbnRleHQsICZuZXdrZXkpOworICAgICAgICBpZiAocikKKyAgICAgICAgICAgIHIg PSBrcmI1X2F1dGhfY29uX2dldGtleShrNV9jb250ZXh0LCBhdXRoX2NvbnRleHQsICZuZXdrZXkp OworCisgICAgICAgIGlmIChrNV9zZXNzaW9uX2tleSkgeworICAgICAgICAgICAga3JiNV9mcmVl X2tleWJsb2NrKGs1X2NvbnRleHQsIGs1X3Nlc3Npb25fa2V5KTsKKyAgICAgICAgICAgIGs1X3Nl c3Npb25fa2V5ID0gMDsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAobmV3a2V5KSB7CisgICAg ICAgIC8qCisgICAgICAgICoga2VlcCB0aGUga2V5IGluIG91ciBwcml2YXRlIHN0b3JhZ2UsIGJ1 dCBkb24ndCB1c2UgaXQKKyAgICAgICAgKiB5ZXQtLS1zZWUga2VyYmVyb3M1X3JlcGx5KCkgYmVs b3cKKyAgICAgICAgKi8KKyNpZmRlZiBIRUlNREFMCisgICAgICAgIGlmICgobmV3a2V5LT5rZXl0 eXBlID09IEVUWVBFX0RFU19DQkNfQ1JDKSB8fAorICAgICAgICAgICAgIChuZXdrZXktPmtleXR5 cGUgPT0gRVRZUEVfREVTX0NCQ19NRDUpIHx8CisgICAgICAgICAgICAgKG5ld2tleS0+a2V5dHlw ZSA9PSBFVFlQRV9ERVNfQ0JDX01ENCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRlYnVnKEYx MTEsIms1X2F1dGhfc2VuZCgpIiwibmV3a2V5LT5rZXl0eXBlIixuZXdrZXktPmtleXR5cGUpOwor ICAgICAgICAgICAga3JiNV9jb3B5X2tleWJsb2NrKGs1X2NvbnRleHQsIG5ld2tleSwgJms1X3Nl c3Npb25fa2V5KTsKKyAgICAgICAgfQorI2Vsc2UgLyogSEVJTURBTCAqLworICAgICAgICAvKiBs b29rIGZvciBhbGwgcG9zc2libGUgREVTIGtleXMgZmlyc3QgLSBqdXN0IGZvciBjb21wYXRpYmls aXR5ICovCisgICAgICAgIC8qIG90aGVyIGtleSB0eXBlcyBhcmUgbXVjaCBsZXNzIGxpa2VseSB0 byBiZSBhdmFpbGFibGUgICAgICAgICAgKi8KKyAgICAgICAgaWYgKChuZXdrZXktPmVuY3R5cGUg PT0gRU5DVFlQRV9ERVNfQ0JDX0NSQykgfHwKKyAgICAgICAgICAgICAobmV3a2V5LT5lbmN0eXBl ID09IEVOQ1RZUEVfREVTX0NCQ19NRDUpIHx8CisgICAgICAgICAgICAgKG5ld2tleS0+ZW5jdHlw ZSA9PSBFTkNUWVBFX0RFU19DQkNfTUQ0KSkKKyAgICAgICAgeworICAgICAgICAgICAgZGVidWco RjExMSwiazVfYXV0aF9zZW5kKCkiLCJuZXdrZXktPmVuY3R5cGUiLG5ld2tleS0+ZW5jdHlwZSk7 CisgICAgICAgICAgICBrcmI1X2NvcHlfa2V5YmxvY2soazVfY29udGV4dCwgbmV3a2V5LCAmazVf c2Vzc2lvbl9rZXkpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKChuZXdfY3JlZHMtPmtl eWJsb2NrLmVuY3R5cGUgPT0gRU5DVFlQRV9ERVNfQ0JDX0NSQykgfHwKKyAgICAgICAgICAgICAg ICAgKG5ld19jcmVkcy0+a2V5YmxvY2suZW5jdHlwZSA9PSBFTkNUWVBFX0RFU19DQkNfTUQ1KSkK KyAgICAgICAgeworICAgICAgICAgICAgLyogdXNlIHRoZSBzZXNzaW9uIGtleSBpbiBjcmVkZW50 aWFscyBpbnN0ZWFkICovCisgICAgICAgICAgICBkZWJ1ZyhGMTExLCJrNV9hdXRoX3NlbmQoKSIs Im5ld19jcmVkcy0+a2V5YmxvY2suZW5jdHlwZSIsCisgICAgICAgICAgICAgICAgICAgbmV3X2Ny ZWRzLT5rZXlibG9jay5lbmN0eXBlKTsKKyAgICAgICAgICAgIGtyYjVfY29weV9rZXlibG9jayhr NV9jb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmV3X2NyZWRzLT5r ZXlibG9jaywgJms1X3Nlc3Npb25fa2V5KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChu ZXdrZXktPmVuY3R5cGUgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgZGVidWcoRjExMSwi azVfYXV0aF9zZW5kKCkiLCJuZXdrZXktPmVuY3R5cGUiLG5ld2tleS0+ZW5jdHlwZSk7CisgICAg ICAgICAgICBrcmI1X2NvcHlfa2V5YmxvY2soazVfY29udGV4dCwgbmV3a2V5LCAmazVfc2Vzc2lv bl9rZXkpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKG5ld19jcmVkcy0+a2V5YmxvY2su ZW5jdHlwZSAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgICAvKiB1c2UgdGhlIHNlc3Npb24g a2V5IGluIGNyZWRlbnRpYWxzIGluc3RlYWQgKi8KKyAgICAgICAgICAgIGRlYnVnKEYxMTEsIms1 X2F1dGhfc2VuZCgpIiwibmV3X2NyZWRzLT5rZXlibG9jay5lbmN0eXBlIiwKKyAgICAgICAgICAg ICAgICAgICBuZXdfY3JlZHMtPmtleWJsb2NrLmVuY3R5cGUpOworICAgICAgICAgICAga3JiNV9j b3B5X2tleWJsb2NrKGs1X2NvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICZuZXdfY3JlZHMtPmtleWJsb2NrLCAmazVfc2Vzc2lvbl9rZXkpOworICAgICAgICB9CisgICAg ICAgIGVsc2UgeworICAgICAgICAgICAgZGVidWcoRjExMCwiazVfYXV0aF9zZW5kKCkiLCJOTyBL RVkgaW4gbmV3a2V5IiwwKTsKKyAgICAgICAgfQorI2VuZGlmIC8qIEhFSU1EQUwgKi8KKyAgICAg ICAga3JiNV9mcmVlX2tleWJsb2NrKGs1X2NvbnRleHQsIG5ld2tleSk7CisgICAgfQorI2VuZGlm IC8qIENLX0VOQ1JZUFRJT04gKi8KKyNpZm5kZWYgSEVJTURBTAorICAgIGtyYjVfZnJlZV9jcmVk X2NvbnRlbnRzKGs1X2NvbnRleHQsICZjcmVkcyk7CisgICAga3JiNV9mcmVlX2NyZWRzKGs1X2Nv bnRleHQsIG5ld19jcmVkcyk7CisjZW5kaWYgLyogSEVJTURBTCAqLworICAgIGtyYjVfY2NfY2xv c2UoazVfY29udGV4dCxjY2FjaGUpOworCisgICAgaWYgKHIpIHsKKyAgICAgICAgY29tX2VycihO VUxMLCByLCAid2hpbGUgYXV0aG9yaXppbmcgKDQpLiIpOworICAgICAgICBrcmI1X2Vycm5vID0g cjsKKyAgICAgICAgbWFrZXN0cigma3JiNV9lcnJtc2csZXJyb3JfbWVzc2FnZShrcmI1X2Vycm5v KSk7CisgICAgICAgIHJldHVybigwKTsKKyAgICB9CisgICAga3JiNV9lcnJubyA9IDA7CisgICAg bWFrZXN0cigma3JiNV9lcnJtc2csIk9LIik7CisgICAgcmV0dXJuKDEpOworfQorCisvKgorICog SzVfYXV0aF9yZXBseSAtLSBjaGVja3MgdGhlIHJlcGx5IGZvciBtdXR1YWwgYXV0aGVudGljYXRp b24uCisgKi8KK3N0YXRpYyBpbnQKKyNpZmRlZiBDS19BTlNJQworazVfYXV0aF9yZXBseShpbnQg aG93LCB1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgY250KQorI2Vsc2UKK2s1X2F1dGhfcmVwbHko aG93LGRhdGEsY250KSBpbnQgaG93OyB1bnNpZ25lZCBjaGFyICpkYXRhOyBpbnQgY250OworI2Vu ZGlmCit7CisjaWZkZWYgQ0tfRU5DUllQVElPTgorICAgIFNlc3Npb25fS2V5IHNrZXk7CisjZW5k aWYgLyogQ0tfRU5DUllQVElPTiAqLworCisgICAgZGF0YSArPSA0OyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBQb2ludCB0byBzdGF0dXMgYnl0ZSAqLworICAgIGNudCAtPTU7 CisKKyAgICBzd2l0Y2ggKCpkYXRhKyspIHsKKyAgICBjYXNlIEtSQl9SRUpFQ1Q6CisgICAgICAg IGlmIChjbnQgPiAwKSB7CisgICAgICAgICAgICBjaGFyICpzOworICAgICAgICAgICAgaW50IGxl bjsKKyAgICAgICAgICAgIGNrc3RybmNweShzdHJUbXAsIktlcmJlcm9zIFY1IHJlZnVzZXMgYXV0 aGVudGljYXRpb24gYmVjYXVzZVxyXG4iLAorICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihz dHJUbXApKTsKKyAgICAgICAgICAgIGxlbiA9IHN0cmxlbihzdHJUbXApOworICAgICAgICAgICAg aWYgKCBsZW4gKyBjbnQgPCBzaXplb2Yoc3RyVG1wKSApIHsKKyAgICAgICAgICAgICAgICBzID0g c3RyVG1wICsgc3RybGVuKHN0clRtcCk7CisgICAgICAgICAgICAgICAgbWVtY3B5KHMsIGRhdGEs IGNudCk7ICAgICAgICAgICAvKiBzYWZlICovCisgICAgICAgICAgICAgICAgc1tjbnRdID0gMDsK KyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBja3N0cm5jcHkoc3Ry VG1wLCJLZXJiZXJvcyBWNSByZWZ1c2VzIGF1dGhlbnRpY2F0aW9uIiwKKyAgICAgICAgICAgICAg ICAgICAgICBzaXplb2Yoc3RyVG1wKSk7CisgICAgICAgIGtyYjVfZXJybm8gPSAtMTsKKyAgICAg ICAgbWFrZXN0cigma3JiNV9lcnJtc2csc3RyVG1wKTsKKyAgICAgICAgcHJpbnRmKCJLZXJiZXJv cyBhdXRoZW50aWNhdGlvbiBmYWlsZWQhXHJcbiVzXHJcbiIsc3RyVG1wKTsKKyAgICAgICAgYXV0 aF9maW5pc2hlZChBVVRIX1JFSkVDVCk7CisgICAgICAgIHJldHVybiBBVVRIX0ZBSUxVUkU7CisK KyAgICBjYXNlIEtSQl9BQ0NFUFQ6CisgICAgICAgIGlmICghbXV0dWFsX2NvbXBsZXRlKSB7Cisg ICAgICAgICAgICBpZiAoKGhvdyAmIEFVVEhfSE9XX01BU0spID09IEFVVEhfSE9XX01VVFVBTCAm JiAhbXV0dWFsX2NvbXBsZXRlKSB7CisgICAgICAgICAgICAgICAgY2tzdHJuY3B5KHN0clRtcCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgIktlcmJlcm9zIFY1IGFjY2VwdGVkIHlvdSwgYnV0 IGRpZG4ndCBwcm92aWRlIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiIG11dHVhbCBhdXRo ZW50aWNhdGlvbiIsc2l6ZW9mKHN0clRtcCkpOworICAgICAgICAgICAgICAgIHByaW50ZigiS2Vy YmVyb3MgYXV0aGVudGljYXRpb24gZmFpbGVkIVxyXG4lc1xyXG4iLHN0clRtcCk7CisgICAgICAg ICAgICAgICAga3JiNV9lcnJubyA9IC0xOworICAgICAgICAgICAgICAgIG1ha2VzdHIoJmtyYjVf ZXJybXNnLHN0clRtcCk7CisgICAgICAgICAgICAgICAgYXV0aF9maW5pc2hlZChBVVRIX1JFSkVD VCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIEFVVEhfRkFJTFVSRTsKKyAgICAgICAgICAgIH0K KworI2lmZGVmIENLX0VOQ1JZUFRJT04KKyAgICAgICAgICAgIGlmIChrNV9zZXNzaW9uX2tleSkg eworICAgICAgICAgICAgICAgIGlmICggdG5fYXV0aF9rcmI1X2Rlc19idWcgKSB7ICAgLyogIUFM TE9XX0tSQl8zREVTX0VOQ1JZUFQgKi8KKyAgICAgICAgICAgICAgICAgICAgc2tleS50eXBlID0g U0tfREVTOworICAgICAgICAgICAgICAgICAgICBza2V5Lmxlbmd0aCA9IDg7CisjaWZkZWYgSEVJ TURBTAorICAgICAgICAgICAgICAgICAgICBza2V5LmRhdGEgPSBrNV9zZXNzaW9uX2tleS0+a2V5 dmFsdWUuZGF0YTsKKyNlbHNlIC8qIEhFSU1EQUwgKi8KKyAgICAgICAgICAgICAgICAgICAgc2tl eS5kYXRhID0gazVfc2Vzc2lvbl9rZXktPmNvbnRlbnRzOworI2VuZGlmIC8qIEhFSU1EQUwgKi8K KyAgICAgICAgICAgICAgICB9IGVsc2UgeworI2lmZGVmIEhFSU1EQUwKKyAgICAgICAgICAgICAg ICAgICAgc3dpdGNoICggazVfc2Vzc2lvbl9rZXktPmtleXR5cGUgKSB7CisgICAgICAgICAgICAg ICAgICAgIGNhc2UgRVRZUEVfREVTX0NCQ19DUkM6CisgICAgICAgICAgICAgICAgICAgIGNhc2Ug RVRZUEVfREVTX0NCQ19NRDU6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRVRZUEVfREVTX0NC Q19NRDQ6CisgICAgICAgICAgICAgICAgICAgICAgICBza2V5LnR5cGUgPSBTS19ERVM7CisgICAg ICAgICAgICAgICAgICAgICAgICBza2V5Lmxlbmd0aCA9IDg7CisgICAgICAgICAgICAgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg ICAgICAgICAgIHNrZXkudHlwZSA9IFNLX0dFTkVSSUM7CisgICAgICAgICAgICAgICAgICAgICAg ICBza2V5Lmxlbmd0aCA9IGs1X3Nlc3Npb25fa2V5LT5sZW5ndGg7CisgICAgICAgICAgICAgICAg ICAgICAgICBlbmNyeXB0X2RvbnRfc3VwcG9ydChFTkNUWVBFX0RFU19DRkI2NCk7CisgICAgICAg ICAgICAgICAgICAgICAgICBlbmNyeXB0X2RvbnRfc3VwcG9ydChFTkNUWVBFX0RFU19PRkI2NCk7 CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgc2tleS5kYXRhID0g azVfc2Vzc2lvbl9rZXktPmtleXZhbHVlLmRhdGE7CisjZWxzZSAvKiBIRUlNREFMICovCisgICAg ICAgICAgICAgICAgICAgIHN3aXRjaCAoIGs1X3Nlc3Npb25fa2V5LT5lbmN0eXBlICkgeworICAg ICAgICAgICAgICAgICAgICBjYXNlIEVOQ1RZUEVfREVTX0NCQ19DUkM6CisgICAgICAgICAgICAg ICAgICAgIGNhc2UgRU5DVFlQRV9ERVNfQ0JDX01ENToKKyAgICAgICAgICAgICAgICAgICAgY2Fz ZSBFTkNUWVBFX0RFU19DQkNfTUQ0OgorICAgICAgICAgICAgICAgICAgICAgICAgc2tleS50eXBl ID0gU0tfREVTOworICAgICAgICAgICAgICAgICAgICAgICAgc2tleS5sZW5ndGggPSA4OworICAg ICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgc2tleS50 eXBlID0gU0tfR0VORVJJQzsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNrZXkubGVuZ3RoID0g azVfc2Vzc2lvbl9rZXktPmxlbmd0aDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuY3J5cHRf ZG9udF9zdXBwb3J0KEVOQ1RZUEVfREVTX0NGQjY0KTsKKyAgICAgICAgICAgICAgICAgICAgICAg IGVuY3J5cHRfZG9udF9zdXBwb3J0KEVOQ1RZUEVfREVTX09GQjY0KTsKKyAgICAgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICAgICAgICBza2V5LmRhdGEgPSBrNV9zZXNzaW9uX2tleS0+ Y29udGVudHM7CisjZW5kaWYgLyogSEVJTURBTCAqLworICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgICBlbmNyeXB0X3Nlc3Npb25fa2V5KCZza2V5LCBBVVRIX0NMSUVOVF9UT19TRVJW RVIpOworICAgICAgICAgICAgfQorI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KKyAgICAgICAg fQorICAgICAgICBpZiAoIGNudCA+IDAgKSB7CisgICAgICAgICAgICBjaGFyICpzOworICAgICAg ICAgICAgaW50IGxlbjsKKyAgICAgICAgICAgIGNrc3RybmNweShzdHJUbXAsIktlcmJlcm9zIFY1 IGFjY2VwdHMgeW91IGFzICIsc2l6ZW9mKHN0clRtcCkpOworICAgICAgICAgICAgbGVuID0gc3Ry bGVuKHN0clRtcCk7CisgICAgICAgICAgICBpZiAoIGxlbiArIGNudCA8IHNpemVvZihzdHJUbXAp ICkgeworICAgICAgICAgICAgICAgIHMgPSBzdHJUbXAgKyBzdHJsZW4oc3RyVG1wKTsKKyAgICAg ICAgICAgICAgICBtZW1jcHkocyxkYXRhLGNudCk7CisgICAgICAgICAgICAgICAgc1tjbnRdID0g MDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBhY2NlcHRfY29tcGxldGUgPSAx OworICAgICAgICBwcmludGYoIiVzXHJcbiIsc3RyVG1wKTsKKworI2lmZGVmIEZPUldBUkQKKyAg ICAgICAgaWYgKGZvcndhcmRfZmxhZworI2lmZGVmIENPTU1FTlQKKyAgICAgICAgICAgICAvKiBN YXJjIEhvcm93aXR6IDxtYXJjQG1pdC5lZHU+IGhhcyBzdWNjZXNzZnVsbHkgYXJndWVkCisgICAg ICAgICAgICAgICAgdGhhdCBpdCBpcyBpbmRlZWQgc2FmZSB0byBzZW5kIEZvcndhcmRlZCBjcmVk ZW50aWFscworICAgICAgICAgICAgICAgIHRvIGFuIHVudHJ1c3RlZCBob3N0LgorICAgICAgICAg ICAgICAqLworICAgICAgICAgICAgICYmIChhdXRoX2hvdyAmIEFVVEhfSE9XX01BU0spID09IEFV VEhfSE9XX01VVFVBTAorI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAgICAgICApCisgICAg ICAgICAgICBrZXJiZXJvczVfZm9yd2FyZCgpOworI2VuZGlmIC8qIEZPUldBUkQgKi8KKyAgICAg ICAga3JiNV9lcnJubyA9IDA7CisgICAgICAgIG1ha2VzdHIoJmtyYjVfZXJybXNnLHN0clRtcCk7 CisgICAgICAgIGF1dGhfZmluaXNoZWQoQVVUSF9VU0VSKTsKKyAgICAgICAgcmV0dXJuIEFVVEhf U1VDQ0VTUzsKKworICAgIGNhc2UgS1JCNV9SRVNQT05TRToKKyNpZmRlZiBUTFNfVkVSSUZZCisg ICAgICAgIGlmICgoaG93ICYgQVVUSF9FTkNSWVBUX01BU0spID09IEFVVEhfRU5DUllQVF9TVEFS VF9UTFMgJiYKKyAgICAgICAgICAgICFrcmI1X3Rsc192ZXJpZmllZCkgeworICAgICAgICAgICAg cHJpbnRmKAorICAgICJNYW4gaW4gdGhlIG1pZGRsZSBhdHRhY2sgZGV0ZWN0ZWQuICBTZXNzaW9u IHRlcm1pbmF0ZWQuXHJcbiIpOworI2lmbmRlZiBCRVRBVEVTVAorICAgICAgICAgICAgbmV0Y2xv cygpOworI2VuZGlmIC8qIEJFVEFURVNUICovCisgICAgICAgICAgICBrcmI1X2Vycm5vID0gLTE7 CisgICAgICAgICAgICBtYWtlc3RyKCZrcmI1X2Vycm1zZywiVExTIG5vdCB2ZXJpZmllZCIpOwor ICAgICAgICAgICAgYXV0aF9maW5pc2hlZChBVVRIX1JFSkVDVCk7CisgICAgICAgICAgICByZXR1 cm4gQVVUSF9GQUlMVVJFOworICAgICAgICB9CisgICAgICAgIGlmKChzc2xfYWN0aXZlX2ZsYWcg fHwgdGxzX2FjdGl2ZV9mbGFnKSAmJgorICAgICAgICAgICAgKGhvdyAmIEFVVEhfRU5DUllQVF9N QVNLKSA9PSBBVVRIX0VOQ1JZUFRfU1RBUlRfVExTKSB7CisgICAgICAgICAgICBwcmludGYoIlRM UyBzZXNzaW9uIHBhcmFtZXRlcnMgdmVyaWZpZWQgYnkgS2VyYmVyb3MgNVxyXG4iKTsKKyAgICAg ICAgfQorI2VuZGlmIC8qIFRMU19WRVJJRlkgKi8KKyAgICAgICAgaWYgKChob3cgJiBBVVRIX0hP V19NQVNLKSA9PSBBVVRIX0hPV19NVVRVQUwpIHsKKyAgICAgICAgICAgIC8qIHRoZSByZXN0IG9m IHRoZSByZXBseSBzaG91bGQgY29udGFpbiBhIGtyYl9hcF9yZXAgKi8KKyAgICAgICAgICAgIGty YjVfYXBfcmVwX2VuY19wYXJ0ICpyZXBseTsKKyAgICAgICAgICAgIGtyYjVfZGF0YSBpbmJ1ZjsK KyAgICAgICAgICAgIGtyYjVfZXJyb3JfY29kZSByOworCisgICAgICAgICAgICBpbmJ1Zi5sZW5n dGggPSBjbnQ7CisgICAgICAgICAgICBpbmJ1Zi5kYXRhID0gKGNoYXIgKilkYXRhOworCisgICAg ICAgICAgICBpZiAociA9IGtyYjVfcmRfcmVwKGs1X2NvbnRleHQsIGF1dGhfY29udGV4dCwgJmlu YnVmLCAmcmVwbHkpKSB7CisgICAgICAgICAgICAgICAgY29tX2VycihOVUxMLCByLCAid2hpbGUg YXV0aG9yaXppbmcuICg1KSIpOworICAgICAgICAgICAgICAgIGtyYjVfZXJybm8gPSByOworICAg ICAgICAgICAgICAgIG1ha2VzdHIoJmtyYjVfZXJybXNnLGVycm9yX21lc3NhZ2Uoa3JiNV9lcnJu bykpOworICAgICAgICAgICAgICAgIGF1dGhfZmluaXNoZWQoQVVUSF9SRUpFQ1QpOworICAgICAg ICAgICAgICAgIHJldHVybiBBVVRIX0ZBSUxVUkU7CisgICAgICAgICAgICB9CisgICAgICAgICAg ICBrcmI1X2ZyZWVfYXBfcmVwX2VuY19wYXJ0KGs1X2NvbnRleHQsIHJlcGx5KTsKKworI2lmZGVm IENLX0VOQ1JZUFRJT04KKyAgICAgICAgICAgIGlmIChlbmNyeXB0X2ZsYWcgJiYgazVfc2Vzc2lv bl9rZXkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIHRuX2F1dGhfa3JiNV9kZXNfYnVnICkgeyAg IC8qICFBTExPV19LUkJfM0RFU19FTkNSWVBUICovCisgICAgICAgICAgICAgICAgICAgIHNrZXku dHlwZSA9IFNLX0RFUzsKKyAgICAgICAgICAgICAgICAgICAgc2tleS5sZW5ndGggPSA4OworI2lm ZGVmIEhFSU1EQUwKKyAgICAgICAgICAgICAgICAgICAgc2tleS5kYXRhID0gazVfc2Vzc2lvbl9r ZXktPmtleXZhbHVlLmRhdGE7CisjZWxzZSAvKiBIRUlNREFMICovCisgICAgICAgICAgICAgICAg ICAgIHNrZXkuZGF0YSA9IGs1X3Nlc3Npb25fa2V5LT5jb250ZW50czsKKyNlbmRpZiAvKiBIRUlN REFMICovCisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyNpZmRlZiBIRUlNREFMCisgICAgICAg ICAgICAgICAgICAgIHN3aXRjaCAoIGs1X3Nlc3Npb25fa2V5LT5rZXl0eXBlICkgeworICAgICAg ICAgICAgICAgICAgICBjYXNlIEVUWVBFX0RFU19DQkNfQ1JDOgorICAgICAgICAgICAgICAgICAg ICBjYXNlIEVUWVBFX0RFU19DQkNfTUQ1OgorICAgICAgICAgICAgICAgICAgICBjYXNlIEVUWVBF X0RFU19DQkNfTUQ0OgorICAgICAgICAgICAgICAgICAgICAgICAgc2tleS50eXBlID0gU0tfREVT OworICAgICAgICAgICAgICAgICAgICAgICAgc2tleS5sZW5ndGggPSA4OworICAgICAgICAgICAg ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgc2tleS50eXBlID0gU0tf R0VORVJJQzsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNrZXkubGVuZ3RoID0gazVfc2Vzc2lv bl9rZXktPmxlbmd0aDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg ICBza2V5LmRhdGEgPSBrNV9zZXNzaW9uX2tleS0+a2V5dmFsdWUuZGF0YTsKKyNlbHNlIC8qIEhF SU1EQUwgKi8KKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoICggazVfc2Vzc2lvbl9rZXktPmVu Y3R5cGUgKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRU5DVFlQRV9ERVNfQ0JDX0NSQzoK KyAgICAgICAgICAgICAgICAgICAgY2FzZSBFTkNUWVBFX0RFU19DQkNfTUQ1OgorICAgICAgICAg ICAgICAgICAgICBjYXNlIEVOQ1RZUEVfREVTX0NCQ19NRDQ6CisgICAgICAgICAgICAgICAgICAg ICAgICBza2V5LnR5cGUgPSBTS19ERVM7CisgICAgICAgICAgICAgICAgICAgICAgICBza2V5Lmxl bmd0aCA9IDg7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNrZXkudHlwZSA9IFNLX0dF TkVSSUM7CisgICAgICAgICAgICAgICAgICAgICAgICBza2V5Lmxlbmd0aCA9IGs1X3Nlc3Npb25f a2V5LT5sZW5ndGg7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg c2tleS5kYXRhID0gazVfc2Vzc2lvbl9rZXktPmNvbnRlbnRzOworI2VuZGlmIC8qIEhFSU1EQUwg Ki8KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZW5jcnlwdF9zZXNzaW9uX2tl eSgmc2tleSwgQVVUSF9DTElFTlRfVE9fU0VSVkVSKTsKKyAgICAgICAgICAgIH0KKyNlbmRpZiAv KiBFTkNSWVBUSU9OICovCisgICAgICAgICAgICBtdXR1YWxfY29tcGxldGUgPSAxOworICAgICAg ICB9CisgICAgICAgIGNrc3RybmNweShzdHJUbXAsIlJlbW90ZSBtYWNoaW5lIGhhcyBiZWVuIG11 dHVhbGx5IGF1dGhlbnRpY2F0ZWQiLAorICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0clRtcCkp OworICAgICAgICBrcmI1X2Vycm5vID0gMDsKKyAgICAgICAgbWFrZXN0cigma3JiNV9lcnJtc2cs c3RyVG1wKTsKKyAgICAgICAgcHJpbnRmKCIlc1xyXG4iLHN0clRtcCk7CisgICAgICAgIGF1dGhf ZmluaXNoZWQoQVVUSF9VU0VSKTsKKyAgICAgICAgcmV0dXJuIEFVVEhfU1VDQ0VTUzsKKworI2lm ZGVmIEZPUldBUkQKKyAgICBjYXNlIEtSQjVfRk9SV0FSRF9BQ0NFUFQ6CisgICAgICAgIGZvcndh cmRlZF90aWNrZXRzID0gMTsKKyAgICAgICAgY2tzdHJuY3B5KHN0clRtcCwiUmVtb3RlIG1hY2hp bmUgaGFzIGFjY2VwdGVkIGZvcndhcmRlZCBjcmVkZW50aWFscyIsCisgICAgICAgICAgICAgICAg ICBzaXplb2Yoc3RyVG1wKSk7CisgICAgICAgIGtyYjVfZXJybm8gPSAwOworICAgICAgICBtYWtl c3RyKCZrcmI1X2Vycm1zZyxzdHJUbXApOworICAgICAgICBwcmludGYoIiVzXHJcbiIsc3RyVG1w KTsKKyAgICAgICAgcmV0dXJuIEFVVEhfU1VDQ0VTUzsKKworICAgIGNhc2UgS1JCNV9GT1JXQVJE X1JFSkVDVDoKKyAgICAgICAgZm9yd2FyZGVkX3RpY2tldHMgPSAwOworICAgICAgICBpZiAoY250 ID4gMCkgeworICAgICAgICAgICAgY2hhciAqczsKKyAgICAgICAgICAgIGludCBsZW47CisgICAg ICAgICAgICBsZW4gPSBja3N0cm5jcHkoc3RyVG1wLAorICAgICAgICAgICAgICAgICAgICAgICJL ZXJiZXJvcyBWNSByZWZ1c2VzIGZvcndhcmRlZCBjcmVkZW50aWFscyBiZWNhdXNlICIsCisgICAg ICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJUbXApKTsKKyAgICAgICAgICAgIGlmICggbGVu ICsgY250IDwgc2l6ZW9mKHN0clRtcCkgKSB7CisgICAgICAgICAgICAgICAgcyA9IHN0clRtcCAr IHN0cmxlbihzdHJUbXApOworICAgICAgICAgICAgICAgIG1lbWNweShzLCBkYXRhLCBjbnQpOwor ICAgICAgICAgICAgICAgIHNbY250XSA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxz ZQorICAgICAgICAgICAgY2tzdHJuY3B5KHN0clRtcCwgIktlcmJlcm9zIFY1IHJlZnVzZXMgZm9y d2FyZGVkIGNyZWRlbnRpYWxzIiwKKyAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RyVG1w KSk7CisKKyAgICAgICAgcHJpbnRmKCIlc1xyXG4iLHN0clRtcCk7CisgICAgICAgIGtyYjVfZXJy bm8gPSAtMTsKKyAgICAgICAgbWFrZXN0cigma3JiNV9lcnJtc2csc3RyVG1wKTsKKyAgICAgICAg cmV0dXJuIEFVVEhfU1VDQ0VTUzsKKyNlbmRpZiAgLyogRk9SV0FSRCAqLworCisjaWZkZWYgVExT X1ZFUklGWQorICAgIGNhc2UgS1JCNV9UTFNfVkVSSUZZOgorICAgICAgICBpZiAoKGhvdyAmIEFV VEhfRU5DUllQVF9NQVNLKSA9PSBBVVRIX0VOQ1JZUFRfU1RBUlRfVExTKSB7CisgICAgICAgICAg ICBrcmI1X2RhdGEgcmVwbHksIG1zZzsKKyAgICAgICAgICAgIGNoYXIgdGxzX3ZlcmlmeVsyNF07 CisgICAgICAgICAgICBrcmI1X3JlcGxheV9kYXRhIHJlcGRhdGE7CisgICAgICAgICAgICBrcmI1 X2Vycm9yX2NvZGUgcjsKKworICAgICAgICAgICAgc3NsX2dldF9zZXJ2ZXJfZmluaXNoZWQoJnRs c192ZXJpZnlbMF0sMTIpOworICAgICAgICAgICAgc3NsX2dldF9jbGllbnRfZmluaXNoZWQoJnRs c192ZXJpZnlbMTJdLDEyKTsKKworICAgICAgICAgICAgcmVwbHkuZGF0YSA9IChjaGFyICopZGF0 YTsKKyAgICAgICAgICAgIHJlcGx5Lmxlbmd0aCA9IGNudDsKKworCQkJa3JiNV9hdXRoX2Nvbl9n ZW5hZGRycyhrNV9jb250ZXh0LCBhdXRoX2NvbnRleHQsIHR0eWZkLAorCQkJCQkJCQkgICBLUkI1 X0FVVEhfQ09OVEVYVF9HRU5FUkFURV9SRU1PVEVfRlVMTF9BRERSKTsKKworICAgICAgICAgICAg aWYgKHIgPSBrcmI1X3JkX3NhZmUoazVfY29udGV4dCxhdXRoX2NvbnRleHQsJnJlcGx5LCZtc2cs JnJlcGRhdGEpKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29tX2VycigiIiwg ciwgImRlY29kaW5nIHRscyB2ZXJpZmllciIpOworICAgICAgICAgICAgICAgIGtyYjVfZXJybm8g PSByOworICAgICAgICAgICAgICAgIG1ha2VzdHIoJmtyYjVfZXJybXNnLCJUTFMgdmVyaWZ5IGZh aWx1cmUiKTsKKyAgICAgICAgICAgICAgICBhdXRoX2ZpbmlzaGVkKEFVVEhfUkVKRUNUKTsKKyAg ICAgICAgICAgICAgICByZXR1cm4oQVVUSF9GQUlMVVJFKTsKKyAgICAgICAgICAgIH0KKyAgICAg ICAgICAgIGlmICggbXNnLmxlbmd0aCA9PSAyNCAmJiAhbWVtY21wKG1zZy5kYXRhLHRsc192ZXJp ZnksMjQpICkKKyAgICAgICAgICAgICAgICAga3JiNV90bHNfdmVyaWZpZWQgPSAxOworICAgICAg ICAgICAga3JiNV9mcmVlX2RhdGFfY29udGVudHMoazVfY29udGV4dCwmbXNnKTsKKyAgICAgICAg ICAgIGlmIChrcmI1X3Rsc192ZXJpZmllZCkKKyAgICAgICAgICAgICAgICByZXR1cm4oQVVUSF9T VUNDRVNTKTsKKyAgICAgICAgfQorICAgICAgICBwcmludGYoIk1hbiBpbiB0aGUgbWlkZGxlIGF0 dGFjayBkZXRlY3RlZC4gIFNlc3Npb24gdGVybWluYXRlZC5cclxuIik7CisgICAgICAgIG5ldGNs b3MoKTsKKyAgICAgICAga3JiNV9lcnJubyA9IC0xOworICAgICAgICBtYWtlc3RyKCZrcmI1X2Vy cm1zZywiVExTIHZlcmlmeSBmYWlsdXJlIik7CisgICAgICAgIGF1dGhfZmluaXNoZWQoQVVUSF9S RUpFQ1QpOworICAgICAgICByZXR1cm4oQVVUSF9GQUlMVVJFKTsKKyNlbmRpZiAvKiBDS19TU0wg Ki8KKworICAgIGRlZmF1bHQ6CisgICAgICAgIGtyYjVfZXJybm8gPSAtMTsKKyAgICAgICAgbWFr ZXN0cigma3JiNV9lcnJtc2csIlVua25vd24gcmVwbHkgdHlwZSIpOworICAgICAgICBhdXRoX2Zp bmlzaGVkKEFVVEhfUkVKRUNUKTsKKyAgICAgICAgcmV0dXJuIEFVVEhfRkFJTFVSRTsgICAgICAg ICAgICAgICAgICAgICAgICAvKiBVbmtub3duIHJlcGx5IHR5cGUgKi8KKyAgICB9Cit9CisKKyNp ZmRlZiBGT1JXQVJECisvKiBEZWNvZGUsIGRlY3J5cHQgYW5kIHN0b3JlIHRoZSBmb3J3YXJkZWQg Y3JlZHMgaW4gdGhlIGxvY2FsIGNjYWNoZS4gKi8KKy8qIE5lZWRlZCBmb3IgS1JCNV9GT1JXQVJE ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworc3RhdGljIGty YjVfZXJyb3JfY29kZQorcmRfYW5kX3N0b3JlX2Zvcl9jcmVkcyhjb250ZXh0LCBhdXRoX2NvbnRl eHQsIGluYnVmLCBjbGllbnQpCisgICAga3JiNV9jb250ZXh0IGNvbnRleHQ7CisgICAga3JiNV9h dXRoX2NvbnRleHQgYXV0aF9jb250ZXh0OworICAgIGtyYjVfZGF0YSAqaW5idWY7CisgICAga3Ji NV9jb25zdF9wcmluY2lwYWwgY2xpZW50OworeworICAgIGtyYjVfY3JlZHMgKiogY3JlZHM9TlVM TDsKKyAgICBrcmI1X2Vycm9yX2NvZGUgcmV0dmFsOworICAgIGtyYjVfY2NhY2hlIGNjYWNoZT1O VUxMOworCisjaWZkZWYgSEVJTURBTAorICAgIC8qCisgICAgSGVpbWRhbCBUZWxuZXRkIGNyZWF0 ZXMgdGhlIGNhY2hlIGZpbGUgYXQgdGhpcyBwb2ludCBhbmQgc2V0cworICAgIHRoZSBLUkI1Q0NO QU1FIGVudmlyb25tZW50IHZhcmlhYmxlLgorCisgICAgc3RydWN0IHBhc3N3ZCAqcHdkOworICAg IGNoYXIgY2NuYW1lWzEwMjRdOworCisgICAgcHdkID0gZ2V0cHduYW0oc3pVc2VyTmFtZVJlcXVl c3RlZCk7CisgICAgaWYgKHB3ZCA9PSBOVUxMKQorICAgICAgICBicmVhazsKKyAgICBzbnByaW50 ZihjY25hbWUsIHNpemVvZihjY25hbWUpLTEsICJGSUxFOi90bXAva3JiNWNjXyV1Iixwd2QtPnB3 X3VpZCk7CisgICAgcmV0dmFsID0ga3JiNV9jY19yZXNvbHZlKGNvbnRleHQsY2NuYW1lLCZjY2Fj aGUpOworCisgICAgY2hvd24oY2NuYW1lICsgNSwgcHdkLT5wd191aWQsIC0xKTsKKyAgICAqLwor I2VuZGlmIC8qIEhFSU1EQUwgKi8KKworICAgIGlmIChyZXR2YWwgPSBrNV9nZXRfY2NhY2hlKGNv bnRleHQsJmNjYWNoZSxOVUxMKSkKKyAgICAgICAgcmV0dXJuKHJldHZhbCk7CisKKyNpZmRlZiBI RUlNREFMCisgICAgaWYgKChyZXR2YWwgPSBrcmI1X2NjX2luaXRpYWxpemUoY29udGV4dCwgY2Nh Y2hlLCBjbGllbnQpKSkKKyAgICAgICAgcmV0dXJuKHJldHZhbCk7CisKKyAgICBpZiAoKHJldHZh bCA9IGtyYjVfcmRfY3JlZChjb250ZXh0LCBhdXRoX2NvbnRleHQsIGNjYWNoZSwgaW5idWYpKSkK KyAgICAgICAgcmV0dXJuKHJldHZhbCk7CisjZWxzZSAvKiBIRUlNREFMICovCisgICAgaWYgKChy ZXR2YWwgPSBrcmI1X3JkX2NyZWQoY29udGV4dCwgYXV0aF9jb250ZXh0LCBpbmJ1ZiwgJmNyZWRz LCBOVUxMKSkpCisgICAgICAgIHJldHVybihyZXR2YWwpOworCisgICAgaWYgKChyZXR2YWwgPSBr cmI1X2NjX2luaXRpYWxpemUoY29udGV4dCwgY2NhY2hlLCBjcmVkc1swXS0+Y2xpZW50KSkpCisg ICAgICAgIGdvdG8gY2xlYW51cDsKKworICAgIGlmICgocmV0dmFsID0ga3JiNV9jY19zdG9yZV9j cmVkKGNvbnRleHQsIGNjYWNoZSwgY3JlZHNbMF0pKSkKKyAgICAgICAgZ290byBjbGVhbnVwOwor CisgICAgaWYgKChyZXR2YWwgPSBrcmI1X2NjX2Nsb3NlKGNvbnRleHQsIGNjYWNoZSkpKQorICAg ICAgICBnb3RvIGNsZWFudXA7CisKKyAgY2xlYW51cDoKKyAgICBrcmI1X2ZyZWVfdGd0X2NyZWRz KGNvbnRleHQsIGNyZWRzKTsKKyNlbmRpZiAvKiBIRUlNREFMICovCisgICAgcmV0dXJuIHJldHZh bDsKK30KKyNlbmRpZiAvKiBGT1JXQVJEICovCisKKy8qCisgKgorICogSzVfYXV0aF9pcy4KKyAq CisgKi8KKworc3RhdGljIGludAorI2lmZGVmIENLX0FOU0lDCitrNV9hdXRoX2lzKGludCBob3cs IHVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBjbnQpCisjZWxzZQorazVfYXV0aF9pcyhob3csZGF0 YSxjbnQpIGludCBob3c7IHVuc2lnbmVkIGNoYXIgKmRhdGE7IGludCBjbnQ7CisjZW5kaWYKK3sK KyAgICBpbnQgciA9IDA7CisgICAga3JiNV9wcmluY2lwYWwgc2VydmVyOworICAgIGtyYjVfa2V5 YmxvY2sgKm5ld2tleSA9IE5VTEw7CisgICAga3JiNV9kYXRhIG91dGJ1ZjsKKyAgICBjaGFyIGVy cmJ1ZlsxMjhdPSIiOworICAgIGNoYXIgKmdldGVudigpOworI2lmbmRlZiBIRUlNREFMCisgICAg a3JiNV9hdXRoZW50aWNhdG9yICphdXRoZW50aWNhdG9yOworICAgIGtyYjVfa2V5dGFiIGtleXRh YmlkID0gMDsKKyNlbmRpZiAvKiBIRUlNREFMICovCisgICAga3JiNV9kYXRhIGluYnVmOworI2lm ZGVmIENLX0VOQ1JZUFRJT04KKyAgICBTZXNzaW9uX0tleSBza2V5OworI2VuZGlmIC8qIENLX0VO Q1JZUFRJT04gKi8KKyAgICBjaGFyIHByaW5jWzI1Nl09IiI7CisgICAgaW50IGxlbjsKKworICAg IGRhdGEgKz0gNDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUG9pbnQgdG8g c3RhdHVzIGJ5dGUgKi8KKyAgICBjbnQgLT0gNDsKKworICAgIGNraGV4ZHVtcCgiazVfYXV0aF9p cyBkYXRhIixkYXRhLGNudCk7CisgICAgZGVidWcoRjExMSwiazVfYXV0aF9pcyIsImhvdyIsaG93 KTsKKworICAgIGlmIChjbnQtLSA8IDEpIHsKKyAgICAgICAgYXV0aF9maW5pc2hlZChBVVRIX1JF SkVDVCk7CisgICAgICAgIHJldHVybiBBVVRIX0ZBSUxVUkU7CisgICAgfQorICAgIHN3aXRjaCAo KmRhdGErKykgeworICAgIGNhc2UgS1JCX0FVVEg6CisgICAgICAgIGs1X2F1dGguZGF0YSA9IChj aGFyICopZGF0YTsKKyAgICAgICAgazVfYXV0aC5sZW5ndGggPSBjbnQ7CisKKyAgICAgICAgZGVi dWcoRjExMCwiazVfYXV0aF9pcyIsIktSQl9BVVRIIiwwKTsKKyAgICAgICAgZGVidWcoRjExMSwi azVfYXV0aF9pcyIsImF1dGhfY29udGV4dCIsYXV0aF9jb250ZXh0KTsKKworICAgICAgICBpZiAo IXIgJiYgIWF1dGhfY29udGV4dCkgeworICAgICAgICAgICAgciA9IGtyYjVfYXV0aF9jb25faW5p dChrNV9jb250ZXh0LCAmYXV0aF9jb250ZXh0KTsKKyAgICAgICAgICAgIGRlYnVnKEYxMTEsIms1 X2F1dGhfaXMiLCJrcmI1X2F1dGhfY29uX2luaXQiLHIpOworICAgICAgICB9CisKKyNpZmRlZiBI RUlNREFMCisgICAgICAgIGlmICghcikKKyAgICAgICAgICAgIHIgPSBrcmI1X2F1dGhfY29uX3Nl dGFkZHJzX2Zyb21fZmQoazVfY29udGV4dCwKKwkJCQkJICAgICAgIGF1dGhfY29udGV4dCwKKwkJ CQkJICAgICAgICZ0dHlmZCk7CisgICAgICAgIGlmICghcikKKyAgICAgICAgICAgIHIgPSBrcmI1 X3NvY2tfdG9fcHJpbmNpcGFsKGs1X2NvbnRleHQsCisJCQkJICAgICAgIDAsCisJCQkJICAgICAg ICJob3N0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtSQjVfTlRf U1JWX0hTVCwKKwkJCQkgICAgICAgJnNlcnZlcik7CisgICAgICAgIGlmICghcikKKyNlbHNlIC8q IEhFSU1EQUwgKi8KKyAgICAgICAgaWYgKCFyKSB7CisgICAgICAgICAgICBrcmI1X3JjYWNoZSBy Y2FjaGUgPSBOVUxMOworCisgICAgICAgICAgICByID0ga3JiNV9hdXRoX2Nvbl9nZXRyY2FjaGUo azVfY29udGV4dCwgYXV0aF9jb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAmcmNhY2hlKTsKKyAgICAgICAgICAgIGRlYnVnKEYxMTEsIms1X2F1dGhfaXMi LCJrcmI1X2F1dGhfY29uX2dldHJjYWNoZSIscik7CisKKyAgICAgICAgICAgIGlmICghciAmJiAh cmNhY2hlKSB7CisgICAgICAgICAgICAgICAgLyogRG8gbm90IHJlc29sdmUgc2VydmVyJ3MgcHJp bmNpcGFsIG5hbWUsIHdlIHdpbGwgY2hlY2sgKi8KKyAgICAgICAgICAgICAgICAvKiBmb3IgdmFs aWRpdHkgYWZ0ZXIgdGhlIGtyYjVfcmRfcmVxKCkgY2FsbC4gICAgICAgICAgICAqLworICAgICAg ICAgICAgICAgIHIgPSBrcmI1X3NuYW1lX3RvX3ByaW5jaXBhbChrNV9jb250ZXh0LCAwLCAwLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS1JCNV9OVF9TUlZf SFNULCAmc2VydmVyKTsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJrNV9hdXRoX2lzIiwi a3JiNV9zbmFtZV90b19wcmluY2lwYWwiLHIpOworCisgICAgICAgICAgICAgICAgaWYgKCFyKSB7 CisgICAgICAgICAgICAgICAgICAgIHIgPSBrcmI1X2dldF9zZXJ2ZXJfcmNhY2hlKGs1X2NvbnRl eHQsCisgICAgICAgICAgICAgICAgICAgICAgICBrcmI1X3ByaW5jX2NvbXBvbmVudChrNV9jb250 ZXh0LCBzZXJ2ZXIsIDApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJnJjYWNoZSk7CisgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsIms1X2F1 dGhfaXMiLCJrcmI1X2dldF9zZXJ2ZXJfcmNhY2hlIixyKTsKKyAgICAgICAgICAgICAgICAgICAg a3JiNV9mcmVlX3ByaW5jaXBhbChrNV9jb250ZXh0LCBzZXJ2ZXIpOworICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghcikgeworICAgICAgICAgICAgICAg IHIgPSBrcmI1X2F1dGhfY29uX3NldHJjYWNoZShrNV9jb250ZXh0LAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0aF9jb250ZXh0LCByY2FjaGUpOworICAg ICAgICAgICAgICAgIGRlYnVnKEYxMTEsIms1X2F1dGhfaXMiLCJrcmI1X2F1dGhfY29uX3NldHJj YWNoZSIscik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFyICYmIGs1 X2tleXRhYikgeworICAgICAgICAgICAgciA9IGtyYjVfa3RfcmVzb2x2ZShrNV9jb250ZXh0LAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgazVfa2V5dGFiLCAma2V5dGFiaWQpOwor ICAgICAgICAgICAgZGVidWcoRjExMSwiazVfYXV0aF9pcyIsImtyYjVfa3RfcmVzb2x2ZSIscik7 CisgICAgICAgIH0KKyNlbmRpZiAvKiBIRUlNREFMICovCisgICAgICAgIGlmICghcikgeworICAg ICAgICAgICAgciA9IGtyYjVfcmRfcmVxKGs1X2NvbnRleHQsICZhdXRoX2NvbnRleHQsICZrNV9h dXRoLAorI2lmZGVmIEhFSU1EQUwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVy LCBOVUxMLCBOVUxMLAorI2Vsc2UgLyogSEVJTURBTCAqLworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBOVUxMLCBrZXl0YWJpZCwgTlVMTCwKKyNlbmRpZiAvKiBIRUlNREFMICovCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICZrNV90aWNrZXQpOworICAgICAgICAgICAgZGVidWco RjExMSwiazVfYXV0aF9pcyIsImtyYjVfcmRfcmVxIixyKTsKKyAgICAgICAgfQorICAgICAgICBp ZiAocikgeworICAgICAgICAgICAgKHZvaWQpIGNrc3RybmNweShlcnJidWYsICJrcmI1X3JkX3Jl cSBmYWlsZWQ6ICIsc2l6ZW9mKGVycmJ1ZikpOworICAgICAgICAgICAgKHZvaWQpIGNrc3RybmNh dChlcnJidWYsIGVycm9yX21lc3NhZ2Uociksc2l6ZW9mKGVycmJ1ZikpOworICAgICAgICAgICAg Z290byBlcnJvdXQ7CisgICAgICAgIH0KKyNpZmRlZiBIRUlNREFMCisgICAgICAgIGtyYjVfZnJl ZV9wcmluY2lwYWwoazVfY29udGV4dCwgc2VydmVyKTsKKworICAgICAgICB7CisgICAgICAgICAg ICBjaGFyIHR5cGVfY2hlY2tbMjZdOworCisgICAgICAgICAgICAvKiBVUERBVEUgZm9yIFNUQVJU X1RMUy4gQVVUSF9FTkNSWVBUX1NUQVJUX1RMUyBhbmQgaW5jbHVzaW9uIG9mICovCisgICAgICAg ICAgICAvKiBjbGllbnQgYW5kIHRoZW4gc2VydmVyIGZpbmlzaGVkIG1lc3NhZ2VzLiAqLworCisg ICAgICAgICAgICB0eXBlX2NoZWNrWzBdID0gQVVUSFRZUEVfS0VSQkVST1NfVjU7CisgICAgICAg ICAgICB0eXBlX2NoZWNrWzFdID0gaG93OyAgICAgICAgLyogbm90IGJyb2tlbiBpbnRvIHBhcnRz ICovCisjaWZkZWYgQ0tfU1NMCisgICAgICAgICAgICBpZiAoKGhvdyAmIEFVVEhfRU5DUllQVF9N QVNLKSA9PSBBVVRIX0VOQ1JZUFRfU1RBUlRfVExTKSB7CisgICAgICAgICAgICAgICAgc3NsX2dl dF9jbGllbnRfZmluaXNoZWQoJnR5cGVfY2hlY2tbMl0sMTIpOworICAgICAgICAgICAgICAgIHNz bF9nZXRfc2VydmVyX2ZpbmlzaGVkKCZ0eXBlX2NoZWNrWzE0XSwxMik7CisgICAgICAgICAgICAg ICAgY2toZXhkdW1wKCJrNV9hdXRoX2lzIHR5cGVfY2hlY2siLHR5cGVfY2hlY2ssMjYpOworICAg ICAgICAgICAgfQorI2VuZGlmIC8qIENLX1NTTCAqLworCisgICAgICAgICAgICByID0ga3JiNV92 ZXJpZnlfYXV0aGVudGljYXRvcl9jaGVja3N1bShrNV9jb250ZXh0LAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhfY29udGV4dCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlX2NoZWNr LAorI2lmZGVmIENLX1NTTAorICAgICAgICAgICAgICAgICgoaG93ICYgQVVUSF9FTkNSWVBUX01B U0spID09IEFVVEhfRU5DUllQVF9TVEFSVF9UTFMpID8gMjYgOgorI2VuZGlmIC8qIENLX1NTTCAq LworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIp OworICAgICAgICB9CisjZWxzZSAvKiBIRUlNREFMICovCisgICAgICAgIGxlbiA9IGtyYjVfcHJp bmNfY29tcG9uZW50KGs1X2NvbnRleHQsazVfdGlja2V0LT5zZXJ2ZXIsMCktPmxlbmd0aDsKKyAg ICAgICAgaWYgKGxlbiA8IDI1NikKKyAgICAgICAgeworICAgICAgICAgICAgbWVtY3B5KHByaW5j LAorICAgICAgICAgICAgICAgICAgIGtyYjVfcHJpbmNfY29tcG9uZW50KGs1X2NvbnRleHQsazVf dGlja2V0LT5zZXJ2ZXIsMCktPmRhdGEsCisgICAgICAgICAgICAgICAgICAgbGVuKTsKKyAgICAg ICAgICAgIHByaW5jW2xlbl0gPSAnXDAnOworICAgICAgICB9CisgICAgICAgIGlmICggc3RyY21w KChrcmI1X2Rfc3J2ID8ga3JiNV9kX3NydiA6IEtSQjVfU0VSVklDRV9OQU1FKSwgcHJpbmMpICkK KyAgICAgICAgeworICAgICAgICAgICAgZGVidWcoRjExMCwiazVfYXV0aF9pcyBpbmNvcnJlY3Qg c2VydmljZSBuYW1lIixwcmluYywwKTsKKyAgICAgICAgICAgIGNrc3RybmNweShlcnJidWYsImlu Y29ycmVjdCBzZXJ2aWNlIG5hbWU6ICIsc2l6ZW9mKGVycmJ1ZikpOworICAgICAgICAgICAgY2tz dHJuY2F0KGVycmJ1ZixrcmI1X2Rfc3J2ID8ga3JiNV9kX3NydiA6IEtSQjVfU0VSVklDRV9OQU1F LAorICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGVycmJ1ZikpOworICAgICAgICAgICAgY2tz dHJuY2F0KGVycmJ1ZiwiICE9ICIsc2l6ZW9mKGVycmJ1ZikpOworICAgICAgICAgICAgY2tzdHJu Y2F0KGVycmJ1ZixwcmluYyxzaXplb2YoZXJyYnVmKSk7CisgICAgICAgICAgICBnb3RvIGVycm91 dDsKKyAgICAgICAgfQorCisgICAgICAgIHIgPSBrcmI1X2F1dGhfY29uX2dldGF1dGhlbnRpY2F0 b3IoazVfY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgYXV0aF9jb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAmYXV0aGVudGljYXRvcik7CisgICAgICAgIGRlYnVnKEYxMTEsIms1X2F1dGhfaXMiLCJr cmI1X2F1dGhfY29uX2dldGF1dGhlbnRpY2F0b3IiLHIpOworICAgICAgICBpZiAocikgeworICAg ICAgICAgICAgKHZvaWQpIGNrc3RybmNweShlcnJidWYsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICJrcmI1X2F1dGhfY29uX2dldGF1dGhlbnRpY2F0b3IgZmFpbGVkOiAiLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoZXJyYnVmKQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICApOworICAgICAgICAgICAgKHZvaWQpIGNrc3RybmNhdChlcnJidWYsIGVycm9y X21lc3NhZ2Uociksc2l6ZW9mKGVycmJ1ZikpOworICAgICAgICAgICAgZ290byBlcnJvdXQ7Cisg ICAgICAgIH0KKworICAgICAgICBpZiAoYXV0aGVudGljYXRvci0+Y2hlY2tzdW0pIHsKKyAgICAg ICAgICAgIGNoYXIgdHlwZV9jaGVja1syNl07CisgICAgICAgICAgICBrcmI1X2NoZWNrc3VtICpj a3N1bSA9IGF1dGhlbnRpY2F0b3ItPmNoZWNrc3VtOworICAgICAgICAgICAga3JiNV9rZXlibG9j ayAqa2V5OworCisgICAgICAgICAgICAvKiBVUERBVEUgZm9yIFNUQVJUX1RMUy4gQVVUSF9FTkNS WVBUX1NUQVJUX1RMUyBhbmQgaW5jbHVzaW9uIG9mICovCisgICAgICAgICAgICAvKiBjbGllbnQg YW5kIHRoZW4gc2VydmVyIGZpbmlzaGVkIG1lc3NhZ2VzLiAqLworCisgICAgICAgICAgICB0eXBl X2NoZWNrWzBdID0gQVVUSFRZUEVfS0VSQkVST1NfVjU7CisgICAgICAgICAgICB0eXBlX2NoZWNr WzFdID0gaG93OyAgICAgICAgLyogbm90IGJyb2tlbiBpbnRvIHBhcnRzICovCisjaWZkZWYgQ0tf U1NMCisgICAgICAgICAgICBpZiAoKGhvdyAmIEFVVEhfRU5DUllQVF9NQVNLKSA9PSBBVVRIX0VO Q1JZUFRfU1RBUlRfVExTKSB7CisgICAgICAgICAgICAgICAgc3NsX2dldF9jbGllbnRfZmluaXNo ZWQoJnR5cGVfY2hlY2tbMl0sMTIpOworICAgICAgICAgICAgICAgIHNzbF9nZXRfc2VydmVyX2Zp bmlzaGVkKCZ0eXBlX2NoZWNrWzE0XSwxMik7CisgICAgICAgICAgICAgICAgY2toZXhkdW1wKCJr NV9hdXRoX2lzIHR5cGVfY2hlY2siLHR5cGVfY2hlY2ssMjYpOworICAgICAgICAgICAgfQorI2Vu ZGlmIC8qIENLX1NTTCAqLworCisgICAgICAgICAgICByID0ga3JiNV9hdXRoX2Nvbl9nZXRrZXko azVfY29udGV4dCwgYXV0aF9jb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAma2V5KTsKKyAgICAgICAgICAgIGRlYnVnKEYxMTEsIms1X2F1dGhfaXMiLCJrcmI1 X2F1dGhfY29uX2dldGtleSIscik7CisgICAgICAgICAgICBpZiAocikgeworICAgICAgICAgICAg ICAgICh2b2lkKSBja3N0cm5jcHkoZXJyYnVmLCAia3JiNV9hdXRoX2Nvbl9nZXRrZXkgZmFpbGVk OiAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihlcnJidWYpKTsK KyAgICAgICAgICAgICAgICAodm9pZCkgY2tzdHJuY2F0KGVycmJ1ZiwgZXJyb3JfbWVzc2FnZShy KSxzaXplb2YoZXJyYnVmKSk7CisgICAgICAgICAgICAgICAgZ290byBlcnJvdXQ7CisgICAgICAg ICAgICB9CisKKyAgICAgICAgICAgIHIgPSBrcmI1X3ZlcmlmeV9jaGVja3N1bShrNV9jb250ZXh0 LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBja3N1bS0+Y2hlY2tzdW1f dHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2tzdW0sCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0eXBlX2NoZWNrLAorICAgICAgICAg ICAgICAgICAgKChob3cgJiBBVVRIX0VOQ1JZUFRfTUFTSykgPT0gQVVUSF9FTkNSWVBUX1NUQVJU X1RMUykgPyAyNiA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleS0+Y29udGVudHMsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleS0+bGVuZ3RoCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICBkZWJ1ZyhGMTExLCJr NV9hdXRoX2lzIiwia3JiNV92ZXJpZnlfY2hlY2tzdW0iLHIpOworICAgICAgICAgICAgaWYgKHIp IHsKKyAgICAgICAgICAgICAgICAodm9pZCkgY2tzdHJuY3B5KGVycmJ1ZiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICJjaGVja3N1bSB2ZXJpZmljYXRpb24gZmFpbGVkOiAiLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGVycmJ1ZikKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgKHZvaWQpIGNrc3Ry bmNhdChlcnJidWYsIGVycm9yX21lc3NhZ2Uociksc2l6ZW9mKGVycmJ1ZikpOworICAgICAgICAg ICAgICAgIGdvdG8gZXJyb3V0OworICAgICAgICAgICAgfQorICAgICAgICAgICAga3JiNV9mcmVl X2tleWJsb2NrKGs1X2NvbnRleHQsIGtleSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg ICBpZiAoKGhvdyAmIEFVVEhfRU5DUllQVF9NQVNLKSA9PSBBVVRIX0VOQ1JZUFRfVVNJTkdfVEVM T1BUKSB7CisgICAgICAgICAgICAgICAgKHZvaWQpIHN0cmNweShlcnJidWYsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgImF1dGhlbnRpY2F0b3IgaXMgbWlzc2luZyByZXF1aXJlZCBj aGVja3N1bSIpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3V0OworICAgICAgICAgICAgfQor ICAgICAgICB9CisKKyAgICAgICAga3JiNV9mcmVlX2F1dGhlbnRpY2F0b3IoazVfY29udGV4dCwg YXV0aGVudGljYXRvcik7CisjZW5kaWYgLyogSEVJTURBTCAqLworCisjaWZkZWYgVExTX1ZFUklG WQorICAgICAgICBpZiAoKGhvdyAmIEFVVEhfRU5DUllQVF9NQVNLKSA9PSBBVVRIX0VOQ1JZUFRf U1RBUlRfVExTKSB7CisgICAgICAgICAgICBrcmI1X2RhdGEgaW4sIG1zZzsKKyAgICAgICAgICAg IGNoYXIgdGxzX3ZlcmlmeVsyNF07CisgICAgICAgICAgICBrcmI1X3JlcGxheV9kYXRhIHJlcGRh dGE7CisKKyAgICAgICAgICAgIHNzbF9nZXRfc2VydmVyX2ZpbmlzaGVkKCZ0bHNfdmVyaWZ5WzBd LDEyKTsKKyAgICAgICAgICAgIHNzbF9nZXRfY2xpZW50X2ZpbmlzaGVkKCZ0bHNfdmVyaWZ5WzEy XSwxMik7CisKKyAgICAgICAgICAgIGluLmRhdGEgPSB0bHNfdmVyaWZ5OworICAgICAgICAgICAg aW4ubGVuZ3RoID0gMjQ7CisKKyAgICAgICAgICAgIGtyYjVfYXV0aF9jb25fZ2VuYWRkcnMoazVf Y29udGV4dCwgYXV0aF9jb250ZXh0LCB0dHlmZCwKKwkJCQkJCQkJICAgS1JCNV9BVVRIX0NPTlRF WFRfR0VORVJBVEVfTE9DQUxfRlVMTF9BRERSKTsKKyAgICAgICAgICAgIGlmIChyID0ga3JiNV9t a19zYWZlKGs1X2NvbnRleHQsYXV0aF9jb250ZXh0LCZpbiwmbXNnLCZyZXBkYXRhKSkgeworICAg ICAgICAgICAgICAgIGNvbV9lcnIoIiIsIHIsICJlbmNvZGluZyB0bHMgdmVyaWZpZXIiKTsKKyAg ICAgICAgICAgICAgICAodm9pZCkgY2tzdHJuY2F0KGVycmJ1ZiwgZXJyb3JfbWVzc2FnZShyKSxz aXplb2YoZXJyYnVmKSk7CisgICAgICAgICAgICAgICAgZ290byBlcnJvdXQ7CisgICAgICAgICAg ICB9CisgICAgICAgICAgICBTZW5kSzVBdXRoU0IoS1JCNV9UTFNfVkVSSUZZLCBtc2cuZGF0YSwg bXNnLmxlbmd0aCk7CisgICAgICAgICAgICBrcmI1X2ZyZWVfZGF0YV9jb250ZW50cyhrNV9jb250 ZXh0LCZtc2cpOworICAgICAgICB9CisjZW5kaWYgLyogQ0tfU1NMICovCisgICAgICAgIGlmICgo aG93ICYgQVVUSF9IT1dfTUFTSykgPT0gQVVUSF9IT1dfTVVUVUFMKSB7CisgICAgICAgICAgICAv KiBkbyBhcF9yZXAgc3R1ZmYgaGVyZSAqLworICAgICAgICAgICAgaWYgKChyID0ga3JiNV9ta19y ZXAoazVfY29udGV4dCwKKyNpZmRlZiBIRUlNREFMCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJmF1dGhfY29udGV4dCwKKyNlbHNlIC8qIEhFSU1EQUwgKi8KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBhdXRoX2NvbnRleHQsCisjZW5kaWYgLyogSEVJTURBTCAq LworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvdXRidWYpKSkgeworICAgICAg ICAgICAgICAgIGRlYnVnKEYxMTEsIms1X2F1dGhfaXMiLCJrcmI1X21rX3JlcCIscik7CisgICAg ICAgICAgICAgICAgKHZvaWQpIGNrc3RybmNweShlcnJidWYsICJNYWtlIHJlcGx5IGZhaWxlZDog IixzaXplb2YoZXJyYnVmKSk7CisgICAgICAgICAgICAgICAgKHZvaWQpIGNrc3RybmNhdChlcnJi dWYsIGVycm9yX21lc3NhZ2Uociksc2l6ZW9mKGVycmJ1ZikpOworICAgICAgICAgICAgICAgIGdv dG8gZXJyb3V0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVidWcoRjExMSwiazVfYXV0 aF9pcyIsImtyYjVfbWtfcmVwIixyKTsKKworICAgICAgICAgICAgU2VuZEs1QXV0aFNCKEtSQjVf UkVTUE9OU0UsIG91dGJ1Zi5kYXRhLCBvdXRidWYubGVuZ3RoKTsKKyAgICAgICAgICAgIG11dHVh bF9jb21wbGV0ZSA9IDE7CisgICAgICAgIH0KKworI2lmZGVmIEhFSU1EQUwKKyAgICAgICAgewor ICAgICAgICAgICAgY2hhciAqIG5hbWUgPSBOVUxMOworICAgICAgICAgICAgaWYgKGtyYjVfdW5w YXJzZV9uYW1lKGs1X2NvbnRleHQsIGs1X3RpY2tldC0+Y2xpZW50LAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAmbmFtZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg ICAgc3pVc2VyTmFtZUF1dGhlbnRpY2F0ZWRbMF0gPSAnXDAnOworICAgICAgICAgICAgfSBlbHNl IHsKKyAgICAgICAgICAgICAgICBja3N0cm5jcHkoc3pVc2VyTmFtZUF1dGhlbnRpY2F0ZWQsVUlE QlVGTEVOLG5hbWUpOworICAgICAgICAgICAgICAgIGZyZWUobmFtZSk7CisgICAgICAgICAgICB9 CisgICAgICAgIH0KKyNlbHNlIC8qIEhFSU1EQUwgKi8KKyAgICAgICAgaWYgKCBrcmI1X2FuYW1l X3RvX2xvY2FsbmFtZShrNV9jb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBrNV90aWNrZXQtPmVuY19wYXJ0Mi0+Y2xpZW50LAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBVSURCVUZMRU4sc3pVc2VyTmFtZUF1dGhlbnRpY2F0ZWQpICkK KyAgICAgICAgICAgIHN6VXNlck5hbWVBdXRoZW50aWNhdGVkWzBdID0gJ1wwJzsKKyNlbmRpZiAv KiBIRUlNREFMICovCisKKyAgICAgICAgU2VuZEs1QXV0aFNCKEtSQl9BQ0NFUFQsIHN6VXNlck5h bWVBdXRoZW50aWNhdGVkLAorICAgICAgICAgICAgICAgICAgICAgIHN6VXNlck5hbWVBdXRoZW50 aWNhdGVkWzBdID8gLTEgOiAwKTsKKyAgICAgICAgYWNjZXB0X2NvbXBsZXRlID0gMTsKKyAgICAg ICAgY2ttYWttc2coc3RyVG1wLHNpemVvZihzdHJUbXApLAorICAgICAgICAgICAgICAgICAiS2Vy YmVyb3M1IGlkZW50aWZpZXMgaGltIGFzIGBgIiwKKyAgICAgICAgICAgICAgICAgc3pVc2VyTmFt ZUF1dGhlbnRpY2F0ZWQsIicnIixOVUxMKTsKKyAgICAgICAgcHJpbnRmKCIlc1xyXG4iLHN0clRt cCk7CisKKyAgICAgICAgaWYgKHN6VXNlck5hbWVSZXF1ZXN0ZWRbMF0gJiYKKyAgICAgICAgICAg IGtyYjVfa3VzZXJvayhrNV9jb250ZXh0LAorI2lmZGVmIEhFSU1EQUwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgazVfdGlja2V0LT5jbGllbnQsCisjZWxzZSAvKiBIRUlNREFMICovCisgICAg ICAgICAgICAgICAgICAgICAgICAgIGs1X3RpY2tldC0+ZW5jX3BhcnQyLT5jbGllbnQsCisjZW5k aWYgLyogSEVJTURBTCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICBzelVzZXJOYW1lUmVx dWVzdGVkKSkKKyAgICAgICAgICAgIGF1dGhfZmluaXNoZWQoQVVUSF9WQUxJRCk7CisgICAgICAg IGVsc2UKKyAgICAgICAgICAgIGF1dGhfZmluaXNoZWQoQVVUSF9VU0VSKTsKKworICAgICAgICBr cmI1X2F1dGhfY29uX2dldHJlbW90ZXN1YmtleShrNV9jb250ZXh0LCBhdXRoX2NvbnRleHQsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmV3a2V5KTsKKyAgICAgICAg aWYgKGs1X3Nlc3Npb25fa2V5KSB7CisgICAgICAgICAgICBrcmI1X2ZyZWVfa2V5YmxvY2soazVf Y29udGV4dCwgazVfc2Vzc2lvbl9rZXkpOworICAgICAgICAgICAgazVfc2Vzc2lvbl9rZXkgPSAw OworICAgICAgICB9CisgICAgICAgIGlmIChuZXdrZXkpIHsKKyAgICAgICAgICAgIGtyYjVfY29w eV9rZXlibG9jayhrNV9jb250ZXh0LCBuZXdrZXksICZrNV9zZXNzaW9uX2tleSk7CisgICAgICAg ICAgICBrcmI1X2ZyZWVfa2V5YmxvY2soazVfY29udGV4dCwgbmV3a2V5KTsKKyAgICAgICAgfSBl bHNlIHsKKyAgICAgICAgICAgIGtyYjVfY29weV9rZXlibG9jayhrNV9jb250ZXh0LAorI2lmZGVm IEhFSU1EQUwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJms1X3RpY2tldC0+dGlj a2V0LmtleSwKKyNlbHNlIC8qIEhFSU1EQUwgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgazVfdGlja2V0LT5lbmNfcGFydDItPnNlc3Npb24sCisjZW5kaWYgLyogSEVJTURBTCAq LworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmazVfc2Vzc2lvbl9rZXkpOworICAg ICAgICB9CisKKyNpZmRlZiBDS19FTkNSWVBUSU9OCisjaWZkZWYgSEVJTURBTAorICAgICAgICBz a2V5LnR5cGUgPSBrNV9zZXNzaW9uX2tleS0+a2V5dmFsdWUubGVuZ3RoID09IDggPyBTS19ERVMg OiBTS19HRU5FUklDOworICAgICAgICBza2V5Lmxlbmd0aCA9IGs1X3Nlc3Npb25fa2V5LT5rZXl2 YWx1ZS5sZW5ndGg7CisgICAgICAgIHNrZXkuZGF0YSA9IGs1X3Nlc3Npb25fa2V5LT5rZXl2YWx1 ZS5kYXRhOworI2Vsc2UgLyogSEVJTURBTCAqLworICAgICAgICBza2V5LnR5cGUgPSBrNV9zZXNz aW9uX2tleS0+bGVuZ3RoID09IDggPyBTS19ERVMgOiBTS19HRU5FUklDOworICAgICAgICBza2V5 Lmxlbmd0aCA9IGs1X3Nlc3Npb25fa2V5LT5sZW5ndGg7CisgICAgICAgIHNrZXkuZGF0YSA9IGs1 X3Nlc3Npb25fa2V5LT5jb250ZW50czsKKyNlbmRpZiAvKiBIRUlNREFMICovCisgICAgICAgIGVu Y3J5cHRfc2Vzc2lvbl9rZXkoJnNrZXksIEFVVEhfU0VSVkVSX1RPX0NMSUVOVCk7CisjZW5kaWYg LyogQ0tfRU5DUllQVElPTiAqLworICAgICAgICBkZWJ1ZyhGMTAwLCJrNV9hdXRoX2lzIEFVVEhf U1VDQ0VTUyIsIiIsMCk7CisgICAgICAgIGtyYjVfZXJybm8gPSByOworICAgICAgICBpZiAoIGty YjVfZXJybm8gKQorICAgICAgICAgICAgbWFrZXN0cigma3JiNV9lcnJtc2csZXJyb3JfbWVzc2Fn ZShrcmI1X2Vycm5vKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1ha2VzdHIoJmtyYjVf ZXJybXNnLHN0clRtcCk7CisgICAgICAgIHJldHVybiBBVVRIX1NVQ0NFU1M7CisKKyNpZmRlZiBG T1JXQVJECisgICAgY2FzZSBLUkI1X0ZPUldBUkQ6CisgICAgICAgIGlmICggIWZvcndhcmRfZmxh ZyApIHsKKyAgICAgICAgICAgIFNlbmRLNUF1dGhTQihLUkI1X0ZPUldBUkRfUkVKRUNULAorICAg ICAgICAgICAgICAgICAgICAgICAgICAiZm9yd2FyZGVkIGNyZWRlbnRpYWxzIGFyZSBiZWluZyBy ZWZ1c2VkLiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIC0xKTsKKyAgICAgICAgICAgIHJl dHVybihBVVRIX1NVQ0NFU1MpOworICAgICAgICB9CisKKyAgICAgICAgaW5idWYubGVuZ3RoID0g Y250OworICAgICAgICBpbmJ1Zi5kYXRhID0gKGNoYXIgKilkYXRhOworICAgICAgICBpZiAoCisj aWZuZGVmIEhFSU1EQUwKKyAgICAgICAgICAgICgha3JiNV9kX25vX2FkZHJlc3NlcyAmJgorICAg ICAgICAgICAgKHIgPSBrcmI1X2F1dGhfY29uX2dlbmFkZHJzKGs1X2NvbnRleHQsYXV0aF9jb250 ZXh0LGdfa3N0cmVhbS0+ZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBLUkI1X0FV VEhfQ09OVEVYVF9HRU5FUkFURV9SRU1PVEVfRlVMTF9BRERSKSkpIHx8CisjZW5kaWYgLyogSEVJ TURBTCAqLworICAgICAgICAgICAgKHIgPSByZF9hbmRfc3RvcmVfZm9yX2NyZWRzKGs1X2NvbnRl eHQsIGF1dGhfY29udGV4dCwmaW5idWYsCisjaWZkZWYgSEVJTURBTAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBrNV90aWNrZXQtPmNsaWVudAorI2Vsc2UgLyogSEVJ TURBTCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrNV90aWNr ZXQtPmVuY19wYXJ0Mi0+Y2xpZW50CisjZW5kaWYgLyogSEVJTURBTCAqLworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICApKSkgeworICAgICAgICAgICAgKHZvaWQpIGNr c3RybmNweShlcnJidWYsICJSZWFkIGZvcndhcmRlZCBjcmVkcyBmYWlsZWQ6ICIsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoZXJyYnVmKSk7CisgICAgICAgICAgICAodm9p ZCkgY2tzdHJuY2F0KGVycmJ1ZiwgZXJyb3JfbWVzc2FnZShyKSxzaXplb2YoZXJyYnVmKSk7Cisg ICAgICAgICAgICBTZW5kSzVBdXRoU0IoS1JCNV9GT1JXQVJEX1JFSkVDVCwgZXJyYnVmLCAtMSk7 CisgICAgICAgICAgICBwcmludGYoIkNvdWxkIG5vdCByZWFkIGZvcndhcmRlZCBjcmVkZW50aWFs c1xyXG4iKTsKKyAgICAgICAgICAgIGtyYjVfZXJybm8gPSByOworICAgICAgICAgICAgbWFrZXN0 cigma3JiNV9lcnJtc2csZXJyb3JfbWVzc2FnZShrcmI1X2Vycm5vKSk7CisgICAgICAgIH0KKyAg ICAgICAgZWxzZSB7CisgICAgICAgICAgICBTZW5kSzVBdXRoU0IoS1JCNV9GT1JXQVJEX0FDQ0VQ VCwgMCwgMCk7CisgICAgICAgICAgICBja3N0cm5jcHkoc3RyVG1wLCJGb3J3YXJkZWQgY3JlZGVu dGlhbHMgb2J0YWluZWQiLHNpemVvZihzdHJUbXApKTsKKyAgICAgICAgICAgIHByaW50ZigiJXNc clxuIixzdHJUbXApOworICAgICAgICAgICAga3JiNV9lcnJubyA9IDA7CisgICAgICAgICAgICBt YWtlc3RyKCZrcmI1X2Vycm1zZyxzdHJUbXApOworICAgICAgICB9CisgICAgICAgIC8qIEEgZmFp bHVyZSB0byBhY2NlcHQgZm9yd2FyZGVkIGNyZWRlbnRpYWxzIGlzIG5vdCBhbiAqLworICAgICAg ICAvKiBhdXRoZW50aWNhdGlvbiBmYWlsdXJlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Ki8KKyAgICAgICAgcmV0dXJuIEFVVEhfU1VDQ0VTUzsKKyNlbmRpZiAgLyogRk9SV0FSRCAqLwor ICAgIGRlZmF1bHQ6CisgICAgICAgIHByaW50ZigiVW5rbm93biBLZXJiZXJvcyBvcHRpb24gJWRc clxuIiwgZGF0YVstMV0pOworICAgICAgICBTZW5kSzVBdXRoU0IoS1JCX1JFSkVDVCwgMCwgMCk7 CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBhdXRoX2ZpbmlzaGVkKEFVVEhfUkVKRUNUKTsK KyAgICByZXR1cm4gQVVUSF9GQUlMVVJFOworCisgIGVycm91dDoKKyAgICBTZW5kSzVBdXRoU0Io S1JCX1JFSkVDVCwgZXJyYnVmLCAtMSk7CisgICAga3JiNV9lcnJubyA9IHI7CisgICAgbWFrZXN0 cigma3JiNV9lcnJtc2csZXJyYnVmKTsKKyAgICBwcmludGYoIiVzXHJcbiIsIGVycmJ1Zik7Cisg ICAgaWYgKGF1dGhfY29udGV4dCkgeworICAgICAgICBrcmI1X2F1dGhfY29uX2ZyZWUoazVfY29u dGV4dCwgYXV0aF9jb250ZXh0KTsKKyAgICAgICAgYXV0aF9jb250ZXh0ID0gMDsKKyAgICB9Cisg ICAgYXV0aF9maW5pc2hlZChBVVRIX1JFSkVDVCk7CisgICAgcmV0dXJuIEFVVEhfRkFJTFVSRTsK K30KKworI2lmZGVmIEZPUldBUkQKK2ludAorI2lmZGVmIENLX0FOU0lDCitrZXJiZXJvczVfZm9y d2FyZCh2b2lkKQorI2Vsc2UKK2tlcmJlcm9zNV9mb3J3YXJkKCkKKyNlbmRpZgoreworICAgIGty YjVfZXJyb3JfY29kZSByOworICAgIGtyYjVfY2NhY2hlIGNjYWNoZT1OVUxMOworICAgIGtyYjVf cHJpbmNpcGFsIGNsaWVudCA9IDA7CisgICAga3JiNV9wcmluY2lwYWwgc2VydmVyID0gMDsKKyAg ICBrcmI1X2RhdGEgZm9yd19jcmVkczsKKyNpZmRlZiBIRUlNREFMCisgICAga3JiNV9jcmVkcyAg ICAgIGNyZWRzOworI2VuZGlmIC8qIEhFSU1EQUwgKi8KKworICAgIGZvcndfY3JlZHMuZGF0YSA9 IDA7CisKKyAgICByID0gazVfZ2V0X2NjYWNoZShrNV9jb250ZXh0LCZjY2FjaGUsTlVMTCk7Cisg ICAgaWYgKCByICkgeworICAgICAgICBjb21fZXJyKE5VTEwsIHIsICJLZXJiZXJvcyBWNTogY291 bGQgbm90IGdldCBkZWZhdWx0IGNjYWNoZSIpOworICAgICAgICBrcmI1X2Vycm5vID0gcjsKKyAg ICAgICAgbWFrZXN0cigma3JiNV9lcnJtc2csZXJyb3JfbWVzc2FnZShrcmI1X2Vycm5vKSk7Cisg ICAgICAgIHJldHVybihBVVRIX0ZBSUxVUkUpOworICAgIH0KKworICAgIGlmICgociA9IGtyYjVf Y2NfZ2V0X3ByaW5jaXBhbChrNV9jb250ZXh0LCBjY2FjaGUsICZjbGllbnQpKSkgeworICAgICAg ICBjb21fZXJyKE5VTEwsIHIsICJLZXJiZXJvcyBWNTogY291bGQgbm90IGdldCBkZWZhdWx0IHBy aW5jaXBhbCIpOworICAgICAgICBnb3RvIGNsZWFudXA7CisgICAgfQorCisjaWZkZWYgSEVJTURB TAorICAgIG1lbXNldCgmY3JlZHMsIDAsIHNpemVvZihjcmVkcykpOworICAgIGNyZWRzLmNsaWVu dCA9IGNsaWVudDsKKworICAgIGlmIChyID0ga3JiNV9idWlsZF9wcmluY2lwYWwoazVfY29udGV4 dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNyZWRzLnNlcnZlciwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc3RybGVuKGNsaWVudC0+cmVhbG0pLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY2xpZW50LT5yZWFsbSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICJrcmJ0Z3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50LT5y ZWFsbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKSkgeworICAgICAg ICBjb21fZXJyKE5VTEwsIHIsICJLZXJiZXJvcyBWNTogY291bGQgbm90IGdldCBwcmluY2lwYWwi KTsKKyAgICAgICAgZ290byBjbGVhbnVwOworICAgIH0KKworICAgIGNyZWRzLnRpbWVzLmVuZHRp bWUgPSAwOworCisgICAgaWYgKHIgPSBrcmI1X2dldF9mb3J3YXJkZWRfY3JlZHMoazVfY29udGV4 dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0aF9jb250ZXh0LAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjY2FjaGUsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHN6SG9zdE5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICZjcmVkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZv cndfY3JlZHMpKSB7CisgICAgICAgIGNvbV9lcnIoTlVMTCwgciwgIktlcmJlcm9zIFY1OiBlcnJv ciBnZXR0aW5nIGZvcndhcmRlZCBjcmVkcyIpOworICAgICAgICBnb3RvIGNsZWFudXA7CisgICAg fQorI2Vsc2UgLyogSEVJTURBTCAqLworICAgIC8qIHdlIHNob3VsZCBub3QgbmVlZCB0byBtYWtl IHRoaXMgY2FsbCBzaW5jZSB3ZSBhcmUgc3RvcmluZyB0aGUgKi8KKyAgICAvKiBzZXJ2ZXIncyBw cmluY2lwYWwgaW4gZndkX3NlcnZlciBmcm9tIG91ciBjYWxsIHRvICAgICAgICAgICAgICovCisg ICAgLyoga3JiNV9zbmFtZV90b19wcmluY2lwYWwoKSBpbiBrNV9hdXRoX3NlbmQoKSAgICAgICAg ICAgICAgICAgICAqLworICAgIGlmIChmd2Rfc2VydmVyID09IE5VTEwpIHsKKyAgICAgICAgaWYg KChyID0ga3JiNV9zbmFtZV90b19wcmluY2lwYWwoazVfY29udGV4dCwgc3pIb3N0TmFtZSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtyYjVfZF9zcnYgPyBrcmI1X2Rfc3J2IDog S1JCNV9TRVJWSUNFX05BTUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBLUkI1X05UX1NSVl9IU1QsICZzZXJ2ZXIpKSkgeworICAgICAgICAgICAgY29tX2VycihO VUxMLCByLCAiS2VyYmVyb3MgVjU6IGNvdWxkIG5vdCBtYWtlIHNlcnZlciBwcmluY2lwYWwiKTsK KyAgICAgICAgICAgIGdvdG8gY2xlYW51cDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICgh a3JiNV9kX25vX2FkZHJlc3NlcyAmJgorICAgICAgICAociA9IGtyYjVfYXV0aF9jb25fZ2VuYWRk cnMoazVfY29udGV4dCwgYXV0aF9jb250ZXh0LCBnX2tzdHJlYW0tPmZkLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBLUkI1X0FVVEhfQ09OVEVYVF9HRU5FUkFURV9MT0NBTF9GVUxMX0FE RFIpKSkKKyAgICB7CisgICAgICAgIGNvbV9lcnIoTlVMTCwgciwgIktlcmJlcm9zIFY1OiBjb3Vs ZCBub3QgZ2VuIGxvY2FsIGZ1bGwgYWRkcmVzcyIpOworICAgICAgICBnb3RvIGNsZWFudXA7Cisg ICAgfQorCisgICAgaWYgKHIgPSBrcmI1X2Z3ZF90Z3RfY3JlZHMoazVfY29udGV4dCwgYXV0aF9j b250ZXh0LCAwLCBjbGllbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ3ZF9z ZXJ2ZXIgPyBmd2Rfc2VydmVyIDogc2VydmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjY2FjaGUsIGZvcndhcmRhYmxlX2ZsYWcsICZmb3J3X2NyZWRzKSkgeworICAgICAgICBj b21fZXJyKE5VTEwsIHIsICJLZXJiZXJvcyBWNTogZXJyb3IgZ2V0dGluZyBmb3J3YXJkYWJsZSBj cmVkZW50aWFscyIpOworICAgICAgICBnb3RvIGNsZWFudXA7CisgICAgfQorI2VuZGlmIC8qIEhF SU1EQUwgKi8KKworICAgIC8qIFNlbmQgZm9yd2FyZGVkIGNyZWRlbnRpYWxzICovCisgICAgaWYg KCFTZW5kSzVBdXRoU0IoS1JCNV9GT1JXQVJELCBmb3J3X2NyZWRzLmRhdGEsIGZvcndfY3JlZHMu bGVuZ3RoKSkgeworICAgICAgICBwcmludGYoIktlcmJlcm9zIFY1IGZvcndhcmRpbmcgZXJyb3Ih XHJcbiVzXHJcbiIsCisgICAgICAgICAgICAgICAgICAgICJOb3QgZW5vdWdoIHJvb20gZm9yIGF1 dGhlbnRpY2F0aW9uIGRhdGEiKTsKKyAgICB9CisKK2NsZWFudXA6CisgICAgaWYgKGNsaWVudCkK KyAgICAgICAga3JiNV9mcmVlX3ByaW5jaXBhbChrNV9jb250ZXh0LCBjbGllbnQpOworICAgIGlm IChzZXJ2ZXIpCisgICAgICAgIGtyYjVfZnJlZV9wcmluY2lwYWwoazVfY29udGV4dCwgc2VydmVy KTsKKyNpZmRlZiBIRUlNREFMCisgICAga3JiNV9kYXRhX2ZyZWUoJmZvcndfY3JlZHMpOworI2Vs c2UgLyogSEVJTURBTCAqLworICAgIGtyYjVfZnJlZV9kYXRhX2NvbnRlbnRzKGs1X2NvbnRleHQs JmZvcndfY3JlZHMpOworI2VuZGlmIC8qIEhFSU1EQUwgKi8KKyAgICBrcmI1X2NjX2Nsb3NlKGs1 X2NvbnRleHQsIGNjYWNoZSk7CisKKyAgICBrcmI1X2Vycm5vID0gcjsKKyAgICBtYWtlc3RyKCZr cmI1X2Vycm1zZyxrcmI1X2Vycm5vP2Vycm9yX21lc3NhZ2Uoa3JiNV9lcnJubyk6Ik9LIik7Cisg ICAgcmV0dXJuKHI/QVVUSF9GQUlMVVJFOkFVVEhfU1VDQ0VTUyk7Cit9CisjZW5kaWYgLyogRk9S V0FSRCAqLworI2Vsc2UgLyogS1JCNSAqLworaW50Citja19rcmI1X2F1dG9nZXRfVEdUKGNoYXIg KiBkdW1teSkKK3sKKyAgICByZXR1cm4oMCk7Cit9CisjaWZkZWYgQ0tfS0VSQkVST1MKK2ludAor I2lmZGVmIENLX0FOU0lDCitja19rcmI1X2luaXRUR1QoIHN0cnVjdCBrcmJfb3BfZGF0YSAqIG9w LCBzdHJ1Y3Qga3JiNV9pbml0X2RhdGEgKiBpbml0LAorICAgICAgICAgICAgICAgICBzdHJ1Y3Qg a3JiNF9pbml0X2RhdGEgKiBrNF9pbml0KQorI2Vsc2UKK2NrX2tyYjVfaW5pdFRHVChvcCxpbml0 LGs0X2luaXQpCisgICAga3JiX29wX2RhdGEgKiBvcDsgc3RydWN0IGtyYjVfaW5pdF9kYXRhICog aW5pdDsKKyAgICBzdHJ1Y3Qga3JiNF9pbml0X2RhdGEgKiBrNF9pbml0OworI2VuZGlmIC8qIENL X0FOU0lDKi8KK3sKKyAgICByZXR1cm4oLTEpOworfQorCitpbnQKKyNpZmRlZiBDS19BTlNJQwor Y2tfa3JiNV9kZXN0cm95KHN0cnVjdCBrcmJfb3BfZGF0YSAqIG9wKQorI2Vsc2UKK2NrX2tyYjVf ZGVzdHJveShvcCkgc3RydWN0IGtyYl9vcF9kYXRhICogb3A7CisjZW5kaWYKK3sKKyAgICByZXR1 cm4oLTEpOworfQorCitpbnQKKyNpZmRlZiBDS19BTlNJQworY2tfa3JiNV9saXN0X2NyZWRzKHN0 cnVjdCBrcmJfb3BfZGF0YSAqIG9wLCBzdHJ1Y3Qga3JiNV9saXN0X2NyZWRfZGF0YSAqIGxjKQor I2Vsc2UKK2NrX2tyYjVfbGlzdF9jcmVkcyhvcCxsYykKKyAgICBzdHJ1Y3Qga3JiX29wX2RhdGEg KiBvcDsgc3RydWN0IGtyYjVfbGlzdF9jcmVkX2RhdGEgKiBsYzsKKyNlbmRpZgoreworICAgIHJl dHVybigtMSk7Cit9CisjZWxzZSAvKiBDS19LRVJCRVJPUyAqLworaW50CisjaWZkZWYgQ0tfQU5T SUMKK2NrX2tyYjVfaW5pdFRHVCh2b2lkICogb3AsIHZvaWQgKiBpbml0LCB2b2lkICogazRfaW5p dCApCisjZWxzZQorY2tfa3JiNV9pbml0VEdUKG9wLGluaXQsazRfaW5pdCkKKyAgICB2b2lkICog b3A7IHZvaWQgKiBpbml0OyB2b2lkICogazRfaW5pdDsKKyNlbmRpZiAvKiBDS19BTlNJQyovCit7 CisgICAgcmV0dXJuKC0xKTsKK30KKworaW50CisjaWZkZWYgQ0tfQU5TSUMKK2NrX2tyYjVfZGVz dHJveSh2b2lkICogb3ApCisjZWxzZQorY2tfa3JiNV9kZXN0cm95KG9wKSB2b2lkICogb3A7Cisj ZW5kaWYKK3sKKyAgICByZXR1cm4oLTEpOworfQorCitpbnQKKyNpZmRlZiBDS19BTlNJQworY2tf a3JiNV9saXN0X2NyZWRzKHZvaWQgKiBvcCwgdm9pZCAqIGxjKQorI2Vsc2UKK2NrX2tyYjVfbGlz dF9jcmVkcyhvcCxsYykKKyAgICB2b2lkICogb3A7IHZvaWQgKiBsYzsKKyNlbmRpZgoreworICAg IHJldHVybigtMSk7Cit9CisjZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KKyNlbmRpZiAvKiBLUkI1 ICovCisKKyNpZmRlZiBHU1NBUElfS1JCNQorLyoKKyAqCisgKiBnc3NrNV9hdXRoX3NlbmQgLSBn ZXRzIGF1dGhlbnRpY2F0aW9uIGJpdHMgd2UgbmVlZCB0byBzZW5kIHRvIEtEQy4KKyAqCisgKiBS ZXN1bHQgaXMgbGVmdCBpbiBrNV9hdXRoCisgKgorICogUmV0dXJuczogMCBvbiBmYWlsdXJlLCAx IG9uIHN1Y2Nlc3MKKyAqCisgKi8KKworc3RhdGljIGludAorI2lmZGVmIENLX0FOU0lDCitnc3Nr NV9hdXRoX3NlbmQoaW50IGhvdywgaW50IGVuY3J5cHQsIGludCBmb3J3YXJkKQorI2Vsc2UKK2dz c2s1X2F1dGhfc2VuZChob3csZW5jcnlwdCxmb3J3YXJkKSBpbnQgaG93OyBpbnQgZW5jcnlwdDsg aW50IGZvcndhcmQ7CisjZW5kaWYKK3sKKyAgICBPTV91aW50MzIgbWFqX3N0YXQsIG1pbl9zdGF0 OworI2lmZGVmIEtSQjUKKyAgICBjaGFyICogcmVhbG0gPSBOVUxMOworICAgIGNoYXIgdGd0WzI1 Nl07CisjZW5kaWYgLyogS1JCNSAqLworCisgICAgZ3NzX2NoYW4uaW5pdGlhdG9yX2FkZHJ0eXBl ID0gR1NTX0NfQUZfSU5FVDsgLyogT01fdWludDMyICAqLworICAgIGdzc19jaGFuLmluaXRpYXRv cl9hZGRyZXNzLmxlbmd0aCA9IDQ7CisgICAgZ3NzX2NoYW4uaW5pdGlhdG9yX2FkZHJlc3MudmFs dWUgPSAmbXljdGxhZGRyLnNpbl9hZGRyLnNfYWRkcjsKKyAgICBnc3NfY2hhbi5hY2NlcHRvcl9h ZGRydHlwZSA9IEdTU19DX0FGX0lORVQ7IC8qIE9NX3VpbnQzMiAqLworICAgIGdzc19jaGFuLmFj Y2VwdG9yX2FkZHJlc3MubGVuZ3RoID0gNDsKKyAgICBnc3NfY2hhbi5hY2NlcHRvcl9hZGRyZXNz LnZhbHVlID0gJmhpc2N0bGFkZHIuc2luX2FkZHIuc19hZGRyOworICAgIGdzc19jaGFuLmFwcGxp Y2F0aW9uX2RhdGEubGVuZ3RoID0gMDsKKyAgICBnc3NfY2hhbi5hcHBsaWNhdGlvbl9kYXRhLnZh bHVlID0gMDsKKworI2lmZGVmIEtSQjUKKyAgICByZWFsbSA9IGNrX2tyYjVfcmVhbG1vZmhvc3Qo ZnRwX2hvc3QpOworICAgIGlmIChyZWFsbSkgeworICAgICAgICBja21ha21zZyh0Z3Qsc2l6ZW9m KHRndCksImtyYnRndC8iLHJlYWxtLCJAIixyZWFsbSk7CisgICAgICAgIGRlYnVnKEYxMTAsImZ0 cF9hdXRoKEdTU0FQSSkgVEdUIix0Z3QsMCk7CisgICAgICAgIGlmICgga3JiNV9hdXRvZ2V0ICYm CisgICAgICAgICAgICAgISgoY2tfa3JiNV90a3RfaXN2YWxpZChOVUxMLHRndCkgPiAwKSB8fAor ICAgICAgICAgICAgICAgIChja19rcmI1X2lzX3RndF92YWxpZCgpID4gMCkpICkKKyAgICAgICAg ICAgIGNrX2tyYjVfYXV0b2dldF9UR1QocmVhbG0pOworICAgIH0KKyNlbmRpZiAvKiBLUkI1ICov CisKKyAgICAvKiBCbG9iIGZyb20gZ3NzLWNsaWVudCAqLworICAgIC8qIGhvc3RAaG9zdG5hbWUg Ki8KKyAgICAvKiB0aGUgVjUgR1NTQVBJIGJpbmRpbmcgY2Fub25pY2FsaXplcyB0aGlzIGZvciB1 cy4uLiAqLworICAgIGNrbWFrbXNnKGdzc19zdGJ1ZixHU1NfQlVGU0laLAorICAgICAgICAgICAg IGtyYjVfZF9zcnYgPyBrcmI1X2Rfc3J2IDogS1JCNV9TRVJWSUNFX05BTUUsCisgICAgICAgICAg ICAgIkAiLAorICAgICAgICAgICAgIHN6SG9zdE5hbWUsCisgICAgICAgICAgICAgIE5VTEwKKyAg ICAgICAgICAgICAgKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkF1dGhlbnRpY2F0aW5nIHRvIDwl cz4uLi5cbiIsIGdzc19zdGJ1Zik7CisgICAgZ3NzX3NlbmRfdG9rLnZhbHVlID0gZ3NzX3N0YnVm OworICAgIGdzc19zZW5kX3Rvay5sZW5ndGggPSBzdHJsZW4oZ3NzX3N0YnVmKTsKKyAgICBtYWpf c3RhdCA9IGdzc19pbXBvcnRfbmFtZSgmbWluX3N0YXQsICZnc3Nfc2VuZF90b2ssCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGdzc19udF9zZXJ2aWNlX25hbWUsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICZnc3NfdGFyZ2V0X25hbWUKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKTsKKyAgICBpZiAobWFqX3N0YXQgIT0gR1NTX1NfQ09NUExFVEUpIHsK KyAgICAgICAgdXNlcl9nc3NfZXJyb3IobWFqX3N0YXQsIG1pbl9zdGF0LCAicGFyc2luZyBuYW1l Iik7CisgICAgICAgIHNlY3VyZV9lcnJvcigibmFtZSBwYXJzZWQgPCVzPlxuIiwgZ3NzX3N0YnVm KTsKKyAgICAgICAgcmV0dXJuKDApOworICAgIH0KKyAgICB0b2tlbl9wdHIgPSBHU1NfQ19OT19C VUZGRVI7CisgICAgZ2NvbnRleHQgPSBHU1NfQ19OT19DT05URVhUOyAvKiBzdHJ1Y3R1cmUgY29w eSAqLworCisgICAgZnByaW50ZihzdGRlcnIsICJjYWxsaW5nIGdzc19pbml0X3NlY19jb250ZXh0 XG4iKTsKKyAgICBtYWpfc3RhdCA9CisgICAgICAgIGdzc19pbml0X3NlY19jb250ZXh0KCZtaW5f c3RhdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdTU19DX05PX0NSRURFTlRJQUws CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZ2NvbnRleHQsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBnc3NfdGFyZ2V0X25hbWUsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBnc3NfbWVjaF9rcmI1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1NT X0NfTVVUVUFMX0ZMQUcgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1NTX0NfUkVQ TEFZX0ZMQUcgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChmb3J3YXJkICYmIGZv cndhcmRfZmxhZykgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHU1NfQ19ERUxF R19GTEFHIDogMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKGtyYjVfZF9ub19hZGRyZXNzZXMgPyAvKiBjaGFubmVsIGJp bmRpbmdzICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdTU19DX05PX0NIQU5O RUxfQklORElOR1MgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZ3NzX2NoYW4p LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3NzX3Rva2VuX3B0ciwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIE5VTEwsICAgICAvKiBpZ25vcmUgbWVjaCB0eXBlICovCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZ3NzX3NlbmRfdG9rLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgTlVMTCwgICAgIC8qIGlnbm9yZSByZXRfZmxhZ3MgKi8KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICk7ICAgICAgICAvKiBpZ25vcmUgdGltZV9yZWMgKi8KKworCisgICAgICAgIGlmIChtYWpf c3RhdCAhPSBHU1NfU19DT01QTEVURSAmJgorICAgICAgICAgICAgIG1hal9zdGF0ICE9IEdTU19T X0NPTlRJTlVFX05FRURFRCkgeworICAgICAgICAgICAgdXNlcl9nc3NfZXJyb3IobWFqX3N0YXQs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluX3N0YXQsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgImluaXRpYWxpemluZyBjb250ZXh0IgorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICk7CisgICAgICAgICAgICBnc3NfcmVsZWFzZV9uYW1lKCZtaW5fc3RhdCwgJmdzc190 YXJnZXRfbmFtZSk7CisgICAgICAgICAgICByZXR1cm4oMCk7CisgICAgICAgIH0KKyAgICAgICAg cmV0dXJuKDEpOworfQorCisvKgorICogZ3NzazVfYXV0aF9yZXBseSAtLSBjaGVja3MgdGhlIHJl cGx5IGZvciBtdXR1YWwgYXV0aGVudGljYXRpb24uCisgKi8KK3N0YXRpYyBpbnQKKyNpZmRlZiBD S19BTlNJQworZ3NzazVfYXV0aF9yZXBseShpbnQgaG93LCB1bnNpZ25lZCBjaGFyICpkYXRhLCBp bnQgY250KQorI2Vsc2UKK2dzc2s1X2F1dGhfcmVwbHkoaG93LGRhdGEsY250KSBpbnQgaG93OyB1 bnNpZ25lZCBjaGFyICpkYXRhOyBpbnQgY250OworI2VuZGlmCit7CisgICAgZGF0YSArPSA0OyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQb2ludCB0byBzdGF0dXMgYnl0ZSAq LworICAgIGNudCAtPTU7CisKKyAgICBzd2l0Y2ggKCpkYXRhKyspIHsKKyAgICBjYXNlIEdTU19S RUpFQ1Q6CisgICAgICAgIGlmIChjbnQgPiAwKSB7CisgICAgICAgICAgICBjaGFyICpzOworICAg ICAgICAgICAgaW50IGxlbjsKKyAgICAgICAgICAgIGNrc3RybmNweShzdHJUbXAsIkdTU0FQSSBy ZWZ1c2VzIGF1dGhlbnRpY2F0aW9uIGJlY2F1c2VcclxuIiwKKyAgICAgICAgICAgICAgICAgICAg ICBzaXplb2Yoc3RyVG1wKSk7CisgICAgICAgICAgICBsZW4gPSBzdHJsZW4oc3RyVG1wKTsKKyAg ICAgICAgICAgIGlmICggbGVuICsgY250IDwgc2l6ZW9mKHN0clRtcCkgKSB7CisgICAgICAgICAg ICAgICAgcyA9IHN0clRtcCArIHN0cmxlbihzdHJUbXApOworICAgICAgICAgICAgICAgIG1lbWNw eShzLCBkYXRhLCBjbnQpOyAgICAgICAgICAgLyogc2FmZSAqLworICAgICAgICAgICAgICAgIHNb Y250XSA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgY2tz dHJuY3B5KHN0clRtcCwiR1NTQVBJIHJlZnVzZXMgYXV0aGVudGljYXRpb24iLAorICAgICAgICAg ICAgICAgICAgICAgIHNpemVvZihzdHJUbXApKTsKKyAgICAgICAgcHJpbnRmKCJHU1NBUEkgYXV0 aGVudGljYXRpb24gZmFpbGVkIVxyXG4lc1xyXG4iLHN0clRtcCk7CisgICAgICAgIGF1dGhfZmlu aXNoZWQoQVVUSF9SRUpFQ1QpOworICAgICAgICByZXR1cm4gQVVUSF9GQUlMVVJFOworCisgICAg Y2FzZSBHU1NfQUNDRVBUOgorICAgICAgICBpZiAoIGNudCA+IDAgKSB7CisgICAgICAgICAgICBj aGFyICpzOworICAgICAgICAgICAgaW50IGxlbjsKKyAgICAgICAgICAgIGNrc3RybmNweShzdHJU bXAsIkdTU0FQSSBhY2NlcHRzIHlvdSBhcyAiLHNpemVvZihzdHJUbXApKTsKKyAgICAgICAgICAg IGxlbiA9IHN0cmxlbihzdHJUbXApOworICAgICAgICAgICAgaWYgKCBsZW4gKyBjbnQgPCBzaXpl b2Yoc3RyVG1wKSApIHsKKyAgICAgICAgICAgICAgICBzID0gc3RyVG1wICsgc3RybGVuKHN0clRt cCk7CisgICAgICAgICAgICAgICAgbWVtY3B5KHMsZGF0YSxjbnQpOworICAgICAgICAgICAgICAg IHNbY250XSA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYWNjZXB0X2Nv bXBsZXRlID0gMTsKKyAgICAgICAgcHJpbnRmKCIlc1xyXG4iLHN0clRtcCk7CisgICAgICAgIGF1 dGhfZmluaXNoZWQoQVVUSF9VU0VSKTsKKyAgICAgICAgcmV0dXJuIEFVVEhfU1VDQ0VTUzsKKwor ICAgIGNhc2UgR1NTX1JFU1BPTlNFOgorICAgICAgICBnc3NfdG9rZW5fcHRyID0gJmdzc19yZWN2 X3RvazsKKyAgICAgICAgZ3NzX3JlY3ZfdG9rLnZhbHVlID0gZGF0YTsKKyAgICAgICAgZ3NzX3Jl Y3ZfdG9rLmxlbmd0aCA9IGNudDsKKworICAgICAgICBtYWpfc3RhdCA9CisgICAgICAgICAgICBn c3NfaW5pdF9zZWNfY29udGV4dCgmbWluX3N0YXQsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgR1NTX0NfTk9fQ1JFREVOVElBTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAmZ2NvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3Nz X3RhcmdldF9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzc19rcmI1 X21lY2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1NTX0NfTVVUVUFMX0ZM QUcgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdTU19DX1JFUExBWV9GTEFH IHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZm9yd2FyZF9mbGFnID8KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdTU19DX0RFTEVHX0ZMQUcgOiAwKSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChrcmI1X2Rfbm9fYWRkcmVzc2VzID8gLyogY2hhbm5lbCBiaW5kaW5n cyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1NTX0NfTk9fQ0hBTk5F TF9CSU5ESU5HUyA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZ3NzX2No YW4pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzc190b2tlbl9wdHIsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgLyogaWdub3JlIG1lY2ggdHlw ZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZnc3Nfc2VuZF90b2ssCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgLyogaWdub3JlIHJldF9mbGFn cyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICApOyAgICAvKiBpZ25vcmUgdGltZV9yZWMgKi8KKworICAg ICAgICBpZiAoIG1hal9zdGF0ID09IEdTU19TX0NPTVBMRVRFICkKKyAgICAgICAgeworCisgICAg ICAgIH0gZWxzZSBpZiAoIG1hal9zdGF0ID09IENTU19TX0NPTlRJTlVFX05FRURFRCApIHsKKyAg ICAgICAgfSBlbHNlIHsKKyAgICAgICAgfQorCisgICAgICAgIGNrc3RybmNweShzdHJUbXAsIlJl bW90ZSBtYWNoaW5lIGhhcyBiZWVuIG11dHVhbGx5IGF1dGhlbnRpY2F0ZWQiLAorICAgICAgICAg ICAgICAgICAgc2l6ZW9mKHN0clRtcCkpOworICAgICAgICBwcmludGYoIiVzXHJcbiIsc3RyVG1w KTsKKyAgICAgICAgYXV0aF9maW5pc2hlZChBVVRIX1VTRVIpOworICAgICAgICByZXR1cm4gQVVU SF9TVUNDRVNTOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgYXV0aF9maW5pc2hlZChBVVRIX1JF SkVDVCk7CisgICAgICAgIHJldHVybiBBVVRIX0ZBSUxVUkU7ICAgICAgICAgICAgICAgICAgICAg ICAgLyogVW5rbm93biByZXBseSB0eXBlICovCisgICAgfQorfQorCisvKgorICoKKyAqIGdzc2s1 X2F1dGhfaXMuCisgKgorICovCisKK3N0YXRpYyBpbnQKKyNpZmRlZiBDS19BTlNJQworazVfYXV0 aF9pcyhpbnQgaG93LCB1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgY250KQorI2Vsc2UKK2s1X2F1 dGhfaXMoaG93LGRhdGEsY250KSBpbnQgaG93OyB1bnNpZ25lZCBjaGFyICpkYXRhOyBpbnQgY250 OworI2VuZGlmCit7CisgICAgaW50IHJlcGxpZWQgPSAwOworICAgIGdzc19jcmVkX2lkX3Qgc2Vy dmVyX2NyZWRzLCBkZWxlZ19jcmVkczsKKyAgICBnc3NfbmFtZV90IGNsaWVudDsKKyAgICBpbnQg cmV0X2ZsYWdzOworICAgIGdzc19idWZmZXJfZGVzYyBuYW1lX2J1ZjsKKyAgICBnc3NfbmFtZV90 IHNlcnZlcl9uYW1lOworICAgIE9NX3VpbnQzMiBhY3F1aXJlX21haiwKKyAgICAgIGFjcXVpcmVf bWluLAorICAgICAgYWNjZXB0X21haiwKKyAgICAgIGFjY2VwdF9taW4sCisgICAgICBzdGF0X21h aiwKKyAgICAgIHN0YXRfbWluOworICAgIGdzc19PSUQgbWVjaGlkOworICAgIGdzc19idWZmZXJf ZGVzYyB0b2ssIG91dF90b2s7CisgICAgY2hhciBnYnVmW0dTU19CVUZTSVpdOworICAgIHVfY2hh ciBnb3V0X2J1ZltHU1NfQlVGU0laXTsKKyAgICBjaGFyIGxvY2FsbmFtZVtNQVhIT1NUTkFNRUxF Tl07CisgICAgY2hhciBzZXJ2aWNlX25hbWVbTUFYSE9TVE5BTUVMRU4rMTBdOworICAgIGNoYXIg KipzZXJ2aWNlOworICAgIHN0cnVjdCBob3N0ZW50ICpocDsKKworICAgIGRhdGEgKz0gNDsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUG9pbnQgdG8gc3RhdHVzIGJ5dGUgKi8K KyAgICBjbnQgLT0gNDsKKworICAgIGNraGV4ZHVtcCgiZ3NzazVfYXV0aF9pcyBkYXRhIixkYXRh LGNudCk7CisgICAgZGVidWcoRjExMSwiZ3NzazVfYXV0aF9pcyIsImhvdyIsaG93KTsKKworICAg IGlmIChjbnQtLSA8IDEpIHsKKyAgICAgICAgYXV0aF9maW5pc2hlZChBVVRIX1JFSkVDVCk7Cisg ICAgICAgIHJldHVybiBBVVRIX0ZBSUxVUkU7CisgICAgfQorICAgIHN3aXRjaCAoKmRhdGErKykg eworICAgIGNhc2UgR1NTX0FVVEg6CisgICAgICAgIGdzc19jaGFuLmluaXRpYXRvcl9hZGRydHlw ZSA9IEdTU19DX0FGX0lORVQ7CisgICAgICAgIGdzc19jaGFuLmluaXRpYXRvcl9hZGRyZXNzLmxl bmd0aCA9IDQ7CisgICAgICAgIGdzc19jaGFuLmluaXRpYXRvcl9hZGRyZXNzLnZhbHVlID0gJmhp c19hZGRyLnNpbl9hZGRyLnNfYWRkcjsKKyAgICAgICAgZ3NzX2NoYW4uYWNjZXB0b3JfYWRkcnR5 cGUgPSBHU1NfQ19BRl9JTkVUOworICAgICAgICBnc3NfY2hhbi5hY2NlcHRvcl9hZGRyZXNzLmxl bmd0aCA9IDQ7CisgICAgICAgIGdzc19jaGFuLmFjY2VwdG9yX2FkZHJlc3MudmFsdWUgPSAmY3Ry bF9hZGRyLnNpbl9hZGRyLnNfYWRkcjsKKyAgICAgICAgZ3NzX2NoYW4uYXBwbGljYXRpb25fZGF0 YS5sZW5ndGggPSAwOworICAgICAgICBnc3NfY2hhbi5hcHBsaWNhdGlvbl9kYXRhLnZhbHVlID0g MDsKKworICAgICAgICB0b2sudmFsdWUgPSBkYXRhOworICAgICAgICB0b2subGVuZ3RoID0gY250 OworCisgICAgICAgIGlmIChnZXRob3N0bmFtZShsb2NhbG5hbWUsIE1BWEhPU1ROQU1FTEVOKSkg eworICAgICAgICAgICAgYXV0aF9maW5pc2hlZChBVVRIX1JFSkVDVCk7CisgICAgICAgICAgICBy ZXR1cm4gQVVUSF9GQUlMVVJFOworICAgICAgICB9CisgICAgICAgIGlmICghKGhwID0gZ2V0aG9z dGJ5bmFtZShsb2NhbG5hbWUpKSkgeworICAgICAgICAgICAgYXV0aF9maW5pc2hlZChBVVRIX1JF SkVDVCk7CisgICAgICAgICAgICByZXR1cm4gQVVUSF9GQUlMVVJFOworICAgICAgICB9CisjaWZk ZWYgSEFERFJMSVNUCisgICAgICAgIGhwID0gY2tfY29weWhvc3RlbnQoaHApOworI2VuZGlmIC8q IEhBRERSTElTVCAqLworICAgICAgICBzdHJuY3B5KGxvY2FsbmFtZSwgaHAtPmhfbmFtZSwgc2l6 ZW9mKGxvY2FsbmFtZSkgLSAxKTsKKyAgICAgICAgbG9jYWxuYW1lW3NpemVvZihsb2NhbG5hbWUp IC0gMV0gPSAnXDAnOworCisgICAgICAgIHNwcmludGYoc2VydmljZV9uYW1lLCAiJXNAJXMiLCAq c2VydmljZSwgbG9jYWxuYW1lKTsKKyAgICAgICAgbmFtZV9idWYudmFsdWUgPSBzZXJ2aWNlX25h bWU7CisgICAgICAgIG5hbWVfYnVmLmxlbmd0aCA9IHN0cmxlbihuYW1lX2J1Zi52YWx1ZSkgKyAx OworICAgICAgICBzdGF0X21haiA9IGdzc19pbXBvcnRfbmFtZSgmc3RhdF9taW4sICZuYW1lX2J1 ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzc19udF9zZXJ2aWNlX25h bWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2VydmVyX25hbWUpOwor ICAgICAgICBpZiAoc3RhdF9tYWogIT0gR1NTX1NfQ09NUExFVEUpIHsKKyAgICAgICAgICAgIGF1 dGhfZmluaXNoZWQoQVVUSF9SRUpFQ1QpOworICAgICAgICAgICAgcmV0dXJuIEFVVEhfRkFJTFVS RTsKKyAgICAgICAgfQorCisgICAgICAgIGFjcXVpcmVfbWFqID0gZ3NzX2FjcXVpcmVfY3JlZCgm YWNxdWlyZV9taW4sIHNlcnZlcl9uYW1lLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEdTU19DX05VTExfT0lEX1NFVCwgR1NTX0NfQUNDRVBULAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzZXJ2ZXJfY3JlZHMsIE5VTEwsIE5VTEwp OworICAgICAgICAodm9pZCkgZ3NzX3JlbGVhc2VfbmFtZSgmc3RhdF9taW4sICZzZXJ2ZXJfbmFt ZSk7CisKKyAgICAgICAgaWYgKGFjcXVpcmVfbWFqICE9IEdTU19TX0NPTVBMRVRFKSB7CisgICAg ICAgICAgICByZXBseV9nc3NfZXJyb3IoNTM1LCBhY2NlcHRfbWFqLCBhY2NlcHRfbWluLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFjY2VwdGluZyBjb250ZXh0Iik7CisgICAg ICAgICAgICBzeXNsb2coTE9HX0VSUiwgImZhaWxlZCBhY2NlcHRpbmcgY29udGV4dCIpOworICAg ICAgICAgICAgKHZvaWQpIGdzc19yZWxlYXNlX2NyZWQoJnN0YXRfbWluLCAmc2VydmVyX2NyZWRz KTsKKyAgICAgICAgICAgIGlmIChyZXRfZmxhZ3MgJiBHU1NfQ19ERUxFR19GTEFHKQorICAgICAg ICAgICAgICAgICh2b2lkKSBnc3NfcmVsZWFzZV9jcmVkKCZzdGF0X21pbiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRlbGVnX2NyZWRzKTsKKyAgICAgICAgICAg IHJldHVybiAwOworICAgICAgICB9CisKKyAgICAgICAgZ2NvbnRleHQgPSBHU1NfQ19OT19DT05U RVhUOworICAgICAgICBhY2NlcHRfbWFqID0gZ3NzX2FjY2VwdF9zZWNfY29udGV4dCgmYWNjZXB0 X21pbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmdjb250 ZXh0LCAvKiBjb250ZXh0X2hhbmRsZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiB2ZXJpZmllcl9jcmVkX2hhbmRsZSAqLworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfY3JlZHMsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0b2ssIC8qIGlucHV0X3Rva2VuICovCisJ CQkJCSAgICAoa3JiNV9kX25vX2FkZHJlc3NlcyA/CisJCQkJCSAgICAgLyogY2hhbm5lbCBiaW5k aW5ncyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH U1NfQ19OT19DSEFOTkVMX0JJTkRJTkdTIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJmdzc19jaGFuKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICZjbGllbnQsIC8qIHNyY19uYW1lICovCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtZWNoaWQsIC8qIG1lY2hfdHlwZSAqLwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb3V0X3RvaywgLyog b3V0cHV0X3Rva2VuICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICZyZXRfZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIE5VTEwsICAgICAgIC8qIGlnbm9yZSB0aW1lX3JlYyAqLworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmb3J3YXJkZWQgY3JlZGVudGlhbHMgKi8KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRlbGVnX2NyZWRzCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisKKyAgICAgICAg aWYgKGFjY2VwdF9tYWohPUdTU19TX0NPTVBMRVRFICYmIGFjY2VwdF9tYWohPUdTU19TX0NPTlRJ TlVFX05FRURFRCkgeworICAgICAgICAgICAgcmVwbHlfZ3NzX2Vycm9yKDUzNSwgYWNjZXB0X21h aiwgYWNjZXB0X21pbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFjY2VwdGluZyBj b250ZXh0Iik7CisgICAgICAgICAgICBzeXNsb2coTE9HX0VSUiwgImZhaWxlZCBhY2NlcHRpbmcg Y29udGV4dCIpOworICAgICAgICAgICAgKHZvaWQpIGdzc19yZWxlYXNlX2NyZWQoJnN0YXRfbWlu LCAmc2VydmVyX2NyZWRzKTsKKyAgICAgICAgICAgIGlmIChyZXRfZmxhZ3MgJiBHU1NfQ19ERUxF R19GTEFHKQorICAgICAgICAgICAgICAgICh2b2lkKSBnc3NfcmVsZWFzZV9jcmVkKCZzdGF0X21p biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRlbGVnX2NyZWRz KTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG91dF90 b2subGVuZ3RoKSB7CisgICAgICAgICAgICBpZiAoa2Vycm9yID0gcmFkaXhfZW5jb2RlKG91dF90 b2sudmFsdWUsZ2J1Ziwmb3V0X3Rvay5sZW5ndGgsIDApKSB7CisgICAgICAgICAgICAgICAgc2Vj dXJlX2Vycm9yKCJDb3VsZG4ndCBlbmNvZGUgQURBVCByZXBseSAoJXMpIiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcmFkaXhfZXJyb3Ioa2Vycm9yKSk7CisgICAgICAgICAgICAgICAg c3lzbG9nKExPR19FUlIsICJjb3VsZG4ndCBlbmNvZGUgQURBVCByZXBseSIpOworICAgICAgICAg ICAgICAgICh2b2lkKSBnc3NfcmVsZWFzZV9jcmVkKCZzdGF0X21pbiwgJnNlcnZlcl9jcmVkcyk7 CisgICAgICAgICAgICAgICAgaWYgKHJldF9mbGFncyAmIEdTU19DX0RFTEVHX0ZMQUcpCisgICAg ICAgICAgICAgICAgICAgICAgICAodm9pZCkgZ3NzX3JlbGVhc2VfY3JlZCgmc3RhdF9taW4sCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZGVsZWdfY3Jl ZHMpOworICAgICAgICAgICAgICAgIHJldHVybigwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIGlmIChzdGF0X21haiA9PSBHU1NfU19DT01QTEVURSkgeworICAgICAgICAgICAgICAgIHJl cGx5KDIzNSwgIkFEQVQ9JXMiLCBnYnVmKTsKKyAgICAgICAgICAgICAgICByZXBsaWVkID0gMTsK KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLyogSWYgdGhlIHNlcnZlciBh Y2NlcHRzIHRoZSBzZWN1cml0eSBkYXRhLCBhbmQKKyAgICAgICAgICAgICAgICAgICByZXF1aXJl cyBhZGRpdGlvbmFsIGRhdGEsIGl0IHNob3VsZCByZXNwb25kCisgICAgICAgICAgICAgICAgICAg d2l0aCByZXBseSBjb2RlIDMzNS4gKi8KKyAgICAgICAgICAgICAgICByZXBseSgzMzUsICJBREFU PSVzIiwgZ2J1Zik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAodm9pZCkgZ3NzX3JlbGVh c2VfYnVmZmVyKCZzdGF0X21pbiwgJm91dF90b2spOworICAgICAgICB9CisKKyAgICAgICAgaWYg KHN0YXRfbWFqID09IEdTU19TX0NPTVBMRVRFKSB7CisgICAgICAgICAgICAvKiBHU1NBUEkgYXV0 aGVudGljYXRpb24gc3VjY2VlZGVkICovCisgICAgICAgICAgICBzdGF0X21haiA9IGdzc19kaXNw bGF5X25hbWUoJnN0YXRfbWluLCBjbGllbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICZjbGllbnRfbmFtZSwgJm1lY2hpZCk7CisgICAgICAgICAgICBpZiAoc3Rh dF9tYWogIT0gR1NTX1NfQ09NUExFVEUpIHsKKyAgICAgICAgICAgICAgICAvKiAiSWYgdGhlIHNl cnZlciByZWplY3RzIHRoZSBzZWN1cml0eSBkYXRhIChpZgorICAgICAgICAgICAgICAgICAgIGEg Y2hlY2tzdW0gZmFpbHMsIGZvciBpbnN0YW5jZSksIGl0IHNob3VsZAorICAgICAgICAgICAgICAg ICAgIHJlc3BvbmQgd2l0aCByZXBseSBjb2RlIDUzNS4iICovCisgICAgICAgICAgICAgICAgcmVw bHlfZ3NzX2Vycm9yKDUzNSwgc3RhdF9tYWosIHN0YXRfbWluLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAiZXh0cmFjdGluZyBHU1NBUEkgaWRlbnRpdHkgbmFtZSIpOworICAgICAg ICAgICAgICAgIHN5c2xvZyhMT0dfRVJSLCAiZ3NzYXBpIGVycm9yIGV4dHJhY3RpbmcgaWRlbnRp dHkiKTsKKyAgICAgICAgICAgICAgICAodm9pZCkgZ3NzX3JlbGVhc2VfY3JlZCgmc3RhdF9taW4s ICZzZXJ2ZXJfY3JlZHMpOworICAgICAgICAgICAgICAgIGlmIChyZXRfZmxhZ3MgJiBHU1NfQ19E RUxFR19GTEFHKQorICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQpIGdzc19yZWxlYXNlX2Ny ZWQoJnN0YXRfbWluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJmRlbGVnX2NyZWRzKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgICAgIGF1dGhfdHlwZSA9IHRlbXBfYXV0aF90eXBlOworICAgICAgICAg ICAgdGVtcF9hdXRoX3R5cGUgPSBOVUxMOworCisgICAgICAgICAgICAodm9pZCkgZ3NzX3JlbGVh c2VfY3JlZCgmc3RhdF9taW4sICZzZXJ2ZXJfY3JlZHMpOworICAgICAgICAgICAgaWYgKHJldF9m bGFncyAmIEdTU19DX0RFTEVHX0ZMQUcpIHsKKyAgICAgICAgICAgICAgICBpZiAod2FudF9jcmVk cykKKyAgICAgICAgICAgICAgICAgICAgZnRwZF9nc3NfY29udmVydF9jcmVkcyhjbGllbnRfbmFt ZS52YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVs ZWdfY3JlZHMpOworICAgICAgICAgICAgICAgICh2b2lkKSBnc3NfcmVsZWFzZV9jcmVkKCZzdGF0 X21pbiwgJmRlbGVnX2NyZWRzKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogSWYg dGhlIHNlcnZlciBhY2NlcHRzIHRoZSBzZWN1cml0eSBkYXRhLCBidXQgZG9lcworICAgICAgICAg ICAgICAgbm90IHJlcXVpcmUgYW55IGFkZGl0aW9uYWwgZGF0YSAoaS5lLiwgdGhlIHNlY3VyaXR5 CisgICAgICAgICAgICAgICBkYXRhIGV4Y2hhbmdlIGhhcyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5 KSwgaXQgbXVzdAorICAgICAgICAgICAgICAgcmVzcG9uZCB3aXRoIHJlcGx5IGNvZGUgMjM1LiAq LworICAgICAgICAgICAgaWYgKCFyZXBsaWVkKQorICAgICAgICAgICAgeworICAgICAgICAgICAg ICAgIGlmIChyZXRfZmxhZ3MgJiBHU1NfQ19ERUxFR19GTEFHICYmICFoYXZlX2NyZWRzKQorICAg ICAgICAgICAgICAgICAgcmVwbHkoMjM1LAorICJHU1NBUEkgQXV0aGVudGljYXRpb24gc3VjY2Vl ZGVkLCBidXQgY291bGQgbm90IGFjY2VwdCBmb3J3YXJkZWQgY3JlZGVudGlhbHMiCisgICAgICAg ICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg ICAgIHJlcGx5KDIzNSwgIkdTU0FQSSBBdXRoZW50aWNhdGlvbiBzdWNjZWVkZWQiKTsKKyAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybigxKTsKKyAgICAgICAgfSBlbHNlIGlmIChzdGF0 X21haiA9PSBHU1NfU19DT05USU5VRV9ORUVERUQpIHsKKyAgICAgICAgICAgIC8qIElmIHRoZSBz ZXJ2ZXIgYWNjZXB0cyB0aGUgc2VjdXJpdHkgZGF0YSwgYW5kCisgICAgICAgICAgICByZXF1aXJl cyBhZGRpdGlvbmFsIGRhdGEsIGl0IHNob3VsZCByZXNwb25kIHdpdGgKKyAgICAgICAgICAgIHJl cGx5IGNvZGUgMzM1LiAqLworICAgICAgICAgICAgcmVwbHkoMzM1LCAibW9yZSBkYXRhIG5lZWRl ZCIpOworICAgICAgICAgICAgKHZvaWQpIGdzc19yZWxlYXNlX2NyZWQoJnN0YXRfbWluLCAmc2Vy dmVyX2NyZWRzKTsKKyAgICAgICAgICAgIGlmIChyZXRfZmxhZ3MgJiBHU1NfQ19ERUxFR19GTEFH KQorICAgICAgICAgICAgICAgICh2b2lkKSBnc3NfcmVsZWFzZV9jcmVkKCZzdGF0X21pbiwgJmRl bGVnX2NyZWRzKTsKKyAgICAgICAgICAgIHJldHVybigwKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg ICAgICAgICAgIC8qICJJZiB0aGUgc2VydmVyIHJlamVjdHMgdGhlIHNlY3VyaXR5IGRhdGEgKGlm CisgICAgICAgICAgICBhIGNoZWNrc3VtIGZhaWxzLCBmb3IgaW5zdGFuY2UpLCBpdCBzaG91bGQK KyAgICAgICAgICAgIHJlc3BvbmQgd2l0aCByZXBseSBjb2RlIDUzNS4iICovCisgICAgICAgICAg ICByZXBseV9nc3NfZXJyb3IoNTM1LCBzdGF0X21haiwgc3RhdF9taW4sCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICJHU1NBUEkgZmFpbGVkIHByb2Nlc3NpbmcgQURBVCIpOworICAgICAg ICAgICAgc3lzbG9nKExPR19FUlIsICJHU1NBUEkgZmFpbGVkIHByb2Nlc3NpbmcgQURBVCIpOwor ICAgICAgICAgICAgKHZvaWQpIGdzc19yZWxlYXNlX2NyZWQoJnN0YXRfbWluLCAmc2VydmVyX2Ny ZWRzKTsKKyAgICAgICAgICAgIGlmIChyZXRfZmxhZ3MgJiBHU1NfQ19ERUxFR19GTEFHKQorICAg ICAgICAgICAgICAgICh2b2lkKSBnc3NfcmVsZWFzZV9jcmVkKCZzdGF0X21pbiwgJmRlbGVnX2Ny ZWRzKTsKKyAgICAgICAgICAgIHJldHVybigwKTsKKyAgICAgICAgfQorCisgICAgICAgIGRlYnVn KEYxMDAsImdzc2s1X2F1dGhfaXMgQVVUSF9TVUNDRVNTIiwiIiwwKTsKKyAgICAgICAga3JiNV9l cnJubyA9IHI7CisgICAgICAgIGlmICgga3JiNV9lcnJubyApCisgICAgICAgICAgICBtYWtlc3Ry KCZrcmI1X2Vycm1zZyxlcnJvcl9tZXNzYWdlKGtyYjVfZXJybm8pKTsKKyAgICAgICAgZWxzZQor ICAgICAgICAgICAgbWFrZXN0cigma3JiNV9lcnJtc2csc3RyVG1wKTsKKyAgICAgICAgcmV0dXJu IEFVVEhfU1VDQ0VTUzsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIHByaW50ZigiVW5rbm93biBL ZXJiZXJvcyBvcHRpb24gJWRcclxuIiwgZGF0YVstMV0pOworICAgICAgICBTZW5kR1NTSzVBdXRo U0IoR1NTX1JFSkVDVCwgMCwgMCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBhdXRoX2Zp bmlzaGVkKEFVVEhfUkVKRUNUKTsKKyAgICByZXR1cm4gQVVUSF9GQUlMVVJFOworfQorI2VuZGlm IC8qIEdTU0FQSV9LUkI1ICovCisKKyNpZmRlZiBDS19TUlAKKy8qCisgKiBDb3B5cmlnaHQgKGMp IDE5OTcgU3RhbmZvcmQgVW5pdmVyc2l0eQorICoKKyAqIFRoZSB1c2Ugb2YgdGhpcyBzb2Z0d2Fy ZSBmb3IgcmV2ZW51ZS1nZW5lcmF0aW5nIHB1cnBvc2VzIG1heSByZXF1aXJlIGEKKyAqIGxpY2Vu c2UgZnJvbSB0aGUgb3duZXJzIG9mIHRoZSB1bmRlcmx5aW5nIGludGVsbGVjdHVhbCBwcm9wZXJ0 eS4KKyAqIFNwZWNpZmljYWxseSwgdGhlIFNSUC0zIHByb3RvY29sIG1heSBub3QgYmUgdXNlZCBm b3IgcmV2ZW51ZS1nZW5lcmF0aW5nCisgKiBwdXJwb3NlcyB3aXRob3V0IGEgbGljZW5zZS4KKyAq CisgKiBOT1RFOiBDb2x1bWJpYSBVbml2ZXJzaXR5IGhhcyBhIGxpY2Vuc2UuCisgKgorICogV2l0 aGluIHRoYXQgY29uc3RyYWludCwgcGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5k IGRpc3RyaWJ1dGUKKyAqIHRoaXMgc29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBh bnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZAorICogd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRo YXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2VzIGFuZCB0aGlzIHBlcm1pc3Npb24KKyAqIG5v dGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBvZiB0aGUgc29mdHdhcmUgYW5kIHJlbGF0ZWQgZG9j dW1lbnRhdGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTLUlTIiBBTkQg V0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MsIElNUExJRUQgT1IgT1RI RVJXSVNFLCBJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkKKyAqIFdBUlJBTlRZIE9G IE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAq CisgKiBJTiBOTyBFVkVOVCBTSEFMTCBTVEFORk9SRCBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFM LCBJTkNJREVOVEFMLAorICogSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9GIEFO WSBLSU5ELCBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSCisgKiBSRVNVTFRJTkcgRlJPTSBMT1NT IE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIE9SIE5PVCBBRFZJU0VEIE9GCisgKiBU SEUgUE9TU0lCSUxJVFkgT0YgREFNQUdFLCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks IEFSSVNJTkcgT1VUCisgKiBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJG T1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKK3N0YXRpYyB2b2lkCitzcnBfZW5jb2Rl X2xlbmd0aChkYXRhLCBudW0pCisgICAgdW5zaWduZWQgY2hhciAqIGRhdGE7CisgICAgaW50IG51 bTsKK3sKKyAgICAqZGF0YSA9IChudW0gPj4gOCkgJiAweGZmOworICAgICorK2RhdGEgPSBudW0g JiAweGZmOworfQorCitzdGF0aWMgaW50CitzcnBfZGVjb2RlX2xlbmd0aChkYXRhKQorICAgIHVu c2lnbmVkIGNoYXIgKiBkYXRhOworeworICAgIHJldHVybiAoKChpbnQpICpkYXRhICYgMHhmZikg PDwgOCkgfCAoKihkYXRhICsgMSkgJiAweGZmKTsKK30KKworI2lmZGVmIFBSRV9TUlBfMV83XzMK K3N0YXRpYyBpbnQKKyNpZmRlZiBDS19BTlNJQworc3JwX3JlcGx5KGludCBob3csIHVuc2lnbmVk IGNoYXIgKmRhdGEsIGludCBjbnQpCisjZWxzZQorc3JwX3JlcGx5KGhvdyxkYXRhLGNudCkgaW50 IGhvdzsgdW5zaWduZWQgY2hhciAqZGF0YTsgaW50IGNudDsKKyNlbmRpZgoreworICAgIHN0cnVj dCB0X251bSBuOworICAgIHN0cnVjdCB0X251bSBnOworICAgIHN0cnVjdCB0X251bSBzOworICAg IHN0cnVjdCB0X251bSBCOworICAgIHN0cnVjdCB0X251bSAqIEE7CisgICAgY2hhciB0eXBlX2No ZWNrWzI2XTsKKyAgICBpbnQgcGZsYWc7CisKKyNpZmRlZiBDS19FTkNSWVBUSU9OCisgICAgU2Vz c2lvbl9LZXkgc2tleTsKKyNlbmRpZiAvKiBFTkNSWVBUSU9OICovCisKKyAgICBjaGFyICogc3Ry PU5VTEw7CisKKyAgICBkYXRhICs9IDQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQb2lu dCB0byBzdGF0dXMgYnl0ZSAqLworICAgIGNudCAgLT0gNDsKKworICAgIGlmKGNudC0tIDwgMSkg eworICAgICAgICBhdXRoX2ZpbmlzaGVkKEFVVEhfUkVKRUNUKTsKKyAgICAgICAgcmV0dXJuIEFV VEhfRkFJTFVSRTsKKyAgICB9CisKKyAgICBzd2l0Y2goKmRhdGErKykgeworICAgIGNhc2UgU1JQ X1JFSkVDVDoKKyAgICAgICAgY2ttYWttc2coc3RyVG1wLHNpemVvZihzdHJUbXApLAorICAgICAg ICAgICAgICAgICAgIlNSUCByZWZ1c2VzIGF1dGhlbnRpY2F0aW9uIGZvciAnIixzelVzZXJOYW1l LAorICAgICAgICAgICAgICAgICAgIidcclxuIixOVUxMKTsKKyAgICAgICAgaWYgKGNudCA+IDAp IHsKKyAgICAgICAgICAgIGludCBsZW4gPSBzdHJsZW4oc3RyVG1wKTsKKyAgICAgICAgICAgIGlm ICggbGVuICsgY250IDwgc2l6ZW9mKHN0clRtcCkgKSB7CisgICAgICAgICAgICAgICAgc3RyID0g c3RyVG1wICsgc3RybGVuKHN0clRtcCk7CisgICAgICAgICAgICAgICAgbWVtY3B5KHN0cixkYXRh LGNudCk7CisgICAgICAgICAgICAgICAgc3RyW2NudF0gPSAwOworICAgICAgICAgICAgfQorICAg ICAgICB9CisgICAgICAgIHByaW50ZigiU1JQIGF1dGhlbnRpY2F0aW9uIGZhaWxlZCFcclxuJXNc clxuIixzdHJUbXApOworICAgICAgICBpZiAodGMgIT0gTlVMTCkgeworICAgICAgICAgICAgdF9j bGllbnRjbG9zZSh0Yyk7CisgICAgICAgICAgICB0YyA9IE5VTEw7CisgICAgICAgIH0KKyAgICAg ICAgYXV0aF9maW5pc2hlZChBVVRIX1JFSkVDVCk7CisgICAgICAgIHJldHVybiBBVVRIX0ZBSUxV UkU7CisKKyAgICBjYXNlIFNSUF9BQ0NFUFQ6CisgICAgICAgIGlmKGNudCA8IFJFU1BPTlNFX0xF TiB8fCAhc3JwX3dhaXRyZXNwIHx8CisgICAgICAgICAgICB0YyA9PSBOVUxMCisgICAgICAgICAg ICApIHsKKyAgICAgICAgICAgIHByaW50ZigiU1JQIFByb3RvY29sIGVycm9yXHJcbiIpOworICAg ICAgICAgICAgcmV0dXJuKGF1dGhfcmVzZW5kKEFVVEhUWVBFX1NSUCkpOworICAgICAgICB9Cisg ICAgICAgIHNycF93YWl0cmVzcCA9IDA7CisKKyAgICAgICAgaWYodF9jbGllbnR2ZXJpZnkodGMs IGRhdGEpID09IDApIHsKKyAgICAgICAgICAgIHByaW50ZigiU1JQIGFjY2VwdHMgeW91IGFzICVz XHJcbiIsc3pVc2VyTmFtZSk7CisjaWZkZWYgQ0tfU1NMCisgICAgICAgICAgICBpZigoc3NsX2Fj dGl2ZV9mbGFnIHx8IHRsc19hY3RpdmVfZmxhZykgJiYKKyAgICAgICAgICAgICAgICAoaG93ICYg QVVUSF9FTkNSWVBUX01BU0spID09IEFVVEhfRU5DUllQVF9TVEFSVF9UTFMpIHsKKyAgICAgICAg ICAgICAgICBwcmludGYoIlRMUyBzZXNzaW9uIHBhcmFtZXRlcnMgdmVyaWZpZWQgYnkgU1JQXHJc biIpOworICAgICAgICAgICAgfSBlbHNlCisjZW5kaWYgLyogQ0tfU1NMICovCisKKyNpZmRlZiBD S19FTkNSWVBUSU9OCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc2tleS50eXBlID0g U0tfR0VORVJJQzsKKyAgICAgICAgICAgICAgICBza2V5Lmxlbmd0aCA9IFNFU1NJT05fS0VZX0xF TjsKKyAgICAgICAgICAgICAgICBza2V5LmRhdGEgPSB0Yy0+c2Vzc2lvbl9rZXk7CisgICAgICAg ICAgICAgICAgZW5jcnlwdF9zZXNzaW9uX2tleSgmc2tleSwgQVVUSF9DTElFTlRfVE9fU0VSVkVS KTsKKyAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBFTkNSWVBUSU9OICovCisgICAgICAgICAgICB0 X2NsaWVudGNsb3NlKHRjKTsKKyAgICAgICAgICAgIHRjID0gTlVMTDsKKyAgICAgICAgICAgIGFj Y2VwdF9jb21wbGV0ZSA9IDE7CisgICAgICAgICAgICBhdXRoX2ZpbmlzaGVkKEFVVEhfVkFMSUQp OworICAgICAgICAgICAgcmV0dXJuIEFVVEhfU1VDQ0VTUzsKKyAgICAgICAgfSBlbHNlIHsKKyAg ICAgICAgICAgIHByaW50ZigiU1JQIHNlcnZlciBhdXRoZW50aWNhdGlvbiBmYWlsZWQhXHJcbiIp OworICAgICAgICAgICAgdF9jbGllbnRjbG9zZSh0Yyk7CisgICAgICAgICAgICB0YyA9IE5VTEw7 CisgICAgICAgICAgICByZXR1cm4oYXV0aF9yZXNlbmQoQVVUSFRZUEVfU1JQKSk7CisgICAgICAg IH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNSUF9QQVJBTVM6CisgICAgICAgIGlmKCFz elVzZXJOYW1lKSB7CisgICAgICAgICAgICBwcmludGYoIk5vIHVzZXJuYW1lIGF2YWlsYWJsZVxy XG4iKTsKKyAgICAgICAgICAgIHJldHVybihhdXRoX3Jlc2VuZChBVVRIVFlQRV9TUlApKTsKKyAg ICAgICAgfQorCisgICAgICAgIG4ubGVuID0gc3JwX2RlY29kZV9sZW5ndGgoZGF0YSk7CisgICAg ICAgIGRhdGEgKz0gMjsKKyAgICAgICAgY250IC09IDI7CisgICAgICAgIGlmKG4ubGVuID4gY250 KSB7CisgICAgICAgICAgICBwcmludGYoIm4gdG9vIGxvbmdcclxuIik7CisgICAgICAgICAgICBy ZXR1cm4oYXV0aF9yZXNlbmQoQVVUSFRZUEVfU1JQKSk7CisgICAgICAgIH0KKyAgICAgICAgbi5k YXRhID0gZGF0YTsKKyAgICAgICAgZGF0YSArPSBuLmxlbjsKKyAgICAgICAgY250IC09IG4ubGVu OworCisgICAgICAgIGcubGVuID0gc3JwX2RlY29kZV9sZW5ndGgoZGF0YSk7CisgICAgICAgIGRh dGEgKz0gMjsKKyAgICAgICAgY250IC09IDI7CisgICAgICAgIGlmKGcubGVuID4gY250KSB7Cisg ICAgICAgICAgICBwcmludGYoImcgdG9vIGxvbmdcclxuIik7CisgICAgICAgICAgICByZXR1cm4o YXV0aF9yZXNlbmQoQVVUSFRZUEVfU1JQKSk7CisgICAgICAgIH0KKyAgICAgICAgZy5kYXRhID0g ZGF0YTsKKyAgICAgICAgZGF0YSArPSBnLmxlbjsKKyAgICAgICAgY250IC09IGcubGVuOworCisg ICAgICAgIHMubGVuID0gc3JwX2RlY29kZV9sZW5ndGgoZGF0YSk7CisgICAgICAgIGRhdGEgKz0g MjsKKyAgICAgICAgY250IC09IDI7CisgICAgICAgIGlmKHMubGVuID4gY250KSB7CisgICAgICAg ICAgICBwcmludGYoInNhbHQgdG9vIGxvbmdcclxuIik7CisgICAgICAgICAgICByZXR1cm4oYXV0 aF9yZXNlbmQoQVVUSFRZUEVfU1JQKSk7CisgICAgICAgIH0KKyAgICAgICAgcy5kYXRhID0gZGF0 YTsKKyAgICAgICAgZGF0YSArPSBzLmxlbjsKKyAgICAgICAgY250IC09IHMubGVuOworCisgICAg ICAgIC8qIElmIHRoZSBwYXJhbWV0ZXJzIHByb3ZpZGVkIGJ5IHRoZSBzZXJ2ZXIgY2Fubm90IGJl CisgICAgICAgICAqIHZhbGlkYXRlZCB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uIHdpbGwgZmFpbC4K KyAgICAgICAgICovCisgICAgICAgIHRjID0gdF9jbGllbnRvcGVuKHN6VXNlck5hbWUsICZuLCAm ZywgJnMpOworICAgICAgICBpZiAodGMgPT0gTlVMTCkgeworICAgICAgICAgICAgcHJpbnRmKCJT UlAgcGFyYW1ldGVyIGluaXRpYWxpemF0aW9uIGVycm9yXHJcbiIpOworICAgICAgICAgICAgcmV0 dXJuKGF1dGhfcmVzZW5kKEFVVEhUWVBFX1NSUCkpOworICAgICAgICB9CisgICAgICAgIEEgPSB0 X2NsaWVudGdlbmV4cCh0Yyk7CisgICAgICAgIGlmKEEgPT0gTlVMTCkgeworICAgICAgICAgICAg cHJpbnRmKCJTUlAgcHJvdG9jb2wgZXJyb3JcclxuIik7CisgICAgICAgICAgICByZXR1cm4oYXV0 aF9yZXNlbmQoQVVUSFRZUEVfU1JQKSk7CisgICAgICAgIH0KKyAgICAgICAgU2VuZFNSUEF1dGhT QihTUlBfRVhQLCBBLT5kYXRhLCBBLT5sZW4pOworCisgICAgICAgIGlmICggcHdidWZbMF0gJiYg cHdmbGcgKSB7CisgICAgICAgICAgICBwcmludGYoIlNSUCB1c2luZyAlZC1iaXQgbW9kdWx1cyBm b3IgJyVzJ1xyXG4iLAorICAgICAgICAgICAgICAgICAgIDggKiBuLmxlbiwKKyAgICAgICAgICAg ICAgICAgICBzelVzZXJOYW1lCisgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIGNr c3RybmNweShzcnBfcGFzc3dkLHB3YnVmLHNpemVvZihzcnBfcGFzc3dkKSk7CisjaWZkZWYgT1My CisgICAgICAgICAgICBpZiAoIHB3Y3J5cHQgKQorICAgICAgICAgICAgICAgIGNrX2VuY3J5cHQo KGNoYXIgKilzcnBfcGFzc3dkKTsKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAgfSBlbHNlIHsK KyAgICAgICAgICAgIGV4dGVybiBjaGFyICogc3JwcHdwcm9tcHQ7CisgICAgICAgICAgICBjaGFy IHByZWZhY2VbMTI4XTsKKyAgICAgICAgICAgIGludCBvazsKKworICAgICAgICAgICAgaWYgKHNy cHB3cHJvbXB0ICYmIHNycHB3cHJvbXB0WzBdICYmCisJCShzdHJsZW4oc3JwcHdwcm9tcHQpICsg c3RybGVuKHN6VXNlck5hbWUpIC0gMikgPAorCQlzaXplb2YocHJlZmFjZSkpIHsKKyAgICAgICAg ICAgICAgICBzcHJpbnRmKHByZWZhY2Usc3JwcHdwcm9tcHQsc3pVc2VyTmFtZSk7CisgICAgICAg ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGNrbWFreG1zZyggcHJlZmFjZSxzaXplb2Yo cHJlZmFjZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICJTUlAgdXNpbmcgIixja2l0b2Eo OCpuLmxlbiksIi1iaXQgbW9kdWx1cyBmb3IgJyIsCisgICAgICAgICAgICAgICAgICAgICAgICAg IHN6VXNlck5hbWUsICInIiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCk7CisgICAgICAgICAgICB9CisgICAgICAgICAg ICBvayA9IHVxX3R4dCggcHJlZmFjZSwiUGFzc3dvcmQ6ICIsMixOVUxMLAorICAgICAgICAgICAg ICAgICAgICAgICAgIHNycF9wYXNzd2Qsc2l6ZW9mKHNycF9wYXNzd2QpLTEsTlVMTCwKKwkJCSBE RUZBVUxUX1VRX1RJTUVPVVQpOworICAgICAgICAgICAgaWYgKCAhb2sgKQorICAgICAgICAgICAg ICAgIHNycF9wYXNzd2RbMF0gPSAnXDAnOworICAgICAgICB9CisKKyAgICAgICAgdF9jbGllbnRw YXNzd2QodGMsIHNycF9wYXNzd2QpOworICAgICAgICBtZW1zZXQoc3JwX3Bhc3N3ZCwgMCwgc2l6 ZW9mKHNycF9wYXNzd2QpKTsKKyAgICAgICAgcmV0dXJuIEFVVEhfU1VDQ0VTUzsKKworICAgIGNh c2UgU1JQX0NIQUxMRU5HRToKKyAgICAgICAgaWYodGMgPT0gTlVMTCkgeworICAgICAgICAgICAg cHJpbnRmKCJTUlAgcHJvdG9jb2wgZXJyb3JcclxuIik7CisgICAgICAgICAgICByZXR1cm4oYXV0 aF9yZXNlbmQoQVVUSFRZUEVfU1JQKSk7CisgICAgICAgIH0KKworI2lmbmRlZiBQUkVfU1JQXzFf NF81CisgICAgICAgIC8qCisgICAgICAgICAqIFRoZSBvcmlnaW5hbCBTUlAgQVVUSCBpbXBsZW1l bnRhdGlvbiBkaWQgbm90IHByb3RlY3QgYWdhaW5zdAorICAgICAgICAgKiB0YW1wZXJpbmcgb2Yg dGhlIGF1dGgtdHlwZS1wYWlycy4gIFRoZXJlZm9yZSwgd2hlbiB0aGUKKyAgICAgICAgICogQVVU SF9FTkNSWVBUX01BU0sgYml0cyBhcmUgemVybywgbm8gZXh0cmEgZGF0YSBpcyBpbnNlcnRlZAor ICAgICAgICAgKiBpbnRvIHRoZSBTUlAgaGFzaCBjb21wdXRhdGlvbi4gIFdoZW4gQVVUSF9FTkNS WVBUX1NUQVJUX1RMUworICAgICAgICAgKiBpcyBzZXQgd2UgYWxzbyBpbnNlcnQgdGhlIFNTTC9U TFMgY2xpZW50IGFuZCBzZXJ2ZXIgZmluaXNoZWQKKyAgICAgICAgICogbWVzc2FnZXMgdG8gZW5z dXJlIHRoYXQgdGhlcmUgaXMgbm8gbWFuIGluIHRoZSBtaWRkbGUgYXR0YWNrCisgICAgICAgICAq IHVuZGVyd2F5IG9uIHRoZSBTU0wvVExTIGNvbm5lY3Rpb24uCisgICAgICAgICAqLworICAgICAg ICBpZiAoKGhvdyAmIEFVVEhfRU5DUllQVF9NQVNLKSAhPSBBVVRIX0VOQ1JZUFRfT0ZGKSB7Cisg ICAgICAgICAgICB0eXBlX2NoZWNrWzBdID0gQVVUSFRZUEVfU1JQOworICAgICAgICAgICAgdHlw ZV9jaGVja1sxXSA9IGhvdzsKKyNpZmRlZiBDS19TU0wKKyAgICAgICAgICAgIGlmICgoaG93ICYg QVVUSF9FTkNSWVBUX01BU0spID09IEFVVEhfRU5DUllQVF9TVEFSVF9UTFMpIHsKKyAgICAgICAg ICAgICAgICBzc2xfZ2V0X2NsaWVudF9maW5pc2hlZCgmdHlwZV9jaGVja1syXSwxMik7CisgICAg ICAgICAgICAgICAgc3NsX2dldF9zZXJ2ZXJfZmluaXNoZWQoJnR5cGVfY2hlY2tbMTRdLDEyKTsK KyAgICAgICAgICAgICAgICB0X2NsaWVudGFkZGV4ZGF0YSh0Yyx0eXBlX2NoZWNrLDI2KTsKKyAg ICAgICAgICAgIH0gZWxzZQorI2VuZGlmIC8qIENLX1NTTCAqLworICAgICAgICAgICAgICAgIHRf Y2xpZW50YWRkZXhkYXRhKHRjLHR5cGVfY2hlY2ssMik7CisgICAgICAgIH0KKyNlbmRpZiAvKiBQ UkVfU1JQXzFfNF81ICovCisKKyAgICAgICAgQi5kYXRhID0gZGF0YTsKKyAgICAgICAgQi5sZW4g PSBjbnQ7CisgICAgICAgIHRfY2xpZW50Z2V0a2V5KHRjLCAmQik7CisKKyAgICAgICAgU2VuZFNS UEF1dGhTQihTUlBfUkVTUE9OU0UsIHRfY2xpZW50cmVzcG9uc2UodGMpLCBSRVNQT05TRV9MRU4p OworICAgICAgICBzcnBfd2FpdHJlc3AgPSAxOworICAgICAgICByZXR1cm4gQVVUSF9TVUNDRVNT OworCisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuKGF1dGhfcmVzZW5kKEFVVEhUWVBFX1NS UCkpOworICAgIH0KKyAgICByZXR1cm4gQVVUSF9GQUlMVVJFOworfQorCitzdGF0aWMgaW50Cisj aWZkZWYgQ0tfQU5TSUMKK3NycF9pcyhpbnQgaG93LCB1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQg Y250KQorI2Vsc2UKK3NycF9pcyhob3csZGF0YSxjbnQpIGludCBob3c7IHVuc2lnbmVkIGNoYXIg KmRhdGE7IGludCBjbnQ7CisjZW5kaWYKK3sKKyAgICBjaGFyICogcGJ1ZiA9IE5VTEw7CisgICAg Y2hhciAqIHB0cjsKKyNpZmRlZiBDS19FTkNSWVBUSU9OCisgICAgU2Vzc2lvbl9LZXkgc2tleTsK KyNlbmRpZgorICAgIHN0cnVjdCB0X251bSBBOworICAgIHN0cnVjdCB0X3B3ICogdHB3ID0gTlVM TDsKKyAgICBzdHJ1Y3QgdF9jb25mICogdGNvbmYgPSBOVUxMOworICAgIHN0cnVjdCBwYXNzd2Qg KiBwYXNzOworICAgIHN0YXRpYyBzdHJ1Y3QgdF9udW0gKiBCID0gTlVMTDsgICAgIC8qIEhvbGRl ciBmb3IgQiAqLworI2lmZGVmIENLX1NTTAorICAgIGNoYXIgdHlwZV9jaGVja1syNl07CisjZWxz ZQorICAgIGNoYXIgdHlwZV9jaGVja1syXTsKKyNlbmRpZiAvKiBDS19TU0wgKi8KKworICAgIGlm ICgoY250IC09IDQpIDwgMSkgeworICAgICAgICBhdXRoX2ZpbmlzaGVkKEFVVEhfUkVKRUNUKTsK KyAgICAgICAgcmV0dXJuIEFVVEhfRkFJTFVSRTsKKyAgICB9CisKKyAgICBkYXRhICs9IDQ7Cisg ICAgY250ICAtPSAxOworICAgIHN3aXRjaCgqZGF0YSsrKSB7CisgICAgY2FzZSBTUlBfQVVUSDoK KyAgICAgICAgLyogU2VuZCBwYXJhbWV0ZXJzIGJhY2sgdG8gY2xpZW50ICovCisgICAgICAgIGlm KHRzICE9IE5VTEwpIHsKKyAgICAgICAgICAgIHRfc2VydmVyY2xvc2UodHMpOworICAgICAgICAg ICAgdHMgPSBOVUxMOworICAgICAgICB9CisgICAgICAgIGlmKCFzelVzZXJOYW1lUmVxdWVzdGVk WzBdKSB7CisgICAgICAgICAgICBpZiAoMSkKKyAgICAgICAgICAgICAgICBwcmludGYoIk5vIHVz ZXJuYW1lIGF2YWlsYWJsZVxyXG4iKTsKKyAgICAgICAgICAgIFNlbmRTUlBBdXRoU0IoU1JQX1JF SkVDVCwgKHZvaWQgKikgIk5vIHVzZXJuYW1lIHN1cHBsaWVkIiwgLTEpOworICAgICAgICAgICAg YXV0aF9maW5pc2hlZChBVVRIX1JFSkVDVCk7CisgICAgICAgICAgICByZXR1cm4oQVVUSF9GQUlM VVJFKTsKKyAgICAgICAgfQorI2lmZGVmIElLU0QKKyNpZmRlZiBDS19MT0dJTgorICAgICAgICBp ZiAoaW5zZXJ2ZXIgJiYgY2t4YW5vbiAmJgorICAgICAgICAgICAgICFzdHJjbXAoc3pVc2VyTmFt ZVJlcXVlc3RlZCwiYW5vbnltb3VzIikpIHsKKyAgICAgICAgICAgIFNlbmRTUlBBdXRoU0IoU1JQ X1JFSkVDVCwgKHZvaWQgKikKKyAgICAgICAgICAgICJhbm9ueW1vdXMgbG9naW4gY2Fubm90IGJl IHBlcmZvcm1lZCB3aXRoIFNlY3VyZSBSZW1vdGUgUGFzc3dvcmQiLAorICAgICAgICAgICAgLTEp OworICAgICAgICAgICAgYXV0aF9maW5pc2hlZChBVVRIX1JFSkVDVCk7CisgICAgICAgICAgICBy ZXR1cm4oQVVUSF9GQUlMVVJFKTsKKyAgICAgICAgfQorI2VuZGlmIC8qIENLX0xPR0lOICovCisj ZW5kaWYgLyogSUtTRCAqLworI2lmbmRlZiBQUkVfU1JQXzFfNF80CisgICAgICAgIGlmKHRwdyA9 PSBOVUxMKSB7CisgICAgICAgICAgICBpZigodHB3ID0gdF9vcGVucHcoTlVMTCkpID09IE5VTEwp IHsKKyAgICAgICAgICAgICAgICBpZiAoMSkKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJV bmFibGUgdG8gb3BlbiBwYXNzd29yZCBmaWxlXHJcbiIpOworICAgICAgICAgICAgICAgIFNlbmRT UlBBdXRoU0IoU1JQX1JFSkVDVCwgKHZvaWQgKikgIk5vIHBhc3N3b3JkIGZpbGUiLCAtMSk7Cisg ICAgICAgICAgICAgICAgcmV0dXJuKEFVVEhfRkFJTFVSRSk7CisgICAgICAgICAgICB9CisgICAg ICAgIH0KKyAgICAgICAgaWYodGNvbmYgPT0gTlVMTCkgeworICAgICAgICAgICAgaWYoKHRjb25m ID0gdF9vcGVuY29uZihOVUxMKSkgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIGlmICgxKQor ICAgICAgICAgICAgICAgICAgcHJpbnRmKCJVbmFibGUgdG8gb3BlbiBjb25maWd1cmF0aW9uIGZp bGVcclxuIik7CisgICAgICAgICAgICAgICAgU2VuZFNSUEF1dGhTQihTUlBfUkVKRUNULCAodm9p ZCAqKSJObyBjb25maWd1cmF0aW9uIGZpbGUiLCAtMSk7CisgICAgICAgICAgICAgICAgcmV0dXJu KEFVVEhfRkFJTFVSRSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdHMgPSB0 X3NlcnZlcm9wZW5mcm9tZmlsZXMoc3pVc2VyTmFtZVJlcXVlc3RlZCwgdHB3LCB0Y29uZik7Cisg ICAgICAgIHRfY2xvc2Vwdyh0cHcpOworICAgICAgICB0cHcgPSBOVUxMOworICAgICAgICB0X2Ns b3NlY29uZih0Y29uZik7CisgICAgICAgIHRjb25mID0gTlVMTDsKKyNlbHNlIC8qIFBSRV9TUlBf MV80XzQgKi8KKyNpZmRlZiBDT01NRU5UCisgICAgICAgIC8qIHRoZSBjb2RlIGluIHRoaXMgYmxv Y2sgc2hvdWxkIG5vIGxvbmdlciBiZSBuZWNlc3Nhcnkgb24gT1MvMgorICAgICAgICAgICBvciBX aW5kb3dzIGJlY2F1c2UgSSBoYXZlIGFkZGVkIGZ1bmN0aW9uYWxpdHkgdG8gbGlic3JwLmxpYgor ICAgICAgICAgICB0byBmaW5kIHRoZSBzcnAgZmlsZXMuICAgNC8yMi8yMDAwCisgICAgICAgICov CisKKyAgICAgICAgLyogT24gV2luZG93cyBhbmQgT1MvMiB0aGVyZSBpcyBubyB3ZWxsIGRlZmlu ZWQgcGxhY2UgZm9yIHRoZSAqLworICAgICAgICAvKiBFVEMgZGlyZWN0b3J5LiAgU28gd2UgbG9v ayBmb3IgZWl0aGVyIGFuIFNSUF9FVEMgb3IgRVRDICAgICovCisgICAgICAgIC8qIGVudmlyb25t ZW50IHZhcmlhYmxlIGluIHRoYXQgb3JkZXIuICBJZiB3ZSBmaW5kIG9uZSB3ZSAgICAgKi8KKyAg ICAgICAgLyogYXR0ZW1wdCB0byBvcGVuIHRoZSBmaWxlcyBtYW51YWxseS4gICAgICAgICAgICAg ICAgICAgICAgICAqLworICAgICAgICAvKiBXZSB3aWxsIHJldXNlIHRoZSBzdHJUbXBbXSBmb3Ig dGhlIGZpbGUgbmFtZXMuICovCisgICAgICAgIHB0ciA9IGdldGVudigiU1JQX0VUQyIpOworICAg ICAgICBpZiAoICFwdHIgKQorICAgICAgICAgICAgcHRyID0gZ2V0ZW52KCJFVEMiKTsKKyNpZmRl ZiBOVAorICAgICAgICBpZiAoICFwdHIgKSB7CisgICAgICAgICAgICBEV09SRCBsZW47CisgICAg ICAgICAgICBsZW4gPSBBVVRIVE1QQkw7CisKKyAgICAgICAgICAgIGxlbiA9IEdldFdpbmRvd3NE aXJlY3Rvcnkoc3RyVG1wLGxlbik7CisgICAgICAgICAgICBpZiAoIGxlbiA+IDAgJiYgbGVuIDwg QVVUSFRNUEJMKSB7CisgICAgICAgICAgICAgICAgaWYgKCAhaXNXaW45NSgpICkgeworICAgICAg ICAgICAgICAgICAgICBpZiAoIGxlbiA9PSAxICkKKwkJICAgICAgY2tzdHJuY2F0KHN0clRtcCwi U1lTVEVNMzIvRFJJVkVSUy9FVEMiLHNpemVvZihzdHJUbXApKTsKKyAgICAgICAgICAgICAgICAg ICAgZWxzZQorCQkgICAgICBja3N0cm5jYXQoc3RyVG1wLCIvU1lTVEVNMzIvRFJJVkVSUy9FVEMi LHNpemVvZihzdHJUbXApKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg ICAgICAgICBwdHIgPSBzdHJUbXA7CisgICAgICAgIH0KKyNlbmRpZiAvKiBOVCAqLworICAgICAg ICBpZiAoIHB0ciApIHsKKyAgICAgICAgICAgIGludCBsZW4gPSBzdHJsZW4ocHRyKTsKKyAgICAg ICAgICAgIGludCBpOworCSAgICBpZiAocHRyICE9IHN0clRtcCkKKwkJc3RyY3B5KHN0clRtcCxw dHIpOworICAgICAgICAgICAgZm9yICggaT0wO2k8bGVuO2krKyApIHsKKyAgICAgICAgICAgICAg ICBpZiAoIHN0clRtcFtpXSA9PSAnXFwnICkKKyAgICAgICAgICAgICAgICAgICAgc3RyVG1wW2ld ID0gJy8nOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCBzdHJUbXBbbGVuLTFdICE9 ICcvJyApCisgICAgICAgICAgICAgICAgY2tzdHJuY2F0KHN0clRtcCwiL3RwYXNzd2QiLHNpemVv ZihzdHJUbXApKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBja3N0cm5jYXQo c3RyVG1wLCJ0cGFzc3dkIixzaXplb2Yoc3RyVG1wKSk7CisgICAgICAgICAgICB0cHcgPSB0X29w ZW5wd2J5bmFtZShzdHJUbXApOworCisgICAgICAgICAgICBja3N0cm5jYXQoc3RyVG1wLCIuY29u ZiIsc2l6ZW9mKHN0clRtcCkpOworICAgICAgICAgICAgdGNvbmYgPSB0X29wZW5jb25mYnluYW1l KHN0clRtcCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIHRwdyAmJiB0Y29uZiApCisgICAg ICAgICAgICB0cyA9IHRfc2VydmVyb3BlbmZyb21maWxlcyhzelVzZXJOYW1lUmVxdWVzdGVkLCB0 cHcsIHRjb25mKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdHMgPSB0X3NlcnZlcm9wZW4o c3pVc2VyTmFtZVJlcXVlc3RlZCk7CisgICAgICAgIGlmICggdHB3ICkgeworICAgICAgICAgICAg dF9jbG9zZXB3KHRwdyk7CisgICAgICAgICAgICB0cHcgPSBOVUxMOworICAgICAgICB9CisgICAg ICAgIGlmICggdGNvbmYgKSB7CisgICAgICAgICAgICB0X2Nsb3NlY29uZih0Y29uZik7CisgICAg ICAgICAgICB0Y29uZiA9IE5VTEw7CisgICAgICAgIH0KKyNlbHNlIC8qIENPTU1FTlQgKi8KKyAg ICAgICAgdHMgPSB0X3NlcnZlcm9wZW4oc3pVc2VyTmFtZVJlcXVlc3RlZCk7CisjZW5kaWYgLyog Q09NTUVOVCAqLworI2VuZGlmIC8qIFBSRV9TUlBfMV80XzQgKi8KKworICAgICAgICBpZiggdHMg PT0gTlVMTCApIHsKKyAgICAgICAgICAgIHByaW50ZigiVXNlciAlcyBub3QgZm91bmRcclxuIiwg c3pVc2VyTmFtZVJlcXVlc3RlZCk7CisgICAgICAgICAgICBTZW5kU1JQQXV0aFNCKFNSUF9SRUpF Q1QsICh2b2lkICopICJQYXNzd29yZCBub3Qgc2V0IiwgLTEpOworICAgICAgICAgICAgcmV0dXJu KEFVVEhfRkFJTFVSRSk7CisgICAgICAgIH0KKworCXBidWYgPSAoY2hhciAqKW1hbGxvYyh0cy0+ bi5sZW4gKyB0cy0+Zy5sZW4gKyB0cy0+cy5sZW4gKyA3KTsKKwlwdHIgPSBwYnVmOworCisgICAg ICAgIHNycF9lbmNvZGVfbGVuZ3RoKHB0ciwgdHMtPm4ubGVuKTsKKyAgICAgICAgcHRyICs9IDI7 CisgICAgICAgIG1lbWNweShwdHIsIHRzLT5uLmRhdGEsIHRzLT5uLmxlbik7ICAgICAvKiBzYWZl ICovCisgICAgICAgIHB0ciArPSB0cy0+bi5sZW47CisKKyAgICAgICAgc3JwX2VuY29kZV9sZW5n dGgocHRyLCB0cy0+Zy5sZW4pOworICAgICAgICBwdHIgKz0gMjsKKyAgICAgICAgbWVtY3B5KHB0 ciwgdHMtPmcuZGF0YSwgdHMtPmcubGVuKTsgICAgIC8qIHNhZmUgKi8KKyAgICAgICAgcHRyICs9 IHRzLT5nLmxlbjsKKworICAgICAgICBzcnBfZW5jb2RlX2xlbmd0aChwdHIsIHRzLT5zLmxlbik7 CisgICAgICAgIHB0ciArPSAyOworICAgICAgICBtZW1jcHkocHRyLCB0cy0+cy5kYXRhLCB0cy0+ cy5sZW4pOyAgICAgLyogc2FmZSAqLworICAgICAgICBwdHIgKz0gdHMtPnMubGVuOworCisgICAg ICAgIFNlbmRTUlBBdXRoU0IoU1JQX1BBUkFNUywgcGJ1ZiwgcHRyIC0gcGJ1Zik7CisJZnJlZShw YnVmKTsgcGJ1ZiA9IE5VTEw7CisKKyAgICAgICAgQiA9IHRfc2VydmVyZ2VuZXhwKHRzKTsKKyAg ICAgICAgY2tzdHJuY3B5KHN6VXNlck5hbWVBdXRoZW50aWNhdGVkLHN6VXNlck5hbWVSZXF1ZXN0 ZWQsVUlEQlVGTEVOKTsKKyAgICAgICAgcmV0dXJuIEFVVEhfU1VDQ0VTUzsKKworICAgIGNhc2Ug U1JQX0VYUDoKKyAgICAgICAgLyogQ2xpZW50IGlzIHNlbmRpbmcgQSB0byB1cywgY29tcHV0ZSBj aGFsbGVuZ2UgJiBleHBlY3RlZCByZXNwb25zZS4gKi8KKyAgICAgICAgaWYgKHRzID09IE5VTEwg fHwgQiA9PSBOVUxMKSB7CisgICAgICAgICAgICBwcmludGYoIlByb3RvY29sIGVycm9yOiBTUlBf RVhQIHVuZXhwZWN0ZWRcclxuIik7CisgICAgICAgICAgICBTZW5kU1JQQXV0aFNCKFNSUF9SRUpF Q1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopICJQcm90b2NvbCBlcnJvcjog dW5leHBlY3RlZCBFWFAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAtMQorICAgICAgICAg ICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgcmV0dXJuKEFVVEhfRkFJTFVSRSk7Cisg ICAgICAgIH0KKworICAgICAgICAvKiBXYWl0IHVudGlsIG5vdyB0byBzZW5kIEIsIHNpbmNlIGl0 IGNvbnRhaW5zIHRoZSBrZXkgdG8gInUiICovCisgICAgICAgIFNlbmRTUlBBdXRoU0IoU1JQX0NI QUxMRU5HRSwgQi0+ZGF0YSwgQi0+bGVuKTsKKyAgICAgICAgQiA9IE5VTEw7CisKKyNpZm5kZWYg UFJFX1NSUF8xXzRfNQorICAgICAgICAvKgorICAgICAgICAgKiBUaGUgb3JpZ2luYWwgU1JQIEFV VEggaW1wbGVtZW50YXRpb24gZGlkIG5vdCBwcm90ZWN0IGFnYWluc3QKKyAgICAgICAgICogdGFt cGVyaW5nIG9mIHRoZSBhdXRoLXR5cGUtcGFpcnMuICBUaGVyZWZvcmUsIHdoZW4gdGhlCisgICAg ICAgICAqIEFVVEhfRU5DUllQVF9NQVNLIGJpdHMgYXJlIHplcm8sIG5vIGV4dHJhIGRhdGEgaXMg aW5zZXJ0ZWQKKyAgICAgICAgICogaW50byB0aGUgU1JQIGhhc2ggY29tcHV0YXRpb24uICBXaGVu IEFVVEhfRU5DUllQVF9TVEFSVF9UTFMKKyAgICAgICAgICogaXMgc2V0IHdlIGFsc28gaW5zZXJ0 IHRoZSBTU0wvVExTIGNsaWVudCBhbmQgc2VydmVyIGZpbmlzaGVkCisgICAgICAgICAqIG1lc3Nh Z2VzIHRvIGVuc3VyZSB0aGF0IHRoZXJlIGlzIG5vIG1hbiBpbiB0aGUgbWlkZGxlIGF0dGFjawor ICAgICAgICAgKiB1bmRlcndheSBvbiB0aGUgU1NML1RMUyBjb25uZWN0aW9uLgorICAgICAgICAg Ki8KKyAgICAgICAgaWYgKCAoaG93ICYgQVVUSF9FTkNSWVBUX01BU0spICE9IEFVVEhfRU5DUllQ VF9PRkYgKSB7CisgICAgICAgICAgICB0eXBlX2NoZWNrWzBdID0gQVVUSFRZUEVfU1JQOworICAg ICAgICAgICAgdHlwZV9jaGVja1sxXSA9IGhvdzsKKyNpZmRlZiBDS19TU0wKKyAgICAgICAgICAg IGlmICgoaG93ICYgQVVUSF9FTkNSWVBUX01BU0spID09IEFVVEhfRU5DUllQVF9TVEFSVF9UTFMp IHsKKyAgICAgICAgICAgICAgICBzc2xfZ2V0X2NsaWVudF9maW5pc2hlZCgmdHlwZV9jaGVja1sy XSwxMik7CisgICAgICAgICAgICAgICAgc3NsX2dldF9zZXJ2ZXJfZmluaXNoZWQoJnR5cGVfY2hl Y2tbMTRdLDEyKTsKKyAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBDS19TU0wgKi8KKyAgICAgICAg ICAgIHRfc2VydmVyYWRkZXhkYXRhKHRzLHR5cGVfY2hlY2ssCisjaWZkZWYgQ0tfU1NMCisgICAg ICAgICAgICAgICAgICAoKGhvdyAmIEFVVEhfRU5DUllQVF9NQVNLKSA9PSBBVVRIX0VOQ1JZUFRf U1RBUlRfVExTKSA/IDI2IDoKKyNlbmRpZiAvKiBDS19TU0wgKi8KKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAyKTsKKyAgICAgICAgfQorI2VuZGlmIC8qIFBSRV9TUlBfMV80XzUgKi8K KworICAgICAgICBBLmRhdGEgPSBkYXRhOworICAgICAgICBBLmxlbiA9IGNudDsKKyAgICAgICAg cHRyID0gdF9zZXJ2ZXJnZXRrZXkodHMsICZBKTsKKworICAgICAgICBpZihwdHIgPT0gTlVMTCkg eworICAgICAgICAgICAgaWYgKDEpCisgICAgICAgICAgICAgIHByaW50ZigiU2VjdXJpdHkgYWxl cnQ6IFRyaXZpYWwgc2Vzc2lvbiBrZXkgYXR0ZW1wdGVkXHJcbiIpOworICAgICAgICAgICAgU2Vu ZFNSUEF1dGhTQihTUlBfUkVKRUNULAorICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAq KSAiVHJpdmlhbCBzZXNzaW9uIGtleSBkZXRlY3RlZCIsCisgICAgICAgICAgICAgICAgICAgICAg ICAgIC0xCisgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICByZXR1cm4o QVVUSF9GQUlMVVJFKTsKKyAgICAgICAgfQorICAgICAgICBzcnBfd2FpdHJlc3AgPSAxOworICAg ICAgICByZXR1cm4gQVVUSF9TVUNDRVNTOworCisgICAgY2FzZSBTUlBfUkVTUE9OU0U6CisgICAg ICAgIC8qIEdvdCB0aGUgcmVzcG9uc2U7IHNlZSBpZiBpdCdzIGNvcnJlY3QgKi8KKyAgICAgICAg aWYgKCFzcnBfd2FpdHJlc3AgfHwKKyAgICAgICAgICAgICB0cyA9PSBOVUxMCisgICAgICAgICAg ICAgKSB7CisgICAgICAgICAgICBpZiAoMSkKKyAgICAgICAgICAgICAgcHJpbnRmKCJQcm90b2Nv bCBlcnJvcjogU1JQX1JFU1BPTlNFIHVuZXhwZWN0ZWRcclxuIik7CisgICAgICAgICAgICBTZW5k U1JQQXV0aFNCKFNSUF9SRUpFQ1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICop ICJQcm90b2NvbCBlcnJvcjogdW5leHBlY3RlZCBSRVNQT05TRSIsCisgICAgICAgICAgICAgICAg ICAgICAgICAgIC0xCisgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICBy ZXR1cm4oQVVUSF9GQUlMVVJFKTsKKyAgICAgICAgfQorICAgICAgICBzcnBfd2FpdHJlc3AgPSAw OyAgICAgICAvKiB3ZSBnb3QgYSByZXNwb25zZSAqLworCisgICAgICAgIGlmIChjbnQgPCBSRVNQ T05TRV9MRU4pIHsKKyAgICAgICAgICAgIGlmICgxKQorICAgICAgICAgICAgICBwcmludGYoIlBy b3RvY29sIGVycm9yOiBtYWxmb3JtZWQgcmVzcG9uc2VcclxuIik7CisgICAgICAgICAgICBTZW5k U1JQQXV0aFNCKFNSUF9SRUpFQ1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICop ICJQcm90b2NvbCBlcnJvcjogbWFsZm9ybWVkIHJlc3BvbnNlIiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgLTEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIHJl dHVybihBVVRIX0ZBSUxVUkUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHRfc2VydmVydmVy aWZ5KHRzLCBkYXRhKSA9PSAwKSB7CisgICAgICAgICAgICBTZW5kU1JQQXV0aFNCKFNSUF9BQ0NF UFQsIHRfc2VydmVycmVzcG9uc2UodHMpLCBSRVNQT05TRV9MRU4pOworICAgICAgICAgICAgYWNj ZXB0X2NvbXBsZXRlID0gMTsKKyNpZmRlZiBDS19FTkNSWVBUSU9OCisjaWZkZWYgQ0tfU1NMCisg ICAgICAgICAgICBpZiAoIShzc2xfYWN0aXZlX2ZsYWcgfHwgdGxzX2FjdGl2ZV9mbGFnKSkKKyNl bmRpZiAvKiBDS19TU0wgKi8KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBja2hleGR1 bXAoIlNSUF9SRVNQT05TRSB0cyIsdHMsc2l6ZW9mKHRzKSk7CisgICAgICAgICAgICAgICAgY2to ZXhkdW1wKCJTUlBfUkVTUE9OU0Ugc2Vzc2lvbl9rZXkiLAorICAgICAgICAgICAgICAgICAgICAg ICAgIHRzLT5zZXNzaW9uX2tleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBTRVNTSU9OX0tF WV9MRU4KKyAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgIHNrZXku dHlwZSA9IFNLX0dFTkVSSUM7CisgICAgICAgICAgICAgICAgc2tleS5sZW5ndGggPSBTRVNTSU9O X0tFWV9MRU47CisgICAgICAgICAgICAgICAgc2tleS5kYXRhID0gdHMtPnNlc3Npb25fa2V5Owor ICAgICAgICAgICAgICAgIGVuY3J5cHRfc2Vzc2lvbl9rZXkoJnNrZXksIEFVVEhfU0VSVkVSX1RP X0NMSUVOVCk7CisgICAgICAgICAgICB9CisjZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLworICAg ICAgICAgICAgYXV0aF9maW5pc2hlZChBVVRIX1ZBTElEKTsKKyAgICAgICAgfQorICAgICAgICBl bHNlIHsKKyAgICAgICAgICAgIFNlbmRTUlBBdXRoU0IoU1JQX1JFSkVDVCwgKHZvaWQgKikgIkxv Z2luIGluY29ycmVjdCIsIC0xKTsKKyAgICAgICAgICAgIGF1dGhfZmluaXNoZWQoQVVUSF9SRUpF Q1QpOworICAgICAgICAgICAgcmV0dXJuKEFVVEhfRkFJTFVSRSk7CisgICAgICAgIH0KKyAgICAg ICAgcmV0dXJuIEFVVEhfU1VDQ0VTUzsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIHByaW50Zigi VW5rbm93biBTUlAgb3B0aW9uICVkXHJcbiIsIGRhdGFbLTFdKTsKKyAgICAgICAgU2VuZFNSUEF1 dGhTQihTUlBfUkVKRUNULCAodm9pZCAqKSAiVW5rbm93biBvcHRpb24gcmVjZWl2ZWQiLCAtMSk7 CisgICAgICAgIHJldHVybihBVVRIX0ZBSUxVUkUpOworICAgIH0KK30KKyNlbHNlIC8qIFBSRV9T UlBfMV83XzMgKi8KK3N0YXRpYyBpbnQKKyNpZmRlZiBDS19BTlNJQworbmV3X3NycF9yZXBseShp bnQgaG93LCB1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgY250KQorI2Vsc2UKK25ld19zcnBfcmVw bHkoaG93LGRhdGEsY250KSBpbnQgaG93OyB1bnNpZ25lZCBjaGFyICpkYXRhOyBpbnQgY250Owor I2VuZGlmCit7CisgICAgZGF0YSArPSA0OyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUG9p bnQgdG8gc3RhdHVzIGJ5dGUgKi8KKyAgICBjbnQgIC09IDQ7CisKKyAgICBpZihjbnQtLSA8IDEp IHsgICAgICAgICAgICAgICAgICAgICAvKiBNYXRjaGVzIHdpdGggZGF0YSsrICovCisgICAgICAg IGF1dGhfZmluaXNoZWQoQVVUSF9SRUpFQ1QpOworICAgICAgICByZXR1cm4gQVVUSF9GQUlMVVJF OworICAgIH0KKworICAgIHN3aXRjaCgqZGF0YSsrKSB7CisgICAgY2FzZSBTUlBfUEFSQU1TOiB7 CisgICAgICAgIHN0cnVjdCB0X251bSBuOworICAgICAgICBzdHJ1Y3QgdF9udW0gZzsKKyAgICAg ICAgc3RydWN0IHRfbnVtIHM7CisgICAgICAgIGNzdHIgKiBBOworCisgICAgICAgIGlmKCFzelVz ZXJOYW1lKSB7CisgICAgICAgICAgICBwcmludGYoIk5vIHVzZXJuYW1lIGF2YWlsYWJsZVxyXG4i KTsKKyAgICAgICAgICAgIHJldHVybihhdXRoX3Jlc2VuZChBVVRIVFlQRV9TUlApKTsKKyAgICAg ICAgfQorCisgICAgICAgIG4ubGVuID0gc3JwX2RlY29kZV9sZW5ndGgoZGF0YSk7CisgICAgICAg IGRhdGEgKz0gMjsKKyAgICAgICAgY250IC09IDI7CisgICAgICAgIGlmKG4ubGVuID4gY250KSB7 CisgICAgICAgICAgICBwcmludGYoIm4gdG9vIGxvbmdcclxuIik7CisgICAgICAgICAgICByZXR1 cm4oYXV0aF9yZXNlbmQoQVVUSFRZUEVfU1JQKSk7CisgICAgICAgIH0KKyAgICAgICAgbi5kYXRh ID0gZGF0YTsKKyAgICAgICAgZGF0YSArPSBuLmxlbjsKKyAgICAgICAgY250IC09IG4ubGVuOwor CisgICAgICAgIGcubGVuID0gc3JwX2RlY29kZV9sZW5ndGgoZGF0YSk7CisgICAgICAgIGRhdGEg Kz0gMjsKKyAgICAgICAgY250IC09IDI7CisgICAgICAgIGlmKGcubGVuID4gY250KSB7CisgICAg ICAgICAgICBwcmludGYoImcgdG9vIGxvbmdcclxuIik7CisgICAgICAgICAgICByZXR1cm4oYXV0 aF9yZXNlbmQoQVVUSFRZUEVfU1JQKSk7CisgICAgICAgIH0KKyAgICAgICAgZy5kYXRhID0gZGF0 YTsKKyAgICAgICAgZGF0YSArPSBnLmxlbjsKKyAgICAgICAgY250IC09IGcubGVuOworCisgICAg ICAgIHMubGVuID0gc3JwX2RlY29kZV9sZW5ndGgoZGF0YSk7CisgICAgICAgIGRhdGEgKz0gMjsK KyAgICAgICAgY250IC09IDI7CisgICAgICAgIGlmKHMubGVuICE9IGNudCkgeworICAgICAgICAg ICAgcHJpbnRmKCJpbnZhbGlkIHNhbHRcclxuIik7CisgICAgICAgICAgICByZXR1cm4oYXV0aF9y ZXNlbmQoQVVUSFRZUEVfU1JQKSk7CisgICAgICAgIH0KKyAgICAgICAgcy5kYXRhID0gZGF0YTsK KyAgICAgICAgZGF0YSArPSBzLmxlbjsKKyAgICAgICAgY250IC09IHMubGVuOworCisgICAgICAg IC8qIElmIHRoZSBwYXJhbWV0ZXJzIHByb3ZpZGVkIGJ5IHRoZSBzZXJ2ZXIgY2Fubm90IGJlCisg ICAgICAgICAqIHZhbGlkYXRlZCB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uIHdpbGwgZmFpbC4KKyAg ICAgICAgICovCisgICAgICAgIGNfc3JwID0gU1JQX25ldyhTUlBfUkZDMjk0NV9jbGllbnRfbWV0 aG9kKCkpOworICAgICAgICBpZiAoY19zcnAgPT0gTlVMTCB8fAorCSAgICBTUlBfc2V0X3VzZXJu YW1lKGNfc3JwLCBzelVzZXJOYW1lKSAhPSBTUlBfU1VDQ0VTUyB8fAorCSAgICBTUlBfc2V0X3Bh cmFtcyhjX3NycCxuLmRhdGEsbi5sZW4sZy5kYXRhLGcubGVuLHMuZGF0YSxzLmxlbikgIT0KKwkg ICAgU1JQX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgIHByaW50ZigiU1JQIFBhcmFtZXRlciBpbml0 aWFsaXphdGlvbiBlcnJvclxyXG4iKTsKKyAgICAgICAgICAgIHJldHVybihhdXRoX3Jlc2VuZChB VVRIVFlQRV9TUlApKTsKKyAgICAgICAgfQorCisgICAgICAgIEEgPSBjc3RyX25ldygpOworICAg ICAgICBpZihTUlBfZ2VuX3B1YihjX3NycCwgJkEpICE9IFNSUF9TVUNDRVNTKSB7CisgICAgICAg ICAgICBwcmludGYoIlNSUCBFcnJvciBnZW5lcmF0aW5nIGtleSBleGNoYW5nZVxyXG4iKTsKKyAg ICAgICAgICAgIHJldHVybihhdXRoX3Jlc2VuZChBVVRIVFlQRV9TUlApKTsKKyAgICAgICAgfQor CisgICAgICAgIFNlbmRTUlBBdXRoU0IoU1JQX0VYUCwgQS0+ZGF0YSwgQS0+bGVuZ3RoKTsKKyAg ICAgICAgY3N0cl9mcmVlKEEpOworCisgICAgICAgIGlmICggcHdidWZbMF0gJiYgcHdmbGcgKSB7 CisgICAgICAgICAgICBwcmludGYoIlNSUCB1c2luZyAlZC1iaXQgbW9kdWx1cyBmb3IgJyVzJ1xy XG4iLAorICAgICAgICAgICAgICAgICAgIDggKiBuLmxlbiwKKyAgICAgICAgICAgICAgICAgICBz elVzZXJOYW1lCisgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIGNrc3RybmNweShz cnBfcGFzc3dkLHB3YnVmLHNpemVvZihzcnBfcGFzc3dkKSk7CisjaWZkZWYgT1MyCisgICAgICAg ICAgICBpZiAoIHB3Y3J5cHQgKQorICAgICAgICAgICAgICAgIGNrX2VuY3J5cHQoKGNoYXIgKilz cnBfcGFzc3dkKTsKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg ICAgIGV4dGVybiBjaGFyICogc3JwcHdwcm9tcHQ7CisgICAgICAgICAgICBjaGFyIHByZWZhY2Vb MTI4XTsKKyAgICAgICAgICAgIGludCBvazsKKworICAgICAgICAgICAgaWYgKHNycHB3cHJvbXB0 ICYmIHNycHB3cHJvbXB0WzBdICYmCisJCShzdHJsZW4oc3JwcHdwcm9tcHQpICsgc3RybGVuKHN6 VXNlck5hbWUpIC0gMikgPAorCQlzaXplb2YocHJlZmFjZSkpIHsKKyAgICAgICAgICAgICAgICBz cHJpbnRmKHByZWZhY2Usc3JwcHdwcm9tcHQsc3pVc2VyTmFtZSk7CisgICAgICAgICAgICB9IGVs c2UgeworICAgICAgICAgICAgICAgIGNrbWFreG1zZyggcHJlZmFjZSxzaXplb2YocHJlZmFjZSks CisgICAgICAgICAgICAgICAgICAgICAgICAgICJTUlAgdXNpbmcgIixja2l0b2EoOCpuLmxlbiks Ii1iaXQgbW9kdWx1cyBmb3IgJyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN6VXNlck5h bWUsICInIiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgTlVMTCwgTlVMTCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBvayA9IHVx X3R4dChwcmVmYWNlLCJQYXNzd29yZDogIiwyLE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAg ICBzcnBfcGFzc3dkLHNpemVvZihzcnBfcGFzc3dkKS0xLE5VTEwsCisJCQlERUZBVUxUX1VRX1RJ TUVPVVQpOworICAgICAgICAgICAgaWYgKCAhb2sgKQorICAgICAgICAgICAgICAgIHNycF9wYXNz d2RbMF0gPSAnXDAnOworICAgICAgICB9CisKKyAgICAgICAgaWYoU1JQX3NldF9hdXRoX3Bhc3N3 b3JkKGNfc3JwLCBzcnBfcGFzc3dkKSAhPSBTUlBfU1VDQ0VTUykgeworICAgICAgICAgICAgbWVt c2V0KHNycF9wYXNzd2QsIDAsIHNpemVvZihzcnBfcGFzc3dkKSk7CisgICAgICAgICAgICBwcmlu dGYoIlNSUCBFcnJvciBzZXR0aW5nIGNsaWVudCBwYXNzd29yZFxyXG4iKTsKKyAgICAgICAgICAg IHJldHVybihhdXRoX3Jlc2VuZChBVVRIVFlQRV9TUlApKTsKKyAgICAgICAgfQorICAgICAgICBt ZW1zZXQoc3JwX3Bhc3N3ZCwgMCwgc2l6ZW9mKHNycF9wYXNzd2QpKTsKKyAgICAgICAgcmV0dXJu IEFVVEhfU1VDQ0VTUzsKKyAgICB9CisgICAgY2FzZSBTUlBfQ0hBTExFTkdFOiB7CisgICAgICAg IGNoYXIgdHlwZV9jaGVja1syNl07CisgICAgICAgIGNzdHIgKiByZXNwID0gTlVMTDsKKworICAg ICAgICBpZihjX3NycCA9PSBOVUxMKSB7CisgICAgICAgICAgICBwcmludGYoIlNSUCBwcm90b2Nv bCBlcnJvclxyXG4iKTsKKyAgICAgICAgICAgIHJldHVybihhdXRoX3Jlc2VuZChBVVRIVFlQRV9T UlApKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICAqIFRoZSBvcmlnaW5hbCBT UlAgQVVUSCBpbXBsZW1lbnRhdGlvbiBkaWQgbm90IHByb3RlY3QgYWdhaW5zdAorICAgICAgICAg KiB0YW1wZXJpbmcgb2YgdGhlIGF1dGgtdHlwZS1wYWlycy4gIFRoZXJlZm9yZSwgd2hlbiB0aGUK KyAgICAgICAgICogQVVUSF9FTkNSWVBUX01BU0sgYml0cyBhcmUgemVybywgbm8gZXh0cmEgZGF0 YSBpcyBpbnNlcnRlZAorICAgICAgICAgKiBpbnRvIHRoZSBTUlAgaGFzaCBjb21wdXRhdGlvbi4g IFdoZW4gQVVUSF9FTkNSWVBUX1NUQVJUX1RMUworICAgICAgICAgKiBpcyBzZXQgd2UgYWxzbyBp bnNlcnQgdGhlIFNTTC9UTFMgY2xpZW50IGFuZCBzZXJ2ZXIgZmluaXNoZWQKKyAgICAgICAgICog bWVzc2FnZXMgdG8gZW5zdXJlIHRoYXQgdGhlcmUgaXMgbm8gbWFuIGluIHRoZSBtaWRkbGUgYXR0 YWNrCisgICAgICAgICAqIHVuZGVyd2F5IG9uIHRoZSBTU0wvVExTIGNvbm5lY3Rpb24uCisgICAg ICAgICAqLworICAgICAgICBpZiAoKGhvdyAmIEFVVEhfRU5DUllQVF9NQVNLKSAhPSBBVVRIX0VO Q1JZUFRfT0ZGKSB7CisgICAgICAgICAgICB0eXBlX2NoZWNrWzBdID0gQVVUSFRZUEVfU1JQOwor ICAgICAgICAgICAgdHlwZV9jaGVja1sxXSA9IGhvdzsKKyNpZmRlZiBDS19TU0wKKyAgICAgICAg ICAgIGlmICgoaG93ICYgQVVUSF9FTkNSWVBUX01BU0spID09IEFVVEhfRU5DUllQVF9TVEFSVF9U TFMpIHsKKyAgICAgICAgICAgICAgICBzc2xfZ2V0X2NsaWVudF9maW5pc2hlZCgmdHlwZV9jaGVj a1syXSwxMik7CisgICAgICAgICAgICAgICAgc3NsX2dldF9zZXJ2ZXJfZmluaXNoZWQoJnR5cGVf Y2hlY2tbMTRdLDEyKTsKKyAgICAgICAgICAgICAgICBTUlBfYWRkX2V4X2RhdGEoY19zcnAsIHR5 cGVfY2hlY2ssIDI2KTsKKyAgICAgICAgICAgIH0gZWxzZQorI2VuZGlmIC8qIENLX1NTTCAqLwor ICAgICAgICAgICAgICAgIFNSUF9hZGRfZXhfZGF0YShjX3NycCwgdHlwZV9jaGVjaywgMik7Cisg ICAgICAgIH0KKworICAgICAgICBpZihTUlBfY29tcHV0ZV9rZXkoY19zcnAsICZjX2tleSwgZGF0 YSwgY250KSAhPSBTUlBfU1VDQ0VTUykgeworICAgICAgICAgICAgcHJpbnRmKCJTUlAgRVJST1I6 IHVuYWJsZSB0byBjb21wdXRlIGNsaWVudCBrZXlcclxuIik7CisgICAgICAgICAgICByZXR1cm4o YXV0aF9yZXNlbmQoQVVUSFRZUEVfU1JQKSk7CisgICAgICAgIH0KKworICAgICAgICByZXNwID0g Y3N0cl9uZXcoKTsKKyAgICAgICAgaWYoU1JQX3Jlc3BvbmQoY19zcnAsICZyZXNwKSAhPSBTUlBf U1VDQ0VTUykgeworICAgICAgICAgICAgcHJpbnRmKCJTUlAgRVJST1I6IHVuYWJsZSB0byBjb21w dXRlIGNsaWVudCByZXNwb25zZVxyXG4iKTsKKyAgICAgICAgICAgIHJldHVybihhdXRoX3Jlc2Vu ZChBVVRIVFlQRV9TUlApKTsKKyAgICAgICAgfQorICAgICAgICBTZW5kU1JQQXV0aFNCKFNSUF9S RVNQT05TRSwgcmVzcC0+ZGF0YSwgcmVzcC0+bGVuZ3RoKTsKKyAgICAgICAgY3N0cl9mcmVlKHJl c3ApOworICAgICAgICBzcnBfd2FpdHJlc3AgPSAxOworICAgICAgICByZXR1cm4gQVVUSF9TVUND RVNTOworICAgIH0KKyAgICBjYXNlIFNSUF9BQ0NFUFQ6IHsKKyNpZmRlZiBDS19FTkNSWVBUSU9O CisgICAgICAgIFNlc3Npb25fS2V5IHNrZXk7CisjZW5kaWYgLyogRU5DUllQVElPTiAqLworCisg ICAgICAgIGlmKGNudCA8IFJFU1BPTlNFX0xFTiB8fCAhc3JwX3dhaXRyZXNwIHx8IGNfc3JwID09 IE5VTEwpIHsKKyAgICAgICAgICAgIHByaW50ZigiU1JQIFByb3RvY29sIGVycm9yXHJcbiIpOwor ICAgICAgICAgICAgcmV0dXJuKGF1dGhfcmVzZW5kKEFVVEhUWVBFX1NSUCkpOworICAgICAgICB9 CisgICAgICAgIHNycF93YWl0cmVzcCA9IDA7CisKKyAgICAgICAgaWYoU1JQX3ZlcmlmeShjX3Ny cCwgZGF0YSwgY250KSA9PSBTUlBfU1VDQ0VTUykgeworICAgICAgICAgICAgcHJpbnRmKCJTUlAg YWNjZXB0cyB5b3UgYXMgJXNcclxuIixzelVzZXJOYW1lKTsKKworI2lmZGVmIENLX1NTTAorICAg ICAgICAgICAgaWYoKHNzbF9hY3RpdmVfZmxhZyB8fCB0bHNfYWN0aXZlX2ZsYWcpICYmCisgICAg ICAgICAgICAgICAgKGhvdyAmIEFVVEhfRU5DUllQVF9NQVNLKSA9PSBBVVRIX0VOQ1JZUFRfU1RB UlRfVExTKSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCJUTFMgc2Vzc2lvbiBwYXJhbWV0ZXJz IHZlcmlmaWVkIGJ5IFNSUFxyXG4iKTsKKyAgICAgICAgICAgIH0gZWxzZQorI2VuZGlmIC8qIENL X1NTTCAqLworI2lmZGVmIENLX0VOQ1JZUFRJT04KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg ICAgICBza2V5LnR5cGUgPSBTS19HRU5FUklDOworICAgICAgICAgICAgICAgIHNrZXkubGVuZ3Ro ID0gY19rZXktPmxlbmd0aDsKKyAgICAgICAgICAgICAgICBza2V5LmRhdGEgPSBjX2tleS0+ZGF0 YTsKKyAgICAgICAgICAgICAgICBlbmNyeXB0X3Nlc3Npb25fa2V5KCZza2V5LCBBVVRIX0NMSUVO VF9UT19TRVJWRVIpOworICAgICAgICAgICAgICAgIGNzdHJfY2xlYXJfZnJlZShjX2tleSk7Cisg ICAgICAgICAgICAgICAgY19rZXkgPSBOVUxMOworICAgICAgICAgICAgfQorI2VuZGlmIC8qIENL X0VOQ1JZUFRJT04gKi8KKyAgICAgICAgICAgIGFjY2VwdF9jb21wbGV0ZSA9IDE7CisgICAgICAg ICAgICBhdXRoX2ZpbmlzaGVkKEFVVEhfVkFMSUQpOworICAgICAgICAgICAgU1JQX2ZyZWUoY19z cnApOworICAgICAgICAgICAgY19zcnAgPSBOVUxMOworICAgICAgICAgICAgcmV0dXJuIEFVVEhf U1VDQ0VTUzsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHByaW50Zigi WyBFcnJvcjogU1JQIHNlcnZlciBhdXRoZW50aWNhdGlvbiBmYWlsZWQgXVxyXG4iKTsKKyAgICAg ICAgICAgIHJldHVybihhdXRoX3Jlc2VuZChBVVRIVFlQRV9TUlApKTsKKyAgICAgICAgfQorICAg IH0KKyAgICBjYXNlIFNSUF9SRUpFQ1Q6IHsKKyAgICAgICAgY2hhciAqIHN0cj1OVUxMOworCisg ICAgICAgIGNrbWFrbXNnKHN0clRtcCxzaXplb2Yoc3RyVG1wKSwKKyAgICAgICAgICAgICAgICAg ICJTUlAgcmVmdXNlcyBhdXRoZW50aWNhdGlvbiBmb3IgJyIsc3pVc2VyTmFtZSwKKyAgICAgICAg ICAgICAgICAgICInXHJcbiIsTlVMTCk7CisgICAgICAgIGlmIChjbnQgPiAwKSB7CisgICAgICAg ICAgICBpbnQgbGVuID0gc3RybGVuKHN0clRtcCk7CisgICAgICAgICAgICBpZiAoIGxlbiArIGNu dCA8IHNpemVvZihzdHJUbXApICkgeworICAgICAgICAgICAgICAgIHN0ciA9IHN0clRtcCArIHN0 cmxlbihzdHJUbXApOworICAgICAgICAgICAgICAgIG1lbWNweShzdHIsZGF0YSxjbnQpOworICAg ICAgICAgICAgICAgIHN0cltjbnRdID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg ICAgICBwcmludGYoIlNSUCBhdXRoZW50aWNhdGlvbiBmYWlsZWQhXHJcbiVzXHJcbiIsc3RyVG1w KTsKKyAgICAgICAgYXV0aF9maW5pc2hlZChBVVRIX1JFSkVDVCk7CisgICAgICAgIHJldHVybiBB VVRIX0ZBSUxVUkU7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIHByaW50ZigiVW5rbm93 biBTUlAgb3B0aW9uICVkXHJcbiIsIGRhdGFbLTFdKTsKKyAgICAgICAgcmV0dXJuKGF1dGhfcmVz ZW5kKEFVVEhUWVBFX1NSUCkpOworICAgIH0KKyAgICAvKiBORVZFUiBSRUFDSEVEICovCit9CisK K3N0YXRpYyBpbnQKKyNpZmRlZiBDS19BTlNJQworbmV3X3NycF9pcyhpbnQgaG93LCB1bnNpZ25l ZCBjaGFyICpkYXRhLCBpbnQgY250KQorI2Vsc2UKK25ld19zcnBfaXMoaG93LGRhdGEsY250KSBp bnQgaG93OyB1bnNpZ25lZCBjaGFyICpkYXRhOyBpbnQgY250OworI2VuZGlmCit7CisgICAgY2hh ciAqIHBidWYgPSBOVUxMOworICAgIGNoYXIgKiBwdHI7CisjaWZkZWYgQ0tfRU5DUllQVElPTgor ICAgIFNlc3Npb25fS2V5IHNrZXk7CisjZW5kaWYKKyAgICBzdGF0aWMgY3N0ciAqIEIgPSBOVUxM OyAgICAgICAgICAgICAvKiBIb2xkZXIgZm9yIEIgKi8KKyAgICBzdHJ1Y3QgdF9wYXNzd2QgKiBw YXNzOworICAgIGNzdHIgKiByZXNwOworICAgIGNoYXIgdHlwZV9jaGVja1syNl07CisKKyAgICBp ZiAoKGNudCAtPSA0KSA8IDEpIHsKKyAgICAgICAgYXV0aF9maW5pc2hlZChBVVRIX1JFSkVDVCk7 CisgICAgICAgIHJldHVybiBBVVRIX0ZBSUxVUkU7CisgICAgfQorCisgICAgZGF0YSArPSA0Owor ICAgIGNudCAgLT0gMTsKKyAgICBzd2l0Y2goKmRhdGErKykgeworICAgIGNhc2UgU1JQX0FVVEg6 CisgICAgICAgIC8qIFNlbmQgcGFyYW1ldGVycyBiYWNrIHRvIGNsaWVudCAqLworICAgICAgICBp ZihzX3NycCAhPSBOVUxMKSB7CisgICAgICAgICAgICBTUlBfZnJlZShzX3NycCk7CisgICAgICAg ICAgICBzX3NycCA9IE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgaWYgKEIgIT0gTlVMTCkgewor ICAgICAgICAgICAgY3N0cl9mcmVlKEIpOworICAgICAgICAgICAgQiA9IE5VTEw7CisgICAgICAg IH0KKyAgICAgICAgaWYoIXN6VXNlck5hbWVSZXF1ZXN0ZWRbMF0pIHsKKyAgICAgICAgICAgIGlm ICgxKQorICAgICAgICAgICAgICAgIHByaW50ZigiTm8gdXNlcm5hbWUgYXZhaWxhYmxlXHJcbiIp OworICAgICAgICAgICAgU2VuZFNSUEF1dGhTQihTUlBfUkVKRUNULCAodm9pZCAqKSAiTm8gdXNl cm5hbWUgc3VwcGxpZWQiLCAtMSk7CisgICAgICAgICAgICBhdXRoX2ZpbmlzaGVkKEFVVEhfUkVK RUNUKTsKKyAgICAgICAgICAgIHJldHVybihBVVRIX0ZBSUxVUkUpOworICAgICAgICB9CisjaWZk ZWYgSUtTRAorI2lmZGVmIENLX0xPR0lOCisgICAgICAgIGlmIChpbnNlcnZlciAmJiBja3hhbm9u ICYmCisgICAgICAgICAgICAgIXN0cmNtcChzelVzZXJOYW1lUmVxdWVzdGVkLCJhbm9ueW1vdXMi KSkgeworICAgICAgICAgICAgU2VuZFNSUEF1dGhTQihTUlBfUkVKRUNULCAodm9pZCAqKQorICAg ICAgICAgICAgImFub255bW91cyBsb2dpbiBjYW5ub3QgYmUgcGVyZm9ybWVkIHdpdGggU2VjdXJl IFJlbW90ZSBQYXNzd29yZCIsCisgICAgICAgICAgICAtMSk7CisgICAgICAgICAgICBhdXRoX2Zp bmlzaGVkKEFVVEhfUkVKRUNUKTsKKyAgICAgICAgICAgIHJldHVybihBVVRIX0ZBSUxVUkUpOwor ICAgICAgICB9CisjZW5kaWYgLyogQ0tfTE9HSU4gKi8KKyNlbmRpZiAvKiBJS1NEICovCisgICAg ICAgIHNfc3JwID0gU1JQX25ldyhTUlBfUkZDMjk0NV9zZXJ2ZXJfbWV0aG9kKCkpOworICAgICAg ICBpZihzX3NycCA9PSBOVUxMKSB7CisgICAgICAgICAgICBwcmludGYoIkVycm9yIGluaXRpYWxp emluZyBTUlAgc2VydmVyXHJcbiIpOworICAgICAgICAgICAgU2VuZFNSUEF1dGhTQihTUlBfUkVK RUNULAorICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKSAiU1JQIHNlcnZlciBpbml0 IGZhaWxlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIC0xCisgICAgICAgICAgICAgICAg ICAgICAgICAgICk7CisgICAgICAgICAgICByZXR1cm4oQVVUSF9GQUlMVVJFKTsKKyAgICAgICAg fQorICAgICAgICBwYXNzID0gZ2V0dHBuYW0oc3pVc2VyTmFtZVJlcXVlc3RlZCk7CisgICAgICAg IGlmKHBhc3MgPT0gTlVMTCkgeworICAgICAgICAgICAgcHJpbnRmKCJVc2VyICVzIG5vdCBmb3Vu ZFxyXG4iLCBzelVzZXJOYW1lUmVxdWVzdGVkKTsKKyAgICAgICAgICAgIFNlbmRTUlBBdXRoU0Io U1JQX1JFSkVDVCwgKHZvaWQgKikgIlBhc3N3b3JkIG5vdCBzZXQiLCAtMSk7CisgICAgICAgICAg ICByZXR1cm4oQVVUSF9GQUlMVVJFKTsKKyAgICAgICAgfQorICAgICAgICBpZihTUlBfc2V0X3Vz ZXJuYW1lKHNfc3JwLCBzelVzZXJOYW1lUmVxdWVzdGVkKSAhPSBTUlBfU1VDQ0VTUyB8fAorCSAg IFNSUF9zZXRfcGFyYW1zKHNfc3JwLCBwYXNzLT50Yy5tb2R1bHVzLmRhdGEsCisJCQkgIHBhc3Mt PnRjLm1vZHVsdXMubGVuLAorCQkJICBwYXNzLT50Yy5nZW5lcmF0b3IuZGF0YSwKKwkJCSAgcGFz cy0+dGMuZ2VuZXJhdG9yLmxlbiwKKwkJCSAgcGFzcy0+dHAuc2FsdC5kYXRhLAorCQkJICBwYXNz LT50cC5zYWx0LmxlbikgIT0gU1JQX1NVQ0NFU1MgfHwKKwkgICBTUlBfc2V0X2F1dGhlbnRpY2F0 b3Ioc19zcnAsCisJCQkJIHBhc3MtPnRwLnBhc3N3b3JkLmRhdGEsCisJCQkJIHBhc3MtPnRwLnBh c3N3b3JkLmxlbikgIT0gU1JQX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgIHByaW50ZigiRXJyb3Ig aW5pdGlhbGl6aW5nIFNSUCBwYXJhbWV0ZXJzXHJcbiIpOworICAgICAgICAgICAgU2VuZFNSUEF1 dGhTQihTUlBfUkVKRUNULCh2b2lkICopIlNSUCBwYXJhbWV0ZXIgaW5pdCBmYWlsZWQiLCAtMSk7 CisgICAgICAgICAgICByZXR1cm4oQVVUSF9GQUlMVVJFKTsKKyAgICAgICAgfQorCisJcGJ1ZiA9 IChjaGFyICopbWFsbG9jKHBhc3MtPnRjLm1vZHVsdXMubGVuICsgcGFzcy0+dGMuZ2VuZXJhdG9y LmxlbiArCisJCQkgICAgICAgcGFzcy0+dHAuc2FsdC5sZW4gKyA3KTsKKyAgICAgICAgcHRyID0g cGJ1ZjsKKworICAgICAgICBzcnBfZW5jb2RlX2xlbmd0aChwdHIsIHBhc3MtPnRjLm1vZHVsdXMu bGVuKTsKKyAgICAgICAgcHRyICs9IDI7CisgICAgICAgIG1lbWNweShwdHIsIHBhc3MtPnRjLm1v ZHVsdXMuZGF0YSwgcGFzcy0+dGMubW9kdWx1cy5sZW4pOworICAgICAgICBwdHIgKz0gcGFzcy0+ dGMubW9kdWx1cy5sZW47CisKKyAgICAgICAgc3JwX2VuY29kZV9sZW5ndGgocHRyLCBwYXNzLT50 Yy5nZW5lcmF0b3IubGVuKTsKKyAgICAgICAgcHRyICs9IDI7CisgICAgICAgIG1lbWNweShwdHIs IHBhc3MtPnRjLmdlbmVyYXRvci5kYXRhLCBwYXNzLT50Yy5nZW5lcmF0b3IubGVuKTsKKyAgICAg ICAgcHRyICs9IHBhc3MtPnRjLmdlbmVyYXRvci5sZW47CisKKyAgICAgICAgc3JwX2VuY29kZV9s ZW5ndGgocHRyLCBwYXNzLT50cC5zYWx0Lmxlbik7CisgICAgICAgIHB0ciArPSAyOworICAgICAg ICBtZW1jcHkocHRyLCBwYXNzLT50cC5zYWx0LmRhdGEsIHBhc3MtPnRwLnNhbHQubGVuKTsKKyAg ICAgICAgcHRyICs9IHBhc3MtPnRwLnNhbHQubGVuOworCisgICAgICAgIFNlbmRTUlBBdXRoU0Io U1JQX1BBUkFNUywgcGJ1ZiwgcHRyIC0gcGJ1Zik7CisJZnJlZShwYnVmKTsKKwlwYnVmID0gTlVM TDsKKworICAgICAgICBpZihTUlBfZ2VuX3B1YihzX3NycCwgJkIpICE9IFNSUF9TVUNDRVNTKSB7 CisgICAgICAgICAgICBwcmludGYoIkVycm9yIGdlbmVyYXRpbmcgU1JQIHB1YmxpYyB2YWx1ZVxy XG4iKTsKKyAgICAgICAgICAgIFNlbmRTUlBBdXRoU0IoU1JQX1JFSkVDVCwgKHZvaWQgKikgIlNS UF9nZW5fcHViIGZhaWxlZCIsIC0xKTsKKyAgICAgICAgICAgIHJldHVybihBVVRIX0ZBSUxVUkUp OworICAgICAgICB9CisgICAgICAgIGNrc3RybmNweShzelVzZXJOYW1lQXV0aGVudGljYXRlZCxz elVzZXJOYW1lUmVxdWVzdGVkLFVJREJVRkxFTik7CisgICAgICAgIHJldHVybiBBVVRIX1NVQ0NF U1M7CisKKyAgICBjYXNlIFNSUF9FWFA6CisgICAgICAvKiBDbGllbnQgaXMgc2VuZGluZyBBIHRv IHVzLCBjb21wdXRlIGNoYWxsZW5nZSBhbmQgZXhwZWN0ZWQgcmVzcG9uc2UuICovCisgICAgICAg IGlmIChzX3NycCA9PSBOVUxMIHx8IEIgPT0gTlVMTCkgeworCSAgICBwcmludGYoIlByb3RvY29s IGVycm9yOiBTUlBfRVhQIHVuZXhwZWN0ZWRcclxuIik7CisJICAgIFNlbmRTUlBBdXRoU0IoU1JQ X1JFSkVDVCwKKwkJICAJKHZvaWQgKikiUHJvdG9jb2wgZXJyb3I6IHVuZXhwZWN0ZWQgRVhQIiwg LTEpOworCSAgICByZXR1cm4oQVVUSF9GQUlMVVJFKTsKKwl9CisgICAgICAgIC8qIFdhaXQgdW50 aWwgbm93IHRvIHNlbmQgQiwgc2luY2UgaXQgY29udGFpbnMgdGhlIGtleSB0byAidSIgKi8KKyAg ICAgICAgU2VuZFNSUEF1dGhTQihTUlBfQ0hBTExFTkdFLCBCLT5kYXRhLCBCLT5sZW5ndGgpOwor ICAgICAgICBjc3RyX2ZyZWUoQik7CisgICAgICAgIEIgPSBOVUxMOworCisgICAgICAgIC8qCisg ICAgICAgICAqIFRoZSBvcmlnaW5hbCBTUlAgQVVUSCBpbXBsZW1lbnRhdGlvbiBkaWQgbm90IHBy b3RlY3QgYWdhaW5zdAorICAgICAgICAgKiB0YW1wZXJpbmcgb2YgdGhlIGF1dGgtdHlwZS1wYWly cy4gIFRoZXJlZm9yZSwgd2hlbiB0aGUKKyAgICAgICAgICogQVVUSF9FTkNSWVBUX01BU0sgYml0 cyBhcmUgemVybywgbm8gZXh0cmEgZGF0YSBpcyBpbnNlcnRlZAorICAgICAgICAgKiBpbnRvIHRo ZSBTUlAgaGFzaCBjb21wdXRhdGlvbi4gIFdoZW4gQVVUSF9FTkNSWVBUX1NUQVJUX1RMUworICAg ICAgICAgKiBpcyBzZXQgd2UgYWxzbyBpbnNlcnQgdGhlIFNTTC9UTFMgY2xpZW50IGFuZCBzZXJ2 ZXIgZmluaXNoZWQKKyAgICAgICAgICogbWVzc2FnZXMgdG8gZW5zdXJlIHRoYXQgdGhlcmUgaXMg bm8gbWFuIGluIHRoZSBtaWRkbGUgYXR0YWNrCisgICAgICAgICAqIHVuZGVyd2F5IG9uIHRoZSBT U0wvVExTIGNvbm5lY3Rpb24uCisgICAgICAgICAqLworICAgICAgICBpZiAoIChob3cgJiBBVVRI X0VOQ1JZUFRfTUFTSykgIT0gQVVUSF9FTkNSWVBUX09GRiApIHsKKyAgICAgICAgICAgIHR5cGVf Y2hlY2tbMF0gPSBBVVRIVFlQRV9TUlA7CisgICAgICAgICAgICB0eXBlX2NoZWNrWzFdID0gaG93 OworI2lmZGVmIENLX1NTTAorICAgICAgICAgICAgaWYgKChob3cgJiBBVVRIX0VOQ1JZUFRfTUFT SykgPT0gQVVUSF9FTkNSWVBUX1NUQVJUX1RMUykgeworICAgICAgICAgICAgICAgIHNzbF9nZXRf Y2xpZW50X2ZpbmlzaGVkKCZ0eXBlX2NoZWNrWzJdLDEyKTsKKyAgICAgICAgICAgICAgICBzc2xf Z2V0X3NlcnZlcl9maW5pc2hlZCgmdHlwZV9jaGVja1sxNF0sMTIpOworICAgICAgICAgICAgICAg IFNSUF9hZGRfZXhfZGF0YShzX3NycCwgdHlwZV9jaGVjaywgMjYpOworICAgICAgICAgICAgfSBl bHNlCisjZW5kaWYgLyogQ0tfU1NMICovCisgICAgICAgICAgICAgICAgU1JQX2FkZF9leF9kYXRh KHNfc3JwLCB0eXBlX2NoZWNrLCAyKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmKFNSUF9jb21w dXRlX2tleShzX3NycCwgJnNfa2V5LCBkYXRhLCBjbnQpICE9IFNSUF9TVUNDRVNTKSB7CisgICAg ICAgICAgICBwcmludGYoIlNlY3VyaXR5IGFsZXJ0OiBUcml2aWFsIHNlc3Npb24ga2V5IGF0dGVt cHRlZFxyXG4iKTsKKyAgICAgICAgICAgIFNlbmRTUlBBdXRoU0IoU1JQX1JFSkVDVCwKKwkJCSAg KHZvaWQgKikgIlRyaXZpYWwgc2Vzc2lvbiBrZXkgZGV0ZWN0ZWQiLCAtMSk7CisgICAgICAgICAg ICByZXR1cm4oQVVUSF9GQUlMVVJFKTsKKyAgICAgICAgfQorICAgICAgICBzcnBfd2FpdHJlc3Ag PSAxOworICAgICAgICByZXR1cm4gQVVUSF9TVUNDRVNTOworCisgICAgY2FzZSBTUlBfUkVTUE9O U0U6CisgICAgICAgIC8qIEdvdCB0aGUgcmVzcG9uc2U7IHNlZSBpZiBpdCdzIGNvcnJlY3QgKi8K KyAgICAgICAgaWYgKCFzcnBfd2FpdHJlc3AgfHwgc19zcnAgPT0gTlVMTCkgeworICAgICAgICAg ICAgaWYgKDEpCisgICAgICAgICAgICAgIHByaW50ZigiUHJvdG9jb2wgZXJyb3I6IFNSUF9SRVNQ T05TRSB1bmV4cGVjdGVkXHJcbiIpOworICAgICAgICAgICAgU2VuZFNSUEF1dGhTQihTUlBfUkVK RUNULAorICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKSAiUHJvdG9jb2wgZXJyb3I6 IHVuZXhwZWN0ZWQgUkVTUE9OU0UiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAtMQorICAg ICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgcmV0dXJuKEFVVEhfRkFJTFVS RSk7CisgICAgICAgIH0KKyAgICAgICAgc3JwX3dhaXRyZXNwID0gMDsgICAgICAgLyogd2UgZ290 IGEgcmVzcG9uc2UgKi8KKworICAgICAgICBpZiAoY250IDwgUkVTUE9OU0VfTEVOKSB7CisgICAg ICAgICAgICBpZiAoMSkKKyAgICAgICAgICAgICAgcHJpbnRmKCJQcm90b2NvbCBlcnJvcjogbWFs Zm9ybWVkIHJlc3BvbnNlXHJcbiIpOworICAgICAgICAgICAgU2VuZFNSUEF1dGhTQihTUlBfUkVK RUNULAorICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKSAiUHJvdG9jb2wgZXJyb3I6 IG1hbGZvcm1lZCByZXNwb25zZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIC0xCisgICAg ICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICByZXR1cm4oQVVUSF9GQUlMVVJF KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmKFNSUF92ZXJpZnkoc19zcnAsIGRhdGEsIGNudCkg PT0gU1JQX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgIHJlc3AgPSBjc3RyX25ldygpOworICAgICAg ICAgICAgaWYoU1JQX3Jlc3BvbmQoc19zcnAsICZyZXNwKSAhPSBTUlBfU1VDQ0VTUykgeworICAg ICAgICAgICAgICAgIHByaW50ZigiRXJyb3IgY29tcHV0aW5nIHJlc3BvbnNlXHJcbiIpOworICAg ICAgICAgICAgICAgIFNlbmRTUlBBdXRoU0IoU1JQX1JFSkVDVCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICh2b2lkICopICJFcnJvciBjb21wdXRpbmcgcmVzcG9uc2UiLCAtMSk7Cisg ICAgICAgICAgICAgICAgcmV0dXJuKEFVVEhfRkFJTFVSRSk7CisgICAgICAgICAgICB9CisgICAg ICAgICAgICBTZW5kU1JQQXV0aFNCKFNSUF9BQ0NFUFQsIHJlc3AtPmRhdGEsIHJlc3AtPmxlbmd0 aCk7CisgICAgICAgICAgICBhY2NlcHRfY29tcGxldGUgPSAxOworICAgICAgICAgICAgY3N0cl9m cmVlKHJlc3ApOworCisjaWZkZWYgQ0tfRU5DUllQVElPTgorI2lmZGVmIENLX1NTTAorICAgICAg ICAgICAgaWYgKCEoc3NsX2FjdGl2ZV9mbGFnIHx8IHRsc19hY3RpdmVfZmxhZykpCisjZW5kaWYg LyogQ0tfU1NMICovCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc2tleS50eXBlID0g U0tfR0VORVJJQzsKKyAgICAgICAgICAgICAgICBza2V5Lmxlbmd0aCA9IHNfa2V5LT5sZW5ndGg7 CisgICAgICAgICAgICAgICAgc2tleS5kYXRhID0gc19rZXktPmRhdGE7CisgICAgICAgICAgICAg ICAgZW5jcnlwdF9zZXNzaW9uX2tleSgmc2tleSwgQVVUSF9TRVJWRVJfVE9fQ0xJRU5UKTsKKyAg ICAgICAgICAgICAgICBjc3RyX2NsZWFyX2ZyZWUoc19rZXkpOworICAgICAgICAgICAgICAgIHNf a2V5ID0gTlVMTDsKKyAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCisg ICAgICAgICAgICBhdXRoX2ZpbmlzaGVkKEFVVEhfVkFMSUQpOworICAgICAgICB9CisgICAgICAg IGVsc2UgeworICAgICAgICAgICAgU2VuZFNSUEF1dGhTQihTUlBfUkVKRUNULCAodm9pZCAqKSAi TG9naW4gaW5jb3JyZWN0IiwgLTEpOworICAgICAgICAgICAgYXV0aF9maW5pc2hlZChBVVRIX1JF SkVDVCk7CisgICAgICAgICAgICByZXR1cm4oQVVUSF9GQUlMVVJFKTsKKyAgICAgICAgfQorICAg ICAgICByZXR1cm4gQVVUSF9TVUNDRVNTOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgcHJpbnRm KCJVbmtub3duIFNSUCBvcHRpb24gJWRcclxuIiwgZGF0YVstMV0pOworICAgICAgICBTZW5kU1JQ QXV0aFNCKFNSUF9SRUpFQ1QsICh2b2lkICopICJVbmtub3duIG9wdGlvbiByZWNlaXZlZCIsIC0x KTsKKyAgICAgICAgcmV0dXJuKEFVVEhfRkFJTFVSRSk7CisgICAgfQorfQorI2VuZGlmIC8qIFBS RV9TUlBfMV83XzMgKi8KKyNlbmRpZiAvKiBTUlAgKi8KKworI2lmZGVmIEtSQjUKKyNpZmRlZiBL SU5JVAorLyoKKyAqIGNsaWVudHMva2luaXQva2luaXQuYworICoKKyAqIENvcHlyaWdodCAxOTkw IGJ5IHRoZSBNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LgorICogQWxsIFJp Z2h0cyBSZXNlcnZlZC4KKyAqCisgKiBFeHBvcnQgb2YgdGhpcyBzb2Z0d2FyZSBmcm9tIHRoZSBV bml0ZWQgU3RhdGVzIG9mIEFtZXJpY2EgbWF5CisgKiAgIHJlcXVpcmUgYSBzcGVjaWZpYyBsaWNl bnNlIGZyb20gdGhlIFVuaXRlZCBTdGF0ZXMgR292ZXJubWVudC4KKyAqICAgSXQgaXMgdGhlIHJl c3BvbnNpYmlsaXR5IG9mIGFueSBwZXJzb24gb3Igb3JnYW5pemF0aW9uIGNvbnRlbXBsYXRpbmcK KyAqICAgZXhwb3J0IHRvIG9idGFpbiBzdWNoIGEgbGljZW5zZSBiZWZvcmUgZXhwb3J0aW5nLgor ICoKKyAqIFdJVEhJTiBUSEFUIENPTlNUUkFJTlQsIHBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBt b2RpZnksIGFuZAorICogZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMgZG9jdW1lbnRh dGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kCisgKiB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRl ZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UgYXBwZWFyIGlu IGFsbCBjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kCisgKiB0 aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24s IGFuZCB0aGF0CisgKiB0aGUgbmFtZSBvZiBNLkkuVC4gbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNp bmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcKKyAqIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc29m dHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvcgorICogcGVybWlzc2lvbi4gIE0u SS5ULiBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mCisg KiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIg d2l0aG91dCBleHByZXNzCisgKiBvciBpbXBsaWVkIHdhcnJhbnR5LgorICoKKyAqCisgKiBJbml0 aWFsaXplIGEgY3JlZGVudGlhbHMgY2FjaGUuCisgKi8KKworI2RlZmluZSBLUkI1X0RFRkFVTFRf T1BUSU9OUyAwCisjZGVmaW5lIEtSQjVfREVGQVVMVF9MSUZFIDYwKjYwKjEwIC8qIDEwIGhvdXJz ICovCisKK3N0YXRpYyBrcmI1X2RhdGEgdGd0bmFtZSA9IHsKKyNpZm5kZWYgSEVJTURBTAorICAg IDAsCisjZW5kaWYgLyogSEVJTURBTCAqLworICAgIEtSQjVfVEdTX05BTUVfU0laRSwKKyAgICBL UkI1X1RHU19OQU1FCit9OworCisvKiBJbnRlcm5hbCBwcm90b3R5cGVzICovCitfUFJPVE9UWVAo c3RhdGljIGtyYjVfZXJyb3JfY29kZSBrcmI1X3ZhbGlkYXRlX3RndCwKKyAgICAgICAgKGtyYjVf Y29udGV4dCwga3JiNV9jY2FjaGUsa3JiNV9wcmluY2lwYWwsIGtyYjVfZGF0YSAqKSk7CitfUFJP VE9UWVAoc3RhdGljIGtyYjVfZXJyb3JfY29kZSBrcmI1X3JlbmV3X3RndCwKKyAgICAgICAgKGty YjVfY29udGV4dCwga3JiNV9jY2FjaGUsCisgICAgICAgICAgICAgICAgICAgICAgICBrcmI1X3By aW5jaXBhbCwga3JiNV9kYXRhICopKTsKK19QUk9UT1RZUChzdGF0aWMga3JiNV9lcnJvcl9jb2Rl IGtyYjVfdGd0X2dlbiwKKyAgICAgICAgKGtyYjVfY29udGV4dCwga3JiNV9jY2FjaGUsCisgICAg ICAgICAgICAgICAgICAgICAgICBrcmI1X3ByaW5jaXBhbCwga3JiNV9kYXRhICosIGludCBvcHQp KTsKKworI2lmZGVmIEtSQjVfSEFWRV9HRVRfSU5JVF9DUkVEUworc3RhdGljIGtyYjVfZXJyb3Jf Y29kZSBLUkI1X0NBTExDT05WCitja19rcmI1X3Byb21wdGVyKCBrcmI1X2NvbnRleHQgY29udGV4 dCwKKyAgICAgICAgICAgICAgICAgIHZvaWQgKmRhdGEsCisgICAgICAgICAgICAgICAgICBjb25z dCBjaGFyICpuYW1lLAorICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYmFubmVyLAorICAg ICAgICAgICAgICAgICAgaW50IG51bV9wcm9tcHRzLAorICAgICAgICAgICAgICAgICAga3JiNV9w cm9tcHQgcHJvbXB0c1tdKQoreworICAgIGtyYjVfZXJyb3JfY29kZSAgICAgZXJyY29kZSA9IDA7 CisgICAgaW50ICAgICAgICAgICAgICAgICBpOworI2lmZGVmIEtVSQorICAgIHN0cnVjdCB0eHRi b3ggKiB0YiA9IE5VTEw7CisjZWxzZSAvKiBLVUkgKi8KKyAgICBjaGFyICogcHJvbXB0ID0gTlVM TDsKKyNlbmRpZiAvKiBLVUkgKi8KKyAgICBpbnQgICAgbGVuID0gMCwgYmxlbj0wLCBubGVuPTA7 CisKKyAgICBkZWJ1ZyhGMTEwLCJja19rcmI1X3Byb21wdGVyIG5hbWUiLG5hbWUsMCk7CisgICAg ZGVidWcoRjExMCwiY2tfa3JiNV9wcm9tcHRlciBiYW5uZXIiLGJhbm5lciwwKTsKKyAgICBkZWJ1 ZyhGMTAxLCJja19rcmI1X3Byb21wdGVyIG51bV9wcm9tcHRzIiwiIixudW1fcHJvbXB0cyk7CisK KyAgICBpZiAobmFtZSkKKyAgICAgICAgbmxlbiA9IHN0cmxlbihuYW1lKSsyOworCisgICAgaWYg KGJhbm5lcikKKyAgICAgICAgYmxlbiA9IHN0cmxlbihiYW5uZXIpKzI7CisKKyNpZmRlZiBLVUkK KyAgICB0YiA9IChzdHJ1Y3QgdHh0Ym94ICopIG1hbGxvYyhzaXplb2Yoc3RydWN0IHR4dGJveCkg KiBudW1fcHJvbXB0cyk7CisgICAgaWYgKCB0YiAhPSBOVUxMICkgeworICAgICAgICBpbnQgb2s7 CisgICAgICAgIG1lbXNldCh0YiwwLHNpemVvZihzdHJ1Y3QgdHh0Ym94KSAqIG51bV9wcm9tcHRz KTsKKyAgICAgICAgZm9yICggaT0wOyBpIDwgbnVtX3Byb21wdHM7IGkrKyApIHsKKyAgICAgICAg ICAgIHRiW2ldLnRfYnVmID0gcHJvbXB0c1tpXS5yZXBseS0+ZGF0YTsKKyAgICAgICAgICAgIHRi W2ldLnRfbGVuID0gcHJvbXB0c1tpXS5yZXBseS0+bGVuZ3RoOworICAgICAgICAgICAgdGJbaV0u dF9sYmwgPSBwcm9tcHRzW2ldLnByb21wdDsKKyAgICAgICAgICAgIHRiW2ldLnRfZGZsdCA9IE5V TEw7CisgICAgICAgICAgICB0YltpXS50X2VjaG8gPSAocHJvbXB0c1tpXS5oaWRkZW4gPyAyIDog MSk7CisgICAgICAgIH0gICAKKworICAgICAgICBvayA9IHVxX210eHQoKGNoYXIgKiliYW5uZXIs TlVMTCxudW1fcHJvbXB0cyx0Yik7CisgICAgICAgIGlmICggb2sgKSB7CisgICAgICAgICAgICBm b3IgKCBpPTA7IGkgPCBudW1fcHJvbXB0czsgaSsrICkKKyAgICAgICAgICAgICAgICBwcm9tcHRz W2ldLnJlcGx5LT5sZW5ndGggPSBzdHJsZW4ocHJvbXB0c1tpXS5yZXBseS0+ZGF0YSk7CisgICAg ICAgIH0gZWxzZQorICAgICAgICAgICAgZXJyY29kZSA9IC0yOworICAgIH0KKyNlbHNlIC8qIEtV SSAqLworICAgIGZvciAoaSA9IDA7IGkgPCBudW1fcHJvbXB0czsgaSsrKSB7CisgICAgICAgIGRl YnVnKEYxMTEsImNrX2tyYjVfcHJvbXB0ZXIgcHJvbXB0Iixwcm9tcHRzW2ldLnByb21wdCxpKTsK KworICAgICAgICBpZiAoIHByb21wdCAmJiBsZW4gPCAobmxlbiArIGJsZW4gKyBzdHJsZW4ocHJv bXB0c1tpXS5wcm9tcHQpKzIpICkgeworICAgICAgICAgICAgZnJlZShwcm9tcHQpOworICAgICAg ICAgICAgcHJvbXB0ID0gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBpZiAoICFwcm9tcHQgKQor ICAgICAgICAgICAgcHJvbXB0ID0gKGNoYXIgKiltYWxsb2MobmxlbiArIGJsZW4gKyBzdHJsZW4o cHJvbXB0c1tpXS5wcm9tcHQpKzIpOworICAgICAgICBpZiAoICFwcm9tcHQgKSB7CisgICAgICAg ICAgICBlcnJjb2RlID0gS1JCNV9SQ19NQUxMT0M7CisgICAgICAgICAgICBnb3RvIGNsZWFudXA7 CisgICAgICAgIH0KKyAgICAgICAgbGVuID0gbmxlbiArIGJsZW4gKyBzdHJsZW4ocHJvbXB0c1tp XS5wcm9tcHQpKzI7CisgICAgICAgIGNrbWFreG1zZyhwcm9tcHQsbGVuLAorICAgICAgICAgICAg ICAgICAoY2hhciAqKSAobmFtZT9uYW1lOiIiKSwKKyAgICAgICAgICAgICAgICAgbmFtZT8iXHJc biI6IiIsCisgICAgICAgICAgICAgICAgIChjaGFyICopIChiYW5uZXI/YmFubmVyOiIiKSwKKyAg ICAgICAgICAgICAgICAgYmFubmVyPyJcclxuIjoiIiwKKyAgICAgICAgICAgICAgICAgKGNoYXIg Kilwcm9tcHRzW2ldLnByb21wdCwKKyAgICAgICAgICAgICAgICAgIjogIixOVUxMLE5VTEwsTlVM TCxOVUxMLE5VTEwsTlVMTCk7CisKKyAgICAgICAgbWVtc2V0KHByb21wdHNbaV0ucmVwbHktPmRh dGEsIDAsIHByb21wdHNbaV0ucmVwbHktPmxlbmd0aCk7CisgICAgICAgIGlmIChwcm9tcHRzW2ld LmhpZGRlbikgeworICAgICAgICAgICAgcmVhZHBhc3MocHJvbXB0LCBwcm9tcHRzW2ldLnJlcGx5 LT5kYXRhLAorICAgICAgICAgICAgICAgICAgICAgIHByb21wdHNbaV0ucmVwbHktPmxlbmd0aCk7 CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZWFkdGV4dChwcm9tcHQsIHByb21wdHNb aV0ucmVwbHktPmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgcHJvbXB0c1tpXS5yZXBseS0+ bGVuZ3RoKTsKKyAgICAgICAgfQorICAgICAgICBwcm9tcHRzW2ldLnJlcGx5LT5sZW5ndGggPSBz dHJsZW4ocHJvbXB0c1tpXS5yZXBseS0+ZGF0YSk7CisgICAgfQorI2VuZGlmIC8qIEtVSSAqLwor CisgIGNsZWFudXA6CisjaWZkZWYgS1VJCisgICAgaWYgKCB0YiApCisgICAgICAgIGZyZWUodGIp OworI2Vsc2UgLyogS1VJICovCisgICAgaWYgKCBwcm9tcHQgKQorICAgICAgICBmcmVlKHByb21w dCk7CisjZW5kaWYgLyogS1VJICovCisgICAgaWYgKGVycmNvZGUpIHsKKyAgICAgICAgZm9yIChp ID0gMDsgaSA8IG51bV9wcm9tcHRzOyBpKyspIHsKKyAgICAgICAgICAgIG1lbXNldChwcm9tcHRz W2ldLnJlcGx5LT5kYXRhLCAwLCBwcm9tcHRzW2ldLnJlcGx5LT5sZW5ndGgpOworICAgICAgICB9 CisgICAgfQorICAgIHJldHVybiBlcnJjb2RlOworfQorCisvKgorICogICAgICBJJ20gbm90IHJl YWxseSBzdXJlIHdoYXQgdG8gZG8gd2l0aCB0aGlzLiAgVGhlIE5STCBETExzIHVzZSBhCisgKiAg ICAgIGRpZmZlcmVudCBpbnRlcmZhY2UgZm9yIHRoZSBrcmI1X3Byb21wdGVyIGNhbGxiYWNrLiAg SXQgaGFzCisgKiAgICAgIG9uZSBsZXNzIHBhcmFtZXRlci4gICBUaGlzIGlzIGdvaW5nIHRvIGJl IHVnbHkuCisgKi8KK3N0YXRpYyBrcmI1X2Vycm9yX2NvZGUgS1JCNV9DQUxMQ09OVgorY2tfTlJM X2tyYjVfcHJvbXB0ZXIoIGtyYjVfY29udGV4dCBjb250ZXh0LAorICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IGNoYXIgKm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAq YmFubmVyLAorICAgICAgICAgICAgICAgICAgICAgIGludCBudW1fcHJvbXB0cywKKyAgICAgICAg ICAgICAgICAgICAgICBrcmI1X3Byb21wdCBwcm9tcHRzW10pCit7CisgICAgcmV0dXJuKGNrX2ty YjVfcHJvbXB0ZXIoY29udGV4dCxOVUxMLG5hbWUsYmFubmVyLG51bV9wcm9tcHRzLHByb21wdHMp KTsKK30KKyNlbmRpZiAvKiBLUkI1X0hBVkVfR0VUX0lOSVRfQ1JFRFMgKi8KKworI2lmZGVmIEtS QjUyNF9DT05WCitsb25nCit0cnlfY29udmVydDUyNChrcmI1X2NvbnRleHQgY3R4LCBrcmI1X3By aW5jaXBhbCBtZSwga3JiNV9jY2FjaGUgY2MpCit7CisgICAgY2hhciAqIHByb2duYW1lID0gImNv bnZlcnQ1MjQiOworICAgIGtyYjVfZXJyb3JfY29kZSBjb2RlID0gMDsKKyAgICBpbnQgaWNvZGUg PSAwOworICAgIGtyYjVfcHJpbmNpcGFsIGtwY3NlcnZlciA9IDA7CisgICAga3JiNV9jcmVkcyAq djVjcmVkcyA9IDA7CisgICAga3JiNV9jcmVkcyBpbmNyZWRzOworI2lmZGVmIE9TMgorICAgIExF QVNIX0NSRURFTlRJQUxTIHY0Y3JlZHM7CisjZWxzZSAvKiBPUzIgKi8KKyAgICBDUkVERU5USUFM UyB2NGNyZWRzOworI2VuZGlmIC8qIE9TMiAqLworCisgICAgbWVtc2V0KChjaGFyICopICZpbmNy ZWRzLCAwLCBzaXplb2YoaW5jcmVkcykpOworICAgIC8qCisgICAgICBGcm9tIHRoaXMgcG9pbnQg b24sIHdlIGNhbiBnb3RvIGNsZWFudXAgYmVjYXVzZSBpbmNyZWRzIGlzCisgICAgICBpbml0aWFs aXplZC4KKyAgICAqLworCisgICAgaWYgKChjb2RlID0ga3JiNV9idWlsZF9wcmluY2lwYWwoY3R4 LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZrcGNzZXJ2ZXIsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3JiNV9wcmluY19yZWFsbShjdHgsIG1l KS0+bGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtyYjVfcHJp bmNfcmVhbG0oY3R4LCBtZSktPmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgImtyYnRndCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3Ji NV9wcmluY19yZWFsbShjdHgsIG1lKS0+ZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBOVUxMKSkpIHsKKyAgICAgICAgY29tX2Vycihwcm9nbmFtZSwgY29kZSwKKyAg ICAgICAgICAgICAgICAid2hpbGUgY3JlYXRpbmcgc2VydmljZSBwcmluY2lwYWwgbmFtZSIpOwor ICAgICAgICBnb3RvIGNsZWFudXA7CisgICAgfQorCisgICAgbWVtc2V0KChjaGFyKikgJmluY3Jl ZHMsIDAsIHNpemVvZihpbmNyZWRzKSk7CisgICAgaW5jcmVkcy5jbGllbnQgPSBtZTsKKyAgICBp bmNyZWRzLnNlcnZlciA9IGtwY3NlcnZlcjsKKyAgICAvKiBQcmV2ZW50IGR1cGxpY2F0ZSBmcmVl IGNhbGxzLiAgKi8KKyAgICBrcGNzZXJ2ZXIgPSAwOworCisgICAgaW5jcmVkcy50aW1lcy5lbmR0 aW1lID0gMDsKKyAgICBpbmNyZWRzLmtleWJsb2NrLmVuY3R5cGUgPSBFTkNUWVBFX0RFU19DQkNf Q1JDOworICAgIGlmICgoY29kZSA9IGtyYjVfZ2V0X2NyZWRlbnRpYWxzKGN0eCwgMCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYywKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAmaW5jcmVkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAmdjVjcmVkcykpKSB7CisgICAgICAgIGNvbV9lcnIocHJvZ25hbWUsIGNvZGUsCisg ICAgICAgICAgICAgICAgImdldHRpbmcgVjUgY3JlZGVudGlhbHMiKTsKKyAgICAgICAgZ290byBj bGVhbnVwOworICAgIH0KKyAgICBpZiAoKGljb2RlID0ga3JiNTI0X2NvbnZlcnRfY3JlZHNfa2Rj KGN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHY1Y3JlZHMs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdjRjcmVkcykpKSB7 CisgICAgICAgIGNvbV9lcnIocHJvZ25hbWUsIGljb2RlLAorICAgICAgICAgICAgICAgICJjb252 ZXJ0aW5nIHRvIFY0IGNyZWRlbnRpYWxzIik7CisgICAgICAgIGdvdG8gY2xlYW51cDsKKyAgICB9 CisgICAgLyogdGhpcyBpcyBzdG9sZW4gZnJvbSB0aGUgdjQga2luaXQgKi8KKyAgICAvKiBpbml0 aWFsaXplIHRpY2tldCBjYWNoZSAqLworICAgIGlmICgoaWNvZGUgPSBrcmJfaW5fdGt0KHY0Y3Jl ZHMucG5hbWUsIHY0Y3JlZHMucGluc3QsIHY0Y3JlZHMucmVhbG0pCisgICAgICAgICAhPSBLU1VD Q0VTUykpIHsKKyAgICAgICAgY29tX2Vycihwcm9nbmFtZSwgaWNvZGUsCisgICAgICAgICAgICAg ICAgInRyeWluZyB0byBjcmVhdGUgdGhlIFY0IHRpY2tldCBmaWxlIik7CisgICAgICAgIGdvdG8g Y2xlYW51cDsKKyAgICB9CisgICAgLyogc3Rhc2ggdGlja2V0LCBzZXNzaW9uIGtleSwgZXRjLiBm b3IgZnV0dXJlIHVzZSAqLworICAgIGlmICgoaWNvZGUgPSBrcmJfc2F2ZV9jcmVkZW50aWFscyh2 NGNyZWRzLnNlcnZpY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHY0 Y3JlZHMuaW5zdGFuY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHY0 Y3JlZHMucmVhbG0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHY0Y3Jl ZHMuc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdjRjcmVk cy5saWZldGltZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdjRjcmVk cy5rdm5vLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmKHY0Y3JlZHMu dGlja2V0X3N0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdjRjcmVk cy5pc3N1ZV9kYXRlKSkpIHsKKyAgICAgICAgY29tX2Vycihwcm9nbmFtZSwgaWNvZGUsCisgICAg ICAgICAgICAgICAgInRyeWluZyB0byBzYXZlIHRoZSBWNCB0aWNrZXQiKTsKKyAgICAgICAgZ290 byBjbGVhbnVwOworICAgIH0KKworIGNsZWFudXA6CisgICAgbWVtc2V0KCZ2NGNyZWRzLCAwLCBz aXplb2YodjRjcmVkcykpOworICAgIGlmICh2NWNyZWRzKQorICAgICAgICBrcmI1X2ZyZWVfY3Jl ZHMoY3R4LCB2NWNyZWRzKTsKKyAgICBpbmNyZWRzLmNsaWVudCA9IDA7CisgICAga3JiNV9mcmVl X2NyZWRfY29udGVudHMoY3R4LCAmaW5jcmVkcyk7CisgICAgaWYgKGtwY3NlcnZlcikKKyAgICAg ICAga3JiNV9mcmVlX3ByaW5jaXBhbChjdHgsIGtwY3NlcnZlcik7CisgICAgcmV0dXJuICEoY29k ZSB8fCBpY29kZSk7Cit9CisjZW5kaWYgLyogS1JCNTI0X0NPTlYgKi8KKworI2RlZmluZSBOT19L RVlUQUIKKworaW50CisjaWZkZWYgQ0tfQU5TSUMKK2NrX2tyYjVfaW5pdFRHVCggc3RydWN0IGty Yl9vcF9kYXRhICogb3AsIHN0cnVjdCBrcmI1X2luaXRfZGF0YSAqIGluaXQsCisgICAgICAgICAg ICAgICAgIHN0cnVjdCBrcmI0X2luaXRfZGF0YSAqIGs0X2luaXQpCisjZWxzZQorY2tfa3JiNV9p bml0VEdUKG9wLGluaXQsazRfaW5pdCkKKyAgICBrcmJfb3BfZGF0YSAqIG9wOyBzdHJ1Y3Qga3Ji NV9pbml0X2RhdGEgKiBpbml0OworICAgIHN0cnVjdCBrcmI0X2luaXRfZGF0YSAqIGs0X2luaXQ7 CisjZW5kaWYgLyogQ0tfQU5TSUMqLworeworICAgIGtyYjVfY29udGV4dCBrY29udGV4dDsKKyAg ICBrcmI1X2NjYWNoZSBjY2FjaGUgPSBOVUxMOworICAgIGtyYjVfZGVsdGF0IGxpZmV0aW1lID0g S1JCNV9ERUZBVUxUX0xJRkU7ICAgLyogLWwgb3B0aW9uICovCisgICAga3JiNV90aW1lc3RhbXAg c3RhcnR0aW1lID0gMDsKKyAgICBrcmI1X2RlbHRhdCBybGlmZSA9IDA7CisgICAgaW50IG9wdGlv bnMgPSBLUkI1X0RFRkFVTFRfT1BUSU9OUzsKKyAgICBpbnQgb3B0aW9uOworICAgIGludCBlcnJm bGcgPSAwOworICAgIGtyYjVfZXJyb3JfY29kZSBjb2RlOworICAgIGtyYjVfcHJpbmNpcGFsIG1l PU5VTEw7CisgICAga3JiNV9wcmluY2lwYWwgc2VydmVyPU5VTEw7CisgICAga3JiNV9jcmVkcyBt eV9jcmVkczsKKyAgICBrcmI1X3RpbWVzdGFtcCBub3c7CisjaWZuZGVmIEhFSU1EQUwKKyAgICBr cmI1X2FkZHJlc3MgKiphZGRycyA9IChrcmI1X2FkZHJlc3MgKiopMDsKKyNlbmRpZiAvKiBIRUlN REFMICovCisgICAgaW50IGFkZHJfY291bnQ9MDsKKyAgICBpbnQgaSxqOworI2lmbmRlZiBOT19L RVlUQUIKKyAgICBpbnQgdXNlX2tleXRhYiA9IDA7ICAgICAgICAgICAgICAgICAvKiAtayBvcHRp b24gKi8KKyAgICBrcmI1X2tleXRhYiBrZXl0YWIgPSBOVUxMOworI2VuZGlmIC8qIE5PX0tFWVRB QiAqLworICAgIHN0cnVjdCBwYXNzd2QgKnB3ID0gMDsKKyAgICBpbnQgcHdzaXplOworICAgIGNo YXIgKmNsaWVudF9uYW1lPU5VTEwsIHByaW5jaXBhbFsyNTZdPSIiLCByZWFsbVsyNTZdPSIiLCBu dW1zdHJbNDBdPSIiOworICAgIGNoYXIgKnBhc3N3b3JkPU5VTEwsIHBhc3N3ZFs4MF09IiI7Cisj aWZkZWYgS1JCNV9IQVZFX0dFVF9JTklUX0NSRURTCisgICAga3JiNV9nZXRfaW5pdF9jcmVkc19v cHQgb3B0czsKKyNlbmRpZgorICAgIGNoYXIgKiBuYW1lOworICAgIGludCBsZW47CisKKyAgICBp ZiAoICFja19rcmI1X2lzX2luc3RhbGxlZCgpICkKKyAgICAgICAgcmV0dXJuKC0xKTsKKworI2lm ZGVmIENPTU1FTlQKKyAgICBwcmludGYoIktlcmJlcm9zIFYgaW5pdGlhbGl6YXRpb25cclxuIik7 CisjZW5kaWYgLyogQ09NTUVOVCAqLworCisgICAgY29kZSA9IGtyYjVfaW5pdF9jb250ZXh0KCZr Y29udGV4dCk7CisgICAgaWYgKGNvZGUpIHsKKyAgICAgICAgY29tX2Vycigia3JiNV9raW5pdCIs Y29kZSwid2hpbGUgaW5pdF9jb250ZXh0Iik7CisgICAgICAgIGtyYjVfZXJybm8gPSBjb2RlOwor ICAgICAgICBtYWtlc3RyKCZrcmI1X2Vycm1zZyxlcnJvcl9tZXNzYWdlKGtyYjVfZXJybm8pKTsK KyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9CisKKyAgICBkZWJ1ZyhGMTEwLCJrcmI1X2luaXQi LCJrcmI1X2luaXRfY29udGV4dCIsMCk7CisKKyAgICBpZiAoKGNvZGUgPSBrcmI1X3RpbWVvZmRh eShrY29udGV4dCwgJm5vdykpKSB7CisgICAgICAgIGNvbV9lcnIoImtyYjVfa2luaXQiLGNvZGUs IndoaWxlIGdldHRpbmcgdGltZSBvZiBkYXkiKTsKKyAgICAgICAgZ290byBleGl0X2s1X2luaXQ7 CisgICAgfQorCisjaWZkZWYgS1JCNV9IQVZFX0dFVF9JTklUX0NSRURTCisgICAgbWVtc2V0KCZv cHRzLCAwLCBzaXplb2Yob3B0cykpOworICAgIGtyYjVfZ2V0X2luaXRfY3JlZHNfb3B0X2luaXQo Jm9wdHMpOworICAgIGRlYnVnKEYxMTAsImtyYjVfaW5pdCIsImtyYjVfZ2V0X2luaXRfY3JlZHNf b3B0X2luaXQiLDApOworI2VuZGlmCisKKyAgICBpZiAoIGluaXQtPnJlbmV3YWJsZSApIHsKKyAg ICAgICAgb3B0aW9ucyB8PSBLRENfT1BUX1JFTkVXQUJMRTsKKyAgICAgICAgY2ttYWttc2cobnVt c3RyLHNpemVvZihudW1zdHIpLGNraXRvYShpbml0LT5yZW5ld2FibGUpLCJtIixOVUxMLE5VTEwp OworI2lmZGVmIEhFSU1EQUwKKyAgICAgICAgY29kZSA9IC0xOworI2Vsc2UgLyogSEVJTURBTCAq LworICAgICAgICBjb2RlID0ga3JiNV9zdHJpbmdfdG9fZGVsdGF0KG51bXN0ciwgJnJsaWZlKTsK KyNlbmRpZiAvKiBIRUlNREFMICovCisgICAgICAgIGlmIChjb2RlICE9IDAgfHwgcmxpZmUgPT0g MCkgeworICAgICAgICAgICAgcHJpbnRmKCJCYWQgcmVuZXdhYmxlIHRpbWUgdmFsdWUgJXNcclxu IiwgbnVtc3RyKTsKKyAgICAgICAgICAgIGVycmZsZysrOworICAgICAgICB9CisjaWZkZWYgS1JC NV9IQVZFX0dFVF9JTklUX0NSRURTCisgICAgICAgIGtyYjVfZ2V0X2luaXRfY3JlZHNfb3B0X3Nl dF9yZW5ld19saWZlKCZvcHRzLCBybGlmZSk7CisjZW5kaWYKKyAgICB9CisgICAgaWYgKCBpbml0 LT5yZW5ldyApIHsKKyAgICAgICAgLyogcmVuZXcgdGhlIHRpY2tldCAqLworICAgICAgICBvcHRp b25zIHw9IEtEQ19PUFRfUkVORVc7CisgICAgfQorCisgICAgaWYgKCBpbml0LT52YWxpZGF0ZSAp IHsKKyAgICAgICAgLyogdmFsaWRhdGUgdGhlIHRpY2tldCAqLworICAgICAgICBvcHRpb25zIHw9 IEtEQ19PUFRfVkFMSURBVEU7CisgICAgfQorICAgIGlmICggaW5pdC0+cHJveGlhYmxlICkgewor ICAgICAgICBvcHRpb25zIHw9IEtEQ19PUFRfUFJPWElBQkxFOworI2lmZGVmIEtSQjVfSEFWRV9H RVRfSU5JVF9DUkVEUworICAgICAgICBrcmI1X2dldF9pbml0X2NyZWRzX29wdF9zZXRfcHJveGlh YmxlKCZvcHRzLCAxKTsKKyNlbmRpZgorICAgIH0KKyAgICBpZiAoIGluaXQtPmZvcndhcmRhYmxl ICkgeworICAgICAgICBvcHRpb25zIHw9IEtEQ19PUFRfRk9SV0FSREFCTEU7CisjaWZkZWYgS1JC NV9IQVZFX0dFVF9JTklUX0NSRURTCisgICAgICAgIGtyYjVfZ2V0X2luaXRfY3JlZHNfb3B0X3Nl dF9mb3J3YXJkYWJsZSgmb3B0cywgMSk7CisjZW5kaWYKKyAgICB9CisjaWZuZGVmIE5PX0tFWVRB QgorICAgIGlmICggICkgeworICAgICAgICB1c2Vfa2V5dGFiID0gMTsKKyAgICB9CisgICAgaWYg KCAgKSB7CisgICAgICAgIGlmIChrZXl0YWIgPT0gTlVMTCAmJiBrZXl0YWJfbmFtZSAhPSBOVUxM KSB7CisgICAgICAgICAgICBjb2RlID0ga3JiNV9rdF9yZXNvbHZlKGtjb250ZXh0LCBrZXl0YWJf bmFtZSwgJmtleXRhYik7CisgICAgICAgICAgICBpZiAoY29kZSAhPSAwKSB7CisgICAgICAgICAg ICAgICAgZGVidWcoRjExMSwia3JiNV9pbml0IHJlc29sdmluZyBrZXl0YWIiLAorICAgICAgICAg ICAgICAgICAgICAgICAgIGtleXRhYl9uYW1lLGNvZGUpOworICAgICAgICAgICAgICAgIGVycmZs ZysrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorI2VuZGlmIC8qIE5PX0tFWVRB QiAqLworICAgIGlmICggaW5pdC0+bGlmZXRpbWUgKSB7CisgICAgICAgIGNrbWFrbXNnKG51bXN0 cixzaXplb2YobnVtc3RyKSxja2l0b2EoaW5pdC0+bGlmZXRpbWUpLCJtIixOVUxMLE5VTEwpOwor I2lmZGVmIEhFSU1EQUwKKyAgICAgICAgY29kZSA9IC0xOworI2Vsc2UgLyogSEVJTURBTCAqLwor ICAgICAgICBjb2RlID0ga3JiNV9zdHJpbmdfdG9fZGVsdGF0KG51bXN0ciwgJmxpZmV0aW1lKTsK KyNlbmRpZiAvKiBIRUlNREFMICovCisgICAgICAgIGlmIChjb2RlICE9IDAgfHwgbGlmZXRpbWUg PT0gMCkgeworICAgICAgICAgICAgcHJpbnRmKCJCYWQgbGlmZXRpbWUgdmFsdWUgJXNcclxuIiwg bnVtc3RyKTsKKyAgICAgICAgICAgIGVycmZsZysrOworICAgICAgICB9CisjaWZkZWYgS1JCNV9I QVZFX0dFVF9JTklUX0NSRURTCisgICAgICAgIGtyYjVfZ2V0X2luaXRfY3JlZHNfb3B0X3NldF90 a3RfbGlmZSgmb3B0cywgbGlmZXRpbWUpOworI2VuZGlmCisgICAgfQorICAgIGlmICggaW5pdC0+ cG9zdGRhdGUgKSB7CisgICAgICAgIC8qIENvbnZlcnQgY21kYXRlKCkgdG8gYSB0aW1lX3QgdmFs dWUgKi8KKyAgICAgICAgc3RydWN0IHRtICogdGltZV90bTsKKyAgICAgICAgc3RydWN0IHRtICog Y21kYXRlMnRtKGNoYXIgKixpbnQpOworICAgICAgICB0aW1lX3RtID0gY21kYXRlMnRtKGluaXQt PnBvc3RkYXRlLDApOworICAgICAgICBpZiAoIHRpbWVfdG0gKQorICAgICAgICAgICAgc3RhcnR0 aW1lID0gKGtyYjVfdGltZXN0YW1wKSBta3RpbWUodGltZV90bSk7CisKKyAgICAgICAgaWYgKGNv ZGUgIT0gMCB8fCBzdGFydHRpbWUgPT0gMCB8fCBzdGFydHRpbWUgPT0gLTEpIHsKKyAgICAgICAg ICAgIGtyYjVfZGVsdGF0IGt0bXA7CisjaWZkZWYgSEVJTURBTAorICAgICAgICAgICAgY29kZSA9 IC0xOworI2Vsc2UgLyogSEVJTURBTCAqLworICAgICAgICAgICAgY29kZSA9IGtyYjVfc3RyaW5n X3RvX2RlbHRhdChpbml0LT5wb3N0ZGF0ZSwgJmt0bXApOworI2VuZGlmIC8qIEhFSU1EQUwgKi8K KyAgICAgICAgICAgIGlmIChjb2RlID09IDAgJiYga3RtcCAhPSAwKSB7CisgICAgICAgICAgICAg ICAgc3RhcnR0aW1lID0gbm93ICsga3RtcDsKKyAgICAgICAgICAgICAgICBvcHRpb25zIHw9IEtE Q19PUFRfUE9TVERBVEVEOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBw cmludGYoIkJhZCBwb3N0ZGF0ZSBzdGFydCB0aW1lIHZhbHVlICVzXHJcbiIsCisgICAgICAgICAg ICAgICAgICAgICAgICBpbml0LT5wb3N0ZGF0ZSk7CisgICAgICAgICAgICAgICAgZXJyZmxnKys7 CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBvcHRpb25zIHw9 IEtEQ19PUFRfUE9TVERBVEVEOworICAgICAgICB9CisgICAgfQorCisgICAgZGVidWcoRjExMCwi a3JiNV9pbml0IHNlYXJjaGluZyBmb3IgY2NhY2hlIixvcC0+Y2FjaGUsMCk7CisKKyAgICBjb2Rl ID0gazVfZ2V0X2NjYWNoZShrY29udGV4dCwmY2NhY2hlLG9wLT5jYWNoZSk7CisgICAgaWYgKGNv ZGUgIT0gMCkgeworICAgICAgICBjb21fZXJyKCJrcmI1X2tpbml0Iixjb2RlLCJ3aGlsZSBnZXR0 aW5nIGRlZmF1bHQgY2NhY2hlIik7CisgICAgICAgIGdvdG8gZXhpdF9rNV9pbml0OworICAgIH0K KworICAgIC8qIFRoaXMgaXMgb3VyIHJlYWxtIHVubGVzcyBpdCBpcyBjaGFuZ2VkICovCisgICAg Y2tzdHJuY3B5KHJlYWxtLGluaXQtPnJlYWxtID8gaW5pdC0+cmVhbG0gOiBrcmI1X2RfcmVhbG0s IDI1Nik7CisKKyNpZmRlZiBCRVRBVEVTVAorICAgIC8qIFRoaXMgY29kZSBpcyBnb2luZyB0byB0 YWtlIHRoZSByZWFsbSBhbmQgYXR0ZW1wdCB0byBjb3JyZWN0ICovCisgICAgLyogdGhlIGNhc2Uu ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAg ICB7CisgICAgICAgIHByb2ZpbGVfdCBwcm9maWxlOworCisgICAgICAgIGNvZGUgPSBrcmI1X2dl dF9wcm9maWxlKGtjb250ZXh0LCAmcHJvZmlsZSk7CisgICAgICAgIGlmICggIWNvZGUgKSB7Cisg ICAgICAgICAgICBjb25zdCBjaGFyICAqbmFtZXNbNF07CisgICAgICAgICAgICBjaGFyICoqIHJl YWxtczsKKyAgICAgICAgICAgIGludCBmb3VuZCA9IDA7CisKKyAgICAgICAgICAgIG5hbWVzWzBd ID0gInJlYWxtcyI7CisgICAgICAgICAgICBuYW1lc1sxXSA9IE5VTEw7CisKKyAgICAgICAgICAg IGNvZGUgPSBwcm9maWxlX2dldF9zdWJzZWN0aW9uX25hbWVzKHByb2ZpbGUsbmFtZXMsJnJlYWxt cyk7CisgICAgICAgICAgICBpZiAoIGNvZGUgPT0gMCApIHsKKyAgICAgICAgICAgICAgICBpbnQg aT0wOworICAgICAgICAgICAgICAgIHdoaWxlICggcmVhbG1zW2ldICkgeworICAgICAgICAgICAg ICAgICAgICBpZiAoY2tzdHJjbXAocmVhbG0scmVhbG1zW2ldLC0xLDApID09IDApIHsKKyAgICAg ICAgICAgICAgICAgICAgICAgIHN0cmNweShyZWFsbSxyZWFsbXNbaV0pOworICAgICAgICAgICAg ICAgICAgICAgICAgZm91bmQgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaSsrOworICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIH0KKworI2lmZGVmIENLX0ROU19TUlYKKyAgICAgICAgICAg IGlmICggIWZvdW5kICkgeworICAgICAgICAgICAgICAgIGNoYXIgKiBkbnNfcmVhbG0gPSBOVUxM OworCisgICAgICAgICAgICAgICAgLyogV2UgZGlkIG5vdCBmaW5kIHRoZSByZWFsbSBpbiB0aGUg cHJvZmlsZSBzbyBsZXQncyB0cnkgRE5TICovCisgICAgICAgICAgICAgICAgbG9jYXRlX3R4dF9y cigiX2tlcmJlcm9zIixyZWFsbSwmZG5zX3JlYWxtKTsKKyAgICAgICAgICAgICAgICBpZiAoIGRu c19yZWFsbSAmJgorICAgICAgICAgICAgICAgICAgICAgY2tzdHJjbXAocmVhbG0sZG5zX3JlYWxt LC0xLDApID09IDAgJiYKKyAgICAgICAgICAgICAgICAgICAgIGNrc3RyY21wKHJlYWxtLGRuc19y ZWFsbSwtMSwxKSAhPSAwCisgICAgICAgICAgICAgICAgICAgICApIHsKKyAgICAgICAgICAgICAg ICAgICAgY2tzdHJuY3B5KHJlYWxtLGRuc19yZWFsbSwyNTYpOworICAgICAgICAgICAgICAgICAg ICBmcmVlKGRuc19yZWFsbSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorI2Vu ZGlmIC8qIENLX0ROU19TUlYgKi8KKyAgICAgICAgfQorCisgICAgICAgIGlmIChpbml0LT5yZWFs bSAmJgorICAgICAgICAgICAgIGNrc3RyY21wKHJlYWxtLGluaXQtPnJlYWxtLC0xLDApID09IDAg JiYKKyAgICAgICAgICAgICBja3N0cmNtcChyZWFsbSxpbml0LT5yZWFsbSwtMSwxKSAhPSAwKQor ICAgICAgICAgICAgc3RyY3B5KGluaXQtPnJlYWxtLHJlYWxtKTsKKyAgICAgICAgaWYgKGNrc3Ry Y21wKHJlYWxtLGtyYjVfZF9yZWFsbSwtMSwwKSA9PSAwICYmCisgICAgICAgICAgICAgY2tzdHJj bXAocmVhbG0sa3JiNV9kX3JlYWxtLC0xLDEpICE9IDApCisgICAgICAgICAgICBzdHJjcHkoa3Ji NV9kX3JlYWxtLHJlYWxtKTsKKyAgICB9CisjZW5kaWYgLyogQkVUQVRFU1QgKi8KKworICAgIGlm IChpbml0LT5wcmluY2lwYWwgPT0gTlVMTCkgeyAgICAgICAvKiBObyBwcmluY2lwYWwgbmFtZSBz cGVjaWZpZWQgKi8KKyNpZm5kZWYgTk9fS0VZVEFCCisgICAgICAgIGlmICh1c2Vfa2V5dGFiKSB7 CisgICAgICAgICAgICAvKiBVc2UgdGhlIGRlZmF1bHQgaG9zdC9zZXJ2aWNlIG5hbWUgKi8KKyAg ICAgICAgICAgIGNvZGUgPSBrcmI1X3NuYW1lX3RvX3ByaW5jaXBhbChrY29udGV4dCwgTlVMTCwg TlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS1JCNV9O VF9TUlZfSFNULCAmbWUpOworICAgICAgICAgICAgaWYgKGNvZGUgPT0gMCAmJgorICAgICAgICAg ICAgICAgIGtyYjVfcHJpbmNfcmVhbG0oa2NvbnRleHQsIG1lKS0+bGVuZ3RoIDwgc2l6ZW9mKHJl YWxtKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBTYXZlIHRoZSByZWFsbSAq LworICAgICAgICAgICAgICAgIG1lbWNweShyZWFsbSxrcmI1X3ByaW5jX3JlYWxtKGtjb250ZXh0 LCBtZSktPmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICBrcmI1X3ByaW5jX3JlYWxtKGtj b250ZXh0LCBtZSktPmxlbmd0aCk7IC8qIHNhZmUgKi8KKyAgICAgICAgICAgICAgICByZWFsbVtr cmI1X3ByaW5jX3JlYWxtKGtjb250ZXh0LCBtZSktPmxlbmd0aF09J1wwJzsKKyAgICAgICAgICAg IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgY29tX2Vycigia3JiNV9raW5pdCIsCisgICAgICAg ICAgICAgICAgICAgICAgICBjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgIndoZW4gY3Jl YXRpbmcgZGVmYXVsdCBzZXJ2ZXIgcHJpbmNpcGFsIG5hbWUiKTsKKyAgICAgICAgICAgICAgICBn b3RvIGV4aXRfazVfaW5pdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisjZW5kaWYg LyogTk9fS0VZVEFCICovCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCBsZW47CisgICAgICAg ICAgICBjaGFyICogbmFtZTsKKworICAgICAgICAgICAgLyogR2V0IGRlZmF1bHQgcHJpbmNpcGFs IGZyb20gY2FjaGUgaWYgb25lIGV4aXN0cyAqLworICAgICAgICAgICAgY29kZSA9IGtyYjVfY2Nf Z2V0X3ByaW5jaXBhbChrY29udGV4dCwgY2NhY2hlLCAmbWUpOworI2lmZGVmIEhFSU1EQUwKKyAg ICAgICAgICAgIG5hbWUgPSBtZS0+cmVhbG07CisgICAgICAgICAgICBsZW4gPSBzdHJsZW4obmFt ZSk7CisjZWxzZSAvKiBIRUlNREFMICovCisgICAgICAgICAgICBsZW4gPSBrcmI1X3ByaW5jX3Jl YWxtKGtjb250ZXh0LCBtZSktPmxlbmd0aDsKKyAgICAgICAgICAgIG5hbWUgPSBrcmI1X3ByaW5j X3JlYWxtKGtjb250ZXh0LCBtZSktPmRhdGE7CisjZW5kaWYgLyogSEVJTURBTCAqLworICAgICAg ICAgICAgaWYgKGNvZGUgPT0gMCAmJiBsZW4gPCBzaXplb2YocmVhbG0pKQorICAgICAgICAgICAg eworICAgICAgICAgICAgICAgIC8qIFNhdmUgdGhlIHJlYWxtICovCisgICAgICAgICAgICAgICAg bWVtY3B5KHJlYWxtLG5hbWUsbGVuKTsgLyogc2FmZSAqLworICAgICAgICAgICAgICAgIHJlYWxt W2xlbl09J1wwJzsKKyAgICAgICAgICAgIH0gZWxzZSB7CisjaWZkZWYgSEFWRV9QV0RfSAorICAg ICAgICAgICAgICAgIC8qIEVsc2Ugc2VhcmNoIHBhc3N3ZCBmaWxlIGZvciBjbGllbnQgKi8KKwor ICAgICAgICAgICAgICAgIHB3ID0gZ2V0cHd1aWQoKGludCkgZ2V0dWlkKCkpOworICAgICAgICAg ICAgICAgIGlmIChwdykgeworICAgICAgICAgICAgICAgICAgICBjaGFyIHByaW5jX3JlYWxtWzI1 Nl07CisgICAgICAgICAgICAgICAgICAgIGlmICggKHN0cmxlbihwdy0+cHdfbmFtZSkgKyBzdHJs ZW4ocmVhbG0pICsgMSkgPiAyNTUgKQorICAgICAgICAgICAgICAgICAgICAgICAgZ290byBleGl0 X2s1X2luaXQ7CisKKyAgICAgICAgICAgICAgICAgICAgY2tzdHJuY3B5KHByaW5jaXBhbCxwdy0+ cHdfbmFtZSwyNTYpOworICAgICAgICAgICAgICAgICAgICBja3N0cm5jcHkocHJpbmNfcmVhbG0s cHctPnB3X25hbWUsMjU2KTsKKyAgICAgICAgICAgICAgICAgICAgY2tzdHJuY2F0KHByaW5jX3Jl YWxtLCJAIiwyNTYpOworICAgICAgICAgICAgICAgICAgICBja3N0cm5jYXQocHJpbmNfcmVhbG0s cmVhbG0sMjU2KTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoKGNvZGUgPSBrcmI1X3BhcnNl X25hbWUoa2NvbnRleHQscHJpbmNfcmVhbG0sJm1lKSkpIHsKKyAgICAgICAgICAgICAgICAgICAg ICAgIGtyYjVfZXJybm8gPSBjb2RlOworICAgICAgICAgICAgICAgICAgICAgICAgY29tX2Vycigi a3JiNV9raW5pdCIsY29kZSwid2hlbiBwYXJzaW5nIG5hbWUiLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHByaW5jX3JlYWxtKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdv dG8gZXhpdF9rNV9pbml0OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKAorICAgICAgICAgICAgICAgICAg ICAgICAgIlVuYWJsZSB0byBpZGVudGlmeSB1c2VyIGZyb20gcGFzc3dvcmQgZmlsZVxyXG4iKTsK KyAgICAgICAgICAgICAgICAgICAgZ290byBleGl0X2s1X2luaXQ7CisgICAgICAgICAgICAgICAg fQorI2Vsc2UgLyogSEFWRV9QV0RfSCAqLworICAgICAgICAgICAgICAgIHByaW50ZigiVW5hYmxl IHRvIGlkZW50aWZ5IHVzZXJcclxuIik7CisgICAgICAgICAgICAgICAgZ290byBleGl0X2s1X2lu aXQ7CisjZW5kaWYgLyogSEFWRV9QV0RfSCAqLworICAgICAgICAgICAgfQorICAgICAgICB9CisK KyNpZmRlZiBIRUlNREFMCisgICAgICAgIGxlbiA9IG1lLT5uYW1lLm5hbWVfc3RyaW5nLmxlbjsK KyAgICAgICAgbmFtZSA9ICptZS0+bmFtZS5uYW1lX3N0cmluZy52YWw7CisjZWxzZSAvKiBIRUlN REFMICovCisgICAgICAgIGxlbiA9IGtyYjVfcHJpbmNfbmFtZShrY29udGV4dCwgbWUpLT5sZW5n dGg7CisgICAgICAgIG5hbWUgPSBrcmI1X3ByaW5jX25hbWUoa2NvbnRleHQsIG1lKS0+ZGF0YTsK KyNlbmRpZiAvKiBIRUlNREFMICovCisgICAgICAgIGlmICggbGVuIDwgc2l6ZW9mKHByaW5jaXBh bCkgKSB7CisgICAgICAgICAgICBtZW1jcHkocHJpbmNpcGFsLG5hbWUsbGVuKTsgICAgIC8qIHNh ZmUgKi8KKyAgICAgICAgICAgIHByaW5jaXBhbFtsZW5dPSdcMCc7CisgICAgICAgIH0KKyAgICB9 IC8qIFVzZSBzcGVjaWZpZWQgbmFtZSAqLworICAgIGVsc2UgeworICAgICAgICBjaGFyIHByaW5j X3JlYWxtWzI1Nl07CisgICAgICAgIGlmICggKHN0cmxlbihpbml0LT5wcmluY2lwYWwpICsKKyAg ICAgICAgICAgICAgKGluaXQtPmluc3RhbmNlID8gc3RybGVuKGluaXQtPmluc3RhbmNlKSsxIDog MCkgKworICAgICAgICAgICAgICBzdHJsZW4ocmVhbG0pCisgICAgICAgICAgICAgICsgMikgPiAy NTUgKQorICAgICAgICAgICAgIGdvdG8gZXhpdF9rNV9pbml0OworCisgICAgICAgIGNrc3RybmNw eShwcmluY2lwYWwsaW5pdC0+cHJpbmNpcGFsLDI1Nik7CisgICAgICAgIGNrc3RybmNweShwcmlu Y19yZWFsbSxpbml0LT5wcmluY2lwYWwsMjU2KTsKKyAgICAgICAgaWYgKGluaXQtPmluc3RhbmNl KSB7CisgICAgICAgICAgICBja3N0cm5jYXQocHJpbmNfcmVhbG0sIi8iLDI1Nik7CisgICAgICAg ICAgICBja3N0cm5jYXQocHJpbmNfcmVhbG0saW5pdC0+aW5zdGFuY2UsMjU2KTsKKyAgICAgICAg fQorICAgICAgICBpZiAocmVhbG1bMF0pIHsKKyAgICAgICAgICBja3N0cm5jYXQocHJpbmNfcmVh bG0sIkAiLDI1Nik7CisgICAgICAgICAgY2tzdHJuY2F0KHByaW5jX3JlYWxtLHJlYWxtLDI1Nik7 CisgICAgICAgIH0KKyAgICAgICAgaWYgKChjb2RlID0ga3JiNV9wYXJzZV9uYW1lIChrY29udGV4 dCwgcHJpbmNfcmVhbG0sICZtZSkpKSB7CisgICAgICAgICAgICBjb21fZXJyKCJrcmI1X2tpbml0 Iixjb2RlLCJ3aGVuIHBhcnNpbmcgbmFtZSIscHJpbmNfcmVhbG0pOworICAgICAgICAgICAgZ290 byBleGl0X2s1X2luaXQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoKGNvZGUgPSBrcmI1 X3VucGFyc2VfbmFtZShrY29udGV4dCwgbWUsICZjbGllbnRfbmFtZSkpKSB7CisgICAgICAgIGNv bV9lcnIoImtyYjVfa2luaXQiLGNvZGUsIndoZW4gdW5wYXJzaW5nIG5hbWUiKTsKKyAgICAgICAg Z290byBleGl0X2s1X2luaXQ7CisgICAgfQorICAgIGRlYnVnKEYxMTAsImtyYjVfaW5pdCBjbGll bnRfbmFtZSIsY2xpZW50X25hbWUsMCk7CisKKworICAgIG1lbXNldCgoY2hhciAqKSZteV9jcmVk cywgMCwgc2l6ZW9mKG15X2NyZWRzKSk7CisgICAgbXlfY3JlZHMuY2xpZW50ID0gbWU7CisKKyAg ICBpZiAoaW5pdC0+c2VydmljZSA9PSBOVUxMKSB7CisgICAgICAgIGlmICgoY29kZSA9CisgICAg ICAgICAgICAga3JiNV9idWlsZF9wcmluY2lwYWxfZXh0KGtjb250ZXh0LAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAmc2VydmVyLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzdHJsZW4ocmVhbG0pLHJlYWxtLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB0Z3RuYW1lLmxlbmd0aCwgdGd0bmFtZS5kYXRhLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4ocmVhbG0pLHJlYWxtLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSkpIHsKKyAgICAgICAgICAgIGNv bV9lcnIoImtyYjVfa2luaXQiLGNvZGUsIndoaWxlIGJ1aWxkaW5nIHNlcnZlciBuYW1lIik7Cisg ICAgICAgICAgICBnb3RvIGV4aXRfazVfaW5pdDsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7Cisg ICAgICAgIGlmIChjb2RlID0ga3JiNV9wYXJzZV9uYW1lKGtjb250ZXh0LCBpbml0LT5zZXJ2aWNl LCAmc2VydmVyKSkgeworICAgICAgICAgICAgY29tX2Vycigia3JiNV9raW5pdCIsY29kZSwid2hp bGUgcGFyc2luZyBzZXJ2aWNlIG5hbWUiLAorICAgICAgICAgICAgICAgICAgICBpbml0LT5zZXJ2 aWNlKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdF9rNV9pbml0OworICAgICAgICB9CisgICAgfQor CisgICAgbXlfY3JlZHMuc2VydmVyID0gc2VydmVyOworCisgICAgaWYgKG9wdGlvbnMgJiBLRENf T1BUX1BPU1REQVRFRCkgeworICAgICAgICBteV9jcmVkcy50aW1lcy5zdGFydHRpbWUgPSBzdGFy dHRpbWU7CisgICAgICAgIG15X2NyZWRzLnRpbWVzLmVuZHRpbWUgPSBzdGFydHRpbWUgKyBsaWZl dGltZTsKKyAgICB9IGVsc2UgeworICAgICAgICBteV9jcmVkcy50aW1lcy5zdGFydHRpbWUgPSAw OyAgIC8qIHN0YXJ0IHRpbWVyIHdoZW4gcmVxdWVzdAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGdldHMgdG8gS0RDICovCisgICAgICAgIG15X2NyZWRzLnRpbWVz LmVuZHRpbWUgPSBub3cgKyBsaWZldGltZTsKKyAgICB9CisgICAgaWYgKG9wdGlvbnMgJiBLRENf T1BUX1JFTkVXQUJMRSkgeworICAgICAgICBteV9jcmVkcy50aW1lcy5yZW5ld190aWxsID0gbm93 ICsgcmxpZmU7CisgICAgfSBlbHNlCisgICAgICAgIG15X2NyZWRzLnRpbWVzLnJlbmV3X3RpbGwg PSAwOworCisgICAgaWYgKG9wdGlvbnMgJiBLRENfT1BUX1ZBTElEQVRFKSB7CisgICAgICAgIGty YjVfZGF0YSBvdXRidWY7CisKKyNpZmRlZiBLUkI1X0hBVkVfR0VUX0lOSVRfQ1JFRFMKKyAgICAg ICAgY29kZSA9IGtyYjVfZ2V0X3ZhbGlkYXRlZF9jcmVkcyhrY29udGV4dCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbXlfY3JlZHMsIG1lLCBjY2FjaGUsIGluaXQt PnNlcnZpY2UpOworICAgICAgICBpZiAoIGNvZGUgPT0gLTEgKQorI2VuZGlmCisgICAgICAgIHsK KyNpZmRlZiBIRUlNREFMCisgICAgICAgICAgICBwcmludGYoIj92YWxpZGF0ZSBub3QgaW1wbGVt ZW50ZWRcclxuIik7CisgICAgICAgICAgICBjb2RlID0gLTE7CisgICAgICAgICAgICBnb3RvIGV4 aXRfazVfaW5pdDsKKyNlbHNlIC8qIEhFSU1EQUwgKi8KKyAgICAgICAgICAgIGNvZGUgPSBrcmI1 X3ZhbGlkYXRlX3RndChrY29udGV4dCwgY2NhY2hlLCBzZXJ2ZXIsICZvdXRidWYpOworI2VuZGlm IC8qIEhFSU1EQUwgKi8KKyAgICAgICAgfQorICAgICAgICBpZiAoY29kZSkgeworICAgICAgICAg ICAgY29tX2Vycigia3JiNV9raW5pdCIsY29kZSwidmFsaWRhdGluZyB0Z3QiKTsKKyAgICAgICAg ICAgIGdvdG8gZXhpdF9rNV9pbml0OworICAgICAgICB9CisgICAgICAgIC8qIHNob3VsZCBiZSBk b25lLi4uICovCisgICAgICAgIGdvdG8gZXhpdF9rNV9pbml0OworICAgIH0KKworICAgIGlmIChv cHRpb25zICYgS0RDX09QVF9SRU5FVykgeworICAgICAgICBrcmI1X2RhdGEgb3V0YnVmOworCisj aWZkZWYgS1JCNV9IQVZFX0dFVF9JTklUX0NSRURTCisgICAgICAgIGNvZGUgPSBrcmI1X2dldF9y ZW5ld2VkX2NyZWRzKGtjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAmbXlfY3JlZHMsIG1lLCBjY2FjaGUsIGluaXQtPnNlcnZpY2UpOworICAgICAgICBpZiAo IGNvZGUgPT0gLTEgKQorI2VuZGlmCisgICAgICAgIHsKKyNpZmRlZiBIRUlNREFMCisgICAgICAg ICAgICBwcmludGYoIj9yZW5ldyBub3QgaW1wbGVtZW50ZWRcclxuIik7CisgICAgICAgICAgICBj b2RlID0gLTE7CisgICAgICAgICAgICBnb3RvIGV4aXRfazVfaW5pdDsKKyNlbHNlIC8qIEhFSU1E QUwgKi8KKyAgICAgICAgICAgIGNvZGUgPSBrcmI1X3JlbmV3X3RndChrY29udGV4dCwgY2NhY2hl LCBzZXJ2ZXIsICZvdXRidWYpOworI2VuZGlmIC8qIEhFSU1EQUwgKi8KKyAgICAgICAgfQorICAg ICAgICBpZiAoY29kZSkgeworICAgICAgICAgICAgY29tX2Vycigia3JiNV9raW5pdCIsY29kZSwi d2hpbGUgcmVuZXdpbmcgdGd0Iik7CisgICAgICAgICAgICBnb3RvIGV4aXRfazVfaW5pdDsKKyAg ICAgICAgfQorICAgICAgICAvKiBzaG91bGQgYmUgZG9uZS4uLiAqLworICAgICAgICBnb3RvIHN0 b3JlX2NyZWQ7CisgICAgfQorCisjaWZuZGVmIEhFSU1EQUwKKyAgICBpZiAoIGluaXQtPmFkZHJz ICYmICFpbml0LT5ub19hZGRyZXNzZXMgKSB7CisgICAgICAgIC8qIGNvbnN0cnVjdCBhbiBhcnJh eSBvZiBrcmI1X2FkZHJlc3Mgc3RydWN0cyB0byBwYXNzIHRvIGdldF9pbl90a3QgKi8KKyAgICAg ICAgLyogaW5jbHVkZSBib3RoIHRoZSBsb2NhbCBpcCBhZGRyZXNzZXMgYXMgd2VsbCBhcyBhbnkg b3RoZXIgdGhhdCAgICAqLworICAgICAgICAvKiBhcmUgc3BlY2lmaWVkLiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgIHVuc2lnbmVk IGxvbmcgaXBhZGRyOworCisgICAgICAgIGZvciAoIGFkZHJfY291bnQ9MDthZGRyX2NvdW50PEtS QjVfTlVNX09GX0FERFJTO2FkZHJfY291bnQrKyApCisgICAgICAgICAgICBpZiAoIGluaXQtPmFk ZHJzW2FkZHJfY291bnRdID09IE5VTEwgKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAg ICAgIGlmIChhZGRyX2NvdW50ID4gMCkgeworICAgICAgICAgICAga3JiNV9hZGRyZXNzICoqIGxv Y2FsX2FkZHJzPU5VTEw7CisgICAgICAgICAgICBrcmI1X29zX2xvY2FsYWRkcihrY29udGV4dCwg JmxvY2FsX2FkZHJzKTsKKyAgICAgICAgICAgIGkgPSAwOworICAgICAgICAgICAgd2hpbGUgKCBs b2NhbF9hZGRyc1tpXSApCisgICAgICAgICAgICAgICAgaSsrOworICAgICAgICAgICAgYWRkcl9j b3VudCArPSBpOworCisgICAgICAgICAgICBhZGRycyA9IChrcmI1X2FkZHJlc3MgKiopCisgICAg ICAgICAgICAgIG1hbGxvYygoYWRkcl9jb3VudCsxKSAqIHNpemVvZihrcmI1X2FkZHJlc3MgKikp OworICAgICAgICAgICAgaWYgKCAhYWRkcnMgKSB7CisgICAgICAgICAgICAgICAga3JiNV9mcmVl X2FkZHJlc3NlcyhrY29udGV4dCwgbG9jYWxfYWRkcnMpOworICAgICAgICAgICAgICAgIGdvdG8g ZXhpdF9rNV9pbml0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgbWVtc2V0KGFkZHJzLCAw LCBzaXplb2Yoa3JiNV9hZGRyZXNzICopICogKGFkZHJfY291bnQrMSkpOworICAgICAgICAgICAg aSA9IDA7CisgICAgICAgICAgICB3aGlsZSAoIGxvY2FsX2FkZHJzW2ldICkgeworICAgICAgICAg ICAgICAgIGFkZHJzW2ldID0gKGtyYjVfYWRkcmVzcyAqKW1hbGxvYyhzaXplb2Yoa3JiNV9hZGRy ZXNzKSk7CisgICAgICAgICAgICAgICAgaWYgKGFkZHJzW2ldID09IE5VTEwpIHsKKyAgICAgICAg ICAgICAgICAgICAga3JiNV9mcmVlX2FkZHJlc3NlcyhrY29udGV4dCwgbG9jYWxfYWRkcnMpOwor ICAgICAgICAgICAgICAgICAgICBnb3RvIGV4aXRfazVfaW5pdDsKKyAgICAgICAgICAgICAgICB9 CisKKyAgICAgICAgICAgICAgICBhZGRyc1tpXS0+bWFnaWMgPSBsb2NhbF9hZGRyc1tpXS0+bWFn aWM7CisgICAgICAgICAgICAgICAgYWRkcnNbaV0tPmFkZHJ0eXBlID0gbG9jYWxfYWRkcnNbaV0t PmFkZHJ0eXBlOworICAgICAgICAgICAgICAgIGFkZHJzW2ldLT5sZW5ndGggPSBsb2NhbF9hZGRy c1tpXS0+bGVuZ3RoOworICAgICAgICAgICAgICAgIGFkZHJzW2ldLT5jb250ZW50cyA9ICh1bnNp Z25lZCBjaGFyICopbWFsbG9jKGFkZHJzW2ldLT5sZW5ndGgpOworICAgICAgICAgICAgICAgIGlm ICghYWRkcnNbaV0tPmNvbnRlbnRzKSB7CisgICAgICAgICAgICAgICAgICAgIGtyYjVfZnJlZV9h ZGRyZXNzZXMoa2NvbnRleHQsIGxvY2FsX2FkZHJzKTsKKyAgICAgICAgICAgICAgICAgICAgZ290 byBleGl0X2s1X2luaXQ7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbWVt Y3B5KGFkZHJzW2ldLT5jb250ZW50cyxsb2NhbF9hZGRyc1tpXS0+Y29udGVudHMsCisgICAgICAg ICAgICAgICAgICAgICAgICBsb2NhbF9hZGRyc1tpXS0+bGVuZ3RoKTsgICAgICAgIC8qIHNhZmUg Ki8KKyAgICAgICAgICAgICAgICBpKys7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBrcmI1 X2ZyZWVfYWRkcmVzc2VzKGtjb250ZXh0LCBsb2NhbF9hZGRycyk7CisKKyAgICAgICAgICAgIGZv ciAoIGo9MDtpPGFkZHJfY291bnQ7aSsrLGorKyApIHsKKyAgICAgICAgICAgICAgICBhZGRyc1tp XSA9IChrcmI1X2FkZHJlc3MgKiltYWxsb2Moc2l6ZW9mKGtyYjVfYWRkcmVzcykpOworICAgICAg ICAgICAgICAgIGlmIChhZGRyc1tpXSA9PSBOVUxMKQorICAgICAgICAgICAgICAgICAgICBnb3Rv IGV4aXRfazVfaW5pdDsKKworICAgICAgICAgICAgICAgIGFkZHJzW2ldLT5tYWdpYyA9IEtWNU1f QUREUkVTUzsKKyAgICAgICAgICAgICAgICBhZGRyc1tpXS0+YWRkcnR5cGUgPSBBRl9JTkVUOwor ICAgICAgICAgICAgICAgIGFkZHJzW2ldLT5sZW5ndGggPSA0OworICAgICAgICAgICAgICAgIGFk ZHJzW2ldLT5jb250ZW50cyA9ICh1bnNpZ25lZCBjaGFyICopbWFsbG9jKGFkZHJzW2ldLT5sZW5n dGgpOworICAgICAgICAgICAgICAgIGlmICghYWRkcnNbaV0tPmNvbnRlbnRzKQorICAgICAgICAg ICAgICAgICAgICBnb3RvIGV4aXRfazVfaW5pdDsKKworICAgICAgICAgICAgICAgIGlwYWRkciA9 IGluZXRfYWRkcihpbml0LT5hZGRyc1tqXSk7CisgICAgICAgICAgICAgICAgbWVtY3B5KGFkZHJz W2ldLT5jb250ZW50cywmaXBhZGRyLDQpOyAgIC8qIHNhZmUgKi8KKyAgICAgICAgICAgIH0KKyNp ZmRlZiBLUkI1X0hBVkVfR0VUX0lOSVRfQ1JFRFMKKyAgICAgICAgICAgIGtyYjVfZ2V0X2luaXRf Y3JlZHNfb3B0X3NldF9hZGRyZXNzX2xpc3QoJm9wdHMsYWRkcnMpOworI2VuZGlmCisgICAgICAg IH0KKyAgICAgfQorI2VuZGlmIC8qICFIRUlNREFMICovCisjaWZkZWYgS1JCNV9IQVZFX0dFVF9J TklUX0NSRURTCisgICAgaWYgKCBpbml0LT5ub19hZGRyZXNzZXMgKQorICAgICAgICBrcmI1X2dl dF9pbml0X2NyZWRzX29wdF9zZXRfYWRkcmVzc19saXN0KCZvcHRzLE5VTEwpOworI2VuZGlmCisK KyNpZm5kZWYgTk9fS0VZVEFCCisgICAgaWYgKCF1c2Vfa2V5dGFiKQorI2VuZGlmCisgICAgewor ICAgICAgICBpZiAoIGluaXQtPnBhc3N3b3JkICkgeworICAgICAgICAgICAgcHdzaXplID0gc3Ry bGVuKGluaXQtPnBhc3N3b3JkKTsKKyAgICAgICAgICAgIGlmICggcHdzaXplICkKKyAgICAgICAg ICAgICAgICBwYXNzd29yZCA9IGluaXQtPnBhc3N3b3JkOworICAgICAgICB9IGVsc2UgaWYgKGlu aXQtPmdldGs0ICYmIGs0X2luaXQpIHsKKyAgICAgICAgICAgIC8qIFdoZW4gd2UgYXJlIHJlcXVl c3RpbmcgdGhhdCBLNCB0aWNrZXRzIGJlIGF1dG9tYXRpY2FsbHkgKi8KKyAgICAgICAgICAgIC8q IGFjcXVpcmVkIHdoZW4gSzUgdGlja2V0cyBhcmUgYWNxdWlyZWQsIHdlIG11c3QgZ2V0IHRoZSAg Ki8KKyAgICAgICAgICAgIC8qIHBhc3N3b3JkIHVwIGZyb250LiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGNoYXIgcHJtcHRbMjU2XTsKKyAgICAg ICAgICAgIGV4dGVybiBjaGFyICogazVwcnByb21wdDsKKyAgICAgICAgICAgIGV4dGVybiBjaGFy ICogazVwd3Byb21wdDsKKyAgICAgICAgICAgIGludCBvayA9IDA7CisKKyAgICAgICAgICAgIGlm ICggazVwd3Byb21wdCAmJiBrNXB3cHJvbXB0WzBdICYmCisgICAgICAgICAgICAgICAgIChzdHJs ZW4oazVwd3Byb21wdCkgKyBzdHJsZW4ocHJpbmNpcGFsKSArCisgICAgICAgICAgICAgICAgICBz dHJsZW4ocmVhbG0pIC0gNCkgPCBzaXplb2YocHJtcHQpKSB7CisgICAgICAgICAgICAgICAgc3By aW50Zihwcm1wdCxrNXB3cHJvbXB0LHByaW5jaXBhbCxyZWFsbSk7CisgICAgICAgICAgICB9IGVs c2UKKyAgICAgICAgICAgICAgICBja21ha3htc2cocHJtcHQsc2l6ZW9mKHBybXB0KSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIGs1cHdwcm9tcHQgJiYgazVwd3Byb21wdFswXSA/IGs1cHdw cm9tcHQgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIktlcmJlcm9zIDUgUGFzc3dvcmQg Zm9yICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmluY2lwYWwsIkAiLHJlYWxtLCI6 ICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEws TlVMTCxOVUxMCisgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgb2sg PSB1cV90eHQoTlVMTCxwcm1wdCwyLE5VTEwscGFzc3dkLDgwLE5VTEwsREVGQVVMVF9VUV9USU1F T1VUKTsKKyAgICAgICAgICAgIGlmICggb2sgKQorICAgICAgICAgICAgICAgIHBhc3N3b3JkID0g cGFzc3dkOworCisgICAgICAgICAgICBpZiAoIGs0X2luaXQtPnBhc3N3b3JkID09IE5VTEwgKQor ICAgICAgICAgICAgICAgIG1ha2VzdHIoJms0X2luaXQtPnBhc3N3b3JkLHBhc3N3ZCk7CisgICAg ICAgIH0KKyNpZmRlZiBLUkI1X0hBVkVfR0VUX0lOSVRfQ1JFRFMKKyAgICAgICAgZGVidWcoRjEw MCwia3JiNV9pbml0IGNhbGxpbmcga3JiNV9nZXRfaW5pdF9jcmVkc19wYXNzd29yZCgpIiwiIiww KTsKKyNpZmRlZiBPUzIKKyAgICAgICAgaWYgKCBpc19OUkxfS1JCNSgpICkKKyAgICAgICAgICAg IGNvZGUgPSBrcmI1X2dldF9pbml0X2NyZWRzX3Bhc3N3b3JkKGtjb250ZXh0LCAmbXlfY3JlZHMs IG1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBh c3N3b3JkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICh2b2lkICopY2tfTlJMX2tyYjVfcHJvbXB0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzdGFydHRpbWUsIGluaXQtPnNlcnZpY2UsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm9wdHMpOworICAgICAg ICBlbHNlCisjZW5kaWYgLyogT1MyICovCisgICAgICAgICAgICBjb2RlID0ga3JiNV9nZXRfaW5p dF9jcmVkc19wYXNzd29yZChrY29udGV4dCwgJm15X2NyZWRzLCBtZSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzd29yZCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBja19rcmI1X3Byb21wdGVyLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnR0aW1l LCBpbml0LT5zZXJ2aWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICZvcHRzKTsKKyAgICAgICAgZGVidWcoRjExMSwia3JiNV9pbml0Iiwia3JiNV9n ZXRfaW5pdF9jcmVkc19wYXNzd29yZCgpIixjb2RlKTsKKworICAgICAgICBpZiAoIGNvZGUgPT0g LTEgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIXBhc3N3b3JkKSB7CisgICAgICAgICAg ICAgICAgY2hhciBwcm1wdFsyNTZdOworICAgICAgICAgICAgICAgIGludCBvazsKKworICAgICAg ICAgICAgICAgIGNrbWFrbXNnKHBybXB0LHNpemVvZihwcm1wdCksIktlcmJlcm9zIDUgUGFzc3dv cmQgZm9yICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWVudF9uYW1lLCI6ICIsTlVM TCk7CisgICAgICAgICAgICAgICAgb2sgPSB1cV90eHQoTlVMTCxwcm1wdCwyLE5VTEwscGFzc3dk LDgwLE5VTEwsCisJCQkgICAgREVGQVVMVF9VUV9USU1FT1VUKTsKKyAgICAgICAgICAgICAgICBp ZiAoIG9rICkKKyAgICAgICAgICAgICAgICAgICAgcGFzc3dvcmQgPSBwYXNzd2Q7CisgICAgICAg ICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGNvZGUgPSAtMjsKKyAgICAgICAg ICAgICAgICAgICAgZ290byBleGl0X2s1X2luaXQ7CisgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgfQorCisgICAgICAgICAgICBpZiAoICFwYXNzd29yZCApIAorICAgICAgICAgICAgICAg IHBhc3N3b3JkID0gIiI7CisgICAgICAgICAgICBjb2RlID0ga3JiNV9nZXRfaW5fdGt0X3dpdGhf cGFzc3dvcmQoa2NvbnRleHQsIG9wdGlvbnMsCisjaWZkZWYgSEVJTURBTAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAorI2Vsc2UgLyogSEVJ TURBTCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0 LT5ub19hZGRyZXNzZXMgPyBOVUxMIDphZGRycywKKyNlbmRpZiAvKiBIRUlNREFMICovCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEws CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3N3 b3JkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBO VUxMLCAmbXlfY3JlZHMsIE5VTEwpOworICAgICAgICAgICAgaWYgKCBjb2RlICkKKyAgICAgICAg ICAgICAgICBkZWJ1ZyhGMTExLCJrcmI1X2luaXQiLCJrcmI1X2dldF9pbl90a3Rfd2l0aF9wYXNz d29yZCgpIixjb2RlKTsKKyAgICAgICAgfQorI2Vsc2UgLyogS1JCNV9IQVZFX0dFVF9JTklUX0NS RURTICovCisgICAgICAgIGlmICghcGFzc3dvcmQpIHsKKyAgICAgICAgICAgIGNoYXIgcHJtcHRb MjU2XTsKKyAgICAgICAgICAgIGludCBvazsKKworICAgICAgICAgICAgY2ttYWttc2cocHJtcHQs c2l6ZW9mKHBybXB0KSwiS2VyYmVyb3MgNSBQYXNzd29yZCBmb3IgIiwKKyAgICAgICAgICAgICAg ICAgICAgICBjbGllbnRfbmFtZSwiOiAiLE5VTEwpOworICAgICAgICAgICAgb2sgPSB1cV90eHQo TlVMTCxwcm1wdCwyLE5VTEwscGFzc3dkLDgwLE5VTEwsREVGQVVMVF9VUV9USU1FT1VUKTsKKyAg ICAgICAgICAgIGlmICggb2sgKQorICAgICAgICAgICAgICAgIHBhc3N3b3JkID0gcGFzc3dkOwor ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgY29kZSA9IC0yOworICAgICAgICAg ICAgICAgIGdvdG8gZXhpdF9rNV9pbml0OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg ICAgIGlmICggIXBhc3N3b3JkICkgCisgICAgICAgICAgICBwYXNzd29yZCA9ICIiOworICAgICAg ICBjb2RlID0ga3JiNV9nZXRfaW5fdGt0X3dpdGhfcGFzc3dvcmQoa2NvbnRleHQsIG9wdGlvbnMs CisjaWZkZWYgSEVJTURBTAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIE5VTEwsCisjZWxzZSAvKiBIRUlNREFMICovCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGluaXQtPm5vX2FkZHJlc3NlcyA/IE5VTEwgOmFkZHJzLAor I2VuZGlmIC8qIEhFSU1EQUwgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBOVUxMLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHBhc3N3b3JkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIE5VTEwsICZteV9jcmVkcywgTlVMTCk7CisgICAgICAgIGlmICggY29kZSAp CisgICAgICAgICAgICBkZWJ1ZyhGMTExLCJrcmI1X2luaXQiLCJrcmI1X2dldF9pbl90a3Rfd2l0 aF9wYXNzd29yZCgpIixjb2RlKTsKKyNlbmRpZiAvKiBLUkI1X0hBVkVfR0VUX0lOSVRfQ1JFRFMg Ki8KKworICAgICAgICBpZiAoIGluaXQtPnBhc3N3b3JkICYmIHB3c2l6ZSA+IDAgKQorICAgICAg ICAgICAgbWVtc2V0KGluaXQtPnBhc3N3b3JkLCAwLCBwd3NpemUpOworICAgICAgICBtZW1zZXQo cGFzc3dkLDAsODApOworICAgIH0KKyNpZm5kZWYgTk9fS0VZVEFCCisgICAgZWxzZSB7CisjaWZk ZWYgS1JCNV9IQVZFX0dFVF9JTklUX0NSRURTCisgICAgICAgIGNvZGUgPSBrcmI1X2dldF9pbml0 X2NyZWRzX2tleXRhYihrY29udGV4dCwgJm15X2NyZWRzLCBtZSwga2V5dGFiLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0dGltZSwgaW5pdC0+c2Vydmlj ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb3B0cyk7Cisj aWZkZWYgT1MyCisgICAgICAgIGlmICggY29kZSA9PSAtMSkKKyAgICAgICAgICAgIGNvZGUgPSBr cmI1X2dldF9pbl90a3Rfd2l0aF9rZXl0YWIoa2NvbnRleHQsIG9wdGlvbnMsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdC0+bm9fYWRkcmVzc2VzID8gTlVM TCA6YWRkcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBOVUxMLCBOVUxMLCBrZXl0YWIsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAmbXlfY3JlZHMsIDApOworI2VuZGlmIC8qIE9TMiAqLworI2Vs c2UgLyogS1JCNV9IQVZFX0dFVF9JTklUX0NSRURTICovCisgICAgICAgIGNvZGUgPSBrcmI1X2dl dF9pbl90a3Rfd2l0aF9rZXl0YWIoa2NvbnRleHQsIG9wdGlvbnMsCisjaWZkZWYgSEVJTURBTAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAor I2Vsc2UgLyogSEVJTURBTCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbml0LT5ub19hZGRyZXNzZXMgPyBOVUxMIDphZGRycywKKyNlbmRpZiAvKiBIRUlN REFMICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEws IE5VTEwsIGtleXRhYiwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJm15X2NyZWRzLCAwKTsKKyNlbmRpZiAvKiBLUkI1X0hBVkVfR0VUX0lOSVRfQ1JF RFMgKi8KKyAgICB9CisjZW5kaWYKKworICAgIGlmIChjb2RlKSB7CisgICAgICAgIHN3aXRjaCAo Y29kZSkgeworICAgICAgICBjYXNlIEtSQjVLUkJfQVBfRVJSX0JBRF9JTlRFR1JJVFk6CisgICAg ICAgICAgICBwcmludGYoIlBhc3N3b3JkIGluY29ycmVjdFxyXG4iKTsKKyAgICAgICAgICAgIGdv dG8gZXhpdF9rNV9pbml0OworICAgICAgICBjYXNlIEtSQjVLUkJfQVBfRVJSX1Y0X1JFUExZOgor ICAgICAgICAgICAgaWYgKGluaXQtPmdldGs0ICYmIGs0X2luaXQpIHsKKyAgICAgICAgICAgICAg ICBwcmludGYoIktlcmJlcm9zIDUgVGlja2V0cyBub3Qgc3VwcG9ydCBieSBzZXJ2ZXIuICAiKTsK KyAgICAgICAgICAgICAgICBwcmludGYoIkEgdmVyc2lvbiA0IFRpY2tldCB3aWxsIGJlIHJlcXVl c3RlZC5cclxuIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBnb3RvIGV4aXRfazVfaW5p dDsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGdvdG8gZXhpdF9rNV9pbml0OworICAg ICAgICB9CisgICAgfQorCisgIHN0b3JlX2NyZWQ6CisgICAgZGVidWcoRjEwMCwia3JiNV9pbml0 IGNhbGxpbmcga3JiNV9jY19pbml0aWFsaXplKCkiLCIiLDApOworCisgICAgY29kZSA9IGtyYjVf Y2NfaW5pdGlhbGl6ZSAoa2NvbnRleHQsIGNjYWNoZSwgbWUpOworICAgIGlmICggY29kZSA9PSBL UkI1X0NDX0JBRE5BTUUgKSB7CisgICAgICAgIC8qIFRoaXMgaXMgYSByZWFsbHkgdWdseSBoYWNr IHRoYXQgc2hvdWxkIG5vdCBoYXZlIHRvIGJlIGhlcmUuCisgICAgICAgICAqIGtyYjVfY2NfaW5p dGlhbGl6ZSBzaG91bGQgbm90IGZhaWwgd2l0aCBhbiBlcnJvciBpZiB0aGUKKyAgICAgICAgICog Y2FjaGUgYWxyZWFkeSBleGlzdHMuICBUaGUgcmVhc29uIHRoZSBwcm9ibGVtIGlzIG9jY3VyaW5n CisgICAgICAgICAqIGlzIHRoYXQgdGhlIGtyYjUgbGlicmFyeSBpcyBubyBsb25nZXIgY2FsbGlu ZyBjY19kZXN0cm95KCkKKyAgICAgICAgICogd2hlbiBjY19pbml0aWFsaXplKCkgaXMgY2FsbGVk IGFuZCB0aGUgQ0NBUEkgaW1wbGVtZW50YXRpb24KKyAgICAgICAgICogb24gV2luZG93cyBoYXMg bm90IHlldCBiZWVuIGNvcnJlY3RlZCB0byBoYW5kbGUgaXQuICBUbworICAgICAgICAgKiBlbnN1 cmUgdGhhdCBLOTUgd2lsbCBjb250aW51ZSB0byB3b3JrIHdpdGggYm90aCB3ZSB3aWxsIGNhbGwK KyAgICAgICAgICogY2NfZGVzdHJveSgpIGlmIHRoZSBjY19pbml0aWFsaXplKCkgY2FsbCBmYWls cyB3aXRoIGEgQkFETkFNRQorICAgICAgICAgKiBlcnJvci4gIElmIHRoZSBjY19kZXN0cm95KCkg aXMgc3VjY2Vzc2Z1bCwgd2Ugd2lsbCB0cnkgYWdhaW4uCisgICAgICAgICAqLworCisgICAgICAg IGRlYnVnKEYxMDAsImtyYjVfaW5pdCBjYWxsaW5nIGtyYjVfY2NfZGVzdHJveSgpIiwiIiwwKTsK KyAgICAgICAgY29kZSA9IGtyYjVfY2NfZGVzdHJveSAoa2NvbnRleHQsIGNjYWNoZSk7CisgICAg ICAgIGlmICggIWNvZGUgKSB7CisgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJrcmI1X2luaXQgY2Fs bGluZyBrNV9nZXRfY2NhY2hlKCkiLCIiLDApOworICAgICAgICAgICAgY29kZSA9IGs1X2dldF9j Y2FjaGUoa2NvbnRleHQsJmNjYWNoZSxvcC0+Y2FjaGUpOworICAgICAgICAgICAgZGVidWcoRjEw MCwia3JiNV9pbml0IGNhbGxpbmcga3JiNV9jY19pbml0aWFsaXplKCkiLCIiLDApOworICAgICAg ICAgICAgY29kZSA9IGtyYjVfY2NfaW5pdGlhbGl6ZSAoa2NvbnRleHQsIGNjYWNoZSwgbWUpOwor ICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGNvZGUgPSBLUkI1X0NDX0JBRE5BTUU7CisgICAg fQorICAgIGlmIChjb2RlKSB7CisgICAgICAgIGNvbV9lcnIoImtyYjVfa2luaXQiLGNvZGUsIndo ZW4gaW5pdGlhbGl6aW5nIGNhY2hlIixvcC0+Y2FjaGUpOworICAgICAgICBnb3RvIGV4aXRfazVf aW5pdDsKKyAgICB9CisKKyAgICBkZWJ1ZyhGMTAwLCJrcmI1X2luaXQgY2FsbGluZyBrcmI1X2Nj X3N0b3JlX2NyZWQoKSIsIiIsMCk7CisgICAgY29kZSA9IGtyYjVfY2Nfc3RvcmVfY3JlZChrY29u dGV4dCwgY2NhY2hlLCAmbXlfY3JlZHMpOworICAgIGlmIChjb2RlKSB7CisgICAgICAgIGNvbV9l cnIoImtyYjVfa2luaXQiLGNvZGUsIndoaWxlIHN0b3JpbmcgY3JlZGVudGlhbHMiKTsKKyAgICAg ICAgZ290byBleGl0X2s1X2luaXQ7CisgICAgfQorCisgICAgaWYgKCBpbml0LT5nZXRrNCAmJiAK KyNpZmRlZiBLUkI1MjRfQ09OVgorICAgICAgICAgIXRyeV9jb252ZXJ0NTI0KGtjb250ZXh0LG1l LGNjYWNoZSkgJiYgCisjZW5kaWYgLyogS1JCNTI0X0NPTlYgKi8KKyAgICAgICAgIGs0X2luaXQg KSB7CisgICAgICAgIGludCBrNHJjID0gY2tfa3JiNF9pbml0VEdUKG9wLGs0X2luaXQpOworICAg ICAgICBpZiAoazRyYyA8IDApCisgICAgICAgICAgICBjb2RlID0gLTM7CisgICAgfQorCitleGl0 X2s1X2luaXQ6CisgICAgZGVidWcoRjEwMCwia3JiNV9pbml0IGV4aXRfazVfaW5pdCIsIiIsMCk7 CisKKyNpZm5kZWYgSEVJTURBTAorICAgIC8qIEZyZWUga3JiNV9hZGRyZXNzIHN0cnVjdHVyZXMg aWYgd2UgY3JlYXRlZCB0aGVtICovCisgICAgaWYgKCBhZGRycyApIHsKKyAgICAgICAgZm9yICgg aT0wO2k8YWRkcl9jb3VudDtpKysgKSB7CisgICAgICAgICAgICBpZiAoIGFkZHJzW2ldICkgewor ICAgICAgICAgICAgICAgIGlmICggYWRkcnNbaV0tPmNvbnRlbnRzICkKKyAgICAgICAgICAgICAg ICAgICAgZnJlZShhZGRyc1tpXS0+Y29udGVudHMpOworICAgICAgICAgICAgICAgIGZyZWUoYWRk cnNbaV0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorI2VuZGlmIC8qIEhFSU1E QUwgKi8KKworCisgICAga3JiNV9lcnJubyA9IGNvZGU7CisgICAgbWFrZXN0cigma3JiNV9lcnJt c2csa3JiNV9lcnJubyA/IGVycm9yX21lc3NhZ2Uoa3JiNV9lcnJubykgOiAiT0siKTsKKworICAg IGlmIChjbGllbnRfbmFtZSkKKyAgICAgICAga3JiNV9mcmVlX3VucGFyc2VkX25hbWUoa2NvbnRl eHQsIGNsaWVudF9uYW1lKTsKKworICAgIC8qIG15X2NyZWRzIGlzIHBvaW50aW5nIGF0IHNlcnZl ciAqLworICAgIGRlYnVnKEYxMDAsImtyYjVfaW5pdCBjYWxsaW5nIGtyYjVfZnJlZV9wcmluY2lw YWwoKSIsIiIsMCk7CisgICAga3JiNV9mcmVlX3ByaW5jaXBhbChrY29udGV4dCwgc2VydmVyKTsK KyAgICBkZWJ1ZyhGMTAwLCJrcmI1X2luaXQgY2FsbGluZyBrcmI1X2NjX2Nsb3NlKCkiLCIiLDAp OworICAgIGtyYjVfY2NfY2xvc2Uoa2NvbnRleHQsY2NhY2hlKTsKKyAgICBkZWJ1ZyhGMTAwLCJr cmI1X2luaXQgY2FsbGluZyBrcmI1X2ZyZWVfY29udGV4dCgpIiwiIiwwKTsKKyAgICBrcmI1X2Zy ZWVfY29udGV4dChrY29udGV4dCk7CisKKyAgICBpZiAoY29kZSAhPSAtMikKKyAgICAgICAgcHJp bnRmKCJSZXN1bHQgZnJvbSByZWFsbSAlczogJXNcclxuIixyZWFsbSwKKyAgICAgICAgICAgICAg ICBjb2RlPT0tMz8iVW5hYmxlIHRvIHJldHJpZXZlIEtlcmJlcm9zIElWIGNyZWRlbnRpYWxzIjoK KyAgICAgICAgICAgICAgICBjb2RlP2Vycm9yX21lc3NhZ2UoY29kZSk6Ik9LIik7CisgICAgcmV0 dXJuKGNvZGU/LTE6MCk7Cit9CisKKyNpZm5kZWYgSEVJTURBTAorI2RlZmluZSBWQUxJREFURSAw CisjZGVmaW5lIFJFTkVXIDEKKworLyogc3RyaXBwZWQgZG93biB2ZXJzaW9uIG9mIGtyYjVfbWtf cmVxICovCitzdGF0aWMga3JiNV9lcnJvcl9jb2RlCisjaWZkZWYgQ0tfQU5TSUMKK2tyYjVfdmFs aWRhdGVfdGd0KCBrcmI1X2NvbnRleHQgY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICBrcmI1 X2NjYWNoZSBjY2FjaGUsCisgICAgICAgICAgICAgICAgICAga3JiNV9wcmluY2lwYWwgICAgIHNl cnZlciwgLyogdGd0bmFtZSAqLworICAgICAgICAgICAgICAgICAgIGtyYjVfZGF0YSAqb3V0YnVm ICkKKyNlbHNlCitrcmI1X3ZhbGlkYXRlX3RndChjb250ZXh0LCBjY2FjaGUsIHNlcnZlciwgb3V0 YnVmKQorICAgICBrcmI1X2NvbnRleHQgY29udGV4dDsKKyAgICAga3JiNV9jY2FjaGUgY2NhY2hl OworICAgICBrcmI1X3ByaW5jaXBhbCAgICAgc2VydmVyOyAvKiB0Z3RuYW1lICovCisgICAgIGty YjVfZGF0YSAqb3V0YnVmOworI2VuZGlmCit7CisgICAgcmV0dXJuIGtyYjVfdGd0X2dlbihjb250 ZXh0LCBjY2FjaGUsIHNlcnZlciwgb3V0YnVmLCBWQUxJREFURSk7Cit9CisKKy8qIHN0cmlwcGVk IGRvd24gdmVyc2lvbiBvZiBrcmI1X21rX3JlcSAqLworc3RhdGljIGtyYjVfZXJyb3JfY29kZQor I2lmZGVmIENLX0FOU0lDCitrcmI1X3JlbmV3X3RndChrcmI1X2NvbnRleHQgY29udGV4dCwKKyAg ICAgICAgICAgICAgICBrcmI1X2NjYWNoZSBjY2FjaGUsCisgICAgICAgICAgICAgICAga3JiNV9w cmluY2lwYWwgICAgc2VydmVyLCAvKiB0Z3RuYW1lICovCisgICAgICAgICAgICAgICAga3JiNV9k YXRhICpvdXRidWYpCisjZWxzZQora3JiNV9yZW5ld190Z3QoY29udGV4dCwgY2NhY2hlLCBzZXJ2 ZXIsIG91dGJ1ZikKKyAgICAga3JiNV9jb250ZXh0IGNvbnRleHQ7CisgICAgIGtyYjVfY2NhY2hl IGNjYWNoZTsKKyAgICAga3JiNV9wcmluY2lwYWwgICAgICAgc2VydmVyOyAvKiB0Z3RuYW1lICov CisgICAgIGtyYjVfZGF0YSAqb3V0YnVmOworI2VuZGlmCit7CisgICAgcmV0dXJuIGtyYjVfdGd0 X2dlbihjb250ZXh0LCBjY2FjaGUsIHNlcnZlciwgb3V0YnVmLCBSRU5FVyk7Cit9CisKKworLyog c3RyaXBwZWQgZG93biB2ZXJzaW9uIG9mIGtyYjVfbWtfcmVxICovCitzdGF0aWMga3JiNV9lcnJv cl9jb2RlCisjaWZkZWYgQ0tfQU5TSUMKK2tyYjVfdGd0X2dlbihrcmI1X2NvbnRleHQgY29udGV4 dCwKKyAgICAgICAgICAgICAga3JiNV9jY2FjaGUgY2NhY2hlLAorICAgICAgICAgICAgICBrcmI1 X3ByaW5jaXBhbCAgICAgIHNlcnZlciwgLyogdGd0bmFtZSAqLworICAgICAgICAgICAgICBrcmI1 X2RhdGEgKm91dGJ1ZiwKKyAgICAgICAgICAgICAgaW50IG9wdCkKKyNlbHNlCitrcmI1X3RndF9n ZW4oY29udGV4dCwgY2NhY2hlLCBzZXJ2ZXIsIG91dGJ1Ziwgb3B0KQorICAgICBrcmI1X2NvbnRl eHQgY29udGV4dDsKKyAgICAga3JiNV9jY2FjaGUgY2NhY2hlOworICAgICBrcmI1X3ByaW5jaXBh bCAgICAgICBzZXJ2ZXI7IC8qIHRndG5hbWUgKi8KKyAgICAga3JiNV9kYXRhICpvdXRidWY7Cisg ICAgIGludCBvcHQ7CisjZW5kaWYKK3sKKyAgICBrcmI1X2Vycm9yX2NvZGUgICAgICAgcmV0dmFs OworICAgIGtyYjVfY3JlZHMgICAgICAgICAgKiBjcmVkc3A7CisgICAga3JiNV9jcmVkcyAgICAg ICAgICAgIGNyZWRzOworCisgICAgLyogb2J0YWluIHRpY2tldCAmIHNlc3Npb24ga2V5ICovCisg ICAgbWVtc2V0KChjaGFyICopJmNyZWRzLCAwLCBzaXplb2YoY3JlZHMpKTsKKyAgICBpZiAoKHJl dHZhbCA9IGtyYjVfY29weV9wcmluY2lwYWwoY29udGV4dCwgc2VydmVyLCAmY3JlZHMuc2VydmVy KSkpCisgICAgICAgIGdvdG8gY2xlYW51cDsKKworICAgIGlmICgocmV0dmFsID0ga3JiNV9jY19n ZXRfcHJpbmNpcGFsKGNvbnRleHQsIGNjYWNoZSwgJmNyZWRzLmNsaWVudCkpKQorICAgICAgICBn b3RvIGNsZWFudXBfY3JlZHM7CisKKyAgICBpZiAob3B0ID09IFZBTElEQVRFKSB7CisgICAgICAg IGlmICgocmV0dmFsID0ga3JiNV9nZXRfY3JlZGVudGlhbHNfdmFsaWRhdGUoY29udGV4dCwgMCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjY2Fj aGUsICZjcmVkcywgJmNyZWRzcCkpKQorICAgICAgICAgIGdvdG8gY2xlYW51cF9jcmVkczsKKyAg ICB9IGVsc2UgeworICAgICAgICBpZiAoKHJldHZhbCA9IGtyYjVfZ2V0X2NyZWRlbnRpYWxzX3Jl bmV3KGNvbnRleHQsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY2NhY2hlLCAmY3JlZHMsICZjcmVkc3ApKSkKKyAgICAgICAgICBnb3RvIGNsZWFu dXBfY3JlZHM7CisgICAgfQorCisgICAgLyogd2UgZG9uJ3QgYWN0dWFsbHkgbmVlZCB0byBkbyB0 aGUgbWtfcmVxLCBqdXN0IGdldCB0aGUgY3JlZHMuICovCitjbGVhbnVwX2NyZWRzOgorICAgIGty YjVfZnJlZV9jcmVkX2NvbnRlbnRzKGNvbnRleHQsICZjcmVkcyk7CisKK2NsZWFudXA6CisKKyAg ICByZXR1cm4gcmV0dmFsOworfQorI2VuZGlmIC8qIEhFSU1EQUwgKi8KKyNlbmRpZiAvKiBLSU5J VCAqLworI2lmZGVmIEtERVNUUk9ZCitpbnQKKyNpZmRlZiBDS19BTlNJQworY2tfa3JiNV9kZXN0 cm95KHN0cnVjdCBrcmJfb3BfZGF0YSAqIG9wKQorI2Vsc2UKK2NrX2tyYjVfZGVzdHJveShvcCkg c3RydWN0IGtyYl9vcF9kYXRhICogb3A7CisjZW5kaWYKK3sKKyAgICBrcmI1X2NvbnRleHQga2Nv bnRleHQ7CisgICAga3JiNV9lcnJvcl9jb2RlIHJldHZhbDsKKyAgICBpbnQgYzsKKyAgICBrcmI1 X2NjYWNoZSBjY2FjaGUgPSBOVUxMOworICAgIGNoYXIgKmNhY2hlX25hbWUgPSBOVUxMOworICAg IGludCBjb2RlOworICAgIGludCBlcnJmbGc9MDsKKyAgICBpbnQgcXVpZXQgPSAwOworCisgICAg aWYgKCAhY2tfa3JiNV9pc19pbnN0YWxsZWQoKSApCisgICAgICAgIHJldHVybigtMSk7CisKKyAg ICBjb2RlID0ga3JiNV9pbml0X2NvbnRleHQoJmtjb250ZXh0KTsKKyAgICBpZiAoY29kZSkgewor ICAgICAgICBkZWJ1ZyhGMTAxLCJja19rcmI1X2Rlc3Ryb3kgd2hpbGUgaW5pdGlhbGl6aW5nIGty YjUiLCIiLGNvZGUpOworICAgICAgICBrcmI1X2Vycm5vID0gY29kZTsKKyAgICAgICAgbWFrZXN0 cigma3JiNV9lcnJtc2csZXJyb3JfbWVzc2FnZShrcmI1X2Vycm5vKSk7CisgICAgICAgIHJldHVy bigtMSk7CisgICAgfQorCisgICAgY29kZSA9IGs1X2dldF9jY2FjaGUoa2NvbnRleHQsJmNjYWNo ZSxvcC0+Y2FjaGUpOworICAgIGlmIChjb2RlICE9IDApIHsKKyAgICAgICAgZGVidWcoRjEwMSwi Y2tfa3JiNV9kZXN0cm95IHdoaWxlIGdldHRpbmcgY2NhY2hlIiwKKyAgICAgICAgICAgICAgICIi LGNvZGUpOworICAgICAgICBrcmI1X2ZyZWVfY29udGV4dChrY29udGV4dCk7CisgICAgICAgIGty YjVfZXJybm8gPSBjb2RlOworICAgICAgICBtYWtlc3RyKCZrcmI1X2Vycm1zZyxlcnJvcl9tZXNz YWdlKGtyYjVfZXJybm8pKTsKKyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9CisKKyAgICBjb2Rl ID0ga3JiNV9jY19kZXN0cm95IChrY29udGV4dCwgY2NhY2hlKTsKKyAgICBpZiAoY29kZSAhPSAw KSB7CisgICAgICAgIGRlYnVnKEYxMDEsImNrX2tyYjVfZGVzdHJveSB3aGlsZSBkZXN0cm95aW5n IGNhY2hlIiwiIixjb2RlKTsKKyAgICAgICAgaWYgKCBjb2RlID09IEtSQjVfRkNDX05PRklMRSAp CisgICAgICAgICAgICBwcmludGYoIk5vIHRpY2tldCBjYWNoZSB0byBkZXN0cm95LlxyXG4iKTsK KyAgICAgICAgZWxzZQorICAgICAgICAgICAgcHJpbnRmKCJUaWNrZXQgY2FjaGUgTk9UIGRlc3Ry b3llZCFcclxuIik7CisgICAgICAgIGtyYjVfY2NfY2xvc2Uoa2NvbnRleHQsY2NhY2hlKTsKKyAg ICAgICAga3JiNV9mcmVlX2NvbnRleHQoa2NvbnRleHQpOworICAgICAgICBrcmI1X2Vycm5vID0g Y29kZTsKKyAgICAgICAgbWFrZXN0cigma3JiNV9lcnJtc2csZXJyb3JfbWVzc2FnZShrcmI1X2Vy cm5vKSk7CisgICAgICAgIHJldHVybigtMSk7CisgICAgfQorCisgICAgcHJpbnRmKCJUaWNrZXRz IGRlc3Ryb3llZC5cclxuIik7CisgICAgLyogRG8gbm90IGNhbGwga3JiNV9jY19jbG9zZSgpIGJl Y2F1c2UgY2FjaGUgaGFzIGJlZW4gZGVzdHJveWVkICovCisgICAga3JiNV9mcmVlX2NvbnRleHQo a2NvbnRleHQpOworICAgIGtyYjVfZXJybm8gPSAwOworICAgIG1ha2VzdHIoJmtyYjVfZXJybXNn LCJPSyIpOworICAgIHJldHVybiAoMCk7Cit9CisjZWxzZSAvKiBLREVTVFJPWSAqLworI2lmZGVm IEtSQjUKK2ludAorI2lmZGVmIENLX0FOU0lDCitja19rcmI1X2Rlc3Ryb3koc3RydWN0IGtyYl9v cF9kYXRhICogb3ApCisjZWxzZQorY2tfa3JiNV9kZXN0cm95KG9wKSBzdHJ1Y3Qga3JiX29wX2Rh dGEgKiBvcDsKKyNlbmRpZgoreworICAgIHByaW50ZigiP05vdCBpbXBsZW1lbnRlZC5cclxuIik7 CisgICAgcmV0dXJuKC0xKTsKK30KKyNlbmRpZiAvKiBLUkI1ICovCisjZW5kaWYgLyogS0RFU1RS T1kgKi8KKyNpZm5kZWYgS0xJU1QKKyNpZmRlZiBLUkI1CitpbnQKKyNpZmRlZiBDS19BTlNJQwor Y2tfa3JiNV9saXN0X2NyZWRzKHN0cnVjdCBrcmJfb3BfZGF0YSAqIG9wLCBzdHJ1Y3Qga3JiNV9s aXN0X2NyZWRfZGF0YSAqIGxjKQorI2Vsc2UKK2NrX2tyYjVfbGlzdF9jcmVkcyhvcCxsYykKKyAg ICBzdHJ1Y3Qga3JiX29wX2RhdGEgKiBvcDsgc3RydWN0IGtyYjVfbGlzdF9jcmVkX2RhdGEgKiBs YzsKKyNlbmRpZgoreworICAgIHByaW50ZigiP05vdCBpbXBsZW1lbnRlZC5cclxuIik7CisgICAg cmV0dXJuKC0xKTsKK30KKyNlbmRpZiAvKiBLUkI1ICovCisjZWxzZSAvKiBLTElTVCAqLworc3Rh dGljIGludCBzaG93X2ZsYWdzID0gMCwgc2hvd190aW1lID0gMCwgc3RhdHVzX29ubHkgPSAwLCBz aG93X2tleXMgPSAwOworc3RhdGljIGludCBzaG93X2V0eXBlID0gMCwgc2hvd19hZGRyID0gMDsK K3N0YXRpYyBjaGFyICpkZWZuYW1lOworc3RhdGljIGNoYXIgKnByb2duYW1lOworc3RhdGljIGty YjVfaW50MzIgbm93Oworc3RhdGljIGludCB0aW1lc3RhbXBfd2lkdGg7CisKK19QUk9UT1RZUChz dGF0aWMgY2hhciAqIGV0eXBlX3N0cmluZywgKGtyYjVfZW5jdHlwZSApKTsKK19QUk9UT1RZUChz dGF0aWMgdm9pZCBzaG93X2NyZWRlbnRpYWwsKGtyYjVfY29udGV4dCxrcmI1X2NyZWRzICopKTsK K19QUk9UT1RZUChzdGF0aWMgaW50IGRvX2NjYWNoZSwgKGtyYjVfY29udGV4dCxjaGFyICopKTsK K19QUk9UT1RZUChzdGF0aWMgaW50IGRvX2tleXRhYiwgKGtyYjVfY29udGV4dCxjaGFyICopKTsK K19QUk9UT1RZUChzdGF0aWMgdm9pZCBwcmludHRpbWUsICh0aW1lX3QpKTsKK19QUk9UT1RZUChz dGF0aWMgdm9pZCBmaWxsaXQsIChpbnQsIGludCkpOworCisjZGVmaW5lIERFRkFVTFQgMAorI2Rl ZmluZSBDQ0FDSEUgMQorI2RlZmluZSBLRVlUQUIgMgorCitpbnQKKyNpZmRlZiBDS19BTlNJQwor Y2tfa3JiNV9saXN0X2NyZWRzKHN0cnVjdCBrcmJfb3BfZGF0YSAqIG9wLCBzdHJ1Y3Qga3JiNV9s aXN0X2NyZWRfZGF0YSAqIGxjKQorI2Vsc2UKK2NrX2tyYjVfbGlzdF9jcmVkcyhvcCxsYykKKyAg ICBzdHJ1Y3Qga3JiX29wX2RhdGEgKiBvcDsgc3RydWN0IGtyYjVfbGlzdF9jcmVkX2RhdGEgKiBs YzsKKyNlbmRpZgoreworICAgIGtyYjVfY29udGV4dCBrY29udGV4dDsKKyAgICBrcmI1X2Vycm9y X2NvZGUgcmV0dmFsOworICAgIGludCBjb2RlOworICAgIGNoYXIgKm5hbWUgPSBvcC0+Y2FjaGU7 CisgICAgaW50IG1vZGU7CisKKyAgICBpZiAoICFja19rcmI1X2lzX2luc3RhbGxlZCgpICkKKyAg ICAgICAgcmV0dXJuKC0xKTsKKworICAgIGNvZGUgPSBrcmI1X2luaXRfY29udGV4dCgma2NvbnRl eHQpOworICAgIGlmIChjb2RlKSB7CisgICAgICAgIGRlYnVnKEYxMDEsImNrX2tyYjVfbGlzdF9j cmVkcyB3aGlsZSBpbml0aWFsaXppbmcga3JiNSIsIiIsY29kZSk7CisgICAgICAgIGtyYjVfZXJy bm8gPSBjb2RlOworICAgICAgICBtYWtlc3RyKCZrcmI1X2Vycm1zZyxlcnJvcl9tZXNzYWdlKGty YjVfZXJybm8pKTsKKyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9CisKKyAgICBuYW1lID0gb3At PmNhY2hlOworICAgIG1vZGUgPSBERUZBVUxUOworICAgIHNob3dfZmxhZ3MgPSAwOworICAgIHNo b3dfdGltZSA9IDA7CisgICAgc3RhdHVzX29ubHkgPSAwOworICAgIHNob3dfa2V5cyA9IDA7Cisg ICAgc2hvd19ldHlwZSA9IDA7CisgICAgc2hvd19hZGRyID0gMDsKKworICAgIHNob3dfZmxhZ3Mg PSBsYy0+ZmxhZ3M7CisgICAgc2hvd19ldHlwZSA9IGxjLT5lbmNyeXB0aW9uOworICAgIHNob3df YWRkciAgPSBsYy0+YWRkcjsKKyAgICBzaG93X3RpbWUgPSAxOworICAgIHNob3dfa2V5cyA9IDE7 CisgICAgbW9kZSA9IENDQUNIRTsKKworICAgIGlmICgoY29kZSA9IGtyYjVfdGltZW9mZGF5KGtj b250ZXh0LCAmbm93KSkpIHsKKyAgICAgICAgaWYgKCFzdGF0dXNfb25seSkKKyAgICAgICAgICAg IGRlYnVnKEYxMDEsImNrX2tyYjVfbGlzdF9jcmVkcyB3aGlsZSBnZXR0aW5nIHRpbWUgb2YgZGF5 LiIsCisgICAgICAgICAgICAgICAgICAgIiIsY29kZSk7CisgICAgICAgIGtyYjVfZnJlZV9jb250 ZXh0KGtjb250ZXh0KTsKKyAgICAgICAga3JiNV9lcnJubyA9IGNvZGU7CisgICAgICAgIG1ha2Vz dHIoJmtyYjVfZXJybXNnLGVycm9yX21lc3NhZ2Uoa3JiNV9lcnJubykpOworICAgICAgICByZXR1 cm4oLTEpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgY2hhciB0bXBbQlVGU0laXTsKKwor ICAgICAgICBpZiAoIWtyYjVfdGltZXN0YW1wX3RvX3Nmc3RyaW5nKG5vdywgdG1wLCAyMCwgKGNo YXIgKikgTlVMTCkgfHwKKyAgICAgICAgICAgICFrcmI1X3RpbWVzdGFtcF90b19zZnN0cmluZyhu b3csIHRtcCwgc2l6ZW9mKHRtcCksIChjaGFyICopIE5VTEwpKQorICAgICAgICAgICAgdGltZXN0 YW1wX3dpZHRoID0gKGludCkgc3RybGVuKHRtcCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg IHRpbWVzdGFtcF93aWR0aCA9IDE1OworICAgIH0KKworICAgIGlmIChtb2RlID09IERFRkFVTFQg fHwgbW9kZSA9PSBDQ0FDSEUpCisgICAgICAgICByZXR2YWwgPSBkb19jY2FjaGUoa2NvbnRleHQs bmFtZSk7CisgICAgZWxzZQorICAgICAgICAgcmV0dmFsID0gZG9fa2V5dGFiKGtjb250ZXh0LG5h bWUpOworICAgIGtyYjVfZnJlZV9jb250ZXh0KGtjb250ZXh0KTsKKyAgICByZXR1cm4ocmV0dmFs KTsKK30KKworc3RhdGljIGludAorI2lmZGVmIENLX0FOU0lDCitkb19rZXl0YWIoa3JiNV9jb250 ZXh0IGtjb250ZXh0LCBjaGFyICogbmFtZSkKKyNlbHNlCitkb19rZXl0YWIoa2NvbnRleHQsbmFt ZSkga3JiNV9jb250ZXh0IGtjb250ZXh0OyBjaGFyICogbmFtZTsKKyNlbmRpZgoreworICAgIGty YjVfa2V5dGFiIGt0OworICAgIGtyYjVfa2V5dGFiX2VudHJ5IGVudHJ5OworICAgIGtyYjVfa3Rf Y3Vyc29yIGN1cnNvcjsKKyAgICBjaGFyIGJ1ZltCVUZTSVpdOyAvKiBob3BlZnVsbHkgbGFyZ2Ug ZW5vdWdoIGZvciBhbnkgdHlwZSAqLworICAgIGNoYXIgKnBuYW1lOworICAgIGludCBjb2RlID0g MDsKKworICAgIGlmIChuYW1lID09IE5VTEwpIHsKKyAgICAgICAgaWYgKChjb2RlID0ga3JiNV9r dF9kZWZhdWx0KGtjb250ZXh0LCAma3QpKSkgeworICAgICAgICAgICAgZGVidWcoRjEwMSwiY2tf a3JiNV9saXN0X2NyZWRzIHdoaWxlIGdldHRpbmcgZGVmYXVsdCBrZXl0YWIiLAorICAgICAgICAg ICAgICAgICAgICIiLGNvZGUpOworICAgICAgICAgICAga3JiNV9lcnJubyA9IGNvZGU7CisgICAg ICAgICAgICBtYWtlc3RyKCZrcmI1X2Vycm1zZyxlcnJvcl9tZXNzYWdlKGtyYjVfZXJybm8pKTsK KyAgICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAg ICBpZiAoKGNvZGUgPSBrcmI1X2t0X3Jlc29sdmUoa2NvbnRleHQsIG5hbWUsICZrdCkpKSB7Cisg ICAgICAgICAgICBkZWJ1ZyhGMTExLCJja19rcmI1X2xpc3RfY3JlZHMgd2hpbGUgcmVzb2x2aW5n IGtleXRhYiIsCisgICAgICAgICAgICAgICAgICAgICBuYW1lLGNvZGUpOworICAgICAgICAgICAg a3JiNV9lcnJubyA9IGNvZGU7CisgICAgICAgICAgICBtYWtlc3RyKCZrcmI1X2Vycm1zZyxlcnJv cl9tZXNzYWdlKGtyYjVfZXJybm8pKTsKKyAgICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAg IH0KKyAgICB9CisKKyAgICBpZiAoKGNvZGUgPSBrcmI1X2t0X2dldF9uYW1lKGtjb250ZXh0LCBr dCwgYnVmLCBCVUZTSVopKSkgeworICAgICAgICBkZWJ1ZyhGMTAxLCJja19rcmI1X2xpc3RfY3Jl ZHMgd2hpbGUgZ2V0dGluZyBrZXl0YWIgbmFtZSIsCisgICAgICAgICAgICAgICAiIixjb2RlKTsK KyAgICAgICAga3JiNV9lcnJubyA9IGNvZGU7CisgICAgICAgIG1ha2VzdHIoJmtyYjVfZXJybXNn LGVycm9yX21lc3NhZ2Uoa3JiNV9lcnJubykpOworICAgICAgICByZXR1cm4oLTEpOworICAgIH0K KworICAgICBwcmludGYoIktleXRhYiBuYW1lOiAlc1xyXG4iLCBidWYpOworCisgICAgIGlmICgo Y29kZSA9IGtyYjVfa3Rfc3RhcnRfc2VxX2dldChrY29udGV4dCwga3QsICZjdXJzb3IpKSkgewor ICAgICAgICAgZGVidWcoRjEwMSwiY2tfa3JiNV9saXN0X2NyZWRzIHdoaWxlIHN0YXJ0aW5nIGtl eXRhYiBzY2FuIiwKKyAgICAgICAgICAgICAgICAiIixjb2RlKTsKKyAgICAgICAgIGtyYjVfZXJy bm8gPSBjb2RlOworICAgICAgICAgbWFrZXN0cigma3JiNV9lcnJtc2csZXJyb3JfbWVzc2FnZShr cmI1X2Vycm5vKSk7CisgICAgICAgICByZXR1cm4oLTEpOworICAgICB9CisKKyAgICAgaWYgKHNo b3dfdGltZSkgeworICAgICAgICAgIHByaW50ZigiS1ZOTyBUaW1lc3RhbXAiKTsKKyAgICAgICAg ICBmaWxsaXQodGltZXN0YW1wX3dpZHRoIC0gc2l6ZW9mKCJUaW1lc3RhbXAiKSArIDIsIChpbnQp ICcgJyk7CisgICAgICAgICAgcHJpbnRmKCJQcmluY2lwYWxcclxuIik7CisgICAgICAgICAgcHJp bnRmKCItLS0tICIpOworICAgICAgICAgIGZpbGxpdCh0aW1lc3RhbXBfd2lkdGgsIChpbnQpICct Jyk7CisgICAgICAgICAgcHJpbnRmKCIgIik7CisgICAgICAgICAgZmlsbGl0KDc4IC0gdGltZXN0 YW1wX3dpZHRoIC0gc2l6ZW9mKCJLVk5PIiksIChpbnQpICctJyk7CisgICAgICAgICAgcHJpbnRm KCJcclxuIik7CisgICAgIH0gZWxzZSB7CisgICAgICAgICAgcHJpbnRmKCJLVk5PIFByaW5jaXBh bFxyXG4iKTsKKyAgICAgICAgICBwcmludGYoCisiLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVwKKy0tLS0tLVxy XG4iKTsKKyAgICAgfQorCisgICAgd2hpbGUgKChjb2RlID0ga3JiNV9rdF9uZXh0X2VudHJ5KGtj b250ZXh0LCBrdCwgJmVudHJ5LCAmY3Vyc29yKSkgPT0gMCkgeworICAgICAgICBpZiAoKGNvZGUg PSBrcmI1X3VucGFyc2VfbmFtZShrY29udGV4dCwgZW50cnkucHJpbmNpcGFsLCAmcG5hbWUpKSkg eworICAgICAgICAgICAgZGVidWcoRjEwMSwiY2tfa3JiNV9saXN0X2NyZWRzIHdoaWxlIHVucGFy c2luZyBwcmluY2lwYWwgbmFtZSIsCisgICAgICAgICAgICAgICAgICAgIiIsY29kZSk7CisgICAg ICAgICAgICBrcmI1X2Vycm5vID0gY29kZTsKKyAgICAgICAgICAgIG1ha2VzdHIoJmtyYjVfZXJy bXNnLGVycm9yX21lc3NhZ2Uoa3JiNV9lcnJubykpOworICAgICAgICAgICAgcmV0dXJuKC0xKTsK KyAgICAgICAgfQorICAgICAgICBwcmludGYoIiU0ZCAiLCBlbnRyeS52bm8pOworICAgICAgICBp ZiAoc2hvd190aW1lKSB7CisgICAgICAgICAgICBwcmludHRpbWUoZW50cnkudGltZXN0YW1wKTsK KyAgICAgICAgICAgIHByaW50ZigiICIpOworICAgICAgICB9CisgICAgICAgIHByaW50ZigiJXMi LCBwbmFtZSk7CisgICAgICAgIGlmIChzaG93X2V0eXBlKQorICAgICAgICAgICAgcHJpbnRmKCIg KCVzKSAiICwKKyNpZmRlZiBIRUlNREFMCisgICAgICAgICAgICAgICAgICAgIGV0eXBlX3N0cmlu ZyhlbnRyeS5rZXkua2V5dHlwZSkKKyNlbHNlIC8qIEhFSU1EQUwgKi8KKyAgICAgICAgICAgICAg ICAgICAgZXR5cGVfc3RyaW5nKGVudHJ5LmtleS5lbmN0eXBlKQorI2VuZGlmIC8qIEhFSU1EQUwg Ki8KKyAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgaWYgKHNob3dfa2V5cykgeworICAg ICAgICAgICAgcHJpbnRmKCIgKDB4Iik7CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg aW50IGk7CisgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGVudHJ5LmtleS5sZW5ndGg7 IGkrKykKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIlMDJ4IiwKKyNpZmRlZiBIRUlNREFM CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnkua2V5LmtleXZhbHVlW2ldCisjZWxz ZSAvKiBIRUlNREFMICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnkua2V5LmNv bnRlbnRzW2ldCisjZW5kaWYgLyogSEVJTURBTCAqLworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwcmludGYoIikiKTsKKyAgICAgICAg fQorICAgICAgICBwcmludGYoIlxyXG4iKTsKKyAgICAgICAga3JiNV9mcmVlX3VucGFyc2VkX25h bWUoa2NvbnRleHQscG5hbWUpOworICAgIH0KKyAgICBpZiAoY29kZSAmJiBjb2RlICE9IEtSQjVf S1RfRU5EKSB7CisgICAgICAgIGRlYnVnKEYxMDEsImNrX2tyYjVfbGlzdF9jcmVkcyB3aGlsZSBz Y2FubmluZyBrZXl0YWIiLAorICAgICAgICAgICAgICAgIiIsY29kZSk7CisgICAgICAgIGtyYjVf ZXJybm8gPSBjb2RlOworICAgICAgICBtYWtlc3RyKCZrcmI1X2Vycm1zZyxlcnJvcl9tZXNzYWdl KGtyYjVfZXJybm8pKTsKKyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9CisgICAgaWYgKChjb2Rl ID0ga3JiNV9rdF9lbmRfc2VxX2dldChrY29udGV4dCwga3QsICZjdXJzb3IpKSkgeworICAgICAg ICBkZWJ1ZyhGMTAxLCJja19rcmI1X2xpc3RfY3JlZHMgd2hpbGUgZW5kaW5nIGtleXRhYiBzY2Fu IiwKKyAgICAgICAgICAgICAgICIiLGNvZGUpOworICAgICAgICBrcmI1X2Vycm5vID0gY29kZTsK KyAgICAgICAgbWFrZXN0cigma3JiNV9lcnJtc2csZXJyb3JfbWVzc2FnZShrcmI1X2Vycm5vKSk7 CisgICAgICAgIHJldHVybigtMSk7CisgICAgfQorICAgIGtyYjVfZXJybm8gPSAwOworICAgIG1h a2VzdHIoJmtyYjVfZXJybXNnLCJPSyIpOworICAgIHJldHVybigwKTsKK30KKworc3RhdGljIGlu dAorI2lmZGVmIENLX0FOU0lDCitkb19jY2FjaGUoa3JiNV9jb250ZXh0IGtjb250ZXh0LCBjaGFy ICogY2NfbmFtZSkKKyNlbHNlCitkb19jY2FjaGUoa2NvbnRleHQsbmFtZSkga3JiNV9jb250ZXh0 IGtjb250ZXh0OyBjaGFyICogY2NfbmFtZTsKKyNlbmRpZgoreworICAgIGtyYjVfY2NhY2hlIGNh Y2hlID0gTlVMTDsKKyAgICBrcmI1X2NjX2N1cnNvciBjdXI7CisgICAga3JiNV9jcmVkcyBjcmVk czsKKyAgICBrcmI1X3ByaW5jaXBhbCBwcmluYz1OVUxMOworICAgIGtyYjVfZmxhZ3MgZmxhZ3M9 MDsKKyAgICBrcmI1X2Vycm9yX2NvZGUgY29kZSA9IDA7CisgICAgaW50IGV4aXRfc3RhdHVzID0g MDsKKworICAgIGlmIChzdGF0dXNfb25seSkKKyAgICAgICAgLyogZXhpdF9zdGF0dXMgaXMgc2V0 IGJhY2sgdG8gMCBpZiBhIHZhbGlkIHRndCBpcyBmb3VuZCAqLworICAgICAgICBleGl0X3N0YXR1 cyA9IDE7CisKKyAgICBjb2RlID0gazVfZ2V0X2NjYWNoZShrY29udGV4dCwmY2FjaGUsY2NfbmFt ZSk7CisgICAgaWYgKGNvZGUgIT0gMCkgeworICAgICAgICBkZWJ1ZyhGMTExLCJkb19jY2FjaGUg d2hpbGUgZ2V0dGluZyBjY2FjaGUiLAorICAgICAgICAgICAgICAgZXJyb3JfbWVzc2FnZShjb2Rl KSxjb2RlKTsKKyAgICAgICAga3JiNV9lcnJubyA9IGNvZGU7CisgICAgICAgIG1ha2VzdHIoJmty YjVfZXJybXNnLGVycm9yX21lc3NhZ2Uoa3JiNV9lcnJubykpOworICAgICAgICByZXR1cm4oLTEp OworICAgIH0KKworICAgIGZsYWdzID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHR1 cm5zIG9mZiBPUEVOQ0xPU0UgbW9kZSAqLworICAgIGlmICgoY29kZSA9IGtyYjVfY2Nfc2V0X2Zs YWdzKGtjb250ZXh0LCBjYWNoZSwgZmxhZ3MpKSkgeworICAgICAgICBpZiAoY29kZSA9PSBFTk9F TlQpIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMTEsImNrX2tyYjVfbGlzdF9jcmVkcyAodGlja2V0 IGNhY2hlKSIsCisgICAgICAgICAgICAgICAgICAga3JiNV9jY19nZXRfbmFtZShrY29udGV4dCwg Y2FjaGUpLGNvZGUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZGVidWcoRjExMSwK KyAgICAgICAgICAgICAgICAgImNrX2tyYjVfbGlzdF9jcmVkcyB3aGlsZSBzZXR0aW5nIGNhY2hl IGZsYWdzICh0aWNrZXQgY2FjaGUpIiwKKyAgICAgICAgICAgICAgICAgIGtyYjVfY2NfZ2V0X25h bWUoa2NvbnRleHQsIGNhY2hlKSxjb2RlKTsKKyAgICAgICAgfQorICAgICAgICBwcmludGYoIk5v IHRpY2tldCBGaWxlLlxyXG4iKTsKKyAgICAgICAga3JiNV9lcnJubyA9IGNvZGU7CisgICAgICAg IG1ha2VzdHIoJmtyYjVfZXJybXNnLGVycm9yX21lc3NhZ2Uoa3JiNV9lcnJubykpOworICAgICAg ICBrcmI1X2NjX2Nsb3NlKGtjb250ZXh0LGNhY2hlKTsKKyAgICAgICAgcmV0dXJuKC0xKTsKKyAg ICB9CisgICAgaWYgKChjb2RlID0ga3JiNV9jY19nZXRfcHJpbmNpcGFsKGtjb250ZXh0LCBjYWNo ZSwgJnByaW5jKSkpIHsKKyAgICAgICAgZGVidWcoRjEwMSwiY2tfa3JiNV9saXN0X2NyZWRzIHdo aWxlIHJldHJpZXZpbmcgcHJpbmNpcGFsIG5hbWUiLAorICAgICAgICAgICAgICAgIiIsY29kZSk7 CisgICAgICAgIGtyYjVfZXJybm8gPSBjb2RlOworICAgICAgICBtYWtlc3RyKCZrcmI1X2Vycm1z ZyxlcnJvcl9tZXNzYWdlKGtyYjVfZXJybm8pKTsKKyAgICAgICAga3JiNV9jY19jbG9zZShrY29u dGV4dCxjYWNoZSk7CisgICAgICAgIHJldHVybigtMSk7CisgICAgfQorICAgIGlmICgoY29kZSA9 IGtyYjVfdW5wYXJzZV9uYW1lKGtjb250ZXh0LCBwcmluYywgJmRlZm5hbWUpKSkgeworICAgICAg ICBkZWJ1ZyhGMTAxLCJja19rcmI1X2xpc3RfY3JlZHMgd2hpbGUgdW5wYXJzaW5nIHByaW5jaXBh bCBuYW1lIiwKKyAgICAgICAgICAgICAgICIiLGNvZGUpOworICAgICAgICBrcmI1X2Vycm5vID0g Y29kZTsKKyAgICAgICAgbWFrZXN0cigma3JiNV9lcnJtc2csZXJyb3JfbWVzc2FnZShrcmI1X2Vy cm5vKSk7CisgICAgICAgIGtyYjVfY2NfY2xvc2Uoa2NvbnRleHQsY2FjaGUpOworICAgICAgICBy ZXR1cm4oLTEpOworICAgIH0KKyAgICBpZiAoIXN0YXR1c19vbmx5KSB7CisgICAgICAgIHByaW50 ZigiVGlja2V0IGNhY2hlOiAgICAgICVzOiVzXHJcbkRlZmF1bHQgcHJpbmNpcGFsOiAlc1xyXG5c clxuIiwKKyAgICAgICAgICAgICAgICBrcmI1X2NjX2dldF90eXBlKGtjb250ZXh0LCBjYWNoZSks CisgICAgICAgICAgICAgICAga3JiNV9jY19nZXRfbmFtZShrY29udGV4dCwgY2FjaGUpLCBkZWZu YW1lKTsKKyAgICAgICAgcHJpbnRmKCJWYWxpZCBzdGFydGluZyIpOworICAgICAgICBmaWxsaXQo dGltZXN0YW1wX3dpZHRoIC0gc2l6ZW9mKCJWYWxpZCBzdGFydGluZyIpICsgMywKKyAgICAgICAg ICAgICAgIChpbnQpICcgJyk7CisgICAgICAgIHByaW50ZigiRXhwaXJlcyIpOworICAgICAgICBm aWxsaXQodGltZXN0YW1wX3dpZHRoIC0gc2l6ZW9mKCJFeHBpcmVzIikgKyAzLAorICAgICAgICAg ICAgICAgKGludCkgJyAnKTsKKyAgICAgICAgcHJpbnRmKCJTZXJ2aWNlIHByaW5jaXBhbFxyXG4i KTsKKyAgICB9CisgICAgaWYgKChjb2RlID0ga3JiNV9jY19zdGFydF9zZXFfZ2V0KGtjb250ZXh0 LCBjYWNoZSwgJmN1cikpKSB7CisgICAgICAgIGRlYnVnKEYxMDEsImNrX2tyYjVfbGlzdF9jcmVk cyB3aGlsZSBzdGFydGluZyB0byByZXRyaWV2ZSB0aWNrZXRzIiwKKyAgICAgICAgICAgICAgICIi LGNvZGUpOworICAgICAgICBrcmI1X2Vycm5vID0gY29kZTsKKyAgICAgICAgbWFrZXN0cigma3Ji NV9lcnJtc2csZXJyb3JfbWVzc2FnZShrcmI1X2Vycm5vKSk7CisgICAgICAgIGtyYjVfY2NfY2xv c2Uoa2NvbnRleHQsY2FjaGUpOworICAgICAgICByZXR1cm4oLTEpOworICAgIH0KKyAgICB3aGls ZSAoIShjb2RlID0ga3JiNV9jY19uZXh0X2NyZWQoa2NvbnRleHQsIGNhY2hlLCAmY3VyLCAmY3Jl ZHMpKSkgeworICAgICAgICBpZiAoc3RhdHVzX29ubHkpIHsKKyAgICAgICAgICAgIGlmIChleGl0 X3N0YXR1cyAmJiBjcmVkcy5zZXJ2ZXItPmxlbmd0aCA9PSAyICYmCisgICAgICAgICAgICAgICAg c3RyY21wKGNyZWRzLnNlcnZlci0+cmVhbG0uZGF0YSwgcHJpbmMtPnJlYWxtLmRhdGEpID09IDAg JiYKKyAgICAgICAgICAgICAgICBzdHJjbXAoKGNoYXIgKiljcmVkcy5zZXJ2ZXItPmRhdGFbMF0u ZGF0YSwgImtyYnRndCIpID09IDAgJiYKKyAgICAgICAgICAgICAgICBzdHJjbXAoKGNoYXIgKilj cmVkcy5zZXJ2ZXItPmRhdGFbMV0uZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgcHJpbmMt PnJlYWxtLmRhdGEpID09IDAgJiYKKyAgICAgICAgICAgICAgICBjcmVkcy50aW1lcy5lbmR0aW1l ID4gbm93KQorICAgICAgICAgICAgICAgIGV4aXRfc3RhdHVzID0gMDsKKyAgICAgICAgfSBlbHNl IHsKKyAgICAgICAgICAgIHNob3dfY3JlZGVudGlhbChrY29udGV4dCwgJmNyZWRzKTsKKyAgICAg ICAgfQorICAgICAgICBrcmI1X2ZyZWVfY3JlZF9jb250ZW50cyhrY29udGV4dCwgJmNyZWRzKTsK KyAgICB9CisgICAgcHJpbnRmKCJcclxuIik7CisgICAgaWYgKGNvZGUgPT0gS1JCNV9DQ19FTkQg fHwgY29kZSA9PSBLUkI1X0NDX05PVEZPVU5EKSB7CisgICAgICAgIGlmICgoY29kZSA9IGtyYjVf Y2NfZW5kX3NlcV9nZXQoa2NvbnRleHQsIGNhY2hlLCAmY3VyKSkpIHsKKyAgICAgICAgICAgIGRl YnVnKEYxMDEsImNrX2tyYjVfbGlzdF9jcmVkcyB3aGlsZSBmaW5pc2hpbmcgdGlja2V0IHJldHJp ZXZhbCIsCisgICAgICAgICAgICAgICAgICAgIiIsY29kZSk7CisgICAgICAgICAgICBrcmI1X2Vy cm5vID0gY29kZTsKKyAgICAgICAgICAgIG1ha2VzdHIoJmtyYjVfZXJybXNnLGVycm9yX21lc3Nh Z2Uoa3JiNV9lcnJubykpOworICAgICAgICAgICAga3JiNV9jY19jbG9zZShrY29udGV4dCxjYWNo ZSk7CisgICAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICB9CisgICAgICAgIGZsYWdzID0g S1JCNV9UQ19PUEVOQ0xPU0U7ICAgICAgLyogdHVybnMgb24gT1BFTkNMT1NFIG1vZGUgKi8KKyAg ICAgICAgaWYgKChjb2RlID0ga3JiNV9jY19zZXRfZmxhZ3Moa2NvbnRleHQsIGNhY2hlLCBmbGFn cykpKSB7CisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJja19rcmI1X2xpc3RfY3JlZHMgd2hpbGUg Y2xvc2luZyBjY2FjaGUiLAorICAgICAgICAgICAgICAgICAgICIiLGNvZGUpOworICAgICAgICAg ICAga3JiNV9lcnJubyA9IGNvZGU7CisgICAgICAgICAgICBtYWtlc3RyKCZrcmI1X2Vycm1zZyxl cnJvcl9tZXNzYWdlKGtyYjVfZXJybm8pKTsKKyAgICAgICAgICAgIGtyYjVfY2NfY2xvc2Uoa2Nv bnRleHQsY2FjaGUpOworICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgfQorICAgICAg ICBrcmI1X2Vycm5vID0gMDsKKyAgICAgICAgbWFrZXN0cigma3JiNV9lcnJtc2csIk9LIik7Cisg ICAgICAgIGtyYjVfY2NfY2xvc2Uoa2NvbnRleHQsY2FjaGUpOworICAgICAgICByZXR1cm4oMCk7 CisgICAgfSBlbHNlIHsKKyAgICAgICAgZGVidWcoRjEwMSwiY2tfa3JiNV9saXN0X2NyZWRzIHdo aWxlIHJldHJpZXZpbmcgYSB0aWNrZXQiLCIiLGNvZGUpOworICAgICAgICBrcmI1X2Vycm5vID0g Y29kZTsKKyAgICAgICAgbWFrZXN0cigma3JiNV9lcnJtc2csZXJyb3JfbWVzc2FnZShrcmI1X2Vy cm5vKSk7CisgICAgICAgIGtyYjVfY2NfY2xvc2Uoa2NvbnRleHQsY2FjaGUpOworICAgICAgICBy ZXR1cm4oLTEpOworICAgIH0KKyAgICBrcmI1X2Vycm5vID0gMDsKKyAgICBtYWtlc3RyKCZrcmI1 X2Vycm1zZywiT0siKTsKKyAgICBrcmI1X2NjX2Nsb3NlKGtjb250ZXh0LGNhY2hlKTsKKyAgICBy ZXR1cm4oMCk7Cit9CisKK3N0YXRpYyBjaGFyICoKKyNpZmRlZiBDS19BTlNJQworI2lmZGVmIEhF SU1EQUwKK2V0eXBlX3N0cmluZyhrcmI1X2tleXR5cGUgZW5jdHlwZSkKKyNlbHNlIC8qIEhFSU1E QUwgKi8KK2V0eXBlX3N0cmluZyhrcmI1X2VuY3R5cGUgZW5jdHlwZSkKKyNlbmRpZiAvKiBIRUlN REFMICovCisjZWxzZQorI2lmZGVmIEhFSU1EQUwKK2V0eXBlX3N0cmluZyhlbmN0eXBlKSBrcmI1 X2tleXR5cGUgZW5jdHlwZTsKKyNlbHNlIC8qIEhFSU1EQUwgKi8KK2V0eXBlX3N0cmluZyhlbmN0 eXBlKSBrcmI1X2VuY3R5cGUgZW5jdHlwZTsKKyNlbmRpZiAvKiBIRUlNREFMICovCisjZW5kaWYK K3sKKyAgICBzdGF0aWMgY2hhciBidWZbMTJdOworCisgICAgc3dpdGNoIChlbmN0eXBlKSB7Cisg ICAgY2FzZSBFTkNUWVBFX05VTEw6CisgICAgICAgIHJldHVybiAiTlVMTCI7CisgICAgY2FzZSBF TkNUWVBFX0RFU19DQkNfQ1JDOgorICAgICAgICByZXR1cm4gIkRFUy1DQkMtQ1JDIjsKKyAgICBj YXNlIEVOQ1RZUEVfREVTX0NCQ19NRDQ6CisgICAgICAgIHJldHVybiAiREVTLUNCQy1NRDQiOwor ICAgIGNhc2UgRU5DVFlQRV9ERVNfQ0JDX01ENToKKyAgICAgICAgcmV0dXJuICJERVMtQ0JDLU1E NSI7CisgICAgY2FzZSBFTkNUWVBFX0RFU19DQkNfUkFXOgorICAgICAgICByZXR1cm4gIkRFUy1D QkMtUkFXIjsKKyAgICBjYXNlIEVOQ1RZUEVfREVTM19DQkNfU0hBOgorICAgICAgICByZXR1cm4g IkRFUzMtQ0JDLVNIQSI7CisgICAgY2FzZSBFTkNUWVBFX0RFUzNfQ0JDX1JBVzoKKyAgICAgICAg cmV0dXJuICJERVMzLUNCQy1SQVciOworICAgIGNhc2UgRU5DVFlQRV9ERVNfSE1BQ19TSEExOgor ICAgICAgICByZXR1cm4gIkRFUy1ITUFDLVNIQTEiOworICAgIGNhc2UgRU5DVFlQRV9ERVMzX0NC Q19TSEExOgorICAgICAgICByZXR1cm4gIkRFUzMtQ0JDLVNIQTEiOworICAgIGNhc2UgRU5DVFlQ RV9BRVMxMjhfQ1RTX0hNQUNfU0hBMV85NjoKKyAgICAgICAgcmV0dXJuICJBRVMxMjhfQ1RTLUhN QUMtU0hBMV85NiI7CisgICAgY2FzZSBFTkNUWVBFX0FFUzI1Nl9DVFNfSE1BQ19TSEExXzk2Ogor ICAgICAgICByZXR1cm4gIkFFUzI1Nl9DVFMtSE1BQy1TSEExXzk2IjsKKyAgICBjYXNlIEVOQ1RZ UEVfQVJDRk9VUl9ITUFDOgorICAgICAgICByZXR1cm4gIlJDNC1ITUFDLU5UIjsKKyAgICBjYXNl IEVOQ1RZUEVfQVJDRk9VUl9ITUFDX0VYUDoKKyAgICAgICAgcmV0dXJuICJSQzQtSE1BQy1OVC1F WFAiOworICAgIGNhc2UgRU5DVFlQRV9VTktOT1dOOgorICAgICAgICByZXR1cm4gIlVOS05PV04i OworICAgIGNhc2UgRU5DVFlQRV9MT0NBTF9ERVMzX0hNQUNfU0hBMToKKyAgICAgICAgcmV0dXJu ICJMT0NBTC1ERVMzLUhNQUMtU0hBMSI7CisgICAgY2FzZSBFTkNUWVBFX0xPQ0FMX1JDNF9NRDQ6 CisgICAgICAgIHJldHVybiAiTE9DQUwtUkM0LU1ENCI7CisgICAgZGVmYXVsdDoKKyAgICAgICAg Y2ttYWttc2coYnVmLCBzaXplb2YoYnVmKSwiZXR5cGUgIiwgY2tpdG9hKGVuY3R5cGUpLE5VTEws TlVMTCk7CisgICAgICAgIHJldHVybiBidWY7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwor c3RhdGljIGNoYXIgKgorI2lmZGVmIENLX0FOU0lDCitmbGFnc19zdHJpbmcocmVnaXN0ZXIga3Ji NV9jcmVkcyAqY3JlZCkKKyNlbHNlCitmbGFnc19zdHJpbmcoY3JlZCkgcmVnaXN0ZXIga3JiNV9j cmVkcyAqY3JlZDsKKyNlbmRpZgoreworICAgIHN0YXRpYyBjaGFyIGJ1ZlszMl07CisgICAgaW50 IGkgPSAwOworCisgICAgaWYgKGNyZWQtPnRpY2tldF9mbGFncyAmIFRLVF9GTEdfRk9SV0FSREFC TEUpCisgICAgICAgIGJ1ZltpKytdID0gJ0YnOworICAgIGlmIChjcmVkLT50aWNrZXRfZmxhZ3Mg JiBUS1RfRkxHX0ZPUldBUkRFRCkKKyAgICAgICAgYnVmW2krK10gPSAnZic7CisgICAgaWYgKGNy ZWQtPnRpY2tldF9mbGFncyAmIFRLVF9GTEdfUFJPWElBQkxFKQorICAgICAgICBidWZbaSsrXSA9 ICdQJzsKKyAgICBpZiAoY3JlZC0+dGlja2V0X2ZsYWdzICYgVEtUX0ZMR19QUk9YWSkKKyAgICAg ICAgYnVmW2krK10gPSAncCc7CisgICAgaWYgKGNyZWQtPnRpY2tldF9mbGFncyAmIFRLVF9GTEdf TUFZX1BPU1REQVRFKQorICAgICAgICBidWZbaSsrXSA9ICdEJzsKKyAgICBpZiAoY3JlZC0+dGlj a2V0X2ZsYWdzICYgVEtUX0ZMR19QT1NUREFURUQpCisgICAgICAgIGJ1ZltpKytdID0gJ2QnOwor ICAgIGlmIChjcmVkLT50aWNrZXRfZmxhZ3MgJiBUS1RfRkxHX0lOVkFMSUQpCisgICAgICAgIGJ1 ZltpKytdID0gJ2knOworICAgIGlmIChjcmVkLT50aWNrZXRfZmxhZ3MgJiBUS1RfRkxHX1JFTkVX QUJMRSkKKyAgICAgICAgYnVmW2krK10gPSAnUic7CisgICAgaWYgKGNyZWQtPnRpY2tldF9mbGFn cyAmIFRLVF9GTEdfSU5JVElBTCkKKyAgICAgICAgYnVmW2krK10gPSAnSSc7CisgICAgaWYgKGNy ZWQtPnRpY2tldF9mbGFncyAmIFRLVF9GTEdfSFdfQVVUSCkKKyAgICAgICAgYnVmW2krK10gPSAn SCc7CisgICAgaWYgKGNyZWQtPnRpY2tldF9mbGFncyAmIFRLVF9GTEdfUFJFX0FVVEgpCisgICAg ICAgIGJ1ZltpKytdID0gJ0EnOworICAgIGJ1ZltpXSA9ICdcMCc7CisgICAgcmV0dXJuKGJ1Zik7 Cit9CisKK3N0YXRpYyBjaGFyICAgKgorI2lmZGVmIENLX0FOU0lDCitzaG9ydF9kYXRlKGxvbmcg ICAqZHApCisjZWxzZQorc2hvcnRfZGF0ZShkcCkgbG9uZyAgICpkcDsKKyNlbmRpZgoreworICAg IHJlZ2lzdGVyIGNoYXIgKmNwOworI2lmbmRlZiBjdGltZQorICAgIGV4dGVybiBjaGFyICpjdGlt ZSgpOworI2VuZGlmIC8qIGN0aW1lICovCisgICAgY3AgPSBjdGltZShkcCkgKyA0OworICAgIGNw WzE1XSA9ICdcMCc7CisgICAgcmV0dXJuIChjcCk7Cit9CisKKworc3RhdGljIFZPSUQKKyNpZmRl ZiBDS19BTlNJQworcHJpbnR0aW1lKHRpbWVfdCB0dikKKyNlbHNlCitwcmludHRpbWUodHYpIHRp bWVfdCB0djsKKyNlbmRpZgoreworICAgIGNoYXIgdGltZXN0cmluZ1tCVUZTSVpdOworICAgIGNo YXIgZm9ybWF0WzEyXTsKKyAgICBjaGFyIGZpbGw7CisKKyAgICBmaWxsID0gJyAnOworICAgIHNw cmludGYoZm9ybWF0LCIlJS0lZHMiLHRpbWVzdGFtcF93aWR0aCk7ICAgLyogc2FmZSAqLworICAg IGlmICgha3JiNV90aW1lc3RhbXBfdG9fc2ZzdHJpbmcoKGtyYjVfdGltZXN0YW1wKSB0diwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lc3RyaW5nLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcF93aWR0aCsxLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmaWxsKSkgeworICAgICAgICBwcmludGYoZm9y bWF0LHRpbWVzdHJpbmcpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgcHJpbnRmKGZvcm1h dCxzaG9ydF9kYXRlKCZ0dikpOworICAgIH0KKworfQorCitzdGF0aWMgdm9pZAorI2lmZGVmIENL X0FOU0lDCitvbmVfYWRkcihrcmI1X2FkZHJlc3MgKmEpCisjZWxzZQorb25lX2FkZHIoYSkga3Ji NV9hZGRyZXNzICphOworI2VuZGlmCit7CisgICAgc3RydWN0IGhvc3RlbnQgKmg7CisgICAgZXh0 ZXJuIHRjcF9yZG5zOworCisgICAgaWYgKChhLT5hZGRydHlwZSA9PSBBRERSVFlQRV9JTkVUKSAm JgorICAgICAgICAoYS0+bGVuZ3RoID09IDQpKSB7CisgICAgICAgIGlmICh0Y3BfcmRucyAhPSBT RVRfT0ZGKSB7CisgICAgICAgICAgICBoID0gZ2V0aG9zdGJ5YWRkcihhLT5jb250ZW50cywgNCwg QUZfSU5FVCk7CisgICAgICAgICAgICBpZiAoaCkgeworI2lmZGVmIEhBRERSTElTVAorICAgICAg ICAgICAgICAgIGggPSBja19jb3B5aG9zdGVudChoKTsKKyNlbmRpZiAvKiBIQUREUkxJU1QgKi8K KyAgICAgICAgICAgICAgICBwcmludGYoIiVzICglZC4lZC4lZC4lZCkiLCBoLT5oX25hbWUsCisg ICAgICAgICAgICAgICAgICAgICAgICBhLT5jb250ZW50c1swXSwgYS0+Y29udGVudHNbMV0sCisg ICAgICAgICAgICAgICAgICAgICAgICBhLT5jb250ZW50c1syXSwgYS0+Y29udGVudHNbM10pOwor ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICh0Y3BfcmRucyA9PSBTRVRfT0ZG IHx8ICFoKSB7CisgICAgICAgICAgICBwcmludGYoIiVkLiVkLiVkLiVkIiwgYS0+Y29udGVudHNb MF0sIGEtPmNvbnRlbnRzWzFdLAorICAgICAgICAgICAgICAgICAgIGEtPmNvbnRlbnRzWzJdLCBh LT5jb250ZW50c1szXSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBwcmludGYo InVua25vd24gYWRkciB0eXBlICVkIiwgYS0+YWRkcnR5cGUpOworICAgIH0KK30KKworc3RhdGlj IFZPSUQKKyNpZmRlZiBDS19BTlNJQworc2hvd19jcmVkZW50aWFsKGtyYjVfY29udGV4dCBrY29u dGV4dCwgcmVnaXN0ZXIga3JiNV9jcmVkcyAqIGNyZWQpCisjZWxzZQorc2hvd19jcmVkZW50aWFs KGtjb250ZXh0LCBjcmVkKQorICAgIGtyYjVfY29udGV4dCAgICAgICAgICBrY29udGV4dDsKKyAg ICByZWdpc3RlciBrcmI1X2NyZWRzICogY3JlZDsKKyNlbmRpZgoreworICAgIGtyYjVfZXJyb3Jf Y29kZSByZXR2YWw9MDsKKyAgICBrcmI1X3RpY2tldCAqdGt0PU5VTEw7CisgICAgY2hhciAqbmFt ZT1OVUxMLCAqc25hbWU9TlVMTCwgKmZsYWdzPU5VTEw7CisgICAgaW50IGV4dHJhX2ZpZWxkID0g MDsKKworICAgIHJldHZhbCA9IGtyYjVfdW5wYXJzZV9uYW1lKGtjb250ZXh0LCBjcmVkLT5jbGll bnQsICZuYW1lKTsKKyAgICBpZiAocmV0dmFsKSB7CisgICAgICAgIGRlYnVnKEYxMDEsImNrX2ty YjVfbGlzdF9jcmVkcyB3aGlsZSB1bnBhcnNpbmcgY2xpZW50IG5hbWUiLCIiLHJldHZhbCk7Cisg ICAgICAgIGtyYjVfZXJybm8gPSByZXR2YWw7CisgICAgICAgIG1ha2VzdHIoJmtyYjVfZXJybXNn LGVycm9yX21lc3NhZ2Uoa3JiNV9lcnJubykpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg IHJldHZhbCA9IGtyYjVfdW5wYXJzZV9uYW1lKGtjb250ZXh0LCBjcmVkLT5zZXJ2ZXIsICZzbmFt ZSk7CisgICAgaWYgKHJldHZhbCkgeworICAgICAgICBkZWJ1ZyhGMTAxLCJja19rcmI1X2xpc3Rf Y3JlZHMgd2hpbGUgdW5wYXJzaW5nIHNlcnZlciBuYW1lIiwiIixyZXR2YWwpOworICAgICAgICBm cmVlKG5hbWUpOworICAgICAgICBrcmI1X2Vycm5vID0gcmV0dmFsOworICAgICAgICBtYWtlc3Ry KCZrcmI1X2Vycm1zZyxlcnJvcl9tZXNzYWdlKGtyYjVfZXJybm8pKTsKKyAgICAgICAgcmV0dXJu OworICAgIH0KKyAgICBpZiAoIWNyZWQtPnRpbWVzLnN0YXJ0dGltZSkKKyAgICAgICAgY3JlZC0+ dGltZXMuc3RhcnR0aW1lID0gY3JlZC0+dGltZXMuYXV0aHRpbWU7CisKKyAgICBwcmludHRpbWUo Y3JlZC0+dGltZXMuc3RhcnR0aW1lKTsKKyAgICBwcmludGYoIiAgIik7CisKKyAgICBpZiAoIHRp bWUoMCkgPCBjcmVkLT50aW1lcy5lbmR0aW1lICkKKyAgICAgICAgcHJpbnR0aW1lKGNyZWQtPnRp bWVzLmVuZHRpbWUpOworICAgIGVsc2UKKyAgICAgICAgcHJpbnRmKCIqKiBleHBpcmVkICoqICIp OworCisgICAgcHJpbnRmKCIgICVzXHJcbiIsIHNuYW1lKTsKKworICAgIGlmIChzdHJjbXAobmFt ZSwgZGVmbmFtZSkpIHsKKyAgICAgICAgcHJpbnRmKCIgICBmb3IgY2xpZW50ICVzIiwgbmFtZSk7 CisgICAgICAgIGV4dHJhX2ZpZWxkKys7CisgICAgfQorCisgICAgaWYgKGNyZWQtPnRpbWVzLnJl bmV3X3RpbGwpIHsKKyAgICAgICAgaWYgKCFleHRyYV9maWVsZCkKKyAgICAgICAgICAgIHByaW50 ZigiICAgIik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHByaW50ZigiLCAiKTsKKyAgICAg ICAgcHJpbnRmKCJyZW5ldyB1bnRpbCAiKTsKKyAgICAgICAgcHJpbnR0aW1lKGNyZWQtPnRpbWVz LnJlbmV3X3RpbGwpOworICAgICAgICBleHRyYV9maWVsZCArPSAyOworICAgIH0KKworICAgIGlm IChleHRyYV9maWVsZCA+IDMpIHsKKyAgICAgICAgcHJpbnRmKCJcclxuIik7CisgICAgICAgIGV4 dHJhX2ZpZWxkID0gMDsKKyAgICB9CisKKyAgICBpZiAoc2hvd19mbGFncykgeworICAgICAgICBm bGFncyA9IGZsYWdzX3N0cmluZyhjcmVkKTsKKyAgICAgICAgaWYgKGZsYWdzICYmICpmbGFncykg eworICAgICAgICAgICAgaWYgKCFleHRyYV9maWVsZCkKKyAgICAgICAgICAgICAgICBwcmludGYo IiAgICIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHByaW50ZigiLCAiKTsK KyAgICAgICAgICAgIHByaW50ZigiRmxhZ3M6ICVzIiwgZmxhZ3MpOworICAgICAgICAgICAgZXh0 cmFfZmllbGQrKzsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChleHRyYV9maWVsZCA+IDIp IHsKKyAgICAgICAgcHJpbnRmKCJcclxuIik7CisgICAgICAgIGV4dHJhX2ZpZWxkID0gMDsKKyAg ICB9CisKKyAgICBpZiAoc2hvd19ldHlwZSkgeworICAgICAgICByZXR2YWwgPSBkZWNvZGVfa3Ji NV90aWNrZXQoJmNyZWQtPnRpY2tldCwgJnRrdCk7CisgICAgICAgIGlmICghZXh0cmFfZmllbGQp CisgICAgICAgICAgICBwcmludGYoIiAgICIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBw cmludGYoIiwgIik7CisjaWZkZWYgSEVJTURBTAorICAgICAgICBwcmludGYoIkV0eXBlIChza2V5 LCB0a3QpOiAlcywgJXMgIiwKKyAgICAgICAgICAgICAgIGV0eXBlX3N0cmluZyhjcmVkLT5zZXNz aW9uLmtleXR5cGUpLAorICAgICAgICAgICAgICAgZXR5cGVfc3RyaW5nKHRrdC0+ZW5jX3BhcnQu a2V5dHlwZSkpOworI2Vsc2UgLyogSEVJTURBTCAqLworICAgICAgICBwcmludGYoIkV0eXBlIChz a2V5LCB0a3QpOiAlcywgJXMgIiwKKyAgICAgICAgICAgICAgIGV0eXBlX3N0cmluZyhjcmVkLT5r ZXlibG9jay5lbmN0eXBlKSwKKyAgICAgICAgICAgICAgIGV0eXBlX3N0cmluZyh0a3QtPmVuY19w YXJ0LmVuY3R5cGUpKTsKKyNlbmRpZiAvKiBIRUlNREFMICovCisgICAgICAgIGtyYjVfZnJlZV90 aWNrZXQoa2NvbnRleHQsIHRrdCk7CisgICAgICAgIGV4dHJhX2ZpZWxkKys7CisgICAgfQorCisg ICAgLyogaWYgYW55IGFkZGl0aW9uYWwgaW5mbyB3YXMgcHJpbnRlZCwgZXh0cmFfZmllbGQgaXMg bm9uLXplcm8gKi8KKyAgICBpZiAoZXh0cmFfZmllbGQpCisgICAgICAgIHByaW50ZigiXHJcbiIp OworCisgICAgaWYgKCBzaG93X2FkZHIgKSB7CisgICAgICAgIGlmICghY3JlZC0+YWRkcmVzc2Vz IHx8ICFjcmVkLT5hZGRyZXNzZXNbMF0pIHsKKyAgICAgICAgICAgIHByaW50ZigiXHRBZGRyZXNz ZXM6IChub25lKVxyXG4iKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGludCBpOwor ICAgICAgICAgICAgZm9yIChpPTA7IGNyZWQtPmFkZHJlc3Nlc1tpXTsgaSsrKSB7CisgICAgICAg ICAgICAgICAgaWYgKGkpCisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiICAgICAgICAgICAg ICAiKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHByaW50Zigi ICAgQWRkcmVzc2VzOiAiKTsKKyAgICAgICAgICAgICAgICBvbmVfYWRkcihjcmVkLT5hZGRyZXNz ZXNbaV0pOworICAgICAgICAgICAgICAgIHByaW50ZigiXHJcbiIpOworICAgICAgICAgICAgfQor ICAgICAgICB9CisgICAgfQorCisgICAga3JiNV9mcmVlX3VucGFyc2VkX25hbWUoa2NvbnRleHQs bmFtZSk7CisgICAga3JiNV9mcmVlX3VucGFyc2VkX25hbWUoa2NvbnRleHQsc25hbWUpOworCisg ICAga3JiNV9lcnJubyA9IDA7CisgICAgbWFrZXN0cigma3JiNV9lcnJtc2csIk9LIik7Cit9CisK K3N0YXRpYyBWT0lECisjaWZkZWYgQ0tfQU5TSUMKK2ZpbGxpdChpbnQgbnVtLCBpbnQgYykKKyNl bHNlCitmaWxsaXQobnVtLCBjKSBpbnQgbnVtOyBpbnQgYzsKKyNlbmRpZgoreworICAgIGludCBp OworCisgICAgZm9yIChpPTA7IGk8bnVtOyBpKyspCisgICAgICAgIHByaW50ZigiJWMiLGMpOwor fQorI2VuZGlmIC8qIEtMSVNUICovCisjZW5kaWYgLyogS1JCNSAqLworCisjaWZkZWYgS1JCNAor I2RlZmluZSBLREVCVUcgMQoraW50IGs0ZGVidWcgPSAwOyAgICAgICAgICAgICAgICAvKiBLZXJi ZXJvcyA0IHJ1bnRpbWUgZGVidWdnaW5nICovCisKKyNpZmRlZiBLSU5JVAorI2RlZmluZSBLUkJf REVGQVVMVF9MSUZFIDEyMCAvKiAxMCBob3VycyBpbiA1IG1pbnV0ZSBpbnRlcnZhbHMgKi8KKwor I2lmZGVmIFNOSzQKKy8qIFNOSzQgaXMgYSBoYXJkd2FyZSBhdXRoZW50aWNhdGlvbiBzeXN0ZW0g dXNlZCB0byBwcmUtYXV0aGVudGljYXRlICAgICovCisvKiBhIHRpY2tldCBnZXR0aW5nIHRpY2tl dC4gIFdlIGRvIG5vdCBzdXBwb3J0IHRoaXMgY29kZSBhdCB0aGUgcHJlc2VudCAqLworLyogdGlt ZSBpbiBLZXJtaXQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKi8KK3ZvaWQKK2dldF9pbnB1dChzLCBzaXplLCBzdHJlYW0pCitjaGFyICpzOwor aW50IHNpemU7CitGSUxFICpzdHJlYW07Cit7CisgICAgY2hhciAqcDsKKworICAgIGlmIChmZ2V0 cyhzLCBzaXplLCBzdHJlYW0pID09IE5VTEwpCisgICAgICAgIGV4aXQoMSk7CisgICAgaWYgKCAo cCA9IHN0cmNocihzLCAnXG4nKSkgIT0gTlVMTCkKKyAgICAgICAgKnAgPSAnXDAnOworfQorI2Vu ZGlmIC8qIFNOSzQgKi8KKworI2lmZGVmIENPTU1FTlQKK3N0YXRpYyBjaGFyCisjaWZkZWYgQ0tf QU5TSUMKK2hleF9zY2FuX255YmJsZShjaGFyIGMpCisjZWxzZQoraGV4X3NjYW5fbnliYmxlKGMp IGNoYXIgYzsKKyNlbmRpZgoreworICAgIGlmIChjID49ICcwJyAmJiBjIDw9ICc5JykKKyAgICAg ICAgcmV0dXJuIGMgLSAnMCc7CisgICAgaWYgKGMgPj0gJ0EnICYmIGMgPD0gJ0YnKQorICAgICAg ICByZXR1cm4gYyAtICdBJyArIDEwOworICAgIGlmIChjID49ICdhJyAmJiBjIDw9ICdmJykKKyAg ICAgICAgcmV0dXJuIGMgLSAnYScgKyAxMDsKKyAgICByZXR1cm4gLTE7Cit9CisKKy8qIHJldHVy bnM6IE5VTEwgZm9yIG9rLCBwb2ludGVyIHRvIGVycm9yIHN0cmluZyBmb3IgYmFkIGlucHV0ICov CitzdGF0aWMgY2hhcioKKyNpZmRlZiBDS19BTlNJQworaGV4X3NjYW5fZm91cl9ieXRlcyhjaGFy ICpvdXQsIGNoYXIgKmluKQorI2Vsc2UKK2hleF9zY2FuX2ZvdXJfYnl0ZXMob3V0LCBpbikgY2hh ciAqb3V0OyBjaGFyICppbjsKKyNlbmRpZgoreworICAgIGludCBpOworICAgIGludCBjOworICAg IGNoYXIgYzE7CisgICAgZm9yIChpPTA7IGk8ODsgaSsrKSB7CisgICAgICAgIGlmKCFpbltpXSkK KyAgICAgICAgICAgIHJldHVybiAibm90IGVub3VnaCBpbnB1dCI7CisgICAgICAgIGMgPSBoZXhf c2Nhbl9ueWJibGUoaW5baV0pOworICAgICAgICBpZihjPDApCisgICAgICAgICAgICByZXR1cm4g ImludmFsaWQgZGlnaXQiOworICAgICAgICBjMSA9IGM7CisgICAgICAgIGkrKzsKKyAgICAgICAg aWYoIWluW2ldKQorICAgICAgICAgICAgcmV0dXJuICJub3QgZW5vdWdoIGlucHV0IjsKKyAgICAg ICAgYyA9IGhleF9zY2FuX255YmJsZShpbltpXSk7CisgICAgICAgIGlmKGM8MCkKKyAgICAgICAg ICAgIHJldHVybiAiaW52YWxpZCBkaWdpdCI7CisgICAgICAgICpvdXQrKyA9IChjMSA8PCA0KSAr IGM7CisgICAgfQorICAgIHN3aXRjaChpbltpXSkgeworICAgIGNhc2UgMDoKKyAgICBjYXNlICdc cic6CisgICAgY2FzZSAnXG4nOgorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBkZWZhdWx0Ogor ICAgICAgICByZXR1cm4gImV4dHJhIGNoYXJhY3RlcnMgYXQgZW5kIG9mIGlucHV0IjsKKyAgICB9 Cit9CisjZW5kaWYgLyogQ09NTUVOVCAqLworCisvKiBja19rcmI0X2luaXRUR1QoKSByZXR1cm5z IDAgb24gc3VjY2VzcyAqLworaW50CisjaWZkZWYgQ0tfQU5TSUMKK2NrX2tyYjRfaW5pdFRHVChz dHJ1Y3Qga3JiX29wX2RhdGEgKiBvcCwgc3RydWN0IGtyYjRfaW5pdF9kYXRhICogaW5pdCkKKyNl bHNlCitja19rcmI0X2luaXRUR1Qob3AsaW5pdCkKKyAgICBzdHJ1Y3Qga3JiX29wX2RhdGEgKiBv cCwgc3RydWN0IGtyYjRfaW5pdF9kYXRhICogaW5pdAorI2VuZGlmCit7CisgICAgY2hhciAgICBh bmFtZVtBTkFNRV9TWisxXTsKKyAgICBjaGFyICAgIGluc3RbSU5TVF9TWisxXTsKKyAgICBjaGFy ICAgIHJlYWxtW1JFQUxNX1NaKzFdOworICAgIGNoYXIgICAgKnBhc3N3b3JkPU5VTEw7CisgICAg Y2hhciAgICBwYXNzd2RbODBdPSIiOworICAgIGNoYXIgICAgKnVzZXJuYW1lID0gTlVMTDsKKyAg ICBjaGFyICAgICp1c2VybmFtZXB0cj1OVUxMOworICAgIGludCAgICAgaWZsYWcsICAgICAgLyog SW5zdGFuY2UgKi8KKyAgICAgICAgICAgIHJmbGFnLCAgICAgIC8qIFJlYWxtICovCisgICAgICAg ICAgICB2ZmxhZywgICAgICAvKiBWZXJib3NlICovCisgICAgICAgICAgICBsZmxhZywgICAgICAv KiBMaWZldGltZSAqLworICAgICAgICAgICAgcGZsYWcsICAgICAgLyogUHJlYXV0aCAqLworICAg ICAgICAgICAgbGlmZXRpbWU9S1JCX0RFRkFVTFRfTElGRSwgICAvKiBMaWZlIFRpbWUgKi8KKyAg ICAgICAgICAgIGtfZXJybm87CisgICAgcmVnaXN0ZXIgY2hhciAqY3A7CisgICAgcmVnaXN0ZXIg aTsKKworICAgIGlmICggIWNrX2tyYjRfaXNfaW5zdGFsbGVkKCkgKQorICAgICAgICByZXR1cm4o LTEpOworCisgICAgKmluc3QgPSAqcmVhbG0gPSAnXDAnOworICAgIGlmbGFnID0gcmZsYWcgPSB2 ZmxhZyA9IGxmbGFnID0gcGZsYWcgPSAwOworCisgICAgdmZsYWcgPSBpbml0LT52ZXJib3NlOwor ICAgIHBmbGFnID0gaW5pdC0+cHJlYXV0aDsKKworICAgIGlmICggaW5pdC0+bGlmZXRpbWUgKSB7 CisgICAgICAgIGxpZmV0aW1lID0gaW5pdC0+bGlmZXRpbWU8NT8xOmluaXQtPmxpZmV0aW1lLzU7 CisgICAgICAgIGlmICggbGlmZXRpbWUgPiAyNTUgKSBsaWZldGltZSA9IDI1NTsKKyAgICB9Cisg ICAgZWxzZQorICAgICAgICBsaWZldGltZSA9IEtSQl9ERUZBVUxUX0xJRkU7CisKKyAgICB1c2Vy bmFtZSA9IGluaXQtPnByaW5jaXBhbDsKKworICAgIGlmICh1c2VybmFtZSAmJiB1c2VybmFtZVsw XSAmJgorICAgICAgICAoa19lcnJubyA9IGtuYW1lX3BhcnNlKGFuYW1lLCBpbnN0LCByZWFsbSwg dXNlcm5hbWUpKQorICAgICAgICAhPSBBVVRIX1NVQ0NFU1MpIHsKKyAgICAgICAga3JiNF9lcnJu byA9IGtfZXJybm87CisgICAgICAgIG1ha2VzdHIoJmtyYjRfZXJybXNnLGtyYl9nZXRfZXJyX3Rl eHRfZW50cnkoa19lcnJubykpOworICAgICAgICBwcmludGYoIiVzXHJcbiIsIGtyYl9nZXRfZXJy X3RleHRfZW50cnkoa19lcnJubykpOworICAgICAgICBpZmxhZyA9IHJmbGFnID0gMTsKKyAgICAg ICAgdXNlcm5hbWUgPSBOVUxMOworICAgIH0KKworICAgIGlmICggaW5pdC0+cmVhbG0gKSB7Cisg ICAgICAgIGNrc3RybmNweShyZWFsbSxpbml0LT5yZWFsbSxSRUFMTV9TWik7CisgICAgfQorCisg ICAgaWYgKCBpbml0LT5pbnN0YW5jZSApIHsKKyAgICAgICAgY2tzdHJuY3B5KGluc3QsaW5pdC0+ aW5zdGFuY2UsIElOU1RfU1opOworICAgIH0KKworI2lmZGVmIENPTU1FTlQKKyAgICBpZiAoIHZm bGFnICkKKyAgICAgICAgcHJpbnRmKCJLZXJiZXJvcyBJViBpbml0aWFsaXphdGlvblxyXG4iKTsK KyNlbmRpZiAvKiBDT01NRU5UICovCisKKyAgICBpZiAoIXVzZXJuYW1lIHx8ICF1c2VybmFtZVsw XSkgeworICAgICAgICBkZWJ1ZyhGMTAwLCJja19rcmI0X2luaXRUR1Qgbm8gdXNlcm5hbWUgc3Bl Y2lmaWVkIiwiIiwwKTsKKyAgICAgICAgcHJpbnRmKCI/SW52YWxpZCBwcmluY2lwYWwgc3BlY2lm aWVkLlxyXG4iKTsKKyAgICAgICAga3JiNF9lcnJubyA9IC0xOworICAgICAgICBtYWtlc3RyKCZr cmI0X2Vycm1zZywiTm8gcHJpbmNpcGFsIHNwZWNpZmllZCIpOworICAgICAgICByZXR1cm4oLTEp OworICAgIH0KKyAgICBpZiAoISpyZWFsbSkgeworICAgICAgICBja3N0cm5jcHkocmVhbG0sY2tf a3JiNF9nZXRyZWFsbSgpLFJFQUxNX1NaKTsKKyAgICB9CisKKyAgICBpZiAoIGluaXQtPnBhc3N3 b3JkICkKKyAgICAgICAgcGFzc3dvcmQgPSBpbml0LT5wYXNzd29yZDsKKyAgICBlbHNlIHsKKyAg ICAgICAgY2hhciBwcm1wdFs4MF07CisgICAgICAgIGludCBvazsKKworICAgICAgICBja21ha3ht c2cocHJtcHQsc2l6ZW9mKHBybXB0KSwKKyAgICAgICAgICAgICAgICAgICJLZXJiZXJvcyA0IFBh c3N3b3JkIGZvciAiLHVzZXJuYW1lLCJAIixyZWFsbSwiOiAiLAorICAgICAgICAgICAgICAgICAg IE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwpOworICAgICAgICBvayA9IHVxX3R4 dChOVUxMLHBybXB0LDIsTlVMTCxwYXNzd2QsODAsTlVMTCxERUZBVUxUX1VRX1RJTUVPVVQpOwor ICAgICAgICBpZiAoIG9rICkKKyAgICAgICAgICAgIHBhc3N3b3JkID0gcGFzc3dkOworICAgIH0K KworICAgIGlmIChwZmxhZykgeworICAgICAgICBrX2Vycm5vID0ga3JiX2dldF9wd19pbl90a3Rf cHJlYXV0aCggYW5hbWUsIGluc3QsIHJlYWxtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgImtyYnRndCIsIHJlYWxtLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbGlmZXRpbWUsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBwYXNzd29yZCk7CisgICAgICAgIGlmIChrX2Vycm5vID09 IC0xKSB7ICAgIC8qIHByZWF1dGggbWV0aG9kIG5vdCBhdmFpbGFibGUgKi8KKyAgICAgICAgICAg IGtfZXJybm8gPSBrcmJfZ2V0X3B3X2luX3RrdChhbmFtZSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW5zdCwgcmVhbG0sCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICJrcmJ0Z3QiLCByZWFsbSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbGlmZXRpbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHBhc3N3b3JkKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAg ICAgIGtfZXJybm8gPSBrcmJfZ2V0X3B3X2luX3RrdChhbmFtZSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnN0LCByZWFsbSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAia3JidGd0IiwgcmVhbG0sCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbGlmZXRpbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcGFzc3dvcmQpOworICAgIH0KKworICAgIG1lbXNldChwYXNzd2QsMCxzaXplb2YocGFzc3dk KSk7CisgICAgaWYgKGtfZXJybm8pIHsKKyAgICAgICAgcHJpbnRmKCIlcyBmb3IgcHJpbmNpcGFs ICVzJXMlc0Alc1xyXG4iLAorICAgICAgICAgICAgICAgIGtyYl9nZXRfZXJyX3RleHRfZW50cnko a19lcnJubyksIGFuYW1lLAorICAgICAgICAgICAgICAgIGluc3RbMF0/Ii4iOiIiLCBpbnN0LCBy ZWFsbSk7CisgICAgICAgIGtyYjRfZXJybm8gPSBrX2Vycm5vOworICAgICAgICBtYWtlc3RyKCZr cmI0X2Vycm1zZyxrcmJfZ2V0X2Vycl90ZXh0X2VudHJ5KGtfZXJybm8pKTsKKyAgICAgICAgcmV0 dXJuKC0xKTsKKyAgICB9IGVsc2UgaWYgKHZmbGFnKSB7CisgICAgICAgIHByaW50ZigiUmVzdWx0 IGZyb20gcmVhbG0gJXM6ICIsIHJlYWxtKTsKKyAgICAgICAgcHJpbnRmKCIlc1xyXG4iLCBrcmJf Z2V0X2Vycl90ZXh0X2VudHJ5KGtfZXJybm8pKTsKKyAgICB9CisgICAga3JiNF9lcnJubyA9IGtf ZXJybm87CisgICAgbWFrZXN0cigma3JiNF9lcnJtc2csa3JiX2dldF9lcnJfdGV4dF9lbnRyeShr X2Vycm5vKSk7CisgICAgcmV0dXJuKDApOworfQorI2VuZGlmIC8qIEtJTklUICovCisjaWZkZWYg S0RFU1RST1kKK2ludAorI2lmZGVmIENLX0FOU0lDCitja19rcmI0X2Rlc3Ryb3koc3RydWN0IGty Yl9vcF9kYXRhICogb3ApCisjZWxzZQorY2tfa3JiNF9kZXN0cm95KG9wKSBzdHJ1Y3Qga3JiX29w X2RhdGEgKiBvcDsKKyNlbmRpZgoreworICAgIGludCBrX2Vycm5vPTA7CisKKyAgICBpZiAoICFj a19rcmI0X2lzX2luc3RhbGxlZCgpICkKKyAgICAgICAgcmV0dXJuKC0xKTsKKworICAgIGtfZXJy bm8gPSBkZXN0X3RrdCgpOworCisgICAga3JiNF9lcnJubyA9IGtfZXJybm87CisgICAgbWFrZXN0 cigma3JiNF9lcnJtc2csa3JiX2dldF9lcnJfdGV4dF9lbnRyeShrX2Vycm5vKSk7CisKKyAgICBp ZiAoa19lcnJubyA9PSAwKQorICAgICAgICBwcmludGYoIlRpY2tldHMgZGVzdHJveWVkLlxyXG4i KTsKKyAgICBlbHNlIGlmIChrX2Vycm5vID09IFJFVF9US0ZJTCkKKyAgICAgICAgcHJpbnRmKCJO byB0aWNrZXRzIHRvIGRlc3Ryb3kuXHJcbiIpOworICAgIGVsc2UgeworICAgICAgICBwcmludGYo IlRpY2tldHMgTUFZIE5PVCBiZSBkZXN0cm95ZWQuXHJcbiIpOworICAgICAgICByZXR1cm4oLTEp OworICAgIH0KKyAgICByZXR1cm4oMCk7Cit9CisjZW5kaWYgLyogS0RFU1RST1kgKi8KKyNpZmRl ZiBLTElTVAorX1BST1RPVFlQKHN0YXRpYyBpbnQgZGlzcGxheV90a3RmaWxlLChjaGFyICosIGlu dCwgaW50LCBpbnQpKTsKKworaW50CisjaWZkZWYgQ0tfQU5TSUMKK2NrX2tyYjRfbGlzdF9jcmVk cyhzdHJ1Y3Qga3JiX29wX2RhdGEgKiBvcCkKKyNlbHNlCitja19rcmI0X2xpc3RfY3JlZHMob3Ap IHN0cnVjdCBrcmJfb3BfZGF0YSAqIG9wOworI2VuZGlmCit7CisgICAgaW50ICAgICBsb25nX2Zv cm0gPSAxOworICAgIGludCAgICAgdGd0X3Rlc3QgPSAwOworICAgIGludCAgICAgZG9fc3J2dGFi ID0gMDsKKyAgICBpbnQgICAgIHNob3dfa3Zub3MgPSAwOworICAgIGNoYXIgICAqdGt0X2ZpbGUg PSBOVUxMOworCisgICAgaWYgKCAhY2tfa3JiNF9pc19pbnN0YWxsZWQoKSApCisgICAgICAgIHJl dHVybigtMSk7CisKKyAgICBpZiAoIG9wLT5jYWNoZSApCisgICAgICAgIHRrdF9maWxlID0gb3At PmNhY2hlOworCisgICAgaWYgKCBrNGRlYnVnICkgeworICAgICAgICBzaG93X2t2bm9zID0gMTsK KyAgICB9CisKKyAgICBpZiAoZG9fc3J2dGFiKQorICAgICAgICByZXR1cm4oZGlzcGxheV9zcnZ0 YWIodGt0X2ZpbGUpKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybihkaXNwbGF5X3RrdGZpbGUo dGt0X2ZpbGUsIHRndF90ZXN0LCBsb25nX2Zvcm0sIHNob3dfa3Zub3MpKTsKK30KKworI2lmbmRl ZiBLUkI1CitzdGF0aWMgaW50IHRpbWVzdGFtcF93aWR0aD0wOworCitzdGF0aWMgY2hhciAgICoK KyNpZmRlZiBDS19BTlNJQworc2hvcnRfZGF0ZShsb25nICAgKmRwKQorI2Vsc2UKK3Nob3J0X2Rh dGUoZHApIGxvbmcgICAqZHA7CisjZW5kaWYKK3sKKyAgICByZWdpc3RlciBjaGFyICpjcDsKKyAg ICBleHRlcm4gY2hhciAqY3RpbWUoKTsKKyAgICBjcCA9IGN0aW1lKGRwKSArIDQ7CisgICAgY3Bb MTVdID0gJ1wwJzsKKyAgICByZXR1cm4gKGNwKTsKK30KKworCitzdGF0aWMgVk9JRAorI2lmZGVm IENLX0FOU0lDCitwcmludHRpbWUodGltZV90IHR2KQorI2Vsc2UKK3ByaW50dGltZSh0dikgdGlt ZV90IHR2OworI2VuZGlmCit7CisgICAgY2hhciB0aW1lc3RyaW5nW0JVRlNJWl07CisgICAgY2hh ciBmb3JtYXRbMTJdOworICAgIGNoYXIgZmlsbDsKKworICAgIGZpbGwgPSAnICc7CisgICAgc3By aW50Zihmb3JtYXQsIiUlLSVkcyIsdGltZXN0YW1wX3dpZHRoKTsgICAvKiBzYWZlICovCisgICAg cHJpbnRmKGZvcm1hdCxzaG9ydF9kYXRlKCZ0dikpOworfQorI2VuZGlmIC8qIEtSQjUgKi8KKwor c3RhdGljIGludAorI2lmZGVmIENLX0FOU0lDCitkaXNwbGF5X3RrdGZpbGUoY2hhciAqZmlsZSwg aW50IHRndF90ZXN0LCBpbnQgbG9uZ19mb3JtLCBpbnQgc2hvd19rdm5vcykKKyNlbHNlCitkaXNw bGF5X3RrdGZpbGUoZmlsZSx0Z3RfdGVzdCxsb25nX2Zvcm0sc2hvd19rdm5vcykKKyAgICBjaGFy ICpmaWxlOyBpbnQgdGd0X3Rlc3Q7IGludCBsb25nX2Zvcm07IGludCBzaG93X2t2bm9zOworI2Vu ZGlmCit7CisgICAgY2hhciAgICBwbmFtZVtBTkFNRV9TWl07CisgICAgY2hhciAgICBwaW5zdFtJ TlNUX1NaXTsKKyAgICBjaGFyICAgIHByZWFsbVtSRUFMTV9TWl07CisgICAgY2hhciAgICBidWYx WzIwXSwgYnVmMlsyMF07CisgICAgaW50ICAgICBrX2Vycm5vOworI2lmZGVmIE9TMgorICAgIExF QVNIX0NSRURFTlRJQUxTIGNyZWRzOworI2Vsc2UgLyogT1MyICovCisgICAgQ1JFREVOVElBTFMg Y3JlZHM7CisjZW5kaWYgLyogT1MyICovCisgICAgaW50ICAgICBoZWFkZXIgPSAxOworCisgICAg ZmlsZSA9IHRrdF9zdHJpbmcoKTsKKworICAgIGlmIChsb25nX2Zvcm0pIHsKKyAgICAgICAgcHJp bnRmKCJUaWNrZXQgY2FjaGU6ICAgICAgJXNcclxuIiwgZmlsZSk7CisgICAgfQorCisgICAgLyoK KyAgICAgKiBTaW5jZSBrcmJfZ2V0X3RmX3JlYWxtIHdpbGwgcmV0dXJuIGEgdGlja2V0X2ZpbGUg ZXJyb3IsCisgICAgICogd2Ugd2lsbCBjYWxsIHRmX2luaXQgYW5kIHRmX2Nsb3NlIGZpcnN0IHRv IGZpbHRlciBvdXQKKyAgICAgKiB0aGluZ3MgbGlrZSBubyB0aWNrZXQgZmlsZS4gIE90aGVyd2lz ZSwgdGhlIGVycm9yIHRoYXQKKyAgICAgKiB0aGUgdXNlciB3b3VsZCBzZWUgd291bGQgYmUKKyAg ICAgKiBrbGlzdDogY2FuJ3QgZmluZCByZWFsbSBvZiB0aWNrZXQgZmlsZTogTm8gdGlja2V0IGZp bGUgKHRmX3V0aWwpCisgICAgICogaW5zdGVhZCBvZgorICAgICAqIGtsaXN0OiBObyB0aWNrZXQg ZmlsZSAodGZfdXRpbCkKKyAgICAgKi8KKworICAgIC8qIE9wZW4gdGlja2V0IGZpbGUgKi8KKyAg ICBpZiAoa19lcnJubyA9IHRmX2luaXQoZmlsZSwgUl9US1RfRklMKSkgeworICAgICAgICBpZiAo IXRndF90ZXN0KQorICAgICAgICAgICAgcHJpbnRmKCIlc1xyXG4iLCBrcmJfZ2V0X2Vycl90ZXh0 X2VudHJ5IChrX2Vycm5vKSk7CisgICAgICAgIGtyYjRfZXJybm8gPSBrX2Vycm5vOworICAgICAg ICBtYWtlc3RyKCZrcmI0X2Vycm1zZyxrcmJfZ2V0X2Vycl90ZXh0X2VudHJ5KGtfZXJybm8pKTsK KyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9CisKKworICAgIC8qIENsb3NlIHRpY2tldCBmaWxl ICovCisgICAgKHZvaWQpIHRmX2Nsb3NlKCk7CisKKyAgICAvKgorICAgICAqIFdlIG11c3QgZmlu ZCB0aGUgcmVhbG0gb2YgdGhlIHRpY2tldCBmaWxlIGhlcmUgYmVmb3JlIGNhbGxpbmcKKyAgICAg KiB0Zl9pbml0IGJlY2F1c2Ugc2luY2UgdGhlIHJlYWxtIG9mIHRoZSB0aWNrZXQgZmlsZSBpcyBu b3QKKyAgICAgKiByZWFsbHkgc3RvcmVkIGluIHRoZSBwcmluY2lwYWwgc2VjdGlvbiBvZiB0aGUg ZmlsZSwgdGhlCisgICAgICogcm91dGluZSB3ZSB1c2UgbXVzdCBpdHNlbGYgY2FsbCB0Zl9pbml0 IGFuZCB0Zl9jbG9zZS4KKyAgICAgKi8KKyAgICBpZiAoKGtfZXJybm8gPSBrcmJfZ2V0X3RmX3Jl YWxtKGZpbGUsIHByZWFsbSkpICE9IEFVVEhfU1VDQ0VTUykgeworICAgICAgICBpZiAoIXRndF90 ZXN0KQorICAgICAgICAgICAgcHJpbnRmKCJjYW4ndCBmaW5kIHJlYWxtIG9mIHRpY2tldCBmaWxl OiAlc1xyXG4iLAorICAgICAgICAgICAgICAgICAgICBrcmJfZ2V0X2Vycl90ZXh0X2VudHJ5IChr X2Vycm5vKSk7CisgICAgICAgIGtyYjRfZXJybm8gPSBrX2Vycm5vOworICAgICAgICBtYWtlc3Ry KCZrcmI0X2Vycm1zZyxrcmJfZ2V0X2Vycl90ZXh0X2VudHJ5KGtfZXJybm8pKTsKKyAgICAgICAg cmV0dXJuKC0xKTsKKyAgICB9CisKKyAgICAvKiBPcGVuIHRpY2tldCBmaWxlICovCisgICAgaWYg KGtfZXJybm8gPSB0Zl9pbml0KGZpbGUsIFJfVEtUX0ZJTCkpIHsKKyAgICAgICAgaWYgKCF0Z3Rf dGVzdCkKKyAgICAgICAgICAgIHByaW50ZigiJXNcclxuIiwga3JiX2dldF9lcnJfdGV4dF9lbnRy eSAoa19lcnJubykpOworICAgICAgICBrcmI0X2Vycm5vID0ga19lcnJubzsKKyAgICAgICAgbWFr ZXN0cigma3JiNF9lcnJtc2csa3JiX2dldF9lcnJfdGV4dF9lbnRyeShrX2Vycm5vKSk7CisgICAg ICAgIHJldHVybigtMSk7CisgICAgfQorICAgIC8qIEdldCBwcmluY2lwYWwgbmFtZSBhbmQgaW5z dGFuY2UgKi8KKyAgICBpZiAoKGtfZXJybm8gPSB0Zl9nZXRfcG5hbWUocG5hbWUpKSB8fAorICAg ICAgICAgKGtfZXJybm8gPSB0Zl9nZXRfcGluc3QocGluc3QpKSkgeworICAgICAgICAodm9pZCkg dGZfY2xvc2UoKTsKKyAgICAgICAgaWYgKCF0Z3RfdGVzdCkKKyAgICAgICAgICAgIHByaW50Zigi JXNcclxuIiwga3JiX2dldF9lcnJfdGV4dF9lbnRyeSAoa19lcnJubykpOworICAgICAgICBrcmI0 X2Vycm5vID0ga19lcnJubzsKKyAgICAgICAgbWFrZXN0cigma3JiNF9lcnJtc2csa3JiX2dldF9l cnJfdGV4dF9lbnRyeShrX2Vycm5vKSk7CisgICAgICAgIHJldHVybigtMSk7CisgICAgfQorCisg ICAgLyoKKyAgICAgKiBZb3UgbWF5IHRoaW5rIHRoYXQgdGhpcyBpcyB0aGUgb2J2aW91cyBwbGFj ZSB0byBnZXQgdGhlCisgICAgICogcmVhbG0gb2YgdGhlIHRpY2tldCBmaWxlLCBidXQgaXQgY2Fu J3QgYmUgZG9uZSBoZXJlIGFzIHRoZQorICAgICAqIHJvdXRpbmUgdG8gZG8gdGhpcyBtdXN0IG9w ZW4gdGhlIHRpY2tldCBmaWxlLiAgVGhpcyBpcyB3aHkKKyAgICAgKiBpdCB3YXMgZG9uZSBiZWZv cmUgdGZfaW5pdC4KKyAgICAgKi8KKworICAgIGlmICghdGd0X3Rlc3QgJiYgbG9uZ19mb3JtKQor ICAgICAgICBwcmludGYoIkRlZmF1bHQgcHJpbmNpcGFsOiAlcyVzJXMlcyVzXHJcblxyXG4iLCBw bmFtZSwKKyAgICAgICAgICAgICAgIChwaW5zdFswXSA/ICIuIiA6ICIiKSwgcGluc3QsCisgICAg ICAgICAgICAgICAocHJlYWxtWzBdID8gIkAiIDogIiIpLCBwcmVhbG0pOworCisgICAgd2hpbGUg KChrX2Vycm5vID0gdGZfZ2V0X2NyZWQoJmNyZWRzKSkgPT0gQVVUSF9TVUNDRVNTKSB7CisgICAg ICAgIGlmICghdGd0X3Rlc3QgJiYgbG9uZ19mb3JtICYmIGhlYWRlcikgeworICAgICAgICAgICAg cHJpbnRmKCIlLTE3cyAgJS0xN3MgICVzXHJcbiIsCisgICAgICAgICAgICAgICAgICAgIlZhbGlk IHN0YXJ0aW5nIiwgIkV4cGlyZXMiLCAiU2VydmljZSBwcmluY2lwYWwiKTsKKyAgICAgICAgICAg IGhlYWRlciA9IDA7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRndF90ZXN0KSB7CisgICAgICAg ICAgICBjcmVkcy5pc3N1ZV9kYXRlICs9ICgodW5zaWduZWQgY2hhcikgY3JlZHMubGlmZXRpbWUp ICogNSAqIDYwOworICAgICAgICAgICAgaWYgKCFzdHJjbXAoY3JlZHMuc2VydmljZSwgImtyYnRn dCIpICYmCisgICAgICAgICAgICAgICAgIXN0cmNtcChjcmVkcy5pbnN0YW5jZSwgcHJlYWxtKSkg eworICAgICAgICAgICAgICAgIGtyYjRfZXJybm8gPSBrX2Vycm5vOworICAgICAgICAgICAgICAg IG1ha2VzdHIoJmtyYjRfZXJybXNnLGtyYl9nZXRfZXJyX3RleHRfZW50cnkoa19lcnJubykpOwor CisgICAgICAgICAgICAgICAgKHZvaWQpIHRmX2Nsb3NlKCk7CisgICAgICAgICAgICAgICAgaWYg KHRpbWUoMCkgPCBjcmVkcy5pc3N1ZV9kYXRlKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVy bigwKTsgICAgICAgICAgLyogdGd0IGhhc24ndCBleHBpcmVkICovCisgICAgICAgICAgICAgICAg fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsgICAgICAgICAvKiBoYXMg ZXhwaXJlZCAqLworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg IGNvbnRpbnVlOyAgICAgICAgICAgICAgICAgICAvKiBub3QgYSB0Z3QgKi8KKyAgICAgICAgfQor ICAgICAgICBpZiAobG9uZ19mb3JtKSB7CisgICAgICAgICAgICB0aW1lc3RhbXBfd2lkdGggPSAx NzsgICAgICAgLyogZm9yIGs1IGRpc3BsYXkgZnVuY3Rpb24gKi8KKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBpZiBhdmFpbGFibGUgICAgICAgICAgICAqLworICAg ICAgICAgICAgcHJpbnR0aW1lKGNyZWRzLmlzc3VlX2RhdGUpOworICAgICAgICAgICAgcHJpbnRm KCIgICIpOworICAgICAgICAgICAgY3JlZHMuaXNzdWVfZGF0ZSArPSAoKHVuc2lnbmVkIGNoYXIp IGNyZWRzLmxpZmV0aW1lKSAqIDUgKiA2MDsKKyAgICAgICAgICAgIGlmICggdGltZSgwKSA8IGNy ZWRzLmlzc3VlX2RhdGUgKQorICAgICAgICAgICAgICAgIHByaW50dGltZShjcmVkcy5pc3N1ZV9k YXRlKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBwcmludGYoIioqKiBleHBp cmVkICoqKiAgIik7CisgICAgICAgICAgICBwcmludGYoIiAgIik7CisgICAgICAgIH0KKyAgICAg ICAgaWYgKHNob3dfa3Zub3MpCisgICAgICAgICAgcHJpbnRmKCIlcyVzJXMlcyVzICglZClcclxu IiwKKyAgICAgICAgICAgICAgICAgY3JlZHMuc2VydmljZSwgKGNyZWRzLmluc3RhbmNlWzBdID8g Ii4iIDogIiIpLCBjcmVkcy5pbnN0YW5jZSwKKyAgICAgICAgICAgICAgICAgKGNyZWRzLnJlYWxt WzBdID8gIkAiIDogIiIpLCBjcmVkcy5yZWFsbSwgY3JlZHMua3Zubyk7CisgICAgICAgIGVsc2UK KyAgICAgICAgICBwcmludGYoIiVzJXMlcyVzJXNcclxuIiwKKyAgICAgICAgICAgICAgICAgY3Jl ZHMuc2VydmljZSwgKGNyZWRzLmluc3RhbmNlWzBdID8gIi4iIDogIiIpLCBjcmVkcy5pbnN0YW5j ZSwKKyAgICAgICAgICAgICAgICAgKGNyZWRzLnJlYWxtWzBdID8gIkAiIDogIiIpLCBjcmVkcy5y ZWFsbSk7CisKKyNpZmRlZiBPUzIKKyAgICAgICAgaWYgKCBjcmVkcy5hZGRyZXNzWzBdICkKKyAg ICAgICAgICAgIHByaW50ZigiICAgQWRkcmVzczogJXNcclxuIixjcmVkcy5hZGRyZXNzKTsKKyNl bmRpZiAvKiBPUzIgKi8KKyAgICB9CisKKyAgICAodm9pZCkgdGZfY2xvc2UoKTsKKworICAgIGlm ICh0Z3RfdGVzdCkgeworICAgICAgICByZXR1cm4oLTEpOworICAgIH0vKiBubyB0Z3QgZm91bmQg Ki8KKyAgICBpZiAoaGVhZGVyICYmIGxvbmdfZm9ybSAmJiBrX2Vycm5vID09IEVPRikgeworICAg ICAgICBwcmludGYoIk5vIHRpY2tldHMgaW4gZmlsZS5cclxuIik7CisgICAgfQorICAgIGtyYjRf ZXJybm8gPSBrX2Vycm5vOworICAgIG1ha2VzdHIoJmtyYjRfZXJybXNnLGtyYl9nZXRfZXJyX3Rl eHRfZW50cnkoa19lcnJubykpOworICAgIHJldHVybigwKTsKK30KKworI2lmZGVmIENPTU1FTlQK Ky8qIEp1c3Qgc28gd2UgcmVtZW1iZXIgd2hhdCB0aGUgY29tbWFuZCBsaW5lIGludGVyZmFjZSBs b29rZWQgbGlrZSAqLwordXNhZ2UoKQoreworICAgIHByaW50ZigKKyAgICAgICAgIlVzYWdlOiBb IC1zIHwgLXQgXSBbIC1maWxlIGZpbGVuYW1lIF0gWyAtc3J2dGFiIF0gWyAtdmVyc2lvbiBdXHJc biIpOworICAgIHJldHVybigtMSk7Cit9CisjZW5kaWYgLyogQ09NTUVOVCAqLworCisvKiBhZGFw dGVkIGZyb20gZ2V0c3QoKSBpbiBsaWJya2IgKi8KKy8qCisgKiBva19nZXRzdCgpIHRha2VzIGEg ZmlsZSBkZXNjcmlwdG9yLCBhIHN0cmluZyBhbmQgYSBjb3VudC4gIEl0IHJlYWRzCisgKiBmcm9t IHRoZSBmaWxlIHVudGlsIGVpdGhlciBpdCBoYXMgcmVhZCAiY291bnQiIGNoYXJhY3RlcnMsIG9y IHVudGlsCisgKiBpdCByZWFkcyBhIG51bGwgYnl0ZS4gIFdoZW4gZmluaXNoZWQsIHdoYXQgaGFz IGJlZW4gcmVhZCBleGlzdHMgaW4KKyAqIHRoZSBnaXZlbiBzdHJpbmcgInMiLiAgSWYgImNvdW50 IiBjaGFyYWN0ZXJzIHdlcmUgYWN0dWFsbHkgcmVhZCwgdGhlCisgKiBsYXN0IGlzIGNoYW5nZWQg dG8gYSBudWxsLCBzbyB0aGUgcmV0dXJuZWQgc3RyaW5nIGlzIGFsd2F5cyBudWxsLQorICogdGVy bWluYXRlZC4gIG9rX2dldHN0KCkgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVh ZCwgaW5jbHVkaW5nCisgKiB0aGUgbnVsbCB0ZXJtaW5hdG9yLgorICoKKyAqIElmIHRoZXJlIGlz IGEgcmVhZCBlcnJvciwgaXQgcmV0dXJucyAtMSAobGlrZSB0aGUgcmVhZCgyKSBzeXN0ZW0gY2Fs bCkKKyAqLworCitzdGF0aWMgaW50CisjaWZkZWYgQ0tfQU5TSUMKK29rX2dldHN0KGludCBmZCwg cmVnaXN0ZXIgY2hhciAqcywgaW50IG4pCisjZWxzZQorb2tfZ2V0c3QoZmQsIHMsIG4pIGludCBm ZDsgcmVnaXN0ZXIgY2hhciAqczsgaW50IG47CisjZW5kaWYKK3sKKyAgICByZWdpc3RlciBpbnQg Y291bnQgPSBuOworICAgIGludCBlcnI7CisgICAgd2hpbGUgKChlcnIgPSByZWFkKGZkLCBzLCAx KSkgPiAwICYmIC0tY291bnQpCisgICAgICAgIGlmICgqcysrID09ICdcMCcpCisgICAgICAgICAg ICByZXR1cm4gKG4gLSBjb3VudCk7CisgICAgaWYgKGVyciA8IDApCisgICAgICAgIHJldHVybigt MSk7CisgICAgKnMgPSAnXDAnOworICAgIHJldHVybiAobiAtIGNvdW50KTsKK30KKworaW50Cisj aWZkZWYgQ0tfQU5TSUMKK2Rpc3BsYXlfc3J2dGFiKGNoYXIgKmZpbGUpCisjZWxzZQorZGlzcGxh eV9zcnZ0YWIoZmlsZSkgY2hhciAqZmlsZTsKKyNlbmRpZgoreworICAgIGludCBzdGFiOworICAg IGNoYXIgc2VydltTTkFNRV9TWl07CisgICAgY2hhciBpbnN0W0lOU1RfU1pdOworICAgIGNoYXIg cmxtW1JFQUxNX1NaXTsKKyAgICB1bnNpZ25lZCBjaGFyIGtleVs4XTsKKyAgICB1bnNpZ25lZCBj aGFyIHZubzsKKyAgICBpbnQgY291bnQ7CisKKyAgICBwcmludGYoIlNlcnZlciBrZXkgZmlsZTog ICAlc1xyXG4iLCBmaWxlKTsKKyNpZmRlZiBOVAorI2lmbmRlZiBPX1JET05MWQorI2RlZmluZSBP X1JET05MWSBfT19SRE9OTFkKKyNlbmRpZiAvKiBPX1JET05MWSAqLworI2VuZGlmIC8qIE5UICov CisKKyAgICBpZiAoKHN0YWIgPSBvcGVuKGZpbGUsIE9fUkRPTkxZLCAwNDAwKSkgPCAwKSB7Cisg ICAgICAgIHBlcnJvcihmaWxlKTsKKyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9CisgICAgcHJp bnRmKCIlLTE1cyAlLTE1cyAlLTEwcyAlc1xyXG4iLCJTZXJ2aWNlIiwiSW5zdGFuY2UiLCJSZWFs bSIsCisgICAgICAgICAgICJLZXkgVmVyc2lvbiIpOworICAgIHByaW50ZigiLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiIpOworCisgICAg LyogYXJnaC4gZ2V0c3QgZG9lc24ndCByZXR1cm4gZXJyb3IgY29kZXMsIGl0IHNpbGVudGx5IGZh aWxzICovCisgICAgd2hpbGUgKCgoY291bnQgPSBva19nZXRzdChzdGFiLCBzZXJ2LCBTTkFNRV9T WikpID4gMCkKKyAgICAgICAgICAgJiYgKChjb3VudCA9IG9rX2dldHN0KHN0YWIsIGluc3QsIElO U1RfU1opKSA+IDApCisgICAgICAgICAgICYmICgoY291bnQgPSBva19nZXRzdChzdGFiLCBybG0s IFJFQUxNX1NaKSkgPiAwKSkgeworICAgICAgICBpZiAoKChjb3VudCA9IHJlYWQoc3RhYiwoY2hh ciAqKSAmdm5vLDEpKSAhPSAxKSB8fAorICAgICAgICAgICAgICgoY291bnQgPSByZWFkKHN0YWIs KGNoYXIgKikga2V5LDgpKSAhPSA4KSkgeworICAgICAgICAgICAgaWYgKGNvdW50IDwgMCkKKyAg ICAgICAgICAgICAgICBwZXJyb3IoInJlYWRpbmcgZnJvbSBrZXkgZmlsZSIpOworICAgICAgICAg ICAgZWxzZQorICAgICAgICAgICAgICAgIHByaW50Zigia2V5IGZpbGUgdHJ1bmNhdGVkXHJcbiIp OworICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgfQorICAgICAgICBwcmludGYoIiUt MTVzICUtMTVzICUtMTVzICVkXHJcbiIsc2VydixpbnN0LHJsbSx2bm8pOworICAgIH0KKyAgICBp ZiAoY291bnQgPCAwKQorICAgICAgICBwZXJyb3IoZmlsZSk7CisgICAgKHZvaWQpIGNsb3NlKHN0 YWIpOworICAgIHJldHVybigwKTsKK30KKyNlbmRpZiAvKiBLTElTVCAqLworI2Vsc2UgLyogS1JC NCAqLworaW50Citja19rcmI0X2F1dG9nZXRfVEdUKGNoYXIgKiBkdW1teSkKK3sKKyAgICByZXR1 cm4oLTEpOworfQorI2lmZGVmIENLX0tFUkJFUk9TCitpbnQKKyNpZmRlZiBDS19BTlNJQworY2tf a3JiNF9pbml0VEdUKHN0cnVjdCBrcmJfb3BfZGF0YSAqIG9wLCBzdHJ1Y3Qga3JiNF9pbml0X2Rh dGEgKiBpbml0KQorI2Vsc2UKK2NrX2tyYjRfaW5pdFRHVChvcCxpbml0KQorICAgIHN0cnVjdCBr cmJfb3BfZGF0YSAqIG9wLCBzdHJ1Y3Qga3JiNF9pbml0X2RhdGEgKiBpbml0CisjZW5kaWYKK3sK KyAgICByZXR1cm4oLTEpOworfQorCisjaWZkZWYgQ0tfQU5TSUMKK2NrX2tyYjRfZGVzdHJveShz dHJ1Y3Qga3JiX29wX2RhdGEgKiBvcCkKKyNlbHNlCitja19rcmI0X2Rlc3Ryb3kob3ApIHN0cnVj dCBrcmJfb3BfZGF0YSAqIG9wOworI2VuZGlmCit7CisgICAgcmV0dXJuKC0xKTsKK30KK2ludAor I2lmZGVmIENLX0FOU0lDCitja19rcmI0X2xpc3RfY3JlZHMoc3RydWN0IGtyYl9vcF9kYXRhICog b3ApCisjZWxzZQorY2tfa3JiNF9saXN0X2NyZWRzKG9wKSBzdHJ1Y3Qga3JiX29wX2RhdGEgKiBv cDsKKyNlbmRpZgoreworICAgIHJldHVybigtMSk7Cit9CisjZWxzZSAvKiBDS19LRVJCRVJPUyAq LworaW50IGNrX2tyYjRfaW5pdFRHVCh2b2lkICogYSwgdm9pZCAqYikKK3sKKyAgICByZXR1cm4o LTEpOworfQoraW50IGNrX2tyYjRfZGVzdHJveSh2b2lkICphKQoreworICAgIHJldHVybigtMSk7 Cit9CitpbnQgY2tfa3JiNF9saXN0X2NyZWRzKHZvaWQgKmEpCit7CisgICAgcmV0dXJuKC0xKTsK K30KKyNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLworI2VuZGlmIC8qIEtSQjQgKi8KKworLyogVGhl IGZvbGxvd2luZyBmdW5jdGlvbnMgYXJlIHVzZWQgdG8gaW1wbGVtZW50IHRoZSBLZXJtaXQgU2Ny aXB0IExhbmd1YWdlICovCisvKiBmdW5jdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworc3RydWN0IHRrdF9saXN0 X2l0ZW0geworICAgIGNoYXIgKiBuYW1lOworICAgIHN0cnVjdCB0a3RfbGlzdF9pdGVtICogbmV4 dDsKK307CisKK3N0YXRpYyBzdHJ1Y3QgdGt0X2xpc3RfaXRlbSAqIGs0X3RrdF9saXN0ID0gTlVM TDsKKworaW50CisjaWZkZWYgQ0tfQU5TSUMKK2NrX2tyYjRfZ2V0X3RrdHMoVk9JRCkKKyNlbHNl Citja19rcmI0X2dldF90a3RzKCkKKyNlbmRpZgoreworI2lmZGVmIEtSQjQKKyAgICBjaGFyICAg KmZpbGU9TlVMTDsKKyAgICBjaGFyICAgIHBuYW1lW0FOQU1FX1NaXTsKKyAgICBjaGFyICAgIHBp bnN0W0lOU1RfU1pdOworICAgIGNoYXIgICAgcHJlYWxtW1JFQUxNX1NaXTsKKyAgICBjaGFyICAg IGJ1ZjFbMjBdLCBidWYyWzIwXTsKKyAgICBpbnQgICAgIGtfZXJybm87CisjaWZkZWYgT1MyCisg ICAgTEVBU0hfQ1JFREVOVElBTFMgY3JlZHM7CisjZWxzZSAvKiBPUzIgKi8KKyAgICBDUkVERU5U SUFMUyBjcmVkczsKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICBpbnQgICAgIHRrdF9jb3VudD0wOwor ICAgIHN0cnVjdCAgdGt0X2xpc3RfaXRlbSAqKiBsaXN0ID0gJms0X3RrdF9saXN0OworCisgICAg d2hpbGUgKCBrNF90a3RfbGlzdCApIHsKKyAgICAgICAgc3RydWN0IHRrdF9saXN0X2l0ZW0gKiBu ZXh0OworICAgICAgICBuZXh0ID0gazRfdGt0X2xpc3QtPm5leHQ7CisgICAgICAgIGZyZWUoazRf dGt0X2xpc3QtPm5hbWUpOworICAgICAgICBmcmVlKGs0X3RrdF9saXN0KTsKKyAgICAgICAgazRf dGt0X2xpc3QgPSBuZXh0OworICAgIH0KKworICAgIGlmICggIWNrX2tyYjRfaXNfaW5zdGFsbGVk KCkgKQorICAgICAgICByZXR1cm4oLTEpOworCisgICAgZmlsZSA9IHRrdF9zdHJpbmcoKTsKKwor ICAgIC8qCisgICAgICogU2luY2Uga3JiX2dldF90Zl9yZWFsbSB3aWxsIHJldHVybiBhIHRpY2tl dF9maWxlIGVycm9yLAorICAgICAqIHdlIHdpbGwgY2FsbCB0Zl9pbml0IGFuZCB0Zl9jbG9zZSBm aXJzdCB0byBmaWx0ZXIgb3V0CisgICAgICogdGhpbmdzIGxpa2Ugbm8gdGlja2V0IGZpbGUuICBP dGhlcndpc2UsIHRoZSBlcnJvciB0aGF0CisgICAgICogdGhlIHVzZXIgd291bGQgc2VlIHdvdWxk IGJlCisgICAgICoga2xpc3Q6IGNhbid0IGZpbmQgcmVhbG0gb2YgdGlja2V0IGZpbGU6IE5vIHRp Y2tldCBmaWxlICh0Zl91dGlsKQorICAgICAqIGluc3RlYWQgb2YKKyAgICAgKiBrbGlzdDogTm8g dGlja2V0IGZpbGUgKHRmX3V0aWwpCisgICAgICovCisKKyAgICAvKiBPcGVuIHRpY2tldCBmaWxl ICovCisgICAgaWYgKGtfZXJybm8gPSB0Zl9pbml0KGZpbGUsIFJfVEtUX0ZJTCkpIHsKKyAgICAg ICAgcmV0dXJuKC0xKTsKKyAgICB9CisKKyAgICAvKiBDbG9zZSB0aWNrZXQgZmlsZSAqLworICAg ICh2b2lkKSB0Zl9jbG9zZSgpOworCisgICAgLyoKKyAgICAgKiBXZSBtdXN0IGZpbmQgdGhlIHJl YWxtIG9mIHRoZSB0aWNrZXQgZmlsZSBoZXJlIGJlZm9yZSBjYWxsaW5nCisgICAgICogdGZfaW5p dCBiZWNhdXNlIHNpbmNlIHRoZSByZWFsbSBvZiB0aGUgdGlja2V0IGZpbGUgaXMgbm90CisgICAg ICogcmVhbGx5IHN0b3JlZCBpbiB0aGUgcHJpbmNpcGFsIHNlY3Rpb24gb2YgdGhlIGZpbGUsIHRo ZQorICAgICAqIHJvdXRpbmUgd2UgdXNlIG11c3QgaXRzZWxmIGNhbGwgdGZfaW5pdCBhbmQgdGZf Y2xvc2UuCisgICAgICovCisgICAgaWYgKChrX2Vycm5vID0ga3JiX2dldF90Zl9yZWFsbShmaWxl LCBwcmVhbG0pKSAhPSBBVVRIX1NVQ0NFU1MpIHsKKyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9 CisKKyAgICAvKiBPcGVuIHRpY2tldCBmaWxlICovCisgICAgaWYgKGtfZXJybm8gPSB0Zl9pbml0 KGZpbGUsIFJfVEtUX0ZJTCkpIHsKKyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9CisgICAgLyog R2V0IHByaW5jaXBhbCBuYW1lIGFuZCBpbnN0YW5jZSAqLworICAgIGlmICgoa19lcnJubyA9IHRm X2dldF9wbmFtZShwbmFtZSkpIHx8CisgICAgICAgICAoa19lcnJubyA9IHRmX2dldF9waW5zdChw aW5zdCkpKSB7CisgICAgICAgIHJldHVybigtMSk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBZ b3UgbWF5IHRoaW5rIHRoYXQgdGhpcyBpcyB0aGUgb2J2aW91cyBwbGFjZSB0byBnZXQgdGhlCisg ICAgICogcmVhbG0gb2YgdGhlIHRpY2tldCBmaWxlLCBidXQgaXQgY2FuJ3QgYmUgZG9uZSBoZXJl IGFzIHRoZQorICAgICAqIHJvdXRpbmUgdG8gZG8gdGhpcyBtdXN0IG9wZW4gdGhlIHRpY2tldCBm aWxlLiAgVGhpcyBpcyB3aHkKKyAgICAgKiBpdCB3YXMgZG9uZSBiZWZvcmUgdGZfaW5pdC4KKyAg ICAgKi8KKworICAgIHdoaWxlICgoa19lcnJubyA9IHRmX2dldF9jcmVkKCZjcmVkcykpID09IEFV VEhfU1VDQ0VTUykgeworICAgICAgICBjaGFyIHRrdF9idWZbMjU2XTsKKyAgICAgICAgY2ttYWt4 bXNnKHRrdF9idWYsc2l6ZW9mKHRrdF9idWYpLAorICAgICAgICAgICAgICAgICBjcmVkcy5zZXJ2 aWNlLCAoY3JlZHMuaW5zdGFuY2VbMF0gPyAiLiIgOiAiIiksIGNyZWRzLmluc3RhbmNlLAorICAg ICAgICAgICAgICAgICAoY3JlZHMucmVhbG1bMF0gPyAiQCIgOiAiIiksIGNyZWRzLnJlYWxtLAor ICAgICAgICAgICAgICAgICBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMKTsKKyAg ICAgICAgKmxpc3QgPSAoc3RydWN0IHRrdF9saXN0X2l0ZW0gKikgbWFsbG9jKHNpemVvZihzdHJ1 Y3QgdGt0X2xpc3RfaXRlbSkpOworICAgICAgICAoKmxpc3QpLT5uYW1lID0gc3RyZHVwKHRrdF9i dWYpOworICAgICAgICAoKmxpc3QpLT5uZXh0ID0gTlVMTDsKKyAgICAgICAgbGlzdCA9ICYoKCps aXN0KS0+bmV4dCk7CisgICAgICAgIHRrdF9jb3VudCsrOworICAgIH0KKworICAgIHRmX2Nsb3Nl KCk7CisgICAgcmV0dXJuKHRrdF9jb3VudCk7CisjZWxzZSAvKiBLUkI0ICovCisgICAgcmV0dXJu KDApOworI2VuZGlmIC8qIEtSQjQgKi8KK30KKworY2hhciAqCisjaWZkZWYgQ0tfQU5TSUMKK2Nr X2tyYjRfZ2V0X25leHRfdGt0KFZPSUQpCisjZWxzZQorY2tfa3JiNF9nZXRfbmV4dF90a3QoKQor I2VuZGlmCit7CisjaWZkZWYgS1JCNAorICAgIHN0YXRpYyBjaGFyICogcz1OVUxMOworICAgIHN0 cnVjdCB0a3RfbGlzdF9pdGVtICogbmV4dD1OVUxMOworCisgICAgaWYgKCBzICkgeworICAgICAg ICBmcmVlKHMpOworICAgICAgICBzID0gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoIGs0X3RrdF9s aXN0ID09IE5VTEwgKQorICAgICAgICByZXR1cm4oTlVMTCk7CisKKyAgICBuZXh0ID0gazRfdGt0 X2xpc3QtPm5leHQ7CisgICAgcyA9IGs0X3RrdF9saXN0LT5uYW1lOworICAgIGZyZWUoazRfdGt0 X2xpc3QpOworICAgIGs0X3RrdF9saXN0ID0gbmV4dDsKKyAgICByZXR1cm4ocyk7CisjZWxzZSAv KiBLUkI0ICovCisgICAgcmV0dXJuKE5VTEwpOworI2VuZGlmIC8qIEtSQjQgKi8KK30KKworaW50 CisjaWZkZWYgQ0tfQU5TSUMKK2NrX2tyYjRfdGt0X2lzdmFsaWQoY2hhciAqIHRrdG5hbWUpCisj ZWxzZQorY2tfa3JiNF90a3RfaXN2YWxpZCh0a3RuYW1lKSBjaGFyICogdGt0bmFtZTsKKyNlbmRp ZgoreworI2lmZGVmIEtSQjQKKyAgICBjaGFyICAgKmZpbGU9TlVMTDsKKyAgICBjaGFyICAgIHBu YW1lW0FOQU1FX1NaXTsKKyAgICBjaGFyICAgIHBpbnN0W0lOU1RfU1pdOworICAgIGNoYXIgICAg cHJlYWxtW1JFQUxNX1NaXTsKKyAgICBjaGFyICAgIGJ1ZjFbMjBdLCBidWYyWzIwXTsKKyAgICBp bnQgICAgIGtfZXJybm87CisgICAgdGltZV90ICBpc3N1ZV90LCBleHBpcmVfdCwgbm93X3Q7Cisj aWZkZWYgT1MyCisgICAgTEVBU0hfQ1JFREVOVElBTFMgY3JlZHM7CisjZWxzZSAvKiBPUzIgKi8K KyAgICBDUkVERU5USUFMUyBjcmVkczsKKyNlbmRpZiAvKiBPUzIgKi8KKworICAgIGlmICggIWNr X2tyYjRfaXNfaW5zdGFsbGVkKCkgKQorICAgICAgICByZXR1cm4oLTEpOworCisgICAgZGVidWco RjExMCwiY2tfa3JiNF90a3RfaXN2YWxpZCIsInRrdF9zdHJpbmciLDApOworICAgIGZpbGUgPSB0 a3Rfc3RyaW5nKCk7CisKKyAgICAvKgorICAgICAqIFNpbmNlIGtyYl9nZXRfdGZfcmVhbG0gd2ls bCByZXR1cm4gYSB0aWNrZXRfZmlsZSBlcnJvciwKKyAgICAgKiB3ZSB3aWxsIGNhbGwgdGZfaW5p dCBhbmQgdGZfY2xvc2UgZmlyc3QgdG8gZmlsdGVyIG91dAorICAgICAqIHRoaW5ncyBsaWtlIG5v IHRpY2tldCBmaWxlLiAgT3RoZXJ3aXNlLCB0aGUgZXJyb3IgdGhhdAorICAgICAqIHRoZSB1c2Vy IHdvdWxkIHNlZSB3b3VsZCBiZQorICAgICAqIGtsaXN0OiBjYW4ndCBmaW5kIHJlYWxtIG9mIHRp Y2tldCBmaWxlOiBObyB0aWNrZXQgZmlsZSAodGZfdXRpbCkKKyAgICAgKiBpbnN0ZWFkIG9mCisg ICAgICoga2xpc3Q6IE5vIHRpY2tldCBmaWxlICh0Zl91dGlsKQorICAgICAqLworCisgICAgLyog T3BlbiB0aWNrZXQgZmlsZSAqLworICAgIGRlYnVnKEYxMTAsImNrX2tyYjRfdGt0X2lzdmFsaWQi LCJ0Zl9pbml0IiwwKTsKKyAgICBpZiAoa19lcnJubyA9IHRmX2luaXQoZmlsZSwgUl9US1RfRklM KSkgeworICAgICAgICByZXR1cm4oLTEpOworICAgIH0KKworICAgIC8qIENsb3NlIHRpY2tldCBm aWxlICovCisgICAgZGVidWcoRjExMCwiY2tfa3JiNF90a3RfaXN2YWxpZCIsInRmX2Nsb3NlIiww KTsKKyAgICAodm9pZCkgdGZfY2xvc2UoKTsKKworICAgIC8qCisgICAgICogV2UgbXVzdCBmaW5k IHRoZSByZWFsbSBvZiB0aGUgdGlja2V0IGZpbGUgaGVyZSBiZWZvcmUgY2FsbGluZworICAgICAq IHRmX2luaXQgYmVjYXVzZSBzaW5jZSB0aGUgcmVhbG0gb2YgdGhlIHRpY2tldCBmaWxlIGlzIG5v dAorICAgICAqIHJlYWxseSBzdG9yZWQgaW4gdGhlIHByaW5jaXBhbCBzZWN0aW9uIG9mIHRoZSBm aWxlLCB0aGUKKyAgICAgKiByb3V0aW5lIHdlIHVzZSBtdXN0IGl0c2VsZiBjYWxsIHRmX2luaXQg YW5kIHRmX2Nsb3NlLgorICAgICAqLworICAgIGRlYnVnKEYxMTAsImNrX2tyYjRfdGt0X2lzdmFs aWQiLCJrcmJfZ2V0X3RmX3JlYWxtIiwwKTsKKyAgICBpZiAoKGtfZXJybm8gPSBrcmJfZ2V0X3Rm X3JlYWxtKGZpbGUsIHByZWFsbSkpICE9IEFVVEhfU1VDQ0VTUykgeworICAgICAgICByZXR1cm4o LTEpOworICAgIH0KKworICAgIC8qIE9wZW4gdGlja2V0IGZpbGUgKi8KKyAgICBkZWJ1ZyhGMTEw LCJja19rcmI0X3RrdF9pc3ZhbGlkIiwidGZfaW5pdCIsMCk7CisgICAgaWYgKGtfZXJybm8gPSB0 Zl9pbml0KGZpbGUsIFJfVEtUX0ZJTCkpIHsKKyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9Cisg ICAgLyogR2V0IHByaW5jaXBhbCBuYW1lIGFuZCBpbnN0YW5jZSAqLworICAgIGRlYnVnKEYxMTAs ImNrX2tyYjRfdGt0X2lzdmFsaWQiLCJ0Zl9nZXRfbmFtZS90Zl9nZXRfcGluc3QiLDApOworICAg IGlmICgoa19lcnJubyA9IHRmX2dldF9wbmFtZShwbmFtZSkpIHx8CisgICAgICAgICAoa19lcnJu byA9IHRmX2dldF9waW5zdChwaW5zdCkpKSB7CisKKyAgICAgICAgLyogQ2xvc2UgdGlja2V0IGZp bGUgKi8KKyAgICAgICAgZGVidWcoRjExMCwiY2tfa3JiNF90a3RfaXN2YWxpZCIsInRmX2Nsb3Nl IiwwKTsKKyAgICAgICAgKHZvaWQpIHRmX2Nsb3NlKCk7CisKKyAgICAgICAgcmV0dXJuKC0xKTsK KyAgICB9CisKKyAgICAvKgorICAgICAqIFlvdSBtYXkgdGhpbmsgdGhhdCB0aGlzIGlzIHRoZSBv YnZpb3VzIHBsYWNlIHRvIGdldCB0aGUKKyAgICAgKiByZWFsbSBvZiB0aGUgdGlja2V0IGZpbGUs IGJ1dCBpdCBjYW4ndCBiZSBkb25lIGhlcmUgYXMgdGhlCisgICAgICogcm91dGluZSB0byBkbyB0 aGlzIG11c3Qgb3BlbiB0aGUgdGlja2V0IGZpbGUuICBUaGlzIGlzIHdoeQorICAgICAqIGl0IHdh cyBkb25lIGJlZm9yZSB0Zl9pbml0LgorICAgICAqLworCisgICAgZGVidWcoRjExMCwiY2tfa3Ji NF90a3RfaXN2YWxpZCIsInRmX2dldF9jcmVkIiwwKTsKKyAgICB3aGlsZSAoKGtfZXJybm8gPSB0 Zl9nZXRfY3JlZCgmY3JlZHMpKSA9PSBBVVRIX1NVQ0NFU1MpIHsKKyAgICAgICAgY2hhciB0a3Rf YnVmWzI1Nl07CisgICAgICAgIGNrbWFreG1zZyh0a3RfYnVmLHNpemVvZih0a3RfYnVmKSwKKyAg ICAgICAgICAgICAgICAgY3JlZHMuc2VydmljZSwgKGNyZWRzLmluc3RhbmNlWzBdID8gIi4iIDog IiIpLCBjcmVkcy5pbnN0YW5jZSwKKyAgICAgICAgICAgICAgICAgKGNyZWRzLnJlYWxtWzBdID8g IkAiIDogIiIpLCBjcmVkcy5yZWFsbSwKKyAgICAgICAgICAgICAgICAgTlVMTCxOVUxMLE5VTEws TlVMTCxOVUxMLE5VTEwsTlVMTCk7CisgICAgICAgIGlmICggIXN0cmNtcCh0a3RuYW1lLHRrdF9i dWYpICkgeworCisgICAgICAgICAgICAvKiB3ZSBmb3VuZCB0aGUgdGlja2V0IHdlIGFyZSBsb29r aW5nIGZvciAqLworICAgICAgICAgICAgaXNzdWVfdCA9IGNyZWRzLmlzc3VlX2RhdGU7CisgICAg ICAgICAgICBleHBpcmVfdCA9IGNyZWRzLmlzc3VlX2RhdGUKKyAgICAgICAgICAgICAgICArICgo dW5zaWduZWQgY2hhcikgY3JlZHMubGlmZXRpbWUpICogNSAqIDYwOworICAgICAgICAgICAgbm93 X3QgPSB0aW1lKDApOworCisgICAgICAgICAgICAvKiBXZSBhZGQgYSA1IG1pbnV0ZXMgZnVkZ2Ug ZmFjdG9yIHRvIGNvbXBlbnNhdGUgZm9yIHBvdGVudGlhbCAqLworICAgICAgICAgICAgLyogY2xv Y2sgc2tldyBlcnJvcnMgYmV0d2VlbiB0aGUgS0RDIGFuZCBLOTUncyBob3N0IE9TICAgICAgICAg Ki8KKworICAgICAgICAgICAgaWYgKCBub3dfdCA+PSAoaXNzdWVfdC0zMDApICYmIG5vd190IDwg ZXhwaXJlX3QpIHsKKyNpZmRlZiBPUzIKKyNpZmRlZiBDSEVDS0FERFJTCisgICAgICAgICAgICAg ICAgaWYgKCBrcmI0X2NoZWNrYWRkcnMgKSB7CisgICAgICAgICAgICAgICAgICAgIGV4dGVybiBj aGFyIG15aXBhZGRyWzIwXTsgICAgICAgLyogRnJvbSBja2NuZXQuYyAqLworICAgICAgICAgICAg ICAgICAgICBpZiAoICFteWlwYWRkclswXSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlu dCBpOworICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBidWZbNjBdOworICAgICAgICAgICAg ICAgICAgICAgICAgZm9yICggaT0wO2k8NjQ7aSsrICkgeworICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGlmICggZ2V0bG9jYWxpcGFkZHJzKGJ1Ziw2MCxpKSA8IDAgKQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAg IGlmICggIXN0cmNtcChidWYsY3JlZHMuYWRkcmVzcykgKSB7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIENsb3NlIHRpY2tldCBmaWxlICovCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGRlYnVnKEYxMTAsImNrX2tyYjRfdGt0X2lzdmFsaWQiLCJ0Zl9jbG9zZSIs MCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKSB0Zl9jbG9zZSgpOwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oMSk7IC8qIFRoZXkncmUgdGhl IHNhbWUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIENsb3NlIHRpY2tldCBmaWxl ICovCisgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJja19rcmI0X3RrdF9pc3Zh bGlkIiwidGZfY2xvc2UiLDApOworICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQpIHRmX2Ns b3NlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oMCk7ICAgICAgICAgICAgICAg ICAgLyogVGhleSdyZSBkaWZmZXJlbnQgKi8KKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlm ICggc3RyY21wKG15aXBhZGRyLGNyZWRzLmFkZHJlc3MpICkgeworICAgICAgICAgICAgICAgICAg ICAgICAgLyogQ2xvc2UgdGlja2V0IGZpbGUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGRl YnVnKEYxMTAsImNrX2tyYjRfdGt0X2lzdmFsaWQiLCJ0Zl9jbG9zZSIsMCk7CisgICAgICAgICAg ICAgICAgICAgICAgICAodm9pZCkgdGZfY2xvc2UoKTsKKyAgICAgICAgICAgICAgICAgICAgICAg IHJldHVybigwKTsgICAgICAgICAgICAgICAgICAvKiBUaGV5J3JlIGRpZmZlcmVudCAqLworICAg ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAg ICAgICAgICAgICAgICAgLyogQ2xvc2UgdGlja2V0IGZpbGUgKi8KKyAgICAgICAgICAgICAgICAg ICAgICAgIGRlYnVnKEYxMTAsImNrX2tyYjRfdGt0X2lzdmFsaWQiLCJ0Zl9jbG9zZSIsMCk7Cisg ICAgICAgICAgICAgICAgICAgICAgICAodm9pZCkgdGZfY2xvc2UoKTsKKyAgICAgICAgICAgICAg ICAgICAgICAgIHJldHVybigxKTsgICAgICAgICAgICAgICAgICAvKiBUaGV5J3JlIHRoZSBzYW1l ICovCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg ICAgICAgICAgICAgICAgICAvKiBDbG9zZSB0aWNrZXQgZmlsZSAqLworICAgICAgICAgICAgICAg ICAgICBkZWJ1ZyhGMTEwLCJja19rcmI0X3RrdF9pc3ZhbGlkIiwidGZfY2xvc2UiLDApOworICAg ICAgICAgICAgICAgICAgICAodm9pZCkgdGZfY2xvc2UoKTsKKyAgICAgICAgICAgICAgICAgICAg cmV0dXJuKDEpOyAgICAgICAgICAgICAgICAgIC8qIFRoZXkncmUgdGhlIHNhbWUgKi8KKyAgICAg ICAgICAgICAgICB9CisjZWxzZSAvKiBDSEVDS0FERFJTICovCisgICAgICAgICAgICAgICAgLyog Q2xvc2UgdGlja2V0IGZpbGUgKi8KKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJja19rcmI0 X3RrdF9pc3ZhbGlkIiwidGZfY2xvc2UiLDApOworICAgICAgICAgICAgICAgICh2b2lkKSB0Zl9j bG9zZSgpOworICAgICAgICAgICAgICAgIHJldHVybigxKTsgICAgICAvKiB2YWxpZCBidXQgbm8g aXAgYWRkcmVzcyBjaGVjayAqLworI2VuZGlmIC8qIENIRUNLQUREUlMgKi8KKyNlbHNlIC8qIE9T MiAqLworICAgICAgICAgICAgICAgIC8qIENsb3NlIHRpY2tldCBmaWxlICovCisgICAgICAgICAg ICAgICAgZGVidWcoRjExMCwiY2tfa3JiNF90a3RfaXN2YWxpZCIsInRmX2Nsb3NlIiwwKTsKKyAg ICAgICAgICAgICAgICAodm9pZCkgdGZfY2xvc2UoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4o MSk7ICAgICAgLyogVmFsaWQgYnV0IG5vIGlwIGFkZHJlc3MgY2hlY2sgKi8KKyNlbmRpZiAvKiBP UzIgKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAg IC8qIENsb3NlIHRpY2tldCBmaWxlICovCisgICAgICAgICAgICAgICAgZGVidWcoRjExMCwiY2tf a3JiNF90a3RfaXN2YWxpZCIsInRmX2Nsb3NlIiwwKTsKKyAgICAgICAgICAgICAgICAodm9pZCkg dGZfY2xvc2UoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4oMCk7ICAgICAgLyogZXhwaXJlZCBv ciBvdGhlcndpc2UgaW52YWxpZCAqLworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor ICAgIC8qIENsb3NlIHRpY2tldCBmaWxlICovCisgICAgZGVidWcoRjExMCwiY2tfa3JiNF90a3Rf aXN2YWxpZCIsInRmX2Nsb3NlIiwwKTsKKyAgICAodm9pZCkgdGZfY2xvc2UoKTsKKyAgICByZXR1 cm4oMCk7ICAgICAgICAgICAgICAgICAgLyogY291bGQgbm90IGZpbmQgdGhlIGRlc2lyZWQgdGlj a2V0ICovCisjZWxzZSAvKiBLUkI0ICovCisgICAgcmV0dXJuKC0xKTsKKyNlbmRpZiAvKiBLUkI0 ICovCit9CisKK2ludAorI2lmZGVmIENLX0FOU0lDCitja19rcmI0X2lzX3RndF92YWxpZChWT0lE KQorI2Vsc2UKK2NrX2tyYjRfaXNfdGd0X3ZhbGlkKCkKKyNlbmRpZgoreworI2lmZGVmIEtSQjQK KyAgICBjaGFyIHRndFsyNTZdOworICAgIGNoYXIgKiBzOworICAgIGludCByYyA9IDA7CisKKyAg ICBzID0ga3JiNF9kX3JlYWxtID8ga3JiNF9kX3JlYWxtIDogY2tfa3JiNF9nZXRyZWFsbSgpOwor ICAgIGNrbWFrbXNnKHRndCxzaXplb2YodGd0KSwia3JidGd0LiIscywiQCIscyk7CisgICAgcmMg PSBja19rcmI0X3RrdF9pc3ZhbGlkKHRndCk7CisgICAgZGVidWcoRjExMSwiY2tfa3JiNF9pc190 Z3RfdmFsaWQiLHRndCxyYyk7CisgICAgcmV0dXJuKHJjID4gMCk7CisjZWxzZSAvKiBLUkI0ICov CisgICAgcmV0dXJuKDApOworI2VuZGlmIC8qIEtSQjQgKi8KK30KKworaW50CisjaWZkZWYgQ0tf QU5TSUMKK2NrX2tyYjRfdGt0X3RpbWUoY2hhciAqIHRrdG5hbWUpCisjZWxzZQorY2tfa3JiNF90 a3RfdGltZSh0a3RuYW1lKSBjaGFyICogdGt0bmFtZTsKKyNlbmRpZgoreworI2lmZGVmIEtSQjQK KyAgICBjaGFyICAgKmZpbGU9TlVMTDsKKyAgICBjaGFyICAgIHBuYW1lW0FOQU1FX1NaXTsKKyAg ICBjaGFyICAgIHBpbnN0W0lOU1RfU1pdOworICAgIGNoYXIgICAgcHJlYWxtW1JFQUxNX1NaXTsK KyAgICBjaGFyICAgIGJ1ZjFbMjBdLCBidWYyWzIwXTsKKyAgICBpbnQgICAgIGtfZXJybm87Cisj aWZkZWYgT1MyCisgICAgTEVBU0hfQ1JFREVOVElBTFMgY3JlZHM7CisjZWxzZSAvKiBPUzIgKi8K KyAgICBDUkVERU5USUFMUyBjcmVkczsKKyNlbmRpZiAvKiBPUzIgKi8KKworICAgIGlmICggIWNr X2tyYjRfaXNfaW5zdGFsbGVkKCkgKQorICAgICAgICByZXR1cm4oLTEpOworCisgICAgZmlsZSA9 IHRrdF9zdHJpbmcoKTsKKworICAgIC8qCisgICAgICogU2luY2Uga3JiX2dldF90Zl9yZWFsbSB3 aWxsIHJldHVybiBhIHRpY2tldF9maWxlIGVycm9yLAorICAgICAqIHdlIHdpbGwgY2FsbCB0Zl9p bml0IGFuZCB0Zl9jbG9zZSBmaXJzdCB0byBmaWx0ZXIgb3V0CisgICAgICogdGhpbmdzIGxpa2Ug bm8gdGlja2V0IGZpbGUuICBPdGhlcndpc2UsIHRoZSBlcnJvciB0aGF0CisgICAgICogdGhlIHVz ZXIgd291bGQgc2VlIHdvdWxkIGJlCisgICAgICoga2xpc3Q6IGNhbid0IGZpbmQgcmVhbG0gb2Yg dGlja2V0IGZpbGU6IE5vIHRpY2tldCBmaWxlICh0Zl91dGlsKQorICAgICAqIGluc3RlYWQgb2YK KyAgICAgKiBrbGlzdDogTm8gdGlja2V0IGZpbGUgKHRmX3V0aWwpCisgICAgICovCisKKyAgICAv KiBPcGVuIHRpY2tldCBmaWxlICovCisgICAgaWYgKGtfZXJybm8gPSB0Zl9pbml0KGZpbGUsIFJf VEtUX0ZJTCkpIHsKKyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9CisKKyAgICAvKiBDbG9zZSB0 aWNrZXQgZmlsZSAqLworICAgICh2b2lkKSB0Zl9jbG9zZSgpOworCisgICAgLyoKKyAgICAgKiBX ZSBtdXN0IGZpbmQgdGhlIHJlYWxtIG9mIHRoZSB0aWNrZXQgZmlsZSBoZXJlIGJlZm9yZSBjYWxs aW5nCisgICAgICogdGZfaW5pdCBiZWNhdXNlIHNpbmNlIHRoZSByZWFsbSBvZiB0aGUgdGlja2V0 IGZpbGUgaXMgbm90CisgICAgICogcmVhbGx5IHN0b3JlZCBpbiB0aGUgcHJpbmNpcGFsIHNlY3Rp b24gb2YgdGhlIGZpbGUsIHRoZQorICAgICAqIHJvdXRpbmUgd2UgdXNlIG11c3QgaXRzZWxmIGNh bGwgdGZfaW5pdCBhbmQgdGZfY2xvc2UuCisgICAgICovCisgICAgaWYgKChrX2Vycm5vID0ga3Ji X2dldF90Zl9yZWFsbShmaWxlLCBwcmVhbG0pKSAhPSBBVVRIX1NVQ0NFU1MpIHsKKyAgICAgICAg cmV0dXJuKC0xKTsKKyAgICB9CisKKyAgICAvKiBPcGVuIHRpY2tldCBmaWxlICovCisgICAgaWYg KGtfZXJybm8gPSB0Zl9pbml0KGZpbGUsIFJfVEtUX0ZJTCkpIHsKKyAgICAgICAgcmV0dXJuKC0x KTsKKyAgICB9CisgICAgLyogR2V0IHByaW5jaXBhbCBuYW1lIGFuZCBpbnN0YW5jZSAqLworICAg IGlmICgoa19lcnJubyA9IHRmX2dldF9wbmFtZShwbmFtZSkpIHx8CisgICAgICAgICAoa19lcnJu byA9IHRmX2dldF9waW5zdChwaW5zdCkpKSB7CisgICAgICAgIHRmX2Nsb3NlKCk7CisgICAgICAg IHJldHVybigtMSk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBZb3UgbWF5IHRoaW5rIHRoYXQg dGhpcyBpcyB0aGUgb2J2aW91cyBwbGFjZSB0byBnZXQgdGhlCisgICAgICogcmVhbG0gb2YgdGhl IHRpY2tldCBmaWxlLCBidXQgaXQgY2FuJ3QgYmUgZG9uZSBoZXJlIGFzIHRoZQorICAgICAqIHJv dXRpbmUgdG8gZG8gdGhpcyBtdXN0IG9wZW4gdGhlIHRpY2tldCBmaWxlLiAgVGhpcyBpcyB3aHkK KyAgICAgKiBpdCB3YXMgZG9uZSBiZWZvcmUgdGZfaW5pdC4KKyAgICAgKi8KKworICAgIHdoaWxl ICgoa19lcnJubyA9IHRmX2dldF9jcmVkKCZjcmVkcykpID09IEFVVEhfU1VDQ0VTUykgeworICAg ICAgICBjaGFyIHRrdF9idWZbMjU2XTsKKyAgICAgICAgY2ttYWt4bXNnKHRrdF9idWYsc2l6ZW9m KHRrdF9idWYpLAorICAgICAgICAgICAgICAgICBjcmVkcy5zZXJ2aWNlLCAoY3JlZHMuaW5zdGFu Y2VbMF0gPyAiLiIgOiAiIiksCisgICAgICAgICAgICAgICAgIGNyZWRzLmluc3RhbmNlLAorICAg ICAgICAgICAgICAgICAoY3JlZHMucmVhbG1bMF0gPyAiQCIgOiAiIiksIGNyZWRzLnJlYWxtLAor ICAgICAgICAgICAgICAgICBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMKTsKKyAg ICAgICAgaWYgKCAhc3RyY21wKHRrdG5hbWUsdGt0X2J1ZikgKSB7CisgICAgICAgICAgICAvKiB3 ZSBmb3VuZCB0aGUgdGlja2V0IHdlIGFyZSBsb29raW5nIGZvciAqLworICAgICAgICAgICAgaW50 IG4gPSAoY3JlZHMuaXNzdWVfZGF0ZQorICAgICAgICAgICAgICAgICAgICAgICsgKCgodW5zaWdu ZWQgY2hhcikgY3JlZHMubGlmZXRpbWUpICogNSAqIDYwKSkKKyAgICAgICAgICAgICAgICAtIHRp bWUoMCk7CisgICAgICAgICAgICB0Zl9jbG9zZSgpOworICAgICAgICAgICAgcmV0dXJuKG4gPD0g MCA/IDAgOiBuKTsKKyAgICAgICAgfQorICAgIH0KKyAgICB0Zl9jbG9zZSgpOworICAgIHJldHVy bigwKTsgICAgICAgICAgICAgICAgICAvKiBjb3VsZCBub3QgZmluZCB0aGUgZGVzaXJlZCB0aWNr ZXQgKi8KKyNlbHNlIC8qIEtSQjQgKi8KKyAgICByZXR1cm4oLTEpOworI2VuZGlmIC8qIEtSQjQg Ki8KK30KKworY2hhciAqCisjaWZkZWYgQ0tfQU5TSUMKK2NrX2tyYjRfZ2V0cmVhbG0odm9pZCkK KyNlbHNlCitja19rcmI0X2dldHJlYWxtKCkKKyNlbmRpZgoreworI2lmZGVmIEtSQjQKKyAgICBj aGFyICAgKmZpbGU9TlVMTDsKKyAgICBpbnQgICAgIGtfZXJybm87CisgICAgc3RhdGljIGNoYXIg cmVhbG1bMjU2XT0iIjsKKyAgICByZWFsbVswXT0nXDAnOworCisgICAgaWYgKCAhY2tfa3JiNF9p c19pbnN0YWxsZWQoKSApCisgICAgICAgIHJldHVybihyZWFsbSk7CisKKyAgICAvKiBUcnkgdG8g Z2V0IHJlYWxtIGZyb20gdGlja2V0IGZpbGUgKi8KKyAgICAvKiBJZiBmYWlsdXJlIGdldCB0aGUg bG9jYWwgcmVhbG0gICAgKi8KKworICAgIC8qCisgICAgKiBTaW5jZSBrcmJfZ2V0X3RmX3JlYWxt IHdpbGwgcmV0dXJuIGEgdGlja2V0X2ZpbGUgZXJyb3IsCisgICAgKiB3ZSB3aWxsIGNhbGwgdGZf aW5pdCBhbmQgdGZfY2xvc2UgZmlyc3QgdG8gZmlsdGVyIG91dAorICAgICogdGhpbmdzIGxpa2Ug bm8gdGlja2V0IGZpbGUuCisgICAgKi8KKworICAgIC8qIE9wZW4gdGlja2V0IGZpbGUgKi8KKyAg ICBmaWxlID0gdGt0X3N0cmluZygpOworICAgIGlmIChmaWxlID09IE5VTEwgfHwgIWZpbGVbMF0p CisgICAgICAgIHJldHVybihyZWFsbSk7CisKKyAgICBpZiAoKGtfZXJybm8gPSB0Zl9pbml0KGZp bGUsIFJfVEtUX0ZJTCkpID09IEtTVUNDRVNTKSB7CisgICAgICAgIC8qIENsb3NlIHRpY2tldCBm aWxlICovCisgICAgICAgICh2b2lkKSB0Zl9jbG9zZSgpOworCisgICAgICAgIGtfZXJybm8gPSBr cmJfZ2V0X3RmX3JlYWxtKGZpbGUsIHJlYWxtKTsKKyAgICB9CisgICAgaWYgKGtfZXJybm8gIT0g S1NVQ0NFU1MpIHsKKyAgICAgICAga19lcnJubyA9IGtyYl9nZXRfbHJlYWxtKHJlYWxtLCAxKTsK KyAgICB9CisgICAgcmV0dXJuKHJlYWxtKTsKKyNlbHNlIC8qIEtSQjQgKi8KKyAgICByZXR1cm4o IiIpOworI2VuZGlmIC8qIEtSQjQgKi8KK30KKworY2hhciAqCisjaWZkZWYgQ0tfQU5TSUMKK2Nr X2tyYjRfZ2V0cHJpbmNpcGFsKHZvaWQpCisjZWxzZQorY2tfa3JiNF9nZXRwcmluY2lwYWwoKQor I2VuZGlmCit7CisjaWZkZWYgS1JCNAorICAgIGNoYXIgICAqZmlsZT1OVUxMOworICAgIGludCAg ICAga19lcnJubzsKKyAgICBzdGF0aWMgY2hhciBwcmluY2lwYWxbMjU2XT0iIjsKKyAgICBjaGFy ICAgICAgICBpbnN0YW5jZVsyNTZdPSIiOworICAgIGNoYXIgICAgICAgIHJlYWxtWzI1Nl09IiI7 CisgICAgcHJpbmNpcGFsWzBdPSdcMCc7CisKKyAgICBpZiAoICFja19rcmI0X2lzX2luc3RhbGxl ZCgpICkKKyAgICAgICAgcmV0dXJuKHByaW5jaXBhbCk7CisKKyAgICAvKiBUcnkgdG8gZ2V0IHJl YWxtIGZyb20gdGlja2V0IGZpbGUgKi8KKyAgICAvKiBJZiBmYWlsdXJlIGdldCB0aGUgbG9jYWwg cmVhbG0gICAgKi8KKworICAgIC8qCisgICAgKiBTaW5jZSBrcmJfZ2V0X3RmX3JlYWxtIHdpbGwg cmV0dXJuIGEgdGlja2V0X2ZpbGUgZXJyb3IsCisgICAgKiB3ZSB3aWxsIGNhbGwgdGZfaW5pdCBh bmQgdGZfY2xvc2UgZmlyc3QgdG8gZmlsdGVyIG91dAorICAgICogdGhpbmdzIGxpa2Ugbm8gdGlj a2V0IGZpbGUuCisgICAgKi8KKworICAgIC8qIE9wZW4gdGlja2V0IGZpbGUgKi8KKyAgICBmaWxl ID0gdGt0X3N0cmluZygpOworICAgIGlmIChmaWxlID09IE5VTEwgfHwgIWZpbGVbMF0pCisgICAg ICAgIHJldHVybihwcmluY2lwYWwpOworCisgICAgaWYgKChrX2Vycm5vID0gdGZfaW5pdChmaWxl LCBSX1RLVF9GSUwpKSA9PSBLU1VDQ0VTUykgeworICAgICAgICAvKiBDbG9zZSB0aWNrZXQgZmls ZSAqLworICAgICAgICAodm9pZCkgdGZfY2xvc2UoKTsKKworICAgICAgICBrX2Vycm5vID0ga3Ji X2dldF90Zl9mdWxsbmFtZShmaWxlLCBwcmluY2lwYWwsIGluc3RhbmNlLCByZWFsbSk7CisgICAg fQorICAgIHJldHVybihwcmluY2lwYWwpOworI2Vsc2UgLyogS1JCNCAqLworICAgIHJldHVybigi Iik7CisjZW5kaWYgLyogS1JCNCAqLworfQorCitzdGF0aWMgc3RydWN0IHRrdF9saXN0X2l0ZW0g KiBrNV90a3RfbGlzdCA9IE5VTEw7CisKK2ludAorI2lmZGVmIENLX0FOU0lDCitja19rcmI1X2dl dF90a3RzKGNoYXIgKiBjY19uYW1lKQorI2Vsc2UKK2NrX2tyYjVfZ2V0X3RrdHMoY2NfbmFtZSkg Y2hhciAqIGNjX25hbWU7CisjZW5kaWYKK3sKKyNpZmRlZiBLUkI1CisjaWZuZGVmIEhFSU1EQUwK KyAgICBrcmI1X2NvbnRleHQga2NvbnRleHQ7CisgICAga3JiNV9lcnJvcl9jb2RlIHJldHZhbDsK KyAgICBrcmI1X2NjYWNoZSBjYWNoZSA9IE5VTEw7CisgICAga3JiNV9jY19jdXJzb3IgY3VyOwor ICAgIGtyYjVfY3JlZHMgY3JlZHM7CisgICAga3JiNV9wcmluY2lwYWwgcHJpbmM9TlVMTDsKKyAg ICBrcmI1X2ZsYWdzIGZsYWdzPTA7CisgICAga3JiNV9lcnJvcl9jb2RlIGNvZGU9MDsKKyAgICBp bnQgZXhpdF9zdGF0dXMgPSAwOworCisgICAgaW50ICAgICB0a3RfY291bnQ9MDsKKyAgICBzdHJ1 Y3QgIHRrdF9saXN0X2l0ZW0gKiogbGlzdCA9ICZrNV90a3RfbGlzdDsKKworICAgIHdoaWxlICgg azVfdGt0X2xpc3QgKSB7CisgICAgICAgIHN0cnVjdCB0a3RfbGlzdF9pdGVtICogbmV4dDsKKyAg ICAgICAgbmV4dCA9IGs1X3RrdF9saXN0LT5uZXh0OworICAgICAgICBmcmVlKGs1X3RrdF9saXN0 LT5uYW1lKTsKKyAgICAgICAgZnJlZShrNV90a3RfbGlzdCk7CisgICAgICAgIGs1X3RrdF9saXN0 ID0gbmV4dDsKKyAgICB9CisKKyAgICBpZiAoICFja19rcmI1X2lzX2luc3RhbGxlZCgpICkKKyAg ICAgICAgcmV0dXJuKC0xKTsKKworICAgIHJldHZhbCA9IGtyYjVfaW5pdF9jb250ZXh0KCZrY29u dGV4dCk7CisgICAgaWYgKHJldHZhbCkgeworICAgICAgICBkZWJ1ZyhGMTAxLCJja19rcmI1X2dl dF90a3RzIHdoaWxlIGluaXRpYWxpemluZyBrcmI1IiwiIixyZXR2YWwpOworICAgICAgICByZXR1 cm4oLTEpOworICAgIH0KKworICAgIGNvZGUgPSBrNV9nZXRfY2NhY2hlKGtjb250ZXh0LCZjYWNo ZSxjY19uYW1lKTsKKyAgICBpZiAoY29kZSAhPSAwKSB7CisgICAgICAgIGRlYnVnKEYxMTEsImNr X2tyYjVfZ2V0X3RrdHMgd2hpbGUgZ2V0dGluZyBjY2FjaGUiLAorICAgICAgICAgICAgICAgZXJy b3JfbWVzc2FnZShjb2RlKSxjb2RlKTsKKyAgICAgICAgdGt0X2NvdW50ID0gLTE7CisgICAgICAg IGdvdG8gZXhpdF9rNV9nZXRfdGt0OworICAgIH0KKworICAgIGZsYWdzID0gMDsgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIHR1cm5zIG9mZiBPUEVOQ0xPU0UgbW9kZSAqLworICAgIGlmICgo Y29kZSA9IGtyYjVfY2Nfc2V0X2ZsYWdzKGtjb250ZXh0LCBjYWNoZSwgZmxhZ3MpKSkgeworICAg ICAgICBpZiAoY29kZSA9PSBFTk9FTlQpIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMTEsImNrX2ty YjVfZ2V0X3RrdHMgKHRpY2tldCBjYWNoZSkiLAorICAgICAgICAgICAgICAgICAgIGtyYjVfY2Nf Z2V0X25hbWUoa2NvbnRleHQsIGNhY2hlKSxjb2RlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg ICAgICAgIGRlYnVnKEYxMTEsCisgICAgICAgICAgICAgICAgICJja19rcmI1X2dldF90a3RzIHdo aWxlIHNldHRpbmcgY2FjaGUgZmxhZ3MgKHRpY2tldCBjYWNoZSkiLAorICAgICAgICAgICAgICAg ICAga3JiNV9jY19nZXRfbmFtZShrY29udGV4dCwgY2FjaGUpLGNvZGUpOworICAgICAgICB9Cisg ICAgICAgIHRrdF9jb3VudCA9IC0xOworICAgICAgICBnb3RvIGV4aXRfazVfZ2V0X3RrdDsKKyAg ICB9CisgICAgaWYgKChjb2RlID0ga3JiNV9jY19nZXRfcHJpbmNpcGFsKGtjb250ZXh0LCBjYWNo ZSwgJnByaW5jKSkpIHsKKyAgICAgICAgZGVidWcoRjEwMSwiY2tfa3JiNV9nZXRfdGt0cyB3aGls ZSByZXRyaWV2aW5nIHByaW5jaXBhbCBuYW1lIiwKKyAgICAgICAgICAgICAgICIiLGNvZGUpOwor ICAgICAgICB0a3RfY291bnQgPSAtMTsKKyAgICAgICAgZ290byBleGl0X2s1X2dldF90a3Q7Cisg ICAgfQorICAgIGlmICgoY29kZSA9IGtyYjVfdW5wYXJzZV9uYW1lKGtjb250ZXh0LCBwcmluYywg JmRlZm5hbWUpKSkgeworICAgICAgICBkZWJ1ZyhGMTAxLCJja19rcmI1X2dldF90a3RzIHdoaWxl IHVucGFyc2luZyBwcmluY2lwYWwgbmFtZSIsCisgICAgICAgICAgICAgICAiIixjb2RlKTsKKyAg ICAgICAgdGt0X2NvdW50ID0gLTE7CisgICAgICAgIGdvdG8gZXhpdF9rNV9nZXRfdGt0OworICAg IH0KKworICAgIGlmICgoY29kZSA9IGtyYjVfY2Nfc3RhcnRfc2VxX2dldChrY29udGV4dCwgY2Fj aGUsICZjdXIpKSkgeworICAgICAgICBkZWJ1ZyhGMTAxLCJja19rcmI1X2dldF90a3RzIHdoaWxl IHN0YXJ0aW5nIHRvIHJldHJpZXZlIHRpY2tldHMiLAorICAgICAgICAgICAgICAgIiIsY29kZSk7 CisgICAgICAgIHRrdF9jb3VudCA9IC0xOworICAgICAgICBnb3RvIGV4aXRfazVfZ2V0X3RrdDsK KyAgICB9CisKKyAgICB3aGlsZSAoIShjb2RlID0ga3JiNV9jY19uZXh0X2NyZWQoa2NvbnRleHQs IGNhY2hlLCAmY3VyLCAmY3JlZHMpKSkgeworICAgICAgICBjaGFyICpzbmFtZT1OVUxMOworCisg ICAgICAgIHJldHZhbCA9IGtyYjVfdW5wYXJzZV9uYW1lKGtjb250ZXh0LCBjcmVkcy5zZXJ2ZXIs ICZzbmFtZSk7CisgICAgICAgIGlmIChyZXR2YWwpIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMDEs CisgICAgICAgICAgICAgICAgICAiY2tfa3JiNV9nZXRfdGt0cyB3aGlsZSB1bnBhcnNpbmcgc2Vy dmVyIG5hbWUiLCIiLHJldHZhbCk7CisgICAgICAgICAgICB0a3RfY291bnQgPSAtMTsKKyAgICAg ICAgICAgIGdvdG8gZXhpdF9rNV9nZXRfdGt0OworICAgICAgICB9CisKKyAgICAgICAgKmxpc3Qg PSAoc3RydWN0IHRrdF9saXN0X2l0ZW0gKikgbWFsbG9jKHNpemVvZihzdHJ1Y3QgdGt0X2xpc3Rf aXRlbSkpOworICAgICAgICAoKmxpc3QpLT5uYW1lID0gc25hbWU7CisgICAgICAgICgqbGlzdCkt Pm5leHQgPSBOVUxMOworICAgICAgICBsaXN0ID0gJigoKmxpc3QpLT5uZXh0KTsKKworICAgICAg ICBrcmI1X2ZyZWVfdW5wYXJzZWRfbmFtZShrY29udGV4dCxzbmFtZSk7CisgICAgICAgIGtyYjVf ZnJlZV9jcmVkX2NvbnRlbnRzKGtjb250ZXh0LCAmY3JlZHMpOworICAgICAgICB0a3RfY291bnQr KzsKKyAgICB9CisKKyAgICBpZiAoY29kZSA9PSBLUkI1X0NDX0VORCkgeworICAgICAgICBpZiAo KGNvZGUgPSBrcmI1X2NjX2VuZF9zZXFfZ2V0KGtjb250ZXh0LCBjYWNoZSwgJmN1cikpKSB7Cisg ICAgICAgICAgICBkZWJ1ZyhGMTAxLCJja19rcmI1X2dldF90a3RzIHdoaWxlIGZpbmlzaGluZyB0 aWNrZXQgcmV0cmlldmFsIiwKKyAgICAgICAgICAgICAgICAgICAiIixjb2RlKTsKKyAgICAgICAg ICAgIHRrdF9jb3VudCA9IC0xOworICAgICAgICAgICAgZ290byBleGl0X2s1X2dldF90a3Q7Cisg ICAgICAgIH0KKyAgICAgICAgZmxhZ3MgPSBLUkI1X1RDX09QRU5DTE9TRTsgICAgICAvKiB0dXJu cyBvbiBPUEVOQ0xPU0UgbW9kZSAqLworICAgICAgICBpZiAoKGNvZGUgPSBrcmI1X2NjX3NldF9m bGFncyhrY29udGV4dCwgY2FjaGUsIGZsYWdzKSkpIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMDEs ImNrX2tyYjVfZ2V0X3RrdHMgd2hpbGUgY2xvc2luZyBjY2FjaGUiLAorICAgICAgICAgICAgICAg ICAgICIiLGNvZGUpOworICAgICAgICAgICAgdGt0X2NvdW50ID0gLTE7CisgICAgICAgICAgICBn b3RvIGV4aXRfazVfZ2V0X3RrdDsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGRl YnVnKEYxMDEsImNrX2tyYjVfZ2V0X3RrdHMgd2hpbGUgcmV0cmlldmluZyBhIHRpY2tldCIsIiIs Y29kZSk7CisgICAgICAgIHRrdF9jb3VudCA9IC0xOworICAgICAgICBnb3RvIGV4aXRfazVfZ2V0 X3RrdDsKKyAgICB9CisKKyAgZXhpdF9rNV9nZXRfdGt0OgorICAgIGtyYjVfZnJlZV9wcmluY2lw YWwoa2NvbnRleHQscHJpbmMpOworICAgIGtyYjVfZnJlZV91bnBhcnNlZF9uYW1lKGtjb250ZXh0 LGRlZm5hbWUpOworICAgIGtyYjVfY2NfY2xvc2Uoa2NvbnRleHQsY2FjaGUpOworICAgIGtyYjVf ZnJlZV9jb250ZXh0KGtjb250ZXh0KTsKKyAgICByZXR1cm4odGt0X2NvdW50KTsKKyNlbHNlIC8q IEhFSU1EQUwgKi8KKyAgICByZXR1cm4oLTEpOworI2VuZGlmIC8qIEhFSU1EQUwgKi8KKyNlbHNl IC8qIEtSQjUgKi8KKyAgICByZXR1cm4oMCk7CisjZW5kaWYgLyogS1JCNSAqLworfQorCitjaGFy ICoKKyNpZmRlZiBDS19BTlNJQworY2tfa3JiNV9nZXRfbmV4dF90a3QoVk9JRCkKKyNlbHNlCitj a19rcmI1X2dldF9uZXh0X3RrdCgpCisjZW5kaWYKK3sKKyNpZmRlZiBLUkI1CisjaWZuZGVmIEhF SU1EQUwKKyAgICBzdGF0aWMgY2hhciAqIHM9TlVMTDsKKyAgICBzdHJ1Y3QgdGt0X2xpc3RfaXRl bSAqIG5leHQ9TlVMTDsKKworICAgIGlmICggcyApIHsKKyAgICAgICAgZnJlZShzKTsKKyAgICAg ICAgcyA9IE5VTEw7CisgICAgfQorCisgICAgaWYgKCBrNV90a3RfbGlzdCA9PSBOVUxMICkKKyAg ICAgICAgcmV0dXJuKE5VTEwpOworCisgICAgbmV4dCA9IGs1X3RrdF9saXN0LT5uZXh0OworICAg IHMgPSBrNV90a3RfbGlzdC0+bmFtZTsKKyAgICBmcmVlKGs1X3RrdF9saXN0KTsKKyAgICBrNV90 a3RfbGlzdCA9IG5leHQ7CisgICAgcmV0dXJuKHMpOworI2Vsc2UgLyogSEVJTURBTCAqLworICAg IHJldHVybigiTm90IGltcGxlbWVudGVkIik7CisjZW5kaWYgLyogSEVJTURBTCAqLworI2Vsc2Ug LyogS1JCNSAqLworICAgIHJldHVybihOVUxMKTsKKyNlbmRpZiAvKiBLUkI1ICovCit9CisKK2No YXIgKgorI2lmZGVmIENLX0FOU0lDCitja19rcmI1X3RrdF9mbGFncyhjaGFyICogY2NfbmFtZSwg Y2hhciAqIHRrdG5hbWUpCisjZWxzZQorY2tfa3JiNV90a3RfZmxhZ3MoY2NfbmFtZSx0a3RuYW1l KSBjaGFyICogY2NfbmFtZTsgY2hhciAqIHRrdG5hbWU7CisjZW5kaWYKK3sKKyNpZmRlZiBLUkI1 CisjaWZuZGVmIEhFSU1EQUwKKyAgICBrcmI1X2NvbnRleHQga2NvbnRleHQ7CisgICAga3JiNV9l cnJvcl9jb2RlIHJldHZhbDsKKyAgICBrcmI1X2NjYWNoZSBjYWNoZSA9IE5VTEw7CisgICAga3Ji NV9jY19jdXJzb3IgY3VyOworICAgIGtyYjVfY3JlZHMgY3JlZHM7CisgICAga3JiNV9wcmluY2lw YWwgcHJpbmM9TlVMTDsKKyAgICBrcmI1X2ZsYWdzIGZsYWdzPTA7CisgICAga3JiNV9lcnJvcl9j b2RlIGNvZGU9MDsKKyAgICBjaGFyICogZmxhZ19zdHIgPSAiIjsKKworICAgIGlmICggIWNrX2ty YjVfaXNfaW5zdGFsbGVkKCkgKQorICAgICAgICByZXR1cm4oIiIpOworCisgICAgcmV0dmFsID0g a3JiNV9pbml0X2NvbnRleHQoJmtjb250ZXh0KTsKKyAgICBpZiAocmV0dmFsKSB7CisgICAgICAg IGRlYnVnKEYxMDEsImNrX2tyYjVfdGt0X2ZsYWdzIHdoaWxlIGluaXRpYWxpemluZyBrcmI1Iiwi IixyZXR2YWwpOworICAgICAgICByZXR1cm4oIiIpOworICAgIH0KKworICAgIGNvZGUgPSBrNV9n ZXRfY2NhY2hlKGtjb250ZXh0LCZjYWNoZSxjY19uYW1lKTsKKyAgICBpZiAoY29kZSAhPSAwKSB7 CisgICAgICAgIGRlYnVnKEYxMTEsImNrX2tyYjVfdGt0X2lzdmFsaWQgd2hpbGUgZ2V0dGluZyBj Y2FjaGUiLAorICAgICAgICAgICAgICAgZXJyb3JfbWVzc2FnZShjb2RlKSxjb2RlKTsKKyAgICAg ICAgZ290byBleGl0X2s1X2dldF90a3Q7CisgICAgfQorCisgICAgZmxhZ3MgPSAwOyAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogdHVybnMgb2ZmIE9QRU5DTE9TRSBtb2RlICovCisgICAgaWYg KChjb2RlID0ga3JiNV9jY19zZXRfZmxhZ3Moa2NvbnRleHQsIGNhY2hlLCBmbGFncykpKSB7Cisg ICAgICAgIGlmIChjb2RlID09IEVOT0VOVCkgeworICAgICAgICAgICAgZGVidWcoRjExMSwiY2tf a3JiNV90a3RfZmxhZ3MgKHRpY2tldCBjYWNoZSkiLAorICAgICAgICAgICAgICAgICAgIGtyYjVf Y2NfZ2V0X25hbWUoa2NvbnRleHQsIGNhY2hlKSxjb2RlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg ICAgICAgICAgIGRlYnVnKEYxMTEsCisgICAgICAgICAgICAgICAgICJja19rcmI1X3RrdF9mbGFn cyB3aGlsZSBzZXR0aW5nIGNhY2hlIGZsYWdzICh0aWNrZXQgY2FjaGUpIiwKKyAgICAgICAgICAg ICAgICAgIGtyYjVfY2NfZ2V0X25hbWUoa2NvbnRleHQsIGNhY2hlKSxjb2RlKTsKKyAgICAgICAg fQorICAgICAgICByZXR2YWwgPSAtMTsKKyAgICAgICAgZ290byBleGl0X2s1X2dldF90a3Q7Cisg ICAgfQorICAgIGlmICgoY29kZSA9IGtyYjVfY2NfZ2V0X3ByaW5jaXBhbChrY29udGV4dCwgY2Fj aGUsICZwcmluYykpKSB7CisgICAgICAgIGRlYnVnKEYxMDEsImNrX2tyYjVfdGt0X2ZsYWdzIHdo aWxlIHJldHJpZXZpbmcgcHJpbmNpcGFsIG5hbWUiLAorICAgICAgICAgICAgICAgIiIsY29kZSk7 CisgICAgICAgIHJldHZhbCA9IC0xOworICAgICAgICBnb3RvIGV4aXRfazVfZ2V0X3RrdDsKKyAg ICB9CisgICAgaWYgKChjb2RlID0ga3JiNV91bnBhcnNlX25hbWUoa2NvbnRleHQsIHByaW5jLCAm ZGVmbmFtZSkpKSB7CisgICAgICAgIGRlYnVnKEYxMDEsImNrX2tyYjVfdGt0X2ZsYWdzIHdoaWxl IHVucGFyc2luZyBwcmluY2lwYWwgbmFtZSIsCisgICAgICAgICAgICAgICAiIixjb2RlKTsKKyAg ICAgICAgcmV0dmFsID0gLTE7CisgICAgICAgIGdvdG8gZXhpdF9rNV9nZXRfdGt0OworICAgIH0K KworICAgIGlmICgoY29kZSA9IGtyYjVfY2Nfc3RhcnRfc2VxX2dldChrY29udGV4dCwgY2FjaGUs ICZjdXIpKSkgeworICAgICAgICBkZWJ1ZyhGMTAxLCJja19rcmI1X3RrdF9mbGFncyB3aGlsZSBz dGFydGluZyB0byByZXRyaWV2ZSB0aWNrZXRzIiwKKyAgICAgICAgICAgICAgICIiLGNvZGUpOwor ICAgICAgICByZXR2YWwgPSAtMTsKKyAgICAgICAgZ290byBleGl0X2s1X2dldF90a3Q7CisgICAg fQorCisgICAgaWYgKChjb2RlID0ga3JiNV90aW1lb2ZkYXkoa2NvbnRleHQsICZub3cpKSkgewor ICAgICAgICBpZiAoIXN0YXR1c19vbmx5KQorICAgICAgICAgICAgZGVidWcoRjEwMSwiY2tfa3Ji NV90a3RfZmxhZ3Mgd2hpbGUgZ2V0dGluZyB0aW1lIG9mIGRheS4iLAorICAgICAgICAgICAgICAg ICAgICIiLGNvZGUpOworICAgICAgICByZXR2YWwgPSAtMTsKKyAgICAgICAgZ290byBleGl0X2s1 X2dldF90a3Q7CisgICAgfQorCisgICAgd2hpbGUgKCEoY29kZSA9IGtyYjVfY2NfbmV4dF9jcmVk KGtjb250ZXh0LCBjYWNoZSwgJmN1ciwgJmNyZWRzKSkpIHsKKyAgICAgICAgY2hhciAqc25hbWU9 TlVMTDsKKworICAgICAgICByZXR2YWwgPSBrcmI1X3VucGFyc2VfbmFtZShrY29udGV4dCwgY3Jl ZHMuc2VydmVyLCAmc25hbWUpOworICAgICAgICBpZiAocmV0dmFsKSB7CisgICAgICAgICAgICBk ZWJ1ZyhGMTAxLAorICAgICAgICAgICAgICAgICAgImNrX2tyYjVfdGt0X2ZsYWdzIHdoaWxlIHVu cGFyc2luZyBzZXJ2ZXIgbmFtZSIsIiIscmV0dmFsKTsKKyAgICAgICAgICAgIHJldHZhbCA9IC0x OworICAgICAgICAgICAga3JiNV9mcmVlX2NyZWRfY29udGVudHMoa2NvbnRleHQsICZjcmVkcyk7 CisgICAgICAgICAgICBnb3RvIGV4aXRfazVfZ2V0X3RrdDsKKyAgICAgICAgfQorCisgICAgICAg IGlmICggIXN0cmNtcChzbmFtZSx0a3RuYW1lKSApIHsKKyAgICAgICAgICAgIC8qIHdlIGZvdW5k IHRoZSB0aWNrZXQgd2UgYXJlIGxvb2tpbmcgZm9yICovCisKKyAgICAgICAgICAgIGZsYWdfc3Ry ID0gZmxhZ3Nfc3RyaW5nKCZjcmVkcyk7CisKKyAgICAgICAgICAgIGtyYjVfZnJlZV91bnBhcnNl ZF9uYW1lKGtjb250ZXh0LHNuYW1lKTsKKyAgICAgICAgICAgIGtyYjVfZnJlZV9jcmVkX2NvbnRl bnRzKGtjb250ZXh0LCAmY3JlZHMpOworICAgICAgICAgICAgY29kZSA9IEtSQjVfQ0NfRU5EOwor ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAga3JiNV9mcmVlX3VucGFyc2Vk X25hbWUoa2NvbnRleHQsc25hbWUpOworICAgICAgICBrcmI1X2ZyZWVfY3JlZF9jb250ZW50cyhr Y29udGV4dCwgJmNyZWRzKTsKKyAgICB9CisKKyAgICBpZiAoY29kZSA9PSBLUkI1X0NDX0VORCkg eworICAgICAgICBpZiAoKGNvZGUgPSBrcmI1X2NjX2VuZF9zZXFfZ2V0KGtjb250ZXh0LCBjYWNo ZSwgJmN1cikpKSB7CisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJja19rcmI1X3RrdF9mbGFncyB3 aGlsZSBmaW5pc2hpbmcgdGlja2V0IHJldHJpZXZhbCIsCisgICAgICAgICAgICAgICAgICAgIiIs Y29kZSk7CisgICAgICAgICAgICBnb3RvIGV4aXRfazVfZ2V0X3RrdDsKKyAgICAgICAgfQorICAg ICAgICBmbGFncyA9IEtSQjVfVENfT1BFTkNMT1NFOyAgICAgIC8qIHR1cm5zIG9uIE9QRU5DTE9T RSBtb2RlICovCisgICAgICAgIGlmICgoY29kZSA9IGtyYjVfY2Nfc2V0X2ZsYWdzKGtjb250ZXh0 LCBjYWNoZSwgZmxhZ3MpKSkgeworICAgICAgICAgICAgZGVidWcoRjEwMSwiY2tfa3JiNV90a3Rf ZmxhZ3Mgd2hpbGUgY2xvc2luZyBjY2FjaGUiLAorICAgICAgICAgICAgICAgICAgICIiLGNvZGUp OworICAgICAgICAgICAgZ290byBleGl0X2s1X2dldF90a3Q7CisgICAgICAgIH0KKyAgICB9IGVs c2UgeworICAgICAgICBkZWJ1ZyhGMTAxLCJja19rcmI1X3RrdF9mbGFncyB3aGlsZSByZXRyaWV2 aW5nIGEgdGlja2V0IiwiIixjb2RlKTsKKyAgICAgICAgZ290byBleGl0X2s1X2dldF90a3Q7Cisg ICAgfQorCisgIGV4aXRfazVfZ2V0X3RrdDoKKyAgICBrcmI1X2ZyZWVfcHJpbmNpcGFsKGtjb250 ZXh0LHByaW5jKTsKKyAgICBrcmI1X2ZyZWVfdW5wYXJzZWRfbmFtZShrY29udGV4dCxkZWZuYW1l KTsKKyAgICBrcmI1X2NjX2Nsb3NlKGtjb250ZXh0LGNhY2hlKTsKKyAgICBrcmI1X2ZyZWVfY29u dGV4dChrY29udGV4dCk7CisgICAgcmV0dXJuKGZsYWdfc3RyKTsKKyNlbHNlIC8qIEhFSU1EQUwg Ki8KKyAgICByZXR1cm4oIk5vdCBpbXBsZW1lbnRlZCIpOworI2VuZGlmIC8qIEhFSU1EQUwgKi8K KyNlbHNlIC8qIEtSQjUgKi8KKyAgICByZXR1cm4oIiIpOworI2VuZGlmIC8qIEtSQjUgKi8KK30K KworCitpbnQKKyNpZmRlZiBDS19BTlNJQworY2tfa3JiNV90a3RfaXN2YWxpZChjaGFyICogY2Nf bmFtZSwgY2hhciAqIHRrdG5hbWUpCisjZWxzZQorY2tfa3JiNV90a3RfaXN2YWxpZChjY19uYW1l LHRrdG5hbWUpIGNoYXIgKiBjY19uYW1lOyBjaGFyICogdGt0bmFtZTsKKyNlbmRpZgoreworI2lm ZGVmIEtSQjUKKyNpZm5kZWYgSEVJTURBTAorICAgIGtyYjVfY29udGV4dCBrY29udGV4dD1OVUxM OworICAgIGtyYjVfZXJyb3JfY29kZSByZXR2YWw7CisgICAga3JiNV9jY2FjaGUgY2FjaGUgPSBO VUxMOworICAgIGtyYjVfY2NfY3Vyc29yIGN1cjsKKyAgICBrcmI1X2NyZWRzIGNyZWRzOworICAg IGtyYjVfcHJpbmNpcGFsIHByaW5jPU5VTEw7CisgICAga3JiNV9mbGFncyBmbGFncz0wOworICAg IGtyYjVfZXJyb3JfY29kZSBjb2RlPTA7CisjaWZkZWYgQ0hFQ0tBRERSUworICAgIGtyYjVfYWRk cmVzcyAqKiAgICAgbXlBZGRycz1OVUxMOworICAgIGtyYjVfYWRkcmVzcyAqKiAgICAgcD1OVUxM OworICAgIEJPT0wgICAgICAgICAgICAgICAgQWRkcmZvdW5kID0gRkFMU0U7CisjZW5kaWYgLypD SEVDS0FERFJTKi8KKworICAgIGlmICggIWNrX2tyYjVfaXNfaW5zdGFsbGVkKCkgKQorICAgICAg ICByZXR1cm4oLTEpOworCisgICAgcmV0dmFsID0ga3JiNV9pbml0X2NvbnRleHQoJmtjb250ZXh0 KTsKKyAgICBpZiAocmV0dmFsKSB7CisgICAgICAgIGRlYnVnKEYxMDEsImNrX2tyYjVfdGt0X2lz dmFsaWQgd2hpbGUgaW5pdGlhbGl6aW5nIGtyYjUiLCIiLHJldHZhbCk7CisgICAgICAgIHJldHVy bigtMSk7CisgICAgfQorCisgICAgY29kZSA9IGs1X2dldF9jY2FjaGUoa2NvbnRleHQsJmNhY2hl LGNjX25hbWUpOworICAgIGlmIChjb2RlICE9IDApIHsKKyAgICAgICAgZGVidWcoRjExMSwiY2tf a3JiNV90a3RfaXN2YWxpZCB3aGlsZSBnZXR0aW5nIGNjYWNoZSIsCisgICAgICAgICAgICAgICBl cnJvcl9tZXNzYWdlKGNvZGUpLGNvZGUpOworICAgICAgICBnb3RvIGV4aXRfazVfZ2V0X3RrdDsK KyAgICB9CisKKyAgICBmbGFncyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0dXJu cyBvZmYgT1BFTkNMT1NFIG1vZGUgKi8KKyAgICBpZiAoKGNvZGUgPSBrcmI1X2NjX3NldF9mbGFn cyhrY29udGV4dCwgY2FjaGUsIGZsYWdzKSkpIHsKKyAgICAgICAgaWYgKGNvZGUgPT0gRU5PRU5U KSB7CisgICAgICAgICAgICBkZWJ1ZyhGMTExLCJja19rcmI1X3RrdF9pc3ZhbGlkICh0aWNrZXQg Y2FjaGUpIiwKKyAgICAgICAgICAgICAgICAgICBrcmI1X2NjX2dldF9uYW1lKGtjb250ZXh0LCBj YWNoZSksY29kZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkZWJ1ZyhGMTExLAor ICAgICAgICAgICAgICAgICJja19rcmI1X3RrdF9pc3ZhbGlkIHdoaWxlIHNldHRpbmcgY2FjaGUg ZmxhZ3MgKHRpY2tldCBjYWNoZSkiLAorICAgICAgICAgICAgICAgICAga3JiNV9jY19nZXRfbmFt ZShrY29udGV4dCwgY2FjaGUpLGNvZGUpOworICAgICAgICB9CisgICAgICAgIHJldHZhbCA9IC0x OworICAgICAgICBnb3RvIGV4aXRfazVfZ2V0X3RrdDsKKyAgICB9CisgICAgaWYgKChjb2RlID0g a3JiNV9jY19nZXRfcHJpbmNpcGFsKGtjb250ZXh0LCBjYWNoZSwgJnByaW5jKSkpIHsKKyAgICAg ICAgZGVidWcoRjEwMSwiY2tfa3JiNV90a3RfaXN2YWxpZCB3aGlsZSByZXRyaWV2aW5nIHByaW5j aXBhbCBuYW1lIiwKKyAgICAgICAgICAgICAgICIiLGNvZGUpOworICAgICAgICByZXR2YWwgPSAt MTsKKyAgICAgICAgZ290byBleGl0X2s1X2dldF90a3Q7CisgICAgfQorICAgIGlmICgoY29kZSA9 IGtyYjVfdW5wYXJzZV9uYW1lKGtjb250ZXh0LCBwcmluYywgJmRlZm5hbWUpKSkgeworICAgICAg ICBkZWJ1ZyhGMTAxLCJja19rcmI1X3RrdF9pc3ZhbGlkIHdoaWxlIHVucGFyc2luZyBwcmluY2lw YWwgbmFtZSIsCisgICAgICAgICAgICAgICAiIixjb2RlKTsKKyAgICAgICAgcmV0dmFsID0gLTE7 CisgICAgICAgIGdvdG8gZXhpdF9rNV9nZXRfdGt0OworICAgIH0KKworICAgIGlmICgoY29kZSA9 IGtyYjVfY2Nfc3RhcnRfc2VxX2dldChrY29udGV4dCwgY2FjaGUsICZjdXIpKSkgeworICAgICAg ICBkZWJ1ZyhGMTAxLCJja19rcmI1X3RrdF9pc3ZhbGlkIHdoaWxlIHN0YXJ0aW5nIHRvIHJldHJp ZXZlIHRpY2tldHMiLAorICAgICAgICAgICAgICAgIiIsY29kZSk7CisgICAgICAgIHJldHZhbCA9 IC0xOworICAgICAgICBnb3RvIGV4aXRfazVfZ2V0X3RrdDsKKyAgICB9CisKKyAgICBpZiAoKGNv ZGUgPSBrcmI1X3RpbWVvZmRheShrY29udGV4dCwgJm5vdykpKSB7CisgICAgICAgIGlmICghc3Rh dHVzX29ubHkpCisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJja19rcmI1X3RrdF9pc3ZhbGlkIHdo aWxlIGdldHRpbmcgdGltZSBvZiBkYXkuIiwKKyAgICAgICAgICAgICAgICAgICAiIixjb2RlKTsK KyAgICAgICAgcmV0dmFsID0gLTE7CisgICAgICAgIGdvdG8gZXhpdF9rNV9nZXRfdGt0OworICAg IH0KKworICAgIHdoaWxlICghKGNvZGUgPSBrcmI1X2NjX25leHRfY3JlZChrY29udGV4dCwgY2Fj aGUsICZjdXIsICZjcmVkcykpKSB7CisgICAgICAgIGNoYXIgKnNuYW1lPU5VTEw7CisKKyAgICAg ICAgcmV0dmFsID0ga3JiNV91bnBhcnNlX25hbWUoa2NvbnRleHQsIGNyZWRzLnNlcnZlciwgJnNu YW1lKTsKKyAgICAgICAgaWYgKHJldHZhbCkgeworICAgICAgICAgICAgZGVidWcoRjEwMSwKKyAg ICAgICAgICAgICAgICAgICJja19rcmI1X3RrdF9pc3ZhbGlkIHdoaWxlIHVucGFyc2luZyBzZXJ2 ZXIgbmFtZSIsIiIscmV0dmFsKTsKKyAgICAgICAgICAgIHJldHZhbCA9IC0xOworICAgICAgICAg ICAga3JiNV9mcmVlX2NyZWRfY29udGVudHMoa2NvbnRleHQsICZjcmVkcyk7CisgICAgICAgICAg ICBnb3RvIGV4aXRfazVfZ2V0X3RrdDsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggIXN0cmNt cChzbmFtZSx0a3RuYW1lKSApIHsKKyAgICAgICAgICAgIC8qIHdlIGZvdW5kIHRoZSB0aWNrZXQg d2UgYXJlIGxvb2tpbmcgZm9yICovCisKKyAgICAgICAgICAgIC8qIFdlIGFkZCBhIDUgbWludXRl cyBmdWRnZSBmYWN0b3IgdG8gY29tcGVuc2F0ZSBmb3IgcG90ZW50aWFsICovCisgICAgICAgICAg ICAvKiBjbG9jayBza2V3IGVycm9ycyBiZXR3ZWVuIHRoZSBLREMgYW5kIEs5NSdzIGhvc3QgT1Mg ICAgICAgICAqLworCisgICAgICAgICAgICByZXR2YWwgPSAoKGNyZWRzLnRpbWVzLnN0YXJ0dGlt ZSA+IDApICYmCisgICAgICAgICAgICAgICAgICAgICAgIG5vdyA+PSAoY3JlZHMudGltZXMuc3Rh cnR0aW1lIC0gMzAwKSAmJgorICAgICAgICAgICAgICAgICAgICAgICBub3cgPCAoY3JlZHMudGlt ZXMuZW5kdGltZSArIDMwMCkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIShjcmVkcy50aWNr ZXRfZmxhZ3MgJiBUS1RfRkxHX0lOVkFMSUQpKTsKKworI2lmZGVmIENIRUNLQUREUlMKKyAgICAg ICAgICAgIGlmICggcmV0dmFsICYmIGtyYjVfY2hlY2thZGRycyAmJgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY3JlZHMuYWRkcmVzc2VzICYmIGNyZWRzLmFkZHJlc3Nlc1swXSAp IHsKKyAgICAgICAgICAgICAgICAvKiBpZiB3ZSB0aGluayBpdCBpcyB2YWxpZCwgdGhlbiBsZXRz IGNoZWNrIHRoZSBJUCBBZGRyZXNzZXMgKi8KKyAgICAgICAgICAgICAgICAvKiB0byBtYWtlIHN1 cmUgaXQgaXMgdmFsaWQgZm9yIG91ciBjdXJyZW50IGNvbm5lY3Rpb24uICAgICAgKi8KKyAgICAg ICAgICAgICAgICAvKiBBbHNvIG1ha2Ugc3VyZSBpdCdzIGZvciB0aGUgY29ycmVjdCBJUCBhZGRy ZXNzICovCisgICAgICAgICAgICAgICAgcmV0dmFsID0ga3JiNV9vc19sb2NhbGFkZHIoa2NvbnRl eHQsICZteUFkZHJzKTsKKyAgICAgICAgICAgICAgICBpZiAocmV0dmFsKSB7CisgICAgICAgICAg ICAgICAgICAgIGNvbV9lcnIoTlVMTCwgcmV0dmFsLCAicmV0cmlldmluZyBteSBJUCBhZGRyZXNz Iik7CisgICAgICAgICAgICAgICAgICAgIGtyYjVfZnJlZV91bnBhcnNlZF9uYW1lKGtjb250ZXh0 LHNuYW1lKTsKKyAgICAgICAgICAgICAgICAgICAga3JiNV9mcmVlX2NyZWRfY29udGVudHMoa2Nv bnRleHQsICZjcmVkcyk7CisgICAgICAgICAgICAgICAgICAgIGNvZGUgPSBLUkI1X0NDX0VORDsK KyAgICAgICAgICAgICAgICAgICAgcmV0dmFsID0gLTE7CisgICAgICAgICAgICAgICAgICAgIGJy ZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgIC8qIFNlZSBpZiBhbnkgb2Yg b3VyIGFkZHJlc3NlcyBtYXRjaCBhbnkgaW4gY2FjaGVkIGNyZWRlbnRpYWxzICovCisKKyAgICAg ICAgICAgICAgICBmb3IgKEFkZHJmb3VuZD1GQUxTRSwgcD1teUFkZHJzOworICAgICAgICAgICAg ICAgICAgICAgKEFkZHJmb3VuZD09RkFMU0UpICYmICgqcCk7CisgICAgICAgICAgICAgICAgICAg ICBwKysKKyAgICAgICAgICAgICAgICAgICAgICkgeworICAgICAgICAgICAgICAgICAgICBpZiAo a3JiNV9hZGRyZXNzX3NlYXJjaChrY29udGV4dCwgKnAsIGNyZWRzLmFkZHJlc3NlcykpIHsKKyAg ICAgICAgICAgICAgICAgICAgICAgIEFkZHJmb3VuZCA9IFRSVUU7CisgICAgICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAga3JiNV9mcmVlX2FkZHJl c3NlcyhrNV9jb250ZXh0LCBteUFkZHJzKTsKKworICAgICAgICAgICAgICAgIGlmIChBZGRyZm91 bmQpIHsKKyAgICAgICAgICAgICAgICAgICAga3JiNV9mcmVlX3VucGFyc2VkX25hbWUoa2NvbnRl eHQsc25hbWUpOworICAgICAgICAgICAgICAgICAgICBrcmI1X2ZyZWVfY3JlZF9jb250ZW50cyhr Y29udGV4dCwgJmNyZWRzKTsKKyAgICAgICAgICAgICAgICAgICAgY29kZSA9IEtSQjVfQ0NfRU5E OworICAgICAgICAgICAgICAgICAgICByZXR2YWwgPSAxOworICAgICAgICAgICAgICAgICAgICBi cmVhazsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBrcmI1 X2ZyZWVfdW5wYXJzZWRfbmFtZShrY29udGV4dCxzbmFtZSk7CisgICAgICAgICAgICAgICAgICAg IGtyYjVfZnJlZV9jcmVkX2NvbnRlbnRzKGtjb250ZXh0LCAmY3JlZHMpOworICAgICAgICAgICAg ICAgICAgICBjb2RlID0gS1JCNV9DQ19FTkQ7CisgICAgICAgICAgICAgICAgICAgIHJldHZhbCA9 IDA7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgIH0KKyNlbmRpZiAvKiBDSEVDS0FERFJTICovCisKKyAgICAgICAgICAgIGtyYjVfZnJl ZV91bnBhcnNlZF9uYW1lKGtjb250ZXh0LHNuYW1lKTsKKyAgICAgICAgICAgIGtyYjVfZnJlZV9j cmVkX2NvbnRlbnRzKGtjb250ZXh0LCAmY3JlZHMpOworICAgICAgICAgICAgY29kZSA9IEtSQjVf Q0NfRU5EOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAga3JiNV9mcmVl X3VucGFyc2VkX25hbWUoa2NvbnRleHQsc25hbWUpOworICAgICAgICBrcmI1X2ZyZWVfY3JlZF9j b250ZW50cyhrY29udGV4dCwgJmNyZWRzKTsKKyAgICB9CisKKyAgICBpZiAoY29kZSA9PSBLUkI1 X0NDX0VORCkgeworICAgICAgICBpZiAoKGNvZGUgPSBrcmI1X2NjX2VuZF9zZXFfZ2V0KGtjb250 ZXh0LCBjYWNoZSwgJmN1cikpKSB7CisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJja19rcmI1X3Rr dF9pc3ZhbGlkIHdoaWxlIGZpbmlzaGluZyB0aWNrZXQgcmV0cmlldmFsIiwKKyAgICAgICAgICAg ICAgICAgICAiIixjb2RlKTsKKyAgICAgICAgICAgIHJldHZhbCA9IC0xOworICAgICAgICAgICAg Z290byBleGl0X2s1X2dldF90a3Q7CisgICAgICAgIH0KKyAgICAgICAgZmxhZ3MgPSBLUkI1X1RD X09QRU5DTE9TRTsgICAgICAvKiB0dXJucyBvbiBPUEVOQ0xPU0UgbW9kZSAqLworICAgICAgICBp ZiAoKGNvZGUgPSBrcmI1X2NjX3NldF9mbGFncyhrY29udGV4dCwgY2FjaGUsIGZsYWdzKSkpIHsK KyAgICAgICAgICAgIGRlYnVnKEYxMDEsImNrX2tyYjVfdGt0X2lzdmFsaWQgd2hpbGUgY2xvc2lu ZyBjY2FjaGUiLAorICAgICAgICAgICAgICAgICAgICIiLGNvZGUpOworICAgICAgICAgICAgcmV0 dmFsID0gLTE7CisgICAgICAgICAgICBnb3RvIGV4aXRfazVfZ2V0X3RrdDsKKyAgICAgICAgfQor ICAgIH0gZWxzZSB7CisgICAgICAgIGRlYnVnKEYxMDEsImNrX2tyYjVfdGt0X2lzdmFsaWQgd2hp bGUgcmV0cmlldmluZyBhIHRpY2tldCIsIiIsY29kZSk7CisgICAgICAgIHJldHZhbCA9IC0xOwor ICAgICAgICBnb3RvIGV4aXRfazVfZ2V0X3RrdDsKKyAgICB9CisKKyAgZXhpdF9rNV9nZXRfdGt0 OgorICAgIGtyYjVfZnJlZV9wcmluY2lwYWwoa2NvbnRleHQscHJpbmMpOworICAgIGtyYjVfZnJl ZV91bnBhcnNlZF9uYW1lKGtjb250ZXh0LGRlZm5hbWUpOworICAgIGtyYjVfY2NfY2xvc2Uoa2Nv bnRleHQsY2FjaGUpOworICAgIGtyYjVfZnJlZV9jb250ZXh0KGtjb250ZXh0KTsKKyAgICByZXR1 cm4ocmV0dmFsKTsKKyNlbHNlIC8qIEhFSU1EQUwgKi8KKyAgICByZXR1cm4oLTEpOworI2VuZGlm IC8qIEhFSU1EQUwgKi8KKyNlbHNlIC8qIEtSQjUgKi8KKyAgICByZXR1cm4oLTEpOworI2VuZGlm IC8qIEtSQjUgKi8KK30KKworaW50CisjaWZkZWYgQ0tfQU5TSUMKK2NrX2tyYjVfaXNfdGd0X3Zh bGlkKFZPSUQpCisjZWxzZQorY2tfa3JiNV9pc190Z3RfdmFsaWQoKQorI2VuZGlmCit7CisjaWZk ZWYgS1JCNQorI2lmbmRlZiBIRUlNREFMCisgICAgY2hhciB0Z3RbMjU2XTsKKyAgICBjaGFyICog czsKKyAgICBpbnQgcmMgPSAwOworCisgICAgcyA9IGNrX2tyYjVfZ2V0cmVhbG0oa3JiNV9kX2Nj KTsKKyAgICBja21ha21zZyh0Z3Qsc2l6ZW9mKHRndCksImtyYnRndC8iLHMsIkAiLHMpOworICAg IHJjID0gY2tfa3JiNV90a3RfaXN2YWxpZChrcmI1X2RfY2MsdGd0KTsKKyAgICBkZWJ1ZyhGMTEx LCJja19rcmI1X2lzX3RndF92YWxpZCIsdGd0LHJjKTsKKyAgICByZXR1cm4ocmM+MCk7CisjZWxz ZSAvKiBIRUlNREFMICovCisgICAgcmV0dXJuKC0xKTsKKyNlbmRpZiAvKiBIRUlNREFMICovCisj ZWxzZSAvKiBLUkI1ICovCisgICAgcmV0dXJuKDApOworI2VuZGlmIC8qIEtSQjUgKi8KK30KKwor aW50CisjaWZkZWYgQ0tfQU5TSUMKK2NrX2tyYjVfdGt0X3RpbWUoY2hhciAqIGNjX25hbWUsIGNo YXIgKiB0a3RuYW1lKQorI2Vsc2UKK2NrX2tyYjVfdGt0X3RpbWUoY2NfbmFtZSwgdGt0bmFtZSkg Y2hhciAqIGNjX25hbWU7IGNoYXIgKiB0a3RuYW1lOworI2VuZGlmCit7CisjaWZkZWYgS1JCNQor I2lmbmRlZiBIRUlNREFMCisgICAga3JiNV9jb250ZXh0IGtjb250ZXh0OworICAgIGtyYjVfZXJy b3JfY29kZSByZXR2YWw7CisgICAga3JiNV9jY2FjaGUgY2FjaGUgPSBOVUxMOworICAgIGtyYjVf Y2NfY3Vyc29yIGN1cjsKKyAgICBrcmI1X2NyZWRzIGNyZWRzOworICAgIGtyYjVfcHJpbmNpcGFs IHByaW5jPU5VTEw7CisgICAga3JiNV9mbGFncyBmbGFncz0wOworICAgIGtyYjVfZXJyb3JfY29k ZSBjb2RlPTA7CisKKyAgICBpZiAoICFja19rcmI1X2lzX2luc3RhbGxlZCgpICkKKyAgICAgICAg cmV0dXJuKC0xKTsKKworICAgIHJldHZhbCA9IGtyYjVfaW5pdF9jb250ZXh0KCZrY29udGV4dCk7 CisgICAgaWYgKHJldHZhbCkgeworICAgICAgICBkZWJ1ZyhGMTAxLCJja19rcmI1X2xpc3RfY3Jl ZHMgd2hpbGUgaW5pdGlhbGl6aW5nIGtyYjUiLCIiLHJldHZhbCk7CisgICAgICAgIHJldHVybigt MSk7CisgICAgfQorCisgICAgY29kZSA9IGs1X2dldF9jY2FjaGUoa2NvbnRleHQsJmNhY2hlLGNj X25hbWUpOworICAgIGlmIChjb2RlICE9IDApIHsKKyAgICAgICAgZGVidWcoRjExMSwiY2tfa3Ji NV90a3RfdGltZSB3aGlsZSBnZXR0aW5nIGNjYWNoZSIsCisgICAgICAgICAgICAgICBlcnJvcl9t ZXNzYWdlKGNvZGUpLGNvZGUpOworICAgICAgICByZXR2YWwgPSAtMTsKKyAgICAgICAgZ290byBl eGl0X2s1X2dldF90a3Q7CisgICAgfQorCisgICAgZmxhZ3MgPSAwOyAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogdHVybnMgb2ZmIE9QRU5DTE9TRSBtb2RlICovCisgICAgaWYgKChjb2RlID0g a3JiNV9jY19zZXRfZmxhZ3Moa2NvbnRleHQsIGNhY2hlLCBmbGFncykpKSB7CisgICAgICAgIGlm IChjb2RlID09IEVOT0VOVCkgeworICAgICAgICAgICAgZGVidWcoRjExMSwiY2tfa3JiNV9saXN0 X2NyZWRzICh0aWNrZXQgY2FjaGUpIiwKKyAgICAgICAgICAgICAgICAgICBrcmI1X2NjX2dldF9u YW1lKGtjb250ZXh0LCBjYWNoZSksY29kZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg ICBkZWJ1ZyhGMTExLAorICAgICAgICAgICAgICAgICAiY2tfa3JiNV9saXN0X2NyZWRzIHdoaWxl IHNldHRpbmcgY2FjaGUgZmxhZ3MgKHRpY2tldCBjYWNoZSkiLAorICAgICAgICAgICAgICAgICAg a3JiNV9jY19nZXRfbmFtZShrY29udGV4dCwgY2FjaGUpLGNvZGUpOworICAgICAgICB9CisgICAg ICAgIHJldHZhbCA9IC0xOworICAgICAgICBnb3RvIGV4aXRfazVfZ2V0X3RrdDsKKyAgICB9Cisg ICAgaWYgKChjb2RlID0ga3JiNV9jY19nZXRfcHJpbmNpcGFsKGtjb250ZXh0LCBjYWNoZSwgJnBy aW5jKSkpIHsKKyAgICAgICAgZGVidWcoRjEwMSwiY2tfa3JiNV9saXN0X2NyZWRzIHdoaWxlIHJl dHJpZXZpbmcgcHJpbmNpcGFsIG5hbWUiLAorICAgICAgICAgICAgICAgIiIsY29kZSk7CisgICAg ICAgIHJldHZhbCA9IC0xOworICAgICAgICBnb3RvIGV4aXRfazVfZ2V0X3RrdDsKKyAgICB9Cisg ICAgaWYgKChjb2RlID0ga3JiNV91bnBhcnNlX25hbWUoa2NvbnRleHQsIHByaW5jLCAmZGVmbmFt ZSkpKSB7CisgICAgICAgIGRlYnVnKEYxMDEsImNrX2tyYjVfbGlzdF9jcmVkcyB3aGlsZSB1bnBh cnNpbmcgcHJpbmNpcGFsIG5hbWUiLAorICAgICAgICAgICAgICAgIiIsY29kZSk7CisgICAgICAg IHJldHZhbCA9IC0xOworICAgICAgICBnb3RvIGV4aXRfazVfZ2V0X3RrdDsKKyAgICB9CisKKyAg ICBpZiAoKGNvZGUgPSBrcmI1X2NjX3N0YXJ0X3NlcV9nZXQoa2NvbnRleHQsIGNhY2hlLCAmY3Vy KSkpIHsKKyAgICAgICAgZGVidWcoRjEwMSwiY2tfa3JiNV9saXN0X2NyZWRzIHdoaWxlIHN0YXJ0 aW5nIHRvIHJldHJpZXZlIHRpY2tldHMiLAorICAgICAgICAgICAgICAgIiIsY29kZSk7CisgICAg ICAgIHJldHZhbCA9IC0xOworICAgICAgICBnb3RvIGV4aXRfazVfZ2V0X3RrdDsKKyAgICB9CisK KyAgICBpZiAoKGNvZGUgPSBrcmI1X3RpbWVvZmRheShrY29udGV4dCwgJm5vdykpKSB7CisgICAg ICAgIGlmICghc3RhdHVzX29ubHkpCisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJja19rcmI1X2xp c3RfY3JlZHMgd2hpbGUgZ2V0dGluZyB0aW1lIG9mIGRheS4iLAorICAgICAgICAgICAgICAgICAg ICIiLGNvZGUpOworICAgICAgICBrcmI1X2ZyZWVfY29udGV4dChrY29udGV4dCk7CisgICAgICAg IHJldHVybigtMSk7CisgICAgfQorCisgICAgd2hpbGUgKCEoY29kZSA9IGtyYjVfY2NfbmV4dF9j cmVkKGtjb250ZXh0LCBjYWNoZSwgJmN1ciwgJmNyZWRzKSkpIHsKKyAgICAgICAgY2hhciAqc25h bWU9TlVMTDsKKworICAgICAgICByZXR2YWwgPSBrcmI1X3VucGFyc2VfbmFtZShrY29udGV4dCwg Y3JlZHMuc2VydmVyLCAmc25hbWUpOworICAgICAgICBpZiAocmV0dmFsKSB7CisgICAgICAgICAg ICBkZWJ1ZyhGMTAxLAorICAgICAgICAgICAgICAgICAgImNrX2tyYjVfbGlzdF9jcmVkcyB3aGls ZSB1bnBhcnNpbmcgc2VydmVyIG5hbWUiLCIiLHJldHZhbCk7CisgICAgICAgICAgICByZXR2YWwg PSAtMTsKKyAgICAgICAgICAgIGtyYjVfZnJlZV91bnBhcnNlZF9uYW1lKGtjb250ZXh0LHNuYW1l KTsKKyAgICAgICAgICAgIGtyYjVfZnJlZV9jcmVkX2NvbnRlbnRzKGtjb250ZXh0LCAmY3JlZHMp OworICAgICAgICAgICAgZ290byBleGl0X2s1X2dldF90a3Q7CisgICAgICAgIH0KKworICAgICAg ICBpZiAoICFzdHJjbXAoc25hbWUsdGt0bmFtZSkgKSB7CisgICAgICAgICAgICAvKiB3ZSBmb3Vu ZCB0aGUgdGlja2V0IHdlIGFyZSBsb29raW5nIGZvciAqLworICAgICAgICAgICAgaW50IHZhbGlk ID0gKGNyZWRzLnRpbWVzLnN0YXJ0dGltZSAmJgorICAgICAgICAgICAgICAgICAgICAgICBub3cg PiBjcmVkcy50aW1lcy5zdGFydHRpbWUgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgbm93IDwg Y3JlZHMudGltZXMuZW5kdGltZSAmJgorICAgICAgICAgICAgICAgICAgICAgICAhKGNyZWRzLnRp Y2tldF9mbGFncyAmIFRLVF9GTEdfSU5WQUxJRCkpOworICAgICAgICAgICAgaWYgKCB2YWxpZCAp IHsKKyAgICAgICAgICAgICAgICByZXR2YWwgPSBjcmVkcy50aW1lcy5lbmR0aW1lIC0gbm93Owor ICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHZhbCA9 IDA7CisgICAgICAgICAgICBrcmI1X2ZyZWVfdW5wYXJzZWRfbmFtZShrY29udGV4dCxzbmFtZSk7 CisgICAgICAgICAgICBrcmI1X2ZyZWVfY3JlZF9jb250ZW50cyhrY29udGV4dCwgJmNyZWRzKTsK KyAgICAgICAgICAgIGNvZGUgPSBLUkI1X0NDX0VORDsKKyAgICAgICAgICAgIGJyZWFrOworICAg ICAgICB9CisgICAgICAgIGtyYjVfZnJlZV91bnBhcnNlZF9uYW1lKGtjb250ZXh0LHNuYW1lKTsK KyAgICAgICAga3JiNV9mcmVlX2NyZWRfY29udGVudHMoa2NvbnRleHQsICZjcmVkcyk7CisgICAg fQorCisgICAgaWYgKGNvZGUgPT0gS1JCNV9DQ19FTkQpIHsKKyAgICAgICAgaWYgKChjb2RlID0g a3JiNV9jY19lbmRfc2VxX2dldChrY29udGV4dCwgY2FjaGUsICZjdXIpKSkgeworICAgICAgICAg ICAgZGVidWcoRjEwMSwiY2tfa3JiNV9saXN0X2NyZWRzIHdoaWxlIGZpbmlzaGluZyB0aWNrZXQg cmV0cmlldmFsIiwKKyAgICAgICAgICAgICAgICAgICAiIixjb2RlKTsKKyAgICAgICAgICAgIHJl dHZhbCA9IC0xOworICAgICAgICAgICAgZ290byBleGl0X2s1X2dldF90a3Q7CisgICAgICAgIH0K KyAgICAgICAgZmxhZ3MgPSBLUkI1X1RDX09QRU5DTE9TRTsgICAgICAvKiB0dXJucyBvbiBPUEVO Q0xPU0UgbW9kZSAqLworICAgICAgICBpZiAoKGNvZGUgPSBrcmI1X2NjX3NldF9mbGFncyhrY29u dGV4dCwgY2FjaGUsIGZsYWdzKSkpIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMDEsImNrX2tyYjVf bGlzdF9jcmVkcyB3aGlsZSBjbG9zaW5nIGNjYWNoZSIsCisgICAgICAgICAgICAgICAgICAgIiIs Y29kZSk7CisgICAgICAgICAgICByZXR2YWwgPSAtMTsKKyAgICAgICAgICAgIGdvdG8gZXhpdF9r NV9nZXRfdGt0OworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZGVidWcoRjEwMSwi Y2tfa3JiNV9saXN0X2NyZWRzIHdoaWxlIHJldHJpZXZpbmcgYSB0aWNrZXQiLCIiLGNvZGUpOwor ICAgICAgICByZXR2YWwgPSAtMTsKKyAgICAgICAgZ290byBleGl0X2s1X2dldF90a3Q7CisgICAg fQorCisgIGV4aXRfazVfZ2V0X3RrdDoKKyAgICBrcmI1X2ZyZWVfcHJpbmNpcGFsKGtjb250ZXh0 LHByaW5jKTsKKyAgICBrcmI1X2ZyZWVfdW5wYXJzZWRfbmFtZShrY29udGV4dCxkZWZuYW1lKTsK KyAgICBrcmI1X2NjX2Nsb3NlKGtjb250ZXh0LGNhY2hlKTsKKyAgICBrcmI1X2ZyZWVfY29udGV4 dChrY29udGV4dCk7CisgICAgcmV0dXJuKHJldHZhbCk7CisjZWxzZSAvKiBIRUlNREFMICovCisg ICAgcmV0dXJuKC0xKTsKKyNlbmRpZiAvKiBIRUlNREFMICovCisjZWxzZSAvKiBLUkI1ICovCisg ICAgcmV0dXJuKC0xKTsKKyNlbmRpZiAvKiBLUkI1ICovCit9CisKK2NoYXIgKgorI2lmZGVmIENL X0FOU0lDCitja19rcmI1X2dldF9jY19uYW1lKHZvaWQpCisjZWxzZQorY2tfa3JiNV9nZXRfY2Nf bmFtZSgpCisjZW5kaWYKK3sKKyNpZmRlZiBLUkI1CisjaWZuZGVmIEhFSU1EQUwKKyAgICBzdGF0 aWMgY2hhciBjY19uYW1lW0NLTUFYUEFUSCsxXT0iIjsKKyAgICBrcmI1X2NvbnRleHQga2NvbnRl eHQgPSBOVUxMOworICAgIGtyYjVfY2NhY2hlIGNjYWNoZSA9IE5VTEw7CisgICAga3JiNV9lcnJv cl9jb2RlIGNvZGU7CisgICAgY2hhciAqIHA9TlVMTDsKKworICAgIGNjX25hbWVbMF0gPSAnXDAn OworCisgICAgaWYgKCAhY2tfa3JiNV9pc19pbnN0YWxsZWQoKSApCisgICAgICAgIHJldHVybihj Y19uYW1lKTsKKworICAgIHAgPSBnZXRlbnYoIktSQjVDQ05BTUUiKTsKKyAgICBpZiAoICFwICkg eworICAgICAgICBjb2RlID0ga3JiNV9pbml0X2NvbnRleHQoJmtjb250ZXh0KTsKKyAgICAgICAg aWYgKGNvZGUpIHsKKyAgICAgICAgICAgIGNvbV9lcnIoImNrX2tyYjVfZ2V0X2NjX25hbWUiLGNv ZGUsIndoaWxlIGluaXRfY29udGV4dCIpOworICAgICAgICAgICAgcmV0dXJuKGNjX25hbWUpOwor ICAgICAgICB9CisgICAgICAgIGlmICgoY29kZSA9IGtyYjVfY2NfZGVmYXVsdChrY29udGV4dCwg JmNjYWNoZSkpKSB7CisgICAgICAgICAgICBjb21fZXJyKCJja19rcmI1X2dldF9jY19uYW1lIixj b2RlLCJ3aGlsZSBnZXR0aW5nIGRlZmF1bHQgY2NhY2hlIik7CisgICAgICAgICAgICBnb3RvIGV4 aXRfazVfZ2V0X2NjOworICAgICAgICB9CisKKyAgICAgICAgY2ttYWttc2coY2NfbmFtZSxzaXpl b2YoY2NfbmFtZSksCisgICAgICAgICAgICAgICAgIChjaGFyICopa3JiNV9jY19nZXRfdHlwZShr Y29udGV4dCxjY2FjaGUpLCI6IiwKKyAgICAgICAgICAgICAgICAgKGNoYXIgKilrcmI1X2NjX2dl dF9uYW1lKGtjb250ZXh0LGNjYWNoZSksTlVMTCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgY2tz dHJuY3B5KGNjX25hbWUscCxDS01BWFBBVEgpOworICAgIH0KKworICAgIGlmICggIXN0cm5jbXAo IkZJTEU6IixjY19uYW1lLDUpICkgeworICAgICAgICBmb3IgKCBwPWNjX25hbWU7ICpwIDsgcCsr ICkKKyAgICAgICAgICAgIGlmICggKnAgPT0gJ1xcJyApICpwID0gJy8nOworICAgIH0KKworICBl eGl0X2s1X2dldF9jYzoKKyAgICBpZiAoIGNjYWNoZSApCisgICAgICAgIGtyYjVfY2NfY2xvc2Uo a2NvbnRleHQsY2NhY2hlKTsKKyAgICBpZiAoIGtjb250ZXh0ICkKKyAgICAgICAga3JiNV9mcmVl X2NvbnRleHQoa2NvbnRleHQpOworICAgIHJldHVybihjY19uYW1lKTsKKyNlbHNlIC8qIEhFSU1E QUwgKi8KKyAgICByZXR1cm4oIk5vdCBpbXBsZW1lbnRlZCIpOworI2VuZGlmIC8qIEhFSU1EQUwg Ki8KKyNlbHNlIC8qIEtSQjUgKi8KKyAgICByZXR1cm4oIiIpOworI2VuZGlmIC8qIEtSQjUgKi8K K30KKworY2hhciAqCisjaWZkZWYgQ0tfQU5TSUMKK2NrX2tyYjVfZ2V0cmVhbG0oY2hhciAqIGNj X25hbWUpCisjZWxzZQorY2tfa3JiNV9nZXRyZWFsbShjY19uYW1lKSBjaGFyICogY2NfbmFtZTsK KyNlbmRpZgoreworI2lmZGVmIEtSQjUKKyNpZm5kZWYgSEVJTURBTAorICAgIHN0YXRpYyBjaGFy IHJlYWxtWzI1Nl09IiI7CisgICAga3JiNV9jb250ZXh0IGtjb250ZXh0OworICAgIGtyYjVfY2Nh Y2hlIGNjYWNoZSA9IE5VTEw7CisgICAga3JiNV9lcnJvcl9jb2RlIGNvZGU7CisgICAga3JiNV9w cmluY2lwYWwgbWU9TlVMTDsKKworICAgIHJlYWxtWzBdID0gJ1wwJzsKKworICAgIGlmICggIWNr X2tyYjVfaXNfaW5zdGFsbGVkKCkgKQorICAgICAgICByZXR1cm4ocmVhbG0pOworCisgICAgY29k ZSA9IGtyYjVfaW5pdF9jb250ZXh0KCZrY29udGV4dCk7CisgICAgaWYgKGNvZGUpIHsKKyAgICAg ICAgcmV0dXJuKHJlYWxtKTsKKyAgICB9CisKKyAgICBjb2RlID0gazVfZ2V0X2NjYWNoZShrY29u dGV4dCwmY2NhY2hlLGNjX25hbWUpOworICAgIGlmIChjb2RlICE9IDApIHsKKyAgICAgICAgZ290 byBleGl0X2s1X2dldHJlYWxtOworICAgIH0KKworCWNvZGUgPSBrcmI1X2NjX2dldF9wcmluY2lw YWwoa2NvbnRleHQsIGNjYWNoZSwgJm1lKTsKKwlpZiAoY29kZSkKKwkJY29kZSA9IGtyYjVfcGFy c2VfbmFtZShrY29udGV4dCwgImZvbyIsICZtZSk7CisgICAgaWYgKGNvZGUpIHsKKyAgICAgICAg Z290byBleGl0X2s1X2dldHJlYWxtOworICAgIH0KKyAgICBpZiAoIGtyYjVfcHJpbmNfcmVhbG0o a2NvbnRleHQsIG1lKS0+bGVuZ3RoIDwgc2l6ZW9mKHJlYWxtKSApIHsKKyAgICAgICAgbWVtY3B5 KHJlYWxtLGtyYjVfcHJpbmNfcmVhbG0oa2NvbnRleHQsIG1lKS0+ZGF0YSwKKyAgICAgICAgICAg ICAgICBrcmI1X3ByaW5jX3JlYWxtKGtjb250ZXh0LCBtZSktPmxlbmd0aCk7ICAgICAgICAvKiBz YWZlICovCisgICAgICAgcmVhbG1ba3JiNV9wcmluY19yZWFsbShrY29udGV4dCwgbWUpLT5sZW5n dGhdPSdcMCc7CisgICAgfQorICBleGl0X2s1X2dldHJlYWxtOgorICAgIGlmICggbWUgKQorICAg ICAgICBrcmI1X2ZyZWVfcHJpbmNpcGFsKGtjb250ZXh0LG1lKTsKKyAgICBpZiAoIGNjYWNoZSAp CisgICAgICAgIGtyYjVfY2NfY2xvc2Uoa2NvbnRleHQsY2NhY2hlKTsKKyAgICBpZiAoa2NvbnRl eHQpCisgICAgICAgIGtyYjVfZnJlZV9jb250ZXh0KGtjb250ZXh0KTsKKyAgICByZXR1cm4ocmVh bG0pOworI2Vsc2UgLyogSEVJTURBTCAqLworICAgIHJldHVybigiTm90IGltcGxlbWVudGVkIik7 CisjZW5kaWYgLyogSEVJTURBTCAqLworI2Vsc2UgLyogS1JCNSAqLworICAgIHJldHVybigiIik7 CisjZW5kaWYgLyogS1JCNSAqLworfQorCitjaGFyICoKKyNpZmRlZiBDS19BTlNJQworY2tfa3Ji NV9nZXRwcmluY2lwYWwoY2hhciAqIGNjX25hbWUpCisjZWxzZQorY2tfa3JiNV9nZXRwcmluY2lw YWwoY2NfbmFtZSkgY2hhciAqIGNjX25hbWU7CisjZW5kaWYKK3sKKyNpZmRlZiBLUkI1CisjaWZu ZGVmIEhFSU1EQUwKKyAgICBzdGF0aWMgY2hhciBwcmluY2lwYWxbVUlEQlVGTEVOKzFdPSIiOwor ICAgIGtyYjVfY29udGV4dCBrY29udGV4dDsKKyAgICBrcmI1X2NjYWNoZSBjY2FjaGUgPSBOVUxM OworICAgIGtyYjVfZXJyb3JfY29kZSBjb2RlOworICAgIGtyYjVfcHJpbmNpcGFsIG1lOworICAg IGNoYXIgKiBwPU5VTEw7CisgICAgaW50IGk7CisKKyAgICBwcmluY2lwYWxbMF0gPSAnXDAnOwor CisgICAgaWYgKCAhY2tfa3JiNV9pc19pbnN0YWxsZWQoKSApCisgICAgICAgIHJldHVybihwcmlu Y2lwYWwpOworCisgICAgY29kZSA9IGtyYjVfaW5pdF9jb250ZXh0KCZrY29udGV4dCk7CisgICAg aWYgKGNvZGUpIHsKKyAgICAgICAgcmV0dXJuKHByaW5jaXBhbCk7CisgICAgfQorCisgICAgY29k ZSA9IGs1X2dldF9jY2FjaGUoa2NvbnRleHQsJmNjYWNoZSxjY19uYW1lKTsKKyAgICBpZiAoY29k ZSAhPSAwKSB7CisgICAgICAgIGdvdG8gZXhpdF9rNV9nZXRwcmluY2lwYWw7CisgICAgfQorCisg ICAgaWYgKChjb2RlID0ga3JiNV9jY19nZXRfcHJpbmNpcGFsKGtjb250ZXh0LCBjY2FjaGUsICZt ZSkpKSB7CisgICAgICAgIGdvdG8gZXhpdF9rNV9nZXRwcmluY2lwYWw7CisgICAgfQorCisgICAg aWYgKChjb2RlID0ga3JiNV91bnBhcnNlX25hbWUgKGtjb250ZXh0LCBtZSwgJnApKSkgeworICAg ICAgICBrcmI1X2ZyZWVfcHJpbmNpcGFsKGtjb250ZXh0LG1lKTsKKyAgICAgICAgZ290byBleGl0 X2s1X2dldHByaW5jaXBhbDsKKyAgICB9CisKKyAgICBja3N0cm5jcHkocHJpbmNpcGFsLHAsVUlE QlVGTEVOKTsKKyAgICBpID0gY2tpbmRleCgiQCIscHJpbmNpcGFsLDAsMCwwKTsKKyAgICBpZiAo aSkKKyAgICAgIHByaW5jaXBhbFtpLTFdID0gJ1wwJzsKKworICAgIGtyYjVfZnJlZV91bnBhcnNl ZF9uYW1lKGtjb250ZXh0LHApOworCisgIGV4aXRfazVfZ2V0cHJpbmNpcGFsOgorICAgIGlmICgg Y2NhY2hlICkKKyAgICAgICAga3JiNV9jY19jbG9zZShrY29udGV4dCxjY2FjaGUpOworICAgIGlm IChrY29udGV4dCkKKyAgICAgICAga3JiNV9mcmVlX2NvbnRleHQoa2NvbnRleHQpOworICAgIHJl dHVybihwcmluY2lwYWwpOworI2Vsc2UgLyogSEVJTURBTCAqLworICAgIHJldHVybigiTm90IGlt cGxlbWVudGVkIik7CisjZW5kaWYgLyogSEVJTURBTCAqLworI2Vsc2UgLyogS1JCNSAqLworICAg IHJldHVybigiIik7CisjZW5kaWYgLyogS1JCNSAqLworfQorCisjaWZuZGVmIENSWVBUX0RMTAor aW50Citja19nZXRfY3J5cHRfdGFibGUoc3RydWN0IGtleXRhYiAqKiBwVGFibGUsIGludCAqIHBO KQoreworI2lmZGVmIENLX0VOQ1JZUFRJT04KKyAgICByZXR1cm4oZ2V0X2NyeXB0X3RhYmxlKHBU YWJsZSwgcE4pKTsKKyNlbHNlIC8qIEVOQ1JZUFRJT04gKi8KKyAgICBpbnQgaT0wOworI2lmbmRl ZiBPUzIKKyAgICBjaGFyICogdG1wc3RyaW5nID0gTlVMTDsKKyNlbmRpZiAvKiBPUzIgKi8KKwor ICAgIGlmICggKnBUYWJsZSApCisgICAgeworICAgICAgICBmb3IgKCBpPTAgOyBpIDwgKnBOIDsg aSsrICkKKyAgICAgICAgICAgIGZyZWUoICgqcFRhYmxlKVtpXS5rd2QgKSA7CisgICAgICAgIGZy ZWUgKCAqcFRhYmxlICkgIDsKKyAgICB9CisgICAgKnBUYWJsZSA9IE5VTEw7CisgICAgKnBOID0g MDsKKworICAgICpwVGFibGUgPSBtYWxsb2MoIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSAqIDIgKSA7 CisgICAgaWYgKCAhKCpwVGFibGUpICkKKyAgICAgICAgcmV0dXJuKDApOworCisjaWZkZWYgT1My CisgICAgKCpwVGFibGUpWzBdLmt3ZCA9c3RyZHVwKCJhdXRvbWF0aWMiKTsKKyNlbHNlIC8qIE9T MiAqLworICAgIG1ha2VzdHIoJnRtcHN0cmluZywiYXV0b21hdGljIik7CisgICAgKCpwVGFibGUp WzBdLmt3ZCA9IHRtcHN0cmluZzsKKyAgICB0bXBzdHJpbmcgPSBOVUxMOworI2VuZGlmIC8qIE9T MiAqLworICAgICgqcFRhYmxlKVswXS5rd3ZhbCA9IEVOQ1RZUEVfQU5ZOworICAgICgqcFRhYmxl KVswXS5mbGdzID0gMDsKKyNpZmRlZiBPUzIKKyAgICAoKnBUYWJsZSlbMV0ua3dkID1zdHJkdXAo Im5vbmUiKTsKKyNlbHNlIC8qIE9TMiAqLworICAgIG1ha2VzdHIoJnRtcHN0cmluZywibm9uZSIp OworICAgICgqcFRhYmxlKVsxXS5rd2QgPSB0bXBzdHJpbmc7CisgICAgdG1wc3RyaW5nID0gTlVM TDsKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAoKnBUYWJsZSlbMV0ua3d2YWwgPSA5OTk7CisgICAg KCpwVGFibGUpWzFdLmZsZ3MgPSAwOworICAgICgqcE4pID0gMjsKKworICAgIHJldHVybigyKTsK KyNlbmRpZiAvKiBFTkNSWVBUSU9OICovCit9CisKK1ZPSUQKK2NrX2VuY3J5cHRfc2VuZF9zdXBw b3J0KCkKK3sKKyNpZmRlZiBDS19FTkNSWVBUSU9OCisgICAgZW5jcnlwdF9zZW5kX3N1cHBvcnQo KTsKKyNlbmRpZiAvKiBFTkNSWVBUSU9OICovCit9CisjZW5kaWYgLyogQ1JZUFRfRExMICovCisK Ky8qCisgKgorICogS3N0cmVhbQorICoKKyAqIEVtdWxhdGVzIHRoZSBrc3RyZWFtIHBhY2thZ2Ug aW4gS2VyYmVyb3MgNAorICoKKyAqLworCitpbnQKK2tzdHJlYW1fZGVzdHJveSgpCit7CisgICAg aWYgKGdfa3N0cmVhbSAhPSBOVUxMKSB7CisgICAgICAgIGF1dGhfZGVzdHJveSgpOyAgICAgICAg ICAgICAgICAgICAgICAgLyogRGVzdHJveSBhdXRob3JpemluZyAqLworICAgICAgICBmcmVlKGdf a3N0cmVhbSk7CisgICAgICAgIGdfa3N0cmVhbT1OVUxMOworICAgIH0KKyAgICByZXR1cm4gMDsK K30KKworVk9JRAorI2lmZGVmIENLX0FOU0lDCitrc3RyZWFtX3NldF9idWZmZXJfbW9kZShpbnQg bW9kZSkKKyNlbHNlCitrc3RyZWFtX3NldF9idWZmZXJfbW9kZShtb2RlKSBpbnQgbW9kZTsKKyNl bmRpZgoreworfQorCisKK2ludAorI2lmZGVmIENLX0FOU0lDCitrc3RyZWFtX2NyZWF0ZV9mcm9t X2ZkKGludCBmZCwKKyAgICAgICAgICAgICAgICAgICAgICAga3N0cmVhbV9wdHIgZGF0YSkKKyNl bHNlCitrc3RyZWFtX2NyZWF0ZV9mcm9tX2ZkKGZkLGRhdGEpCisgICAgaW50IGZkOyBrc3RyZWFt X3B0ciBkYXRhOworI2VuZGlmCit7CisgICAgaW50IG47CisKKyAgICBnX2tzdHJlYW0gPSBtYWxs b2Moc2l6ZW9mKHN0cnVjdCBrc3RyZWFtX2ludCkpOworICAgIGlmIChnX2tzdHJlYW0gPT0gTlVM TCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBnX2tzdHJlYW0tPmZkID0gZmQ7CisKKyAgICBu ID0gYXV0aF9pbml0KGdfa3N0cmVhbSk7ICAgICAgICAgICAgICAgICAgIC8qIEluaXRpYWxpemUg YXV0aG9yaXppbmcgKi8KKyAgICBpZiAobikgeworICAgICAgICBmcmVlKGdfa3N0cmVhbSk7Cisg ICAgICAgIGdfa3N0cmVhbSA9IE5VTEw7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAg IGdfa3N0cmVhbS0+ZW5jcnlwdCA9IE5VTEw7CisgICAgZ19rc3RyZWFtLT5kZWNyeXB0ID0gTlVM TDsKKyAgICBnX2tzdHJlYW0tPmVuY3J5cHRfdHlwZSA9IEVOQ1RZUEVfQU5ZOworICAgIGdfa3N0 cmVhbS0+ZGVjcnlwdF90eXBlID0gRU5DVFlQRV9BTlk7CisgICAgcmV0dXJuIDE7Cit9CisKKyNp ZmRlZiBDS19LRVJCRVJPUworI2lmZGVmIFJMT0dDT0RFCitzdGF0aWMgaW50IGRvX2xlbmNoZWNr LCB1c2VfaXZlY3M7CitleHRlcm4gaW50IHJsb2dfaW5iYW5kOworCisjaWZkZWYgS1JCNQordm9p ZAorcmNtZF9zdHJlYW1faW5pdF9rcmI1KGluX2tleWJsb2NrLCBlbmNyeXB0X2ZsYWcsIGxlbmNo ZWNrLCBhbV9jbGllbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90b251bSkKKyAg ICAga3JiNV9rZXlibG9jayAqaW5fa2V5YmxvY2s7CisgICAgIGludCBlbmNyeXB0X2ZsYWc7Cisg ICAgIGludCBsZW5jaGVjazsKKyAgICAgaW50IGFtX2NsaWVudDsKKyAgICAgZW51bSBrcmI1X2tj bWRfcHJvdG8gcHJvdG9udW07Cit7CisgICAga3JiNV9lcnJvcl9jb2RlIHN0YXR1czsKKyAgICBz aXplX3QgYmxvY2tzaXplOworCisgICAgaWYgKCFlbmNyeXB0X2ZsYWcpCisgICAgICAgIHJldHVy bjsKKworICAgIGRlc2luYnVmLmRhdGEgPSBkZXNfaW5idWY7CisgICAgZGVzb3V0YnVmLmRhdGEg PSBkZXNfb3V0cGt0KzQ7ICAgICAgLyogU2V0IHVwIGRlcyBidWZmZXJzICovCisgICAgazVfc2Vz c2lvbl9rZXkgPSBpbl9rZXlibG9jazsKKworICAgIGRvX2xlbmNoZWNrID0gbGVuY2hlY2s7CisK KyAgICBpZiAoIHByb3RvbnVtID09IEtDTURfT0xEX1BST1RPQ09MICkgeworICAgICAgICB1c2Vf aXZlY3MgPSAwOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgdXNlX2l2ZWNzID0gMTsK KworICAgIGlmIChzdGF0dXMgPSBrcmI1X2NfYmxvY2tfc2l6ZShrNV9jb250ZXh0LCBrNV9zZXNz aW9uX2tleS0+ZW5jdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJs b2Nrc2l6ZSkpIHsKKyAgICAgICAgLyogWFhYIHdoYXQgZG8gSSBkbz8gKi8KKyAgICAgICAgcHJp bnRmKCJmYXRhbCBrZXJiZXJvcyA1IGNyeXB0byBsaWJyYXJ5IGVycm9yXG4iKTsKKyAgICAgICAg dHRjbG9zKDApOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZW5jaXZlY19pWzBdLmxl bmd0aCA9IGVuY2l2ZWNfaVsxXS5sZW5ndGggPSAKKyAgICBlbmNpdmVjX29bMF0ubGVuZ3RoID0g ZW5jaXZlY19vWzFdLmxlbmd0aCA9IGJsb2Nrc2l6ZTsKKworICAgIGlmICgoZW5jaXZlY19pWzBd LmRhdGEgPSBtYWxsb2MoZW5jaXZlY19pWzBdLmxlbmd0aCAqIDQpKSA9PSBOVUxMKSB7CisgICAg ICAgIC8qIFhYWCB3aGF0IGRvIEkgZG8/ICovCisgICAgICAgIHByaW50ZigiZmF0YWwgbWFsbG9j IGZhaWxlZFxuIik7CisgICAgICAgIHR0Y2xvcygwKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K KworICAgIGVuY2l2ZWNfaVsxXS5kYXRhID0gZW5jaXZlY19pWzBdLmRhdGEgKyBlbmNpdmVjX2lb MF0ubGVuZ3RoOworICAgIGVuY2l2ZWNfb1swXS5kYXRhID0gZW5jaXZlY19pWzFdLmRhdGEgKyBl bmNpdmVjX2lbMV0ubGVuZ3RoOworICAgIGVuY2l2ZWNfb1sxXS5kYXRhID0gZW5jaXZlY19vWzBd LmRhdGEgKyBlbmNpdmVjX29bMF0ubGVuZ3RoOworCisgICAgLyogaXMgdGhlcmUgYSBiZXR0ZXIg d2F5IHRvIGluaXRpYWxpemUgdGhpcz8gKi8KKyAgICBtZW1zZXQoZW5jaXZlY19pWzBdLmRhdGEs IGFtX2NsaWVudCwgYmxvY2tzaXplKTsKKyAgICBtZW1zZXQoZW5jaXZlY19vWzBdLmRhdGEsIDEg LSBhbV9jbGllbnQsIGJsb2Nrc2l6ZSk7CisgICAgbWVtc2V0KGVuY2l2ZWNfaVsxXS5kYXRhLCAy IHwgYW1fY2xpZW50LCBibG9ja3NpemUpOworICAgIG1lbXNldChlbmNpdmVjX29bMV0uZGF0YSwg MiB8ICgxIC0gYW1fY2xpZW50KSwgYmxvY2tzaXplKTsKK30KKyNlbmRpZiAvKiBLUkI1ICovCisK K2ludAorI2lmZGVmIENLX0FOU0lDCitja19rcmJfcmxvZ2luKENIQVIgKiBob3N0bmFtZSwgaW50 IHBvcnQsCisgICAgICAgICAgICAgICBDSEFSICogbG9jYWx1c2VyLCBDSEFSICogcmVtb3RldXNl ciwgQ0hBUiAqIHRlcm1fc3BlZWQsCisgICAgICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4g KiBsX2FkZHIsIHN0cnVjdCBzb2NrYWRkcl9pbiAqIHJfYWRkciwKKyAgICAgICAgICAgICAgIGlu dCBrdmVyc2lvbiwgaW50IGVuY3J5cHRfZmxhZykKKyNlbHNlIC8qIENLX0FOU0lDICovCitja19r cmJfcmxvZ2luKGhvc3RuYW1lLCBwb3J0LAorICAgICAgICAgICAgICAgbG9jYWx1c2VyLCByZW1v dGV1c2VyLCB0ZXJtX3NwZWVkLCBsX2FkZHIsIHJfYWRkciwgZW5jcnlwdF9mbGFnKQorICAgIENI QVIgKiBob3N0bmFtZTsgaW50IHBvcnQ7CisgICAgQ0hBUiAqIGxvY2FsdXNlcjsgQ0hBUiAqIHJl bW90ZXVzZXI7IENIQVIgKiB0ZXJtX3NwZWVkOworICAgIHN0cnVjdCBzb2NrYWRkcl9pbiAqIGxf YWRkcjsgc3RydWN0IHNvY2thZGRyX2luICogcl9hZGRyOworICAgIGludCBrdmVyc2lvbjsgaW50 IGVuY3J5cHRfZmxhZzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworICAgIHVuc2lnbmVkIGxv bmcgc3RhdHVzOworICAgIGNoYXIgKiByZWFsbT1OVUxMOworICAgIGV4dGVybiBpbnQgdHR5ZmQ7 CisgICAgaW50IGM7CisgICAgbG9uZyBtc2dsZW47CisKKyAgICBkZWJ1ZyhGMTExLCJja19rcmJf cmxvZ2luIixob3N0bmFtZSxwb3J0KTsKKworICAgIGlmICgga3ZlcnNpb24gPT0gNCAmJiAhY2tf a3JiNF9pc19pbnN0YWxsZWQoKSApIHsKKyAgICAgICAgcHJpbnRmKCI/S2VyYmVyb3MgNCBpcyBu b3QgaW5zdGFsbGVkXHJcbiIpOworICAgICAgICByZXR1cm4oLTEpOworICAgIH0gZWxzZSBpZiAo IGt2ZXJzaW9uID09IDUgJiYgIWNrX2tyYjVfaXNfaW5zdGFsbGVkKCkgKSB7CisgICAgICAgIHBy aW50ZigiP0tlcmJlcm9zIDUgaXMgbm90IGluc3RhbGxlZFxyXG4iKTsKKyAgICAgICAgcmV0dXJu KC0xKTsKKyAgICB9CisKKyAgICBpZiAoIGVuY3J5cHRfZmxhZyAmJiAhY2tfY3J5cHRfaXNfaW5z dGFsbGVkKCkgKSB7CisgICAgICAgIHByaW50ZigiP0VuY3J5cHRpb24gaXMgbm90IGluc3RhbGxl ZFxyXG4iKTsKKyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9CisKKyAgICBpZiAoIGt2ZXJzaW9u ID09IDUgKSB7CisjaWZkZWYgS1JCNQorICAgICAgICBrcmI1X2ZsYWdzIGF1dGhvcHRzPTA7Cisg ICAgICAgIGtyYjVfY2NhY2hlIGNjYWNoZT1OVUxMOworICAgICAgICBjaGFyICpja3N1bWJ1Zj1O VUxMOworICAgICAgICBjaGFyICpzZXJ2aWNlPU5VTEw7CisgICAgICAgIGNoYXIgKiBrY21kX3Zl cnNpb249TlVMTDsKKyAgICAgICAgZW51bSBrcmI1X2tjbWRfcHJvdG8gdXNlX3Byb3RvOworICAg ICAgICBrcmI1X2RhdGEgY2tzdW1kYXQ7CisgICAgICAgIGtyYjVfY3JlZHMgKmdldF9jcmVkID0g MDsKKyAgICAgICAga3JiNV9lcnJvcl9jb2RlIHN0YXR1czsKKyAgICAgICAga3JiNV9lcnJvciAg ICAgICplcnJvciA9IDA7CisgICAgICAgIGtyYjVfYXBfcmVwX2VuY19wYXJ0ICpyZXBfcmV0ID0g TlVMTDsKKyAgICAgICAga3JiNV9kYXRhIG91dGJ1ZjsKKyAgICAgICAgaW50IHJjOworICAgICAg ICBrcmI1X2ludDMyIHNlcW5vPTA7CisgICAgICAgIGtyYjVfaW50MzIgc2VydmVyX3NlcW5vPTA7 CisgICAgICAgIGNoYXIgKiogcmVhbG1saXN0PU5VTEw7CisgICAgICAgIGludCBidWZsZW47Cisg ICAgICAgIGNoYXIgdGd0WzI1Nl07CisKKyAgICAgICAgZGVidWcoRjEwMCwiY2tfa3JiX3Jsb2dp biB2ZXJzaW9uIDUiLCIiLDApOworCisgICAgICAgIHJlYWxtID0gY2tfa3JiNV9yZWFsbW9maG9z dCgoY2hhciAqKWhvc3RuYW1lKTsKKyAgICAgICAgaWYgKCFyZWFsbSkgeworICAgICAgICAgICAg Y2tzdHJuY3B5KHN0clRtcCwgIkNhbid0IGZpbmQgcmVhbG0gZm9yIGhvc3QgXCIiLEFVVEhUTVBC TCk7CisgICAgICAgICAgICBja3N0cm5jYXQoc3RyVG1wLCAoY2hhciAqKWhvc3RuYW1lLEFVVEhU TVBCTCk7CisgICAgICAgICAgICBja3N0cm5jYXQoc3RyVG1wLCAiXCIiLEFVVEhUTVBCTCk7Cisg ICAgICAgICAgICBwcmludGYoIj9LZXJiZXJvcyA1IGVycm9yOiAlc1xyXG4iLHN0clRtcCk7Cisg ICAgICAgICAgICBrcmI1X2Vycm5vID0gS1JCNV9FUlJfSE9TVF9SRUFMTV9VTktOT1dOOworICAg ICAgICAgICAgbWFrZXN0cigma3JiNV9lcnJtc2csc3RyVG1wKTsKKyAgICAgICAgICAgIHJldHVy bigwKTsKKyAgICAgICAgfQorCisgICAgICAgIGNrbWFrbXNnKHRndCxzaXplb2YodGd0KSwia3Ji dGd0LyIscmVhbG0sIkAiLHJlYWxtKTsKKyAgICAgICAgZGVidWcoRjExMCwiY2tfcmxvZ19ybG9n aW4gVEdUIix0Z3QsMCk7CisgICAgICAgIGlmICgga3JiNV9hdXRvZ2V0ICYmCisgICAgICAgICAg ICAgISgoY2tfa3JiNV90a3RfaXN2YWxpZChOVUxMLHRndCkgPiAwKSB8fAorICAgICAgICAgICAg ICAgIChja19rcmI1X2lzX3RndF92YWxpZCgpID4gMCkpICkKKyAgICAgICAgICAgIGNrX2tyYjVf YXV0b2dldF9UR1QocmVhbG0pOworCisgICAgICAgIGJ1ZmxlbiA9IHN0cmxlbigoY2hhciAqKXRl cm1fc3BlZWQpICsgc3RybGVuKChjaGFyICopcmVtb3RldXNlcikgKyA2NDsKKyAgICAgICAgaWYg KChja3N1bWJ1ZiA9IG1hbGxvYyhidWZsZW4pKSA9PSAwKSB7CisgICAgICAgICAgICBwcmludGYo IlVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGNoZWNrc3VtIGJ1ZmZlci5cclxuIik7Cisg ICAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICB9CisgICAgICAgIGNrbWFrbXNnKGNrc3Vt YnVmLGJ1Zmxlbixja3VpdG9hKCh1bnNpZ25lZCBzaG9ydCkgbnRvaHMocG9ydCkpLCI6IiwKKwkJ IChjaGFyICopdGVybV9zcGVlZCwoY2hhciAqKXJlbW90ZXVzZXIpOworICAgICAgICBja3N1bWRh dC5kYXRhID0gY2tzdW1idWY7CisgICAgICAgIGNrc3VtZGF0Lmxlbmd0aCA9IHN0cmxlbihja3N1 bWJ1Zik7CisKKyAgICAgICAgc3RhdHVzID0ga3JiNV9pbml0X2NvbnRleHQoJms1X2NvbnRleHQp OworICAgICAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJja19rcmJf cmxvZ2luKCkiLCJ1bmFibGUgdG8gaW5pdF9jb250ZXh0IiwwKTsKKyAgICAgICAgICAgIHJldHVy bigtMSk7CisgICAgICAgIH0KKworICAgICAgICBkZXNpbmJ1Zi5kYXRhID0gZGVzX2luYnVmOwor ICAgICAgICBkZXNvdXRidWYuZGF0YSA9IGRlc19vdXRwa3QrNDsgIC8qIFNldCB1cCBkZXMgYnVm ZmVycyAqLworCisgICAgICAgIHJjID0gazVfZ2V0X2NjYWNoZShrNV9jb250ZXh0LCZjY2FjaGUs TlVMTCk7CisgICAgICAgIGlmIChyYyAhPSAwKSB7CisgICAgICAgICAgICBjb21fZXJyKE5VTEws IHJjLCAid2hpbGUgZ2V0dGluZyBjY2FjaGUuIik7CisgICAgICAgICAgICByZXR1cm4oMCk7Cisg ICAgICAgIH0KKworICAgICAgICBzZXJ2aWNlID0ga3JiNV9kX3NydiA/IGtyYjVfZF9zcnYgOiBL UkI1X1NFUlZJQ0VfTkFNRTsKKworICAgICAgICBpZiAoIShnZXRfY3JlZCA9IChrcmI1X2NyZWRz ICopY2FsbG9jKDEsIHNpemVvZihrcmI1X2NyZWRzKSkpKSB7CisgICAgICAgICAgICBwcmludGYo ImNrX2tyYl9ybG9naW46IG5vIG1lbW9yeVxyXG4iKTsKKyAgICAgICAgICAgIHJldHVybigtMSk7 CisgICAgICAgIH0KKyAgICAgICAgbWVtc2V0KGdldF9jcmVkLDAsc2l6ZW9mKGtyYjVfY3JlZHMp KTsKKyAgICAgICAgc3RhdHVzID0ga3JiNV9zbmFtZV90b19wcmluY2lwYWwoazVfY29udGV4dCwg KGNoYXIgKikgaG9zdG5hbWUsCisJCQkJCSBzZXJ2aWNlLCBLUkI1X05UX1NSVl9IU1QsCisJCQkJ CSAmZ2V0X2NyZWQtPnNlcnZlcik7CisgICAgICAgIGlmIChzdGF0dXMpIHsKKyAgICAgICAgICAg IHByaW50ZigiY2tfa3JiX3Jsb2dpbjoga3JiNV9zbmFtZV90b19wcmluY2lwYWwgZmFpbGVkOiAl c1xyXG4iLAorICAgICAgICAgICAgICAgICAgICAgZXJyb3JfbWVzc2FnZShzdGF0dXMpKTsKKyAg ICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAgIH0KKworICAgICAgICB0dG9jKDApOworCisg ICAgICAgIGlmIChzdGF0dXMgPSBrcmI1X2NjX2dldF9wcmluY2lwYWwoazVfY29udGV4dCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjY2FjaGUsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmdldF9jcmVkLT5jbGllbnQpCisg ICAgICAgICAgICApIHsKKyAgICAgICAgICAgICh2b2lkKSBrcmI1X2NjX2Nsb3NlKGs1X2NvbnRl eHQsIGNjYWNoZSk7CisgICAgICAgICAgICBrcmI1X2ZyZWVfY3JlZHMoazVfY29udGV4dCwgZ2V0 X2NyZWQpOworICAgICAgICAgICAgZ290byBiYWQ7CisgICAgICAgIH0KKworICAgICAgICBpZiAo a3JiNV9ybG9nX3ZlciA9PSBLQ01EX09MRF9QUk9UT0NPTCkKKyAgICAgICAgICAgIGdldF9jcmVk LT5rZXlibG9jay5lbmN0eXBlPUVOQ1RZUEVfREVTX0NCQ19DUkM7CisKKyAgICAgICAgLyogR2V0 IHRpY2tldCBmcm9tIGNyZWRlbnRpYWxzIGNhY2hlIG9yIGtkYyAqLworICAgICAgICBzdGF0dXMg PSBrcmI1X2dldF9jcmVkZW50aWFscyhrNV9jb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjY2FjaGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldF9jcmVk LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcmV0X2NyZWQKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAga3JiNV9mcmVlX2Ny ZWRzKGs1X2NvbnRleHQsIGdldF9jcmVkKTsKKyAgICAgICAgZ2V0X2NyZWQgPSBOVUxMOworICAg ICAgICAodm9pZCkga3JiNV9jY19jbG9zZShrNV9jb250ZXh0LCBjY2FjaGUpOworCisgICAgICAg IGlmIChzdGF0dXMpIAorICAgICAgICAgICAgZ290byBiYWQ7CisKKyAgICAgICAgLyogUmVzZXQg aW50ZXJuYWwgZmxhZ3M7IHRoZXNlIHNob3VsZCBub3QgYmUgc2V0LiAqLworICAgICAgICBhdXRo b3B0cyAmPSAofk9QVFNfRk9SV0FSRF9DUkVEUyk7CisgICAgICAgIGF1dGhvcHRzICY9ICh+T1BU U19GT1JXQVJEQUJMRV9DUkVEUyk7CisKKyAgICAgICAgaWYgKGtyYjVfYXV0aF9jb25faW5pdChr NV9jb250ZXh0LCAmYXV0aF9jb250ZXh0KSkKKyAgICAgICAgICAgIGdvdG8gYmFkOworCisgICAg ICAgIGlmIChrcmI1X2F1dGhfY29uX3NldGZsYWdzKGs1X2NvbnRleHQsIGF1dGhfY29udGV4dCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtSQjVfQVVUSF9DT05URVhUX1JF VF9USU1FKSkKKyAgICAgICAgICAgIGdvdG8gYmFkOworCisgICAgICAgIC8qIE9ubHkgbmVlZCBs b2NhbCBhZGRyZXNzIGZvciBta19jcmVkKCkgdG8gc2VuZCB0byBrcmxvZ2luZCAqLworICAgICAg ICBpZiAoIWtyYjVfZF9ub19hZGRyZXNzZXMpCisgICAgICAgICAgICBpZiAoc3RhdHVzID0ga3Ji NV9hdXRoX2Nvbl9nZW5hZGRycyhrNV9jb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgYXV0aF9jb250ZXh0LAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR0eWZkLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBLUkI1X0FVVEhfQ09OVEVYVF9HRU5FUkFURV9MT0NBTF9GVUxMX0FERFIK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApKQorICAg ICAgICAgICAgICAgIGdvdG8gYmFkOworCisgICAgICAgIC8qIEhlcmUgaXMgd2hlcmUgd2Ugc3Rh cnQgdG8gaGFuZGxlIHRoZSBuZXcgcHJvdG9jb2wgaW4gZWFybmVzdCAqLworICAgICAgICBpZiAo IGtyYjVfcmxvZ192ZXIgPT0gS0NNRF9QUk9UT0NPTF9DT01QQVRfSEFDSyApIHsKKyAgICAgICAg ICAgIGtyYjVfYm9vbGVhbiBpc19kZXM7CisKKyAgICAgICAgICAgIGlmIChzdGF0dXMgPSBrcmI1 X2NfZW5jdHlwZV9jb21wYXJlKCBrNV9jb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEVOQ1RZUEVfREVTX0NCQ19DUkMsCisjaWZkZWYgSEVJ TURBTAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl dF9jcmVkLT5zZXNzaW9uLmtleXR5cGUsCisjZWxzZSAvKiBIRUlNREFMICovCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0X2NyZWQtPmtleWJsb2Nr LmVuY3R5cGUsCisjZW5kaWYgLyogSEVJTURBTCAqLworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICZpc19kZXMpKSB7CisgICAgICAgICAgICAgICAga3Ji NV9mcmVlX2NyZWRzKGs1X2NvbnRleHQsIHJldF9jcmVkKTsKKyAgICAgICAgICAgICAgICByZXRf Y3JlZCA9IE5VTEw7CisgICAgICAgICAgICAgICAgZ290byBiYWQ7CisgICAgICAgICAgICB9CisK KyAgICAgICAgICAgIGlmICggaXNfZGVzICkgeworICAgICAgICAgICAgICAgIGtjbWRfdmVyc2lv biA9ICJLQ01EVjAuMSI7CisgICAgICAgICAgICAgICAgdXNlX3Byb3RvID0gS0NNRF9PTERfUFJP VE9DT0w7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGF1dGhvcHRzID0g QVBfT1BUU19VU0VfU1VCS0VZOworICAgICAgICAgICAgICAgIGtjbWRfdmVyc2lvbiA9ICJLQ01E VjAuMiI7CisgICAgICAgICAgICAgICAgdXNlX3Byb3RvID0gS0NNRF9ORVdfUFJPVE9DT0w7Cisg ICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB1c2VfcHJvdG8gPSBr cmI1X3Jsb2dfdmVyOworICAgICAgICAgICAgc3dpdGNoICgga3JiNV9ybG9nX3ZlciApIHsKKyAg ICAgICAgICAgIGNhc2UgS0NNRF9ORVdfUFJPVE9DT0w6CisgICAgICAgICAgICAgICAgYXV0aG9w dHMgPSBBUF9PUFRTX1VTRV9TVUJLRVk7CisgICAgICAgICAgICAgICAga2NtZF92ZXJzaW9uID0g IktDTURWMC4yIjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgS0NN RF9PTERfUFJPVE9DT0w6CisgICAgICAgICAgICAgICAga2NtZF92ZXJzaW9uID0gIktDTURWMC4x IjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg ICAgICAgICAgZ290byBiYWQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAv KiBjYWxsIEtlcmJlcm9zIGxpYnJhcnkgcm91dGluZSB0byBvYnRhaW4gYW4gYXV0aGVudGljYXRv ciwKKyAgICAgICAgICAgcGFzcyBpdCBvdmVyIHRoZSBzb2NrZXQgdG8gdGhlIHNlcnZlciwgYW5k IG9idGFpbiBtdXR1YWwKKyAgICAgICAgICAgYXV0aGVudGljYXRpb24uCisgICAgICAgICAqLwor ICAgICAgICBzdGF0dXMgPSBrcmI1X3NlbmRhdXRoKGs1X2NvbnRleHQsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJmF1dGhfY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoa3JiNV9wb2ludGVyKSAmdHR5ZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAga2NtZF92ZXJzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldF9j cmVkLT5jbGllbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0X2NyZWQtPnNl cnZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0aG9wdHMsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJmNrc3VtZGF0LAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHJldF9jcmVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVycm9yLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICZyZXBfcmV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5V TEwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICBrcmI1X2ZyZWVf ZGF0YV9jb250ZW50cyhrNV9jb250ZXh0LCZja3N1bWRhdCk7CisKKyAgICAgICAgaWYgKHN0YXR1 cykgeworICAgICAgICAgICAgaWYgKCAhcXVpZXQgKQorICAgICAgICAgICAgICAgIHByaW50Zigi Q291bGRuJ3QgYXV0aGVudGljYXRlIHRvIHNlcnZlcjogJXNcclxuIiwKKyAgICAgICAgICAgICAg ICAgICAgICAgIGVycm9yX21lc3NhZ2Uoc3RhdHVzKSk7CisgICAgICAgICAgICBpZiAoZXJyb3Ip IHsKKyAgICAgICAgICAgICAgICBpZiAoICFxdWlldCApIHsKKyAgICAgICAgICAgICAgICAgICAg cHJpbnRmKCJTZXJ2ZXIgcmV0dXJuZWQgZXJyb3IgY29kZSAlZCAoJXMpXHJcbiIsCisgICAgICAg ICAgICAgICAgICAgICAgICBlcnJvci0+ZXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICBl cnJvcl9tZXNzYWdlKEVSUk9SX1RBQkxFX0JBU0Vfa3JiNSArIGVycm9yLT5lcnJvcikpOworICAg ICAgICAgICAgICAgICAgICBpZiAoZXJyb3ItPnRleHQubGVuZ3RoKSB7CisgICAgICAgICAgICAg ICAgICAgICAgICBwcmludGYoIkVycm9yIHRleHQgc2VudCBmcm9tIHNlcnZlcjogJXNcclxuIiwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3ItPnRleHQuZGF0YSk7CisgICAg ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAga3Ji NV9mcmVlX2Vycm9yKGs1X2NvbnRleHQsIGVycm9yKTsKKyAgICAgICAgICAgICAgICBlcnJvciA9 IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBnb3RvIGJhZDsKKyAgICAgICAgfQorCisg ICAgICAgIGlmIChyZXBfcmV0KSB7CisgICAgICAgICAgICBzZXJ2ZXJfc2Vxbm8gPSByZXBfcmV0 LT5zZXFfbnVtYmVyOworICAgICAgICAgICAga3JiNV9mcmVlX2FwX3JlcF9lbmNfcGFydChrNV9j b250ZXh0LCByZXBfcmV0KTsKKyAgICAgICAgfQorCisgICAgICAgICh2b2lkKSB0dG9sKHJlbW90 ZXVzZXIsIHN0cmxlbigoY2hhciAqKXJlbW90ZXVzZXIpKzEpOworICAgICAgICAodm9pZCkgdHRv bCh0ZXJtX3NwZWVkLCBzdHJsZW4oKGNoYXIgKil0ZXJtX3NwZWVkKSsxKTsKKyAgICAgICAgKHZv aWQpIHR0b2wobG9jYWx1c2VyLCBzdHJsZW4oKGNoYXIgKilsb2NhbHVzZXIpKzEpOworCisgICAg ICAgIGlmIChmb3J3YXJkX2ZsYWcpIHsgICAvKiBGb3J3YXJkIGNyZWRlbnRpYWxzIChnbG9iYWwp ICovCisgICAgICAgICAgICBpZiAoc3RhdHVzID0ga3JiNV9md2RfdGd0X2NyZWRzKCBrNV9jb250 ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0aF9j b250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNo YXIgKilob3N0bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHJldF9jcmVkLT5jbGllbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICByZXRfY3JlZC0+c2VydmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChmb3J3YXJkYWJsZV9mbGFnID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgT1BUU19GT1JXQVJEQUJMRV9DUkVEUyA6CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm91dGJ1ZgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgICApCisgICAgICAg ICAgICB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCJFcnJvciBmb3J3YXJkaW5nIGNyZWRlbnRp YWxzOiAlc1xyXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX21lc3NhZ2Uoc3Rh dHVzKSk7CisgICAgICAgICAgICAgICAgZ290byBiYWQyOworICAgICAgICAgICAgfQorCisgICAg ICAgICAgICAvKiBTZW5kIGZvcndhcmRlZCBjcmVkZW50aWFscyAqLworICAgICAgICAgICAgc3Rh dHVzID0ga3JiNV93cml0ZV9tZXNzYWdlKGs1X2NvbnRleHQsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChrcmI1X3BvaW50ZXIpJnR0eWZkLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb3V0YnVmCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7IC8qIER1 bW15IHdyaXRlIHRvIHNpZ25hbCBubyBmb3J3YXJkaW5nICovCisgICAgICAgICAgYmFkMjoKKyAg ICAgICAgICAgIG91dGJ1Zi5sZW5ndGggPSAwOworICAgICAgICAgICAgc3RhdHVzID0ga3JiNV93 cml0ZV9tZXNzYWdlKGs1X2NvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChrcmI1X3BvaW50ZXIpJnR0eWZkLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAmb3V0YnVmKTsKKyAgICAgICAgfSAgICAgICAKKworICAgICAgICBp ZiAoKGMgPSB0dGluYygwKSkgPCAwKSB7CisgICAgICAgICAgICBpZiAoYz09LTEpIHsKKyAgICAg ICAgICAgICAgICBwZXJyb3IoKGNoYXIgKilob3N0bmFtZSk7CisgICAgICAgICAgICB9IGVsc2Ug eworICAgICAgICAgICAgICAgIHByaW50ZigiY2tfa3JiX3Jsb2dpbjogYmFkIGNvbm5lY3Rpb24g d2l0aCByZW1vdGUgaG9zdFxyXG4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN0YXR1 cyA9IC0xOworICAgICAgICAgICAgZ290byBiYWQ7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGMg IT0gMCkgeworICAgICAgICAgICAgd2hpbGUgKChjID0gdHRpbmMoMSkpID49IDApIHsKKyAgICAg ICAgICAgICAgICAodm9pZCkgcHJpbnRmKCIlYyIsYyk7CisgICAgICAgICAgICAgICAgaWYgKGMg PT0gJ1xuJykKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg ICAgICAgICBzdGF0dXMgPSAtMTsKKyAgICAgICAgICAgIGdvdG8gYmFkOworICAgICAgICB9CisK KyAgICAgICAgaWYgKCBzdGF0dXMgPT0gMCApIHsgICAgICAgIC8qIHN1Y2Nlc3MgKi8KKyAgICAg ICAgICAgIGtyYjVfa2V5YmxvY2sgKiBrZXkgPSAwOworCisgICAgICAgICAgICBpZiAoIHVzZV9w cm90byA9PSBLQ01EX05FV19QUk9UT0NPTCApIHsKKyAgICAgICAgICAgICAgICBpbnQgb24gPSAx OworICAgICAgICAgICAgICAgIHJsb2dfaW5iYW5kID0gMTsKKyAgICAgICAgICAgICAgICBzZXRz b2Nrb3B0KHR0eWZkLCBTT0xfU09DS0VULCBTT19PT0JJTkxJTkUsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAoY2hhciAqKSAmb24sIHNpemVvZiBvbik7CisKKyAgICAgICAgICAgICAgICBz dGF0dXMgPSBrcmI1X2F1dGhfY29uX2dldGxvY2Fsc3Via2V5KCBrNV9jb250ZXh0LAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhfY29u dGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAma2V5KTsKKyAgICAgICAgICAgICAgICBpZiAoKHN0YXR1cyB8fCAha2V5KSAmJiBlbmNy eXB0X2ZsYWcgKQorICAgICAgICAgICAgICAgICAgICBnb3RvIGJhZDI7CisgICAgICAgICAgICB9 CisgICAgICAgICAgICBpZiAoIGtleSA9PSAwICkgeworI2lmZGVmIEhFSU1EQUwKKyAgICAgICAg ICAgICAgICBrZXkgPSAmcmV0X2NyZWQtPnNlc3Npb247CisjZWxzZSAvKiBIRUlNREFMICovCisg ICAgICAgICAgICAgICAga2V5ID0gJnJldF9jcmVkLT5rZXlibG9jazsKKyNlbmRpZiAvKiBIRUlN REFMICovCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJjbWRfc3RyZWFtX2luaXRfa3Ji NShrZXksIGVuY3J5cHRfZmxhZywgMSwgMSwgdXNlX3Byb3RvKTsKKyAgICAgICAgICAgIGlmICgg ZW5jcnlwdF9mbGFnICkKKyAgICAgICAgICAgICAgICBybG9nX2VuY3J5cHQgPSAxOworICAgICAg ICB9CisgICAgICAgIHJldHVybiAoMCk7ICAgICAvKiBzdWNjZXNzICovCisKKyAgICAgIGJhZDoK KyAgICAgICAgaWYgKCBzdGF0dXMgJiYgIXF1aWV0ICkgeworICAgICAgICAgICAgcHJpbnRmKCJL ZXJiZXJvcyBhdXRoZW50aWNhdGlvbiBlcnJvcjogJXNcclxuIiwKKyAgICAgICAgICAgICAgICAg ICAgZXJyb3JfbWVzc2FnZShzdGF0dXMpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAocmV0X2Ny ZWQpIHsKKyAgICAgICAgICAgIGtyYjVfZnJlZV9jcmVkcyhrNV9jb250ZXh0LCByZXRfY3JlZCk7 CisgICAgICAgICAgICByZXRfY3JlZCA9IE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu IChzdGF0dXMpOworI2Vsc2UgLyogS1JCNSAqLworICAgICAgICByZXR1cm4oLTEpOworI2VuZGlm IC8qIEtSQjUgKi8KKyAgICB9IGVsc2UgaWYgKGt2ZXJzaW9uID09IDQpIHsKKyNpZmRlZiBLUkI0 CisgICAgICAgIGNoYXIgdGd0WzQqUkVBTE1fU1orMV07CisgICAgICAgIGRlYnVnKEYxMDAsImNr X2tyYl9ybG9naW4gdmVyc2lvbiA0IiwiIiwwKTsKKworICAgICAgICByZWFsbSA9IChjaGFyICop a3JiX3JlYWxtb2Zob3N0KGhvc3RuYW1lKTsKKyAgICAgICAgaWYgKCFyZWFsbSkgeworICAgICAg ICAgICAgc3RyY3B5KHN0clRtcCwgIkNhbid0IGZpbmQgcmVhbG0gZm9yIGhvc3QgXCIiKTsKKyAg ICAgICAgICAgIGNrc3RybmNhdChzdHJUbXAsIGhvc3RuYW1lLEFVVEhUTVBCTCk7CisgICAgICAg ICAgICBja3N0cm5jYXQoc3RyVG1wLCAiXCIiLEFVVEhUTVBCTCk7CisgICAgICAgICAgICBwcmlu dGYoIj9LZXJiZXJvcyA0IGVycm9yOiAlc1xyXG4iLHN0clRtcCk7CisgICAgICAgICAgICBrcmI0 X2Vycm5vID0gMDsKKyAgICAgICAgICAgIG1ha2VzdHIoJmtyYjRfZXJybXNnLHN0clRtcCk7Cisg ICAgICAgICAgICByZXR1cm4oMCk7CisgICAgICAgIH0KKworICAgICAgICBja21ha21zZyh0Z3Qs c2l6ZW9mKHRndCksImtyYnRndC4iLHJlYWxtLCJAIixyZWFsbSk7CisgICAgICAgIHN0YXR1cyA9 IGNrX2tyYjRfdGt0X2lzdmFsaWQodGd0KTsKKworICAgICAgICBpZiAoIHN0YXR1cyA8PSAwICYm IGtyYjRfYXV0b2dldCApCisgICAgICAgICAgICBja19rcmI0X2F1dG9nZXRfVEdUKHJlYWxtKTsK KworICAgICAgICB0dG9jKDApOyAgICAgICAgLyogd3JpdGUgYSBOVUwgKi8KKworICAgICAgICBz dGF0dXMgPSBrcmJfc2VuZGF1dGgoZW5jcnlwdF9mbGFnP0tPUFRfRE9fTVVUVUFMOjAsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdHR5ZmQsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJms0X2F1dGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3JiNF9k X3NydiA/IGtyYjRfZF9zcnYgOiBLUkI0X1NFUlZJQ0VfTkFNRSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBob3N0bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy ZWFsbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZykgZ2V0 cGlkKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJms0X21zZ19kYXRhLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjcmVkLAorI2lmZGVmIENLX0VOQ1JZUFRJT04K KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmazRfc2NoZWQsCisjZWxzZSAvKiBFTkNS WVBUSU9OICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKKyNlbmRpZiAv KiBFTkNSWVBUSU9OICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbF9hZGRyLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJfYWRkciwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAiS0NNRFYwLjEiKTsKKyAgICAgICAgZGVidWcoRjExMSwiY2tfa3JiX3Js b2dpbiIsImtyYl9zZW5kYXV0aCIsc3RhdHVzKTsKKyAgICAgICAgaWYgKHN0YXR1cyAhPSBLU1VD Q0VTUykgeworICAgICAgICAgICAgcHJpbnRmKCAia3JiX3NlbmRhdXRoIGZhaWxlZDogJXNcclxu IiwKKyAgICAgICAgICAgICAgICAgICAga3JiX2dldF9lcnJfdGV4dF9lbnRyeShzdGF0dXMpCisg ICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICB9 CisgICAgICAgIHR0b2wocmVtb3RldXNlcixzdHJsZW4ocmVtb3RldXNlcikrMSk7CisgICAgICAg IHR0b2wodGVybV9zcGVlZCxzdHJsZW4odGVybV9zcGVlZCkrMSk7CisKKyAgICAgIHJlcmVhZDoK KyAgICAgICAgaWYgKChjID0gdHRpbmMoMCkpIDwgMCkgeworICAgICAgICAgICAgcHJpbnRmKCJy Y21kOiBiYWQgY29ubmVjdGlvbiB3aXRoIHJlbW90ZSBob3N0XHJcbiIpOworICAgICAgICAgICAg cmV0dXJuKC0xKTsKKyAgICAgICAgfQorICAgICAgICBkZWJ1ZyhGMTExLCJja19rcmJfcmxvZ2lu IiwiZmlyc3QgYnl0ZSIsYyk7CisKKyAgICAgICAgaWYgKGMgIT0gMCkgeworICAgICAgICAgICAg Y2hhciAqY2hlY2sgPSAibGQuc286IHdhcm5pbmc6IjsKKyAgICAgICAgICAgIC8qIElmIHJsb2dp bmQgd2FzIGNvbXBpbGVkIG9uIFN1bk9TNCwgYW5kIGl0IHNvbWVob3cKKyAgICAgICAgICAgIGdv dCB0aGUgc2hhcmVkIGxpYnJhcnkgdmVyc2lvbiBudW1iZXJzIHdyb25nLCBpdAorICAgICAgICAg ICAgbWF5IGdpdmUgYW4gbGQuc28gd2FybmluZyBhYm91dCBhbiBvbGQgdmVyc2lvbiBvZiBhCisg ICAgICAgICAgICBzaGFyZWQgbGlicmFyeS4gIEp1c3QgaWdub3JlIGFueSBzdWNoIHdhcm5pbmcu CisgICAgICAgICAgICBOb3RlIHRoYXQgdGhlIHdhcm5pbmcgaXMgYSBjaGFyYWN0ZXJpc3RpYyBv ZiB0aGUKKyAgICAgICAgICAgIHNlcnZlcjsgd2UgbWF5IG5vdCBvdXJzZWx2ZXMgYmUgcnVubmlu ZyB1bmRlcgorICAgICAgICAgICAgU3VuT1M0LiAgKi8KKyAgICAgICAgICAgIGlmIChjID09ICds JykgeworICAgICAgICAgICAgICAgIGNoYXIgKnA7CisgICAgICAgICAgICAgICAgY2hhciBjYzsK KworICAgICAgICAgICAgICAgIHAgPSAmY2hlY2tbMV07CisgICAgICAgICAgICAgICAgd2hpbGUg KChjID0gdHRpbmMoMCkpID49IDApIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCpwID09ICdc MCcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjID09ICdcbicpCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg ICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyAhPSAqcCkKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICsrcDsKKyAgICAgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICgqcCA9 PSAnXDAnKQorICAgICAgICAgICAgICAgICAgICBnb3RvIHJlcmVhZDsKKyAgICAgICAgICAgIH0K KworICAgICAgICAgICAgcHJpbnRmKGNoZWNrKTsKKyAgICAgICAgICAgIHdoaWxlICgoYyA9IHR0 aW5jKDEpKSA+PSAwKSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCIlYyIsYyk7CisgICAgICAg ICAgICAgICAgaWYgKGMgPT0gJ1xuJykKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICAgICB9CisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJja19rcmJfcmxvZ2luIiwiZmF0YWwg ZXJyb3IgMSIsMCk7CisgICAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICB9CisKKyNpZmRl ZiBDS19FTkNSWVBUSU9OCisgICAgICAgIGlmICggZW5jcnlwdF9mbGFnICkgeworICAgICAgICAg ICAgLyogaWYgd2UgYXJlIGVuY3J5cHRpbmcgd2UgbmVlZCB0byBzZXR1cCB0aGUgZW5jcnlwdGlv biAqLworICAgICAgICAgICAgLyogcm91dGluZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgZGVzX2tleV9zY2hlZChjcmVkLnNlc3Np b24sIGs0X3NjaGVkKTsKKyAgICAgICAgICAgIHJsb2dfZW5jcnlwdCA9IDE7CisgICAgICAgIH0K KyNlbmRpZiAvKiBFTkNSWVBUSU9OICovCisjZWxzZSAvKiBLUkI0ICovCisgICAgICAgIHJldHVy bigtMSk7CisjZW5kaWYgLyogS1JCNCAqLworICAgIH0KKyAgICByZXR1cm4oMCk7IC8qIHN1Y2Nl c3MgKi8KK30KKworI2RlZmluZSBTUkFORCAgIHNyYW5kCisjZGVmaW5lIFJBTkQgICAgcmFuZAor I2RlZmluZSBSQU5EX1RZUEUgICAgICAgaW50CisKK3N0YXRpYyBsb25nCityYW5kb21fY29uZm91 bmRlcihzaXplLCBmaWxsaW4pCitzaXplX3Qgc2l6ZTsKK2NoYXIgKiBmaWxsaW47Cit7CisgICAg c3RhdGljIGludCBzZWVkZWQgPSAwOworICAgIHJlZ2lzdGVyIHVuc2lnbmVkIGNoYXIgKnJlYWxf ZmlsbDsKKyAgICBSQU5EX1RZUEUgICBydmFsOworCisgICAgaWYgKCFzZWVkZWQpIHsKKyAgICAg ICAgLyogdGltZSgpIGRlZmluZWQgaW4gNC4xMi4yLjQsIGJ1dCByZXR1cm5zIGEgdGltZV90LCB3 aGljaCBpcyBhbgorICAgICAgICAgICAiYXJpdGhtZXRpYyB0eXBlIiAoNC4xMi4xKSAqLworICAg ICAgICBydmFsID0gKFJBTkRfVFlQRSkgdGltZSgwKTsKKyAgICAgICAgU1JBTkQocnZhbCk7Cisg ICAgICAgIHJ2YWwgPSBSQU5EKCk7CisgICAgICAgIHJ2YWwgXj0gZ2V0cGlkKCk7CisgICAgICAg IFNSQU5EKHJ2YWwpOworICAgICAgICBzZWVkZWQgPSAxOworICAgIH0KKworICAgIHJlYWxfZmls bCA9ICh1bnNpZ25lZCBjaGFyICopZmlsbGluOworICAgIHdoaWxlIChzaXplID4gMCkgeworICAg ICAgICBydmFsID0gUkFORCgpOworICAgICAgICAqcmVhbF9maWxsID0gcnZhbCAmIDB4ZmY7Cisg ICAgICAgIHJlYWxfZmlsbCsrOworICAgICAgICBzaXplLS07CisgICAgICAgIGlmIChzaXplKSB7 CisgICAgICAgICAgICAqcmVhbF9maWxsID0gKHJ2YWwgPj4gOCkgJiAweGZmOworICAgICAgICAg ICAgcmVhbF9maWxsKys7CisgICAgICAgICAgICBzaXplLS07CisgICAgICAgIH0KKyAgICB9Cisg ICAgcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBLUkI1CitpbnQKK2tyYjVfZGVzX2F2YWlsKGZkKQor ICAgIGludCBmZDsKK3sKKyAgICByZXR1cm4obnN0b3JlZCk7Cit9CisKK2ludAora3JiNV9kZXNf cmVhZChmZCwgYnVmLCBsZW4sIHNlY29uZGFyeSkKKyAgICBpbnQgZmQ7CisgICAgcmVnaXN0ZXIg Y2hhciAqYnVmOworICAgIGludCBsZW47CisgICAgaW50IHNlY29uZGFyeTsKK3sKKyAgICBpbnQg bnJldHVybmVkID0gMDsKKyAgICBsb25nIG5ldF9sZW4scmRfbGVuOworICAgIGludCBjYzsKKyAg ICBrcmI1X2Vycm9yX2NvZGUgc3RhdHVzOworICAgIHVuc2lnbmVkIGNoYXIgYzsKKyAgICBrcmI1 X2RhdGEgcGxhaW47CisgICAga3JiNV9lbmNfZGF0YSBjaXBoZXI7CisKKyAgICBkZWJ1ZyhGMTEx LCJrcmI1X2Rlc19yZWFkIiwibGVuIixsZW4pOworICAgIGRlYnVnKEYxMTEsImtyYjVfZGVzX3Jl YWQiLCJybG9nX2VuY3J5cHQiLHJsb2dfZW5jcnlwdCk7CisgICAgaWYgKCAhcmxvZ19lbmNyeXB0 ICkgeworICAgICAgICBjYyA9IG5ldF9yZWFkKGZkLCBidWYsIGxlbik7CisgICAgICAgIGRlYnVn KEYxMTEsImtyYjVfZGVzX3JlYWQiLCJjaGFycyByZWFkIixjYyk7CisgICAgICAgIGlmICggY2Mg PCAwICkKKyAgICAgICAgICAgIG5ldGNsb3MoKTsKKyAgICAgICAgcmV0dXJuKGNjKTsKKyAgICB9 CisKKyAgICBpZiAobnN0b3JlZCA+PSBsZW4pIHsKKyAgICAgICAgaWYgKCBidWYgKSB7CisgICAg ICAgICAgICBtZW1jcHkoYnVmLCBzdG9yZV9wdHIsIGxlbik7ICAgICAgICAvKiBzYWZlICovCisg ICAgICAgICAgICBzdG9yZV9wdHIgKz0gbGVuOworICAgICAgICAgICAgbnN0b3JlZCAtPSBsZW47 CisgICAgICAgICAgICByZXR1cm4obGVuKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBy ZXR1cm4oMCk7CisgICAgfSBlbHNlIGlmIChuc3RvcmVkKSB7CisgICAgICAgIGlmICggYnVmICkg eworICAgICAgICAgICAgbWVtY3B5KGJ1Ziwgc3RvcmVfcHRyLCBuc3RvcmVkKTsgICAgLyogc2Fm ZSAqLworICAgICAgICAgICAgbnJldHVybmVkICs9IG5zdG9yZWQ7CisgICAgICAgICAgICBidWYg Kz0gbnN0b3JlZDsKKyAgICAgICAgICAgIGxlbiAtPSBuc3RvcmVkOworICAgICAgICAgICAgbnN0 b3JlZCA9IDA7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuKDAp OworICAgIH0KKworICAgIC8qIFNlZSB0aGUgY29tbWVudCBpbiB2NF9kZXNfcmVhZC4gKi8KKyAg ICB3aGlsZSAoMSkgeworICAgICAgICBjYyA9IG5ldF9yZWFkKGZkLCAmYywgMSk7CisgICAgICAg IC8qIHdlIHNob3VsZCBjaGVjayBmb3Igbm9uLWJsb2NraW5nIGhlcmUsIGJ1dCB3ZSdkIGhhdmUK KyAgICAgICAgdG8gbWFrZSBpdCBzYXZlIHBhcnRpYWwgcmVhZHMgYXMgd2VsbC4gKi8KKyAgICAg ICAgaWYgKGNjIDw9IDApIHsKKyAgICAgICAgICAgIHJldHVybiBjYzsgLyogcmVhZCBlcnJvciAq LworICAgICAgICB9CisgICAgICAgIGlmIChjYyA9PSAxKSB7CisgICAgICAgICAgICBpZiAoYyA9 PSAwIHx8ICFkb19sZW5jaGVjaykgCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K KyAgICB9CisKKyAgICByZF9sZW4gPSBjOworICAgIGlmICgoY2MgPSBuZXRfcmVhZChmZCwgJmMs IDEpKSAhPSAxKSByZXR1cm4gMDsKKyAgICByZF9sZW4gPSAocmRfbGVuIDw8IDgpIHwgYzsKKyAg ICBpZiAoKGNjID0gbmV0X3JlYWQoZmQsICZjLCAxKSkgIT0gMSkgcmV0dXJuIDA7CisgICAgcmRf bGVuID0gKHJkX2xlbiA8PCA4KSB8IGM7CisgICAgaWYgKChjYyA9IG5ldF9yZWFkKGZkLCAmYywg MSkpICE9IDEpIHJldHVybiAwOworICAgIHJkX2xlbiA9IChyZF9sZW4gPDwgOCkgfCBjOworCisg ICAgaWYgKHN0YXR1cyA9IGtyYjVfY19lbmNyeXB0X2xlbmd0aChrNV9jb250ZXh0LCAKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGs1X3Nlc3Npb25fa2V5LT5lbmN0eXBlLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlX2l2ZWNzID8gcmRfbGVuICsg NCA6IHJkX2xlbiwKKwkJCQkgICAgKHNpemVfdCAqKSZuZXRfbGVuKSkgeworICAgICAgICBlcnJu byA9IHN0YXR1czsKKyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9CisKKyAgICBpZiAoKG5ldF9s ZW4gPD0gMCkgfHwgKG5ldF9sZW4gPiBzaXplb2YoZGVzX2luYnVmKSkpIHsKKyAgICAgICAgLyog cHJlcG9zdGVyb3VzIGxlbmd0aDsgYXNzdW1lIG91dC1vZi1zeW5jOyBvbmx5CisgICAgICAgICAg IHJlY291cnNlIGlzIHRvIGNsb3NlIGNvbm5lY3Rpb24sIHNvIHJldHVybiAwICovCisgICAgICAg IHByaW50ZigiUmVhZCBzaXplIHByb2JsZW0uXHJcbiIpOworICAgICAgICByZXR1cm4oMCk7Cisg ICAgfQorICAgIGlmICgoY2MgPSBuZXRfcmVhZChmZCwgZGVzaW5idWYuZGF0YSwgbmV0X2xlbikp ICE9IG5ldF9sZW4gKQorICAgIHsKKyAgICAgICAgLyogcGlwZSBtdXN0IGhhdmUgY2xvc2VkLCBy ZXR1cm4gMCAqLworICAgICAgICBwcmludGYoICJSZWFkIGVycm9yOiBsZW5ndGggcmVjZWl2ZWQg JWQgIT0gZXhwZWN0ZWQgJWQuXHJcbiIsCisgICAgICAgICAgICAgICAgY2MsCisgICAgICAgICAg ICAgICAgbmV0X2xlbgorICAgICAgICAgICAgICAgICk7CisgICAgICAgIHJldHVybihjYyk7Cisg ICAgfQorCisKKyAgICAvKiBkZWNyeXB0IGluZm8gKi8KKyAgICBjaXBoZXIuZW5jdHlwZSA9IEVO Q1RZUEVfVU5LTk9XTjsKKyAgICBjaXBoZXIuY2lwaGVydGV4dC5sZW5ndGggPSBuZXRfbGVuOwor ICAgIGNpcGhlci5jaXBoZXJ0ZXh0LmRhdGEgPSBkZXNpbmJ1Zi5kYXRhOworICAgIHBsYWluLmxl bmd0aCA9IHNpemVvZihzdG9yYWdlKTsKKyAgICBwbGFpbi5kYXRhID0gc3RvcmFnZTsKKworICAg IGlmICggc3RhdHVzID0ga3JiNV9jX2RlY3J5cHQoazVfY29udGV4dCwgazVfc2Vzc2lvbl9rZXks IEtDTURfS0VZVVNBR0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VfaXZl Y3MgPyBlbmNpdmVjX2kgKyBzZWNvbmRhcnkgOiAwLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICZjaXBoZXIsJnBsYWluKSApIHsKKyAgICAgICAgLyogcHJvYmFibHkgb3V0IG9m IHN5bmMgKi8KKyAgICAgICAgcHJpbnRmKCJDYW5ub3QgZGVjcnlwdCBkYXRhIGZyb20gbmV0d29y azogJXNcclxuIiwKKyAgICAgICAgICAgICAgICAgZXJyb3JfbWVzc2FnZShzdGF0dXMpKTsKKyAg ICAgICAgZXJybm8gPSBFSU87CisgICAgICAgIHJldHVybigtMSk7CisgICAgfQorICAgIAorICAg IHN0b3JlX3B0ciA9IHN0b3JhZ2U7CisgICAgbnN0b3JlZCA9IHJkX2xlbjsKKworICAgIGlmICgg dXNlX2l2ZWNzICkgeworICAgICAgICBpbnQgcmRfbGVuMjsKKyAgICAgICAgcmRfbGVuMiA9IHN0 b3JhZ2VbMF0gJiAweGZmOworICAgICAgICByZF9sZW4yIDw8PSA4OyByZF9sZW4yIHw9IHN0b3Jh Z2VbMV0gJiAweGZmOworICAgICAgICByZF9sZW4yIDw8PSA4OyByZF9sZW4yIHw9IHN0b3JhZ2Vb Ml0gJiAweGZmOworICAgICAgICByZF9sZW4yIDw8PSA4OyByZF9sZW4yIHw9IHN0b3JhZ2VbM10g JiAweGZmOworICAgICAgICBpZiAocmRfbGVuMiAhPSByZF9sZW4pIHsKKyAgICAgICAgICAgIC8q IGNsZWFydGV4dCBsZW5ndGggdHJhc2hlZD8gKi8KKyAgICAgICAgICAgIGVycm5vID0gRUlPOwor ICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIHN0b3JlX3B0ciArPSA0 OworICAgIH0KKworICAgIGlmICggIWJ1ZiApCisgICAgICAgIHJldHVybigwKTsKKworI2lmZGVm IFJMT0dDT0RFICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGJsYWggKi8KKyAgICBpZiAocmxv Z19pbmJhbmQgJiYgKHR0bnByb3RvID09IE5QX0s1TE9HSU4gfHwgdHRucHJvdG8gPT0gTlBfRUs1 TE9HSU4pKQorICAgIHsKKyAgICAgICAgaW50IGksIGxlZnQsIG47CisKKyAgICAgICAgZm9yIChp ID0gMDsgaSA8IG5zdG9yZWQ7IGkrKykgeworICAgICAgICAgICAgaWYgKHN0b3JlX3B0cltpXSA9 PSAnXDM3NycgJiYKKyAgICAgICAgICAgICAgICBzdG9yZV9wdHJbaSsxXSA9PSAnXDM3NycpIHsK KyAgICAgICAgICAgICAgICBsZWZ0ID0gbnN0b3JlZCAtIGk7CisgICAgICAgICAgICAgICAgbiA9 IHJsb2dfY3RybCgmc3RvcmVfcHRyW2ldLCBsZWZ0KTsKKyAgICAgICAgICAgICAgICBpZiAobiA8 IDApIHsKKyAgICAgICAgICAgICAgICAgICAgbGVmdCAtPSAoLW4pOworICAgICAgICAgICAgICAg ICAgICBuc3RvcmVkID0gbGVmdDsKKyAgICAgICAgICAgICAgICAgICAgLyogZmx1c2ggYmVmb3Jl LCBhbmQgKC1uKSBieXRlcyAqLworICAgICAgICAgICAgICAgICAgICBpZiAobGVmdCA+IDApCisg ICAgICAgICAgICAgICAgICAgICAgICBtZW1tb3ZlKHN0b3JlX3B0ciwgJnN0b3JlX3B0cltpLW5d LCBsZWZ0KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG4pIHsKKyAgICAgICAgICAgICAg ICAgICAgbGVmdCAtPSBuOworICAgICAgICAgICAgICAgICAgICBuc3RvcmVkIC09IG47CisgICAg ICAgICAgICAgICAgICAgIGlmIChsZWZ0ID4gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1l bW1vdmUoc3RvcmVfcHRyLCAmc3RvcmVfcHRyW25dLCBsZWZ0KTsKKyAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgLyogUkxPR0NPREUgKi8K KworICAgIGlmIChuc3RvcmVkID4gbGVuKSB7CisgICAgICAgIG1lbWNweShidWYsIHN0b3JlX3B0 ciwgbGVuKTsgICAgICAgICAgICAvKiBzYWZlICovCisgICAgICAgIG5yZXR1cm5lZCArPSBsZW47 CisgICAgICAgIHN0b3JlX3B0ciArPSBsZW47CisgICAgICAgIG5zdG9yZWQgLT0gbGVuOworICAg IH0gZWxzZSB7CisgICAgICAgIG1lbWNweShidWYsIHN0b3JlX3B0ciwgbnN0b3JlZCk7ICAgICAg ICAvKiBzYWZlICovCisgICAgICAgIG5yZXR1cm5lZCArPSBuc3RvcmVkOworICAgICAgICBuc3Rv cmVkID0gMDsKKyAgICB9CisgICAgcmV0dXJuKG5yZXR1cm5lZCk7Cit9CisKK2ludAora3JiNV9k ZXNfd3JpdGUoZmQsIGJ1ZiwgbGVuLCBzZWNvbmRhcnkpCisgICAgaW50IGZkOworICAgIGNoYXIg KmJ1ZjsKKyAgICBpbnQgbGVuOworICAgIGludCBzZWNvbmRhcnk7Cit7CisgICAgY2hhciB0bXBi dWZbMipSTE9HX0JVRlNJWis4XTsKKyAgICB1bnNpZ25lZCBjaGFyICpsZW5fYnVmID0gKHVuc2ln bmVkIGNoYXIgKikgdG1wYnVmOworICAgIGtyYjVfZXJyb3JfY29kZSBzdGF0dXM7CisgICAga3Ji NV9kYXRhIHBsYWluOworICAgIGtyYjVfZW5jX2RhdGEgY2lwaGVyOworCisgICAgZGVidWcoRjEx MSwia3JiNV9kZXNfd3JpdGUiLCJybG9nX2VuY3J5cHQiLHJsb2dfZW5jcnlwdCk7CisgICAgaWYg KCAhcmxvZ19lbmNyeXB0ICkgeworICAgICAgICBpbnQgY2MgPSBuZXRfd3JpdGUoZmQsIGJ1Ziwg bGVuKTsKKyAgICAgICAgZGVidWcoRjExMSwibmV0X3dyaXRlIiwiY2hhcnMgd3JpdHRlbiIsY2Mp OworICAgICAgICByZXR1cm4oY2MgIT0gbGVuID8gLTEgOiBsZW4pOworICAgIH0KKworICAgIGlm ICh1c2VfaXZlY3MpIHsKKyAgICAgICAgdW5zaWduZWQgY2hhciAqbGVuYnVmMiA9ICh1bnNpZ25l ZCBjaGFyICopIHRtcGJ1ZjsKKyAgICAgICAgaWYgKGxlbiArIDQgPiBzaXplb2YodG1wYnVmKSkK KyAgICAgICAgICAgIGFib3J0ICgpOworICAgICAgICBsZW5idWYyWzBdID0gKGxlbiAmIDB4ZmYw MDAwMDApID4+IDI0OworICAgICAgICBsZW5idWYyWzFdID0gKGxlbiAmIDB4ZmYwMDAwKSA+PiAx NjsKKyAgICAgICAgbGVuYnVmMlsyXSA9IChsZW4gJiAweGZmMDApID4+IDg7CisgICAgICAgIGxl bmJ1ZjJbM10gPSAobGVuICYgMHhmZik7CisgICAgICAgIG1lbWNweSAodG1wYnVmICsgNCwgYnVm LCBsZW4pOworCisgICAgICAgIHBsYWluLmRhdGEgPSB0bXBidWY7CisgICAgICAgIHBsYWluLmxl bmd0aCA9IGxlbiArIDQ7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcGxhaW4uZGF0YSA9IGJ1ZjsK KyAgICAgICAgcGxhaW4ubGVuZ3RoID0gbGVuOworICAgIH0KKworICAgIGNpcGhlci5jaXBoZXJ0 ZXh0Lmxlbmd0aCA9IHNpemVvZihkZXNfb3V0cGt0KS00OworICAgIGNpcGhlci5jaXBoZXJ0ZXh0 LmRhdGEgPSBkZXNvdXRidWYuZGF0YTsKKworICAgIGlmICggc3RhdHVzID0ga3JiNV9jX2VuY3J5 cHQoazVfY29udGV4dCwgazVfc2Vzc2lvbl9rZXksIEtDTURfS0VZVVNBR0UsCisgICAgICAgICAg ICAgICAgICAgICAgICAgdXNlX2l2ZWNzID8gZW5jaXZlY19vICsgc2Vjb25kYXJ5IDogMCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAmcGxhaW4sICZjaXBoZXIpKSB7CisgICAgICAgIHByaW50 ZigiV3JpdGUgZW5jcnlwdCBwcm9ibGVtOiAlcy5cclxuIiwKKyAgICAgICAgICAgICAgICAgZXJy b3JfbWVzc2FnZShzdGF0dXMpKTsKKyAgICAgICAgZXJybm8gPSBFSU87CisgICAgICAgIHJldHVy bigtMSk7CisgICAgfQorICAgIGRlc291dGJ1Zi5sZW5ndGggPSBjaXBoZXIuY2lwaGVydGV4dC5s ZW5ndGg7CisKKyAgICBsZW5fYnVmID0gKHVuc2lnbmVkIGNoYXIgKikgZGVzX291dHBrdDsKKyAg ICBsZW5fYnVmWzBdID0gKGxlbiAmIDB4ZmYwMDAwMDApID4+IDI0OworICAgIGxlbl9idWZbMV0g PSAobGVuICYgMHhmZjAwMDApID4+IDE2OworICAgIGxlbl9idWZbMl0gPSAobGVuICYgMHhmZjAw KSA+PiA4OworICAgIGxlbl9idWZbM10gPSAobGVuICYgMHhmZik7CisKKyAgICBpZiAobmV0X3dy aXRlKGZkLCBkZXNfb3V0cGt0LGRlc291dGJ1Zi5sZW5ndGgrNCkKKyAgICAgICAgICE9IGRlc291 dGJ1Zi5sZW5ndGgrNCl7CisgICAgICAgIHByaW50ZigiQ291bGQgbm90IHdyaXRlIG91dCBhbGwg ZGF0YVxyXG4iKTsKKyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9CisgICAgZWxzZSByZXR1cm4o bGVuKTsKK30KKyNlbmRpZiAvKiBLUkI1ICovCisKKyNpZmRlZiBLUkI0CisvKgorICogTm90ZSB0 aGF0IHRoZSBlbmNyeXB0ZWQgcmxvZ2luIHBhY2tldHMgdGFrZSB0aGUgZm9ybSBvZiBhIGZvdXIt Ynl0ZQorICogbGVuZ3RoIGZvbGxvd2VkIGJ5IGVuY3J5cHRlZCBkYXRhLiAgT24gd3JpdGluZyB0 aGUgZGF0YSBvdXQsIGEgc2lnbmlmaWNhbnQKKyAqIHBlcmZvcm1hbmNlIHBlbmFsdHkgaXMgc3Vm ZmVyZWQgKGF0IGxlYXN0IG9uZSBSVFQgcGVyIGNoYXJhY3RlciwgdHdvIGlmIHdlCisgKiBhcmUg d2FpdGluZyBmb3IgYSBzaGVsbCB0byBlY2hvKSBieSB3cml0aW5nIHRoZSBkYXRhIHNlcGFyYXRl bHkgZnJvbSB0aGUKKyAqIGxlbmd0aC4gIFNvLCB1bmxpa2UgdGhlIGlucHV0IGJ1ZmZlciwgd2hp Y2gganVzdCBjb250YWlucyB0aGUgb3V0cHV0CisgKiBkYXRhLCB0aGUgb3V0cHV0IGJ1ZmZlciBy ZXByZXNlbnRzIHRoZSBlbnRpcmUgcGFja2V0LgorICovCisKK2ludAora3JiNF9kZXNfYXZhaWwo ZmQpCisgICAgaW50IGZkOworeworICAgIHJldHVybihuc3RvcmVkKTsKK30KKworaW50CitrcmI0 X2Rlc19yZWFkKGZkLCBidWYsIGxlbikKK2ludCBmZDsKK3JlZ2lzdGVyIGNoYXIgKmJ1ZjsKK2lu dCBsZW47Cit7CisgICAgaW50IG5yZXR1cm5lZCA9IDA7CisgICAgdW5zaWduZWQgbG9uZyBuZXRf bGVuLCByZF9sZW47CisgICAgaW50IGNjOworICAgIHVuc2lnbmVkIGNoYXIgYzsKKyAgICBpbnQg Z290emVybyA9IDA7CisKKyAgICBkZWJ1ZyhGMTExLCJrcmI0X2Rlc19yZWFkIiwicmxvZ19lbmNy eXB0IixybG9nX2VuY3J5cHQpOworICAgIGRlYnVnKEYxMTEsImtyYjRfZGVzX3JlYWQiLCJsZW4i LGxlbik7CisgICAgaWYgKCAhcmxvZ19lbmNyeXB0ICkgeworICAgICAgICBjYyA9IG5ldF9yZWFk KGZkLCBidWYsIGxlbik7CisgICAgICAgIGRlYnVnKEYxMTEsImtyYjRfZGVzX3JlYWQiLCJjaGFy cyByZWFkIixjYyk7CisgICAgICAgIGlmICggY2MgPCAwICkKKyAgICAgICAgICAgIG5ldGNsb3Mo KTsKKyAgICAgICAgcmV0dXJuKGNjKTsKKyAgICB9CisKKyAgICBpZiAobnN0b3JlZCA+PSBsZW4p IHsKKyAgICAgICAgaWYgKCBidWYgKSB7CisgICAgICAgICAgICBkZWJ1ZyhGMTExLCJrcmI0X2Rl c19yZWFkIChuc3RvcmVkID49IGxlbikiLCJuc3RvcmVkIixuc3RvcmVkKTsKKyAgICAgICAgICAg IG1lbWNweShidWYsIHN0b3JlX3B0ciwgbGVuKTsgICAgICAgIC8qIHNhZmUgKi8KKyAgICAgICAg ICAgIHN0b3JlX3B0ciArPSBsZW47CisgICAgICAgICAgICBuc3RvcmVkIC09IGxlbjsKKyAgICAg ICAgICAgIHJldHVybihsZW4pOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHJldHVybigw KTsKKyAgICB9IGVsc2UgaWYgKG5zdG9yZWQpIHsKKyAgICAgICAgaWYgKCBidWYgKSB7CisgICAg ICAgICAgICBkZWJ1ZyhGMTExLCJrcmI0X2Rlc19yZWFkIChuc3RvcmVkKSIsIm5zdG9yZWQiLG5z dG9yZWQpOworICAgICAgICAgICAgbWVtY3B5KGJ1Ziwgc3RvcmVfcHRyLCBuc3RvcmVkKTsgICAg Lyogc2FmZSAqLworICAgICAgICAgICAgbnJldHVybmVkICs9IG5zdG9yZWQ7CisgICAgICAgICAg ICBidWYgKz0gbnN0b3JlZDsKKyAgICAgICAgICAgIGxlbiAtPSBuc3RvcmVkOworICAgICAgICAg ICAgbnN0b3JlZCA9IDA7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcmV0dXJuKDApOwor ICAgIH0KKworICAgIC8qIFdlJ3JlIGZldGNoaW5nIHRoZSBsZW5ndGggd2hpY2ggaXMgTVNCIGZp cnN0LCBhbmQgdGhlIE1TQgorICAgIGhhcyB0byBiZSB6ZXJvIHVubGVzcyB0aGUgY2xpZW50IGlz IHNlbmRpbmcgbW9yZSB0aGFuIDJeMjQKKyAgICAoMTZNKSBieXRlcyBpbiBhIHNpbmdsZSB3cml0 ZSAod2hpY2ggaXMgd2h5IHRoaXMgY29kZSBpcyBpbgorICAgIHJsb2dpbiBidXQgbm90IHJjcCBv ciByc2guKSBUaGUgb25seSByZWFzb25zIHdlJ2QgZ2V0IHNvbWV0aGluZworICAgIG90aGVyIHRo YW4gemVybyBhcmU6CisgICAgLS0gY29ycnVwdGlvbiBvZiB0aGUgdGNwIHN0cmVhbSAod2hpY2gg d2lsbCBzaG93IHVwIHdoZW4KKyAgICBldmVyeXRoaW5nIGVsc2UgaXMgb3V0IG9mIHN5bmMgdG9v KQorICAgIC0tIHVuLWNhdWdodCBCZXJrZWxleS1zdHlsZSAicHNldWRvIG91dC1vZi1iYW5kIGRh dGEiIHdoaWNoCisgICAgaGFwcGVucyBhbnkgdGltZSB0aGUgdXNlciBoaXRzIF5DIHR3aWNlLgor ICAgIFRoZSBsYXR0ZXIgaXMgKnZlcnkqIGNvbW1vbiwgYXMgc2hvd24gYnkgYW4gJ3Jsb2dpbiAt eCAtZCcKKyAgICB1c2luZyB0aGUgQ05TIFY0IHJsb2dpbi4gICAgICAgICBNYXJrIEVJY2hpbiAx Lzk1CisgICAgKi8KKyAgICBkZWJ1ZyhGMTEwLCJrcmI0X2Rlc19yZWFkIiwKKyAgICAgICAgICAi YWJvdXQgdG8gY2FsbCBuZXRfcmVhZCgpIHRoaXMgd2lsbCBibG9jayIsCisgICAgICAgICAgMAor ICAgICAgICAgICk7CisgICAgZG8geworICAgICAgICBjYyA9IG5ldF9yZWFkKGZkLCAmYywgMSk7 CisgICAgICAgIGRlYnVnKEYxMTEsIm5ldF9yZWFkIiwiY2hhcnMgcmVhZCIsY2MpOworICAgICAg ICBpZiAoY2MgPD0gMCkgeworICAgICAgICAgICAgbmV0Y2xvcygpOworICAgICAgICAgICAgcmV0 dXJuKC0xKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY2MgIT0gMSkgcmV0dXJuIDA7IC8qIHJl YWQgZXJyb3IgKi8KKyAgICAgICAgaWYgKGNjID09IDEpIHsKKyAgICAgICAgICAgIGlmIChjID09 IDApIGdvdHplcm8gPSAxOworICAgICAgICB9CisgICAgfSB3aGlsZSAoIWdvdHplcm8pOworCisg ICAgZGVidWcoRjExMCwia3JiNF9kZXNfcmVhZCIsImdvdHplcm8iLDApOworICAgIGNjID0gbmV0 X3JlYWQoZmQsICZjLCAxKTsKKyAgICBkZWJ1ZyhGMTExLCJuZXRfcmVhZCIsImNoYXJzIHJlYWQi LGNjKTsKKyAgICBpZiAoY2MgPCAwKSB7CisgICAgICAgIG5ldGNsb3MoKTsKKyAgICAgICAgcmV0 dXJuKC0xKTsKKyAgICB9IGVsc2UgaWYgKCBjYyAhPSAxICkKKyAgICAgICAgcmV0dXJuKDApOwor ICAgIG5ldF9sZW4gPSBjOworICAgIGNjID0gbmV0X3JlYWQoZmQsICZjLCAxKTsKKyAgICBkZWJ1 ZyhGMTExLCJuZXRfcmVhZCIsImNoYXJzIHJlYWQiLGNjKTsKKyAgICBpZiAoY2MgPCAwKSB7Cisg ICAgICAgIG5ldGNsb3MoKTsKKyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9IGVsc2UgaWYgKCBj YyAhPSAxICkKKyAgICAgICAgcmV0dXJuKDApOworICAgIG5ldF9sZW4gPSAobmV0X2xlbiA8PCA4 KSB8IGM7CisgICAgZGVidWcoRjExMSwibmV0X3JlYWQiLCJjaGFycyByZWFkIixjYyk7CisgICAg Y2MgPSBuZXRfcmVhZChmZCwgJmMsIDEpOworICAgIGlmIChjYyA8IDApIHsKKyAgICAgICAgbmV0 Y2xvcygpOworICAgICAgICByZXR1cm4oLTEpOworICAgIH0gZWxzZSBpZiAoIGNjICE9IDEgKQor ICAgICAgICByZXR1cm4oMCk7CisgICAgbmV0X2xlbiA9IChuZXRfbGVuIDw8IDgpIHwgYzsKKyAg ICBkZWJ1ZyhGMTExLCJrcmI0X2Rlc19yZWFkIiwibmV0X2xlbiIsbmV0X2xlbik7CisKKyAgICAv KiBOb3RlOiBuZXRfbGVuIGlzIHVuc2lnbmVkICovCisgICAgaWYgKG5ldF9sZW4gPiBzaXplb2Yo ZGVzX2luYnVmKSkgeworICAgICAgICAvKiBYWFggcHJlcG9zdGVyb3VzIGxlbmd0aCwgcHJvYmFi bHkgb3V0IG9mIHN5bmMuCisgICAgICAgIGFjdCBhcyBpZiBwaXBlIGNsb3NlZCAqLworICAgICAg ICByZXR1cm4oMCk7CisgICAgfQorICAgIC8qIHRoZSB3cml0ZXIgdGVsbHMgdXMgaG93IG11Y2gg cmVhbCBkYXRhIHdlIGFyZSBnZXR0aW5nLCBidXQKKyAgICB3ZSBuZWVkIHRvIHJlYWQgdGhlIHBh ZCBieXRlcyAoOC1ieXRlIGJvdW5kYXJ5KSAqLworI2lmbmRlZiByb3VuZHVwCisjZGVmaW5lIHJv dW5kdXAoeCx5KSAoKCgoeCkrKHkpLTEpLyh5KSkqKHkpKQorI2VuZGlmIC8qIHJvdW5kdXAgKi8K KyAgICByZF9sZW4gPSByb3VuZHVwKG5ldF9sZW4sIDgpOworICAgIGRlYnVnKEYxMTEsImtyYjRf ZGVzX3JlYWQiLCJyZF9sZW4iLHJkX2xlbik7CisgICAgY2MgPSBuZXRfcmVhZChmZCwgZGVzX2lu YnVmLCByZF9sZW4pOworICAgIGRlYnVnKEYxMTEsIm5ldF9yZWFkIiwiY2hhcnMgcmVhZCIsY2Mp OworICAgIGlmIChjYyA8IDApIHsKKyAgICAgICAgbmV0Y2xvcygpOworICAgICAgICByZXR1cm4o LTEpOworICAgIH0gZWxzZSBpZiAoIGNjICE9IHJkX2xlbiApCisgICAgICAgIHJldHVybigwKTsK KworICAgIGNraGV4ZHVtcCgia3JiNF9kZXNfcmVhZCBkZXNfaW5idWYiLGRlc19pbmJ1Ziw4KTsK KyNpZmRlZiBDS19FTkNSWVBUSU9OCisjaWZkZWYgS1JCNTI0CisgICAgKHZvaWQpIGRlc19wY2Jj X2VuY3J5cHQoZGVzX2luYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdl LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmV0X2xlbiA8IDgpID8gOCA6IG5ldF9s ZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGs0X3NjaGVkLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjcmVkLnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIERFQ1JZUFQpOworI2Vsc2UgLyogS1JCNTI0ICovCisgICAgKHZvaWQpIGRlc19wY2JjX2Vu Y3J5cHQoKEJsb2NrICopZGVzX2luYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo QmxvY2sgKilzdG9yYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmV0X2xlbiA8 IDgpID8gOCA6IG5ldF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGs0X3NjaGVk LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY3JlZC5zZXNzaW9uLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBERUNSWVBUKTsKKyNlbmRpZiAvKiBLUkI1MjQgKi8KKyNlbmRp ZiAvKiBFTkNSWVBUSU9OICovCisgICAgY2toZXhkdW1wKCJrcmI0X2Rlc19yZWFkIHN0b3JhZ2Ui LHN0b3JhZ2UsOCk7CisKKyAgICAvKgorICAgICogd2hlbiB0aGUgY2xlYXJ0ZXh0IGJsb2NrIGlz IDwgOCBieXRlcywgaXQgaXMgInJpZ2h0LWp1c3RpZmllZCIKKyAgICAqIGluIHRoZSBibG9jaywg c28gd2UgbmVlZCB0byBhZGp1c3QgdGhlIHBvaW50ZXIgdG8gdGhlIGRhdGEKKyAgICAqLworICAg IGlmIChuZXRfbGVuIDwgOCkKKyAgICAgICAgc3RvcmVfcHRyID0gc3RvcmFnZSArIDggLSBuZXRf bGVuOworICAgIGVsc2UKKyAgICAgICAgc3RvcmVfcHRyID0gc3RvcmFnZTsKKyAgICBuc3RvcmVk ID0gbmV0X2xlbjsKKworICAgIGlmICggIWJ1ZiApCisgICAgICAgIHJldHVybigwKTsKKworICAg IGlmIChuc3RvcmVkID4gbGVuKSB7CisgICAgICAgIG1lbWNweShidWYsIHN0b3JlX3B0ciwgbGVu KTsgICAgICAgICAgICAvKiBzYWZlICovCisgICAgICAgIG5yZXR1cm5lZCArPSBsZW47CisgICAg ICAgIHN0b3JlX3B0ciArPSBsZW47CisgICAgICAgIG5zdG9yZWQgLT0gbGVuOworICAgIH0gZWxz ZSB7CisgICAgICAgIG1lbWNweShidWYsIHN0b3JlX3B0ciwgbnN0b3JlZCk7ICAgICAgICAvKiBz YWZlICovCisgICAgICAgIG5yZXR1cm5lZCArPSBuc3RvcmVkOworICAgICAgICBuc3RvcmVkID0g MDsKKyAgICB9CisKKyAgICBkZWJ1ZyhGMTExLCJuZXRfcmVhZCIsIm5yZXR1cm5lZCIsbnJldHVy bmVkKTsKKyAgICByZXR1cm4obnJldHVybmVkKTsKK30KKworaW50CitrcmI0X2Rlc193cml0ZShm ZCwgYnVmLCBsZW4pCitpbnQgZmQ7CitjaGFyICpidWY7CitpbnQgbGVuOworeworICAgIHN0YXRp YyBjaGFyIGdhcmJhZ2VfYnVmWzhdOworICAgIHVuc2lnbmVkIGNoYXIgKmxlbl9idWYgPSAodW5z aWduZWQgY2hhciAqKSBkZXNfb3V0cGt0OworICAgIGludCBjYzsKKworICAgIGRlYnVnKEYxMTEs ImtyYjRfZGVzX3dyaXRlIiwicmxvZ19lbmNyeXB0IixybG9nX2VuY3J5cHQpOworICAgIGlmICgg IXJsb2dfZW5jcnlwdCApIHsKKyAgICAgICAgY2MgPSBuZXRfd3JpdGUoZmQsIGJ1ZiwgbGVuKTsK KyAgICAgICAgZGVidWcoRjExMSwibmV0X3dyaXRlIiwiY2hhcnMgd3JpdHRlbiIsY2MpOworICAg ICAgICByZXR1cm4oY2MpOworICAgIH0KKworICAgIC8qCisgICAgKiBwY2JjX2VuY3J5cHQgb3V0 cHV0cyBpbiA4LWJ5dGUgKDY0IGJpdCkgaW5jcmVtZW50cworICAgICoKKyAgICAqIGl0IHplcm8t ZmlsbHMgdGhlIGNsZWFydGV4dCB0byA4LWJ5dGUgcGFkZGluZywKKyAgICAqIHNvIGlmIHdlIGhh dmUgY2xlYXJ0ZXh0IG9mIDwgOCBieXRlcywgd2Ugd2FudAorICAgICogdG8gaW5zZXJ0IHJhbmRv bSBnYXJiYWdlIGJlZm9yZSBpdCBzbyB0aGF0IHRoZSBjaXBoZXJ0ZXh0CisgICAgKiBkaWZmZXJz IGZvciBlYWNoIHRyYW5zbWlzc2lvbiBvZiB0aGUgc2FtZSBjbGVhcnRleHQuCisgICAgKiBpZiBs ZW4gPCA4IC0gc2l6ZW9mKGxvbmcpLCBzaXplb2YobG9uZykgYnl0ZXMgb2YgcmFuZG9tCisgICAg KiBnYXJiYWdlIHNob3VsZCBiZSBzdWZmaWNpZW50OyBsZWF2ZSB0aGUgcmVzdCBhcy1pcyBpbiB0 aGUgYnVmZmVyLgorICAgICogaWYgbGVuID4gOCAtIHNpemVvZihsb25nKSwganVzdCBnYXJiYWdl IGZpbGwgdGhlIHJlc3QuCisgICAgKi8KKyAgICBpZiAobGVuIDwgOCkgeworICAgICAgICByYW5k b21fY29uZm91bmRlcig4IC0gbGVuLCBnYXJiYWdlX2J1Zik7CisgICAgICAgIC8qIHRoaXMgInJp Z2h0LWp1c3RpZmllcyIgdGhlIGRhdGEgaW4gdGhlIGJ1ZmZlciAqLworICAgICAgICAodm9pZCkg bWVtY3B5KGdhcmJhZ2VfYnVmICsgOCAtIGxlbiwgYnVmLCBsZW4pOyAvKiBzYWZlICovCisgICAg ICAgIGNraGV4ZHVtcCgia3JiNF9kZXNfd3JpdGUgZ2FyYmFnZV9idWYiLGdhcmJhZ2VfYnVmLDgp OworICAgIH0gZWxzZQorICAgICAgICBja2hleGR1bXAoImtyYjRfZGVzX3dyaXRlIGJ1ZiIsYnVm LDgpOworI2lmZGVmIENLX0VOQ1JZUFRJT04KKyNpZmRlZiBLUkI1MjQKKyAgICAodm9pZCkgZGVz X3BjYmNfZW5jcnlwdCgobGVuIDwgOCkgPyBnYXJiYWdlX2J1ZiA6IGJ1ZiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZGVzX291dHBrdCs0LAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAobGVuIDwgOCkgPyA4IDogbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBr NF9zY2hlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlZC5zZXNzaW9uLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBFTkNSWVBUKTsKKyNlbHNlIC8qIEtSQjUyNCAqLwor ICAgICh2b2lkKSBkZXNfcGNiY19lbmNyeXB0KChCbG9jayAqKSgobGVuIDwgOCkgPyBnYXJiYWdl X2J1ZiA6IGJ1ZiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCbG9jayAqKShkZXNf b3V0cGt0KzQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGVuIDwgOCkgPyA4IDog bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrNF9zY2hlZCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJmNyZWQuc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgRU5DUllQVCk7CisjZW5kaWYgLyogS1JCNTI0ICovCisjZW5kaWYgLyogRU5DUllQVElP TiAqLworICAgIGlmICggbGVuIDwgOCApCisgICAgICAgIGNraGV4ZHVtcCgia3JiNF9kZXNfd3Jp dGUgKHBvc3QgcGNiYykgZ2FyYmFnZV9idWYiLGdhcmJhZ2VfYnVmLDgpOworICAgIGVsc2UKKyAg ICAgICAgY2toZXhkdW1wKCJrcmI0X2Rlc193cml0ZSAocG9zdCBwY2JjKSBidWYiLGJ1Ziw4KTsK KyAgICBja2hleGR1bXAoImtyYjRfZGVzX3dyaXRlIChkZXNfb3V0cGt0KzQpIiwoZGVzX291dHBr dCs0KSw4KTsKKworICAgIC8qIHRlbGwgdGhlIG90aGVyIGVuZCB0aGUgcmVhbCBhbW91bnQsIGJ1 dCBzZW5kIGFuIDgtYnl0ZSBwYWRkZWQKKyAgICBwYWNrZXQgKi8KKyAgICBsZW5fYnVmWzBdID0g KGxlbiAmIDB4ZmYwMDAwMDApID4+IDI0OworICAgIGxlbl9idWZbMV0gPSAobGVuICYgMHhmZjAw MDApID4+IDE2OworICAgIGxlbl9idWZbMl0gPSAobGVuICYgMHhmZjAwKSA+PiA4OworICAgIGxl bl9idWZbM10gPSAobGVuICYgMHhmZik7CisgICAgY2toZXhkdW1wKCJrcmI0X2Rlc193cml0ZSBk ZXNfb3V0cGt0IGxlbiIsZGVzX291dHBrdCwxMik7CisgICAgY2MgPSBuZXRfd3JpdGUoZmQsIGRl c19vdXRwa3QsIHJvdW5kdXAobGVuLDgpKzQpOworICAgIGRlYnVnKEYxMTEsIm5ldF93cml0ZSIs ImNoYXJzIHdyaXR0ZW4iLGNjKTsKKyAgICByZXR1cm4obGVuKTsKK30KKyNlbmRpZiAvKiBLUkI0 ICovCisjZW5kaWYgLyogUkxPR0NPREUgKi8KKworI2lmZGVmIEtSQjUyNAorI2lmbmRlZiBPUzIK Ky8qIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSBtaXNzaW5nIGZyb20gdGhlIGNvbXBhdGli aWxpdHkgbGlicmFyeSAqLworY29uc3QgY2hhciAqCitrcmJfZ2V0X2Vycl90ZXh0X2VudHJ5KHIp IGludCByOworeworICAgIGV4dGVybiBjaGFyIGtyYl9lcnJfdGV4dFtdOworICAgIHJldHVybihr cmJfZXJyX3R4dFtyXSk7Cit9CisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogS1JCNTI0ICov CisjZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KKworI2lmZGVmIENLX0tFUkJFUk9TCisjaWZkZWYg S1JCNV9VMlUKKy8qIEtlcmJlcm9zIDUgVXNlciB0byBVc2VyIENsaWVudCAqLworaW50CitrNV91 c2VyX3RvX3VzZXJfY2xpZW50X2F1dGgoKQoreworICAgIGV4dGVybiBpbnQgdHR5ZmQ7CisgICAg cmVnaXN0ZXIgaW50IHJldHZhbCwgaTsKKyAgICBjaGFyICoqc3JlYWxtczsgICAgICAgICAgICAg LyogcmVhbG0ocykgb2Ygc2VydmVyICovCisgICAgY2hhciAqcHJpbmM7ICAgICAgICAgICAgICAg IC8qIHByaW5jaXBhbCBpbiBjcmVkZW50aWFscyBjYWNoZSAqLworICAgIGtyYjVfY2NhY2hlIGNj OworICAgIGtyYjVfY3JlZHMgY3JlZHMsICpuZXdfY3JlZHM7CisgICAga3JiNV9kYXRhIHJlcGx5 LCBtc2csIG1zZ3RleHQsIHByaW5jX2RhdGE7CisgICAga3JiNV90aWNrZXQgKiB0aWNrZXQgPSBO VUxMOworCisgICAgaWYgKHJldHZhbCA9IGs1X2dldF9jY2FjaGUoazVfY29udGV4dCwmY2MsTlVM TCkpCisgICAgeworICAgICAgICBjb21fZXJyKCJ1dS1jbGllbnQiLCByZXR2YWwsICJnZXR0aW5n IGNyZWRlbnRpYWxzIGNhY2hlIik7CisgICAgICAgIHJldHVybigtMSk7CisgICAgfQorCisgICAg bWVtc2V0ICgoY2hhciopJmNyZWRzLCAwLCBzaXplb2YoY3JlZHMpKTsKKyAgICBpZiAocmV0dmFs ID0ga3JiNV9jY19nZXRfcHJpbmNpcGFsKGs1X2NvbnRleHQsIGNjLCAmY3JlZHMuY2xpZW50KSkK KyAgICB7CisgICAgICAgIGNvbV9lcnIoInV1LWNsaWVudCIsIHJldHZhbCwgImdldHRpbmcgcHJp bmNpcGFsIG5hbWUiKTsKKyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9CisKKyAgICBpZiAocmV0 dmFsID0ga3JiNV9nZXRfaG9zdF9yZWFsbShrNV9jb250ZXh0LCBzekhvc3ROYW1lLCAmc3JlYWxt cykpCisgICAgeworICAgICAgICBjb21fZXJyKCJ1dS1jbGllbnQiLCByZXR2YWwsICJnZXR0aW5n IHJlYWxtcyBmb3IgXCIlc1wiIiwgc3pIb3N0TmFtZSk7CisgICAgICAgIHJldHVybigtMSk7Cisg ICAgfQorCisgICAgaWYgKHJldHZhbCA9IGtyYjVfYnVpbGRfcHJpbmNpcGFsX2V4dChrNV9jb250 ZXh0LCAmY3JlZHMuc2VydmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAga3JiNV9wcmluY19yZWFsbShrNV9jb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlZHMuY2xpZW50KS0+bGVuZ3Ro LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3JiNV9wcmluY19y ZWFsbShrNV9jb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY3JlZHMuY2xpZW50KS0+ZGF0YSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDYsICJrcmJ0Z3QiLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAga3JiNV9wcmluY19yZWFsbShrNV9jb250ZXh0LAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Jl ZHMuY2xpZW50KS0+bGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAga3JiNV9wcmluY19yZWFsbShrNV9jb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlZHMuY2xpZW50KS0+ZGF0YSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApKQorICAgIHsKKyAg ICAgICAgY29tX2VycigidXUtY2xpZW50IiwgcmV0dmFsLCAic2V0dGluZyB1cCB0Z3Qgc2VydmVy IG5hbWUiKTsKKyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9CisKKyAgICAvKiBHZXQgVEdUIGZy b20gY3JlZGVudGlhbHMgY2FjaGUgKi8KKyAgICBpZiAocmV0dmFsID0ga3JiNV9nZXRfY3JlZGVu dGlhbHMoazVfY29udGV4dCwgS1JCNV9HQ19DQUNIRUQsIGNjLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJmNyZWRzLCAmbmV3X2NyZWRzKSkKKyAgICB7CisgICAgICAg IGNvbV9lcnIoInV1LWNsaWVudCIsIHJldHZhbCwgImdldHRpbmcgVEdUIik7CisgICAgICAgIHJl dHVybigtMSk7CisgICAgfQorCisgICAgaWYgKHJldHZhbCA9IGtyYjVfdW5wYXJzZV9uYW1lKGs1 X2NvbnRleHQsIGNyZWRzLmNsaWVudCwgJnByaW5jKSkgeworICAgICAgICBjb21fZXJyKCJ1dS1j bGllbnQiLCByZXR2YWwsICJwcmludGluZyBwcmluY2lwYWwgbmFtZSIpOworICAgICAgICByZXR1 cm4oLTEpOworICAgIH0KKyAgICBpID0gc3RybGVuKHByaW5jKSArIDE7CisgICAgcHJpbmNfZGF0 YS5kYXRhID0gcHJpbmM7CisgICAgcHJpbmNfZGF0YS5sZW5ndGggPSBpOyAgICAgICAgICAgICAg LyogaW5jbHVkZSBudWxsIHRlcm1pbmF0b3IgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc2VydmVyJ3MgY29udmVuaWVuY2UgKi8KKyAgICByZXR2YWwgPSBr cmI1X3dyaXRlX21lc3NhZ2UoazVfY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKGtyYjVfcG9pbnRlcikgJnR0eWZkLCAmcHJpbmNfZGF0YSk7CisgICAgaWYgKHJldHZh bCkKKyAgICB7CisgICAgICAgIGNvbV9lcnIoInV1LWNsaWVudCIsIHJldHZhbCwgInNlbmRpbmcg cHJpbmNpcGFsIG5hbWUgdG8gc2VydmVyIik7CisgICAgICAgIHJldHVybigtMSk7CisgICAgfQor ICAgIGtyYjVfZnJlZV91bnBhcnNlZF9uYW1lKGs1X2NvbnRleHQscHJpbmMpOworCisgICAgcmV0 dmFsID0ga3JiNV93cml0ZV9tZXNzYWdlKGs1X2NvbnRleHQsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChrcmI1X3BvaW50ZXIpICZ0dHlmZCwgJm5ld19jcmVkcy0+dGlja2V0KTsK KyAgICBpZiAocmV0dmFsKQorICAgIHsKKyAgICAgICAgY29tX2VycigidXUtY2xpZW50IiwgcmV0 dmFsLCAic2VuZGluZyB0aWNrZXQgdG8gc2VydmVyIik7CisgICAgICAgIHJldHVybigtMSk7Cisg ICAgfQorCisgICAgcmV0dmFsID0ga3JiNV9yZWFkX21lc3NhZ2UoazVfY29udGV4dCwgKGtyYjVf cG9pbnRlcikgJnR0eWZkLCAmcmVwbHkpOworICAgIGlmIChyZXR2YWwpCisgICAgeworICAgICAg ICBjb21fZXJyKCJ1dS1jbGllbnQiLCByZXR2YWwsICJyZWFkaW5nIHJlcGx5IGZyb20gc2VydmVy Iik7CisgICAgICAgIHJldHVybigtMSk7CisgICAgfQorCisgICAgaWYgKHJldHZhbCA9IGtyYjVf YXV0aF9jb25faW5pdChrNV9jb250ZXh0LCAmYXV0aF9jb250ZXh0KSkgeworICAgICAgICBjb21f ZXJyKCJ1dS1jbGllbnQiLCByZXR2YWwsICJpbml0aWFsaXppbmcgdGhlIGF1dGhfY29udGV4dCIp OworICAgICAgICByZXR1cm4oLTEpOworICAgIH0KKworICAgIGlmICgha3JiNV9kX25vX2FkZHJl c3NlcykgeworICAgICAgaWYgKHJldHZhbCA9IGtyYjVfYXV0aF9jb25fZ2VuYWRkcnMoazVfY29u dGV4dCwgYXV0aF9jb250ZXh0LCB0dHlmZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIEtSQjVf QVVUSF9DT05URVhUX0dFTkVSQVRFX0xPQ0FMX0ZVTExfQUREUiB8CisgICAgICAgICAgICAgICAg ICAgICAgICBLUkI1X0FVVEhfQ09OVEVYVF9HRU5FUkFURV9SRU1PVEVfRlVMTF9BRERSKSkgewor ICAgICAgICBjb21fZXJyKCJ1dS1jbGllbnQiLCByZXR2YWwsICJnZW5lcmF0aW5nIGFkZHJzIGZv ciBhdXRoX2NvbnRleHQiKTsKKyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgIH0KKyAgICB9CisK KyAgICBpZiAocmV0dmFsID0ga3JiNV9hdXRoX2Nvbl9zZXRmbGFncyhrNV9jb250ZXh0LCBhdXRo X2NvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS1JCNV9B VVRIX0NPTlRFWFRfRE9fU0VRVUVOQ0UpKSB7CisgICAgICAgIGNvbV9lcnIoInV1LWNsaWVudCIs IHJldHZhbCwgImluaXRpYWxpemluZyB0aGUgYXV0aF9jb250ZXh0IGZsYWdzIik7CisgICAgICAg IHJldHVybigtMSk7CisgICAgfQorCisgICAgaWYgKHJldHZhbCA9IGtyYjVfYXV0aF9jb25fc2V0 dXNlcnVzZXJrZXkoazVfY29udGV4dCwgYXV0aF9jb250ZXh0LAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZXdfY3JlZHMtPmtleWJsb2NrKSkgeworICAg ICAgICBjb21fZXJyKCJ1dS1jbGllbnQiLCByZXR2YWwsICJzZXR0aW5nIHVzZXJ1c2Vya2V5IGZv ciBhdXRoY29udGV4dCIpOworICAgICAgICByZXR1cm4oLTEpOworICAgIH0KKworICAgIC8qIHJl YWQgdGhlIGFwX3JlcSB0byBnZXQgdGhlIHNlc3Npb24ga2V5ICovCisgICAgcmV0dmFsID0ga3Ji NV9yZF9yZXEoazVfY29udGV4dCwgJmF1dGhfY29udGV4dCwgJnJlcGx5LAorICAgICAgICAgICAg ICAgICAgICAgICAgICBOVUxMLCBOVUxMLCBOVUxMLCAmdGlja2V0KTsKKyAgICBpZiAocmV0dmFs KSB7CisgICAgICAgIGNvbV9lcnIoInV1LWNsaWVudCIsIHJldHZhbCwgInJlYWRpbmcgQVBfUkVR IGZyb20gc2VydmVyIik7CisgICAgICAgIHJldHVybigtMSk7CisgICAgfQorCisgICAgaWYgKGs1 X3UydV9yZWFkX21zZyhrNV9jb250ZXh0LCZtc2cpIDwgMCkKKyAgICAgICAgcmV0dXJuKC0xKTsK KworICAgIGlmICggc3RyY21wKCJLZXJtaXQgaW1wbGVtZW50cyBLZXJiZXJvcyA1IFVzZXIgdG8g VXNlciIsbXNnLmRhdGEpICkKKyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICBrcmI1X2ZyZWVfZGF0 YV9jb250ZW50cyhrNV9jb250ZXh0LCZtc2cpOworCisgICAgbXNndGV4dC5kYXRhID0gIkFzIGRv IEkhIDotKSI7CisgICAgbXNndGV4dC5sZW5ndGggPSBzdHJsZW4obXNndGV4dC5kYXRhKSsxOwor CisgICAgaWYgKGs1X3UydV93cml0ZV9tc2coazVfY29udGV4dCwmbXNndGV4dCkgPCAwKQorICAg ICAgICByZXR1cm4oLTEpOworCisgICAgaWYgKHJldHZhbCA9IGtyYjVfdW5wYXJzZV9uYW1lKGs1 X2NvbnRleHQsCisjaWZkZWYgSEVJTURBTAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdGlja2V0LT5jbGllbnQsCisjZWxzZSAvKiBIRUlNREFMICovCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB0aWNrZXQtPmVuY19wYXJ0Mi0+Y2xpZW50LAorI2VuZGlm IC8qIEhFSU1EQUwgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcmlu YykpCisgICAgICAgIGNvbV9lcnIoInV1LWNsaWVudCIsIHJldHZhbCwgIndoaWxlIHVucGFyc2lu ZyBjbGllbnQgbmFtZSIpOworICAgIGVsc2UgeworICAgICAgICBja3N0cm5jcHkoc3pVc2VyTmFt ZUF1dGhlbnRpY2F0ZWQscHJpbmMsVUlEQlVGTEVOKTsKKyAgICAgICAgdmFsaWRVc2VyID0gQVVU SF9WQUxJRDsKKyAgICAgICAgYXV0aGVudGljYXRpb25fdmVyc2lvbiA9IEFVVEhUWVBFX0tFUkJF Uk9TX1Y1OworICAgICAgICBpZiAoICFxdWlldCApCisgICAgICAgICAgICBwcmludGYoIlBlZXIg bmFtZSBpcyBcIiVzXCJcbiIsIHByaW5jKTsKKyAgICAgICAga3JiNV9mcmVlX3VucGFyc2VkX25h bWUoazVfY29udGV4dCxwcmluYyk7CisgICAgfQorICAgIHJldHVybiAwOworfQorCisvKiBLZXJi ZXJvcyA1IFVzZXIgdG8gVXNlciBTZXJ2ZXIgKi8KKworaW50CitrNV91c2VyX3RvX3VzZXJfc2Vy dmVyX2F1dGgoKQoreworICAgIGtyYjVfZGF0YSBwbmFtZV9kYXRhLCB0a3RfZGF0YTsKKyAgICBp bnQgcmV0dmFsOworICAgIGtyYjVfY3JlZHMgY3JlZHMsICpuZXdfY3JlZHM7CisgICAga3JiNV9j Y2FjaGUgY2M7CisgICAga3JiNV9kYXRhIG1zZywgbXNndGV4dDsKKyAgICBleHRlcm4gaW50IHR0 eWZkOworCisgICAgaWYgKHJldHZhbCA9IGtyYjVfcmVhZF9tZXNzYWdlKGs1X2NvbnRleHQsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrcmI1X3BvaW50ZXIpICZ0dHlmZCwg JnBuYW1lX2RhdGEpKSB7CisgICAgICAgIGNvbV9lcnIgKCJ1dS1zZXJ2ZXIiLCByZXR2YWwsICJy ZWFkaW5nIHBuYW1lIik7CisgICAgICAgIHJldHVybigtMSk7CisgICAgfQorICAgIC8qIGNsaWVu dCBzZW5kcyBpdCBhbHJlYWR5IG51bGwtdGVybWluYXRlZC4gKi8KKyAgICBpZiAoICFxdWlldCAp CisgICAgICAgIHByaW50ZiAoIlBlZXIgbmFtZSBpcyBcIiVzXCIuXG4iLCBwbmFtZV9kYXRhLmRh dGEpOworICAgIGNrc3RybmNweShzelVzZXJOYW1lQXV0aGVudGljYXRlZCxwbmFtZV9kYXRhLmRh dGEsVUlEQlVGTEVOKTsKKyAgICB2YWxpZFVzZXIgPSBBVVRIX1ZBTElEOworICAgIGF1dGhlbnRp Y2F0aW9uX3ZlcnNpb24gPSBBVVRIVFlQRV9LRVJCRVJPU19WNTsKKworICAgIGlmIChyZXR2YWwg PSBrcmI1X3JlYWRfbWVzc2FnZShrNV9jb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoa3JiNV9wb2ludGVyKSAmdHR5ZmQsICZ0a3RfZGF0YSkpIHsKKyAgICAgICAg Y29tX2VyciAoInV1LXNlcnZlciIsIHJldHZhbCwgInJlYWRpbmcgdGlja2V0IGRhdGEiKTsKKyAg ICAgICAgcmV0dXJuKC0xKTsKKyAgICB9CisKKyAgICBpZiAocmV0dmFsID0gazVfZ2V0X2NjYWNo ZShrNV9jb250ZXh0LCZjYyxOVUxMKSkKKyAgICB7CisgICAgICAgIGNvbV9lcnIoInV1LXNlcnZl ciIsIHJldHZhbCwgImdldHRpbmcgY3JlZGVudGlhbHMgY2FjaGUiKTsKKyAgICAgICAgcmV0dXJu KC0xKTsKKyAgICB9CisKKyAgICBtZW1zZXQgKChjaGFyKikmY3JlZHMsIDAsIHNpemVvZihjcmVk cykpOworICAgIGlmIChyZXR2YWwgPSBrcmI1X2NjX2dldF9wcmluY2lwYWwoazVfY29udGV4dCwg Y2MsICZjcmVkcy5jbGllbnQpKQorICAgIHsKKyAgICAgICAgY29tX2VycigidXUtc2VydmVyIiwg cmV0dmFsLCAiZ2V0dGluZyBwcmluY2lwYWwgbmFtZSIpOworICAgICAgICByZXR1cm4oLTEpOwor ICAgIH0KKworICAgIGlmIChyZXR2YWwgPSBrcmI1X3BhcnNlX25hbWUoazVfY29udGV4dCwgcG5h bWVfZGF0YS5kYXRhLCAmY3JlZHMuc2VydmVyKSkKKyAgICB7CisgICAgICAgIGNvbV9lcnIoInV1 LXNlcnZlciIsIHJldHZhbCwgInBhcnNpbmcgY2xpZW50IG5hbWUiKTsKKyAgICAgICAgcmV0dXJu KC0xKTsKKyAgICB9CisgICAgY3JlZHMuc2Vjb25kX3RpY2tldCA9IHRrdF9kYXRhOworCisgICAg aWYgKHJldHZhbCA9IGtyYjVfZ2V0X2NyZWRlbnRpYWxzKGs1X2NvbnRleHQsIEtSQjVfR0NfVVNF Ul9VU0VSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2MsICZjcmVk cywgJm5ld19jcmVkcykpCisgICAgeworICAgICAgICBjb21fZXJyKCJ1dS1zZXJ2ZXIiLCByZXR2 YWwsICJnZXR0aW5nIHVzZXItdXNlciB0aWNrZXQiKTsKKyAgICAgICAgcmV0dXJuKC0xKTsKKyAg ICB9CisKKyAgICAvKiBzZW5kIGEgdGlja2V0L2F1dGhlbnRpY2F0b3IgdG8gdGhlIG90aGVyIHNp ZGUsIHNvIGl0IGNhbiBnZXQgdGhlIGtleQorICAgICAgIHdlJ3JlIHVzaW5nIGZvciB0aGUga3Ji X3NhZmUgYmVsb3cuICovCisKKyAgICBpZiAocmV0dmFsID0ga3JiNV9hdXRoX2Nvbl9pbml0KGs1 X2NvbnRleHQsICZhdXRoX2NvbnRleHQpKSB7CisgICAgICAgIGNvbV9lcnIoInV1LXNlcnZlciIs IHJldHZhbCwgIm1ha2luZyBhdXRoX2NvbnRleHQiKTsKKyAgICAgICAgcmV0dXJuKC0xKTsKKyAg ICB9CisKKyAgICBpZiAocmV0dmFsID0ga3JiNV9hdXRoX2Nvbl9zZXRmbGFncyhrNV9jb250ZXh0 LCBhdXRoX2NvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEtSQjVfQVVUSF9DT05URVhUX0RPX1NFUVVFTkNFKSkgeworICAgICAgICBjb21fZXJyKCJ1dS1z ZXJ2ZXIiLCByZXR2YWwsICJpbml0aWFsaXppbmcgdGhlIGF1dGhfY29udGV4dCBmbGFncyIpOwor ICAgICAgICByZXR1cm4oLTEpOworICAgIH0KKworICAgIGlmICgha3JiNV9kX25vX2FkZHJlc3Nl cykgeworICAgICAgaWYgKHJldHZhbCA9IGtyYjVfYXV0aF9jb25fZ2VuYWRkcnMoazVfY29udGV4 dCwgYXV0aF9jb250ZXh0LCB0dHlmZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg S1JCNV9BVVRIX0NPTlRFWFRfR0VORVJBVEVfTE9DQUxfRlVMTF9BRERSIHwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgS1JCNV9BVVRIX0NPTlRFWFRfR0VORVJBVEVfUkVNT1RFX0ZV TExfQUREUikpIHsKKyAgICAgICAgY29tX2VycigidXUtc2VydmVyIiwgcmV0dmFsLCAiZ2VuZXJh dGluZyBhZGRycyBmb3IgYXV0aF9jb250ZXh0Iik7CisgICAgICAgIHJldHVybigtMSk7CisgICAg ICB9CisgICAgfQorCisgICAgaWYgKHJldHZhbCA9IGtyYjVfYXV0aF9jb25fc2V0dXNlcnVzZXJr ZXkoazVfY29udGV4dCwgYXV0aF9jb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICZuZXdfY3JlZHMtPmtleWJsb2NrKSkgeworICAgICAgICBjb21f ZXJyKCJ1dS1zZXJ2ZXIiLCByZXR2YWwsICJzZXR0aW5nIHVzZXJ1c2Vya2V5IGZvciBhdXRoY29u dGV4dCIpOworICAgICAgICByZXR1cm4oLTEpOworICAgIH0KKworICAgIGlmIChyZXR2YWwgPSBr cmI1X21rX3JlcV9leHRlbmRlZChrNV9jb250ZXh0LCAmYXV0aF9jb250ZXh0LAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBUF9PUFRTX1VTRV9TRVNTSU9OX0tFWSB8Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFQX09QVFNfTVVUVUFMX1JFUVVJ UkVELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBuZXdfY3Jl ZHMsICZtc2cpKSB7CisgICAgICAgIGNvbV9lcnIoInV1LXNlcnZlciIsIHJldHZhbCwgIm1ha2lu ZyBBUF9SRVEiKTsKKyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9CisgICAgcmV0dmFsID0ga3Ji NV93cml0ZV9tZXNzYWdlKGs1X2NvbnRleHQsIChrcmI1X3BvaW50ZXIpICZ0dHlmZCwgJm1zZyk7 CisgICAgaWYgKHJldHZhbCkgeworICAgICAgICBjb21fZXJyKCJ1dS1zZXJ2ZXIiLCByZXR2YWws ICJ3cml0aW5nIG1lc3NhZ2UgdG8gY2xpZW50Iik7CisgICAgICAgIHJldHVybigtMSk7CisgICAg fQorICAgIGtyYjVfZnJlZV9kYXRhX2NvbnRlbnRzKGs1X2NvbnRleHQsJm1zZyk7CisKKyAgICBt c2d0ZXh0LmRhdGEgPSAiS2VybWl0IGltcGxlbWVudHMgS2VyYmVyb3MgNSBVc2VyIHRvIFVzZXIi OworICAgIG1zZ3RleHQubGVuZ3RoID0gc3RybGVuKG1zZ3RleHQuZGF0YSkrMTsKKworICAgIGlm IChrNV91MnVfd3JpdGVfbXNnKGs1X2NvbnRleHQsJm1zZ3RleHQpIDwgMCkKKyAgICAgICAgcmV0 dXJuKC0xKTsKKworICAgIGlmIChrNV91MnVfcmVhZF9tc2coazVfY29udGV4dCwmbXNnKSA8IDAp CisgICAgICAgIHJldHVybigtMSk7CisKKyAgICBpZiAoIHN0cmNtcCgiQXMgZG8gSSEgOi0pIixt c2cuZGF0YSkgKQorICAgICAgICByZXR1cm4oLTEpOworICAgIGtyYjVfZnJlZV9kYXRhX2NvbnRl bnRzKGs1X2NvbnRleHQsJm1zZyk7CisKKworICAgIHJldHVybigwKTsKK30KKworaW50CitrNV91 MnVfcmVhZF9tc2coa3JiNV9jb250ZXh0IGNvbnRleHQsIGludCBmZCwga3JiNV9kYXRhICogbXNn KQoreworICAgIGludCByZXR2YWw7CisgICAga3JiNV9kYXRhIHJlcGx5OworCisgICAgcmV0dmFs ID0ga3JiNV9yZWFkX21lc3NhZ2UoY29udGV4dCwgKGtyYjVfcG9pbnRlcikgJmZkLCAmcmVwbHkp OworICAgIGlmIChyZXR2YWwpCisgICAgeworICAgICAgICBjb21fZXJyKCJ1dS1jbGllbnQiLCBy ZXR2YWwsICJyZWFkaW5nIHJlcGx5Iik7CisgICAgICAgIHJldHVybigtMSk7CisgICAgfQorCisg ICAgaWYgKHJldHZhbCA9IGtyYjVfcmRfcHJpdihjb250ZXh0LCBhdXRoX2NvbnRleHQsICZyZXBs eSwgbXNnLCBOVUxMKSkgeworICAgICAgICBjb21fZXJyKCJ1dS1jbGllbnQiLCByZXR2YWwsICJk ZWNvZGluZyByZXBseSIpOworICAgICAgICByZXR1cm4oLTEpOworICAgIH0KKyAgICByZXR1cm4o MCk7Cit9CisKK2ludAorazVfdTJ1X3dyaXRlX21zZyhrcmI1X2NvbnRleHQgY29udGV4dCwgaW50 IGZkLCBrcmI1X2RhdGEgKiBtc2d0ZXh0KQoreworICAgIGludCByZXR2YWw7CisgICAga3JiNV9k YXRhIG1zZzsKKworICAgIGlmIChyZXR2YWwgPSBrcmI1X21rX3ByaXYoazVfY29udGV4dCwgYXV0 aF9jb250ZXh0LCBtc2d0ZXh0LCAmbXNnLCBOVUxMKSkKKyAgICB7CisgICAgICAgIGNvbV9lcnIo InV1LXNlcnZlciIsIHJldHZhbCwgImVuY29kaW5nIG1lc3NhZ2UiKTsKKyAgICAgICAgcmV0dXJu KC0xKTsKKyAgICB9CisKKyAgICByZXR2YWwgPSBrcmI1X3dyaXRlX21lc3NhZ2UoazVfY29udGV4 dCwgKGtyYjVfcG9pbnRlcikgJmZkLCAmbXNnKTsKKyAgICBrcmI1X2ZyZWVfZGF0YV9jb250ZW50 cyhrNV9jb250ZXh0LCZtc2cpOworICAgIGlmIChyZXR2YWwpCisgICAgeworICAgICAgICBjb21f ZXJyKCJ1dS1zZXJ2ZXIiLCByZXR2YWwsICJ3cml0aW5nIG1lc3NhZ2UiKTsKKyAgICAgICAgcmV0 dXJuKC0xKTsKKyAgICB9CisgICAgcmV0dXJuKDApOworfQorCitpbnQKK2tyYjVfdTJ1X2F2YWls KGZkKQorICAgIGludCBmZDsKK3sKKyAgICByZXR1cm4obnN0b3JlZCk7Cit9CisKK2ludAora3Ji NV91MnVfcmVhZChmZCwgYnVmLCBsZW4pCisgICAgIGludCBmZDsKKyAgICAgcmVnaXN0ZXIgY2hh ciAqYnVmOworICAgICBpbnQgbGVuOworeworICAgIGludCBucmV0dXJuZWQgPSAwOworICAgIGty YjVfZGF0YSBtc2c7CisKKyAgICBkZWJ1ZyhGMTExLCJrcmI1X3UydV9yZWFkIiwibGVuIixsZW4p OworCisgICAgaWYgKCAhYnVmICkKKyAgICAgICAgcmV0dXJuKDApOworCisgICAgaWYgKG5zdG9y ZWQgPj0gbGVuKSB7CisgICAgICAgIG1lbWNweShidWYsIHN0b3JlX3B0ciwgbGVuKTsgICAgICAg IC8qIHNhZmUgKi8KKyAgICAgICAgc3RvcmVfcHRyICs9IGxlbjsKKyAgICAgICAgbnN0b3JlZCAt PSBsZW47CisgICAgICAgIHJldHVybihsZW4pOworICAgIH0gZWxzZSBpZiAobnN0b3JlZCkgewor ICAgICAgICBtZW1jcHkoYnVmLCBzdG9yZV9wdHIsIG5zdG9yZWQpOyAgICAvKiBzYWZlICovCisg ICAgICAgIG5yZXR1cm5lZCArPSBuc3RvcmVkOworICAgICAgICBidWYgKz0gbnN0b3JlZDsKKyAg ICAgICAgbGVuIC09IG5zdG9yZWQ7CisgICAgICAgIG5zdG9yZWQgPSAwOworICAgIH0KKworICAg IGlmIChrNV91MnVfcmVhZF9tc2coazVfY29udGV4dCwgZmQsICZtc2cpIDwgMCkKKyAgICAgICAg cmV0dXJuKC0xKTsKKworICAgIGlmICggbXNnLmxlbmd0aCA8PSBsZW4gKSB7CisgICAgICAgIG1l bWNweShidWYsIG1zZy5kYXRhLCBtc2cubGVuZ3RoKTsKKyAgICAgICAgbnJldHVybmVkICs9IG1z Zy5sZW5ndGg7CisgICAgICAgIG5zdG9yZWQgPSAwOworICAgIH0gZWxzZSB7CisgICAgICAgIG1l bWNweShidWYsIG1zZy5kYXRhLCBsZW4pOworICAgICAgICBucmV0dXJuZWQgKz0gbGVuOworCisg ICAgICAgIGlmICggbXNnLmxlbmd0aCAtIGxlbiA8IHNpemVvZihzdG9yYWdlKSApIHsKKyAgICAg ICAgICAgIHN0b3JlX3B0ciA9IHN0b3JhZ2U7CisgICAgICAgICAgICBuc3RvcmVkID0gbXNnLmxl bmd0aCAtIGxlbjsKKyAgICAgICAgICAgIG1lbWNweShzdG9yYWdlLG1zZy5kYXRhK2xlbixuc3Rv cmVkKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG5zdG9yZWQgPSAwOworICAgICAg ICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4obnJldHVybmVk KTsKK30KKworaW50CitrcmI1X3UydV93cml0ZShmZCwgYnVmLCBsZW4pCisgICAgIGludCBmZDsK KyAgICAgY2hhciAqYnVmOworICAgICBpbnQgbGVuOworeworICAgIGtyYjVfZGF0YSBtc2c7CisK KyAgICBtc2cubGVuZ3RoID0gbGVuOworICAgIG1zZy5kYXRhID0gYnVmOworCisgICAgaWYgKCBr NV91MnVfd3JpdGVfbXNnKGs1X2NvbnRleHQsIGZkLCAmbXNnKSA8IDAgKQorICAgICAgICByZXR1 cm4oLTEpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuKGxlbik7Cit9CisKKyNlbmRpZiAvKiBL UkI1X1UyVSAqLworI2VuZGlmIC8qIENLX0tFUkJFUk9TICovCisKKyNpZmRlZiBDS19GT1JXQVJE X1gKKy8qCisKK0NvcHlyaWdodCAoYykgMTk4OCAgWCBDb25zb3J0aXVtCisKK1Blcm1pc3Npb24g aXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmlu ZyBhIGNvcHkKK29mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBm aWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCitpbiB0aGUgU29mdHdhcmUgd2l0aG91dCBy ZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCit0byB1 c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2Us IGFuZC9vciBzZWxsCitjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNv bnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKK2Z1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0 byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNl IGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCithbGwgY29w aWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworVEhFIFNPRlRX QVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVY UFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJB TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorWCBDT05TT1JU SVVNIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwg V0hFVEhFUiBJTgorQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJ U0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KK0NPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1Ig VEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisKK0V4Y2VwdCBhcyBj b250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lIG9mIHRoZSBYIENvbnNvcnRpdW0gc2hh bGwgbm90IGJlCit1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRo ZSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MKK2luIHRoaXMgU29mdHdhcmUgd2l0aG91dCBw cmlvciB3cml0dGVuIGF1dGhvcml6YXRpb24gZnJvbSB0aGUgWCBDb25zb3J0aXVtLgorCisqLwor LyogIE1vZGlmaWVkIGZvciBzdGFuZC1hbG9uZSBjb21waWxpbmcgYnkKKyAqICBQZXRlciAnTHVu YScgUnVuZXN0aWcgPHBldGVyQHJ1bmVzdGlnLmNvbT4KKyAqLworCisjaW5jbHVkZSA8c3RkbGli Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxz eXMvc3RhdC5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNkZWZpbmUgVGltZV90IHRpbWVfdAorCit2 b2lkCitYYXVEaXNwb3NlQXV0aCAoYXV0aCkKK1hhdXRoICAgKmF1dGg7Cit7CisgICAgaWYgKGF1 dGgpIHsKKyAgICAgICAgaWYgKGF1dGgtPmFkZHJlc3MpICh2b2lkKSBmcmVlIChhdXRoLT5hZGRy ZXNzKTsKKyAgICAgICAgaWYgKGF1dGgtPm51bWJlcikgKHZvaWQpIGZyZWUgKGF1dGgtPm51bWJl cik7CisgICAgICAgIGlmIChhdXRoLT5uYW1lKSAodm9pZCkgZnJlZSAoYXV0aC0+bmFtZSk7Cisg ICAgICAgIGlmIChhdXRoLT5kYXRhKSB7CisgICAgICAgICAgICAodm9pZCkgYnplcm8gKGF1dGgt PmRhdGEsIGF1dGgtPmRhdGFfbGVuZ3RoKTsKKyAgICAgICAgICAgICh2b2lkKSBmcmVlIChhdXRo LT5kYXRhKTsKKyAgICAgICAgfQorICAgICAgICBmcmVlICgoY2hhciAqKSBhdXRoKTsKKyAgICB9 CisgICAgcmV0dXJuOworfQorCitjaGFyICoKK1hhdUZpbGVOYW1lICgpCit7CisgICAgY2hhciAq c2xhc2hEb3RYYXV0aG9yaXR5ID0gIi8uWGF1dGhvcml0eSI7CisgICAgY2hhciAgICAqbmFtZTsK KyAgICBzdGF0aWMgY2hhciAqYnVmPU5VTEw7CisgICAgc3RhdGljIGludCAgYnNpemU9MDsKKyAg ICBpbnQgICAgIHNpemUsIG5hbWVsZW47CisgICAgZXh0ZXJuIGNoYXIgKiB0bl9md2R4X3hhdXRo b3JpdHk7CisKKyAgICBpZiAoIHRuX2Z3ZHhfeGF1dGhvcml0eSApCisgICAgICAgIHJldHVybih0 bl9md2R4X3hhdXRob3JpdHkpOworCisgICAgaWYgKG5hbWUgPSBnZXRlbnYgKCJYQVVUSE9SSVRZ IikpCisgICAgICAgIHJldHVybihuYW1lKTsKKyAgICBuYW1lID0gemhvbWUoKTsKKyAgICBpZiAo ICFuYW1lICkKKyAgICAgICAgcmV0dXJuKE5VTEwpOworICAgIG5hbWVsZW4gPSBzdHJsZW4gKG5h bWUpOworICAgIHNpemUgPSBuYW1lbGVuICsgc3RybGVuKHNsYXNoRG90WGF1dGhvcml0eSkgKyAx OworICAgIGlmIChzaXplID4gYnNpemUpIHsKKyAgICAgICAgaWYgKGJ1ZikKKyAgICAgICAgICAg IGZyZWUgKGJ1Zik7CisgICAgICAgIGJ1ZiA9IG1hbGxvYyAoKHVuc2lnbmVkKSBzaXplKTsKKyAg ICAgICAgaWYgKCFidWYpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgYnNpemUgPSBz aXplOworICAgIH0KKyAgICBja3N0cm5jcHkgKGJ1ZiwgbmFtZSwgYnNpemUpOworICAgIGlmICgg bmFtZVtuYW1lbGVuLTFdICE9ICcvJworI2lmZGVmIE9TMgorICAgICAgICAgJiYgbmFtZVtuYW1l bGVuLTFdICE9ICdcXCcKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAgICkKKyAgICAgICAgY2tz dHJuY2F0IChidWYsIHNsYXNoRG90WGF1dGhvcml0eSwgYnNpemUpOworICAgIGVsc2UKKyAgICAg ICAgY2tzdHJuY2F0IChidWYsICZzbGFzaERvdFhhdXRob3JpdHlbMV0sIGJzaXplKTsKKyAgICBy ZXR1cm4oYnVmKTsKK30KKworc3RhdGljIGludAorYmluYXJ5RXF1YWwgKGEsIGIsIGxlbikKK3Jl Z2lzdGVyIGNoYXIgICAqYSwgKmI7CityZWdpc3RlciBpbnQgICAgbGVuOworeworICAgIHdoaWxl IChsZW4tLSkKKyAgICAgICAgaWYgKCphKysgIT0gKmIrKykKKyAgICAgICAgICAgIHJldHVybiAw OworICAgIHJldHVybiAxOworfQorCisjaWZuZGVmIFJfT0sKKyNkZWZpbmUgUl9PSyAwNAorI2Vu ZGlmIC8qIFJfT0sgKi8KKworWGF1dGggKgorWGF1R2V0QXV0aEJ5QWRkciAoZmFtaWx5LCBhZGRy ZXNzX2xlbmd0aCwgYWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyX2xl bmd0aCwgbnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lX2xlbmd0aCwgbmFt ZSkKK3Vuc2lnbmVkIGludCAgICBmYW1pbHk7Cit1bnNpZ25lZCBpbnQgICAgYWRkcmVzc19sZW5n dGg7Citjb25zdCBjaGFyICAgICAgKmFkZHJlc3M7Cit1bnNpZ25lZCBpbnQgICAgbnVtYmVyX2xl bmd0aDsKK2NvbnN0IGNoYXIgICAgICAqbnVtYmVyOwordW5zaWduZWQgaW50ICAgIG5hbWVfbGVu Z3RoOworY29uc3QgY2hhciAgICAgICpuYW1lOworeworICAgIEZJTEUgICAgKmF1dGhfZmlsZTsK KyAgICBjaGFyICAgICphdXRoX25hbWU7CisgICAgWGF1dGggICAqZW50cnk7CisKKyAgICBhdXRo X25hbWUgPSBYYXVGaWxlTmFtZSgpOworICAgIGlmICghYXV0aF9uYW1lKQorICAgICAgICByZXR1 cm4gMDsKKyAgICBpZiAoYWNjZXNzIChhdXRoX25hbWUsIFJfT0spICE9IDApICAgICAgICAgIC8q IGNoZWNrcyBSRUFMIGlkICovCisgICAgICAgIHJldHVybiAwOworICAgIGF1dGhfZmlsZSA9IGZv cGVuIChhdXRoX25hbWUsICJyYiIpOworICAgIGlmICghYXV0aF9maWxlKQorICAgICAgICByZXR1 cm4gMDsKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIGVudHJ5ID0gWGF1UmVhZEF1dGggKGF1dGhf ZmlsZSk7CisgICAgICAgIGlmICghZW50cnkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg LyoKKyAgICAgICAgICogTWF0Y2ggd2hlbjoKKyAgICAgICAgICogICBlaXRoZXIgZmFtaWx5IG9y IGVudHJ5LT5mYW1pbHkgYXJlIEZhbWlseVdpbGQgb3IKKyAgICAgICAgICogICAgZmFtaWx5IGFu ZCBlbnRyeS0+ZmFtaWx5IGFyZSB0aGUgc2FtZQorICAgICAgICAgKiAgYW5kCisgICAgICAgICAq ICAgZWl0aGVyIGFkZHJlc3Mgb3IgZW50cnktPmFkZHJlc3MgYXJlIGVtcHR5IG9yCisgICAgICAg ICAqICAgIGFkZHJlc3MgYW5kIGVudHJ5LT5hZGRyZXNzIGFyZSB0aGUgc2FtZQorICAgICAgICAg KiAgYW5kCisgICAgICAgICAqICAgZWl0aGVyIG51bWJlciBvciBlbnRyeS0+bnVtYmVyIGFyZSBl bXB0eSBvcgorICAgICAgICAgKiAgICBudW1iZXIgYW5kIGVudHJ5LT5udW1iZXIgYXJlIHRoZSBz YW1lCisgICAgICAgICAqICBhbmQKKyAgICAgICAgICogICBlaXRoZXIgbmFtZSBvciBlbnRyeS0+ bmFtZSBhcmUgZW1wdHkgb3IKKyAgICAgICAgICogICAgbmFtZSBhbmQgZW50cnktPm5hbWUgYXJl IHRoZSBzYW1lCisgICAgICAgICAqLworCisvKiAgICAgIGlmICgoZmFtaWx5ID09IEZhbWlseVdp bGQgfHwgZW50cnktPmZhbWlseSA9PSBGYW1pbHlXaWxkIHx8CisgICAgICAgICAgICAgKGVudHJ5 LT5mYW1pbHkgPT0gZmFtaWx5ICYmCisgICAgICAgICAgICAgIGFkZHJlc3NfbGVuZ3RoID09IGVu dHJ5LT5hZGRyZXNzX2xlbmd0aCAmJgorICAgICAgICAgICAgICBiaW5hcnlFcXVhbCAoZW50cnkt PmFkZHJlc3MsIGFkZHJlc3MsIChpbnQpYWRkcmVzc19sZW5ndGgpKSkgJiYKKyAgICAgICAgICAg IChudW1iZXJfbGVuZ3RoID09IDAgfHwgZW50cnktPm51bWJlcl9sZW5ndGggPT0gMCB8fAorICAg ICAgICAgICAgIChudW1iZXJfbGVuZ3RoID09IGVudHJ5LT5udW1iZXJfbGVuZ3RoICYmCisgICAg ICAgICAgICAgIGJpbmFyeUVxdWFsIChlbnRyeS0+bnVtYmVyLCBudW1iZXIsIChpbnQpbnVtYmVy X2xlbmd0aCkpKSAmJgorICAgICAgICAgICAgKG5hbWVfbGVuZ3RoID09IDAgfHwgZW50cnktPm5h bWVfbGVuZ3RoID09IDAgfHwKKyAgICAgICAgICAgICAoZW50cnktPm5hbWVfbGVuZ3RoID09IG5h bWVfbGVuZ3RoICYmCisgICAgICAgICAgICAgIGJpbmFyeUVxdWFsIChlbnRyeS0+bmFtZSwgbmFt ZSwgKGludCluYW1lX2xlbmd0aCkpKSkgKi8KKyAgICAgICAgLyogdGhlIG9yaWdpbmFsIG1hdGNo aW5nIGNvZGUgYWJvdmUgZG9lc24ndCBzZWVtIHRvIG1lZXQgdGhlIG1hdGNoaW5nCisgICAgICAg ICAqIGFsZ29yaXRobSwgaXQgZG9lc24ndCBjaGVjayBpZiAiYWRkcmVzc19sZW5ndGggPT0gMCB8 fAorICAgICAgICAgKiBlbnRyeS0+YWRkcmVzc19sZW5ndGggPT0gMCIuIC8gTHVuYSAyMDAwLTAy LTA5CisgICAgICAgICAqLworICAgICAgICBpZiAoKGZhbWlseSA9PSBGYW1pbHlXaWxkIHx8IGVu dHJ5LT5mYW1pbHkgPT0gRmFtaWx5V2lsZCB8fAorICAgICAgICAgICAgICBlbnRyeS0+ZmFtaWx5 ID09IGZhbWlseSkgJiYKKyAgICAgICAgICAgIChhZGRyZXNzX2xlbmd0aCA9PSAwIHx8IGVudHJ5 LT5hZGRyZXNzX2xlbmd0aCA9PSAwIHx8CisgICAgICAgICAgICAgIChhZGRyZXNzX2xlbmd0aCA9 PSBlbnRyeS0+YWRkcmVzc19sZW5ndGggJiYKKyAgICAgICAgICAgICAgYmluYXJ5RXF1YWwgKGVu dHJ5LT5hZGRyZXNzLCBhZGRyZXNzLCAoaW50KWFkZHJlc3NfbGVuZ3RoKSkpICYmCisgICAgICAg ICAgICAobnVtYmVyX2xlbmd0aCA9PSAwIHx8IGVudHJ5LT5udW1iZXJfbGVuZ3RoID09IDAgfHwK KyAgICAgICAgICAgICAobnVtYmVyX2xlbmd0aCA9PSBlbnRyeS0+bnVtYmVyX2xlbmd0aCAmJgor ICAgICAgICAgICAgICBiaW5hcnlFcXVhbCAoZW50cnktPm51bWJlciwgbnVtYmVyLCAoaW50KW51 bWJlcl9sZW5ndGgpKSkgJiYKKyAgICAgICAgICAgIChuYW1lX2xlbmd0aCA9PSAwIHx8IGVudHJ5 LT5uYW1lX2xlbmd0aCA9PSAwIHx8CisgICAgICAgICAgICAgKGVudHJ5LT5uYW1lX2xlbmd0aCA9 PSBuYW1lX2xlbmd0aCAmJgorICAgICAgICAgICAgICBiaW5hcnlFcXVhbCAoZW50cnktPm5hbWUs IG5hbWUsIChpbnQpbmFtZV9sZW5ndGgpKSkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg WGF1RGlzcG9zZUF1dGggKGVudHJ5KTsKKyAgICB9CisgICAgKHZvaWQpIGZjbG9zZSAoYXV0aF9m aWxlKTsKKyAgICByZXR1cm4gZW50cnk7Cit9CisKK3N0YXRpYyBpbnQKK3JlYWRfc2hvcnQgKHNo b3J0cCwgZmlsZSkKK3Vuc2lnbmVkIHNob3J0ICAqc2hvcnRwOworRklMRSAgICAgICAgICAgICpm aWxlOworeworICAgIHVuc2lnbmVkIGNoYXIgICBmaWxlX3Nob3J0WzJdOworCisgICAgaWYgKGZy ZWFkICgoY2hhciAqKSBmaWxlX3Nob3J0LCAoaW50KSBzaXplb2YgKGZpbGVfc2hvcnQpLCAxLCBm aWxlKSAhPSAxKQorICAgICAgICByZXR1cm4gMDsKKyAgICAqc2hvcnRwID0gZmlsZV9zaG9ydFsw XSAqIDI1NiArIGZpbGVfc2hvcnRbMV07CisgICAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQK K3JlYWRfY291bnRlZF9zdHJpbmcgKGNvdW50cCwgc3RyaW5ncCwgZmlsZSkKK3Vuc2lnbmVkIHNo b3J0ICAqY291bnRwOworY2hhciAgICAqKnN0cmluZ3A7CitGSUxFICAgICpmaWxlOworeworICAg IHVuc2lnbmVkIHNob3J0ICBsZW47CisgICAgY2hhciAgICAgICAgICAgICpkYXRhOworCisgICAg aWYgKHJlYWRfc2hvcnQgKCZsZW4sIGZpbGUpID09IDApCisgICAgICAgIHJldHVybiAwOworICAg IGlmIChsZW4gPT0gMCkgeworICAgICAgICBkYXRhID0gMDsKKyAgICB9IGVsc2UgeworICAgICAg ICBkYXRhID0gbWFsbG9jICgodW5zaWduZWQpIGxlbik7CisgICAgICAgIGlmICghZGF0YSkKKyAg ICAgICAgICAgIHJldHVybiAwOworICAgICAgICBpZiAoZnJlYWQgKGRhdGEsIChpbnQpIHNpemVv ZiAoY2hhciksIChpbnQpIGxlbiwgZmlsZSkgIT0gbGVuKSB7CisgICAgICAgICAgICBiemVybyAo ZGF0YSwgbGVuKTsKKyAgICAgICAgICAgIGZyZWUgKGRhdGEpOworICAgICAgICAgICAgcmV0dXJu IDA7CisgICAgICAgIH0KKyAgICB9CisgICAgKnN0cmluZ3AgPSBkYXRhOworICAgICpjb3VudHAg PSBsZW47CisgICAgcmV0dXJuIDE7Cit9CisKK1hhdXRoICoKK1hhdVJlYWRBdXRoIChhdXRoX2Zp bGUpCitGSUxFICAgICphdXRoX2ZpbGU7Cit7CisgICAgWGF1dGggICBsb2NhbDsKKyAgICBYYXV0 aCAgICpyZXQ7CisKKyAgICBpZiAocmVhZF9zaG9ydCAoJmxvY2FsLmZhbWlseSwgYXV0aF9maWxl KSA9PSAwKQorICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAocmVhZF9jb3VudGVkX3N0cmluZyAo JmxvY2FsLmFkZHJlc3NfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbG9j YWwuYWRkcmVzcywgYXV0aF9maWxlKSA9PSAwKQorICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAo cmVhZF9jb3VudGVkX3N0cmluZyAoJmxvY2FsLm51bWJlcl9sZW5ndGgsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICZsb2NhbC5udW1iZXIsIGF1dGhfZmlsZSkgPT0gMCkgeworICAgICAg ICBpZiAobG9jYWwuYWRkcmVzcykgZnJlZSAobG9jYWwuYWRkcmVzcyk7CisgICAgICAgIHJldHVy biAwOworICAgIH0KKyAgICBpZiAocmVhZF9jb3VudGVkX3N0cmluZyAoJmxvY2FsLm5hbWVfbGVu Z3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbG9jYWwubmFtZSwgYXV0aF9maWxl KSA9PSAwKSB7CisgICAgICAgIGlmIChsb2NhbC5hZGRyZXNzKSBmcmVlIChsb2NhbC5hZGRyZXNz KTsKKyAgICAgICAgaWYgKGxvY2FsLm51bWJlcikgZnJlZSAobG9jYWwubnVtYmVyKTsKKyAgICAg ICAgcmV0dXJuIDA7CisgICAgfQorICAgIGlmIChyZWFkX2NvdW50ZWRfc3RyaW5nICgmbG9jYWwu ZGF0YV9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZsb2NhbC5kYXRhLCBh dXRoX2ZpbGUpID09IDApIHsKKyAgICAgICAgaWYgKGxvY2FsLmFkZHJlc3MpIGZyZWUgKGxvY2Fs LmFkZHJlc3MpOworICAgICAgICBpZiAobG9jYWwubnVtYmVyKSBmcmVlIChsb2NhbC5udW1iZXIp OworICAgICAgICBpZiAobG9jYWwubmFtZSkgZnJlZSAobG9jYWwubmFtZSk7CisgICAgICAgIHJl dHVybiAwOworICAgIH0KKyAgICByZXQgPSAoWGF1dGggKikgbWFsbG9jIChzaXplb2YgKFhhdXRo KSk7CisgICAgaWYgKCFyZXQpIHsKKyAgICAgICAgaWYgKGxvY2FsLmFkZHJlc3MpIGZyZWUgKGxv Y2FsLmFkZHJlc3MpOworICAgICAgICBpZiAobG9jYWwubnVtYmVyKSBmcmVlIChsb2NhbC5udW1i ZXIpOworICAgICAgICBpZiAobG9jYWwubmFtZSkgZnJlZSAobG9jYWwubmFtZSk7CisgICAgICAg IGlmIChsb2NhbC5kYXRhKSB7CisgICAgICAgICAgICBiemVybyAobG9jYWwuZGF0YSwgbG9jYWwu ZGF0YV9sZW5ndGgpOworICAgICAgICAgICAgZnJlZSAobG9jYWwuZGF0YSk7CisgICAgICAgIH0K KyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgICpyZXQgPSBsb2NhbDsKKyAgICByZXR1cm4g cmV0OworfQorCitzdGF0aWMgaW50Cit3cml0ZV9zaG9ydCAocywgZmlsZSkKK3Vuc2lnbmVkIHNo b3J0ICBzOworRklMRSAgICAgICAgICAgICpmaWxlOworeworICAgIHVuc2lnbmVkIGNoYXIgICBm aWxlX3Nob3J0WzJdOworCisgICAgZmlsZV9zaG9ydFswXSA9IChzICYgKHVuc2lnbmVkKTB4ZmYw MCkgPj4gODsKKyAgICBmaWxlX3Nob3J0WzFdID0gcyAmIDB4ZmY7CisgICAgaWYgKGZ3cml0ZSAo KGNoYXIgKikgZmlsZV9zaG9ydCwgKGludCkgc2l6ZW9mIChmaWxlX3Nob3J0KSwgMSwgZmlsZSkg IT0gMSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQK K3dyaXRlX2NvdW50ZWRfc3RyaW5nIChjb3VudCwgc3RyaW5nLCBmaWxlKQordW5zaWduZWQgc2hv cnQgIGNvdW50OworY2hhciAgICAqc3RyaW5nOworRklMRSAgICAqZmlsZTsKK3sKKyAgICBpZiAo d3JpdGVfc2hvcnQgKGNvdW50LCBmaWxlKSA9PSAwKQorICAgICAgICByZXR1cm4gMDsKKyAgICBp ZiAoZndyaXRlIChzdHJpbmcsIChpbnQpIHNpemVvZiAoY2hhciksIChpbnQpIGNvdW50LCBmaWxl KSAhPSBjb3VudCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIDE7Cit9CisKK2ludAor WGF1V3JpdGVBdXRoIChhdXRoX2ZpbGUsIGF1dGgpCitGSUxFICAgICphdXRoX2ZpbGU7CitYYXV0 aCAgICphdXRoOworeworICAgIGlmICh3cml0ZV9zaG9ydCAoYXV0aC0+ZmFtaWx5LCBhdXRoX2Zp bGUpID09IDApCisgICAgICAgIHJldHVybiAwOworICAgIGlmICh3cml0ZV9jb3VudGVkX3N0cmlu ZyAoYXV0aC0+YWRkcmVzc19sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBh dXRoLT5hZGRyZXNzLCBhdXRoX2ZpbGUpID09IDApCisgICAgICAgIHJldHVybiAwOworICAgIGlm ICh3cml0ZV9jb3VudGVkX3N0cmluZyAoYXV0aC0+bnVtYmVyX2xlbmd0aCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGF1dGgtPm51bWJlciwgYXV0aF9maWxlKSA9PSAwKQorICAgICAg ICByZXR1cm4gMDsKKyAgICBpZiAod3JpdGVfY291bnRlZF9zdHJpbmcgKGF1dGgtPm5hbWVfbGVu Z3RoLCBhdXRoLT5uYW1lLCBhdXRoX2ZpbGUpID09IDApCisgICAgICAgIHJldHVybiAwOworICAg IGlmICh3cml0ZV9jb3VudGVkX3N0cmluZyAoYXV0aC0+ZGF0YV9sZW5ndGgsIGF1dGgtPmRhdGEs IGF1dGhfZmlsZSkgPT0gMCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIDE7Cit9CisK KyNpZmRlZiBLUkI1CisjaWZkZWYgSzVfWEFVVEgKKy8qCisgKiBmdW5jdGlvbnMgdG8gZW5jb2Rl L2RlY29kZSBLZXJiZXJvcyBWNSBwcmluY2lwYWxzCisgKiBpbnRvIHNvbWV0aGluZyB0aGF0IGNh biBiZSByZWFzb25hYmxlIHNwZXdlZCBvdmVyCisgKiB0aGUgd2lyZQorICoKKyAqIEF1dGhvcjog VG9tIFl1IDx0bHl1QE1JVC5FRFU+CisgKgorICogU3RpbGwgbmVlZHMgdG8gYmUgZml4ZWQgdXAg d3J0IHNpZ25lZC91bnNpZ25lZCBsZW5ndGhzLCBidXQgd2UnbGwgd29ycnkKKyAqIGFib3V0IHRo YXQgbGF0ZXIuCisgKi8KKworLyoKKyAqIFhhdUtyYjVFbmNvZGUKKyAqCisgKiB0aGlzIGZ1bmN0 aW9uIGVuY29kZXMgdGhlIHByaW5jaXBhbCBwYXNzZWQgdG8gaXQgaW4gYSBmb3JtYXQgdGhhdCBj YW4KKyAqIGVhc2lseSBiZSBkZWFsdCB3aXRoIGJ5IHN0dWZmaW5nIGl0IGludG8gYW4gWCBwYWNr ZXQuICBFbmNvZGluZyBpcyBhcworICogZm9sbG93czoKKyAqICAgbGVuZ3RoIGNvdW50IG9mIHRo ZSByZWFsbSBuYW1lCisgKiAgIHJlYWxtCisgKiAgIGNvbXBvbmVudCBjb3VudAorICogICBsZW5n dGggb2YgY29tcG9uZW50CisgKiAgIGFjdHVhbCBwcmluY2lwYWwgY29tcG9uZW50CisgKiAgIGV0 Yy4uLi4KKyAqCisgKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBhbGxvY2F0ZXMgYSBodW5rIG9m IG1lbW9yeSwgd2hpY2ggbXVzdCBiZQorICogZnJlZWQgdG8gYXZvaWQgbmFzdHkgbWVtb3J5IGxl YWsgdHlwZSB0aGluZ3MuICBBbGwgY291bnRzIGFyZQorICogYnl0ZS1zd2FwcGVkIGlmIG5lZWRl ZC4gKGV4Y2VwdCBmb3IgdGhlIHRvdGFsIGxlbmd0aCByZXR1cm5lZCkKKyAqCisgKiBuZXZlcm1p bmQuLi4uIHN0dWZmaW5nIHRoZSBlbmNvZGVkIHBhY2tldCBpbiBuZXQgYnl0ZSBvcmRlciBqdXN0 IHRvCisgKiBhbHdheXMgZG8gdGhlIHJpZ2h0IHRoaW5nLiAgRG9uJ3QgaGF2ZSB0byBmcm9iIHdp dGggYWxpZ25tZW50IHRoYXQgd2F5LgorICovCitpbnQKK1hhdUtyYjVFbmNvZGUocHJpbmMsIG91 dGJ1ZikKKyAgICBrcmI1X3ByaW5jaXBhbCBwcmluYzsgICAgICAgLyogcHJpbmNpcGFsIHRvIGVu Y29kZSAqLworICAgIGtyYjVfZGF0YSAqb3V0YnVmOyAgICAgICAgICAvKiBvdXRwdXQgYnVmZmVy ICovCit7CisgICAgQ0FSRDE2IGksIG51bXBhcnRzLCB0b3RsZW4gPSAwLCBwbGVuLCBybGVuOwor ICAgIGNoYXIgKmNwLCAqcGRhdGE7CisKKyAgICBybGVuID0ga3JiNV9wcmluY19yZWFsbShwcmlu YyktPmxlbmd0aDsKKyAgICBudW1wYXJ0cyA9IGtyYjVfcHJpbmNfc2l6ZShwcmluYyk7CisgICAg dG90bGVuID0gMiArIHJsZW4gKyAyOyAgICAgIC8qIGluY2x1ZGUgcm9vbSBmb3IgcmVhbG0gbGVu Z3RoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBjb21wb25lbnQgY291 bnQgKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgbnVtcGFydHM7IGkrKykKKyAgICAgICAgdG90bGVu ICs9IGtyYjVfcHJpbmNfY29tcG9uZW50KHByaW5jLCBpKS0+bGVuZ3RoICsgMjsKKyAgICAvKiBh ZGQgMiBieXRlcyBlYWNoIHRpbWUgZm9yIGxlbmd0aCAqLworICAgIGlmICgob3V0YnVmLT5kYXRh ID0gKGNoYXIgKiltYWxsb2ModG90bGVuKSkgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOwor ICAgIGNwID0gb3V0YnVmLT5kYXRhOworICAgICpjcCsrID0gKGNoYXIpKChpbnQpKDB4ZmYwMCAm IHJsZW4pID4+IDgpOworICAgICpjcCsrID0gKGNoYXIpKDB4MDBmZiAmIHJsZW4pOworICAgIG1l bWNweShjcCwga3JiNV9wcmluY19yZWFsbShwcmluYyktPmRhdGEsIHJsZW4pOyAgICAvKiBzYWZl ICovCisgICAgY3AgKz0gcmxlbjsKKyAgICAqY3ArKyA9IChjaGFyKSgoaW50KSgweGZmMDAgJiBu dW1wYXJ0cykgPj4gOCk7CisgICAgKmNwKysgPSAoY2hhcikoMHgwMGZmICYgbnVtcGFydHMpOwor ICAgIGZvciAoaSA9IDA7IGkgPCBudW1wYXJ0czsgaSsrKQorICAgIHsKKyAgICAgICAgcGxlbiA9 IGtyYjVfcHJpbmNfY29tcG9uZW50KHByaW5jLCBpKS0+bGVuZ3RoOworICAgICAgICBwZGF0YSA9 IGtyYjVfcHJpbmNfY29tcG9uZW50KHByaW5jLCBpKS0+ZGF0YTsKKyAgICAgICAgKmNwKysgPSAo Y2hhcikoKGludCkoMHhmZjAwICYgcGxlbikgPj4gOCk7CisgICAgICAgICpjcCsrID0gKGNoYXIp KDB4MDBmZiAmIHBsZW4pOworICAgICAgICBtZW1jcHkoY3AsIHBkYXRhLCBwbGVuKTsgICAgICAg ICAgICAgICAgICAgICAgICAvKiBzYWZlICovCisgICAgICAgIGNwICs9IHBsZW47CisgICAgfQor ICAgIG91dGJ1Zi0+bGVuZ3RoID0gdG90bGVuOworICAgIHJldHVybiAwOworfQorCisvKgorICog WGF1S3JiNURlY29kZQorICoKKyAqIFRoaXMgZnVuY3Rpb24gZXNzZW50aWFsbHkgcmV2ZXJzZXMg d2hhdCBYYXVLcmI1RW5jb2RlIGRvZXMuCisgKiByZXR1cm4gdmFsdWU6IDAgaWYgb2theSwgLTEg aWYgbWFsbG9jIGZhaWxzLCAtMiBpZiBpbmJ1ZiBmb3JtYXQgYmFkCisgKi8KK2ludAorWGF1S3Ji NURlY29kZShpbmJ1ZiwgcHJpbmMpCisgICAga3JiNV9kYXRhIGluYnVmOworICAgIGtyYjVfcHJp bmNpcGFsICpwcmluYzsKK3sKKyAgICBDQVJEMTYgaSwgbnVtcGFydHMsIHBsZW4sIHJsZW47Cisg ICAgQ0FSRDggKmNwLCAqcGRhdGE7CisKKyAgICBpZiAoaW5idWYubGVuZ3RoIDwgNCkKKyAgICB7 CisgICAgICAgIHJldHVybiAtMjsKKyAgICB9CisgICAgKnByaW5jID0gKGtyYjVfcHJpbmNpcGFs KW1hbGxvYyhzaXplb2YgKGtyYjVfcHJpbmNpcGFsX2RhdGEpKTsKKyAgICBpZiAoKnByaW5jID09 IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBiemVybygqcHJpbmMsIHNpemVvZiAoa3Ji NV9wcmluY2lwYWxfZGF0YSkpOworICAgIGNwID0gKENBUkQ4ICopaW5idWYuZGF0YTsKKyAgICBy bGVuID0gKmNwKysgPDwgODsKKyAgICBybGVuIHw9ICpjcCsrOworICAgIGlmIChpbmJ1Zi5sZW5n dGggPCA0ICsgKGludClybGVuICsgMikKKyAgICB7CisgICAgICAgIGtyYjVfZnJlZV9wcmluY2lw YWwoKnByaW5jKTsKKyAgICAgICAgcmV0dXJuIC0yOworICAgIH0KKyAgICBrcmI1X3ByaW5jX3Jl YWxtKCpwcmluYyktPmRhdGEgPSAoY2hhciAqKW1hbGxvYyhybGVuKTsKKyAgICBpZiAoa3JiNV9w cmluY19yZWFsbSgqcHJpbmMpLT5kYXRhID09IE5VTEwpCisgICAgeworICAgICAgICBrcmI1X2Zy ZWVfcHJpbmNpcGFsKCpwcmluYyk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAga3Ji NV9wcmluY19yZWFsbSgqcHJpbmMpLT5sZW5ndGggPSBybGVuOworICAgIG1lbWNweShrcmI1X3By aW5jX3JlYWxtKCpwcmluYyktPmRhdGEsIGNwLCBybGVuKTsgICAvKiBzYWZlICovCisgICAgY3Ag Kz0gcmxlbjsKKyAgICBudW1wYXJ0cyA9ICpjcCsrIDw8IDg7CisgICAgbnVtcGFydHMgfD0gKmNw Kys7CisgICAga3JiNV9wcmluY19uYW1lKCpwcmluYykgPQorICAgICAgICAoa3JiNV9kYXRhICop bWFsbG9jKG51bXBhcnRzICogc2l6ZW9mIChrcmI1X2RhdGEpKTsKKyAgICBpZiAoa3JiNV9wcmlu Y19uYW1lKCpwcmluYykgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIGtyYjVfZnJlZV9wcmluY2lw YWwoKnByaW5jKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBrcmI1X3ByaW5jX3Np emUoKnByaW5jKSA9IDA7CisgICAgZm9yIChpID0gMDsgaSA8IG51bXBhcnRzOyBpKyspCisgICAg eworICAgICAgICBpZiAoY3AgKyAyID4gKENBUkQ4ICopaW5idWYuZGF0YSArIGluYnVmLmxlbmd0 aCkKKyAgICAgICAgeworICAgICAgICAgICAga3JiNV9mcmVlX3ByaW5jaXBhbCgqcHJpbmMpOwor ICAgICAgICAgICAgcmV0dXJuIC0yOworICAgICAgICB9CisgICAgICAgIHBsZW4gPSAqY3ArKyA8 PCA4OworICAgICAgICBwbGVuIHw9ICpjcCsrOworICAgICAgICBpZiAoY3AgKyBwbGVuID4gKENB UkQ4ICopaW5idWYuZGF0YSArIGluYnVmLmxlbmd0aCkKKyAgICAgICAgeworICAgICAgICAgICAg a3JiNV9mcmVlX3ByaW5jaXBhbCgqcHJpbmMpOworICAgICAgICAgICAgcmV0dXJuIC0yOworICAg ICAgICB9CisgICAgICAgIHBkYXRhID0gKENBUkQ4ICopbWFsbG9jKHBsZW4pOworICAgICAgICBp ZiAocGRhdGEgPT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAga3JiNV9mcmVlX3ByaW5j aXBhbCgqcHJpbmMpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAg IGtyYjVfcHJpbmNfY29tcG9uZW50KCpwcmluYywgaSktPmRhdGEgPSAoY2hhciAqKXBkYXRhOwor ICAgICAgICBrcmI1X3ByaW5jX2NvbXBvbmVudCgqcHJpbmMsIGkpLT5sZW5ndGggPSBwbGVuOwor ICAgICAgICBtZW1jcHkocGRhdGEsIGNwLCBwbGVuKTsgICAgICAgIC8qIHNhZmUgKi8KKyAgICAg ICAgY3AgKz0gcGxlbjsKKyAgICAgICAga3JiNV9wcmluY19zaXplKCpwcmluYykrKzsKKyAgICB9 CisgICAgcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogSzVfWEFVVEggKi8KKyNlbmRpZiAvKiBLUkI1 ICovCisjZW5kaWYgLyogQ0tfRk9SV0FSRF9YICovCisjZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJ T04gKi8KKworLyogQyBLIF8gQSBVIFQgSCBfIEkgTiBJIFQKKyAqIEluaXRpYWxpemUgdGhlIEtl cmJlcm9zIHN5c3RlbSBmb3IgYSBwZW5kaW5nIGNvbm5lY3Rpb24KKyAqICAgaG9zdG5hbWUgLSBh IHJldmVyc2UgRE5TIGxvb2t1cCBvZiB0aGUgaG9zdG5hbWUgd2hlbiBwb3NzaWJsZQorICogICBp cGFkZHIgICAtIHRoZSBpcCBhZGRyZXNzIG9mIHRoZSBob3N0CisgKiAgIHVzZXJuYW1lIC0gdGhl IG5hbWUgdGhlIHVzZXIgd2FudHMgdG8gY29ubmVjdCB1bmRlciBub3QgbmVjZXNzYXJpbHkKKyAq ICAgICAgICAgICAgICB0aGUgc2FtZSBhcyBwcmluY2lwYWwKKyAqICAgc29ja2V0ICAgLSB0aGUg c29ja2V0IGhhbmRsZSAodHR5ZmQgaW4gS2VybWl0IHNwZWFrKQorICoKKyAqIFJldHVybnM6IDEg b24gc3VjY2VzcyBhbmQgMCBvbiBmYWlsdXJlCisgKi8KKworaW50CisjaWZkZWYgQ0tfQU5TSUMK K2NrX2F1dGhfaW5pdCggY2hhciAqIGhvc3RuYW1lLCBjaGFyICogaXBhZGRyLCBjaGFyICogdXNl cm5hbWUsIGludCBzb2NrZXQgKQorI2Vsc2UgLyogQ0tfQU5TSUMgKi8KK2NrX2F1dGhfaW5pdCgg aG9zdG5hbWUsIGlwYWRkciwgdXNlcm5hbWUsIHNvY2tldCApCisgICAgY2hhciAqIGhvc3RuYW1l OyBjaGFyICogaXBhZGRyOyBjaGFyICp1c2VybmFtZTsgaW50IHNvY2tldDsKKyNlbmRpZiAvKiBD S19BTlNJQyAqLworeworI2lmZGVmIENLX0FVVEhFTlRJQ0FUSU9OCisjaWZkZWYgT1MyCisgICAg aWYgKCAhY2tfc2VjdXJpdHlfbG9hZGRsbCgpICkgeworICAgICAgICBURUxPUFRfTUVfTU9ERShU RUxPUFRfQVVUSEVOVElDQVRJT04pID0gVE5fTkdfUkY7CisgICAgICAgIFRFTE9QVF9VX01PREUo VEVMT1BUX0FVVEhFTlRJQ0FUSU9OKSA9IFROX05HX1JGOworICAgICAgICByZXR1cm4oMCk7Cisg ICAgfQorI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIENLX0FVVEhFTlRJQ0FJVE9OICovCisj aWZkZWYgQ0tfRU5DUllQVElPTgorICAgIGlmICggISFja19jcnlwdF9pc19pbnN0YWxsZWQoKSAp IHsKKyAgICAgICAgVEVMT1BUX01FX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pID0gVE5fTkdfUkY7 CisgICAgICAgIFRFTE9QVF9VX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pID0gVE5fTkdfUkY7Cisg ICAgfQorI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KKworICAgIGlmICghaG9zdG5hbWUpIGhv c3RuYW1lID0gIiI7CisgICAgaWYgKCFpcGFkZHIpIGlwYWRkciA9ICIiOworICAgIGlmICghdXNl cm5hbWUpIHVzZXJuYW1lID0gIiI7CisKKyAgICBkZWJ1ZyhGMTEwLCJja19hdXRoX2luaXQgVXNl cm5hbWUiLHVzZXJuYW1lLDApOworICAgIGRlYnVnKEYxMTAsImNrX2F1dGhfaW5pdCBIb3N0bmFt ZSIsaG9zdG5hbWUsMCk7CisgICAgZGVidWcoRjExMCwiY2tfYXV0aF9pbml0IElwYWRkciIsaXBh ZGRyLDApOworCisgICAgY2tzdHJuY3B5KCBzelVzZXJOYW1lLCB1c2VybmFtZSwgVUlEQlVGTEVO ICk7CisgICAgY2tzdHJuY3B5KCBzekhvc3ROYW1lLCBob3N0bmFtZSwgVUlEQlVGTEVOICk7Cisg ICAgY2tzdHJuY3B5KCBzeklQLCBpcGFkZHIsIDE2ICk7CisgICAgc3pVc2VyTmFtZVJlcXVlc3Rl ZFswXSA9ICdcMCc7CisgICAgc3pVc2VyTmFtZUF1dGhlbnRpY2F0ZWRbMF0gPSAnXDAnOworICAg IHZhbGlkVXNlciA9IEFVVEhfUkVKRUNUOworICAgIGFjY2VwdF9jb21wbGV0ZSA9IDA7CisgICAg YXV0aGVudGljYXRpb25fdmVyc2lvbiA9IEFVVEhUWVBFX05VTEw7CisKKyNpZmRlZiBDS19BVVRI RU5USUNBVElPTgorICAgIGF1dGhfaG93ID0gMDsKKyAgICBhdXRoX2NyeXB0ID0gMDsKKyAgICBh dXRoX2Z3ZCA9IDA7CisgICAgbXV0dWFsX2NvbXBsZXRlID0gMDsKKyAgICBpZiAoIHNzdGVsbmV0 ICkKKyAgICAgICAgc3RyX2RhdGFbM10gPSBURUxRVUFMX1JFUExZOworICAgIGVsc2UKKyAgICAg ICAgc3RyX2RhdGFbM10gPSBURUxRVUFMX0lTOworI2VuZGlmIC8qIENLX0FVVEhFTlRJQ0FUSU9O ICovCisKKyNpZmRlZiBDS19TUlAKKyAgICBzcnBfd2FpdHJlc3AgPSAwOworI2VuZGlmIC8qIFNS UCAqLworCisjaWZkZWYgQ0tfS0VSQkVST1MKKyNpZmRlZiBLUkI1CisgICAgLyogZnJlZSBwcmV2 aW91cyByZXRfY3JlZCAgKi8KKyAgICBpZiAoIHJldF9jcmVkICkgeworI2lmZGVmIENLX0VOQ1JZ UFRJT04KKyNpZmRlZiBIRUlNREFMCisgICAgICAgIGlmICggazVfc2Vzc2lvbl9rZXkgPT0gJnJl dF9jcmVkLT5zZXNzaW9uKQorICAgICAgICAgICAgazVfc2Vzc2lvbl9rZXkgPSBOVUxMOworI2Vs c2UgLyogSEVJTURBTCAqLworICAgICAgICBpZiAoIGs1X3Nlc3Npb25fa2V5ID09ICZyZXRfY3Jl ZC0+a2V5YmxvY2spCisgICAgICAgICAgICBrNV9zZXNzaW9uX2tleSA9IE5VTEw7CisjZW5kaWYg LyogSEVJTURBTCAqLworI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KKyAgICAgICAga3JiNV9m cmVlX2NyZWRzKGs1X2NvbnRleHQsIHJldF9jcmVkKTsKKyAgICAgICAgcmV0X2NyZWQgPSBOVUxM OworICAgIH0KKyAgICBpZiAoazVfdGlja2V0KSB7CisgICAgICAgIGtyYjVfZnJlZV90aWNrZXQo azVfY29udGV4dCwgazVfdGlja2V0KTsKKyAgICAgICAgazVfdGlja2V0ID0gTlVMTDsKKyAgICB9 CisgICAgLyogYW5kIGNvbnRleHQgKi8KKyAgICBpZiAoIGs1X2NvbnRleHQgKSB7CisgICAgICAg IGtyYjVfZnJlZV9jb250ZXh0KGs1X2NvbnRleHQpOworICAgICAgICBrNV9jb250ZXh0ID0gTlVM TDsKKyAgICB9CisKKyAgICAvKiBjcmVhdGUgazVfY29udGV4dCAqLworICAgIGtyYjVfaW5pdF9j b250ZXh0KCZrNV9jb250ZXh0KTsKKyNpZm5kZWYgTUlUX0NVUlJFTlQKKyNpZm5kZWYgTk9fS1JC NV9JTklUX0VUUworLyogVGhpcyByb3V0aW5lIGlzIGEgbm8tb3AgaW4gS2VyYmVyb3MgMS40Lngg YW5kIGxhdGVyICovCisvKiBhbmQgaW4gc29tZSBpbnN0YWxsYXRpb25zIGl0IGNhbid0IGJlIGZv dW5kIGluIHdoaWNoIGNhc2UgKi8KKy8qIGRlZmluZSBOT19LUkI1X0lOSVRfRVRTICovCisgICAg aWYgKGs1X2NvbnRleHQpCisgICAgICAgIGtyYjVfaW5pdF9ldHMoazVfY29udGV4dCk7CisjZW5k aWYJLyogTk9fS1JCNV9JTklUX0VUUyAqLworI2VuZGlmIC8qIE1JVF9DVVJSRU5UICovCisjaWZk ZWYgS1JCNTI0X0NPTlYKKyAgICBrcmI1MjRfaW5pdF9ldHMoazVfY29udGV4dCk7CisjZW5kaWYg LyogS1JCNTI0X0NPTlYgKi8KKyAgICBtZW1zZXQoJms1X2F1dGgsMCxzaXplb2YoazVfYXV0aCkp OworICAgIGlmIChhdXRoX2NvbnRleHQpIHsKKyAgICAgICAga3JiNV9hdXRoX2Nvbl9mcmVlKGs1 X2NvbnRleHQsIGF1dGhfY29udGV4dCk7CisgICAgICAgIGF1dGhfY29udGV4dCA9IDA7CisgICAg fQorI2lmZGVmIENLX0VOQ1JZUFRJT04KKyAgICBpZiAoazVfc2Vzc2lvbl9rZXkpIHsKKyAgICAg ICAga3JiNV9mcmVlX2tleWJsb2NrKGs1X2NvbnRleHQsIGs1X3Nlc3Npb25fa2V5KTsKKyAgICAg ICAgazVfc2Vzc2lvbl9rZXkgPSAwOworICAgIH0KKyNlbmRpZiAvKiBFTkNSWVBUSU9OICovCisj aWZkZWYgVExTX1ZFUklGWQorICAgIGtyYjVfdGxzX3ZlcmlmaWVkID0gMDsKKyNlbmRpZiAvKiBU TFNfVkVSSUZZICovCisjZW5kaWYgLyogS1JCNSAqLworCisjaWZkZWYgS1JCNAorI2lmZGVmIENL X0VOQ1JZUFRJT04KKyAgICAvKiBJbml0aWFsaXplIGJ1ZmZlcnMgdXNlZCBmb3IgYXV0aGVudGlj YXRpb24gKi8KKyAgICBtZW1zZXQoJms0X3Nlc3Npb25fa2V5LCAwLCBzaXplb2YoazRfc2Vzc2lv bl9rZXkpKTsKKyAgICBtZW1zZXQoJms0X2NoYWxsZW5nZSwgMCwgc2l6ZW9mKGs0X2NoYWxsZW5n ZSkpOworI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KKyNlbmRpZiAvKiBLUkI0ICovCisKKyNp ZmRlZiBSTE9HQ09ERQorICAgIHJsb2dfZW5jcnlwdCA9IDA7CisjZW5kaWYgLyogUkxPR0NPREUg Ki8KKyAgICBuc3RvcmVkID0gMDsKKyAgICBzdG9yZV9wdHIgPSBzdG9yYWdlOworICAgIG1lbXNl dChzdG9yYWdlLDAsc2l6ZW9mKHN0b3JhZ2UpKTsKKyNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLwor CisjaWZkZWYgQ0tfRU5DUllQVElPTgorICAgIGtzdHJlYW1fZGVzdHJveSgpOworICAgIGlmICgh a3N0cmVhbV9jcmVhdGVfZnJvbV9mZChzb2NrZXQsIE5VTEwpKQorICAgICAgICByZXR1cm4oMCk7 CisjZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLworICAgIHJldHVybigxKTsKK30KKwordm9pZAor YXV0aF9maW5pc2hlZChyZXN1bHQpIGludCByZXN1bHQ7IHsKKyAgICBleHRlcm4gY2hhciB1aWRi dWZbXTsKKyAgICBleHRlcm4gaW50IHNzdGVsbmV0OworCisgICAgdmFsaWRVc2VyID0gcmVzdWx0 OworICAgIHN3aXRjaCAocmVzdWx0KSB7CisgICAgY2FzZSBBVVRIX1JFSkVDVDogICAgICAgICAg IC8qIFJlamVjdGVkICovCisgICAgICAgIGlmIChzc3RlbG5ldCkKKyAgICAgICAgICAgIHVpZGJ1 ZlswXSA9ICdcMCc7CisgICAgICAgIGF1dGhlbnRpY2F0aW9uX3ZlcnNpb24gPSBBVVRIVFlQRV9O VUxMOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFVVEhfVU5LTk9XTjogICAgICAgICAgLyog V2UgZG9uJ3Qga25vdyB3aG8gaGUgaXMsIGJ1dCBoZSdzIG9rYXkgKi8KKyAgICAgICAgaWYgKHNz dGVsbmV0KQorICAgICAgICAgICAgc3RyY3B5KHVpZGJ1ZiwiKHVua25vd24pIik7CisgICAgICAg IGJyZWFrOworICAgIGNhc2UgQVVUSF9PVEhFUjogICAgICAgICAgICAvKiBXZSBrbm93IGhpbSwg YnV0IG5vdCBoaXMgbmFtZSAqLworICAgICAgICBpZiAoc3N0ZWxuZXQpCisgICAgICAgICAgICBz dHJjcHkodWlkYnVmLCIob3RoZXIpIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQVVUSF9V U0VSOiAgICAgICAgICAgICAvKiBXZSBrbm93IGhlIG5hbWUgKi8KKyAgICBjYXNlIEFVVEhfVkFM SUQ6ICAgICAgICAgICAgLyogV2Uga25vdyBoaW0sIGFuZCBoZSBuZWVkcyBubyBwYXNzd29yZCAq LworICAgICAgICBpZiAoc3N0ZWxuZXQpCisgICAgICAgICAgICBzdHJjcHkodWlkYnVmLHN6VXNl ck5hbWVSZXF1ZXN0ZWQpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKKyNpZmRlZiBNQUNP U1gKKyNpZmRlZiBLUkI1CisKK2tyYjVfZXJyb3JfY29kZQorY2tfa3JiNV93cml0ZV9tZXNzYWdl KGtyYjVfY29udGV4dCBjb24sIGtyYjVfcG9pbnRlciBwdHIsIGtyYjVfZGF0YSAqZGF0YSkKK3sK KyAgICBpbnQgZmQgPSAqKChpbnQgKilwdHIpOworICAgIGxvbmcgbXNnbGVuOworCisgICAgbXNn bGVuID0gaHRvbmwoZGF0YS0+bGVuZ3RoKTsKKyAgICBpZiAobmV0X3dyaXRlKGZkLChDSEFSICop Jm1zZ2xlbiw0KSAhPSA0KSB7CisgICAgICAgIHJldHVybigtMSk7CisgICAgfQorICAgIGlmICgg ZGF0YS0+bGVuZ3RoICkgeworICAgICAgICBpZiAobmV0X3dyaXRlKGZkLGRhdGEtPmRhdGEsZGF0 YS0+bGVuZ3RoKSAhPSBkYXRhLT5sZW5ndGgpIHsKKyAgICAgICAgICAgIHJldHVybigtMSk7Cisg ICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuKDApOworfQorCitrcmI1X2Vycm9yX2NvZGUKK2Nr X2tyYjVfcmVhZF9tZXNzYWdlKCBrcmI1X2NvbnRleHQgY29udGV4dCwKKyAgICAgICAgICAgICAg ICAgICAgICBrcmI1X3BvaW50ZXIgcHRyLAorICAgICAgICAgICAgICAgICAgICAgIGtyYjVfZGF0 YSAqIGRhdGEpCit7CisgICAgZXh0ZXJuIGludCB0dHlmZDsKKyAgICBpbnQgZmQgPSAqKChpbnQg KilwdHIpOworICAgIGxvbmcgbXNnbGVuOworICAgIGNoYXIgKnA7CisgICAgaW50IGksIHJjOwor CisgICAgaWYgKG5ldF9yZWFkKGZkLCZtc2dsZW4sNCkgPCAwKQorICAgICAgICByZXR1cm4oLTEp OworCisgICAgZGF0YS0+bGVuZ3RoID0gbnRvaGwobXNnbGVuKTsKKyAgICBpZiAoIGRhdGEtPmxl bmd0aCApIHsKKyAgICAgICAgZGF0YS0+ZGF0YSA9IG1hbGxvYyhkYXRhLT5sZW5ndGgpOworCisg ICAgICAgIGkgPSAwOworICAgICAgICB3aGlsZSAoIGkgPCBkYXRhLT5sZW5ndGggKSB7CisgICAg ICAgICAgICBpZiAoKHJjID0gbmV0X3JlYWQoZmQsJmRhdGEtPmRhdGFbaV0sKGRhdGEtPmxlbmd0 aCAtIGkpKSkgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAgICAgICBp ICs9IHJjOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybigwKTsKK30KKyNlbmRpZiAvKiBL UkI1ICovCisjZW5kaWYgLyogTUFDT1NYICovCisjZW5kaWYgLyogQ0tfU0VDVVJJVFkgKi8KKwor CgpkaWZmIC0tZ2l0IGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3Vh dGguaCBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1YXRoLmgKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTE0YTA2ZgotLS0gL2Rldi9udWxsCisr KyBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1YXRoLmgKQEAgLTAs MCArMSwyMzUgQEAKKy8qICBDIEsgVSBBIFQgSCAuIEggLS0gICJDLUtlcm1pdCB0byBBdXRoZW50 aWNhdGlvbiIgaW50ZXJmYWNlICAqLworCisvKgorICBBdXRob3I6IEplZmZyZXkgRSBBbHRtYW4g PGphbHRtYW5Ac2VjdXJlLWVuZHBvaW50cy5jb20+LAorICAgICAgICAgICAgU2VjdXJlIEVuZHBv aW50cyBJbmMuLCBOZXcgWW9yayBDaXR5LgorCisgIENvcHlyaWdodCAoQykgMTk5OSwgMjAwOSwK KyAgICBUcnVzdGVlcyBvZiBDb2x1bWJpYSBVbml2ZXJzaXR5IGluIHRoZSBDaXR5IG9mIE5ldyBZ b3JrLgorICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBTZWUgdGhlIEMtS2VybWl0IENPUFlJTkcu VFhUIGZpbGUgb3IgdGhlCisgICAgY29weXJpZ2h0IHRleHQgaW4gdGhlIGNrY21haS5jIG1vZHVs ZSBmb3IgZGlzY2xhaW1lciBhbmQgcGVybWlzc2lvbnMuCisqLworCisvKgorICogQmFzZWQgb24g YSBjb25jYXRlbmF0aW9uIG9mIGFsbCBuZWNlc3NhcnkgaW5jbHVkZSBmaWxlcyBkaXN0cmlidXRl ZCB3aXRoCisgKiB0aGUgS2VyYmVyb3MgNSBOVCBBbHBoYSAyIFRlbG5ldCBwYWNrYWdlIGZyb20g TUlULgorICovCisKKyNpZm5kZWYgS1JCNV9LRVJNSVRfSAorI2RlZmluZSBLUkI1X0tFUk1JVF9I CisKKyNpZm5kZWYgQk9PTAorI2RlZmluZSBCT09MIGludAorI2VuZGlmCisKKy8qIEhlYWRlciBm aWxlIGZvciBlbmNyeXB0ZWQtc3RyZWFtIGxpYnJhcnkuCisgKiBXcml0dGVuIGJ5IEtlbiBSYWVi dXJuIChSYWVidXJuQEN5Z251cy5DT00pLgorICogQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAx OTk0IGJ5IEN5Z251cyBTdXBwb3J0LgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBt b2RpZnksIGFuZAorICogZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMgZG9jdW1lbnRh dGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kCisgKiB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRl ZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UgYXBwZWFyIGlu IGFsbCBjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kCisgKiB0 aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24u CisgKiBDeWdudXMgU3VwcG9ydCBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1 aXRhYmlsaXR5IG9mCisgKiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0IGlzIHBy b3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzCisgKiBvciBpbXBsaWVkIHdhcnJhbnR5Lgor ICovCisKKyNpZm5kZWYgSzVTVFJFQU1fSAorI2RlZmluZSBLNVNUUkVBTV9ICisKK3R5cGVkZWYg dm9pZCAqa3N0cmVhbV9wdHI7ICAgICAgICAgICAgICAgICAgICAgIC8qIERhdGEgc2VuZCBvbiB0 aGUga3N0cmVhbSAqLworc3RydWN0IGtzdHJlYW1fZGF0YV9ibG9jayB7CisgIGtzdHJlYW1fcHRy IHB0cjsKKyAgc2l6ZV90IGxlbmd0aDsKK307CisKK3R5cGVkZWYgc3RydWN0IGtzdHJlYW1faW50 IHsgICAgICAgICAgICAgICAgICAgIC8qIE9iamVjdCB3ZSBwYXNzIGFyb3VuZCAqLworICAgIGlu dCBmZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBPcGVuIHNvY2tl dCBkZXNjcmlwdG9yICovCisgICAgaW50ICgqZW5jcnlwdCkoc3RydWN0IGtzdHJlYW1fZGF0YV9i bG9jayAqLCAvKiBvdXRwdXQgKi8KKyAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qga3N0cmVhbV9k YXRhX2Jsb2NrICopOyAvKiBpbnB1dCAqLworICAgIGludCBlbmNyeXB0X3R5cGU7CisgICAgaW50 ICgqZGVjcnlwdCkoc3RydWN0IGtzdHJlYW1fZGF0YV9ibG9jayAqLCAvKiBvdXRwdXQgKi8KKyAg ICAgICAgICAgICAgICAgICBzdHJ1Y3Qga3N0cmVhbV9kYXRhX2Jsb2NrICopOyAvKiBpbnB1dCAq LworICAgIGludCBkZWNyeXB0X3R5cGU7Cit9ICprc3RyZWFtOworCisvKiBQcm90b3R5cGVzICov CisKK2ludCAga3N0cmVhbV9kZXN0cm95KCk7Cit2b2lkIGtzdHJlYW1fc2V0X2J1ZmZlcl9tb2Rl KGludCk7CitpbnQgIGtzdHJlYW1fY3JlYXRlX2Zyb21fZmQoaW50IGZkLCBrc3RyZWFtX3B0cik7 CitpbnQga3N0cmVhbV93cml0ZSh2b2lkICosIHNpemVfdCk7CitpbnQga3N0cmVhbV9yZWFkKHZv aWQgKiwgc2l6ZV90KTsKKworI2VuZGlmIC8qIEs1U1RSRUFNX0ggKi8KKworLyoKKyAqIEltcGxl bWVudHMgVGVsbmV0IGF1dGhlbnRpY2F0aW9uIGFuZCBlbmNyeXB0aW9uCisgKi8KKworI2lmbmRl ZiBURUxORVRfQVVUSF9ICisjZGVmaW5lIFRFTE5FVF9BVVRIX0gKKworaW50IGF1dGhfcGFyc2Uo dW5zaWduZWQgY2hhciAqLCBpbnQpOworCitpbnQgYXV0aF9pbml0KGtzdHJlYW0pOworCit2b2lk IGF1dGhfZGVzdHJveSh2b2lkKTsKKworaW50IGF1dGhfZW5jcnlwdChzdHJ1Y3Qga3N0cmVhbV9k YXRhX2Jsb2NrICosIHN0cnVjdCBrc3RyZWFtX2RhdGFfYmxvY2sgKik7CisKK2ludCBhdXRoX2Rl Y3J5cHQoc3RydWN0IGtzdHJlYW1fZGF0YV9ibG9jayAqLCBzdHJ1Y3Qga3N0cmVhbV9kYXRhX2Js b2NrICopOworCitleHRlcm4gQk9PTCBmb3J3YXJkX2ZsYWc7CitleHRlcm4gQk9PTCBmb3J3YXJk YWJsZV9mbGFnOworZXh0ZXJuIEJPT0wgZm9yd2FyZGVkX3RpY2tldHM7CisjZW5kaWYgLyogVEVM X0FVVEhfSCAqLworCisKKy8qIEMtS2VybWl0IHNwZWNpZmljIGZ1bmN0aW9ucyAqLworX1BST1RP VFlQKHZvaWQgYXV0aF9maW5pc2hlZCwoaW50KSk7CitfUFJPVE9UWVAoaW50IGNrX2F1dGhfaW5p dCwgKGNoYXIgKiwgY2hhciAqLCBjaGFyICosIGludCkpOworX1BST1RPVFlQKGludCBja190bl9h dXRoX3ZhbGlkLCAoVk9JRCkpOworX1BST1RPVFlQKGludCBja190bl9hdXRoX2luX3Byb2dyZXNz LChWT0lEKSk7CitfUFJPVE9UWVAoaW50IGNrX3RuX3NiX2F1dGgsIChjaGFyICosIGludCkpOwor X1BST1RPVFlQKGludCBja190bl9zYl9lbmNyeXB0LCAoY2hhciAqLCBpbnQpKTsKK19QUk9UT1RZ UChpbnQgY2tfdG5fYXV0aF9yZXF1ZXN0LCAoVk9JRCkpOworX1BST1RPVFlQKHZvaWQgY2tfdG5f ZW5jcnlwdCwgKGNoYXIgKiwgaW50KSk7CitfUFJPVE9UWVAodm9pZCBja190bl9kZWNyeXB0LCAo Y2hhciAqLCBpbnQpKTsKK19QUk9UT1RZUCh2b2lkIGNrX3RuX2VuY3J5cHRfc3RhcnQsIChWT0lE KSk7CitfUFJPVE9UWVAodm9pZCBja190bl9lbmNyeXB0X3N0b3AsIChWT0lEKSk7CitfUFJPVE9U WVAoaW50IGNrX3RuX2F1dGhlbnRpY2F0ZWQsIChWT0lEKSk7CisjaWZkZWYgQ0tfRU5DUllQVElP TgorX1BST1RPVFlQKGludCBja190bl9lbmNyeXB0aW5nLCAoVk9JRCkpOworX1BST1RPVFlQKGlu dCBja190bl9kZWNyeXB0aW5nLCAoVk9JRCkpOworI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8K KyNpZmRlZiBDS19TU0wKK19QUk9UT1RZUChpbnQgY2tfdG5fdGxzX25lZ290aWF0ZSwgKFZPSUQp KTsKK19QUk9UT1RZUChpbnQgU2VuZFNTTEF1dGhTQiwgKGludCwgdm9pZCAqLCBpbnQpKTsKKyNl bmRpZiAvKiBDS19TU0wgKi8KKworI2lmZGVmIENLX0tFUkJFUk9TCisgICAgLyogRGVmaW5lIE1J VF9DVVJSRU5UIHRvIGNvbXBpbGUgdGhlIGNvZGUgZm9yIHVzZSB3aXRoIHZlcnNpb25zIG9mICov CisgICAgLyogS2VyYmVyb3MgbGF0ZXIgdGhhbiBLUkI1IDEuMC41LiAgTm90ZS4gIFRoaXMgd2ls bCBub3QgY29tcGlsZSAgICovCisgICAgLyogc3VjY2Vzc2Z1bGx5IGluIEtlcm1pdCA5NSBkdWUg dG8gdGhlIHNlZ21lbnRhdGlvbiBvZiBjcnlwdG8gICAgICovCisgICAgLyogaW50byBhIHNlcGFy YXRlIERMTC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisK KyNpZm5kZWYgS1JCNV9JTklUX0VUUworLyoga3JiNV9pbml0X2V0cygpIGlzIGEgbm8tb3AgaW4g S2VyYmVyb3MgMS40LnggYW5kIGxhdGVyICovCisvKiBhbmQgaW4gc29tZSBpbnN0YWxsYXRpb25z IGl0IGNhbid0IGJlIGZvdW5kIHNvIG5vdyBieSBkZWZhdWx0ICovCisvKiB3ZSBkb24ndCB1c2Ug aXQuICovCisjZGVmaW5lIE5PX0tSQjVfSU5JVF9FVFMKKyNlbmRpZgkvKiBLUkI1X0lOSVRfRVRT ICovCisKKyNkZWZpbmUgS1JCX0RFRlRJTSA2MDAgICAgICAgICAgICAgICAgICAvKiBEZWZhdWx0 IGxpZmV0aW1lIChtaW51dGVzKSAqLworCisvKiBLZXJiZXJvcyBzdHJ1Y3R1cmUgZGVmaW5pdGlv bnMgKi8KKworc3RydWN0IGtyYl9vcF9kYXRhIHsgICAgICAgICAgICAgICAgICAgIC8qIE9wZXJh dGlvbmFsIGRhdGEgZm9yIGFsbCBhY3Rpb25zICovCisgICAgaW50IHZlcnNpb247ICAgICAgICAg ICAgICAgICAgICAgICAgLyogS2VyYmVyb3MgdmVyc2lvbiAgICAqLworICAgIGNoYXIgKiBjYWNo ZTsgICAgICAgICAgICAgICAgICAgICAgIC8qIEtlcmJlcm9zIGNhY2hlIGZpbGUgKi8KK307CisK K3N0cnVjdCBrcmI0X2luaXRfZGF0YSB7ICAgICAgICAgICAgICAgICAvKiBJTklUSUFMSVpFIGRh dGEgc3RydWN0dXJlICovCisgICAgaW50IGxpZmV0aW1lOworICAgIGNoYXIgKiBwcmluY2lwYWw7 ICAgICAgICAgICAgICAgICAgIC8qIFByaW5jaXBhbCBzdHJpbmcgKi8KKyAgICBjaGFyICogaW5z dGFuY2U7CisgICAgY2hhciAqIHJlYWxtOyAgICAgICAgICAgICAgICAgICAgICAgLyogUmVhbG0g c3RyaW5nICovCisgICAgY2hhciAqIHBhc3N3b3JkOyAgICAgICAgICAgICAgICAgICAgLyogS2Vy YmVyb3MgcGFzc3dvcmQgKi8KKyAgICBpbnQgICAgcHJlYXV0aDsgICAgICAgICAgICAgICAgICAg ICAvKiBVc2UgcHJlYXV0aCBtb2RlPyAqLworICAgIGludCAgICB2ZXJib3NlOyAgICAgICAgICAg ICAgICAgICAgIC8qIFZlcmJvc2Ugb3V0cHV0PyAqLworfTsKKworI2RlZmluZSBLUkI1X05VTV9P Rl9BRERSUyAxNgorc3RydWN0IGtyYjVfaW5pdF9kYXRhIHsgICAgICAgICAgICAgICAgIC8qIElO SVRJQUxJWkUgZGF0YSBzdHJ1Y3R1cmUgKi8KKyAgICBpbnQgZm9yd2FyZGFibGU7ICAgICAgICAg ICAgICAgICAgICAvKiBTd2l0Y2ggdmFsdWVzICovCisgICAgaW50IHByb3hpYWJsZTsgICAgICAg ICAgICAgICAgICAgICAgLyogQ29ycmVzcG9uZCB0byBzd2l0Y2ggbmFtZXMuLi4gKi8KKyAgICBp bnQgbGlmZXRpbWU7CisgICAgaW50IHJlbmV3OworICAgIGludCByZW5ld2FibGU7CisgICAgaW50 IHZhbGlkYXRlOworICAgIGNoYXIgKiBwb3N0ZGF0ZTsKKyAgICBjaGFyICogc2VydmljZTsKKyAg ICBjaGFyICogcHJpbmNpcGFsOyAgICAgICAgICAgICAgICAgICAvKiBQcmluY2lwYWwgc3RyaW5n ICovCisgICAgY2hhciAqIGluc3RhbmNlOworICAgIGNoYXIgKiByZWFsbTsgICAgICAgICAgICAg ICAgICAgICAgIC8qIFJlYWxtIHN0cmluZyAqLworICAgIGNoYXIgKiBwYXNzd29yZDsgICAgICAg ICAgICAgICAgICAgIC8qIEtlcmJlcm9zIHBhc3N3b3JkICovCisgICAgaW50ICAgIHByZWF1dGg7 ICAgICAgICAgICAgICAgICAgICAgLyogVXNlIHByZWF1dGggbW9kZT8gKi8KKyAgICBpbnQgICAg dmVyYm9zZTsgICAgICAgICAgICAgICAgICAgICAvKiBWZXJib3NlIG91dHB1dD8gKi8KKyAgICBp bnQgICAgZ2V0azQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiBHZXQgSzQgVEdUPyAqLworICAg IGNoYXIgKiBhZGRyc1tLUkI1X05VTV9PRl9BRERSUysxXTsgIC8qIExpc3Qgb2YgSVAgQWRkcmVz c2VzICovCisgICAgaW50ICBub19hZGRyZXNzZXM7ICAgICAgICAgICAgICAgICAgLyogRG8gbm90 IGluY2x1ZGUgSVAgQWRkcmVzc2VzICovCit9OworCitzdHJ1Y3Qga3JiNV9saXN0X2NyZWRfZGF0 YSB7ICAgICAgICAgICAgLyogTGlzdCBDcmVkZW50aWFscyBkYXRhICovCisgICAgaW50IGVuY3J5 cHRpb247CisgICAgaW50IGZsYWdzOworICAgIGludCBhZGRyOworfTsKKworX1BST1RPVFlQKGlu dCBja19rcmI1X2F1dG9nZXRfVEdULCAoY2hhciAqKSk7CitfUFJPVE9UWVAoaW50IGNrX2tyYjVf aW5pdFRHVCwgKHN0cnVjdCBrcmJfb3BfZGF0YSAqLHN0cnVjdCBrcmI1X2luaXRfZGF0YSAqLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGtyYjRfaW5pdF9kYXRhICop KTsKK19QUk9UT1RZUChpbnQgY2tfa3JiNV9kZXN0cm95LCAoc3RydWN0IGtyYl9vcF9kYXRhICop KTsKK19QUk9UT1RZUChpbnQgY2tfa3JiNV9saXN0X2NyZWRzLCAoc3RydWN0IGtyYl9vcF9kYXRh ICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qga3JiNV9saXN0 X2NyZWRfZGF0YSAqKSk7CitfUFJPVE9UWVAoY2hhciAqIGNrX2tyYjVfZ2V0cmVhbG0sIChjaGFy ICopKTsKK19QUk9UT1RZUChjaGFyICogY2tfa3JiNV9nZXRwcmluY2lwYWwsIChjaGFyICopKTsK K19QUk9UT1RZUChjaGFyICogY2tfa3JiNV9nZXRfY2NfbmFtZSwgKFZPSUQpKTsKKworX1BST1RP VFlQKGludCBja19rcmI0X2F1dG9nZXRfVEdULCAoY2hhciAqKSk7CitfUFJPVE9UWVAoaW50IGNr X2tyYjRfaW5pdFRHVCwgKHN0cnVjdCBrcmJfb3BfZGF0YSAqLHN0cnVjdCBrcmI0X2luaXRfZGF0 YSAqKSk7CitfUFJPVE9UWVAoaW50IGNrX2tyYjRfZGVzdHJveSwgKHN0cnVjdCBrcmJfb3BfZGF0 YSAqKSk7CitfUFJPVE9UWVAoaW50IGNrX2tyYjRfbGlzdF9jcmVkcywgKHN0cnVjdCBrcmJfb3Bf ZGF0YSAqKSk7CitfUFJPVE9UWVAoY2hhciAqIGNrX2tyYjRfZ2V0cmVhbG0sIChWT0lEKSk7Citf UFJPVE9UWVAoY2hhciAqIGNrX2tyYjRfZ2V0cHJpbmNpcGFsLCAoVk9JRCkpOworCitfUFJPVE9U WVAoaW50IGNrX2tyYjRfZ2V0X3RrdHMsIChWT0lEKSk7CitfUFJPVE9UWVAoY2hhciAqIGNrX2ty YjRfZ2V0X25leHRfdGt0LCAoVk9JRCkpOworX1BST1RPVFlQKGludCBja19rcmI0X3RrdF9pc3Zh bGlkLChjaGFyICopKTsKK19QUk9UT1RZUChpbnQgY2tfa3JiNF9pc190Z3RfdmFsaWQsKFZPSUQp KTsKK19QUk9UT1RZUChpbnQgY2tfa3JiNF90a3RfdGltZSwoY2hhciAqKSk7CisKK19QUk9UT1RZ UChpbnQgY2tfa3JiNV9nZXRfdGt0cywgKGNoYXIgKikpOworX1BST1RPVFlQKGNoYXIgKiBja19r cmI1X2dldF9uZXh0X3RrdCwgKFZPSUQpKTsKK19QUk9UT1RZUChpbnQgY2tfa3JiNV90a3RfaXN2 YWxpZCwoY2hhciAqLGNoYXIgKikpOworX1BST1RPVFlQKGNoYXIgKiBja19rcmI1X3RrdF9mbGFn cywoY2hhciAqLGNoYXIgKikpOworX1BST1RPVFlQKGludCBja19rcmI1X2lzX3RndF92YWxpZCwo Vk9JRCkpOworX1BST1RPVFlQKGludCBja19rcmI1X3RrdF90aW1lLChjaGFyICosY2hhciAqKSk7 CisKK19QUk9UT1RZUChpbnQga3JiNF9kZXNfYXZhaWwsKGludCkpOworX1BST1RPVFlQKGludCBr cmI0X2Rlc193cml0ZSwoaW50LGNoYXIgKixpbnQpKTsKK19QUk9UT1RZUChpbnQga3JiNF9kZXNf cmVhZCwgKGludCxjaGFyICosaW50KSk7CitfUFJPVE9UWVAoaW50IGtyYjVfZGVzX2F2YWlsLChp bnQpKTsKK19QUk9UT1RZUChpbnQga3JiNV9kZXNfd3JpdGUsKGludCxjaGFyICosaW50LGludCkp OworX1BST1RPVFlQKGludCBrcmI1X2Rlc19yZWFkLCAoaW50LGNoYXIgKixpbnQsaW50KSk7Citf UFJPVE9UWVAoaW50IGtyYjVfdTJ1X2F2YWlsLChpbnQpKTsKK19QUk9UT1RZUChpbnQga3JiNV91 MnVfd3JpdGUsKGludCxjaGFyICosaW50KSk7CitfUFJPVE9UWVAoaW50IGtyYjVfdTJ1X3JlYWQs IChpbnQsY2hhciAqLGludCkpOworX1BST1RPVFlQKGludCBrNV91c2VyX3RvX3VzZXJfc2VydmVy X2F1dGgsKFZPSUQpKTsKK19QUk9UT1RZUChpbnQgazVfdXNlcl90b191c2VyX2NsaWVudF9hdXRo LChWT0lEKSk7CisjZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KKworX1BST1RPVFlQKGludCBja19r cmI1X2lzX2luc3RhbGxlZCwodm9pZCkpOworX1BST1RPVFlQKGludCBja19rcmI0X2lzX2luc3Rh bGxlZCwodm9pZCkpOworX1BST1RPVFlQKGludCBja19zcnBfaXNfaW5zdGFsbGVkLCh2b2lkKSk7 CitfUFJPVE9UWVAoaW50IGNrX250bG1faXNfaW5zdGFsbGVkLCh2b2lkKSk7CitfUFJPVE9UWVAo aW50IGNrX2NyeXB0X2lzX2luc3RhbGxlZCwodm9pZCkpOworX1BST1RPVFlQKGludCBja19zc2xl YXlfaXNfaW5zdGFsbGVkLCh2b2lkKSk7CitfUFJPVE9UWVAoaW50IGNrX2dzc2FwaV9pc19pbnN0 YWxsZWQsKHZvaWQpKTsKK19QUk9UT1RZUChpbnQgY2tfa3J5cHRvX2lzX2luc3RhbGxlZCwodm9p ZCkpOworCitfUFJPVE9UWVAoVk9JRCBja19lbmNyeXB0X3NlbmRfc3VwcG9ydCwoVk9JRCkpOwor X1BST1RPVFlQKGludCBja19nZXRfY3J5cHRfdGFibGUsKHN0cnVjdCBrZXl0YWIgKiosIGludCAq KSk7CitfUFJPVE9UWVAoY2hhciAqIGNrX2tyYjRfcmVhbG1vZmhvc3QsKGNoYXIgKikpOworX1BS T1RPVFlQKGNoYXIgKiBja19rcmI1X3JlYWxtb2Zob3N0LChjaGFyICopKTsKKworI2RlZmluZSBG T1JXQVJEICAvKiBhbGxvdyBmb3J3YXJkaW5nIG9mIGNyZWRlbnRpYWwgKi8KKyNpZmRlZiBGT1JX QVJECitfUFJPVE9UWVAoaW50IGtlcmJlcm9zNV9mb3J3YXJkLChWT0lEKSk7CisjZW5kaWYgLyog Rk9SV0FSRCAqLworCisjZGVmaW5lIEFVVEhUWVBMU1RTWiA4CisjZW5kaWYgLypLUkI1X0tFUk1J VF9IKi8KCmRpZmYgLS1naXQgYS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAy L2NrdWJ3ci50eHQgYi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdWJ3 ci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhiMDY0YQotLS0gL2Rl di9udWxsCisrKyBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1Yndy LnR4dApAQCAtMCwwICsxLDUzNjMgQEAKKworICAgWzFdVGhlIENvbHVtYmlhIENyb3duIFRoZSBL ZXJtaXQgUHJvamVjdCB8IENvbHVtYmlhIFVuaXZlcnNpdHkKKyAgIDYxMiBXZXN0IDExNXRoIFN0 cmVldCwgTmV3IFlvcmsgTlkgMTAwMjUgVVNBIG8gWzJda2VybWl0QGNvbHVtYmlhLmVkdQorICAg Li4uc2luY2UgMTk4MQorICAgWzNdSG9tZSBbNF1LZXJtaXQgOTUgWzVdQy1LZXJtaXQgWzZdU2Ny aXB0cyBbN11DdXJyZW50IFs4XU5ldyBbOV1GQVEKKyAgIFsxMF1TdXBwb3J0CisKK0MtS2VybWl0 IFVuaXggSGludHMgYW5kIFRpcHMKKworICAgICBGcmFuayBkYSBDcnV6CisgICAgIFsxMV1UaGUg S2VybWl0IFByb2plY3QsIFsxMl1Db2x1bWJpYSBVbml2ZXJzaXR5CisKKyAgIEFzIG9mOiBDLUtl cm1pdCA5LjAuMzAyLCAyMCBBdWd1c3QgMjAxMQorICAgVGhpcyBwYWdlIGxhc3QgdXBkYXRlZDog U3VuIEF1ZyAyMSAxMjowODo1MiAyMDExIChOZXcgWW9yayBVU0EgVGltZSkKKworICAgICBJRiBZ T1UgQVJFIFJFQURJTkcgQSBQTEFJTi1URVhUIHZlcnNpb24gb2YgdGhpcyBkb2N1bWVudCwgbm90 ZSBpdCBpcworICAgICBhIHBsYWluLXRleHQgZHVtcCBvZiBhIFdlYiBwYWdlLiBZb3UgY2FuIHZp c2l0IHRoZSBvcmlnaW5hbCAoYW5kCisgICAgIHBvc3NpYmx5IG1vcmUgdXAtdG8tZGF0ZSkgV2Vi IHBhZ2UgaGVyZToKKworICBbMTNdaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3 ci5odG1sCisKKyAgICAgU2luY2UgdGhlIG1hdGVyaWFsIGluIHRoaXMgZmlsZSBoYXMgYmVlbiBh Y2N1bXVsYXRpbmcgc2luY2UgMTk4NSwKKyAgICAgc29tZSAobXVjaCkgb2YgaXQgbWlnaHQgYmUg ZGF0ZWQuCisKK0tub3duIHByb2JsZW1zIHdpdGggQy1LZXJtaXQgOS4wCisKKyAgICAgKiBEb21h aW4gbmFtZSByZXNvbHV0aW9uIGRvZXMgbm90IHdvcmsgaW4gU29sYXJpcyAxMCBvciAxMSAoZml4 ZWQgaW4KKyAgICAgICBbMTRdOS4wLjMwMSkuCisgICAgICogVVVDUCBsb2NrZmlsZSBmYWlsdXJl IGluIEZyZWVCU0QgOCAoZml4ZWQgaW4gWzE1XTkuMC4zMDIpLgorICAgICAqIEJ1aWxkIGZhaWx1 cmUgRnJlZUJTRCA5IChmaXhlZCBpbiBbMTZdOS4wLjMwMikuCisgICAgICogT3BlbmluZyBuZXcg U1NIIHNlc3Npb25zIGFmdGVyIGNsb3NpbmcgcHJldmlvdXMgb25lcyBzb21ldGltZXMKKyAgICAg ICBmYWlscy4KKyAgICAgKiBIZWltZGFsIEtlcmJlcm9zIG5vdCBzdXBwb3J0ZWQuCisKKyAgIFsg WzE3XUMtS2VybWl0IF0gWyBbMThdSW5zdGFsbGF0aW9uIEluc3RydWN0aW9ucyBdIFsgWzE5XVRV VE9SSUFMIF0KKworQ09OVEVOVFMKKworICAgIDEuIFsyMF1JTlRST0RVQ1RJT04KKyAgICAyLiBb MjFdUFJFQlVJTFQgQy1LRVJNSVQgQklOQVJJRVMKKyAgICAzLiBbMjJdUExBVEZPUk0tU1BFQ0lG SUMgTk9URVMKKyAgICA0LiBbMjNdR0VORVJBTCBVTklYLVNQRUNJRklDIExJTUlUQVRJT05TIEFO RCBCVUdTCisgICAgNS4gWzI0XUlOSVRJQUxJWkFUSU9OIEFORCBDT01NQU5EIEZJTEVTCisgICAg Ni4gWzI1XUNPTU1VTklDQVRJT04gU1BFRUQgU0VMRUNUSU9OCisgICAgNy4gWzI2XUNPTU1VTklD QVRJT05TIEFORCBESUFMSU5HCisgICAgOC4gWzI3XUhBUkRXQVJFIEZMT1cgQ09OVFJPTAorICAg IDkuIFsyOF1URVJNSU5BTCBDT05ORUNUSU9OIEFORCBLRVkgTUFQUElORworICAgMTAuIFsyOV1G SUxFIFRSQU5TRkVSCisgICAxMS4gWzMwXUVYVEVSTkFMIEZJTEUgVFJBTlNGRVIgUFJPVE9DT0xT CisgICAxMi4gWzMxXVNFQ1VSSVRZCisgICAxMy4gWzMyXU1JU0NFTExBTkVPVVMgVVNFUiBSRVBP UlRTCisgICAxNC4gWzMzXVRISVJELVBBUlRZIERSSVZFUlMKKworICAgUXVpY2sgTGlua3M6ICAg WyBbMzRdTGludXggXSBbIFszNV0qQlNEIF0gW1szNl1NYWMgT1MgWF0gWyBbMzddQUlYIF0gWwor ICAgWzM4XUhQLVVYIF0gWyBbMzldU29sYXJpcyBdIFsgWzQwXVNDTyBdCisKKzEuIElOVFJPRFVD VElPTgorCisgICBbIFs0MV1Ub3AgXSBbIFs0Ml1Db250ZW50cyBdIFsgWzQzXU5leHQgXQorCisg ICBTRUNUSU9OIENPTlRFTlRTCisKKyAgMS4xLiBbNDRdRG9jdW1lbnRhdGlvbgorICAxLjIuIFs0 NV1UZWNobmljYWwgU3VwcG9ydAorICAxLjMuIFs0Nl1UaGUgWWVhciAyMDAwCisgIDEuNC4gWzQ3 XVRoZSBFdXJvCisKKyAgIFRISVMgSVMgV0hBVCBVU0VEIFRPIEJFIENBTExFRCB0aGUgImJld2Fy ZSBmaWxlIiBmb3IgdGhlIFVuaXggdmVyc2lvbgorICAgb2YgQy1LZXJtaXQsIHByZXZpb3VzbHkg ZGlzdHJpYnV0ZWQgYXMgY2t1YndyLnR4dCBhbmQsIGJlZm9yZSB0aGF0LCBhcworICAgY2t1a2Vy LmJ3ciwgYWZ0ZXIgdGhlIGZhc2hpb24gb2Ygb2xkIERpZ2l0YWwgRXF1aXBtZW50IENvcnBvcmF0 aW9uCisgICAoREVDKSBzb2Z0d2FyZSByZWxlYXNlcyB0aGF0IGNhbWUgd2l0aCByZWxlYXNlIG5v dGVzIChkZXNjcmliaW5nIHdoYXQKKyAgIGhhZCBjaGFuZ2VkKSBhbmQgYSAiYmV3YXJlIGZpbGUi IGxpc3Rpbmcga25vd24gYnVncywgbGltaXRhdGlvbnMsCisgICAibm9uLWdvYWxzIiwgYW5kIHRo aW5ncyB0byB3YXRjaCBvdXQgZm9yLiBUaGUgQy1LZXJtaXQgYmV3YXJlIGZpbGUgaGFzCisgICBi ZWVuIGFjY3VtdWxhdGluZyBzaW5jZSAxOTg1LCBhbmQgaXQgYXBwbGllcyB0byBtYW55IGRpZmZl cmVudCBoYXJkd2FyZQorICAgcGxhdGZvcm1zIGFuZCBvcGVyYXRpbmcgc3lzdGVtcywgYW5kIG1h bnkgdmVyc2lvbnMgb2YgdGhlbSwgc28gaXQgaXMKKyAgIHF1aXRlIGxhcmdlLiBQcmlvciB0byBD LUtlcm1pdCA4LjAsIGl0IHdhcyBkaXN0cmlidXRlZCBvbmx5IGluCisgICBwbGFpbi10ZXh0IGZv cm1hdC4gTm93IGl0IGlzIGF2YWlsYWJsZSBhcyBhIFdlYiBkb2N1bWVudCB3aXRoIGxpbmtzLAor ICAgaW50ZXJuYWwgY3Jvc3MgcmVmZXJlbmNlcywgYW5kIHNvIG9uLCB0byBtYWtlIGl0IGVhc2ll ciB0byB1c2UuCisKKyAgIFRoaXMgZG9jdW1lbnQgYXBwbGllcyB0byBVbml4IEMtS2VybWl0IGlu IGdlbmVyYWwsIGFzIHdlbGwgYXMgdG8KKyAgIHNwZWNpZmljIFVuaXggdmFyaWF0aW9ucyBsaWtl IFs0OF1MaW51eCwgWzQ5XUFJWCwgWzUwXUhQLVVYLAorICAgWzUxXVNvbGFyaXMsIGFuZCBzbyBv biwgYW5kIHNob3VsZCBiZSByZWFkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlCisgICBbNTJdcGxh dGZvcm0taW5kZXBlbmRlbnQgQy1LZXJtaXQgYmV3YXJlIGZpbGUsIHdoaWNoIGNvbnRhaW5zIHNp bWlsYXIKKyAgIGluZm9ybWF0aW9uLCBidXQgYXBwbHlpbmcgdG8gYWxsIHZlcnNpb25zIG9mIEMt S2VybWl0IChWTVMsIFdpbmRvd3MsCisgICBPUy8yLCBBT1MvVlMsIFZPUywgZXRjLCBhcyB3ZWxs IGFzIHRvIFVuaXgpLgorCisgICBUaGVyZSBpcyBtdWNoIGluIHRoaXMgZG9jdW1lbnQgdGhhdCBp cyAob25seSkgb2YgaGlzdG9yaWNhbCBpbnRlcmVzdC4KKyAgIFRoZSBuYXZpZ2F0aW9uIGxpbmtz IHNob3VsZCBoZWxwIHlvdSBza2lwIGRpcmVjdGx5IHRvIHRoZSBzZWN0aW9ucyB0aGF0CisgICBh cmUgcmVsZXZhbnQgdG8geW91LiBOdW1lcm91cyBvZmZzaXRlIFdlYiBsaW5rcyBhcmUgc3VwcG9z ZWQgdG8gbGVhZCB0bworICAgZnVydGhlciBpbmZvcm1hdGlvbiBidXQsIGFzIHlvdSBrbm93LCBX ZWIgbGlua3MgZ28gc3RhbGUgZnJlcXVlbnRseSBhbmQKKyAgIHdpdGhvdXQgd2FybmluZy4gSWYg eW91IGNhbiBzdXBwbHkgYWRkaXRpb25hbCwgY29ycmVjdGVkLCB1cGRhdGVkLCBvcgorICAgYmV0 dGVyIFdlYiBsaW5rcywgcGxlYXNlIGZlZWwgZnJlZSB0byBbNTNdbGV0IG1lIGtub3cuCisKKzEu MS4gRG9jdW1lbnRhdGlvbgorCisgICBbIFs1NF1Ub3AgXSBbIFs1NV1Db250ZW50cyBdIFsgWzU2 XU5leHQgXQorCisgICBDLUtlcm1pdCA2LjAgaXMgZG9jdW1lbnRlZCBpbiB0aGUgYm9vayBbNTdd VXNpbmcgQy1LZXJtaXQsIFNlY29uZAorICAgRWRpdGlvbiwgYnkgRnJhbmsgZGEgQ3J1eiBhbmQg Q2hyaXN0aW5lIE0uIEdpYW5vbmUsIERpZ2l0YWwgUHJlc3MsCisgICBCdXJsaW5ndG9uLCBNQSwg VVNBLCBJU0JOIDEtNTU1NTgtMTY0LTEgKDE5OTcpLCA2MjIgcGFnZXMuIFRoaXMgcmVtYWlucwor ICAgdGhlIGRlZmluaXRpdmUgQy1LZXJtaXQgZG9jdW1lbnRhdGlvbi4gVW50aWwgdGhlIHRoaXJk IGVkaXRpb24gaXMKKyAgIHB1Ymxpc2hlZCAoc29ycnksIHRoZXJlIGlzIG5vIGZpcm0gdGltZWZy YW1lIGZvciB0aGlzKSwgcGxlYXNlIGFsc28KKyAgIHJlZmVyIHRvOgorCisgICBbNThdU3VwcGxl bWVudCB0byBVc2luZyBDLUtlcm1pdCwgU2Vjb25kIEVkaXRpb24sIEZvciBDLUtlcm1pdCA3LjAK KyAgICAgICAgICBUaG9yb3VnaCBkb2N1bWVudGF0aW9uIG9mIGZlYXR1cmVzIG5ldyB0byB2ZXJz aW9uIDcuMC4KKworICAgWzU5XVN1cHBsZW1lbnQgdG8gVXNpbmcgQy1LZXJtaXQsIFNlY29uZCBF ZGl0aW9uLCBGb3IgQy1LZXJtaXQgOC4wCisgICAgICAgICAgVGhvcm91Z2ggZG9jdW1lbnRhdGlv biBvZiBmZWF0dXJlcyBuZXcgdG8gdmVyc2lvbiA4LjAuCisKKyAgIFs2MF1TdXBwbGVtZW50IHRv IFVzaW5nIEMtS2VybWl0LCBTZWNvbmQgRWRpdGlvbiwgRm9yIEMtS2VybWl0IDkuMAorICAgICAg ICAgIFRob3JvdWdoIGRvY3VtZW50YXRpb24gb2YgZmVhdHVyZXMgbmV3IHRvIHZlcnNpb24gOS4w LgorCisxLjIuIFRlY2huaWNhbCBTdXBwb3J0CisKKyAgIFsgWzYxXVRvcCBdIFsgWzYyXUNvbnRl bnRzIF0gWyBbNjNdU2VjdGlvbiBDb250ZW50cyBdIFsgWzY0XU5leHQgXSBbCisgICBbNjVdUHJl dmlvdXMgXQorCisgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIGdldCB0ZWNobmljYWwgc3Vw cG9ydCwgcGxlYXNlIHZpc2l0OgorCisgICAgWzY2XWh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9zdXBwb3J0Lmh0bWwKKworMS4zLiBUaGUgWWVhciAyMDAwCisKKyAgIFsgWzY3XVRvcCBd IFsgWzY4XUNvbnRlbnRzIF0gWyBbNjldU2VjdGlvbiBDb250ZW50cyBdIFsgWzcwXU5leHQgXSBb CisgICBbNzFdUHJldmlvdXMgXQorCisgICBUaGUgVW5peCB2ZXJzaW9uIG9mIEMtS2VybWl0LCBy ZWxlYXNlIDYuMCBhbmQgbGF0ZXIsIGlzICJZZWFyIDIwMDAKKyAgIGNvbXBsaWFudCIsIGJ1dCBv bmx5IGlmIHRoZSB1bmRlcmx5aW5nIG9wZXJhdGluZyBzeXN0ZW0gaXMgdG9vLiBDb250YWN0Cisg ICB5b3VyIFVuaXggb3BlcmF0aW5nIHN5c3RlbSB2ZW5kb3IgdG8gZmluZCBvdXQgd2hpY2ggb3Bl cmF0aW5nIHN5c3RlbQorICAgdmVyc2lvbnMsIHBhdGNoZXMsIGhhcmR3YXJlLCBhbmQvb3IgdXBk YXRlcyBhcmUgcmVxdWlyZWQuIChRdWl0ZSBhIGZldworICAgb2xkIFVuaXhlcyBhcmUgc3RpbGwg aW4gb3BlcmF0aW9uIGluIHRoZSBuZXcgbWlsbGVuaXVtLCBidXQgd2l0aCB0aGVpcgorICAgZGF0 ZSBzZXQgMjggeWVhcnMgaW4gdGhlIHBhc3Qgc28gYXQgbGVhc3QgdGhlIG5vbi15ZWFyIHBhcnRz IG9mIHRoZQorICAgY2FsZW5kYXIgYXJlIGNvcnJlY3QuKQorCisgICBBcyBvZiBDLUtlcm1pdCA2 LjAgKDYgU2VwdGVtYmVyIDE5OTYpLCBwb3N0LW1pbGxlbml1bSBmaWxlIGRhdGVzIGFyZQorICAg cmVjb2duaXplZCwgdHJhbnNtaXR0ZWQsIHJlY2VpdmVkLCBhbmQgcmVwcm9kdWNlZCBjb3JyZWN0 bHkgZHVyaW5nIHRoZQorICAgZmlsZSB0cmFuc2ZlciBwcm9jZXNzIGluIEMtS2VybWl0J3MgRmls ZSBBdHRyaWJ1dGUgcGFja2V0cy4gSWYKKyAgIHBvc3QtbWlsbGVuaXVtIGRhdGVzIGFyZSBub3Qg cHJvY2Vzc2VkIGNvcnJlY3RseSBvbiB0aGUgb3RoZXIgZW5kLCBmaWxlCisgICB0cmFuc2ZlciBz dGlsbCB0YWtlcyBwbGFjZSwgYnV0IHRoZSBtb2RpZmljYXRpb24gb3IgY3JlYXRpb24gZGF0ZSBv ZgorICAgdGhlIHJlY2VpdmVkIGZpbGUgbWlnaHQgYmUgaW5jb3JyZWN0LiBUaGUgb25seSBleGNl cHRpb24gd291bGQgYmUgaWYKKyAgIHRoZSAiZmlsZSBjb2xsaXNpb24gdXBkYXRlIiBmZWF0dXJl IGlzIGJlaW5nIHVzZWQgdG8gcHJldmVudAorICAgdW5uZWNlc3NhcnkgdHJhbnNmZXIgb2YgZmls ZXMgdGhhdCBoYXZlIG5vdCBjaGFuZ2VkIHNpbmNlIHRoZSBsYXN0IHRpbWUKKyAgIGEgdHJhbnNm ZXIgdG9vayBwbGFjZTsgaW4gdGhpcyBjYXNlLCBhIGZpbGUgbWlnaHQgYmUgdHJhbnNmZXJyZWQK KyAgIHVubmVjZXNzYXJpbHksIG9yIGl0IG1pZ2h0IG5vdCBiZSB0cmFuc2ZlcnJlZCB3aGVuIGl0 IHNob3VsZCBoYXZlIGJlZW4uCisgICBDb3JyZWN0IG9wZXJhdGlvbiBvZiB0aGUgdXBkYXRlIGZl YXR1cmUgZGVwZW5kcyBvbiBib3RoIEtlcm1pdCBwcm9ncmFtcworICAgaGF2aW5nIHRoZSBjb3Jy ZWN0IGRhdGUgYW5kIHRpbWUuCisKKyAgIE9mIHNlY29uZGFyeSBpbXBvcnRhbmNlIGFyZSB0aGUg dGltZSBzdGFtcHMgaW4gdGhlIHRyYW5zYWN0aW9uIGFuZC9vcgorICAgZGVidWcgbG9ncywgYW5k IHRoZSBkYXRlLXJlbGF0ZWQgc2NyaXB0IHByb2dyYW1taW5nIGNvbnN0cnVjdHMsIHN1Y2ggYXMK KyAgIFx2KGRhdGUpLCBcdihuZGF0ZSksIFx2KGRheSksIFx2KG5kYXkpLCBhbmQgcGVyaGFwcyBh bHNvIHRoZQorICAgdGltZS1yZWxhdGVkIG9uZXMsIFx2KHRpbWUpIGFuZCBcdihudGltZSksIGlu c29mYXIgYXMgdGhleSBtaWdodCBiZQorICAgYWZmZWN0ZWQgYnkgdGhlIGRhdGUuIFRoZSBcdihu ZGF0ZSkgaXMgYSBudW1lcmljLWZvcm1hdCBkYXRlIG9mIHRoZQorICAgZm9ybSB5eXl5bW1kZCwg c3VpdGFibGUgZm9yIGJvdGggbGV4aWNhbCBhbmQgbnVtZXJpYyBjb21wYXJpc29uIGFuZAorICAg c29ydGluZzogZS5nLiAxOTk3MDIwOCBvciAyMDAxMTIzMS4gSWYgdGhlIHVuZGVybHlpbmcgb3Bl cmF0aW5nIHN5c3RlbQorICAgcmV0dXJucyB0aGUgY29ycmVjdCBkYXRlIGluZm9ybWF0aW9uLCB0 aGVzZSB2YXJpYWJsZXMgd2lsbCBoYXZlIHRoZQorICAgcHJvcGVyIHZhbHVlcy4gSWYgbm90LCB0 aGVuIHNjcmlwdHMgdGhhdCBtYWtlIGRlY2lzaW9ucyBiYXNlZCBvbiB0aGVzZQorICAgdmFyaWFi bGVzIG1pZ2h0IG5vdCBvcGVyYXRlIGNvcnJlY3RseS4KKworICAgTW9zdCBkYXRlLXJlbGF0ZWQg Y29kZSBpcyBiYXNlZCB1cG9uIHRoZSBDIExpYnJhcnkgYXNjdGltZSgpIHN0cmluZywKKyAgIHdo aWNoIGFsd2F5cyBoYXMgYSBmb3VyLWRpZ2l0IHllYXIuIEluIFVuaXgsIHRoZSBvbmUgYml0IG9m IGNvZGUgaW4KKyAgIEMtS2VybWl0IHRoYXQgaXMgYW4gZXhjZXB0aW9uIHRvIHRoaXMgcnVsZSBp cyBzZXZlcmFsIGNhbGxzIHRvCisgICBsb2NhbHRpbWUoKSwgd2hpY2ggcmV0dXJucyBhIHBvaW50 ZXIgdG8gYSB0bSBzdHJ1Y3QsIGluIHdoaWNoIHRoZSB5ZWFyCisgICBpcyBwcmVzdW1lZCB0byBi ZSBleHByZXNzZWQgYXMgInllYXJzIHNpbmNlIDE5MDAiLiBUaGUgY29kZSBkZXBlbmRzIG9uCisg ICB0aGlzIGFzc3VtcHRpb24uIEFueSBwbGF0Zm9ybXMgdGhhdCB2aW9sYXRlIGl0IHdpbGwgbmVl ZCBzcGVjaWFsCisgICBjb2RpbmcuIEFzIG9mIHRoaXMgd3JpdGluZywgbm8gc3VjaCBwbGF0Zm9y bXMgYXJlIGtub3duLgorCisgICBDb21tYW5kIGFuZCBzY3JpcHQgcHJvZ3JhbW1pbmcgZnVuY3Rp b25zIHRoYXQgZGVhbCB3aXRoIGRhdGVzIHVzZQorICAgQy1LZXJtaXQgc3BlY2lmaWMgY29kZSB0 aGF0IGFsd2F5cyB1c2VzIGZ1bGwgeWVhcnMuCisKKzEuNC4gVGhlIEV1cm8KKworICAgWyBbNzJd VG9wIF0gWyBbNzNdQ29udGVudHMgXSBbIFs3NF1TZWN0aW9uIENvbnRlbnRzIF0gWyBbNzVdUHJl dmlvdXMgXQorCisgICBDLUtlcm1pdCA3LjAgYW5kIGxhdGVyIHN1cHBvcnQgVW5pY29kZSAoSVNP IDEwNjQ2KSwgSVNPIDg4NTktMTUgTGF0aW4KKyAgIEFscGhhYmV0IDksIFBDIENvZGUgUGFnZSA4 NTgsIFdpbmRvd3MgQ29kZSBQYWdlcyAxMjUwIGFuZCAxMjUxLCBhbmQKKyAgIHBlcmhhcHMgb3Ro ZXIgY2hhcmFjdGVyIHNldHMsIHRoYXQgZW5jb2RlIHRoZSBFdXJvIHN5bWJvbCwgYW5kIGNhbgor ICAgdHJhbnNsYXRlIGFtb25nIHRoZW0gYXMgbG9uZyBhcyBubyBpbnRlcm1lZGlhdGUgY2hhcmFj dGVyLXNldCBpcworICAgaW52b2x2ZWQgdGhhdCBkb2VzIG5vdCBpbmNsdWRlIHRoZSBFdXJvLgor CisyLiBQUkVCVUlMVCBDLUtFUk1JVCBCSU5BUklFUworCisgICBbIFs3Nl1Ub3AgXSBbIFs3N11D b250ZW50cyBdIFsgWzc4XU5leHQgXSBbIFs3OV1QcmV2aW91cyBdCisKKyAgIEl0IGlzIG9mdGVu IGRhbmdlcm91cyB0byBydW4gYSBiaW5hcnkgQy1LZXJtaXQgKG9yIGFueSBvdGhlcikgcHJvZ3Jh bQorICAgYnVpbHQgb24gYSBkaWZmZXJlbnQgY29tcHV0ZXIuIFBhcnRpY3VsYXJseSBpZiB0aGF0 IGNvbXB1dGVyIGhhZCBhCisgICBkaWZmZXJlbnQgQyBjb21waWxlciwgbGlicmFyaWVzLCBvcGVy YXRpbmcgc3lzdGVtIHZlcnNpb24sIHByb2Nlc3NvcgorICAgZmVhdHVyZXMsIGV0YywgYW5kIGVz cGVjaWFsbHkgaWYgdGhlIHByb2dyYW0gd2FzIGJ1aWx0IHdpdGggc2hhcmVkCisgICBsaWJyYXJp ZXMsIGJlY2F1c2UgYXMgc29vbiBhcyB5b3UgdXBkYXRlIHRoZSBsaWJyYXJpZXMgb24geW91ciBz eXN0ZW0sCisgICB0aGV5IG5vIGxvbmdlciBtYXRjaCB0aGUgb25lcyByZWZlcmVuY2VkIGluIHRo ZSBiaW5hcnksIGFuZCB0aGUgYmluYXJ5CisgICBtaWdodCByZWZ1c2UgdG8gbG9hZCB3aGVuIHlv dSBydW4gaXQsIGluIHdoaWNoIGNhc2UgeW91J2xsIHNlZSBlcnJvcgorICAgbWVzc2FnZXMgc2lt aWxhciB0bzoKKworICBDb3VsZCBub3QgbG9hZCBwcm9ncmFtIGtlcm1pdAorICBNZW1iZXIgc2hy NC5vIG5vdCBmb3VuZCBvciBmaWxlIG5vdCBhbiBhcmNoaXZlCisgIENvdWxkIG5vdCBsb2FkIGxp YnJhcnkgbGliY3Vyc2VzLmFbc2hyNC5vXQorICBFcnJvciB3YXM6IE5vIHN1Y2ggZmlsZSBvciBk aXJlY3RvcnkKKworICAgKFRoZXNlIHNhbXBsZXMgYXJlIGZyb20gQUlYLikgVG8gYXZvaWQgdGhp cyBwcm9ibGVtLCB3ZSB0cnkgdG8gYnVpbGQKKyAgIEMtS2VybWl0IHdpdGggc3RhdGljYWxseSBs aW5rZWQgbGlicmFyaWVzIHdoZW5ldmVyIHdlIGNhbiwgYnV0IHRoaXMgaXMKKyAgIGluY3JlYXNp bmdseSBpbXBvc3NpYmxlIGFzIHNoYXJlZCBsaWJyYXJpZXMgYmVjb21lIHRoZSBub3JtLgorCisg ICBJdCBpcyBvZnRlbiBPSyB0byBydW4gYSBiaW5hcnkgYnVpbHQgb24gYW4gZWFybGllciBPUyB2 ZXJzaW9uLCBidXQgaXQKKyAgIGlzIHJhcmVseSBwb3NzaWJsZSAob3Igc2FmZSkgdG8gcnVuIGEg YmluYXJ5IGJ1aWx0IG9uIGEgbGF0ZXIgb25lLCBmb3IKKyAgIGV4YW1wbGUgdG8gcnVuIGEgYmlu YXJ5IGJ1aWx0IHVuZGVyIFNvbGFyaXMgOCBvbiBTb2xhcmlzIDIuNi4gU29tZXRpbWVzCisgICBl dmVuIHRoZSBPUy1vci1saWJyYXJ5IHBhdGNoL0VDTyBsZXZlbCBtYWtlcyBhIGRpZmZlcmVuY2Uu CisKKyAgIEEgcGFydGljdWxhcmx5IGluc2lkaW91cyBwcm9ibGVtIG9jY3VycyB3aGVuIGEgYmlu YXJ5IHdhcyBidWlsdCBvbiBhCisgICB2ZXJzaW9uIG9mIHRoZSBPUyB0aGF0IGhhcyBwYXRjaGVz IGZyb20gdGhlIHZlbmRvciAoZS5nLiB0byBsaWJyYXJpZXMpOworICAgaW4gbWFueSBjYXNlcyB5 b3Ugd29uJ3QgYmUgYWJsZSB0byBydW4gc3VjaCBhIGJpbmFyeSBvbiBhbiB1bnBhdGNoZWQKKyAg IHZlcnNpb24gb2YgdGhlIHNhbWUgcGxhdGZvcm0uCisKKyAgIFdoZW4gaW4gZG91YnQsIGJ1aWxk IEMtS2VybWl0IGZyb20gdGhlIHNvdXJjZSBjb2RlIG9uIHRoZSBjb21wdXRlcgorICAgd2hlcmUg aXQgaXMgdG8gYmUgcnVuIChpZiBwb3NzaWJsZSEpLiBJZiBub3QsIGFzayB1cyBmb3IgYSBiaW5h cnkKKyAgIHNwZWNpZmljIHRvIHlvdXIgY29uZmlndXJhdGlvbi4gV2UgbWlnaHQgaGF2ZSBvbmUs IGFuZCBpZiB3ZSBkb24ndCwgd2UKKyAgIG1pZ2h0IGJlIGFibGUgdG8gZmluZCBzb21lYm9keSB3 aG8gd2lsbCBidWlsZCBvbmUgZm9yIHlvdS4KKworMy4gTk9URVMgT04gU1BFQ0lGSUMgVU5JWCBW RVJTSU9OUworCisgICBbIFs4MF1Ub3AgXSBbIFs4MV1Db250ZW50cyBdIFsgWzgyXU5leHQgXSBb IFs4M11QcmV2aW91cyBdCisKKyAgIFNFQ1RJT04gQ09OVEVOVFMKKworICAzLjAuICBbODRdQy1L RVJNSVQgT04gUEMtQkFTRUQgVU5JWEVTCisgIDMuMS4gIFs4NV1DLUtFUk1JVCBBTkQgQUlYCisg IDMuMi4gIFs4Nl1DLUtFUk1JVCBBTkQgSFAtVVgKKyAgMy4zLiAgWzg3XUMtS0VSTUlUIEFORCBM SU5VWAorICAzLjQuICBbODhdQy1LRVJNSVQgQU5EIE5FWFRTVEVQCisgIDMuNS4gIFs4OV1DLUtF Uk1JVCBBTkQgUU5YCisgIDMuNi4gIFs5MF1DLUtFUk1JVCBBTkQgU0NPCisgIDMuNy4gIFs5MV1D LUtFUk1JVCBBTkQgU09MQVJJUworICAzLjguICBbOTJdQy1LRVJNSVQgQU5EIFNVTk9TCisgIDMu OS4gIFs5M11DLUtFUk1JVCBBTkQgVUxUUklYCisgIDMuMTAuIFs5NF1DLUtFUk1JVCBBTkQgVU5J WFdBUkUKKyAgMy4xMS4gWzk1XUMtS0VSTUlUIEFORCBBUE9MTE8gU1IxMAorICAzLjEyLiBbOTZd Qy1LRVJNSVQgQU5EIFRBTkRZIFhFTklYIDMuMAorICAzLjEzLiBbOTddQy1LRVJNSVQgQU5EIE9T Ri8xIChESUdJVEFMIFVOSVgpIChUUlU2NCBVTklYKQorICAzLjE0LiBbOThdQy1LRVJNSVQgQU5E IFNHSSBJUklYCisgIDMuMTUuIFs5OV1DLUtFUk1JVCBBTkQgVEhFIEJFQk9YCisgIDMuMTYuIFsx MDBdQy1LRVJNSVQgQU5EIERHL1VYCisgIDMuMTcuIFsxMDFdQy1LRVJNSVQgQU5EIFNFUVVFTlQg RFlOSVgKKyAgMy4xOC4gWzEwMl1DLUtFUk1JVCBBTkQge0ZSRUUsT1BFTixORVR9QlNECisgIDMu MTkuIFsxMDNdQy1LRVJNSVQgQU5EIE1BQyBPUyBYCisgIDMuMjAuIFsxMDRdQy1LRVJNSVQgQU5E IENPSEVSRU5UCisKKyAgIFRoZSBmb2xsb3dpbmcgc2VjdGlvbnMgYXBwbHkgdG8gc3BlY2lmaWMg VW5peCB2ZXJzaW9ucy4gTW9zdCBvZiB0aGVtCisgICBjb250YWluIHJlZmVyZW5jZXMgdG8gRkFR cyAoRnJlcXVlbnRseSBBc2tlZCBRdWVzdGlvbnMpLCBidXQgdGhlc2UgdGVuZAorICAgdG8gYmUg ZXBoZW1lcmFsLiBGb3IgcG9zc2libHkgbW9yZSBjdXJyZW50IGluZm9ybWF0aW9uIHNlZToKKwor ICBbMTA1XWh0dHA6Ly93d3cuZmFxcy5vcmcKKyAgWzEwNl1odHRwOi8vYXBsYXdyZW5jZS5jb20v VW5peGFydC9uZXd0b3VuaXguaHRtbAorCisgICBPbmUgdGhyZWFkIHRoYXQgcnVucyB0aHJvdWdo IG1hbnkgb2YgdGhlbSwgYW5kIGltcGxpY2l0bHkgcGVyaGFwcworICAgdGhyb3VnaCBhbGwsIGNv bmNlcm5zIHRoZSBwcm9ibGVtcyB0aGF0IG9jY3VyIHdoZW4gdHJ5aW5nIHRvIGRpYWwgb3V0Cisg ICBvbiBhIHNlcmlhbCBkZXZpY2UgdGhhdCBpcyAoYWxzbykgZW5hYmxlZCBmb3IgZGlhbGluZyBp bi4gVGhlCisgICAic29sdXRpb25zIiB0byB0aGlzIHByb2JsZW0gYXJlIG1hbnksIHZhcmllZCwg ZGl2ZXJzZSwgYW5kIHVzdWFsbHkKKyAgIGdyb3NzLCBpbnZvbHZpbmcgY29uZmlndXJpbmcgdGhl IGRldmljZSBmb3IgYmlkaXJlY3Rpb25hbCB1c2UuIFRoaXMgaXMKKyAgIGRvbmUgaW4gYSBoaWdo bHkgT1MtZGVwZW5kZW50IGFuZCBvZnRlbiBvYnNjdXJlIG1hbm5lciwgYW5kIHRoZSBlZmZlY3Rz CisgICAoZ29vZCBvciBldmlsKSBhcmUgYWxzbyBoaWdobHkgZGVwZW5kZW50IG9uIHRoZSBwYXJ0 aWN1bGFyIE9TIChhbmQKKyAgIGdldHR5IHZhcmlldHksIGV0YykuIE1hbnkgZXhhbXBsZXMgYXJl IGdpdmVuIGluIHRoZSBbMTA3XU9TLXNwZWNpZmljCisgICBzZWN0aW9ucyBiZWxvdy4KKworICAg QW4gaW1wb3J0YW50IHBvaW50IHRvIGtlZXAgaW4gbWluZCBpcyB0aGF0IEMtS2VybWl0IGlzIGEK KyAgIGNyb3NzLXBsYXRmb3JtLCBwb3J0YWJsZSBzb2Z0d2FyZSBwcm9ncmFtLiBJdCB3YXMgbm90 IGRlc2lnbmVkCisgICBzcGVjaWZpY2FsbHkgYW5kIG9ubHkgZm9yIHlvdXIgcGFydGljdWxhciBV bml4IHZlcnNpb24sIG9yIGZvciB0aGF0CisgICBtYXR0ZXIsIGZvciBVbml4IGluIHBhcnRpY3Vs YXIgYXQgYWxsLiBJdCBhbHNvIHJ1bnMgb24gVk1TLCBBT1MvVlMsCisgICBWT1MsIGFuZCBvdGhl ciBub24tVW5peCBwbGF0Zm9ybXMuIEFsbCB0aGUgVW5peCB2ZXJzaW9ucyBvZiBDLUtlcm1pdAor ICAgc2hhcmUgY29tbW9uIGkvbyBtb2R1bGVzLCB3aXRoIGNvbXBpbGUtdGltZSAjaWZkZWYgY29u c3RydWN0aW9ucyB1c2VkCisgICB0byBhY2NvdW50IGZvciB0aGUgZGlmZmVyZW5jZXMgYW1vbmcg dGhlIG1hbnkgVW5peCBwcm9kdWN0cyBhbmQKKyAgIHJlbGVhc2VzLiBJZiB5b3UgdGhpbmsgdGhh dCBDLUtlcm1pdCBpcyBiZWhhdmluZyBiYWRseSBvciBtaXNzaW5nCisgICBzb21ldGhpbmcgb24g eW91ciBwYXJ0aWN1bGFyIFVuaXggdmVyc2lvbiwgeW91IG1pZ2h0IGJlIHJpZ2h0IC0tIHdlCisg ICBjYW4ndCBjbGFpbSB0byBiZSBleHBlcnQgaW4gaHVuZHJlZHMgb2YgZGlmZmVyZW50IE9TIC8g dmVyc2lvbiAvCisgICBoYXJkd2FyZSAvIGxpYnJhcnkgY29tYmluYXRpb25zLiBJZiB5b3UncmUg YSBwcm9ncmFtbWVyLCB0YWtlIGEgbG9vayBhdAorICAgdGhlIHNvdXJjZSBjb2RlIGFuZCBbMTA4 XXNlbmQgdXMgeW91ciBzdWdnZXN0ZWQgZml4ZXMgb3IgY2hhbmdlcy4gT3IKKyAgIGVsc2UganVz dCBbMTA5XXNlbmQgdXMgYSByZXBvcnQgYWJvdXQgd2hhdCBzZWVtcyB0byBiZSB3cm9uZyBhbmQg d2UnbGwKKyAgIHNlZSB3aGF0IHdlIGNhbiBkby4KKworMy4wLiBDLUtFUk1JVCBPTiBQQy1CQVNF RCBVTklYRVMKKworICAgWyBbMTEwXVRvcCBdIFsgWzExMV1Db250ZW50cyBdIFsgWzExMl1TZWN0 aW9uIENvbnRlbnRzIF0gWyBbMTEzXU5leHQgXQorCisgICBBbHNvIHNlZTogWzExNF1odHRwOi8v d3d3LnBjdW5peC5jb20vLgorCisgICBTRUNUSU9OIENPTlRFTlRTCisKKyAgMy4wLjEuIFsxMTVd SW50ZXJydXB0IENvbmZsaWN0cworICAzLjAuMi4gWzExNl1XaW5kb3dzLVNwZWNpZmljIEhhcmR3 YXJlCisgIDMuMC4zLiBbMTE3XU1vZGVtcworICAzLjAuNC4gWzExOF1DaGFyYWN0ZXIgU2V0cwor ICAzLjAuNS4gWzExOV1LZXlib2FyZCwgU2NyZWVuLCBhbmQgTW91c2UgQWNjZXNzCisgIDMuMC42 LiBbMTIwXUxhcHRvcHMKKworMy4wLjEuIEludGVycnVwdCBDb25mbGljdHMKKworICAgWyBbMTIx XVRvcCBdIFsgWzEyMl1Db250ZW50cyBdIFsgWzEyM11TZWN0aW9uIENvbnRlbnRzIF0gWyBbMTI0 XU5leHQgXQorCisgICBQQ3MgYXJlIG5vdCB0aGUgYmVzdCBwbGF0Zm9ybSBmb3IgcmVhbCBvcGVy YXRpbmcgc3lzdGVtcyBsaWtlIFVuaXguIFRoZQorICAgYXJjaGl0ZWN0dXJlIHN1ZmZlcnMgZnJv bSBudW1lcm91cyBkZWZpY2llbmNpZXMsIG5vdCB0aGUgbGVhc3Qgb2Ygd2hpY2gKKyAgIGlzIHRo ZSBzdGlmbGluZ2x5IHNtYWxsIG51bWJlciBvZiBoYXJkd2FyZSBpbnRlcnJ1cHRzIChlaXRoZXIg NyBvciAxNSwKKyAgIG1hbnkgb2Ygd2hpY2ggYXJlIHByZWFsbG9jYXRlZCkuIFRodXMgYWRkaW5n IGRldmljZXMsIHVzaW5nIG11bHRpcGxlCisgICBzZXJpYWwgcG9ydHMsIGV0YywgaXMgYWx3YXlz IGEgY2hhbGxlbmdlIGFuZCBvZnRlbiBhIG5pZ2h0bWFyZS4gVGhlCisgICBmcmVlLWZvci1hbGwg bmF0dXJlIG9mIHRoZSBQQyBtYXJrZXQgYW5kIHRoZSBsYWNrIG9mIHN0YW5kYXJkcyBjb21iaW5l ZAorICAgd2l0aCB0aGUgZGl2ZXJzaXR5IG9mIFVuaXggT1MgdmVyc2lvbnMgbWFrZSBpdCBkaWZm aWN1bHQgdG8gZmluZAorICAgZHJpdmVycyBmb3IgYW55IHBhcnRpY3VsYXIgZGV2aWNlIG9uIGFu eSBwYXJ0aWN1bGFyIHZlcnNpb24gb2YgVW5peC4KKworICAgT2Ygc3BlY2lhbCBpbnRlcmVzdCB0 byBLZXJtaXQgdXNlcnMgaXMgdGhlIGZhY3QgdGhhdCB0aGVyZSBpcyBubworICAgc3RhbmRhcmQg cHJvdmlzaW9uIGluIHRoZSBQQyBhcmNoaXRlY3R1cmUgZm9yIG1vcmUgdGhhbiAyIGNvbW11bmlj YXRpb24KKyAgIChzZXJpYWwpIHBvcnRzLiBDT00zIGFuZCBDT000IChvciBoaWdoZXIpIHdpbGwg bm90IHdvcmsgdW5sZXNzIHlvdSAoYSkKKyAgIGZpbmQgb3V0IHRoZSBoYXJkd2FyZSBhZGRyZXNz IGFuZCBpbnRlcnJ1cHQgZm9yIGVhY2gsIChiKSBmaW5kIG91dCBob3cKKyAgIHRvIHByb3ZpZGUg eW91ciBVbml4IHZlcnNpb24gd2l0aCB0aGlzIGluZm9ybWF0aW9uLCBhbmQgKGMpIGFjdHVhbGx5 CisgICBzZXQgdXAgdGhlIGNvbmZpZ3VyYXRpb24gaW4gdGhlIFVuaXggc3RhcnR1cCBmaWxlcyAo b3Igd2hhdGV2ZXIgb3RoZXIKKyAgIG1ldGhvZCBpcyB1c2VkKS4gV2F0Y2ggb3V0IGZvciBpbnRl cnJ1cHQgY29uZmxpY3RzLCBlc3BlY2lhbGx5IHdoZW4KKyAgIHVzaW5nIGEgc2VyaWFsIG1vdXNl LCBhbmQgZG9uJ3QgZXhwZWN0IHRvIGJlIGFibGUgdG8gdXNlIG1vcmUgdGhhbiB0d28KKyAgIHNl cmlhbCBwb3J0cy4KKworICAgVGhlIHRlY2huaXF1ZXMgZm9yIHJlc29sdmluZyBpbnRlcnJ1cHQg Y29uZmxpY3RzIGFyZSBkaWZmZXJlbnQgZm9yIGVhY2gKKyAgIG9wZXJhdGluZyBzeXN0ZW0gKExp bnV4LCBOZXRCU0QsIGV0YykuIEluIGdlbmVyYWwsIHRoZXJlIGlzIGEKKyAgIGNvbmZpZ3VyYXRp b24gZmlsZSBzb21ld2hlcmUgdGhhdCBsaXN0cyBDT00gcG9ydHMsIHNvbWV0aGluZyBsaWtlIHRo aXM6CisKKyAgY29tMCAgICBhdCBpc2E/IHBvcnQgMHgzZjggaXJxIDQgICAgICAjIERPUyBDT00x CisgIGNvbTEgICAgYXQgaXNhPyBwb3J0IDB4MmY4IGlycSAzICAgICAgIyBET1MgQ09NMgorCisg ICBUaGUgYWRkcmVzcyBhbmQgSVJRIHZhbHVlcyBpbiB0aGlzIGZpbGUgbXVzdCBhZ3JlZSB3aXRo IHRoZSB2YWx1ZXMgaW4KKyAgIHRoZSBQQyBCSU9TIGFuZCB3aXRoIHRoZSBwb3J0cyB0aGVtc2Vs dmVzLCBhbmQgdGhlcmUgbXVzdCBub3QgYmUgbW9yZQorICAgdGhhbiBvbmUgZGV2aWNlIHdpdGgg dGhlIHNhbWUgaW50ZXJydXB0LiBVbmZvcnR1bmF0ZWx5LCBkdWUgdG8gdGhlCisgICBzbWFsbCBu dW1iZXIgb2YgYXZhaWxhYmxlIGludGVycnVwdHMsIGluc3RhbGxpbmcgbmV3IGRldmljZXMgb24g YSBQQworICAgYWxtb3N0IGFsd2F5cyBjcmVhdGVzIGEgY29uZmxpY3QuIEhlcmUgaXMgYSB0eXBp Y2FsIHRhbGUgZnJvbSBhIExpbnV4CisgICB1c2VyIChGcmVkIFNtaXRoKSBhYm91dCBpbnN0YWxs aW5nIGEgdGhpcmQgc2VyaWFsIHBvcnQ6CisKKyAgICAgLi4ucHJvYmxlbXMgY2FuIGNvbWUgZnJv bSBhIG51bWJlciBvZiBjYXVzZXMuIFRoZSBvbmUgSSBmb3VnaHQgd2l0aAorICAgICBmb3Igc29t ZSB0aW1lLCBhbmQgZmluYWxseSBjb25xdWVyZWQsIHdhcyB0aGF0IG15IG1vZGVtIGlzIG9uIGFu CisgICAgIGFkZC1pbiBzZXJpYWwgcG9ydCwgY3VhMy9JUlE1LiBCeSBkZWZhdWx0IElSUTUgaGFz IGEgdmVyeSBsb3cKKyAgICAgcHJpb3JpdHksIGFuZCBkb2VzIG5vdCBnZXQgZW5vdWdoIHNlcnZp Y2UgaW4gdGltZXMgd2hlbiB0aGUgc3lzdGVtCisgICAgIGlzIGJ1c3kgdG8gcHJldmVudCBsb3Np bmcgZGF0YS4gVGhpcyBpbiB0dXJuIGNhdXNlcyBtYW55IHJlc2VuZHMuCisgICAgIFRoZXJlIGFy ZSB0d28gJ2ZpeGVzJyB0aGF0IEkga25vdyBvZiwgb25lIGlzIHRvIHJlbGF4IGhhcmQgZGlzawor ICAgICBpbnRlcnJ1cHQgaG9nZ2luZyBieSB1c2luZyB0aGUgY29ycmVjdCBwYXJhbWV0ZXIgdG8g aGRwYXJtLCBidXQgSQorICAgICBkb24ndCBsaWtlIHRoYXQgb25lIGJlY2F1c2UgdGhlIGhkcGFy bSBtYW4gcGFnZSBpbmRpY2F0ZXMgaXQgaXMKKyAgICAgcmlza3kgdG8gdXNlLiBUaGUgb3RoZXIg b25lLCB0aGUgb25lIEkgdXNlZCwgd2FzIHRvIGdldCAnaXJxdHVuZScKKyAgICAgYW5kIHVzZSBp dCB0byBnaXZlIElSUTUgdGhlIGhpZ2hlc3QgcHJpb3JpdHkgaW5zdGVhZCBvZiBuZWFybHkgdGhl CisgICAgIGxvd2VzdC4gQ29tcGxldGVseSBjdXJlZCB0aGUgcHJvYmxlbS4KKworICAgSGVyZSdz IGFub3RoZXIgb25lIGZyb20gYSBuZXdzZ3JvdXAgcG9zdGluZzoKKworICAgICBBZnRlciBtdWNo IGhhaXIgcHVsbGluZywgSSd2ZSBkaXNjb3ZlcmVkIHdoeSBteSBzZXJpYWwgcG9ydCB3b24ndAor ICAgICB3b3JrLiBBcHBhcmVudGx5IG15IFtQQ10gaGFzIHRocmVlIHNlcmlhbCBkZXZpY2VzICh0 d28gY29tbSBwb3J0cworICAgICBhbmQgYW4gSVIgcG9ydCksIG9mIHdoaWNoIG9ubHkgdHdvIGF0 IGEgdGltZSBjYW4gYmUgYWN0aXZlLiBJIGxvb2tlZAorICAgICBpbiB0aGUgQklPUyBzZXR1cCBh bmQgbm90aWNlZCB0aGF0IHRoZSBJUiBwb3J0IHdhcyBhY3RpdmF0ZWQsIGJ1dAorICAgICBkaWRu J3QgcmVhbGl6ZSBhdCB0aGUgdGltZSB0aGF0IHRoaXMgbWVhbnQgdGhhdCBDT00yIHdhcyB0aGVy ZWJ5CisgICAgIGRlLWFjdGl2YXRlZC4gSSB0dXJuZWQgb2ZmIHRoZSBJUiBwb3J0IGFuZCBub3cg dGhlIHNlcmlhbCBwb3J0IHdvcmtzCisgICAgIGFzIGFkdmVydGlzZWQuCisKKzMuMC4yLiBXaW5k b3dzLVNwZWNpZmljIEhhcmR3YXJlCisKKyAgIFsgWzEyNV1Ub3AgXSBbIFsxMjZdQ29udGVudHMg XSBbIFsxMjddU2VjdGlvbiBDb250ZW50cyBdIFsgWzEyOF1OZXh0IF0KKyAgIFsgWzEyOV1QcmV2 aW91cyBdCisKKyAgIFRvIGNvbXBsaWNhdGUgbWF0dGVycywgdGhlIFBDIHBsYXRmb3JtIGlzIGJl Y29taW5nIGluY3JlYXNpbmdseSBhbmQKKyAgIGluZXhvcmFibHkgV2luZG93cy1vcmllbnRlZC4g TW9yZSBhbmQgbW9yZSBhZGQtb24gZGV2aWNlcyBhcmUgIldpbmRvd3MKKyAgIG9ubHkiIC0tIG1l YW5pbmcgdGhleSBhcmUgaW5jb21wbGV0ZSBhbmQgcmVseSBvbiBwcm9wcmlldGFyeQorICAgV2lu ZG93cy1iYXNlZCBzb2Z0d2FyZSBkcml2ZXJzIHRvIGRvIHRoZSBqb2JzIHRoYXQgeW91IHdvdWxk IGV4cGVjdCB0aGUKKyAgIGRldmljZSBpdHNlbGYgdG8gZG8uIFBDTUNJQSwgUENJLCBvciAiUGx1 Zy1uLVBsYXkiIGRldmljZXMgYXJlIHJhcmVseQorICAgc3VwcG9ydGVkIG9uIFBDLWJhc2VkIFVu aXggdmVyc2lvbnMgc3VjaCBhcyBTQ087IFdpbm1vZGVtcywKKyAgIFdpbnByaW50ZXJzLCBhbmQg dGhlIGxpa2UgYXJlIG5vdCBzdXBwb3J0ZWQgb24gYW55IFVuaXggdmFyaWV0eSAod2l0aAorICAg WzEzMF1hIGZldyBleGNlcHRpb25zKS4gVGhlIHNlbGYtcHJvY2xhaW1lZCBNaWNyb3NvZnQgUEMg OTcgKG9yIGxhdGVyKQorICAgc3RhbmRhcmQgb25seSBtYWtlcyBtYXR0ZXJzIHdvcnNlIHNpbmNl IGl0cyBvbmx5IHB1cnBvc2UgdG8gZW5zdXJlIHRoYXQKKyAgIFBDcyBhcmUgIm9wdGltaXplZCB0 byBydW4gV2luZG93cyA5NSBhbmQgV2luZG93cyBOVCA0LjAgYW5kIGZ1dHVyZQorICAgdmVyc2lv bnMgb2YgdGhlc2Ugb3BlcmF0aW5nIHN5c3RlbXMiLgorCisgICBXaXRoIHRoZSBleGNlcHRpb24g bm90ZWQgKHRoZSBMdWNlbnQgbW9kZW0sIHBlcmhhcHMgYSBoYW5kZnVsIG9mIG90aGVycworICAg YnkgdGhlIHRpbWUgeW91IHJlYWQgdGhpcyksIGRyaXZlcnMgZm9yICJXaW4iIGRldmljZXMgYXJl IGF2YWlsYWJsZQorICAgb25seSBmb3IgV2luZG93cywgc2luY2UgdGhlIFdpbmRvd3MgbWFya2V0 IGR3YXJmcyB0aGF0IG9mIGFueQorICAgcGFydGljdWxhciBVbml4IGJyYW5kLCBhbmQgZm9yIHRo YXQgbWF0dGVyIGFsbCBVbml4ZXMgKG9yIGZvciB0aGF0CisgICBtYXR0ZXIsIGFsbCBub24tV2lu ZG93cyBvcGVyYXRpbmcgc3lzdGVtcykgY29tYmluZWQuIElmIHlvdXIgdmVyc2lvbiBvZgorICAg VW5peCAoU0NPLCBMaW51eCwgQlNESSwgRnJlZUJTRCwgZXRjKSBkb2VzIG5vdCBzdXBwb3J0IGEg cGFydGljdWxhcgorICAgZGV2aWNlLCB0aGVuIEMtS2VybWl0IGNhbid0IHVzZSBpdCBlaXRoZXIu IEMtS2VybWl0LCBsaWtlIGFueSBVbml4CisgICBhcHBsaWNhdGlvbiwgbXVzdCBhY2Nlc3MgYWxs IGRldmljZXMgdGhyb3VnaCBkcml2ZXJzIGFuZCBub3QgZGlyZWN0bHkKKyAgIGJlY2F1c2UgVW5p eCBpcyBhIHJlYWwgb3BlcmF0aW5nIHN5c3RlbS4KKworICAgRG9uJ3Qgd2FzdGUgdGltZSB0aGlu a2luZyB0aGF0IHlvdSwgb3IgYW55Ym9keSBlbHNlLCBjb3VsZCB3cml0ZSBhCisgICBMaW51eCAo b3Igb3RoZXIgVW5peCkgZHJpdmVyIGZvciBhIFdpbm1vZGVtIG9yIG90aGVyICJXaW4iIGRldmlj ZS4KKyAgIEZpcnN0IG9mIGFsbCwgdGhlc2UgZGV2aWNlcyBnZW5lcmFsbHkgcmVxdWlyZSByZWFs dGltZSBjb250cm9sLCBidXQKKyAgIHNpbmNlIFVuaXggaXMgYSB0cnVlIG11bHRpdGFza2luZyBv cGVyYXRpbmcgc3lzdGVtLCByZWFsdGltZSBkZXZpY2UKKyAgIGNvbnRyb2wgaXMgbm90IHBvc3Np YmxlIG91dHNpZGUgdGhlIGtlcm5lbC4gU2Vjb25kLCB0aGUgc3BlY2lmaWNhdGlvbnMKKyAgIGZv ciB0aGVzZSBkZXZpY2VzIGFyZSBzZWNyZXQgYW5kIHByb3ByaWV0YXJ5LCBhbmQgZWFjaCBvbmUg KGFuZCBlYWNoCisgICB2ZXJzaW9uIG9mIGVhY2ggb25lKSBpcyBwb3RlbnRpYWxseSBkaWZmZXJl bnQuIFRoaXJkLCBhIFdpbm1vZGVtIGRyaXZlcgorICAgd291bGQgYmUgZW5vcm1vdXNseSBjb21w bGV4OyBpdCB3b3VsZCB0YWtlIHllYXJzIHRvIHdyaXRlIGFuZCBkZWJ1ZywgYnkKKyAgIHdoaWNo IHRpbWUgaXQgd291bGQgYmUgb2Jzb2xldGUuCisKKyAgIEEgbW9yZSByZWNlbnQgZ2VuZXJhdGlv biBvZiBQQ3MgKGNpcmNhIDE5OTktMjAwMCkgaXMgbWFya2V0ZWQgYXMKKyAgICJMZWdhY3kgRnJl ZSIuIE9uZSBjYW4gb25seSBzcGVjdWxhdGUgd2hhdCB0aGF0IGNvdWxkIG1lYW4uIE1vc3QgbGlr ZWx5CisgICBpdCBtZWFucyBpdCB3aWxsIE9OTFkgcnVuIHRoZSB2ZXJ5IGxhdGVzdCB2ZXJzaW9u cyBvZiBXaW5kb3dzLCBhbmQgaXMKKyAgIG1hZGUgZXhjbHVzaXZlbHkgb2YgV2lubW9kZW1zLCBX aW5wcmludGVycywgV2lubWVtb3J5LCBhbmQgV2luLUNQVS1mYW5zCisgICAoTGVnYWN5IEZyZWUg aXMgYSBjb25jZXB0IFsxMzFdcGlvbmVlcmVkIGJ5IE1pY3Jvc29mdCkuCisKKyAgIEJlZm9yZSB5 b3UgYnV5IGEgbmV3IFBDIG9yIGFkZC1vbiBlcXVpcG1lbnQsIGVzcGVjaWFsbHkgc2VyaWFsIHBv cnRzLAorICAgaW50ZXJuYWwgbW9kZW1zLCBvciBwcmludGVycywgbWFrZSBzdXJlIHRoZXkgYXJl IGNvbXBhdGlibGUgd2l0aCB5b3VyCisgICB2ZXJzaW9uIG9mIFVuaXguIFRoaXMgaXMgYmVjb21p bmcgYW4gZXZlci1ncmVhdGVyIGNoYWxsZW5nZTsgb25seSBhCisgICBodWdlIGNvbXBhbnkgbGlr ZSBNaWNyb3NvZnQgY2FuIGFmZm9yZCB0byBiZSBjb25zdGFudGx5IGNyYW5raW5nIG91dAorICAg YW5kL29yIHZlcmlmeWluZyBkcml2ZXJzIGZvciB0aGUgdGhvdXNhbmRzIG9mIHZpZGVvIGJvYXJk cywgc291bmQKKyAgIGNhcmRzLCBuZXR3b3JrIGFkYXB0ZXJzLCBTQ1NJIGFkYXB0ZXJzLCBidXNl cywgZXRjLCB0aGF0IHNwZXcgZm9ydGggaW4KKyAgIGFuIHVuY29udHJvbGxlZCBtYW5uZXIgZnJv bSBhbGwgY29ybmVycyBvZiB0aGUgd29ybGQgb24gYSBkYWlseSBiYXNpcy4KKyAgIFdpdGggdmVy eSBmZXcgZXhjZXB0aW9ucywgbWFrZXJzIG9mIFBDcyBhc3NlbWJsZSB0aGUgdmFyaW91cyBjb21w b25lbnRzCisgICBhbmQgdGhlbiB2ZXJpZnkgdGhlbSBvbmx5IHdpdGggV2luZG93cywgd2hpY2gg dGhleSBtdXN0IGRvIHNpbmNlIHRoZXkKKyAgIGFyZSwgbm8gZG91YnQsIHByZWxvYWRpbmcgdGhl IFBDIHdpdGggV2luZG93cy4gVG8gZmluZCBhIG1vZGVybiBQQyB0aGF0CisgICBpcyBjYXBhYmxl IG9mIHJ1bm5pbmcgYSB2YXJpZXR5IG9mIG5vbi1XaW5kb3dzIG9wZXJhdGluZyBzeXN0ZW1zIChl LmcuCisgICBMaW51eCwgU0NPIE9wZW5TZXJ2ZXIsIFVuaXh3YXJlLCBhbmQgU29sYXJpcykgaXMg YSBmb3JtaWRhYmxlIGNoYWxsZW5nZQorICAgcmVxdWlyaW5nIGNhcmVmdWwgc3R1ZHkgb2YgZWFj aCB2ZW5kb3IncyAiY29tcGF0aWJpbGl0eSBsaXN0cyIgYW5kCisgICBwcmVjaXNlIGF0dGVudGlv biB0byBleGFjdCBjb21wb25lbnQgbW9kZWwgbnVtYmVycyBhbmQgcmV2aXNpb24gbGV2ZWxzLgor CiszLjAuMy4gTW9kZW1zCisKKyAgIFsgWzEzMl1Ub3AgXSBbIFsxMzNdQ29udGVudHMgXSBbIFsx MzRdU2VjdGlvbiBDb250ZW50cyBdIFsgWzEzNV1OZXh0IF0KKyAgIFsgWzEzNl1QcmV2aW91cyBd CisKKyAgIEV4dGVybmFsIG1vZGVtcyBhcmUgcmVjb21tZW5kZWQ6CisKKyAgICAgKiBUaGV5IGRv bid0IG5lZWQgYW55IHNwZWNpYWwgZHJpdmVycy4KKyAgICAgKiBZb3UgY2FuIHVzZSB0aGUgbGln aHRzIGFuZCBzcGVha2VyIHRvIHRyb3VibGVzaG9vdCBkaWFsaW5nLgorICAgICAqIFlvdSBjYW4g c2hhcmUgdGhlbSBhbW9uZyBhbGwgdHlwZXMgb2YgY29tcHV0ZXJzLgorICAgICAqIFlvdSBjYW4g ZWFzaWx5IHR1cm4gdGhlbSBvZmYgYW5kIG9uIHdoZW4gcG93ZXItY3ljbGluZyBzZWVtcworICAg ICAgIHdhcnJhbnRlZC4KKyAgICAgKiBUaGV5IGFyZSBtb3JlIGxpa2VseSB0byBoYXZlIG1hbnVh bHMuCisKKyAgIEludGVybmFsIFBDIG1vZGVtcyAoZXZlbiB3aGVuIHRoZXkgYXJlIG5vdCBXaW5t b2RlbXMsIHdoaWNoIGlzCisgICBpbmNyZWFzaW5nbHkgdW5saWtlbHkgaW4gbmV3IFBDcykgYXJl IGFsd2F5cyB0cm91YmxlLCBlc3BlY2lhbGx5IGluCisgICBVbml4LiBFdmVuIHdoZW4gdGhleSB3 b3JrIGZvciBkaWFsaW5nIG91dCwgdGhleSBtaWdodCBub3Qgd29yayBmb3IKKyAgIGRpYWxpbmcg aW4sIGV0Yy4gUHJvYmxlbXMgdGhhdCBvY2N1ciB3aGVuIHVzaW5nIGFuIGludGVybmFsIG1vZGVt IGNhbgorICAgYWxtb3N0IGFsd2F5cyBiZSBlbGltaW5hdGVkIGJ5IHN3aXRjaGluZyB0byBhbiBl eHRlcm5hbCBvbmUuIEV2ZW4gd2hlbgorICAgYW4gaW50ZXJuYWwgbW9kZW0gaXMgbm90IGEgV2lu bW9kZW0gb3IgUGx1Zy1uLVBsYXksIGl0IGlzIG9mdGVuIGEKKyAgIG5vLW5hbWUgbW9kZWwgb2Yg dW5rbm93biBxdWFsaXR5IC0tIG5vdCB0aGUgc29ydCBvZiB0aGluZyB5b3Ugd2FudAorICAgc2l0 dGluZyBkaXJlY3RseSBvbiB5b3VyIGNvbXB1dGVyJ3MgYnVzLiAoRXZlbiBpZiBpdCBkb2VzIG5v dCBjYXVzZQorICAgaGFyZHdhcmUgcHJvYmxlbXMsIGl0IHByb2JhYmx5IGNhbWUgd2l0aG91dCBh IGNvbW1hbmQgbGlzdCwgc28gbm8gVW5peAorICAgc29mdHdhcmUgd2lsbCBrbm93IGhvdyB0byBj b250cm9sIGl0LikgRm9yIG1vcmUgYWJvdXQgVW5peCBjb21wYXRpYmxlCisgICBtb2RlbXMsIHNl ZToKKworICBbMTM3XWh0dHA6Ly93d3cuaWRpci5uZXQvfmdyb21pdGtjL3dpbm1vZGVtLmh0bWwK KworICAgUmVtZW1iZXIgdGhhdCBQQ3MsIGV2ZW4gbm93IC0tIG1vcmUgdGhhbiB0d28gZGVjYWRl cyBhZnRlciB0aGV5IHdlcmUKKyAgIGZpcnN0IGludHJvZHVjZWQgLS0gYXJlIG5vdCAoaW4gZ2Vu ZXJhbCkgY2FwYWJsZSBvZiBzdXBwb3J0aW5nIG1vcmUKKyAgIHRoYW4gMiBzZXJpYWwgZGV2aWNl cy4gSGVyZSdzIGEgc2hvcnQgc3VjY2VzcyBzdG9yeSBmcm9tIGEgcmVjZW50CisgICBuZXdzZ3Jv dXAgcG9zdGluZzogIkkgaGF2ZSBhIERpYW1vbmQgU3VwcmFTb25pYyBJSSBkdWFsIG1vZGVtIGlu IG15CisgICBtYWNoaW5lLiBXaGF0IEkgaGFkIHRvIGVuZCB1cCBkb2luZyBpcyBidXlpbmcgYSBQ Uy8yIG1vdXNlIGFuZCBwb3J0IGFuZAorICAgaW5zdGFsbCBpdC4gSGFkIHRvIGdldCByaWQgb2Yg bXkgc2VyaWFsIG1vdXNlLiBJIGFsc28gaGFkIHRvIGRpc2FibGUKKyAgIFBuUCBpbiBteSBjb21w dXRlciBiaW9zLiBJIHdhcyBoYXZpbmcgSVJRIGNvbmZsaWN0cyBiZXR3ZWVuIG15IHNlcmlhbAor ICAgbW91c2UgYW5kICdjb20gMycuIEJvdGggbW9kZW1zIHdvcmsgZmluZSBmb3IgbWUuIE15IGZp cnN0IG1vZGVtIGlzCisgICB0dHlTMCBhbmQgbXkgc2Vjb25kIGlzIHR0eVMxLiIgU3BlY2lhbCB0 aGlyZC1wYXJ0eSBtdWx0aXBvcnQgYm9hcmRzCisgICBzdWNoIGFzIFsxMzhdRGlnaUJvYXJkIGFy ZSBhdmFpbGFibGUgZm9yIGNlcnRhaW4gVW5peCBwbGF0Zm9ybXMKKyAgICh0eXBpY2FsbHkgU0NP LCBtYXliZSBMaW51eCkgdGhhdCBjb21lIHdpdGggc3BlY2lhbCBwbGF0Zm9ybS1zcGVjaWZpYwor ICAgZHJpdmVycy4KKworMy4wLjQuIENoYXJhY3RlciBTZXRzCisKKyAgIFsgWzEzOV1Ub3AgXSBb IFsxNDBdQ29udGVudHMgXSBbIFsxNDFdU2VjdGlvbiBDb250ZW50cyBdIFsgWzE0Ml1OZXh0IF0K KyAgIFsgWzE0M11QcmV2aW91cyBdCisKKyAgIFBDcyBnZW5lcmFsbHkgaGF2ZSBQQyBjb2RlIHBh Z2VzIHN1Y2ggYXMgQ1A0Mzcgb3IgQ1A4NTAsIGFuZCB0aGVzZSBhcmUKKyAgIG9mdGVuIHVzZWQg YnkgUEMtYmFzZWQgVW5peCBvcGVyYXRpbmcgc3lzdGVtcywgcGFydGljdWxhcmx5IG9uIHRoZQor ICAgY29uc29sZS4gVGhlc2UgYXJlIHN1cHBvcnRlZCBkaXJlY3RseSBieSBDLUtlcm1pdCdzIFNF VCBGSUxFCisgICBDSEFSQUNURVItU0VUIGFuZCBTRVQgVEVSTUlOQUwgQ0hBUkFDVEVSLVNFVCBj b21tYW5kcy4gU29tZSBQQy1iYXNlZAorICAgVW5peCB2ZXJzaW9ucywgc3VjaCBhcyByZWNlbnQg UmVkIEhhdCBMaW51eCByZWxlYXNlcywgbWlnaHQgYWxzbworICAgc3VwcG9ydCBNaWNyb3NvZnQg V2luZG93cyBjb2RlIHBhZ2VzIHN1Y2ggYXMgQ1AxMjUyLCBvciBldmVuIExhdGluCisgICBBbHBo YWJldCAxIGl0c2VsZiAocGVyaGFwcyBkaXNwbGF5ZWQgd2l0aCBDUDQzNyBnbHlwaHMpLiAoQW5k IHdvcmsgaXMKKyAgIGluIHByb2dyZXNzIHRvIHN1cHBvcnQgVW5pY29kZSBVVEY4IGluIExpbnV4 LikKKworICAgQ2VydGFpbiBXaW5kb3dzIGNvZGUgcGFnZXMgYXJlIG5vdCBzdXBwb3J0ZWQgZGly ZWN0bHkgYnkgQy1LZXJtaXQsIGJ1dAorICAgc2luY2UgdGhleSBhcmUgSVNPIExhdGluIEFscGhh YmV0cyB3aXRoIG5vbnN0YW5kYXJkICJleHRlbnNpb25zIiBpbiB0aGUKKyAgIEMxIGNvbnRyb2wg cmFuZ2UsIHlvdSBjYW4gc3Vic3RpdHV0ZSB0aGUgY29ycmVzcG9uZGluZyBMYXRpbiBhbHBoYWJl dAorICAgKG9yIG90aGVyIGNoYXJhY3RlciBzZXQpIGluIGFueSBDLUtlcm1pdCBjaGFyYWN0ZXIt c2V0IHJlbGF0ZWQKKyAgIGNvbW1hbmRzOgorCisgIFdpbmRvd3MgQ29kZSBQYWdlICAgIFN1YnN0 aXR1dGlvbgorICAgQ1AgMTAwNCAgICAgICAgICAgICAgTGF0aW4tMQorICAgQ1AgMTA1MSAgICAg ICAgICAgICAgSFAgUm9tYW4tOAorCisgICBPdGhlciBXaW5kb3dzIGNvZGUgcGFnZXMgYXJlIG1v c3RseSAob3IgdG90YWxseSkgaW5jb21wYXRpYmxlIHdpdGgKKyAgIHRoZWlyIExhdGluIEFscGhh YmV0IGNvdW50ZXJwYXJ0cyAoZS5nLiBDUDEyNTAgYW5kIExhdGluLTIpLCBhbmQKKyAgIHNldmVy YWwgb2YgdGhlc2UgYXJlIGFscmVhZHkgc3VwcG9ydGVkIGJ5IEMtS2VybWl0IDcuMCBhbmQgbGF0 ZXIgKDEyNTAsCisgICAxMjUxLCBhbmQgMTI1MikuCisKKzMuMC41LiBLZXlib2FyZCwgU2NyZWVu LCBhbmQgTW91c2UgQWNjZXNzCisKKyAgIFsgWzE0NF1Ub3AgXSBbIFsxNDVdQ29udGVudHMgXSBb IFsxNDZdU2VjdGlvbiBDb250ZW50cyBdIFsgWzE0N11OZXh0IF0KKyAgIFsgWzE0OF1QcmV2aW91 cyBdCisKKyAgIEZpbmFsbHksIG5vdGUgdGhhdCBhcyBhIHJlYWwgb3BlcmF0aW5nIHN5c3RlbSwg VW5peCAodW5saWtlIFdpbmRvd3MpCisgICBkb2VzIG5vdCBwcm92aWRlIHRoZSBpbnRpbWF0ZSBj b25uZWN0aW9uIHRvIHRoZSBQQyBrZXlib2FyZCwgc2NyZWVuLAorICAgYW5kIG1vdXNlIHRoYXQg eW91IG1pZ2h0IGV4cGVjdC4gVW5peCBhcHBsaWNhdGlvbnMgY2FuIG5vdCAic2VlIiB0aGUKKyAg IGtleWJvYXJkLCBhbmQgdGhlcmVmb3JlIGNhbiBub3QgYmUgcHJvZ3JhbW1lZCB0byB1bmRlcnN0 YW5kIEYta2V5cywKKyAgIEVkaXRpbmcga2V5cywgQXJyb3cga2V5cywgQWx0LWtleSBjb21iaW5h dGlvbnMsIGFuZCB0aGUgbGlrZS4gVGhpcyBpcworICAgYmVjYXVzZToKKworICAgIGEuIFVuaXgg aXMgYSBwb3J0YWJsZSBvcGVyYXRpbmcgc3lzdGVtLCBub3Qgb25seSBmb3IgUENzOworICAgIGIu IFVuaXggc2Vzc2lvbnMgY2FuIGNvbWUgZnJvbSBhbnl3aGVyZSwgbm90IGp1c3QgdGhlIFBDJ3Mg b3duCisgICAgICAga2V5Ym9hcmQgYW5kIHNjcmVlbjsgYW5kOgorICAgIGMuIGV2ZW4gdGhvdWdo IGl0IG1pZ2h0IGJlIHBvc3NpYmxlIGZvciBhbiBhcHBsaWNhdGlvbiB0aGF0IGFjdHVhbGx5Cisg ICAgICAgaXMgcnVubmluZyBvbiB0aGUgUEMncyBrZXlib2FyZCBhbmQgc2NyZWVuIHRvIGFjY2Vz cyB0aGVzZSBkZXZpY2VzCisgICAgICAgZGlyZWN0bHksIHRoZXJlIGFyZSBubyBBUElzIChvdXRz aWRlIG9mIFgpIGZvciB0aGlzLgorCiszLjAuNi4gTGFwdG9wcworCisgICBbIFsxNDldVG9wIF0g WyBbMTUwXUNvbnRlbnRzIF0gWyBbMTUxXVNlY3Rpb24gQ29udGVudHMgXSBbCisgICBbMTUyXVBy ZXZpb3VzIF0KKworICAgKFRvIGJlIGZpbGxlZCBpbiAuIC4gLikKKworMy4xLiBDLUtFUk1JVCBB TkQgQUlYCisKKyAgIFsgWzE1M11Ub3AgXSBbIFsxNTRdQ29udGVudHMgXSBbIFsxNTVdU2VjdGlv biBDb250ZW50cyBdIFsgWzE1Nl1OZXh0IF0KKyAgIFsgWzE1N11QcmV2aW91cyBdCisKKyAgIFNF Q1RJT04gQ09OVEVOVFMKKworICAzLjEuMS4gWzE1OF1BSVg6IEdlbmVyYWwKKyAgMy4xLjIuIFsx NTldQUlYOiBOZXR3b3JrIENvbm5lY3Rpb25zCisgIDMuMS4zLiBbMTYwXUFJWDogU2VyaWFsIENv bm5lY3Rpb25zCisgIDMuMS40LiBbMTYxXUFJWDogRmlsZSBUcmFuc2ZlcgorICAzLjEuNS4gWzE2 Ml1BSVg6IFh0ZXJtIEtleSBNYXAKKworICAgRm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gc2Vl OgorICAgICAqIFsxNjNdaHR0cDovL3d3dy5lbWVyc29uLmVtb3J5LmVkdS9zZXJ2aWNlcy9haXgt ZmFxLworICAgICAqIFsxNjRdaHR0cDovL3d3dy5mYXFzLm9yZy9mYXFzL2J5LW5ld3Nncm91cC9j b21wL2NvbXAudW5peC5haXguaHRtbAorICAgICAqIFsxNjVdaHR0cDovL3d3dy5jaXMub2hpby1z dGF0ZS5lZHUvaHlwZXJ0ZXh0L2ZhcS91c2VuZXQvYWl4LWZhcS90b3AKKyAgICAgICAuaHRtbAor ICAgICAqIFsxNjZdaHR0cDovL2FpeHBkc2xpYi5zZWFzLnVjbGEuZWR1LworICAgICAqIFsxNjdd aHR0cDovL3d3dy5yb290dmcubmV0IChBSVggaGlzdG9yeSkKKyAgICAgKiBbMTY4XWZ0cDovL3J0 Zm0ubWl0LmVkdS9wdWIvdXNlbmV0L25ld3MuYW5zd2Vycy9haXgtZmFxL3BhcnQxCisgICAgICog WzE2OV1mdHA6Ly9taXJyb3JzLmFvbC5jb20vcHViL3J0Zm0vdXNlbmV0LWJ5LWhpZXJhcmNoeS9j b21wL3VuaXgvYQorICAgICAgIGl4CisKKyAgIGFuZC9vciByZWFkIHRoZSBbMTcwXWNvbXAudW5p eC5haXggbmV3c2dyb3VwLgorICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKworMy4xLjEuIEFJWDogR2VuZXJh bAorCisgICBbIFsxNzFdVG9wIF0gWyBbMTcyXUNvbnRlbnRzIF0gWyBbMTczXVNlY3Rpb24gQ29u dGVudHMgXSBbIFsxNzRdTmV4dCBdCisKKyAgIEFib3V0IEFJWCB2ZXJzaW9uIG51bWJlcnM6ICJ1 bmFtZSAtYSIgdGVsbHMgdGhlIHR3by1kaWdpdCB2ZXJzaW9uCisgICBudW1iZXIsIHN1Y2ggYXMg My4yIG9yIDQuMS4gVGhlIHRocmVlLWRpZ2l0IGZvcm0gY2FuIGJlIHNlZW4gd2l0aCB0aGUKKyAg ICJvc2xldmVsIiBjb21tYW5kICh0aGlzIGluZm9ybWF0aW9uIGlzIHVuYXZhaWxhYmxlIGF0IHRo ZSBBUEkgbGV2ZWwgYW5kCisgICBpcyByZXBvcnRlZGx5IG9idGFpbmVkIGJ5IHNjYW5uaW5nIHRo ZSBpbnN0YWxsZWQgcGF0Y2ggbGlzdCkuCisgICBTdXBwb3NlZGx5IGFsbCB0aHJlZS1kaWdpdCB2 ZXJzaW9ucyB3aXRoaW4gdGhlIHNhbWUgdHdvLWRpZ2l0IHZlcnNpb24KKyAgIChlLmcuIDQuMy4x LCA0LjMuMikgYXJlIGJpbmFyeSBjb21wYXRpYmxlOyBpLmUuIGEgYmluYXJ5IGJ1aWx0IG9uIGFu eQorICAgb25lIG9mIHRoZW0gc2hvdWxkIHJ1biBvbiBhbGwgb3RoZXJzLCBidXQgd2hvIGtub3dz LiBNb3N0IEFJWCBhZHZvY2F0ZXMKKyAgIHRlbGwgeW91IHRoYXQgYW55IEFJWCBiaW5hcnkgd2ls bCBydW4gb24gYW55IEFJWCB2ZXJzaW9uIGdyZWF0ZXIgdGhhbgorICAgb3IgZXF1YWwgdG8gdGhl IG9uZSB1bmRlciB3aGljaCBpdCB3YXMgYnVpbHQsIGJ1dCBleHBlcmllbmNlIHdpdGgKKyAgIEMt S2VybWl0IHN1Z2dlc3RzIG90aGVyd2lzZS4gSXQgaXMgYWx3YXlzIGJlc3QgdG8gcnVuIGEgYmlu YXJ5IGJ1aWx0CisgICB1bmRlciB5b3VyIGV4YWN0IHNhbWUgQUlYIHZlcnNpb24sIGRvd24gdG8g dGhlIHRoaXJkIGRlY2ltYWwgcGxhY2UsIGlmCisgICBwb3NzaWJsZS4gSWRlYWxseSwgYnVpbGQg aXQgZnJvbSBzb3VyY2UgY29kZSB5b3Vyc2VsZi4gWWVzLCB0aGlzIGFkdmljZQorICAgd291bGQg YmUgZWFzaWVyIHRvIGZvbGxvdyBpZiBBSVggY2FtZSB3aXRoIGEgQyBjb21waWxlci4KKyAgX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fCisKKzMuMS4yLiBBSVg6IE5ldHdvcmsgQ29ubmVjdGlvbnMKKworICAgWyBb MTc1XVRvcCBdIFsgWzE3Nl1Db250ZW50cyBdIFsgWzE3N11TZWN0aW9uIENvbnRlbnRzIF0gWyBb MTc4XU5leHQgXQorICAgWyBbMTc5XVByZXZpb3VzIF0KKworICAgRmlsZSB0cmFuc2ZlcnMgaW50 byBBSVggNC4yIG9yIDQuMyB0aHJvdWdoIHRoZSBBSVggVGVsbmV0IG9yIFJsb2dpbgorICAgc2Vy dmVyIGhhdmUgYmVlbiBvYnNlcnZlZCB0byBmYWlsIChvciBhY2N1bXVsYXRlIGh1Z2UgbnVtYmVy cyBvZgorICAgY29ycmVjdGFibGUgZXJyb3JzLCBvciBldmVuIGRpc2Nvbm5lY3QgdGhlIHNlc3Np b24pLCB3aGVuIGV4YWN0bHkgdGhlCisgICBzYW1lIGtpbmQgb2YgdHJhbnNmZXJzIGludG8gQUlY IDQuMSB3b3JrIHdpdGhvdXQgaW5jaWRlbnQsIGFzIGRvIHN1Y2gKKyAgIHRyYW5zZmVycyBpbnRv IGFsbCBub24tQUlYIHBsYXRmb3JtcyBvbiB0aGUgc2FtZSBraW5kIG9mIGNvbm5lY3Rpb25zCisg ICAod2l0aCBhIGZldyBleGNlcHRpb25zIG5vdGVkIGVsc2V3aGVyZSBpbiB0aGlzIGRvY3VtZW50 KS4gQUlYIDQuMy4zCisgICBzZWVtcyB0byBiZSBwYXJ0aWN1bGFybHkgZnJhZ2lsZSBpbiB0aGlz IHJlZ2FyZDsgdGhlIHdlYWtuZXNzIHNlZW1zIHRvCisgICBiZSBpbiBpdHMgcHNldWRvdGVybWlu YWwgKHB0eSkgZHJpdmVyLiBIaWdoLXNwZWVkIHN0cmVhbWluZyB0cmFuc2ZlcnMKKyAgIHdvcmsg cGVyZmVjdGx5LCBob3dldmVyLCBpZiB0aGUgQUlYIFRlbG5ldCBzZXJ2ZXIgYW5kIHB0eSBkcml2 ZXIgYXJlCisgICByZW1vdmVkIGZyb20gdGhlIHBpY3R1cmU7IGUuZywgYnkgdXNpbmcgInNldCBo b3N0ICogMzAwMCIgb24gQUlYLgorCisgICBUaGUgcHJvYmxlbSBjYW4gYmUgY29tcGxldGVseSBj dXJlZCBieSByZXBsYWNpbmcgdGhlIElCTSBUZWxuZXQgc2VydmVyCisgICB3aXRoIFsxODBdTUlU J3MgS2VyYmVyb3MgVGVsbmV0IHNlcnZlciAtLSBldmVuIGlmIHlvdSBkb24ndCBhY3R1YWxseQor ICAgdXNlIHRoZSBLZXJiZXJvcyBwYXJ0LiBEaWFnbm9zaXM6IEFJWCBwc2V1ZG90ZXJtaW5hbHMg KHdoaWNoIGFyZQorICAgY29udHJvbGxlZCBieSB0aGUgVGVsbmV0IHNlcnZlciB0byBnaXZlIHlv dSBhIGxvZ2luIHRlcm1pbmFsIGZvciB5b3VyCisgICBzZXNzaW9uKSBoYXZlIHF1aXJrcyB0aGF0 IG5vdCBldmVuIElCTSBrbm93cyBhYm91dC4gVGhlIHNpdHVhdGlvbiB3aXRoCisgICBBSVggNS54 IGlzIG5vdCBrbm93biwgYnV0IGlmIGl0IGhhcyB0aGUgc2FtZSBwcm9ibGVtLCB0aGUgc2FtZSBj dXJlIGlzCisgICBhdmFpbGFibGUuCisKKyAgIE1lYW53aGlsZSwgdGhlIG9ubHkgcmVtZWR5IHdo ZW4gZ29pbmcgdGhyb3VnaCB0aGUgSUJNIFRlbG5ldCBzZXJ2ZXIgaXMKKyAgIHRvIGN1dCBiYWNr IG9uIEtlcm1pdCdzIHBlcmZvcm1hbmNlIHNldHRpbmdzIHVudGlsIHlvdSBmaW5kIGEKKyAgIGNv bWJpbmF0aW9uIHRoYXQgd29ya3M6CisKKyAgICAgKiBTRVQgU1RSRUFNSU5HIE9GRgorICAgICAq IFNFVCBXSU5ET1ctU0laRSBzbWFsbC1udW1iZXIKKyAgICAgKiBTRVQgeyBTRU5ELCBSRUNFSVZF IH0gUEFDS0VULUxFTkdUSCBzbWFsbC1udW1iZXIKKyAgICAgKiBTRVQgUFJFRklYSU5HIHsgQ0FV VElPVVMsIEFMTCB9CisKKyAgIEluIHNvbWUgY2FzZXMsIHNldmVyZSBjdXRiYWNrcyBhcmUgcmVx dWlyZWQsIGUuZy4gdGhvc2UgaW1wbGllZCBieSB0aGUKKyAgIFJPQlVTVCBjb21tYW5kLiBBbHNv IGJlIHN1cmUgdGhhdCB0aGUgQUlYIEMtS2VybWl0IG9uIHRoZSByZW1vdGUgZW5kCisgICBoYXMg InNldCBmbG93IG5vbmUiICh3aGljaCBpcyB0aGUgZGVmYXVsdCkuIE5PVEU6IE1heWJlIHRoaXMg b25lIGNhbgorICAgYWxzbyBiZSBhZGRyZXNzZWQgYnkgc3RhcnRpbmcgQUlYIHRlbG5ldGQgd2l0 aCB0aGUgIi1hIiBvcHRpb24uIFRoZQorICAgc2l0dWF0aW9uIHdpdGggU1NIIGNvbm5lY3Rpb25z IGlzIG5vdCBrbm93biwgYnV0IGFsbW9zdCBjZXJ0YWlubHkgdGhlCisgICBzYW1lLgorCisgICBX aGVuIHRoZXNlIHByb2JsZW1zIG9jY3VyLCB0aGUgc3lzdGVtIGVycm9yIGxvZyBjb250YWluczoK KworICBMQUJFTDogICAgICAgICAgVFRZX1RUWUhPRworICBJREVOVElGSUVSOiAgICAgMDg3M0NG OUYKKyAgVHlwZTogICAgICAgICAgIFRFTVAKKyAgUmVzb3VyY2UgTmFtZTogIHB0cy8xCisKKyAg RGVzY3JpcHRpb24KKyAgVFRZSE9HIE9WRVItUlVOCisKKyAgRmFpbHVyZSBDYXVzZXMKKyAgRVhD RVNTSVZFIExPQUQgT04gUFJPQ0VTU09SCisKKyAgUmVjb21tZW5kZWQgQWN0aW9ucworICBSRURV Q0UgU1lTVEVNIExPQUQuCisgIFJFRFVDRSBTRVJJQUwgUE9SVCBCQVVEIFJBVEUKKworICAgQmVm b3JlIGxlYXZpbmcgdGhlIHRvcGljIG9mIEFJWCBwc2V1ZG90ZXJtaW5hbHMsIGl0IGlzIHZlcnkg bGlrZWx5IHRoYXQKKyAgIEtlcm1pdCdzIFBUWSBhbmQgU1NIIGNvbW1hbmRzIGRvIG5vdCB3b3Jr IHdlbGwgZWl0aGVyLCBmb3IgdGhlIHNhbWUKKyAgIHJlYXNvbiB0aGF0IFRlbG5ldCBjb25uZWN0 aW9ucyBpbnRvIEFJWCBkb24ndCB3b3JrIHdlbGwuIEEgYnJpZWYgdGVzdAorICAgd2l0aCAicHR5 IHJsb2dpbiBzb21laG9zdCIgZ290IGEgcGVyZmVjdGx5IHVzYWJsZSB0ZXJtaW5hbCAoQ09OTkVD VCkKKyAgIHNlc3Npb24sIGJ1dCBmaWxlLXRyYW5zZmVyIHByb2JsZW1zIGxpa2UgdGhvc2UganVz dCBkZXNjcmliZWQuCisKKyAgIFJlcG9ydGVkbHksIHRlbG5ldCBmcm9tIEFJWCA0LjEtcG9pbnQt c29tZXRoaW5nIHRvIG5vbi1UZWxuZXQgcG9ydHMKKyAgIGRvZXMgbm90IHdvcmsgdW5sZXNzIHRo ZSBwb3J0IG51bWJlciBpcyBpbiB0aGUgL2V0Yy9zZXJ2aWNlcyBmaWxlOyBpdCdzCisgICBub3Qg Y2xlYXIgZnJvbSB0aGUgcmVwb3J0IHdoZXRoZXIgdGhpcyBpcyBhIHByb2JsZW0gd2l0aCBBSVgg VGVsbmV0IChpbgorICAgd2hpY2ggY2FzZSBpdCB3b3VsZCBub3QgYWZmZWN0IEtlcm1pdCksIG9y IHdpdGggdGhlIHNvY2tldHMgbGlicmFyeSAoaW4KKyAgIHdoaWNoIGNhc2UgaXQgd291bGQpLiBU aGUgcHVycG9ydGVkIGZpeCBpcyBJQk0gQVBBUiBJWDYxNTIzLgorCisgICBDLUtlcm1pdCBTRVQg SE9TVCBvciBURUxORVQgZnJvbSBvbmUgQUlYIDMuMSAob3IgZWFybGllcikgc3lzdGVtIHRvCisg ICBhbm90aGVyIHdvbid0IHdvcmsgcmlnaHQgdW5sZXNzIHlvdSBzZXQgeW91ciBsb2NhbCB0ZXJt aW5hbCB0eXBlIHRvCisgICBzb21ldGhpbmcgb3RoZXIgdGhhbiBBSVhURVJNLiBXaGVuIHlvdXIg dGVybWluYWwgdHlwZSBpcyBBSVhURVJNLCBBSVgKKyAgIFRFTE5FVCBzZW5kcyB0d28gZXNjYXBl cyB3aGVuZXZlciB5b3UgdHlwZSBvbmUsIGFuZCB0aGUgQUlYIHRlbG5ldAorICAgc2VydmVyIHN3 YWxsb3dzIG9uZSBvZiB0aGVtLiBUaGlzIGhhcyBzb21ldGhpbmcgdG8gZG8gd2l0aCB0aGUgImhm dCIKKyAgIGRldmljZS4gVGhpcyBiZWhhdmlvciBzZWVtcyB0byBiZSByZW1vdmVkIGluIEFJWCAz LjIgYW5kIGxhdGVyLgorICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKworMy4xLjMuIEFJWDogU2VyaWFsIENv bm5lY3Rpb25zCisKKyAgIFsgWzE4MV1Ub3AgXSBbIFsxODJdQ29udGVudHMgXSBbIFsxODNdU2Vj dGlvbiBDb250ZW50cyBdIFsgWzE4NF1OZXh0IF0KKyAgIFsgWzE4NV1QcmV2aW91cyBdCisKKyAg IEluIEFJWCAzLCA0LCBvciA1LCBDLUtlcm1pdCB3b24ndCBiZSBhYmxlIHRvICJzZXQgbGluZSAv ZGV2L3R0eTAiIChvcgorICAgYW55IG90aGVyIGRpYWxvdXQgZGV2aWNlKSBpZiB5b3UgaGF2ZW4n dCBpbnN0YWxsZWQgImN1IiBvciAidXVjcCIgb24KKyAgIHlvdXIgc3lzdGVtLCBiZWNhdXNlIGlu c3RhbGxpbmcgdGhlc2UgaXMgd2hhdCBjcmVhdGVzIHRoZSBVVUNQIGxvY2tmaWxlCisgICBkaXJl Y3RvcnkuIElmIFNFVCBMSU5FIGNvbW1hbmRzIGFsd2F5cyByZXN1bHQgaW4gIlNvcnJ5LCBhY2Nl c3MgdG8gbG9jaworICAgZGVuaWVkIiwgZXZlbiB3aGVuIEMtS2VybWl0IGhhcyBiZWVuIGdpdmVu IHRoZSBzYW1lIG93bmVyLCBncm91cCwgYW5kCisgICBwZXJtaXNzaW9ucyBhcyBjdToKKworICAt ci1zci14ci14ICAgMSB1dWNwICAgICB1dWNwICAgICAgIDY3MjE2IEp1bCAyNyAxOTk5ICBjdQor CisgICBhbmQgZXZlbiB3aGVuIHlvdSBydW4gaXQgYXMgcm9vdCwgdGhlbiB5b3UgbXVzdCBnbyBi YWNrIGFuZCBpbnN0YWxsCisgICAiY3UiIGZyb20geW91ciBBSVggaW5zdGFsbGF0aW9uIG1lZGlh LgorCisgICBBY2NvcmRpbmcgdG8gSUJNJ3MgIkZyb20gU3RyZW5ndGggdG8gU3RyZW5ndGgiIGRv Y3VtZW50ICgyMSBBcHJpbAorICAgMTk5OCksIGluIEFJWCA0LjIgYW5kIGxhdGVyICJBc3luYyBz dXBwb3J0cyBzcGVlZHMgb24gbmF0aXZlIHNlcmlhbAorICAgcG9ydHMgdXAgdG8gMTE1LjJrYnBz Ii4gSG93ZXZlciwgbm8gQVBJIGlzIGRvY3VtZW50ZWQgdG8gYWNoaWV2ZSBzZXJpYWwKKyAgIHNw ZWVkcyBoaWdoZXIgdGhhbiAzODQwMCBicHMuIEFwcGFyZW50bHkgdGhlIHdheSB0byBkbyB0aGlz IC0tIHdoaWNoCisgICBtaWdodCBvciBtaWdodCBub3Qgd29yayBvbmx5IG9uIHRoZSBJQk0gMTI4 LXBvcnQgbXVsdGlwbGV4ZXIgLS0gaXM6CisKKyAgY3htYS1zdHR5IGZhc3RiYXVkIC9kZXYvdHR5 MAorCisgICB3aGljaCwgYWNjb3JkaW5nIHRvICJtYW4gY3htYS1zdHR5IjoKKworICAgICBmYXN0 YmF1ZCBBbHRlcnMgdGhlIGJhdWQgcmF0ZSB0YWJsZSwgc28gNTAgYmF1ZCBiZWNvbWVzIDU3NjAw IGJhdWQuCisgICAgIC1mYXN0YmF1ZCBSZXN0b3JlcyB0aGUgYmF1ZCByYXRlIHRhYmxlLCBzbyA1 NzYwMCBiYXVkIGJlY29tZXMgNTAKKyAgICAgYmF1ZC4KKworICAgUHJlc3VtYWJseSAoYnV0IG5v dCBjZXJ0YWlubHkpIHRoaXMgZXh0cmFwb2xhdGVzIHRvIDExMCAiYmF1ZCIgYmVjb21lcworICAg NzY4MDAgYnBzLCBhbmQgMTUwIGJlY29tZXMgMTE1MjAwIGJwcy4gU28gdG8gdXNlIGhpZ2ggc2Vy aWFsIHNwZWVkcyBpbgorICAgQUlYIDQuMiBvciA0LjMsIHRoZSB0cmljayB3b3VsZCBiZSB0byBn aXZlIHRoZSAiY3htYS1zdHR5IGZhc3RiYXVkIgorICAgY29tbWFuZCBmb3IgdGhlIGRlc2lyZWQg dHR5IGRldmljZSBiZWZvcmUgc3RhcnRpbmcgS2VybWl0LCBhbmQgdGhlbiB1c2UKKyAgICJzZXQg c3BlZWQgNTAiLCAic2V0IHNwZWVkIDExMCIsIG9yICJzZXQgc3BlZWQgMTUwIiB0byBzZWxlY3Qg NTY3MDAsCisgICA3NjgwMCwgb3IgMTE1MjAwIGJwcy4gSXQgaXMgbm90IGtub3duIHdoZXRoZXIg Y3htYS1zdHR5IHJlcXVpcmVzCisgICBwcml2aWxlZ2UuCisKKyAgIEFjY29yZGluZyB0byBvbmUg cmVwb3J0LCAiRnVydGhlciBpbnZlc3RpZ2F0aW9uIHdpdGggSUJNIHNlZW1zIHRvCisgICBpbmRp Y2F0ZSB0aGF0IHRoZSBvbmx5IGhhcmR3YXJlIGNhcGFibGUgb2YgZG9pbmcgdGhpcyBpcyB0aGUg MTI4LXBvcnQKKyAgIG11bHRpcGxleG9yIHdpdGggb25lIChvciBtb3JlKSBvZiB0aGUgMTYgcG9y dCBicmVha291dCBjYWJsZXMgKEVuaGFuY2VkCisgICBSZW1vdGUgQXN5bmMgTm9kZSAxNi1Qb3J0 IEVJQS0yMzIpLiBXZSBhcmUgbG9va2luZyBhdCBhYm91dCBDRE4kNCwwMDAKKyAgIGluIGhhcmR3 YXJlIGp1c3QgdG8gaGFuZyBhIDU2a2IgbW9kZW0gb24gdGhlcmUuIE9mIGNvdXJzZSwgd2UgY2Fu IHRoZW4KKyAgIGhhbmcgMTUgbW9yZSwgaWYgd2Ugd2FudC4gVGhpcyBoYXJkd2FyZSBjb21ibyBp cyBkZXNjcmliZWQgdG8gYmUgZ29vZAorICAgdG8gMjMwLjRrYnBzLiIKKworICAgQW5vdGhlciBy ZXBvcnQgc2F5cyAocXVvdGUgZnJvbSBBSVggbmV3c2dyb3VwLCBNYXJjaCAxOTk5KToKKworICAg ICBUaGUgbWFjaGluZSB0eXBlIGFuZCB0aGUgYWRhcHRlciBkZXRlcm1pbmUgdGhlIHNwZWVkIHRo YXQgb25lIGNhbgorICAgICBhY3R1YWxseSBydW4gYXQuIFRoZSBvbGRlciBtaWNyb2NoYW5uZWwg bWFjaGluZXMgaGF2ZSBtdWNoIHNsb3dlcgorICAgICBjcnlzdGFsIGZyZXF1ZW5jaWVzIGFuZCBt YXkgbm90IGdvIGJleW9uZCA3Niw4MDAuIEEgZmVhdHVyZSBwdXQgaW50bworICAgICBBSVggNDIx IGFsbG93cyBvbmUgdG8ga2V5IGluIG5vbi1QT1NJWCBiYXVkIHJhdGVzIGFuZCBpZiB0aGUgdWFy dAorICAgICBjYW4gc3VwcG9ydCB0aGF0IHNwZWVkLCBpdCB3aWxsIGdldCBzZXQuIHRoaXMgYXBw bGllcyBhbHNvIHRvIDQzcCdzCisgICAgIGFuZCBiZXlvbmQuIDExNTIwMCBpcyB0aGUgbWF4IGZv ciB0aGUgNDNQJ3MgbmF0aXZlIHNlcmlhbCBwb3J0LiBBcworICAgICBjcnl0YWwgZnJlcXVlbmNp ZXMgY29udGludWUgdG8gaW5jcmVhc2UsIHRoZSBidWlsdC1pbiBzZXJpYWwgcG9ydHMKKyAgICAg c3BlZWRzIHdpbGwgaW1wcm92ZS4gVG8gdXNlICd1dWNwJyBvciAnYXRlJyBhdCB0aGUgaGlnaGVy IGJhdWQKKyAgICAgcmF0ZXMsIGNvbmZpZ3VyZSB0aGUgcG9ydCBmb3IgdGhlIGRlc2lyZWQgc3Bl ZWQsIGJ1dCBzZXQgdGhlIHNwZWVkCisgICAgIG9mIHV1Y3Agb3IgYXRlIHRvIDUwLiBBbnkgbm9u LVBPU0lYIHNwZWVkcyBzZXQgaW4gdGhlIHR0eXMKKyAgICAgY29uZmlndXJhdGlvbiB3aWxsIHRo ZSBiZSB1c2VkLiBJbiB0aGUgY2FzZSBvZiB0aGUgMTI4LXBvcnQgYWRhcHRlcnMKKyAgICAgb3Ig dGhlIElTQSA4LXBvcnQgb3IgUENJIDgtcG9ydCBhZGFwdGVyLCB0aGVyZSBhcmUgb25seSBhIGZl dyBoaWdoZXIKKyAgICAgYmF1ZCByYXRlcy4KKworICAgIGEuIENoYW5nZSB0aGUgcG9ydCB0byBl bmFibGUgaGlnaCBiYXVkIHJhdGVzOgorICAgICAgICAgICsgQjUwIGZvciA1NzYwMAorICAgICAg ICAgICsgQjc1IGZvciA3NjgwMAorICAgICAgICAgICsgQjExMCBmb3IgMTE1MjAwCisgICAgICAg ICAgKyBCMjAwIGZvciAyMzAwMDAKKyAgICBiLiBjaGRldiAtbCB0dHlYIC1hIGZhc3RiYXVkPWVu YWJsZQorICAgICAgICAgICsgRm9yIHRoZSAxMjggcG9ydHMgb3JpZ2luYWwgc3R5bGUgcmFucywg b25seSA1NzYwMCBicHMgaXMKKyAgICAgICAgICAgIHN1cHBvcnRlZC4KKyAgICAgICAgICArIEZv ciB0aGUgbmV3IGVuaGFuY2VkIFJBTnMsIHVwIHRvIDIzMEticHMgaXMgc3VwcG9ydGVkLgorCisg ICBJbiBBSVggMi4yLjEgb24gdGhlIFJUIFBDIHdpdGggdGhlIDgtcG9ydCBtdWx0aXBsZXhlciwg U0VUIFNQRUVEIDM4NDAwCisgICBnaXZlcyA5NjAwIGJwcywgYnV0IFNFVCBTUEVFRCAxOTIwMCBn aXZlcyAxOTIwMCAob24gdGhlIGJ1aWx0LWluIFMxCisgICBwb3J0KS4KKworICAgTm90ZSB0aGF0 IHNvbWUgUlMvNjAwMHMgKGUuZy4gdGhlIElCTSBQb3dlclNlcnZlciAzMjApIGhhdmUgbm9uc3Rh bmRhcmQKKyAgIHJlY3Rhbmd1bGFyIDEwLXBpbiBzZXJpYWwgcG9ydHM7IHRoZSBEQi0yNSBjb25u ZWN0b3IgaXMgTk9UIGEgc2VyaWFsCisgICBwb3J0OyBpdCBpcyBhIHBhcmFsbGVsIHByaW50ZXIg cG9ydC4gSUJNIGNhYmxlcyBhcmUgcmVxdWlyZWQgZm9yIHRoZQorICAgc2VyaWFsIHBvcnRzLCAo VGhlIElCTSBSVCBQQyBhbHNvIGhhZCByZWN0YW5ndWxhciBzZXJpYWwgcG9ydHMgLS0KKyAgIHBl cmhhcHMgdGhlIHNhbWUgYXMgdGhlc2UsIHBlcmhhcHMgZGlmZmVyZW50LikKKworICAgSWYgeW91 IGRpYWwgaW4gdG8gQUlYIHRocm91Z2ggYSBtb2RlbSB0aGF0IGlzIGNvbm5lY3RlZCBkaXJlY3Rs eSB0byBhbgorICAgQUlYIHBvcnQgKGUuZy4gb24gdGhlIDEyOC1wb3J0IG11bHRpcGxleGVyKSBh bmQgZmluZCB0aGF0IGRhdGEgaXMgbG9zdCwKKyAgIGVzcGVjaWFsbHkgd2hlbiB1cGxvYWRpbmcg ZmlsZXMgdG8gdGhlIEFJWCBzeXN0ZW0gKGFuZCBzeXN0ZW0gZXJyb3IKKyAgIGxvZ3MgcmVwb3J0 IGJ1ZmZlciBvdmVycnVucyBvbiB0aGUgcG9ydCk6CisKKyAgICAxLiBNYWtlIHN1cmUgdGhlIHBv cnQgYW5kIG1vZGVtIGFyZSBCT1RIIGNvbmZpZ3VyZWQgZm9yIGhhcmR3YXJlCisgICAgICAgKFJU Uy9DVFMpIGZsb3cgY29udHJvbC4gVGhlIHBvcnQgaXMgY29uZmlndXJlZCBzb21ld2hlcmUgaW4g dGhlCisgICAgICAgc3lzdGVtIGNvbmZpZ3VyYXRpb24sIG91dHNpZGUgb2YgS2VybWl0LgorICAg IDIuIFRlbGwgQy1LZXJtaXQgdG8gInNldCBmbG93IGtlZXAiOyBleHBlcmltZW50YXRpb24gc2hv d3MgdGhhdCBTRVQKKyAgICAgICBGTE9XIFJUUy9DVFMgaGFzIG5vIGVmZmVjdCB3aGVuIHVzZWQg aW4gcmVtb3RlIG1vZGUgKGkuZS4gb24KKyAgICAgICAvZGV2L3R0eSwgYXMgb3Bwb3NlZCB0byBh IHNwZWNpZnkgcG9ydCBkZXZpY2UpLgorICAgIDMuIEZpeGVzIGZvciBidWdzIGluIHRoZSBvcmln aW5hbCBBSVggNC4yIHR0eSAoc2VyaWFsIGkvbykgc3VwcG9ydCBhbmQKKyAgICAgICBvdGhlciBB SVggYnVncyBhcmUgYXZhaWxhYmxlIGZyb20gSUJNIGF0OgorICBbMTg2XWh0dHA6Ly9zZXJ2aWNl LnNvZnR3YXJlLmlibS5jb20vcnM2MDAwLworCisgICAgICAgRG93bmxvYWRzIC0+IFNvZnR3YXJl IEZpeGVzIC0+IERvd25sb2FkIEZpeERpc3QgZ2V0cyBhbiBhcHBsaWNhdGlvbgorICAgICAgIGZv ciBsb29raW5nIHVwIGtub3duIHByb2JsZW1zLgorCisgICBNYW55IHByb2JsZW1zIHJlcG9ydGVk IHdpdGggYmlkaXJlY3Rpb25hbCB0ZXJtaW5hbCBsaW5lcyBvbiBBSVggMy4yLngKKyAgIG9uIHRo ZSBSUy82MDAwLiBXb3JrYXJvdW5kOiBkb24ndCB1c2UgYmlkaXJlY3Rpb25hbCB0ZXJtaW5hbCBs aW5lcywgb3IKKyAgIHdyaXRlIGEgc2hlbGwtc2NyaXB0IHdyYXBwZXIgZm9yIEtlcm1pdCB0aGF0 IHR1cm5zIGdldHR5IG9mZiBvbiB0aGUKKyAgIGxpbmUgYmVmb3JlIHN0YXJ0aW5nIEtlcm1pdCwg b3IgYmVmb3JlIEtlcm1pdCBhdHRlbXB0cyB0byBkbyB0aGUgU0VUCisgICBMSU5FLiAoQnV0IG5v dGU6IFRoZXNlIHByb2JsZW1zIE1JR0hUIGJlIGZpeGVkIGluIEMtS2VybWl0IDYuMCBhbmQKKyAg IGxhdGVyLikgVGhlIGNvbW1hbmRzIGZvciB0dXJuaW5nIGdldHR5IG9mZiBhbmQgb24gKHJlc3Bl Y3RpdmVseSkgYXJlCisgICAvdXNyL3NiaW4vcGRpc2FibGUgYW5kIC91c3Ivc2Jpbi9wZW5hYmxl LgorICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KKworMy4xLjQuIEFJWDogRmlsZSBUcmFuc2ZlcgorCisgICBb IFsxODddVG9wIF0gWyBbMTg4XUNvbnRlbnRzIF0gWyBbMTg5XVNlY3Rpb24gQ29udGVudHMgXSBb IFsxOTBdTmV4dCBdCisgICBbIFsxOTFdUHJldmlvdXMgXQorCisgICBFdmlkZW50bHkgQUlYIDQu MyAoSSBkb24ndCBrbm93IGFib3V0IGVhcmxpZXIgdmVyc2lvbnMpIGRvZXMgbm90IGFsbG93Cisg ICBvcGVuIGZpbGVzIHRvIGJlIG92ZXJ3cml0dGVuLiBUaGlzIGNhbiBjYXVzZSBLZXJtaXQgdHJh bnNmZXJzIHRvIGZhaWwKKyAgIHdoZW4gRklMRSBDT0xMSVNJT04gaXMgT1ZFUldSSVRFLCB3aGVy ZSB0aGV5IG1pZ2h0IHdvcmsgb24gb3RoZXIgVW5peAorICAgdmFyaWV0aWVzIG9yIGVhcmxpZXIg QUlYIHZlcnNpb25zLgorCisgICBUcmFuc2ZlciBvZiBiaW5hcnkgLS0gYW5kIG1heWJlIGV2ZW4g dGV4dCAtLSBmaWxlcyBjYW4gZmFpbCBpbiBBSVggaWYKKyAgIHRoZSBBSVggdGVybWluYWwgaGFz IHBhcnRpY3VsYXIgcG9ydCBjYW4gaGF2ZSBjaGFyYWN0ZXItc2V0IHRyYW5zbGF0aW9uCisgICBk b25lIGZvciBpdCBieSB0aGUgdHR5IGRyaXZlci4gVGhlIGZvbGxvd2luZyBhZHZpY2UgZnJvbSBh CisgICBrbm93bGVkZ2VhYmxlIEFJWCB1c2VyOgorCisgICAgIFtUaGlzIGZlYXR1cmVdIGhhcyB0 byBiZSBjaGVja2VkIChhbmQgc2V0L2NsZWFyZWQpIHdpdGggYSBzZXBhcmF0ZQorICAgICBjb21t YW5kLCB1bmZvcnR1bmF0ZWx5IHN0dHkgZG9lc24ndCBoYW5kbGUgdGhpcy4gVG8gY2hlY2s6CisK KyAgJCBzZXRtYXBzCisgIGlucHV0IG1hcDogbm9uZSBpbnN0YWxsZWQKKyAgb3V0cHV0IG1hcDog bm9uZSBpbnN0YWxsZWQKKworICAgICBJZiBpdCBzYXlzIGFueXRoaW5nIG90aGVyIHRoYW4gIm5v bmUgaW5zdGFsbGVkIiBmb3IgZWl0aGVyIG9uZSwgaXQKKyAgICAgaXMgbGlrZWx5IHRvIGNhdXNl IGEgcHJvYmxlbSB3aXRoIGtlcm1pdC4gVG8gZ2V0IHJpZCBvZiBpbnN0YWxsZWQKKyAgICAgbWFw czoKKworICAkIHNldG1hcHMgLXQgTk9NQVAKKworICAgICBIb3dldmVyLCBJIHNlZW0gdG8gcmVj YWxsIHRoYXQgd2l0aCBzb21lIHZlcnNpb25zIG9mIEFJWCBiZWZvcmUKKyAgICAgMy4yLjUsIG9u bHkgcm9vdCBjb3VsZCBjaGFuZ2UgdGhlIHNldHRpbmcuIEknbSBub3Qgc3VyZSB3aGF0CisgICAg IHZlcnNpb25zIC0gaXQgbWlnaHQgaGF2ZSBvbmx5IGJlZW4gdW5kZXIgQUlYIDMuMSB0aGF0IHRo aXMgd2FzIHRydWUuCisgICAgIEF0IGxlYXN0IHdpdGggQUlYIDMuMi41IGFuIG9yZGluYXJ5IHVz ZXIgY2FuIHNldCBvciBjbGVhciB0aGUgbWFwcy4KKworICAgT24gdGhlIHNhbWUgcHJvYmxlbSwg YW5vdGhlciBrbm93bGVkZ2VhYmxlIEFJWCB1c2VyIHNheXM6CisKKyAgICAgVGhlIHdheSB0byBn ZXQgaW5mb3JtYXRpb24gb24gdGhlIE5MUyBtYXBwaW5nIHVuZGVyIEFJWCAoMy4yLjUKKyAgICAg YW55d2F5KSBpcyBhcyBmb2xsb3dzLiBGcm9tIHRoZSBjb21tYW5kIGxpbmUgdHlwZToKKworICBs c2F0dHIgLWwgdHR5IyAtYSBpbWFwIC1hIG9tYXAgLUUgLUgKKworICAgICBSZXBsYWNlIHRoZSB0 dHkgbnVtYmVyIGZvciB0aGUgbnVtYmVyIHNpZ24gYWJvdmUuIFRoaXMgd2lsbCBnaXZlIGEKKyAg ICAgaHVtYW4gcmVhZGFibGUgb3V0cHV0IG9mIHRoZSBzZXR0aW5ncyB0aGF0IGxvb2tzIGxpa2Ug dGhpczsKKworICAjIGxzYXR0ciAtbCB0dHkyIC1hIGltYXAgLWEgb21hcCAtRSAtSAorICBhdHRy aWJ1dGUgdmFsdWUgZGVzY3JpcHRpb24gICAgIHVzZXJfc2V0dGFibGUKKworICBpbWFwICAgICAg bm9uZSAgSU5QVVQgbWFwIGZpbGUgIFRydWUKKyAgb21hcCAgICAgIG5vbmUgIE9VVFBVVCBtYXAg ZmlsZSBUcnVlCisKKyAgICAgSWYgeW91IGNoYW5nZSB0aGUgLUggdG8gYSAtTywgeW91IGdldCBv dXRwdXQgdGhhdCBjYW4gZWFzaWx5IGJlCisgICAgIHByb2Nlc3NlZCBieSBhbm90aGVyIHByb2dy YW0gb3IgYSBzaGVsbCBzY3JpcHQsIGZvciBleGFtcGxlOgorCisgICMgbHNhdHRyIC1sIHR0eTIg LWEgaW1hcCAtYSBvbWFwIC1FIC1PCisgICNpbWFwOm9tYXAKKyAgbm9uZTpub25lCisKKyAgICAg VG8gY2hhbmdlIHRoZSBzZXR0aW5ncyBmcm9tIHRoZSBjb21tYW5kIGxpbmUsIHRoZSBjaGRldiBj b21tYW5kIGlzCisgICAgIHVzZWQgd2l0aCB0aGUgZm9sbG93aW5nIHN5bnRheC4KKworICBjaGRl diAtbCB0dHkjIC1hIGltYXA9J25vbmUnIC1hIG9tYXA9J25vbmUnCisKKyAgICAgQWdhaW4gc3Vi c3RpdHV0aW5nIHRoZSBhcHByb3ByaWF0ZSB0dHkgcG9ydCBudW1iZXIgZm9yIHRoZSBudW1iZXIK KyAgICAgc2lnbiwgIm5vbmUiIGJlaW5nIHRoZSB2YWx1ZSB3ZSB3YW50IGZvciBDLUtlcm1pdC4g T2YgY291cnNlLCB0aGUKKyAgICAgYWJvdmUgY2FuIGFsc28gYmUgY2hhbmdlZCBieSB1c2luZyB0 aGUgU01JVCB1dGlsaXR5IGFuZCBzZWxlY3RpbmcKKyAgICAgZGV2aWNlcyAtIHR0eS4gKC4uLmVu ZCBxdW90ZSkKKworICAgSW4gMjAwNyBJIG5vdGljZWQgdGhlIGZvbGxvd2luZyBvbiBoaWdoLXNw ZWVkIFNTSCBjb25uZWN0aW9ucyAobG9jYWwKKyAgIG5ldHdvcmspIGludG8gQUlYIDUuMzogc3Ry ZWFtaW5nIHRyYW5zZmVycyBpbnRvIEFJWCBqdXN0IGRvbid0IHdvcmsuCisgICBUaGUgc2FtZSBt aWdodCBiZSB0cnVlIGZvciBUZWxuZXQgY29ubmVjdGlvbnM7IEkgaGF2ZSBubyB3YXkgdG8gY2hl Y2suCisgICBJdCBhcHBlYXJzIHRoYXQgdGhlIEFJWCBwdHkgZHJpdmVyIGFuZC9vciB0aGUgU1NI IChhbmQgcG9zc2libHkgVGVsbmV0KQorICAgc2VydmVyIGFyZSBub3QgY2FwYWJsZSBvZiByZWNl aXZpbmcgYSBzdGVhZHkgc3RyZWFtIG9mIGluY29taW5nIGRhdGEgYXQKKyAgIGhpZ2ggc3BlZWQu IFNvbHV0aW9uOiB1bmtub3duLiBXb3JrYXJvdW5kOiBwdXQgInNldCBzdHJlYW1pbmcgb2ZmIiBp bgorICAgeW91ciAua2VybXJjIG9yIC5teWtlcm1yYyBmaWxlLCBzaW5jZSBzdHJlYW1pbmcgaXMg dGhlIGRlZmF1bHQgZm9yCisgICBuZXR3b3JrIGNvbm5lY3Rpb25zLgorICBfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KKworMy4xLjUuIEFJWDogWHRlcm0gS2V5IE1hcAorCisgICBbIFsxOTJdVG9wIF0gWyBbMTkz XUNvbnRlbnRzIF0gWyBbMTk0XVNlY3Rpb24gQ29udGVudHMgXSBbCisgICBbMTk1XVByZXZpb3Vz IF0KKworICAgSGVyZSBpcyBhIHNhbXBsZSBjb25maWd1cmF0aW9uIGZvciBzZXR0aW5nIHVwIGFu IHh0ZXJtIGtleWJvYXJkIGZvcgorICAgVlQyMjAgb3IgaGlnaGVyIHRlcm1pbmFsIGVtdWxhdGlv biBvbiBBSVgsIGNvdXJ0ZXN5IG9mIEJydWNlIE1vbWppYW4sCisgICBEcmV4ZWwgSGlsbCwgUEEu IFh0ZXJtIGNhbiBiZSBzdGFydGVkIGxpa2UgdGhpczoKKworICB4dGVybSAkWFRFUk1GTEFHUyAr cncgK3NiICtscyAkQCAtdG0gJ2VyYXNlIF4/IGludHIgXmMnIC1uYW1lIHZ0MjIwIFwKKyAgICAg ICAgICAtdGl0bGUgdnQyMjAgLXRuIHh0ZXJtLTIyMCAiJEAiICYKKworLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgIFhUZXJtKlZUMTAwLlRyYW5zbGF0aW9uczogI292ZXJyaWRlIFxuXAorICAgICAgICAg IDxLZXk+SG9tZTogc3RyaW5nKDB4MWIpIHN0cmluZygiWzN+IikgXG4gXAorICAgICAgICAgIDxL ZXk+RW5kOiBzdHJpbmcoMHgxYikgc3RyaW5nKCJbNH4iKSBcbgorICB2dDIyMCpWVDEwMC5UcmFu c2xhdGlvbnM6ICNvdmVycmlkZSBcblwKKyAgU2hpZnQgICA8S2V5PkYxOiBzdHJpbmcoIlsyM34i KSBcbiBcCisgIFNoaWZ0ICAgPEtleT5GMjogc3RyaW5nKCJbMjR+IikgXG4gXAorICBTaGlmdCAg IDxLZXk+RjM6IHN0cmluZygiWzI1fiIpIFxuIFwKKyAgU2hpZnQgICA8S2V5PkY0OiBzdHJpbmco IlsyNn4iKSBcbiBcCisgIFNoaWZ0ICAgPEtleT5GNTogc3RyaW5nKCJbS34iKSBcbiBcCisgIFNo aWZ0ICAgPEtleT5GNjogc3RyaW5nKCJbMzF+IikgXG4gXAorICBTaGlmdCAgIDxLZXk+Rjc6IHN0 cmluZygiWzMxfiIpIFxuIFwKKyAgU2hpZnQgICA8S2V5PkY4OiBzdHJpbmcoIlszMn4iKSBcbiBc CisgIFNoaWZ0ICAgPEtleT5GOTogc3RyaW5nKCJbMzN+IikgXG4gXAorICBTaGlmdCAgIDxLZXk+ RjEwOiBzdHJpbmcoIlszNH4iKSBcbiBcCisgIFNoaWZ0ICAgPEtleT5GMTE6IHN0cmluZygiWzI4 fiIpIFxuIFwKKyAgU2hpZnQgICA8S2V5PkYxMjogc3RyaW5nKCJbMjl+IikgXG4gXAorICAgICAg ICAgIDxLZXk+UHJpbnQ6IHN0cmluZygweDFiKSBzdHJpbmcoIlszMn4iKSBcblwKKyAgICAgICAg ICA8S2V5PkNhbmNlbDogc3RyaW5nKDB4MWIpIHN0cmluZygiWzMzfiIpIFxuXAorICAgICAgICAg IDxLZXk+UGF1c2U6IHN0cmluZygweDFiKSBzdHJpbmcoIlszNH4iKSBcblwKKyAgICAgICAgICA8 S2V5Pkluc2VydDogc3RyaW5nKDB4MWIpIHN0cmluZygiWzJ+IikgXG5cCisgICAgICAgICAgPEtl eT5EZWxldGU6IHN0cmluZygweDFiKSBzdHJpbmcoIlszfiIpIFxuXAorICAgICAgICAgIDxLZXk+ SG9tZTogc3RyaW5nKDB4MWIpIHN0cmluZygiWzF+IikgXG5cCisgICAgICAgICAgPEtleT5FbmQ6 IHN0cmluZygweDFiKSBzdHJpbmcoIls0fiIpIFxuXAorICAgICAgICAgIDxLZXk+UHJpb3I6IHN0 cmluZygweDFiKSBzdHJpbmcoIls1fiIpIFxuXAorICAgICAgICAgIDxLZXk+TmV4dDogc3RyaW5n KDB4MWIpIHN0cmluZygiWzZ+IikgXG5cCisgICAgICAgICAgPEtleT5CYWNrU3BhY2U6IHN0cmlu ZygweDdmKSBcblwKKyAgICAgICAgICA8S2V5Pk51bV9Mb2NrOiBzdHJpbmcoMHgxYikgc3RyaW5n KCJPUCIpIFxuXAorICAgICAgICAgIDxLZXk+S1BfRGl2aWRlOiBzdHJpbmcoMHgxYikgc3RyaW5n KCJPbCIpIFxuXAorICAgICAgICAgIDxLZXk+S1BfTXVsdGlwbHk6IHN0cmluZygweDFiKSBzdHJp bmcoIk9tIikgXG5cCisgICAgICAgICAgPEtleT5LUF9TdWJ0cmFjdDogc3RyaW5nKDB4MWIpIHN0 cmluZygiT1MiKSBcblwKKyAgICAgICAgICA8S2V5PktQX0FkZDogc3RyaW5nKDB4MWIpIHN0cmlu ZygiT00iKSBcblwKKyAgICAgICAgICA8S2V5PktQX0VudGVyOiBzdHJpbmcoMHgxYikgc3RyaW5n KCJPTSIpIFxuXAorICAgICAgICAgIDxLZXk+S1BfRGVjaW1hbDogc3RyaW5nKDB4MWIpIHN0cmlu ZygiT24iKSBcblwKKyAgICAgICAgICA8S2V5PktQXzA6IHN0cmluZygweDFiKSBzdHJpbmcoIk9w IikgXG5cCisgICAgICAgICAgPEtleT5LUF8xOiBzdHJpbmcoMHgxYikgc3RyaW5nKCJPcSIpIFxu XAorICAgICAgICAgIDxLZXk+S1BfMjogc3RyaW5nKDB4MWIpIHN0cmluZygiT3IiKSBcblwKKyAg ICAgICAgICA8S2V5PktQXzM6IHN0cmluZygweDFiKSBzdHJpbmcoIk9zIikgXG5cCisgICAgICAg ICAgPEtleT5LUF80OiBzdHJpbmcoMHgxYikgc3RyaW5nKCJPdCIpIFxuXAorICAgICAgICAgIDxL ZXk+S1BfNTogc3RyaW5nKDB4MWIpIHN0cmluZygiT3UiKSBcblwKKyAgICAgICAgICA8S2V5PktQ XzY6IHN0cmluZygweDFiKSBzdHJpbmcoIk92IikgXG5cCisgICAgICAgICAgPEtleT5LUF83OiBz dHJpbmcoMHgxYikgc3RyaW5nKCJPdyIpIFxuXAorICAgICAgICAgIDxLZXk+S1BfODogc3RyaW5n KDB4MWIpIHN0cmluZygiT3giKSBcblwKKyAgICAgICAgICA8S2V5PktQXzk6IHN0cmluZygweDFi KSBzdHJpbmcoIk95IikgXG4KKworICAhICAgICAgIDxLZXk+VXA6IHN0cmluZygweDFiKSBzdHJp bmcoIltBIikgXG5cCisgICEgICAgICAgPEtleT5Eb3duOiBzdHJpbmcoMHgxYikgc3RyaW5nKCJb QiIpIFxuXAorICAhICAgICAgIDxLZXk+UmlnaHQ6IHN0cmluZygweDFiKSBzdHJpbmcoIltDIikg XG5cCisgICEgICAgICAgPEtleT5MZWZ0OiBzdHJpbmcoMHgxYikgc3RyaW5nKCJbRCIpIFxuXAor CisgICp2aXN1YWxCZWxsOiAgICB0cnVlCisgICpzYXZlTGluZXM6ICAgICAxMDAwCisgICpjdXJz ZXNlbXVsOiAgICB0cnVlCisgICpzY3JvbGxLZXk6ICAgICB0cnVlCisgICpzY3JvbGxCYXI6ICAg ICB0cnVlCisKKzMuMi4gQy1LRVJNSVQgQU5EIEhQLVVYCisKKyAgIFsgWzE5Nl1Ub3AgXSBbIFsx OTddQ29udGVudHMgXSBbIFsxOThdU2VjdGlvbiBDb250ZW50cyBdIFsgWzE5OV1OZXh0IF0KKyAg IFsgWzIwMF1QcmV2aW91cyBdCisKKyAgIFNFQ1RJT04gQ09OVEVOVFMKKworICAzLjIuMC4gWzIw MV1Db21tb24gUHJvYmxlbXMKKyAgMy4yLjEuIFsyMDJdQnVpbGRpbmcgQy1LZXJtaXQgb24gSFAt VVgKKyAgMy4yLjIuIFsyMDNdRmlsZSBUcmFuc2ZlcgorICAzLjIuMy4gWzIwNF1EaWFsaW5nIE91 dCBhbmQgVVVDUCBMb2NrZmlsZXMgaW4gSFAtVVgKKyAgMy4yLjQuIFsyMDVdTm90ZXMgb24gU3Bl Y2lmaWMgSFAtVVggUmVsZWFzZXMKKyAgMy4yLjUuIFsyMDZdSFAtVVggYW5kIFguMjUKKworICAg UkVGRVJFTkNFUworCisgICBGb3IgZnVydGhlciBpbmZvcm1hdGlvbiwgcmVhZCB0aGUgWzIwN11j b21wLnN5cy5ocC5ocHV4IG5ld3Nncm91cC4KKworICAgQy1LZXJtaXQgaXMgaW5jbHVkZWQgYXMg cGFydCBvZiB0aGUgSFAtVVggb3BlcmF0aW5nIHN5c3RlbSBieSBjb250cmFjdAorICAgYmV0d2Vl biBIZXdsZXR0IFBhY2thcmQgYW5kIENvbHVtYmlhIFVuaXZlcnNpdHkgZm9yIEhQLVVYIDEwLjAw IGFuZAorICAgbGF0ZXIuIEVhY2ggbGV2ZWwgb2YgSFAtVVggaW5jbHVkZXMgYSBmcmVzaGx5IGJ1 aWx0IEMtS2VybWl0IGJpbmFyeSBpbgorICAgL2Jpbi9rZXJtaXQsIHdoaWNoIHNob3VsZCB3b3Jr IGNvcnJlY3RseS4gQmluYXJpZXMgYnVpbHQgZm9yIHJlZ3VsYXIKKyAgIEhQLVVYIG1heSBiZSB1 c2VkIG9uIFRydXN0ZWQgSFAtVVggYW5kIHZpY2UtdmVyc2EsIGV4Y2VwdCBmb3IgdXNlIGFzCisg ICBJS1NEIGJlY2F1c2Ugb2YgdGhlIGRpZmZlcmVudCBhdXRoZW50aWNhdGlvbiBtZXRob2RzLgor CisgICBOb3RlIHRoYXQgSFAgZG9lcyBub3QgdXBkYXRlIEMtS2VybWl0IHZlcnNpb25zIGZvciBh bnkgYnV0IGl0cyBtb3N0CisgICBjdXJyZW50IEhQLVVYIHJlbGVhc2UuIFNvLCBmb3IgZXhhbXBs ZSwgSFAtVVggMTAuMjAgaGFzIEMtS2VybWl0IDYuMDsKKyAgIDExLjAwIGhhcyBDLUtlcm1pdCA3 LjAsIGFuZCAxMS4yMiBoYXMgOC4wLiBPZiBjb3Vyc2UsIGFzIHdpdGggYWxsCisgICBzb2Z0d2Fy ZSwgb2xkZXIgS2VybWl0IHZlcnNpb25zIGhhdmUgYnVncyAoc3VjaCBhcyBidWZmZXIgb3ZlcmZs b3cKKyAgIHZ1bG5lcmFiaWxpdGllcykgdGhhdCBhcmUgZml4ZWQgaW4gbGF0ZXIgdmVyc2lvbnMu IEZyb20gdGltZSB0byB0aW1lLAorICAgSFAgZGlzY292ZXJzIG9uZSBvZiB0aGVzZSAobG9uZy1h Z28gZml4ZWQpIGJ1Z3MgYW5kIGlzc3VlcyBhIHNlY3VyaXR5CisgICBhbGVydCBmb3IgdGhlIG9s ZGVyIE9TJ3MsIHJlY29tbWVuZGluZyBzb21lIGRyYWNvbmlhbiBtZWFzdXJlIHRvIGF2b2lkCisg ICB0aGUgcHJvYmxlbS4gVGhlIHRydWUgZml4IGluIGVhY2ggc2l0dWF0aW9uIGlzIHRvIGluc3Rh bGwgdGhlIGN1cnJlbnQKKyAgIHJlbGVhc2Ugb2YgQy1LZXJtaXQuCisKKzMuMi4wLiBDb21tb24g UHJvYmxlbXMKKworICAgWyBbMjA4XVRvcCBdIFsgWzIwOV1Db250ZW50cyBdIFsgWzIxMF1TZWN0 aW9uIENvbnRlbnRzIF0gWyBbMjExXU5leHQgXQorCisgICBTb21lIEhQIHdvcmtzdGF0aW9ucyBo YXZlIGEgQlJFQUsvUkVTRVQga2V5LiBJZiB5b3UgaGl0IHRoaXMga2V5IHdoaWxlCisgICBDLUtl cm1pdCBpcyBydW5uaW5nLCBpdCBtaWdodCBraWxsIG9yIHN1c3BlbmQgdGhlIEMtS2VybWl0IHBy b2Nlc3MuCisgICBDLUtlcm1pdCBhcm1zIGl0c2VsZiBhZ2FpbnN0IHRoZXNlIHNpZ25hbHMsIGJ1 dCBldmlkZW50bHkgdGhlCisgICBCUkVBSy9SRVNFVCBrZXkgaXMgLS0gYXQgbGVhc3QgaW4gc29t ZSBjaXJjdW1zdGFuY2VzLCBvbiBjZXJ0YWluIEhQLVVYCisgICB2ZXJzaW9ucyAtLSB0b28gcG93 ZXJmdWwgdG8gYmUgY2F1Z2h0LiAoU29tZSByZXBvcnQgdGhhdCB0aGUgZmlyc3QKKyAgIEJSRUFL L1JFU0VUIHNob3dzIHVwIGFzIFNJR0lOVCBhbmQgaXMgY2F1Z2h0IGJ5IEMtS2VybWl0J3MgZm9y bWVyCisgICBTSUdJTlQgaGFuZGxlciBldmVuIHdoZW4gU0lHSU5UIGlzIGN1cnJlbnRseSBzZXQg dG8gU0lHX0lHTjsgdGhlIHNlY29uZAorICAga2lsbHMgS2VybWl0OyBvdGhlciByZXBvcnRzIHN1 Z2dlc3QgdGhlIGZpcnN0IEJSRUFLL1JFU0VUIHNlbmRzIGEKKyAgIFNJR1RTVFAgKHN1c3BlbmQg c2lnbmFsKSB0byBLZXJtaXQsIHdoaWNoIGl0IGNhdGNoZXMgYW5kIHN1c3BlbmRzCisgICBpdHNl bGYuIFlvdSBjYW4gdGVsbCBDLUtlcm1pdCB0byBpZ25vcmUgc3VzcGVuZCBzaWduYWxzIHdpdGgg U0VUCisgICBTVVNQRU5EIE9GRi4gWW91IGNhbiB0ZWxsIEMtS2VybWl0IHRvIGlnbm9yZSBTSUdJ TlQgd2l0aCBTRVQgQ09NTUFORAorICAgSU5URVJSVVBUSU9OIE9GRi4gSXQgaXMgbm90IGtub3du IHdoZXRoZXIgdGhlc2UgY29tbWFuZHMgYWxzbyBncmFudAorICAgaW1tdW5pdHkgdG8gdGhlIEJS RUFLL1JFU0VUIGtleSAob25lIHJlcG9ydCBzdGF0ZXMgdGhhdCB3aXRoIFNFVAorICAgU1VTUEVO RCBPRkYsIHRoZSBCUkVBSy9SRVNFVCBrZXkgaXMgaWdub3JlZCB0aGUgZmlyc3QgZm91ciB0aW1l cywgYnV0CisgICBraWxscyBLZXJtaXQgdGhlIDV0aCB0aW1lKS4gSW4gYW55IGNhc2U6CisKKyAg ICAxLiBJZiB0aGlzIGtleSBpcyBtYXBwZWQgdG8gU0lHSU5UIG9yIFNJR1RTVFAsIEMtS2VybWl0 IGNhdGNoZXMgb3IKKyAgICAgICBpZ25vcmVzIGl0LCBkZXBlbmRpbmcgb24gd2hpY2ggbW9kZSAo Q09OTkVDVCwgY29tbWFuZCwgZXRjKSBLZXJtaXQKKyAgICAgICBpcyBpbi4KKyAgICAyLiBJZiBp dCBjYXVzZXMgSFAtVVggdG8ga2lsbCBDLUtlcm1pdCwgdGhlcmUgaXMgbm90aGluZyBDLUtlcm1p dCBjYW4KKyAgICAgICBkbyB0byBwcmV2ZW50IGl0LgorCisgICBXaGVuIEhQLVVYIGlzIG9uIHRo ZSByZW1vdGUgZW5kIG9mIHRoZSBjb25uZWN0aW9uLCBpdCBpcyBlc3NlbnRpYWwgdGhhdAorICAg SFAtVVggQy1LZXJtaXQgYmUgY29uZmlndXJlZCBmb3IgWG9uL1hvZmYgZmxvdyBjb250cm9sICh0 aGlzIGlzIHRoZQorICAgZGVmYXVsdCwgYnV0IGluIGNhc2UgeW91IGNoYW5nZSBpdCBhbmQgdGhl biBleHBlcmllbmNlIGZpbGUtdHJhbnNmZXIKKyAgIGZhaWx1cmVzLCB0aGlzIGlzIGEgbGlrZWx5 IHJlYXNvbikuCisKKzMuMi4xLiBCdWlsZGluZyBDLUtlcm1pdCBvbiBIUC1VWAorCisgICBbIFsy MTJdVG9wIF0gWyBbMjEzXUNvbnRlbnRzIF0gWyBbMjE0XVNlY3Rpb24gQ29udGVudHMgXSBbIFsy MTVdTmV4dCBdCisgICBbIFsyMTZdUHJldmlvdXMgXQorCisgICAgIFRoaXMgc2VjdGlvbiBhcHBs aWVzIG1haW5seSB0byBvbGQgKHByZS0xMC4yMCkgSFAtVVggdmVyc2lvbiBvbiBvbGQsCisgICAg IHNsb3csIGFuZC9vciBtZW1vcnktY29uc3RyYWluZWQgaGFyZHdhcmUuCisKKyAgIER1cmluZyB0 aGUgQy1LZXJtaXQgNi4wIEJldGEgY3ljbGUsIHNvbWV0aGluZyBoYXBwZW5lZCB0byBja2Nwcm8u dyAob3IsCisgICBtb3JlIHByZWNpc2VseSwgdGhlIGNrY3Byby5jIGZpbGUgdGhhdCBpcyBnZW5l cmF0ZWQgZnJvbSBpdCkgd2hpY2gKKyAgIGNhdXNlcyBIUCBvcHRpbWl6aW5nIGNvbXBpbGVycyB1 bmRlciBIUC1VWCB2ZXJzaW9ucyA3LjAgYW5kIDguMAorICAgKGFwcGFyZW50bHkgb24gYWxsIHBs YXRmb3JtcykgYXMgd2VsbCBhcyB1bmRlciBIUC1VWCA5LjAgb24gTW90b3JvbGEKKyAgIHBsYXRm b3JtcyBvbmx5LCB0byBibG93IHVwLiBJbiB2ZXJzaW9ucyA3LjAgYW5kIDguMCB0aGUgcHJvYmxl bSBoYXMKKyAgIHNwcmVhZCB0byBvdGhlciBtb2R1bGVzLgorCisgICBUaGUgc3ltcHRvbXMgdmFy eSBmcm9tIHRoZSBzeXN0ZW0gZ3JpbmRpbmcgdG8gYSBoYWx0LCB0byB0aGUgY29tcGlsZXIKKyAg IGNyYXNoaW5nLCB0byB0aGUgY29tcGlsYXRpb24gb2YgdGhlIGNrY3Byby5jIG1vZHVsZSB0YWtp bmcgdmVyeSBsb25nCisgICBwZXJpb2RzIG9mIHRpbWUsIGxpa2UgOSBob3Vycy4gVGhpcyBwcm9i bGVtIGlzIGhhbmRsZWQgYnkgY29tcGlsaW5nIHRoZQorICAgbW9kdWxlcyB0aGF0IHRpY2tsZSBp dCB3aXRob3V0IG9wdGltaXphdGlvbjsgdGhlIG5ldyBDLUtlcm1pdCBtYWtlZmlsZQorICAgdGFr ZXMgY2FyZSBvZiB0aGlzLCBhbmQgc2hvd3MgaG93IHRvIGRvIGl0IGluIGNhc2UgdGhlIHNhbWUg dGhpbmcKKyAgIGJlZ2lucyBoYXBwZW5pbmcgd2l0aCBvdGhlciBtb2R1bGVzLgorCisgICBPbiBI UC1VWCA5LjAsIGEga2VybmVsIHBhcmFtZXRlciwgbWF4ZHNpeiAobWF4aW11bSBwcm9jZXNzIGRh dGEgc2VnbWVudAorICAgc2l6ZSksIHNlZW1zIHRvIGJlIGltcG9ydGFudC4gT24gTW90b3JvbGEg c3lzdGVtcywgaXQgaXMgMTZNQiBieQorICAgZGVmYXVsdCwgd2hlcmVhcyBvbiBSSVNDIHN5c3Rl bXMgdGhlIGRlZmF1bHQgaXMgbXVjaCBiaWdnZXIuIEluY3JlYXNpbmcKKyAgIG1heGRzaXogdG8g YWJvdXQgODBNQiBzZWVtcyB0byBtYWtlIHRoZSBwcm9ibGVtIGdvIGF3YXksIGJ1dCBvbmx5IGlm CisgICB0aGUgc3lzdGVtIGFsc28gaGFzIGEgbG90IG9mIHBoeXNpY2FsIG1lbW9yeSAtLSBvdGhl cndpc2UgaXQgc3dhcHMKKyAgIGl0c2VsZiB0byBkZWF0aC4KKworICAgVGhlIG9wdGltaXppbmcg Y29tcGlsZXIgbWlnaHQgY29tcGxhaW4gYWJvdXQgInNvbWUgb3B0aW1pemF0aW9ucworICAgc2tp cHBlZCIgb24gY2VydGFpbiBtb2R1bGVzLCBkdWUgdG8gbGFjayBvZiBzcGFjZSBhdmFpbGFibGUg dG8gdGhlCisgICBvcHRpbWl6ZXIuIFlvdSBjYW4gaW5jcmVhc2UgdGhlIHNwYWNlICh0aGUgaW5j YW50YXRpb24gZGVwZW5kcyBvbiB0aGUKKyAgIHBhcnRpY3VsYXIgY29tcGlsZXIgdmVyc2lvbiAt LSBzZWUgdGhlIFsyMTddbWFrZWZpbGUpLCBidXQgZG9pbmcgc28KKyAgIHRlbmRzIHRvIG1ha2Ug dGhlIGNvbXBpbGF0aW9ucyB0YWtlIGEgbXVjaCBsb25nZXIgdGltZS4gRm9yIGV4YW1wbGUsCisg ICB0aGUgImhwdXgwMTAwbysiIG1ha2VmaWxlIHRhcmdldCBhZGRzIHRoZSAiK09ub2xpbWl0IiBj b21waWxlciBmbGFnLAorICAgYW5kIGFib3V0IGFuIGhvdXIgdG8gdGhlIGNvbXBpbGUgdGltZSBv biBhbiBIUC05MDAwLzczMC4gQnV0IGl0ICpkb2VzKgorICAgcHJvZHVjZSBhbiBleGVjdXRhYmxl IHRoYXQgaXMgYWJvdXQgMTBLIHNtYWxsZXIgOi0pCisKKyAgIEluIHRoZSBtYWtlZmlsZSwgYWxs IEhQLVVYIGVudHJpZXMgYXV0b21hdGljYWxseSBza2lwIG9wdGltaXphdGlvbiBvZgorICAgcHJv YmxlbWF0aWMgbW9kdWxlcy4KKworMy4yLjIuIEZpbGUgVHJhbnNmZXIKKworICAgWyBbMjE4XVRv cCBdIFsgWzIxOV1Db250ZW50cyBdIFsgWzIyMF1TZWN0aW9uIENvbnRlbnRzIF0gWyBbMjIxXU5l eHQgXQorICAgWyBbMjIyXVByZXZpb3VzIF0KKworICAgVGVsbmV0IGNvbm5lY3Rpb25zIGludG8g SFAtVVggdmVyc2lvbnMgdXAgdG8gYW5kIGluY2x1ZGluZyAxMS4xMSAoYW5kCisgICBwb3NzaWJs eSAxMS4yMCkgdGVuZCBub3QgdG8gbGVuZCB0aGVtc2VsdmVzIHRvIGZpbGUgdHJhbnNmZXIgZHVl IHRvCisgICBsaW1pdGF0aW9ucywgcmVzdHJpY3Rpb25zLCBhbmQvb3IgYnVncyBpbiB0aGUgSFAt VVggVGVsbmV0IHNlcnZlcgorICAgYW5kL29yIHBzZXVkb3Rlcm1pbmFsIChwdHkpIGRyaXZlci4K KworICAgSW4gQy1LZXJtaXQgNi4wICgxOTk2KSBhbiB1bmV4cGVjdGVkIHNsb3duZXNzIHdhcyBu b3RlZCB3aGVuCisgICB0cmFuc2ZlcnJpbmcgZmlsZXMgb3ZlciBsb2NhbCBFdGhlcm5ldCBjb25u ZWN0aW9ucyB3aGVuIGFuIEhQLVVYIHN5c3RlbQorICAgKDkuMDUgb3IgMTAuMDApIHdhcyBvbiB0 aGUgcmVtb3RlIGVuZC4gVGhlIGZvbGxvd2luZyBleHBlcmltZW50IHdhcworICAgY29uZHVjdGVk IHRvIGRldGVybWluZSB0aGUgY2F1c2UuIEMtS2VybWl0IDYuMCB3YXMgdXNlZDsgdGhlIHNpdHVh dGlvbgorICAgaXMgc2xpZ2h0bHkgYmV0dGVyIHVzaW5nIEMtS2VybWl0IDcuMCdzIHN0cmVhbWlu ZyBmZWF0dXJlIGFuZCBIUC1VWAorICAgMTAuMjAgb24gdGhlIGZhciBlbmQuCisKKyAgIFRoZSBz eXN0ZW1zIHdlcmUgSFAtVVggMTAuMDAgKG9uIDcxNS8zMykgYW5kIFN1bk9TIDQuMS4zIChvbiBT cGFyYy0yMCksCisgICBib3RoIG9uIHRoZSBzYW1lIGxvY2FsIDEwTWJwcyBFdGhlcm5ldCwgcGFj a2V0IGxlbmd0aCA0MDk2LCBwYXJpdHkKKyAgIG5vbmUsIGNvbnRyb2wgcHJlZml4aW5nICJjYXV0 aW91cyIsIHVzaW5nIG9ubHkgbG9jYWwgZGlza3Mgb24gZWFjaAorICAgbWFjaGluZSAtLSBubyBO RlMuIEluIHRoZSBDLUtlcm1pdCA2LjAgKEFDSy9OQUspIGNhc2UsIHRoZSB3aW5kb3cgc2l6ZQor ICAgd2FzIDIwOyBpbiB0aGUgc3RyZWFtaW5nIGNhc2UgdGhlcmUgaXMgbm8gd2luZG93IHNpemUg KGkuZS4gaXQgaXMKKyAgIGluZmluaXRlKS4gVGhlIHRlc3QgZmlsZSB3YXMgQy1LZXJtaXQgZXhl Y3V0YWJsZSwgdHJhbnNmZXJyZWQgaW4gYmluYXJ5CisgICBtb2RlLiBDb25kaXRpb25zIHdlcmUg cmVsYXRpdmVseSBwb29yOiB0aGUgU3VuIGFuZCB0aGUgbG9jYWwgbmV0CisgICBoZWF2aWx5IGxv YWRlZDsgdGhlIEhQIHN5c3RlbSBpcyBvbGQsIHNsb3csIGFuZCBtZW1vcnktY29uc3RyYWluZWQu CisKKyAgICAgICAgICAgICAgICAgICBDLUtlcm1pdCA2LjAuLi4gICAgQy1LZXJtaXQgNy4wLi4u CisgTG9jYWwgICAgUmVtb3RlICAgQUNLL05BSy4uLi4uLi4uICAgIFN0cmVhbWluZy4uLi4uLgor IENsaWVudCAgIFNlcnZlciAgIFNlbmQgICAgUmVjZWl2ZSAgICBTZW5kICAgIFJlY2VpdmUKKyAg U3VuICAgICAgSFAgICAgICAgMzYgICAgICAgMTggICAgICAgIDY0ICAgICAgIDE4CisgIEhQICAg ICAgIEhQICAgICAgIDI1ICAgICAgIDE1ICAgICAgICAzNyAgICAgICAxNgorICBIUCAgICAgICBT dW4gICAgICA3NyAgICAgICA4MyAgICAgICAxMTggICAgICAgOTIKKyAgU3VuICAgICAgU3VuICAg ICAgNjAgICAgICAgNjAgICAgICAgMTUzICAgICAgMTU4CisKKyAgIFNvIHdoZW5ldmVyIEhQIGlz IHRoZSByZW1vdGUgd2UgaGF2ZSBwb29yIHBlcmZvcm1hbmNlLiBXaHk/CisKKyAgICAgKiBDaGFu Z2luZyBmaWxlIGRpc3BsYXkgdG8gQ1JUIGhhcyBubyBlZmZlY3QgKHNvIGl0J3Mgbm90IHRoZSBj dXJzZXMKKyAgICAgICBsaWJyYXJ5IG9uIHRoZSBjbGllbnQgc2lkZSkuCisgICAgICogQ2hhbmdp bmcgVENQIFJFQ1YtQlVGRkVSIG9yIFNFTkQtQlVGRkVSIGhhcyBsaXR0bGUgZWZmZWN0LgorICAg ICAqIFRlbGxpbmcgdGhlIGNsaWVudCB0byBtYWtlIGEgYmluYXJ5LW1vZGUgY29ubmVjdGlvbiAo U0VUIFRFTE5FVAorICAgICAgIEJJTkFSWSBSRVFVRVNURUQsIHdoaWNoIHN1Y2Nlc3NmdWxseSBu ZWdvdGlhdGVzIGEgYmluYXJ5CisgICAgICAgY29ubmVjdGlvbikgaGFzIG5vIGVmZmVjdCBvbiB0 aHJvdWdocHV0LgorCisgICBCVVQuLi4gSWYgSSBzdGFydCBIUC1VWCBDLUtlcm1pdCBhcyBhIFRD UCBzZXJ2aWNlOgorCisgIHNldCBob3N0ICogMzAwMAorICBzZXJ2ZXIKKworICAgYW5kIHRoZW4g ZnJvbSB0aGUgY2xpZW50ICJzZXQgaG9zdCB4eHggMzAwMCIsIEkgZ2V0OgorCisgICAgICAgICAg ICAgICAgICAgQy1LZXJtaXQgNi4wLi4uICAgIEMtS2VybWl0IDcuMC4uLgorIExvY2FsICAgIFJl bW90ZSAgIEFDSy9OQUsuLi4uLi4uLiAgICBTdHJlYW1pbmcuLi4uLi4KKyBDbGllbnQgICBTZXJ2 ZXIgICBTZW5kICAgIFJlY2VpdmUgICAgU2VuZCAgICBSZWNlaXZlCisgIFN1biAgICAgIEhQICAg ICAgIDc3ICAgICAgIDY3ICAgICAgIDEwNiAgICAgIDEzOQorICBIUCAgICAgICBIUCAgICAgICA1 MCAgICAgICA1MCAgICAgICAgNjQgICAgICAgNjIKKyAgSFAgICAgICAgU3VuICAgICAgNTcgICAg ICAgODUgICAgICAgMTU1ICAgICAgMTA1CisgIFN1biAgICAgIFN1biAgICAgIDU3ICAgICAgIDUw ICAgICAgIDMyMSAgICAgIDMxNAorCisgICBUaGVyZWZvcmUgdGhlIEhQLVVYIHRlbG5ldCBzZXJ2 ZXIgb3IgcHR5IGRyaXZlciBzZWVtcyB0byBiZSBhZGRpbmcgbW9yZQorICAgb3ZlcmhlYWQgdGhh biB0aGUgU3VuT1Mgb25lLCBhbmQgbW9zdCBvdGhlcnMuIFdoZW4gZ29pbmcgdGhyb3VnaCB0aGlz CisgICB0eXBlIG9mIGNvbm5lY3Rpb24gKGEgcmVtb3RlIHRlbG5ldCBzZXJ2ZXIpIHRoZXJlIGlz IGxpdHRsZSBLZXJtaXQgY2FuCisgICBkbyBpbXByb3ZlIG1hdHRlcnMsIHNpbmNlIHRoZSB0ZWxu ZXQgc2VydmVyIGFuZCBwdHkgZHJpdmVyIGFyZSBiZXR3ZWVuCisgICB0aGUgdHdvIEtlcm1pdHMs IGFuZCBuZWl0aGVyIEtlcm1pdCBwcm9ncmFtIGNhbiBoYXZlIGFueSBpbmZsdWVuY2Ugb3Zlcgor ICAgdGhlbSAoZXhjZXB0IHB1dHRpbmcgdGhlIFRlbG5ldCBjb25uZWN0aW9uIGluIGJpbmFyeSBt b2RlLCBidXQgdGhhdAorICAgZG9lc24ndCBoZWxwKS4KKworICAgKFRoZSBudW1iZXJzIGZvciB0 aGUgSFAtSFAgdHJhbnNmZXJzIGFyZSBsb3dlciB0aGFuIHRoZSBvdGhlcnMgc2luY2UKKyAgIGJv dGggS2VybWl0IHByb2Nlc3NlcyBhcmUgcnVubmluZyBvbiB0aGUgc2FtZSBzbG93IDMzTUh6IENQ VS4pCisKKyAgIE1hdHRlcnMgc2VlbSB0byBoYXZlIGRldGVyaW9yYXRlZCBpbiBIUC1VWCAxMS4g Tm93IGZpbGUgdHJhbnNmZXJzIG92ZXIKKyAgIFRlbG5ldCBjb25uZWN0aW9ucyBmYWlsIGNvbXBs ZXRlbHksIHJhdGhlciB0aGFuIGp1c3QgYmVpbmcgc2xvdy4gSW4gdGhlCisgICBmb2xsb3dpbmcg dHJpYWwsIGEgVGVsbmV0IGNvbm5lY3Rpb24gd2FzIG1hZGUgZnJvbSBLZXJtaXQgOTUgdG8gSFAt VVgKKyAgIDExLjExIG9uIGFuIEhQLTkwMDAvNzg1L0IyMDAwIG92ZXIgbG9jYWwgMTBNYnBzIEV0 aGVybmV0IHJ1bm5pbmcKKyAgIEMtS2VybWl0IDguMDAgaW4gc2VydmVyIG1vZGUgKHVuZGVyIHRo ZSBIUC1VWCBUZWxuZXQgc2VydmVyKToKKworICAgICAgICAgICAgICAgICAgIFRleHQuLi4uLi4u LiAgICBCaW5hcnkuLi4uLi4KKyAgU3RyZWFtICBQa3RsZW4gICBHRVQgICAgIFNFTkQgICAgR0VU ICAgICBTRU5ECisgICAgT24gICAgIDQwMDAgICAgRmFpbCAgICBGYWlsICAgIEZhaWwgICAgRmFp bAorICAgIE9mZiAgICA0MDAwICAgIEZhaWwgICAgRmFpbCAgICBGYWlsICAgIEZhaWwKKyAgICBP ZmYgICAgMjAwMCAgICBPSyAgICAgIEZhaWwgICAgT0sgICAgICBGYWlsCisgICAgT24gICAgIDIw MDAgICAgT0sgICAgICBGYWlsICAgIE9LICAgICAgRmFpbAorICAgIE9uICAgICAzMDAwICAgIEZh aWwgICAgRmFpbCAgICBGYWlsICAgIEZhaWwKKyAgICBPbiAgICAgMjUwMCAgICBGYWlsICAgIEZh aWwgICAgRmFpbCAgICBGYWlsCisgICAgT24gICAgIDIwNDcgICAgT0sgICAgICBGYWlsICAgIE9L ICAgICAgRmFpbAorICAgIE9uICAgICAyMDQ1ICAgIE9LICAgICAgRmFpbCAgICBPSyAgICAgIEZh aWwKKyAgICBPZmYgICAgIDUwMCAgICBPSyAgICAgIE9LICAgICAgT0sgICAgICBPSworICAgIE9u ICAgICAgNTAwICAgIE9LICAgICAgRmFpbCAgICBPSyAgICAgIEZhaWwKKyAgICBPbiAgICAgIDI0 MCAgICBPSyAgICAgIEZhaWwgICAgT0sgICAgICBGYWlsCisKKyAgIEFzIHlvdSBjYW4gc2VlLCBk b3dubG9hZHMgYXJlIHByb2JsZW1hdGljIHVubGVzcyB0aGUgcmVjZWl2ZXIncyBLZXJtaXQKKyAg IHBhY2tldCBsZW5ndGggaXMgMjA0NSBvciBsZXNzLCBidXQgdXBsb2FkcyB3b3JrIG9ubHkgd2l0 aCBzdHJlYW1pbmcKKyAgIGRpc2FibGVkIGFuZCB0aGUgcGFja2V0IGxlbmd0aCByZXN0cmljdGVk IHRvIDUwMC4gVG8gZm9yY2UgZmlsZQorICAgdHJhbnNmZXJzIHRvIHdvcmsgb24gdGhpcyBjb25u ZWN0aW9uLCB0aGUgZGVza3RvcCBLZXJtaXQgbXVzdCBiZSB0b2xkCisgICB0bzoKKworICBzZXQg c3RyZWFtaW5nIG9mZgorICBzZXQgcmVjZWl2ZSBwYWNrZXQtbGVuZ3RoIDIwMDAKKyAgc2V0IHNl bmQgcGFja2V0LWxlbmd0aCA1MDAKKworICAgSG93ZXZlciwgaWYgYSBjb25uZWN0aW9uIGlzIG1h ZGUgYmV0d2VlbiB0aGUgc2FtZSB0d28gcHJvZ3JhbXMgb24gdGhlCisgICBzYW1lIHR3byBjb21w dXRlcnMgb3ZlciB0aGUgc2FtZSBuZXR3b3JrLCBidXQgdGhpcyB0aW1lIGEgZGlyZWN0CisgICBz b2NrZXQtdG8tc29ja2V0IGNvbm5lY3Rpb24gYnlwYXNzaW5nIHRoZSBIUC1VWCBUZWxuZXQgc2Vy dmVyIGFuZCBwdHkKKyAgIGRyaXZlciAodGVsbCBIUC1VWCBDLUtlcm1pdCB0byAic2V0IGhvc3Qg L3NlcnZlciAqIDMwMDAgL3JhdyI7IHRlbGwKKyAgIGRlc2t0b3AgY2xpZW50IHByb2dyYW0gdG8g InNldCBob3N0IGJsYWggMzAwMCAvcmF3IiksIGV2ZXJ5dGhpbmcgd29ya3MKKyAgIHBlcmZlY3Rs eSB3aXRoIHRoZSBkZWZhdWx0IEtlcm1pdCBzZXR0aW5ncyAoc3RyZWFtaW5nLCA0SyBwYWNrZXRz LAorICAgbGliZXJhbCBjb250cm9sLWNoYXJhY3RlciB1bnByZWZpeGluZywgOC1iaXQgdHJhbnNw YXJlbmN5LCBldGMpOgorCisgICAgICAgICAgICAgICAgICAgVGV4dC4uLi4uLi4uICAgIEJpbmFy eS4uLi4uLgorICBTdHJlYW0gIFBrdGxlbiAgIEdFVCAgICAgU0VORCAgICBHRVQgICAgIFNFTkQK KyAgICBPbiAgICAgNDAwMCAgICBPSyAgICAgIE9LICAgICAgT0sgICAgICBPSworCisgICBBbmQg aW4gdGhpcyBjYXNlLCB0cmFuc2ZlciByYXRlcyB3ZXJlIGFwcHJveGltYXRlbHkgOTAwLDAwMCBj cHMuIFRvCisgICB2ZXJpZnkgdGhhdCB0aGUgYmVoYXZpb3IgcmVwb3J0ZWQgaGVyZSBpcyBub3Qg Y2F1c2VkIGJ5IHRoZSBuZXcgS2VybWl0CisgICByZWxlYXNlLCB0aGUgc2FtZSBleHBlcmltZW50 IHdhcyBwZXJmb3JtZWQgb24gYSBUZWxuZXQgY29ubmVjdGlvbiBmcm9tCisgICB0aGUgc2FtZSBQ QyBvdmVyIHRoZSBzYW1lIG5ldHdvcmsgdG8gdGhlIG9sZCA3MTUvMzMgcnVubmluZyBIUC1VWCAx MC4yMAorICAgYW5kIEMtS2VybWl0IDguMDAuIFRleHQgYW5kIGJpbmFyeSB1cGxvYWRzIGFuZCBk b3dubG9hZHMgd29ya2VkCisgICBwZXJmZWN0bHkgKGFsYmVpdCBzbG93bHkpIHdpdGggYWxsIHRo ZSBkZWZhdWx0IHNldHRpbmdzIC0tIHN0cmVhbWluZywKKyAgIDRLIHBhY2tldHMsIGV0Yy4KKwor My4yLjMuIERpYWxpbmcgT3V0IGFuZCBVVUNQIExvY2tmaWxlcyBpbiBIUC1VWAorCisgICBbIFsy MjNdVG9wIF0gWyBbMjI0XUNvbnRlbnRzIF0gWyBbMjI1XVNlY3Rpb24gQ29udGVudHMgXSBbIFsy MjZdTmV4dCBdCisgICBbIFsyMjddUHJldmlvdXMgXQorCisgICBIUCB3b3Jrc3RhdGlvbnMgZG8g bm90IGNvbWUgd2l0aCBkaWFsb3V0IGRldmljZXMgY29uZmlndXJlZDsgeW91IGhhdmUKKyAgIHRv IGRvIGl0IHlvdXJzZWxmIChhcyByb290KS4gRmlyc3QgbG9vayBpbiAvZGV2IHRvIHNlZSB3aGF0 J3MgdGhlcmU7CisgICBmb3IgZXhhbXBsZSBpbiBIUC1VWCAxMC4wMCBvciBsYXRlcjoKKworICBs cyAtbCAvZGV2L2N1YSoKKyAgbHMgLWwgL2Rldi90dHkqCisKKyAgIElmIHlvdSBmaW5kIGEgdHR5 MHAwIGRldmljZSBidXQgbm8gY3VhMHAwLCB5b3UnbGwgbmVlZCB0byBjcmVhdCBvbmUgaWYKKyAg IHlvdSB3YW50IHRvIGRpYWwgb3V0OyB0aGUgdHR5MHAwIGRvZXMgbm90IHdvcmsgZm9yIGRpYWxp bmcgb3V0LiBJdCdzCisgICBlYXN5OiBzdGFydCBTQU07IGluIHRoZSBtYWluIFNhbSB3aW5kb3cs IGRvdWJsZS1jbGljayBvbiBQZXJpcGhlcmFsCisgICBEZXZpY2UsIHRoZW4gaW4gdGhlIFBlcmlw aGVyYWwgRGV2aWNlcyB3aW5kb3csIGRvdWJsZS1jbGljayBvbgorICAgVGVybWluYWxzIGFuZCBN b2RlbXMuIEluIHRoZSBUZXJtaW5hbHMgYW5kIE1vZGVtcyBkaWFsb2csIGNsaWNrIG9uCisgICBB Y3Rpb25zLCB0aGVuIGNob29zZSAiQWRkIG1vZGVtIiBhbmQgZmlsbCBpbiB0aGUgYmxhbmtzLiBG b3IgZXhhbXBsZToKKyAgIFBvcnQgbnVtYmVyIDAsIHNwZWVkIDU3NjAwIChoaWdoZXIgc3BlZWRz IHRlbmQgbm90IHRvIHdvcmsgcmVsaWFibHkpLAorICAgIlVzZSBkZXZpY2UgZm9yIGNhbGxpbmcg b3V0IiwgZG8gTk9UICJSZWNlaXZlIGluY29taW5nIGNhbGxzIiAodW5sZXNzCisgICB5b3Uga25v dyB3aGF0IHlvdSBhcmUgZG9pbmcpLCBsZWF2ZSAiQ0NJVFQgbW9kZW0iIHVuY2hlY2tlZCB1bmxl c3MgeW91CisgICByZWFsbHkgaGF2ZSBvbmUsIGFuZCBkbyBzZWxlY3QgIlVzZSBoYXJkd2FyZSBm bG93IGNvbnRyb2wgKFJUUy9DVFMpIi4KKyAgIFRoZW4gY2xpY2sgT0suIFRoaXMgY3JlYXRlcyBj dWEwcDAgYXMgd2VsbCBhcyBjdWwwcDAgYW5kIHR0eWQwcDAKKworICAgSWYgdGhlIGZvbGxvd2lu ZyBzZXF1ZW5jZToKKworICBzZXQgbGluZSAvZGV2L2N1YTBwMCA7IG9yIG90aGVyIGRldmljZQor ICBzZXQgc3BlZWQgMTE1MjAwICAgICA7IG9yIG90aGVyIG5vcm1hbCBzcGVlZAorCisgICBwcm9k dWNlcyB0aGUgbWVzc2FnZSAiP1Vuc3VwcG9ydGVkIGxpbmUgc3BlZWQiLiBUaGlzIG1lYW5zIGVp dGhlciB0aGF0CisgICB0aGUgcG9ydCBpcyBub3QgY29uZmlndXJlZCBmb3IgZGlhbG91dCAoZ28g aW50byBTQU0gYXMgZGVzY3JpYmVkIGFib3ZlCisgICBhbmQgbWFrZSBzdXJlICJVc2UgZGV2aWNl IGZvciBjYWxsaW5nIG91dCIgaXMgc2VsZWN0ZWQpLCBvciBlbHNlIHRoYXQKKyAgIHNwZWVkIHlv dSBoYXZlIGdpdmVuIChzdWNoIGFzIDQ2MDgwMCkgaXMgc3VwcG9ydGVkIGJ5IHRoZSBvcGVyYXRp bmcKKyAgIHN5c3RlbSBidXQgbm90IGJ5IHRoZSBwaHlzaWNhbCBkZXZpY2UgKGluIHdoaWNoIGNh c2UsIHVzZSBhIGxvd2VyIHNwZWVkCisgICBsaWtlIDU3NjAwKS4KKworICAgSW4gSFAtVVggOS4w LCBzZXJpYWwgZGV2aWNlIG5hbWVzIGJlZ2FuIHRvIGNoYW5nZS4gVGhlIG9sZGVyIG5hbWVzCisg ICBsb29rZWQgbGlrZSAiL2Rldi9jdWEwMCIsICIvZGV2L3R0eTAxIiwgZXRjIChzb21ldGltZXMg d2l0aCBvbmx5IG9uZQorICAgZGlnaXQpLiBUaGUgbmV3ZXIgbmFtZXMgaGF2ZSB0d28gZGlnaXRz IHdpdGggdGhlIGxldHRlciAicCIgaW4gYmV0d2Vlbi4KKyAgIEhQLVVYIDgueHggYW5kIGVhcmxp ZXIgaGF2ZSB0aGUgb2xkZXIgZm9ybSwgSFAtVVggMTAuMDAgYW5kIGxhdGVyIGhhdmUKKyAgIHRo ZSBuZXdlciBmb3JtLiBIUC1VWCA5Lnh4IGhhcyB0aGUgbmV3ZXIgZm9ybSBvbiBTZXJpZXMgODAw IG1hY2hpbmVzLAorICAgYW5kIHRoZSBvbGRlciBmb3JtIG9uIG90aGVyIGhhcmR3YXJlIG1vZGVs cy4gVGhlIHNpdHVhdGlvbiBpcworICAgc3VtbWFyaXplZCBpbiB0aGUgZm9sbG93aW5nIHRhYmxl ICh0aGUgQ29udmlvIDEwLjAgY29sdW1uIGFwcGxpZXMgdG8KKyAgIEhQLVVYIDEwIGFuZCAxMSku CisKKyAgQ29udmVyZ2VkIEhQLVVYIFNlcmlhbCBJL08gRmlsZW5hbWVzIDogVFRZIE11eCBOYW1p bmcKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgIEdlbmVyYWwgbWVhbmluZyAgICAgIE9sZCBGb3JtICAgICBT ODAwIDkuMCAgICAgICAgICAgQ29udmlvIDEwLjAKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIHR0eSogaGFy ZHdpcmVkIHBvcnRzICB0dHk8WVk+ICAgICB0dHk8WD5wPFk+ICAgICAgICAgdHR5PEQ+cDxwPgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlhZzptdXg8WD4gICAgICAgIGRp YWc6bXV4PEQ+CisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICB0dHlkKiBkaWFsLWluIG1vZGVtcyAgdHR5ZDxZ WT4gICAgdHR5ZDxYPnA8WT4gICAgICAgIHR0eWQ8RD5wPHA+CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBkaWFnOnR0eWQ8WD5wPFk+ICAgZGlhZzp0dHlkPEQ+cDxwPgorICAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAgY3VhKiBhdXRvLWRpYWwgb3V0ICAgIGN1YTxZWT4gICAgIGN1YTxYPnA8 WT4gICAgICAgICBjdWE8RD5wPHA+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBkaWFnOmN1YTxYPnA8WT4KKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIGN1bCogZGlhbC1vdXQgICAgICAg ICBjdWw8WVk+ICAgICBjdWw8WD5wPFk+ICAgICAgICAgY3VsPEQ+cDxwPgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZGlhZzpjdWw8WD5wPFk+CisgIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICAgPFg+PSBMVSAoTG9naWNhbCBVbml0KSAgPEQ+PSBEZXZzcGVjIChkZWNpbWFsIGNhcmQgaW5z dGFuY2UpCisgICA8WT4gb3IgPFlZPiA9IFBvcnQgICAgICA8cD49IFBvcnQKKworICAgRm9yIGRp YWxpbmcgb3V0LCB5b3Ugc2hvdWxkIHVzZSB0aGUgY3VhIG9yIGN1bCBkZXZpY2VzLiBXaGVuIEMt S2VybWl0J3MKKyAgIENBUlJJRVIgc2V0dGluZyBpcyBBVVRPIG9yIE9OLCBDLUtlcm1pdCBzaG91 bGQgcG9wIGJhY2sgdG8gaXRzIHByb21wdAorICAgYXV0b21hdGljYWxseSBpZiB0aGUgY2Fycmll ciBzaWduYWwgZHJvcHMsIGUuZy4gd2hlbiB5b3UgbG9nIG91dCBmcm9tCisgICB0aGUgcmVtb3Rl IGNvbXB1dGVyIG9yIHNlcnZpY2UuIElmIHlvdSB1c2UgdGhlIHR0eTxEPnA8ZD4gKGUuZy4gdHR5 MHAwKQorICAgZGV2aWNlLCB0aGUgY2FycmllciBzaWduYWwgc2hvdWxkIGJlIGlnbm9yZWQuIFRo ZSB0dHk8RD5wPGQ+IGRldmljZQorICAgc2hvdWxkIGJlIHVzZWQgZm9yIGRpcmVjdCBjb25uZWN0 aW9ucyB3aGVyZSB0aGUgY2FycmllciBzaWduYWwgZG9lcyBub3QKKyAgIGZvbGxvdyBSUy0yMzIg Y29udmVudGlvbnMgKHVzZSB0aGUgY3VsIGRldmljZSBmb3IgaGFyZHdpcmVkIGNvbm5lY3Rpb25z CisgICB0aHJvdWdoIGEgdHJ1ZSBudWxsIG1vZGVtKS4gRG8gbm90IHVzZSB0aGUgdHR5ZDxEPnA8 ZD4gZGV2aWNlIGZvcgorICAgZGlhbGluZyBvdXQuCisKKyAgIEtlcm1pdCdzIGFjY2VzcyB0byBz ZXJpYWwgZGV2aWNlcyBpcyBjb250cm9sbGVkIGJ5ICJVVUNQIGxvY2tmaWxlcyIsCisgICB3aGlj aCBhcmUgaW50ZW5kZWQgdG8gcHJldmVudCBkaWZmZXJlbnQgdXNlcnMgdXNpbmcgZGlmZmVyZW50 IHNvZnR3YXJlCisgICBwcm9ncmFtcyAoS2VybWl0LCBjdSwgZXRjLCBhbmQgVVVDUCBpdHNlbGYp IGZyb20gYWNjZXNzaW5nIHRoZSBzYW1lCisgICBzZXJpYWwgZGV2aWNlIGF0IHRoZSBzYW1lIHRp bWUuIFdoZW4gYSBkZXZpY2UgaXMgaW4gdXNlIGJ5IGEgcGFydGljdWxhcgorICAgdXNlciwgYSBm aWxlIHdpdGggYSBzcGVjaWFsIG5hbWUgaXMgY3JlYXRlZCBpbjoKKworICAvdmFyL3Nwb29sL2xv Y2tzICAoSFAtVVggMTAuMDAgYW5kIGxhdGVyKQorICAvdXNyL3Nwb29sL3V1Y3AgICAoSFAtVVgg OS54eCBhbmQgZWFybGllcikKKworICAgVGhlIGZpbGUncyBuYW1lIGluZGljYXRlcyB0aGUgZGV2 aWNlIHRoYXQgaXMgaW4gdXNlLCBhbmQgaXRzIGNvbnRlbnRzCisgICBpbmRpY2F0ZXMgdGhlIHBy b2Nlc3MgSUQgKHBpZCkgb2YgdGhlIHByb2Nlc3MgdGhhdCBpcyB1c2luZyB0aGUgZGV2aWNlLgor ICAgU2luY2Ugc2VyaWFsIGRldmljZXMgYW5kIHRoZSBsb2NrcyBkaXJlY3RvcnkgYXJlIG5vdCBi b3RoIHB1YmxpY2x5CisgICByZWFkYWJsZSBhbmQgd3JpdGFibGUsIEtlcm1pdCBhbmQgb3RoZXIg Y29tbXVuaWNhdGlvbiBzb2Z0d2FyZSBtdXN0IGJlCisgICBpbnN0YWxsZWQgc2V0dWlkIHRvIHRo ZSBvd25lciAoYmluKSBvZiB0aGUgc2VyaWFsIGRldmljZSBhbmQgc2V0Z2lkIHRvCisgICB0aGUg Z3JvdXAgKGRhZW1vbikgb2YgdGhlIC92YXIvc3Bvb2wvbG9ja3MgZGlyZWN0b3J5LiBLZXJtaXQn cyBzZXR1aWQKKyAgIGFuZCBzZXRnaWQgcHJpdmlsZWdlcyBhcmUgZW5hYmxlZCBvbmx5IHdoZW4g b3BlbmluZyB0aGUgZGV2aWNlIGFuZAorICAgYWNjZXNzaW5nIHRoZSBsb2NrZmlsZXMuCisKKyAg IExldCdzIHNheSAidW5pdCIgbWVhbnMgYSBzdHJpbmcgb2YgZGVjaW1hbCBkaWdpdHMgKHRoZSBp bnRlcmZhY2UKKyAgIGluc3RhbmNlIG51bWJlcikgZm9sbG93ZWQgKGluIEhQLVVYIDEwLjAwIGFu ZCBsYXRlcikgYnkgdGhlIGxldHRlciAicCIKKyAgIChsb3dlcmNhc2UpLCBmb2xsb3dlZCBieSBh bm90aGVyIHN0cmluZyBvZiBkZWNpbWFsIGRpZ2l0cyAodGhlIHBvcnQKKyAgIG51bWJlciBvbiB0 aGUgaW50ZXJmYWNlKSwgZS5nLjoKKworICAiMHAwIiwgIjBwMSIsICIxcDAiLCBldGMgICAgICAg KEhQLVVYIDEwLjAwIGFuZCBsYXRlcikKKyAgIjBwMCIsICIwcDEiLCAiMXAwIiwgZXRjICAgICAg IChIUC1VWCA5Lnh4IG9uIFNlcmllcyA4MDApCisgICIwMCIsICAiMDEiLCAgIjEwIiwgICIwIiwg ZXRjICAoSFAtVVggOS54eCBub3Qgb24gU2VyaWVzIDgwMCkKKyAgIjAwIiwgICIwMSIsICAiMTAi LCAgIjAiLCBldGMgIChIUC1VWCA4Lnh4IGFuZCBlYXJsaWVyKQorCisgICBUaGVuIGEgbm9ybWFs IHNlcmlhbCBkZXZpY2UgKGRyaXZlcikgbmFtZSBjb25zaXN0cyBvZiBhIHByZWZpeCAoInR0eSIs CisgICAidHR5ZCIsICJjdWEiLCAiY3VsIiwgb3IgcG9zc2libHkgImN1YWQiIG9yICJjdWxkIikg Zm9sbG93ZWQgYnkgYSB1bml0LAorICAgZS5nLiAiY3VhMHAwIi4gS2VybWl0J3MgdHJlYXRtZW50 IG9mIFVVQ1AgbG9ja2ZpbGVzIGlzIGFzIGNsb3NlIGFzCisgICBwb3NzaWJsZSB0byB0aGF0IG9m IHRoZSBIUC1VWCAiY3UiIHByb2dyYW0uIEhlcmUgaXMgYSB0YWJsZSBvZiB0aGUKKyAgIGxvY2tm aWxlcyB0aGF0IEtlcm1pdCBjcmVhdGVzIGZvciB1bml0IDBwMDoKKworICBTZWxlY3Rpb24gICAg ICBMb2NrZmlsZSAxICAgICBMb2NrZmlsZSAyCisgIC9kZXYvdHR5MHAwICAgIExDSy4udHR5MHAw ICAgIChub25lKQorKiAvZGV2L3R0eWQwcDAgICBMQ0suLnR0eWQwcDAgICAobm9uZSkKKyAgL2Rl di9jdWEwcDAgICAgTENLLi5jdWEwcDAgICAgTENLLi50dHlkMHAwCisgIC9kZXYvY3VsMHAwICAg IExDSy4uY3VsMHAwICAgIExDSy4udHR5ZDBwMAorICAvZGV2L2N1YWQwcDAgICBMQ0suLmN1YWQw cDAgICBMQ0suLnR0eWQwcDAKKyAgL2Rldi9jdWxkMHAwICAgTENLLi5jdWxkMHAwICAgTENLLi50 dHlkMHAwCisgIDxvdGhlcj4gICAgICAgIExDSy4uPG90aGVyPiAgIChub25lKQorCisgICAoKiA9 IERpYWxpbiBkZXZpY2UsIHNob3VsZCBub3QgYmUgdXNlZC4pCisKKyAgIEluIG90aGVyIHdvcmRz LCBpZiB0aGUgZGV2aWNlIG5hbWUgYmVnaW5zIHdpdGggImN1IiwgYSBzZWNvbmQgbG9ja2ZpbGUK KyAgIGZvciB0aGUgInR0eWQiIGRldmljZSwgc2FtZSB1bml0LCBpcyBjcmVhdGVkLCB3aGljaCBz aG91bGQgcHJldmVudAorICAgZGlhbGluIGFjY2VzcyBvbiB0aGF0IGRldmljZS4KKworICAgVGhl IDxvdGhlcj4gY2FzZSBhbGxvd3MgZm9yIHN5bWJvbGljIGxpbmtzLCBldGMsIGJ1dCBvZiBjb3Vy c2UgaXQgaXMKKyAgIG5vdCBmb29scHJvb2Ygc2luY2Ugd2UgaGF2ZSBubyB3YXkgb2YgdGVsbGlu ZyB3aGljaCBkZXZpY2UgaXMgcmVhbGx5CisgICBiZWluZyB1c2VkLgorCisgICBXaGVuIEMtS2Vy bWl0IHRyaWVzIHRvIG9wZW4gYSBkaWFsb3V0IGRldmljZSB3aG9zZSBuYW1lIGVuZHMgd2l0aCBh CisgICAidW5pdCIsIGl0IHNlYXJjaGVzIHRoZSBsb2NrZmlsZSBkaXJlY3RvcnkgZm9yIGFsbCBw b3NzaWJsZSBuYW1lcyBmb3IKKyAgIHRoZSBzYW1lIHVuaXQuIEZvciBleGFtcGxlLCBpZiB1c2Vy IHNlbGVjdHMgL2Rldi9jdWwycDMsIEtlcm1pdCBsb29rcworICAgZm9yIGxvY2tmaWxlcyBuYW1l ZDoKKworICBMQ0suLnR0eTJwMworICBMQ0suLnR0eWQycDMKKyAgTENLLi5jdWEycDMKKyAgTENL Li5jdWwycDMKKyAgTENLLi5jdWFkMnAzCisgIExDSy4uY3VsZDJwMworCisgICBJZiBhbnkgb2Yg dGhlc2UgZmlsZXMgYXJlIGZvdW5kLCBLZXJtaXQgb3BlbnMgdGhlbSB0byBmaW5kIG91dCB0aGUg SUQKKyAgIChwaWQpIG9mIHRoZSBwcm9jZXNzIHRoYXQgY3JlYXRlZCB0aGVtOyBpZiB0aGUgcGlk IGlzIHN0aWxsIHZhbGlkLCB0aGUKKyAgIHByb2Nlc3MgaXMgc3RpbGwgYWN0aXZlLCBhbmQgc28g dGhlIFNFVCBMSU5FIGNvbW1hbmQgZmFpbHMgYW5kIHRoZSB1c2VyCisgICBpcyBpbmZvcm1lZCBv ZiB0aGUgcGlkIHNvIHMvaGUgY2FuIHVzZSAicHMiIHRvIGZpbmQgb3V0IHdobyBpcyB1c2luZwor ICAgdGhlIGRldmljZS4KKworICAgSWYgdGhlIHBpZCBpcyBub3QgdmFsaWQsIHRoZSBmaWxlIGlz IGRlbGV0ZWQuIElmIGFsbCBzdWNoIGZpbGVzIChpLmUuCisgICB3aXRoIHNhbWUgInVuaXQiIGRl c2lnbmF0aW9uKSBhcmUgc3VjY2Vzc2Z1bGx5IHJlbW92ZWQsIHRoZW4gdGhlIFNFVAorICAgTElO RSBjb21tYW5kIHN1Y2NlZWRzOyB1cCB0byBzaXggbWVzc2FnZXMgYXJlIHByaW50ZWQgdGVsbGlu ZyB0aGUgdXNlcgorICAgd2hpY2ggInN0YWxlIGxvY2tmaWxlcyIgYXJlIGJlaW5nIHJlbW92ZWQu CisKKyAgIFdoZW4gdGhlICJzZXQgbGluZSIgY29tbWFuZCBzdWNjZWVkcyBpbiBIUC1VWCAxMC4w MCBhbmQgbGF0ZXIsIEMtS2VybWl0CisgICBhbHNvIGNyZWF0ZXMgYSBVbml4IFN5c3RlbSBWIFI0 ICJhZHZpc29yeSBsb2NrIiBhcyBhIGZ1cnRoZXIgcHJlY2F1dGlvbgorICAgKGJ1dCBub3QgZ3Vh cmFudGVlKSBhZ2FpbnN0IGFueSBvdGhlciBwcm9jZXNzIG9idGFpbmluZyBhY2Nlc3MgdG8gdGhl CisgICBkZXZpY2Ugd2hpbGUgeW91IGFyZSB1c2luZyBpdC4KKworICAgSWYgdGhlIHNlbGVjdGVk IGRldmljZSB3YXMgaW4gdXNlIGJ5ICJjdSIsIEtlcm1pdCBjYW4ndCBvcGVuIGl0LAorICAgYmVj YXVzZSAiY3UiIGhhcyBjaGFuZ2VkIGl0cyBvd25lcnNoaXAsIHNvIHdlIG5ldmVyIGdldCBhcyBm YXIgYXMKKyAgIGxvb2tpbmcgYXQgdGhlIGxvY2tmaWxlcy4gSW4gdGhlIG5vcm1hbCBjYXNlLCB3 ZSBjYW4ndCBldmVuIGxvb2sgYXQgdGhlCisgICBkZXZpY2UgdG8gc2VlIHdobyB0aGUgb3duZXIg aXMgYmVjYXVzZSBpdCBpcyB2aXNpYmxlIG9ubHkgdG8gaXRzCisgICAocHJlc2VudCkgb3duZXIu IEluIHRoaXMgY2FzZSwgS2VybWl0IHNheXMgKGZvciBleGFtcGxlKToKKworICAvZGV2L2N1YTBw MDogUGVybWlzc2lvbiBkZW5pZWQKKworICAgV2hlbiBLZXJtaXQgcmVsZWFzZXMgYSBkZXZpY2Ug aXQgaGFzIHN1Y2Nlc3NmdWxseSBvcGVuZWQsIGl0IHJlbW92ZXMKKyAgIGFsbCB0aGUgbG9ja2Zp bGVzIHRoYXQgaXQgY3JlYXRlZC4gVGhpcyBhbHNvIGhhcHBlbnMgd2hlbmV2ZXIgS2VybWl0Cisg ICBleGl0cyAidW5kZXIgaXRzIG93biBwb3dlciIuCisKKyAgIElmIEtlcm1pdCBpcyBraWxsZWQg d2l0aCBhIGRldmljZSBvcGVuLCB0aGUgbG9ja2ZpbGUocykgYXJlIGxlZnQKKyAgIGJlaGluZC4g VGhlIG5leHQgS2VybWl0IHByb2dyYW0gdGhhdCB0cmllcyB0byBhc3NpZ24gdGhlIGRldmljZSwg dW5kZXIKKyAgIGFueSBvZiBpdHMgdmFyaW91cyBuYW1lcywgd2lsbCBhdXRvbWF0aWNhbGx5IGNs ZWFuIHVwIHRoZSBzdGFsZQorICAgbG9ja2ZpbGVzIGJlY2F1c2UgdGhlIHBpZHMgdGhleSBjb250 YWluIGFyZSBpbnZhbGlkLiBUaGUgYmVoYXZpb3Igb2YgY3UKKyAgIGFuZCBvdGhlciBjb21tdW5p Y2F0aW9uIHByb2dyYW1zIHVuZGVyIHRoZXNlIGNvbmRpdGlvbnMgc2hvdWxkIGJlIHRoZQorICAg c2FtZS4KKworICAgSGVyZSwgYnkgdGhlIHdheSwgaXMgYSBzdW1tYXJ5IG9mIHRoZSBkaWZmZXJl bmNlcyBiZXR3ZWVuIHRoZSBIUC1VWAorICAgcG9ydCBkcml2ZXIgdHlwZXMgZnJvbSBKb2huIFBl enphbm8gb2YgSFA6CisKKyAgICAgVGhlcmUgYXJlIHRocmVlIHR5cGVzIG9mIGRldmljZSBmaWxl cyBmb3IgZWFjaCBwb3J0LgorCisgICAgIFRoZSB0dHlkWFhYIGRldmljZSBmaWxlIGlzIGRlc2ln bmVkIHRvIHdvcmsgYXMgZm9sbG93czoKKworICAgIDEuIFRoZSBwcm9jZXNzIHRoYXQgb3BlbnMg aXQgZG9lcyBOT1QgZ2V0IGNvbnRyb2wgb2YgdGhlIHBvcnQgdW50aWwgQ0QKKyAgICAgICBpcyBh c3NlcnRlZC4gVGhpcyB3YXMgaW50ZW50aW9uYWwgKG92ZXIgMTUgeWVhcnMgYWdvKSB0byBhbGxv dworICAgICAgIGdldHR5IHRvIG9wZW4gdGhlIHBvcnQgYnV0IG5vdCBjb250cm9sIGl0IHVudGls IHNvbWVvbmUgY2FsbGVkIGluLgorICAgICAgIElmIGEgcHJvY2VzcyB3YW50cyB0byB1c2UgdGhl IGRpcmVjdCBvciBjYWxsb3V0IGRldmljZSBmaWxlcworICAgICAgICh0dHlYWFggYW5kIGN1bFhY WCByZXNwZWN0aXZlbHkpLCB0aGV5IHdpbGwgdGhlbiBnZXQgY29udHJvbCBhbmQKKyAgICAgICBn ZXR0eSB3b3VsZCBiZSBibG9ja2VkLiBUaGlzIGVsaW1pbmF0ZWQgdGhlIG5lZWQgdG8gdXNlIHV1 Z2V0dHkKKyAgICAgICAoYW5kIGl0cyBpbmhlcmVudCBwcm9ibGVtcyB3aXRoIGxvY2sgZmlsZXMp IGZvciBtb2RlbXMuIFlvdSBjYW4gc2VlCisgICAgICAgdGhpcyBkZW1vbnN0cmF0ZWQgYnkgdGhl IGZhY3QgdGhhdCAicHMgLWVmIiBzaG93cyBhID8gaW4gdGhlIHR0eQorICAgICAgIGNvbHVtbiBm b3IgdGhlIGdldHR5IHByb2Nlc3MgYXMgZ2V0dHkgZG9lcyBub3QgaGF2ZSB0aGUgcG9ydCB5ZXQu CisgICAgMi4gT25jZSBDRCBpcyBhc3NlcnRlZCwgdGhlIHBvcnQgaXMgY29udHJvbGxlZCBieSBn ZXR0eSAob3IgdGhlCisgICAgICAgcHJvY2VzcyBoYW5kbGluZyBhbiBpbmNvbWluZyBjYWxsKSBp ZiB0aGVyZSB3YXMgbm8gcHJvY2VzcyB1c2luZworICAgICAgIHRoZSBwb3J0LiBUaGUgPyBpbiB0 aGUgInBzIiBjb21tYW5kIG5vdyBzaG93cyB0aGUgcG9ydC4gQXQgdGhpcworICAgICAgIHBvaW50 LCB0aGUgcG9ydCBhY2NlcHRzIGRhdGEuCisKKyAgICAgVGhlcmVmb3JlIHlvdSBzaG91bGQgdXNl IGVpdGhlciB0aGUgY2FsbG91dCBjdWxYWFggZGV2aWNlIGZpbGUKKyAgICAgKGltbWVkaWF0ZSBj b250cm9sIGJ1dCBubyBkYXRhIHVudGlsIENEIGlzIGFzc2VydGVkKSBvciB0aGUgZGlyZWN0Cisg ICAgIGRldmljZSBmaWxlIHR0eVhYWCB3aGljaCBnaXZlcyBpbW1lZGlhdGUgY29udHJvbCBhbmQg aW1tZWRpYXRlIGRhdGEKKyAgICAgYW5kIHdoaWNoIGlnbm9yZXMgYnkgZGVmYXVsdCBtb2RlbSBj b250cm9sIHNpZ25hbHMuCisKKyAgICAgVGhlIHR0eWRYWFggZGV2aWNlIHNob3VsZCBiZSB1c2Vk IG9ubHkgZm9yIGNhbGxpbiBhbmQgbXkKKyAgICAgcmVjb21tZW5kYXRpb24gaXMgdG8gdXNlIGl0 IG9ubHkgZm9yIGdldHR5IGFuZCB1dWdldHR5LgorCiszLjIuNCBOb3RlcyBvbiBTcGVjaWZpYyBI UC1VWCBSZWxlYXNlcworCisgICBTRUNUSU9OIENPTlRFTlRTCisKKyAgMy4yLjQuMS4gWzIyOF1I UC1VWCAxMQorICAzLjIuNC4yLiBbMjI5XUhQLVVYIDEwCisgIDMuMi40LjMuIFsyMzBdSFAtVVgg OQorICAzLjIuNC40LiBbMjMxXUhQLVVYIDgKKyAgMy4yLjQuNS4gWzIzMl1IUC1VWCA3IGFuZCBF YXJsaWVyCisKKzMuMi40LjEuIEhQLVVYIDExCisKKyAgIFsgWzIzM11Ub3AgXSBbIFsyMzRdQ29u dGVudHMgXSBbIFsyMzVdU2VjdGlvbiBDb250ZW50cyBdIFsgWzIzNl1OZXh0IF0KKworICAgQXMg bm90ZWQgaW4gWzIzN11TZWN0aW9uIDMuMi4yLCB0aGUgSFAtVVggMTEgVGVsbmV0IHNlcnZlciBh bmQvb3IKKyAgIHBzZXVkb3Rlcm1pbmFsIGRyaXZlciBhcmUgYSBzZXJpb3VzIGltcGVkaW1lbnQg dG8gZmlsZSB0cmFuc2ZlciBvdmVyCisgICBUZWxuZXQgY29ubmVjdGlvbnMgaW50byBIUC1VWC4g SWYgeW91IGhhdmUgYSBUZWxuZXQgY29ubmVjdGlvbiBpbnRvCisgICBIUC1VWCAxMSwgdGVsbCB5 b3VyIGRlc2t0b3AgS2VybWl0IHByb2dyYW0gdG86CisKKyAgc2V0IHN0cmVhbWluZyBvZmYKKyAg c2V0IHJlY2VpdmUgcGFja2V0LWxlbmd0aCAyMDAwCisgIHNldCBzZW5kIHBhY2tldC1sZW5ndGgg NTAwCisKKyAgIEZpbGUgdHJhbnNmZXIgc3BlZWRzIG92ZXIgY29ubmVjdGlvbnMgZnJvbSBIUC1V WCAxMSAoZGlhbGVkIG9yIFRlbG5ldCkKKyAgIGFyZSBub3QgaW1wZWRlZCB3aGF0c29ldmVyLCBh bmQgY2FuIGdvIGF0IHdoYXRldmVyIHNwZWVkIGlzIGFsbG93ZWQgYnkKKyAgIHRoZSBjb25uZWN0 aW9uIGFuZCB0aGUgS2VybWl0IHBhcnRuZXIgb24gdGhlIGZhciBlbmQuCisKKyAgIFBBLVJJU0Mg YmluYXJpZXMgZm9yIEhQLVVYIDEwLjIwIG9yIGxhdGVyIHNob3VsZCBydW4gb24gYW55IFBBLVJJ U0MKKyAgIHN5c3RlbSwgUzcwMCBvciBTODAwLCBhcyBsb25nIGFzIHRoZSBiaW5hcnkgd2FzIG5v dCBidWlsdCB1bmRlciBhIGxhdGVyCisgICBIUC1VWCB2ZXJzaW9uIHRoYW4gdGhlIGhvc3Qgb3Bl cmF0aW5nIHN5c3RlbS4gSFAtVVggMTEuMDAgYW5kIDExLjExIGFyZQorICAgb25seSBmb3IgUEEt UklTQyBzeXN0ZW1zLiBIUC1VWCAxMS4yMCBpcyBvbmx5IGZvciBJQTY0IChzdWJzZXF1ZW50Cisg ICBIUC1VWCByZWxlYXNlcyB3aWxsIGJlIGZvciBib3RoIFBBLVJJU0MgYW5kIElBNjQpLiBUbyBj aGVjayBiaW5hcnkKKyAgIGNvbXBhdGliaWxpdHksIHRoZSBmb2xsb3dpbmcgQy1LZXJtaXQgOC4w IGJpbmFyaWVzIHdlcmUgcnVuCisgICBzdWNjZXNzZnVsbHkgb24gYW4gSFAtOTAwMC83ODUgd2l0 aCBIUC1VWCAxMS4xMToKKworICAgICAqIE1vZGVsIDd4eCBIUC1VWCAxMC4yMAorICAgICAqIE1v ZGVsIDh4eCBIUC1VWCAxMC4yMAorICAgICAqIE1vZGVsIDd4eCBIUC1VWCAxMS4wMAorICAgICAq IE1vZGVsIDh4eCBIUC1VWCAxMS4wMAorICAgICAqIE1vZGVsIDd4eCBIUC1VWCAxMS4xMQorICAg ICAqIE1vZGVsIDh4eCBIUC1VWCAxMS4xMQorCisgICBCaW5hcmllcyBidWlsdCB1bmRlciBzb21l IG9mIHRoZSBlYXJsaWVyIEhQLVVYIHJlbGVhc2VzLCBzdWNoIGFzIDkuMDUsCisgICBtaWdodCBh bHNvIHdvcmssIGJ1dCBvbmx5IGlmIGJ1aWx0IGZvciB0aGUgc2FtZSBoYXJkd2FyZSBmYW1pbHkg KGUuZy4KKyAgIHM3MDApLgorCiszLjIuNC4yLiBIUC1VWCAxMAorCisgICBbIFsyMzhdVG9wIF0g WyBbMjM5XUNvbnRlbnRzIF0gWyBbMjQwXVNlY3Rpb24gQ29udGVudHMgXSBbIFsyNDFdTmV4dCBd CisgICBbIFsyNDJdUHJldmlvdXMgXQorCisgICBCZWdpbm5pbmcgaW4gSFAtVVggMTAuMTAsIGxp YmN1cnNlcyBpcyBsaW5rZWQgdG8gbGlieGN1cnNlcywgdGhlIG5ldworICAgVU5JWDk1IChYL09w ZW4pIHZlcnNpb24gb2YgY3Vyc2VzLCB3aGljaCBoYXMgc29tZSBzZXJpb3VzIGJ1Z3M7IHNvbWUK KyAgIHJvdXRpbmVzLCB3aGVuIGNhbGxlZCwgd291bGQgaGFuZyBhbmQgbmV2ZXIgcmV0dXJuLCBz b21lIHdvdWxkIGR1bXAKKyAgIGNvcmUuIEV2aWRlbnRseSBsaWJ4Y3Vyc2VzIGNvbnRhaW5zIGEg c2VsZWN0KCkgcm91dGluZSwgYW5kIHdoZW5ldmVyCisgICBDLUtlcm1pdCBjYWxscyB3aGF0IGl0 IHRoaW5rcyBpcyB0aGUgcmVndWxhciAoc29ja2V0cykgc2VsZWN0KCksIGl0CisgICBnZXRzIHRo ZSBjdXJzZXMgb25lLCBjYXVzaW5nIGEgc2VnbWVudGF0aW9uIGZhdWx0LiBUaGVyZSBpcyBhIHBh dGNoIGZvcgorICAgdGhpcyBmcm9tIEhQLCBQSENPXzgwODYsICJzNzAwXzgwMCAxMC4xMCBsaWJj dXJzZXMgcGF0Y2giLCAic2hhcmVkIGxpYgorICAgY3Vyc2VzIHByb2dyYW0gaGFuZ3Mgb24gMTAu MTAiLCAiMTAuMTAgZW5oYW5jZWQgWC9PcGVuIGN1cnNlcyBjb3JlCisgICBkdW1wcyBkdWUgdG8g dXNpbmcgd3Jvbmcgc2VsZWN0IGNhbGwiLCA5Ni8wOC8wMiAoeW91IGNhbiB0ZWxsIGlmIHRoZQor ICAgcGF0Y2ggaXMgaW5zdGFsbGVkIHdpdGggIndoYXQgL3Vzci9saWIvbGlieGN1cnNlcy4xIjsg dGhlIHVucGF0Y2hlZAorICAgdmVyc2lvbiBpcyA3Ni4yMCwgdGhlIHBhdGNoZWQgb25lIGlzIDc2 LjIwLjEuMikuIEl0IGhhcyBiZWVuIHZlcmlmaWVkCisgICB0aGF0IEMtS2VybWl0IHdvcmtzIE9L IHdpdGggdGhlIHBhdGNoZWQgbGlicmFyeSwgYnV0IHJlc3VsdHMgYXJlIG5vdAorICAgZGVmaW5p dGUgZm9yIEhQLVVYIDEwLjIwIG9yIGhpZ2hlci4KKworICAgVG8gZW5zdXJlIHRoYXQgQy1LZXJt aXQgd29ya3MgZXZlbiBvbiBub24tcGF0Y2hlZCBIUC1VWCAxMC4xMCBzeXN0ZW1zLAorICAgc2Vw YXJhdGUgbWFrZWZpbGUgZW50cmllcyBhcmUgcHJvdmlkZWQgZm9yIEhQLVVYIDEwLjAwLzEwLjAx LCAxMC4xMCwKKyAgIDEwLjIwLCBldGMsIGluIHdoaWNoIHRoZSBlbnRyaWVzIGZvciAxMC4xMCBh bmQgYWJvdmUgbGluayB3aXRoCisgICBsaWJIY3Vyc2VzLCB3aGljaCBpcyAiSFAgY3Vyc2VzIiwg dGhlIG9uZSB0aGF0IHdhcyB1c2VkIGluIDEwLjAwLzEwLjAxLgorICAgSFAtVVggMTEuMjAgYW5k IGxhdGVyLCBob3dldmVyLCBsaW5rIHdpdGggbGliY3Vyc2VzLCBhcyBsaWJIY3Vyc2VzCisgICBk aXNhcHBlYXJlZCBpbiAxMS4yMC4KKworMy4yLjQuMy4gSFAtVVggOQorCisgICBbIFsyNDNdVG9w IF0gWyBbMjQ0XUNvbnRlbnRzIF0gWyBbMjQ1XVNlY3Rpb24gQ29udGVudHMgXSBbIFsyNDZdTmV4 dCBdCisgICBbIFsyNDddUHJldmlvdXMgXQorCisgICBIUC1VWCA5LjAwIGFuZCA5LjAxIG5lZWQg cGF0Y2ggUEhORV8xMDU3MiAobm90ZTogdGhpcyByZXBsYWNlcworICAgUEhORV8zNjQxKSBmb3Ig aHB0dDAubywgYXNpbzAubywgYW5kIHR0eWNvbW4ubyBpbiBsaWJocC11eC5hLiBDb250YWN0Cisg ICBIZXdsZXR0IFBhY2thcmQgaWYgeW91IG5lZWQgdGhpcyBwYXRjaC4gV2l0aG91dCBpdCwgdGhl IGRpYWxvdXQgZGV2aWNlCisgICAodHR5KSB3aWxsIGJlIGh1bmcgYWZ0ZXIgZmlyc3QgdXNlOyBz dWJzZXF1ZW50IGF0dGVtcHRzIHRvIHVzZSB3aWxsCisgICByZXR1cm4gYW4gZXJyb3IgbGlrZSAi ZGV2aWNlIGJ1c3kiLiAoVGhlcmUgYXJlIGFsc28gZXF1aXZhbGVudCBwYXRjaGVzCisgICBmb3Ig czcwMCA5LjAzIDkuMDUgOS4wNyAoUEhORV8xMDU3MykgYW5kIHM4MDAgOS4wMCA5LjA0IChQSE5F XzEwNDE2KS4KKworICAgV2hlbiBDLUtlcm1pdCBpcyBpbiBzZXJ2ZXIgbW9kZSwgaXQgbWlnaHQg aGF2ZSB0cm91YmxlIGV4ZWN1dGluZyBSRU1PVEUKKyAgIEhPU1QgY29tbWFuZHMuIFRoaXMgcHJv YmxlbSBoYXBwZW5zIHVuZGVyIEhQLVVYIDkuMDAgKE1vdG9yb2xhKSBhbmQKKyAgIEhQLVVYIDku MDEgKFJJU0MpIElGIHRoZSBDLVNoZWxsIGlzIHRoZSBsb2dpbiBzaGVsbCBBTkQgd2l0aCB0aGUK KyAgIEMtU2hlbGwgUmV2aXNpb24gNzAuMTUuIEJlc3QgdGhpbmcgaXMgdG8gaW5zdGFsbCBIUCdz IFBhdGNoIFBIQ09fNDkxOQorICAgZm9yIFNlcmllcyAzMDAvNDAwIGFuZCBQSENPXzUwMTUgZm9y IHRoZSBTZXJpZXMgNzAwLzgwMC4gUEhDT181MDE1IGlzCisgICBjYWxsZWQgInM3MDBfODAwIDku WCBjdW11bGF0aXZlIGNzaCgxKSBwYXRjaCB3aXRoIG1lbW9yeSBsZWFrIGZpeCIKKyAgIHdoaWNo IHdvcmtzIGZvciBIUC1VWCA5LjAwLCA5LjAxLCA5LjAzLCA5LjA0LCA5LjA1IGFuZCA5LjA3LiBB dCBsZWFzdAorICAgeW91IG5lZWQgQy1TaGVsbCBSZXZpc2lvbiA3Mi4xMiEKKworICAgQy1LZXJt aXQgd29ya3MgZmluZSAtLSBpbmNsdWRpbmcgaXRzIGN1cnNlcy1iYXNlZCBmaWxlLXRyYW5zZmVy IGRpc3BsYXkKKyAgIC0tIG9uIHRoZSBjb25zb2xlIHRlcm1pbmFsLCBpbiBhIHJlbW90ZSBzZXNz aW9uIChlLmcuIHdoZW4gbG9nZ2VkIGluIHRvCisgICB0aGUgSFAgOTAwMCBvbiBhIHRlcm1pbmFs IHBvcnQgb3Igd2hlbiB0ZWxuZXR0ZWQgb3IgcmxvZ2luJ2QpLCBhbmQgaW4KKyAgIGFuIEhQLVZV RSBocHRlcm0gd2luZG93IG9yIGFuIHh0ZXJtIHdpbmRvdy4KKworMy4yLjQuNC4gSFAtVVggOAor CisgICBbIFsyNDhdVG9wIF0gWyBbMjQ5XUNvbnRlbnRzIF0gWyBbMjUwXVNlY3Rpb24gQ29udGVu dHMgXSBbIFsyNTFdTmV4dCBdCisgICBbIFsyNTJdUHJldmlvdXMgXQorCisgICBUbyBtYWtlIEMt S2VybWl0IHdvcmsgb24gSFAtVVggOC4wNSBvbiBhIG1vZGVsIDcyMCwgb2J0YWluIGFuZCBpbnN0 YWxsCisgICBIUC1VWCBwYXRjaCBQSE5FXzA4OTkuIFRoaXMgcGF0Y2ggZGVhbHMgd2l0aCBhIGxv dCBvZiBkcml2ZXIgaXNzdWVzLAorICAgcGFydGljdWxhcmx5IHJlbGF0ZWQgdG8gY29tbXVuaWNh dGlvbiBhdCBoaWdoZXIgc3BlZWRzLgorCisgICBPbmUgdXNlciByZXBvcnRzOgorCisgICAgIE9u IEhQLVVYIDggRE9OJ1QgaW5zdGFsbCAndHR5IHBhdGNoJyBQSEtMXzQ2NTYsIGluc3RhbGwgUEhL TF8zMDQ3CisgICAgIGluc3RlYWQhIFllc3RlcmRheSBJIHRyaWVkIHRoaXMgbGF0ZXN0IHR0eSBw YXRjaCBQSEtMXzQ2NTYgYW5kIGhhZAorICAgICB0ZXJyaWJsZSBwcm9ibGVtcy4gVGhpcyBwYXRj aCBzaG91bGQgZml4IFJUUy9DVFMgcHJvYmxlbXMuIFdpdGggdGV4dAorICAgICB0cmFuc2ZlciBh bGwgbG9va3MgbmljZS4gQnV0IHdoZW4gSSBzd2l0Y2hlZCBvdmVyIHRvIGJpbmFyeSBmaWxlcwor ICAgICB0aGUgc2VyaWFsIGludGVyZmFjZSByZXR1cm5lZCBvbmx5IHJ1YmlzaCB0byBDLUtlcm1p dC4gQWxsIHNvcnRzIG9mCisgICAgIHByb3RvY29sLCBDUkMgYW5kIHBhY2tlZCBlcnJvcnMgSSBo YWQuIEFmdGVyIHNldmVyYWwgdGVzdHMgYW5kIGFmdGVyCisgICAgIHVuaW5zdGFsbGluZyB0aGF0 IHBhdGNoLCBhbGwgdHJhbnNmZXJzIHdvcmtlZCBmaW5lLiBNQidzIG9mIGRhdGEKKyAgICAgd2l0 aG91dCBhbnkgZXJyb3JzLiBTbyBrZWVwIHlvdXIgZmluZ2VycyBhd2F5IGZyb20gdGhhdCBwYXRj aC4gSWYKKyAgICAgYW55Ym9keSBuZWVkcyB0aGUgUEhLTF8zMDQ3IHBhdGNoIEkgaGF2ZSBpdCBo ZXJlLiBJdCBpcyBubyBsb25nZXIKKyAgICAgYXZhaWxhYmxlIGZyb20gSFAncyBwYXRjaCBiYXNl LgorCiszLjIuNC41LiBIUC1VWCA3IGFuZCBFYXJsaWVyCisKKyAgIFsgWzI1M11Ub3AgXSBbIFsy NTRdQ29udGVudHMgXSBbIFsyNTVdU2VjdGlvbiBDb250ZW50cyBdIFsKKyAgIFsyNTZdUHJldmlv dXMgXQorCisgICBXaGVuIHRyYW5zZmVycmluZyBmaWxlcyBpbnRvIEhQLVVYIDUgb3IgNiBvdmVy IGEgVGVsbmV0IGNvbm5lY3Rpb24sIHlvdQorICAgbXVzdCBub3QgdXNlIHN0cmVhbWluZywgYW5k IHlvdSBtdXN0IG5vdCB1c2UgYSBwYWNrZXQgbGVuZ3RoIGdyZWF0ZXIKKyAgIHRoYW4gNTEyLiBI b3dldmVyLCB5b3UgY2FuIHVzZSBzdHJlYW1pbmcgYW5kIGxvbmdlciBwYWNrZXRzIHdoZW4KKyAg IHNlbmRpbmcgZmlsZXMgZnJvbSBIUC1VWCBvbiBhIFRlbG5ldCBjb25uZWN0aW9uLiBJbiBDLUtl cm1pdCA4LjAsIHRoZQorICAgZGVmYXVsdCByZWNlaXZlIHBhY2tldCBsZW5ndGggZm9yIEhQLVVY IDUgYW5kIDYgd2FzIGNoYW5nZWQgdG8gNTAwIChidXQKKyAgIHlvdSBjYW4gc3RpbGwgaW5jcmVh c2UgaXQgd2l0aCBTRVQgUkVDRUlWRSBQQUNLRVQtTEVOR1RIIGlmIHlvdSB3aXNoLAorICAgZS5n LiBmb3Igbm9uLVRlbG5ldCBjb25uZWN0aW9ucykuIERpc2FibGUgc3RyZWFtaW5nIHdpdGggU0VU IFNUUkVBTUlORworICAgT0ZGLgorCisgICBUaGUgSFAtVVggNS4wMCB2ZXJzaW9uIG9mIEMtS2Vy bWl0IGRvZXMgbm90IGluY2x1ZGUgdGhlIGZ1bGxzY3JlZW4KKyAgIGZpbGUtdHJhbnNmZXIgYmVj YXVzZSBvZiBwcm9ibGVtcyB3aXRoIHRoZSBjdXJzZXMgbGlicmFyeS4KKworICAgSWYgSFAtVVgg NS4yMSB3aXRoIFdvbGxvbmdvbmcgVENQL0lQIGlzIG9uIHRoZSByZW1vdGUgZW5kIG9mIGEgVGVs bmV0CisgICBjb25uZWN0aW9uLCBzdHJlYW1pbmcgdHJhbnNmZXJzIHRvIEhQLVVYIGludmFyaWFi bHkgZmFpbC4gV29ya2Fyb3VuZDoKKyAgIFNFVCBTVFJFQU1JTkcgT0ZGLiBQYWNrZXRzIGxvbmdl ciB0aGFuIGFib3V0IDEwMDAgc2hvdWxkIG5vdCBiZSB1c2VkLgorICAgVHJhbnNmZXJzIGZyb20g dGhlc2Ugc3lzdGVtcywgaG93ZXZlciwgY2FuIHVzZSBzdHJlYW1pbmcgYW5kL29yIGxvbmdlcgor ICAgcGFja2V0cy4KKworICAgUmVwb3J0ZWRseSwgIlt0aGVyZSBpc10gYSBidWcgaW4gQy1LZXJt aXQgdXNpbmcgSFAtVVggdmVyc2lvbiA1LjIxIG9uCisgICB0aGUgSFAtOTAwMCBzZXJpZXMgNTAw IGNvbXB1dGVycy4gSXQgb25seSBvY2N1cnMgd2hlbiB0aGUgY29udHJvbGxpbmcKKyAgIHRlcm1p bmFsIGlzIHVzaW5nIGFuIEhQLTI3MTQwIHNpeC1wb3J0IG1vZGVtIG11eC4gVGhlIHByb2JsZW0g aXMgbm90CisgICBwcmVzZW50IGlmIHRoZSBjb250cm9sbGluZyB0ZXJtaW5hbCBpcyBsb2dnZWQg aW50byBhbiBIUC0yNzEzMAorICAgZWlnaHQtcG9ydCBtdXguIFRoZSBzeW1wdG9tIGlzIHRoYXQg anVzdCBhZnRlciBkaWFsaW5nIHN1Y2Nlc3NmdWxseSBhbmQKKyAgIGNvbm5lY3RpbmcgS2VybWl0 IGxvY2tzIHVwIGFuZCB0aGUgcG9ydCBpcyB1bnVzYWJsZSB1bnRpbCBib3RoIGZvcmtzIG9mCisg ICBLZXJtaXQgYW5kIHRoZSBsb2dpbiBzaGVsbCBhcmUga2lsbGVkLiIgKFRoaXMgcmVwb3J0IHBy ZWRhdGVzIEMtS2VybWl0CisgICA2LjAgYW5kIG1pZ2h0IG5vIGxvbmdlciBhcHBseS4pCisKKzMu Mi41LiBIUC1VWCBhbmQgWC4yNQorCisgICBbIFsyNTddVG9wIF0gWyBbMjU4XUNvbnRlbnRzIF0g WyBbMjU5XVNlY3Rpb24gQ29udGVudHMgXSBbCisgICBbMjYwXVByZXZpb3VzIF0KKworICAgQWx0 aG91Z2ggQy1LZXJtaXQgcHJlc2VudGx5IGRvZXMgbm90IGluY2x1ZGUgYnVpbHQtaW4gc3VwcG9y dCBmb3IgSFAtVVgKKyAgIFguMjUgKGFzIGl0IGRvZXMgZm9yIHRoZSBTdW4gYW5kIElCTSBYLjI1 IHByb2R1Y3RzKSwgaXQgY2FuIHN0aWxsIGJlCisgICB1c2VkIHRvIG1ha2UgWC4yNSBjb25uZWN0 aW9ucyBhcyBmb2xsb3dzOiBzdGFydCBLZXJtaXQgYW5kIHRoZW4gdGVsbmV0CisgICB0byBsb2Nh bGhvc3QuIEFmdGVyIGxvZ2dpbmcgYmFjayBpbiwgc3RhcnQgcGFkZW0gYXMgeW91IHdvdWxkIG5v cm1hbGx5CisgICBkbyB0byBjb25uZWN0IG92ZXIgWC4yNS4gUGFkZW0gYWN0cyBhcyBhIHBpcGUg YmV0d2VlbiBLZXJtaXQgYW5kIFguMjUuCisgICBJbiBDLUtlcm1pdCA3LjAsIHlvdSBtaWdodCBh bHNvIGJlIGFibGUgdG8gYXZvaWQgdGhlICJ0ZWxuZXQgbG9jYWxob3N0IgorICAgc3RlcCBieSB1 c2luZzoKKworICBDLUtlcm1pdD4gcHR5IHBhZGVtIGFkZHJlc3MKKworICAgVGhpcyB3b3JrcyBp ZiBwYWRlbSB1c2VzIHN0YW5kYXJkIGkvbyAod2hvIGtub3dzPykuCisKKzMuMy4gQy1LRVJNSVQg QU5EIExJTlVYCisKKyAgIFsgWzI2MV1Ub3AgXSBbIFsyNjJdQ29udGVudHMgXSBbIFsyNjNdU2Vj dGlvbiBDb250ZW50cyBdIFsgWzI2NF1OZXh0IF0KKyAgIFsgWzI2NV1QcmV2aW91cyBdCisKKyAg IFNFQ1RJT04gQ09OVEVOVFMKKworICAzLjMuMS4gWzI2Nl1Qcm9ibGVtcyBCdWlsZGluZyBDLUtl cm1pdCBmb3IgTGludXgKKyAgMy4zLjIuIFsyNjddUHJvYmxlbXMgd2l0aCBTZXJpYWwgRGV2aWNl cyBpbiBMaW51eAorICAzLjMuMy4gWzI2OF1UZXJtaW5hbCBFbXVsYXRpb24gaW4gTGludXgKKyAg My4zLjQuIFsyNjldRGF0ZXMgYW5kIFRpbWVzCisgIDMuMy41LiBbMjcwXVN0YXJ0dXAgRXJyb3Jz CisgIDMuMy42LiBbMjcxXVRoZSBGdWxsc2NyZWVuIEZpbGUgVHJhbnNmZXIgRGlzcGxheQorCisg ICAgIChBdWd1c3QgMjAxMCkgUmVwb3J0ZWRseSBDLUtlcm1pdCBwYWNrYWdlcyBmb3IgY2VydGFp biBMaW51eAorICAgICBkaXN0cmlidXRpb25zIHN1Y2ggYXMgQ2VudG9zIGFuZCBVYnVudHUgaGF2 ZSBjZXJ0YWluIGZlYXR1cmVzCisgICAgIGRpc2FibGVkLCBmb3IgZXhhbXBsZSB0aGUgU1NIIGNv bW1hbmQsIFNFVCBIT1NUIFBUWSAvU1NILCBhbmQKKyAgICAgcGVyaGFwcyBhbnl0aGluZyBlbHNl IHRvIGRvIHdpdGggU1NIIGFuZC9vciBwc2V1ZG90ZXJtaW5hbHMgYW5kIHdobworICAgICBrbm93 cyB3aGF0IGVsc2UuIElmIHlvdSBkb3dubG9hZCB0aGUgcmVndWxhciBwYWNrYWdlICgidGFyYmFs bCIpCisgICAgIGZyb20gdGhlIEtlcm1pdCBQcm9qZWN0IGFuZCBidWlsZCBmcm9tIGl0ICgibWFr ZSBsaW51eCIpLCBldmVyeXRoaW5nCisgICAgIGlzIGZpbmUuCisKKyAgICAgQy1LZXJtaXQgaW4g VWJ1bnR1IDEwLjA0IGFuZCA5LjEwIHdhcyByZXBvcnRlZCBzbG93IHRvIHN0YXJ0IGJlY2F1c2UK KyAgICAgaXQgd2FzIHRyeWluZyB0byByZXNvbHZlIHRoZSBJUCBhZGRyZXNzIDI1NS4yNTUuMjU1 LjI1NS4gTGF0ZXIsIGFsc28KKyAgICAgaW4gcmVjZW50IERlYmlhbiB2ZXJzaW9ucy4gVGhlIGZv bGxvd2luZyBpcyBzZWVuIGluIHRoZSBzdHJhY2U6CisKK3dyaXRlKDMsICJSRVNPTFZFLUFERFJF U1MgMjU1LjI1NS4yNTUuMjU1XG4iLCAzMikKKworICAgICBUaGlzIGlzIG5vdCBLZXJtaXQgUHJv amVjdCBjb2RlLiBUdXJucyBvdXQgdG8gYmUgc29tZXRoaW5nIGluCisgICAgIGdsaWJjJ3MgcmVz b2x2ZXIsIGFuZCBjYW4gYmUgZml4ZWQgYnkgY2hhbmdpbmcgL2V0Yy9uc3N3aXRjaC5jb25mLAor ICAgICBidXQgaXQgbWlnaHQgYnJlYWsgb3RoZXIgc29mdHdhcmUsIHN1Y2ggYXMgWzI3Ml1BdmFo aSBvciBhbnl0aGluZworICAgICAoc3VjaCBhcyBHbm9tZSwgSmF2YSwgb3IgQ3VwcykgdGhhdCBk ZXBlbmRzIG9uIGl0LiBJJ20gbm90IHN1cmUKKyAgICAgd2hlcmUgaXQgaGFwcGVuczsgSSBkb24n dCB0aGluayBLZXJtaXQgdHJpZXMgdG8gZ2V0IGl0cyBJUCBhZGRyZXNzCisgICAgIGF0IHN0YXJ0 dXAgdGltZSwgb25seSB3aGVuIGl0J3MgbmVlZGVkIG9yIGFza2VkIGZvciwgZS5nLiB3aGVuCisg ICAgIG1ha2luZyBhIGNvbm5lY3Rpb24gb3IgZXZhbHVhdGluZyBcdihpcGFkZHJlc3MpLgorCisg ICBSRUZFUkVOQ0VTCisKKyAgIEZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLCByZWFkIHRoZSBbMjcz XWNvbXAub3MubGludXgubWlzYywKKyAgIFsyNzRdY29tcC5vcy5saW51eC5hbnN3ZXJzLCBhbmQg b3RoZXIgTGludXgtb3JpZW50ZWQgbmV3c2dyb3VwcywgYW5kCisgICBzZWU6CisKKyAgIFRoZSBM aW51eCBEb2N1bWVudCBQcm9qZWN0IChMRFApCisgICAgICAgICAgWzI3NV1odHRwOi8vd3d3LnRs ZHAub3JnLworCisgICBUaGUgTGludXggRkFRCisgICAgICAgICAgWzI3Nl1odHRwOi8vd3d3LnRs ZHAub3JnL0ZBUS9MaW51eC1GQVEuaHRtbAorCisgICBUaGUgTGludXggSE9XVE9zIChlc3BlY2lh bGx5IHRoZSBTZXJpYWwgSE9XVE8pCisKKyAgICAgWzI3N11odHRwOi8vd3d3LnRsZHAub3JnL0hP V1RPL1NlcmlhbC1IT1dUTy5odG1sCisKKyAgICAgWzI3OF1odHRwOi8vdGxkcC5vcmcvSE9XVE8v TW9kZW0tSE9XVE8uaHRtbAorCisgICAgIFsyNzldZnRwOi8vc3Vuc2l0ZS51bmMuZWR1L3B1Yi9M aW51eC9kb2NzL0hPV1RPCisKKyAgICAgWzI4MF1mdHA6Ly90c3gtMTEubWl0LmVkdS9wdWIvbGlu dXgvZG9jcy9IT1dUTworCisgICAgIFsyODFdaHR0cDovL3d3dy50bGRwLm9yZy9IT1dUTy8KKwor ICAgICBbMjgyXWh0dHA6Ly93d3cudGxkcC5vcmcvaG1pcnJvcnMuaHRtbAorCisgICBMaW51eCBW ZW5kb3IgVGVjaCBTdXBwb3J0IFBhZ2VzOgorCisgICAgIFsyODNdaHR0cDovL3d3dy5yZWRoYXQu Y29tL2FwcHMvc3VwcG9ydC8KKworICAgICBbMjg0XWh0dHA6Ly93d3cuZGViaWFuLm9yZy9zdXBw b3J0CisKKyAgICAgWzI4NV1odHRwOi8vd3d3LnNsYWNrd2FyZS5jb20vc3VwcG9ydC8KKworICAg ICBbMjg2XWh0dHA6Ly93d3cuY2FsZGVyYS5jb20vc3VwcG9ydC8KKworICAgICBbMjg3XVNVU0Ug TGludXggU3VwcG9ydAorCisgICAgIFsyODhdaHR0cDovL3d3dy5tYW5kcmFrZS5jb20vc3VwcG9y dC8KKworICAgICBbMjg5XWh0dHA6Ly93d3cudHVyYm9saW51eC5jb20vc3VwcG9ydC8KKworICAg TGludXggV2lubW9kZW0gU3VwcG9ydAorICAgICAgICAgIFsyOTBdaHR0cDovL3d3dy5saW5tb2Rl bXMub3JnLworCisgICBBbHNvIHNlZSBnZW5lcmFsIGNvbW1lbnRzIG9uIFBDLWJhc2VkIFVuaXhl cyBpbiBbMjkxXVNlY3Rpb24gMy4wLgorCisgICBXaGF0IExpbnV4IHZlcnNpb24gaXMgaXQ/IC0t ICJ1bmFtZSAtYSIgc3VwcGxpZXMgb25seSBrZXJuZWwKKyAgIGluZm9ybWF0aW9uLCBidXQgdGhl c2UgZGF5cyBpdCdzIHRoZSBkaXN0cmlidXRpb24gdGhhdCBtYXR0ZXJzOiBSZWQgSGF0CisgICA3 LjMsIERlYmlhbiAyLjIsIFNsYWNrd2FyZSA4LjAsIGV0Yy4gVW5mb3J0dW5hdGVseSB0aGVyZSdz IG5vCisgICBjb25zaXN0ZW50IHdheSB0byBnZXQgdGhlIGRpc3RyaWJ1dGlvbiB2ZXJzaW9uLiBV c3VhbGx5IGl0J3MgaW4gYQorICAgZGlzdHJpYnV0aW9uLXNwZWNpZmljIGZpbGU6CisKKyAgICAg UmVkIEhhdDogICAvZXRjL2lzc3VlIG9yIC9ldGMvcmVkaGF0LXJlbGVhc2UKKyAgICAgRGViaWFu OiAgICAvZXRjL2RlYmlhbl92ZXJzaW9uCisgICAgIFNsYWNrd2FyZTogL2V0Yy9zbGFja3dhcmUt dmVyc2lvbiAoYXQgbGVhc3QgaW4gbGF0ZXIgdmVyc2lvbnMpCisKKyAgIERpZCB5b3Uga25vdzog REVDbmV0IGlzIGF2YWlsYWJsZSBmb3IgTGludXg/IFNlZToKKworICBbMjkyXWh0dHA6Ly9saW51 eC5kcmVhbXRpbWUub3JnL2RlY25ldC8KKworICAgKEJ1dCB0aGVyZSBpcyBubyBzdXBwb3J0IGZv ciBpdCBpbiBDLUtlcm1pdCAtLSBhbnlib2R5IGludGVyZXN0ZWQgaW4KKyAgIGFkZGluZyBpdCwg cGxlYXNlIFsyOTNdbGV0IG1lIGtub3cpLgorCisgICBCZWZvcmUgcHJvY2VlZGluZywgbGV0J3Mg aGFuZGxlIHRoZSBzb21lIG9mIHRoZSBtb3N0IGZyZXF1ZW50bHkgYXNrZWQKKyAgIHF1ZXN0aW9u IGluIHRoZSBMaW51eCBuZXdzZ3JvdXBzOgorCisgICAgMS4gTmVpdGhlciBDLUtlcm1pdCBub3Ig YW55IG90aGVyIExpbnV4IGFwcGxpY2F0aW9uIGNhbiB1c2UgV2lubW9kZW1zLAorICAgICAgIGV4 Y2VwdCBpbiB0aGUgWzI5NF1yYXJlIGNhc2VzIHdoZXJlIExpbnV4IGRyaXZlcnMgaGF2ZSBiZWVu IHdyaXR0ZW4KKyAgICAgICBmb3IgdGhlbS4gU2VlIFsyOTVdU2VjdGlvbiAzLjAuMiBmb3IgZGV0 YWlscy4KKyAgICAyLiAiV2h5IGRvZXMgaXQgdGFrZSBzdWNoIGEgbG9uZyB0aW1lIHRvIG1ha2Ug YSB0ZWxuZXQgY29ubmVjdGlvbiB0bworICAgICAgIChvciBmcm9tKSBteSBMaW51eCBQQz8iICh0 aGlzIGFwcGxpZXMgdG8gQy1LZXJtaXQgYW5kIHRvIHJlZ3VsYXIKKyAgICAgICBUZWxuZXQpLiBN b3N0IHRlbG5ldCBzZXJ2ZXJzIHRoZXNlIGRheXMgcGVyZm9ybSByZXZlcnNlIEROUyBsb29rdXBz CisgICAgICAgb24gdGhlIGNsaWVudCAoZm9yIHNlY3VyaXR5IGFuZC9vciBsb2dnaW5nIHJlYXNv bnMpLiBJZiB0aGUgVGVsbmV0CisgICAgICAgY2xpZW50J3MgYWRkcmVzcyBjYW5ub3QgYmUgZm91 bmQgYnkgdGhlIHNlcnZlcidzIGxvY2FsIEROUyBzZXJ2ZXIsCisgICAgICAgdGhlIEROUyByZXF1 ZXN0IGdvZXMgb3V0IHRvIHRoZSBJbnRlcm5ldCBhdCBsYXJnZSwgYW5kIHRoaXMgY2FuCisgICAg ICAgdGFrZSBxdWl0ZSBzb21lIHRpbWUuIFRoZSBzb2x1dGlvbiB0byB0aGlzIHByb2JsZW0gaXMg dG8gbWFrZSBzdXJlCisgICAgICAgdGhhdCBib3RoIGNsaWVudCBhbmQgaG9zdCBhcmUgcmVnaXN0 ZXJlZCBpbiBETlMsIGFuZCB0aGF0IHRoZQorICAgICAgIHJlZ2lzdHJhdGlvbnMgYXJlIGV4cG9y dGVkLiBDLUtlcm1pdCBpdHNlbGYgcGVyZm9ybXMgcmV2ZXJzZSBETlMKKyAgICAgICBsb29rdXBz IHVubGVzcyB5b3UgdGVsbCBpdCBub3QgdG87IHRoaXMgaXMgdG8gYWxsb3cgQy1LZXJtaXQgdG8g bGV0CisgICAgICAgeW91IGtub3cgd2hpY2ggaG9zdCBpdCBpcyBhY3R1YWxseSBjb25uZWN0ZWQg dG8gaW4gY2FzZSB5b3UgaGF2ZQorICAgICAgIG1hZGUgYSBjb25uZWN0aW9uIHRvIGEgaG9zdCBw b29sIChtdWx0aWhvbWVkIGhvc3QpLiBZb3UgY2FuIGRpc2FibGUKKyAgICAgICBDLUtlcm1pdCdz IHJldmVyc2UgRE5TIGxvb2t1cCB3aXRoIFNFVCBUQ1AgUkVWRVJTRS1ETlMtTE9PS1VQIE9GRi4K KyAgICAzLiAoQW55IHF1ZXN0aW9uIHRoYXQgaGFzIHRoZSB3b3JkICJUZWxuZXQiIGluIGl0Li4u KSBUaGUga25lZS1qZXJrCisgICAgICAgcmVhY3Rpb24gaXMgImRvbid0IHVzZSBUZWxuZXQsIHVz ZSBTU0ghIiBUaGVyZSdzIG5vdGhpbmcgd3Jvbmcgd2l0aAorICAgICAgIFRlbG5ldC4gSW4gZmFj dCBpdCdzIGZhciBzdXBlcmlvciB0byBTU0ggYXMgYSBwcm90b2NvbCBpbiB0ZXJtcyBvZgorICAg ICAgIGZlYXR1cmVzIGFuZCBleHRlbnNpYmlsaXR5LCBub3QgdG8gbWVudGlvbiBwbGF0Zm9ybSBu ZXV0cmFsaXR5LiBUaGUKKyAgICAgICBpc3N1ZSBsdXJraW5nIGJlaGluZCB0aGUga25lZS1qZXJr IHJlYWN0aW9uIGlzIHNlY3VyaXR5LiBTU0ggaXMKKyAgICAgICB0aG91Z2h0IHRvIGJlIHNlY3Vy ZSwgd2hlcmVhcyBUZWxuZXQgaXMgdGhvdWdodCB0byBiZSBpbnNlY3VyZS4KKyAgICAgICBUaGlz IGlzIHRydWUgZm9yIGNsZWFyLXRleHQgVGVsbmV0IChiZWNhdXNlIHBhc3N3b3JkcyB0cmF2ZWwg aW4gdGhlCisgICAgICAgY2xlYXIgYWNyb3NzIHRoZSBuZXR3b3JrKSwgYnV0IGFwcGFyZW50bHkg ZmV3IHBlb3BsZSByZWFsaXplIHRoYXQKKyAgICAgICBbMjk2XXNlY3VyZSBUZWxuZXQgY2xpZW50 cyBhbmQgc2VydmVycyBoYXZlIGJlZW4gYXZhaWxhYmxlIGZvcgorICAgICAgIHllYXJzLCBhbmQg dGhlc2UgYXJlIG1vcmUgc2VjdXJlIHRoYW4gU1NIIChmb3IgcmVhc29ucyBleHBsYWluZWQKKyAg ICAgICBbMjk3XUhFUkUpLgorICAgIDQuIChBbnkgcXVlc3Rpb24gdGhhdCBoYXMgdGhlIHdvcmQg IkZUUCIgaW4gaXQuLi4pIFRoZSBrbmVlLWplcmsKKyAgICAgICByZWFjdGlvbiBiZWluZyAiRG9u J3QgdXNlIEZUUCwgdXNlIFNDUCEiIChvciBTRlRQKS4gU2FtZSBhbnN3ZXIgYXMKKyAgICAgICBh Ym92ZSwgYnV0IG1vcmVzby4gU0NQIGFuZCBTRlRQIGFyZSBub3Qgb25seSBub3QgcGxhdGZvcm0g bmV1dHJhbCwKKyAgICAgICB0aGV5J3JlIGRpdmVyc2l0eS1ob3N0aWxlLiBUaGV5IHRyYW5zZmVy IGZpbGVzIG9ubHkgaW4gYmluYXJ5IG1vZGUsCisgICAgICAgd2hpY2ggbWFuZ2xlcyB0ZXh0IGZp bGVzIGFjcm9zcyBkaWZmZXJlbnQgcGxhdGZvcm1zLCB0byB0aGUgc2FtZQorICAgICAgIGRlZ3Jl ZSB0aGUgcGxhdGZvcm0ncyB0ZXh0LWZpbGUgcmVjb3JkIGZvcm1hdCBhbmQgY2hhcmFjdGVyIHNl dAorICAgICAgIGRpZmZlci4gQW4gZXh0cmVtZSBleGFtcGxlIHdvdWxkIGJlIGFuIFZhcmlhYmxl LUJsb2NrIGZvcm1hdCBFQkNESUMKKyAgICAgICB0ZXh0IGZpbGUgb24gYW4gSUJNIG1haW5mcmFt ZSwgYmluYXJ5IHRyYW5zZmVyIG9mIHdoaWNoIHRvIFVuaXgKKyAgICAgICB3b3VsZCBkbyB5b3Ug bGl0dGxlIGdvb2QgaW5kZWVkLiBGVFAgd2FzIGRlc2lnbmVkIHdpdGggZGl2ZXJzaXR5IGluCisg ICAgICAgbWluZCBhbmQgc2VjdXJlIHZlcnNpb25zIGFyZSBhdmFpbGFibGUuCisKKzMuMy4xLiBQ cm9ibGVtcyBCdWlsZGluZyBDLUtlcm1pdCBmb3IgTGludXgKKworICAgWyBbMjk4XVRvcCBdIFsg WzI5OV1Db250ZW50cyBdIFsgWzMwMF1TZWN0aW9uIENvbnRlbnRzIF0gWyBbMzAxXU5leHQgXQor CisgICBNb2Rlcm4gTGludXggZGlzdHJpYnV0aW9ucyBsaWtlIFJlZCBIYXQgZ2l2ZSB5b3UgYSBj aG9pY2UgYXQKKyAgIGluc3RhbGxhdGlvbiB3aGV0aGVyIHRvIGluY2x1ZGUgImRldmVsb3BlciB0 b29scyIuIE9idmlvdXNseSwgeW91IGNhbid0CisgICBidWlsZCBDLUtlcm1pdCBvciBhbnkgb3Ro ZXIgQyBwcm9ncmFtIGZyb20gc291cmNlIGNvZGUgaWYgeW91IGhhdmUgbm90CisgICBpbnN0YWxs ZWQgdGhlIGRldmVsb3BlciB0b29scy4gQnV0IHRvIGNvbmZ1c2UgbWF0dGVycywgeW91IG1pZ2h0 IGFsc28KKyAgIGhhdmUgdG8gY2hvb3NlIChzZXBhcmF0ZWx5KSB0byBpbnN0YWxsIHRoZSAiY3Vy c2VzIiBvciAibmN1cnNlcyIKKyAgIHRlcm1pbmFsIGNvbnRyb2wgbGlicmFyeTsgdGh1cyBpdCBp cyBwb3NzaWJsZSB0byBpbnN0YWxsIHRoZSBDIGNvbXBpbGVyCisgICBhbmQgbGlua2VyLCBidXQg b21pdCB0aGUgKG4pY3Vyc2VzIGxpYnJhcnkgYW5kIGhlYWRlcnMuIElmIGN1cnNlcyBpcworICAg bm90IGluc3RhbGxlZCwgeW91IHdpbGwgbm90IGJlIGFibGUgdG8gYnVpbGQgYSB2ZXJzaW9uIG9m IEMtS2VybWl0IHRoYXQKKyAgIHN1cHBvcnRzIHRoZSBmdWxsc2NyZWVuIGZpbGUtdHJhbnNmZXIg ZGlzcGxheSwgaW4gd2hpY2ggY2FzZSB5b3UnbGwKKyAgIG5lZWQgdG8gdXNlIHRoZSAibGludXhu YyIgbWFrZWZpbGUgdGFyZ2V0IChuYyA9IE5vIEN1cnNlcykgb3IgZWxzZQorICAgaW5zdGFsbCBu Y3Vyc2VzIGJlZm9yZSBidWlsZGluZy4KKworICAgVGhlcmUgYXJlIGFsbCBzb3J0cyBvZiBjb25m dXNpbmcgaXNzdWVzIGNhdXNlZCBieSB0aGUgbWFueSBhbmQgdmFyaWVkCisgICBMaW51eCBkaXN0 cmlidXRpb25zLiBTb21lIG9mIHRoZSB3b3JzdCBpbnZvbHZlIHRoZSBjdXJzZXMgbGlicmFyeSBh bmQKKyAgIGhlYWRlciBmaWxlczogd2hlcmUgYXJlIHRoZXksIHdoYXQgYXJlIHRoZXkgY2FsbGVk LCB3aGljaCBvbmVzIGFyZSB0aGV5CisgICByZWFsbHk/IE90aGVyIHZleGluZyBxdWVzdGlvbnMg aW52b2x2ZSBsaWJjNSB2cyBsaWJjNiB2cyBnbGliYyB2cworICAgZ2xpYmMyIChDIGxpYnJhcmll cyksIGdjYyB2cyBlZ2NzIHZzIGxjYyAoY29tcGlsZXJzKSwgcGx1cyB1c2luZyBvcgorICAgYXZv aWRpbmcgZmVhdHVyZXMgdGhhdCB3ZXJlIGFkZGVkIGluIGEgY2VydGFpbiB2ZXJzaW9uIG9mIExp bnV4IG9yIGEKKyAgIGxpYnJhcnkgb3IgYSBkaXN0cmlidXRpb24sIGFuZCBhcmUgbm90IGF2YWls YWJsZSBpbiBvdGhlcnMuIEFzIG9mCisgICBDLUtlcm1pdCA4LjAsIHRoZXNlIHF1ZXN0aW9ucyBz aG91bGQgYmUgcmVzb2x2ZWQgYnkgdGhlICJsaW51eCIKKyAgIG1ha2VmaWxlIHRhcmdldCBpdHNl bGYsIHdoaWNoIGRvZXMgYSBiaXQgb2YgbG9va2luZyBhcm91bmQgdG8gc2VlCisgICB3aGF0J3Mg d2hhdCwgYW5kIHRoZW4gc2V0cyB0aGUgYXBwcm9wcmlhdGUgQ0ZMQUdTLgorCiszLjMuMi4gUHJv YmxlbXMgd2l0aCBTZXJpYWwgRGV2aWNlcyBpbiBMaW51eAorCisgICBbIFszMDJdVG9wIF0gWyBb MzAzXUNvbnRlbnRzIF0gWyBbMzA0XVNlY3Rpb24gQ29udGVudHMgXSBbIFszMDVdTmV4dCBdCisg ICBbIFszMDZdUHJldmlvdXMgXQorCisgICAgIEFsc28gc2VlOiAibWFuIHNldHNlcmlhbCIsICJt YW4gaXJxdHVuZSIuCisgICAgIEFuZDogWzMwN11TZWN0aW9ucyAzLjAsIFszMDhdNiwgWzMwOV03 LCBhbmQgWzMxMF04IG9mIHRoaXMgZG9jdW1lbnQuCisKKyAgICAgTk9URTogUmVkIEhhdCBMaW51 eCA3LjIgYW5kIGxhdGVyIGluY2x1ZGUgYSBuZXcgQVBJIHRoYXQgYWxsb3dzCisgICAgIHNlcmlh bC1wb3J0IGFyYml0cmF0aW9uIGJ5IG5vbi1zZXR1aWQvZ2lkIHByb2dyYW1zLiBUaGlzIEFQSSBo YXMgbm90CisgICAgIHlldCBiZWVuIGFkZGVkIHRvIEMtS2VybWl0LiBJZiBDLUtlcm1pdCBpcyB0 byBiZSB1c2VkIGZvciBkaWFsaW5nCisgICAgIG91dCBvbiBSZWQgSGF0IDcuMiBvciBsYXRlciwg aXQgbXVzdCBzdGlsbCBiZSBpbnN0YWxsZWQgYXMgZGVzY3JpYmVkCisgICAgIGluIGluIFNlY3Rp b25zIFszMTFdMTAgYW5kIFszMTJdMTEgb2YgdGhlIFszMTNdSW5zdGFsbGF0aW9uCisgICAgIElu c3RydWN0aW9ucy4KKworICAgRG9uJ3QgZXhwZWN0IGl0IHRvIGJlIGVhc3kuIFF1ZXJpZXMgbGlr ZSB0aGUgZm9sbG93aW5nIGFyZSBwb3N0ZWQgdG8KKyAgIHRoZSBMaW51eCBuZXdzZ3JvdXBzIGFs bW9zdCBkYWlseToKKworICAgICBQcm9ibGVtIG9mIGEgbWFqb3Iga2luZCB3aXRoIG15IENvbXBh cSBQcmVzYXJpbyAxODA1IGluIHRoZSBzZW5zZQorICAgICB0aGF0IHRoZSBwbnBkdW1wIGRvZXNu J3QgZmluZCB0aGUgbW9kZW0gYW5kIHRoZSBjb25maWd1cmF0aW9uIHRlbGxzCisgICAgIG1lIHRo YXQgdGhlIG1vZGVtIGlzIGJ1c3kgd2hlbiBJIHNldCBldmVyeXRoaW5nIGJ5IGhhbmQhCisKKyAg ICAgSSBoYXZlIDxzb21lIHJlY2VudCBTdVNFIGRpc3RyaWJ1dGlvbj4sIGtlcm5lbCAyLjAuMzUu IFVzaW5nIHRoZQorICAgICBDb21wYXEgdGVsbHMgbWUgdGhhdCB0aGUgbW9kZW0gKHdoaWNoIGlz IGludGVybmFsKSBpcyBvbiBDT00yLCB3aXRoCisgICAgIHRoZSB1c3VhbCBJUlEgYW5kIHBvcnQg bnVtYmVycy4gUnVubmluZyB2YXJpb3VzIFdpbmRvd3MgZGlhZ25vc3RpY3MKKyAgICAgc2hvdyBt ZSBBVC1zdHlsZSBjb21tYW5kcyBleGNoYW5nZWQgc28gSSBoYXZlIG5vIHJlYXNvbiB0byBiZWxp ZXZlCisgICAgIHRoYXQgaXQgaXMgYSBXaW5tb2RlbS4gQWxzbywgdGhlIGRpYWdub3N0aWNzIHVu ZGVyIFdpbjk4IHRlbGwgbWUKKyAgICAgdGhhdCBJIGFtIHRhbGtpbmcgdG8gYW4gTlMgMTY1NTBB Ti4KKworICAgW0VkaXRvcidzIG5vdGU6IFRoaXMgZG9lcyBub3QgbmVjZXNzYXJpbHkgbWVhbiBp dCBpc24ndCBhIFdpbm1vZGVtLl0KKworICAgICBVbmRlciBMaW51eCwgbm8gam95IHRyeWluZyB0 byB0YWxrIHRvIHRoZSBtb2RlbSBvbiAvZGV2L2N1YTEgd2hldGhlcgorICAgICB2aWEgbWluaWNv bSwga3BwcCwgb3IgY2hhdDsga3BwcCBhdCBsZWFzdCB0ZWxscyBtZSB0aGF0IHRjZ2V0YXR0cigp CisgICAgIGZhaWxlZC4KKworICAgICBVc2FnZSBvZiBzZXRzZXJpYWw6CisKKyAgc2V0c2VyaWFs IC9kZXYvY3VhMSBwb3J0IDB4MkY4IGlycSAzIGF1dG9jb25maWcKKyAgc2V0c2VyaWFsIC1nIC9k ZXYvY3VhMQorCisgICAgIHRlbGxzIG1lIHRoYXQgdGhlIHVhcnQgaXMgJ3Vua25vd24nLiBJIGhh dmUgdHJpZWQgc2V0dGluZyB0aGUgVUFSVAorICAgICBtYW51YWxseSB2aWEuIHNldHNlcmlhbCB0 byAxNjU1MEEsIDE2NTUwLCBhbmQgdGhlIG90aGVyIG9uZSAoODU1MD8pCisgICAgIChJIGRpZG4n dCB0cnkgMTY1NDApLiBOb25lIG9mIHRoZXNlIG1hbnVhbCBzZXR0aW5ncyByZXN1bHRlZCBpbiBh bnkKKyAgICAgc3VjY2Vzcy4KKworICAgICBBIGxvb2sgYXQgcGFzdCBhcnRpY2xlcyBsZWFkcyBt ZSB0byBpbnZlc3RpZ2F0ZSBQTlAgaXNzdWVzIGJ5CisgICAgIGNhbGxpbmcgcG5wZHVtcCBidXQg cG5wZHVtcCByZXR1cm5zICJubyBib2FyZHMgZm91bmQiLiBJIGhhdmUgbG9va2VkCisgICAgIGFy b3VuZCBvbiBteSBCSU9TIChQaG9lbml4KSBhbmQgdGhlcmUgaXMgbm90IG11Y2ggZXZpZGVuY2Ug b2YgaXQKKyAgICAgYmVpbmcgUE5QIGF3YXJlLiBIb3dldmVyIGZvciB3aGF0IGl0IGNhbGxzICJT ZXJpYWwgcG9ydCBBIiwgaXQKKyAgICAgb2ZmZXJzIGEgY2hvaWNlIG9mIEF1dG8sIERpc2FibGVk IG9yIE1hbnVhbCBzZXR0aW5ncyAoY3VycmVudGx5IHNldAorICAgICB0byBBdXRvKSwgYnV0IHVz aW5nIHRoZSBCSU9TIGludGVyZmFjZSBJIHRyaWVkIHRvIGNoYW5nZSB0byAnbWFudWFsJworICAg ICBhbmQgc2F3IHRoZSBkZWZhdWx0IHNldHRpbmdzIG9mZmVyZWQgdG8gYmUgd2VyZSAweDNGOCBh bmQgSVJRIDQKKyAgICAgKENPTTEpLiBUaGUgQklPUyBtZW51cyBkaWQgbm90IGdpdmUgbWUgYW55 IGNoYW5jZSB0byBjb25maWd1cmUgQ09NMgorICAgICBvciBhbnkgIm1vZGVtIi4gSSBlbmRlZCB1 cCBub3Qgc2F2aW5nIGFueSBCSU9TIGNoYW5nZXMgaW4gdGhlIGNvdXJzZQorICAgICBvZiBteSBp bnZlc3RpZ2F0aW9ucy4KKworICAgWW91IGNhbiBhbHNvIGZpbmQgb3V0IGEgZmFpciBhbW91bnQg YWJvdXQgeW91ciBQQydzIGhhcmR3YXJlCisgICBjb25maWd1cmF0aW9uIGluIHRoZSB0ZXh0IGZp bGVzIGluIC9wcm9jLCBlLmcuOgorCisgIC1yLS1yLS1yLS0gICAgMSByb290ICAgICAgICAgICAg MCBTZXAgIDQgMTQ6MDAgL3Byb2MvZGV2aWNlcworICAtci0tci0tci0tICAgIDEgcm9vdCAgICAg ICAgICAgIDAgU2VwICA0IDE0OjAwIC9wcm9jL2ludGVycnVwdHMKKyAgLXItLXItLXItLSAgICAx IHJvb3QgICAgICAgICAgICAwIFNlcCAgNCAxNDowMCAvcHJvYy9pb3BvcnRzCisgIC1yLS1yLS1y LS0gICAgMSByb290ICAgICAgICAgICAgMCBTZXAgIDQgMTQ6MDAgL3Byb2MvcGNpCisKKyAgIEZy b20gdGhlIGRpcmVjdG9yeSBsaXN0aW5nIHRoZXkgbG9vayBsaWtlIGVtcHR5IGZpbGVzLCBidXQg aW4gZmFjdCB0aGV5CisgICBhcmUgdGV4dCBmaWxlcyB0aGF0IHlvdSAiY2F0IjoKKworJCBjYXQg L3Byb2MvcGNpCisgICBCdXMgIDAsIGRldmljZSAgMTQsIGZ1bmN0aW9uICAwOgorICAgICBTZXJp YWwgY29udHJvbGxlcjogVVMgUm9ib3RpY3MvM0NvbSA1NksgRmF4TW9kZW0gTW9kZWwgNTYxMCAo cmV2IDEpLgorICAgICAgIElSUSAxMC4KKyAgICAgICBJL08gYXQgMHgxMDUwIFsweDEwNTddLgor CiskIHNldHNlcmlhbCAtZyAvZGV2L3R0eVM0CisvZGV2L3R0eVM0LCBVQVJUOiAxNjU1MEEsIFBv cnQ6IDB4MTA1MCwgSVJROiAxMAorCiskIGNhdCAvcHJvYy9pb3BvcnRzCisxMDUwLTEwNTcgOiBV UyBSb2JvdGljcy8zQ29tIDU2SyBGYXhNb2RlbSBNb2RlbCA1NjEwCisgICAxMDUwLTEwNTcgOiBz ZXJpYWwoYXV0bykKKworJCBjYXQgL3Byb2MvaW50ZXJydXB0cworICAgICAgICAgICAgQ1BVMAor ICAgMDogICAgNzAzNzUxNSAgICAgICAgICBYVC1QSUMgIHRpbWVyCisgICAxOiAgICAgICAgICAy ICAgICAgICAgIFhULVBJQyAga2V5Ym9hcmQKKyAgIDI6ICAgICAgICAgIDAgICAgICAgICAgWFQt UElDICBjYXNjYWRlCisgICA0OiAgICAgICAgICAwICAgICAgICAgIFhULVBJQyAgc2VyaWFsCisg ICA4OiAgICAgICAgICAxICAgICAgICAgIFhULVBJQyAgcnRjCisgICA5OiAgICAgMjA5ODExICAg ICAgICAgIFhULVBJQyAgdXNiLXVoY2ksIGV0aDAKKyAgMTQ6ICAgICAyODIwMTUgICAgICAgICAg WFQtUElDICBpZGUwCisgIDE1OiAgICAgICAgICA2ICAgICAgICAgIFhULVBJQyAgaWRlMQorCisg ICBXYXRjaCBvdXQgZm9yIFBDSSwgUENNQ0lBIGFuZCBQbHVnLW4tUGxheSBkZXZpY2VzLCBXaW5t b2RlbXMsIGFuZCB0aGUKKyAgIGxpa2UgKHNlZSBjYXV0aW9ucyBpbiBbMzE0XVNlY3Rpb24gMy4w IExpbnV4IHN1cHBvcnRzIFBsdWctbi1QbGF5CisgICBkZXZpY2VzIHRvIHNvbWUgZGVncmVlIHZp YSB0aGUgaXNhcG5wIGFuZCBwbnBkdW1wIHByb2dyYW1zOyByZWFkIHRoZQorICAgbWFuIHBhZ2Vz IGZvciB0aGVtLiAoSWYgeW91IGRvbid0IGhhdmUgdGhlbSwgbG9vayBvbiB5b3VyIGluc3RhbGxh dGlvbgorICAgQ0QgZm9yIGlzYXBucHRvb2wgb3IgZG93bmxvYWQgaXQgZnJvbSBzdW5zaXRlIG9y IGEgc3Vuc2l0ZSBtaXJyb3Igb3IKKyAgIG90aGVyIHBvbGl0aWNhbGx5IGNvcnJlY3QgbG9jYXRp b24gZHUgam91cikuCisKKyAgIFBDSSBtb2RlbXMgZG8gbm90IHVzZSBzdGFuZGFyZCBDT00gcG9y dCBhZGRyZXNzZXMuIFRoZSBJL08gYWRkcmVzcyBhbmQKKyAgIElSUSBhcmUgYXNzaWduZWQgYnkg dGhlIEJJT1MuIEFsbCB5b3UgbmVlZCB0byBkbyB0byBnZXQgb25lIHdvcmtpbmcsCisgICBmaW5k IG91dCB0aGUgSS9PIGFkZHJlc3MgYW5kIGludGVycnVwdCBudW1iZXIgd2l0aCAoYXMgcm9vdCkg ImxzcGNpIC12CisgICB8IG1vcmUiIGFuZCB0aGVuIGdpdmUgdGhlIHJlc3VsdGluZyBhZGRyZXNz IGFuZCBpbnRlcnJ1cHQgbnVtYmVyIHRvCisgICBzZXRzZXJpYWwuCisKKyAgIEV2ZW4gd2hlbiB5 b3UgaGF2ZSBhIHJlYWwgc2VyaWFsIHBvcnQsIGFsd2F5cyBiZSB3YXJ5IG9mIGludGVycnVwdAor ICAgY29uZmxpY3RzIGFuZCBzaW1pbGFyIFBDIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24gaXNzdWVz OiBhIFBDIGlzIG5vdCBhCisgICByZWFsIGNvbXB1dGVyIGxpa2Ugb3RoZXIgVW5peCB3b3Jrc3Rh dGlvbnMgLS0gaXQgaXMgZ2VuZXJhbGx5IHBpZWNlZAorICAgdG9nZXRoZXIgZnJvbSB3aGF0ZXZl ciByYW5kb20gY29tcG9uZW50cyB3ZXJlIHRoZSBiZXN0IGJhcmdhaW4gb24gdGhlCisgICBjb21t b2RpdHkgbWFya2V0IHRoZSB3ZWVrIGl0IHdhcyBidWlsdC4gT25jZSBpdCdzIGFzc2VtYmxlZCBh bmQgYm94ZWQsCisgICBub3QgZXZlbiB0aGUgbWFudWZhY3R1cmVyIHdpbGwgcmVtZW1iZXIgd2hh dCBpdCdzIG1hZGUgb2Ygb3IgaG93IGl0IHdhcworICAgcHV0IHRvZ2V0aGVyIGJlY2F1c2UgdGhl eSd2ZSBtb3ZlZCBvbiB0byBhIG5ldyBtb2RlbC4gVGhlaXIgam9iIGlzIHRvCisgICBnZXQgaXQg KGJhcmVseSkgd29ya2luZyB3aXRoIFdpbmRvd3M7IGZvciBMaW51eCBhbmQgb3RoZXIgT1MncyB5 b3UgYXJlCisgICBvbiB5b3VyIG93bi4KKworICAgInNldCBsaW5lIC9kZXYvbW9kZW0iIG9yICJz ZXQgbGluZSAvZGV2L3R0eVMyIiwgZXRjLCByZXN1bHRzIGluIGFuCisgICBlcnJvciwgIi9kZXYv bW9kZW0gaXMgbm90IGEgdHR5Ii4gQ2F1c2UgdW5rbm93biwgYnV0IG9idmlvdXNseSBhIGRyaXZl cgorICAgaXNzdWUsIG5vdCBhIEtlcm1pdCBvbmUgKEtlcm1pdCB1c2VzICJpc2F0dHkoKSIgdG8g Y2hlY2sgdGhhdCB0aGUKKyAgIGRldmljZSBpcyBhIHR0eSwgc28gaXQga25vd3MgaXQgd2lsbCBi ZSBhYmxlIHRvIGlzc3VlIGFsbCB0aGUKKyAgIHR0eS1yZWxhdGVkIGlvY3RsJ3Mgb24gaXQsIGxp a2Ugc2V0dGluZyB0aGUgc3BlZWQgJiBmbG93IGNvbnRyb2wpLiBUcnkKKyAgIGEgZGlmZmVyZW50 IG5hbWUgKGkuZS4gZHJpdmVyKSBmb3IgdGhlIHNhbWUgcG9ydCwgZS5nLiAic2V0IGxpbmUKKyAg IC9kZXYvY3VhMiIgb3Igd2hhdGV2ZXIuCisKKyAgIFRvIGZpbmQgd2hhdCBzZXJpYWwgcG9ydHMg d2VyZSByZWdpc3RlcmVkIGF0IHRoZSBtb3N0IHJlY2VudCBzeXN0ZW0KKyAgIGJvb3QsIHR5cGUg KGFzIHJvb3QpOiAiZ3JlcCB0dHkgL3Zhci9sb2cvZG1lc2ciLgorCisgICAic2V0IG1vZGVtIHR5 cGUgeHh4IiAod2hlcmUgeHh4IGlzIHRoZSBuYW1lIG9mIGEgbW9kZW0pIGZvbGxvd2VkIGJ5Cisg ICAic2V0IGxpbmUgL2Rldi9tb2RlbSIgb3IgInNldAorICAgbGluZSAvZGV2L3R0eVMyIiwgZXRj LCBoYW5ncyAoYnV0IGNhbiBiZSBpbnRlcnJ1cHRlZCB3aXRoIEN0cmwtQykuCisgICBFeHBlcmlt ZW50YXRpb24gc2hvd3MgdGhhdCBpZiB0aGUgbW9kZW0gaXMgY29uZmlndXJlZCB0byBhbHdheXMg YXNzZXJ0CisgICBjYXJyaWVyICgmQzApIHRoZSBzYW1lIGNvbW1hbmQgZG9lcyBub3QgaGFuZy4g QWdhaW4sIGEgZHJpdmVyIGlzc3VlLgorICAgVXNlIC9kZXYvY3VhMiAob3Igd2hhdGV2ZXIpIGlu c3RlYWQuIChPciBub3QgLS0gaG9wZWZ1bGx5IG5vbmUgb2YgdGhlc2UKKyAgIHN5bXB0b21zIG9j Y3VycyBpbiBDLUtlcm1pdCA3LjAgb3IgbGF0ZXIuKQorCisgICAic2V0IGxpbmUgL2Rldi9jdWEw IiByZXBvcnRzICJEZXZpY2UgaXMgYnVzeSIsIGJ1dCAic2V0IGxpbmUKKyAgIC9kZXYvdHR5UzAi IHdvcmtzIE9LLgorCisgICBJbiBzaG9ydDogSWYgdGhlIGN1YSBkZXZpY2UgZG9lc24ndCB3b3Jr LCB0cnkgdGhlIGNvcnJlc3BvbmRpbmcgdHR5UworICAgZGV2aWNlLiBJZiB0aGUgdHR5UyBkZXZp Y2UgZG9lc24ndCB3b3JrLCB0cnkgdGhlIGNvcnJlc3BvbmRpbmcgY3VhCisgICBkZXZpY2UgLS0g YnV0IG5vdGUgdGhhdCBMaW51eCBkZXZlbG9wZXJzIGRvIG5vdCByZWNvbW1lbmQgdGhpcywgYW5k IGFyZQorICAgcGhhc2luZyBvdXQgdGhlIGN1YSBkZXZpY2VzLiBGcm9tIC91c3IvZG9jL2ZhcS9o b3d0by9TZXJpYWwtSE9XVE86CisKKyAgIDEyLjQuIFdoYXQncyBUaGUgUmVhbCBEaWZmZXJlbmNl IEJldHdlZW4gdGhlIC9kZXYvY3VhTiBBbmQgL2Rldi90dHlTTgorICAgICAgICAgIERldmljZXM/ CisgICAgICAgICAgVGhlIG9ubHkgZGlmZmVyZW5jZSBpcyB0aGUgd2F5IHRoYXQgdGhlIGRldmlj ZXMgYXJlIG9wZW5lZC4gVGhlCisgICAgICAgICAgZGlhbGluIGRldmljZXMgL2Rldi90dHlTTiBh cmUgb3BlbmVkIGluIGJsb2NraW5nIG1vZGUsIHVudGlsIENECisgICAgICAgICAgaXMgYXNzZXJ0 ZWQgKGllIHNvbWVvbmUgY29ubmVjdHMpLiBTbywgd2hlbiBzb21lb25lIHdhbnRzIHRvIHVzZQor ICAgICAgICAgIHRoZSAvZGV2L2N1YU4gZGV2aWNlLCB0aGVyZSBpcyBubyBjb25mbGljdCB3aXRo IGEgcHJvZ3JhbQorICAgICAgICAgIHdhdGNoaW5nIHRoZSAvZGV2L3R0eVNOIGRldmljZSAodW5s ZXNzIHNvbWVvbmUgaXMgY29ubmVjdGVkIG9mCisgICAgICAgICAgY291cnNlKS4gVGhlIG11bHRp cGxlIC9kZXYgZW50cmllcywgYWxsb3cgb3BlcmF0aW9uIG9mIHRoZSBzYW1lCisgICAgICAgICAg cGh5c2ljYWwgZGV2aWNlIHdpdGggZGlmZmVyZW50IG9wZXJhdGluZyBjaGFyYWN0ZXJpc3RpY3Mu IEl0CisgICAgICAgICAgYWxzbyBhbGxvd3Mgc3RhbmRhcmQgZ2V0dHkgcHJvZ3JhbXMgdG8gY29l eGlzdCB3aXRoIGFueSBvdGhlcgorICAgICAgICAgIHNlcmlhbCBwcm9ncmFtLCB3aXRob3V0IHRo ZSBnZXR0eSBiZWluZyByZXRyb2ZpdHRlZCB3aXRoIGxvY2tpbmcKKyAgICAgICAgICBvZiBzb21l IHNvcnQuIEl0J3MgZXNwZWNpYWxseSB1c2VmdWwgc2luY2Ugc3RhbmRhcmQgVW5peCBrZXJuZWwK KyAgICAgICAgICBmaWxlIGxvY2tpbmcsIGFuZCBVVUNQIGxvY2tpbmcgYXJlIGJvdGggYWR2aXNv cnkgYW5kIG5vdAorICAgICAgICAgIG1hbmRhdG9yeS4KKworICAgSXQgd2FzIGRpc2NvdmVyZWQg ZHVyaW5nIGRldmVsb3BtZW50IG9mIEMtS2VybWl0IDcuMCB0aGF0IHJlYnVpbGRpbmcKKyAgIEMt S2VybWl0IHdpdGggLUROT0NPVEZNQyAoTm8gQ2xvc2UvT3BlbiBUbyBGb3JjZSBNb2RlIENoYW5n ZSkgbWFkZSB0aGUKKyAgIGFmb3JlbWVudGlvbmVkIHByb2JsZW0gd2l0aCAvZGV2L3R0eVMwIGdv IGF3YXkuIEl0IGlzIG5vdCB5ZXQgY2xlYXIsCisgICBob3dldmVyLCB3aGF0IGl0cyBhZmZlY3Qg bWlnaHQgYmUgb24gdGhlIC9kZXYvY3VhKiBkZXZpY2VzLiBBcyBvZiAxOQorICAgTWFyY2ggMTk5 OCwgdGhpcyBvcHRpb24gaGFzIGJlZW4gYWRkZWQgdG8gdGhlIENGTEFHUyBpbiB0aGUgbWFrZWZp bGUKKyAgIGVudHJpZXMgZm9yIExpbnV4ICgibWFrZSBsaW51eCIpLgorCisgICBOb3RlIHRoYXQg dGhlIGN1YSBkZXZpY2UgaXMgbm93ICJkZXByZWNhdGVkIiwgYW5kIG5ldyBlZGl0aW9ucyBvZiBM aW51eAorICAgd2lsbCBwaGFzZSAoaGF2ZSBwaGFzZWQpIGl0IG91dCBpbiBmYXZvciBvZiB0aGUg dHR5UyBkZXZpY2UuIFNlZSAoaWYKKyAgIGl0J3Mgc3RpbGwgdGhlcmUpOgorCisgIFszMTVdaHR0 cDovL2xpbnV4d3d3LmRiLmVyYXUuZWR1L21haWxfYXJjaGl2ZXMvbGludXgta2VybmVsL01hcl85 OC8xNDQxLmh0bWwKKworICAgKG5vLCBvZiBjb3Vyc2UgaXQgaXNuJ3Q7IHlvdSdsbCBoYXZlIHRv IHVzZSB5b3VyIGltYWdpbmF0aW9uKS4gT25lIHVzZXIKKyAgIHJlcG9ydGVkIHRoYXQgQy1LZXJt aXQgNy4wLCB3aGVuIGJ1aWx0IHdpdGggZWdjcyAxLjEuMiBhbmQgcnVuIG9uIExpbnV4CisgICAy LjIuNiB3aXRoIGdsaWJjIDIuMSAoaGFyZHdhcmUgdW5rbm93biBidXQgcHJvYmFibHkgYSBQQykg ZHVtcHMgY29yZQorICAgd2hlbiBnaXZlbiBhICJzZXQgbGluZSAvZGV2L3R0eVMxIiBjb21tYW5k LiBXaGVuIHJlYnVpbHQgd2l0aCBnY2MsIGl0CisgICB3b3JrcyBmaW5lLgorCisgICBBbGwgdmVy c2lvbnMgb2YgTGludXggc2VlbSB0byBoYXZlIHRoZSBmb2xsb3dpbmcgZGVmaWNpZW5jeTogV2hl biBhCisgICBtb2RlbSBjYWxsIGlzIGh1bmcgdXAgYW5kIENEIGRyb3BzLCBLZXJtaXQgY2FuIG5v IGxvbmdlciByZWFkIHRoZSBtb2RlbQorICAgc2lnbmFsczsgU0hPVyBDT01NVU5JQ0FUSU9OUyBz YXlzICJNb2RlbSBzaWduYWxzIG5vdCBhdmFpbGFibGUiLiBUaGUKKyAgIFRJT0NNR0VUIGlvY3Rs KCkgcmV0dXJucyAtMSB3aXRoIGVycm5vIDUgKCJJL08gRXJyb3IiKS4KKworICAgVGhlIExpbnV4 IHZlcnNpb24gb2YgUE9TSVggdGNzZW5kYnJlYWsoKSwgd2hpY2ggaXMgdXNlZCBieSBDLUtlcm1p dCB0bworICAgc2VuZCByZWd1bGFyICgyNzVtc2VjKSBhbmQgbG9uZyAoMS41c2VjKSBCUkVBSyBz aWduYWxzLCBhcHBlYXJzIHRvCisgICBpZ25vcmUgaXRzIGFyZ3VtZW50IChkZXNwaXRlIGl0cyBk ZXNjcmlwdGlvbiBpbiB0aGUgbWFuIHBhZ2UgYW5kIGluZm8KKyAgIHRvcGljKSwgYW5kIGFsd2F5 cyBzZW5kcyBhIHJlZ3VsYXIgMjc1bXNlYyBCUkVBSy4gVGhpcyBoYXMgYmVlbgorICAgb2JzZXJ2 ZWQgaW4gTGludXggdmVyc2lvbnMgcmFuZ2luZyBmcm9tIERlYmlhbiAyLjEgdG8gUmVkIEhhdCA3 LjEuCisKKzMuMy4zLiBUZXJtaW5hbCBFbXVsYXRpb24gaW4gTGludXgKKworICAgWyBbMzE2XVRv cCBdIFsgWzMxN11Db250ZW50cyBdIFsgWzMxOF1TZWN0aW9uIENvbnRlbnRzIF0gWyBbMzE5XU5l eHQgXQorICAgWyBbMzIwXVByZXZpb3VzIF0KKworICAgQy1LZXJtaXQgaXMgbm90IGEgdGVybWlu YWwgZW11bGF0b3IuIEZvciBhIGJyaWVmIGV4cGxhbmF0aW9uIG9mIHdoeQorICAgbm90LCBzZWUg WzMyMV1TZWN0aW9uIDMuMC41LiBGb3IgYSBmdWxsZXIgZXhwbGFuYXRpb24sIFszMjJdQ2xJQ0sg SEVSRS4KKworICAgSW4gVW5peCwgdGVybWluYWwgZW11bGF0aW9uIGlzIHN1cHBsaWVkIGJ5IHRo ZSBXaW5kb3cgaW4gd2hpY2ggeW91IHJ1bgorICAgS2VybWl0OiB0aGUgcmVndWxhciBjb25zb2xl IHNjcmVlbiwgd2hpY2ggcHJvdmlkZXMgTGludXggQ29uc29sZQorICAgImVtdWxhdGlvbiIgdmlh IHRoZSAiY29uc29sZSIgdGVybWNhcCBlbnRyeSwgb3IgdW5kZXIgWC1XaW5kb3dzIGluIGFuCisg ICB4dGVybSB3aW5kb3csIHdoaWNoIGdpdmVzIFZUeHh4IGVtdWxhdGlvbi4gQW4geHRlcm0gdGhh dCBpbmNsdWRlcyBjb2xvcgorICAgQU5TSSBhbmQgVlQyMjAgZW11bGF0aW9uIGlzIGF2YWlsYWJs ZSB3aXRoIFhmcmVlODY6CisKKyAgWzMyM11odHRwOi8vZGlja2V5Lmhpcy5jb20veHRlcm0veHRl cm0uaHRtbAorCisgICBCZWZvcmUgc3RhcnRpbmcgQy1LZXJtaXQgaW4gYW4geHRlcm0gd2luZG93 LCB5b3UgbWlnaHQgbmVlZCB0byB0ZWxsIHRoZQorICAgeHRlcm0gd2luZG93J3Mgc2hlbGwgdG8g InN0dHkgc2FuZSIuCisKKyAgIFRvIHNldCB1cCB5b3VyIFBDIGNvbnNvbGUga2V5Ym9hcmQgdG8g c2VuZCBWVDIyMCBrZXkgc2VxdWVuY2VzIHdoZW4KKyAgIHVzaW5nIEMtS2VybWl0IGFzIHlvdXIg Y29tbXVuaWNhdGlvbnMgcHJvZ3JhbSBpbiBhbiBYIHRlcm1pbmFsIHdpbmRvdworICAgKGlmIGl0 IGRvZXNuJ3QgYWxyZWFkeSksIGNyZWF0ZSBhIGZpbGUgc29tZXdoZXJlIChlLmcuIGluIC9yb290 LykKKyAgIGNhbGxlZCAueG1vZG1hcHJjLCBjb250YWluaW5nIHNvbWV0aGluZyBsaWtlIHRoZSBm b2xsb3dpbmc6CisKKyAga2V5Y29kZSA3NyAgPSBLUF9GMSAgICAgICAhIE51bSBMb2NrICAgICA9 PiBERUMgR29sZCAoUEYxKQorICBrZXljb2RlIDExMiA9IEtQX0YyICAgICAgICEgS2V5cGFkIC8g ICAgID0+IERFQyBQRjEKKyAga2V5Y29kZSA2MyAgPSBLUF9GMyAgICAgICAhIEtleXBhZCAqICAg ICA9PiBERUMgUEYzCisgIGtleWNvZGUgODIgID0gS1BfRjQgICAgICAgISBLZXlwYWQgLSAgICAg PT4gREVDIFBGNAorICBrZXljb2RlIDExMSA9IEhlbHAgICAgICAgICEgUHJpbnQgU2NyZWVuID0+ IERFQyBIZWxwCisgIGtleWNvZGUgNzggID0gRjE2ICAgICAgICAgISBTY3JvbGwgTG9jayAgPT4g REVDIERvCisgIGtleWNvZGUgMTEwID0gRjE2ICAgICAgICAgISBQYXVzZSAgICAgICAgPT4gREVD IERvCisgIGtleWNvZGUgMTA2ID0gRmluZCAgICAgICAgISBJbnNlcnQgICAgICAgPT4gREVDIEZp bmQKKyAga2V5Y29kZSA5NyAgPSBJbnNlcnQgICAgICAhIEhvbWUgICAgICAgICA9PiBERUMgSW5z ZXJ0CisgIGtleWNvZGUgOTkgID0gMHgxMDAwZmYwMCAgISBQYWdlIFVwICAgICAgPT4gREVDIFJl bW92ZQorICBrZXljb2RlIDEwNyA9IFNlbGVjdCAgICAgICEgRGVsZXRlICAgICAgID0+IERFQyBT ZWxlY3QKKyAga2V5Y29kZSAxMDMgPSBQYWdlX1VwICAgICAhIEVuZCAgICAgICAgICA9PiBERUMg UHJldiBTY3JlZW4KKyAga2V5Y29kZSAyMiAgPSBEZWxldGUgICAgICAhIEJhY2tzcGFjZSBzZW5k cyBEZWxldGUgKDEyNykKKworICAgVGhlbiBwdXQgInhtb2RtYXAgZmlsZW5hbWUiIGluIHlvdXIg Lnhpbml0cmMgZmlsZSAoaW4geW91ciBsb2dpbgorICAgZGlyZWN0b3J5KSwgZS5nLgorCisgIHht b2RtYXAgL3Jvb3QvLnhtb2RtYXByYworCisgICBPZiBjb3Vyc2UgeW91IGNhbiBtb3ZlIHRoaW5n cyBhcm91bmQuIFVzZSB0aGUgeGV2IHByb2dyYW0gdG8gZmluZCBvdXQKKyAgIGtleSBjb2Rlcy4K KworICAgQ29uc29sZS1tb2RlIGtleXMgYXJlIG1hcHBlZCBzZXBhcmF0ZWx5IHVzaW5nIGxvYWRr ZXlzLCBhbmQgZGlmZmVyZW50CisgICBrZXljb2RlcyBhcmUgdXNlZC4gRmluZCBvdXQgd2hhdCB0 aGV5IGFyZSB3aXRoIHNob3drZXkuCisKKyAgIEZvciBhIG11Y2ggbW9yZSBjb21wbGV0ZSBWVDIy MC8zMjAga2V5IG1hcHBpbmcgZm9yIFszMjRdWGZyZWU4NiB4dGVybSwKKyAgIFszMjVdQ0xJQ0sg SEVSRS4KKworMy4zLjQuIERhdGVzIGFuZCBUaW1lcworCisgICBbIFszMjZdVG9wIF0gWyBbMzI3 XUNvbnRlbnRzIF0gWyBbMzI4XVNlY3Rpb24gQ29udGVudHMgXSBbIFszMjldTmV4dCBdCisgICBb IFszMzBdUHJldmlvdXMgXQorCisgICBJZiBDLUtlcm1pdCdzIGRhdGUtdGltZSAoZS5nLiBhcyBz aG93biBieSBpdHMgREFURSBjb21tYW5kKSBkaWZmZXJzCisgICBmcm9tIHRoZSBzeXN0ZW0ncyBk YXRlIGFuZCB0aW1lOgorCisgICAgYS4gTWFrZSBzdXJlIHRoZSBsaWJjIHRvIHdoaWNoIEtlcm1p dCBpcyBsaW5rZWQgaXMgc2V0IHRvIEdNVCBvciBpcworICAgICAgIG5vdCBzZXQgdG8gYW55IHRp bWUgem9uZS4gV2F0Y2ggb3V0IGZvciBtaXhlZCBsaWJjNS9saWJjNiBzeXN0ZW1zOworICAgICAg IGVhY2ggbXVzdCBiZSBzZXQgaW5kZXBlbmRlbnRseS4KKyAgICBiLiBJZiB5b3UgaGF2ZSBjaGFu Z2VkIHlvdXIgVFogZW52aXJvbm1lbnQgdmFyaWFibGUsIG1ha2Ugc3VyZSBpdCBpcworICAgICAg IGV4cG9ydGVkLiBUaGlzIGlzIG5vcm1hbGx5IGRvbmUgaW4gL2V0Yy9wcm9maWxlIG9yIC9ldGMv VFouCisKKzMuMy41LiBTdGFydHVwIEVycm9ycworCisgICBbIFszMzFdVG9wIF0gWyBbMzMyXUNv bnRlbnRzIF0gWyBbMzMzXVNlY3Rpb24gQ29udGVudHMgXSBbIFszMzRdTmV4dCBdCisgICBbIFsz MzVdUHJldmlvdXMgXQorCisgICBDLUtlcm1pdCBzaG91bGQgd29yayBvbiBhbGwgdmVyc2lvbnMg b2YgTGludXggY3VycmVudCB0aHJvdWdoIE1hcmNoCisgICAyMDAzLCBwcm92aWRlZCBpdCB3YXMg YnVpbHQgb24gdGhlIHNhbWUgdmVyc2lvbiB5b3UgaGF2ZSwgd2l0aCB0aGUgc2FtZQorICAgbGli cmFyaWVzIGFuZCBoZWFkZXIgZmlsZXMgKGp1c3QgZ2V0IHRoZSBzb3VyY2UgY29kZSBhbmQgIm1h a2UgbGludXgiKS4KKyAgIEJpbmFyaWVzIHRlbmQgbm90IHRvIHRyYXZlbCB3ZWxsIGZyb20gb25l IExpbnV4IG1hY2hpbmUgdG8gYW5vdGhlciwgZHVlCisgICB0byB0aGVpciBtYW55IGRpZmZlcmVu Y2VzLiBUaGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCBhIHBhcnRpY3VsYXIKKyAgIEMtS2VybWl0 IGJpbmFyeSB3aWxsIG5vdCBzdG9wIHdvcmtpbmcgYXQgYSBsYXRlciBkYXRlLCBzaW5jZSBMaW51 eAorICAgdGVuZHMgdG8gY2hhbmdlIG91dCBmcm9tIHVuZGVyIGl0cyBhcHBsaWNhdGlvbnMuIElm IHRoYXQgaGFwcGVucywKKyAgIHJlYnVpbGQgQy1LZXJtaXQgZnJvbSBzb3VyY2UuIElmIHNvbWV0 aGluZyBnb2VzIHdyb25nIHdpdGggdGhlIGJ1aWxkCisgICBwcm9jZXNzLCBsb29rIG9uIHRoZSBb MzM2XUMtS2VybWl0IHdlYnNpdGUgZm9yIGEgbmV3ZXIgdmVyc2lvbi4gSWYgeW91CisgICBoYXZl IHRoZSBsYXRlc3QgdmVyc2lvbiwgdGhlbiBbMzM3XXJlcG9ydCB0aGUgcHJvYmxlbSB0byB1cy4K KworICAgSW5hYmlsaXR5IHRvIHRyYW5zZmVyIGZpbGVzIGluIFJlZCBIYXQgNy4yOiB0aGUgdHlw aWNhbCBzeW1wdG9tIHdvdWxkCisgICBiZSBpZiB5b3Ugc3RhcnQgS2VybWl0IGFuZCB0ZWxsIGl0 IHRvIFJFQ0VJVkUsIGl0IGZhaWxzIHJpZ2h0IGF3YXkgd2l0aAorICAgIj8vZGV2L3R0eTogTm8g c3VjaCBkZXZpY2Ugb3IgYWRkcmVzcyIgb3IgIj9CYWQgZmlsZSBkZXNjcmlwdG9yIi4gT25lCisg ICByZXBvcnQgc2F5cyB0aGlzIGlzIGJlY2F1c2Ugb2YgY3NoLCBhbmQgaWYgeW91IGNoYW5nZSB5 b3VyIHNoZWxsIHRvCisgICBiYXNoIG9yIG90aGVyIHNoZWxsLCBpdCBkb2Vzbid0IGhhcHBlbi4g QW5vdGhlciByZXBvcnQgY2l0ZSBidWdzIGluIFJlZAorICAgSGF0IDcuMiBUZWxuZXRkICJ2ZXJ5 IHNlbGRvbSAoaWYgZXZlcikgcHJvdmlkaW5nIGEgY29udHJvbGxpbmcgdHR5LCBhbmQKKyAgIGxv dHMgb2Ygb3RoZXIgcGVvcGxlIHBpbGVkIG9uIHNheWluZyB0aGV5IGhhdmUgdGhlIHNhbWUgcHJv YmxlbS4iKSBBCisgICB0aGlyZCB0aGVvcnkgaXMgdGhhdCB0aGlzIGhhcHBlbnMgb25seSB3aGVu IExpbnV4IGhhcyBiZWVuIGluc3RhbGxlZAorICAgd2l0aG91dCAidmlydHVhbCB0ZXJtaW5hbCBz dXBwb3J0Ii4KKworICAgQSBzZWFyY2ggb2YgUmVkSGF0J3MgZXJyYXRhIHBhZ2VzIHNob3dzIGEg YnVnIGFkdmlzb3J5IChSSEJBLTIwMDEtMTUzKQorICAgaXNzdWVkIDEzIE5vdmVtYmVyIDIwMDEs IGJ1dCB1cGRhdGVkIDYgRGVjZW1iZXIsIGFib3V0IHRoaXMgc2FtZQorICAgc3ltcHRvbSAoYnV0 IHdpdGggdGNzaCBhbmQgbG9naW4uKSBTZWVtcyB0aGF0IGxvZ2luIHdhcyBub3QgYWx3YXlzCisg ICBhc3NpZ25pbmcgYSBjb250cm9sbGluZyBUVFkgZm9yIHRoZSBzZXNzaW9uLCB3aGljaCB3b3Vs ZCBtYWtlIG1vc3QgdXNlCisgICBvZiAiL2Rldi90dHkiIHNvbWV3aGF0IGxlc3MgdGhhbiB1c2Vm dWwuCisKKyAgWzMzOF1odHRwOi8vd3d3LnJlZGhhdC5jb20vc3VwcG9ydC9lcnJhdGEvUkhCQS0y MDAxLTE1My5odG1sCisKKyAgIFF1b3Rpbmc6ICJEdWUgdG8gdGVybWluYWwgaGFuZGxpbmcgcHJv YmxlbXMgaW4gL2Jpbi9sb2dpbiwgdGNzaCB3b3VsZAorICAgbm90IGZpbmQgdGhlIGNvbnRyb2xs aW5nIHRlcm1pbmFsIGNvcnJlY3RseSwgYW5kIGEgc2hlbGwgaW4gc2luZ2xlIHVzZXIKKyAgIG1v ZGUgd291bGQgZXhoaWJpdCBzdHJhbmdlIHRlcm1pbmFsIGlucHV0IGNoYXJhY3RlcmlzdGljcy4g VGhpcyB1cGRhdGUKKyAgIGZpeGVzIGJvdGggb2YgdGhlc2UgcHJvYmxlbXMuIgorCisgICBTaW5j ZSB0aGUgUmVkIEhhdCA1LjEgcmVsZWFzZSAoY2lyY2EgQXVndXN0IDE5OTgpLCB0aGVyZSBoYXZl IGJlZW4KKyAgIG51bWVyb3VzIHJlcG9ydHMgb2YgcHJlYnVpbHQgTGludXggZXhlY3V0YWJsZXMs IGFuZCBwYXJ0aWN1bGFybHkgdGhlCisgICBLZXJtaXQgUlBNIGZvciBSZWQgSGF0IExpbnV4LCBu b3Qgd29ya2luZzsgZWl0aGVyIGl0IHdvbid0IHN0YXJ0IGF0CisgICBhbGwsIG9yIGl0IGdpdmVz IGVycm9yIG1lc3NhZ2VzIGFib3V0ICJ0ZXJtaW5hbCB0eXBlIHVua25vd24iIGFuZAorICAgcmVm dXNlcyB0byBpbml0aWFsaXplIGl0cyBjdXJzZXMgc3VwcG9ydC4gVGhlIGZvbGxvd2luZyBpcyBm cm9tIHRoZQorICAgWzMzOV1LZXJtaXQgbmV3c2dyb3VwOgorCisgICAgIEZyb206IHJjaGFuZHJh QGhhbDkwMDAuYnVmLnNlcnZ0ZWNoLmNvbQorICAgICBOZXdzZ3JvdXBzOiBjb21wLnByb3RvY29s cy5rZXJtaXQubWlzYworICAgICBTdWJqZWN0OiBSZWQgSGF0IExpbnV4L0ludGVsIDUuMSBhbmQg bmN1cnNlczogc3VnZ2VzdGlvbnMKKyAgICAgRGF0ZTogMjIgQXVnIDE5OTggMTU6NTQ6NDYgR01U CisgICAgIE9yZ2FuaXphdGlvbjogVmVyaW8gTmV3IFlvcmsKKyAgICAgS2V5d29yZHM6IFJlZEhh dCBSUE0gNS4xCisKKyAgICAgU2V2ZXJhbCBmYWN0b3JzIGNhbiBpbmZsdWVuY2Ugd2hldGhlciAi bGludXgiIGlzIHJlY29nbml6ZWQgYXMgYQorICAgICB0ZXJtaW5hbCB0eXBlIG9uIG1hbnkgTGlu dXggc3lzdGVtcy4KKworICAgIDEuIFlvdXIgcHJvZ3JhbSwgb3IgdGhlIGxpYnJhcmllcyBpdCBs aW5rZWQgd2l0aCAoaWYgc3RhdGljYWxseQorICAgICAgIGxpbmtlZCksIG9yIHRoZSBsaWJyYXJp ZXMgaXQgZHluYW1pY2FsbHkgbGlua3Mgd2l0aCBhdCBydW50aW1lLCBhcmUKKyAgICAgICBsb29r aW5nIGZvciBhbiBlbnRyeSBpbiAvZXRjL3Rlcm1jYXAgdGhhdCBpc24ndCB0aGVyZS4gKG5vdCBs aWtlbHksCisgICAgICAgYnV0IHBvc3NpYmxlLi4uIEkgYmVsaWV2ZSBidXQgYW0gbm90IGNlcnRh aW4gdGhhdCB0aGlzIGlzIGEgdmVyeQorICAgICAgIG9sZCBwcmFjdGljZSBpbiB2ZXJ5IG9sZCBb bl1jdXJzZXMgbGlicmFyeSBpbXBsZW1lbnRhdGlvbnMgdG8gdXNlIGEKKyAgICAgICBzaW5nbGUg ZmlsZSBmb3IgYWxsIHRlcm1pbmFsIGRlc2NyaXB0aW9ucy4pCisgICAgMi4gWW91ciBwcm9ncmFt LCBvciB0aGUgbGlicmFyaWVzLi4uYXJlIGxvb2tpbmcgZm9yIGEgdGVybWluZm8gZmlsZQorICAg ICAgIHRoYXQganVzdCBwbGFpbiBpc24ndCB0aGVyZS4gKGFsc28gbm90IHNvIGxpa2VseSwgc2lu Y2UgbWFueSBwZW9wbGUKKyAgICAgICBpbiBvdGhlciByZWNlbnQgbWVzc2FnZSB0aHJlYWRzIHNh aWQgdGhhdCBvdGhlciBwcm9ncmFtcyB3b3JrIE9LKS4KKyAgICAzLiBZb3VyIHByb2dyYW0sIG9y IHRoZSBsaWJyYXJpZXMuLi5hcmUgbG9va2luZyBmb3IgYSB0ZXJtaW5mbyBmaWxlCisgICAgICAg dGhhdCBpcyBzdG9yZWQgYXQgYSBwYXRobmFtZSB0aGF0IGlzbid0IGV4cGVjdGVkIGJ5IHlvdXIg cHJvZ3JhbSwKKyAgICAgICB0aGUgbGlicmFyaWVzLS1hbmQgc28gb24uIEkgZm9yZ290IGlmIEkg cmVhZCB0aGlzIGluIHRoZSBlcnJhdGEgV2ViCisgICAgICAgcGFnZSBvciB3aGVyZSBleGFjdGx5 IEkgZGlzY292ZXJlZCB0aGlzIChOZXRzY2FwZSBpbnN0YWxsPyBBY3JvYmF0CisgICAgICAgaW5z dGFsbD8pLCBidXQgaXQgbWF5IGp1c3QgYmUgdGhhdCBvbmUgbGliYyAobGV0J3Mgc2F5IGZvciBz YWtlIG9mCisgICAgICAgYXJndW1lbnQsIGxpYmM1LCBidXQgSSBkb24ndCBrbm93IHRoaXMgdG8g YmUgdHJ1ZSkgZXhwZWN0cyB5b3VyCisgICAgICAgdGVybWluZm8gdG8gYmUgaW4gL3Vzci9zaGFy ZS90ZXJtaW5mbywgYW5kIHRoZSBvdGhlciAobGV0J3Mgc2F5CisgICAgICAgbGliYzYvZ2xpYmMp IGV4cGVjdHMgL3Vzci9saWIvdGVybWluZm8uIEkgcmVtZW1iZXIgdGhhdCB0aGUKKyAgICAgICBz cGVjaWZpYyBpbnN0cnVjdGlvbnMgaW4gdGhpcyBidWdmaXgvd29ya2Fyb3VuZCB3ZXJlIHRvIGRv IHRoZQorICAgICAgIGZvbGxvd2luZyBvciBlcXVpdmFsZW50OgorICBjZCAvdXNyL2xpYgorICBs biAtcyAuLi9zaGFyZS90ZXJtaW5mbyAuL3Rlcm1pbmZvCisKKyAgICAgICBvcjoKKyAgbG4gLXMg L3Vzci9zaGFyZS90ZXJtaW5mbyAvdXNyL2xpYi90ZXJtaW5mbworCisgICAgIFNvIHdoYXQgdGhp cyBzYXlzIGlzIHRoYXQgdGhlIHRlcm1pbmZvIGRhdGFiYXNlL2RpcmVjdG9yeSBzdHJ1Y3R1cmUK KyAgICAgY2FuIGJlIGFjY2Vzc2VkIGJ5IGVpdGhlciBwYXRoLiBXaGVuIHNvbWV0aGluZyBnb2Vz IHRvIHJlZmVyZW5jZQorICAgICAvdXNyL2xpYi90ZXJtaW5mbywgdGhlIHN5bWxpbmsgcmVkaXJl Y3RzIGl0IHRvIGVzc2VudGlhbGx5CisgICAgIC91c3Ivc2hhcmUvdGVybWluZm8sIHdoaWNoIGlz IHdoZXJlIGl0IHJlYWxseSByZXNpZGVzIG9uIHlvdXIKKyAgICAgc3lzdGVtLiBJIHBlcnNvbmFs bHkgcHJlZmVyIHdoZXJldmVyIHBvc3NpYmxlIHRvIHVzZSByZWxhdGl2ZQorICAgICBzeW1saW5r cywgYmVjYXVzZSB0aGV5IHN0aWxsIGhvbGQsIG1vcmUgb2Z0ZW4gdGhhbiBicmVhaywgYWNyb3Nz CisgICAgIG1vdW50IHBvaW50cywgcGFydGljdWxhcmx5IE5GUyBtb3VudHMsIHdoZXJlIHRoZSBk aXJlY3Rvcnkgc3RydWN0dXJlCisgICAgIG1heSBiZSBkaWZmZXJlbnQgb24gdGhlIGRpZmZlcmVu dCBzeXN0ZW1zLgorCisgICBFdmlkZW50bHkgdGhlIHRlcm1pbmZvIGZpbGUgbW92ZWQgYmV0d2Vl biBSZWQgSGF0IDUuMCBhbmQgNS4xLCBidXQgUmVkCisgICBIYXQgZGlkIG5vdCBpbmNsdWRlIGEg bGluayB0byBsZXQgYXBwbGljYXRpb25zIGJ1aWx0IHByaW9yIHRvIDUuMSBmaW5kCisgICBpdC4g VXNlcnMgcmVwb3J0ZWQgdGhhdCBpbnN0YWxsaW5nIHRoZSBsaW5rIGZpeGVzIHRoZSBwcm9ibGVt LgorCiszLjMuNi4gVGhlIEZ1bGxzY3JlZW4gRmlsZSBUcmFuc2ZlciBEaXNwbGF5CisKKyAgIFsg WzM0MF1Ub3AgXSBbIFszNDFdQ29udGVudHMgXSBbIFszNDJdU2VjdGlvbiBDb250ZW50cyBdIFsK KyAgIFszNDNdUHJldmlvdXMgXQorCisgICBTdGFydGluZyB3aXRoIG5jdXJzZXMgdmVyc2lvbnMg ZGF0ZWQgMTk5OC0xMi0xMiAoYWJvdXQgYSB5ZWFyIGJlZm9yZQorICAgbmN1cnNlcyA1LjApLCBu Y3Vyc2VzIHNldHMgdGhlIHRlcm1pbmFsIGZvciBidWZmZXJlZCBpL28sIGJ1dAorICAgdW5mb3J0 dW5hdGVseSBpcyBub3QgYWJsZSB0byByZXN0b3JlIGl0IHVwb24gZXhpdCBmcm9tIGN1cnNlcyAo dmlhCisgICBlbmR3aW4oKSkuIFRodXMgYWZ0ZXIgYSBmaWxlIHRyYW5zZmVyIHRoYXQgdXNlcyB0 aGUgZnVsbHNjcmVlbiBmaWxlCisgICB0cmFuc2ZlciBkaXNwbGF5LCB0aGUgdGVybWluYWwgbm8g bG9uZ2VyIGVjaG9zIG5vciByZXNwb25kcyBpbW1lZGlhdGVseQorICAgdG8gVGFiLCA/LCBhbmQg b3RoZXIgc3BlY2lhbCBjb21tYW5kIGNoYXJhY3RlcnMuIFRoZSBzYW1lIHRoaW5nIGhhcHBlbnMK KyAgIG9uIG90aGVyIHBsYXRmb3JtcyB0aGF0IHVzZSBuY3Vyc2VzLCBlLmcuIEZyZWVCU0QuIFdv cmthcm91bmRzOgorCisgICAgICogVXNlIFNFVCBYRkVSIERJU1BMQVkgQlJJRUYsIENSVCwgU0VS SUFMLCBvciBOT05FIGluc3RlYWQgb2YKKyAgICAgICBGVUxMU0NSRUVOOyBvcjoKKyAgICAgKiBS ZWJ1aWxkIHdpdGggS0ZMQUdTPS1ETk9OT1NFVEJVRiAoQy1LZXJtaXQgOC4wKQorCisgICBJbiBS ZWQgSGF0IDcuMSwgd2hlbiB1c2luZyBDLUtlcm1pdCBpbiBhIEdub21lIHRlcm1pbmFsIHdpbmRv dywgaXQgd2FzCisgICBub3RpY2VkIHRoYXQgd2hlbiB0aGUgZnVsbHNjcmVlbiBmaWxlIHRyYW5z ZmVyIGRpc3BsYXkgZXhpdHMgKHZpYQorICAgZW5kd2luKCkpLCB0aGUgcHJldmlvdXMgKHByZS1m aWxlLXRyYW5zZmVyLWRpc3BsYXkpIHNjcmVlbiBpcyByZXN0b3JlZC4KKyAgIFRodXMgeW91IGNh bid0IGxvb2sgYXQgdGhlIGNvbXBsZXRlZCBkaXNwbGF5IHRvIHNlZSB3aGF0IGhhcHBlbmVkLiBU aGlzCisgICBpcyBhIGV2aWRlbnRseSBhIG5ldyBmZWF0dXJlIG9mIHh0ZXJtLiBJIGNhbiBvbmx5 IHNwZWN1bGF0ZSB0aGF0CisgICBpbml0c2NyZWVuKCkgYW5kIGVuZHdpbigpIG11c3Qgc2VuZCBz b21lIGtpbmQgb2Ygc3BlY2lhbCBlc2NhcGUKKyAgIHNlcXVlbmNlcyB0aGF0IGNvbW1hbmQgeHRl cm0gdG8gc2F2ZSBhbmQgcmVzdG9yZSB0aGUgc2NyZWVuLiBUbyBkZWZlYXQKKyAgIHRoaXMgZWZm ZWN0LCB0ZWxsIExpbnV4IHlvdSBoYXZlIGEgdnQxMDAgb3Igb3RoZXIgeHRlcm0tY29tcGF0aWJs ZQorICAgdGVybWluYWwgdGhhdCBpcyBub3QgYWN0dWFsbHkgYW4geHRlcm0sIG9yIGVsc2UgdGVs bCBLZXJtaXQgdG8gU0VUCisgICBUUkFOU0ZFUiBESVNQTEFZIHRvIHNvbWV0aGluZyBiZXNpZGVz IEZVTExTQ1JFRU4uCisKKzMuNC4gQy1LRVJNSVQgQU5EIE5FWFRTVEVQCisKKyAgIFsgWzM0NF1U b3AgXSBbIFszNDVdQ29udGVudHMgXSBbIFszNDZdU2VjdGlvbiBDb250ZW50cyBdIFsgWzM0N11O ZXh0IF0KKyAgIFsgWzM0OF1QcmV2aW91cyBdCisKKyAgIFJ1biBDLUtlcm1pdCBpbiBhIFRlcm1p bmFsLCBTdHVhcnQsIG9yIHh0ZXJtIHdpbmRvdywgb3Igd2hlbiBsb2dnZWQgaW4KKyAgIHJlbW90 ZWx5IHRocm91Z2ggYSBzZXJpYWwgcG9ydCBvciBURUxORVQgY29ubmVjdGlvbi4gQy1LZXJtaXQg ZG9lcyBub3QKKyAgIHdvcmsgY29ycmVjdGx5IHdoZW4gaW52b2tlZCBkaXJlY3RseSBmcm9tIHRo ZSBOZVhUU1RFUCBGaWxlIFZpZXdlciBvcgorICAgRG9jay4gVGhpcyBpcyBiZWNhdXNlIHRoZSB0 ZXJtaW5hbC1vcmllbnRlZCBndHR5LCBzdHR5LCAmIGlvY3RsIGNhbGxzCisgICBkb24ndCB3b3Jr IG9uIHRoZSBsaXR0bGUgd2luZG93IHRoYXQgTmVYVFNURVAgcG9wcyB1cCBmb3Igbm9uLU5lWFRT VEVQCisgICBhcHBsaWNhdGlvbnMgbGlrZSBLZXJtaXQuIENCUkVBSyBhbmQgTm8tRUNITyBzZXR0 aW5ncyBkbyBub3QgdGFrZQorICAgZWZmZWN0IGluIHRoZSBjb21tYW5kIHBhcnNlciAtLSBjb21t YW5kcyBhcmUgcGFyc2VkIHN0cmljdGx5IGxpbmUgYXQgYQorICAgdGltZS4gInNldCBsaW5lIC9k ZXYvY3VhIiB3b3Jrcy4gRHVyaW5nIENPTk5FQ1QgbW9kZSwgdGhlIGNvbnNvbGUgc3RheXMKKyAg IGluIGNvb2tlZCBtb2RlLCBzbyBjaGFyYWN0ZXJzIGFyZSBub3QgdHJhbnNtaXR0ZWQgdW50aWwg Y2FycmlhZ2UgcmV0dXJuCisgICBvciBsaW5lZmVlZCBpcyB0eXBlZCwgYW5kIHlvdSBjYW4ndCBl c2NhcGUgYmFjay4gSWYgeW91IHdhbnQgdG8gcnVuCisgICBLZXJtaXQgZGlyZWN0bHkgZnJvbSB0 aGUgRmlsZSBWaWV3ZXIsIHRoZW4gbGF1bmNoIGl0IGZyb20gYSBzaGVsbAorICAgc2NyaXB0IHRo YXQgcHV0cyBpdCBpbiB0aGUgZGVzaXJlZCBraW5kIG9mIHdpbmRvdywgc29tZXRoaW5nIGxpa2Ug dGhpcworICAgKGZvciAiVGVybWluYWwiKToKKworICBUZXJtaW5hbCAtTGluZXMgMjQgLUNvbHVt bnMgODAgLVdpbkxvY1ggMTAwIC1XaW5Mb2NZIDEwMCAkRk9OVCAkRk9OVFNJWkUgXAorICAtU291 cmNlRG90TG9naW4gLVNoZWxsIC91c3IvbG9jYWwvYmluL2tlcm1pdCAmCisKKyAgIEMtS2VybWl0 IGRvZXMgbm90IHdvcmsgY29ycmVjdGx5IG9uIGEgTmVYVCB3aXRoIE5lWFRTVEVQIDMuMCB0byB3 aGljaAorICAgeW91IGhhdmUgZXN0YWJsaXNoZWQgYW4gcmxvZ2luIGNvbm5lY3Rpb24sIGR1ZSB0 byBhIGJ1ZyBpbiBOZVhUU1RFUAorICAgMy4wLCB3aGljaCBoYXMgYmVlbiByZXBvcnRlZCB0byBO ZVhULgorCisgICBUaGUgU0VUIENBUlJJRVIgY29tbWFuZCBoYXMgbm8gZWZmZWN0IG9uIHRoZSBO ZVhUIC0tIHRoaXMgaXMgYQorICAgbGltaXRhdGlvbiBvZiB0aGUgTmVYVFNURVAgc2VyaWFsLXBv cnQgZGV2aWNlIGRyaXZlcnMuCisKKyAgIEhhcmR3YXJlIGZsb3cgY29udHJvbCBvbiB0aGUgTmVY VCBpcyBzZWxlY3RlZCBub3QgYnkgInNldCBmbG93IHJ0cy9jdHMiCisgICBpbiBLZXJtaXQgKHNp bmNlIE5lWFRTVEVQIG9mZmVycyBubyBBUEkgZm9yIHRoaXMpLCBidXQgcmF0aGVyLCBieSB1c2lu ZworICAgYSBzcGVjaWFsbHktbmFtZWQgZHJpdmVyIGZvciB0aGUgc2VyaWFsIGRldmljZTogL2Rl di9jdWZhIGluc3RlYWQKKyAgIC9kZXYvY3VhOyAvZGV2L2N1ZmIgaW5zdGVhZCBvZiAvZGV2L2N1 Yi4gVGhpcyBpcyBhdmFpbGFibGUgb25seSBvbgorICAgNjgwNDAtYmFzZWQgTmVYVCBtb2RlbHMg KHRoZSBzaXR1YXRpb24gZm9yIEludGVsIE5lWFRTVEVQCisgICBpbXBsZW1lbnRhdGlvbnMgaXMg dW5rbm93bikuCisKKyAgIE5lWFQtYnVpbHQgNjgwMzAgYW5kIDY4MDQwIG1vZGVscyBoYXZlIGRp ZmZlcmVudCBraW5kcyBvZiBzZXJpYWwKKyAgIGludGVyZmFjZXM7IHRoZSA2ODAzMCBoYXMgYSBN YWNpbnRvc2gtbGlrZSBSUy00MjIgaW50ZXJmYWNlLCB3aGljaAorICAgbGFja3MgUlRTIGFuZCBD VFMgc2lnbmFsczsgdGhlIDY4MDQwIGhhcyBhbiBSUy00MjMgKFJTLTIzMiBjb21wYXRpYmxlKQor ICAgaW50ZXJmYWNlLCB3aGljaCBzdXBwb3J0cyB0aGUgY29tbW9ubHktdXNlZCBtb2RlbSBzaWdu YWxzLiBXQVJOSU5HOiB0aGUKKyAgIGNvbm5lY3RvcnMgbG9vayBleGFjdGx5IHRoZSBzYW1lLCBi dXQgdGhlIHBpbnMgYXJlIHVzZWQgaW4gY29tcGxldGVseQorICAgRElGRkVSRU5UIHdheXMgLS0g ZGlmZmVyZW50IGNhYmxlcyBhcmUgcmVxdWlyZWQgZm9yIHRoZSB0d28ga2luZHMgb2YKKyAgIGlu dGVyZmFjZXMuCisKKyAgICAgSUYgWU9VIEdFVCBMT1RTIE9GIFJFVFJBTlNNSVNTSU9OUyBkdXJp bmcgZmlsZSB0cmFuc2ZlciwgZXZlbiB3aGVuCisgICAgIHVzaW5nIGEgL2Rldi9jdWYqIGRldmlj ZSBhbmQgdGhlIG1vZGVtIGlzIGNvcnJlY3RseSBjb25maWd1cmVkIGZvcgorICAgICBSVFMvQ1RT IGZsb3cgY29udHJvbCwgWU9VIFBST0JBQkxZIEhBVkUgVEhFIFdST05HIEtJTkQgT0YgQ0FCTEUu CisKKyAgIE9uIHRoZSBOZVhULCBLZXJtaXQgcmVwb3J0ZWRseSAoYnkgVGltZU1vbikgY2F1c2Vz IHRoZSBrZXJuZWwgdG8gdXNlIGEKKyAgIGxvdCBvZiBDUFUgdGltZSB3aGVuIHVzaW5nIGEgInNl dCBsaW5lIiBjb25uZWN0aW9uLiBUaGF0J3MgYmVjYXVzZQorICAgdGhlcmUgaXMgbm8gRE1BIGNo YW5uZWwgZm9yIHRoZSBOZVhUIHNlcmlhbCBwb3J0LCBzbyB0aGUgcG9ydCBtdXN0CisgICBpbnRl cnJ1cHQgdGhlIGtlcm5lbCBmb3IgZWFjaCBjaGFyYWN0ZXIgaW4gb3Igb3V0LgorCisgICBPbmUg dXNlciByZXBvcnRlZCB0cm91YmxlIHJ1bm5pbmcgQy1LZXJtaXQgb24gYSBOZVhUIGZyb20gd2l0 aGluIE5lWFQncworICAgU3VicHJvY2VzcyBjbGFzcyB1bmRlciBOZVhUc3RlcCAzLjAsIGFuZC9v ciB3aGVuIHJsb2dpbidkIGZyb20gb25lIE5lWFQKKyAgIHRvIGFub3RoZXI6IEVycm9yIG9wZW5p bmcgL2Rldi90dHk6LCBjb25nbTogTm8gc3VjaCBkZXZpY2Ugb3IgYWRkcmVzcy4KKyAgIERpYWdu b3NpczogQnVnIGluIE5lWFRTVEVQIDMuMCwgY3VyZSB1bmtub3duLgorCiszLjUuIEMtS0VSTUlU IEFORCBRTlgKKworICAgWyBbMzQ5XVRvcCBdIFsgWzM1MF1Db250ZW50cyBdIFsgWzM1MV1TZWN0 aW9uIENvbnRlbnRzIF0gWyBbMzUyXU5leHQgXQorICAgWyBbMzUzXVByZXZpb3VzIF0KKworICAg U2VlIGFsc286IFRoZSBbMzU0XWNvbXAub3MucW54IG5ld3Nncm91cC4KKworICAgU3VwcG9ydCBm b3IgUU5YIDQueCB3YXMgYWRkZWQgaW4gQy1LZXJtaXQgNUEoMTkwKS4gVGhpcyBpcyBhCisgICBm dWxsLWZ1bmN0aW9uIGltcGxlbWVudGF0aW9uLCB0aG9yb3VnaGx5IHRlc3RlZCBvbiBRTlggNC4y MSBhbmQgbGF0ZXIsCisgICBhbmQgdmVyaWZpZWQgdG8gd29yayBpbiBib3RoIDE2LWJpdCBhbmQg MzItYml0IHZlcnNpb25zLiBUaGUgMTYtYml0CisgICB2ZXJzaW9uIHdhcyBkcm9wcGVkIGluIEMt S2VybWl0IDcuMCBzaW5jZSBpdCBjYW4gbm8gbG9uZ2VyIGJlIGJ1aWx0CisgICBzdWNjZXNzZnVs bHkgKGFmdGVyIHN0cmlwcGluZyBtb3N0IG1vc3QgZmVhdHVyZXMsIEkgc3VjY2VlZGVkIGluCisg ICBnZXR0aW5nIGl0IHRvIGNvbXBpbGUgYW5kIGxpbmsgd2l0aG91dCBjb21wbGFpbnQsIGJ1dCB0 aGUgZXhlY3V0YWJsZQorICAganVzdCBiZWVwcyB3aGVuIHlvdSBydW4gaXQpOyBmb3IgMTYtYml0 IFFOWCA0LjJ4LCB1c2UgQy1LZXJtaXQgNi4wIG9yCisgICBlYXJsaWVyLCBvciBlbHNlIFszNTVd Ry1LZXJtaXQuCisKKyAgIFRoZSAzMi1iaXQgdmVyc2lvbiAoYW5kIHRoZSAxNi1iaXQgdmVyc2lv biBwcmlvciB0byBDLUtlcm1pdCA3LjApCisgICBzdXBwb3J0cyBtb3N0IG9mIEMtS2VybWl0J3Mg YWR2YW5jZWQgZmVhdHVyZXMgaW5jbHVkaW5nIFRDUC9JUCwgaGlnaAorICAgc2VyaWFsIHNwZWVk cywgaGFyZHdhcmUgZmxvdy1jb250cm9sLCBtb2RlbS1zaWduYWwgYXdhcmVuZXNzLCBjdXJzZXMK KyAgIHN1cHBvcnQsIGV0Yy4KKworICAgQlVHOiBJbiBDLUtlcm1pdCA2LjAgb24gUU5YIDQuMjIg YW5kIGVhcmxpZXIsIHRoZSBmdWxsc2NyZWVuIGZpbGUKKyAgIHRyYW5zZmVyIGRpc3BsYXkgd29y a2VkIGZpbmUgdGhlIGZpcnN0IHRpbWUsIGJ1dCB3YXMgZnJhY3R1cmVkIG9uCisgICBzdWJzZXF1 ZW50IGZpbGUgdHJhbnNmZXJzLiBDYXVzZSBhbmQgY3VyZSB1bmtub3duLiBJbiBDLUtlcm1pdCA3 LjAgYW5kCisgICBRTlggNC4yNSwgdGhpcyBubyBsb25nZXIgb2NjdXJzLiBJdCBpcyBub3Qga25v d24gaWYgaXQgd291bGQgb2NjdXIgaW4KKyAgIEMtS2VybWl0IDcuMCBvciBsYXRlciBvbiBlYXJs aWVyIFFOWCB2ZXJzaW9ucy4KKworICAgRGlhbG91dCBkZXZpY2VzIGFyZSBub3JtYWxseSAvZGV2 L3NlcjEsIC9kZXYvc2VyMiwgLi4uLCBhbmQgY2FuIGJlCisgICBvcGVuZWQgZXhwbGljaXRseSB3 aXRoIFNFVCBMSU5FLiBSZXBvcnRlZGx5LCAiL2Rldi9zZXIiIChubyB1bml0CisgICBudW1iZXIp IG9wZW5zIHRoZSBmaXJzdCBhdmFpbGFibGUgL2Rldi9zZXJuIGRldmljZS4KKworICAgTGlrZSBh bGwgb3RoZXIgVW5peCBDLUtlcm1pdCBpbXBsZW1lbnRhdGlvbnMsIFFOWCBDLUtlcm1pdCBkb2Vz IG5vdAorICAgcHJvdmlkZSBhbnkga2luZCBvZiB0ZXJtaW5hbCBlbXVsYXRpb24uIFRlcm1pbmFs IHNwZWNpZmljIGZ1bmN0aW9ucyBhcmUKKyAgIHByb3ZpZGVkIGJ5IHlvdXIgdGVybWluYWwsIHRl cm1pbmFsIHdpbmRvdyAoZS5nLiBRTlggVGVybWluYWwgb3IKKyAgIHh0ZXJtKSwgb3IgZW11bGF0 b3IuCisKKyAgIFFOWCBDLUtlcm1pdCwgYXMgZGlzdHJpYnV0ZWQsIGRvZXMgbm90IGluY2x1ZGUg c3VwcG9ydCBmb3IgVVVDUAorICAgbGluZS1sb2NraW5nOyB0aGUgUU5YIG1ha2VmaWxlIGVudHJp ZXMgKHFueDMyIGFuZCBxbngxNikgaW5jbHVkZSB0aGUKKyAgIC1ETk9VVUNQIHN3aXRjaC4gVGhp cyBpcyBiZWNhdXNlIFFOWCwgYXMgZGlzdHJpYnV0ZWQsIGRvZXMgbm90IGluY2x1ZGUKKyAgIFVV Q1AsIGFuZCBpdHMgb3duIGNvbW11bmljYXRpb25zIHNvZnR3YXJlIChlLmcuIHF0ZXJtKSBkb2Vz IG5vdCB1c2UKKyAgIFVVQ1AgbGluZSBsb2NraW5nLiBJZiB5b3UgaGF2ZSBhIFVVQ1AgcHJvZHVj dCBpbnN0YWxsZWQgb24geW91ciBRTlgKKyAgIHN5c3RlbSwgcmVtb3ZlIHRoZSAtRE5PVVVDUCBz d2l0Y2ggZnJvbSB0aGUgbWFrZWZpbGUgZW50cnkgYW5kIHJlYnVpbGQuCisgICBUaGVuIGNoZWNr IHRvIHNlZSB0aGF0IEtlcm1pdCdzIFVVQ1AgbG9ja2ZpbGUgY29udmVudGlvbnMgYXJlIHRoZSBz YW1lCisgICBhcyB0aG9zZSBvZiB5b3VyIFVVQ1AgcGFja2FnZTsgaWYgbm90LCByZWFkIHRoZSBb MzU2XVVVQ1AgbG9ja2ZpbGUKKyAgIHNlY3Rpb24gb2YgdGhlIFszNTddSW5zdGFsbGF0aW9uIElu c3RydWN0aW9ucyBhbmQgbWFrZSB0aGUgbmVjZXNzYXJ5CisgICBjaGFuZ2VzIHRvIHRoZSBtYWtl ZmlsZSBlbnRyeSAoZS5nLiBhZGQgLURIREJVVUNQKS4KKworICAgUU5YIGRvZXMsIGhvd2V2ZXIs IGFsbG93IGEgcHJvZ3JhbSB0byBnZXQgdGhlIGRldmljZSBvcGVuIGNvdW50LiBUaGlzCisgICBj YW4gbm90IGJlIGEgcmVsaWFibGUgZm9ybSBvZiBsb2NraW5nIHVubGVzcyBhbGwgYXBwbGljYXRp b25zIGRvIGl0LCBzbworICAgYnkgZGVmYXVsdCwgS2VybWl0IHVzZXMgdGhpcyBpbmZvcm1hdGlv biBvbmx5IGZvciBwcmludGluZyBhIHdhcm5pbmcKKyAgIG1lc3NhZ2Ugc3VjaCBhczoKKworICBD LUtlcm1pdD5zZXQgbGluZSAvZGV2L3NlcjEKKyAgV0FSTklORyAtICIvZGV2L3NlcjEiIGxvb2tz IGJ1c3kuLi4KKworICAgSG93ZXZlciwgaWYgeW91IHdhbnQgdG8gdXNlIGl0IGFzIGEgbG9jaywg eW91IGNhbiBkbyBzbyB3aXRoOgorCisgIFNFVCBRTlgtUE9SVC1MT0NLIHsgT04sIE9GRiB9CisK KyAgIFRoaXMgaXMgT0ZGIGJ5IGRlZmF1bHQ7IGlmIHlvdSBzZXQgaW4gT04sIEMtS2VybWl0IHdp bGwgZmFpbCB0byBvcGVuCisgICBhbnkgZGlhbG91dCBkZXZpY2Ugd2hlbiBpdHMgb3BlbiBjb3Vu dCBpbmRpY2F0ZXMgdGhhdCBhbm90aGVyIHByb2Nlc3MKKyAgIGhhcyBpdCBvcGVuLiBTSE9XIENP TU0gKGluIFFOWCBvbmx5KSBkaXNwbGF5cyB0aGUgc2V0dGluZywgYW5kIGlmIHlvdQorICAgaGF2 ZSBhIHBvcnQgb3BlbiwgaXQgYWxzbyBzaG93cyB0aGUgb3BlbiBjb3VudC4KKworICAgQXMgb2Yg Qy1LZXJtaXQgOC4wLCBDLUtlcm1pdCdzICJvcGVuLWNvdW50IiBmb3JtIG9mIGxpbmUgbG9ja2lu ZyB3b3JrcworICAgb25seSBpbiBRTlg0LCBub3QgaW4gUU5YNiAodGhpcyBtaWdodCBjaGFuZ2Ug aW4gYSBmdXR1cmUgQy1LZXJtaXQKKyAgIHJlbGVhc2UpLgorCiszLjYuIEMtS0VSTUlUIEFORCBT Q08KKworICAgWyBbMzU4XVRvcCBdIFsgWzM1OV1Db250ZW50cyBdIFsgWzM2MF1TZWN0aW9uIENv bnRlbnRzIF0gWyBbMzYxXU5leHQgXQorICAgWyBbMzYyXVByZXZpb3VzIF0KKworICAgU0VDVElP TiBDT05URU5UUworCiszLjYuMS4gWzM2M11TQ08gWEVOSVgKKzMuNi4yLiBbMzY0XVNDTyBVTklY IGFuZCBPU1I1CiszLjYuMy4gWzM2NV1Vbml4d2FyZQorMy42LjQuIFszNjZdT3BlbiBVTklYIDgK KworICAgUkVGRVJFTkNFUworCisgICAgICogVGhlIGNvbXAudW5peC5zY28uKiBuZXdzZ3JvdXBz LgorICAgICAqIFszNjddU2VjdGlvbiAzLjEwIGJlbG93IGZvciBVbml4d2FyZS4KKyAgICAgKiBU aGUgZm9sbG93aW5nIEZBUXM6CisKKyAgICAgICAgVGhlIGNvbXAuc2NvLm1pc2MgRkFROgorICAg ICAgICAgICAgICAgIFszNjhdaHR0cDovL2FwbGF3cmVuY2UuY29tL1NDT0ZBUS8KKworICAgICAg ICBDYWxkZXJhIChTQ08pIGNvbXAudW5peC5zY28ucHJvZ3JhbW1lciBGQVE6CisgICAgICAgICAg ICAgICAgWzM2OV1odHRwOi8vd3d3LnplbmV6LmNvbS9jZ2ktYmluL3Njb3Byb2dmYXEvZmFxLnBs CisKKyAgICAgICAgVGhlIFVuaXhXYXJlIDcvT3BlblVOSVggOCBGQVE6CisgICAgICAgICAgICAg ICAgWzM3MF1odHRwOi8vd3d3LnplbmV6LmNvbS9jZ2ktYmluL3Njb3V3N2ZhcS9mYXEucGwKKyAg ICAgICAgICAgICAgICBbMzcxXWh0dHA6Ly96ZW5lei5wY3VuaXguY29tL2NnaS1iaW4vc2NvdXc3 ZmFxL2ZhcS5wbAorCisgICAgICAgIEhpZ2ggU3BlZWQgTW9kZW1zIGZvciBTQ08gVW5peDoKKyAg ICAgICAgICAgICAgICBbMzcyXWh0dHA6Ly9wY3VuaXguY29tL1VuaXhhcnQvbW9kZW1zLmh0bWwK KworICAgICAgICBUaGUgVW5peFdhcmUgRkFRCisgICAgICAgICAgICAgICAgWzM3M11odHRwOi8v d3d3LmZyZWViaXJkLm9yZy9mYXEvCisKKyAgICAgICAgVGhlIFVuaXhXYXJlIDEueCBhbmQgMi4w IFByb2dyYW1tZXIgRkFRCisgICAgICAgICAgICAgICAgWzM3NF1odHRwOi8vd3d3LmZyZWViaXJk Lm9yZy9mYXEvZGV2ZWxvcGVyLmh0bWwKKworICAgICAgICBDYWxkZXJhIFN1cHBvcnQgS25vd2xl ZGdlIEJhc2UKKyAgICAgICAgICAgICAgICBbMzc1XWh0dHA6Ly9zdXBwb3J0LmNhbGRlcmEuY29t L2NhbGRlcmEKKworICAgICAgICBbMzc2XWh0dHA6Ly9zdGFnZS5jYWxkZXJhLmNvbS90YS8KKyAg ICAgICAgICAgICAgICBDYWxkZXJhIChTQ08pIFRlY2huaWNhbCBBcnRpY2xlIFNlYXJjaCBDZW50 ZXIKKworICAgICAgICBbMzc3XWh0dHA6Ly9hcGxhd3JlbmNlLmNvbS9uZXd0b3Njby5odG1sCisg ICAgICAgICAgICAgICAgTmV3IHRvIFNDTyAoVG9ueSBMYXdyZW5jZSkKKworICAgVGhlIHNhbWUg Y29tbWVudHMgcmVnYXJkaW5nIHRlcm1pbmFsIGVtdWxhdGlvbiBhbmQga2V5IG1hcHBpbmcgYXBw bHkgdG8KKyAgIFNDTyBvcGVyYXRpbmcgc3lzdGVtcyBhcyB0byBhbGwgb3RoZXIgVW5peGVzLiBD LUtlcm1pdCBpcyBub3QgYQorICAgdGVybWluYWwgZW11bGF0b3IsIGFuZCB5b3UgY2FuJ3QgdXNl IGl0IHRvIG1hcCBGLWtleXMsIEFycm93IGtleXMsIGV0Yy4KKyAgIFRoZSB3YXkgdG8gZG8gdGhp cyBpcyB3aXRoIHhtb2RtYXAgKHh0ZXJtKSBvciBsb2Fka2V5cyAoY29uc29sZSkuIEZvciBhCisg ICBicmllZiBleHBsYW5hdGlvbiwgc2VlIFszNzhdU2VjdGlvbiAzLjAuNS4gRm9yIGEgZnVsbGVy IGV4cGxhbmF0aW9uLAorICAgWzM3OV1DbElDSyBIRVJFLgorCisgICBBbHNvIHNlZSBnZW5lcmFs IGNvbW1lbnRzIG9uIFBDLWJhc2VkIFVuaXhlcyBpbiBbMzgwXVNlY3Rpb24gMy4wLgorCiszLjYu MS4gU0NPIFhFTklYCisKKyAgIFsgWzM4MV1Ub3AgXSBbIFszODJdQ29udGVudHMgXSBbIFszODNd U2VjdGlvbiBDb250ZW50cyBdIFsgWzM4NF1OZXh0IF0KKworICAgT2xkIFhlbml4IHZlcnNpb25z Li4uIERpZCB5b3Uga25vdzogWGVuaXggMy4wIGlzICpvbGRlciogdGhhbiBYZW5peAorICAgMi4w PworCisgICBJbiBYZW5peCAyLjMuNCBhbmQgcHJvYmFibHkgb3RoZXIgWGVuaXggdmVyc2lvbnMs IG1vbWVudGFyaWx5IGRyb3BwaW5nCisgICBEVFIgdG8gaGFuZyB1cCBhIG1vZGVtIGRvZXMgbm90 IHdvcmsuIERUUiBnb2VzIGRvd24gYnV0IGRvZXMgbm90IGNvbWUKKyAgIHVwIGFnYWluLiBXb3Jr YXJvdW5kOiBVc2UgU0VUIE1PREVNIEhBTkdVUC1NRVRIT0QgTU9ERU0tQ09NTUFORC4KKyAgIEFu eWJvZHkgd2hvIHdvdWxkIGxpa2UgdG8gZml4IHRoaXMgaXMgd2VsY29tZSB0byB0YWtlIGEgbG9v ayBhdAorICAgdHRoYW5nKCkgaW4gWzM4NV1ja3V0aW8uYy4gQWxzbzogbW9kZW0gc2lnbmFscyBj YW4gbm90IGJlIHJlYWQgaW4KKyAgIFhlbml4LCBhbmQgdGhlIG1heGltdW0gc2VyaWFsIHNwZWVk IGlzIDM4NDAwLgorCisgICBUaGVyZSBpcyBhbGwgc29ydHMgb2YgY29uZnVzaW9uIGFtb25nIFND TyB2ZXJzaW9ucywgcGFydGljdWxhcmx5IHdoZW4KKyAgIHRoaXJkLSBwYXJ0eSBjb21tdW5pY2F0 aW9ucyBib2FyZHMgYW5kIGRyaXZlcnMgYXJlIGluc3RhbGxlZCwgcmVnYXJkaW5nCisgICBsb2Nr ZmlsZSBuYW1pbmcgY29udmVudGlvbnMsIGFzIHdlbGwgYXMgYmFzaWMgZnVuY3Rpb25hbGl0eS4g QXMgZmFyIGFzCisgICBsb2NrZmlsZXMgZ28sIGFsbCBiZXRzIGFyZSBvZmYgaWYgeW91IGFyZSB1 c2luZyBhIHRoaXJkLXBhcnR5IG11bHRpcG9ydAorICAgYm9hcmQuIEF0IGxlYXN0IHlvdSBoYXZl IHRoZSBzb3VyY2UgY29kZS4gSG9wZWZ1bGx5IHlvdSBhbHNvIGhhdmUgYSBDCisgICBjb21waWxl ciA6LSkKKworICAgWGVuaXggMi4zLjAgYW5kIGxhdGVyIGNsYWltIHRvIHN1cHBvcnQgUlRTRkxP VyBhbmQgQ1RTRkxPVywgYnV0IHRoaXMgaXMKKyAgIG5vdCBtb2Rlcm4gYmlkaXJlY3Rpb25hbCBo YXJkd2FyZSBmbG93IGNvbnRyb2w7IHJhdGhlciBpdCBpbXBsZW1lbnRzCisgICB0aGUgb3JpZ2lu YWwgUlMtMjMyIG1lYW5pbmdzIG9mIHRoZXNlIHNpZ25hbHMgZm9yIHVuaWRpcmVjdGlvbmFsCisg ICBoYWxmLWR1cGxleCBsaW5lIGFjY2VzczogSWYgYm90aCBSVFNGTE9XIGFuZCBDVFNGTE9XIGJp dHMgYXJlIHNldCwKKyAgIFhlbml4IGFzc2VydHMgUlRTIHdoZW4gaXQgd2FudHMgdG8gc2VuZCBk YXRhIGFuZCB3YWl0cyBmb3IgQ1RTCisgICBhc3NlcnRpb24gYmVmb3JlIGl0IGFjdHVhbGx5IHN0 YXJ0cyBzZW5kaW5nIGRhdGEgKGFsc28sIHJlcG9ydGVkbHksCisgICBldmVuIHRoaXMgaXMgYnJv a2VuIGluIFhlbml4IDIuMy4wIGFuZCAyLjMuMSkuCisKKzMuNi4yLiBTQ08gVU5JWCBBTkQgT1NS NQorCisgICBbIFszODZdVG9wIF0gWyBbMzg3XUNvbnRlbnRzIF0gWyBbMzg4XVNlY3Rpb24gQ29u dGVudHMgXSBbIFszODldTmV4dCBdCisgICBbIFszOTBdUHJldmlvdXMgXQorCisgICBTQ08gc3lz dGVtcyB0ZW5kIHRvIHVzZSBkaWZmZXJlbnQgbmFtZXMgKGkuZS4gZHJpdmVycykgZm9yIHRoZSBz YW1lCisgICBkZXZpY2UuIFR5cGljYWxseSAvZGV2L3R0eTFhIHJlZmVycyB0byBhIHRlcm1pbmFs IGRldmljZSB0aGF0IGhhcyBubworICAgbW9kZW0gY29udHJvbDsgb3BlbiwgcmVhZCwgd3JpdGUs IGFuZCBjbG9zZSBvcGVyYXRpb25zIGRvIG5vdCBkZXBlbmQgb24KKyAgIGNhcnJpZXIuIE9uIHRo ZSBvdGhlciBoYW5kLCAvZGV2L3R0eTFBIChzYW1lIG5hbWUsIGJ1dCB3aXRoIGZpbmFsCisgICBs ZXR0ZXIgdXBwZXIgY2FzZSksIGlzIHRoZSBzYW1lIGRldmljZSB3aXRoIG1vZGVtIGNvbnRyb2ws IGluIHdoaWNoCisgICBjYXJyaWVyIGlzIHJlcXVpcmVkICh0aGUgU0VUIExJTkUgY29tbWFuZCBk b2VzIG5vdCBjb21wbGV0ZSB1bnRpbAorICAgY2FycmllciBhcHBlYXJzLCByZWFkL3dyaXRlIG9w ZXJhdGlvbnMgZmFpbCBpZiB0aGVyZSBpcyBubyBjYXJyaWVyLAorICAgZXRjKS4KKworICAgU0NP IE9wZW5TZXJ2ZXIgNS4wLjUgYW5kIGVhcmxpZXIgZG8gbm90IHN1cHBvcnQgdGhlIHJlYWRpbmcg b2YgbW9kZW0KKyAgIHNpZ25hbHMuIFRodXMgInNob3cgY29tbSIgZG9lcyBub3QgbGlzdCBtb2Rl bSBzaWduYWxzLCBhbmQgQy1LZXJtaXQKKyAgIGRvZXMgbm90IGF1dG9tYXRpY2FsbHkgcG9wIGJh Y2sgdG8gaXRzIHByb21wdCB3aGVuIHRoZSBtb2RlbSBoYW5ncyB1cAorICAgdGhlIGNvbm5lY3Rp b24gKGRyb3BzIENEKS4gVGhlIGlvY3RsKCkgY2FsbCBmb3IgdGhpcyBpcyBzaW1wbHkgbm90Cisg ICBpbXBsZW1lbnRlZCwgYXQgbGVhc3Qgbm90IGluIHRoZSBzdGFuZGFyZCBkcml2ZXJzLiBPU1I1 LjAuNiBhdHRlbXB0cyB0bworICAgZGVhbCB3aXRoIG1vZGVtIHNpZ25hbHMgYnV0IGZhaWxzOyBo b3dldmVyIE9TUjUuMC42YSBhcHBlYXJzIHRvCisgICBmdW5jdGlvbiBwcm9wZXJseS4KKworICAg RGlhbGluZyBpcyBsaWtlbHkgbm90IHRvIHdvcmsgd2VsbCBpbiBTQ08gT3BlblNlcnZlciA1LjAu eCBiZWNhdXNlIG1hbnkKKyAgIG9mIHRoZSBzZXJpYWwtcG9ydCBBUElzIHNpbXBseSBkbyBub3Qg b3BlcmF0ZSB3aGVuIHVzaW5nIHRoZSBzdGFuZGFyZAorICAgZHJpdmVycy4gRm9yIGV4YW1wbGUs IGlmIERUUiBpcyBkcm9wcGVkIGJ5IHRoZSByZWNvbW1lbmRlZCBtZXRob2QKKyAgIChzZXR0aW5n IHNwZWVkIHRvIDAgZm9yIGhhbGYgYSBzZWNvbmRzLCB0aGVuIHJlc3RvcmluZyB0aGUgc3BlZWQp LCBEVFIKKyAgIGFuZCBSVFMgZ28gZG93biBidXQgbmV2ZXIgY29tZSBiYWNrIHVwLiBXaGVuIGlu IGRvdWJ0IFNFVCBNT0RFTQorICAgSEFOR1VQLU1FVEhPRCBNT0RFTS1DT01NQU5EIG9yIFNFVCBE SUFMIEhBTkdVUCBPRkYuCisKKyAgIE9uIHRoZSBvdGhlciBoYW5kLCBjZXJ0YWluIGZ1bmN0aW9u cyB0aGF0IG1pZ2h0IG5vdCAoZG8gbm90KSB3b3JrIHJpZ2h0CisgICBvciBhdCBhbGwgd2hlbiB1 c2luZyBTQ08gZHJpdmVycyAoZS5nLiBoaWdoIHNlcmlhbCBzcGVlZHMsIGhhcmR3YXJlCisgICBm bG93IGNvbnRyb2wsIGFuZC9vciByZWFkaW5nIG9mIG1vZGVtIHNpZ25hbHMpIG1pZ2h0IHdvcmsg cmlnaHQgd2hlbgorICAgdXNpbmcgdGhpcmQtcGFydHkgZHJpdmVycy4gKEV4YW1wbGU6IGhhcmR3 YXJlIGZsb3cgY29udHJvbCB3b3JrcywKKyAgIHJlcG9ydGVkbHksIG9ubHkgb24gdXBwZXJjYXNl IGRldmljZSBsaWtlIHR0eTFBIC0tIG5vdCB0dHkxYSAtLSBhbmQKKyAgIG9ubHkgd2hlbiBDTE9D QUwgaXMgY2xlYXIgd2hlbiB1c2luZyB0aGUgU0NPIHNpbyBkcml2ZXIsIGJ1dCB0aGVyZSBhcmUK KyAgIG5vIHN1Y2ggcmVzdHJpY3Rpb25zIGluLCBlLmcuLCBbMzkxXURpZ2lib2FyZCBkcml2ZXJz KS4KKworICAgT25lIHVzZXIgcmVwb3J0cyB0aGF0IGhlIGNhbid0IHRyYW5zZmVyIGxhcmdlIGZp bGVzIHdpdGggQy1LZXJtaXQgdW5kZXIKKyAgIFNDTyBPU1I1LjAuMCBhbmQgNS4wLjQgLS0gYWZ0 ZXIgdGhlIGZpcnN0IDVLLCBldmVyeXRoaW5nIGZhbGxzIGFwYXJ0LgorICAgU2FtZSB0aGluZyB3 aXRob3V0IEtlcm1pdCAtLSBlLmcuIHdpdGggZnRwIG92ZXIgYSBQUFAgY29ubmVjdGlvbi4KKyAg IExhdGVyLCBoZSBzYWlkIHRoYXQgcmVwbGFjaW5nIFNDTydzIFNJTyBkcml2ZXIgd2l0aCBGQVMs IGFuIGFsdGVybmF0aXZlCisgICBjb21tdW5pY2F0aW9ucyBkcml2ZXIsIG1hZGUgdGhlIHByb2Js ZW0gZ28gYXdheToKKworICBbMzkyXWZ0cDovL2Z0cC5mdS1iZXJsaW4uZGUvcHViL3VuaXgvZHJp dmVyL2ZhcworCisgICBXaXRoIHJlZ2FyZCB0byBiaWRpcmVjdGlvbmFsIHNlcmlhbCBwb3J0cyBv biBPcGVuU2VydmVyIDUuMC40LCB0aGUKKyAgIGZvbGxvd2luZyBhZHZpY2UgYXBwZWFyZWQgb24g YW4gU0NPLXJlbGF0ZWQgbmV3c2dyb3VwOgorCisgICAgIE5vIGFtb3VudCBvZiBjb25maWd1cmF0 aW9uIGluZm9ybWF0aW9uIGlzIGdvaW5nIHRvIGhlbHAgeW91IG9uIDUuMC40CisgICAgIHVubGVz cyBpdCBpbmNsdWRlcyB0aGUga2x1ZGdlIGZvciB0aGUgcHJpbWFyeSBwcm9ibGVtLiBXaXRoIGFs bW9zdAorICAgICBldmVyeSBtb2RlbSwgdGhlIDUuMC40IGdldHR5IHdpbGwgYmFyZiBtZXNzYWdl cyBhbmQgbWF5IG9yIG1heSBub3QKKyAgICAgY29ubmVjdC4gVGhlcmUgYXJlIDIgc29sdXRpb25z IGFuZCBvbmx5IG9uZSB3b3JrcyBvbiA1LjAuNC4gR2V0IHRoZQorICAgICBhdGRpYWxlciBiaW5h cnkgZnJvbSBhIDUuMC4wIHN5c3RlbSBhbmQgc3Vic3RpdHV0ZSBpdCBmb3IgdGhlIG5hdGl2ZQor ICAgICA1LjAuNCBhdGRpYWxlci4gVGhlIG90aGVyIHNvbHV0aW9uIGlzIHRvIHVwZ3JhZGUgdG8g NS4wLjUuIEFuZCwgbW9zdAorICAgICBvZiBhbGwsIG9uIGFueSBPcGVuU2VydmVyIHByb2R1Y3Rz LCBkbyBOT1QgcnVuIHRoZSBiYWRseSBicm9rZW4KKyAgICAgTW9kZW0gTWFuYWdlci4gQ29uZmln dXJlIHRoZSBtb2RlbXMgaW4gdGhlIHRpbWUgaG9ub3JlZCB3YXkgdGhhdAorICAgICBkYXRlcyBi YWNrIHRvIFhlbml4LgorCisgICBVc2UgU0NPLXByb3ZpZGVkIHV0aWxpdGllcyBmb3Igc3dpdGNo aW5nIHRoZSBkaXJlY3Rpb25hbGl0eSBvZiBhIG1vZGVtCisgICBsaW5lLCBzdWNoIGFzICJlbmFi bGUiIGFuZCAiZGlzYWJsZSIgY29tbWFuZHMuIEZvciBleGFtcGxlLCB0byBkaWFsIG91dAorICAg b24gdHR5MWEsIHdoaWNoIGlzIG5vcm1hbGx5IHNldCB1cCBmb3IgbG9naW5zOgorCisgIGRpc2Fi bGUgdHR5MWEKKyAga2VybWl0IC1sIC9kZXYvdHR5MWEKKyAgZW5hYmxlIHR0eTFhCisKKyAgIElm IGEgdHR5IGRldmljZSBpcyBsaXN0ZWQgYXMgYW4gQUNVIGluIC91c3IvbGliL3V1Y3AvRGV2aWNl cyBhbmQgaXMKKyAgIGVuYWJsZWQsIGdldHR5IHJlc2V0cyB0aGUgb3duZXJzaGlwIGFuZCBwZXJt aXNzaW9ucyB0byB1dWNwLnV1Y3AgYW5kCisgICA2NDAgZXZlcnkgdGltZSB0aGUgZGV2aWNlIGlz IHJlbGVhc2VkLiBJZiB5b3Ugd2FudCB0byB1c2UgdGhlIGRldmljZQorICAgb25seSBmb3IgZGlh bG91dCwgYW5kIHlvdSB3YW50IHRvIHNwZWNpZnkgb3RoZXIgb3duZXJzIG9yIHBlcm1pc3Npb25z LAorICAgeW91IHNob3VsZCBkaXNhYmxlIGl0IGluIC91c3IvbGliL3V1Y3AvRGV2aWNlczsgdGhp cyB3aWxsIHByZXZlbnQgZ2V0dHkKKyAgIGZyb20gZG9pbmcgdGhpbmdzIHRvIGl0LiBZb3Ugc2hv dWxkIGFsc28gY2hhbmdlcyB0aGUgZGV2aWNlJ3MgZmlsZQorICAgbW9kZXMgaW4gL2V0Yy9jb25m L25vZGUuZC9zaW8gYnkgY2hhbmdpbmcgZmllbGRzIDUtNyBmb3IgdGhlIGRlc2lyZWQKKyAgIGRl dmljZShzKTsgdGhpcyBkZXRlcm1pbmVzIGhvdyB0aGUgZGV2aWNlcyBhcmUgc2V0IGlmIHlvdSBy ZWxpbmsgdGhlCisgICBrZXJuZWwuCisKKyAgIE9uZSBTQ08gdXNlciBvZiBDLUtlcm1pdCA1QSgx OTApIHJlcG9ydGVkIHRoYXQgb25seSBvbmUgY29weSBvZiBLZXJtaXQKKyAgIGNhbiBydW4gYXQg YSB0aW1lIHdoZW4gYSBTdGFsbGlvbiBUZWNobm9sb2dpZXMgbXVsdGlwb3J0IGJvYXJkcyBhcmUK KyAgIGluc3RhbGxlZC4gQ2F1c2UsIGN1cmUsIGFuZCBwcmVzZW50IHN0YXR1cyB1bmtub3duIChz ZWUgWzM5M11TZWN0aW9uIDE0CisgICBmb3IgbW9yZSBpbmZvIHJlZ2FyZGluZyBTdGFsbGlvbiku CisKKyAgIFByaW9yIHRvIFNDTyBPcGVuU2VydmVyIDUuMC40LCB0aGUgaGlnaGVzdCBzZXJpYWwg cG9ydCBzcGVlZCBzdXBwb3J0ZWQKKyAgIGJ5IFNDTyB3YXMgMzg0MDAuIEhvd2V2ZXIsIGluIHNv bWUgU0NPIHZlcnNpb25zIChlLmcuIE9TUjUpIGl0IGlzCisgICBwb3NzaWJsZSB0byBtYXAgcmFy ZWx5LXVzZWQgbG93ZXIgc3BlZWRzIChsaWtlIDYwMCBhbmQgMTgwMCkgdG8gaGlnaGVyCisgICBv bmVzIGxpa2UgNTc2MDAgYW5kIDExNTIwMC4gVG8gZmluZCBvdXQgaG93LCBnbyB0bworICAgWzM5 NF1odHRwOi8vd3d3LnNjby5jb20vIGFuZCBzZWFyY2ggZm9yICIxMTUyMDAiLiBJbiBPU1I1LjAu NCwgc2VyaWFsCisgICBzcGVlZHMgdXAgdG8gOTIxNjAwIGFyZSBzdXBwb3J0ZWQgdGhyb3VnaCB0 aGUgUE9TSVggaW50ZXJmYWNlOyBDLUtlcm1pdAorICAgNi4xLjE5MyBvciBsYXRlciwgd2hlbiBi dWlsdCBmb3IgT1NSNS4wLjQgdXNpbmcgL2Jpbi9jYyAoTk9UIHRoZSBVREssCisgICB3aGljaCBo aWRlcyB0aGUgaGlnaC1zcGVlZCBkZWZpbml0aW9ucyBmcm9tIENQUCksIHN1cHBvcnRzIHRoZXNl CisgICBzcGVlZHMsIGJ1dCB5b3UgbWlnaHQgYmUgYWJsZSB0byBydW4gdGhpcyBiaW5hcnkgb24g ZWFybGllciByZWxlYXNlcyB0bworICAgZ2V0IHRoZSBoaWdoIHNlcmlhbCBzcGVlZHMsIGRlcGVu ZGluZyBvbiB2YXJpb3VzIGZhY3RvcnMsIGRlc2NyaWJlZCBieQorICAgQmVsYSBMdWJraW4gb2Yg U0NPOgorCisgIFNlcmlhbCBzcGVlZHMgdW5kZXIgU0NPIFVuaXggLyBPcGVuIERlc2t0b3AgLyBP cGVuU2VydmVyCisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09CisgIFRoaXJkIHBhcnR5IGRyaXZlcnMgKGludGVsbGlnZW50IHNlcmlhbCBi b2FyZHMpIG1heSBwcm92aWRlIGFueSBzcGVlZHMKKyAgdGhleSBkZXNpcmU7IG1vc3Qgc3VwcG9y dCB1cCB0byAxMTUuMkticHMuCisKKyAgU0NPJ3MgInNpbyIgZHJpdmVyLCB3aGljaCBpcyB1c2Vk IHRvIGRyaXZlIHN0YW5kYXJkIHNlcmlhbCBwb3J0cyB3aXRoCisgIDgyNTAvMTY0NTAvMTY1NTAg YW5kIHNpbWlsYXIgVUFSVHMsIHdhcyBsaW1pdGVkIHRvIDM4NDAwYnBzIGluIG9sZGVyCisgIHJl bGVhc2VzLiAgU3VwcG9ydCBmb3IgcmF0ZXMgdGhyb3VnaCAxMTUuMkticHMgd2FzIGFkZGVkIGlu IHRoZQorICBmb2xsb3dpbmcgcmVsZWFzZXM6CisKKyAgICBTQ08gT3BlblNlcnZlciBSZWxlYXNl IDUuMC4wIChyZXF1aXJlcyBzdXBwbGVtZW50ICJyczQwYiIpCisgICAgU0NPIE9wZW5TZXJ2ZXIg UmVsZWFzZSA1LjAuMiAocmVxdWlyZXMgc3VwcGxlbWVudCAicnM0MGEiIG9yICJyczQwYiIpCisg ICAgU0NPIE9wZW5TZXJ2ZXIgUmVsZWFzZSA1LjAuNCBvciBsYXRlcgorICAgIFNDTyBJbnRlcm5l dCBGYXN0U3RhcnQgUmVsZWFzZSAxLjAuMCBvciBsYXRlcgorCisgICBTQ08gc3VwcGxlbWVudHMg YXJlIGF0IFszOTVdZnRwOi8vZnRwLnNjby5jb20vOyB0aGUgInJzNDAiIHNlcmllcyBhcmUKKyAg IHVuZGVyIGRpcmVjdG9yeSAvU3VwcGxlbWVudHMvaW50ZXJuZXQKKworICAgS2VybWl0IGluY2x1 ZGVzIHRoZSBoaWdoIHNlcmlhbCBzcGVlZHMgaW4gYWxsIE9TUjUgYnVpbGRzLCBidXQgdGhhdAor ICAgZG9lcyBub3QgbmVjZXNzYXJpbHkgbWVhbiB0aGV5IHdvcmsuIEZvciBleGFtcGxlLCBvbiBv dXIgaW4taG91c2UgNS4wLjUKKyAgIHN5c3RlbSwgU0VUIFNQRUVEIDU3NjAwIG9yIGhpZ2hlciBz ZWVtcyB0byBzdWNjZWVkIChubyBlcnJvciBvY2N1cnMpCisgICBidXQgd2hlbiB3ZSByZWFkIHRo ZSBzcGVlZCBiYWNrIHRoZSBkcml2ZXIgc2F5cyBpdCBpcyA1MC4gU2ltaWxhcmx5LAorICAgNzY4 MDAgYmVjb21lcyA3NSwgYW5kIDExNTIwMCBiZWNvbWVzIDExMC4gVGVzdGluZyBzaG93cyB0aGUg cmVzdWx0aW5nCisgICBzcGVlZCBpcyBpbmRlZWQgdGhlIGxvdyBvbmUgd2UgcmVhZCBiYWNrLCBu b3QgdGhlIGhpZ2ggb25lIHdlIGFza2VkCisgICBmb3IuIE1vcmFsOiBVc2Ugc3BlZWRzIGhpZ2hl ciB0aGFuIDM4NDAwIHdpdGggY2F1dGlvbiBvbiBTQ08gT1NSNS4KKworICAgUmVwb3J0ZWRseSwg aWYgeW91IGhhdmUgYSBzY3JpcHQgdGhhdCBtYWtlcyBhIFRDUC9JUCBTRVQgSE9TVCAoZS5nLgor ICAgVGVsbmV0KSBjb25uZWN0aW9uIHRvIFNDTyAzLjJ2NC4yIHdpdGggVENQL0lQIDEuMi4xLCBh bmQgdGhlbiBkb2VzIHRoZQorICAgZm9sbG93aW5nOgorCisgIHNjcmlwdCAkIGV4aXQKKyAgaGFu Z3VwCisKKyAgIHRoaXMgY2F1c2VzIGEgcHNldWRvdGVybWluYWwgKHB0eSkgdG8gYmUgY29uc3Vt ZWQgb24gdGhlIFNDTyBzeXN0ZW07IGlmCisgICB5b3UgZG8gaXQgZW5vdWdoIHRpbWVzLCBpdCB3 aWxsIHJ1biBvdXQgb2YgcHR5cy4gQW4gImV4aXQiIGNvbW1hbmQgaXMKKyAgIGJlaW5nIHNlbnQg dG8gdGhlIFNDTyBzaGVsbCwgYW5kIGEgSEFOR1VQIGNvbW1hbmQgaXMgZXhlY3V0ZWQgbG9jYWxs eSwKKyAgIHNvIHRoZSBjaGFuY2VzIGFyZSBnb29kIHRoYXQgYm90aCBzaWRlcyBhcmUgdHJ5aW5n IHRvIGNsb3NlIHRoZQorICAgY29ubmVjdGlvbiBhdCBvbmNlLCBwZXJoYXBzIGluZHVjaW5nIGEg cmFjZSBjb25kaXRpb24gaW4gd2hpY2ggdGhlCisgICByZW1vdGUgcHR5IGlzIG5vdCByZWxlYXNl ZC4gSXQgd2FzIHNwZWN1bGF0ZWQgdGhhdCB0aGlzIHdvdWxkIGJlIGZpeGVkCisgICBieSBhcHBs eWluZyBTTFMgbmV0MzgyZSwgYnV0IGl0IGRpZCBub3QuIE1lYW53aGlsZSwgdGhlIHdvcmthcm91 bmQgaXMKKyAgIHRvIGluc2VydCBhICJwYXVzZSIgYmV0d2VlbiB0aGUgU0NSSVBUIGFuZCBIQU5H VVAgY29tbWFuZHMuIChUaGUKKyAgIHNpdHVhdGlvbiB3aXRoIGxhdGVyIFNDTyByZWxlYXNlcyBp cyBub3Qga25vd24uKQorCisgICBTQ08gVU5JWCBhbmQgT3BlblNlcnZlciBhbGxvdyB0aGVpciBj b25zb2xlIGFuZC9vciB0ZXJtaW5hbCBkcml2ZXJzIHRvCisgICBiZSBjb25maWd1cmVkIHRvIHRy YW5zbGF0ZSBjaGFyYWN0ZXIgc2V0cyBmb3IgeW91LiBET04nVCBETyBUSElTIFdIRU4KKyAgIFVT SU5HIEtFUk1JVCEgRmlyc3Qgb2YgYWxsLCB5b3UgZG9uJ3QgbmVlZCBpdCAtLSBLZXJtaXQgaXRz ZWxmIGFscmVhZHkKKyAgIGRvZXMgdGhpcyBmb3IgeW91LiBBbmQgc2Vjb25kLCBpdCB3aWxsIChh KSBwcm9iYWJseSBydWluIHRoZSBmb3JtYXR0aW5nCisgICBvZiB5b3VyIHNjcmVlbnMgKGRlcGVu ZGluZyBvbiB3aGljaCBlbXVsYXRpb24geW91IGFyZSB1c2luZyk7IGFuZCAoYikKKyAgIGludGVy ZmVyZSB3aXRoIGFsbCBzb3J0cyBvZiBvdGhlciB0aGluZ3MgLS0gbGVnaWJpbGl0eSBvZiBub24t QVNDSUkKKyAgIHRleHQgb24gdGhlIHRlcm1pbmFsIHNjcmVlbiwgZmlsZSB0cmFuc2ZlciwgZXRj LiBVc2U6CisKKyAgbWFwY2hhbiAtbgorCisgICB0byB0dXJuIG9mZiB0aGlzIGZlYXR1cmUuCisK KyAgIE5vdGUgdGhhdCB0aGVyZSBpcyBhIG11bHRpdHVkZSBvZiBTQ08gZW50cmllcyBpbiB0aGUg bWFrZWZpbGUsIG1hbnkgb2YKKyAgIHRoZW0gZXhoaWJpdGluZyBhbiB1bnVzdWFsbHkgbGFyZ2Ug bnVtYmVyIG9mIGNvbXBpbGVyIG9wdGlvbnMuIFNvbWUKKyAgIHBlb3BsZSBhY3R1YWxseSB1bmRl cnN0YW5kIGFsbCBvZiB0aGlzLiBSZXBvcnRlZGx5LCB0aGluZ3MgYXJlIHNldHRsaW5nCisgICBk b3duIHdpdGggU0NPIE9wZW5TZXJ2ZXIgNS54IGFuZCBVbml4d2FyZSA3IChhbmQgT3BlbiBVTklY IDggYW5kIHdobworICAga25vd3Mgd2hhdCB0aGUgbmV4dCBvbmUgd2lsbCBiZSAtLSBMaW51eCBw cm9iYWJseSkgLS0gdGhlIFNDTyBVREsKKyAgIGNvbXBpbGVyIGlzIHNhaWQgdG8gZ2VuZXJhdGUg YmluYXJpZXMgdGhhdCB3aWxsIHJ1biBvbiBlaXRoZXIgcGxhdGZvcm0sCisgICBieSBkZWZhdWx0 LCBhdXRvbWF0aWNhbGx5LiBXaGVuIHVzaW5nIGdjYyBvciBlZ2NzLCBvbiB0aGUgb3RoZXIgaGFu ZCwKKyAgIGRpZmZlcmVuY2VzIHBlcnNpc3QsIHBsdXMgaXNzdWVzIHJlZ2FyZGluZyB0aGUgdHlw ZSBvZiBiaW5hcnkgdGhhdCBpcworICAgZ2VuZXJhdGVkIChDT0ZGLCBFTEYsIGV0YyksIGFuZCB3 aGVyZSBhbmQgaG93IGl0IGNhbiBydW4uIEFsbCBvZiB0aGlzCisgICBjb3VsZCBzdGFuZCBmdXJ0 aGVyIGNsYXJpZmljYXRpb24gYnkgU0NPIGV4cGVydHMuCisKKzMuNi4zLiBVbml4d2FyZQorCisg ICBbIFszOTZdVG9wIF0gWyBbMzk3XUNvbnRlbnRzIF0gWyBbMzk4XVNlY3Rpb24gQ29udGVudHMg XSBbIFszOTldTmV4dCBdCisgICBbIFs0MDBdUHJldmlvdXMgXQorCisgICBVbml4d2FyZSBjaGFu Z2VkIGhhbmRzIHNldmVyYWwgdGltZXMgYmVmb3JlIGxhbmRpbmcgYXQgU0NPLCBhbmQgc28gaGFz CisgICBpdHMgWzQwMV1vd24gc2VjdGlvbiBpbiB0aGlzIGRvY3VtZW50LiAoQnJpZWZseTogQVQm VCBVTklYIFN5c3RlbXMKKyAgIExhYm9yYXRvcmllcyBzb2xkIHRoZSByaWdodHMgdG8gdGhlIFVO SVggbmFtZSBhbmQgdG8gU3lzdGVtIFYgUjQgKG9yCisgICBSNT8pIHRvIE5vdmVsbDsgbGF0ZXIg Tm92ZWxsIHNwdW4gaXRzIFVOSVggZGl2aXNpb24gb2ZmIGludG8gYSBuZXcKKyAgIGNvbXBhbnkg Y2FsbGVkIFVuaXZlbCwgd2hpY2ggZXZlbnR1YWxseSB3YXMgYm91Z2h0IGJ5IFNDTywgd2hpY2gg bGF0ZXIKKyAgIHdhcyBib3VnaHQgYnkgQ2FsZGVyYSwgd2hpY2ggbGF0ZXIgc29ydCBvZiBzZW1p LXNwdW4tb2ZmIFNDTy4uLikKKworMy42LjQuIE9wZW4gVU5JWCA4CisKKyAgIFsgWzQwMl1Ub3Ag XSBbIFs0MDNdQ29udGVudHMgXSBbIFs0MDRdU2VjdGlvbiBDb250ZW50cyBdIFsKKyAgIFs0MDVd UHJldmlvdXMgXQorCisgICBTQ08gd2FzIGJvdWdodCBieSBDYWxkZXJhIGluIDIwMDAgb3IgMjAw MSBhbmQgZXZvbHZlZCBVbml4d2FyZSA3LjEgaW50bworICAgQ2FsZGVyYSBPcGVuIFVOSVggOC4w MC4gSXQncyBqdXN0IGxpa2UgVW5peHdhcmUgNy4xIGFzIGZhciBhcyBLZXJtaXQgaXMKKyAgIGNv bmNlcm5lZCAodGhlIFVuaXh3YXJlIDcuMSBtYWtlZmlsZSB0YXJnZXQgd29ya3MgZm9yIE9wZW4g VU5JWCA4LjAwLAorICAgYW5kIGluIGZhY3QgYSBVbml4d2FyZSA3LjEgS2VybWl0IGJpbmFyeSBi dWlsdCBvbiBVbml4d2FyZSA3LjEgcnVucworICAgdW5kZXIgT1U4OyBhIHNlcGFyYXRlIE9VOCBt YWtlZmlsZSB0YXJnZXQgZXhpc3RzIHNpbXBseSB0byBnZW5lcmF0ZSBhbgorICAgYXBwcm9wcmlh dGUgcHJvZ3JhbSBzdGFydHVwIGhlcmFsZCkuIE9wZW4gVW5peCBpcyBub3cgZGVmdW5jdDsKKyAg IHN1YnNlcXVlbnQgcmVsZWFzZXMgYXJlIGNhbGxlZCBVbml4V2FyZSBhZ2FpbiAoZS5nLiBVbml4 V2FyZSA3LjEuMykuCisKKzMuNy4gQy1LRVJNSVQgQU5EIFNPTEFSSVMKKworICAgWyBbNDA2XVRv cCBdIFsgWzQwN11Db250ZW50cyBdIFsgWzQwOF1TZWN0aW9uIENvbnRlbnRzIF0gWyBbNDA5XU5l eHQgXQorICAgWyBbNDEwXVByZXZpb3VzIF0KKworICAgU0VDVElPTiBDT05URU5UUworCiszLjcu MS4gWzQxMV1TZXJpYWwgUG9ydCBDb25maWd1cmF0aW9uCiszLjcuMi4gWzQxMl1TZXJpYWwgUG9y dCBQcm9ibGVtcworMy43LjMuIFs0MTNdU3VuTGluayBYLjI1CiszLjcuNC4gWzQxNF1TdW4gV29y a3N0YXRpb24gS2V5Ym9hcmQgTWFwcGluZworMy43LjUuIFs0MTVdU29sYXJpcyAyLjQgYW5kIEVh cmxpZXIKKworICAgUkVGRVJFTkNFUworCisgICAgICogVGhlIFs0MTZdY29tcC51bml4LnNvbGFy aXMgbmV3c2dyb3VwCisgICAgICogWzQxN11odHRwOi8vYWNjZXNzMS5zdW4uY29tLworICAgICAq IFs0MThdaHR0cDovL2RvY3Muc3VuLmNvbS8KKyAgICAgKiBbNDE5XWh0dHA6Ly93d3cuc3VuaGVs cC5jb20vCisgICAgICogWzQyMF1odHRwOi8vd3d3LndpbnMudXZhLm5sL3B1Yi9zb2xhcmlzL3Nv bGFyaXMyLworICAgICAqIFs0MjFdaHR0cDovL3d3dy53aW5zLnV2YS5ubC9jZ2ktYmluL3NmYXEu Y2dpCisgICAgICogWzQyMl1mdHA6Ly9mdHAud2lucy51dmEubmwvcHViL3NvbGFyaXMKKyAgICAg KiBbNDIzXWh0dHA6Ly93d3cuc2NpZW5jZS51dmEubmwvcHViL3NvbGFyaXMvc29sYXJpczIuaHRt bAorCisgICBBbmQgYWJvdXQgc2VyaWFsIGNvbW11bmljYXRpb25zIGluIHBhcnRpY3VsYXIsIHNl ZSAiQ2VsZXN0ZSdzIFR1dG9yaWFsCisgICBvbiBTb2xhcmlzIDIueCBNb2RlbXMgYW5kIFRlcm1p bmFscyI6CisKKyAgWzQyNF1odHRwOi8vd3d3LnN0b2tlbHkuY29tLworCisgICBJbiBwYXJ0aWN1 bGFyOgorCisgIFs0MjVdaHR0cDovL3d3dy5zdG9rZWx5LmNvbS91bml4LnN5c2FkbS5yZXNvdXJj ZXMvZmFxcy5zdW4uaHRtbAorCisgICBGb3IgUEMtYmFzZWQgU29sYXJpcywgYWxzbyBzZWUgZ2Vu ZXJhbCBjb21tZW50cyBvbiBQQy1iYXNlZCBVbml4ZXMgaW4KKyAgIFs0MjZdU2VjdGlvbiAzLjAu IERvbid0IGV4cGVjdCBTb2xhcmlzIG9yIGFueSBvdGhlciBraW5kIG9mIFVuaXggdG8KKyAgIHdv cmsgcmlnaHQgb24gYSBQQyB1bnRpbCB5b3UgcmVzb2x2ZSBhbGwgaW50ZXJydXB0IGNvbmZsaWN0 cy4gRG9uJ3QKKyAgIGV4cGVjdCB0byBiZSBhYmxlIHRvIHVzZSBDT00zIG9yIENPTTQgKG9yIGV2 ZW4gQ09NMikgdW50aWwgeW91IGhhdmUKKyAgIGNvbmZpZ3VyZWQgdGhlaXIgYWRkcmVzc2VzIGFu ZCBpbnRlcnJ1cHRzLgorCiszLjcuMS4gU2VyaWFsIFBvcnQgQ29uZmlndXJhdGlvbgorCisgICBb IFs0MjddVG9wIF0gWyBbNDI4XUNvbnRlbnRzIF0gWyBbNDI5XVNlY3Rpb24gQ29udGVudHMgXSBb IFs0MzBdU2VjdGlvbgorICAgQ29udGVudHMgXSBbIFs0MzFdTmV4dCBdCisKKyAgIFlvdXIgc2Vy aWFsIHBvcnQgY2FuJ3QgYmUgdXNlZCAtLSBvciBhdCBsZWFzdCB3b24ndCB3b3JrIHJpZ2h0IC0t IHVudGlsCisgICBpdCBpcyBlbmFibGVkIGluIFNvbGFyaXMuIEZvciBleGFtcGxlLCB5b3UgZ2V0 IGEgbWVzc2FnZSBsaWtlICJTRVJJQUw6CisgICBPcGVyYXRpb24gd291bGQgYmxvY2siIHdoZW4g YXR0ZW1wdGluZyB0byBkaWFsLiBUaGlzIHByb2JhYmx5IGluZGljYXRlcworICAgdGhhdCB0aGUg c2VyaWFsIHBvcnQgaGFzIG5vdCBiZWVuIGVuYWJsZWQgZm9yIHVzZSB3aXRoIG1vZGVtcy4gWW91 J2xsCisgICBuZWVkIHRvIGZvbGxvdyB0aGUgaW5zdHJ1Y3Rpb25zIGluIHlvdXIgc3lzdGVtIHNl dHVwIG9yIG1hbmFnZW1lbnQKKyAgIG1hbnVhbCwgc3VjaCBhcyAoZS5nLikgdGhlIERlc2t0b3Ag U1BBUkMgU3VuIFN5c3RlbSAmIE5ldHdvcmsgTWFuYWdlcidzCisgICBHdWlkZSwgd2hpY2ggc2hv dWxkIGNvbnRhaW4gYSBzZWN0aW9uICJTZXR0aW5nIHVwIE1vZGVtIFNvZnR3YXJlIjsgcmVhZAor ICAgaXQgYW5kIGZvbGxvdyB0aGUgaW5zdHJ1Y3Rpb25zLiBUaGVzZSBtaWdodCAob3IgbWlnaHQg bm90KSBpbmNsdWRlCisgICBydW5uaW5nIGEgcHJvZ3JhbSBjYWxsZWQgImVlcHJvbSIsIGVkaXRp bmcgc29tZSBzeXN0ZW0gY29uZmlndXJhdGlvbgorICAgZmlsZSAoc3VjaCBhcywgZm9yIGV4YW1w bGU6CisKKyAgL3BsYXRmb3JtL2k4NnBjL2tlcm5lbC9kcnYvYXN5LmNvbmYKKworICAgYW5kIHRo ZW4gZG9pbmcgYSBjb25maWd1cmF0aW9uIHJlYm9vdCwgb3IgcnVubmluZyBzb21lIG90aGVyIHBy b2dyYW1zCisgICBsaWtlIGRydmNvbmZpZyBhbmQgZGV2bGlua3MuICJtYW4gZWVwcm9tIiBmb3Ig ZGV0YWlscy4KKworICAgQWxzbywgb24gY2VydGFpbiBTdW4gbW9kZWxzIGxpa2UgSVBDLCB0aGUg c2VyaWFsIHBvcnQgaGFyZHdhcmUgbWlnaHQKKyAgIG5lZWQgdG8gaGF2ZSBhIGp1bXBlciBjaGFu Z2VkIHRvIG1ha2UgaXQgYW4gUlMtMjMyIHBvcnQgcmF0aGVyIHRoYW4KKyAgIFJTLTQyMy4KKwor ICAgZWVwcm9tIGFwcGxpZXMgb25seSB0byByZWFsIHNlcmlhbCBwb3J0cywgbm90IHRvICJTcGlm ZiIgZGV2aWNlcworICAgKHNlcmlhbCBwb3J0IGV4cGFuZGVyKSwgaW4gd2hpY2ggY2FzZSBzZXR1 cCB3aXRoIFNvbGFyaXMnIGFkbWludG9vbCBpcworICAgcmVxdWlyZWQuCisKKyAgIEFub3RoZXIg Y29tbWFuZCB5b3UgbWlnaHQgbmVlZCB0byB1c2UgaXMgcG1hZG0sIGUuZy46CisKKyAgcG1hZG0g LWQgLXAgenNtb24gLXMgdHR5MworICBwbWFkbSAtZSAtcCB6c21vbiAtcyB0dHkzCisKKyAgIFlv dSBjYW4gdXNlIHRoZSBmb2xsb3dpbmcgY29tbWFuZCB0byBjaGVjayBpZiBhIHByb2Nlc3MgaGFz IHRoZSBkZXZpY2UKKyAgIG9wZW46CisKKyAgZnVzZXIgLWYgL2Rldi90ZXJtLzMKKworICAgSW4g c29tZSBjYXNlcywgaG93ZXZlciAoYWNjb3JkaW5nIHRvIFN1biBzdXBwb3J0LCBNYXkgMjAwMSkg Ikl0IGlzCisgICBzdGlsbCBwb3NzaWJsZSB0aGF0IGEgem9tYmllIHByb2Nlc3MgaGFzIGhvbGQg b2YgdGhlIHBvcnQgRVZFTiBJRiB0aGVyZQorICAgaXMgbm8gbG9jayBmaWxlIGFuZCB0aGUgZnVz ZXIgY29tbWFuZCBjb21lcyB1cCBlbXB0eS4gSW4gdGhhdCBjYXNlLCB0aGUKKyAgIG9ubHkgd2F5 IHRvIHJlc29sdmUgdGhlIHByb2JsZW0gaXMgYnkgcmVib290aW5nLiIKKworICAgSWYgeW91IGNh bid0IGVzdGFibGlzaCBjb21tdW5pY2F0aW9uIHRocm91Z2ggYSBzZXJpYWwgcG9ydCB0byBhIGRl dmljZQorICAgdGhhdCBpcyBub3QgYXNzZXJ0aW5nIENEIChDYXJyaWVyIERldGVjdCksIHRyeSBz ZXR0aW5nIHRoZSBlbnZpcm9ubWVudAorICAgdmFyaWFibGUgInR0eWEtaWdub3JlLWNkIiB0byAi dHJ1ZSIgKHJlcGxhY2UgInR0eWEiIHdpdGggdGhlIHBvcnQKKyAgIG5hbWUpLgorCiszLjcuMi4g U2VyaWFsIFBvcnQgUHJvYmxlbXMKKworICAgWyBbNDMyXVRvcCBdIFsgWzQzM11Db250ZW50cyBd IFsgWzQzNF1TZWN0aW9uIENvbnRlbnRzIF0gWyBbNDM1XU5leHQgXQorICAgWyBbNDM2XVByZXZp b3VzIF0KKworICAgQ3VycmVudCBhZHZpY2UgZnJvbSBTdW4gaXMgdG8gYWx3YXlzIHRoZSAvZGV2 L2N1YS94IGRldmljZXMgZm9yIGRpYWxpbmcKKyAgIG91dCwgcmF0aGVyIHRoYW4gdGhlIC9kZXYv dGVybS94LiBOZXZlcnRoZWxlc3MsIGlmIHlvdSBoYXZlIHRyb3VibGUKKyAgIGRpYWxpbmcgb3V0 IHdpdGggb25lLCB0cnkgdGhlIG90aGVyLgorCisgICBSZXBvcnRlZGx5LCBpZiB5b3Ugc3RhcnQg Qy1LZXJtaXQgYW5kICJzZXQgbGluZSIgdG8gYSBwb3J0IHRoYXQgaGFzIGEKKyAgIG1vZGVtIGNv bm5lY3RlZCB0byBpdCB0aGF0IGlzIG5vdCB0dXJuZWQgb24sIGFuZCB0aGVuICJzZXQgZmxvdwor ICAgcnRzL2N0cyIsIHRoZXJlIG1pZ2h0IGJlIHNvbWUgKHVuc3BlY2lmaWVkKSBkaWZmaWN1bHRp ZXMgY2xvc2luZyB0aGUKKyAgIGRldmljZSBiZWNhdXNlIHRoZSBDVFMgc2lnbmFsIGlzIG5vdCBj b21pbmcgaW4gZnJvbSB0aGUgbW9kZW0uCisKKzMuNy4zLiBTdW5MaW5rIFguMjUKKworICAgWyBb NDM3XVRvcCBdIFsgWzQzOF1Db250ZW50cyBdIFsgWzQzOV1TZWN0aW9uIENvbnRlbnRzIF0gWyBb NDQwXU5leHQgXQorICAgWyBbNDQxXVByZXZpb3VzIF0KKworICAgVGhlIGJ1aWx0LWluIFN1bkxp bmsgWC4yNSBzdXBwb3J0IGZvciBTb2xhcmlzIDIuMy8yLjQuLzI1IGFuZCBTdW5MaW5rCisgICA4 LjAxIG9yIDkuMDAgd29ya3MgT0sgcHJvdmlkZWQgdGhlIFguMjUgc3lzdGVtIGhhcyBiZWVuIGlu c3RhbGxlZCBhbmQKKyAgIGluaXRpYWxpemVkIHByb3Blcmx5LiBQYWNrZXQgc2l6ZXMgbWlnaHQg bmVlZCB0byBiZSByZWR1Y2VkIHRvIDI1NiwKKyAgIG1heWJlIGV2ZW4gbGVzcywgZGVwZW5kaW5n IG9uIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBYLjI1CisgICBpbnN0YWxsYXRpb24uIE9uIG9u ZSBjb25uZWN0aW9uIHdoZXJlIEMtS2VybWl0IDYuMCB3YXMgdGVzdGVkLCB2ZXJ5CisgICBsYXJn ZSBwYWNrZXRzIGFuZCB3aW5kb3cgc2l6ZXMgY291bGQgYmUgdXNlZCBpbiBvbmUgZGlyZWN0aW9u LCBidXQgb25seQorICAgdmVyeSBzbWFsbCBvbmVzIHdvdWxkIHdvcmsgaW4gdGhlIG90aGVyLgor CisgICBJbiBhbnkgY2FzZSwgYWNjb3JkaW5nIHRvIFN1biwgQy1LZXJtaXQncyBYLjI1IHN1cHBv cnQgaXMgc3VwZXJmbHVvdXMKKyAgIHdpdGggU3VuTGluayA4LnggLyBTb2xhcmlzIDIuMy4gUXVv dGluZyBhbiBhbm9ueW1vdXMgU3VuIGVuZ2luZWVyOgorCisgICAgIC4uLiB0aGVyZSBpcyBub3cg bm8gbmVlZCB0byBpbmNsdWRlIGFueSBYLjI1IGNvZGUgd2l0aGluIGtlcm1pdC4gQXMKKyAgICAg b2YgWC4yNSA4LjAuMSB3ZSBzdXBwb3J0IHRoZSB1c2Ugb2Yga2VybWl0LCB1dWNwIGFuZCBzaW1p bGFyCisgICAgIHByb3RvY29scyBvdmVyIGRldmljZXMgb2YgdHlwZSAvZGV2L3h0eS4gVGhpcyBm YWNpbGl0eSB3YXMgdGhlcmUgaW4KKyAgICAgOC4wLCBhbmQgc2hvdWxkIGFsc28gd29yayBvbiB0 aGUgOC4wIHJlbGVhc2UgaWYgcGF0Y2ggMTAxNTI0IGlzCisgICAgIGFwcGxpZWQsIGJ1dCBJJ20g bm90IDEwMCUgc3VyZSBpdCB3aWxsIHdvcmsgaW4gYWxsIGNhc2VzLCB3aGljaCBpcworICAgICB3 aHkgd2Ugb25seSBjbGFpbSBzdXBwb3J0IGZyb20gOC4wLjEgb253YXJkcy4KKworICAgICBXaGVu IGNvbmZpZ3VyaW5nIFguMjUsIG9uIHRoZSAiQWR2YW5jZWQgQ29uZmlndXJhdGlvbi0+UGFyYW1l dGVycyIKKyAgICAgc2NyZWVuIG9mIHRoZSB4MjV0b29sIHlvdSBjYW4gc2VsZWN0IGEgbnVtYmVy IG9mIFhUWSBkZXZpY2VzLiBJZiB5b3UKKyAgICAgc2V0IHRoaXMgdG8gYmUgPiAxLCBwcmVzcyBB cHBseSwgYW5kIHJlYm9vdCwgeW91IHdpbGwgZ2V0IGEgbnVtYmVyCisgICAgIG9mIC9kZXYveHR5 IGVudHJpZXMgY3JlYXRlZC4KKworICAgICBJZ25vcmUgL2Rldi94dHkwLCBpdCBpcyBhIHNwZWNp YWwgY2FzZS4gQWxsIHRoZSBvdGhlcnMgY2FuIGJlIHVzZWQKKyAgICAgZXhhY3RseSBhcyBpZiB0 aGV5IHdlcmUgYSBzZXJpYWwgbGluZSAoZS5nLiAvZGV2L3R0eSkgY29ubmVjdGVkIHRvIGEKKyAg ICAgbW9kZW0sIGV4Y2VwdCB0aGF0IGluc3RlYWQgb2YgdXNpbmcgSGF5ZXMtc3R5bGUgY29tbWFu ZHMsIHlvdSB1c2UKKyAgICAgUEFEIGNvbW1hbmRzLgorCisgICAgIEZyb20ga2VybWl0IHlvdSBj YW4gZG8gYSAnc2V0IGxpbmUnIGNvbW1hbmQgdG8sIHNheSwgL2Rldi94dHkxLCB0aGVuCisgICAg IHNldCB5b3VyIGRpYWxpbmcgY29tbWFuZCB0byBiZSAiQ0FMTCAxMjM0NTY3OCIsIGV0Yy4gQWxs IHRoZSB1c3VhbAorICAgICBQQUQgY29tbWFuZHMgd2lsbCB3b3JrIChTRVQsIFBBUiwgZXRjKS4K KworICAgICBJIGtub3cgb2Ygb25lIGN1c3RvbWVyIGluIEF1c3RyYWxpYSB3aG8gaXMgc3VjY2Vz c2Z1bGx5IHVzaW5nIHRoaXMsCisgICAgIHdpdGgga2VybWl0IHNjcmlwdHMsIHRvIG1hbmFnZSBz b21lIFguMjUtY29ubmVjdGVkIHN3aXRjaGVzLiBIZSB1c2VkCisgICAgIHN0YW5kYXJkIGtlcm1p dCwgY29tcGlsZWQgZm9yIFNvbGFyaXMgMiwgd2l0aCBYLjI1IDguMCB4dHkgZGV2aWNlcy4KKwor My43LjQuIFN1biBXb3Jrc3RhdGlvbiBLZXlib2FyZCBNYXBwaW5nCisKKyAgIFsgWzQ0Ml1Ub3Ag XSBbIFs0NDNdQ29udGVudHMgXSBbIFs0NDRdU2VjdGlvbiBDb250ZW50cyBdIFsgWzQ0NV1OZXh0 IF0KKyAgIFsgWzQ0Nl1QcmV2aW91cyBdCisKKyAgIEhpbnRzIGZvciB1c2luZyBhIFN1biB3b3Jr c3RhdGlvbiBrZXlib2FyZCBmb3IgVlQgZW11bGF0aW9uIHdoZW4KKyAgIGFjY2Vzc2luZyBWTVMs IGZyb20gdGhlIFs0NDddY29tcC5vcy52bXMgbmV3c2dyb3VwOgorCisgICAgIEZyb206IEplcnJ5 IExlaWNodGVyIDxsZWljaHRlckBzbWFydHMuY29tPgorICAgICBOZXdzZ3JvdXBzOiBjb21wLm9z LnZtcworICAgICBTdWJqZWN0OiBSZTogVlQxMDAga2V5Ym9hcmQgbWFwcGluZyB0byBTdW4gWCBz ZXJ2ZXIKKyAgICAgRGF0ZTogTW9uLCAxOSBBdWcgMTk5NiAxMjo0NDoyMSAtMDQwMAorCisgICAg ID4gSSBhbSBzdHVjayByaWdodCBub3cgdXNpbmcgYSBTdW4ga2V5Ym9hcmQgKHR5cGUgNSkgb24g c3lzdGVtcworICAgICBydW5uaW5nIFN1bk9TCisgICAgID4gYW5kIFNvbGFyaXMuIEkgd291bGQg bGlrZSB0byB1c2UgRVZFIG9uIGFuIE9wZW5WTVMgYm94IHdpdGgKKyAgICAgZGlzcGxheSBiYWNr IHRvCisgICAgID4gdGhlIFN1bi4gRG9lcyBhbnlvbmUga25vdyBvZiBhIGtleWJvYXJkIG1hcHBp bmcgKG9yIHNvbWUgb3RoZXIKKyAgICAgcHJvY2VkdXJlKQorICAgICA+IHdoaWNoIHdpbGwgYWxs b3cgdGhlIFN1biBrZXlib2FyZCB0byBhcHByb3hpbWF0ZSBhIFZUMTAwL1ZUMjIwPworCisgICAg IFlvdSBjYW4ndCBnZXQgaXQgZXhhY3RseSAtIGJlY2F1c2UgdGhlIGtleXBhZCBoYXMgb25lIGZl d2VyIGtleSAtCisgICAgIGJ1dCB5b3UgY2FuIGNvbWUgcHJldHR5IGNsb3NlLiBIZXJlJ3MgYSBz ZXQgb2Yga2V5ZGVmcyBJIHVzZToKKworICBrZXljb2RlIDEwMT1LUF8wCisgIGtleWNvZGUgMTE5 PUtQXzEKKyAga2V5Y29kZSAxMjA9S1BfMgorICBrZXljb2RlIDEyMT1LUF8zCisgIGtleWNvZGUg OTg9S1BfNAorICBrZXljb2RlIDk5PUtQXzUKKyAga2V5Y29kZSAxMDA9S1BfNgorICBrZXljb2Rl IDc1PUtQXzcKKyAga2V5Y29kZSA3Nj1LUF84CisgIGtleWNvZGUgNzc9S1BfOQorICBrZXljb2Rl IDUyPUtQX0YxCisgIGtleWNvZGUgNTM9S1BfRjIKKyAga2V5Y29kZSA1ND1LUF9GMworICBrZXlj b2RlIDU3PUtQX0RlY2ltYWwKKyAga2V5Y29kZSAyOD1MZWZ0CisgIGtleWNvZGUgMjk9UmlnaHQK KyAga2V5Y29kZSAzMD1LUF9TZXBhcmF0b3IKKyAga2V5Y29kZSAxMDU9S1BfRjQKKyAga2V5Y29k ZSA3OD1LUF9TdWJ0cmFjdAorICBrZXljb2RlIDg9TGVmdAorICBrZXljb2RlIDEwPVJpZ2h0Cisg IGtleWNvZGUgMzI9VXAKKyAga2V5Y29kZSAzMz1Eb3duCisgIGtleWNvZGUgOTc9S1BfRW50ZXIK KworICAgICBQdXQgdGhpcyBpbiBhIGZpbGUgLSBJIHVzZSAia2V5ZGVmcyIgaW4gbXkgaG9tZSBk aXJlY3RvcnkgYW5kIGZlZWQKKyAgICAgaXQgaW50byB4bW9kbWFwOgorCisgIHhtb2RtYXAgLSA8 JEhPTUUva2V5ZGVmcworCisgICAgIFRoaXMgdGFrZXMgY2FyZSBvZiB0aGUgYXJyb3cga2V5cyBh bmQgdGhlICJjYWxjdWxhdG9yIiBrZXkgY2x1c3Rlci4KKyAgICAgVGhlICIrIiBrZXkgd2lsbCBw bGF5IHRoZSByb2xlIG9mIHRoZSBERUMgIiwiIGtleS4gVGhlIFN1biAiLSIga2V5CisgICAgIHdp bGwgYmUgbGlrZSB0aGUgREVDICItIiBrZXksIHRob3VnaCBpdCdzIGluIGEgcGh5c2ljYWxseSBk aWZmZXJlbnQKKyAgICAgcG9zaXRpb24gLSB3aGVyZSB0aGUgREVDIFBGNCBrZXkgaXMuIFRoZSBQ RjQga2V5IGlzIC4uLiBkYW1uLCBJJ20KKyAgICAgbm90IHN1cmUgd2hlcmUgImtleSAxMDUiIGlz LiBJICp0aGluayogaXQgbWF5IGJlIG9uIHRoZSBsZWZ0bW9zdCBrZXkKKyAgICAgb2YgdGhlIGdy b3VwIG9mIGZvdXIganVzdCBhYm92ZSB0aGUgImNhbGN1bGF0b3IiIGtleSBjbHVzdGVyLgorCisg ICAgIEkgYWxzbyBleGVjdXRlIHRoZSBmb2xsb3dpbmcgKHRoaXMgaXMgYWxsIGluIG15IHhpbml0 cmMgZmlsZSk6CisKKyAgeG1vZG1hcCAtZSAna2V5c3ltIEtQX0RlY2ltYWwgPSBLUF9EZWNpbWFs JworICB4bW9kbWFwIC1lICdrZXlzeW0gQmFja1NwYWNlID0gRGVsZXRlIEJhY2tTcGFjZScgXAor ICAgICAgICAgIC1lICdrZXlzeW0gRGVsZXRlID0gQmFja1NwYWNlIERlbGV0ZScKKyAgeG1vZG1h cCAtZSAna2V5c3ltIEtQX0RlY2ltYWwgPSBEZWxldGUgRGVsZXRlIEtQX0RlY2ltYWwnCisgIHht b2RtYXAgLWUgJ2FkZCBtb2QxID0gTWV0YV9SJworICB4bW9kbWFwIC1lICdhZGQgbW9kMSA9IE1l dGFfTCcKKworICAgICBCZXdhcmUgb2Ygb25lIHRoaW5nIGFib3V0IHhtb2RtYXA6IEtleW1hcCBj aGFuZ2VzIGFyZSBhcHBsaWVkIHRvIHRoZQorICAgICAqd2hvbGUgd29ya3N0YXRpb24qLCBub3Qg anVzdCB0byBpbmRpdmlkdWFsIHdpbmRvd3MuIFRoZXJlIGlzLCBpbgorICAgICBmYWN0LCBubyB3 YXkgSSBrbm93IG9mIHRvIGFwcGx5IHRoZW0gdG8gaW5kaXZpZHVhbCB3aW5kb3dzLiBUaGVzZQor ICAgICBkZWZpbml0aW9ucyAqbWF5KiBjb25mdXNlIHNvbWUgVW5peCBwcm9ncmFtcyAoYW5kL29y IHNvbWUgVW5peAorICAgICB1c2VycykuCisKKyAgICAgSWYgeW91J3JlIHVzaW5nIE1vdGlmLCB5 b3UgbWF5IGFsc28gbmVlZCB0byBhcHBseSBiaW5kaW5ncyBhdCB0aGUKKyAgICAgTW90aWYgbGV2 ZWwuIElmIGp1c3QgdXNpbmcgeG1vZG1hcCBkb2Vzbid0IHdvcmssIEkgY2FuIHRyeSBhbmQgZGln CisgICAgIHRoYXQgc3R1ZmYgdXAgZm9yIHlvdS4KKworMy43LjUuIFNvbGFyaXMgUFBQIENvbm5l Y3Rpb25zCisKKyAgIFsgWzQ0OF1Ub3AgXSBbIFs0NDldQ29udGVudHMgXSBbIFs0NTBdU2VjdGlv biBDb250ZW50cyBdIFsgWzQ1MV1OZXh0IF0KKyAgIFsgWzQ1Ml1QcmV2aW91cyBdCisKKyAgIFRo ZSBmb2xsb3dpbmcgaXMgYSByZXBvcnQgZnJvbSBhIHVzZXIgb2YgQy1LZXJtaXQgOC4wIG9uIFNv bGFyaXMgOCBhbmQKKyAgIDksIHdobyBoYWQgY29tcGxhaW5lZCB0aGF0IHdoaWxlIEtlcm1pdCBm aWxlIHRyYW5zZmVycyB3b3JrZWQgcGVyZmVjdGx5CisgICBvbiBkaXJlY3QgKG5vbi1QUFApIGRp YWxvdXQgY29ubmVjdGlvbnMsIHRoZXkgZmFpbGVkIG1pc2VyYWJseSBvbiBQUFAKKyAgIGNvbm5l Y3Rpb25zLiBXZSBzdWdnZXN0ZWQgdGhhdCB0aGUgUFBQIGRpYWxlciBwcm9iYWJseSB3YXMgbm90 IHNldHRpbmcKKyAgIHRoZSBwb3J0IGFuZC9vciBtb2RlbSB1cCBpbiB0aGUgc2FtZSB3YXkgdGhh dCBLZXJtaXQgZGlkOgorCisgICAgIEkgd2FudCB0byBnZXQgYmFjayBvbiB0aGlzIGFuZCB0ZWxs IHlvdSB3aGF0IHRoZSByZXNvbHV0aW9uIHdhcy4gWW91CisgICAgIHBvaW50ZWQgbWUgaW4gdGhl IGRpcmVjdGlvbiBvZiBmbG93IGNvbnRyb2wsIHdoaWNoIHR1cm5lZCBvdXQgdG8gYmUKKyAgICAg dGhlIGtleS4KKworICAgICBTb21lIGRpc2N1c3Npb24gb24gdGhlIGNvbXAudW5peC5zb2xhcmlz IG5ld3Nncm91cCBsZWQgdG8gc29tZQorICAgICBjb21tZW50cyBmcm9tIEdyZWcgQW5kcmV3cyBh Ym91dCB0aGUgbmVlZCB0byB1c2UgdGhlIHV1Y3AgZHJpdmVyIHRvCisgICAgIHRhbGsgdG8gdGhl IG1vZGVtICgvZGV2L2N1YS9hKS4gSSBoYWQgdG8gcmVtaW5kIEdyZWcgdGhhdCBubyBtYXR0ZXIK KyAgICAgd2hhdCB0aGUgbWFucGFnZXMgZm9yIHRoZSB6cyBhbmQgc2UgZHJpdmVycyBzYXksIHRo ZSBwcHAgdGhhdCBTdW4KKyAgICAgcmVsZWFzZWQgd2l0aCBTb2xhcmlzIDggNy8wMSwgYW5kIGhh cyBpbiBTb2xhcmlzIDksIGlzIGEgc2V0dWlkIHJvb3QKKyAgICAgcHJvZ3JhbSwgYW5kIHNpbXBs eSB0cnlpbmcgdG8gbWFrZSBhIHBwcGQgY2FsbCBmcm9tIHVzZXIgc3BhY2UKKyAgICAgc3BlY2lm eWluZyAvZGV2L2N1YS9hIHdvdWxkIGZhaWwgYmVjYXVzZSBvZiBwZXJtaXNzaW9ucy4gR3JlZwor ICAgICBmaW5hbGx5IHB1dCB0aGUgcXVlc3Rpb24gdG8gdGhlIHBwcCBwZW9wbGUsIHdobyBjYW1l IGJhY2sgd2l0aAorICAgICBpbmZvcm1hdGlvbiB0aGF0IGlzIG5vdCBsYWlkIG91dCBhbnl3aGVy ZSBpbiB0aGUgZG9jcyBhdmFpbGFibGUgZm9yCisgICAgIFNvbGFyaXMgdXNlcnMuIE5hbWVseSwg cHV0IC9kZXYvY3VhL2EgaW4gb25lIG9mIHRoZSBwcml2aWxlZ2VkCisgICAgIG9wdGlvbnMgZmls ZXMgaW4gdGhlIC9ldGMvcHBwIGRpcmVjdG9yeS4gVGhhdCwgcGx1cyByZXNldHRpbmcgdGhlCisg ICAgIE9CUCB0dHlhLWlnbm9yZS1jZCBmbGFnICh0aGlzIGlzIFN1biBoYXJkd2FyZSkgdG8gZmFs c2UsIHNlZW1zIHRvCisgICAgIGhhdmUgc29sdmVkIHRoZSBwcm9ibGVtcy4KKworICAgICBXaGls ZSBJIG5vdGUgdGhhdCBJIGhhZCBpbnN0YWxsZWQgS2VybWl0IHN1aWQgdG8gdXVjcCB0byB1c2UK KyAgICAgL2Rldi9jdWEvYSBvbiB0aGlzIHBhcnRpY3VsYXIgYm94LCBpdCBzZWVtcyB0byBydW4g ZmluZSB0aHJvdWdoCisgICAgIC9kZXYvdGVybS9hLiBOb3Qgc28gd2l0aCBwcHBkLgorCisgICAg IFdpdGggdGhpcyBjaGFuZ2UgaW4gcGxhY2UsIEkgc2VlbSB0byBiZSBhYmxlIHRvIHVwbG9hZCBh bmQgZG93bmxvYWQKKyAgICAgdGhyb3VnaCB0ZWxuZXQgcnVuIG9uIEtlcm1pdCB3aXRoIHRoZSBt YXhpbXVtIGxlbmd0aCBwYWNrZXRzLiBJIG5vdGUKKyAgICAgdGhhdCB0aGUgd2luZG93IGFsbG9j YXRpb24gZGlzcGxheSBkb2VzIHNob3cgU1RSRUFNSU5HLCB1c2luZworICAgICB0ZWxuZXQuIFJ1 bm5pbmcgc3NoIG9uIEtlcm1pdCwgSSBzZWUgdGhlIHN0YW5kYXJkIDEgb2YgMzAgd2luZG93cwor ICAgICBkaXNwbGF5LCBhbmQgbm90ZSB0aGF0IHRoZXJlIGFwcGVhcnMgdG8gYmUgYSBidWZmZXIg bGVuZ3RoIGxpbWl0CisgICAgIGJldHdlZW4gMTAwMCBhbmQgMjAwMCBieXRlcy4gUnVuIHdpdGgg MTAwMCwgYW5kIGl0J3MgdGljay10b2NrLAorICAgICBzb2xpZCBhcyBhIHJvY2suIFdpdGggMjAw MCBJIHNlZSB0aW1lb3V0IGVycm9ycyBhbmQgUlRTL0NUUyBhY3Rpb24KKyAgICAgb24gdGhlIG1v ZGVtLgorCisgICBLZXJtaXQncyBwYWNrZXQtbGVuZ3RoIGFuZCBvdGhlciBjb250cm9scyBsZXQg eW91IG1ha2UgYWRqdXN0bWVudHMgbGlrZQorICAgdGhpcyB0byBnZXQgYXJvdW5kIHdoYXRldmVy IG9ic3RhY2xlcyBtaWdodCBiZSB0aHJvd24gdXAgLS0gaW4gdGhpcworICAgY2FzZSAocnVubmlu ZyBLZXJtaXQgb3ZlciBzc2gpLCB0aGUgdW5kZXJsaW5nIFNvbGFyaXMgUFRZIGRyaXZlci4KKwor My43LjYuIFNvbGFyaXMgMi40IGFuZCBFYXJsaWVyCisKKyAgIFsgWzQ1M11Ub3AgXSBbIFs0NTRd Q29udGVudHMgXSBbIFs0NTVdU2VjdGlvbiBDb250ZW50cyBdIFsKKyAgIFs0NTZdUHJldmlvdXMg XQorCisgICBDLUtlcm1pdCBjYW4ndCBiZSBjb21waWxlZCBzdWNjZXNzZnVsbHkgdW5kZXIgU29s YXJpcyAyLjMgdXNpbmcKKyAgIFNVTldzcHJvIGNjIDIuMC4xIHVubGVzcyBhdCBsZWFzdCBzb21l IG9mIHRoZSBmb2xsb3dpbmcgcGF0Y2hlcyBhcmUKKyAgIGFwcGxpZWQgdG8gY2MgKGl0IGlzIG5v dCBrbm93biB3aGljaCBvbmUocyksIGlmIGFueSwgZml4IHRoZSBwcm9ibGVtKToKKworICAgICAq IDEwMDkzNS0wMSBTcGFyY0NvbXBpbGVyIEMgMi4wLjE6IGJhZCBjb2RlIGdlbmVyYXRlZCB3aGVu IGFkZHJlc3NlcworICAgICAgIG9mIHR3byBkb3VibGUgYXJndW1lbnRzIGFyZSBpbnZvbHZlZAor ICAgICAqIDEwMDk2MS0wNSBTUEFSQ2NvbXBpbGVycyBDIDIuMC4xOiBjb25kaXRpb25hbCBleHBy ZXNzaW9uIHdpdGgKKyAgICAgICBmdW5jdGlvbiByZXR1cm5pbmcgc3RydWN0dXJlIGdpdmVzIHdy b25nIHZhbHVlCisgICAgICogMTAwOTc0LTAxIFNwYXJjV29ya3MgMi4wLjE6IGRieCBqdW1ibyBw YXRjaAorICAgICAqIDEwMTQyNC0wMSBTUEFSQ3dvcmtzIDIuMC4xIG1ha2V0b29sIFNFR1YncyBp bnN0YW50bHkgb24gU29sYXJpcyAyLjMKKworICAgV2l0aCB1bnBhdGNoZWQgY2MgMi4wLjEsIHRo ZSBzeW1wdG9tIGlzIHRoYXQgY2VydGFpbiBtb2R1bGVzIGdlbmVyYXRlCisgICB0cnVuY2F0ZWQg b2JqZWN0IGZpbGVzLCByZXN1bHRpbmcgaW4gbWFueSB1bnJlc29sdmVkIHJlZmVyZW5jZXMgYXQg bGluaworICAgdGltZS4KKworICAgICBUaGUgcmVzdCBvZiB0aGUgcHJvYmxlbXMgaW4gdGhpcyBz ZWN0aW9uIGhhdmUgdG8gZG8gd2l0aAorICAgICBiaWRpcmVjdGlvbmFsIHRlcm1pbmFsIHBvcnRz IGFuZCB0aGUgU29sYXJpcyBQb3J0IE1vbml0b3IuIEEgYnVnIGluCisgICAgIEMtS2VybWl0IDVB IHRpY2tlZCBhIGJ1ZyBpbiBTb2xhcmlzLiBUaGUgQy1LZXJtaXQgYnVnIHdhcyBmaXhlZCBpbgor ICAgICB2ZXJzaW9uIDYuMCwgYW5kIHRoZSBTb2xhcmlzIGJ1ZyB3YXMgZml4ZWQgaW4gMi40IChJ IHRoaW5rLCBvciBtYXliZQorICAgICAyLjUpLgorCisgICBSZXBvcnRlZGx5LCAiQy1LZXJtaXQg Li4uIGNhdXNlcyBhIFNQQVJDc3RhdGlvbiBydW5uaW5nIFNvbGFyaXMgMi4zIHRvCisgICBwYW5p YyBhZnRlciB0aGUgbW9kZW0gY29ubmVjdHMuIEkgaGF2ZSB0cmllZCBjb21waWxpbmcgQy1LZXJt aXQgd2l0aAorICAgU3VuJ3MgdW5idW5kbGVkIEMgY29tcGlsZXIsIHdpdGggR0NDIFZlcnNpb25z IDIuNC41IGFuZCAyLjUuMywgd2l0aAorICAgbWFrZSB0YXJnZXRzICdzdW5vczUxJywgJ3N1bm9z NTF0Y3AnLCAnc3Vub3M1MWdjYycsIGFuZCBldmVuICdzeXM1cjQnLAorICAgYW5kIGVhY2ggdGlt ZSBpdCBjb21waWxlcyBhbmQgc3RhcnRzIHVwIGNsZWFubHksIGJ1dCB3aXRob3V0IGZhaWwsIGFz CisgICBzb29uIGFzIEkgZGlhbCB0aGUgbnVtYmVyIGFuZCBnZXQgYSAnQ09OTkVDVCcgbWVzc2Fn ZSBmcm9tIHRoZSBtb2RlbSwgSQorICAgZ2V0OgorCisgIEJBRCBUUkFQCisgIGtlcm1pdDogRGF0 YSBmYXVsdAorICBrZXJuZWwgcmVhZCBmYXVsdCBhdCBhZGRyPTB4NDVjLCBwbWU9MHgwCisgIFN5 bmMgRXJyb3IgUmVnIDgwIDxJTlZBTElEPgorICAuLi4KKyAgcGFuaWM6IERhdGEgRmF1bHQuCisg IC4uLgorICBSZWJvb3RpbmcuLi4KKworICAgVGhlIHNhbWUgbW9kZW0gd29ya3MgZmluZSBmb3Ig VVVDUC90aXAgY2FsbGluZy4iIEFsc28gKHJlcG9ydGVkbHkpLAorICAgdGhpcyBvbmx5IGhhcHBl bnMgaWYgdGhlIGRpYWxvdXQgcG9ydCBpcyBjb25maWd1cmVkIGFzIGluL291dCB2aWEKKyAgIGFk bWludG9vbC4gSWYgaXQgaXMgY29uZmlndXJlZCBhcyBvdXQtb25seSwgbm8gcHJvYmxlbS4gVGhp cyBpcyB0aGUKKyAgIHNhbWUgZGlhbGluZyBjb2RlIHRoYXQgd29ya3Mgb24gaHVuZHJlZHMgb2Yg b3RoZXIgU3lzdGVtLVYgYmFzZWQgVW5peAorICAgT1Mncy4gU2luY2UgaXQgc2hvdWxkIGJlIGlt cG9zc2libGUgZm9yIGEgdXNlciBwcm9ncmFtIHRvIGNyYXNoIHRoZQorICAgb3BlcmF0aW5nIHN5 c3RlbSwgdGhpcyBwcm9ibGVtIG11c3QgYmUgY2hhbGtlZCB1cCB0byBhIFNvbGFyaXMgYnVnLgor ICAgRXZlbiBpZiB5b3UgU0VUIENBUlJJRVIgT0ZGLCBDT05ORUNULCBhbmQgZGlhbCBtYW51YWxs eSBieSB0eXBpbmcKKyAgIEFURFRubm5ubm5uLCB0aGUgc3lzdGVtIHBhbmljcyBhcyBzb29uIGFz IHRoZSBtb2RlbSBpc3N1ZXMgaXRzIENPTk5FQ1QKKyAgIG1lc3NhZ2UuIChDbGVhcmx5LCB3aGVu IHlvdSBhcmUgZGlhbGluZyBtYW51YWxseSwgQy1LZXJtaXQgZG9lcyBub3QKKyAgIGtub3cgYSB0 aGluZyBhYm91dCB0aGUgQ09OTkVDVCBtZXNzYWdlLCBhbmQgc28gdGhlIHBhbmljIGlzIGFsbW9z dAorICAgY2VydGFpbmx5IGNhdXNlZCBieSB0aGUgdHJhbnNpdGlvbiBvZiB0aGUgQ2FycmllciBE ZXRlY3QgKENEKSBsaW5lIGZyb20KKyAgIG9mZiB0byBvbi4pIFRoaXMgcHJvYmxlbSB3YXMgcmVw b3J0ZWQgYnkgbWFueSB1c2VycywgYWxsIG9mIHdob20gc2F5CisgICB0aGF0IEMtS2VybWl0IHdv cmtlZCBmaW5lIG9uIFNvbGFyaXMgMi4xIGFuZCAyLjIuIElmIHRoZSBzcGVjdWxhdGlvbgorICAg YWJvdXQgQ0QgaXMgdHJ1ZSwgdGhlbiBhIHBvc3NpYmxlIHdvcmthcm91bmQgbWlnaHQgYmUgdG8g Y29uZmlndXJlIHRoZQorICAgbW9kZW0gdG8gbGVhdmUgQ0Qgb24gKG9yIG9mZikgYWxsIHRoZSB0 aW1lLiBQZXJoYXBzIGJ5IHRoZSB0aW1lIHlvdQorICAgcmVhZCB0aGlzLCBhIHBhdGNoIHdpbGwg aGF2ZSBiZWVuIGlzc3VlZCBmb3IgU29sYXJpcyAyLjMuCisKKyAgIFRoZSBmb2xsb3dpbmcgaXMg ZnJvbSBLYXJsIFMuIE1hcnNoLCBTeXN0ZW1zICYgTmV0d29ya3MgQWRtaW5pc3RyYXRvciwKKyAg IEFNQklYIFN5c3RlbXMgQ29ycCwgUm9jaGVzdGVyLCBOWToKKworICAgICBFbnZpcm9ubWVudDog U29sYXJpcyAyLjMgUGF0Y2ggMTAxMzE4LTQ1IEMtS2VybWl0IDVBKDE4OSkgKGFuZAorICAgICBw cmVzdW1hYmx5IHRoaXMgYXBwbGllcyB0byAxODggYW5kIDE5MCBhbHNvKS4gZWVwcm9tIHNldHRp bmc6CisKKyAgdHR5YS1ydHMtZHRyLW9mZj1mYWxzZQorICB0dHlhLWlnbm9yZS1jZD1mYWxzZQor ICB0dHlhLW1vZGU9MTkyMDAsOCxuLDgsLQorCisgICAgIFRvIHVzZSBDLUtlcm1pdCBvbiBhIGJp ZGlyZWN0aW9uYWwgcG9ydCBpbiB0aGlzIGVudmlyb25tZW50LCBkbyBub3QKKyAgICAgdXNlIGFk bWludG9vbCB0byBjb25maWd1cmUgdGhlIHBvcnQuIFVzZSBhZG1pbnRvb2wgdG8gZGVsZXRlIGFu eQorICAgICBzZXJ2aWNlcyBydW5uaW5nIG9uIHRoZSBwb3J0IGFuZCB0aGVuIHF1aXQgYWRtaW50 b29sIGFuZCBpc3N1ZSB0aGUKKyAgICAgZm9sbG93aW5nIGNvbW1hbmQ6CisKKyAgcG1hZG0gLWEg LXAgenNtb24gLXMgdHR5YiAtaSByb290IC1mdSAtdiAxIC1tICJgdHR5YWRtIC1iIC1kIC9kZXYv dGVybS9iIFwKKyAgLWwgY29udHR5SCAtbSBsZHRlcm0sdHRjb21wYXQgLXMgL3Vzci9iaW4vbG9n aW4gLVMgbmAiCisKKyAgICAgW05PVEU6IFRoaXMgd2FzIGNvcGllZCBmcm9tIGEgYmx1cnJ5IGZh eCwgc28gcGxlYXNlIGNoZWNrIGl0CisgICAgIGNhcmVmdWxseV0gd2hlcmU6CisKKyAgLWEgPSBB ZGQgc2VydmljZQorICAtcCA9IHBtdGFnICh6c21vbikKKyAgLXMgPSBzZXJ2aWNlIHRhZyAodHR5 YikKKyAgLWkgPSBpZCB0byBiZSBhc3NvY2lhdGVkIHdpdGggc2VydmljZSB0YWcgKHJvb3QpCisg IC1mdSA9IGNyZWF0ZSB1dG1wIGVudHJ5CisgIC12ID0gdmVyc2lvbiBvZiB0dHlhZG0KKyAgLW0g PSBwb3J0IG1vbml0b3Itc3BlY2lmaWMgcG9ydGlvbiBvZiB0aGUgcG9ydCBtb25pdG9yIGFkbWlu aXN0cmF0aXZlIGZpbGUKKyAgICAgICBlbnRyeSBmb3IgdGhlIHNlcnZpY2UKKyAgLWIgPSBzZXQg dXAgcG9ydCBmb3IgYmlkaXJlY3Rpb25hbCB1c2UKKyAgLWQgPSBmdWxsIHBhdGggbmFtZSBvZiBk ZXZpY2UKKyAgLWwgPSB3aGljaCB0dHlsYWJlbCBpbiB0aGUgL2V0Yy90dHlkZWZzIGZpbGUgdG8g dXNlCisgIC1tID0gYSBsaXN0IG9mIHB1c2hhYmxlIFNUUkVBTVMgbW9kdWxlcworICAtcyA9IHBh dGhuYW1lIG9mIHNlcnZpY2UgdG8gYmUgaW52b2tlZCB3aGVuIGNvbm5lY3Rpb24gcmVxdWVzdCBy ZWNlaXZlZAorICAtUyA9IHNvZnR3YXJlIGNhcnJpZXIgZGV0ZWN0IG9uIG9yIG9mZiAobiA9IG9m ZikKKworICAgICAiVGhpcyBpcyBleGFjdGx5IGhvdyBJIHdhcyBhYmxlIHRvIGdldCBLZXJtaXQg dG8gd29yayBvbiBhCisgICAgIGJpLWRpcmVjdGlvbmFsIHBvcnQgd2l0aG91dCBjcmFzaGluZyB0 aGUgc3lzdGVtLiIKKworICAgT24gdGhlIFNvbGFyaXMgcHJvYmxlbSwgYWxzbyBzZWUgU3VuU29s dmUgQnVnIElEIDExNTA0NTcgKCJVc2luZworICAgQy1LZXJtaXQsIGdldCBCYWQgVHJhcCBvbiBy ZWNlaXZpbmcgcHJvbXB0IGZyb20gcmVtb3RlIHN5c3RlbSIpLgorICAgQW5vdGhlciB1c2VyIHJl cG9ydGVkICJTbywgSSBoYXZlIGNvbW11bmljYXRlZCB3aXRoIHRoZSBTdW4gdGVjaAorICAgc3Vw cG9ydCBwZXJzb24gdGhhdCBzdWJtaXR0ZWQgdGhpcyBidWcgcmVwb3J0IFsxMTUwNDU3XS4gQXBw YXJlbnRseSwKKyAgIHRoaXMgYnVnIHdhcyBmaXhlZCB1bmRlciBvbmUgb2YgdGhlIGp1bWJvIGtl cm5lbCBwYXRjaGVzLiBJdCB3b3VsZCBzZWVtCisgICB0aGF0IHRoZSBmaXggZGlkIG5vdCBsaXZl IG9uIGludG8gMTAxMzE4LTQ1LCBhcyB0aGlzIGlzIEVYQUNUTFkgdGhlCisgICBlcnJvciB0aGF0 IEkgc2VlIHdoZW4gSSBhdHRlbXB0IHRvIHVzZSBrZXJtaXQgb24gbXkgc3lzdGVtLiIKKworICAg TGF0ZXIgKEF1ZyA5NCkuLi4gQy1LZXJtaXQgZGlhbG91dCBzdWNjZXNzZnVsbHkgdGVzdGVkIG9u IGEgU3VuNG0gd2l0aAorICAgYSBoZWF2aWx5IHBhdGNoZWQgU29sYXJpcyAyLjMuIFRoZSBwYXRj aGVzIG1vc3QgbGlrZWx5IHRvIGhhdmUgYmVlbgorICAgcmVsZXZhbnQ6CisKKyAgICAgKiAxMDEz MTgtNTA6IFN1bk9TIDUuMzogSnVtYm8gcGF0Y2ggZm9yIGtlcm5lbCAoaW5jbHVkZXMgbGliYywg bG9ja2QpCisgICAgICogMTAxNzIwLTAxOiBTdW5PUyA1LjM6IHR0eW1vbiAtIHByb21wdCBub3Qg YWx3YXlzIHZpc2libGUgb24gYSBtb2RlbQorICAgICAgIGNvbm5lY3Rpb24KKyAgICAgKiAxMDE4 MTUtMDE6IFN1bk9TIDUuMzogRGF0YSBmYXVsdCBpbiBwdXQoKSBOVUxMIHF1ZXVlIHBhc3NlZCBm cm9tCisgICAgICAgdHR5Y29tbW9uX3FmdWxsKCkKKyAgICAgKiAxMDEzMjgtMDE6IFN1bk9TIDUu MzogQXV0b21hdGlvbiBzY3JpcHQgdG8gcHJvcGVybHkgc2V0dXAgdHR5IHBvcnRzCisgICAgICAg cHJpb3IgdG8gUENUUyBleGVjdXRpb24KKworICAgU3RpbGwgbGF0ZXIgKE5vdiA5NCk6IGFub3Ro ZXIgdXNlciAoQm8gS3VsbG1hciBpbiBTd2VkZW4pIHJlcG9ydHMgdGhhdAorICAgYWZ0ZXIgdXNp bmcgQy1LZXJtaXQgdG8gZGlhbCBvdXQgb24gYSBiaWRpcmVjdGlvbmFsIHBvcnQsIHRoZSBwb3J0 CisgICBtaWdodCBub3QgYW5zd2VyIHN1YnNlcXVlbnQgaW5jb21pbmcgY2FsbHMsIGFuZCBzYXlz ICJ0aGUgcHJvYmxlbSBpcworICAgZWFzeSBlbm91Z2ggdG8gZml4IHdpdGggdGhlIFNlcmlhbCBQ b3J0IE1hbmFnZXI7IEkganVzdCBkZWxldGUgdGhlCisgICBzZXJ2aWNlIGFuZCBpbnN0YWxsIGl0 IGFnYWluIHVzaW5nIHRoZSBncmFwaGljYWwgaW50ZXJmYWNlLCB3aGljaAorICAgdW5kZXJuZWF0 aCB1c2VzIGNvbW1hbmRzIGxpa2Ugc2FjYWRtIGFuZCBwbWFkbS4iIExhdGVyIEJvIHJlcG9ydHMs ICJJCisgICBoYXZlIGZvdW5kIHRoYXQgaWYgSSBydW4gS2VybWl0IHdpdGggdGhlIGZvbGxvd2lu ZyBzY3JpcHQgdGhlbiBpdAorICAgd29ya3MuIFRoaXMgc2NyaXB0IGlzIGZvciAvZGV2L2N1YS9h LCAiLXMgYSIgaXMgdGhlIGxhc3QgYSBpbgorICAgL2Rldi9jdWEvYToKKworICAjISAvYmluL3No CisgIGtlcm1pdAorICBzbGVlcCAyCisgIHN1cnVuIHBtYWRtIC1lIC1wIHpzbW9uIC1zIGEKKwor My44LiBDLUtFUk1JVCBBTkQgU1VOT1MKKworICAgWyBbNDU3XVRvcCBdIFsgWzQ1OF1Db250ZW50 cyBdIFsgWzQ1OV1TZWN0aW9uIENvbnRlbnRzIF0gWyBbNDYwXU5leHQgXQorICAgWyBbNDYxXVBy ZXZpb3VzIF0KKworICAgRm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24sIHNlZSAiQ2VsZXN0ZSdz IFR1dG9yaWFsIG9uIFN1bk9TIDQuMS4zKworICAgTW9kZW1zIGFuZCBUZXJtaW5hbHMiOgorCisg IFs0NjJdaHR0cDovL3d3dy5zdG9rZWx5LmNvbS8KKworICAgRm9yIEZBUXMsIGV0YywgZnJvbSBT dW4sIHNlZToKKyAgICAgKiBbNDYzXWh0dHA6Ly9hY2Nlc3MxLnN1bi5jb20vCisKKyAgIEZvciBo aXN0b3J5IG9mIFN1biBtb2RlbHMgYW5kIFN1bk9TIHZlcnNpb25zLCBzZWUgKHNob3VsZCBiZSBh bGwgdGhlCisgICBzYW1lKToKKyAgICAgKiBbNDY0XWh0dHA6Ly93d3cubHVkZC5sdXRoLnNlL35i ZWFyL3Byb2plY3Qvc3VuL3N1bi5oYXJkd2FyZS50eHQKKyAgICAgKiBbNDY1XWZ0cDovL2Z0cC5u ZXRjb20uY29tL3B1Yi9ydS9ydWJpY29uL3N1bi5oZHdyLnJlZgorICAgICAqIFs0NjZdZnRwOi8v ZnRwLmludG5ldC5uZXQvcHViL1NVTi9TdW4tSGFyZHdhcmUtUmVmCisKKyAgIFN1biBTUEFSQ3N0 YXRpb24gdXNlcnMgc2hvdWxkIHJlYWQgdGhlIHNlY3Rpb24gIlNldHRpbmcgdXAgTW9kZW0KKyAg IFNvZnR3YXJlIiBpbiB0aGUgRGVza3RvcCBTUEFSQyBTdW4gU3lzdGVtICYgTmV0d29yayBNYW5h Z2VyJ3MgR3VpZGUuIElmCisgICB5b3UgZG9uJ3Qgc2V0IHVwIHlvdXIgc2VyaWFsIHBvcnRzIGNv cnJlY3RseSwgS2VybWl0IChhbmQgb3RoZXIKKyAgIGNvbW11bmljYXRpb25zIHNvZnR3YXJlKSB3 b24ndCB3b3JrIHJpZ2h0LgorCisgICBBbHNvLCBvbiBjZXJ0YWluIFN1biBtb2RlbHMgbGlrZSBJ UEMsIHRoZSBzZXJpYWwgcG9ydCBoYXJkd2FyZSBtaWdodAorICAgbmVlZCB0byBoYXZlIGEganVt cGVyIGNoYW5nZWQgdG8gbWFrZSBpdCBhbiBSUy0yMzIgcG9ydCByYXRoZXIgdGhhbgorICAgUlMt NDIzLgorCisgICBSZXBvcnRlZGx5LCBDLUtlcm1pdCBkb2VzIG5vdCB3b3JrIGNvcnJlY3RseSBv biBhIFN1biBTUEFSQ3N0YXRpb24gaW4KKyAgIGFuIE9wZW4gV2luZG93cyB3aW5kb3cgd2l0aCBz Y3JvbGxpbmcgZW5hYmxlZC4gRGlzYWJsZSBzY3JvbGxpbmcsIG9yCisgICBlbHNlIGludm9rZSBL ZXJtaXQgaW4gYSB0ZXJtaW5hbCBlbXVsYXRpb24gd2luZG93ICh4dGVybSwgY3J0dG9vbCwKKyAg IHZ0dG9vbCkgdW5kZXIgU3VuVmlldyAodGhpcyBtaWdodCBiZSBmaXhlZCBpbiBsYXRlciBTdW5P UyByZWxlYXNlcykuCisKKyAgIE9uIHRoZSBTdW4gd2l0aCBPcGVuIFdpbmRvd3MsIGFuIGFkZGl0 aW9uYWwgc3ltcHRvbSBoYXMgYmVlbiByZXBvcnRlZDoKKyAgIG91dGJvdW5kIFN1bkxpbmsgWC4y NSBjb25uZWN0aW9ucyAibWFnaWNhbGx5IiB0cmFuc2xhdGUgQ1IgdHlwZWQgYXQgdGhlCisgICBr ZXlib2FyZCBpbnRvIExGIGJlZm9yZSB0cmFuc21pc3Npb24gdG8gdGhlIHJlbW90ZSBob3N0LiBU aGlzIGRvZXNuJ3QKKyAgIGhhcHBlbiB1bmRlciBTdW5WaWV3LgorCisgICBTRVQgQ0FSUklFUiBP Tiwgd2hlbiB1c2VkIG9uIHRoZSBTdW5PUyA0LjEgdmVyc2lvbiBvZiBDLUtlcm1pdAorICAgKGNv bXBpbGVkIGluIHRoZSBCU0QgdW5pdmVyc2UpLCBjYXVzZXMgdGhlIHByb2dyYW0gdG8gaGFuZwor ICAgdW5pbnRlcnJ1cHRpYmx5IHdoZW4gU0VUIExJTkUgaXMgaXNzdWVkIGZvciBhIGRldmljZSB0 aGF0IGlzIG5vdAorICAgYXNzZXJ0aW5nIGNhcnJpZXIuIFdoZW4gS2VybWl0IGlzIGJ1aWx0IGlu IHRoZSBTeXMgViB1bml2ZXJzZSBvbiB0aGUKKyAgIHNhbWUgY29tcHV0ZXIsIHRoZXJlIGlzIG5v IHByb2JsZW0gKGl0IGNhbiBiZSBpbnRlcnJ1cHRlZCB3aXRoIEN0cmwtQykuCisgICBUaGlzIGlz IGFwcGFyZW50bHkgYSBsaW1pdGF0aW9uIG9mIHRoZSBCU0Qtc3R5bGUgdHR5IGRyaXZlci4KKwor ICAgU3VuT1MgNC4xIEMtS2VybWl0IGhhcyBiZWVuIG9ic2VydmVkIHRvIGR1bXAgY29yZSB3aGVu IHJ1bm5pbmcgYQorICAgY29tcGxpY2F0ZWQgc2NyaXB0IHByb2dyYW0gdW5kZXIgY3Jvbi4gVGhl IGR1bXAgaW52YXJpYWJseSBvY2N1cnMgaW4KKyAgIHR0b2MoKSwgd2hpbGUgdHJ5aW5nIHRvIG91 dHB1dCBhIGNoYXJhY3RlciB0byBhIFRDUC9JUCBURUxORVQKKyAgIGNvbm5lY3Rpb24uIHR0b2Mo KSBjb250YWlucyBhIHdyaXRlKCkgY2FsbCwgYW5kIHdoZW4gdGhlIHN5c3RlbSBvciB0aGUKKyAg IG5ldHdvcmsgaXMgdmVyeSBidXN5LCB0aGUgd3JpdGUoKSBjYWxsIGNhbiBnZXQgc3R1Y2sgZm9y IGxvbmcgcGVyaW9kcworICAgb2YgdGltZS4gVG8gYnJlYWsgb3V0IG9mIGRlYWRsb2NrcyBjYXVz ZWQgYnkgc3R1Y2sgd3JpdGUoKSBjYWxscywgdGhlcmUKKyAgIGlzIGFuIGFsYXJtIGFyb3VuZCB0 aGUgd3JpdGUoKS4gSXQgaXMgcG9zc2libGUgdGhhdCB0aGUgY29yZSBkdW1wCisgICBvY2N1cnMg d2hlbiB0aGlzIGFsYXJtIHNpZ25hbCBpcyBjYXVnaHQuIChUaGlzIG9uZSBoYXMgbm90IGJlZW4K KyAgIG9ic2VydmVkIHJlY2VudGx5IC0tIHBvc3NpYmx5IGZpeGVkIGluIGVkaXQgMTkwLikKKwor ICAgT24gU3VuIGNvbXB1dGVycyB3aXRoIFN1bk9TIDQuMCBvciA0LjEsIFNFVCBGTE9XIFJUUy9D VFMgd29ya3Mgb25seSBpZgorICAgdGhlIGNhcnJpZXIgc2lnbmFsIGlzIHByZXNlbnQgZnJvbSB0 aGUgY29tbXVuaWNhdGlvbiBkZXZpY2UgYXQgdGhlIHRpbWUKKyAgIHdoZW4gQy1LZXJtaXQgZW50 ZXJzIHBhY2tldCBtb2RlIG9yIENPTk5FQ1QgbW9kZS4gSWYgY2FycmllciBpcyBub3QKKyAgIHNl bnNlZCAoZS5nLiB3aGVuIGRpYWxpbmcpLCBDLUtlcm1pdCBkb2VzIG5vdCBhdHRlbXB0IHRvIHR1 cm4gb24KKyAgIFJUUy9DVFMgZmxvdyBjb250cm9sLiBUaGlzIGlzIGJlY2F1c2UgdGhlIFN1bk9T IHNlcmlhbCBkZXZpY2UgZHJpdmVyCisgICBkb2VzIG5vdCBhbGxvdyBjaGFyYWN0ZXJzIHRvIGJl IG91dHB1dCBpZiBSVFMvQ1RTIGlzIHNldCAoQ1JUU0NUUykgYnV0CisgICBjYXJyaWVyIChhbmQg RFNSKSBhcmUgbm90IHByZXNlbnQuIFdvcmthcm91bmQgKG1heWJlKTogU0VUIENBUlJJRVIgT0ZG CisgICBiZWZvcmUgZ2l2aW5nIHRoZSBTRVQgTElORSBjb21tYW5kLCBlc3RhYmxpc2ggdGhlIGNv bm5lY3Rpb24sIHRoZW4gU0VUCisgICBGTE9XIFJUUy9DVFMKKworICAgSXQgaGFzIGFsc28gYmVl biByZXBvcnRlZCB0aGF0IFJUUy9DVFMgZmxvdyBjb250cm9sIHVuZGVyIFN1bk9TIDQuMQorICAg dGhyb3VnaCA0LjEuMyB3b3JrcyBvbmx5IG9uIElOUFVULCBub3Qgb24gb3V0cHV0LCBhbmQgdGhh dCB0aGVyZSBpcyBhCisgICBwYXRjaCBmcm9tIFN1biB0byBjb3JyZWN0IHRoaXMgcHJvYmxlbTog UGF0Y2gtSUQjIFQxMDA1MTMtMDQsIDIwIEp1bHkKKyAgIDE5OTMgKHRoaXMgcGF0Y2ggbWlnaHQg YXBwbHkgb25seSB0byBTdW5PUyA0LjEuMykuIEl0IG1pZ2h0IGFsc28gYmUKKyAgIG5lY2Vzc2Fy eSB0byBjb25maWd1cmUgdGhlIGVlcHJvbSBwYXJhbWV0ZXJzIG9mIHRoZSBzZXJpYWwgcG9ydDsg ZS5nLgorICAgZG8gdGhlIGZvbGxvd2luZyBhcyByb290IGF0IHRoZSBzaGVsbCBwcm9tcHQ6CisK KyAgZWVwcm9tICB0dHlhLWlnbm9yZS1jZD1mYWxzZQorICBlZXByb20gIHR0eWEtcnRzLWR0ci1v ZmY9dHJ1ZQorCisgICBUaGVyZSBoYXZlIGJlZW4gcmVwb3J0cyBvZiBmaWxlIHRyYW5zZmVyIGZh aWx1cmVzIG9uIFN1bi0zIHN5c3RlbXMgd2hlbgorICAgdXNpbmcgbG9uZyBwYWNrZXRzIGFuZC9v ciBsYXJnZSB3aW5kb3cgc2l6ZXMuIE9uZSB1c2VyIHNheXMgdGhhdCB3aGVuCisgICB0aGlzIGhh cHBlbnMsIHRoZSBjb25zb2xlIGlzc3VlcyBtYW55IGNvcGllcyBvZiB0aGlzIG1lc3NhZ2U6CisK KyAgY2hhb3Mgdm11bml4OiB6czE6IHJpbmcgYnVmZmVyIG92ZXJmbG93CisKKyAgIFRoaXMgbWVh bnMgdGhhdCBTdW5PUyBpcyBub3Qgc2NoZWR1bGluZyBLZXJtaXQgZnJlcXVlbnRseSBlbm91Z2gg dG8KKyAgIHNlcnZpY2UgaW50ZXJydXB0cyBmcm9tIHRoZSB6cyBzZXJpYWwgZGV2aWNlIChaaWxv ZyA4MzUwIFNDQyBzZXJpYWwKKyAgIGNvbW11bmljYXRpb24gcG9ydCkgYmVmb3JlIGl0cyBpbnB1 dCBzaWxvIG92ZXJmbG93cy4gV29ya2Fyb3VuZDogdXNlCisgICBzbWFsbGVyIHBhY2tldHMgYW5k L29yIGEgc21hbGxlciB3aW5kb3cgc2l6ZSwgb3IgdXNlICJuaWNlIiB0byBpbmNyZWFzZQorICAg S2VybWl0J3MgcHJpb3JpdHkuIFVzZSBoYXJkd2FyZSBmbG93IGNvbnRyb2wgaWYgYXZhaWxhYmxl LCBvciByZW1vdmUKKyAgIG90aGVyIGFjdGl2ZSBwcm9jZXNzZXMgYmVmb3JlIHJ1bm5pbmcgS2Vy bWl0LgorCisgICBTdW5MaW5rIFguMjUgc3VwcG9ydCBpbiBDLUtlcm1pdCA1QSgxOTApIHdhcyBi dWlsdCBhbmQgdGVzdGVkCisgICBzdWNjZXNzZnVsbHkgdW5kZXIgU3VuT1MgNC4xLjNiIGFuZCBT dW5MaW5rIFguMjUgNy4wMC4KKworMy45LiBDLUtFUk1JVCBBTkQgVUxUUklYCisKKyAgIFsgWzQ2 N11Ub3AgXSBbIFs0NjhdQ29udGVudHMgXSBbIFs0NjldU2VjdGlvbiBDb250ZW50cyBdIFsgWzQ3 MF1OZXh0IF0KKyAgIFsgWzQ3MV1QcmV2aW91cyBdCisKKyAgIFNlZSBhbHNvOiBUaGUgWzQ3Ml1j b21wLnVuaXgudWx0cml4IGFuZCBbNDczXWNvbXAuc3lzLmRlYyBuZXdzZ3JvdXBzLgorCisgICBU aGVyZSBpcyBubyBoYXJkd2FyZSBmbG93IGNvbnRyb2wgaW4gVWx0cml4LiBUaGF0J3Mgbm90IGEg S2VybWl0CisgICBkZWZpY2llbmN5LCBidXQgYW4gVWx0cml4IG9uZS4KKworICAgV2hlbiBzZW5k aW5nIGZpbGVzIHRvIEMtS2VybWl0IG9uIGEgVGVsbmV0IGNvbm5lY3Rpb24gdG8gYSByZW1vdGUK KyAgIFVsdHJpeCBzeXN0ZW0sIHlvdSBtdXN0IFNFVCBQUkVGSVhJTkcgQUxMIChvciBhdCBsZWFz dCBwcmVmaXggbW9yZQorICAgY29udHJvbCBjaGFyYWN0ZXJzIHRoYW4gYXJlIHNlbGVjdGVkIGJ5 IFNFVCBQUkVGSVhJTkcgQ0FVVElPVVMpLgorCisgICBSZXBvcnRlZGx5LCBERUMgVUxUUklYIDQu MyBpcyBpbW11bmUgdG8gQy1LZXJtaXQncyBkaXNhYmxpbmcgb2YKKyAgIFNJR1FVSVQsIHdoaWNo IGlzIHRoZSBzaWduYWwgdGhhdCBpcyBnZW5lcmF0ZWQgd2hlbiB0aGUgdXNlciB0eXBlcworICAg Q3RybC1cLCB3aGljaCBraWxscyB0aGUgY3VycmVudCBwcm9jZXNzIChpLmUuIEMtS2VybWl0KSBh bmQgZHVtcHMgY29yZS4KKyAgIERpYWdub3NpcyBhbmQgY3VyZSB1bmtub3duLiBXb3JrYXJvdW5k OiBiZWZvcmUgc3RhcnRpbmcgQy1LZXJtaXQgLS0gb3IKKyAgIGZvciB0aGF0IG1hdHRlciwgd2hl biB5b3UgZmlyc3QgbG9nIGluIGJlY2F1c2UgdGhpcyBhcHBsaWVzIHRvIGFsbAorICAgcHJvY2Vz c2VzLCBub3QganVzdCBLZXJtaXQgLS0gZ2l2ZSB0aGUgZm9sbG93aW5nIFVuaXggY29tbWFuZDoK KworICBzdHR5IHF1aXQgdW5kZWYKKworICAgQ2VydGFpbiBvcGVyYXRpb25zIGRyaXZlbiBieSBS Uy0yMzIgbW9kZW0gc2lnbmFsIGRvIG5vdCB3b3JrIG9uCisgICBERUNzdGF0aW9ucyBvciBvdGhl ciBERUMgcGxhdGZvcm1zIHdob3NlIHNlcmlhbCBpbnRlcmZhY2VzIHVzZSBNTVAKKyAgIGNvbm5l Y3RvcnMgKERFQyB2ZXJzaW9uIG9mIFJKNDUgdGVsZXBob25lIGphY2sgd2l0aCBvZmZzZXQgdGFi KS4gVGhlc2UKKyAgIGNvbm5lY3RvcnMgY29udmV5IG9ubHkgdGhlIERTUiBhbmQgRFRSIG1vZGVt IHNpZ25hbHMsIGJ1dCBub3QgY2FycmllcgorICAgKENEKSwgUlRTLCBDVFMsIG9yIFJJLiBVc2Ug U0VUIENBUlJJRVIgT0ZGIHRvIGVuYWJsZSBjb21tdW5pY2F0aW9uLCBvcgorICAgImhvdHdpcmUi IERTUiB0byBDRC4KKworICAgVGhlIG1heGltdW0gc2VyaWFsIHNwZWVkIG9uIHRoZSBERUNzdGF0 aW9uIDUwMDAgaXMgbm9ybWFsbHkgMTkyMDAsIGJ1dAorICAgdmFyaW91cyB0cmlja3MgYXJlIGF2 YWlsYWJsZSAob3V0c2lkZSBLZXJtaXQpIHRvIGVuYWJsZSBoaWdoZXIgcmF0ZXMuCisgICBGb3Ig ZXhhbXBsZSwgb24gdGhlIDUwMDAvMjAwLCAxOTIwMCBjYW4gYmUgcmVtYXBwZWQgKHNvbWVob3cs IHNvbWV0aGluZworICAgdG8gZG8gd2l0aCAiYSBiaXQgaW4gdGhlIFNJUiIsIHdoYXRldmVyIHRo YXQgaXMpIHRvIDM4NDAwLCBidXQgaW4KKyAgIHNvZnR3YXJlIHlvdSBtdXN0IHN0aWxsIHJlZmVy IHRvIHRoaXMgc3BlZWQgYXMgMTkyMDA7IHlvdSBjYW4ndCBoYXZlCisgICAxOTIwMCBhbmQgMzg0 MDAgYXZhaWxhYmxlIGF0IHRoZSBzYW1lIHRpbWUuCisKKyAgIDE5MjAwLCByZXBvcnRlZGx5LCBp cyBhbHNvIHRoZSBoaWdoZXN0IHNwZWVkIHN1cHBvcnRlZCBieSBVbHRyaXgsIGJ1dAorICAgTmV0 QlNEIHJlcG9ydGVkbHkgc3VwcG9ydHMgc3BlZWRzIHVwIHRvIDU3NjAwIG9uIHRoZSBERUNzdGF0 aW9uLAorICAgYWx0aG91Z2ggd2hldGhlciBhbmQgaG93IHdlbGwgdGhpcyB3b3JrcyBpcyBhbm90 aGVyIHF1ZXN0aW9uLgorCisgICBJbiBhbnkgY2FzZSwgZ2l2ZW4gdGhlIGxhY2sgb2YgaGFyZHdh cmUgZmxvdyBjb250cm9sIGluIFVsdHJpeCwgaGlnaAorICAgc2VyaWFsIHNwZWVkcyBhcmUgcHJv YmxlbWF0aWMgYXQgYmVzdC4KKworMy4xMC4gQy1LRVJNSVQgQU5EIFVOSVhXQVJFCisKKyAgIFsg WzQ3NF1Ub3AgXSBbIFs0NzVdQ29udGVudHMgXSBbIFs0NzZdU2VjdGlvbiBDb250ZW50cyBdIFsg WzQ3N11OZXh0IF0KKyAgIFsgWzQ3OF1QcmV2aW91cyBdCisKKyAgIFNlZSBhbHNvOgorICAgICAq IFRoZSBGcmVlYmlyZCBQcm9qZWN0IChVbml4d2FyZSBzb2Z0d2FyZSByZXBvc2l0b3J5KQorICAg ICAgIFs0NzldaHR0cDovL3d3dy5mcmVlYmlyZC5vcmcvCisgICAgICogVGhlIFVuaXhXYXJlIEZB UTogWzQ4MF1odHRwOi8vd3d3LmZyZWViaXJkLm9yZy9mYXEvCisgICAgICogVGhlIGZvbGxvd2lu ZyBuZXdzZ3JvdXBzOgorICAgICAgICAgICsgWzQ4MV1jb21wLnVuaXgudW5peHdhcmUubWlzYwor ICAgICAgICAgICsgWzQ4Ml1jb21wLnVuaXguc2NvLm1pc2MuCisKKyAgIEFsc28gc2VlIGdlbmVy YWwgY29tbWVudHMgb24gUEMtYmFzZWQgVW5peGVzIGluIFs0ODNdU2VjdGlvbiAzLjAuIEJ5Cisg ICB0aGUgd2F5LCB0aGlzIHNlY3Rpb24gaXMgc2VwYXJhdGUgZnJvbSB0aGUgU0NPIChDYWxkZXJh KSBzZWN0aW9uCisgICBiZWNhdXNlIGF0IHRoZSB0aW1lIHRoaXMgc2VjdGlvbiB3YXMgc3RhcnRl ZCwgVW5peHdhcmUgd2FzIG93bmVkIGJ5IGEKKyAgIGNvbXBhbnkgY2FsbGVkIFVuaXZlbC4gTGF0 ZXIgaXQgd2FzIHNvbGQgdG8gTm92ZWxsLCBhbmQgdGhlbiB0byBTQ08uCisgICBTdGlsbCBsYXRl ciwgU0NPIHdhcyBzb2xkIHRvIENhbGRlcmEuCisKKyAgIEluIFVuaXh3YXJlIDIuMCBhbmQgbGF0 ZXIsIHRoZSBwcmVmZXJyZWQgc2VyaWFsIGRldmljZSBuYW1lcyAoZHJpdmVycykKKyAgIGFyZSAv ZGV2L3Rlcm0vMDAgKGV0YyksIHJhdGhlciB0aGFuIC9kZXYvdHR5MDAgKGV0YykuIE5vdGUgdGhl CisgICBmb2xsb3dpbmcgY29ycmVzcG9uZGVuY2Ugb2YgZGV2aWNlIG5hbWVzIGFuZCBkcml2ZXIg Y2hhcmFjdGVyaXN0aWNzOgorCisgIE5ldyBuYW1lICAgICAgIE9sZCBuYW1lICAgICBEZXNjcmlw dGlvbgorICAvZGV2L3Rlcm0vMDAgICAvZGV2L3R0eTAwICAgPz8/CisgIC9kZXYvdGVybS8wMGgg IC9kZXYvdHR5MDBoICBNb2RlbSBzaWduYWxzIGFuZCBoYXJkd2FyZSBmbG93IGNvbnRyb2wKKyAg L2Rldi90ZXJtLzAwbSAgL2Rldi90dHkwMG0gIE1vZGVtIHNpZ25hbHMoPykKKyAgL2Rldi90ZXJt LzAwcyAgL2Rldi90dHkwMHMgIE1vZGVtIHNpZ25hbHMgYW5kIHNvZnR3YXJlIGZsb3cgY29udHJv bAorICAvZGV2L3Rlcm0vMDB0ICAvZGV2L3R0eTAwdCAgPz8/CisKKyAgIExvY2tmaWxlIG5hbWVz IHVzZSBkZXZpY2UubWFqb3IubWlub3IgbnVtYmVycywgZS5nLjoKKworICAvdmFyL3Nwb29sL2xv Y2tzL0xLLjc2NzkuMDAzLjAwNQorCisgICBUaGUgbWlub3IgbnVtYmVyIHZhcmllcyBhY2NvcmRp bmcgdG8gdGhlIGRldmljZSBuYW1lIHN1ZmZpeCAobm9uZSwgaCwKKyAgIG0sIHMsIG9yIHQpLiBP bmx5IHRoZSBkZXZpY2UgYW5kIG1ham9yIG51bWJlciBhcmUgY29tcGFyZWQsIGFuZCB0aHVzCisg ICBhbGwgb2YgdGhlIGRpZmZlcmVudCBuYW1lcyBmb3IgdGhlIHNhbWUgcGh5c2ljYWwgZGV2aWNl IChlLmcuIGFsbCBvZgorICAgdGhvc2Ugc2hvd24gaW4gdGhlIHRhYmxlIGFib3ZlKSBpbnRlcmxv Y2sgZWZmZWN0aXZlbHkuCisKKyAgIFByaW9yIHRvIFVuaXhXYXJlIDcsIHNlcmlhbCBzcGVlZHMg aGlnaGVyIHRoYW4gMzg0MDAgYXJlIG5vdCBzdXBwb3J0ZWQuCisgICBJbiBVbml4V2FyZSA3LCB3 ZSBhbHNvIHN1cHBvcnQgNTc2MDAgYW5kIDExNTIwMCwgcGx1cyBzb21lIHVuZXhwZWN0ZWQKKyAg IG9uZXMgbGlrZSAxNDQwMCwgMjg4MDAsIGFuZCA3NjgwMCwgYnkgdmlydHVlIG9mIGEgc3RyYW5n ZSBuZXcKKyAgIGludGVyZmFjZSwgZXZpZGVudGx5IHBlY3VsaWFyIHRvIFVuaXhXYXJlIDcsIGRp c2NvdmVyZWQgd2hpbGUgZGlnZ2luZworICAgdGhyb3VnaCB0aGUgaGVhZGVyIGZpbGVzOiB0Y3Nl dHNwZWVkKCkuIEFjY2VzcyB0byB0aGlzIGludGVyZmFjZSBpcworICAgYWxsb3dlZCBvbmx5IGlu IFBPU0lYIGJ1aWxkcywgYW5kIHRodXMgdGhlIFVuaXhXYXJlIDcgdmVyc2lvbiBvZgorICAgQy1L ZXJtaXQgaXMgUE9TSVgtYmFzZWQsIHVubGlrZSBDLUtlcm1pdCBmb3IgVW5peHdhcmUgMS54IGFu ZCAyLngKKyAgIChzaW5jZSB0aGUgZWFybGllciBVbml4V2FyZSB2ZXJzaW9ucyBkaWQgbm90IHN1 cHBvcnQgaGlnaCBzZXJpYWwKKyAgIHNwZWVkcywgcGVyaW9kKS4KKworICAgSE9XRVZFUiwgdHVy bmluZyBvbiBQT1NJWCBmZWF0dXJlcyBlbmdhZ2VzIGFsbCBvZiB0aGUgIiNpZgorICAgKCFfUE9T SVhfU09VUkNFKSIgY2xhdXNlcyBpbiB0aGUgVW5peFdhcmUgaGVhZGVyIGZpbGVzLCB3aGljaCBp biB0dXJuCisgICBwcmV2ZW50IHVzIGZyb20gaGF2aW5nIG1vZGVtIHNpZ25hbHMsIGFjY2VzcyB0 byB0aGUgaGFyZHdhcmUgZmxvdworICAgY29udHJvbCBBUElzLCBzZWxlY3QoKSwgZXRjIC0tIGlu IHNob3J0LCBhbGwgdGhlIG90aGVyIHRoaW5ncyB3ZSBuZWVkCisgICBpbiBjb21tdW5pY2F0aW9u cyBzb2Z0d2FyZSwgZXNwZWNpYWxseSB3aGVuIGhpZ2ggc3BlZWRzIGFyZSB1c2VkLiBPaAorICAg dGhlIGlyb255LiBBbmQgc28gQy1LZXJtaXQgbXVzdCBiZSBzaGFtZWxlc3NseSBidXRjaGVyZWQg LS0gYXMgaXQgaGFzCisgICBiZWVuIHNvIG1hbnkgdGltZXMgYmVmb3JlIC0tIHRvIGFsbG93IHVz IHRvIGhhdmUgdGhlIG5lZWRlZCBmZWF0dXJlcworICAgZnJvbSB0aGUgUE9TSVggYW5kIG5vbi1Q T1NJWCB3b3JsZHMuIFNlZSB0aGUgVU5JWFdBUkVQT1NJWCBzZWN0aW9ucyBvZgorICAgWzQ4NF1j a3V0aW8uYy4KKworICAgQWZ0ZXIgdGhlIGJ1dGNoZXJ5LCB3ZSB3aW5kIHVwIHdpdGggVW5peHdh cmUgMi54IGhhdmluZyBmdWxsCisgICBtb2RlbS1zaWduYWwgY2FwYWJpbGl0eSwgYnV0IHBvbGl0 aWNhbGx5LWNvcnJlY3QgVW5peHdhcmUgNy54IGxhY2tpbmcKKyAgIHRoZSBhYmlsaXR5IHRvIGF1 dG9tYXRpY2FsbHkgZGV0ZWN0IGEgYnJva2VuIGNvbm5lY3Rpb24gd2hlbiBjYXJyaWVyCisgICBk cm9wcy4KKworICAgTWVhbndoaWxlIHRoZSBVbml4d2FyZSB0Y3NldHNwZWVkKCkgZnVuY3Rpb24g YWxsb3dzIGFueSBudW1iZXIgYXQgYWxsCisgICAoYW55IGxvbmcsIDAgb3IgcG9zaXRpdmUpIGFz IGFuIGFyZ3VtZW50IGFuZCBzdWNjZWVkcyBpZiB0aGUgbnVtYmVyIGlzCisgICBhIGxlZ2FsIGJp dCByYXRlIGZvciB0aGUgc2VyaWFsIGRldmljZSwgYW5kIGZhaWxzIG90aGVyd2lzZS4gVGhlcmUg aXMKKyAgIG5vIGxpc3QgYW55d2hlcmUgb2YgbGVnYWwgc3BlZWRzLiBUaHVzIHRoZSBTRVQgU1BF RUQga2V5d29yZCB0YWJsZQorICAgKCJzZXQgc3BlZWQgPyIgdG8gc2VlIGl0KSBpcyBoYXJkd2ly ZWQgYmFzZWQgb24gdHJpYWwgYW5kIGVycm9yIHdpdGgKKyAgIGFsbCBrbm93biBzZXJpYWwgc3Bl ZWRzLCB0aGUgbWF4aW11bSBiZWluZyAxMTUyMDAuIEhvd2V2ZXIsIHRvIGFsbG93CisgICBmb3Ig dGhlIHBvc3NpYmlsaXR5IHRoYXQgb3RoZXIgc3BlZWRzIG1pZ2h0IGJlIGFsbG93ZWQgaW4gdGhl IGZ1dHVyZQorICAgKG9yIHdpdGggZGlmZmVyZW50IHBvcnQgZHJpdmVycyksIHRoZSBTRVQgU1BF RUQgY29tbWFuZCBmb3IgVW5peFdhcmUgNworICAgb25seSBhbGxvd3MgeW91IHRvIHNwZWNpZnkg YW55IG51bWJlciBhdCBhbGw7IGEgd2FybmluZyBpcyBwcmludGVkIGlmCisgICB0aGUgbnVtYmVy IGlzIG5vdCBpbiB0aGUgbGlzdCwgYnV0IHRoZSBudW1iZXIgaXMgYWNjZXB0ZWQgYW55d2F5OyB0 aGUKKyAgIGNvbW1hbmQgc3VjY2VlZHMgaWYgdGNzZXRzcGVlZCgpIGFjY2VwdHMgdGhlIG51bWJl ciwgYW5kIGZhaWxzCisgICBvdGhlcndpc2UuCisKKyAgIEluIEMtS2VybWl0IDguMCB0ZXN0aW5n LCBpdCB3YXMgbm90aWNlZCB0aGF0IHRoZSBQT1NJWCBtZXRob2QgZm9yCisgICBoYW5naW5nIHVw IHRoZSBwaG9uZSBieSBkcm9wcGluZyBEVFIgKHNldCBzcGVlZCAwLCBwYXVzZSwgcmVzdG9yZQor ICAgc3BlZWQpIGRpZCBub3QgYWN0dWFsbHkgZHJvcCBEVFIuIFRoZSBBUElzIGRvIG5vdCByZXR1 cm4gYW55IGVycm9yCisgICBpbmRpY2F0aW9uLCBidXQgbm90aGluZyBoYXBwZW5zLiBJIGNoYW5n ZWQgdHRoYW5nKCkgdG8gc2tpcCB0aGUgc3BlY2lhbAorICAgY2FzZSBJIGhhZCBtYWRlIGZvciBV bml4d2FyZSBhbmQgaW5zdGVhZCBmb2xsb3cgdGhlIG5vcm1hbCBwYXRoOiBpZgorICAgVElPQ1NE VFIgaXMgZGVmaW5lZCB1c2UgdGhhdCwgb3RoZXJ3aXNlIGJsYWggYmxhaC4uLiBJdCB0dXJucyBv dXQKKyAgIFRJT0NTRFRSICppcyogZGVmaW5lZCwgYW5kIGl0IHdvcmtzLgorCisgICBTbyBpbiBV bml4d2FyZSAoYXQgbGVhc3QgaW4gMi4xLjMpIHdlIGNhbiByZWFkIG1vZGVtIHNpZ25hbHMsIGhh bmd1cCBieQorICAgdG9nZ2xpbmcgRFRSLCBhbmQgc28gb24sIEJVVC4uLiBCdXQgb25jZSB0aGUg cmVtb3RlIGhhbmdzIHVwIGFuZAorICAgQ2FycmllciBkcm9wcywgdGhlIEFQSSBmb3IgcmVhZGlu ZyBtb2RlbSBzaWduYWxzIGNlYXNlcyB0byBmdW5jdGlvbjsKKyAgIGFsdGhvdWdoIHRoZSBkZXZp Y2UgaXMgc3RpbGwgb3BlbiwgdGhlIFRJT0NNR0VUIGlvY3RsIGFsd2F5cyByYWlzZXMKKyAgIGVy cm5vIDYgPSBFTlhJTywgIk5vIHN1Y2ggZGV2aWNlIG9yIGFkZHJlc3MiLgorCisgICBPbGQgYnVz aW5lc3M6CisKKyAgIFVzaW5nIEMtS2VybWl0IDYuMCBvbiB0aGUgVW5peFdhcmUgMS4xIEFwcGxp Y2F0aW9uIFNlcnZlciwgb25lIHVzZXIKKyAgIHJlcG9ydGVkIGEgc3lzdGVtIHBhbmljIHdoZW4g dGhlIGZvbGxvd2luZyBzY3JpcHQgcHJvZ3JhbSBpcyBleGVjdXRlZDoKKworICBzZXQgbGluZSAv ZGV2L3R0eTQKKyAgc2V0IHNwZWVkIDk2MDAKKyAgb3V0cHV0IFwxMworICBjb25uZWN0CisKKyAg IFRoZSBwYW5pYyBkb2VzIG5vdCBoYXBwZW4gaWYgYSBQQVVTRSBpcyBpbnNlcnRlZDoKKworICBz ZXQgbGluZSAvZGV2L3R0eTQKKyAgc2V0IHNwZWVkIDk2MDAKKyAgcGF1c2UgMQorICBvdXRwdXQg XDEzCisgIGNvbm5lY3QKKworICAgVGhpcyBpcyB1c2luZyBhIFN0YWxsaW9uIEVhc3lJTyBjYXJk IGluc3RhbGxlZCBhcyBib2FyZCAwIG9uIElSUSAxMiBvbgorICAgYSBHYXRld2F5IDM4NiB3aXRo IHRoZSBTdGFsbGlvbi1zdXBwbGllZCBkcml2ZXIuIFRoZSBwcm9ibGVtIHdhcworICAgcmVwb3J0 ZWQgdG8gTm92ZWxsIGFuZCBTdGFsbGlvbiBhbmQgKHJlcG9ydGVkbHkpIGlzIG5vdyBmaXhlZC4K KworMy4xMS4gQy1LRVJNSVQgQU5EIEFQT0xMTyBTUjEwCisKKyAgIFsgWzQ4NV1Ub3AgXSBbIFs0 ODZdQ29udGVudHMgXSBbIFs0ODddU2VjdGlvbiBDb250ZW50cyBdIFsgWzQ4OF1OZXh0IF0KKyAg IFsgWzQ4OV1QcmV2aW91cyBdCisKKyAgIFJlcG9ydGVkbHksIHZlcnNpb24gNUEoMTkwKSwgd2hl biBidWlsdCB1bmRlciBBcG9sbG8gU1IxMCB1c2luZyAibWFrZQorICAgc3IxMC1ic2QiLCBjb21w aWxlcywgbGlua3MsIGFuZCBleGVjdXRlcyBPSywgYnV0IGxlYXZlcyB0aGUgdGVybWluYWwKKyAg IHVudXNhYmxlIGFmdGVyIGl0IGV4aXRzIC0tIHRoZSAiY3M3IiBvciAiY3M4IiAoY2hhcmFjdGVy IHNpemUpCisgICBwYXJhbWV0ZXIgaGFzIGJlY29tZSBjczUuIFRoZSB0ZXJtaW5hbCBtdXN0IGJl IHJlc2V0IGZyb20gYW5vdGhlcgorICAgdGVybWluYWwuIENhdXNlIGFuZCBjdXJlIHVua25vd24u IFN1Z2dlc3RlZCB3b3JrYXJvdW5kOiBXcmFwIEtlcm1pdCBpbgorICAgYSBzaGVsbCBzY3JpcHQg c29tZXRoaW5nIGxpa2U6CisKKyAga2VybWl0IEAqCisgIHN0dHkgc2FuZQorCiszLjEyLiBDLUtF Uk1JVCBBTkQgVEFORFkgWEVOSVggMy4wCisKKyAgIFsgWzQ5MF1Ub3AgXSBbIFs0OTFdQ29udGVu dHMgXSBbIFs0OTJdU2VjdGlvbiBDb250ZW50cyBdIFsgWzQ5M11OZXh0IF0KKyAgIFsgWzQ5NF1Q cmV2aW91cyBdCisKKyAgIEMtS2VybWl0IDcuMCB3YXMgdG9vIGJpZyB0byBiZSBidWlsdCBvbiBU YW5keSBYZW5peCwgZXZlbiBpbiBhIG1pbmltdW0KKyAgIGNvbmZpZ3VyYXRpb247IHZlcnNpb24g Ni4wIGlzIHRoZSBsYXN0IG9uZSB0aGF0IGZpdHMuCisKKyAgIFJlcG9ydGVkbHksIGluIEMtS2Vy bWl0IDYuMCwgaWYgeW91IHR5cGUgbG90cyBvZiBDdHJsLUMncyBkdXJpbmcKKyAgIGV4ZWN1dGlv biBvZiB0aGUgaW5pdGlhbGl6YXRpb24gZmlsZSwgZ2hvc3QgS2VybWl0IHByb2Nlc3NlcyB3aWxs IGJlCisgICBjcmVhdGVkLCBhbmQgd2lsbCBjb21wZXRlIGZvciB0aGUga2V5Ym9hcmQuIFRoZXkg Y2FuIG9ubHkgYmUgcmVtb3ZlZAorICAgdmlhICJraWxsIC05IiBmcm9tIGFub3RoZXIgdGVybWlu YWwsIG9yIGJ5IHJlYm9vdGluZy4gRGlhZ25vc2lzIC0tCisgICBzb21ldGhpbmcgc3RyYW5nZSBo YXBwZW5pbmcgd2l0aCB0aGUgU0lHSU5UIGhhbmRsZXIgd2hpbGUgdGhlIHByb2Nlc3MKKyAgIGlz IHJlYWRpbmcgdGhlIGRpcmVjdG9yeSAoaXQgc2VlbXMgdG8gb2NjdXIgZHVyaW5nIHRoZSBTRVQg UFJPTVBUCisgICBbXHYoZGlyKV0gLi4uIHNlcXVlbmNlKS4gQ3VyZTogdW5rbm93bi4gV29ya2Fy b3VuZDogZG9uJ3QgaW50ZXJydXB0CisgICBDLUtlcm1pdCB3aGlsZSBpdCBpcyBleGVjdXRpbmcg aXRzIGluaXQgZmlsZSBvbiB0aGUgVGFuZHkgMTYvNjAwMC4KKworMy4xMy4gQy1LRVJNSVQgQU5E IE9TRi8xIChESUdJVEFMIFVOSVgpIChUUlU2NCBVTklYKQorCisgICBbIFs0OTVdVG9wIF0gWyBb NDk2XUNvbnRlbnRzIF0gWyBbNDk3XVNlY3Rpb24gQ29udGVudHMgXSBbIFs0OThdTmV4dCBdCisg ICBbIFs0OTldUHJldmlvdXMgXQorCisgICBXaGlsZSBwdXR0aW5nIHRvZ2V0aGVyIGFuZCB0ZXN0 aW5nIEMtS2VybWl0IDguMCwgaXQgd2FzIGRpc2NvdmVyZWQgdGhhdAorICAgYmluYXJpZXMgYnVp bHQgZm9yIG9uZSB2ZXJzaW9uIG9mIFRydTY0IFVuaXggKGUuZy4gNC4wRykgbWlnaHQgZXhoaWJp dAorICAgdmVyeSBzdHJhbmdlIGJlaGF2aW9yIGlmIHJ1biBvbiBhIGRpZmZlcmVudCB2ZXJzaW9u IG9mIFRydTY0IFVuaXggKGUuZy4KKyAgIDUuMUEpLiBUaGUgdHlwaWNhbCBzeW1wdG9tIHdhcyB0 aGF0IGEgc2VjdGlvbiBvZiB0aGUgaW5pdGlhbGl6YXRpb24KKyAgIGZpbGUgd291bGQgYmUgc2tp cHBlZCwgbm90YWJseSBsb2NhdGluZyB0aGUgZGlhbGluZyBhbmQvb3IgbmV0d29yaworICAgZGly ZWN0b3J5IGFzIHdlbGwgYXMgZmluZGluZyBhbmQgZXhlY3V0aW5nIHRoZSBjdXN0b21pemF0aW9u IGZpbGUsCisgICB+Ly5teWtlcm1yYy4gVGhpcyBwcm9ibGVtIGFsc28gaXMgcmVwb3J0ZWQgdG8g b2NjdXIgb24gVHJ1NjQgVW5peCA1LjAKKyAgIChSZXYgNzMyKSBldmVuIHdoZW4gcnVubmluZyBh IEMtS2VybWl0IGJpbmFyeSB0aGF0IHdhcyBidWlsdCB0aGVyZS4KKyAgIEhvd2V2ZXIsIHRoZSBU cnU2NCA1LjFBIGJpbmFyeSB3b3JrcyBjb3JyZWN0bHkgb24gNS4wLiBHbyBmaWd1cmUuCisKKyAg IFdoZW4gbWFraW5nIFRlbG5ldCBjb25uZWN0aW9ucyB0byBhIERpZ2l0YWwgVW5peCBvciBUcnU2 NCBzeXN0ZW0sIGFuZAorICAgeW91ciBUZWxuZXQgY2xpZW50IGZvcndhcmRzIHlvdXIgdXNlciBu YW1lLCB0aGUgVGVsbmV0IHNlcnZlciBldmlkZW50bHkKKyAgIHN0dWZmcyB0aGUgdXNlcm5hbWUg aW50byBsb2dpbidzIHN0YW5kYXJkIGlucHV0LCBhbmQgeW91IHNlZToKKworICBsb2dpbjogaXZh bgorICBQYXNzd29yZDoKKworICAgVGhpcyBpcyBjbGVhcmx5IGdvaW5nIHRvIHBsYXkgaGF2b2Mg d2l0aCBzY3JpcHRzIHRoYXQgbG9vayBmb3IKKyAgICJsb2dpbjoiLiBXb3JrYXJvdW5kICh3aGVu IEtlcm1pdCBpcyB5b3VyIFRlbG5ldCBjbGllbnQpOiBTRVQgTE9HSU4KKyAgIFVTRVIgdG8gbm90 aGluZywgdG8gcHJldmVudCBLZXJtaXQgZnJvbSBzZW5kaW5nIHlvdXIgdXNlciBJRC4KKworICAg QmVmb3JlIHlvdSBjYW4gdXNlIGEgc2VyaWFsIHBvcnQgb24gYSBuZXcgRGlnaXRhbCBVbml4IHN5 c3RlbSwgeW91IG11c3QKKyAgIHJ1biB1dWNwc2V0dXAgdG8gZW5hYmxlIG9yIGNvbmZpZ3VyZSB0 aGUgcG9ydC4gRXZpZGVudGx5IHRoZSAvZGV2L3R0eTAwCisgICBhbmQgMDEgZGV2aWNlcyB0aGF0 IGFwcGVhciBpbiB0aGUgY29uZmlndXJhdGlvbiBhcmUgbm90IHVzYWJsZTsKKyAgIHV1Y3BzZXR1 cCB0dXJucyB0aGVtIGludG8gL2Rldi90dHlkMDAgYW5kIDAxLCB3aGljaCBhcmUuIE5vdGUgdGhh dAorICAgdXVjcHNldHVwIGFuZCBvdGhlciB1dWNwLWZhbWlseSBwcm9ncmFtcyBhcmUgcXVpdGUg cHJpbWl0aXZlIC0tIHRoZXkKKyAgIG9ubHkga25vdyBhYm91dCBzcGVlZHMgdXAgdG8gOTYwMCBi cHMgYW5kIHRoZWlyIHNlbGVjdGlvbiBvZiBtb2RlbXMKKyAgIGRhdGVzIGZyb20gdGhlIGVhcmx5 IDE5ODBzLiBOb25lIG9mIHRoaXMgYWZmZWN0cyBLZXJtaXQsIHRob3VnaCAtLSB3aXRoCisgICBD LUtlcm1pdCwgeW91IGNhbiB1c2Ugc3BlZWRzIHVwIHRvIDExNTIwMCBicHMgKGF0IGxlYXN0IGlu IERVNC4wIGFuZAorICAgbGF0ZXIpIGFuZCBtb2Rlcm4gbW9kZW1zIHdpdGggaGFyZHdhcmUgZmxv dyBjb250cm9sIGFuZCBhbGwgdGhlIHJlc3QuCisKKyAgIFJlcG9ydGVkbHksIGlmIGEgbW9kZW0g aXMgc2V0IGZvciAmUzAgKGFzc2VydCBEU1IgYXQgYWxsIHRpbWVzKSwgdGhlCisgICBzeXN0ZW0g cmVzZXRzIG9yIGRyb3BzIERUUiBldmVyeSAzMCBzZWNvbmRzOyByZXBvcnRlZGx5IERFQyBzYXlz IHRvIHNldAorICAgJlMxLgorCisgICBEaWdpdGFsIFVuaXggMy4yIGV2aWRlbnRseSB3YW50cyB0 byBiZWxpZXZlIHlvdXIgdGVybWluYWwgaXMgb25lIGxpbmUKKyAgIGxvbmdlciB0aGFuIHlvdSBz YXkgaXQgaXMsIGUuZy4gd2hlbiBhICJtb3JlIiBvciAibWFuIiBjb21tYW5kIGlzCisgICBnaXZl bi4gVGhpcyBpcyBoYXMgbm90aGluZyB0byBkbyB3aXRoIEMtS2VybWl0LCBidXQgdGVuZHMgdG8g YW5ub3kKKyAgIHRob3NlIHdobyB1c2UgS2VybWl0IG9yIG90aGVyIHRlcm1pbmFsIGVtdWxhdG9y cyB0byBhY2Nlc3MgRGlnaXRhbCBVbml4CisgICBzeXN0ZW1zLiBXb3JrYXJvdW5kOiB0ZWxsIFVu aXggdG8gInN0dHkgcm93cyAyMyIgKG9yIHdoYXRldmVyKS4KKworICAgUmVwb3J0ZWRseSwgdGhl cmUgaXMgc29tZSBiaXphcnJlIGJlaGF2aW9yIHdoZW4gdHJ5aW5nIHRvIHVzZSBhIHZlcnNpb24K KyAgIG9mIEMtS2VybWl0IGJ1aWx0IG9uIG9uZSBEaWdpdGFsIFVuaXggNC4wIHN5c3RlbSBvbiBh bm90aGVyIG9uZSwKKyAgIHBvc3NpYmx5IGR1ZSB0byBkaWZmZXJpbmcgT1Mgb3IgbGlicmFyeSBy ZXZpc2lvbiBsZXZlbHM7IGZvciBleGFtcGxlLAorICAgdGhlIGluYWJpbGl0eSB0byBjb25uZWN0 IHRvIGNlcnRhaW4gVENQL0lQIGhvc3RzLiBTb2x1dGlvbjogcmVidWlsZAorICAgQy1LZXJtaXQg ZnJvbSBzb3VyY2UgY29kZSBvbiB0aGUgc3lzdGVtIHdoZXJlIHlvdSB3aWxsIGJlIHVzaW5nIGl0 LgorCisgICBEaWdpdGFsIFVuaXggdGdldHN0cigpIGNhdXNlcyBhIHNlZ21lbnRhdGlvbiBmYXVs dC4gQy1LZXJtaXQgNy4wIGFkZGVkCisgICAjaWZkZWZzIHRvIGF2b2lkIGNhbGxpbmcgdGhpcyBy b3V0aW5lIGluIERpZ2l0YWwgVW5peC4gQXMgYSByZXN1bHQsIHRoZQorICAgU0NSRUVOIGNvbW1h bmRzIGFsd2F5cyBzZW5kIEFOU0kgZXNjYXBlIHNlcXVlbmNlcyAtLSBldmVuIHRob3VnaCBjdXJz ZXMKKyAgIGtub3dzIHlvdXIgYWN0dWFsIHRlcm1pbmFsIHR5cGUuCisKKyAgIFJlcG9ydGVkbHkg dGhlIFRydTY0IFVuaXggNC4wRSAxMDkxIFRlbG5ldCBzZXJ2ZXIgZG9lcyBub3QgdG9sZXJhdGUK KyAgIHN0cmVhbWluZyB0cmFuc2ZlcnMgaW50byBpdHNlbGYsIGF0IGxlYXN0IG5vdCB3aGVuIHRo ZSBzZW5kaW5nIEtlcm1pdAorICAgaXMgb24gdGhlIHNhbWUgbG9jYWwgbmV0d29yay4gU29sdXRp b246IHRlbGwgb25lIEtlcm1pdCBvciB0aGUgb3RoZXIKKyAgIChvciBib3RoKSB0byAic2V0IHN0 cmVhbWluZyBvZmYiLiBUaGlzIG1pZ2h0IG9yIG1pZ2h0IGJlIHRoZSBjYXNlIHdpdGgKKyAgIGVh cmxpZXIgYW5kL29yIGxhdGVyIFRydTY0LCBEaWdpdGFsIFVuaXgsIGFuZCBPU0YvMSByZWxlYXNl cy4KKworMy4xNC4gQy1LRVJNSVQgQU5EIFNHSSBJUklYCisKKyAgIFsgWzUwMF1Ub3AgXSBbIFs1 MDFdQ29udGVudHMgXSBbIFs1MDJdU2VjdGlvbiBDb250ZW50cyBdIFsgWzUwM11OZXh0IF0KKyAg IFsgWzUwNF1QcmV2aW91cyBdCisKKyAgIFNlZSBhbHNvOgorICAgICAqIFRoZSBbNTA1XWNvbXAu c3lzLnNnaS5taXNjIGFuZCBbNTA2XWNvbXAuc3lzLnNnaS5hZG1pbiBuZXdzZ3JvdXBzLgorICAg ICAgIFs1MDddVGhlIFNHSSB3ZWJzaXRlCisgICAgICogVGhlIFNHSSBGQVE6CisgICAgICAgICAg KyBbNTA4XWh0dHA6Ly93d3ctdml6LnRhbXUuZWR1L35zZ2ktZmFxLworICAgICAgICAgICsgWzUw OV1mdHA6Ly92aXoudGFtdS5lZHUvcHViL3NnaS9mYXEvCisKKyAgIEFib3V0IElSSVggdmVyc2lv biBudW1iZXJzOiAidW5hbWUgLWEiIHRlbGxzIHRoZSAidHdvLWRpZ2l0IiB2ZXJzaW9uCisgICBu dW1iZXIsIHN1Y2ggYXMgIjUuMyIgb3IgIjYuNSIuIFRoZSB0aHJlZS1kaWdpdCBmb3JtIGNhbiBi ZSBzZWVuIHdpdGgKKyAgICJ1bmFtZSAtUiIuICh0aGlzIGluZm9ybWF0aW9uIGlzIHVuYXZhaWxh YmxlIGF0IHRoZSBzaW1wbGUgQVBJIGxldmVsKS4KKyAgIFN1cHBvc2VkbHkgYWxsIHRocmVlLWRp Z2l0IHZlcnNpb25zIHdpdGhpbiB0aGUgc2FtZSB0d28tZGlnaXQgdmVyc2lvbgorICAgKGUuZy4g Ni41LjIsIDYuNS4zKSBhcmUgYmluYXJ5IGNvbXBhdGlibGU7IGkuZS4gYSBiaW5hcnkgYnVpbHQg b24gYW55CisgICBvbmUgb2YgdGhlbSBzaG91bGQgcnVuIG9uIGFsbCBvdGhlcnMuIFRoZSAibSIg c3VmZml4IGRlbm90ZXMganVzdAorICAgcGF0Y2hlczsgdGhlICJmIiBzdWZmaXggaW5kaWNhdGVz IHRoYXQgZmVhdHVyZXMgd2VyZSBhZGRlZC4KKworICAgQW4gSVJJWCBiaW5hcnkgYnVpbHQgb24g bG93ZXIgTUlQUyBtb2RlbCAoSW5zdHJ1Y3Rpb24gU2V0IEFyY2hpdGVjdHVyZSwKKyAgIElTQSkg Y2FuIHJ1biBvbiBoaWdoZXIgbW9kZWxzLCBidXQgbm90IHZpY2UgdmVyc2E6CisKKyAgICAgTUlQ UzEgUjMwMDAgYW5kIGJlbG93CisgICAgIE1JUFMyIFI0MDAwCisgICAgIE1JUFMzIFI0eDAwCisg ICAgIE1JUFM0IFI1MDAwIGFuZCBhYm92ZQorCisgICBGdXJ0aGVybW9yZSwgdGhlcmUgYXJlIGRp ZmZlcmVudCBBcHBsaWNhdGlvbiBCaW5hcnkgSW50ZXJmYWNlcyAoQUJJcyk6CisKKyAgICAgQ09G RiAgICAzMiBiaXRzLCBJUklYIDUuMywgNS4yLCA1LjEsIDQueCBhbmQgYmVsb3cKKyAgICAgbzMy IEVMRiAzMiBiaXRzLCBJUklYIDUuMywgNi4wIC0gNi41CisgICAgIE4zMiBFTEYgMzIgYml0cywg SVJJWCA2LjIgLSA2LjUKKyAgICAgTjY0IEVMRiA2NCBiaXRzLCBJUklYIDYuMiAtIDYuNQorCisg ICBUaHVzIGEgcHJlYnVpbHQgSVJJWCBiaW5hcnkgd29ya3Mgb24gYSBwYXJ0aWN1bGFyIG1hY2hp bmUgb25seSBpZiAoYSkKKyAgIHRoZSBtYWNoaW5lJ3MgSVJJWCB2ZXJzaW9uICh0byBvbmUgZGVj aW1hbCBwbGFjZSkgaXMgZXF1YWwgdG8gb3IKKyAgIGdyZWF0ZXIgdGhhbiB0aGUgdmVyc2lvbiB1 bmRlciB3aGljaCB0aGUgYmluYXJ5IHdhcyBidWlsdDsgKGIpIHRoZQorICAgbWFjaGluZSdzIE1J UFMgbGV2ZWwgaXMgZ3JlYXRlciBvciBlcXVhbCB0byB0aGF0IG9mIHRoZSBiaW5hcnk7IGFuZCAo YykKKyAgIHRoZSBtYWNoaW5lIHN1cHBvcnRzIHRoZSBBQkkgb2YgdGhlIGJpbmFyeS4gSWYgYWxs IHRocmVlIGNvbmRpdGlvbnMgYXJlCisgICBub3Qgc2F0aXNmaWVkLCBvZiBjb3Vyc2UsIHlvdSBj YW4gYnVpbGQgYSBiaW5hcnkgeW91cnNlbGYgZnJvbSBzb3VyY2UKKyAgIGNvZGUgc2luY2UsIHVu bGlrZSBzb21lIG90aGVyIFVuaXggdmVuZG9ycywgU0dJIGRvZXMgc3VwcGx5IGEgQworICAgY29t cGlsZXIgYW5kIGxpYnJhcmllcy4KKworICAgU0dJIGRpZCBub3Qgc3VwcGx5IGFuIEFQSSBmb3Ig aGFyZHdhcmUgZmxvdyBjb250cm9sIHByaW9yIHRvIElSSVggNS4yLgorICAgQy1LZXJtaXQgNi4x IGFuZCBoaWdoZXIgZm9yIElSSVggNS4yIGFuZCBoaWdoZXIgc3VwcG9ydHMgaGFyZHdhcmUgZmxv dworICAgY29udHJvbCBpbiB0aGUgbm9ybWFsIHdheSwgdmlhICJzZXQgZmxvdyBydHMvY3RzIi4K KworICAgRm9yIGhhcmR3YXJlIGZsb3cgY29udHJvbCBvbiBlYXJsaWVyIElSSVggYW5kL29yIEMt S2VybWl0IHZlcnNpb25zLCB1c2UKKyAgIHRoZSB0dHlmKiAobW9kZW0gY29udHJvbCBBTkQgaGFy ZHdhcmUgZmxvdyBjb250cm9sKSBkZXZpY2VzIGFuZCBub3QgdGhlCisgICB0dHlkKiAoZGlyZWN0 KSBvciB0dHltKiAobW9kZW0gY29udHJvbCBidXQgbm8gaGFyZHdhcmUgZmxvdyBjb250cm9sKQor ICAgb25lcywgYW5kIG9idGFpbiB0aGUgcHJvcGVyICJoYXJkd2FyZSBoYW5kc2hha2luZyIgY2Fi bGUgZnJvbSBTR0ksCisgICB3aGljaCBpcyBpbmNvbXBhdGlibGUgd2l0aCB0aGUgb25lcyBmb3Ig dGhlIE1hY2ludG9zaCBhbmQgTmVYVCBldmVuCisgICB0aG91Z2ggdGhleSBsb29rIHRoZSBzYW1l ICgibWFuIHNlcmlhbCIgZm9yIGZ1cnRoZXIgaW5mbykgYW5kIHRlbGwKKyAgIEtlcm1pdCB0byAi c2V0IGZsb3cga2VlcCIgYW5kICJzZXQgbW9kZW0gZmxvdyBydHMvY3RzIi4KKworICAgU2VyaWFs IHNwZWVkcyBoaWdoZXIgdGhhbiAzODQwMCBhcmUgYXZhaWxhYmxlIGluIElSSVggNi4yIGFuZCBs YXRlciwgb24KKyAgIE8tY2xhc3MgbWFjaGluZXMgKGUuZy4gT3JpZ2luLCBPY3RhbmUpIG9ubHks IGFuZCBhcmUgc3VwcG9ydGVkIGJ5CisgICBDLUtlcm1pdCA3LjAgYW5kIGxhdGVyLiBDb21tYW5k cyBzdWNoIGFzICJzZXQgc3BlZWQgMTE1MjAwIiBtYXkgYmUKKyAgIGdpdmVuIG9uIG90aGVyIG1v ZGVscyAoZS5nLiBJcmlzLCBJbmR5LCBJbmRpZ28pIGJ1dCB3aWxsIGZhaWwgYmVjYXVzZQorICAg dGhlIE9TIHJlcG9ydHMgYW4gaW52YWxpZCBzcGVlZCBmb3IgdGhlIGRldmljZS4KKworICAgRXhw ZXJpbWVudGF0aW9uIHdpdGggYm90aCBJUklYIDUuMyBhbmQgNi4yIHNob3dzIHRoYXQgd2hlbiBs b2dnZWQgaW4gdG8KKyAgIElSSVggdmlhIFRlbG5ldCwgdGhhdCByZW1vdGUtbW9kZSBDLUtlcm1p dCBjYW4ndCBzZW5kIGZpbGVzIGlmIHRoZQorICAgcGFja2V0IGxlbmd0aCBpcyBncmVhdGVyIHRo YW4gNDA5NjsgdGhlIFRlbG5ldCBzZXJ2ZXIgZXZpZGVudGx5IGhhcworICAgdGhpcyByZXN0cmlj dGlvbiAob3IgYnVnKSwgc2luY2UgdGhlcmUgaXMgbm8gcHJvYmxlbSBzZW5kaW5nIGxvbmcKKyAg IHBhY2tldHMgb24gc2VyaWFsIG9yIHJsb2dpbiBjb25uZWN0aW9ucy4gSG93ZXZlciwgaXQgY2Fu IHJlY2VpdmUgZmlsZXMKKyAgIHdpdGggbm8gcHJvYmxlbSBpZiB0aGUgcGFja2V0IGxlbmd0aCBp cyBncmVhdGVyIHRoYW4gNDA5Ni4gQXMgYQorICAgd29ya2Fyb3VuZCwgdGhlIEZBU1QgbWFjcm8g Zm9yIElSSVggaW5jbHVkZXMgInNldCBzZW5kIHBhY2tldC1sZW5ndGgKKyAgIDQwMDAiLiBJUklY IDYuNS4xIGRvZXMgbm90IGhhdmUgdGhpcyBwcm9ibGVtLCBzbyBldmlkZW50bHkgaXQgd2FzIGZp eGVkCisgICBzb21lIHRpbWUgYWZ0ZXIgSVJJWCA2LjIuIFRlc3RzIHNob3cgZmlsZS10cmFuc2Zl ciBzcGVlZHMgYXJlIGJldHRlcgorICAgKG5vdCB3b3JzZSkgd2l0aCA4SyBwYWNrZXRzIHRoYW4g d2l0aCA0SyBwYWNrZXRzIGZyb20gSVJJWCA2LjUuMS4KKworICAgUmVwb3J0ZWRseSBzb21lIElu ZHlzIGhhdmUgYmFkIHNlcmlhbCBwb3J0IGhhcmR3YXJlLiBJUklYIDUuMiwgZm9yCisgICBleGFt cGxlLCBuZWVkcyBwYXRjaCAxNTEgdG8gd29yayBhcm91bmQgdGhpczsgb3IgdXBncmFkZSB0byBh IGxhdGVyCisgICByZWxlYXNlLiBTaW1pbGFybHksIElSSVggNS4yIGhhcyBzZXZlcmFsIHByb2Js ZW1zIHdpdGggc2VyaWFsIGkvbywgZmxvdworICAgY29udHJvbCwgZXRjLiBBZ2FpbiwgcGF0Y2gg b3IgdXBncmFkZS4KKworICAgUmVwb3J0ZWRseSBvbiBtYWNoaW5lcyB3aXRoIElSSVggNC4wLCBL ZXJtaXQgY2Fubm90IGJlIHN1c3BlbmRlZCBieQorICAgdHlwaW5nIHRoZSBzdXNwZW5kICgic3d0 Y2giKSBjaGFyYWN0ZXIgaWYgaXQgd2FzIHN0YXJ0ZWQgZnJvbSBjc2gsIGV2ZW4KKyAgIHRob3Vn aCBvdGhlciBwcm9ncmFtcyBjYW4gYmUgc3VzcGVuZGVkIHRoaXMgd2F5LCBhbmQgZXZlbiB0aG91 Z2ggdGhlIFoKKyAgIGFuZCBTVVNQRU5EIGNvbW1hbmRzIHN0aWxsIHdvcmsgY29ycmVjdGx5LiBU aGlzIGlzIGV2aWRlbnRseSBiZWNhdXNlCisgICBJUklYJ3MgY3NoIGRvZXMgbm90IGRlbGl2ZXIg dGhlIFNJR1RTVFAgc2lnbmFsIHRvIEtlcm1pdC4gVGhlIHJlYXNvbgorICAgb3RoZXIgcHJvZ3Jh bXMgY2FuIGJlIHN1c3BlbmRlZCBpbiB0aGUgc2FtZSBlbnZpcm9ubWVudCBpcyBwcm9iYWJseQor ICAgdGhhdCB0aGV5IGRvIG5vdCB0cmFwIFNJR1RTVFAgdGhlbXNlbHZlcywgc28gdGhlIHNoZWxs IGlzIGRvaW5nIHRoZQorICAgc3VzcGVuZGluZyByYXRoZXIgdGhhbiB0aGUgYXBwbGljYXRpb24u CisKKyAgIEFsc28gc2VlIG5vdGVzIGFib3V0IElSSVggMy54IGluIHRoZSBbNTEwXUMtS2VybWl0 IGZvciBVbml4CisgICBJbnN0YWxsYXRpb24gSW5zdHJ1Y3Rpb25zLgorCisgICBJZiB5b3UgaGF2 ZSBwcm9ibGVtcyBtYWtpbmcgVENQL0lQIGNvbm5lY3Rpb25zIGluIHZlcnNpb25zIG9mIElSSVgK KyAgIGJ1aWx0IHdpdGggR0NDIDIuOTUuMiwgc2VlIHRoZSBidWdzIHNlY3Rpb24gb2Y6CisKKyAg WzUxMV1odHRwOi8vZnJlZXdhcmUuc2dpLmNvbS9JbnN0YWxsYWJsZS9nY2MtMi45NS4yLmh0bWwu CisKKyAgIFJlcG9ydGVkbHksIGlmIHlvdSBhbGxvdyBnY2MgdG8gY29tcGlsZSBDLUtlcm1pdCBv biBJcml4IHlvdSBzaG91bGQgYmUKKyAgIGF3YXJlIHRoYXQgdGhlcmUgbWlnaHQgYmUgcHJvYmxl bXMgd2l0aCBzb21lIG9mIHRoZSBuZXR3b3JrIGNvZGUuIFRoZQorICAgc3BlY2lmaWNzIGFyZSBh dAorICAgWzUxMl1odHRwOi8vZnJlZXdhcmUuc2dpLmNvbS9JbnN0YWxsYWJsZS9nY2MtMi45NS4y Lmh0bWw7IHNjcm9sbCBkb3duCisgICB0byB0aGUgImtub3duIGJ1Z3MiIHNlY3Rpb24gYXQgdGhl IGVuZCBvZiB0aGUgZG9jdW1lbnQuCisKKzMuMTUuIEMtS0VSTUlUIEFORCBUSEUgQkVCT1gKKwor ICAgWyBbNTEzXVRvcCBdIFsgWzUxNF1Db250ZW50cyBdIFsgWzUxNV1TZWN0aW9uIENvbnRlbnRz IF0gWyBbNTE2XU5leHQgXQorICAgWyBbNTE3XVByZXZpb3VzIF0KKworICAgU2VlIGFsc286IFRo ZSBbNTE4XWNvbXAuc3lzLmJlIG5ld3Nncm91cC4KKworICAgVGhlIEJlQm94IGhhcyBiZWVuIGRp c2NvbnRpbnVlZCBhbmQgQmVPUyByZXBvc2l0aW9uZWQgZm9yIFBDIHBsYXRmb3Jtcy4KKyAgIFRo ZSBQT1NJWCBwYXJ0cyBvZiBCZU9TIGFyZSBub3QgZmluaXNoZWQsIG5vciBpcyB0aGUgc29ja2V0 cyBsaWJyYXJ5LAorICAgdGhlcmVmb3JlIGEgZnVsbHkgZnVuY3Rpb25hbCB2ZXJzaW9uIG9mIEMt S2VybWl0IGlzIG5vdCBwb3NzaWJsZS4gSW4KKyAgIHZlcnNpb24gNi4wIG9mIEMtS2VybWl0LCB3 cml0dGVuIGZvciBCZU9TIERSNywgaXQgd2FzIHBvc3NpYmxlIHRvOgorCisgICAgICogc2V0IGxp bmUgL2Rldi9zZXJpYWwyIChhbmQgcHJvYmFibHkgdGhlIG90aGVyIHNlcmlhbCBwb3J0cykKKyAg ICAgKiBzZXQgc3BlZWQgMTE1MjAwIChhbmQgYXQgbGVhc3Qgc29tZSBvZiB0aGUgbG93ZXIgYmF1 ZCByYXRlcykKKyAgICAgKiBjb25uZWN0CisgICAgICogc2V0IG1vZGVtIHR5cGUgaGF5ZXMgKGFu ZCBsaWtlbHkgb3RoZXJzLCB0b28pCisgICAgICogZGlhbCBwaG9uZS1udW1iZXIKKyAgICAgKiBz ZXQgc2VuZCBwYWNrZXQtbGVuZ3RoIDIwNDggKG90aGVyIGxlbmd0aHMgZm9yIGJvdGggc2VuZCBh bmQKKyAgICAgICByZWNlaXZlKQorICAgICAqIHNldCByZWNlaXZlIHBhY2tldCBsZW5ndGggMjA0 OAorICAgICAqIHNldCBmaWxlIHR5cGUgYmluYXJ5ICh0ZXh0IG1vZGUgd29ya3MsIHRvbykgKHdp dGggcmVtb3RlIGtlcm1pdAorICAgICAgIHNlc3Npb24gaW4gc2VydmVyIG1vZGUpCisgICAgICog cHV0IGJlZHJvcC5qcGcKKyAgICAgKiBnZXQgYmVkcm9wLmpwZworICAgICAqIGdldCBiZWRyb3Au anBnIGJlZHJvcC5qcGcyCisgICAgICogZmluaXNoLCBieWUKKworICAgVGhlIGZvbGxvd2luZyBk byBub3Qgd29yazoKKyAgICAgKiBrZXJtaXQgZG9lcyBub3QgZGV0ZWN0IG1vZGVtIGhhbmd1cAor ICAgICAqICEvUlVOL1BVU0ggW2NvbW1hbmRsaW5lIGNvbW1hbmRdCisgICAgICogUnVubmluZyBr ZXJtaXQgaW4gcmVtb3RlIG1vZGUKKyAgICAgKiBVc2luZyBvdGhlciBwcm90b2NvbHMgKHgveS96 bW9kZW0pCisgICAgICogVENQIG5ldHdvcmtpbmcgaW50ZXJmYWNlIChCZSdzIFRDUC9JUCBBUEkg aGFzIGEgd2F5cyB0byBnbywgc3RpbGwpCisKKyAgIEMtS2VybWl0IGRvZXMgbm90IHdvcmsgb24g QmVPUyBEUjggYmVjYXVzZSBvZiBjaGFuZ2VzIGluIHRoZSB1bmRlcmx5aW5nCisgICBBUElzLiBV bmZvcnR1bmF0ZWx5IG5vdCBlbm91Z2ggY2hhbmdlcyB3ZXJlIG1hZGUgdG8gYWxsb3cgdGhlIHJl Z3VsYXIKKyAgIFBPU0lYLWJhc2VkIEMtS2VybWl0IHRvIHdvcmsgZWl0aGVyLiBOb3RlOiB0aGUg bGFjayBvZiBhIGZvcmsoKSBzZXJ2aWNlCisgICByZXF1aXJlcyB0aGUgc2VsZWN0KCktYmFzZWQg Q09OTkVDVCBtb2R1bGUsIGJ1dCB0aGVyZSBpcyBubyBzZWxlY3QoKS4KKyAgIFRoZXJlIGlzIGEg c2VsZWN0KCkgaW4gRFI4LCBidXQgaXQgZG9lc24ndCB3b3JrLgorCisgICBDLUtlcm1pdCA3LjAg d2FzIGJ1aWx0IGZvciBCZU9TIDQuNSBhbmQgd29ya3MgaW4gcmVtb3RlIG1vZGUuIEl0IGRvZXMK KyAgIG5vdCBpbmNsdWRlIG5ldHdvcmtpbmcgc3VwcG9ydCBzaW5jZSB0aGUgQVBJcyBhcmUgc3Rp bGwgbm90IHRoZXJlLiBJdAorICAgaXMgbm90IGtub3duIGlmIGRpYWxpbmcgb3V0IHdvcmtzLCBi dXQgcHJvYmFibHkgbm90LiBCZSBleHBlcnRzIGFyZQorICAgd2VsY29tZSB0byBsZW5kIGEgaGFu ZC4KKworMy4xNi4gQy1LRVJNSVQgQU5EIERHL1VYCisKKyAgIFsgWzUxOV1Ub3AgXSBbIFs1MjBd Q29udGVudHMgXSBbIFs1MjFdU2VjdGlvbiBDb250ZW50cyBdIFsgWzUyMl1OZXh0IF0KKyAgIFsg WzUyM11QcmV2aW91cyBdCisKKyAgIFNvbWVib2R5IGRvd25sb2FkZWQgdGhlIEMtS2VybWl0IDYu MCBiaW5hcnkgYnVpbHQgdW5kZXIgREcvVVggNS40MCBhbmQKKyAgIHJhbiBpdCB1bmRlciBERy9V WCA1LjRSMy4xMCAtLSBpdCB3b3JrZWQgT0sgZXhjZXB0IHRoYXQgZmlsZSBkYXRlcyBmb3IKKyAg IGluY29taW5nIGZpbGVzIHdlcmUgYWxsIHdyaXR0ZW4gYXMgMSBKYW4gMTk3MC4gQ2F1c2UgYW5k IGN1cmUgdW5rbm93bi4KKyAgIFdvcmthcm91bmQ6IFNFVCBBVFRSSUJVVEUgREFURSBPRkYuIEJl dHRlcjogVXNlIGEgdmVyc2lvbiBvZiBDLUtlcm1pdAorICAgYnVpbHQgdW5kZXIgYW5kIGZvciBE Ry9VWCA1LjRSMy4xMC4KKworMy4xNy4gQy1LRVJNSVQgQU5EIFNFUVVFTlQgRFlOSVgKKworICAg WyBbNTI0XVRvcCBdIFsgWzUyNV1Db250ZW50cyBdIFsgWzUyNl1TZWN0aW9uIENvbnRlbnRzIF0g WyBbNTI3XU5leHQgXQorICAgWyBbNTI4XVByZXZpb3VzIF0KKworICAgUmVwb3J0ZWRseSwgd2hl biBjb21pbmcgaW50byBhIFNlcXVlbnQgVW5peCAoRFlOSVgpIHN5c3RlbSB0aHJvdWdoIGFuCisg ICBYLjI1IGNvbm5lY3Rpb24sIEtlcm1pdCBkb2Vzbid0IHdvcmsgcmlnaHQgYmVjYXVzZSB0aGUg U2VxdWVudCdzCisgICBGSU9OUkVBRCBpb2N0bCByZXR1cm5zIGluY29ycmVjdCBkYXRhLiBUbyB3 b3JrIGFyb3VuZCwgdXNlIHRoZQorICAgMS1jaGFyYWN0ZXItYXQtYS10aW1lIHZlcnNpb24gb2Yg bXlyZWFkKCkgaW4gY2t1dGlvLmMgKGkuZS4gdW5kZWZpbmUKKyAgIE1ZUkVBRCBpbiBja3V0aW8u YyBhbmQgcmVidWlsZCB0aGUgcHJvZ3JhbSkuIFRoaXMgaXMgdW5zYXRpc2Z5aW5nCisgICBiZWNh dXNlIHR3byB2ZXJzaW9ucyBvZiB0aGUgcHJvZ3JhbSB3b3VsZCBiZSBuZWVkZWQgLS0gb25lIGZv ciB1c2Ugb3ZlcgorICAgWC4yNSwgYW5kIHRoZSBvdGhlciBmb3Igc2VyaWFsIGFuZCBUQ1AvSVAg Y29ubmVjdGlvbnMuCisKKzMuMTguIEMtS0VSTUlUIEFORCBGUkVFQlNELCBPUEVOQlNELCBhbmQg TkVUQlNECisKKyAgIFsgWzUyOV1Ub3AgXSBbIFs1MzBdQ29udGVudHMgXSBbIFs1MzFdU2VjdGlv biBDb250ZW50cyBdIFsgWzUzMl1OZXh0IF0KKyAgIFsgWzUzM11QcmV2aW91cyBdCisKKyAgIFNv bWUgTmViQlNEIHVzZXJzIGhhdmUgcmVwb3J0ZWQgZGlmZmljdWx0eSBlc2NhcGluZyBiYWNrIGZy b20gQ09OTkVDVAorICAgbW9kZSwgdXN1YWxseSB3aGVuIHJ1bm5pbmcgTmV0QlNEIG9uIG5vbi1Q QyBoYXJkd2FyZS4gUHJvYmFibHkgYQorICAga2V5Ym9hcmQgaXNzdWUuCisKKyAgIE5ldEJTRCB1 c2VycyBoYXZlIGFsc28gcmVwb3J0ZWQgdGhhdCBDLUtlcm1pdCBkb2Vzbid0IHBvcCBiYWNrIHRv IHRoZQorICAgcHJvbXB0IGlmIHRoZSBtb2RlbSBkcm9wcyBjYXJyaWVyLiBUaGlzIG5lZWRzIHRv IGJlIGNoZWNrZWQgb3V0ICYgZml4ZWQKKyAgIGlmIHBvc3NpYmxlLgorCisgICAoQWxsIHRoZSBh Ym92ZSBzZWVtcyB0byB3b3JrIHByb3Blcmx5IGluIEMtS2VybWl0IDcuMCBhbmQgbGF0ZXIuKQor CiszLjE5LiBDLUtFUk1JVCBBTkQgTUFDIE9TIFgKKworICAgWyBbNTM0XVRvcCBdIFsgWzUzNV1D b250ZW50cyBdIFsgWzUzNl1TZWN0aW9uIENvbnRlbnRzIF0gWyBbNTM3XU5leHQgXQorICAgWyBb NTM4XVByZXZpb3VzIF0KKworICAgTWFjIE9TIFggaXMgQXBwbGUncyA0LjRCU0QgVW5peCB2YXJp ZXR5LCBjbG9zZWx5IHJlbGF0ZWQgdG8gRnJlZUJTRCwKKyAgIGJ1dCBkaWZmZXJlbnQuICJ1bmFt ZSAtYSIgaXMgc2luZ3VsYXJseSB1bmluZm9ybWF0aXZlLCBhcyBpbiBMaW51eCwKKyAgIGdpdmlu ZyBvbmx5IHRoZSBEYXJ3aW4ga2VybmVsIHZlcnNpb24gbnVtYmVyLiBUaGUgd2F5IHRvIGZpbmQg b3V0IHRoZQorICAgYWN0dWFsIE1hYyBPUyBYIHZlcnNpb24gaXMgd2l0aAorCisgICAgIC91c3Iv YmluL3N3X3ZlcnMgLXByb2R1Y3ROYW1lCisgICAgIC91c3IvYmluL3N3X3ZlcnMgLXByb2R1Y3RW ZXJzaW9uCisKKyAgIG9yOgorCisgICAgIGZncmVwIC1BIDEgJ1Byb2R1Y3RWZXJzaW9uJworICAg ICAvU3lzdGVtL0xpYnJhcnkvQ29yZVNlcnZpY2VzL1N5c3RlbVZlcnNpb24ucGxpc3QKKworICAg SGVyZSBhcmUgc29tZSBwb2ludHMgdG8gYmUgYXdhcmUgb2Y6CisKKyAgICAgKiBBIGJpZyBnb3Rj aGEgZm9yIEtlcm1pdCB1c2VycyBpcyB0aGF0IE1hYyBPUyBYIGRvZXMgbm90IHN1cHBvcnQKKyAg ICAgICBzZXJpYWwgcG9ydHMgYW5kLCBhcyBmYXIgYXMgSSBjYW4gdGVsbCwgZG9lc24ndCBzdXBw b3J0IGl0cworICAgICAgIGJ1aWx0LWluIG1vZGVtIGVpdGhlciwgZm9yIGFueXRoaW5nIG90aGVy IHRoYW4gbWFraW5nIEludGVybmV0CisgICAgICAgY29ubmVjdGlvbnMuIE1hY2ludG9zaGVzIGNh cGFibGUgb2YgcnVubmluZyBNYWMgT1MgWCwgc3VjaCBhcyB0aGUKKyAgICAgICBHNSBhbmQgbGF0 ZXIsIGNvbWUgd2l0aG91dCBzZXJpYWwgcG9ydHMgYW5kIHdpdGhvdXQgYW55IEFQSXMgdG8KKyAg ICAgICBzdXBwb3J0IHRoZW0sIGFuZCBhbHNvIHdpdGhvdXQgdGhlIFVVQ1AgZmFtaWx5IG9mIHBy b2dyYW1zCisgICAgICAgKGluY2x1ZGluZyBjdSksIG5vciBhbnkgc3RhbmRhcmQgZm9yIHNlcmlh bC1wb3J0IGxvY2tmaWxlCisgICAgICAgZGlyZWN0b3J5LgorICAgICAqIEVhcmx5IHZlcnNpb25z IG9mIE1hYyBPUyBYIGNhbWUgd2l0aG91dCBDdXJzZXMsIFRlcm1saWIsIG9yCisgICAgICAgVGVy bWluZm8gbGlicmFyaWVzLiBMYXRlciB2ZXJzaW9ucyBzZWVtIHRvIGhhdmUgbmN1cnNlcyAoaXQg d291bGQKKyAgICAgICBzZWVtIHRoYXQgTWFjIE9TIFggMTAuMy45IHdhcyB0aGUgZmlyc3QgbWF0 dXJlIGFuZCBjb21wbGV0ZSB2ZXJzaW9uCisgICAgICAgb2YgTWFjIE9TIFgpLiBLZXJtaXQgdXNl cyBjdXJzZXMgZm9yIGl0cyBmaWxlLXRyYW5zZmVyIGRpc3BsYXkuIFNlZQorICAgICAgIGVsc2V3 aGVyZSBhYm91dCBjdXJzZXMtdnMtbmN1cnNlcyBjb25mdXNpb24uCisgICAgICogSW4gdGhlIEhG UysgZmlsZSBzeXN0ZW0sIGZpbGVuYW1lcyBhcmUgY2FzZS1mb2xkZWQuIFRodXMgIm1ha2VmaWxl IgorICAgICAgIGFuZCAiTWFrZWZpbGUiIGFyZSB0aGUgc2FtZSBmaWxlLiBTbywgZm9yIGV4YW1w bGUsIHN1cHBvc2UgeW91IGFyZQorICAgICAgIHNlbmRpbmcgdHdvIGRpc3RpbmN0IGZpbGVzLCBG b28gYW5kIEZPTywgZnJvbSAoc2F5KSBMaW51eCB0byBNYWMgT1MKKyAgICAgICBYLiBUaGlzIHdp bGwgcHJvZHVjZSBhIGZpbGUgY29sbGlzaW9uIHRoYXQgd2lsbCBiZSBoYW5kbGVkCisgICAgICAg YWNjb3JkaW5nIHRvIE1hYyBPUyBYIEMtS2VybWl0J3MgRklMRSBDT0xMSVNJT04gc2V0dGluZywg d2hpY2ggYnkKKyAgICAgICBkZWZhdWx0IGlzIEJBQ0tVUCwgc28gdGhlIE1hYyB3aWxsIHdpbmQg dXAgd2l0aCBmaWxlcyBjYWxsZWQgRk9PCisgICAgICAgYW5kIEZvby5+MX4uCisgICAgICogSFNG KyBmaWxlcyB0aGF0IGFyZSBjb21wb3NlZCBvZiBhIHJlc291cmNlIGZvcmsgYW5kIGEgZGF0YSBm b3JrLi4uCisgICAgICAgSSBkb3VidCB0aGF0IEMtS2VybWl0IGRvZXMgYW55dGhpbmcgdXNlZnVs IHdpdGggdGhlbS4gVGhlcmUgaXMgbm8KKyAgICAgICBjb2RlIGluIEMtS2VybWl0IGZvciB0cmFk aXRpb25hbCB0d28tZm9ya2VkIE1hY2ludG9zaCBmaWxlcywgYnV0IGl0CisgICAgICAgY291bGQg YmUgYWRkZWQgaWYgdGhlcmUgaXMgYW55IGRlbWFuZCAoY29kZSBmb3IgdGhpcyBleGlzdGVkIGlu CisgICAgICAgWzUzOV1NYWMgS2VybWl0LCB0aGUgb2xkIHByZS1NYWMtT1MtWCBNYWNpbnRvc2gg dmVyc2lvbiBvZgorICAgICAgIEMtS2VybWl0KS4KKyAgICAgKiBJbiBjYXNlIHlvdSB3YW50IHRv IHRyYW5zZmVyIGEgdHJhZGl0aW9uYWwgTWFjaW50b3NoIHRleHQgZmlsZSAob3IKKyAgICAgICBk YXRhIGZvcmsgb2YgYSBmaWxlIHRoYXQgaXMgcGxhaW4gdGV4dCksIHlvdSBjYW4gdXNlIHRoZXNl IEMtS2VybWl0CisgICAgICAgY29tbWFuZHM6CisKK3NldCBmaWxlIGVvbCBjcgorc2V0IGZpbGUg Y2hhcmFjdGVyLXNldCBhcHBsZS1xdWlja2RyYXcKK3NlbmQgL3RleHQgZmlsZW5hbWUKKworICAg ICAqIEZpbGUgb3IgcGF0aG5hbWVzIHRoYXQgaW5jbHVkZSBzcGFjZXMgbXVzdCBiZSBlbmNsb3Nl ZCBpbiBlaXRoZXIKKyAgICAgICBkb3VibGVxdW90ZXMgb3IgY3VybHkgYnJhY2VzIGluIEMtS2Vy bWl0IGNvbW1hbmRzLgorICAgICAqIE1hYyBPUyBYIGNhbiB1c2UgYSB0aGlyZC1wYXJ0eSBwYWNr YWdlIG1hbmFnZXIgY2FsbGVkICJmaW5rIi4KKyAgICAgICBWYXJpb3VzIGZpbmsgcGFja2FnZXMg Zm9yIEMtS2VybWl0IGFyZSBmbG9hdGluZyBhcm91bmQgdGhhdCBhcmUgbm90CisgICAgICAgc3Rh bmRhcmQgcmVsZWFzZXMuIEZvciBleGFtcGxlLCB0aGVyZSdzIGEgQy1LZXJtaXQgOC4wLjIwMSBw YWNrYWdlCisgICAgICAgaW4gd2hpY2ggQy1LZXJtaXQgd2FzIG1vZGlmaWVkIChhdCBsZWFzdCkg dG8gdXNlIGEgVVVDUCBsb2NrZmlsZQorICAgICAgIGRpcmVjdG9yeSB0aGF0IGRvZXMgbm90IGV4 aXN0IG9uIHZhbmlsbGEgTWFjIE9TIFggc3lzdGVtcy4KKworTWFjIE9TIFggYW5kIFNlcmlhbCBQ b3J0cworCisgICBBcHBsZSBpcyBpbiB0aGUgZm9yZWZyb250IG9mIGNvbXBhbmllcyB0aGF0IGJl bGlldmUgc2VyaWFsIHBvcnRzIGhhdmUKKyAgIG5vIHVzZSBpbiB0aGUgbW9kZXJuIHdvcmxkIGFu ZCBzbyBoYXMgc2ltcGx5IGVsaW1pbmF0ZWQgYWxsIHRyYWNlcyBvZgorICAgdGhlbSBmcm9tIGl0 cyBtYWNoaW5lcyBhbmQgT1MuIEJ1dCBvZiBjb3Vyc2Ugc2VyaWFsIHBvcnRzIGFyZSBzdGlsbAor ICAgbmVlZGVkIHRvIGNvbm5lY3Qgbm90IG9ubHkgdG8gZXh0ZXJuYWwgbW9kZW1zLCBidXQgYWxz byB0byB0aGUgY29udHJvbAorICAgcG9ydHMgb2YgaHVicywgcm91dGVycywgdGVybWluYWwgc2Vy dmVycywgUEJYcywgYW5kIHNpbWlsYXIgZGV2aWNlcywKKyAgIG5vdCB0byBtZW50aW9uIGJhcmNv ZGUgcmVhZGVycywgUE9TIHN5c3RlbXMgYW5kIGNvbXBvbmVudHMsIHNwZWFraW5nCisgICBkZXZp Y2VzLCBoYW5kIGNhbGN1bGF0b3JzIHN1Y2ggYXMgdGhlIEhQNDgsIGF1dG9tYXRlZCBmYWN0b3J5 LWZsb29yCisgICBlcXVpcG1lbnQsIGFuZCBzY2llbnRpZmljLCBtZWRpY2FsLCBhbmQgbGFiIGVx dWlwbWVudCAodG8gbmFtZSBhIGZldykuCisgICBBbW9uZyB3b3JrZXJzIGluIHRoZXNlIGFyZWFz LCB0aGVyZSBpcyBhIG5lZWQgdG8gYWRkIHNlcmlhbCBwb3J0cyBiYWNrCisgICBvbnRvIHRoaXMg cGxhdGZvcm0sIHdoaWNoIGlzIGJlaW5nIGZpbGxlZCBieSB0aGlyZC1wYXJ0eSBwcm9kdWN0cyBz dWNoCisgICBhcyB0aGUgWzU0MF1LZXlzcGFuIEhpZ2ggU3BlZWQgVVNCIFNlcmlhbCBBZGFwdGVy IFVTQS0xOUhTLCB3aGljaCBoYXMgYQorICAgREItOSBtYWxlIGNvbm5lY3Rvci4gVG8gdXNlIHRo ZSBLZXlzcGFuIGRldmljZSwgeW91IG11c3QgaW5zdGFsbCB0aGUKKyAgIGFjY29tcGFueWluZyBk ZXZpY2UgZHJpdmVycywgd2hpY2ggd2luZHMgdXAgZ2l2aW5nIHlvdSBzZXJpYWwgcG9ydHMKKyAg IHdpdGggbmFtZXMgbGlrZSAvZGV2L2N1LlVTQTE5SDNiMVAxLjEsIC9kZXYvY3UuS2V5U2VyaWFs MSwKKyAgIC9kZXYvdHR5LktleVNlcmlhbDEuCisKKyAgIEMtS2VybWl0IDkuMCB3b3JrcyAib3V0 IG9mIHRoZSBib3giIHdpdGggdGhpcmQtcGFydHkgc2VyaWFsIHBvcnRzIG9uCisgICBNYWMgT1Mg WCwgYmVjYXVzZSBpdCBpcyBidWlsdCBieSBkZWZhdWx0ICgibWFrZSBtYWNvc3giKSB3aXRob3V0 IHRoZQorICAgIlVVQ1AgbG9ja2ZpbGUiIGZlYXR1cmUuIElmIHlvdSBoYXZlIEMtS2VybWl0IDku MCBvbiBhIHBlcnNvbmFsCisgICBNYWNpbnRvc2gsIHlvdSBjYW4gc2tpcCB0aGUgbmV4dCBzZWN0 aW9uLgorCitNYWMgT1MgWCBTZXJpYWwgUG9ydHMgd2l0aCBDLUtlcm1pdCA4LjAgYW5kIGVhcmxp ZXIKKworICAgSW4gZWFybGllciB2ZXJzaW9ucyBvZiBDLUtlcm1pdCwgeW91J2xsIG5lZWQgdG8g ZWl0aGVyIGJ1aWxkIGEgc3BlY2lhbAorICAgLUROT1VVQ1AgdmVyc2lvbiwgb3IgZGVhbCB3aXRo IHRoZSBVVUNQIHBvcnQgY29udGVudGlvbiBzeXRlbSBpbgorICAgWzU0MV1hbGwgaXRzIGdsb3J5 ICh0aGlzIGlzIHVzdWFsbHkgYW4gZXhlcmNpc2UgaW4gZnV0aWxpdHkgYmVjYXVzZSBhbnkKKyAg IG90aGVyIGFwcGxpY2F0aW9ucyBvbiB5b3VyIE1hYyB0aGF0IHVzZSB0aGUgc2VyaWFsIHBvcnQg d2lsbCBub3QKKyAgIG5lY2Vzc2FyaWx5IGZvbGxvdyB0aGUgc2FtZSBjb252ZW50aW9ucyk6CisK KyAgICAxLiBzdSAob3Igc3VkbyAtcykKKyAgICAgICBjaGdycCB4eHh4IC92YXIvc3Bvb2wvbG9j aworICAgICAgIGNobW9kIGcrdyAvdmFyL3Nwb29sL2xvY2sKKyAgICAgICBjaGdycCB4eHh4IC9k ZXYvY3UuKgorICAgICAgICh3aGVyZSB4eHh4IGlzIHRoZSBuYW1lIG9mIHRoZSBncm91cCBmb3Ig dXNlcnMgdG8gd2hvbSBzZXJpYWwtcG9ydAorICAgICAgIGFjY2VzcyBpcyB0byBiZSBncmFudGVk KS4gVXNlICJhZG1pbiIgb3Igb3RoZXIgZXhpc3RpbmcgZ3JvdXAsIG9yCisgICAgICAgY3JlYXRl IGEgbmV3IGdyb3VwIGlmIGRlc2lyZWQuIE5COgorCisgICAgIEluIHRoZSBhYnNlbmNlIG9mIG9m ZmljaWFsIGd1aWRhbmNlIGZyb20gQXBwbGUgb3IgYW55b25lIGVsc2UsIHdlCisgICAgIGNob29z ZSAvdmFyL3Nwb29sL2xvY2sgYXMgdGhlIGxvY2tmaWxlIGRpcmVjdG9yeSBiZWNhdXNlIHRoaXMK KyAgICAgZGlyZWN0b3J5IChhKSBhbHJlYWR5IGV4aXN0cyBvbiB2YW5pbGxhIE1hYyBPUyBYIGlu c3RhbGxhdGlvbnMsIGFuZAorICAgICAoYikgaXQgaXMgdGhlIGRpcmVjdG9yeSB1c2VkIGZvciBz ZXJpYWwtcG9ydCBsb2NrZmlsZXMgb24gbWFueSBvdGhlcgorICAgICBwbGF0Zm9ybXMuCisgICAg Mi4gUHV0IGFsbCB1c2VycyB3aG8gbmVlZCBhY2Nlc3MgdG8gdGhlIHNlcmlhbCBwb3J0IGluIHRo ZSBzYW1lIGdyb3VwLgorICAgIDMuIE1ha2Ugc3VyZSB0aGUgc2VyaWFsIGRldmljZSBmaWxlcyB0 aGF0IGFyZSB0byBiZSB1c2VkIGJ5IEMtS2VybWl0CisgICAgICAgaGF2ZSBncm91cCByZWFkLXdy aXRlIHBlcm1pc3Npb24gYW5kIChpZiB5b3UgY2FyZSkgbGFjayB3b3JsZAorICAgICAgIHJlYWQt d3JpdGUgcGVybWlzc2lvbiwgZS5nLjoKKworICAgICBjaG1vZCBnK3J3LG8tcncgL2Rldi9jdS4q CisKKyAgIElmIHlvdSBkbyB0aGUgYWJvdmUsIHRoZW4gdGhlcmUncyBubyBuZWVkIHRvIGJlY29t ZSByb290IHRvIHVzZSBLZXJtaXQsCisgICBvciB0byBtYWtlIEtlcm1pdCBzdWlkIG9yIHNnaWQu IEp1c3QgZG8gdGhpczoKKworY2htb2QgNzc1IHdlcm1pdAorbXYgd2VybWl0IC91c3IvbG9jYWwv a2VybWl0CisKKyAgIChvciB3aGF0ZXZlciBzcG90IGlzIG1vcmUgYXBwcm9wcmlhdGUsIGUuZy4g L3Vzci9iaW4vKS4gRm9yIGdyZWF0ZXIKKyAgIGRldGFpbCBhYm91dCBpbnN0YWxsYXRpb24sIFs1 NDJdQ0xJQ0sgSEVSRS4KKworICAgQWx0ZXJuYXRpdmVseSwgdG8gYnVpbGQgYSBwcmUtOS4wIHZl cnNpb24gb2YgQy1LZXJtaXQgd2l0aG91dCBVVUNQCisgICBsb2NrZmlsZSBzdXBwb3J0LCBzZXQg dGhlIE5PVVVDUCBmbGFnOyBlLmcuIChmb3IgTWFjIE9TIDEwLjQpOgorCisgICAgIG1ha2UgbWFj b3N4MTAuNCBLRkxBR1M9LUROT1VVQ1AKKworICAgVGhpcyBjaXJjdW12ZW50cyB0aGUgU0VUIFBP UlQgZmFpbHVyZSAiP0FjY2VzcyB0byBsb2NrZmlsZSBkaXJlY3RvcnkKKyAgIGRlbmllZCIuIEJ1 dCBpdCBhbHNvIHNhY3JpZmljZXMgS2VybWl0J3MgYWJpbGl0eSB0byBlbnN1cmUgdGhhdCBvbmx5 CisgICBvbmUgY29weSBvZiBLZXJtaXQgY2FuIGhhdmUgdGhlIGRldmljZSBvcGVuIGF0IGEgdGlt ZSwgc2luY2UgTWFjIE9TIFgKKyAgIGlzIHRoZSBzYW1lIGFzIGFsbCBvdGhlciB2YXJpZXRpZXMg b2YgVW5peCBpbiB0aGF0IGV4Y2x1c2l2ZSBhY2Nlc3MgdG8KKyAgIHNlcmlhbCBwb3J0cyBpcyBu b3QgZW5mb3JjZWQgaW4gYW55IHdheS4gQnV0IGlmIGl0J3MgZm9yIHlvdXIgb3duCisgICBkZXNr dG9wIG1hY2hpbmUgdGhhdCBub2JvZHkgZWxzZSB1c2VzLCBhIC1ETk9VVUNQIHZlcnNpb24gbWln aHQgYmUKKyAgIGFkZXF1YXRlIGFuZCBwcmVmZXJhYmxlIHRvIHRoZSBhbHRlcm5hdGl2ZXMuCisK KyAgIFRvIGJ1aWxkIEMtS2VybWl0IDkuMCB3aXRoIFVVQ1Agc3VwcG9ydCwgZG86CisKKyAgICAg bWFrZSBtYWNvc3ggS0ZMQUdTPS1VTk9VVUNQCisKKyAgIChub3RlOiAiLVUiLCBub3QgIi1EKS4K KworUlMtMjMyIHZlcnN1cyBSUy00MjIKKworICAgTWVhbndoaWxlLCBiYWNrIHdoZW4gTWFjcyBo YWQgc2VyaWFsIHBvcnRzLCB0aGV5IHdlcmUgbm90IFJTLTIzMiAodGhlCisgICBzdGFuZGFyZCBm b3IgY29ubmVjdGluZyBjb21wdXRlcnMgd2l0aCBuZWFyYnkgbW9kZW1zKSBidXQgcmF0aGVyIFJT LTQyMgorICAgb3IgLTQyMyAoYSBzdGFuZGFyZCBmb3IgY29ubmVjdGluZyBzZXJpYWwgZGV2aWNl cyBvdmVyIGxvbmdlcgorICAgZGlzdGFuY2VzKS4gTWFjaW50b3NoIHNlcmlhbCBwb3J0cyBkbyBu b3Qgc3VwcG9ydCBtb2RlbXMgd2VsbCBiZWNhdXNlCisgICB0aGV5IGRvIG5vdCBoYXZlIGVub3Vn aCB3aXJlcyAob3IgbW9yZSBwcm9wZXJseSBpbiB0aGUgY2FzZSBSUy00MjIvNDIzLAorICAgd2ly ZSBwYWlycykgdG8gY29udmV5IGEgdXNlZnVsIHN1YnNldCBvZiBtb2RlbSBzaWduYWxzLgorCisg ICBLZXlzcGFuIGFsc28gc2VsbHMgYSBbNTQzXVVTQiBUd2luIFNlcmlhbCBBZGFwdGVyIHRoYXQg Z2l2ZXMgeW91IHR3bworICAgTWluaS1EaW44IFJTLTQyMiBwb3J0cywgdGhhdCBhcmUgbm8gYmV0 dGVyIChvciB3b3JzZSkgZm9yIGNvbW11bmljYXRpbmcKKyAgIHdpdGggbW9kZW1zIG9yIHNlcmlh bCBkZXZpY2VzIHRoYW4gYSByZWFsIE1hYyBEaW4tOCBwb3J0IHdhcy4gSW4KKyAgIGVzc2VuY2Us IHlvdSBnZXQgRGF0YSBJbiwgRGF0YSBPdXQsIGFuZCB0d28gbW9kZW0gc2lnbmFscy4gSXQgbG9v a3MgdG8KKyAgIG1lIGFzIGlmIHRoZSBzaWduYWxzIGNob3NlbiBieSBLZXlzcGFuIGFyZSBSVFMg YW5kIENUUy4gVGhpcyBnaXZlcyB5b3UKKyAgIGhhcmR3YXJlIGZsb3cgY29udHJvbCwgYnV0IGF0 IHRoZSBleHBlbnNlIG9mIENhcnJpZXIgRGV0ZWN0LiBUaHVzIHRvCisgICB1c2UgQy1LZXJtaXQg d2l0aCBhIEtleXNwYW4gVVNCIHNlcmlhbCBwb3J0LCB5b3UgbXVzdCB0ZWxsIEMtS2VybWl0IHRv OgorCitzZXQgbW9kZW0gdHlwZSBub25lICAgICAgICAgICAgICAgIDsgKGRvbid0IGV4cGVjdCBh IG1vZGVtKQorc2V0IGNhcnJpZXItd2F0Y2ggb2ZmICAgICAgICAgICAgICA7IChpZ25vcmUgY2Fy cmllciBzaWduYWwpCitzZXQgcG9ydCAvZGV2L2N1LlVTQTE5SDNiMVAxLjEgICAgIDsgKG9wZW4g dGhlIHBvcnQpCitzZXQgZmxvdyBydHMvY3RzICAgICAgICAgICAgICAgICAgIDsgKHRoaXMgaXMg dGhlIGRlZmF1bHQpCitzZXQgc3BlZWQgNTc2MDAgICAgICAgICAgICAgICAgICAgIDsgKG9yIHdo YXRldmVyKQorY29ubmVjdCAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IChvciBESUFMIG9y IHdoYXRldmVyKQorCisgICBVc2UgQ3RybC1cQyBpbiB0aGUgbm9ybWFsIG1hbm5lciB0byBlc2Nh cGUgYmFjayB0byB0aGUgQy1LZXJtaXQ+CisgICBwcm9tcHQuIEtlcm1pdCBjYW4ndCBwb3AgYmFj ayB0byBpdHMgcHJvbXB0IGF1dG9tYXRpY2FsbHkgd2hlbiBDYXJyaWVyCisgICBkcm9wcyBiZWNh dXNlIHRoZXJlIGlzIG5vIENhcnJpZXIgc2lnbmFsIGluIHRoZSBwaHlzaWNhbCBpbnRlcmZhY2Uu CisKKyAgIEhlcmUncyBhIHR5cGljYWwgc2VxdWVuY2UgZm9yIGNvbm5lY3RpbmcgdG8gQ2lzY28g ZGV2aWNlcyAodXNpbmcgYQorICAgbWl4dHVyZSBvZiBjb21tYW5kLWxpbmUgb3B0aW9ucyBhbmQg aW50ZXJhY3RpdmUgY29tbWFuZHMgYXQgdGhlCisgICBwcm9tcHQpOgorCiskIGNrZXJtaXQgLWwg L2Rldi9jdS5VU0ExOUgzYjFQMS4xIC1iIDk2MDAKK0MtS2VybWl0PiBzZXQgY2Fycmllci13YXRj aCBvZmYKK0MtS2VybWl0PiBjb25uZWN0CisKKyAgIEluc3RydWN0aW9ucyBmb3IgdGhlIGJ1aWx0 LWluIG1vZGVtIChpZiBhbnkpIHJlbWFpbiB0byBiZSB3cml0dGVuIGR1ZQorICAgdG8gbGFjayBv ZiBrbm93bGVkZ2UuIElmIHlvdSBjYW4gY29udHJpYnV0ZSBpbnN0cnVjdGlvbnMsIGhpbnRzLCBv cgorICAgdGlwcywgcGxlYXNlIFs1NDRdc2VuZCB0aGVtIGluLgorCiszLjIwLiBDLUtFUk1JVCBB TkQgQ09IRVJFTlQKKworICAgWyBbNTQ1XVRvcCBdIFsgWzU0Nl1Db250ZW50cyBdIFsgWzU0N11T ZWN0aW9uIENvbnRlbnRzIF0gWworICAgWzU0OF1QcmV2aW91cyBdCisKKyAgIEFsc28gc2VlOgor CisgICAgIFs1NDldaHR0cDovL3d3dy51bmktZ2llc3Nlbi5kZS9mYXEvYXJjaGl2L2NvaGVyZW50 LWZhcS5nZW5lcmFsL21zZzAwMAorICAgMDAuaHRtbAorCisgICBNYXJrIFdpbGxpYW1zIENPSEVS RU5UIHdhcyBwZXJoYXBzIHRoZSBmaXJzdCBjb21tZXJjaWFsIFVuaXgtYmFzZWQKKyAgIG9wZXJh dGluZyBzeXN0ZW0gZm9yIFBDcywgZmlyc3QgYXBwZWFyaW5nIGFib3V0IDE5ODMgb3IgLTg0IGZv ciB0aGUKKyAgIFBDL1hUICg/KSwgYW5kIHBvcHVsYXIgdW50aWwgYWJvdXQgMTk5Mywgd2hlbiBM aW51eCB0b29rIG92ZXIuCisgICBDLUtlcm1pdCwgYXMgb2YgdmVyc2lvbiA4LjAsIGlzIHN0aWxs IGN1cnJlbnQgZm9yIENPSEVSRU5UIDM4NiA0LjIKKyAgIChpLmUuIG9ubHkgZm9yIGkzODYgYW5k IGFib3ZlKS4gQ3Vyc2VzIGlzIGluY2x1ZGVkLCBidXQgbG90cyBvZiBvdGhlcgorICAgZmVhdHVy ZXMgYXJlIG9taXR0ZWQgZHVlIHRvIGxhY2sgb2YgdGhlIGFwcHJvcHJpYXRlIE9TIGZlYXR1cmVz LCBBUElzLAorICAgbGlicmFyaWVzLCBoYXJkd2FyZSwgb3IganVzdCBzcGFjZTogZS5nLiBUQ1Av SVAsIGZsb2F0aW5nLXBvaW50CisgICBhcml0aG1ldGljLCBsZWFybmVkIHNjcmlwdHMuIEVhcmxp ZXIgdmVyc2lvbnMgb2YgQ09IRVJFTlQgcmFuIG9uIDgwODYKKyAgIGFuZCA4MDI4NiwgYnV0IHRo ZXNlIGFyZSB0byBzbWFsbCB0byBidWlsZCBvciBydW4gQy1LZXJtaXQsIGJ1dAorICAgRy1LZXJt aXQgc2hvdWxkIGJlIE9LIChhcyBtaWdodCBiZSBhbmNpZW50IHZlcnNpb25zIG9mIEMtS2VybWl0 KS4KKworICAgWW91IGNhbiBhY3R1YWxseSBidWlsZCBhIHZlcnNpb24gd2l0aCBmbG9hdGluZyBw b2ludCBzdXBwb3J0IC0tIGp1c3QKKyAgIHRha2UgLUROT0ZMT0FUIG91dCBvZiBDRkxBR1MgYW5k IGFkZCAtbG0gdG8gTElCUzsgTk9GTE9BVCBpcyB0aGUKKyAgIGRlZmF1bHQgYmVjYXVzZSBDT0hF UkVOVCB0ZW5kcyB0byBydW4gb24gb2xkIFBDcyB0aGF0IGRvbid0IGhhdmUKKyAgIGZsb2F0aW5n LXBvaW50IGhhcmR3YXJlLiBZb3UgY2FuIGFsc28gYWRkICItZiIgdG8gQ0ZMQUdTIHRvIGhhdmUg aXQKKyAgIGxpbmsgaW4gdGhlIGZsb2F0aW5nLXBvaW50IGVtdWxhdGlvbiBsaWJyYXJ5LiBBbHNv IEknbSBub3Qgc3VyZSB3aHkKKyAgIC1ETk9MRUFSTiBpcyBpbmNsdWRlZCwgc2luY2UgaXQgZGVw ZW5kcyBvbiBzZWxlY3QoKSwgd2hpY2ggQ09IRVJFTlQKKyAgIGhhcy4KKworNC4gR0VORVJBTCBV TklYLVNQRUNJRklDIEhJTlRTLCBMSU1JVEFUSU9OUywgQU5EIEJVR1MKKworICAgWyBbNTUwXVRv cCBdIFsgWzU1MV1Db250ZW50cyBdIFsgWzU1Ml1OZXh0IF0gWyBbNTUzXVByZXZpb3VzIF0KKwor NC4xLiBNb2RlbSBTaWduYWxzCisKKyAgIFRoZXJlIHNlZW1zIHRvIGJlIGFuIGVzY2FsYXRpbmcg ZGVtYW5kIGZvciB0aGUgYWJpbGl0eSB0byBjb250cm9sICJkdW1iCisgICBzZXJpYWwgZGV2aWNl cyIgKHN1Y2ggYXMgInNtYXJ0Y2FyZCByZWFkZXJzIiwgYmFyY29kZSByZWFkZXJzLCBldGMpIGJ5 CisgICBleHBsaWNpdGx5IG1hbmlwdWxhdGluZyBtb2RlbSBzaWduYWxzLCBwYXJ0aWN1bGFybHkg UlRTLiBUaGlzIG1pZ2h0CisgICBoYXZlIGJlZW4gZWFzeSB0byBkbyBpbiBET1MsIHdoZXJlIHRo ZXJlIGlzIG5vIG9wZXJhdGluZyBzeXN0ZW0KKyAgIHN0YW5kaW5nIGJldHdlZW4gdGhlIGFwcGxp Y2F0aW9uIGFuZCB0aGUgc2VyaWFsIGRldmljZSwgYnV0IGl0IGlzCisgICBwcm9ibGVtYXRpYyBp biBVbml4LCB3aGVyZSBtb2RlbSBzaWduYWxzIGFyZSBjb250cm9sbGVkIGJ5IHRoZSBzZXJpYWwK KyAgIGRldmljZSBkcml2ZXIuIElmIHRoZSBkcml2ZXIgZG9lcyBub3QgcHJvdmlkZSBhbiBBUEkg Zm9yIGRvaW5nIHRoaXMsCisgICB0aGVuIHRoZSBhcHBsaWNhdGlvbiBjYW4ndCBkbyBpdC4gSWYg aXQgZG9lcyBwcm92aWRlIGFuIEFQSSwgZXhwZWN0IGl0CisgICB0byBiZSB0b3RhbGx5IGRpZmZl cmVudCBvbiBlYWNoIFVuaXggcGxhdGZvcm0sIHNpbmNlIHRoZXJlIGlzIG5vCisgICBzdGFuZGFy ZCBmb3IgdGhpcy4KKworNC4yLiBORlMgVHJvdWJsZXMKKworICAgQmVnaW5uaW5nIHdpdGggQy1L ZXJtaXQgNi4wLCB0aGUgZGVmYXVsdCBDLUtlcm1pdCBwcm9tcHQgaW5jbHVkZXMgeW91cgorICAg Y3VycmVudCAod29ya2luZykgZGlyZWN0b3J5OyBmb3IgZXhhbXBsZToKKworICBbL3Vzci9vbGdh XSBDLUtlcm1pdD4KKworICAgKEluIEMtS2VybWl0IDcuMCB0aGUgc3F1YXJlIGJyYWNlcyB3ZXJl IHJlcGxhY2VkIGJ5IHJvdW5kIHBhcmVudGhlc2VzCisgICB0byBhdm9pZCBjb25mbGljdHMgd2l0 aCBJU08gNjQ2IG5hdGlvbmFsIGNoYXJhY3RlciBzZXRzLikKKworICAgSWYgdGhhdCBkaXJlY3Rv cnkgaXMgb24gYW4gTkZTLW1vdW50ZWQgZGlzaywgYW5kIE5GUyBzdG9wcyB3b3JraW5nIG9yCisg ICB0aGUgZGlzayBiZWNvbWVzIHVuYXZhaWxhYmxlLCBDLUtlcm1pdCB3aWxsIGhhbmcgd2FpdGlu ZyBmb3IgTkZTIGFuZC9vcgorICAgdGhlIGRpc2sgdG8gY29tZSBiYWNrLiBXaGV0aGVyIHlvdSBj YW4gaW50ZXJydXB0IEMtS2VybWl0IHdoZW4gaXQgaXMKKyAgIGh1bmcgdGhpcyB3YXkgZGVwZW5k cyBvbiB0aGUgc3BlY2lmaWMgT1MuIEtlcm1pdCBoYXMgY2FsbGVkIHRoZQorICAgb3BlcmF0aW5n IHN5c3RlbXMncyBnZXRjd2QoKSBmdW5jdGlvbiwgYW5kIGlzIHdhaXRpbmcgZm9yIGl0IHRvIHJl dHVybi4KKyAgIFNvbWUgdmVyc2lvbnMgb2YgVW5peCAoZS5nLiBIUC1VWCA5LngpIGFsbG93IHRo aXMgZnVuY3Rpb24gdG8gYmUKKyAgIGludGVycnVwdGVkIHdpdGggU0lHSU5UIChDdHJsLUMpLCBv dGhlcnMgKHN1Y2ggYXMgSFAtVVggOC54KSBkbyBub3QuIFRvCisgICBhdm9pZCB0aGlzIGVmZmVj dCwgeW91IGNhbiBhbHdheXMgdXNlIFNFVCBQUk9NUFQgdG8gY2hhbmdlIHlvdXIgcHJvbXB0Cisg ICB0byBzb21ldGhpbmcgdGhhdCBkb2VzIG5vdCBpbnZvbHZlIGNhbGxpbmcgZ2V0Y3dkKCksIGJ1 dCBpZiBORlMgaXMgbm90CisgICByZXNwb25kaW5nLCBDLUtlcm1pdCB3aWxsIHN0aWxsIGhhbmcg YW55IHRpbWUgeW91IGdpdmUgYSBjb21tYW5kIHRoYXQKKyAgIHJlZmVycyB0byBhbiBORlMtbW91 bnRlZCBkaXJlY3RvcnkuIEFsc28gbm90ZSB0aGF0IGluIHNvbWUgY2FzZXMsIHRoZQorICAgdW5p bnRlcnJ1cHRpYmlsaXR5IG9mIE5GUy1kZXBlbmRlbnQgc3lzdGVtIG9yIGxpYnJhcnkgY2FsbHMg aXMKKyAgIGNvbnNpZGVyZWQgYSBidWcsIGFuZCBzb21ldGltZXMgdGhlcmUgYXJlIHBhdGNoZXMu IEZvciBIUC1VWCwgZm9yCisgICBleGFtcGxlOgorCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VkIGJ5OgorICBIUC1VWCAxMC4y MCAgICAgbGliYyAgICBQSENPXzg3NjQgICAgICAgICAgICAgICAgICAgICBQSENPXzE0ODkxL1BI Q09fMTY3MjMKKyAgSFAtVVggMTAuMTAgICAgIGxpYmMgICAgUEhDT184NzYzICAgICAgICAgICAg ICAgICAgICAgUEhDT18xNDI1NC9QSENPXzE2NzIyCisgIEhQLVVYIDkueCAgICAgICBsaWJjICAg IFBIQ09fNzc0NyAgICAgICBTNzAwICAgICAgICAgIFBIQ09fMTMwOTUKKyAgSFAtVVggOS54ICAg ICAgIGxpYmMgICAgUEhDT182Nzc5ICAgICAgIFM4MDAgICAgICAgICAgUEhDT18xMTE2MgorCis0 LjMuIEMtS2VybWl0IGFzIExvZ2luIFNoZWxsCisKKyAgIFlvdSBtaWdodCBoYXZlIHJlYXNvbiB0 byBtYWtlIEMtS2VybWl0IHRoZSBsb2dpbiBzaGVsbCBmb3IgYSBzcGVjaWZpYworICAgdXNlciwg YnkgZW50ZXJpbmcgdGhlIHBhdGhuYW1lIG9mIEtlcm1pdCAocG9zc2libHkgd2l0aCBjb21tYW5k LWxpbmUKKyAgIHN3aXRjaGVzLCBzdWNoIGFzIC14IHRvIHB1dCBpdCBpbiBzZXJ2ZXIgbW9kZSkg aW50byB0aGUgc2hlbGwgZmllbGQgb2YKKyAgIHRoZSAvZXRjL3Bhc3N3ZCBmaWxlLiBUaGlzIHdv cmtzIHByZXR0eSB3ZWxsLiBJbiBzb21lIGNhc2VzLCBmb3IKKyAgICJ1bHRpbWF0ZSBzZWN1cml0 eSIsIHlvdSBtaWdodCB3YW50IHRvIHVzZSBhIHZlcnNpb24gYnVpbHQgd2l0aAorICAgLUROT1BV U0ggKHNlZSB0aGUgWzU1NF1Db25maWd1cmF0aW9ucyBPcHRpb25zIGRvY3VtZW50IGZvciB0aGlz LCBidXQKKyAgIGV2ZW4gaWYgeW91IGRvbid0LCB0aGVuIFBVU0hpbmcgb3Igc2hlbGxpbmcgb3V0 IGZyb20gQy1LZXJtaXQganVzdAorICAgYnJpbmdzIHVwIGEgbmV3IGNvcHkgb2YgQy1LZXJtaXQg KGJ1dCB3YXJuaW5nOiB0aGlzIGRvZXMgbm90IHByZXZlbnQKKyAgIHRoZSB1c2VyIGZyb20gZXhw bGljaXRseSBydW5uaW5nIGEgc2hlbGw7IGUuZy4gInJ1biAvYmluL3NoIjsgdXNlCisgICBOT1BV U0ggdG8gcHJldmVudCB0aGlzKS4KKworNC40LiBDLUtlcm1pdCB2ZXJzdXMgc2NyZWVuIGFuZCBz cGxpdHZ0CisKKyAgIEMtS2VybWl0IGZpbGUgdHJhbnNmZXJzIHdpbGwgcHJvYmFibHkgbm90IHdv cmsgaWYgYXR0ZW1wdGVkIHRocm91Z2ggdGhlCisgICAic3BsaXR2dCIgb3IgR05VICJzY3JlZW4i IHByb2dyYW1zIGJlY2F1c2UgdGhlIHNjcmVlbiBvcHRpbWl6YXRpb24gKG9yCisgICBhdCBsZWFz dCwgbGluZSB3cmFwcGluZywgY29udHJvbC1jaGFyYWN0ZXIgYWJzb3JwdGlvbikgZG9uZSBieSB0 aGlzCisgICBwYWNrYWdlIGludGVyZmVyZXMgd2l0aCBLZXJtaXQncyBwYWNrZXRzLgorCisgICBU aGUgc2FtZSBjYW4gYXBwbHkgdG8gYW55IG90aGVyIGVudmlyb25tZW50IGluIHdoaWNoIHRoZSB1 c2VyJ3Mgc2Vzc2lvbgorICAgaXMgY2FwdHVyZWQsIG1vbml0b3JlZCwgcmVjb3JkZWQsIG9yIG1h bmlwdWxhdGVkLiBFeGFtcGxlcyBpbmNsdWRlIHRoZQorICAgJ3NjcmlwdCcgcHJvZ3JhbSAoZm9y IG1ha2luZyBhIHR5cGVzY3JpcHQgb2YgYSBzZXNzaW9uKSwgdGhlCisgICBDb21wdXRyb25pY3Mg UEVFSyBwYWNrYWdlIGFuZCBwa3NoIChhdCBsZWFzdCB2ZXJzaW9ucyBvZiBpdCBwcmlvciB0bwor ICAgMS45SyksIGFuZCBzbyBvbi4KKworICAgWW91IG1pZ2h0IHRyeSB0aGUgZm9sbG93aW5nIC0t IHdoYXQgd2UgY2FsbCAiZG9vbXNkYXkgS2VybWl0IiAtLQorICAgc2V0dGluZ3MgdG8gcHVzaCBw YWNrZXRzIHRocm91Z2ggZXZlbiB0aGUgZGVuc2VzdCBhbmQgbW9zdCBvYnN0cnVjdGl2ZQorICAg Y29ubmVjdGlvbnMsIHN1Y2ggYXMgInNjcmVlbiIgYW5kICJzcGxpdHZ0IiAoYW5kIGNlcnRhaW4g a2luZHMgb2YgMzI3MAorICAgcHJvdG9jb2wgZW11bGF0b3JzKTogR2l2ZSB0aGVzZSBjb21tYW5k cyB0byBCT1RIIEtlcm1pdCBwcm9ncmFtczoKKworICBTRVQgRkxPVyBOT05FCisgIFNFVCBDT05U Uk9MIFBSRUZJWCBBTEwKKyAgU0VUIFJFQ0VJVkUgUEFDS0VULUxFTkdUSCA3MAorICBTRVQgUkVD RUlWRSBTVEFSVCA2MgorICBTRVQgU0VORCBTVEFSVCA2MgorICBTRVQgU0VORCBQQVVTRSAxMDAK KyAgU0VUIEJMT0NLIEIKKworICAgSWYgaXQgd29ya3MsIGl0IHdpbGwgYmUgc2xvdy4KKworNC41 LiBDLUtlcm1pdCB2ZXJzdXMgRE9TIEVtdWxhdG9ycworCisgICBPbiBVbml4IHdvcmtzdGF0aW9u cyBlcXVpcHBlZCB3aXRoIERPUyBlbXVsYXRvcnMgbGlrZSBTb2Z0UEMsIHdhdGNoIG91dAorICAg Zm9yIHdoYXQgdGhlc2UgZW11bGF0b3JzIGRvIHRvIHRoZSBzZXJpYWwgcG9ydCBkcml2ZXJzLiBB ZnRlciB1c2luZyBhCisgICBET1MgZW11bGF0b3IsIHBhcnRpY3VsYXJseSBpZiB5b3UgdXNlIGl0 IHRvIHJ1biBET1MgY29tbXVuaWNhdGlvbnMKKyAgIHNvZnR3YXJlLCB5b3UgbWlnaHQgaGF2ZSB0 byByZWNvbmZpZ3VyZSB0aGUgc2VyaWFsIHBvcnRzIGZvciB1c2UgYnkKKyAgIFVuaXguCisKKzQu Ni4gQy1LZXJtaXQgdmVyc3VzIEpvYiBDb250cm9sCisKKyAgIEludGVycnVwdGlvbiBieSBDdHJs LVogbWFrZXMgVW5peCBDLUtlcm1pdCB0cnkgdG8gc3VzcGVuZCBpdHNlbGYgd2l0aAorICAga2ls bCgwLFNJR1RTVFApLCBidXQgb25seSBvbiBwbGF0Zm9ybXMgdGhhdCBzdXBwb3J0IGpvYiBjb250 cm9sLCBhcworICAgZGV0ZXJtaW5lZCBieSB3aGV0aGVyIHRoZSBzeW1ib2wgU0lHVFNUUCBpcyBk ZWZpbmVkIChvciBvbiBQT1NJWCBvcgorICAgU1ZSNCBzeXN0ZW1zLCBpZiBzeWNvbmYoX1NDX0pP Ql9DT05UUk9MKSBvciBfUE9TSVhfSk9CX0NPTlRST0wgaW4KKyAgIGFkZGl0aW9uIHRvIFNJR1RT VFApLiBIb3dldmVyLCBpZiBLZXJtaXQgaXMgcnVubmluZyB1bmRlciBhIGxvZ2luIHNoZWxsCisg ICAoc3VjaCBhcyB0aGUgb3JpZ2luYWwgQm91cm5lIHNoZWxsKSB0aGF0IGRvZXMgbm90IHN1cHBv cnQgam9iIGNvbnRyb2wsCisgICB0aGUgdXNlcidzIHNlc3Npb24gaGFuZ3MgYW5kIG11c3QgYmUg bG9nZ2VkIG91dCBmcm9tIGFub3RoZXIgdGVybWluYWwsCisgICBvciBodW5nIHVwIG9uLiBUaGVy ZSBpcyBubyB3YXkgS2VybWl0IGNhbiBkZWZlbmQgaXRzZWxmIGFnYWluc3QgdGhpcy4KKyAgIElm IHlvdSB1c2UgYSBub24tam9iIGNvbnRyb2wgc2hlbGwgb24gYSBjb21wdXRlciB0aGF0IHN1cHBv cnRzIGpvYgorICAgY29udHJvbCwgZ2l2ZSBhIGNvbW1hbmQgbGlrZSAic3R0eSBzdXNwIHVuZGVm IiB0byBmaXggaXQgc28gdGhlIHN1c3BlbmQKKyAgIHNpZ25hbCBpcyBub3QgYXR0YWNoZWQgdG8g YW55IHBhcnRpY3VsYXIga2V5LCBvciBnaXZlIHRoZSBjb21tYW5kIFNFVAorICAgU1VTUEVORCBP RkYgdG8gQy1LZXJtaXQsIG9yIGJ1aWxkIEMtS2VybWl0IHdpdGggLUROT0pDLgorCis0LjcuIERh dGVzIGFuZCBUaW1lcworCisgICBVbml4IHRpbWUgY29udmVyc2lvbiBmdW5jdGlvbnMgdHlwaWNh bGx5IGFwcGx5IGxvY2FsZSBydWxlcyB0byByZXR1cm4KKyAgIGxvY2FsIHRpbWUgaW4gdGVybXMg b2YgYW55IHNlYXNvbmFsIHRpbWUgem9uZSBjaGFuZ2UgaW4gZWZmZWN0IGZvciB0aGUKKyAgIGdp dmVuIGRhdGUuIFRoZSBkaWZmZGF0ZSBmdW5jdGlvbiBhc3N1bWVzIHRoYXQgdGhlIHNhbWUgdGlt ZXpvbmUgcnVsZXMKKyAgIGFyZSBpbiBlZmZlY3QgZm9yIGJvdGggZGF0ZXMsIGJ1dCBhIGRhdGUg d2l0aCB0aW1lem9uZSBpbmZvcm1hdGlvbiB3aWxsCisgICBiZSBjb252ZXJ0ZWQgdG8gdGhlIGxv Y2FsIHRpbWUgem9uZSBpbiBlZmZlY3QgYXQgdGhlIGdpdmVuIHRpbWUsIGUuZy4sCisgICBhIEdN VCBzcGVjaWZpY2F0aW9uIHdpbGwgcHJvZHVjZSBlaXRoZXIgYSBTdGFuZGFyZCBUaW1lIG9yIERh eWxpZ2h0CisgICBTYXZpbmdzIFRpbWUsIGRlcGVuZGluZyBvbiB3aGljaCBhcHBsaWVzIGF0IHRo ZSBnaXZlbiB0aW1lLiBBbiBleGFtcGxlCisgICB1c2luZyB0aGUgMjAwMSBzZWFzb25hbCBjaGFu Z2UgZnJvbSBFRFQgKC0wNDAwKSB0byBFU1QgKC0wNTAwKToKKworICBDLUtlcm1pdD4gREFURSAy MDAxMTAyOCAwNTowMTowMiBHTVQgIDsgRURUCisgIDIwMDExMDI4IDAxOjAxOjAyCisgIEMtS2Vy bWl0PiBEQVRFIDIwMDExMDI4IDA2OjAxOjAyIEdNVCAgOyBFU1QKKyAgMjAwMTEwMjggMDE6MDE6 MDIKKyAgQy1LZXJtaXQ+CisKKyAgIGJ1dCB0aGUgaW1wbGljaXQgY2hhbmdlIGluIHRpbWV6b25l IG9mZnNldCBpcyBub3QgcmVjb2duaXplZDoKKworICBDLUtlcm1pdD4gZWNobyBcZmRpZmZkYXRl KDIwMDExMDI4IDA1OjAxOjAyIEdNVCwgMjAwMTEwMjggMDY6MDE6MDIgR01UKQorICArMDowMAor ICBDLUtlcm1pdD4KKworICAgRGF0ZS90aW1lIGFyaXRobWV0aWMsIG9mZnNldHMsIGRlbHRhIHRp bWVzLCBhbmQgdGltZXpvbmUgc3VwcG9ydCBhcmUKKyAgIG5ldyB0byBDLUtlcm1pdCA4LjAsIGFu ZCBtaWdodCBiZSBleHBlY3RlZCB0byBldm9sdmUgYW5kIGltcHJvdmUgaW4KKyAgIHN1YnNlcXVl bnQgcmVsZWFzZXMuCisKKyAgIE9uIHNvbWUgcGxhdGZvcm1zLCBmaWxlcyBkb3dubG9hZGVkIHdp dGggSFRUUCByZWNlaXZlIHRoZSBjdXJyZW50CisgICB0aW1lc3RhbXAsIHJhdGhlciB0aGFuIHRo ZSBIVFRQICJMYXN0IE1vZGlmaWVkIiB0aW1lICh0aGlzIGNhbiBiZSBmaXhlZAorICAgYnkgaW5j bHVkaW5nIHV0aW1lLmgsIGUuZy4gaW4gU3VuT1MgYW5kIFRydTY0Li4uKS4KKworNC44LiBQc2V1 ZG90ZXJtaW5hbHMKKworICAgVGhlIFNTSCBhbmQgUFRZIGNvbW1hbmRzIHdvcmsgYnkgYXNzaWdu aW5nIGEgcHNldWRvdGVybWluYWwgYW5kIHJlYWRpbmcKKyAgIGFuZCB3cml0aW5nIGZyb20gaXQu IFBlcmZvcm1hbmNlIHZhcmllcyBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmljCisgICBwbGF0Zm9y bSByYW5naW5nIGZyb20gdmVyeSBmYXN0IHRvIHZlcnkgZmxvdy4KKworICAgU1NIIGFuZCBQVFkg Y29tbWFuZHMgY2FuIGZhaWwgaWYgKGEpIGFsbCBwc2V1ZG90ZXJtaW5hbHMgYXJlIGluIHVzZTsg b3IKKyAgIChiKSB5b3UgZG8gbm90IGhhdmUgcmVhZC93cml0ZSBhY2Nlc3MgdG8gdGhlIHBzZXVk b3Rlcm1pbmFsIHRoYXQgd2FzCisgICBhc3NpZ25lZC4gQW4gZXhhbXBsZSBvZiAoYikgd2FzIHJl cG9ydGVkIHdpdGggdGhlIFppcHNsYWNrIFNsYWNrd2FyZQorICAgTGludXggZGlzdHJpYnV0aW9u LCBpbiB3aGljaCB0aGUgcHNldWRvdGVybWluYWxzIHdlcmUgY3JlYXRlZCB3aXRoCisgICBjcnct ci0tci0tIHBlcm1pc3Npb24sIGluc3RlYWQgb2YgY3J3LXJ3LXJ3LS4KKworNC45LiBNaXNjZWxs YW5lb3VzCisKKyAgICAgKiBSZXBvcnRlZGx5LCB0aGUgVW5peCBDLUtlcm1pdCBzZXJ2ZXIsIHVu ZGVyIHNvbWUgY29uZGl0aW9ucywgb24KKyAgICAgICBjZXJ0YWluIHBhcnRpY3VsYXIgc3lzdGVt cywgZmFpbHMgdG8gbG9nIG91dCBpdHMgbG9naW4gc2Vzc2lvbiB1cG9uCisgICAgICAgcmVjZWlw dCBvZiBhIEJZRSBjb21tYW5kLiBCZWZvcmUgcmVseWluZyBvbiB0aGUgQllFIGNvbW1hbmQKKyAg ICAgICB3b3JraW5nLCB0ZXN0IGl0IGEgZmV3IHRpbWVzIHRvIG1ha2Ugc3VyZSBpdCB3b3JrcyBv biB5b3VyIHN5c3RlbToKKyAgICAgICB0aGVyZSBtaWdodCBiZSBzeXN0ZW0gY29uZmlndXJhdGlv biBvciBzZWN1cml0eSBtZWNoYW5pc21zIHRvCisgICAgICAgcHJldmVudCBhbiBpbmZlcmlvciBw cm9jZXNzIChsaWtlIEtlcm1pdCkgZnJvbSBraWxsaW5nIGEgc3VwZXJpb3IKKyAgICAgICBvbmUg KGxpa2UgdGhlIGxvZ2luIHNoZWxsKS4KKyAgICAgKiBPbiBBVCZUIDczMDAgKDNCMSkgbWFjaGlu ZXMsIHlvdSBtaWdodCBoYXZlIHRvICJzdHR5IG5sMSIgYmVmb3JlCisgICAgICAgc3RhcnRpbmcg Qy1LZXJtaXQuIERvIHRoaXMgaWYgY2hhcmFjdGVycyBhcmUgbG9zdCBkdXJpbmcKKyAgICAgICBj b21tdW5pY2F0aW9ucyBvcGVyYXRpb25zLgorICAgICAqIFVuZGVyIHRoZSBiYXNoIHNoZWxsICh2 ZXJzaW9ucyBwcmlvciB0byAxLjA3IGZyb20gQ1dSVSksICJwdXNoaW5nIgorICAgICAgIHRvIGFu IGluZmVyaW9yIHNoZWxsIGFuZCB0aGVuIGV4aXRpbmcgYmFjayB0byBLZXJtaXQgbGVhdmVzIEtl cm1pdAorICAgICAgIGluIHRoZSBiYWNrZ3JvdW5kIHN1Y2ggdGhhdCBpdCBtdXN0IGJlIGV4cGxp Y2l0bHkgZmcnZC4gVGhpcyBpcworICAgICAgIHJlcG9ydGVkbHkgZml4ZWQgaW4gdmVyc2lvbiAx LjA3IG9mIGJhc2ggKGFuZCBkZWZpbml0ZWx5IGluIG1vZGVybgorICAgICAgIGJhc2ggdmVyc2lv bnMpLgorCis1LiBJTklUSUFMSVpBVElPTiBBTkQgQ09NTUFORCBGSUxFUworCisgICBbIFs1NTVd VG9wIF0gWyBbNTU2XUNvbnRlbnRzIF0gWyBbNTU3XU5leHQgXSBbIFs1NThdUHJldmlvdXMgXQor CisgICBDLUtlcm1pdCdzIGluaXRpYWxpemF0aW9uIGZpbGUgZm9yIFVuaXggaXMgLmtlcm1yYyAo bG93ZXJjYXNlLCBzdGFydHMKKyAgIHdpdGggcGVyaW9kKSBpbiB5b3VyIGhvbWUgZGlyZWN0b3J5 LCB1bmxlc3MgS2VybWl0IHdhcyBidWlsdCB3aXRoIHRoZQorICAgc3lzdGVtLXdpZGUgaW5pdGlh bGl6YXRpb24tZmlsZSBvcHRpb24gKHNlZSB0aGUgWzU1OV1DLUtlcm1pdCBmb3IgVW5peAorICAg SW5zdGFsbGF0aW9uIEluc3RydWN0aW9ucykuCisKKyAgIEMtS2VybWl0IGlkZW50aWZpZXMgeW91 ciBob21lIGRpcmVjdG9yeSBiYXNlZCBvbiB0aGUgZW52aXJvbm1lbnQKKyAgIHZhcmlhYmxlLCBI T01FLiBNb3N0IFVuaXggc3lzdGVtcyBzZXQgdGhpcyB2YXJpYWJsZSBhdXRvbWF0aWNhbGx5IHdo ZW4KKyAgIHlvdSBsb2cgaW4uIElmIEMtS2VybWl0IGNhbid0IGZpbmQgeW91ciBpbml0aWFsaXph dGlvbiBmaWxlLCBjaGVjayB5b3VyCisgICBIT01FIHZhcmlhYmxlOgorCisgIGVjaG8gJEhPTUUg ICAgICAoYXQgdGhlIFVuaXggcHJvbXB0KQorCisgICBvcjoKKworICBlY2hvIFwkKEhPTUUpICAg KGF0IHRoZSBDLUtlcm1pdCBwcm9tcHQpCisKKyAgIElmIEhPTUUgaXMgbm90IGRlZmluZWQsIG9y IGlzIGRlZmluZWQgaW5jb3JyZWN0bHksIGFkZCB0aGUgYXBwcm9wcmlhdGUKKyAgIGRlZmluaXRp b24gdG8geW91ciBVbml4IC5wcm9maWxlIG9yIC5sb2dpbiBmaWxlLCBkZXBlbmRpbmcgb24geW91 cgorICAgc2hlbGw6CisKKyAgc2V0ZW52IEhPTUUgZnVsbC1wYXRobmFtZS1vZi15b3VyLWhvbWUt ZGlyZWN0b3J5ICAoQy1TaGVsbCwgLmxvZ2luIGZpbGUpCisKKyAgIG9yOgorCisgIEhPTUU9ZnVs bC1wYXRobmFtZS1vZi15b3VyLWhvbWUtZGlyZWN0b3J5ICAgICAgICAgKHNoLCBrc2gsIC5wcm9m aWxlIGZpbGUpCisgIGV4cG9ydCBIT01FCisKKyAgIE5PVEU6IFZhcmlvdXMgb3RoZXIgb3BlcmF0 aW9ucyBkZXBlbmQgb24gdGhlIGNvcnJlY3QgZGVmaW5pdGlvbiBvZgorICAgSE9NRS4gVGhlc2Ug aW5jbHVkZSB0aGUgInRpbGRlLWV4cGFuc2lvbiIgZmVhdHVyZSwgd2hpY2ggYWxsb3dzIHlvdSB0 bworICAgcmVmZXIgdG8geW91ciBob21lIGRpcmVjdG9yeSBhcyAifiIgaW4gZmlsZW5hbWVzIHVz ZWQgaW4gQy1LZXJtaXQKKyAgIGNvbW1hbmRzLCBlLmcuOgorCisgIHNlbmQgfi8ua2VybXJjCisK KyAgIGFzIHdlbGwgYXMgdGhlIFx2KGhvbWUpIHZhcmlhYmxlLgorCisgICBQcmlvciB0byB2ZXJz aW9uIDVBKDE5MCksIEMtS2VybWl0IHdvdWxkIGxvb2sgZm9yIGl0cyBpbml0aWFsaXphdGlvbgor ICAgZmlsZSBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkgaWYgaXQgd2FzIG5vdCBmb3VuZCBpbiB0 aGUgaG9tZQorICAgZGlyZWN0b3J5LiBUaGlzIGZlYXR1cmUgd2FzIHJlbW92ZWQgZnJvbSA1QSgx OTApIGJlY2F1c2UgaXQgd2FzIGEKKyAgIHNlY3VyaXR5IHJpc2suIFNvbWUgcGVvcGxlLCBob3dl dmVyLCBsaWtlZCB0aGlzIGJlaGF2aW9yIGFuZCBoYWQKKyAgIC5rZXJtcmMgZmlsZXMgaW4gYWxs IHRoZWlyIGRpcmVjdG9yaWVzIHRoYXQgd291bGQgc2V0IHVwIHRoaW5ncworICAgYXBwcm9wcmlh dGVseSBmb3IgdGhlIGZpbGVzIHRoZXJlaW4uIElmIHlvdSB3YW50IHRoaXMgYmVoYXZpb3IsIHlv dSBjYW4KKyAgIGFjY29tcGxpc2ggaXQgaW4gdmFyaW91cyB3YXlzLCBmb3IgZXhhbXBsZToKKwor ICAgICAqIENyZWF0ZSBhIHNoZWxsIGFsaWFzLCBmb3IgZXhhbXBsZToKKyAgYWxpYXMga2Q9Imtl cm1pdCAtWSAuLy5rZXJtcmMiCisKKyAgICAgKiBDcmVhdGUgYSAua2VybXJjIGZpbGUgaW4geW91 ciBob21lIGRpcmVjdG9yeSwgd2hvc2UgY29udGVudHMgYXJlOgorICB0YWtlIC4vLmtlcm1yYwor CisgICBTdXBwb3NlIHlvdSBuZWVkIHRvIHBhc3MgYSBwYXNzd29yZCBmcm9tIHRoZSBVbml4IGNv bW1hbmQgbGluZSB0byBhCisgICBDLUtlcm1pdCBzY3JpcHQgcHJvZ3JhbSwgaW4gc3VjaCBhIHdh eSB0aGF0IGl0IGRvZXMgbm90IHNob3cgdXAgaW4gInBzIgorICAgb3IgInciIGxpc3RpbmdzLiBI ZXJlIGlzIGEgbWV0aG9kIChub3QgZ3VhcmFudGVlZCB0byBiZSAxMDAlIHNlY3VyZSwKKyAgIGJ1 dCBkZWZpbml0ZWx5IG1vcmUgc2VjdXJlIHRoYW4gdGhlIG1vcmUgb2J2aW91cyBtZXRob2RzKToK KworICBlY2hvIG15cGFzc3dvcmQgfCBrZXJtaXQgbXlzY3JpcHQKKworICAgVGhlICJteXNjcmlw dCIgZmlsZSBjb250YWlucyBhbGwgdGhlIGNvbW1hbmRzIHRoYXQgbmVlZCB0byBiZSBleGVjdXRl ZAorICAgZHVyaW5nIHRoZSBLZXJtaXQgc2Vzc2lvbiwgdXAgdG8gYW5kIGluY2x1ZGluZyBFWElU LCBhbmQgYWxzbyBpbmNsdWRlcworICAgYW4gQVNLIG9yIEFTS1EgY29tbWFuZCB0byByZWFkIHRo ZSBwYXNzd29yZCBmcm9tIHN0YW5kYXJkIGlucHV0LCB3aGljaAorICAgaGFzIGJlZW4gcGlwZWQg aW4gZnJvbSB0aGUgVW5peCAnZWNobycgY29tbWFuZCwgYnV0IGl0IG11c3Qgbm90IGluY2x1ZGUK KyAgIGEgQ09OTkVDVCBjb21tYW5kLiBPbmx5ICJrZXJtaXQgbXlzY3JpcHQiIHNob3dzIHVwIGlu IHRoZSBwcyBsaXN0aW5nLgorCis2LiBDT01NVU5JQ0FUSU9OIFNQRUVEIFNFTEVDVElPTgorCisg ICBbIFs1NjBdVG9wIF0gWyBbNTYxXUNvbnRlbnRzIF0gWyBbNTYyXU5leHQgXSBbIFs1NjNdUHJl dmlvdXMgXQorCisgICBWZXJzaW9uLTcgYmFzZWQgVW5peCBpbXBsZW1lbnRhdGlvbnMsIGluY2x1 ZGluZyA0LjMgQlNEIGFuZCBlYXJsaWVyIGFuZAorICAgVW5peCBzeXN0ZW1zIGJhc2VkIHVwb24g QlNELCB1c2UgYSA0LWJpdCBmaWVsZCB0byByZWNvcmQgYSBzZXJpYWwKKyAgIGRldmljZSdzIHRl cm1pbmFsIHNwZWVkLiBUaGlzIGxlYXZlcyByb29tIGZvciAxNiBzcGVlZHMsIG9mIHdoaWNoIHRo ZQorICAgZmlyc3QgMTQgYXJlIG5vcm1hbGx5OgorCisgICAgIDAsIDUwLCA3NSwgMTEwLCAxMzQu NSwgMTUwLCAyMDAsIDMwMCwgNjAwLCAxMjAwLCAxODAwLCAyNDAwLCA0ODAwLAorICAgICBhbmQg OTYwMAorCisgICBUaGUgcmVtYWluaW5nIHR3byBhcmUgdXN1YWxseSBjYWxsZWQgRVhUQSBhbmQg RVhUQiwgYW5kIGFyZSBkZWZpbmVkIGJ5CisgICB0aGUgcGFydGljdWxhciBVbml4IGltcGxlbWVu dGF0aW9uLiBDLUtlcm1pdCBkZXRlcm1pbmVzIHdoaWNoIHNwZWVkcworICAgYXJlIGF2YWlsYWJs ZSBvbiB5b3VyIHN5c3RlbSBiYXNlZCBvbiB3aGV0aGVyIHN5bWJvbHMgZm9yIHRoZW0gYXJlCisg ICBkZWZpbmVkIGluIHlvdXIgdGVybWluYWwgZGV2aWNlIGhlYWRlciBmaWxlcy4gRVhUQSBpcyBn ZW5lcmFsbHkgYXNzdW1lZAorICAgdG8gYmUgMTkyMDAgYW5kIEVYVEIgMzg0MDAsIGJ1dCB0aGVz ZSBhc3N1bXB0aW9ucyBtaWdodCBiZSB3cm9uZywgb3IKKyAgIHRoZXkgbWlnaHQgbm90IGFwcGx5 IHRvIGEgcGFydGljdWxhciBkZXZpY2UgdGhhdCBkb2VzIG5vdCBzdXBwb3J0IHRoZXNlCisgICBz cGVlZHMuIFByZXN1bWFibHksIGlmIHlvdSB0cnkgdG8gc2V0IGEgc3BlZWQgdGhhdCBpcyBub3Qg bGVnYWwgb24gYQorICAgcGFydGljdWxhciBkZXZpY2UsIHRoZSBkcml2ZXIgd2lsbCByZXR1cm4g YW4gZXJyb3IsIGJ1dCB0aGlzIGNhbiBub3QgYmUKKyAgIGd1YXJhbnRlZWQuCisKKyAgIE9uIHRo ZXNlIHN5c3RlbXMsIGl0IGlzIHVzdWFsbHkgbm90IHBvc3NpYmxlIHRvIHNlbGVjdCBhIHNwZWVk IG9mIDE0NDAwCisgICBicHMgZm9yIHVzZSB3aXRoIFYuMzJiaXMgbW9kZW1zLiBJbiB0aGF0IGNh c2UsIHVzZSAxOTIwMCBvciAzODQwMCBicHMsCisgICBjb25maWd1cmUgeW91ciBtb2RlbSB0byBs b2NrIGl0cyBpbnRlcmZhY2Ugc3BlZWQgYW5kIHRvIHVzZSBSVFMvQ1RTCisgICBmbG93IGNvbnRy b2wsIGFuZCB0ZWxsIEMtS2VybWl0IHRvIFNFVCBGTE9XIFJUUy9DVFMgYW5kIFNFVCBESUFMCisg ICBTUEVFRC1NQVRDSElORyBPRkYuCisKKyAgIFRoZSBzaXR1YXRpb24gaXMgc2ltaWxhciwgYnV0 IGRpZmZlcmVudCwgaW4gU3lzdGVtIFYuIFNWSUQgVGhpcmQKKyAgIEVkaXRpb24gbGlzdHMgdGhl IHNhbWUgc3BlZWRzLCAwIHRocm91Z2ggMzg0MDAuCisKKyAgIFNvbWUgdmVyc2lvbnMgb2YgVW5p eCwgYW5kL29yIHRlcm1pbmFsIGRldmljZSBkcml2ZXJzIHRoYXQgY29tZSB3aXRoCisgICBjZXJ0 YWluIHRoaXJkLXBhcnR5IGFkZC1pbiBoaWdoLXNwZWVkIHNlcmlhbCBjb21tdW5pY2F0aW9uIGlu dGVyZmFjZXMsCisgICB1c2UgdGhlIGxvdyAiYmF1ZCByYXRlcyIgdG8gc3RhbmQgZm9yIGhpZ2hl ciBvbmVzLiBGb3IgZXhhbXBsZSwgU0VUCisgICBTUEVFRCA1MCBnZXRzIHlvdSA1NzYwMCBicHM7 IFNFVCBTUEVFRCA3NSBnZXRzIHlvdSA3NjgwMDsgU0VUIFNQRUVEIDExMAorICAgZ2V0cyAxMTUy MDAuCisKKyAgIFNDTyBPRFQgMy4wIGlzIGFuIGV4YW1wbGUgd2hlcmUgYSAiYmF1ZC1yYXRlLXRh YmxlIHBhdGNoIiBjYW4gYmUKKyAgIGFwcGxpZWQgdGhhdCBjYW4gcm90YXRlIHRoZSB0dHkgZHJp dmVyIGJhdWQgcmF0ZSB0YWJsZSBzdWNoIHRoYXQKKyAgIDYwMD01NzYwMCBhbmQgMTgwMD0xMTVr IGJhdWQuIFNpbWlsYXJseSBmb3IgRGlnaWJvYXJkCisgICBtdWx0aXBvcnQvcG9ydHNlcnZlcnMs IHdoaWNoIGhhdmUgYSAiZmFzdGJhdWQiIHNldHRpbmcgdGhhdCBkb2VzIHRoaXMuCisgICBMaW51 eCBoYXMgYSAic2V0c2VyaWFsIiBjb21tYW5kIHRoYXQgY2FuIGRvIGl0LCBldGMuCisKKyAgIE1v cmUgbW9kZXJuIFVuaXhlcyBzdXBwb3J0IFBPU0lYLWJhc2VkIHNwZWVkIHNldHRpbmcsIGluIHdo aWNoIHRoZQorICAgc2VsZWN0aW9uIG9mIHNwZWVkcyBpcyBub3QgbGltaXRlZCBieSBhIDQtYml0 IGZpZWxkLiBDLUtlcm1pdCA2LjEKKyAgIGluY29ycG9yYXRlcyBhIG5ldyBtZWNoYW5pc20gZm9y IGZpbmRpbmcgb3V0IChhdCBjb21waWxlIHRpbWUpIHdoaWNoCisgICBzZXJpYWwgc3BlZWRzIGFy ZSBzdXBwb3J0ZWQgYnkgdGhlIG9wZXJhdGluZyBzeXN0ZW0gdGhhdCBkb2VzIG5vdAorICAgaW52 b2x2ZSBlZGl0aW5nIG9mIHNvdXJjZSBjb2RlIGJ5IGhhbmQ7IG9uIHN5c3RlbXMgbGlrZSBTb2xh cmlzIDUuMSwKKyAgIElSSVggNi4yLCBhbmQgU0NPIE9TUjUuMC40LCAic2V0IHNwZWVkID8iIHdp bGwgbGlzdCBzcGVlZHMgdXAgdG8gNDYwODAwCisgICBvciA5MjE2MDAuIEluIEMtS2VybWl0IDcu MCBhbmQgbGF0ZXI6CisKKyAgICAxLiBJZiBhIHN5bWJvbCBmb3IgYSBwYXJ0aWN1bGFyIHNwZWVk IChzYXkgQjIzMDQwMCBmb3IgMjMwNDAwIGJwcykKKyAgICAgICBhcHBlYXJzIGluIHdoYXRldmVy IGhlYWRlciBmaWxlIGRlZmluZXMgYWNjZXB0YWJsZSBzZXJpYWwgc3BlZWRzCisgICAgICAgKGUu Zy4gPHRlcm1iaXRzLmg+IG9yIDxzeXMvdGVybWlvcy5oPiBvciA8c3lzL3R0eWRldi5oPiwgZXRj KSwgdGhlCisgICAgICAgY29ycmVzcG9uZGluZyBzcGVlZCB3aWxsIGFwcGVhciBpbiBDLUtlcm1p dCdzICJzZXQgc3BlZWQgPyIgbGlzdC4KKyAgICAyLiBUaGUgZmFjdCB0aGF0IGEgZ2l2ZW4gc3Bl ZWQgaXMgbGlzdGVkIGluIHRoZSBoZWFkZXIgZmlsZXMgYW5kCisgICAgICAgYXBwZWFycyBpbiBD LUtlcm1pdCdzIGxpc3QgZG9lcyBub3QgbWVhbiB0aGUgZHJpdmVyIHdpbGwgYWNjZXB0IGl0Lgor ICAgICAgIEZvciBleGFtcGxlLCBhIGNvbXB1dGVyIG1pZ2h0IGhhdmUgc29tZSBzdGFuZGFyZCBz ZXJpYWwgcG9ydHMgcGx1cworICAgICAgIHNvbWUgYWRkLW9uIG9uZXMgd2l0aCBkaWZmZXJlbnQg ZHJpdmVycyB0aGF0IGFjY2VwdCBhIGRpZmZlcmVudAorICAgICAgIHJlcGVydG9pcmUgb2Ygc3Bl ZWRzLgorICAgIDMuIFRoZSBmYWN0IHRoYXQgYSBnaXZlbiBzcGVlZCBpcyBhY2NlcHRlZCBieSB0 aGUgZHJpdmVyIGRvZXMgbm90CisgICAgICAgZ3VhcmFudGVlIHRoZSB1bmRlcmx5aW5nIGhhcmR3 YXJlIGNhbiBhY2NlcHQgaXQuCisKKyAgIFdoZW4gS2VybWl0IGlzIGdpdmVuIGEgInNldCBzcGVl ZCIgY29tbWFuZCBmb3IgYSBwYXJ0aWN1bGFyIGRldmljZSwgdGhlCisgICB1bmRlcmx5aW5nIHN5 c3RlbSBzZXJ2aWNlIGlzIGNhbGxlZCB0byBzZXQgdGhlIHNwZWVkOyBpdHMgcmV0dXJuIGNvZGUK KyAgIGlzIGNoZWNrZWQgYW5kIHRoZSBTRVQgU1BFRUQgY29tbWFuZCBmYWlscyBpZiB0aGUgcmV0 dXJuIGNvZGUgaW5kaWNhdGVzCisgICBmYWlsdXJlLiBSZWdhcmRsZXNzIG9mIHRoZSBzeXN0ZW0g c2VydmljZSByZXR1cm4gc3RhdHVzLCB0aGUgZGV2aWNlJ3MKKyAgIHNwZWVkIGlzIHRoZW4gcmVh ZCBiYWNrIGFuZCBpZiBpdCBkb2VzIG5vdCBtYXRjaCB0aGUgc3BlZWQgdGhhdCB3YXMKKyAgIHJl cXVlc3RlZCwgYW4gZXJyb3IgbWVzc2FnZSBpcyBwcmludGVkIGFuZCB0aGUgY29tbWFuZCBmYWls cy4KKworICAgRXZlbiB3aGVuIHRoZSBjb21tYW5kIHN1Y2NlZWRzLCB0aGlzIGRvZXMgbm90IGd1 YXJhbnRlZSBzdWNjZXNzZnVsCisgICBvcGVyYXRpb24gYXQgYSBwYXJ0aWN1bGFyIHNwZWVkLCBl c3BlY2lhbGx5IGEgaGlnaCBvbmUuIFRoYXQgZGVwZW5kcyBvbgorICAgZWxlY3RyaWNpdHksIGlu Zm9ybWF0aW9uIHRoZW9yeSwgZXRjLiBIb3cgbG9uZyBpcyB0aGUgY2FibGUsIHdoYXQgaXMKKyAg IGl0cyBjYXBhY2l0YW5jZSwgaG93IHdlbGwgaXMgaXQgc2hpZWxkZWQsIGV0Yywgbm90IHRvIG1l bnRpb24gdGhhdAorICAgZXZlcnkgY29ubmVjdGlvbiBoYXMgdHdvIGVuZHMgYW5kIGl0cyBzdWNj ZXNzIGRlcGVuZHMgb24gYm90aCBvZiB0aGVtLgorICAgKFdpdGggdGhlIG9idmlvdXMgY2F2ZWF0 cyBhYm91dCBpbnRlcm5hbCBtb2RlbXMsIGlzIHRoZSBjYWJsZSByZWFsbHkKKyAgIGNvbm5lY3Rl ZCwgaW50ZXJydXB0IGNvbmZsaWN0cywgZXRjIGV0YyBldGMpLgorCisgICBOb3RlLCBpbiBwYXJ0 aWN1bGFyLCB0aGF0IHRoZXJlIGlzIGEgY2VydGFpbiB0aHJlc2hvbGQgYWJvdmUgd2hpY2gKKyAg IG1vZGVtcyBjYW4gbm90ICJhdXRvYmF1ZCIgLS0gaS5lLiBkZXRlY3QgdGhlIHNlcmlhbCBpbnRl cmZhY2Ugc3BlZWQKKyAgIHdoZW4geW91IHR5cGUgQVQgKG9yIHdoYXRldmVyIGVsc2UgdGhlIG1v ZGVtJ3MgcmVjb2duaXRpb24gc2VxdWVuY2UKKyAgIG1pZ2h0IGJlKS4gU3VjaCBtb2RlbXMgbmVl ZCB0byBiZSBlbmdhZ2VkIGF0IGEgbG93ZXIgc3BlZWQgKHNheSAyNDAwIG9yCisgICA5NjAwIG9y IGV2ZW4gMTE1MjAwIC0tIGFueSBzcGVlZCBiZWxvdyB0aGVpciBhdXRvYmF1ZCB0aHJlc2hvbGQp IGFuZAorICAgdGhlbiBtdXN0IGJlIGdpdmVuIGEgbW9kZW0tc3BlY2lmaWMgY29tbWFuZCAod2hp Y2ggY2FuIGJlIGZvdW5kIGluIHRoZQorICAgbW9kZW0gbWFudWFsKSB0byBjaGFuZ2UgdGhlaXIg aW50ZXJmYWNlIHNwZWVkIHRvIHRoZSBkZXNpcmVkIGhpZ2hlcgorICAgc3BlZWQsIGFuZCB0aGVu IHRoZSBzb2Z0d2FyZSBtdXN0IGFsc28gYmUgdG9sZCB0byBjaGFuZ2UgdG8gdGhlIG5ldywKKyAg IGhpZ2hlciBzcGVlZC4KKworICAgRm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24sIHJlYWQgWzU2 NF1TZWN0aW9uIDkuNSBvZiB0aGUgSW5zdGFsbGF0aW9uCisgICBJbnN0cnVjdGlvbnMsIHBsdXMg YW55IHBsYXRmb3JtLXNwZWNpZmljIG5vdGVzIGluIFs1NjVdU2VjdGlvbiAzIGFib3ZlLgorCis3 LiBDT01NVU5JQ0FUSU9OUyBBTkQgRElBTElORworCisgICBbIFs1NjZdVG9wIF0gWyBbNTY3XUNv bnRlbnRzIF0gWyBbNTY4XU5leHQgXSBbIFs1NjldUHJldmlvdXMgXQorCis3LjEuIFNlcmlhbCBQ b3J0cyBhbmQgTW9kZW1zCisKKyAgIElmIHlvdSBTRVQgTElORSB0byBhIHNlcmlhbCBwb3J0IG1v ZGVtLWNvbnRyb2wgZGV2aWNlIHRoYXQgaGFzIG5vdGhpbmcKKyAgIHBsdWdnZWQgaW4gdG8gaXQs IG9yIGhhcyBhIG1vZGVtIGNvbm5lY3RlZCB0aGF0IGlzIHBvd2VyZWQgb2ZmLCBhbmQgeW91Cisg ICBoYXZlIG5vdCBnaXZlbiBhIHByaW9yIFNFVCBNT0RFTSBUWVBFIG9yIFNFVCBDQVJSSUVSLVdB VENIIE9GRiBjb21tYW5kLAorICAgdGhlIFNFVCBMSU5FIGNvbW1hbmQgaXMgbGlrZWx5IHRvIGhh bmcuIEluIG1vc3QgY2FzZXMsIHlvdSBjYW4gQ3RybC1DCisgICBvdXQuIElmIG5vdCwgeW91J2xs IGhhdmUgdG8ga2lsbCBDLUtlcm1pdCBmcm9tIGFub3RoZXIgdGVybWluYWwuCisKKyAgIFNpbWls YXJseSwgaWYgeW91IGdpdmUgYSBTRVQgTU9ERU0gVFlQRSBIQVlFUyAob3IgVVNSLCBvciBhbnkg b3RoZXIKKyAgIG1vZGVtIHR5cGUgYmVzaWRlcyBESVJFQ1QsIE5PTkUsIG9yIFVOS05PV04pIGFu ZCB0aGVuIFNFVCBMSU5FIHRvIGFuCisgICBlbXB0eSBwb3J0LCB0aGUgc3Vic2VxdWVudCBjbG9z ZSAoaW1wbGljaXQgb3IgZXhwbGljaXQpIGlzIGxpYWJsZSB0bworICAgaGFuZyBvciBldmVuIGNy YXNoICh0aHJvdWdoIG5vIGZhdWx0IG9mIEtlcm1pdCdzIC0tIHRoZSBoYW5naW5nIG9yCisgICBj cmFzaGluZyBpcyBpbnNpZGUgYSBzeXN0ZW0gY2FsbCBzdWNoIGFzIGNmc2V0b3NwZWVkKCkgb3Ig Y2xvc2UoKSkuCisKKyAgIFRoZSBTRVQgQ0FSUklFUi1XQVRDSCBjb21tYW5kIHdvcmtzIGFzIGFk dmVydGlzZWQgb25seSBpZiB0aGUKKyAgIHVuZGVybHlpbmcgb3BlcmF0aW5nIHN5c3RlbSBhbmQg ZGV2aWNlIGRyaXZlcnMgc3VwcG9ydCB0aGlzIGZlYXR1cmU7IGluCisgICBwYXJ0aWN1bGFyIG9u bHkgaWYgYSByZWFkKCkgb3BlcmF0aW9uIHJldHVybnMgaW1tZWRpYXRlbHkgd2l0aCBhbiBlcnJv cgorICAgY29kZSBpZiB0aGUgY2FycmllciBzaWduYWwgZ29lcyBhd2F5IG9yLCBmYWlsaW5nIHRo YXQsIGlmIEMtS2VybWl0IGNhbgorICAgb2J0YWluIHRoZSBtb2RlbSBzaWduYWxzIGZyb20gdGhl IGRldmljZSBkcml2ZXIgKHlvdSBjYW4gdGVsbCBieSBnaXZpbmcKKyAgIGEgInNldCBsaW5lIiBj b21tYW5kIHRvIGEgc2VyaWFsIGRldmljZSwgYW5kIHRoZW4gYSAic2hvdworICAgY29tbXVuaWNh dGlvbnMiIGNvbW1hbmQgLS0gaWYgbW9kZW0gc2lnbmFscyBhcmUgbm90IGxpc3RlZCwgQy1LZXJt aXQKKyAgIHdvbid0IGJlIGFibGUgdG8gZGV0ZWN0IGNhcnJpZXIgbG9zcywgdGhlIFdBSVQgY29t bWFuZCB3aWxsIG5vdCB3b3JrLAorICAgZXRjKS4gT2YgY291cnNlLCB0aGUgZGV2aWNlIGl0c2Vs ZiAoZS5nLiBtb2RlbSkgbXVzdCBiZSBjb25maWd1cmVkCisgICBhcHByb3ByaWF0ZWx5IGFuZCB0 aGUgY2FibGVzIGNvbnZleSB0aGUgY2FycmllciBhbmQgb3RoZXIgbmVlZGVkCisgICBzaWduYWxz LCBldGMuCisKKyAgIElmIHlvdSBkaWFsIG91dCBmcm9tIFVuaXggc3lzdGVtLCBidXQgdGhlbiBu b3RpY2UgYSBsb3Qgb2Ygd2VpcmQKKyAgIGNoYXJhY3RlciBzdHJpbmdzIGJlaW5nIHN0dWNrIGlu dG8geW91ciBzZXNzaW9uIGF0IHJhbmRvbSB0aW1lcworICAgKGVzcGVjaWFsbHkgaWYgdGhleSBs b29rIGxpa2UgKysrQVRRMEgwIG9yIGxvZ2luIGJhbm5lcnMgb3IgcHJvbXB0cyksCisgICB0aGF0 IG1lYW5zIHRoYXQgZ2V0dHkgaXMgYWxzbyB0cnlpbmcgdG8gY29udHJvbCB0aGUgc2FtZSBkZXZp Y2UuIFlvdSdsbAorICAgbmVlZCB0byBkaWFsIG91dCBvbiBhIGRldmljZSB0aGF0IGlzIG5vdCB3 YWl0aW5nIGZvciBhIGxvZ2luLCBvciBlbHNlCisgICBkaXNhYmxlIGdldHR5IG9uIHRoZSBkZXZp Y2UuCisKKyAgIEFzIG9mIHZlcnNpb24gNy4wLCBDLUtlcm1pdCBtYWtlcyBleHBsaWNpdCBjaGVj a3MgZm9yIHRoZSBDYXJyaWVyCisgICBEZXRlY3Qgc2lnbmFsLCBhbmQgc28gY2F0Y2hlcyBodW5n LXVwIGNvbm5lY3Rpb25zIG11Y2ggYmV0dGVyIHRoYW4gNi4wCisgICBhbmQgZWFybGllci4gSG93 ZXZlciwgaXQgc3RpbGwgY2FuIG5vdCBiZSBndWFyYW50ZWVkIHRvIGNhdGNoIGV2ZXJ5CisgICBl dmVyIENEIG9uLXRvLW9mZiB0cmFuc2l0aW9uLiBGb3IgZXhhbXBsZSwgd2hlbiB0aGUgSFAtVVgg dmVyc2lvbiBvZgorICAgQy1LZXJtaXQgaXMgaW4gQ09OTkVDVCBtb2RlIG9uIGEgZGlhbGVkIGNv bm5lY3Rpb24gYW5kIENBUlJJRVItV0FUQ0ggT04KKyAgIG9yIEFVVE8sIGFuZCB5b3UgdHVybiBv ZmYgdGhlIG1vZGVtLCBIUC1VWCBpcyBzdHVjayBpbiBhIHJlYWQoKSB0aGF0CisgICBuZXZlciBy ZXR1cm5zLiAoQy1LZXJtaXQgZG9lcyBub3QgcG9wIGJhY2sgdG8gaXRzIHByb21wdCBhdXRvbWF0 aWNhbGx5LAorICAgYnV0IHlvdSBjYW4gc3RpbGwgZXNjYXBlIGJhY2suKQorCisgICBJZiwgb24g dGhlIG90aGVyIGhhbmQsIHlvdSBsb2cgb3V0IGZyb20gdGhlIHJlbW90ZSBzeXN0ZW0sIGFuZCBp dCBoYW5ncworICAgdXAsIGFuZCBDRCBkcm9wcyBvbiB0aGUgbG9jYWwgbW9kZW0sIEMtS2VybWl0 IGRldGVjdHMgdGhpcyBhbmQgcG9wcworICAgYmFjayB0byB0aGUgcHJvbXB0IGFzIGl0IHNob3Vs ZC4gKEV2aWRlbnRseSB0aGVyZSBjYW4gYmUgYSBkaWZmZXJlbmNlCisgICBiZXR3ZWVuIENEIGFu ZCBEU1IgdHVybmluZyBvZmYgYXQgdGhlIHNhbWUgdGltZSwgdmVyc3VzIENEIHR1cm5pbmcgb2Zm CisgICB3aGlsZSBEU1Igc3RheXMgb247IGV4cGVyaW1lbnRhdGlvbiB3aXRoICZTMC8mUzEvJlMy IG9uIHlvdXIgbW9kZW0KKyAgIG1pZ2h0IHByb2R1Y2UgdGhlIGRlc2lyZWQgcmVzdWx0cykuCisK KyAgIFdoZW4gVW5peCBDLUtlcm1pdCBleGl0cywgaXQgY2xvc2VzIChhbmQgbXVzdCBjbG9zZSkg dGhlIGNvbW11bmljYXRpb25zCisgICBkZXZpY2UuIElmIHlvdSB3ZXJlIGRpYWxlZCBvdXQsIHRo aXMgd2lsbCBtb3N0IGxpa2VseSBoYW5nIHVwIHRoZQorICAgY29ubmVjdGlvbi4gSWYgeW91IHdh bnQgdG8gZ2V0IG91dCBvZiBLZXJtaXQgYW5kIHN0aWxsIHVzZSBLZXJtaXQncworICAgY29tbXVu aWNhdGlvbiBkZXZpY2UsIHlvdSBoYXZlIHNldmVyYWwgY2hvaWNlczoKKworICAgIDEuIFNoZWxs IG91dCBmcm9tIEtlcm1pdCBvciBzdXNwZW5kIEtlcm1pdCwgYW5kIHJlZmVyIHRvIHRoZSBkZXZp Y2UKKyAgICAgICBsaXRlcmFsbHkgKGFzIGluICJ0ZXJtIC1ibGFoIC1ibGFoIDwgL2Rldi9jdWEg PiAvZGV2L2N1YSIpLgorICAgIDIuIFNoZWxsIG91dCBmcm9tIEtlcm1pdCBhbmQgdXNlIHRoZSBk ZXZpY2UncyBmaWxlIGRlc2NyaXB0b3Igd2hpY2gKKyAgICAgICBLZXJtaXQgbWFrZXMgYXZhaWxh YmxlIHRvIHlvdSBpbiB0aGUgXHYodHR5ZmQpIHZhcmlhYmxlLgorICAgIDMuIFVzZSBDLUtlcm1p dCdzIFJFRElSRUNUIGNvbW1hbmQuCisgICAgNC4gVXNlIEMtS2VybWl0IG5ldyBFWEVDIC9SRURJ UkVDVCBjb21tYW5kLgorCisgICBJZiB5b3UgYXJlIGhhdmluZyB0cm91YmxlIGRpYWxpbmc6CisK KyAgICAxLiBNYWtlIHN1cmUgdGhlIGRpYWxvdXQgbGluZSBpcyBjb25maWd1cmVkIGNvcnJlY3Rs eS4gTW9yZSBhYm91dCB0aGlzCisgICAgICAgYmVsb3cuCisgICAgMi4gTWFrZSBzdXJlIGFsbCBu ZWNlc3NhcnkgcGF0Y2hlcyBhcmUgaW5zdGFsbGVkIGZvciB5b3VyIG9wZXJhdGluZworICAgICAg IHN5c3RlbS4KKyAgICAzLiBJZiB5b3UgY2FuJ3QgZGlhbCBvbiBhICJiaWRpcmVjdGlvbmFsIiBs aW5lLCB0aGVuIGNvbmZpZ3VyZSBpdCBmb3IKKyAgICAgICBvdXRib3VuZC1vbmx5IChyZW1vdmUg dGhlIGdldHR5KSBhbmQgdHJ5IGFnYWluLiAoVGhlIG1lY2hhbmlzbXMgLS0KKyAgICAgICBpZiBh bnkgLS0gZm9yIGdyYWJiaW5nIGJpZGlyZWN0aW9uYWwgbGluZXMgZm9yIGRpYWxvdXQgdmFyeSB3 aWxkbHkKKyAgICAgICBhbW9uZyBVbml4IGltcGxlbWVudGF0aW9ucyBhbmQgcmVsZWFzZXMsIGFu ZCBDLUtlcm1pdCAtLSB3aGljaCBydW5zCisgICAgICAgb24gd2VsbCBvdmVyIDMwMCBkaWZmZXJl bnQgVW5peCB2YXJpYXRpb25zIC0tIG1ha2VzIG5vIGVmZm9ydCB0bworICAgICAgIGtlZXAgdXAg d2l0aCB0aGVtOyB0aGUgcmVjb21tZW5kZWQgbWV0aG9kIGZvciBjb3Bpbmcgd2l0aCB0aGlzCisg ICAgICAgc2l0dWF0aW9uIGlzIHRvIHdyYXAgQy1LZXJtaXQgaW4gYSBzaGVsbCBzY3JpcHQgdGhh dCB0YWtlcyB0aGUKKyAgICAgICBhcHByb3ByaWF0ZSBhY3Rpb25zLikKKyAgICA0LiBNYWtlIHN1 cmUgQy1LZXJtaXQncyBTRVQgRElBTCBhbmQgU0VUIE1PREVNIHBhcmFtZXRlcnMgYWdyZWUgd2l0 aAorICAgICAgIHRoZSBtb2RlbSB5b3UgYXJlIGFjdHVhbGx5IHVzaW5nIC0tIHBheSBwYXJ0aWN1 bGFyIGF0dGVudGlvbiB0byBTRVQKKyAgICAgICBESUFMIFNQRUVELU1BVENISU5HLgorICAgIDUu IElmIE1PREVNIEhBTkdVUC1NRVRIT0QgaXMgc2V0IHRvIFJTMjMyLVNJR05BTCwgY2hhbmdlIGl0 IHRvCisgICAgICAgTU9ERU0tQ09NTUFORC4gT3IgdmljZS12ZXJzYS4KKyAgICA2LiBUcnkgU0VU IERJQUwgSEFOR1VQIE9GRiBiZWZvcmUgdGhlIERJQUwgY29tbWFuZC4gQWxzbywgU0VUIERJQUwK KyAgICAgICBESVNQTEFZIE9OIHRvIHdhdGNoIHdoYXQncyBoYXBwZW5pbmcuIFNlZSBbNTcwXVNl Y3Rpb24gOCBvZiB0aGUKKyAgICAgICBbNTcxXUluc3RhbGxhdGlvbiBJbnN0cnVjdGlvbnMuCisg ICAgNy4gUmVhZCBwYWdlcyA1MC02NyBvZiBbNTcyXVVzaW5nIEMtS2VybWl0LgorICAgIDguIEFz IGEgbGFzdCByZXNvcnQsIGRvbid0IHVzZSB0aGUgRElBTCBjb21tYW5kIGF0IGFsbDsgU0VUIENB UlJJRVIKKyAgICAgICBPRkYgYW5kIENPTk5FQ1QgdG8gdGhlIG1vZGVtIGFuZCBkaWFsIGludGVy YWN0aXZlbHksIG9yIHdyaXRlIGEKKyAgICAgICBzY3JpcHQgcHJvZ3JhbSB0byBkaWFsIHRoZSBt b2RlbS4KKworICAgTWFrZSBzdXJlIHlvdXIgZGlhbG91dCBsaW5lIGlzIGNvcnJlY3RseSBjb25m aWd1cmVkIGZvciBkaWFsaW5nIG91dCAoYXMKKyAgIG9wcG9zZWQgdG8gbG9naW4pLiBUaGUgbWV0 aG9kIGZvciBkb2luZyB0aGlzIGlzIGRpZmZlcmVudCBmb3IgZWFjaCBraW5kCisgICBvZiBVbml4 IHN5c3RlbS4gQ29uc3VsdCB5b3VyIHN5c3RlbSBkb2N1bWVudGF0aW9uIGZvciBjb25maWd1cmlu ZyBsaW5lcworICAgZm9yIGRpYWxpbmcgb3V0IChmb3IgZXhhbXBsZSwgU3VuIFNwYXJjU3RhdGlv biBJUEMgdXNlcnMgc2hvdWxkIHJlYWQKKyAgIHRoZSBzZWN0aW9uICJTZXR0aW5nIHVwIE1vZGVt IFNvZnR3YXJlIiBpbiB0aGUgRGVza3RvcCBTUEFSQyBTdW4gU3lzdGVtCisgICAmIE5ldHdvcmsg TWFuYWdlcidzIEd1aWRlOyBIUC05MDAwIHdvcmtzdGF0aW9uIHVzZXJzIHNob3VsZCBjb25zdWx0 IHRoZQorICAgbWFudWFsIENvbmZpZ3VyaW5nIEhQLVVYIGZvciBQZXJpcGhlcmFscywgZXRjKS4K KworICAgU3ltcHRvbTogRElBTCB3b3JrcywgYnV0IGEgc3Vic2VxdWVudCBDT05ORUNUIGNvbW1h bmQgZG9lcyBub3QuCisgICBEaWFnbm9zaXM6IHRoZSBtb2RlbSBpcyBub3QgYXNzZXJ0aW5nIENh cnJpZXIgRGV0ZWN0IChDRCkgYWZ0ZXIgdGhlCisgICBjb25uZWN0aW9uIGlzIG1hZGUsIG9yIHRo ZSBjYWJsZSBkb2VzIG5vdCBjb252ZXkgdGhlIENEIHNpZ25hbC4gQ3VyZToKKyAgIFJlY29uZmln dXJlIHRoZSBtb2RlbSwgcmVwbGFjZSB0aGUgY2FibGUuIFdvcmthcm91bmQ6IFNFVCBDQVJSSUVS IE9GRgorICAgKGF0IGxlYXN0IGluIFN5c3RlbS1WIGJhc2VkIFVuaXggdmVyc2lvbnMpLgorCisg ICBGb3IgQmVya2VsZXktVW5peC1iYXNlZCBzeXN0ZW1zICg0LjNCU0QgYW5kIGVhcmxpZXIpLCBL ZXJtaXQgaW5jbHVkZXMKKyAgIGNvZGUgdG8gdXNlIExQQVNTOCBtb2RlIHdoZW4gcGFyaXR5IGlz IG5vbmUsIHdoaWNoIGlzIHN1cHBvc2VkIHRvIGFsbG93CisgICA4LWJpdCBkYXRhIGFuZCBYb24v WG9mZiBmbG93IGNvbnRyb2wgYXQgdGhlIHNhbWUgdGltZS4gSG93ZXZlciwgYXMgb2YKKyAgIGVk aXQgMTc0LCB0aGlzIGNvZGUgaXMgZW50aXJlbHkgZGlzYWJsZWQgYmVjYXVzZSBpdCBpcyB1bnJl bGlhYmxlOiBldmVuCisgICB0aG91Z2ggdGhlIGhvc3Qgb3BlcmF0aW5nIHN5c3RlbSBtaWdodCAo b3IgbWlnaHQgbm90KSBzdXBwb3J0IExQQVNTOAorICAgbW9kZSBjb3JyZWN0bHksIHRoZSBob3N0 IGFjY2VzcyBwcm90b2NvbHMgKHRlcm1pbmFsIHNlcnZlcnMsIHRlbG5ldCwKKyAgIHJsb2dpbiwg ZXRjKSBnZW5lcmFsbHkgaGF2ZSBubyB3YXkgb2YgZmluZGluZyBvdXQgYWJvdXQgaXQgYW5kCisg ICB0aGVyZWZvcmUgcmVuZGVyIGl0IGluZWZmZWN0aXZlLCBjYXVzaW5nIGZpbGUgdHJhbnNmZXIg ZmFpbHVyZXMuIFNvIGFzCisgICBvZiBlZGl0IDE3NCwgS2VybWl0IG9uY2UgYWdhaW4gdXNlcyBy YXdtb2RlIGZvciA4LWJpdCBkYXRhLCBhbmQgc28KKyAgIHRoZXJlIGlzIG5vIFhvbi9Yb2ZmIGZs b3cgY29udHJvbCBkdXJpbmcgZmlsZSB0cmFuc2ZlciBvciB0ZXJtaW5hbAorICAgZW11bGF0aW9u IGluIHRoZSBCZXJrZWxleS1iYXNlZCB2ZXJzaW9ucyAoNC4zIGFuZCBlYXJsaWVyLCBub3QgNC40 KS4KKworICAgQWxzbyBvbiBCZXJrZWxleS1iYXNlZCBzeXN0ZW1zICg0LjMgYW5kIGVhcmxpZXIp LCB0aGVyZSBpcyBhcHBhcmVudGx5CisgICBubyB3YXkgdG8gY29uZmlndXJlIGEgZGlhbG91dCBs aW5lIGZvciBwcm9wZXIgY2FycmllciBoYW5kbGluZywgaS5lLgorICAgaWdub3JlIGNhcnJpZXIg ZHVyaW5nIGRpYWxpbmcsIHJlcXVpcmUgY2FycmllciB0aGVyZWFmdGVyLCBnZXQgYSBmYXRhbAor ICAgZXJyb3Igb24gYW55IGF0dGVtcHQgdG8gcmVhZCBmcm9tIHRoZSBkZXZpY2UgYWZ0ZXIgY2Fy cmllciBkcm9wcyAodGhpcworICAgaXMgaGFuZGxlZCBuaWNlbHkgaW4gU3lzdGVtIFYgYnkgbWFu aXB1bGF0aW9uIG9mIHRoZSBDTE9DQUwgZmxhZykuIFRoZQorICAgc3ltcHRvbSBpcyB0aGF0IGNh cnJpZXIgbG9zcyBkb2VzIG5vdCBtYWtlIEMtS2VybWl0IHBvcCBiYWNrIHRvIHRoZQorICAgcHJv bXB0IGF1dG9tYXRpY2FsbHkuIFRoaXMgaXMgZXZpZGVudCBvbiB0aGUgTmVYVCwgZm9yIGV4YW1w bGUsIGJ1dCBub3QKKyAgIG9uIFN1bk9TLCB3aGljaCBzdXBwb3J0cyB0aGUgQ0xPQ0FMIGZsYWcu IFRoaXMgaXMgbm90IGEgS2VybWl0IHByb2JsZW0sCisgICBidXQgYSBsaW1pdGF0aW9uIG9mIHRo ZSB1bmRlcmx5aW5nIG9wZXJhdGluZyBzeXN0ZW0uIEZvciBleGFtcGxlLCB0aGUKKyAgIGN1IHBy b2dyYW0gb24gdGhlIE5lWFQgZG9lc24ndCBub3RpY2UgY2FycmllciBsb3NzIGVpdGhlciwgd2hl cmVhcyBjdQorICAgb24gdGhlIFN1biBkb2VzLgorCisgICBPbiBjZXJ0YWluIEFUJlQgVW5peCBz eXN0ZW1zIGVxdWlwcGVkIHdpdGggQVQmVCBtb2RlbXMsIERJQUwgYW5kIEhBTkdVUAorICAgZG9u J3Qgd29yayByaWdodC4gV29ya2Fyb3VuZHM6ICgxKSBTRVQgRElBTCBIQU5HVVAgT0ZGIGJlZm9y ZQorICAgYXR0ZW1wdGluZyB0byBkaWFsOyAoMikgSWYgSEFOR1VQIGRvZXNuJ3Qgd29yaywgU0VU IExJTkUsIGFuZCB0aGVuIFNFVAorICAgTElORSA8ZGV2aWNlPiB0byB0b3RhbGx5IGNsb3NlIGFu ZCByZW9wZW4gdGhlIGRldmljZS4gSWYgYWxsIGVsc2UKKyAgIGZhaWxzLCBTRVQgQ0FSUklFUiBP RkYuCisKKyAgIEMtS2VybWl0IGRvZXMgbm90IGNvbnRhaW4gYW55IHBhcnRpY3VsYXIgc3VwcG9y dCBmb3IgQVQmVCBEYXRhS2l0CisgICBkZXZpY2VzLiBZb3UgY2FuIHVzZSBLZXJtaXQgc29mdHdh cmUgdG8gZGlhbCBpbiB0byBhIERhdGFLaXQgbGluZSwgYnV0CisgICBDLUtlcm1pdCBkb2VzIG5v dCBjb250YWluIHRoZSBzcGVjaWFsaXplZCBjb2RlIHJlcXVpcmVkIHRvIGRpYWwgb3V0CisgICBm cm9tIGEgRGF0YUtpdCBsaW5lLiBJZiB0aGUgVW5peCBzeXN0ZW0gaXMgY29ubmVjdGVkIHRvIERh dGFLaXQgdmlhCisgICBzZXJpYWwgcG9ydHMsIGRpYWxvdXQgc2hvdWxkIHdvcmsgbm9ybWFsbHkg KGUuZy4gc2V0IGxpbmUgL2Rldi90dHltMSwKKyAgIHNldCBzcGVlZCAxOTIwMCwgY29ubmVjdCwg YW5kIHRoZW4gc2VlIHRoZSBERVNUSU5BVElPTjogcHJvbXB0LCBmcm9tCisgICB3aGljaCB5b3Ug Y2FuIGNvbm5lY3QgdG8gYW5vdGhlciBjb21wdXRlciBvbiB0aGUgRGF0YUtpdCBuZXR3b3JrIG9y IHRvCisgICBhbiBvdXRnb2luZyBtb2RlbSBwb29sLCBldGMpLiBCdXQgaWYgdGhlIFVuaXggc3lz dGVtIGlzIGNvbm5lY3RlZCB0bworICAgdGhlIERhdGFLaXQgbmV0d29yayB0aHJvdWdoIHRoZSBz cGVjaWFsIERhdGFLaXQgaW50ZXJmYWNlIGJvYXJkLCB0aGVuCisgICBTRVQgTElORSB0byBhIERh dGFLaXQgcHNldWRvZGV2aWNlIChzdWNoIGFzIC9kZXYvZGswMzF0KSB3aWxsIG5vdCB3b3JrCisg ICAoeW91IG11c3QgdXNlIHRoZSBEYXRhS2l0ICJkayIgb3IgImRrY3UiIHByb2dyYW0gaW5zdGVh ZCkuIEluIEMtS2VybWl0CisgICA3LjAgYW5kIGxhdGVyLCB5b3UgY2FuIG1ha2UgS2VybWl0IGNv bm5lY3Rpb25zICJ0aG91Z2giIGRrIG9yIGRrY3UKKyAgIHVzaW5nICJzZXQgbGluZSAvcHR5Ii4K KworICAgSW4gc29tZSBCU0QtYmFzZWQgVW5peCBDLUtlcm1pdCB2ZXJzaW9ucywgU0VUIExJTkUg dG8gYSBwb3J0IHRoYXQgaGFzCisgICBub3RoaW5nIHBsdWdnZWQgaW4gdG8gaXQgd2l0aCBTRVQg Q0FSUklFUiBPTiB3aWxsIGhhbmcgdGhlIHByb2dyYW0gKGFzCisgICBpdCBzaG91bGQpLCBidXQg aXQgY2FuJ3QgYmUgaW50ZXJydXB0ZWQgd2l0aCBDdHJsLUMuIFRoZSBpbnRlcnJ1cHQgdHJhcAor ICAgaXMgY29ycmVjdGx5IGFybWVkLCBidXQgYXBwYXJlbnRseSB0aGUgVW5peCBvcGVuKCkgY2Fs bCBjYW5ub3QgYmUKKyAgIGludGVycnVwdGVkIGluIHRoaXMgY2FzZS4gV2hlbiBTRVQgQ0FSUklF UiBpcyBPRkYgb3IgQVVUTywgdGhlIFNFVCBMSU5FCisgICB3aWxsIGV2ZW50dWFsbHkgcmV0dXJu LCBidXQgdGhlbiB0aGUgcHJvZ3JhbSBoYW5ncyAodW5pbnRlcnJ1cHRpYmx5KQorICAgd2hlbiB0 aGUgRVhJVCBvciBRVUlUIGNvbW1hbmQgKG9yLCBwcmVzdW1hYmx5LCBhbm90aGVyIFNFVCBMSU5F CisgICBjb21tYW5kKSBpcyBnaXZlbi4gVGhlIGxhdHRlciBpcyBwcm9iYWJseSBiZWNhdXNlIG9m IHRoZSBhdHRlbXB0IHRvCisgICBoYW5nIHVwIHRoZSBtb2RlbS4gKEluIGVkaXQgMTY5LCBhIHRp bWVvdXQgYWxhcm0gd2FzIHBsYWNlZCBhcm91bmQgdGhpcworICAgb3BlcmF0aW9uLikKKworICAg V2l0aCBTRVQgRElBTCBIQU5HVVAgT0ZGIGluIGVmZmVjdCwgdGhlIERJQUwgY29tbWFuZCBtaWdo dCB3b3JrIG9ubHkKKyAgIG9uY2UsIGJ1dCBub3QgYWdhaW4gb24gdGhlIHNhbWUgZGV2aWNlLiBJ biB0aGF0IGNhc2UsIGdpdmUgYSBDTE9TRQorICAgY29tbWFuZCB0byBjbG9zZSB0aGUgZGV2aWNl LCBhbmQgdGhlbiBhbm90aGVyIFNFVCBMSU5FIGNvbW1hbmQgdG8KKyAgIHJlLW9wZW4gdGhlIHNh bWUgZGV2aWNlLiBPciByZWJ1aWxkIHlvdXIgdmVyc2lvbiBvZiBLZXJtaXQgd2l0aCB0aGUKKyAg IC1EQ0xTT1BOIGNvbXBpbGUtdGltZSBzd2l0Y2guCisKKyAgIFRoZSBESUFMIGNvbW1hbmQgc2F5 cyAiVG8gY2FuY2VsOiBUeXBlIHlvdXIgaW50ZXJydXB0IGNoYXJhY3RlcgorICAgKG5vcm1hbGx5 IEN0cmwtQykuIiBUaGlzIGlzIGp1c3Qgb25lIGV4YW1wbGUgb2Ygd2hlcmUgcHJvZ3JhbSBtZXNz YWdlcworICAgYW5kIGRvY3VtZW50YXRpb24gYXNzdW1lIHlvdXIgaW50ZXJydXB0IGNoYXJhY3Rl ciBpcyBDdHJsLUMuIEJ1dCBpdAorICAgbWlnaHQgYmUgc29tZXRoaW5nIGVsc2UuIEluIG1vc3Qg KGJ1dCBub3QgbmVjZXNzYXJpbHkgYWxsKSBjYXNlcywgdGhlCisgICBjaGFyYWN0ZXIgcmVmZXJy ZWQgdG8gaXMgdGhlIG9uZSB0aGF0IGdlbmVyYXRlcyB0aGUgU0lHSU5UIHNpZ25hbC4gSWYKKyAg IEN0cmwtQyBkb2Vzbid0IGFjdCBhcyBhbiBpbnRlcnJ1cHQgY2hhcmFjdGVyIGZvciB5b3UsIHR5 cGUgdGhlIFVuaXgKKyAgIGNvbW1hbmQgInN0dHkgLWEiIG9yICJzdHR5IGFsbCIgb3IgInN0dHkg ZXZlcnl0aGluZyIgdG8gc2VlIHdoYXQgeW91cgorICAgaW50ZXJydXB0IGNoYXJhY3RlciBpcy4g KEtlcm1pdCBjb3VsZCBiZSBtYWRlIHRvIGZpbmQgb3V0IHdoYXQgdGhlCisgICBpbnRlcnJ1cHQg Y2hhcmFjdGVyIGlzLCBidXQgdGhpcyB3b3VsZCByZXF1aXJlIGEgbG90IG9mCisgICBwbGF0Zm9y bS1kZXBlbmRlbnQgY29kaW5nIGFuZCAjaWZkZWZzLCBhbmQgYSBuZXcgcm91dGluZSBhbmQgaW50 ZXJmYWNlCisgICBiZXR3ZWVuIHRoZSBwbGF0Zm9ybS1kZXBlbmRlbnQgYW5kIHBsYXRmb3JtLWlu ZGVwZW5kZW50IHBhcnRzIG9mIHRoZQorICAgcHJvZ3JhbS4pCisKKyAgIEluIGdlbmVyYWwsIHRo ZSBoYW5ndXAgb3BlcmF0aW9uIG9uIGEgc2VyaWFsIGNvbW11bmljYXRpb24gZGV2aWNlIGlzCisg ICBwcm9uZSB0byBmYWlsdXJlLiBDLUtlcm1pdCB0cmllcyB0byBzdXBwb3J0IG1hbnksIG1hbnkg ZGlmZmVyZW50IGtpbmRzCisgICBvZiBjb21wdXRlcnMsIGFuZCB0aGVyZSBzZWVtcyB0byBiZSBu byBwb3J0YWJsZSBtZXRob2QgZm9yIGhhbmdpbmcgdXAgYQorICAgbW9kZW0gY29ubmVjdGlvbiAo aS5lLiB0dXJuaW5nIG9mZiB0aGUgUlMtMjMyIERUUiBzaWduYWwgYW5kIHRoZW4KKyAgIHR1cm5p bmcgaXQgYmFjayBvbiBhZ2FpbikuIElmIEhBTkdVUCwgRElBTCwgYW5kL29yIEN0cmwtXEggZG8g bm90IHdvcmsKKyAgIGZvciB5b3UsIGFuZCB5b3UgYXJlIGEgcHJvZ3JhbW1lciwgbG9vayBhdCB0 aGUgdHRoYW5nKCkgZnVuY3Rpb24gaW4KKyAgIGNrdXRpby5jIGFuZCBzZWUgaWYgeW91IGNhbiBh ZGQgY29kZSB0byBtYWtlIGl0IHdvcmsgY29ycmVjdGx5IGZvciB5b3VyCisgICBzeXN0ZW0sIGFu ZCBzZW5kIHRoZSBjb2RlIHRvIHRoZSBhZGRyZXNzIGFib3ZlLiAoTk9URTogVGhpcyBwcm9ibGVt IGhhcworICAgYmVlbiBsYXJnZWx5IHNpZGVzdGVwcGVkIGFzIG9mIGVkaXQgMTg4LCBpbiB3aGlj aCBLZXJtaXQgZmlyc3QgYXR0ZW1wdHMKKyAgIHRvIGhhbmcgdXAgdGhlIG1vZGVtIGJ5ICJlc2Nh cGluZyBiYWNrIiB2aWEgKysrIGFuZCB0aGVuIGdpdmluZyB0aGUKKyAgIG1vZGVtJ3MgaGFuZ3Vw IGNvbW1hbmQsIGUuZy4gQVRIMCwgd2hlbiBESUFMIE1PREVNLUhBTkdVUCBpcyBPTiwgd2hpY2gK KyAgIGlzIHRoZSBkZWZhdWx0IHNldHRpbmcuKQorCisgICBFdmVuIHdoZW4gS2VybWl0J3MgbW9k ZW0tY29udHJvbCBzb2Z0d2FyZSBpcyBjb25maWd1cmVkIGNvcnJlY3RseSBmb3IKKyAgIHlvdXIg Y29tcHV0ZXIsIGl0IGNhbiBvbmx5IHdvcmsgcmlnaHQgaWYgeW91ciBtb2RlbSBpcyBhbHNvIGNv bmZpZ3VyZWQKKyAgIHRvIGFzc2VydCB0aGUgQ0Qgc2lnbmFsIHdoZW4gaXQgaXMgY29ubmVjdGVk IHRvIHRoZSByZW1vdGUgbW9kZW0gYW5kIHRvCisgICBoYW5nIHVwIHRoZSBjb25uZWN0aW9uIHdo ZW4geW91ciBjb21wdXRlciBkcm9wcyB0aGUgRFRSIHNpZ25hbC4gU28KKyAgIGJlZm9yZSBkZWNp ZGluZyBLZXJtaXQgZG9lc24ndCB3b3JrIHdpdGggeW91ciBtb2RlbSwgY2hlY2sgeW91ciBtb2Rl bQorICAgY29uZmlndXJhdGlvbiBBTkQgdGhlIGNhYmxlIChpZiBhbnkpIGNvbm5lY3RpbmcgeW91 ciBtb2RlbSB0byB0aGUKKyAgIGNvbXB1dGVyIC0tIGl0IHNob3VsZCBiZSBhIHN0cmFpZ2h0LXRo cm91Z2ggWzU3M11tb2RlbSBjYWJsZSBjb25kdWN0aW5nCisgICB0aGUgc2lnbmFscyBGRywgU0cs IFRELCBSRCwgUlRTLCBDVFMsIERTUiwgRFRSLCBDRCwgYW5kIFJJLgorCisgICBNYW55IFVuaXgg c3lzdGVtcyBrZWVwIGFsaWFzZXMgZm9yIGRpYWxvdXQgZGV2aWNlczsgZm9yIGV4YW1wbGUsCisg ICAvZGV2L2FjdSBtaWdodCBiZSBhbiBhbGlhcyBmb3IgL2Rldi90dHkwMC4gQnV0IG1vc3Qgb2Yg dGhlc2UgVW5peAorICAgc3lzdGVtcyBhbHNvIHVzZSBVVUNQIGxvY2tmaWxlIGNvbnZlbnRpb25z IHRoYXQgZG8gbm90IHRha2UgdGhpcworICAgYWxpYXNpbmcgaW50byBhY2NvdW50LCBzbyBpZiBv bmUgdXNlciBhc3NpZ25zIChlLmcuKSAvZGV2L2FjdSwgdGhlbgorICAgYW5vdGhlciB1c2VyIGNh biBzdGlsbCBhc3NpZ24gdGhlIHNhbWUgZGV2aWNlIGJ5IHJlZmVycmluZyB0byBpdHMgb3RoZXIK KyAgIG5hbWUuIFRoaXMgaXMgbm90IGEgS2VybWl0IHByb2JsZW0gLS0gS2VybWl0IG11c3QgZm9s bG93IHRoZSBsb2NrZmlsZQorICAgY29udmVudGlvbnMgdXNlZCBieSB0aGUgdmVuZG9yLXN1cHBs aWVkIHNvZnR3YXJlIChjdSwgdGlwLCB1dWNwKS4KKworICAgVGhlIFNFVCBGTE9XLUNPTlRST0wg S0VFUCBvcHRpb24gc2hvdWxkIGJlIGdpdmVuICpiZWZvcmUqIGFueQorICAgY29tbXVuaWNhdGlv biAoZGlhbGluZywgdGVybWluYWwgZW11bGF0aW9uLCBmaWxlIHRyYW5zZmVyLAorICAgSU5QVVQv T1VUUFVUL1RSQU5TTUlULCBldGMpIGlzIGF0dGVtcHRlZCwgaWYgeW91IHdhbnQgQy1LZXJtaXQg dG8gdXNlCisgICBhbGwgb2YgdGhlIGRldmljZSdzIHByZWV4aXN0aW5nIGZsb3ctY29udHJvbCBy ZWxhdGVkIHNldHRpbmdzLiBUaGUKKyAgIGRlZmF1bHQgZmxvdy1jb250cm9sIHNldHRpbmcgaXMg WE9OL1hPRkYsIGFuZCBpdCB3aWxsIHRha2UgZWZmZWN0IHdoZW4KKyAgIHRoZSBmaXJzdCBjb21t dW5pY2F0aW9uLXJlbGF0ZWQgY29tbWFuZCBpcyBnaXZlbiwgYW5kIGEgc3Vic2VxdWVudCBTRVQK KyAgIEZMT1cgS0VFUCBjb21tYW5kIHdpbGwgbm90IG5lY2Vzc2FyaWx5IGtub3cgaG93IHRvIHJl c3RvcmUgKmFsbCogb2YgdGhlCisgICBkZXZpY2UncyBvcmlnaW5hbCBmbG93LWNvbnRyb2wgc2V0 dGluZ3MuCisKKzcuMi4gTmV0d29yayBDb25uZWN0aW9ucworCisgICBDLUtlcm1pdCB0cmllcyB0 byB1c2UgdGhlIDh0aCBiaXQgZm9yIGRhdGEgd2hlbiBwYXJpdHkgaXMgTk9ORSwgYW5kCisgICB0 aGlzIGdlbmVyYWxseSB3b3JrcyBvbiByZWFsIFVuaXggdGVybWluYWwgKHR0eSkgZGV2aWNlcywg YnV0IGl0IG9mdGVuCisgICBkb2VzIG5vdCB3b3JrIHdoZW4gdGhlIFVuaXggc3lzdGVtIGlzIGFj Y2Vzc2VkIG92ZXIgYSBuZXR3b3JrIHZpYQorICAgdGVsbmV0IG9yIHJsb2dpbiBwcm90b2NvbHMs IGluY2x1ZGluZyAoaW4gbWFueSBjYXNlcykgdGhyb3VnaCB0ZXJtaW5hbAorICAgc2VydmVycy4g Rm9yIGV4YW1wbGUsIGFuIEVuY29yZSBjb21wdXRlciB3aXRoIEFubmV4IHRlcm1pbmFsIHNlcnZl cnMKKyAgIG9ubHkgZ2l2ZXMgYSA3LWJpdCBwYXRoIGlmIHRoZSBybG9naW4gcHJvdG9jb2wgaXMg c2VsZWN0ZWQgaW4gdGhlCisgICB0ZXJtaW5hbCBzZXJ2ZXIgYnV0IGl0IGdpdmVzIHRoZSBmdWxs IDggYml0cyBpZiB0aGUgcHJvcHJpZXRhcnkgUkRQCisgICBwcm90b2NvbCBpcyB1c2VkLgorCisg ICBJZiBmaWxlIHRyYW5zZmVyIGRvZXMgbm90IHdvcmsgdGhyb3VnaCBhIGhvc3QgdG8gd2hpY2gg eW91IGhhdmUKKyAgIHJsb2dpbidkLCB1c2UgInJsb2dpbiAtOCIgcmF0aGVyIHRoYW4gInJsb2dp biIuIElmIHRoYXQgZG9lc24ndCB3b3JrLAorICAgdGVsbCBib3RoIEtlcm1pdCBwcm9ncmFtcyB0 byAic2V0IHBhcml0eSBzcGFjZSIuCisKKyAgIFRoZSBFbmNvcmUgVEVMTkVUIHNlcnZlciBkb2Vz IG5vdCBhbGxvdyBsb25nIGJ1cnN0cyBvZiBpbnB1dC4gV2hlbiB5b3UKKyAgIGhhdmUgYSBURUxO RVQgY29ubmVjdGlvbiB0byBhbiBFbmNvcmUsIHRlbGwgQy1LZXJtaXQgb24gdGhlIEVuY29yZSB0 bworICAgU0VUIFJFQ0VJVkUgUEFDS0VULUxFTkdUSCAyMDAgb3IgdGhlcmVhYm91dHMuCisKKzgu IEhBUkRXQVJFIEZMT1cgQ09OVFJPTAorCisgICBbIFs1NzRdVG9wIF0gWyBbNTc1XUNvbnRlbnRz IF0gWyBbNTc2XU5leHQgXSBbIFs1NzddUHJldmlvdXMgXQorCisgICBTRVQgRkxPVyBSVFMvQ1RT IGlzIGF2YWlsYWJsZSBpbiBVbml4IEMtS2VybWl0IG9ubHkgd2hlbiB0aGUgdW5kZXJseWluZwor ICAgb3BlcmF0aW5nIHN5c3RlbSBwcm92aWRlcyBhbiBBcHBsaWNhdGlvbiBQcm9ncmFtIEludGVy ZmFjZSAoQVBJKSBmb3IKKyAgIHR1cm5pbmcgdGhpcyBmZWF0dXJlIG9uIGFuZCBvZmYgdW5kZXIg cHJvZ3JhbSBjb250cm9sLCB3aGljaCB0dXJucyBvdXQKKyAgIHRvIGJlIGEgcmF0aGVyIHJhcmUg ZmVhdHVyZSBhbW9uZyBVbml4IHN5c3RlbXMuIFRvIHNlZSBpZiB5b3VyIFVuaXgKKyAgIEMtS2Vy bWl0IHZlcnNpb24gc3VwcG9ydHMgaGFyZHdhcmUgZmxvdyBjb250cm9sLCB0eXBlICJzZXQgZmxv dyA/IiBhdAorICAgdGhlIEMtS2VybWl0IHByb21wdCwgYW5kIGxvb2sgZm9yICJydHMvY3RzIiBh bW9uZyB0aGUgb3B0aW9ucy4gT3RoZXIKKyAgIGNvbW1vbiBzaXR1YXRpb25zIGluY2x1ZGU6CisK KyAgICAxLiBUaGUgQVBJIGlzIGF2YWlsYWJsZSwgc28gInNldCBmbG93IHJ0cy9jdHMiIGFwcGVh cnMgYXMgYSB2YWxpZAorICAgICAgIEMtS2VybWl0IGNvbW1hbmQsIGJ1dCBpdCBkb2Vzbid0IGRv IGFueXRoaW5nIGJlY2F1c2UgdGhlIGRldmljZQorICAgICAgIGRyaXZlciAocGFydCBvZiB0aGUg b3BlcmF0aW5nIHN5c3RlbSkgd2FzIG5ldmVyIGNvZGVkIHRvIGRvCisgICAgICAgaGFyZHdhcmUg ZmxvdyBjb250cm9sLiBUaGlzIGlzIGNvbW1vbiBhbW9uZyBTeXN0ZW0gViBSNAorICAgICAgIGlt cGxlbWVudGF0aW9ucyAoZGV0YWlscyBiZWxvdykuCisgICAgMi4gVGhlIEFQSSBpcyBub3QgYXZh aWxhYmxlLCBzbyAic2V0IGZsb3cgcnRzL2N0cyIgZG9lcyBOT1QgYXBwZWFyIGFzCisgICAgICAg YSB2YWxpZCBDLUtlcm1pdCBjb21tYW5kLCBidXQgeW91IGNhbiBzdGlsbCBnZXQgUlRTL0NUUyBm bG93CisgICAgICAgY29udHJvbCBieSBzZWxlY3RpbmcgYSBzcGVjaWFsbHkgbmFtZWQgZGV2aWNl IGluIHlvdXIgU0VUIExJTkUKKyAgICAgICBjb21tYW5kLiBFeGFtcGxlczoKKyAgICAgICAgICAr IE5lWFRTVEVQOiAvZGV2L2N1ZmEgaW5zdGVhZCBvZiAvZGV2L2N1YSwgL2Rldi9jdWZiIGluc3Rl YWQgb2YKKyAgICAgICAgICAgIC9kZXYvY3ViICg2ODA0MCBvbmx5OyAibWFuIHpzIiBmb3IgZnVy dGhlciBpbmZvKS4KKyAgICAgICAgICArIElSSVg6IC9kZXYvdHR5ZjIgaW5zdGVhZCBvZiAvZGV2 L3R0eWQyIG9yIC9kZXYvdHR5bTIgKCJtYW4gNworICAgICAgICAgICAgc2VyaWFsIikuCisgICAg My4gVGhlIEFQSSBpcyBhdmFpbGFibGUsIGRvZXNuJ3Qgd29yaywgYnV0IGEgd29ya2Fyb3VuZCBh cyBpbiAoMikgY2FuCisgICAgICAgYmUgdXNlZC4KKyAgICA0LiBUaGUgQVBJIGlzIGF2YWlsYWJs ZSwgYnV0IEtlcm1pdCBkb2Vzbid0IGtub3cgYWJvdXQgaXQuIEluIHRoZXNlCisgICAgICAgY2Fz ZXMsIHlvdSBjYW4gdXN1YWxseSB1c2UgYW4gc3R0eSBjb21tYW5kIHRvIGVuYWJsZSBSVFMvQ1RT IG9uIHRoZQorICAgICAgIGRldmljZSwgZS5nLiAic3R0eSBjcnRzY3RzIiBvciAic3R0eSBjdHNm bG93IiwgInN0dHkgcnRzZmxvdyIsCisgICAgICAgYmVmb3JlIHN0YXJ0aW5nIEtlcm1pdCwgYW5k IHRoZW4gdGVsbCBLZXJtaXQgdG8gU0VUIEZMT1cgS0VFUC4KKyAgICA1LiBObyBBUEkgYW5kIG5v IHNwZWNpYWwgZGV2aWNlIGRyaXZlcnMuIEhhcmR3YXJlIGZsb3cgY29udHJvbCBpcworICAgICAg IGNvbXBsZXRlbHkgdW5hdmFpbGFibGUuCisKKyAgIFN5c3RlbSBWIFI0IGJhc2VkIFVuaXhlcyBh cmUgc3VwcG9zZWQgdG8gc3VwcGx5IGEgPHRlcm1pb3guaD4gZmlsZSwKKyAgIHdoaWNoIGdpdmVz IEtlcm1pdCB0aGUgbmVjZXNzYXJ5IGludGVyZmFjZSB0byBjb21tYW5kIHRoZSB0ZXJtaW5hbAor ICAgZHJpdmVyIHRvIGVuYWJsZS9kaXNhYmxlIGhhcmR3YXJlIGZsb3cgY29udHJvbC4gVW5mb3J0 dW5hdGVseSwgYnV0CisgICBwcmVkaWN0YWJseSwgbWFueSBpbXBsZW1lbnRhdGlvbnMgb2YgU1ZS NCB3aGltc2ljYWxseSBwbGFjZSB0aGlzIGZpbGUKKyAgIGluIC91c3IvaW5jbHVkZS9zeXMgcmF0 aGVyIHRoYW4gL3Vzci9pbmNsdWRlICh3aGVyZSBTVklEIGNsZWFybHkKKyAgIHNwZWNpZmllcyBp dCBzaG91bGQgYmU7IHNlZSBTVklELCBUaGlyZCBFZGl0aW9uLCBWMSwgdGVybWlveChCQV9ERVYp LgorICAgVGh1cyBpZiB5b3UgYnVpbGQgQy1LZXJtaXQgd2l0aCBhbnkgb2YgdGhlIG1ha2VmaWxl IGVudHJpZXMgdGhhdAorICAgY29udGFpbiAtRFRFUk1JT1ggb3IgLURTVEVSTUlPWCAodGhlIGxh dHRlciB0byBzZWxlY3QgPHN5cy90ZXJtaW94Lmg+KSwKKyAgIEMtS2VybWl0IHdpbGwgaGF2ZSAi c2V0IGZsb3cgcnRzL2N0cyIgYW5kIHBvc3NpYmx5IG90aGVyIGhhcmR3YXJlCisgICBmbG93LWNv bnRyb2wgcmVsYXRlZCBjb21tYW5kcy4gQlVULi4uIFRoYXQgZG9lcyBub3QgbmVjZXNzYXJpbHkg bWVhbgorICAgdGhhdCB0aGV5IHdpbGwgd29yay4gSW4gc29tZSBjYXNlcywgdGhlIHVuZGVybHlp bmcgZnVuY3Rpb25zIGFyZSBzaW1wbHkKKyAgIG5vdCBjb2RlZCBpbnRvIHRoZSBvcGVyYXRpbmcg c3lzdGVtLgorCisgICBXQVJOSU5HOiBXaGVuIGhhcmR3YXJlIGZsb3cgY29udHJvbCBpcyBhdmFp bGFibGUsIGFuZCB5b3UgZW5hYmxlIGluCisgICBLZXJtaXQgb24gYSBkZXZpY2UgdGhhdCBpcyBu b3QgcmVjZWl2aW5nIHRoZSBDVFMgc2lnbmFsLCBLZXJtaXQgY2FuCisgICBoYW5nIHdhaXRpbmcg Zm9yIENUUyB0byBjb21lIHVwLiBUaGlzIGlzIG1vc3QgZWFzaWx5IHNlZW4gd2hlbiB0aGUKKyAg IGxvY2FsIHNlcmlhbCBwb3J0IGhhcyBub3RoaW5nIHBsdWdnZWQgaW4gdG8gaXQsIG9yIGlzIGNv bm5lY3RlZCB0byBhbgorICAgZXh0ZXJuYWwgbW9kZW0gdGhhdCBpcyBwb3dlcmVkIG9mZi4KKwor OS4gVEVSTUlOQUwgQ09OTkVDVElPTiBBTkQgS0VZIE1BUFBJTkcKKworICAgWyBbNTc4XVRvcCBd IFsgWzU3OV1Db250ZW50cyBdIFsgWzU4MF1OZXh0IF0gWyBbNTgxXVByZXZpb3VzIF0KKworICAg Qy1LZXJtaXQgaXMgbm90IGEgdGVybWluYWwgZW11bGF0b3IuIFJlZmVyIHRvIHBhZ2UgMTQ3IG9m IFs1ODJdVXNpbmcKKyAgIEMtS2VybWl0LCAybmQgRWRpdGlvbjogIk1vc3QgdmVyc2lvbnMgb2Yg Qy1LZXJtaXQgLS0gVW5peCwgVk1TLCBBT1MvVlMsCisgICBWT1MsIGV0YyAtLSBwcm92aWRlIHRl cm1pbmFsIGNvbm5lY3Rpb24gd2l0aG91dCBlbXVsYXRpb24uIFRoZXNlCisgICB2ZXJzaW9ucyBh Y3QgYXMgYSAnc2VtaXRyYW5zcGFyZW50IHBpcGUnIGJldHdlZW4gdGhlIHJlbW90ZSBjb21wdXRl cgorICAgYW5kIHlvdXIgdGVybWluYWwsIHRlcm1pbmFsIGVtdWxhdG9yLCBjb25zb2xlIGRyaXZl ciwgb3Igd2luZG93LCB3aGljaAorICAgaW4gdHVybiBlbXVsYXRlcyAob3IgaXMpIGEgc3BlY2lm aWMga2luZCBvZiB0ZXJtaW5hbC4iIFRoZSBlbnZpcm9ubWVudAorICAgaW4gd2hpY2ggeW91IHJ1 biBDLUtlcm1pdCBpcyB1cCB0byB5b3UuCisKKyAgIElmIHlvdSBhcmUgYW4gWCBXaW5kb3dzIHVz ZXIsIHlvdSBzaG91bGQgYmUgYXdhcmUgb2YgYW4gYWx0ZXJuYXRpdmUgdG8KKyAgIHh0ZXJtIHRo YXQgc3VwcG9ydHMgVlQyMjAgZW11bGF0aW9uLCBmcm9tIFRob21hcyBFLiBEaWNrZXk6CisKKyAg WzU4M11odHRwOi8vZGlja2V5Lmhpcy5jb20veHRlcm0veHRlcm0uaHRtbAorCisgICBVbml4IEMt S2VybWl0J3MgU0VUIEtFWSBjb21tYW5kIGN1cnJlbnRseSBjYW4gbm90IGJlIHVzZWQgd2l0aCBr ZXlzCisgICB0aGF0IGdlbmVyYXRlICJ3aWRlIiBzY2FuIGNvZGVzIG9yIG11bHRpYnl0ZSBzZXF1 ZW5jZXMsIHN1Y2ggYXMKKyAgIHdvcmtzdGF0aW9uIGZ1bmN0aW9uIG9yIGFycm93IGtleXMsIGJl Y2F1c2UgVW5peCBDLUtlcm1pdCBkb2VzIG5vdCBoYXZlCisgICBkaXJlY3QgYWNjZXNzIHRvIHRo ZSBrZXlib2FyZC4KKworICAgSG93ZXZlciwgbWFueSBVbml4IHdvcmtzdGF0aW9ucyBhbmQvb3Ig Y29uc29sZSBkcml2ZXJzIHByb3ZpZGUgdGhlaXIKKyAgIG93biBrZXkgbWFwcGluZyBmZWF0dXJl LiBXaXRoIHh0ZXJtLCBmb3IgZXhhbXBsZSwgeW91IGNhbiB1c2UgJ3htb2RtYXAnCisgICAoIm1h biB4bW9kbWFwIiBmb3IgZGV0YWlscyk7IGhlcmUgaXMgYW4geHRlcm0gbWFwcGluZyB0byBtYXAg dGhlIFN1bgorICAga2V5Ym9hcmQgdG8gREVDIFZUMjAwIHZhbHVlcyBmb3IgdXNlIHdpdGggVlQt dGVybWluYWwgb3JpZW50ZWQKKyAgIGFwcGxpY2F0aW9ucyBsaWtlIFZNUyBFVkU6CisKKyAga2V5 Y29kZSAxMDE9S1BfMAorICBrZXljb2RlIDExOT1LUF8xCisgIGtleWNvZGUgMTIwPUtQXzIKKyAg a2V5Y29kZSAxMjE9S1BfMworICBrZXljb2RlIDk4PUtQXzQKKyAga2V5Y29kZSA5OT1LUF81Cisg IGtleWNvZGUgMTAwPUtQXzYKKyAga2V5Y29kZSA3NT1LUF83CisgIGtleWNvZGUgNzY9S1BfOAor ICBrZXljb2RlIDc3PUtQXzkKKyAga2V5Y29kZSA1Mj1LUF9GMQorICBrZXljb2RlIDUzPUtQX0Yy CisgIGtleWNvZGUgNTQ9S1BfRjMKKyAga2V5Y29kZSA1Nz1LUF9EZWNpbWFsCisgIGtleWNvZGUg Mjg9TGVmdAorICBrZXljb2RlIDI5PVJpZ2h0CisgIGtleWNvZGUgMzA9S1BfU2VwYXJhdG9yCisg IGtleWNvZGUgMTA1PUtQX0Y0CisgIGtleWNvZGUgNzg9S1BfU3VidHJhY3QKKyAga2V5Y29kZSA4 PUxlZnQKKyAga2V5Y29kZSAxMD1SaWdodAorICBrZXljb2RlIDMyPVVwCisgIGtleWNvZGUgMzM9 RG93bgorICBrZXljb2RlIDk3PUtQX0VudGVyCisKKyAgIFVzZXJzIG9mIExpbnV4IGNvbnNvbGVz IGNhbiB1c2UgbG9hZGtleXMgKCJtYW4gZHVtcGtleXMgbG9hZGtleXMKKyAgIGtleXRhYmxlcyIg Zm9yIGRldGFpbHMuIFRoZSBmb3JtYXQgdXNlZCBieSBsb2Fka2V5cyBpcyBjb21wYXRpYmxlIHdp dGgKKyAgIHRoYXQgdXNlZCBieSBYbW9kbWFwLCBhbHRob3VnaCBpdCBpcyBub3QgZGVmaW5pdGVs eSBjZXJ0YWluIHRoYXQgdGhlCisgICBrZXljb2RlcyBhcmUgY29tcGF0aWJsZSBmb3IgZGlmZmVy ZW50IGtleWJvYXJkIHR5cGVzIChlLmcuIFN1biB2cyBIUCB2cworICAgUEMsIGV0YykuCisKKzEw LiBGSUxFIFRSQU5TRkVSCisKKyAgIFsgWzU4NF1Ub3AgXSBbIFs1ODVdQ29udGVudHMgXSBbIFs1 ODZdTmV4dCBdIFsgWzU4N11QcmV2aW91cyBdCisKKyAgIE9uIG1vc3QgcGxhdGZvcm1zLCBDLUtl cm1pdCBjYW4gbm90IGhhbmRsZSBmaWxlcyBsb25nZXIgdGhhbiAyXjMxIG9yCisgICAyXjMyIGJ5 dGVzIGxvbmcsIGJlY2F1c2UgaXQgdXNlcyB0aGUgdHJhZGl0aW9uYWwgZmlsZSBpL28gQVBJcyB0 aGF0IHVzZQorICAgMzItYml0IHdvcmRzIHRvIHJlcHJlc2VudCB0aGUgZmlsZSBzaXplLiBUbyBh Y2NvbW1vZGF0ZSBsb25nZXIgZmlsZXMsCisgICB3ZSB3b3VsZCBoYXZlIHRvIHN3aXRjaCB0byBh IG5ldyBhbmQgZGlmZmVyZW50IEFQSS4gVW5mb3J0dW5hdGVseSwgZWFjaAorICAgcGxhdGZvcm0g aGFzIGEgZGlmZmVyZW50IG9uZSwgYSBuaWdodG1hcmUgdG8gaGFuZGxlIGluIHBvcnRhYmxlIGNv ZGUuCisgICBUaGUgQy1LZXJtaXQgZmlsZSBjb2RlIHdhcyB3cml0dGVuIGluIHRoZSBkYXlzIGxv bmcgYmVmb3JlIGZpbGVzIGxvbmdlcgorICAgdGhhbiAyR0Igd2VyZSBzdXBwb3J0ZWQgb3IgZXZl biBjb250ZW1wbGF0ZWQgaW4gdGhlIG9wZXJhdGluZyBzeXN0ZW1zCisgICB3aGVyZSBDLUtlcm1p dCByYW4uCisKKyAgIElmIHVwbG9hZHMgKG9yIGRvd25sb2FkcykgZmFpbCBpbW1lZGlhdGVseSwg Z2l2ZSB0aGUgQ0FVVElPVVMgY29tbWFuZAorICAgdG8gS2VybWl0IGFuZCB0cnkgYWdhaW4uIElm IHRoZXkgc3RpbGwgZmFpbCwgdGhlbiB0cnkgU0VUIFBSRUZJWElORworICAgQUxMLiBJZiB0aGV5 IHN0aWxsIGZhaWwsIHRyeSBTRVQgUEFSSVRZIFNQQUNFLiBJZiB0aGV5IHN0aWxsIGZhaWwsIHRy eQorICAgUk9CVVNULgorCisgICBJZiByZWNlcHRpb24gKHBhcnRpY3VsYXJseSBvZiBsYXJnZSBm aWxlcyBhbmQvb3IgYmluYXJ5IGZpbGVzKSBiZWdpbnMKKyAgIHN1Y2Nlc3NmdWxseSBidXQgdGhl biBmYWlsIGNvbnNpc3RlbnRseSBhZnRlciBhIGNlcnRhaW4gYW1vdW50IG9mIGJ5dGVzCisgICBo YXZlIGJlZW4gc2VudCwgY2hlY2s6CisKKyAgICAgKiBZb3VyIHVsaW1pdCAoInVsaW1pdCAtYSIp CisgICAgICogVGhlIGFtb3VudCBvZiBhdmFpbGFibGUgc3BhY2Ugb24gdGhlIHRhcmdldCBkaXNr ICgiZGYgLiIgb3IgImRmIC1rCisgICAgICAgLiIpCisgICAgICogWW91ciBwZXJzb25hbCBkaXNr IHF1b3RhIChwbGF0Zm9ybS0gYW5kIHNpdGUtZGVwZW5kZW50KQorICAgICAqIFRoZSBtYXhpbXVt IGZpbGUgc2l6ZSBvbiB0aGUgcmVjZWl2ZXIncyBmaWxlIHN5c3RlbSAoZS5nLiAyR0IgaW4KKyAg ICAgICBvbGQgdmVyc2lvbnMgdGhlIExpbnV4IFZGUyBmaWxlIHN5c3RlbSwgYW5kL29yIGluIGFw cGxpY2F0aW9ucyB0aGF0CisgICAgICAgaGF2ZSBub3QgYmVlbiByZWNvZGVkIHRvIHVzZSBuZXcg ImxhcmdlIGZpbGUiIEFQSXMpLgorICAgICAqIElmIGl0J3MgYW4gTkZTLW1vdW50ZWQgZGlzayAo aWYgc28sIHRyeSB1cGxvYWRpbmcgdG8gYSBsb2NhbCBkaXNrKQorICAgICAqIElzIHRoZXJlIGFu ICJpZGxlIGxpbWl0IiBvbiB0aGUgcmVjZWl2aW5nIGVuZD8KKworICAgSWYgbm9uZSBvZiB0aGVz ZSBzZWVtIHRvIGV4cGxhaW4gaXQsIHRoZW4gdGhlIHByb2JsZW0gaXMgbm90IHNpemUKKyAgIHJl bGF0ZWQsIGJ1dCByZWZsZWN0cyBzb21lIGNsYXNoIGJldHdlZW4gdGhlIGZpbGUgY29udGVudHMg YW5kIHRoZQorICAgY2hhcmFjdGVyaXN0aWNzIG9mIHRoZSBjb25uZWN0aW9uLCBpbiB3aGljaCBj YXNlIGZvbGxvdyB0aGUKKyAgIGluc3RydWN0aW9ucyBpbiB0aGUgZmlyc3QgcGFyYWdyYXBoIG9m IHRoaXMgc2VjdGlvbi4KKworICAgU3VwcG9zZSB0d28gY29waWVzIG9mIEtlcm1pdCBhcmUgcmVj ZWl2aW5nIGZpbGVzIGludG8gdGhlIHNhbWUKKyAgIGRpcmVjdG9yeSwgYW5kIHRoZSBmaWxlcyBo YXZlIHRoZSBzYW1lIG5hbWUsIGUuZy4gImZvby5iYXIiLiBXaGljaGV2ZXIKKyAgIG9uZSBzdGFy dHMgZmlyc3Qgb3BlbnMgYW4gb3V0cHV0IGZpbGUgY2FsbGVkICJmb28uYmFyIi4gVGhlIHNlY29u ZCBvbmUKKyAgIHNlZXMgdGhlcmUgaXMgYWxyZWFkeSBhIGZvby5iYXIgZmlsZSwgYW5kIHNvIHJl bmFtZXMgdGhlIGV4aXN0aW5nCisgICBmb28uYmFyIHRvIGZvby5iYXIufjF+IChvciB3aGF0ZXZl cikuIFdoZW4gdGhlIGZpcnN0IGZpbGUgaGFzIGJlZW4KKyAgIHJlY2VpdmVkIGNvbXBsZXRlbHks IEtlcm1pdCBnb2VzIHRvIGNoYW5nZSBpdHMgbW9kaWZpY2F0aW9uIHRpbWUgYW5kCisgICBwZXJt aXNzaW9ucyB0byB0aG9zZSBnaXZlbiBieSB0aGUgZmlsZSBzZW5kZXIgaW4gdGhlIEF0dHJpYnV0 ZSBwYWNrZXQuCisgICBCdXQgaW4gVW5peCwgdGhlIEFQSXMgZm9yIGRvaW5nIHRoaXMgdGFrZSBh IGZpbGVuYW1lLCBub3QgYSBmaWxlCisgICBkZXNjcmlwdG9yLiBTaW5jZSB0aGUgZmlyc3QgS2Vy bWl0J3MgZmlsZSBoYXMgYmVlbiByZW5hbWVkLCBhbmQgdGhlCisgICBzZWNvbmQgS2VybWl0IGlz IHVzaW5nIHRoZSBvcmlnaW5hbCBuYW1lLCB0aGUgZmlyc3QgS2VybWl0IGNoYW5nZXMgdGhlCisg ICBtb2R0aW1lIGFuZCBwZXJtaXNzaW9ucyBvZiB0aGUgc2Vjb25kIEtlcm1pdCdzIGZpbGUsIG5v dCBpdHMgb3duLgorICAgQWx0aG91Z2ggdGhlcmUgbWlnaHQgYmUgYSB3YXkgdG8gd29yayBhcm91 bmQgdGhpcyBpbiB0aGUgY29kZSwgZS5nLgorICAgdXNpbmcgaW5vZGUgbnVtYmVycyB0byBrZWVw IHRyYWNrIG9mIHdoaWNoIGZpbGUgaXMgd2hpY2gsIHRoaXMgd291bGQgYmUKKyAgIHRyaWNreSBh bmQgbW9zdCBsaWtlbHkgbm90IHZlcnkgcG9ydGFibGUuIEl0J3MgYmV0dGVyIHRvIHNldCB1cCB5 b3VyCisgICBhcHBsaWNhdGlvbiB0byBwcmV2ZW50IHN1Y2ggdGhpbmdzIGZyb20gaGFwcGVuaW5n LCB3aGljaCBpcyBlYXN5IGVub3VnaAorICAgdXNpbmcgdGhlIHNjcmlwdCBsYW5ndWFnZSwgZmls ZW5hbWUgdGVtcGxhdGVzLCBldGMuCisKKyAgIFN1cHBvc2UgeW91IHN0YXJ0IEMtS2VybWl0IHdp dGggYSBjb21tYW5kLWxpbmUgYXJndW1lbnQgdG8gc2VuZCBvcgorICAgcmVjZWl2ZSBhIGZpbGUg KGUuZy4gImtlcm1pdCAtciIpIGFuZCB0aGVuIHR5cGUgQ3RybC1cYyBpbW1lZGlhdGVseQorICAg YWZ0ZXJ3YXJkcyB0byBlc2NhcGUgYmFjayBhbmQgaW5pdGlhdGUgdGhlIG90aGVyIGVuZCBvZiB0 aGUgdHJhbnNmZXIsCisgICBCVVQgeW91ciBsb2NhbCBLZXJtaXQncyBlc2NhcGUgY2hhcmFjdGVy IGlzIG5vdCBDdHJsLVwuIEluIHRoaXMgY2FzZSwKKyAgIHRoZSBsb2NhbCBLZXJtaXQgcGFzc2Vz IHRoZSBDdHJsLVwgdG8gdGhlIHJlbW90ZSBzeXN0ZW0sIGFuZCBpZiB0aGlzIGlzCisgICBVbml4 LCBDdHJsLVwgaXMgbGlrZWx5IHRvIGJlIGl0cyBTSUdRVUlUIGNoYXJhY3Rlciwgd2hpY2ggY2F1 c2VzIHRoZQorICAgY3VycmVudCBwcm9ncmFtIHRvIGhhbHQgYW5kIGR1bXAgY29yZS4gV2VsbCwg anVzdCBhYm91dCB0aGUgZmlyc3QgdGhpbmcKKyAgIEMtS2VybWl0IGRvZXMgd2hlbiBpdCBzdGFy dHMgaXMgdG8gZGlzYWJsZSB0aGUgU0lHUVVJVCBzaWduYWwuIEhvd2V2ZXIsCisgICBpdCBpcyBz dGlsbCBwb3NzaWJsZSBmb3IgU0lHUVVJVCB0byBjYXVzZSBLZXJtaXQgdG8gcXVpdCBhbmQgZHVt cCBjb3JlCisgICBpZiBpdCBpcyBkZWxpdmVyZWQgd2hpbGUgS2VybWl0IGlzIGJlaW5nIGxvYWRl ZCBvciBzdGFydGVkLCBiZWZvcmUgdGhlCisgICBzaWduYWwgY2FuIGJlIGRpc2FibGVkLiBUaGVy ZSdzIG5vdGhpbmcgS2VybWl0IGl0c2VsZiBjYW4gZG8gYWJvdXQKKyAgIHRoaXMsIGJ1dCB5b3Ug Y2FuIHByZXZlbnQgaXQgZnJvbSBoYXBwZW5pbmcgYnkgZGlzYWJsaW5nIFNJR1FVSVQgaW4KKyAg IHlvdXIgVW5peCBzZXNzaW9uLiBUaGUgY29tbWFuZCBpcyB1c3VhbGx5IHNvbWV0aGluZyBsaWtl OgorCisgIHN0dHkgcXVpdCB1bmRlZgorCisgICBVbml4IEMtS2VybWl0IGRvZXMgbm90IHJlamVj dCBpbmNvbWluZyBmaWxlcyBvbiB0aGUgYmFzaXMgb2Ygc2l6ZS4KKyAgIFRoZXJlIGFwcGVhcnMg dG8gYmUgbm8gZ29vZCAocmVsaWFibGUsIHBvcnRhYmxlKSB3YXkgdG8gZGV0ZXJtaW5lIGluCisg ICBhZHZhbmNlIGhvdyBtdWNoIGRpc2sgc3BhY2UgaXMgYXZhaWxhYmxlLCBlaXRoZXIgb24gdGhl IGRldmljZSwgb3IKKyAgICh3aGVuIHF1b3RhcyBvciBvdGhlciBsaW1pdHMgYXJlIGludm9sdmVk KSB0byB0aGUgdXNlci4KKworICAgVW5peCBDLUtlcm1pdCBkaXNjYXJkcyBhbGwgY2FycmlhZ2Ug cmV0dXJucyBmcm9tIGluY29taW5nIGZpbGVzIHdoZW4gaW4KKyAgIHRleHQgbW9kZS4KKworICAg SWYgQy1LZXJtaXQgaGFzIHByb2JsZW1zIGNyZWF0aW5nIGZpbGVzIGluIHdyaXRhYmxlIGRpcmVj dG9yaWVzIHdoZW4gaXQKKyAgIGlzIGluc3RhbGxlZCBzZXR1aWQgb3Igc2V0Z2lkIG9uIEJTRC1i YXNlZCB2ZXJzaW9ucyBvZiBVbml4IHN1Y2ggYXMKKyAgIE5lWFRTVEVQIDMuMCwgaXQgcHJvYmFi bHkgbmVlZHMgdG8gYmUgcmVidWlsdCB3aXRoIHRoZSAtRFNXX0FDQ19JRAorICAgY29tcGlsYXRp b24gc3dpdGNoLgorCisgICBJZiB5b3UgU0VUIEZJTEUgRElTUExBWSBGVUxMU0NSRUVOLCBhbmQg Qy1LZXJtaXQgY29tcGxhaW5zICJTb3JyeSwKKyAgIHRlcm1pbmFsIHR5cGUgbm90IHN1cHBvcnRl ZCIsIGl0IG1lYW5zIHRoYXQgdGhlIHRlcm1pbmFsIGxpYnJhcnkKKyAgICh0ZXJtY2FwIG9yIHRl cm1saWIpIHRoYXQgQy1LZXJtaXQgd2FzIGJ1aWx0IHdpdGggZG9lcyBub3Qga25vdyBhYm91dCBh CisgICB0ZXJtaW5hbCB3aG9zZSBuYW1lIGlzIHRoZSBjdXJyZW50IHZhbHVlIG9mIHlvdXIgVEVS TSBlbnZpcm9ubWVudAorICAgdmFyaWFibGUuIElmIHRoaXMgaGFwcGVucywgYnV0IHlvdSB3YW50 IHRvIGhhdmUgdGhlIGZ1bGxzY3JlZW4gZmlsZQorICAgdHJhbnNmZXIgZGlzcGxheSwgRVhJVCBm cm9tIEMtS2VybWl0IGFuZCBzZXQgYSBVbml4IHRlcm1pbmFsIHR5cGUgZnJvbQorICAgYW1vbmcg dGhlIHN1cHBvcnRlZCB2YWx1ZXMgdGhhdCBpcyBhbHNvIHN1cHBvcnRlZCBieSB5b3VyIHRlcm1p bmFsCisgICBlbXVsYXRvciwgb3IgZWxzZSBoYXZlIGFuIGVudHJ5IGZvciB5b3VyIHRlcm1pbmFs IHR5cGUgYWRkZWQgdG8gdGhlCisgICBzeXN0ZW0gdGVybWNhcCBhbmQvb3IgdGVybWluZm8gZGF0 YWJhc2UuCisKKyAgIElmIHlvdSBhdHRlbXB0IHRvIHN1c3BlbmQgQy1LZXJtaXQgZHVyaW5nIGxv Y2FsLW1vZGUgZmlsZSB0cmFuc2ZlciBhbmQKKyAgIHRoZW4gY29udGludWUgaXQgaW4gdGhlIGJh Y2tncm91bmQgKHZpYSBiZyksIGl0IHdpbGwgYmxvY2sgZm9yICJ0dHkKKyAgIG91dHB1dCIgaWYg eW91IGFyZSB1c2luZyB0aGUgRlVMTFNDUkVFTiBmaWxlIHRyYW5zZmVyIGRpc3BsYXkuIFRoaXMg aXMKKyAgIGFwcGFyZW50bHkgYSBwcm9ibGVtIHdpdGggY3Vyc2VzLiBNb3ZpbmcgYSBsb2NhbC1t b2RlIGZpbGUgdHJhbnNmZXIKKyAgIGJhY2sgYW5kIGZvcnRoIGJldHdlZW4gZm9yZWdyb3VuZCBh bmQgYmFja2dyb3VuZCB3b3JrcyBjb3JyZWN0bHksCisgICBob3dldmVyLCB3aXRoIHRoZSBTRVJJ QUwsIENSVCwgQlJJRUYsIG9yIE5PTkUgZmlsZSB0cmFuc2ZlciBkaXNwbGF5cy4KKworICAgSWYg Qy1LZXJtaXQncyBjb21tYW5kIHBhcnNlciBubyBsb25nZXIgZWNob2VzLCBvciBvdGhlcndpc2Ug YWN0cworICAgc3RyYW5nZWx5LCBhZnRlciByZXR1cm5pbmcgZnJvbSBhIGZpbGUgdHJhbnNmZXIg d2l0aCB0aGUgZnVsbHNjcmVlbgorICAgKGN1cnNlcykgZGlzcGxheSwgYW5kIHRoZSBjdXJzZXMg bGlicmFyeSBmb3IgeW91ciB2ZXJzaW9uIG9mIFVuaXgKKyAgIGluY2x1ZGVzIHRoZSBuZXd0ZXJt KCkgZnVuY3Rpb24sIHRoZW4gdHJ5IHJlYnVpbGRpbmcgeW91ciB2ZXJzaW9uIG9mCisgICBDLUtl cm1pdCB3aXRoIC1EQ0tfTkVXVEVSTS4gU2ltaWxhcmx5IGlmIGl0IGVjaG9lcyBkb3VibHksIHdo aWNoIG1pZ2h0CisgICBldmVuIGhhcHBlbiBkdXJpbmcgYSBzdWJzZXF1ZW50IENPTk5FQ1Qgc2Vz c2lvbi4gSWYgcmVidWlsZGluZyB3aXRoCisgICAtRENLX05FV1RFUk0gZG9lc24ndCBmaXggaXQs IHRoZW4gdGhlcmUgaXMgc29tZXRoaW5nIHZlcnkgc3RyYW5nZSBhYm91dAorICAgeW91ciBzeXN0 ZW0ncyBjdXJzZXMgbGlicmFyeSwgYW5kIHlvdSBzaG91bGQgcHJvYmFibHkgbm90IHVzZSBpdC4g VGVsbAorICAgQy1LZXJtaXQgdG8gU0VUIEZJTEUgRElTUExBWSBDUlQsIEJSSUVGLCBvciBhbnl0 aGluZyBlbHNlIG90aGVyIHRoYW4KKyAgIEZVTExTQ1JFRU4sIGFuZC9vciByZWJ1aWxkIHdpdGhv dXQgLURDS19DVVJTRVMsIGFuZCB3aXRob3V0IGxpbmtpbmcKKyAgIHdpdGggKHRlcm1saWIgYW5k KSBjdXJzZXMuIE5vdGU6IFRoaXMgcHJvYmxlbSBzZWVtZWQgdG8gaGF2ZSBlc2NhbGF0ZWQKKyAg IGluIEMtS2VybWl0IDcuMCwgYW5kIC1EQ0tfTkVXVEVSTSBoYWQgdG8gYmUgYWRkZWQgdG8gbWFu eSBidWlsZHMgdGhhdAorICAgcHJldmlvdXNseSB3b3JrZWQgd2l0aG91dCBpdDogTGludXgsIEFJ WCA0LjEsIERHL1VYLCBldGMuIEluIHRoZSBMaW51eAorICAgY2FzZSwgaXQgaXMgb2J2aW91c2x5 IGJlY2F1c2Ugb2YgY2hhbmdlcyBpbiB0aGUgKG4pY3Vyc2VzIGxpYnJhcnk7IHRoZQorICAgY2F1 c2UgaW4gdGhlIG90aGVyIGNhc2VzIGlzIG5vdCBrbm93bi4KKworICAgQy1LZXJtaXQgY3JlYXRl cyBiYWNrdXAtZmlsZSBuYW1lcyAoc3VjaCBhcyAib29mYS50eHQufjF+IikgYmFzZWQgb24KKyAg IGl0cyBrbm93bGVkZ2Ugb2YgdGhlIG1heGltdW0gZmlsZW5hbWUgbGVuZ3RoIG9uIHRoZSBwbGF0 Zm9ybSB3aGVyZSBpdAorICAgaXMgcnVubmluZywgd2hpY2ggaXMgbGVhcm5lZCBhdCBjb21waWxl IHRpbWUsIGJhc2VkIG9uIE1BWE5BTUxFTiBvcgorICAgZXF1aXZhbGVudCBzeW1ib2xzIGZyb20g dGhlIHN5c3RlbSBoZWFkZXIgZmlsZXMuIEJ1dCBzdXBwb3NlIEMtS2VybWl0CisgICBpcyByZWNl aXZpbmcgZmlsZXMgb24gYSBVbml4IHBsYXRmb3JtIHRoYXQgc3VwcG9ydHMgbG9uZyBmaWxlbmFt ZXMsIGJ1dAorICAgdGhlIGluY29taW5nIGZpbGVzIGFyZSBiZWluZyBzdG9yZWQgb24gYW4gTkZT LW1vdW50ZWQgZmlsZSBzeXN0ZW0gdGhhdAorICAgc3VwcG9ydHMgb25seSBzaG9ydCBuYW1lcy4g TkZTIG1hcHMgdGhlIGV4dGVybmFsIHN5c3RlbSB0byB0aGUgbG9jYWwKKyAgIEFQSXMsIHNvIEMt S2VybWl0IGhhcyBubyB3YXkgb2Yga25vd2luZyB0aGF0IGxvbmcgbmFtZXMgd2lsbCBiZQorICAg dHJ1bmNhdGVkLiBPciB0aGF0IEMtS2VybWl0IGlzIHJ1bm5pbmcgb24gYSB2ZXJzaW9uIG9mIFVu aXggdGhhdAorICAgc3VwcG9ydHMgYm90aCBsb25nLW5hbWUgYW5kIHNob3J0LW5hbWUgZmlsZSBz eXN0ZW1zIHNpbXVsdGFuZW91c2x5CisgICAoc3VjaCBhcyBIUC1VWCA3LjAwKS4gVGhpcyBjYW4g Y2F1c2UgdW5leHBlY3RlZCBiZWhhdmlvciB3aGVuIGNyZWF0aW5nCisgICBiYWNrdXAgZmlsZXMs IG9yIHdvcnNlLiBGb3IgZXhhbXBsZSwgeW91IGFyZSBzZW5kaW5nIGEgZ3JvdXAgb2YgZmlsZXMK KyAgIHdob3NlIG5hbWVzIGFyZSBkaWZmZXJlbnRpYXRlZCBvbmx5IGJ5IGNoYXJhY3RlcnMgcGFz dCB0aGUgcG9pbnQgYXQKKyAgIHdoaWNoIHRoZXkgd291bGQgYmUgdHJ1bmNhdGVkLCBlYWNoIGZp bGUgd2lsbCBvdmVyd3JpdGUgdGhlIHByZXZpb3VzCisgICBvbmUgdXBvbiBhcnJpdmFsLgorCisx MS4gRVhURVJOQUwgRklMRSBUUkFOU0ZFUiBQUk9UT0NPTFMKKworICAgWyBbNTg4XVRvcCBdIFsg WzU4OV1Db250ZW50cyBdIFsgWzU5MF1OZXh0IF0gWyBbNTkxXVByZXZpb3VzIF0KKworICAgU0VD VElPTiBDT05URU5UUworCisgIDExLjEuIFs1OTJdQy1LZXJtaXQgYXMgYW4gRXh0ZXJuYWwgUHJv dG9jb2wKKyAgMTEuMi4gWzU5M11JbnZva2luZyBFeHRlcm5hbCBQcm90b2NvbHMgZnJvbSBDLUtl cm1pdAorCisgICBVbml4IEMtS2VybWl0IGNhbiBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGgg b3RoZXIgY29tbXVuaWNhdGlvbnMKKyAgIHNvZnR3YXJlIGluIHZhcmlvdXMgd2F5cy4gQy1LZXJt aXQgY2FuIGJlIGludm9rZWQgZnJvbSBhbm90aGVyCisgICBjb21tdW5pY2F0aW9ucyBwcm9ncmFt IGFzIGFuICJleHRlcm5hbCBwcm90b2NvbCIsIGFuZCBDLUtlcm1pdCBjYW4gYWxzbworICAgaW52 b2tlIG90aGVyIGNvbW11bmljYXRpb24gc29mdHdhcmUgdG8gcGVyZm9ybSBleHRlcm5hbCBwcm90 b2NvbHMuCisKKyAgIFRoaXMgc29ydCBvZiBvcGVyYXRpb24gbWFrZXMgc2Vuc2Ugb25seSB3aGVu IHlvdSBhcmUgZGlhbGluZyBvdXQgZnJvbQorICAgeW91ciBVbml4IHN5c3RlbSAob3IgbWFraW5n IGEgbmV0d29yayBjb25uZWN0aW9uIGZyb20gaXQpLiBJZiB0aGUgVW5peAorICAgc3lzdGVtIGlz IHRoZSBvbmUgeW91IGhhdmUgZGlhbGVkIGluIHRvLCB5b3UgZG9uJ3QgbmVlZCBhbnkgb2YgdGhl c2UKKyAgIHRyaWNrcy4gSnVzdCBydW4gdGhlIGRlc2lyZWQgc29mdHdhcmUgb24geW91ciBVbml4 IHN5c3RlbSBpbnN0ZWFkIG9mCisgICBLZXJtaXQuIFdoZW4gZGlhbGluZyBvdXQgZnJvbSBhIFVu aXggc3lzdGVtLCB0aGUgZGlmZmljdWx0eSBpcyBnZXR0aW5nCisgICB0d28gcHJvZ3JhbXMgdG8g c2hhcmUgdGhlIHNhbWUgY29tbXVuaWNhdGlvbiBkZXZpY2UgaW4gc3BpdGUgb2YgdGhlCisgICBV bml4IFVVQ1AgbG9ja2ZpbGUgbWVjaGFuaXNtLCB3aGljaCB3b3VsZCBub3JtYWxseSBwcmV2ZW50 IGFueSBzaGFyaW5nLAorICAgYW5kIHByZXZlbnRpbmcgdGhlIGV4dGVybmFsIHByb3RvY29sIGZy b20gY2xvc2luZyAoYW5kIHRoZXJlZm9yZQorICAgaGFuZ2luZyB1cCkgdGhlIGRldmljZSB3aGVu IGl0IGV4aXRzIGJhY2sgdG8gdGhlIHByb2dyYW0gdGhhdCBpbnZva2VkCisgICBpdC4KKworMTEu MS4gQy1LRVJNSVQgQVMgQU4gRVhURVJOQUwgUFJPVE9DT0wKKworICAgWyBbNTk0XVRvcCBdIFsg WzU5NV1Db250ZW50cyBdIFsgWzU5Nl1TZWN0aW9uIENvbnRlbnRzIF0gWyBbNTk3XU5leHQgXQor CisgICAoVGhpcyBzZWN0aW9uIGRlbGV0ZWQ7IHNlZSBbNTk4XVVzaW5nIEMtS2VybWl0LCAybmQg RWQsIENoYXB0ZXIgMTQuKQorCisgICAicGNvbW0iIGlzIGEgZ2VuZXJhbC1wdXJwb3NlIHRlcm1p bmFsIHByb2dyYW0gdGhhdCBwcm92aWRlcyBmaWxlCisgICB0cmFuc2ZlciBjYXBhYmlsaXRpZXMg aXRzZWxmIChYLSBhbmQgWU1PREVNIHZhcmlhdGlvbnMpIGFuZCB0aGUgYWJpbGl0eQorICAgdG8g Y2FsbCBvbiBleHRlcm5hbCBwcm9ncmFtcyB0byBkbyBmaWxlIHRyYW5zZmVycyAoWk1PREVNIGFu ZCBLZXJtaXQsCisgICBmb3IgZXhhbXBsZSkuIFlvdSBjYW4gdGVsbCBwY29tbSB0aGUgY29tbWFu ZCB0byBzZW5kIG9yIHJlY2VpdmUgYSBmaWxlCisgICB3aXRoIGFuIGV4dGVybmFsIHByb3RvY29s OgorICAgICAgICAgICAgICAgICAgICAgICAgU2VuZCAgICAgICAgICAgICAgICAgICAgICAgICAg ICBSZWNlaXZlCisgICAgICAgIFpNT0RFTSAgICAgICAgICBzeiBmaWxlbmFtZSAgICAgICAgICAg ICAgICAgICAgIHJ6CisgICAgICAgIEtlcm1pdCAgICAgICAgICBrZXJtaXQgLXMgZmlsZW5hbWUg ICAgICAgICAgICAgIGtlcm1pdCAtcgorCisgICBwY29tbSBydW5zIGV4dGVybmFsIHByb2dyYW1z IGZvciBmaWxlIHRyYW5zZmVyIGJ5IG1ha2luZyBzdGRpbiBhbmQKKyAgIHN0ZG91dCBwb2ludCB0 byB0aGUgbW9kZW0gcG9ydCwgYW5kIHRoZW4gZXhlYy1pbmcgIi9iaW4vc2ggLWMgeHh4IgorICAg KHdoZXJlIHh4eCBpcyB0aGUgYXBwcm9wcmlhdGUgY29tbWFuZCkuIEhvd2V2ZXIsIEMtS2VybWl0 IGRvZXMgbm90CisgICB0cmVhdCBzdGRpbiBhbmQgc3Rkb3V0IGFzIHRoZSBjb21tdW5pY2F0aW9u IGRldmljZSB1bmxlc3MgeW91IGluc3RydWN0CisgICBpdDoKKworCisgICAgICAgICAgICAgICAg ICAgICAgICBTZW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlY2VpdmUKKyAgICAgICAg S2VybWl0ICAgICAgICAgIGtlcm1pdCAtbCAwIC1zIGZpbGVuYW1lICAgICAgICAga2VybWl0IC1s IDAgLXIKKworICAgVGhlICItbCAwIiBvcHRpb24gbWVhbnMgdG8gdXNlIGZpbGUgZGVzY3JpcHRv ciAwIGZvciB0aGUgY29tbXVuaWNhdGlvbgorICAgZGV2aWNlLgorCisgICBJbiBnZW5lcmFsLCBh bnkgcHJvZ3JhbSBjYW4gcGFzcyBhbnkgb3BlbiBmaWxlIGRlc2NyaXB0b3IgdG8gQy1LZXJtaXQK KyAgIGZvciB0aGUgY29tbXVuaWNhdGlvbiBkZXZpY2UgaW4gdGhlICItbCIgY29tbWFuZC1saW5l IG9wdGlvbi4gV2hlbgorICAgS2VybWl0IGlzIGdpdmVuIGEgbnVtYmVyIGFzIHRoZSBhcmd1bWVu dCB0byB0aGUgIi1sIiBvcHRpb24sIGl0IHNpbXBseQorICAgdXNlcyBpdCBhcyBhIGZpbGUgZGVz Y3JpcHRvciwgYW5kIGl0IGRvZXMgbm90IGF0dGVtcHQgdG8gY2xvc2UgaXQgdXBvbgorICAgZXhp dC4KKworICAgSGVyZSdzIGFub3RoZXIgZXhhbXBsZSwgZm9yIFNleW9uIChhIExpbnV4IGNvbW11 bmljYXRpb24gcHJvZ3JhbSkuCisgICBGaXJzdCB0cnkgdGhlIHRlY2huaXF1ZSBhYm92ZS4gSWYg dGhhdCB3b3JrcywgZmluZTsgb3RoZXJ3aXNlLi4uIElmCisgICBTZXlvbiBkb2VzIG5vdCBnaXZl IHlvdSBhIHdheSB0byBhY2Nlc3MgYW5kIHBhc3MgYWxvbmcgdGhlIGZpbGUKKyAgIGRlc2NyaXB0 b3IsIGJ1dCBpdCBzdGFydHMgdXAgdGhlIEtlcm1pdCBwcm9ncmFtIHdpdGggaXRzIHN0YW5kYXJk IGkvbworICAgcmVkaXJlY3RlZCB0byBpdHMgKFNleW9uJ3MpIGNvbW11bmljYXRpb25zIGZpbGUg ZGVzY3JpcHRvciwgeW91IGNhbgorICAgYWxzbyBleHBlcmltZW50IHdpdGggdGhlIGZvbGxvd2lu ZyBtZXRob2QsIHdoaWNoIHdvcmtlZCBoZXJlIGluIGJyaWVmCisgICB0ZXN0cyBvbiBTdW5PUy4g SW5zdGVhZCBvZiBoYXZpbmcgU2V5b24gdXNlICJrZXJtaXQgLXIiIG9yICJrZXJtaXQgLXMKKyAg IGZpbGVuYW1lIiBhcyBpdHMgS2VybWl0IHByb3RvY29sIGNvbW1hbmRzLCB1c2Ugc29tZXRoaW5n IGxpa2UgdGhpcworICAgKGV4YW1wbGVzIGFzc3VtZSBDLUtlcm1pdCA2LjApOgorCisgICBGb3Ig c2VyaWFsIGNvbm5lY3Rpb25zOgorCisgIGtlcm1pdCAtWXFRbCAwIC1yICAgICAgICAgICAgICAg ICAgICAgPC0tIHRvIHJlY2VpdmUKKyAga2VybWl0IC1ZcVFsIDAgLXMgZmlsZW5hbWUocykgICAg ICAgICA8LS0gdG8gc2VuZCBvbmUgb3IgbW9yZSBmaWxlcworCisgICBGb3IgVGVsbmV0IGNvbm5l Y3Rpb25zOgorCisgIGtlcm1pdCAtWXFRRiAwIC1yICAgICAgICAgICAgICAgICAgICAgPC0tIHRv IHJlY2VpdmUKKyAga2VybWl0IC1ZcVFGIDAgLXMgZmlsZW5hbWUocykgICAgICAgICA8LS0gdG8g c2VuZCBvbmUgb3IgbW9yZSBmaWxlcworCisgICBDb21tYW5kIGxpbmUgb3B0aW9uczoKKworICBZ ICAgIC0gc2tpcCBleGVjdXRpbmcgdGhlIGluaXQgZmlsZQorICBRICAgIC0gdXNlIGZhc3QgZmls ZSB0cmFuc2ZlciBzZXR0aW5ncyAoZGVmYXVsdCBpbiA4LjApCisgIGwgMCAgLSB0cmFuc2ZlciBm aWxlcyB1c2luZyBmaWxlIGRlc2NyaXB0b3IgMCBmb3IgYSBzZXJpYWwgY29ubmVjdGlvbgorICBG IDAgIC0gdHJhbnNmZXIgZmlsZXMgdXNpbmcgZmlsZSBkZXNjcmlwdG9yIDAgZm9yIGEgVGVsbmV0 IGNvbm5lY3Rpb24KKyAgcSAgICAtIHF1aWV0IC0gbm8gbWVzc2FnZXMKKyAgciAgICAtIHJlY2Vp dmUKKyAgcyAgICAtIHNlbmQKKworMTEuMi4gSU5WT0tJTkcgRVhURVJOQUwgUFJPVE9DT0xTIEZS T00gQy1LRVJNSVQKKworICAgWyBbNTk5XVRvcCBdIFsgWzYwMF1Db250ZW50cyBdIFsgWzYwMV1T ZWN0aW9uIENvbnRlbnRzIF0gWworICAgWzYwMl1QcmV2aW91cyBdCisKKyAgICAgKFRoaXMgc2Vj dGlvbiBpcyBvYnNvbGV0ZSwgYnV0IG5vdCB0b3RhbGx5IHVzZWxlc3MuIFNlZSBDaGFwdGVyIDE0 CisgICAgIG9mIFs2MDNdVXNpbmcgQy1LZXJtaXQsIDJuZCBFZGl0aW9uKS4KKworICAgQWZ0ZXIg eW91IGhhdmUgb3BlbmVkIGEgY29tbXVuaWNhdGlvbiBsaW5rIHdpdGggQy1LZXJtaXQncyBTRVQg TElORQorICAgKFNFVCBQT1JUKSBvciBTRVQgSE9TVCAoVEVMTkVUKSBjb21tYW5kLCBDLUtlcm1p dCBtYWtlcyBpdHMgZmlsZQorICAgZGVzY3JpcHRvciBhdmFpbGFibGUgdG8geW91IGluIHRoZSBc dih0dHlmZCkgdmFyaWFibGUgc28geW91IGNhbiBwYXNzCisgICBpdCBhbG9uZyB0byBvdGhlciBw cm9ncmFtcyB0aGF0IHlvdSBSVU4gZnJvbSBDLUtlcm1pdC4gSGVyZSwgZm9yCisgICBleGFtcGxl LCBDLUtlcm1pdCBydW5zIGl0c2VsZiBhcyBhbiBleHRlcm5hbCBwcm90b2NvbDoKKworICBDLUtl cm1pdD5zZXQgbW9kZW0gdHlwZSBoYXllcworICBDLUtlcm1pdD5zZXQgbGluZSAvZGV2L2FjdQor ICBDLUtlcm1pdD5zZXQgc3BlZWQgMjQwMAorICBDLUtlcm1pdD5kaWFsIDc2NTQzMjEKKyAgIENh bGwgY29tcGxldGUuCisgIEMtS2VybWl0PmVjaG8gXHYodHR5ZmQpCisgICAzCisgIEMtS2VybWl0 PnJ1biBrZXJtaXQgLWwgXHYodHR5ZmQpCisKKyAgIE90aGVyIHByb2dyYW1zIHRoYXQgYWNjZXB0 IG9wZW4gZmlsZSBkZXNjcmlwdG9ycyBvbiB0aGUgY29tbWFuZCBsaW5lCisgICBjYW4gYmUgc3Rh cnRlZCBpbiB0aGUgc2FtZSB3YXkuCisKKyAgIFlvdSBjYW4gYWxzbyB1c2UgeW91ciBzaGVsbCdz IGkvbyByZWRpcmVjdGlvbiBmYWNpbGl0aWVzIHRvIGFzc2lnbgorICAgQy1LZXJtaXQncyBvcGVu IGZpbGUgZGVzY3JpcHRvciAodHR5ZmQpIHRvIHN0ZGluIG9yIHN0ZG91dC4gRm9yCisgICBleGFt cGxlLCBvbGQgdmVyc2lvbnMgb2YgdGhlIFVuaXggWk1PREVNIHByb2dyYW1zLCBzeiBhbmQgcnos IHdoZW4KKyAgIGludm9rZWQgYXMgZXh0ZXJuYWwgcHJvdG9jb2xzLCBleHBlY3QgdG8gZmluZCB0 aGUgY29tbXVuaWNhdGlvbiBkZXZpY2UKKyAgIGFzc2lnbmVkIHRvIHN0ZGluIGFuZCBzdGRvdXQg d2l0aCBubyBvcHRpb24gZm9yIHNwZWNpZnlpbmcgYW55IG90aGVyCisgICBmaWxlIGRlc2NyaXB0 b3Igb24gdGhlIHN6IG9yIHJ6IGNvbW1hbmQgbGluZS4gSG93ZXZlciwgeW91IGNhbiBzdGlsbAor ICAgaW52b2tlIHN6IGFuZCByeiBhcyBleHRlcmlvciBwcm90b2NvbHMgZnJvbSBDLUtlcm1pdCBp ZiB5b3VyIGN1cnJlbnQKKyAgIHNoZWxsICgkU0hFTEwgdmFyaWFibGUpIGlzIGtzaCAodGhlIEtv cm4gc2hlbGwpIG9yIGJhc2ggKHRoZQorICAgQm91cm5lLUFnYWluIHNoZWxsKSwgd2hpY2ggYWxs b3dzIGFzc2lnbm1lbnQgb2YgYXJiaXRyYXJ5IGZpbGUKKyAgIGRlc2NyaXB0b3JzIHRvIHN0ZGlu IGFuZCBzdGRvdXQ6CisKKyAgQy1LZXJtaXQ+IHJ1biByeiA8Jlx2KHR0eWZkKSA+Jlx2KHR0eWZk KQorCisgICBvcjoKKworICBDLUtlcm1pdD4gcnVuIHN6IG9vZmEuemlwIDwmXHYodHR5ZmQpID4m XHYodHR5ZmQpCisKKyAgIEluIHZlcnNpb24gNUEoMTkwKSBhbmQgbGF0ZXIsIHlvdSBjYW4gdXNl IEMtS2VybWl0J3MgUkVESVJFQ1QgY29tbWFuZCwKKyAgIGlmIGl0IGlzIGF2YWlsYWJsZSBpbiB5 b3VyIHZlcnNpb24gb2YgQy1LZXJtaXQsIHRvIGFjY29tcGxpc2ggdGhlIHNhbWUKKyAgIHRoaW5n IHdpdGhvdXQgZ29pbmcgdGhyb3VnaCB0aGUgc2hlbGw6CisKKyAgQy1LZXJtaXQ+IHJlZGlyZWN0 IHJ6CisKKyAgIG9yOgorCisgIEMtS2VybWl0PiByZWRpcmVjdCBzeiBvb2ZhLnppcAorCisgICBB IGNvbXBsZXRlIHNldCBvZiByeixzeixyYixzYixyeCxzeCBtYWNyb3MgZm9yIFVuaXggQy1LZXJt aXQgaXMgZGVmaW5lZAorICAgaW4gdGhlIGZpbGUgY2t1cnpzei5pbmkuIEl0IGF1dG9tYXRpY2Fs bHkgY2hvb3NlcyB0aGUgYmVzdCByZWRpcmVjdGlvbgorICAgbWV0aG9kIChidXQgaXMgcmVkdW5k YW50IHNpbmNlIEMtS2VybWl0IDYuMCwgd2hpY2ggbm93IGhhcyBidWlsdC1pbgorICAgc3VwcG9y dCBmb3IgZXh0ZXJuYWwgcHJvdG9jb2xzIHZpYSBpdHMgU0VUIFBST1RPQ09MIGNvbW1hbmQpLgor CisgICBOb3RlIHRoYXQgZXh0ZXJuYWwgcHJvdG9jb2xzIGNhbiBiZSB1c2VkIG9uIEMtS2VybWl0 IFNFVCBMSU5FIG9yIFNFVAorICAgSE9TVCBjb25uZWN0aW9ucyBvbmx5IGlmIHRoZXkgb3BlcmF0 ZSB0aHJvdWdoIHN0YW5kYXJkIGlucHV0IGFuZAorICAgc3RhbmRhcmQgb3V0cHV0LiBJZiB0aGV5 IG9wZW4gdGhlaXIgb3duIGNvbm5lY3Rpb25zLCBLZXJtaXQgY2FuJ3QKKyAgIHJlZGlyZWN0IHRo ZW0gb3ZlciBpdHMgb3duIGNvbm5lY3Rpb24uCisKKzEyLiBTRUNVUklUWQorCisgICBbIFs2MDRd VG9wIF0gWyBbNjA1XUNvbnRlbnRzIF0gWyBbNjA2XU5leHQgXSBbIFs2MDddUHJldmlvdXMgXQor CisgICBBcyBvZiB2ZXJzaW9uIDcuMCwgQy1LZXJtaXQgc3VwcG9ydHMgYSB3aWRlIHJhbmdlIG9m IHNlY3VyaXR5IG9wdGlvbnMKKyAgIGZvciBhdXRoZW50aWNhdGlvbiBhbmQgZW5jcnlwdGlvbjog S2VyYmVyb3MgNCwgS2VyYmVyb3MgNSAvIEdTU0FQSSwKKyAgIFNTTC9UTFMsIGFuZCBTUlAuIFNl ZSB0aGUgc2VwYXJhdGUgWzYwOF1zZWN1cml0eSBkb2N1bWVudCBmb3IgZGV0YWlscy4KKworMTMu IE1JU0NFTExBTkVPVVMgVVNFUiBSRVBPUlRTCisKKyAgIFsgWzYwOV1Ub3AgXSBbIFs2MTBdQ29u dGVudHMgXSBbIFs2MTFdTmV4dCBdIFsgWzYxMl1QcmV2aW91cyBdCisKK0RhdGU6IFRodSwgMTIg TWFyIDkyIDE6NTk6MjUgTUVaCitGcm9tOiBXYWx0ZXIgTWVja3kgPHdhbHRlckByZW50LWEtZ3Vy dS5kZT4KK1N1YmplY3Q6IEhlbHAuVW5peC5zdworVG86IHN2cjRAcGNzYnN0LnBjcy5jb20sIHNv dXJjZUB1c2wuY29tCisKK1BST0RVQ1Q6ICAgICAgICBVbml4CitSRUxFQVNFOiAgICAgICAgRGVs bCBTVlI0IFYyLjEgKGlzIFVTTCBWMy4wKQorTUFDSElORTogICAgICAgIEFULTM4NgorUEFUSE5B TUU6ICAgICAgIC91c3IvbGliL2xpYmMuc28uMQorICAgICAgICAgICAgICAgIC91c3IvY2NzL2xp Yi9saWJjLmEKK0FCU1RSQUNUOiAgICAgICBGdW5jdGlvbiB0dHluYW1lKCkgZG9lcyBub3QgY2xv c2UgaXRzIGZpbGUgZGVzY3JpcHRvcgorREVTQ1JJUFRJT046CisgICAgICAgIHR0eW5hbWUoM0Mp IG9wZW5zIC9kZXYgYnV0IG5ldmVyIGNsb3NlcyBpdC4gU28gaWYgaXQgaXMgY2FsbGVkCisgICAg ICAgIG9mdGVuIGVub3VnaCB0aGUgb3BlbigyKSBpbiB0dHluYW1lKCkgZmFpbHMuIEJlY2F1c2Ug dGhlIGJyb2tlbgorICAgICAgICB0dHluYW1lKCkgaXMgaW4gdGhlIHNoYXJlZCBsaWIgdG9vIGFs bCBwcm9ncmFtcyB1c2luZyBpdCBjYW4KKyAgICAgICAgZmFpbCBpZiB0aGV5IGNhbGwgaXQgb2Z0 ZW4gZW5vdWdoLiBPbmUgaW1wb3J0YW50IHByb2dyYW0gaXMKKyAgICAgICAgdXVjaWNvIHdoaWNo IGNhbGxzIHR0eW5hbWUgZm9yIGV2ZXJ5IGZpbGUgaXQgdHJhbnNmZXJzLgorCisKKyAgIEhlcmUg aXMgYSBsaXR0bGUgdGVzdCBwcm9ncmFtIGlmIHlvdXIgc3lzdGVtIGhhcyB0aGUgYnVnOgorCisj aW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KK21haW4oKSB7CisgICAgaW50 IGkgPSAwOworICAgIHdoaWxlICh0dHluYW1lKDApICE9IE5VTEwpCisgICAgICBpKys7CisgICAg cGVycm9yKCJ0dHluYW1lIik7CisgICAgcHJpbnRmKCJpPSVkXG4iLCBpKTsKK30KKworICAgSWYg dGhpcyBwcm9ncmFtIHJ1bnMgbG9uZ2VyIHRoYW4gc29tZSBzZWNvbmRzIHlvdSBkb24ndCBoYXZl IHRoZSBidWcuCisKKyAgIFdPUktBUk9VTkQ6IE5vbmUgRklYOiBWZXJ5IGVhc3kgaWYgeW91IGhh dmUgc291cmNlIGNvZGUuCisKKyAgIEFub3RoZXIgdXNlciByZXBvcnRzIHNvbWUgbW9yZSBleHBs aWNpdCBzeW1wdG9tcyBhbmQgcmVjb3ZlcmllczoKKworPiBXaGF0IGhhcHBlbnMgaXMgd2hlbiBp bnZva2luZyBja2VybWl0IHdlIGdldCBvbmUgb2YgdGhlIGZvbGxvd2luZworPiBlcnJvciBtZXNz YWdlczoKKz4gICBZb3UgbXVzdCBzZXQgbGluZQorPiAgIE5vdCBhIHR0eQorPiAgIE5vIG1vcmUg cHJvY2Vzc2VzLgorPiBPbmUgb2YgdGhlIGZvbGxvd2luZyB0aHJlZSBhY3Rpb25zIGNsZWFycyB0 aGUgcHJvYmxlbToKKz4gICBzaHV0ZG93biAteSAtZzAgLWk2Cis+ICAga2lsbCAtOSB0aGUgdHR5 bW9uIHdpdGggdGhlIGhpZ2hlc3QgUElECis+ICAgSW52b2tlIHN5c2FkbSBhbmQgZGlzYWJsZSB0 aGVuIGVuYWJsZSB0aGUgbGluZSB5b3Ugd2FudCB0byB1c2UuCis+IFR1cm5pbmcgb2ZmIHJlc3Bh d24gb2Ygc2FjIC10IDMwMCBhbmQgZ29pbmcgdG8gZ2V0dHkncyBhbmQgdXVnZXR0eSdzCis+IGRv ZXMgbm90IGhlbHAuCis+Cis+IEFsc28gQy1LZXJtaXQgcmVwb3J0cyAiP3RpbWVkIG91dCBjbG9z aW5nIC9kZXYvdHR5eHgiLgorPiBJZiB0aGlzIGhhcHBlbnMgYWxsIGlzIHdlbGwuCisKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAoTm90ZTogdGhlIGZvbGxvd2luZyBwcm9i bGVtIGFsc28gb2NjdXJzIG9uIFNHSSBhbmQgcHJvYmFibHkgbWFueSBvdGhlcgorICAgVW5peCBz eXN0ZW1zKToKKworICAgRnJvbTogSmFtZXMgU3BhdGggPHNwYXRoQGpodW5peC5oY2Yuamh1LmVk dT4KKyAgIFRvOiBJbmZvLUtlcm1pdC1SZXF1ZXN0QGN1bml4Zi5jYy5jb2x1bWJpYS5lZHUKKyAg IERhdGU6IFdlZCwgOSBTZXAgMTk5MiAyMDoyMDoyOCAtMDQwMAorICAgU3ViamVjdDogQy1LZXJt aXQgdnMgdXVnZXR0eSAob3IgaW5pdCkgb24gU3BlcnJ5IDUwMDAKKworICAgV2UgaGF2ZSBzdWNj ZXNzZnVsbHkgY29tcGlsZWQgdGhlIGFib3ZlIHJlbGVhc2Ugb24gYSBVbmlzeXMvU3BlcnJ5Cisg ICA1MDAwLzk1LiBXZSB1c2VkIHRoZSBzeXM1cjMgb3B0aW9uLCByYXRoZXIgdGhhbiBzeXM1cjIg c2luY2Ugd2UgaGF2ZQorICAgVlIzIHJ1bm5pbmcgb24gb3VyIHN5c3RlbS4gSW4gb3JkZXIgdG8g YWxsb3cgZGlhbG91dCBhY2Nlc3MgdG8KKyAgIG5vbi1zdXBlcnVzZXJzLCB3ZSBoYWQgdG8gZG8g ImNobW9kIDY2NiAvZGV2L3R0eSMjIywgd2hlcmUgaXQgaGFkIGJlZW4KKyAgIC1ydy0tdy0tdy0g KG93bmVkIGJ5IHV1Y3ApLCBhbmQgdG8gZG8gImNobW9kICt3IC91c3Ivc3Bvb2wvbG9ja3MiLiBX ZQorICAgaGF2ZSBkb25lIHRleHQgYW5kIGJpbmFyeSBmaWxlIHRyYW5zZmVycyB0aHJvdWdoIGxv Y2FsIGFuZCByZW1vdGUKKyAgIGNvbm5lY3Rpb25zLgorCisgICBUaGUgcHJvYmxlbSBjb25jZXJu aW5nIHV1Y3Agb3duZXJzaGlwIGFuZCBwZXJtaXNzaW9ucyBpcyB3b3JzZSB0aGFuIEkKKyAgIHRo b3VnaHQgYXQgZmlyc3QuIEFwcGFyZW50bHkgaW5pdCBvciB1dWdldHR5IGNoYW5nZXMgdGhlIGZp bGUKKyAgIHBlcm1pc3Npb25zIGFmdGVyIGVhY2ggc2Vzc2lvbi4gU28gSSB3cm90ZSB0aGUgZm9s bG93aW5nIEMgcHJvZ3JhbSB0bworICAgb3BlbiBhIHNldCBvZiByZXF1ZXN0ZWQgdHR5IGxpbmVz LiBJIHJ1biB0aGlzIGZvciBhbnkgcmVxdWlyZWQgb3V0Z29pbmcKKyAgIGxpbmUgcHJpb3IgdG8g YSBLZXJtaXQgc2Vzc2lvbi4KKworICAgLS0tLS0tIGN1dCBoZXJlIC0tLS0tLS0KKy8qIG9wZW50 dHkuYyAtLSBmb3JjZSBhbGxvdyByZWFkIG9uIHR0eSBsaW5lcyBmb3IgbW9kZW0gaS9vICovCisv KiBpZGVhIGZyb206IHJlc3RyaWN0LmMgLS0gU3lzdGVtIDUgQWRtaW4gYm9vayBUaG9tYXMvRmFy cm93IHAuIDYwNSAqLworLyogL2plcyBqaW0gc3BhdGgge3NwYXRoQGpodW5peC5oY2ouamh1LmVk dSB9ICovCisvKiAwOC1TZXAtOTIgTk8gQ09QWVJJR0hULiAqLworLyogdGhpcyBtdXN0IGJlIHN1 aWQgdG8gb3BlbiBvdGhlciB0dHkgbGluZXMgKi8KKworLyogI2RlZmluZSBERUJVRyAqLworI2Rl ZmluZSBUVFkgIi9kZXYvdHR5IgorI2RlZmluZSBMT0sgIi91c3Ivc3Bvb2wvbG9ja3MvTENLLi50 dHkiCisjaW5jbHVkZSA8c3RkaW8uaD4KKworLyogYWxsb3dhYmxlIGxpbmVzOiAqLworI2RlZmlu ZSBUT1RBTF9MSU5FUyAzCitzdGF0aWMgY2hhciBhbGxvd2FibGVbVE9UQUxfTElORVNdWzRdID0g eyAiMjAwIiwgIjIwMSIsICIzMDAiIH07CitzdGF0aWMgaW50IHRvdGFsPVRPVEFMX0xJTkVTOwor aW50IGFsbG93OworCisvKiBzdGF0ZXM6ICovCisjZGVmaW5lIFRUWV9VTkRFRiAwCisjZGVmaW5l IFRUWV9MT0NLICAxCisjZGVmaW5lIFRUWV9PS0FZICAyCisKK21haW4oYXJnYywgYXJndikKK2lu dCBhcmdjOyBjaGFyICphcmd2W107IHsKKyAgICBjaGFyIGRldmljZVs1MTJdOworICAgIGNoYXIg bG9ja2Rldls1MTJdOworICAgIGludCBpOworICAgIGlmIChhcmdjID09IDEpIHsKKyAgICAgICAg ZnByaW50ZihzdGRlcnIsICJ1c2FnZTogb3BlbiAyMDAgWy4uLl1cbiIpOworICAgIH0KKyAgICB3 aGlsZSAoLS1hcmdjID4gMCAmJiAoKisrYXJndikgIT0gTlVMTCApIHsKKyNpZmRlZiBERUJVRwor ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlRSWUlORzogJXMlc1xuIiwgVFRZLCAqYXJndik7Cisj ZW5kaWYKKyAgICAgICAgc3ByaW50ZihkZXZpY2UsICIlcyVzIiwgVFRZLCAqYXJndik7CisgICAg ICAgIHNwcmludGYobG9ja2RldiwgIiVzJXMiLCBMT0ssICphcmd2KTsKKyAgICAgICAgYWxsb3cg PSBUVFlfVU5ERUY7IGkgPSAwOworICAgICAgICB3aGlsZSAoaSA8PSB0b3RhbCkgeyAvKiBsb29r IGF0IGFsbCBkZWZpbmVkIGxpbmVzICovCisjaWZkZWYgREVCVUcKKyAgICAgICAgICAgIGZwcmlu dGYoc3RkZXJyLCAiTE9DS0ZJTEU/ICVzP1xuIiwgbG9ja2Rldik7CisjZW5kaWYKKyAgICAgICAg ICAgIGlmIChhY2Nlc3MobG9ja2RldiwgMDApID09IDApIHsKKyAgICAgICAgICAgICAgICBhbGxv dz1UVFlfTE9DSzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyNpZmRl ZiBERUJVRworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJET0VTOiVzPT0lcz9cbiIsIGFs bG93YWJsZVtpXSwgKmFyZ3YpOworI2VuZGlmCisgICAgICAgICAgICBpZiAoc3RyY21wKGFsbG93 YWJsZVtpXSwgKmFyZ3YpID09IDApCisgICAgICAgICAgICAgIGFsbG93PVRUWV9PS0FZOworICAg ICAgICAgICAgaSsrOworICAgICAgICB9CisjaWZkZWYgREVCVUcKKyAgICAgICAgZnByaW50Zihz dGRlcnIsICJhbGxvdz0lZFxuIiwgYWxsb3cpOworI2VuZGlmCisgICAgICAgIHN3aXRjaCAoYWxs b3cpIHsKKyAgICAgICAgICBjYXNlIFRUWV9VTkRFRjoKKyAgICAgICAgICAgIGZwcmludGYgKHN0 ZGVyciwgIm9wZW46IG5vdCBhbGxvd2VkIG9uICVzXG4iLCAqYXJndik7CisgICAgICAgICAgICBi cmVhazsKKyAgICAgICAgICBjYXNlIFRUWV9MT0NLOgorICAgICAgICAgICAgZnByaW50ZiAoc3Rk ZXJyLCAib3BlbjogZGV2aWNlIGxvY2tlZDogJXNcbiIsIGxvY2tkZXYpOworICAgICAgICAgICAg YnJlYWs7CisgICAgICAgICAgY2FzZSBUVFlfT0tBWToKKyAgICAgICAgICAgIC8qIGF0dGVtcHQg dG8gY2hhbmdlIG1vZGUgb24gZGV2aWNlICovCisgICAgICAgICAgICBpZiAoY2htb2QgKGRldmlj ZSwgMDA2NjYpIDwgMCkKKyAgICAgICAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAib3BlbjogY2Fu bm90IGNobW9kIG9uICVzXG4iLCBkZXZpY2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGZwcmludGYgKHN0ZGVyciwgIm9wZW46IEZBVUxUXG4i KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBleGl0ICgwKTsKK30KKworMTQuIFRISVJELVBBUlRZ IERSSVZFUlMKKworICAgWyBbNjEzXVRvcCBdIFsgWzYxNF1Db250ZW50cyBdIFsgWzYxNV1OZXh0 IF0gWyBbNjE2XVByZXZpb3VzIF0KKworICAgVW5peCB2ZXJzaW9ucywgZXNwZWNpYWxseSB0aG9z ZSBmb3IgUENzIChTQ08sIFVuaXh3YXJlLCBldGMpIG1pZ2h0IGJlCisgICBhdWdtZW50ZWQgYnkg dGhpcmQtcGFydHkgY29tbXVuaWNhdGlvbi1ib2FyZCBkcml2ZXJzIGZyb20gRGlnaWJvYXJkLAor ICAgU3RhbGxpb24sIGV0Yy4gVGhlc2UgY2FuIHNvbWV0aW1lcyBjb21wbGljYXRlIG1hdHRlcnMg Zm9yIEtlcm1pdAorICAgY29uc2lkZXJhYmx5IHNpbmNlIEtlcm1pdCBoYXMgbm8gd2F5IG9mIGtu b3dpbmcgdGhhdCBpdCBpcyBnb2luZworICAgdGhyb3VnaCBhIHBvc3NpYmx5IG5vbnN0YW5kYXJk IGRyaXZlci4gVmFyaW91cyBleGFtcGxlcyBhcmUgbGlzdGVkIGluCisgICB0aGUgZWFybGllciBz ZWN0aW9ucyBvZiB0aGlzIGRvY3VtZW50OyBzZWFyY2ggZm9yIFN0YWxsaW9uLCBEaWdpYm9hcmQs CisgICBldGMuIEFkZGl0aW9uYWxseToKKworICAgICAqIFRoZSBTdGFsbGlvbiBUZWNobm9sb2dp ZXMgRWFzeUNvbm5lY3Rpb24gc2VyaWFsIGJvYXJkIGRyaXZlciBkb2VzCisgICAgICAgbm90IGFs d2F5cyByZXBvcnQgdGhlIHN0YXRlIG9mIERTUiBhcyBsb3cuIEZyb20gU3RhbGxpb24gKE9jdG9i ZXIKKyAgICAgICAxOTk3KTogIlVuZm9ydHVuYXRlbHksIHRoaXMgaXMgYSBidWcgaW4gb3VyIGRy aXZlci4gV2UgaGF2ZQorICAgICAgIGltcGxlbWVudGVkIGFsbCBvZiB0aGUgb3RoZXIgVElPTUMg ZnVuY3Rpb25zLCBlZyBEVFIsIERDRCwgUlRTIGFuZAorICAgICAgIENUUywgYnV0IG5vdCBEU1Iu IE91ciBkcml2ZXIgc2hvdWxkIHJlcG9ydCB0aGUgYWN0dWFsIHN0YXRlIG9mIERTUgorICAgICAg IG9uIHRob3NlIG9mIG91ciBjYXJkcyB0aGF0IGhhdmUgYSBEU1Igc2lnbmFsLiBUaGF0IHRoZSBk cml2ZXIKKyAgICAgICBhbHdheXMgcmVwb3J0cyBEU1IgYXMgbm90IGFzc2VydGVkICgwKSwgaXMg YSBidWcgaW4gdGhlIGRyaXZlci4gVGhlCisgICAgICAgZHJpdmVyIHNob3VsZCBiZSBlaXRoZXIg cmVwb3J0aW5nIHRoZSBzdGF0ZSBvZiBEU1IgY29ycmVjdGx5IG9uCisgICAgICAgdGhvc2UgY2Fy ZHMgdGhhdCBzdXBwb3J0IERTUiBvciBhcyBhbHdheXMgYXNzZXJ0ZWQgKDEpIG9uIHRob3NlCisg ICAgICAgY2FyZHMgdGhhdCBkbyBub3QgaGF2ZSBhIERTUiBzaWduYWwuIFRoaXMgd2lsbCBiZSBm aXhlZCBpbiBhIGZ1dHVyZQorICAgICAgIHZlcnNpb24gb2Ygb3VyIGRyaXZlcnM7IGF0IHRoaXMg dGltZSBJIGNhbm5vdCBzYXkgd2hlbiB0aGlzIHdpbGwKKyAgICAgICBiZS4iIEFuZCBsYXRlciwg IkFzIGZhciBhcyBJIGNhbiB0ZWxsLCB3ZSBkb24ndCBzdXBwb3J0IHRoZQorICAgICAgIHRlcm1p b3MvdGVybWlveCBpb2N0bHMgdGhhdCByZWxhdGUgc3BlY2lmaWNhbGx5IHRvIERTUiBhbmQgUkk7 IGFsbAorICAgICAgIHRoZSByZXN0IGFyZSBzdXBwb3J0ZWQuIFRoaXMgd2lsbCwgYXMgSSBtZW50 aW9uZWQgZWFybGllciwgYmUgZml4ZWQKKyAgICAgICBpbiB0aGUgbmV4dCByZWxlYXNlIG9mIG91 ciBBVEEgc29mdHdhcmUuIgorICAgICAgIC0gV29ybGQgV2lkZSBFc2NhbGF0aW9uIFN1cHBvcnQs IFN0YWxsaW9uIFRlY2hub2xvZ2llcywgVG9vd29uZworICAgICAgIFFMRCwgWzYxN11zdXBwb3J0 QHN0YWxsaW9uLm96LmF1LgorCisgICBMYXRlciAoRGVjZW1iZXIgMTk5NywgZnJvbSB0aGUgc2Ft ZSBzb3VyY2UpOgorCisgICAgICogV2UgaGF2ZSBub3cgcmVsZWFzZWQgYSBuZXcgdmVyc2lvbiBv ZiB0aGUgQVRBIHNvZnR3YXJlLCB2ZXJzaW9uCisgICAgICAgNS40LjAuIFRoaXMgdmVyc2lvbiBm aXhlcyB0aGUgcHJvYmxlbSB3aXRoIHRoZSBzdGF0ZXMgb2YgdGhlIERTUgorICAgICAgIGFuZCBS SSBzaWduYWxzIGFuZCBob3cgdGhleSB3ZXJlIGJlaW5nIHJlcG9ydGVkIGJ5IHRoZSBkcml2ZXIu IFRoaXMKKyAgICAgICBpcyB0aGUgcHJvYmxlbSB0aGF0IHlvdSByZXBvcnRlZCBpbiBPY3RvYmVy LiBUaGUgRFNSIHNpZ25hbCBpcworICAgICAgIHJlcG9ydGVkIGNvcnJlY3RseSBvbiB0aG9zZSBj YXJkcyB0aGF0IHN1cHBvcnQgdGhlIERTUiBzaWduYWwsIHN1Y2gKKyAgICAgICBhcyB0aGUgZWFy bHkgcmV2aXNpb24gb2YgdGhlIEVhc3lJTyBjYXJkIGFuZCB0aGUgRWFzeUNvbm5lY3Rpb24gOEQ0 CisgICAgICAgcGFuZWwsIGFuZCBhcyBhbHdheXMgYXNzZXJ0ZWQgb24gdGhvc2UgY2FyZHMgdGhh dCBkbyBub3Qgc3VwcG9ydAorICAgICAgIHRoZSBEU1Igc2lnbmFsIGluIHRoZSBoYXJkd2FyZS4g VGhlIG5ldyBkcml2ZXIgaXMgYXZhaWxhYmxlIGZyb20KKyAgICAgICBvdXIgV2ViIHNpdGUsIFs2 MThdd3d3LnN0YWxsaW9uLmNvbSwgaW4gdGhlIC9kcml2ZXJzL2F0YTUvVW5peFdhcmUKKyAgICAg ICBkaXJlY3RvcnkuCisKKyAgIFsgWzYxOV1Ub3AgXSBbIFs2MjBdQ29udGVudHMgXSBbIFs2MjFd Qy1LZXJtaXQgSG9tZSBdIFsgWzYyMl1DLUtlcm1pdAorICAgOC4wIE92ZXJ2aWV3IF0gWyBbNjIz XUtlcm1pdCBIb21lIF0KKyAgICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisKKyAgICAgQy1LZXJtaXQgOC4wIFVuaXgg SGludHMgYW5kIFRpcHMgLyBbNjI0XVRoZSBLZXJtaXQgUHJvamVjdCAvCisgICBbNjI1XUNvbHVt YmlhIFVuaXZlcnNpdHkgLyBbNjI2XWtlcm1pdEBjb2x1bWJpYS5lZHUKKworUmVmZXJlbmNlcwor CisgICAxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS8KKyAgIDIuIG1haWx0bzprZXJtaXRAY29s dW1iaWEuZWR1CisgICAzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRt bAorICAgNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2s5NS5odG1sCisgICA1LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCisgICA2LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tzY3JpcHRzLmh0bWwKKyAgIDcuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9jdXJyZW50Lmh0bWwKKyAgIDguIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC93aGF0c25ldy5odG1sCisgICA5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvZmFxLmh0bWwKKyAgMTAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9z dXBwb3J0Lmh0bWwKKyAgMTEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC8KKyAgMTIu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1LworICAxMy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrdWJ3ci5odG1sCisgIDE0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tkYWlseS5odG1sCisgIDE1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tkYWls eS5odG1sCisgIDE2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tkYWlseS5odG1s CisgIDE3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCisgIDE4 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwKKyAgMTkuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1sCisgIDIwLiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDEKKyAgMjEuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4MgorICAyMi4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzCisgIDIzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2t1YndyLmh0bWwjeDQKKyAgMjQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja3Vid3IuaHRtbCN4NQorICAyNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrdWJ3ci5odG1sI3g2CisgIDI2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1 YndyLmh0bWwjeDcKKyAgMjcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3Iu aHRtbCN4OAorICAyOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1s I3g5CisgIDI5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDEw CisgIDMwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDExCisg IDMxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDEyCisgIDMy LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDEzCisgIDMzLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDE0CisgIDM0LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMworICAzNS4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjE4CisgIDM2LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMTkKKyAgMzcuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4xCisgIDM4LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMgorICAzOS4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjcKKyAgNDAuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My42CisgIDQxLiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjdG9wCisgIDQyLiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjY29udGVudHMKKyAgNDMuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4MgorICA0NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrdWJ3ci5odG1sI3gxLjEKKyAgNDUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja3Vid3IuaHRtbCN4MS4yCisgIDQ2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t1YndyLmh0bWwjeDEuMworICA0Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrdWJ3ci5odG1sI3gxLjQKKyAgNDguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja3Vid3IuaHRtbCN4My4zCisgIDQ5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2t1YndyLmh0bWwjeDMuMQorICA1MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr dWJ3ci5odG1sI3gzLjIKKyAgNTEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vi d3IuaHRtbCN4My43CisgIDUyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjYndy Lmh0bWwKKyAgNTMuIG1haWx0bzprZXJtaXQtc3VwcG9ydEBjb2x1bWJpYS5lZHUKKyAgNTQuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN0b3AKKyAgNTUuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCNjb250ZW50cworICA1Ni4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gxLjIKKyAgNTcuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9jazYwbWFudWFsLmh0bWwKKyAgNTguIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbAorICA1OS4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sCisgIDYwLiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tlcm1pdDkwLmh0bWwKKyAgNjEuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN0b3AKKyAgNjIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja3Vid3IuaHRtbCNjb250ZW50cworICA2My4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrdWJ3ci5odG1sI3gxCisgIDY0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t1YndyLmh0bWwjeDEuMworICA2NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrdWJ3ci5odG1sI3gxLjEKKyAgNjYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9zdXBwb3J0Lmh0bWwKKyAgNjcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vi d3IuaHRtbCN0b3AKKyAgNjguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3Iu aHRtbCNjb250ZW50cworICA2OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3 ci5odG1sI3gxCisgIDcwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0 bWwjeDEuNAorICA3MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1s I3gxLjIKKyAgNzIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN0 b3AKKyAgNzMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCNjb250 ZW50cworICA3NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gx CisgIDc1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDEuMwor ICA3Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3RvcAorICA3 Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI2NvbnRlbnRzCisg IDc4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMKKyAgNzku IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4MQorICA4MC4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3RvcAorICA4MS4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI2NvbnRlbnRzCisgIDgyLiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDQKKyAgODMuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4MgorICA4NC4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjAKKyAgODUuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4xCisgIDg2LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMgorICA4Ny4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjMKKyAgODguIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My40CisgIDg5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuNQorICA5MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrdWJ3ci5odG1sI3gzLjYKKyAgOTEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja3Vid3IuaHRtbCN4My43CisgIDkyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2t1YndyLmh0bWwjeDMuOAorICA5My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrdWJ3ci5odG1sI3gzLjkKKyAgOTQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a3Vid3IuaHRtbCN4My4xMAorICA5NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr dWJ3ci5odG1sI3gzLjExCisgIDk2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1 YndyLmh0bWwjeDMuMTIKKyAgOTcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vi d3IuaHRtbCN4My4xMworICA5OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3 ci5odG1sI3gzLjE0CisgIDk5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1Yndy Lmh0bWwjeDMuMTUKKyAxMDAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3Iu aHRtbCN4My4xNgorIDEwMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5o dG1sI3gzLjE3CisgMTAyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0 bWwjeDMuMTgKKyAxMDMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRt bCN4My4xOQorIDEwNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1s I3gzLjIwCisgMTA1LiBodHRwOi8vd3d3LmZhcXMub3JnLworIDEwNi4gaHR0cDovL2FwbGF3cmVu Y2UuY29tL1VuaXhhcnQvbmV3dG91bml4Lmh0bWwKKyAxMDcuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4MworIDEwOC4gbWFpbHRvOmtlcm1pdC1zdXBwb3J0QGNv bHVtYmlhLmVkdQorIDEwOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L3N1cHBvcnQu aHRtbAorIDExMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3Rv cAorIDExMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI2NvbnRl bnRzCisgMTEyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMK KyAxMTMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4xCisg MTE0LiBodHRwOi8vd3d3LnBjdW5peC5jb20vCisgMTE1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMC4xCisgMTE2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMC4yCisgMTE3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMC4zCisgMTE4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMC40CisgMTE5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMC41CisgMTIwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMC42CisgMTIxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2t1YndyLmh0bWwjdG9wCisgMTIyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t1YndyLmh0bWwjY29udGVudHMKKyAxMjMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4wCisgMTI0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t1YndyLmh0bWwjeDMuMC4yCisgMTI1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t1YndyLmh0bWwjdG9wCisgMTI2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2t1YndyLmh0bWwjY29udGVudHMKKyAxMjcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja3Vid3IuaHRtbCN4My4wCisgMTI4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2t1YndyLmh0bWwjeDMuMC4zCisgMTI5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2t1YndyLmh0bWwjeDMuMC4xCisgMTMwLiBodHRwOi8vd3d3Lmxpbm1vZGVtcy5vcmcvCisg MTMxLiBodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vaHdkZXYvcGxhdGZvcm0vUENkZXNpZ24vTFIv ZGVmYXVsdC5hc3AKKyAxMzIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3Iu aHRtbCN0b3AKKyAxMzMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRt bCNjb250ZW50cworIDEzNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5o dG1sI3gzLjAKKyAxMzUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRt bCN4My4wLjQKKyAxMzYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRt bCN4My4wLjIKKyAxMzcuIGh0dHA6Ly93d3cuaWRpci5uZXQvfmdyb21pdGtjL3dpbm1vZGVtLmh0 bWwKKyAxMzguIGh0dHA6Ly93d3cuZGlnaS5jb20vCisgMTM5LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjdG9wCisgMTQwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2t1YndyLmh0bWwjY29udGVudHMKKyAxNDEuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4wCisgMTQyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMC41CisgMTQzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMC4zCisgMTQ0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2t1YndyLmh0bWwjdG9wCisgMTQ1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t1YndyLmh0bWwjY29udGVudHMKKyAxNDYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4wCisgMTQ3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t1YndyLmh0bWwjeDMuMC42CisgMTQ4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t1YndyLmh0bWwjeDMuMC40CisgMTQ5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t1YndyLmh0bWwjdG9wCisgMTUwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2t1YndyLmh0bWwjY29udGVudHMKKyAxNTEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja3Vid3IuaHRtbCN4My4wCisgMTUyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2t1YndyLmh0bWwjeDMuMC41CisgMTUzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2t1YndyLmh0bWwjdG9wCisgMTU0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2t1YndyLmh0bWwjY29udGVudHMKKyAxNTUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja3Vid3IuaHRtbCN4MworIDE1Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr dWJ3ci5odG1sI3gzLjIKKyAxNTcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vi d3IuaHRtbCN4My4wCisgMTU4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1Yndy Lmh0bWwjeDMuMS4xCisgMTU5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1Yndy Lmh0bWwjeDMuMS4yCisgMTYwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1Yndy Lmh0bWwjeDMuMS4zCisgMTYxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1Yndy Lmh0bWwjeDMuMS40CisgMTYyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1Yndy Lmh0bWwjeDMuMS41CisgMTYzLiBodHRwOi8vd3d3LmVtZXJzb24uZW1vcnkuZWR1L3NlcnZpY2Vz L2FpeC1mYXEvCisgMTY0LiBodHRwOi8vd3d3LmZhcXMub3JnL2ZhcXMvYnktbmV3c2dyb3VwL2Nv bXAvY29tcC51bml4LmFpeC5odG1sCisgMTY1LiBodHRwOi8vd3d3LmNpcy5vaGlvLXN0YXRlLmVk dS9oeXBlcnRleHQvZmFxL3VzZW5ldC9haXgtZmFxL3RvcC5odG1sCisgMTY2LiBodHRwOi8vYWl4 cGRzbGliLnNlYXMudWNsYS5lZHUvCisgMTY3LiBodHRwOi8vd3d3LnJvb3R2Zy5uZXQoQUlYaGlz dG9yeSkvCisgMTY4LiBmdHA6Ly9ydGZtLm1pdC5lZHUvcHViL3VzZW5ldC9uZXdzLmFuc3dlcnMv YWl4LWZhcS9wYXJ0MQorIDE2OS4gZnRwOi8vbWlycm9ycy5hb2wuY29tL3B1Yi9ydGZtL3VzZW5l dC1ieS1oaWVyYXJjaHkvY29tcC91bml4L2FpeAorIDE3MC4gbmV3czpjb21wLnVuaXguYWl4Cisg MTcxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjdG9wCisgMTcy LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjY29udGVudHMKKyAx NzMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4xCisgMTc0 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMS4yCisgMTc1 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjdG9wCisgMTc2LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjY29udGVudHMKKyAxNzcu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4xCisgMTc4LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMS4zCisgMTc5LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMS4xCisgMTgwLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvc2VjdXJpdHkuaHRtbCNzZXJ2ZXJzCisgMTgx LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjdG9wCisgMTgyLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjY29udGVudHMKKyAxODMu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4xCisgMTg0LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMS40CisgMTg1LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMS4yCisgMTg2LiBo dHRwOi8vc2VydmljZS5zb2Z0d2FyZS5pYm0uY29tL3JzNjAwMC8KKyAxODcuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN0b3AKKyAxODguIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCNjb250ZW50cworIDE4OS4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjEKKyAxOTAuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4xLjUKKyAxOTEuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4xLjMKKyAxOTIuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN0b3AKKyAxOTMuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCNjb250ZW50cworIDE5NC4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjEKKyAxOTUuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4xLjQKKyAxOTYuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN0b3AKKyAxOTcuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCNjb250ZW50cworIDE5OC4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzCisgMTk5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMworIDIwMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrdWJ3ci5odG1sI3gzLjEKKyAyMDEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja3Vid3IuaHRtbCN4My4yLjAKKyAyMDIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja3Vid3IuaHRtbCN4My4yLjEKKyAyMDMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja3Vid3IuaHRtbCN4My4yLjIKKyAyMDQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja3Vid3IuaHRtbCN4My4yLjMKKyAyMDUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja3Vid3IuaHRtbCN4My4yLjQKKyAyMDYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja3Vid3IuaHRtbCN4My4yLjUKKyAyMDcuIG5ld3M6Y29tcC5zeXMuaHAuaHB1eAorIDIw OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3RvcAorIDIwOS4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI2NvbnRlbnRzCisgMjEw LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMgorIDIxMS4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjIuMQorIDIxMi4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3RvcAorIDIxMy4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI2NvbnRlbnRzCisgMjE0LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMgorIDIxNS4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjIuMgorIDIxNi4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjIuMAorIDIxNy4gZnRw Oi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvZi9tYWtlZmlsZQorIDIxOC4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3RvcAorIDIxOS4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI2NvbnRlbnRzCisgMjIwLiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMgorIDIyMS4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjIuMworIDIyMi4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjIuMQorIDIyMy4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3RvcAorIDIyNC4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI2NvbnRlbnRzCisgMjI1LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMgorIDIyNi4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjIuNAorIDIyNy4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjIuMgorIDIyOC4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjIuNC4xCisgMjI5LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMi40LjIKKyAyMzAuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4yLjQuMworIDIzMS4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjIuNC40CisgMjMyLiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMi40LjUKKyAyMzMuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN0b3AKKyAyMzQuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCNjb250ZW50cworIDIzNS4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjIKKyAyMzYuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4yLjQuMgorIDIzNy4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjIuMgorIDIzOC4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3RvcAorIDIzOS4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI2NvbnRlbnRzCisgMjQwLiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMi40CisgMjQxLiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMi40LjMKKyAyNDIuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4yLjQuMQorIDI0My4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3RvcAorIDI0NC4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI2NvbnRlbnRzCisgMjQ1LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMi40CisgMjQ2LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMi40LjQKKyAyNDcuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4yLjQuMgorIDI0OC4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3RvcAorIDI0OS4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI2NvbnRlbnRzCisgMjUwLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMi40CisgMjUxLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMi40LjUKKyAyNTIu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4yLjQuMworIDI1 My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3RvcAorIDI1NC4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI2NvbnRlbnRzCisgMjU1 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMi40CisgMjU2 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMi40LjQKKyAy NTcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN0b3AKKyAyNTgu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCNjb250ZW50cworIDI1 OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjIKKyAyNjAu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4yLjQKKyAyNjEu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN0b3AKKyAyNjIuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCNjb250ZW50cworIDI2My4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzCisgMjY0LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuNAorIDI2NS4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjIKKyAyNjYuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4zLjEKKyAyNjcuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4zLjIKKyAyNjguIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4zLjMKKyAyNjkuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4zLjQKKyAyNzAuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4zLjUKKyAyNzEuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4zLjYKKyAyNzIuIGh0dHA6Ly9l bi53aWtpcGVkaWEub3JnL3dpa2kvQXZhaGlfKHNvZnR3YXJlKQorIDI3My4gbmV3czpjb21wLm9z LmxpbnV4Lm1pc2MKKyAyNzQuIG5ld3M6Y29tcC5vcy5saW51eC5hbnN3ZXJzCisgMjc1LiBodHRw Oi8vd3d3LnRsZHAub3JnLworIDI3Ni4gaHR0cDovL3d3dy50bGRwLm9yZy9GQVEvTGludXgtRkFR Lmh0bWwKKyAyNzcuIGh0dHA6Ly93d3cudGxkcC5vcmcvSE9XVE8vU2VyaWFsLUhPV1RPLmh0bWwK KyAyNzguIGh0dHA6Ly90bGRwLm9yZy9IT1dUTy9Nb2RlbS1IT1dUTy5odG1sCisgMjc5LiBmdHA6 Ly9zdW5zaXRlLnVuYy5lZHUvcHViL0xpbnV4L2RvY3MvSE9XVE8KKyAyODAuIGZ0cDovL3RzeC0x MS5taXQuZWR1L3B1Yi9saW51eC9kb2NzL0hPV1RPCisgMjgxLiBodHRwOi8vd3d3LnRsZHAub3Jn L0hPV1RPLworIDI4Mi4gaHR0cDovL3d3dy50bGRwLm9yZy9obWlycm9ycy5odG1sCisgMjgzLiBo dHRwOi8vd3d3LnJlZGhhdC5jb20vYXBwcy9zdXBwb3J0LworIDI4NC4gaHR0cDovL3d3dy5kZWJp YW4ub3JnL3N1cHBvcnQKKyAyODUuIGh0dHA6Ly93d3cuc2xhY2t3YXJlLmNvbS9zdXBwb3J0Lwor IDI4Ni4gaHR0cDovL3d3dy5jYWxkZXJhLmNvbS9zdXBwb3J0LworIDI4Ny4gaHR0cDovL3d3dy5u b3ZlbGwuY29tL3N1cHBvcnQvbWljcm9zaXRlcy9taWNyb3NpdGUuZG8KKyAyODguIGh0dHA6Ly93 d3cubWFuZHJha2UuY29tL3N1cHBvcnQvCisgMjg5LiBodHRwOi8vd3d3LnR1cmJvbGludXguY29t L3N1cHBvcnQvCisgMjkwLiBodHRwOi8vd3d3Lmxpbm1vZGVtcy5vcmcvCisgMjkxLiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMAorIDI5Mi4gaHR0cDovL2xp bnV4LmRyZWFtdGltZS5vcmcvZGVjbmV0LworIDI5My4gbWFpbHRvOmtlcm1pdC1zdXBwb3J0QGNv bHVtYmlhLmVkdQorIDI5NC4gaHR0cDovL3d3dy5saW5tb2RlbXMub3JnLworIDI5NS4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjAuMgorIDI5Ni4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L3NlY3VyaXR5Lmh0bWwjc2VydmVycworIDI5Ny4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L3NzaGNsaWVudC5odG1sCisgMjk4LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjdG9wCisgMjk5LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjY29udGVudHMKKyAzMDAuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4MworIDMwMS4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjMuMgorIDMwMi4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3RvcAorIDMwMy4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI2NvbnRlbnRzCisgMzA0LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMworIDMwNS4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjMuMworIDMwNi4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjMuMQorIDMwNy4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjAKKyAzMDguIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4NgorIDMwOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrdWJ3ci5odG1sI3g3CisgMzEwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t1YndyLmh0bWwjeDgKKyAzMTEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja3VpbnMuaHRtbCN4MTAKKyAzMTIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a3VpbnMuaHRtbCN4MTEKKyAzMTMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vp bnMuaHRtbAorIDMxNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1s I3gzLjAKKyAzMTUuIGh0dHA6Ly9saW51eHd3dy5kYi5lcmF1LmVkdS9tYWlsX2FyY2hpdmVzL2xp bnV4LWtlcm5lbC9NYXJfOTgvMTQ0MS5odG1sCisgMzE2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2t1YndyLmh0bWwjdG9wCisgMzE3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t1YndyLmh0bWwjY29udGVudHMKKyAzMTguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4zCisgMzE5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t1YndyLmh0bWwjeDMuMy40CisgMzIwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t1YndyLmh0bWwjeDMuMy4yCisgMzIxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t1YndyLmh0bWwjeDMuMC41CisgMzIyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tmYXEuaHRtbCN0ZXJtCisgMzIzLiBodHRwOi8vZGlja2V5Lmhpcy5jb20veHRlcm0v eHRlcm0uaHRtbAorIDMyNC4gaHR0cDovL2RpY2tleS5oaXMuY29tL3h0ZXJtL3h0ZXJtLmh0bWwK KyAzMjUuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2YveG1vZG1hcC50eHQKKyAz MjYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN0b3AKKyAzMjcu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCNjb250ZW50cworIDMy OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjMKKyAzMjku IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4zLjUKKyAzMzAu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4zLjMKKyAzMzEu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN0b3AKKyAzMzIuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCNjb250ZW50cworIDMzMy4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjMKKyAzMzQuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4zLjYKKyAzMzUuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4zLjQKKyAzMzYuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKKyAzMzcuIG1haWx0bzpr ZXJtaXQtc3VwcG9ydEBjb2x1bWJpYS5lZHUKKyAzMzguIGh0dHA6Ly93d3cucmVkaGF0LmNvbS9z dXBwb3J0L2VycmF0YS9SSEJBLTIwMDEtMTUzLmh0bWwKKyAzMzkuIG5ld3M6Y29tcC5wcm90b2Nv bHMua2VybWl0Lm1pc2MKKyAzNDAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vi d3IuaHRtbCN0b3AKKyAzNDEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3Iu aHRtbCNjb250ZW50cworIDM0Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3 ci5odG1sI3gzLjMKKyAzNDMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3Iu aHRtbCN4My4zLjUKKyAzNDQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3Iu aHRtbCN0b3AKKyAzNDUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRt bCNjb250ZW50cworIDM0Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5o dG1sI3gzCisgMzQ3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwj eDMuNQorIDM0OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gz LjMKKyAzNDkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN0b3AK KyAzNTAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCNjb250ZW50 cworIDM1MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzCisg MzUyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuNgorIDM1 My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjQKKyAzNTQu IG5ld3M6Y29tcC5vcy5xbngKKyAzNTUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9n a2VybWl0Lmh0bWwKKyAzNTYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMu aHRtbCN4MTAKKyAzNTcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRt bAorIDM1OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3RvcAor IDM1OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI2NvbnRlbnRz CisgMzYwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMKKyAz NjEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My43CisgMzYy LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuNQorIDM2My4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjYuMQorIDM2NC4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjYuMgorIDM2NS4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjYuMworIDM2Ni4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjYuNAorIDM2Ny4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjEwCisgMzY4LiBo dHRwOi8vYXBsYXdyZW5jZS5jb20vU0NPRkFRLworIDM2OS4gaHR0cDovL3d3dy56ZW5lei5jb20v Y2dpLWJpbi9zY29wcm9nZmFxL2ZhcS5wbAorIDM3MC4gaHR0cDovL3d3dy56ZW5lei5jb20vY2dp LWJpbi9zY291dzdmYXEvZmFxLnBsCisgMzcxLiBodHRwOi8vemVuZXoucGN1bml4LmNvbS9jZ2kt YmluL3Njb3V3N2ZhcS9mYXEucGwKKyAzNzIuIGh0dHA6Ly9wY3VuaXguY29tL1VuaXhhcnQvbW9k ZW1zLmh0bWwKKyAzNzMuIGh0dHA6Ly93d3cuZnJlZWJpcmQub3JnL2ZhcS8KKyAzNzQuIGh0dHA6 Ly93d3cuZnJlZWJpcmQub3JnL2ZhcS9kZXZlbG9wZXIuaHRtbAorIDM3NS4gaHR0cDovL3N1cHBv cnQuY2FsZGVyYS5jb20vY2FsZGVyYQorIDM3Ni4gaHR0cDovL3N0YWdlLmNhbGRlcmEuY29tL3Rh LworIDM3Ny4gaHR0cDovL2FwbGF3cmVuY2UuY29tL25ld3Rvc2NvLmh0bWwKKyAzNzguIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4wLjUKKyAzNzkuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2ZhcS5odG1sI3Rlcm0KKyAzODAuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4wCisgMzgxLiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjdG9wCisgMzgyLiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjY29udGVudHMKKyAzODMuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My42CisgMzg0LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuNi4xCisgMzg1LiBmdHA6Ly9rZXJtaXQu Y29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja3V0aW8uYworIDM4Ni4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3RvcAorIDM4Ny4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI2NvbnRlbnRzCisgMzg4LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuNgorIDM4OS4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjYuMworIDM5MC4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjYuMQorIDM5MS4gaHR0cDovL3d3dy5kaWdp LmNvbS8KKyAzOTIuIGZ0cDovL2Z0cC5mdS1iZXJsaW4uZGUvcHViL3VuaXgvZHJpdmVyL2Zhcwor IDM5My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gxNAorIDM5 NC4gaHR0cDovL3d3dy5zY28uY29tLworIDM5NS4gZnRwOi8vZnRwLnNjby5jb20vCisgMzk2LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjdG9wCisgMzk3LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjY29udGVudHMKKyAzOTguIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My42CisgMzk5LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuNi40CisgNDAwLiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuNi4yCisgNDAxLiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMTAKKyA0MDIuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN0b3AKKyA0MDMuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCNjb250ZW50cworIDQwNC4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjYKKyA0MDUuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My42LjMKKyA0MDYuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN0b3AKKyA0MDcuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCNjb250ZW50cworIDQwOC4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzCisgNDA5LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuOAorIDQxMC4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjYKKyA0MTEuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My43LjEKKyA0MTIuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My43LjIKKyA0MTMuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My43LjMKKyA0MTQuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My43LjQKKyA0MTUuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My43LjUKKyA0MTYuIG5ld3M6Y29tcC51bml4LnNv bGFyaXMKKyA0MTcuIGh0dHA6Ly9hY2Nlc3MxLnN1bi5jb20vCisgNDE4LiBodHRwOi8vZG9jcy5z dW4uY29tLworIDQxOS4gaHR0cDovL3d3dy5zdW5oZWxwLmNvbS8KKyA0MjAuIGh0dHA6Ly93d3cu d2lucy51dmEubmwvcHViL3NvbGFyaXMvc29sYXJpczIvCisgNDIxLiBodHRwOi8vd3d3LndpbnMu dXZhLm5sL2NnaS1iaW4vc2ZhcS5jZ2kKKyA0MjIuIGZ0cDovL2Z0cC53aW5zLnV2YS5ubC9wdWIv c29sYXJpcworIDQyMy4gaHR0cDovL3d3dy5zY2llbmNlLnV2YS5ubC9wdWIvc29sYXJpcy9zb2xh cmlzMi5odG1sCisgNDI0LiBodHRwOi8vd3d3LnN0b2tlbHkuY29tLworIDQyNS4gaHR0cDovL3d3 dy5zdG9rZWx5LmNvbS91bml4LnN5c2FkbS5yZXNvdXJjZXMvZmFxcy5zdW4uaHRtbAorIDQyNi4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjAKKyA0MjcuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN0b3AKKyA0MjguIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCNjb250ZW50cworIDQyOS4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzCisgNDMwLiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuNworIDQzMS4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjcuMgorIDQzMi4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3RvcAorIDQzMy4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI2NvbnRlbnRzCisgNDM0LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuNworIDQzNS4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjcuMworIDQzNi4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjcuMQorIDQzNy4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3RvcAorIDQzOC4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI2NvbnRlbnRzCisgNDM5LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuNworIDQ0MC4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjcuNAorIDQ0MS4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjcuMgorIDQ0Mi4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3RvcAorIDQ0My4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI2NvbnRlbnRzCisgNDQ0LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuNworIDQ0NS4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjcuNQorIDQ0Ni4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjcuMworIDQ0Ny4gbmV3czpjb21wLm9zLnZtcwor IDQ0OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3RvcAorIDQ0 OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI2NvbnRlbnRzCisg NDUwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuNworIDQ1 MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjcuNgorIDQ1 Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjcuNAorIDQ1 My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3RvcAorIDQ1NC4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI2NvbnRlbnRzCisgNDU1 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuNworIDQ1Ni4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjcuNQorIDQ1Ny4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3RvcAorIDQ1OC4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI2NvbnRlbnRzCisgNDU5LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMKKyA0NjAuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My45CisgNDYxLiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuNworIDQ2Mi4gaHR0cDovL3d3 dy5zdG9rZWx5LmNvbS8KKyA0NjMuIGh0dHA6Ly9hY2Nlc3MxLnN1bi5jb20vCisgNDY0LiBodHRw Oi8vd3d3Lmx1ZGQubHV0aC5zZS9+YmVhci9wcm9qZWN0L3N1bi9zdW4uaGFyZHdhcmUudHh0Cisg NDY1LiBmdHA6Ly9mdHAubmV0Y29tLmNvbS9wdWIvcnUvcnViaWNvbi9zdW4uaGR3ci5yZWYKKyA0 NjYuIGZ0cDovL2Z0cC5pbnRuZXQubmV0L3B1Yi9TVU4vU3VuLUhhcmR3YXJlLVJlZgorIDQ2Ny4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3RvcAorIDQ2OC4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI2NvbnRlbnRzCisgNDY5LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMKKyA0NzAuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4xMAorIDQ3MS4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjgKKyA0NzIuIG5ld3M6Y29t cC51bml4LnVsdHJpeAorIDQ3My4gbmV3czpjb21wLnN5cy5kZWMKKyA0NzQuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN0b3AKKyA0NzUuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCNjb250ZW50cworIDQ3Ni4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzCisgNDc3LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMTEKKyA0NzguIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My45CisgNDc5LiBodHRwOi8vd3d3LmZyZWViaXJk Lm9yZy8KKyA0ODAuIGh0dHA6Ly93d3cuZnJlZWJpcmQub3JnL2ZhcS8KKyA0ODEuIG5ld3M6Y29t cC51bml4LnVuaXh3YXJlLm1pc2MKKyA0ODIuIG5ld3M6Y29tcC51bml4LnNjby5taXNjCisgNDgz LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMAorIDQ4NC4g ZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvZi9ja3V0aW8uYworIDQ4NS4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3RvcAorIDQ4Ni4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI2NvbnRlbnRzCisgNDg3LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMKKyA0ODguIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4xMgorIDQ4OS4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjEwCisgNDkwLiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjdG9wCisgNDkxLiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjY29udGVudHMKKyA0OTIuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4MworIDQ5My4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjEzCisgNDk0LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMTEKKyA0OTUuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN0b3AKKyA0OTYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja3Vid3IuaHRtbCNjb250ZW50cworIDQ5Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzCisgNDk4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t1YndyLmh0bWwjeDMuMTQKKyA0OTkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja3Vid3IuaHRtbCN4My4xMgorIDUwMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrdWJ3ci5odG1sI3RvcAorIDUwMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrdWJ3ci5odG1sI2NvbnRlbnRzCisgNTAyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2t1YndyLmh0bWwjeDMKKyA1MDMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a3Vid3IuaHRtbCN4My4xNQorIDUwNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr dWJ3ci5odG1sI3gzLjEzCisgNTA1LiBuZXdzOmNvbXAuc3lzLnNnaS5taXNjCisgNTA2LiBuZXdz OmNvbXAuc3lzLnNnaS5hZG1pbgorIDUwNy4gaHR0cDovL3d3dy5zZ2kuY29tLworIDUwOC4gaHR0 cDovL3d3dy12aXoudGFtdS5lZHUvfnNnaS1mYXEvCisgNTA5LiBmdHA6Ly92aXoudGFtdS5lZHUv cHViL3NnaS9mYXEvCisgNTEwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5z Lmh0bWwKKyA1MTEuIGh0dHA6Ly9mcmVld2FyZS5zZ2kuY29tL0luc3RhbGxhYmxlL2djYy0yLjk1 LjIuaHRtbAorIDUxMi4gaHR0cDovL2ZyZWV3YXJlLnNnaS5jb20vSW5zdGFsbGFibGUvZ2NjLTIu OTUuMi5odG1sCisgNTEzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0 bWwjdG9wCisgNTE0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwj Y29udGVudHMKKyA1MTUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRt bCN4MworIDUxNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gz LjE2CisgNTE3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMu MTQKKyA1MTguIG5ld3M6Y29tcC5zeXMuYmUKKyA1MTkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja3Vid3IuaHRtbCN0b3AKKyA1MjAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja3Vid3IuaHRtbCNjb250ZW50cworIDUyMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrdWJ3ci5odG1sI3gzCisgNTIyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2t1YndyLmh0bWwjeDMuMTcKKyA1MjMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja3Vid3IuaHRtbCN4My4xNQorIDUyNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrdWJ3ci5odG1sI3RvcAorIDUyNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr dWJ3ci5odG1sI2NvbnRlbnRzCisgNTI2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2t1YndyLmh0bWwjeDMKKyA1MjcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vi d3IuaHRtbCN4My4xOAorIDUyOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3 ci5odG1sI3gzLjE2CisgNTI5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1Yndy Lmh0bWwjdG9wCisgNTMwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0 bWwjY29udGVudHMKKyA1MzEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3Iu aHRtbCN4MworIDUzMi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1s I3gzLjE5CisgNTMzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwj eDMuMTcKKyA1MzQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN0 b3AKKyA1MzUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCNjb250 ZW50cworIDUzNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gz CisgNTM3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMjAK KyA1MzguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4xOAor IDUzOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L21hYy5odG1sCisgNTQwLiBodHRw Oi8vd3d3LmFtYXpvbi5jb20vZ3AvcHJvZHVjdC9CMDAwMFZZSlJZP2llPVVURjgmdGFnPWFsZWlk bW9yZWxkb20tMjAmbGlua0NvZGU9YXMyJmNhbXA9MTc4OSZjcmVhdGl2ZT0zOTA5NTcmY3JlYXRp dmVBU0lOPUIwMDAwVllKUlkKKyA1NDEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a3VpbnMuaHRtbCN4MTAKKyA1NDIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vp bnMuaHRtbAorIDU0My4gaHR0cDovL3d3dy5hbWF6b24uY29tL2dwL3Byb2R1Y3QvQjAwMEZYNjFN Uz9pZT1VVEY4JnRhZz1hbGVpZG1vcmVsZG9tLTIwJmxpbmtDb2RlPWFzMiZjYW1wPTE3ODkmY3Jl YXRpdmU9MzkwOTU3JmNyZWF0aXZlQVNJTj1CMDAwRlg2MU1TCisgNTQ0LiBtYWlsdG86a2VybWl0 QGNvbHVtYmlhLmVkdQorIDU0NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3 ci5odG1sI3RvcAorIDU0Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5o dG1sI2NvbnRlbnRzCisgNTQ3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1Yndy Lmh0bWwjeDMKKyA1NDguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRt bCN4My4xOQorIDU0OS4gaHR0cDovL3d3dy51bmktZ2llc3Nlbi5kZS9mYXEvYXJjaGl2L2NvaGVy ZW50LWZhcS5nZW5lcmFsL21zZzAwMDAwLmh0bWwKKyA1NTAuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN0b3AKKyA1NTEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja3Vid3IuaHRtbCNjb250ZW50cworIDU1Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrdWJ3ci5odG1sI3g1CisgNTUzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t1YndyLmh0bWwjeDMKKyA1NTQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2NjZmcuaHRtbAorIDU1NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3 ci5odG1sI3RvcAorIDU1Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5o dG1sI2NvbnRlbnRzCisgNTU3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1Yndy Lmh0bWwjeDYKKyA1NTguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRt bCN4NAorIDU1OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sCisg NTYwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjdG9wCisgNTYx LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjY29udGVudHMKKyA1 NjIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4NworIDU2My4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3g1CisgNTY0LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjOS41CisgNTY1LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMKKyA1NjYuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN0b3AKKyA1NjcuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCNjb250ZW50cworIDU2OC4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3g4CisgNTY5LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDYKKyA1NzAuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4OAorIDU3MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrdWlucy5odG1sCisgNTcyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2s2MG1hbnVhbC5odG1sCisgNTczLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2Fi bGUuaHRtbAorIDU3NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1s I3RvcAorIDU3NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI2Nv bnRlbnRzCisgNTc2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwj eDkKKyA1NzcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4Nwor IDU3OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3RvcAorIDU3 OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI2NvbnRlbnRzCisg NTgwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDEwCisgNTgx LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDgKKyA1ODIuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9jazYwbWFudWFsLmh0bWwKKyA1ODMuIGh0dHA6 Ly9kaWNrZXkuaGlzLmNvbS94dGVybS94dGVybS5odG1sCisgNTg0LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjdG9wCisgNTg1LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjY29udGVudHMKKyA1ODYuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4MTEKKyA1ODcuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4OQorIDU4OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrdWJ3ci5odG1sI3RvcAorIDU4OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrdWJ3ci5odG1sI2NvbnRlbnRzCisgNTkwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t1YndyLmh0bWwjeDEyCisgNTkxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2t1YndyLmh0bWwjeDEwCisgNTkyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2t1YndyLmh0bWwjeDExLjEKKyA1OTMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a3Vid3IuaHRtbCN4MTEuMgorIDU5NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr dWJ3ci5odG1sI3RvcAorIDU5NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3 ci5odG1sI2NvbnRlbnRzCisgNTk2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1 YndyLmh0bWwjeDExCisgNTk3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1Yndy Lmh0bWwjeDExLjIKKyA1OTguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9jazYwbWFu dWFsLmh0bWwKKyA1OTkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRt bCN0b3AKKyA2MDAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCNj b250ZW50cworIDYwMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1s I3gxMQorIDYwMi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gx MS4xCisgNjAzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2s2MG1hbnVhbC5odG1s CisgNjA0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjdG9wCisg NjA1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjY29udGVudHMK KyA2MDYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4MTMKKyA2 MDcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4MTEKKyA2MDgu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9zZWN1cml0eS5odG1sCisgNjA5LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjdG9wCisgNjEwLiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjY29udGVudHMKKyA2MTEuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4MTQKKyA2MTIuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4MTIKKyA2MTMuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN0b3AKKyA2MTQuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCNjb250ZW50cworIDYxNS4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gxNQorIDYxNi4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gxNAorIDYxNy4gbWFpbHRvOnN1cHBvcnRAc3Rh bGxpb24ub3ouYXUKKyA2MTguIGh0dHA6Ly93d3cuc3RhbGxpb24uY29tLworIDYxOS4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3RvcAorIDYyMC4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI2NvbnRlbnRzCisgNjIxLiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCisgNjIyLiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2s4MC5odG1sCisgNjIzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvaW5kZXguaHRtbAorIDYyNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2luZGV4Lmh0bWwKKyA2MjUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1LworIDYyNi4gbWFpbHRv Omtlcm1pdEBjb2x1bWJpYS5lZHUKCmRpZmYgLS1naXQgYS9ja2VybWl0LTkuMC4zMDItYnVpbGQv Y2tlcm1pdC05LjAuMzAyL2NrdWNtZC5jIGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQt OS4wLjMwMi9ja3VjbWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzA3 NzBlCi0tLSAvZGV2L251bGwKKysrIGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4w LjMwMi9ja3VjbWQuYwpAQCAtMCwwICsxLDc5MTkgQEAKKyNpbmNsdWRlICJja2NzeW0uaCIKKwor Y2hhciAqY21kdiA9ICJDb21tYW5kIHBhY2thZ2UgOS4wLjE2OCwgMTIgTWFyY2ggMjAxMCI7CisK Ky8qICBDIEsgVSBDIE0gRCAgLS0gIEludGVyYWN0aXZlIGNvbW1hbmQgcGFja2FnZSBmb3IgVW5p eCAgKi8KKworLyogKEluIHJlYWxpdHksIGl0J3MgZm9yIGFsbCBwbGF0Zm9ybXMsIG5vdCBqdXN0 IFVuaXgpICovCisKKy8qCisgIEF1dGhvcjogRnJhbmsgZGEgQ3J1eiAoZmRjQGNvbHVtYmlhLmVk dSksCisgIENvbHVtYmlhIFVuaXZlcnNpdHkgQWNhZGVtaWMgSW5mb3JtYXRpb24gU3lzdGVtcywg TmV3IFlvcmsgQ2l0eS4KKworICBDb3B5cmlnaHQgKEMpIDE5ODUsIDIwMTAsCisgICAgVHJ1c3Rl ZXMgb2YgQ29sdW1iaWEgVW5pdmVyc2l0eSBpbiB0aGUgQ2l0eSBvZiBOZXcgWW9yay4KKyAgICBB bGwgcmlnaHRzIHJlc2VydmVkLiAgU2VlIHRoZSBDLUtlcm1pdCBDT1BZSU5HLlRYVCBmaWxlIG9y IHRoZQorICAgIGNvcHlyaWdodCB0ZXh0IGluIHRoZSBja2NtYWkuYyBtb2R1bGUgZm9yIGRpc2Ns YWltZXIgYW5kIHBlcm1pc3Npb25zLgorKi8KKworI2RlZmluZSBUT0tQUkVDSEVDSworCisjZGVm aW5lIERPQ0hLVkFSCisKKy8qIENvbW1hbmQtdGVybWluYWwtdG8tQy1LZXJtaXQgY2hhcmFjdGVy IG1hc2sgKi8KKworI2lmZGVmIE9TMgkJCQkvKiBLOTUgKi8KK2ludCBjbWRtc2sgPSAyNTU7CQkJ LyogKGFsd2F5cyB3YXMgMjU1KSAqLworI2Vsc2UJCQkJCS8qIEFsbCBvdGhlcnMuLi4gKi8KK2lu dCBjbWRtc2sgPSAyNTU7CQkJLyogMzEgRGVjIDIwMDAgKHdhcyAxMjcpICovCisjZW5kaWYgLyog T1MyICovCisKKyNpZmRlZiBCU19ESVJTRVAJCQkvKiBEaXJlY3Rvcnkgc2VwYXJhdG9yIGlzIGJh Y2tzbGFzaCAqLworI3VuZGVmIEJTX0RJUlNFUAorI2VuZGlmIC8qIEJTX0RJUlNFUCAqLworCisj aWZkZWYgT1MyCisjZGVmaW5lIEJTX0RJUlNFUAorI2VuZGlmIC8qIEJTX0RJUlNFUCAqLworCisj ZGVmaW5lIENLVUNNRF9DCisKKyNpbmNsdWRlICJja2NkZWIuaCIgICAgICAgICAgICAgICAgICAg ICAvKiBGb3JtYXRzIGZvciBkZWJ1ZygpLCBldGMuICovCisjaW5jbHVkZSAiY2tja2VyLmgiCQkJ LyogTmVlZGVkIGZvciBCSUdCVUZPSyBkZWZpbml0aW9uICovCisjaW5jbHVkZSAiY2tjbmV0Lmgi CQkJLyogTmVlZGVkIGZvciBzZXJ2ZXItc2lkZSBUZWxuZXQgKi8KKyNpbmNsdWRlICJja3VjbWQu aCIJCQkvKiBOZWVkZWQgZm9yIGV2ZXJ5dGhpbmcgKi8KKyNpbmNsdWRlICJja3V1c3IuaCIgICAg ICAgICAgICAgICAgICAgICAvKiBOZWVkZWQgZm9yIHByb21wdCBsZW5ndGggKi8KKworI2lmbmRl ZiBOT0FSUk9XS0VZUworI2lmbmRlZiBOT0VTQ1NFUQorI2lmZGVmIFZNU09SVU5JWAorI2RlZmlu ZSBVU0VfQVJST1dLRVlTCQkJLyogVXNlIGFycm93IGtleXMgZm9yIGNvbW1hbmQgcmVjYWxsICov CisjZW5kaWYgLyogVk1TT1JVTklYICovCisjZW5kaWYgLyogTk9FU0NTRVEgKi8KKyNlbmRpZiAv KiBOT0FSUk9XS0VZUyAqLworCisjdW5kZWYgQ0tVQ01EX0MKKworX1BST1RPVFlQKCBpbnQgdW5o ZXgsIChjaGFyKSApOworX1BST1RPVFlQKCBzdGF0aWMgVk9JRCBjbWRjbHJzY24sICh2b2lkKSAp OworCisjaWZkZWYgQ0tMRUFSTgorX1BST1RPVFlQKCBWT0lEIGxlYXJuY21kLCAoY2hhciAqKSAp OworI2VuZGlmIC8qIENLTEVBUk4gKi8KKworc3RhdGljIGNoYXIgKm1vbmFtZVtdID0geworICAg ICJKYW4iLCAiRmViIiwgIk1hciIsICJBcHIiLCAiTWF5IiwgIkp1biIsCisgICAgIkp1bCIsICJB dWciLCAiU2VwIiwgIk9jdCIsICJOb3YiLCAiRGVjIgorfTsKKworc3RydWN0IGtleXRhYiBjbW9u dGhzW10gPSB7CisgIHsgImFwcmlsIiwgICAgIDQsIDAgfSwKKyAgeyAiYXVndXN0IiwgICAgOCwg MCB9LAorICB7ICJkZWNlbWJlciIsIDEyLCAwIH0sCisgIHsgImZlYnJ1YXJ5IiwgIDIsIDAgfSwK KyAgeyAiamFudWFyeSIsICAgMSwgMCB9LAorICB7ICJqdWx5IiwgICAgICA3LCAwIH0sCisgIHsg Imp1bmUiLCAgICAgIDYsIDAgfSwKKyAgeyAibWFyY2giLCAgICAgMywgMCB9LAorICB7ICJtYXki LCAgICAgICA1LCAwIH0sCisgIHsgIm5vdmVtYmVyIiwgMTEsIDAgfSwKKyAgeyAib2N0b2JlciIs ICAxMCwgMCB9LAorICB7ICJzZXB0ZW1iZXIiLCA5LCAwIH0KK307CisKKyNpZm5kZWYgTk9JQ1Ag ICAgIC8qIFRoZSByZXN0IG9ubHkgaWYgaW50ZXJhY3RpdmUgY29tbWFuZCBwYXJzaW5nIHNlbGVj dGVkICovCisKKyNpZm5kZWYgTk9TUEwKK19QUk9UT1RZUCggaW50IGNoa3ZhciwgKGNoYXIgKikg KTsKK2V4dGVybiBpbnQgYXNrZmxhZywgZWNob3N0YXJzOworI2VuZGlmIC8qIE5PU1BMICovCisK KyNpZmRlZiBDS1JPT1QKK2V4dGVybiBpbnQgY2tyb290ZXJyOworI2VuZGlmIC8qIENLUk9PVCAq LworCisjaWZkZWYgSUtTRAorZXh0ZXJuIGludCBpbnNlcnZlcjsKKyNlbmRpZiAvKiBJS1NEICov CisKK2ludCBjbWZsZGZsZ3MgPSAwOwkJCS8qIEZsYWdzIGZvciBjbWZsZCgpICovCitpbnQgY21r d2ZsZ3MgPSAwOwkJCS8qIEZsYWdzIGZyb20gbGFzdCBrZXl3b3JkIHBhcnNlICovCitzdGF0aWMg aW50IG5vbXNnID0gMDsKK3N0YXRpYyBpbnQgYmxvY2tsdmwgPSAwOwkJLyogQmxvY2sgbmVzdGlu ZyBsZXZlbCAqLworc3RhdGljIGludCBsaW5lYmVnaW4gPSAwOwkJLyogRmxhZyBmb3IgYXQgc3Rh cnQgb2YgYSBsaW5lICovCitzdGF0aWMgaW50IHF1b3RpbmcgPSAxOwkJCS8qIFF1b3RpbmcgaXMg YWxsb3dlZCAqLworc3RhdGljIGludCBzd2FyZyA9IDA7CQkJLyogUGFyc2luZyBhIHN3aXRjaCBh cmd1bWVudCAqLworc3RhdGljIGludCB4Y21mZGIgPSAwOwkJCS8qIEZsYWcgZm9yIHBhcnNpbmcg Y2hhaW5lZCBmZGJzLi4uICovCitzdGF0aWMgaW50IGNoc3JjID0gMDsJCQkvKiBTb3VyY2Ugb2Yg Y2hhcmFjdGVyLCAxID0gdHR5ICovCitzdGF0aWMgaW50IG5ld2NtZCA9IDA7CQkJLyogU2VlIGFk ZGNtZCgpICovCisKKyNpZmRlZiBCU19ESVJTRVAKK3N0YXRpYyBpbnQgZGlybmFtZmxnID0gMDsK KyNlbmRpZiAvKiBCU19ESVJTRVAgKi8KKworLyoKK01vZGVsZWQgYWZ0ZXIgdGhlIERFQ1NZU1RF TS0yMCBjb21tYW5kIHBhcnNlciAodGhlIENPTU5EIEpTWVMpLCBSSVAuIEZlYXR1cmVzOgorCisg LiBwYXJzZXMgYW5kIHZlcmlmaWVzIGtleXdvcmRzLCBmaWxlbmFtZXMsIHRleHQgc3RyaW5ncywg bnVtYmVycywgb3RoZXIgZGF0YQorIC4gZGlzcGxheXMgYXBwcm9wcmlhdGUgbWVudSBvciBoZWxw IG1lc3NhZ2Ugd2hlbiB1c2VyIHR5cGVzICI/IgorIC4gZG9lcyBrZXl3b3JkIGFuZCBmaWxlbmFt ZSBjb21wbGV0aW9uIHdoZW4gdXNlciB0eXBlcyBFU0Mgb3IgVEFCCisgLiBkb2VzIHBhcnRpYWwg a2V5d29yZCBhbmQgZmlsZW5hbWUgY29tcGxldGlvbgorIC4gYWNjZXB0cyBhbnkgdW5pcXVlIGFi YnJldmlhdGlvbiBmb3IgYSBrZXl3b3JkCisgLiBhbGxvd3Mga2V5d29yZHMgdG8gaGF2ZSBhdHRy aWJ1dGVzLCBsaWtlICJpbnZpc2libGUiIGFuZCAiYWJicmV2aWF0aW9uIgorIC4gY2FuIHN1cHBs eSBkZWZhdWx0cyBmb3IgZmllbGRzIG9taXR0ZWQgYnkgdXNlcgorIC4gcHJvdmlkZXMgY29tbWFu ZCByZXRyeSBhbmQgcmVjYWxsCisgLiBwcm92aWRlcyBjaGFyYWN0ZXIsIHdvcmQsIGFuZCBsaW5l IGRlbGV0aW9uIChidXQgb25seSBmcm9tIHRoZSBlbmQpCisgLiBhY2NlcHRzIGlucHV0IGZyb20g a2V5Ym9hcmQsIGNvbW1hbmQgZmlsZXMsIG1hY3Jvcywgb3IgcmVkaXJlY3RlZCBzdGRpbgorIC4g YWxsb3dzIGZvciBmdWxsIG9yIGhhbGYgZHVwbGV4IG9wZXJhdGlvbiwgY2hhcmFjdGVyIG9yIGxp bmUgaW5wdXQKKyAuIGFsbG93cyBcLWVzY2FwZXMgZm9yIHNwZWNpYWwgY2hhcmFjdGVycworIC4g YWxsb3dzIHNwZWNpZmljYXRpb24gb2YgYSB1c2VyIGV4aXQgdG8gZXhwYW5kIHZhcmlhYmxlcywg ZXRjLgorIC4gc2V0dGFibGUgcHJvbXB0LCBwcm90ZWN0ZWQgZnJvbSBkZWxldGlvbiwgZHluYW1p Y2FsbHkgcmUtZXZhbHVhdGVkIGVhY2ggdGltZQorIC4gYWxsb3dzIGNoYWluZWQgcGFyc2UgZnVu Y3Rpb25zLgorCitGdW5jdGlvbnM6CisgY21zZXRwIC0gU2V0IHByb21wdCAoY21wcm9tIGlzIHBy b21wdCBzdHJpbmcpCisgY21zYXZwIC0gU2F2ZSBjdXJyZW50IHByb21wdAorIGNtZ2V0cCA9IEdl dCBjdXJyZW50IHByb21wdAorIHByb21wdCAtIElzc3VlIHByb21wdAorIGNtaW5pICAtIENsZWFy IHRoZSBjb21tYW5kIGJ1ZmZlciAoYmVmb3JlIHBhcnNpbmcgYSBuZXcgY29tbWFuZCkKKyBjbXJl cyAgLSBSZXNldCBjb21tYW5kIGJ1ZmZlciBwb2ludGVycyAoYmVmb3JlIHJlcGFyc2luZykKKyBj bWtleSAgLSBQYXJzZSBhIGtleXdvcmQgb3IgdG9rZW4gKGFsc28gY21rZXkyKQorIGNtc3dpICAt IFBhcnNlIGEgc3dpdGNoCisgY21udW0gIC0gUGFyc2UgYSBudW1iZXIKKyBjbWlmaSAgLSBQYXJz ZSBhbiBpbnB1dCBmaWxlIG5hbWUKKyBjbW9maSAgLSBQYXJzZSBhbiBvdXRwdXQgZmlsZSBuYW1l IChhbHNvIGNtaWZpcCwgY21pZmkyLCAuLi4pCisgY21kaXIgIC0gUGFyc2UgYSBkaXJlY3Rvcnkg bmFtZSAoYWxzbyBjbWRpcnApCisgY21mbGQgIC0gUGFyc2UgYW4gYXJiaXRyYXJ5IGZpZWxkCisg Y210eHQgIC0gUGFyc2UgYSB0ZXh0IHN0cmluZworIGNtZGF0ZSAtIFBhcnNlIGEgZGF0ZS10aW1l IHN0cmluZworIGNtY2ZtICAtIFBhcnNlIGNvbW1hbmQgY29uZmlybWF0aW9uIChlbmQgb2YgbGlu ZSkKKyBjbWZkYiAgLSBQYXJzZSBhbnkgb2YgYSBsaXN0IG9mIHRoZSBmb3JlZ29pbmcgKGNoYWlu ZWQgcGFyc2UgZnVuY3Rpb25zKQorCitSZXR1cm4gY29kZXM6CisgLTk6IGxpa2UgLTIgZXhjZXB0 IHRoaXMgbW9kdWxlIGFscmVhZHkgcHJpbnRlZCB0aGUgZXJyb3IgbWVzc2FnZQorIC0zOiBubyBp bnB1dCBwcm92aWRlZCB3aGVuIHJlcXVpcmVkCisgLTI6IGlucHV0IHdhcyBpbnZhbGlkIChlLmcu IG5vdCBhIG51bWJlciB3aGVuIGEgbnVtYmVyIHdhcyByZXF1aXJlZCkKKyAtMTogcmVwYXJzZSBy ZXF1aXJlZCAodXNlciBkZWxldGVkIGludG8gYSBwcmVjZWRpbmcgZmllbGQpCisgIDAgb3IgZ3Jl YXRlcjogc3VjY2VzcworU2VlIGluZGl2aWR1YWwgZnVuY3Rpb25zIGZvciBncmVhdGVyIGRldGFp bC4KKworQmVmb3JlIHVzaW5nIHRoZXNlIHJvdXRpbmVzLCB0aGUgY2FsbGVyIHNob3VsZCAjaW5j bHVkZSAiY2t1Y21kLmgiIGFuZCBzZXQgdGhlCitwcm9ncmFtJ3MgcHJvbXB0IGJ5IGNhbGxpbmcg Y21zZXRwKCkuICBJZiB0aGUgZmlsZSBwYXJzaW5nIGZ1bmN0aW9ucyBjbWlmaSwKK2Ntb2ZpLCBv ciBjbWRpciBhcmUgdG8gYmUgdXNlZCwgdGhpcyBtb2R1bGUgbXVzdCBiZSBsaW5rZWQgd2l0aCBh IGNrP2ZpbyBmaWxlCitzeXN0ZW0gc3VwcG9ydCBtb2R1bGUgZm9yIHRoZSBhcHByb3ByaWF0ZSBz eXN0ZW0sIGUuZy4gY2t1ZmlvIGZvciBVbml4LiAgSWYKK3RoZSBjYWxsZXIgcHV0cyB0aGUgdGVy bWluYWwgaW4gY2hhcmFjdGVyIHdha2V1cCAoImNicmVhayIpIG1vZGUgd2l0aCBubyBlY2hvLAor dGhlbiB0aGVzZSBmdW5jdGlvbnMgd2lsbCBwcm92aWRlIGxpbmUgZWRpdGluZyAtLSBjaGFyYWN0 ZXIsIHdvcmQsIGFuZCBsaW5lCitkZWxldGlvbiwgYXMgd2VsbCBhcyBrZXl3b3JkIGFuZCBmaWxl bmFtZSBjb21wbGV0aW9uIHVwb24gRVNDIGFuZCBoZWxwCitzdHJpbmdzLCBrZXl3b3JkLCBvciBm aWxlIG1lbnVzIHVwb24gJz8nLiAgSWYgdGhlIGNhbGxlciBwdXRzIHRoZSB0ZXJtaW5hbAoraW50 byBjaGFyYWN0ZXIgd2FrZXVwL25vZWNobyBtb2RlLCBjYXJlIHNob3VsZCBiZSB0YWtlbiB0byBy ZXN0b3JlIGl0IGJlZm9yZQorZXhpdCBmcm9tIG9yIGludGVycnVwdGlvbiBvZiB0aGUgcHJvZ3Jh bS4gIElmIHRoZSBjaGFyYWN0ZXIgd2FrZXVwIG1vZGUgaXMgbm90CitzZXQsIHRoZSBzeXN0ZW0n cyBvd24gbGluZSBlZGl0b3IgbWF5IGJlIHVzZWQuCisKK05PVEU6IENvbnRyYXJ5IHRvIGV4cGVj dGF0aW9ucywgbWFueSAjaWZkZWYncyBoYXZlIGJlZW4gYWRkZWQgdG8gdGhpcyBtb2R1bGUuCitB bnkgb3BlcmF0aW9uIHJlcXVpcmluZyBhbiAjaWZkZWYgKGxpa2UgY2xlYXIgc2NyZWVuLCBnZXQg Y2hhcmFjdGVyIGZyb20KK2tleWJvYXJkLCBlcmFzZSBjaGFyYWN0ZXIgZnJvbSBzY3JlZW4sIGV0 Yykgc2hvdWxkIGV2ZW50dWFsbHkgYmUgdHVybmVkIGludG8gYQorY2FsbCB0byBhIGZ1bmN0aW9u IHRoYXQgaXMgZGVmaW5lZCBpbiBjaz90aW8uYywgYnV0IHRoZW4gYWxsIHRoZSBjaz90aW8uYwor bW9kdWxlcyB3b3VsZCBoYXZlIHRvIGJlIGNoYW5nZWQuLi4KKyovCisKKy8qIEluY2x1ZGVzICov CisKKyNpbmNsdWRlICJja2NrZXIuaCIKKyNpbmNsdWRlICJja2Nhc2MuaCIJCQkvKiBBU0NJSSBj aGFyYWN0ZXIgc3ltYm9scyAqLworI2luY2x1ZGUgImNrdWNtZC5oIiAgICAgICAgICAgICAgICAg ICAgIC8qIENvbW1hbmQgcGFyc2luZyBkZWZpbml0aW9ucyAqLworCisjaWZkZWYgT1NGMTMKKyNp ZmRlZiBDS19BTlNJQworI2lmZGVmIF9OT19QUk9UTworI3VuZGVmIF9OT19QUk9UTworI2VuZGlm IC8qIF9OT19QUk9UTyAqLworI2VuZGlmIC8qIENLX0FOU0lDICovCisjZW5kaWYgLyogT1NGMTMg Ki8KKworI2lmbmRlZiBIUFVYUFJFNjUKKyNpbmNsdWRlIDxlcnJuby5oPgkJCS8qIEVycm9yIG51 bWJlciBzeW1ib2xzICovCisjZWxzZQorI2lmbmRlZiBFUlJOT19JTkNMVURFRAorI2luY2x1ZGUg PGVycm5vLmg+CQkJLyogRXJyb3IgbnVtYmVyIHN5bWJvbHMgKi8KKyNlbmRpZgkvKiBFUlJOT19J TkNMVURFRCAqLworI2VuZGlmCS8qIEhQVVhQUkU2NSAqLworCisjaWZkZWYgT1MyCisjaWZuZGVm IE5UCisjZGVmaW5lIElOQ0xfTk9QTQorI2RlZmluZSBJTkNMX1ZJTwkJCS8qIE5lZWRlZCBmb3Ig Y2tvY29uLmggKi8KKyNpbmNsdWRlIDxvczIuaD4KKyN1bmRlZiBDT01NRU5UCisjZWxzZQorI2Rl ZmluZSBBUElSRVQgVUxPTkcKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjZW5kaWYgLyogTlQgKi8K KyNpbmNsdWRlICJja29jb24uaCIKKyNpbmNsdWRlIDxpby5oPgorI2VuZGlmIC8qIE9TMiAqLwor CisjaWZkZWYgT1NLCisjZGVmaW5lIGNjIGNjb3VudAkJCS8qIE9TLTkvNjhLIGNvbXBpbGVyIGJ1 ZyAqLworI2VuZGlmIC8qIE9TSyAqLworCisjaWZkZWYgR0VNRE9TCQkJCS8qIEF0YXJpIFNUICov CisjaWZkZWYgcHV0Y2hhcgorI3VuZGVmIHB1dGNoYXIKKyNlbmRpZiAvKiBwdXRjaGFyICovCisj ZGVmaW5lIHB1dGNoYXIoeCkgY29ub2MoeCkKKyNlbmRpZiAvKiBHRU1ET1MgKi8KKworI2lmZGVm IENLX0FVVE9ETAorZXh0ZXJuIGludCBjbWRhZGwsIGp1c3RvbmU7CisjZW5kaWYgLyogQ0tfQVVU T0RMICovCisKK2V4dGVybiBpbnQgdGltZWxpbWl0LCBuenhvcHRzLCBub3B1c2gsIG5vbG9jYWws IHhjbWRzcmMsIGtlZXBhbGxjaGFyczsKKworI2lmZGVmIENLU1lTTE9HCisjaWZkZWYgVU5JWAor I2lmZGVmIENLWFBSSU5URgkJCS8qIE91ciBwcmludGYgbWFjcm8gY29uZmxpY3RzIHdpdGggKi8K KyN1bmRlZiBwcmludGYJCQkJLyogdXNlIG9mICJwcmludGYiIGluIHN5c2xvZy5oICovCisjZW5k aWYgLyogQ0tYUFJJTlRGICovCisjaWZkZWYgUlRBSVgKKyNpbmNsdWRlIDxzeXMvc3lzbG9nLmg+ CisjZWxzZSAgLyogUlRBSVggKi8KKyNpbmNsdWRlIDxzeXNsb2cuaD4KKyNlbmRpZiAvKiBSVEFJ WCAqLworI2lmZGVmIENLWFBSSU5URgorI2RlZmluZSBwcmludGYgY2t4cHJpbnRmCisjZW5kaWYg LyogQ0tYUFJJTlRGICovCisjZW5kaWYgLyogVU5JWCAqLworI2VuZGlmIC8qIENLU1lTTE9HICov CisKKy8qIExvY2FsIHZhcmlhYmxlcyAqLworCitzdGF0aWMKK2ludCBwc2V0ZiA9IDAsICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBGbGFnIHRoYXQgcHJvbXB0IGhhcyBiZWVuIHNldCAqLwor ICAgIGNjID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENoYXJhY3RlciBjb3Vu dCAqLworICAgIGRweCA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIER1cGxleCAo MCA9IGZ1bGwpICovCisgICAgaW53b3JkID0gMDsJCQkJLyogSW4gdGhlIG1pZGRsZSBvZiBnZXR0 aW5nIGEgd29yZCAqLworCitjaGFyICpkZnByb20gPSAiQ29tbWFuZD8gIjsgICAgICAgICAgICAg LyogRGVmYXVsdCBwcm9tcHQgKi8KKyNpZm5kZWYgTk9MQVNURklMRQorY2hhciAqbGFzdGZpbGUg PSBOVUxMOwkJCS8qIExhc3QgZmlsZXNwZWMgKi8KK3N0YXRpYyBjaGFyICp0bXBsYXN0ZmlsZSA9 IE5VTEw7CS8qIExhc3QgZmlsZXNwZWMgY2FuZGlkYXRlICovCisjZW5kaWYJLyogTk9MQVNURklM RSAqLworCitpbnQgY21mbGdzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ29tbWFu ZCBmbGFncyAqLworaW50IGNtZnNhdjsJCQkJLyogQSBzYXZlZCB2ZXJzaW9uIG9mIHRoZW0gKi8K Kworc3RhdGljIGNoYXIgcHVzaGMgPSBOVUw7CitzdGF0aWMgY2hhciBicmtjaGFyID0gTlVMOwor CisjZGVmaW5lIENNREVGQVVMVCAxMDIzCitzdGF0aWMgY2hhciBjbWRlZmF1bHRbQ01ERUZBVUxU KzFdOworCisjaWZkZWYgRENNREJVRgorY2hhciAqY21kYnVmID0gTlVMTDsJCQkvKiBDb21tYW5k IGJ1ZmZlciAqLworY2hhciAqc2F2YnVmID0gTlVMTDsJCQkvKiBCdWZmZXIgdG8gc2F2ZSBjb3B5 IG9mIGNvbW1hbmQgKi8KK2NoYXIgKmF0bWJ1ZiA9IE5VTEw7CQkJLyogQXRvbSBidWZmZXIgLSBm b3IgY3VycmVudCBmaWVsZCAqLworY2hhciAqYXR4YnVmID0gTlVMTDsJCQkvKiBGb3IgZXhwYW5k aW5nIHRoZSBhdG9tIGJ1ZmZlciAqLworY2hhciAqcHJldmNtZCA9IE5VTEw7CitzdGF0aWMgY2hh ciAqYXR5YnVmID0gTlVMTDsJCS8qIEZvciBjb3B5aW5nIGF0b20gYnVmZmVyICovCitzdGF0aWMg Y2hhciAqZmlsYnVmID0gTlVMTDsJCS8qIEZpbGUgbmFtZSBidWZmZXIgKi8KK3N0YXRpYyBjaGFy ICpjbXByb20gPSBOVUxMOwkJLyogUHJvZ3JhbSdzIHByb21wdCAqLworc3RhdGljIGNoYXIgKmNt cHJ4eCA9IE5VTEw7CQkvKiBQcm9ncmFtJ3MgcHJvbXB0LCB1bmV2YWx1YXRlZCAqLworCisjaWZk ZWYgQ0tfUkVDQUxMCisvKgorICBDb21tYW5kIHJlY2FsbCBpcyBhdmFpbGFibGUgb25seSBpZiB3 ZSBjYW4gbWFrZSBwcm9mbGlnYXRlIHVzZSBvZiBtYWxsb2MoKS4KKyovCisjZGVmaW5lIFJfTUFY IDEwCQkJLyogSG93IG1hbnkgY29tbWFuZHMgdG8gc2F2ZSAqLworaW50IGNtX3JlY2FsbCA9IFJf TUFYOwkJCS8qIFNpemUgb2YgY29tbWFuZCByZWNhbGwgYnVmZmVyICovCitpbnQgb25fcmVjYWxs ID0gMTsJCQkvKiBSZWNhbGwgZmVhdHVyZSBpcyBPTiAqLworc3RhdGljIGludCBub19yZWNhbGwg PSAwOwkJLyogUmVjYWxsIE9GRiBmb3IgdGhpcyBjbWQgb25seSAqLworc3RhdGljIGludCBmb3Jj ZV9hZGQgPSAwOwkJLyogRm9yY2UgY21kIGludG8gcmVjYWxsIGJ1ZmZlciAqLworc3RhdGljIGlu dCBsYXN0X3JlY2FsbCA9IC0xOwkJLyogTGFzdCByZWNhbGwtcmVsYXRlZCBhY3Rpb24gKi8KKy8q CisgIC0xID0gbm9uZQorICAgMCA9IENSIChhIGNvbW1hbmQgd2FzIGVudGVyZWQpCisgICAxID0g VXAKKyAgIDIgPSBEb3duCisqLworaW50IGluX3JlY2FsbCA9IDA7CQkJLyogUmVjYWxsIGJ1ZmZl cnMgYXJlIGluaXQnZCAqLworc3RhdGljIGludAorICBjdXJyZW50ID0gLTEsCQkJCS8qIFBvaW50 ZXIgdG8gY3VycmVudCBjb21tYW5kICovCisgIHJsYXN0ID0gLTE7CQkJCS8qIEluZGV4IG9mIGxh c3QgY29tbWFuZCBpbiBidWZmZXIgKi8KK3N0YXRpYyBjaGFyICoqcmVjYWxsID0gTlVMTDsJCS8q IEFycmF5IG9mIHJlY2FsbCBidWZmZXIgcG9pbnRlcnMgKi8KKyNlbmRpZiAvKiBDS19SRUNBTEwg Ki8KKyNlbHNlICAvKiAhRENNREJVRiAqLworY2hhciBjbWRidWZbQ01EQkwrNF07ICAgICAgICAg ICAgICAgICAgIC8qIENvbW1hbmQgYnVmZmVyICovCitjaGFyIHNhdmJ1ZltDTURCTCs0XTsgICAg ICAgICAgICAgICAgICAgLyogQnVmZmVyIHRvIHNhdmUgY29weSBvZiBjb21tYW5kICovCitjaGFy IGF0bWJ1ZltBVE1CTCs0XTsgICAgICAgICAgICAgICAgICAgLyogQXRvbSBidWZmZXIgKi8KK2No YXIgYXR4YnVmW0NNREJMKzRdOyAgICAgICAgICAgICAgICAgICAvKiBGb3IgZXhwYW5kaW5nIHRo ZSBhdG9tIGJ1ZmZlciAqLworY2hhciBwcmV2Y21kW0NNREJMKzRdOwkJCS8qIEZvciBkaXNwbGF5 aW5nIHRoZSBsYXN0IGNvbW1hbmQgKi8KK3N0YXRpYyBjaGFyIGF0eWJ1ZltBVE1CTCs0XTsJCS8q IEZvciBjb3B5aW5nIGF0b20gYnVmZmVyICovCitzdGF0aWMgY2hhciBmaWxidWZbQVRNQkwrNF07 CQkvKiBGaWxlIG5hbWUgYnVmZmVyICovCitzdGF0aWMgY2hhciBjbXByb21bUFJPTVBUTCsxXTsJ CS8qIFByb2dyYW0ncyBwcm9tcHQgKi8KK3N0YXRpYyBjaGFyIGNtcHJ4eFtQUk9NUFRMKzFdOwkJ LyogUHJvZ3JhbSdzIHByb21wdCwgdW5ldmFsdWF0ZWQgKi8KKyNlbmRpZiAvKiBEQ01EQlVGICov CisKKy8qIENvbW1hbmQgYnVmZmVyIHBvaW50ZXJzICovCisKKyNkZWZpbmUgUFBWTEVOIFZOQU1M CQkJLyogMjAwODAzMDUgV29sZnJhbSBTYW5nICh3YXMgMjQpICovCitjaGFyIHBwdm5hbWJ1ZltQ UFZMRU4rMV0gPSB7IE5VTCwgTlVMIH07CisKK2NoYXIgKiBjbWJwdHIgPSBOVUxMOwkJCS8qIEN1 cnJlbnQgcG9zaXRpb24gKGZvciBleHBvcnQpICovCisKK3N0YXRpYyBjaGFyICpicCwgICAgICAg ICAgICAgICAgICAgICAgICAvKiBDdXJyZW50IGNvbW1hbmQgYnVmZmVyIHBvc2l0aW9uICovCisg ICAgKnBwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU3RhcnQgb2YgY3VycmVu dCBmaWVsZCAqLworICAgICpucDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFN0 YXJ0IG9mIG5leHQgZmllbGQgKi8KKworc3RhdGljIGludCB1bmd3LAkJCS8qIEZvciB1bmdldHRp bmcgd29yZHMgKi8KKyAgICBhdHhuOwkJCQkvKiBFeHBhbnNpb24gYnVmZmVyIChhdHhidWYpIGxl bmd0aCAqLworCisjaWZkZWYgT1MyCitleHRlcm4gaW50IHdpZGVyZXN1bHQ7CisjZW5kaWYgLyog T1MyICovCisKK2V4dGVybiBpbnQgY21kX2NvbHMsIGNtZF9yb3dzLCBsb2NhbCwgcXVpZXQ7CisK KyNpZmRlZiBUTkNPREUKKyNpZmRlZiBJQUMKKyN1bmRlZiBJQUMKKyNlbmRpZiAvKiBJQUMgKi8K KyNkZWZpbmUgSUFDIDI1NQorI2VuZGlmIC8qIFROQ09ERSAqLworCitfUFJPVE9UWVAoIHN0YXRp YyBpbnQgZ3R3b3JkLCAoaW50KSApOworX1BST1RPVFlQKCBzdGF0aWMgaW50IGFkZGJ1ZiwgKGNo YXIgKikgKTsKK19QUk9UT1RZUCggc3RhdGljIGludCBzZXRhdG0sIChjaGFyICosIGludCkgKTsK K19QUk9UT1RZUCggc3RhdGljIFZPSUQgY21kbmV3bCwgKGNoYXIpICk7CitfUFJPVE9UWVAoIHN0 YXRpYyBWT0lEIGNtZGNoYXJkZWwsICh2b2lkKSApOworX1BST1RPVFlQKCBzdGF0aWMgVk9JRCBj bWRlY2hvLCAoY2hhciwgaW50KSApOworX1BST1RPVFlQKCBzdGF0aWMgaW50IHRlc3QsIChpbnQs IGludCkgKTsKKyNpZmRlZiBHRU1ET1MKK19QUk9UT1RZUCggZXh0ZXJuIGNoYXIgKnN0cmNociwg KGNoYXIgKiwgaW50KSApOworI2VuZGlmIC8qIEdFTURPUyAqLworCitleHRlcm4gY2hhciAqIGRm dHR5OworCisvKiBUaGUgZm9sbG93aW5nIGFyZSBmb3IgdXNlIHdpdGggY2hhaW5lZCBGREIncyAq LworCitzdGF0aWMgaW50IGNyZmxhZyA9IDA7CQkJLyogQ2FycmlhZ2UgcmV0dXJuIHdhcyB0eXBl ZCAqLworc3RhdGljIGludCBxbWZsYWcgPSAwOwkJCS8qIFF1ZXN0aW9uIG1hcmsgd2FzIHR5cGVk ICovCitzdGF0aWMgaW50IGVzZmxhZyA9IDA7CQkJLyogRXNjYXBlIHdhcyB0eXBlZCAqLworCisv KiBEaXJlY3Rvcnkgc2VwYXJhdG9yICovCisKKyNpZmRlZiBHRU1ET1MKK3N0YXRpYyBjaGFyIGRp cnNlcCA9ICdcXCc7CisjZWxzZQorI2lmZGVmIGRhdGFnZW5lcmFsCitzdGF0aWMgY2hhciBkaXJz ZXAgPSAnOic7CisjZWxzZQorI2lmZGVmIE1BQworc3RhdGljIGNoYXIgZGlyc2VwID0gJzonOwor I2Vsc2UKKyNpZmRlZiBWTVMKK3N0YXRpYyBjaGFyIGRpcnNlcCA9ICcuJzsKKyNlbHNlCisjaWZk ZWYgU1RSQVRVUworc3RhdGljIGNoYXIgZGlyc2VwID0gJz4nOworI2Vsc2UKK3N0YXRpYyBjaGFy IGRpcnNlcCA9ICcvJzsJCS8qIFVOSVgsIE9TLzIsIE9TLTksIEFtaWdhLCBldGMuICovCisjZW5k aWYgLyogU1RSQVRVUyAqLworI2VuZGlmIC8qIFZNUyAqLworI2VuZGlmIC8qIE1BQyAqLworI2Vu ZGlmIC8qIGRhdGFnZW5lcmFsICovCisjZW5kaWYgLyogR0VNRE9TICovCisKKy8qICBIIEEgUyBO IE8gUCBBIFQgSCAgKi8KKworLyogIFJldHVybnMgMCBpZiBmaWxlc3BlYyBzIGluY2x1ZGVzIGFu eSBwYXRoIHNlZ21lbnRzOyAxIGlmIGl0IGRvZXNuJ3QuICovCisKK2ludAoraGFzbm9wYXRoKHMp IGNoYXIgKiBzOyB7CisgICAgY2hhciAqIHAgPSBOVUxMOworICAgIGlmICghcykgcmV0dXJuKDAp OworICAgIGlmICghKnMpIHJldHVybigwKTsKKyAgICB6c3RyaXAocywmcCk7CisgICAgcmV0dXJu KGNrc3RyY21wKHMscCxDS01BWFBBVEgsZmlsZWNhc2UpID09IDAgPyAxIDogMCk7Cit9CisKKy8q ICBDIEsgUyBQIFIgRSBBIEQgIC0tICBQcmludCBzdHJpbmcgZG91YmxlLXNwYWNlZCAgKi8KKwor c3RhdGljIGNoYXIgKiBzcHJwdHIgPSBOVUxMOworCitzdGF0aWMgY2hhciAqCitja3NwcmVhZChz KSBjaGFyICogczsgeworICAgIGludCBuID0gMDsKKyAgICBjaGFyICogcDsKKyAgICBuID0gc3Ry bGVuKHMpOworICAgIGlmIChzcHJwdHIpCisgICAgICBmcmVlKHNwcnB0cik7CisgICAgc3BycHRy ID0gbWFsbG9jKG4gKyBuICsgMyk7CisgICAgaWYgKHNwcnB0cikgeworCXAgPSBzcHJwdHI7CisJ d2hpbGUgKCpzKSB7CisJICAgICpwKysgPSAqcysrOworCSAgICAqcCsrID0gU1A7CisJfQorCSpw ID0gTlVMOworICAgIH0KKyAgICByZXR1cm4oc3BycHRyID8gc3BycHRyIDogIiIpOworfQorCisv KiAgVCBFIFMgVCAgLS0gIEJpdCB0ZXN0ICAqLworCitzdGF0aWMgaW50Cit0ZXN0KHgsbSkgaW50 IHgsIG07IHsgLyogIFJldHVybnMgMSBpZiBhbnkgYml0cyBmcm9tIG0gYXJlIG9uIGluIHgsIGVs c2UgMCAgKi8KKyAgICByZXR1cm4oKHggJiBtKSA/IDEgOiAwKTsKK30KKworLyogIEsgVyBEIEgg RSBMIFAgIC0tICBHaXZlbiBhIGtleXdvcmQgdGFibGUsIHByaW50IGtleXdvcmRzIGluIGNvbHVt bnMuICAqLworLyoKKyAgQ2FsbCB3aXRoOgorICAgIHMgICAgIC0ga2V5d29yZCB0YWJsZQorICAg IG4gICAgIC0gbnVtYmVyIG9mIGVudHJpZXMKKyAgICBwYXQgICAtIHBhdHRlcm4gKGxlZnQgc3Vi c3RyaW5nKSB0aGF0IG11c3QgbWF0Y2ggZm9yIGVhY2gga2V5d29yZAorICAgIHByZSAgIC0gcHJl Zml4IHRvIGFkZCB0byBlYWNoIGtleXdvcmQKKyAgICBwb3N0ICAtIHN1ZmZpeCB0byBhZGQgdG8g ZWFjaCBrZXl3b3JkCisgICAgb2ZmICAgLSBvZmZzZXQgb24gZmlyc3Qgc2NyZWVuZnVsLCBhbGxv d2luZyByb29tIGZvciBpbnRyb2R1Y3RvcnkgdGV4dAorICAgIHhobHAgIC0gMSB0byBwcmludCBh bnkgQ01fSU5WIGtleXdvcmRzIHRoYXQgYXJlIG5vdCBhbHNvIGFiYnJldmlhdGlvbnMuCisgICAg ICAgICAgICAyIHRvIHByaW50IENNX0lOViBrZXl3b3JkcyBpZiBDTV9ITFAgYWxzbyBzZXQKKyAg ICAgICAgICAgIDQgaWYgaXQncyBhIHN3aXRjaCB0YWJsZSAodG8gc2hvdyAnOicgaWYgQ01fQVJH KQorCisgIEFycmFuZ2VzIGtleXdvcmRzIGluIGNvbHVtbnMgd2l0aCB3aWR0aCBiYXNlZCBvbiBs b25nZXN0IGtleXdvcmQuCisgIERvZXMgIm1vcmU/IiBwcm9tcHRpbmcgYXQgZW5kIG9mIHNjcmVl bi4KKyAgVXNlcyBnbG9iYWwgY21kX3Jvd3MgYW5kIGNtZF9jb2xzIGZvciBzY3JlZW4gc2l6ZS4K KyovCitWT0lECitrd2RoZWxwKHMsbixwYXQscHJlLHBvc3Qsb2ZmLHhobHApCisgICAgc3RydWN0 IGtleXRhYiBzW107IGludCBuLCBvZmYsIHhobHA7IGNoYXIgKnBhdCwgKnByZSwgKnBvc3Q7Cisv KiBrd2RoZWxwICovIHsKKworICAgIGludCB3aWR0aCA9IDA7CisgICAgaW50IGNjOworICAgIGlu dCBjb2xzLCBoZWlnaHQsIGksIGosIGssIGxjLCBuMiA9IDA7CisgICAgY2hhciAqYiA9IE5VTEws ICpwLCAqcTsKKyAgICBjaGFyICpwYSwgKnB4OworICAgIGNoYXIgKipzMiA9IE5VTEw7CisgICAg Y2hhciAqdG1wYnVmID0gTlVMTDsKKworICAgIGNjID0gc3RybGVuKHBhdCk7CisKKyAgICBpZiAo IXMpIHJldHVybjsJCQkvKiBOb3RoaW5nIHRvIGRvICovCisgICAgaWYgKG4gPCAxKSByZXR1cm47 CQkJLyogRGl0dG8gKi8KKyAgICBpZiAob2ZmIDwgMCkgb2ZmID0gMDsJCS8qIE9mZnNldCBmb3Ig Zmlyc3QgcGFnZSAqLworICAgIGlmICghcHJlKSBwcmUgPSAiIjsJCQkvKiBIYW5kbGUgbnVsbCBz dHJpbmcgcG9pbnRlcnMgKi8KKyAgICBpZiAoIXBvc3QpIHBvc3QgPSAiIjsKKyAgICBsYyA9IG9m ZjsJCQkJLyogU2NyZWVuLWxpbmUgY291bnRlciAqLworCisgICAgaWYgKHhobHAgJiA0KQkJCS8q IEZvciBzd2l0Y2hlcyAqLworICAgICAgdG1wYnVmID0gKGNoYXIgKiltYWxsb2MoVE1QQlVGU0la KzEpOworCisgICAgaWYgKChzMiA9IChjaGFyICoqKSBtYWxsb2MobiAqIHNpemVvZihjaGFyICop KSkpIHsKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CS8qIEZpbmQgbG9uZ2VzdCBrZXl3b3Jk ICovCisJICAgIHMyW2ldID0gTlVMTDsKKwkgICAgaWYgKGNrc3RyY21wKHNbaV0ua3dkLHBhdCxj YywwKSkKKwkgICAgICBjb250aW51ZTsKKworCSAgICBpZiAoc1tpXS5mbGdzICYgQ01fUFNICS8q IE5PUFVTSCBvciBub3B1c2ggc2NyZWVuaW5nICovCisjaWZuZGVmIE5PUFVTSAorCQkmJiBub3B1 c2gKKyNlbmRpZiAvKiBOT1BVU0ggKi8KKwkJKQorCSAgICAgIGNvbnRpbnVlOworCSAgICBpZiAo c1tpXS5mbGdzICYgQ01fTE9DCS8qIE5PTE9DQUwgb3Igbm9sb2NhbCBzY3JlZW5pbmcgKi8KKyNp Zm5kZWYgTk9MT0NBTAorCQkmJiBub2xvY2FsCisjZW5kaWYgLyogTk9MT0NBTCAqLworCQkpCisJ ICAgICAgY29udGludWU7CisKKwkgICAgaWYgKHNbaV0uZmxncyAmIENNX0lOVikgeworI2lmZGVm IENPTU1FTlQKKy8qIFRoaXMgY29kZSBkb2VzIG5vdCBzaG93IGludmlzaWJsZSBrZXl3b3JkcyBh dCBhbGwgZXhjZXB0IGZvciAiaGVscCA/IiAqLworLyogYW5kIHRoZW4gb25seSBoZWxwIHRvcGlj cyAoQ01fSExQKSBpbiB0aGUgdG9wLWxldmVsIGtleXdvcmQgbGlzdC4gKi8KKworCQlpZiAoKHho bHAgJiAyKSA9PSAwKQorCQkgIGNvbnRpbnVlOworCQllbHNlIGlmICgoc1tpXS5mbGdzICYgQ01f SExQKSA9PSAwKQorCQkgIGNvbnRpbnVlOworI2Vsc2UKKy8qIFRoaXMgY29kZSBzaG93cyBpbnZp c2libGUga2V5d29yZHMgdGhhdCBhcmUgbm90IGFsc28gYWJicmV2aWF0aW9ucyB3aGVuICovCisv KiA/IHdhcyB0eXBlZCBBRlRFUiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWVsZCBzbyB0aGUgdXNl ciBjYW4gZmluZCBvdXQgKi8KKy8qIHdoYXQgdGhleSBhcmUgYW5kIChmb3IgZXhhbXBsZSkgd2h5 IGNvbXBsZXRpb24gZG9lc24ndCB3b3JrIGF0IHRoaXMgcG9pbnQgKi8KKworCQlpZiAoc1tpXS5m bGdzICYgQ01fQUJSKQorCQkgIGNvbnRpbnVlOworCQllbHNlIGlmICgoeGhscCAmIDMpID09IDAp CisJCSAgY29udGludWU7CisJCWVsc2UgaWYgKCh4aGxwICYgMikgJiYgKChzW2ldLmZsZ3MgJiBD TV9ITFApID09IDApKQorCQkgIGNvbnRpbnVlOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKwkgICAg fQorCSAgICBqID0gc3RybGVuKHNbaV0ua3dkKTsKKwkgICAgaWYgKCEoeGhscCAmIDQpIHx8ICF0 bXBidWYpIHsgLyogUmVndWxhciBrZXl3b3JkIHRhYmxlICovCisJCXMyW24yKytdID0gc1tpXS5r d2Q7CS8qIENvcHkgcG9pbnRlcnMgdG8gdmlzaWJsZSBvbmVzICovCisJICAgIH0gZWxzZSB7CQkJ LyogU3dpdGNoZXMgKi8KKwkJY2ttYWttc2codG1wYnVmLAkvKiBNYWtlIGEgY29weSB0aGF0IHNo b3dzICI6IiBpZiAqLworCQkJIFRNUEJVRlNJWiwJLyogdGhlIHN3aXRjaCB0YWtlcyBhbiBhcmd1 bWVudC4gKi8KKwkJCSBzW2ldLmt3ZCwKKwkJCSAoc1tpXS5mbGdzICYgQ01fQVJHKSA/ICI6IiA6 ICIiLAorCQkJIE5VTEwsCisJCQkgTlVMTAorCQkJICk7CisJCW1ha2VzdHIoJihzMltuMl0pLHRt cGJ1Zik7CisJCWlmIChzW2ldLmZsZ3MgJiBDTV9BUkcpIGorKzsKKwkJbjIrKzsKKwkgICAgfQor CSAgICBpZiAoaiA+IHdpZHRoKQorCSAgICAgIHdpZHRoID0gajsKKwl9CisJLyogQ29sdW1uIHdp ZHRoICovCisJbiA9IG4yOworICAgIH0KKyAgICBpZiAoczIgJiYgKGIgPSAoY2hhciAqKSBtYWxs b2MoY21kX2NvbHMgKyAxKSkpIHsgLyogTWFrZSBhIGxpbmUgYnVmZmVyICAgKi8KKwljaGFyICog Yng7CisJYnggPSBiICsgY21kX2NvbHM7CisJd2lkdGggKz0gKGludClzdHJsZW4ocHJlKSArIChp bnQpc3RybGVuKHBvc3QpICsgMjsKKwljb2xzID0gY21kX2NvbHMgLyB3aWR0aDsJLyogSG93IG1h bnkgY29sdW1ucz8gKi8KKwlpZiAoY29scyA8IDEpIGNvbHMgPSAxOworCWhlaWdodCA9IG4gLyBj b2xzOwkJLyogSG93IGxvbmcgaXMgZWFjaCBjb2x1bW4/ICovCisJaWYgKG4gJSBjb2xzKSBoZWln aHQrKzsJCS8qIEFkZCBvbmUgZm9yIHJlbWFpbmRlciwgaWYgYW55ICovCisKKwlmb3IgKGkgPSAw OyBpIDwgaGVpZ2h0OyBpKyspIHsJICAgIC8qIExvb3AgZm9yIGVhY2ggcm93ICovCisJICAgIGZv ciAoaiA9IDA7IGogPCBjbWRfY29sczsgaisrKSAgLyogRmlyc3QgZmlsbCByb3cgd2l0aCBibGFu a3MgKi8KKwkgICAgICBiW2pdID0gU1A7CisJICAgIGZvciAoaiA9IDA7IGogPCBjb2xzOyBqKysp IHsgICAgLyogTG9vcCBmb3IgZWFjaCBjb2x1bW4gaW4gcm93ICovCisJCWsgPSBpICsgKGogKiBo ZWlnaHQpOyAgICAgICAvKiBJbmRleCBvZiBuZXh0IGtleXdvcmQgKi8KKwkJaWYgKGsgPCBuKSB7 CQkgICAgLyogSW4gcmFuZ2U/ICovCisJCSAgICBwYSA9IHByZTsKKwkJICAgIHB4ID0gcG9zdDsK KwkJICAgIHAgPSBzMltrXTsJCSAgICAvKiBQb2ludCB0byB2ZXJiIG5hbWUgKi8KKwkJICAgIHEg PSBiICsgKGogKiB3aWR0aCkgKyAxOyAvKiBXaGVyZSB0byBjb3B5IGl0IHRvICovCisJCSAgICB3 aGlsZSAoKHEgPCBieCkgJiYgKCpxKysgPSAqcGErKykpIDsgLyogQ29weSBwcmVmaXggKi8KKwkJ ICAgIHEtLTsJCSAgICAgICAgICAgICAgICAgLyogQmFjayB1cCBvdmVyIE5VTCAqLworCQkgICAg d2hpbGUgKChxIDwgYngpICYmICgqcSsrID0gKnArKykpIDsJIC8qIENvcHkgZmlsZW5hbWUgKi8K KwkJICAgIHEtLTsJCSAgICAgICAgICAgICAgICAgLyogQmFjayB1cCBvdmVyIE5VTCAqLworCQkg ICAgd2hpbGUgKChxIDwgYngpICYmICgqcSsrID0gKnB4KyspKSA7IC8qIENvcHkgc3VmZml4ICov CisJCSAgICBpZiAoaiA8IGNvbHMgLSAxKSB7CisJCQlxLS07CisJCQkqcSA9IFNQOwkvKiBSZXBs YWNlIHRoZSBzcGFjZSAqLworCQkgICAgfQorCQl9CisJICAgIH0KKwkgICAgcCA9IGIgKyBjbWRf Y29scyAtIDE7CS8qIExhc3QgY2hhciBpbiBsaW5lICovCisJICAgIHdoaWxlICgqcC0tID09IFNQ KSA7CS8qIFRyaW0gKi8KKwkgICAgKihwKzIpID0gTlVMOworCSAgICBwcmludGYoIiVzXG4iLGIp OwkJLyogUHJpbnQgdGhlIGxpbmUgKi8KKwkgICAgaWYgKCsrbGMgPiAoY21kX3Jvd3MgLSAyKSkg eyAvKiBTY3JlZW4gZnVsbD8gKi8KKwkJaWYgKCFhc2ttb3JlKCkpCQkvKiBEbyBtb3JlLXByb21w dGluZy4uLiAqLworCQkgIGdvdG8geGt3ZGhlbHA7CisJCWVsc2UKKwkJICBsYyA9IDA7CisJICAg IH0KKwl9CisJLyogcHJpbnRmKCJcbiIpOyAqLwkJLyogQmxhbmsgbGluZSBhdCBlbmQgb2YgcmVw b3J0ICovCisgICAgfSBlbHNlIHsJCQkJLyogTWFsbG9jIGZhaWx1cmUsIG5vIGNvbHVtbnMgKi8K Kwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJICAgIGlmIChzW2ldLmZsZ3MgJiBDTV9JTlYp CS8qIFVzZSBvcmlnaW5hbCBrZXl3b3JkIHRhYmxlICovCisJICAgICAgY29udGludWU7CQkJLyog c2tpcHBpbmcgaW52aXNpYmxlIGVudHJpZXMgKi8KKwkgICAgcHJpbnRmKCIlcyVzJXNcbiIscHJl LHNbaV0ua3dkLHBvc3QpOworCSAgICBpZiAoKytsYyA+IChjbWRfcm93cyAtIDIpKSB7IC8qIFNj cmVlbiBmdWxsPyAqLworCQlpZiAoIWFza21vcmUoKSkJCS8qIERvIG1vcmUtcHJvbXB0aW5nLi4u ICovCisJCSAgZ290byB4a3dkaGVscDsKKwkJZWxzZQorCQkgIGxjID0gMDsKKwkgICAgfQorCX0K KyAgICB9CisgIHhrd2RoZWxwOgorICAgIGlmICh4aGxwICYgNCkgeworCWlmICh0bXBidWYpIGZy ZWUoKGNoYXIgKil0bXBidWYpOworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspCisJICBpZiAoczJb aV0pIGZyZWUoczJbaV0pOworICAgIH0KKyAgICBpZiAoczIpIGZyZWUoczIpOwkJCS8qIEZyZWUg YXJyYXkgY29weSAqLworICAgIGlmIChiKSBmcmVlKGIpOwkJCS8qIEZyZWUgbGluZSBidWZmZXIg Ki8KKyAgICByZXR1cm47Cit9CisKKy8qICBYIEYgSSBMIEggRSBMIFAgIC0tICBHaXZlbiBhIGZp bGUgbGlzdCwgcHJpbnQgbmFtZXMgaW4gY29sdW1ucy4gICovCisvKgorICBDYWxsIHdpdGg6Cisg ICAgbiAgICAgLSBudW1iZXIgb2YgZW50cmllcworICAgIHByZSAgIC0gcHJlZml4IHRvIGFkZCB0 byBlYWNoIGZpbGVuYW1lCisgICAgcG9zdCAgLSBzdWZmaXggdG8gYWRkIHRvIGVhY2ggZmlsZW5h bWUKKyAgICBvZmYgICAtIG9mZnNldCBvbiBmaXJzdCBzY3JlZW5mdWwsIGFsbG93aW5nIHJvb20g Zm9yIGludHJvZHVjdG9yeSB0ZXh0CisgICAgY21kaXJmbGcgLSAxIGlmIG9ubHkgZGlyZWN0b3J5 IG5hbWVzIHNob3VsZCBiZSBsaXN0ZWQsIDAgdG8gbGlzdCBhbGwgZmlsZXMKKyAgICBmcyAgICAt IGNhbGwgZmlsZXNlbGVjdCgpIHRvIGRlY2lkZSB3aGV0aGVyIHRvIGluY2x1ZGUgZWFjaCBmaWxl LgorICAgIFRoZSByZXN0IG9mIHRoZSBhcmdzIGFyZSB0aGUgc2FtZSBhcyBmb3IgZmlsZXNlbGVj dCgpLgorCisgIEFycmFuZ2VzIGZpbGVuYW1lcyBpbiBjb2x1bW5zIHdpdGggd2lkdGggYmFzZWQg b24gbG9uZ2VzdCBmaWxlbmFtZS4KKyAgRG9lcyAibW9yZT8iIHByb21wdGluZyBhdCBlbmQgb2Yg c2NyZWVuLgorICBVc2VzIGdsb2JhbCBjbWRfcm93cyBhbmQgY21kX2NvbHMgZm9yIHNjcmVlbiBz aXplLgorKi8KKworaW50CisjaWZkZWYgQ0tfQU5TSUMKK3hmaWxoZWxwKAorICAgIGludCBuLCBj aGFyICpwcmUsIGNoYXIgKnBvc3QsIGludCBvZmYsIGludCBjbWRpcmZsYWcsCisgICAgaW50IGZz LCBjaGFyICpzYSwgY2hhciAqc2IsIGNoYXIgKnNuYSwgY2hhciAqc25iLAorICAgIENLX09GRl9U IG1pbnNpeiwgQ0tfT0ZGX1QgbWF4c2l6LAorICAgIGludCBuYnUsIGludCBueGxpc3QsCisgICAg Y2hhciAqKiB4bGlzdAorKQorI2Vsc2UKK3hmaWxoZWxwKG4scHJlLHBvc3Qsb2ZmLGNtZGlyZmxn LAorCSBmcyxzYSxzYixzbmEsc25iLG1pbnNpeixtYXhzaXosbmJ1LG54bGlzdCx4bGlzdCkKKyAg ICBpbnQgbiwgb2ZmOyBjaGFyICpwcmUsICpwb3N0OyBpbnQgY21kaXJmbGc7CisgICAgaW50IGZz OyBjaGFyICpzYSwqc2IsKnNuYSwqc25iOyBDS19PRkZfVCBtaW5zaXosbWF4c2l6OworICAgIGlu dCBuYnUsbnhsaXN0OyBjaGFyICoqIHhsaXN0OworI2VuZGlmCS8qIENLX0FOU0lDICovCisgewor ICAgIGNoYXIgZmlsYnVmW0NLTUFYUEFUSCArIDFdOwkJLyogVGVtcCBidWZmZXIgZm9yIG9uZSBm aWxlbmFtZSAqLworICAgIGludCB3aWR0aCA9IDA7CisgICAgaW50IGNvbHMsIGhlaWdodCwgaSwg aiwgaywgbGMsIG4yID0gMCwgcmMgPSAwLCBpdHNhZGlyID0gMDsKKyAgICBjaGFyICpiID0gTlVM TCwgKnAsICpxOworICAgIGNoYXIgKnBhLCAqcHg7CisgICAgY2hhciAqKnMyID0gTlVMTDsKKyNp ZmRlZiBWTVMKKyAgICBjaGFyICogY2RwID0gemd0ZGlyKCk7CisjZW5kaWYgLyogVk1TICovCisK KyAgICBpZiAobiA8IDEpIHJldHVybigwKTsKKyAgICBpZiAob2ZmIDwgMCkgb2ZmID0gMDsJCS8q IE9mZnNldCBmb3IgZmlyc3QgcGFnZSAqLworICAgIGlmICghcHJlKSBwcmUgPSAiIjsJCQkvKiBI YW5kbGUgbnVsbCBzdHJpbmcgcG9pbnRlcnMgKi8KKyAgICBpZiAoIXBvc3QpIHBvc3QgPSAiIjsK KworICAgIGxjID0gb2ZmOwkJCQkvKiBTY3JlZW4tbGluZSBjb3VudGVyICovCisKKyAgICBpZiAo KHMyID0gKGNoYXIgKiopIG1hbGxvYyhuICogc2l6ZW9mKGNoYXIgKikpKSkgeworCWZvciAoaSA9 IDA7IGkgPCBuOyBpKyspIHsJLyogTG9vcCB0aHJvdWdoIGZpbGVuYW1lcyAqLworCSAgICBpdHNh ZGlyID0gMDsKKwkgICAgczJbaV0gPSBOVUxMOwkJLyogSW5pdGlhbGl6ZSBlYWNoIHBvaW50ZXIg dG8gTlVMTCAqLworCSAgICB6bmV4dChmaWxidWYpOwkJLyogR2V0IG5leHQgZmlsZW5hbWUgKi8K KwkgICAgaWYgKCFmaWxidWZbMF0pCQkvKiBTaG91bGRuJ3QgaGFwcGVuICovCisJICAgICAgYnJl YWs7CisjaWZkZWYgQ09NTUVOVAorCSAgICBpdHNhZGlyID0gaXNkaXIoZmlsYnVmKTsJLyogSXMg aXQgYSBkaXJlY3Rvcnk/ICovCisJICAgIGlmIChjbWRpcmZsZyAmJiAhaXRzYWRpcikJLyogTm8s IGxpc3RpbmcgZGlyZWN0b3JpZXMgb25seT8gKi8KKwkgICAgICBjb250aW51ZTsJCQkvKiBTbyBz a2lwIHRoaXMgb25lLiAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKwkgICAgaWYgKGZzKSBpZiAo ZmlsZXNlbGVjdChmaWxidWYsCisJCQkgICBzYSxzYixzbmEsc25iLAorCQkJICAgbWluc2l6LG1h eHNpeixuYnUsbnhsaXN0LHhsaXN0KSA8IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGlu dWU7CisJICAgIH0KKyNpZmRlZiBWTVMKKwkgICAgY2tzdHJuY3B5KGZpbGJ1Zix6cmVsbmFtZShm aWxidWYsY2RwKSxDS01BWFBBVEgpOworI2VuZGlmIC8qIFZNUyAqLworCSAgICBqID0gc3RybGVu KGZpbGJ1Zik7CisjaWZuZGVmIFZNUworCSAgICBpZiAoaXRzYWRpciAmJiBqIDwgQ0tNQVhQQVRI IC0gMSAmJiBqID4gMCkgeworCQlpZiAoZmlsYnVmW2otMV0gIT0gZGlyc2VwKSB7CisJCSAgICBm aWxidWZbaisrXSA9IGRpcnNlcDsKKwkJICAgIGZpbGJ1ZltqXSA9IE5VTDsKKwkJfQorCSAgICB9 CisjZW5kaWYgLyogVk1TICovCisJICAgIGlmICghKHMyW24yXSA9IG1hbGxvYyhqKzEpKSkgewor CQlwcmludGYoIj9NZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlXG4iKTsKKwkJcmMgPSAtOTsKKwkJ Z290byB4ZmlsaGVscDsKKwkgICAgfQorCSAgICBpZiAoaiA8PSBDS01BWFBBVEgpIHsKKwkJc3Ry Y3B5KHMyW24yXSxmaWxidWYpOworCQluMisrOworCSAgICB9IGVsc2UgeworCQlwcmludGYoIj9O YW1lIHRvbyBsb25nIC0gJXNcbiIsIGZpbGJ1Zik7CisJCXJjID0gLTk7CisJCWdvdG8geGZpbGhl bHA7CisJICAgIH0KKwkgICAgaWYgKGogPiB3aWR0aCkJCS8qIEdldCB3aWR0aCBvZiB3aWRlc3Qg b25lICovCisJICAgICAgd2lkdGggPSBqOworCX0KKwluID0gbjI7CQkJCS8qIEhvdyBtYW55IHdl IGFjdHVhbGx5IGdvdCAqLworICAgIH0KKyAgICBzaF9zb3J0KHMyLE5VTEwsbiwwLDAsZmlsZWNh c2UpOwkvKiBBbHBoYWJldGl6ZSB0aGUgbGlzdCAqLworCisgICAgcmMgPSAxOworICAgIGlmIChz MiAmJiAoYiA9IChjaGFyICopIG1hbGxvYyhjbWRfY29scyArIDEpKSkgeyAvKiBNYWtlIGEgbGlu ZSBidWZmZXIgKi8KKwljaGFyICogYng7CisJYnggPSBiICsgY21kX2NvbHM7CisJd2lkdGggKz0g KGludClzdHJsZW4ocHJlKSArIChpbnQpc3RybGVuKHBvc3QpICsgMjsKKwljb2xzID0gY21kX2Nv bHMgLyB3aWR0aDsJLyogSG93IG1hbnkgY29sdW1ucz8gKi8KKwlpZiAoY29scyA8IDEpIGNvbHMg PSAxOworCWhlaWdodCA9IG4gLyBjb2xzOwkJLyogSG93IGxvbmcgaXMgZWFjaCBjb2x1bW4/ICov CisJaWYgKG4gJSBjb2xzKSBoZWlnaHQrKzsJCS8qIEFkZCBvbmUgZm9yIHJlbWFpbmRlciwgaWYg YW55ICovCisKKwlmb3IgKGkgPSAwOyBpIDwgaGVpZ2h0OyBpKyspIHsJICAgIC8qIExvb3AgZm9y IGVhY2ggcm93ICovCisJICAgIGZvciAoaiA9IDA7IGogPCBjbWRfY29sczsgaisrKSAgLyogRmly c3QgZmlsbCByb3cgd2l0aCBibGFua3MgKi8KKwkgICAgICBiW2pdID0gU1A7CisJICAgIGZvciAo aiA9IDA7IGogPCBjb2xzOyBqKyspIHsgICAgLyogTG9vcCBmb3IgZWFjaCBjb2x1bW4gaW4gcm93 ICovCisJCWsgPSBpICsgKGogKiBoZWlnaHQpOyAgICAgICAvKiBJbmRleCBvZiBuZXh0IGZpbGVu YW1lICovCisJCWlmIChrIDwgbikgewkJICAgIC8qIEluIHJhbmdlPyAqLworCQkgICAgcGEgPSBw cmU7CisJCSAgICBweCA9IHBvc3Q7CisJCSAgICBwID0gczJba107CQkgICAgICAgICAgICAgICAv KiBQb2ludCB0byBmaWxlbmFtZSAqLworCQkgICAgcSA9IGIgKyAoaiAqIHdpZHRoKSArIDE7ICAg ICAgICAgICAgIC8qIGFuZCBkZXN0aW5hdGlvbiAqLworCQkgICAgd2hpbGUgKChxIDwgYngpICYm ICgqcSsrID0gKnBhKyspKSA7IC8qIENvcHkgcHJlZml4ICovCisJCSAgICBxLS07CQkgICAgICAg ICAgICAgICAgIC8qIEJhY2sgdXAgb3ZlciBOVUwgKi8KKwkJICAgIHdoaWxlICgocSA8IGJ4KSAm JiAoKnErKyA9ICpwKyspKSA7CSAvKiBDb3B5IGZpbGVuYW1lICovCisJCSAgICBxLS07CQkgICAg ICAgICAgICAgICAgIC8qIEJhY2sgdXAgb3ZlciBOVUwgKi8KKwkJICAgIHdoaWxlICgocSA8IGJ4 KSAmJiAoKnErKyA9ICpweCsrKSkgOyAvKiBDb3B5IHN1ZmZpeCAqLworCQkgICAgaWYgKGogPCBj b2xzIC0gMSkgeworCQkJcS0tOworCQkJKnEgPSBTUDsJLyogUmVwbGFjZSB0aGUgc3BhY2UgKi8K KwkJICAgIH0KKwkJfQorCSAgICB9CisJICAgIHAgPSBiICsgY21kX2NvbHMgLSAxOwkvKiBMYXN0 IGNoYXIgaW4gbGluZSAqLworCSAgICB3aGlsZSAoKnAtLSA9PSBTUCkgOwkvKiBUcmltICovCisJ ICAgICoocCsyKSA9IE5VTDsKKwkgICAgcHJpbnRmKCIlc1xuIixiKTsJCS8qIFByaW50IHRoZSBs aW5lICovCisJICAgIGlmICgrK2xjID4gKGNtZF9yb3dzIC0gMikpIHsgLyogU2NyZWVuIGZ1bGw/ ICovCisJCWlmICghYXNrbW9yZSgpKSB7CS8qIERvIG1vcmUtcHJvbXB0aW5nLi4uICovCisJCSAg ICByYyA9IDA7CisJCSAgICBnb3RvIHhmaWxoZWxwOworCQl9IGVsc2UKKwkJICBsYyA9IDA7CisJ ICAgIH0KKwl9CisJcHJpbnRmKCJcbiIpOwkJCS8qIEJsYW5rIGxpbmUgYXQgZW5kIG9mIHJlcG9y dCAqLworCWdvdG8geGZpbGhlbHA7CisgICAgfSBlbHNlIHsJCQkJLyogTWFsbG9jIGZhaWx1cmUs IG5vIGNvbHVtbnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJICAgIHpuZXh0KGZp bGJ1Zik7CisJICAgIGlmICghZmlsYnVmWzBdKSBicmVhazsKKwkgICAgcHJpbnRmKCIlcyVzJXNc biIscHJlLGZpbGJ1Zixwb3N0KTsKKwkgICAgaWYgKCsrbGMgPiAoY21kX3Jvd3MgLSAyKSkgeyAv KiBTY3JlZW4gZnVsbD8gKi8KKwkJaWYgKCFhc2ttb3JlKCkpIHsJIC8qIERvIG1vcmUtcHJvbXB0 aW5nLi4uICovCisJCSAgICByYyA9IDA7CisJCSAgICBnb3RvIHhmaWxoZWxwOworCQl9IGVsc2Ug bGMgPSAwOworCSAgICB9CisJfQoreGZpbGhlbHA6CisJaWYgKGIpIGZyZWUoYik7CisJZm9yIChp ID0gMDsgaSA8IG4yOyBpKyspCisJICBpZiAoczJbaV0pIGZyZWUoczJbaV0pOworCWlmIChzMikg ZnJlZSgoY2hhciAqKXMyKTsKKwlyZXR1cm4ocmMpOworICAgIH0KK30KKworLyoKKyAgU2ltcGxl ciBmcm9udCBlbmQgZm9yIHhmaWxoZWxwKCkgd2l0aCBzaG9ydGVyIGFyZyBsaXN0IHdoZW4gbm8K KyAgZmlsZSBzZWxlY3Rpb24gaXMgbmVlZGVkLgorKi8KK2ludAorZmlsaGVscChuLHByZSxwb3N0 LG9mZixjbWRpcmZsZykgaW50IG4sIG9mZjsgY2hhciAqcHJlLCAqcG9zdDsgaW50IGNtZGlyZmxn OyB7CisgICAgcmV0dXJuKHhmaWxoZWxwKG4scHJlLHBvc3Qsb2ZmLGNtZGlyZmxnLAorCQkgICAg MCxOVUxMLE5VTEwsTlVMTCxOVUxMLAorCQkgICAgKENLX09GRl9UKTAsKENLX09GRl9UKTAsMCww LChjaGFyICoqKU5VTEwpKTsKK30KKworLyogIEMgTSBTIEUgVCBVIFAgIC0tICBTZXQgdXAgY29t bWFuZCBidWZmZXJzICAqLworCisjaWZkZWYgRENNREJVRgoraW50CitjbXNldHVwKCkgeworICAg IGlmICghKGNtZGJ1ZiA9IG1hbGxvYyhDTURCTCArIDQpKSkgcmV0dXJuKC0xKTsKKyAgICBpZiAo IShzYXZidWYgPSBtYWxsb2MoQ01EQkwgKyA0KSkpIHJldHVybigtMSk7CisgICAgc2F2YnVmWzBd ID0gJ1wwJzsKKyAgICBpZiAoIShwcmV2Y21kID0gbWFsbG9jKENNREJMICsgNCkpKSByZXR1cm4o LTEpOworICAgIHByZXZjbWRbMF0gPSAnXDAnOworICAgIGlmICghKGF0bWJ1ZiA9IG1hbGxvYyhB VE1CTCArIDQpKSkgcmV0dXJuKC0xKTsKKyAgICBpZiAoIShhdHhidWYgPSBtYWxsb2MoQ01EQkwg KyA0KSkpIHJldHVybigtMSk7CisgICAgaWYgKCEoYXR5YnVmID0gbWFsbG9jKEFUTUJMICsgNCkp KSByZXR1cm4oLTEpOworICAgIGlmICghKGZpbGJ1ZiA9IG1hbGxvYyhBVE1CTCArIDQpKSkgcmV0 dXJuKC0xKTsKKyAgICBpZiAoIShjbXByb20gPSBtYWxsb2MoUFJPTVBUTCArIDQpKSkgcmV0dXJu KC0xKTsKKyAgICBpZiAoIShjbXByeHggPSBtYWxsb2MoUFJPTVBUTCArIDQpKSkgcmV0dXJuKC0x KTsKKyNpZmRlZiBDS19SRUNBTEwKKyAgICBjbXJpbmkoY21fcmVjYWxsKTsKKyNlbmRpZiAvKiBD S19SRUNBTEwgKi8KKyAgICByZXR1cm4oMCk7Cit9CisjZW5kaWYgLyogRENNREJVRiAqLworCisv KiAgQyBNIFMgRSBUIFAgIC0tICBTZXQgdGhlIHByb2dyYW0gcHJvbXB0LiAgKi8KKworVk9JRAor Y21zZXRwKHMpIGNoYXIgKnM7IHsKKyAgICBpZiAoIXMpIHMgPSAiIjsKKyAgICBja3N0cm5jcHko Y21wcnh4LHMsUFJPTVBUTCk7CisgICAgcHNldGYgPSAxOyAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogRmxhZyB0aGF0IHByb21wdCBoYXMgYmVlbiBzZXQuICovCit9CisKKy8qICBDIE0gUyBB IFYgUCAgLS0gIFNhdmUgYSBjb3B5IG9mIHRoZSBjdXJyZW50IHByb21wdC4gICovCisKK1ZPSUQK KyNpZmRlZiBDS19BTlNJQworY21zYXZwKGNoYXIgc1tdLCBpbnQgbikKKyNlbHNlCitjbXNhdnAo cyxuKSBjaGFyIHNbXTsgaW50IG47CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIGNtc2F2cCAq LyB7CisgICAgaWYgKHBzZXRmKQkJCQkvKiBCdXQgbm90IGlmIG5vIHByb21wdCBpcyBzZXQuICov CisgICAgICBja3N0cm5jcHkocyxjbXByeHgsbik7Cit9CisKK2NoYXIgKgorY21nZXRwKCkgewor ICAgIHJldHVybihjbXByeHgpOworfQorCitpbnQKK2NtZ2JyaygpIHsKKyAgICByZXR1cm4oYnJr Y2hhcik7Cit9CisKK2ludAorY21na3dmbGdzKCkgeworICAgIHJldHVybihjbWt3Zmxncyk7Cit9 CisKKy8qICBQIFIgTyBNIFAgVCAgLS0gIElzc3VlIHRoZSBwcm9ncmFtIHByb21wdC4gICovCisK K1ZPSUQKK3Byb21wdChmKSB4eF9zdHJwIGY7IHsKKyAgICBjaGFyICpzeCwgKnN5OyBpbnQgbjsK KyNpZmRlZiBDS19TU0wKKyAgICBleHRlcm4gaW50IHNzbF9hY3RpdmVfZmxhZywgdGxzX2FjdGl2 ZV9mbGFnOworI2VuZGlmIC8qIENLX1NTTCAqLworI2lmZGVmIE9TMgorICAgIGV4dGVybiBpbnQg ZGlzcGxheV9kZW1vOworCisgICAgLyogSWYgdGhlcmUgaXMgYSBkZW1vIHNjcmVlbiB0byBiZSBk aXNwbGF5ZWQsIGRpc3BsYXkgaXQgKi8KKyAgICBpZiAoZGlzcGxheV9kZW1vICYmIHhjbWRzcmMg PT0gMCkgeworICAgICAgICBkZW1vc2NybihWQ01EKTsKKyAgICAgICAgZGlzcGxheV9kZW1vID0g MDsKKyAgICB9CisjZW5kaWYgLyogT1MyICovCisKKyAgICBpZiAocHNldGYgPT0gMCkJCQkvKiBJ ZiBubyBwcm9tcHQgc2V0LCBzZXQgZGVmYXVsdC4gKi8KKyAgICAgIGNtc2V0cChkZnByb20pOwor CisgICAgc3ggPSBjbXByeHg7CQkJLyogVW5ldmFsdWF0ZWQgY29weSAqLworICAgIGlmIChmKSB7 CQkJCS8qIElmIGNvbnZlcnNpb24gZnVuY3Rpb24gZ2l2ZW4gKi8KKwlzeSA9IGNtcHJvbTsJCQkv KiBFdmFsdWF0ZSBpdCAqLworI2lmZGVmIENPTU1FTlQKKwlkZWJ1ZyhGMTAxLCJwcm9tcHQgc3gi LCIiLHN4KTsKKwlkZWJ1ZyhGMTAxLCJwcm9tcHQgc3kiLCIiLHN5KTsKKyNlbmRpZgkvKiBDT01N RU5UICovCisJbiA9IFBST01QVEw7CisJaWYgKCgqZikoc3gsJnN5LCZuKSA8IDApCS8qIElmIGV2 YWx1YXRpb24gZmFpbGVkICovCisJICBzeCA9IGNtcHJ4eDsJCQkvKiByZXZlcnQgdG8gdW5ldmFs dWF0ZWQgY29weSAqLworCWVsc2UgaWYgKCEqY21wcm9tKQkJLyogZGl0dG8gaWYgaXQgY2FtZSB1 cCBlbXB0eSAqLworCSAgc3ggPSBjbXByeHg7CisJZWxzZQorCSAgc3ggPSBjbXByb207CisgICAg fSBlbHNlCisgICAgICBja3N0cm5jcHkoY21wcm9tLHN4LFBST01QVEwpOworICAgIGNtcHJvbVtQ Uk9NUFRMLTFdID0gTlVMOworICAgIGlmICghKnN4KQkJCQkvKiBEb24ndCBwcmludCBpZiBlbXB0 eSAqLworICAgICAgcmV0dXJuOworCisjaWZkZWYgT1NLCisgICAgZnB1dHMoc3gsIHN0ZG91dCk7 CisjZWxzZQorI2lmZGVmIE1BQworICAgIHByaW50ZigiJXMiLCBzeCk7CisjZWxzZQorI2lmZGVm IElLU0QKKyAgICBpZiAoaW5zZXJ2ZXIpIHsJCQkvKiBQcmludCB0aGUgcHJvbXB0LiAqLworICAg ICAgICB0dG9jKENSKTsJCQkvKiBJZiBURUxORVQgU2VydmVyICovCisgICAgICAgIHR0b2MoTlVM KTsJCQkvKiBtdXN0IGZvbGxvVyBDUiBieSBOVUwgKi8KKyAgICAgICAgcHJpbnRmKCIlcyIsc3gp OworICAgIH0gZWxzZQorI2VuZGlmIC8qIElLU0QgKi8KKyAgICAgIHByaW50ZigiXHIlcyIsc3gp OworI2lmZGVmIENLX1NTTAorICAgIGlmICghKHNzbF9hY3RpdmVfZmxhZyB8fCB0bHNfYWN0aXZl X2ZsYWcpKQorI2VuZGlmIC8qIENLX1NTTCAqLworICAgICAgZmZsdXNoKHN0ZG91dCk7CQkJLyog Tm93ISAqLworI2VuZGlmIC8qIE1BQyAqLworI2VuZGlmIC8qIE9TSyAqLworfQorCisjaWZuZGVm IE5PU1BMCitWT0lECitwdXNoY21kKHMpIGNoYXIgKiBzOyB7CQkJLyogRm9yIHVzZSB3aXRoIElG IGNvbW1hbmQuICovCisgICAgaWYgKCFzKSBzID0gbnA7CisgICAgY2tzdHJuY3B5KHNhdmJ1Zixz LENNREJMKTsJCS8qIFNhdmUgdGhlIGRlcGVuZGVudCBjbGF1c2UsICAqLworICAgIGNtcmVzKCk7 CQkJCS8qIGFuZCBjbGVhciB0aGUgY29tbWFuZCBidWZmZXIuICovCisgICAgZGVidWcoRjExMCwg InB1c2hjbWQgc2F2YnVmIiwgc2F2YnVmLCAwKTsKK30KKworVk9JRAorcHVzaHFjbWQocykgY2hh ciAqIHM7IHsJCQkvKiBGb3IgdXNlIHdpdGggRUxTRSBjb21tYW5kLiAqLworICAgIGNoYXIgYywg KiBwID0gc2F2YnVmOwkJLyogRGVzdCAqLworICAgIGlmICghcykgcyA9IG5wOwkJCS8qIFNvdXJj ZSAqLworICAgIHdoaWxlICgqcykgewkJCS8qIEdldCBmaXJzdCBub253aGl0ZXNwYWNlIGNoYXIg Ki8KKwlpZiAoKnMgIT0gU1ApCisJICBicmVhazsKKwllbHNlCisJICBzKys7CisgICAgfQorICAg IGlmICgqcyAhPSAneycpIHsJCQkvKiBJZiBpdCdzIG5vdCAieyIgKi8KKwlwdXNoY21kKHMpOwkJ CS8qIGRvIHJlZ3VsYXIgcHVzaGNtZCAqLworCXJldHVybjsKKyAgICB9CisgICAgd2hpbGUgKChj ID0gKnMrKykpIHsJCS8qIE90aGVyd2lzZSBpbnNlcnQgcXVvdGVzICovCisJaWYgKGMgPT0gQ01E USkKKwkgICpwKysgPSBDTURROworCSpwKysgPSBjOworICAgIH0KKyAgICBjbXJlcygpOwkJCQkv KiBhbmQgY2xlYXIgdGhlIGNvbW1hbmQgYnVmZmVyLiAqLworICAgIGRlYnVnKEYxMTAsICJwdXNo cWNtZCBzYXZidWYiLCBzYXZidWYsIDApOworfQorI2VuZGlmIC8qIE5PU1BMICovCisKKyNpZmRl ZiBDT01NRU5UCisvKiBubyBsb25nZXIgdXNlZC4uLiAqLworVk9JRAorcG9wY21kKCkgeworICAg IGNrc3RybmNweShjbWRidWYsc2F2YnVmLENNREJMKTsJLyogUHV0IGJhY2sgdGhlIHNhdmVkIG1h dGVyaWFsICovCisgICAgKnNhdmJ1ZiA9ICdcMCc7CQkJLyogYW5kIGNsZWFyIHRoZSBzYXZlIGJ1 ZmZlciAqLworICAgIGNtcmVzKCk7Cit9CisjZW5kaWYgLyogQ09NTUVOVCAqLworCisvKiAgQyBN IFIgRSBTICAtLSAgUmVzZXQgcG9pbnRlcnMgdG8gYmVnaW5uaW5nIG9mIGNvbW1hbmQgYnVmZmVy LiAgKi8KKworVk9JRAorY21yZXMoKSB7CisgICAgaW53b3JkID0gMDsJCQkJLyogV2UncmUgbm90 IGluIGEgd29yZCAqLworICAgIGNjID0gMDsJCQkJLyogQ2hhcmFjdGVyIGNvdW50IGlzIHplcm8g Ki8KKworLyogSW5pdGlhbGl6ZSBwb2ludGVycyAqLworCisgICAgcHAgPSBjbWRidWY7CQkJLyog QmVnaW5uaW5nIG9mIGN1cnJlbnQgZmllbGQgKi8KKyAgICBicCA9IGNtZGJ1ZjsJCQkvKiBDdXJy ZW50IHBvc2l0aW9uIHdpdGhpbiBidWZmZXIgKi8KKyAgICBucCA9IGNtZGJ1ZjsJCQkvKiBXaGVy ZSB0byBzdGFydCBuZXh0IGZpZWxkICovCisKKyAgICBjbWZsZGZsZ3MgPSAwOworICAgIGNtZmxn cyA9IC01OyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBhcnNlIG5vdCB5ZXQgc3RhcnRlZC4g Ki8KKyAgICB1bmd3ID0gMDsJCQkJLyogRG9uJ3QgbmVlZCB0byB1bmdldCBhIHdvcmQuICovCit9 CisKKy8qICBDIE0gSSBOIEkgIC0tICBDbGVhciB0aGUgY29tbWFuZCBhbmQgYXRvbSBidWZmZXJz LCByZXNldCBwb2ludGVycy4gICovCisKKy8qCitUaGUgYXJndW1lbnQgc3BlY2lmaWVzIHdobyBp cyB0byBlY2hvIHRoZSB1c2VyJ3MgdHlwZWluIC0tCisgIDEgbWVhbnMgdGhlIGNtZCBwYWNrYWdl IGVjaG9lcworICAwIHNvbWVib2R5IGVsc2UgKHN5c3RlbSwgZnJvbnQgZW5kLCB0ZXJtaW5hbCkg ZWNob2VzCisqLworVk9JRAorY21pbmkoZCkgaW50IGQ7IHsKKyNpZmRlZiBEQ01EQlVGCisgICAg aWYgKCFhdG1idWYpCisgICAgICBpZiAoY21zZXR1cCgpPDApCisJZmF0YWwoImZhdGFsIGVycm9y OiB1bmFibGUgdG8gYWxsb2NhdGUgY29tbWFuZCBidWZmZXJzIik7CisjZW5kaWYgLyogRENNREJV RiAqLworI2lmZGVmIFVTRV9NRU1DUFkKKyAgICBtZW1zZXQoY21kYnVmLDAsQ01EQkwpOworICAg IG1lbXNldChhdG1idWYsMCxBVE1CTCk7CisjZWxzZQorICAgIGZvciAoYnAgPSBjbWRidWY7IGJw IDwgY21kYnVmK0NNREJMOyBicCsrKSAqYnAgPSBOVUw7CisgICAgZm9yIChicCA9IGF0bWJ1Zjsg YnAgPCBhdG1idWYrQVRNQkw7IGJwKyspICpicCA9IE5VTDsKKyNlbmRpZiAvKiBVU0VfTUVNQ1BZ ICovCisKKyAgICAqYXRtYnVmID0gKnNhdmJ1ZiA9ICphdHhidWYgPSAqYXR5YnVmID0gKmZpbGJ1 ZiA9IE5VTDsKKyAgICBibG9ja2x2bCA9IDA7CQkJLyogQmxvY2sgbGV2ZWwgaXMgMCAqLworICAg IGxpbmViZWdpbiA9IDE7CQkJLyogQXQgdGhlIGJlZ2lubmluZyBvZiBhIGxpbmUgKi8KKyAgICBk cHggPSBkOwkJCQkvKiBHbG9iYWwgY29weSBvZiB0aGUgZWNobyBmbGFnICovCisgICAgZGVidWco RjEwMSwiY21pbmkgZHB4IiwiIixkcHgpOworICAgIGNyZmxhZyA9IDA7CQkJCS8qIFJlc2V0IGZs YWdzICovCisgICAgcW1mbGFnID0gMDsKKyAgICBlc2ZsYWcgPSAwOworI2lmZGVmIENLX1JFQ0FM TAorICAgIG5vX3JlY2FsbCA9IDA7CQkJLyogU3RhcnQgb3V0IHdpdGggcmVjYWxsIGVuYWJsZWQg Ki8KKyNlbmRpZiAvKiBDS19SRUNBTEwgKi8KKyAgICBjbXJlcygpOwkJCQkvKiBTZXRzIGJwIGV0 YyAqLworICAgIG5ld2NtZCA9IDE7CQkJCS8qIFNlZSBhZGRjbWQoKSAqLworfQorCisjaWZuZGVm IE5PU1BMCisvKgorICBUaGUgZm9sbG93aW5nIGJpdHMgYXJlIHRvIGFsbG93IHRoZSBjb21tYW5k IHBhY2thZ2UgdG8gY2FsbCBpdHNlbGYKKyAgaW4gdGhlIG1pZGRsZSBvZiBhIHBhcnNlLiAgVG8g ZG8gdGhpcywgYmVnaW4gYnkgY2FsbGluZyBjbXB1c2gsIGFuZAorICBlbmQgYnkgY2FsbGluZyBj bXBvcC4gIEFzIHlvdSBjYW4gc2VlLCB0aGlzIGlzIHJhdGhlciBleHBlbnNpdmUuCisqLworI2lm ZGVmIERDTURCVUYKK3N0cnVjdCBjbXAgeworICAgIGludCBpWzVdOwkJCQkvKiBzdGFjayBmb3Ig aW50ZWdlcnMgKi8KKyAgICBjaGFyICpjWzNdOwkJCQkvKiBzdGFjayBmb3IgcG9pbnRlcnMgKi8K KyAgICBjaGFyICpiWzhdOwkJCQkvKiBzdGFjayBmb3IgYnVmZmVyIGNvbnRlbnRzICovCit9Owor c3RydWN0IGNtcCAqY21wID0gMDsKKyNlbHNlCitpbnQgY21wX2lbQ01EREVQKzFdWzVdOwkJCS8q IFN0YWNrIGZvciBpbnRlZ2VycyAqLworY2hhciAqY21wX2NbQ01EREVQKzFdWzVdOwkJLyogZm9y IG1pc2MgcG9pbnRlcnMgKi8KK2NoYXIgKmNtcF9iW0NNRERFUCsxXVs3XTsJCS8qIGZvciBidWZm ZXIgY29udGVudHMgcG9pbnRlcnMgKi8KKyNlbmRpZiAvKiBEQ01EQlVGICovCisKK2ludCBjbWRk ZXAgPSAtMTsJCQkvKiBDdXJyZW50IHN0YWNrIGRlcHRoICovCisKK2ludAorY21wdXNoKCkgewkJ CQkvKiBTYXZlIHRoZSBjb21tYW5kIGVudmlyb25tZW50ICovCisgICAgY2hhciAqY3A7CQkJCS8q IENoYXJhY3RlciBwb2ludGVyICovCisKKyAgICBpZiAoY21kZGVwID49IENNRERFUCkJCS8qIEVu dGVyIGEgbmV3IGNvbW1hbmQgZGVwdGggKi8KKyAgICAgIHJldHVybigtMSk7CisgICAgY21kZGVw Kys7CisgICAgZGVidWcoRjEwMSwiJmNtcHVzaCB0byBkZXB0aCIsIiIsY21kZGVwKTsKKworI2lm ZGVmIERDTURCVUYKKyAgICAvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIGNtcCBpZiBub3QgYWxyZWFk eSBkb25lICovCisgICAgaWYgKCFjbXAgJiYgIShjbXAgPSAoc3RydWN0IGNtcCAqKSBtYWxsb2Mo c2l6ZW9mKHN0cnVjdCBjbXApKihDTURERVArMSkpKSkKKyAgICAgIGZhdGFsKCJjbXB1c2g6IG5v IG1lbW9yeSBmb3IgY21wIik7CisgICAgY21wW2NtZGRlcF0uaVswXSA9IGNtZmxnczsJCS8qIEZp cnN0IGRvIHRoZSBnbG9iYWwgaW50cyAqLworICAgIGNtcFtjbWRkZXBdLmlbMV0gPSBjbWZzYXY7 CisgICAgY21wW2NtZGRlcF0uaVsyXSA9IGF0eG47CisgICAgY21wW2NtZGRlcF0uaVszXSA9IHVu Z3c7CisKKyAgICBjbXBbY21kZGVwXS5jWzBdID0gYnA7CQkvKiBUaGVuIHRoZSBnbG9iYWwgcG9p bnRlcnMgKi8KKyAgICBjbXBbY21kZGVwXS5jWzFdID0gcHA7CisgICAgY21wW2NtZGRlcF0uY1sy XSA9IG5wOworI2Vsc2UKKyAgICBjbXBfaVtjbWRkZXBdWzBdID0gY21mbGdzOwkJLyogRmlyc3Qg ZG8gdGhlIGdsb2JhbCBpbnRzICovCisgICAgY21wX2lbY21kZGVwXVsxXSA9IGNtZnNhdjsKKyAg ICBjbXBfaVtjbWRkZXBdWzJdID0gYXR4bjsKKyAgICBjbXBfaVtjbWRkZXBdWzNdID0gdW5ndzsK KworICAgIGNtcF9jW2NtZGRlcF1bMF0gPSBicDsJCS8qIFRoZW4gdGhlIGdsb2JhbCBwb2ludGVy cyAqLworICAgIGNtcF9jW2NtZGRlcF1bMV0gPSBwcDsKKyAgICBjbXBfY1tjbWRkZXBdWzJdID0g bnA7CisjZW5kaWYgLyogRENNREJVRiAqLworCisgICAgLyogTm93IHRoZSBidWZmZXJzIHRoZW1z ZWx2ZXMuICBBIGxvdCBvZiByZXBpdGl0aW91cyBjb2RlLi4uICovCisKKyNpZmRlZiBEQ01EQlVG CisgICAgY3AgPSBtYWxsb2MoKGludClzdHJsZW4oY21kYnVmKSsxKTsJLyogMDogQ29tbWFuZCBi dWZmZXIgKi8KKyAgICBpZiAoY3ApIHN0cmNweShjcCxjbWRidWYpOworICAgIGNtcFtjbWRkZXBd LmJbMF0gPSBjcDsKKyAgICBpZiAoY3AgPT0gTlVMTCkgcmV0dXJuKC0xKTsKKworICAgIGNwID0g bWFsbG9jKChpbnQpc3RybGVuKHNhdmJ1ZikrMSk7CS8qIDE6IFNhdmUgYnVmZmVyICovCisgICAg aWYgKGNwKSBzdHJjcHkoY3Asc2F2YnVmKTsKKyAgICBjbXBbY21kZGVwXS5iWzFdID0gY3A7Cisg ICAgaWYgKGNwID09IE5VTEwpIHJldHVybigtMSk7CisKKyAgICBjbXBbY21kZGVwXS5iWzJdID0g TlVMTDsKKworICAgIGNwID0gbWFsbG9jKChpbnQpc3RybGVuKGF0bWJ1ZikrMSk7CS8qIDM6IEF0 b20gYnVmZmVyICovCisgICAgaWYgKGNwKSBzdHJjcHkoY3AsYXRtYnVmKTsKKyAgICBjbXBbY21k ZGVwXS5iWzNdID0gY3A7CisgICAgaWYgKGNwID09IE5VTEwpIHJldHVybigtMSk7CisKKyAgICBj cCA9IG1hbGxvYygoaW50KXN0cmxlbihhdHhidWYpKzEpOwkvKiA0OiBFeHBhbnNpb24gYnVmZmVy ICovCisgICAgaWYgKGNwKSBzdHJjcHkoY3AsYXR4YnVmKTsKKyAgICBjbXBbY21kZGVwXS5iWzRd ID0gY3A7CisgICAgaWYgKGNwID09IE5VTEwpIHJldHVybigtMSk7CisKKyAgICBjcCA9IG1hbGxv YygoaW50KXN0cmxlbihhdHlidWYpKzEpOwkvKiA1OiBBdG9tIGJ1ZmZlciBjb3B5ICovCisgICAg aWYgKGNwKSBzdHJjcHkoY3AsYXR5YnVmKTsKKyAgICBjbXBbY21kZGVwXS5iWzVdID0gY3A7Cisg ICAgaWYgKGNwID09IE5VTEwpIHJldHVybigtMSk7CisKKyAgICBjcCA9IG1hbGxvYygoaW50KXN0 cmxlbihmaWxidWYpKzEpOwkvKiA2OiBGaWxlIG5hbWUgYnVmZmVyICovCisgICAgaWYgKGNwKSBz dHJjcHkoY3AsZmlsYnVmKTsKKyAgICBjbXBbY21kZGVwXS5iWzZdID0gY3A7CisgICAgaWYgKGNw ID09IE5VTEwpIHJldHVybigtMSk7CisjZWxzZQorICAgIGNwID0gbWFsbG9jKChpbnQpc3RybGVu KGNtZGJ1ZikrMSk7CS8qIDA6IENvbW1hbmQgYnVmZmVyICovCisgICAgaWYgKGNwKSBzdHJjcHko Y3AsY21kYnVmKTsKKyAgICBjbXBfYltjbWRkZXBdWzBdID0gY3A7CisgICAgaWYgKGNwID09IE5V TEwpIHJldHVybigtMSk7CisKKyAgICBjcCA9IG1hbGxvYygoaW50KXN0cmxlbihzYXZidWYpKzEp OwkvKiAxOiBTYXZlIGJ1ZmZlciAqLworICAgIGlmIChjcCkgc3RyY3B5KGNwLHNhdmJ1Zik7Cisg ICAgY21wX2JbY21kZGVwXVsxXSA9IGNwOworICAgIGlmIChjcCA9PSBOVUxMKSByZXR1cm4oLTEp OworCisgICAgY21wX2JbY21kZGVwXVsyXSA9IE5VTEw7CisKKyAgICBjcCA9IG1hbGxvYygoaW50 KXN0cmxlbihhdG1idWYpKzEpOwkvKiAzOiBBdG9tIGJ1ZmZlciAqLworICAgIGlmIChjcCkgc3Ry Y3B5KGNwLGF0bWJ1Zik7CisgICAgY21wX2JbY21kZGVwXVszXSA9IGNwOworICAgIGlmIChjcCA9 PSBOVUxMKSByZXR1cm4oLTEpOworCisgICAgY3AgPSBtYWxsb2MoKGludClzdHJsZW4oYXR4YnVm KSsxKTsJLyogNDogRXhwYW5zaW9uIGJ1ZmZlciAqLworICAgIGlmIChjcCkgc3RyY3B5KGNwLGF0 eGJ1Zik7CisgICAgY21wX2JbY21kZGVwXVs0XSA9IGNwOworICAgIGlmIChjcCA9PSBOVUxMKSBy ZXR1cm4oLTEpOworCisgICAgY3AgPSBtYWxsb2MoKGludClzdHJsZW4oYXR5YnVmKSsxKTsJLyog NTogQXRvbSBidWZmZXIgY29weSAqLworICAgIGlmIChjcCkgc3RyY3B5KGNwLGF0eWJ1Zik7Cisg ICAgY21wX2JbY21kZGVwXVs1XSA9IGNwOworICAgIGlmIChjcCA9PSBOVUxMKSByZXR1cm4oLTEp OworCisgICAgY3AgPSBtYWxsb2MoKGludClzdHJsZW4oZmlsYnVmKSsxKTsJLyogNjogRmlsZSBu YW1lIGJ1ZmZlciAqLworICAgIGlmIChjcCkgc3RyY3B5KGNwLGZpbGJ1Zik7CisgICAgY21wX2Jb Y21kZGVwXVs2XSA9IGNwOworICAgIGlmIChjcCA9PSBOVUxMKSByZXR1cm4oLTEpOworI2VuZGlm IC8qIERDTURCVUYgKi8KKworICAgIGNtaW5pKGRweCk7CQkJCS8qIEluaXRpemUgdGhlIGNvbW1h bmQgcGFyc2VyICovCisgICAgcmV0dXJuKDApOworfQorCitpbnQKK2NtcG9wKCkgewkJCQkvKiBS ZXN0b3JlIHRoZSBjb21tYW5kIGVudmlyb25tZW50ICovCisgICAgaWYgKGNtZGRlcCA8IDApIHsK KwlkZWJ1ZyhGMTAwLCImY21wb3AgY2FsbGVkIGZyb20gdG9wIGxldmVsIiwiIiwwKTsKKwlyZXR1 cm4oLTEpOwkJCS8qIERvbid0IHBvcCB0b28gbXVjaCEgKi8KKyAgICB9CisjaWZkZWYgRENNREJV RgorICAgIGNtZmxncyA9IGNtcFtjbWRkZXBdLmlbMF07CQkvKiBGaXJzdCBkbyB0aGUgZ2xvYmFs IGludHMgKi8KKyAgICBjbWZzYXYgPSBjbXBbY21kZGVwXS5pWzFdOworICAgIGF0eG4gPSBjbXBb Y21kZGVwXS5pWzJdOworICAgIHVuZ3cgPSBjbXBbY21kZGVwXS5pWzNdOworCisgICAgYnAgPSBj bXBbY21kZGVwXS5jWzBdOwkJLyogVGhlbiB0aGUgZ2xvYmFsIHBvaW50ZXJzICovCisgICAgcHAg PSBjbXBbY21kZGVwXS5jWzFdOworICAgIG5wID0gY21wW2NtZGRlcF0uY1syXTsKKyNlbHNlCisg ICAgY21mbGdzID0gY21wX2lbY21kZGVwXVswXTsJCS8qIEZpcnN0IGRvIHRoZSBnbG9iYWwgaW50 cyAqLworICAgIGNtZnNhdiA9IGNtcF9pW2NtZGRlcF1bMV07CisgICAgYXR4biA9IGNtcF9pW2Nt ZGRlcF1bMl07CisgICAgdW5ndyA9IGNtcF9pW2NtZGRlcF1bM107CisKKyAgICBicCA9IGNtcF9j W2NtZGRlcF1bMF07CQkvKiBUaGVuIHRoZSBnbG9iYWwgcG9pbnRlcnMgKi8KKyAgICBwcCA9IGNt cF9jW2NtZGRlcF1bMV07CisgICAgbnAgPSBjbXBfY1tjbWRkZXBdWzJdOworI2VuZGlmIC8qIERD TURCVUYgKi8KKworICAgIC8qIE5vdyB0aGUgYnVmZmVycyB0aGVtc2VsdmVzLiAqLworICAgIC8q IE5vdGU6IHN0cm5jcHkoKSwgbm90IGNrc3RybmNweSgpIC0tIEhlcmUgd2UgV0FOVCB0aGUgTlVM IHBhZGRpbmcuLi4gKi8KKworI2lmZGVmIERDTURCVUYKKyAgICBpZiAoY21wW2NtZGRlcF0uYlsw XSkgeworCisJc3RybmNweShjbWRidWYsY21wW2NtZGRlcF0uYlswXSxDTURCTCk7IC8qIDA6IENv bW1hbmQgYnVmZmVyICovCisJZnJlZShjbXBbY21kZGVwXS5iWzBdKTsKKwljbXBbY21kZGVwXS5i WzBdID0gTlVMTDsKKyAgICB9CisgICAgaWYgKGNtcFtjbWRkZXBdLmJbMV0pIHsKKwlzdHJuY3B5 KHNhdmJ1ZixjbXBbY21kZGVwXS5iWzFdLENNREJMKTsgLyogMTogU2F2ZSBidWZmZXIgKi8KKwlm cmVlKGNtcFtjbWRkZXBdLmJbMV0pOworCWNtcFtjbWRkZXBdLmJbMV0gPSBOVUxMOworICAgIH0K KyAgICBpZiAoY21wW2NtZGRlcF0uYlszXSkgeworCXN0cm5jcHkoYXRtYnVmLGNtcFtjbWRkZXBd LmJbM10sQVRNQkwpOyAvKiAzOiBBdG9taWMgYnVmZmVyISAqLworCWZyZWUoY21wW2NtZGRlcF0u YlszXSk7CisJY21wW2NtZGRlcF0uYlszXSA9IE5VTEw7CisgICAgfQorICAgIGlmIChjbXBbY21k ZGVwXS5iWzRdKSB7CisJc3RybmNweShhdHhidWYsY21wW2NtZGRlcF0uYls0XSxBVE1CTCk7IC8q IDQ6IGVYcGFuc2lvbiBidWZmZXIgKi8KKwlmcmVlKGNtcFtjbWRkZXBdLmJbNF0pOworCWNtcFtj bWRkZXBdLmJbNF0gPSBOVUxMOworICAgIH0KKyAgICBpZiAoY21wW2NtZGRlcF0uYls1XSkgewor CXN0cm5jcHkoYXR5YnVmLGNtcFtjbWRkZXBdLmJbNV0sQVRNQkwpOyAvKiA1OiBBdG9tIGJ1ZmZl ciBjb3BZICovCisJZnJlZShjbXBbY21kZGVwXS5iWzVdKTsKKwljbXBbY21kZGVwXS5iWzVdID0g TlVMTDsKKyAgICB9CisgICAgaWYgKGNtcFtjbWRkZXBdLmJbNl0pIHsKKwlzdHJuY3B5KGZpbGJ1 ZixjbXBbY21kZGVwXS5iWzZdLEFUTUJMKTsgLyogNjogRmlsZW5hbWUgYnVmZmVyICovCisJZnJl ZShjbXBbY21kZGVwXS5iWzZdKTsKKwljbXBbY21kZGVwXS5iWzZdID0gTlVMTDsKKyAgICB9Cisj ZWxzZQorICAgIGlmIChjbXBfYltjbWRkZXBdWzBdKSB7CisJc3RybmNweShjbWRidWYsY21wX2Jb Y21kZGVwXVswXSxDTURCTCk7IC8qIDA6IENvbW1hbmQgYnVmZmVyICovCisJZnJlZShjbXBfYltj bWRkZXBdWzBdKTsKKwljbXBfYltjbWRkZXBdWzBdID0gTlVMTDsKKyAgICB9CisgICAgaWYgKGNt cF9iW2NtZGRlcF1bMV0pIHsKKwlzdHJuY3B5KHNhdmJ1ZixjbXBfYltjbWRkZXBdWzFdLENNREJM KTsgLyogMTogU2F2ZSBidWZmZXIgKi8KKwlmcmVlKGNtcF9iW2NtZGRlcF1bMV0pOworCWNtcF9i W2NtZGRlcF1bMV0gPSBOVUxMOworICAgIH0KKyAgICBpZiAoY21wX2JbY21kZGVwXVszXSkgewor CXN0cm5jcHkoYXRtYnVmLGNtcF9iW2NtZGRlcF1bM10sQVRNQkwpOyAvKiAzOiBBdG9taWMgYnVm ZmVyISAqLworCWZyZWUoY21wX2JbY21kZGVwXVszXSk7CisJY21wX2JbY21kZGVwXVszXSA9IE5V TEw7CisgICAgfQorICAgIGlmIChjbXBfYltjbWRkZXBdWzRdKSB7CisJc3RybmNweShhdHhidWYs Y21wX2JbY21kZGVwXVs0XSxBVE1CTCk7IC8qIDQ6IGVYcGFuc2lvbiBidWZmZXIgKi8KKwlmcmVl KGNtcF9iW2NtZGRlcF1bNF0pOworCWNtcF9iW2NtZGRlcF1bNF0gPSBOVUxMOworICAgIH0KKyAg ICBpZiAoY21wX2JbY21kZGVwXVs1XSkgeworCXN0cm5jcHkoYXR5YnVmLGNtcF9iW2NtZGRlcF1b NV0sQVRNQkwpOyAvKiA1OiBBdG9tIGJ1ZmZlciBjb3BZICovCisJZnJlZShjbXBfYltjbWRkZXBd WzVdKTsKKwljbXBfYltjbWRkZXBdWzVdID0gTlVMTDsKKyAgICB9CisgICAgaWYgKGNtcF9iW2Nt ZGRlcF1bNl0pIHsKKwlzdHJuY3B5KGZpbGJ1ZixjbXBfYltjbWRkZXBdWzZdLEFUTUJMKTsgLyog NjogRmlsZW5hbWUgYnVmZmVyICovCisJZnJlZShjbXBfYltjbWRkZXBdWzZdKTsKKwljbXBfYltj bWRkZXBdWzZdID0gTlVMTDsKKyAgICB9CisjZW5kaWYgLyogRENNREJVRiAqLworCisgICAgY21k ZGVwLS07CQkJCS8qIFJpc2UsIHJpc2UgKi8KKyAgICBkZWJ1ZyhGMTAxLCImY21wb3AgdG8gZGVw dGgiLCIiLGNtZGRlcCk7CisgICAgcmV0dXJuKGNtZGRlcCk7Cit9CisjZW5kaWYgLyogTk9TUEwg Ki8KKworI2lmZGVmIENPTU1FTlQKK1ZPSUQJCQkJCS8qIE5vdCB1c2VkICovCitzdHJpcHEocykg Y2hhciAqczsgeyAgICAgICAgICAgICAgICAgICAgLyogRnVuY3Rpb24gdG8gc3RyaXAgJ1wnIHF1 b3RlcyAqLworICAgIGNoYXIgKnQ7CisgICAgd2hpbGUgKCpzKSB7CisgICAgICAgIGlmICgqcyA9 PSBDTURRKSB7CisgICAgICAgICAgICBmb3IgKHQgPSBzOyAqdCAhPSAnXDAnOyB0KyspICp0ID0g Kih0KzEpOworICAgICAgICB9CisgICAgICAgIHMrKzsKKyAgICB9Cit9CisjZW5kaWYgLyogQ09N TUVOVCAqLworCisvKiBDb252ZXJ0IHRhYnMgdG8gc3BhY2VzLCBvbmUgZm9yIG9uZSAqLworVk9J RAordW50YWIocykgY2hhciAqczsgeworICAgIHdoaWxlICgqcykgeworCWlmICgqcyA9PSBIVCkg KnMgPSBTUDsKKwlzKys7CisgICAgfQorfQorCisvKiAgQyBNIE4gVSBNICAtLSAgUGFyc2UgYSBu dW1iZXIgaW4gdGhlIGluZGljYXRlZCByYWRpeCAgKi8KKworLyoKKyBUaGUgcmFkaXggaXMgc3Bl Y2lmaWVkIGluIHRoZSBhcmcgbGlzdC4KKyBQYXJzZXMgdW5xdW90ZWQgbnVtZXJpYyBzdHJpbmdz IGluIHRoZSBnaXZlbiByYWRpeC4KKyBQYXJzZXMgYmFja3NsYXNoLXF1b3RlZCBudW1iZXJzIGlu IHRoZSByYWRpeCBpbmRpY2F0ZWQgYnkgdGhlIHF1b3RlOgorICAgXG5ubiA9IFxkbm5uID0gZGVj aW1hbCwgXG9ubm4gPSBvY3RhbCwgXHhubiA9IEhleGFkZWNpbWFsLgorIElmIHRoZXNlIGZhaWws IHRoZW4gaWYgYSBwcmVwcm9jZXNzaW5nIGZ1bmN0aW9uIGlzIHN1cHBsaWVkLCB0aGF0IGlzIGFw cGxpZWQKKyBhbmQgdGhlbiBhIHNlY29uZCBhdHRlbXB0IGlzIG1hZGUgdG8gcGFyc2UgYW4gdW5x dW90ZWQgZGVjaW1hbCBzdHJpbmcuCisgQW5kIGlmIHRoYXQgZmFpbHMsIHRoZSBwcmVwcm9jZXNz ZWQgc3RyaW5nIGlzIHBhc3NlZCB0byBhbiBhcml0aG1ldGljCisgZXhwcmVzc2lvbiBldmFsdWF0 b3IuCisKKyBSZXR1cm5zOgorICAgLTMgaWYgbm8gaW5wdXQgcHJlc2VudCB3aGVuIHJlcXVpcmVk LAorICAgLTIgaWYgdXNlciB0eXBlZCBhbiBpbGxlZ2FsIG51bWJlciwKKyAgIC0xIGlmIHJlcGFy c2UgbmVlZGVkLAorICAgIDAgb3RoZXJ3aXNlLCB3aXRoIGFyZ3VtZW50IG4gc2V0IHRvIHRoZSBu dW1iZXIgdGhhdCB3YXMgcGFyc2VkCisqLworLyogVGhpcyBpcyB0aGUgdHJhZGl0aW9uYWwgY21u dW0oKSB0aGF0IGdldHMgYW4gaW50ICovCitpbnQKK2NtbnVtKHhobHAseGRlZixyYWRpeCxuLGYp IGNoYXIgKnhobHAsICp4ZGVmOyBpbnQgcmFkaXgsICpuOyB4eF9zdHJwIGY7IHsKKyAgICBDS19P RkZfVCB6ID0gKENLX09GRl9UKTAsIGNoZWNrOworICAgIGludCB4OworICAgIHggPSBjbW51bXco eGhscCx4ZGVmLHJhZGl4LCZ6LGYpOworICAgICpuID0gejsKKyAgICBjaGVjayA9ICpuOworICAg IGlmIChjaGVjayAhPSB6KSB7CisJcHJpbnRmKCI/TWFnbml0dWRlIG9mIHJlc3VsdCB0b28gbGFy Z2UgZm9yIGludGVnZXIgLSAlc1xuIixja2ZzdG9hKHopKTsKKwlyZXR1cm4oLTkpOworICAgIH0K KyAgICByZXR1cm4oeCk7Cit9CisKKy8qCisgIFRoaXMgaXMgdGhlIG5ldyBjbW51bSgpIHRoYXQg Z2V0cyBhICJ3aWRlIiByZXN1bHQsIHdoYXRldmVyIENLX09GRl9UCisgIGlzIGRlZmluZWQgdG8g YmUsIG5vcm1hbGx5IDMyIG9yIDY0IGJpdHMsIGRlcGVuZGluZyBvbiB0aGUgcGxhdGZvcm0uCisg IGZkYywgMjQgRGVjIDIwMDUuCisqLworaW50CitjbW51bXcoeGhscCx4ZGVmLHJhZGl4LG4sZikK KyAgICBjaGFyICp4aGxwLCAqeGRlZjsgaW50IHJhZGl4OyBDS19PRkZfVCAqbjsgeHhfc3RycCBm OyB7CisgICAgaW50IHg7IGNoYXIgKnMsICp6cCwgKnpxOworI2lmZGVmIENPTU1FTlQKKyAgICBj aGFyIGxicmFjZSwgcmJyYWNlOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKworICAgIGlmICgheGhs cCkgeGhscCA9ICIiOworICAgIGlmICgheGRlZikgeGRlZiA9ICIiOworCisjaWZkZWYgQ09NTUVO VAorICAgIGlmIChjbWZsZGZsZ3MgJiAxKSB7CisJbGJyYWNlID0gJygnOworCXJicmFjZSA9ICcp JzsKKyAgICB9IGVsc2UgeworCWxicmFjZSA9ICd7JzsKKwlyYnJhY2UgPSAnfSc7CisgICAgfQor I2VuZGlmIC8qIENPTU1FTlQgKi8KKworICAgIGlmIChyYWRpeCAhPSAxMCAmJiByYWRpeCAhPSA4 KSB7CS8qIEp1c3QgZG8gYmFzZXMgOCBhbmQgMTAgKi8KKyAgICAgICAgcHJpbnRmKCJjbW51bTog aWxsZWdhbCByYWRpeCAtICVkXG4iLHJhZGl4KTsKKyAgICAgICAgcmV0dXJuKC0yKTsKKyAgICB9 IC8qIEVhc3kgdG8gYWRkIG90aGVycyBidXQgdGhlcmUgaGFzIG5ldmVyIGJlZW4gYSBuZWVkIGZv ciBpdC4gKi8KKyAgICB4ID0gY21mbGQoeGhscCx4ZGVmLCZzLCh4eF9zdHJwKTApOworICAgIGRl YnVnKEYxMDEsImNtbnVtOiBjbWZsZCIsIiIseCk7CisgICAgaWYgKHggPCAwKSByZXR1cm4oeCk7 CQkvKiBQYXJzZSBhIGZpZWxkICovCisgICAgenAgPSBhdG1idWY7CisvKgorICBFZGl0IDE5MiAt IEFsbG93IGFueSBudW1iZXIgZmllbGQgdG8gYmUgYnJhY2VkLiAgVGhpcyBsZXRzIHVzIGluY2x1 ZGUKKyAgc3BhY2VzIGluIGV4cHJlc3Npb25zLCBidXQgcGVyaGFwcyBtb3JlIGltcG9ydGFudCBs ZXRzIHVzIGhhdmUgdXNlci1kZWZpbmVkCisgIGZ1bmN0aW9ucyBpbiBudW1lcmljIGZpZWxkcy4K KyovCisgICAgenAgPSBicnN0cmlwKHpwKTsJCQkvKiBTdHJpcCBicmFjZXMgKi8KKyAgICBpZiAo Y21mbGRmbGdzICYgMSAmJiAqenAgPT0gJygnKSB7CS8qIFBhcmVucyB0b28uLiAqLworCXggPSAo aW50KSBzdHJsZW4oYXRtYnVmKTsKKwlpZiAoeCA+IDApIHsKKwkgICAgaWYgKCooYXRtYnVmK3gt MSkgPT0gJyknKSB7CisJCSooYXRtYnVmK3gtMSkgPSBOVUw7CisJCXpwKys7CisJICAgIH0KKwl9 CisgICAgfQorICAgIGlmIChjaGtudW0oenApKSB7CQkJLyogQ2hlY2sgZm9yIG51bWJlciAqLwor CWlmIChyYWRpeCA9PSA4KSB7CQkvKiBJZiBpdCdzIHN1cHBvc2VkIHRvIGJlIG9jdGFsICovCisJ ICAgIHpwID0gY2tyYWRpeCh6cCw4LDEwKTsJLyogY29udmVydCB0byBkZWNpbWFsICovCisJICAg IGlmICghenApIHJldHVybigtMik7CisJICAgIGlmICghc3RyY21wKHpwLCItMSIpKSByZXR1cm4o LTIpOworCX0KKwllcnJubyA9IDA7CQkJLyogR290IG9uZSwgd2UncmUgZG9uZS4gKi8KKyAgICAg ICAgKm4gPSBja2F0b2ZzKHpwKTsKKwlpZiAoZXJybm8pIHsKKwkgICAgcGVycm9yKHpwKTsKKwkg ICAgcmV0dXJuKC05KTsKKwl9CisJZGVidWcoRjEwMSwiY21udW0gMXN0IGNoa251bSBvayIsIiIs Km4pOworICAgICAgICByZXR1cm4oMCk7CisgICAgfSBlbHNlIGlmICgoeCA9IHh4ZXNjKCZ6cCkp ID4gLTEpIHsJLyogQ2hlY2sgZm9yIGJhY2tzbGFzaCBlc2NhcGUgKi8KKworI2lmbmRlZiBPUzIK KwkqbiA9IHg7CisjZWxzZQorCSpuID0gd2lkZXJlc3VsdDsKKyNlbmRpZiAvKiBPUzIgKi8KKwor CWRlYnVnKEYxMDEsImNtbnVtIHh4ZXNjIG9rIiwiIiwqbik7CisJcmV0dXJuKCp6cCA/IC0yIDog MCk7CisgICAgfSBlbHNlIGlmIChmKSB7CQkJLyogSWYgY29udmVyc2lvbiBmdW5jdGlvbiBnaXZl biAqLworCXpxID0gYXR4YnVmOwkJCS8qIFRyeSB0aGF0ICovCisJYXR4biA9IENNREJMOworCWlm ICgoKmYpKHpwLCZ6cSwmYXR4bikgPCAwKQkvKiBDb252ZXJ0ICovCisJICByZXR1cm4oLTIpOwor CXpwID0gYXR4YnVmOworICAgIH0KKyAgICBkZWJ1ZyhGMTEwLCJjbW51bSB6cCAxIix6cCwwKTsK KyAgICBpZiAoISp6cCkgenAgPSB4ZGVmOwkJLyogUmVzdWx0IGVtcHR5LCBzdWJzdGl0dXRlIGRl ZmF1bHQgKi8KKyAgICBkZWJ1ZyhGMTEwLCJjbW51bSB6cCAyIix6cCwwKTsKKyAgICBpZiAoY2hr bnVtKHpwKSkgewkJCS8qIENoZWNrIGFnYWluIGZvciBkZWNpbWFsIG51bWJlciAqLworCWlmIChy YWRpeCA9PSA4KSB7CQkvKiBJZiBpdCdzIHN1cHBvc2VkIHRvIGJlIG9jdGFsICovCisJICAgIHpw ID0gY2tyYWRpeCh6cCw4LDEwKTsJLyogY29udmVydCB0byBkZWNpbWFsICovCisJICAgIGlmICgh enApIHJldHVybigtMik7CisJICAgIGlmICghc3RyY21wKHpwLCItMSIpKSByZXR1cm4oLTIpOwor CX0KKwllcnJubyA9IDA7CisgICAgICAgICpuID0gY2thdG9mcyh6cCk7CisJaWYgKGVycm5vKSB7 CisJICAgIHBlcnJvcih6cCk7CisJICAgIHJldHVybigtOSk7CisJfQorCWRlYnVnKEYxMDEsImNt bnVtIDJuZCBjaGtudW0gb2siLCIiLCpuKTsKKyAgICAgICAgcmV0dXJuKDApOworI2lmbmRlZiBO T1NQTAorICAgIH0gIGVsc2UgaWYgKCh4ID0geHhlc2MoJnpwKSkgPiAtMSkgeyAvKiBDaGVjayBm b3IgYmFja3NsYXNoIGVzY2FwZSAqLworI2lmbmRlZiBPUzIKKwkqbiA9IHg7CisjZWxzZQorCSpu ID0gd2lkZXJlc3VsdDsKKyNlbmRpZiAvKiBPUzIgKi8KKwlkZWJ1ZyhGMTAxLCJjbW51bSB4eGVz YyAyIG9rIiwiIiwqbik7CisJcmV0dXJuKCp6cCA/IC0yIDogMCk7CisgICAgfSBlbHNlIGlmIChm KSB7CQkJLyogTm90IG51bWVyaWMsIG1heWJlIGFuIGV4cHJlc3Npb24gKi8KKwljaGFyICogcDsK KwlwID0gZXZhbGEoenApOworCWlmIChjaGtudW0ocCkpIHsKKwkgICAgaWYgKHJhZGl4ID09IDgp IHsJCS8qIElmIGl0J3Mgc3VwcG9zZWQgdG8gYmUgb2N0YWwgKi8KKwkJenAgPSBja3JhZGl4KHpw LDgsMTApOwkvKiBjb252ZXJ0IHRvIGRlY2ltYWwgKi8KKwkJaWYgKCF6cCkgcmV0dXJuKC0yKTsK KwkJaWYgKCFzdHJjbXAoenAsIi0xIikpIHJldHVybigtMik7CisJICAgIH0KKwkgICAgZXJybm8g PSAwOworCSAgICAqbiA9IGNrYXRvZnMocCk7CisJICAgIGlmIChlcnJubykgeworCQlwZXJyb3Io cCk7CisJCXJldHVybigtOSk7CisJICAgIH0KKwkgICAgZGVidWcoRjEwMSwiY21udW0gZXhwIGV2 YWwgb2siLCIiLCpuKTsKKwkgICAgcmV0dXJuKDApOworCX0gZWxzZSByZXR1cm4oLTIpOworI2Vu ZGlmIC8qIE5PU1BMICovCisgICAgfSBlbHNlIHsJCQkJLyogTm90IG51bWVyaWMgKi8KKwlyZXR1 cm4oLTIpOworICAgIH0KK30KKworI2lmZGVmIENLQ0hBTk5FTElPCitleHRlcm4gaW50IHpfZXJy b3I7CisjZW5kaWYgLyogQ0tDSEFOTkVMSU8gKi8KKworLyogIEMgTSBPIEYgSSAgLS0gIFBhcnNl IHRoZSBuYW1lIG9mIGFuIG91dHB1dCBmaWxlICAqLworCisvKgorIERlcGVuZHMgb24gdGhlIGV4 dGVybmFsIGZ1bmN0aW9uIHpjaGtvKCk7IGlmIHpjaGtvKCkgbm90IGF2YWlsYWJsZSwgdXNlCisg Y21mbGQoKSB0byBwYXJzZSBvdXRwdXQgZmlsZSBuYW1lcy4KKworIFJldHVybnM6CisgICAtOSBs aWtlIC0yLCBleGNlcHQgbWVzc2FnZSBhbHJlYWR5IHByaW50ZWQsCisgICAtMyBpZiBubyBpbnB1 dCBwcmVzZW50IHdoZW4gcmVxdWlyZWQsCisgICAtMiBpZiBwZXJtaXNzaW9uIHdvdWxkIGJlIGRl bmllZCB0byBjcmVhdGUgdGhlIGZpbGUsCisgICAtMSBpZiByZXBhcnNlIG5lZWRlZCwKKyAgICAw IG9yIDEgaWYgZmlsZSBjYW4gYmUgY3JlYXRlZCwgd2l0aCB4cCBwb2ludGluZyB0byBuYW1lLgor ICAgIDIgaWYgZ2l2ZW4gdGhlIG5hbWUgb2YgYW4gZXhpc3RpbmcgZGlyZWN0b3J5LgorKi8KK2lu dAorY21vZmkoeGhscCx4ZGVmLHhwLGYpIGNoYXIgKnhobHAsICp4ZGVmLCAqKnhwOyB4eF9zdHJw IGY7IHsKKyAgICBpbnQgeDsgY2hhciAqcywgKnpxOworI2lmZGVmIERPQ0hLVkFSCisgICAgaW50 IHRyaWVzOworI2VuZGlmIC8qIERPQ0hLVkFSICovCisjaWZkZWYgRFRJTERFCisgICAgY2hhciAq ZGlycDsKKyNlbmRpZiAvKiBEVElMREUgKi8KKworICAgIGNtZmxkZmxncyA9IDA7CisKKyAgICBp ZiAoIXhobHApIHhobHAgPSAiIjsKKyAgICBpZiAoIXhkZWYpIHhkZWYgPSAiIjsKKworICAgIGlm ICgqeGhscCA9PSBOVUwpIHhobHAgPSAiT3V0cHV0IGZpbGUiOworICAgICp4cCA9ICIiOworCisg ICAgZGVidWcoRjExMCwiY21vZmkgeGRlZiIseGRlZiwwKTsKKyAgICB4ID0gY21mbGQoeGhscCx4 ZGVmLCZzLCh4eF9zdHJwKTApOworICAgIGRlYnVnKEYxMTEsImNtb2ZpIGNtZmxkIHJldHVybnMi LHMseCk7CisgICAgaWYgKHggPCAwKQorICAgICAgcmV0dXJuKHgpOworCisgICAgcyA9IGJyc3Ry aXAocyk7CQkJLyogU3RyaXAgZW5jbG9zaW5nIGJyYWNlcyAqLworICAgIGRlYnVnKEYxMTAsImNt b2ZpIDEuNSIscywwKTsKKworI2lmZGVmIERPQ0hLVkFSCisgICAgdHJpZXMgPSAwOworICAgIHsK KwljaGFyICpwID0gczsKKyAgICAvKgorICAgICAgVGhpcyBpcyByZWFsbHkgdWdseS4gIElmIHdl IHNraXAgY29udmVyc2lvbiB0aGUgZmlyc3QgdGltZSB0aHJvdWdoLAorICAgICAgdGhlbiB2YXJp YWJsZSBuYW1lcyBsaWtlIFwlYSB3aWxsIGJlIHVzZWQgYXMgZmlsZW5hbWVzIChlLmcuIGNyZWF0 aW5nCisgICAgICBhIGZpbGUgY2FsbGVkICVBIGluIHRoZSByb290IGRpcmVjdG9yeSkuICBJZiB3 ZSBET04nVCBza2lwIGNvbnZlcnNpb24KKyAgICAgIHRoZSBmaXJzdCB0aW1lIHRocm91Z2gsIHRo ZW4gc2luZ2xlIGJhY2tzbGFzaGVzIHVzZWQgYXMgZGlyZWN0b3J5CisgICAgICBzZXBhcmF0b3Jz IGluIGZpbGVuYW1lcyB3aWxsIGJlIG1pc2ludGVycHJldGVkIGFzIHZhcmlhYmxlIGxlYWQtaW5z LgorICAgICAgU28gd2UgcHJlc2NhbiB0byBzZWUgaWYgaXQgaGFzIGFueSB2YXJpYWJsZSByZWZl cmVuY2VzLiAgQnV0IHRoaXMKKyAgICAgIG1vZHVsZSBpcyBub3Qgc3VwcG9zZWQgdG8ga25vdyBh bnl0aGluZyBhYm91dCB2YXJpYWJsZXMsIGZ1bmN0aW9ucywKKyAgICAgIGV0Yywgc28gdGhpcyBj b2RlIGRvZXMgbm90IHJlYWxseSBiZWxvbmcgaGVyZSwgYnV0IHJhdGhlciBpdCBzaG91bGQKKyAg ICAgIGJlIGF0IHRoZSBzYW1lIGxldmVsIGFzIHp6c3RyaW5nKCkuCisgICAgKi8KKy8qCisgIEht bW0sIHRoaXMgbG9va3MgYSBsb3QgbGlrZSBjaGt2YXIoKSBleGNlcHQgaXQgdGhhdCBpbmNsdWRl cyBcbm5uIG51bWJlcgorICBlc2NhcGVzLiAgQnV0IHdoeT8gIFRoaXMgbWFrZXMgY29tbWFuZHMg bGlrZSAibWtkaXIgYzpcMTIzIiBpbXBvc3NpYmxlLgorICBBbmQgaW4gZmFjdCwgIm1rZGlyIGM6 XDEyMyIgY3JlYXRlcyBhIGRpcmVjdG9yeSBjYWxsZWQgImM6eyIuICBXaGF0J3Mgd29yc2UsCisg IHJtZGlyKCksIHdoaWNoICpkb2VzKiBjYWxsIGNoa3ZhcigpLCB3b24ndCBsZXQgdXMgcmVtb3Zl IGl0LiAgU28gbGV0J3MgYXQKKyAgbGVhc3QgdHJ5IG1ha2luZyBjbW9maSgpIHN5bW1ldHJpY2Fs IHdpdGggY21pZmkoKS4uLgorKi8KKyNpZmRlZiBDT01NRU5UCisJY2hhciAqIHE7CisJd2hpbGUg KCAodHJpZXMgPT0gMCkgJiYgKHAgPSBzdHJjaHIocCxDTURRKSkgKSB7CisJICAgIHEgPSAqKHAr MSk7CQkJLyogQ2hhciBhZnRlciBiYWNrc2xhc2ggKi8KKwkgICAgaWYgKCFxKQkJCS8qIE5vbmUs IHF1aXQgKi8KKwkgICAgICBicmVhazsKKwkgICAgaWYgKGlzdXBwZXIocSkpCQkvKiBJZiBsZXR0 ZXIsIGNvbnZlcnQgdG8gbG93ZXJjYXNlICovCisJICAgICAgcSA9IHRvbG93ZXIocSk7CisJICAg IGlmIChpc2RpZ2l0KHEpKSB7CQkvKiBJZiBpdCdzIGEgZGlnaXQsICovCisJCXRyaWVzID0gMTsJ CS8qIGFzc3VtZSBpdCdzIGEgYmFja3NsYXNoIGNvZGUgICovCisJCWJyZWFrOworCSAgICB9CisJ ICAgIHN3aXRjaCAocSkgeworCSAgICAgIGNhc2UgQ01EUToJCS8qIERvdWJsZSBiYWNrc2xhc2gg Ki8KKwkJdHJpZXMgPSAxOwkJLyogc28gY2FsbCB0aGUgY29udmVyc2lvbiBmdW5jdGlvbiAqLwor CQlicmVhazsKKwkgICAgICBjYXNlICclJzoJCQkvKiBWYXJpYWJsZSBvciBhcnJheSByZWZlcmVu Y2UgKi8KKwkgICAgICBjYXNlICcmJzoJCQkvKiBtdXN0IGJlIGZvbGxvd2VkIGJ5IGxldHRlciAq LworCQlpZiAoaXNhbHBoYSgqKHArMikpIHx8ICgqKHArMikgPj0gJzAnICYmICoocCsyKSA8PSAn OScpKQorCQkgIHRyaWVzID0gMTsKKwkJYnJlYWs7CisJICAgICAgY2FzZSAnbSc6IGNhc2UgJ3Yn OiBjYXNlICckJzogLyogXG0oKSwgXHYoKSwgXCQoKSAqLworCQlpZiAoKihwKzIpID09ICcoJykK KwkJICBpZiAoc3RyY2hyKHArMiwnKScpKQorCQkgICAgdHJpZXMgPSAxOworCQlicmVhazsKKwkg ICAgICBjYXNlICdmJzoJCQkvKiBcRm5hbWUoKSAqLworCQlpZiAoc3RyY2hyKHArMiwnKCcpKQor CQkgIGlmIChzdHJjaHIocCsyLCcpJykpCisJCSAgICAgIHRyaWVzID0gMTsKKwkJYnJlYWs7CisJ ICAgICAgY2FzZSAneyc6CQkJLyogXHsuLi59ICovCisJCWlmIChzdHJjaHIocCsyLCd9JykpCisJ CSAgdHJpZXMgPSAxOworCQlicmVhazsKKwkgICAgICBjYXNlICdkJzogY2FzZSAnbyc6CS8qIERl Y2ltYWwgb3IgT2N0YWwgbnVtYmVyICovCisJICAgICAgICBpZiAoaXNkaWdpdCgqKHArMikpKQor CQkgIHRyaWVzID0gMTsKKwkJYnJlYWs7CisJICAgICAgY2FzZSAneCc6CQkJLyogSGV4IG51bWJl ciAqLworCQlpZiAoaXNkaWdpdCgqKHArMikpIHx8CisJCSAgICAoKCoocCsyKSA+PSAnYScgJiYg KihwKzIpIDw9ICdmJykgfHwKKwkJICAgICAoKCoocCsyKSA+PSAnQScgJiYgKihwKzIpIDw9ICdG JykpKSkKKwkJICB0cmllcyA9IDE7CisJICAgICAgZGVmYXVsdDoKKwkJYnJlYWs7CisJICAgIH0K KwkgICAgcCsrOworCX0KKyNlbHNlCisjaWZuZGVmIE5PU1BMCisJaWYgKGYpIHsJCQkvKiBJZiBh IGNvbnZlcnNpb24gZnVuY3Rpb24gaXMgZ2l2ZW4gKi8KKwkgICAgY2hhciAqcyA9IHA7CQkvKiBT ZWUgaWYgdGhlcmUgYXJlIGFueSB2YXJpYWJsZXMgaW4gKi8KKwkgICAgd2hpbGUgKCpzKSB7CQkv KiB0aGUgc3RyaW5nIGFuZCBpZiBzbywgZXhwYW5kIHRoZW0gKi8KKwkJaWYgKGNoa3ZhcihzKSkg eworCQkgICAgdHJpZXMgPSAxOworCQkgICAgYnJlYWs7CisJCX0KKwkJcysrOworCSAgICB9CisJ fQorI2VuZGlmIC8qIE5PU1BMICovCisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgIH0KKyNpZmRl ZiBPUzIKK29fYWdhaW46CisjZW5kaWYgLyogT1MyICovCisgICAgaWYgKHRyaWVzID09IDEpCisj ZW5kaWYgLyogRE9DSEtWQVIgKi8KKyAgICBpZiAoZikgewkJCQkvKiBJZiBhIGNvbnZlcnNpb24g ZnVuY3Rpb24gaXMgZ2l2ZW4gKi8KKwl6cSA9IGF0eGJ1ZjsJCQkvKiBkbyB0aGUgY29udmVyc2lv bi4gKi8KKwlhdHhuID0gQ01EQkw7CisJaWYgKCh4ID0gKCpmKShzLCZ6cSwmYXR4bikpIDwgMCkK KwkgIHJldHVybigtMik7CisJcyA9IGF0eGJ1ZjsKKwlpZiAoISpzKQkJCS8qIFJlc3VsdCBlbXB0 eSwgc3Vic3RpdHV0ZSBkZWZhdWx0ICovCisJICBzID0geGRlZjsKKyAgICB9CisgICAgZGVidWco RjExMSwiY21vZmkgMiIscyx4KTsKKworI2lmZGVmIERUSUxERQorICAgIGRpcnAgPSB0aWxkZV9l eHBhbmQocyk7CQkvKiBFeHBhbmQgdGlsZGUsIGlmIGFueSwgKi8KKyAgICBpZiAoKmRpcnAgIT0g J1wwJykgewkJLyogcmlnaHQgaW4gdGhlIGF0b20gYnVmZmVyLiAqLworCWlmIChzZXRhdG0oZGly cCwxKSA8IDApIHsKKwkgICAgcHJpbnRmKCI/TmFtZSB0b28gbG9uZ1xuIik7CisJICAgIHJldHVy bigtOSk7CisJfQorICAgIH0KKyAgICBzID0gYXRtYnVmOworICAgIGRlYnVnKEYxMTAsImNtb2Zp IDMiLHMsMCk7CisjZW5kaWYgLyogRFRJTERFICovCisKKyAgICBpZiAoaXN3aWxkKHMpKSB7Cisg ICAgICAgIHByaW50ZigiP1dpbGRjYXJkcyBub3QgYWxsb3dlZCAtICVzXG4iLHMpOworICAgICAg ICByZXR1cm4oLTIpOworICAgIH0KKyAgICBkZWJ1ZyhGMTEwLCJjbW9maSA0IixzLDApOworCisj aWZkZWYgQ0tfVE1QRElSCisgICAgLyogaXNkaXIoKSBmdW5jdGlvbiByZXF1aXJlZCBmb3IgdGhp cyEgKi8KKyAgICBpZiAoaXNkaXIocykpIHsKKwlkZWJ1ZyhGMTEwLCJjbW9maSA1OiBpcyBkaXJl Y3RvcnkiLHMsMCk7CisgICAgICAgICp4cCA9IHM7CisJcmV0dXJuKDIpOworICAgIH0KKyNlbmRp ZiAvKiBDS19UTVBESVIgKi8KKworICAgIGlmIChzdHJjbXAocyxDVFROQU0pICYmICh6Y2hrbyhz KSA8IDApKSB7IC8qIE9LIHRvIHdyaXRlIHRvIGNvbnNvbGUgKi8KKyNpZmRlZiBDT01NRU5UCisj aWZkZWYgT1MyCisvKgorICBXZSBkb24ndCB0cnkgYWdhaW4gYmVjYXVzZSB3ZSBhbHJlYWR5IHBy ZXNjYW5uZWQgdGhlIHN0cmluZyB0byBzZWUgaWYKKyAgaWYgaXQgY29udGFpbmVkIGFueXRoaW5n IHRoYXQgY291bGQgYmUgdXNlZCBieSB6enN0cmluZygpLgorKi8KKwlpZiAodHJpZXMrKyA8IDEp CisJICBnb3RvIG9fYWdhaW47CisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogQ09NTUVOVCAq LworLyoKKyAgTm90ZTogdGhlcmUgYXJlIGNlcnRhaW4gY2lyY3Vtc3RhbmNlcyB3aGVyZSB6Y2hr bygpIGNhbiBnaXZlIGEgZmFsc2UKKyAgcG9zaXRpdmUsIHNvIGRvbid0IHJlbHkgb24gaXQgdG8g Y2F0Y2ggZXZlcnkgY29uY2VpdmFibGUgc2l0dWF0aW9uIGluCisgIHdoaWNoIHRoZSBnaXZlbiBv dXRwdXQgZmlsZSBjYW4ndCBiZSBjcmVhdGVkLiAgSW4gb3RoZXIgd29yZHMsIHdlIHByaW50Cisg IGEgbWVzc2FnZSBhbmQgZmFpbCBoZXJlIGlmIHdlIEtOT1cgdGhlIGZpbGUgY2FuJ3QgYmUgY3Jl YXRlZC4gIElmIHdlCisgIHN1Y2NlZWQgYnV0IHRoZSBmaWxlIGNhbid0IGJlIG9wZW5lZCwgdGhl IGNvZGUgdGhhdCB0cmllcyB0byBvcGVuIHRoZSBmaWxlCisgIGhhcyB0byBwcmludCBhIG1lc3Nh Z2UuCisqLworCWRlYnVnKEYxMTAsImNtb2ZpIDY6IGZhaWx1cmUiLHMsMCk7CisjaWZkZWYgQ0tS T09UCisJaWYgKGNrcm9vdGVycikKKwkgIHByaW50ZigiP09mZiBMaW1pdHM6ICVzXG4iLHMpOwor CWVsc2UKKyNlbmRpZiAvKiBDS1JPT1QgKi8KKwkgIHByaW50ZigiP1dyaXRlIHBlcm1pc3Npb24g ZGVuaWVkIC0gJXNcbiIscyk7CisjaWZkZWYgQ0tDSEFOTkVMSU8KKwl6X2Vycm9yID0gRlhfQUND OworI2VuZGlmIC8qIENLQ0hBTk5FTElPICovCisgICAgICAgIHJldHVybigtOSk7CisgICAgfSBl bHNlIHsKKwlkZWJ1ZyhGMTEwLCJjbW9maSA3OiBvayIscywwKTsKKyAgICAgICAgKnhwID0gczsK KyAgICAgICAgcmV0dXJuKHgpOworICAgIH0KK30KKworLyogIEMgTSBJIEYgSSAgLS0gIFBhcnNl IHRoZSBuYW1lIG9mIGFuIGV4aXN0aW5nIGZpbGUgICovCisKKy8qCisgVGhpcyBmdW5jdGlvbiBk ZXBlbmRzIG9uIHRoZSBleHRlcm5hbCBmdW5jdGlvbnM6CisgICB6Y2hraSgpICAtIENoZWNrIGlm IGlucHV0IGZpbGUgZXhpc3RzIGFuZCBpcyByZWFkYWJsZS4KKyAgIHp4cGFuZCgpIC0gRXhwYW5k IGEgd2lsZCBmaWxlIHNwZWNpZmljYXRpb24gaW50byBhIGxpc3QuCisgICB6bmV4dCgpICAtIFJl dHVybiBuZXh0IGZpbGUgbmFtZSBmcm9tIGxpc3QuCisgSWYgdGhlc2UgZnVuY3Rpb25zIGFyZW4n dCBhdmFpbGFibGUsIHRoZW4gdXNlIGNtZmxkKCkgdG8gcGFyc2UgZmlsZW5hbWVzLgorKi8KKy8q CisgUmV0dXJucworICAgLTQgRU9GCisgICAtMyBpZiBubyBpbnB1dCBwcmVzZW50IHdoZW4gcmVx dWlyZWQsCisgICAtMiBpZiBmaWxlIGRvZXMgbm90IGV4aXN0IG9yIGlzIG5vdCByZWFkYWJsZSwK KyAgIC0xIGlmIHJlcGFyc2UgbmVlZGVkLAorICAgIDAgb3IgMSBvdGhlcndpc2UsIHdpdGg6Cisg ICAgICAgIHhwIHBvaW50aW5nIHRvIG5hbWUsCisgICAgICAgIHdpbGQgPSAxIGlmIG5hbWUgY29u dGFpbnMgJyonIG9yICc/JywgMCBvdGhlcndpc2UuCisqLworCisjaWZkZWYgQ09NTUVOVCAvKiBU aGlzIGhvcnJpYmxlIGhhY2sgaGFzIGJlZW4gcmVwbGFjZWQgLSBzZWUgZnVydGhlciBkb3duICov CisvKgorICAgQyBNIEkgTyBGIEkgIC0tICBQYXJzZSBhbiBpbnB1dCBmaWxlIE9SIHRoZSBuYW1l IG9mIGEgbm9uZXhpc3RlbnQgZmlsZS4KKworICAgVXNlIHRoaXMgd2hlbiBhbiBleGlzdGluZyBm aWxlIGlzIHdhbnRlZCAoc28gd2UgZ2V0IGhlbHAsIGNvbXBsZXRpb24sIGV0YyksCisgICBidXQg aWYgYSBmaWxlIG9mIHRoZSBnaXZlbiBuYW1lIGRvZXMgbm90IGV4aXN0LCB0aGUgbmFtZSBvZiBh IG5ldyBmaWxlIGlzCisgICBhY2NlcHRlZC4gIEZvciBleGFtcGxlLCB3aXRoIHRoZSBFRElUIGNv bW1hbmQgKGVkaXQgYW4gZXhpc3RpbmcgZmlsZSwgb3IKKyAgIGNyZWF0ZSBhIG5ldyBmaWxlKS4g IFJldHVybnMgLTkgaWYgZmlsZSBkb2VzIG5vdCBleGlzdC4gIEl0IGlzIHVwIHRvIHRoZQorICAg Y2FsbGVyIHRvIGNoZWNrIGNyZWF0YWJpbGl0eS4KKyovCitzdGF0aWMgaW50IG5vbXNnID0gMDsK K2ludAorY21pb2ZpKHhobHAseGRlZix4cCx3aWxkLGYpIGNoYXIgKnhobHAsICp4ZGVmLCAqKnhw OyBpbnQgKndpbGQ7IHh4X3N0cnAgZjsgeworICAgIGludCBtc2dzYXZlLCB4OworICAgIG1zZ3Nh dmUgPSBub21zZzsKKyAgICBub21zZyA9IDE7CisgICAgeCA9IGNtaWZpMih4aGxwLHhkZWYseHAs d2lsZCwwLE5VTEwsZiwwKTsKKyAgICBub21zZyA9IG1zZ3NhdmU7CisgICAgcmV0dXJuKHgpOwor fQorI2VuZGlmCS8qIENPTU1FTlQgKi8KKworaW50CitjbWlmaSh4aGxwLHhkZWYseHAsd2lsZCxm KSBjaGFyICp4aGxwLCAqeGRlZiwgKip4cDsgaW50ICp3aWxkOyB4eF9zdHJwIGY7IHsKKyAgICBy ZXR1cm4oY21pZmkyKHhobHAseGRlZix4cCx3aWxkLDAsTlVMTCxmLDApKTsKK30KKy8qCisgIGNt aWZpcCgpIGlzIGNhbGxlZCB3aGVuIHdlIHdhbnQgdG8gc3VwcGx5IGEgcGF0aCBvciBwYXRoIGxp c3QgdG8gc2VhcmNoCisgIGluIGNhc2UgdGhlIGZpbGVuYW1lIHRoYXQgdGhlIHVzZXIgZ2l2ZXMg aXMgKGEpIG5vdCBhYnNvbHV0ZSwgYW5kIChiKSBjYW4ndAorICBiZSBmb3VuZCBhcyBnaXZlbi4g IFRoZSBwYXRoIHN0cmluZyBjYW4gYmUgdGhlIG5hbWUgb2YgYSBzaW5nbGUgZGlyZWN0b3J5LAor ICBvciBhIGxpc3Qgb2YgZGlyZWN0b3JpZXMgc2VwYXJhdGVkIGJ5IHRoZSBQQVRIU0VQIGNoYXJh Y3RlciwgZGVmaW5lZCBpbgorICBja3VjbWQuaC4gIExvb2sgaW4gY2t1dXNyLmMgYW5kIGNrdXVz My5jIGZvciBleGFtcGxlcyBvZiB1c2FnZS4KKyovCitpbnQKK2NtaWZpcCh4aGxwLHhkZWYseHAs d2lsZCxkLHBhdGgsZikKKyAgICBjaGFyICp4aGxwLCp4ZGVmLCoqeHA7IGludCAqd2lsZCwgZDsg Y2hhciAqIHBhdGg7IHh4X3N0cnAgZjsgeworICAgIHJldHVybihjbWlmaTIoeGhscCx4ZGVmLHhw LHdpbGQsMCxwYXRoLGYsMCkpOworfQorCisvKiAgQyBNIEQgSSBSICAtLSAgUGFyc2UgYSBkaXJl Y3RvcnkgbmFtZSAgKi8KKworLyoKKyBUaGlzIGZ1bmN0aW9uIGRlcGVuZHMgb24gdGhlIGV4dGVy bmFsIGZ1bmN0aW9uczoKKyAgIGlzZGlyKHMpICAtIENoZWNrIGlmIHN0cmluZyBzIGlzIHRoZSBu YW1lIG9mIGEgZGlyZWN0b3J5CisgICB6Y2hraShzKSAgLSBDaGVjayBpZiBpbnB1dCBmaWxlIHMg ZXhpc3RzIGFuZCB3aGF0IHR5cGUgaXQgaXMuCisgSWYgdGhlc2UgZnVuY3Rpb25zIGFyZW4ndCBh dmFpbGFibGUsIHRoZW4gdXNlIGNtZmxkKCkgdG8gcGFyc2UgZGlyIG5hbWVzLgorCisgUmV0dXJu cworICAgLTkgRm9yIGFsbCBzb3J0cyBvZiByZWFzb25zLCBhZnRlciBwcmludGluZyBhcHByb3By aWF0ZSBlcnJvciBtZXNzYWdlLgorICAgLTQgRU9GCisgICAtMyBpZiBubyBpbnB1dCBwcmVzZW50 IHdoZW4gcmVxdWlyZWQsCisgICAtMiBpZiBvdXQgb2Ygc3BhY2Ugb3Igb3RoZXIgaW50ZXJuYWwg ZXJyb3IsCisgICAtMSBpZiByZXBhcnNlIG5lZWRlZCwKKyAgICAwIG9yIDEsIHdpdGggeHAgcG9p bnRpbmcgdG8gbmFtZSwgaWYgZGlyZWN0b3J5IHNwZWNpZmllZCwKKyovCitpbnQKK2NtZGlyKHho bHAseGRlZix4cCxmKSBjaGFyICp4aGxwLCAqeGRlZiwgKip4cDsgeHhfc3RycCBmOyB7CisgICAg aW50IHdpbGQ7CisgICAgcmV0dXJuKGNtaWZpMih4aGxwLHhkZWYseHAsJndpbGQsMCxOVUxMLGYs MSkpOworfQorCisvKiBMaWtlIENNRElSIGJ1dCBpbmNsdWRlcyBQQVRIIHNlYXJjaCAqLworCitp bnQKK2NtZGlycCh4aGxwLHhkZWYseHAscGF0aCxmKSBjaGFyICp4aGxwLCAqeGRlZiwgKip4cDsg Y2hhciAqIHBhdGg7IHh4X3N0cnAgZjsgeworICAgIGludCB3aWxkOworICAgIHJldHVybihjbWlm aTIoeGhscCx4ZGVmLHhwLCZ3aWxkLDAscGF0aCxmLDEpKTsKK30KKworLyoKKyAgY21pZmkyKCkg aXMgdGhlIGJhc2UgZmlsZW5hbWUgcGFyc2VyIGNhbGxlZCBieSBjbWlmaSwgY21pZmlwLCBjbWRp ciwgZXRjLgorICBVc2UgaXQgZGlyZWN0bHkgd2hlbiB5b3UgYWxzbyB3YW50IHRvIHBhcnNlIGEg ZGlyZWN0b3J5IG9yIGRldmljZQorICBuYW1lIGFzIGFuIGlucHV0IGZpbGUsIGFzIGluIHRoZSBE SVJFQ1RPUlkgY29tbWFuZC4gIENhbGwgd2l0aDoKKyAgICB4aGxwICAtLSBoZWxwIG1lc3NhZ2Ug b24gPworICAgIHhkZWYgIC0tIGRlZmF1bHQgcmVzcG9uc2UKKyAgICB4cCAgICAtLSBwb2ludGVy IHRvIHJlc3VsdCAoaW4gb3VyIHNwYWNlLCBtdXN0IGJlIGNvcGllZCBmcm9tIGhlcmUpCisgICAg d2lsZCAgLS0gZmxhZyBzZXQgdXBvbiByZXR1cm4gdG8gaW5kaWNhdGUgaWYgZmlsZXNwZWMgd2Fz IHdpbGQKKyAgICBkICAgICAtLSAwIHRvIHBhcnNlIGZpbGVzLCAxIHRvIHBhcnNlIGZpbGVzIG9y IGRpcmVjdG9yaWVzCisgICAgICAgICAgICAgQWRkIDIgdG8gaW5oaWJpdCBmb2xsb3dpbmcgb2Yg c3ltbGlua3MuCisgICAgcGF0aCAgLS0gc2VhcmNoIHBhdGggZm9yIGZpbGVzCisgICAgZiAgICAg LS0gcG9pbnRlciB0byBzdHJpbmcgcHJvY2Vzc2luZyBmdW5jdGlvbiAoZS5nLiB0byBldmFsdWF0 ZSB2YXJpYWJsZXMpCisgICAgZGlyZmxnIC0tIDEgdG8gcGFyc2UgKm9ubHkqIGRpcmVjdG9yaWVz LCAwIG90aGVyd2lzZQorKi8KK2ludAorY21pZmkyKHhobHAseGRlZix4cCx3aWxkLGQscGF0aCxm LGRpcmZsZykKKyAgICBjaGFyICp4aGxwLCp4ZGVmLCoqeHA7IGludCAqd2lsZCwgZDsgY2hhciAq IHBhdGg7IHh4X3N0cnAgZjsgaW50IGRpcmZsZzsgeworICAgIGV4dGVybiBpbnQgcmVjdXJzaXZl LCBkaXJhY3RpdmUsIGNkYWN0aXZlLCBkYmxxdW87CisgICAgaW50IGksIHgsIGl0c2FkaXIsIHhj LCBleHBhbmRlZCA9IDAsIG5maWxlcyA9IDAsIGNoaWxkcmVuID0gLTE7CisgICAgaW50IHFmbGFn ID0gMDsKKyAgICBsb25nIHk7CisgICAgQ0tfT0ZGX1QgZmlsZXNpemU7CisgICAgY2hhciAqc3Ag PSBOVUxMLCAqenEsICpucCA9IE5VTEw7CisgICAgY2hhciAqc3YgPSBOVUxMLCAqcCA9IE5VTEw7 CisjaWZkZWYgRFRJTERFCisgICAgY2hhciAqZGlycDsKKyNlbmRpZiAvKiBEVElMREUgKi8KKwor I2lmbmRlZiBOT1BBUlRJQUwKKyNpZm5kZWYgT1MyCisjaWZkZWYgT1NLCisgICAgLyogVGhpcyBs YXJnZSBhcnJheSBpcyBkeW5hbWljIGZvciBPUy05IC0tIHNob3VsZCBkbyBmb3Igb3RoZXJzIHRv by4uLiAqLworICAgIGV4dGVybiBjaGFyICoqbXRjaHM7CisjZWxzZQorI2lmZGVmIFVOSVgKKyAg ICAvKiBPSywgZm9yIFVOSVggdG9vICovCisgICAgZXh0ZXJuIGNoYXIgKiptdGNoczsKKyNlbHNl CisjaWZkZWYgVk1TCisgICAgZXh0ZXJuIGNoYXIgKiptdGNoczsKKyNlbHNlCisgICAgZXh0ZXJu IGNoYXIgKm10Y2hzW107CisjZW5kaWYgLyogVk1TICovCisjZW5kaWYgLyogVU5JWCAqLworI2Vu ZGlmIC8qIE9TSyAqLworI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIE5PUEFSVElBTCAqLwor CisgICAgaWYgKCF4aGxwKSB4aGxwID0gIiI7CisgICAgaWYgKCF4ZGVmKSB4ZGVmID0gIiI7CisK KyNpZm5kZWYgTk9MQVNURklMRQorICAgIG1ha2VzdHIoJnRtcGxhc3RmaWxlLE5VTEwpOworI2Vu ZGlmCS8qIE5PTEFTVEZJTEUgKi8KKyAgICBuenhvcHRzID0gMDsJCQkvKiB6eHBhbmQoKSBvcHRp b25zICovCisgICAgZGVidWcoRjEwMSwiY21pZmkgZCIsIiIsZCk7CisgICAgaWYgKGQgJiAyKSB7 CQkJLyogZCAmIDIgbWVhbnMgZG9uJ3QgZm9sbG93IHN5bWxpbmtzICovCisJZCBePSAyOworCW56 eG9wdHMgPSBaWF9OT0xJTktTOworICAgIH0KKyAgICBkZWJ1ZyhGMTAxLCJjbWlmaSBuenhvcHRz IiwiIixuenhvcHRzKTsKKyAgICBjbWZsZGZsZ3MgPSAwOworICAgIGlmIChwYXRoKQorICAgICAg aWYgKCEqcGF0aCkKKwlwYXRoID0gTlVMTDsKKyAgICBpZiAocGF0aCkgewkJCQkvKiBNYWtlIGEg Y29weSB3ZSBjYW4gcG9rZSAqLworCXggPSBzdHJsZW4ocGF0aCk7CisJbnAgPSAoY2hhciAqKSBt YWxsb2MoeCArIDEpOworCWlmIChucCkgeworCSAgICBzdHJjcHkobnAsIHBhdGgpOworCSAgICBw YXRoID0gc3AgPSBucDsKKwl9CisgICAgfQorICAgIGRlYnVnKEYxMTAsImNtaWZpMiBwYXRoIixw YXRoLDApOworCisgICAgY2tzdHJuY3B5KGNtZGVmYXVsdCx4ZGVmLENNREVGQVVMVCk7IC8qIENv cHkgZGVmYXVsdCAqLworICAgIHhkZWYgPSBjbWRlZmF1bHQ7CisKKyAgICBpbndvcmQgPSAwOwkJ CQkvKiBJbml0aWFsaXplIGNvdW50cyAmIHBvaW50ZXJzICovCisgICAgY2MgPSAwOworICAgIHhj ID0gMDsKKyAgICAqeHAgPSAiIjsJCQkJLyogUG9pbnRlciB0byByZXN1bHQgc3RyaW5nICovCisg ICAgaWYgKCh4ID0gY21mbGdzKSAhPSAxKSB7ICAgICAgICAgICAgLyogQWxyZWFkeSBjb25maXJt ZWQ/ICovCisjaWZkZWYgQlNfRElSU0VQCisJZGlybmFtZmxnID0gMTsKKyAgICAgICAgeCA9IGd0 d29yZCgwKTsJCQkvKiBObywgZ2V0IGEgd29yZCAqLworCWRpcm5hbWZsZyA9IDA7CisjZWxzZQor ICAgICAgICB4ID0gZ3R3b3JkKDApOyAgICAgICAgICAgICAgICAgIC8qIE5vLCBnZXQgYSB3b3Jk ICovCisjZW5kaWYgLyogQlNfRElSU0VQICovCisgICAgfSBlbHNlIHsJCQkJLyogSWYgc28sIHVz ZSBkZWZhdWx0LCBpZiBhbnkuICovCisgICAgICAgIGlmIChzZXRhdG0oeGRlZiwxKSA8IDApIHsK KwkgICAgcHJpbnRmKCI/RGVmYXVsdCBuYW1lIHRvbyBsb25nXG4iKTsKKwkgICAgaWYgKG5wKSBm cmVlKG5wKTsKKwkgICAgcmV0dXJuKC05KTsKKwl9CisgICAgfQorICBpX3BhdGg6CisgICAgKnhw ID0gYXRtYnVmOyAgICAgICAgICAgICAgICAgICAgICAgLyogUG9pbnQgdG8gcmVzdWx0LiAqLwor CisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgeGMgKz0gY2M7ICAgICAgICAgICAgICAgICAgICAg ICAvKiBDb3VudCB0aGlzIGNoYXJhY3Rlci4gKi8KKyAgICAgICAgZGVidWcoRjExMSwiY21pZmkg Z3R3b3JkIixhdG1idWYseGMpOworCWRlYnVnKEYxMDEsImNtaWZpIHN3aXRjaCB4IiwiIix4KTsK KyAgICAgICAgc3dpdGNoICh4KSB7CQkJLyogeCA9IGd0d29yZCgpIHJldHVybiBjb2RlICovCisJ ICBjYXNlIC0xMDoKKwkgICAgaWYgKGd0aW1lcigpID4gdGltZWxpbWl0KSB7CisjaWZkZWYgSUtT RAorICAgICAgICAgICAgICAgIGlmIChpbnNlcnZlcikgeworICAgICAgICAgICAgICAgICAgICBw cmludGYoIlxyXG5JS1NEIElETEUgVElNRU9VVDogJWQgc2VjXHJcbiIsIHRpbWVsaW1pdCk7Cisg ICAgICAgICAgICAgICAgICAgIGRvZXhpdChHT09EX0VYSVQsMCk7CisgICAgICAgICAgICAgICAg fQorI2VuZGlmIC8qIElLU0QgKi8KKwkJLyogaWYgKCFxdWlldCkgcHJpbnRmKCI/VGltZWQgb3V0 XG4iKTsgKi8KKwkJcmV0dXJuKC0xMCk7CisJICAgIH0gZWxzZSB7CisJCXggPSBndHdvcmQoMCk7 CisJCWNvbnRpbnVlOworCSAgICB9CisJICBjYXNlIC05OgorCSAgICBwcmludGYoIkNvbW1hbmQg b3IgZmllbGQgdG9vIGxvbmdcbiIpOworCSAgY2FzZSAtNDoJCQkvKiBFT0YgKi8KKwkgIGNhc2Ug LTI6CQkJLyogT3V0IG9mIHNwYWNlLiAqLworCSAgY2FzZSAtMToJCQkvKiBSZXBhcnNlIG5lZWRl ZCAqLworCSAgICBpZiAobnApIGZyZWUobnApOworCSAgICByZXR1cm4oeCk7CisJICBjYXNlIDE6 CQkJLyogQ1IgKi8KKwkgIGNhc2UgMDoJCQkvKiBTUCAqLworCSAgICBpZiAoeGMgPT0gMCkJCS8q IElmIG5vIGlucHV0Li4uICovCisJICAgICAgKnhwID0geGRlZjsJCS8qIHN1YnN0aXR1dGUgdGhl IGRlZmF1bHQgKi8KKyNpZm5kZWYgTk9MQVNURklMRQorCSAgICBtYWtlc3RyKCZ0bXBsYXN0Zmls ZSwqeHApOwkvKiBNYWtlIGEgY29weSBiZWZvcmUgYnN0cmlwcGluZyAqLworI2VuZGlmCS8qICNp Zm5kZWYgTk9MQVNURklMRSAqLworCSAgICAqeHAgPSBicnN0cmlwKCp4cCk7CQkvKiBTdHJpcCBi cmFjZXMgKi8KKwkgICAgaWYgKCoqeHAgPT0gTlVMKSB7CQkvKiAxMiBtYXIgMjAwMSAqLworCQlp ZiAobnApIGZyZWUobnApOworCQlyZXR1cm4oLTMpOworCSAgICB9CisJICAgIGRlYnVnKEYxMTAs ImNtaWZpIGJyc3RyaXAiLCp4cCwwKTsKKyNpZm5kZWYgTk9TUEwKKwkgICAgaWYgKGYpIHsJCQkv KiBJZiBhIGNvbnZlcnNpb24gZnVuY3Rpb24gaXMgZ2l2ZW4gKi8KKyNpZmRlZiBET0NIS1ZBUgor CQljaGFyICpzID0gKnhwOwkJLyogU2VlIGlmIHRoZXJlIGFyZSBhbnkgdmFyaWFibGVzIGluICov CisJCWludCB4OworCQl3aGlsZSAoKnMpIHsJCS8qIHRoZSBzdHJpbmcgYW5kIGlmIHNvLCBleHBh bmQgdGhlbSAqLworCQkgICAgeCA9IGNoa3ZhcihzKTsKKwkJICAgIC8qIGRlYnVnKEYxMTEsImNt aWZpIGNoa3ZhciIsKnhwLHgpOyAqLworCQkgICAgaWYgKHgpIHsKKyNlbmRpZiAvKiBET0NIS1ZB UiAqLworCQkJenEgPSBhdHhidWY7CisJCQlhdHhuID0gQ01EQkw7CisJCQlpZiAoKCpmKSgqeHAs JnpxLCZhdHhuKSA8IDApIHsKKwkJCSAgICBpZiAobnApIGZyZWUobnApOworCQkJICAgIHJldHVy bigtMik7CisJCQl9CisJCQkqeHAgPSBhdHhidWY7CisJCQlpZiAoIWF0eGJ1ZlswXSkKKwkJCSAg KnhwID0geGRlZjsKKyNpZmRlZiBET0NIS1ZBUgorCQkJYnJlYWs7CisJCSAgICB9CisJCSAgICBz Kys7CisJCX0KKyNlbmRpZiAvKiBET0NIS1ZBUiAqLworCSAgICB9CisjZW5kaWYgLyogTk9TUEwg Ki8KKwkgICAgaWYgKCoqeHAgPT0gTlVMKSB7CQkvKiAxMiBtYXIgMjAwMSAqLworCQlpZiAobnAp IGZyZWUobnApOworCQlyZXR1cm4oLTMpOworCSAgICB9CisjaWZkZWYgRFRJTERFCisJICAgIGlm IChkaXJmbGcpIHsKKwkJZGlycCA9IHRpbGRlX2V4cGFuZCgqeHApOyAvKiBFeHBhbmQgdGlsZGUs IGlmIGFueSwgKi8KKwkJaWYgKCpkaXJwICE9ICdcMCcpIHsJLyogaW4gdGhlIGF0b20gYnVmZmVy LiAqLworCQkgICAgaWYgKHNldGF0bShkaXJwLDEpIDwgMCkgeworCQkJcHJpbnRmKCJFeHBhbmRl ZCBuYW1lIHRvbyBsb25nXG4iKTsKKwkJCWlmIChucCkgZnJlZShucCk7CisJCQlyZXR1cm4oLTkp OworCQkgICAgfQorCQl9CisJCSp4cCA9IGF0bWJ1ZjsKKwkJZGVidWcoRjExMCwiY21pZmkgdGls ZGVfZXhwYW5kIiwqeHAsMCk7CisJICAgIH0KKyNlbmRpZiAvKiBEVElMREUgKi8KKwkgICAgaWYg KCFzdikgewkJCS8qIE9ubHkgZG8gdGhpcyBvbmNlICovCisJCXN2ID0gbWFsbG9jKChpbnQpc3Ry bGVuKCp4cCkrMSk7IC8qIE1ha2UgYSBzYWZlIGNvcHkgKi8KKwkJaWYgKCFzdikgeworCQkgICAg cHJpbnRmKCI/Y21pZmk6IG1hbGxvYyBlcnJvclxuIik7CisJCSAgICBpZiAobnApIGZyZWUobnAp OworCQkgICAgcmV0dXJuKC05KTsKKwkJfQorCQlzdHJjcHkoc3YsKnhwKTsKKwkJZGVidWcoRjEx MCwiY21pZmkgc3YiLHN2LDApOworCSAgICB9CisKKy8qIFRoaXMgaXMgdG8gZ2V0IGFyb3VuZCAi Y2QgLyIgZmFpbGluZyBiZWNhdXNlICJ0b28gbWFueSBkaXJlY3RvcmllcyBtYXRjaCIgKi8KKwor CSAgICBleHBhbmRlZCA9IDA7CQkvKiBEaWRuJ3QgY2FsbCB6eHBhbmQgKi8KKyNpZmRlZiBkYXRh Z2VuZXJhbAorCSAgICBkZWJ1ZyhGMTEwLCJjbWlmaSBpc2RpciAxIiwqeHAsMCk7CisJICAgIHsK KwkJaW50IHk7IGNoYXIgKnM7CisJCXMgPSAqeHA7CisJCXkgPSBzdHJsZW4ocyk7CisJCWlmICh5 ID4gMSAmJgorCQkgICAgKHNbeS0xXSA9PSAnOicgfHwKKwkJICAgICBzW3ktMV0gPT0gJ14nIHx8 CisJCSAgICAgc1t5LTFdID09ICc9JykKKwkJICAgICkKKwkJICBzW3ktMV0gPSBOVUw7CisJICAg IH0KKwkgICAgZGVidWcoRjExMCwiY21pZmkgaXNkaXIgMiIsKnhwLDApOworI2VuZGlmIC8qICBk YXRhZ2VuZXJhbCAqLworCisjaWZkZWYgVk1TCisJICAgIGlmIChkaXJmbGcpIHsKKwkJaWYgKCFz dHJjbXAoKnhwLCIuLiIpKSB7IC8qIEZvciBVTklYZXJzLi4uICovCisJCSAgICBzZXRhdG0oIi0i LDApOworCQkgICAgKnhwID0gYXRtYnVmOworCQl9IGVsc2UgaWYgKCFzdHJjbXAoKnhwLCIuIikp IHsKKwkJICAgIHNldGF0bSgiW10iLDApOworCQkgICAgKnhwID0gYXRtYnVmOworCQl9CisJICAg IH0KKyNlbmRpZiAvKiBWTVMgKi8KKwkgICAgaXRzYWRpciA9IGlzZGlyKCp4cCk7CS8qIElzIGl0 IGEgZGlyZWN0b3J5PyAqLworCSAgICBkZWJ1ZyhGMTExLCJjbWlmaSBpdHNhZGlyIiwqeHAsaXRz YWRpcik7CisjaWZkZWYgVk1TCisJICAgIC8qIElmIHRoZXkgc2FpZCAiYmxhaCIgd2hlcmUgImJs YWguZGlyIiBpcyBhIGRpcmVjdG9yeS4uLiAqLworCSAgICAvKiBjaGFuZ2UgaXQgdG8gWy5ibGFo XS4gKi8KKwkgICAgaWYgKCFpdHNhZGlyKSB7CisJCWNoYXIgdG1wYnVmWzYwMF07CisJCWludCBm bGFnID0gMDsgY2hhciBjLCAqIHA7CisJCXAgPSAqeHA7CisJCXdoaWxlICgoYyA9ICpwKyspICYm ICFmbGFnKQorCQkgIGlmIChja3N0cmNocigiLltdOio/PD4iLGMpKQorCQkgICAgZmxhZyA9IDE7 CisJCWRlYnVnKEYxMTEsImNtaWZpIFZNUyBkaXJuYW1lIGZsYWciLCp4cCxmbGFnKTsKKwkJaWYg KCFmbGFnKSB7CisJCSAgICBja21ha21zZyh0bXBidWYsVE1QQlVGU0laLCJbLiIsKnhwLCJdIixO VUxMKTsKKwkJICAgIGl0c2FkaXIgPSBpc2Rpcih0bXBidWYpOworCQkgICAgaWYgKGl0c2FkaXIp IHsKKwkJCXNldGF0bSh0bXBidWYsMCk7CisJCQkqeHAgPSBhdG1idWY7CisJCSAgICB9CisJCSAg ICBkZWJ1ZyhGMTExLCJjbWlmaSBWTVMgZGlybmFtZSBmbGFnIGl0c2FkaXIiLCp4cCxpdHNhZGly KTsKKwkJfQorCSAgICB9IGVsc2UgaWYgKGl0c2FkaXIgPT0gMSAmJiAqKHhwWzBdKSA9PSAnLicg JiYgKih4cFsxXSkpIHsKKwkJY2hhciAqcDsKKwkJaWYgKHAgPSBtYWxsb2MoY2MgKyA0KSkgewor CQkgICAgY2ttYWttc2cocCxjYys0LCJbIiwqeHAsIl0iLE5VTEwpOworCQkgICAgc2V0YXRtKHAs MCk7CisJCSAgICAqeHAgPSBhdG1idWY7CisJCSAgICBkZWJ1ZyhGMTEwLCJjbWRpciAuZm9vIiwq eHAsMCk7CisJCSAgICBmcmVlKHApOworCQl9CisJICAgIH0gZWxzZSBpZiAoaXRzYWRpciA9PSAy ICYmICFkaXJhY3RpdmUpIHsKKwkJaW50IHg7CQkJLyogW0ZPT11CQVIuRElSIGluc3RlYWQgb2Yg W0ZPTy5CQVJdICovCisJCWNoYXIgKnA7CisJCXAgPSBtYWxsb2MoY2MgKyA0KTsKKwkJaWYgKHAp IHsKKwkJICAgIHggPSBjdnRkaXIoKnhwLHAsQVRNQkwpOyAvKiBDb252ZXJ0IHRvIFtGT08uQkFS XSAqLworCQkgICAgaWYgKHggPiAwKSB7CisJCQlzZXRhdG0ocCwwKTsKKwkJCSp4cCA9IGF0bWJ1 ZjsKKwkJCWRlYnVnKEYxMTAsImNtZGlyIGN2dGRpciIsKnhwLDApOworCQkgICAgfQorCQkgICAg ZnJlZShwKTsKKwkJfQorCSAgICB9CisjZW5kaWYgLyogVk1TICovCisKKwkgICAgZGVidWcoRjEw MSwiY21pZmkgZGlyZmxnIiwiIixkaXJmbGcpOworCSAgICBpZiAoZGlyZmxnKSB7CQkvKiBQYXJz aW5nIGEgZGlyZWN0b3J5IG5hbWU/ICovCisJCS8qIFllcywgZG9lcyBpdCBjb250YWluIHdpbGRj YXJkcz8gKi8KKwkJaWYgKGlzd2lsZCgqeHApIHx8CisJCSAgICAoZGlyYWN0aXZlICYmICghc3Ry Y21wKCp4cCwiLiIpICB8fCAhc3RyY21wKCp4cCwiLi4iKSkpCisJCSAgICApIHsKKwkJICAgIG56 eG9wdHMgfD0gWlhfRElST05MWTsgLyogTWF0Y2ggb25seSBkaXJlY3RvcnkgbmFtZXMgKi8KKwkJ ICAgIGlmIChtYXRjaGRvdCkgIG56eG9wdHMgfD0gWlhfTUFUQ0hET1Q7CisJCSAgICBpZiAocmVj dXJzaXZlKSBuenhvcHRzIHw9IFpYX1JFQ1VSU0U7CisJCSAgICBkZWJ1ZyhGMTExLCJjbWlmaSBu enhvcHRzIDIiLCp4cCxuenhvcHRzKTsKKwkJICAgIHkgPSBuenhwYW5kKCp4cCxuenhvcHRzKTsK KwkJICAgIGRlYnVnKEYxMTEsImNtaWZpIG56eHBhbmQgMiIsKnhwLHkpOworCQkgICAgbmZpbGVz ID0geTsKKwkJICAgIGV4cGFuZGVkID0gMTsKKwkJfSBlbHNlIHsKKyNpZmRlZiBWTVMKKy8qCisg IFRoaXMgaXMgdG8gYWxsb3cgKGUuZy4pICJjZCBmb28iLCB3aGVyZSBGT08uRElSOzEgaXMgaW4g dGhlCisgIGN1cnJlbnQgZGlyZWN0b3J5LgorKi8KKwkJICAgIGRlYnVnKEYxMTEsImNtZGlyIGl0 c2FkaXIiLCp4cCxpdHNhZGlyKTsKKwkJICAgIGlmICghaXRzYWRpcikgeworCQkJY2hhciAqczsK KwkJCWludCBuOworCQkJcyA9ICp4cDsKKwkJCW4gPSBzdHJsZW4ocyk7CisJCQlpZiAobiA+IDAg JiYKKyNpZmRlZiBDT01NRU5UCisJCQkgICAgKnMgIT0gJ1snICYmIHNbbi0xXSAhPSAnXScgJiYK KwkJCSAgICAqcyAhPSAnPCcgJiYgc1tuLTFdICE9ICc+JyAmJgorI2Vsc2UKKwkJCSAgICBja2lu ZGV4KCJbIixzLDAsMCwxKSA9PSAwICYmCisJCQkgICAgY2tpbmRleCgiPCIscywwLDAsMSkgPT0g MCAmJgorI2VuZGlmIC8qIENPTU1FTlQgKi8KKwkJCSAgICBzW24tMV0gIT0gJzonKSB7CisJCQkg ICAgY2hhciAqIGRpcmJ1ZiA9IE5VTEw7CisJCQkgICAgZGlyYnVmID0gKGNoYXIgKiltYWxsb2Mo bis0KTsKKwkJCSAgICBpZiAoZGlyYnVmKSB7CisJCQkJaWYgKCpzID09ICcuJykKKwkJCQkgIGNr bWFrbXNnKGRpcmJ1ZixuKzQsIlsiLHMsIl0iLE5VTEwpOworCQkJCWVsc2UKKwkJCQkgIGNrbWFr bXNnKGRpcmJ1ZixuKzQsIlsuIixzLCJdIixOVUxMKTsKKwkJCQlpdHNhZGlyID0gaXNkaXIoZGly YnVmKTsKKwkJCQlkZWJ1ZyhGMTExLCJjbWRpciBkaXJidWYiLGRpcmJ1ZixpdHNhZGlyKTsKKwkJ CQlpZiAoaXRzYWRpcikgeworCQkJCSAgICBzZXRhdG0oZGlyYnVmLDApOworCQkJCSAgICAqeHAg PSBhdG1idWY7CisJCQkJICAgIGRlYnVnKEYxMTAsImNtZGlyIG5ldyAqeHAiLCp4cCwwKTsKKwkJ CQl9CisJCQkJZnJlZShkaXJidWYpOworCQkJICAgIH0KKworLyogVGhpcyBpcyB0byBhbGxvdyBD RFBBVEggdG8gd29yayBpbiBWTVMuLi4gKi8KKworCQkJfSBlbHNlIGlmIChuID4gMCkgeworCQkJ ICAgIGNoYXIgKiBwOyBpbnQgaSwgaiwgaywgZDsKKwkJCSAgICBjaGFyIHJiWzJdID0gIl0iOwor CQkJICAgIGlmIChwID0gbWFsbG9jKHggKyA4KSkgeworCQkJCWNrc3RybmNweShwLCp4cCx4Kzgp OworCQkJCWkgPSBja2luZGV4KCIuIixwLC0xLDEsMSk7CisJCQkJZCA9IGNraW5kZXgoIi5kaXIi LHAsMCwwLDApOworCQkJCWogPSBja2luZGV4KCJdIixwLC0xLDEsMSk7CisJCQkJaWYgKGogPT0g MCkgeworCQkJCSAgICBqID0gY2tpbmRleCgiPiIscCwtMSwxLDEpOworCQkJCSAgICByYlswXSA9 ICc+JzsKKwkJCQl9CisJCQkJayA9IGNraW5kZXgoIjoiLHAsLTEsMSwxKTsKKwkJCQlpZiAoaSA8 IGogfHwgaSA8IGspIGkgPSAwOworCQkJCWlmIChkIDwgaiB8fCBkIDwgaykgZCA9IDA7CisJCQkJ LyogQ2hhbmdlIFtGT09dQkFSIG9yIFtGT09dQkFSLkRJUiAqLworCQkJCS8qIHRvIFtGT08uQkFS XSAqLworCQkJCWlmIChqID4gMCAmJiBqIDwgbikgeworCQkJCSAgICBwW2otMV0gPSAnLic7CisJ CQkJICAgIGlmIChkID4gMCkgcFtkLTFdID0gTlVMOworCQkJCSAgICBja3N0cm5jYXQocCxyYix4 KzgpOworCQkJCSAgICBkZWJ1ZyhGMTEwLCJjbWRpciB4eHgiLHAsMCk7CisJCQkJfQorCQkJCWl0 c2FkaXIgPSBpc2RpcihwKTsKKwkJCQlkZWJ1ZyhGMTExLCJjbWRpciBwIixwLGl0c2FkaXIpOwor CQkJCWlmIChpdHNhZGlyKSB7CisJCQkJICAgIHNldGF0bShwLDApOworCQkJCSAgICAqeHAgPSBh dG1idWY7CisJCQkJICAgIGRlYnVnKEYxMTAsImNtZGlyIG5ldyAqeHAiLCp4cCwwKTsKKwkJCQl9 CisJCQkJZnJlZShwKTsKKwkJCSAgICB9CisJCQl9CisJCSAgICB9CisjZW5kaWYgLyogVk1TICov CisJCSAgICB5ID0gKCFpdHNhZGlyKSA/IDAgOiAxOworCQkgICAgZGVidWcoRjExMSwiY21pZmkg eSBpdHNhZGlyIiwqeHAseSk7CisJCX0KKwkgICAgfSBlbHNlIHsJCQkvKiBQYXJzaW5nIGEgZmls ZW5hbWUuICovCisJCWRlYnVnKEYxMTAsImNtaWZpICp4cCBwcmUtenhwYW5kIiwqeHAsMCk7Cisj aWZuZGVmIENPTU1FTlQKKwkJbnp4b3B0cyB8PSAoZCA9PSAwKSA/IFpYX0ZJTE9OTFkgOiAwOyAv KiBTbyBhbHdheXMgZXhwYW5kLiAqLworCQlpZiAobWF0Y2hkb3QpICBuenhvcHRzIHw9IFpYX01B VENIRE9UOworCQlpZiAocmVjdXJzaXZlKSBuenhvcHRzIHw9IFpYX1JFQ1VSU0U7CisJCXkgPSBu enhwYW5kKCp4cCxuenhvcHRzKTsKKyNlbHNlCisvKiBIZXJlIHdlJ3JlIHRyeWluZyB0byBmaXgg YSBwcm9ibGVtIGluIHdoaWNoIGEgZGlyZWN0b3J5IG5hbWUgaXMgYWNjZXB0ZWQgKi8KKy8qIGFz IGEgZmlsZW5hbWUsIGJ1dCB0aGlzIGJyZWFrcyB0b28gbWFueSBvdGhlciB0aGluZ3MuICovCisJ CS8qIG56eG9wdHMgPSAwOyAqLworCQlpZiAoIWQpIHsKKwkJICAgIGlmIChpdHNhZGlyICYgIWlz d2lsZCgqeHApKSB7CisJCQlkZWJ1ZyhGMTAwLCJjbWlmaSBkaXIgd2hlbiBmaWxvbmx5IiwiIiww KTsKKwkJCXByaW50ZigiP05vdCBhIHJlZ3VsYXIgZmlsZTogXCIlc1wiXG4iLCp4cCk7CisJCQlp ZiAoc3YpIGZyZWUoc3YpOworCQkJaWYgKG5wKSBmcmVlKG5wKTsKKwkJCXJldHVybigtOSk7CisJ CSAgICB9IGVsc2UgeworCQkJbnp4b3B0cyB8PSBaWF9GSUxPTkxZOworCQkJaWYgKG1hdGNoZG90 KSAgbnp4b3B0cyB8PSBaWF9NQVRDSERPVDsKKwkJCWlmIChyZWN1cnNpdmUpIG56eG9wdHMgfD0g WlhfUkVDVVJTRTsKKwkJCXkgPSBuenhwYW5kKCp4cCxuenhvcHRzKTsKKwkJICAgIH0KKwkJfQor I2VuZGlmIC8qIENPTU1FTlQgKi8KKwkJbmZpbGVzID0geTsKKwkJZGVidWcoRjExMSwiY21pZmkg eSBuenhwYW5kIiwqeHAseSk7CisJCWRlYnVnKEYxMTEsImNtaWZpIHkgYXRtYnVmIixhdG1idWYs aXRzYWRpcik7CisJCWV4cGFuZGVkID0gMTsKKwkgICAgfQorCSAgICAvKiBkb215ZGlyKCkgY2Fs bHMgenhyZXdpbmQoKSBzbyB3ZSBNVVNUIGNhbGwgbnp4cGFuZCgpIGhlcmUgKi8KKwkgICAgaWYg KCFleHBhbmRlZCAmJiBkaXJhY3RpdmUpIHsKKwkJZGVidWcoRjExMCwiY21pZmkgZGlyYWN0aXZl IGNhdGNoLWFsbCB6eHBhbmQiLCp4cCwwKTsKKwkJbnp4b3B0cyB8PSAoZCA9PSAwKSA/IFpYX0ZJ TE9OTFkgOiAoZGlyZmxnID8gWlhfRElST05MWSA6IDApOworCQlpZiAobWF0Y2hkb3QpICBuenhv cHRzIHw9IFpYX01BVENIRE9UOworCQlpZiAocmVjdXJzaXZlKSBuenhvcHRzIHw9IFpYX1JFQ1VS U0U7CisJCXkgPSBuenhwYW5kKCp4cCxuenhvcHRzKTsKKwkJZGVidWcoRjExMSwiY21pZmkgZGly YWN0aXZlIG56eHBhbmQiLCp4cCx5KTsKKwkJbmZpbGVzID0geTsKKwkJZXhwYW5kZWQgPSAxOwor CSAgICB9CisJICAgICp3aWxkID0gKGlzd2lsZChzdikgfHwgKHkgPiAxKSkgJiYgKGl0c2FkaXIg PT0gMCk7CisKKyNpZmRlZiBSRUNVUlNJVkUKKwkgICAgaWYgKCEqd2lsZCkgKndpbGQgPSByZWN1 cnNpdmU7CisjZW5kaWYgLyogUkVDVVJTSVZFICovCisKKwkgICAgZGVidWcoRjExMSwiY21pZmkg c3Ygd2lsZCIsc3YsKndpbGQpOworCSAgICBkZWJ1ZyhGMTAxLCJjbWlmaSB5IiwiIix5KTsKKwkg ICAgaWYgKGRpcmZsZyAmJiAqd2lsZCAmJiBjZGFjdGl2ZSkgeworCQlpZiAoeSA+IDEpIHsKKwkJ ICAgIHByaW50ZigiP1dpbGRjYXJkIG1hdGNoZXMgbW9yZSB0aGFuIG9uZSBkaXJlY3RvcnlcbiIp OworCQkgICAgaWYgKHN2KSBmcmVlKHN2KTsKKwkJICAgIGlmIChucCkgZnJlZShucCk7CisJCSAg ICByZXR1cm4oLTkpOworCQl9IGVsc2UgeworCQkgICAgem5leHQoKnhwKTsKKwkJfQorCSAgICB9 CisJICAgIGlmIChpdHNhZGlyICYmIGQgJiYgIWRpcmZsZykgeyAvKiBJdCdzIGEgZGlyZWN0b3J5 IGFuZCBub3Qgd2lsZCAqLworCQlpZiAoc3YpIGZyZWUoc3YpOwkvKiBhbmQgaXQncyBvayB0byBw YXJzZSBkaXJlY3RvcmllcyAqLworCQlpZiAobnApIGZyZWUobnApOworI2lmbmRlZiBOT0xBU1RG SUxFCisJCW1ha2VzdHIoJmxhc3RmaWxlLHRtcGxhc3RmaWxlKTsKKyNlbmRpZgkvKiBOT0xBU1RG SUxFICovCisJCXJldHVybih4KTsKKwkgICAgfQorCSAgICBpZiAoeSA9PSAwKSB7CQkvKiBGaWxl IHdhcyBub3QgZm91bmQgKi8KKwkJaW50IGRvc2VhcmNoID0gMDsKKwkJZG9zZWFyY2ggPSAocGF0 aCAhPSBOVUxMKTsgLyogQSBzZWFyY2ggcGF0aCB3YXMgZ2l2ZW4gKi8KKwkJaWYgKGRvc2VhcmNo KSB7CisJCSAgICBkb3NlYXJjaCA9IGhhc25vcGF0aChzdik7IC8qIEZpbGVuYW1lIGluY2x1ZGVz IG5vIHBhdGggKi8KKwkJICAgIGRlYnVnKEYxMTEsImNtaWZpcCBoYXNub3BhdGgiLHN2LGRvc2Vh cmNoKTsKKwkJfQorCQlpZiAoZG9zZWFyY2gpIHsJCS8qIFNlYXJjaCB0aGUgcGF0aC4uLiAqLwor CQkgICAgY2hhciAqIHB0ciA9IHBhdGg7CisJCSAgICBjaGFyIGM7CisJCSAgICB3aGlsZSAoMSkg eworCQkJYyA9ICpwdHI7CisJCQlpZiAoYyA9PSBQQVRIU0VQIHx8IGMgPT0gTlVMKSB7CisJCQkg ICAgaWYgKCEqcGF0aCkgeworCQkJCXBhdGggPSBOVUxMOworCQkJCWJyZWFrOworCQkJICAgIH0K KwkJCSAgICAqcHRyID0gTlVMOworI2lmZGVmIFVOSVgKKy8qIEJ5IGRlZmluaXRpb24gb2YgQ0RQ QVRILCBhbiBlbXB0eSBtZW1iZXIgZGVub3RlcyB0aGUgY3VycmVudCBkaXJlY3RvcnkgKi8KKwkJ CSAgICBpZiAoISpwYXRoKQorCQkJICAgICAgY2tzdHJuY3B5KGF0bWJ1ZiwiLiIsQVRNQkwpOwor CQkJICAgIGVsc2UKKyNlbmRpZiAvKiBVTklYICovCisJCQkgICAgICBja3N0cm5jcHkoYXRtYnVm LHBhdGgsQVRNQkwpOworI2lmZGVmIFZNUworCQkJICAgIGF0bWJ1ZltBVE1CTF0gPSBOVUw7Cisv KiBJZiB3ZSBoYXZlIGEgbG9naWNhbCBuYW1lLCBldmFsdWF0ZSBpdCByZWN1cnNpdmVseSAqLwor CQkJICAgIGlmICgqKHB0ci0xKSA9PSAnOicpIHsgLyogTG9naWNhbCBuYW1lIGVuZHMgaW4gOiAq LworCQkJCWNoYXIgKnA7IGludCBuOworCQkJCXdoaWxlICgoKG4gPSBzdHJsZW4oYXRtYnVmKSkg ID4gMCkgJiYKKwkJCQkgICAgICAgYXRtYnVmW24tMV0gPT0gJzonKSB7CisJCQkJICAgIGF0bWJ1 ZltuLTFdID0gTlVMOworCQkJCSAgICBmb3IgKHAgPSBhdG1idWY7ICpwOyBwKyspCisJCQkJICAg ICAgaWYgKGlzbG93ZXIoKnApKSAqcCA9IHRvdXBwZXIoKnApOworCQkJCSAgICBkZWJ1ZyhGMTEx LCJjbWRpciBDRFBBVEggTE4gMSIsYXRtYnVmLG4pOworCQkJCSAgICBwID0gZ2V0ZW52KGF0bWJ1 Zik7CisJCQkJICAgIGRlYnVnKEYxMTAsImNtZGlyIENEUEFUSCBMTiAyIixwLDApOworCQkJCSAg ICBpZiAoIXApCisJCQkJICAgICAgYnJlYWs7CisJCQkJICAgIHN0cm5jcHkoYXRtYnVmLHAsQVRN QkwpOworCQkJCSAgICBhdG1idWZbQVRNQkxdID0gTlVMOworCQkJCX0KKwkJCSAgICB9CisjZWxz ZQorI2lmZGVmIE9TMgorCQkJICAgIGlmICgqKHB0ci0xKSAhPSAnXFwnICYmICoocHRyLTEpICE9 ICcvJykKKwkJCSAgICAgIGNrc3RybmNhdChhdG1idWYsIlxcIixBVE1CTCk7CisjZWxzZQorI2lm ZGVmIFVOSVgKKwkJCSAgICBpZiAoKihwdHItMSkgIT0gJy8nKQorCQkJICAgICAgY2tzdHJuY2F0 KGF0bWJ1ZiwiLyIsQVRNQkwpOworI2Vsc2UKKyNpZmRlZiBkYXRhZ2VuZXJhbAorCQkJICAgIGlm ICgqKHB0ci0xKSAhPSAnOicpCisJCQkgICAgICBja3N0cm5jYXQoYXRtYnVmLCI6IixBVE1CTCk7 CisjZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KKyNlbmRpZiAvKiBVTklYICovCisjZW5kaWYgLyog T1MyICovCisjZW5kaWYgLyogVk1TICovCisJCQkgICAgY2tzdHJuY2F0KGF0bWJ1ZixzdixBVE1C TCk7CisJCQkgICAgZGVidWcoRjExMCwiY21pZmlwIGFkZCBwYXRoIixhdG1idWYsMCk7CisJCQkg ICAgaWYgKGMgPT0gUEFUSFNFUCkgcHRyKys7CisJCQkgICAgcGF0aCA9IHB0cjsKKwkJCSAgICBi cmVhazsKKwkJCX0KKwkJCXB0cisrOworCQkgICAgfQorCQkgICAgeCA9IDE7CisJCSAgICBpbndv cmQgPSAwOworCQkgICAgY2MgPSAwOworCQkgICAgeGMgPSAoaW50KSBzdHJsZW4oYXRtYnVmKTsK KwkJICAgICp4cCA9ICIiOworCQkgICAgZ290byBpX3BhdGg7CisJCX0KKwkJaWYgKGQpIHsKKwkJ ICAgIGlmIChzdikgZnJlZShzdik7CisJCSAgICBpZiAobnApIGZyZWUobnApOworCQkgICAgcmV0 dXJuKC0yKTsKKwkJfSBlbHNlIHsKKwkJICAgIGlmICghbm9tc2cpIHsKKyNpZmRlZiBDS1JPT1QK KwkJCWlmIChja3Jvb3RlcnIpCisJCQkgIHByaW50ZigiP09mZiBMaW1pdHM6ICVzXG4iLHN2KTsK KwkJCWVsc2UKKyNlbmRpZiAvKiBDS1JPT1QgKi8KKwkJCSAgaWYgKCFxdWlldCkKKwkJCSAgICBw cmludGYoIj9ObyAlcyBtYXRjaCAtICVzXG4iLAorCQkJCSBkaXJmbGcgPyAiZGlyZWN0b3JpZXMi IDogImZpbGVzIiwgc3YpOworCQkgICAgfQorCQkgICAgaWYgKHN2KSBmcmVlKHN2KTsKKwkJICAg IGlmIChucCkgZnJlZShucCk7CisJCSAgICByZXR1cm4oLTkpOworCQl9CisJICAgIH0gZWxzZSBp ZiAoeSA8IDApIHsKKyNpZmRlZiBDS1JPT1QKKwkJaWYgKGNrcm9vdGVycikKKwkJICBwcmludGYo Ij9PZmYgTGltaXRzOiAlc1xuIixzdik7CisJCWVsc2UKKyNlbmRpZiAvKiBDS1JPT1QgKi8KKwkJ ICBwcmludGYoIj9Ub28gbWFueSAlcyBtYXRjaCAtICVzXG4iLAorCQkJIGRpcmZsZyA/ICJkaXJl Y3RvcmllcyIgOiAiZmlsZXMiLCBzdik7CisJCWlmIChzdikgZnJlZShzdik7CisJCWlmIChucCkg ZnJlZShucCk7CisJCXJldHVybigtOSk7CisJICAgIH0gZWxzZSBpZiAoKndpbGQgfHwgeSA+IDEp IHsKKwkJaWYgKHN2KSBmcmVlKHN2KTsKKwkJaWYgKG5wKSBmcmVlKG5wKTsKKyNpZm5kZWYgTk9M QVNURklMRQorCQltYWtlc3RyKCZsYXN0ZmlsZSx0bXBsYXN0ZmlsZSk7CisjZW5kaWYJLyogTk9M QVNURklMRSAqLworCQlyZXR1cm4oeCk7CisJICAgIH0KKworCSAgICAvKiBJZiBub3Qgd2lsZCwg c2VlIGlmIGl0IGV4aXN0cyBhbmQgaXMgcmVhZGFibGUuICovCisKKwkgICAgZGVidWcoRjExMSwi Y21pZmkgc3Ygbm90IHdpbGQiLHN2LCp3aWxkKTsKKwkgICAgaWYgKGV4cGFuZGVkKQorCSAgICAg IHpuZXh0KCp4cCk7CQkvKiBHZXQgZmlyc3QgKG9ubHk/KSBtYXRjaGluZyBmaWxlICovCisJICAg IGlmIChkaXJmbGcpCQkJLyogTWF5YmUgd2lsZCBhbmQgZXhwYW5kZWQgKi8KKwkgICAgICBpdHNh ZGlyID0gaXNkaXIoKnhwKTsJLyogc28gZG8gdGhpcyBhZ2Fpbi4gKi8KKwkgICAgZmlsZXNpemUg PSBkaXJmbGcgPyBpdHNhZGlyIDogemNoa2koKnhwKTsgLyogQ2hlY2sgYWNjZXNzaWJpbGl0eSAq LworCSAgICBpZiAoZXhwYW5kZWQpIHsKKyNpZmRlZiBaWFJFV0lORAorCQluZmlsZXMgPSB6eHJl d2luZCgpOwkvKiBSZXdpbmQgc28gbmV4dCB6bmV4dCgpIGdldHMgMXN0ICovCisjZWxzZQorCisJ CW56eG9wdHMgfD0gZGlyZmxnID8gWlhfRElST05MWSA6IDA7CisJCWlmIChtYXRjaGRvdCkgIG56 eG9wdHMgfD0gWlhfTUFUQ0hET1Q7CisJCWlmIChyZWN1cnNpdmUpIG56eG9wdHMgfD0gWlhfUkVD VVJTRTsKKwkJbmZpbGVzID0gbnp4cGFuZCgqeHAsbnp4b3B0cyk7CisjZW5kaWYgLyogWlhSRVdJ TkQgKi8KKwkgICAgfQorCSAgICBkZWJ1ZyhGMTExLCJjbWlmaSBuZmlsZXMiLCp4cCxuZmlsZXMp OworCSAgICBkZWJ1ZyhGMTAxLCJjbWlmaSBmaWxlc2l6ZSIsIiIsZmlsZXNpemUpOworCSAgICBm cmVlKHN2KTsJCQkvKiBkb25lIHdpdGggdGhpcyAqLworCSAgICBzdiA9IE5VTEw7CisJICAgIGlm IChkaXJmbGcgJiYgIWZpbGVzaXplKSB7CisJCXByaW50ZigiP05vdCBhIGRpcmVjdG9yeSAtICVz XG4iLCp4cCk7CisjaWZkZWYgQ0tDSEFOTkVMSU8KKwkJel9lcnJvciA9IEZYX0FDQzsKKyNlbmRp ZiAvKiBDS0NIQU5ORUxJTyAqLworCQlyZXR1cm4oLTkpOworCSAgICB9IGVsc2UgaWYgKGZpbGVz aXplID09IChDS19PRkZfVCktMykgeworCQlpZiAoIXhjbWZkYikgeworCQkgICAgaWYgKGRpcmFj dGl2ZSkKKwkJICAgICAgLyogRG9uJ3Qgc2hvdyBmaWxlbmFtZSBpZiB3ZSdyZSBub3QgYWxsb3dl ZCB0byBzZWUgaXQgKi8KKwkJICAgICAgcHJpbnRmKCI/UmVhZCBwZXJtaXNzaW9uIGRlbmllZFxu Iik7CisJCSAgICBlbHNlCisJCSAgICAgIHByaW50ZigiP1JlYWQgcGVybWlzc2lvbiBkZW5pZWQg LSAlc1xuIiwqeHApOworCQl9CisJCWlmIChucCkgZnJlZShucCk7CisjaWZkZWYgQ0tDSEFOTkVM SU8KKwkJel9lcnJvciA9IEZYX0FDQzsKKyNlbmRpZiAvKiBDS0NIQU5ORUxJTyAqLworCQlyZXR1 cm4oeGNtZmRiID8gLTYgOiAtOSk7CisJICAgIH0gZWxzZSBpZiAoZmlsZXNpemUgPT0gKENLX09G Rl9UKS0yKSB7CisJCWlmICghcmVjdXJzaXZlKSB7CisJCSAgICBpZiAobnApIGZyZWUobnApOwor CQkgICAgaWYgKGQpIHsKKyNpZm5kZWYgTk9MQVNURklMRQorCQkJbWFrZXN0cigmbGFzdGZpbGUs dG1wbGFzdGZpbGUpOworI2VuZGlmCS8qIE5PTEFTVEZJTEUgKi8KKwkJCXJldHVybigwKTsKKwkJ ICAgIH0KKwkJICAgIGlmICgheGNtZmRiKQorCQkgICAgICBwcmludGYoIj9GaWxlIG5vdCByZWFk YWJsZSAtICVzXG4iLCp4cCk7CisjaWZkZWYgQ0tDSEFOTkVMSU8KKwkJICAgIHpfZXJyb3IgPSBG WF9BQ0M7CisjZW5kaWYgLyogQ0tDSEFOTkVMSU8gKi8KKwkJICAgIHJldHVybih4Y21mZGIgPyAt NiA6IC05KTsKKwkJfQorCSAgICB9IGVsc2UgaWYgKGZpbGVzaXplIDwgKENLX09GRl9UKTApIHsK KwkJaWYgKG5wKSBmcmVlKG5wKTsKKwkJaWYgKCFub21zZyAmJiAheGNtZmRiKQorCQkgIHByaW50 ZigiP0ZpbGUgbm90IGZvdW5kIC0gJXNcbiIsKnhwKTsKKyNpZmRlZiBDS0NIQU5ORUxJTworCQl6 X2Vycm9yID0gRlhfRk5GOworI2VuZGlmIC8qIENLQ0hBTk5FTElPICovCisJCXJldHVybih4Y21m ZGIgPyAtNiA6IC05KTsKKwkgICAgfQorCSAgICBpZiAobnApIGZyZWUobnApOworI2lmbmRlZiBO T0xBU1RGSUxFCisJICAgIG1ha2VzdHIoJmxhc3RmaWxlLHRtcGxhc3RmaWxlKTsKKyNlbmRpZgkv KiBOT0xBU1RGSUxFICovCisJICAgIHJldHVybih4KTsKKworI2lmbmRlZiBNQUMKKwkgIGNhc2Ug MjoJCQkvKiBFU0MgKi8KKwkgICAgZGVidWcoRjEwMSwiY21pZmkgZXNjLCB4YyIsIiIseGMpOwor CSAgICBpZiAoeGMgPT0gMCkgeworCQlpZiAoKnhkZWYpIHsKKwkJICAgIHByaW50ZigiJXMgIix4 ZGVmKTsgLyogSWYgYXQgYmVnaW5uaW5nIG9mIGZpZWxkICovCisjaWZkZWYgR0VNRE9TCisJCSAg ICBmZmx1c2goc3Rkb3V0KTsKKyNlbmRpZiAvKiBHRU1ET1MgKi8KKwkJICAgIGlud29yZCA9IGNt ZmxncyA9IDA7CisJCSAgICBhZGRidWYoeGRlZik7CS8qIFN1cHBseSBkZWZhdWx0LiAqLworCQkg ICAgaWYgKHNldGF0bSh4ZGVmLDApIDwgMCkgeworCQkJcHJpbnRmKCJEZWZhdWx0IG5hbWUgdG9v IGxvbmdcbiIpOworCQkJaWYgKG5wKSBmcmVlKG5wKTsKKwkJCXJldHVybigtOSk7CisJCSAgICB9 CisJCX0gZWxzZSB7CQkvKiBObyBkZWZhdWx0ICovCisJCSAgICBibGVlcChCUF9XQVJOKTsKKwkJ fQorCQlicmVhazsKKwkgICAgfQorCSAgICBpZiAoKip4cCA9PSAneycpIHsJCS8qIERpZCB1c2Vy IHR5cGUgb3BlbmluZyBicmFjZS4uLiAqLworCQkqeHAgPSAqeHAgKyAxOworCQl4Yy0tOworCQlj Yy0tOworCQlxZmxhZyA9ICd9JzsKKwkgICAgfSBlbHNlIGlmIChkYmxxdW8gJiYgKip4cCA9PSAn IicpIHsJLyogb3IgZG91YmxlcXVvdGU/ICovCisJCSp4cCA9ICp4cCArIDE7CQkvKiBJZiBzbyBp Z25vcmUgaXQgYW5kIHNwYWNlIHBhc3QgaXQgKi8KKwkJeGMtLTsKKwkJY2MtLTsKKwkJcWZsYWcg PSAnIic7CisJICAgIH0KKyNpZm5kZWYgTk9TUEwKKwkgICAgaWYgKGYpIHsJCQkvKiBJZiBhIGNv bnZlcnNpb24gZnVuY3Rpb24gaXMgZ2l2ZW4gKi8KKyNpZmRlZiBET0NIS1ZBUgorCQljaGFyICpz ID0gKnhwOwkJLyogU2VlIGlmIHRoZXJlIGFyZSBhbnkgdmFyaWFibGVzIGluICovCisJCXdoaWxl ICgqcykgewkJLyogdGhlIHN0cmluZyBhbmQgaWYgc28sIGV4cGFuZCBpdC4gICovCisJCSAgICBp ZiAoY2hrdmFyKHMpKSB7CisjZW5kaWYgLyogRE9DSEtWQVIgKi8KKwkJCXpxID0gYXR4YnVmOwor CQkJYXR4biA9IENNREJMOworCQkJaWYgKCh4ID0gKCpmKSgqeHAsJnpxLCZhdHhuKSkgPCAwKSB7 CisJCQkgICAgaWYgKG5wKSBmcmVlKG5wKTsKKwkJCSAgICByZXR1cm4oLTIpOworCQkJfQorI2lm ZGVmIERPQ0hLVkFSCisJCSAgICAvKiByZWR1Y2UgY2MgYnkgbnVtYmVyIG9mIFxcIGNvbnN1bWVk IGJ5IGNvbnZlcnNpb24gKi8KKwkJICAgIC8qIGZ1bmN0aW9uIChuZWVkZWQgZm9yIE9TLzIsIHdo ZXJlIFwgaXMgcGF0aCBzZXBhcmF0b3IpICovCisJCQljYyAtPSAoc3RybGVuKCp4cCkgLSBzdHJs ZW4oYXR4YnVmKSk7CisjZW5kaWYgLyogRE9DSEtWQVIgKi8KKwkJCSp4cCA9IGF0eGJ1ZjsKKwkJ CWlmICghYXR4YnVmWzBdKSB7IC8qIFJlc3VsdCBlbXB0eSwgdXNlIGRlZmF1bHQgKi8KKwkJCSAg ICAqeHAgPSB4ZGVmOworCQkJICAgIGNjID0gc3RybGVuKHhkZWYpOworCQkJfQorI2lmZGVmIERP Q0hLVkFSCisJCQlicmVhazsKKwkJICAgIH0KKwkJICAgIHMrKzsKKwkJfQorI2VuZGlmIC8qIERP Q0hLVkFSICovCisJICAgIH0KKyNlbmRpZiAvKiBOT1NQTCAqLworCisjaWZkZWYgRFRJTERFCisJ ICAgIGlmIChkaXJmbGcgJiYgKigqeHApID09ICd+JykgeworCQlkZWJ1ZyhGMTExLCJjbWlmaSB0 aWxkZV9leHBhbmQgQSIsKnhwLGNjKTsKKwkJZGlycCA9IHRpbGRlX2V4cGFuZCgqeHApOyAvKiBF eHBhbmQgdGlsZGUsIGlmIGFueS4uLiAqLworCQlpZiAoIWRpcnApIGRpcnAgPSAiIjsKKwkJaWYg KCpkaXJwKSB7CisJCSAgICBpbnQgaSwgeHg7CisJCSAgICBjaGFyICogc3A7CisJCSAgICB4YyA9 IGNjOwkJLyogTGVuZ3RoIG9mIH50aGluZyAqLworCQkgICAgeHggPSBzZXRhdG0oZGlycCwwKTsg LyogQ29weSBleHBhbnNpb24gdG8gYXRvbSBidWZmZXIgKi8KKwkJICAgIGRlYnVnKEYxMTEsImNt aWZpIHRpbGRlX2V4cGFuZCBCIixhdG1idWYsY2MpOworCQkgICAgaWYgKHh4IDwgMCkgeworCQkJ cHJpbnRmKCJFeHBhbmRlZCBuYW1lIHRvbyBsb25nXG4iKTsKKwkJCWlmIChucCkgZnJlZShucCk7 CisJCQlyZXR1cm4oLTkpOworCQkgICAgfQorCQkgICAgZGVidWcoRjExMSwiY21pZmkgdGlsZGVf ZXhwYW5kIHhjIiwiIix4Yyk7CisJCSAgICBmb3IgKGkgPSAwOyBpIDwgeGM7IGkrKykgeworCQkJ Y21kY2hhcmRlbCgpOwkvKiBCYWNrIHVwIG92ZXIgfnRoaW5nICovCisJCQlicC0tOworCQkgICAg fQorCQkgICAgeGMgPSBjYzsJCS8qIEhvdyBtYW55IG5ldyBvbmVzIHdlIGp1c3QgZ290ICovCisJ CSAgICBzcCA9IGF0bWJ1ZjsKKwkJICAgIHByaW50ZigiJXMiLHNwKTsJLyogUHJpbnQgdGhlbSAq LworCQkgICAgd2hpbGUgKCgqYnArKyA9ICpzcCsrKSkgOwkvKiBDb3B5IHRvIGNvbW1hbmQgYnVm ZmVyICovCisJCSAgICBicC0tOwkgICAgCSAgICAgICAgLyogQmFjayB1cCBvdmVyIE5VTCAqLwor CQl9CisJCSp4cCA9IGF0bWJ1ZjsKKwkgICAgfQorI2VuZGlmIC8qIERUSUxERSAqLworCisJICAg IHNwID0gKnhwICsgY2M7CisKKyNpZmRlZiBVTklYT1JPU0sKKwkgICAgaWYgKCFzdHJjbXAoYXRt YnVmLCIuLiIpKSB7CisJCXByaW50ZigiICIpOworCQlja3N0cm5jYXQoY21kYnVmLCIgIixDTURC TCk7CisJCWNjKys7CisJCWJwKys7CisJCSp3aWxkID0gMDsKKwkJKnhwID0gYXRtYnVmOworCQli cmVhazsKKwkgICAgfSBlbHNlIGlmICghc3RyY21wKGF0bWJ1ZiwiLiIpKSB7CisJCWJsZWVwKEJQ X1dBUk4pOworCQlpZiAobnApIGZyZWUobnApOworCQlyZXR1cm4oLTEpOworCSAgICB9IGVsc2Ug eworCQkvKiBUaGlzIHBhdGNoZXMgYSBnbGl0Y2ggd2hlbiB1c2VyIHR5cGVzICIuL2ZvbzxFU0M+ IiAqLworCQkvKiBpbiB3aGljaCB0aGUgbmV4dCB0d28gY2hhcnMgYXJlIG9taXR0ZWQgZnJvbSB0 aGUgKi8KKwkJLyogZXhwYW5zaW9uLiAgVGhlcmUgc2hvdWxkIGJlIGEgYmV0dGVyIGZpeCwgaG93 ZXZlciwgKi8KKwkJLyogc2luY2UgdGhlcmUgaXMgbm8gcHJvYmxlbSB3aXRoICIuLi9mb288RVND PiIuICovCisJCWNoYXIgKnAgPSAqeHA7CisJCWlmICgqcCA9PSAnLicgJiYgKihwKzEpID09ICcv JykKKwkJICBjYyAtPSAyOworCSAgICB9CisjZW5kaWYgLyogVU5JWE9ST1NLICovCisKKyNpZmRl ZiBkYXRhZ2VuZXJhbAorCSAgICAqc3ArKyA9ICcrJzsJCS8qIERhdGEgR2VuZXJhbCBBT1Mgd2ls ZGNhcmQgKi8KKyNlbHNlCisJICAgICpzcCsrID0gJyonOwkJLyogT3RoZXJzICovCisjZW5kaWYg LyogZGF0YWdlbmVyYWwgKi8KKwkgICAgKnNwLS0gPSAnXDAnOworI2lmZGVmIEdFTURPUworCSAg ICBpZiAoIXN0cmNocigqeHAsICcuJykpCS8qIGFiZGUuZSAtPiBhYmNkZS5lKiAqLworCSAgICAg IHN0cmNhdCgqeHAsICIuKiIpOwkvKiBhYmMgLT4gYWJjKi4qICovCisjZW5kaWYgLyogR0VNRE9T ICovCisJICAgIC8qIEFkZCB3aWxkY2FyZCBhbmQgZXhwYW5kIGxpc3QuICovCisjaWZkZWYgQ09N TUVOVAorCSAgICAvKiBUaGlzIGtpbGxzIHBhcnRpYWwgY29tcGxldGlvbiB3aGVuIEVTQyBnaXZl biBpbiBwYXRoIHNlZ21lbnQgKi8KKwkgICAgbnp4b3B0cyB8PSBkaXJmbGcgPyBaWF9ESVJPTkxZ IDogKGQgPyAwIDogWlhfRklMT05MWSk7CisjZWxzZQorCSAgICAvKiBuenhvcHRzID0gMDsgKi8K KyNlbmRpZiAvKiBDT01NRU5UICovCisJICAgIGlmIChtYXRjaGRvdCkgIG56eG9wdHMgfD0gWlhf TUFUQ0hET1Q7CisJICAgIGlmIChyZWN1cnNpdmUpIG56eG9wdHMgfD0gWlhfUkVDVVJTRTsKKwkg ICAgeSA9IG56eHBhbmQoKnhwLG56eG9wdHMpOworCSAgICBuZmlsZXMgPSB5OworCSAgICBkZWJ1 ZyhGMTExLCJjbWlmaSBuenhwYW5kIiwqeHAseSk7CisJICAgIGlmICh5ID4gMCkgeworI2lmZGVm IE9TMgorICAgICAgICAgICAgICAgIHpuZXh0KGZpbGJ1Zik7CQkvKiBHZXQgZmlyc3QgKi8KKyNp ZmRlZiBaWFJFV0lORAorCQl6eHJld2luZCgpOwkJLyogTXVzdCAicmV3aW5kIiAqLworI2Vsc2UK KwkJbnp4cGFuZCgqeHAsbnh6b3B0cyk7CisjZW5kaWYgLyogWlhSRVdJTkQgKi8KKyNlbHNlICAv KiBOb3QgT1MyICovCisgICAgICAgICAgICAgICAgY2tzdHJuY3B5KGZpbGJ1ZixtdGNoc1swXSxD S01BWFBBVEgpOworI2VuZGlmIC8qIE9TMiAqLworCSAgICB9IGVsc2UKKwkgICAgICAqZmlsYnVm ID0gJ1wwJzsKKwkgICAgZmlsYnVmW0NLTUFYUEFUSF0gPSBOVUw7CisJICAgICpzcCA9ICdcMCc7 CQkJLyogUmVtb3ZlIHdpbGRjYXJkLiAqLworCSAgICBkZWJ1ZyhGMTExLCJjbWlmaSBmaWxidWYi LGZpbGJ1Zix5KTsKKwkgICAgZGVidWcoRjExMSwiY21pZmkgKnhwIiwqeHAsY2MpOworCisJICAg ICp3aWxkID0gKHkgPiAxKTsKKwkgICAgaWYgKHkgPT0gMCkgeworCQlpZiAoIW5vbXNnKSB7Cisj aWZkZWYgQ0tST09UCisJCSAgICBpZiAoY2tyb290ZXJyKQorCQkgICAgICBwcmludGYoIj9PZmYg TGltaXRzOiAlc1xuIixhdG1idWYpOworCQkgICAgZWxzZQorI2VuZGlmIC8qIENLUk9PVCAqLwor CQkgICAgICBwcmludGYoIj9ObyAlcyBtYXRjaCAtICVzXG4iLAorCQkJICAgZGlyZmxnID8gImRp cmVjdG9yaWVzIiA6ICJmaWxlcyIsIGF0bWJ1Zik7CisJCSAgICBpZiAobnApIGZyZWUobnApOwor CQkgICAgcmV0dXJuKC05KTsKKwkJfSBlbHNlIHsKKwkJICAgIGJsZWVwKEJQX1dBUk4pOworCQkg ICAgaWYgKG5wKSBmcmVlKG5wKTsKKwkJICAgIHJldHVybigtMSk7CisJCX0KKwkgICAgfSBlbHNl IGlmICh5IDwgMCkgeworI2lmZGVmIENLUk9PVAorCQlpZiAoY2tyb290ZXJyKQorCQkgIHByaW50 ZigiP09mZiBMaW1pdHM6ICVzXG4iLGF0bWJ1Zik7CisJCWVsc2UKKyNlbmRpZiAvKiBDS1JPT1Qg Ki8KKwkJICBwcmludGYoIj9Ub28gbWFueSAlcyBtYXRjaCAtICVzXG4iLAorCQkJIGRpcmZsZyA/ ICJkaXJlY3RvcmllcyIgOiAiZmlsZXMiLCBhdG1idWYpOworCQlpZiAobnApIGZyZWUobnApOwor CQlyZXR1cm4oLTkpOworCSAgICB9IGVsc2UgaWYgKHkgPiAxCQkvKiBOb3QgdW5pcXVlICovCisj aWZuZGVmIFZNUworCQkgICAgICAgfHwgKHkgPT0gMSAmJiBpc2RpcihmaWxidWYpKSAvKiBVbmlx dWUgZGlyZWN0b3J5ICovCisjZW5kaWYgLyogVk1TICovCisJCSAgICAgICApIHsKKyNpZm5kZWYg Tk9QQVJUSUFMCisvKiBQYXJ0aWFsIGZpbGVuYW1lIGNvbXBsZXRpb24gKi8KKwkJaW50IGosIGs7 IGNoYXIgYzsKKwkJayA9IDA7CisJCWRlYnVnKEYxMTEsImNtaWZpIHBhcnRpYWwiLGZpbGJ1Zixj Yyk7CisjaWZkZWYgT1MyCisJCXsKKwkJICAgIGludCBjdXIgPSAwLAorCQkgICAgbGVuID0gMCwK KwkJICAgIGxlbjIgPSAwLAorCQkgICAgbWluID0gc3RybGVuKGZpbGJ1ZiksCisJCSAgICBmb3Vu ZCA9IDA7CisJCSAgICBjaGFyIGxvY2FsZm5bQ0tNQVhQQVRIKzFdOworCisJCSAgICBsZW4gPSBt aW47CisJCSAgICBmb3IgKGogPSAxOyBqIDw9IHk7IGorKykgeworCQkJem5leHQobG9jYWxmbik7 CisJCQlpZiAoZGlyZmxnICYmICFpc2Rpcihsb2NhbGZuKSkKKwkJCSAgY29udGludWU7CisJCQlm b3VuZCA9IDE7CisJCQlsZW4yID0gc3RybGVuKGxvY2FsZm4pOworCQkJZm9yIChjdXIgPSBjYzsK KwkJCSAgICAgY3VyIDwgbGVuICYmIGN1ciA8IGxlbjIgJiYgY3VyIDw9IG1pbjsKKwkJCSAgICAg Y3VyKysKKwkJCSAgICAgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogT1MvMiBv ciBXaW5kb3dzLCBjYXNlIGRvZXNuJ3QgbWF0dGVyICovCisJCQkgICAgaWYgKHRvbG93ZXIoZmls YnVmW2N1cl0pICE9IHRvbG93ZXIobG9jYWxmbltjdXJdKSkKKwkJCSAgICAgIGJyZWFrOworCQkJ fQorCQkJaWYgKGN1ciA8IG1pbikKKwkJCSAgbWluID0gY3VyOworCQkgICAgfQorCQkgICAgaWYg KCFmb3VuZCkKKwkJICAgICAgbWluID0gY2M7CisJCSAgICBmaWxidWZbbWluXSA9IE5VTDsKKwkJ ICAgIGlmIChtaW4gPiBjYykKKwkJICAgICAgaysrOworCQl9CisjZWxzZSAvKiBPUzIgKi8KKwkJ Zm9yIChpID0gY2M7IChjID0gZmlsYnVmW2ldKTsgaSsrKSB7CisJCSAgICBmb3IgKGogPSAxOyBq IDwgeTsgaisrKQorCQkgICAgICBpZiAobXRjaHNbal1baV0gIT0gYykgYnJlYWs7CisJCSAgICBp ZiAoaiA9PSB5KSBrKys7CisJCSAgICBlbHNlIGZpbGJ1ZltpXSA9IGZpbGJ1ZltpKzFdID0gTlVM OworCQl9CisjZW5kaWYgLyogT1MyICovCisKKworI2lmbmRlZiBWTVMKKwkJLyogaXNkaXIoKSBm dW5jdGlvbiByZXF1aXJlZCBmb3IgdGhpcyEgKi8KKwkJaWYgKHkgPT0gMSAmJiBpc2RpcihmaWxi dWYpKSB7IC8qIERvbnQgd2UgYWxyZWFkeSBrbm93IHRoaXM/ICovCisJCSAgICBpbnQgbGVuOwor CQkgICAgbGVuID0gc3RybGVuKGZpbGJ1Zik7CisJCSAgICBpZiAobGVuID4gMCAmJiBsZW4gPCBB VE1CTCAtIDEpIHsKKwkJCWlmIChmaWxidWZbbGVuLTFdICE9IGRpcnNlcCkgeworCQkJICAgIGZp bGJ1ZltsZW5dID0gZGlyc2VwOworCQkJICAgIGZpbGJ1ZltsZW4rMV0gPSBOVUw7CisJCQl9CisJ CSAgICB9CisvKgorICBBdCB0aGlzIHBvaW50LCBiZWZvcmUganVzdCBkb2luZyBwYXJ0aWFsIGNv bXBsZXRpb24sIHdlIHNob3VsZCBsb29rIGZpcnN0IHRvCisgIHNlZSBpZiB0aGUgZ2l2ZW4gZGly ZWN0b3J5IGRvZXMgaW5kZWVkIGhhdmUgYW55IHN1YmRpcmVjdG9yaWVzIChkaXJmbGcpIG9yCisg IGZpbGVzICghZGlyZmxnKTsgaWYgaXQgZG9lc24ndCB3ZSBzaG91bGQgZG8gZnVsbCBjb21wbGV0 aW9uLiAgT3RoZXJ3aXNlLCB0aGUKKyAgcmVzdWx0IGxvb2tzIGZ1bm55IHRvIHRoZSB1c2VyIGFu ZCAiPyIgYmxvd3MgdXAgdGhlIGNvbW1hbmQgZm9yIG5vIGdvb2QKKyAgcmVhc29uLgorKi8KKwkJ ICAgIHsKKwkJCWludCBmbGFncyA9IDA7CisJCQlmaWxidWZbbGVuKzFdID0gJyonOworCQkJZmls YnVmW2xlbisyXSA9IE5VTDsKKwkJCWlmIChkaXJmbGcpIGZsYWdzID0gWlhfRElST05MWTsKKwkJ CWNoaWxkcmVuID0gbnp4cGFuZChmaWxidWYsZmxhZ3MpOworCQkJZGVidWcoRjExMSwiY21pZmkg Y2hpbGRyZW4iLGZpbGJ1ZixjaGlsZHJlbik7CisJCQlmaWxidWZbbGVuKzFdID0gTlVMOworCQkJ bnp4cGFuZChmaWxidWYsZmxhZ3MpOyAvKiBSZXN0b3JlIHByZXZpb3VzIGxpc3QgKi8KKwkJCWlm IChjaGlsZHJlbiA9PSAwKQorCQkJICBnb3RvIE5PU1VCRElSUzsKKwkJICAgIH0KKwkJICAgIGlm IChsZW4gKyAxID4gY2MpCisJCSAgICAgIGsrKzsKKwkJfQorICAgICAgICAgICAgICAgIC8qIEFk ZCBkb3VibGVxdW90ZXMgaWYgdGhlcmUgYXJlIHNwYWNlcyBpbiB0aGUgbmFtZSAqLworCQl7CisJ CSAgICBpbnQgeDsKKwkJICAgIGlmIChxZmxhZykgeworCQkJeCA9IChxZmxhZyA9PSAnfScpOyAv KiAob3IgYnJhY2VzKSAqLworCQkgICAgfSBlbHNlIHsKKwkJCXggPSAhZGJscXVvOworCQkgICAg fQorCQkgICAgaWYgKGZpbGJ1ZlswXSAhPSAnIicgJiYgZmlsYnVmWzBdICE9ICd7JykKKwkJICAg ICAgayA9IGRxdW90ZShmaWxidWYsQVRNQkwseCk7CisJCX0KKyNlbmRpZiAvKiBWTVMgKi8KKwkJ ZGVidWcoRjExMSwiY21pZmkgUkVQQUlOVCBmaWxidWYiLGZpbGJ1ZixrKTsKKwkJaWYgKGsgPiAw KSB7CQkvKiBHb3QgbW9yZSBjaGFyYWN0ZXJzICovCisJCSAgICBkZWJ1ZyhGMTAxLCJjbWlmaSBS RVBBSU5UIGNjIiwiIixjYyk7CisJCSAgICBkZWJ1ZyhGMTAxLCJjbWlmaSBSRVBBSU5UIHhjIiwi Iix4Yyk7CisJCSAgICBkZWJ1ZyhGMTEwLCJjbWlmaSBSRVBBSU5UIGJwLWNjIixicC1jYywwKTsK KwkJICAgIGRlYnVnKEYxMTAsImNtaWZpIFJFUEFJTlQgYnAteGMiLGJwLXhjLDApOworCQkgICAg c3AgPSBmaWxidWYgKyBjYzsJLyogUG9pbnQgdG8gbmV3IG9uZXMgKi8KKwkJICAgIGlmIChxZmxh ZyB8fCBzdHJuY21wKGZpbGJ1ZixicC1jYyxjYykpIHsgLyogUmVwYWludD8gKi8KKwkJCWludCB4 OworCQkJeCA9IGNjOworCQkJaWYgKHFmbGFnKSB4Kys7CisJCQlmb3IgKGkgPSAwOyBpIDwgeDsg aSsrKSB7CisJCQkgICAgY21kY2hhcmRlbCgpOyAvKiBCYWNrIHVwIG92ZXIgb2xkIHBhcnRpYWwg c3BlYyAqLworCQkJICAgIGJwLS07CisJCQl9CisJCQlzcCA9IGZpbGJ1ZjsJLyogUG9pbnQgdG8g bmV3IHdvcmQgc3RhcnQgKi8KKwkJCWRlYnVnKEYxMTAsImNtaWZpIGVyYXNlIG9rIixzcCwwKTsK KwkJICAgIH0KKwkJICAgIGNjID0gazsJCS8qIEhvdyBtYW55IG5ldyBvbmVzIHdlIGp1c3QgZ290 ICovCisJCSAgICBwcmludGYoIiVzIixzcCk7CS8qIFByaW50IHRoZW0gKi8KKwkJICAgIHdoaWxl ICgoKmJwKysgPSAqc3ArKykpIDsJLyogQ29weSB0byBjb21tYW5kIGJ1ZmZlciAqLworCQkgICAg YnAtLTsJICAgIAkgICAgICAgIC8qIEJhY2sgdXAgb3ZlciBOVUwgKi8KKwkJICAgIGRlYnVnKEYx MTAsImNtaWZpIHBhcnRpYWwgY21kYnVmIixjbWRidWYsMCk7CisJCSAgICBpZiAoc2V0YXRtKGZp bGJ1ZiwwKSA8IDApIHsKKwkJCXByaW50ZigiP1BhcnRpYWwgbmFtZSB0b28gbG9uZ1xuIik7CisJ CQlpZiAobnApIGZyZWUobnApOworCQkJcmV0dXJuKC05KTsKKwkJICAgIH0KKwkJICAgIGRlYnVn KEYxMTEsImNtaWZpIHBhcnRpYWwgYXRtYnVmIixhdG1idWYsY2MpOworCQkgICAgKnhwID0gYXRt YnVmOworCQl9CisjZW5kaWYgLyogTk9QQVJUSUFMICovCisJCWJsZWVwKEJQX1dBUk4pOworCSAg ICB9IGVsc2UgewkJCS8qIFVuaXF1ZSwgY29tcGxldGUgaXQuICAqLworI2lmbmRlZiBWTVMKKyNp ZmRlZiBDS19UTVBESVIKKwkJLyogaXNkaXIoKSBmdW5jdGlvbiByZXF1aXJlZCBmb3IgdGhpcyEg Ki8KKwkgICAgICBOT1NVQkRJUlM6CisJCWRlYnVnKEYxMTEsImNtaWZpIHVuaXF1ZSIsZmlsYnVm LGNoaWxkcmVuKTsKKwkJaWYgKGlzZGlyKGZpbGJ1ZikgJiYgY2hpbGRyZW4gPiAwKSB7CisJCSAg ICBpbnQgbGVuOworCQkgICAgbGVuID0gc3RybGVuKGZpbGJ1Zik7CisJCSAgICBpZiAobGVuID4g MCAmJiBsZW4gPCBBVE1CTCAtIDEpIHsKKwkJCWlmIChmaWxidWZbbGVuLTFdICE9IGRpcnNlcCkg eworCQkJICAgIGZpbGJ1ZltsZW5dID0gZGlyc2VwOworCQkJICAgIGZpbGJ1ZltsZW4rMV0gPSBO VUw7CisJCQl9CisJCSAgICB9CisJCSAgICBzcCA9IGZpbGJ1ZiArIGNjOworCQkgICAgYmxlZXAo QlBfV0FSTik7CisJCSAgICBwcmludGYoIiVzIixzcCk7CisJCSAgICBjYysrOworCQkgICAgd2hp bGUgKCgqYnArKyA9ICpzcCsrKSkgOworCQkgICAgYnAtLTsKKwkJICAgIGlmIChzZXRhdG0oZmls YnVmLDApIDwgMCkgeworCQkJcHJpbnRmKCI/RGlyZWN0b3J5IG5hbWUgdG9vIGxvbmdcbiIpOwor CQkJaWYgKG5wKSBmcmVlKG5wKTsKKwkJCXJldHVybigtOSk7CisJCSAgICB9CisJCSAgICBkZWJ1 ZyhGMTExLCJjbWlmaSBkaXJlY3RvcnkgYXRtYnVmIixhdG1idWYsY2MpOworCQkgICAgKnhwID0g YXRtYnVmOworCQl9IGVsc2UgewkJLyogTm90IGEgZGlyZWN0b3J5IG9yIGRpcmZsZyAqLworI2Vu ZGlmIC8qIENLX1RNUERJUiAqLworI2VuZGlmIC8qIFZNUyAqLworI2lmbmRlZiBWTVMJCQkJLyog Vk1TIGRpciBuYW1lcyBhcmUgc3BlY2lhbCAqLworI2lmbmRlZiBkYXRhZ2VuZXJhbAkJCS8qIFZT IGRpcm5hbWVzIG11c3Qgbm90IGVuZCBpbiAiOiIgKi8KKwkJICAgIGlmIChkaXJmbGcpIHsKKwkJ CWludCBsZW47CisJCQlsZW4gPSBzdHJsZW4oZmlsYnVmKTsKKwkJCWlmIChsZW4gPiAwICYmIGxl biA8IEFUTUJMIC0gMSkgeworCQkJICAgIGlmIChmaWxidWZbbGVuLTFdICE9IGRpcnNlcCkgewor CQkJCWZpbGJ1ZltsZW5dID0gZGlyc2VwOworCQkJCWZpbGJ1ZltsZW4rMV0gPSBOVUw7CisJCQkg ICAgfQorCQkJfQorCQkgICAgfQorI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCisjZW5kaWYgLyog Vk1TICovCisJCSAgICBzcCA9IGZpbGJ1ZiArIGNjOwkvKiBQb2ludCBwYXN0IHdoYXQgdXNlciB0 eXBlZC4gKi8KKwkJICAgIHsKKwkJCWludCB4OworCQkJaWYgKHFmbGFnKSB7CisJCQkgICAgeCA9 IChxZmxhZyA9PSAnfScpOworCQkJfSBlbHNlIHsKKwkJCSAgICB4ID0gIWRibHF1bzsKKwkJCX0K KwkJCWlmIChmaWxidWZbMF0gIT0gJyInICYmIGZpbGJ1ZlswXSAhPSAneycpCisJCQkgIGRxdW90 ZShmaWxidWYsQVRNQkwseCk7CisJCSAgICB9CisJCSAgICBpZiAocWZsYWcgfHwgc3RybmNtcChm aWxidWYsYnAtY2MsY2MpKSB7IC8qIFJlcGFpbnQ/ICovCisJCQlpbnQgeDsKKwkJCXggPSBjYzsK KwkJCWlmIChxZmxhZykgeCsrOworCQkJZm9yIChpID0gMDsgaSA8IHg7IGkrKykgeworCQkJICAg IGNtZGNoYXJkZWwoKTsgLyogQmFjayB1cCBvdmVyIG9sZCBwYXJ0aWFsIHNwZWMgKi8KKwkJCSAg ICBicC0tOworCQkJfQorCQkJc3AgPSBmaWxidWY7CS8qIFBvaW50IHRvIG5ldyB3b3JkIHN0YXJ0 ICovCisJCQlkZWJ1ZyhGMTExLCJjbWlmaSBhZnRlciBlcmFzZSBzcD0iLHNwLGNjKTsKKwkJICAg IH0KKwkJICAgIHByaW50ZigiJXMgIixzcCk7CS8qIFByaW50IHRoZSBjb21wbGV0ZWQgbmFtZS4g Ki8KKyNpZmRlZiBHRU1ET1MKKwkJICAgIGZmbHVzaChzdGRvdXQpOworI2VuZGlmIC8qIEdFTURP UyAqLworCQkgICAgYWRkYnVmKHNwKTsJCS8qIEFkZCB0aGUgY2hhcmFjdGVycyB0byBjbWRidWYu ICovCisJCSAgICBpZiAoc2V0YXRtKGZpbGJ1ZiwwKSA8IDApIHsgLyogQW5kIHRvIGF0bWJ1Zi4g Ki8KKwkJCXByaW50ZigiP0NvbXBsZXRlZCBuYW1lIHRvbyBsb25nXG4iKTsKKwkJCWlmIChucCkg ZnJlZShucCk7CisJCQlyZXR1cm4oLTkpOworCQkgICAgfQorCQkgICAgaW53b3JkID0gY21mbGdz ID0gMDsKKwkJICAgICp4cCA9IGJyc3RyaXAoYXRtYnVmKTsgLyogUmV0dXJuIHBvaW50ZXIgdG8g YXRtYnVmLiAqLworCQkgICAgaWYgKGRpcmZsZyAmJiAhaXNkaXIoKnhwKSkgeworCQkJcHJpbnRm KCI/Tm90IGEgZGlyZWN0b3J5IC0gJXNcbiIsIGZpbGJ1Zik7CisJCQlpZiAobnApIGZyZWUobnAp OworCQkJcmV0dXJuKC05KTsKKwkJICAgIH0KKwkJICAgIGlmIChucCkgZnJlZShucCk7CisjaWZu ZGVmIE5PTEFTVEZJTEUKKwkJICAgIG1ha2VzdHIoJmxhc3RmaWxlLHRtcGxhc3RmaWxlKTsKKyNl bmRpZgkvKiBOT0xBU1RGSUxFICovCisJCSAgICByZXR1cm4oMCk7CisjaWZuZGVmIFZNUworI2lm ZGVmIENLX1RNUERJUgorCQl9CisjZW5kaWYgLyogQ0tfVE1QRElSICovCisjZW5kaWYgLyogVk1T ICovCisJICAgIH0KKwkgICAgYnJlYWs7CisKKwkgIGNhc2UgMzoJCQkvKiBRdWVzdGlvbiBtYXJr IC0gZmlsZSBtZW51IHdhbnRlZCAqLworCSAgICBpZiAoKnhobHAgPT0gTlVMKQorCSAgICAgIHBy aW50ZihkaXJmbGcgPyAiIERpcmVjdG9yeSBuYW1lIiA6ICIgSW5wdXQgZmlsZSBzcGVjaWZpY2F0 aW9uIik7CisJICAgIGVsc2UKKwkgICAgICBwcmludGYoIiAlcyIseGhscCk7CisjaWZkZWYgR0VN RE9TCisJICAgIGZmbHVzaChzdGRvdXQpOworI2VuZGlmIC8qIEdFTURPUyAqLworCSAgICAvKiBJ ZiB1c2VyIHR5cGVkIGFuIG9wZW5pbmcgcXVvdGUgb3IgYnJhY2UsIGp1c3Qgc2tpcCBwYXN0IGl0 ICovCisKKwkgICAgaWYgKCoqeHAgPT0gJyInIHx8ICoqeHAgPT0gJ3snKSB7CisJCSp4cCA9ICp4 cCArIDE7CisJCXhjLS07CisJCWNjLS07CisJICAgIH0KKyNpZm5kZWYgTk9TUEwKKwkgICAgaWYg KGYpIHsJCQkvKiBJZiBhIGNvbnZlcnNpb24gZnVuY3Rpb24gaXMgZ2l2ZW4gKi8KKyNpZmRlZiBE T0NIS1ZBUgorCQljaGFyICpzID0gKnhwOwkJLyogU2VlIGlmIHRoZXJlIGFyZSBhbnkgdmFyaWFi bGVzIGluICovCisJCXdoaWxlICgqcykgewkJLyogdGhlIHN0cmluZyBhbmQgaWYgc28sIGV4cGFu ZCB0aGVtICovCisJCSAgICBpZiAoY2hrdmFyKHMpKSB7CisjZW5kaWYgLyogRE9DSEtWQVIgKi8K KwkJCXpxID0gYXR4YnVmOworCQkJYXR4biA9IENNREJMOworCQkJaWYgKCh4ID0gKCpmKSgqeHAs JnpxLCZhdHhuKSkgPCAwKSB7CisJCQkgICAgaWYgKG5wKSBmcmVlKG5wKTsKKwkJCSAgICByZXR1 cm4oLTIpOworCQkJfQorI2lmZGVmIERPQ0hLVkFSCisJCSAgICAvKiByZWR1Y2UgY2MgYnkgbnVt YmVyIG9mIFxcIGNvbnN1bWVkIGJ5IGNvbnZlcnNpb24gKi8KKwkJICAgIC8qIGZ1bmN0aW9uIChu ZWVkZWQgZm9yIE9TLzIsIHdoZXJlIFwgaXMgcGF0aCBzZXBhcmF0b3IpICovCisJCQljYyAtPSAo c3RybGVuKCp4cCkgLSBzdHJsZW4oYXR4YnVmKSk7CisjZW5kaWYgLyogRE9DSEtWQVIgKi8KKwkJ CSp4cCA9IGF0eGJ1ZjsKKyNpZmRlZiBET0NIS1ZBUgorCQkJYnJlYWs7CisJCSAgICB9CisJCSAg ICBzKys7CisJCX0KKyNlbmRpZiAvKiBET0NIS1ZBUiAqLworCSAgICB9CisjZW5kaWYgLyogTk9T UEwgKi8KKwkgICAgZGVidWcoRjExMSwiY21pZmkgPyAqeHAsIGNjIiwqeHAsY2MpOworCSAgICBz cCA9ICp4cCArIGNjOwkJLyogSW5zZXJ0ICIqIiBhdCBlbmQgKi8KKyNpZmRlZiBkYXRhZ2VuZXJh bAorCSAgICAqc3ArKyA9ICcrJzsJCS8qIEluc2VydCArLCB0aGUgREcgd2lsZCBjYXJkICovCisj ZWxzZQorCSAgICAqc3ArKyA9ICcqJzsKKyNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLworCSAgICAq c3AtLSA9ICdcMCc7CisjaWZkZWYgR0VNRE9TCisJICAgIGlmICghIHN0cmNocigqeHAsICcuJykp CS8qIGFiZGUuZSAtPiBhYmNkZS5lKiAqLworCSAgICAgIHN0cmNhdCgqeHAsICIuKiIpOwkvKiBh YmMgLT4gYWJjKi4qICovCisjZW5kaWYgLyogR0VNRE9TICovCisJICAgIGRlYnVnKEYxMTAsImNt aWZpID8gd2lsZCIsKnhwLDApOworCisJICAgIG56eG9wdHMgfD0gZGlyZmxnID8gWlhfRElST05M WSA6IChkID8gMCA6IFpYX0ZJTE9OTFkpOworCisJICAgIGRlYnVnKEYxMDEsImNtaWZpIG1hdGNo ZG90IiwiIixtYXRjaGRvdCk7CisJICAgIGlmIChtYXRjaGRvdCkgIG56eG9wdHMgfD0gWlhfTUFU Q0hET1Q7CisJICAgIGlmIChyZWN1cnNpdmUpIG56eG9wdHMgfD0gWlhfUkVDVVJTRTsKKwkgICAg eSA9IG56eHBhbmQoKnhwLG56eG9wdHMpOworCSAgICBuZmlsZXMgPSB5OworCSAgICAqc3AgPSAn XDAnOworCSAgICBpZiAoeSA9PSAwKSB7CisJCWlmIChub21zZykgeworCQkgICAgcHJpbnRmKCI6 ICVzXG4iLGF0bWJ1Zik7CisJCSAgICBwcmludGYoIiVzJXMiLGNtcHJvbSxjbWRidWYpOworCQkg ICAgZmZsdXNoKHN0ZG91dCk7CisJCSAgICBpZiAobnApIGZyZWUobnApOworCQkgICAgcmV0dXJu KC0xKTsKKwkJfSBlbHNlIHsKKyNpZmRlZiBDS1JPT1QKKwkJICAgIGlmIChja3Jvb3RlcnIpCisJ CSAgICAgIHByaW50ZigiP09mZiBMaW1pdHM6ICVzXG4iLGF0bWJ1Zik7CisJCSAgICBlbHNlCisj ZW5kaWYgLyogQ0tST09UICovCisJCSAgICAgIHByaW50ZigiP05vICVzIG1hdGNoIC0gJXNcbiIs CisJCQkgICAgIGRpcmZsZyA/ICJkaXJlY3RvcmllcyIgOiAiZmlsZXMiLCBhdG1idWYpOworCQkg ICAgaWYgKG5wKSBmcmVlKG5wKTsKKwkJICAgIHJldHVybigtOSk7CisJCX0KKwkgICAgfSBlbHNl IGlmICh5IDwgMCkgeworI2lmZGVmIENLUk9PVAorCQlpZiAoY2tyb290ZXJyKQorCQkgIHByaW50 ZigiP09mZiBMaW1pdHM6ICVzXG4iLGF0bWJ1Zik7CisJCWVsc2UKKyNlbmRpZiAvKiBDS1JPT1Qg Ki8KKwkJICBwcmludGYoIj9Ub28gbWFueSAlcyBtYXRjaCAtICVzXG4iLAorCQkJIGRpcmZsZyA/ ICJkaXJlY3RvcmllcyIgOiAiZmlsZXMiLCBhdG1idWYpOworCQlpZiAobnApIGZyZWUobnApOwor CQlyZXR1cm4oLTkpOworCSAgICB9IGVsc2UgeworCQlwcmludGYoIiwgb25lIG9mIHRoZSBmb2xs b3dpbmc6XG4iKTsKKwkJaWYgKGZpbGhlbHAoKGludCl5LCIiLCIiLDEsZGlyZmxnKSA8IDApIHsK KwkJICAgIGlmIChucCkgZnJlZShucCk7CisJCSAgICByZXR1cm4oLTkpOworCQl9CisJICAgIH0K KwkgICAgcHJpbnRmKCIlcyVzIixjbXByb20sY21kYnVmKTsKKwkgICAgZmZsdXNoKHN0ZG91dCk7 CisJICAgIGJyZWFrOworI2VuZGlmIC8qIE1BQyAqLworCX0KKyNpZmRlZiBCU19ESVJTRVAKKyAg ICAgICAgZGlybmFtZmxnID0gMTsKKyAgICAgICAgeCA9IGd0d29yZCgwKTsgICAgICAgICAgICAg ICAgICAvKiBObywgZ2V0IGEgd29yZCAqLworCWRpcm5hbWZsZyA9IDA7CisjZWxzZQorICAgICAg ICB4ID0gZ3R3b3JkKDApOyAgICAgICAgICAgICAgICAgIC8qIE5vLCBnZXQgYSB3b3JkICovCisj ZW5kaWYgLyogQlNfRElSU0VQICovCisJKnhwID0gYXRtYnVmOworICAgIH0KK30KKworLyogIEMg TSBGIEwgRCAgLS0gIFBhcnNlIGFuIGFyYml0cmFyeSBmaWVsZCAgKi8KKy8qCisgIFJldHVybnM6 CisgICAgLTMgaWYgbm8gaW5wdXQgcHJlc2VudCB3aGVuIHJlcXVpcmVkLAorICAgIC0yIGlmIGZp ZWxkIHRvbyBiaWcgZm9yIGJ1ZmZlciwKKyAgICAtMSBpZiByZXBhcnNlIG5lZWRlZCwKKyAgICAg MCBvdGhlcndpc2UsIHhwIHBvaW50aW5nIHRvIHN0cmluZyByZXN1bHQuCisKKyAgTk9URTogR2xv YmFsIGZsYWcga2VlcGFsbGNoYXJzIHNheXMgd2hldGhlciB0aGlzIHJvdXRpbmUgc2hvdWxkIGJy ZWFrIG9uIENSCisgIG9yIExGOiBuZWVkZWQgZm9yIE1JTlBVVCB0YXJnZXRzIGFuZCBERUNMQVJF IGluaXRpYWxpemVycywgd2hlcmUgd2Ugd2FudCB0bworICBrZWVwIGNvbnRyb2wgY2hhcmFjdGVy cyBpZiB0aGUgdXNlciBzcGVjaWZpZXMgdGhlbSAoTWFyY2ggMjAwMykuICBJdCBtaWdodAorICBo YXZlIGJlZW4gYmV0dGVyIHRvIGNoYW5nZSB0aGUgY2FsbGluZyBzZXF1ZW5jZSBidXQgdGhhdCB3 YXMgbm90IHByYWN0aWNhbC4KKyovCitpbnQKK2NtZmxkKHhobHAseGRlZix4cCxmKSBjaGFyICp4 aGxwLCAqeGRlZiwgKip4cDsgeHhfc3RycCBmOyB7CisgICAgaW50IHgsIHhjOworICAgIGNoYXIg KnpxOworCisgICAgaW53b3JkID0gMDsJCQkJLyogSW5pdGlhbGl6ZSBjb3VudHMgJiBwb2ludGVy cyAqLworICAgIGNjID0gMDsKKyAgICB4YyA9IDA7CisgICAgKnhwID0gIiI7CisKKyAgICBkZWJ1 ZyhGMTEwLCJjbWZsZCB4ZGVmIDEiLHhkZWYsMCk7CisKKyAgICBpZiAoIXhobHApIHhobHAgPSAi IjsKKyAgICBpZiAoIXhkZWYpIHhkZWYgPSAiIjsKKyAgICBja3N0cm5jcHkoY21kZWZhdWx0LHhk ZWYsQ01ERUZBVUxUKTsgLyogQ29weSBkZWZhdWx0ICovCisgICAgeGRlZiA9IGNtZGVmYXVsdDsK KworICAgIGRlYnVnKEYxMTEsImNtZmxkIHhkZWYgMiIseGRlZixjbWZsZ3MpOworICAgIGRlYnVn KEYxMTEsImNtZmxkIGF0bWJ1ZiAxIixhdG1idWYseGMpOworCisgICAgaWYgKCh4ID0gY21mbGdz KSAhPSAxKSB7ICAgICAgICAgICAgLyogQWxyZWFkeSBjb25maXJtZWQ/ICovCisgICAgICAgIHgg PSBndHdvcmQoMCk7ICAgICAgICAgICAgICAgICAgLyogTm8sIGdldCBhIHdvcmQgKi8KKyAgICB9 IGVsc2UgeworCWlmIChzZXRhdG0oeGRlZiwwKSA8IDApIHsJLyogSWYgc28sIHVzZSBkZWZhdWx0 LCBpZiBhbnkuICovCisJICAgIHByaW50ZigiP0RlZmF1bHQgdG9vIGxvbmdcbiIpOworCSAgICBy ZXR1cm4oLTkpOworCX0KKyAgICB9CisgICAgKnhwID0gYXRtYnVmOyAgICAgICAgICAgICAgICAg ICAgICAgLyogUG9pbnQgdG8gcmVzdWx0LiAqLworICAgIGRlYnVnKEYxMTEsImNtZmxkIGF0bWJ1 ZiAyIixhdG1idWYsY21mbGdzKTsKKworICAgIHdoaWxlICgxKSB7CisgICAgICAgIHhjICs9IGNj OyAgICAgICAgICAgICAgICAgICAgICAgLyogQ291bnQgdGhlIGNoYXJhY3RlcnMuICovCisgICAg ICAgIGRlYnVnKEYxMTEsImNtZmxkIGd0d29yZCIsYXRtYnVmLHhjKTsKKyAgICAgICAgZGVidWco RjEwMSwiY21mbGQgeCIsIiIseCk7CisgICAgICAgIHN3aXRjaCAoeCkgeworCSAgY2FzZSAtOToK KwkgICAgcHJpbnRmKCJDb21tYW5kIG9yIGZpZWxkIHRvbyBsb25nXG4iKTsKKwkgIGNhc2UgLTQ6 CQkJLyogRU9GICovCisJICBjYXNlIC0zOgkJCS8qIEVtcHR5LiAqLworCSAgY2FzZSAtMjoJCQkv KiBPdXQgb2Ygc3BhY2UuICovCisJICBjYXNlIC0xOgkJCS8qIFJlcGFyc2UgbmVlZGVkICovCisJ ICAgIHJldHVybih4KTsKKwkgIGNhc2UgMToJCQkvKiBDUiAqLworCSAgY2FzZSAwOgkJCS8qIFNQ ICovCisJICAgIGRlYnVnKEYxMTEsImNtZmxkIDEiLGF0bWJ1Zix4Yyk7CisJICAgIGlmICh4YyA9 PSAwKSB7CQkvKiBJZiBubyBpbnB1dCwgcmV0dXJuIGRlZmF1bHQuICovCisJCWlmIChzZXRhdG0o eGRlZiwwKSA8IDApIHsKKwkJICAgIHByaW50ZigiP0RlZmF1bHQgdG9vIGxvbmdcbiIpOworCQkg ICAgcmV0dXJuKC05KTsKKwkJfQorCSAgICB9CisJICAgICp4cCA9IGF0bWJ1ZjsJCS8qIFBvaW50 IHRvIHdoYXQgd2UgZ290LiAqLworCSAgICBkZWJ1ZyhGMTExLCJjbWZsZCAyIixhdG1idWYsKChm KSA/IDEgOiAwKSk7CisJICAgIGlmIChmKSB7CQkJLyogSWYgYSBjb252ZXJzaW9uIGZ1bmN0aW9u IGlzIGdpdmVuICovCisJCXpxID0gYXR4YnVmOwkJLyogZW1wbG95IGl0IG5vdy4gKi8KKwkJYXR4 biA9IENNREJMOworCQlpZiAoKCpmKSgqeHAsJnpxLCZhdHhuKSA8IDApCisJCSAgcmV0dXJuKC0y KTsKKwkJZGVidWcoRjExMSwiY21mbGQgMyIsYXR4YnVmLHhjKTsKKwkJLyogUmVwbGFjZSBieSBu ZXcgdmFsdWUgLS0gZm9yIE1JTlBVVCBvbmx5IGtlZXAgYWxsIGNoYXJzICovCisJCWlmIChzZXRh dG0oYXR4YnVmLGtlZXBhbGxjaGFycyA/IDM6MSkgPCAwKSB7IC8qIDE2IE1hciAyMDAzICovCisJ CSAgICBwcmludGYoIlZhbHVlIHRvbyBsb25nXG4iKTsKKwkJICAgIHJldHVybigtOSk7CisJCX0K KwkJKnhwID0gYXRtYnVmOworCSAgICB9CisJICAgIGRlYnVnKEYxMTEsImNtZmxkIDQiLGF0bWJ1 Zix4Yyk7CisJICAgIGlmICgqKnhwID09IE5VTCkgewkJLyogSWYgdmFyaWFibGUgZXZhbHVhdGVz IHRvIG51bGwgKi8KKwkJaWYgKHNldGF0bSh4ZGVmLDApIDwgMCkgeworCQkgICAgcHJpbnRmKCI/ RGVmYXVsdCB0b28gbG9uZ1xuIik7CisJCSAgICByZXR1cm4oLTkpOworCQl9CisJCWlmICgqKnhw ID09IE5VTCkgeCA9IC0zOyAvKiBJZiBzdGlsbCBlbXB0eSwgcmV0dXJuIC0zLiAqLworCSAgICB9 CisJICAgIGRlYnVnKEYxMTEsImNtZmxkIHJldHVybnMiLCp4cCx4KTsKKwkgICAgcmV0dXJuKHgp OworCSAgY2FzZSAyOgkJCS8qIEVTQyAqLworCSAgICBpZiAoeGMgPT0gMCAmJiAqeGRlZikgewor CQlwcmludGYoIiVzICIseGRlZik7IC8qIElmIGF0IGJlZ2lubmluZyBvZiBmaWVsZCwgKi8KKyNp ZmRlZiBHRU1ET1MKKwkJZmZsdXNoKHN0ZG91dCk7CisjZW5kaWYgLyogR0VNRE9TICovCisJCWFk ZGJ1Zih4ZGVmKTsJCS8qIFN1cHBseSBkZWZhdWx0LiAqLworCQlpbndvcmQgPSBjbWZsZ3MgPSAw OworCQlpZiAoc2V0YXRtKHhkZWYsMCkgPCAwKSB7CisJCSAgICBwcmludGYoIj9EZWZhdWx0IHRv byBsb25nXG4iKTsKKwkJICAgIHJldHVybigtOSk7CisJCX0gZWxzZQkJCS8qIFJldHVybiBhcyBp ZiB3aG9sZSBmaWVsZCAqLworCQkgIHJldHVybigwKTsJCS8qIHR5cGVkLCBmb2xsb3dlZCBieSBz cGFjZS4gKi8KKwkgICAgfSBlbHNlIHsKKwkJYmxlZXAoQlBfV0FSTik7CisJICAgIH0KKwkgICAg YnJlYWs7CisJICBjYXNlIDM6CQkJLyogUXVlc3Rpb24gbWFyayAqLworCSAgICBkZWJ1ZyhGMTEw LCJjbWZsZCBRVUVTVElPTk1BUksiLGNtZGJ1ZiwwKTsKKwkgICAgaWYgKCp4aGxwID09IE5VTCkK KwkgICAgICBwcmludGYoIiBQbGVhc2UgY29tcGxldGUgdGhpcyBmaWVsZCIpOworCSAgICBlbHNl CisJICAgICAgcHJpbnRmKCIgJXMiLHhobHApOworCSAgICBwcmludGYoIlxuJXMlcyIsY21wcm9t LGNtZGJ1Zik7CisJICAgIGZmbHVzaChzdGRvdXQpOworCSAgICBicmVhazsKKyAgICAgICAgfQor CWRlYnVnKEYxMTEsImNtZmxkIGd0d29yZCBBIHgiLGNtZGJ1Zix4KTsKKwl4ID0gZ3R3b3JkKDAp OworCWRlYnVnKEYxMTEsImNtZmxkIGd0d29yZCBCIHgiLGNtZGJ1Zix4KTsKKyAgICB9Cit9CisK KworLyogIEMgTSBUIFggVCAgLS0gIEdldCBhIHRleHQgc3RyaW5nLCBpbmNsdWRpbmcgY29uZmly bWF0aW9uICAqLworCisvKgorICBQcmludCBoZWxwIG1lc3NhZ2UgJ3hobHAnIGlmID8gdHlwZWQs IHN1cHBseSBkZWZhdWx0ICd4ZGVmJyBpZiBudWxsCisgIHN0cmluZyB0eXBlZC4gIFJldHVybnM6 CisKKyAgIC0xIGlmIHJlcGFyc2UgbmVlZGVkIG9yIGJ1ZmZlciBvdmVyZmxvd3MuCisgICAgMSBv dGhlcndpc2UuCisKKyAgd2l0aCBjbWZsZ3Mgc2V0IHRvIHJldHVybiBjb2RlLCBhbmQgeHAgcG9p bnRpbmcgdG8gcmVzdWx0IHN0cmluZy4KKyovCitpbnQKK2NtdHh0KHhobHAseGRlZix4cCxmKSBj aGFyICp4aGxwOyBjaGFyICp4ZGVmOyBjaGFyICoqeHA7IHh4X3N0cnAgZjsgeworCisgICAgaW50 IHgsIGk7CisgICAgY2hhciAqeHgsICp6cTsKKyAgICBzdGF0aWMgaW50IHhjOworCisgICAgaWYg KCF4aGxwKSB4aGxwID0gIiI7CisgICAgaWYgKCF4ZGVmKSB4ZGVmID0gIiI7CisKKyAgICBjbWZs ZGZsZ3MgPSAwOworCisgICAgY21kZWZhdWx0WzBdID0gTlVMOworICAgIGlmICgqeGRlZikKKyAg ICAgIGNrc3RybmNweShjbWRlZmF1bHQseGRlZixDTURFRkFVTFQpOyAvKiBDb3B5IGRlZmF1bHQg Ki8KKyAgICB4ZGVmID0gY21kZWZhdWx0OworCisgICAgZGVidWcoRjEwMSwiY210eHQgY21mbGdz IiwiIixjbWZsZ3MpOworICAgIGlud29yZCA9IDA7CQkJCS8qIFN0YXJ0IGF0bWJ1ZiBjb3VudGVy IG9mZiBhdCAwICovCisgICAgY2MgPSAwOworICAgIGlmIChjbWZsZ3MgPT0gLTEpIHsgICAgICAg ICAgICAgICAgIC8qIElmIHJlcGFyc2luZywgKi8KKwkqeHAgPSBwcDsKKyAgICAgICAgeGMgPSAo aW50KXN0cmxlbigqeHApOwkJLyogZ2V0IGJhY2sgdGhlIHRvdGFsIHRleHQgbGVuZ3RoLCAqLwor CWJwID0gKnhwOwkJCS8qIGFuZCBiYWNrIHVwIHRoZSBwb2ludGVycy4gKi8KKwlucCA9ICp4cDsK KwlwcCA9ICp4cDsKKyAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBv dGhlcndpc2UsICovCisJLyogZGVidWcoRjEwMCwiY210eHQ6IGZyZXNoIHN0YXJ0IiwiIiwwKTsg Ki8KKyAgICAgICAgKnhwID0gIiI7ICAgICAgICAgICAgICAgICAgICAgICAvKiBzdGFydCBmcmVz aC4gKi8KKyAgICAgICAgeGMgPSAwOworICAgIH0KKyAgICAqYXRtYnVmID0gTlVMOyAgICAgICAg ICAgICAgICAgICAgICAvKiBBbmQgZW1wdHkgdGhlIGF0b20gYnVmZmVyLiAqLworICAgIHJ0aW1l cigpOwkJCQkvKiBSZXNldCB0aW1lciAqLworICAgIGlmICgoeCA9IGNtZmxncykgIT0gMSkgewor CWludCBkb25lID0gMDsKKwl3aGlsZSAoIWRvbmUpIHsKKwkgICAgeCA9IGd0d29yZCgwKTsJCS8q IEdldCBmaXJzdCB3b3JkLiAqLworCSAgICAqeHAgPSBwcDsJCQkvKiBTYXZlIHBvaW50ZXIgdG8g aXQuICovCisJICAgIC8qIGRlYnVnKEYxMTEsImNtdHh0OiIsKnhwLGNjKTsgKi8KKwkgICAgaWYg KHggPT0gLTEwKSB7CisJCWlmIChndGltZXIoKSA+IHRpbWVsaW1pdCkgeworCQkgICAgLyogaWYg KCFxdWlldCkgcHJpbnRmKCI/VGltZWQgb3V0XG4iKTsgKi8KKwkJICAgIHJldHVybih4KTsKKwkJ fQorCSAgICB9IGVsc2UKKwkgICAgICBkb25lID0gMTsKKwl9CisgICAgfQorICAgIHdoaWxlICgx KSB7CQkJCS8qIExvb3AgZm9yIGVhY2ggd29yZCBpbiB0ZXh0LiAqLworICAgICAgICB4YyArPSBj YzsgICAgICAgICAgICAgICAgICAgICAgIC8qIENoYXIgY291bnQgZm9yIGFsbCB3b3Jkcy4gKi8K KyAgICAgICAgLyogZGVidWcoRjExMSwiY210eHQgZ3R3b3JkIixhdG1idWYseGMpOyAqLworICAg ICAgICAvKiBkZWJ1ZyhGMTAxLCJjbXR4dCB4IiwiIix4KTsgKi8KKyAgICAgICAgc3dpdGNoICh4 KSB7CisJICBjYXNlIC0xMDoKKwkgICAgaWYgKGd0aW1lcigpID4gdGltZWxpbWl0KSB7CisjaWZk ZWYgSUtTRAorICAgICAgICAgICAgICAgIGV4dGVybiBpbnQgaW5zZXJ2ZXI7CisgICAgICAgICAg ICAgICAgaWYgKGluc2VydmVyKSB7CisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiXHJcbklL U0QgSURMRSBUSU1FT1VUOiAlZCBzZWNcclxuIiwgdGltZWxpbWl0KTsKKyAgICAgICAgICAgICAg ICAgICAgZG9leGl0KEdPT0RfRVhJVCwwKTsKKyAgICAgICAgICAgICAgICB9CisjZW5kaWYgLyog SUtTRCAqLworCQkvKiBpZiAoIXF1aWV0KSBwcmludGYoIj9UaW1lZCBvdXRcbiIpOyAqLworCQly ZXR1cm4oLTEwKTsKKwkgICAgfSBlbHNlIHsKKwkJeCA9IGd0d29yZCgwKTsKKwkJY29udGludWU7 CisJICAgIH0KKwkgIGNhc2UgLTk6CQkJLyogQnVmZmVyIG92ZXJmbG93ICovCisJICAgIHByaW50 ZigiQ29tbWFuZCBvciBmaWVsZCB0b28gbG9uZ1xuIik7CisJICBjYXNlIC00OgkJCS8qIEVPRiAq LworI2lmZGVmIE1BQworCSAgY2FzZSAtMzoJCQkvKiBRdWl0L1RpbWVvdXQgKi8KKyNlbmRpZiAv KiBNQUMgKi8KKwkgIGNhc2UgLTI6CQkJLyogT3ZlcmZsb3cgKi8KKwkgIGNhc2UgLTE6CQkJLyog RGVsZXRpb24gKi8KKwkgICAgcmV0dXJuKHgpOworCSAgY2FzZSAwOgkJCS8qIFNwYWNlICovCisJ ICAgIHhjKys7CQkJLyogSnVzdCBjb3VudCBpdCAqLworCSAgICBicmVhazsKKwkgIGNhc2UgMToJ CQkvKiBDUiBvciBMRiAqLworCSAgICBpZiAoeGMgPT0gMCkgKnhwID0geGRlZjsKKwkgICAgaWYg KGYpIHsJCQkvKiBJZiBhIGNvbnZlcnNpb24gZnVuY3Rpb24gaXMgZ2l2ZW4gKi8KKwkJY2hhciAq IHN4ID0gYXR4YnVmOworCQl6cSA9IGF0eGJ1ZjsJCS8qIFBvaW50IHRvIHRoZSBleHBhbnNpb24g YnVmZmVyICovCisJCWF0eG4gPSBDTURCTDsJCS8qIHNwZWNpZnkgaXRzIGxlbmd0aCAqLworCQkv KiBkZWJ1ZyhGMTExLCJjbXR4dCBjYWxsaW5nICgqZikiLCp4cCxhdHhidWYpOyAqLworCQlpZiAo KHggPSAoKmYpKCp4cCwmenEsJmF0eG4pKSA8IDApIHJldHVybigtMik7CisJCXN4ID0gYXR4YnVm OworI2lmbmRlZiBDT01NRU5UCisJCWNjID0gMDsKKwkJd2hpbGUgKCpzeCsrKSBjYysrOwkvKiAo ZmFzdGVyIHRoYW4gY2FsbGluZyBzdHJsZW4pICovCisjZWxzZQorCQljYyA9IChpbnQpc3RybGVu KGF0eGJ1Zik7CisjZW5kaWYgLyogQ09NTUVOVCAqLworCQkvKiBTaG91bGQgYmUgZXF1YWwgdG8g KENNREJMIC0gYXR4bikgYnV0IGlzbid0IGFsd2F5cy4gKi8KKwkJLyogV2h5IG5vdD8gKi8KKwkJ aWYgKGNjIDwgMSkgewkJLyogTm90aGluZyBpbiBleHBhbnNpb24gYnVmZmVyPyAqLworCQkgICAg KnhwID0geGRlZjsJCS8qIFBvaW50IHRvIGRlZmF1bHQgc3RyaW5nIGluc3RlYWQuICovCisjaWZu ZGVmIENPTU1FTlQKKwkJICAgIHN4ID0geGRlZjsKKwkJICAgIHdoaWxlICgqc3grKykgY2MrKzsJ LyogKGZhc3RlciB0aGFuIGNhbGxpbmcgc3RybGVuKSAqLworI2Vsc2UKKwkJICAgIGNjID0gc3Ry bGVuKHhkZWYpOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKwkJfSBlbHNlIHsJCS8qIEV4cGFuc2lv biBmdW5jdGlvbiBnb3Qgc29tZXRoaW5nICovCisJCSAgICAqeHAgPSBhdHhidWY7CS8qIHJldHVy biBwb2ludGVyIHRvIGl0LiAqLworCQl9CisJCWRlYnVnKEYxMTEsImNtdHh0ICgqZikiLCp4cCxj Yyk7CisJICAgIH0gZWxzZSB7CQkJLyogTm8gZXhwYW5zaW9uIGZ1bmN0aW9uICovCisjaWZuZGVm IENPTU1FTlQKKwkJLyogQXZvaWQgYSBzdHJsZW4oKSBjYWxsICovCisJCXh4ID0gKnhwOworCQlj YyA9IDA7CisJCXdoaWxlICgqeHgrKykgY2MrKzsKKyNlbHNlCisJCS8qIE5PISAgeGMgaXMgYXBw YXJlbnRseSBub3QgYWx3YXlzIHNldCBhcHByb3ByaWF0ZWx5ICovCisJCWNjID0geGM7CisjZW5k aWYgLyogQ09NTUVOVCAqLworCSAgICB9CisJICAgIHh4ID0gKnhwOworI2lmZGVmIENPTU1FTlQK KwkgICAgLyogc3RybGVuKCkgbm8gbG9uZ2VyIG5lZWRlZCAqLworCSAgICBmb3IgKGkgPSAoaW50 KXN0cmxlbih4eCkgLSAxOyBpID4gMDsgaS0tKQorI2Vsc2UKKwkgICAgZm9yIChpID0gY2MgLSAx OyBpID4gMDsgaS0tKQorI2VuZGlmIC8qIENPTU1FTlQgKi8KKwkgICAgICBpZiAoeHhbaV0gIT0g U1ApCQkvKiBUcmltIHRyYWlsaW5nIGJsYW5rcyAqLworCQlicmVhazsKKwkgICAgICBlbHNlCisJ CXh4W2ldID0gTlVMOworCSAgICByZXR1cm4oeCk7CisJICBjYXNlIDI6CQkJLyogRVNDICovCisJ ICAgIGlmICh4YyA9PSAwKSB7CQkvKiBOb3RoaW5nIHR5cGVkIHlldCAqLworCQlpZiAoKnhkZWYp IHsJCS8qIEhhdmUgYSBkZWZhdWx0IGZvciB0aGlzIGZpZWxkPyAqLworCQkgICAgcHJpbnRmKCIl cyAiLHhkZWYpOwkvKiBZZXMsIHN1cHBseSBpdCAqLworCQkgICAgaW53b3JkID0gY21mbGdzID0g MDsKKyNpZmRlZiBHRU1ET1MKKwkJICAgIGZmbHVzaChzdGRvdXQpOworI2VuZGlmIC8qIEdFTURP UyAqLworCQkgICAgY2MgPSBhZGRidWYoeGRlZik7CisJCX0gZWxzZSBibGVlcChCUF9XQVJOKTsJ LyogTm8gZGVmYXVsdCAqLworCSAgICB9IGVsc2UgewkJCS8qIEFscmVhZHkgaW4gZmllbGQgKi8K KwkJaW50IHg7IGNoYXIgKnA7CisJCXggPSBzdHJsZW4oYXRtYnVmKTsKKwkJaWYgKGNrc3RyY21w KGF0bWJ1Zix4ZGVmLHgsMCkpIHsgICAgLyogTWF0Y2hlcyBkZWZhdWx0PyAqLworCQkgICAgYmxl ZXAoQlBfV0FSTik7CSAgICAgICAgICAgIC8qIE5vICovCisJCX0gZWxzZSBpZiAoKGludClzdHJs ZW4oeGRlZikgPiB4KSB7IC8qIFllcyAqLworCQkgICAgcCA9IHhkZWYgKyB4OworCQkgICAgcHJp bnRmKCIlcyAiLCBwKTsKKyNpZmRlZiBHRU1ET1MKKwkJICAgIGZmbHVzaChzdGRvdXQpOworI2Vu ZGlmIC8qIEdFTURPUyAqLworCQkgICAgYWRkYnVmKHApOworCQkgICAgaW53b3JkID0gY21mbGdz ID0gMDsKKwkJICAgIGRlYnVnKEYxMTAsImNtdHh0OiBhZGRidWYiLGNtZGJ1ZiwwKTsKKwkJfSBl bHNlIHsKKwkJICAgIGJsZWVwKEJQX1dBUk4pOworCQl9CisJICAgIH0KKwkgICAgYnJlYWs7CisJ ICBjYXNlIDM6CQkJLyogUXVlc3Rpb24gTWFyayAqLworCSAgICBpZiAoKnhobHAgPT0gTlVMKQor CSAgICAgIHByaW50ZigiIFRleHQgc3RyaW5nIik7CisJICAgIGVsc2UKKwkgICAgICBwcmludGYo IiAlcyIseGhscCk7CisJICAgIHByaW50ZigiXG4lcyVzIixjbXByb20sY21kYnVmKTsKKwkgICAg ZmZsdXNoKHN0ZG91dCk7CisJICAgIGJyZWFrOworCSAgZGVmYXVsdDoKKwkgICAgcHJpbnRmKCI/ VW5leHBlY3RlZCByZXR1cm4gY29kZSBmcm9tIGd0d29yZCgpIC0gJWRcbiIseCk7CisJICAgIHJl dHVybigtMik7CisgICAgICAgIH0KKyAgICAgICAgeCA9IGd0d29yZCgwKTsKKyAgICB9Cit9CisK Ky8qICBDIE0gSyBFIFkgIC0tICBQYXJzZSBhIGtleXdvcmQgICovCisKKy8qCisgQ2FsbCB3aXRo OgorICAgdGFibGUgICAgLS0gIGtleXdvcmQgdGFibGUsIGluICdzdHJ1Y3Qga2V5dGFiJyBmb3Jt YXQ7CisgICBuICAgICAgICAtLSAgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGFibGU7CisgICB4aGxw ICAgICAtLSAgcG9pbnRlciB0byBoZWxwIHN0cmluZzsKKyAgIHhkZWYgICAgIC0tICBwb2ludGVy IHRvIGRlZmF1bHQga2V5d29yZDsKKyAgIGYgICAgICAgIC0tICBzdHJpbmcgcHJlcHJvY2Vzc2lu ZyBmdW5jdGlvbiAoZS5nLiB0byBldmFsdWF0ZSB2YXJpYWJsZXMpCisgICBwbXNnICAgICAtLSAg MCA9IGRvbid0IHByaW50IGVycm9yIG1lc3NhZ2VzCisgICAgICAgICAgICAgICAgMSA9IHByaW50 IGVycm9yIG1lc3NhZ2VzCisgICAgICAgICAgICAgICAgMiA9IGluY2x1ZGUgQ01fSExQIGtleXdv cmRzIGV2ZW4gaWYgaW52aXNpYmxlCisgICAgICAgICAgICAgICAgMyA9IDErMgorICAgICAgICAg ICAgICAgIDQgPSBwYXJzZSBhIHN3aXRjaCAoa2V5d29yZCBwb3NzaWJseSBlbmRpbmcgaW4gOiBv ciA9KQorICAgICAgICAgICAgICAgIDggPSBkb24ndCBzdHJpcCBjb21tZW50cyAodXNlZCwgZS5n LiwgZm9yICJoZWxwICMiKQorIFJldHVybnM6CisgICAtMyAgICAgICAtLSAgbm8gaW5wdXQgc3Vw cGxpZWQgYW5kIG5vIGRlZmF1bHQgYXZhaWxhYmxlCisgICAtMiAgICAgICAtLSAgaW5wdXQgZG9l c24ndCB1bmlxdWVseSBtYXRjaCBhIGtleXdvcmQgaW4gdGhlIHRhYmxlCisgICAtMSAgICAgICAt LSAgdXNlciBkZWxldGVkIHRvbyBtdWNoLCBjb21tYW5kIHJlcGFyc2UgcmVxdWlyZWQKKyAgICBu ID49IDAgIC0tICB2YWx1ZSBhc3NvY2lhdGVkIHdpdGgga2V5d29yZAorKi8KKworLyoKKyAgRnJv bnQgZW5kcyBmb3IgY21rZXkyKCk6IAorICBjbWtleSgpICAtIFRoZSBub3JtYWwga2V5d29yZCBw YXJzZXIKKyAgY21rZXl4KCkgLSBMaWtlIGNta2V5KCkgYnV0IHN1cHByZXNzZXMgZXJyb3IgbWVz c2FnZXMKKyAgY21zd2koKSAgLSBTd2l0Y2ggcGFyc2VyCisqLworaW50CitjbWtleSh0YWJsZSxu LHhobHAseGRlZixmKQorLyogY21rZXkgKi8gIHN0cnVjdCBrZXl0YWIgdGFibGVbXTsgaW50IG47 IGNoYXIgKnhobHAsICp4ZGVmOyB4eF9zdHJwIGY7IHsKKyAgICByZXR1cm4oY21rZXkyKHRhYmxl LG4seGhscCx4ZGVmLCIiLGYsMSkpOworfQoraW50CitjbWtleXgodGFibGUsbix4aGxwLHhkZWYs ZikKKy8qIGNta2V5eCAqLyAgc3RydWN0IGtleXRhYiB0YWJsZVtdOyBpbnQgbjsgY2hhciAqeGhs cCwgKnhkZWY7IHh4X3N0cnAgZjsgeworICAgIHJldHVybihjbWtleTIodGFibGUsbix4aGxwLHhk ZWYsIiIsZiwwKSk7Cit9CitpbnQKK2Ntc3dpKHRhYmxlLG4seGhscCx4ZGVmLGYpCisvKiBjbXN3 aSAqLyAgc3RydWN0IGtleXRhYiB0YWJsZVtdOyBpbnQgbjsgY2hhciAqeGhscCwgKnhkZWY7IHh4 X3N0cnAgZjsgeworICAgIHJldHVybihjbWtleTIodGFibGUsbix4aGxwLHhkZWYsIiIsZiw0KSk7 Cit9CisKK2ludAorY21rZXkyKHRhYmxlLG4seGhscCx4ZGVmLHRvayxmLHBtc2cpCisgICAgc3Ry dWN0IGtleXRhYiB0YWJsZVtdOworICAgIGludCBuOworICAgIGNoYXIgKnhobHAsICp4ZGVmOwor ICAgIGNoYXIgKnRvazsKKyAgICB4eF9zdHJwIGY7CisgICAgaW50IHBtc2c7Cit7IC8qIGNta2V5 MiAqLworICAgIGV4dGVybiBpbnQgaGF2ZXRva2VuOworICAgIGludCBpLCB0bCwgeSwgeiA9IDAs IHp6LCB4Yywgd29yZGxlbiA9IDAsIGNtc3dpdGNoOworICAgIGNoYXIgKnhwLCAqenE7CisKKyAg ICBpZiAoIXhobHApIHhobHAgPSAiIjsKKyAgICBpZiAoIXhkZWYpIHhkZWYgPSAiIjsKKworICAg IGNtZmxkZmxncyA9IDA7CisgICAgaWYgKCF0YWJsZSkgeworCXByaW50ZigiP0tleXdvcmQgdGFi bGUgbWlzc2luZ1xuIik7CisJcmV0dXJuKC05KTsKKyAgICB9CisgICAgdGwgPSAoaW50KXN0cmxl bih0b2spOworCisgICAgaW53b3JkID0geGMgPSBjYyA9IDA7CQkvKiBDbGVhciBjaGFyYWN0ZXIg Y291bnRlcnMuICovCisgICAgY21zd2l0Y2ggPSBwbXNnICYgNDsJCS8qIEZsYWcgZm9yIHBhcnNp bmcgYSBzd2l0Y2ggKi8KKworICAgIGRlYnVnKEYxMDEsImNta2V5OiBwbXNnIiwiIixwbXNnKTsK KyAgICBkZWJ1ZyhGMTAxLCJjbWtleTogY21mbGdzIiwiIixjbWZsZ3MpOworICAgIGRlYnVnKEYx MDEsImNta2V5OiBjbXN3aXRjaCIsIiIsY21zd2l0Y2gpOworICAgIC8qIGRlYnVnKEYxMDEsImNt a2V5OiBjbWRidWYiLCIiLGNtZGJ1Zik7Ki8KKworICAgIHBwdm5hbWJ1ZlswXSA9IE5VTDsKKwor ICAgIGlmICgoenogPSBjbWZsZ3MpID09IDEpIHsJCS8qIENvbW1hbmQgYWxyZWFkeSBlbnRlcmVk PyAqLworCWlmIChzZXRhdG0oeGRlZiwwKSA8IDApIHsJLyogWWVzLCBjb3B5IGRlZmF1bHQgaW50 byBhdG9tIGJ1ZiAqLworCSAgICBwcmludGYoIj9EZWZhdWx0IHRvbyBsb25nXG4iKTsKKwkgICAg cmV0dXJuKC05KTsKKwl9CisgICAgICAgIHJ0aW1lcigpOwkJCSAvKiBSZXNldCB0aW1lciAqLwor ICAgIH0gZWxzZSB7CQkJCSAvKiBPdGhlcndpc2UgZ2V0IGEgY29tbWFuZCB3b3JkICovCisgICAg ICAgIHJ0aW1lcigpOwkJCSAvKiBSZXNldCB0aW1lciAqLworCWlmIChwbXNnICYgOCkJCQkgLyog OCBpcyBmb3IgcGFyc2luZyBIRUxQIHRva2VucyAqLworCSAgenogPSBndHdvcmQoNCk7CisJZWxz ZQorCSAgenogPSBndHdvcmQoKHBtc2cgPT0gNCkgPyAxIDogMCk7CisgICAgfQorCisgICAgZGVi dWcoRjEwMSwiY21rZXkgdGFibGUgbGVuZ3RoIiwiIixuKTsKKyAgICBkZWJ1ZyhGMTAxLCJjbWtl eSBjbWZsZ3MiLCIiLGNtZmxncyk7CisgICAgZGVidWcoRjEwMSwiY21rZXkgY2MiLCIiLGNjKTsK KworICAgIHdoaWxlICgxKSB7CisJeGMgKz0gY2M7CisJZGVidWcoRjExMSwiY21rZXkgZ3R3b3Jk IHhjIixhdG1idWYseGMpOworCWRlYnVnKEYxMDEsImNta2V5IGd0d29yZCB6eiIsIiIsenopOwor CisJc3dpdGNoICh6eikgeworCSAgY2FzZSAtMTA6CQkJLyogVGltZW91dCAqLworCSAgICBpZiAo Z3RpbWVyKCkgPCB0aW1lbGltaXQpIHsKKwkJaWYgKHBtc2cgJiA4KQkJLyogOCBpcyBmb3IgcGFy c2luZyBIRUxQIHRva2VucyAqLworCQkgIHp6ID0gZ3R3b3JkKDQpOworCQllbHNlCisJCSAgenog PSBndHdvcmQoKHBtc2cgPT0gNCkgPyAxIDogMCk7CisJCWNvbnRpbnVlOworCSAgICB9IGVsc2Ug eworI2lmZGVmIElLU0QKKyAgICAgICAgICAgICAgICBleHRlcm4gaW50IGluc2VydmVyOworICAg ICAgICAgICAgICAgIGlmIChpbnNlcnZlcikgeworICAgICAgICAgICAgICAgICAgICBwcmludGYo IlxyXG5JS1NEIElETEUgVElNRU9VVDogJWQgc2VjXHJcbiIsIHRpbWVsaW1pdCk7CisgICAgICAg ICAgICAgICAgICAgIGRvZXhpdChHT09EX0VYSVQsMCk7CisgICAgICAgICAgICAgICAgfQorI2Vu ZGlmIC8qIElLU0QgKi8KKwkJcmV0dXJuKC0xMCk7CisgICAgICAgICAgICB9CisJICBjYXNlIC01 OgorCSAgICByZXR1cm4oY21mbGdzID0gMCk7CisJICBjYXNlIC05OgorCSAgICBwcmludGYoIkNv bW1hbmQgb3IgZmllbGQgdG9vIGxvbmdcbiIpOworCSAgY2FzZSAtNDoJCQkvKiBFT0YgKi8KKwkg IGNhc2UgLTM6CQkJLyogTnVsbCBDb21tYW5kL1F1aXQvVGltZW91dCAqLworCSAgY2FzZSAtMjoJ CQkvKiBCdWZmZXIgb3ZlcmZsb3cgKi8KKwkgIGNhc2UgLTE6CQkJLyogT3IgdXNlciBkaWQgc29t ZSBkZWxldGluZy4gKi8KKwkgICAgcmV0dXJuKGNtZmxncyA9IHp6KTsKKworCisJICBjYXNlIDE6 CQkJLyogQ1IgKi8KKwkgIGNhc2UgMDoJCQkvKiBVc2VyIHRlcm1pbmF0ZWQgd29yZCB3aXRoIHNw YWNlICovCisJICBjYXNlIDQ6CQkJLyogb3Igc3dpdGNoIGVuZGluZyBpbiA6IG9yID0gKi8KKwkg ICAgd29yZGxlbiA9IGNjOwkJLyogTGVuZ3RoIGlmIG5vIGNvbnZlcnNpb24gKi8KKwkgICAgaWYg KGNjID09IDApIHsJCS8qIFN1cHBseSBkZWZhdWx0IGlmIHdlIGdvdCBub3RoaW5nICovCisJCWlm ICgod29yZGxlbiA9IHNldGF0bSh4ZGVmLCh6eiA9PSA0KSA/IDIgOiAwKSkgPCAwKSB7CisJCSAg ICBwcmludGYoIj9EZWZhdWx0IHRvbyBsb25nXG4iKTsKKwkJICAgIHJldHVybigtOSk7CisJCX0K KwkgICAgfQorCSAgICBpZiAoenogPT0gMSAmJiBjYyA9PSAwKQkvKiBSZXF1aXJlZCBmaWVsZCBt aXNzaW5nICovCisJICAgICAgcmV0dXJuKC0zKTsKKworCSAgICBpZiAoZikgewkJCS8qIElmIGEg Y29udmVyc2lvbiBmdW5jdGlvbiBpcyBnaXZlbiAqLworCQljaGFyICogcDI7CisJCXpxID0gYXR4 YnVmOwkJLyogYXBwbHkgaXQgKi8KKwkJcDIgPSBhdHhidWY7CisJCWF0eG4gPSBDTURCTDsKKwkJ aWYgKCgqZikoYXRtYnVmLCZ6cSwmYXR4bikgPCAwKSByZXR1cm4oLTIpOworCQlkZWJ1ZyhGMTEw LCJjbWtleSBhdHhidWYgYWZ0ZXIgKmYiLGF0eGJ1ZiwwKTsKKwkJaWYgKCEqcDIpCQkvKiBTdXBw bHkgZGVmYXVsdCBpZiB3ZSBnb3Qgbm90aGluZyAqLworCQkgIHAyID0geGRlZjsKKwkJY2tzdHJu Y3B5KHBwdm5hbWJ1ZixhdG1idWYsUFBWTEVOKTsKKwkJaWYgKCh3b3JkbGVuID0gc2V0YXRtKHAy LCh6eiA9PSA0KSA/IDIgOiAwKSkgPCAwKSB7CisJCSAgICBwcmludGYoIkV2YWx1YXRlZCBrZXl3 b3JkIHRvbyBsb25nXG4iKTsKKwkJICAgIHJldHVybigtOSk7CisJCX0KKyNpZmRlZiBNX1VOR1cK KwkJLyoKKwkJICBUaGlzIGJpdCBsZXRzIHVzIHNhdmUgbW9yZSB0aGFuIG9uZSAid29yZCIuCisJ CSAgRm9yIGV4YW1wbGUsICJkZWZpbmUgXCV4IGVjaG8gb25lIHR3byB0aHJlZSIsICJcJXgiLgor CQkgIEl0IHdvcmtzIHRvbywgYnV0IGl0IGJyZWFrcyBsYWJlbHMsIGFuZCB0aGVyZWZvcmUKKwkJ ICBXSElMRSBhbmQgRk9SIGxvb3BzLCBldGMuCisJCSovCisJCWlmIChwMlt3b3JkbGVuXSA+PSBT UCkgeworCQkgICAgcDIgKz0gd29yZGxlbjsKKwkJICAgIHdoaWxlICgqcDIgPT0gU1ApIHAyKys7 CisJCSAgICBpZiAoKnAyKSB7CisJCQl1bmd3b3JkKCk7CisJCQlwcCA9IHAyOworCQkgICAgfQor CQl9CisjZW5kaWYgLyogTV9VTkdXICovCisJICAgIH0KKyNpZmRlZiBDT01NRU5UCQkJCS8qIF5e XiAqLworCSAgICBpZiAoY21zd2l0Y2ggJiYgKmF0bWJ1ZiAhPSAnLycpIHsKKwkJaWYgKHBtc2cg JiAxKSB7CisJCSAgICBibGVlcChCUF9GQUlMKTsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRm KCI/Tm90IGEgc3dpdGNoIC0gJXNcbiIsYXRtYnVmKTsKKwkJfQorCQljbWZsZ3MgPSAtMjsKKwkJ cmV0dXJuKC02KTsKKwkgICAgfQorI2VuZGlmCS8qIENPTU1FTlQgKi8KKwkgICAgaWYgKGNtc3dp dGNoKSB7CisJCWludCBpOworCQlmb3IgKGkgPSAwOyBpIDwgd29yZGxlbjsgaSsrKSB7CisJCSAg ICBpZiAoYXRtYnVmW2ldID09ICc6JyB8fCBhdG1idWZbaV0gPT0gJz0nKSB7CisJCQlicmtjaGFy ID0gYXRtYnVmW2ldOworCQkJYXRtYnVmW2ldID0gTlVMOworCQkJYnJlYWs7CisJCSAgICB9CisJ CX0KKwkgICAgfQorCisjaWZkZWYgVE9LUFJFQ0hFQ0sKKy8qIFRoaXMgd2FzIGFuIGVmZmVjdGl2 ZSBvcHRpbWl6YXRpb24gYnV0IGl0IGJyZWFrcyBzb21ldGltZXMgb24gbGFiZWxzLiAqLworCSAg ICBpZiAodGwgJiYgIWlzYWxwaGEoYXRtYnVmWzBdKSkgeyAvKiBQcmVjaGVjayBmb3IgdG9rZW4g Ki8KKwkJZm9yIChpID0gMDsgaSA8IHRsOyBpKyspIHsgLyogU2F2ZSBmdW5jdGlvbiBjYWxsIHRv IGNrc3RyY2hyICovCisJCSAgICBpZiAodG9rW2ldID09IGF0bWJ1ZlswXSkgeworCQkJZGVidWco RjAwMCwiY21rZXkgdG9rZW46IixhdG1idWYsKmF0bWJ1Zik7CisJCQl1bmd3b3JkKCk7ICAvKiBQ dXQgYmFjayB0aGUgZm9sbG93aW5nIHdvcmQgKi8KKwkJCXJldHVybigtNSk7IC8qIFNwZWNpYWwg cmV0dXJuIGNvZGUgZm9yIHRva2VuICovCisJCSAgICB9CisJCX0KKwkgICAgfQorI2VuZGlmIC8q IFRPS1BSRUNIRUNLICovCisKKwkgICAgeSA9IGxvb2t1cCh0YWJsZSxhdG1idWYsbiwmeik7IC8q IExvb2sgdXAgd29yZCBpbiB0aGUgdGFibGUgKi8KKwkgICAgZGVidWcoRjExMSwiY21rZXkgbG9v a3VwIixhdG1idWYseSk7CisJICAgIGRlYnVnKEYxMDEsImNta2V5IHp6IiwiIix6eik7CisJICAg IGRlYnVnKEYxMDEsImNta2V5IGNtZmxncyIsIiIsY21mbGdzKTsKKwkgICAgZGVidWcoRjEwMSwi Y21rZXkgY3JmbGFnIiwiIixjcmZsYWcpOworCSAgICBzd2l0Y2ggKHkpIHsKKwkgICAgICBjYXNl IC0zOgkJCS8qIE5vdGhpbmcgdG8gbG9vayB1cCAqLworCQlicmVhazsKKwkgICAgICBjYXNlIC0y OgkJCS8qIEFtYmlndW91cyAqLworCQljbWZsZ3MgPSAtMjsKKwkJaWYgKHBtc2cgJiAxKSB7CisJ CSAgICBibGVlcChCUF9GQUlMKTsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/QW1iaWd1 b3VzIC0gJXNcbiIsYXRtYnVmKTsKKwkJICAgIHJldHVybigtOSk7CisJCX0KKwkJcmV0dXJuKC0y KTsKKwkgICAgICBjYXNlIC0xOgkJCS8qIE5vdCBmb3VuZCBhdCBhbGwgKi8KKyNpZm5kZWYgVE9L UFJFQ0hFQ0sKKwkJaWYgKHRsKSB7CisJCSAgICBmb3IgKGkgPSAwOyBpIDwgdGw7IGkrKykgLyog Q2hlY2sgZm9yIHRva2VuICovCisJCSAgICAgIGlmICh0b2tbaV0gPT0gKmF0bWJ1ZikgeyAvKiBH b3Qgb25lICovCisJCQkgIGRlYnVnKEYwMDAsImNta2V5IHRva2VuOiIsYXRtYnVmLCphdG1idWYp OworCQkJICB1bmd3b3JkKCk7ICAvKiBQdXQgYmFjayB0aGUgZm9sbG93aW5nIHdvcmQgKi8KKwkJ CSAgcmV0dXJuKC01KTsgLyogU3BlY2lhbCByZXR1cm4gY29kZSBmb3IgdG9rZW4gKi8KKwkJICAg ICAgfQorCQl9CisjZW5kaWYgLyogVE9LUFJFQ0hFQ0sgKi8KKworCQlpZiAodGwgPT0gMCkgewkJ LyogTm8gdG9rZW5zIHdlcmUgaW5jbHVkZWQgKi8KKyNpZmRlZiBPUzIKKwkJICAgIC8qIEluIE9T LzIgYW5kIFdpbmRvd3MsIGFsbG93IGZvciBhIGRpc2sgbGV0dGVyIGxpa2UgRE9TICovCisJCSAg ICBpZiAoaXNhbHBoYSgqYXRtYnVmKSAmJiAqKGF0bWJ1ZisxKSA9PSAnOicpCisJCSAgICAgIHJl dHVybigtNyk7CisjZW5kaWYgLyogT1MyICovCisJCSAgICBpZiAoKHBtc2cgJiAxKSAmJiAhcXVp ZXQpIHsKKwkJCWJsZWVwKEJQX0ZBSUwpOworCQkJcHJpbnRmKCI/Tm8ga2V5d29yZHMgbWF0Y2gg LSAlc1xuIixhdG1idWYpOyAvKiBjbWtleSAqLworCQkgICAgfQorCQkgICAgcmV0dXJuKGNtZmxn cyA9IC05KTsKKwkJfSBlbHNlIHsKKwkJICAgIGlmIChjbWZsZ3MgPT0gMSB8fCBjbXN3aXRjaCkg LyogY21rZXkyIG9yIGNtc3dpICovCisJCSAgICAgIHJldHVybihjbWZsZ3MgPSAtNik7CisJCSAg ICBlbHNlCisJCSAgICAgIHJldHVybihjbWZsZ3MgPSAtMik7CisJCSAgICAvKiBUaGUgLTYgY29k ZSBpcyB0byBsZXQgY2FsbGVyIHRyeSBhbm90aGVyIHRhYmxlICovCisJCX0KKwkJYnJlYWs7CisJ ICAgICAgZGVmYXVsdDoKKyNpZmRlZiBDS19SRUNBTEwKKwkJaWYgKHRlc3QodGFibGVbel0uZmxn cyxDTV9OT1IpKSBub19yZWNhbGwgPSAxOworI2VuZGlmIC8qIENLX1JFQ0FMTCAqLworCQlpZiAo enogPT0gNCkKKwkJICBzd2FyZyA9IDE7CisJCWNta3dmbGdzID0gdGFibGVbel0uZmxnczsKKwkJ YnJlYWs7CisJICAgIH0KKwkgICAgcmV0dXJuKHkpOworCisJICBjYXNlIDI6CQkJLyogVXNlciB0 ZXJtaW5hdGVkIHdvcmQgd2l0aCBFU0MgKi8KKwkgICAgZGVidWcoRjEwMSwiY21rZXkgRXNjIGNj IiwiIixjYyk7CisgICAgICAgICAgICBpZiAoY2MgPT0gMCkgeworCQlpZiAoKnhkZWYgIT0gTlVM KSB7ICAgICAvKiBOb3RoaW5nIGluIGF0bWJ1ZiAqLworCQkgICAgcHJpbnRmKCIlcyAiLHhkZWYp OyAvKiBTdXBwbHkgZGVmYXVsdCBpZiBhbnkgKi8KKyNpZmRlZiBHRU1ET1MKKwkJICAgIGZmbHVz aChzdGRvdXQpOworI2VuZGlmIC8qIEdFTURPUyAqLworCQkgICAgYWRkYnVmKHhkZWYpOworCQkg ICAgaWYgKHNldGF0bSh4ZGVmLDApIDwgMCkgeworCQkJcHJpbnRmKCI/RGVmYXVsdCB0b28gbG9u Z1xuIik7CisJCQlyZXR1cm4oLTkpOworCQkgICAgfQorCQkgICAgaW53b3JkID0gY21mbGdzID0g MDsKKwkJICAgIGRlYnVnKEYxMTEsImNta2V5OiBkZWZhdWx0IixhdG1idWYsY2MpOworCQl9IGVs c2UgeworCQkgICAgZGVidWcoRjEwMSwiY21rZXkgRXNjIHBtc2ciLCIiLDApOworI2lmZGVmIENP TU1FTlQKKy8qCisgIENoYWluZWQgRkRCcy4uLiAgVGhlIGlkZWEgaXMgdGhhdCB0aGlzIGZ1bmN0 aW9uIG1pZ2h0IG5vdCBoYXZlIGEgZGVmYXVsdCwKKyAgYnV0IHRoZSBuZXh0IG9uZSBtaWdodC4g IEJ1dCBpZiBpdCBkb2Vzbid0LCB0aGVyZSBpcyBubyB3YXkgdG8gY29tZSBiYWNrIHRvCisgIHRo aXMgb25lLiAgVG8gYmUgcmV2aXNpdGVkIGxhdGVyLi4uCisqLworCQkgICAgaWYgKHhjbWZkYikJ CS8qIENoYWluZWQgZmRiIC0tIHRyeSBuZXh0IG9uZSAqLworCQkgICAgICByZXR1cm4oLTMpOwor I2VuZGlmIC8qIENPTU1FTlQgKi8KKwkJICAgIGlmIChwbXNnICYgKDF8NCkpIHsJLyogU28gZm9y IG5vdyBqdXN0IGJlZXAgKi8KKwkJCWJsZWVwKEJQX1dBUk4pOworCQkgICAgfQorCQkgICAgYnJl YWs7CisJCX0KKyAgICAgICAgICAgIH0KKwkgICAgaWYgKGYpIHsJCQkvKiBJZiBhIGNvbnZlcnNp b24gZnVuY3Rpb24gaXMgZ2l2ZW4gKi8KKwkJY2hhciAqIHBwOworCQl6cSA9IGF0eGJ1ZjsJCS8q IGFwcGx5IGl0ICovCisJCXBwID0gYXR4YnVmOworCQlhdHhuID0gQ01EQkw7CisJCWlmICgoKmYp KGF0bWJ1ZiwmenEsJmF0eG4pIDwgMCkKKwkJICByZXR1cm4oLTIpOworCQlpZiAoISpwcCkKKwkJ ICBwcCA9IHhkZWY7CisJCWlmIChzZXRhdG0ocHAsMCkgPCAwKSB7CisJCSAgICBwcmludGYoIkV2 YWx1YXRlZCBrZXl3b3JkIHRvbyBsb25nXG4iKTsKKwkJICAgIHJldHVybigtOSk7CisJCX0KKwkg ICAgfQorCSAgICB5ID0gbG9va3VwKHRhYmxlLGF0bWJ1ZixuLCZ6KTsgLyogU29tZXRoaW5nIGlu IGF0bWJ1ZiAqLworCSAgICBkZWJ1ZyhGMTExLCJjbWtleSBsb29rdXAgeSIsYXRtYnVmLHkpOwor CSAgICBkZWJ1ZyhGMTExLCJjbWtleSBsb29rdXAgeiIsYXRtYnVmLHopOworCSAgICBpZiAoeSA9 PSAtMiAmJiB6ID49IDAgJiYgeiA8IG4pIHsgLyogQW1iaWd1b3VzICovCisjaWZuZGVmIE5PUEFS VElBTAorCQlpbnQgaiwgaywgbGVuID0gOTk5OTsJLyogRG8gcGFydGlhbCBjb21wbGV0aW9uICov CisJCS8qIFNraXAgcGFzdCBhbnkgYWJicmV2aWF0aW9ucyBpbiB0aGUgdGFibGUgKi8KKwkJZm9y ICggOyB6IDwgbjsgeisrKSB7CisJCSAgICBpZiAoKHRhYmxlW3pdLmZsZ3MgJiBDTV9BQlIpID09 IDApCisJCSAgICAgIGJyZWFrOworCQkgICAgaWYgKCEodGFibGVbel0uZmxncyAmIENNX0hMUCkg fHwgKHBtc2cgJiAyKSkKKwkJICAgICAgYnJlYWs7CisJCX0KKwkJZGVidWcoRjExMSwiY21rZXkg cGFydGlhbCB6IixhdG1idWYseik7CisJCWRlYnVnKEYxMTEsImNta2V5IHBhcnRpYWwgbiIsYXRt YnVmLG4pOworCQlmb3IgKGogPSB6KzE7IGogPCBuOyBqKyspIHsKKwkJICAgIGRlYnVnKEYxMTEs ImNta2V5IHBhcnRpYWwgaiIsdGFibGVbal0ua3dkLGopOworCQkgICAgaWYgKGNrc3RyY21wKGF0 bWJ1Zix0YWJsZVtqXS5rd2QsY2MsMCkpCisJCSAgICAgIGJyZWFrOworCQkgICAgaWYgKHRhYmxl W2pdLmZsZ3MgJiBDTV9BQlIpCisJCSAgICAgIGNvbnRpbnVlOworCQkgICAgaWYgKCh0YWJsZVtq XS5mbGdzICYgQ01fSExQKSAmJiAhKHBtc2cgJiAyKSkKKwkJICAgICAgY29udGludWU7CisJCSAg ICBrID0gY2tzdHJwcmUodGFibGVbel0ua3dkLHRhYmxlW2pdLmt3ZCk7CisJCSAgICBkZWJ1ZyhG MTExLCJjbWtleSBwYXJ0aWFsIGsiLHRhYmxlW3pdLmt3ZCxrKTsKKwkJICAgIGlmIChrIDwgbGVu KQorCQkgICAgICBsZW4gPSBrOyAvKiBMZW5ndGggb2YgbG9uZ2VzdCBjb21tb24gcHJlZml4ICov CisJCX0KKwkJZGVidWcoRjExMSwiY21rZXkgcGFydGlhbCBsZW4iLHRhYmxlW3pdLmt3ZCxsZW4p OworCQlpZiAobGVuICE9IDk5OTkgJiYgbGVuID4gY2MpIHsKKwkJICAgIGNrc3RybmNhdChhdG1i dWYsdGFibGVbel0ua3dkK2NjLEFUTUJMKTsKKwkJICAgIGF0bWJ1ZltsZW5dID0gTlVMOworCQkg ICAgcHJpbnRmKCIlcyIsYXRtYnVmK2NjKTsKKwkJICAgIGNrc3RybmNhdChjbWRidWYsYXRtYnVm K2NjLENNREJMKTsKKwkJICAgIHhjICs9IChsZW4gLSBjYyk7CisJCSAgICBjYyA9IGxlbjsKKwkJ fQorI2VuZGlmIC8qIE5PUEFSVElBTCAqLworCQlibGVlcChCUF9XQVJOKTsKKwkJYnJlYWs7CisJ ICAgIH0gZWxzZSBpZiAoeSA9PSAtMykgeworCQlibGVlcChCUF9XQVJOKTsKKwkJYnJlYWs7CisJ ICAgIH0gZWxzZSBpZiAoeSA9PSAtMSkgewkvKiBOb3QgZm91bmQgKi8KKwkJaWYgKChwbXNnICYg MSkgJiYgIXF1aWV0KSB7CisJCSAgICBibGVlcChCUF9GQUlMKTsKKwkJICAgIHByaW50ZigiP05v IGtleXdvcmRzIG1hdGNoIC0gXCIlc1wiXG4iLGF0bWJ1Zik7CisJCX0KKwkJY21mbGdzID0gLTI7 CisJCXJldHVybigtOSk7CisJICAgIH0KKy8qCisgIElmIHdlIGZvdW5kIGl0LCBidXQgaXQncyBh IGhlbHAtb25seSBrZXl3b3JkIGFuZCB0aGUgImhlbHAiIGJpdCBpcyBub3QKKyAgc2V0IGluIHBt c2csIHRoZW4gbm90IGZvdW5kLgorKi8KKwkgICAgZGVidWcoRjEwMSwiY21rZXkgZmxncyIsIiIs dGFibGVbel0uZmxncyk7CisJICAgIGlmICh0ZXN0KHRhYmxlW3pdLmZsZ3MsQ01fSExQKSAmJiAo KHBtc2cgJiAyKSA9PSAwKSkgeworCQlpZiAoKHBtc2cgJiAxKSAmJiAhcXVpZXQpIHsKKwkJICAg IGJsZWVwKEJQX0ZBSUwpOworCQkgICAgcHJpbnRmKCI/Tm8ga2V5d29yZHMgbWF0Y2ggLSAlc1xu IixhdG1idWYpOworCQl9CisJCWNtZmxncyA9IC0yOworCQlyZXR1cm4oLTkpOworCSAgICB9Cisv KgorICBTZWUgaWYgdGhlIGtleXdvcmQganVzdCBmb3VuZCBoYXMgdGhlIENNX0FCUiBiaXQgc2V0 IGluIGl0cyBmbGdzIGZpZWxkLCBhbmQKKyAgaWYgc28sIHNlYXJjaCBmb3J3YXJkcyBpbiB0aGUg dGFibGUgZm9yIGEga2V5d29yZCB0aGF0IGhhcyB0aGUgc2FtZSBrd3ZhbAorICBidXQgZG9lcyBu b3QgaGF2ZSBDTV9BQlIgKG9yIENNX0lOVj8pIHNldCwgYW5kIHRoZW4gZXhwYW5kIHVzaW5nIHRo ZSBmdWxsCisgIGtleXdvcmQuICBXQVJOSU5HOiBUaGlzIGFzc3VtZXMgdGhhdCAoYSkga2V5d29y ZHMgYXJlIGluIGFscGhhYmV0aWNhbCBvcmRlciwKKyAgYW5kIChiKSB0aGUgQ01fQUJSIGJpdCBp cyBzZXQgb25seSBpZiB0aGUgdGhlIGFiYnJldmlhdGVkIGtleXdvcmQgaXMgYSB0cnVlCisgIGFi YnJldmlhdGlvbiAobGVmdCBzdWJzdHJpbmcpIG9mIHRoZSBmdWxsIGtleXdvcmQuCisqLworCSAg ICBpZiAodGVzdCh0YWJsZVt6XS5mbGdzLENNX0FCUikpIHsKKwkJaW50IHp6OworCQlmb3IgKHp6 ID0geisxOyB6eiA8IG47IHp6KyspCisJCSAgaWYgKCh0YWJsZVt6el0ua3d2YWwgPT0gdGFibGVb el0ua3d2YWwpICYmCisJCSAgICAgICghdGVzdCh0YWJsZVt6el0uZmxncyxDTV9BQlIpKSAmJgor CQkgICAgICAoIXRlc3QodGFibGVbenpdLmZsZ3MsQ01fSU5WKSkpIHsKKwkJICAgICAgeiA9IHp6 OworCQkgICAgICBicmVhazsKKwkJICB9CisJICAgIH0KKwkgICAgeHAgPSB0YWJsZVt6XS5rd2Qg KyBjYzsKKwkgICAgaWYgKGNtc3dpdGNoICYmIHRlc3QodGFibGVbel0uZmxncyxDTV9BUkcpKSB7 CisjaWZkZWYgVk1TCisJCXByaW50ZigiJXM9Iix4cCk7CisJCWJya2NoYXIgPSAnPSc7CisjZWxz ZQorCQlwcmludGYoIiVzOiIseHApOworCQlicmtjaGFyID0gJzonOworI2VuZGlmIC8qIFZNUyAq LworCSAgICB9IGVsc2UgeworCQlwcmludGYoIiVzICIseHApOworCQlicmtjaGFyID0gU1A7CisJ ICAgIH0KKyNpZmRlZiBDS19SRUNBTEwKKwkgICAgaWYgKHRlc3QodGFibGVbel0uZmxncyxDTV9O T1IpKSBub19yZWNhbGwgPSAxOworI2VuZGlmIC8qIENLX1JFQ0FMTCAqLworCSAgICBjbWt3Zmxn cyA9IHRhYmxlW3pdLmZsZ3M7CisjaWZkZWYgR0VNRE9TCisJICAgIGZmbHVzaChzdGRvdXQpOwor I2VuZGlmIC8qIEdFTURPUyAqLworCSAgICBhZGRidWYoeHApOworCSAgICBpZiAoY21zd2l0Y2gg JiYgdGVzdCh0YWJsZVt6XS5mbGdzLENNX0FSRykpIHsKKwkJYnAtLTsJCQkvKiBSZXBsYWNlIHRy YWlsaW5nIHNwYWNlIHdpdGggOiAqLworI2lmZGVmIFZNUworCQkqYnArKyA9ICc9JzsKKyNlbHNl CisJCSpicCsrID0gJzonOworI2VuZGlmIC8qIFZNUyAqLworCQkqYnAgPSBOVUw7CisJCW5wID0g YnA7CisJCXN3YXJnID0gMTsKKwkgICAgfQorCSAgICBpbndvcmQgPSAwOworCSAgICBjbWZsZ3Mg PSAwOworCSAgICBkZWJ1ZyhGMTEwLCJjbWtleTogYWRkYnVmIixjbWRidWYsMCk7CisJICAgIHJl dHVybih5KTsKKworCSAgY2FzZSAzOgkJCS8qIFVzZXIgdHlwZWQgIj8iICovCisJICAgIGlmIChm KSB7CQkJLyogSWYgYSBjb252ZXJzaW9uIGZ1bmN0aW9uIGlzIGdpdmVuICovCisJCWNoYXIgKiBw cDsKKwkJenEgPSBhdHhidWY7CQkvKiBkbyB0aGUgY29udmVyc2lvbiBub3cuICovCisJCXBwID0g YXR4YnVmOworCQlhdHhuID0gQ01EQkw7CisJCWlmICgoKmYpKGF0bWJ1ZiwmenEsJmF0eG4pIDwg MCkgcmV0dXJuKC0yKTsKKwkJaWYgKHNldGF0bShwcCwwKSA8IDApIHsKKwkJICAgIHByaW50Zigi P0V2YWx1YXRlZCBrZXl3b3JkIHRvbyBsb25nXG4iKTsKKwkJICAgIHJldHVybigtOSk7CisJCX0K KwkgICAgfQorCSAgICB5ID0gbG9va3VwKHRhYmxlLGF0bWJ1ZixuLCZ6KTsgLyogTG9vayB1cCB3 aGF0IHdlIGhhdmUgc28gZmFyLiAqLworCSAgICBpZiAoeSA9PSAtMSkgeworCQkvKgorCQkgIFN0 cmljdGx5IHNwZWFraW5nIGlmIHRoZSBtYWluIGtleXdvcmQgdGFibGUgc2VhcmNoIGZhaWxzLAor CQkgIHRoZW4gd2Ugc2hvdWxkIGxvb2sgaW4gdGhlIHRva2VuIHRhYmxlIGlmIG9uZSBpcyBnaXZl bi4KKwkJICBCdXQgaW4gcHJhY3RpY2UsIHRva2VucyBhcmUgYWxzbyBpbmNsdWRlZCBpbiB0aGUg bWFpbgorCQkgIGtleXdvcmQgdGFibGUuCisJCSovCisJCWNtZmxncyA9IC0yOworCQlpZiAoKHBt c2cgJiAxKSAmJiAhcXVpZXQpIHsKKwkJICAgIGJsZWVwKEJQX0ZBSUwpOworCQkgICAgcHJpbnRm KCIgTm8ga2V5d29yZHMgbWF0Y2hcbiIpOworCQkgICAgcmV0dXJuKC05KTsKKwkJfQorCQlyZXR1 cm4oLTIpOworCSAgICB9CisjaWZuZGVmIENPTU1FTlQKKwkgICAgLyogVGhpcyBpcyB0byBhbGxv dyA/LWhlbHAgdG8gd29yayBpbW1lZGlhdGVseSBhZnRlciBhIHRva2VuICovCisJICAgIC8qIHdp dGhvdXQgaGF2aW5nIHRvIHR5cGUgYW4gaW50ZXJtZWRpYXRlIHNwYWNlICovCisJICAgIGlmICh0 bCkgeworCQlmb3IgKGkgPSAwOyBpIDwgdGw7IGkrKykgLyogQ2hlY2sgZm9yIHRva2VuICovCisJ CSAgaWYgKHRva1tpXSA9PSAqYXRtYnVmKSB7IC8qIEdvdCBvbmUgKi8KKwkJICAgICAgZGVidWco RjAwMCwiY21rZXkgdG9rZW46IixhdG1idWYsKmF0bWJ1Zik7CisJCSAgICAgIHVuZ3dvcmQoKTsJ LyogUHV0IGJhY2sgdGhlIGZvbGxvd2luZyB3b3JkICovCisJCSAgICAgIGNtZmxncyA9IDM7CS8q IEZvcmNlIGhlbHAgbmV4dCB0aW1lIGFyb3VuZCAqLworCQkgICAgICByZXR1cm4oLTUpOwkvKiBT cGVjaWFsIHJldHVybiBjb2RlIGZvciB0b2tlbiAqLworCQkgIH0KKwkgICAgfQorI2VuZGlmIC8q IENPTU1FTlQgKi8KKworCSAgICBpZiAoKnhobHAgPT0gTlVMKQorCSAgICAgIHByaW50ZigiIE9u ZSBvZiB0aGUgZm9sbG93aW5nOlxuIik7CisJICAgIGVsc2UKKwkgICAgICBwcmludGYoIiAlcywg b25lIG9mIHRoZSBmb2xsb3dpbmc6XG4iLHhobHApOworCSAgICB7CisJCWludCB4OworCQl4ID0g cG1zZyAmICgyfDQpOwkvKiBTZWUga3dkaGVscCgpIGNvbW1lbnRzICovCisJCWlmIChhdG1idWZb MF0pCQkvKiBJZiBub3QgYXQgYmVnaW5uaW5nIG9mIGZpZWxkICovCisJCSAgeCB8PSAxOwkJLyog YWxzbyBzaG93IGludmlzaWJsZXMgKi8KKwkJa3dkaGVscCh0YWJsZSxuLGF0bWJ1ZiwiIiwiIiwx LHgpOworCSAgICB9CisjaWZuZGVmIE5PU1BMCisJICAgIGlmICghaGF2ZXRva2VuKSB7CisJCWV4 dGVybiBpbnQgdG9wY21kOworCQlpZiAodGwgPiAwICYmIHRvcGNtZCAhPSBYWEhMUCkgLyogVGhp cyBpcyBiYWQuLi4gKi8KKwkJICBwcmludGYoIm9yIGEgbWFjcm8gbmFtZSAoXCJkbyA/XCIgZm9y IGEgbGlzdCkgIik7CisJICAgIH0KKyNlbmRpZiAvKiBOT1NQTCAqLworCSAgICBpZiAoKmF0bWJ1 ZiA9PSBOVUwgJiYgIWhhdmV0b2tlbikgeworCQlpZiAodGwgPT0gMSkKKwkJICBwcmludGYoIm9y IHRoZSB0b2tlbiAlY1xuIiwqdG9rKTsKKwkJZWxzZSBpZiAodGwgPiAxKQorCQkgIHByaW50Zigi b3Igb25lIG9mIHRoZSB0b2tlbnM6ICVzXG4iLGNrc3ByZWFkKHRvaykpOworCSAgICB9CisJICAg IHByaW50ZigiJXMlcyIsIGNtcHJvbSwgY21kYnVmKTsKKwkgICAgZmZsdXNoKHN0ZG91dCk7CisJ ICAgIGJyZWFrOworCisJICBkZWZhdWx0OgorCSAgICBwcmludGYoIlxuJWQgLSBVbmV4cGVjdGVk IHJldHVybiBjb2RlIGZyb20gZ3R3b3JkXG4iLHp6KTsKKwkgICAgcmV0dXJuKGNtZmxncyA9IC0y KTsKKwl9CisJenogPSAocG1zZyAmIDgpID8gZ3R3b3JkKDQpIDogZ3R3b3JkKChwbXNnID09IDQp ID8gMSA6IDApOworCWRlYnVnKEYxMTEsImNta2V5IGd0d29yZCB6eiIsYXRtYnVmLHp6KTsKKyAg ICB9Cit9CisKK2ludAorY2hrdG9rKHRsaXN0KSBjaGFyICp0bGlzdDsgeworICAgIGNoYXIgKnA7 CisgICAgcCA9IHRsaXN0OworICAgIHdoaWxlICgqcCAhPSBOVUwgJiYgKnAgIT0gKmF0bWJ1Zikg cCsrOworICAgIHJldHVybigoKnApID8gKGludCkgKnAgOiAwKTsKK30KKworLyogUm91dGluZXMg Zm9yIHBhcnNpbmcgYW5kIGNvbnZlcnRpbmcgZGF0ZXMgYW5kIHRpbWVzICovCisKKyNkZWZpbmUg aXNkYXRlc2VwKGMpIChja3N0cmNocigiIC0vLl8iLGMpKQorCisjZGVmaW5lIENNREFURUJVRiAx MDI0CitjaGFyIGNtZGF0ZWJ1ZltDTURBVEVCVUYrNF0gPSB7IE5VTCwgTlVMIH07CitzdGF0aWMg Y2hhciAqIGNtZGF0ZWJwID0gY21kYXRlYnVmOworY2hhciAqIGNtZGF0ZW1zZyA9IE5VTEw7CisK K3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIHRpbWV1bml0c1tdID0geworICAgIHsgImRheXMiLCAgIFRV X0RBWVMsICAgMCB9LAorICAgIHsgIm1vbnRocyIsIFRVX01PTlRIUywgMCB9LAorICAgIHsgIndl ZWtzIiwgIFRVX1dFRUtTLCAgMCB9LAorICAgIHsgIndrcyIsICAgIFRVX1dFRUtTLCAgMCB9LAor ICAgIHsgInllYXJzIiwgIFRVX1lFQVJTLCAgMCB9LAorICAgIHsgInlycyIsICAgIFRVX1lFQVJT LCAgMCB9Cit9Oworc3RhdGljIGludCBudW5pdHMgPSAoc2l6ZW9mKHRpbWV1bml0cykgLyBzaXpl b2Yoc3RydWN0IGtleXRhYikpOworCisjZGVmaW5lIFNZTV9OT1cgIDAKKyNkZWZpbmUgU1lNX1RP REEgMQorI2RlZmluZSBTWU1fVE9NTyAyCisjZGVmaW5lIFNZTV9ZRVNUIDMKKworc3RhdGljIHN0 cnVjdCBrZXl0YWIgc3ltZGF5dGFiW10gPSB7CisgICAgeyAibm93IiwgICAgICAgU1lNX05PVywg IDAgfSwKKyAgICB7ICJ0b2RheSIsICAgICBTWU1fVE9EQSwgMCB9LAorICAgIHsgInRvbW9ycm93 IiwgIFNZTV9UT01PLCAwIH0sCisgICAgeyAieWVzdGVyZGF5IiwgU1lNX1lFU1QsIDAgfQorfTsK K3N0YXRpYyBpbnQgbnN5bWRheXMgPSAoc2l6ZW9mKHN5bWRheXRhYikgLyBzaXplb2Yoc3RydWN0 IGtleXRhYikpOworCitzdGF0aWMgc3RydWN0IGtleXRhYiBkYXlzb2Z3ZWVrW10gPSB7CisgICAg eyAiRnJpZGF5IiwgICAgNSwgMCB9LAorICAgIHsgIk1vbmRheSIsICAgIDEsIDAgfSwKKyAgICB7 ICJTYXR1cmRheSIsICA2LCAwIH0sCisgICAgeyAiU3VuZGF5IiwgICAgMCwgMCB9LAorICAgIHsg IlRodXJzZGF5IiwgIDQsIDAgfSwKKyAgICB7ICJUdWVzZGF5IiwgICAyLCAwIH0sCisgICAgeyAi V2VkbmVzZGF5IiwgMywgMCB9Cit9OworCitzdGF0aWMgc3RydWN0IGtleXRhYiB1c2F0eltdID0g ewkvKiBSRkMgODIyIHRpbWV6b25lcyAgKi8KKyAgICB7ICJjZHQiLCAgNSwgMCB9LAkJCS8qIFZh bHVlcyBhcmUgR01UIG9mZnNldHMgKi8KKyAgICB7ICJjc3QiLCAgNiwgMCB9LAorICAgIHsgImVk dCIsICA0LCAwIH0sCisgICAgeyAiZXN0IiwgIDUsIDAgfSwKKyAgICB7ICJnbXQiLCAgMCwgMCB9 LAorICAgIHsgIm1kdCIsICA2LCAwIH0sCisgICAgeyAibXN0IiwgIDcsIDAgfSwKKyAgICB7ICJw ZHQiLCAgNywgMCB9LAorICAgIHsgInBzdCIsICA4LCAwIH0sCisgICAgeyAidXRjIiwgIDAsIDAg fSwKKyAgICB7ICJ6dWx1IiwgMCwgMCB9Cit9Oworc3RhdGljIGludCBudXNhdHogPSAoc2l6ZW9m KHVzYXR6KSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7CisKKworLyogIEMgTSBDIFYgVCBEIEEg VCBFICAtLSAgQ29udmVydHMgZnJlZS1mb3JtIGRhdGUgdG8gc3RhbmRhcmQgZm9ybS4gICovCisK Ky8qCisgICBDYWxsIHdpdGgKKyAgICAgcyA9IHBvaW50ZXIgdG8gZnJlZS1mb3JtYXQgZGF0ZSwg dGltZSwgb3IgZGF0ZSBhbmQgdGltZS4KKyAgICAgdCA9IDA6IHJldHVybiB0aW1lIG9ubHkgaWYg dGltZSB3YXMgZ2l2ZW4gaW4gcy4KKyAgICAgdCA9IDE6IGFsd2F5cyByZXR1cm4gdGltZSAoMDA6 MDA6MDAgaWYgbm8gdGltZSBnaXZlbiBpbiBzKS4KKyAgICAgdCA9IDI6IGFsbG93IHRpbWUgdG8g YmUgPiAyNDowMDowMC4KKyAgIFJldHVybnM6CisgICAgIE5VTEwgb24gZmFpbHVyZTsKKyAgICAg UG9pbnRlciB0byAieXl5eW1tZGQgaGg6bW06c3MiIChsb2NhbCBkYXRlLXRpbWUpIG9uIHN1Y2Nl c3MuCisqLworCisvKgorICBCZWZvcmUgZmluYWwgcmVsZWFzZSB0aGUgZm9sbG93aW5nIGxvbmcg bGluZXMgc2hvdWxkIGJlIHdyYXBwZWQuCisgIFVudGlsIHRoZW4gd2UgbGVhdmUgdGhlbSBsb25n IHNpbmNlIHdyYXBwaW5nIHRoZW0gd3JlY2tzIEVNQUNTJ3MKKyAgQyBpbmRlbnRhdGlvbi4KKyov CisKKy8qIGFzY3RpbWUgcGF0dGVybiAqLworc3RhdGljIGNoYXIgKiBhdHAxID0gIltBLVpdW2Et el1bYS16XSBbQS1aXVthLXpdW2Etel0gWyAwLTldWzAtOV0gWzAtOV1bMC05XTpbMC05XVswLTld OlswLTldWzAtOV0gWzAtOV1bMC05XVswLTldWzAtOV0iOworCisvKiBhc2N0aW1lIHBhdHRlcm4g d2l0aCB0aW1lem9uZSAqLworc3RhdGljIGNoYXIgKiBhdHAyID0gIltBLVpdW2Etel1bYS16XSBb QS1aXVthLXpdW2Etel0gWyAwLTldWzAtOV0gWzAtOV1bMC05XTpbMC05XVswLTldOlswLTldWzAt OV0gW0EtWl1bQS1aXVtBLVpdIFswLTldWzAtOV1bMC05XVswLTldIjsKKworI2RlZmluZSBEQVRF QlVGTEVOIDEyNworI2RlZmluZSBZWVlZTU1ERCAxMgorCisjZGVmaW5lIGlzbGVhcCh5KSAoKCh5 KSAlIDQgPT0gMCAmJiAoeSkgJSAxMDAgIT0gMCkgfHwgKHkpICUgNDAwID09IDApCitzdGF0aWMg aW50IG1kYXlzWzEzXSA9IHsgMCwgMzEsIDI4LCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMxLCAzMCwg MzEsIDMwLCAzMSB9OworCisjZGVmaW5lIE5FRURfREFZUyAxCisjZGVmaW5lIE5FRURfSFJTICAy CisjZGVmaW5lIE5FRURfTUlOUyAzCisjZGVmaW5lIE5FRURfU0VDUyA0CisjZGVmaW5lIE5FRURf RlJBQyA1CisKKyNkZWZpbmUgREVMVEFCVUYgMjU2CitzdGF0aWMgY2hhciBkZWx0YWJ1ZltERUxU QUJVRl07CitzdGF0aWMgY2hhciAqIGRlbHRhYnAgPSBkZWx0YWJ1ZjsKKworY2hhciAqCitjbWRl bHRhKHl5LCBtbywgZGQsIGhoLCBtbSwgc3MsIHNpZ24sIGR5eSwgZG1vLCBkZGQsIGRoaCwgZG1t LCBkc3MpCisgICAgaW50IHl5LCBtbywgZGQsIGhoLCBtbSwgc3MsIHNpZ24sIGR5eSwgZG1vLCBk ZGQsIGRoaCwgZG1tLCBkc3M7CisvKiBjbWRlbHRhICovIHsKKyAgICBpbnQgenl5LCB6bW8sIHpk ZCwgemhoLCB6bW0sIHpzczsKKyAgICBsb25nIHQxLCB0MiwgdDMsIHQ0OworICAgIGxvbmcgZDEg PSAwLCBkMiwgZDM7CisgICAgY2hhciBkYXRlYnVmW0RBVEVCVUZMRU4rMV07CisKKyNpZmRlZiBE RUJVRworICAgIGlmIChkZWJsb2cpIHsKKwlkZWJ1ZyhGMTAxLCJjbWRlbHRhIHl5IiwiIix5eSk7 CisJZGVidWcoRjEwMSwiY21kZWx0YSBtbyIsIiIsbW8pOworCWRlYnVnKEYxMDEsImNtZGVsdGEg ZGQiLCIiLGRkKTsKKwlkZWJ1ZyhGMTAxLCJjbWRlbHRhIGhoIiwiIixoaCk7CisJZGVidWcoRjEw MSwiY21kZWx0YSBtbSIsIiIsbW0pOworCWRlYnVnKEYxMDEsImNtZGVsdGEgc3MiLCIiLHNzKTsK KwlkZWJ1ZyhGMTAxLCJjbWRlbHRhIHNpZ24iLCIiLHNpZ24pOworCWRlYnVnKEYxMDEsImNtZGVs dGEgZHl5IiwiIixkeXkpOworCWRlYnVnKEYxMDEsImNtZGVsdGEgZG1vIiwiIixkbW8pOworCWRl YnVnKEYxMDEsImNtZGVsdGEgZGRkIiwiIixkZGQpOworCWRlYnVnKEYxMDEsImNtZGVsdGEgZGho IiwiIixkaGgpOworCWRlYnVnKEYxMDEsImNtZGVsdGEgZG1tIiwiIixkbW0pOworCWRlYnVnKEYx MDEsImNtZGVsdGEgZHNzIiwiIixkc3MpOworICAgIH0KKyNlbmRpZiAvKiBERUJMT0cgKi8KKwor ICAgIGlmICh5eSA8IDAgfHwgeXkgPiA5OTk5KSB7CisJbWFrZXN0cigmY21kYXRlbXNnLCJCYXNl IHllYXIgb3V0IG9mIHJhbmdlIik7CisJZGVidWcoRjExMSwiY21kZWx0YSIsY21kYXRlbXNnLC0x KTsKKwlyZXR1cm4oTlVMTCk7CisgICAgfQorICAgIGlmIChtbyA8IDEgfHwgbW8gPiAxMikgewor CW1ha2VzdHIoJmNtZGF0ZW1zZywiQmFzZSBtb250aCBvdXQgb2YgcmFuZ2UiKTsKKwlkZWJ1ZyhG MTExLCJjbWRlbHRhIixjbWRhdGVtc2csLTEpOworCXJldHVybihOVUxMKTsKKyAgICB9CisgICAg aWYgKGRkIDwgMSB8fCBkZCA+IG1kYXlzW21vXSkgeworCW1ha2VzdHIoJmNtZGF0ZW1zZywiQmFz ZSBkYXkgb3V0IG9mIHJhbmdlIik7CisJZGVidWcoRjExMSwiY21kZWx0YSIsY21kYXRlbXNnLC0x KTsKKwlyZXR1cm4oTlVMTCk7CisgICAgfQorICAgIGlmIChoaCA8IDAgfHwgaGggPiAyMykgewor CW1ha2VzdHIoJmNtZGF0ZW1zZywiQmFzZSBob3VyIG91dCBvZiByYW5nZSIpOworCWRlYnVnKEYx MTEsImNtZGVsdGEiLGNtZGF0ZW1zZywtMSk7CisJcmV0dXJuKE5VTEwpOworICAgIH0KKyAgICBp ZiAobW0gPCAwIHx8IG1tID4gNTkpIHsKKwltYWtlc3RyKCZjbWRhdGVtc2csIkJhc2UgbWludXRl IG91dCBvZiByYW5nZSIpOworCWRlYnVnKEYxMTEsImNtZGVsdGEiLGNtZGF0ZW1zZywtMSk7CisJ cmV0dXJuKE5VTEwpOworICAgIH0KKyAgICBpZiAoc3MgPCAwIHx8IHNzID4gNjApIHsKKwltYWtl c3RyKCZjbWRhdGVtc2csIkJhc2Ugc2Vjb25kIG91dCBvZiByYW5nZSIpOworCWRlYnVnKEYxMTEs ImNtZGVsdGEiLGNtZGF0ZW1zZywtMSk7CisJcmV0dXJuKE5VTEwpOworICAgIH0KKyAgICBzaWdu ID0gKHNpZ24gPCAwKSA/IC0xIDogMTsKKyAgICBpZiAoZG1vICE9IDApIHsKKyAgICAgICAgaWYg KHNpZ24gPiAwKSB7CisgICAgICAgICAgICBtbyArPSAoc2lnbiAqIGRtbyk7CisgICAgICAgICAg ICBpZiAobW8gPiAxMikgeworICAgICAgICAgICAgICAgIHl5ICs9IG1vIC8gMTI7CisgICAgICAg ICAgICAgICAgbW8gPSBtbyAlIDEyOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYg KHNpZ24gPCAwKSB7CisgICAgICAgICAgICB3aGlsZSAoZG1vID4gMTIpIHsKKyAgICAgICAgICAg ICAgICB5eS0tOworICAgICAgICAgICAgICAgIGRtbyAtPSAxMjsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIGlmIChkbW8gPCBtbykgeworICAgICAgICAgICAgICAgIG1vIC09IGRtbzsKKyAg ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgeXktLTsKKyAgICAgICAgICAgICAg ICBtbyA9IDEyIC0gKGRtbyAtIG1vKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K KyAgICBpZiAoZHl5ICE9IDApIHsKKwl5eSArPSAoc2lnbiAqIGR5eSk7CisJaWYgKHl5ID4gOTk5 OSB8fCB5eSA8IDApIHsKKwkgICAgbWFrZXN0cigmY21kYXRlbXNnLCJSZXN1bHQgeWVhciBvdXQg b2YgcmFuZ2UiKTsKKwkgICAgZGVidWcoRjExMSwiY21kZWx0YSIsY21kYXRlbXNnLC0xKTsKKwkg ICAgcmV0dXJuKE5VTEwpOworCX0KKyAgICB9CisgICAgc3ByaW50ZihkYXRlYnVmLCIlMDRkJTAy ZCUwMmQgJTAyZDolMDJkOiUwMmQiLHl5LG1vLGRkLGhoLG1tLHNzKTsKKyAgICBkMSA9IG1qZChk YXRlYnVmKTsKKyAgICBkZWJ1ZyhGMTExLCJjbWRlbHRhIG1qZCIsZGF0ZWJ1ZixkMSk7ICAgIAor CisgICAgdDEgPSBoaCAqIDM2MDAgKyBtbSAqIDYwICsgc3M7CS8qIEJhc2UgdGltZSB0byBzZWNz IHNpbmNlIG1pZG5pZ2h0ICovCisgICAgdDIgPSBkaGggKiAzNjAwICsgZG1tICogNjAgKyBkc3M7 CS8qIERlbHRhIHRpbWUsIGRpdHRvICovCisgICAgdDMgPSB0MSArIChzaWduICogdDIpOwkJLyog R2V0IHN1bSAob3IgZGlmZmVyZW5jZSkgKi8KKyAgICAKKyAgICBkMiA9IChzaWduICogZGRkKTsJ CQkvKiBEZWx0YSBkYXlzICovCisgICAgZDIgKz0gdDMgLyA4NjQwMEw7CisKKyAgICB0NCA9IHQz ICUgODY0MDBMOwkJCS8qIEZyYWN0aW9uYWwgcGFydCBvZiBkYXkgKi8KKyAgICBpZiAodDQgPCAw KSB7CQkJLyogSWYgbmVnYXRpdmUgKi8KKwlkMi0tOwkJCQkvKiBvbmUgbGVzcyBkZWx0YSBkYXkg Ki8KKwl0NCArPSA4NjQwMEw7CQkJLyogZ2V0IHBvc2l0aXZlIHNlY29uZHMgKi8KKyAgICB9Cisg ICAgaGggPSAoaW50KSAodDQgLyAzNjAwTCk7CisgICAgbW0gPSAoaW50KSAodDQgJSAzNjAwTCkg LyA2MDsKKyAgICBzcyA9IChpbnQpICh0NCAlIDM2MDBMKSAlIDYwOworCisgICAgc3ByaW50Zihk YXRlYnVmLCIlcyAlMDJkOiUwMmQ6JTAyZCIsIG1qZDJkYXRlKGQxK2QyKSxoaCxtbSxzcyk7Cisg ICAgeworCWludCBsZW4sIGssIG47CisJY2hhciAqIHA7CisJbGVuID0gc3RybGVuKGRhdGVidWYp OworCWsgPSBkZWx0YWJwIC0gKGNoYXIgKilkZWx0YWJ1ZjsJLyogU3BhY2UgdXNlZCAqLworCW4g PSBERUxUQUJVRiAtIGsgLSAxOwkJLyogU3BhY2UgbGVmdCAqLworCWlmIChuIDwgbGVuKSB7CQkJ LyogTm90IGVub3VnaD8gKi8KKwkgICAgZGVsdGFicCA9IGRlbHRhYnVmOwkJLyogV3JhcCBhcm91 bmQgKi8KKwkgICAgbiA9IERFTFRBQlVGOworCX0KKwlja3N0cm5jcHkoZGVsdGFicCxkYXRlYnVm LG4pOworCXAgPSBkZWx0YWJwOworCWRlbHRhYnAgKz0gbGVuICsgMTsKKwlyZXR1cm4ocCk7Cisg ICAgfQorfQorCisKKy8qIENvbnZlcnQgRGVsdGEgVGltZSB0byBTZWNvbmRzICovCisKK2ludAor ZGVsdGEyc2VjKHMscmVzdWx0KSBjaGFyICogczsgbG9uZyAqIHJlc3VsdDsgeworICAgIGxvbmcg ZGRheXMgPSAwTCwgeno7CisgICAgaW50IGRzaWduID0gMSwgZGhvdXJzID0gMCwgZG1pbnMgPSAw LCBkc2VjcyA9IDAsIHVuaXRzOworICAgIGludCBzdGF0ZSA9IE5FRURfREFZUzsKKyAgICBjaGFy ICpwLCAqcDIsICpwMywgYyA9IDA7CisgICAgY2hhciBidWZbNjRdOworCisgICAgaWYgKCFzKSBz ID0gIiI7CisgICAgaWYgKCEqcykKKyAgICAgIHJldHVybigtMSk7CisgICAgaWYgKChpbnQpc3Ry bGVuKHMpID4gNjMpCisgICAgICByZXR1cm4oLTEpOworICAgIGNrc3RybmNweShidWYscyw2NCk7 CisgICAgcCA9IGJ1ZjsKKworICAgIGlmICgqcCAhPSAnKycgJiYgKnAgIT0gJy0nKQorICAgICAg cmV0dXJuKC0xKTsKKworICAgIGlmICgqcCsrID09ICctJykKKyAgICAgIGRzaWduID0gLTE7Cisg ICAgd2hpbGUgKCpwID09IFNQKQkJCS8qIFNraXAgaW50ZXJ2ZW5pbmcgc3BhY2VzICovCisgICAg ICBwKys7CisKKyAgICB3aGlsZSAoc3RhdGUpIHsJCQkvKiBGU0EgdG8gcGFyc2UgZGVsdGEgdGlt ZSAqLworCWlmIChzdGF0ZSA8IDAgfHwgIWlzZGlnaXQoKnApKQorCSAgcmV0dXJuKC0xKTsKKwlw MiA9IHA7CQkJCS8qIEdldCBuZXh0IG51bWVyaWMgZmllbGQgKi8KKwl3aGlsZSAoaXNkaWdpdCgq cDIpKQorCSAgcDIrKzsKKwljID0gKnAyOwkJCS8qIEFuZCBicmVhayBjaGFyYWN0ZXIgKi8KKwkq cDIgPSBOVUw7CQkJLyogVGVybWluYXRlIHRoZSBudW1iZXIgKi8KKwlzd2l0Y2ggKHN0YXRlKSB7 CQkvKiBJbnRlcnByZXQgYWNjb3JkaW5nIHRvIHN0YXRlICovCisJICBjYXNlIE5FRURfREFZUzoJ CS8qIEluaXRpYWwgKi8KKwkgICAgaWYgKChjID09ICctJykgfHwJCS8qIFZNUyBmb3JtYXQgKi8K KwkJKChjID09ICdkJyB8fCBjID09ICdEJykKKwkJICYmICFpc2FscGhhKCoocDIrMSkpKSkgeyAv KiBEYXlzICovCisJCWRkYXlzID0gYXRvbChwKTsKKwkJaWYgKCEqKHAyKzEpKQkJCQorCQkgIHN0 YXRlID0gMDsKKwkJZWxzZQkJCS8qIGlmIGFueXRoaW5nIGlzIGxlZnQgKi8KKwkJICBzdGF0ZSA9 IE5FRURfSFJTOwkvKiBub3cgd2Ugd2FudCBob3Vycy4gKi8KKwkgICAgfSBlbHNlIGlmIChjID09 ICc6JykgewkvKiBkZWxpbWl0ZXIgaXMgY29sb24gKi8KKwkJZGhvdXJzID0gYXRvaShwKTsJLyog c28gaXQncyBob3VycyAqLworCQlzdGF0ZSA9IE5FRURfTUlOUzsJLyogbm93IHdlIHdhbnQgbWlu dXRlcyAqLworCSAgICB9IGVsc2UgaWYgKCFjKSB7CQkvKiBlbmQgb2Ygc3RyaW5nICovCisJCWRo b3VycyA9IGF0b2kocCk7CS8qIGl0J3Mgc3RpbGwgaG91cnMgKi8KKwkJc3RhdGUgPSAwOwkJLyog YW5kIHdlJ3JlIGRvbmUgKi8KKwkgICAgfSBlbHNlIGlmIChpc2FscGhhKGMpIHx8IGMgPT0gU1Ap IHsKKwkJaWYgKGMgPT0gU1ApIHsJCS8qIEl0J3MgYSBrZXl3b3JkPyAqLworCQkgICAgcDIrKzsJ CS8qIFNraXAgc3BhY2VzICovCisJCSAgICB3aGlsZSAoKnAyID09IFNQKQorCQkgICAgICBwMisr OworCQl9IGVsc2UgewkJLyogb3IgcmVwbGFjZSBmaXJzdCBsZXR0ZXIgKi8KKwkJICAgICpwMiA9 IGM7CisJCX0KKwkJcDMgPSBwMjsJCS8qIHAyIHBvaW50cyB0byBiZWdpbm5pbmcgb2Yga2V5d29y ZCAqLworCQl3aGlsZSAoaXNhbHBoYSgqcDMpKQkvKiBGaW5kIGVuZCBvZiBrZXl3b3JkICovCisJ CSAgcDMrKzsKKwkJYyA9ICpwMzsJCS8qIE5VTCBpdCBvdXQgc28gd2UgY2FuIGxvb2sgaXQgdXAg Ki8KKwkJaWYgKCpwMykJCS8qIHAzIHBvaW50cyB0byBrZXl3b3JkIHRlcm1pbmF0b3IgKi8KKwkJ ICAqcDMgPSBOVUw7CisJCWlmICgodW5pdHMgPSBsb29rdXAodGltZXVuaXRzLHAyLG51bml0cyxO VUxMKSkgPCAwKQorCQkgIHJldHVybigtMSk7CisJCSpwMiA9IE5VTDsJCS8qIFJlLXRlcm1pbmF0 ZSB0aGUgbnVtYmVyICovCisJCSpwMyA9IGM7CisJCXdoaWxlICgqcDMgPT0gU1ApCS8qIFBvaW50 IGF0IGZpZWxkIGFmdGVyIHVuaXRzICovCisJCSAgcDMrKzsKKwkJcDIgPSBwMzsKKwkJc3dpdGNo ICh1bml0cykgeworCQkgIGNhc2UgVFVfREFZUzoKKwkJICAgIGRkYXlzID0gYXRvbChwKTsKKwkJ ICAgIGJyZWFrOworCQkgIGRlZmF1bHQ6CisJCSAgICByZXR1cm4oLTEpOworCQl9CisJCWlmICgq cDIpIHsKKwkJICAgIHN0YXRlID0gTkVFRF9IUlM7CisJCSAgICBwMi0tOworCQl9IGVsc2UKKwkJ ICBzdGF0ZSA9IDA7CisJICAgIH0gZWxzZSB7CQkJLyogQW55dGhpbmcgZWxzZSAqLworCQlzdGF0 ZSA9IC0xOwkJLyogaXMgYW4gZXJyb3IgKi8KKwkgICAgfQorCSAgICBicmVhazsKKwkgIGNhc2Ug TkVFRF9IUlM6CQkvKiBMb29raW5nIGZvciBob3VycyAqLworCSAgICBpZiAoYyA9PSAnOicpIHsK KwkJZGhvdXJzID0gYXRvaShwKTsKKwkJc3RhdGUgPSBORUVEX01JTlM7CisJICAgIH0gZWxzZSBp ZiAoIWMpIHsKKwkJZGhvdXJzID0gYXRvaShwKTsKKwkJc3RhdGUgPSAwOworCSAgICB9IGVsc2Ug eworCQlzdGF0ZSA9IC0xOworCSAgICB9CisJICAgIGJyZWFrOworCSAgY2FzZSBORUVEX01JTlM6 CQkvKiBMb29raW5nIGZvciBtaW51dGVzICovCisJICAgIGlmIChjID09ICc6JykgeworCQlkbWlu cyA9IGF0b2kocCk7CisJCXN0YXRlID0gTkVFRF9TRUNTOworCSAgICB9IGVsc2UgaWYgKCFjKSB7 CisJCWRtaW5zID0gYXRvaShwKTsKKwkJc3RhdGUgPSAwOworCSAgICB9IGVsc2UgeworCQlzdGF0 ZSA9IC0xOworCSAgICB9CisJICAgIGJyZWFrOworCSAgY2FzZSBORUVEX1NFQ1M6CQkvKiBMb29r aW5nIGZvciBzZWNvbmRzICovCisJICAgIGlmIChjID09ICcuJykgeworCQlkc2VjcyA9IGF0b2ko cCk7CisJCXN0YXRlID0gTkVFRF9GUkFDOworCSAgICB9IGVsc2UgaWYgKCFjKSB7CisJCWRzZWNz ID0gYXRvaShwKTsKKwkJc3RhdGUgPSAwOworCSAgICB9IGVsc2UgeworCQlzdGF0ZSA9IC0xOwor CSAgICB9CisJICAgIGJyZWFrOworCSAgY2FzZSBORUVEX0ZSQUM6CQkvKiBGcmFjdGlvbiBvZiBz ZWNvbmQgKi8KKwkgICAgaWYgKCFjICYmIHJkaWdpdHMocCkpIHsKKwkJaWYgKCpwID4gJzQnKQor CQkgIGRzZWNzKys7CisJCXN0YXRlID0gMDsKKwkgICAgfSBlbHNlIHsKKwkJc3RhdGUgPSAtMTsK KwkgICAgfQorCSAgICBicmVhazsKKwl9CisJaWYgKGMpCQkJCS8qIG5leHQgZmllbGQgaWYgYW55 ICovCisJICBwID0gcDIgKyAxOworICAgIH0KKyAgICBpZiAoc3RhdGUgPCAwKQorICAgICAgcmV0 dXJuKC0xKTsKKworICAgIC8qIGlmIGRheXMgPiAyNDg1NCBhbmQgc2l6ZW9mKGxvbmcpID09IDMy IHdlIG92ZXJmbG93ICovCisKKyAgICB6eiA9IGRkYXlzICogODY0MDBMOworICAgIGlmICh6eiA8 IDBMKQkJCS8qIFRoaXMgY2F0Y2hlcyBpdCAqLworICAgICAgcmV0dXJuKC0yKTsKKyAgICB6eiAr PSBkaG91cnMgKiAzNjAwTCArIGRtaW5zICogNjBMICsgZHNlY3M7CisgICAgenogKj0gZHNpZ247 CisgICAgKnJlc3VsdCA9IHp6OworICAgIHJldHVybigwKTsKK30KKworCitjaGFyICoKK2NtY3Z0 ZGF0ZShzLHQpIGNoYXIgKiBzOyBpbnQgdDsgeworICAgIGludCB4LCBpLCBqLCBrLCBoaCwgbW0s IHNzLCBmZiwgcG1mbGFnID0gMCwgbm9kYXRlID0gMCwgbGVuLCBkb3c7CisgICAgaW50IHVuaXRz LCBpc2dtdCA9IDAsIGdtdHNpZ24gPSAwLCBkID0gMCwgc3RhdGUgPSAwLCBuZGF5OworICAgIGlu dCBrbiA9IDAsIGZ0WzhdLCBpc2xldHRlciA9IDAsIGYybGVuID0gMDsKKworICAgIGludCB6aGgg PSAwOwkJCS8qIFRpbWV6b25lIGFkanVzdG1lbnRzICovCisgICAgaW50IHptbSA9IDA7CisgICAg aW50IHpkZCA9IDA7CisKKyAgICBpbnQgZHNpZ24gPSAxOwkJCS8qIERlbHRhLXRpbWUgYWRqdXN0 bWVudHMgKi8KKyAgICBpbnQgZGRheXMgPSAwOworICAgIGludCBkbW9udGhzID0gMDsKKyAgICBp bnQgZHllYXJzID0gMDsKKyAgICBpbnQgZGhvdXJzID0gMDsKKyAgICBpbnQgZG1pbnMgPSAwOwor ICAgIGludCBkc2VjcyA9IDA7CisgICAgaW50IGhhdmVkZWx0YSA9IDA7CisKKyAgICBjaGFyICog ZmxkWzhdLCAqIHAgPSAiIiwgKiBwMiwgKiBwMzsgLyogQXNzb3J0ZWQgYnVmZmVycyBhbmQgcG9p bnRlcnMgICovCisgICAgY2hhciAqIHMyLCAqIHMzOworICAgIGNoYXIgKiB5ZWFyID0gTlVMTCwg KiBtb250aCA9IE5VTEwsICogZGF5ID0gTlVMTDsKKyAgICBjaGFyICogaG91ciA9ICIwMCIsICog bWluID0gIjAwIiwgKiBzZWMgPSAiMDAiOworICAgIGNoYXIgZGF0ZXNlcCA9IDA7CisgICAgY2hh ciB0bXBidWZbOF07CisgICAgY2hhciB4YnVmW0RBVEVCVUZMRU4rMV07CisgICAgY2hhciB5YnVm W0RBVEVCVUZMRU4rMV07CisgICAgY2hhciB6YnVmW0RBVEVCVUZMRU4rMV07CisgICAgY2hhciB5 eXl5bW1kZFtZWVlZTU1ERF07CisgICAgY2hhciBkYnVmWzI2XTsKKyAgICBjaGFyIGRheWJ1Zlsz XTsKKyAgICBjaGFyIG1vbmJ1ZlszXTsKKyAgICBjaGFyIHllYXJidWZbNV07CisgICAgY2hhciB0 aW1idWZbMTZdLCAqdGIsIGNjOworICAgIGNoYXIgKiBkcCA9IE5VTEw7CQkJLyogUmVzdWx0IHBv aW50ZXIgKi8KKworICAgIGlmICghcykgcyA9ICIiOworICAgIHRtcGJ1ZlswXSA9IE5VTDsKKwor ICAgIHdoaWxlICgqcyA9PSBTUCkgcysrOwkJLyogR29iYmxlIGFueSBsZWFkaW5nIGJsYW5rcyAq LworICAgIGlmIChpc2FscGhhKCpzKSkJCQkvKiBSZW1lbWJlciBpZiAxc3QgY2hhciBpcyBhIGxl dHRlciAqLworICAgICAgaXNsZXR0ZXIgPSAxOworCisgICAgbGVuID0gc3RybGVuKHMpOworICAg IGRlYnVnKEYxMTAsImNtY3Z0ZGF0ZSIscyxsZW4pOworICAgIGlmIChsZW4gPT0gMCkgewkJCS8q IE5vIGFyZyAtIHJldHVybiBjdXJyZW50IGRhdGUtdGltZSAqLworCWRwID0gY2tkYXRlKCk7CisJ Z290byB4Y3Z0ZGF0ZTsKKyAgICB9CisgICAgaWYgKGxlbiA+IERBVEVCVUZMRU4pIHsJCS8qIENo ZWNrIGxlbmd0aCBvZiBhcmcgKi8KKwltYWtlc3RyKCZjbWRhdGVtc2csIkRhdGUtdGltZSBzdHJp bmcgdG9vIGxvbmciKTsKKwlkZWJ1ZyhGMTExLCJjbWN2dGRhdGUiLGNtZGF0ZW1zZywtMSk7CisJ cmV0dXJuKE5VTEwpOworICAgIH0KKyAgICBoaCA9IDA7CQkJCS8qIEluaXQgdGltZSB0byAwMDow MDowMC4wICovCisgICAgbW0gPSAwOworICAgIHNzID0gMDsKKyAgICBmZiA9IDA7CisgICAgenRp bWUoJnApOworICAgIGlmICghcCkKKyAgICAgIHAgID0gIiI7CisgICAgaWYgKCpwKSB7CQkJCS8q IEluaXQgdGltZSB0byBjdXJyZW50IHRpbWUgKi8KKwl4ID0gY2tzdHJuY3B5KGRidWYscCwyNik7 CisJaWYgKHggPiAxNykgeworCSAgICBoaCA9IGF0b2koJmRidWZbMTFdKTsKKwkgICAgbW0gPSBh dG9pKCZkYnVmWzE0XSk7CisJICAgIHNzID0gYXRvaSgmZGJ1ZlsxN10pOworCX0KKyAgICB9Cisg ICAgY2tzdHJuY3B5KHl5eXltbWRkLHp6bmRhdGUoKSxZWVlZTU1ERCk7IC8qIEluaXQgZGF0ZSB0 byBjdXJyZW50IGRhdGUgKi8KKyAgICBja3N0cm5jcHkoeWVhcmJ1Zix5eXl5bW1kZCw1KTsKKyAg ICBja3N0cm5jcHkobW9uYnVmLCZ5eXl5bW1kZFs0XSwzKTsKKyAgICBja3N0cm5jcHkoZGF5YnVm LCZ5eXl5bW1kZFs2XSwzKTsKKyAgICB5ZWFyID0geWVhcmJ1ZjsKKyAgICBtb250aCA9IG1vbmJ1 ZjsKKyAgICBkYXkgPSBkYXlidWY7CisgICAgbmRheSA9IGF0b2koZGF5YnVmKTsKKyAgICBja3N0 cm5jcHkoeGJ1ZixzLERBVEVCVUZMRU4pOwkvKiBNYWtlIGEgbG9jYWwgY29weSB3ZSBjYW4gcG9r ZSAqLworICAgIHMgPSB4YnVmOwkJCQkvKiBQb2ludCB0byBpdCAqLworICAgIHNbbGVuXSA9IE5V TDsKKyAgICBpZiAoc1swXSA9PSAnOicpIHsKKwlwID0gczsKKwlnb3RvIGRvdGltZTsKKyAgICB9 CisgICAgLyogU3BlY2lhbCBwcmVzZXQgZm9ybWF0cy4uLiAqLworCisgICAgaWYgKGxlbiA+PSAx NCkgewkJCS8qIEZUUCBNRFRNIGFsbC1udW1lcmljIGRhdGUgKi8KKwljaGFyIGM7CisJYyA9IHNb MTRdOwkJCS8qIGUuZy4gMTk5ODA2MTUxMDAwNDUuMDE0ICovCisJc1sxNF0gPSBOVUw7CisJeCA9 IHJkaWdpdHMocyk7CisJc1sxNF0gPSBjOworCWlmICh4KSB7CisJICAgIGNrc3RybmNweSh5eXl5 bW1kZCxzLDgrMSk7CisJICAgIHllYXIgPSBOVUxMOworCSAgICBwID0gJnNbOF07CisJICAgIGdv dG8gZG90aW1lOworCX0KKyAgICB9CisgICAgeCA9IDA7CQkJCS8qIEJlY29tZXMgPiAwIGZvciBh c2N0aW1lIGZvcm1hdCAqLworICAgIGlmIChpc2FscGhhKHNbMF0pKSB7CisJaWYgKGxlbiA9PSAy NCkgewkJLyogQXNjdGltZSBmb3JtYXQ/ICovCisJICAgIC8qIFNhdCBKdWwgMTQgMTU6NTc6MzIg MjAwMSAqLworCSAgICB4ID0gY2ttYXRjaChhdHAxLHMsMCwwKTsKKwkgICAgZGVidWcoRjExMSwi Y21jdnRkYXRlIGFzY3RpbWUiLHMseCk7CisJfSBlbHNlIGlmIChsZW4gPT0gMjgpIHsJCS8qIE9y IEFzY3RpbWUgcGx1cyB0aW1lem9uZT8gKi8KKwkgICAgLyogU2F0IEp1bCAxNCAxNToxNTozOSBF RFQgMjAwMSAqLworCSAgICB4ID0gY2ttYXRjaChhdHAyLHMsMCwwKTsKKwkgICAgZGVidWcoRjEx MSwiY21jdnRkYXRlIGFzY3RpbWUrdGltZXpvbmUiLHMseCk7CisJfQorICAgIH0KKyAgICBpZiAo eCA+IDApIHsJCQkvKiBBc2N0aW1lIGZvcm1hdCAqLworICAgICAgICBpbnQgeHg7CisgICAgICAg IHN0cm5jcHkoeWVhcmJ1ZixzICsgbGVuIC0gNCw0KTsKKyAgICAgICAgeWVhcmJ1Zls0XSA9IE5V TDsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IDM7IGkrKykKKyAgICAgICAgICB0bXBidWZbaV0g PSBzW2krNF07CisgICAgICAgIHRtcGJ1ZlszXSA9IE5VTDsKKwlpZiAoKHh4ID0gbG9va3VwKGNt b250aHMsdG1wYnVmLDEyLE5VTEwpKSA8IDApIHsKKwkgICAgbWFrZXN0cigmY21kYXRlbXNnLCJJ bnZhbGlkIG1vbnRoIik7CisJICAgIGRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSIsY21kYXRlbXNnLC0x KTsKKwkgICAgcmV0dXJuKE5VTEwpOworCX0KKyAgICAgICAgZGVidWcoRjEwMSwiY21jdnRkYXRl IGFzY3RpbWUgbW9udGgiLCIiLHh4KTsKKyAgICAgICAgbW9uYnVmWzBdID0gKHh4IC8gMTApICsg JzAnOyAKKyAgICAgICAgbW9uYnVmWzFdID0gKHh4ICUgMTApICsgJzAnOyAKKyAgICAgICAgbW9u YnVmWzJdID0gTlVMOworICAgICAgICBkYXlidWZbMF0gPSAoc1s4XSA9PSAnICcgPyAnMCcgOiBz WzhdKTsKKyAgICAgICAgZGF5YnVmWzFdID0gc1s5XTsKKyAgICAgICAgZGF5YnVmWzJdID0gTlVM OworCXhidWZbMF0gPSBTUDsKKyAgICAgICAgZm9yIChpID0gMTE7IGkgPCAxOTsgaSsrKQorICAg ICAgICAgIHhidWZbaS0xMF0gPSBzW2ldOworICAgICAgICB4YnVmWzldID0gTlVMOworCWNrbWFr bXNnKHpidWYsMTgseWVhcmJ1Zixtb25idWYsZGF5YnVmLHhidWYpOworCWRlYnVnKEYxMTAsImNt Y3Z0ZGF0ZSBhc2N0aW1lIG9rIix6YnVmLDApOworCWlmIChsZW4gPT0gMjQpIHsKKwkgICAgZHAg PSB6YnVmOworCSAgICBnb3RvIHhjdnRkYXRlOworCX0gZWxzZSB7CisJICAgIGludCBuOworCSAg ICBuID0gY2ttYWttc2coeWJ1ZixEQVRFQlVGTEVOLTQsemJ1ZiwiICIsTlVMTCxOVUxMKTsKKwkg ICAgeWJ1ZltuKytdID0gc1syMF07CisJICAgIHlidWZbbisrXSA9IHNbMjFdOworCSAgICB5YnVm W24rK10gPSBzWzIyXTsKKwkgICAgeWJ1ZltuKytdID0gTlVMOworCSAgICBja3N0cm5jcHkoeGJ1 Zix5YnVmLERBVEVCVUZMRU4pOworCSAgICBzID0geGJ1ZjsKKwkgICAgaXNsZXR0ZXIgPSAwOwor CX0KKyAgICB9CisKKy8qIENoZWNrIGZvciBkYXkgb2Ygd2VlayAqLworCisgICAgcCA9IHM7Cisg ICAgd2hpbGUgKCpwID09IFNQKSBwKys7CisgICAgZG93ID0gLTE7CisgICAgaWYgKCpwKSB7CisJ cDIgPSBwOworCWNjID0gTlVMOworCXdoaWxlICgxKSB7CisJICAgIGlmICgqcDIgPT0gJywnIHx8 ICpwMiA9PSBTUCB8fCAhKnAyKSB7CisJCWNjID0gKnAyOwkJLyogU2F2ZSBicmVhayBjaGFyICov CisJCSpwMiA9IE5VTDsJCS8qIE5VTCBpdCBvdXQgKi8KKwkJcDMgPSBwMjsJCS8qIFJlbWVtYmVy IHRoaXMgc3BvdCAqLworCQlpZiAoKGRvdyA9IGxvb2t1cChkYXlzb2Z3ZWVrLHAsNyxOVUxMKSkg PiAtMSkgeworCQkgICAgZGVidWcoRjExMSwiY21jdnRkYXRlIGRvdyIscCxkb3cpOworCQkgICAg cyA9IHAyOworCQkgICAgaWYgKGNjID09ICcsJyB8fCBjYyA9PSBTUCkgeyAvKiBQb2ludCB0byBu ZXh0IGZpZWxkICovCisJCQlzKys7CisJCQl3aGlsZSAoKnMgPT0gU1ApIHMrKzsKKwkJICAgIH0K KwkJICAgIHAgPSBzOworCQkgICAgZGVidWcoRjExMSwiY21jdnRkYXRlIGRvdyBuZXcgcCIscCxk b3cpOworCQkgICAgYnJlYWs7CisJCX0gZWxzZSBpZiAoaXNhbHBoYSgqcCkgJiYgY2MgPT0gJywn KSB7CisJCSAgICBtYWtlc3RyKCZjbWRhdGVtc2csIlVucmVjb2duaXplZCBkYXkgb2Ygd2VlayIp OworCQkgICAgZGVidWcoRjExMSwiY21jdnRkYXRlIixjbWRhdGVtc2csLTEpOworCQkgICAgcmV0 dXJuKE5VTEwpOworCQl9IGVsc2UgeworCQkgICAgKnAzID0gY2M7CisJCSAgICBicmVhazsKKwkJ fQorCSAgICB9CisJICAgIHAyKys7CisJfQorICAgIH0KKyAgICBsZW4gPSBzdHJsZW4ocyk7CQkv KiBVcGRhdGUgbGVuZ3RoICovCisgICAgZGVidWcoRjExMSwiY21jdnRkYXRlIHMiLHMsbGVuKTsK KworICAgIGRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSBkb3ciLHMsZG93KTsKKyAgICBpZiAoZG93ID4g LTEpIHsJCQkvKiBIYXZlIGEgZGF5LW9mLXdlZWsgbnVtYmVyICovCisJbG9uZyB6ejsgaW50IG4s IGo7CisJenogPSBtamQoenpuZGF0ZSgpKTsJCS8qIEdldCB0b2RheSdzIE1KRCAqLworCWRlYnVn KEYxMTEsImNtY3Z0ZGF0ZSB6eiIsIiIsenopOworCWogPSAoKChpbnQpKHp6ICUgN0wpKSArIDMp ICUgNzsgLyogVG9kYXkncyBkYXktb2Ytd2VlayBudW1iZXIgKi8KKwlkZWJ1ZyhGMTExLCJjbWN2 dGRhdGUgaiIsIiIsaik7CisJaGggPSAwOwkJCQkvKiBJbml0IHRpbWUgdG8gbWlkbmlnaHQgKi8K KwltbSA9IDA7CisJc3MgPSAwOworCWlmIChqID09IGRvdykgeworCSAgICBja3N0cm5jcHkoeXl5 eW1tZGQsenpuZGF0ZSgpLFlZWVlNTUREKTsKKwkgICAgeWVhciA9IE5VTEw7CisJfSBlbHNlIHsK KwkgICAgbiA9IGRvdyAtIGo7CQkvKiBEYXlzIGZyb20gbm93ICovCisJICAgIGlmIChkb3cgPCBq KQorCSAgICAgIG4gKz0gNzsKKwkgICAgaWYgKG4gPCAwKSBuICs9IDc7CQkvKiBBZGQgdG8gTUpE ICovCisJICAgIHp6ICs9IG47CisJICAgIGNrc3RybmNweSh5eXl5bW1kZCxtamQyZGF0ZSh6eiks WVlZWU1NREQpOyAvKiBOZXcgZGF0ZSAqLworCSAgICB5ZWFyID0gTlVMTDsKKwl9CisJZGVidWco RjExMSwiY21jdnRkYXRlIEEiLHl5eXltbWRkLGxlbik7CisJaWYgKGxlbiA9PSAwKSB7CQkJLyog Tm8gbW9yZSBmaWVsZHMgYWZ0ZXIgdGhpcyAqLworCSAgICBja21ha21zZyh6YnVmLDE4LHl5eXlt bWRkLCIgMDA6MDA6MDAiLE5VTEwsTlVMTCk7CisJICAgIGRwID0gemJ1ZjsKKwkgICAgZ290byB4 Y3Z0ZGF0ZTsKKwl9CisJaXNsZXR0ZXIgPSAwOworCWlmIChyZGlnaXRzKHApICYmIGxlbiA8IDgp CS8qIE5leHQgZmllbGQgaXMgdGltZT8gKi8KKwkgIGdvdG8gZG90aW1lOwkJCS8qIElmIHNvIGdv IHN0cmFpZ2h0IHRvIHRpbWUgc2VjdGlvbiAqLworCWlmIChpc2RpZ2l0KCpwKSkgeworCSAgICBp ZiAoKihwKzEpID09ICc6JykKKwkgICAgICBnb3RvIGRvdGltZTsKKwkgICAgZWxzZSBpZiAoaXNk aWdpdCgqKHArMSkpICYmICgqKHArMikgPT0gJzonKSkKKwkgICAgICBnb3RvIGRvdGltZTsKKwl9 CisgICAgfQorICAgIGRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSBCIHMiLHMsZG93KTsKKyAgICBkZWJ1 ZyhGMTExLCJjbWN2dGRhdGUgQiBwIixwLGRvdyk7CisKKyAgICBpZiAoKnMgPT0gJysnIHx8ICpz ID09ICctJykgewkvKiBEZWx0YSB0aW1lIG9ubHkgLSBza2lwIGFoZWFkLiAqLworCXAgPSBzOwor CWdvdG8gZGVsdGE7CisgICAgfQorI2lmZGVmIENPTU1FTlQKKy8qCisgIFdoYXQgaXMgdGhlIHB1 cnBvc2Ugb2YgdGhpcz8gIEl0IGJyZWFrcyBwYXJzaW5nIG9mIGVtYWlsIGRhdGVzIGxpa2UKKyAg IldlZCwgMTMgRmViIDIwMDIgMTc6NDM6MDIgLTA4MDAgKFBTVCkiLiAgUmVtb3ZpbmcgdGhpcyBj b2RlIGZpeGVzIHRoZQorICBwcm9ibGVtIGFuZCBLZXJtaXQgc3RpbGwgcGFzc2VzIHRoZSAnZGF0 ZXMnIHNjcmlwdC4KKyAgLSBmZGMsIFNhdCBOb3YgMjYgMTA6NTI6NDUgMjAwNS4KKyovCisgICAg aWYgKGRvdyA+IC0xKSB7CisJLyogRGF5IG9mIHdlZWsgZ2l2ZW4gZm9sbG93ZWQgYnkgc29tZXRo aW5nIHRoYXQgaXMgbm90IGEgdGltZSAqLworCS8qIG9yIGEgZGVsdGEgc28gaXQgY2FuJ3QgYmUg dmFsaWQgKi8KKwltYWtlc3RyKCZjbWRhdGVtc2csIkludmFsaWQgdG9rZW5zIGFmdGVyIGRheSBv ZiB3ZWVrIik7CisJZGVidWcoRjExMSwiY21jdnRkYXRlIGZhaWwiLGNtZGF0ZW1zZywtMSk7CisJ cmV0dXJuKE5VTEwpOworICAgIH0KKyNlbmRpZgkvKiBDT01NRU5UICovCisKKyAgICAvKiBIYW5k bGUgInRvZGF5IiwgInllc3RlcmRheSIsICJ0b21vcnJvdyIsIGFuZCArLy0gbiB1bml0cyAqLwor CisgICAgaWYgKGNrc3RyY2hyKCJUdFl5Tm4iLHNbMF0pKSB7CisJaW50IGksIGssIG4sIG1pbnVz ID0gMDsKKwljaGFyIGM7CisJbG9uZyBqZDsKKwlqZCA9IG1qZChja2RhdGUoKSk7CisJZGVidWco RjExMSwiY21jdnRkYXRlIG1qZCIscyxqZCk7CisKKwkvKiBTeW1ib2xpYyBkYXRlOiBUT0RBWSwg VE9NT1JST1csIGV0Yy4uLj8gKi8KKworCXMyID0gczsJCQkJLyogRmluZCBlbmQgb2Yga2V5d29y ZCAqLworCWkgPSAwOworCXdoaWxlIChpc2FscGhhKCpzMikpIHsJCS8qIGFuZCBnZXQgaXRzIGxl bmd0aCAqLworCSAgICBpKys7CisJICAgIHMyKys7CisJfQorCWMgPSAqczI7CQkJLyogWmFwIGJ1 dCBzYXZlIGRlbGltaXRlciAqLworCSpzMiA9IE5VTDsKKwlrID0gbG9va3VwKHN5bWRheXRhYixz LG5zeW1kYXlzLE5VTEwpOyAvKiBMb29rIHVwIGtleXdvcmQgKi8KKwkqczIgPSBjOwkJCS8qIFJl cGxhY2UgZGVsaW1pdGVyICovCisJaWYgKGsgPCAwKQkJCS8qIEtleXdvcmQgbm90IGZvdW5kICov CisJICBnb3RvIG5vcm1hbDsKKwlzMyA9ICZzW2ldOworCXdoaWxlICgqczMgPT0gU1ApCQkvKiBT a2lwIHdoaXRlc3BhY2UgKi8KKwkgIHMzKys7CisJaWYgKCpzMyA9PSAnXycgfHwgKnMzID09ICc6 JykKKwkgIHMzKys7CisKKwlzd2l0Y2ggKGspIHsJCQkvKiBIYXZlIGtleXdvcmQgKi8KKwkgIGNh c2UgU1lNX05PVzoJCQkvKiBOT1cgKi8KKwkgICAgY2tzdHJuY3B5KHlidWYsY2tkYXRlKCksREFU RUJVRkxFTik7CisJICAgIGNrc3RybmNweSh5eXl5bW1kZCx5YnVmLFlZWVlNTUREKTsKKwkgICAg eWVhciA9IE5VTEw7CisJICAgIGlmICgqczMpIHsJCQkvKiBObyBvdmVyd3JpdGluZyBjdXJyZW50 IHRpbWUuICovCisJCWNrc3RybmNhdCh5YnVmLCIgIixEQVRFQlVGTEVOKTsKKwkJY2tzdHJuY2F0 KHlidWYsczMsREFURUJVRkxFTik7CisJICAgIH0KKwkgICAgYnJlYWs7CisJICBkZWZhdWx0OgkJ CS8qIFllc3RlcmRheSwgVG9kYXksIGFuZCBUb21vcnJvdyAqLworCSAgICBpZiAoayA9PSBTWU1f VE9NTykgewkvKiBUT01PUlJPVyAqLworCQlzdHJuY3B5KHlidWYsbWpkMmRhdGUoamQrMSksOCk7 CisJICAgIH0gZWxzZSBpZiAoayA9PSBTWU1fWUVTVCkgewkvKiBZRVNURVJEQVkgKi8KKwkJc3Ry bmNweSh5YnVmLG1qZDJkYXRlKGpkLTEpLDgpOworCSAgICB9IGVsc2UgewkJCS8qIFRPREFZICov CisJCXN0cm5jcHkoeWJ1Zixja2RhdGUoKSw4KTsKKwkgICAgfQorCSAgICBzdHJuY3B5KHlidWYr OCwiIDAwOjAwOjAwIixEQVRFQlVGTEVOLTgpOyAvKiBEZWZhdWx0IHRpbWUgaXMgMCAqLworCSAg ICBja3N0cm5jcHkoeXl5eW1tZGQseWJ1ZixZWVlZTU1ERCk7CisJICAgIHllYXIgPSBOVUxMOwor CSAgICBpZiAoKnMzKSB7CQkJLyogSWYgc29tZXRoaW5nIGZvbGxvd3Mga2V5d29yZC4uLiAqLwor CQlpZiAoaXNkaWdpdCgqczMpKSB7CS8qIFRpbWUgLSBvdmVyd3JpdGUgZGVmYXVsdCB0aW1lICov CisJCSAgICBzdHJuY3B5KHlidWYrOCxzK2ksREFURUJVRkxFTi04KTsKKwkJfSBlbHNlIHsJCS8q IFNvbWV0aGluZyBlbHNlLCBrZWVwIGRlZmF1bHQgdGltZSAqLworCQkgICAgY2tzdHJuY2F0KHli dWYsIiAiLERBVEVCVUZMRU4pOyAvKiBhbmQgYXBwZW5kICovCisJCSAgICBja3N0cm5jYXQoeWJ1 ZixzMyxEQVRFQlVGTEVOKTsgLyogd2hhdGV2ZXIgd2UgaGF2ZSAqLworCQl9CisJICAgIH0KKwl9 CisJcyA9IHlidWY7CQkJLyogUG9pbnQgdG8gcmV3cml0dGVuIGRhdGUtdGltZSAqLworCWxlbiA9 IHN0cmxlbihzKTsJCS8qIFVwZGF0ZSBsZW5ndGggKi8KKwlpc2xldHRlciA9IDA7CQkJLyogQ2Fu Y2VsIHRoaXMgKi8KKyAgICB9CisKKy8qIFJlZ3VsYXIgZnJlZS1mb3JtYXQgbm9uLXN5bWJvbGlj IGRhdGUgKi8KKworICBub3JtYWw6CisKKyAgICBkZWJ1ZyhGMTExLCJjbWN2dGRhdGUgTk9STUFM IixzLGxlbik7CisgICAgZGVidWcoRjExMSwiY21jdnRkYXRlIGRvdyIscyxkb3cpOworICAgIGlm ICh5eXl5bW1kZFswXSAmJiAheWVhcikgeworCWNrc3RybmNweSh5ZWFyYnVmLHl5eXltbWRkLDUp OworCWNrc3RybmNweShtb25idWYsJnl5eXltbWRkWzRdLDMpOworCWNrc3RybmNweShkYXlidWYs Jnl5eXltbWRkWzZdLDMpOworCXllYXIgPSB5ZWFyYnVmOworCW1vbnRoID0gbW9uYnVmOworCWRh eSA9IGRheWJ1ZjsKKwluZGF5ID0gYXRvaShkYXlidWYpOworICAgIH0KKyAgICBpZiAoaXNkaWdp dChzWzBdKSkgewkJLyogVGltZSB3aXRob3V0IGRhdGU/ICovCisJcCA9IHM7CisJaWYgKHNbMV0g PT0gJzonKSB7CisJICAgIGRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSBOT1JNQUwgWDEiLHMsbGVuKTsK KwkgICAgZ290byBkb3RpbWU7CisJfSBlbHNlIGlmIChsZW4gPiAxICYmIGlzZGlnaXQoc1sxXSkg JiYgc1syXSA9PSAnOicpIHsKKwkgICAgZGVidWcoRjExMSwiY21jdnRkYXRlIE5PUk1BTCBYMiIs cyxsZW4pOworCSAgICBnb3RvIGRvdGltZTsKKwl9IGVsc2UgaWYgKHJkaWdpdHMocykgJiYgbGVu IDwgOCkgeworCSAgICBkZWJ1ZyhGMTExLCJjbWN2dGRhdGUgTk9STUFMIFgzIixzLGxlbik7CisJ ICAgIGdvdG8gZG90aW1lOworCX0KKyAgICB9CisgICAgaWYgKGxlbiA+PSA4ICYmIGlzZGlnaXQo KnMpKSB7CS8qIENoZWNrIGZpcnN0IGZvciB5eXl5bW1kZCogKi8KKwlkZWJ1ZyhGMTExLCJjbWN2 dGRhdGUgTk9STUFMIEEiLHMsbGVuKTsKKwljYyA9IHNbOF07CisJc1s4XSA9IE5VTDsJCQkvKiBJ c29sYXRlIGZpcnN0IDggY2hhcmFjdGVycyAqLworCWlmIChyZGlnaXRzKHMpKSB7CisJICAgIC8q IEhhdmUgdmFsaWQgdGltZSBzZXBhcmF0b3I/ICovCisJICAgIHAyID0gY2MgPyBja3N0cmNocigi IFR0Xy06IixjYykgOiBOVUxMOworCSAgICBpZiAoIWNjIHx8IHAyKSB7CisJCWNrc3RybmNweSh5 eXl5bW1kZCxzLFlZWVlNTUREKTsJLyogVmFsaWQgc2VwYXJhdG9yICovCisJCXllYXIgPSBOVUxM OworCQlzICs9IDg7CQkJICAgICAgICAvKiBvciB0aW1lIG5vdCBnaXZlbiAqLworCQlpZiAoY2Mp IHMrKzsJCSAgICAgICAgLyogS2VlcCBkYXRlICovCisJCXAgPSBzOwkJCSAgICAgICAgLyogYW5k IGdvIGhhbmRsZSB0aW1lICovCisJCWdvdG8gZG90aW1lOworCSAgICB9IGVsc2UgaWYgKCFwMikg eworCQlpZiAoaXNkaWdpdChjYykpCisJCSAgbWFrZXN0cigmY21kYXRlbXNnLCJOdW1lcmljIGRh dGUgdG9vIGxvbmciKTsKKwkJZWxzZQorCQkgIG1ha2VzdHIoJmNtZGF0ZW1zZywiSW52YWxpZCBk YXRlLXRpbWUgc2VwYXJhdG9yIik7CisJCWRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSIsY21kYXRlbXNn LC0xKTsKKwkJcmV0dXJuKE5VTEwpOworCSAgICB9CisJfQorCXNbOF0gPSBjYzsJCQkvKiBQdXQg dGhpcyBiYWNrISAqLworICAgIH0KKyAgICBkZWJ1ZyhGMTExLCJjbWN2dGRhdGUgTk9STUFMIG5v bi15eXl5bW1kZCIscyxsZW4pOworCisgICAgLyogRnJlZS1mb3JtYXQgZGF0ZSAtLSBmaWd1cmUg aXQgb3V0ICovCisKKyNpZmRlZiBDT01NRU5UCisgICAgaWYgKCpzICYmICFpc2RpZ2l0KCpzKSkg eworCW1ha2VzdHIoJmNtZGF0ZW1zZywiVW5yZWNvZ25pemVkIHdvcmQgaW4gZGF0ZSIpOworCWRl YnVnKEYxMTEsImNtY3Z0ZGF0ZSIsY21kYXRlbXNnLC0xKTsKKwlyZXR1cm4oTlVMTCk7CisgICAg fQorI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQkJLyog RmllbGQgdHlwZXMgKi8KKyAgICAgIGZ0W2ldID0gLTE7CisgICAgZmxkW2kgPSAwXSA9IChwID0g cyk7CQkvKiBGaXJzdCBmaWVsZCAqLworICAgIHdoaWxlICgqcCkgewkJCS8qIEdldCBuZXh0IHR3 byBmaWVsZHMgKi8KKwlpZiAoaXNkYXRlc2VwKCpwKSkgewkJLyogSGF2ZSBhIGRhdGUgc2VwYXJh dG9yICovCisJICAgIGlmIChpID09IDApIHsKKwkJZGF0ZXNlcCA9ICpwOworCSAgICB9IGVsc2Ug aWYgKGkgPT0gMSAmJiAqcCAhPSBkYXRlc2VwKSB7CisJCW1ha2VzdHIoJmNtZGF0ZW1zZywiSW5j b25zaXN0ZW50IGRhdGUgc2VwYXJhdG9ycyIpOworCQlkZWJ1ZyhGMTExLCJjbWN2dGRhdGUiLGNt ZGF0ZW1zZywtMSk7CisJCXJldHVybihOVUxMKTsKKwkgICAgfQorCSAgICAqcCsrID0gTlVMOwkJ CS8qIFJlcGxhY2UgYnkgTlVMICovCisJICAgIGlmICgqcCkgewkJCS8qIE5vdyB3ZSdyZSBhdCB0 aGUgbmV4dCBmaWVsZCAqLworCQl3aGlsZSAoKnAgPT0gU1ApIHArKzsJLyogU2tpcCBsZWFkaW5n IHNwYWNlcyAqLworCQlpZiAoISpwKSBicmVhazsJCS8qIE1ha2Ugc3VyZSB3ZSBzdGlsbCBoYXZl IHNvbWV0aGluZyAqLworCQlpZiAoaSA9PSAyKQkJLyogTGFzdCBvbmU/ICovCisJCSAgYnJlYWs7 CisJCWZsZFsrK2ldID0gcDsJCS8qIE5vLCByZWNvcmQgcG9pbnRlciB0byB0aGlzIG9uZSAqLwor CSAgICB9IGVsc2UgeworCQlicmVhazsKKwkgICAgfQkgICAgCisJfSBlbHNlIGlmICgoKnAgPT0g J1QnIHx8ICpwID09ICd0JykgJiYgaXNkaWdpdCgqKHArMSkpKSB7IC8qIFRpbWUgKi8KKwkgICAg KnArKyA9IE5VTDsKKwkgICAgYnJlYWs7CisJfSBlbHNlIGlmICgqcCA9PSAnOicpIHsKKwkgICAg aWYgKGkgPT0gMCAmJiBwID09IHMpIHsKKwkJbm9kYXRlID0gMTsKKwkJYnJlYWs7CisJICAgIH0g ZWxzZSBpZiAoaSAhPSAwKSB7CS8qIEFmdGVyIGEgZGF0ZSAqLworCQlpZiAoaSA9PSAyKSB7CQkv KiBPSyBhcyBkYXRlLXRpbWUgc2VwYXJhdG9yIChWTVMpICovCisJCSAgICAqcCsrID0gTlVMOwor CQkgICAgYnJlYWs7CisJCX0KKwkJaWYgKGkgPCAyKQorCQkgIG1ha2VzdHIoJmNtZGF0ZW1zZywi VG9vIGZldyBmaWVsZHMgaW4gZGF0ZSIpOworCQllbHNlCisJCSAgbWFrZXN0cigmY21kYXRlbXNn LCJNaXNwbGFjZWQgdGltZSBzZXBhcmF0b3IiKTsKKwkJZGVidWcoRjExMSwiY21jdnRkYXRlIixj bWRhdGVtc2csLTEpOworCQlyZXR1cm4oTlVMTCk7CisJICAgIH0KKwkgICAgbm9kYXRlID0gMTsJ CQkvKiBPciB3aXRob3V0IGEgZGF0ZSAqLworCSAgICBicmVhazsKKwl9CisJcCsrOworICAgIH0K KyAgICBpZiAocCA+IHMgJiYgaSA9PSAwKQkJLyogTWFrZSBzdXJlIHdlIGhhdmUgYSBkYXRlICov CisgICAgICBub2RhdGUgPSAxOwkJCS8qIE5vIGRhdGUuICovCisKKyAgICBpZiAobm9kYXRlICYm IGRvdyA+IC0xKSB7CQkvKiBIYXZlIGltcGxpZWQgZGF0ZSBmcm9tIERPVz8gKi8KKwlnb3RvIGRv dGltZTsJCQkvKiBVc2UsIHVzZSB0aGF0LCBnbyBkbyB0aW1lLiAqLworCisgICAgfSBlbHNlIGlm IChub2RhdGUpIHsJCS8qIE5vIGRhdGUgYW5kIG5vIGltcGxpZWQgZGF0ZSAqLworCWNoYXIgKnRt cCA9IE5VTEw7CQkvKiBTdWJzdGl0dXRlIHRvZGF5J3MgZGF0ZSAqLworCXp0aW1lKCZ0bXApOwor CWlmICghdG1wKQorCSAgdG1wICA9ICIiOworCWlmICghKnRtcCkgeworCSAgICBtYWtlc3RyKCZj bWRhdGVtc2csIlByb2JsZW0gc3VwcGx5aW5nIGN1cnJlbnQgZGF0ZSIpOworCSAgICBkZWJ1ZyhG MTExLCJjbWN2dGRhdGUiLGNtZGF0ZW1zZywtMSk7CisJICAgIHJldHVybihOVUxMKTsKKwl9CisJ Y2tzdHJuY3B5KGRidWYsdG1wLDI2KTsJCS8qIFJlZm9ybWF0ICovCisJaWYgKGRidWZbOF0gPT0g U1ApIGRidWZbOF0gPSAnMCc7CisJZmxkWzBdID0gZGJ1Zis4OwkJLyogZGQgKi8KKwlkYnVmWzEw XSA9IE5VTDsKKwlmbGRbMV0gPSBkYnVmKzQ7CQkvKiBtbW0gKi8KKwlkYnVmWzddID0gTlVMOwor CWZsZFsyXSA9IGRidWYrMjA7CQkvKiB5eXl5ICovCisJZGJ1ZlsyNF0gPSBOVUw7CisJaGggPSBh dG9pKCZkYnVmWzExXSk7CisJbW0gPSBhdG9pKCZkYnVmWzE0XSk7CisJc3MgPSBhdG9pKCZkYnVm WzE3XSk7CisJcCA9IHM7CQkJCS8qIEJhY2sgdXAgc291cmNlIHBvaW50ZXIgdG8gcmVwYXJzZSAq LworICAgIH0gZWxzZSBpZiAoaSA8IDIpIHsKKwltYWtlc3RyKCZjbWRhdGVtc2csIlRvbyBmZXcg ZmllbGRzIGluIGRhdGUiKTsKKwlkZWJ1ZyhGMTExLCJjbWN2dGRhdGUiLGNtZGF0ZW1zZywtMSk7 CisJcmV0dXJuKE5VTEwpOworICAgIH0KKyAgICAvKiBIYXZlIHRocmVlIGRhdGUgZmllbGRzIC0g c2VlIHdoYXQgdGhleSBhcmUgKi8KKworICAgIGZvciAoayA9IDAsIGogPSAwOyBqIDwgMzsgaisr KSB7CS8qIEdldCBudW1iZXIgb2Ygbm9uLW51bWVyaWMgZmllbGRzICovCisJZnRbal0gPSByZGln aXRzKGZsZFtqXSk7CisJZGVidWcoRjExMSwiY21jdnRkYXRlIGZsZCIsZmxkW2pdLGopOworCWlm IChmdFtqXSA9PSAwKQorCSAgaysrOworICAgIH0KKyAgICBrbiA9IGs7CQkJCS8qIEhvdyBtYW55 IG51bWVyaWMgZmllbGRzICovCisgICAgbW9udGggPSBOVUxMOwkJCS8qIFN0cmlrZSBvdXQgZGVm YXVsdCB2YWx1ZXMgKi8KKyAgICB5ZWFyID0gTlVMTDsKKyAgICBkYXkgPSBOVUxMOworCisgICAg aWYgKGsgPT0gMiAmJiBmdFsyXSA+IDApIHsJCS8qIEp1bCAyMCwgMjAwMSAqLworCWludCB4eDsK Kwl4eCA9IHN0cmxlbihmbGRbMV0pOworCXAzID0gZmxkWzFdOworCWlmICh4eCA+IDApIGlmIChw M1t4eC0xXSA9PSAnLCcpIHsKKwkgICAgcDNbeHgtMV0gPSBOVUw7CisJICAgIGlmIChyZGlnaXRz KHAzKSkgeworCQlrID0gMTsJCisJCWZ0WzFdID0gMTsKKwkgICAgfSBlbHNlIHAzW3h4LTFdID0g JywnOworCX0KKyAgICB9CisgICAgaWYgKGsgPiAxKSB7CQkJLyogV2UgY2FuIGhhdmUgb25seSBv bmUgbm9uLW51bWVyaWMgKi8KKwlpZiAobm9kYXRlKQorCSAgbWFrZXN0cigmY21kYXRlbXNnLCJV bnJlY29nbml6ZWQgd29yZCBpbiBkYXRlIik7IAorCWVsc2UgaWYgKCFmdFsyXSAmJiBpc2RpZ2l0 KCooZmxkWzJdKSkpCisJICBtYWtlc3RyKCZjbWRhdGVtc2csIkludmFsaWQgZGF0ZS10aW1lIHNl cGFyYXRvciIpOyAKKwllbHNlCisJICBtYWtlc3RyKCZjbWRhdGVtc2csIlRvbyBtYW55IG5vbi1u dW1lcmljIGZpZWxkcyBpbiBkYXRlIik7CisJZGVidWcoRjExMSwiY21jdnRkYXRlIixjbWRhdGVt c2csLTEpOworCXJldHVybihOVUxMKTsKKyAgICB9CisgICAgaWYgKCFmdFswXSkgeworCWsgPSAw OworICAgIH0gZWxzZSBpZiAoIWZ0WzFdKSB7CisJayA9IDE7CisgICAgfSBlbHNlIGlmICghZnRb Ml0pIHsKKwltYWtlc3RyKCZjbWRhdGVtc2csIk5vbi1kaWdpdCBpbiB0aGlyZCBkYXRlIGZpZWxk Iik7CisJZGVidWcoRjExMSwiY21jdnRkYXRlIixjbWRhdGVtc2csLTEpOworCXJldHVybihOVUxM KTsKKyAgICB9IGVsc2UKKyAgICAgIGsgPSAtMTsKKworICAgIGlmIChrID4gLTEpIHsKKwlpZiAo KHggPSBsb29rdXAoY21vbnRocyxmbGRba10sMTIsTlVMTCkpIDwgMCkgeworCSAgICBtYWtlc3Ry KCZjbWRhdGVtc2csIlVua25vd24gbW9udGgiKTsKKwkgICAgZGVidWcoRjExMSwiY21jdnRkYXRl IixjbWRhdGVtc2csLTEpOworCSAgICByZXR1cm4oTlVMTCk7CisJfQorCXNwcmludGYodG1wYnVm LCIlMDJkIix4KTsKKwltb250aCA9IHRtcGJ1ZjsKKyAgICB9CisgICAgZjJsZW4gPSBzdHJsZW4o ZmxkWzJdKTsJCS8qIExlbmd0aCBvZiAzcmQgZmllbGQgKi8KKworICAgIGlmIChrID09IDApIHsJ CQkvKiBtb250aG5hbWUgZGQsIHl5eXkgKi8KKwlkYXkgPSBmbGRbMV07CisJeWVhciA9IGZsZFsy XTsKKyAgICB9IGVsc2UgaWYgKCgoaW50KXN0cmxlbihmbGRbMF0pID09IDQpKSB7IC8qIHl5eXkt eHgtZGQgKi8KKwl5ZWFyID0gZmxkWzBdOworCWRheSA9IGZsZFsyXTsKKwlpZiAoIW1vbnRoKQor CSAgbW9udGggPSBmbGRbMV07CQkvKiB5eXl5LW1tLWRkICovCisgICAgfSBlbHNlIGlmIChmMmxl biA9PSA0KSB7CQkvKiB4eC14eC15eXl5ICovCisJeWVhciA9IGZsZFsyXTsKKwlpZiAobW9udGgp IHsJCQkvKiBkZC1uYW1lLXl5eXkgKi8KKwkgICAgZGF5ID0gZmxkWzBdOworCX0gZWxzZSB7CQkJ LyogeHgteHgteXl5eSAqLworCSAgICBpbnQgZjAsIGYxOworCSAgICBmMCA9IGF0b2koZmxkWzBd KTsKKwkgICAgZjEgPSBhdG9pKGZsZFsxXSk7CisJICAgIGlmICgoKGYwID4gMTIpICYmIChmMSA8 PSAxMikpIHx8IChmMSA8PSAxMiAmJiBmMCA9PSBmMSkpIHsKKwkJZGF5ID0gZmxkWzBdOwkJLyog bW0tZGQteXl5eSAqLworCQltb250aCA9IGZsZFsxXTsKKwkgICAgfSBlbHNlIGlmICgoZjAgPD0g MTIpICYmIChmMSA+IDEyKSkgeworCQlpZiAoIXJkaWdpdHMoZmxkWzFdKSkgeworCQkgICAgbWFr ZXN0cigmY21kYXRlbXNnLCJEYXkgbm90IG51bWVyaWMiKTsKKwkJICAgIGRlYnVnKEYxMTEsImNt Y3Z0ZGF0ZSIsY21kYXRlbXNnLC0xKTsKKwkJICAgIHJldHVybihOVUxMKTsKKwkJfSBlbHNlIHsK KwkJICAgIGRheSA9IGZsZFsxXTsJLyogZGQtbW0teXl5eSAqLworCQl9CisJCW1vbnRoID0gZmxk WzBdOworCSAgICB9IGVsc2UgeworCQlpZiAoIWYwIHx8ICFmMSkKKwkJICBtYWtlc3RyKCZjbWRh dGVtc2csIkRheSBvciBtb250aCBvdXQgb2YgcmFuZ2UiKTsKKwkJZWxzZQorCQkgIG1ha2VzdHIo JmNtZGF0ZW1zZywiRGF5IGFuZCBtb250aCBhcmUgYW1iaWd1b3VzIik7CisJCWRlYnVnKEYxMTEs ImNtY3Z0ZGF0ZSIsY21kYXRlbXNnLC0xKTsKKwkJcmV0dXJuKE5VTEwpOworCSAgICB9CisJfQor ICAgIH0gZWxzZSBpZiAoKGYybGVuIDwgNCkgJiYJCS8qIGRkIG1tbSB5eSAoUkZDODIyKSAqLwor CSAgICAgICAhcmRpZ2l0cyhmbGRbMV0pICYmCS8qIG1pZGRsZSBmaWVsZCBpcyBtb250aG5hbWUg Ki8KKwkgICAgICAgcmRpZ2l0cyhmbGRbMl0pKSB7CisJaW50IHRtcHllYXI7CisJZGF5ID0gZmxk WzBdOworCWlmICghZmxkWzJdWzFdKSB7CisJICAgIG1ha2VzdHIoJmNtZGF0ZW1zZywiVG9vIGZl dyBkaWdpdHMgaW4geWVhciIpOworCSAgICBkZWJ1ZyhGMTExLCJjbWN2dGRhdGUiLGNtZGF0ZW1z ZywtMSk7CisJICAgIHJldHVybihOVUxMKTsKKwl9CisJdG1weWVhciA9IGF0b2koZmxkWzJdKTsK KwlpZiAodG1weWVhciA8IDUwKQkJLyogUkZDIDI4MjIgd2luZG93aW5nICovCisJICB0bXB5ZWFy ICs9IDIwMDA7CisJZWxzZQkJCQkvKiBUaGlzIGluY2x1ZGVzIDMtZGlnaXQgeWVhcnMuICovCisJ ICB0bXB5ZWFyICs9IDE5MDA7CisJeWVhciA9IGNraXRvYSh0bXB5ZWFyKTsKKworICAgIH0gZWxz ZSBpZiAoKGYybGVuIDwgNCkgJiYgKGsgPCAwKSAmJiAoKGludClzdHJsZW4oZmxkWzBdKSA8IDQp KSB7CisJbWFrZXN0cigmY21kYXRlbXNnLCJBbWJpZ3VvdXMgbnVtZXJpYyBkYXRlIik7CisJZGVi dWcoRjExMSwiY21jdnRkYXRlIixjbWRhdGVtc2csLTEpOworCXJldHVybihOVUxMKTsKKyAgICB9 IGVsc2UgaWYgKChmMmxlbiA+IDQpICYmIGZ0WzJdKSB7CisJbWFrZXN0cigmY21kYXRlbXNnLCJU b28gbWFueSBkaWdpdHMgaW4geWVhciIpOworCWRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSIsY21kYXRl bXNnLC0xKTsKKwlyZXR1cm4oTlVMTCk7CisgICAgfSBlbHNlIHsKKwltYWtlc3RyKCZjbWRhdGVt c2csIlVuZXhwZWN0ZWQgZGF0ZSBmb3JtYXQiKTsKKwlkZWJ1ZyhGMTExLCJjbWN2dGRhdGUiLGNt ZGF0ZW1zZywtMSk7CisJcmV0dXJuKE5VTEwpOworICAgIH0KKyAgICB4ID0gYXRvaShtb250aCk7 CisgICAgc3ByaW50Zih0bXBidWYsIiUwMmQiLHgpOwkJLyogMi1kaWdpdCBudW1lcmljIG1vbnRo ICovCisKKy8qCisgICBzdGF0ZSA9IDEgPSBob3VycworICAgc3RhdGUgPSAyID0gbWludXRlcwor ICAgc3RhdGUgPSAzID0gc2Vjb25kcworICAgc3RhdGUgPSA0ID0gZnJhY3Rpb25zIG9mIHNlY29u ZHMKKyovCisKKyAgZG90aW1lOgorICAgIGlmIChpc2xldHRlciAmJiAocyA9PSBwKSkgeworCW1h a2VzdHIoJmNtZGF0ZW1zZywiVW5rbm93biBkYXRlLXRpbWUgd29yZCIpOworCWRlYnVnKEYxMTEs ImNtY3Z0ZGF0ZSIsY21kYXRlbXNnLC0xKTsKKwlyZXR1cm4oTlVMTCk7CisgICAgfQorICAgIGlm ICgheWVhciAmJiB5eXl5bW1kZFswXSkgeworCWRlYnVnKEYxMTAsImNtY3Z0ZGF0ZSBkb3RpbWUg eXl5eW1tZGQiLHl5eXltbWRkLDApOworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisJICB5ZWFy YnVmW2ldID0geXl5eW1tZGRbaV07CisJeWVhcmJ1Zls0XSA9IE5VTDsKKwltb25idWZbMF0gPSB5 eXl5bW1kZFs0XTsKKwltb25idWZbMV0gPSB5eXl5bW1kZFs1XTsKKwltb25idWZbMl0gPSBOVUw7 CisJZGF5YnVmWzBdID0geXl5eW1tZGRbNl07CisJZGF5YnVmWzFdID0geXl5eW1tZGRbN107CisJ ZGF5YnVmWzJdID0gTlVMOworCWRheSA9IGRheWJ1ZjsKKwluZGF5ID0gYXRvaShkYXlidWYpOwor CW1vbnRoID0gbW9uYnVmOworCXllYXIgPSB5ZWFyYnVmOworICAgIH0KKyAgICBpZiAoIXllYXIp IHsKKwltYWtlc3RyKCZjbWRhdGVtc2csIkludGVybmFsIGVycm9yIC0gZGF0ZSBub3QgZGVmYXVs dGVkIik7CisJZGVidWcoRjExMSwiY21jdnRkYXRlIixjbWRhdGVtc2csLTEpOworCXJldHVybihO VUxMKTsKKyAgICB9CisgICAgLyogR2V0IGhlcmUgd2l0aCBkYXksIG1vbnRoLCBhbmQgeWVhciBz ZXQgKi8KKyAgICBkZWJ1ZyhGMTEwLCJjbWN2dGRhdGUgZG90aW1lIGRheSIsZGF5LDApOworICAg IGRlYnVnKEYxMTAsImNtY3Z0ZGF0ZSBkb3RpbWUgbW9udGgiLG1vbnRoLDApOworICAgIGRlYnVn KEYxMTAsImNtY3Z0ZGF0ZSBkb3RpbWUgeWVhciIseWVhciwwKTsKKyAgICBkZWJ1ZyhGMTEwLCJj bWN2dGRhdGUgZG90aW1lIHMiLHMsMCk7CisgICAgZGVidWcoRjExMCwiY21jdnRkYXRlIGRvdGlt ZSBwIixwLDApOworICAgIHggPSBhdG9pKG1vbnRoKTsKKyAgICBpZiAoeCA+IDEyIHx8IHggPCAx KSB7CisJbWFrZXN0cigmY21kYXRlbXNnLCJNb250aCBvdXQgb2YgcmFuZ2UiKTsKKwlkZWJ1ZyhG MTExLCJjbWN2dGRhdGUiLGNtZGF0ZW1zZywtMSk7CisJcmV0dXJuKE5VTEwpOworICAgIH0KKyAg ICBuZGF5ICA9IGF0b2koZGF5KTsKKyAgICBpID0gbWRheXNbeF07CisgICAgaWYgKHggPT0gMikg aWYgKGlzbGVhcChhdG9pKHllYXIpKSkgaSsrOworICAgIGlmIChuZGF5ID4gaSB8fCBuZGF5IDwg MSkgeworCW1ha2VzdHIoJmNtZGF0ZW1zZywiRGF5IG91dCBvZiByYW5nZSIpOworCWRlYnVnKEYx MTEsImNtY3Z0ZGF0ZSIsY21kYXRlbXNnLC0xKTsKKwlyZXR1cm4oTlVMTCk7CisgICAgfQorICAg IGlmICghKnAgJiYgdCA9PSAwKSB7CisJc3ByaW50Zih6YnVmLCIlMDRkJTAyZCUwMmQiLGF0b2ko eWVhciksYXRvaShtb250aCksbmRheSk7CQorCWRwID0gemJ1ZjsKKwlnb3RvIHhjdnRkYXRlOwor ICAgIH0KKyAgICBpZiAoKnAgPT0gJysnIHx8ICpwID09ICctJykgewkvKiBHTVQgb2Zmc2V0IHdp dGhvdXQgYSB0aW1lICovCisJaGggPSAwOwkJCQkvKiBzbyBkZWZhdWx0IHRpbWUgdG8gMDA6MDA6 MDAgKi8KKwltbSA9IDA7CisJc3MgPSAwOworCWdvdG8gY210aW1lem9uZTsJCS8qIGFuZCBnbyBk byB0aW1lem9uZSAqLworICAgIH0KKyAgICBpZiAoKnAgJiYgIWlzZGlnaXQoKnApICYmICpwICE9 ICc6JykgeworCW1ha2VzdHIoJmNtZGF0ZW1zZywiSW52YWxpZCB0aW1lIik7CisJZGVidWcoRjEx MSwiY21jdnRkYXRlIixjbWRhdGVtc2csLTEpOworCXJldHVybihOVUxMKTsKKyAgICB9CisgICAg c3ByaW50Zih5eXl5bW1kZCwiJXMlcyUwMmQiLHllYXIsbW9udGgsbmRheSk7IC8qIGZvciB0eiBj YWxjdWxhdGlvbnMuLi4gKi8KKworICAgIHN0YXRlID0gMTsJCQkJLyogSW5pdGlhbGl6ZSB0aW1l LXBhcnNpbmcgRlNBICovCisgICAgaGggPSAwOwkJCQkvKiBob3VycyAqLworICAgIG1tID0gMDsJ CQkJLyogbWludXRlcyAqLworICAgIHNzID0gMDsJCQkJLyogc2Vjb25kcyAqLworICAgIGZmID0g LTE7CQkJCS8qIGZyYWN0aW9uICovCisgICAgZCA9IDA7CQkJCS8qIERpZ2l0IGNvdW50ZXIgKi8K KyAgICBwMiA9IHA7CQkJCS8qIFByZWxpbWluYXJ5IGRpZ2l0IGNvdW50Li4uICovCisgICAgd2hp bGUgKGlzZGlnaXQoKnAyKSkgeworCWQrKzsKKwlwMisrOworICAgIH0KKyAgICBpZiAoZCA+IDYp IHsKKwltYWtlc3RyKCZjbWRhdGVtc2csIlRvbyBtYW55IHRpbWUgZGlnaXRzIik7CisJZGVidWco RjExMSwiY21jdnRkYXRlIixjbWRhdGVtc2csLTEpOworCXJldHVybihOVUxMKTsKKyAgICB9Cisg ICAgZCA9IChkICYgMSAmJiAqcDIgIT0gJzonKSA/IDEgOiAwOwkvKiBPZGQgaW1wbGllcyBsZWFk aW5nICcwJyAqLworCisgICAgd2hpbGUgKCpwKSB7CQkJLyogR2V0IHRoZSB0aW1lLCBpZiBhbnkg Ki8KKwlpZiAoaXNkaWdpdCgqcCkpIHsJCS8qIGRpZ2l0ICovCisJICAgIGlmIChkKysgPiAxKSB7 CisJCXN0YXRlKys7CisJCWQgPSAxOworCSAgICB9CisJICAgIHN3aXRjaCAoc3RhdGUpIHsKKwkg ICAgICBjYXNlIDE6CQkJLyogSG91cnMgKi8KKwkJaGggPSBoaCAqIDEwICsgKCpwIC0gJzAnKTsK KwkJYnJlYWs7CisJICAgICAgY2FzZSAyOgkJCS8qIE1pbnV0ZXMgKi8KKwkJbW0gPSBtbSAqIDEw ICsgKCpwIC0gJzAnKTsKKwkJYnJlYWs7CisJICAgICAgY2FzZSAzOgkJCS8qIFNlY29uZHMgKi8K KwkJc3MgPSBzcyAqIDEwICsgKCpwIC0gJzAnKTsKKwkJYnJlYWs7CisJICAgICAgY2FzZSA0OgkJ CS8qIEZyYWN0aW9uIG9mIHNlY29uZCAqLworCQlpZiAoZmYgPCAwKQorCQkgIGZmID0gKCpwID4g JzQnKSA/IDEgOiAwOworCQlicmVhazsKKwkgICAgfQorCX0gZWxzZSBpZiAoKnAgPT0gJzonKSB7 CQkvKiBDb2xvbiAqLworCSAgICBzdGF0ZSsrOworCSAgICBkID0gMDsKKwkgICAgaWYgKHN0YXRl ID4gMykgeworCQltYWtlc3RyKCZjbWRhdGVtc2csIlRvbyBtYW55IHRpbWUgZmllbGRzIik7CisJ CWRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSIsY21kYXRlbXNnLC0xKTsKKwkJcmV0dXJuKE5VTEwpOwor CSAgICB9CisJfSBlbHNlIGlmICgqcCA9PSAnLicpIHsKKwkgICAgaWYgKHN0YXRlID09IDMpIHsK KwkJc3RhdGUgPSA0OworCQlkID0gMDsKKwkgICAgfSBlbHNlIHsKKwkJbWFrZXN0cigmY21kYXRl bXNnLCJJbXByb3BlciBmcmFjdGlvbiIpOworCQlkZWJ1ZyhGMTExLCJjbWN2dGRhdGUiLGNtZGF0 ZW1zZywtMSk7CisJCXJldHVybihOVUxMKTsKKwkgICAgfQorCX0gZWxzZSBpZiAoKnAgPT0gU1Ap IHsJCS8qIFNwYWNlICovCisJICAgIHdoaWxlICgqcCAmJiAoKnAgPT0gU1ApKQkvKiBwb3NpdGlv biB0byBmaXJzdCBub25zcGFjZSAqLworCSAgICAgIHArKzsKKwkgICAgYnJlYWs7CisJfSBlbHNl IGlmIChpc2FscGhhKCpwKSkgewkvKiBBTS9QTS9aIG9yIHRpbWV6b25lICovCisJICAgIGJyZWFr OworCX0gZWxzZSBpZiAoKnAgPT0gJysnIHx8ICpwID09ICctJykgeyAvKiBHTVQgb2Zmc2V0ICov CisJICAgIGJyZWFrOworCX0gZWxzZSB7CisJICAgIG1ha2VzdHIoJmNtZGF0ZW1zZywiSW52YWxp ZCB0aW1lIGNoYXJhY3RlcnMiKTsKKwkgICAgZGVidWcoRjExMSwiY21jdnRkYXRlIixjbWRhdGVt c2csLTEpOworCSAgICByZXR1cm4oTlVMTCk7CisJfQorCXArKzsKKyAgICB9CisgICAgaWYgKCEq cCkJCQkJLyogSWYgbm90aGluZyBsZWZ0ICovCisgICAgICBnb3RvIHhjbWRhdGU7CQkJLyogZ28g ZmluaXNoIHVwICovCisKKyAgICAvKiBBdCB0aGlzIHBvaW50IHdlIGhhdmUgSEgsIE1NLCBTUywg YW5kIEZGICovCisgICAgLyogTm93IGhhbmRsZSB0aGUgcmVzdDogQU0sIFBNLCBhbmQvb3IgdGlt ZXpvbmUgaW5mbyAqLworCisgICAgaWYgKCFja3N0cmNtcChwLCJhbSIsMiwwKSkgewkvKiBBTS9Q TS4uLiAqLworCXBtZmxhZyA9IDA7CisJcCArPSAyOworICAgIH0gZWxzZSBpZiAoIWNrc3RyY21w KHAsImEubS4iLDQsMCkpIHsKKwlwbWZsYWcgPSAwOworCXAgKz0gNDsKKyAgICB9IGVsc2UgaWYg KCFja3N0cmNtcChwLCJwbSIsMiwwKSkgeworCXBtZmxhZyA9IDE7CisJcCArPSAyOworICAgIH0g ZWxzZSBpZiAoIWNrc3RyY21wKHAsInAubS4iLDQsMCkpIHsKKwlwbWZsYWcgPSAxOworCXAgKz0g NDsKKyAgICB9CisgICAgaWYgKHBtZmxhZyAmJiBoaCA8IDEyKQkJLyogSWYgUE0gd2FzIGdpdmVu ICovCisgICAgICBoaCArPSAxMjsJCQkJLyogYWRkIDEyIHRvIHRoZSBob3VyICovCisKKyAgICAv KiBOb3cgaGFuZGxlIHRpbWV6b25lICovCisKKyAgY210aW1lem9uZToKKyAgICBkZWJ1ZyhGMTEw LCJjbWN2dGRhdGUgdGltZXpvbmUiLHAsMCk7CisKKyAgICB6aGggPSAwOwkJCQkvKiBHTVQgb2Zm c2V0IEhIICovCisgICAgem1tID0gMDsJCQkJLyogR01UIG9mZnNldCBNTSAqLworICAgIGdtdHNp Z24gPSAwOwkJCS8qIFNpZ24gb2YgR01UIG9mZnNldCAqLworICAgIGlzZ210ID0gMDsJCQkJLyog MSBpZiB0aW1lIGlzIEdNVCAqLworCisgICAgd2hpbGUgKCpwICYmICpwID09IFNQKQkJLyogR29i YmxlIHNwYWNlcyAqLworICAgICAgcCsrOworICAgIGlmICghKnApCQkJCS8qIElmIG5vdGhpbmcg bGVmdCAqLworICAgICAgZ290byB4Y21kYXRlOwkJCS8qIHdlJ3JlIGRvbmUgKi8KKworICAgIGlm IChpc2FscGhhKCpwKSkgewkJCS8qIFNvbWV0aGluZyBsZWZ0ICovCisJaW50IHpvbmUgPSAwOwkJ CS8qIEFscGhhYmV0aWMgbXVzdCBiZSB0aW1lem9uZSAqLworCXAyID0gcDsJCQkJLyogSXNvbGF0 ZSB0aW1lem9uZSAqLworCXArKzsKKwl3aGlsZSAoaXNhbHBoYSgqcCkpCisJICBwKys7CisJcDMg PSBwOworCWNjID0gKnA7CisJKnAgPSBOVUw7CisJcCA9IHAyOwkJCQkvKiBIYXZlIHRpbWV6b25l LCBsb29rIGl0IHVwICovCisJem9uZSA9IGxvb2t1cCh1c2F0eixwLG51c2F0eixOVUxMKTsKKwlk ZWJ1ZyhGMTExLCJjbWN2dGRhdGUgdGltZXpvbmUgYWxwaGEiLHAsem9uZSk7CisKKwlpZiAoem9u ZSA8IDApIHsJCQkvKiBOb3QgZm91bmQgKi8KKwkgICAgbWFrZXN0cigmY21kYXRlbXNnLCJVbmtu b3duIHRpbWV6b25lIik7CisJICAgIGRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSIsY21kYXRlbXNnLC0x KTsKKwkgICAgcmV0dXJuKE5VTEwpOworCX0KKwlpc2dtdCsrOwkJCS8qIEFsbCBkYXRlcyBhcmUg R01UIGZyb20gaGVyZSBkb3duICovCisJaWYgKHpvbmUgIT0gMCkgewkJLyogQnV0IG5vdCB0aGlz IG9uZSBzbyBtYWtlIGl0IEdNVCAqLworCSAgICBoaCArPSB6b25lOwkJCS8qIFJGQyA4MjIgdGlt ZXpvbmU6IEVTVCBldGMgKi8KKwkgICAgZGVidWcoRjEwMSwiY21jdnRkYXRlIGhoICsgem9uZSIs IiIsaGgpOworCSAgICBpZiAoaGggPiAyMykgewkJLyogT2Zmc2V0IGNyb3NzZXMgZGF0ZSBib3Vu ZGFyeSAqLworCQlpbnQgaTsKKwkJbG9uZyBqZDsKKwkJamQgPSBtamQoeXl5eW1tZGQpOwkvKiBH ZXQgTUpEICovCisJCWpkICs9IGhoIC8gMjQ7CQkvKiBBZGQgbmV3IGRheShzKSAqLworCQloaCA9 IGhoICUgMjQ7CQkvKiBhbmQgY29udmVydCBiYWNrIHRvIHl5eXltbWRkICovCisJCWNrc3RybmNw eSh5eXl5bW1kZCxtamQyZGF0ZShqZCksWVlZWU1NREQpOworCQlkZWJ1ZyhGMTExLCJjbWN2dGRh dGUgem9uZS1hZGp1c3RlZCBkYXRlIix5eXl5bW1kZCxoaCk7CisJCWZvciAoaSA9IDA7IGkgPCA0 OyBpKyspCisJCSAgeWVhcmJ1ZltpXSA9IHl5eXltbWRkW2ldOworCQl5ZWFyYnVmWzRdID0gTlVM OworCQltb25idWZbMF0gPSB5eXl5bW1kZFs0XTsKKwkJbW9uYnVmWzFdID0geXl5eW1tZGRbNV07 CisJCW1vbmJ1ZlsyXSA9IE5VTDsKKwkJZGF5YnVmWzBdID0geXl5eW1tZGRbNl07CisJCWRheWJ1 ZlsxXSA9IHl5eXltbWRkWzddOworCQlkYXlidWZbMl0gPSBOVUw7CisJCWRheSA9IGRheWJ1ZjsK KwkJbmRheSA9IGF0b2koZGF5YnVmKTsKKwkJbW9udGggPSBtb25idWY7CisJCXllYXIgPSB5ZWFy YnVmOworCSAgICB9CisJfQorCXAgPSBwMzsJCQkJLyogUHV0IGJhY2sgd2hhdGV2ZXIgd2UgcG9r ZWQgYWJvdmUgKi8KKwkqcCA9IGNjOworCisgICAgfSBlbHNlIGlmICgqcCA9PSAnKycgfHwgKnAg PT0gJy0nKSB7IC8qIEdNVC9VVEMgb2Zmc2V0ICovCisJcDMgPSBwOworCWRlYnVnKEYxMTAsImNt Y3Z0ZGF0ZSB0aW1lem9uZSBHTVQgb2Zmc2V0IixwLDApOworCWdtdHNpZ24gPSAoKnAgPT0gJysn KSA/IC0xIDogMTsKKwlpc2dtdCsrOworCXArKzsKKwl3aGlsZSAoKnAgPT0gU1ApIHArKzsKKwlk ID0gMDsKKwlwMiA9IHA7CisJd2hpbGUgKGlzZGlnaXQoKnApKSB7CQkvKiBDb3VudCBkaWdpdHMg Ki8KKwkgICAgZCsrOworCSAgICBwKys7CisJfQorCWlmIChkICE9IDQpIHsJCQkvKiBTdHJpY3Qg UkZDIFsyXTgyMiAqLworCSAgICBpc2dtdCA9IDA7CQkJLyogSWYgbm90IGV4YWN0bHkgNCBkaWdp dHMgKi8KKwkgICAgcCA9IHAzOwkJCS8qIGl0J3Mgbm90IGEgR01UIG9mZnNldC4gKi8KKwkgICAg Z290byBkZWx0YTsJCQkvKiBTbyB0cmVhdCBpdCBhcyBhIGRlbHRhIHRpbWUuICovCisJfQorCWQg PSAoZCAmIDEgJiYgKnAgIT0gJzonKSA/IDEgOiAwOyAvKiBPZGQgaW1wbGllcyBsZWFkaW5nICcw JyAqLworCXAgPSBwMjsKKwlkZWJ1ZyhGMTExLCJjbWN2dGRhdGUgR01UIG9mZnNldCBzaWduIixw LGdtdHNpZ24pOworCWRlYnVnKEYxMDEsImNtY3Z0ZGF0ZSBHTVQgb2Zmc2V0IGQiLCIiLGQpOwor CXN0YXRlID0gMTsKKwl3aGlsZSAoKnApIHsKKwkgICAgaWYgKGlzZGlnaXQoKnApKSB7CQkvKiBk aWdpdCAqLworCQlpZiAoZCsrID4gMSkgeworCQkgICAgc3RhdGUrKzsKKwkJICAgIGQgPSAxOwor CQl9CisJCXN3aXRjaCAoc3RhdGUpIHsKKwkJICBjYXNlIDE6CisJCSAgICB6aGggPSB6aGggKiAx MCArICgqcCAtICcwJyk7CisJCSAgICBicmVhazsKKwkJICBjYXNlIDI6CisJCSAgICB6bW0gPSB6 bW0gKiAxMCArICgqcCAtICcwJyk7CisJCSAgICBicmVhazsKKwkJICBkZWZhdWx0OgkJLyogSWdu b3JlIHNlY29uZHMgb3IgZnJhY3Rpb25zICovCisJCSAgICBicmVhazsKKwkJfQkJCQorCSAgICB9 IGVsc2UgaWYgKCpwID09ICc6JykgewkvKiBDb2xvbiAqLworCQlzdGF0ZSsrOworCQlkID0gMDsK KwkgICAgfSBlbHNlIGlmICgqcCA9PSBTUCB8fCAqcCA9PSAnKCcpIHsKKwkJYnJlYWs7CisJICAg IH0gZWxzZSB7CisJCXAgPSBwMzsJCQkvKiBNYXliZSBpdCdzIG5vdCBhIEdNVCBvZmZzZXQuICov CisJCWdvdG8gZGVsdGE7CQkvKiBTbyB0cmVhdCBpdCBhcyBhIGRlbHRhIHRpbWUuICovCisJICAg IH0KKwkgICAgcCsrOworCX0KKyAgICB9CisgICAgZGVidWcoRjExMCwiY21jdnRkYXRlIHNvdXJj ZSBzdHJpbmcgYWZ0ZXIgdGltZXpvbmUiLHAsMCk7CisKKyAgICBpZiAoKnApIHsJCQkJLyogQW55 dGhpbmcgbGVmdD8gKi8KKwlwMiA9IHA7CisJd2hpbGUgKCpwMiA9PSBTUCkJCS8qIFNraXAgcGFz dCBzcGFjZXMgKi8KKwkgIHAyKys7CisJaWYgKCpwMiA9PSAnKCcpIHsJCS8qIFJGQy04MjIgY29t bWVudD8gKi8KKwkgICAgaW50IHBjID0gMTsJCQkvKiBwYXJlbiBjb3VudGVyICovCisJICAgIHAy Kys7CisJICAgIHdoaWxlICgqcDIpIHsKKwkJaWYgKCpwMiA9PSAnKScpIHsKKwkJICAgIGlmICgt LXBjID09IDApIHsKKwkJCXAyKys7CisJCQlicmVhazsKKwkJICAgIH0KKwkJfSBlbHNlIGlmICgq cDIgPT0gJyknKSB7CisJCSAgICBwYysrOworCQl9CisJCXAyKys7CisJICAgIH0JCQorCSAgICB3 aGlsZSAoKnAyID09IFNQKQkJLyogU2tpcCBwYXN0IHNwYWNlcyAqLworCSAgICAgIHAyKys7CisJ ICAgIGlmICghKnAyKQkJCS8qIEFueXRoaW5nIGxlZnQ/ICovCisJICAgICAgKnAgPSBOVUw7CQkJ LyogTm8sIGVyYXNlIGNvbW1lbnQgKi8KKwl9CisJaWYgKCEqcDIpCQkJLyogQW55dGhpbmcgbGVm dD8gKi8KKwkgIGdvdG8geGNtZGF0ZTsJCQkvKiBObywgZG9uZS4gKi8KKwlwID0gcDI7CisKKyAg ICAgIGRlbHRhOgorCWRlYnVnKEYxMTAsImNtY3Z0ZGF0ZSBkZWx0YSB5eXl5bW1kZCIseXl5eW1t ZGQsMCk7CisJZGVidWcoRjExMCwiY21jdnRkYXRlIGRlbHRhIHllYXIiLHllYXIsMCk7CisJZGVi dWcoRjExMCwiY21jdnRkYXRlIGRlbHRhIHAiLHAsMCk7CisKKwlpZiAoKnAgPT0gJysnIHx8ICpw ID09ICctJykgewkvKiBEZWx0YSB0aW1lICovCisJICAgIGludCBzdGF0ZSA9IE5FRURfREFZUzsJ LyogU3RhcnQgb2ZmIGxvb2tpbmcgZm9yIGRheXMgKi8KKwkgICAgY2hhciBjID0gMDsKKwkgICAg ZHNpZ24gPSAxOwkJCS8qIEdldCBzaWduICovCisJICAgIGlmICgqcCsrID09ICctJykKKwkgICAg ICBkc2lnbiA9IC0xOworCSAgICB3aGlsZSAoKnAgPT0gU1ApCQkvKiBTa2lwIGludGVydmVuaW5n IHNwYWNlcyAqLworCSAgICAgIHArKzsKKwkgICAgd2hpbGUgKHN0YXRlKSB7CQkvKiBGU0EgdG8g cGFyc2UgZGVsdGEgdGltZSAqLworCQlpZiAoc3RhdGUgPCAwIHx8ICFpc2RpZ2l0KCpwKSkgewor CQkgICAgbWFrZXN0cigmY21kYXRlbXNnLCJJbnZhbGlkIGRlbHRhIHRpbWUiKTsKKwkJICAgIGRl YnVnKEYxMTEsImNtY3Z0ZGF0ZSIsY21kYXRlbXNnLC0xKTsKKwkJICAgIHJldHVybihOVUxMKTsK KwkJfQorCQlwMiA9IHA7CQkJLyogR2V0IG5leHQgbnVtZXJpYyBmaWVsZCAqLworCQl3aGlsZSAo aXNkaWdpdCgqcDIpKQorCQkgIHAyKys7CisJCWMgPSAqcDI7CQkvKiBBbmQgYnJlYWsgY2hhcmFj dGVyICovCisJCSpwMiA9IE5VTDsJCS8qIFRlcm1pbmF0ZSB0aGUgbnVtYmVyICovCisKKwkJc3dp dGNoIChzdGF0ZSkgewkvKiBJbnRlcnByZXQgYWNjb3JkaW5nIHRvIHN0YXRlICovCisJCSAgY2Fz ZSBORUVEX0RBWVM6CS8qIEluaXRpYWwgKi8KKwkJICAgIGlmICgoYyA9PSAnLScpIHx8CS8qIFZN UyBmb3JtYXQgKi8KKwkJCSgoYyA9PSAnZCcgfHwgYyA9PSAnRCcpCisJCQkgJiYgIWlzYWxwaGEo KihwMisxKSkpKSB7IC8qIERheXMgKi8KKwkJCWRkYXlzID0gYXRvaShwKTsKKwkJCWlmICghKihw MisxKSkJCQkKKwkJCSAgc3RhdGUgPSAwOworCQkJZWxzZQkJICAgICAgLyogaWYgYW55dGhpbmcg aXMgbGVmdCAqLworCQkJICBzdGF0ZSA9IE5FRURfSFJTOyAgIC8qIG5vdyB3ZSB3YW50IGhvdXJz LiAqLworCQkgICAgfSBlbHNlIGlmICgoYyA9PSAnVycgfHwgYyA9PSAndycpICYmICFpc2FscGhh KCoocDIrMSkpKSB7CisJCQlkZGF5cyA9IGF0b2kocCkgKiA3OyAgIC8qIHdlZWtzLi4uICovCisJ CQlpZiAoISoocDIrMSkpCQkJCisJCQkgIHN0YXRlID0gMDsKKwkJCWVsc2UKKwkJCSAgc3RhdGUg PSBORUVEX0hSUzsKKwkJICAgIH0gZWxzZSBpZiAoKGMgPT0gJ00nIHx8IGMgPT0gJ20nKSAmJiAh aXNhbHBoYSgqKHAyKzEpKSkgeworCQkJZG1vbnRocyA9IGF0b2kocCk7IC8qIG1vbnRocy4uLiAq LworCQkJaWYgKCEqKHAyKzEpKQkJCQorCQkJICBzdGF0ZSA9IDA7CisJCQllbHNlCisJCQkgIHN0 YXRlID0gTkVFRF9IUlM7CisJCSAgICB9IGVsc2UgaWYgKChjID09ICdZJyB8fCBjID09ICd5Jykg JiYgIWlzYWxwaGEoKihwMisxKSkpIHsKKwkJCWR5ZWFycyA9IGF0b2kocCk7IC8qIHllYXJzLi4u ICovCisJCQlpZiAoISoocDIrMSkpCQkJCisJCQkgIHN0YXRlID0gMDsKKwkJCWVsc2UKKwkJCSAg c3RhdGUgPSBORUVEX0hSUzsKKwkJICAgIH0gZWxzZSBpZiAoYyA9PSAnOicpIHsgLyogZGVsaW1p dGVyIGlzIGNvbG9uICovCisJCQlkaG91cnMgPSBhdG9pKHApOyAgLyogc28gaXQncyBob3VycyAq LworCQkJc3RhdGUgPSBORUVEX01JTlM7IC8qIG5vdyB3ZSB3YW50IG1pbnV0ZXMgKi8KKwkJICAg IH0gZWxzZSBpZiAoIWMpIHsgICAgICAgLyogZW5kIG9mIHN0cmluZyAqLworCQkJZGhvdXJzID0g YXRvaShwKTsgIC8qIGl0J3Mgc3RpbGwgaG91cnMgKi8KKwkJCXN0YXRlID0gMDsgICAgICAgICAv KiBhbmQgd2UncmUgZG9uZSAqLworCQkgICAgfSBlbHNlIGlmIChpc2FscGhhKGMpIHx8IGMgPT0g U1ApIHsKKwkJCWlmIChjID09IFNQKSB7CS8qIEl0J3MgYSBrZXl3b3JkPyAqLworCQkJICAgIHAy Kys7CS8qIFNraXAgc3BhY2VzICovCisJCQkgICAgd2hpbGUgKCpwMiA9PSBTUCkKKwkJCSAgICAg IHAyKys7CisJCQl9IGVsc2UgewkvKiBvciByZXBsYWNlIGZpcnN0IGxldHRlciAqLworCQkJICAg ICpwMiA9IGM7CisJCQl9CisJCQlwMyA9IHAyOwkvKiBwMiBwb2ludHMgdG8gYmVnaW5uaW5nIG9m IGtleXdvcmQgKi8KKwkJCXdoaWxlIChpc2FscGhhKCpwMykpIC8qIEZpbmQgZW5kIG9mIGtleXdv cmQgKi8KKwkJCSAgcDMrKzsKKwkJCWMgPSAqcDM7CS8qIE5VTCBpdCBvdXQgc28gd2UgY2FuIGxv b2sgaXQgdXAgKi8KKwkJCWlmICgqcDMpCS8qIHAzIHBvaW50cyB0byBrZXl3b3JkIHRlcm1pbmF0 b3IgKi8KKwkJCSAgKnAzID0gTlVMOworCQkJdW5pdHMgPSBsb29rdXAodGltZXVuaXRzLHAyLG51 bml0cyxOVUxMKTsKKwkJCWlmICh1bml0cyA8IDApIHsKKwkJCSAgICBtYWtlc3RyKCZjbWRhdGVt c2csIkludmFsaWQgdW5pdHMgaW4gZGVsdGEgdGltZSIpOworCQkJICAgIGRlYnVnKEYxMTEsImNt Y3Z0ZGF0ZSIsY21kYXRlbXNnLC0xKTsKKwkJCSAgICByZXR1cm4oTlVMTCk7CisJCQl9CisJCQkq cDIgPSBOVUw7CS8qIFJlLXRlcm1pbmF0ZSB0aGUgbnVtYmVyICovCisJCQkqcDMgPSBjOworCQkJ d2hpbGUgKCpwMyA9PSBTUCkgLyogUG9pbnQgYXQgZmllbGQgYWZ0ZXIgdW5pdHMgKi8KKwkJCSAg cDMrKzsKKwkJCXAyID0gcDM7CisJCQlzd2l0Y2ggKHVuaXRzKSB7CisJCQkgIGNhc2UgVFVfREFZ UzoKKwkJCSAgICBkZGF5cyA9IGF0b2kocCk7CisJCQkgICAgYnJlYWs7CisJCQkgIGNhc2UgVFVf V0VFS1M6CisJCQkgICAgZGRheXMgPSBhdG9pKHApICogNzsKKwkJCSAgICBicmVhazsKKwkJCSAg Y2FzZSBUVV9NT05USFM6CisJCQkgICAgZG1vbnRocyA9IGF0b2kocCk7CisJCQkgICAgYnJlYWs7 CisJCQkgIGNhc2UgVFVfWUVBUlM6CisJCQkgICAgZHllYXJzID0gYXRvaShwKTsKKwkJCSAgICBi cmVhazsKKwkJCX0KKwkJCWlmICgqcDIpIHsKKwkJCSAgICBzdGF0ZSA9IE5FRURfSFJTOworCQkJ ICAgIHAyLS07CisJCQl9IGVsc2UKKwkJCSAgc3RhdGUgPSAwOworCisJCSAgICB9IGVsc2UgewkJ LyogQW55dGhpbmcgZWxzZSAqLworCQkJc3RhdGUgPSAtMTsJLyogaXMgYW4gZXJyb3IgKi8KKwkJ ICAgIH0KKwkJICAgIGJyZWFrOworCQkgIGNhc2UgTkVFRF9IUlM6CS8qIExvb2tpbmcgZm9yIGhv dXJzICovCisJCSAgICBkZWJ1ZyhGMDAwLCJjbWN2dGRhdGUgTkVFRF9IUlMiLHAsYyk7CisJCSAg ICBpZiAoYyA9PSAnOicpIHsKKwkJCWRob3VycyA9IGF0b2kocCk7CisJCQlzdGF0ZSA9IE5FRURf TUlOUzsKKwkJICAgIH0gZWxzZSBpZiAoIWMpIHsKKwkJCWRob3VycyA9IGF0b2kocCk7CisJCQlz dGF0ZSA9IDA7CisJCSAgICB9IGVsc2UgeworCQkJc3RhdGUgPSAtMTsKKwkJICAgIH0KKwkJICAg IGJyZWFrOworCQkgIGNhc2UgTkVFRF9NSU5TOgkvKiBMb29raW5nIGZvciBtaW51dGVzICovCisJ CSAgICBpZiAoYyA9PSAnOicpIHsKKwkJCWRtaW5zID0gYXRvaShwKTsKKwkJCXN0YXRlID0gTkVF RF9TRUNTOworCQkgICAgfSBlbHNlIGlmICghYykgeworCQkJZG1pbnMgPSBhdG9pKHApOworCQkJ c3RhdGUgPSAwOworCQkgICAgfSBlbHNlIHsKKwkJCXN0YXRlID0gLTE7CisJCSAgICB9CisJCSAg ICBicmVhazsKKwkJICBjYXNlIE5FRURfU0VDUzoJLyogTG9va2luZyBmb3Igc2Vjb25kcyAqLwor CQkgICAgaWYgKGMgPT0gJy4nKSB7CisJCQlkc2VjcyA9IGF0b2kocCk7CisJCQlzdGF0ZSA9IE5F RURfRlJBQzsKKwkJICAgIH0gZWxzZSBpZiAoIWMpIHsKKwkJCWRzZWNzID0gYXRvaShwKTsKKwkJ CXN0YXRlID0gMDsKKwkJICAgIH0gZWxzZSB7CisJCQlzdGF0ZSA9IC0xOworCQkgICAgfQorCQkg ICAgYnJlYWs7CisJCSAgY2FzZSBORUVEX0ZSQUM6CS8qIEZyYWN0aW9uIG9mIHNlY29uZCAqLwor CQkgICAgaWYgKCFjICYmIHJkaWdpdHMocCkpIHsKKwkJCWlmICgqcCA+ICc0JykKKwkJCSAgZHNl Y3MrKzsKKwkJCXN0YXRlID0gMDsKKwkJICAgIH0gZWxzZSB7CisJCQlzdGF0ZSA9IC0xOworCQkg ICAgfQorCQkgICAgYnJlYWs7CisJCX0KKwkJaWYgKGMpCQkJLyogbmV4dCBmaWVsZCBpZiBhbnkg Ki8KKwkJICBwID0gcDIgKyAxOworCSAgICB9CisJICAgIGhhdmVkZWx0YSA9IDE7CisKKwl9IGVs c2UgeworCSAgICBtYWtlc3RyKCZjbWRhdGVtc2csIkV4dHJhbmVvdXMgbWF0ZXJpYWwgYXQgZW5k Iik7CisJICAgIGRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSIsY21kYXRlbXNnLC0xKTsKKwkgICAgcmV0 dXJuKE5VTEwpOworCX0KKyAgICB9CisKKyB4Y21kYXRlOgorCisgICAgaWYgKCh0ICE9IDIgJiYg aGggPiAyNCkgfHwgaGggPCAwKSB7IC8qIEhvdXIgcmFuZ2UgY2hlY2sgKi8KKwltYWtlc3RyKCZj bWRhdGVtc2csIkludmFsaWQgaG91cnMiKTsKKwlkZWJ1ZyhGMTExLCJjbWN2dGRhdGUiLGNtZGF0 ZW1zZywtMSk7CisJcmV0dXJuKE5VTEwpOworICAgIH0KKyAgICBpZiAobW0gPiA1OSkgewkJCS8q IE1pbnV0ZSByYW5nZSBjaGVjayAqLworCW1ha2VzdHIoJmNtZGF0ZW1zZywiSW52YWxpZCBtaW51 dGVzIik7CisJZGVidWcoRjExMSwiY21jdnRkYXRlIixjbWRhdGVtc2csLTEpOworCXJldHVybihO VUxMKTsKKyAgICB9CisgICAgaWYgKGZmID4gMCkgewkJCS8qIEZyYWN0aW9uIG9mIHNlY29uZD8g Ki8KKwlpZiAoc3MgPCA1OSkgeworCSAgICBzcysrOworCSAgICBmZiA9IDA7CisJfSBlbHNlIGlm IChtbSA8IDU5KSB7CisJICAgIHNzID0gMDsKKwkgICAgbW0rKzsKKwkgICAgZmYgPSAwOworCX0g ZWxzZSBpZiAoaGggPCAyNCkgeworCSAgICBzcyA9IDA7CisJICAgIG1tID0gMDsKKwkgICAgaGgr KzsKKwkgICAgZmYgPSAwOworCX0KKwkvKiBNdXN0IGFkZCBhIGRheSAtLSBsZWF2ZSBmZiBhdCAx Li4uICovCisJLyogKERPIFNPTUVUSElORyBBQk9VVCBUSElTIExBVEVSKSAqLworICAgIH0KKyAg ICBpZiAoc3MgPiA2MCkgewkJCS8qIFNlY29uZHMgcmFuZ2UgY2hlY2sgKi8KKwltYWtlc3RyKCZj bWRhdGVtc2csIkludmFsaWQgc2Vjb25kcyIpOyAvKiA2MCBpcyBvayBiZWNhdXNlIG9mICovCisJ ZGVidWcoRjExMSwiY21jdnRkYXRlIixjbWRhdGVtc2csLTEpOyAgLyogTGVhcCBTZWNvbmQuICov CisJcmV0dXJuKE5VTEwpOworICAgIH0KKyAgICBpZiAoKG1tIDwgMCB8fCBzcyA8IDApIHx8CisJ KHQgIT0gMiAmJiAoc3MgPiAwIHx8IG1tID4gMCkgJiYgaGggPiAyMykpIHsKKwltYWtlc3RyKCZj bWRhdGVtc2csIkludmFsaWQgbWludXRlcyBvciBzZWNvbmRzIik7CisJZGVidWcoRjExMSwiY21j dnRkYXRlIixjbWRhdGVtc2csLTEpOworCXJldHVybihOVUxMKTsKKyAgICB9CisgICAgZGVidWco RjExMCwiY21jdnRkYXRlIHllYXIiLHllYXIsMCk7CisgICAgZGVidWcoRjExMCwiY21jdnRkYXRl IG1vbnRoIixtb250aCwwKTsKKyAgICBkZWJ1ZyhGMTAxLCJjbWN2dGRhdGUgbmRheSIsIiIsbmRh eSk7CisgICAgZGVidWcoRjEwMSwiY21jdnRkYXRlIGhoIiwiIixoaCk7CisgICAgZGVidWcoRjEw MSwiY21jdnRkYXRlIG1tIiwiIixtbSk7CisgICAgZGVidWcoRjEwMSwiY21jdnRkYXRlIHNzIiwi Iixzcyk7CisgICAgZGVidWcoRjEwMSwiY21jdnRkYXRlIGdtdHNpZ24iLCIiLGdtdHNpZ24pOwor ICAgIGRlYnVnKEYxMDEsImNtY3Z0ZGF0ZSB6aGgiLCIiLHpoaCk7CisgICAgZGVidWcoRjEwMSwi Y21jdnRkYXRlIHptbSIsIiIsem1tKTsKKyAgICBkZWJ1ZyhGMTAxLCJjbWN2dGRhdGUgaXNnbXQi LCIiLGlzZ210KTsKKworI2lmZGVmIFpMT0NBTFRJTUUKKy8qIEhhbmRsZSB0aW1lem9uZSAtLSBm aXJzdCBjb252ZXJ0IHRvIEdNVCAqLworCisgICAgemRkID0gMDsJCQkJLyogRGF5cyBjaGFuZ2Vk ICovCisgICAgaWYgKGlzZ210ICYmICh6bW0gfHwgemhoKSkgewkvKiBJZiBHTVQgb2Zmc2V0IGdp dmVuICovCisJbG9uZyBzZWMxLCBzZWMyLCB6ejsKKwlzZWMxID0gc3MgKyA2MCAqIG1tICsgMzYw MCAqIGhoOworCXNlYzIgPSBnbXRzaWduICogKDYwICogem1tICsgMzYwMCAqIHpoaCk7CisJc2Vj MSArPSBzZWMyOworCWlmIChzZWMxIDwgMCkgeworCSAgICBzZWMxID0gMCAtIHNlYzE7CisJICAg IHpkZCA9IDBMIC0gKHNlYzEgLyA4NjQwMEwpOworCSAgICBzZWMxID0gc2VjMSAlIDg2NDAwTDsK Kwl9IGVsc2UgaWYgKHNlYzEgPiA4NjQwMEwpIHsKKwkgICAgemRkID0gc2VjMSAvIDg2NDAwTDsK KwkgICAgc2VjMSA9IHNlYzEgJSA4NjQwMEw7CisJfQorCXNzID0gc2VjMSAlIDYwOworCXp6ID0g c2VjMSAvIDYwOworCW1tID0genogJSA2MDsKKwloaCA9IHp6IC8gNjA7CisJZGVidWcoRjEwMSwi Y21jdnRkYXRlIE5FVyBoaCIsIiIsaGgpOworCWRlYnVnKEYxMDEsImNtY3Z0ZGF0ZSBORVcgbW0i LCIiLG1tKTsKKwlkZWJ1ZyhGMTAxLCJjbWN2dGRhdGUgTkVXIGRkIiwiIix6ZGQpOworCisvKiBB dCB0aGlzIHBvaW50IGhoOm1tOnNzIGlzIGluIEdNVCBhbmQgemRkIGlzIHRoZSBjYWxlbmRhciBh ZGp1c3RtZW50ICovCisKKyAgICB9CisjZW5kaWYgLyogWkxPQ0FMVElNRSAqLworCisgICAgaWYg KHl5eXltbWRkWzBdICYmICF5ZWFyKSB7CisJY2tzdHJuY3B5KHllYXJidWYseXl5eW1tZGQsNSk7 CisJY2tzdHJuY3B5KG1vbmJ1ZiwmeXl5eW1tZGRbNF0sMyk7CisJY2tzdHJuY3B5KGRheWJ1Ziwm eXl5eW1tZGRbNl0sMyk7CisJeWVhciA9IHllYXJidWY7CisJbW9udGggPSBtb25idWY7CisJZGF5 ID0gZGF5YnVmOworCW5kYXkgPSBhdG9pKGRheWJ1Zik7CisgICAgfQorICAgIHNwcmludGYoemJ1 ZiwiJTA0ZCUwMmQlMDJkICUwMmQ6JTAyZDolMDJkIiwgLyogU0FGRSAqLworCSAgICBhdG9pKHll YXIpLGF0b2kobW9udGgpLG5kYXksaGgsbW0sc3MKKwkgICAgKTsKKyAgICBkcCA9IHpidWY7CisK KyNpZmRlZiBaTE9DQUxUSU1FCisgICAgLyogTm93IGNvbnZlcnQgZnJvbSBHTVQgdG8gbG9jYWwg dGltZSAqLworCisgICAgaWYgKGlzZ210KSB7CQkJLyogSWYgR01UIGNvbnZlcnQgdG8gbG9jYWwg dGltZSAqLworCWRlYnVnKEYxMTAsImNtY3Z0ZGF0ZSBHTVQgMSIsZHAsMCk7CisJaWYgKHpkZCkg ewkJCS8qIEFwcGx5IGFueSBjYWxlbmRhciBhZGp1c3RtZW50ICovCisJICAgIGxvbmcgeno7CisJ ICAgIHp6ID0gbWpkKGRwKSArIHpkZDsKKwkgICAgc3ByaW50Zih6YnVmLCIlcyAlMDJkOiUwMmQ6 JTAyZCIsbWpkMmRhdGUoenopLGhoLG1tLHNzKTsKKwl9CisJZGVidWcoRjExMCwiY21jdnRkYXRl IEdNVCAyIixkcCwwKTsKKwlpZiAoKHAgPSB6bG9jYWx0aW1lKGRwKSkpIHsKKwkgICAgZGVidWco RjExMCwiY21jdnRkYXRlIGFzY3RpbWUgemxvY2FsdGltZSIscCwwKTsKKwkgICAgaWYgKHApIGNr c3RybmNweSh6YnVmLHAsMTgpOworCX0KKwlkZWJ1ZyhGMTEwLCJjbWN2dGRhdGUgR01UIDMiLGRw LDApOworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisJICB5ZWFyYnVmW2ldID0gZHBbaV07CisJ eWVhcmJ1Zls0XSA9IE5VTDsKKwltb25idWZbMF0gPSBkcFs0XTsKKwltb25idWZbMV0gPSBkcFs1 XTsKKwltb25idWZbMl0gPSBOVUw7CisJZGF5YnVmWzBdID0gZHBbNl07CisJZGF5YnVmWzFdID0g ZHBbN107CisJZGF5YnVmWzJdID0gTlVMOworCWRheSA9IGRheWJ1ZjsKKwluZGF5ID0gYXRvaShk YXlidWYpOworCW1vbnRoID0gbW9uYnVmOworCXllYXIgPSB5ZWFyYnVmOworCWhoID0gYXRvaSgm ZHBbOV0pOworCW1tID0gYXRvaSgmZHBbMTJdKTsKKwlzcyA9IGF0b2koJmRwWzE1XSk7CisgICAg fQorI2VuZGlmIC8qIFpMT0NBTFRJTUUgKi8KKworI2lmZGVmIERFQlVHCisgICAgaWYgKGRlYmxv ZykgeworCWRlYnVnKEYxMDEsImNtY3Z0ZGF0ZSBob3VyIiwiIixoaCk7CisJZGVidWcoRjEwMSwi Y21jdnRkYXRlIG1pbnV0ZSIsIiIsbW0pOworCWRlYnVnKEYxMDEsImNtY3Z0ZGF0ZSBzZWNvbmQi LCIiLHNzKTsKKyAgICB9CisjZW5kaWYgLyogREVCTE9HICovCisKKyAgICBtYWtlc3RyKCZjbWRh dGVtc2csTlVMTCk7CisgICAgaWYgKGhhdmVkZWx0YSkgeworI2lmZGVmIERFQlVHCisJaWYgKGRl YmxvZykgeworCSAgICBkZWJ1ZyhGMTEwLCJjbWN2dGRhdGUgYmFzZSAiLGRwLDApOworCSAgICBk ZWJ1ZyhGMTAxLCJjbWN2dGRhdGUgZGVsdGEgc2lnbiIsIiIsZHNpZ24pOworCSAgICBkZWJ1ZyhG MTAxLCJjbWN2dGRhdGUgZGVsdGEgeXJzICIsIiIsZHllYXJzKTsKKwkgICAgZGVidWcoRjEwMSwi Y21jdnRkYXRlIGRlbHRhIG1vcyAiLCIiLGRtb250aHMpOworCSAgICBkZWJ1ZyhGMTAxLCJjbWN2 dGRhdGUgZGVsdGEgZGF5cyIsIiIsZGRheXMpOworCSAgICBkZWJ1ZyhGMTAxLCJjbWN2dGRhdGUg ZGVsdGEgaHJzICIsIiIsZGhvdXJzKTsKKwkgICAgZGVidWcoRjEwMSwiY21jdnRkYXRlIGRlbHRh IG1pbnMiLCIiLGRtaW5zKTsKKwkgICAgZGVidWcoRjEwMSwiY21jdnRkYXRlIGRlbHRhIHNlY3Mi LCIiLGRzZWNzKTsKKwl9CisjZW5kaWYgLyogREVCTE9HICovCisJaWYgKCEoZHAgPSBjbWRlbHRh KGF0b2koeWVhciksCisJCSAgICBhdG9pKG1vbnRoKSwKKwkJICAgIG5kYXksIGhoLCBtbSwgc3Ms CisJCSAgICBkc2lnbiwgZHllYXJzLCBkbW9udGhzLCBkZGF5cywgZGhvdXJzLCBkbWlucywgZHNl Y3MpKSkgeworCSAgICBkZWJ1ZyhGMTExLCJjbWN2dGRhdGUiLGNtZGF0ZW1zZywtMSk7CisJICAg IHJldHVybihOVUxMKTsKKwl9CisgICAgfQorCisgIHhjdnRkYXRlOgkJCQkvKiBFeGl0IHBvaW50 IGZvciBzdWNjZXNzICovCisgICAgeworCWludCBsZW4sIGssIG47CisJY2hhciAqIHA7CisJZGVi dWcoRjExMCwiY21jdnRkYXRlIHhjdnRkYXRlIGRwIixkcCwwKTsKKwlpZiAoIWRwKSBkcCA9ICIi OwkJLyogU2hvdWxkbid0IGhhcHBlbiAqLworCWlmICghKmRwKSByZXR1cm4oTlVMTCk7CQkvKiAu Li4gKi8KKwlsZW4gPSBzdHJsZW4oZHApOworCWRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSByZXN1bHQi LGRwLGxlbik7CisJayA9IGNtZGF0ZWJwIC0gKGNoYXIgKiljbWRhdGVidWY7IC8qIFNwYWNlIHVz ZWQgKi8KKwluID0gQ01EQVRFQlVGIC0gayAtIDE7CQkvKiBTcGFjZSBsZWZ0ICovCisJaWYgKG4g PCBsZW4pIHsJCQkvKiBOb3QgZW5vdWdoPyAqLworCSAgICBjbWRhdGVicCA9IGNtZGF0ZWJ1ZjsJ LyogV3JhcCBhcm91bmQgKi8KKwkgICAgbiA9IENNREFURUJVRjsKKwl9CisJY2tzdHJuY3B5KGNt ZGF0ZWJwLGRwLG4pOworCXAgPSBjbWRhdGVicDsKKwljbWRhdGVicCArPSBsZW4gKyAxOworCXJl dHVybihwKTsKKyAgICB9Cit9CisKK2ludAorY212ZGF0ZShkKSBjaGFyICogZDsgewkJCS8qIFZl cmlmeSBkYXRlLXRpbWUgKi8KKyAgICBpbnQgaTsKKyAgICBpZiAoIWQpIHJldHVybigwKTsKKyAg ICBpZiAoKGludClzdHJsZW4oZCkgIT0gMTcpIHJldHVybigwKTsKKyAgICBmb3IgKGkgPSAwOyBp IDwgODsgaSsrKSB7IGlmICghaXNkaWdpdChkW2ldKSkgcmV0dXJuKDApOyB9CisgICAgaWYgKCFp c2RpZ2l0KGRbOV0pICB8fCAhaXNkaWdpdChkWzEwXSkgfHwKKwkhaXNkaWdpdChkWzEyXSkgfHwg IWlzZGlnaXQoZFsxM10pIHx8CisJIWlzZGlnaXQoZFsxNV0pIHx8ICFpc2RpZ2l0KGRbMTZdKSkK KyAgICAgIHJldHVybigwKTsKKyAgICBpZiAoIWNrc3RyY2hyKCIgVHRfLToiLGRbOF0pKSByZXR1 cm4oMCk7CisgICAgaWYgKGRbMTFdICE9ICc6JyAmJiBkWzE0XSAhPSAnOicpIHJldHVybigwKTsK KyAgICByZXR1cm4oMSk7Cit9CisKKy8qIGMgbSBkIGkgZiBmIGQgYSB0IGUgIC0tICBHZXQgZGlm ZmVyZW5jZSBiZXR3ZWVuIHR3byBkYXRlLXRpbWVzICovCisKK2NoYXIgKgorY21kaWZmZGF0ZShk MSxkMikgY2hhciAqIGQxLCAqIGQyOyB7CisgICAgY2hhciBkMWJ1Zls5XSwgZDJidWZbOV07Cisg ICAgY2hhciB4MWJ1ZlsxOF0sIHgyYnVmWzE4XTsKKyAgICBjaGFyICogcDsKKworICAgIGludCBo aDEgPSAwLCBtbTEgPSAwLCBzczEgPSAwOworICAgIGludCBoaDIgPSAwLCBtbTIgPSAwLCBzczIg PSAwOworICAgIGludCBoaCwgbW0sIHNzOworICAgIGludCBzaWduOworICAgIGxvbmcgamQxLCBq ZDIsIGpkLCBmMSwgZjIsIGZ4OworICAgIHN0YXRpYyBjaGFyIHJlc3VsdFsyNF0sICpycDsKKwor ICAgIGRlYnVnKEYxMTAsImNtZGlmZmRhdGUgZDEgQSIsZDEsMCk7CisgICAgZGVidWcoRjExMCwi Y21kaWZmZGF0ZSBkMiBBIixkMiwwKTsKKworICAgIGlmICghKHAgPSBjbWN2dGRhdGUoZDEsMSkp KQkJLyogQ29udmVydCBkYXRlcyB0byBzdGFuZGFyZCBmb3JtYXQgKi8KKyAgICAgIHJldHVybihO VUxMKTsKKyAgICBja3N0cm5jcHkoeDFidWYscCwxOCk7CisgICAgZDEgPSB4MWJ1ZjsKKworICAg IGlmICghKHAgPSBjbWN2dGRhdGUoZDIsMSkpKQorICAgICAgcmV0dXJuKE5VTEwpOworICAgIGNr c3RybmNweSh4MmJ1ZixwLDE4KTsKKyAgICBkMiA9IHgyYnVmOworCisgICAgZGVidWcoRjExMCwi Y21kaWZmZGF0ZSBkMSBCIixkMSwwKTsKKyAgICBkZWJ1ZyhGMTEwLCJjbWRpZmZkYXRlIGQyIEIi LGQyLDApOworICAgIGlmICghY212ZGF0ZShkMSkgfHwgIWNtdmRhdGUoZDIpKQorICAgICAgcmV0 dXJuKE5VTEwpOworCisgICAgaGgxID0gYXRvaSgmZDFbOV0pOwkJCS8qIEdldCBob3VycywgbWlu dXRlcywgYW5kIHNlY29uZHMgKi8KKyAgICBtbTEgPSBhdG9pKCZkMVsxMl0pOwkJLyogZm9yIGZp cnN0IGRhdGUgKi8KKyAgICBzczEgPSBhdG9pKCZkMVsxNV0pOworICAgIGNrc3RybmNweShkMWJ1 ZixkMSw5KTsKKworICAgIGhoMiA9IGF0b2koJmQyWzldKTsJCQkvKiBkaXR0byBmb3Igc2Vjb25k IGRhdGUgKi8KKyAgICBtbTIgPSBhdG9pKCZkMlsxMl0pOworICAgIHNzMiA9IGF0b2koJmQyWzE1 XSk7CisgICAgY2tzdHJuY3B5KGQyYnVmLGQyLDkpOworICAgIAorICAgIGpkMSA9IG1qZChkMWJ1 Zik7CQkJLyogR2V0IHRoZSB0d28gSnVsaWFuIGRhdGVzICovCisgICAgamQyID0gbWpkKGQyYnVm KTsKKyAgICBmMSA9IHNzMSArIDYwICogbW0xICsgMzYwMCAqIGhoMTsJLyogQ29udmVydCBmaXJz dCB0aW1lIHRvIHNlY29uZHMgKi8KKworICAgIGYyID0gc3MyICsgNjAgKiBtbTIgKyAzNjAwICog aGgyOwkvKiBEaXR0byBmb3Igc2Vjb25kIHRpbWUgKi8KKyAgICBkZWJ1ZyhGMTAxLCJjbWRpZmZk YXRlIGpkMSIsIiIsamQxKTsKKyAgICBkZWJ1ZyhGMTAxLCJjbWRpZmZkYXRlIGYxIiwiIixmMSk7 CisgICAgZGVidWcoRjEwMSwiY21kaWZmZGF0ZSBqZDIiLCIiLGpkMik7CisgICAgZGVidWcoRjEw MSwiY21kaWZmZGF0ZSBmMiIsIiIsZjIpOworICAKKyAgICBpZiAoamQyID4gamQxIHx8IChqZDEg PT0gamQyICYmIGYyID4gZjEpKSB7CisgICAgICAgIHNpZ24gPSAtMTsgCisgICAgICAgIGlmIChm MSA+IGYyKSB7amQyLS07IGYyICs9IDg2NDAwTDt9CisgICAgICAgIGpkID0gamQyIC0gamQxOwor ICAgICAgICBmeCA9IGYyIC0gZjE7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc2lnbiA9IDE7Cisg ICAgICAgIGlmIChmMiA+IGYxKSB7amQxLS07IGYxICs9IDg2NDAwTDt9CisgICAgICAgIGpkID0g amQxIC0gamQyOworICAgICAgICBmeCA9IGYxIC0gZjI7CisgICAgfQorICAgIGRlYnVnKEYxMTEs ImNtZGlmZmRhdGUgc2lnbiBqZCIsc2lnbjwwPyItIjoiKyIsamQpOworICAgIGRlYnVnKEYxMDEs ImNtZGlmZmRhdGUgZngiLCIiLGZ4KTsKKyAgCisgICAgaGggPSAoaW50KSAoZnggLyAzNjAwTCk7 CQkvKiBDb252ZXJ0IHNlY29uZHMgdG8gaGg6bW06c3MgKi8KKworICAgIG1tID0gKGludCkgKGZ4 ICUgMzYwMEwpIC8gNjBMOworICAgIHNzID0gKGludCkgKGZ4ICUgMzYwMEwpICUgNjBMOworCisg ICAgcnAgPSByZXN1bHQ7CQkJLyogRm9ybWF0IHRoZSByZXN1bHQgKi8KKyAgICAqcnArKyA9IChz aWduIDwgMCkgPyAnLScgOiAnKyc7CisgICAgaWYgKGpkICE9IDAgJiYgaGgrbW0rc3MgPT0gMCkg eworCXNwcmludGYocnAsIiVsZGQiLGpkKTsKKyAgICB9IGVsc2UgaWYgKGpkID09IDApIHsKKwlp ZiAoc3MgPT0gMCkKKwkgIHNwcmludGYocnAsIiVkOiUwMmQiLGhoLG1tKTsKKwllbHNlCisJICBz cHJpbnRmKHJwLCIlZDolMDJkOiUwMmQiLGhoLG1tLHNzKTsKKyAgICB9IGVsc2UgeworCWlmIChz cyA9PSAwKQorCSAgc3ByaW50ZihycCwiJWxkZCVkOiUwMmQiLGpkLGhoLG1tKTsKKwllbHNlCisJ ICBzcHJpbnRmKHJwLCIlbGRkJWQ6JTAyZDolMDJkIixqZCxoaCxtbSxzcyk7CisgICAgfQorICAg IGRlYnVnKEYxMTAsImNtZGlmZmRhdGUgcmVzdWx0IixyZXN1bHQsMCk7CisgICAgcmV0dXJuKChj aGFyICopcmVzdWx0KTsKK30KKworI2lmbmRlZiBOT1NQTAorLyogcyBoIHUgZiBmIGwgZSBkIGEg dCBlICAtLSAgUmVhcnJhbmdlIGRhdGUgc3RyaW5nICovCisKKy8qCisgIENhbGwgd2l0aDoKKyAg ICBBIGRhdGUgc3RyaW5nIGluIHN0YW5kYXJkIGZvcm1hdDogeXl5eW1tZGQgaGg6bW06c3MgKHRp bWUgb3B0aW9uYWwpLgorICAgIE9wdGlvbnM6CisgICAgICAxOiBSZWZvcm1hdCBkYXRlIHRvIHl5 eXktbW1tLWRkIChtbW0gPSBFbmdsaXNoIG1vbnRoIGFiYnJldmlhdGlvbikuCisgICAgICAyOiBS ZWZvcm1hdCBkYXRlIHRvIGRkLW1tbS15eXl5IChtbW0gPSBFbmdsaXNoIG1vbnRoIGFiYnJldmlh dGlvbikuCisgICAgICAzOiBSZWZvcm1hdCBhcyBudW1lcmljIHl5eXltbWRkaGhtbXNzLgorICAg ICAgNDogUmVmb3JtYXQgaW4gYXNjdGltZSgpIGZvcm1hdCBTYXQgTm92IDI2IDExOjEwOjM0IDIw MDUKKyAgICBSZXR1cm5zOgorICAgICAgUG9pbnRlciB0byByZXN1bHQgaWYgYXJncyB2YWxpZCwg b3RoZXJ3aXNlIG9yaWdpbmFsIGFyZyBwb2ludGVyLgorKi8KK2NoYXIgKgorc2h1ZmZsZWRhdGUo cCxvcHQpIGNoYXIgKiBwOyBpbnQgb3B0OyB7CisgICAgZXh0ZXJuIGNoYXIgKiB3a2RheXNbXTsK KyAgICBpbnQgbGVuOworICAgIGNoYXIgaWJ1ZlszMl07CisgICAgc3RhdGljIGNoYXIgb2J1Zls0 OF07CisgICAgY2hhciBjOworICAgIGludCB5eSwgZGQsIG1tOworCisgICAgaWYgKCFwKSBwID0g IiI7CisgICAgaWYgKCEqcCkgcCA9IGNrZGF0ZSgpOworICAgIGlmIChvcHQgPCAxIHx8IG9wdCA+ IDQpCisgICAgICByZXR1cm4ocCk7CisgICAgbGVuID0gc3RybGVuKHApOworICAgIGlmIChsZW4g PCA4IHx8IGxlbiA+IDMxKSByZXR1cm4ocCk7CisgICAgaWYgKG9wdCA9PSA0KSB7CQkJLyogQXNj dGltZSBmb3JtYXQgKDI2IE5vdiAyMDA1KSAqLworCWNoYXIgYywgKiBzOworCWxvbmcgejsgaW50 IGs7CisJY2tzdHJuY3B5KGlidWYscCwzMSk7CisJayA9IGxlbjsKKwl3aGlsZSAoayA+PSAwICYm IGlidWZba10gPT0gQ1IgfHwgaWJ1ZltrXSA9PSBMRikKKwkgIGlidWZbay0tXSA9IE5VTDsKKwl3 aGlsZSAoayA+PSAwICYmIGlidWZba10gPT0gU1AgfHwgaWJ1ZltrXSA9PSBIVCkKKwkgIGlidWZb ay0tXSA9IE5VTDsKKwlpZiAoayA8IDkpIGNrc3RybmNweSgmaWJ1Zls4XSwiIDAwOjAwOjAwIiw5 KTsKKwlwID0gaWJ1ZjsKKyAgICAgICAgeiA9IG1qZChwKTsgICAgICAgICAgICAgICAgICAgICAv KiBDb252ZXJ0IHRvIG1vZGlmaWVkIEp1bGlhbiBkYXRlICovCisgICAgICAgIHogPSB6ICUgN0w7 CisgICAgICAgIGlmICh6IDwgMCkgeworICAgICAgICAgICAgeiA9IDAgLSB6OworICAgICAgICAg ICAgayA9IDYgLSAoKGludCl6ICsgMykgJSA3OworICAgICAgICB9IGVsc2UgeworICAgICAgICAg ICAgayA9ICgoaW50KXogKyAzKSAlIDc7CS8qIERheSBvZiB3ZWVrICovCisgICAgICAgIH0KKwlz ID0gd2tkYXlzW2tdOworICAgICAgICBvYnVmWzBdID0gc1swXTsJCQkvKiBEYXkgb2Ygd2VlayAq LworICAgICAgICBvYnVmWzFdID0gc1sxXTsKKyAgICAgICAgb2J1ZlsyXSA9IHNbMl07CisgICAg ICAgIG9idWZbM10gPSBTUDsJCQkvKiBTcGFjZSAqLworCWMgPSBwWzZdOworICAgICAgICBwWzZd ID0gTlVMOworCW1tID0gYXRvaSgmaWJ1Zls0XSk7CQkvKiBNb250aCAqLworCXMgPSBtb25hbWVb bW0tMV07CQkvKiBOYW1lIG9mIG1vbnRoICovCisJcFs2XSA9IGM7CisKKyAgICAgICAgb2J1Zls0 XSA9IHNbMF07CQkJLyogTW9udGggKi8KKyAgICAgICAgb2J1Zls1XSA9IHNbMV07CisgICAgICAg IG9idWZbNl0gPSBzWzJdOworICAgICAgICBvYnVmWzddID0gU1A7CQkJLyogU3BhY2UgKi8KKwlp ZiAocFs2XSA9PSAnMCcpCQkvKiBEYXRlIG9mIG1vbnRoICovCisJICBvYnVmWzhdID0gU1A7CisJ ZWxzZQorCSAgb2J1Zls4XSA9IHBbNl07CisgICAgICAgIG9idWZbOV0gPSBwWzddOworCWNrc3Ry bmNweSgmb2J1ZlsxMF0sJnBbOF0sMTApOwkvKiBUaW1lICovCisgICAgICAgIG9idWZbMTldID0g U1A7CQkJLyogU3BhY2UgKi8KKwlvYnVmWzIwXSA9IHBbMF07CQkvKiBZZWFyICovCisJb2J1Zlsy MV0gPSBwWzFdOworCW9idWZbMjJdID0gcFsyXTsKKwlvYnVmWzIzXSA9IHBbM107CisJb2J1Zlsy NF0gPSBOVUw7CisJcmV0dXJuKChjaGFyICopb2J1Zik7CisgICAgfQorICAgIGlmIChvcHQgPT0g MykgeworCWNrc3RybmNweShvYnVmLHAsNDgpOworCS8qIHl5eXltbWRkIGhoOm1tOnNzICovCisJ LyogMDEyMzQ1Njc4OTAxMjM0NTYgKi8KKwkvKiB5eXl5bW1kZGhobW1zcyAgICAqLworCW9idWZb OF0gPSBvYnVmWzldOworCW9idWZbOV0gPSBvYnVmWzEwXTsKKwlvYnVmWzEwXSA9IG9idWZbMTJd OworCW9idWZbMTFdID0gb2J1ZlsxM107CisJb2J1ZlsxMl0gPSBvYnVmWzE1XTsKKwlvYnVmWzEz XSA9IG9idWZbMTZdOworCW9idWZbMTRdID0gTlVMOworCXJldHVybigoY2hhciAqKW9idWYpOwor ICAgIH0KKyAgICBja3N0cm5jcHkoaWJ1ZixwLDMyKTsKKyAgICBjID0gaWJ1Zls0XTsJCQkvKiBX YXJuaW5nOiBub3QgWTEwSyBjb21wbGlhbnQgKi8KKyAgICBpYnVmWzRdID0gTlVMOworICAgIGlm ICghcmRpZ2l0cyhpYnVmKSkKKyAgICAgIHJldHVybihwKTsKKyAgICB5eSA9IGF0b2koaWJ1Zik7 CisgICAgaWYgKHl5IDwgMSB8fCB5eSA+IDk5OTkpCisgICAgICByZXR1cm4ocCk7CisgICAgaWJ1 Zls0XSA9IGM7CisgICAgYyA9IGlidWZbNl07CisgICAgaWJ1Zls2XSA9IE5VTDsKKyAgICBpZiAo IXJkaWdpdHMoJmlidWZbNF0pKQorICAgICAgcmV0dXJuKHApOworICAgIG1tID0gYXRvaSgmaWJ1 Zls0XSk7CisgICAgaWYgKG1tIDwgMSB8fCBtbSA+IDEyKQorICAgICAgcmV0dXJuKHApOworICAg IGlidWZbNl0gPSBjOworICAgIGMgPSBpYnVmWzhdOworICAgIGlidWZbOF0gPSBOVUw7CisgICAg aWYgKCFyZGlnaXRzKCZpYnVmWzZdKSkKKyAgICAgIHJldHVybihwKTsKKyAgICBkZCA9IGF0b2ko JmlidWZbNl0pOworICAgIGlidWZbOF0gPSBjOworICAgIGlmIChkZCA8IDEgfHwgbW0gPiAzMSkK KyAgICAgIHJldHVybihwKTsKKyAgICAvKiBJR05PUkUgV0FSTklOR1MgQUJPVVQgbW9uYW1lW10g UkVGUyBPVVQgT0YgUkFOR0UgLSBpdCdzIHByZWNoZWNrZWQuICovCisgICAgc3dpdGNoIChvcHQp IHsKKyAgICAgIGNhc2UgMToKKwlzcHJpbnRmKG9idWYsIiUwNGQtJXMtJTAyZCVzIix5eSxtb25h bWVbbW0tMV0sZGQsJmlidWZbOF0pOworCWJyZWFrOworICAgICAgY2FzZSAyOgorCXNwcmludGYo b2J1ZiwiJTAyZC0lcy0lMDRkJXMiLGRkLG1vbmFtZVttbS0xXSx5eSwmaWJ1Zls4XSk7CisgICAg fQorICAgIHJldHVybigoY2hhciAqKW9idWYpOworfQorI2VuZGlmCS8qIE5PU1BMICovCisKKy8q ICBDIEsgQyBWIFQgRCBBIFQgRSAgLS0gIExpa2UgY21jdnRkYXRlKCksIGJ1dCByZXR1cm5zIHN0 cmluZy4gICovCisvKiAgRm9yIHVzZSBieSBkYXRlLXJlbGF0ZWQgZnVuY3Rpb25zICovCisvKiAg U2VlIGNhbGxpbmcgY29udmVudGlvbnMgZm9yIGNtY3Z0ZGF0ZSgpIGFib3ZlLiAqLworCitjaGFy ICoKK2NrY3Z0ZGF0ZShwLHQpIGNoYXIgKiBwOyBpbnQgdDsgeworICAgIGNoYXIgKiBzOworICAg IGlmICghKHMgPSBjbWN2dGRhdGUocCx0KSkpCisgICAgICByZXR1cm4oIjxCQURfREFURV9PUl9U SU1FPiIpOwkvKiBcZmJsYWgoKSBlcnJvciBtZXNzYWdlICovCisgICAgZWxzZQorICAgICAgcmV0 dXJuKHMpOworfQorCisKKy8qICBDIE0gRCBBIFQgRSAgLS0gIFBhcnNlIGEgZGF0ZSBhbmQvb3Ig dGltZSAgKi8KKworLyoKKyAgQWNjZXB0cyBkYXRlIGluIHZhcmlvdXMgZm9ybWF0cy4gIElmIHRo ZSBkYXRlIGlzIHJlY29nbml6ZWQsCisgIHRoaXMgcm91dGluZSByZXR1cm5zIDAgb3IgZ3JlYXRl ciB3aXRoIHRoZSByZXN1bHQgc3RyaW5nIHBvaW50ZXIKKyAgcG9pbnRpbmcgdG8gYSBidWZmZXIg Y29udGFpbmluZyB0aGUgZGF0ZSBhcyAieXl5eW1tZGQgaGg6bW06c3MiLgorKi8KK2ludAorY21k YXRlKHhobHAseGRlZix4cCxxdWlldCxmKSBjaGFyICp4aGxwLCAqeGRlZiwgKip4cDsgaW50IHF1 aWV0OyB4eF9zdHJwIGY7IHsKKyAgICBpbnQgeCwgcmM7CisgICAgY2hhciAqbywgKnMsICp6cSwg KmRwOworCisgICAgY21mbGRmbGdzID0gMDsKKyAgICBpZiAoIXhobHApIHhobHAgPSAiIjsKKyAg ICBpZiAoIXhkZWYpIHhkZWYgPSAiIjsKKyAgICBpZiAoISp4aGxwKSB4aGxwID0gIkRhdGUgYW5k L29yIHRpbWUiOworICAgICp4cCA9ICIiOworCisgICAgcmMgPSBjbWZsZCh4aGxwLHhkZWYsJnMs KHh4X3N0cnApMCk7CisgICAgZGVidWcoRjEwMSwiY21kYXRlIGNtZmxkIHJjIiwiIixyYyk7Cisg ICAgaWYgKHJjIDwgMCkKKyAgICAgIHJldHVybihyYyk7CisgICAgZGVidWcoRjExMCwiY21kYXRl IDEiLHMsMCk7CisgICAgbyA9IHM7CQkJCS8qIFJlbWVtYmVyIHdoYXQgdGhleSB0eXBlZC4gKi8K KyAgICBzID0gYnJzdHJpcChzKTsKKyAgICBkZWJ1ZyhGMTEwLCJjbWRhdGUgMiIscywwKTsKKwor ICAgIHggPSAwOworICAgIGlmIChmKSB7CQkJCS8qIElmIGEgY29udmVyc2lvbiBmdW5jdGlvbiBp cyBnaXZlbiAqLworCWNoYXIgKiBwcDsKKwl6cSA9IGF0eGJ1ZjsJCQkvKiBkbyB0aGUgY29udmVy c2lvbi4gKi8KKwlwcCA9IGF0eGJ1ZjsKKwlhdHhuID0gQ01EQkw7CisJaWYgKCh4ID0gKCpmKShz LCZ6cSwmYXR4bikpIDwgMCkgcmV0dXJuKC0yKTsKKwlpZiAoISpwcCkKKwkgIHBwID0geGRlZjsK KwlpZiAoc2V0YXRtKHBwLDApIDwgMCkgeworCSAgICBpZiAoIXF1aWV0KSBwcmludGYoIj9FdmFs dWF0ZWQgZGF0ZSB0b28gbG9uZ1xuIik7CisJICAgIHJldHVybigtOSk7CisJfQorCXMgPSBhdHhi dWY7CisgICAgfQorICAgIGRwID0gY21jdnRkYXRlKHMsMSk7CisgICAgaWYgKCFkcCkgeworCWlm ICghcXVpZXQpIHByaW50ZigiPyVzXG4iLGNtZGF0ZW1zZyk7CisJcmV0dXJuKC05KTsKKyAgICB9 CisgICAgKnhwID0gZHA7CisgICAgcmV0dXJuKDApOworfQorCisjaWZkZWYgQ0tfUkVDQUxMCQkJ LyogQ29tbWFuZC1yZWNhbGwgZnVuY3Rpb25zICovCisKKy8qICBDIE0gUiBJIE4gSSAgLS0gIElu aXRpYWxpemUgb3IgY2hhbmdlIHNpemUgb2YgY29tbWFuZCByZWNhbGwgYnVmZmVyICovCisKK2lu dAorY21yaW5pKG4pIGludCBuOyB7CisgICAgaW50IGk7CisgICAgaWYgKHJlY2FsbCAmJiBpbl9y ZWNhbGwpIHsJCS8qIEZyZWUgb2xkIHN0b3JhZ2UsIGlmIGFueSAqLworCWZvciAoaSA9IDA7IGkg PCBjbV9yZWNhbGw7IGkrKykgeworCSAgICBpZiAocmVjYWxsW2ldKSB7CisJCWZyZWUocmVjYWxs W2ldKTsKKwkJcmVjYWxsW2ldID0gTlVMTDsKKwkgICAgfQorCX0KKwlmcmVlKHJlY2FsbCk7CisJ cmVjYWxsID0gTlVMTDsKKyAgICB9CisgICAgY21fcmVjYWxsID0gbjsJCQkvKiBTZXQgbmV3IHNp emUgKi8KKyAgICBybGFzdCA9IGN1cnJlbnQgPSAtMTsJCS8qIEluaXRpYWxpemUgcG9pbnRlcnMg Ki8KKyAgICBpZiAobiA+IDApIHsKKwlyZWNhbGwgPSAoY2hhciAqKiltYWxsb2MoKGNtX3JlY2Fs bCArIDEpICogc2l6ZW9mKGNoYXIgKikpOworCWlmICghcmVjYWxsKQorCSAgcmV0dXJuKDEpOwor CWZvciAoaSA9IDA7IGkgPCBjbV9yZWNhbGw7IGkrKykgeworCSAgICByZWNhbGxbaV0gPSBOVUxM OworCX0KKwlpbl9yZWNhbGwgPSAxOwkJCS8qIFJlY2FsbCBidWZmZXJzIGluaXQnZCAqLworICAg IH0KKyAgICByZXR1cm4oMCk7Cit9CisKKy8qICBDIE0gQSBEIEQgTiBFIFggVCAgLS0gIEZvcmNl IGFkZGl0aW9uIG9mIG5leHQgY29tbWFuZCAqLworCitWT0lECitjbWFkZG5leHQoKSB7CisgICAg aWYgKG9uX3JlY2FsbCAmJiBpbl9yZWNhbGwpIHsJLyogRXZlbiBpZiBpdCBkb2Vzbid0IGNvbWUg Ki8KKwlmb3JjZV9hZGQgPSAxOwkJCS8qIGZyb20gdGhlIGtleWJvYXJkICovCisJbmV3Y21kID0g MTsKKwlub19yZWNhbGwgPSAwOworICAgIH0KK30KKworLyogIEMgTSBHIEUgVCBDIE0gRCAgLS0g IEZpbmQgbW9zdCByZWNlbnQgbWF0Y2hpbmcgY29tbWFuZCAgKi8KKworY2hhciAqCitjbWdldGNt ZChzKSBjaGFyICogczsgeworICAgIGludCBpOworICAgIGZvciAoaSA9IGN1cnJlbnQ7IGkgPj0g MDsgaS0tKSB7CS8qIFNlYXJjaCBiYWNrd2FyZCB0aHJ1IGhpc3RvcnkgbGlzdCAqLworCWlmICgh cmVjYWxsW2ldKSBjb250aW51ZTsJLyogVGhpcyBvbmUncyBudWxsLCBza2lwIGl0ICovCisJaWYg KGNrbWF0Y2gocyxyZWNhbGxbaV0sMCwxKSkJLyogTWF0Y2g/ICovCisJICByZXR1cm4ocmVjYWxs W2ldKTsJCS8qIFllcywgcmV0dXJuIHBvaW50ZXIgKi8KKyAgICB9CisgICAgcmV0dXJuKE5VTEwp OwkJCS8qIE5vIG1hdGNoLCByZXR1cm4gTlVMTCBwb2ludGVyICovCit9CisjZW5kaWYgLyogQ0tf UkVDQUxMICovCisKKy8qICBBIEQgRCBDIE0gRCAgLS0gIEFkZCBhIGNvbW1hbmQgdG8gdGhlIHJl Y2FsbCBidWZmZXIgICovCisKK1ZPSUQKK2FkZGNtZChzKSBjaGFyICogczsgeworICAgIGludCBs ZW4gPSAwLCBucSA9IDA7CisgICAgY2hhciAqIHA7CisjaWZkZWYgQ0tMRUFSTgorICAgIGV4dGVy biBpbnQgbGVhcm5pbmc7CisjZW5kaWYgLyogQ0tMRUFSTiAqLworCisgICAgaWYgKHhjbWRzcmMp CQkJLyogT25seSBmb3IgaW50ZXJhY3RpdmUgY29tbWFuZHMgKi8KKyAgICAgIHJldHVybjsKKwor ICAgIGlmICghbmV3Y21kKQkJCS8qIFRoZSBjb21tYW5kIGhhcyBiZWVuIGhlcmUgYWxyZWFkeSAq LworICAgICAgcmV0dXJuOwkJCQkvKiBzbyBpZ25vcmUgaXQuICovCisgICAgbmV3Y21kID0gMDsJ CQkJLyogSXQncyBuZXcgYnV0IGRvIHRoaXMgb25seSBvbmNlLiAqLworCisgICAgaWYgKCFzKSBz ID0gY21kYnVmOworICAgIGlmIChzWzBdKQorICAgICAgbGVuID0gc3RybGVuKHMpOworCisgICAg aWYgKGxlbiA8IDEpCQkJLyogRG9uJ3Qgc2F2ZSBlbXB0eSBjb21tYW5kcyAqLworICAgICAgcmV0 dXJuOworCisgICAgcCA9IHM7CisgICAgd2hpbGUgKCpwKSB7IGlmICgqcCsrID09ICc/JykgbnEr KzsgfSAvKiBDb3VudCBxdWVzdGlvbiBtYXJrcyAqLworCisjaWZkZWYgQ0tMRUFSTgorICAgIGlm IChsZWFybmluZykJCQkvKiBJZiBhIGxlYXJuZWQgc2NyaXB0IGlzIGFjdGl2ZSAqLworICAgICAg bGVhcm5jbWQocyk7CQkJLyogcmVjb3JkIHRoaXMgY29tbWFuZC4gKi8KKyNlbmRpZiAvKiBDS0xF QVJOICovCisKKyAgICBkZWJ1ZyhGMDEwLCJDTUQoUCkiLHMsMCk7CQkvKiBNYXliZSByZWNvcmQg aXQgaW4gdGhlIGRlYnVnIGxvZyAqLworCisjaWZkZWYgQ0tTWVNMT0cKKyAgICBpZiAoY2t4bG9n Z2luZykgewkJCS8qIE1heWJlIHJlY29yZCBpdCBpbiBzeXNsb2cgKi8KKwlpZiAoY2t4c3lzbG9n ID49IFNZU0xHX0NYIHx8IGNreHN5c2xvZyA+PSBTWVNMR19DTSkKKwkgIGNrc3lzbG9nKFNZU0xH X0NYLCAxLCAiY29tbWFuZCIsIHMsIE5VTEwpOworICAgIH0KKyNlbmRpZiAvKiBDS1NZU0xPRyAq LworCisjaWZkZWYgQ0tfUkVDQUxMCisgICAgbGFzdF9yZWNhbGwgPSAwOworCisgICAgaWYgKG9u X3JlY2FsbCAmJgkJCS8qIENvbW1hbmQgcmVjYWxsIGlzIG9uPyAqLworCWNtX3JlY2FsbCA+IDAg JiYJCS8qIFJlY2FsbCBidWZmZXIgc2l6ZSBpcyA+IDA/ICovCisJIW5vX3JlY2FsbCkgewkJCS8q IE5vdCBub3Qgc2F2aW5nIHRoaXMgY29tbWFuZD8gKi8KKworCWlmICghZm9yY2VfYWRkICYmIHJs YXN0ID4gLTEpCS8qIElmIHByZXZpb3VzIGNvbW1hbmQgd2FzIGlkZW50aWNhbCAqLworCSAgaWYg KCFzdHJjbXAocyxyZWNhbGxbcmxhc3RdKSkgLyogZG9uJ3QgYWRkIGFub3RoZXIgY29weSAqLwor CSAgICByZXR1cm47CisKKwlmb3JjZV9hZGQgPSAwOwkJCS8qIFJlc2V0IG5vdyBpbiBjYXNlIGl0 IHdhcyBzZXQgKi8KKworICAgICAgICBpZiAocmxhc3QgPj0gY21fcmVjYWxsIC0gMSkgewkvKiBS ZWNhbGwgYnVmZmVyIGZ1bGw/ICovCisJICAgIGludCBpOworCSAgICBpZiAocmVjYWxsWzBdKSB7 CQkvKiBEaXNjYXJkIG9sZGVzdCBjb21tYW5kICovCisJCWZyZWUocmVjYWxsWzBdKTsKKwkJcmVj YWxsWzBdID0gTlVMTDsKKwkgICAgfQorCSAgICBmb3IgKGkgPSAwOyBpIDwgcmxhc3Q7IGkrKykg eyAgLyogVGhlIHJlc3QgKi8KKwkJcmVjYWxsW2ldID0gcmVjYWxsW2krMV07ICAgLyogbW92ZSBi YWNrICovCisJICAgIH0KKwkgICAgcmxhc3QtLTsJCQkvKiBOb3cgd2UgaGF2ZSBvbmUgbGVzcyAq LworCX0KKyAgICAgICAgcmxhc3QrKzsJCQkvKiBJbmRleCBvZiBsYXN0IGNvbW1hbmQgaW4gYnVm ZmVyICovCisJY3VycmVudCA9IHJsYXN0OwkJLyogQWxzbyBub3cgdGhlIGN1cnJlbnQgY29tbWFu ZCAqLworCWlmIChjdXJyZW50ID49IGNtX3JlY2FsbCkgewkvKiBTaG91bGRuJ3QgaGFwcGVuICov CisJICAgIHByaW50ZigiP0NvbW1hbmQgaGlzdG9yeSBlcnJvclxuIik7CS8qIGJ1dCBpZiBpdCBk b2VzICovCisJICAgIG9uX3JlY2FsbCA9IDA7CQkgICAgICAgIC8qIHR1cm4gb2ZmIGNvbW1hbmQg c2F2aW5nICovCisjaWZkZWYgQ09NTUVOVAorCX0gZWxzZSBpZiAobnEgPiAwKSB7CQkvKiBIYXZl IGF0IGxlYXN0IG9uZSBxdWVzdGlvbiBtYXJrICovCisJICAgIHJlY2FsbFtjdXJyZW50XSA9IG1h bGxvYyhsZW4rbnErMSk7CisJICAgIGlmIChyZWNhbGxbY3VycmVudF0pIHsKKwkJcCA9IHJlY2Fs bFtjdXJyZW50XTsKKwkJd2hpbGUgKCpzKSB7CisJCSAgICBpZiAoKnMgPT0gJz8nKQorCQkgICAg ICAqcCsrID0gJ1xcJzsKKwkJICAgICpwKysgPSAqcysrOworCQl9CisJCSpwID0gTlVMOworCSAg ICB9CisjZW5kaWYgLyogQ09NTUVOVCAqLworCX0gZWxzZSB7CQkJLyogTm9ybWFsIGNhc2UsIGp1 c3QgY29weSAqLworCSAgICByZWNhbGxbY3VycmVudF0gPSBtYWxsb2MobGVuKzEpOworCSAgICBp ZiAocmVjYWxsW2N1cnJlbnRdKQorCSAgICAgIGNrc3RybmNweShyZWNhbGxbY3VycmVudF0scyxs ZW4rMSk7CisJfQorICAgIH0KKyNlbmRpZiAvKiBDS19SRUNBTEwgKi8KK30KKworCisjaWZkZWYg Q0tfUkVDQUxMCisKKy8qIEMgTSBIIEkgUyBUIE8gUiBZICovCisKK1ZPSUQKK2NtaGlzdG9yeSgp IHsKKyAgICBpbnQgaSwgbGMgPSAxOworICAgIGZvciAoaSA9IDA7IGkgPD0gY3VycmVudDsgaSsr KSB7CisJcHJpbnRmKCIgJXNcbiIsIHJlY2FsbFtpXSk7CisJaWYgKCsrbGMgPiAoY21kX3Jvd3Mg LSAyKSkgewkvKiBTY3JlZW4gZnVsbD8gKi8KKwkgICAgaWYgKCFhc2ttb3JlKCkpCQkvKiBEbyBt b3JlLXByb21wdGluZy4uLiAqLworCSAgICAgIGJyZWFrOworCSAgICBlbHNlCisJICAgICAgbGMg PSAwOworCX0KKyAgICB9Cit9CisKK2ludAorc2F2aGlzdG9yeShzLGRpc3ApIGNoYXIgKnM7IGlu dCBkaXNwOyB7CisgICAgRklMRSAqIGZwOworICAgIGludCBpOworCisgICAgZnAgPSBmb3Blbihz LCBkaXNwID8gImEiIDogInciKTsKKyAgICBpZiAoIWZwKSB7CisJcGVycm9yKHMpOworCXJldHVy bigwKTsKKyAgICB9CisgICAgZm9yIChpID0gMDsgaSA8PSBjdXJyZW50OyBpKyspCisgICAgICBm cHJpbnRmKGZwLCIlc1xuIiwgcmVjYWxsW2ldKTsKKyAgICBmY2xvc2UoZnApOworICAgIHJldHVy bigxKTsKK30KKyNlbmRpZiAvKiBDS19SRUNBTEwgKi8KKworI2lmZGVmIENPTU1FTlQKKy8qIGFw cGFyZW50bHkgbm90IHVzZWQgKi8KK2ludAorY21nZXRsYyhzKSBjaGFyICogczsgewkJCS8qIEdl dCBsZWFkaW5nIGNoYXIgKi8KKyAgICBjaGFyIGM7CisgICAgd2hpbGUgKChjID0gKnMrKykgPD0g U1ApIHsKKwlpZiAoIWMpCisJICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuKGMpOworfQorI2Vu ZGlmIC8qIENPTU1FTlQgKi8KKworCisvKiAgQyBNIEMgRiBNICAtLSAgUGFyc2UgY29tbWFuZCBj b25maXJtYXRpb24gKGVuZCBvZiBsaW5lKSAgKi8KKworLyoKKyBSZXR1cm5zCisgICAtMjogVXNl ciB0eXBlZCBhbnl0aGluZyBidXQgd2hpdGVzcGFjZSBvciBuZXdsaW5lCisgICAtMTogUmVwYXJz ZSBuZWVkZWQKKyAgICAwOiBDb25maXJtYXRpb24gd2FzIHJlY2VpdmVkCisqLworaW50CitjbWNm bSgpIHsKKyAgICBpbnQgeCwgeGM7CisgICAgZGVidWcoRjEwMSwiY21jZm06IGNtZmxncyIsIiIs Y21mbGdzKTsKKyAgICBkZWJ1ZyhGMTEwLCJjbWNmbTogYXRtYnVmIixhdG1idWYsMCk7CisgICAg aW53b3JkID0geGMgPSBjYyA9IDA7CisKKyAgICBzZXRhdG0oIiIsMCk7CQkJLyogKFByb2JhYmx5 IHVubmVjZXNzYXJ5KSAqLworCisgICAgd2hpbGUgKGNtZmxncyAhPSAxKSB7CisgICAgICAgIHgg PSBndHdvcmQoMCk7CisgICAgICAgIHhjICs9IGNjOworCisgICAgICAgIHN3aXRjaCAoeCkgewor CSAgY2FzZSAtOToKKwkgICAgcHJpbnRmKCJDb21tYW5kIG9yIGZpZWxkIHRvbyBsb25nXG4iKTsK KwkgIGNhc2UgLTQ6CQkJLyogRU9GICovCisJICBjYXNlIC0yOgorCSAgY2FzZSAtMToKKwkgICAg cmV0dXJuKHgpOworCSAgY2FzZSAxOgkJCS8qIEVuZCBvZiBsaW5lICovCisJICAgIGlmICh4YyA+ IDApIHsKKwkJaWYgKHhjbWZkYikgeworCQkgICAgcmV0dXJuKC02KTsKKwkJfSBlbHNlIHsKKwkJ ICAgIHByaW50ZigiP05vdCBjb25maXJtZWQgLSAlc1xuIixhdG1idWYpOworCQkgICAgcmV0dXJu KC05KTsKKwkJfQorCSAgICB9IGVsc2UKKwkgICAgICBicmVhazsJCQkvKiBGaW5pc2ggdXAgYmVs b3cgKi8KKwkgIGNhc2UgMjoJCQkvKiBFU0MgKi8KKwkgICAgaWYgKHhjID09IDApIHsKKwkJYmxl ZXAoQlBfV0FSTik7CisJCWNvbnRpbnVlOwkJLyogb3IgZmFsbCB0aHJ1LiAqLworCSAgICB9CisJ ICBjYXNlIDA6CQkJLyogU3BhY2UgKi8KKwkgICAgaWYgKHhjID09IDApCQkvKiBJZiBubyBjaGFy cyB0eXBlZCwgY29udGludWUsICovCisJICAgICAgY29udGludWU7CQkJLyogZWxzZSBmYWxsIHRo cnUuICovCisJICAgIC8qIGVsc2UgZmFsbCB0aHJ1Li4uICovCisKKwkgIGNhc2UgMzoJCQkvKiBR dWVzdGlvbiBtYXJrICovCisJICAgIGlmICh4YyA+IDApIHsKKwkJaWYgKHhjbWZkYikgeworCQkg ICAgcmV0dXJuKC02KTsKKwkJfSBlbHNlIHsKKwkJICAgIHByaW50ZigiP05vdCBjb25maXJtZWQg LSAlc1xuIixhdG1idWYpOworCQkgICAgcmV0dXJuKC05KTsKKwkJfQorCSAgICB9CisJICAgIHBy aW50ZigKKwkgICAgICAgIlxuIFByZXNzIHRoZSBSZXR1cm4gb3IgRW50ZXIga2V5IHRvIGNvbmZp cm0gdGhlIGNvbW1hbmRcbiIpOworCSAgICBwcmludGYoIiVzJXMiLGNtcHJvbSxjbWRidWYpOwor CSAgICBmZmx1c2goc3Rkb3V0KTsKKwkgICAgY29udGludWU7CisJfQorICAgIH0KKyAgICBkZWJv ayA9IDE7CisgICAgcmV0dXJuKDApOworfQorCisKKy8qIFRoZSBmb2xsb3dpbmcgbWF0ZXJpYWwg c3VwcG9ydHMgY2hhaW5lZCBwYXJzaW5nIGZ1bmN0aW9ucy4gKi8KKy8qIFNlZSBja3VjbWQuaCBm b3IgRkRCIGFuZCBPRkRCIGRlZmluaXRpb25zLiAqLworCitzdHJ1Y3QgT0ZEQiBjbXJlc3VsdCA9 IHsJCS8qIFVuaXZlcnNhbCBjbWZkYiByZXN1bHQgaG9sZGVyICovCisgICAgTlVMTCwJCQkJLyog QWRkcmVzcyBvZiBzdWNjZWVkaW5nIEZEQiBzdHJ1Y3QgKi8KKyAgICAwLAkJCQkJLyogRnVuY3Rp b24gY29kZSAqLworICAgIE5VTEwsCQkJCS8qIFN0cmluZyByZXN1bHQgKi8KKyAgICAwLAkJCQkJ LyogSW50ZWdlciByZXN1bHQgKi8KKyAgICAoQ0tfT0ZGX1QpMAkJCQkvKiBXaWRlIHJlc3VsdCAq LworfTsKKworVk9JRAorY21mZGJpKHAsZmMsczEsczIsczMsbjEsbjIsZixrLG54dCkJLyogSW5p dGlhbGl6ZSBhbiBGREIgKi8KKyAgICBzdHJ1Y3QgRkRCICogcDsKKyAgICBpbnQgZmM7CisgICAg Y2hhciAqIHMxLCAqIHMyLCAqIHMzOworICAgIGludCBuMSwgbjI7CisgICAgeHhfc3RycCBmOwor ICAgIHN0cnVjdCBrZXl0YWIgKiBrOworICAgIHN0cnVjdCBGREIgKiBueHQ7IHsKKworICAgIHAt PmZjb2RlID0gZmM7CisgICAgcC0+aGxwbXNnID0gczE7CisgICAgcC0+ZGZsdCA9IHMyOworICAg IHAtPnNkYXRhID0gczM7CisgICAgcC0+bmRhdGExID0gbjE7CisgICAgcC0+bmRhdGEyID0gbjI7 CisgICAgcC0+c3BmID0gZjsKKyAgICBwLT5rd2R0YmwgPSBrOworICAgIHAtPm54dGZkYiA9IG54 dDsKK30KKworLyogIEMgTSBGIEQgQiAgLS0gIFBhcnNlIGEgZmllbGQgd2l0aCBzZXZlcmFsIHBv c3NpYmxlIGZ1bmN0aW9ucyAgKi8KKworaW50CitjbWZkYihmZGJpbikgc3RydWN0IEZEQiAqIGZk YmluOyB7CisjaWZuZGVmIE5PU1BMCisgICAgZXh0ZXJuIGludCB4X2lmbnVtOyAgICAgICAgICAg ICAgICAgLyogSUYgTlVNRVJJQyAtIGRpc2FibGVzIHdhcm5pbmdzICovCisjZW5kaWYgLyogTk9T UEwgKi8KKyAgICBzdHJ1Y3QgRkRCICogaW4gPSBmZGJpbjsKKyAgICBzdHJ1Y3QgT0ZEQiAqIG91 dCA9ICZjbXJlc3VsdDsKKyAgICBpbnQgeCA9IDAsIG4sIHI7CisgICAgQ0tfT0ZGX1QgdyA9IChD S19PRkZfVCkwOworICAgIGNoYXIgKnMsICp4cCwgKm0gPSBOVUxMOworICAgIGludCBlcnJiaXRz ID0gMDsKKworICAgIHhwID0gYnA7CisKKyAgICBvdXQtPmZjb2RlID0gLTE7CQkJLyogSW5pdGlh bGl6ZSBvdXRwdXQgc3RydWN0ICovCisgICAgb3V0LT5mZGJhZGRyID0gTlVMTDsKKyAgICBvdXQt PnNyZXN1bHQgPSBOVUxMOworICAgIG91dC0+bnJlc3VsdCA9IDA7CisvKgorICBDdXJyZW50bHkg d2UgbWFrZSBvbmUgdHJpcCB0aHJvdWdoIHRoZSBGREJzLiAgU28gaWYgdGhlIHVzZXIgdHlwZXMg RXNjIG9yCisgIFRhYiBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgZmllbGQsIG9ubHkgdGhlIGZpcnN0 IEZEQiBpcyBleGFtaW5lZCBmb3IgYQorICBkZWZhdWx0LiAgSWYgdGhlIHVzZXIgdHlwZXMgPywg aGVscCBpcyBnaXZlbiBvbmx5IGZvciBvbmUgRkRCLiAgV2Ugc2hvdWxkCisgIHNlYXJjaCB0aHJv dWdoIHRoZSBGREJzIGZvciBhbGwgbWF0Y2hpbmcgcG9zc2liaWxpdGllcyAtLSBhbmQgaW4gcGFy dGljdWxhcgorICBkaXNwbGF5IHRoZSBwZXJ0aW5lbnQgY29udGV4dC1zZW5zaXRpdmUgaGVscCBm b3IgZWFjaCBmdW5jdGlvbiwgcmF0aGVyIHRoYW4KKyAgdGhlIG9ubHkgdGhlIGZpcnN0IG9uZSB0 aGF0IHdvcmtzLCBhbmQgdGhlbiByZXdpbmQgdGhlIEZEQiBwb2ludGVyIHNvIHdlCisgIGFyZSBu b3QgbG9ja2VkIG91dCBvZiB0aGUgZWFybGllciBvbmVzLgorKi8KKyAgICBjbWZsZGZsZ3MgPSAw OworICAgIHdoaWxlICgxKSB7CQkJCS8qIExvb3AgdGhyb3VnaCB0aGUgY2hhaW4gb2YgRkRCcyAq LworCW5vbXNnID0gMTsKKwl4Y21mZGIgPSAxOworCXMgPSBOVUxMOworCW4gPSAwOworCWRlYnVn KEYxMDEsImNtZmRiIGluLT5mY29kZSIsIiIsaW4tPmZjb2RlKTsKKwlzd2l0Y2ggKGluLT5mY29k ZSkgewkJLyogQ3VycmVudCBwYXJzaW5nIGZ1bmN0aW9uIGNvZGUgKi8KKwkgIGNhc2UgX0NNTlVN OgorCSAgICByID0gaW4tPm5kYXRhMTsKKwkgICAgaWYgKHIgIT0gMTAgJiYgciAhPSA4KSByID0g MTA7CisjaWZuZGVmIE5PU1BMCisgICAgICAgICAgICB4X2lmbnVtID0gMTsgICAgICAgICAgICAg ICAgLyogRGlzYWJsZXMgd2FybmluZyBtZXNzYWdlcyAqLworI2VuZGlmIC8qIE5PU1BMICovCisJ ICAgIHggPSBjbW51bShpbi0+aGxwbXNnLGluLT5kZmx0LHIsJm4saW4tPnNwZik7CisjaWZuZGVm IE5PU1BMCisgICAgICAgICAgICB4X2lmbnVtID0gMDsKKyNlbmRpZiAvKiBOT1NQTCAqLworCSAg ICBkZWJ1ZyhGMTAxLCJjbWZkYiBjbW51bSIsIiIseCk7CisJICAgIGlmICh4IDwgMCkgZXJyYml0 cyB8PSAxOworCSAgICBicmVhazsKKwkgIGNhc2UgX0NNTlVXOgkJCS8qIFdpZGUgY21udW0gLSAy NCBEZWMgMjAwNSAqLworCSAgICByID0gaW4tPm5kYXRhMTsKKwkgICAgaWYgKHIgIT0gMTAgJiYg ciAhPSA4KSByID0gMTA7CisjaWZuZGVmIE5PU1BMCisgICAgICAgICAgICB4X2lmbnVtID0gMTsg ICAgICAgICAgICAgICAgLyogRGlzYWJsZXMgd2FybmluZyBtZXNzYWdlcyAqLworI2VuZGlmIC8q IE5PU1BMICovCisJICAgIHggPSBjbW51bXcoaW4tPmhscG1zZyxpbi0+ZGZsdCxyLCZ3LGluLT5z cGYpOworI2lmbmRlZiBOT1NQTAorICAgICAgICAgICAgeF9pZm51bSA9IDA7CisjZW5kaWYgLyog Tk9TUEwgKi8KKwkgICAgZGVidWcoRjEwMSwiY21mZGIgY21udW13IiwiIix3KTsKKwkgICAgaWYg KHggPCAwKSBlcnJiaXRzIHw9IDE7CisJICAgIGJyZWFrOworCSAgY2FzZSBfQ01PRkk6CisJICAg IHggPSBjbW9maShpbi0+aGxwbXNnLGluLT5kZmx0LCZzLGluLT5zcGYpOworCSAgICBkZWJ1ZyhG MTAxLCJjbWZkYiBjbW9maSIsIiIseCk7CisJICAgIGlmICh4IDwgMCkgZXJyYml0cyB8PSAyOwor CSAgICBicmVhazsKKwkgIGNhc2UgX0NNSUZJOgorCSAgICB4ID0gY21pZmkyKGluLT5obHBtc2cs CisJCSAgICAgICBpbi0+ZGZsdCwKKwkJICAgICAgICZzLAorCQkgICAgICAgJm4sCisJCSAgICAg ICBpbi0+bmRhdGExLAorCQkgICAgICAgaW4tPnNkYXRhLAorCQkgICAgICAgaW4tPnNwZiwKKwkJ ICAgICAgIGluLT5uZGF0YTIKKwkJICAgICAgICk7CisJICAgIGRlYnVnKEYxMDEsImNtZmRiIGNt aWZpMiB4IiwiIix4KTsKKwkgICAgZGVidWcoRjEwMSwiY21mZGIgY21pZmkyIG4iLCIiLG4pOwor CSAgICBpZiAoeCA8IDApIGVycmJpdHMgfD0gNDsKKwkgICAgYnJlYWs7CisJICBjYXNlIF9DTUZM RDoKKwkgICAgY21mbGRmbGdzID0gaW4tPm5kYXRhMTsKKwkgICAgeCA9IGNtZmxkKGluLT5obHBt c2csaW4tPmRmbHQsJnMsaW4tPnNwZik7CisJICAgIGRlYnVnKEYxMDEsImNtZmRiIGNtZmxkIiwi Iix4KTsKKwkgICAgaWYgKHggPCAwKSBlcnJiaXRzIHw9IDg7CisJICAgIGJyZWFrOworCSAgY2Fz ZSBfQ01UWFQ6CisJICAgIHggPSBjbXR4dChpbi0+aGxwbXNnLGluLT5kZmx0LCZzLGluLT5zcGYp OworCSAgICBkZWJ1ZyhGMTAxLCJjbWZkYiBjbXR4dCIsIiIseCk7CisJICAgIGlmICh4IDwgMCkg ZXJyYml0cyB8PSAxNjsKKwkgICAgYnJlYWs7CisJICBjYXNlIF9DTUtFWToKKwkgICAgeCA9IGNt a2V5Mihpbi0+a3dkdGJsLAorCQkgICAgICAgaW4tPm5kYXRhMSwKKwkJICAgICAgIGluLT5obHBt c2csaW4tPmRmbHQsaW4tPnNkYXRhLGluLT5zcGYsaW4tPm5kYXRhMik7CisJICAgIGRlYnVnKEYx MDEsImNtZmRiIGNta2V5IiwiIix4KTsKKwkgICAgaWYgKHggPCAwKSBlcnJiaXRzIHw9ICgoaW4t Pm5kYXRhMiAmIDQpID8gMzIgOiA2NCk7CisJICAgIGJyZWFrOworCSAgY2FzZSBfQ01DRk06CisJ ICAgIHggPSBjbWNmbSgpOworCSAgICBkZWJ1ZyhGMTAxLCJjbWZkYiBjbWNmbSIsIiIseCk7CisJ ICAgIGlmICh4IDwgMCkgZXJyYml0cyB8PSAxMjg7CisJICAgIGJyZWFrOworCSAgZGVmYXVsdDoK KwkgICAgZGVidWcoRjEwMSwiY21mZGIgLSB1bmV4cGVjdGVkIGZ1bmN0aW9uIGNvZGUiLCIiLGlu LT5mY29kZSk7CisJICAgIHByaW50ZigiP2NtZmRiIC0gdW5leHBlY3RlZCBmdW5jdGlvbiBjb2Rl OiAlZFxuIixpbi0+ZmNvZGUpOworCX0KKwlkZWJ1ZyhGMTAxLCJjbWZkYiB4IiwiIix4KTsKKwlk ZWJ1ZyhGMTAxLCJjbWZkYiBjbWZsZ3MiLCIiLGNtZmxncyk7CisJZGVidWcoRjEwMSwiY21mZGIg Y3JmbGFnIiwiIixjcmZsYWcpOworCWRlYnVnKEYxMDEsImNtZmRiIHFtZmxhZyIsIiIscW1mbGFn KTsKKwlkZWJ1ZyhGMTAxLCJjbWZkYiBlc2ZsYWciLCIiLGVzZmxhZyk7CisKKwlpZiAoeCA+IC0x KSB7CQkJLyogU3VjY2VzcyAqLworCSAgICBvdXQtPmZjb2RlID0gaW4tPmZjb2RlOwkvKiBGaWxs IGluIG91dHB1dCBzdHJ1Y3QgKi8KKwkgICAgb3V0LT5mZGJhZGRyID0gaW47CisJICAgIG91dC0+ c3Jlc3VsdCA9IHM7CisJICAgIG91dC0+bnJlc3VsdCA9IChpbi0+ZmNvZGUgPT0gX0NNS0VZKSA/ IHggOiBuOworCSAgICBvdXQtPndyZXN1bHQgPSB3OworCSAgICBvdXQtPmtmbGFncyA9IChpbi0+ ZmNvZGUgPT0gX0NNS0VZKSA/IGNta3dmbGdzIDogMDsKKwkgICAgZGVidWcoRjExMSwiY21mZGIg b3V0LT5ucmVzdWx0IixvdXQtPnNyZXN1bHQsb3V0LT5ucmVzdWx0KTsKKwkgICAgZGVidWcoRjEx MSwiY21mZGIgb3V0LT53cmVzdWx0IixvdXQtPnNyZXN1bHQsb3V0LT53cmVzdWx0KTsKKwkgICAg bm9tc2cgPSAwOworCSAgICB4Y21mZGIgPSAwOworCSAgICAvKiBkZWJ1ZyhGMTExLCJjbWZkYiBj bWRidWYgJiBjcmZsYWciLGNtZGJ1ZixjcmZsYWcpOyAqLworCSAgICBpZiAoY3JmbGFnKSB7CisJ CWNtZmxncyA9IDE7CisJICAgIH0KKwkgICAgcmV0dXJuKHgpOwkJCS8qIGFuZCByZXR1cm4gKi8K Kwl9CisJaW4gPSBpbi0+bnh0ZmRiOwkJLyogRmFpbGVkLCBnZXQgbmV4dCBwYXJzaW5nIGZ1bmN0 aW9uICovCisJbm9tc2cgPSAwOworCXhjbWZkYiA9IDA7CisJaWYgKCFpbikgewkJCS8qIE5vIG1v cmUgKi8KKwkgICAgZGVidWcoRjEwMSwiY21mZGIgZmFpbHVyZSB4IiwiIix4KTsKKwkgICAgZGVi dWcoRjEwMSwiY21mZGIgZmFpbHVyZSBlcnJiaXRzIiwiIixlcnJiaXRzKTsKKwkgICAgaWYgKHgg PT0gLTYpCisJICAgICAgeCA9IC05OworCSAgICBpZiAoeCA9PSAtOSkgeworI2lmZGVmIENLUk9P VAorCQlpZiAoY2tyb290ZXJyKQorCQkgIG0gPSAiT2ZmIExpbWl0cyI7CisJCWVsc2UKKyNlbmRp ZiAvKiBDS1JPT1QgKi8KKwkJLyogTWFrZSBpbmZvcm1hdGl2ZSBtZXNzYWdlcyBmb3IgYSBmZXcg Y29tbW9uIGNhc2VzICovCisJCXN3aXRjaCAoZXJyYml0cykgeworCQkgIGNhc2UgNCszMjogbSA9 ICJEb2VzIG5vdCBtYXRjaCBmaWxlbmFtZSBvciBzd2l0Y2giOyBicmVhazsKKwkJICBjYXNlIDQr NjQ6IG0gPSAiRG9lcyBub3QgbWF0Y2ggZmlsZW5hbWUgb3Iga2V5d29yZCI7IGJyZWFrOworCQkg IGNhc2UgMSszMjogbSA9ICJOb3QgYSBudW1iZXIgb3IgdmFsaWQga2V5d29yZCI7IGJyZWFrOwor CQkgIGNhc2UgMSs2NDogbSA9ICJOb3QgYSBudW1iZXIgb3IgdmFsaWQgc3dpdGNoIjsgYnJlYWs7 CisJCSAgZGVmYXVsdDogbSA9ICJOb3QgdmFsaWQgaW4gdGhpcyBwb3NpdGlvbiI7CisJCX0KKwkJ cHJpbnRmKCI/JXM6IFwiJXNcIlxuIixtLCBhdG1idWYpOworCSAgICB9CisJICAgIHJldHVybih4 KTsKKwl9CisJaWYgKHggIT0gLTIgJiYgeCAhPSAtNiAmJiB4ICE9IC05ICYmIHggIT0gLTMpIC8q IEVkaXRpbmcgb3Igc29tZXN1Y2ggKi8KKwkgIHJldHVybih4KTsJCQkvKiBHbyBiYWNrIGFuZCBy ZXBhcnNlICovCisJcHAgPSBucCA9IGJwID0geHA7CQkvKiBCYWNrIHVwIHBvaW50ZXJzICovCisJ Y21mbGdzID0gLTE7CQkJLyogRm9yY2UgYSByZXBhcnNlICovCisKKyNpZm5kZWYgTk9TUEwKKwlp ZiAoIWFza2ZsYWcpIHsJCQkvKiBJZiBub3QgZXhlY3V0aW5nIEFTSy1jbGFzcyBjbWQuLi4gKi8K KyNlbmRpZiAvKiBOT1NQTCAqLworCSAgICBpZiAoY3JmbGFnKSB7CQkvKiBJZiBDUiB3YXMgdHlw ZWQsIHB1dCBpdCBiYWNrICovCisJCXB1c2hjID0gTEY7CQkvKiBCdXQgYXMgYSBsaW5lZmVlZCAq LworCSAgICB9IGVsc2UgaWYgKHFtZmxhZykgewkvKiBEaXR0byBmb3IgUXVlc3Rpb24gbWFyayAq LworCQlwdXNoYyA9ICc/JzsKKwkgICAgfSBlbHNlIGlmIChlc2ZsYWcpIHsJLyogYW5kIEVzY2Fw ZSBvciBUYWIgKi8KKwkJcHVzaGMgPSBFU0M7CisJICAgIH0KKyNpZm5kZWYgTk9TUEwKKwl9Cisj ZW5kaWYgLyogTk9TUEwgKi8KKyAgICB9Cit9CisKKy8qCisgICBDIE0gSSBPIEYgSSAgLS0gIFBh cnNlIGFuIGlucHV0IGZpbGUgT1IgdGhlIG5hbWUgb2YgYSBub25leGlzdGVudCBmaWxlLgorCisg ICBSZXBsYWNlcyB0aGUgY29tbWVudGVkLW91dCB2ZXJzaW9uIGFib3ZlLiAgVGhpcyBvbmUgYWN0 dWFsbHkgd29ya3MgYW5kCisgICBoYXMgdGhlIGV4cGVjdGVkIHN0cmFpZ2h0Zm9yd2FyZCBpbnRl cmZhY2UuCisqLworaW50CitjbWlvZmkoeGhscCx4ZGVmLHhwLHdpbGQsZikgY2hhciAqeGhscCwg KnhkZWYsICoqeHA7IGludCAqd2lsZDsgeHhfc3RycCBmOyB7CisgICAgaW50IHg7CisgICAgc3Ry dWN0IEZEQiBmMSwgZjI7CisgICAgY21mZGJpKCZmMSxfQ01JRkkseGhscCx4ZGVmLCIiLDAsMCxm LE5VTEwsJmYyKTsKKyAgICBjbWZkYmkoJmYyLF9DTU9GSSwiIiwiIiwiIiwwLDAsZixOVUxMLE5V TEwpOworICAgIHggPSBjbWZkYigmZjEpOworICAgIGlmICh4IDwgMCkgeworCWlmICh4ID09IC0z KSB7CisJICAgIHggPSAtOTsKKwkgICAgcHJpbnRmKCI/RmlsZW5hbWUgcmVxdWlyZWRcbiIpOwor CX0KKyAgICB9CisgICAgKndpbGQgPSBjbXJlc3VsdC5ucmVzdWx0OworICAgICp4cCA9IGNtcmVz dWx0LnNyZXN1bHQ7CisgICAgcmV0dXJuKHgpOworfQorCisvKiAgRyBUIFcgTyBSIEQgIC0tICBH ZXRzIGEgIndvcmQiIGZyb20gdGhlIGNvbW1hbmQgaW5wdXQgc3RyZWFtICAqLworCisvKgorVXNh Z2U6IHJldGNvZGUgPSBndHdvcmQoYnJrKTsKKyAgYnJrID0gMCBmb3Igbm9ybWFsIHdvcmQgYnJl YWtzIChzcGFjZSwgQ1IsIEVzYywgPykKKyAgYnJrID0gMSB0byBhZGQgJzonIGFuZCAnPScgKGZv ciBwYXJzaW5nIHN3aXRjaGVzKS4gIFRoZXNlIGNoYXJhY3RlcnMKKyAgICAgICAgYWN0IGFzIGJy ZWFrIGNoYXJhY3RlcnMgb25seSBpZiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBmaWVsZAor ICAgICAgICBpcyBzbGFzaCAoJy8nKSwgaS5lLiBzd2l0Y2ggaW50cm9kdWNlci4KKyAgYnJrID0g NCB0byBub3Qgc3RyaXAgY29tbWVudHMgKHVzZWQgb25seSBmb3IgImhlbHAgIyIgYW5kICJoZWxw IDsiKS4KKworUmV0dXJuczoKKy0xMCBUaW1lbGltaXQgc2V0IGFuZCB0aW1lZCBvdXQKKyAtOSBp ZiBpbnB1dCB3YXMgdG9vIGxvbmcKKyAtNCBpZiBlbmQgb2YgZmlsZSAoZS5nLiBwaXBlIGJyb2tl bikKKyAtMyBpZiBudWxsIGZpZWxkCisgLTIgaWYgY29tbWFuZCBidWZmZXIgb3ZlcmZsb3dzCisg LTEgaWYgdXNlciBkaWQgc29tZSBkZWxldGluZworICAwIGlmIHdvcmQgdGVybWluYXRlcyB3aXRo IFNQIG9yIHRhYgorICAxIGlmIC4uLiBDUgorICAyIGlmIC4uLiBFU0MKKyAgMyBpZiAuLi4gPyAo cXVlc3Rpb24gbWFyaykKKyAgNCBpZiAuLi4gOiBvciA9IGFuZCBjYWxsZWQgd2l0aCBicmsgIT0g MAorCitXaXRoOgorICBwcCBwb2ludGluZyB0byBiZWdpbm5pbmcgb2Ygd29yZCBpbiBidWZmZXIK KyAgYnAgcG9pbnRpbmcgdG8gYWZ0ZXIgY3VycmVudCBwb3NpdGlvbgorICBhdG1idWYgY29udGFp bmluZyBhIGNvcHkgb2YgdGhlIHdvcmQKKyAgY2MgY29udGFpbmluZyB0aGUgbnVtYmVyIG9mIGNo YXJhY3RlcnMgaW4gdGhlIHdvcmQgY29waWVkIHRvIGF0bWJ1ZgorKi8KKworaW50Cit1bmd3b3Jk KCkgewkJCQkvKiBVbmdldCBhIHdvcmQgKi8KKyAgICBkZWJ1ZyhGMTAxLCJ1bmd3b3JkIGNtZmxn cyIsIiIsY21mbGdzKTsKKyAgICBpZiAodW5ndykgcmV0dXJuKDApOworICAgIGNtZnNhdiA9IGNt ZmxnczsKKyAgICB1bmd3ID0gMTsKKyAgICBjbWZsZ3MgPSAwOworICAgIHJldHVybigwKTsKK30K KworLyogVW4tdW4tZ2V0IHdvcmQuICBVbmRvIHVuZ3dvcmQoKSBpZiBpdCBoYXMgYmVlbiBkb25l LiAqLworCitWT0lECit1bnVuZ3coKSB7CisgICAgZGVidWcoRjAxMCwidW51bmd3IGF0bWJ1ZiIs YXRtYnVmLDApOworICAgIGlmICh1bmd3KSB7CisJdW5ndyA9IDA7CisJY21mbGdzID0gY21mc2F2 OworCWF0bWJ1ZlswXSA9IE5VTDsKKyAgICB9Cit9CisKK3N0YXRpYyBpbnQKK2d0d29yZChicmsp IGludCBicms7IHsKKyAgICBpbnQgYzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBD dXJyZW50IGNoYXIgKi8KKyAgICBpbnQgcXVvdGUgPSAwOyAgICAgICAgICAgICAgICAgICAgICAv KiBGbGFnIGZvciBxdW90ZSBjaGFyYWN0ZXIgKi8KKyAgICBpbnQgZWNob2YgPSAwOyAgICAgICAg ICAgICAgICAgICAgICAvKiBGbGFnIGZvciB3aGV0aGVyIHRvIGVjaG8gKi8KKyAgICBpbnQgY29t bWVudCA9IDA7CQkJLyogRmxhZyBmb3IgaW4gY29tbWVudCAqLworICAgIGNoYXIgKmNwID0gTlVM TDsJCQkvKiBDb21tZW50IHBvaW50ZXIgKi8KKyAgICBpbnQgZWludHIgPSAwOwkJCS8qIEZsYWcg Zm9yIHN5c2NhbGwgaW50ZXJydXB0ZWQgKi8KKyAgICBpbnQgYnJhY2VsdmwgPSAwOwkJCS8qIG5l c3RlZCBicmFjZSBjb3VudGVyIFtqcnNdICovCisgICAgaW50IGlzY29udGQgPSAwOwkJCS8qIEZs YWcgZm9yIGNvbnRpbnVhdGlvbiAqLworICAgIGludCByZWFsdHR5ID0gMDsJCQkvKiBTdGRpbiBp cyByZWFsbHkgYSB0dHkgKi8KKyAgICBjaGFyIGZpcnN0bmIgID0gTlVMOworICAgIGNoYXIgbGFz dGNoYXIgPSBOVUw7CisgICAgY2hhciBwcmV2Y2hhciA9IE5VTDsKKyAgICBjaGFyIGxicmFjZSwg cmJyYWNlOworICAgIGludCBkcSA9IDA7CQkJCS8qIERvdWJsZXF1b3RlIGZsYWcgKi8KKyAgICBp bnQgZHFuID0gMDsJCQkvKiBhbmQgY291bnQgKi8KKyAgICBpbnQgaXNlc2MgPSAwOworCisjaWZk ZWYgUlRVCisgICAgZXh0ZXJuIGludCBydHVfYnVnOworI2VuZGlmIC8qIFJUVSAqLworCisjaWZk ZWYgSUtTRAorICAgIGV4dGVybiBpbnQgaW5zZXJ2ZXI7CisjZW5kaWYgLyogSUtTRCAqLworICAg IGV4dGVybiBpbnQga3N0YXJ0YWN0aXZlOworCisjaWZkZWYgZGF0YWdlbmVyYWwKKyAgICBleHRl cm4gaW50IHRlcm10eXBlOyAgICAgICAgICAgICAgICAvKiBERyB0ZXJtaW5hbCB0eXBlIGZsYWcg Ki8KKyAgICBleHRlcm4gaW50IGNvbl9yZWFkc19tdDsgICAgICAgICAgICAvKiBDb25zb2xlIHJl YWQgYXN5bmNoIGlzIGFjdGl2ZSAqLworICAgIGlmIChjb25fcmVhZHNfbXQpIGNvbm5vaV9tdCgp OyAgICAgIC8qIFRhc2sgd291bGQgaW50ZXJmZXJlIHcvY29ucyByZWFkICovCisjZW5kaWYgLyog ZGF0YWdlbmVyYWwgKi8KKworI2lmZGVmIENPTU1FTlQKKyNpZmRlZiBERUJVRworICAgIGlmIChk ZWJsb2cpIHsKKwlkZWJ1ZyhGMTAxLCJndHdvcmQgYnJrIiwiIixicmspOworCWRlYnVnKEYxMDEs Imd0d29yZCBjbWZsZGZsZ3MiLCIiLGNtZmxkZmxncyk7CisJZGVidWcoRjEwMSwiZ3R3b3JkIHN3 YXJnIiwiIixzd2FyZyk7CisJZGVidWcoRjEwMSwiZ3R3b3JkIGRweCIsIiIsZHB4KTsKKwlkZWJ1 ZyhGMTAxLCJndHdvcmQgZWNob2YiLCIiLGVjaG9mKTsKKyNpZm5kZWYgTk9TUEwKKwlkZWJ1ZyhG MTAxLCJndHdvcmQgYXNrZmxhZyIsIiIsYXNrZmxhZyk7CisJZGVidWcoRjEwMSwiZ3R3b3JkIHRp bWVsaW1pdCIsIiIsdGltZWxpbWl0KTsKKyNpZm5kZWYgTk9MT0NBTAorI2lmbmRlZiBOT1hGRVIK KyNpZmRlZiBDS19BVVRPREwKKwlkZWJ1ZyhGMTAxLCJndHdvcmQgY21kYWRsIiwiIixjbWRhZGwp OworI2VuZGlmIC8qIENLX0FVVE9ETCAqLworI2VuZGlmIC8qIE5PWEZFUiAqLworI2VuZGlmIC8q IE5PTE9DQUwgKi8KKyNlbmRpZiAvKiBOT1NQTCAqLworICAgIH0KKyNlbmRpZiAvKiBERUJVRyAq LworI2VuZGlmIC8qIENPTU1FTlQgKi8KKworICAgIHJlYWx0dHkgPSBpc19hX3R0eSgwKTsJCS8q IFN0ZGluIGlzIHJlYWxseSBhIHR0eT8gKi8KKworICAgIGlmIChjbWZsZGZsZ3MgJiAxKSB7CisJ bGJyYWNlID0gJygnOworCXJicmFjZSA9ICcpJzsKKyAgICB9IGVsc2UgeworCWxicmFjZSA9ICd7 JzsKKwlyYnJhY2UgPSAnfSc7CisgICAgfQorICAgIGNyZmxhZyA9IDA7CisgICAgcW1mbGFnID0g MDsKKyAgICBlc2ZsYWcgPSAwOworCisgICAgaWYgKHN3YXJnKSB7CQkJLyogTm8gbGVhZGluZyBz cGFjZSBmb3Igc3dpdGNoIGFyZ3MgKi8KKwlpbndvcmQgPSAxOworCXN3YXJnID0gMDsKKyAgICB9 CisgICAgaWYgKHVuZ3cpIHsJCQkJLyogSGF2ZSBhIHdvcmQgc2F2ZWQ/ICovCisjaWZkZWYgTV9V TkdXCisJLyogRXhwZXJpbWVudGFsIGNvZGUgdG8gYWxsb3cgdW5nZXR0aW5nIG11bHRpcGxlIHdv cmRzLiAqLworCS8qIFNlZSBjb21tZW50cyBpbiBja21rZXkyKCkgYWJvdmUuICovCisJaW50IHg7 CisJaWYgKG5wID4gcHApIHBwID0gbnA7CisJd2hpbGUgKCpwcCA9PSBTUCkgcHArKzsKKwlpZiAo ISpwcCkgeworCSAgICB1bmd3ID0gMDsKKwkgICAgY21mbGdzID0gY21mc2F2OworCX0gZWxzZSB7 CisJICAgIGlmICgoeCA9IHNldGF0bShwcCwyKSkgPCAwKSB7CisJCXByaW50ZigiP1NhdmVkIHdv cmQgdG9vIGxvbmdcbiIpOworCQlyZXR1cm4oLTkpOworCSAgICB9CisJICAgIGlmIChwcFt4XSA+ PSBTUCkgeworCQljaGFyICpwMjsKKwkJcDIgPSBwcDsKKwkJcDIgKz0geDsKKwkJd2hpbGUgKCpw MiA9PSBTUCkgcDIrKzsKKwkJaWYgKCpwMikgeworCQkgICAgbnAgPSBwMjsKKwkJICAgIHVuZ3dv cmQoKTsKKwkJfQorCSAgICB9IGVsc2UgeworCQl1bmd3ID0gMDsKKwkJY21mbGdzID0gY21mc2F2 OworCQlkZWJ1ZyhGMDEwLCJndHdvcmQgdW5ndyByZXR1cm4gYXRtYnVmIixhdG1idWYsMCk7CisJ ICAgIH0KKwl9CisJcmV0dXJuKGNtZmxncyk7CisjZWxzZQorCS8qCisJICAgWW91IHdvdWxkIHRo aW5rIHRoZSBmb2xsb3dpbmcgc2hvdWxkIGJlOgorICAgICAgICAgICAgIHdoaWxlICgqcHAgPT0g U1ApIHBwKys7CisgICAgICAgICAgIGJ1dCB5b3Ugd291bGQgYmUgd3JvbmcgLS0gbWFraW5nIHRo aXMgY2hhbmdlIGJyZWFrcyBHT1RPLgorICAgICAgICAqLworCXdoaWxlICgqcHArKyA9PSBTUCkg OworCWlmIChzZXRhdG0ocHAsMikgPCAwKSB7CisJICAgIHByaW50ZigiP1NhdmVkIHdvcmQgdG9v IGxvbmdcbiIpOworCSAgICByZXR1cm4oLTkpOworCX0KKwl1bmd3ID0gMDsKKwljbWZsZ3MgPSBj bWZzYXY7CisJZGVidWcoRjAxMCwiZ3R3b3JkIHVuZ3cgcmV0dXJuIGF0bWJ1ZiIsYXRtYnVmLDAp OworCXJldHVybihjbWZsZ3MpOworI2VuZGlmIC8qIE1fVU5HVyAqLworICAgIH0KKyAgICBwcCA9 IG5wOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTdGFydCBvZiBjdXJyZW50IGZpZWxk ICovCisKKyNpZmRlZiBDT01NRU5UCisjaWZkZWYgREVCVUcKKyAgICBpZiAoZGVibG9nKSB7CisJ ZGVidWcoRjExMCwiZ3R3b3JkIGNtZGJ1ZiIsY21kYnVmLDApOworCWRlYnVnKEYxMTAsImd0d29y ZCBicCIsYnAsMCk7CisJZGVidWcoRjExMCwiZ3R3b3JkIHBwIixwcCwwKTsKKyAgICB9CisjZW5k aWYgLyogREVCVUcgKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgeworCS8qIElmIHdlIGFy ZSByZXBhcnNpbmcgd2UgaGF2ZSB0byByZWNvdW50IGFueSBicmFjZXMgb3IgZG91YmxlcXVvdGVz ICovCisJY2hhciAqIHAgPSBwcDsKKwljaGFyIGM7CisJaWYgKCpwID09ICciJykKKwkgIGRxKys7 CisJd2hpbGUgKChjID0gKnArKykpCisJICBpZiAoYyA9PSBsYnJhY2UpCisJICAgIGJyYWNlbHZs Kys7CisJICBlbHNlIGlmIChjID09IHJicmFjZSkKKwkgICAgYnJhY2VsdmwtLTsKKwkgIGVsc2Ug aWYgKGRxICYmIGMgPT0gJyInKQorCSAgICBkcW4rKzsKKyAgICB9CisgICAgd2hpbGUgKGJwIDwg Y21kYnVmK0NNREJMKSB7ICAgICAgICAgLyogQmlnIGdldC1hLWNoYXJhY3RlciBsb29wICovCisJ ZWNob2YgPSAwOwkJCS8qIEFzc3VtZSB3ZSBkb24ndCBlY2hvIGJlY2F1c2UgKi8KKwljaHNyYyA9 IDA7CQkJLyogY2hhcmFjdGVyIGNhbWUgZnJvbSByZXBhcnNlIGJ1Zi4gKi8KKyNpZmRlZiBCU19E SVJTRVAKK0NNRElSUEFSU0U6CisjZW5kaWYgLyogQlNfRElSU0VQICovCisKKwljID0gKmJwOwor ICAgICAgICBpZiAoIWMpIHsJCQkvKiBJZiBubyBjaGFyIHdhaXRpbmcgaW4gcmVwYXJzZSBidWYg Ki8KKwkgICAgaWYgKChkcHgKKyNpZm5kZWYgTk9TUEwKKwkJIHx8IGVjaG9zdGFycworI2VuZGlm IC8qIE5PU1BMICovCisJCSApICYmICghcHVzaGMKKyNpZm5kZWYgTk9TUEwKKwkJCXx8IGFza2Zs YWcKKyNlbmRpZiAvKiBOT1NQTCAqLworCQkJKSkJCS8qIEdldCBmcm9tIHR0eSwgc2V0IGVjaG8g ZmxhZyAqLworCSAgICAgIGVjaG9mID0gMTsKKwkgICAgYyA9IGNtZGdldGModGltZWxpbWl0KTsJ LyogUmVhZCBhIGNvbW1hbmQgY2hhcmFjdGVyLiAqLworI2lmZGVmIERFQlVHCisJICAgIGRlYnVn KEYxMDEsImd0d29yZCBjIiwiIixjKTsKKyNlbmRpZiAvKiBERUJVRyAqLworCisJICAgIGlmICh0 aW1lbGltaXQgJiYgYyA8IC0xKSB7CS8qIFRpbWVkIG91dCAqLworCQlyZXR1cm4oLTEwKTsKKwkg ICAgfQorCisjaWZuZGVmIE5PWEZFUgorLyoKKyAgVGhlIGZvbGxvd2luZyBhbGxvd3MgcGFja2V0 IHJlY29nbml0aW9uIGluIHRoZSBjb21tYW5kIHBhcnNlci4KKyAgUHJlc2VudGx5IGl0IHdvcmtz IG9ubHkgZm9yIEtlcm1pdCBwYWNrZXRzLCBhbmQgaWYgb3VyIGN1cnJlbnQgcHJvdG9jb2wKKyAg aGFwcGVucyB0byBiZSBhbnl0aGluZyBiZXNpZGVzIEtlcm1pdCwgd2Ugc2ltcGx5IGZvcmNlIGl0 IHRvIEtlcm1pdC4KKyAgV2UgZG9uJ3QgdXNlIHRoZSBBUEMgbWVjaGFuaXNtIGhlcmUgZm9yIG1l Y2hhbmljYWwgcmVhc29ucywgYW5kIGFsc28KKyAgYmVjYXVzZSB0aGlzIHdheSwgaXQgd29ya3Mg ZXZlbiB3aXRoIG1pbmltYWxseSBjb25maWd1cmVkIGludGVyYWN0aXZlCisgIHZlcnNpb25zLiAg QWRkIFptb2RlbSBsYXRlci4uLgorKi8KKyNpZmRlZiBDS19BVVRPREwKKwkgICAgaWYgKCghbG9j YWwgJiYgY21kYWRsKQkvKiBBdXRvZG93bmxvYWQgZW5hYmxlZD8gKi8KKyNpZmRlZiBJS1NfT1BU SU9OCisJCXx8IFRFTE9QVF9TQihURUxPUFRfS0VSTUlUKS5rZXJtaXQubWVfc3RhcnQKKyNlbmRp ZiAvKiBJS1NfT1BUSU9OICovCisJCSkgeworCQlpbnQgazsKKwkJayA9IGtzdGFydCgoQ0hBUilj KTsJLyogS2VybWl0IFMgb3IgSSBwYWNrZXQ/ICovCisJCWlmIChrKSB7CisJCSAgICBpbnQga3Np Z24gPSAwOworCQkgICAgaWYgKGsgPCAwKSB7CS8qIE1pbnVzLVByb3RvY29sPyAqLworI2lmZGVm IE5PU0VSVkVSCisJCQlnb3RvIG5vc2VydmVyOwkvKiBOZWVkIHNlcnZlciBtb2RlIGZvciB0aGlz ICovCisjZWxzZQorCQkJa3NpZ24gPSAxOwkvKiBSZW1lbWJlciAqLworCQkJayA9IDAgLSBrOwkv KiBDb252ZXJ0IHRvIGFjdHVhbCBwcm90b2NvbCAqLworCQkJanVzdG9uZSA9IDE7CS8qIEZsYWcg Zm9yIHByb3RvY29sIG1vZHVsZSAqLworI2VuZGlmIC8qIE5PU0VSVkVSICovCisJCSAgICB9IGVs c2UKKwkJICAgICAganVzdG9uZSA9IDA7CisJCSAgICBrLS07CQkvKiBBZGp1c3Qga3N0YXJ0J3Mg cmV0dXJuIHZhbHVlICovCisJCSAgICBpZiAoayA9PSBQUk9UT19LKSB7CisJCQlleHRlcm4gaW50 IHByb3RvY29sLCBnX3Byb3RvOworCQkJZXh0ZXJuIENIQVIgc3N0YXRlOworCQkJZ19wcm90byA9 IHByb3RvY29sOworCQkJcHJvdG9jb2wgPSBQUk9UT19LOyAvKiBDcnVkZS4uLiAqLworCQkJc3N0 YXRlID0ga3NpZ24gPyAneCcgOiAndic7CisJCQljbWRidWZbMF0gPSBOVUw7CisJCQlyZXR1cm4o LTMpOworCQkgICAgfQorCQl9CisJICAgIH0KKyNpZmRlZiBOT1NFUlZFUgorCSAgbm9zZXJ2ZXI6 CisjZW5kaWYgLyogTk9TRVJWRVIgKi8KKyNlbmRpZiAvKiBDS19BVVRPREwgKi8KKyNlbmRpZiAv KiBOT1hGRVIgKi8KKworCSAgICBjaHNyYyA9IDE7CQkJLyogUmVtZW1iZXIgY2hhcmFjdGVyIHNv dXJjZSBpcyB0dHkuICovCisJICAgIGJya2NoYXIgPSBjOworCisjaWZkZWYgSUtTRAorICAgICAg ICAgICAgaWYgKGluc2VydmVyICYmIGMgPCAwKSB7ICAgIC8qIEVuZCBvZiBzZXNzaW9uPyAqLwor ICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsImd0d29yZCBjIDwgMCIsImV4aXRpbmciLGMpOwor ICAgICAgICAgICAgICAgIHJldHVybigtNCk7ICAgICAgICAgICAgIC8qIENsZWFudXAgYW5kIHRl cm1pbmF0ZSAqLworICAgICAgICAgICAgfQorI2VuZGlmIC8qIElLU0QgKi8KKworI2lmZGVmIE9T MgorICAgICAgICAgICBpZiAoYyA8IDApIHsJCQkvKiBFcnJvciAqLworCSAgICAgICBpZiAoYyA9 PSAtMykgewkJLyogRW1wdHkgd29yZD8gKi8KKwkJICAgaWYgKGJsb2NrbHZsID4gMCkJLyogSW4g YSBibG9jayAqLworCQkgICAgIGNvbnRpbnVlOwkJLyogc28ga2VlcCBsb29raW5nIGZvciBibG9j ayBlbmQgKi8KKwkJICAgZWxzZQorCQkgICAgIHJldHVybigtMyk7CS8qIE90aGVyd2lzZSBzYXkg d2UgZ290IG5vdGhpbmcgKi8KKwkgICAgICAgfSBlbHNlIHsJCQkvKiBOb3QgZW1wdHkgd29yZCAq LworCQkgICByZXR1cm4oLTQpOwkJLyogU28gc29tZSBraW5kIG9mIGkvbyBlcnJvciAqLworCSAg ICAgICB9CisgICAgICAgICAgIH0KKyNlbHNlCisjaWZkZWYgTUFDCisJICAgaWYgKGMgPT0gLTMp CQkJLyogRW1wdHkgd29yZC4uLiAqLworCSAgICAgaWYgKGJsb2NrbHZsID4gMCkKKwkgICAgICAg Y29udGludWU7CisJICAgICBlbHNlCisJICAgICAgIHJldHVybigtMyk7CisjZW5kaWYgLyogTUFD ICovCisjZW5kaWYgLyogT1MyICovCisJICAgaWYgKGMgPT0gRU9GKSB7CQkvKiBUaGlzIGNhbiBo YXBwZW4gaWYgc3RkaW4gbm90IHR0eS4gKi8KKyNpZmRlZiBFSU5UUgorLyoKKyAgU29tZSBvcGVy YXRpbmcgYW5kL29yIEMgcnVudGltZSBzeXN0ZW1zIHJldHVybiBFSU5UUiBmb3Igbm8gZ29vZCBy ZWFzb24sCisgIHdoZW4gdGhlIGVuZCBvZiB0aGUgc3RhbmRhcmQgaW5wdXQgImZpbGUiIGlzIGVu Y291bnRlcmVkLiAgSW4gY2FzZXMgbGlrZQorICB0aGlzLCB3ZSBnZXQgaW50byBhbiBpbmZpbml0 ZSBsb29wOyBoZW5jZSB0aGUgZWludHIgY291bnRlciwgd2hpY2ggaXMgcmVzZXQKKyAgdG8gMCB1 cG9uIGVhY2ggY2FsbCB0byB0aGlzIHJvdXRpbmUuCisqLworCQlkZWJ1ZyhGMTAxLCJndHdvcmQg RU9GIiwiIixlcnJubyk7CisJCWlmIChlcnJubyA9PSBFSU5UUiAmJiArK2VpbnRyIDwgNCkgLyog V2hlbiBiZydkIHByb2Nlc3MgaXMgKi8KKwkJICBjb250aW51ZTsJCS8qIGZnJ2QgYWdhaW4uICov CisjZW5kaWYgLyogRUlOVFIgKi8KKwkJcmV0dXJuKC00KTsKKwkgICAgfQorCSAgICBjICY9IGNt ZG1zazsJCS8qIFN0cmlwIGFueSBwYXJpdHkgYml0ICovCisJfQkJCQkvKiBpZiBkZXNpcmVkLiAq LworCisvKiBOb3cgd2UgaGF2ZSB0aGUgbmV4dCBjaGFyYWN0ZXIgKi8KKworCWlzZXNjID0gKGMg PT0gRVNDKTsJCS8qIEEgcmVhbCBFU0M/ICovCisKKwlpZiAoIWZpcnN0bmIgJiYgYyA+IFNQKSB7 CS8qIEZpcnN0IG5vbmJsYW5rICovCisJICAgIGZpcnN0bmIgPSBjOworCSAgICBpZiAoYyA9PSAn IicpCQkvKiBTdGFydHMgd2l0aCBkb3VibGVxdW90ZSAqLworCSAgICAgIGRxID0gMTsKKwl9CisJ aWYgKGMgPT0gJyInKQkJCS8qIENvdW50IGRvdWJsZXF1b3RlcyAqLworCSAgZHFuKys7CisKKwlp ZiAocXVvdGUgJiYgKGMgPT0gQ1IgfHwgYyA9PSBMRikpIHsgLyogRW50ZXIga2V5IGZvbGxvd2lu ZyBxdW90ZSAqLworCSAgICAqYnArKyA9IENNRFE7CQkvKiBEb3VibGUgaXQgKi8KKwkgICAgKmJw ID0gTlVMOworCSAgICBxdW90ZSA9IDA7CisJfQorICAgICAgICBpZiAocXVvdGUgPT0gMCkgewkJ LyogSWYgdGhpcyBpcyBub3QgYSBxdW90ZWQgY2hhcmFjdGVyICovCisJICAgIHN3aXRjaCAoYykg eworCSAgICAgIGNhc2UgQ01EUToJCS8qIEdvdCB0aGUgcXVvdGUgY2hhcmFjdGVyIGl0c2VsZiAq LworCQlpZiAoIWNvbW1lbnQgJiYgcXVvdGluZykKKwkJICBxdW90ZSA9IDE7CQkvKiBGbGFnIGl0 IGlmIG5vdCBpbiBhIGNvbW1lbnQgKi8KKwkJYnJlYWs7CisJICAgICAgY2FzZSBGRjoJCQkvKiBG b3JtZmVlZC4gKi8KKyAgICAgICAgICAgICAgICBjID0gTkw7ICAgICAgICAgICAgICAgICAvKiBS ZXBsYWNlIHdpdGggbmV3bGluZSAqLworCQljbWRjbHJzY24oKTsJCS8qIENsZWFyIHRoZSBzY3Jl ZW4gKi8KKwkJYnJlYWs7CisJICAgICAgY2FzZSBIVDoJCQkvKiBIb3Jpem9udGFsIFRhYiAqLwor CQlpZiAoY29tbWVudCkJCS8qIElmIGluIGNvbW1lbnQsICovCisJCSAgYyA9IFNQOwkJLyogc3Vi c3RpdHV0ZSBzcGFjZSAqLworCQllbHNlCQkJLyogb3RoZXJ3aXNlICovCisJCSAgYyA9IEVTQzsJ CS8qIHN1YnN0aXR1dGUgRVNDIChmb3IgY29tcGxldGlvbikgKi8KKwkJYnJlYWs7CisJICAgICAg Y2FzZSAnOyc6CQkJLyogVHJhaWxpbmcgY29tbWVudCAqLworCSAgICAgIGNhc2UgJyMnOgorCQlp ZiAoISAoYnJrICYgNCkgKSB7CS8qIElmIG5vdCBrZWVwaW5nIGNvbW1lbnRzICovCisJCSAgICBp ZiAoaW53b3JkID09IDAgJiYgcXVvdGluZykgeyAvKiBJZiBub3QgaW4gYSB3b3JkICovCisJCQlj b21tZW50ID0gMTsJLyogc3RhcnQgYSBjb21tZW50LiAqLworCQkJY3AgPSBicDsJLyogcmVtZW1i ZXIgd2hlcmUgaXQgc3RhcnRzLiAqLworCQkgICAgfQorCQl9CisJCWJyZWFrOworCSAgICB9CisJ ICAgIGlmICgha3N0YXJ0YWN0aXZlICYmCS8qIE5vdCBpbiBwb3NzaWJsZSBLZXJtaXQgcGFja2V0 ICovCisJCSFjb21tZW50ICYmIGMgPT0gU1ApIHsJLyogU3BhY2Ugbm90IGluIGNvbW1lbnQgKi8K KyAgICAgICAgICAgICAgICAqYnArKyA9IChjaGFyKSBjOwkvKiBkZXBvc2l0IGluIGJ1ZmZlciBp ZiBub3QgYWxyZWFkeSAqLworCQkvKiBkZWJ1ZyhGMTAxLCJndHdvcmQgZWNob2YgMiIsIiIsZWNo b2YpOyAqLworI2lmZGVmIEJFQk9YCisgICAgICAgICAgICAgICAgaWYgKGVjaG9mKSB7CisJCSAg ICBjbWRlY2hvKChjaGFyKSBjLCAwKTsgLyogRWNobyB3aGF0IHdhcyB0eXBlZC4gKi8KKyAgICAg ICAgICAgICAgICAgICAgZmZsdXNoKHN0ZG91dCk7CisgICAgICAgICAgICAgICAgICAgIGZmbHVz aChzdGRlcnIpOworICAgICAgICAgICAgICAgIH0KKyNlbHNlCisgICAgICAgICAgICAgICAgaWYg KGVjaG9mKSB7CisJCSAgICBjbWRlY2hvKChjaGFyKSBjLCAwKTsgLyogRWNobyB3aGF0IHdhcyB0 eXBlZC4gKi8KKwkJICAgIGlmICh0aW1lbGltaXQpCisJCSAgICAgIGZmbHVzaChzdGRvdXQpOwor CQl9CisjZW5kaWYgLyogQkVCT1ggKi8KKyAgICAgICAgICAgICAgICBpZiAoaW53b3JkID09IDAp IHsgICAgICAvKiBJZiBsZWFkaW5nLCBnb2JibGUgaXQuICovCisgICAgICAgICAgICAgICAgICAg IHBwKys7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0g ZWxzZSB7ICAgICAgICAgICAgICAgIC8qIElmIHRlcm1pbmF0aW5nLCByZXR1cm4uICovCisJCSAg ICBpZiAoKCFkcSAmJiAoKCpwcCAhPSBsYnJhY2UpIHx8IChicmFjZWx2bCA9PSAwKSkpIHx8CisJ CQkoZHEgJiYgZHFuID4gMSAmJiAqKGJwLTIpID09ICciJykpIHsKKwkJCW5wID0gYnA7CisJCQlj bWJwdHIgPSBucDsKKwkJCWlmIChzZXRhdG0ocHAsMCkgPCAwKSB7CisJCQkgICAgcHJpbnRmKCI/ RmllbGQgdG9vIGxvbmcgZXJyb3IgMVxuIik7CisJCQkgICAgZGVidWcoRjExMSwiZ3R3b3JkIHRv byBsb25nICMxIixwcCxzdHJsZW4ocHApKTsKKwkJCSAgICByZXR1cm4oLTkpOworCQkJfQorCQkJ YnJrY2hhciA9IGM7CisJCQlpbndvcmQgPSBjbWZsZ3MgPSAwOworCQkJcmV0dXJuKDApOworCQkg ICAgfQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoYyA9PSBsYnJhY2UpIHsKKwkJYnJhY2Vsdmwr KzsKKwkJLyogZGVidWcoRjEwMSwiZ3R3b3JkIGJyYWNlbHZsKysiLCIiLGJyYWNlbHZsKTsgKi8K KwkgICAgfQorICAgICAgICAgICAgaWYgKGMgPT0gcmJyYWNlICYmIGJyYWNlbHZsID4gMCkgewor ICAgICAgICAgICAgICAgIGJyYWNlbHZsLS07CisJCS8qIGRlYnVnKEYxMDEsImd0d29yZCBicmFj ZWx2bC0tIiwiIixicmFjZWx2bCk7ICovCisgICAgICAgICAgICAgICAgaWYgKGxpbmViZWdpbikK KwkJICBibG9ja2x2bC0tOworICAgICAgICAgICAgfQorCSAgICBpZiAoKGMgPT0gJz0nIHx8IGMg PT0gJzonKSAmJgorCQkvKiBeXl4gKi8KKwkJIWtzdGFydGFjdGl2ZSAmJiAhY29tbWVudCAmJiBi cmsgLyogJiYgKGZpcnN0bmIgPT0gJy8nKSAqLworCQkpIHsKKyAgICAgICAgICAgICAgICAqYnAr KyA9IChjaGFyKSBjOwkvKiBTd2l0Y2ggYXJndW1lbnQgc2VwYXJhdG9yICovCisJCS8qIGRlYnVn KEYxMTEsImd0d29yZCBzd2l0Y2ggYXJnc2VwIixjbWRidWYsYnJrKTsgKi8KKyNpZmRlZiBCRUJP WAorICAgICAgICAgICAgICAgIGlmIChlY2hvZikgeworCQkgICAgY21kZWNobygoY2hhcikgYywg MCk7IC8qIEVjaG8gd2hhdCB3YXMgdHlwZWQuICovCisgICAgICAgICAgICAgICAgICAgIGZmbHVz aChzdGRvdXQpOworICAgICAgICAgICAgICAgICAgICBmZmx1c2goc3RkZXJyKTsKKyAgICAgICAg ICAgICAgICB9CisjZWxzZQorCQlpZiAoZWNob2YpIHsKKwkJICAgIGNtZGVjaG8oKGNoYXIpIGMs IDApOyAvKiBFY2hvIHdoYXQgd2FzIHR5cGVkLiAqLworCQkgICAgaWYgKHRpbWVsaW1pdCkKKwkJ ICAgICAgZmZsdXNoKHN0ZG91dCk7CisJCX0KKyNlbmRpZiAvKiBCRUJPWCAqLworCQlpZiAoKCpw cCAhPSBsYnJhY2UpIHx8IChicmFjZWx2bCA9PSAwKSkgeworCQkgICAgbnAgPSBicDsKKwkJICAg IGNtYnB0ciA9IG5wOworCQkgICAgaWYgKHNldGF0bShwcCwyKSA8IDApIHsgLyogXl5eICovCisJ CQlwcmludGYoIj9GaWVsZCB0b28gbG9uZyBlcnJvciAxXG4iKTsKKwkJCWRlYnVnKEYxMTEsImd0 d29yZCB0b28gbG9uZyAjMSIscHAsc3RybGVuKHBwKSk7CisJCQlyZXR1cm4oLTkpOworCQkgICAg fQorCQkgICAgaW53b3JkID0gY21mbGdzID0gMDsKKwkJICAgIGJya2NoYXIgPSBjOworCQkgICAg cmV0dXJuKDQpOworCQl9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoYyA9PSBMRiB8 fCBjID09IENSKSB7CS8qIENSIG9yIExGLiAqLworCQlpZiAoZWNob2YpIHsKKyAgICAgICAgICAg ICAgICAgICAgY21kbmV3bCgoY2hhciljKTsJLyogZWNobyBpdC4gKi8KKyNpZmRlZiBCRUJPWAor ICAgICAgICAgICAgICAgICAgICBmZmx1c2goc3Rkb3V0KTsKKyAgICAgICAgICAgICAgICAgICAg ZmZsdXNoKHN0ZGVycik7CisjZW5kaWYgLyogQkVCT1ggKi8KKyAgICAgICAgICAgICAgICB9CisJ CXsKKwkJICAgIC8qIFRyaW0gdHJhaWxpbmcgY29tbWVudCBhbmQgd2hpdGVzcGFjZSAqLworCQkg ICAgY2hhciAqcXE7CisJCSAgICBpZiAoY29tbWVudCkgewkvKiBFcmFzZSBjb21tZW50ICovCisJ CQl3aGlsZSAoYnAgPj0gY3ApIC8qIEJhY2sgdG8gY29tbWVudCBwb2ludGVyICovCisJCQkgICpi cC0tID0gTlVMOworCQkJYnArKzsKKwkJCXBwID0gYnA7CS8qIEFkanVzdCBvdGhlciBwb2ludGVy cyAqLworCQkJaW53b3JkID0gMDsJLyogYW5kIGZsYWdzICovCisJCQljb21tZW50ID0gMDsKKwkJ CWNwID0gTlVMTDsKKwkJICAgIH0KKwkJICAgIHFxID0gaW53b3JkID8gcHAgOiAoY2hhciAqKWNt ZGJ1ZjsKKwkJICAgIC8qIEVyYXNlIHRyYWlsaW5nIHdoaXRlc3BhY2UgKi8KKwkJICAgIHdoaWxl IChicCA+IHFxICYmICgqKGJwLTEpID09IFNQIHx8ICooYnAtMSkgPT0gSFQpKSB7CisJCQlicC0t OworCQkJLyogZGVidWcoRjAwMCwiZXJhc2luZyIsIiIsKmJwKTsgKi8KKwkJCSpicCA9IE5VTDsK KwkJICAgIH0KKwkJICAgIGxhc3RjaGFyID0gKGJwID4gcXEpID8gKihicC0xKSA6IE5VTDsKKwkJ ICAgIHByZXZjaGFyID0gKGJwID4gcXErMSkgPyAqKGJwLTIpIDogTlVMOworCQl9CisJCWlmIChs aW5lYmVnaW4gJiYgYmxvY2tsdmwgPiAwKSAvKiBCbGFuayBsaW5lIGluIHsuLi59IGJsb2NrICov CisJCSAgY29udGludWU7CisKKwkJbGluZWJlZ2luID0gMTsJCS8qIEF0IGJlZ2lubmluZyBvZiBu ZXh0IGxpbmUgKi8KKwkJaXNjb250ZCA9IHByZXZjaGFyICE9IENNRFEgJiYKKwkJICAobGFzdGNo YXIgPT0gJy0nIHx8IGxhc3RjaGFyID09IGxicmFjZSk7CisJCWRlYnVnKEYxMDEsImd0d29yZCBp c2NvbnRkIiwiIixpc2NvbnRkKTsKKworICAgICAgICAgICAgICAgIGlmIChpc2NvbnRkKSB7CQkv KiBJZiBsaW5lIGlzIGNvbnRpbnVlZC4uLiAqLworICAgICAgICAgICAgICAgICAgICBpZiAoY2hz cmMpIHsJLyogSWYgcmVhZGluZyBmcm9tIHR0eSwgKi8KKyAgICAgICAgICAgICAgICAgICAgICAg IGlmICgqKGJwLTEpID09IGxicmFjZSkgeyAvKiBDaGVjayBmb3IgImJlZ2luIGJsb2NrIiAqLwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICpicCsrID0gU1A7CS8qIEluc2VydCBhIHNwYWNl IGZvciBuZWF0bmVzcyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrbHZsKys7 CS8qIENvdW50IGJsb2NrIG5lc3RpbmcgbGV2ZWwgKi8KKyAgICAgICAgICAgICAgICAgICAgICAg IH0gZWxzZSB7CS8qIE9yIGh5cGhlbiAqLworCQkJICAgIGJwLS07CS8qIE92ZXJ3cml0ZSB0aGUg aHlwaGVuICovCisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg ICAgICAqYnAgPSBOVUw7CS8qIGVyYXNlIHRoZSBkYXNoLCAqLworICAgICAgICAgICAgICAgICAg ICAgICAgY29udGludWU7CS8qIGFuZCBnbyBiYWNrIGZvciBuZXh0IGNoYXIgbm93LiAqLworICAg ICAgICAgICAgICAgICAgICB9CisJCX0gZWxzZSBpZiAoYmxvY2tsdmwgPiAwKSB7IC8qIE5vIGNv bnRpbnVhdGlvbiBjaGFyYWN0ZXIgKi8KKwkJICAgIGlmIChjaHNyYykgewkvKiBCdXQgd2UncmUg aW4gYSAiYmxvY2siICovCisJCQkqYnArKyA9ICcsJzsJLyogQWRkIGNvbW1hICovCisJCQkqYnAg PSBOVUw7CisJCQljb250aW51ZTsKKwkJICAgIH0KKwkJfSBlbHNlIHsJCS8qIE5vIGNvbnRpbnVh dGlvbiwgZW5kIG9mIGNvbW1hbmQuICovCisJCSAgICAqYnAgPSBOVUw7CQkvKiBUZXJtaW5hdGUg dGhlIGNvbW1hbmQgc3RyaW5nLiAqLworCQkgICAgaWYgKGNvbW1lbnQpIHsJLyogSWYgd2UncmUg aW4gYSBjb21tZW50LCAqLworCQkJY29tbWVudCA9IDA7CS8qIFNheSB3ZSdyZSBub3QgYW55IG1v cmUsICovCisJCQkqY3AgPSBOVUw7CS8qIGN1dCBpdCBvZmYuICovCisJCSAgICB9CisJCSAgICBu cCA9IGJwOwkJLyogV2hlcmUgdG8gc3RhcnQgbmV4dCBmaWVsZC4gKi8KKwkJICAgIGNtYnB0ciA9 IG5wOworCQkgICAgaWYgKHNldGF0bShwcCwwKSA8IDApIHsgLyogQ29weSBmaWVsZCB0byBhdG9t IGJ1ZmZlciAqLworCQkJZGVidWcoRjExMSwiZ3R3b3JkIHRvbyBsb25nICMyIixwcCxzdHJsZW4o cHApKTsKKwkJCXByaW50ZigiP0ZpZWxkIHRvbyBsb25nIGVycm9yIDJcbiIpOworCQkJcmV0dXJu KC05KTsKKwkJICAgIH0KKwkJICAgIGlud29yZCA9IDA7CQkvKiBOb3QgaW4gYSB3b3JkIGFueSBt b3JlLiAqLworCQkgICAgY3JmbGFnID0gMTsKKyAgICAgICAgICAgICAgICAgICAgLyogZGVidWco RjExMCwiZ3R3b3JkIiwiY3JmbGFnIGlzIHNldCIsMCk7ICovCisjaWZkZWYgQ0tfUkVDQUxMCisJ CSAgICBjdXJyZW50ID0gcmxhc3Q7CisjZW5kaWYgLyogQ0tfUkVDQUxMICovCisJCSAgICBjbWZs Z3MgPSAxOworCQkgICAgaWYgKCF4Y21kc3JjCisjaWZkZWYgQ0tfUkVDQUxMCisJCQl8fCBmb3Jj ZV9hZGQKKyNlbmRpZiAvKiBDS19SRUNBTEwgKi8KKwkJCSkKKyAgCQkgICAgICBhZGRjbWQoY21k YnVmKTsKKwkJICAgIHJldHVybihjbWZsZ3MpOworCQl9CisgICAgICAgICAgICB9CisvKgorICBU aGlzIHNlY3Rpb24gaGFuZGxlcyBpbnRlcmFjdGl2ZSBoZWxwLCBjb21wbGV0aW9uLCBlZGl0aW5n LCBhbmQgaGlzdG9yeS4KKyAgUmVhcnJhbmdlZCBhcyBhIHN3aXRjaCBzdGF0ZW1lbnQgZXhlY3V0 ZWQgb25seSBpZiB3ZSdyZSBhdCB0b3AgbGV2ZWwgc2luY2UKKyAgdGhlcmUgaXMgbm8gbmVlZCBm b3IgYW55IG9mIHRoaXMgd2l0aGluIGNvbW1hbmQgZmlsZXMgYW5kIG1hY3JvczogQXVnIDIwMDAu CisgIEp1biAyMDAxOiBFdmVuIGlmIGF0IHRvcCBsZXZlbCwgc2tpcCB0aGlzIGlmIHRoZSBjaGFy YWN0ZXIgd2FzIGZldGNoZWQgZnJvbQorICB0aGUgcmVwYXJzZSBvciByZWNhbGwgYnVmZmVyLCBv ciBpZiBzdGRpbiBpcyByZWRpcmVjdGVkLgorKi8KKwkgICAgaWYgKCh4Y21kc3JjID09IDAJCS8q IE9ubHkgYXQgdG9wIGxldmVsICovCisjaWZuZGVmIE5PU1BMCisJCXx8IGFza2ZsYWcJCS8qIG9y IHVzZXIgaXMgdHlwaW5nIEFTSyByZXNwb25zZSAqLworI2VuZGlmIC8qIE5PU1BMICovCisJCSAp ICYmIGNoc3JjICE9IDAgJiYgcmVhbHR0eSkgeyAvKiBmcm9tIHRoZSByZWFsIGtleWJvYXJkICov CisKKy8qIFVzZSBBTlNJIC8gVlQxMDAgdXAgYW5kIGRvd24gYXJyb3cga2V5cyBmb3IgY29tbWFu ZCByZWNhbGwuICAqLworCisJCWlmIChpc2VzYyAmJiAoCisjaWZkZWYgSUtTRAorCQkgICAgaW5z ZXJ2ZXIKKyNlbHNlCisJCSAgICAwCisjZW5kaWYgLyogSUtTRCAqLworI2lmZGVmIFVTRV9BUlJP V0tFWVMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IDEKKyNlbmRpZiAvKiBVU0Vf QVJST1dLRVlTICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAg ICAgICAgICAgICkgewkJLyogQSByZWFsIEVTQyB3YXMgdHlwZWQgKi8KKwkJICAgIGludCB4Owor CQkgICAgbXNsZWVwKDIwMCk7CS8qIFdhaXQgMS81IHNlYyAqLworCQkgICAgeCA9IGNtZGNvbmNo aygpOwkvKiBXYXMgaXQgZm9sbG93ZWQgYnkgYW55dGhpbmc/ICovCisJCSAgICBkZWJ1ZyhGMTAx LCJBcnJvd2tleSBFU0MgY21kY29uY2hrIiwiIix4KTsKKworCQkgICAgaWYgKHggPiAxKSB7CS8q IElmIGZvbGxvd2VkIGJ5IGF0IGxlYXN0IDIgY2hhcnMgKi8KKwkJCWludCBjMjsKKwkJCWMyID0g Y21kZ2V0YygwKTsgLyogR2V0IHRoZSBmaXJzdCBvbmUgKi8KKwkJCWRlYnVnKEYxMDEsIkFycm93 a2V5IEVTQyBjMiIsIiIsYzIpOworCisJCQlpZiAoYzIgIT0gJ1snICYmIGMyICE9ICdPJykgeyAv KiBJZiBub3QgWyBvciBPICovCisJCQkgICAgcHVzaGMgPSBjMjsJLyogUHVzaCBpdCBhbmQgdGFr ZSB0aGUgRVNDIHNvbG8gKi8KKwkJCX0gZWxzZSB7CisJCQkgICAgYzIgPSBjbWRnZXRjKDApOyAv KiBHZXQgdGhlIHNlY29uZCBvbmUgKi8KKwkJCSAgICBkZWJ1ZyhGMTAxLCJBcnJvd2tleSBFU0Mg YzMiLCIiLGMyKTsKKwkJCSAgICBzd2l0Y2ggKGMyKSB7CisjaWZuZGVmIE5PUkVDQUxMCisJCQkg ICAgICBjYXNlICdBJzoJLyogVXAgKi8KKwkJCQljID0gQkVMOworCQkJCWMgPSBDX1VQOworCQkJ CWJyZWFrOworCQkJICAgICAgY2FzZSAnQic6CS8qIERvd24gKi8KKwkJCQljID0gQkVMOworCQkJ CWMgPSBDX0ROOworCQkJCWJyZWFrOworCQkJICAgICAgY2FzZSAnQyc6CS8qIFJpZ2h0ICovCisJ CQkgICAgICBjYXNlICdEJzoJLyogTGVmdCAqLworI2Vsc2UKKwkJCSAgICAgIGRlZmF1bHQ6Cisj ZW5kaWYgLyogTk9SRUNBTEwgKi8KKwkJCQljID0gQkVMOyAvKiBXZSBkb24ndCB1c2UgdGhlc2Ug eWV0ICovCisJCQkJYnJlYWs7CisJCQkgICAgfQorCQkJfQorCQkgICAgfQorCQl9CisKKwkJc3dp dGNoIChjKSB7CisJCSAgY2FzZSAnPyc6CQkvKiA/LUhlbHAgKi8KKyNpZm5kZWYgTk9TUEwKKwkJ ICAgIGlmIChhc2tmbGFnKQkvKiBObyBoZWxwIGluIEFTSyByZXNwb25zZSAqLworCQkgICAgICBi cmVhazsKKyNlbmRpZiAvKiBOT1NQTCAqLworCQkgICAgaWYgKHF1b3RpbmcKKwkJCSYmICFrc3Rh cnRhY3RpdmUKKwkJCSYmICFjb21tZW50CisJCQkpIHsKKwkJCWNtZGVjaG8oKGNoYXIpIGMsIDAp OworCQkJKmJwID0gTlVMOworCQkJaWYgKHNldGF0bShwcCwwKSA8IDApIHsKKwkJCSAgICBkZWJ1 ZyhGMTExLCJndHdvcmQgdG9vIGxvbmcgPyIscHAsc3RybGVuKHBwKSk7CisJCQkgICAgcHJpbnRm KCI/VG9vIGxvbmdcbiIpOworCQkJICAgIHJldHVybigtOSk7CisJCQl9CisJCQlxbWZsYWcgPSAx OworCQkJcmV0dXJuKGNtZmxncyA9IDMpOworCQkgICAgfQorCisJCSAgY2FzZSBFU0M6CQkvKiBF c2Mgb3IgVGFiIGNvbXBsZXRpb24gKi8KKwkJICAgIGlmICghY29tbWVudCkgeworCQkJKmJwID0g TlVMOworCQkJaWYgKHNldGF0bShwcCwwKSA8IDApIHsKKwkJCSAgICBkZWJ1ZyhGMTExLCJndHdv cmQgdG9vIGxvbmcgRXNjIixwcCxzdHJsZW4ocHApKTsKKwkJCSAgICBwcmludGYoIj9Ub28gbG9u Z1xuIik7CisJCQkgICAgcmV0dXJuKC05KTsKKwkJCX0KKwkJCWVzZmxhZyA9IDE7CisJCQlyZXR1 cm4oY21mbGdzID0gMik7CisJCSAgICB9IGVsc2UgeworCQkJYmxlZXAoQlBfV0FSTik7CisJCQlj b250aW51ZTsKKwkJICAgIH0KKworCQkgIGNhc2UgQlM6CQkvKiBDaGFyYWN0ZXIgZGVsZXRpb24g Ki8KKwkJICBjYXNlIFJVQjoKKwkJICAgIGlmIChicCA+IGNtZGJ1ZikgewkvKiBJZiBzdGlsbCBp biBidWZmZXIuLi4gKi8KKwkJCWNtZGNoYXJkZWwoKTsJLyogZXJhc2UgaXQuICovCisJCQlicC0t OwkJLyogcG9pbnQgYmVoaW5kIGl0LCAqLworCQkJaWYgKCpicCA9PSBsYnJhY2UpIGJyYWNlbHZs LS07IC8qIEFkanVzdCBicmFjZSBjb3VudCAqLworCQkJaWYgKCpicCA9PSByYnJhY2UpIGJyYWNl bHZsKys7CisJCQlpZiAoKCpicCA9PSBTUCkgJiYgLyogRmxhZyBpZiBjdXJyZW50IGZpZWxkIGdv bmUgKi8KKwkJCSAgICAoKnBwICE9IGxicmFjZSB8fCBicmFjZWx2bCA9PSAwKSkKKwkJCSAgaW53 b3JkID0gMDsKKwkJCSpicCA9IE5VTDsJLyogRXJhc2UgY2hhcmFjdGVyIGZyb20gYnVmZmVyLiAq LworCQkgICAgfSBlbHNlIHsJCS8qIE90aGVyd2lzZSwgKi8KKwkJCWJsZWVwKEJQX1dBUk4pOwor CQkJY21yZXMoKTsJLyogYW5kIHN0YXJ0IHBhcnNpbmcgYSBuZXcgY29tbWFuZC4gKi8KKwkJCSpi cCA9ICphdG1idWYgPSBOVUw7CisJCSAgICB9CisJCSAgICBpZiAocHAgPCBicCkKKwkJICAgICAg Y29udGludWU7CisJCSAgICBlbHNlCisJCSAgICAgIHJldHVybihjbWZsZ3MgPSAtMSk7CisKKwkJ ICBjYXNlIExERUw6CQkvKiBeVSwgbGluZSBkZWxldGlvbiAqLworCQkgICAgd2hpbGUgKChicC0t KSA+IGNtZGJ1ZikgeworCQkJY21kY2hhcmRlbCgpOworCQkJKmJwID0gTlVMOworCQkgICAgfQor CQkgICAgY21yZXMoKTsJCS8qIFJlc3RhcnQgdGhlIGNvbW1hbmQuICovCisJCSAgICAqYnAgPSAq YXRtYnVmID0gTlVMOworCQkgICAgaW53b3JkID0gMDsKKwkJICAgIHJldHVybihjbWZsZ3MgPSAt MSk7CisKKwkJICBjYXNlIFdERUw6CQkvKiBeVywgd29yZCBkZWxldGlvbiAqLworCQkgICAgaWYg KGJwIDw9IGNtZGJ1ZikgewkvKiBCZWVwIGlmIG5vdGhpbmcgdG8gZGVsZXRlICovCisJCQlibGVl cChCUF9XQVJOKTsKKwkJCWNtcmVzKCk7CisJCQkqYnAgPSAqYXRtYnVmID0gTlVMOworCQkJcmV0 dXJuKGNtZmxncyA9IC0xKTsKKwkJICAgIH0KKwkJICAgIGJwLS07CisJCSAgICAvKiBCYWNrIHVw IG92ZXIgYW55IHRyYWlsaW5nIG5vbmFscGhhbnVtcyAqLworCQkgICAgLyogVGhpcyBpcyBkZXBl bmRlbnQgb24gQVNDSUkgY29sbGF0aW5nIHNlcXVlbmNlICovCisJCSAgICAvKiBidXQgaXNhbHBo YW51bSgpIGlzIG5vdCBhdmFpbGFibGUgZXZlcnl3aGVyZS4gKi8KKwkJICAgIGZvciAoIDsKKwkJ CSAoYnAgPj0gY21kYnVmKSAmJgorCQkJICgoKmJwIDwgJzAnKSB8fAorCQkJICgoKmJwID4gJzkn KSAmJiAoKmJwIDwgJ0AnKSkgfHwKKwkJCSAoKCpicCA+ICdaJykgJiYgKCpicCA8ICdhJykpIHx8 CisJCQkgKCpicCA+ICd6JykpOworCQkJIGJwLS0KKwkJCSApIHsKKwkJCWNtZGNoYXJkZWwoKTsK KwkJCSpicCA9IE5VTDsKKwkJICAgIH0KKwkJICAgIC8qIE5vdyBkZWxldGUgYmFjayB0byByaWdo dG1vc3QgcmVtYWluaW5nIG5vbmFscGhhbnVtICovCisJCSAgICBmb3IgKCA7IChicCA+PSBjbWRi dWYpICYmICgqYnApIDsgYnAtLSkgeworCQkJaWYgKCgqYnAgPCAnMCcpIHx8CisJCQkgICAgKCpi cCA+ICc5JyAmJiAqYnAgPCAnQCcpIHx8CisJCQkgICAgKCpicCA+ICdaJyAmJiAqYnAgPCAnYScp IHx8CisJCQkgICAgKCpicCA+ICd6JykpCisJCQkgIGJyZWFrOworCQkJY21kY2hhcmRlbCgpOwor CQkJKmJwID0gTlVMOworCQkgICAgfQorCQkgICAgYnArKzsKKwkJICAgIGlud29yZCA9IDA7CisJ CSAgICByZXR1cm4oY21mbGdzID0gLTEpOworCisJCSAgY2FzZSBSRElTOiB7CQkvKiBeUiwgcmVk aXNwbGF5ICovCisJCSAgICAgIGNoYXIgKmNweDsgY2hhciBjeDsKKwkJICAgICAgKmJwID0gTlVM OworCQkgICAgICBwcmludGYoIlxuJXMiLGNtcHJvbSk7CisJCSAgICAgIGNweCA9IGNtZGJ1ZjsK KwkJICAgICAgd2hpbGUgKChjeCA9ICpjcHgrKykpIHsKKwkJCSAgY21kZWNobyhjeCwwKTsKKwkJ ICAgICAgfQorCQkgICAgICBmZmx1c2goc3Rkb3V0KTsKKwkJICAgICAgY29udGludWU7CisJCSAg fQorI2lmbmRlZiBOT0xBU1RGSUxFCisJCSAgY2FzZSBWVDoKKwkJICAgIGlmIChsYXN0ZmlsZSkg eworCQkJcHJpbnRmKCIlcyAiLGxhc3RmaWxlKTsKKyNpZmRlZiBHRU1ET1MKKwkJCWZmbHVzaChz dGRvdXQpOworI2VuZGlmIC8qIEdFTURPUyAqLworCQkJaW53b3JkID0gY21mbGdzID0gMDsKKwkJ CWFkZGJ1ZihsYXN0ZmlsZSk7CS8qIFN1cHBseSBkZWZhdWx0LiAqLworCQkJaWYgKHNldGF0bShs YXN0ZmlsZSwwKSA8IDApIHsKKwkJCSAgICBwcmludGYoIkxhc3QgbmFtZSB0b28gbG9uZ1xuIik7 CisJCQkgICAgaWYgKG5wKSBmcmVlKG5wKTsKKwkJCSAgICByZXR1cm4oLTkpOworCQkJfQorCQkg ICAgfSBlbHNlIHsJCS8qIE5vIGRlZmF1bHQgKi8KKwkJCWJsZWVwKEJQX1dBUk4pOworCQkgICAg fQorCQkgICAgcmV0dXJuKDApOworI2VuZGlmCS8qIE5PTEFTVEZJTEUgKi8KKwkJfQorCisjaWZk ZWYgQ0tfUkVDQUxMCisJCWlmIChvbl9yZWNhbGwgJiYJLyogUmVhZGluZyBjb21tYW5kcyBmcm9t IGtleWJvYXJkPyAqLworCQkgICAgKGNtX3JlY2FsbCA+IDApICYmCS8qIFNhdmluZyBjb21tYW5k cz8gKi8KKwkJICAgIChjID09IENfVVAgfHwgYyA9PSBDX1VQMikpIHsgLyogR28gdXAgb25lICov CisJCSAgICBpZiAobGFzdF9yZWNhbGwgPT0gMiAmJiBjdXJyZW50ID4gMCkKKwkJICAgICAgY3Vy cmVudC0tOworCQkgICAgaWYgKGN1cnJlbnQgPCAwKSB7CS8qIE5vd2hlcmUgdG8gZ28sICovCisJ CQlibGVlcChCUF9XQVJOKTsKKwkJCWNvbnRpbnVlOworCQkgICAgfQorCQkgICAgaWYgKHJlY2Fs bFtjdXJyZW50XSkgeyAvKiBXZSBoYXZlIGEgcHJldmlvdXMgY29tbWFuZCAqLworCQkJd2hpbGUg KChicC0tKSA+IGNtZGJ1ZikgeyAvKiBFcmFzZSBjdXJyZW50IGxpbmUgKi8KKwkJCSAgICBjbWRj aGFyZGVsKCk7CisJCQkgICAgKmJwID0gTlVMOworCQkJfQorCQkJY2tzdHJuY3B5KGNtZGJ1Zixy ZWNhbGxbY3VycmVudF0sQ01EQkwpOworI2lmZGVmIE9TSworCQkJZmZsdXNoKHN0ZG91dCk7CisJ CQl3cml0ZShmaWxlbm8oc3Rkb3V0KSwgIlxyIiwgMSk7CisJCQlwcmludGYoIiVzJXMiLGNtcHJv bSxjbWRidWYpOworI2Vsc2UKKwkJCXByaW50ZigiXHIlcyVzIixjbXByb20sY21kYnVmKTsKKyNl bmRpZiAvKiBPU0sgKi8KKwkJCWN1cnJlbnQtLTsKKwkJICAgIH0KKwkJICAgIGxhc3RfcmVjYWxs ID0gMTsKKwkJICAgIHJldHVybihjbWZsZ3MgPSAtMSk7IC8qIEZvcmNlIGEgcmVwYXJzZSAqLwor CQl9CisJCWlmIChvbl9yZWNhbGwgJiYJLyogUmVhZGluZyBjb21tYW5kcyBmcm9tIGtleWJvYXJk PyAqLworCQkgICAgKGNtX3JlY2FsbCA+IDApICYmCS8qIFNhdmluZyBjb21tYW5kcz8gKi8KKwkJ ICAgIChjID09IENfRE4pKSB7CS8qIERvd24gb25lICovCisJCSAgICBpbnQgeCA9IDE7CisJCSAg ICBpZiAobGFzdF9yZWNhbGwgPT0gMSkKKwkJICAgICAgeCsrOworCQkgICAgaWYgKGN1cnJlbnQg KyB4ID4gcmxhc3QpIHsgLyogQWxyZWFkeSBhdCBib3R0b20sIGJlZXAgKi8KKwkJCWJsZWVwKEJQ X1dBUk4pOworCQkJY29udGludWU7CisJCSAgICB9CisJCSAgICBjdXJyZW50ICs9IHg7CS8qIE9L IHRvIGdvIGRvd24gKi8KKwkJICAgIGlmIChyZWNhbGxbY3VycmVudF0pIHsKKwkJCXdoaWxlICgo YnAtLSkgPiBjbWRidWYpIHsgLyogRXJhc2UgY3VycmVudCBsaW5lICovCisJCQkgICAgY21kY2hh cmRlbCgpOworCQkJICAgICpicCA9IE5VTDsKKwkJCX0KKwkJCWNrc3RybmNweShjbWRidWYscmVj YWxsW2N1cnJlbnRdLENNREJMKTsKKyNpZmRlZiBPU0sKKwkJCWZmbHVzaChzdGRvdXQpOworCQkJ d3JpdGUoZmlsZW5vKHN0ZG91dCksICJcciIsIDEpOworCQkJcHJpbnRmKCIlcyVzIixjbXByb20s Y21kYnVmKTsKKyNlbHNlCisJCQlwcmludGYoIlxyJXMlcyIsY21wcm9tLGNtZGJ1Zik7CisjZW5k aWYgLyogT1NLICovCisJCQlsYXN0X3JlY2FsbCA9IDI7CisJCQlyZXR1cm4oY21mbGdzID0gLTEp OyAvKiBGb3JjZSByZXBhcnNlICovCisJCSAgICB9CisJCX0KKyNlbmRpZiAvKiBDS19SRUNBTEwg Ki8KKwkgICAgfQorCisJICAgIGlmIChjIDwgU1AgJiYgcXVvdGUgPT0gMCkgeyAvKiBBbnkgb3Ro ZXIgdW5xdW90ZWQgY29udHJvbCBjaGFyICovCisJCWlmICghY2hzcmMpIHsJCS8qIElmIGNtZCBm aWxlLCBwb2ludCBwYXN0IGl0ICovCisJCSAgICBicCsrOworCQl9IGVsc2UgeworCQkgICAgYmxl ZXAoQlBfV0FSTik7CisJCX0KKwkJY29udGludWU7CQkvKiBjb250aW51ZSwgZG9uJ3QgcHV0IGlu IGJ1ZmZlciAqLworCSAgICB9CisJICAgIGxpbmViZWdpbiA9IDA7CQkvKiBOb3QgYXQgYmVnaW5u aW5nIG9mIGxpbmUgKi8KKyNpZmRlZiBCRUJPWAorCSAgICBpZiAoZWNob2YpIHsKKyAgICAgICAg ICAgICAgICBjbWRlY2hvKChjaGFyKSBjLCAwKTsJLyogRWNobyB3aGF0IHdhcyB0eXBlZC4gKi8K KyAgICAgICAgICAgICAgICBmZmx1c2ggKHN0ZG91dCk7CisgICAgICAgICAgICAgICAgZmZsdXNo KHN0ZGVycik7CisgICAgICAgICAgICB9CisjZWxzZQorI2lmZGVmIE5PU1BMCisgICAgICAgICAg ICBpZiAoZWNob2YgfHwgY2hzcmMpCisjZWxzZQorICAgICAgICAgICAgaWYgKGVjaG9mIHx8IChl Y2hvc3RhcnMgJiYgY2hzcmMpKQorI2VuZGlmCS8qIE5PU1BMICovCisJICAgICAgY21kZWNobygo Y2hhcikgYywgMCk7CS8qIEVjaG8gd2hhdCB3YXMgdHlwZWQuICovCisjZW5kaWYgLyogQkVCT1gg Ki8KKyAgICAgICAgfSBlbHNlIHsJCQkvKiBUaGlzIGNoYXJhY3RlciB3YXMgcXVvdGVkLiAqLwor CSAgICBpbnQgcWYgPSAxOworCSAgICBxdW90ZSA9IDA7CQkJLyogVW5zZXQgdGhlIHF1b3RlIGZs YWcuICovCisJICAgIC8qIGRlYnVnKEYwMDAsImd0d29yZCBxdW90ZSAwIiwiIixjKTsgKi8KKwkg ICAgLyogUXVvdGUgY2hhcmFjdGVyIGF0IHRoaXMgbGV2ZWwgaXMgb25seSBmb3IgU1AsID8sIGFu ZCBjb250cm9scyAqLworICAgICAgICAgICAgLyogSWYgYW55dGhpbmcgZWxzZSB3YXMgcXVvdGVk LCBsZWF2ZSBxdW90ZSBpbiwgYW5kIGxldCAqLworCSAgICAvKiB0aGUgY29tbWFuZC1zcGVjaWZp YyBwYXJzaW5nIHJvdXRpbmVzIGhhbmRsZSBpdCwgZS5nLiBcMDA3ICovCisJICAgIGlmIChjID4g MzIgJiYgYyAhPSAnPycgJiYgYyAhPSBSVUIgJiYgY2hzcmMgIT0gMCkgeworCQkvKiBkZWJ1ZyhG MDAwLCJndHdvcmQgcXVvdGUgMSIsIiIsYyk7ICovCisJCSpicCsrID0gQ01EUTsJCS8qIERlcG9z aXQgXCBpZiBpdCBjYW1lIGZyb20gdHR5ICovCisJCXFmID0gMDsJCQkvKiBhbmQgZG9uJ3QgZXJh c2UgaXQgZnJvbSBzY3JlZW4gKi8KKwkJbGluZWJlZ2luID0gMDsJCS8qIE5vdCBhdCBiZWdpbm5p bmcgb2YgbGluZSAqLworI2lmZGVmIEJTX0RJUlNFUAorLyoKKyAgVGhpcyBpcyBhIGhhY2sgdG8g aGFuZGxlICJjZCBcIiBvciAiY2QgZm9vXCIgb24gT1MvMiBhbmQgc2ltaWxhciBzeXN0ZW1zLgor ICBJZiB3ZSB3ZXJlIGNhbGxlZCBmcm9tIGNtZGlyKCkgYW5kIHRoZSBwcmV2aW91cyBjaGFyYWN0 ZXIgd2FzIHRoZSBxdW90ZQorICBjaGFyYWN0ZXIsIGkuZS4gYmFja3NsYXNoLCBhbmQgdGhpcyBj aGFyYWN0ZXIgaXMgdGhlIGNvbW1hbmQgdGVybWluYXRvciwKKyAgdGhlbiB3ZSBzdHVmZiBhbiBl eHRyYSBiYWNrc2xhc2ggaW50byB0aGUgYnVmZmVyIHdpdGhvdXQgZWNob2luZywgdGhlbgorICB3 ZSBzdHVmZiB0aGUgY2FycmlhZ2UgcmV0dXJuIGJhY2sgaW4gYWdhaW4sIGFuZCBnbyBiYWNrIGFu ZCBwcm9jZXNzIGl0LAorICB0aGlzIHRpbWUgd2l0aCB0aGUgcXVvdGUgZmxhZyBvZmYuCisqLwor CSAgICB9IGVsc2UgaWYgKGRpcm5hbWZsZyAmJiAoYyA9PSBDUiB8fCBjID09IExGIHx8IGMgPT0g U1ApKSB7CisJCS8qIGRlYnVnKEYwMDAsImd0d29yZCBxdW90ZSAyIiwiIixjKTsgKi8KKwkJKmJw KysgPSBDTURROworCQlsaW5lYmVnaW4gPSAwOwkJLyogTm90IGF0IGJlZ2lubmluZyBvZiBsaW5l ICovCisJCSpicCA9IChjID09IFNQID8gU1AgOiBDUik7CisJCWdvdG8gQ01ESVJQQVJTRTsKKyNl bmRpZiAvKiBCU19ESVJTRVAgKi8KKwkgICAgfQorI2lmZGVmIEJFQk9YCisJICAgIGlmIChlY2hv ZikgeworICAgICAgICAgICAgICAgIGNtZGVjaG8oKGNoYXIpIGMsIHFmKTsJLyogRWNobyB3aGF0 IHdhcyB0eXBlZC4gKi8KKyAgICAgICAgICAgICAgICBmZmx1c2ggKHN0ZG91dCk7CisgICAgICAg ICAgICAgICAgZmZsdXNoKHN0ZGVycik7CisgICAgICAgICAgICB9CisjZWxzZQorCSAgICBpZiAo ZWNob2YpIGNtZGVjaG8oKGNoYXIpIGMsIHFmKTsgLyogTm93IGVjaG8gcXVvdGVkIGNoYXJhY3Rl ciAqLworI2VuZGlmIC8qIEJFQk9YICovCisJICAgIC8qIGRlYnVnKEYxMTEsImd0d29yZCBxdW90 ZSIsY21kYnVmLGMpOyAqLworCX0KKyNpZmRlZiBDT01NRU5UCisgICAgICAgIGlmIChlY2hvZikg Y21kZWNobygoY2hhcikgYyxxdW90ZSk7IC8qIEVjaG8gd2hhdCB3YXMgdHlwZWQuICovCisjZW5k aWYgLyogQ09NTUVOVCAqLworICAgICAgICBpZiAoIWNvbW1lbnQpIGlud29yZCA9IDE7CS8qIEZs YWcgd2UncmUgaW4gYSB3b3JkLiAqLworCWlmIChxdW90ZSkgY29udGludWU7CQkvKiBEb24ndCBk ZXBvc2l0IHF1b3RlIGNoYXJhY3Rlci4gKi8KKyAgICAgICAgaWYgKGMgIT0gTkwpIHsJCQkvKiBE ZXBvc2l0IGNvbW1hbmQgY2hhcmFjdGVyLiAqLworCSAgICAqYnArKyA9IChjaGFyKSBjOwkJLyog YW5kIG1ha2Ugc3VyZSB0aGVyZSBpcyBhIE5VTCAqLworI2lmZGVmIENPTU1FTlQKKwkgICAgKmJw ID0gTlVMOwkJCS8qIGFmdGVyIGl0ICovCisjZW5kaWYgLyogQ09NTUVOVCAqLworCX0KKyAgICB9 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFbmQgb2YgYmlnIHdoaWxlICov CisgICAgYmxlZXAoQlBfV0FSTik7CisgICAgcHJpbnRmKCI/Q29tbWFuZCB0b28gbG9uZywgbWF4 aW11bSBsZW5ndGg6ICVkLlxuIixDTURCTCk7CisgICAgY21mbGdzID0gLTI7CisgICAgcmV0dXJu KC05KTsKK30KKworLyogVXRpbGl0eSBmdW5jdGlvbnMgKi8KKworLyogQSBEIEQgQiBVIEYgIC0t IEFkZCB0aGUgc3RyaW5nIHBvaW50ZWQgdG8gYnkgY3AgdG8gdGhlIGNvbW1hbmQgYnVmZmVyICAq LworCitzdGF0aWMgaW50CithZGRidWYoY3ApIGNoYXIgKmNwOyB7CisgICAgaW50IGxlbiA9IDA7 CisgICAgd2hpbGUgKCgqY3AgIT0gTlVMKSAmJiAoYnAgPCBjbWRidWYrQ01EQkwpKSB7CisgICAg ICAgICpicCsrID0gKmNwKys7ICAgICAgICAgICAgICAgICAgLyogQ29weSBhbmQgKi8KKyAgICAg ICAgbGVuKys7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb3VudCB0aGUgY2hhcmFjdGVy cy4gKi8KKyAgICB9CisgICAgKmJwKysgPSBTUDsgICAgICAgICAgICAgICAgICAgICAgICAgLyog UHV0IGEgc3BhY2UgYXQgdGhlIGVuZCAqLworICAgICpicCA9IE5VTDsgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIFRlcm1pbmF0ZSB3aXRoIGEgbnVsbCAqLworICAgIG5wID0gYnA7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIFVwZGF0ZSB0aGUgbmV4dC1maWVsZCBwb2ludGVyICov CisgICAgY21icHRyID0gbnA7CisgICAgcmV0dXJuKGxlbik7ICAgICAgICAgICAgICAgICAgICAg ICAgLyogUmV0dXJuIHRoZSBsZW5ndGggKi8KK30KKworLyogIFMgRSBUIEEgVCBNICAtLSAgRGVw b3NpdCBhIHRva2VuIGluIHRoZSBhdG9tIGJ1ZmZlci4gICovCisvKgorICBCcmVhayBvbiBzcGFj ZSwgbmV3bGluZSwgY2FycmlhZ2UgcmV0dXJuLCBvciBOVUwuCisgIENhbGwgd2l0aDoKKyAgICBj cCA9IFBvaW50ZXIgdG8gc3RyaW5nIHRvIGNvcHkgdG8gYXRvbSBidWZmZXIuCisgICAgZmNvZGUg PSAwIG1lYW5zIGJyZWFrIG9uIHdoaXRlc3BhY2Ugb3IgRU9MLgorICAgIGZjb2RlID0gMSBtZWFu cyBkb24ndCBicmVhayBvbiBzcGFjZS4KKyAgICBmY29kZSA9IDIgbWVhbnMgYnJlYWsgb24gc3Bh Y2UsICc6Jywgb3IgJz0nLgorICAgIGZjb2RlID0gMyBtZWFucyBjb3B5IHRoZSB3aG9sZSBzdHJp bmcuCisgIE51bGwtdGVybWluYXRlIHRoZSByZXN1bHQuCisgIFJldHVybiBsZW5ndGggb2YgdG9r ZW4sIGFuZCBhbHNvIHNldCBnbG9iYWwgImNjIiB0byB0aGlzIGxlbmd0aC4KKyAgUmV0dXJuIC0x IGlmIHRva2VuIHdhcyB0b28gbG9uZy4KKyovCitzdGF0aWMgaW50CitzZXRhdG0oY3AsZmNvZGUp IGNoYXIgKmNwOyBpbnQgZmNvZGU7IHsKKyAgICBjaGFyICphcCwgKnhwLCAqZHFwID0gTlVMTCwg bGJyYWNlLCByYnJhY2U7CisgICAgaW50IGJyYWNlbHZsID0gMCwgZHEgPSAwOworCisgICAgcmVn aXN0ZXIgY2hhciAqIHM7CisgICAgcmVnaXN0ZXIgaW50IG4gPSAwOworCisgICAgaWYgKGNtZmxk ZmxncyAmIDEpIHsJCS8qIEhhbmRsZSBncm91cGluZyAqLworCWxicmFjZSA9ICcoJzsKKwlyYnJh Y2UgPSAnKSc7CisgICAgfSBlbHNlIHsKKwlsYnJhY2UgPSAneyc7CisJcmJyYWNlID0gJ30nOwor ICAgIH0KKyAgICBjYyA9IDA7CQkJCS8qIENoYXJhY3RlciBjb3VudGVyICovCisgICAgYXAgPSBh dG1idWY7CQkJLyogQWRkcmVzcyBvZiBhdG9tIGJ1ZmZlciAqLworCisgICAgcyA9IGNwOworCisg ICAgd2hpbGUgKCpzKyspIG4rKzsJCQkvKiBTYXZlIGEgY2FsbCB0byBzdHJsZW4gKi8KKworICAg IGlmIChuID4gQVRNQkwpIHsKKwlwcmludGYoIj9Db21tYW5kIGJ1ZmZlciBvdmVyZmxvd1xuIik7 CisJcmV0dXJuKC0xKTsKKyAgICB9CisgICAgLyogZGVidWcoRjExMSwic2V0YXRtIixjcCxuKTsg Ki8KKyAgICBpZiAoY3AgPT0gYXApIHsJCQkvKiBJbiBjYXNlIHNvdXJjZSBpcyBhdG9tIGJ1ZmZl ciAqLworCXhwID0gYXR5YnVmOwkJCS8qIG1ha2UgYSBjb3B5ICovCisjaWZkZWYgQ09NTUVOVAor CXN0cm5jcHkoeHAsYXAsQVRNQkwpOwkJLyogc28gd2UgY2FuIGNvcHkgaXQgYmFjaywgZWRpdGVk LiAqLworCWNwID0geHA7CisjZWxzZQorCXMgPSBhcDsKKwl3aGlsZSAoKCp4cCsrID0gKnMrKykp IDsJLyogV2UgYWxyZWFkeSBrbm93IGl0J3MgYmlnIGVub3VnaCAqLworCWNwID0geHAgPSBhdHli dWY7CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgIH0KKyAgICAqYXAgPSBOVUw7CQkJCS8qIFpl cm8gdGhlIGF0b20gYnVmZmVyICovCisgICAgaWYgKGZjb2RlID09IDEpIHsJCQkvKiBUcmltIHRy YWlsaW5nIGJsYW5rcyAqLworCXdoaWxlICgtLW4gPj0gMCAmJiBjcFtuXSA9PSBTUCkKKwkgIDsK KwljcFtuKzFdID0gTlVMOworICAgIH0KKyAgICB3aGlsZSAoKmNwID09IFNQKSB7CQkJLyogVHJp bSBsZWFkaW5nIHNwYWNlcyAqLworCWNwKys7CisJbi0tOworICAgIH0KKyAgICBpZiAoKmNwID09 ICciJykgewkJCS8qIFN0YXJ0cyB3aXRoIGRvdWJsZXF1b3RlPyAqLworCWRxID0gMTsKKwlkcXAg PSBjcDsKKyAgICB9CisgICAgd2hpbGUgKCpjcCkgeworICAgICAgICBpZiAoKmNwID09IGxicmFj ZSkKKwkgIGJyYWNlbHZsKys7CisgICAgICAgIGVsc2UgaWYgKCpjcCA9PSByYnJhY2UpCisJICBi cmFjZWx2bC0tOworCWlmIChicmFjZWx2bCA8IDApCisJICBicmFjZWx2bCA9IDA7CisJaWYgKGJy YWNlbHZsID09IDApIHsKKwkgICAgaWYgKGRxKSB7CisJCWlmICgqY3AgPT0gU1AgfHwgKmNwID09 IEhUKSB7CisJCSAgICBpZiAoY3AgPiBkcXArMSkgeworCQkJaWYgKCooY3AtMSkgPT0gJyInICYm ICooY3AtMikgIT0gQ01EUSkgeworCQkJICAgIGJyZWFrOworCQkJfQorCQkgICAgfQorCQl9CisJ ICAgIH0gZWxzZSBpZiAoKCpjcCA9PSBTUCB8fCAqY3AgPT0gSFQpICYmIGZjb2RlICE9IDEgJiYg ZmNvZGUgIT0gMykKKwkgICAgICBicmVhazsKKwkgICAgaWYgKChmY29kZSA9PSAyKSAmJiAoKmNw ID09ICc9JyB8fCAqY3AgPT0gJzonKSkgYnJlYWs7CisJICAgIGlmICgoZmNvZGUgIT0gMykgJiYg KCpjcCA9PSBMRiB8fCAqY3AgPT0gQ1IpKSBicmVhazsKKwl9CisgICAgICAgICphcCsrID0gKmNw Kys7CisgICAgICAgIGNjKys7CisgICAgfQorICAgICphcCA9IE5VTDsJCQkJLyogVGVybWluYXRl IHRoZSBzdHJpbmcuICovCisgICAgLyogZGVidWcoRjExMSwic2V0YXRtIHJlc3VsdCIsYXRtYnVm LGNjKTsgKi8KKyAgICByZXR1cm4oY2MpOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXR1 cm4gbGVuZ3RoLiAqLworfQorCisvKgorICBUaGVzZSBmdW5jdGlvbnMgYXR0ZW1wdCB0byBoaWRl IHN5c3RlbSBkZXBlbmRlbmNpZXMgZnJvbSB0aGUgbWFpbmxpbmUKKyAgY29kZSBpbiBndHdvcmQo KS4gIER1bW15IGFyZyBmb3IgY21kZ2V0YygpIG5lZWRlZCBmb3IgY29tcGF0aWJpbGl0eSB3aXRo CisgIGNvbmluYygpLCB0dGluYygpLCBldGMsIHNpbmNlIGEgcG9pbnRlciB0byB0aGlzIHJvdXRp bmUgY2FuIGJlIHBhc3NlZCBpbgorICBwbGFjZSBvZiB0aG9zZSB0byB0bl9kb29wKCkuCisKKyAg Tm8gbG9uZ2VyIHN0YXRpYy4gIFVzZWQgYnkgYXNrbW9yZSgpLiAgRnJpIEF1ZyAyMCAxNTowMzoz NCAxOTk5LgorKi8KKyNkZWZpbmUgQ01EX0NPTklOQwkJCS8qIEhvdyB3ZSBnZXQga2V5Ym9hcmQg Y2hhcnMgKi8KKworaW50CitjbWRnZXRjKHRpbWVsaW1pdCkgaW50IHRpbWVsaW1pdDsgewkvKiBH ZXQgYSBjaGFyYWN0ZXIgZnJvbSB0aGUgdHR5LiAqLworICAgIGludCBjOworI2lmZGVmIElLU0QK KyAgICBleHRlcm4gaW50IGluc2VydmVyOworI2VuZGlmIC8qIElLU0QgKi8KKyNpZmRlZiBDS19M T0dJTgorICAgIGV4dGVybiBpbnQgeF9sb2dnZWQ7CisjZW5kaWYgLyogQ0tfTE9HSU4gKi8KKyNp ZmRlZiBUTkNPREUKKyAgICBzdGF0aWMgaW50IGdvdF9jciA9IDA7CisgICAgZXh0ZXJuIGludCBj a3hlY2g7CisgICAgaW50IHR4ID0gMCwgaXNfdG4gPSAwOworI2VuZGlmIC8qIFROQ09ERSAqLwor CisgICAgaWYgKHB1c2hjCisjaWZuZGVmIE5PU1BMCisJJiYgIWFza2ZsYWcKKyNlbmRpZiAvKiBO T1NQTCAqLworCSkgeworICAgICAgICBkZWJ1ZyhGMTExLCJjbWRnZXRjKCkiLCJwdXNoYyIscHVz aGMpOworCWMgPSBwdXNoYzsKKwlwdXNoYyA9IE5VTDsKKwlpZiAoeGNtZmRiICYmIGMgPT0gJz8n KQkJLyogRG9uJ3QgZWNobyA/IHR3aWNlIGlmIGNoYWluaW5nLiAqLworCSAgY21kY2hhcmRlbCgp OworCXJldHVybihjKTsKKyAgICB9CisjaWZkZWYgZGF0YWdlbmVyYWwKKyAgICB7CisJY2hhciBj aDsKKwljID0gZGduY2luYigwLCZjaCwxKTsJCS8qIC0xIGlzIEVPRiwgLTIgVE8sCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogLWMgaXMgQU9TL1ZTIGVycm9yICov CisJaWYgKGMgPT0gLTIpIHsJCQkvKiB0aW1lb3V0IHdhcyBlbmFibGVkPyAqLworCSAgICByZXN0 byhjaGFubmVsKDApKTsJCS8qIHJlc2V0IHRpbWVvdXRzICovCisJICAgIGMgPSBkZ25jaW5iKDAs JmNoLDEpOwkvKiByZXRyeSB0aGlzIG5vdyEgKi8KKwl9CisJaWYgKGMgPCAwKSByZXR1cm4oLTQp OwkJLyogRU9GIG9yIHNvbWUgZXJyb3IgKi8KKwllbHNlIGMgPSAoaW50KSBjaCAmIDAxNzc7CS8q IEdldCBjaGFyIHdpdGhvdXQgcGFyaXR5ICovCisvKgllY2hvZiA9IDE7ICovCisgICAgfQorI2Vs c2UgLyogTm90IGRhdGFnZW5lcmFsICovCisjaWZuZGVmIE1JTklYMgorICAgIGlmICgKKyNpZmRl ZiBJS1NECisJKCFsb2NhbCAmJiBpbnNlcnZlcikgfHwKKyNlbmRpZiAvKiBJS1NEICovCisJdGlt ZWxpbWl0ID4gMCkgeworI2lmZGVmIFROQ09ERQorICAgICAgICAgIEdFVE5FWFRDSDoKKyAgICAg ICAgICAgIGlzX3RuID0gIXB1c2hjICYmICFsb2NhbCAmJiBzc3RlbG5ldDsKKyNlbmRpZiAvKiBU TkNPREUgKi8KKyNpZmRlZiBDT01NRU5UCisJICAgIGMgPSBjb25pbmModGltZWxpbWl0ID4gMCA/ IDEgOiAwKTsKKyNlbHNlIC8qIENPTU1FTlQgKi8KKwkgICAgLyogVGhpcyBpcyBsaWtlbHkgdG8g YnJlYWsgdGhlIGFza3RpbWVvdXQuLi4gKi8KKwkgICAgYyA9IGNvbmluYyh0aW1lbGltaXQpOwor I2VuZGlmIC8qIENPTU1FTlQgKi8KKwkgICAgLyogZGVidWcoRjEwMSwiY21kZ2V0YyBjb25pbmMi LCIiLGMpOyAqLworI2lmZGVmIFROQ09ERQorICAgICAgICAgICAgaWYgKGMgPj0gMCAmJiBpc190 bikgewkvKiBTZXJ2ZXItc2lkZSBUZWxuZXQgKi8KKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGMp IHsKKwkJICBjYXNlIElBQzoKKyAgICAgICAgICAgICAgICAgICAgLyogZGVidWcoRjExMSwiZ3R3 b3JkIElBQyIsImMiLGMpOyAqLworICAgICAgICAgICAgICAgICAgICBnb3RfY3IgPSAwOworICAg ICAgICAgICAgICAgICAgICBpZiAoKHR4ID0gdG5fZG9vcCgoQ0hBUikoYyAmIDB4ZmYpLGNreGVj aCxjb25pbmMpKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIEdFVE5FWFRD SDsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eCA8PSAtMSkgeyAvKiBJL08gZXJy b3IgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIElmIHRoZXJlIHdhcyBhIGZhdGFsIEkv TyBlcnJvciB0aGVuIHR0Y2xvcygpICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBo YXMgYmVlbiBjYWxsZWQgYW5kIHRoZSBuZXh0IEdFVE5FWFRDSCBhdHRlbXB0ICAqLworICAgICAg ICAgICAgICAgICAgICAgICAgLyogd2lsbCBiZSAhaXNfdG4gc2luY2UgdHRjbG9zKCkgc2V0cyBz c3RlbG5ldCA9IDAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGRvZXhpdChCQURfRVhJVCwt MSk7IC8qIChvciByZXR1cm4oLTQpPyAqLworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYg KHR4ID09IDEpIHsgLyogRUNITyBjaGFuZ2UgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGNr eGVjaCA9IGRweCA9IDE7IC8qIEdldCBuZXh0IGNoYXIgKi8KKyAgICAgICAgICAgICAgICAgICAg ICAgIGdvdG8gR0VUTkVYVENIOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR4ID09 IDIpIHsgLyogRUNITyBjaGFuZ2UgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGNreGVjaCA9 IGRweCA9IDA7IC8qIEdldCBuZXh0IGNoYXIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGdv dG8gR0VUTkVYVENIOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR4ID09IDMpIHsg LyogUXVvdGVkIElBQyAqLworICAgICAgICAgICAgICAgICAgICAgICAgYyA9IDI1NTsJLyogcHJv Y2VlZWQgd2l0aCBpdC4gKi8KKyAgICAgICAgICAgICAgICAgICAgfQorI2lmZGVmIElLU19PUFRJ T04KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodHggPT0gNCkgewkvKiBJS1MgU3RhdGUg Q2hhbmdlICovCisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIEdFVE5FWFRDSDsKKyAgICAg ICAgICAgICAgICAgICAgfQorI2VuZGlmIC8qIElLU19PUFRJT04gKi8KKyAgICAgICAgICAgICAg ICAgICAgZWxzZSBpZiAodHggPT0gNikgewkvKiBSZW1vdGUgTG9nb3V0ICovCisJCQlkb2V4aXQo R09PRF9FWElULDApOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworCQkJZ290byBHRVRO RVhUQ0g7CS8qIFVua25vd24sIGdldCBuZXh0IGNoYXIgKi8KKwkJICAgIH0KKyAgICAgICAgICAg ICAgICAgICAgYnJlYWs7CisjaWZkZWYgQ09NTUVOVAorICAgICAgICAgICAgICAgICAgY2FzZSBD UjoKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFURUxPUFRfVShURUxPUFRfQklOQVJZKSkgewor CQkJaWYgKGdvdF9jcikgeworCQkJICAgIC8qIFRoaXMgbWVhbnMgdGhlIHNlbmRlciBpcyB2aW9s YXRpbmcgVGVsbmV0ICAgKi8KKwkJCSAgICAvKiBwcm90b2NvbCBiZWNhdXNlIHdlIHJlY2VpdmVk IHR3byBDUnMgaW4gYSAgICovCisJCQkgICAgLyogcm93IHdpdGhvdXQgZ2V0dGluZyBlaXRoZXIg TEYgb3IgTlVMLiAgICAgICAqLworCQkJICAgIC8qIFRoaXMgd2lsbCBub3Qgc29sdmUgdGhlIHBy b2JsZW0gYnV0IGl0ICAgICAgKi8KKwkJCSAgICAvKiB3aWxsIGF0IGxlYXN0IGFsbG93IHR3byBD UnMgdG8gZG8gc29tZXRoaW5nICovCisJCQkgICAgLyogd2hlcmVhcyBiZWZvcmUgdGhlIHVzZXIg d291bGQgaGF2ZSB0byBndWVzcyAqLworCQkJICAgIC8qIHRvIHNlbmQgTEYgb3IgTlVMIGFmdGVy IHRoZSBDUi4gICAgICAgICAgICAgKi8KKwkJCSAgICBkZWJ1ZyhGMTAwLCJndHdvcmQgQ1IgdGVs bmV0IGVycm9yIiwiIiwwKTsKKwkJCSAgICBjID0gTEY7CisJCQl9IGVsc2UgeworCQkJICAgIGRl YnVnKEYxMDAsImd0d29yZCBza2lwcGluZyBDUiIsIiIsMCk7CisJCQkgICAgZ290X2NyID0gMTsJ LyogUmVtZW1iZXIgYSBDUiB3YXMgcmVjZWl2ZWQgKi8KKwkJCSAgICBnb3RvIEdFVE5FWFRDSDsK KwkJCX0KKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKwkJCWRlYnVnKEYxMDAsImd0d29y ZCBDUiB0byBMRiIsIiIsMCk7CisJCQljID0gTEY7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIExGOgorICAg ICAgICAgICAgICAgICAgICBpZiAoIVRFTE9QVF9VKFRFTE9QVF9CSU5BUlkpKSB7CisJCQlnb3Rf Y3IgPSAwOworCQkJZGVidWcoRjEwMCwiZ3R3b3JkIExGIiwiIiwwKTsKKyAgICAgICAgICAgICAg ICAgICAgfSBlbHNlIHsKKwkJCWlmIChnb3RfY3IpIHsKKwkJCSAgICBnb3RfY3IgPSAwOworCQkJ ICAgIGRlYnVnKEYxMDAsImd0d29yZCBza2lwcGluZyBMRiIsIiIsMCk7CisJCQkgICAgZ290byBH RVRORVhUQ0g7CisJCQl9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIE5VTDoKKyAgICAgICAgICAgICAgICAg ICAgaWYgKCFURUxPUFRfVShURUxPUFRfQklOQVJZKSAmJiBnb3RfY3IpIHsKKwkJCWMgPSBMRjsK KwkJCWRlYnVnKEYxMDAsImd0d29yZCBOVUwgdG8gTEYiLCIiLDApOworICAgICAgICAgICAgICAg ICAgICB9IGVsc2UgeworCQkJZGVidWcoRjEwMCwiZ3R3b3JkIE5VTCIsIiIsMCk7CisgICAgICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZ290X2NyID0gMDsKKyAgICAgICAg ICAgICAgICAgICAgYnJlYWs7CisjZWxzZSAvKiBDT01NRU5UICovCisgICAgICAgICAgICAgICAg ICBjYXNlIENSOgorICAgICAgICAgICAgICAgICAgICBpZiAoICFURUxPUFRfVShURUxPUFRfQklO QVJZKSAmJiBnb3RfY3IgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvKiBUaGlzIG1lYW5z IHRoZSBzZW5kZXIgaXMgdmlvbGF0aW5nIFRlbG5ldCAgICovCisgICAgICAgICAgICAgICAgICAg ICAgICAvKiBwcm90b2NvbCBiZWNhdXNlIHdlIHJlY2VpdmVkIHR3byBDUnMgaW4gYSAgICovCisg ICAgICAgICAgICAgICAgICAgICAgICAvKiByb3cgd2l0aG91dCBnZXR0aW5nIGVpdGhlciBMRiBv ciBOVUwuICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBUaGlzIHdpbGwgbm90 IHNvbHZlIHRoZSBwcm9ibGVtIGJ1dCBpdCAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAg ICAvKiB3aWxsIGF0IGxlYXN0IGFsbG93IHR3byBDUnMgdG8gZG8gc29tZXRoaW5nICovCisgICAg ICAgICAgICAgICAgICAgICAgICAvKiB3aGVyZWFzIGJlZm9yZSB0aGUgdXNlciB3b3VsZCBoYXZl IHRvIGd1ZXNzICovCisgICAgICAgICAgICAgICAgICAgICAgICAvKiB0byBzZW5kIExGIG9yIE5V TCBhZnRlciB0aGUgQ1IuICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICBk ZWJ1ZyhGMTAwLCJndHdvcmQgQ1IgdGVsbmV0IGVycm9yIiwiIiwwKTsKKyAgICAgICAgICAgICAg ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdF9jciA9IDE7CS8qIFJl bWVtYmVyIGEgQ1Igd2FzIHJlY2VpdmVkICovCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgICAgICAgLyogZGVidWcoRjEwMCwiZ3R3b3JkIENSIHRvIExGIiwiIiwwKTsgKi8K KyAgICAgICAgICAgICAgICAgICAgYyA9IExGOworCQkgICAgYnJlYWs7CisgICAgICAgICAgICAg ICAgICBjYXNlIExGOgorICAgICAgICAgICAgICAgICAgICBpZiAoZ290X2NyKSB7CisgICAgICAg ICAgICAgICAgICAgICAgICBnb3RfY3IgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgLyog ZGVidWcoRjEwMCwiZ3R3b3JkIHNraXBwaW5nIExGIiwiIiwwKTsgKi8KKyAgICAgICAgICAgICAg ICAgICAgICAgIGdvdG8gR0VUTkVYVENIOworICAgICAgICAgICAgICAgICAgICB9CisJCSAgICBi cmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgTlVMOgorICAgICAgICAgICAgICAgICAgICBp ZiAoZ290X2NyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RfY3IgPSAwOworICAgICAg ICAgICAgICAgICAgICAgICAgLyogZGVidWcoRjEwMCwiZ3R3b3JkIHNraXBwaW5nIE5VTCIsIiIs MCk7ICovCisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIEdFVE5FWFRDSDsKKyNpZmRlZiBD T01NRU5UCisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg ICAgZGVidWcoRjEwMCwiZ3R3b3JkIE5VTCIsIiIsMCk7CisjZW5kaWYgLyogQ09NTUVOVCAqLwor ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworI2VuZGlm IC8qIENPTU1FTlQgKi8KKyNpZmRlZiBJS1NECisJCSAgY2FzZSBFVFg6CQkvKiBDdHJsLUMuLi4g Ki8KKyAgICAgICAgICAgICAgICAgIGNhc2UgRU9UOgkJLyogRU9UID0gRU9GICovCisgICAgICAg ICAgICAgICAgICAgICAgaWYgKGluc2VydmVyCisjaWZkZWYgQ0tfTE9HSU4KKwkJCSAgJiYgIXhf bG9nZ2VkCisjZW5kaWYgLyogQ0tfTE9HSU4gKi8KKwkJCSAgKQorICAgICAgICAgICAgICAgICAg ICAgICAgICByZXR1cm4oLTQpOworCQkgICAgYnJlYWs7CisjZW5kaWYgLyogSUtTRCAqLworCQkg IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgZ290X2NyID0gMDsKKyAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICB9CisjZW5kaWYgLyogVE5DT0RFICovCisgICAgfSBlbHNlIHsK KyNpZmRlZiBPUzIKKwljID0gY29uaW5jKDApOworI2Vsc2UgLyogT1MyICovCisjaWZkZWYgQ01E X0NPTklOQworI3VuZGVmIENNRF9DT05JTkMKKyNlbmRpZiAvKiBDTURfQ09OSU5DICovCisJYyA9 IGdldGNoYXIoKTsKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICB9CisjZWxzZSAgLyogTUlOSVgyICov CisjdW5kZWYgZ2V0YworI2lmZGVmIENNRF9DT05JTkMKKyN1bmRlZiBDTURfQ09OSU5DCisjZW5k aWYgLyogQ01EX0NPTklOQyAqLworICAgIGMgPSBnZXRjKHN0ZGluKTsKKyAgICAvKiBkZWJ1ZyhG MTAxLCJjbWRnZXRjIGdldGMiLCIiLGMpOyAqLworI2VuZGlmIC8qIE1JTklYMiAqLworI2lmZGVm IFJUVQorICAgIGlmIChydHVfYnVnKSB7CisjaWZkZWYgQ01EX0NPTklOQworI3VuZGVmIENNRF9D T05JTkMKKyNlbmRpZiAvKiBDTURfQ09OSU5DICovCisJYyA9IGdldGNoYXIoKTsJCQkvKiBSVFUg ZG9lc24ndCBkaXNjYXJkIHRoZSBeWiAqLworCXJ0dV9idWcgPSAwOworICAgIH0KKyNlbmRpZiAv KiBSVFUgKi8KKyNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLworICAgIHJldHVybihjKTsJCQkJLyog UmV0dXJuIHdoYXQgd2UgZ290ICovCit9CisKKy8qICNpZmRlZiBVU0VfQVJST1dLRVlTICovCisK Ky8qIE1lY2hhbmlzbSB0byB1c2UgZm9yIHBlZWtpbmcgaW50byBzdGRpbiBidWZmZXIgKi8KKwor I2lmbmRlZiBVU0VfRklMRV9DTlQJCQkvKiBzdGRpbi0+X19jbnQgKi8KKyNpZm5kZWYgVVNFX0ZJ TEVfX0NOVAkJCS8qIE5vdGU6IHR3byB1bmRlcnNjb3JlcyAqLworI2lmZGVmIEhQVVgJCQkJLyog SFBVWCA3LTExICovCisjaWZuZGVmIEhQVVg1CisjaWZuZGVmIEhQVVg2CisjZGVmaW5lIFVTRV9G SUxFX19DTlQKKyNlbmRpZiAvKiBIUFVYNiAqLworI2VuZGlmIC8qIEhQVVg1ICovCisjZWxzZQor I2lmZGVmIEFOWVNDTwkJCQkvKiBTQ08gVU5JWCwgT1NSNSwgVW5peHdhcmUsIGV0YyAqLworI2lm bmRlZiBPTERfVU5JWFdBUkUJCQkvKiBCdXQgbm90IFVuaXh3YXJlIDEueCBvciAyLjAgKi8KKyNp Zm5kZWYgVU5JWFdBUkUyCQkJLyogb3IgMi4xLjAgKi8KKyNkZWZpbmUgVVNFX0ZJTEVfX0NOVAor I2VuZGlmIC8qIFVOSVhXQVJFMiAqLworI2VuZGlmIC8qIE9MRF9VTklYV0FSRSAqLworI2VuZGlm IC8qIEFOWVNDTyAqLworI2VuZGlmIC8qIEhQVVggKi8KKyNlbmRpZiAvKiBVU0VfRklMRV9fQ05U ICovCisjZW5kaWYgLyogVVNFX0ZJTEVfQ05UICovCisKKyNpZm5kZWYgVVNFX0ZJTEVfUgkJCS8q IHN0ZGluLT5fciAqLworI2lmbmRlZiBVU0VfRklMRV9DTlQKKyNpZm5kZWYgVVNFX0ZJTEVfX0NO VAorI2lmZGVmIEJTRDQ0CQkJCS8qIHtGcmVlLE9wZW4sTmV0fUJTRCwgQlNESSAqLworI2RlZmlu ZSBVU0VfRklMRV9SCisjZW5kaWYgLyogQlNENDQgKi8KKyNlbmRpZiAvKiBVU0VfRklMRV9fQ05U ICovCisjZW5kaWYgLyogVVNFX0ZJTEVfQ05UICovCisjZW5kaWYgLyogVVNFX0ZJTEVfUiAqLwor CisjaWZuZGVmIFVTRV9GSUxFX1IJCQkvKiBzdGRpbi0+X2NudCAqLworI2lmbmRlZiBVU0VfRklM RV9DTlQKKyNpZm5kZWYgVVNFX0ZJTEVfX0NOVAorI2RlZmluZSBVU0VfRklMRV9DTlQJCQkvKiBF dmVyeWJvZHkgZWxzZSAoYnV0IExpbnV4KSAqLworI2VuZGlmIC8qIFVTRV9GSUxFX19DTlQgKi8K KyNlbmRpZiAvKiBVU0VfRklMRV9DTlQgKi8KKyNlbmRpZiAvKiBVU0VfRklMRV9SICovCisKKwor LyoKKyAgYyBtIGQgYyBvIG4gYyBoIGsKKworICBIb3cgbWFueSBjaGFyYWN0ZXJzIGFyZSB3YWl0 aW5nIHRvIGJlIHJlYWQgYXQgdGhlIGNvbnNvbGU/ICBOb3JtYWxseQorICBjb25jaGsoKSB3b3Vs ZCB0ZWxsIHVzLCBidXQgaW4gVW5peCBhbmQgVk1TIGNtZGdldGMoKSB1c2VzIHN0ZGlvIGdldGNo YXIoKSwKKyAgdGh1cyBieXBhc3NpbmcgY29uaW5jKCkvY29uY2hrKCksIHNvIHdlIGhhdmUgdG8g cGVlayBpbnRvIHRoZSBzdGRpbiBidWZmZXIsCisgIHdoaWNoIGlzIHRvdGFsbHkgbm9ucG9ydGFi bGUuICBXaGljaCBpcyB3aHkgdGhpcyByb3V0aW5lIGlzLCBhdCBsZWFzdCBmb3IKKyAgbm93LCB1 c2VkIG9ubHkgZm9yIGNoZWNraW5nIGZvciBhcnJvdy1rZXkgc2VxdWVuY2VzIGZyb20gdGhlIGtl eWJvYXJkIGFmdGVyCisgIGFuIEVTQyB3YXMgcmVhZC4gIFdvdWxkbid0IGl0IGJlIG5pY2UgaWYg dGhlIHN0ZGlvIHBhY2thZ2UgaGFkIGEgZnVuY3Rpb24KKyAgdGhhdCByZXR1cm5lZCB0aGUgbnVt YmVyIG9mIGJ5dGVzIHdhaXRpbmcgdG8gYmUgcmVhZCBmcm9tIGl0cyBidWZmZXI/CisgIFJldHVy bnMgMCBvciBncmVhdGVyIGFsd2F5cy4KKyovCitpbnQKK2NtZGNvbmNoaygpIHsKKyAgICBpbnQg eCA9IDAsIHk7CisgICAgeSA9IHB1c2hjID8gMSA6IDA7CQkJLyogSGF2ZSBjb21tYW5kIGNoYXJh Y3RlciBwdXNoZWQ/ICovCisjaWZkZWYgT1MyCisgICAgeCA9IGNvbmNoaygpOwkJCS8qIENoZWNr IGRldmljZS1kcml2ZXIgYnVmZmVyICovCisgICAgaWYgKHggPCAwKSB4ID0gMDsKKyNlbHNlIC8q IE9TMiAqLworI2lmZGVmIENNRF9DT05JTkMJCQkvKiBTZWUgY21kZ2V0YygpICovCisgICAgeCA9 IGNvbmNoaygpOwkJCS8qIENoZWNrIGRldmljZS1kcml2ZXIgYnVmZmVyICovCisgICAgaWYgKHgg PCAwKSB4ID0gMDsKKyNlbHNlICAvKiBDTURfQ09OSU5DICovCisKKy8qIEhlcmUgd2UgbXVzdCBs b29rIGluc2lkZSB0aGUgc3RkaW4gYnVmZmVyIC0gaGlnaGx5IHBsYXRmb3JtIGRlcGVuZGVudCAq LworCisjaWZkZWYgX0lPX0VPRl9TRUVOCQkJLyogTGludXggKi8KKyAgICB4ID0gKGludCkgKChz dGRpbi0+X0lPX3JlYWRfZW5kKSAtIChzdGRpbi0+X0lPX3JlYWRfcHRyKSk7CisgICAgZGVidWco RjEwMSwiY21kY29uY2hrIF9JT19maWxlX2ZsYWdzIiwiIix4KTsKKyNlbHNlICAvKiBfSU9fZmls ZV9mbGFncyAqLworI2lmZGVmIFVTRV9GSUxFX0NOVAkJCS8qIFRyYWRpdGlvbmFsICovCisjaWZk ZWYgVk1TCisgICAgZGVidWcoRjEwMSwiY21kY29uY2hrICgqc3RkaW4pLT5fY250IiwiIiwoKnN0 ZGluKS0+X2NudCk7CisgICAgeCA9ICgqc3RkaW4pLT5fY250OworI2Vsc2UKKyNpZmRlZiBOT0FS Uk9XS0VZUworICAgIGRlYnVnKEYxMDEsImNtZGNvbmNoayBOT0FSUk9XS0VZUyB4IiwiIiwwKTsK KyNlbHNlCisgICAgZGVidWcoRjEwMSwiY21kY29uY2hrIHN0ZGluLT5fY250IiwiIixzdGRpbi0+ X2NudCk7CisgICAgeCA9IHN0ZGluLT5fY250OworI2VuZGlmIC8qIE5PQVJST1dLRVlTICovCisj ZW5kaWYgLyogVk1TICovCisgICAgaWYgKHggPT0gMCkgeCA9IGNvbmNoaygpOworICAgIGlmICh4 IDwgMCkgeCA9IDA7CisjZWxzZSAgLyogVVNFX0ZJTEVfQ05UICovCisjaWZkZWYgVVNFX0ZJTEVf X0NOVAkJCS8qIEhQLVVYICovCisgICAgZGVidWcoRjEwMSwiY21kY29uY2hrIHN0ZGluLT5fX2Nu dCIsIiIsc3RkaW4tPl9fY250KTsKKyAgICB4ID0gc3RkaW4tPl9fY250OworICAgIGlmICh4ID09 IDApIHggPSBjb25jaGsoKTsKKyAgICBpZiAoeCA8IDApIHggPSAwOworI2Vsc2UgIC8qIFVTRV9G SUxFX0NOVCAqLworI2lmZGVmIFVTRV9GSUxFX1IJCQkvKiBGcmVlQlNELCBPcGVuQlNELCBldGMg Ki8KKyAgICBkZWJ1ZyhGMTAxLCJjbWRjb25jaGsgc3RkaW4tPl9yIiwiIixzdGRpbi0+X3IpOwor ICAgIHggPSBzdGRpbi0+X3I7CisgICAgaWYgKHggPT0gMCkgeCA9IGNvbmNoaygpOworICAgIGlm ICh4IDwgMCkgeCA9IDA7CisKKyAgICAvKiBGaWxsIGluIGFueSBvdGhlcnMgaGVyZS4uLiAqLwor CisjZW5kaWYgLyogVVNFX0ZJTEVfUiAqLworI2VuZGlmIC8qIFVTRV9GSUxFX19DTlQgKi8KKyNl bmRpZiAvKiBVU0VfRklMRV9DTlQgKi8KKyNlbmRpZiAvKiBfSU9fZmlsZV9mbGFncyAqLworI2Vu ZGlmIC8qIENNRF9DT05JTkMgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyAgICByZXR1cm4oeCArIHkp OworfQorLyogI2VuZGlmICovIC8qIFVTRV9BUlJPV0tFWVMgKi8KKworCitzdGF0aWMgVk9JRAor Y21kY2xyc2NuKCkgewkJCQkvKiBDbGVhciB0aGUgc2NyZWVuICovCisgICAgY2tfY2xzKCk7Cit9 CisKK3N0YXRpYyBWT0lECQkJCS8qIFdoYXQgdG8gZWNobyBhdCBlbmQgb2YgY29tbWFuZCAqLwor I2lmZGVmIENLX0FOU0lDCitjbWRuZXdsKGNoYXIgYykKKyNlbHNlCitjbWRuZXdsKGMpIGNoYXIg YzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogY21kbmV3bCAqLyB7CisjaWZkZWYgT1MyCisj aWZkZWYgSUtTRAorICAgIGV4dGVybiBpbnQgaW5zZXJ2ZXI7CisgICAgaWYgKGluc2VydmVyICYm IGMgPT0gTEYpCisgICAgICBwdXRjaGFyKENSKTsKKyNlbmRpZiAvKiBJS1NEICovCisjZW5kaWYg LyogT1MyICovCisKKyAgICBwdXRjaGFyKGMpOwkJCQkvKiBjIGlzIHRoZSB0ZXJtaW5hdGluZyBj aGFyYWN0ZXIgKi8KKworI2lmZGVmIFdJTlRDUAkJCQkvKiB3aGF0IGlzIHRoaXMgZG9pbmcgaGVy ZT8gKi8KKyAgICBpZiAoYyA9PSBDUikgcHV0Y2hhcihOTCk7CisjZW5kaWYgLyogV0lOVENQICov CisKKy8qCisgIEEuQS4gQ2hlcm5vdiwgd2hvIHNlbnQgaW4gY2hhbmdlcyBmb3IgRnJlZUJTRCwg c2FpZCB3ZSBhbHNvIG5lZWRlZCB0aGlzCisgIGZvciBTVk9SUE9TSVggYmVjYXVzZSAic2V0dXAg dGVybWluYWwgYnkgdGVybWlvcyBhbmQgY3Vyc2VzIGRvZXMKKyAgbm90IGNvbnZlcnQgXHIgdG8g XG4sIHNvIGFkZGl0aW9uYWwgXG4gbmVlZGVkIGluIG5ld2xpbmUgZnVuY3Rpb24uIiAgQnV0Cisg IGl0IGlzIGFsc28gdmVyeSBsaWtlbHkgdG8gcmVzdWx0IGluIHVud2FudGVkIGJsYW5rIGxpbmVz LgorKi8KKyNpZmRlZiBCU0Q0NAorICAgIGlmIChjID09IENSKSBwdXRjaGFyKE5MKTsKKyNlbmRp ZiAvKiBCU0Q0NCAqLworCisjaWZkZWYgQ09NTUVOVAorICAgIC8qIE9TMiBubyBsb25nZXIgbmVl ZHMgdGhpcyBhcyBhbGwgQ1IgYXJlIGNvbnZlcnRlZCB0byBOTCBpbiBjb25pbmMoKSAqLworICAg IC8qIFRoaXMgZWxpbWluYXRlcyB0aGUgdWdseSBleHRyYSBibGFuayBsaW5lcyBkaXNjdXNzZWQg YWJvdmUuICAgICAgICAqLworI2lmZGVmIE9TMgorICAgIGlmIChjID09IENSKSBwdXRjaGFyKE5M KTsKKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisjaWZkZWYgYWVnaXMK KyAgICBpZiAoYyA9PSBDUikgcHV0Y2hhcihOTCk7CisjZW5kaWYgLyogYWVnaXMgKi8KKyNpZmRl ZiBBTUlHQQorICAgIGlmIChjID09IENSKSBwdXRjaGFyKE5MKTsKKyNlbmRpZiAvKiBBTUlHQSAq LworI2lmZGVmIGRhdGFnZW5lcmFsCisgICAgaWYgKGMgPT0gQ1IpIHB1dGNoYXIoTkwpOworI2Vu ZGlmIC8qIGRhdGFnZW5lcmFsICovCisjaWZkZWYgR0VNRE9TCisgICAgaWYgKGMgPT0gQ1IpIHB1 dGNoYXIoTkwpOworI2VuZGlmIC8qIEdFTURPUyAqLworI2lmZGVmIFNUUkFUVVMKKyAgICBpZiAo YyA9PSBDUikgcHV0Y2hhcihOTCk7CisjZW5kaWYgLyogU1RSQVRVUyAqLworfQorCitzdGF0aWMg Vk9JRAorY21kY2hhcmRlbCgpIHsJCQkJLyogRXJhc2UgYSBjaGFyYWN0ZXIgZnJvbSB0aGUgc2Ny ZWVuICovCisjaWZuZGVmIE5PU1BMCisgICAgaWYgKCFlY2hvc3RhcnMpCisjZW5kaWYJLyogTk9T UEwgKi8KKyAgICAgIGlmICghZHB4KSByZXR1cm47CisjaWZkZWYgZGF0YWdlbmVyYWwKKyAgICAv KiBERyAnXGInIGlzIEVNICheeSBvciBcMDMxKSAqLworICAgIGlmICh0ZXJtdHlwZSA9PSAxKQor ICAgICAgLyogRXJhc2UgYSBjaGFyYWN0ZXIgZnJvbSBub24tREcgc2NyZWVuLCAqLworICAgICAg ZGduY291YigxLCJcMDEwIFwwMTAiLDMpOworICAgIGVsc2UKKyNlbmRpZiAvKiBkYXRhZ2VuZXJh bCAqLworICAgICAgcHJpbnRmKCJcYiBcYiIpOworI2lmZGVmIEdFTURPUworICAgIGZmbHVzaChz dGRvdXQpOworI2Vsc2UKKyNpZmRlZiBCRUJPWAorICAgIGZmbHVzaChzdGRvdXQpOworI2VuZGlm IC8qIEJFQk9YICovCisjZW5kaWYgLyogR0VNRE9TICovCit9CisKK3N0YXRpYyBWT0lECisjaWZk ZWYgQ0tfQU5TSUMKK2NtZGVjaG8oY2hhciBjLCBpbnQgcXVvdGUpCisjZWxzZQorY21kZWNobyhj LHF1b3RlKSBjaGFyIGM7IGludCBxdW90ZTsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeyAvKiBj bWRlY2hvICovCisjaWZkZWYgTk9TUEwKKyAgICBpZiAoIWRweCkgcmV0dXJuOworI2Vsc2UKKyAg ICBpZiAoIWVjaG9zdGFycykgeworCWlmICghZHB4KSByZXR1cm47CisgICAgfSBlbHNlIHsKKwlj ID0gKGNoYXIpZWNob3N0YXJzOworICAgIH0KKyNlbmRpZgkvKiBOT1NQTCAqLworICAgIC8qIEVj aG8gdHR5IGlucHV0IGNoYXJhY3RlciBjICovCisgICAgaWYgKHF1b3RlKSB7CisJcHV0Y2hhcihC Uyk7CisJcHV0Y2hhcihTUCk7CisJcHV0Y2hhcihCUyk7CisjaWZkZWYgaXNwcmludAorCXB1dGNo YXIoKENIQVIpIChpc3ByaW50KGMpID8gYyA6ICdeJyApKTsKKyNlbHNlCisJcHV0Y2hhcigoQ0hB UikgKChjID49IFNQICYmIGMgPCBERUwpID8gYyA6ICdeJykpOworI2VuZGlmIC8qIGlzcHJpbnQg Ki8KKyAgICB9IGVsc2UgeworCXB1dGNoYXIoYyk7CisgICAgfQorI2lmZGVmIE9TMgorICAgIGlm IChxdW90ZT09MSAmJiBjPT1DUikgcHV0Y2hhcigoQ0hBUikgTkwpOworI2VuZGlmIC8qIE9TMiAq LworICAgIGlmICh0aW1lbGltaXQpCisgICAgICBmZmx1c2goc3Rkb3V0KTsKK30KKworLyogUmV0 dXJuIHBvaW50ZXIgdG8gY3VycmVudCBwb3NpdGlvbiBpbiBjb21tYW5kIGJ1ZmZlci4gKi8KKwor Y2hhciAqCitjbXBlZWsoKSB7CisgICAgcmV0dXJuKG5wKTsKK30KKyNlbmRpZiAvKiBOT0lDUCAq LworCisKKyNpZmRlZiBOT0lDUAorI2luY2x1ZGUgImNrY2RlYi5oIgorI2luY2x1ZGUgImNrdWNt ZC5oIgorI2luY2x1ZGUgImNrY2FzYy5oIgorI2VuZGlmIC8qIE5PSUNQICovCisKKy8qICBYIFgg RSBTIEMgIC0tICBJbnRlcnByZXRzIGJhY2tzbGFzaCBjb2RlcyAgKi8KKy8qICBSZXR1cm5zIHRo ZSBpbnQgdmFsdWUgb2YgdGhlIGJhY2tzbGFzaCBjb2RlIGlmIGl0IGlzID4gLTEgYW5kIDwgMjU2 ICovCisvKiAgYW5kIHVwZGF0ZXMgdGhlIHN0cmluZyBwb2ludGVyIHRvIGZpcnN0IGNoYXJhY3Rl ciBhZnRlciBiYWNrc2xhc2ggY29kZS4gKi8KKy8qICBJZiB0aGUgYXJndW1lbnQgaXMgaW52YWxp ZCwgbGVhdmVzIHBvaW50ZXIgdW5jaGFuZ2VkIGFuZCByZXR1cm5zIC0xLiAqLworCitpbnQKK3h4 ZXNjKHMpIGNoYXIgKipzOyB7CQkJLyogRXhwYW5kIGJhY2tzbGFzaCBlc2NhcGVzICovCisgICAg aW50IHgsIHksIGJyYWNlLCByYWRpeDsJCS8qIFJldHVybnMgdGhlIGludCB2YWx1ZSAqLworICAg IGNoYXIgaGQgPSAnOSc7CQkJLyogSGlnaGVzdCBkaWdpdCBpbiByYWRpeCAqLworICAgIGNoYXIg KnA7CisKKyAgICBwID0gKnM7CQkJCS8qIHBvaW50ZXIgdG8gYmVnaW5uaW5nICovCisgICAgaWYg KCFwKSByZXR1cm4oLTEpOwkJCS8qIHdhdGNoIG91dCBmb3IgbnVsbCBwb2ludGVyICovCisgICAg eCA9ICpwKys7CQkJCS8qIGNoYXJhY3RlciBhdCBiZWdpbm5pbmcgKi8KKyAgICBpZiAoeCAhPSBD TURRKSByZXR1cm4oLTEpOwkJLyogbWFrZSBzdXJlIGl0J3MgYSBiYWNrc2xhc2ggY29kZSAqLwor CisgICAgeCA9ICpwOwkJCQkvKiBpdCBpcywgZ2V0IHRoZSBuZXh0IGNoYXJhY3RlciAqLworICAg IGlmICh4ID09ICd7JykgewkJCS8qIGJyYWNrZXRlZCBxdWFudGl0eT8gKi8KKwlwKys7CQkJCS8q IGJlZ2luIHBhc3QgYnJhY2tldCAqLworCXggPSAqcDsKKwlicmFjZSA9IDE7CisgICAgfSBlbHNl IGJyYWNlID0gMDsKKyAgICBzd2l0Y2ggKHgpIHsJCQkvKiBTdGFydCBpbnRlcnByZXRpbmcgKi8K KyAgICAgIGNhc2UgJ2QnOgkJCQkvKiBEZWNpbWFsIHJhZGl4IGluZGljYXRvciAqLworICAgICAg Y2FzZSAnRCc6CisJcCsrOwkJCQkvKiBKdXN0IHBvaW50IHBhc3QgaXQgYW5kIGZhbGwgdGhydSAq LworICAgICAgY2FzZSAnMCc6CQkJCS8qIFN0YXJ0cyB3aXRoIGRpZ2l0ICovCisgICAgICBjYXNl ICcxJzoKKyAgICAgIGNhc2UgJzInOiAgY2FzZSAnMyc6ICBjYXNlICc0JzogIGNhc2UgJzUnOgor ICAgICAgY2FzZSAnNic6ICBjYXNlICc3JzogIGNhc2UgJzgnOiAgY2FzZSAnOSc6CisJcmFkaXgg PSAxMDsJCQkvKiBEZWNpbWFsICovCisJaGQgPSAnOSc7CQkJLyogaGlnaGVzdCB2YWxpZCBkaWdp dCAqLworCWJyZWFrOworICAgICAgY2FzZSAnbyc6CQkJCS8qIFN0YXJ0cyB3aXRoIG8gb3IgTyAq LworICAgICAgY2FzZSAnTyc6CisJcmFkaXggPSA4OwkJCS8qIE9jdGFsICovCisJaGQgPSAnNyc7 CQkJLyogaGlnaGVzdCB2YWxpZCBkaWdpdCAqLworCXArKzsJCQkJLyogcG9pbnQgcGFzdCByYWRp eCBpbmRpY2F0b3IgKi8KKwlicmVhazsKKyAgICAgIGNhc2UgJ3gnOgkJCQkvKiBTdGFydHMgd2l0 aCB4IG9yIFggKi8KKyAgICAgIGNhc2UgJ1gnOgorCXJhZGl4ID0gMTY7CQkJLyogSGV4YWRlY2lt YWwgKi8KKwlwKys7CQkJCS8qIHBvaW50IHBhc3QgcmFkaXggaW5kaWNhdG9yICovCisJYnJlYWs7 CisgICAgICBkZWZhdWx0OgkJCQkvKiBBbGwgb3RoZXJzICovCisjaWZkZWYgQ09NTUVOVAorCSpz ID0gcCsxOwkJCS8qIFRyZWF0IGFzIHF1b3RlIG9mIG5leHQgY2hhciAqLworCXJldHVybigqcCk7 CisjZWxzZQorCXJldHVybigtMSk7CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgIH0KKyAgICAv KiBGb3IgT1MvMiwgdGhlcmUgYXJlICJ3aWRlIiBjaGFyYWN0ZXJzIHJlcXVpcmVkIGZvciB0aGUg a2V5Ym9hcmQKKyAgICAgKiBiaW5kaW5nLCBpLmUgXDY0NCBhbmQgc2ltaWxhciBjb2RlcyBsYXJn ZXIgdGhhbiAyNTUgKGJ5dGUpLgorICAgICAqIEZvciB0aGlzIHB1cnBvc2UsIGdpdmUgdXAgY2hl Y2tpbmcgZm9yIDwgMjU2LiBJZiBzb21lb25lIG1lYW5zCisgICAgICogXDI2NiBzaG91bGQgcmVz dWx0IGluIFwyNiBmb2xsb3dlZCBieSBhICI2IiBjaGFyYWN0ZXIsIGhlIHNob3VsZAorICAgICAq IGFsd2F5cyB3cml0ZSBcezI2fTYgYW55d2F5LiAgTm93LCByZXR1cm4gb25seSB0aGUgbG93ZXIg Ynl0ZSBvZgorICAgICAqIHRoZSByZXN1bHQsIGkuZS4gMTAsIGJ1dCBlYXQgdXAgdGhlIHdob2xl IFwyNjYgc2VxdWVuY2UgYW5kCisgICAgICogcHV0IHRoZSB3aWRlIHJlc3VsdCAyNjYgaW50byBh IGdsb2JhbCB2YXJpYWJsZS4gIFllcywgdGhhdCdzIG5vdAorICAgICAqIHRoZSBtb3N0IGJlYXV0 aWZ1bCBwcm9ncmFtbWluZyBzdHlsZSBidXQgcmVxdWlyZXMgdGhlIGxlYXN0CisgICAgICogYW1v dW50IG9mIGNoYW5nZXMgdG8gb3RoZXIgcm91dGluZXMuCisgICAgICovCisgICAgaWYgKCpwID09 ICd7JykgewkJCS8qIFN1biBNYXkgMTEgMjA6MDA6NDAgMjAwMyAqLworCWJyYWNlID0gMTsJCQkv KiBBbGxvdyB7fSBhZnRlciByYWRpeCBpbmRpY2F0b3IgKi8KKwlwKys7CisgICAgfQorICAgIGlm IChyYWRpeCA8PSAxMCkgewkJCS8qIE51bWJlciBpbiByYWRpeCA4IG9yIDEwICovCisJZm9yICgg eCA9IHkgPSAwOworIAkgICAgICAoKnApICYmICgqcCA+PSAnMCcpICYmICgqcCA8PSBoZCkKKyNp ZmRlZiBPUzIKKyAgICAgICAgICAgICAgICAgICAmJiAoeSA8IDUpICYmICh4KnJhZGl4IDwgS01T SVpFKTsKKyAgICAgICAgICAgICAgLyogdGhlIG1heGltdW0gbmVlZGVkIHZhbHVlIFw4MTk2IGlz IDQgZGlnaXRzIGxvbmcgKi8KKyAgICAgICAgICAgICAgLyogd2hpbGUgYXMgb2N0YWwgaXQgcmVx dWlyZXMgXDEzNzcsIGkuZS4gNSBkaWdpdHMgKi8KKyNlbHNlCisgICAgICAgICAgICAgICAgICAg JiYgKHkgPCAzKSAmJiAoeCpyYWRpeCA8IDI1Nik7CisjZW5kaWYgLyogT1MyICovCisJICAgICAg cCsrLHkrKykgeworCSAgICB4ID0geCAqIHJhZGl4ICsgKGludCkgKnAgLSA0ODsKKwl9CisjaWZk ZWYgT1MyCisgICAgICAgIHdpZGVyZXN1bHQgPSB4OwkJCS8qIFJlbWVtYmVyIHdpZGUgcmVzdWx0 ICovCisgICAgICAgIHggJj0gMjU1OworI2VuZGlmIC8qIE9TMiAqLworCWlmICh5ID09IDAgfHwg eCA+IDI1NSkgewkvKiBObyB2YWxpZCBkaWdpdHM/ICovCisJICAgICpzID0gcDsJCQkvKiBwb2lu dCBhZnRlciBpdCAqLworCSAgICByZXR1cm4oLTEpOwkJCS8qIHJldHVybiBmYWlsdXJlLiAqLwor CX0KKyAgICB9IGVsc2UgaWYgKHJhZGl4ID09IDE2KSB7CQkvKiBTcGVjaWFsIGNhc2UgZm9yIGhl eCAqLworCWlmICgoeCA9IHVuaGV4KCpwKyspKSA8IDApIHsgKnMgPSBwIC0gMTsgcmV0dXJuKC0x KTsgfQorCWlmICgoeSA9IHVuaGV4KCpwKyspKSA8IDApIHsgKnMgPSBwIC0gMjsgcmV0dXJuKC0x KTsgfQorCXggPSAoKHggPDwgNCkgJiAweEYwKSB8ICh5ICYgMHgwRik7CisjaWZkZWYgT1MyCisg ICAgICAgIHdpZGVyZXN1bHQgPSB4OworICAgICAgICBpZiAoKHkgPSB1bmhleCgqcCkpID49IDAp IHsKKyAgICAgICAgICAgcCsrOworCSAgIHdpZGVyZXN1bHQgPSAoKHggPDwgNCkgJiAweEZGMCkg fCAoeSAmIDB4MEYpOworICAgICAgICAgICB4ID0gd2lkZXJlc3VsdCAmIDI1NTsKKyAgICAgICAg fQorI2VuZGlmIC8qIE9TMiAqLworICAgIH0gZWxzZSB4ID0gLTE7CisgICAgaWYgKGJyYWNlICYm ICpwID09ICd9JyAmJiB4ID4gLTEpCS8qIFBvaW50IHBhc3QgY2xvc2luZyBicmFjZSwgaWYgYW55 ICovCisgICAgICBwKys7CisgICAgKnMgPSBwOwkJCQkvKiBQb2ludCB0byBuZXh0IGNoYXIgYWZ0 ZXIgc2VxdWVuY2UgKi8KKyAgICByZXR1cm4oeCk7CQkJCS8qIFJldHVybiB2YWx1ZSBvZiBzZXF1 ZW5jZSAqLworfQorCitpbnQJCQkJCS8qIENvbnZlcnQgaGV4IHN0cmluZyB0byBpbnQgKi8KKyNp ZmRlZiBDS19BTlNJQwordW5oZXgoY2hhciB4KQorI2Vsc2UKK3VuaGV4KHgpIGNoYXIgeDsKKyNl bmRpZiAvKiBDS19BTlNJQyAqLworLyogdW5oZXggKi8geworCisgICAgaWYgKHggPj0gJzAnICYm IHggPD0gJzknKQkJLyogMC05IGlzIG9mZnNldCBieSBoZXggMzAgKi8KKyAgICAgIHJldHVybih4 IC0gMHgzMCk7CisgICAgZWxzZSBpZiAoeCA+PSAnQScgJiYgeCA8PSAnRicpCS8qIEEtRiBvZmZz ZXQgYnkgaGV4IDM3ICovCisgICAgICByZXR1cm4oeCAtIDB4MzcpOworICAgIGVsc2UgaWYgKHgg Pj0gJ2EnICYmIHggPD0gJ2YnKQkvKiBhLWYgb2Zmc2V0IGJ5IGhleCA1NyAqLworICAgICAgcmV0 dXJuKHggLSAweDU3KTsJCQkvKiAob2J2aW91c2x5IEFTQ0lJIGRlcGVuZGVudCkgKi8KKyAgICBl bHNlIHJldHVybigtMSk7Cit9CisKKy8qICBMIE8gTyBLIFUgUCAgLS0gIExvb2t1cCB0aGUgc3Ry aW5nIGluIHRoZSBnaXZlbiBhcnJheSBvZiBzdHJpbmdzICAqLworCisvKgorICBDYWxsIHRoaXMg d2F5OiAgdiA9IGxvb2t1cCh0YWJsZSx3b3JkLG4sJngpOworCisgICAgdGFibGUgLSBhICdzdHJ1 Y3Qga2V5dGFiJyB0YWJsZS4KKyAgICB3b3JkICAtIHRoZSB0YXJnZXQgc3RyaW5nIHRvIGxvb2sg dXAgaW4gdGhlIHRhYmxlLgorICAgIG4gICAgIC0gdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0 aGUgdGFibGUuCisgICAgeCAgICAgLSBhZGRyZXNzIG9mIGFuIGludGVnZXIgZm9yIHJldHVybmlu ZyB0aGUgdGFibGUgYXJyYXkgaW5kZXgsCisJICAgIG9yIE5VTEwgaWYgeW91IGRvbid0IG5lZWQg YSB0YWJsZSBpbmRleC4KKworICBUaGUga2V5d29yZCB0YWJsZSBtdXN0IGJlIGFycmFuZ2VkIGlu IGFzY2VuZGluZyBhbHBoYWJldGljYWwgb3JkZXI7CisgIGFscGhhYmV0aWMgY2FzZSBkb2Vzbid0 IG1hdHRlciBidXQgbGV0dGVycyBhcmUgdHJlYXRlZCBhcyBsb3dlcmNhc2UKKyAgZm9yIHB1cnBv c2VzIG9mIG9yZGVyaW5nOyB0aHVzICJeIiBhbmQgIl8iIGNvbWUgKmJlZm9yZSogdGhlIGxldHRl cnMsCisgIG5vdCBhZnRlciB0aGVtLgorCisgIFJldHVybnMgdGhlIGtleXdvcmQncyBhc3NvY2lh dGVkIHZhbHVlICh6ZXJvIG9yIGdyZWF0ZXIpIGlmIGZvdW5kLAorICB3aXRoIHRoZSB2YXJpYWJs ZSB4IHNldCB0byB0aGUga2V5d29yZC10YWJsZSBpbmRleC4gIElmIGlzIGxvb2t1cCgpCisgIGlz IG5vdCBzdWNjZXNzZnVsLCBpdCByZXR1cm5zOgorCisgICAtMyBpZiBub3RoaW5nIHRvIGxvb2sg dXAgKHRhcmdldCB3YXMgbnVsbCksCisgICAtMiBpZiBhbWJpZ3VvdXMsCisgICAtMSBpZiBub3Qg Zm91bmQuCisKKyAgQSBtYXRjaCBpcyBzdWNjZXNzZnVsIGlmIHRoZSB0YXJnZXQgbWF0Y2hlcyBh IGtleXdvcmQgZXhhY3RseSwgb3IgaWYKKyAgdGhlIHRhcmdldCBpcyBhIHByZWZpeCBvZiBleGFj dGx5IG9uZSBrZXl3b3JkLiAgSXQgaXMgYW1iaWd1b3VzIGlmIHRoZQorICB0YXJnZXQgbWF0Y2hl cyB0d28gb3IgbW9yZSBrZXl3b3JkcyBmcm9tIHRoZSB0YWJsZS4KKworICBMb29rdXAoKSBpcyB0 aGUgY3JpdGljYWwgcm91dGluZSBpbiBzY3JpcHRzIGFuZCBzbyBpcyBvcHRpbWl6ZWQgd2l0aCBh CisgIHNpbXBsZSBzdGF0aWMgY2FjaGUgcGx1cyBzb21lIG90aGVyIHRyaWNrcy4gIE1heWJlIGl0 IGNvdWxkIGJlIGltcHJvdmVkCisgIGZ1cnRoZXIgd2l0aCBiaW5hcnkgc2VhcmNoIG9yIGhhc2gg dGVjaG5pcXVlcyBidXQgSSBkb3VidCBpdCBzaW5jZSBtb3N0CisgIGtleXdvcmQgdGFibGVzIGFy ZSBmYWlybHkgc2hvcnQuCisqLworCisjaWZkZWYgVVNFX0xVQ0FDSEUJCQkvKiBMb29rdXAgY2Fj aGUgKi8KK2V4dGVybiBpbnQgbHVzaXplOwkJCS8qIChpbml0aWFsaXplZCBpbiBja3V1czUuYykg Ki8KK2V4dGVybiBjaGFyICogbHVjbWRbXTsKK2V4dGVybiBpbnQgbHV2YWxbXTsKK2V4dGVybiBp bnQgbHVpZHhbXTsKK2V4dGVybiBzdHJ1Y3Qga2V5dGFiICogbHV0YWJbXTsKK2xvbmcgbHVoaXRz ID0gMEw7Citsb25nIGx1Y2FsbHMgPSAwTDsKK2xvbmcgeHhoaXRzID0gMEw7Citsb25nIGx1bG9v cCA9IDBMOworI2VuZGlmIC8qIFVTRV9MVUNBQ0hFICovCisKK2ludAorbG9va3VwKHRhYmxlLGNt ZCxuLHgpIGNoYXIgKmNtZDsgc3RydWN0IGtleXRhYiB0YWJsZVtdOyBpbnQgbiwgKng7IHsKKwor ICAgIHJlZ2lzdGVyIGludCBpLCBtOworICAgIGludCB2LCBsZW4sIGNtZGxlbiA9IDA7CisgICAg Y2hhciBjID0gTlVMLCBjMSwgKnM7CisKKy8qIEdldCAxc3QgY2hhciBvZiBzZWFyY2ggb2JqZWN0 LCBpZiBpdCdzIG51bGwgcmV0dXJuIC0zLiAqLworCisgICAgaWYgKCFjbWQgfHwgbiA8IDEpCQkJ LyogRGVmZW5zZSBkZSBudWxsYXJnICovCisgICAgICByZXR1cm4oLTMpOworICAgIGMxID0gKmNt ZDsJCQkJLyogRmlyc3QgY2hhcmFjdGVyICovCisgICAgaWYgKCFjMSkJCQkJLyogTWFrZSBzdXJl IHRoZXJlIGlzIG9uZSAqLworICAgICAgcmV0dXJuKC0zKTsKKyAgICBpZiAoaXN1cHBlcihjMSkp CQkJLyogSWYgbGV0dGVyIG1ha2UgaXQgbG93ZXJjYXNlICovCisgICAgICBjMSA9IHRvbG93ZXIo YzEpOworCisjaWZkZWYgVVNFX0xVQ0FDSEUJCQkvKiBsb29rdXAoKSBjYWNoZSAqLworICAgIG0g PSBsdXNpemU7CisgICAgbHVjYWxscysrOwkJCQkvKiBDb3VudCB0aGlzIGxvb2t1cCgpIGNhbGwg Ki8KKyAgICBmb3IgKGkgPSAwOyBpIDwgbTsgaSsrKSB7CQkvKiBMb29wIHRocnUgY2FjaGUgKi8K KwlpZiAoKihsdWNtZFtpXSkgPT0gYzEpIHsJLyogU2FtZSBhcyAxc3QgY2hhciBvZiBzZWFyY2gg aXRlbT8gKi8KKwkgICAgaWYgKGx1dGFiW2ldID09IHRhYmxlKSB7CS8qIFllcyAtIHNhbWUgdGFi bGUgdG9vPyAqLworCQlpZiAoIXN0cmNtcChjbWQsbHVjbWRbaV0pKSB7IC8qIFllcyAtIGNvbXBh cmUgKi8KKwkJICAgIGlmICh4KSAqeCA9IGx1aWR4W2ldOyAgICAvKiBNYXRjaCAtIHJldHVybiBp bmRleCAqLworCQkgICAgbHVoaXRzKys7ICAgICAgICAgICAgICAgIC8qIENvdW50IGNhY2hlIGhp dCAqLworCQkgICAgcmV0dXJuKGx1dmFsW2ldKTsgICAgICAgIC8qIFJldHVybiBhc3NvY2lhdGVk IHZhbHVlICovCisJCX0KKwkgICAgfQorCX0KKyAgICB9CisjZW5kaWYgLyogVVNFX0xVQ0FDSEUg Ki8KKworLyogTm90IG51bGwsIG5vdCBpbiBjYWNoZSwgbG9vayBpdCB1cCAqLworCisgICAgcyA9 IGNtZDsKKyAgICB3aGlsZSAoKnMrKykgY21kbGVuKys7CQkvKiBMZW5ndGggb2YgdGFyZ2V0ICov CisvKgorICBRdWljayBiaW5hcnkgc2VhcmNoIHRvIGZpbmQgbGFzdCB0YWJsZSBlbnRyeSB3aG9z ZSBmaXJzdCBjaGFyYWN0ZXIgaXMKKyAgbGV4aWNhbGx5IGxlc3MgdGhhbiB0aGUgZmlyc3QgY2hh cmFjdGVyIG9mIHRoZSBzZWFyY2ggb2JqZWN0LiAgVGhpcyBpcworICB0aGUgc3RhcnRpbmcgcG9p bnQgb2YgdGhlIG5leHQgbG9vcCwgd2hpY2ggbXVzdCBnbyBpbiBzZXF1ZW5jZSBzaW5jZSBpdAor ICBjb21wYXJlcyBhZGphY2VudCB0YWJsZSBlbnRyaWVzLgorKi8KKyAgICBpZiAobiA8IDUpIHsJ CQkvKiBOb3Qgd29ydGggaXQgZm9yIHNtYWxsIHRhYmxlcyAqLworCWkgPSAwOworICAgIH0gZWxz ZSB7CisJaW50IGxvID0gMDsKKwlpbnQgaGkgPSBuOworCWludCBjb3VudCA9IDA7CisJd2hpbGUg KGxvKzIgPCBoaSAmJiArK2NvdW50IDwgMTIpIHsKKwkgICAgaSA9IGxvICsgKChoaSAtIGxvKSAv IDIpOworCSAgICBjID0gKih0YWJsZVtpXS5rd2QpOworCSAgICBpZiAoaXN1cHBlcihjKSkgYyA9 IHRvbG93ZXIoYyk7CisJICAgIGlmIChjIDwgYzEpIHsKKwkJbG8gPSBpOworCSAgICB9IGVsc2Ug eworCQloaSA9IGk7CisJICAgIH0KKwl9CisJaSA9IChjIDwgYzEpID8gbG8rMSA6IGxvOworI2lm ZGVmIFVTRV9MVUNBQ0hFCisJaWYgKGkgPiAwKSB4eGhpdHMrKzsKKyNlbmRpZiAvKiBVU0VfTFVD QUNIRSAqLworICAgIH0KKyAgICBmb3IgKCA7IGkgPCBuLTE7IGkrKykgeworI2lmZGVmIFVTRV9M VUNBQ0hFCisJbHVsb29wKys7CisjZW5kaWYgLyogVVNFX0xVQ0FDSEUgKi8KKwl2ID0gMDsKKwlj ID0gKih0YWJsZVtpXS5rd2QpOworCWlmIChjKSB7CisJICAgIGlmIChpc3VwcGVyKGMpKSBjID0g dG9sb3dlcihjKTsKKworCSAgICAvKiBUaGUgZm9sbG93aW5nIGlzIGEgYmlnIHBlcmZvcm1hbmNl IGJvb3N0ZXIgYnV0IG1ha2VzIGl0ICovCisJICAgIC8qIGFic29sdXRlbHkgZXNzZW50aWFsIHRo YXQgYWxsIGxvb2t1cCgpIHRhYmxlcyBhcmUgaW4gb3JkZXIuICovCisKKwkgICAgaWYgKGMgPiBj MSkJCQkvKiBMZWF2ZSBlYXJseSBpZiBwYXN0IG91ciBtYXJrICovCisJICAgICAgcmV0dXJuKC0x KTsKKworI2lmZGVmIERFQlVHCisJICAgIC8qIFVzZSBMT0cgREVCVUcgdG8gY2hlY2sgKi8KKwor CSAgICBpZiAoZGVibG9nKSB7CisJCWlmIChja3N0cmNtcCh0YWJsZVtpXS5rd2QsdGFibGVbaSsx XS5rd2QsMCwwKSA+IDApIHsKKwkJICAgIHByaW50ZigiVEFCTEUgT1VUIE9GIE9SREVSIFslc10g WyVzXVxuIiwKKwkJCSAgIHRhYmxlW2ldLmt3ZCx0YWJsZVtpKzFdLmt3ZCk7CisKKwkJfQorCSAg ICB9CisjZW5kaWYgLyogREVCVUcgKi8KKworCSAgICBpZiAoYyA9PSBjMSkgeworCQlsZW4gPSAw OworCQlzID0gdGFibGVbaV0ua3dkOworCQl3aGlsZSAoKnMrKykgbGVuKys7CisJCWlmICgobGVu ID09IGNtZGxlbiAmJiAhY2tzdHJjbXAodGFibGVbaV0ua3dkLGNtZCxsZW4sMCkpIHx8CisJCSAg ICAoKHYgPSAhY2tzdHJjbXAodGFibGVbaV0ua3dkLGNtZCxjbWRsZW4sMCkpICYmCisJCSAgICAg Y2tzdHJjbXAodGFibGVbaSsxXS5rd2QsY21kLGNtZGxlbiwwKSkpIHsKKwkJICAgIGlmICh4KSAq eCA9IGk7CisJCSAgICByZXR1cm4odGFibGVbaV0ua3d2YWwpOworCQl9CisJICAgIH0gZWxzZSB2 ID0gMDsKKwl9CisgICAgICAgIGlmICh2KSB7CQkJLyogQW1iaWd1b3VzICovCisJICAgIGlmICh4 KSAqeCA9IGk7CQkvKiBTZXQgaW5kZXggb2YgZmlyc3QgbWF0Y2ggKi8KKwkgICAgcmV0dXJuKC0y KTsKKwl9CisgICAgfQorCisvKiBMYXN0IChvciBvbmx5KSBlbGVtZW50ICovCisKKyAgICBpZiAo IWNrc3RyY21wKHRhYmxlW24tMV0ua3dkLGNtZCxjbWRsZW4sMCkpIHsKKyAgICAgICAgaWYgKHgp ICp4ID0gbi0xOworCS8qIGRlYnVnKEYxMTEsImxvb2t1cCIsdGFibGVbaV0ua3dkLHRhYmxlKTsg Ki8KKyAgICAgICAgcmV0dXJuKHRhYmxlW24tMV0ua3d2YWwpOworICAgIH0gZWxzZSByZXR1cm4o LTEpOworfQorCisvKgorICB4IGwgbyBvIGsgdSBwCisKKyAgTGlrZSBsb29rdXAsIGJ1dCByZXF1 aXJlcyBhIGZ1bGwgKGJ1dCBjYXNlLWluZGVwZW5kZW50KSBtYXRjaAorICBhbmQgZG9lcyBOT1Qg cmVxdWlyZSB0aGUgdGFibGUgdG8gYmUgaW4gb3JkZXIuCisqLworaW50Cit4bG9va3VwKHRhYmxl LGNtZCxuLHgpIHN0cnVjdCBrZXl0YWIgdGFibGVbXTsgY2hhciAqY21kOyBpbnQgbiwgKng7IHsK KyAgICByZWdpc3RlciBpbnQgaTsKKyAgICBpbnQgbGVuLCBjbWRsZW4sIG9uZSA9IDA7CisgICAg cmVnaXN0ZXIgY2hhciBjLCBjMiwgKiBzLCAqIHMyOworCisgICAgaWYgKCFjbWQpIGNtZCA9ICIi OwkJCS8qIENoZWNrIGFyZ3MgKi8KKyAgICBpZiAoISpjbWQgfHwgbiA8IDEpIHJldHVybigtMyk7 CisKKyAgICBjID0gKmNtZDsJCQkJLyogRmlyc3QgY2hhciBvZiBzdHJpbmcgdG8gbG9vayB1cCAq LworICAgIGlmICghKihjbWQrMSkpIHsJCQkvKiBTcGVjaWFsIGhhbmRsaW5nIGZvciAxLWNoYXIg bmFtZXMgKi8KKwljbWRsZW4gPSAxOworCWlmIChpc3VwcGVyKGMpKQorCSAgYyA9IHRvbG93ZXIo Yyk7CisJb25lID0gMTsKKyAgICB9IGVsc2UgeworCWNtZGxlbiA9IDA7CisJcyA9IGNtZDsKKwl3 aGlsZSAoKnMrKykgY21kbGVuKys7CisJYyA9ICpjbWQ7CisJaWYgKGlzdXBwZXIoYykpCisJICBj ID0gdG9sb3dlcihjKTsKKyAgICB9CisgICAgaWYgKGNtZGxlbiA8IDEpCisgICAgICByZXR1cm4o LTMpOworCisgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworCXMgPSB0YWJsZVtpXS5rd2Q7 CQkvKiBUaGlzIGVudHJ5ICovCisJaWYgKCFzKSBzID0gIiI7CisJaWYgKCEqcykgY29udGludWU7 CQkvKiBFbXB0eSB0YWJsZSBlbnRyeSAqLworCWMyID0gKnM7CisJaWYgKGlzdXBwZXIoYzIpKSBj MiA9IHRvbG93ZXIoYzIpOworCWlmIChjICE9IGMyKSBjb250aW51ZTsJCS8qIEZpcnN0IGNoYXIg ZG9lc24ndCBtYXRjaCAqLworCWlmIChvbmUpIHsJCQkvKiBOYW1lIGlzIG9uZSBjaGFyIGxvbmcg Ki8KKwkgICAgaWYgKCEqKHMrMSkpIHsKKwkJaWYgKHgpICp4ID0gaTsKKyAgICAgICAgICAgICAg ICAqY21kID0gYzsgCisJCXJldHVybih0YWJsZVtpXS5rd3ZhbCk7CS8qIFNvIGlzIHRhYmxlIGVu dHJ5ICovCisJICAgIH0KKwl9IGVsc2UgewkJCS8qIE90aGVyd2lzZSBkbyBzdHJpbmcgY29tcGFy aXNvbiAqLworCSAgICBzMiA9IHM7CisJICAgIGxlbiA9IDA7CisJICAgIHdoaWxlICgqczIrKykg bGVuKys7CisJICAgIGlmIChsZW4gPT0gY21kbGVuICYmICFja3N0cmNtcChzLGNtZCwtMSwwKSkg eworCQlpZiAoeCkgKnggPSBpOworCQlyZXR1cm4odGFibGVbaV0ua3d2YWwpOworCSAgICB9CisJ fQorICAgIH0KKyAgICByZXR1cm4oLTEpOworfQorCisvKiBSZXZlcnNlIGxvb2t1cCAqLworCitj aGFyICoKK3Jsb29rdXAodGFibGUsbix4KSBzdHJ1Y3Qga2V5dGFiIHRhYmxlW107IGludCBuLCB4 OyB7CisgICAgaW50IGk7CisgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworICAgICAgICBp ZiAodGFibGVbaV0ua3d2YWwgPT0geCkKKwkgIHJldHVybih0YWJsZVtpXS5rd2QpOworICAgIH0K KyAgICByZXR1cm4oTlVMTCk7Cit9CisKKyNpZm5kZWYgTk9JQ1AKK2ludAorY21kc3F1byh4KSBp bnQgeDsgeworICAgIHF1b3RpbmcgPSB4OworICAgIHJldHVybigxKTsKK30KKworaW50CitjbWRn cXVvKCkgeworICAgIHJldHVybihxdW90aW5nKTsKK30KKyNlbmRpZiAvKiBOT0lDUCAqLwoKZGlm ZiAtLWdpdCBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1Y21kLmMu Z2xpYmMyXzI4IGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3VjbWQu Yy5nbGliYzJfMjgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjc0ZGMyZAot LS0gL2Rldi9udWxsCisrKyBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIv Y2t1Y21kLmMuZ2xpYmMyXzI4CkBAIC0wLDAgKzEsNzkxOSBAQAorI2luY2x1ZGUgImNrY3N5bS5o IgorCitjaGFyICpjbWR2ID0gIkNvbW1hbmQgcGFja2FnZSA5LjAuMTY4LCAxMiBNYXJjaCAyMDEw IjsKKworLyogIEMgSyBVIEMgTSBEICAtLSAgSW50ZXJhY3RpdmUgY29tbWFuZCBwYWNrYWdlIGZv ciBVbml4ICAqLworCisvKiAoSW4gcmVhbGl0eSwgaXQncyBmb3IgYWxsIHBsYXRmb3Jtcywgbm90 IGp1c3QgVW5peCkgKi8KKworLyoKKyAgQXV0aG9yOiBGcmFuayBkYSBDcnV6IChmZGNAY29sdW1i aWEuZWR1KSwKKyAgQ29sdW1iaWEgVW5pdmVyc2l0eSBBY2FkZW1pYyBJbmZvcm1hdGlvbiBTeXN0 ZW1zLCBOZXcgWW9yayBDaXR5LgorCisgIENvcHlyaWdodCAoQykgMTk4NSwgMjAxMCwKKyAgICBU cnVzdGVlcyBvZiBDb2x1bWJpYSBVbml2ZXJzaXR5IGluIHRoZSBDaXR5IG9mIE5ldyBZb3JrLgor ICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBTZWUgdGhlIEMtS2VybWl0IENPUFlJTkcuVFhUIGZp bGUgb3IgdGhlCisgICAgY29weXJpZ2h0IHRleHQgaW4gdGhlIGNrY21haS5jIG1vZHVsZSBmb3Ig ZGlzY2xhaW1lciBhbmQgcGVybWlzc2lvbnMuCisqLworCisjZGVmaW5lIFRPS1BSRUNIRUNLCisK KyNkZWZpbmUgRE9DSEtWQVIKKworLyogQ29tbWFuZC10ZXJtaW5hbC10by1DLUtlcm1pdCBjaGFy YWN0ZXIgbWFzayAqLworCisjaWZkZWYgT1MyCQkJCS8qIEs5NSAqLworaW50IGNtZG1zayA9IDI1 NTsJCQkvKiAoYWx3YXlzIHdhcyAyNTUpICovCisjZWxzZQkJCQkJLyogQWxsIG90aGVycy4uLiAq LworaW50IGNtZG1zayA9IDI1NTsJCQkvKiAzMSBEZWMgMjAwMCAod2FzIDEyNykgKi8KKyNlbmRp ZiAvKiBPUzIgKi8KKworI2lmZGVmIEJTX0RJUlNFUAkJCS8qIERpcmVjdG9yeSBzZXBhcmF0b3Ig aXMgYmFja3NsYXNoICovCisjdW5kZWYgQlNfRElSU0VQCisjZW5kaWYgLyogQlNfRElSU0VQICov CisKKyNpZmRlZiBPUzIKKyNkZWZpbmUgQlNfRElSU0VQCisjZW5kaWYgLyogQlNfRElSU0VQICov CisKKyNkZWZpbmUgQ0tVQ01EX0MKKworI2luY2x1ZGUgImNrY2RlYi5oIiAgICAgICAgICAgICAg ICAgICAgIC8qIEZvcm1hdHMgZm9yIGRlYnVnKCksIGV0Yy4gKi8KKyNpbmNsdWRlICJja2NrZXIu aCIJCQkvKiBOZWVkZWQgZm9yIEJJR0JVRk9LIGRlZmluaXRpb24gKi8KKyNpbmNsdWRlICJja2Nu ZXQuaCIJCQkvKiBOZWVkZWQgZm9yIHNlcnZlci1zaWRlIFRlbG5ldCAqLworI2luY2x1ZGUgImNr dWNtZC5oIgkJCS8qIE5lZWRlZCBmb3IgZXZlcnl0aGluZyAqLworI2luY2x1ZGUgImNrdXVzci5o IiAgICAgICAgICAgICAgICAgICAgIC8qIE5lZWRlZCBmb3IgcHJvbXB0IGxlbmd0aCAqLworCisj aWZuZGVmIE5PQVJST1dLRVlTCisjaWZuZGVmIE5PRVNDU0VRCisjaWZkZWYgVk1TT1JVTklYCisj ZGVmaW5lIFVTRV9BUlJPV0tFWVMJCQkvKiBVc2UgYXJyb3cga2V5cyBmb3IgY29tbWFuZCByZWNh bGwgKi8KKyNlbmRpZiAvKiBWTVNPUlVOSVggKi8KKyNlbmRpZiAvKiBOT0VTQ1NFUSAqLworI2Vu ZGlmIC8qIE5PQVJST1dLRVlTICovCisKKyN1bmRlZiBDS1VDTURfQworCitfUFJPVE9UWVAoIGlu dCB1bmhleCwgKGNoYXIpICk7CitfUFJPVE9UWVAoIHN0YXRpYyBWT0lEIGNtZGNscnNjbiwgKHZv aWQpICk7CisKKyNpZmRlZiBDS0xFQVJOCitfUFJPVE9UWVAoIFZPSUQgbGVhcm5jbWQsIChjaGFy ICopICk7CisjZW5kaWYgLyogQ0tMRUFSTiAqLworCitzdGF0aWMgY2hhciAqbW9uYW1lW10gPSB7 CisgICAgIkphbiIsICJGZWIiLCAiTWFyIiwgIkFwciIsICJNYXkiLCAiSnVuIiwKKyAgICAiSnVs IiwgIkF1ZyIsICJTZXAiLCAiT2N0IiwgIk5vdiIsICJEZWMiCit9OworCitzdHJ1Y3Qga2V5dGFi IGNtb250aHNbXSA9IHsKKyAgeyAiYXByaWwiLCAgICAgNCwgMCB9LAorICB7ICJhdWd1c3QiLCAg ICA4LCAwIH0sCisgIHsgImRlY2VtYmVyIiwgMTIsIDAgfSwKKyAgeyAiZmVicnVhcnkiLCAgMiwg MCB9LAorICB7ICJqYW51YXJ5IiwgICAxLCAwIH0sCisgIHsgImp1bHkiLCAgICAgIDcsIDAgfSwK KyAgeyAianVuZSIsICAgICAgNiwgMCB9LAorICB7ICJtYXJjaCIsICAgICAzLCAwIH0sCisgIHsg Im1heSIsICAgICAgIDUsIDAgfSwKKyAgeyAibm92ZW1iZXIiLCAxMSwgMCB9LAorICB7ICJvY3Rv YmVyIiwgIDEwLCAwIH0sCisgIHsgInNlcHRlbWJlciIsIDksIDAgfQorfTsKKworI2lmbmRlZiBO T0lDUCAgICAgLyogVGhlIHJlc3Qgb25seSBpZiBpbnRlcmFjdGl2ZSBjb21tYW5kIHBhcnNpbmcg c2VsZWN0ZWQgKi8KKworI2lmbmRlZiBOT1NQTAorX1BST1RPVFlQKCBpbnQgY2hrdmFyLCAoY2hh ciAqKSApOworZXh0ZXJuIGludCBhc2tmbGFnLCBlY2hvc3RhcnM7CisjZW5kaWYgLyogTk9TUEwg Ki8KKworI2lmZGVmIENLUk9PVAorZXh0ZXJuIGludCBja3Jvb3RlcnI7CisjZW5kaWYgLyogQ0tS T09UICovCisKKyNpZmRlZiBJS1NECitleHRlcm4gaW50IGluc2VydmVyOworI2VuZGlmIC8qIElL U0QgKi8KKworaW50IGNtZmxkZmxncyA9IDA7CQkJLyogRmxhZ3MgZm9yIGNtZmxkKCkgKi8KK2lu dCBjbWt3ZmxncyA9IDA7CQkJLyogRmxhZ3MgZnJvbSBsYXN0IGtleXdvcmQgcGFyc2UgKi8KK3N0 YXRpYyBpbnQgbm9tc2cgPSAwOworc3RhdGljIGludCBibG9ja2x2bCA9IDA7CQkvKiBCbG9jayBu ZXN0aW5nIGxldmVsICovCitzdGF0aWMgaW50IGxpbmViZWdpbiA9IDA7CQkvKiBGbGFnIGZvciBh dCBzdGFydCBvZiBhIGxpbmUgKi8KK3N0YXRpYyBpbnQgcXVvdGluZyA9IDE7CQkJLyogUXVvdGlu ZyBpcyBhbGxvd2VkICovCitzdGF0aWMgaW50IHN3YXJnID0gMDsJCQkvKiBQYXJzaW5nIGEgc3dp dGNoIGFyZ3VtZW50ICovCitzdGF0aWMgaW50IHhjbWZkYiA9IDA7CQkJLyogRmxhZyBmb3IgcGFy c2luZyBjaGFpbmVkIGZkYnMuLi4gKi8KK3N0YXRpYyBpbnQgY2hzcmMgPSAwOwkJCS8qIFNvdXJj ZSBvZiBjaGFyYWN0ZXIsIDEgPSB0dHkgKi8KK3N0YXRpYyBpbnQgbmV3Y21kID0gMDsJCQkvKiBT ZWUgYWRkY21kKCkgKi8KKworI2lmZGVmIEJTX0RJUlNFUAorc3RhdGljIGludCBkaXJuYW1mbGcg PSAwOworI2VuZGlmIC8qIEJTX0RJUlNFUCAqLworCisvKgorTW9kZWxlZCBhZnRlciB0aGUgREVD U1lTVEVNLTIwIGNvbW1hbmQgcGFyc2VyICh0aGUgQ09NTkQgSlNZUyksIFJJUC4gRmVhdHVyZXM6 CisKKyAuIHBhcnNlcyBhbmQgdmVyaWZpZXMga2V5d29yZHMsIGZpbGVuYW1lcywgdGV4dCBzdHJp bmdzLCBudW1iZXJzLCBvdGhlciBkYXRhCisgLiBkaXNwbGF5cyBhcHByb3ByaWF0ZSBtZW51IG9y IGhlbHAgbWVzc2FnZSB3aGVuIHVzZXIgdHlwZXMgIj8iCisgLiBkb2VzIGtleXdvcmQgYW5kIGZp bGVuYW1lIGNvbXBsZXRpb24gd2hlbiB1c2VyIHR5cGVzIEVTQyBvciBUQUIKKyAuIGRvZXMgcGFy dGlhbCBrZXl3b3JkIGFuZCBmaWxlbmFtZSBjb21wbGV0aW9uCisgLiBhY2NlcHRzIGFueSB1bmlx dWUgYWJicmV2aWF0aW9uIGZvciBhIGtleXdvcmQKKyAuIGFsbG93cyBrZXl3b3JkcyB0byBoYXZl IGF0dHJpYnV0ZXMsIGxpa2UgImludmlzaWJsZSIgYW5kICJhYmJyZXZpYXRpb24iCisgLiBjYW4g c3VwcGx5IGRlZmF1bHRzIGZvciBmaWVsZHMgb21pdHRlZCBieSB1c2VyCisgLiBwcm92aWRlcyBj b21tYW5kIHJldHJ5IGFuZCByZWNhbGwKKyAuIHByb3ZpZGVzIGNoYXJhY3Rlciwgd29yZCwgYW5k IGxpbmUgZGVsZXRpb24gKGJ1dCBvbmx5IGZyb20gdGhlIGVuZCkKKyAuIGFjY2VwdHMgaW5wdXQg ZnJvbSBrZXlib2FyZCwgY29tbWFuZCBmaWxlcywgbWFjcm9zLCBvciByZWRpcmVjdGVkIHN0ZGlu CisgLiBhbGxvd3MgZm9yIGZ1bGwgb3IgaGFsZiBkdXBsZXggb3BlcmF0aW9uLCBjaGFyYWN0ZXIg b3IgbGluZSBpbnB1dAorIC4gYWxsb3dzIFwtZXNjYXBlcyBmb3Igc3BlY2lhbCBjaGFyYWN0ZXJz CisgLiBhbGxvd3Mgc3BlY2lmaWNhdGlvbiBvZiBhIHVzZXIgZXhpdCB0byBleHBhbmQgdmFyaWFi bGVzLCBldGMuCisgLiBzZXR0YWJsZSBwcm9tcHQsIHByb3RlY3RlZCBmcm9tIGRlbGV0aW9uLCBk eW5hbWljYWxseSByZS1ldmFsdWF0ZWQgZWFjaCB0aW1lCisgLiBhbGxvd3MgY2hhaW5lZCBwYXJz ZSBmdW5jdGlvbnMuCisKK0Z1bmN0aW9uczoKKyBjbXNldHAgLSBTZXQgcHJvbXB0IChjbXByb20g aXMgcHJvbXB0IHN0cmluZykKKyBjbXNhdnAgLSBTYXZlIGN1cnJlbnQgcHJvbXB0CisgY21nZXRw ID0gR2V0IGN1cnJlbnQgcHJvbXB0CisgcHJvbXB0IC0gSXNzdWUgcHJvbXB0CisgY21pbmkgIC0g Q2xlYXIgdGhlIGNvbW1hbmQgYnVmZmVyIChiZWZvcmUgcGFyc2luZyBhIG5ldyBjb21tYW5kKQor IGNtcmVzICAtIFJlc2V0IGNvbW1hbmQgYnVmZmVyIHBvaW50ZXJzIChiZWZvcmUgcmVwYXJzaW5n KQorIGNta2V5ICAtIFBhcnNlIGEga2V5d29yZCBvciB0b2tlbiAoYWxzbyBjbWtleTIpCisgY21z d2kgIC0gUGFyc2UgYSBzd2l0Y2gKKyBjbW51bSAgLSBQYXJzZSBhIG51bWJlcgorIGNtaWZpICAt IFBhcnNlIGFuIGlucHV0IGZpbGUgbmFtZQorIGNtb2ZpICAtIFBhcnNlIGFuIG91dHB1dCBmaWxl IG5hbWUgKGFsc28gY21pZmlwLCBjbWlmaTIsIC4uLikKKyBjbWRpciAgLSBQYXJzZSBhIGRpcmVj dG9yeSBuYW1lIChhbHNvIGNtZGlycCkKKyBjbWZsZCAgLSBQYXJzZSBhbiBhcmJpdHJhcnkgZmll bGQKKyBjbXR4dCAgLSBQYXJzZSBhIHRleHQgc3RyaW5nCisgY21kYXRlIC0gUGFyc2UgYSBkYXRl LXRpbWUgc3RyaW5nCisgY21jZm0gIC0gUGFyc2UgY29tbWFuZCBjb25maXJtYXRpb24gKGVuZCBv ZiBsaW5lKQorIGNtZmRiICAtIFBhcnNlIGFueSBvZiBhIGxpc3Qgb2YgdGhlIGZvcmVnb2luZyAo Y2hhaW5lZCBwYXJzZSBmdW5jdGlvbnMpCisKK1JldHVybiBjb2RlczoKKyAtOTogbGlrZSAtMiBl eGNlcHQgdGhpcyBtb2R1bGUgYWxyZWFkeSBwcmludGVkIHRoZSBlcnJvciBtZXNzYWdlCisgLTM6 IG5vIGlucHV0IHByb3ZpZGVkIHdoZW4gcmVxdWlyZWQKKyAtMjogaW5wdXQgd2FzIGludmFsaWQg KGUuZy4gbm90IGEgbnVtYmVyIHdoZW4gYSBudW1iZXIgd2FzIHJlcXVpcmVkKQorIC0xOiByZXBh cnNlIHJlcXVpcmVkICh1c2VyIGRlbGV0ZWQgaW50byBhIHByZWNlZGluZyBmaWVsZCkKKyAgMCBv ciBncmVhdGVyOiBzdWNjZXNzCitTZWUgaW5kaXZpZHVhbCBmdW5jdGlvbnMgZm9yIGdyZWF0ZXIg ZGV0YWlsLgorCitCZWZvcmUgdXNpbmcgdGhlc2Ugcm91dGluZXMsIHRoZSBjYWxsZXIgc2hvdWxk ICNpbmNsdWRlICJja3VjbWQuaCIgYW5kIHNldCB0aGUKK3Byb2dyYW0ncyBwcm9tcHQgYnkgY2Fs bGluZyBjbXNldHAoKS4gIElmIHRoZSBmaWxlIHBhcnNpbmcgZnVuY3Rpb25zIGNtaWZpLAorY21v ZmksIG9yIGNtZGlyIGFyZSB0byBiZSB1c2VkLCB0aGlzIG1vZHVsZSBtdXN0IGJlIGxpbmtlZCB3 aXRoIGEgY2s/ZmlvIGZpbGUKK3N5c3RlbSBzdXBwb3J0IG1vZHVsZSBmb3IgdGhlIGFwcHJvcHJp YXRlIHN5c3RlbSwgZS5nLiBja3VmaW8gZm9yIFVuaXguICBJZgordGhlIGNhbGxlciBwdXRzIHRo ZSB0ZXJtaW5hbCBpbiBjaGFyYWN0ZXIgd2FrZXVwICgiY2JyZWFrIikgbW9kZSB3aXRoIG5vIGVj aG8sCit0aGVuIHRoZXNlIGZ1bmN0aW9ucyB3aWxsIHByb3ZpZGUgbGluZSBlZGl0aW5nIC0tIGNo YXJhY3Rlciwgd29yZCwgYW5kIGxpbmUKK2RlbGV0aW9uLCBhcyB3ZWxsIGFzIGtleXdvcmQgYW5k IGZpbGVuYW1lIGNvbXBsZXRpb24gdXBvbiBFU0MgYW5kIGhlbHAKK3N0cmluZ3MsIGtleXdvcmQs IG9yIGZpbGUgbWVudXMgdXBvbiAnPycuICBJZiB0aGUgY2FsbGVyIHB1dHMgdGhlIHRlcm1pbmFs CitpbnRvIGNoYXJhY3RlciB3YWtldXAvbm9lY2hvIG1vZGUsIGNhcmUgc2hvdWxkIGJlIHRha2Vu IHRvIHJlc3RvcmUgaXQgYmVmb3JlCitleGl0IGZyb20gb3IgaW50ZXJydXB0aW9uIG9mIHRoZSBw cm9ncmFtLiAgSWYgdGhlIGNoYXJhY3RlciB3YWtldXAgbW9kZSBpcyBub3QKK3NldCwgdGhlIHN5 c3RlbSdzIG93biBsaW5lIGVkaXRvciBtYXkgYmUgdXNlZC4KKworTk9URTogQ29udHJhcnkgdG8g ZXhwZWN0YXRpb25zLCBtYW55ICNpZmRlZidzIGhhdmUgYmVlbiBhZGRlZCB0byB0aGlzIG1vZHVs ZS4KK0FueSBvcGVyYXRpb24gcmVxdWlyaW5nIGFuICNpZmRlZiAobGlrZSBjbGVhciBzY3JlZW4s IGdldCBjaGFyYWN0ZXIgZnJvbQora2V5Ym9hcmQsIGVyYXNlIGNoYXJhY3RlciBmcm9tIHNjcmVl biwgZXRjKSBzaG91bGQgZXZlbnR1YWxseSBiZSB0dXJuZWQgaW50byBhCitjYWxsIHRvIGEgZnVu Y3Rpb24gdGhhdCBpcyBkZWZpbmVkIGluIGNrP3Rpby5jLCBidXQgdGhlbiBhbGwgdGhlIGNrP3Rp by5jCittb2R1bGVzIHdvdWxkIGhhdmUgdG8gYmUgY2hhbmdlZC4uLgorKi8KKworLyogSW5jbHVk ZXMgKi8KKworI2luY2x1ZGUgImNrY2tlci5oIgorI2luY2x1ZGUgImNrY2FzYy5oIgkJCS8qIEFT Q0lJIGNoYXJhY3RlciBzeW1ib2xzICovCisjaW5jbHVkZSAiY2t1Y21kLmgiICAgICAgICAgICAg ICAgICAgICAgLyogQ29tbWFuZCBwYXJzaW5nIGRlZmluaXRpb25zICovCisKKyNpZmRlZiBPU0Yx MworI2lmZGVmIENLX0FOU0lDCisjaWZkZWYgX05PX1BST1RPCisjdW5kZWYgX05PX1BST1RPCisj ZW5kaWYgLyogX05PX1BST1RPICovCisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKyNlbmRpZiAvKiBP U0YxMyAqLworCisjaWZuZGVmIEhQVVhQUkU2NQorI2luY2x1ZGUgPGVycm5vLmg+CQkJLyogRXJy b3IgbnVtYmVyIHN5bWJvbHMgKi8KKyNlbHNlCisjaWZuZGVmIEVSUk5PX0lOQ0xVREVECisjaW5j bHVkZSA8ZXJybm8uaD4JCQkvKiBFcnJvciBudW1iZXIgc3ltYm9scyAqLworI2VuZGlmCS8qIEVS Uk5PX0lOQ0xVREVEICovCisjZW5kaWYJLyogSFBVWFBSRTY1ICovCisKKyNpZmRlZiBPUzIKKyNp Zm5kZWYgTlQKKyNkZWZpbmUgSU5DTF9OT1BNCisjZGVmaW5lIElOQ0xfVklPCQkJLyogTmVlZGVk IGZvciBja29jb24uaCAqLworI2luY2x1ZGUgPG9zMi5oPgorI3VuZGVmIENPTU1FTlQKKyNlbHNl CisjZGVmaW5lIEFQSVJFVCBVTE9ORworI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNlbmRpZiAvKiBO VCAqLworI2luY2x1ZGUgImNrb2Nvbi5oIgorI2luY2x1ZGUgPGlvLmg+CisjZW5kaWYgLyogT1My ICovCisKKyNpZmRlZiBPU0sKKyNkZWZpbmUgY2MgY2NvdW50CQkJLyogT1MtOS82OEsgY29tcGls ZXIgYnVnICovCisjZW5kaWYgLyogT1NLICovCisKKyNpZmRlZiBHRU1ET1MJCQkJLyogQXRhcmkg U1QgKi8KKyNpZmRlZiBwdXRjaGFyCisjdW5kZWYgcHV0Y2hhcgorI2VuZGlmIC8qIHB1dGNoYXIg Ki8KKyNkZWZpbmUgcHV0Y2hhcih4KSBjb25vYyh4KQorI2VuZGlmIC8qIEdFTURPUyAqLworCisj aWZkZWYgQ0tfQVVUT0RMCitleHRlcm4gaW50IGNtZGFkbCwganVzdG9uZTsKKyNlbmRpZiAvKiBD S19BVVRPREwgKi8KKworZXh0ZXJuIGludCB0aW1lbGltaXQsIG56eG9wdHMsIG5vcHVzaCwgbm9s b2NhbCwgeGNtZHNyYywga2VlcGFsbGNoYXJzOworCisjaWZkZWYgQ0tTWVNMT0cKKyNpZmRlZiBV TklYCisjaWZkZWYgQ0tYUFJJTlRGCQkJLyogT3VyIHByaW50ZiBtYWNybyBjb25mbGljdHMgd2l0 aCAqLworI3VuZGVmIHByaW50ZgkJCQkvKiB1c2Ugb2YgInByaW50ZiIgaW4gc3lzbG9nLmggKi8K KyNlbmRpZiAvKiBDS1hQUklOVEYgKi8KKyNpZmRlZiBSVEFJWAorI2luY2x1ZGUgPHN5cy9zeXNs b2cuaD4KKyNlbHNlICAvKiBSVEFJWCAqLworI2luY2x1ZGUgPHN5c2xvZy5oPgorI2VuZGlmIC8q IFJUQUlYICovCisjaWZkZWYgQ0tYUFJJTlRGCisjZGVmaW5lIHByaW50ZiBja3hwcmludGYKKyNl bmRpZiAvKiBDS1hQUklOVEYgKi8KKyNlbmRpZiAvKiBVTklYICovCisjZW5kaWYgLyogQ0tTWVNM T0cgKi8KKworLyogTG9jYWwgdmFyaWFibGVzICovCisKK3N0YXRpYworaW50IHBzZXRmID0gMCwg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZsYWcgdGhhdCBwcm9tcHQgaGFzIGJlZW4gc2V0 ICovCisgICAgY2MgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2hhcmFjdGVy IGNvdW50ICovCisgICAgZHB4ID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRHVw bGV4ICgwID0gZnVsbCkgKi8KKyAgICBpbndvcmQgPSAwOwkJCQkvKiBJbiB0aGUgbWlkZGxlIG9m IGdldHRpbmcgYSB3b3JkICovCisKK2NoYXIgKmRmcHJvbSA9ICJDb21tYW5kPyAiOyAgICAgICAg ICAgICAvKiBEZWZhdWx0IHByb21wdCAqLworI2lmbmRlZiBOT0xBU1RGSUxFCitjaGFyICpsYXN0 ZmlsZSA9IE5VTEw7CQkJLyogTGFzdCBmaWxlc3BlYyAqLworc3RhdGljIGNoYXIgKnRtcGxhc3Rm aWxlID0gTlVMTDsJLyogTGFzdCBmaWxlc3BlYyBjYW5kaWRhdGUgKi8KKyNlbmRpZgkvKiBOT0xB U1RGSUxFICovCisKK2ludCBjbWZsZ3M7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBD b21tYW5kIGZsYWdzICovCitpbnQgY21mc2F2OwkJCQkvKiBBIHNhdmVkIHZlcnNpb24gb2YgdGhl bSAqLworCitzdGF0aWMgY2hhciBwdXNoYyA9IE5VTDsKK3N0YXRpYyBjaGFyIGJya2NoYXIgPSBO VUw7CisKKyNkZWZpbmUgQ01ERUZBVUxUIDEwMjMKK3N0YXRpYyBjaGFyIGNtZGVmYXVsdFtDTURF RkFVTFQrMV07CisKKyNpZmRlZiBEQ01EQlVGCitjaGFyICpjbWRidWYgPSBOVUxMOwkJCS8qIENv bW1hbmQgYnVmZmVyICovCitjaGFyICpzYXZidWYgPSBOVUxMOwkJCS8qIEJ1ZmZlciB0byBzYXZl IGNvcHkgb2YgY29tbWFuZCAqLworY2hhciAqYXRtYnVmID0gTlVMTDsJCQkvKiBBdG9tIGJ1ZmZl ciAtIGZvciBjdXJyZW50IGZpZWxkICovCitjaGFyICphdHhidWYgPSBOVUxMOwkJCS8qIEZvciBl eHBhbmRpbmcgdGhlIGF0b20gYnVmZmVyICovCitjaGFyICpwcmV2Y21kID0gTlVMTDsKK3N0YXRp YyBjaGFyICphdHlidWYgPSBOVUxMOwkJLyogRm9yIGNvcHlpbmcgYXRvbSBidWZmZXIgKi8KK3N0 YXRpYyBjaGFyICpmaWxidWYgPSBOVUxMOwkJLyogRmlsZSBuYW1lIGJ1ZmZlciAqLworc3RhdGlj IGNoYXIgKmNtcHJvbSA9IE5VTEw7CQkvKiBQcm9ncmFtJ3MgcHJvbXB0ICovCitzdGF0aWMgY2hh ciAqY21wcnh4ID0gTlVMTDsJCS8qIFByb2dyYW0ncyBwcm9tcHQsIHVuZXZhbHVhdGVkICovCisK KyNpZmRlZiBDS19SRUNBTEwKKy8qCisgIENvbW1hbmQgcmVjYWxsIGlzIGF2YWlsYWJsZSBvbmx5 IGlmIHdlIGNhbiBtYWtlIHByb2ZsaWdhdGUgdXNlIG9mIG1hbGxvYygpLgorKi8KKyNkZWZpbmUg Ul9NQVggMTAJCQkvKiBIb3cgbWFueSBjb21tYW5kcyB0byBzYXZlICovCitpbnQgY21fcmVjYWxs ID0gUl9NQVg7CQkJLyogU2l6ZSBvZiBjb21tYW5kIHJlY2FsbCBidWZmZXIgKi8KK2ludCBvbl9y ZWNhbGwgPSAxOwkJCS8qIFJlY2FsbCBmZWF0dXJlIGlzIE9OICovCitzdGF0aWMgaW50IG5vX3Jl Y2FsbCA9IDA7CQkvKiBSZWNhbGwgT0ZGIGZvciB0aGlzIGNtZCBvbmx5ICovCitzdGF0aWMgaW50 IGZvcmNlX2FkZCA9IDA7CQkvKiBGb3JjZSBjbWQgaW50byByZWNhbGwgYnVmZmVyICovCitzdGF0 aWMgaW50IGxhc3RfcmVjYWxsID0gLTE7CQkvKiBMYXN0IHJlY2FsbC1yZWxhdGVkIGFjdGlvbiAq LworLyoKKyAgLTEgPSBub25lCisgICAwID0gQ1IgKGEgY29tbWFuZCB3YXMgZW50ZXJlZCkKKyAg IDEgPSBVcAorICAgMiA9IERvd24KKyovCitpbnQgaW5fcmVjYWxsID0gMDsJCQkvKiBSZWNhbGwg YnVmZmVycyBhcmUgaW5pdCdkICovCitzdGF0aWMgaW50CisgIGN1cnJlbnQgPSAtMSwJCQkJLyog UG9pbnRlciB0byBjdXJyZW50IGNvbW1hbmQgKi8KKyAgcmxhc3QgPSAtMTsJCQkJLyogSW5kZXgg b2YgbGFzdCBjb21tYW5kIGluIGJ1ZmZlciAqLworc3RhdGljIGNoYXIgKipyZWNhbGwgPSBOVUxM OwkJLyogQXJyYXkgb2YgcmVjYWxsIGJ1ZmZlciBwb2ludGVycyAqLworI2VuZGlmIC8qIENLX1JF Q0FMTCAqLworI2Vsc2UgIC8qICFEQ01EQlVGICovCitjaGFyIGNtZGJ1ZltDTURCTCs0XTsgICAg ICAgICAgICAgICAgICAgLyogQ29tbWFuZCBidWZmZXIgKi8KK2NoYXIgc2F2YnVmW0NNREJMKzRd OyAgICAgICAgICAgICAgICAgICAvKiBCdWZmZXIgdG8gc2F2ZSBjb3B5IG9mIGNvbW1hbmQgKi8K K2NoYXIgYXRtYnVmW0FUTUJMKzRdOyAgICAgICAgICAgICAgICAgICAvKiBBdG9tIGJ1ZmZlciAq LworY2hhciBhdHhidWZbQ01EQkwrNF07ICAgICAgICAgICAgICAgICAgIC8qIEZvciBleHBhbmRp bmcgdGhlIGF0b20gYnVmZmVyICovCitjaGFyIHByZXZjbWRbQ01EQkwrNF07CQkJLyogRm9yIGRp c3BsYXlpbmcgdGhlIGxhc3QgY29tbWFuZCAqLworc3RhdGljIGNoYXIgYXR5YnVmW0FUTUJMKzRd OwkJLyogRm9yIGNvcHlpbmcgYXRvbSBidWZmZXIgKi8KK3N0YXRpYyBjaGFyIGZpbGJ1ZltBVE1C TCs0XTsJCS8qIEZpbGUgbmFtZSBidWZmZXIgKi8KK3N0YXRpYyBjaGFyIGNtcHJvbVtQUk9NUFRM KzFdOwkJLyogUHJvZ3JhbSdzIHByb21wdCAqLworc3RhdGljIGNoYXIgY21wcnh4W1BST01QVEwr MV07CQkvKiBQcm9ncmFtJ3MgcHJvbXB0LCB1bmV2YWx1YXRlZCAqLworI2VuZGlmIC8qIERDTURC VUYgKi8KKworLyogQ29tbWFuZCBidWZmZXIgcG9pbnRlcnMgKi8KKworI2RlZmluZSBQUFZMRU4g Vk5BTUwJCQkvKiAyMDA4MDMwNSBXb2xmcmFtIFNhbmcgKHdhcyAyNCkgKi8KK2NoYXIgcHB2bmFt YnVmW1BQVkxFTisxXSA9IHsgTlVMLCBOVUwgfTsKKworY2hhciAqIGNtYnB0ciA9IE5VTEw7CQkJ LyogQ3VycmVudCBwb3NpdGlvbiAoZm9yIGV4cG9ydCkgKi8KKworc3RhdGljIGNoYXIgKmJwLCAg ICAgICAgICAgICAgICAgICAgICAgIC8qIEN1cnJlbnQgY29tbWFuZCBidWZmZXIgcG9zaXRpb24g Ki8KKyAgICAqcHAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTdGFydCBvZiBj dXJyZW50IGZpZWxkICovCisgICAgKm5wOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogU3RhcnQgb2YgbmV4dCBmaWVsZCAqLworCitzdGF0aWMgaW50IHVuZ3csCQkJLyogRm9yIHVu Z2V0dGluZyB3b3JkcyAqLworICAgIGF0eG47CQkJCS8qIEV4cGFuc2lvbiBidWZmZXIgKGF0eGJ1 ZikgbGVuZ3RoICovCisKKyNpZmRlZiBPUzIKK2V4dGVybiBpbnQgd2lkZXJlc3VsdDsKKyNlbmRp ZiAvKiBPUzIgKi8KKworZXh0ZXJuIGludCBjbWRfY29scywgY21kX3Jvd3MsIGxvY2FsLCBxdWll dDsKKworI2lmZGVmIFROQ09ERQorI2lmZGVmIElBQworI3VuZGVmIElBQworI2VuZGlmIC8qIElB QyAqLworI2RlZmluZSBJQUMgMjU1CisjZW5kaWYgLyogVE5DT0RFICovCisKK19QUk9UT1RZUCgg c3RhdGljIGludCBndHdvcmQsIChpbnQpICk7CitfUFJPVE9UWVAoIHN0YXRpYyBpbnQgYWRkYnVm LCAoY2hhciAqKSApOworX1BST1RPVFlQKCBzdGF0aWMgaW50IHNldGF0bSwgKGNoYXIgKiwgaW50 KSApOworX1BST1RPVFlQKCBzdGF0aWMgVk9JRCBjbWRuZXdsLCAoY2hhcikgKTsKK19QUk9UT1RZ UCggc3RhdGljIFZPSUQgY21kY2hhcmRlbCwgKHZvaWQpICk7CitfUFJPVE9UWVAoIHN0YXRpYyBW T0lEIGNtZGVjaG8sIChjaGFyLCBpbnQpICk7CitfUFJPVE9UWVAoIHN0YXRpYyBpbnQgdGVzdCwg KGludCwgaW50KSApOworI2lmZGVmIEdFTURPUworX1BST1RPVFlQKCBleHRlcm4gY2hhciAqc3Ry Y2hyLCAoY2hhciAqLCBpbnQpICk7CisjZW5kaWYgLyogR0VNRE9TICovCisKK2V4dGVybiBjaGFy ICogZGZ0dHk7CisKKy8qIFRoZSBmb2xsb3dpbmcgYXJlIGZvciB1c2Ugd2l0aCBjaGFpbmVkIEZE QidzICovCisKK3N0YXRpYyBpbnQgY3JmbGFnID0gMDsJCQkvKiBDYXJyaWFnZSByZXR1cm4gd2Fz IHR5cGVkICovCitzdGF0aWMgaW50IHFtZmxhZyA9IDA7CQkJLyogUXVlc3Rpb24gbWFyayB3YXMg dHlwZWQgKi8KK3N0YXRpYyBpbnQgZXNmbGFnID0gMDsJCQkvKiBFc2NhcGUgd2FzIHR5cGVkICov CisKKy8qIERpcmVjdG9yeSBzZXBhcmF0b3IgKi8KKworI2lmZGVmIEdFTURPUworc3RhdGljIGNo YXIgZGlyc2VwID0gJ1xcJzsKKyNlbHNlCisjaWZkZWYgZGF0YWdlbmVyYWwKK3N0YXRpYyBjaGFy IGRpcnNlcCA9ICc6JzsKKyNlbHNlCisjaWZkZWYgTUFDCitzdGF0aWMgY2hhciBkaXJzZXAgPSAn Oic7CisjZWxzZQorI2lmZGVmIFZNUworc3RhdGljIGNoYXIgZGlyc2VwID0gJy4nOworI2Vsc2UK KyNpZmRlZiBTVFJBVFVTCitzdGF0aWMgY2hhciBkaXJzZXAgPSAnPic7CisjZWxzZQorc3RhdGlj IGNoYXIgZGlyc2VwID0gJy8nOwkJLyogVU5JWCwgT1MvMiwgT1MtOSwgQW1pZ2EsIGV0Yy4gKi8K KyNlbmRpZiAvKiBTVFJBVFVTICovCisjZW5kaWYgLyogVk1TICovCisjZW5kaWYgLyogTUFDICov CisjZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KKyNlbmRpZiAvKiBHRU1ET1MgKi8KKworLyogIEgg QSBTIE4gTyBQIEEgVCBIICAqLworCisvKiAgUmV0dXJucyAwIGlmIGZpbGVzcGVjIHMgaW5jbHVk ZXMgYW55IHBhdGggc2VnbWVudHM7IDEgaWYgaXQgZG9lc24ndC4gKi8KKworaW50CitoYXNub3Bh dGgocykgY2hhciAqIHM7IHsKKyAgICBjaGFyICogcCA9IE5VTEw7CisgICAgaWYgKCFzKSByZXR1 cm4oMCk7CisgICAgaWYgKCEqcykgcmV0dXJuKDApOworICAgIHpzdHJpcChzLCZwKTsKKyAgICBy ZXR1cm4oY2tzdHJjbXAocyxwLENLTUFYUEFUSCxmaWxlY2FzZSkgPT0gMCA/IDEgOiAwKTsKK30K KworLyogIEMgSyBTIFAgUiBFIEEgRCAgLS0gIFByaW50IHN0cmluZyBkb3VibGUtc3BhY2VkICAq LworCitzdGF0aWMgY2hhciAqIHNwcnB0ciA9IE5VTEw7CisKK3N0YXRpYyBjaGFyICoKK2Nrc3By ZWFkKHMpIGNoYXIgKiBzOyB7CisgICAgaW50IG4gPSAwOworICAgIGNoYXIgKiBwOworICAgIG4g PSBzdHJsZW4ocyk7CisgICAgaWYgKHNwcnB0cikKKyAgICAgIGZyZWUoc3BycHRyKTsKKyAgICBz cHJwdHIgPSBtYWxsb2MobiArIG4gKyAzKTsKKyAgICBpZiAoc3BycHRyKSB7CisJcCA9IHNwcnB0 cjsKKwl3aGlsZSAoKnMpIHsKKwkgICAgKnArKyA9ICpzKys7CisJICAgICpwKysgPSBTUDsKKwl9 CisJKnAgPSBOVUw7CisgICAgfQorICAgIHJldHVybihzcHJwdHIgPyBzcHJwdHIgOiAiIik7Cit9 CisKKy8qICBUIEUgUyBUICAtLSAgQml0IHRlc3QgICovCisKK3N0YXRpYyBpbnQKK3Rlc3QoeCxt KSBpbnQgeCwgbTsgeyAvKiAgUmV0dXJucyAxIGlmIGFueSBiaXRzIGZyb20gbSBhcmUgb24gaW4g eCwgZWxzZSAwICAqLworICAgIHJldHVybigoeCAmIG0pID8gMSA6IDApOworfQorCisvKiAgSyBX IEQgSCBFIEwgUCAgLS0gIEdpdmVuIGEga2V5d29yZCB0YWJsZSwgcHJpbnQga2V5d29yZHMgaW4g Y29sdW1ucy4gICovCisvKgorICBDYWxsIHdpdGg6CisgICAgcyAgICAgLSBrZXl3b3JkIHRhYmxl CisgICAgbiAgICAgLSBudW1iZXIgb2YgZW50cmllcworICAgIHBhdCAgIC0gcGF0dGVybiAobGVm dCBzdWJzdHJpbmcpIHRoYXQgbXVzdCBtYXRjaCBmb3IgZWFjaCBrZXl3b3JkCisgICAgcHJlICAg LSBwcmVmaXggdG8gYWRkIHRvIGVhY2gga2V5d29yZAorICAgIHBvc3QgIC0gc3VmZml4IHRvIGFk ZCB0byBlYWNoIGtleXdvcmQKKyAgICBvZmYgICAtIG9mZnNldCBvbiBmaXJzdCBzY3JlZW5mdWws IGFsbG93aW5nIHJvb20gZm9yIGludHJvZHVjdG9yeSB0ZXh0CisgICAgeGhscCAgLSAxIHRvIHBy aW50IGFueSBDTV9JTlYga2V5d29yZHMgdGhhdCBhcmUgbm90IGFsc28gYWJicmV2aWF0aW9ucy4K KyAgICAgICAgICAgIDIgdG8gcHJpbnQgQ01fSU5WIGtleXdvcmRzIGlmIENNX0hMUCBhbHNvIHNl dAorICAgICAgICAgICAgNCBpZiBpdCdzIGEgc3dpdGNoIHRhYmxlICh0byBzaG93ICc6JyBpZiBD TV9BUkcpCisKKyAgQXJyYW5nZXMga2V5d29yZHMgaW4gY29sdW1ucyB3aXRoIHdpZHRoIGJhc2Vk IG9uIGxvbmdlc3Qga2V5d29yZC4KKyAgRG9lcyAibW9yZT8iIHByb21wdGluZyBhdCBlbmQgb2Yg c2NyZWVuLgorICBVc2VzIGdsb2JhbCBjbWRfcm93cyBhbmQgY21kX2NvbHMgZm9yIHNjcmVlbiBz aXplLgorKi8KK1ZPSUQKK2t3ZGhlbHAocyxuLHBhdCxwcmUscG9zdCxvZmYseGhscCkKKyAgICBz dHJ1Y3Qga2V5dGFiIHNbXTsgaW50IG4sIG9mZiwgeGhscDsgY2hhciAqcGF0LCAqcHJlLCAqcG9z dDsKKy8qIGt3ZGhlbHAgKi8geworCisgICAgaW50IHdpZHRoID0gMDsKKyAgICBpbnQgY2M7Cisg ICAgaW50IGNvbHMsIGhlaWdodCwgaSwgaiwgaywgbGMsIG4yID0gMDsKKyAgICBjaGFyICpiID0g TlVMTCwgKnAsICpxOworICAgIGNoYXIgKnBhLCAqcHg7CisgICAgY2hhciAqKnMyID0gTlVMTDsK KyAgICBjaGFyICp0bXBidWYgPSBOVUxMOworCisgICAgY2MgPSBzdHJsZW4ocGF0KTsKKworICAg IGlmICghcykgcmV0dXJuOwkJCS8qIE5vdGhpbmcgdG8gZG8gKi8KKyAgICBpZiAobiA8IDEpIHJl dHVybjsJCQkvKiBEaXR0byAqLworICAgIGlmIChvZmYgPCAwKSBvZmYgPSAwOwkJLyogT2Zmc2V0 IGZvciBmaXJzdCBwYWdlICovCisgICAgaWYgKCFwcmUpIHByZSA9ICIiOwkJCS8qIEhhbmRsZSBu dWxsIHN0cmluZyBwb2ludGVycyAqLworICAgIGlmICghcG9zdCkgcG9zdCA9ICIiOworICAgIGxj ID0gb2ZmOwkJCQkvKiBTY3JlZW4tbGluZSBjb3VudGVyICovCisKKyAgICBpZiAoeGhscCAmIDQp CQkJLyogRm9yIHN3aXRjaGVzICovCisgICAgICB0bXBidWYgPSAoY2hhciAqKW1hbGxvYyhUTVBC VUZTSVorMSk7CisKKyAgICBpZiAoKHMyID0gKGNoYXIgKiopIG1hbGxvYyhuICogc2l6ZW9mKGNo YXIgKikpKSkgeworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsJLyogRmluZCBsb25nZXN0IGtl eXdvcmQgKi8KKwkgICAgczJbaV0gPSBOVUxMOworCSAgICBpZiAoY2tzdHJjbXAoc1tpXS5rd2Qs cGF0LGNjLDApKQorCSAgICAgIGNvbnRpbnVlOworCisJICAgIGlmIChzW2ldLmZsZ3MgJiBDTV9Q U0gJLyogTk9QVVNIIG9yIG5vcHVzaCBzY3JlZW5pbmcgKi8KKyNpZm5kZWYgTk9QVVNICisJCSYm IG5vcHVzaAorI2VuZGlmIC8qIE5PUFVTSCAqLworCQkpCisJICAgICAgY29udGludWU7CisJICAg IGlmIChzW2ldLmZsZ3MgJiBDTV9MT0MJLyogTk9MT0NBTCBvciBub2xvY2FsIHNjcmVlbmluZyAq LworI2lmbmRlZiBOT0xPQ0FMCisJCSYmIG5vbG9jYWwKKyNlbmRpZiAvKiBOT0xPQ0FMICovCisJ CSkKKwkgICAgICBjb250aW51ZTsKKworCSAgICBpZiAoc1tpXS5mbGdzICYgQ01fSU5WKSB7Cisj aWZkZWYgQ09NTUVOVAorLyogVGhpcyBjb2RlIGRvZXMgbm90IHNob3cgaW52aXNpYmxlIGtleXdv cmRzIGF0IGFsbCBleGNlcHQgZm9yICJoZWxwID8iICovCisvKiBhbmQgdGhlbiBvbmx5IGhlbHAg dG9waWNzIChDTV9ITFApIGluIHRoZSB0b3AtbGV2ZWwga2V5d29yZCBsaXN0LiAqLworCisJCWlm ICgoeGhscCAmIDIpID09IDApCisJCSAgY29udGludWU7CisJCWVsc2UgaWYgKChzW2ldLmZsZ3Mg JiBDTV9ITFApID09IDApCisJCSAgY29udGludWU7CisjZWxzZQorLyogVGhpcyBjb2RlIHNob3dz IGludmlzaWJsZSBrZXl3b3JkcyB0aGF0IGFyZSBub3QgYWxzbyBhYmJyZXZpYXRpb25zIHdoZW4g Ki8KKy8qID8gd2FzIHR5cGVkIEFGVEVSIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpZWxkIHNvIHRo ZSB1c2VyIGNhbiBmaW5kIG91dCAqLworLyogd2hhdCB0aGV5IGFyZSBhbmQgKGZvciBleGFtcGxl KSB3aHkgY29tcGxldGlvbiBkb2Vzbid0IHdvcmsgYXQgdGhpcyBwb2ludCAqLworCisJCWlmIChz W2ldLmZsZ3MgJiBDTV9BQlIpCisJCSAgY29udGludWU7CisJCWVsc2UgaWYgKCh4aGxwICYgMykg PT0gMCkKKwkJICBjb250aW51ZTsKKwkJZWxzZSBpZiAoKHhobHAgJiAyKSAmJiAoKHNbaV0uZmxn cyAmIENNX0hMUCkgPT0gMCkpCisJCSAgY29udGludWU7CisjZW5kaWYgLyogQ09NTUVOVCAqLwor CSAgICB9CisJICAgIGogPSBzdHJsZW4oc1tpXS5rd2QpOworCSAgICBpZiAoISh4aGxwICYgNCkg fHwgIXRtcGJ1ZikgeyAvKiBSZWd1bGFyIGtleXdvcmQgdGFibGUgKi8KKwkJczJbbjIrK10gPSBz W2ldLmt3ZDsJLyogQ29weSBwb2ludGVycyB0byB2aXNpYmxlIG9uZXMgKi8KKwkgICAgfSBlbHNl IHsJCQkvKiBTd2l0Y2hlcyAqLworCQlja21ha21zZyh0bXBidWYsCS8qIE1ha2UgYSBjb3B5IHRo YXQgc2hvd3MgIjoiIGlmICovCisJCQkgVE1QQlVGU0laLAkvKiB0aGUgc3dpdGNoIHRha2VzIGFu IGFyZ3VtZW50LiAqLworCQkJIHNbaV0ua3dkLAorCQkJIChzW2ldLmZsZ3MgJiBDTV9BUkcpID8g IjoiIDogIiIsCisJCQkgTlVMTCwKKwkJCSBOVUxMCisJCQkgKTsKKwkJbWFrZXN0cigmKHMyW24y XSksdG1wYnVmKTsKKwkJaWYgKHNbaV0uZmxncyAmIENNX0FSRykgaisrOworCQluMisrOworCSAg ICB9CisJICAgIGlmIChqID4gd2lkdGgpCisJICAgICAgd2lkdGggPSBqOworCX0KKwkvKiBDb2x1 bW4gd2lkdGggKi8KKwluID0gbjI7CisgICAgfQorICAgIGlmIChzMiAmJiAoYiA9IChjaGFyICop IG1hbGxvYyhjbWRfY29scyArIDEpKSkgeyAvKiBNYWtlIGEgbGluZSBidWZmZXIgICAqLworCWNo YXIgKiBieDsKKwlieCA9IGIgKyBjbWRfY29sczsKKwl3aWR0aCArPSAoaW50KXN0cmxlbihwcmUp ICsgKGludClzdHJsZW4ocG9zdCkgKyAyOworCWNvbHMgPSBjbWRfY29scyAvIHdpZHRoOwkvKiBI b3cgbWFueSBjb2x1bW5zPyAqLworCWlmIChjb2xzIDwgMSkgY29scyA9IDE7CisJaGVpZ2h0ID0g biAvIGNvbHM7CQkvKiBIb3cgbG9uZyBpcyBlYWNoIGNvbHVtbj8gKi8KKwlpZiAobiAlIGNvbHMp IGhlaWdodCsrOwkJLyogQWRkIG9uZSBmb3IgcmVtYWluZGVyLCBpZiBhbnkgKi8KKworCWZvciAo aSA9IDA7IGkgPCBoZWlnaHQ7IGkrKykgewkgICAgLyogTG9vcCBmb3IgZWFjaCByb3cgKi8KKwkg ICAgZm9yIChqID0gMDsgaiA8IGNtZF9jb2xzOyBqKyspICAvKiBGaXJzdCBmaWxsIHJvdyB3aXRo IGJsYW5rcyAqLworCSAgICAgIGJbal0gPSBTUDsKKwkgICAgZm9yIChqID0gMDsgaiA8IGNvbHM7 IGorKykgeyAgICAvKiBMb29wIGZvciBlYWNoIGNvbHVtbiBpbiByb3cgKi8KKwkJayA9IGkgKyAo aiAqIGhlaWdodCk7ICAgICAgIC8qIEluZGV4IG9mIG5leHQga2V5d29yZCAqLworCQlpZiAoayA8 IG4pIHsJCSAgICAvKiBJbiByYW5nZT8gKi8KKwkJICAgIHBhID0gcHJlOworCQkgICAgcHggPSBw b3N0OworCQkgICAgcCA9IHMyW2tdOwkJICAgIC8qIFBvaW50IHRvIHZlcmIgbmFtZSAqLworCQkg ICAgcSA9IGIgKyAoaiAqIHdpZHRoKSArIDE7IC8qIFdoZXJlIHRvIGNvcHkgaXQgdG8gKi8KKwkJ ICAgIHdoaWxlICgocSA8IGJ4KSAmJiAoKnErKyA9ICpwYSsrKSkgOyAvKiBDb3B5IHByZWZpeCAq LworCQkgICAgcS0tOwkJICAgICAgICAgICAgICAgICAvKiBCYWNrIHVwIG92ZXIgTlVMICovCisJ CSAgICB3aGlsZSAoKHEgPCBieCkgJiYgKCpxKysgPSAqcCsrKSkgOwkgLyogQ29weSBmaWxlbmFt ZSAqLworCQkgICAgcS0tOwkJICAgICAgICAgICAgICAgICAvKiBCYWNrIHVwIG92ZXIgTlVMICov CisJCSAgICB3aGlsZSAoKHEgPCBieCkgJiYgKCpxKysgPSAqcHgrKykpIDsgLyogQ29weSBzdWZm aXggKi8KKwkJICAgIGlmIChqIDwgY29scyAtIDEpIHsKKwkJCXEtLTsKKwkJCSpxID0gU1A7CS8q IFJlcGxhY2UgdGhlIHNwYWNlICovCisJCSAgICB9CisJCX0KKwkgICAgfQorCSAgICBwID0gYiAr IGNtZF9jb2xzIC0gMTsJLyogTGFzdCBjaGFyIGluIGxpbmUgKi8KKwkgICAgd2hpbGUgKCpwLS0g PT0gU1ApIDsJLyogVHJpbSAqLworCSAgICAqKHArMikgPSBOVUw7CisJICAgIHByaW50ZigiJXNc biIsYik7CQkvKiBQcmludCB0aGUgbGluZSAqLworCSAgICBpZiAoKytsYyA+IChjbWRfcm93cyAt IDIpKSB7IC8qIFNjcmVlbiBmdWxsPyAqLworCQlpZiAoIWFza21vcmUoKSkJCS8qIERvIG1vcmUt cHJvbXB0aW5nLi4uICovCisJCSAgZ290byB4a3dkaGVscDsKKwkJZWxzZQorCQkgIGxjID0gMDsK KwkgICAgfQorCX0KKwkvKiBwcmludGYoIlxuIik7ICovCQkvKiBCbGFuayBsaW5lIGF0IGVuZCBv ZiByZXBvcnQgKi8KKyAgICB9IGVsc2UgewkJCQkvKiBNYWxsb2MgZmFpbHVyZSwgbm8gY29sdW1u cyAqLworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkgICAgaWYgKHNbaV0uZmxncyAmIENN X0lOVikJLyogVXNlIG9yaWdpbmFsIGtleXdvcmQgdGFibGUgKi8KKwkgICAgICBjb250aW51ZTsJ CQkvKiBza2lwcGluZyBpbnZpc2libGUgZW50cmllcyAqLworCSAgICBwcmludGYoIiVzJXMlc1xu IixwcmUsc1tpXS5rd2QscG9zdCk7CisJICAgIGlmICgrK2xjID4gKGNtZF9yb3dzIC0gMikpIHsg LyogU2NyZWVuIGZ1bGw/ICovCisJCWlmICghYXNrbW9yZSgpKQkJLyogRG8gbW9yZS1wcm9tcHRp bmcuLi4gKi8KKwkJICBnb3RvIHhrd2RoZWxwOworCQllbHNlCisJCSAgbGMgPSAwOworCSAgICB9 CisJfQorICAgIH0KKyAgeGt3ZGhlbHA6CisgICAgaWYgKHhobHAgJiA0KSB7CisJaWYgKHRtcGJ1 ZikgZnJlZSgoY2hhciAqKXRtcGJ1Zik7CisJZm9yIChpID0gMDsgaSA8IG47IGkrKykKKwkgIGlm IChzMltpXSkgZnJlZShzMltpXSk7CisgICAgfQorICAgIGlmIChzMikgZnJlZShzMik7CQkJLyog RnJlZSBhcnJheSBjb3B5ICovCisgICAgaWYgKGIpIGZyZWUoYik7CQkJLyogRnJlZSBsaW5lIGJ1 ZmZlciAqLworICAgIHJldHVybjsKK30KKworLyogIFggRiBJIEwgSCBFIEwgUCAgLS0gIEdpdmVu IGEgZmlsZSBsaXN0LCBwcmludCBuYW1lcyBpbiBjb2x1bW5zLiAgKi8KKy8qCisgIENhbGwgd2l0 aDoKKyAgICBuICAgICAtIG51bWJlciBvZiBlbnRyaWVzCisgICAgcHJlICAgLSBwcmVmaXggdG8g YWRkIHRvIGVhY2ggZmlsZW5hbWUKKyAgICBwb3N0ICAtIHN1ZmZpeCB0byBhZGQgdG8gZWFjaCBm aWxlbmFtZQorICAgIG9mZiAgIC0gb2Zmc2V0IG9uIGZpcnN0IHNjcmVlbmZ1bCwgYWxsb3dpbmcg cm9vbSBmb3IgaW50cm9kdWN0b3J5IHRleHQKKyAgICBjbWRpcmZsZyAtIDEgaWYgb25seSBkaXJl Y3RvcnkgbmFtZXMgc2hvdWxkIGJlIGxpc3RlZCwgMCB0byBsaXN0IGFsbCBmaWxlcworICAgIGZz ICAgIC0gY2FsbCBmaWxlc2VsZWN0KCkgdG8gZGVjaWRlIHdoZXRoZXIgdG8gaW5jbHVkZSBlYWNo IGZpbGUuCisgICAgVGhlIHJlc3Qgb2YgdGhlIGFyZ3MgYXJlIHRoZSBzYW1lIGFzIGZvciBmaWxl c2VsZWN0KCkuCisKKyAgQXJyYW5nZXMgZmlsZW5hbWVzIGluIGNvbHVtbnMgd2l0aCB3aWR0aCBi YXNlZCBvbiBsb25nZXN0IGZpbGVuYW1lLgorICBEb2VzICJtb3JlPyIgcHJvbXB0aW5nIGF0IGVu ZCBvZiBzY3JlZW4uCisgIFVzZXMgZ2xvYmFsIGNtZF9yb3dzIGFuZCBjbWRfY29scyBmb3Igc2Ny ZWVuIHNpemUuCisqLworCitpbnQKKyNpZmRlZiBDS19BTlNJQworeGZpbGhlbHAoCisgICAgaW50 IG4sIGNoYXIgKnByZSwgY2hhciAqcG9zdCwgaW50IG9mZiwgaW50IGNtZGlyZmxhZywKKyAgICBp bnQgZnMsIGNoYXIgKnNhLCBjaGFyICpzYiwgY2hhciAqc25hLCBjaGFyICpzbmIsCisgICAgQ0tf T0ZGX1QgbWluc2l6LCBDS19PRkZfVCBtYXhzaXosCisgICAgaW50IG5idSwgaW50IG54bGlzdCwK KyAgICBjaGFyICoqIHhsaXN0CispCisjZWxzZQoreGZpbGhlbHAobixwcmUscG9zdCxvZmYsY21k aXJmbGcsCisJIGZzLHNhLHNiLHNuYSxzbmIsbWluc2l6LG1heHNpeixuYnUsbnhsaXN0LHhsaXN0 KQorICAgIGludCBuLCBvZmY7IGNoYXIgKnByZSwgKnBvc3Q7IGludCBjbWRpcmZsZzsKKyAgICBp bnQgZnM7IGNoYXIgKnNhLCpzYiwqc25hLCpzbmI7IENLX09GRl9UIG1pbnNpeixtYXhzaXo7Cisg ICAgaW50IG5idSxueGxpc3Q7IGNoYXIgKiogeGxpc3Q7CisjZW5kaWYJLyogQ0tfQU5TSUMgKi8K KyB7CisgICAgY2hhciBmaWxidWZbQ0tNQVhQQVRIICsgMV07CQkvKiBUZW1wIGJ1ZmZlciBmb3Ig b25lIGZpbGVuYW1lICovCisgICAgaW50IHdpZHRoID0gMDsKKyAgICBpbnQgY29scywgaGVpZ2h0 LCBpLCBqLCBrLCBsYywgbjIgPSAwLCByYyA9IDAsIGl0c2FkaXIgPSAwOworICAgIGNoYXIgKmIg PSBOVUxMLCAqcCwgKnE7CisgICAgY2hhciAqcGEsICpweDsKKyAgICBjaGFyICoqczIgPSBOVUxM OworI2lmZGVmIFZNUworICAgIGNoYXIgKiBjZHAgPSB6Z3RkaXIoKTsKKyNlbmRpZiAvKiBWTVMg Ki8KKworICAgIGlmIChuIDwgMSkgcmV0dXJuKDApOworICAgIGlmIChvZmYgPCAwKSBvZmYgPSAw OwkJLyogT2Zmc2V0IGZvciBmaXJzdCBwYWdlICovCisgICAgaWYgKCFwcmUpIHByZSA9ICIiOwkJ CS8qIEhhbmRsZSBudWxsIHN0cmluZyBwb2ludGVycyAqLworICAgIGlmICghcG9zdCkgcG9zdCA9 ICIiOworCisgICAgbGMgPSBvZmY7CQkJCS8qIFNjcmVlbi1saW5lIGNvdW50ZXIgKi8KKworICAg IGlmICgoczIgPSAoY2hhciAqKikgbWFsbG9jKG4gKiBzaXplb2YoY2hhciAqKSkpKSB7CisJZm9y IChpID0gMDsgaSA8IG47IGkrKykgewkvKiBMb29wIHRocm91Z2ggZmlsZW5hbWVzICovCisJICAg IGl0c2FkaXIgPSAwOworCSAgICBzMltpXSA9IE5VTEw7CQkvKiBJbml0aWFsaXplIGVhY2ggcG9p bnRlciB0byBOVUxMICovCisJICAgIHpuZXh0KGZpbGJ1Zik7CQkvKiBHZXQgbmV4dCBmaWxlbmFt ZSAqLworCSAgICBpZiAoIWZpbGJ1ZlswXSkJCS8qIFNob3VsZG4ndCBoYXBwZW4gKi8KKwkgICAg ICBicmVhazsKKyNpZmRlZiBDT01NRU5UCisJICAgIGl0c2FkaXIgPSBpc2RpcihmaWxidWYpOwkv KiBJcyBpdCBhIGRpcmVjdG9yeT8gKi8KKwkgICAgaWYgKGNtZGlyZmxnICYmICFpdHNhZGlyKQkv KiBObywgbGlzdGluZyBkaXJlY3RvcmllcyBvbmx5PyAqLworCSAgICAgIGNvbnRpbnVlOwkJCS8q IFNvIHNraXAgdGhpcyBvbmUuICovCisjZW5kaWYgLyogQ09NTUVOVCAqLworCSAgICBpZiAoZnMp IGlmIChmaWxlc2VsZWN0KGZpbGJ1ZiwKKwkJCSAgIHNhLHNiLHNuYSxzbmIsCisJCQkgICBtaW5z aXosbWF4c2l6LG5idSxueGxpc3QseGxpc3QpIDwgMSkgeworICAgICAgICAgICAgICAgICAgICBj b250aW51ZTsKKwkgICAgfQorI2lmZGVmIFZNUworCSAgICBja3N0cm5jcHkoZmlsYnVmLHpyZWxu YW1lKGZpbGJ1ZixjZHApLENLTUFYUEFUSCk7CisjZW5kaWYgLyogVk1TICovCisJICAgIGogPSBz dHJsZW4oZmlsYnVmKTsKKyNpZm5kZWYgVk1TCisJICAgIGlmIChpdHNhZGlyICYmIGogPCBDS01B WFBBVEggLSAxICYmIGogPiAwKSB7CisJCWlmIChmaWxidWZbai0xXSAhPSBkaXJzZXApIHsKKwkJ ICAgIGZpbGJ1ZltqKytdID0gZGlyc2VwOworCQkgICAgZmlsYnVmW2pdID0gTlVMOworCQl9CisJ ICAgIH0KKyNlbmRpZiAvKiBWTVMgKi8KKwkgICAgaWYgKCEoczJbbjJdID0gbWFsbG9jKGorMSkp KSB7CisJCXByaW50ZigiP01lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVcbiIpOworCQlyYyA9IC05 OworCQlnb3RvIHhmaWxoZWxwOworCSAgICB9CisJICAgIGlmIChqIDw9IENLTUFYUEFUSCkgewor CQlzdHJjcHkoczJbbjJdLGZpbGJ1Zik7CisJCW4yKys7CisJICAgIH0gZWxzZSB7CisJCXByaW50 ZigiP05hbWUgdG9vIGxvbmcgLSAlc1xuIiwgZmlsYnVmKTsKKwkJcmMgPSAtOTsKKwkJZ290byB4 ZmlsaGVscDsKKwkgICAgfQorCSAgICBpZiAoaiA+IHdpZHRoKQkJLyogR2V0IHdpZHRoIG9mIHdp ZGVzdCBvbmUgKi8KKwkgICAgICB3aWR0aCA9IGo7CisJfQorCW4gPSBuMjsJCQkJLyogSG93IG1h bnkgd2UgYWN0dWFsbHkgZ290ICovCisgICAgfQorICAgIHNoX3NvcnQoczIsTlVMTCxuLDAsMCxm aWxlY2FzZSk7CS8qIEFscGhhYmV0aXplIHRoZSBsaXN0ICovCisKKyAgICByYyA9IDE7CisgICAg aWYgKHMyICYmIChiID0gKGNoYXIgKikgbWFsbG9jKGNtZF9jb2xzICsgMSkpKSB7IC8qIE1ha2Ug YSBsaW5lIGJ1ZmZlciAqLworCWNoYXIgKiBieDsKKwlieCA9IGIgKyBjbWRfY29sczsKKwl3aWR0 aCArPSAoaW50KXN0cmxlbihwcmUpICsgKGludClzdHJsZW4ocG9zdCkgKyAyOworCWNvbHMgPSBj bWRfY29scyAvIHdpZHRoOwkvKiBIb3cgbWFueSBjb2x1bW5zPyAqLworCWlmIChjb2xzIDwgMSkg Y29scyA9IDE7CisJaGVpZ2h0ID0gbiAvIGNvbHM7CQkvKiBIb3cgbG9uZyBpcyBlYWNoIGNvbHVt bj8gKi8KKwlpZiAobiAlIGNvbHMpIGhlaWdodCsrOwkJLyogQWRkIG9uZSBmb3IgcmVtYWluZGVy LCBpZiBhbnkgKi8KKworCWZvciAoaSA9IDA7IGkgPCBoZWlnaHQ7IGkrKykgewkgICAgLyogTG9v cCBmb3IgZWFjaCByb3cgKi8KKwkgICAgZm9yIChqID0gMDsgaiA8IGNtZF9jb2xzOyBqKyspICAv KiBGaXJzdCBmaWxsIHJvdyB3aXRoIGJsYW5rcyAqLworCSAgICAgIGJbal0gPSBTUDsKKwkgICAg Zm9yIChqID0gMDsgaiA8IGNvbHM7IGorKykgeyAgICAvKiBMb29wIGZvciBlYWNoIGNvbHVtbiBp biByb3cgKi8KKwkJayA9IGkgKyAoaiAqIGhlaWdodCk7ICAgICAgIC8qIEluZGV4IG9mIG5leHQg ZmlsZW5hbWUgKi8KKwkJaWYgKGsgPCBuKSB7CQkgICAgLyogSW4gcmFuZ2U/ICovCisJCSAgICBw YSA9IHByZTsKKwkJICAgIHB4ID0gcG9zdDsKKwkJICAgIHAgPSBzMltrXTsJCSAgICAgICAgICAg ICAgIC8qIFBvaW50IHRvIGZpbGVuYW1lICovCisJCSAgICBxID0gYiArIChqICogd2lkdGgpICsg MTsgICAgICAgICAgICAgLyogYW5kIGRlc3RpbmF0aW9uICovCisJCSAgICB3aGlsZSAoKHEgPCBi eCkgJiYgKCpxKysgPSAqcGErKykpIDsgLyogQ29weSBwcmVmaXggKi8KKwkJICAgIHEtLTsJCSAg ICAgICAgICAgICAgICAgLyogQmFjayB1cCBvdmVyIE5VTCAqLworCQkgICAgd2hpbGUgKChxIDwg YngpICYmICgqcSsrID0gKnArKykpIDsJIC8qIENvcHkgZmlsZW5hbWUgKi8KKwkJICAgIHEtLTsJ CSAgICAgICAgICAgICAgICAgLyogQmFjayB1cCBvdmVyIE5VTCAqLworCQkgICAgd2hpbGUgKChx IDwgYngpICYmICgqcSsrID0gKnB4KyspKSA7IC8qIENvcHkgc3VmZml4ICovCisJCSAgICBpZiAo aiA8IGNvbHMgLSAxKSB7CisJCQlxLS07CisJCQkqcSA9IFNQOwkvKiBSZXBsYWNlIHRoZSBzcGFj ZSAqLworCQkgICAgfQorCQl9CisJICAgIH0KKwkgICAgcCA9IGIgKyBjbWRfY29scyAtIDE7CS8q IExhc3QgY2hhciBpbiBsaW5lICovCisJICAgIHdoaWxlICgqcC0tID09IFNQKSA7CS8qIFRyaW0g Ki8KKwkgICAgKihwKzIpID0gTlVMOworCSAgICBwcmludGYoIiVzXG4iLGIpOwkJLyogUHJpbnQg dGhlIGxpbmUgKi8KKwkgICAgaWYgKCsrbGMgPiAoY21kX3Jvd3MgLSAyKSkgeyAvKiBTY3JlZW4g ZnVsbD8gKi8KKwkJaWYgKCFhc2ttb3JlKCkpIHsJLyogRG8gbW9yZS1wcm9tcHRpbmcuLi4gKi8K KwkJICAgIHJjID0gMDsKKwkJICAgIGdvdG8geGZpbGhlbHA7CisJCX0gZWxzZQorCQkgIGxjID0g MDsKKwkgICAgfQorCX0KKwlwcmludGYoIlxuIik7CQkJLyogQmxhbmsgbGluZSBhdCBlbmQgb2Yg cmVwb3J0ICovCisJZ290byB4ZmlsaGVscDsKKyAgICB9IGVsc2UgewkJCQkvKiBNYWxsb2MgZmFp bHVyZSwgbm8gY29sdW1ucyAqLworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkgICAgem5l eHQoZmlsYnVmKTsKKwkgICAgaWYgKCFmaWxidWZbMF0pIGJyZWFrOworCSAgICBwcmludGYoIiVz JXMlc1xuIixwcmUsZmlsYnVmLHBvc3QpOworCSAgICBpZiAoKytsYyA+IChjbWRfcm93cyAtIDIp KSB7IC8qIFNjcmVlbiBmdWxsPyAqLworCQlpZiAoIWFza21vcmUoKSkgewkgLyogRG8gbW9yZS1w cm9tcHRpbmcuLi4gKi8KKwkJICAgIHJjID0gMDsKKwkJICAgIGdvdG8geGZpbGhlbHA7CisJCX0g ZWxzZSBsYyA9IDA7CisJICAgIH0KKwl9Cit4ZmlsaGVscDoKKwlpZiAoYikgZnJlZShiKTsKKwlm b3IgKGkgPSAwOyBpIDwgbjI7IGkrKykKKwkgIGlmIChzMltpXSkgZnJlZShzMltpXSk7CisJaWYg KHMyKSBmcmVlKChjaGFyICopczIpOworCXJldHVybihyYyk7CisgICAgfQorfQorCisvKgorICBT aW1wbGVyIGZyb250IGVuZCBmb3IgeGZpbGhlbHAoKSB3aXRoIHNob3J0ZXIgYXJnIGxpc3Qgd2hl biBubworICBmaWxlIHNlbGVjdGlvbiBpcyBuZWVkZWQuCisqLworaW50CitmaWxoZWxwKG4scHJl LHBvc3Qsb2ZmLGNtZGlyZmxnKSBpbnQgbiwgb2ZmOyBjaGFyICpwcmUsICpwb3N0OyBpbnQgY21k aXJmbGc7IHsKKyAgICByZXR1cm4oeGZpbGhlbHAobixwcmUscG9zdCxvZmYsY21kaXJmbGcsCisJ CSAgICAwLE5VTEwsTlVMTCxOVUxMLE5VTEwsCisJCSAgICAoQ0tfT0ZGX1QpMCwoQ0tfT0ZGX1Qp MCwwLDAsKGNoYXIgKiopTlVMTCkpOworfQorCisvKiAgQyBNIFMgRSBUIFUgUCAgLS0gIFNldCB1 cCBjb21tYW5kIGJ1ZmZlcnMgICovCisKKyNpZmRlZiBEQ01EQlVGCitpbnQKK2Ntc2V0dXAoKSB7 CisgICAgaWYgKCEoY21kYnVmID0gbWFsbG9jKENNREJMICsgNCkpKSByZXR1cm4oLTEpOworICAg IGlmICghKHNhdmJ1ZiA9IG1hbGxvYyhDTURCTCArIDQpKSkgcmV0dXJuKC0xKTsKKyAgICBzYXZi dWZbMF0gPSAnXDAnOworICAgIGlmICghKHByZXZjbWQgPSBtYWxsb2MoQ01EQkwgKyA0KSkpIHJl dHVybigtMSk7CisgICAgcHJldmNtZFswXSA9ICdcMCc7CisgICAgaWYgKCEoYXRtYnVmID0gbWFs bG9jKEFUTUJMICsgNCkpKSByZXR1cm4oLTEpOworICAgIGlmICghKGF0eGJ1ZiA9IG1hbGxvYyhD TURCTCArIDQpKSkgcmV0dXJuKC0xKTsKKyAgICBpZiAoIShhdHlidWYgPSBtYWxsb2MoQVRNQkwg KyA0KSkpIHJldHVybigtMSk7CisgICAgaWYgKCEoZmlsYnVmID0gbWFsbG9jKEFUTUJMICsgNCkp KSByZXR1cm4oLTEpOworICAgIGlmICghKGNtcHJvbSA9IG1hbGxvYyhQUk9NUFRMICsgNCkpKSBy ZXR1cm4oLTEpOworICAgIGlmICghKGNtcHJ4eCA9IG1hbGxvYyhQUk9NUFRMICsgNCkpKSByZXR1 cm4oLTEpOworI2lmZGVmIENLX1JFQ0FMTAorICAgIGNtcmluaShjbV9yZWNhbGwpOworI2VuZGlm IC8qIENLX1JFQ0FMTCAqLworICAgIHJldHVybigwKTsKK30KKyNlbmRpZiAvKiBEQ01EQlVGICov CisKKy8qICBDIE0gUyBFIFQgUCAgLS0gIFNldCB0aGUgcHJvZ3JhbSBwcm9tcHQuICAqLworCitW T0lECitjbXNldHAocykgY2hhciAqczsgeworICAgIGlmICghcykgcyA9ICIiOworICAgIGNrc3Ry bmNweShjbXByeHgscyxQUk9NUFRMKTsKKyAgICBwc2V0ZiA9IDE7ICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBGbGFnIHRoYXQgcHJvbXB0IGhhcyBiZWVuIHNldC4gKi8KK30KKworLyogIEMg TSBTIEEgViBQICAtLSAgU2F2ZSBhIGNvcHkgb2YgdGhlIGN1cnJlbnQgcHJvbXB0LiAgKi8KKwor Vk9JRAorI2lmZGVmIENLX0FOU0lDCitjbXNhdnAoY2hhciBzW10sIGludCBuKQorI2Vsc2UKK2Nt c2F2cChzLG4pIGNoYXIgc1tdOyBpbnQgbjsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogY21z YXZwICovIHsKKyAgICBpZiAocHNldGYpCQkJCS8qIEJ1dCBub3QgaWYgbm8gcHJvbXB0IGlzIHNl dC4gKi8KKyAgICAgIGNrc3RybmNweShzLGNtcHJ4eCxuKTsKK30KKworY2hhciAqCitjbWdldHAo KSB7CisgICAgcmV0dXJuKGNtcHJ4eCk7Cit9CisKK2ludAorY21nYnJrKCkgeworICAgIHJldHVy bihicmtjaGFyKTsKK30KKworaW50CitjbWdrd2ZsZ3MoKSB7CisgICAgcmV0dXJuKGNta3dmbGdz KTsKK30KKworLyogIFAgUiBPIE0gUCBUICAtLSAgSXNzdWUgdGhlIHByb2dyYW0gcHJvbXB0LiAg Ki8KKworVk9JRAorcHJvbXB0KGYpIHh4X3N0cnAgZjsgeworICAgIGNoYXIgKnN4LCAqc3k7IGlu dCBuOworI2lmZGVmIENLX1NTTAorICAgIGV4dGVybiBpbnQgc3NsX2FjdGl2ZV9mbGFnLCB0bHNf YWN0aXZlX2ZsYWc7CisjZW5kaWYgLyogQ0tfU1NMICovCisjaWZkZWYgT1MyCisgICAgZXh0ZXJu IGludCBkaXNwbGF5X2RlbW87CisKKyAgICAvKiBJZiB0aGVyZSBpcyBhIGRlbW8gc2NyZWVuIHRv IGJlIGRpc3BsYXllZCwgZGlzcGxheSBpdCAqLworICAgIGlmIChkaXNwbGF5X2RlbW8gJiYgeGNt ZHNyYyA9PSAwKSB7CisgICAgICAgIGRlbW9zY3JuKFZDTUQpOworICAgICAgICBkaXNwbGF5X2Rl bW8gPSAwOworICAgIH0KKyNlbmRpZiAvKiBPUzIgKi8KKworICAgIGlmIChwc2V0ZiA9PSAwKQkJ CS8qIElmIG5vIHByb21wdCBzZXQsIHNldCBkZWZhdWx0LiAqLworICAgICAgY21zZXRwKGRmcHJv bSk7CisKKyAgICBzeCA9IGNtcHJ4eDsJCQkvKiBVbmV2YWx1YXRlZCBjb3B5ICovCisgICAgaWYg KGYpIHsJCQkJLyogSWYgY29udmVyc2lvbiBmdW5jdGlvbiBnaXZlbiAqLworCXN5ID0gY21wcm9t OwkJCS8qIEV2YWx1YXRlIGl0ICovCisjaWZkZWYgQ09NTUVOVAorCWRlYnVnKEYxMDEsInByb21w dCBzeCIsIiIsc3gpOworCWRlYnVnKEYxMDEsInByb21wdCBzeSIsIiIsc3kpOworI2VuZGlmCS8q IENPTU1FTlQgKi8KKwluID0gUFJPTVBUTDsKKwlpZiAoKCpmKShzeCwmc3ksJm4pIDwgMCkJLyog SWYgZXZhbHVhdGlvbiBmYWlsZWQgKi8KKwkgIHN4ID0gY21wcnh4OwkJCS8qIHJldmVydCB0byB1 bmV2YWx1YXRlZCBjb3B5ICovCisJZWxzZSBpZiAoISpjbXByb20pCQkvKiBkaXR0byBpZiBpdCBj YW1lIHVwIGVtcHR5ICovCisJICBzeCA9IGNtcHJ4eDsKKwllbHNlCisJICBzeCA9IGNtcHJvbTsK KyAgICB9IGVsc2UKKyAgICAgIGNrc3RybmNweShjbXByb20sc3gsUFJPTVBUTCk7CisgICAgY21w cm9tW1BST01QVEwtMV0gPSBOVUw7CisgICAgaWYgKCEqc3gpCQkJCS8qIERvbid0IHByaW50IGlm IGVtcHR5ICovCisgICAgICByZXR1cm47CisKKyNpZmRlZiBPU0sKKyAgICBmcHV0cyhzeCwgc3Rk b3V0KTsKKyNlbHNlCisjaWZkZWYgTUFDCisgICAgcHJpbnRmKCIlcyIsIHN4KTsKKyNlbHNlCisj aWZkZWYgSUtTRAorICAgIGlmIChpbnNlcnZlcikgewkJCS8qIFByaW50IHRoZSBwcm9tcHQuICov CisgICAgICAgIHR0b2MoQ1IpOwkJCS8qIElmIFRFTE5FVCBTZXJ2ZXIgKi8KKyAgICAgICAgdHRv YyhOVUwpOwkJCS8qIG11c3QgZm9sbG9XIENSIGJ5IE5VTCAqLworICAgICAgICBwcmludGYoIiVz IixzeCk7CisgICAgfSBlbHNlCisjZW5kaWYgLyogSUtTRCAqLworICAgICAgcHJpbnRmKCJcciVz IixzeCk7CisjaWZkZWYgQ0tfU1NMCisgICAgaWYgKCEoc3NsX2FjdGl2ZV9mbGFnIHx8IHRsc19h Y3RpdmVfZmxhZykpCisjZW5kaWYgLyogQ0tfU1NMICovCisgICAgICBmZmx1c2goc3Rkb3V0KTsJ CQkvKiBOb3chICovCisjZW5kaWYgLyogTUFDICovCisjZW5kaWYgLyogT1NLICovCit9CisKKyNp Zm5kZWYgTk9TUEwKK1ZPSUQKK3B1c2hjbWQocykgY2hhciAqIHM7IHsJCQkvKiBGb3IgdXNlIHdp dGggSUYgY29tbWFuZC4gKi8KKyAgICBpZiAoIXMpIHMgPSBucDsKKyAgICBja3N0cm5jcHkoc2F2 YnVmLHMsQ01EQkwpOwkJLyogU2F2ZSB0aGUgZGVwZW5kZW50IGNsYXVzZSwgICovCisgICAgY21y ZXMoKTsJCQkJLyogYW5kIGNsZWFyIHRoZSBjb21tYW5kIGJ1ZmZlci4gKi8KKyAgICBkZWJ1ZyhG MTEwLCAicHVzaGNtZCBzYXZidWYiLCBzYXZidWYsIDApOworfQorCitWT0lECitwdXNocWNtZChz KSBjaGFyICogczsgewkJCS8qIEZvciB1c2Ugd2l0aCBFTFNFIGNvbW1hbmQuICovCisgICAgY2hh ciBjLCAqIHAgPSBzYXZidWY7CQkvKiBEZXN0ICovCisgICAgaWYgKCFzKSBzID0gbnA7CQkJLyog U291cmNlICovCisgICAgd2hpbGUgKCpzKSB7CQkJLyogR2V0IGZpcnN0IG5vbndoaXRlc3BhY2Ug Y2hhciAqLworCWlmICgqcyAhPSBTUCkKKwkgIGJyZWFrOworCWVsc2UKKwkgIHMrKzsKKyAgICB9 CisgICAgaWYgKCpzICE9ICd7JykgewkJCS8qIElmIGl0J3Mgbm90ICJ7IiAqLworCXB1c2hjbWQo cyk7CQkJLyogZG8gcmVndWxhciBwdXNoY21kICovCisJcmV0dXJuOworICAgIH0KKyAgICB3aGls ZSAoKGMgPSAqcysrKSkgewkJLyogT3RoZXJ3aXNlIGluc2VydCBxdW90ZXMgKi8KKwlpZiAoYyA9 PSBDTURRKQorCSAgKnArKyA9IENNRFE7CisJKnArKyA9IGM7CisgICAgfQorICAgIGNtcmVzKCk7 CQkJCS8qIGFuZCBjbGVhciB0aGUgY29tbWFuZCBidWZmZXIuICovCisgICAgZGVidWcoRjExMCwg InB1c2hxY21kIHNhdmJ1ZiIsIHNhdmJ1ZiwgMCk7Cit9CisjZW5kaWYgLyogTk9TUEwgKi8KKwor I2lmZGVmIENPTU1FTlQKKy8qIG5vIGxvbmdlciB1c2VkLi4uICovCitWT0lECitwb3BjbWQoKSB7 CisgICAgY2tzdHJuY3B5KGNtZGJ1ZixzYXZidWYsQ01EQkwpOwkvKiBQdXQgYmFjayB0aGUgc2F2 ZWQgbWF0ZXJpYWwgKi8KKyAgICAqc2F2YnVmID0gJ1wwJzsJCQkvKiBhbmQgY2xlYXIgdGhlIHNh dmUgYnVmZmVyICovCisgICAgY21yZXMoKTsKK30KKyNlbmRpZiAvKiBDT01NRU5UICovCisKKy8q ICBDIE0gUiBFIFMgIC0tICBSZXNldCBwb2ludGVycyB0byBiZWdpbm5pbmcgb2YgY29tbWFuZCBi dWZmZXIuICAqLworCitWT0lECitjbXJlcygpIHsKKyAgICBpbndvcmQgPSAwOwkJCQkvKiBXZSdy ZSBub3QgaW4gYSB3b3JkICovCisgICAgY2MgPSAwOwkJCQkvKiBDaGFyYWN0ZXIgY291bnQgaXMg emVybyAqLworCisvKiBJbml0aWFsaXplIHBvaW50ZXJzICovCisKKyAgICBwcCA9IGNtZGJ1ZjsJ CQkvKiBCZWdpbm5pbmcgb2YgY3VycmVudCBmaWVsZCAqLworICAgIGJwID0gY21kYnVmOwkJCS8q IEN1cnJlbnQgcG9zaXRpb24gd2l0aGluIGJ1ZmZlciAqLworICAgIG5wID0gY21kYnVmOwkJCS8q IFdoZXJlIHRvIHN0YXJ0IG5leHQgZmllbGQgKi8KKworICAgIGNtZmxkZmxncyA9IDA7CisgICAg Y21mbGdzID0gLTU7ICAgICAgICAgICAgICAgICAgICAgICAgLyogUGFyc2Ugbm90IHlldCBzdGFy dGVkLiAqLworICAgIHVuZ3cgPSAwOwkJCQkvKiBEb24ndCBuZWVkIHRvIHVuZ2V0IGEgd29yZC4g Ki8KK30KKworLyogIEMgTSBJIE4gSSAgLS0gIENsZWFyIHRoZSBjb21tYW5kIGFuZCBhdG9tIGJ1 ZmZlcnMsIHJlc2V0IHBvaW50ZXJzLiAgKi8KKworLyoKK1RoZSBhcmd1bWVudCBzcGVjaWZpZXMg d2hvIGlzIHRvIGVjaG8gdGhlIHVzZXIncyB0eXBlaW4gLS0KKyAgMSBtZWFucyB0aGUgY21kIHBh Y2thZ2UgZWNob2VzCisgIDAgc29tZWJvZHkgZWxzZSAoc3lzdGVtLCBmcm9udCBlbmQsIHRlcm1p bmFsKSBlY2hvZXMKKyovCitWT0lECitjbWluaShkKSBpbnQgZDsgeworI2lmZGVmIERDTURCVUYK KyAgICBpZiAoIWF0bWJ1ZikKKyAgICAgIGlmIChjbXNldHVwKCk8MCkKKwlmYXRhbCgiZmF0YWwg ZXJyb3I6IHVuYWJsZSB0byBhbGxvY2F0ZSBjb21tYW5kIGJ1ZmZlcnMiKTsKKyNlbmRpZiAvKiBE Q01EQlVGICovCisjaWZkZWYgVVNFX01FTUNQWQorICAgIG1lbXNldChjbWRidWYsMCxDTURCTCk7 CisgICAgbWVtc2V0KGF0bWJ1ZiwwLEFUTUJMKTsKKyNlbHNlCisgICAgZm9yIChicCA9IGNtZGJ1 ZjsgYnAgPCBjbWRidWYrQ01EQkw7IGJwKyspICpicCA9IE5VTDsKKyAgICBmb3IgKGJwID0gYXRt YnVmOyBicCA8IGF0bWJ1ZitBVE1CTDsgYnArKykgKmJwID0gTlVMOworI2VuZGlmIC8qIFVTRV9N RU1DUFkgKi8KKworICAgICphdG1idWYgPSAqc2F2YnVmID0gKmF0eGJ1ZiA9ICphdHlidWYgPSAq ZmlsYnVmID0gTlVMOworICAgIGJsb2NrbHZsID0gMDsJCQkvKiBCbG9jayBsZXZlbCBpcyAwICov CisgICAgbGluZWJlZ2luID0gMTsJCQkvKiBBdCB0aGUgYmVnaW5uaW5nIG9mIGEgbGluZSAqLwor ICAgIGRweCA9IGQ7CQkJCS8qIEdsb2JhbCBjb3B5IG9mIHRoZSBlY2hvIGZsYWcgKi8KKyAgICBk ZWJ1ZyhGMTAxLCJjbWluaSBkcHgiLCIiLGRweCk7CisgICAgY3JmbGFnID0gMDsJCQkJLyogUmVz ZXQgZmxhZ3MgKi8KKyAgICBxbWZsYWcgPSAwOworICAgIGVzZmxhZyA9IDA7CisjaWZkZWYgQ0tf UkVDQUxMCisgICAgbm9fcmVjYWxsID0gMDsJCQkvKiBTdGFydCBvdXQgd2l0aCByZWNhbGwgZW5h YmxlZCAqLworI2VuZGlmIC8qIENLX1JFQ0FMTCAqLworICAgIGNtcmVzKCk7CQkJCS8qIFNldHMg YnAgZXRjICovCisgICAgbmV3Y21kID0gMTsJCQkJLyogU2VlIGFkZGNtZCgpICovCit9CisKKyNp Zm5kZWYgTk9TUEwKKy8qCisgIFRoZSBmb2xsb3dpbmcgYml0cyBhcmUgdG8gYWxsb3cgdGhlIGNv bW1hbmQgcGFja2FnZSB0byBjYWxsIGl0c2VsZgorICBpbiB0aGUgbWlkZGxlIG9mIGEgcGFyc2Uu ICBUbyBkbyB0aGlzLCBiZWdpbiBieSBjYWxsaW5nIGNtcHVzaCwgYW5kCisgIGVuZCBieSBjYWxs aW5nIGNtcG9wLiAgQXMgeW91IGNhbiBzZWUsIHRoaXMgaXMgcmF0aGVyIGV4cGVuc2l2ZS4KKyov CisjaWZkZWYgRENNREJVRgorc3RydWN0IGNtcCB7CisgICAgaW50IGlbNV07CQkJCS8qIHN0YWNr IGZvciBpbnRlZ2VycyAqLworICAgIGNoYXIgKmNbM107CQkJCS8qIHN0YWNrIGZvciBwb2ludGVy cyAqLworICAgIGNoYXIgKmJbOF07CQkJCS8qIHN0YWNrIGZvciBidWZmZXIgY29udGVudHMgKi8K K307CitzdHJ1Y3QgY21wICpjbXAgPSAwOworI2Vsc2UKK2ludCBjbXBfaVtDTURERVArMV1bNV07 CQkJLyogU3RhY2sgZm9yIGludGVnZXJzICovCitjaGFyICpjbXBfY1tDTURERVArMV1bNV07CQkv KiBmb3IgbWlzYyBwb2ludGVycyAqLworY2hhciAqY21wX2JbQ01EREVQKzFdWzddOwkJLyogZm9y IGJ1ZmZlciBjb250ZW50cyBwb2ludGVycyAqLworI2VuZGlmIC8qIERDTURCVUYgKi8KKworaW50 IGNtZGRlcCA9IC0xOwkJCS8qIEN1cnJlbnQgc3RhY2sgZGVwdGggKi8KKworaW50CitjbXB1c2go KSB7CQkJCS8qIFNhdmUgdGhlIGNvbW1hbmQgZW52aXJvbm1lbnQgKi8KKyAgICBjaGFyICpjcDsJ CQkJLyogQ2hhcmFjdGVyIHBvaW50ZXIgKi8KKworICAgIGlmIChjbWRkZXAgPj0gQ01EREVQKQkJ LyogRW50ZXIgYSBuZXcgY29tbWFuZCBkZXB0aCAqLworICAgICAgcmV0dXJuKC0xKTsKKyAgICBj bWRkZXArKzsKKyAgICBkZWJ1ZyhGMTAxLCImY21wdXNoIHRvIGRlcHRoIiwiIixjbWRkZXApOwor CisjaWZkZWYgRENNREJVRgorICAgIC8qIGFsbG9jYXRlIG1lbW9yeSBmb3IgY21wIGlmIG5vdCBh bHJlYWR5IGRvbmUgKi8KKyAgICBpZiAoIWNtcCAmJiAhKGNtcCA9IChzdHJ1Y3QgY21wICopIG1h bGxvYyhzaXplb2Yoc3RydWN0IGNtcCkqKENNRERFUCsxKSkpKQorICAgICAgZmF0YWwoImNtcHVz aDogbm8gbWVtb3J5IGZvciBjbXAiKTsKKyAgICBjbXBbY21kZGVwXS5pWzBdID0gY21mbGdzOwkJ LyogRmlyc3QgZG8gdGhlIGdsb2JhbCBpbnRzICovCisgICAgY21wW2NtZGRlcF0uaVsxXSA9IGNt ZnNhdjsKKyAgICBjbXBbY21kZGVwXS5pWzJdID0gYXR4bjsKKyAgICBjbXBbY21kZGVwXS5pWzNd ID0gdW5ndzsKKworICAgIGNtcFtjbWRkZXBdLmNbMF0gPSBicDsJCS8qIFRoZW4gdGhlIGdsb2Jh bCBwb2ludGVycyAqLworICAgIGNtcFtjbWRkZXBdLmNbMV0gPSBwcDsKKyAgICBjbXBbY21kZGVw XS5jWzJdID0gbnA7CisjZWxzZQorICAgIGNtcF9pW2NtZGRlcF1bMF0gPSBjbWZsZ3M7CQkvKiBG aXJzdCBkbyB0aGUgZ2xvYmFsIGludHMgKi8KKyAgICBjbXBfaVtjbWRkZXBdWzFdID0gY21mc2F2 OworICAgIGNtcF9pW2NtZGRlcF1bMl0gPSBhdHhuOworICAgIGNtcF9pW2NtZGRlcF1bM10gPSB1 bmd3OworCisgICAgY21wX2NbY21kZGVwXVswXSA9IGJwOwkJLyogVGhlbiB0aGUgZ2xvYmFsIHBv aW50ZXJzICovCisgICAgY21wX2NbY21kZGVwXVsxXSA9IHBwOworICAgIGNtcF9jW2NtZGRlcF1b Ml0gPSBucDsKKyNlbmRpZiAvKiBEQ01EQlVGICovCisKKyAgICAvKiBOb3cgdGhlIGJ1ZmZlcnMg dGhlbXNlbHZlcy4gIEEgbG90IG9mIHJlcGl0aXRpb3VzIGNvZGUuLi4gKi8KKworI2lmZGVmIERD TURCVUYKKyAgICBjcCA9IG1hbGxvYygoaW50KXN0cmxlbihjbWRidWYpKzEpOwkvKiAwOiBDb21t YW5kIGJ1ZmZlciAqLworICAgIGlmIChjcCkgc3RyY3B5KGNwLGNtZGJ1Zik7CisgICAgY21wW2Nt ZGRlcF0uYlswXSA9IGNwOworICAgIGlmIChjcCA9PSBOVUxMKSByZXR1cm4oLTEpOworCisgICAg Y3AgPSBtYWxsb2MoKGludClzdHJsZW4oc2F2YnVmKSsxKTsJLyogMTogU2F2ZSBidWZmZXIgKi8K KyAgICBpZiAoY3ApIHN0cmNweShjcCxzYXZidWYpOworICAgIGNtcFtjbWRkZXBdLmJbMV0gPSBj cDsKKyAgICBpZiAoY3AgPT0gTlVMTCkgcmV0dXJuKC0xKTsKKworICAgIGNtcFtjbWRkZXBdLmJb Ml0gPSBOVUxMOworCisgICAgY3AgPSBtYWxsb2MoKGludClzdHJsZW4oYXRtYnVmKSsxKTsJLyog MzogQXRvbSBidWZmZXIgKi8KKyAgICBpZiAoY3ApIHN0cmNweShjcCxhdG1idWYpOworICAgIGNt cFtjbWRkZXBdLmJbM10gPSBjcDsKKyAgICBpZiAoY3AgPT0gTlVMTCkgcmV0dXJuKC0xKTsKKwor ICAgIGNwID0gbWFsbG9jKChpbnQpc3RybGVuKGF0eGJ1ZikrMSk7CS8qIDQ6IEV4cGFuc2lvbiBi dWZmZXIgKi8KKyAgICBpZiAoY3ApIHN0cmNweShjcCxhdHhidWYpOworICAgIGNtcFtjbWRkZXBd LmJbNF0gPSBjcDsKKyAgICBpZiAoY3AgPT0gTlVMTCkgcmV0dXJuKC0xKTsKKworICAgIGNwID0g bWFsbG9jKChpbnQpc3RybGVuKGF0eWJ1ZikrMSk7CS8qIDU6IEF0b20gYnVmZmVyIGNvcHkgKi8K KyAgICBpZiAoY3ApIHN0cmNweShjcCxhdHlidWYpOworICAgIGNtcFtjbWRkZXBdLmJbNV0gPSBj cDsKKyAgICBpZiAoY3AgPT0gTlVMTCkgcmV0dXJuKC0xKTsKKworICAgIGNwID0gbWFsbG9jKChp bnQpc3RybGVuKGZpbGJ1ZikrMSk7CS8qIDY6IEZpbGUgbmFtZSBidWZmZXIgKi8KKyAgICBpZiAo Y3ApIHN0cmNweShjcCxmaWxidWYpOworICAgIGNtcFtjbWRkZXBdLmJbNl0gPSBjcDsKKyAgICBp ZiAoY3AgPT0gTlVMTCkgcmV0dXJuKC0xKTsKKyNlbHNlCisgICAgY3AgPSBtYWxsb2MoKGludClz dHJsZW4oY21kYnVmKSsxKTsJLyogMDogQ29tbWFuZCBidWZmZXIgKi8KKyAgICBpZiAoY3ApIHN0 cmNweShjcCxjbWRidWYpOworICAgIGNtcF9iW2NtZGRlcF1bMF0gPSBjcDsKKyAgICBpZiAoY3Ag PT0gTlVMTCkgcmV0dXJuKC0xKTsKKworICAgIGNwID0gbWFsbG9jKChpbnQpc3RybGVuKHNhdmJ1 ZikrMSk7CS8qIDE6IFNhdmUgYnVmZmVyICovCisgICAgaWYgKGNwKSBzdHJjcHkoY3Asc2F2YnVm KTsKKyAgICBjbXBfYltjbWRkZXBdWzFdID0gY3A7CisgICAgaWYgKGNwID09IE5VTEwpIHJldHVy bigtMSk7CisKKyAgICBjbXBfYltjbWRkZXBdWzJdID0gTlVMTDsKKworICAgIGNwID0gbWFsbG9j KChpbnQpc3RybGVuKGF0bWJ1ZikrMSk7CS8qIDM6IEF0b20gYnVmZmVyICovCisgICAgaWYgKGNw KSBzdHJjcHkoY3AsYXRtYnVmKTsKKyAgICBjbXBfYltjbWRkZXBdWzNdID0gY3A7CisgICAgaWYg KGNwID09IE5VTEwpIHJldHVybigtMSk7CisKKyAgICBjcCA9IG1hbGxvYygoaW50KXN0cmxlbihh dHhidWYpKzEpOwkvKiA0OiBFeHBhbnNpb24gYnVmZmVyICovCisgICAgaWYgKGNwKSBzdHJjcHko Y3AsYXR4YnVmKTsKKyAgICBjbXBfYltjbWRkZXBdWzRdID0gY3A7CisgICAgaWYgKGNwID09IE5V TEwpIHJldHVybigtMSk7CisKKyAgICBjcCA9IG1hbGxvYygoaW50KXN0cmxlbihhdHlidWYpKzEp OwkvKiA1OiBBdG9tIGJ1ZmZlciBjb3B5ICovCisgICAgaWYgKGNwKSBzdHJjcHkoY3AsYXR5YnVm KTsKKyAgICBjbXBfYltjbWRkZXBdWzVdID0gY3A7CisgICAgaWYgKGNwID09IE5VTEwpIHJldHVy bigtMSk7CisKKyAgICBjcCA9IG1hbGxvYygoaW50KXN0cmxlbihmaWxidWYpKzEpOwkvKiA2OiBG aWxlIG5hbWUgYnVmZmVyICovCisgICAgaWYgKGNwKSBzdHJjcHkoY3AsZmlsYnVmKTsKKyAgICBj bXBfYltjbWRkZXBdWzZdID0gY3A7CisgICAgaWYgKGNwID09IE5VTEwpIHJldHVybigtMSk7Cisj ZW5kaWYgLyogRENNREJVRiAqLworCisgICAgY21pbmkoZHB4KTsJCQkJLyogSW5pdGl6ZSB0aGUg Y29tbWFuZCBwYXJzZXIgKi8KKyAgICByZXR1cm4oMCk7Cit9CisKK2ludAorY21wb3AoKSB7CQkJ CS8qIFJlc3RvcmUgdGhlIGNvbW1hbmQgZW52aXJvbm1lbnQgKi8KKyAgICBpZiAoY21kZGVwIDwg MCkgeworCWRlYnVnKEYxMDAsIiZjbXBvcCBjYWxsZWQgZnJvbSB0b3AgbGV2ZWwiLCIiLDApOwor CXJldHVybigtMSk7CQkJLyogRG9uJ3QgcG9wIHRvbyBtdWNoISAqLworICAgIH0KKyNpZmRlZiBE Q01EQlVGCisgICAgY21mbGdzID0gY21wW2NtZGRlcF0uaVswXTsJCS8qIEZpcnN0IGRvIHRoZSBn bG9iYWwgaW50cyAqLworICAgIGNtZnNhdiA9IGNtcFtjbWRkZXBdLmlbMV07CisgICAgYXR4biA9 IGNtcFtjbWRkZXBdLmlbMl07CisgICAgdW5ndyA9IGNtcFtjbWRkZXBdLmlbM107CisKKyAgICBi cCA9IGNtcFtjbWRkZXBdLmNbMF07CQkvKiBUaGVuIHRoZSBnbG9iYWwgcG9pbnRlcnMgKi8KKyAg ICBwcCA9IGNtcFtjbWRkZXBdLmNbMV07CisgICAgbnAgPSBjbXBbY21kZGVwXS5jWzJdOworI2Vs c2UKKyAgICBjbWZsZ3MgPSBjbXBfaVtjbWRkZXBdWzBdOwkJLyogRmlyc3QgZG8gdGhlIGdsb2Jh bCBpbnRzICovCisgICAgY21mc2F2ID0gY21wX2lbY21kZGVwXVsxXTsKKyAgICBhdHhuID0gY21w X2lbY21kZGVwXVsyXTsKKyAgICB1bmd3ID0gY21wX2lbY21kZGVwXVszXTsKKworICAgIGJwID0g Y21wX2NbY21kZGVwXVswXTsJCS8qIFRoZW4gdGhlIGdsb2JhbCBwb2ludGVycyAqLworICAgIHBw ID0gY21wX2NbY21kZGVwXVsxXTsKKyAgICBucCA9IGNtcF9jW2NtZGRlcF1bMl07CisjZW5kaWYg LyogRENNREJVRiAqLworCisgICAgLyogTm93IHRoZSBidWZmZXJzIHRoZW1zZWx2ZXMuICovCisg ICAgLyogTm90ZTogc3RybmNweSgpLCBub3QgY2tzdHJuY3B5KCkgLS0gSGVyZSB3ZSBXQU5UIHRo ZSBOVUwgcGFkZGluZy4uLiAqLworCisjaWZkZWYgRENNREJVRgorICAgIGlmIChjbXBbY21kZGVw XS5iWzBdKSB7CisKKwlzdHJuY3B5KGNtZGJ1ZixjbXBbY21kZGVwXS5iWzBdLENNREJMKTsgLyog MDogQ29tbWFuZCBidWZmZXIgKi8KKwlmcmVlKGNtcFtjbWRkZXBdLmJbMF0pOworCWNtcFtjbWRk ZXBdLmJbMF0gPSBOVUxMOworICAgIH0KKyAgICBpZiAoY21wW2NtZGRlcF0uYlsxXSkgeworCXN0 cm5jcHkoc2F2YnVmLGNtcFtjbWRkZXBdLmJbMV0sQ01EQkwpOyAvKiAxOiBTYXZlIGJ1ZmZlciAq LworCWZyZWUoY21wW2NtZGRlcF0uYlsxXSk7CisJY21wW2NtZGRlcF0uYlsxXSA9IE5VTEw7Cisg ICAgfQorICAgIGlmIChjbXBbY21kZGVwXS5iWzNdKSB7CisJc3RybmNweShhdG1idWYsY21wW2Nt ZGRlcF0uYlszXSxBVE1CTCk7IC8qIDM6IEF0b21pYyBidWZmZXIhICovCisJZnJlZShjbXBbY21k ZGVwXS5iWzNdKTsKKwljbXBbY21kZGVwXS5iWzNdID0gTlVMTDsKKyAgICB9CisgICAgaWYgKGNt cFtjbWRkZXBdLmJbNF0pIHsKKwlzdHJuY3B5KGF0eGJ1ZixjbXBbY21kZGVwXS5iWzRdLEFUTUJM KTsgLyogNDogZVhwYW5zaW9uIGJ1ZmZlciAqLworCWZyZWUoY21wW2NtZGRlcF0uYls0XSk7CisJ Y21wW2NtZGRlcF0uYls0XSA9IE5VTEw7CisgICAgfQorICAgIGlmIChjbXBbY21kZGVwXS5iWzVd KSB7CisJc3RybmNweShhdHlidWYsY21wW2NtZGRlcF0uYls1XSxBVE1CTCk7IC8qIDU6IEF0b20g YnVmZmVyIGNvcFkgKi8KKwlmcmVlKGNtcFtjbWRkZXBdLmJbNV0pOworCWNtcFtjbWRkZXBdLmJb NV0gPSBOVUxMOworICAgIH0KKyAgICBpZiAoY21wW2NtZGRlcF0uYls2XSkgeworCXN0cm5jcHko ZmlsYnVmLGNtcFtjbWRkZXBdLmJbNl0sQVRNQkwpOyAvKiA2OiBGaWxlbmFtZSBidWZmZXIgKi8K KwlmcmVlKGNtcFtjbWRkZXBdLmJbNl0pOworCWNtcFtjbWRkZXBdLmJbNl0gPSBOVUxMOworICAg IH0KKyNlbHNlCisgICAgaWYgKGNtcF9iW2NtZGRlcF1bMF0pIHsKKwlzdHJuY3B5KGNtZGJ1Zixj bXBfYltjbWRkZXBdWzBdLENNREJMKTsgLyogMDogQ29tbWFuZCBidWZmZXIgKi8KKwlmcmVlKGNt cF9iW2NtZGRlcF1bMF0pOworCWNtcF9iW2NtZGRlcF1bMF0gPSBOVUxMOworICAgIH0KKyAgICBp ZiAoY21wX2JbY21kZGVwXVsxXSkgeworCXN0cm5jcHkoc2F2YnVmLGNtcF9iW2NtZGRlcF1bMV0s Q01EQkwpOyAvKiAxOiBTYXZlIGJ1ZmZlciAqLworCWZyZWUoY21wX2JbY21kZGVwXVsxXSk7CisJ Y21wX2JbY21kZGVwXVsxXSA9IE5VTEw7CisgICAgfQorICAgIGlmIChjbXBfYltjbWRkZXBdWzNd KSB7CisJc3RybmNweShhdG1idWYsY21wX2JbY21kZGVwXVszXSxBVE1CTCk7IC8qIDM6IEF0b21p YyBidWZmZXIhICovCisJZnJlZShjbXBfYltjbWRkZXBdWzNdKTsKKwljbXBfYltjbWRkZXBdWzNd ID0gTlVMTDsKKyAgICB9CisgICAgaWYgKGNtcF9iW2NtZGRlcF1bNF0pIHsKKwlzdHJuY3B5KGF0 eGJ1ZixjbXBfYltjbWRkZXBdWzRdLEFUTUJMKTsgLyogNDogZVhwYW5zaW9uIGJ1ZmZlciAqLwor CWZyZWUoY21wX2JbY21kZGVwXVs0XSk7CisJY21wX2JbY21kZGVwXVs0XSA9IE5VTEw7CisgICAg fQorICAgIGlmIChjbXBfYltjbWRkZXBdWzVdKSB7CisJc3RybmNweShhdHlidWYsY21wX2JbY21k ZGVwXVs1XSxBVE1CTCk7IC8qIDU6IEF0b20gYnVmZmVyIGNvcFkgKi8KKwlmcmVlKGNtcF9iW2Nt ZGRlcF1bNV0pOworCWNtcF9iW2NtZGRlcF1bNV0gPSBOVUxMOworICAgIH0KKyAgICBpZiAoY21w X2JbY21kZGVwXVs2XSkgeworCXN0cm5jcHkoZmlsYnVmLGNtcF9iW2NtZGRlcF1bNl0sQVRNQkwp OyAvKiA2OiBGaWxlbmFtZSBidWZmZXIgKi8KKwlmcmVlKGNtcF9iW2NtZGRlcF1bNl0pOworCWNt cF9iW2NtZGRlcF1bNl0gPSBOVUxMOworICAgIH0KKyNlbmRpZiAvKiBEQ01EQlVGICovCisKKyAg ICBjbWRkZXAtLTsJCQkJLyogUmlzZSwgcmlzZSAqLworICAgIGRlYnVnKEYxMDEsIiZjbXBvcCB0 byBkZXB0aCIsIiIsY21kZGVwKTsKKyAgICByZXR1cm4oY21kZGVwKTsKK30KKyNlbmRpZiAvKiBO T1NQTCAqLworCisjaWZkZWYgQ09NTUVOVAorVk9JRAkJCQkJLyogTm90IHVzZWQgKi8KK3N0cmlw cShzKSBjaGFyICpzOyB7ICAgICAgICAgICAgICAgICAgICAvKiBGdW5jdGlvbiB0byBzdHJpcCAn XCcgcXVvdGVzICovCisgICAgY2hhciAqdDsKKyAgICB3aGlsZSAoKnMpIHsKKyAgICAgICAgaWYg KCpzID09IENNRFEpIHsKKyAgICAgICAgICAgIGZvciAodCA9IHM7ICp0ICE9ICdcMCc7IHQrKykg KnQgPSAqKHQrMSk7CisgICAgICAgIH0KKyAgICAgICAgcysrOworICAgIH0KK30KKyNlbmRpZiAv KiBDT01NRU5UICovCisKKy8qIENvbnZlcnQgdGFicyB0byBzcGFjZXMsIG9uZSBmb3Igb25lICov CitWT0lECit1bnRhYihzKSBjaGFyICpzOyB7CisgICAgd2hpbGUgKCpzKSB7CisJaWYgKCpzID09 IEhUKSAqcyA9IFNQOworCXMrKzsKKyAgICB9Cit9CisKKy8qICBDIE0gTiBVIE0gIC0tICBQYXJz ZSBhIG51bWJlciBpbiB0aGUgaW5kaWNhdGVkIHJhZGl4ICAqLworCisvKgorIFRoZSByYWRpeCBp cyBzcGVjaWZpZWQgaW4gdGhlIGFyZyBsaXN0LgorIFBhcnNlcyB1bnF1b3RlZCBudW1lcmljIHN0 cmluZ3MgaW4gdGhlIGdpdmVuIHJhZGl4LgorIFBhcnNlcyBiYWNrc2xhc2gtcXVvdGVkIG51bWJl cnMgaW4gdGhlIHJhZGl4IGluZGljYXRlZCBieSB0aGUgcXVvdGU6CisgICBcbm5uID0gXGRubm4g PSBkZWNpbWFsLCBcb25ubiA9IG9jdGFsLCBceG5uID0gSGV4YWRlY2ltYWwuCisgSWYgdGhlc2Ug ZmFpbCwgdGhlbiBpZiBhIHByZXByb2Nlc3NpbmcgZnVuY3Rpb24gaXMgc3VwcGxpZWQsIHRoYXQg aXMgYXBwbGllZAorIGFuZCB0aGVuIGEgc2Vjb25kIGF0dGVtcHQgaXMgbWFkZSB0byBwYXJzZSBh biB1bnF1b3RlZCBkZWNpbWFsIHN0cmluZy4KKyBBbmQgaWYgdGhhdCBmYWlscywgdGhlIHByZXBy b2Nlc3NlZCBzdHJpbmcgaXMgcGFzc2VkIHRvIGFuIGFyaXRobWV0aWMKKyBleHByZXNzaW9uIGV2 YWx1YXRvci4KKworIFJldHVybnM6CisgICAtMyBpZiBubyBpbnB1dCBwcmVzZW50IHdoZW4gcmVx dWlyZWQsCisgICAtMiBpZiB1c2VyIHR5cGVkIGFuIGlsbGVnYWwgbnVtYmVyLAorICAgLTEgaWYg cmVwYXJzZSBuZWVkZWQsCisgICAgMCBvdGhlcndpc2UsIHdpdGggYXJndW1lbnQgbiBzZXQgdG8g dGhlIG51bWJlciB0aGF0IHdhcyBwYXJzZWQKKyovCisvKiBUaGlzIGlzIHRoZSB0cmFkaXRpb25h bCBjbW51bSgpIHRoYXQgZ2V0cyBhbiBpbnQgKi8KK2ludAorY21udW0oeGhscCx4ZGVmLHJhZGl4 LG4sZikgY2hhciAqeGhscCwgKnhkZWY7IGludCByYWRpeCwgKm47IHh4X3N0cnAgZjsgeworICAg IENLX09GRl9UIHogPSAoQ0tfT0ZGX1QpMCwgY2hlY2s7CisgICAgaW50IHg7CisgICAgeCA9IGNt bnVtdyh4aGxwLHhkZWYscmFkaXgsJnosZik7CisgICAgKm4gPSB6OworICAgIGNoZWNrID0gKm47 CisgICAgaWYgKGNoZWNrICE9IHopIHsKKwlwcmludGYoIj9NYWduaXR1ZGUgb2YgcmVzdWx0IHRv byBsYXJnZSBmb3IgaW50ZWdlciAtICVzXG4iLGNrZnN0b2EoeikpOworCXJldHVybigtOSk7Cisg ICAgfQorICAgIHJldHVybih4KTsKK30KKworLyoKKyAgVGhpcyBpcyB0aGUgbmV3IGNtbnVtKCkg dGhhdCBnZXRzIGEgIndpZGUiIHJlc3VsdCwgd2hhdGV2ZXIgQ0tfT0ZGX1QKKyAgaXMgZGVmaW5l ZCB0byBiZSwgbm9ybWFsbHkgMzIgb3IgNjQgYml0cywgZGVwZW5kaW5nIG9uIHRoZSBwbGF0Zm9y bS4KKyAgZmRjLCAyNCBEZWMgMjAwNS4KKyovCitpbnQKK2NtbnVtdyh4aGxwLHhkZWYscmFkaXgs bixmKQorICAgIGNoYXIgKnhobHAsICp4ZGVmOyBpbnQgcmFkaXg7IENLX09GRl9UICpuOyB4eF9z dHJwIGY7IHsKKyAgICBpbnQgeDsgY2hhciAqcywgKnpwLCAqenE7CisjaWZkZWYgQ09NTUVOVAor ICAgIGNoYXIgbGJyYWNlLCByYnJhY2U7CisjZW5kaWYgLyogQ09NTUVOVCAqLworCisgICAgaWYg KCF4aGxwKSB4aGxwID0gIiI7CisgICAgaWYgKCF4ZGVmKSB4ZGVmID0gIiI7CisKKyNpZmRlZiBD T01NRU5UCisgICAgaWYgKGNtZmxkZmxncyAmIDEpIHsKKwlsYnJhY2UgPSAnKCc7CisJcmJyYWNl ID0gJyknOworICAgIH0gZWxzZSB7CisJbGJyYWNlID0gJ3snOworCXJicmFjZSA9ICd9JzsKKyAg ICB9CisjZW5kaWYgLyogQ09NTUVOVCAqLworCisgICAgaWYgKHJhZGl4ICE9IDEwICYmIHJhZGl4 ICE9IDgpIHsJLyogSnVzdCBkbyBiYXNlcyA4IGFuZCAxMCAqLworICAgICAgICBwcmludGYoImNt bnVtOiBpbGxlZ2FsIHJhZGl4IC0gJWRcbiIscmFkaXgpOworICAgICAgICByZXR1cm4oLTIpOwor ICAgIH0gLyogRWFzeSB0byBhZGQgb3RoZXJzIGJ1dCB0aGVyZSBoYXMgbmV2ZXIgYmVlbiBhIG5l ZWQgZm9yIGl0LiAqLworICAgIHggPSBjbWZsZCh4aGxwLHhkZWYsJnMsKHh4X3N0cnApMCk7Cisg ICAgZGVidWcoRjEwMSwiY21udW06IGNtZmxkIiwiIix4KTsKKyAgICBpZiAoeCA8IDApIHJldHVy bih4KTsJCS8qIFBhcnNlIGEgZmllbGQgKi8KKyAgICB6cCA9IGF0bWJ1ZjsKKy8qCisgIEVkaXQg MTkyIC0gQWxsb3cgYW55IG51bWJlciBmaWVsZCB0byBiZSBicmFjZWQuICBUaGlzIGxldHMgdXMg aW5jbHVkZQorICBzcGFjZXMgaW4gZXhwcmVzc2lvbnMsIGJ1dCBwZXJoYXBzIG1vcmUgaW1wb3J0 YW50IGxldHMgdXMgaGF2ZSB1c2VyLWRlZmluZWQKKyAgZnVuY3Rpb25zIGluIG51bWVyaWMgZmll bGRzLgorKi8KKyAgICB6cCA9IGJyc3RyaXAoenApOwkJCS8qIFN0cmlwIGJyYWNlcyAqLworICAg IGlmIChjbWZsZGZsZ3MgJiAxICYmICp6cCA9PSAnKCcpIHsJLyogUGFyZW5zIHRvby4uICovCisJ eCA9IChpbnQpIHN0cmxlbihhdG1idWYpOworCWlmICh4ID4gMCkgeworCSAgICBpZiAoKihhdG1i dWYreC0xKSA9PSAnKScpIHsKKwkJKihhdG1idWYreC0xKSA9IE5VTDsKKwkJenArKzsKKwkgICAg fQorCX0KKyAgICB9CisgICAgaWYgKGNoa251bSh6cCkpIHsJCQkvKiBDaGVjayBmb3IgbnVtYmVy ICovCisJaWYgKHJhZGl4ID09IDgpIHsJCS8qIElmIGl0J3Mgc3VwcG9zZWQgdG8gYmUgb2N0YWwg Ki8KKwkgICAgenAgPSBja3JhZGl4KHpwLDgsMTApOwkvKiBjb252ZXJ0IHRvIGRlY2ltYWwgKi8K KwkgICAgaWYgKCF6cCkgcmV0dXJuKC0yKTsKKwkgICAgaWYgKCFzdHJjbXAoenAsIi0xIikpIHJl dHVybigtMik7CisJfQorCWVycm5vID0gMDsJCQkvKiBHb3Qgb25lLCB3ZSdyZSBkb25lLiAqLwor ICAgICAgICAqbiA9IGNrYXRvZnMoenApOworCWlmIChlcnJubykgeworCSAgICBwZXJyb3IoenAp OworCSAgICByZXR1cm4oLTkpOworCX0KKwlkZWJ1ZyhGMTAxLCJjbW51bSAxc3QgY2hrbnVtIG9r IiwiIiwqbik7CisgICAgICAgIHJldHVybigwKTsKKyAgICB9IGVsc2UgaWYgKCh4ID0geHhlc2Mo JnpwKSkgPiAtMSkgewkvKiBDaGVjayBmb3IgYmFja3NsYXNoIGVzY2FwZSAqLworCisjaWZuZGVm IE9TMgorCSpuID0geDsKKyNlbHNlCisJKm4gPSB3aWRlcmVzdWx0OworI2VuZGlmIC8qIE9TMiAq LworCisJZGVidWcoRjEwMSwiY21udW0geHhlc2Mgb2siLCIiLCpuKTsKKwlyZXR1cm4oKnpwID8g LTIgOiAwKTsKKyAgICB9IGVsc2UgaWYgKGYpIHsJCQkvKiBJZiBjb252ZXJzaW9uIGZ1bmN0aW9u IGdpdmVuICovCisJenEgPSBhdHhidWY7CQkJLyogVHJ5IHRoYXQgKi8KKwlhdHhuID0gQ01EQkw7 CisJaWYgKCgqZikoenAsJnpxLCZhdHhuKSA8IDApCS8qIENvbnZlcnQgKi8KKwkgIHJldHVybigt Mik7CisJenAgPSBhdHhidWY7CisgICAgfQorICAgIGRlYnVnKEYxMTAsImNtbnVtIHpwIDEiLHpw LDApOworICAgIGlmICghKnpwKSB6cCA9IHhkZWY7CQkvKiBSZXN1bHQgZW1wdHksIHN1YnN0aXR1 dGUgZGVmYXVsdCAqLworICAgIGRlYnVnKEYxMTAsImNtbnVtIHpwIDIiLHpwLDApOworICAgIGlm IChjaGtudW0oenApKSB7CQkJLyogQ2hlY2sgYWdhaW4gZm9yIGRlY2ltYWwgbnVtYmVyICovCisJ aWYgKHJhZGl4ID09IDgpIHsJCS8qIElmIGl0J3Mgc3VwcG9zZWQgdG8gYmUgb2N0YWwgKi8KKwkg ICAgenAgPSBja3JhZGl4KHpwLDgsMTApOwkvKiBjb252ZXJ0IHRvIGRlY2ltYWwgKi8KKwkgICAg aWYgKCF6cCkgcmV0dXJuKC0yKTsKKwkgICAgaWYgKCFzdHJjbXAoenAsIi0xIikpIHJldHVybigt Mik7CisJfQorCWVycm5vID0gMDsKKyAgICAgICAgKm4gPSBja2F0b2ZzKHpwKTsKKwlpZiAoZXJy bm8pIHsKKwkgICAgcGVycm9yKHpwKTsKKwkgICAgcmV0dXJuKC05KTsKKwl9CisJZGVidWcoRjEw MSwiY21udW0gMm5kIGNoa251bSBvayIsIiIsKm4pOworICAgICAgICByZXR1cm4oMCk7CisjaWZu ZGVmIE5PU1BMCisgICAgfSAgZWxzZSBpZiAoKHggPSB4eGVzYygmenApKSA+IC0xKSB7IC8qIENo ZWNrIGZvciBiYWNrc2xhc2ggZXNjYXBlICovCisjaWZuZGVmIE9TMgorCSpuID0geDsKKyNlbHNl CisJKm4gPSB3aWRlcmVzdWx0OworI2VuZGlmIC8qIE9TMiAqLworCWRlYnVnKEYxMDEsImNtbnVt IHh4ZXNjIDIgb2siLCIiLCpuKTsKKwlyZXR1cm4oKnpwID8gLTIgOiAwKTsKKyAgICB9IGVsc2Ug aWYgKGYpIHsJCQkvKiBOb3QgbnVtZXJpYywgbWF5YmUgYW4gZXhwcmVzc2lvbiAqLworCWNoYXIg KiBwOworCXAgPSBldmFsYSh6cCk7CisJaWYgKGNoa251bShwKSkgeworCSAgICBpZiAocmFkaXgg PT0gOCkgewkJLyogSWYgaXQncyBzdXBwb3NlZCB0byBiZSBvY3RhbCAqLworCQl6cCA9IGNrcmFk aXgoenAsOCwxMCk7CS8qIGNvbnZlcnQgdG8gZGVjaW1hbCAqLworCQlpZiAoIXpwKSByZXR1cm4o LTIpOworCQlpZiAoIXN0cmNtcCh6cCwiLTEiKSkgcmV0dXJuKC0yKTsKKwkgICAgfQorCSAgICBl cnJubyA9IDA7CisJICAgICpuID0gY2thdG9mcyhwKTsKKwkgICAgaWYgKGVycm5vKSB7CisJCXBl cnJvcihwKTsKKwkJcmV0dXJuKC05KTsKKwkgICAgfQorCSAgICBkZWJ1ZyhGMTAxLCJjbW51bSBl eHAgZXZhbCBvayIsIiIsKm4pOworCSAgICByZXR1cm4oMCk7CisJfSBlbHNlIHJldHVybigtMik7 CisjZW5kaWYgLyogTk9TUEwgKi8KKyAgICB9IGVsc2UgewkJCQkvKiBOb3QgbnVtZXJpYyAqLwor CXJldHVybigtMik7CisgICAgfQorfQorCisjaWZkZWYgQ0tDSEFOTkVMSU8KK2V4dGVybiBpbnQg el9lcnJvcjsKKyNlbmRpZiAvKiBDS0NIQU5ORUxJTyAqLworCisvKiAgQyBNIE8gRiBJICAtLSAg UGFyc2UgdGhlIG5hbWUgb2YgYW4gb3V0cHV0IGZpbGUgICovCisKKy8qCisgRGVwZW5kcyBvbiB0 aGUgZXh0ZXJuYWwgZnVuY3Rpb24gemNoa28oKTsgaWYgemNoa28oKSBub3QgYXZhaWxhYmxlLCB1 c2UKKyBjbWZsZCgpIHRvIHBhcnNlIG91dHB1dCBmaWxlIG5hbWVzLgorCisgUmV0dXJuczoKKyAg IC05IGxpa2UgLTIsIGV4Y2VwdCBtZXNzYWdlIGFscmVhZHkgcHJpbnRlZCwKKyAgIC0zIGlmIG5v IGlucHV0IHByZXNlbnQgd2hlbiByZXF1aXJlZCwKKyAgIC0yIGlmIHBlcm1pc3Npb24gd291bGQg YmUgZGVuaWVkIHRvIGNyZWF0ZSB0aGUgZmlsZSwKKyAgIC0xIGlmIHJlcGFyc2UgbmVlZGVkLAor ICAgIDAgb3IgMSBpZiBmaWxlIGNhbiBiZSBjcmVhdGVkLCB3aXRoIHhwIHBvaW50aW5nIHRvIG5h bWUuCisgICAgMiBpZiBnaXZlbiB0aGUgbmFtZSBvZiBhbiBleGlzdGluZyBkaXJlY3RvcnkuCisq LworaW50CitjbW9maSh4aGxwLHhkZWYseHAsZikgY2hhciAqeGhscCwgKnhkZWYsICoqeHA7IHh4 X3N0cnAgZjsgeworICAgIGludCB4OyBjaGFyICpzLCAqenE7CisjaWZkZWYgRE9DSEtWQVIKKyAg ICBpbnQgdHJpZXM7CisjZW5kaWYgLyogRE9DSEtWQVIgKi8KKyNpZmRlZiBEVElMREUKKyAgICBj aGFyICpkaXJwOworI2VuZGlmIC8qIERUSUxERSAqLworCisgICAgY21mbGRmbGdzID0gMDsKKwor ICAgIGlmICgheGhscCkgeGhscCA9ICIiOworICAgIGlmICgheGRlZikgeGRlZiA9ICIiOworCisg ICAgaWYgKCp4aGxwID09IE5VTCkgeGhscCA9ICJPdXRwdXQgZmlsZSI7CisgICAgKnhwID0gIiI7 CisKKyAgICBkZWJ1ZyhGMTEwLCJjbW9maSB4ZGVmIix4ZGVmLDApOworICAgIHggPSBjbWZsZCh4 aGxwLHhkZWYsJnMsKHh4X3N0cnApMCk7CisgICAgZGVidWcoRjExMSwiY21vZmkgY21mbGQgcmV0 dXJucyIscyx4KTsKKyAgICBpZiAoeCA8IDApCisgICAgICByZXR1cm4oeCk7CisKKyAgICBzID0g YnJzdHJpcChzKTsJCQkvKiBTdHJpcCBlbmNsb3NpbmcgYnJhY2VzICovCisgICAgZGVidWcoRjEx MCwiY21vZmkgMS41IixzLDApOworCisjaWZkZWYgRE9DSEtWQVIKKyAgICB0cmllcyA9IDA7Cisg ICAgeworCWNoYXIgKnAgPSBzOworICAgIC8qCisgICAgICBUaGlzIGlzIHJlYWxseSB1Z2x5LiAg SWYgd2Ugc2tpcCBjb252ZXJzaW9uIHRoZSBmaXJzdCB0aW1lIHRocm91Z2gsCisgICAgICB0aGVu IHZhcmlhYmxlIG5hbWVzIGxpa2UgXCVhIHdpbGwgYmUgdXNlZCBhcyBmaWxlbmFtZXMgKGUuZy4g Y3JlYXRpbmcKKyAgICAgIGEgZmlsZSBjYWxsZWQgJUEgaW4gdGhlIHJvb3QgZGlyZWN0b3J5KS4g IElmIHdlIERPTidUIHNraXAgY29udmVyc2lvbgorICAgICAgdGhlIGZpcnN0IHRpbWUgdGhyb3Vn aCwgdGhlbiBzaW5nbGUgYmFja3NsYXNoZXMgdXNlZCBhcyBkaXJlY3RvcnkKKyAgICAgIHNlcGFy YXRvcnMgaW4gZmlsZW5hbWVzIHdpbGwgYmUgbWlzaW50ZXJwcmV0ZWQgYXMgdmFyaWFibGUgbGVh ZC1pbnMuCisgICAgICBTbyB3ZSBwcmVzY2FuIHRvIHNlZSBpZiBpdCBoYXMgYW55IHZhcmlhYmxl IHJlZmVyZW5jZXMuICBCdXQgdGhpcworICAgICAgbW9kdWxlIGlzIG5vdCBzdXBwb3NlZCB0byBr bm93IGFueXRoaW5nIGFib3V0IHZhcmlhYmxlcywgZnVuY3Rpb25zLAorICAgICAgZXRjLCBzbyB0 aGlzIGNvZGUgZG9lcyBub3QgcmVhbGx5IGJlbG9uZyBoZXJlLCBidXQgcmF0aGVyIGl0IHNob3Vs ZAorICAgICAgYmUgYXQgdGhlIHNhbWUgbGV2ZWwgYXMgenpzdHJpbmcoKS4KKyAgICAqLworLyoK KyAgSG1tbSwgdGhpcyBsb29rcyBhIGxvdCBsaWtlIGNoa3ZhcigpIGV4Y2VwdCBpdCB0aGF0IGlu Y2x1ZGVzIFxubm4gbnVtYmVyCisgIGVzY2FwZXMuICBCdXQgd2h5PyAgVGhpcyBtYWtlcyBjb21t YW5kcyBsaWtlICJta2RpciBjOlwxMjMiIGltcG9zc2libGUuCisgIEFuZCBpbiBmYWN0LCAibWtk aXIgYzpcMTIzIiBjcmVhdGVzIGEgZGlyZWN0b3J5IGNhbGxlZCAiYzp7Ii4gIFdoYXQncyB3b3Jz ZSwKKyAgcm1kaXIoKSwgd2hpY2ggKmRvZXMqIGNhbGwgY2hrdmFyKCksIHdvbid0IGxldCB1cyBy ZW1vdmUgaXQuICBTbyBsZXQncyBhdAorICBsZWFzdCB0cnkgbWFraW5nIGNtb2ZpKCkgc3ltbWV0 cmljYWwgd2l0aCBjbWlmaSgpLi4uCisqLworI2lmZGVmIENPTU1FTlQKKwljaGFyICogcTsKKwl3 aGlsZSAoICh0cmllcyA9PSAwKSAmJiAocCA9IHN0cmNocihwLENNRFEpKSApIHsKKwkgICAgcSA9 ICoocCsxKTsJCQkvKiBDaGFyIGFmdGVyIGJhY2tzbGFzaCAqLworCSAgICBpZiAoIXEpCQkJLyog Tm9uZSwgcXVpdCAqLworCSAgICAgIGJyZWFrOworCSAgICBpZiAoaXN1cHBlcihxKSkJCS8qIElm IGxldHRlciwgY29udmVydCB0byBsb3dlcmNhc2UgKi8KKwkgICAgICBxID0gdG9sb3dlcihxKTsK KwkgICAgaWYgKGlzZGlnaXQocSkpIHsJCS8qIElmIGl0J3MgYSBkaWdpdCwgKi8KKwkJdHJpZXMg PSAxOwkJLyogYXNzdW1lIGl0J3MgYSBiYWNrc2xhc2ggY29kZSAgKi8KKwkJYnJlYWs7CisJICAg IH0KKwkgICAgc3dpdGNoIChxKSB7CisJICAgICAgY2FzZSBDTURROgkJLyogRG91YmxlIGJhY2tz bGFzaCAqLworCQl0cmllcyA9IDE7CQkvKiBzbyBjYWxsIHRoZSBjb252ZXJzaW9uIGZ1bmN0aW9u ICovCisJCWJyZWFrOworCSAgICAgIGNhc2UgJyUnOgkJCS8qIFZhcmlhYmxlIG9yIGFycmF5IHJl ZmVyZW5jZSAqLworCSAgICAgIGNhc2UgJyYnOgkJCS8qIG11c3QgYmUgZm9sbG93ZWQgYnkgbGV0 dGVyICovCisJCWlmIChpc2FscGhhKCoocCsyKSkgfHwgKCoocCsyKSA+PSAnMCcgJiYgKihwKzIp IDw9ICc5JykpCisJCSAgdHJpZXMgPSAxOworCQlicmVhazsKKwkgICAgICBjYXNlICdtJzogY2Fz ZSAndic6IGNhc2UgJyQnOiAvKiBcbSgpLCBcdigpLCBcJCgpICovCisJCWlmICgqKHArMikgPT0g JygnKQorCQkgIGlmIChzdHJjaHIocCsyLCcpJykpCisJCSAgICB0cmllcyA9IDE7CisJCWJyZWFr OworCSAgICAgIGNhc2UgJ2YnOgkJCS8qIFxGbmFtZSgpICovCisJCWlmIChzdHJjaHIocCsyLCco JykpCisJCSAgaWYgKHN0cmNocihwKzIsJyknKSkKKwkJICAgICAgdHJpZXMgPSAxOworCQlicmVh azsKKwkgICAgICBjYXNlICd7JzoJCQkvKiBcey4uLn0gKi8KKwkJaWYgKHN0cmNocihwKzIsJ30n KSkKKwkJICB0cmllcyA9IDE7CisJCWJyZWFrOworCSAgICAgIGNhc2UgJ2QnOiBjYXNlICdvJzoJ LyogRGVjaW1hbCBvciBPY3RhbCBudW1iZXIgKi8KKwkgICAgICAgIGlmIChpc2RpZ2l0KCoocCsy KSkpCisJCSAgdHJpZXMgPSAxOworCQlicmVhazsKKwkgICAgICBjYXNlICd4JzoJCQkvKiBIZXgg bnVtYmVyICovCisJCWlmIChpc2RpZ2l0KCoocCsyKSkgfHwKKwkJICAgICgoKihwKzIpID49ICdh JyAmJiAqKHArMikgPD0gJ2YnKSB8fAorCQkgICAgICgoKihwKzIpID49ICdBJyAmJiAqKHArMikg PD0gJ0YnKSkpKQorCQkgIHRyaWVzID0gMTsKKwkgICAgICBkZWZhdWx0OgorCQlicmVhazsKKwkg ICAgfQorCSAgICBwKys7CisJfQorI2Vsc2UKKyNpZm5kZWYgTk9TUEwKKwlpZiAoZikgewkJCS8q IElmIGEgY29udmVyc2lvbiBmdW5jdGlvbiBpcyBnaXZlbiAqLworCSAgICBjaGFyICpzID0gcDsJ CS8qIFNlZSBpZiB0aGVyZSBhcmUgYW55IHZhcmlhYmxlcyBpbiAqLworCSAgICB3aGlsZSAoKnMp IHsJCS8qIHRoZSBzdHJpbmcgYW5kIGlmIHNvLCBleHBhbmQgdGhlbSAqLworCQlpZiAoY2hrdmFy KHMpKSB7CisJCSAgICB0cmllcyA9IDE7CisJCSAgICBicmVhazsKKwkJfQorCQlzKys7CisJICAg IH0KKwl9CisjZW5kaWYgLyogTk9TUEwgKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgfQor I2lmZGVmIE9TMgorb19hZ2FpbjoKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICBpZiAodHJpZXMgPT0g MSkKKyNlbmRpZiAvKiBET0NIS1ZBUiAqLworICAgIGlmIChmKSB7CQkJCS8qIElmIGEgY29udmVy c2lvbiBmdW5jdGlvbiBpcyBnaXZlbiAqLworCXpxID0gYXR4YnVmOwkJCS8qIGRvIHRoZSBjb252 ZXJzaW9uLiAqLworCWF0eG4gPSBDTURCTDsKKwlpZiAoKHggPSAoKmYpKHMsJnpxLCZhdHhuKSkg PCAwKQorCSAgcmV0dXJuKC0yKTsKKwlzID0gYXR4YnVmOworCWlmICghKnMpCQkJLyogUmVzdWx0 IGVtcHR5LCBzdWJzdGl0dXRlIGRlZmF1bHQgKi8KKwkgIHMgPSB4ZGVmOworICAgIH0KKyAgICBk ZWJ1ZyhGMTExLCJjbW9maSAyIixzLHgpOworCisjaWZkZWYgRFRJTERFCisgICAgZGlycCA9IHRp bGRlX2V4cGFuZChzKTsJCS8qIEV4cGFuZCB0aWxkZSwgaWYgYW55LCAqLworICAgIGlmICgqZGly cCAhPSAnXDAnKSB7CQkvKiByaWdodCBpbiB0aGUgYXRvbSBidWZmZXIuICovCisJaWYgKHNldGF0 bShkaXJwLDEpIDwgMCkgeworCSAgICBwcmludGYoIj9OYW1lIHRvbyBsb25nXG4iKTsKKwkgICAg cmV0dXJuKC05KTsKKwl9CisgICAgfQorICAgIHMgPSBhdG1idWY7CisgICAgZGVidWcoRjExMCwi Y21vZmkgMyIscywwKTsKKyNlbmRpZiAvKiBEVElMREUgKi8KKworICAgIGlmIChpc3dpbGQocykp IHsKKyAgICAgICAgcHJpbnRmKCI/V2lsZGNhcmRzIG5vdCBhbGxvd2VkIC0gJXNcbiIscyk7Cisg ICAgICAgIHJldHVybigtMik7CisgICAgfQorICAgIGRlYnVnKEYxMTAsImNtb2ZpIDQiLHMsMCk7 CisKKyNpZmRlZiBDS19UTVBESVIKKyAgICAvKiBpc2RpcigpIGZ1bmN0aW9uIHJlcXVpcmVkIGZv ciB0aGlzISAqLworICAgIGlmIChpc2RpcihzKSkgeworCWRlYnVnKEYxMTAsImNtb2ZpIDU6IGlz IGRpcmVjdG9yeSIscywwKTsKKyAgICAgICAgKnhwID0gczsKKwlyZXR1cm4oMik7CisgICAgfQor I2VuZGlmIC8qIENLX1RNUERJUiAqLworCisgICAgaWYgKHN0cmNtcChzLENUVE5BTSkgJiYgKHpj aGtvKHMpIDwgMCkpIHsgLyogT0sgdG8gd3JpdGUgdG8gY29uc29sZSAqLworI2lmZGVmIENPTU1F TlQKKyNpZmRlZiBPUzIKKy8qCisgIFdlIGRvbid0IHRyeSBhZ2FpbiBiZWNhdXNlIHdlIGFscmVh ZHkgcHJlc2Nhbm5lZCB0aGUgc3RyaW5nIHRvIHNlZSBpZgorICBpZiBpdCBjb250YWluZWQgYW55 dGhpbmcgdGhhdCBjb3VsZCBiZSB1c2VkIGJ5IHp6c3RyaW5nKCkuCisqLworCWlmICh0cmllcysr IDwgMSkKKwkgIGdvdG8gb19hZ2FpbjsKKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBDT01N RU5UICovCisvKgorICBOb3RlOiB0aGVyZSBhcmUgY2VydGFpbiBjaXJjdW1zdGFuY2VzIHdoZXJl IHpjaGtvKCkgY2FuIGdpdmUgYSBmYWxzZQorICBwb3NpdGl2ZSwgc28gZG9uJ3QgcmVseSBvbiBp dCB0byBjYXRjaCBldmVyeSBjb25jZWl2YWJsZSBzaXR1YXRpb24gaW4KKyAgd2hpY2ggdGhlIGdp dmVuIG91dHB1dCBmaWxlIGNhbid0IGJlIGNyZWF0ZWQuICBJbiBvdGhlciB3b3Jkcywgd2UgcHJp bnQKKyAgYSBtZXNzYWdlIGFuZCBmYWlsIGhlcmUgaWYgd2UgS05PVyB0aGUgZmlsZSBjYW4ndCBi ZSBjcmVhdGVkLiAgSWYgd2UKKyAgc3VjY2VlZCBidXQgdGhlIGZpbGUgY2FuJ3QgYmUgb3BlbmVk LCB0aGUgY29kZSB0aGF0IHRyaWVzIHRvIG9wZW4gdGhlIGZpbGUKKyAgaGFzIHRvIHByaW50IGEg bWVzc2FnZS4KKyovCisJZGVidWcoRjExMCwiY21vZmkgNjogZmFpbHVyZSIscywwKTsKKyNpZmRl ZiBDS1JPT1QKKwlpZiAoY2tyb290ZXJyKQorCSAgcHJpbnRmKCI/T2ZmIExpbWl0czogJXNcbiIs cyk7CisJZWxzZQorI2VuZGlmIC8qIENLUk9PVCAqLworCSAgcHJpbnRmKCI/V3JpdGUgcGVybWlz c2lvbiBkZW5pZWQgLSAlc1xuIixzKTsKKyNpZmRlZiBDS0NIQU5ORUxJTworCXpfZXJyb3IgPSBG WF9BQ0M7CisjZW5kaWYgLyogQ0tDSEFOTkVMSU8gKi8KKyAgICAgICAgcmV0dXJuKC05KTsKKyAg ICB9IGVsc2UgeworCWRlYnVnKEYxMTAsImNtb2ZpIDc6IG9rIixzLDApOworICAgICAgICAqeHAg PSBzOworICAgICAgICByZXR1cm4oeCk7CisgICAgfQorfQorCisvKiAgQyBNIEkgRiBJICAtLSAg UGFyc2UgdGhlIG5hbWUgb2YgYW4gZXhpc3RpbmcgZmlsZSAgKi8KKworLyoKKyBUaGlzIGZ1bmN0 aW9uIGRlcGVuZHMgb24gdGhlIGV4dGVybmFsIGZ1bmN0aW9uczoKKyAgIHpjaGtpKCkgIC0gQ2hl Y2sgaWYgaW5wdXQgZmlsZSBleGlzdHMgYW5kIGlzIHJlYWRhYmxlLgorICAgenhwYW5kKCkgLSBF eHBhbmQgYSB3aWxkIGZpbGUgc3BlY2lmaWNhdGlvbiBpbnRvIGEgbGlzdC4KKyAgIHpuZXh0KCkg IC0gUmV0dXJuIG5leHQgZmlsZSBuYW1lIGZyb20gbGlzdC4KKyBJZiB0aGVzZSBmdW5jdGlvbnMg YXJlbid0IGF2YWlsYWJsZSwgdGhlbiB1c2UgY21mbGQoKSB0byBwYXJzZSBmaWxlbmFtZXMuCisq LworLyoKKyBSZXR1cm5zCisgICAtNCBFT0YKKyAgIC0zIGlmIG5vIGlucHV0IHByZXNlbnQgd2hl biByZXF1aXJlZCwKKyAgIC0yIGlmIGZpbGUgZG9lcyBub3QgZXhpc3Qgb3IgaXMgbm90IHJlYWRh YmxlLAorICAgLTEgaWYgcmVwYXJzZSBuZWVkZWQsCisgICAgMCBvciAxIG90aGVyd2lzZSwgd2l0 aDoKKyAgICAgICAgeHAgcG9pbnRpbmcgdG8gbmFtZSwKKyAgICAgICAgd2lsZCA9IDEgaWYgbmFt ZSBjb250YWlucyAnKicgb3IgJz8nLCAwIG90aGVyd2lzZS4KKyovCisKKyNpZmRlZiBDT01NRU5U IC8qIFRoaXMgaG9ycmlibGUgaGFjayBoYXMgYmVlbiByZXBsYWNlZCAtIHNlZSBmdXJ0aGVyIGRv d24gKi8KKy8qCisgICBDIE0gSSBPIEYgSSAgLS0gIFBhcnNlIGFuIGlucHV0IGZpbGUgT1IgdGhl IG5hbWUgb2YgYSBub25leGlzdGVudCBmaWxlLgorCisgICBVc2UgdGhpcyB3aGVuIGFuIGV4aXN0 aW5nIGZpbGUgaXMgd2FudGVkIChzbyB3ZSBnZXQgaGVscCwgY29tcGxldGlvbiwgZXRjKSwKKyAg IGJ1dCBpZiBhIGZpbGUgb2YgdGhlIGdpdmVuIG5hbWUgZG9lcyBub3QgZXhpc3QsIHRoZSBuYW1l IG9mIGEgbmV3IGZpbGUgaXMKKyAgIGFjY2VwdGVkLiAgRm9yIGV4YW1wbGUsIHdpdGggdGhlIEVE SVQgY29tbWFuZCAoZWRpdCBhbiBleGlzdGluZyBmaWxlLCBvcgorICAgY3JlYXRlIGEgbmV3IGZp bGUpLiAgUmV0dXJucyAtOSBpZiBmaWxlIGRvZXMgbm90IGV4aXN0LiAgSXQgaXMgdXAgdG8gdGhl CisgICBjYWxsZXIgdG8gY2hlY2sgY3JlYXRhYmlsaXR5LgorKi8KK3N0YXRpYyBpbnQgbm9tc2cg PSAwOworaW50CitjbWlvZmkoeGhscCx4ZGVmLHhwLHdpbGQsZikgY2hhciAqeGhscCwgKnhkZWYs ICoqeHA7IGludCAqd2lsZDsgeHhfc3RycCBmOyB7CisgICAgaW50IG1zZ3NhdmUsIHg7CisgICAg bXNnc2F2ZSA9IG5vbXNnOworICAgIG5vbXNnID0gMTsKKyAgICB4ID0gY21pZmkyKHhobHAseGRl Zix4cCx3aWxkLDAsTlVMTCxmLDApOworICAgIG5vbXNnID0gbXNnc2F2ZTsKKyAgICByZXR1cm4o eCk7Cit9CisjZW5kaWYJLyogQ09NTUVOVCAqLworCitpbnQKK2NtaWZpKHhobHAseGRlZix4cCx3 aWxkLGYpIGNoYXIgKnhobHAsICp4ZGVmLCAqKnhwOyBpbnQgKndpbGQ7IHh4X3N0cnAgZjsgewor ICAgIHJldHVybihjbWlmaTIoeGhscCx4ZGVmLHhwLHdpbGQsMCxOVUxMLGYsMCkpOworfQorLyoK KyAgY21pZmlwKCkgaXMgY2FsbGVkIHdoZW4gd2Ugd2FudCB0byBzdXBwbHkgYSBwYXRoIG9yIHBh dGggbGlzdCB0byBzZWFyY2gKKyAgaW4gY2FzZSB0aGUgZmlsZW5hbWUgdGhhdCB0aGUgdXNlciBn aXZlcyBpcyAoYSkgbm90IGFic29sdXRlLCBhbmQgKGIpIGNhbid0CisgIGJlIGZvdW5kIGFzIGdp dmVuLiAgVGhlIHBhdGggc3RyaW5nIGNhbiBiZSB0aGUgbmFtZSBvZiBhIHNpbmdsZSBkaXJlY3Rv cnksCisgIG9yIGEgbGlzdCBvZiBkaXJlY3RvcmllcyBzZXBhcmF0ZWQgYnkgdGhlIFBBVEhTRVAg Y2hhcmFjdGVyLCBkZWZpbmVkIGluCisgIGNrdWNtZC5oLiAgTG9vayBpbiBja3V1c3IuYyBhbmQg Y2t1dXMzLmMgZm9yIGV4YW1wbGVzIG9mIHVzYWdlLgorKi8KK2ludAorY21pZmlwKHhobHAseGRl Zix4cCx3aWxkLGQscGF0aCxmKQorICAgIGNoYXIgKnhobHAsKnhkZWYsKip4cDsgaW50ICp3aWxk LCBkOyBjaGFyICogcGF0aDsgeHhfc3RycCBmOyB7CisgICAgcmV0dXJuKGNtaWZpMih4aGxwLHhk ZWYseHAsd2lsZCwwLHBhdGgsZiwwKSk7Cit9CisKKy8qICBDIE0gRCBJIFIgIC0tICBQYXJzZSBh IGRpcmVjdG9yeSBuYW1lICAqLworCisvKgorIFRoaXMgZnVuY3Rpb24gZGVwZW5kcyBvbiB0aGUg ZXh0ZXJuYWwgZnVuY3Rpb25zOgorICAgaXNkaXIocykgIC0gQ2hlY2sgaWYgc3RyaW5nIHMgaXMg dGhlIG5hbWUgb2YgYSBkaXJlY3RvcnkKKyAgIHpjaGtpKHMpICAtIENoZWNrIGlmIGlucHV0IGZp bGUgcyBleGlzdHMgYW5kIHdoYXQgdHlwZSBpdCBpcy4KKyBJZiB0aGVzZSBmdW5jdGlvbnMgYXJl bid0IGF2YWlsYWJsZSwgdGhlbiB1c2UgY21mbGQoKSB0byBwYXJzZSBkaXIgbmFtZXMuCisKKyBS ZXR1cm5zCisgICAtOSBGb3IgYWxsIHNvcnRzIG9mIHJlYXNvbnMsIGFmdGVyIHByaW50aW5nIGFw cHJvcHJpYXRlIGVycm9yIG1lc3NhZ2UuCisgICAtNCBFT0YKKyAgIC0zIGlmIG5vIGlucHV0IHBy ZXNlbnQgd2hlbiByZXF1aXJlZCwKKyAgIC0yIGlmIG91dCBvZiBzcGFjZSBvciBvdGhlciBpbnRl cm5hbCBlcnJvciwKKyAgIC0xIGlmIHJlcGFyc2UgbmVlZGVkLAorICAgIDAgb3IgMSwgd2l0aCB4 cCBwb2ludGluZyB0byBuYW1lLCBpZiBkaXJlY3Rvcnkgc3BlY2lmaWVkLAorKi8KK2ludAorY21k aXIoeGhscCx4ZGVmLHhwLGYpIGNoYXIgKnhobHAsICp4ZGVmLCAqKnhwOyB4eF9zdHJwIGY7IHsK KyAgICBpbnQgd2lsZDsKKyAgICByZXR1cm4oY21pZmkyKHhobHAseGRlZix4cCwmd2lsZCwwLE5V TEwsZiwxKSk7Cit9CisKKy8qIExpa2UgQ01ESVIgYnV0IGluY2x1ZGVzIFBBVEggc2VhcmNoICov CisKK2ludAorY21kaXJwKHhobHAseGRlZix4cCxwYXRoLGYpIGNoYXIgKnhobHAsICp4ZGVmLCAq KnhwOyBjaGFyICogcGF0aDsgeHhfc3RycCBmOyB7CisgICAgaW50IHdpbGQ7CisgICAgcmV0dXJu KGNtaWZpMih4aGxwLHhkZWYseHAsJndpbGQsMCxwYXRoLGYsMSkpOworfQorCisvKgorICBjbWlm aTIoKSBpcyB0aGUgYmFzZSBmaWxlbmFtZSBwYXJzZXIgY2FsbGVkIGJ5IGNtaWZpLCBjbWlmaXAs IGNtZGlyLCBldGMuCisgIFVzZSBpdCBkaXJlY3RseSB3aGVuIHlvdSBhbHNvIHdhbnQgdG8gcGFy c2UgYSBkaXJlY3Rvcnkgb3IgZGV2aWNlCisgIG5hbWUgYXMgYW4gaW5wdXQgZmlsZSwgYXMgaW4g dGhlIERJUkVDVE9SWSBjb21tYW5kLiAgQ2FsbCB3aXRoOgorICAgIHhobHAgIC0tIGhlbHAgbWVz c2FnZSBvbiA/CisgICAgeGRlZiAgLS0gZGVmYXVsdCByZXNwb25zZQorICAgIHhwICAgIC0tIHBv aW50ZXIgdG8gcmVzdWx0IChpbiBvdXIgc3BhY2UsIG11c3QgYmUgY29waWVkIGZyb20gaGVyZSkK KyAgICB3aWxkICAtLSBmbGFnIHNldCB1cG9uIHJldHVybiB0byBpbmRpY2F0ZSBpZiBmaWxlc3Bl YyB3YXMgd2lsZAorICAgIGQgICAgIC0tIDAgdG8gcGFyc2UgZmlsZXMsIDEgdG8gcGFyc2UgZmls ZXMgb3IgZGlyZWN0b3JpZXMKKyAgICAgICAgICAgICBBZGQgMiB0byBpbmhpYml0IGZvbGxvd2lu ZyBvZiBzeW1saW5rcy4KKyAgICBwYXRoICAtLSBzZWFyY2ggcGF0aCBmb3IgZmlsZXMKKyAgICBm ICAgICAtLSBwb2ludGVyIHRvIHN0cmluZyBwcm9jZXNzaW5nIGZ1bmN0aW9uIChlLmcuIHRvIGV2 YWx1YXRlIHZhcmlhYmxlcykKKyAgICBkaXJmbGcgLS0gMSB0byBwYXJzZSAqb25seSogZGlyZWN0 b3JpZXMsIDAgb3RoZXJ3aXNlCisqLworaW50CitjbWlmaTIoeGhscCx4ZGVmLHhwLHdpbGQsZCxw YXRoLGYsZGlyZmxnKQorICAgIGNoYXIgKnhobHAsKnhkZWYsKip4cDsgaW50ICp3aWxkLCBkOyBj aGFyICogcGF0aDsgeHhfc3RycCBmOyBpbnQgZGlyZmxnOyB7CisgICAgZXh0ZXJuIGludCByZWN1 cnNpdmUsIGRpcmFjdGl2ZSwgY2RhY3RpdmUsIGRibHF1bzsKKyAgICBpbnQgaSwgeCwgaXRzYWRp ciwgeGMsIGV4cGFuZGVkID0gMCwgbmZpbGVzID0gMCwgY2hpbGRyZW4gPSAtMTsKKyAgICBpbnQg cWZsYWcgPSAwOworICAgIGxvbmcgeTsKKyAgICBDS19PRkZfVCBmaWxlc2l6ZTsKKyAgICBjaGFy ICpzcCA9IE5VTEwsICp6cSwgKm5wID0gTlVMTDsKKyAgICBjaGFyICpzdiA9IE5VTEwsICpwID0g TlVMTDsKKyNpZmRlZiBEVElMREUKKyAgICBjaGFyICpkaXJwOworI2VuZGlmIC8qIERUSUxERSAq LworCisjaWZuZGVmIE5PUEFSVElBTAorI2lmbmRlZiBPUzIKKyNpZmRlZiBPU0sKKyAgICAvKiBU aGlzIGxhcmdlIGFycmF5IGlzIGR5bmFtaWMgZm9yIE9TLTkgLS0gc2hvdWxkIGRvIGZvciBvdGhl cnMgdG9vLi4uICovCisgICAgZXh0ZXJuIGNoYXIgKiptdGNoczsKKyNlbHNlCisjaWZkZWYgVU5J WAorICAgIC8qIE9LLCBmb3IgVU5JWCB0b28gKi8KKyAgICBleHRlcm4gY2hhciAqKm10Y2hzOwor I2Vsc2UKKyNpZmRlZiBWTVMKKyAgICBleHRlcm4gY2hhciAqKm10Y2hzOworI2Vsc2UKKyAgICBl eHRlcm4gY2hhciAqbXRjaHNbXTsKKyNlbmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBVTklYICov CisjZW5kaWYgLyogT1NLICovCisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogTk9QQVJUSUFM ICovCisKKyAgICBpZiAoIXhobHApIHhobHAgPSAiIjsKKyAgICBpZiAoIXhkZWYpIHhkZWYgPSAi IjsKKworI2lmbmRlZiBOT0xBU1RGSUxFCisgICAgbWFrZXN0cigmdG1wbGFzdGZpbGUsTlVMTCk7 CisjZW5kaWYJLyogTk9MQVNURklMRSAqLworICAgIG56eG9wdHMgPSAwOwkJCS8qIHp4cGFuZCgp IG9wdGlvbnMgKi8KKyAgICBkZWJ1ZyhGMTAxLCJjbWlmaSBkIiwiIixkKTsKKyAgICBpZiAoZCAm IDIpIHsJCQkvKiBkICYgMiBtZWFucyBkb24ndCBmb2xsb3cgc3ltbGlua3MgKi8KKwlkIF49IDI7 CisJbnp4b3B0cyA9IFpYX05PTElOS1M7CisgICAgfQorICAgIGRlYnVnKEYxMDEsImNtaWZpIG56 eG9wdHMiLCIiLG56eG9wdHMpOworICAgIGNtZmxkZmxncyA9IDA7CisgICAgaWYgKHBhdGgpCisg ICAgICBpZiAoISpwYXRoKQorCXBhdGggPSBOVUxMOworICAgIGlmIChwYXRoKSB7CQkJCS8qIE1h a2UgYSBjb3B5IHdlIGNhbiBwb2tlICovCisJeCA9IHN0cmxlbihwYXRoKTsKKwlucCA9IChjaGFy ICopIG1hbGxvYyh4ICsgMSk7CisJaWYgKG5wKSB7CisJICAgIHN0cmNweShucCwgcGF0aCk7CisJ ICAgIHBhdGggPSBzcCA9IG5wOworCX0KKyAgICB9CisgICAgZGVidWcoRjExMCwiY21pZmkyIHBh dGgiLHBhdGgsMCk7CisKKyAgICBja3N0cm5jcHkoY21kZWZhdWx0LHhkZWYsQ01ERUZBVUxUKTsg LyogQ29weSBkZWZhdWx0ICovCisgICAgeGRlZiA9IGNtZGVmYXVsdDsKKworICAgIGlud29yZCA9 IDA7CQkJCS8qIEluaXRpYWxpemUgY291bnRzICYgcG9pbnRlcnMgKi8KKyAgICBjYyA9IDA7Cisg ICAgeGMgPSAwOworICAgICp4cCA9ICIiOwkJCQkvKiBQb2ludGVyIHRvIHJlc3VsdCBzdHJpbmcg Ki8KKyAgICBpZiAoKHggPSBjbWZsZ3MpICE9IDEpIHsgICAgICAgICAgICAvKiBBbHJlYWR5IGNv bmZpcm1lZD8gKi8KKyNpZmRlZiBCU19ESVJTRVAKKwlkaXJuYW1mbGcgPSAxOworICAgICAgICB4 ID0gZ3R3b3JkKDApOwkJCS8qIE5vLCBnZXQgYSB3b3JkICovCisJZGlybmFtZmxnID0gMDsKKyNl bHNlCisgICAgICAgIHggPSBndHdvcmQoMCk7ICAgICAgICAgICAgICAgICAgLyogTm8sIGdldCBh IHdvcmQgKi8KKyNlbmRpZiAvKiBCU19ESVJTRVAgKi8KKyAgICB9IGVsc2UgewkJCQkvKiBJZiBz bywgdXNlIGRlZmF1bHQsIGlmIGFueS4gKi8KKyAgICAgICAgaWYgKHNldGF0bSh4ZGVmLDEpIDwg MCkgeworCSAgICBwcmludGYoIj9EZWZhdWx0IG5hbWUgdG9vIGxvbmdcbiIpOworCSAgICBpZiAo bnApIGZyZWUobnApOworCSAgICByZXR1cm4oLTkpOworCX0KKyAgICB9CisgIGlfcGF0aDoKKyAg ICAqeHAgPSBhdG1idWY7ICAgICAgICAgICAgICAgICAgICAgICAvKiBQb2ludCB0byByZXN1bHQu ICovCisKKyAgICB3aGlsZSAoMSkgeworICAgICAgICB4YyArPSBjYzsgICAgICAgICAgICAgICAg ICAgICAgIC8qIENvdW50IHRoaXMgY2hhcmFjdGVyLiAqLworICAgICAgICBkZWJ1ZyhGMTExLCJj bWlmaSBndHdvcmQiLGF0bWJ1Zix4Yyk7CisJZGVidWcoRjEwMSwiY21pZmkgc3dpdGNoIHgiLCIi LHgpOworICAgICAgICBzd2l0Y2ggKHgpIHsJCQkvKiB4ID0gZ3R3b3JkKCkgcmV0dXJuIGNvZGUg Ki8KKwkgIGNhc2UgLTEwOgorCSAgICBpZiAoZ3RpbWVyKCkgPiB0aW1lbGltaXQpIHsKKyNpZmRl ZiBJS1NECisgICAgICAgICAgICAgICAgaWYgKGluc2VydmVyKSB7CisgICAgICAgICAgICAgICAg ICAgIHByaW50ZigiXHJcbklLU0QgSURMRSBUSU1FT1VUOiAlZCBzZWNcclxuIiwgdGltZWxpbWl0 KTsKKyAgICAgICAgICAgICAgICAgICAgZG9leGl0KEdPT0RfRVhJVCwwKTsKKyAgICAgICAgICAg ICAgICB9CisjZW5kaWYgLyogSUtTRCAqLworCQkvKiBpZiAoIXF1aWV0KSBwcmludGYoIj9UaW1l ZCBvdXRcbiIpOyAqLworCQlyZXR1cm4oLTEwKTsKKwkgICAgfSBlbHNlIHsKKwkJeCA9IGd0d29y ZCgwKTsKKwkJY29udGludWU7CisJICAgIH0KKwkgIGNhc2UgLTk6CisJICAgIHByaW50ZigiQ29t bWFuZCBvciBmaWVsZCB0b28gbG9uZ1xuIik7CisJICBjYXNlIC00OgkJCS8qIEVPRiAqLworCSAg Y2FzZSAtMjoJCQkvKiBPdXQgb2Ygc3BhY2UuICovCisJICBjYXNlIC0xOgkJCS8qIFJlcGFyc2Ug bmVlZGVkICovCisJICAgIGlmIChucCkgZnJlZShucCk7CisJICAgIHJldHVybih4KTsKKwkgIGNh c2UgMToJCQkvKiBDUiAqLworCSAgY2FzZSAwOgkJCS8qIFNQICovCisJICAgIGlmICh4YyA9PSAw KQkJLyogSWYgbm8gaW5wdXQuLi4gKi8KKwkgICAgICAqeHAgPSB4ZGVmOwkJLyogc3Vic3RpdHV0 ZSB0aGUgZGVmYXVsdCAqLworI2lmbmRlZiBOT0xBU1RGSUxFCisJICAgIG1ha2VzdHIoJnRtcGxh c3RmaWxlLCp4cCk7CS8qIE1ha2UgYSBjb3B5IGJlZm9yZSBic3RyaXBwaW5nICovCisjZW5kaWYJ LyogI2lmbmRlZiBOT0xBU1RGSUxFICovCisJICAgICp4cCA9IGJyc3RyaXAoKnhwKTsJCS8qIFN0 cmlwIGJyYWNlcyAqLworCSAgICBpZiAoKip4cCA9PSBOVUwpIHsJCS8qIDEyIG1hciAyMDAxICov CisJCWlmIChucCkgZnJlZShucCk7CisJCXJldHVybigtMyk7CisJICAgIH0KKwkgICAgZGVidWco RjExMCwiY21pZmkgYnJzdHJpcCIsKnhwLDApOworI2lmbmRlZiBOT1NQTAorCSAgICBpZiAoZikg ewkJCS8qIElmIGEgY29udmVyc2lvbiBmdW5jdGlvbiBpcyBnaXZlbiAqLworI2lmZGVmIERPQ0hL VkFSCisJCWNoYXIgKnMgPSAqeHA7CQkvKiBTZWUgaWYgdGhlcmUgYXJlIGFueSB2YXJpYWJsZXMg aW4gKi8KKwkJaW50IHg7CisJCXdoaWxlICgqcykgewkJLyogdGhlIHN0cmluZyBhbmQgaWYgc28s IGV4cGFuZCB0aGVtICovCisJCSAgICB4ID0gY2hrdmFyKHMpOworCQkgICAgLyogZGVidWcoRjEx MSwiY21pZmkgY2hrdmFyIiwqeHAseCk7ICovCisJCSAgICBpZiAoeCkgeworI2VuZGlmIC8qIERP Q0hLVkFSICovCisJCQl6cSA9IGF0eGJ1ZjsKKwkJCWF0eG4gPSBDTURCTDsKKwkJCWlmICgoKmYp KCp4cCwmenEsJmF0eG4pIDwgMCkgeworCQkJICAgIGlmIChucCkgZnJlZShucCk7CisJCQkgICAg cmV0dXJuKC0yKTsKKwkJCX0KKwkJCSp4cCA9IGF0eGJ1ZjsKKwkJCWlmICghYXR4YnVmWzBdKQor CQkJICAqeHAgPSB4ZGVmOworI2lmZGVmIERPQ0hLVkFSCisJCQlicmVhazsKKwkJICAgIH0KKwkJ ICAgIHMrKzsKKwkJfQorI2VuZGlmIC8qIERPQ0hLVkFSICovCisJICAgIH0KKyNlbmRpZiAvKiBO T1NQTCAqLworCSAgICBpZiAoKip4cCA9PSBOVUwpIHsJCS8qIDEyIG1hciAyMDAxICovCisJCWlm IChucCkgZnJlZShucCk7CisJCXJldHVybigtMyk7CisJICAgIH0KKyNpZmRlZiBEVElMREUKKwkg ICAgaWYgKGRpcmZsZykgeworCQlkaXJwID0gdGlsZGVfZXhwYW5kKCp4cCk7IC8qIEV4cGFuZCB0 aWxkZSwgaWYgYW55LCAqLworCQlpZiAoKmRpcnAgIT0gJ1wwJykgewkvKiBpbiB0aGUgYXRvbSBi dWZmZXIuICovCisJCSAgICBpZiAoc2V0YXRtKGRpcnAsMSkgPCAwKSB7CisJCQlwcmludGYoIkV4 cGFuZGVkIG5hbWUgdG9vIGxvbmdcbiIpOworCQkJaWYgKG5wKSBmcmVlKG5wKTsKKwkJCXJldHVy bigtOSk7CisJCSAgICB9CisJCX0KKwkJKnhwID0gYXRtYnVmOworCQlkZWJ1ZyhGMTEwLCJjbWlm aSB0aWxkZV9leHBhbmQiLCp4cCwwKTsKKwkgICAgfQorI2VuZGlmIC8qIERUSUxERSAqLworCSAg ICBpZiAoIXN2KSB7CQkJLyogT25seSBkbyB0aGlzIG9uY2UgKi8KKwkJc3YgPSBtYWxsb2MoKGlu dClzdHJsZW4oKnhwKSsxKTsgLyogTWFrZSBhIHNhZmUgY29weSAqLworCQlpZiAoIXN2KSB7CisJ CSAgICBwcmludGYoIj9jbWlmaTogbWFsbG9jIGVycm9yXG4iKTsKKwkJICAgIGlmIChucCkgZnJl ZShucCk7CisJCSAgICByZXR1cm4oLTkpOworCQl9CisJCXN0cmNweShzdiwqeHApOworCQlkZWJ1 ZyhGMTEwLCJjbWlmaSBzdiIsc3YsMCk7CisJICAgIH0KKworLyogVGhpcyBpcyB0byBnZXQgYXJv dW5kICJjZCAvIiBmYWlsaW5nIGJlY2F1c2UgInRvbyBtYW55IGRpcmVjdG9yaWVzIG1hdGNoIiAq LworCisJICAgIGV4cGFuZGVkID0gMDsJCS8qIERpZG4ndCBjYWxsIHp4cGFuZCAqLworI2lmZGVm IGRhdGFnZW5lcmFsCisJICAgIGRlYnVnKEYxMTAsImNtaWZpIGlzZGlyIDEiLCp4cCwwKTsKKwkg ICAgeworCQlpbnQgeTsgY2hhciAqczsKKwkJcyA9ICp4cDsKKwkJeSA9IHN0cmxlbihzKTsKKwkJ aWYgKHkgPiAxICYmCisJCSAgICAoc1t5LTFdID09ICc6JyB8fAorCQkgICAgIHNbeS0xXSA9PSAn XicgfHwKKwkJICAgICBzW3ktMV0gPT0gJz0nKQorCQkgICAgKQorCQkgIHNbeS0xXSA9IE5VTDsK KwkgICAgfQorCSAgICBkZWJ1ZyhGMTEwLCJjbWlmaSBpc2RpciAyIiwqeHAsMCk7CisjZW5kaWYg LyogIGRhdGFnZW5lcmFsICovCisKKyNpZmRlZiBWTVMKKwkgICAgaWYgKGRpcmZsZykgeworCQlp ZiAoIXN0cmNtcCgqeHAsIi4uIikpIHsgLyogRm9yIFVOSVhlcnMuLi4gKi8KKwkJICAgIHNldGF0 bSgiLSIsMCk7CisJCSAgICAqeHAgPSBhdG1idWY7CisJCX0gZWxzZSBpZiAoIXN0cmNtcCgqeHAs Ii4iKSkgeworCQkgICAgc2V0YXRtKCJbXSIsMCk7CisJCSAgICAqeHAgPSBhdG1idWY7CisJCX0K KwkgICAgfQorI2VuZGlmIC8qIFZNUyAqLworCSAgICBpdHNhZGlyID0gaXNkaXIoKnhwKTsJLyog SXMgaXQgYSBkaXJlY3Rvcnk/ICovCisJICAgIGRlYnVnKEYxMTEsImNtaWZpIGl0c2FkaXIiLCp4 cCxpdHNhZGlyKTsKKyNpZmRlZiBWTVMKKwkgICAgLyogSWYgdGhleSBzYWlkICJibGFoIiB3aGVy ZSAiYmxhaC5kaXIiIGlzIGEgZGlyZWN0b3J5Li4uICovCisJICAgIC8qIGNoYW5nZSBpdCB0byBb LmJsYWhdLiAqLworCSAgICBpZiAoIWl0c2FkaXIpIHsKKwkJY2hhciB0bXBidWZbNjAwXTsKKwkJ aW50IGZsYWcgPSAwOyBjaGFyIGMsICogcDsKKwkJcCA9ICp4cDsKKwkJd2hpbGUgKChjID0gKnAr KykgJiYgIWZsYWcpCisJCSAgaWYgKGNrc3RyY2hyKCIuW106Kj88PiIsYykpCisJCSAgICBmbGFn ID0gMTsKKwkJZGVidWcoRjExMSwiY21pZmkgVk1TIGRpcm5hbWUgZmxhZyIsKnhwLGZsYWcpOwor CQlpZiAoIWZsYWcpIHsKKwkJICAgIGNrbWFrbXNnKHRtcGJ1ZixUTVBCVUZTSVosIlsuIiwqeHAs Il0iLE5VTEwpOworCQkgICAgaXRzYWRpciA9IGlzZGlyKHRtcGJ1Zik7CisJCSAgICBpZiAoaXRz YWRpcikgeworCQkJc2V0YXRtKHRtcGJ1ZiwwKTsKKwkJCSp4cCA9IGF0bWJ1ZjsKKwkJICAgIH0K KwkJICAgIGRlYnVnKEYxMTEsImNtaWZpIFZNUyBkaXJuYW1lIGZsYWcgaXRzYWRpciIsKnhwLGl0 c2FkaXIpOworCQl9CisJICAgIH0gZWxzZSBpZiAoaXRzYWRpciA9PSAxICYmICooeHBbMF0pID09 ICcuJyAmJiAqKHhwWzFdKSkgeworCQljaGFyICpwOworCQlpZiAocCA9IG1hbGxvYyhjYyArIDQp KSB7CisJCSAgICBja21ha21zZyhwLGNjKzQsIlsiLCp4cCwiXSIsTlVMTCk7CisJCSAgICBzZXRh dG0ocCwwKTsKKwkJICAgICp4cCA9IGF0bWJ1ZjsKKwkJICAgIGRlYnVnKEYxMTAsImNtZGlyIC5m b28iLCp4cCwwKTsKKwkJICAgIGZyZWUocCk7CisJCX0KKwkgICAgfSBlbHNlIGlmIChpdHNhZGly ID09IDIgJiYgIWRpcmFjdGl2ZSkgeworCQlpbnQgeDsJCQkvKiBbRk9PXUJBUi5ESVIgaW5zdGVh ZCBvZiBbRk9PLkJBUl0gKi8KKwkJY2hhciAqcDsKKwkJcCA9IG1hbGxvYyhjYyArIDQpOworCQlp ZiAocCkgeworCQkgICAgeCA9IGN2dGRpcigqeHAscCxBVE1CTCk7IC8qIENvbnZlcnQgdG8gW0ZP Ty5CQVJdICovCisJCSAgICBpZiAoeCA+IDApIHsKKwkJCXNldGF0bShwLDApOworCQkJKnhwID0g YXRtYnVmOworCQkJZGVidWcoRjExMCwiY21kaXIgY3Z0ZGlyIiwqeHAsMCk7CisJCSAgICB9CisJ CSAgICBmcmVlKHApOworCQl9CisJICAgIH0KKyNlbmRpZiAvKiBWTVMgKi8KKworCSAgICBkZWJ1 ZyhGMTAxLCJjbWlmaSBkaXJmbGciLCIiLGRpcmZsZyk7CisJICAgIGlmIChkaXJmbGcpIHsJCS8q IFBhcnNpbmcgYSBkaXJlY3RvcnkgbmFtZT8gKi8KKwkJLyogWWVzLCBkb2VzIGl0IGNvbnRhaW4g d2lsZGNhcmRzPyAqLworCQlpZiAoaXN3aWxkKCp4cCkgfHwKKwkJICAgIChkaXJhY3RpdmUgJiYg KCFzdHJjbXAoKnhwLCIuIikgIHx8ICFzdHJjbXAoKnhwLCIuLiIpKSkKKwkJICAgICkgeworCQkg ICAgbnp4b3B0cyB8PSBaWF9ESVJPTkxZOyAvKiBNYXRjaCBvbmx5IGRpcmVjdG9yeSBuYW1lcyAq LworCQkgICAgaWYgKG1hdGNoZG90KSAgbnp4b3B0cyB8PSBaWF9NQVRDSERPVDsKKwkJICAgIGlm IChyZWN1cnNpdmUpIG56eG9wdHMgfD0gWlhfUkVDVVJTRTsKKwkJICAgIGRlYnVnKEYxMTEsImNt aWZpIG56eG9wdHMgMiIsKnhwLG56eG9wdHMpOworCQkgICAgeSA9IG56eHBhbmQoKnhwLG56eG9w dHMpOworCQkgICAgZGVidWcoRjExMSwiY21pZmkgbnp4cGFuZCAyIiwqeHAseSk7CisJCSAgICBu ZmlsZXMgPSB5OworCQkgICAgZXhwYW5kZWQgPSAxOworCQl9IGVsc2UgeworI2lmZGVmIFZNUwor LyoKKyAgVGhpcyBpcyB0byBhbGxvdyAoZS5nLikgImNkIGZvbyIsIHdoZXJlIEZPTy5ESVI7MSBp cyBpbiB0aGUKKyAgY3VycmVudCBkaXJlY3RvcnkuCisqLworCQkgICAgZGVidWcoRjExMSwiY21k aXIgaXRzYWRpciIsKnhwLGl0c2FkaXIpOworCQkgICAgaWYgKCFpdHNhZGlyKSB7CisJCQljaGFy ICpzOworCQkJaW50IG47CisJCQlzID0gKnhwOworCQkJbiA9IHN0cmxlbihzKTsKKwkJCWlmIChu ID4gMCAmJgorI2lmZGVmIENPTU1FTlQKKwkJCSAgICAqcyAhPSAnWycgJiYgc1tuLTFdICE9ICdd JyAmJgorCQkJICAgICpzICE9ICc8JyAmJiBzW24tMV0gIT0gJz4nICYmCisjZWxzZQorCQkJICAg IGNraW5kZXgoIlsiLHMsMCwwLDEpID09IDAgJiYKKwkJCSAgICBja2luZGV4KCI8IixzLDAsMCwx KSA9PSAwICYmCisjZW5kaWYgLyogQ09NTUVOVCAqLworCQkJICAgIHNbbi0xXSAhPSAnOicpIHsK KwkJCSAgICBjaGFyICogZGlyYnVmID0gTlVMTDsKKwkJCSAgICBkaXJidWYgPSAoY2hhciAqKW1h bGxvYyhuKzQpOworCQkJICAgIGlmIChkaXJidWYpIHsKKwkJCQlpZiAoKnMgPT0gJy4nKQorCQkJ CSAgY2ttYWttc2coZGlyYnVmLG4rNCwiWyIscywiXSIsTlVMTCk7CisJCQkJZWxzZQorCQkJCSAg Y2ttYWttc2coZGlyYnVmLG4rNCwiWy4iLHMsIl0iLE5VTEwpOworCQkJCWl0c2FkaXIgPSBpc2Rp cihkaXJidWYpOworCQkJCWRlYnVnKEYxMTEsImNtZGlyIGRpcmJ1ZiIsZGlyYnVmLGl0c2FkaXIp OworCQkJCWlmIChpdHNhZGlyKSB7CisJCQkJICAgIHNldGF0bShkaXJidWYsMCk7CisJCQkJICAg ICp4cCA9IGF0bWJ1ZjsKKwkJCQkgICAgZGVidWcoRjExMCwiY21kaXIgbmV3ICp4cCIsKnhwLDAp OworCQkJCX0KKwkJCQlmcmVlKGRpcmJ1Zik7CisJCQkgICAgfQorCisvKiBUaGlzIGlzIHRvIGFs bG93IENEUEFUSCB0byB3b3JrIGluIFZNUy4uLiAqLworCisJCQl9IGVsc2UgaWYgKG4gPiAwKSB7 CisJCQkgICAgY2hhciAqIHA7IGludCBpLCBqLCBrLCBkOworCQkJICAgIGNoYXIgcmJbMl0gPSAi XSI7CisJCQkgICAgaWYgKHAgPSBtYWxsb2MoeCArIDgpKSB7CisJCQkJY2tzdHJuY3B5KHAsKnhw LHgrOCk7CisJCQkJaSA9IGNraW5kZXgoIi4iLHAsLTEsMSwxKTsKKwkJCQlkID0gY2tpbmRleCgi LmRpciIscCwwLDAsMCk7CisJCQkJaiA9IGNraW5kZXgoIl0iLHAsLTEsMSwxKTsKKwkJCQlpZiAo aiA9PSAwKSB7CisJCQkJICAgIGogPSBja2luZGV4KCI+IixwLC0xLDEsMSk7CisJCQkJICAgIHJi WzBdID0gJz4nOworCQkJCX0KKwkJCQlrID0gY2tpbmRleCgiOiIscCwtMSwxLDEpOworCQkJCWlm IChpIDwgaiB8fCBpIDwgaykgaSA9IDA7CisJCQkJaWYgKGQgPCBqIHx8IGQgPCBrKSBkID0gMDsK KwkJCQkvKiBDaGFuZ2UgW0ZPT11CQVIgb3IgW0ZPT11CQVIuRElSICovCisJCQkJLyogdG8gW0ZP Ty5CQVJdICovCisJCQkJaWYgKGogPiAwICYmIGogPCBuKSB7CisJCQkJICAgIHBbai0xXSA9ICcu JzsKKwkJCQkgICAgaWYgKGQgPiAwKSBwW2QtMV0gPSBOVUw7CisJCQkJICAgIGNrc3RybmNhdChw LHJiLHgrOCk7CisJCQkJICAgIGRlYnVnKEYxMTAsImNtZGlyIHh4eCIscCwwKTsKKwkJCQl9CisJ CQkJaXRzYWRpciA9IGlzZGlyKHApOworCQkJCWRlYnVnKEYxMTEsImNtZGlyIHAiLHAsaXRzYWRp cik7CisJCQkJaWYgKGl0c2FkaXIpIHsKKwkJCQkgICAgc2V0YXRtKHAsMCk7CisJCQkJICAgICp4 cCA9IGF0bWJ1ZjsKKwkJCQkgICAgZGVidWcoRjExMCwiY21kaXIgbmV3ICp4cCIsKnhwLDApOwor CQkJCX0KKwkJCQlmcmVlKHApOworCQkJICAgIH0KKwkJCX0KKwkJICAgIH0KKyNlbmRpZiAvKiBW TVMgKi8KKwkJICAgIHkgPSAoIWl0c2FkaXIpID8gMCA6IDE7CisJCSAgICBkZWJ1ZyhGMTExLCJj bWlmaSB5IGl0c2FkaXIiLCp4cCx5KTsKKwkJfQorCSAgICB9IGVsc2UgewkJCS8qIFBhcnNpbmcg YSBmaWxlbmFtZS4gKi8KKwkJZGVidWcoRjExMCwiY21pZmkgKnhwIHByZS16eHBhbmQiLCp4cCww KTsKKyNpZm5kZWYgQ09NTUVOVAorCQluenhvcHRzIHw9IChkID09IDApID8gWlhfRklMT05MWSA6 IDA7IC8qIFNvIGFsd2F5cyBleHBhbmQuICovCisJCWlmIChtYXRjaGRvdCkgIG56eG9wdHMgfD0g WlhfTUFUQ0hET1Q7CisJCWlmIChyZWN1cnNpdmUpIG56eG9wdHMgfD0gWlhfUkVDVVJTRTsKKwkJ eSA9IG56eHBhbmQoKnhwLG56eG9wdHMpOworI2Vsc2UKKy8qIEhlcmUgd2UncmUgdHJ5aW5nIHRv IGZpeCBhIHByb2JsZW0gaW4gd2hpY2ggYSBkaXJlY3RvcnkgbmFtZSBpcyBhY2NlcHRlZCAqLwor LyogYXMgYSBmaWxlbmFtZSwgYnV0IHRoaXMgYnJlYWtzIHRvbyBtYW55IG90aGVyIHRoaW5ncy4g Ki8KKwkJLyogbnp4b3B0cyA9IDA7ICovCisJCWlmICghZCkgeworCQkgICAgaWYgKGl0c2FkaXIg JiAhaXN3aWxkKCp4cCkpIHsKKwkJCWRlYnVnKEYxMDAsImNtaWZpIGRpciB3aGVuIGZpbG9ubHki LCIiLDApOworCQkJcHJpbnRmKCI/Tm90IGEgcmVndWxhciBmaWxlOiBcIiVzXCJcbiIsKnhwKTsK KwkJCWlmIChzdikgZnJlZShzdik7CisJCQlpZiAobnApIGZyZWUobnApOworCQkJcmV0dXJuKC05 KTsKKwkJICAgIH0gZWxzZSB7CisJCQluenhvcHRzIHw9IFpYX0ZJTE9OTFk7CisJCQlpZiAobWF0 Y2hkb3QpICBuenhvcHRzIHw9IFpYX01BVENIRE9UOworCQkJaWYgKHJlY3Vyc2l2ZSkgbnp4b3B0 cyB8PSBaWF9SRUNVUlNFOworCQkJeSA9IG56eHBhbmQoKnhwLG56eG9wdHMpOworCQkgICAgfQor CQl9CisjZW5kaWYgLyogQ09NTUVOVCAqLworCQluZmlsZXMgPSB5OworCQlkZWJ1ZyhGMTExLCJj bWlmaSB5IG56eHBhbmQiLCp4cCx5KTsKKwkJZGVidWcoRjExMSwiY21pZmkgeSBhdG1idWYiLGF0 bWJ1ZixpdHNhZGlyKTsKKwkJZXhwYW5kZWQgPSAxOworCSAgICB9CisJICAgIC8qIGRvbXlkaXIo KSBjYWxscyB6eHJld2luZCgpIHNvIHdlIE1VU1QgY2FsbCBuenhwYW5kKCkgaGVyZSAqLworCSAg ICBpZiAoIWV4cGFuZGVkICYmIGRpcmFjdGl2ZSkgeworCQlkZWJ1ZyhGMTEwLCJjbWlmaSBkaXJh Y3RpdmUgY2F0Y2gtYWxsIHp4cGFuZCIsKnhwLDApOworCQluenhvcHRzIHw9IChkID09IDApID8g WlhfRklMT05MWSA6IChkaXJmbGcgPyBaWF9ESVJPTkxZIDogMCk7CisJCWlmIChtYXRjaGRvdCkg IG56eG9wdHMgfD0gWlhfTUFUQ0hET1Q7CisJCWlmIChyZWN1cnNpdmUpIG56eG9wdHMgfD0gWlhf UkVDVVJTRTsKKwkJeSA9IG56eHBhbmQoKnhwLG56eG9wdHMpOworCQlkZWJ1ZyhGMTExLCJjbWlm aSBkaXJhY3RpdmUgbnp4cGFuZCIsKnhwLHkpOworCQluZmlsZXMgPSB5OworCQlleHBhbmRlZCA9 IDE7CisJICAgIH0KKwkgICAgKndpbGQgPSAoaXN3aWxkKHN2KSB8fCAoeSA+IDEpKSAmJiAoaXRz YWRpciA9PSAwKTsKKworI2lmZGVmIFJFQ1VSU0lWRQorCSAgICBpZiAoISp3aWxkKSAqd2lsZCA9 IHJlY3Vyc2l2ZTsKKyNlbmRpZiAvKiBSRUNVUlNJVkUgKi8KKworCSAgICBkZWJ1ZyhGMTExLCJj bWlmaSBzdiB3aWxkIixzdiwqd2lsZCk7CisJICAgIGRlYnVnKEYxMDEsImNtaWZpIHkiLCIiLHkp OworCSAgICBpZiAoZGlyZmxnICYmICp3aWxkICYmIGNkYWN0aXZlKSB7CisJCWlmICh5ID4gMSkg eworCQkgICAgcHJpbnRmKCI/V2lsZGNhcmQgbWF0Y2hlcyBtb3JlIHRoYW4gb25lIGRpcmVjdG9y eVxuIik7CisJCSAgICBpZiAoc3YpIGZyZWUoc3YpOworCQkgICAgaWYgKG5wKSBmcmVlKG5wKTsK KwkJICAgIHJldHVybigtOSk7CisJCX0gZWxzZSB7CisJCSAgICB6bmV4dCgqeHApOworCQl9CisJ ICAgIH0KKwkgICAgaWYgKGl0c2FkaXIgJiYgZCAmJiAhZGlyZmxnKSB7IC8qIEl0J3MgYSBkaXJl Y3RvcnkgYW5kIG5vdCB3aWxkICovCisJCWlmIChzdikgZnJlZShzdik7CS8qIGFuZCBpdCdzIG9r IHRvIHBhcnNlIGRpcmVjdG9yaWVzICovCisJCWlmIChucCkgZnJlZShucCk7CisjaWZuZGVmIE5P TEFTVEZJTEUKKwkJbWFrZXN0cigmbGFzdGZpbGUsdG1wbGFzdGZpbGUpOworI2VuZGlmCS8qIE5P TEFTVEZJTEUgKi8KKwkJcmV0dXJuKHgpOworCSAgICB9CisJICAgIGlmICh5ID09IDApIHsJCS8q IEZpbGUgd2FzIG5vdCBmb3VuZCAqLworCQlpbnQgZG9zZWFyY2ggPSAwOworCQlkb3NlYXJjaCA9 IChwYXRoICE9IE5VTEwpOyAvKiBBIHNlYXJjaCBwYXRoIHdhcyBnaXZlbiAqLworCQlpZiAoZG9z ZWFyY2gpIHsKKwkJICAgIGRvc2VhcmNoID0gaGFzbm9wYXRoKHN2KTsgLyogRmlsZW5hbWUgaW5j bHVkZXMgbm8gcGF0aCAqLworCQkgICAgZGVidWcoRjExMSwiY21pZmlwIGhhc25vcGF0aCIsc3Ys ZG9zZWFyY2gpOworCQl9CisJCWlmIChkb3NlYXJjaCkgewkJLyogU2VhcmNoIHRoZSBwYXRoLi4u ICovCisJCSAgICBjaGFyICogcHRyID0gcGF0aDsKKwkJICAgIGNoYXIgYzsKKwkJICAgIHdoaWxl ICgxKSB7CisJCQljID0gKnB0cjsKKwkJCWlmIChjID09IFBBVEhTRVAgfHwgYyA9PSBOVUwpIHsK KwkJCSAgICBpZiAoISpwYXRoKSB7CisJCQkJcGF0aCA9IE5VTEw7CisJCQkJYnJlYWs7CisJCQkg ICAgfQorCQkJICAgICpwdHIgPSBOVUw7CisjaWZkZWYgVU5JWAorLyogQnkgZGVmaW5pdGlvbiBv ZiBDRFBBVEgsIGFuIGVtcHR5IG1lbWJlciBkZW5vdGVzIHRoZSBjdXJyZW50IGRpcmVjdG9yeSAq LworCQkJICAgIGlmICghKnBhdGgpCisJCQkgICAgICBja3N0cm5jcHkoYXRtYnVmLCIuIixBVE1C TCk7CisJCQkgICAgZWxzZQorI2VuZGlmIC8qIFVOSVggKi8KKwkJCSAgICAgIGNrc3RybmNweShh dG1idWYscGF0aCxBVE1CTCk7CisjaWZkZWYgVk1TCisJCQkgICAgYXRtYnVmW0FUTUJMXSA9IE5V TDsKKy8qIElmIHdlIGhhdmUgYSBsb2dpY2FsIG5hbWUsIGV2YWx1YXRlIGl0IHJlY3Vyc2l2ZWx5 ICovCisJCQkgICAgaWYgKCoocHRyLTEpID09ICc6JykgeyAvKiBMb2dpY2FsIG5hbWUgZW5kcyBp biA6ICovCisJCQkJY2hhciAqcDsgaW50IG47CisJCQkJd2hpbGUgKCgobiA9IHN0cmxlbihhdG1i dWYpKSAgPiAwKSAmJgorCQkJCSAgICAgICBhdG1idWZbbi0xXSA9PSAnOicpIHsKKwkJCQkgICAg YXRtYnVmW24tMV0gPSBOVUw7CisJCQkJICAgIGZvciAocCA9IGF0bWJ1ZjsgKnA7IHArKykKKwkJ CQkgICAgICBpZiAoaXNsb3dlcigqcCkpICpwID0gdG91cHBlcigqcCk7CisJCQkJICAgIGRlYnVn KEYxMTEsImNtZGlyIENEUEFUSCBMTiAxIixhdG1idWYsbik7CisJCQkJICAgIHAgPSBnZXRlbnYo YXRtYnVmKTsKKwkJCQkgICAgZGVidWcoRjExMCwiY21kaXIgQ0RQQVRIIExOIDIiLHAsMCk7CisJ CQkJICAgIGlmICghcCkKKwkJCQkgICAgICBicmVhazsKKwkJCQkgICAgc3RybmNweShhdG1idWYs cCxBVE1CTCk7CisJCQkJICAgIGF0bWJ1ZltBVE1CTF0gPSBOVUw7CisJCQkJfQorCQkJICAgIH0K KyNlbHNlCisjaWZkZWYgT1MyCisJCQkgICAgaWYgKCoocHRyLTEpICE9ICdcXCcgJiYgKihwdHIt MSkgIT0gJy8nKQorCQkJICAgICAgY2tzdHJuY2F0KGF0bWJ1ZiwiXFwiLEFUTUJMKTsKKyNlbHNl CisjaWZkZWYgVU5JWAorCQkJICAgIGlmICgqKHB0ci0xKSAhPSAnLycpCisJCQkgICAgICBja3N0 cm5jYXQoYXRtYnVmLCIvIixBVE1CTCk7CisjZWxzZQorI2lmZGVmIGRhdGFnZW5lcmFsCisJCQkg ICAgaWYgKCoocHRyLTEpICE9ICc6JykKKwkJCSAgICAgIGNrc3RybmNhdChhdG1idWYsIjoiLEFU TUJMKTsKKyNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLworI2VuZGlmIC8qIFVOSVggKi8KKyNlbmRp ZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKwkJCSAgICBja3N0cm5jYXQoYXRtYnVmLHN2 LEFUTUJMKTsKKwkJCSAgICBkZWJ1ZyhGMTEwLCJjbWlmaXAgYWRkIHBhdGgiLGF0bWJ1ZiwwKTsK KwkJCSAgICBpZiAoYyA9PSBQQVRIU0VQKSBwdHIrKzsKKwkJCSAgICBwYXRoID0gcHRyOworCQkJ ICAgIGJyZWFrOworCQkJfQorCQkJcHRyKys7CisJCSAgICB9CisJCSAgICB4ID0gMTsKKwkJICAg IGlud29yZCA9IDA7CisJCSAgICBjYyA9IDA7CisJCSAgICB4YyA9IChpbnQpIHN0cmxlbihhdG1i dWYpOworCQkgICAgKnhwID0gIiI7CisJCSAgICBnb3RvIGlfcGF0aDsKKwkJfQorCQlpZiAoZCkg eworCQkgICAgaWYgKHN2KSBmcmVlKHN2KTsKKwkJICAgIGlmIChucCkgZnJlZShucCk7CisJCSAg ICByZXR1cm4oLTIpOworCQl9IGVsc2UgeworCQkgICAgaWYgKCFub21zZykgeworI2lmZGVmIENL Uk9PVAorCQkJaWYgKGNrcm9vdGVycikKKwkJCSAgcHJpbnRmKCI/T2ZmIExpbWl0czogJXNcbiIs c3YpOworCQkJZWxzZQorI2VuZGlmIC8qIENLUk9PVCAqLworCQkJICBpZiAoIXF1aWV0KQorCQkJ ICAgIHByaW50ZigiP05vICVzIG1hdGNoIC0gJXNcbiIsCisJCQkJIGRpcmZsZyA/ICJkaXJlY3Rv cmllcyIgOiAiZmlsZXMiLCBzdik7CisJCSAgICB9CisJCSAgICBpZiAoc3YpIGZyZWUoc3YpOwor CQkgICAgaWYgKG5wKSBmcmVlKG5wKTsKKwkJICAgIHJldHVybigtOSk7CisJCX0KKwkgICAgfSBl bHNlIGlmICh5IDwgMCkgeworI2lmZGVmIENLUk9PVAorCQlpZiAoY2tyb290ZXJyKQorCQkgIHBy aW50ZigiP09mZiBMaW1pdHM6ICVzXG4iLHN2KTsKKwkJZWxzZQorI2VuZGlmIC8qIENLUk9PVCAq LworCQkgIHByaW50ZigiP1RvbyBtYW55ICVzIG1hdGNoIC0gJXNcbiIsCisJCQkgZGlyZmxnID8g ImRpcmVjdG9yaWVzIiA6ICJmaWxlcyIsIHN2KTsKKwkJaWYgKHN2KSBmcmVlKHN2KTsKKwkJaWYg KG5wKSBmcmVlKG5wKTsKKwkJcmV0dXJuKC05KTsKKwkgICAgfSBlbHNlIGlmICgqd2lsZCB8fCB5 ID4gMSkgeworCQlpZiAoc3YpIGZyZWUoc3YpOworCQlpZiAobnApIGZyZWUobnApOworI2lmbmRl ZiBOT0xBU1RGSUxFCisJCW1ha2VzdHIoJmxhc3RmaWxlLHRtcGxhc3RmaWxlKTsKKyNlbmRpZgkv KiBOT0xBU1RGSUxFICovCisJCXJldHVybih4KTsKKwkgICAgfQorCisJICAgIC8qIElmIG5vdCB3 aWxkLCBzZWUgaWYgaXQgZXhpc3RzIGFuZCBpcyByZWFkYWJsZS4gKi8KKworCSAgICBkZWJ1ZyhG MTExLCJjbWlmaSBzdiBub3Qgd2lsZCIsc3YsKndpbGQpOworCSAgICBpZiAoZXhwYW5kZWQpCisJ ICAgICAgem5leHQoKnhwKTsJCS8qIEdldCBmaXJzdCAob25seT8pIG1hdGNoaW5nIGZpbGUgKi8K KwkgICAgaWYgKGRpcmZsZykJCQkvKiBNYXliZSB3aWxkIGFuZCBleHBhbmRlZCAqLworCSAgICAg IGl0c2FkaXIgPSBpc2RpcigqeHApOwkvKiBzbyBkbyB0aGlzIGFnYWluLiAqLworCSAgICBmaWxl c2l6ZSA9IGRpcmZsZyA/IGl0c2FkaXIgOiB6Y2hraSgqeHApOyAvKiBDaGVjayBhY2Nlc3NpYmls aXR5ICovCisJICAgIGlmIChleHBhbmRlZCkgeworI2lmZGVmIFpYUkVXSU5ECisJCW5maWxlcyA9 IHp4cmV3aW5kKCk7CS8qIFJld2luZCBzbyBuZXh0IHpuZXh0KCkgZ2V0cyAxc3QgKi8KKyNlbHNl CisKKwkJbnp4b3B0cyB8PSBkaXJmbGcgPyBaWF9ESVJPTkxZIDogMDsKKwkJaWYgKG1hdGNoZG90 KSAgbnp4b3B0cyB8PSBaWF9NQVRDSERPVDsKKwkJaWYgKHJlY3Vyc2l2ZSkgbnp4b3B0cyB8PSBa WF9SRUNVUlNFOworCQluZmlsZXMgPSBuenhwYW5kKCp4cCxuenhvcHRzKTsKKyNlbmRpZiAvKiBa WFJFV0lORCAqLworCSAgICB9CisJICAgIGRlYnVnKEYxMTEsImNtaWZpIG5maWxlcyIsKnhwLG5m aWxlcyk7CisJICAgIGRlYnVnKEYxMDEsImNtaWZpIGZpbGVzaXplIiwiIixmaWxlc2l6ZSk7CisJ ICAgIGZyZWUoc3YpOwkJCS8qIGRvbmUgd2l0aCB0aGlzICovCisJICAgIHN2ID0gTlVMTDsKKwkg ICAgaWYgKGRpcmZsZyAmJiAhZmlsZXNpemUpIHsKKwkJcHJpbnRmKCI/Tm90IGEgZGlyZWN0b3J5 IC0gJXNcbiIsKnhwKTsKKyNpZmRlZiBDS0NIQU5ORUxJTworCQl6X2Vycm9yID0gRlhfQUNDOwor I2VuZGlmIC8qIENLQ0hBTk5FTElPICovCisJCXJldHVybigtOSk7CisJICAgIH0gZWxzZSBpZiAo ZmlsZXNpemUgPT0gKENLX09GRl9UKS0zKSB7CisJCWlmICgheGNtZmRiKSB7CisJCSAgICBpZiAo ZGlyYWN0aXZlKQorCQkgICAgICAvKiBEb24ndCBzaG93IGZpbGVuYW1lIGlmIHdlJ3JlIG5vdCBh bGxvd2VkIHRvIHNlZSBpdCAqLworCQkgICAgICBwcmludGYoIj9SZWFkIHBlcm1pc3Npb24gZGVu aWVkXG4iKTsKKwkJICAgIGVsc2UKKwkJICAgICAgcHJpbnRmKCI/UmVhZCBwZXJtaXNzaW9uIGRl bmllZCAtICVzXG4iLCp4cCk7CisJCX0KKwkJaWYgKG5wKSBmcmVlKG5wKTsKKyNpZmRlZiBDS0NI QU5ORUxJTworCQl6X2Vycm9yID0gRlhfQUNDOworI2VuZGlmIC8qIENLQ0hBTk5FTElPICovCisJ CXJldHVybih4Y21mZGIgPyAtNiA6IC05KTsKKwkgICAgfSBlbHNlIGlmIChmaWxlc2l6ZSA9PSAo Q0tfT0ZGX1QpLTIpIHsKKwkJaWYgKCFyZWN1cnNpdmUpIHsKKwkJICAgIGlmIChucCkgZnJlZShu cCk7CisJCSAgICBpZiAoZCkgeworI2lmbmRlZiBOT0xBU1RGSUxFCisJCQltYWtlc3RyKCZsYXN0 ZmlsZSx0bXBsYXN0ZmlsZSk7CisjZW5kaWYJLyogTk9MQVNURklMRSAqLworCQkJcmV0dXJuKDAp OworCQkgICAgfQorCQkgICAgaWYgKCF4Y21mZGIpCisJCSAgICAgIHByaW50ZigiP0ZpbGUgbm90 IHJlYWRhYmxlIC0gJXNcbiIsKnhwKTsKKyNpZmRlZiBDS0NIQU5ORUxJTworCQkgICAgel9lcnJv ciA9IEZYX0FDQzsKKyNlbmRpZiAvKiBDS0NIQU5ORUxJTyAqLworCQkgICAgcmV0dXJuKHhjbWZk YiA/IC02IDogLTkpOworCQl9CisJICAgIH0gZWxzZSBpZiAoZmlsZXNpemUgPCAoQ0tfT0ZGX1Qp MCkgeworCQlpZiAobnApIGZyZWUobnApOworCQlpZiAoIW5vbXNnICYmICF4Y21mZGIpCisJCSAg cHJpbnRmKCI/RmlsZSBub3QgZm91bmQgLSAlc1xuIiwqeHApOworI2lmZGVmIENLQ0hBTk5FTElP CisJCXpfZXJyb3IgPSBGWF9GTkY7CisjZW5kaWYgLyogQ0tDSEFOTkVMSU8gKi8KKwkJcmV0dXJu KHhjbWZkYiA/IC02IDogLTkpOworCSAgICB9CisJICAgIGlmIChucCkgZnJlZShucCk7CisjaWZu ZGVmIE5PTEFTVEZJTEUKKwkgICAgbWFrZXN0cigmbGFzdGZpbGUsdG1wbGFzdGZpbGUpOworI2Vu ZGlmCS8qIE5PTEFTVEZJTEUgKi8KKwkgICAgcmV0dXJuKHgpOworCisjaWZuZGVmIE1BQworCSAg Y2FzZSAyOgkJCS8qIEVTQyAqLworCSAgICBkZWJ1ZyhGMTAxLCJjbWlmaSBlc2MsIHhjIiwiIix4 Yyk7CisJICAgIGlmICh4YyA9PSAwKSB7CisJCWlmICgqeGRlZikgeworCQkgICAgcHJpbnRmKCIl cyAiLHhkZWYpOyAvKiBJZiBhdCBiZWdpbm5pbmcgb2YgZmllbGQgKi8KKyNpZmRlZiBHRU1ET1MK KwkJICAgIGZmbHVzaChzdGRvdXQpOworI2VuZGlmIC8qIEdFTURPUyAqLworCQkgICAgaW53b3Jk ID0gY21mbGdzID0gMDsKKwkJICAgIGFkZGJ1Zih4ZGVmKTsJLyogU3VwcGx5IGRlZmF1bHQuICov CisJCSAgICBpZiAoc2V0YXRtKHhkZWYsMCkgPCAwKSB7CisJCQlwcmludGYoIkRlZmF1bHQgbmFt ZSB0b28gbG9uZ1xuIik7CisJCQlpZiAobnApIGZyZWUobnApOworCQkJcmV0dXJuKC05KTsKKwkJ ICAgIH0KKwkJfSBlbHNlIHsJCS8qIE5vIGRlZmF1bHQgKi8KKwkJICAgIGJsZWVwKEJQX1dBUk4p OworCQl9CisJCWJyZWFrOworCSAgICB9CisJICAgIGlmICgqKnhwID09ICd7JykgewkJLyogRGlk IHVzZXIgdHlwZSBvcGVuaW5nIGJyYWNlLi4uICovCisJCSp4cCA9ICp4cCArIDE7CisJCXhjLS07 CisJCWNjLS07CisJCXFmbGFnID0gJ30nOworCSAgICB9IGVsc2UgaWYgKGRibHF1byAmJiAqKnhw ID09ICciJykgewkvKiBvciBkb3VibGVxdW90ZT8gKi8KKwkJKnhwID0gKnhwICsgMTsJCS8qIElm IHNvIGlnbm9yZSBpdCBhbmQgc3BhY2UgcGFzdCBpdCAqLworCQl4Yy0tOworCQljYy0tOworCQlx ZmxhZyA9ICciJzsKKwkgICAgfQorI2lmbmRlZiBOT1NQTAorCSAgICBpZiAoZikgewkJCS8qIElm IGEgY29udmVyc2lvbiBmdW5jdGlvbiBpcyBnaXZlbiAqLworI2lmZGVmIERPQ0hLVkFSCisJCWNo YXIgKnMgPSAqeHA7CQkvKiBTZWUgaWYgdGhlcmUgYXJlIGFueSB2YXJpYWJsZXMgaW4gKi8KKwkJ d2hpbGUgKCpzKSB7CQkvKiB0aGUgc3RyaW5nIGFuZCBpZiBzbywgZXhwYW5kIGl0LiAgKi8KKwkJ ICAgIGlmIChjaGt2YXIocykpIHsKKyNlbmRpZiAvKiBET0NIS1ZBUiAqLworCQkJenEgPSBhdHhi dWY7CisJCQlhdHhuID0gQ01EQkw7CisJCQlpZiAoKHggPSAoKmYpKCp4cCwmenEsJmF0eG4pKSA8 IDApIHsKKwkJCSAgICBpZiAobnApIGZyZWUobnApOworCQkJICAgIHJldHVybigtMik7CisJCQl9 CisjaWZkZWYgRE9DSEtWQVIKKwkJICAgIC8qIHJlZHVjZSBjYyBieSBudW1iZXIgb2YgXFwgY29u c3VtZWQgYnkgY29udmVyc2lvbiAqLworCQkgICAgLyogZnVuY3Rpb24gKG5lZWRlZCBmb3IgT1Mv Miwgd2hlcmUgXCBpcyBwYXRoIHNlcGFyYXRvcikgKi8KKwkJCWNjIC09IChzdHJsZW4oKnhwKSAt IHN0cmxlbihhdHhidWYpKTsKKyNlbmRpZiAvKiBET0NIS1ZBUiAqLworCQkJKnhwID0gYXR4YnVm OworCQkJaWYgKCFhdHhidWZbMF0pIHsgLyogUmVzdWx0IGVtcHR5LCB1c2UgZGVmYXVsdCAqLwor CQkJICAgICp4cCA9IHhkZWY7CisJCQkgICAgY2MgPSBzdHJsZW4oeGRlZik7CisJCQl9CisjaWZk ZWYgRE9DSEtWQVIKKwkJCWJyZWFrOworCQkgICAgfQorCQkgICAgcysrOworCQl9CisjZW5kaWYg LyogRE9DSEtWQVIgKi8KKwkgICAgfQorI2VuZGlmIC8qIE5PU1BMICovCisKKyNpZmRlZiBEVElM REUKKwkgICAgaWYgKGRpcmZsZyAmJiAqKCp4cCkgPT0gJ34nKSB7CisJCWRlYnVnKEYxMTEsImNt aWZpIHRpbGRlX2V4cGFuZCBBIiwqeHAsY2MpOworCQlkaXJwID0gdGlsZGVfZXhwYW5kKCp4cCk7 IC8qIEV4cGFuZCB0aWxkZSwgaWYgYW55Li4uICovCisJCWlmICghZGlycCkgZGlycCA9ICIiOwor CQlpZiAoKmRpcnApIHsKKwkJICAgIGludCBpLCB4eDsKKwkJICAgIGNoYXIgKiBzcDsKKwkJICAg IHhjID0gY2M7CQkvKiBMZW5ndGggb2YgfnRoaW5nICovCisJCSAgICB4eCA9IHNldGF0bShkaXJw LDApOyAvKiBDb3B5IGV4cGFuc2lvbiB0byBhdG9tIGJ1ZmZlciAqLworCQkgICAgZGVidWcoRjEx MSwiY21pZmkgdGlsZGVfZXhwYW5kIEIiLGF0bWJ1ZixjYyk7CisJCSAgICBpZiAoeHggPCAwKSB7 CisJCQlwcmludGYoIkV4cGFuZGVkIG5hbWUgdG9vIGxvbmdcbiIpOworCQkJaWYgKG5wKSBmcmVl KG5wKTsKKwkJCXJldHVybigtOSk7CisJCSAgICB9CisJCSAgICBkZWJ1ZyhGMTExLCJjbWlmaSB0 aWxkZV9leHBhbmQgeGMiLCIiLHhjKTsKKwkJICAgIGZvciAoaSA9IDA7IGkgPCB4YzsgaSsrKSB7 CisJCQljbWRjaGFyZGVsKCk7CS8qIEJhY2sgdXAgb3ZlciB+dGhpbmcgKi8KKwkJCWJwLS07CisJ CSAgICB9CisJCSAgICB4YyA9IGNjOwkJLyogSG93IG1hbnkgbmV3IG9uZXMgd2UganVzdCBnb3Qg Ki8KKwkJICAgIHNwID0gYXRtYnVmOworCQkgICAgcHJpbnRmKCIlcyIsc3ApOwkvKiBQcmludCB0 aGVtICovCisJCSAgICB3aGlsZSAoKCpicCsrID0gKnNwKyspKSA7CS8qIENvcHkgdG8gY29tbWFu ZCBidWZmZXIgKi8KKwkJICAgIGJwLS07CSAgICAJICAgICAgICAvKiBCYWNrIHVwIG92ZXIgTlVM ICovCisJCX0KKwkJKnhwID0gYXRtYnVmOworCSAgICB9CisjZW5kaWYgLyogRFRJTERFICovCisK KwkgICAgc3AgPSAqeHAgKyBjYzsKKworI2lmZGVmIFVOSVhPUk9TSworCSAgICBpZiAoIXN0cmNt cChhdG1idWYsIi4uIikpIHsKKwkJcHJpbnRmKCIgIik7CisJCWNrc3RybmNhdChjbWRidWYsIiAi LENNREJMKTsKKwkJY2MrKzsKKwkJYnArKzsKKwkJKndpbGQgPSAwOworCQkqeHAgPSBhdG1idWY7 CisJCWJyZWFrOworCSAgICB9IGVsc2UgaWYgKCFzdHJjbXAoYXRtYnVmLCIuIikpIHsKKwkJYmxl ZXAoQlBfV0FSTik7CisJCWlmIChucCkgZnJlZShucCk7CisJCXJldHVybigtMSk7CisJICAgIH0g ZWxzZSB7CisJCS8qIFRoaXMgcGF0Y2hlcyBhIGdsaXRjaCB3aGVuIHVzZXIgdHlwZXMgIi4vZm9v PEVTQz4iICovCisJCS8qIGluIHdoaWNoIHRoZSBuZXh0IHR3byBjaGFycyBhcmUgb21pdHRlZCBm cm9tIHRoZSAqLworCQkvKiBleHBhbnNpb24uICBUaGVyZSBzaG91bGQgYmUgYSBiZXR0ZXIgZml4 LCBob3dldmVyLCAqLworCQkvKiBzaW5jZSB0aGVyZSBpcyBubyBwcm9ibGVtIHdpdGggIi4uL2Zv bzxFU0M+Ii4gKi8KKwkJY2hhciAqcCA9ICp4cDsKKwkJaWYgKCpwID09ICcuJyAmJiAqKHArMSkg PT0gJy8nKQorCQkgIGNjIC09IDI7CisJICAgIH0KKyNlbmRpZiAvKiBVTklYT1JPU0sgKi8KKwor I2lmZGVmIGRhdGFnZW5lcmFsCisJICAgICpzcCsrID0gJysnOwkJLyogRGF0YSBHZW5lcmFsIEFP UyB3aWxkY2FyZCAqLworI2Vsc2UKKwkgICAgKnNwKysgPSAnKic7CQkvKiBPdGhlcnMgKi8KKyNl bmRpZiAvKiBkYXRhZ2VuZXJhbCAqLworCSAgICAqc3AtLSA9ICdcMCc7CisjaWZkZWYgR0VNRE9T CisJICAgIGlmICghc3RyY2hyKCp4cCwgJy4nKSkJLyogYWJkZS5lIC0+IGFiY2RlLmUqICovCisJ ICAgICAgc3RyY2F0KCp4cCwgIi4qIik7CS8qIGFiYyAtPiBhYmMqLiogKi8KKyNlbmRpZiAvKiBH RU1ET1MgKi8KKwkgICAgLyogQWRkIHdpbGRjYXJkIGFuZCBleHBhbmQgbGlzdC4gKi8KKyNpZmRl ZiBDT01NRU5UCisJICAgIC8qIFRoaXMga2lsbHMgcGFydGlhbCBjb21wbGV0aW9uIHdoZW4gRVND IGdpdmVuIGluIHBhdGggc2VnbWVudCAqLworCSAgICBuenhvcHRzIHw9IGRpcmZsZyA/IFpYX0RJ Uk9OTFkgOiAoZCA/IDAgOiBaWF9GSUxPTkxZKTsKKyNlbHNlCisJICAgIC8qIG56eG9wdHMgPSAw OyAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKwkgICAgaWYgKG1hdGNoZG90KSAgbnp4b3B0cyB8 PSBaWF9NQVRDSERPVDsKKwkgICAgaWYgKHJlY3Vyc2l2ZSkgbnp4b3B0cyB8PSBaWF9SRUNVUlNF OworCSAgICB5ID0gbnp4cGFuZCgqeHAsbnp4b3B0cyk7CisJICAgIG5maWxlcyA9IHk7CisJICAg IGRlYnVnKEYxMTEsImNtaWZpIG56eHBhbmQiLCp4cCx5KTsKKwkgICAgaWYgKHkgPiAwKSB7Cisj aWZkZWYgT1MyCisgICAgICAgICAgICAgICAgem5leHQoZmlsYnVmKTsJCS8qIEdldCBmaXJzdCAq LworI2lmZGVmIFpYUkVXSU5ECisJCXp4cmV3aW5kKCk7CQkvKiBNdXN0ICJyZXdpbmQiICovCisj ZWxzZQorCQluenhwYW5kKCp4cCxueHpvcHRzKTsKKyNlbmRpZiAvKiBaWFJFV0lORCAqLworI2Vs c2UgIC8qIE5vdCBPUzIgKi8KKyAgICAgICAgICAgICAgICBja3N0cm5jcHkoZmlsYnVmLG10Y2hz WzBdLENLTUFYUEFUSCk7CisjZW5kaWYgLyogT1MyICovCisJICAgIH0gZWxzZQorCSAgICAgICpm aWxidWYgPSAnXDAnOworCSAgICBmaWxidWZbQ0tNQVhQQVRIXSA9IE5VTDsKKwkgICAgKnNwID0g J1wwJzsJCQkvKiBSZW1vdmUgd2lsZGNhcmQuICovCisJICAgIGRlYnVnKEYxMTEsImNtaWZpIGZp bGJ1ZiIsZmlsYnVmLHkpOworCSAgICBkZWJ1ZyhGMTExLCJjbWlmaSAqeHAiLCp4cCxjYyk7CisK KwkgICAgKndpbGQgPSAoeSA+IDEpOworCSAgICBpZiAoeSA9PSAwKSB7CisJCWlmICghbm9tc2cp IHsKKyNpZmRlZiBDS1JPT1QKKwkJICAgIGlmIChja3Jvb3RlcnIpCisJCSAgICAgIHByaW50Zigi P09mZiBMaW1pdHM6ICVzXG4iLGF0bWJ1Zik7CisJCSAgICBlbHNlCisjZW5kaWYgLyogQ0tST09U ICovCisJCSAgICAgIHByaW50ZigiP05vICVzIG1hdGNoIC0gJXNcbiIsCisJCQkgICBkaXJmbGcg PyAiZGlyZWN0b3JpZXMiIDogImZpbGVzIiwgYXRtYnVmKTsKKwkJICAgIGlmIChucCkgZnJlZShu cCk7CisJCSAgICByZXR1cm4oLTkpOworCQl9IGVsc2UgeworCQkgICAgYmxlZXAoQlBfV0FSTik7 CisJCSAgICBpZiAobnApIGZyZWUobnApOworCQkgICAgcmV0dXJuKC0xKTsKKwkJfQorCSAgICB9 IGVsc2UgaWYgKHkgPCAwKSB7CisjaWZkZWYgQ0tST09UCisJCWlmIChja3Jvb3RlcnIpCisJCSAg cHJpbnRmKCI/T2ZmIExpbWl0czogJXNcbiIsYXRtYnVmKTsKKwkJZWxzZQorI2VuZGlmIC8qIENL Uk9PVCAqLworCQkgIHByaW50ZigiP1RvbyBtYW55ICVzIG1hdGNoIC0gJXNcbiIsCisJCQkgZGly ZmxnID8gImRpcmVjdG9yaWVzIiA6ICJmaWxlcyIsIGF0bWJ1Zik7CisJCWlmIChucCkgZnJlZShu cCk7CisJCXJldHVybigtOSk7CisJICAgIH0gZWxzZSBpZiAoeSA+IDEJCS8qIE5vdCB1bmlxdWUg Ki8KKyNpZm5kZWYgVk1TCisJCSAgICAgICB8fCAoeSA9PSAxICYmIGlzZGlyKGZpbGJ1ZikpIC8q IFVuaXF1ZSBkaXJlY3RvcnkgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKwkJICAgICAgICkgeworI2lm bmRlZiBOT1BBUlRJQUwKKy8qIFBhcnRpYWwgZmlsZW5hbWUgY29tcGxldGlvbiAqLworCQlpbnQg aiwgazsgY2hhciBjOworCQlrID0gMDsKKwkJZGVidWcoRjExMSwiY21pZmkgcGFydGlhbCIsZmls YnVmLGNjKTsKKyNpZmRlZiBPUzIKKwkJeworCQkgICAgaW50IGN1ciA9IDAsCisJCSAgICBsZW4g PSAwLAorCQkgICAgbGVuMiA9IDAsCisJCSAgICBtaW4gPSBzdHJsZW4oZmlsYnVmKSwKKwkJICAg IGZvdW5kID0gMDsKKwkJICAgIGNoYXIgbG9jYWxmbltDS01BWFBBVEgrMV07CisKKwkJICAgIGxl biA9IG1pbjsKKwkJICAgIGZvciAoaiA9IDE7IGogPD0geTsgaisrKSB7CisJCQl6bmV4dChsb2Nh bGZuKTsKKwkJCWlmIChkaXJmbGcgJiYgIWlzZGlyKGxvY2FsZm4pKQorCQkJICBjb250aW51ZTsK KwkJCWZvdW5kID0gMTsKKwkJCWxlbjIgPSBzdHJsZW4obG9jYWxmbik7CisJCQlmb3IgKGN1ciA9 IGNjOworCQkJICAgICBjdXIgPCBsZW4gJiYgY3VyIDwgbGVuMiAmJiBjdXIgPD0gbWluOworCQkJ ICAgICBjdXIrKworCQkJICAgICApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBP Uy8yIG9yIFdpbmRvd3MsIGNhc2UgZG9lc24ndCBtYXR0ZXIgKi8KKwkJCSAgICBpZiAodG9sb3dl cihmaWxidWZbY3VyXSkgIT0gdG9sb3dlcihsb2NhbGZuW2N1cl0pKQorCQkJICAgICAgYnJlYWs7 CisJCQl9CisJCQlpZiAoY3VyIDwgbWluKQorCQkJICBtaW4gPSBjdXI7CisJCSAgICB9CisJCSAg ICBpZiAoIWZvdW5kKQorCQkgICAgICBtaW4gPSBjYzsKKwkJICAgIGZpbGJ1ZlttaW5dID0gTlVM OworCQkgICAgaWYgKG1pbiA+IGNjKQorCQkgICAgICBrKys7CisJCX0KKyNlbHNlIC8qIE9TMiAq LworCQlmb3IgKGkgPSBjYzsgKGMgPSBmaWxidWZbaV0pOyBpKyspIHsKKwkJICAgIGZvciAoaiA9 IDE7IGogPCB5OyBqKyspCisJCSAgICAgIGlmIChtdGNoc1tqXVtpXSAhPSBjKSBicmVhazsKKwkJ ICAgIGlmIChqID09IHkpIGsrKzsKKwkJICAgIGVsc2UgZmlsYnVmW2ldID0gZmlsYnVmW2krMV0g PSBOVUw7CisJCX0KKyNlbmRpZiAvKiBPUzIgKi8KKworCisjaWZuZGVmIFZNUworCQkvKiBpc2Rp cigpIGZ1bmN0aW9uIHJlcXVpcmVkIGZvciB0aGlzISAqLworCQlpZiAoeSA9PSAxICYmIGlzZGly KGZpbGJ1ZikpIHsgLyogRG9udCB3ZSBhbHJlYWR5IGtub3cgdGhpcz8gKi8KKwkJICAgIGludCBs ZW47CisJCSAgICBsZW4gPSBzdHJsZW4oZmlsYnVmKTsKKwkJICAgIGlmIChsZW4gPiAwICYmIGxl biA8IEFUTUJMIC0gMSkgeworCQkJaWYgKGZpbGJ1ZltsZW4tMV0gIT0gZGlyc2VwKSB7CisJCQkg ICAgZmlsYnVmW2xlbl0gPSBkaXJzZXA7CisJCQkgICAgZmlsYnVmW2xlbisxXSA9IE5VTDsKKwkJ CX0KKwkJICAgIH0KKy8qCisgIEF0IHRoaXMgcG9pbnQsIGJlZm9yZSBqdXN0IGRvaW5nIHBhcnRp YWwgY29tcGxldGlvbiwgd2Ugc2hvdWxkIGxvb2sgZmlyc3QgdG8KKyAgc2VlIGlmIHRoZSBnaXZl biBkaXJlY3RvcnkgZG9lcyBpbmRlZWQgaGF2ZSBhbnkgc3ViZGlyZWN0b3JpZXMgKGRpcmZsZykg b3IKKyAgZmlsZXMgKCFkaXJmbGcpOyBpZiBpdCBkb2Vzbid0IHdlIHNob3VsZCBkbyBmdWxsIGNv bXBsZXRpb24uICBPdGhlcndpc2UsIHRoZQorICByZXN1bHQgbG9va3MgZnVubnkgdG8gdGhlIHVz ZXIgYW5kICI/IiBibG93cyB1cCB0aGUgY29tbWFuZCBmb3Igbm8gZ29vZAorICByZWFzb24uCisq LworCQkgICAgeworCQkJaW50IGZsYWdzID0gMDsKKwkJCWZpbGJ1ZltsZW4rMV0gPSAnKic7CisJ CQlmaWxidWZbbGVuKzJdID0gTlVMOworCQkJaWYgKGRpcmZsZykgZmxhZ3MgPSBaWF9ESVJPTkxZ OworCQkJY2hpbGRyZW4gPSBuenhwYW5kKGZpbGJ1ZixmbGFncyk7CisJCQlkZWJ1ZyhGMTExLCJj bWlmaSBjaGlsZHJlbiIsZmlsYnVmLGNoaWxkcmVuKTsKKwkJCWZpbGJ1ZltsZW4rMV0gPSBOVUw7 CisJCQluenhwYW5kKGZpbGJ1ZixmbGFncyk7IC8qIFJlc3RvcmUgcHJldmlvdXMgbGlzdCAqLwor CQkJaWYgKGNoaWxkcmVuID09IDApCisJCQkgIGdvdG8gTk9TVUJESVJTOworCQkgICAgfQorCQkg ICAgaWYgKGxlbiArIDEgPiBjYykKKwkJICAgICAgaysrOworCQl9CisgICAgICAgICAgICAgICAg LyogQWRkIGRvdWJsZXF1b3RlcyBpZiB0aGVyZSBhcmUgc3BhY2VzIGluIHRoZSBuYW1lICovCisJ CXsKKwkJICAgIGludCB4OworCQkgICAgaWYgKHFmbGFnKSB7CisJCQl4ID0gKHFmbGFnID09ICd9 Jyk7IC8qIChvciBicmFjZXMpICovCisJCSAgICB9IGVsc2UgeworCQkJeCA9ICFkYmxxdW87CisJ CSAgICB9CisJCSAgICBpZiAoZmlsYnVmWzBdICE9ICciJyAmJiBmaWxidWZbMF0gIT0gJ3snKQor CQkgICAgICBrID0gZHF1b3RlKGZpbGJ1ZixBVE1CTCx4KTsKKwkJfQorI2VuZGlmIC8qIFZNUyAq LworCQlkZWJ1ZyhGMTExLCJjbWlmaSBSRVBBSU5UIGZpbGJ1ZiIsZmlsYnVmLGspOworCQlpZiAo ayA+IDApIHsJCS8qIEdvdCBtb3JlIGNoYXJhY3RlcnMgKi8KKwkJICAgIGRlYnVnKEYxMDEsImNt aWZpIFJFUEFJTlQgY2MiLCIiLGNjKTsKKwkJICAgIGRlYnVnKEYxMDEsImNtaWZpIFJFUEFJTlQg eGMiLCIiLHhjKTsKKwkJICAgIGRlYnVnKEYxMTAsImNtaWZpIFJFUEFJTlQgYnAtY2MiLGJwLWNj LDApOworCQkgICAgZGVidWcoRjExMCwiY21pZmkgUkVQQUlOVCBicC14YyIsYnAteGMsMCk7CisJ CSAgICBzcCA9IGZpbGJ1ZiArIGNjOwkvKiBQb2ludCB0byBuZXcgb25lcyAqLworCQkgICAgaWYg KHFmbGFnIHx8IHN0cm5jbXAoZmlsYnVmLGJwLWNjLGNjKSkgeyAvKiBSZXBhaW50PyAqLworCQkJ aW50IHg7CisJCQl4ID0gY2M7CisJCQlpZiAocWZsYWcpIHgrKzsKKwkJCWZvciAoaSA9IDA7IGkg PCB4OyBpKyspIHsKKwkJCSAgICBjbWRjaGFyZGVsKCk7IC8qIEJhY2sgdXAgb3ZlciBvbGQgcGFy dGlhbCBzcGVjICovCisJCQkgICAgYnAtLTsKKwkJCX0KKwkJCXNwID0gZmlsYnVmOwkvKiBQb2lu dCB0byBuZXcgd29yZCBzdGFydCAqLworCQkJZGVidWcoRjExMCwiY21pZmkgZXJhc2Ugb2siLHNw LDApOworCQkgICAgfQorCQkgICAgY2MgPSBrOwkJLyogSG93IG1hbnkgbmV3IG9uZXMgd2UganVz dCBnb3QgKi8KKwkJICAgIHByaW50ZigiJXMiLHNwKTsJLyogUHJpbnQgdGhlbSAqLworCQkgICAg d2hpbGUgKCgqYnArKyA9ICpzcCsrKSkgOwkvKiBDb3B5IHRvIGNvbW1hbmQgYnVmZmVyICovCisJ CSAgICBicC0tOwkgICAgCSAgICAgICAgLyogQmFjayB1cCBvdmVyIE5VTCAqLworCQkgICAgZGVi dWcoRjExMCwiY21pZmkgcGFydGlhbCBjbWRidWYiLGNtZGJ1ZiwwKTsKKwkJICAgIGlmIChzZXRh dG0oZmlsYnVmLDApIDwgMCkgeworCQkJcHJpbnRmKCI/UGFydGlhbCBuYW1lIHRvbyBsb25nXG4i KTsKKwkJCWlmIChucCkgZnJlZShucCk7CisJCQlyZXR1cm4oLTkpOworCQkgICAgfQorCQkgICAg ZGVidWcoRjExMSwiY21pZmkgcGFydGlhbCBhdG1idWYiLGF0bWJ1ZixjYyk7CisJCSAgICAqeHAg PSBhdG1idWY7CisJCX0KKyNlbmRpZiAvKiBOT1BBUlRJQUwgKi8KKwkJYmxlZXAoQlBfV0FSTik7 CisJICAgIH0gZWxzZSB7CQkJLyogVW5pcXVlLCBjb21wbGV0ZSBpdC4gICovCisjaWZuZGVmIFZN UworI2lmZGVmIENLX1RNUERJUgorCQkvKiBpc2RpcigpIGZ1bmN0aW9uIHJlcXVpcmVkIGZvciB0 aGlzISAqLworCSAgICAgIE5PU1VCRElSUzoKKwkJZGVidWcoRjExMSwiY21pZmkgdW5pcXVlIixm aWxidWYsY2hpbGRyZW4pOworCQlpZiAoaXNkaXIoZmlsYnVmKSAmJiBjaGlsZHJlbiA+IDApIHsK KwkJICAgIGludCBsZW47CisJCSAgICBsZW4gPSBzdHJsZW4oZmlsYnVmKTsKKwkJICAgIGlmIChs ZW4gPiAwICYmIGxlbiA8IEFUTUJMIC0gMSkgeworCQkJaWYgKGZpbGJ1ZltsZW4tMV0gIT0gZGly c2VwKSB7CisJCQkgICAgZmlsYnVmW2xlbl0gPSBkaXJzZXA7CisJCQkgICAgZmlsYnVmW2xlbisx XSA9IE5VTDsKKwkJCX0KKwkJICAgIH0KKwkJICAgIHNwID0gZmlsYnVmICsgY2M7CisJCSAgICBi bGVlcChCUF9XQVJOKTsKKwkJICAgIHByaW50ZigiJXMiLHNwKTsKKwkJICAgIGNjKys7CisJCSAg ICB3aGlsZSAoKCpicCsrID0gKnNwKyspKSA7CisJCSAgICBicC0tOworCQkgICAgaWYgKHNldGF0 bShmaWxidWYsMCkgPCAwKSB7CisJCQlwcmludGYoIj9EaXJlY3RvcnkgbmFtZSB0b28gbG9uZ1xu Iik7CisJCQlpZiAobnApIGZyZWUobnApOworCQkJcmV0dXJuKC05KTsKKwkJICAgIH0KKwkJICAg IGRlYnVnKEYxMTEsImNtaWZpIGRpcmVjdG9yeSBhdG1idWYiLGF0bWJ1ZixjYyk7CisJCSAgICAq eHAgPSBhdG1idWY7CisJCX0gZWxzZSB7CQkvKiBOb3QgYSBkaXJlY3Rvcnkgb3IgZGlyZmxnICov CisjZW5kaWYgLyogQ0tfVE1QRElSICovCisjZW5kaWYgLyogVk1TICovCisjaWZuZGVmIFZNUwkJ CQkvKiBWTVMgZGlyIG5hbWVzIGFyZSBzcGVjaWFsICovCisjaWZuZGVmIGRhdGFnZW5lcmFsCQkJ LyogVlMgZGlybmFtZXMgbXVzdCBub3QgZW5kIGluICI6IiAqLworCQkgICAgaWYgKGRpcmZsZykg eworCQkJaW50IGxlbjsKKwkJCWxlbiA9IHN0cmxlbihmaWxidWYpOworCQkJaWYgKGxlbiA+IDAg JiYgbGVuIDwgQVRNQkwgLSAxKSB7CisJCQkgICAgaWYgKGZpbGJ1ZltsZW4tMV0gIT0gZGlyc2Vw KSB7CisJCQkJZmlsYnVmW2xlbl0gPSBkaXJzZXA7CisJCQkJZmlsYnVmW2xlbisxXSA9IE5VTDsK KwkJCSAgICB9CisJCQl9CisJCSAgICB9CisjZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KKyNlbmRp ZiAvKiBWTVMgKi8KKwkJICAgIHNwID0gZmlsYnVmICsgY2M7CS8qIFBvaW50IHBhc3Qgd2hhdCB1 c2VyIHR5cGVkLiAqLworCQkgICAgeworCQkJaW50IHg7CisJCQlpZiAocWZsYWcpIHsKKwkJCSAg ICB4ID0gKHFmbGFnID09ICd9Jyk7CisJCQl9IGVsc2UgeworCQkJICAgIHggPSAhZGJscXVvOwor CQkJfQorCQkJaWYgKGZpbGJ1ZlswXSAhPSAnIicgJiYgZmlsYnVmWzBdICE9ICd7JykKKwkJCSAg ZHF1b3RlKGZpbGJ1ZixBVE1CTCx4KTsKKwkJICAgIH0KKwkJICAgIGlmIChxZmxhZyB8fCBzdHJu Y21wKGZpbGJ1ZixicC1jYyxjYykpIHsgLyogUmVwYWludD8gKi8KKwkJCWludCB4OworCQkJeCA9 IGNjOworCQkJaWYgKHFmbGFnKSB4Kys7CisJCQlmb3IgKGkgPSAwOyBpIDwgeDsgaSsrKSB7CisJ CQkgICAgY21kY2hhcmRlbCgpOyAvKiBCYWNrIHVwIG92ZXIgb2xkIHBhcnRpYWwgc3BlYyAqLwor CQkJICAgIGJwLS07CisJCQl9CisJCQlzcCA9IGZpbGJ1ZjsJLyogUG9pbnQgdG8gbmV3IHdvcmQg c3RhcnQgKi8KKwkJCWRlYnVnKEYxMTEsImNtaWZpIGFmdGVyIGVyYXNlIHNwPSIsc3AsY2MpOwor CQkgICAgfQorCQkgICAgcHJpbnRmKCIlcyAiLHNwKTsJLyogUHJpbnQgdGhlIGNvbXBsZXRlZCBu YW1lLiAqLworI2lmZGVmIEdFTURPUworCQkgICAgZmZsdXNoKHN0ZG91dCk7CisjZW5kaWYgLyog R0VNRE9TICovCisJCSAgICBhZGRidWYoc3ApOwkJLyogQWRkIHRoZSBjaGFyYWN0ZXJzIHRvIGNt ZGJ1Zi4gKi8KKwkJICAgIGlmIChzZXRhdG0oZmlsYnVmLDApIDwgMCkgeyAvKiBBbmQgdG8gYXRt YnVmLiAqLworCQkJcHJpbnRmKCI/Q29tcGxldGVkIG5hbWUgdG9vIGxvbmdcbiIpOworCQkJaWYg KG5wKSBmcmVlKG5wKTsKKwkJCXJldHVybigtOSk7CisJCSAgICB9CisJCSAgICBpbndvcmQgPSBj bWZsZ3MgPSAwOworCQkgICAgKnhwID0gYnJzdHJpcChhdG1idWYpOyAvKiBSZXR1cm4gcG9pbnRl ciB0byBhdG1idWYuICovCisJCSAgICBpZiAoZGlyZmxnICYmICFpc2RpcigqeHApKSB7CisJCQlw cmludGYoIj9Ob3QgYSBkaXJlY3RvcnkgLSAlc1xuIiwgZmlsYnVmKTsKKwkJCWlmIChucCkgZnJl ZShucCk7CisJCQlyZXR1cm4oLTkpOworCQkgICAgfQorCQkgICAgaWYgKG5wKSBmcmVlKG5wKTsK KyNpZm5kZWYgTk9MQVNURklMRQorCQkgICAgbWFrZXN0cigmbGFzdGZpbGUsdG1wbGFzdGZpbGUp OworI2VuZGlmCS8qIE5PTEFTVEZJTEUgKi8KKwkJICAgIHJldHVybigwKTsKKyNpZm5kZWYgVk1T CisjaWZkZWYgQ0tfVE1QRElSCisJCX0KKyNlbmRpZiAvKiBDS19UTVBESVIgKi8KKyNlbmRpZiAv KiBWTVMgKi8KKwkgICAgfQorCSAgICBicmVhazsKKworCSAgY2FzZSAzOgkJCS8qIFF1ZXN0aW9u IG1hcmsgLSBmaWxlIG1lbnUgd2FudGVkICovCisJICAgIGlmICgqeGhscCA9PSBOVUwpCisJICAg ICAgcHJpbnRmKGRpcmZsZyA/ICIgRGlyZWN0b3J5IG5hbWUiIDogIiBJbnB1dCBmaWxlIHNwZWNp ZmljYXRpb24iKTsKKwkgICAgZWxzZQorCSAgICAgIHByaW50ZigiICVzIix4aGxwKTsKKyNpZmRl ZiBHRU1ET1MKKwkgICAgZmZsdXNoKHN0ZG91dCk7CisjZW5kaWYgLyogR0VNRE9TICovCisJICAg IC8qIElmIHVzZXIgdHlwZWQgYW4gb3BlbmluZyBxdW90ZSBvciBicmFjZSwganVzdCBza2lwIHBh c3QgaXQgKi8KKworCSAgICBpZiAoKip4cCA9PSAnIicgfHwgKip4cCA9PSAneycpIHsKKwkJKnhw ID0gKnhwICsgMTsKKwkJeGMtLTsKKwkJY2MtLTsKKwkgICAgfQorI2lmbmRlZiBOT1NQTAorCSAg ICBpZiAoZikgewkJCS8qIElmIGEgY29udmVyc2lvbiBmdW5jdGlvbiBpcyBnaXZlbiAqLworI2lm ZGVmIERPQ0hLVkFSCisJCWNoYXIgKnMgPSAqeHA7CQkvKiBTZWUgaWYgdGhlcmUgYXJlIGFueSB2 YXJpYWJsZXMgaW4gKi8KKwkJd2hpbGUgKCpzKSB7CQkvKiB0aGUgc3RyaW5nIGFuZCBpZiBzbywg ZXhwYW5kIHRoZW0gKi8KKwkJICAgIGlmIChjaGt2YXIocykpIHsKKyNlbmRpZiAvKiBET0NIS1ZB UiAqLworCQkJenEgPSBhdHhidWY7CisJCQlhdHhuID0gQ01EQkw7CisJCQlpZiAoKHggPSAoKmYp KCp4cCwmenEsJmF0eG4pKSA8IDApIHsKKwkJCSAgICBpZiAobnApIGZyZWUobnApOworCQkJICAg IHJldHVybigtMik7CisJCQl9CisjaWZkZWYgRE9DSEtWQVIKKwkJICAgIC8qIHJlZHVjZSBjYyBi eSBudW1iZXIgb2YgXFwgY29uc3VtZWQgYnkgY29udmVyc2lvbiAqLworCQkgICAgLyogZnVuY3Rp b24gKG5lZWRlZCBmb3IgT1MvMiwgd2hlcmUgXCBpcyBwYXRoIHNlcGFyYXRvcikgKi8KKwkJCWNj IC09IChzdHJsZW4oKnhwKSAtIHN0cmxlbihhdHhidWYpKTsKKyNlbmRpZiAvKiBET0NIS1ZBUiAq LworCQkJKnhwID0gYXR4YnVmOworI2lmZGVmIERPQ0hLVkFSCisJCQlicmVhazsKKwkJICAgIH0K KwkJICAgIHMrKzsKKwkJfQorI2VuZGlmIC8qIERPQ0hLVkFSICovCisJICAgIH0KKyNlbmRpZiAv KiBOT1NQTCAqLworCSAgICBkZWJ1ZyhGMTExLCJjbWlmaSA/ICp4cCwgY2MiLCp4cCxjYyk7CisJ ICAgIHNwID0gKnhwICsgY2M7CQkvKiBJbnNlcnQgIioiIGF0IGVuZCAqLworI2lmZGVmIGRhdGFn ZW5lcmFsCisJICAgICpzcCsrID0gJysnOwkJLyogSW5zZXJ0ICssIHRoZSBERyB3aWxkIGNhcmQg Ki8KKyNlbHNlCisJICAgICpzcCsrID0gJyonOworI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCisJ ICAgICpzcC0tID0gJ1wwJzsKKyNpZmRlZiBHRU1ET1MKKwkgICAgaWYgKCEgc3RyY2hyKCp4cCwg Jy4nKSkJLyogYWJkZS5lIC0+IGFiY2RlLmUqICovCisJICAgICAgc3RyY2F0KCp4cCwgIi4qIik7 CS8qIGFiYyAtPiBhYmMqLiogKi8KKyNlbmRpZiAvKiBHRU1ET1MgKi8KKwkgICAgZGVidWcoRjEx MCwiY21pZmkgPyB3aWxkIiwqeHAsMCk7CisKKwkgICAgbnp4b3B0cyB8PSBkaXJmbGcgPyBaWF9E SVJPTkxZIDogKGQgPyAwIDogWlhfRklMT05MWSk7CisKKwkgICAgZGVidWcoRjEwMSwiY21pZmkg bWF0Y2hkb3QiLCIiLG1hdGNoZG90KTsKKwkgICAgaWYgKG1hdGNoZG90KSAgbnp4b3B0cyB8PSBa WF9NQVRDSERPVDsKKwkgICAgaWYgKHJlY3Vyc2l2ZSkgbnp4b3B0cyB8PSBaWF9SRUNVUlNFOwor CSAgICB5ID0gbnp4cGFuZCgqeHAsbnp4b3B0cyk7CisJICAgIG5maWxlcyA9IHk7CisJICAgICpz cCA9ICdcMCc7CisJICAgIGlmICh5ID09IDApIHsKKwkJaWYgKG5vbXNnKSB7CisJCSAgICBwcmlu dGYoIjogJXNcbiIsYXRtYnVmKTsKKwkJICAgIHByaW50ZigiJXMlcyIsY21wcm9tLGNtZGJ1Zik7 CisJCSAgICBmZmx1c2goc3Rkb3V0KTsKKwkJICAgIGlmIChucCkgZnJlZShucCk7CisJCSAgICBy ZXR1cm4oLTEpOworCQl9IGVsc2UgeworI2lmZGVmIENLUk9PVAorCQkgICAgaWYgKGNrcm9vdGVy cikKKwkJICAgICAgcHJpbnRmKCI/T2ZmIExpbWl0czogJXNcbiIsYXRtYnVmKTsKKwkJICAgIGVs c2UKKyNlbmRpZiAvKiBDS1JPT1QgKi8KKwkJICAgICAgcHJpbnRmKCI/Tm8gJXMgbWF0Y2ggLSAl c1xuIiwKKwkJCSAgICAgZGlyZmxnID8gImRpcmVjdG9yaWVzIiA6ICJmaWxlcyIsIGF0bWJ1Zik7 CisJCSAgICBpZiAobnApIGZyZWUobnApOworCQkgICAgcmV0dXJuKC05KTsKKwkJfQorCSAgICB9 IGVsc2UgaWYgKHkgPCAwKSB7CisjaWZkZWYgQ0tST09UCisJCWlmIChja3Jvb3RlcnIpCisJCSAg cHJpbnRmKCI/T2ZmIExpbWl0czogJXNcbiIsYXRtYnVmKTsKKwkJZWxzZQorI2VuZGlmIC8qIENL Uk9PVCAqLworCQkgIHByaW50ZigiP1RvbyBtYW55ICVzIG1hdGNoIC0gJXNcbiIsCisJCQkgZGly ZmxnID8gImRpcmVjdG9yaWVzIiA6ICJmaWxlcyIsIGF0bWJ1Zik7CisJCWlmIChucCkgZnJlZShu cCk7CisJCXJldHVybigtOSk7CisJICAgIH0gZWxzZSB7CisJCXByaW50ZigiLCBvbmUgb2YgdGhl IGZvbGxvd2luZzpcbiIpOworCQlpZiAoZmlsaGVscCgoaW50KXksIiIsIiIsMSxkaXJmbGcpIDwg MCkgeworCQkgICAgaWYgKG5wKSBmcmVlKG5wKTsKKwkJICAgIHJldHVybigtOSk7CisJCX0KKwkg ICAgfQorCSAgICBwcmludGYoIiVzJXMiLGNtcHJvbSxjbWRidWYpOworCSAgICBmZmx1c2goc3Rk b3V0KTsKKwkgICAgYnJlYWs7CisjZW5kaWYgLyogTUFDICovCisJfQorI2lmZGVmIEJTX0RJUlNF UAorICAgICAgICBkaXJuYW1mbGcgPSAxOworICAgICAgICB4ID0gZ3R3b3JkKDApOyAgICAgICAg ICAgICAgICAgIC8qIE5vLCBnZXQgYSB3b3JkICovCisJZGlybmFtZmxnID0gMDsKKyNlbHNlCisg ICAgICAgIHggPSBndHdvcmQoMCk7ICAgICAgICAgICAgICAgICAgLyogTm8sIGdldCBhIHdvcmQg Ki8KKyNlbmRpZiAvKiBCU19ESVJTRVAgKi8KKwkqeHAgPSBhdG1idWY7CisgICAgfQorfQorCisv KiAgQyBNIEYgTCBEICAtLSAgUGFyc2UgYW4gYXJiaXRyYXJ5IGZpZWxkICAqLworLyoKKyAgUmV0 dXJuczoKKyAgICAtMyBpZiBubyBpbnB1dCBwcmVzZW50IHdoZW4gcmVxdWlyZWQsCisgICAgLTIg aWYgZmllbGQgdG9vIGJpZyBmb3IgYnVmZmVyLAorICAgIC0xIGlmIHJlcGFyc2UgbmVlZGVkLAor ICAgICAwIG90aGVyd2lzZSwgeHAgcG9pbnRpbmcgdG8gc3RyaW5nIHJlc3VsdC4KKworICBOT1RF OiBHbG9iYWwgZmxhZyBrZWVwYWxsY2hhcnMgc2F5cyB3aGV0aGVyIHRoaXMgcm91dGluZSBzaG91 bGQgYnJlYWsgb24gQ1IKKyAgb3IgTEY6IG5lZWRlZCBmb3IgTUlOUFVUIHRhcmdldHMgYW5kIERF Q0xBUkUgaW5pdGlhbGl6ZXJzLCB3aGVyZSB3ZSB3YW50IHRvCisgIGtlZXAgY29udHJvbCBjaGFy YWN0ZXJzIGlmIHRoZSB1c2VyIHNwZWNpZmllcyB0aGVtIChNYXJjaCAyMDAzKS4gIEl0IG1pZ2h0 CisgIGhhdmUgYmVlbiBiZXR0ZXIgdG8gY2hhbmdlIHRoZSBjYWxsaW5nIHNlcXVlbmNlIGJ1dCB0 aGF0IHdhcyBub3QgcHJhY3RpY2FsLgorKi8KK2ludAorY21mbGQoeGhscCx4ZGVmLHhwLGYpIGNo YXIgKnhobHAsICp4ZGVmLCAqKnhwOyB4eF9zdHJwIGY7IHsKKyAgICBpbnQgeCwgeGM7CisgICAg Y2hhciAqenE7CisKKyAgICBpbndvcmQgPSAwOwkJCQkvKiBJbml0aWFsaXplIGNvdW50cyAmIHBv aW50ZXJzICovCisgICAgY2MgPSAwOworICAgIHhjID0gMDsKKyAgICAqeHAgPSAiIjsKKworICAg IGRlYnVnKEYxMTAsImNtZmxkIHhkZWYgMSIseGRlZiwwKTsKKworICAgIGlmICgheGhscCkgeGhs cCA9ICIiOworICAgIGlmICgheGRlZikgeGRlZiA9ICIiOworICAgIGNrc3RybmNweShjbWRlZmF1 bHQseGRlZixDTURFRkFVTFQpOyAvKiBDb3B5IGRlZmF1bHQgKi8KKyAgICB4ZGVmID0gY21kZWZh dWx0OworCisgICAgZGVidWcoRjExMSwiY21mbGQgeGRlZiAyIix4ZGVmLGNtZmxncyk7CisgICAg ZGVidWcoRjExMSwiY21mbGQgYXRtYnVmIDEiLGF0bWJ1Zix4Yyk7CisKKyAgICBpZiAoKHggPSBj bWZsZ3MpICE9IDEpIHsgICAgICAgICAgICAvKiBBbHJlYWR5IGNvbmZpcm1lZD8gKi8KKyAgICAg ICAgeCA9IGd0d29yZCgwKTsgICAgICAgICAgICAgICAgICAvKiBObywgZ2V0IGEgd29yZCAqLwor ICAgIH0gZWxzZSB7CisJaWYgKHNldGF0bSh4ZGVmLDApIDwgMCkgewkvKiBJZiBzbywgdXNlIGRl ZmF1bHQsIGlmIGFueS4gKi8KKwkgICAgcHJpbnRmKCI/RGVmYXVsdCB0b28gbG9uZ1xuIik7CisJ ICAgIHJldHVybigtOSk7CisJfQorICAgIH0KKyAgICAqeHAgPSBhdG1idWY7ICAgICAgICAgICAg ICAgICAgICAgICAvKiBQb2ludCB0byByZXN1bHQuICovCisgICAgZGVidWcoRjExMSwiY21mbGQg YXRtYnVmIDIiLGF0bWJ1ZixjbWZsZ3MpOworCisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgeGMg Kz0gY2M7ICAgICAgICAgICAgICAgICAgICAgICAvKiBDb3VudCB0aGUgY2hhcmFjdGVycy4gKi8K KyAgICAgICAgZGVidWcoRjExMSwiY21mbGQgZ3R3b3JkIixhdG1idWYseGMpOworICAgICAgICBk ZWJ1ZyhGMTAxLCJjbWZsZCB4IiwiIix4KTsKKyAgICAgICAgc3dpdGNoICh4KSB7CisJICBjYXNl IC05OgorCSAgICBwcmludGYoIkNvbW1hbmQgb3IgZmllbGQgdG9vIGxvbmdcbiIpOworCSAgY2Fz ZSAtNDoJCQkvKiBFT0YgKi8KKwkgIGNhc2UgLTM6CQkJLyogRW1wdHkuICovCisJICBjYXNlIC0y OgkJCS8qIE91dCBvZiBzcGFjZS4gKi8KKwkgIGNhc2UgLTE6CQkJLyogUmVwYXJzZSBuZWVkZWQg Ki8KKwkgICAgcmV0dXJuKHgpOworCSAgY2FzZSAxOgkJCS8qIENSICovCisJICBjYXNlIDA6CQkJ LyogU1AgKi8KKwkgICAgZGVidWcoRjExMSwiY21mbGQgMSIsYXRtYnVmLHhjKTsKKwkgICAgaWYg KHhjID09IDApIHsJCS8qIElmIG5vIGlucHV0LCByZXR1cm4gZGVmYXVsdC4gKi8KKwkJaWYgKHNl dGF0bSh4ZGVmLDApIDwgMCkgeworCQkgICAgcHJpbnRmKCI/RGVmYXVsdCB0b28gbG9uZ1xuIik7 CisJCSAgICByZXR1cm4oLTkpOworCQl9CisJICAgIH0KKwkgICAgKnhwID0gYXRtYnVmOwkJLyog UG9pbnQgdG8gd2hhdCB3ZSBnb3QuICovCisJICAgIGRlYnVnKEYxMTEsImNtZmxkIDIiLGF0bWJ1 ZiwoKGYpID8gMSA6IDApKTsKKwkgICAgaWYgKGYpIHsJCQkvKiBJZiBhIGNvbnZlcnNpb24gZnVu Y3Rpb24gaXMgZ2l2ZW4gKi8KKwkJenEgPSBhdHhidWY7CQkvKiBlbXBsb3kgaXQgbm93LiAqLwor CQlhdHhuID0gQ01EQkw7CisJCWlmICgoKmYpKCp4cCwmenEsJmF0eG4pIDwgMCkKKwkJICByZXR1 cm4oLTIpOworCQlkZWJ1ZyhGMTExLCJjbWZsZCAzIixhdHhidWYseGMpOworCQkvKiBSZXBsYWNl IGJ5IG5ldyB2YWx1ZSAtLSBmb3IgTUlOUFVUIG9ubHkga2VlcCBhbGwgY2hhcnMgKi8KKwkJaWYg KHNldGF0bShhdHhidWYsa2VlcGFsbGNoYXJzID8gMzoxKSA8IDApIHsgLyogMTYgTWFyIDIwMDMg Ki8KKwkJICAgIHByaW50ZigiVmFsdWUgdG9vIGxvbmdcbiIpOworCQkgICAgcmV0dXJuKC05KTsK KwkJfQorCQkqeHAgPSBhdG1idWY7CisJICAgIH0KKwkgICAgZGVidWcoRjExMSwiY21mbGQgNCIs YXRtYnVmLHhjKTsKKwkgICAgaWYgKCoqeHAgPT0gTlVMKSB7CQkvKiBJZiB2YXJpYWJsZSBldmFs dWF0ZXMgdG8gbnVsbCAqLworCQlpZiAoc2V0YXRtKHhkZWYsMCkgPCAwKSB7CisJCSAgICBwcmlu dGYoIj9EZWZhdWx0IHRvbyBsb25nXG4iKTsKKwkJICAgIHJldHVybigtOSk7CisJCX0KKwkJaWYg KCoqeHAgPT0gTlVMKSB4ID0gLTM7IC8qIElmIHN0aWxsIGVtcHR5LCByZXR1cm4gLTMuICovCisJ ICAgIH0KKwkgICAgZGVidWcoRjExMSwiY21mbGQgcmV0dXJucyIsKnhwLHgpOworCSAgICByZXR1 cm4oeCk7CisJICBjYXNlIDI6CQkJLyogRVNDICovCisJICAgIGlmICh4YyA9PSAwICYmICp4ZGVm KSB7CisJCXByaW50ZigiJXMgIix4ZGVmKTsgLyogSWYgYXQgYmVnaW5uaW5nIG9mIGZpZWxkLCAq LworI2lmZGVmIEdFTURPUworCQlmZmx1c2goc3Rkb3V0KTsKKyNlbmRpZiAvKiBHRU1ET1MgKi8K KwkJYWRkYnVmKHhkZWYpOwkJLyogU3VwcGx5IGRlZmF1bHQuICovCisJCWlud29yZCA9IGNtZmxn cyA9IDA7CisJCWlmIChzZXRhdG0oeGRlZiwwKSA8IDApIHsKKwkJICAgIHByaW50ZigiP0RlZmF1 bHQgdG9vIGxvbmdcbiIpOworCQkgICAgcmV0dXJuKC05KTsKKwkJfSBlbHNlCQkJLyogUmV0dXJu IGFzIGlmIHdob2xlIGZpZWxkICovCisJCSAgcmV0dXJuKDApOwkJLyogdHlwZWQsIGZvbGxvd2Vk IGJ5IHNwYWNlLiAqLworCSAgICB9IGVsc2UgeworCQlibGVlcChCUF9XQVJOKTsKKwkgICAgfQor CSAgICBicmVhazsKKwkgIGNhc2UgMzoJCQkvKiBRdWVzdGlvbiBtYXJrICovCisJICAgIGRlYnVn KEYxMTAsImNtZmxkIFFVRVNUSU9OTUFSSyIsY21kYnVmLDApOworCSAgICBpZiAoKnhobHAgPT0g TlVMKQorCSAgICAgIHByaW50ZigiIFBsZWFzZSBjb21wbGV0ZSB0aGlzIGZpZWxkIik7CisJICAg IGVsc2UKKwkgICAgICBwcmludGYoIiAlcyIseGhscCk7CisJICAgIHByaW50ZigiXG4lcyVzIixj bXByb20sY21kYnVmKTsKKwkgICAgZmZsdXNoKHN0ZG91dCk7CisJICAgIGJyZWFrOworICAgICAg ICB9CisJZGVidWcoRjExMSwiY21mbGQgZ3R3b3JkIEEgeCIsY21kYnVmLHgpOworCXggPSBndHdv cmQoMCk7CisJZGVidWcoRjExMSwiY21mbGQgZ3R3b3JkIEIgeCIsY21kYnVmLHgpOworICAgIH0K K30KKworCisvKiAgQyBNIFQgWCBUICAtLSAgR2V0IGEgdGV4dCBzdHJpbmcsIGluY2x1ZGluZyBj b25maXJtYXRpb24gICovCisKKy8qCisgIFByaW50IGhlbHAgbWVzc2FnZSAneGhscCcgaWYgPyB0 eXBlZCwgc3VwcGx5IGRlZmF1bHQgJ3hkZWYnIGlmIG51bGwKKyAgc3RyaW5nIHR5cGVkLiAgUmV0 dXJuczoKKworICAgLTEgaWYgcmVwYXJzZSBuZWVkZWQgb3IgYnVmZmVyIG92ZXJmbG93cy4KKyAg ICAxIG90aGVyd2lzZS4KKworICB3aXRoIGNtZmxncyBzZXQgdG8gcmV0dXJuIGNvZGUsIGFuZCB4 cCBwb2ludGluZyB0byByZXN1bHQgc3RyaW5nLgorKi8KK2ludAorY210eHQoeGhscCx4ZGVmLHhw LGYpIGNoYXIgKnhobHA7IGNoYXIgKnhkZWY7IGNoYXIgKip4cDsgeHhfc3RycCBmOyB7CisKKyAg ICBpbnQgeCwgaTsKKyAgICBjaGFyICp4eCwgKnpxOworICAgIHN0YXRpYyBpbnQgeGM7CisKKyAg ICBpZiAoIXhobHApIHhobHAgPSAiIjsKKyAgICBpZiAoIXhkZWYpIHhkZWYgPSAiIjsKKworICAg IGNtZmxkZmxncyA9IDA7CisKKyAgICBjbWRlZmF1bHRbMF0gPSBOVUw7CisgICAgaWYgKCp4ZGVm KQorICAgICAgY2tzdHJuY3B5KGNtZGVmYXVsdCx4ZGVmLENNREVGQVVMVCk7IC8qIENvcHkgZGVm YXVsdCAqLworICAgIHhkZWYgPSBjbWRlZmF1bHQ7CisKKyAgICBkZWJ1ZyhGMTAxLCJjbXR4dCBj bWZsZ3MiLCIiLGNtZmxncyk7CisgICAgaW53b3JkID0gMDsJCQkJLyogU3RhcnQgYXRtYnVmIGNv dW50ZXIgb2ZmIGF0IDAgKi8KKyAgICBjYyA9IDA7CisgICAgaWYgKGNtZmxncyA9PSAtMSkgeyAg ICAgICAgICAgICAgICAgLyogSWYgcmVwYXJzaW5nLCAqLworCSp4cCA9IHBwOworICAgICAgICB4 YyA9IChpbnQpc3RybGVuKCp4cCk7CQkvKiBnZXQgYmFjayB0aGUgdG90YWwgdGV4dCBsZW5ndGgs ICovCisJYnAgPSAqeHA7CQkJLyogYW5kIGJhY2sgdXAgdGhlIHBvaW50ZXJzLiAqLworCW5wID0g KnhwOworCXBwID0gKnhwOworICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIG90aGVyd2lzZSwgKi8KKwkvKiBkZWJ1ZyhGMTAwLCJjbXR4dDogZnJlc2ggc3RhcnQiLCIi LDApOyAqLworICAgICAgICAqeHAgPSAiIjsgICAgICAgICAgICAgICAgICAgICAgIC8qIHN0YXJ0 IGZyZXNoLiAqLworICAgICAgICB4YyA9IDA7CisgICAgfQorICAgICphdG1idWYgPSBOVUw7ICAg ICAgICAgICAgICAgICAgICAgIC8qIEFuZCBlbXB0eSB0aGUgYXRvbSBidWZmZXIuICovCisgICAg cnRpbWVyKCk7CQkJCS8qIFJlc2V0IHRpbWVyICovCisgICAgaWYgKCh4ID0gY21mbGdzKSAhPSAx KSB7CisJaW50IGRvbmUgPSAwOworCXdoaWxlICghZG9uZSkgeworCSAgICB4ID0gZ3R3b3JkKDAp OwkJLyogR2V0IGZpcnN0IHdvcmQuICovCisJICAgICp4cCA9IHBwOwkJCS8qIFNhdmUgcG9pbnRl ciB0byBpdC4gKi8KKwkgICAgLyogZGVidWcoRjExMSwiY210eHQ6IiwqeHAsY2MpOyAqLworCSAg ICBpZiAoeCA9PSAtMTApIHsKKwkJaWYgKGd0aW1lcigpID4gdGltZWxpbWl0KSB7CisJCSAgICAv KiBpZiAoIXF1aWV0KSBwcmludGYoIj9UaW1lZCBvdXRcbiIpOyAqLworCQkgICAgcmV0dXJuKHgp OworCQl9CisJICAgIH0gZWxzZQorCSAgICAgIGRvbmUgPSAxOworCX0KKyAgICB9CisgICAgd2hp bGUgKDEpIHsJCQkJLyogTG9vcCBmb3IgZWFjaCB3b3JkIGluIHRleHQuICovCisgICAgICAgIHhj ICs9IGNjOyAgICAgICAgICAgICAgICAgICAgICAgLyogQ2hhciBjb3VudCBmb3IgYWxsIHdvcmRz LiAqLworICAgICAgICAvKiBkZWJ1ZyhGMTExLCJjbXR4dCBndHdvcmQiLGF0bWJ1Zix4Yyk7ICov CisgICAgICAgIC8qIGRlYnVnKEYxMDEsImNtdHh0IHgiLCIiLHgpOyAqLworICAgICAgICBzd2l0 Y2ggKHgpIHsKKwkgIGNhc2UgLTEwOgorCSAgICBpZiAoZ3RpbWVyKCkgPiB0aW1lbGltaXQpIHsK KyNpZmRlZiBJS1NECisgICAgICAgICAgICAgICAgZXh0ZXJuIGludCBpbnNlcnZlcjsKKyAgICAg ICAgICAgICAgICBpZiAoaW5zZXJ2ZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJc clxuSUtTRCBJRExFIFRJTUVPVVQ6ICVkIHNlY1xyXG4iLCB0aW1lbGltaXQpOworICAgICAgICAg ICAgICAgICAgICBkb2V4aXQoR09PRF9FWElULDApOworICAgICAgICAgICAgICAgIH0KKyNlbmRp ZiAvKiBJS1NEICovCisJCS8qIGlmICghcXVpZXQpIHByaW50ZigiP1RpbWVkIG91dFxuIik7ICov CisJCXJldHVybigtMTApOworCSAgICB9IGVsc2UgeworCQl4ID0gZ3R3b3JkKDApOworCQljb250 aW51ZTsKKwkgICAgfQorCSAgY2FzZSAtOToJCQkvKiBCdWZmZXIgb3ZlcmZsb3cgKi8KKwkgICAg cHJpbnRmKCJDb21tYW5kIG9yIGZpZWxkIHRvbyBsb25nXG4iKTsKKwkgIGNhc2UgLTQ6CQkJLyog RU9GICovCisjaWZkZWYgTUFDCisJICBjYXNlIC0zOgkJCS8qIFF1aXQvVGltZW91dCAqLworI2Vu ZGlmIC8qIE1BQyAqLworCSAgY2FzZSAtMjoJCQkvKiBPdmVyZmxvdyAqLworCSAgY2FzZSAtMToJ CQkvKiBEZWxldGlvbiAqLworCSAgICByZXR1cm4oeCk7CisJICBjYXNlIDA6CQkJLyogU3BhY2Ug Ki8KKwkgICAgeGMrKzsJCQkvKiBKdXN0IGNvdW50IGl0ICovCisJICAgIGJyZWFrOworCSAgY2Fz ZSAxOgkJCS8qIENSIG9yIExGICovCisJICAgIGlmICh4YyA9PSAwKSAqeHAgPSB4ZGVmOworCSAg ICBpZiAoZikgewkJCS8qIElmIGEgY29udmVyc2lvbiBmdW5jdGlvbiBpcyBnaXZlbiAqLworCQlj aGFyICogc3ggPSBhdHhidWY7CisJCXpxID0gYXR4YnVmOwkJLyogUG9pbnQgdG8gdGhlIGV4cGFu c2lvbiBidWZmZXIgKi8KKwkJYXR4biA9IENNREJMOwkJLyogc3BlY2lmeSBpdHMgbGVuZ3RoICov CisJCS8qIGRlYnVnKEYxMTEsImNtdHh0IGNhbGxpbmcgKCpmKSIsKnhwLGF0eGJ1Zik7ICovCisJ CWlmICgoeCA9ICgqZikoKnhwLCZ6cSwmYXR4bikpIDwgMCkgcmV0dXJuKC0yKTsKKwkJc3ggPSBh dHhidWY7CisjaWZuZGVmIENPTU1FTlQKKwkJY2MgPSAwOworCQl3aGlsZSAoKnN4KyspIGNjKys7 CS8qIChmYXN0ZXIgdGhhbiBjYWxsaW5nIHN0cmxlbikgKi8KKyNlbHNlCisJCWNjID0gKGludClz dHJsZW4oYXR4YnVmKTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisJCS8qIFNob3VsZCBiZSBlcXVh bCB0byAoQ01EQkwgLSBhdHhuKSBidXQgaXNuJ3QgYWx3YXlzLiAqLworCQkvKiBXaHkgbm90PyAq LworCQlpZiAoY2MgPCAxKSB7CQkvKiBOb3RoaW5nIGluIGV4cGFuc2lvbiBidWZmZXI/ICovCisJ CSAgICAqeHAgPSB4ZGVmOwkJLyogUG9pbnQgdG8gZGVmYXVsdCBzdHJpbmcgaW5zdGVhZC4gKi8K KyNpZm5kZWYgQ09NTUVOVAorCQkgICAgc3ggPSB4ZGVmOworCQkgICAgd2hpbGUgKCpzeCsrKSBj YysrOwkvKiAoZmFzdGVyIHRoYW4gY2FsbGluZyBzdHJsZW4pICovCisjZWxzZQorCQkgICAgY2Mg PSBzdHJsZW4oeGRlZik7CisjZW5kaWYgLyogQ09NTUVOVCAqLworCQl9IGVsc2UgewkJLyogRXhw YW5zaW9uIGZ1bmN0aW9uIGdvdCBzb21ldGhpbmcgKi8KKwkJICAgICp4cCA9IGF0eGJ1ZjsJLyog cmV0dXJuIHBvaW50ZXIgdG8gaXQuICovCisJCX0KKwkJZGVidWcoRjExMSwiY210eHQgKCpmKSIs KnhwLGNjKTsKKwkgICAgfSBlbHNlIHsJCQkvKiBObyBleHBhbnNpb24gZnVuY3Rpb24gKi8KKyNp Zm5kZWYgQ09NTUVOVAorCQkvKiBBdm9pZCBhIHN0cmxlbigpIGNhbGwgKi8KKwkJeHggPSAqeHA7 CisJCWNjID0gMDsKKwkJd2hpbGUgKCp4eCsrKSBjYysrOworI2Vsc2UKKwkJLyogTk8hICB4YyBp cyBhcHBhcmVudGx5IG5vdCBhbHdheXMgc2V0IGFwcHJvcHJpYXRlbHkgKi8KKwkJY2MgPSB4YzsK KyNlbmRpZiAvKiBDT01NRU5UICovCisJICAgIH0KKwkgICAgeHggPSAqeHA7CisjaWZkZWYgQ09N TUVOVAorCSAgICAvKiBzdHJsZW4oKSBubyBsb25nZXIgbmVlZGVkICovCisJICAgIGZvciAoaSA9 IChpbnQpc3RybGVuKHh4KSAtIDE7IGkgPiAwOyBpLS0pCisjZWxzZQorCSAgICBmb3IgKGkgPSBj YyAtIDE7IGkgPiAwOyBpLS0pCisjZW5kaWYgLyogQ09NTUVOVCAqLworCSAgICAgIGlmICh4eFtp XSAhPSBTUCkJCS8qIFRyaW0gdHJhaWxpbmcgYmxhbmtzICovCisJCWJyZWFrOworCSAgICAgIGVs c2UKKwkJeHhbaV0gPSBOVUw7CisJICAgIHJldHVybih4KTsKKwkgIGNhc2UgMjoJCQkvKiBFU0Mg Ki8KKwkgICAgaWYgKHhjID09IDApIHsJCS8qIE5vdGhpbmcgdHlwZWQgeWV0ICovCisJCWlmICgq eGRlZikgewkJLyogSGF2ZSBhIGRlZmF1bHQgZm9yIHRoaXMgZmllbGQ/ICovCisJCSAgICBwcmlu dGYoIiVzICIseGRlZik7CS8qIFllcywgc3VwcGx5IGl0ICovCisJCSAgICBpbndvcmQgPSBjbWZs Z3MgPSAwOworI2lmZGVmIEdFTURPUworCQkgICAgZmZsdXNoKHN0ZG91dCk7CisjZW5kaWYgLyog R0VNRE9TICovCisJCSAgICBjYyA9IGFkZGJ1Zih4ZGVmKTsKKwkJfSBlbHNlIGJsZWVwKEJQX1dB Uk4pOwkvKiBObyBkZWZhdWx0ICovCisJICAgIH0gZWxzZSB7CQkJLyogQWxyZWFkeSBpbiBmaWVs ZCAqLworCQlpbnQgeDsgY2hhciAqcDsKKwkJeCA9IHN0cmxlbihhdG1idWYpOworCQlpZiAoY2tz dHJjbXAoYXRtYnVmLHhkZWYseCwwKSkgeyAgICAvKiBNYXRjaGVzIGRlZmF1bHQ/ICovCisJCSAg ICBibGVlcChCUF9XQVJOKTsJICAgICAgICAgICAgLyogTm8gKi8KKwkJfSBlbHNlIGlmICgoaW50 KXN0cmxlbih4ZGVmKSA+IHgpIHsgLyogWWVzICovCisJCSAgICBwID0geGRlZiArIHg7CisJCSAg ICBwcmludGYoIiVzICIsIHApOworI2lmZGVmIEdFTURPUworCQkgICAgZmZsdXNoKHN0ZG91dCk7 CisjZW5kaWYgLyogR0VNRE9TICovCisJCSAgICBhZGRidWYocCk7CisJCSAgICBpbndvcmQgPSBj bWZsZ3MgPSAwOworCQkgICAgZGVidWcoRjExMCwiY210eHQ6IGFkZGJ1ZiIsY21kYnVmLDApOwor CQl9IGVsc2UgeworCQkgICAgYmxlZXAoQlBfV0FSTik7CisJCX0KKwkgICAgfQorCSAgICBicmVh azsKKwkgIGNhc2UgMzoJCQkvKiBRdWVzdGlvbiBNYXJrICovCisJICAgIGlmICgqeGhscCA9PSBO VUwpCisJICAgICAgcHJpbnRmKCIgVGV4dCBzdHJpbmciKTsKKwkgICAgZWxzZQorCSAgICAgIHBy aW50ZigiICVzIix4aGxwKTsKKwkgICAgcHJpbnRmKCJcbiVzJXMiLGNtcHJvbSxjbWRidWYpOwor CSAgICBmZmx1c2goc3Rkb3V0KTsKKwkgICAgYnJlYWs7CisJICBkZWZhdWx0OgorCSAgICBwcmlu dGYoIj9VbmV4cGVjdGVkIHJldHVybiBjb2RlIGZyb20gZ3R3b3JkKCkgLSAlZFxuIix4KTsKKwkg ICAgcmV0dXJuKC0yKTsKKyAgICAgICAgfQorICAgICAgICB4ID0gZ3R3b3JkKDApOworICAgIH0K K30KKworLyogIEMgTSBLIEUgWSAgLS0gIFBhcnNlIGEga2V5d29yZCAgKi8KKworLyoKKyBDYWxs IHdpdGg6CisgICB0YWJsZSAgICAtLSAga2V5d29yZCB0YWJsZSwgaW4gJ3N0cnVjdCBrZXl0YWIn IGZvcm1hdDsKKyAgIG4gICAgICAgIC0tICBudW1iZXIgb2YgZW50cmllcyBpbiB0YWJsZTsKKyAg IHhobHAgICAgIC0tICBwb2ludGVyIHRvIGhlbHAgc3RyaW5nOworICAgeGRlZiAgICAgLS0gIHBv aW50ZXIgdG8gZGVmYXVsdCBrZXl3b3JkOworICAgZiAgICAgICAgLS0gIHN0cmluZyBwcmVwcm9j ZXNzaW5nIGZ1bmN0aW9uIChlLmcuIHRvIGV2YWx1YXRlIHZhcmlhYmxlcykKKyAgIHBtc2cgICAg IC0tICAwID0gZG9uJ3QgcHJpbnQgZXJyb3IgbWVzc2FnZXMKKyAgICAgICAgICAgICAgICAxID0g cHJpbnQgZXJyb3IgbWVzc2FnZXMKKyAgICAgICAgICAgICAgICAyID0gaW5jbHVkZSBDTV9ITFAg a2V5d29yZHMgZXZlbiBpZiBpbnZpc2libGUKKyAgICAgICAgICAgICAgICAzID0gMSsyCisgICAg ICAgICAgICAgICAgNCA9IHBhcnNlIGEgc3dpdGNoIChrZXl3b3JkIHBvc3NpYmx5IGVuZGluZyBp biA6IG9yID0pCisgICAgICAgICAgICAgICAgOCA9IGRvbid0IHN0cmlwIGNvbW1lbnRzICh1c2Vk LCBlLmcuLCBmb3IgImhlbHAgIyIpCisgUmV0dXJuczoKKyAgIC0zICAgICAgIC0tICBubyBpbnB1 dCBzdXBwbGllZCBhbmQgbm8gZGVmYXVsdCBhdmFpbGFibGUKKyAgIC0yICAgICAgIC0tICBpbnB1 dCBkb2Vzbid0IHVuaXF1ZWx5IG1hdGNoIGEga2V5d29yZCBpbiB0aGUgdGFibGUKKyAgIC0xICAg ICAgIC0tICB1c2VyIGRlbGV0ZWQgdG9vIG11Y2gsIGNvbW1hbmQgcmVwYXJzZSByZXF1aXJlZAor ICAgIG4gPj0gMCAgLS0gIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCBrZXl3b3JkCisqLworCisvKgor ICBGcm9udCBlbmRzIGZvciBjbWtleTIoKTogCisgIGNta2V5KCkgIC0gVGhlIG5vcm1hbCBrZXl3 b3JkIHBhcnNlcgorICBjbWtleXgoKSAtIExpa2UgY21rZXkoKSBidXQgc3VwcHJlc3NlcyBlcnJv ciBtZXNzYWdlcworICBjbXN3aSgpICAtIFN3aXRjaCBwYXJzZXIKKyovCitpbnQKK2Nta2V5KHRh YmxlLG4seGhscCx4ZGVmLGYpCisvKiBjbWtleSAqLyAgc3RydWN0IGtleXRhYiB0YWJsZVtdOyBp bnQgbjsgY2hhciAqeGhscCwgKnhkZWY7IHh4X3N0cnAgZjsgeworICAgIHJldHVybihjbWtleTIo dGFibGUsbix4aGxwLHhkZWYsIiIsZiwxKSk7Cit9CitpbnQKK2Nta2V5eCh0YWJsZSxuLHhobHAs eGRlZixmKQorLyogY21rZXl4ICovICBzdHJ1Y3Qga2V5dGFiIHRhYmxlW107IGludCBuOyBjaGFy ICp4aGxwLCAqeGRlZjsgeHhfc3RycCBmOyB7CisgICAgcmV0dXJuKGNta2V5Mih0YWJsZSxuLHho bHAseGRlZiwiIixmLDApKTsKK30KK2ludAorY21zd2kodGFibGUsbix4aGxwLHhkZWYsZikKKy8q IGNtc3dpICovICBzdHJ1Y3Qga2V5dGFiIHRhYmxlW107IGludCBuOyBjaGFyICp4aGxwLCAqeGRl ZjsgeHhfc3RycCBmOyB7CisgICAgcmV0dXJuKGNta2V5Mih0YWJsZSxuLHhobHAseGRlZiwiIixm LDQpKTsKK30KKworaW50CitjbWtleTIodGFibGUsbix4aGxwLHhkZWYsdG9rLGYscG1zZykKKyAg ICBzdHJ1Y3Qga2V5dGFiIHRhYmxlW107CisgICAgaW50IG47CisgICAgY2hhciAqeGhscCwgKnhk ZWY7CisgICAgY2hhciAqdG9rOworICAgIHh4X3N0cnAgZjsKKyAgICBpbnQgcG1zZzsKK3sgLyog Y21rZXkyICovCisgICAgZXh0ZXJuIGludCBoYXZldG9rZW47CisgICAgaW50IGksIHRsLCB5LCB6 ID0gMCwgenosIHhjLCB3b3JkbGVuID0gMCwgY21zd2l0Y2g7CisgICAgY2hhciAqeHAsICp6cTsK KworICAgIGlmICgheGhscCkgeGhscCA9ICIiOworICAgIGlmICgheGRlZikgeGRlZiA9ICIiOwor CisgICAgY21mbGRmbGdzID0gMDsKKyAgICBpZiAoIXRhYmxlKSB7CisJcHJpbnRmKCI/S2V5d29y ZCB0YWJsZSBtaXNzaW5nXG4iKTsKKwlyZXR1cm4oLTkpOworICAgIH0KKyAgICB0bCA9IChpbnQp c3RybGVuKHRvayk7CisKKyAgICBpbndvcmQgPSB4YyA9IGNjID0gMDsJCS8qIENsZWFyIGNoYXJh Y3RlciBjb3VudGVycy4gKi8KKyAgICBjbXN3aXRjaCA9IHBtc2cgJiA0OwkJLyogRmxhZyBmb3Ig cGFyc2luZyBhIHN3aXRjaCAqLworCisgICAgZGVidWcoRjEwMSwiY21rZXk6IHBtc2ciLCIiLHBt c2cpOworICAgIGRlYnVnKEYxMDEsImNta2V5OiBjbWZsZ3MiLCIiLGNtZmxncyk7CisgICAgZGVi dWcoRjEwMSwiY21rZXk6IGNtc3dpdGNoIiwiIixjbXN3aXRjaCk7CisgICAgLyogZGVidWcoRjEw MSwiY21rZXk6IGNtZGJ1ZiIsIiIsY21kYnVmKTsqLworCisgICAgcHB2bmFtYnVmWzBdID0gTlVM OworCisgICAgaWYgKCh6eiA9IGNtZmxncykgPT0gMSkgewkJLyogQ29tbWFuZCBhbHJlYWR5IGVu dGVyZWQ/ICovCisJaWYgKHNldGF0bSh4ZGVmLDApIDwgMCkgewkvKiBZZXMsIGNvcHkgZGVmYXVs dCBpbnRvIGF0b20gYnVmICovCisJICAgIHByaW50ZigiP0RlZmF1bHQgdG9vIGxvbmdcbiIpOwor CSAgICByZXR1cm4oLTkpOworCX0KKyAgICAgICAgcnRpbWVyKCk7CQkJIC8qIFJlc2V0IHRpbWVy ICovCisgICAgfSBlbHNlIHsJCQkJIC8qIE90aGVyd2lzZSBnZXQgYSBjb21tYW5kIHdvcmQgKi8K KyAgICAgICAgcnRpbWVyKCk7CQkJIC8qIFJlc2V0IHRpbWVyICovCisJaWYgKHBtc2cgJiA4KQkJ CSAvKiA4IGlzIGZvciBwYXJzaW5nIEhFTFAgdG9rZW5zICovCisJICB6eiA9IGd0d29yZCg0KTsK KwllbHNlCisJICB6eiA9IGd0d29yZCgocG1zZyA9PSA0KSA/IDEgOiAwKTsKKyAgICB9CisKKyAg ICBkZWJ1ZyhGMTAxLCJjbWtleSB0YWJsZSBsZW5ndGgiLCIiLG4pOworICAgIGRlYnVnKEYxMDEs ImNta2V5IGNtZmxncyIsIiIsY21mbGdzKTsKKyAgICBkZWJ1ZyhGMTAxLCJjbWtleSBjYyIsIiIs Y2MpOworCisgICAgd2hpbGUgKDEpIHsKKwl4YyArPSBjYzsKKwlkZWJ1ZyhGMTExLCJjbWtleSBn dHdvcmQgeGMiLGF0bWJ1Zix4Yyk7CisJZGVidWcoRjEwMSwiY21rZXkgZ3R3b3JkIHp6IiwiIix6 eik7CisKKwlzd2l0Y2ggKHp6KSB7CisJICBjYXNlIC0xMDoJCQkvKiBUaW1lb3V0ICovCisJICAg IGlmIChndGltZXIoKSA8IHRpbWVsaW1pdCkgeworCQlpZiAocG1zZyAmIDgpCQkvKiA4IGlzIGZv ciBwYXJzaW5nIEhFTFAgdG9rZW5zICovCisJCSAgenogPSBndHdvcmQoNCk7CisJCWVsc2UKKwkJ ICB6eiA9IGd0d29yZCgocG1zZyA9PSA0KSA/IDEgOiAwKTsKKwkJY29udGludWU7CisJICAgIH0g ZWxzZSB7CisjaWZkZWYgSUtTRAorICAgICAgICAgICAgICAgIGV4dGVybiBpbnQgaW5zZXJ2ZXI7 CisgICAgICAgICAgICAgICAgaWYgKGluc2VydmVyKSB7CisgICAgICAgICAgICAgICAgICAgIHBy aW50ZigiXHJcbklLU0QgSURMRSBUSU1FT1VUOiAlZCBzZWNcclxuIiwgdGltZWxpbWl0KTsKKyAg ICAgICAgICAgICAgICAgICAgZG9leGl0KEdPT0RfRVhJVCwwKTsKKyAgICAgICAgICAgICAgICB9 CisjZW5kaWYgLyogSUtTRCAqLworCQlyZXR1cm4oLTEwKTsKKyAgICAgICAgICAgIH0KKwkgIGNh c2UgLTU6CisJICAgIHJldHVybihjbWZsZ3MgPSAwKTsKKwkgIGNhc2UgLTk6CisJICAgIHByaW50 ZigiQ29tbWFuZCBvciBmaWVsZCB0b28gbG9uZ1xuIik7CisJICBjYXNlIC00OgkJCS8qIEVPRiAq LworCSAgY2FzZSAtMzoJCQkvKiBOdWxsIENvbW1hbmQvUXVpdC9UaW1lb3V0ICovCisJICBjYXNl IC0yOgkJCS8qIEJ1ZmZlciBvdmVyZmxvdyAqLworCSAgY2FzZSAtMToJCQkvKiBPciB1c2VyIGRp ZCBzb21lIGRlbGV0aW5nLiAqLworCSAgICByZXR1cm4oY21mbGdzID0genopOworCisKKwkgIGNh c2UgMToJCQkvKiBDUiAqLworCSAgY2FzZSAwOgkJCS8qIFVzZXIgdGVybWluYXRlZCB3b3JkIHdp dGggc3BhY2UgKi8KKwkgIGNhc2UgNDoJCQkvKiBvciBzd2l0Y2ggZW5kaW5nIGluIDogb3IgPSAq LworCSAgICB3b3JkbGVuID0gY2M7CQkvKiBMZW5ndGggaWYgbm8gY29udmVyc2lvbiAqLworCSAg ICBpZiAoY2MgPT0gMCkgewkJLyogU3VwcGx5IGRlZmF1bHQgaWYgd2UgZ290IG5vdGhpbmcgKi8K KwkJaWYgKCh3b3JkbGVuID0gc2V0YXRtKHhkZWYsKHp6ID09IDQpID8gMiA6IDApKSA8IDApIHsK KwkJICAgIHByaW50ZigiP0RlZmF1bHQgdG9vIGxvbmdcbiIpOworCQkgICAgcmV0dXJuKC05KTsK KwkJfQorCSAgICB9CisJICAgIGlmICh6eiA9PSAxICYmIGNjID09IDApCS8qIFJlcXVpcmVkIGZp ZWxkIG1pc3NpbmcgKi8KKwkgICAgICByZXR1cm4oLTMpOworCisJICAgIGlmIChmKSB7CQkJLyog SWYgYSBjb252ZXJzaW9uIGZ1bmN0aW9uIGlzIGdpdmVuICovCisJCWNoYXIgKiBwMjsKKwkJenEg PSBhdHhidWY7CQkvKiBhcHBseSBpdCAqLworCQlwMiA9IGF0eGJ1ZjsKKwkJYXR4biA9IENNREJM OworCQlpZiAoKCpmKShhdG1idWYsJnpxLCZhdHhuKSA8IDApIHJldHVybigtMik7CisJCWRlYnVn KEYxMTAsImNta2V5IGF0eGJ1ZiBhZnRlciAqZiIsYXR4YnVmLDApOworCQlpZiAoISpwMikJCS8q IFN1cHBseSBkZWZhdWx0IGlmIHdlIGdvdCBub3RoaW5nICovCisJCSAgcDIgPSB4ZGVmOworCQlj a3N0cm5jcHkocHB2bmFtYnVmLGF0bWJ1ZixQUFZMRU4pOworCQlpZiAoKHdvcmRsZW4gPSBzZXRh dG0ocDIsKHp6ID09IDQpID8gMiA6IDApKSA8IDApIHsKKwkJICAgIHByaW50ZigiRXZhbHVhdGVk IGtleXdvcmQgdG9vIGxvbmdcbiIpOworCQkgICAgcmV0dXJuKC05KTsKKwkJfQorI2lmZGVmIE1f VU5HVworCQkvKgorCQkgIFRoaXMgYml0IGxldHMgdXMgc2F2ZSBtb3JlIHRoYW4gb25lICJ3b3Jk Ii4KKwkJICBGb3IgZXhhbXBsZSwgImRlZmluZSBcJXggZWNobyBvbmUgdHdvIHRocmVlIiwgIlwl eCIuCisJCSAgSXQgd29ya3MgdG9vLCBidXQgaXQgYnJlYWtzIGxhYmVscywgYW5kIHRoZXJlZm9y ZQorCQkgIFdISUxFIGFuZCBGT1IgbG9vcHMsIGV0Yy4KKwkJKi8KKwkJaWYgKHAyW3dvcmRsZW5d ID49IFNQKSB7CisJCSAgICBwMiArPSB3b3JkbGVuOworCQkgICAgd2hpbGUgKCpwMiA9PSBTUCkg cDIrKzsKKwkJICAgIGlmICgqcDIpIHsKKwkJCXVuZ3dvcmQoKTsKKwkJCXBwID0gcDI7CisJCSAg ICB9CisJCX0KKyNlbmRpZiAvKiBNX1VOR1cgKi8KKwkgICAgfQorI2lmZGVmIENPTU1FTlQJCQkJ LyogXl5eICovCisJICAgIGlmIChjbXN3aXRjaCAmJiAqYXRtYnVmICE9ICcvJykgeworCQlpZiAo cG1zZyAmIDEpIHsKKwkJICAgIGJsZWVwKEJQX0ZBSUwpOworICAgICAgICAgICAgICAgICAgICBw cmludGYoIj9Ob3QgYSBzd2l0Y2ggLSAlc1xuIixhdG1idWYpOworCQl9CisJCWNtZmxncyA9IC0y OworCQlyZXR1cm4oLTYpOworCSAgICB9CisjZW5kaWYJLyogQ09NTUVOVCAqLworCSAgICBpZiAo Y21zd2l0Y2gpIHsKKwkJaW50IGk7CisJCWZvciAoaSA9IDA7IGkgPCB3b3JkbGVuOyBpKyspIHsK KwkJICAgIGlmIChhdG1idWZbaV0gPT0gJzonIHx8IGF0bWJ1ZltpXSA9PSAnPScpIHsKKwkJCWJy a2NoYXIgPSBhdG1idWZbaV07CisJCQlhdG1idWZbaV0gPSBOVUw7CisJCQlicmVhazsKKwkJICAg IH0KKwkJfQorCSAgICB9CisKKyNpZmRlZiBUT0tQUkVDSEVDSworLyogVGhpcyB3YXMgYW4gZWZm ZWN0aXZlIG9wdGltaXphdGlvbiBidXQgaXQgYnJlYWtzIHNvbWV0aW1lcyBvbiBsYWJlbHMuICov CisJICAgIGlmICh0bCAmJiAhaXNhbHBoYShhdG1idWZbMF0pKSB7IC8qIFByZWNoZWNrIGZvciB0 b2tlbiAqLworCQlmb3IgKGkgPSAwOyBpIDwgdGw7IGkrKykgeyAvKiBTYXZlIGZ1bmN0aW9uIGNh bGwgdG8gY2tzdHJjaHIgKi8KKwkJICAgIGlmICh0b2tbaV0gPT0gYXRtYnVmWzBdKSB7CisJCQlk ZWJ1ZyhGMDAwLCJjbWtleSB0b2tlbjoiLGF0bWJ1ZiwqYXRtYnVmKTsKKwkJCXVuZ3dvcmQoKTsg IC8qIFB1dCBiYWNrIHRoZSBmb2xsb3dpbmcgd29yZCAqLworCQkJcmV0dXJuKC01KTsgLyogU3Bl Y2lhbCByZXR1cm4gY29kZSBmb3IgdG9rZW4gKi8KKwkJICAgIH0KKwkJfQorCSAgICB9CisjZW5k aWYgLyogVE9LUFJFQ0hFQ0sgKi8KKworCSAgICB5ID0gbG9va3VwKHRhYmxlLGF0bWJ1ZixuLCZ6 KTsgLyogTG9vayB1cCB3b3JkIGluIHRoZSB0YWJsZSAqLworCSAgICBkZWJ1ZyhGMTExLCJjbWtl eSBsb29rdXAiLGF0bWJ1Zix5KTsKKwkgICAgZGVidWcoRjEwMSwiY21rZXkgenoiLCIiLHp6KTsK KwkgICAgZGVidWcoRjEwMSwiY21rZXkgY21mbGdzIiwiIixjbWZsZ3MpOworCSAgICBkZWJ1ZyhG MTAxLCJjbWtleSBjcmZsYWciLCIiLGNyZmxhZyk7CisJICAgIHN3aXRjaCAoeSkgeworCSAgICAg IGNhc2UgLTM6CQkJLyogTm90aGluZyB0byBsb29rIHVwICovCisJCWJyZWFrOworCSAgICAgIGNh c2UgLTI6CQkJLyogQW1iaWd1b3VzICovCisJCWNtZmxncyA9IC0yOworCQlpZiAocG1zZyAmIDEp IHsKKwkJICAgIGJsZWVwKEJQX0ZBSUwpOworICAgICAgICAgICAgICAgICAgICBwcmludGYoIj9B bWJpZ3VvdXMgLSAlc1xuIixhdG1idWYpOworCQkgICAgcmV0dXJuKC05KTsKKwkJfQorCQlyZXR1 cm4oLTIpOworCSAgICAgIGNhc2UgLTE6CQkJLyogTm90IGZvdW5kIGF0IGFsbCAqLworI2lmbmRl ZiBUT0tQUkVDSEVDSworCQlpZiAodGwpIHsKKwkJICAgIGZvciAoaSA9IDA7IGkgPCB0bDsgaSsr KSAvKiBDaGVjayBmb3IgdG9rZW4gKi8KKwkJICAgICAgaWYgKHRva1tpXSA9PSAqYXRtYnVmKSB7 IC8qIEdvdCBvbmUgKi8KKwkJCSAgZGVidWcoRjAwMCwiY21rZXkgdG9rZW46IixhdG1idWYsKmF0 bWJ1Zik7CisJCQkgIHVuZ3dvcmQoKTsgIC8qIFB1dCBiYWNrIHRoZSBmb2xsb3dpbmcgd29yZCAq LworCQkJICByZXR1cm4oLTUpOyAvKiBTcGVjaWFsIHJldHVybiBjb2RlIGZvciB0b2tlbiAqLwor CQkgICAgICB9CisJCX0KKyNlbmRpZiAvKiBUT0tQUkVDSEVDSyAqLworCisJCWlmICh0bCA9PSAw KSB7CQkvKiBObyB0b2tlbnMgd2VyZSBpbmNsdWRlZCAqLworI2lmZGVmIE9TMgorCQkgICAgLyog SW4gT1MvMiBhbmQgV2luZG93cywgYWxsb3cgZm9yIGEgZGlzayBsZXR0ZXIgbGlrZSBET1MgKi8K KwkJICAgIGlmIChpc2FscGhhKCphdG1idWYpICYmICooYXRtYnVmKzEpID09ICc6JykKKwkJICAg ICAgcmV0dXJuKC03KTsKKyNlbmRpZiAvKiBPUzIgKi8KKwkJICAgIGlmICgocG1zZyAmIDEpICYm ICFxdWlldCkgeworCQkJYmxlZXAoQlBfRkFJTCk7CisJCQlwcmludGYoIj9ObyBrZXl3b3JkcyBt YXRjaCAtICVzXG4iLGF0bWJ1Zik7IC8qIGNta2V5ICovCisJCSAgICB9CisJCSAgICByZXR1cm4o Y21mbGdzID0gLTkpOworCQl9IGVsc2UgeworCQkgICAgaWYgKGNtZmxncyA9PSAxIHx8IGNtc3dp dGNoKSAvKiBjbWtleTIgb3IgY21zd2kgKi8KKwkJICAgICAgcmV0dXJuKGNtZmxncyA9IC02KTsK KwkJICAgIGVsc2UKKwkJICAgICAgcmV0dXJuKGNtZmxncyA9IC0yKTsKKwkJICAgIC8qIFRoZSAt NiBjb2RlIGlzIHRvIGxldCBjYWxsZXIgdHJ5IGFub3RoZXIgdGFibGUgKi8KKwkJfQorCQlicmVh azsKKwkgICAgICBkZWZhdWx0OgorI2lmZGVmIENLX1JFQ0FMTAorCQlpZiAodGVzdCh0YWJsZVt6 XS5mbGdzLENNX05PUikpIG5vX3JlY2FsbCA9IDE7CisjZW5kaWYgLyogQ0tfUkVDQUxMICovCisJ CWlmICh6eiA9PSA0KQorCQkgIHN3YXJnID0gMTsKKwkJY21rd2ZsZ3MgPSB0YWJsZVt6XS5mbGdz OworCQlicmVhazsKKwkgICAgfQorCSAgICByZXR1cm4oeSk7CisKKwkgIGNhc2UgMjoJCQkvKiBV c2VyIHRlcm1pbmF0ZWQgd29yZCB3aXRoIEVTQyAqLworCSAgICBkZWJ1ZyhGMTAxLCJjbWtleSBF c2MgY2MiLCIiLGNjKTsKKyAgICAgICAgICAgIGlmIChjYyA9PSAwKSB7CisJCWlmICgqeGRlZiAh PSBOVUwpIHsgICAgIC8qIE5vdGhpbmcgaW4gYXRtYnVmICovCisJCSAgICBwcmludGYoIiVzICIs eGRlZik7IC8qIFN1cHBseSBkZWZhdWx0IGlmIGFueSAqLworI2lmZGVmIEdFTURPUworCQkgICAg ZmZsdXNoKHN0ZG91dCk7CisjZW5kaWYgLyogR0VNRE9TICovCisJCSAgICBhZGRidWYoeGRlZik7 CisJCSAgICBpZiAoc2V0YXRtKHhkZWYsMCkgPCAwKSB7CisJCQlwcmludGYoIj9EZWZhdWx0IHRv byBsb25nXG4iKTsKKwkJCXJldHVybigtOSk7CisJCSAgICB9CisJCSAgICBpbndvcmQgPSBjbWZs Z3MgPSAwOworCQkgICAgZGVidWcoRjExMSwiY21rZXk6IGRlZmF1bHQiLGF0bWJ1ZixjYyk7CisJ CX0gZWxzZSB7CisJCSAgICBkZWJ1ZyhGMTAxLCJjbWtleSBFc2MgcG1zZyIsIiIsMCk7CisjaWZk ZWYgQ09NTUVOVAorLyoKKyAgQ2hhaW5lZCBGREJzLi4uICBUaGUgaWRlYSBpcyB0aGF0IHRoaXMg ZnVuY3Rpb24gbWlnaHQgbm90IGhhdmUgYSBkZWZhdWx0LAorICBidXQgdGhlIG5leHQgb25lIG1p Z2h0LiAgQnV0IGlmIGl0IGRvZXNuJ3QsIHRoZXJlIGlzIG5vIHdheSB0byBjb21lIGJhY2sgdG8K KyAgdGhpcyBvbmUuICBUbyBiZSByZXZpc2l0ZWQgbGF0ZXIuLi4KKyovCisJCSAgICBpZiAoeGNt ZmRiKQkJLyogQ2hhaW5lZCBmZGIgLS0gdHJ5IG5leHQgb25lICovCisJCSAgICAgIHJldHVybigt Myk7CisjZW5kaWYgLyogQ09NTUVOVCAqLworCQkgICAgaWYgKHBtc2cgJiAoMXw0KSkgewkvKiBT byBmb3Igbm93IGp1c3QgYmVlcCAqLworCQkJYmxlZXAoQlBfV0FSTik7CisJCSAgICB9CisJCSAg ICBicmVhazsKKwkJfQorICAgICAgICAgICAgfQorCSAgICBpZiAoZikgewkJCS8qIElmIGEgY29u dmVyc2lvbiBmdW5jdGlvbiBpcyBnaXZlbiAqLworCQljaGFyICogcHA7CisJCXpxID0gYXR4YnVm OwkJLyogYXBwbHkgaXQgKi8KKwkJcHAgPSBhdHhidWY7CisJCWF0eG4gPSBDTURCTDsKKwkJaWYg KCgqZikoYXRtYnVmLCZ6cSwmYXR4bikgPCAwKQorCQkgIHJldHVybigtMik7CisJCWlmICghKnBw KQorCQkgIHBwID0geGRlZjsKKwkJaWYgKHNldGF0bShwcCwwKSA8IDApIHsKKwkJICAgIHByaW50 ZigiRXZhbHVhdGVkIGtleXdvcmQgdG9vIGxvbmdcbiIpOworCQkgICAgcmV0dXJuKC05KTsKKwkJ fQorCSAgICB9CisJICAgIHkgPSBsb29rdXAodGFibGUsYXRtYnVmLG4sJnopOyAvKiBTb21ldGhp bmcgaW4gYXRtYnVmICovCisJICAgIGRlYnVnKEYxMTEsImNta2V5IGxvb2t1cCB5IixhdG1idWYs eSk7CisJICAgIGRlYnVnKEYxMTEsImNta2V5IGxvb2t1cCB6IixhdG1idWYseik7CisJICAgIGlm ICh5ID09IC0yICYmIHogPj0gMCAmJiB6IDwgbikgeyAvKiBBbWJpZ3VvdXMgKi8KKyNpZm5kZWYg Tk9QQVJUSUFMCisJCWludCBqLCBrLCBsZW4gPSA5OTk5OwkvKiBEbyBwYXJ0aWFsIGNvbXBsZXRp b24gKi8KKwkJLyogU2tpcCBwYXN0IGFueSBhYmJyZXZpYXRpb25zIGluIHRoZSB0YWJsZSAqLwor CQlmb3IgKCA7IHogPCBuOyB6KyspIHsKKwkJICAgIGlmICgodGFibGVbel0uZmxncyAmIENNX0FC UikgPT0gMCkKKwkJICAgICAgYnJlYWs7CisJCSAgICBpZiAoISh0YWJsZVt6XS5mbGdzICYgQ01f SExQKSB8fCAocG1zZyAmIDIpKQorCQkgICAgICBicmVhazsKKwkJfQorCQlkZWJ1ZyhGMTExLCJj bWtleSBwYXJ0aWFsIHoiLGF0bWJ1Zix6KTsKKwkJZGVidWcoRjExMSwiY21rZXkgcGFydGlhbCBu IixhdG1idWYsbik7CisJCWZvciAoaiA9IHorMTsgaiA8IG47IGorKykgeworCQkgICAgZGVidWco RjExMSwiY21rZXkgcGFydGlhbCBqIix0YWJsZVtqXS5rd2Qsaik7CisJCSAgICBpZiAoY2tzdHJj bXAoYXRtYnVmLHRhYmxlW2pdLmt3ZCxjYywwKSkKKwkJICAgICAgYnJlYWs7CisJCSAgICBpZiAo dGFibGVbal0uZmxncyAmIENNX0FCUikKKwkJICAgICAgY29udGludWU7CisJCSAgICBpZiAoKHRh YmxlW2pdLmZsZ3MgJiBDTV9ITFApICYmICEocG1zZyAmIDIpKQorCQkgICAgICBjb250aW51ZTsK KwkJICAgIGsgPSBja3N0cnByZSh0YWJsZVt6XS5rd2QsdGFibGVbal0ua3dkKTsKKwkJICAgIGRl YnVnKEYxMTEsImNta2V5IHBhcnRpYWwgayIsdGFibGVbel0ua3dkLGspOworCQkgICAgaWYgKGsg PCBsZW4pCisJCSAgICAgIGxlbiA9IGs7IC8qIExlbmd0aCBvZiBsb25nZXN0IGNvbW1vbiBwcmVm aXggKi8KKwkJfQorCQlkZWJ1ZyhGMTExLCJjbWtleSBwYXJ0aWFsIGxlbiIsdGFibGVbel0ua3dk LGxlbik7CisJCWlmIChsZW4gIT0gOTk5OSAmJiBsZW4gPiBjYykgeworCQkgICAgY2tzdHJuY2F0 KGF0bWJ1Zix0YWJsZVt6XS5rd2QrY2MsQVRNQkwpOworCQkgICAgYXRtYnVmW2xlbl0gPSBOVUw7 CisJCSAgICBwcmludGYoIiVzIixhdG1idWYrY2MpOworCQkgICAgY2tzdHJuY2F0KGNtZGJ1Zixh dG1idWYrY2MsQ01EQkwpOworCQkgICAgeGMgKz0gKGxlbiAtIGNjKTsKKwkJICAgIGNjID0gbGVu OworCQl9CisjZW5kaWYgLyogTk9QQVJUSUFMICovCisJCWJsZWVwKEJQX1dBUk4pOworCQlicmVh azsKKwkgICAgfSBlbHNlIGlmICh5ID09IC0zKSB7CisJCWJsZWVwKEJQX1dBUk4pOworCQlicmVh azsKKwkgICAgfSBlbHNlIGlmICh5ID09IC0xKSB7CS8qIE5vdCBmb3VuZCAqLworCQlpZiAoKHBt c2cgJiAxKSAmJiAhcXVpZXQpIHsKKwkJICAgIGJsZWVwKEJQX0ZBSUwpOworCQkgICAgcHJpbnRm KCI/Tm8ga2V5d29yZHMgbWF0Y2ggLSBcIiVzXCJcbiIsYXRtYnVmKTsKKwkJfQorCQljbWZsZ3Mg PSAtMjsKKwkJcmV0dXJuKC05KTsKKwkgICAgfQorLyoKKyAgSWYgd2UgZm91bmQgaXQsIGJ1dCBp dCdzIGEgaGVscC1vbmx5IGtleXdvcmQgYW5kIHRoZSAiaGVscCIgYml0IGlzIG5vdAorICBzZXQg aW4gcG1zZywgdGhlbiBub3QgZm91bmQuCisqLworCSAgICBkZWJ1ZyhGMTAxLCJjbWtleSBmbGdz IiwiIix0YWJsZVt6XS5mbGdzKTsKKwkgICAgaWYgKHRlc3QodGFibGVbel0uZmxncyxDTV9ITFAp ICYmICgocG1zZyAmIDIpID09IDApKSB7CisJCWlmICgocG1zZyAmIDEpICYmICFxdWlldCkgewor CQkgICAgYmxlZXAoQlBfRkFJTCk7CisJCSAgICBwcmludGYoIj9ObyBrZXl3b3JkcyBtYXRjaCAt ICVzXG4iLGF0bWJ1Zik7CisJCX0KKwkJY21mbGdzID0gLTI7CisJCXJldHVybigtOSk7CisJICAg IH0KKy8qCisgIFNlZSBpZiB0aGUga2V5d29yZCBqdXN0IGZvdW5kIGhhcyB0aGUgQ01fQUJSIGJp dCBzZXQgaW4gaXRzIGZsZ3MgZmllbGQsIGFuZAorICBpZiBzbywgc2VhcmNoIGZvcndhcmRzIGlu IHRoZSB0YWJsZSBmb3IgYSBrZXl3b3JkIHRoYXQgaGFzIHRoZSBzYW1lIGt3dmFsCisgIGJ1dCBk b2VzIG5vdCBoYXZlIENNX0FCUiAob3IgQ01fSU5WPykgc2V0LCBhbmQgdGhlbiBleHBhbmQgdXNp bmcgdGhlIGZ1bGwKKyAga2V5d29yZC4gIFdBUk5JTkc6IFRoaXMgYXNzdW1lcyB0aGF0IChhKSBr ZXl3b3JkcyBhcmUgaW4gYWxwaGFiZXRpY2FsIG9yZGVyLAorICBhbmQgKGIpIHRoZSBDTV9BQlIg Yml0IGlzIHNldCBvbmx5IGlmIHRoZSB0aGUgYWJicmV2aWF0ZWQga2V5d29yZCBpcyBhIHRydWUK KyAgYWJicmV2aWF0aW9uIChsZWZ0IHN1YnN0cmluZykgb2YgdGhlIGZ1bGwga2V5d29yZC4KKyov CisJICAgIGlmICh0ZXN0KHRhYmxlW3pdLmZsZ3MsQ01fQUJSKSkgeworCQlpbnQgeno7CisJCWZv ciAoenogPSB6KzE7IHp6IDwgbjsgenorKykKKwkJICBpZiAoKHRhYmxlW3p6XS5rd3ZhbCA9PSB0 YWJsZVt6XS5rd3ZhbCkgJiYKKwkJICAgICAgKCF0ZXN0KHRhYmxlW3p6XS5mbGdzLENNX0FCUikp ICYmCisJCSAgICAgICghdGVzdCh0YWJsZVt6el0uZmxncyxDTV9JTlYpKSkgeworCQkgICAgICB6 ID0geno7CisJCSAgICAgIGJyZWFrOworCQkgIH0KKwkgICAgfQorCSAgICB4cCA9IHRhYmxlW3pd Lmt3ZCArIGNjOworCSAgICBpZiAoY21zd2l0Y2ggJiYgdGVzdCh0YWJsZVt6XS5mbGdzLENNX0FS RykpIHsKKyNpZmRlZiBWTVMKKwkJcHJpbnRmKCIlcz0iLHhwKTsKKwkJYnJrY2hhciA9ICc9JzsK KyNlbHNlCisJCXByaW50ZigiJXM6Iix4cCk7CisJCWJya2NoYXIgPSAnOic7CisjZW5kaWYgLyog Vk1TICovCisJICAgIH0gZWxzZSB7CisJCXByaW50ZigiJXMgIix4cCk7CisJCWJya2NoYXIgPSBT UDsKKwkgICAgfQorI2lmZGVmIENLX1JFQ0FMTAorCSAgICBpZiAodGVzdCh0YWJsZVt6XS5mbGdz LENNX05PUikpIG5vX3JlY2FsbCA9IDE7CisjZW5kaWYgLyogQ0tfUkVDQUxMICovCisJICAgIGNt a3dmbGdzID0gdGFibGVbel0uZmxnczsKKyNpZmRlZiBHRU1ET1MKKwkgICAgZmZsdXNoKHN0ZG91 dCk7CisjZW5kaWYgLyogR0VNRE9TICovCisJICAgIGFkZGJ1Zih4cCk7CisJICAgIGlmIChjbXN3 aXRjaCAmJiB0ZXN0KHRhYmxlW3pdLmZsZ3MsQ01fQVJHKSkgeworCQlicC0tOwkJCS8qIFJlcGxh Y2UgdHJhaWxpbmcgc3BhY2Ugd2l0aCA6ICovCisjaWZkZWYgVk1TCisJCSpicCsrID0gJz0nOwor I2Vsc2UKKwkJKmJwKysgPSAnOic7CisjZW5kaWYgLyogVk1TICovCisJCSpicCA9IE5VTDsKKwkJ bnAgPSBicDsKKwkJc3dhcmcgPSAxOworCSAgICB9CisJICAgIGlud29yZCA9IDA7CisJICAgIGNt ZmxncyA9IDA7CisJICAgIGRlYnVnKEYxMTAsImNta2V5OiBhZGRidWYiLGNtZGJ1ZiwwKTsKKwkg ICAgcmV0dXJuKHkpOworCisJICBjYXNlIDM6CQkJLyogVXNlciB0eXBlZCAiPyIgKi8KKwkgICAg aWYgKGYpIHsJCQkvKiBJZiBhIGNvbnZlcnNpb24gZnVuY3Rpb24gaXMgZ2l2ZW4gKi8KKwkJY2hh ciAqIHBwOworCQl6cSA9IGF0eGJ1ZjsJCS8qIGRvIHRoZSBjb252ZXJzaW9uIG5vdy4gKi8KKwkJ cHAgPSBhdHhidWY7CisJCWF0eG4gPSBDTURCTDsKKwkJaWYgKCgqZikoYXRtYnVmLCZ6cSwmYXR4 bikgPCAwKSByZXR1cm4oLTIpOworCQlpZiAoc2V0YXRtKHBwLDApIDwgMCkgeworCQkgICAgcHJp bnRmKCI/RXZhbHVhdGVkIGtleXdvcmQgdG9vIGxvbmdcbiIpOworCQkgICAgcmV0dXJuKC05KTsK KwkJfQorCSAgICB9CisJICAgIHkgPSBsb29rdXAodGFibGUsYXRtYnVmLG4sJnopOyAvKiBMb29r IHVwIHdoYXQgd2UgaGF2ZSBzbyBmYXIuICovCisJICAgIGlmICh5ID09IC0xKSB7CisJCS8qCisJ CSAgU3RyaWN0bHkgc3BlYWtpbmcgaWYgdGhlIG1haW4ga2V5d29yZCB0YWJsZSBzZWFyY2ggZmFp bHMsCisJCSAgdGhlbiB3ZSBzaG91bGQgbG9vayBpbiB0aGUgdG9rZW4gdGFibGUgaWYgb25lIGlz IGdpdmVuLgorCQkgIEJ1dCBpbiBwcmFjdGljZSwgdG9rZW5zIGFyZSBhbHNvIGluY2x1ZGVkIGlu IHRoZSBtYWluCisJCSAga2V5d29yZCB0YWJsZS4KKwkJKi8KKwkJY21mbGdzID0gLTI7CisJCWlm ICgocG1zZyAmIDEpICYmICFxdWlldCkgeworCQkgICAgYmxlZXAoQlBfRkFJTCk7CisJCSAgICBw cmludGYoIiBObyBrZXl3b3JkcyBtYXRjaFxuIik7CisJCSAgICByZXR1cm4oLTkpOworCQl9CisJ CXJldHVybigtMik7CisJICAgIH0KKyNpZm5kZWYgQ09NTUVOVAorCSAgICAvKiBUaGlzIGlzIHRv IGFsbG93ID8taGVscCB0byB3b3JrIGltbWVkaWF0ZWx5IGFmdGVyIGEgdG9rZW4gKi8KKwkgICAg Lyogd2l0aG91dCBoYXZpbmcgdG8gdHlwZSBhbiBpbnRlcm1lZGlhdGUgc3BhY2UgKi8KKwkgICAg aWYgKHRsKSB7CisJCWZvciAoaSA9IDA7IGkgPCB0bDsgaSsrKSAvKiBDaGVjayBmb3IgdG9rZW4g Ki8KKwkJICBpZiAodG9rW2ldID09ICphdG1idWYpIHsgLyogR290IG9uZSAqLworCQkgICAgICBk ZWJ1ZyhGMDAwLCJjbWtleSB0b2tlbjoiLGF0bWJ1ZiwqYXRtYnVmKTsKKwkJICAgICAgdW5nd29y ZCgpOwkvKiBQdXQgYmFjayB0aGUgZm9sbG93aW5nIHdvcmQgKi8KKwkJICAgICAgY21mbGdzID0g MzsJLyogRm9yY2UgaGVscCBuZXh0IHRpbWUgYXJvdW5kICovCisJCSAgICAgIHJldHVybigtNSk7 CS8qIFNwZWNpYWwgcmV0dXJuIGNvZGUgZm9yIHRva2VuICovCisJCSAgfQorCSAgICB9CisjZW5k aWYgLyogQ09NTUVOVCAqLworCisJICAgIGlmICgqeGhscCA9PSBOVUwpCisJICAgICAgcHJpbnRm KCIgT25lIG9mIHRoZSBmb2xsb3dpbmc6XG4iKTsKKwkgICAgZWxzZQorCSAgICAgIHByaW50Zigi ICVzLCBvbmUgb2YgdGhlIGZvbGxvd2luZzpcbiIseGhscCk7CisJICAgIHsKKwkJaW50IHg7CisJ CXggPSBwbXNnICYgKDJ8NCk7CS8qIFNlZSBrd2RoZWxwKCkgY29tbWVudHMgKi8KKwkJaWYgKGF0 bWJ1ZlswXSkJCS8qIElmIG5vdCBhdCBiZWdpbm5pbmcgb2YgZmllbGQgKi8KKwkJICB4IHw9IDE7 CQkvKiBhbHNvIHNob3cgaW52aXNpYmxlcyAqLworCQlrd2RoZWxwKHRhYmxlLG4sYXRtYnVmLCIi LCIiLDEseCk7CisJICAgIH0KKyNpZm5kZWYgTk9TUEwKKwkgICAgaWYgKCFoYXZldG9rZW4pIHsK KwkJZXh0ZXJuIGludCB0b3BjbWQ7CisJCWlmICh0bCA+IDAgJiYgdG9wY21kICE9IFhYSExQKSAv KiBUaGlzIGlzIGJhZC4uLiAqLworCQkgIHByaW50Zigib3IgYSBtYWNybyBuYW1lIChcImRvID9c IiBmb3IgYSBsaXN0KSAiKTsKKwkgICAgfQorI2VuZGlmIC8qIE5PU1BMICovCisJICAgIGlmICgq YXRtYnVmID09IE5VTCAmJiAhaGF2ZXRva2VuKSB7CisJCWlmICh0bCA9PSAxKQorCQkgIHByaW50 Zigib3IgdGhlIHRva2VuICVjXG4iLCp0b2spOworCQllbHNlIGlmICh0bCA+IDEpCisJCSAgcHJp bnRmKCJvciBvbmUgb2YgdGhlIHRva2VuczogJXNcbiIsY2tzcHJlYWQodG9rKSk7CisJICAgIH0K KwkgICAgcHJpbnRmKCIlcyVzIiwgY21wcm9tLCBjbWRidWYpOworCSAgICBmZmx1c2goc3Rkb3V0 KTsKKwkgICAgYnJlYWs7CisKKwkgIGRlZmF1bHQ6CisJICAgIHByaW50ZigiXG4lZCAtIFVuZXhw ZWN0ZWQgcmV0dXJuIGNvZGUgZnJvbSBndHdvcmRcbiIsenopOworCSAgICByZXR1cm4oY21mbGdz ID0gLTIpOworCX0KKwl6eiA9IChwbXNnICYgOCkgPyBndHdvcmQoNCkgOiBndHdvcmQoKHBtc2cg PT0gNCkgPyAxIDogMCk7CisJZGVidWcoRjExMSwiY21rZXkgZ3R3b3JkIHp6IixhdG1idWYsenop OworICAgIH0KK30KKworaW50CitjaGt0b2sodGxpc3QpIGNoYXIgKnRsaXN0OyB7CisgICAgY2hh ciAqcDsKKyAgICBwID0gdGxpc3Q7CisgICAgd2hpbGUgKCpwICE9IE5VTCAmJiAqcCAhPSAqYXRt YnVmKSBwKys7CisgICAgcmV0dXJuKCgqcCkgPyAoaW50KSAqcCA6IDApOworfQorCisvKiBSb3V0 aW5lcyBmb3IgcGFyc2luZyBhbmQgY29udmVydGluZyBkYXRlcyBhbmQgdGltZXMgKi8KKworI2Rl ZmluZSBpc2RhdGVzZXAoYykgKGNrc3RyY2hyKCIgLS8uXyIsYykpCisKKyNkZWZpbmUgQ01EQVRF QlVGIDEwMjQKK2NoYXIgY21kYXRlYnVmW0NNREFURUJVRis0XSA9IHsgTlVMLCBOVUwgfTsKK3N0 YXRpYyBjaGFyICogY21kYXRlYnAgPSBjbWRhdGVidWY7CitjaGFyICogY21kYXRlbXNnID0gTlVM TDsKKworc3RhdGljIHN0cnVjdCBrZXl0YWIgdGltZXVuaXRzW10gPSB7CisgICAgeyAiZGF5cyIs ICAgVFVfREFZUywgICAwIH0sCisgICAgeyAibW9udGhzIiwgVFVfTU9OVEhTLCAwIH0sCisgICAg eyAid2Vla3MiLCAgVFVfV0VFS1MsICAwIH0sCisgICAgeyAid2tzIiwgICAgVFVfV0VFS1MsICAw IH0sCisgICAgeyAieWVhcnMiLCAgVFVfWUVBUlMsICAwIH0sCisgICAgeyAieXJzIiwgICAgVFVf WUVBUlMsICAwIH0KK307CitzdGF0aWMgaW50IG51bml0cyA9IChzaXplb2YodGltZXVuaXRzKSAv IHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7CisKKyNkZWZpbmUgU1lNX05PVyAgMAorI2RlZmluZSBT WU1fVE9EQSAxCisjZGVmaW5lIFNZTV9UT01PIDIKKyNkZWZpbmUgU1lNX1lFU1QgMworCitzdGF0 aWMgc3RydWN0IGtleXRhYiBzeW1kYXl0YWJbXSA9IHsKKyAgICB7ICJub3ciLCAgICAgICBTWU1f Tk9XLCAgMCB9LAorICAgIHsgInRvZGF5IiwgICAgIFNZTV9UT0RBLCAwIH0sCisgICAgeyAidG9t b3Jyb3ciLCAgU1lNX1RPTU8sIDAgfSwKKyAgICB7ICJ5ZXN0ZXJkYXkiLCBTWU1fWUVTVCwgMCB9 Cit9Oworc3RhdGljIGludCBuc3ltZGF5cyA9IChzaXplb2Yoc3ltZGF5dGFiKSAvIHNpemVvZihz dHJ1Y3Qga2V5dGFiKSk7CisKK3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIGRheXNvZndlZWtbXSA9IHsK KyAgICB7ICJGcmlkYXkiLCAgICA1LCAwIH0sCisgICAgeyAiTW9uZGF5IiwgICAgMSwgMCB9LAor ICAgIHsgIlNhdHVyZGF5IiwgIDYsIDAgfSwKKyAgICB7ICJTdW5kYXkiLCAgICAwLCAwIH0sCisg ICAgeyAiVGh1cnNkYXkiLCAgNCwgMCB9LAorICAgIHsgIlR1ZXNkYXkiLCAgIDIsIDAgfSwKKyAg ICB7ICJXZWRuZXNkYXkiLCAzLCAwIH0KK307CisKK3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIHVzYXR6 W10gPSB7CS8qIFJGQyA4MjIgdGltZXpvbmVzICAqLworICAgIHsgImNkdCIsICA1LCAwIH0sCQkJ LyogVmFsdWVzIGFyZSBHTVQgb2Zmc2V0cyAqLworICAgIHsgImNzdCIsICA2LCAwIH0sCisgICAg eyAiZWR0IiwgIDQsIDAgfSwKKyAgICB7ICJlc3QiLCAgNSwgMCB9LAorICAgIHsgImdtdCIsICAw LCAwIH0sCisgICAgeyAibWR0IiwgIDYsIDAgfSwKKyAgICB7ICJtc3QiLCAgNywgMCB9LAorICAg IHsgInBkdCIsICA3LCAwIH0sCisgICAgeyAicHN0IiwgIDgsIDAgfSwKKyAgICB7ICJ1dGMiLCAg MCwgMCB9LAorICAgIHsgInp1bHUiLCAwLCAwIH0KK307CitzdGF0aWMgaW50IG51c2F0eiA9IChz aXplb2YodXNhdHopIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKKworCisvKiAgQyBNIEMgViBU IEQgQSBUIEUgIC0tICBDb252ZXJ0cyBmcmVlLWZvcm0gZGF0ZSB0byBzdGFuZGFyZCBmb3JtLiAg Ki8KKworLyoKKyAgIENhbGwgd2l0aAorICAgICBzID0gcG9pbnRlciB0byBmcmVlLWZvcm1hdCBk YXRlLCB0aW1lLCBvciBkYXRlIGFuZCB0aW1lLgorICAgICB0ID0gMDogcmV0dXJuIHRpbWUgb25s eSBpZiB0aW1lIHdhcyBnaXZlbiBpbiBzLgorICAgICB0ID0gMTogYWx3YXlzIHJldHVybiB0aW1l ICgwMDowMDowMCBpZiBubyB0aW1lIGdpdmVuIGluIHMpLgorICAgICB0ID0gMjogYWxsb3cgdGlt ZSB0byBiZSA+IDI0OjAwOjAwLgorICAgUmV0dXJuczoKKyAgICAgTlVMTCBvbiBmYWlsdXJlOwor ICAgICBQb2ludGVyIHRvICJ5eXl5bW1kZCBoaDptbTpzcyIgKGxvY2FsIGRhdGUtdGltZSkgb24g c3VjY2Vzcy4KKyovCisKKy8qCisgIEJlZm9yZSBmaW5hbCByZWxlYXNlIHRoZSBmb2xsb3dpbmcg bG9uZyBsaW5lcyBzaG91bGQgYmUgd3JhcHBlZC4KKyAgVW50aWwgdGhlbiB3ZSBsZWF2ZSB0aGVt IGxvbmcgc2luY2Ugd3JhcHBpbmcgdGhlbSB3cmVja3MgRU1BQ1MncworICBDIGluZGVudGF0aW9u LgorKi8KKworLyogYXNjdGltZSBwYXR0ZXJuICovCitzdGF0aWMgY2hhciAqIGF0cDEgPSAiW0Et Wl1bYS16XVthLXpdIFtBLVpdW2Etel1bYS16XSBbIDAtOV1bMC05XSBbMC05XVswLTldOlswLTld WzAtOV06WzAtOV1bMC05XSBbMC05XVswLTldWzAtOV1bMC05XSI7CisKKy8qIGFzY3RpbWUgcGF0 dGVybiB3aXRoIHRpbWV6b25lICovCitzdGF0aWMgY2hhciAqIGF0cDIgPSAiW0EtWl1bYS16XVth LXpdIFtBLVpdW2Etel1bYS16XSBbIDAtOV1bMC05XSBbMC05XVswLTldOlswLTldWzAtOV06WzAt OV1bMC05XSBbQS1aXVtBLVpdW0EtWl0gWzAtOV1bMC05XVswLTldWzAtOV0iOworCisjZGVmaW5l IERBVEVCVUZMRU4gMTI3CisjZGVmaW5lIFlZWVlNTUREIDEyCisKKyNkZWZpbmUgaXNsZWFwKHkp ICgoKHkpICUgNCA9PSAwICYmICh5KSAlIDEwMCAhPSAwKSB8fCAoeSkgJSA0MDAgPT0gMCkKK3N0 YXRpYyBpbnQgbWRheXNbMTNdID0geyAwLCAzMSwgMjgsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEs IDMwLCAzMSwgMzAsIDMxIH07CisKKyNkZWZpbmUgTkVFRF9EQVlTIDEKKyNkZWZpbmUgTkVFRF9I UlMgIDIKKyNkZWZpbmUgTkVFRF9NSU5TIDMKKyNkZWZpbmUgTkVFRF9TRUNTIDQKKyNkZWZpbmUg TkVFRF9GUkFDIDUKKworI2RlZmluZSBERUxUQUJVRiAyNTYKK3N0YXRpYyBjaGFyIGRlbHRhYnVm W0RFTFRBQlVGXTsKK3N0YXRpYyBjaGFyICogZGVsdGFicCA9IGRlbHRhYnVmOworCitjaGFyICoK K2NtZGVsdGEoeXksIG1vLCBkZCwgaGgsIG1tLCBzcywgc2lnbiwgZHl5LCBkbW8sIGRkZCwgZGho LCBkbW0sIGRzcykKKyAgICBpbnQgeXksIG1vLCBkZCwgaGgsIG1tLCBzcywgc2lnbiwgZHl5LCBk bW8sIGRkZCwgZGhoLCBkbW0sIGRzczsKKy8qIGNtZGVsdGEgKi8geworICAgIGludCB6eXksIHpt bywgemRkLCB6aGgsIHptbSwgenNzOworICAgIGxvbmcgdDEsIHQyLCB0MywgdDQ7CisgICAgbG9u ZyBkMSA9IDAsIGQyLCBkMzsKKyAgICBjaGFyIGRhdGVidWZbREFURUJVRkxFTisxXTsKKworI2lm ZGVmIERFQlVHCisgICAgaWYgKGRlYmxvZykgeworCWRlYnVnKEYxMDEsImNtZGVsdGEgeXkiLCIi LHl5KTsKKwlkZWJ1ZyhGMTAxLCJjbWRlbHRhIG1vIiwiIixtbyk7CisJZGVidWcoRjEwMSwiY21k ZWx0YSBkZCIsIiIsZGQpOworCWRlYnVnKEYxMDEsImNtZGVsdGEgaGgiLCIiLGhoKTsKKwlkZWJ1 ZyhGMTAxLCJjbWRlbHRhIG1tIiwiIixtbSk7CisJZGVidWcoRjEwMSwiY21kZWx0YSBzcyIsIiIs c3MpOworCWRlYnVnKEYxMDEsImNtZGVsdGEgc2lnbiIsIiIsc2lnbik7CisJZGVidWcoRjEwMSwi Y21kZWx0YSBkeXkiLCIiLGR5eSk7CisJZGVidWcoRjEwMSwiY21kZWx0YSBkbW8iLCIiLGRtbyk7 CisJZGVidWcoRjEwMSwiY21kZWx0YSBkZGQiLCIiLGRkZCk7CisJZGVidWcoRjEwMSwiY21kZWx0 YSBkaGgiLCIiLGRoaCk7CisJZGVidWcoRjEwMSwiY21kZWx0YSBkbW0iLCIiLGRtbSk7CisJZGVi dWcoRjEwMSwiY21kZWx0YSBkc3MiLCIiLGRzcyk7CisgICAgfQorI2VuZGlmIC8qIERFQkxPRyAq LworCisgICAgaWYgKHl5IDwgMCB8fCB5eSA+IDk5OTkpIHsKKwltYWtlc3RyKCZjbWRhdGVtc2cs IkJhc2UgeWVhciBvdXQgb2YgcmFuZ2UiKTsKKwlkZWJ1ZyhGMTExLCJjbWRlbHRhIixjbWRhdGVt c2csLTEpOworCXJldHVybihOVUxMKTsKKyAgICB9CisgICAgaWYgKG1vIDwgMSB8fCBtbyA+IDEy KSB7CisJbWFrZXN0cigmY21kYXRlbXNnLCJCYXNlIG1vbnRoIG91dCBvZiByYW5nZSIpOworCWRl YnVnKEYxMTEsImNtZGVsdGEiLGNtZGF0ZW1zZywtMSk7CisJcmV0dXJuKE5VTEwpOworICAgIH0K KyAgICBpZiAoZGQgPCAxIHx8IGRkID4gbWRheXNbbW9dKSB7CisJbWFrZXN0cigmY21kYXRlbXNn LCJCYXNlIGRheSBvdXQgb2YgcmFuZ2UiKTsKKwlkZWJ1ZyhGMTExLCJjbWRlbHRhIixjbWRhdGVt c2csLTEpOworCXJldHVybihOVUxMKTsKKyAgICB9CisgICAgaWYgKGhoIDwgMCB8fCBoaCA+IDIz KSB7CisJbWFrZXN0cigmY21kYXRlbXNnLCJCYXNlIGhvdXIgb3V0IG9mIHJhbmdlIik7CisJZGVi dWcoRjExMSwiY21kZWx0YSIsY21kYXRlbXNnLC0xKTsKKwlyZXR1cm4oTlVMTCk7CisgICAgfQor ICAgIGlmIChtbSA8IDAgfHwgbW0gPiA1OSkgeworCW1ha2VzdHIoJmNtZGF0ZW1zZywiQmFzZSBt aW51dGUgb3V0IG9mIHJhbmdlIik7CisJZGVidWcoRjExMSwiY21kZWx0YSIsY21kYXRlbXNnLC0x KTsKKwlyZXR1cm4oTlVMTCk7CisgICAgfQorICAgIGlmIChzcyA8IDAgfHwgc3MgPiA2MCkgewor CW1ha2VzdHIoJmNtZGF0ZW1zZywiQmFzZSBzZWNvbmQgb3V0IG9mIHJhbmdlIik7CisJZGVidWco RjExMSwiY21kZWx0YSIsY21kYXRlbXNnLC0xKTsKKwlyZXR1cm4oTlVMTCk7CisgICAgfQorICAg IHNpZ24gPSAoc2lnbiA8IDApID8gLTEgOiAxOworICAgIGlmIChkbW8gIT0gMCkgeworICAgICAg ICBpZiAoc2lnbiA+IDApIHsKKyAgICAgICAgICAgIG1vICs9IChzaWduICogZG1vKTsKKyAgICAg ICAgICAgIGlmIChtbyA+IDEyKSB7CisgICAgICAgICAgICAgICAgeXkgKz0gbW8gLyAxMjsKKyAg ICAgICAgICAgICAgICBtbyA9IG1vICUgMTI7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxz ZSBpZiAoc2lnbiA8IDApIHsKKyAgICAgICAgICAgIHdoaWxlIChkbW8gPiAxMikgeworICAgICAg ICAgICAgICAgIHl5LS07CisgICAgICAgICAgICAgICAgZG1vIC09IDEyOworICAgICAgICAgICAg fQorICAgICAgICAgICAgaWYgKGRtbyA8IG1vKSB7CisgICAgICAgICAgICAgICAgbW8gLT0gZG1v OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB5eS0tOworICAgICAgICAg ICAgICAgIG1vID0gMTIgLSAoZG1vIC0gbW8pOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg ICAgfQorICAgIGlmIChkeXkgIT0gMCkgeworCXl5ICs9IChzaWduICogZHl5KTsKKwlpZiAoeXkg PiA5OTk5IHx8IHl5IDwgMCkgeworCSAgICBtYWtlc3RyKCZjbWRhdGVtc2csIlJlc3VsdCB5ZWFy IG91dCBvZiByYW5nZSIpOworCSAgICBkZWJ1ZyhGMTExLCJjbWRlbHRhIixjbWRhdGVtc2csLTEp OworCSAgICByZXR1cm4oTlVMTCk7CisJfQorICAgIH0KKyAgICBzcHJpbnRmKGRhdGVidWYsIiUw NGQlMDJkJTAyZCAlMDJkOiUwMmQ6JTAyZCIseXksbW8sZGQsaGgsbW0sc3MpOworICAgIGQxID0g bWpkKGRhdGVidWYpOworICAgIGRlYnVnKEYxMTEsImNtZGVsdGEgbWpkIixkYXRlYnVmLGQxKTsg ICAgCisKKyAgICB0MSA9IGhoICogMzYwMCArIG1tICogNjAgKyBzczsJLyogQmFzZSB0aW1lIHRv IHNlY3Mgc2luY2UgbWlkbmlnaHQgKi8KKyAgICB0MiA9IGRoaCAqIDM2MDAgKyBkbW0gKiA2MCAr IGRzczsJLyogRGVsdGEgdGltZSwgZGl0dG8gKi8KKyAgICB0MyA9IHQxICsgKHNpZ24gKiB0Mik7 CQkvKiBHZXQgc3VtIChvciBkaWZmZXJlbmNlKSAqLworICAgIAorICAgIGQyID0gKHNpZ24gKiBk ZGQpOwkJCS8qIERlbHRhIGRheXMgKi8KKyAgICBkMiArPSB0MyAvIDg2NDAwTDsKKworICAgIHQ0 ID0gdDMgJSA4NjQwMEw7CQkJLyogRnJhY3Rpb25hbCBwYXJ0IG9mIGRheSAqLworICAgIGlmICh0 NCA8IDApIHsJCQkvKiBJZiBuZWdhdGl2ZSAqLworCWQyLS07CQkJCS8qIG9uZSBsZXNzIGRlbHRh IGRheSAqLworCXQ0ICs9IDg2NDAwTDsJCQkvKiBnZXQgcG9zaXRpdmUgc2Vjb25kcyAqLworICAg IH0KKyAgICBoaCA9IChpbnQpICh0NCAvIDM2MDBMKTsKKyAgICBtbSA9IChpbnQpICh0NCAlIDM2 MDBMKSAvIDYwOworICAgIHNzID0gKGludCkgKHQ0ICUgMzYwMEwpICUgNjA7CisKKyAgICBzcHJp bnRmKGRhdGVidWYsIiVzICUwMmQ6JTAyZDolMDJkIiwgbWpkMmRhdGUoZDErZDIpLGhoLG1tLHNz KTsKKyAgICB7CisJaW50IGxlbiwgaywgbjsKKwljaGFyICogcDsKKwlsZW4gPSBzdHJsZW4oZGF0 ZWJ1Zik7CisJayA9IGRlbHRhYnAgLSAoY2hhciAqKWRlbHRhYnVmOwkvKiBTcGFjZSB1c2VkICov CisJbiA9IERFTFRBQlVGIC0gayAtIDE7CQkvKiBTcGFjZSBsZWZ0ICovCisJaWYgKG4gPCBsZW4p IHsJCQkvKiBOb3QgZW5vdWdoPyAqLworCSAgICBkZWx0YWJwID0gZGVsdGFidWY7CQkvKiBXcmFw IGFyb3VuZCAqLworCSAgICBuID0gREVMVEFCVUY7CisJfQorCWNrc3RybmNweShkZWx0YWJwLGRh dGVidWYsbik7CisJcCA9IGRlbHRhYnA7CisJZGVsdGFicCArPSBsZW4gKyAxOworCXJldHVybihw KTsKKyAgICB9Cit9CisKKworLyogQ29udmVydCBEZWx0YSBUaW1lIHRvIFNlY29uZHMgKi8KKwor aW50CitkZWx0YTJzZWMocyxyZXN1bHQpIGNoYXIgKiBzOyBsb25nICogcmVzdWx0OyB7CisgICAg bG9uZyBkZGF5cyA9IDBMLCB6ejsKKyAgICBpbnQgZHNpZ24gPSAxLCBkaG91cnMgPSAwLCBkbWlu cyA9IDAsIGRzZWNzID0gMCwgdW5pdHM7CisgICAgaW50IHN0YXRlID0gTkVFRF9EQVlTOworICAg IGNoYXIgKnAsICpwMiwgKnAzLCBjID0gMDsKKyAgICBjaGFyIGJ1Zls2NF07CisKKyAgICBpZiAo IXMpIHMgPSAiIjsKKyAgICBpZiAoISpzKQorICAgICAgcmV0dXJuKC0xKTsKKyAgICBpZiAoKGlu dClzdHJsZW4ocykgPiA2MykKKyAgICAgIHJldHVybigtMSk7CisgICAgY2tzdHJuY3B5KGJ1Zixz LDY0KTsKKyAgICBwID0gYnVmOworCisgICAgaWYgKCpwICE9ICcrJyAmJiAqcCAhPSAnLScpCisg ICAgICByZXR1cm4oLTEpOworCisgICAgaWYgKCpwKysgPT0gJy0nKQorICAgICAgZHNpZ24gPSAt MTsKKyAgICB3aGlsZSAoKnAgPT0gU1ApCQkJLyogU2tpcCBpbnRlcnZlbmluZyBzcGFjZXMgKi8K KyAgICAgIHArKzsKKworICAgIHdoaWxlIChzdGF0ZSkgewkJCS8qIEZTQSB0byBwYXJzZSBkZWx0 YSB0aW1lICovCisJaWYgKHN0YXRlIDwgMCB8fCAhaXNkaWdpdCgqcCkpCisJICByZXR1cm4oLTEp OworCXAyID0gcDsJCQkJLyogR2V0IG5leHQgbnVtZXJpYyBmaWVsZCAqLworCXdoaWxlIChpc2Rp Z2l0KCpwMikpCisJICBwMisrOworCWMgPSAqcDI7CQkJLyogQW5kIGJyZWFrIGNoYXJhY3RlciAq LworCSpwMiA9IE5VTDsJCQkvKiBUZXJtaW5hdGUgdGhlIG51bWJlciAqLworCXN3aXRjaCAoc3Rh dGUpIHsJCS8qIEludGVycHJldCBhY2NvcmRpbmcgdG8gc3RhdGUgKi8KKwkgIGNhc2UgTkVFRF9E QVlTOgkJLyogSW5pdGlhbCAqLworCSAgICBpZiAoKGMgPT0gJy0nKSB8fAkJLyogVk1TIGZvcm1h dCAqLworCQkoKGMgPT0gJ2QnIHx8IGMgPT0gJ0QnKQorCQkgJiYgIWlzYWxwaGEoKihwMisxKSkp KSB7IC8qIERheXMgKi8KKwkJZGRheXMgPSBhdG9sKHApOworCQlpZiAoISoocDIrMSkpCQkJCisJ CSAgc3RhdGUgPSAwOworCQllbHNlCQkJLyogaWYgYW55dGhpbmcgaXMgbGVmdCAqLworCQkgIHN0 YXRlID0gTkVFRF9IUlM7CS8qIG5vdyB3ZSB3YW50IGhvdXJzLiAqLworCSAgICB9IGVsc2UgaWYg KGMgPT0gJzonKSB7CS8qIGRlbGltaXRlciBpcyBjb2xvbiAqLworCQlkaG91cnMgPSBhdG9pKHAp OwkvKiBzbyBpdCdzIGhvdXJzICovCisJCXN0YXRlID0gTkVFRF9NSU5TOwkvKiBub3cgd2Ugd2Fu dCBtaW51dGVzICovCisJICAgIH0gZWxzZSBpZiAoIWMpIHsJCS8qIGVuZCBvZiBzdHJpbmcgKi8K KwkJZGhvdXJzID0gYXRvaShwKTsJLyogaXQncyBzdGlsbCBob3VycyAqLworCQlzdGF0ZSA9IDA7 CQkvKiBhbmQgd2UncmUgZG9uZSAqLworCSAgICB9IGVsc2UgaWYgKGlzYWxwaGEoYykgfHwgYyA9 PSBTUCkgeworCQlpZiAoYyA9PSBTUCkgewkJLyogSXQncyBhIGtleXdvcmQ/ICovCisJCSAgICBw MisrOwkJLyogU2tpcCBzcGFjZXMgKi8KKwkJICAgIHdoaWxlICgqcDIgPT0gU1ApCisJCSAgICAg IHAyKys7CisJCX0gZWxzZSB7CQkvKiBvciByZXBsYWNlIGZpcnN0IGxldHRlciAqLworCQkgICAg KnAyID0gYzsKKwkJfQorCQlwMyA9IHAyOwkJLyogcDIgcG9pbnRzIHRvIGJlZ2lubmluZyBvZiBr ZXl3b3JkICovCisJCXdoaWxlIChpc2FscGhhKCpwMykpCS8qIEZpbmQgZW5kIG9mIGtleXdvcmQg Ki8KKwkJICBwMysrOworCQljID0gKnAzOwkJLyogTlVMIGl0IG91dCBzbyB3ZSBjYW4gbG9vayBp dCB1cCAqLworCQlpZiAoKnAzKQkJLyogcDMgcG9pbnRzIHRvIGtleXdvcmQgdGVybWluYXRvciAq LworCQkgICpwMyA9IE5VTDsKKwkJaWYgKCh1bml0cyA9IGxvb2t1cCh0aW1ldW5pdHMscDIsbnVu aXRzLE5VTEwpKSA8IDApCisJCSAgcmV0dXJuKC0xKTsKKwkJKnAyID0gTlVMOwkJLyogUmUtdGVy bWluYXRlIHRoZSBudW1iZXIgKi8KKwkJKnAzID0gYzsKKwkJd2hpbGUgKCpwMyA9PSBTUCkJLyog UG9pbnQgYXQgZmllbGQgYWZ0ZXIgdW5pdHMgKi8KKwkJICBwMysrOworCQlwMiA9IHAzOworCQlz d2l0Y2ggKHVuaXRzKSB7CisJCSAgY2FzZSBUVV9EQVlTOgorCQkgICAgZGRheXMgPSBhdG9sKHAp OworCQkgICAgYnJlYWs7CisJCSAgZGVmYXVsdDoKKwkJICAgIHJldHVybigtMSk7CisJCX0KKwkJ aWYgKCpwMikgeworCQkgICAgc3RhdGUgPSBORUVEX0hSUzsKKwkJICAgIHAyLS07CisJCX0gZWxz ZQorCQkgIHN0YXRlID0gMDsKKwkgICAgfSBlbHNlIHsJCQkvKiBBbnl0aGluZyBlbHNlICovCisJ CXN0YXRlID0gLTE7CQkvKiBpcyBhbiBlcnJvciAqLworCSAgICB9CisJICAgIGJyZWFrOworCSAg Y2FzZSBORUVEX0hSUzoJCS8qIExvb2tpbmcgZm9yIGhvdXJzICovCisJICAgIGlmIChjID09ICc6 JykgeworCQlkaG91cnMgPSBhdG9pKHApOworCQlzdGF0ZSA9IE5FRURfTUlOUzsKKwkgICAgfSBl bHNlIGlmICghYykgeworCQlkaG91cnMgPSBhdG9pKHApOworCQlzdGF0ZSA9IDA7CisJICAgIH0g ZWxzZSB7CisJCXN0YXRlID0gLTE7CisJICAgIH0KKwkgICAgYnJlYWs7CisJICBjYXNlIE5FRURf TUlOUzoJCS8qIExvb2tpbmcgZm9yIG1pbnV0ZXMgKi8KKwkgICAgaWYgKGMgPT0gJzonKSB7CisJ CWRtaW5zID0gYXRvaShwKTsKKwkJc3RhdGUgPSBORUVEX1NFQ1M7CisJICAgIH0gZWxzZSBpZiAo IWMpIHsKKwkJZG1pbnMgPSBhdG9pKHApOworCQlzdGF0ZSA9IDA7CisJICAgIH0gZWxzZSB7CisJ CXN0YXRlID0gLTE7CisJICAgIH0KKwkgICAgYnJlYWs7CisJICBjYXNlIE5FRURfU0VDUzoJCS8q IExvb2tpbmcgZm9yIHNlY29uZHMgKi8KKwkgICAgaWYgKGMgPT0gJy4nKSB7CisJCWRzZWNzID0g YXRvaShwKTsKKwkJc3RhdGUgPSBORUVEX0ZSQUM7CisJICAgIH0gZWxzZSBpZiAoIWMpIHsKKwkJ ZHNlY3MgPSBhdG9pKHApOworCQlzdGF0ZSA9IDA7CisJICAgIH0gZWxzZSB7CisJCXN0YXRlID0g LTE7CisJICAgIH0KKwkgICAgYnJlYWs7CisJICBjYXNlIE5FRURfRlJBQzoJCS8qIEZyYWN0aW9u IG9mIHNlY29uZCAqLworCSAgICBpZiAoIWMgJiYgcmRpZ2l0cyhwKSkgeworCQlpZiAoKnAgPiAn NCcpCisJCSAgZHNlY3MrKzsKKwkJc3RhdGUgPSAwOworCSAgICB9IGVsc2UgeworCQlzdGF0ZSA9 IC0xOworCSAgICB9CisJICAgIGJyZWFrOworCX0KKwlpZiAoYykJCQkJLyogbmV4dCBmaWVsZCBp ZiBhbnkgKi8KKwkgIHAgPSBwMiArIDE7CisgICAgfQorICAgIGlmIChzdGF0ZSA8IDApCisgICAg ICByZXR1cm4oLTEpOworCisgICAgLyogaWYgZGF5cyA+IDI0ODU0IGFuZCBzaXplb2YobG9uZykg PT0gMzIgd2Ugb3ZlcmZsb3cgKi8KKworICAgIHp6ID0gZGRheXMgKiA4NjQwMEw7CisgICAgaWYg KHp6IDwgMEwpCQkJLyogVGhpcyBjYXRjaGVzIGl0ICovCisgICAgICByZXR1cm4oLTIpOworICAg IHp6ICs9IGRob3VycyAqIDM2MDBMICsgZG1pbnMgKiA2MEwgKyBkc2VjczsKKyAgICB6eiAqPSBk c2lnbjsKKyAgICAqcmVzdWx0ID0geno7CisgICAgcmV0dXJuKDApOworfQorCisKK2NoYXIgKgor Y21jdnRkYXRlKHMsdCkgY2hhciAqIHM7IGludCB0OyB7CisgICAgaW50IHgsIGksIGosIGssIGho LCBtbSwgc3MsIGZmLCBwbWZsYWcgPSAwLCBub2RhdGUgPSAwLCBsZW4sIGRvdzsKKyAgICBpbnQg dW5pdHMsIGlzZ210ID0gMCwgZ210c2lnbiA9IDAsIGQgPSAwLCBzdGF0ZSA9IDAsIG5kYXk7Cisg ICAgaW50IGtuID0gMCwgZnRbOF0sIGlzbGV0dGVyID0gMCwgZjJsZW4gPSAwOworCisgICAgaW50 IHpoaCA9IDA7CQkJLyogVGltZXpvbmUgYWRqdXN0bWVudHMgKi8KKyAgICBpbnQgem1tID0gMDsK KyAgICBpbnQgemRkID0gMDsKKworICAgIGludCBkc2lnbiA9IDE7CQkJLyogRGVsdGEtdGltZSBh ZGp1c3RtZW50cyAqLworICAgIGludCBkZGF5cyA9IDA7CisgICAgaW50IGRtb250aHMgPSAwOwor ICAgIGludCBkeWVhcnMgPSAwOworICAgIGludCBkaG91cnMgPSAwOworICAgIGludCBkbWlucyA9 IDA7CisgICAgaW50IGRzZWNzID0gMDsKKyAgICBpbnQgaGF2ZWRlbHRhID0gMDsKKworICAgIGNo YXIgKiBmbGRbOF0sICogcCA9ICIiLCAqIHAyLCAqIHAzOyAvKiBBc3NvcnRlZCBidWZmZXJzIGFu ZCBwb2ludGVycyAgKi8KKyAgICBjaGFyICogczIsICogczM7CisgICAgY2hhciAqIHllYXIgPSBO VUxMLCAqIG1vbnRoID0gTlVMTCwgKiBkYXkgPSBOVUxMOworICAgIGNoYXIgKiBob3VyID0gIjAw IiwgKiBtaW4gPSAiMDAiLCAqIHNlYyA9ICIwMCI7CisgICAgY2hhciBkYXRlc2VwID0gMDsKKyAg ICBjaGFyIHRtcGJ1Zls4XTsKKyAgICBjaGFyIHhidWZbREFURUJVRkxFTisxXTsKKyAgICBjaGFy IHlidWZbREFURUJVRkxFTisxXTsKKyAgICBjaGFyIHpidWZbREFURUJVRkxFTisxXTsKKyAgICBj aGFyIHl5eXltbWRkW1lZWVlNTUREXTsKKyAgICBjaGFyIGRidWZbMjZdOworICAgIGNoYXIgZGF5 YnVmWzNdOworICAgIGNoYXIgbW9uYnVmWzNdOworICAgIGNoYXIgeWVhcmJ1Zls1XTsKKyAgICBj aGFyIHRpbWJ1ZlsxNl0sICp0YiwgY2M7CisgICAgY2hhciAqIGRwID0gTlVMTDsJCQkvKiBSZXN1 bHQgcG9pbnRlciAqLworCisgICAgaWYgKCFzKSBzID0gIiI7CisgICAgdG1wYnVmWzBdID0gTlVM OworCisgICAgd2hpbGUgKCpzID09IFNQKSBzKys7CQkvKiBHb2JibGUgYW55IGxlYWRpbmcgYmxh bmtzICovCisgICAgaWYgKGlzYWxwaGEoKnMpKQkJCS8qIFJlbWVtYmVyIGlmIDFzdCBjaGFyIGlz IGEgbGV0dGVyICovCisgICAgICBpc2xldHRlciA9IDE7CisKKyAgICBsZW4gPSBzdHJsZW4ocyk7 CisgICAgZGVidWcoRjExMCwiY21jdnRkYXRlIixzLGxlbik7CisgICAgaWYgKGxlbiA9PSAwKSB7 CQkJLyogTm8gYXJnIC0gcmV0dXJuIGN1cnJlbnQgZGF0ZS10aW1lICovCisJZHAgPSBja2RhdGUo KTsKKwlnb3RvIHhjdnRkYXRlOworICAgIH0KKyAgICBpZiAobGVuID4gREFURUJVRkxFTikgewkJ LyogQ2hlY2sgbGVuZ3RoIG9mIGFyZyAqLworCW1ha2VzdHIoJmNtZGF0ZW1zZywiRGF0ZS10aW1l IHN0cmluZyB0b28gbG9uZyIpOworCWRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSIsY21kYXRlbXNnLC0x KTsKKwlyZXR1cm4oTlVMTCk7CisgICAgfQorICAgIGhoID0gMDsJCQkJLyogSW5pdCB0aW1lIHRv IDAwOjAwOjAwLjAgKi8KKyAgICBtbSA9IDA7CisgICAgc3MgPSAwOworICAgIGZmID0gMDsKKyAg ICB6dGltZSgmcCk7CisgICAgaWYgKCFwKQorICAgICAgcCAgPSAiIjsKKyAgICBpZiAoKnApIHsJ CQkJLyogSW5pdCB0aW1lIHRvIGN1cnJlbnQgdGltZSAqLworCXggPSBja3N0cm5jcHkoZGJ1Zixw LDI2KTsKKwlpZiAoeCA+IDE3KSB7CisJICAgIGhoID0gYXRvaSgmZGJ1ZlsxMV0pOworCSAgICBt bSA9IGF0b2koJmRidWZbMTRdKTsKKwkgICAgc3MgPSBhdG9pKCZkYnVmWzE3XSk7CisJfQorICAg IH0KKyAgICBja3N0cm5jcHkoeXl5eW1tZGQsenpuZGF0ZSgpLFlZWVlNTUREKTsgLyogSW5pdCBk YXRlIHRvIGN1cnJlbnQgZGF0ZSAqLworICAgIGNrc3RybmNweSh5ZWFyYnVmLHl5eXltbWRkLDUp OworICAgIGNrc3RybmNweShtb25idWYsJnl5eXltbWRkWzRdLDMpOworICAgIGNrc3RybmNweShk YXlidWYsJnl5eXltbWRkWzZdLDMpOworICAgIHllYXIgPSB5ZWFyYnVmOworICAgIG1vbnRoID0g bW9uYnVmOworICAgIGRheSA9IGRheWJ1ZjsKKyAgICBuZGF5ID0gYXRvaShkYXlidWYpOworICAg IGNrc3RybmNweSh4YnVmLHMsREFURUJVRkxFTik7CS8qIE1ha2UgYSBsb2NhbCBjb3B5IHdlIGNh biBwb2tlICovCisgICAgcyA9IHhidWY7CQkJCS8qIFBvaW50IHRvIGl0ICovCisgICAgc1tsZW5d ID0gTlVMOworICAgIGlmIChzWzBdID09ICc6JykgeworCXAgPSBzOworCWdvdG8gZG90aW1lOwor ICAgIH0KKyAgICAvKiBTcGVjaWFsIHByZXNldCBmb3JtYXRzLi4uICovCisKKyAgICBpZiAobGVu ID49IDE0KSB7CQkJLyogRlRQIE1EVE0gYWxsLW51bWVyaWMgZGF0ZSAqLworCWNoYXIgYzsKKwlj ID0gc1sxNF07CQkJLyogZS5nLiAxOTk4MDYxNTEwMDA0NS4wMTQgKi8KKwlzWzE0XSA9IE5VTDsK Kwl4ID0gcmRpZ2l0cyhzKTsKKwlzWzE0XSA9IGM7CisJaWYgKHgpIHsKKwkgICAgY2tzdHJuY3B5 KHl5eXltbWRkLHMsOCsxKTsKKwkgICAgeWVhciA9IE5VTEw7CisJICAgIHAgPSAmc1s4XTsKKwkg ICAgZ290byBkb3RpbWU7CisJfQorICAgIH0KKyAgICB4ID0gMDsJCQkJLyogQmVjb21lcyA+IDAg Zm9yIGFzY3RpbWUgZm9ybWF0ICovCisgICAgaWYgKGlzYWxwaGEoc1swXSkpIHsKKwlpZiAobGVu ID09IDI0KSB7CQkvKiBBc2N0aW1lIGZvcm1hdD8gKi8KKwkgICAgLyogU2F0IEp1bCAxNCAxNTo1 NzozMiAyMDAxICovCisJICAgIHggPSBja21hdGNoKGF0cDEscywwLDApOworCSAgICBkZWJ1ZyhG MTExLCJjbWN2dGRhdGUgYXNjdGltZSIscyx4KTsKKwl9IGVsc2UgaWYgKGxlbiA9PSAyOCkgewkJ LyogT3IgQXNjdGltZSBwbHVzIHRpbWV6b25lPyAqLworCSAgICAvKiBTYXQgSnVsIDE0IDE1OjE1 OjM5IEVEVCAyMDAxICovCisJICAgIHggPSBja21hdGNoKGF0cDIscywwLDApOworCSAgICBkZWJ1 ZyhGMTExLCJjbWN2dGRhdGUgYXNjdGltZSt0aW1lem9uZSIscyx4KTsKKwl9CisgICAgfQorICAg IGlmICh4ID4gMCkgewkJCS8qIEFzY3RpbWUgZm9ybWF0ICovCisgICAgICAgIGludCB4eDsKKyAg ICAgICAgc3RybmNweSh5ZWFyYnVmLHMgKyBsZW4gLSA0LDQpOworICAgICAgICB5ZWFyYnVmWzRd ID0gTlVMOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQorICAgICAgICAgIHRtcGJ1 ZltpXSA9IHNbaSs0XTsKKyAgICAgICAgdG1wYnVmWzNdID0gTlVMOworCWlmICgoeHggPSBsb29r dXAoY21vbnRocyx0bXBidWYsMTIsTlVMTCkpIDwgMCkgeworCSAgICBtYWtlc3RyKCZjbWRhdGVt c2csIkludmFsaWQgbW9udGgiKTsKKwkgICAgZGVidWcoRjExMSwiY21jdnRkYXRlIixjbWRhdGVt c2csLTEpOworCSAgICByZXR1cm4oTlVMTCk7CisJfQorICAgICAgICBkZWJ1ZyhGMTAxLCJjbWN2 dGRhdGUgYXNjdGltZSBtb250aCIsIiIseHgpOworICAgICAgICBtb25idWZbMF0gPSAoeHggLyAx MCkgKyAnMCc7IAorICAgICAgICBtb25idWZbMV0gPSAoeHggJSAxMCkgKyAnMCc7IAorICAgICAg ICBtb25idWZbMl0gPSBOVUw7CisgICAgICAgIGRheWJ1ZlswXSA9IChzWzhdID09ICcgJyA/ICcw JyA6IHNbOF0pOworICAgICAgICBkYXlidWZbMV0gPSBzWzldOworICAgICAgICBkYXlidWZbMl0g PSBOVUw7CisJeGJ1ZlswXSA9IFNQOworICAgICAgICBmb3IgKGkgPSAxMTsgaSA8IDE5OyBpKysp CisgICAgICAgICAgeGJ1ZltpLTEwXSA9IHNbaV07CisgICAgICAgIHhidWZbOV0gPSBOVUw7CisJ Y2ttYWttc2coemJ1ZiwxOCx5ZWFyYnVmLG1vbmJ1ZixkYXlidWYseGJ1Zik7CisJZGVidWcoRjEx MCwiY21jdnRkYXRlIGFzY3RpbWUgb2siLHpidWYsMCk7CisJaWYgKGxlbiA9PSAyNCkgeworCSAg ICBkcCA9IHpidWY7CisJICAgIGdvdG8geGN2dGRhdGU7CisJfSBlbHNlIHsKKwkgICAgaW50IG47 CisJICAgIG4gPSBja21ha21zZyh5YnVmLERBVEVCVUZMRU4tNCx6YnVmLCIgIixOVUxMLE5VTEwp OworCSAgICB5YnVmW24rK10gPSBzWzIwXTsKKwkgICAgeWJ1ZltuKytdID0gc1syMV07CisJICAg IHlidWZbbisrXSA9IHNbMjJdOworCSAgICB5YnVmW24rK10gPSBOVUw7CisJICAgIGNrc3RybmNw eSh4YnVmLHlidWYsREFURUJVRkxFTik7CisJICAgIHMgPSB4YnVmOworCSAgICBpc2xldHRlciA9 IDA7CisJfQorICAgIH0KKworLyogQ2hlY2sgZm9yIGRheSBvZiB3ZWVrICovCisKKyAgICBwID0g czsKKyAgICB3aGlsZSAoKnAgPT0gU1ApIHArKzsKKyAgICBkb3cgPSAtMTsKKyAgICBpZiAoKnAp IHsKKwlwMiA9IHA7CisJY2MgPSBOVUw7CisJd2hpbGUgKDEpIHsKKwkgICAgaWYgKCpwMiA9PSAn LCcgfHwgKnAyID09IFNQIHx8ICEqcDIpIHsKKwkJY2MgPSAqcDI7CQkvKiBTYXZlIGJyZWFrIGNo YXIgKi8KKwkJKnAyID0gTlVMOwkJLyogTlVMIGl0IG91dCAqLworCQlwMyA9IHAyOwkJLyogUmVt ZW1iZXIgdGhpcyBzcG90ICovCisJCWlmICgoZG93ID0gbG9va3VwKGRheXNvZndlZWsscCw3LE5V TEwpKSA+IC0xKSB7CisJCSAgICBkZWJ1ZyhGMTExLCJjbWN2dGRhdGUgZG93IixwLGRvdyk7CisJ CSAgICBzID0gcDI7CisJCSAgICBpZiAoY2MgPT0gJywnIHx8IGNjID09IFNQKSB7IC8qIFBvaW50 IHRvIG5leHQgZmllbGQgKi8KKwkJCXMrKzsKKwkJCXdoaWxlICgqcyA9PSBTUCkgcysrOworCQkg ICAgfQorCQkgICAgcCA9IHM7CisJCSAgICBkZWJ1ZyhGMTExLCJjbWN2dGRhdGUgZG93IG5ldyBw IixwLGRvdyk7CisJCSAgICBicmVhazsKKwkJfSBlbHNlIGlmIChpc2FscGhhKCpwKSAmJiBjYyA9 PSAnLCcpIHsKKwkJICAgIG1ha2VzdHIoJmNtZGF0ZW1zZywiVW5yZWNvZ25pemVkIGRheSBvZiB3 ZWVrIik7CisJCSAgICBkZWJ1ZyhGMTExLCJjbWN2dGRhdGUiLGNtZGF0ZW1zZywtMSk7CisJCSAg ICByZXR1cm4oTlVMTCk7CisJCX0gZWxzZSB7CisJCSAgICAqcDMgPSBjYzsKKwkJICAgIGJyZWFr OworCQl9CisJICAgIH0KKwkgICAgcDIrKzsKKwl9CisgICAgfQorICAgIGxlbiA9IHN0cmxlbihz KTsJCS8qIFVwZGF0ZSBsZW5ndGggKi8KKyAgICBkZWJ1ZyhGMTExLCJjbWN2dGRhdGUgcyIscyxs ZW4pOworCisgICAgZGVidWcoRjExMSwiY21jdnRkYXRlIGRvdyIscyxkb3cpOworICAgIGlmIChk b3cgPiAtMSkgewkJCS8qIEhhdmUgYSBkYXktb2Ytd2VlayBudW1iZXIgKi8KKwlsb25nIHp6OyBp bnQgbiwgajsKKwl6eiA9IG1qZCh6em5kYXRlKCkpOwkJLyogR2V0IHRvZGF5J3MgTUpEICovCisJ ZGVidWcoRjExMSwiY21jdnRkYXRlIHp6IiwiIix6eik7CisJaiA9ICgoKGludCkoenogJSA3TCkp ICsgMykgJSA3OyAvKiBUb2RheSdzIGRheS1vZi13ZWVrIG51bWJlciAqLworCWRlYnVnKEYxMTEs ImNtY3Z0ZGF0ZSBqIiwiIixqKTsKKwloaCA9IDA7CQkJCS8qIEluaXQgdGltZSB0byBtaWRuaWdo dCAqLworCW1tID0gMDsKKwlzcyA9IDA7CisJaWYgKGogPT0gZG93KSB7CisJICAgIGNrc3RybmNw eSh5eXl5bW1kZCx6em5kYXRlKCksWVlZWU1NREQpOworCSAgICB5ZWFyID0gTlVMTDsKKwl9IGVs c2UgeworCSAgICBuID0gZG93IC0gajsJCS8qIERheXMgZnJvbSBub3cgKi8KKwkgICAgaWYgKGRv dyA8IGopCisJICAgICAgbiArPSA3OworCSAgICBpZiAobiA8IDApIG4gKz0gNzsJCS8qIEFkZCB0 byBNSkQgKi8KKwkgICAgenogKz0gbjsKKwkgICAgY2tzdHJuY3B5KHl5eXltbWRkLG1qZDJkYXRl KHp6KSxZWVlZTU1ERCk7IC8qIE5ldyBkYXRlICovCisJICAgIHllYXIgPSBOVUxMOworCX0KKwlk ZWJ1ZyhGMTExLCJjbWN2dGRhdGUgQSIseXl5eW1tZGQsbGVuKTsKKwlpZiAobGVuID09IDApIHsJ CQkvKiBObyBtb3JlIGZpZWxkcyBhZnRlciB0aGlzICovCisJICAgIGNrbWFrbXNnKHpidWYsMTgs eXl5eW1tZGQsIiAwMDowMDowMCIsTlVMTCxOVUxMKTsKKwkgICAgZHAgPSB6YnVmOworCSAgICBn b3RvIHhjdnRkYXRlOworCX0KKwlpc2xldHRlciA9IDA7CisJaWYgKHJkaWdpdHMocCkgJiYgbGVu IDwgOCkJLyogTmV4dCBmaWVsZCBpcyB0aW1lPyAqLworCSAgZ290byBkb3RpbWU7CQkJLyogSWYg c28gZ28gc3RyYWlnaHQgdG8gdGltZSBzZWN0aW9uICovCisJaWYgKGlzZGlnaXQoKnApKSB7CisJ ICAgIGlmICgqKHArMSkgPT0gJzonKQorCSAgICAgIGdvdG8gZG90aW1lOworCSAgICBlbHNlIGlm IChpc2RpZ2l0KCoocCsxKSkgJiYgKCoocCsyKSA9PSAnOicpKQorCSAgICAgIGdvdG8gZG90aW1l OworCX0KKyAgICB9CisgICAgZGVidWcoRjExMSwiY21jdnRkYXRlIEIgcyIscyxkb3cpOworICAg IGRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSBCIHAiLHAsZG93KTsKKworICAgIGlmICgqcyA9PSAnKycg fHwgKnMgPT0gJy0nKSB7CS8qIERlbHRhIHRpbWUgb25seSAtIHNraXAgYWhlYWQuICovCisJcCA9 IHM7CisJZ290byBkZWx0YTsKKyAgICB9CisjaWZkZWYgQ09NTUVOVAorLyoKKyAgV2hhdCBpcyB0 aGUgcHVycG9zZSBvZiB0aGlzPyAgSXQgYnJlYWtzIHBhcnNpbmcgb2YgZW1haWwgZGF0ZXMgbGlr ZQorICAiV2VkLCAxMyBGZWIgMjAwMiAxNzo0MzowMiAtMDgwMCAoUFNUKSIuICBSZW1vdmluZyB0 aGlzIGNvZGUgZml4ZXMgdGhlCisgIHByb2JsZW0gYW5kIEtlcm1pdCBzdGlsbCBwYXNzZXMgdGhl ICdkYXRlcycgc2NyaXB0LgorICAtIGZkYywgU2F0IE5vdiAyNiAxMDo1Mjo0NSAyMDA1LgorKi8K KyAgICBpZiAoZG93ID4gLTEpIHsKKwkvKiBEYXkgb2Ygd2VlayBnaXZlbiBmb2xsb3dlZCBieSBz b21ldGhpbmcgdGhhdCBpcyBub3QgYSB0aW1lICovCisJLyogb3IgYSBkZWx0YSBzbyBpdCBjYW4n dCBiZSB2YWxpZCAqLworCW1ha2VzdHIoJmNtZGF0ZW1zZywiSW52YWxpZCB0b2tlbnMgYWZ0ZXIg ZGF5IG9mIHdlZWsiKTsKKwlkZWJ1ZyhGMTExLCJjbWN2dGRhdGUgZmFpbCIsY21kYXRlbXNnLC0x KTsKKwlyZXR1cm4oTlVMTCk7CisgICAgfQorI2VuZGlmCS8qIENPTU1FTlQgKi8KKworICAgIC8q IEhhbmRsZSAidG9kYXkiLCAieWVzdGVyZGF5IiwgInRvbW9ycm93IiwgYW5kICsvLSBuIHVuaXRz ICovCisKKyAgICBpZiAoY2tzdHJjaHIoIlR0WXlObiIsc1swXSkpIHsKKwlpbnQgaSwgaywgbiwg bWludXMgPSAwOworCWNoYXIgYzsKKwlsb25nIGpkOworCWpkID0gbWpkKGNrZGF0ZSgpKTsKKwlk ZWJ1ZyhGMTExLCJjbWN2dGRhdGUgbWpkIixzLGpkKTsKKworCS8qIFN5bWJvbGljIGRhdGU6IFRP REFZLCBUT01PUlJPVywgZXRjLi4uPyAqLworCisJczIgPSBzOwkJCQkvKiBGaW5kIGVuZCBvZiBr ZXl3b3JkICovCisJaSA9IDA7CisJd2hpbGUgKGlzYWxwaGEoKnMyKSkgewkJLyogYW5kIGdldCBp dHMgbGVuZ3RoICovCisJICAgIGkrKzsKKwkgICAgczIrKzsKKwl9CisJYyA9ICpzMjsJCQkvKiBa YXAgYnV0IHNhdmUgZGVsaW1pdGVyICovCisJKnMyID0gTlVMOworCWsgPSBsb29rdXAoc3ltZGF5 dGFiLHMsbnN5bWRheXMsTlVMTCk7IC8qIExvb2sgdXAga2V5d29yZCAqLworCSpzMiA9IGM7CQkJ LyogUmVwbGFjZSBkZWxpbWl0ZXIgKi8KKwlpZiAoayA8IDApCQkJLyogS2V5d29yZCBub3QgZm91 bmQgKi8KKwkgIGdvdG8gbm9ybWFsOworCXMzID0gJnNbaV07CisJd2hpbGUgKCpzMyA9PSBTUCkJ CS8qIFNraXAgd2hpdGVzcGFjZSAqLworCSAgczMrKzsKKwlpZiAoKnMzID09ICdfJyB8fCAqczMg PT0gJzonKQorCSAgczMrKzsKKworCXN3aXRjaCAoaykgewkJCS8qIEhhdmUga2V5d29yZCAqLwor CSAgY2FzZSBTWU1fTk9XOgkJCS8qIE5PVyAqLworCSAgICBja3N0cm5jcHkoeWJ1Zixja2RhdGUo KSxEQVRFQlVGTEVOKTsKKwkgICAgY2tzdHJuY3B5KHl5eXltbWRkLHlidWYsWVlZWU1NREQpOwor CSAgICB5ZWFyID0gTlVMTDsKKwkgICAgaWYgKCpzMykgewkJCS8qIE5vIG92ZXJ3cml0aW5nIGN1 cnJlbnQgdGltZS4gKi8KKwkJY2tzdHJuY2F0KHlidWYsIiAiLERBVEVCVUZMRU4pOworCQlja3N0 cm5jYXQoeWJ1ZixzMyxEQVRFQlVGTEVOKTsKKwkgICAgfQorCSAgICBicmVhazsKKwkgIGRlZmF1 bHQ6CQkJLyogWWVzdGVyZGF5LCBUb2RheSwgYW5kIFRvbW9ycm93ICovCisJICAgIGlmIChrID09 IFNZTV9UT01PKSB7CS8qIFRPTU9SUk9XICovCisJCXN0cm5jcHkoeWJ1ZixtamQyZGF0ZShqZCsx KSw4KTsKKwkgICAgfSBlbHNlIGlmIChrID09IFNZTV9ZRVNUKSB7CS8qIFlFU1RFUkRBWSAqLwor CQlzdHJuY3B5KHlidWYsbWpkMmRhdGUoamQtMSksOCk7CisJICAgIH0gZWxzZSB7CQkJLyogVE9E QVkgKi8KKwkJc3RybmNweSh5YnVmLGNrZGF0ZSgpLDgpOworCSAgICB9CisJICAgIHN0cm5jcHko eWJ1Zis4LCIgMDA6MDA6MDAiLERBVEVCVUZMRU4tOCk7IC8qIERlZmF1bHQgdGltZSBpcyAwICov CisJICAgIGNrc3RybmNweSh5eXl5bW1kZCx5YnVmLFlZWVlNTUREKTsKKwkgICAgeWVhciA9IE5V TEw7CisJICAgIGlmICgqczMpIHsJCQkvKiBJZiBzb21ldGhpbmcgZm9sbG93cyBrZXl3b3JkLi4u ICovCisJCWlmIChpc2RpZ2l0KCpzMykpIHsJLyogVGltZSAtIG92ZXJ3cml0ZSBkZWZhdWx0IHRp bWUgKi8KKwkJICAgIHN0cm5jcHkoeWJ1Zis4LHMraSxEQVRFQlVGTEVOLTgpOworCQl9IGVsc2Ug ewkJLyogU29tZXRoaW5nIGVsc2UsIGtlZXAgZGVmYXVsdCB0aW1lICovCisJCSAgICBja3N0cm5j YXQoeWJ1ZiwiICIsREFURUJVRkxFTik7IC8qIGFuZCBhcHBlbmQgKi8KKwkJICAgIGNrc3RybmNh dCh5YnVmLHMzLERBVEVCVUZMRU4pOyAvKiB3aGF0ZXZlciB3ZSBoYXZlICovCisJCX0KKwkgICAg fQorCX0KKwlzID0geWJ1ZjsJCQkvKiBQb2ludCB0byByZXdyaXR0ZW4gZGF0ZS10aW1lICovCisJ bGVuID0gc3RybGVuKHMpOwkJLyogVXBkYXRlIGxlbmd0aCAqLworCWlzbGV0dGVyID0gMDsJCQkv KiBDYW5jZWwgdGhpcyAqLworICAgIH0KKworLyogUmVndWxhciBmcmVlLWZvcm1hdCBub24tc3lt Ym9saWMgZGF0ZSAqLworCisgIG5vcm1hbDoKKworICAgIGRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSBO T1JNQUwiLHMsbGVuKTsKKyAgICBkZWJ1ZyhGMTExLCJjbWN2dGRhdGUgZG93IixzLGRvdyk7Cisg ICAgaWYgKHl5eXltbWRkWzBdICYmICF5ZWFyKSB7CisJY2tzdHJuY3B5KHllYXJidWYseXl5eW1t ZGQsNSk7CisJY2tzdHJuY3B5KG1vbmJ1ZiwmeXl5eW1tZGRbNF0sMyk7CisJY2tzdHJuY3B5KGRh eWJ1ZiwmeXl5eW1tZGRbNl0sMyk7CisJeWVhciA9IHllYXJidWY7CisJbW9udGggPSBtb25idWY7 CisJZGF5ID0gZGF5YnVmOworCW5kYXkgPSBhdG9pKGRheWJ1Zik7CisgICAgfQorICAgIGlmIChp c2RpZ2l0KHNbMF0pKSB7CQkvKiBUaW1lIHdpdGhvdXQgZGF0ZT8gKi8KKwlwID0gczsKKwlpZiAo c1sxXSA9PSAnOicpIHsKKwkgICAgZGVidWcoRjExMSwiY21jdnRkYXRlIE5PUk1BTCBYMSIscyxs ZW4pOworCSAgICBnb3RvIGRvdGltZTsKKwl9IGVsc2UgaWYgKGxlbiA+IDEgJiYgaXNkaWdpdChz WzFdKSAmJiBzWzJdID09ICc6JykgeworCSAgICBkZWJ1ZyhGMTExLCJjbWN2dGRhdGUgTk9STUFM IFgyIixzLGxlbik7CisJICAgIGdvdG8gZG90aW1lOworCX0gZWxzZSBpZiAocmRpZ2l0cyhzKSAm JiBsZW4gPCA4KSB7CisJICAgIGRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSBOT1JNQUwgWDMiLHMsbGVu KTsKKwkgICAgZ290byBkb3RpbWU7CisJfQorICAgIH0KKyAgICBpZiAobGVuID49IDggJiYgaXNk aWdpdCgqcykpIHsJLyogQ2hlY2sgZmlyc3QgZm9yIHl5eXltbWRkKiAqLworCWRlYnVnKEYxMTEs ImNtY3Z0ZGF0ZSBOT1JNQUwgQSIscyxsZW4pOworCWNjID0gc1s4XTsKKwlzWzhdID0gTlVMOwkJ CS8qIElzb2xhdGUgZmlyc3QgOCBjaGFyYWN0ZXJzICovCisJaWYgKHJkaWdpdHMocykpIHsKKwkg ICAgLyogSGF2ZSB2YWxpZCB0aW1lIHNlcGFyYXRvcj8gKi8KKwkgICAgcDIgPSBjYyA/IGNrc3Ry Y2hyKCIgVHRfLToiLGNjKSA6IE5VTEw7CisJICAgIGlmICghY2MgfHwgcDIpIHsKKwkJY2tzdHJu Y3B5KHl5eXltbWRkLHMsWVlZWU1NREQpOwkvKiBWYWxpZCBzZXBhcmF0b3IgKi8KKwkJeWVhciA9 IE5VTEw7CisJCXMgKz0gODsJCQkgICAgICAgIC8qIG9yIHRpbWUgbm90IGdpdmVuICovCisJCWlm IChjYykgcysrOwkJICAgICAgICAvKiBLZWVwIGRhdGUgKi8KKwkJcCA9IHM7CQkJICAgICAgICAv KiBhbmQgZ28gaGFuZGxlIHRpbWUgKi8KKwkJZ290byBkb3RpbWU7CisJICAgIH0gZWxzZSBpZiAo IXAyKSB7CisJCWlmIChpc2RpZ2l0KGNjKSkKKwkJICBtYWtlc3RyKCZjbWRhdGVtc2csIk51bWVy aWMgZGF0ZSB0b28gbG9uZyIpOworCQllbHNlCisJCSAgbWFrZXN0cigmY21kYXRlbXNnLCJJbnZh bGlkIGRhdGUtdGltZSBzZXBhcmF0b3IiKTsKKwkJZGVidWcoRjExMSwiY21jdnRkYXRlIixjbWRh dGVtc2csLTEpOworCQlyZXR1cm4oTlVMTCk7CisJICAgIH0KKwl9CisJc1s4XSA9IGNjOwkJCS8q IFB1dCB0aGlzIGJhY2shICovCisgICAgfQorICAgIGRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSBOT1JN QUwgbm9uLXl5eXltbWRkIixzLGxlbik7CisKKyAgICAvKiBGcmVlLWZvcm1hdCBkYXRlIC0tIGZp Z3VyZSBpdCBvdXQgKi8KKworI2lmZGVmIENPTU1FTlQKKyAgICBpZiAoKnMgJiYgIWlzZGlnaXQo KnMpKSB7CisJbWFrZXN0cigmY21kYXRlbXNnLCJVbnJlY29nbml6ZWQgd29yZCBpbiBkYXRlIik7 CisJZGVidWcoRjExMSwiY21jdnRkYXRlIixjbWRhdGVtc2csLTEpOworCXJldHVybihOVUxMKTsK KyAgICB9CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgIGZvciAoaSA9IDA7IGkgPCA4OyBpKysp CQkvKiBGaWVsZCB0eXBlcyAqLworICAgICAgZnRbaV0gPSAtMTsKKyAgICBmbGRbaSA9IDBdID0g KHAgPSBzKTsJCS8qIEZpcnN0IGZpZWxkICovCisgICAgd2hpbGUgKCpwKSB7CQkJLyogR2V0IG5l eHQgdHdvIGZpZWxkcyAqLworCWlmIChpc2RhdGVzZXAoKnApKSB7CQkvKiBIYXZlIGEgZGF0ZSBz ZXBhcmF0b3IgKi8KKwkgICAgaWYgKGkgPT0gMCkgeworCQlkYXRlc2VwID0gKnA7CisJICAgIH0g ZWxzZSBpZiAoaSA9PSAxICYmICpwICE9IGRhdGVzZXApIHsKKwkJbWFrZXN0cigmY21kYXRlbXNn LCJJbmNvbnNpc3RlbnQgZGF0ZSBzZXBhcmF0b3JzIik7CisJCWRlYnVnKEYxMTEsImNtY3Z0ZGF0 ZSIsY21kYXRlbXNnLC0xKTsKKwkJcmV0dXJuKE5VTEwpOworCSAgICB9CisJICAgICpwKysgPSBO VUw7CQkJLyogUmVwbGFjZSBieSBOVUwgKi8KKwkgICAgaWYgKCpwKSB7CQkJLyogTm93IHdlJ3Jl IGF0IHRoZSBuZXh0IGZpZWxkICovCisJCXdoaWxlICgqcCA9PSBTUCkgcCsrOwkvKiBTa2lwIGxl YWRpbmcgc3BhY2VzICovCisJCWlmICghKnApIGJyZWFrOwkJLyogTWFrZSBzdXJlIHdlIHN0aWxs IGhhdmUgc29tZXRoaW5nICovCisJCWlmIChpID09IDIpCQkvKiBMYXN0IG9uZT8gKi8KKwkJICBi cmVhazsKKwkJZmxkWysraV0gPSBwOwkJLyogTm8sIHJlY29yZCBwb2ludGVyIHRvIHRoaXMgb25l ICovCisJICAgIH0gZWxzZSB7CisJCWJyZWFrOworCSAgICB9CSAgICAKKwl9IGVsc2UgaWYgKCgq cCA9PSAnVCcgfHwgKnAgPT0gJ3QnKSAmJiBpc2RpZ2l0KCoocCsxKSkpIHsgLyogVGltZSAqLwor CSAgICAqcCsrID0gTlVMOworCSAgICBicmVhazsKKwl9IGVsc2UgaWYgKCpwID09ICc6Jykgewor CSAgICBpZiAoaSA9PSAwICYmIHAgPT0gcykgeworCQlub2RhdGUgPSAxOworCQlicmVhazsKKwkg ICAgfSBlbHNlIGlmIChpICE9IDApIHsJLyogQWZ0ZXIgYSBkYXRlICovCisJCWlmIChpID09IDIp IHsJCS8qIE9LIGFzIGRhdGUtdGltZSBzZXBhcmF0b3IgKFZNUykgKi8KKwkJICAgICpwKysgPSBO VUw7CisJCSAgICBicmVhazsKKwkJfQorCQlpZiAoaSA8IDIpCisJCSAgbWFrZXN0cigmY21kYXRl bXNnLCJUb28gZmV3IGZpZWxkcyBpbiBkYXRlIik7CisJCWVsc2UKKwkJICBtYWtlc3RyKCZjbWRh dGVtc2csIk1pc3BsYWNlZCB0aW1lIHNlcGFyYXRvciIpOworCQlkZWJ1ZyhGMTExLCJjbWN2dGRh dGUiLGNtZGF0ZW1zZywtMSk7CisJCXJldHVybihOVUxMKTsKKwkgICAgfQorCSAgICBub2RhdGUg PSAxOwkJCS8qIE9yIHdpdGhvdXQgYSBkYXRlICovCisJICAgIGJyZWFrOworCX0KKwlwKys7Cisg ICAgfQorICAgIGlmIChwID4gcyAmJiBpID09IDApCQkvKiBNYWtlIHN1cmUgd2UgaGF2ZSBhIGRh dGUgKi8KKyAgICAgIG5vZGF0ZSA9IDE7CQkJLyogTm8gZGF0ZS4gKi8KKworICAgIGlmIChub2Rh dGUgJiYgZG93ID4gLTEpIHsJCS8qIEhhdmUgaW1wbGllZCBkYXRlIGZyb20gRE9XPyAqLworCWdv dG8gZG90aW1lOwkJCS8qIFVzZSwgdXNlIHRoYXQsIGdvIGRvIHRpbWUuICovCisKKyAgICB9IGVs c2UgaWYgKG5vZGF0ZSkgewkJLyogTm8gZGF0ZSBhbmQgbm8gaW1wbGllZCBkYXRlICovCisJY2hh ciAqdG1wID0gTlVMTDsJCS8qIFN1YnN0aXR1dGUgdG9kYXkncyBkYXRlICovCisJenRpbWUoJnRt cCk7CisJaWYgKCF0bXApCisJICB0bXAgID0gIiI7CisJaWYgKCEqdG1wKSB7CisJICAgIG1ha2Vz dHIoJmNtZGF0ZW1zZywiUHJvYmxlbSBzdXBwbHlpbmcgY3VycmVudCBkYXRlIik7CisJICAgIGRl YnVnKEYxMTEsImNtY3Z0ZGF0ZSIsY21kYXRlbXNnLC0xKTsKKwkgICAgcmV0dXJuKE5VTEwpOwor CX0KKwlja3N0cm5jcHkoZGJ1Zix0bXAsMjYpOwkJLyogUmVmb3JtYXQgKi8KKwlpZiAoZGJ1Zls4 XSA9PSBTUCkgZGJ1Zls4XSA9ICcwJzsKKwlmbGRbMF0gPSBkYnVmKzg7CQkvKiBkZCAqLworCWRi dWZbMTBdID0gTlVMOworCWZsZFsxXSA9IGRidWYrNDsJCS8qIG1tbSAqLworCWRidWZbN10gPSBO VUw7CisJZmxkWzJdID0gZGJ1ZisyMDsJCS8qIHl5eXkgKi8KKwlkYnVmWzI0XSA9IE5VTDsKKwlo aCA9IGF0b2koJmRidWZbMTFdKTsKKwltbSA9IGF0b2koJmRidWZbMTRdKTsKKwlzcyA9IGF0b2ko JmRidWZbMTddKTsKKwlwID0gczsJCQkJLyogQmFjayB1cCBzb3VyY2UgcG9pbnRlciB0byByZXBh cnNlICovCisgICAgfSBlbHNlIGlmIChpIDwgMikgeworCW1ha2VzdHIoJmNtZGF0ZW1zZywiVG9v IGZldyBmaWVsZHMgaW4gZGF0ZSIpOworCWRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSIsY21kYXRlbXNn LC0xKTsKKwlyZXR1cm4oTlVMTCk7CisgICAgfQorICAgIC8qIEhhdmUgdGhyZWUgZGF0ZSBmaWVs ZHMgLSBzZWUgd2hhdCB0aGV5IGFyZSAqLworCisgICAgZm9yIChrID0gMCwgaiA9IDA7IGogPCAz OyBqKyspIHsJLyogR2V0IG51bWJlciBvZiBub24tbnVtZXJpYyBmaWVsZHMgKi8KKwlmdFtqXSA9 IHJkaWdpdHMoZmxkW2pdKTsKKwlkZWJ1ZyhGMTExLCJjbWN2dGRhdGUgZmxkIixmbGRbal0saik7 CisJaWYgKGZ0W2pdID09IDApCisJICBrKys7CisgICAgfQorICAgIGtuID0gazsJCQkJLyogSG93 IG1hbnkgbnVtZXJpYyBmaWVsZHMgKi8KKyAgICBtb250aCA9IE5VTEw7CQkJLyogU3RyaWtlIG91 dCBkZWZhdWx0IHZhbHVlcyAqLworICAgIHllYXIgPSBOVUxMOworICAgIGRheSA9IE5VTEw7CisK KyAgICBpZiAoayA9PSAyICYmIGZ0WzJdID4gMCkgewkJLyogSnVsIDIwLCAyMDAxICovCisJaW50 IHh4OworCXh4ID0gc3RybGVuKGZsZFsxXSk7CisJcDMgPSBmbGRbMV07CisJaWYgKHh4ID4gMCkg aWYgKHAzW3h4LTFdID09ICcsJykgeworCSAgICBwM1t4eC0xXSA9IE5VTDsKKwkgICAgaWYgKHJk aWdpdHMocDMpKSB7CisJCWsgPSAxOwkKKwkJZnRbMV0gPSAxOworCSAgICB9IGVsc2UgcDNbeHgt MV0gPSAnLCc7CisJfQorICAgIH0KKyAgICBpZiAoayA+IDEpIHsJCQkvKiBXZSBjYW4gaGF2ZSBv bmx5IG9uZSBub24tbnVtZXJpYyAqLworCWlmIChub2RhdGUpCisJICBtYWtlc3RyKCZjbWRhdGVt c2csIlVucmVjb2duaXplZCB3b3JkIGluIGRhdGUiKTsgCisJZWxzZSBpZiAoIWZ0WzJdICYmIGlz ZGlnaXQoKihmbGRbMl0pKSkKKwkgIG1ha2VzdHIoJmNtZGF0ZW1zZywiSW52YWxpZCBkYXRlLXRp bWUgc2VwYXJhdG9yIik7IAorCWVsc2UKKwkgIG1ha2VzdHIoJmNtZGF0ZW1zZywiVG9vIG1hbnkg bm9uLW51bWVyaWMgZmllbGRzIGluIGRhdGUiKTsKKwlkZWJ1ZyhGMTExLCJjbWN2dGRhdGUiLGNt ZGF0ZW1zZywtMSk7CisJcmV0dXJuKE5VTEwpOworICAgIH0KKyAgICBpZiAoIWZ0WzBdKSB7CisJ ayA9IDA7CisgICAgfSBlbHNlIGlmICghZnRbMV0pIHsKKwlrID0gMTsKKyAgICB9IGVsc2UgaWYg KCFmdFsyXSkgeworCW1ha2VzdHIoJmNtZGF0ZW1zZywiTm9uLWRpZ2l0IGluIHRoaXJkIGRhdGUg ZmllbGQiKTsKKwlkZWJ1ZyhGMTExLCJjbWN2dGRhdGUiLGNtZGF0ZW1zZywtMSk7CisJcmV0dXJu KE5VTEwpOworICAgIH0gZWxzZQorICAgICAgayA9IC0xOworCisgICAgaWYgKGsgPiAtMSkgewor CWlmICgoeCA9IGxvb2t1cChjbW9udGhzLGZsZFtrXSwxMixOVUxMKSkgPCAwKSB7CisJICAgIG1h a2VzdHIoJmNtZGF0ZW1zZywiVW5rbm93biBtb250aCIpOworCSAgICBkZWJ1ZyhGMTExLCJjbWN2 dGRhdGUiLGNtZGF0ZW1zZywtMSk7CisJICAgIHJldHVybihOVUxMKTsKKwl9CisJc3ByaW50Zih0 bXBidWYsIiUwMmQiLHgpOworCW1vbnRoID0gdG1wYnVmOworICAgIH0KKyAgICBmMmxlbiA9IHN0 cmxlbihmbGRbMl0pOwkJLyogTGVuZ3RoIG9mIDNyZCBmaWVsZCAqLworCisgICAgaWYgKGsgPT0g MCkgewkJCS8qIG1vbnRobmFtZSBkZCwgeXl5eSAqLworCWRheSA9IGZsZFsxXTsKKwl5ZWFyID0g ZmxkWzJdOworICAgIH0gZWxzZSBpZiAoKChpbnQpc3RybGVuKGZsZFswXSkgPT0gNCkpIHsgLyog eXl5eS14eC1kZCAqLworCXllYXIgPSBmbGRbMF07CisJZGF5ID0gZmxkWzJdOworCWlmICghbW9u dGgpCisJICBtb250aCA9IGZsZFsxXTsJCS8qIHl5eXktbW0tZGQgKi8KKyAgICB9IGVsc2UgaWYg KGYybGVuID09IDQpIHsJCS8qIHh4LXh4LXl5eXkgKi8KKwl5ZWFyID0gZmxkWzJdOworCWlmICht b250aCkgewkJCS8qIGRkLW5hbWUteXl5eSAqLworCSAgICBkYXkgPSBmbGRbMF07CisJfSBlbHNl IHsJCQkvKiB4eC14eC15eXl5ICovCisJICAgIGludCBmMCwgZjE7CisJICAgIGYwID0gYXRvaShm bGRbMF0pOworCSAgICBmMSA9IGF0b2koZmxkWzFdKTsKKwkgICAgaWYgKCgoZjAgPiAxMikgJiYg KGYxIDw9IDEyKSkgfHwgKGYxIDw9IDEyICYmIGYwID09IGYxKSkgeworCQlkYXkgPSBmbGRbMF07 CQkvKiBtbS1kZC15eXl5ICovCisJCW1vbnRoID0gZmxkWzFdOworCSAgICB9IGVsc2UgaWYgKChm MCA8PSAxMikgJiYgKGYxID4gMTIpKSB7CisJCWlmICghcmRpZ2l0cyhmbGRbMV0pKSB7CisJCSAg ICBtYWtlc3RyKCZjbWRhdGVtc2csIkRheSBub3QgbnVtZXJpYyIpOworCQkgICAgZGVidWcoRjEx MSwiY21jdnRkYXRlIixjbWRhdGVtc2csLTEpOworCQkgICAgcmV0dXJuKE5VTEwpOworCQl9IGVs c2UgeworCQkgICAgZGF5ID0gZmxkWzFdOwkvKiBkZC1tbS15eXl5ICovCisJCX0KKwkJbW9udGgg PSBmbGRbMF07CisJICAgIH0gZWxzZSB7CisJCWlmICghZjAgfHwgIWYxKQorCQkgIG1ha2VzdHIo JmNtZGF0ZW1zZywiRGF5IG9yIG1vbnRoIG91dCBvZiByYW5nZSIpOworCQllbHNlCisJCSAgbWFr ZXN0cigmY21kYXRlbXNnLCJEYXkgYW5kIG1vbnRoIGFyZSBhbWJpZ3VvdXMiKTsKKwkJZGVidWco RjExMSwiY21jdnRkYXRlIixjbWRhdGVtc2csLTEpOworCQlyZXR1cm4oTlVMTCk7CisJICAgIH0K Kwl9CisgICAgfSBlbHNlIGlmICgoZjJsZW4gPCA0KSAmJgkJLyogZGQgbW1tIHl5IChSRkM4MjIp ICovCisJICAgICAgICFyZGlnaXRzKGZsZFsxXSkgJiYJLyogbWlkZGxlIGZpZWxkIGlzIG1vbnRo bmFtZSAqLworCSAgICAgICByZGlnaXRzKGZsZFsyXSkpIHsKKwlpbnQgdG1weWVhcjsKKwlkYXkg PSBmbGRbMF07CisJaWYgKCFmbGRbMl1bMV0pIHsKKwkgICAgbWFrZXN0cigmY21kYXRlbXNnLCJU b28gZmV3IGRpZ2l0cyBpbiB5ZWFyIik7CisJICAgIGRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSIsY21k YXRlbXNnLC0xKTsKKwkgICAgcmV0dXJuKE5VTEwpOworCX0KKwl0bXB5ZWFyID0gYXRvaShmbGRb Ml0pOworCWlmICh0bXB5ZWFyIDwgNTApCQkvKiBSRkMgMjgyMiB3aW5kb3dpbmcgKi8KKwkgIHRt cHllYXIgKz0gMjAwMDsKKwllbHNlCQkJCS8qIFRoaXMgaW5jbHVkZXMgMy1kaWdpdCB5ZWFycy4g Ki8KKwkgIHRtcHllYXIgKz0gMTkwMDsKKwl5ZWFyID0gY2tpdG9hKHRtcHllYXIpOworCisgICAg fSBlbHNlIGlmICgoZjJsZW4gPCA0KSAmJiAoayA8IDApICYmICgoaW50KXN0cmxlbihmbGRbMF0p IDwgNCkpIHsKKwltYWtlc3RyKCZjbWRhdGVtc2csIkFtYmlndW91cyBudW1lcmljIGRhdGUiKTsK KwlkZWJ1ZyhGMTExLCJjbWN2dGRhdGUiLGNtZGF0ZW1zZywtMSk7CisJcmV0dXJuKE5VTEwpOwor ICAgIH0gZWxzZSBpZiAoKGYybGVuID4gNCkgJiYgZnRbMl0pIHsKKwltYWtlc3RyKCZjbWRhdGVt c2csIlRvbyBtYW55IGRpZ2l0cyBpbiB5ZWFyIik7CisJZGVidWcoRjExMSwiY21jdnRkYXRlIixj bWRhdGVtc2csLTEpOworCXJldHVybihOVUxMKTsKKyAgICB9IGVsc2UgeworCW1ha2VzdHIoJmNt ZGF0ZW1zZywiVW5leHBlY3RlZCBkYXRlIGZvcm1hdCIpOworCWRlYnVnKEYxMTEsImNtY3Z0ZGF0 ZSIsY21kYXRlbXNnLC0xKTsKKwlyZXR1cm4oTlVMTCk7CisgICAgfQorICAgIHggPSBhdG9pKG1v bnRoKTsKKyAgICBzcHJpbnRmKHRtcGJ1ZiwiJTAyZCIseCk7CQkvKiAyLWRpZ2l0IG51bWVyaWMg bW9udGggKi8KKworLyoKKyAgIHN0YXRlID0gMSA9IGhvdXJzCisgICBzdGF0ZSA9IDIgPSBtaW51 dGVzCisgICBzdGF0ZSA9IDMgPSBzZWNvbmRzCisgICBzdGF0ZSA9IDQgPSBmcmFjdGlvbnMgb2Yg c2Vjb25kcworKi8KKworICBkb3RpbWU6CisgICAgaWYgKGlzbGV0dGVyICYmIChzID09IHApKSB7 CisJbWFrZXN0cigmY21kYXRlbXNnLCJVbmtub3duIGRhdGUtdGltZSB3b3JkIik7CisJZGVidWco RjExMSwiY21jdnRkYXRlIixjbWRhdGVtc2csLTEpOworCXJldHVybihOVUxMKTsKKyAgICB9Cisg ICAgaWYgKCF5ZWFyICYmIHl5eXltbWRkWzBdKSB7CisJZGVidWcoRjExMCwiY21jdnRkYXRlIGRv dGltZSB5eXl5bW1kZCIseXl5eW1tZGQsMCk7CisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKKwkg IHllYXJidWZbaV0gPSB5eXl5bW1kZFtpXTsKKwl5ZWFyYnVmWzRdID0gTlVMOworCW1vbmJ1Zlsw XSA9IHl5eXltbWRkWzRdOworCW1vbmJ1ZlsxXSA9IHl5eXltbWRkWzVdOworCW1vbmJ1ZlsyXSA9 IE5VTDsKKwlkYXlidWZbMF0gPSB5eXl5bW1kZFs2XTsKKwlkYXlidWZbMV0gPSB5eXl5bW1kZFs3 XTsKKwlkYXlidWZbMl0gPSBOVUw7CisJZGF5ID0gZGF5YnVmOworCW5kYXkgPSBhdG9pKGRheWJ1 Zik7CisJbW9udGggPSBtb25idWY7CisJeWVhciA9IHllYXJidWY7CisgICAgfQorICAgIGlmICgh eWVhcikgeworCW1ha2VzdHIoJmNtZGF0ZW1zZywiSW50ZXJuYWwgZXJyb3IgLSBkYXRlIG5vdCBk ZWZhdWx0ZWQiKTsKKwlkZWJ1ZyhGMTExLCJjbWN2dGRhdGUiLGNtZGF0ZW1zZywtMSk7CisJcmV0 dXJuKE5VTEwpOworICAgIH0KKyAgICAvKiBHZXQgaGVyZSB3aXRoIGRheSwgbW9udGgsIGFuZCB5 ZWFyIHNldCAqLworICAgIGRlYnVnKEYxMTAsImNtY3Z0ZGF0ZSBkb3RpbWUgZGF5IixkYXksMCk7 CisgICAgZGVidWcoRjExMCwiY21jdnRkYXRlIGRvdGltZSBtb250aCIsbW9udGgsMCk7CisgICAg ZGVidWcoRjExMCwiY21jdnRkYXRlIGRvdGltZSB5ZWFyIix5ZWFyLDApOworICAgIGRlYnVnKEYx MTAsImNtY3Z0ZGF0ZSBkb3RpbWUgcyIscywwKTsKKyAgICBkZWJ1ZyhGMTEwLCJjbWN2dGRhdGUg ZG90aW1lIHAiLHAsMCk7CisgICAgeCA9IGF0b2kobW9udGgpOworICAgIGlmICh4ID4gMTIgfHwg eCA8IDEpIHsKKwltYWtlc3RyKCZjbWRhdGVtc2csIk1vbnRoIG91dCBvZiByYW5nZSIpOworCWRl YnVnKEYxMTEsImNtY3Z0ZGF0ZSIsY21kYXRlbXNnLC0xKTsKKwlyZXR1cm4oTlVMTCk7CisgICAg fQorICAgIG5kYXkgID0gYXRvaShkYXkpOworICAgIGkgPSBtZGF5c1t4XTsKKyAgICBpZiAoeCA9 PSAyKSBpZiAoaXNsZWFwKGF0b2koeWVhcikpKSBpKys7CisgICAgaWYgKG5kYXkgPiBpIHx8IG5k YXkgPCAxKSB7CisJbWFrZXN0cigmY21kYXRlbXNnLCJEYXkgb3V0IG9mIHJhbmdlIik7CisJZGVi dWcoRjExMSwiY21jdnRkYXRlIixjbWRhdGVtc2csLTEpOworCXJldHVybihOVUxMKTsKKyAgICB9 CisgICAgaWYgKCEqcCAmJiB0ID09IDApIHsKKwlzcHJpbnRmKHpidWYsIiUwNGQlMDJkJTAyZCIs YXRvaSh5ZWFyKSxhdG9pKG1vbnRoKSxuZGF5KTsJCisJZHAgPSB6YnVmOworCWdvdG8geGN2dGRh dGU7CisgICAgfQorICAgIGlmICgqcCA9PSAnKycgfHwgKnAgPT0gJy0nKSB7CS8qIEdNVCBvZmZz ZXQgd2l0aG91dCBhIHRpbWUgKi8KKwloaCA9IDA7CQkJCS8qIHNvIGRlZmF1bHQgdGltZSB0byAw MDowMDowMCAqLworCW1tID0gMDsKKwlzcyA9IDA7CisJZ290byBjbXRpbWV6b25lOwkJLyogYW5k IGdvIGRvIHRpbWV6b25lICovCisgICAgfQorICAgIGlmICgqcCAmJiAhaXNkaWdpdCgqcCkgJiYg KnAgIT0gJzonKSB7CisJbWFrZXN0cigmY21kYXRlbXNnLCJJbnZhbGlkIHRpbWUiKTsKKwlkZWJ1 ZyhGMTExLCJjbWN2dGRhdGUiLGNtZGF0ZW1zZywtMSk7CisJcmV0dXJuKE5VTEwpOworICAgIH0K KyAgICBzcHJpbnRmKHl5eXltbWRkLCIlcyVzJTAyZCIseWVhcixtb250aCxuZGF5KTsgLyogZm9y IHR6IGNhbGN1bGF0aW9ucy4uLiAqLworCisgICAgc3RhdGUgPSAxOwkJCQkvKiBJbml0aWFsaXpl IHRpbWUtcGFyc2luZyBGU0EgKi8KKyAgICBoaCA9IDA7CQkJCS8qIGhvdXJzICovCisgICAgbW0g PSAwOwkJCQkvKiBtaW51dGVzICovCisgICAgc3MgPSAwOwkJCQkvKiBzZWNvbmRzICovCisgICAg ZmYgPSAtMTsJCQkJLyogZnJhY3Rpb24gKi8KKyAgICBkID0gMDsJCQkJLyogRGlnaXQgY291bnRl ciAqLworICAgIHAyID0gcDsJCQkJLyogUHJlbGltaW5hcnkgZGlnaXQgY291bnQuLi4gKi8KKyAg ICB3aGlsZSAoaXNkaWdpdCgqcDIpKSB7CisJZCsrOworCXAyKys7CisgICAgfQorICAgIGlmIChk ID4gNikgeworCW1ha2VzdHIoJmNtZGF0ZW1zZywiVG9vIG1hbnkgdGltZSBkaWdpdHMiKTsKKwlk ZWJ1ZyhGMTExLCJjbWN2dGRhdGUiLGNtZGF0ZW1zZywtMSk7CisJcmV0dXJuKE5VTEwpOworICAg IH0KKyAgICBkID0gKGQgJiAxICYmICpwMiAhPSAnOicpID8gMSA6IDA7CS8qIE9kZCBpbXBsaWVz IGxlYWRpbmcgJzAnICovCisKKyAgICB3aGlsZSAoKnApIHsJCQkvKiBHZXQgdGhlIHRpbWUsIGlm IGFueSAqLworCWlmIChpc2RpZ2l0KCpwKSkgewkJLyogZGlnaXQgKi8KKwkgICAgaWYgKGQrKyA+ IDEpIHsKKwkJc3RhdGUrKzsKKwkJZCA9IDE7CisJICAgIH0KKwkgICAgc3dpdGNoIChzdGF0ZSkg eworCSAgICAgIGNhc2UgMToJCQkvKiBIb3VycyAqLworCQloaCA9IGhoICogMTAgKyAoKnAgLSAn MCcpOworCQlicmVhazsKKwkgICAgICBjYXNlIDI6CQkJLyogTWludXRlcyAqLworCQltbSA9IG1t ICogMTAgKyAoKnAgLSAnMCcpOworCQlicmVhazsKKwkgICAgICBjYXNlIDM6CQkJLyogU2Vjb25k cyAqLworCQlzcyA9IHNzICogMTAgKyAoKnAgLSAnMCcpOworCQlicmVhazsKKwkgICAgICBjYXNl IDQ6CQkJLyogRnJhY3Rpb24gb2Ygc2Vjb25kICovCisJCWlmIChmZiA8IDApCisJCSAgZmYgPSAo KnAgPiAnNCcpID8gMSA6IDA7CisJCWJyZWFrOworCSAgICB9CisJfSBlbHNlIGlmICgqcCA9PSAn OicpIHsJCS8qIENvbG9uICovCisJICAgIHN0YXRlKys7CisJICAgIGQgPSAwOworCSAgICBpZiAo c3RhdGUgPiAzKSB7CisJCW1ha2VzdHIoJmNtZGF0ZW1zZywiVG9vIG1hbnkgdGltZSBmaWVsZHMi KTsKKwkJZGVidWcoRjExMSwiY21jdnRkYXRlIixjbWRhdGVtc2csLTEpOworCQlyZXR1cm4oTlVM TCk7CisJICAgIH0KKwl9IGVsc2UgaWYgKCpwID09ICcuJykgeworCSAgICBpZiAoc3RhdGUgPT0g MykgeworCQlzdGF0ZSA9IDQ7CisJCWQgPSAwOworCSAgICB9IGVsc2UgeworCQltYWtlc3RyKCZj bWRhdGVtc2csIkltcHJvcGVyIGZyYWN0aW9uIik7CisJCWRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSIs Y21kYXRlbXNnLC0xKTsKKwkJcmV0dXJuKE5VTEwpOworCSAgICB9CisJfSBlbHNlIGlmICgqcCA9 PSBTUCkgewkJLyogU3BhY2UgKi8KKwkgICAgd2hpbGUgKCpwICYmICgqcCA9PSBTUCkpCS8qIHBv c2l0aW9uIHRvIGZpcnN0IG5vbnNwYWNlICovCisJICAgICAgcCsrOworCSAgICBicmVhazsKKwl9 IGVsc2UgaWYgKGlzYWxwaGEoKnApKSB7CS8qIEFNL1BNL1ogb3IgdGltZXpvbmUgKi8KKwkgICAg YnJlYWs7CisJfSBlbHNlIGlmICgqcCA9PSAnKycgfHwgKnAgPT0gJy0nKSB7IC8qIEdNVCBvZmZz ZXQgKi8KKwkgICAgYnJlYWs7CisJfSBlbHNlIHsKKwkgICAgbWFrZXN0cigmY21kYXRlbXNnLCJJ bnZhbGlkIHRpbWUgY2hhcmFjdGVycyIpOworCSAgICBkZWJ1ZyhGMTExLCJjbWN2dGRhdGUiLGNt ZGF0ZW1zZywtMSk7CisJICAgIHJldHVybihOVUxMKTsKKwl9CisJcCsrOworICAgIH0KKyAgICBp ZiAoISpwKQkJCQkvKiBJZiBub3RoaW5nIGxlZnQgKi8KKyAgICAgIGdvdG8geGNtZGF0ZTsJCQkv KiBnbyBmaW5pc2ggdXAgKi8KKworICAgIC8qIEF0IHRoaXMgcG9pbnQgd2UgaGF2ZSBISCwgTU0s IFNTLCBhbmQgRkYgKi8KKyAgICAvKiBOb3cgaGFuZGxlIHRoZSByZXN0OiBBTSwgUE0sIGFuZC9v ciB0aW1lem9uZSBpbmZvICovCisKKyAgICBpZiAoIWNrc3RyY21wKHAsImFtIiwyLDApKSB7CS8q IEFNL1BNLi4uICovCisJcG1mbGFnID0gMDsKKwlwICs9IDI7CisgICAgfSBlbHNlIGlmICghY2tz dHJjbXAocCwiYS5tLiIsNCwwKSkgeworCXBtZmxhZyA9IDA7CisJcCArPSA0OworICAgIH0gZWxz ZSBpZiAoIWNrc3RyY21wKHAsInBtIiwyLDApKSB7CisJcG1mbGFnID0gMTsKKwlwICs9IDI7Cisg ICAgfSBlbHNlIGlmICghY2tzdHJjbXAocCwicC5tLiIsNCwwKSkgeworCXBtZmxhZyA9IDE7CisJ cCArPSA0OworICAgIH0KKyAgICBpZiAocG1mbGFnICYmIGhoIDwgMTIpCQkvKiBJZiBQTSB3YXMg Z2l2ZW4gKi8KKyAgICAgIGhoICs9IDEyOwkJCQkvKiBhZGQgMTIgdG8gdGhlIGhvdXIgKi8KKwor ICAgIC8qIE5vdyBoYW5kbGUgdGltZXpvbmUgKi8KKworICBjbXRpbWV6b25lOgorICAgIGRlYnVn KEYxMTAsImNtY3Z0ZGF0ZSB0aW1lem9uZSIscCwwKTsKKworICAgIHpoaCA9IDA7CQkJCS8qIEdN VCBvZmZzZXQgSEggKi8KKyAgICB6bW0gPSAwOwkJCQkvKiBHTVQgb2Zmc2V0IE1NICovCisgICAg Z210c2lnbiA9IDA7CQkJLyogU2lnbiBvZiBHTVQgb2Zmc2V0ICovCisgICAgaXNnbXQgPSAwOwkJ CQkvKiAxIGlmIHRpbWUgaXMgR01UICovCisKKyAgICB3aGlsZSAoKnAgJiYgKnAgPT0gU1ApCQkv KiBHb2JibGUgc3BhY2VzICovCisgICAgICBwKys7CisgICAgaWYgKCEqcCkJCQkJLyogSWYgbm90 aGluZyBsZWZ0ICovCisgICAgICBnb3RvIHhjbWRhdGU7CQkJLyogd2UncmUgZG9uZSAqLworCisg ICAgaWYgKGlzYWxwaGEoKnApKSB7CQkJLyogU29tZXRoaW5nIGxlZnQgKi8KKwlpbnQgem9uZSA9 IDA7CQkJLyogQWxwaGFiZXRpYyBtdXN0IGJlIHRpbWV6b25lICovCisJcDIgPSBwOwkJCQkvKiBJ c29sYXRlIHRpbWV6b25lICovCisJcCsrOworCXdoaWxlIChpc2FscGhhKCpwKSkKKwkgIHArKzsK KwlwMyA9IHA7CisJY2MgPSAqcDsKKwkqcCA9IE5VTDsKKwlwID0gcDI7CQkJCS8qIEhhdmUgdGlt ZXpvbmUsIGxvb2sgaXQgdXAgKi8KKwl6b25lID0gbG9va3VwKHVzYXR6LHAsbnVzYXR6LE5VTEwp OworCWRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSB0aW1lem9uZSBhbHBoYSIscCx6b25lKTsKKworCWlm ICh6b25lIDwgMCkgewkJCS8qIE5vdCBmb3VuZCAqLworCSAgICBtYWtlc3RyKCZjbWRhdGVtc2cs IlVua25vd24gdGltZXpvbmUiKTsKKwkgICAgZGVidWcoRjExMSwiY21jdnRkYXRlIixjbWRhdGVt c2csLTEpOworCSAgICByZXR1cm4oTlVMTCk7CisJfQorCWlzZ210Kys7CQkJLyogQWxsIGRhdGVz IGFyZSBHTVQgZnJvbSBoZXJlIGRvd24gKi8KKwlpZiAoem9uZSAhPSAwKSB7CQkvKiBCdXQgbm90 IHRoaXMgb25lIHNvIG1ha2UgaXQgR01UICovCisJICAgIGhoICs9IHpvbmU7CQkJLyogUkZDIDgy MiB0aW1lem9uZTogRVNUIGV0YyAqLworCSAgICBkZWJ1ZyhGMTAxLCJjbWN2dGRhdGUgaGggKyB6 b25lIiwiIixoaCk7CisJICAgIGlmIChoaCA+IDIzKSB7CQkvKiBPZmZzZXQgY3Jvc3NlcyBkYXRl IGJvdW5kYXJ5ICovCisJCWludCBpOworCQlsb25nIGpkOworCQlqZCA9IG1qZCh5eXl5bW1kZCk7 CS8qIEdldCBNSkQgKi8KKwkJamQgKz0gaGggLyAyNDsJCS8qIEFkZCBuZXcgZGF5KHMpICovCisJ CWhoID0gaGggJSAyNDsJCS8qIGFuZCBjb252ZXJ0IGJhY2sgdG8geXl5eW1tZGQgKi8KKwkJY2tz dHJuY3B5KHl5eXltbWRkLG1qZDJkYXRlKGpkKSxZWVlZTU1ERCk7CisJCWRlYnVnKEYxMTEsImNt Y3Z0ZGF0ZSB6b25lLWFkanVzdGVkIGRhdGUiLHl5eXltbWRkLGhoKTsKKwkJZm9yIChpID0gMDsg aSA8IDQ7IGkrKykKKwkJICB5ZWFyYnVmW2ldID0geXl5eW1tZGRbaV07CisJCXllYXJidWZbNF0g PSBOVUw7CisJCW1vbmJ1ZlswXSA9IHl5eXltbWRkWzRdOworCQltb25idWZbMV0gPSB5eXl5bW1k ZFs1XTsKKwkJbW9uYnVmWzJdID0gTlVMOworCQlkYXlidWZbMF0gPSB5eXl5bW1kZFs2XTsKKwkJ ZGF5YnVmWzFdID0geXl5eW1tZGRbN107CisJCWRheWJ1ZlsyXSA9IE5VTDsKKwkJZGF5ID0gZGF5 YnVmOworCQluZGF5ID0gYXRvaShkYXlidWYpOworCQltb250aCA9IG1vbmJ1ZjsKKwkJeWVhciA9 IHllYXJidWY7CisJICAgIH0KKwl9CisJcCA9IHAzOwkJCQkvKiBQdXQgYmFjayB3aGF0ZXZlciB3 ZSBwb2tlZCBhYm92ZSAqLworCSpwID0gY2M7CisKKyAgICB9IGVsc2UgaWYgKCpwID09ICcrJyB8 fCAqcCA9PSAnLScpIHsgLyogR01UL1VUQyBvZmZzZXQgKi8KKwlwMyA9IHA7CisJZGVidWcoRjEx MCwiY21jdnRkYXRlIHRpbWV6b25lIEdNVCBvZmZzZXQiLHAsMCk7CisJZ210c2lnbiA9ICgqcCA9 PSAnKycpID8gLTEgOiAxOworCWlzZ210Kys7CisJcCsrOworCXdoaWxlICgqcCA9PSBTUCkgcCsr OworCWQgPSAwOworCXAyID0gcDsKKwl3aGlsZSAoaXNkaWdpdCgqcCkpIHsJCS8qIENvdW50IGRp Z2l0cyAqLworCSAgICBkKys7CisJICAgIHArKzsKKwl9CisJaWYgKGQgIT0gNCkgewkJCS8qIFN0 cmljdCBSRkMgWzJdODIyICovCisJICAgIGlzZ210ID0gMDsJCQkvKiBJZiBub3QgZXhhY3RseSA0 IGRpZ2l0cyAqLworCSAgICBwID0gcDM7CQkJLyogaXQncyBub3QgYSBHTVQgb2Zmc2V0LiAqLwor CSAgICBnb3RvIGRlbHRhOwkJCS8qIFNvIHRyZWF0IGl0IGFzIGEgZGVsdGEgdGltZS4gKi8KKwl9 CisJZCA9IChkICYgMSAmJiAqcCAhPSAnOicpID8gMSA6IDA7IC8qIE9kZCBpbXBsaWVzIGxlYWRp bmcgJzAnICovCisJcCA9IHAyOworCWRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSBHTVQgb2Zmc2V0IHNp Z24iLHAsZ210c2lnbik7CisJZGVidWcoRjEwMSwiY21jdnRkYXRlIEdNVCBvZmZzZXQgZCIsIiIs ZCk7CisJc3RhdGUgPSAxOworCXdoaWxlICgqcCkgeworCSAgICBpZiAoaXNkaWdpdCgqcCkpIHsJ CS8qIGRpZ2l0ICovCisJCWlmIChkKysgPiAxKSB7CisJCSAgICBzdGF0ZSsrOworCQkgICAgZCA9 IDE7CisJCX0KKwkJc3dpdGNoIChzdGF0ZSkgeworCQkgIGNhc2UgMToKKwkJICAgIHpoaCA9IHpo aCAqIDEwICsgKCpwIC0gJzAnKTsKKwkJICAgIGJyZWFrOworCQkgIGNhc2UgMjoKKwkJICAgIHpt bSA9IHptbSAqIDEwICsgKCpwIC0gJzAnKTsKKwkJICAgIGJyZWFrOworCQkgIGRlZmF1bHQ6CQkv KiBJZ25vcmUgc2Vjb25kcyBvciBmcmFjdGlvbnMgKi8KKwkJICAgIGJyZWFrOworCQl9CQkJCisJ ICAgIH0gZWxzZSBpZiAoKnAgPT0gJzonKSB7CS8qIENvbG9uICovCisJCXN0YXRlKys7CisJCWQg PSAwOworCSAgICB9IGVsc2UgaWYgKCpwID09IFNQIHx8ICpwID09ICcoJykgeworCQlicmVhazsK KwkgICAgfSBlbHNlIHsKKwkJcCA9IHAzOwkJCS8qIE1heWJlIGl0J3Mgbm90IGEgR01UIG9mZnNl dC4gKi8KKwkJZ290byBkZWx0YTsJCS8qIFNvIHRyZWF0IGl0IGFzIGEgZGVsdGEgdGltZS4gKi8K KwkgICAgfQorCSAgICBwKys7CisJfQorICAgIH0KKyAgICBkZWJ1ZyhGMTEwLCJjbWN2dGRhdGUg c291cmNlIHN0cmluZyBhZnRlciB0aW1lem9uZSIscCwwKTsKKworICAgIGlmICgqcCkgewkJCQkv KiBBbnl0aGluZyBsZWZ0PyAqLworCXAyID0gcDsKKwl3aGlsZSAoKnAyID09IFNQKQkJLyogU2tp cCBwYXN0IHNwYWNlcyAqLworCSAgcDIrKzsKKwlpZiAoKnAyID09ICcoJykgewkJLyogUkZDLTgy MiBjb21tZW50PyAqLworCSAgICBpbnQgcGMgPSAxOwkJCS8qIHBhcmVuIGNvdW50ZXIgKi8KKwkg ICAgcDIrKzsKKwkgICAgd2hpbGUgKCpwMikgeworCQlpZiAoKnAyID09ICcpJykgeworCQkgICAg aWYgKC0tcGMgPT0gMCkgeworCQkJcDIrKzsKKwkJCWJyZWFrOworCQkgICAgfQorCQl9IGVsc2Ug aWYgKCpwMiA9PSAnKScpIHsKKwkJICAgIHBjKys7CisJCX0KKwkJcDIrKzsKKwkgICAgfQkJCisJ ICAgIHdoaWxlICgqcDIgPT0gU1ApCQkvKiBTa2lwIHBhc3Qgc3BhY2VzICovCisJICAgICAgcDIr KzsKKwkgICAgaWYgKCEqcDIpCQkJLyogQW55dGhpbmcgbGVmdD8gKi8KKwkgICAgICAqcCA9IE5V TDsJCQkvKiBObywgZXJhc2UgY29tbWVudCAqLworCX0KKwlpZiAoISpwMikJCQkvKiBBbnl0aGlu ZyBsZWZ0PyAqLworCSAgZ290byB4Y21kYXRlOwkJCS8qIE5vLCBkb25lLiAqLworCXAgPSBwMjsK KworICAgICAgZGVsdGE6CisJZGVidWcoRjExMCwiY21jdnRkYXRlIGRlbHRhIHl5eXltbWRkIix5 eXl5bW1kZCwwKTsKKwlkZWJ1ZyhGMTEwLCJjbWN2dGRhdGUgZGVsdGEgeWVhciIseWVhciwwKTsK KwlkZWJ1ZyhGMTEwLCJjbWN2dGRhdGUgZGVsdGEgcCIscCwwKTsKKworCWlmICgqcCA9PSAnKycg fHwgKnAgPT0gJy0nKSB7CS8qIERlbHRhIHRpbWUgKi8KKwkgICAgaW50IHN0YXRlID0gTkVFRF9E QVlTOwkvKiBTdGFydCBvZmYgbG9va2luZyBmb3IgZGF5cyAqLworCSAgICBjaGFyIGMgPSAwOwor CSAgICBkc2lnbiA9IDE7CQkJLyogR2V0IHNpZ24gKi8KKwkgICAgaWYgKCpwKysgPT0gJy0nKQor CSAgICAgIGRzaWduID0gLTE7CisJICAgIHdoaWxlICgqcCA9PSBTUCkJCS8qIFNraXAgaW50ZXJ2 ZW5pbmcgc3BhY2VzICovCisJICAgICAgcCsrOworCSAgICB3aGlsZSAoc3RhdGUpIHsJCS8qIEZT QSB0byBwYXJzZSBkZWx0YSB0aW1lICovCisJCWlmIChzdGF0ZSA8IDAgfHwgIWlzZGlnaXQoKnAp KSB7CisJCSAgICBtYWtlc3RyKCZjbWRhdGVtc2csIkludmFsaWQgZGVsdGEgdGltZSIpOworCQkg ICAgZGVidWcoRjExMSwiY21jdnRkYXRlIixjbWRhdGVtc2csLTEpOworCQkgICAgcmV0dXJuKE5V TEwpOworCQl9CisJCXAyID0gcDsJCQkvKiBHZXQgbmV4dCBudW1lcmljIGZpZWxkICovCisJCXdo aWxlIChpc2RpZ2l0KCpwMikpCisJCSAgcDIrKzsKKwkJYyA9ICpwMjsJCS8qIEFuZCBicmVhayBj aGFyYWN0ZXIgKi8KKwkJKnAyID0gTlVMOwkJLyogVGVybWluYXRlIHRoZSBudW1iZXIgKi8KKwor CQlzd2l0Y2ggKHN0YXRlKSB7CS8qIEludGVycHJldCBhY2NvcmRpbmcgdG8gc3RhdGUgKi8KKwkJ ICBjYXNlIE5FRURfREFZUzoJLyogSW5pdGlhbCAqLworCQkgICAgaWYgKChjID09ICctJykgfHwJ LyogVk1TIGZvcm1hdCAqLworCQkJKChjID09ICdkJyB8fCBjID09ICdEJykKKwkJCSAmJiAhaXNh bHBoYSgqKHAyKzEpKSkpIHsgLyogRGF5cyAqLworCQkJZGRheXMgPSBhdG9pKHApOworCQkJaWYg KCEqKHAyKzEpKQkJCQorCQkJICBzdGF0ZSA9IDA7CisJCQllbHNlCQkgICAgICAvKiBpZiBhbnl0 aGluZyBpcyBsZWZ0ICovCisJCQkgIHN0YXRlID0gTkVFRF9IUlM7ICAgLyogbm93IHdlIHdhbnQg aG91cnMuICovCisJCSAgICB9IGVsc2UgaWYgKChjID09ICdXJyB8fCBjID09ICd3JykgJiYgIWlz YWxwaGEoKihwMisxKSkpIHsKKwkJCWRkYXlzID0gYXRvaShwKSAqIDc7ICAgLyogd2Vla3MuLi4g Ki8KKwkJCWlmICghKihwMisxKSkJCQkKKwkJCSAgc3RhdGUgPSAwOworCQkJZWxzZQorCQkJICBz dGF0ZSA9IE5FRURfSFJTOworCQkgICAgfSBlbHNlIGlmICgoYyA9PSAnTScgfHwgYyA9PSAnbScp ICYmICFpc2FscGhhKCoocDIrMSkpKSB7CisJCQlkbW9udGhzID0gYXRvaShwKTsgLyogbW9udGhz Li4uICovCisJCQlpZiAoISoocDIrMSkpCQkJCisJCQkgIHN0YXRlID0gMDsKKwkJCWVsc2UKKwkJ CSAgc3RhdGUgPSBORUVEX0hSUzsKKwkJICAgIH0gZWxzZSBpZiAoKGMgPT0gJ1knIHx8IGMgPT0g J3knKSAmJiAhaXNhbHBoYSgqKHAyKzEpKSkgeworCQkJZHllYXJzID0gYXRvaShwKTsgLyogeWVh cnMuLi4gKi8KKwkJCWlmICghKihwMisxKSkJCQkKKwkJCSAgc3RhdGUgPSAwOworCQkJZWxzZQor CQkJICBzdGF0ZSA9IE5FRURfSFJTOworCQkgICAgfSBlbHNlIGlmIChjID09ICc6JykgeyAvKiBk ZWxpbWl0ZXIgaXMgY29sb24gKi8KKwkJCWRob3VycyA9IGF0b2kocCk7ICAvKiBzbyBpdCdzIGhv dXJzICovCisJCQlzdGF0ZSA9IE5FRURfTUlOUzsgLyogbm93IHdlIHdhbnQgbWludXRlcyAqLwor CQkgICAgfSBlbHNlIGlmICghYykgeyAgICAgICAvKiBlbmQgb2Ygc3RyaW5nICovCisJCQlkaG91 cnMgPSBhdG9pKHApOyAgLyogaXQncyBzdGlsbCBob3VycyAqLworCQkJc3RhdGUgPSAwOyAgICAg ICAgIC8qIGFuZCB3ZSdyZSBkb25lICovCisJCSAgICB9IGVsc2UgaWYgKGlzYWxwaGEoYykgfHwg YyA9PSBTUCkgeworCQkJaWYgKGMgPT0gU1ApIHsJLyogSXQncyBhIGtleXdvcmQ/ICovCisJCQkg ICAgcDIrKzsJLyogU2tpcCBzcGFjZXMgKi8KKwkJCSAgICB3aGlsZSAoKnAyID09IFNQKQorCQkJ ICAgICAgcDIrKzsKKwkJCX0gZWxzZSB7CS8qIG9yIHJlcGxhY2UgZmlyc3QgbGV0dGVyICovCisJ CQkgICAgKnAyID0gYzsKKwkJCX0KKwkJCXAzID0gcDI7CS8qIHAyIHBvaW50cyB0byBiZWdpbm5p bmcgb2Yga2V5d29yZCAqLworCQkJd2hpbGUgKGlzYWxwaGEoKnAzKSkgLyogRmluZCBlbmQgb2Yg a2V5d29yZCAqLworCQkJICBwMysrOworCQkJYyA9ICpwMzsJLyogTlVMIGl0IG91dCBzbyB3ZSBj YW4gbG9vayBpdCB1cCAqLworCQkJaWYgKCpwMykJLyogcDMgcG9pbnRzIHRvIGtleXdvcmQgdGVy bWluYXRvciAqLworCQkJICAqcDMgPSBOVUw7CisJCQl1bml0cyA9IGxvb2t1cCh0aW1ldW5pdHMs cDIsbnVuaXRzLE5VTEwpOworCQkJaWYgKHVuaXRzIDwgMCkgeworCQkJICAgIG1ha2VzdHIoJmNt ZGF0ZW1zZywiSW52YWxpZCB1bml0cyBpbiBkZWx0YSB0aW1lIik7CisJCQkgICAgZGVidWcoRjEx MSwiY21jdnRkYXRlIixjbWRhdGVtc2csLTEpOworCQkJICAgIHJldHVybihOVUxMKTsKKwkJCX0K KwkJCSpwMiA9IE5VTDsJLyogUmUtdGVybWluYXRlIHRoZSBudW1iZXIgKi8KKwkJCSpwMyA9IGM7 CisJCQl3aGlsZSAoKnAzID09IFNQKSAvKiBQb2ludCBhdCBmaWVsZCBhZnRlciB1bml0cyAqLwor CQkJICBwMysrOworCQkJcDIgPSBwMzsKKwkJCXN3aXRjaCAodW5pdHMpIHsKKwkJCSAgY2FzZSBU VV9EQVlTOgorCQkJICAgIGRkYXlzID0gYXRvaShwKTsKKwkJCSAgICBicmVhazsKKwkJCSAgY2Fz ZSBUVV9XRUVLUzoKKwkJCSAgICBkZGF5cyA9IGF0b2kocCkgKiA3OworCQkJICAgIGJyZWFrOwor CQkJICBjYXNlIFRVX01PTlRIUzoKKwkJCSAgICBkbW9udGhzID0gYXRvaShwKTsKKwkJCSAgICBi cmVhazsKKwkJCSAgY2FzZSBUVV9ZRUFSUzoKKwkJCSAgICBkeWVhcnMgPSBhdG9pKHApOworCQkJ ICAgIGJyZWFrOworCQkJfQorCQkJaWYgKCpwMikgeworCQkJICAgIHN0YXRlID0gTkVFRF9IUlM7 CisJCQkgICAgcDItLTsKKwkJCX0gZWxzZQorCQkJICBzdGF0ZSA9IDA7CisKKwkJICAgIH0gZWxz ZSB7CQkvKiBBbnl0aGluZyBlbHNlICovCisJCQlzdGF0ZSA9IC0xOwkvKiBpcyBhbiBlcnJvciAq LworCQkgICAgfQorCQkgICAgYnJlYWs7CisJCSAgY2FzZSBORUVEX0hSUzoJLyogTG9va2luZyBm b3IgaG91cnMgKi8KKwkJICAgIGRlYnVnKEYwMDAsImNtY3Z0ZGF0ZSBORUVEX0hSUyIscCxjKTsK KwkJICAgIGlmIChjID09ICc6JykgeworCQkJZGhvdXJzID0gYXRvaShwKTsKKwkJCXN0YXRlID0g TkVFRF9NSU5TOworCQkgICAgfSBlbHNlIGlmICghYykgeworCQkJZGhvdXJzID0gYXRvaShwKTsK KwkJCXN0YXRlID0gMDsKKwkJICAgIH0gZWxzZSB7CisJCQlzdGF0ZSA9IC0xOworCQkgICAgfQor CQkgICAgYnJlYWs7CisJCSAgY2FzZSBORUVEX01JTlM6CS8qIExvb2tpbmcgZm9yIG1pbnV0ZXMg Ki8KKwkJICAgIGlmIChjID09ICc6JykgeworCQkJZG1pbnMgPSBhdG9pKHApOworCQkJc3RhdGUg PSBORUVEX1NFQ1M7CisJCSAgICB9IGVsc2UgaWYgKCFjKSB7CisJCQlkbWlucyA9IGF0b2kocCk7 CisJCQlzdGF0ZSA9IDA7CisJCSAgICB9IGVsc2UgeworCQkJc3RhdGUgPSAtMTsKKwkJICAgIH0K KwkJICAgIGJyZWFrOworCQkgIGNhc2UgTkVFRF9TRUNTOgkvKiBMb29raW5nIGZvciBzZWNvbmRz ICovCisJCSAgICBpZiAoYyA9PSAnLicpIHsKKwkJCWRzZWNzID0gYXRvaShwKTsKKwkJCXN0YXRl ID0gTkVFRF9GUkFDOworCQkgICAgfSBlbHNlIGlmICghYykgeworCQkJZHNlY3MgPSBhdG9pKHAp OworCQkJc3RhdGUgPSAwOworCQkgICAgfSBlbHNlIHsKKwkJCXN0YXRlID0gLTE7CisJCSAgICB9 CisJCSAgICBicmVhazsKKwkJICBjYXNlIE5FRURfRlJBQzoJLyogRnJhY3Rpb24gb2Ygc2Vjb25k ICovCisJCSAgICBpZiAoIWMgJiYgcmRpZ2l0cyhwKSkgeworCQkJaWYgKCpwID4gJzQnKQorCQkJ ICBkc2VjcysrOworCQkJc3RhdGUgPSAwOworCQkgICAgfSBlbHNlIHsKKwkJCXN0YXRlID0gLTE7 CisJCSAgICB9CisJCSAgICBicmVhazsKKwkJfQorCQlpZiAoYykJCQkvKiBuZXh0IGZpZWxkIGlm IGFueSAqLworCQkgIHAgPSBwMiArIDE7CisJICAgIH0KKwkgICAgaGF2ZWRlbHRhID0gMTsKKwor CX0gZWxzZSB7CisJICAgIG1ha2VzdHIoJmNtZGF0ZW1zZywiRXh0cmFuZW91cyBtYXRlcmlhbCBh dCBlbmQiKTsKKwkgICAgZGVidWcoRjExMSwiY21jdnRkYXRlIixjbWRhdGVtc2csLTEpOworCSAg ICByZXR1cm4oTlVMTCk7CisJfQorICAgIH0KKworIHhjbWRhdGU6CisKKyAgICBpZiAoKHQgIT0g MiAmJiBoaCA+IDI0KSB8fCBoaCA8IDApIHsgLyogSG91ciByYW5nZSBjaGVjayAqLworCW1ha2Vz dHIoJmNtZGF0ZW1zZywiSW52YWxpZCBob3VycyIpOworCWRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSIs Y21kYXRlbXNnLC0xKTsKKwlyZXR1cm4oTlVMTCk7CisgICAgfQorICAgIGlmIChtbSA+IDU5KSB7 CQkJLyogTWludXRlIHJhbmdlIGNoZWNrICovCisJbWFrZXN0cigmY21kYXRlbXNnLCJJbnZhbGlk IG1pbnV0ZXMiKTsKKwlkZWJ1ZyhGMTExLCJjbWN2dGRhdGUiLGNtZGF0ZW1zZywtMSk7CisJcmV0 dXJuKE5VTEwpOworICAgIH0KKyAgICBpZiAoZmYgPiAwKSB7CQkJLyogRnJhY3Rpb24gb2Ygc2Vj b25kPyAqLworCWlmIChzcyA8IDU5KSB7CisJICAgIHNzKys7CisJICAgIGZmID0gMDsKKwl9IGVs c2UgaWYgKG1tIDwgNTkpIHsKKwkgICAgc3MgPSAwOworCSAgICBtbSsrOworCSAgICBmZiA9IDA7 CisJfSBlbHNlIGlmIChoaCA8IDI0KSB7CisJICAgIHNzID0gMDsKKwkgICAgbW0gPSAwOworCSAg ICBoaCsrOworCSAgICBmZiA9IDA7CisJfQorCS8qIE11c3QgYWRkIGEgZGF5IC0tIGxlYXZlIGZm IGF0IDEuLi4gKi8KKwkvKiAoRE8gU09NRVRISU5HIEFCT1VUIFRISVMgTEFURVIpICovCisgICAg fQorICAgIGlmIChzcyA+IDYwKSB7CQkJLyogU2Vjb25kcyByYW5nZSBjaGVjayAqLworCW1ha2Vz dHIoJmNtZGF0ZW1zZywiSW52YWxpZCBzZWNvbmRzIik7IC8qIDYwIGlzIG9rIGJlY2F1c2Ugb2Yg Ki8KKwlkZWJ1ZyhGMTExLCJjbWN2dGRhdGUiLGNtZGF0ZW1zZywtMSk7ICAvKiBMZWFwIFNlY29u ZC4gKi8KKwlyZXR1cm4oTlVMTCk7CisgICAgfQorICAgIGlmICgobW0gPCAwIHx8IHNzIDwgMCkg fHwKKwkodCAhPSAyICYmIChzcyA+IDAgfHwgbW0gPiAwKSAmJiBoaCA+IDIzKSkgeworCW1ha2Vz dHIoJmNtZGF0ZW1zZywiSW52YWxpZCBtaW51dGVzIG9yIHNlY29uZHMiKTsKKwlkZWJ1ZyhGMTEx LCJjbWN2dGRhdGUiLGNtZGF0ZW1zZywtMSk7CisJcmV0dXJuKE5VTEwpOworICAgIH0KKyAgICBk ZWJ1ZyhGMTEwLCJjbWN2dGRhdGUgeWVhciIseWVhciwwKTsKKyAgICBkZWJ1ZyhGMTEwLCJjbWN2 dGRhdGUgbW9udGgiLG1vbnRoLDApOworICAgIGRlYnVnKEYxMDEsImNtY3Z0ZGF0ZSBuZGF5Iiwi IixuZGF5KTsKKyAgICBkZWJ1ZyhGMTAxLCJjbWN2dGRhdGUgaGgiLCIiLGhoKTsKKyAgICBkZWJ1 ZyhGMTAxLCJjbWN2dGRhdGUgbW0iLCIiLG1tKTsKKyAgICBkZWJ1ZyhGMTAxLCJjbWN2dGRhdGUg c3MiLCIiLHNzKTsKKyAgICBkZWJ1ZyhGMTAxLCJjbWN2dGRhdGUgZ210c2lnbiIsIiIsZ210c2ln bik7CisgICAgZGVidWcoRjEwMSwiY21jdnRkYXRlIHpoaCIsIiIsemhoKTsKKyAgICBkZWJ1ZyhG MTAxLCJjbWN2dGRhdGUgem1tIiwiIix6bW0pOworICAgIGRlYnVnKEYxMDEsImNtY3Z0ZGF0ZSBp c2dtdCIsIiIsaXNnbXQpOworCisjaWZkZWYgWkxPQ0FMVElNRQorLyogSGFuZGxlIHRpbWV6b25l IC0tIGZpcnN0IGNvbnZlcnQgdG8gR01UICovCisKKyAgICB6ZGQgPSAwOwkJCQkvKiBEYXlzIGNo YW5nZWQgKi8KKyAgICBpZiAoaXNnbXQgJiYgKHptbSB8fCB6aGgpKSB7CS8qIElmIEdNVCBvZmZz ZXQgZ2l2ZW4gKi8KKwlsb25nIHNlYzEsIHNlYzIsIHp6OworCXNlYzEgPSBzcyArIDYwICogbW0g KyAzNjAwICogaGg7CisJc2VjMiA9IGdtdHNpZ24gKiAoNjAgKiB6bW0gKyAzNjAwICogemhoKTsK KwlzZWMxICs9IHNlYzI7CisJaWYgKHNlYzEgPCAwKSB7CisJICAgIHNlYzEgPSAwIC0gc2VjMTsK KwkgICAgemRkID0gMEwgLSAoc2VjMSAvIDg2NDAwTCk7CisJICAgIHNlYzEgPSBzZWMxICUgODY0 MDBMOworCX0gZWxzZSBpZiAoc2VjMSA+IDg2NDAwTCkgeworCSAgICB6ZGQgPSBzZWMxIC8gODY0 MDBMOworCSAgICBzZWMxID0gc2VjMSAlIDg2NDAwTDsKKwl9CisJc3MgPSBzZWMxICUgNjA7CisJ enogPSBzZWMxIC8gNjA7CisJbW0gPSB6eiAlIDYwOworCWhoID0genogLyA2MDsKKwlkZWJ1ZyhG MTAxLCJjbWN2dGRhdGUgTkVXIGhoIiwiIixoaCk7CisJZGVidWcoRjEwMSwiY21jdnRkYXRlIE5F VyBtbSIsIiIsbW0pOworCWRlYnVnKEYxMDEsImNtY3Z0ZGF0ZSBORVcgZGQiLCIiLHpkZCk7CisK Ky8qIEF0IHRoaXMgcG9pbnQgaGg6bW06c3MgaXMgaW4gR01UIGFuZCB6ZGQgaXMgdGhlIGNhbGVu ZGFyIGFkanVzdG1lbnQgKi8KKworICAgIH0KKyNlbmRpZiAvKiBaTE9DQUxUSU1FICovCisKKyAg ICBpZiAoeXl5eW1tZGRbMF0gJiYgIXllYXIpIHsKKwlja3N0cm5jcHkoeWVhcmJ1Zix5eXl5bW1k ZCw1KTsKKwlja3N0cm5jcHkobW9uYnVmLCZ5eXl5bW1kZFs0XSwzKTsKKwlja3N0cm5jcHkoZGF5 YnVmLCZ5eXl5bW1kZFs2XSwzKTsKKwl5ZWFyID0geWVhcmJ1ZjsKKwltb250aCA9IG1vbmJ1ZjsK KwlkYXkgPSBkYXlidWY7CisJbmRheSA9IGF0b2koZGF5YnVmKTsKKyAgICB9CisgICAgc3ByaW50 Zih6YnVmLCIlMDRkJTAyZCUwMmQgJTAyZDolMDJkOiUwMmQiLCAvKiBTQUZFICovCisJICAgIGF0 b2koeWVhciksYXRvaShtb250aCksbmRheSxoaCxtbSxzcworCSAgICApOworICAgIGRwID0gemJ1 ZjsKKworI2lmZGVmIFpMT0NBTFRJTUUKKyAgICAvKiBOb3cgY29udmVydCBmcm9tIEdNVCB0byBs b2NhbCB0aW1lICovCisKKyAgICBpZiAoaXNnbXQpIHsJCQkvKiBJZiBHTVQgY29udmVydCB0byBs b2NhbCB0aW1lICovCisJZGVidWcoRjExMCwiY21jdnRkYXRlIEdNVCAxIixkcCwwKTsKKwlpZiAo emRkKSB7CQkJLyogQXBwbHkgYW55IGNhbGVuZGFyIGFkanVzdG1lbnQgKi8KKwkgICAgbG9uZyB6 ejsKKwkgICAgenogPSBtamQoZHApICsgemRkOworCSAgICBzcHJpbnRmKHpidWYsIiVzICUwMmQ6 JTAyZDolMDJkIixtamQyZGF0ZSh6eiksaGgsbW0sc3MpOworCX0KKwlkZWJ1ZyhGMTEwLCJjbWN2 dGRhdGUgR01UIDIiLGRwLDApOworCWlmICgocCA9IHpsb2NhbHRpbWUoZHApKSkgeworCSAgICBk ZWJ1ZyhGMTEwLCJjbWN2dGRhdGUgYXNjdGltZSB6bG9jYWx0aW1lIixwLDApOworCSAgICBpZiAo cCkgY2tzdHJuY3B5KHpidWYscCwxOCk7CisJfQorCWRlYnVnKEYxMTAsImNtY3Z0ZGF0ZSBHTVQg MyIsZHAsMCk7CisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKKwkgIHllYXJidWZbaV0gPSBkcFtp XTsKKwl5ZWFyYnVmWzRdID0gTlVMOworCW1vbmJ1ZlswXSA9IGRwWzRdOworCW1vbmJ1ZlsxXSA9 IGRwWzVdOworCW1vbmJ1ZlsyXSA9IE5VTDsKKwlkYXlidWZbMF0gPSBkcFs2XTsKKwlkYXlidWZb MV0gPSBkcFs3XTsKKwlkYXlidWZbMl0gPSBOVUw7CisJZGF5ID0gZGF5YnVmOworCW5kYXkgPSBh dG9pKGRheWJ1Zik7CisJbW9udGggPSBtb25idWY7CisJeWVhciA9IHllYXJidWY7CisJaGggPSBh dG9pKCZkcFs5XSk7CisJbW0gPSBhdG9pKCZkcFsxMl0pOworCXNzID0gYXRvaSgmZHBbMTVdKTsK KyAgICB9CisjZW5kaWYgLyogWkxPQ0FMVElNRSAqLworCisjaWZkZWYgREVCVUcKKyAgICBpZiAo ZGVibG9nKSB7CisJZGVidWcoRjEwMSwiY21jdnRkYXRlIGhvdXIiLCIiLGhoKTsKKwlkZWJ1ZyhG MTAxLCJjbWN2dGRhdGUgbWludXRlIiwiIixtbSk7CisJZGVidWcoRjEwMSwiY21jdnRkYXRlIHNl Y29uZCIsIiIsc3MpOworICAgIH0KKyNlbmRpZiAvKiBERUJMT0cgKi8KKworICAgIG1ha2VzdHIo JmNtZGF0ZW1zZyxOVUxMKTsKKyAgICBpZiAoaGF2ZWRlbHRhKSB7CisjaWZkZWYgREVCVUcKKwlp ZiAoZGVibG9nKSB7CisJICAgIGRlYnVnKEYxMTAsImNtY3Z0ZGF0ZSBiYXNlICIsZHAsMCk7CisJ ICAgIGRlYnVnKEYxMDEsImNtY3Z0ZGF0ZSBkZWx0YSBzaWduIiwiIixkc2lnbik7CisJICAgIGRl YnVnKEYxMDEsImNtY3Z0ZGF0ZSBkZWx0YSB5cnMgIiwiIixkeWVhcnMpOworCSAgICBkZWJ1ZyhG MTAxLCJjbWN2dGRhdGUgZGVsdGEgbW9zICIsIiIsZG1vbnRocyk7CisJICAgIGRlYnVnKEYxMDEs ImNtY3Z0ZGF0ZSBkZWx0YSBkYXlzIiwiIixkZGF5cyk7CisJICAgIGRlYnVnKEYxMDEsImNtY3Z0 ZGF0ZSBkZWx0YSBocnMgIiwiIixkaG91cnMpOworCSAgICBkZWJ1ZyhGMTAxLCJjbWN2dGRhdGUg ZGVsdGEgbWlucyIsIiIsZG1pbnMpOworCSAgICBkZWJ1ZyhGMTAxLCJjbWN2dGRhdGUgZGVsdGEg c2VjcyIsIiIsZHNlY3MpOworCX0KKyNlbmRpZiAvKiBERUJMT0cgKi8KKwlpZiAoIShkcCA9IGNt ZGVsdGEoYXRvaSh5ZWFyKSwKKwkJICAgIGF0b2kobW9udGgpLAorCQkgICAgbmRheSwgaGgsIG1t LCBzcywKKwkJICAgIGRzaWduLCBkeWVhcnMsIGRtb250aHMsIGRkYXlzLCBkaG91cnMsIGRtaW5z LCBkc2VjcykpKSB7CisJICAgIGRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSIsY21kYXRlbXNnLC0xKTsK KwkgICAgcmV0dXJuKE5VTEwpOworCX0KKyAgICB9CisKKyAgeGN2dGRhdGU6CQkJCS8qIEV4aXQg cG9pbnQgZm9yIHN1Y2Nlc3MgKi8KKyAgICB7CisJaW50IGxlbiwgaywgbjsKKwljaGFyICogcDsK KwlkZWJ1ZyhGMTEwLCJjbWN2dGRhdGUgeGN2dGRhdGUgZHAiLGRwLDApOworCWlmICghZHApIGRw ID0gIiI7CQkvKiBTaG91bGRuJ3QgaGFwcGVuICovCisJaWYgKCEqZHApIHJldHVybihOVUxMKTsJ CS8qIC4uLiAqLworCWxlbiA9IHN0cmxlbihkcCk7CisJZGVidWcoRjExMSwiY21jdnRkYXRlIHJl c3VsdCIsZHAsbGVuKTsKKwlrID0gY21kYXRlYnAgLSAoY2hhciAqKWNtZGF0ZWJ1ZjsgLyogU3Bh Y2UgdXNlZCAqLworCW4gPSBDTURBVEVCVUYgLSBrIC0gMTsJCS8qIFNwYWNlIGxlZnQgKi8KKwlp ZiAobiA8IGxlbikgewkJCS8qIE5vdCBlbm91Z2g/ICovCisJICAgIGNtZGF0ZWJwID0gY21kYXRl YnVmOwkvKiBXcmFwIGFyb3VuZCAqLworCSAgICBuID0gQ01EQVRFQlVGOworCX0KKwlja3N0cm5j cHkoY21kYXRlYnAsZHAsbik7CisJcCA9IGNtZGF0ZWJwOworCWNtZGF0ZWJwICs9IGxlbiArIDE7 CisJcmV0dXJuKHApOworICAgIH0KK30KKworaW50CitjbXZkYXRlKGQpIGNoYXIgKiBkOyB7CQkJ LyogVmVyaWZ5IGRhdGUtdGltZSAqLworICAgIGludCBpOworICAgIGlmICghZCkgcmV0dXJuKDAp OworICAgIGlmICgoaW50KXN0cmxlbihkKSAhPSAxNykgcmV0dXJuKDApOworICAgIGZvciAoaSA9 IDA7IGkgPCA4OyBpKyspIHsgaWYgKCFpc2RpZ2l0KGRbaV0pKSByZXR1cm4oMCk7IH0KKyAgICBp ZiAoIWlzZGlnaXQoZFs5XSkgIHx8ICFpc2RpZ2l0KGRbMTBdKSB8fAorCSFpc2RpZ2l0KGRbMTJd KSB8fCAhaXNkaWdpdChkWzEzXSkgfHwKKwkhaXNkaWdpdChkWzE1XSkgfHwgIWlzZGlnaXQoZFsx Nl0pKQorICAgICAgcmV0dXJuKDApOworICAgIGlmICghY2tzdHJjaHIoIiBUdF8tOiIsZFs4XSkp IHJldHVybigwKTsKKyAgICBpZiAoZFsxMV0gIT0gJzonICYmIGRbMTRdICE9ICc6JykgcmV0dXJu KDApOworICAgIHJldHVybigxKTsKK30KKworLyogYyBtIGQgaSBmIGYgZCBhIHQgZSAgLS0gIEdl dCBkaWZmZXJlbmNlIGJldHdlZW4gdHdvIGRhdGUtdGltZXMgKi8KKworY2hhciAqCitjbWRpZmZk YXRlKGQxLGQyKSBjaGFyICogZDEsICogZDI7IHsKKyAgICBjaGFyIGQxYnVmWzldLCBkMmJ1Zls5 XTsKKyAgICBjaGFyIHgxYnVmWzE4XSwgeDJidWZbMThdOworICAgIGNoYXIgKiBwOworCisgICAg aW50IGhoMSA9IDAsIG1tMSA9IDAsIHNzMSA9IDA7CisgICAgaW50IGhoMiA9IDAsIG1tMiA9IDAs IHNzMiA9IDA7CisgICAgaW50IGhoLCBtbSwgc3M7CisgICAgaW50IHNpZ247CisgICAgbG9uZyBq ZDEsIGpkMiwgamQsIGYxLCBmMiwgZng7CisgICAgc3RhdGljIGNoYXIgcmVzdWx0WzI0XSwgKnJw OworCisgICAgZGVidWcoRjExMCwiY21kaWZmZGF0ZSBkMSBBIixkMSwwKTsKKyAgICBkZWJ1ZyhG MTEwLCJjbWRpZmZkYXRlIGQyIEEiLGQyLDApOworCisgICAgaWYgKCEocCA9IGNtY3Z0ZGF0ZShk MSwxKSkpCQkvKiBDb252ZXJ0IGRhdGVzIHRvIHN0YW5kYXJkIGZvcm1hdCAqLworICAgICAgcmV0 dXJuKE5VTEwpOworICAgIGNrc3RybmNweSh4MWJ1ZixwLDE4KTsKKyAgICBkMSA9IHgxYnVmOwor CisgICAgaWYgKCEocCA9IGNtY3Z0ZGF0ZShkMiwxKSkpCisgICAgICByZXR1cm4oTlVMTCk7Cisg ICAgY2tzdHJuY3B5KHgyYnVmLHAsMTgpOworICAgIGQyID0geDJidWY7CisKKyAgICBkZWJ1ZyhG MTEwLCJjbWRpZmZkYXRlIGQxIEIiLGQxLDApOworICAgIGRlYnVnKEYxMTAsImNtZGlmZmRhdGUg ZDIgQiIsZDIsMCk7CisgICAgaWYgKCFjbXZkYXRlKGQxKSB8fCAhY212ZGF0ZShkMikpCisgICAg ICByZXR1cm4oTlVMTCk7CisKKyAgICBoaDEgPSBhdG9pKCZkMVs5XSk7CQkJLyogR2V0IGhvdXJz LCBtaW51dGVzLCBhbmQgc2Vjb25kcyAqLworICAgIG1tMSA9IGF0b2koJmQxWzEyXSk7CQkvKiBm b3IgZmlyc3QgZGF0ZSAqLworICAgIHNzMSA9IGF0b2koJmQxWzE1XSk7CisgICAgY2tzdHJuY3B5 KGQxYnVmLGQxLDkpOworCisgICAgaGgyID0gYXRvaSgmZDJbOV0pOwkJCS8qIGRpdHRvIGZvciBz ZWNvbmQgZGF0ZSAqLworICAgIG1tMiA9IGF0b2koJmQyWzEyXSk7CisgICAgc3MyID0gYXRvaSgm ZDJbMTVdKTsKKyAgICBja3N0cm5jcHkoZDJidWYsZDIsOSk7CisgICAgCisgICAgamQxID0gbWpk KGQxYnVmKTsJCQkvKiBHZXQgdGhlIHR3byBKdWxpYW4gZGF0ZXMgKi8KKyAgICBqZDIgPSBtamQo ZDJidWYpOworICAgIGYxID0gc3MxICsgNjAgKiBtbTEgKyAzNjAwICogaGgxOwkvKiBDb252ZXJ0 IGZpcnN0IHRpbWUgdG8gc2Vjb25kcyAqLworCisgICAgZjIgPSBzczIgKyA2MCAqIG1tMiArIDM2 MDAgKiBoaDI7CS8qIERpdHRvIGZvciBzZWNvbmQgdGltZSAqLworICAgIGRlYnVnKEYxMDEsImNt ZGlmZmRhdGUgamQxIiwiIixqZDEpOworICAgIGRlYnVnKEYxMDEsImNtZGlmZmRhdGUgZjEiLCIi LGYxKTsKKyAgICBkZWJ1ZyhGMTAxLCJjbWRpZmZkYXRlIGpkMiIsIiIsamQyKTsKKyAgICBkZWJ1 ZyhGMTAxLCJjbWRpZmZkYXRlIGYyIiwiIixmMik7CisgIAorICAgIGlmIChqZDIgPiBqZDEgfHwg KGpkMSA9PSBqZDIgJiYgZjIgPiBmMSkpIHsKKyAgICAgICAgc2lnbiA9IC0xOyAKKyAgICAgICAg aWYgKGYxID4gZjIpIHtqZDItLTsgZjIgKz0gODY0MDBMO30KKyAgICAgICAgamQgPSBqZDIgLSBq ZDE7CisgICAgICAgIGZ4ID0gZjIgLSBmMTsKKyAgICB9IGVsc2UgeworICAgICAgICBzaWduID0g MTsKKyAgICAgICAgaWYgKGYyID4gZjEpIHtqZDEtLTsgZjEgKz0gODY0MDBMO30KKyAgICAgICAg amQgPSBqZDEgLSBqZDI7CisgICAgICAgIGZ4ID0gZjEgLSBmMjsKKyAgICB9CisgICAgZGVidWco RjExMSwiY21kaWZmZGF0ZSBzaWduIGpkIixzaWduPDA/Ii0iOiIrIixqZCk7CisgICAgZGVidWco RjEwMSwiY21kaWZmZGF0ZSBmeCIsIiIsZngpOworICAKKyAgICBoaCA9IChpbnQpIChmeCAvIDM2 MDBMKTsJCS8qIENvbnZlcnQgc2Vjb25kcyB0byBoaDptbTpzcyAqLworCisgICAgbW0gPSAoaW50 KSAoZnggJSAzNjAwTCkgLyA2MEw7CisgICAgc3MgPSAoaW50KSAoZnggJSAzNjAwTCkgJSA2MEw7 CisKKyAgICBycCA9IHJlc3VsdDsJCQkvKiBGb3JtYXQgdGhlIHJlc3VsdCAqLworICAgICpycCsr ID0gKHNpZ24gPCAwKSA/ICctJyA6ICcrJzsKKyAgICBpZiAoamQgIT0gMCAmJiBoaCttbStzcyA9 PSAwKSB7CisJc3ByaW50ZihycCwiJWxkZCIsamQpOworICAgIH0gZWxzZSBpZiAoamQgPT0gMCkg eworCWlmIChzcyA9PSAwKQorCSAgc3ByaW50ZihycCwiJWQ6JTAyZCIsaGgsbW0pOworCWVsc2UK KwkgIHNwcmludGYocnAsIiVkOiUwMmQ6JTAyZCIsaGgsbW0sc3MpOworICAgIH0gZWxzZSB7CisJ aWYgKHNzID09IDApCisJICBzcHJpbnRmKHJwLCIlbGRkJWQ6JTAyZCIsamQsaGgsbW0pOworCWVs c2UKKwkgIHNwcmludGYocnAsIiVsZGQlZDolMDJkOiUwMmQiLGpkLGhoLG1tLHNzKTsKKyAgICB9 CisgICAgZGVidWcoRjExMCwiY21kaWZmZGF0ZSByZXN1bHQiLHJlc3VsdCwwKTsKKyAgICByZXR1 cm4oKGNoYXIgKilyZXN1bHQpOworfQorCisjaWZuZGVmIE5PU1BMCisvKiBzIGggdSBmIGYgbCBl IGQgYSB0IGUgIC0tICBSZWFycmFuZ2UgZGF0ZSBzdHJpbmcgKi8KKworLyoKKyAgQ2FsbCB3aXRo OgorICAgIEEgZGF0ZSBzdHJpbmcgaW4gc3RhbmRhcmQgZm9ybWF0OiB5eXl5bW1kZCBoaDptbTpz cyAodGltZSBvcHRpb25hbCkuCisgICAgT3B0aW9uczoKKyAgICAgIDE6IFJlZm9ybWF0IGRhdGUg dG8geXl5eS1tbW0tZGQgKG1tbSA9IEVuZ2xpc2ggbW9udGggYWJicmV2aWF0aW9uKS4KKyAgICAg IDI6IFJlZm9ybWF0IGRhdGUgdG8gZGQtbW1tLXl5eXkgKG1tbSA9IEVuZ2xpc2ggbW9udGggYWJi cmV2aWF0aW9uKS4KKyAgICAgIDM6IFJlZm9ybWF0IGFzIG51bWVyaWMgeXl5eW1tZGRoaG1tc3Mu CisgICAgICA0OiBSZWZvcm1hdCBpbiBhc2N0aW1lKCkgZm9ybWF0IFNhdCBOb3YgMjYgMTE6MTA6 MzQgMjAwNQorICAgIFJldHVybnM6CisgICAgICBQb2ludGVyIHRvIHJlc3VsdCBpZiBhcmdzIHZh bGlkLCBvdGhlcndpc2Ugb3JpZ2luYWwgYXJnIHBvaW50ZXIuCisqLworY2hhciAqCitzaHVmZmxl ZGF0ZShwLG9wdCkgY2hhciAqIHA7IGludCBvcHQ7IHsKKyAgICBleHRlcm4gY2hhciAqIHdrZGF5 c1tdOworICAgIGludCBsZW47CisgICAgY2hhciBpYnVmWzMyXTsKKyAgICBzdGF0aWMgY2hhciBv YnVmWzQ4XTsKKyAgICBjaGFyIGM7CisgICAgaW50IHl5LCBkZCwgbW07CisKKyAgICBpZiAoIXAp IHAgPSAiIjsKKyAgICBpZiAoISpwKSBwID0gY2tkYXRlKCk7CisgICAgaWYgKG9wdCA8IDEgfHwg b3B0ID4gNCkKKyAgICAgIHJldHVybihwKTsKKyAgICBsZW4gPSBzdHJsZW4ocCk7CisgICAgaWYg KGxlbiA8IDggfHwgbGVuID4gMzEpIHJldHVybihwKTsKKyAgICBpZiAob3B0ID09IDQpIHsJCQkv KiBBc2N0aW1lIGZvcm1hdCAoMjYgTm92IDIwMDUpICovCisJY2hhciBjLCAqIHM7CisJbG9uZyB6 OyBpbnQgazsKKwlja3N0cm5jcHkoaWJ1ZixwLDMxKTsKKwlrID0gbGVuOworCXdoaWxlIChrID49 IDAgJiYgaWJ1ZltrXSA9PSBDUiB8fCBpYnVmW2tdID09IExGKQorCSAgaWJ1ZltrLS1dID0gTlVM OworCXdoaWxlIChrID49IDAgJiYgaWJ1ZltrXSA9PSBTUCB8fCBpYnVmW2tdID09IEhUKQorCSAg aWJ1ZltrLS1dID0gTlVMOworCWlmIChrIDwgOSkgY2tzdHJuY3B5KCZpYnVmWzhdLCIgMDA6MDA6 MDAiLDkpOworCXAgPSBpYnVmOworICAgICAgICB6ID0gbWpkKHApOyAgICAgICAgICAgICAgICAg ICAgIC8qIENvbnZlcnQgdG8gbW9kaWZpZWQgSnVsaWFuIGRhdGUgKi8KKyAgICAgICAgeiA9IHog JSA3TDsKKyAgICAgICAgaWYgKHogPCAwKSB7CisgICAgICAgICAgICB6ID0gMCAtIHo7CisgICAg ICAgICAgICBrID0gNiAtICgoaW50KXogKyAzKSAlIDc7CisgICAgICAgIH0gZWxzZSB7CisgICAg ICAgICAgICBrID0gKChpbnQpeiArIDMpICUgNzsJLyogRGF5IG9mIHdlZWsgKi8KKyAgICAgICAg fQorCXMgPSB3a2RheXNba107CisgICAgICAgIG9idWZbMF0gPSBzWzBdOwkJCS8qIERheSBvZiB3 ZWVrICovCisgICAgICAgIG9idWZbMV0gPSBzWzFdOworICAgICAgICBvYnVmWzJdID0gc1syXTsK KyAgICAgICAgb2J1ZlszXSA9IFNQOwkJCS8qIFNwYWNlICovCisJYyA9IHBbNl07CisgICAgICAg IHBbNl0gPSBOVUw7CisJbW0gPSBhdG9pKCZpYnVmWzRdKTsJCS8qIE1vbnRoICovCisJcyA9IG1v bmFtZVttbS0xXTsJCS8qIE5hbWUgb2YgbW9udGggKi8KKwlwWzZdID0gYzsKKworICAgICAgICBv YnVmWzRdID0gc1swXTsJCQkvKiBNb250aCAqLworICAgICAgICBvYnVmWzVdID0gc1sxXTsKKyAg ICAgICAgb2J1Zls2XSA9IHNbMl07CisgICAgICAgIG9idWZbN10gPSBTUDsJCQkvKiBTcGFjZSAq LworCWlmIChwWzZdID09ICcwJykJCS8qIERhdGUgb2YgbW9udGggKi8KKwkgIG9idWZbOF0gPSBT UDsKKwllbHNlCisJICBvYnVmWzhdID0gcFs2XTsKKyAgICAgICAgb2J1Zls5XSA9IHBbN107CisJ Y2tzdHJuY3B5KCZvYnVmWzEwXSwmcFs4XSwxMCk7CS8qIFRpbWUgKi8KKyAgICAgICAgb2J1Zlsx OV0gPSBTUDsJCQkvKiBTcGFjZSAqLworCW9idWZbMjBdID0gcFswXTsJCS8qIFllYXIgKi8KKwlv YnVmWzIxXSA9IHBbMV07CisJb2J1ZlsyMl0gPSBwWzJdOworCW9idWZbMjNdID0gcFszXTsKKwlv YnVmWzI0XSA9IE5VTDsKKwlyZXR1cm4oKGNoYXIgKilvYnVmKTsKKyAgICB9CisgICAgaWYgKG9w dCA9PSAzKSB7CisJY2tzdHJuY3B5KG9idWYscCw0OCk7CisJLyogeXl5eW1tZGQgaGg6bW06c3Mg Ki8KKwkvKiAwMTIzNDU2Nzg5MDEyMzQ1NiAqLworCS8qIHl5eXltbWRkaGhtbXNzICAgICovCisJ b2J1Zls4XSA9IG9idWZbOV07CisJb2J1Zls5XSA9IG9idWZbMTBdOworCW9idWZbMTBdID0gb2J1 ZlsxMl07CisJb2J1ZlsxMV0gPSBvYnVmWzEzXTsKKwlvYnVmWzEyXSA9IG9idWZbMTVdOworCW9i dWZbMTNdID0gb2J1ZlsxNl07CisJb2J1ZlsxNF0gPSBOVUw7CisJcmV0dXJuKChjaGFyICopb2J1 Zik7CisgICAgfQorICAgIGNrc3RybmNweShpYnVmLHAsMzIpOworICAgIGMgPSBpYnVmWzRdOwkJ CS8qIFdhcm5pbmc6IG5vdCBZMTBLIGNvbXBsaWFudCAqLworICAgIGlidWZbNF0gPSBOVUw7Cisg ICAgaWYgKCFyZGlnaXRzKGlidWYpKQorICAgICAgcmV0dXJuKHApOworICAgIHl5ID0gYXRvaShp YnVmKTsKKyAgICBpZiAoeXkgPCAxIHx8IHl5ID4gOTk5OSkKKyAgICAgIHJldHVybihwKTsKKyAg ICBpYnVmWzRdID0gYzsKKyAgICBjID0gaWJ1Zls2XTsKKyAgICBpYnVmWzZdID0gTlVMOworICAg IGlmICghcmRpZ2l0cygmaWJ1Zls0XSkpCisgICAgICByZXR1cm4ocCk7CisgICAgbW0gPSBhdG9p KCZpYnVmWzRdKTsKKyAgICBpZiAobW0gPCAxIHx8IG1tID4gMTIpCisgICAgICByZXR1cm4ocCk7 CisgICAgaWJ1Zls2XSA9IGM7CisgICAgYyA9IGlidWZbOF07CisgICAgaWJ1Zls4XSA9IE5VTDsK KyAgICBpZiAoIXJkaWdpdHMoJmlidWZbNl0pKQorICAgICAgcmV0dXJuKHApOworICAgIGRkID0g YXRvaSgmaWJ1Zls2XSk7CisgICAgaWJ1Zls4XSA9IGM7CisgICAgaWYgKGRkIDwgMSB8fCBtbSA+ IDMxKQorICAgICAgcmV0dXJuKHApOworICAgIC8qIElHTk9SRSBXQVJOSU5HUyBBQk9VVCBtb25h bWVbXSBSRUZTIE9VVCBPRiBSQU5HRSAtIGl0J3MgcHJlY2hlY2tlZC4gKi8KKyAgICBzd2l0Y2gg KG9wdCkgeworICAgICAgY2FzZSAxOgorCXNwcmludGYob2J1ZiwiJTA0ZC0lcy0lMDJkJXMiLHl5 LG1vbmFtZVttbS0xXSxkZCwmaWJ1Zls4XSk7CisJYnJlYWs7CisgICAgICBjYXNlIDI6CisJc3By aW50ZihvYnVmLCIlMDJkLSVzLSUwNGQlcyIsZGQsbW9uYW1lW21tLTFdLHl5LCZpYnVmWzhdKTsK KyAgICB9CisgICAgcmV0dXJuKChjaGFyICopb2J1Zik7Cit9CisjZW5kaWYJLyogTk9TUEwgKi8K KworLyogIEMgSyBDIFYgVCBEIEEgVCBFICAtLSAgTGlrZSBjbWN2dGRhdGUoKSwgYnV0IHJldHVy bnMgc3RyaW5nLiAgKi8KKy8qICBGb3IgdXNlIGJ5IGRhdGUtcmVsYXRlZCBmdW5jdGlvbnMgKi8K Ky8qICBTZWUgY2FsbGluZyBjb252ZW50aW9ucyBmb3IgY21jdnRkYXRlKCkgYWJvdmUuICovCisK K2NoYXIgKgorY2tjdnRkYXRlKHAsdCkgY2hhciAqIHA7IGludCB0OyB7CisgICAgY2hhciAqIHM7 CisgICAgaWYgKCEocyA9IGNtY3Z0ZGF0ZShwLHQpKSkKKyAgICAgIHJldHVybigiPEJBRF9EQVRF X09SX1RJTUU+Iik7CS8qIFxmYmxhaCgpIGVycm9yIG1lc3NhZ2UgKi8KKyAgICBlbHNlCisgICAg ICByZXR1cm4ocyk7Cit9CisKKworLyogIEMgTSBEIEEgVCBFICAtLSAgUGFyc2UgYSBkYXRlIGFu ZC9vciB0aW1lICAqLworCisvKgorICBBY2NlcHRzIGRhdGUgaW4gdmFyaW91cyBmb3JtYXRzLiAg SWYgdGhlIGRhdGUgaXMgcmVjb2duaXplZCwKKyAgdGhpcyByb3V0aW5lIHJldHVybnMgMCBvciBn cmVhdGVyIHdpdGggdGhlIHJlc3VsdCBzdHJpbmcgcG9pbnRlcgorICBwb2ludGluZyB0byBhIGJ1 ZmZlciBjb250YWluaW5nIHRoZSBkYXRlIGFzICJ5eXl5bW1kZCBoaDptbTpzcyIuCisqLworaW50 CitjbWRhdGUoeGhscCx4ZGVmLHhwLHF1aWV0LGYpIGNoYXIgKnhobHAsICp4ZGVmLCAqKnhwOyBp bnQgcXVpZXQ7IHh4X3N0cnAgZjsgeworICAgIGludCB4LCByYzsKKyAgICBjaGFyICpvLCAqcywg KnpxLCAqZHA7CisKKyAgICBjbWZsZGZsZ3MgPSAwOworICAgIGlmICgheGhscCkgeGhscCA9ICIi OworICAgIGlmICgheGRlZikgeGRlZiA9ICIiOworICAgIGlmICghKnhobHApIHhobHAgPSAiRGF0 ZSBhbmQvb3IgdGltZSI7CisgICAgKnhwID0gIiI7CisKKyAgICByYyA9IGNtZmxkKHhobHAseGRl ZiwmcywoeHhfc3RycCkwKTsKKyAgICBkZWJ1ZyhGMTAxLCJjbWRhdGUgY21mbGQgcmMiLCIiLHJj KTsKKyAgICBpZiAocmMgPCAwKQorICAgICAgcmV0dXJuKHJjKTsKKyAgICBkZWJ1ZyhGMTEwLCJj bWRhdGUgMSIscywwKTsKKyAgICBvID0gczsJCQkJLyogUmVtZW1iZXIgd2hhdCB0aGV5IHR5cGVk LiAqLworICAgIHMgPSBicnN0cmlwKHMpOworICAgIGRlYnVnKEYxMTAsImNtZGF0ZSAyIixzLDAp OworCisgICAgeCA9IDA7CisgICAgaWYgKGYpIHsJCQkJLyogSWYgYSBjb252ZXJzaW9uIGZ1bmN0 aW9uIGlzIGdpdmVuICovCisJY2hhciAqIHBwOworCXpxID0gYXR4YnVmOwkJCS8qIGRvIHRoZSBj b252ZXJzaW9uLiAqLworCXBwID0gYXR4YnVmOworCWF0eG4gPSBDTURCTDsKKwlpZiAoKHggPSAo KmYpKHMsJnpxLCZhdHhuKSkgPCAwKSByZXR1cm4oLTIpOworCWlmICghKnBwKQorCSAgcHAgPSB4 ZGVmOworCWlmIChzZXRhdG0ocHAsMCkgPCAwKSB7CisJICAgIGlmICghcXVpZXQpIHByaW50Zigi P0V2YWx1YXRlZCBkYXRlIHRvbyBsb25nXG4iKTsKKwkgICAgcmV0dXJuKC05KTsKKwl9CisJcyA9 IGF0eGJ1ZjsKKyAgICB9CisgICAgZHAgPSBjbWN2dGRhdGUocywxKTsKKyAgICBpZiAoIWRwKSB7 CisJaWYgKCFxdWlldCkgcHJpbnRmKCI/JXNcbiIsY21kYXRlbXNnKTsKKwlyZXR1cm4oLTkpOwor ICAgIH0KKyAgICAqeHAgPSBkcDsKKyAgICByZXR1cm4oMCk7Cit9CisKKyNpZmRlZiBDS19SRUNB TEwJCQkvKiBDb21tYW5kLXJlY2FsbCBmdW5jdGlvbnMgKi8KKworLyogIEMgTSBSIEkgTiBJICAt LSAgSW5pdGlhbGl6ZSBvciBjaGFuZ2Ugc2l6ZSBvZiBjb21tYW5kIHJlY2FsbCBidWZmZXIgKi8K KworaW50CitjbXJpbmkobikgaW50IG47IHsKKyAgICBpbnQgaTsKKyAgICBpZiAocmVjYWxsICYm IGluX3JlY2FsbCkgewkJLyogRnJlZSBvbGQgc3RvcmFnZSwgaWYgYW55ICovCisJZm9yIChpID0g MDsgaSA8IGNtX3JlY2FsbDsgaSsrKSB7CisJICAgIGlmIChyZWNhbGxbaV0pIHsKKwkJZnJlZShy ZWNhbGxbaV0pOworCQlyZWNhbGxbaV0gPSBOVUxMOworCSAgICB9CisJfQorCWZyZWUocmVjYWxs KTsKKwlyZWNhbGwgPSBOVUxMOworICAgIH0KKyAgICBjbV9yZWNhbGwgPSBuOwkJCS8qIFNldCBu ZXcgc2l6ZSAqLworICAgIHJsYXN0ID0gY3VycmVudCA9IC0xOwkJLyogSW5pdGlhbGl6ZSBwb2lu dGVycyAqLworICAgIGlmIChuID4gMCkgeworCXJlY2FsbCA9IChjaGFyICoqKW1hbGxvYygoY21f cmVjYWxsICsgMSkgKiBzaXplb2YoY2hhciAqKSk7CisJaWYgKCFyZWNhbGwpCisJICByZXR1cm4o MSk7CisJZm9yIChpID0gMDsgaSA8IGNtX3JlY2FsbDsgaSsrKSB7CisJICAgIHJlY2FsbFtpXSA9 IE5VTEw7CisJfQorCWluX3JlY2FsbCA9IDE7CQkJLyogUmVjYWxsIGJ1ZmZlcnMgaW5pdCdkICov CisgICAgfQorICAgIHJldHVybigwKTsKK30KKworLyogIEMgTSBBIEQgRCBOIEUgWCBUICAtLSAg Rm9yY2UgYWRkaXRpb24gb2YgbmV4dCBjb21tYW5kICovCisKK1ZPSUQKK2NtYWRkbmV4dCgpIHsK KyAgICBpZiAob25fcmVjYWxsICYmIGluX3JlY2FsbCkgewkvKiBFdmVuIGlmIGl0IGRvZXNuJ3Qg Y29tZSAqLworCWZvcmNlX2FkZCA9IDE7CQkJLyogZnJvbSB0aGUga2V5Ym9hcmQgKi8KKwluZXdj bWQgPSAxOworCW5vX3JlY2FsbCA9IDA7CisgICAgfQorfQorCisvKiAgQyBNIEcgRSBUIEMgTSBE ICAtLSAgRmluZCBtb3N0IHJlY2VudCBtYXRjaGluZyBjb21tYW5kICAqLworCitjaGFyICoKK2Nt Z2V0Y21kKHMpIGNoYXIgKiBzOyB7CisgICAgaW50IGk7CisgICAgZm9yIChpID0gY3VycmVudDsg aSA+PSAwOyBpLS0pIHsJLyogU2VhcmNoIGJhY2t3YXJkIHRocnUgaGlzdG9yeSBsaXN0ICovCisJ aWYgKCFyZWNhbGxbaV0pIGNvbnRpbnVlOwkvKiBUaGlzIG9uZSdzIG51bGwsIHNraXAgaXQgKi8K KwlpZiAoY2ttYXRjaChzLHJlY2FsbFtpXSwwLDEpKQkvKiBNYXRjaD8gKi8KKwkgIHJldHVybihy ZWNhbGxbaV0pOwkJLyogWWVzLCByZXR1cm4gcG9pbnRlciAqLworICAgIH0KKyAgICByZXR1cm4o TlVMTCk7CQkJLyogTm8gbWF0Y2gsIHJldHVybiBOVUxMIHBvaW50ZXIgKi8KK30KKyNlbmRpZiAv KiBDS19SRUNBTEwgKi8KKworLyogIEEgRCBEIEMgTSBEICAtLSAgQWRkIGEgY29tbWFuZCB0byB0 aGUgcmVjYWxsIGJ1ZmZlciAgKi8KKworVk9JRAorYWRkY21kKHMpIGNoYXIgKiBzOyB7CisgICAg aW50IGxlbiA9IDAsIG5xID0gMDsKKyAgICBjaGFyICogcDsKKyNpZmRlZiBDS0xFQVJOCisgICAg ZXh0ZXJuIGludCBsZWFybmluZzsKKyNlbmRpZiAvKiBDS0xFQVJOICovCisKKyAgICBpZiAoeGNt ZHNyYykJCQkvKiBPbmx5IGZvciBpbnRlcmFjdGl2ZSBjb21tYW5kcyAqLworICAgICAgcmV0dXJu OworCisgICAgaWYgKCFuZXdjbWQpCQkJLyogVGhlIGNvbW1hbmQgaGFzIGJlZW4gaGVyZSBhbHJl YWR5ICovCisgICAgICByZXR1cm47CQkJCS8qIHNvIGlnbm9yZSBpdC4gKi8KKyAgICBuZXdjbWQg PSAwOwkJCQkvKiBJdCdzIG5ldyBidXQgZG8gdGhpcyBvbmx5IG9uY2UuICovCisKKyAgICBpZiAo IXMpIHMgPSBjbWRidWY7CisgICAgaWYgKHNbMF0pCisgICAgICBsZW4gPSBzdHJsZW4ocyk7CisK KyAgICBpZiAobGVuIDwgMSkJCQkvKiBEb24ndCBzYXZlIGVtcHR5IGNvbW1hbmRzICovCisgICAg ICByZXR1cm47CisKKyAgICBwID0gczsKKyAgICB3aGlsZSAoKnApIHsgaWYgKCpwKysgPT0gJz8n KSBucSsrOyB9IC8qIENvdW50IHF1ZXN0aW9uIG1hcmtzICovCisKKyNpZmRlZiBDS0xFQVJOCisg ICAgaWYgKGxlYXJuaW5nKQkJCS8qIElmIGEgbGVhcm5lZCBzY3JpcHQgaXMgYWN0aXZlICovCisg ICAgICBsZWFybmNtZChzKTsJCQkvKiByZWNvcmQgdGhpcyBjb21tYW5kLiAqLworI2VuZGlmIC8q IENLTEVBUk4gKi8KKworICAgIGRlYnVnKEYwMTAsIkNNRChQKSIscywwKTsJCS8qIE1heWJlIHJl Y29yZCBpdCBpbiB0aGUgZGVidWcgbG9nICovCisKKyNpZmRlZiBDS1NZU0xPRworICAgIGlmIChj a3hsb2dnaW5nKSB7CQkJLyogTWF5YmUgcmVjb3JkIGl0IGluIHN5c2xvZyAqLworCWlmIChja3hz eXNsb2cgPj0gU1lTTEdfQ1ggfHwgY2t4c3lzbG9nID49IFNZU0xHX0NNKQorCSAgY2tzeXNsb2co U1lTTEdfQ1gsIDEsICJjb21tYW5kIiwgcywgTlVMTCk7CisgICAgfQorI2VuZGlmIC8qIENLU1lT TE9HICovCisKKyNpZmRlZiBDS19SRUNBTEwKKyAgICBsYXN0X3JlY2FsbCA9IDA7CisKKyAgICBp ZiAob25fcmVjYWxsICYmCQkJLyogQ29tbWFuZCByZWNhbGwgaXMgb24/ICovCisJY21fcmVjYWxs ID4gMCAmJgkJLyogUmVjYWxsIGJ1ZmZlciBzaXplIGlzID4gMD8gKi8KKwkhbm9fcmVjYWxsKSB7 CQkJLyogTm90IG5vdCBzYXZpbmcgdGhpcyBjb21tYW5kPyAqLworCisJaWYgKCFmb3JjZV9hZGQg JiYgcmxhc3QgPiAtMSkJLyogSWYgcHJldmlvdXMgY29tbWFuZCB3YXMgaWRlbnRpY2FsICovCisJ ICBpZiAoIXN0cmNtcChzLHJlY2FsbFtybGFzdF0pKSAvKiBkb24ndCBhZGQgYW5vdGhlciBjb3B5 ICovCisJICAgIHJldHVybjsKKworCWZvcmNlX2FkZCA9IDA7CQkJLyogUmVzZXQgbm93IGluIGNh c2UgaXQgd2FzIHNldCAqLworCisgICAgICAgIGlmIChybGFzdCA+PSBjbV9yZWNhbGwgLSAxKSB7 CS8qIFJlY2FsbCBidWZmZXIgZnVsbD8gKi8KKwkgICAgaW50IGk7CisJICAgIGlmIChyZWNhbGxb MF0pIHsJCS8qIERpc2NhcmQgb2xkZXN0IGNvbW1hbmQgKi8KKwkJZnJlZShyZWNhbGxbMF0pOwor CQlyZWNhbGxbMF0gPSBOVUxMOworCSAgICB9CisJICAgIGZvciAoaSA9IDA7IGkgPCBybGFzdDsg aSsrKSB7ICAvKiBUaGUgcmVzdCAqLworCQlyZWNhbGxbaV0gPSByZWNhbGxbaSsxXTsgICAvKiBt b3ZlIGJhY2sgKi8KKwkgICAgfQorCSAgICBybGFzdC0tOwkJCS8qIE5vdyB3ZSBoYXZlIG9uZSBs ZXNzICovCisJfQorICAgICAgICBybGFzdCsrOwkJCS8qIEluZGV4IG9mIGxhc3QgY29tbWFuZCBp biBidWZmZXIgKi8KKwljdXJyZW50ID0gcmxhc3Q7CQkvKiBBbHNvIG5vdyB0aGUgY3VycmVudCBj b21tYW5kICovCisJaWYgKGN1cnJlbnQgPj0gY21fcmVjYWxsKSB7CS8qIFNob3VsZG4ndCBoYXBw ZW4gKi8KKwkgICAgcHJpbnRmKCI/Q29tbWFuZCBoaXN0b3J5IGVycm9yXG4iKTsJLyogYnV0IGlm IGl0IGRvZXMgKi8KKwkgICAgb25fcmVjYWxsID0gMDsJCSAgICAgICAgLyogdHVybiBvZmYgY29t bWFuZCBzYXZpbmcgKi8KKyNpZmRlZiBDT01NRU5UCisJfSBlbHNlIGlmIChucSA+IDApIHsJCS8q IEhhdmUgYXQgbGVhc3Qgb25lIHF1ZXN0aW9uIG1hcmsgKi8KKwkgICAgcmVjYWxsW2N1cnJlbnRd ID0gbWFsbG9jKGxlbitucSsxKTsKKwkgICAgaWYgKHJlY2FsbFtjdXJyZW50XSkgeworCQlwID0g cmVjYWxsW2N1cnJlbnRdOworCQl3aGlsZSAoKnMpIHsKKwkJICAgIGlmICgqcyA9PSAnPycpCisJ CSAgICAgICpwKysgPSAnXFwnOworCQkgICAgKnArKyA9ICpzKys7CisJCX0KKwkJKnAgPSBOVUw7 CisJICAgIH0KKyNlbmRpZiAvKiBDT01NRU5UICovCisJfSBlbHNlIHsJCQkvKiBOb3JtYWwgY2Fz ZSwganVzdCBjb3B5ICovCisJICAgIHJlY2FsbFtjdXJyZW50XSA9IG1hbGxvYyhsZW4rMSk7CisJ ICAgIGlmIChyZWNhbGxbY3VycmVudF0pCisJICAgICAgY2tzdHJuY3B5KHJlY2FsbFtjdXJyZW50 XSxzLGxlbisxKTsKKwl9CisgICAgfQorI2VuZGlmIC8qIENLX1JFQ0FMTCAqLworfQorCisKKyNp ZmRlZiBDS19SRUNBTEwKKworLyogQyBNIEggSSBTIFQgTyBSIFkgKi8KKworVk9JRAorY21oaXN0 b3J5KCkgeworICAgIGludCBpLCBsYyA9IDE7CisgICAgZm9yIChpID0gMDsgaSA8PSBjdXJyZW50 OyBpKyspIHsKKwlwcmludGYoIiAlc1xuIiwgcmVjYWxsW2ldKTsKKwlpZiAoKytsYyA+IChjbWRf cm93cyAtIDIpKSB7CS8qIFNjcmVlbiBmdWxsPyAqLworCSAgICBpZiAoIWFza21vcmUoKSkJCS8q IERvIG1vcmUtcHJvbXB0aW5nLi4uICovCisJICAgICAgYnJlYWs7CisJICAgIGVsc2UKKwkgICAg ICBsYyA9IDA7CisJfQorICAgIH0KK30KKworaW50CitzYXZoaXN0b3J5KHMsZGlzcCkgY2hhciAq czsgaW50IGRpc3A7IHsKKyAgICBGSUxFICogZnA7CisgICAgaW50IGk7CisKKyAgICBmcCA9IGZv cGVuKHMsIGRpc3AgPyAiYSIgOiAidyIpOworICAgIGlmICghZnApIHsKKwlwZXJyb3Iocyk7CisJ cmV0dXJuKDApOworICAgIH0KKyAgICBmb3IgKGkgPSAwOyBpIDw9IGN1cnJlbnQ7IGkrKykKKyAg ICAgIGZwcmludGYoZnAsIiVzXG4iLCByZWNhbGxbaV0pOworICAgIGZjbG9zZShmcCk7CisgICAg cmV0dXJuKDEpOworfQorI2VuZGlmIC8qIENLX1JFQ0FMTCAqLworCisjaWZkZWYgQ09NTUVOVAor LyogYXBwYXJlbnRseSBub3QgdXNlZCAqLworaW50CitjbWdldGxjKHMpIGNoYXIgKiBzOyB7CQkJ LyogR2V0IGxlYWRpbmcgY2hhciAqLworICAgIGNoYXIgYzsKKyAgICB3aGlsZSAoKGMgPSAqcysr KSA8PSBTUCkgeworCWlmICghYykKKwkgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4oYyk7Cit9 CisjZW5kaWYgLyogQ09NTUVOVCAqLworCisKKy8qICBDIE0gQyBGIE0gIC0tICBQYXJzZSBjb21t YW5kIGNvbmZpcm1hdGlvbiAoZW5kIG9mIGxpbmUpICAqLworCisvKgorIFJldHVybnMKKyAgIC0y OiBVc2VyIHR5cGVkIGFueXRoaW5nIGJ1dCB3aGl0ZXNwYWNlIG9yIG5ld2xpbmUKKyAgIC0xOiBS ZXBhcnNlIG5lZWRlZAorICAgIDA6IENvbmZpcm1hdGlvbiB3YXMgcmVjZWl2ZWQKKyovCitpbnQK K2NtY2ZtKCkgeworICAgIGludCB4LCB4YzsKKyAgICBkZWJ1ZyhGMTAxLCJjbWNmbTogY21mbGdz IiwiIixjbWZsZ3MpOworICAgIGRlYnVnKEYxMTAsImNtY2ZtOiBhdG1idWYiLGF0bWJ1ZiwwKTsK KyAgICBpbndvcmQgPSB4YyA9IGNjID0gMDsKKworICAgIHNldGF0bSgiIiwwKTsJCQkvKiAoUHJv YmFibHkgdW5uZWNlc3NhcnkpICovCisKKyAgICB3aGlsZSAoY21mbGdzICE9IDEpIHsKKyAgICAg ICAgeCA9IGd0d29yZCgwKTsKKyAgICAgICAgeGMgKz0gY2M7CisKKyAgICAgICAgc3dpdGNoICh4 KSB7CisJICBjYXNlIC05OgorCSAgICBwcmludGYoIkNvbW1hbmQgb3IgZmllbGQgdG9vIGxvbmdc biIpOworCSAgY2FzZSAtNDoJCQkvKiBFT0YgKi8KKwkgIGNhc2UgLTI6CisJICBjYXNlIC0xOgor CSAgICByZXR1cm4oeCk7CisJICBjYXNlIDE6CQkJLyogRW5kIG9mIGxpbmUgKi8KKwkgICAgaWYg KHhjID4gMCkgeworCQlpZiAoeGNtZmRiKSB7CisJCSAgICByZXR1cm4oLTYpOworCQl9IGVsc2Ug eworCQkgICAgcHJpbnRmKCI/Tm90IGNvbmZpcm1lZCAtICVzXG4iLGF0bWJ1Zik7CisJCSAgICBy ZXR1cm4oLTkpOworCQl9CisJICAgIH0gZWxzZQorCSAgICAgIGJyZWFrOwkJCS8qIEZpbmlzaCB1 cCBiZWxvdyAqLworCSAgY2FzZSAyOgkJCS8qIEVTQyAqLworCSAgICBpZiAoeGMgPT0gMCkgewor CQlibGVlcChCUF9XQVJOKTsKKwkJY29udGludWU7CQkvKiBvciBmYWxsIHRocnUuICovCisJICAg IH0KKwkgIGNhc2UgMDoJCQkvKiBTcGFjZSAqLworCSAgICBpZiAoeGMgPT0gMCkJCS8qIElmIG5v IGNoYXJzIHR5cGVkLCBjb250aW51ZSwgKi8KKwkgICAgICBjb250aW51ZTsJCQkvKiBlbHNlIGZh bGwgdGhydS4gKi8KKwkgICAgLyogZWxzZSBmYWxsIHRocnUuLi4gKi8KKworCSAgY2FzZSAzOgkJ CS8qIFF1ZXN0aW9uIG1hcmsgKi8KKwkgICAgaWYgKHhjID4gMCkgeworCQlpZiAoeGNtZmRiKSB7 CisJCSAgICByZXR1cm4oLTYpOworCQl9IGVsc2UgeworCQkgICAgcHJpbnRmKCI/Tm90IGNvbmZp cm1lZCAtICVzXG4iLGF0bWJ1Zik7CisJCSAgICByZXR1cm4oLTkpOworCQl9CisJICAgIH0KKwkg ICAgcHJpbnRmKAorCSAgICAgICAiXG4gUHJlc3MgdGhlIFJldHVybiBvciBFbnRlciBrZXkgdG8g Y29uZmlybSB0aGUgY29tbWFuZFxuIik7CisJICAgIHByaW50ZigiJXMlcyIsY21wcm9tLGNtZGJ1 Zik7CisJICAgIGZmbHVzaChzdGRvdXQpOworCSAgICBjb250aW51ZTsKKwl9CisgICAgfQorICAg IGRlYm9rID0gMTsKKyAgICByZXR1cm4oMCk7Cit9CisKKworLyogVGhlIGZvbGxvd2luZyBtYXRl cmlhbCBzdXBwb3J0cyBjaGFpbmVkIHBhcnNpbmcgZnVuY3Rpb25zLiAqLworLyogU2VlIGNrdWNt ZC5oIGZvciBGREIgYW5kIE9GREIgZGVmaW5pdGlvbnMuICovCisKK3N0cnVjdCBPRkRCIGNtcmVz dWx0ID0gewkJLyogVW5pdmVyc2FsIGNtZmRiIHJlc3VsdCBob2xkZXIgKi8KKyAgICBOVUxMLAkJ CQkvKiBBZGRyZXNzIG9mIHN1Y2NlZWRpbmcgRkRCIHN0cnVjdCAqLworICAgIDAsCQkJCQkvKiBG dW5jdGlvbiBjb2RlICovCisgICAgTlVMTCwJCQkJLyogU3RyaW5nIHJlc3VsdCAqLworICAgIDAs CQkJCQkvKiBJbnRlZ2VyIHJlc3VsdCAqLworICAgIChDS19PRkZfVCkwCQkJCS8qIFdpZGUgcmVz dWx0ICovCit9OworCitWT0lECitjbWZkYmkocCxmYyxzMSxzMixzMyxuMSxuMixmLGssbnh0KQkv KiBJbml0aWFsaXplIGFuIEZEQiAqLworICAgIHN0cnVjdCBGREIgKiBwOworICAgIGludCBmYzsK KyAgICBjaGFyICogczEsICogczIsICogczM7CisgICAgaW50IG4xLCBuMjsKKyAgICB4eF9zdHJw IGY7CisgICAgc3RydWN0IGtleXRhYiAqIGs7CisgICAgc3RydWN0IEZEQiAqIG54dDsgeworCisg ICAgcC0+ZmNvZGUgPSBmYzsKKyAgICBwLT5obHBtc2cgPSBzMTsKKyAgICBwLT5kZmx0ID0gczI7 CisgICAgcC0+c2RhdGEgPSBzMzsKKyAgICBwLT5uZGF0YTEgPSBuMTsKKyAgICBwLT5uZGF0YTIg PSBuMjsKKyAgICBwLT5zcGYgPSBmOworICAgIHAtPmt3ZHRibCA9IGs7CisgICAgcC0+bnh0ZmRi ID0gbnh0OworfQorCisvKiAgQyBNIEYgRCBCICAtLSAgUGFyc2UgYSBmaWVsZCB3aXRoIHNldmVy YWwgcG9zc2libGUgZnVuY3Rpb25zICAqLworCitpbnQKK2NtZmRiKGZkYmluKSBzdHJ1Y3QgRkRC ICogZmRiaW47IHsKKyNpZm5kZWYgTk9TUEwKKyAgICBleHRlcm4gaW50IHhfaWZudW07ICAgICAg ICAgICAgICAgICAvKiBJRiBOVU1FUklDIC0gZGlzYWJsZXMgd2FybmluZ3MgKi8KKyNlbmRpZiAv KiBOT1NQTCAqLworICAgIHN0cnVjdCBGREIgKiBpbiA9IGZkYmluOworICAgIHN0cnVjdCBPRkRC ICogb3V0ID0gJmNtcmVzdWx0OworICAgIGludCB4ID0gMCwgbiwgcjsKKyAgICBDS19PRkZfVCB3 ID0gKENLX09GRl9UKTA7CisgICAgY2hhciAqcywgKnhwLCAqbSA9IE5VTEw7CisgICAgaW50IGVy cmJpdHMgPSAwOworCisgICAgeHAgPSBicDsKKworICAgIG91dC0+ZmNvZGUgPSAtMTsJCQkvKiBJ bml0aWFsaXplIG91dHB1dCBzdHJ1Y3QgKi8KKyAgICBvdXQtPmZkYmFkZHIgPSBOVUxMOworICAg IG91dC0+c3Jlc3VsdCA9IE5VTEw7CisgICAgb3V0LT5ucmVzdWx0ID0gMDsKKy8qCisgIEN1cnJl bnRseSB3ZSBtYWtlIG9uZSB0cmlwIHRocm91Z2ggdGhlIEZEQnMuICBTbyBpZiB0aGUgdXNlciB0 eXBlcyBFc2Mgb3IKKyAgVGFiIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBmaWVsZCwgb25seSB0aGUg Zmlyc3QgRkRCIGlzIGV4YW1pbmVkIGZvciBhCisgIGRlZmF1bHQuICBJZiB0aGUgdXNlciB0eXBl cyA/LCBoZWxwIGlzIGdpdmVuIG9ubHkgZm9yIG9uZSBGREIuICBXZSBzaG91bGQKKyAgc2VhcmNo IHRocm91Z2ggdGhlIEZEQnMgZm9yIGFsbCBtYXRjaGluZyBwb3NzaWJpbGl0aWVzIC0tIGFuZCBp biBwYXJ0aWN1bGFyCisgIGRpc3BsYXkgdGhlIHBlcnRpbmVudCBjb250ZXh0LXNlbnNpdGl2ZSBo ZWxwIGZvciBlYWNoIGZ1bmN0aW9uLCByYXRoZXIgdGhhbgorICB0aGUgb25seSB0aGUgZmlyc3Qg b25lIHRoYXQgd29ya3MsIGFuZCB0aGVuIHJld2luZCB0aGUgRkRCIHBvaW50ZXIgc28gd2UKKyAg YXJlIG5vdCBsb2NrZWQgb3V0IG9mIHRoZSBlYXJsaWVyIG9uZXMuCisqLworICAgIGNtZmxkZmxn cyA9IDA7CisgICAgd2hpbGUgKDEpIHsJCQkJLyogTG9vcCB0aHJvdWdoIHRoZSBjaGFpbiBvZiBG REJzICovCisJbm9tc2cgPSAxOworCXhjbWZkYiA9IDE7CisJcyA9IE5VTEw7CisJbiA9IDA7CisJ ZGVidWcoRjEwMSwiY21mZGIgaW4tPmZjb2RlIiwiIixpbi0+ZmNvZGUpOworCXN3aXRjaCAoaW4t PmZjb2RlKSB7CQkvKiBDdXJyZW50IHBhcnNpbmcgZnVuY3Rpb24gY29kZSAqLworCSAgY2FzZSBf Q01OVU06CisJICAgIHIgPSBpbi0+bmRhdGExOworCSAgICBpZiAociAhPSAxMCAmJiByICE9IDgp IHIgPSAxMDsKKyNpZm5kZWYgTk9TUEwKKyAgICAgICAgICAgIHhfaWZudW0gPSAxOyAgICAgICAg ICAgICAgICAvKiBEaXNhYmxlcyB3YXJuaW5nIG1lc3NhZ2VzICovCisjZW5kaWYgLyogTk9TUEwg Ki8KKwkgICAgeCA9IGNtbnVtKGluLT5obHBtc2csaW4tPmRmbHQsciwmbixpbi0+c3BmKTsKKyNp Zm5kZWYgTk9TUEwKKyAgICAgICAgICAgIHhfaWZudW0gPSAwOworI2VuZGlmIC8qIE5PU1BMICov CisJICAgIGRlYnVnKEYxMDEsImNtZmRiIGNtbnVtIiwiIix4KTsKKwkgICAgaWYgKHggPCAwKSBl cnJiaXRzIHw9IDE7CisJICAgIGJyZWFrOworCSAgY2FzZSBfQ01OVVc6CQkJLyogV2lkZSBjbW51 bSAtIDI0IERlYyAyMDA1ICovCisJICAgIHIgPSBpbi0+bmRhdGExOworCSAgICBpZiAociAhPSAx MCAmJiByICE9IDgpIHIgPSAxMDsKKyNpZm5kZWYgTk9TUEwKKyAgICAgICAgICAgIHhfaWZudW0g PSAxOyAgICAgICAgICAgICAgICAvKiBEaXNhYmxlcyB3YXJuaW5nIG1lc3NhZ2VzICovCisjZW5k aWYgLyogTk9TUEwgKi8KKwkgICAgeCA9IGNtbnVtdyhpbi0+aGxwbXNnLGluLT5kZmx0LHIsJncs aW4tPnNwZik7CisjaWZuZGVmIE5PU1BMCisgICAgICAgICAgICB4X2lmbnVtID0gMDsKKyNlbmRp ZiAvKiBOT1NQTCAqLworCSAgICBkZWJ1ZyhGMTAxLCJjbWZkYiBjbW51bXciLCIiLHcpOworCSAg ICBpZiAoeCA8IDApIGVycmJpdHMgfD0gMTsKKwkgICAgYnJlYWs7CisJICBjYXNlIF9DTU9GSToK KwkgICAgeCA9IGNtb2ZpKGluLT5obHBtc2csaW4tPmRmbHQsJnMsaW4tPnNwZik7CisJICAgIGRl YnVnKEYxMDEsImNtZmRiIGNtb2ZpIiwiIix4KTsKKwkgICAgaWYgKHggPCAwKSBlcnJiaXRzIHw9 IDI7CisJICAgIGJyZWFrOworCSAgY2FzZSBfQ01JRkk6CisJICAgIHggPSBjbWlmaTIoaW4tPmhs cG1zZywKKwkJICAgICAgIGluLT5kZmx0LAorCQkgICAgICAgJnMsCisJCSAgICAgICAmbiwKKwkJ ICAgICAgIGluLT5uZGF0YTEsCisJCSAgICAgICBpbi0+c2RhdGEsCisJCSAgICAgICBpbi0+c3Bm LAorCQkgICAgICAgaW4tPm5kYXRhMgorCQkgICAgICAgKTsKKwkgICAgZGVidWcoRjEwMSwiY21m ZGIgY21pZmkyIHgiLCIiLHgpOworCSAgICBkZWJ1ZyhGMTAxLCJjbWZkYiBjbWlmaTIgbiIsIiIs bik7CisJICAgIGlmICh4IDwgMCkgZXJyYml0cyB8PSA0OworCSAgICBicmVhazsKKwkgIGNhc2Ug X0NNRkxEOgorCSAgICBjbWZsZGZsZ3MgPSBpbi0+bmRhdGExOworCSAgICB4ID0gY21mbGQoaW4t PmhscG1zZyxpbi0+ZGZsdCwmcyxpbi0+c3BmKTsKKwkgICAgZGVidWcoRjEwMSwiY21mZGIgY21m bGQiLCIiLHgpOworCSAgICBpZiAoeCA8IDApIGVycmJpdHMgfD0gODsKKwkgICAgYnJlYWs7CisJ ICBjYXNlIF9DTVRYVDoKKwkgICAgeCA9IGNtdHh0KGluLT5obHBtc2csaW4tPmRmbHQsJnMsaW4t PnNwZik7CisJICAgIGRlYnVnKEYxMDEsImNtZmRiIGNtdHh0IiwiIix4KTsKKwkgICAgaWYgKHgg PCAwKSBlcnJiaXRzIHw9IDE2OworCSAgICBicmVhazsKKwkgIGNhc2UgX0NNS0VZOgorCSAgICB4 ID0gY21rZXkyKGluLT5rd2R0YmwsCisJCSAgICAgICBpbi0+bmRhdGExLAorCQkgICAgICAgaW4t PmhscG1zZyxpbi0+ZGZsdCxpbi0+c2RhdGEsaW4tPnNwZixpbi0+bmRhdGEyKTsKKwkgICAgZGVi dWcoRjEwMSwiY21mZGIgY21rZXkiLCIiLHgpOworCSAgICBpZiAoeCA8IDApIGVycmJpdHMgfD0g KChpbi0+bmRhdGEyICYgNCkgPyAzMiA6IDY0KTsKKwkgICAgYnJlYWs7CisJICBjYXNlIF9DTUNG TToKKwkgICAgeCA9IGNtY2ZtKCk7CisJICAgIGRlYnVnKEYxMDEsImNtZmRiIGNtY2ZtIiwiIix4 KTsKKwkgICAgaWYgKHggPCAwKSBlcnJiaXRzIHw9IDEyODsKKwkgICAgYnJlYWs7CisJICBkZWZh dWx0OgorCSAgICBkZWJ1ZyhGMTAxLCJjbWZkYiAtIHVuZXhwZWN0ZWQgZnVuY3Rpb24gY29kZSIs IiIsaW4tPmZjb2RlKTsKKwkgICAgcHJpbnRmKCI/Y21mZGIgLSB1bmV4cGVjdGVkIGZ1bmN0aW9u IGNvZGU6ICVkXG4iLGluLT5mY29kZSk7CisJfQorCWRlYnVnKEYxMDEsImNtZmRiIHgiLCIiLHgp OworCWRlYnVnKEYxMDEsImNtZmRiIGNtZmxncyIsIiIsY21mbGdzKTsKKwlkZWJ1ZyhGMTAxLCJj bWZkYiBjcmZsYWciLCIiLGNyZmxhZyk7CisJZGVidWcoRjEwMSwiY21mZGIgcW1mbGFnIiwiIixx bWZsYWcpOworCWRlYnVnKEYxMDEsImNtZmRiIGVzZmxhZyIsIiIsZXNmbGFnKTsKKworCWlmICh4 ID4gLTEpIHsJCQkvKiBTdWNjZXNzICovCisJICAgIG91dC0+ZmNvZGUgPSBpbi0+ZmNvZGU7CS8q IEZpbGwgaW4gb3V0cHV0IHN0cnVjdCAqLworCSAgICBvdXQtPmZkYmFkZHIgPSBpbjsKKwkgICAg b3V0LT5zcmVzdWx0ID0gczsKKwkgICAgb3V0LT5ucmVzdWx0ID0gKGluLT5mY29kZSA9PSBfQ01L RVkpID8geCA6IG47CisJICAgIG91dC0+d3Jlc3VsdCA9IHc7CisJICAgIG91dC0+a2ZsYWdzID0g KGluLT5mY29kZSA9PSBfQ01LRVkpID8gY21rd2ZsZ3MgOiAwOworCSAgICBkZWJ1ZyhGMTExLCJj bWZkYiBvdXQtPm5yZXN1bHQiLG91dC0+c3Jlc3VsdCxvdXQtPm5yZXN1bHQpOworCSAgICBkZWJ1 ZyhGMTExLCJjbWZkYiBvdXQtPndyZXN1bHQiLG91dC0+c3Jlc3VsdCxvdXQtPndyZXN1bHQpOwor CSAgICBub21zZyA9IDA7CisJICAgIHhjbWZkYiA9IDA7CisJICAgIC8qIGRlYnVnKEYxMTEsImNt ZmRiIGNtZGJ1ZiAmIGNyZmxhZyIsY21kYnVmLGNyZmxhZyk7ICovCisJICAgIGlmIChjcmZsYWcp IHsKKwkJY21mbGdzID0gMTsKKwkgICAgfQorCSAgICByZXR1cm4oeCk7CQkJLyogYW5kIHJldHVy biAqLworCX0KKwlpbiA9IGluLT5ueHRmZGI7CQkvKiBGYWlsZWQsIGdldCBuZXh0IHBhcnNpbmcg ZnVuY3Rpb24gKi8KKwlub21zZyA9IDA7CisJeGNtZmRiID0gMDsKKwlpZiAoIWluKSB7CQkJLyog Tm8gbW9yZSAqLworCSAgICBkZWJ1ZyhGMTAxLCJjbWZkYiBmYWlsdXJlIHgiLCIiLHgpOworCSAg ICBkZWJ1ZyhGMTAxLCJjbWZkYiBmYWlsdXJlIGVycmJpdHMiLCIiLGVycmJpdHMpOworCSAgICBp ZiAoeCA9PSAtNikKKwkgICAgICB4ID0gLTk7CisJICAgIGlmICh4ID09IC05KSB7CisjaWZkZWYg Q0tST09UCisJCWlmIChja3Jvb3RlcnIpCisJCSAgbSA9ICJPZmYgTGltaXRzIjsKKwkJZWxzZQor I2VuZGlmIC8qIENLUk9PVCAqLworCQkvKiBNYWtlIGluZm9ybWF0aXZlIG1lc3NhZ2VzIGZvciBh IGZldyBjb21tb24gY2FzZXMgKi8KKwkJc3dpdGNoIChlcnJiaXRzKSB7CisJCSAgY2FzZSA0KzMy OiBtID0gIkRvZXMgbm90IG1hdGNoIGZpbGVuYW1lIG9yIHN3aXRjaCI7IGJyZWFrOworCQkgIGNh c2UgNCs2NDogbSA9ICJEb2VzIG5vdCBtYXRjaCBmaWxlbmFtZSBvciBrZXl3b3JkIjsgYnJlYWs7 CisJCSAgY2FzZSAxKzMyOiBtID0gIk5vdCBhIG51bWJlciBvciB2YWxpZCBrZXl3b3JkIjsgYnJl YWs7CisJCSAgY2FzZSAxKzY0OiBtID0gIk5vdCBhIG51bWJlciBvciB2YWxpZCBzd2l0Y2giOyBi cmVhazsKKwkJICBkZWZhdWx0OiBtID0gIk5vdCB2YWxpZCBpbiB0aGlzIHBvc2l0aW9uIjsKKwkJ fQorCQlwcmludGYoIj8lczogXCIlc1wiXG4iLG0sIGF0bWJ1Zik7CisJICAgIH0KKwkgICAgcmV0 dXJuKHgpOworCX0KKwlpZiAoeCAhPSAtMiAmJiB4ICE9IC02ICYmIHggIT0gLTkgJiYgeCAhPSAt MykgLyogRWRpdGluZyBvciBzb21lc3VjaCAqLworCSAgcmV0dXJuKHgpOwkJCS8qIEdvIGJhY2sg YW5kIHJlcGFyc2UgKi8KKwlwcCA9IG5wID0gYnAgPSB4cDsJCS8qIEJhY2sgdXAgcG9pbnRlcnMg Ki8KKwljbWZsZ3MgPSAtMTsJCQkvKiBGb3JjZSBhIHJlcGFyc2UgKi8KKworI2lmbmRlZiBOT1NQ TAorCWlmICghYXNrZmxhZykgewkJCS8qIElmIG5vdCBleGVjdXRpbmcgQVNLLWNsYXNzIGNtZC4u LiAqLworI2VuZGlmIC8qIE5PU1BMICovCisJICAgIGlmIChjcmZsYWcpIHsJCS8qIElmIENSIHdh cyB0eXBlZCwgcHV0IGl0IGJhY2sgKi8KKwkJcHVzaGMgPSBMRjsJCS8qIEJ1dCBhcyBhIGxpbmVm ZWVkICovCisJICAgIH0gZWxzZSBpZiAocW1mbGFnKSB7CS8qIERpdHRvIGZvciBRdWVzdGlvbiBt YXJrICovCisJCXB1c2hjID0gJz8nOworCSAgICB9IGVsc2UgaWYgKGVzZmxhZykgewkvKiBhbmQg RXNjYXBlIG9yIFRhYiAqLworCQlwdXNoYyA9IEVTQzsKKwkgICAgfQorI2lmbmRlZiBOT1NQTAor CX0KKyNlbmRpZiAvKiBOT1NQTCAqLworICAgIH0KK30KKworLyoKKyAgIEMgTSBJIE8gRiBJICAt LSAgUGFyc2UgYW4gaW5wdXQgZmlsZSBPUiB0aGUgbmFtZSBvZiBhIG5vbmV4aXN0ZW50IGZpbGUu CisKKyAgIFJlcGxhY2VzIHRoZSBjb21tZW50ZWQtb3V0IHZlcnNpb24gYWJvdmUuICBUaGlzIG9u ZSBhY3R1YWxseSB3b3JrcyBhbmQKKyAgIGhhcyB0aGUgZXhwZWN0ZWQgc3RyYWlnaHRmb3J3YXJk IGludGVyZmFjZS4KKyovCitpbnQKK2NtaW9maSh4aGxwLHhkZWYseHAsd2lsZCxmKSBjaGFyICp4 aGxwLCAqeGRlZiwgKip4cDsgaW50ICp3aWxkOyB4eF9zdHJwIGY7IHsKKyAgICBpbnQgeDsKKyAg ICBzdHJ1Y3QgRkRCIGYxLCBmMjsKKyAgICBjbWZkYmkoJmYxLF9DTUlGSSx4aGxwLHhkZWYsIiIs MCwwLGYsTlVMTCwmZjIpOworICAgIGNtZmRiaSgmZjIsX0NNT0ZJLCIiLCIiLCIiLDAsMCxmLE5V TEwsTlVMTCk7CisgICAgeCA9IGNtZmRiKCZmMSk7CisgICAgaWYgKHggPCAwKSB7CisJaWYgKHgg PT0gLTMpIHsKKwkgICAgeCA9IC05OworCSAgICBwcmludGYoIj9GaWxlbmFtZSByZXF1aXJlZFxu Iik7CisJfQorICAgIH0KKyAgICAqd2lsZCA9IGNtcmVzdWx0Lm5yZXN1bHQ7CisgICAgKnhwID0g Y21yZXN1bHQuc3Jlc3VsdDsKKyAgICByZXR1cm4oeCk7Cit9CisKKy8qICBHIFQgVyBPIFIgRCAg LS0gIEdldHMgYSAid29yZCIgZnJvbSB0aGUgY29tbWFuZCBpbnB1dCBzdHJlYW0gICovCisKKy8q CitVc2FnZTogcmV0Y29kZSA9IGd0d29yZChicmspOworICBicmsgPSAwIGZvciBub3JtYWwgd29y ZCBicmVha3MgKHNwYWNlLCBDUiwgRXNjLCA/KQorICBicmsgPSAxIHRvIGFkZCAnOicgYW5kICc9 JyAoZm9yIHBhcnNpbmcgc3dpdGNoZXMpLiAgVGhlc2UgY2hhcmFjdGVycworICAgICAgICBhY3Qg YXMgYnJlYWsgY2hhcmFjdGVycyBvbmx5IGlmIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIGZp ZWxkCisgICAgICAgIGlzIHNsYXNoICgnLycpLCBpLmUuIHN3aXRjaCBpbnRyb2R1Y2VyLgorICBi cmsgPSA0IHRvIG5vdCBzdHJpcCBjb21tZW50cyAodXNlZCBvbmx5IGZvciAiaGVscCAjIiBhbmQg ImhlbHAgOyIpLgorCitSZXR1cm5zOgorLTEwIFRpbWVsaW1pdCBzZXQgYW5kIHRpbWVkIG91dAor IC05IGlmIGlucHV0IHdhcyB0b28gbG9uZworIC00IGlmIGVuZCBvZiBmaWxlIChlLmcuIHBpcGUg YnJva2VuKQorIC0zIGlmIG51bGwgZmllbGQKKyAtMiBpZiBjb21tYW5kIGJ1ZmZlciBvdmVyZmxv d3MKKyAtMSBpZiB1c2VyIGRpZCBzb21lIGRlbGV0aW5nCisgIDAgaWYgd29yZCB0ZXJtaW5hdGVz IHdpdGggU1Agb3IgdGFiCisgIDEgaWYgLi4uIENSCisgIDIgaWYgLi4uIEVTQworICAzIGlmIC4u LiA/IChxdWVzdGlvbiBtYXJrKQorICA0IGlmIC4uLiA6IG9yID0gYW5kIGNhbGxlZCB3aXRoIGJy ayAhPSAwCisKK1dpdGg6CisgIHBwIHBvaW50aW5nIHRvIGJlZ2lubmluZyBvZiB3b3JkIGluIGJ1 ZmZlcgorICBicCBwb2ludGluZyB0byBhZnRlciBjdXJyZW50IHBvc2l0aW9uCisgIGF0bWJ1ZiBj b250YWluaW5nIGEgY29weSBvZiB0aGUgd29yZAorICBjYyBjb250YWluaW5nIHRoZSBudW1iZXIg b2YgY2hhcmFjdGVycyBpbiB0aGUgd29yZCBjb3BpZWQgdG8gYXRtYnVmCisqLworCitpbnQKK3Vu Z3dvcmQoKSB7CQkJCS8qIFVuZ2V0IGEgd29yZCAqLworICAgIGRlYnVnKEYxMDEsInVuZ3dvcmQg Y21mbGdzIiwiIixjbWZsZ3MpOworICAgIGlmICh1bmd3KSByZXR1cm4oMCk7CisgICAgY21mc2F2 ID0gY21mbGdzOworICAgIHVuZ3cgPSAxOworICAgIGNtZmxncyA9IDA7CisgICAgcmV0dXJuKDAp OworfQorCisvKiBVbi11bi1nZXQgd29yZC4gIFVuZG8gdW5nd29yZCgpIGlmIGl0IGhhcyBiZWVu IGRvbmUuICovCisKK1ZPSUQKK3VudW5ndygpIHsKKyAgICBkZWJ1ZyhGMDEwLCJ1bnVuZ3cgYXRt YnVmIixhdG1idWYsMCk7CisgICAgaWYgKHVuZ3cpIHsKKwl1bmd3ID0gMDsKKwljbWZsZ3MgPSBj bWZzYXY7CisJYXRtYnVmWzBdID0gTlVMOworICAgIH0KK30KKworc3RhdGljIGludAorZ3R3b3Jk KGJyaykgaW50IGJyazsgeworICAgIGludCBjOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIEN1cnJlbnQgY2hhciAqLworICAgIGludCBxdW90ZSA9IDA7ICAgICAgICAgICAgICAgICAg ICAgIC8qIEZsYWcgZm9yIHF1b3RlIGNoYXJhY3RlciAqLworICAgIGludCBlY2hvZiA9IDA7ICAg ICAgICAgICAgICAgICAgICAgIC8qIEZsYWcgZm9yIHdoZXRoZXIgdG8gZWNobyAqLworICAgIGlu dCBjb21tZW50ID0gMDsJCQkvKiBGbGFnIGZvciBpbiBjb21tZW50ICovCisgICAgY2hhciAqY3Ag PSBOVUxMOwkJCS8qIENvbW1lbnQgcG9pbnRlciAqLworICAgIGludCBlaW50ciA9IDA7CQkJLyog RmxhZyBmb3Igc3lzY2FsbCBpbnRlcnJ1cHRlZCAqLworICAgIGludCBicmFjZWx2bCA9IDA7CQkJ LyogbmVzdGVkIGJyYWNlIGNvdW50ZXIgW2pyc10gKi8KKyAgICBpbnQgaXNjb250ZCA9IDA7CQkJ LyogRmxhZyBmb3IgY29udGludWF0aW9uICovCisgICAgaW50IHJlYWx0dHkgPSAwOwkJCS8qIFN0 ZGluIGlzIHJlYWxseSBhIHR0eSAqLworICAgIGNoYXIgZmlyc3RuYiAgPSBOVUw7CisgICAgY2hh ciBsYXN0Y2hhciA9IE5VTDsKKyAgICBjaGFyIHByZXZjaGFyID0gTlVMOworICAgIGNoYXIgbGJy YWNlLCByYnJhY2U7CisgICAgaW50IGRxID0gMDsJCQkJLyogRG91YmxlcXVvdGUgZmxhZyAqLwor ICAgIGludCBkcW4gPSAwOwkJCS8qIGFuZCBjb3VudCAqLworICAgIGludCBpc2VzYyA9IDA7CisK KyNpZmRlZiBSVFUKKyAgICBleHRlcm4gaW50IHJ0dV9idWc7CisjZW5kaWYgLyogUlRVICovCisK KyNpZmRlZiBJS1NECisgICAgZXh0ZXJuIGludCBpbnNlcnZlcjsKKyNlbmRpZiAvKiBJS1NEICov CisgICAgZXh0ZXJuIGludCBrc3RhcnRhY3RpdmU7CisKKyNpZmRlZiBkYXRhZ2VuZXJhbAorICAg IGV4dGVybiBpbnQgdGVybXR5cGU7ICAgICAgICAgICAgICAgIC8qIERHIHRlcm1pbmFsIHR5cGUg ZmxhZyAqLworICAgIGV4dGVybiBpbnQgY29uX3JlYWRzX210OyAgICAgICAgICAgIC8qIENvbnNv bGUgcmVhZCBhc3luY2ggaXMgYWN0aXZlICovCisgICAgaWYgKGNvbl9yZWFkc19tdCkgY29ubm9p X210KCk7ICAgICAgLyogVGFzayB3b3VsZCBpbnRlcmZlcmUgdy9jb25zIHJlYWQgKi8KKyNlbmRp ZiAvKiBkYXRhZ2VuZXJhbCAqLworCisjaWZkZWYgQ09NTUVOVAorI2lmZGVmIERFQlVHCisgICAg aWYgKGRlYmxvZykgeworCWRlYnVnKEYxMDEsImd0d29yZCBicmsiLCIiLGJyayk7CisJZGVidWco RjEwMSwiZ3R3b3JkIGNtZmxkZmxncyIsIiIsY21mbGRmbGdzKTsKKwlkZWJ1ZyhGMTAxLCJndHdv cmQgc3dhcmciLCIiLHN3YXJnKTsKKwlkZWJ1ZyhGMTAxLCJndHdvcmQgZHB4IiwiIixkcHgpOwor CWRlYnVnKEYxMDEsImd0d29yZCBlY2hvZiIsIiIsZWNob2YpOworI2lmbmRlZiBOT1NQTAorCWRl YnVnKEYxMDEsImd0d29yZCBhc2tmbGFnIiwiIixhc2tmbGFnKTsKKwlkZWJ1ZyhGMTAxLCJndHdv cmQgdGltZWxpbWl0IiwiIix0aW1lbGltaXQpOworI2lmbmRlZiBOT0xPQ0FMCisjaWZuZGVmIE5P WEZFUgorI2lmZGVmIENLX0FVVE9ETAorCWRlYnVnKEYxMDEsImd0d29yZCBjbWRhZGwiLCIiLGNt ZGFkbCk7CisjZW5kaWYgLyogQ0tfQVVUT0RMICovCisjZW5kaWYgLyogTk9YRkVSICovCisjZW5k aWYgLyogTk9MT0NBTCAqLworI2VuZGlmIC8qIE5PU1BMICovCisgICAgfQorI2VuZGlmIC8qIERF QlVHICovCisjZW5kaWYgLyogQ09NTUVOVCAqLworCisgICAgcmVhbHR0eSA9IGlzX2FfdHR5KDAp OwkJLyogU3RkaW4gaXMgcmVhbGx5IGEgdHR5PyAqLworCisgICAgaWYgKGNtZmxkZmxncyAmIDEp IHsKKwlsYnJhY2UgPSAnKCc7CisJcmJyYWNlID0gJyknOworICAgIH0gZWxzZSB7CisJbGJyYWNl ID0gJ3snOworCXJicmFjZSA9ICd9JzsKKyAgICB9CisgICAgY3JmbGFnID0gMDsKKyAgICBxbWZs YWcgPSAwOworICAgIGVzZmxhZyA9IDA7CisKKyAgICBpZiAoc3dhcmcpIHsJCQkvKiBObyBsZWFk aW5nIHNwYWNlIGZvciBzd2l0Y2ggYXJncyAqLworCWlud29yZCA9IDE7CisJc3dhcmcgPSAwOwor ICAgIH0KKyAgICBpZiAodW5ndykgewkJCQkvKiBIYXZlIGEgd29yZCBzYXZlZD8gKi8KKyNpZmRl ZiBNX1VOR1cKKwkvKiBFeHBlcmltZW50YWwgY29kZSB0byBhbGxvdyB1bmdldHRpbmcgbXVsdGlw bGUgd29yZHMuICovCisJLyogU2VlIGNvbW1lbnRzIGluIGNrbWtleTIoKSBhYm92ZS4gKi8KKwlp bnQgeDsKKwlpZiAobnAgPiBwcCkgcHAgPSBucDsKKwl3aGlsZSAoKnBwID09IFNQKSBwcCsrOwor CWlmICghKnBwKSB7CisJICAgIHVuZ3cgPSAwOworCSAgICBjbWZsZ3MgPSBjbWZzYXY7CisJfSBl bHNlIHsKKwkgICAgaWYgKCh4ID0gc2V0YXRtKHBwLDIpKSA8IDApIHsKKwkJcHJpbnRmKCI/U2F2 ZWQgd29yZCB0b28gbG9uZ1xuIik7CisJCXJldHVybigtOSk7CisJICAgIH0KKwkgICAgaWYgKHBw W3hdID49IFNQKSB7CisJCWNoYXIgKnAyOworCQlwMiA9IHBwOworCQlwMiArPSB4OworCQl3aGls ZSAoKnAyID09IFNQKSBwMisrOworCQlpZiAoKnAyKSB7CisJCSAgICBucCA9IHAyOworCQkgICAg dW5nd29yZCgpOworCQl9CisJICAgIH0gZWxzZSB7CisJCXVuZ3cgPSAwOworCQljbWZsZ3MgPSBj bWZzYXY7CisJCWRlYnVnKEYwMTAsImd0d29yZCB1bmd3IHJldHVybiBhdG1idWYiLGF0bWJ1Ziww KTsKKwkgICAgfQorCX0KKwlyZXR1cm4oY21mbGdzKTsKKyNlbHNlCisJLyoKKwkgICBZb3Ugd291 bGQgdGhpbmsgdGhlIGZvbGxvd2luZyBzaG91bGQgYmU6CisgICAgICAgICAgICAgd2hpbGUgKCpw cCA9PSBTUCkgcHArKzsKKyAgICAgICAgICAgYnV0IHlvdSB3b3VsZCBiZSB3cm9uZyAtLSBtYWtp bmcgdGhpcyBjaGFuZ2UgYnJlYWtzIEdPVE8uCisgICAgICAgICovCisJd2hpbGUgKCpwcCsrID09 IFNQKSA7CisJaWYgKHNldGF0bShwcCwyKSA8IDApIHsKKwkgICAgcHJpbnRmKCI/U2F2ZWQgd29y ZCB0b28gbG9uZ1xuIik7CisJICAgIHJldHVybigtOSk7CisJfQorCXVuZ3cgPSAwOworCWNtZmxn cyA9IGNtZnNhdjsKKwlkZWJ1ZyhGMDEwLCJndHdvcmQgdW5ndyByZXR1cm4gYXRtYnVmIixhdG1i dWYsMCk7CisJcmV0dXJuKGNtZmxncyk7CisjZW5kaWYgLyogTV9VTkdXICovCisgICAgfQorICAg IHBwID0gbnA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFN0YXJ0IG9mIGN1cnJlbnQg ZmllbGQgKi8KKworI2lmZGVmIENPTU1FTlQKKyNpZmRlZiBERUJVRworICAgIGlmIChkZWJsb2cp IHsKKwlkZWJ1ZyhGMTEwLCJndHdvcmQgY21kYnVmIixjbWRidWYsMCk7CisJZGVidWcoRjExMCwi Z3R3b3JkIGJwIixicCwwKTsKKwlkZWJ1ZyhGMTEwLCJndHdvcmQgcHAiLHBwLDApOworICAgIH0K KyNlbmRpZiAvKiBERUJVRyAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICB7CisJLyogSWYg d2UgYXJlIHJlcGFyc2luZyB3ZSBoYXZlIHRvIHJlY291bnQgYW55IGJyYWNlcyBvciBkb3VibGVx dW90ZXMgKi8KKwljaGFyICogcCA9IHBwOworCWNoYXIgYzsKKwlpZiAoKnAgPT0gJyInKQorCSAg ZHErKzsKKwl3aGlsZSAoKGMgPSAqcCsrKSkKKwkgIGlmIChjID09IGxicmFjZSkKKwkgICAgYnJh Y2VsdmwrKzsKKwkgIGVsc2UgaWYgKGMgPT0gcmJyYWNlKQorCSAgICBicmFjZWx2bC0tOworCSAg ZWxzZSBpZiAoZHEgJiYgYyA9PSAnIicpCisJICAgIGRxbisrOworICAgIH0KKyAgICB3aGlsZSAo YnAgPCBjbWRidWYrQ01EQkwpIHsgICAgICAgICAvKiBCaWcgZ2V0LWEtY2hhcmFjdGVyIGxvb3Ag Ki8KKwllY2hvZiA9IDA7CQkJLyogQXNzdW1lIHdlIGRvbid0IGVjaG8gYmVjYXVzZSAqLworCWNo c3JjID0gMDsJCQkvKiBjaGFyYWN0ZXIgY2FtZSBmcm9tIHJlcGFyc2UgYnVmLiAqLworI2lmZGVm IEJTX0RJUlNFUAorQ01ESVJQQVJTRToKKyNlbmRpZiAvKiBCU19ESVJTRVAgKi8KKworCWMgPSAq YnA7CisgICAgICAgIGlmICghYykgewkJCS8qIElmIG5vIGNoYXIgd2FpdGluZyBpbiByZXBhcnNl IGJ1ZiAqLworCSAgICBpZiAoKGRweAorI2lmbmRlZiBOT1NQTAorCQkgfHwgZWNob3N0YXJzCisj ZW5kaWYgLyogTk9TUEwgKi8KKwkJICkgJiYgKCFwdXNoYworI2lmbmRlZiBOT1NQTAorCQkJfHwg YXNrZmxhZworI2VuZGlmIC8qIE5PU1BMICovCisJCQkpKQkJLyogR2V0IGZyb20gdHR5LCBzZXQg ZWNobyBmbGFnICovCisJICAgICAgZWNob2YgPSAxOworCSAgICBjID0gY21kZ2V0Yyh0aW1lbGlt aXQpOwkvKiBSZWFkIGEgY29tbWFuZCBjaGFyYWN0ZXIuICovCisjaWZkZWYgREVCVUcKKwkgICAg ZGVidWcoRjEwMSwiZ3R3b3JkIGMiLCIiLGMpOworI2VuZGlmIC8qIERFQlVHICovCisKKwkgICAg aWYgKHRpbWVsaW1pdCAmJiBjIDwgLTEpIHsJLyogVGltZWQgb3V0ICovCisJCXJldHVybigtMTAp OworCSAgICB9CisKKyNpZm5kZWYgTk9YRkVSCisvKgorICBUaGUgZm9sbG93aW5nIGFsbG93cyBw YWNrZXQgcmVjb2duaXRpb24gaW4gdGhlIGNvbW1hbmQgcGFyc2VyLgorICBQcmVzZW50bHkgaXQg d29ya3Mgb25seSBmb3IgS2VybWl0IHBhY2tldHMsIGFuZCBpZiBvdXIgY3VycmVudCBwcm90b2Nv bAorICBoYXBwZW5zIHRvIGJlIGFueXRoaW5nIGJlc2lkZXMgS2VybWl0LCB3ZSBzaW1wbHkgZm9y Y2UgaXQgdG8gS2VybWl0LgorICBXZSBkb24ndCB1c2UgdGhlIEFQQyBtZWNoYW5pc20gaGVyZSBm b3IgbWVjaGFuaWNhbCByZWFzb25zLCBhbmQgYWxzbworICBiZWNhdXNlIHRoaXMgd2F5LCBpdCB3 b3JrcyBldmVuIHdpdGggbWluaW1hbGx5IGNvbmZpZ3VyZWQgaW50ZXJhY3RpdmUKKyAgdmVyc2lv bnMuICBBZGQgWm1vZGVtIGxhdGVyLi4uCisqLworI2lmZGVmIENLX0FVVE9ETAorCSAgICBpZiAo KCFsb2NhbCAmJiBjbWRhZGwpCS8qIEF1dG9kb3dubG9hZCBlbmFibGVkPyAqLworI2lmZGVmIElL U19PUFRJT04KKwkJfHwgVEVMT1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1pdC5tZV9zdGFydAor I2VuZGlmIC8qIElLU19PUFRJT04gKi8KKwkJKSB7CisJCWludCBrOworCQlrID0ga3N0YXJ0KChD SEFSKWMpOwkvKiBLZXJtaXQgUyBvciBJIHBhY2tldD8gKi8KKwkJaWYgKGspIHsKKwkJICAgIGlu dCBrc2lnbiA9IDA7CisJCSAgICBpZiAoayA8IDApIHsJLyogTWludXMtUHJvdG9jb2w/ICovCisj aWZkZWYgTk9TRVJWRVIKKwkJCWdvdG8gbm9zZXJ2ZXI7CS8qIE5lZWQgc2VydmVyIG1vZGUgZm9y IHRoaXMgKi8KKyNlbHNlCisJCQlrc2lnbiA9IDE7CS8qIFJlbWVtYmVyICovCisJCQlrID0gMCAt IGs7CS8qIENvbnZlcnQgdG8gYWN0dWFsIHByb3RvY29sICovCisJCQlqdXN0b25lID0gMTsJLyog RmxhZyBmb3IgcHJvdG9jb2wgbW9kdWxlICovCisjZW5kaWYgLyogTk9TRVJWRVIgKi8KKwkJICAg IH0gZWxzZQorCQkgICAgICBqdXN0b25lID0gMDsKKwkJICAgIGstLTsJCS8qIEFkanVzdCBrc3Rh cnQncyByZXR1cm4gdmFsdWUgKi8KKwkJICAgIGlmIChrID09IFBST1RPX0spIHsKKwkJCWV4dGVy biBpbnQgcHJvdG9jb2wsIGdfcHJvdG87CisJCQlleHRlcm4gQ0hBUiBzc3RhdGU7CisJCQlnX3By b3RvID0gcHJvdG9jb2w7CisJCQlwcm90b2NvbCA9IFBST1RPX0s7IC8qIENydWRlLi4uICovCisJ CQlzc3RhdGUgPSBrc2lnbiA/ICd4JyA6ICd2JzsKKwkJCWNtZGJ1ZlswXSA9IE5VTDsKKwkJCXJl dHVybigtMyk7CisJCSAgICB9CisJCX0KKwkgICAgfQorI2lmZGVmIE5PU0VSVkVSCisJICBub3Nl cnZlcjoKKyNlbmRpZiAvKiBOT1NFUlZFUiAqLworI2VuZGlmIC8qIENLX0FVVE9ETCAqLworI2Vu ZGlmIC8qIE5PWEZFUiAqLworCisJICAgIGNoc3JjID0gMTsJCQkvKiBSZW1lbWJlciBjaGFyYWN0 ZXIgc291cmNlIGlzIHR0eS4gKi8KKwkgICAgYnJrY2hhciA9IGM7CisKKyNpZmRlZiBJS1NECisg ICAgICAgICAgICBpZiAoaW5zZXJ2ZXIgJiYgYyA8IDApIHsgICAgLyogRW5kIG9mIHNlc3Npb24/ ICovCisgICAgICAgICAgICAgICAgZGVidWcoRjExMSwiZ3R3b3JkIGMgPCAwIiwiZXhpdGluZyIs Yyk7CisgICAgICAgICAgICAgICAgcmV0dXJuKC00KTsgICAgICAgICAgICAgLyogQ2xlYW51cCBh bmQgdGVybWluYXRlICovCisgICAgICAgICAgICB9CisjZW5kaWYgLyogSUtTRCAqLworCisjaWZk ZWYgT1MyCisgICAgICAgICAgIGlmIChjIDwgMCkgewkJCS8qIEVycm9yICovCisJICAgICAgIGlm IChjID09IC0zKSB7CQkvKiBFbXB0eSB3b3JkPyAqLworCQkgICBpZiAoYmxvY2tsdmwgPiAwKQkv KiBJbiBhIGJsb2NrICovCisJCSAgICAgY29udGludWU7CQkvKiBzbyBrZWVwIGxvb2tpbmcgZm9y IGJsb2NrIGVuZCAqLworCQkgICBlbHNlCisJCSAgICAgcmV0dXJuKC0zKTsJLyogT3RoZXJ3aXNl IHNheSB3ZSBnb3Qgbm90aGluZyAqLworCSAgICAgICB9IGVsc2UgewkJCS8qIE5vdCBlbXB0eSB3 b3JkICovCisJCSAgIHJldHVybigtNCk7CQkvKiBTbyBzb21lIGtpbmQgb2YgaS9vIGVycm9yICov CisJICAgICAgIH0KKyAgICAgICAgICAgfQorI2Vsc2UKKyNpZmRlZiBNQUMKKwkgICBpZiAoYyA9 PSAtMykJCQkvKiBFbXB0eSB3b3JkLi4uICovCisJICAgICBpZiAoYmxvY2tsdmwgPiAwKQorCSAg ICAgICBjb250aW51ZTsKKwkgICAgIGVsc2UKKwkgICAgICAgcmV0dXJuKC0zKTsKKyNlbmRpZiAv KiBNQUMgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKwkgICBpZiAoYyA9PSBFT0YpIHsJCS8qIFRoaXMg Y2FuIGhhcHBlbiBpZiBzdGRpbiBub3QgdHR5LiAqLworI2lmZGVmIEVJTlRSCisvKgorICBTb21l IG9wZXJhdGluZyBhbmQvb3IgQyBydW50aW1lIHN5c3RlbXMgcmV0dXJuIEVJTlRSIGZvciBubyBn b29kIHJlYXNvbiwKKyAgd2hlbiB0aGUgZW5kIG9mIHRoZSBzdGFuZGFyZCBpbnB1dCAiZmlsZSIg aXMgZW5jb3VudGVyZWQuICBJbiBjYXNlcyBsaWtlCisgIHRoaXMsIHdlIGdldCBpbnRvIGFuIGlu ZmluaXRlIGxvb3A7IGhlbmNlIHRoZSBlaW50ciBjb3VudGVyLCB3aGljaCBpcyByZXNldAorICB0 byAwIHVwb24gZWFjaCBjYWxsIHRvIHRoaXMgcm91dGluZS4KKyovCisJCWRlYnVnKEYxMDEsImd0 d29yZCBFT0YiLCIiLGVycm5vKTsKKwkJaWYgKGVycm5vID09IEVJTlRSICYmICsrZWludHIgPCA0 KSAvKiBXaGVuIGJnJ2QgcHJvY2VzcyBpcyAqLworCQkgIGNvbnRpbnVlOwkJLyogZmcnZCBhZ2Fp bi4gKi8KKyNlbmRpZiAvKiBFSU5UUiAqLworCQlyZXR1cm4oLTQpOworCSAgICB9CisJICAgIGMg Jj0gY21kbXNrOwkJLyogU3RyaXAgYW55IHBhcml0eSBiaXQgKi8KKwl9CQkJCS8qIGlmIGRlc2ly ZWQuICovCisKKy8qIE5vdyB3ZSBoYXZlIHRoZSBuZXh0IGNoYXJhY3RlciAqLworCisJaXNlc2Mg PSAoYyA9PSBFU0MpOwkJLyogQSByZWFsIEVTQz8gKi8KKworCWlmICghZmlyc3RuYiAmJiBjID4g U1ApIHsJLyogRmlyc3Qgbm9uYmxhbmsgKi8KKwkgICAgZmlyc3RuYiA9IGM7CisJICAgIGlmIChj ID09ICciJykJCS8qIFN0YXJ0cyB3aXRoIGRvdWJsZXF1b3RlICovCisJICAgICAgZHEgPSAxOwor CX0KKwlpZiAoYyA9PSAnIicpCQkJLyogQ291bnQgZG91YmxlcXVvdGVzICovCisJICBkcW4rKzsK KworCWlmIChxdW90ZSAmJiAoYyA9PSBDUiB8fCBjID09IExGKSkgeyAvKiBFbnRlciBrZXkgZm9s bG93aW5nIHF1b3RlICovCisJICAgICpicCsrID0gQ01EUTsJCS8qIERvdWJsZSBpdCAqLworCSAg ICAqYnAgPSBOVUw7CisJICAgIHF1b3RlID0gMDsKKwl9CisgICAgICAgIGlmIChxdW90ZSA9PSAw KSB7CQkvKiBJZiB0aGlzIGlzIG5vdCBhIHF1b3RlZCBjaGFyYWN0ZXIgKi8KKwkgICAgc3dpdGNo IChjKSB7CisJICAgICAgY2FzZSBDTURROgkJLyogR290IHRoZSBxdW90ZSBjaGFyYWN0ZXIgaXRz ZWxmICovCisJCWlmICghY29tbWVudCAmJiBxdW90aW5nKQorCQkgIHF1b3RlID0gMTsJCS8qIEZs YWcgaXQgaWYgbm90IGluIGEgY29tbWVudCAqLworCQlicmVhazsKKwkgICAgICBjYXNlIEZGOgkJ CS8qIEZvcm1mZWVkLiAqLworICAgICAgICAgICAgICAgIGMgPSBOTDsgICAgICAgICAgICAgICAg IC8qIFJlcGxhY2Ugd2l0aCBuZXdsaW5lICovCisJCWNtZGNscnNjbigpOwkJLyogQ2xlYXIgdGhl IHNjcmVlbiAqLworCQlicmVhazsKKwkgICAgICBjYXNlIEhUOgkJCS8qIEhvcml6b250YWwgVGFi ICovCisJCWlmIChjb21tZW50KQkJLyogSWYgaW4gY29tbWVudCwgKi8KKwkJICBjID0gU1A7CQkv KiBzdWJzdGl0dXRlIHNwYWNlICovCisJCWVsc2UJCQkvKiBvdGhlcndpc2UgKi8KKwkJICBjID0g RVNDOwkJLyogc3Vic3RpdHV0ZSBFU0MgKGZvciBjb21wbGV0aW9uKSAqLworCQlicmVhazsKKwkg ICAgICBjYXNlICc7JzoJCQkvKiBUcmFpbGluZyBjb21tZW50ICovCisJICAgICAgY2FzZSAnIyc6 CisJCWlmICghIChicmsgJiA0KSApIHsJLyogSWYgbm90IGtlZXBpbmcgY29tbWVudHMgKi8KKwkJ ICAgIGlmIChpbndvcmQgPT0gMCAmJiBxdW90aW5nKSB7IC8qIElmIG5vdCBpbiBhIHdvcmQgKi8K KwkJCWNvbW1lbnQgPSAxOwkvKiBzdGFydCBhIGNvbW1lbnQuICovCisJCQljcCA9IGJwOwkvKiBy ZW1lbWJlciB3aGVyZSBpdCBzdGFydHMuICovCisJCSAgICB9CisJCX0KKwkJYnJlYWs7CisJICAg IH0KKwkgICAgaWYgKCFrc3RhcnRhY3RpdmUgJiYJLyogTm90IGluIHBvc3NpYmxlIEtlcm1pdCBw YWNrZXQgKi8KKwkJIWNvbW1lbnQgJiYgYyA9PSBTUCkgewkvKiBTcGFjZSBub3QgaW4gY29tbWVu dCAqLworICAgICAgICAgICAgICAgICpicCsrID0gKGNoYXIpIGM7CS8qIGRlcG9zaXQgaW4gYnVm ZmVyIGlmIG5vdCBhbHJlYWR5ICovCisJCS8qIGRlYnVnKEYxMDEsImd0d29yZCBlY2hvZiAyIiwi IixlY2hvZik7ICovCisjaWZkZWYgQkVCT1gKKyAgICAgICAgICAgICAgICBpZiAoZWNob2YpIHsK KwkJICAgIGNtZGVjaG8oKGNoYXIpIGMsIDApOyAvKiBFY2hvIHdoYXQgd2FzIHR5cGVkLiAqLwor ICAgICAgICAgICAgICAgICAgICBmZmx1c2goc3Rkb3V0KTsKKyAgICAgICAgICAgICAgICAgICAg ZmZsdXNoKHN0ZGVycik7CisgICAgICAgICAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgICAgICAg ICBpZiAoZWNob2YpIHsKKwkJICAgIGNtZGVjaG8oKGNoYXIpIGMsIDApOyAvKiBFY2hvIHdoYXQg d2FzIHR5cGVkLiAqLworCQkgICAgaWYgKHRpbWVsaW1pdCkKKwkJICAgICAgZmZsdXNoKHN0ZG91 dCk7CisJCX0KKyNlbmRpZiAvKiBCRUJPWCAqLworICAgICAgICAgICAgICAgIGlmIChpbndvcmQg PT0gMCkgeyAgICAgIC8qIElmIGxlYWRpbmcsIGdvYmJsZSBpdC4gKi8KKyAgICAgICAgICAgICAg ICAgICAgcHArKzsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAg ICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgLyogSWYgdGVybWluYXRpbmcsIHJldHVybi4gKi8K KwkJICAgIGlmICgoIWRxICYmICgoKnBwICE9IGxicmFjZSkgfHwgKGJyYWNlbHZsID09IDApKSkg fHwKKwkJCShkcSAmJiBkcW4gPiAxICYmICooYnAtMikgPT0gJyInKSkgeworCQkJbnAgPSBicDsK KwkJCWNtYnB0ciA9IG5wOworCQkJaWYgKHNldGF0bShwcCwwKSA8IDApIHsKKwkJCSAgICBwcmlu dGYoIj9GaWVsZCB0b28gbG9uZyBlcnJvciAxXG4iKTsKKwkJCSAgICBkZWJ1ZyhGMTExLCJndHdv cmQgdG9vIGxvbmcgIzEiLHBwLHN0cmxlbihwcCkpOworCQkJICAgIHJldHVybigtOSk7CisJCQl9 CisJCQlicmtjaGFyID0gYzsKKwkJCWlud29yZCA9IGNtZmxncyA9IDA7CisJCQlyZXR1cm4oMCk7 CisJCSAgICB9CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjID09IGxicmFjZSkgeworCQlicmFj ZWx2bCsrOworCQkvKiBkZWJ1ZyhGMTAxLCJndHdvcmQgYnJhY2VsdmwrKyIsIiIsYnJhY2Vsdmwp OyAqLworCSAgICB9CisgICAgICAgICAgICBpZiAoYyA9PSByYnJhY2UgJiYgYnJhY2VsdmwgPiAw KSB7CisgICAgICAgICAgICAgICAgYnJhY2VsdmwtLTsKKwkJLyogZGVidWcoRjEwMSwiZ3R3b3Jk IGJyYWNlbHZsLS0iLCIiLGJyYWNlbHZsKTsgKi8KKyAgICAgICAgICAgICAgICBpZiAobGluZWJl Z2luKQorCQkgIGJsb2NrbHZsLS07CisgICAgICAgICAgICB9CisJICAgIGlmICgoYyA9PSAnPScg fHwgYyA9PSAnOicpICYmCisJCS8qIF5eXiAqLworCQkha3N0YXJ0YWN0aXZlICYmICFjb21tZW50 ICYmIGJyayAvKiAmJiAoZmlyc3RuYiA9PSAnLycpICovCisJCSkgeworICAgICAgICAgICAgICAg ICpicCsrID0gKGNoYXIpIGM7CS8qIFN3aXRjaCBhcmd1bWVudCBzZXBhcmF0b3IgKi8KKwkJLyog ZGVidWcoRjExMSwiZ3R3b3JkIHN3aXRjaCBhcmdzZXAiLGNtZGJ1ZixicmspOyAqLworI2lmZGVm IEJFQk9YCisgICAgICAgICAgICAgICAgaWYgKGVjaG9mKSB7CisJCSAgICBjbWRlY2hvKChjaGFy KSBjLCAwKTsgLyogRWNobyB3aGF0IHdhcyB0eXBlZC4gKi8KKyAgICAgICAgICAgICAgICAgICAg ZmZsdXNoKHN0ZG91dCk7CisgICAgICAgICAgICAgICAgICAgIGZmbHVzaChzdGRlcnIpOworICAg ICAgICAgICAgICAgIH0KKyNlbHNlCisJCWlmIChlY2hvZikgeworCQkgICAgY21kZWNobygoY2hh cikgYywgMCk7IC8qIEVjaG8gd2hhdCB3YXMgdHlwZWQuICovCisJCSAgICBpZiAodGltZWxpbWl0 KQorCQkgICAgICBmZmx1c2goc3Rkb3V0KTsKKwkJfQorI2VuZGlmIC8qIEJFQk9YICovCisJCWlm ICgoKnBwICE9IGxicmFjZSkgfHwgKGJyYWNlbHZsID09IDApKSB7CisJCSAgICBucCA9IGJwOwor CQkgICAgY21icHRyID0gbnA7CisJCSAgICBpZiAoc2V0YXRtKHBwLDIpIDwgMCkgeyAvKiBeXl4g Ki8KKwkJCXByaW50ZigiP0ZpZWxkIHRvbyBsb25nIGVycm9yIDFcbiIpOworCQkJZGVidWcoRjEx MSwiZ3R3b3JkIHRvbyBsb25nICMxIixwcCxzdHJsZW4ocHApKTsKKwkJCXJldHVybigtOSk7CisJ CSAgICB9CisJCSAgICBpbndvcmQgPSBjbWZsZ3MgPSAwOworCQkgICAgYnJrY2hhciA9IGM7CisJ CSAgICByZXR1cm4oNCk7CisJCX0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjID09 IExGIHx8IGMgPT0gQ1IpIHsJLyogQ1Igb3IgTEYuICovCisJCWlmIChlY2hvZikgeworICAgICAg ICAgICAgICAgICAgICBjbWRuZXdsKChjaGFyKWMpOwkvKiBlY2hvIGl0LiAqLworI2lmZGVmIEJF Qk9YCisgICAgICAgICAgICAgICAgICAgIGZmbHVzaChzdGRvdXQpOworICAgICAgICAgICAgICAg ICAgICBmZmx1c2goc3RkZXJyKTsKKyNlbmRpZiAvKiBCRUJPWCAqLworICAgICAgICAgICAgICAg IH0KKwkJeworCQkgICAgLyogVHJpbSB0cmFpbGluZyBjb21tZW50IGFuZCB3aGl0ZXNwYWNlICov CisJCSAgICBjaGFyICpxcTsKKwkJICAgIGlmIChjb21tZW50KSB7CS8qIEVyYXNlIGNvbW1lbnQg Ki8KKwkJCXdoaWxlIChicCA+PSBjcCkgLyogQmFjayB0byBjb21tZW50IHBvaW50ZXIgKi8KKwkJ CSAgKmJwLS0gPSBOVUw7CisJCQlicCsrOworCQkJcHAgPSBicDsJLyogQWRqdXN0IG90aGVyIHBv aW50ZXJzICovCisJCQlpbndvcmQgPSAwOwkvKiBhbmQgZmxhZ3MgKi8KKwkJCWNvbW1lbnQgPSAw OworCQkJY3AgPSBOVUxMOworCQkgICAgfQorCQkgICAgcXEgPSBpbndvcmQgPyBwcCA6IChjaGFy ICopY21kYnVmOworCQkgICAgLyogRXJhc2UgdHJhaWxpbmcgd2hpdGVzcGFjZSAqLworCQkgICAg d2hpbGUgKGJwID4gcXEgJiYgKCooYnAtMSkgPT0gU1AgfHwgKihicC0xKSA9PSBIVCkpIHsKKwkJ CWJwLS07CisJCQkvKiBkZWJ1ZyhGMDAwLCJlcmFzaW5nIiwiIiwqYnApOyAqLworCQkJKmJwID0g TlVMOworCQkgICAgfQorCQkgICAgbGFzdGNoYXIgPSAoYnAgPiBxcSkgPyAqKGJwLTEpIDogTlVM OworCQkgICAgcHJldmNoYXIgPSAoYnAgPiBxcSsxKSA/ICooYnAtMikgOiBOVUw7CisJCX0KKwkJ aWYgKGxpbmViZWdpbiAmJiBibG9ja2x2bCA+IDApIC8qIEJsYW5rIGxpbmUgaW4gey4uLn0gYmxv Y2sgKi8KKwkJICBjb250aW51ZTsKKworCQlsaW5lYmVnaW4gPSAxOwkJLyogQXQgYmVnaW5uaW5n IG9mIG5leHQgbGluZSAqLworCQlpc2NvbnRkID0gcHJldmNoYXIgIT0gQ01EUSAmJgorCQkgIChs YXN0Y2hhciA9PSAnLScgfHwgbGFzdGNoYXIgPT0gbGJyYWNlKTsKKwkJZGVidWcoRjEwMSwiZ3R3 b3JkIGlzY29udGQiLCIiLGlzY29udGQpOworCisgICAgICAgICAgICAgICAgaWYgKGlzY29udGQp IHsJCS8qIElmIGxpbmUgaXMgY29udGludWVkLi4uICovCisgICAgICAgICAgICAgICAgICAgIGlm IChjaHNyYykgewkvKiBJZiByZWFkaW5nIGZyb20gdHR5LCAqLworICAgICAgICAgICAgICAgICAg ICAgICAgaWYgKCooYnAtMSkgPT0gbGJyYWNlKSB7IC8qIENoZWNrIGZvciAiYmVnaW4gYmxvY2si ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmJwKysgPSBTUDsJLyogSW5zZXJ0IGEg c3BhY2UgZm9yIG5lYXRuZXNzICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2ts dmwrKzsJLyogQ291bnQgYmxvY2sgbmVzdGluZyBsZXZlbCAqLworICAgICAgICAgICAgICAgICAg ICAgICAgfSBlbHNlIHsJLyogT3IgaHlwaGVuICovCisJCQkgICAgYnAtLTsJLyogT3ZlcndyaXRl IHRoZSBoeXBoZW4gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ICAgICAgICAgICpicCA9IE5VTDsJLyogZXJhc2UgdGhlIGRhc2gsICovCisgICAgICAgICAgICAg ICAgICAgICAgICBjb250aW51ZTsJLyogYW5kIGdvIGJhY2sgZm9yIG5leHQgY2hhciBub3cuICov CisgICAgICAgICAgICAgICAgICAgIH0KKwkJfSBlbHNlIGlmIChibG9ja2x2bCA+IDApIHsgLyog Tm8gY29udGludWF0aW9uIGNoYXJhY3RlciAqLworCQkgICAgaWYgKGNoc3JjKSB7CS8qIEJ1dCB3 ZSdyZSBpbiBhICJibG9jayIgKi8KKwkJCSpicCsrID0gJywnOwkvKiBBZGQgY29tbWEgKi8KKwkJ CSpicCA9IE5VTDsKKwkJCWNvbnRpbnVlOworCQkgICAgfQorCQl9IGVsc2UgewkJLyogTm8gY29u dGludWF0aW9uLCBlbmQgb2YgY29tbWFuZC4gKi8KKwkJICAgICpicCA9IE5VTDsJCS8qIFRlcm1p bmF0ZSB0aGUgY29tbWFuZCBzdHJpbmcuICovCisJCSAgICBpZiAoY29tbWVudCkgewkvKiBJZiB3 ZSdyZSBpbiBhIGNvbW1lbnQsICovCisJCQljb21tZW50ID0gMDsJLyogU2F5IHdlJ3JlIG5vdCBh bnkgbW9yZSwgKi8KKwkJCSpjcCA9IE5VTDsJLyogY3V0IGl0IG9mZi4gKi8KKwkJICAgIH0KKwkJ ICAgIG5wID0gYnA7CQkvKiBXaGVyZSB0byBzdGFydCBuZXh0IGZpZWxkLiAqLworCQkgICAgY21i cHRyID0gbnA7CisJCSAgICBpZiAoc2V0YXRtKHBwLDApIDwgMCkgeyAvKiBDb3B5IGZpZWxkIHRv IGF0b20gYnVmZmVyICovCisJCQlkZWJ1ZyhGMTExLCJndHdvcmQgdG9vIGxvbmcgIzIiLHBwLHN0 cmxlbihwcCkpOworCQkJcHJpbnRmKCI/RmllbGQgdG9vIGxvbmcgZXJyb3IgMlxuIik7CisJCQly ZXR1cm4oLTkpOworCQkgICAgfQorCQkgICAgaW53b3JkID0gMDsJCS8qIE5vdCBpbiBhIHdvcmQg YW55IG1vcmUuICovCisJCSAgICBjcmZsYWcgPSAxOworICAgICAgICAgICAgICAgICAgICAvKiBk ZWJ1ZyhGMTEwLCJndHdvcmQiLCJjcmZsYWcgaXMgc2V0IiwwKTsgKi8KKyNpZmRlZiBDS19SRUNB TEwKKwkJICAgIGN1cnJlbnQgPSBybGFzdDsKKyNlbmRpZiAvKiBDS19SRUNBTEwgKi8KKwkJICAg IGNtZmxncyA9IDE7CisJCSAgICBpZiAoIXhjbWRzcmMKKyNpZmRlZiBDS19SRUNBTEwKKwkJCXx8 IGZvcmNlX2FkZAorI2VuZGlmIC8qIENLX1JFQ0FMTCAqLworCQkJKQorICAJCSAgICAgIGFkZGNt ZChjbWRidWYpOworCQkgICAgcmV0dXJuKGNtZmxncyk7CisJCX0KKyAgICAgICAgICAgIH0KKy8q CisgIFRoaXMgc2VjdGlvbiBoYW5kbGVzIGludGVyYWN0aXZlIGhlbHAsIGNvbXBsZXRpb24sIGVk aXRpbmcsIGFuZCBoaXN0b3J5LgorICBSZWFycmFuZ2VkIGFzIGEgc3dpdGNoIHN0YXRlbWVudCBl eGVjdXRlZCBvbmx5IGlmIHdlJ3JlIGF0IHRvcCBsZXZlbCBzaW5jZQorICB0aGVyZSBpcyBubyBu ZWVkIGZvciBhbnkgb2YgdGhpcyB3aXRoaW4gY29tbWFuZCBmaWxlcyBhbmQgbWFjcm9zOiBBdWcg MjAwMC4KKyAgSnVuIDIwMDE6IEV2ZW4gaWYgYXQgdG9wIGxldmVsLCBza2lwIHRoaXMgaWYgdGhl IGNoYXJhY3RlciB3YXMgZmV0Y2hlZCBmcm9tCisgIHRoZSByZXBhcnNlIG9yIHJlY2FsbCBidWZm ZXIsIG9yIGlmIHN0ZGluIGlzIHJlZGlyZWN0ZWQuCisqLworCSAgICBpZiAoKHhjbWRzcmMgPT0g MAkJLyogT25seSBhdCB0b3AgbGV2ZWwgKi8KKyNpZm5kZWYgTk9TUEwKKwkJfHwgYXNrZmxhZwkJ Lyogb3IgdXNlciBpcyB0eXBpbmcgQVNLIHJlc3BvbnNlICovCisjZW5kaWYgLyogTk9TUEwgKi8K KwkJICkgJiYgY2hzcmMgIT0gMCAmJiByZWFsdHR5KSB7IC8qIGZyb20gdGhlIHJlYWwga2V5Ym9h cmQgKi8KKworLyogVXNlIEFOU0kgLyBWVDEwMCB1cCBhbmQgZG93biBhcnJvdyBrZXlzIGZvciBj b21tYW5kIHJlY2FsbC4gICovCisKKwkJaWYgKGlzZXNjICYmICgKKyNpZmRlZiBJS1NECisJCSAg ICBpbnNlcnZlcgorI2Vsc2UKKwkJICAgIDAKKyNlbmRpZiAvKiBJS1NEICovCisjaWZkZWYgVVNF X0FSUk9XS0VZUworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgMQorI2VuZGlmIC8q IFVTRV9BUlJPV0tFWVMgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAg ICAgICAgICAgICAgICAgKSB7CQkvKiBBIHJlYWwgRVNDIHdhcyB0eXBlZCAqLworCQkgICAgaW50 IHg7CisJCSAgICBtc2xlZXAoMjAwKTsJLyogV2FpdCAxLzUgc2VjICovCisJCSAgICB4ID0gY21k Y29uY2hrKCk7CS8qIFdhcyBpdCBmb2xsb3dlZCBieSBhbnl0aGluZz8gKi8KKwkJICAgIGRlYnVn KEYxMDEsIkFycm93a2V5IEVTQyBjbWRjb25jaGsiLCIiLHgpOworCisJCSAgICBpZiAoeCA+IDEp IHsJLyogSWYgZm9sbG93ZWQgYnkgYXQgbGVhc3QgMiBjaGFycyAqLworCQkJaW50IGMyOworCQkJ YzIgPSBjbWRnZXRjKDApOyAvKiBHZXQgdGhlIGZpcnN0IG9uZSAqLworCQkJZGVidWcoRjEwMSwi QXJyb3drZXkgRVNDIGMyIiwiIixjMik7CisKKwkJCWlmIChjMiAhPSAnWycgJiYgYzIgIT0gJ08n KSB7IC8qIElmIG5vdCBbIG9yIE8gKi8KKwkJCSAgICBwdXNoYyA9IGMyOwkvKiBQdXNoIGl0IGFu ZCB0YWtlIHRoZSBFU0Mgc29sbyAqLworCQkJfSBlbHNlIHsKKwkJCSAgICBjMiA9IGNtZGdldGMo MCk7IC8qIEdldCB0aGUgc2Vjb25kIG9uZSAqLworCQkJICAgIGRlYnVnKEYxMDEsIkFycm93a2V5 IEVTQyBjMyIsIiIsYzIpOworCQkJICAgIHN3aXRjaCAoYzIpIHsKKyNpZm5kZWYgTk9SRUNBTEwK KwkJCSAgICAgIGNhc2UgJ0EnOgkvKiBVcCAqLworCQkJCWMgPSBCRUw7CisJCQkJYyA9IENfVVA7 CisJCQkJYnJlYWs7CisJCQkgICAgICBjYXNlICdCJzoJLyogRG93biAqLworCQkJCWMgPSBCRUw7 CisJCQkJYyA9IENfRE47CisJCQkJYnJlYWs7CisJCQkgICAgICBjYXNlICdDJzoJLyogUmlnaHQg Ki8KKwkJCSAgICAgIGNhc2UgJ0QnOgkvKiBMZWZ0ICovCisjZWxzZQorCQkJICAgICAgZGVmYXVs dDoKKyNlbmRpZiAvKiBOT1JFQ0FMTCAqLworCQkJCWMgPSBCRUw7IC8qIFdlIGRvbid0IHVzZSB0 aGVzZSB5ZXQgKi8KKwkJCQlicmVhazsKKwkJCSAgICB9CisJCQl9CisJCSAgICB9CisJCX0KKwor CQlzd2l0Y2ggKGMpIHsKKwkJICBjYXNlICc/JzoJCS8qID8tSGVscCAqLworI2lmbmRlZiBOT1NQ TAorCQkgICAgaWYgKGFza2ZsYWcpCS8qIE5vIGhlbHAgaW4gQVNLIHJlc3BvbnNlICovCisJCSAg ICAgIGJyZWFrOworI2VuZGlmIC8qIE5PU1BMICovCisJCSAgICBpZiAocXVvdGluZworCQkJJiYg IWtzdGFydGFjdGl2ZQorCQkJJiYgIWNvbW1lbnQKKwkJCSkgeworCQkJY21kZWNobygoY2hhcikg YywgMCk7CisJCQkqYnAgPSBOVUw7CisJCQlpZiAoc2V0YXRtKHBwLDApIDwgMCkgeworCQkJICAg IGRlYnVnKEYxMTEsImd0d29yZCB0b28gbG9uZyA/IixwcCxzdHJsZW4ocHApKTsKKwkJCSAgICBw cmludGYoIj9Ub28gbG9uZ1xuIik7CisJCQkgICAgcmV0dXJuKC05KTsKKwkJCX0KKwkJCXFtZmxh ZyA9IDE7CisJCQlyZXR1cm4oY21mbGdzID0gMyk7CisJCSAgICB9CisKKwkJICBjYXNlIEVTQzoJ CS8qIEVzYyBvciBUYWIgY29tcGxldGlvbiAqLworCQkgICAgaWYgKCFjb21tZW50KSB7CisJCQkq YnAgPSBOVUw7CisJCQlpZiAoc2V0YXRtKHBwLDApIDwgMCkgeworCQkJICAgIGRlYnVnKEYxMTEs Imd0d29yZCB0b28gbG9uZyBFc2MiLHBwLHN0cmxlbihwcCkpOworCQkJICAgIHByaW50ZigiP1Rv byBsb25nXG4iKTsKKwkJCSAgICByZXR1cm4oLTkpOworCQkJfQorCQkJZXNmbGFnID0gMTsKKwkJ CXJldHVybihjbWZsZ3MgPSAyKTsKKwkJICAgIH0gZWxzZSB7CisJCQlibGVlcChCUF9XQVJOKTsK KwkJCWNvbnRpbnVlOworCQkgICAgfQorCisJCSAgY2FzZSBCUzoJCS8qIENoYXJhY3RlciBkZWxl dGlvbiAqLworCQkgIGNhc2UgUlVCOgorCQkgICAgaWYgKGJwID4gY21kYnVmKSB7CS8qIElmIHN0 aWxsIGluIGJ1ZmZlci4uLiAqLworCQkJY21kY2hhcmRlbCgpOwkvKiBlcmFzZSBpdC4gKi8KKwkJ CWJwLS07CQkvKiBwb2ludCBiZWhpbmQgaXQsICovCisJCQlpZiAoKmJwID09IGxicmFjZSkgYnJh Y2VsdmwtLTsgLyogQWRqdXN0IGJyYWNlIGNvdW50ICovCisJCQlpZiAoKmJwID09IHJicmFjZSkg YnJhY2VsdmwrKzsKKwkJCWlmICgoKmJwID09IFNQKSAmJiAvKiBGbGFnIGlmIGN1cnJlbnQgZmll bGQgZ29uZSAqLworCQkJICAgICgqcHAgIT0gbGJyYWNlIHx8IGJyYWNlbHZsID09IDApKQorCQkJ ICBpbndvcmQgPSAwOworCQkJKmJwID0gTlVMOwkvKiBFcmFzZSBjaGFyYWN0ZXIgZnJvbSBidWZm ZXIuICovCisJCSAgICB9IGVsc2UgewkJLyogT3RoZXJ3aXNlLCAqLworCQkJYmxlZXAoQlBfV0FS Tik7CisJCQljbXJlcygpOwkvKiBhbmQgc3RhcnQgcGFyc2luZyBhIG5ldyBjb21tYW5kLiAqLwor CQkJKmJwID0gKmF0bWJ1ZiA9IE5VTDsKKwkJICAgIH0KKwkJICAgIGlmIChwcCA8IGJwKQorCQkg ICAgICBjb250aW51ZTsKKwkJICAgIGVsc2UKKwkJICAgICAgcmV0dXJuKGNtZmxncyA9IC0xKTsK KworCQkgIGNhc2UgTERFTDoJCS8qIF5VLCBsaW5lIGRlbGV0aW9uICovCisJCSAgICB3aGlsZSAo KGJwLS0pID4gY21kYnVmKSB7CisJCQljbWRjaGFyZGVsKCk7CisJCQkqYnAgPSBOVUw7CisJCSAg ICB9CisJCSAgICBjbXJlcygpOwkJLyogUmVzdGFydCB0aGUgY29tbWFuZC4gKi8KKwkJICAgICpi cCA9ICphdG1idWYgPSBOVUw7CisJCSAgICBpbndvcmQgPSAwOworCQkgICAgcmV0dXJuKGNtZmxn cyA9IC0xKTsKKworCQkgIGNhc2UgV0RFTDoJCS8qIF5XLCB3b3JkIGRlbGV0aW9uICovCisJCSAg ICBpZiAoYnAgPD0gY21kYnVmKSB7CS8qIEJlZXAgaWYgbm90aGluZyB0byBkZWxldGUgKi8KKwkJ CWJsZWVwKEJQX1dBUk4pOworCQkJY21yZXMoKTsKKwkJCSpicCA9ICphdG1idWYgPSBOVUw7CisJ CQlyZXR1cm4oY21mbGdzID0gLTEpOworCQkgICAgfQorCQkgICAgYnAtLTsKKwkJICAgIC8qIEJh Y2sgdXAgb3ZlciBhbnkgdHJhaWxpbmcgbm9uYWxwaGFudW1zICovCisJCSAgICAvKiBUaGlzIGlz IGRlcGVuZGVudCBvbiBBU0NJSSBjb2xsYXRpbmcgc2VxdWVuY2UgKi8KKwkJICAgIC8qIGJ1dCBp c2FscGhhbnVtKCkgaXMgbm90IGF2YWlsYWJsZSBldmVyeXdoZXJlLiAqLworCQkgICAgZm9yICgg OworCQkJIChicCA+PSBjbWRidWYpICYmCisJCQkgKCgqYnAgPCAnMCcpIHx8CisJCQkgKCgqYnAg PiAnOScpICYmICgqYnAgPCAnQCcpKSB8fAorCQkJICgoKmJwID4gJ1onKSAmJiAoKmJwIDwgJ2En KSkgfHwKKwkJCSAoKmJwID4gJ3onKSk7CisJCQkgYnAtLQorCQkJICkgeworCQkJY21kY2hhcmRl bCgpOworCQkJKmJwID0gTlVMOworCQkgICAgfQorCQkgICAgLyogTm93IGRlbGV0ZSBiYWNrIHRv IHJpZ2h0bW9zdCByZW1haW5pbmcgbm9uYWxwaGFudW0gKi8KKwkJICAgIGZvciAoIDsgKGJwID49 IGNtZGJ1ZikgJiYgKCpicCkgOyBicC0tKSB7CisJCQlpZiAoKCpicCA8ICcwJykgfHwKKwkJCSAg ICAoKmJwID4gJzknICYmICpicCA8ICdAJykgfHwKKwkJCSAgICAoKmJwID4gJ1onICYmICpicCA8 ICdhJykgfHwKKwkJCSAgICAoKmJwID4gJ3onKSkKKwkJCSAgYnJlYWs7CisJCQljbWRjaGFyZGVs KCk7CisJCQkqYnAgPSBOVUw7CisJCSAgICB9CisJCSAgICBicCsrOworCQkgICAgaW53b3JkID0g MDsKKwkJICAgIHJldHVybihjbWZsZ3MgPSAtMSk7CisKKwkJICBjYXNlIFJESVM6IHsJCS8qIF5S LCByZWRpc3BsYXkgKi8KKwkJICAgICAgY2hhciAqY3B4OyBjaGFyIGN4OworCQkgICAgICAqYnAg PSBOVUw7CisJCSAgICAgIHByaW50ZigiXG4lcyIsY21wcm9tKTsKKwkJICAgICAgY3B4ID0gY21k YnVmOworCQkgICAgICB3aGlsZSAoKGN4ID0gKmNweCsrKSkgeworCQkJICBjbWRlY2hvKGN4LDAp OworCQkgICAgICB9CisJCSAgICAgIGZmbHVzaChzdGRvdXQpOworCQkgICAgICBjb250aW51ZTsK KwkJICB9CisjaWZuZGVmIE5PTEFTVEZJTEUKKwkJICBjYXNlIFZUOgorCQkgICAgaWYgKGxhc3Rm aWxlKSB7CisJCQlwcmludGYoIiVzICIsbGFzdGZpbGUpOworI2lmZGVmIEdFTURPUworCQkJZmZs dXNoKHN0ZG91dCk7CisjZW5kaWYgLyogR0VNRE9TICovCisJCQlpbndvcmQgPSBjbWZsZ3MgPSAw OworCQkJYWRkYnVmKGxhc3RmaWxlKTsJLyogU3VwcGx5IGRlZmF1bHQuICovCisJCQlpZiAoc2V0 YXRtKGxhc3RmaWxlLDApIDwgMCkgeworCQkJICAgIHByaW50ZigiTGFzdCBuYW1lIHRvbyBsb25n XG4iKTsKKwkJCSAgICBpZiAobnApIGZyZWUobnApOworCQkJICAgIHJldHVybigtOSk7CisJCQl9 CisJCSAgICB9IGVsc2UgewkJLyogTm8gZGVmYXVsdCAqLworCQkJYmxlZXAoQlBfV0FSTik7CisJ CSAgICB9CisJCSAgICByZXR1cm4oMCk7CisjZW5kaWYJLyogTk9MQVNURklMRSAqLworCQl9CisK KyNpZmRlZiBDS19SRUNBTEwKKwkJaWYgKG9uX3JlY2FsbCAmJgkvKiBSZWFkaW5nIGNvbW1hbmRz IGZyb20ga2V5Ym9hcmQ/ICovCisJCSAgICAoY21fcmVjYWxsID4gMCkgJiYJLyogU2F2aW5nIGNv bW1hbmRzPyAqLworCQkgICAgKGMgPT0gQ19VUCB8fCBjID09IENfVVAyKSkgeyAvKiBHbyB1cCBv bmUgKi8KKwkJICAgIGlmIChsYXN0X3JlY2FsbCA9PSAyICYmIGN1cnJlbnQgPiAwKQorCQkgICAg ICBjdXJyZW50LS07CisJCSAgICBpZiAoY3VycmVudCA8IDApIHsJLyogTm93aGVyZSB0byBnbywg Ki8KKwkJCWJsZWVwKEJQX1dBUk4pOworCQkJY29udGludWU7CisJCSAgICB9CisJCSAgICBpZiAo cmVjYWxsW2N1cnJlbnRdKSB7IC8qIFdlIGhhdmUgYSBwcmV2aW91cyBjb21tYW5kICovCisJCQl3 aGlsZSAoKGJwLS0pID4gY21kYnVmKSB7IC8qIEVyYXNlIGN1cnJlbnQgbGluZSAqLworCQkJICAg IGNtZGNoYXJkZWwoKTsKKwkJCSAgICAqYnAgPSBOVUw7CisJCQl9CisJCQlja3N0cm5jcHkoY21k YnVmLHJlY2FsbFtjdXJyZW50XSxDTURCTCk7CisjaWZkZWYgT1NLCisJCQlmZmx1c2goc3Rkb3V0 KTsKKwkJCXdyaXRlKGZpbGVubyhzdGRvdXQpLCAiXHIiLCAxKTsKKwkJCXByaW50ZigiJXMlcyIs Y21wcm9tLGNtZGJ1Zik7CisjZWxzZQorCQkJcHJpbnRmKCJcciVzJXMiLGNtcHJvbSxjbWRidWYp OworI2VuZGlmIC8qIE9TSyAqLworCQkJY3VycmVudC0tOworCQkgICAgfQorCQkgICAgbGFzdF9y ZWNhbGwgPSAxOworCQkgICAgcmV0dXJuKGNtZmxncyA9IC0xKTsgLyogRm9yY2UgYSByZXBhcnNl ICovCisJCX0KKwkJaWYgKG9uX3JlY2FsbCAmJgkvKiBSZWFkaW5nIGNvbW1hbmRzIGZyb20ga2V5 Ym9hcmQ/ICovCisJCSAgICAoY21fcmVjYWxsID4gMCkgJiYJLyogU2F2aW5nIGNvbW1hbmRzPyAq LworCQkgICAgKGMgPT0gQ19ETikpIHsJLyogRG93biBvbmUgKi8KKwkJICAgIGludCB4ID0gMTsK KwkJICAgIGlmIChsYXN0X3JlY2FsbCA9PSAxKQorCQkgICAgICB4Kys7CisJCSAgICBpZiAoY3Vy cmVudCArIHggPiBybGFzdCkgeyAvKiBBbHJlYWR5IGF0IGJvdHRvbSwgYmVlcCAqLworCQkJYmxl ZXAoQlBfV0FSTik7CisJCQljb250aW51ZTsKKwkJICAgIH0KKwkJICAgIGN1cnJlbnQgKz0geDsJ LyogT0sgdG8gZ28gZG93biAqLworCQkgICAgaWYgKHJlY2FsbFtjdXJyZW50XSkgeworCQkJd2hp bGUgKChicC0tKSA+IGNtZGJ1ZikgeyAvKiBFcmFzZSBjdXJyZW50IGxpbmUgKi8KKwkJCSAgICBj bWRjaGFyZGVsKCk7CisJCQkgICAgKmJwID0gTlVMOworCQkJfQorCQkJY2tzdHJuY3B5KGNtZGJ1 ZixyZWNhbGxbY3VycmVudF0sQ01EQkwpOworI2lmZGVmIE9TSworCQkJZmZsdXNoKHN0ZG91dCk7 CisJCQl3cml0ZShmaWxlbm8oc3Rkb3V0KSwgIlxyIiwgMSk7CisJCQlwcmludGYoIiVzJXMiLGNt cHJvbSxjbWRidWYpOworI2Vsc2UKKwkJCXByaW50ZigiXHIlcyVzIixjbXByb20sY21kYnVmKTsK KyNlbmRpZiAvKiBPU0sgKi8KKwkJCWxhc3RfcmVjYWxsID0gMjsKKwkJCXJldHVybihjbWZsZ3Mg PSAtMSk7IC8qIEZvcmNlIHJlcGFyc2UgKi8KKwkJICAgIH0KKwkJfQorI2VuZGlmIC8qIENLX1JF Q0FMTCAqLworCSAgICB9CisKKwkgICAgaWYgKGMgPCBTUCAmJiBxdW90ZSA9PSAwKSB7IC8qIEFu eSBvdGhlciB1bnF1b3RlZCBjb250cm9sIGNoYXIgKi8KKwkJaWYgKCFjaHNyYykgewkJLyogSWYg Y21kIGZpbGUsIHBvaW50IHBhc3QgaXQgKi8KKwkJICAgIGJwKys7CisJCX0gZWxzZSB7CisJCSAg ICBibGVlcChCUF9XQVJOKTsKKwkJfQorCQljb250aW51ZTsJCS8qIGNvbnRpbnVlLCBkb24ndCBw dXQgaW4gYnVmZmVyICovCisJICAgIH0KKwkgICAgbGluZWJlZ2luID0gMDsJCS8qIE5vdCBhdCBi ZWdpbm5pbmcgb2YgbGluZSAqLworI2lmZGVmIEJFQk9YCisJICAgIGlmIChlY2hvZikgeworICAg ICAgICAgICAgICAgIGNtZGVjaG8oKGNoYXIpIGMsIDApOwkvKiBFY2hvIHdoYXQgd2FzIHR5cGVk LiAqLworICAgICAgICAgICAgICAgIGZmbHVzaCAoc3Rkb3V0KTsKKyAgICAgICAgICAgICAgICBm Zmx1c2goc3RkZXJyKTsKKyAgICAgICAgICAgIH0KKyNlbHNlCisjaWZkZWYgTk9TUEwKKyAgICAg ICAgICAgIGlmIChlY2hvZiB8fCBjaHNyYykKKyNlbHNlCisgICAgICAgICAgICBpZiAoZWNob2Yg fHwgKGVjaG9zdGFycyAmJiBjaHNyYykpCisjZW5kaWYJLyogTk9TUEwgKi8KKwkgICAgICBjbWRl Y2hvKChjaGFyKSBjLCAwKTsJLyogRWNobyB3aGF0IHdhcyB0eXBlZC4gKi8KKyNlbmRpZiAvKiBC RUJPWCAqLworICAgICAgICB9IGVsc2UgewkJCS8qIFRoaXMgY2hhcmFjdGVyIHdhcyBxdW90ZWQu ICovCisJICAgIGludCBxZiA9IDE7CisJICAgIHF1b3RlID0gMDsJCQkvKiBVbnNldCB0aGUgcXVv dGUgZmxhZy4gKi8KKwkgICAgLyogZGVidWcoRjAwMCwiZ3R3b3JkIHF1b3RlIDAiLCIiLGMpOyAq LworCSAgICAvKiBRdW90ZSBjaGFyYWN0ZXIgYXQgdGhpcyBsZXZlbCBpcyBvbmx5IGZvciBTUCwg PywgYW5kIGNvbnRyb2xzICovCisgICAgICAgICAgICAvKiBJZiBhbnl0aGluZyBlbHNlIHdhcyBx dW90ZWQsIGxlYXZlIHF1b3RlIGluLCBhbmQgbGV0ICovCisJICAgIC8qIHRoZSBjb21tYW5kLXNw ZWNpZmljIHBhcnNpbmcgcm91dGluZXMgaGFuZGxlIGl0LCBlLmcuIFwwMDcgKi8KKwkgICAgaWYg KGMgPiAzMiAmJiBjICE9ICc/JyAmJiBjICE9IFJVQiAmJiBjaHNyYyAhPSAwKSB7CisJCS8qIGRl YnVnKEYwMDAsImd0d29yZCBxdW90ZSAxIiwiIixjKTsgKi8KKwkJKmJwKysgPSBDTURROwkJLyog RGVwb3NpdCBcIGlmIGl0IGNhbWUgZnJvbSB0dHkgKi8KKwkJcWYgPSAwOwkJCS8qIGFuZCBkb24n dCBlcmFzZSBpdCBmcm9tIHNjcmVlbiAqLworCQlsaW5lYmVnaW4gPSAwOwkJLyogTm90IGF0IGJl Z2lubmluZyBvZiBsaW5lICovCisjaWZkZWYgQlNfRElSU0VQCisvKgorICBUaGlzIGlzIGEgaGFj ayB0byBoYW5kbGUgImNkIFwiIG9yICJjZCBmb29cIiBvbiBPUy8yIGFuZCBzaW1pbGFyIHN5c3Rl bXMuCisgIElmIHdlIHdlcmUgY2FsbGVkIGZyb20gY21kaXIoKSBhbmQgdGhlIHByZXZpb3VzIGNo YXJhY3RlciB3YXMgdGhlIHF1b3RlCisgIGNoYXJhY3RlciwgaS5lLiBiYWNrc2xhc2gsIGFuZCB0 aGlzIGNoYXJhY3RlciBpcyB0aGUgY29tbWFuZCB0ZXJtaW5hdG9yLAorICB0aGVuIHdlIHN0dWZm IGFuIGV4dHJhIGJhY2tzbGFzaCBpbnRvIHRoZSBidWZmZXIgd2l0aG91dCBlY2hvaW5nLCB0aGVu CisgIHdlIHN0dWZmIHRoZSBjYXJyaWFnZSByZXR1cm4gYmFjayBpbiBhZ2FpbiwgYW5kIGdvIGJh Y2sgYW5kIHByb2Nlc3MgaXQsCisgIHRoaXMgdGltZSB3aXRoIHRoZSBxdW90ZSBmbGFnIG9mZi4K KyovCisJICAgIH0gZWxzZSBpZiAoZGlybmFtZmxnICYmIChjID09IENSIHx8IGMgPT0gTEYgfHwg YyA9PSBTUCkpIHsKKwkJLyogZGVidWcoRjAwMCwiZ3R3b3JkIHF1b3RlIDIiLCIiLGMpOyAqLwor CQkqYnArKyA9IENNRFE7CisJCWxpbmViZWdpbiA9IDA7CQkvKiBOb3QgYXQgYmVnaW5uaW5nIG9m IGxpbmUgKi8KKwkJKmJwID0gKGMgPT0gU1AgPyBTUCA6IENSKTsKKwkJZ290byBDTURJUlBBUlNF OworI2VuZGlmIC8qIEJTX0RJUlNFUCAqLworCSAgICB9CisjaWZkZWYgQkVCT1gKKwkgICAgaWYg KGVjaG9mKSB7CisgICAgICAgICAgICAgICAgY21kZWNobygoY2hhcikgYywgcWYpOwkvKiBFY2hv IHdoYXQgd2FzIHR5cGVkLiAqLworICAgICAgICAgICAgICAgIGZmbHVzaCAoc3Rkb3V0KTsKKyAg ICAgICAgICAgICAgICBmZmx1c2goc3RkZXJyKTsKKyAgICAgICAgICAgIH0KKyNlbHNlCisJICAg IGlmIChlY2hvZikgY21kZWNobygoY2hhcikgYywgcWYpOyAvKiBOb3cgZWNobyBxdW90ZWQgY2hh cmFjdGVyICovCisjZW5kaWYgLyogQkVCT1ggKi8KKwkgICAgLyogZGVidWcoRjExMSwiZ3R3b3Jk IHF1b3RlIixjbWRidWYsYyk7ICovCisJfQorI2lmZGVmIENPTU1FTlQKKyAgICAgICAgaWYgKGVj aG9mKSBjbWRlY2hvKChjaGFyKSBjLHF1b3RlKTsgLyogRWNobyB3aGF0IHdhcyB0eXBlZC4gKi8K KyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgICAgIGlmICghY29tbWVudCkgaW53b3JkID0gMTsJ LyogRmxhZyB3ZSdyZSBpbiBhIHdvcmQuICovCisJaWYgKHF1b3RlKSBjb250aW51ZTsJCS8qIERv bid0IGRlcG9zaXQgcXVvdGUgY2hhcmFjdGVyLiAqLworICAgICAgICBpZiAoYyAhPSBOTCkgewkJ CS8qIERlcG9zaXQgY29tbWFuZCBjaGFyYWN0ZXIuICovCisJICAgICpicCsrID0gKGNoYXIpIGM7 CQkvKiBhbmQgbWFrZSBzdXJlIHRoZXJlIGlzIGEgTlVMICovCisjaWZkZWYgQ09NTUVOVAorCSAg ICAqYnAgPSBOVUw7CQkJLyogYWZ0ZXIgaXQgKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisJfQor ICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVuZCBvZiBiaWcgd2hp bGUgKi8KKyAgICBibGVlcChCUF9XQVJOKTsKKyAgICBwcmludGYoIj9Db21tYW5kIHRvbyBsb25n LCBtYXhpbXVtIGxlbmd0aDogJWQuXG4iLENNREJMKTsKKyAgICBjbWZsZ3MgPSAtMjsKKyAgICBy ZXR1cm4oLTkpOworfQorCisvKiBVdGlsaXR5IGZ1bmN0aW9ucyAqLworCisvKiBBIEQgRCBCIFUg RiAgLS0gQWRkIHRoZSBzdHJpbmcgcG9pbnRlZCB0byBieSBjcCB0byB0aGUgY29tbWFuZCBidWZm ZXIgICovCisKK3N0YXRpYyBpbnQKK2FkZGJ1ZihjcCkgY2hhciAqY3A7IHsKKyAgICBpbnQgbGVu ID0gMDsKKyAgICB3aGlsZSAoKCpjcCAhPSBOVUwpICYmIChicCA8IGNtZGJ1ZitDTURCTCkpIHsK KyAgICAgICAgKmJwKysgPSAqY3ArKzsgICAgICAgICAgICAgICAgICAvKiBDb3B5IGFuZCAqLwor ICAgICAgICBsZW4rKzsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvdW50IHRoZSBjaGFy YWN0ZXJzLiAqLworICAgIH0KKyAgICAqYnArKyA9IFNQOyAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBQdXQgYSBzcGFjZSBhdCB0aGUgZW5kICovCisgICAgKmJwID0gTlVMOyAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogVGVybWluYXRlIHdpdGggYSBudWxsICovCisgICAgbnAgPSBicDsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVXBkYXRlIHRoZSBuZXh0LWZpZWxkIHBvaW50 ZXIgKi8KKyAgICBjbWJwdHIgPSBucDsKKyAgICByZXR1cm4obGVuKTsgICAgICAgICAgICAgICAg ICAgICAgICAvKiBSZXR1cm4gdGhlIGxlbmd0aCAqLworfQorCisvKiAgUyBFIFQgQSBUIE0gIC0t ICBEZXBvc2l0IGEgdG9rZW4gaW4gdGhlIGF0b20gYnVmZmVyLiAgKi8KKy8qCisgIEJyZWFrIG9u IHNwYWNlLCBuZXdsaW5lLCBjYXJyaWFnZSByZXR1cm4sIG9yIE5VTC4KKyAgQ2FsbCB3aXRoOgor ICAgIGNwID0gUG9pbnRlciB0byBzdHJpbmcgdG8gY29weSB0byBhdG9tIGJ1ZmZlci4KKyAgICBm Y29kZSA9IDAgbWVhbnMgYnJlYWsgb24gd2hpdGVzcGFjZSBvciBFT0wuCisgICAgZmNvZGUgPSAx IG1lYW5zIGRvbid0IGJyZWFrIG9uIHNwYWNlLgorICAgIGZjb2RlID0gMiBtZWFucyBicmVhayBv biBzcGFjZSwgJzonLCBvciAnPScuCisgICAgZmNvZGUgPSAzIG1lYW5zIGNvcHkgdGhlIHdob2xl IHN0cmluZy4KKyAgTnVsbC10ZXJtaW5hdGUgdGhlIHJlc3VsdC4KKyAgUmV0dXJuIGxlbmd0aCBv ZiB0b2tlbiwgYW5kIGFsc28gc2V0IGdsb2JhbCAiY2MiIHRvIHRoaXMgbGVuZ3RoLgorICBSZXR1 cm4gLTEgaWYgdG9rZW4gd2FzIHRvbyBsb25nLgorKi8KK3N0YXRpYyBpbnQKK3NldGF0bShjcCxm Y29kZSkgY2hhciAqY3A7IGludCBmY29kZTsgeworICAgIGNoYXIgKmFwLCAqeHAsICpkcXAgPSBO VUxMLCBsYnJhY2UsIHJicmFjZTsKKyAgICBpbnQgYnJhY2VsdmwgPSAwLCBkcSA9IDA7CisKKyAg ICByZWdpc3RlciBjaGFyICogczsKKyAgICByZWdpc3RlciBpbnQgbiA9IDA7CisKKyAgICBpZiAo Y21mbGRmbGdzICYgMSkgewkJLyogSGFuZGxlIGdyb3VwaW5nICovCisJbGJyYWNlID0gJygnOwor CXJicmFjZSA9ICcpJzsKKyAgICB9IGVsc2UgeworCWxicmFjZSA9ICd7JzsKKwlyYnJhY2UgPSAn fSc7CisgICAgfQorICAgIGNjID0gMDsJCQkJLyogQ2hhcmFjdGVyIGNvdW50ZXIgKi8KKyAgICBh cCA9IGF0bWJ1ZjsJCQkvKiBBZGRyZXNzIG9mIGF0b20gYnVmZmVyICovCisKKyAgICBzID0gY3A7 CisKKyAgICB3aGlsZSAoKnMrKykgbisrOwkJCS8qIFNhdmUgYSBjYWxsIHRvIHN0cmxlbiAqLwor CisgICAgaWYgKG4gPiBBVE1CTCkgeworCXByaW50ZigiP0NvbW1hbmQgYnVmZmVyIG92ZXJmbG93 XG4iKTsKKwlyZXR1cm4oLTEpOworICAgIH0KKyAgICAvKiBkZWJ1ZyhGMTExLCJzZXRhdG0iLGNw LG4pOyAqLworICAgIGlmIChjcCA9PSBhcCkgewkJCS8qIEluIGNhc2Ugc291cmNlIGlzIGF0b20g YnVmZmVyICovCisJeHAgPSBhdHlidWY7CQkJLyogbWFrZSBhIGNvcHkgKi8KKyNpZmRlZiBDT01N RU5UCisJc3RybmNweSh4cCxhcCxBVE1CTCk7CQkvKiBzbyB3ZSBjYW4gY29weSBpdCBiYWNrLCBl ZGl0ZWQuICovCisJY3AgPSB4cDsKKyNlbHNlCisJcyA9IGFwOworCXdoaWxlICgoKnhwKysgPSAq cysrKSkgOwkvKiBXZSBhbHJlYWR5IGtub3cgaXQncyBiaWcgZW5vdWdoICovCisJY3AgPSB4cCA9 IGF0eWJ1ZjsKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgfQorICAgICphcCA9IE5VTDsJCQkJ LyogWmVybyB0aGUgYXRvbSBidWZmZXIgKi8KKyAgICBpZiAoZmNvZGUgPT0gMSkgewkJCS8qIFRy aW0gdHJhaWxpbmcgYmxhbmtzICovCisJd2hpbGUgKC0tbiA+PSAwICYmIGNwW25dID09IFNQKQor CSAgOworCWNwW24rMV0gPSBOVUw7CisgICAgfQorICAgIHdoaWxlICgqY3AgPT0gU1ApIHsJCQkv KiBUcmltIGxlYWRpbmcgc3BhY2VzICovCisJY3ArKzsKKwluLS07CisgICAgfQorICAgIGlmICgq Y3AgPT0gJyInKSB7CQkJLyogU3RhcnRzIHdpdGggZG91YmxlcXVvdGU/ICovCisJZHEgPSAxOwor CWRxcCA9IGNwOworICAgIH0KKyAgICB3aGlsZSAoKmNwKSB7CisgICAgICAgIGlmICgqY3AgPT0g bGJyYWNlKQorCSAgYnJhY2VsdmwrKzsKKyAgICAgICAgZWxzZSBpZiAoKmNwID09IHJicmFjZSkK KwkgIGJyYWNlbHZsLS07CisJaWYgKGJyYWNlbHZsIDwgMCkKKwkgIGJyYWNlbHZsID0gMDsKKwlp ZiAoYnJhY2VsdmwgPT0gMCkgeworCSAgICBpZiAoZHEpIHsKKwkJaWYgKCpjcCA9PSBTUCB8fCAq Y3AgPT0gSFQpIHsKKwkJICAgIGlmIChjcCA+IGRxcCsxKSB7CisJCQlpZiAoKihjcC0xKSA9PSAn IicgJiYgKihjcC0yKSAhPSBDTURRKSB7CisJCQkgICAgYnJlYWs7CisJCQl9CisJCSAgICB9CisJ CX0KKwkgICAgfSBlbHNlIGlmICgoKmNwID09IFNQIHx8ICpjcCA9PSBIVCkgJiYgZmNvZGUgIT0g MSAmJiBmY29kZSAhPSAzKQorCSAgICAgIGJyZWFrOworCSAgICBpZiAoKGZjb2RlID09IDIpICYm ICgqY3AgPT0gJz0nIHx8ICpjcCA9PSAnOicpKSBicmVhazsKKwkgICAgaWYgKChmY29kZSAhPSAz KSAmJiAoKmNwID09IExGIHx8ICpjcCA9PSBDUikpIGJyZWFrOworCX0KKyAgICAgICAgKmFwKysg PSAqY3ArKzsKKyAgICAgICAgY2MrKzsKKyAgICB9CisgICAgKmFwID0gTlVMOwkJCQkvKiBUZXJt aW5hdGUgdGhlIHN0cmluZy4gKi8KKyAgICAvKiBkZWJ1ZyhGMTExLCJzZXRhdG0gcmVzdWx0Iixh dG1idWYsY2MpOyAqLworICAgIHJldHVybihjYyk7ICAgICAgICAgICAgICAgICAgICAgICAgIC8q IFJldHVybiBsZW5ndGguICovCit9CisKKy8qCisgIFRoZXNlIGZ1bmN0aW9ucyBhdHRlbXB0IHRv IGhpZGUgc3lzdGVtIGRlcGVuZGVuY2llcyBmcm9tIHRoZSBtYWlubGluZQorICBjb2RlIGluIGd0 d29yZCgpLiAgRHVtbXkgYXJnIGZvciBjbWRnZXRjKCkgbmVlZGVkIGZvciBjb21wYXRpYmlsaXR5 IHdpdGgKKyAgY29uaW5jKCksIHR0aW5jKCksIGV0Yywgc2luY2UgYSBwb2ludGVyIHRvIHRoaXMg cm91dGluZSBjYW4gYmUgcGFzc2VkIGluCisgIHBsYWNlIG9mIHRob3NlIHRvIHRuX2Rvb3AoKS4K KworICBObyBsb25nZXIgc3RhdGljLiAgVXNlZCBieSBhc2ttb3JlKCkuICBGcmkgQXVnIDIwIDE1 OjAzOjM0IDE5OTkuCisqLworI2RlZmluZSBDTURfQ09OSU5DCQkJLyogSG93IHdlIGdldCBrZXli b2FyZCBjaGFycyAqLworCitpbnQKK2NtZGdldGModGltZWxpbWl0KSBpbnQgdGltZWxpbWl0OyB7 CS8qIEdldCBhIGNoYXJhY3RlciBmcm9tIHRoZSB0dHkuICovCisgICAgaW50IGM7CisjaWZkZWYg SUtTRAorICAgIGV4dGVybiBpbnQgaW5zZXJ2ZXI7CisjZW5kaWYgLyogSUtTRCAqLworI2lmZGVm IENLX0xPR0lOCisgICAgZXh0ZXJuIGludCB4X2xvZ2dlZDsKKyNlbmRpZiAvKiBDS19MT0dJTiAq LworI2lmZGVmIFROQ09ERQorICAgIHN0YXRpYyBpbnQgZ290X2NyID0gMDsKKyAgICBleHRlcm4g aW50IGNreGVjaDsKKyAgICBpbnQgdHggPSAwLCBpc190biA9IDA7CisjZW5kaWYgLyogVE5DT0RF ICovCisKKyAgICBpZiAocHVzaGMKKyNpZm5kZWYgTk9TUEwKKwkmJiAhYXNrZmxhZworI2VuZGlm IC8qIE5PU1BMICovCisJKSB7CisgICAgICAgIGRlYnVnKEYxMTEsImNtZGdldGMoKSIsInB1c2hj IixwdXNoYyk7CisJYyA9IHB1c2hjOworCXB1c2hjID0gTlVMOworCWlmICh4Y21mZGIgJiYgYyA9 PSAnPycpCQkvKiBEb24ndCBlY2hvID8gdHdpY2UgaWYgY2hhaW5pbmcuICovCisJICBjbWRjaGFy ZGVsKCk7CisJcmV0dXJuKGMpOworICAgIH0KKyNpZmRlZiBkYXRhZ2VuZXJhbAorICAgIHsKKwlj aGFyIGNoOworCWMgPSBkZ25jaW5iKDAsJmNoLDEpOwkJLyogLTEgaXMgRU9GLCAtMiBUTywKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAtYyBpcyBBT1MvVlMgZXJy b3IgKi8KKwlpZiAoYyA9PSAtMikgewkJCS8qIHRpbWVvdXQgd2FzIGVuYWJsZWQ/ICovCisJICAg IHJlc3RvKGNoYW5uZWwoMCkpOwkJLyogcmVzZXQgdGltZW91dHMgKi8KKwkgICAgYyA9IGRnbmNp bmIoMCwmY2gsMSk7CS8qIHJldHJ5IHRoaXMgbm93ISAqLworCX0KKwlpZiAoYyA8IDApIHJldHVy bigtNCk7CQkvKiBFT0Ygb3Igc29tZSBlcnJvciAqLworCWVsc2UgYyA9IChpbnQpIGNoICYgMDE3 NzsJLyogR2V0IGNoYXIgd2l0aG91dCBwYXJpdHkgKi8KKy8qCWVjaG9mID0gMTsgKi8KKyAgICB9 CisjZWxzZSAvKiBOb3QgZGF0YWdlbmVyYWwgKi8KKyNpZm5kZWYgTUlOSVgyCisgICAgaWYgKAor I2lmZGVmIElLU0QKKwkoIWxvY2FsICYmIGluc2VydmVyKSB8fAorI2VuZGlmIC8qIElLU0QgKi8K Kwl0aW1lbGltaXQgPiAwKSB7CisjaWZkZWYgVE5DT0RFCisgICAgICAgICAgR0VUTkVYVENIOgor ICAgICAgICAgICAgaXNfdG4gPSAhcHVzaGMgJiYgIWxvY2FsICYmIHNzdGVsbmV0OworI2VuZGlm IC8qIFROQ09ERSAqLworI2lmZGVmIENPTU1FTlQKKwkgICAgYyA9IGNvbmluYyh0aW1lbGltaXQg PiAwID8gMSA6IDApOworI2Vsc2UgLyogQ09NTUVOVCAqLworCSAgICAvKiBUaGlzIGlzIGxpa2Vs eSB0byBicmVhayB0aGUgYXNrdGltZW91dC4uLiAqLworCSAgICBjID0gY29uaW5jKHRpbWVsaW1p dCk7CisjZW5kaWYgLyogQ09NTUVOVCAqLworCSAgICAvKiBkZWJ1ZyhGMTAxLCJjbWRnZXRjIGNv bmluYyIsIiIsYyk7ICovCisjaWZkZWYgVE5DT0RFCisgICAgICAgICAgICBpZiAoYyA+PSAwICYm IGlzX3RuKSB7CS8qIFNlcnZlci1zaWRlIFRlbG5ldCAqLworICAgICAgICAgICAgICAgIHN3aXRj aCAoYykgeworCQkgIGNhc2UgSUFDOgorICAgICAgICAgICAgICAgICAgICAvKiBkZWJ1ZyhGMTEx LCJndHdvcmQgSUFDIiwiYyIsYyk7ICovCisgICAgICAgICAgICAgICAgICAgIGdvdF9jciA9IDA7 CisgICAgICAgICAgICAgICAgICAgIGlmICgodHggPSB0bl9kb29wKChDSEFSKShjICYgMHhmZiks Y2t4ZWNoLGNvbmluYykpID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gR0VU TkVYVENIOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR4IDw9IC0xKSB7IC8qIEkv TyBlcnJvciAqLworICAgICAgICAgICAgICAgICAgICAgICAgLyogSWYgdGhlcmUgd2FzIGEgZmF0 YWwgSS9PIGVycm9yIHRoZW4gdHRjbG9zKCkgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAg IC8qIGhhcyBiZWVuIGNhbGxlZCBhbmQgdGhlIG5leHQgR0VUTkVYVENIIGF0dGVtcHQgICovCisg ICAgICAgICAgICAgICAgICAgICAgICAvKiB3aWxsIGJlICFpc190biBzaW5jZSB0dGNsb3MoKSBz ZXRzIHNzdGVsbmV0ID0gMCAqLworICAgICAgICAgICAgICAgICAgICAgICAgZG9leGl0KEJBRF9F WElULC0xKTsgLyogKG9yIHJldHVybigtNCk/ICovCisgICAgICAgICAgICAgICAgICAgIH0gZWxz ZSBpZiAodHggPT0gMSkgeyAvKiBFQ0hPIGNoYW5nZSAqLworICAgICAgICAgICAgICAgICAgICAg ICAgY2t4ZWNoID0gZHB4ID0gMTsgLyogR2V0IG5leHQgY2hhciAqLworICAgICAgICAgICAgICAg ICAgICAgICAgZ290byBHRVRORVhUQ0g7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo dHggPT0gMikgeyAvKiBFQ0hPIGNoYW5nZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgY2t4 ZWNoID0gZHB4ID0gMDsgLyogR2V0IG5leHQgY2hhciAqLworICAgICAgICAgICAgICAgICAgICAg ICAgZ290byBHRVRORVhUQ0g7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHggPT0g MykgeyAvKiBRdW90ZWQgSUFDICovCisgICAgICAgICAgICAgICAgICAgICAgICBjID0gMjU1Owkv KiBwcm9jZWVlZCB3aXRoIGl0LiAqLworICAgICAgICAgICAgICAgICAgICB9CisjaWZkZWYgSUtT X09QVElPTgorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0eCA9PSA0KSB7CS8qIElLUyBT dGF0ZSBDaGFuZ2UgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gR0VUTkVYVENIOwor ICAgICAgICAgICAgICAgICAgICB9CisjZW5kaWYgLyogSUtTX09QVElPTiAqLworICAgICAgICAg ICAgICAgICAgICBlbHNlIGlmICh0eCA9PSA2KSB7CS8qIFJlbW90ZSBMb2dvdXQgKi8KKwkJCWRv ZXhpdChHT09EX0VYSVQsMCk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisJCQlnb3Rv IEdFVE5FWFRDSDsJLyogVW5rbm93biwgZ2V0IG5leHQgY2hhciAqLworCQkgICAgfQorICAgICAg ICAgICAgICAgICAgICBicmVhazsKKyNpZmRlZiBDT01NRU5UCisgICAgICAgICAgICAgICAgICBj YXNlIENSOgorICAgICAgICAgICAgICAgICAgICBpZiAoIVRFTE9QVF9VKFRFTE9QVF9CSU5BUlkp KSB7CisJCQlpZiAoZ290X2NyKSB7CisJCQkgICAgLyogVGhpcyBtZWFucyB0aGUgc2VuZGVyIGlz IHZpb2xhdGluZyBUZWxuZXQgICAqLworCQkJICAgIC8qIHByb3RvY29sIGJlY2F1c2Ugd2UgcmVj ZWl2ZWQgdHdvIENScyBpbiBhICAgKi8KKwkJCSAgICAvKiByb3cgd2l0aG91dCBnZXR0aW5nIGVp dGhlciBMRiBvciBOVUwuICAgICAgICovCisJCQkgICAgLyogVGhpcyB3aWxsIG5vdCBzb2x2ZSB0 aGUgcHJvYmxlbSBidXQgaXQgICAgICAqLworCQkJICAgIC8qIHdpbGwgYXQgbGVhc3QgYWxsb3cg dHdvIENScyB0byBkbyBzb21ldGhpbmcgKi8KKwkJCSAgICAvKiB3aGVyZWFzIGJlZm9yZSB0aGUg dXNlciB3b3VsZCBoYXZlIHRvIGd1ZXNzICovCisJCQkgICAgLyogdG8gc2VuZCBMRiBvciBOVUwg YWZ0ZXIgdGhlIENSLiAgICAgICAgICAgICAqLworCQkJICAgIGRlYnVnKEYxMDAsImd0d29yZCBD UiB0ZWxuZXQgZXJyb3IiLCIiLDApOworCQkJICAgIGMgPSBMRjsKKwkJCX0gZWxzZSB7CisJCQkg ICAgZGVidWcoRjEwMCwiZ3R3b3JkIHNraXBwaW5nIENSIiwiIiwwKTsKKwkJCSAgICBnb3RfY3Ig PSAxOwkvKiBSZW1lbWJlciBhIENSIHdhcyByZWNlaXZlZCAqLworCQkJICAgIGdvdG8gR0VUTkVY VENIOworCQkJfQorICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworCQkJZGVidWcoRjEwMCwi Z3R3b3JkIENSIHRvIExGIiwiIiwwKTsKKwkJCWMgPSBMRjsKKyAgICAgICAgICAgICAgICAgICAg fQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgTEY6 CisgICAgICAgICAgICAgICAgICAgIGlmICghVEVMT1BUX1UoVEVMT1BUX0JJTkFSWSkpIHsKKwkJ CWdvdF9jciA9IDA7CisJCQlkZWJ1ZyhGMTAwLCJndHdvcmQgTEYiLCIiLDApOworICAgICAgICAg ICAgICAgICAgICB9IGVsc2UgeworCQkJaWYgKGdvdF9jcikgeworCQkJICAgIGdvdF9jciA9IDA7 CisJCQkgICAgZGVidWcoRjEwMCwiZ3R3b3JkIHNraXBwaW5nIExGIiwiIiwwKTsKKwkJCSAgICBn b3RvIEdFVE5FWFRDSDsKKwkJCX0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgTlVMOgorICAgICAgICAgICAg ICAgICAgICBpZiAoIVRFTE9QVF9VKFRFTE9QVF9CSU5BUlkpICYmIGdvdF9jcikgeworCQkJYyA9 IExGOworCQkJZGVidWcoRjEwMCwiZ3R3b3JkIE5VTCB0byBMRiIsIiIsMCk7CisgICAgICAgICAg ICAgICAgICAgIH0gZWxzZSB7CisJCQlkZWJ1ZyhGMTAwLCJndHdvcmQgTlVMIiwiIiwwKTsKKyAg ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBnb3RfY3IgPSAwOworICAg ICAgICAgICAgICAgICAgICBicmVhazsKKyNlbHNlIC8qIENPTU1FTlQgKi8KKyAgICAgICAgICAg ICAgICAgIGNhc2UgQ1I6CisgICAgICAgICAgICAgICAgICAgIGlmICggIVRFTE9QVF9VKFRFTE9Q VF9CSU5BUlkpICYmIGdvdF9jciApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRoaXMg bWVhbnMgdGhlIHNlbmRlciBpcyB2aW9sYXRpbmcgVGVsbmV0ICAgKi8KKyAgICAgICAgICAgICAg ICAgICAgICAgIC8qIHByb3RvY29sIGJlY2F1c2Ugd2UgcmVjZWl2ZWQgdHdvIENScyBpbiBhICAg Ki8KKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJvdyB3aXRob3V0IGdldHRpbmcgZWl0aGVy IExGIG9yIE5VTC4gICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRoaXMgd2ls bCBub3Qgc29sdmUgdGhlIHByb2JsZW0gYnV0IGl0ICAgICAgKi8KKyAgICAgICAgICAgICAgICAg ICAgICAgIC8qIHdpbGwgYXQgbGVhc3QgYWxsb3cgdHdvIENScyB0byBkbyBzb21ldGhpbmcgKi8K KyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHdoZXJlYXMgYmVmb3JlIHRoZSB1c2VyIHdvdWxk IGhhdmUgdG8gZ3Vlc3MgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRvIHNlbmQgTEYg b3IgTlVMIGFmdGVyIHRoZSBDUi4gICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAg ICAgIGRlYnVnKEYxMDAsImd0d29yZCBDUiB0ZWxuZXQgZXJyb3IiLCIiLDApOworICAgICAgICAg ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgZ290X2NyID0gMTsJ LyogUmVtZW1iZXIgYSBDUiB3YXMgcmVjZWl2ZWQgKi8KKyAgICAgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICAgICAgICAvKiBkZWJ1ZyhGMTAwLCJndHdvcmQgQ1IgdG8gTEYiLCIiLDAp OyAqLworICAgICAgICAgICAgICAgICAgICBjID0gTEY7CisJCSAgICBicmVhazsKKyAgICAgICAg ICAgICAgICAgIGNhc2UgTEY6CisgICAgICAgICAgICAgICAgICAgIGlmIChnb3RfY3IpIHsKKyAg ICAgICAgICAgICAgICAgICAgICAgIGdvdF9jciA9IDA7CisgICAgICAgICAgICAgICAgICAgICAg ICAvKiBkZWJ1ZyhGMTAwLCJndHdvcmQgc2tpcHBpbmcgTEYiLCIiLDApOyAqLworICAgICAgICAg ICAgICAgICAgICAgICAgZ290byBHRVRORVhUQ0g7CisgICAgICAgICAgICAgICAgICAgIH0KKwkJ ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSBOVUw6CisgICAgICAgICAgICAgICAg ICAgIGlmIChnb3RfY3IpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdF9jciA9IDA7Cisg ICAgICAgICAgICAgICAgICAgICAgICAvKiBkZWJ1ZyhGMTAwLCJndHdvcmQgc2tpcHBpbmcgTlVM IiwiIiwwKTsgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gR0VUTkVYVENIOworI2lm ZGVmIENPTU1FTlQKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg ICAgICAgICBkZWJ1ZyhGMTAwLCJndHdvcmQgTlVMIiwiIiwwKTsKKyNlbmRpZiAvKiBDT01NRU5U ICovCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisj ZW5kaWYgLyogQ09NTUVOVCAqLworI2lmZGVmIElLU0QKKwkJICBjYXNlIEVUWDoJCS8qIEN0cmwt Qy4uLiAqLworICAgICAgICAgICAgICAgICAgY2FzZSBFT1Q6CQkvKiBFT1QgPSBFT0YgKi8KKyAg ICAgICAgICAgICAgICAgICAgICBpZiAoaW5zZXJ2ZXIKKyNpZmRlZiBDS19MT0dJTgorCQkJICAm JiAheF9sb2dnZWQKKyNlbmRpZiAvKiBDS19MT0dJTiAqLworCQkJICApCisgICAgICAgICAgICAg ICAgICAgICAgICAgIHJldHVybigtNCk7CisJCSAgICBicmVhazsKKyNlbmRpZiAvKiBJS1NEICov CisJCSAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICBnb3RfY3IgPSAwOworICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBUTkNPREUgKi8KKyAgICB9IGVs c2UgeworI2lmZGVmIE9TMgorCWMgPSBjb25pbmMoMCk7CisjZWxzZSAvKiBPUzIgKi8KKyNpZmRl ZiBDTURfQ09OSU5DCisjdW5kZWYgQ01EX0NPTklOQworI2VuZGlmIC8qIENNRF9DT05JTkMgKi8K KwljID0gZ2V0Y2hhcigpOworI2VuZGlmIC8qIE9TMiAqLworICAgIH0KKyNlbHNlICAvKiBNSU5J WDIgKi8KKyN1bmRlZiBnZXRjCisjaWZkZWYgQ01EX0NPTklOQworI3VuZGVmIENNRF9DT05JTkMK KyNlbmRpZiAvKiBDTURfQ09OSU5DICovCisgICAgYyA9IGdldGMoc3RkaW4pOworICAgIC8qIGRl YnVnKEYxMDEsImNtZGdldGMgZ2V0YyIsIiIsYyk7ICovCisjZW5kaWYgLyogTUlOSVgyICovCisj aWZkZWYgUlRVCisgICAgaWYgKHJ0dV9idWcpIHsKKyNpZmRlZiBDTURfQ09OSU5DCisjdW5kZWYg Q01EX0NPTklOQworI2VuZGlmIC8qIENNRF9DT05JTkMgKi8KKwljID0gZ2V0Y2hhcigpOwkJCS8q IFJUVSBkb2Vzbid0IGRpc2NhcmQgdGhlIF5aICovCisJcnR1X2J1ZyA9IDA7CisgICAgfQorI2Vu ZGlmIC8qIFJUVSAqLworI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCisgICAgcmV0dXJuKGMpOwkJ CQkvKiBSZXR1cm4gd2hhdCB3ZSBnb3QgKi8KK30KKworLyogI2lmZGVmIFVTRV9BUlJPV0tFWVMg Ki8KKworLyogTWVjaGFuaXNtIHRvIHVzZSBmb3IgcGVla2luZyBpbnRvIHN0ZGluIGJ1ZmZlciAq LworCisjaWZuZGVmIFVTRV9GSUxFX0NOVAkJCS8qIHN0ZGluLT5fX2NudCAqLworI2lmbmRlZiBV U0VfRklMRV9fQ05UCQkJLyogTm90ZTogdHdvIHVuZGVyc2NvcmVzICovCisjaWZkZWYgSFBVWAkJ CQkvKiBIUFVYIDctMTEgKi8KKyNpZm5kZWYgSFBVWDUKKyNpZm5kZWYgSFBVWDYKKyNkZWZpbmUg VVNFX0ZJTEVfX0NOVAorI2VuZGlmIC8qIEhQVVg2ICovCisjZW5kaWYgLyogSFBVWDUgKi8KKyNl bHNlCisjaWZkZWYgQU5ZU0NPCQkJCS8qIFNDTyBVTklYLCBPU1I1LCBVbml4d2FyZSwgZXRjICov CisjaWZuZGVmIE9MRF9VTklYV0FSRQkJCS8qIEJ1dCBub3QgVW5peHdhcmUgMS54IG9yIDIuMCAq LworI2lmbmRlZiBVTklYV0FSRTIJCQkvKiBvciAyLjEuMCAqLworI2RlZmluZSBVU0VfRklMRV9f Q05UCisjZW5kaWYgLyogVU5JWFdBUkUyICovCisjZW5kaWYgLyogT0xEX1VOSVhXQVJFICovCisj ZW5kaWYgLyogQU5ZU0NPICovCisjZW5kaWYgLyogSFBVWCAqLworI2VuZGlmIC8qIFVTRV9GSUxF X19DTlQgKi8KKyNlbmRpZiAvKiBVU0VfRklMRV9DTlQgKi8KKworI2lmbmRlZiBVU0VfRklMRV9S CQkJLyogc3RkaW4tPl9yICovCisjaWZuZGVmIFVTRV9GSUxFX0NOVAorI2lmbmRlZiBVU0VfRklM RV9fQ05UCisjaWZkZWYgQlNENDQJCQkJLyoge0ZyZWUsT3BlbixOZXR9QlNELCBCU0RJICovCisj ZGVmaW5lIFVTRV9GSUxFX1IKKyNlbmRpZiAvKiBCU0Q0NCAqLworI2VuZGlmIC8qIFVTRV9GSUxF X19DTlQgKi8KKyNlbmRpZiAvKiBVU0VfRklMRV9DTlQgKi8KKyNlbmRpZiAvKiBVU0VfRklMRV9S ICovCisKKyNpZm5kZWYgVVNFX0ZJTEVfUgkJCS8qIHN0ZGluLT5fY250ICovCisjaWZuZGVmIFVT RV9GSUxFX0NOVAorI2lmbmRlZiBVU0VfRklMRV9fQ05UCisjZGVmaW5lIFVTRV9GSUxFX0NOVAkJ CS8qIEV2ZXJ5Ym9keSBlbHNlIChidXQgTGludXgpICovCisjZW5kaWYgLyogVVNFX0ZJTEVfX0NO VCAqLworI2VuZGlmIC8qIFVTRV9GSUxFX0NOVCAqLworI2VuZGlmIC8qIFVTRV9GSUxFX1IgKi8K KworCisvKgorICBjIG0gZCBjIG8gbiBjIGggaworCisgIEhvdyBtYW55IGNoYXJhY3RlcnMgYXJl IHdhaXRpbmcgdG8gYmUgcmVhZCBhdCB0aGUgY29uc29sZT8gIE5vcm1hbGx5CisgIGNvbmNoaygp IHdvdWxkIHRlbGwgdXMsIGJ1dCBpbiBVbml4IGFuZCBWTVMgY21kZ2V0YygpIHVzZXMgc3RkaW8g Z2V0Y2hhcigpLAorICB0aHVzIGJ5cGFzc2luZyBjb25pbmMoKS9jb25jaGsoKSwgc28gd2UgaGF2 ZSB0byBwZWVrIGludG8gdGhlIHN0ZGluIGJ1ZmZlciwKKyAgd2hpY2ggaXMgdG90YWxseSBub25w b3J0YWJsZS4gIFdoaWNoIGlzIHdoeSB0aGlzIHJvdXRpbmUgaXMsIGF0IGxlYXN0IGZvcgorICBu b3csIHVzZWQgb25seSBmb3IgY2hlY2tpbmcgZm9yIGFycm93LWtleSBzZXF1ZW5jZXMgZnJvbSB0 aGUga2V5Ym9hcmQgYWZ0ZXIKKyAgYW4gRVNDIHdhcyByZWFkLiAgV291bGRuJ3QgaXQgYmUgbmlj ZSBpZiB0aGUgc3RkaW8gcGFja2FnZSBoYWQgYSBmdW5jdGlvbgorICB0aGF0IHJldHVybmVkIHRo ZSBudW1iZXIgb2YgYnl0ZXMgd2FpdGluZyB0byBiZSByZWFkIGZyb20gaXRzIGJ1ZmZlcj8KKyAg UmV0dXJucyAwIG9yIGdyZWF0ZXIgYWx3YXlzLgorKi8KK2ludAorY21kY29uY2hrKCkgeworICAg IGludCB4ID0gMCwgeTsKKyAgICB5ID0gcHVzaGMgPyAxIDogMDsJCQkvKiBIYXZlIGNvbW1hbmQg Y2hhcmFjdGVyIHB1c2hlZD8gKi8KKyNpZmRlZiBPUzIKKyAgICB4ID0gY29uY2hrKCk7CQkJLyog Q2hlY2sgZGV2aWNlLWRyaXZlciBidWZmZXIgKi8KKyAgICBpZiAoeCA8IDApIHggPSAwOworI2Vs c2UgLyogT1MyICovCisjaWZkZWYgQ01EX0NPTklOQwkJCS8qIFNlZSBjbWRnZXRjKCkgKi8KKyAg ICB4ID0gY29uY2hrKCk7CQkJLyogQ2hlY2sgZGV2aWNlLWRyaXZlciBidWZmZXIgKi8KKyAgICBp ZiAoeCA8IDApIHggPSAwOworI2Vsc2UgIC8qIENNRF9DT05JTkMgKi8KKworLyogSGVyZSB3ZSBt dXN0IGxvb2sgaW5zaWRlIHRoZSBzdGRpbiBidWZmZXIgLSBoaWdobHkgcGxhdGZvcm0gZGVwZW5k ZW50ICovCisKKyNpZmRlZiBfSU9fZmlsZV9mbGFncwkJCS8qIExpbnV4ICovCisgICAgeCA9IChp bnQpICgoc3RkaW4tPl9JT19yZWFkX2VuZCkgLSAoc3RkaW4tPl9JT19yZWFkX3B0cikpOworICAg IGRlYnVnKEYxMDEsImNtZGNvbmNoayBfSU9fZmlsZV9mbGFncyIsIiIseCk7CisjZWxzZSAgLyog X0lPX2ZpbGVfZmxhZ3MgKi8KKyNpZmRlZiBVU0VfRklMRV9DTlQJCQkvKiBUcmFkaXRpb25hbCAq LworI2lmZGVmIFZNUworICAgIGRlYnVnKEYxMDEsImNtZGNvbmNoayAoKnN0ZGluKS0+X2NudCIs IiIsKCpzdGRpbiktPl9jbnQpOworICAgIHggPSAoKnN0ZGluKS0+X2NudDsKKyNlbHNlCisjaWZk ZWYgTk9BUlJPV0tFWVMKKyAgICBkZWJ1ZyhGMTAxLCJjbWRjb25jaGsgTk9BUlJPV0tFWVMgeCIs IiIsMCk7CisjZWxzZQorICAgIGRlYnVnKEYxMDEsImNtZGNvbmNoayBzdGRpbi0+X2NudCIsIiIs c3RkaW4tPl9jbnQpOworICAgIHggPSBzdGRpbi0+X2NudDsKKyNlbmRpZiAvKiBOT0FSUk9XS0VZ UyAqLworI2VuZGlmIC8qIFZNUyAqLworICAgIGlmICh4ID09IDApIHggPSBjb25jaGsoKTsKKyAg ICBpZiAoeCA8IDApIHggPSAwOworI2Vsc2UgIC8qIFVTRV9GSUxFX0NOVCAqLworI2lmZGVmIFVT RV9GSUxFX19DTlQJCQkvKiBIUC1VWCAqLworICAgIGRlYnVnKEYxMDEsImNtZGNvbmNoayBzdGRp bi0+X19jbnQiLCIiLHN0ZGluLT5fX2NudCk7CisgICAgeCA9IHN0ZGluLT5fX2NudDsKKyAgICBp ZiAoeCA9PSAwKSB4ID0gY29uY2hrKCk7CisgICAgaWYgKHggPCAwKSB4ID0gMDsKKyNlbHNlICAv KiBVU0VfRklMRV9DTlQgKi8KKyNpZmRlZiBVU0VfRklMRV9SCQkJLyogRnJlZUJTRCwgT3BlbkJT RCwgZXRjICovCisgICAgZGVidWcoRjEwMSwiY21kY29uY2hrIHN0ZGluLT5fciIsIiIsc3RkaW4t Pl9yKTsKKyAgICB4ID0gc3RkaW4tPl9yOworICAgIGlmICh4ID09IDApIHggPSBjb25jaGsoKTsK KyAgICBpZiAoeCA8IDApIHggPSAwOworCisgICAgLyogRmlsbCBpbiBhbnkgb3RoZXJzIGhlcmUu Li4gKi8KKworI2VuZGlmIC8qIFVTRV9GSUxFX1IgKi8KKyNlbmRpZiAvKiBVU0VfRklMRV9fQ05U ICovCisjZW5kaWYgLyogVVNFX0ZJTEVfQ05UICovCisjZW5kaWYgLyogX0lPX2ZpbGVfZmxhZ3Mg Ki8KKyNlbmRpZiAvKiBDTURfQ09OSU5DICovCisjZW5kaWYgLyogT1MyICovCisgICAgcmV0dXJu KHggKyB5KTsKK30KKy8qICNlbmRpZiAqLyAvKiBVU0VfQVJST1dLRVlTICovCisKKworc3RhdGlj IFZPSUQKK2NtZGNscnNjbigpIHsJCQkJLyogQ2xlYXIgdGhlIHNjcmVlbiAqLworICAgIGNrX2Ns cygpOworfQorCitzdGF0aWMgVk9JRAkJCQkvKiBXaGF0IHRvIGVjaG8gYXQgZW5kIG9mIGNvbW1h bmQgKi8KKyNpZmRlZiBDS19BTlNJQworY21kbmV3bChjaGFyIGMpCisjZWxzZQorY21kbmV3bChj KSBjaGFyIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIGNtZG5ld2wgKi8geworI2lmZGVm IE9TMgorI2lmZGVmIElLU0QKKyAgICBleHRlcm4gaW50IGluc2VydmVyOworICAgIGlmIChpbnNl cnZlciAmJiBjID09IExGKQorICAgICAgcHV0Y2hhcihDUik7CisjZW5kaWYgLyogSUtTRCAqLwor I2VuZGlmIC8qIE9TMiAqLworCisgICAgcHV0Y2hhcihjKTsJCQkJLyogYyBpcyB0aGUgdGVybWlu YXRpbmcgY2hhcmFjdGVyICovCisKKyNpZmRlZiBXSU5UQ1AJCQkJLyogd2hhdCBpcyB0aGlzIGRv aW5nIGhlcmU/ICovCisgICAgaWYgKGMgPT0gQ1IpIHB1dGNoYXIoTkwpOworI2VuZGlmIC8qIFdJ TlRDUCAqLworCisvKgorICBBLkEuIENoZXJub3YsIHdobyBzZW50IGluIGNoYW5nZXMgZm9yIEZy ZWVCU0QsIHNhaWQgd2UgYWxzbyBuZWVkZWQgdGhpcworICBmb3IgU1ZPUlBPU0lYIGJlY2F1c2Ug InNldHVwIHRlcm1pbmFsIGJ5IHRlcm1pb3MgYW5kIGN1cnNlcyBkb2VzCisgIG5vdCBjb252ZXJ0 IFxyIHRvIFxuLCBzbyBhZGRpdGlvbmFsIFxuIG5lZWRlZCBpbiBuZXdsaW5lIGZ1bmN0aW9uLiIg IEJ1dAorICBpdCBpcyBhbHNvIHZlcnkgbGlrZWx5IHRvIHJlc3VsdCBpbiB1bndhbnRlZCBibGFu ayBsaW5lcy4KKyovCisjaWZkZWYgQlNENDQKKyAgICBpZiAoYyA9PSBDUikgcHV0Y2hhcihOTCk7 CisjZW5kaWYgLyogQlNENDQgKi8KKworI2lmZGVmIENPTU1FTlQKKyAgICAvKiBPUzIgbm8gbG9u Z2VyIG5lZWRzIHRoaXMgYXMgYWxsIENSIGFyZSBjb252ZXJ0ZWQgdG8gTkwgaW4gY29uaW5jKCkg Ki8KKyAgICAvKiBUaGlzIGVsaW1pbmF0ZXMgdGhlIHVnbHkgZXh0cmEgYmxhbmsgbGluZXMgZGlz Y3Vzc2VkIGFib3ZlLiAgICAgICAgKi8KKyNpZmRlZiBPUzIKKyAgICBpZiAoYyA9PSBDUikgcHV0 Y2hhcihOTCk7CisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogQ09NTUVOVCAqLworI2lmZGVm IGFlZ2lzCisgICAgaWYgKGMgPT0gQ1IpIHB1dGNoYXIoTkwpOworI2VuZGlmIC8qIGFlZ2lzICov CisjaWZkZWYgQU1JR0EKKyAgICBpZiAoYyA9PSBDUikgcHV0Y2hhcihOTCk7CisjZW5kaWYgLyog QU1JR0EgKi8KKyNpZmRlZiBkYXRhZ2VuZXJhbAorICAgIGlmIChjID09IENSKSBwdXRjaGFyKE5M KTsKKyNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLworI2lmZGVmIEdFTURPUworICAgIGlmIChjID09 IENSKSBwdXRjaGFyKE5MKTsKKyNlbmRpZiAvKiBHRU1ET1MgKi8KKyNpZmRlZiBTVFJBVFVTCisg ICAgaWYgKGMgPT0gQ1IpIHB1dGNoYXIoTkwpOworI2VuZGlmIC8qIFNUUkFUVVMgKi8KK30KKwor c3RhdGljIFZPSUQKK2NtZGNoYXJkZWwoKSB7CQkJCS8qIEVyYXNlIGEgY2hhcmFjdGVyIGZyb20g dGhlIHNjcmVlbiAqLworI2lmbmRlZiBOT1NQTAorICAgIGlmICghZWNob3N0YXJzKQorI2VuZGlm CS8qIE5PU1BMICovCisgICAgICBpZiAoIWRweCkgcmV0dXJuOworI2lmZGVmIGRhdGFnZW5lcmFs CisgICAgLyogREcgJ1xiJyBpcyBFTSAoXnkgb3IgXDAzMSkgKi8KKyAgICBpZiAodGVybXR5cGUg PT0gMSkKKyAgICAgIC8qIEVyYXNlIGEgY2hhcmFjdGVyIGZyb20gbm9uLURHIHNjcmVlbiwgKi8K KyAgICAgIGRnbmNvdWIoMSwiXDAxMCBcMDEwIiwzKTsKKyAgICBlbHNlCisjZW5kaWYgLyogZGF0 YWdlbmVyYWwgKi8KKyAgICAgIHByaW50ZigiXGIgXGIiKTsKKyNpZmRlZiBHRU1ET1MKKyAgICBm Zmx1c2goc3Rkb3V0KTsKKyNlbHNlCisjaWZkZWYgQkVCT1gKKyAgICBmZmx1c2goc3Rkb3V0KTsK KyNlbmRpZiAvKiBCRUJPWCAqLworI2VuZGlmIC8qIEdFTURPUyAqLworfQorCitzdGF0aWMgVk9J RAorI2lmZGVmIENLX0FOU0lDCitjbWRlY2hvKGNoYXIgYywgaW50IHF1b3RlKQorI2Vsc2UKK2Nt ZGVjaG8oYyxxdW90ZSkgY2hhciBjOyBpbnQgcXVvdGU7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8K K3sgLyogY21kZWNobyAqLworI2lmZGVmIE5PU1BMCisgICAgaWYgKCFkcHgpIHJldHVybjsKKyNl bHNlCisgICAgaWYgKCFlY2hvc3RhcnMpIHsKKwlpZiAoIWRweCkgcmV0dXJuOworICAgIH0gZWxz ZSB7CisJYyA9IChjaGFyKWVjaG9zdGFyczsKKyAgICB9CisjZW5kaWYJLyogTk9TUEwgKi8KKyAg ICAvKiBFY2hvIHR0eSBpbnB1dCBjaGFyYWN0ZXIgYyAqLworICAgIGlmIChxdW90ZSkgeworCXB1 dGNoYXIoQlMpOworCXB1dGNoYXIoU1ApOworCXB1dGNoYXIoQlMpOworI2lmZGVmIGlzcHJpbnQK KwlwdXRjaGFyKChDSEFSKSAoaXNwcmludChjKSA/IGMgOiAnXicgKSk7CisjZWxzZQorCXB1dGNo YXIoKENIQVIpICgoYyA+PSBTUCAmJiBjIDwgREVMKSA/IGMgOiAnXicpKTsKKyNlbmRpZiAvKiBp c3ByaW50ICovCisgICAgfSBlbHNlIHsKKwlwdXRjaGFyKGMpOworICAgIH0KKyNpZmRlZiBPUzIK KyAgICBpZiAocXVvdGU9PTEgJiYgYz09Q1IpIHB1dGNoYXIoKENIQVIpIE5MKTsKKyNlbmRpZiAv KiBPUzIgKi8KKyAgICBpZiAodGltZWxpbWl0KQorICAgICAgZmZsdXNoKHN0ZG91dCk7Cit9CisK Ky8qIFJldHVybiBwb2ludGVyIHRvIGN1cnJlbnQgcG9zaXRpb24gaW4gY29tbWFuZCBidWZmZXIu ICovCisKK2NoYXIgKgorY21wZWVrKCkgeworICAgIHJldHVybihucCk7Cit9CisjZW5kaWYgLyog Tk9JQ1AgKi8KKworCisjaWZkZWYgTk9JQ1AKKyNpbmNsdWRlICJja2NkZWIuaCIKKyNpbmNsdWRl ICJja3VjbWQuaCIKKyNpbmNsdWRlICJja2Nhc2MuaCIKKyNlbmRpZiAvKiBOT0lDUCAqLworCisv KiAgWCBYIEUgUyBDICAtLSAgSW50ZXJwcmV0cyBiYWNrc2xhc2ggY29kZXMgICovCisvKiAgUmV0 dXJucyB0aGUgaW50IHZhbHVlIG9mIHRoZSBiYWNrc2xhc2ggY29kZSBpZiBpdCBpcyA+IC0xIGFu ZCA8IDI1NiAqLworLyogIGFuZCB1cGRhdGVzIHRoZSBzdHJpbmcgcG9pbnRlciB0byBmaXJzdCBj aGFyYWN0ZXIgYWZ0ZXIgYmFja3NsYXNoIGNvZGUuICovCisvKiAgSWYgdGhlIGFyZ3VtZW50IGlz IGludmFsaWQsIGxlYXZlcyBwb2ludGVyIHVuY2hhbmdlZCBhbmQgcmV0dXJucyAtMS4gKi8KKwor aW50Cit4eGVzYyhzKSBjaGFyICoqczsgewkJCS8qIEV4cGFuZCBiYWNrc2xhc2ggZXNjYXBlcyAq LworICAgIGludCB4LCB5LCBicmFjZSwgcmFkaXg7CQkvKiBSZXR1cm5zIHRoZSBpbnQgdmFsdWUg Ki8KKyAgICBjaGFyIGhkID0gJzknOwkJCS8qIEhpZ2hlc3QgZGlnaXQgaW4gcmFkaXggKi8KKyAg ICBjaGFyICpwOworCisgICAgcCA9ICpzOwkJCQkvKiBwb2ludGVyIHRvIGJlZ2lubmluZyAqLwor ICAgIGlmICghcCkgcmV0dXJuKC0xKTsJCQkvKiB3YXRjaCBvdXQgZm9yIG51bGwgcG9pbnRlciAq LworICAgIHggPSAqcCsrOwkJCQkvKiBjaGFyYWN0ZXIgYXQgYmVnaW5uaW5nICovCisgICAgaWYg KHggIT0gQ01EUSkgcmV0dXJuKC0xKTsJCS8qIG1ha2Ugc3VyZSBpdCdzIGEgYmFja3NsYXNoIGNv ZGUgKi8KKworICAgIHggPSAqcDsJCQkJLyogaXQgaXMsIGdldCB0aGUgbmV4dCBjaGFyYWN0ZXIg Ki8KKyAgICBpZiAoeCA9PSAneycpIHsJCQkvKiBicmFja2V0ZWQgcXVhbnRpdHk/ICovCisJcCsr OwkJCQkvKiBiZWdpbiBwYXN0IGJyYWNrZXQgKi8KKwl4ID0gKnA7CisJYnJhY2UgPSAxOworICAg IH0gZWxzZSBicmFjZSA9IDA7CisgICAgc3dpdGNoICh4KSB7CQkJLyogU3RhcnQgaW50ZXJwcmV0 aW5nICovCisgICAgICBjYXNlICdkJzoJCQkJLyogRGVjaW1hbCByYWRpeCBpbmRpY2F0b3IgKi8K KyAgICAgIGNhc2UgJ0QnOgorCXArKzsJCQkJLyogSnVzdCBwb2ludCBwYXN0IGl0IGFuZCBmYWxs IHRocnUgKi8KKyAgICAgIGNhc2UgJzAnOgkJCQkvKiBTdGFydHMgd2l0aCBkaWdpdCAqLworICAg ICAgY2FzZSAnMSc6CisgICAgICBjYXNlICcyJzogIGNhc2UgJzMnOiAgY2FzZSAnNCc6ICBjYXNl ICc1JzoKKyAgICAgIGNhc2UgJzYnOiAgY2FzZSAnNyc6ICBjYXNlICc4JzogIGNhc2UgJzknOgor CXJhZGl4ID0gMTA7CQkJLyogRGVjaW1hbCAqLworCWhkID0gJzknOwkJCS8qIGhpZ2hlc3QgdmFs aWQgZGlnaXQgKi8KKwlicmVhazsKKyAgICAgIGNhc2UgJ28nOgkJCQkvKiBTdGFydHMgd2l0aCBv IG9yIE8gKi8KKyAgICAgIGNhc2UgJ08nOgorCXJhZGl4ID0gODsJCQkvKiBPY3RhbCAqLworCWhk ID0gJzcnOwkJCS8qIGhpZ2hlc3QgdmFsaWQgZGlnaXQgKi8KKwlwKys7CQkJCS8qIHBvaW50IHBh c3QgcmFkaXggaW5kaWNhdG9yICovCisJYnJlYWs7CisgICAgICBjYXNlICd4JzoJCQkJLyogU3Rh cnRzIHdpdGggeCBvciBYICovCisgICAgICBjYXNlICdYJzoKKwlyYWRpeCA9IDE2OwkJCS8qIEhl eGFkZWNpbWFsICovCisJcCsrOwkJCQkvKiBwb2ludCBwYXN0IHJhZGl4IGluZGljYXRvciAqLwor CWJyZWFrOworICAgICAgZGVmYXVsdDoJCQkJLyogQWxsIG90aGVycyAqLworI2lmZGVmIENPTU1F TlQKKwkqcyA9IHArMTsJCQkvKiBUcmVhdCBhcyBxdW90ZSBvZiBuZXh0IGNoYXIgKi8KKwlyZXR1 cm4oKnApOworI2Vsc2UKKwlyZXR1cm4oLTEpOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICB9 CisgICAgLyogRm9yIE9TLzIsIHRoZXJlIGFyZSAid2lkZSIgY2hhcmFjdGVycyByZXF1aXJlZCBm b3IgdGhlIGtleWJvYXJkCisgICAgICogYmluZGluZywgaS5lIFw2NDQgYW5kIHNpbWlsYXIgY29k ZXMgbGFyZ2VyIHRoYW4gMjU1IChieXRlKS4KKyAgICAgKiBGb3IgdGhpcyBwdXJwb3NlLCBnaXZl IHVwIGNoZWNraW5nIGZvciA8IDI1Ni4gSWYgc29tZW9uZSBtZWFucworICAgICAqIFwyNjYgc2hv dWxkIHJlc3VsdCBpbiBcMjYgZm9sbG93ZWQgYnkgYSAiNiIgY2hhcmFjdGVyLCBoZSBzaG91bGQK KyAgICAgKiBhbHdheXMgd3JpdGUgXHsyNn02IGFueXdheS4gIE5vdywgcmV0dXJuIG9ubHkgdGhl IGxvd2VyIGJ5dGUgb2YKKyAgICAgKiB0aGUgcmVzdWx0LCBpLmUuIDEwLCBidXQgZWF0IHVwIHRo ZSB3aG9sZSBcMjY2IHNlcXVlbmNlIGFuZAorICAgICAqIHB1dCB0aGUgd2lkZSByZXN1bHQgMjY2 IGludG8gYSBnbG9iYWwgdmFyaWFibGUuICBZZXMsIHRoYXQncyBub3QKKyAgICAgKiB0aGUgbW9z dCBiZWF1dGlmdWwgcHJvZ3JhbW1pbmcgc3R5bGUgYnV0IHJlcXVpcmVzIHRoZSBsZWFzdAorICAg ICAqIGFtb3VudCBvZiBjaGFuZ2VzIHRvIG90aGVyIHJvdXRpbmVzLgorICAgICAqLworICAgIGlm ICgqcCA9PSAneycpIHsJCQkvKiBTdW4gTWF5IDExIDIwOjAwOjQwIDIwMDMgKi8KKwlicmFjZSA9 IDE7CQkJLyogQWxsb3cge30gYWZ0ZXIgcmFkaXggaW5kaWNhdG9yICovCisJcCsrOworICAgIH0K KyAgICBpZiAocmFkaXggPD0gMTApIHsJCQkvKiBOdW1iZXIgaW4gcmFkaXggOCBvciAxMCAqLwor CWZvciAoIHggPSB5ID0gMDsKKyAJICAgICAgKCpwKSAmJiAoKnAgPj0gJzAnKSAmJiAoKnAgPD0g aGQpCisjaWZkZWYgT1MyCisgICAgICAgICAgICAgICAgICAgJiYgKHkgPCA1KSAmJiAoeCpyYWRp eCA8IEtNU0laRSk7CisgICAgICAgICAgICAgIC8qIHRoZSBtYXhpbXVtIG5lZWRlZCB2YWx1ZSBc ODE5NiBpcyA0IGRpZ2l0cyBsb25nICovCisgICAgICAgICAgICAgIC8qIHdoaWxlIGFzIG9jdGFs IGl0IHJlcXVpcmVzIFwxMzc3LCBpLmUuIDUgZGlnaXRzICovCisjZWxzZQorICAgICAgICAgICAg ICAgICAgICYmICh5IDwgMykgJiYgKHgqcmFkaXggPCAyNTYpOworI2VuZGlmIC8qIE9TMiAqLwor CSAgICAgIHArKyx5KyspIHsKKwkgICAgeCA9IHggKiByYWRpeCArIChpbnQpICpwIC0gNDg7CisJ fQorI2lmZGVmIE9TMgorICAgICAgICB3aWRlcmVzdWx0ID0geDsJCQkvKiBSZW1lbWJlciB3aWRl IHJlc3VsdCAqLworICAgICAgICB4ICY9IDI1NTsKKyNlbmRpZiAvKiBPUzIgKi8KKwlpZiAoeSA9 PSAwIHx8IHggPiAyNTUpIHsJLyogTm8gdmFsaWQgZGlnaXRzPyAqLworCSAgICAqcyA9IHA7CQkJ LyogcG9pbnQgYWZ0ZXIgaXQgKi8KKwkgICAgcmV0dXJuKC0xKTsJCQkvKiByZXR1cm4gZmFpbHVy ZS4gKi8KKwl9CisgICAgfSBlbHNlIGlmIChyYWRpeCA9PSAxNikgewkJLyogU3BlY2lhbCBjYXNl IGZvciBoZXggKi8KKwlpZiAoKHggPSB1bmhleCgqcCsrKSkgPCAwKSB7ICpzID0gcCAtIDE7IHJl dHVybigtMSk7IH0KKwlpZiAoKHkgPSB1bmhleCgqcCsrKSkgPCAwKSB7ICpzID0gcCAtIDI7IHJl dHVybigtMSk7IH0KKwl4ID0gKCh4IDw8IDQpICYgMHhGMCkgfCAoeSAmIDB4MEYpOworI2lmZGVm IE9TMgorICAgICAgICB3aWRlcmVzdWx0ID0geDsKKyAgICAgICAgaWYgKCh5ID0gdW5oZXgoKnAp KSA+PSAwKSB7CisgICAgICAgICAgIHArKzsKKwkgICB3aWRlcmVzdWx0ID0gKCh4IDw8IDQpICYg MHhGRjApIHwgKHkgJiAweDBGKTsKKyAgICAgICAgICAgeCA9IHdpZGVyZXN1bHQgJiAyNTU7Cisg ICAgICAgIH0KKyNlbmRpZiAvKiBPUzIgKi8KKyAgICB9IGVsc2UgeCA9IC0xOworICAgIGlmIChi cmFjZSAmJiAqcCA9PSAnfScgJiYgeCA+IC0xKQkvKiBQb2ludCBwYXN0IGNsb3NpbmcgYnJhY2Us IGlmIGFueSAqLworICAgICAgcCsrOworICAgICpzID0gcDsJCQkJLyogUG9pbnQgdG8gbmV4dCBj aGFyIGFmdGVyIHNlcXVlbmNlICovCisgICAgcmV0dXJuKHgpOwkJCQkvKiBSZXR1cm4gdmFsdWUg b2Ygc2VxdWVuY2UgKi8KK30KKworaW50CQkJCQkvKiBDb252ZXJ0IGhleCBzdHJpbmcgdG8gaW50 ICovCisjaWZkZWYgQ0tfQU5TSUMKK3VuaGV4KGNoYXIgeCkKKyNlbHNlCit1bmhleCh4KSBjaGFy IHg7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIHVuaGV4ICovIHsKKworICAgIGlmICh4ID49 ICcwJyAmJiB4IDw9ICc5JykJCS8qIDAtOSBpcyBvZmZzZXQgYnkgaGV4IDMwICovCisgICAgICBy ZXR1cm4oeCAtIDB4MzApOworICAgIGVsc2UgaWYgKHggPj0gJ0EnICYmIHggPD0gJ0YnKQkvKiBB LUYgb2Zmc2V0IGJ5IGhleCAzNyAqLworICAgICAgcmV0dXJuKHggLSAweDM3KTsKKyAgICBlbHNl IGlmICh4ID49ICdhJyAmJiB4IDw9ICdmJykJLyogYS1mIG9mZnNldCBieSBoZXggNTcgKi8KKyAg ICAgIHJldHVybih4IC0gMHg1Nyk7CQkJLyogKG9idmlvdXNseSBBU0NJSSBkZXBlbmRlbnQpICov CisgICAgZWxzZSByZXR1cm4oLTEpOworfQorCisvKiAgTCBPIE8gSyBVIFAgIC0tICBMb29rdXAg dGhlIHN0cmluZyBpbiB0aGUgZ2l2ZW4gYXJyYXkgb2Ygc3RyaW5ncyAgKi8KKworLyoKKyAgQ2Fs bCB0aGlzIHdheTogIHYgPSBsb29rdXAodGFibGUsd29yZCxuLCZ4KTsKKworICAgIHRhYmxlIC0g YSAnc3RydWN0IGtleXRhYicgdGFibGUuCisgICAgd29yZCAgLSB0aGUgdGFyZ2V0IHN0cmluZyB0 byBsb29rIHVwIGluIHRoZSB0YWJsZS4KKyAgICBuICAgICAtIHRoZSBudW1iZXIgb2YgZWxlbWVu dHMgaW4gdGhlIHRhYmxlLgorICAgIHggICAgIC0gYWRkcmVzcyBvZiBhbiBpbnRlZ2VyIGZvciBy ZXR1cm5pbmcgdGhlIHRhYmxlIGFycmF5IGluZGV4LAorCSAgICBvciBOVUxMIGlmIHlvdSBkb24n dCBuZWVkIGEgdGFibGUgaW5kZXguCisKKyAgVGhlIGtleXdvcmQgdGFibGUgbXVzdCBiZSBhcnJh bmdlZCBpbiBhc2NlbmRpbmcgYWxwaGFiZXRpY2FsIG9yZGVyOworICBhbHBoYWJldGljIGNhc2Ug ZG9lc24ndCBtYXR0ZXIgYnV0IGxldHRlcnMgYXJlIHRyZWF0ZWQgYXMgbG93ZXJjYXNlCisgIGZv ciBwdXJwb3NlcyBvZiBvcmRlcmluZzsgdGh1cyAiXiIgYW5kICJfIiBjb21lICpiZWZvcmUqIHRo ZSBsZXR0ZXJzLAorICBub3QgYWZ0ZXIgdGhlbS4KKworICBSZXR1cm5zIHRoZSBrZXl3b3JkJ3Mg YXNzb2NpYXRlZCB2YWx1ZSAoemVybyBvciBncmVhdGVyKSBpZiBmb3VuZCwKKyAgd2l0aCB0aGUg dmFyaWFibGUgeCBzZXQgdG8gdGhlIGtleXdvcmQtdGFibGUgaW5kZXguICBJZiBpcyBsb29rdXAo KQorICBpcyBub3Qgc3VjY2Vzc2Z1bCwgaXQgcmV0dXJuczoKKworICAgLTMgaWYgbm90aGluZyB0 byBsb29rIHVwICh0YXJnZXQgd2FzIG51bGwpLAorICAgLTIgaWYgYW1iaWd1b3VzLAorICAgLTEg aWYgbm90IGZvdW5kLgorCisgIEEgbWF0Y2ggaXMgc3VjY2Vzc2Z1bCBpZiB0aGUgdGFyZ2V0IG1h dGNoZXMgYSBrZXl3b3JkIGV4YWN0bHksIG9yIGlmCisgIHRoZSB0YXJnZXQgaXMgYSBwcmVmaXgg b2YgZXhhY3RseSBvbmUga2V5d29yZC4gIEl0IGlzIGFtYmlndW91cyBpZiB0aGUKKyAgdGFyZ2V0 IG1hdGNoZXMgdHdvIG9yIG1vcmUga2V5d29yZHMgZnJvbSB0aGUgdGFibGUuCisKKyAgTG9va3Vw KCkgaXMgdGhlIGNyaXRpY2FsIHJvdXRpbmUgaW4gc2NyaXB0cyBhbmQgc28gaXMgb3B0aW1pemVk IHdpdGggYQorICBzaW1wbGUgc3RhdGljIGNhY2hlIHBsdXMgc29tZSBvdGhlciB0cmlja3MuICBN YXliZSBpdCBjb3VsZCBiZSBpbXByb3ZlZAorICBmdXJ0aGVyIHdpdGggYmluYXJ5IHNlYXJjaCBv ciBoYXNoIHRlY2huaXF1ZXMgYnV0IEkgZG91YnQgaXQgc2luY2UgbW9zdAorICBrZXl3b3JkIHRh YmxlcyBhcmUgZmFpcmx5IHNob3J0LgorKi8KKworI2lmZGVmIFVTRV9MVUNBQ0hFCQkJLyogTG9v a3VwIGNhY2hlICovCitleHRlcm4gaW50IGx1c2l6ZTsJCQkvKiAoaW5pdGlhbGl6ZWQgaW4gY2t1 dXM1LmMpICovCitleHRlcm4gY2hhciAqIGx1Y21kW107CitleHRlcm4gaW50IGx1dmFsW107Citl eHRlcm4gaW50IGx1aWR4W107CitleHRlcm4gc3RydWN0IGtleXRhYiAqIGx1dGFiW107Citsb25n IGx1aGl0cyA9IDBMOworbG9uZyBsdWNhbGxzID0gMEw7Citsb25nIHh4aGl0cyA9IDBMOworbG9u ZyBsdWxvb3AgPSAwTDsKKyNlbmRpZiAvKiBVU0VfTFVDQUNIRSAqLworCitpbnQKK2xvb2t1cCh0 YWJsZSxjbWQsbix4KSBjaGFyICpjbWQ7IHN0cnVjdCBrZXl0YWIgdGFibGVbXTsgaW50IG4sICp4 OyB7CisKKyAgICByZWdpc3RlciBpbnQgaSwgbTsKKyAgICBpbnQgdiwgbGVuLCBjbWRsZW4gPSAw OworICAgIGNoYXIgYyA9IE5VTCwgYzEsICpzOworCisvKiBHZXQgMXN0IGNoYXIgb2Ygc2VhcmNo IG9iamVjdCwgaWYgaXQncyBudWxsIHJldHVybiAtMy4gKi8KKworICAgIGlmICghY21kIHx8IG4g PCAxKQkJCS8qIERlZmVuc2UgZGUgbnVsbGFyZyAqLworICAgICAgcmV0dXJuKC0zKTsKKyAgICBj MSA9ICpjbWQ7CQkJCS8qIEZpcnN0IGNoYXJhY3RlciAqLworICAgIGlmICghYzEpCQkJCS8qIE1h a2Ugc3VyZSB0aGVyZSBpcyBvbmUgKi8KKyAgICAgIHJldHVybigtMyk7CisgICAgaWYgKGlzdXBw ZXIoYzEpKQkJCS8qIElmIGxldHRlciBtYWtlIGl0IGxvd2VyY2FzZSAqLworICAgICAgYzEgPSB0 b2xvd2VyKGMxKTsKKworI2lmZGVmIFVTRV9MVUNBQ0hFCQkJLyogbG9va3VwKCkgY2FjaGUgKi8K KyAgICBtID0gbHVzaXplOworICAgIGx1Y2FsbHMrKzsJCQkJLyogQ291bnQgdGhpcyBsb29rdXAo KSBjYWxsICovCisgICAgZm9yIChpID0gMDsgaSA8IG07IGkrKykgewkJLyogTG9vcCB0aHJ1IGNh Y2hlICovCisJaWYgKCoobHVjbWRbaV0pID09IGMxKSB7CS8qIFNhbWUgYXMgMXN0IGNoYXIgb2Yg c2VhcmNoIGl0ZW0/ICovCisJICAgIGlmIChsdXRhYltpXSA9PSB0YWJsZSkgewkvKiBZZXMgLSBz YW1lIHRhYmxlIHRvbz8gKi8KKwkJaWYgKCFzdHJjbXAoY21kLGx1Y21kW2ldKSkgeyAvKiBZZXMg LSBjb21wYXJlICovCisJCSAgICBpZiAoeCkgKnggPSBsdWlkeFtpXTsgICAgLyogTWF0Y2ggLSBy ZXR1cm4gaW5kZXggKi8KKwkJICAgIGx1aGl0cysrOyAgICAgICAgICAgICAgICAvKiBDb3VudCBj YWNoZSBoaXQgKi8KKwkJICAgIHJldHVybihsdXZhbFtpXSk7ICAgICAgICAvKiBSZXR1cm4gYXNz b2NpYXRlZCB2YWx1ZSAqLworCQl9CisJICAgIH0KKwl9CisgICAgfQorI2VuZGlmIC8qIFVTRV9M VUNBQ0hFICovCisKKy8qIE5vdCBudWxsLCBub3QgaW4gY2FjaGUsIGxvb2sgaXQgdXAgKi8KKwor ICAgIHMgPSBjbWQ7CisgICAgd2hpbGUgKCpzKyspIGNtZGxlbisrOwkJLyogTGVuZ3RoIG9mIHRh cmdldCAqLworLyoKKyAgUXVpY2sgYmluYXJ5IHNlYXJjaCB0byBmaW5kIGxhc3QgdGFibGUgZW50 cnkgd2hvc2UgZmlyc3QgY2hhcmFjdGVyIGlzCisgIGxleGljYWxseSBsZXNzIHRoYW4gdGhlIGZp cnN0IGNoYXJhY3RlciBvZiB0aGUgc2VhcmNoIG9iamVjdC4gIFRoaXMgaXMKKyAgdGhlIHN0YXJ0 aW5nIHBvaW50IG9mIHRoZSBuZXh0IGxvb3AsIHdoaWNoIG11c3QgZ28gaW4gc2VxdWVuY2Ugc2lu Y2UgaXQKKyAgY29tcGFyZXMgYWRqYWNlbnQgdGFibGUgZW50cmllcy4KKyovCisgICAgaWYgKG4g PCA1KSB7CQkJLyogTm90IHdvcnRoIGl0IGZvciBzbWFsbCB0YWJsZXMgKi8KKwlpID0gMDsKKyAg ICB9IGVsc2UgeworCWludCBsbyA9IDA7CisJaW50IGhpID0gbjsKKwlpbnQgY291bnQgPSAwOwor CXdoaWxlIChsbysyIDwgaGkgJiYgKytjb3VudCA8IDEyKSB7CisJICAgIGkgPSBsbyArICgoaGkg LSBsbykgLyAyKTsKKwkgICAgYyA9ICoodGFibGVbaV0ua3dkKTsKKwkgICAgaWYgKGlzdXBwZXIo YykpIGMgPSB0b2xvd2VyKGMpOworCSAgICBpZiAoYyA8IGMxKSB7CisJCWxvID0gaTsKKwkgICAg fSBlbHNlIHsKKwkJaGkgPSBpOworCSAgICB9CisJfQorCWkgPSAoYyA8IGMxKSA/IGxvKzEgOiBs bzsKKyNpZmRlZiBVU0VfTFVDQUNIRQorCWlmIChpID4gMCkgeHhoaXRzKys7CisjZW5kaWYgLyog VVNFX0xVQ0FDSEUgKi8KKyAgICB9CisgICAgZm9yICggOyBpIDwgbi0xOyBpKyspIHsKKyNpZmRl ZiBVU0VfTFVDQUNIRQorCWx1bG9vcCsrOworI2VuZGlmIC8qIFVTRV9MVUNBQ0hFICovCisJdiA9 IDA7CisJYyA9ICoodGFibGVbaV0ua3dkKTsKKwlpZiAoYykgeworCSAgICBpZiAoaXN1cHBlcihj KSkgYyA9IHRvbG93ZXIoYyk7CisKKwkgICAgLyogVGhlIGZvbGxvd2luZyBpcyBhIGJpZyBwZXJm b3JtYW5jZSBib29zdGVyIGJ1dCBtYWtlcyBpdCAqLworCSAgICAvKiBhYnNvbHV0ZWx5IGVzc2Vu dGlhbCB0aGF0IGFsbCBsb29rdXAoKSB0YWJsZXMgYXJlIGluIG9yZGVyLiAqLworCisJICAgIGlm IChjID4gYzEpCQkJLyogTGVhdmUgZWFybHkgaWYgcGFzdCBvdXIgbWFyayAqLworCSAgICAgIHJl dHVybigtMSk7CisKKyNpZmRlZiBERUJVRworCSAgICAvKiBVc2UgTE9HIERFQlVHIHRvIGNoZWNr ICovCisKKwkgICAgaWYgKGRlYmxvZykgeworCQlpZiAoY2tzdHJjbXAodGFibGVbaV0ua3dkLHRh YmxlW2krMV0ua3dkLDAsMCkgPiAwKSB7CisJCSAgICBwcmludGYoIlRBQkxFIE9VVCBPRiBPUkRF UiBbJXNdIFslc11cbiIsCisJCQkgICB0YWJsZVtpXS5rd2QsdGFibGVbaSsxXS5rd2QpOworCisJ CX0KKwkgICAgfQorI2VuZGlmIC8qIERFQlVHICovCisKKwkgICAgaWYgKGMgPT0gYzEpIHsKKwkJ bGVuID0gMDsKKwkJcyA9IHRhYmxlW2ldLmt3ZDsKKwkJd2hpbGUgKCpzKyspIGxlbisrOworCQlp ZiAoKGxlbiA9PSBjbWRsZW4gJiYgIWNrc3RyY21wKHRhYmxlW2ldLmt3ZCxjbWQsbGVuLDApKSB8 fAorCQkgICAgKCh2ID0gIWNrc3RyY21wKHRhYmxlW2ldLmt3ZCxjbWQsY21kbGVuLDApKSAmJgor CQkgICAgIGNrc3RyY21wKHRhYmxlW2krMV0ua3dkLGNtZCxjbWRsZW4sMCkpKSB7CisJCSAgICBp ZiAoeCkgKnggPSBpOworCQkgICAgcmV0dXJuKHRhYmxlW2ldLmt3dmFsKTsKKwkJfQorCSAgICB9 IGVsc2UgdiA9IDA7CisJfQorICAgICAgICBpZiAodikgewkJCS8qIEFtYmlndW91cyAqLworCSAg ICBpZiAoeCkgKnggPSBpOwkJLyogU2V0IGluZGV4IG9mIGZpcnN0IG1hdGNoICovCisJICAgIHJl dHVybigtMik7CisJfQorICAgIH0KKworLyogTGFzdCAob3Igb25seSkgZWxlbWVudCAqLworCisg ICAgaWYgKCFja3N0cmNtcCh0YWJsZVtuLTFdLmt3ZCxjbWQsY21kbGVuLDApKSB7CisgICAgICAg IGlmICh4KSAqeCA9IG4tMTsKKwkvKiBkZWJ1ZyhGMTExLCJsb29rdXAiLHRhYmxlW2ldLmt3ZCx0 YWJsZSk7ICovCisgICAgICAgIHJldHVybih0YWJsZVtuLTFdLmt3dmFsKTsKKyAgICB9IGVsc2Ug cmV0dXJuKC0xKTsKK30KKworLyoKKyAgeCBsIG8gbyBrIHUgcAorCisgIExpa2UgbG9va3VwLCBi dXQgcmVxdWlyZXMgYSBmdWxsIChidXQgY2FzZS1pbmRlcGVuZGVudCkgbWF0Y2gKKyAgYW5kIGRv ZXMgTk9UIHJlcXVpcmUgdGhlIHRhYmxlIHRvIGJlIGluIG9yZGVyLgorKi8KK2ludAoreGxvb2t1 cCh0YWJsZSxjbWQsbix4KSBzdHJ1Y3Qga2V5dGFiIHRhYmxlW107IGNoYXIgKmNtZDsgaW50IG4s ICp4OyB7CisgICAgcmVnaXN0ZXIgaW50IGk7CisgICAgaW50IGxlbiwgY21kbGVuLCBvbmUgPSAw OworICAgIHJlZ2lzdGVyIGNoYXIgYywgYzIsICogcywgKiBzMjsKKworICAgIGlmICghY21kKSBj bWQgPSAiIjsJCQkvKiBDaGVjayBhcmdzICovCisgICAgaWYgKCEqY21kIHx8IG4gPCAxKSByZXR1 cm4oLTMpOworCisgICAgYyA9ICpjbWQ7CQkJCS8qIEZpcnN0IGNoYXIgb2Ygc3RyaW5nIHRvIGxv b2sgdXAgKi8KKyAgICBpZiAoISooY21kKzEpKSB7CQkJLyogU3BlY2lhbCBoYW5kbGluZyBmb3Ig MS1jaGFyIG5hbWVzICovCisJY21kbGVuID0gMTsKKwlpZiAoaXN1cHBlcihjKSkKKwkgIGMgPSB0 b2xvd2VyKGMpOworCW9uZSA9IDE7CisgICAgfSBlbHNlIHsKKwljbWRsZW4gPSAwOworCXMgPSBj bWQ7CisJd2hpbGUgKCpzKyspIGNtZGxlbisrOworCWMgPSAqY21kOworCWlmIChpc3VwcGVyKGMp KQorCSAgYyA9IHRvbG93ZXIoYyk7CisgICAgfQorICAgIGlmIChjbWRsZW4gPCAxKQorICAgICAg cmV0dXJuKC0zKTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwlzID0gdGFibGVb aV0ua3dkOwkJLyogVGhpcyBlbnRyeSAqLworCWlmICghcykgcyA9ICIiOworCWlmICghKnMpIGNv bnRpbnVlOwkJLyogRW1wdHkgdGFibGUgZW50cnkgKi8KKwljMiA9ICpzOworCWlmIChpc3VwcGVy KGMyKSkgYzIgPSB0b2xvd2VyKGMyKTsKKwlpZiAoYyAhPSBjMikgY29udGludWU7CQkvKiBGaXJz dCBjaGFyIGRvZXNuJ3QgbWF0Y2ggKi8KKwlpZiAob25lKSB7CQkJLyogTmFtZSBpcyBvbmUgY2hh ciBsb25nICovCisJICAgIGlmICghKihzKzEpKSB7CisJCWlmICh4KSAqeCA9IGk7CisgICAgICAg ICAgICAgICAgKmNtZCA9IGM7IAorCQlyZXR1cm4odGFibGVbaV0ua3d2YWwpOwkvKiBTbyBpcyB0 YWJsZSBlbnRyeSAqLworCSAgICB9CisJfSBlbHNlIHsJCQkvKiBPdGhlcndpc2UgZG8gc3RyaW5n IGNvbXBhcmlzb24gKi8KKwkgICAgczIgPSBzOworCSAgICBsZW4gPSAwOworCSAgICB3aGlsZSAo KnMyKyspIGxlbisrOworCSAgICBpZiAobGVuID09IGNtZGxlbiAmJiAhY2tzdHJjbXAocyxjbWQs LTEsMCkpIHsKKwkJaWYgKHgpICp4ID0gaTsKKwkJcmV0dXJuKHRhYmxlW2ldLmt3dmFsKTsKKwkg ICAgfQorCX0KKyAgICB9CisgICAgcmV0dXJuKC0xKTsKK30KKworLyogUmV2ZXJzZSBsb29rdXAg Ki8KKworY2hhciAqCitybG9va3VwKHRhYmxlLG4seCkgc3RydWN0IGtleXRhYiB0YWJsZVtdOyBp bnQgbiwgeDsgeworICAgIGludCBpOworICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKyAg ICAgICAgaWYgKHRhYmxlW2ldLmt3dmFsID09IHgpCisJICByZXR1cm4odGFibGVbaV0ua3dkKTsK KyAgICB9CisgICAgcmV0dXJuKE5VTEwpOworfQorCisjaWZuZGVmIE5PSUNQCitpbnQKK2NtZHNx dW8oeCkgaW50IHg7IHsKKyAgICBxdW90aW5nID0geDsKKyAgICByZXR1cm4oMSk7Cit9CisKK2lu dAorY21kZ3F1bygpIHsKKyAgICByZXR1cm4ocXVvdGluZyk7Cit9CisjZW5kaWYgLyogTk9JQ1Ag Ki8KCmRpZmYgLS1naXQgYS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2Nr dWNtZC5oIGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3VjbWQuaApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Y2Q0Y2VkCi0tLSAvZGV2L251bGwK KysrIGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3VjbWQuaApAQCAt MCwwICsxLDMxMiBAQAorLyogIEMgSyBVIEMgTSBEIC4gSCAgLS0gIEhlYWRlciBmaWxlIGZvciBV bml4IGNtZCBwYWNrYWdlICAqLworCisvKgorICBBdXRob3I6IEZyYW5rIGRhIENydXogPGZkY0Bj b2x1bWJpYS5lZHU+CisgIENvbHVtYmlhIFVuaXZlcnNpdHkgS2VybWl0IFByb2plY3QsIE5ldyBZ b3JrIENpdHkuCisKKyAgQ29weXJpZ2h0IChDKSAxOTg1LCAyMDA5LAorICAgIFRydXN0ZWVzIG9m IENvbHVtYmlhIFVuaXZlcnNpdHkgaW4gdGhlIENpdHkgb2YgTmV3IFlvcmsuCisgICAgQWxsIHJp Z2h0cyByZXNlcnZlZC4gIFNlZSB0aGUgQy1LZXJtaXQgQ09QWUlORy5UWFQgZmlsZSBvciB0aGUK KyAgICBjb3B5cmlnaHQgdGV4dCBpbiB0aGUgY2tjbWFpLmMgbW9kdWxlIGZvciBkaXNjbGFpbWVy IGFuZCBwZXJtaXNzaW9ucy4KKyovCisKKyNpZm5kZWYgQ0tVQ01EX0gKKyNkZWZpbmUgQ0tVQ01E X0gKKworLyogQ29tbWFuZCByZWNhbGwgKi8KKworI2lmZGVmIHBkcDExCQkJCS8qIE5vdCBlbm91 Z2ggcm9vbSBmb3IgdGhpcyAqLworI2lmbmRlZiBOT1JFQ0FMTAorI2RlZmluZSBOT1JFQ0FMTAor I2VuZGlmIC8qIE5PUkVDQUxMICovCisjZW5kaWYgLyogcGRwMTEgKi8KKworI2lmZGVmIERZTkFN SUMJCQkJLyogRHluYW1pYyBjb21tYW5kIGJ1ZmZlcnMgKi8KKy8qCisgIFVzZSBtYWxsb2MoKSB0 byBhbGxvY2F0ZSB0aGUgbWFueSBjb21tYW5kLXJlbGF0ZWQgYnVmZmVycyBpbiBja3VjbWQuYy4K KyovCisjaWZuZGVmIERDTURCVUYKKyNpZm5kZWYgTk9SRUNBTEwKKyNkZWZpbmUgTk9SRUNBTEwK KyNlbmRpZiAvKiBOT1JFQ0FMTCAqLworI2VuZGlmIC8qIERDTURCVUYgKi8KKworI2lmbmRlZiBO T1JFQ0FMTAorI2RlZmluZSBDS19SRUNBTEwKKyNlbHNlCisjaWZkZWYgQ0tfUkVDQUxMCisjdW5k ZWYgQ0tfUkVDQUxMCisjZW5kaWYgLyogQ0tfUkVDQUxMICovCisjZW5kaWYgLyogTk9SRUNBTEwg Ki8KKyNlbHNlCisjaWZuZGVmIE5PUkVDQUxMCisjZGVmaW5lIE5PUkVDQUxMCisjZW5kaWYgLyog IE5PUkVDQUxMICovCisjZW5kaWYgLyogRFlOQU1JQyAqLworCisjaWZkZWYgTk9SRUNBTEwKKyNp ZmRlZiBDS19SRUNBTEwKKyN1bmRlZiBDS19SRUNBTEwKKyNlbmRpZiAvKiBDS19SRUNBTEwgKi8K KyNlbmRpZiAvKiBOT1JFQ0FMTCAqLworCisjaWZkZWYgTk9SRUNBTEwKKyNpZm5kZWYgTk9BUlJP V0tFWVMKKyNkZWZpbmUgTk9BUlJPV0tFWVMKKyNlbmRpZiAvKiBOT0FSUk9XS0VZUyAqLworI2Vu ZGlmIC8qIE5PUkVDQUxMICovCisKKy8qIFNwZWNpYWwgZ2V0Y2hhcnMgKi8KKworI2lmZGVmIFZN UworI2lmZGVmIGdldGNoYXIJCQkJLyogVGhpcyBpcyBmb3IgVk1TIEdDQyAqLworI3VuZGVmIGdl dGNoYXIKKyNlbmRpZiAvKiBnZXRjaGFyICovCisjZGVmaW5lIGdldGNoYXIoKSAgIHZtc19nZXRj aGFyKCkKK2ludCB2bXNfZ2V0Y2hhcih2b2lkKTsKKyNlbmRpZiAvKiBWTVMgKi8KKworI2lmZGVm IGFlZ2lzCisjdW5kZWYgZ2V0Y2hhcgorI2RlZmluZSBnZXRjaGFyKCkgICBjb25pbmMoMCkKKyNl bmRpZiAvKiBhZWdpcyAqLworCisjaWZkZWYgQU1JR0EKKyN1bmRlZiBnZXRjaGFyCisjZGVmaW5l IGdldGNoYXIoKSBjb25pbmMoMCkKKyNlbmRpZiAvKiBBTUlHQSAqLworCisjaWZkZWYgUGxhbjkK KyN1bmRlZiBnZXRjaGFyCisjZGVmaW5lIGdldGNoYXIoKSBjb25pbmMoMCkKKyN1bmRlZiBwdXRj aGFyCisjZGVmaW5lIHB1dGNoYXIoYykgY29ub2MoYykKKyN1bmRlZiBwcmludGYKKyNkZWZpbmUg cHJpbnRmIGNvbnByaW50CisjZW5kaWYgLyogUGxhbjkgKi8KKworLyogU2l6ZXMgb2YgdGhpbmdz ICovCisKKyNpZm5kZWYgQ01EREVQCisjaWZkZWYgQklHQlVGT0sKKyNkZWZpbmUgQ01EREVQICA2 NAkJCS8qIE1heGltdW0gY29tbWFuZCByZWN1cnNpb24gZGVwdGggKi8KKyNlbHNlCisjZGVmaW5l IENNRERFUCAgMjAKKyNlbmRpZiAvKiBCSUdCVUZPSyAqLworI2VuZGlmIC8qIENNRERFUCAqLwor I2RlZmluZSBITFBMVyAgIDc4CQkJLyogV2lkdGggb2YgPy1oZWxwIGxpbmUgKi8KKyNkZWZpbmUg SExQQ1cgICAxOQkJCS8qIFdpZHRoIG9mID8taGVscCBjb2x1bW4gKi8KKyNkZWZpbmUgSExQQkwg IDEwMAkJCS8qIEhlbHAgc3RyaW5nIGJ1ZmZlciBsZW5ndGggKi8KKyNpZmRlZiBCSUdCVUZPSwor I2RlZmluZSBBVE1CTCAxMDIzOAkJCS8qIENvbW1hbmQgYXRvbSBidWZmZXIgbGVuZ3RoKi8KKyNl bHNlCisjaWZkZWYgTk9TUEwKKyNkZWZpbmUgQVRNQkwgIDI1NgorI2Vsc2UKKyNkZWZpbmUgQVRN QkwgIDEwMjQKKyNlbmRpZiAvKiBOT1NQTCAqLworI2VuZGlmIC8qIEJJR0JVRk9LICovCisKKyNp Zm5kZWYgQ01EQkwKKyNpZmRlZiBOT1NQTAorLyogTm8gc2NyaXB0IHByb2dyYW1taW5nIGxhbmd1 YWdlLCBzYXZlIHNvbWUgc3BhY2UgKi8KKyNkZWZpbmUgQ01EQkwgNjA4CQkJLyogQ29tbWFuZCBi dWZmZXIgbGVuZ3RoICovCisjZWxzZQorI2lmZGVmIEJJR0JVRk9LCisjZGVmaW5lIENNREJMIDMy NzYzCisjZWxzZQorI2RlZmluZSBDTURCTCA0MDkyCisjZW5kaWYgLyogT1MyICovCisjZW5kaWYg LyogTk9TUEwgKi8KKyNlbmRpZiAvKiBDTURCTCAqLworCisvKiBTcGVjaWFsIGNoYXJhY3RlcnMg Ki8KKworI2RlZmluZSBSRElTIDAwMjIJCQkvKiBSZWRpc3BsYXkgICAoXlIpICovCisjZGVmaW5l IExERUwgMDAyNQkJCS8qIERlbGV0ZSBsaW5lICheVSkgKi8KKyNkZWZpbmUgV0RFTCAwMDI3CQkJ LyogRGVsZXRlIHdvcmQgKF5XKSAqLworI2lmZGVmIENLX1JFQ0FMTAorI2RlZmluZSBDX1VQIDAw MjAJCQkvKiBHbyBVcCBpbiByZWNhbGwgYnVmZmVyICheUCkgKi8KKyNkZWZpbmUgQ19VUDIgMDAw MgkJCS8qIEFsdGVybmF0ZSBHbyBVcCAoXkIpIGZvciBWTVMgKi8KKyNkZWZpbmUgQ19ETiAwMDE2 CQkJLyogR28gRG93biBpbiByZWNhbGwgYnVmZmVyICheTikgKi8KKyNlbmRpZiAvKiBDS19SRUNB TEwgKi8KKworLyogS2V5d29yZCBmbGFncyAoYml0cywgcG93ZXJzIG9mIDIpICovCisKKyNkZWZp bmUgQ01fSU5WIDEJCQkvKiBJbnZpc2libGUga2V5d29yZCAqLworI2RlZmluZSBDTV9BQlIgMgkJ CS8qIEFiYnJldmlhdGlvbiBmb3IgYW5vdGhlciBrZXl3b3JkICovCisjZGVmaW5lIENNX0hMUCA0 CQkJLyogSGVscC1vbmx5IGtleXdvcmQgKi8KKyNkZWZpbmUgQ01fQVJHIDgJCQkvKiBBbiBhcmd1 bWVudCBpcyByZXF1aXJlZCAqLworI2RlZmluZSBDTV9OT1IgMTYJCQkvKiBObyByZWNhbGwgZm9y IHRoaXMgY29tbWFuZCAqLworI2RlZmluZSBDTV9QUkUgMzIJCQkvKiBMb25nLWZvcm0gY21kbGlu ZSBhcmcgZm9yIHByZXNjYW4gKi8KKyNkZWZpbmUgQ01fUFNIIDY0CQkJLyogQ29tbWFuZCBkaXNh YmxlZCBpZiBub3B1c2ggKi8KKyNkZWZpbmUgQ01fTE9DIDEyOAkJCS8qIENvbW1hbmQgZGlzYWJs ZWQgaWYgbm9sb2NhbCAqLworCisvKgorICBBIGxvbmctZm9ybSBjb21tYW5kIGxpbmUgb3B0aW9u IGlzIGEga2V5d29yZCB1c2luZyB0aGUgcmVndWxhciBzdHJ1Y3Qga2V5dGFiCisgIGFuZCBsb29r dXAgbWVjaGFuaXNtcy4gIEZsYWdzIHRoYXQgbWFrZSBzZW5zZSBpbiB0aGlzIGNvbnRleHQgYXJl IENNX0FSRywKKyAgaW5kaWNhdGluZyB0aGlzIG9wdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVudCAo b3BlcmFuZCksIGFuZCBDTV9QUkUsIHdoaWNoCisgIG1lYW5zIHRoaXMgb3B0aW9uIG11c3QgYmUg cHJvY2Vzc2VkIGJlZm9yZSB0aGUgaW5pdGlhbGl6YXRpb24gZmlsZS4gIFRoZQorICBhYnNlbmNl IG9mIENNX1BSRSBtZWFucyB0aGUgb3B0aW9uIGlzIHRvIGJlIHByb2Nlc3NlZCBhZnRlciB0aGUK KyAgaW5pdGlhbGl6YXRpb24gZmlsZSBpbiB0aGUgbm9ybWFsIG1hbm5lci4KKyovCisKKy8qIFRv a2VuIGZsYWdzIChudW1iZXJzKSAqLworCisjZGVmaW5lIENNVF9DT00gMAkJCS8qIENvbW1lbnQg KDsgb3IgIykgKi8KKyNkZWZpbmUgQ01UX1NIRSAxCQkJLyogU2hlbGwgZXNjYXBlICghKSAqLwor I2RlZmluZSBDTVRfTEJMIDIJCQkvKiBMYWJlbCAoOikgKi8KKyNkZWZpbmUgQ01UX0ZJTCAzCQkJ LyogSW5kaXJlY3QgZmlsZXNwZWMgKEApIChub3QgdXNlZCkgKi8KKworLyogUGF0aCBzZXBhcmF0 b3IgZm9yIHBhdGggc2VhcmNoZXMgKi8KKworI2lmZGVmIE9TMgorI2RlZmluZSBQQVRIU0VQICc7 JworI2Vsc2UKKyNpZmRlZiBVTklYCisjZGVmaW5lIFBBVEhTRVAgJzonCisjZWxzZQorI2RlZmlu ZSBQQVRIU0VQICcsJworI2VuZGlmIC8qIFVOSVggKi8KKyNlbmRpZiAvKiBPUzIgKi8KKworI2lm bmRlZiBDS19LRVlUQUIKKyNkZWZpbmUgQ0tfS0VZVEFCCisKKy8qIEtleXdvcmQgVGFibGUgVGVt cGxhdGUgcGVyaGFwcyBhbHJlYWR5IGRlZmluZWQgaW4gY2tjZGViLmggKi8KKworc3RydWN0IGtl eXRhYiB7CQkJCS8qIEtleXdvcmQgdGFibGUgKi8KKyAgICBjaGFyICprd2Q7CQkJCS8qIFBvaW50 ZXIgdG8ga2V5d29yZCBzdHJpbmcgKi8KKyAgICBpbnQga3d2YWw7CQkJCS8qIEFzc29jaWF0ZWQg dmFsdWUgKi8KKyAgICBpbnQgZmxnczsJCQkJLyogRmxhZ3MgKGFzIGRlZmluZWQgYWJvdmUpICov Cit9OworI2VuZGlmIC8qIENLX0tFWVRBQiAqLworCisvKiBTdHJpbmcgcHJlcHJvY2Vzc2luZyBm dW5jdGlvbiAqLworCisjaWZkZWYgQ0tfQU5TSUMJCQkJLyogQU5TSSBDICovCisjaWZkZWYgTV9T WVNWCQkJCS8qIFNDTyBNaWNyb3NvZnQgQyB3YW50cyBubyBhcmdzICovCit0eXBlZGVmIGludCAo Knh4X3N0cnApKCk7CisjZWxzZQordHlwZWRlZiBpbnQgKCp4eF9zdHJwKShjaGFyICosIGNoYXIg KiosIGludCAqKTsKKyNlbmRpZiAvKiBNX1NZU1YgKi8KKyNlbHNlCQkJCQkvKiBOb3QgQU5TSSBD ICovCit0eXBlZGVmIGludCAoKnh4X3N0cnApKCk7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKwor LyogRkxEREIgc3RydWN0ICovCisKK3R5cGVkZWYgc3RydWN0IEZEQiB7CisgICAgaW50IGZjb2Rl OwkJCQkvKiBGdW5jdGlvbiBjb2RlICovCisgICAgY2hhciAqIGhscG1zZzsJCQkvKiBIZWxwIG1l c3NhZ2UgKi8KKyAgICBjaGFyICogZGZsdDsJCQkvKiBEZWZhdWx0ICovCisgICAgY2hhciAqIHNk YXRhOwkJCS8qIEFkZGl0aW9uYWwgc3RyaW5nIGRhdGEgKi8KKyAgICBpbnQgbmRhdGExOwkJCQkv KiBBZGRpdGlvbmFsIG51bWVyaWMgZGF0YSAxICovCisgICAgaW50IG5kYXRhMjsJCQkJLyogQWRk aXRpb25hbCBudW1lcmljIGRhdGEgMiAqLworICAgIHh4X3N0cnAgc3BmOwkJCS8qIFN0cmluZyBw cm9jZXNzaW5nIGZ1bmN0aW9uICovCisgICAgc3RydWN0IGtleXRhYiAqIGt3ZHRibDsJCS8qIEtl eXdvcmQgdGFibGUgKi8KKyAgICBzdHJ1Y3QgRkRCICogbnh0ZmRiOwkJLyogUG9pbnRlciB0byBu ZXh0IGFsdGVybmF0aXZlICovCit9IGZkYjsKKwordHlwZWRlZiBzdHJ1Y3QgT0ZEQiB7CisgICAg c3RydWN0IEZEQiAqIGZkYmFkZHI7CQkvKiBBZGRyZXNzIG9mIHN1Y2NlZWRpbmcgRkRCIHN0cnVj dCAqLworICAgIGludCBmY29kZTsJCQkJLyogRnVuY3Rpb24gY29kZSAqLworICAgIGNoYXIgKiBz cmVzdWx0OwkJCS8qIFN0cmluZyByZXN1bHQgKi8KKyAgICBpbnQgbnJlc3VsdDsJCQkvKiBJbnRl Z2VyIHJlc3VsdCAqLworICAgIGludCBrZmxhZ3M7CQkJCS8qIEtleXdvcmQgZmxhZ3MgaWYgYW55 ICovCisgICAgQ0tfT0ZGX1Qgd3Jlc3VsdDsJCQkvKiBMb25nIGludGVnZXIgKCJ3aWRlIikgcmVz dWx0ICovCit9IG9mZGI7CisKKyNpZm5kZWYgQ0tVQ01EX0MKK2V4dGVybiBzdHJ1Y3QgT0ZEQiBj bXJlc3VsdDsKKyNlbmRpZiAvKiBDS1VDTURfQyAqLworCisvKiBDb2RlcyBmb3IgcHJpbWFyeSBw YXJzaW5nIGZ1bmN0aW9uICAqLworCisjZGVmaW5lIF9DTU5VTSAwCQkJLyogTnVtYmVyICovCisj ZGVmaW5lIF9DTU9GSSAxCQkJLyogT3V0cHV0IGZpbGUgKi8KKyNkZWZpbmUgX0NNSUZJIDIJCQkv KiBJbnB1dCBmaWxlICovCisjZGVmaW5lIF9DTUZMRCAzCQkJLyogQXJiaXRyYXJ5IGZpZWxkICov CisjZGVmaW5lIF9DTVRYVCA0CQkJLyogVGV4dCBzdHJpbmcgKi8KKyNkZWZpbmUgX0NNS0VZIDUJ CQkvKiBLZXl3b3JkICovCisjZGVmaW5lIF9DTUNGTSA2CQkJLyogQ29uZmlybWF0aW9uICovCisj ZGVmaW5lIF9DTURBVCA3CQkJLyogRGF0ZS90aW1lICovCisjZGVmaW5lIF9DTU5VVyA4CQkJLyog V2lkZSB2ZXJzaW9uIG9mIGNtbnVtICovCisKKy8qIEZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KKwor X1BST1RPVFlQKCBpbnQgeHhlc2MsIChjaGFyICoqKSApOworX1BST1RPVFlQKCBpbnQgY21yaW5p LCAoaW50KSApOworX1BST1RPVFlQKCBWT0lEIGNtc2V0cCwgKGNoYXIgKikgKTsKK19QUk9UT1RZ UCggVk9JRCBjbXNhdnAsIChjaGFyIFtdLCBpbnQpICk7CitfUFJPVE9UWVAoIGNoYXIgKiBjbWdl dHAsICh2b2lkKSApOworX1BST1RPVFlQKCBWT0lEIHByb21wdCwgKHh4X3N0cnApICk7CitfUFJP VE9UWVAoIFZPSUQgcHVzaGNtZCwgKGNoYXIgKikgKTsKK19QUk9UT1RZUCggVk9JRCBjbXJlcywg KHZvaWQpICk7CitfUFJPVE9UWVAoIFZPSUQgY21pbmksIChpbnQpICk7CitfUFJPVE9UWVAoIGlu dCBjbWdicmssICh2b2lkKSApOworX1BST1RPVFlQKCBpbnQgY21na3dmbGdzLCAodm9pZCkgKTsK K19QUk9UT1RZUCggaW50IGNtcHVzaCwgKHZvaWQpICk7CitfUFJPVE9UWVAoIGludCBjbXBvcCwg KHZvaWQpICk7CitfUFJPVE9UWVAoIFZPSUQgdW50YWIsIChjaGFyICopICk7CitfUFJPVE9UWVAo IGludCBjbW51bSwgKGNoYXIgKiwgY2hhciAqLCBpbnQsIGludCAqLCB4eF9zdHJwICkgKTsKK19Q Uk9UT1RZUCggaW50IGNtbnVtdywgKGNoYXIgKiwgY2hhciAqLCBpbnQsIENLX09GRl9UICosIHh4 X3N0cnAgKSApOworX1BST1RPVFlQKCBpbnQgY21vZmksIChjaGFyICosIGNoYXIgKiwgY2hhciAq KiwgeHhfc3RycCApICk7CitfUFJPVE9UWVAoIGludCBjbWlmaSwgKGNoYXIgKiwgY2hhciAqLCBj aGFyICoqLCBpbnQgKiwgeHhfc3RycCApICk7CitfUFJPVE9UWVAoIGludCBjbWlvZmksIChjaGFy ICosIGNoYXIgKiwgY2hhciAqKiwgaW50ICosIHh4X3N0cnAgKSApOworX1BST1RPVFlQKCBpbnQg Y21pZmlwLChjaGFyICosIGNoYXIgKiwgY2hhciAqKiwgaW50ICosIGludCwgY2hhciAqLCB4eF9z dHJwICkpOworX1BST1RPVFlQKCBpbnQgY21pZmkyLChjaGFyICosY2hhciAqLGNoYXIgKiosaW50 ICosaW50LGNoYXIgKix4eF9zdHJwLGludCApKTsKK19QUk9UT1RZUCggaW50IGNtZGlyLCAoY2hh ciAqLCBjaGFyICosIGNoYXIgKiosIHh4X3N0cnAgKSApOworX1BST1RPVFlQKCBpbnQgY21kaXJw LCAoY2hhciAqLCBjaGFyICosIGNoYXIgKiosIGNoYXIgKiwgeHhfc3RycCApICk7CitfUFJPVE9U WVAoIGludCBjbWZsZCwgKGNoYXIgKiwgY2hhciAqLCBjaGFyICoqLCB4eF9zdHJwICkgKTsKK19Q Uk9UT1RZUCggaW50IGNtdHh0LCAoY2hhciAqLCBjaGFyICosIGNoYXIgKiosIHh4X3N0cnAgKSAp OworX1BST1RPVFlQKCBpbnQgY21rZXksICAoc3RydWN0IGtleXRhYiBbXSwgaW50LCBjaGFyICos IGNoYXIgKiwgeHhfc3RycCkgKTsKK19QUk9UT1RZUCggaW50IGNta2V5eCwgKHN0cnVjdCBrZXl0 YWIgW10sIGludCwgY2hhciAqLCBjaGFyICosIHh4X3N0cnApICk7CitfUFJPVE9UWVAoIGludCBj bWtleTIsKHN0cnVjdCBrZXl0YWIgW10saW50LGNoYXIgKixjaGFyICosY2hhciAqLHh4X3N0cnAs aW50KSk7CitfUFJPVE9UWVAoIGludCBjbXN3aSwgIChzdHJ1Y3Qga2V5dGFiIFtdLCBpbnQsIGNo YXIgKiwgY2hhciAqLCB4eF9zdHJwKSApOworX1BST1RPVFlQKCBpbnQgY21kYXRlLChjaGFyICos IGNoYXIgKiwgY2hhciAqKiwgaW50LCB4eF9zdHJwKSApOworX1BST1RPVFlQKCBjaGFyICogY21w ZWVrLCAodm9pZCkgKTsKK19QUk9UT1RZUCggaW50IGNtZmRiLCAoc3RydWN0IEZEQiAqKSApOwor X1BST1RPVFlQKCBWT0lEIGNtZmRiaSwgKHN0cnVjdCBGREIgKiwKKwkJCWludCwgY2hhciAqLCBj aGFyICosIGNoYXIgKiwgaW50LCBpbnQsIHh4X3N0cnAsCisJCQlzdHJ1Y3Qga2V5dGFiICosIHN0 cnVjdCBGREIgKikgKTsKK19QUk9UT1RZUCggaW50IGNoa3RvaywgKGNoYXIgKikgKTsKK19QUk9U T1RZUCggaW50IGNtY2ZtLCAodm9pZCkgKTsKK19QUk9UT1RZUCggaW50IGxvb2t1cCwgKHN0cnVj dCBrZXl0YWIgW10sIGNoYXIgKiwgaW50LCBpbnQgKikgKTsKK19QUk9UT1RZUCggVk9JRCBrd2Ro ZWxwLCAoc3RydWN0IGtleXRhYltdLGludCxjaGFyICosY2hhciAqLGNoYXIgKixpbnQsaW50KSAp OworX1BST1RPVFlQKCBpbnQgdW5nd29yZCwgKHZvaWQpICk7CitfUFJPVE9UWVAoIFZPSUQgdW51 bmd3LCAodm9pZCkgKTsKK19QUk9UT1RZUCggaW50IGNtZHNxdW8sIChpbnQpICk7CitfUFJPVE9U WVAoIGludCBjbWRncXVvLCAodm9pZCkgKTsKK19QUk9UT1RZUCggY2hhciAqIGNrY3Z0ZGF0ZSwg KGNoYXIgKiwgaW50KSApOworX1BST1RPVFlQKCBpbnQgY21kZ2V0YywgKGludCkpOworI2lmbmRl ZiBOT0FSUk9XS0VZUworX1BST1RPVFlQKCBpbnQgY21kY29uY2hrLCAodm9pZCkgKTsKKyNlbmRp ZiAvKiBOT0FSUk9XS0VZUyAqLworCisjaWZkZWYgQ0tfUkVDQUxMCitfUFJPVE9UWVAoIGNoYXIg KiBjbWdldGNtZCwgKGNoYXIgKikgKTsKK19QUk9UT1RZUCggVk9JRCBhZGRjbWQsIChjaGFyICop ICk7CitfUFJPVE9UWVAoIFZPSUQgY21hZGRuZXh0LCAodm9pZCkgKTsKKyNlbmRpZiAvKiBDS19S RUNBTEwgKi8KK19QUk9UT1RZUCggY2hhciAqIGNtY3Z0ZGF0ZSwgKGNoYXIgKiwgaW50KSApOwor X1BST1RPVFlQKCBjaGFyICogY21kaWZmZGF0ZSwgKGNoYXIgKiwgY2hhciAqKSApOworX1BST1RP VFlQKCBjaGFyICogY21kZWx0YSwgKGludCwKKwkJCSAgICBpbnQsaW50LGludCxpbnQsaW50LGlu dCxpbnQsaW50LGludCxpbnQsaW50LGludCApKTsKK19QUk9UT1RZUCggY2hhciAqIHNodWZmbGVk YXRlLCAoY2hhciAqLCBpbnQpICk7CitfUFJPVE9UWVAoIGludCBmaWxoZWxwLCAoaW50LCBjaGFy ICosIGNoYXIgKiwgaW50LCBpbnQpICk7CitfUFJPVE9UWVAoIGludCB4ZmlsaGVscCwgKGludCwg Y2hhciAqLCBjaGFyICosIGludCwgaW50LAorCQkJICBpbnQsCisJCQkgIGNoYXIgKiwgY2hhciAq LCBjaGFyICosIGNoYXIgKiwKKwkJCSAgQ0tfT0ZGX1QsIENLX09GRl9ULAorCQkJICBpbnQsIGlu dCwKKwkJCSAgY2hhciAqKikgKTsKK19QUk9UT1RZUCggaW50IGRlbHRhMnNlYywgKGNoYXIgKiwg bG9uZyAqKSApOworCisjaWZkZWYgRENNREJVRgorX1BST1RPVFlQKCBpbnQgY21zZXR1cCwgKHZv aWQpICk7CisjZW5kaWYgLyogRENNREJVRiAqLworCisjZW5kaWYgLyogQ0tVQ01EX0ggKi8KKwor LyogRW5kIG9mIGNrdWNtZC5oICovCgpkaWZmIC0tZ2l0IGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxk L2NrZXJtaXQtOS4wLjMwMi9ja3VjbnMuYyBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0 LTkuMC4zMDIvY2t1Y25zLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzM3 MTk3YwotLS0gL2Rldi9udWxsCisrKyBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTku MC4zMDIvY2t1Y25zLmMKQEAgLTAsMCArMSwyNzIwIEBACisjaW5jbHVkZSAiY2tjc3ltLmgiCitj aGFyICpjb25udiA9ICJDT05ORUNUIENvbW1hbmQgZm9yIFVOSVg6c2VsZWN0KCksIDkuMC4xMzks IDEgTWFyIDIwMTAiOworCisvKiAgQyBLIFUgQyBOIFMgIC0tICBUZXJtaW5hbCBjb25uZWN0aW9u IHRvIHJlbW90ZSBzeXN0ZW0sIGZvciBVTklYICAqLworLyoKKyAgQXV0aG9yOiBGcmFuayBkYSBD cnV6IDxmZGNAY29sdW1iaWEuZWR1PiwKKyAgQ29sdW1iaWEgVW5pdmVyc2l0eSBBY2FkZW1pYyBJ bmZvcm1hdGlvbiBTeXN0ZW1zLCBOZXcgWW9yayBDaXR5LgorCisgIENvcHlyaWdodCAoQykgMTk4 NSwgMjAxMCwKKyAgICBUcnVzdGVlcyBvZiBDb2x1bWJpYSBVbml2ZXJzaXR5IGluIHRoZSBDaXR5 IG9mIE5ldyBZb3JrLgorICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBTZWUgdGhlIEMtS2VybWl0 IENPUFlJTkcuVFhUIGZpbGUgb3IgdGhlCisgICAgY29weXJpZ2h0IHRleHQgaW4gdGhlIGNrY21h aS5jIG1vZHVsZSBmb3IgZGlzY2xhaW1lciBhbmQgcGVybWlzc2lvbnMuCisqLworCisvKgorICBU aGlzIHZlcnNpb24gb2YgdGhlIFVOSVggQ09OTkVDVCBtb2R1bGUgdXNlcyBzZWxlY3QoKSwgd2hp Y2ggaXMgcmVxdWlyZWQgZm9yCisgIEtlcmJlcm9zIGVuY3J5cHRpb24uICBUaHVzIGl0IGNhbiBi ZSB1c2VkIG9ubHkgb24gVU5JWCBzeXN0ZW1zIHRoYXQgc3VwcG9ydAorICBzZWxlY3QoKSBvbiBi b3RoIFRDUC9JUCBhbmQgc2VyaWFsIGNvbm5lY3Rpb25zLiAgQSBzZXBhcmF0ZSBtb2R1bGUgdGhh dCB1c2VzCisgIGEgY29tcGxldGVseSBwb3J0YWJsZSBmb3JrKCkgc3RydWN0dXJlIGNhbiBiZSB1 c2VkIG9uIHN5c3RlbXMgd2hlcmUgc2VsZWN0KCkKKyAgaXMgbm90IGF2YWlsYWJsZSBvciBkb2Vz IG5vdCB3b3JrIGFzIHJlcXVpcmVkLgorKi8KKworI2luY2x1ZGUgImNrY2RlYi5oIgkJCS8qIENv bW1vbiB0aGluZ3MgZmlyc3QgKi8KKworI2lmbmRlZiBOT0xPQ0FMCisKKyNpZmRlZiBPU0YxMwor I2lmZGVmIENLX0FOU0lDCisjaWZkZWYgX05PX1BST1RPCisjdW5kZWYgX05PX1BST1RPCisjZW5k aWYgLyogX05PX1BST1RPICovCisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKyNlbmRpZiAvKiBPU0Yx MyAqLworCisjaW5jbHVkZSA8ZXJybm8uaD4JCQkvKiBFcnJvciBudW1iZXJzICovCisKKyNpZm5k ZWYgTk9USU1FSAorI2luY2x1ZGUgPHRpbWUuaD4JCQkvKiBGb3IgRkRfYmxhaCAqLworI2lmZGVm IFNZU1RJTUVICQkJCS8qIChJUklYIDUuMykgKi8KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2Vu ZGlmIC8qIFNZU1RJTUVIICovCisjZW5kaWYgLyogTk9USU1FSCAqLworCisjaWZkZWYgQlNENDJI QUNLCQkJLyogV2h5IGlzIHRoaXMgbmVjZXNzYXJ5PyAqLworI2lmbmRlZiBEQ0xUSU1FVkFMCisj ZGVmaW5lIERDTFRJTUVWQUwKKyNlbmRpZiAvKiBEQ0xUSU1FVkFMICovCisjZW5kaWYgLyogQlNE NDJIQUNLICovCisKKy8qIEtlcm1pdC1zcGVjaWZpYyBpbmNsdWRlcyAqLworCisjaW5jbHVkZSAi Y2tjYXNjLmgiCQkJLyogQVNDSUkgY2hhcmFjdGVycyAqLworI2luY2x1ZGUgImNrY2tlci5oIgkJ CS8qIEtlcm1pdCB0aGluZ3MgKi8KKyNpbmNsdWRlICJja3VjbWQuaCIJCQkvKiBGb3IgeHhlc2Mo KSBwcm90b3R5cGUgKi8KKyNpbmNsdWRlICJja2NuZXQuaCIJCQkvKiBOZXR3b3JrIHN5bWJvbHMg Ki8KKyNpZm5kZWYgTk9DU0VUUworI2luY2x1ZGUgImNrY3hsYS5oIgkJCS8qIENoYXJhY3RlciBz ZXQgdHJhbnNsYXRpb24gKi8KKyNlbmRpZiAvKiBOT0NTRVRTICovCisKKyNpZmRlZiBCRUJPWAor I2luY2x1ZGUgPGtlcm5lbC9PUy5oPgorI2luY2x1ZGUgPHNvY2tldC5oPgorI2luY2x1ZGUgPHN0 ZGlvLmg+CisjZW5kaWYgLyogQkVCT1ggKi8KKworI2luY2x1ZGUgPHNpZ25hbC5oPgkJCS8qIFNp Z25hbHMgKi8KKworLyogQWxsIHRoZSBmb2xsb3dpbmcgaXMgZm9yIHNlbGVjdCgpLi4uICovCisK KyNpZmRlZiBDS1RJRExFCQkJCS8qIFRpbWVvdXRzIG9ubHkgZm9yIFNFVCBURVJNIElETEUgKi8K KworI2lmbmRlZiBEQ0xUSU1FVkFMCisjaWZkZWYgVU5JWFdBUkUKKyNpZm5kZWYgVVc3CisjZGVm aW5lIERDTFRJTUVWQUwKKyNlbmRpZiAvKiBVVzcgKi8KKyNlbmRpZiAvKiBVTklYV0FSRSAqLwor I2VuZGlmIC8qIERDTFRJTUVWQUwgKi8KKworI2lmZGVmIERDTFRJTUVWQUwJCQkvKiBEZWNsYXJl IHRpbWV2YWwgb3Vyc2VsdmVzICovCitzdHJ1Y3QgdGltZXZhbCB7CisgICAgbG9uZyB0dl9zZWM7 CisgICAgbG9uZyB0dl91c2VjOworfTsKKyNlbHNlICAvKiAhRENMVElNRVZBTCAqLworI2lmbmRl ZiBOT1NZU1RJTUVCSAorI2lmZGVmIFNZU1RJTUVCSAorI2luY2x1ZGUgPHN5cy90aW1lYi5oPgor I2VuZGlmIC8qIFNZU1RJTUVCSCAqLworI2VuZGlmIC8qIE5PU1lTVElNRUJIICovCisjZW5kaWYg LyogRENMVElNRVZBTCAqLworI2VuZGlmIC8qIENLVElETEUgKi8KKworI2lmbmRlZiBTQ09fT1NS NTA0CisjaWZkZWYgU0VMRUNUX0gKKyNpbmNsdWRlIDxzeXMvc2VsZWN0Lmg+CisjZW5kaWYgLyog U0VMRUNUX0ggKi8KKyNlbmRpZiAvKiBTQ09fT1NSNTA0ICovCisKKyNpZm5kZWYgRkRfU0VUU0la RQorI2lmZGVmIENLX0ZPUldBUkRfWAorI2RlZmluZSBGRF9TRVRTSVpFIDI1NgorI2Vsc2UKKyNk ZWZpbmUgRkRfU0VUU0laRSAzMgorI2VuZGlmIC8qIENLX0ZPUldBUkRfWCAqLworI2VuZGlmIC8q IEZEX1NFVFNJWkUgKi8KKworI2lmZGVmIEhQVVgKKyNpZm5kZWYgSFBVWDEwCisjaWZuZGVmIEhQ VVgxMTAwCisvKiBUaGUgdGhyZWUgaW50ZXJpb3IgYXJncyB0byBzZWxlY3QoKSBhcmUgKGludCAq KSByYXRoZXIgdGhhbiAoZmRfc2V0ICopICovCisjaWZuZGVmIElOVFNFTEVDVAorI2RlZmluZSBJ TlRTRUxFQ1QKKyNlbmRpZiAvKiBJTlRTRUxFQ1QgKi8KKyNlbmRpZiAvKiBIUFVYMTEwMCAqLwor I2VuZGlmIC8qIEhQVVgxMCAqLworI2VuZGlmIC8qIEhQVVggKi8KKworLyogSW50ZXJuYWwgZnVu Y3Rpb24gcHJvdG90eXBlcyAqLworCisjaWZkZWYgTkVXRlRQCisjZW5kaWYgLyogTkVXRlRQICov CitfUFJPVE9UWVAoIFZPSUQgdHRmbHV4LCAodm9pZCkgKTsKK19QUk9UT1RZUCggVk9JRCBkb2Vz YywgKGNoYXIpICk7CitfUFJPVE9UWVAoIGludCBoY29ubmUsICh2b2lkKSApOworI2lmbmRlZiBO T1NIT1cKK19QUk9UT1RZUCggVk9JRCBzaG9tZG0sICh2b2lkKSApOworI2VuZGlmIC8qIE5PU0hP VyAqLworX1BST1RPVFlQKCBzdGF0aWMgaW50IGtiZ2V0LCAodm9pZCkgKTsKK19QUk9UT1RZUCgg c3RhdGljIGludCBja2NwdXRmLCAodm9pZCkgKTsKKworLyogRXh0ZXJuYWwgdmFyaWFibGVzICov CisKK2V4dGVybiBzdHJ1Y3QgY2tfcCBwdGFiW107CisKK2V4dGVybiBpbnQgbG9jYWwsIGVzY2Fw ZSwgZHVwbGV4LCBwYXJpdHksIGZsb3csIHNlc2xvZywgc2Vzc2Z0LCBkZWJzZXMsCisgbWRtdHlw LCB0dG5wcm90bywgY21hc2ssIGNtZG1zaywgbmV0d29yaywgbmV0dHlwZSwgc29zaSwgdG5sbSwK KyB4aXRzdGEsIHdoYXQsIHR0eWZkLCB0dHBpcGUsIHF1aWV0LCBiYWNrZ3JkLCBwZmxhZywgdHRf Y3JkLCB0dF9sZmQsCisgdG5fbmxtLCB0dGZkZmxnLAorIHR0X2VzY2FwZSwganVzdG9uZSwgY2Fy cmllciwgdHRwdHksIGh3cGFyaXR5OworCisjaWZuZGVmIE5PRElBTAorZXh0ZXJuIGludCBkaWFs bWh1LCBkaWFsc3RhOworI2VuZGlmIC8qIE5PRElBTCAqLworCisjaWZkZWYgQ0tMRUFSTgorZXh0 ZXJuIEZJTEUgKiBsZWFybmZwOworZXh0ZXJuIGludCBsZWFybmluZzsKK3N0YXRpYyBVTE9ORyBs ZWFybnQxOworc3RhdGljIGNoYXIgbGVhcm5idWZbTEVBUk5CVUZTSVpdID0geyBOVUwsIE5VTCB9 Oworc3RhdGljIGludCAgbGVhcm5iYyA9IDA7CitzdGF0aWMgaW50ICBsZWFybmJwID0gMDsKK3N0 YXRpYyBpbnQgIGxlYXJuc3QgPSAwOworI2VuZGlmIC8qIENLTEVBUk4gKi8KKworZXh0ZXJuIGxv bmcgc3BlZWQ7CitleHRlcm4gY2hhciB0dG5hbWVbXSwgc2VzZmlsW10sIG15aG9zdFtdLCAqY2Nu dGFiW107CisjaWZkZWYgVE5DT0RFCitleHRlcm4gaW50IHRuX2JfbmxtLCB0bl9yZW1fZWNobzsK KyNlbmRpZiAvKiBUTkNPREUgKi8KKworI2lmZGVmIENLX1RSSUdHRVIKK2V4dGVybiBjaGFyICog dHRfdHJpZ2dlcltdLCAqIHRyaWdnZXJ2YWw7CisjZW5kaWYgLyogQ0tfVFJJR0dFUiAqLworCisj aWZkZWYgQ0tUSURMRQorZXh0ZXJuIGludCB0dF9pZGxlbGltaXQsIHR0X2lkbGVhY3Q7CitleHRl cm4gY2hhciAqIHR0X2lkbGVzdHI7CitzdGF0aWMgaW50IGlkbGVsaW1pdCA9IDA7CisjZW5kaWYg LyogQ0tUSURMRSAqLworZXh0ZXJuIGludCBjeF9zdGF0dXM7CQkJLyogQ09OTkVDVCBzdGF0dXMg Y29kZSAqLworCitleHRlcm4gaW50IG5vcHVzaDsKKworI2lmZGVmIENLX0FQQworZXh0ZXJuIGlu dCBhcGNhY3RpdmU7CQkJLyogQXBwbGljYXRpb24gUHJvZ3JhbSBDb21tYW5kIChBUEMpICovCitl eHRlcm4gaW50IGFwY3N0YXR1czsJCQkvKiBpdGVtcyAuLi4gKi8KK3N0YXRpYyBpbnQgYXBjbGVu Z3RoID0gMDsKKyNpZmRlZiBEQ01EQlVGCitleHRlcm4gY2hhciAqYXBjYnVmOworI2Vsc2UKK2V4 dGVybiBjaGFyIGFwY2J1ZltdOworI2VuZGlmIC8qIERDTURCVUYgKi8KK3N0YXRpYyBpbnQgYXBj YnVmbGVuID0gQVBDQlVGTEVOIC0gMjsKK2V4dGVybiBpbnQgcHJvdG9jb2w7CisjZW5kaWYgLyog Q0tfQVBDICovCisjaWZuZGVmIE5PWEZFUgorZXh0ZXJuIGludCBhdXRvZGw7CQkJLyogQXV0byBk b3dubG9hZCAqLworI2VuZGlmIC8qIE5PWEZFUiAqLworCisjaWZkZWYgQ0tfQVVUT0RMCitleHRl cm4gQ0hBUiBrc2J1ZltdOworZXh0ZXJuIENIQVIgc3RjaHI7CitleHRlcm4gaW50IGtzdGFydGFj dGl2ZTsKKyNlbmRpZiAvKiBDS19BVVRPREwgKi8KKworI2lmZGVmIENLX0VOQ1JZUFRJT04KK2V4 dGVybiBpbnQgbWVfYXV0aDsKKyNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCisKKyNpZmRlZiBD S19YWVoKKyNpZmRlZiBYWVpfSU5URVJOQUwKK3N0YXRpYyBpbnQgem1kbG9rID0gMTsJCQkvKiBa bW9kZW0gYXV0b2Rvd25sb2FkcyBhdmFpbGFibGUgKi8KKyNlbHNlCitzdGF0aWMgaW50IHptZGxv ayA9IDA7CQkJLyogRGVwZW5kcyBvbiBleHRlcm5hbCBwcm90b2NvbCBkZWYgKi8KKyNlbmRpZiAv KiBYWVpfSU5URVJOQUwgKi8KKyNlbHNlCitzdGF0aWMgaW50IHptZGxvayA9IDA7CQkJLyogTm90 IGF2YWlsYWJsZSBhdCBhbGwgKi8KKyNlbmRpZiAvKiBDS19YWVogKi8KKworI2lmbmRlZiBOT1NF VEtFWQkJCS8qIEtleWJvYXJkIG1hcHBpbmcgKi8KK2V4dGVybiBLRVkgKmtleW1hcDsJCQkvKiBT aW5nbGUtY2hhcmFjdGVyIGtleSBtYXAgKi8KK2V4dGVybiBNQUNSTyAqbWFjcm90YWI7CQkJLyog S2V5IG1hY3JvIHBvaW50ZXIgdGFibGUgKi8KK3N0YXRpYyBNQUNSTyBrbXB0ciA9IE5VTEw7CQkv KiBQb2ludGVyIHRvIGN1cnJlbnQga2V5IG1hY3JvICovCisjZW5kaWYgLyogTk9TRVRLRVkgKi8K KworLyogR2xvYmFsIHZhcmlhYmxlcyBsb2NhbCB0byB0aGlzIG1vZHVsZSAqLworCitzdGF0aWMg aW50CisgIGFjdGl2ZSA9IDAsCisgIHF1aXRub3cgPSAwLAkJCQkvKiA8ZXNjLWNoYXI+USB3YXMg dHlwZWQgKi8KKyAgZG9oYW5ndXAgPSAwLAkJCQkvKiA8ZXNjLWNoYXI+SCB3YXMgdHlwZWQgKi8K KyAgaW5zaGlmdCA9IDAsCQkJCS8qIFNPL1NJIHNoaWZ0IHN0YXRlcyAqLworICBvdXRzaGlmdCA9 IDA7CisKK3N0YXRpYyBjaGFyIGVjYnVmWzEwXSwgKmVjYnA7CQkvKiBFc2NhcGUgY2hhciBidWZm ZXIgJiBwb2ludGVyICovCisKKyNpZmRlZiBDS19TTUFMTAorI2RlZmluZSBJQlVGTCAxNTM2CQkJ LyogSW5wdXQgYnVmZmVyIGxlbmd0aCAqLworI2Vsc2UKKyNkZWZpbmUgSUJVRkwgNDA5NgorI2Vu ZGlmIC8qIENLX1NNQUxMICovCisKK3N0YXRpYyBpbnQgb2JjID0gMDsJCQkvKiBPdXRwdXQgYnVm ZmVyIGNvdW50ICovCisKKyNpZm5kZWYgT1hPUworI2RlZmluZSBPQlVGTCAxMDI0CQkJLyogT3V0 cHV0IGJ1ZmZlciBsZW5ndGggKi8KKyNlbHNlCisjZGVmaW5lIE9CVUZMIElCVUZMCisjZW5kaWYg LyogT1hPUyAqLworCisjaWZkZWYgQklHQlVGT0sKKyNkZWZpbmUgVE1QTEVOIDQwOTYJCQkvKiBU ZW1wb3JhcnkgbWVzc2FnZSBidWZmZXIgbGVuZ3RoICovCisjZWxzZQorI2RlZmluZSBUTVBMRU4g MjAwCisjZW5kaWYgLyogQklHQlVGT0sgKi8KKworI2lmZGVmIERZTkFNSUMKK3N0YXRpYyBjaGFy ICppYnVmID0gTlVMTCwgKm9idWYgPSBOVUxMLCAqdGVtcCA9IE5VTEw7IC8qIEJ1ZmZlcnMgKi8K KyNlbHNlCitzdGF0aWMgY2hhciBpYnVmW0lCVUZMXSwgb2J1ZltPQlVGTF0sIHRlbXBbVE1QTEVO XTsKKyNlbmRpZiAvKiBEWU5BTUlDICovCisKKyNpZmRlZiBUTkNPREUKK3N0YXRpYyBjaGFyIHRu b3B0WzRdOworI2VuZGlmIC8qIFROQ09ERSAqLworCisjaWZkZWYgRFlOQU1JQworc3RhdGljIGNo YXIgKmlicDsJCQkvKiBJbnB1dCBidWZmZXIgcG9pbnRlciAqLworI2Vsc2UKK3N0YXRpYyBjaGFy ICppYnAgPSBpYnVmOwkJLyogSW5wdXQgYnVmZmVyIHBvaW50ZXIgKi8KKyNlbmRpZiAvKkRZTkFN SUMgKi8KK3N0YXRpYyBpbnQgaWJjID0gMDsJCQkvKiBJbnB1dCBidWZmZXIgY291bnQgKi8KKwor I2lmZGVmIERZTkFNSUMKK3N0YXRpYyBjaGFyICpvYnA7CQkJLyogT3V0cHV0IGJ1ZmZlciBwb2lu dGVyICovCisjZWxzZQorc3RhdGljIGNoYXIgKm9icCA9IG9idWY7CQkvKiBPdXRwdXQgYnVmZmVy IHBvaW50ZXIgKi8KKyNlbmRpZiAvKiBEWU5BTUlDICovCisKKy8qIENoYXJhY3Rlci1zZXQgaXRl bXMgKi8KKworc3RhdGljIGludCB1bmljb2RlID0gMDsKKworI2lmbmRlZiBOT0NTRVRTCisjaWZk ZWYgQ0tfQU5TSUMgLyogQU5TSSBDIHByb3RvdHlwZXMuLi4gKi8KK2V4dGVybiBDSEFSICgqeGxz W01BWFRDU0VUUysxXVtNQVhGQ1NFVFMrMV0pKENIQVIpOyAvKiBDaGFyYWN0ZXIgc2V0ICovCitl eHRlcm4gQ0hBUiAoKnhscltNQVhUQ1NFVFMrMV1bTUFYRkNTRVRTKzFdKShDSEFSKTsgLyogdHJh bnNsYXRpb24gZnVuY3Rpb25zICovCitzdGF0aWMgQ0hBUiAoKnN4bykoQ0hBUik7CS8qIExvY2Fs IHRyYW5zbGF0aW9uIGZ1bmN0aW9ucyAqLworc3RhdGljIENIQVIgKCpyeG8pKENIQVIpOwkvKiBm b3Igb3V0cHV0IChzZW5kaW5nKSB0ZXJtaW5hbCBjaGFycyAqLworc3RhdGljIENIQVIgKCpzeGkp KENIQVIpOwkvKiBhbmQgZm9yIGlucHV0IChyZWNlaXZpbmcpIHRlcm1pbmFsIGNoYXJzLiAqLwor c3RhdGljIENIQVIgKCpyeGkpKENIQVIpOworI2Vsc2UgLyogTm90IEFOU0kgQy4uLiAqLworZXh0 ZXJuIENIQVIgKCp4bHNbTUFYVENTRVRTKzFdW01BWEZDU0VUUysxXSkoKTsJLyogQ2hhcmFjdGVy IHNldCAqLworZXh0ZXJuIENIQVIgKCp4bHJbTUFYVENTRVRTKzFdW01BWEZDU0VUUysxXSkoKTsJ LyogdHJhbnNsYXRpb24gZnVuY3Rpb25zLiAqLworc3RhdGljIENIQVIgKCpzeG8pKCk7CQkvKiBM b2NhbCB0cmFuc2xhdGlvbiBmdW5jdGlvbnMgKi8KK3N0YXRpYyBDSEFSICgqcnhvKSgpOwkJLyog Zm9yIG91dHB1dCAoc2VuZGluZykgdGVybWluYWwgY2hhcnMgKi8KK3N0YXRpYyBDSEFSICgqc3hp KSgpOwkJLyogYW5kIGZvciBpbnB1dCAocmVjZWl2aW5nKSB0ZXJtaW5hbCBjaGFycy4gKi8KK3N0 YXRpYyBDSEFSICgqcnhpKSgpOworI2VuZGlmIC8qIENLX0FOU0lDICovCitleHRlcm4gaW50IGxh bmd1YWdlOwkJLyogQ3VycmVudCBsYW5ndWFnZS4gKi8KK3N0YXRpYyBpbnQgbGFuZ3N2OwkJLyog Rm9yIHJlbWVtYmVyaW5nIGxhbmd1YWdlIHNldHRpbmcuICovCitleHRlcm4gc3RydWN0IGNzaW5m byBmY3NpbmZvW107IC8qIEZpbGUgY2hhcmFjdGVyIHNldCBpbmZvLiAqLworZXh0ZXJuIGludCB0 Y3NyLCB0Y3NsOwkJLyogVGVybWluYWwgY2hhcmFjdGVyIHNldHMsIHJlbW90ZSAmIGxvY2FsLiAq Lworc3RhdGljIGludCB0Y3M7CQkJLyogSW50ZXJtZWRpYXRlICgidHJhbnNmZXIiKSBjaGFyYWN0 ZXIgc2V0LiAqLworc3RhdGljIGludCB0Y3NzaXplID0gMDsJCS8qIFNpemUgb2YgdGNzICovCisj aWZkZWYgVU5JQ09ERQkJCQkvKiBVVEYtOCBzdXBwb3J0ICovCisjaWZkZWYgQ0tfQU5TSUMKK2V4 dGVybiBpbnQgKCp4bF91ZmNbTUFYRkNTRVRTKzFdKShVU0hPUlQpOyAgLyogVW5pY29kZSB0byBG Q1MgKi8KK2V4dGVybiBVU0hPUlQgKCp4bF9mY3VbTUFYRkNTRVRTKzFdKShDSEFSKTsgLyogRkNT IHRvIFVuaWNvZGUgKi8KK2V4dGVybiBpbnQgKCp4dWYpKFVTSE9SVCk7CQkvKiBUcmFuc2xhdGlv biBmdW5jdGlvbiBVQ1MgdG8gRkNTICovCitleHRlcm4gVVNIT1JUICgqeGZ1KShDSEFSKTsJCS8q IFRyYW5zbGF0aW9uIGZ1bmN0aW9uIEZDUyB0byBVQ1MgKi8KKyNlbHNlCitleHRlcm4gaW50ICgq eGxfdWZjW01BWEZDU0VUUysxXSkoKTsKK2V4dGVybiBVU0hPUlQgKCp4bF9mY3VbTUFYRkNTRVRT KzFdKSgpOworZXh0ZXJuIGludCAoKnh1ZikoKTsKK2V4dGVybiBVU0hPUlQgKCp4ZnUpKCk7Cisj ZW5kaWYgLyogQ0tfQU5TSUMgKi8KKyNlbmRpZiAvKiBVTklDT0RFICovCisjZW5kaWYgLyogTk9D U0VUUyAqLworCitzdGF0aWMgaW50IHByaW50aW5nID0gMDsKKworLyoKKyAgV2UgZG8gbm90IG5l ZWQgdG8gcGFyc2UgYW5kIHJlY29nbml6ZSBlc2NhcGUgc2VxdWVuY2VzIGlmIHdlIGFyZSBiZWlu ZyBidWlsdAorICB3aXRob3V0IGNoYXJhY3Rlci1zZXQgc3VwcG9ydCBBTkQgd2l0aG91dCBBUEMg c3VwcG9ydC4KKyovCisjaWZkZWYgTk9FU0NTRVEKKyNpZmRlZiBYUFJJTlQKKyN1bmRlZiBYUFJJ TlQKKyNlbmRpZiAvKiBYUFJJTlQgKi8KKworI2Vsc2UgIC8qIE5PRVNDU0VRIG5vdCBkZWZpbmVk IGZyb20gb3V0c2lkZSAqLworCisjaWZkZWYgTk9DU0VUUwkJCQkvKiBObyBjaGFyYWN0ZXIgc2V0 cyAqLworI2lmbmRlZiBDS19BUEMJCQkJLyogTm8gQVBDICovCisjaWZuZGVmIFhQUklOVAkJCQkv KiBObyB0cmFuc3BhcmVudCBwcmludGluZyAqLworI2RlZmluZSBOT0VTQ1NFUQkJCS8qIFNvIG5v IGVzY2FwZSBzZXF1ZW5jZSByZWNvZ25pemVyICovCisjZW5kaWYgLyogWFBSSU5UICovCisjZW5k aWYgLyogQ0tfQVBDICovCisjZW5kaWYgLyogTk9DU0VUUyAqLworI2VuZGlmIC8qIE5PRVNDU0VR ICovCisKKy8qIGluZXNjW10gYW5kIG9sZGVzY1tdIG1hZGUgZ2xvYmFsIDIwMTAvMDMvMDEgZm9y IElOUFVUIGNvbW1hbmQgKi8KKworc3RhdGljIGludCBlc2NzZXEgPSAwOwkJCS8qIDEgPSBSZWNv Z25pemVyIGlzIGFjdGl2ZSAqLworLyogc3RhdGljICovIGludCBpbmVzY1syXSA9IHsgMCwgMCB9 OwkvKiBTdGF0ZSBvZiBzZXF1ZW5jZSByZWNvZ25pemVyICovCisvKiBzdGF0aWMgKi8gaW50IG9s ZGVzY1syXSA9IHsgLTEsIC0xIH07IC8qIFByZXZpb3VzIHN0YXRlIG9mIHJlY29nbml6ZXIgKi8K KworI2lmZGVmIE5PRVNDU0VRCisjZGVmaW5lIEVTX05PUk1BTCAwCQkJLyogTm9ybWFsLCBub3Qg aW4gYW4gZXNjYXBlIHNlcXVlbmNlICovCisjZGVmaW5lIGNoa2Flcyh4LHkpIDAKKyNlbHNlCisv KgorICBBcyBvZiBDLUtlcm1pdCA1QSgxNzgpLCB0aGUgQ09OTkVDVCBjb21tYW5kIHNraXBzIHBh c3QgQU5TSSBlc2NhcGUgc2VxdWVuY2VzCisgIHRvIGF2b2lkIHRyYW5zbGF0aW5nIHRoZSBjaGFy YWN0ZXJzIHdpdGhpbiB0aGVtLiAgVGhpcyBhbGxvd3MgdGhlIENPTk5FQ1QKKyAgY29tbWFuZCB0 byB3b3JrIGNvcnJlY3RseSB3aXRoIGEgaG9zdCB0aGF0IHVzZXMgYSA3LWJpdCBJU08gNjQ2IG5h dGlvbmFsCisgIGNoYXJhY3RlciBzZXQsIGluIHdoaWNoIGNoYXJhY3RlcnMgbGlrZSAnWycgd291 bGQgbm9ybWFsbHkgYmUgY29udmVydGVkIHRvCisgIGFjY2VudGVkIGxldHRlcnMsIHJ1aW5pbmcg dGhlIHRlcm1pbmFsJ3MgaW50ZXJwcmV0YXRpb24gKGFuZCBnZW5lcmF0aW9uKQorICBvZiBlc2Nh cGUgc2VxdWVuY2VzLgorCisgIEFzIG9mIDVBKDE5MCksIHRoZSBDT05ORUNUIGNvbW1hbmQgcmVz cG9uZHMgdG8gQVBDIGVzY2FwZSBzZXF1ZW5jZXMKKyAgKEVTQyBfIHRleHQgRVNDIFwpIGlmIHRo ZSB1c2VyIFNFVHMgVEVSTUlOQUwgQVBDIE9OIG9yIFVOQ0hFQ0tFRCwgYW5kIHRoZQorICBwcm9n cmFtIHdhcyBidWlsdCB3aXRoIENLX0FQQyBkZWZpbmVkLgorCisgIE5vbi1BTlNJL0lTTy1jb21w bGlhbnQgZXNjYXBlIHNlcXVlbmNlcyBhcmUgbm90IGhhbmRsZWQuICovCisKKy8qIFN0YXRlcyBm b3IgdGhlIGVzY2FwZS1zZXF1ZW5jZSByZWNvZ25pemVyLiAqLworCisjZGVmaW5lIEVTX05PUk1B TCAwCQkJLyogTm9ybWFsLCBub3QgaW4gYW4gZXNjYXBlIHNlcXVlbmNlICovCisjZGVmaW5lIEVT X0dPVEVTQyAxCQkJLyogQ3VycmVudCBjaGFyYWN0ZXIgaXMgRVNDICovCisjZGVmaW5lIEVTX0VT Q1NFUSAyCQkJLyogSW5zaWRlIGFuIGVzY2FwZSBzZXF1ZW5jZSAqLworI2RlZmluZSBFU19HT1RD U0kgMwkJCS8qIEluc2lkZSBhIGNvbnRyb2wgc2VxdWVuY2UgKi8KKyNkZWZpbmUgRVNfU1RSSU5H IDQJCQkvKiBJbnNpZGUgRENTLE9TQyxQTSwgb3IgQVBDIHN0cmluZyAqLworI2RlZmluZSBFU19U RVJNSU4gNQkJCS8qIDFzdCBjaGFyIG9mIHN0cmluZyB0ZXJtaW5hdG9yICovCisKKy8qCisgIEFO U0kgZXNjYXBlIHNlcXVlbmNlIGhhbmRsaW5nLiAgT25seSB0aGUgNy1iaXQgZm9ybSBpcyB0cmVh dGVkLCBiZWNhdXNlCisgIHRyYW5zbGF0aW9uIGlzIG5vdCBhIHByb2JsZW0gaW4gdGhlIDgtYml0 IGVudmlyb25tZW50LCBpbiB3aGljaCBhbGwgR0wKKyAgY2hhcmFjdGVycyBhcmUgQVNDSUkgYW5k IG5vIHRyYW5zbGF0aW9uIHRha2VzIHBsYWNlLiAgU28gd2UgZG9uJ3QgY2hlY2sKKyAgZm9yIHRo ZSA4LWJpdCBzaW5nbGUtY2hhcmFjdGVyIHZlcnNpb25zIG9mIENTSSwgRENTLCBPU0MsIEFQQywg b3IgU1QuCisgIEhlcmUgaXMgdGhlIEFOU0kgc2VxdWVuY2UgcmVjb2duaXplciBzdGF0ZSB0YWJs ZSwgZm9sbG93ZWQgYnkgdGhlIGNvZGUKKyAgdGhhdCBpbXBsZW1lbnRzIGl0LgorCisgIERlZmlu aXRpb25zOgorICAgIENBTiA9IENhbmNlbCAgICAgICAgICAgICAgICAgICAgICAgMDEvMDggICAg ICAgICBDdHJsLVgKKyAgICBTVUIgPSBTdWJzdGl0dXRlICAgICAgICAgICAgICAgICAgIDAxLzEw ICAgICAgICAgQ3RybC1aCisgICAgRENTID0gRGV2aWNlIENvbnRyb2wgU2VxdWVuY2UgICAgICAw MS8xMSAwNS8wMCAgIEVTQyBQCisgICAgQ1NJID0gQ29udHJvbCBTZXF1ZW5jZSBJbnRyb2R1Y2Vy ICAwMS8xMSAwNS8xMSAgIEVTQyBbCisgICAgU1QgID0gU3RyaW5nIFRlcm1pbmF0b3IgICAgICAg ICAgICAwMS8xMSAwNS8xMiAgIEVTQyBcCisgICAgT1NDID0gT3BlcmF0aW5nIFN5c3RlbSBDb21t YW5kICAgICAwMS8xMSAwNS8xMyAgIEVTQyBdCisgICAgUE0gID0gUHJpdmFjeSBNZXNzYWdlICAg ICAgICAgICAgICAwMS8xMSAwNS8xNCAgIEVTQyBeCisgICAgQVBDID0gQXBwbGljYXRpb24gUHJv Z3JhbSBDb21tYW5kICAwMS8xMSAwNS8xNSAgIEVTQyBfCisKKyAgQU5TSSBlc2NhcGUgc2VxdWVu Y2UgcmVjb2duaXplcjoKKworICAgIFN0YXRlICAgIElucHV0ICBOZXcgU3RhdGUgIDsgQ29tbWVu dGFyeQorCisgICAgTk9STUFMICAgKHN0YXJ0KSAgICAgICAgICAgOyBTdGFydCBpbiBOT1JNQUwg c3RhdGUKKworICAgIChhbnkpICAgIENBTiAgICBOT1JNQUwgICAgIDsgXlggY2FuY2VscworICAg IChhbnkpICAgIFNVQiAgICBOT1JNQUwgICAgIDsgXlogY2FuY2VscworCisgICAgTk9STUFMICAg RVNDICAgIEdPVEVTQyAgICAgOyBCZWdpbiBlc2NhcGUgc2VxdWVuY2UKKyAgICBOT1JNQUwgICBv dGhlciAgICAgICAgICAgICA7IE5PUk1BTCBjb250cm9sIG9yIGdyYXBoaWMgY2hhcmFjdGVyCisK KyAgICBHT1RFU0MgICBFU0MgICAgICAgICAgICAgICA7IFN0YXJ0IGFnYWluCisgICAgR09URVND ICAgWyAgICAgIEdPVENTSSAgICAgOyBDU0kKKyAgICBHT1RFU0MgICBQICAgICAgU1RSSU5HICAg ICA7IERDUyBpbnRyb2R1Y2VyLCBjb25zdW1lIHRocm91Z2ggU1QKKyAgICBHT1RFU0MgICBdICAg ICAgU1RSSU5HICAgICA7IE9TQyBpbnRyb2R1Y2VyLCBjb25zdW1lIHRocm91Z2ggU1QKKyAgICBH T1RFU0MgICBeICAgICAgU1RSSU5HICAgICA7IFBNICBpbnRyb2R1Y2VyLCBjb25zdW1lIHRocm91 Z2ggU1QKKyAgICBHT1RFU0MgICBfICAgICAgU1RSSU5HICAgICA7IEFQQyBpbnRyb2R1Y2VyLCBj b25zdW1lIHRocm91Z2ggU1QKKyAgICBHT1RFU0MgICAwLi5+ICAgTk9STUFMICAgICA7IDAzLzAw IHRocm91Z2ggMTcvMTQgPSBGaW5hbCBjaGFyYWN0ZXIKKyAgICBHT1RFU0MgICBvdGhlciAgRVND U0VRICAgICA7IEludGVybWVkaWF0ZSBvciBpZ25vcmVkIGNvbnRyb2wgY2hhcmFjdGVyCisKKyAg ICBFU0NTRVEgICBFU0MgICAgR09URVNDICAgICA7IFN0YXJ0IGFnYWluCisgICAgRVNDU0VRICAg MC4ufiAgIE5PUk1BTCAgICAgOyAwMy8wMCB0aHJvdWdoIDE3LzE0ID0gRmluYWwgY2hhcmFjdGVy CisgICAgRVNDU0VRICAgb3RoZXIgICAgICAgICAgICAgOyBJbnRlcm1lZGlhdGUgb3IgaWdub3Jl ZCBjb250cm9sIGNoYXJhY3RlcgorCisgICAgR09UQ1NJICAgRVNDICAgIEdPVEVTQyAgICAgOyBT dGFydCBhZ2FpbgorICAgIEdPVENTSSAgIEAuLn4gICBOT1JNQUwgICAgIDsgMDQvMDAgdGhyb3Vn aCAxNy8xNCA9IEZpbmFsIGNoYXJhY3RlcgorICAgIEdPVENTSSAgIG90aGVyICAgICAgICAgICAg IDsgSW50ZXJtZWRpYXRlIGNoYXIgb3IgaWdub3JlZCBjb250cm9sIGNoYXIKKworICAgIFNUUklO RyAgIEVTQyAgICBURVJNSU4gICAgIDsgTWF5YmUgaGF2ZSBTVAorICAgIFNUUklORyAgIG90aGVy ICAgICAgICAgICAgIDsgQ29uc3VtZSBhbGwgZWxzZQorCisgICAgVEVSTUlOICAgXCAgICAgIE5P Uk1BTCAgICAgOyBFbmQgb2Ygc3RyaW5nCisgICAgVEVSTUlOICAgb3RoZXIgIFNUUklORyAgICAg OyBTdGlsbCBpbiBzdHJpbmcKKyovCisKKyNpZmRlZiBYUFJJTlQJCQkJLyogVHJhbnNwYXJlbnQg cHJpbnQgc3VwcG9ydCAqLworLyoKKyAgV2UgY2FuJ3QganVzdCBwcmludCBlYWNoIGJ5dGUgYXMg aXQgY29tZXMgaW4gYmVjYXVzZSB0aGVuIHRoZSBwcmludGVyLW9mZgorICBzZXF1ZW5jZSB3b3Vs ZCBiZSBzZW50IHRvIHRoZSBwcmludGVyLiAgVGh1cyB3ZSBoYXZlIHRvIGJ1ZmZlciB1cCBlc2Nh cGUKKyAgc2VxdWVuY2VzIGFuZCBwcmludCB0aGVtIG9ubHkgd2hlbiB0aGV5IGFyZSBjb21wbGV0 ZSBBTkQgd2Uga25vdyB0aGV5IGFyZQorICBub3QgdGhlIHByaW50ZXItb2ZmIHNlcXVlbmNlLiAg QWxsIHByaW50aW5nIGlzIGRvbmUgdmlhIHpzb3V0eChaTUZJTEUscyxuKS4KKyAgVGhpcyBhbGxv d3MgZm9yIHN0cmluZ3MgdGhhdCBjb250YWluIE5VTHMuICBEb24ndCBtaXggY2FsbHMgdG8genNv dXR4KCkgd2l0aAorICBjYWxscyB0byB6Y2hvdXQoKSwgb3IgdGhlIG91dHB1dCB3aWxsIGJlIHNj cmFtYmxlZC4gIEFsc28gbm90ZSB0aGF0IHdoZW4KKyAgcHJpbnRpbmcgYSBzYXZlZC11cCBlc2Nh cGUgc2VxdWVuY2UsIHdlIG5ldmVyIHByaW50IGl0cyBmaW5hbCBjaGFyYWN0ZXIKKyAgYmVjYXVz ZSB0aGF0IHdpbGwgYmUgcHJpbnRlZCBpbiB0aGUgbWFpbmxpbmUgY29kZSwgdXBvbiByZXR1cm4g ZnJvbQorICBjaGthZXMoKS4gIE5vdGUgdGhhdCB0aGUgcHJpbnRlci1vbiBzZXF1ZW5jZSBpcyBw YXNzZWQgdG8gdGhlIHNjcmVlbjsgdGhpcworICBpcyB1bmF2b2lkYWJsZSwgc2luY2Ugd2UgZG9u J3Qga25vdyB3aGF0IGl0IGlzIHVudGlsIGFmdGVyIHdlIGdldCB0byB0aGUKKyAgZW5kLCBhbmQg Zm9yIHNjcmVlbiBkaXNwbGF5IHB1cnBvc2VzIHdlIGNhbid0IGJ1ZmZlciB1cCBlc2NhcGUgc2Vx dWVuY2VzCisgIGZvciBudW1lcm91cyByZWFzb25zLiAgVGhlcmVmb3JlIHdlIGFsc28gbXVzdCBv dXRwdXQgdGhlIHByaW50ZXItb2ZmCisgIHNlcXVlbmNlLCBvdGhlcndpc2UgYSByZWFsIHRlcm1p bmFsIG9yIGVtdWxhdG9yIHdpbGwgYmUgc3R1Y2sgaW4gcHJpbnQgbW9kZS4KKyovCitleHRlcm4g aW50IHR0X3ByaW50OworI2RlZmluZSBFU0NCVUZMRU4gNjMKK3N0YXRpYyBjaGFyIGVzY2J1ZltF U0NCVUZMRU4rMV0gPSB7IE5VTCwgTlVMIH07CitzdGF0aWMgaW50IGVzY2J1ZmMgPSAwOworc3Rh dGljIGludCBkb250cHJpbnQgPSAwOworCitWT0lECitwcmludG9uKCkgewkJCQkvKiBUdXJuIHBy aW50aW5nIG9uICovCisgICAgaW50IHgsIHBwOworICAgIGNoYXIgKiBwOworICAgIGV4dGVybiBp bnQgcHJpbnRwaXBlLCBub3ByaW50ZXI7CisgICAgZXh0ZXJuIGNoYXIgKiBwcmludGVybmFtZTsK KworICAgIGlmIChub3ByaW50ZXIpIHsKKwlkZWJ1ZyhGMTEwLCJQUklOVEVSIE9OIE5PUFJJTlRF UiIsIiIsMCk7CisJcmV0dXJuOworICAgIH0KKyAgICBwID0gcHJpbnRlcm5hbWU7CisgICAgcHAg PSBwcmludHBpcGU7CisgICAgaWYgKCFwKSBwID0gIiI7CisgICAgaWYgKCEqcCkgeworI2lmZGVm IEFOWUJTRAorCXAgPSAibHByIjsKKyNlbHNlCisJcCA9ICJscCI7CisjZW5kaWYgLyogQU5ZQlNE ICovCisJcHAgPSAxOworCWRlYnVnKEYxMTAsIlBSSU5URVIgREVGQVVMVCIscCwwKTsKKyAgICB9 CisgICAgZGVidWcoRjExMSwiUFJJTlRFUiBPTiIscCxwcCk7CisgICAgaWYgKHBwKSB7CQkJCS8q IFByaW50aW5nIHRvIHBpcGUgKi8KKwl4ID0genhjbWQoWk1GSUxFLHApOworICAgIH0gZWxzZSB7 CQkJCS8qIEFwcGVuZCB0byBmaWxlICovCisJc3RydWN0IGZpbGluZm8geHg7CisJeHguYnMgPSAw OyB4eC5jcyA9IDA7IHh4LnJsID0gMDsgeHgub3JnID0gMDsgeHguY2MgPSAwOworCXh4LnR5cCA9 IDA7IHh4LmRzcCA9IFhZRlpfQTsgeHgub3Nfc3BlY2lmaWMgPSBOVUw7CisJeHgubGJsb3B0cyA9 IDA7CisJeCA9IHpvcGVubyhaTUZJTEUscCxOVUxMLCZ4eCk7CisgICAgfQorICAgIGRlYnVnKEYx MDEsIlBSSU5URVIgT1BFTiIsIiIseCk7CisgICAgcHJpbnRpbmcgPSAxOworfQorCitWT0lECitw cmludG9mZigpIHsJCQkJLyogVHVybiBwcmludGluZyBvZmYgKi8KKyAgICBpbnQgeDsKKyAgICBl eHRlcm4gaW50IG5vcHJpbnRlcjsKKyAgICBpZiAobm9wcmludGVyKSB7CisJcHJpbnRpbmcgPSAw OworCWRlYnVnKEYxMDAsIlBSSU5URVIgT0ZGIE5PUFJJTlRFUiIsIiIsMCk7CisJcmV0dXJuOwor ICAgIH0KKyAgICBkZWJ1ZyhGMTAwLCJQUklOVEVSIE9GRiIsIiIsMCk7CisgICAgaWYgKHByaW50 aW5nKSB7CisJeCA9IHpjbG9zZShaTUZJTEUpOworCWRlYnVnKEYxMDEsIlBSSU5URVIgQ0xPU0Ui LCIiLHgpOworCXByaW50aW5nID0gMDsKKyAgICB9Cit9CisjZW5kaWYgLyogWFBSSU5UICovCisK Ky8qCisgIEMgSCBLIEEgRSBTICAtLSAgQ2hlY2sgQU5TSSBFc2NhcGUgU2VxdWVuY2UuCisKKyAg Q2FsbCB3aXRoIEVBQ0ggY2hhcmFjdGVyIGluIGlucHV0IHN0cmVhbS4KKyAgc3JjID0gMCBtZWFu cyBjIGlzIGluY29taW5nIGZyb20gcmVtb3RlOyAxID0gY2hhciBmcm9tIGtleWJvYXJkLgorICBT ZXRzIGdsb2JhbCBpbmVzY1tzcmNdIHZhcmlhYmxlIGFjY29yZGluZyB0byBlc2NhcGUgc2VxdWVu Y2Ugc3RhdGUuCisgIFJldHVybnMgMCBub3JtYWxseSwgMSBpZiBhbiBBUEMgc2VxdWVuY2UgaXMg dG8gYmUgZXhlY3V0ZWQuCisgIEhhbmRsZXMgdHJhbnNwYXJlbnQgcHJpbnRpbmcgaW50ZXJuYWxs eS4KKyovCitpbnQKKyNpZmRlZiBDS19BTlNJQworY2hrYWVzKGNoYXIgYywgaW50IHNyYykKKyNl bHNlCitjaGthZXMoYyxzcmMpIGNoYXIgYzsgaW50IHNyYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAq LworLyogY2hrYWVzICovIHsKKworICAgIGRlYnVnKEYxMTEsImNoa2FlcyBlbnRyeSBpbmVzYyIs Y2tpdG9hKHNyYyksaW5lc2Nbc3JjXSk7CisgICAgZGVidWcoRjEwMSwiY2hrYWVzIGMiLCIiLGMp OworCisgICAgaWYgKHNyYyA8IDAgfHwgc3JjID4gMSkJCS8qIERvbid0IGFsbG93IGJhZCBhcmdz LiAqLworICAgICAgcmV0dXJuKDApOworCisgICAgb2xkZXNjW3NyY10gPSBpbmVzY1tzcmNdOwkJ LyogUmVtZW1iZXIgcHJldmlvdXMgc3RhdGUgKi8KKworI2lmZGVmIFhQUklOVAorICAgIGlmIChp bmVzY1tzcmNdICYmICFzcmMpIHsJCS8qIFNhdmUgdXAgZXNjYXBlIHNlcSBmb3IgcHJpbnRpbmcg ICovCisJaWYgKCFjKSByZXR1cm4oMCk7CQkvKiBJZ25vcmUgTlVMcyAqLworCWlmIChlc2NidWZj IDwgRVNDQlVGTEVOKSB7CisJICAgIGVzY2J1Zltlc2NidWZjKytdID0gYzsKKwkgICAgZXNjYnVm W2VzY2J1ZmNdID0gTlVMOworCSAgICBkZWJ1ZyhGMTExLCJFU0NCVUYgMSIsZXNjYnVmLGVzY2J1 ZmMpOworCX0gZWxzZSB7CQkJLyogQnVmZmVyIG92ZXJydW4gKi8KKwkgICAgaWYgKHByaW50aW5n ICYmIGVzY2J1ZmMpCS8qIFByaW50IHdoYXQncyB0aGVyZSBzbyBmYXIgKi8KKwkgICAgICB6c291 dHgoWk1GSUxFLGVzY2J1Zixlc2NidWZjKTsKKwkgICAgZXNjYnVmYyA9IDE7CQkvKiBjbGVhciBp dCBvdXQgKi8KKwkgICAgZXNjYnVmWzBdID0gYzsJCS8qIGFuZCBzdGFydCBvZmYgZnJlc2ggYnVm ZmVyICovCisJICAgIGVzY2J1ZlsxXSA9IE5VTDsJCS8qIHdpdGggdGhpcyBjaGFyYWN0ZXIuICov CisJfQorICAgIH0KKyNlbmRpZiAvKiBYUFJJTlQgKi8KKworICAgIGlmIChjID09IENBTiB8fCBj ID09IFNVQikgewkJLyogQ0FOIGFuZCBTVUIgY2FuY2VsIGFueSBzZXF1ZW5jZSAqLworI2lmZGVm IFhQUklOVAorCWlmICghc3JjKSB7CisJICAgIGlmIChwcmludGluZyAmJiBlc2NidWZjID4gMSkK KwkgICAgICB6c291dHgoWk1GSUxFLGVzY2J1Zixlc2NidWZjLTEpOworCSAgICBlc2NidWZjID0g MDsJCS8qIENsZWFyIGJ1ZmZlciAqLworCSAgICBlc2NidWZbMF0gPSBOVUw7CisJfQorI2VuZGlm IC8qIFhQUklOVCAqLworCWluZXNjW3NyY10gPSBFU19OT1JNQUw7CisgICAgfSBlbHNlCQkJCS8q IE90aGVyd2lzZSAqLworCisgICAgICBzd2l0Y2ggKGluZXNjW3NyY10pIHsJCS8qIGVudGVyIHN0 YXRlIHN3aXRjaGVyICovCisJY2FzZSBFU19OT1JNQUw6CQkJLyogTk9STUFMIHN0YXRlICovCisJ ICBpZiAoYyA9PSBFU0MpIHsJCS8qIEdvdCBhbiBFU0MgKi8KKwkgICAgICBpbmVzY1tzcmNdID0g RVNfR09URVNDOwkvKiBDaGFuZ2Ugc3RhdGUgdG8gR09URVNDICovCisjaWZkZWYgWFBSSU5UCisJ ICAgICAgaWYgKCFzcmMpIHsKKwkJICBlc2NidWZjID0gMTsJCS8qIENsZWFyIGVzY2FwZSBzZXF1 ZW5jZSBidWZmZXIgKi8KKwkJICBlc2NidWZbMF0gPSBjOwkvKiBhbmQgZGVwb3NpdCB0aGUgRVND ICovCisJCSAgZXNjYnVmWzFdID0gTlVMOworCQkgIGRlYnVnKEYxMTEsIkVTQ0JVRiAyIixlc2Ni dWYsZXNjYnVmYyk7CisJICAgICAgfQorI2VuZGlmIC8qIFhQUklOVCAqLworCSAgfQorCSAgYnJl YWs7CQkJLyogT3RoZXJ3aXNlIHN0YXkgaW4gTk9STUFMIHN0YXRlICovCisKKwljYXNlIEVTX0dP VEVTQzoJCQkvKiBHT1RFU0Mgc3RhdGUgLSBwcmV2IGNoYXIgd2FzIEVTQyovCisJICBpZiAoYyA9 PSAnWycpIHsJCS8qIExlZnQgYnJhY2tldCBhZnRlciBFU0MgaXMgQ1NJICovCisJICAgICAgaW5l c2Nbc3JjXSA9IEVTX0dPVENTSTsJLyogQ2hhbmdlIHRvIEdPVENTSSBzdGF0ZSAqLworCSAgfSBl bHNlIGlmIChjID09ICdQJyB8fCAoYyA+IDAxMzQgJiYgYyA8IDAxNDApKSB7IC8qIFAsIF0sIF4s IG9yIF8gKi8KKwkgICAgICBpbmVzY1tzcmNdID0gRVNfU1RSSU5HOwkvKiBTd2l0Y2ggdG8gU1RS SU5HLWFic29ycHRpb24gc3RhdGUgKi8KKyNpZmRlZiBYUFJJTlQKKwkgICAgICBkZWJ1ZyhGMTEx LCJFU0NCVUYgU1RSSU5HIixlc2NidWYsZXNjYnVmYyk7CisjZW5kaWYgLyogWFBSSU5UICovCisj aWZkZWYgQ0tfQVBDCisJICAgICAgLyogSWYgQVBDIG5vdCBkaXNhYmxlZCAqLworCSAgICAgIGlm ICghc3JjICYmIGMgPT0gJ18nICYmIChhcGNzdGF0dXMgJiBBUENfT04pKSB7CisJCSAgZGVidWco RjEwMCwiQ09OTkVDVCBBUEMgYmVnaW4iLCIiLDApOworCQkgIGFwY2FjdGl2ZSA9IEFQQ19SRU1P VEU7IC8qIFNldCBBUEMtQWN0aXZlIGZsYWcgKi8KKwkJICBhcGNsZW5ndGggPSAwOwkvKiBhbmQg cmVzZXQgQVBDIGJ1ZmZlciBwb2ludGVyICovCisJICAgICAgfQorI2VuZGlmIC8qIENLX0FQQyAq LworCSAgfSBlbHNlIGlmIChjID4gMDU3ICYmIGMgPCAwMTc3KSB7IC8qIEZpbmFsIGNoYXJhY3Rl ciAnMCcgdGhydSAnficgKi8KKwkgICAgICBpbmVzY1tzcmNdID0gRVNfTk9STUFMOwkvKiBCYWNr IHRvIG5vcm1hbCAqLworI2lmZGVmIFhQUklOVAorCSAgICAgIGlmICghc3JjKSB7CisJCSAgaWYg KHByaW50aW5nICYmIGVzY2J1ZmMgPiAxKSB7CisJCSAgICAgIC8qIER1bXAgZXNjIHNlcSBidWYg dG8gcHJpbnRlciAqLworCQkgICAgICB6c291dHgoWk1GSUxFLGVzY2J1Zixlc2NidWZjLTEpOwor CQkgICAgICBkZWJ1ZyhGMTExLCJFU0NCVUYgUFJJTlQgMSIsZXNjYnVmLGVzY2J1ZmMpOworCQkg IH0KKworCQkgIGVzY2J1ZmMgPSAwOwkJLyogQ2xlYXIgcGFyYW1ldGVyIGJ1ZmZlciAqLworCQkg IGVzY2J1ZlswXSA9IE5VTDsKKwkgICAgICB9CisjZW5kaWYgLyogWFBSSU5UICovCisJICB9IGVs c2UgaWYgKGMgIT0gRVNDKSB7CS8qIEVTQyBpbiBhbiBlc2NhcGUgc2VxdWVuY2UuLi4gKi8KKwkg ICAgICBpbmVzY1tzcmNdID0gRVNfRVNDU0VROwkvKiBzdGFydHMgYSBuZXcgZXNjYXBlIHNlcXVl bmNlICovCisJICB9CisJICBicmVhazsJCQkvKiBJbnRlcm1lZGlhdGUgb3IgaWdub3JlZCBjdHJs IGNoYXIgKi8KKworCWNhc2UgRVNfRVNDU0VROgkJCS8qIEVTQ1NFUSAtLSBpbiBhbiBlc2NhcGUg c2VxdWVuY2UgKi8KKwkgIGlmIChjID4gMDU3ICYmIGMgPCAwMTc3KSB7CS8qIEZpbmFsIGNoYXJh Y3RlciAnMCcgdGhydSAnficgKi8KKwkgICAgICBpbmVzY1tzcmNdID0gRVNfTk9STUFMOwkvKiBS ZXR1cm4gdG8gTk9STUFMIHN0YXRlLiAqLworI2lmZGVmIFhQUklOVAorCSAgICAgIGlmICghc3Jj KSB7CisJCSAgaWYgKHByaW50aW5nICYmIGVzY2J1ZmMgPiAxKSB7CisJCSAgICAgIHpzb3V0eCha TUZJTEUsZXNjYnVmLGVzY2J1ZmMtMSk7CisJCSAgICAgIGRlYnVnKEYxMTEsIkVTQ0JVRiBQUklO VCAyIixlc2NidWYsZXNjYnVmYyk7CisJCSAgfQorCQkgIGVzY2J1ZmMgPSAwOwkJLyogQ2xlYXIg ZXNjc2VxIGJ1ZmZlciAqLworCQkgIGVzY2J1ZlswXSA9IE5VTDsKKwkgICAgICB9CisjZW5kaWYg LyogWFBSSU5UICovCisJICB9IGVsc2UgaWYgKGMgPT0gRVNDKSB7CS8qIEVTQyAuLi4gKi8KKwkg ICAgICBpbmVzY1tzcmNdID0gRVNfR09URVNDOwkvKiBzdGFydHMgYSBuZXcgZXNjYXBlIHNlcXVl bmNlICovCisJICB9CisJICBicmVhazsJCQkvKiBJbnRlcm1lZGlhdGUgb3IgaWdub3JlZCBjdHJs IGNoYXIgKi8KKworCWNhc2UgRVNfR09UQ1NJOgkJCS8qIEdPVENTSSAtLSBJbiBhIGNvbnRyb2wg c2VxdWVuY2UgKi8KKwkgIGlmIChjID4gMDc3ICYmIGMgPCAwMTc3KSB7CS8qIEZpbmFsIGNoYXJh Y3RlciAnQCcgdGhydSAnficgKi8KKyNpZmRlZiBYUFJJTlQKKwkgICAgICBpZiAoIXNyYyAmJiB0 dF9wcmludCkgewkvKiBQcmludGVyIGVuYWJsZWQ/ICovCisJCSAgaWYgKGMgPT0gJ2knKSB7CS8q IEZpbmFsIGNoYXIgaXMgImkiPyAqLworCQkgICAgICBjaGFyICogcCA9IChjaGFyICopIChlc2Ni dWYgKyBlc2NidWZjIC0gNCk7CisJCSAgICAgIGlmICghc3RybmNtcChwLCAiXDAzM1s1aSIsIDQp KSB7IC8qIFR1cm4gcHJpbnRlciBvbiAqLworCQkJICBwcmludG9uKCk7CisJCSAgICAgIH0gZWxz ZSBpZiAoIXN0cm5jbXAocCwgIlwwMzNbNGkiLCA0KSkgeyAvKiBPciBvZmYuLi4gKi8KKwkJCSAg aW50IGk7CisJCQkgIHByaW50b2ZmKCk7CQkJLyogVHVybiBvZmYgcHJpbnRlci4gKi8KKwkJCSAg ZG9udHByaW50ID0gMTsKKwkJCSAgZm9yIChpID0gMDsgaSA8IGVzY2J1ZmM7IGkrKykJLyogQW5k IG91dHB1dCB0aGUgKi8KKwkJCSAgICBja2NwdXRjKGVzY2J1ZltpXSk7ICAgICAgICAgLyogc2Vx dWVuY2UuICovCisJCSAgICAgIH0gZWxzZSBpZiAocHJpbnRpbmcgJiYgZXNjYnVmYyA+IDEpIHsK KwkJCSAgenNvdXR4KFpNRklMRSxlc2NidWYsZXNjYnVmYy0xKTsKKwkJCSAgZGVidWcoRjAxMSwi RVNDQlVGIFBSSU5UIDMiLGVzY2J1Zixlc2NidWZjKTsKKwkJICAgICAgfQorCQkgIH0gZWxzZSBp ZiAocHJpbnRpbmcgJiYgZXNjYnVmYyA+IDEpIHsKKwkJICAgICAgenNvdXR4KFpNRklMRSxlc2Ni dWYsZXNjYnVmYy0xKTsKKwkJICAgICAgZGVidWcoRjExMSwiRVNDQlVGIFBSSU5UIDQiLGVzY2J1 Zixlc2NidWZjKTsKKwkJICB9CisJICAgICAgfQorCSAgICAgIGlmICghc3JjKSB7CisJCSAgZXNj YnVmYyA9IDA7CQkvKiBDbGVhciBlc2Mgc2VxdWVuY2UgYnVmZmVyICovCisJCSAgZXNjYnVmWzBd ID0gTlVMOworCSAgICAgIH0KKyNlbmRpZiAvKiBYUFJJTlQgKi8KKwkgICAgICBpbmVzY1tzcmNd ID0gRVNfTk9STUFMOwkvKiBSZXR1cm4gdG8gTk9STUFMLiAqLworCSAgfSBlbHNlIGlmIChjID09 IEVTQykgewkvKiBFU0MgLi4uICovCisJICAgICAgaW5lc2Nbc3JjXSA9IEVTX0dPVEVTQzsJLyog c3RhcnRzIG92ZXIuICovCisJICB9CisJICBicmVhazsKKworCWNhc2UgRVNfU1RSSU5HOgkJCS8q IEluc2lkZSBhIHN0cmluZyAqLworCSAgaWYgKGMgPT0gRVNDKQkJCS8qIEVTQyBtYXkgYmUgMXN0 IGNoYXIgb2YgdGVybWluYXRvciAqLworCSAgICBpbmVzY1tzcmNdID0gRVNfVEVSTUlOOwkvKiBH byBzZWUuICovCisjaWZkZWYgQ0tfQVBDCisJICBlbHNlIGlmIChhcGNhY3RpdmUpIHsJCS8qIElm IGluIEFQQyAqLworCSAgICAgIGlmIChhcGNsZW5ndGggPCBhcGNidWZsZW4pIHsgLyogYW5kIHRo ZXJlIGlzIHJvb20uLi4gKi8KKwkJICBhcGNidWZbYXBjbGVuZ3RoKytdID0gYzsgLyogZGVwb3Np dCB0aGlzIGNoYXJhY3Rlci4gKi8KKwkgICAgICB9IGVsc2UgewkJCS8qIEJ1ZmZlciBvdmVycnVu ICovCisJCSAgYXBjYWN0aXZlID0gMDsJLyogRGlzY2FyZCB3aGF0IHdlIGdvdCAqLworCQkgIGFw Y2xlbmd0aCA9IDA7CS8qIGFuZCBnbyBiYWNrIHRvIG5vcm1hbCAqLworCQkgIGFwY2J1ZlswXSA9 IDA7CS8qIE5vdCBwcmV0dHksIGJ1dCB3aGF0IGVsc2UgKi8KKwkJICBpbmVzY1tzcmNdID0gRVNf Tk9STUFMOyAvKiBjYW4gd2UgZG8/ICAoU1QgbWlnaHQgbm90IGNvbWUpICovCisJICAgICAgfQor CSAgfQorI2VuZGlmIC8qIENLX0FQQyAqLworCSAgYnJlYWs7CQkJLyogQWJzb3JiIGFsbCBvdGhl ciBjaGFyYWN0ZXJzLiAqLworCisJY2FzZSBFU19URVJNSU46CQkJLyogTWF5YmUgYSBzdHJpbmcg dGVybWluYXRvciAqLworCSAgaWYgKGMgPT0gJ1xcJykgewkJLyogd2hpY2ggbXVzdCBiZSBiYWNr c2xhc2ggKi8KKwkgICAgICBpbmVzY1tzcmNdID0gRVNfTk9STUFMOwkvKiBJZiBzbywgYmFjayB0 byBOT1JNQUwgKi8KKyNpZmRlZiBYUFJJTlQKKwkgICAgICBpZiAoIXNyYykgeworCQkgIGlmIChw cmludGluZyAmJiBlc2NidWZjID4gMSkgeyAvKiBJZiBwcmludGluZy4uLiAqLworCQkgICAgICAv KiBQcmludCBlc2Mgc2VxIGJ1ZmZlciAqLworCQkgICAgICB6c291dHgoWk1GSUxFLGVzY2J1Zixl c2NidWZjLTEpOworCQkgICAgICBkZWJ1ZyhGMTExLCJFU0NCVUYgUFJJTlQgNSIsZXNjYnVmLGVz Y2J1ZmMpOworCQkgIH0KKwkJICBlc2NidWZjID0gMDsJCS8qIENsZWFyIGVzY3NlcSBidWZmZXIg Ki8KKwkJICBlc2NidWZbMF0gPSBOVUw7CisJICAgICAgfQorI2VuZGlmIC8qIFhQUklOVCAqLwor I2lmZGVmIENLX0FQQworCSAgICAgIGlmICghc3JjICYmIGFwY2FjdGl2ZSkgewkvKiBJZiBpdCB3 YXMgYW4gQVBDIHN0cmluZywgKi8KKwkJICBkZWJ1ZyhGMTAxLCJDT05ORUNUIEFQQyB0ZXJtaW5h dGVkIiwiIixjKTsKKwkJICBhcGNidWZbYXBjbGVuZ3RoXSA9IE5VTDsgLyogdGVybWluYXRlIGl0 IGFuZCB0aGVuIC4uLiAqLworCQkgIHJldHVybigxKTsKKwkgICAgICB9CisjZW5kaWYgLyogQ0tf QVBDICovCisJICB9IGVsc2UgewkJCS8qIEl0J3Mgbm90IGEgYmFja3NsYXNoIHNvLi4uICovCisJ ICAgICAgaW5lc2Nbc3JjXSA9IEVTX1NUUklORzsJLyogYmFjayB0byBzdHJpbmcgYWJzb3JwdGlv bi4gKi8KKyNpZmRlZiBDS19BUEMKKwkgICAgICBpZiAoYXBjYWN0aXZlKSB7CQkvKiBJbiBBUEMg c3RyaW5nICovCisJCSAgaWYgKGFwY2xlbmd0aCsxIDwgYXBjYnVmbGVuKSB7IC8qIElmIGVub3Vn aCByb29tICovCisJCSAgICAgIGFwY2J1ZlthcGNsZW5ndGgrK10gPSBFU0M7IC8qIGRlcG9zaXQg dGhlIEVzYyAqLworCQkgICAgICBhcGNidWZbYXBjbGVuZ3RoKytdID0gYzsgICAvKiBhbmQgdGhp cyBjaGFyYWN0ZXIgdG9vLiAqLworCQkgIH0gZWxzZSB7CQkvKiBCdWZmZXIgb3ZlcnJ1biAqLwor CQkgICAgICBhcGNhY3RpdmUgPSAwOworCQkgICAgICBhcGNsZW5ndGggPSAwOworCQkgICAgICBh cGNidWZbMF0gPSAwOworCQkgICAgICBpbmVzY1tzcmNdID0gRVNfTk9STUFMOworCQkgIH0KKwkg ICAgICB9CisjZW5kaWYgLyogQ0tfQVBDICovCisJICB9CisgICAgICB9CS8qIHN3aXRjaCgpICov CisgICAgZGVidWcoRjExMSwiY2hrYWVzIGV4aXQgaW5lc2MiLGNraXRvYShzcmMpLGluZXNjW3Ny Y10pOworICAgIHJldHVybigwKTsKK30KKyNlbmRpZiAvKiBOT0VTQ1NFUSAqLworCitWT0lECisj aWZkZWYgQ0tfQU5TSUMKK0xPR0NIQVIoY2hhciBjKQorI2Vsc2UKK0xPR0NIQVIoYykgY2hhciBj OworI2VuZGlmIC8qIENLX0FOU0lDICovCisvKiBMT0dDSEFSICovIHsgICAgICAgICAgICAgICAg ICAgICAgICAgLyogTG9nIGNoYXJhY3RlciBjIHRvIHNlc3Npb24gbG9nICovCisgICAgLyogYnV0 IHNraXAgb3ZlciBlc2NhcGUgc2VxdWVuY2VzIGlmIHNlc3Npb24gbG9nIGlzIHRleHQgKi8KKyAg ICBpZiAoZXNjc2VxKSB7CisJaWYgKChzZXNzZnQgPT0gWFlGVF9UKSAmJiAoZGVic2VzID09IDAp ICYmCisJICAgIChpbmVzY1swXSAhPSBFU19OT1JNQUwgfHwgb2xkZXNjWzBdICE9IEVTX05PUk1B TCkpCisJICByZXR1cm47CisgICAgfQorICAgIGxvZ2NoYXIoYyk7Cit9CisKKy8qICBDIEsgQyBQ IFUgVCBDICAtLSAgQy1LZXJtaXQgQ09OTkVDVCBQdXQgQ2hhcmFjdGVyIHRvIFNjcmVlbiAgKi8K Ky8qCisgIE91dHB1dCBpcyBidWZmZXJlZCB0byBhdm9pZCBzbG93IHNjcmVlbiB3cml0ZXMgb24g ZmFzdCBjb25uZWN0aW9ucy4KKyovCitzdGF0aWMgaW50Citja2NwdXRmKCkgewkJCQkvKiBEdW1w IHRoZSBjb25zb2xlIG91dHB1dCBidWZmZXIgKi8KKyAgICBpbnQgeCA9IDA7CisgICAgaWYgKG9i YyA+IDApCQkJLyogSWYgd2UgaGF2ZSBhbnkgY2hhcmFjdGVycywgKi8KKyAgICAgIHggPSBjb254 byhvYmMsb2J1Zik7CQkvKiBkdW1wIHRoZW0sICovCisgICAgb2JwID0gb2J1ZjsJCQkJLyogcmVz ZXQgdGhlIHBvaW50ZXIgKi8KKyAgICBvYmMgPSAwOwkJCQkvKiBhbmQgdGhlIGNvdW50ZXIuICov CisgICAgcmV0dXJuKHgpOwkJCQkvKiBSZXR1cm4gY29ueG8ncyByZXR1cm4gY29kZSAqLworfQor CisvKgorICBOT1RFOiBUaGlzIGlzIHByb2JhYmx5IHRoZSByaWdodCBwbGFjZSBmb3IgY2hhcmFj dGVyLXNldCB0cmFuc2xhdGlvbiwKKyAgcmF0aGVyIHRoYW4gZG93biBiZWxvdyBpbiB0aGUgbWFp bmxpbmUgY29kZS4gIGNrY3B1dGMoKSB3b3VsZCBhY3QgbGlrZQorICB4cG5ieXRlKCkgaW4gY2tj Zm5zLmMsIGFuZCBja2NnZXRjKCkgd291bGQgYWN0IGxpa2UgeGduYnl0ZSgpLiAgVGhpcworICB3 b3VsZCBzaGllbGQgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgZnJvbSBhbGwgdGhlIGNvbXBsZXhpdGll cyBvZiBtYW55LXRvLW9uZQorICBhbmQgb25lLXRvLW1hbnkgY29udmVyc2lvbnMsIGFuZCB3b3Vs ZCBhbGxvdyBoYW5kbGluZyBvZiBLYW5qaSBhbmQgb3RoZXIKKyAgQ0pLIHNldHMgYWxvbmcgd2l0 aCBVVEYtOCBhbmQgdGhlIHJlc3QuCisqLworaW50Citja2NwdXRjKGMpIGludCBjOyB7CisgICAg aW50IHg7CisKKyAgICAqb2JwKysgPSBjICYgMHhmZjsJCQkvKiBEZXBvc2l0IHRoZSBjaGFyYWN0 ZXIgKi8KKyAgICBvYmMrKzsJCQkJLyogQ291bnQgaXQgKi8KKyAgICBpZiAoaWJjID09IDAgfHwJ CQkvKiBJZiBpbnB1dCBidWZmZXIgYWJvdXQgZW1wdHkgKi8KKwlvYmMgPT0gT0JVRkwpIHsJCQkv KiBvciBvdXRwdXQgYnVmZmVyIGZ1bGwgKi8KKwlkZWJ1ZyhGMTAxLCJDT05ORUNUIENLQ1BVVEMg b2JjIiwiIixvYmMpOworCXggPSBjb254byhvYmMsb2J1Zik7CQkvKiBkdW1wIHRoZSBidWZmZXIs ICovCisJb2JwID0gb2J1ZjsJCQkvKiByZXNldCB0aGUgcG9pbnRlciAqLworCW9iYyA9IDA7CQkJ LyogYW5kIHRoZSBjb3VudGVyLiAqLworCXJldHVybih4KTsJCQkvKiBSZXR1cm4gY29ueG8ncyBy ZXR1cm4gY29kZSAqLworICAgIH0gZWxzZSByZXR1cm4oMCk7Cit9CisKKy8qICBDIEsgQyBHIEUg VCBDICAtLSAgQy1LZXJtaXQgQ09OTkVDVCBHZXQgQ2hhcmFjdGVyICAqLworLyoKKyAgQnVmZmVy ZWQgcmVhZCBmcm9tIGNvbW11bmljYXRpb24gZGV2aWNlLgorICBSZXR1cm5zIHRoZSBuZXh0IGNo YXJhY3RlciwgcmVmaWxsaW5nIHRoZSBidWZmZXIgaWYgbmVjZXNzYXJ5LgorICBPbiBlcnJvciwg cmV0dXJucyB0dGluYydzIHJldHVybiBjb2RlIChzZWUgdHRpbmMoKSBkZXNjcmlwdGlvbikuCisg IER1bW15IGFyZ3VtZW50IGZvciBjb21wYXRpYmxlIGNhbGxpbmcgY29udmVudGlvbnMgd2l0aCB0 dGluYygpCisgIHNvIGEgcG9pbnRlciB0byB0aGlzIGZ1bmN0aW9uIGNhbiBiZSBwYXNzZWQgdG8g dG5fZG9vcCgpLgorKi8KK2ludAorY2tjZ2V0YyhkdW1teSkgaW50IGR1bW15OyB7CisgICAgaW50 IGMsIG47CisjaWZkZWYgQ0tfU1NMCisgICAgZXh0ZXJuIGludCBzc2xfYWN0aXZlX2ZsYWcsIHRs c19hY3RpdmVfZmxhZzsKKyNlbmRpZiAvKiBDS19TU0wgKi8KKworI2lmZGVmIENLX0VOQ1JZUFRJ T04KKyAgICAvKiBObyBidWZmZXJpbmcgZm9yIHBvc3NpYmx5IGVuY3J5cHRlZCBjb25uZWN0aW9u cyAqLworICAgIGlmIChuZXR3b3JrICYmIElTX1RFTE5FVCgpICYmIFRFTE9QVF9NRShURUxPUFRf QVVUSEVOVElDQVRJT04pKQorICAgICAgcmV0dXJuKHR0aW5jKDApKTsKKyNlbmRpZiAvKiBDS19F TkNSWVBUSU9OICovCisjaWZkZWYgQ0tfU1NMCisgICAgaWYgKHNzbF9hY3RpdmVfZmxhZyB8fCB0 bHNfYWN0aXZlX2ZsYWcpCisgICAgICAgIHJldHVybih0dGluYygwKSk7CisjZW5kaWYgLyogQ0tf U1NMICovCisKKyAgICBpZiAoaWJjIDwgMSkgewkJCS8qIE5lZWQgdG8gcmVmaWxsIGJ1ZmZlcj8g Ki8KKwlpYmMgPSAwOwkJCS8qIFllcywgcmVzZXQgY291bnQgKi8KKwlpYnAgPSBpYnVmOwkJCS8q IGFuZCBidWZmZXIgcG9pbnRlciAqLworCWMgPSB0dGluYygwKTsJCQkvKiBSZWFkIG9uZSBjaGFy YWN0ZXIsIGJsb2NraW5nICovCisJaWYgKGMgPCAwKSB7CQkJLyogSWYgZXJyb3IsIHJldHVybiBl cnJvciBjb2RlICovCisJICAgIHJldHVybihjKTsKKwl9IGVsc2UgewkJCS8qIE90aGVyd2lzZSwg Z290IG9uZSBjaGFyYWN0ZXIgKi8KKwkgICAgKmlicCsrID0gYzsJCQkvKiBBZHZhbmNlIGJ1ZmZl ciBwb2ludGVyICovCisJICAgIGliYysrOwkJCS8qIGFuZCBjb3VudC4gKi8KKwl9CisJaWYgKChu ID0gdHRjaGsoKSkgPiAwKSB7CS8qIEFueSBtb3JlIHdhaXRpbmc/ICovCisJICAgIGlmIChuID4g KElCVUZMIC0gaWJjKSkJLyogR2V0IHRoZW0gYWxsIGF0IG9uY2UuICovCisJICAgICAgbiA9IElC VUZMIC0gaWJjOwkJLyogRG9uJ3Qgb3ZlcmZsb3cgYnVmZmVyICovCisJICAgICAgaWYgKChuID0g dHR4aW4obiwoQ0hBUiAqKWlicCkpID4gMCkgeworCQkgIGliYyArPSBuOwkJLyogQWR2YW5jZSBj b3VudGVyICovCisgICAgICAgICAgICAgIH0KKwl9IGVsc2UgaWYgKG4gPCAwKSB7CQkvKiBFcnJv cj8gKi8KKwkgICAgcmV0dXJuKG4pOwkJCS8qIFJldHVybiB0aGUgZXJyb3IgY29kZSAqLworCX0K KwlpYnAgPSBpYnVmOwkJCS8qIFBvaW50IHRvIGJlZ2lubmluZyBvZiBidWZmZXIgKi8KKyAgICB9 CisgICAgYyA9ICppYnArKyAmIDB4ZmY7CQkJLyogR2V0IG5leHQgY2hhcmFjdGVyIGZyb20gYnVm ZmVyICovCisgICAgaWJjLS07CQkJCS8qIFJlZHVjZSBidWZmZXIgY291bnQgKi8KKyAgICAvKiBk ZWJ1ZyhGMDAwLCJDS0NHRVRDIiwiIixjKTsgKi8KKyAgICByZXR1cm4oYyk7CQkJCS8qIFJldHVy biB0aGUgY2hhcmFjdGVyICovCit9CisKKy8qCisgICBLZXlib2FyZCBoYW5kbGluZywgYnVmZmVy ZWQgZm9yIHNwZWVkLCB3aGljaCBpcyBuZWVkZWQgd2hlbiBDLUtlcm1pdCBpcworICAgaW4gQ09O TkVDVCBtb2RlIGJldHdlZW4gdHdvIG90aGVyIGNvbXB1dGVycyB0aGF0IGFyZSB0cmFuc2ZlcnJp bmcgZGF0YS4KKyovCitzdGF0aWMgY2hhciAqa2JwOwkJCS8qIEtleWJvYXJkIGlucHV0IGJ1ZmZl ciBwb2ludGVyICovCitzdGF0aWMgaW50IGtiYzsJCQkJLyogS2V5Ym9hcmQgaW5wdXQgYnVmZmVy IGNvdW50ICovCisKKyNpZmRlZiBDS19TTUFMTAkJCQkvKiBLZXlib2FyZCBpbnB1dCBidWZmZXIg bGVuZ3RoICovCisjZGVmaW5lIEtCVUZMIDMyCQkJLyogU21hbGwgZm9yIFBEUC0xMSBVTklYICov CisjZWxzZQorI2RlZmluZSBLQlVGTCAyNTcJCQkvKiBSZWd1bGFyIGtlcm5lbCBzaXplIGZvciBv dGhlcnMgKi8KKyNlbmRpZiAvKiBDS19TTUFMTCAqLworCisjaWZkZWYgRFlOQU1JQworc3RhdGlj IGNoYXIgKmtidWYgPSBOVUxMOworI2Vsc2UKK3N0YXRpYyBjaGFyIGtidWZbS0JVRkxdOworI2Vu ZGlmIC8qIERZTkFNSUMgKi8KKworLyogTWFjcm8gZm9yIHJlYWRpbmcga2V5c3Ryb2tlcy4gKi8K KworI2RlZmluZSBDT05HS1MoKSAoKCgtLWtiYyk+PTApID8gKChpbnQpKCprYnArKykgJiAwMzc3 KSA6IGtiZ2V0KCkpCisKKy8qCisgIE5vdGUgdGhhdCB3ZSBjYWxsIHJlYWQoKSBkaXJlY3RseSBo ZXJlLCBub3JtYWxseSBhIG5vLW5vLCBidXQgaW4gdGhpcyBjYXNlCisgIHdlIGtub3cgaXQncyBV TklYIGFuZCB3ZSdyZSBvbmx5IGRvaW5nIHdoYXQgY29uaW5jKDApIHdvdWxkIGhhdmUgZG9uZSwK KyAgZXhjZXB0IHdlJ3JlIHJlYWRpbmcgYSBibG9jayBvZiBjaGFyYWN0ZXJzIHJhdGhlciB0aGFu IGp1c3Qgb25lLiAgVGhlcmUgaXMsCisgIGF0IHByZXNlbnQsIG5vIGNvbnhpbigpIGFuYWxvZyB0 byB0dHhpbigpIGZvciBjaHVuayByZWFkcywgYW5kIGluc3RpdHV0aW5nCisgIG9uZSB3b3VsZCBv bmx5IGFkZCBmdW5jdGlvbi1jYWxsIG92ZXJoZWFkIGFzIGl0IHdvdWxkIG9ubHkgYmUgYSB3cmFw cGVyIGZvcgorICBhIHJlYWQoKSBjYWxsIGFueXdheS4KKworICBBbm90aGVyIG5vdGU6IFdlIHN0 aWNrIGluIHRoaXMgcmVhZCgpIHRpbGwgdGhlIHVzZXIgdHlwZXMgc29tZXRoaW5nLgorICBCdXQg d2Uga25vdyB0aGV5IGFscmVhZHkgZGlkLCBzaW5jZSBzZWxlY3QoKSBzYWlkIHNvLiAgVGhlcmVm b3JlIHNvbWV0aGluZworICB3b3VsZCBuZWVkIHRvIGJlIG1pZ2h0eSB3cm9uZyBiZWZvcmUgd2Ug Z2V0IHN0dWNrIGhlcmUuCisqLworc3RhdGljIGludAkJCQkvKiBLZXlib2FyZCBidWZmZXIgZmls bGVyICovCitrYmdldCgpIHsKKyNpZmRlZiBFSU5UUgorICAgIGludCB0cmllcyA9IDEwOwkJCS8q IElmIHJlYWQoKSBpcyBpbnRlcnJ1cHRlZCwgKi8KKyAgICBpbnQgb2sgPSAwOworICAgIHdoaWxl ICh0cmllcy0tID4gMCkgewkJLyogdHJ5IGEgZmV3IHRpbWVzLi4uICovCisjZW5kaWYgLyogRUlO VFIgKi8KKwlrYmMgPSBjb25jaGsoKTsJCQkvKiBIb3cgbWFueSBjaGFycyB3YWl0aW5nPyAqLwor CWRlYnVnKEYxMDEsImtiZ2V0IGtiYyIsIiIsa2JjKTsKKwlpZiAoa2JjIDwgMSkKKwkgIGtiYyA9 IDE7CQkJLyogSWYgbm9uZSBvciBkdW5ubywgd2FpdCBmb3Igb25lLiAqLworCWVsc2UgaWYgKGti YyA+IEtCVUZMKQkJLyogSWYgdG9vIG1hbnksICovCisJICBrYmMgPSBLQlVGTDsJCQkvKiBvbmx5 IHJlYWQgdGhpcyBtYW55LiAqLworCWlmICgoa2JjID0gcmVhZCgwLCBrYnVmLCBrYmMpKSA8IDEp IHsgLyogTm93IHJlYWQgaXQvdGhlbS4gKi8KKwkgICAgZGVidWcoRjEwMSwiQ09OTkVDVCBrYmdl dCBlcnJubyIsIiIsZXJybm8pOwkvKiBHb3QgYW4gZXJyb3IuICovCisjaWZkZWYgRUlOVFIKKwkg ICAgaWYgKGVycm5vID09IEVJTlRSKQkJLyogSW50ZXJydXB0ZWQgc3lzdGVtIGNhbGwuICovCisJ ICAgICAgY29udGludWU7CQkJLyogVHJ5IGFnYWluLCB1cCB0byBsaW1pdC4gKi8KKwkgICAgZWxz ZQkJCS8qIFNvbWV0aGluZyBlbHNlLiAqLworI2VuZGlmIC8qIEVJTlRSICovCisJICAgICAgcmV0 dXJuKC0xKTsJCS8qIFBhc3MgYWxvbmcgcmVhZCgpIGVycm9yLiAqLworCX0KKyNpZmRlZiBFSU5U UgorCWVsc2UgeyBvayA9IDE7IGJyZWFrOyB9CisgICAgfQorICAgIGlmICghb2spIHJldHVybigt MSk7CisjZW5kaWYgLyogRUlOVFIgKi8KKyAgICBrYnAgPSBrYnVmOwkJCQkvKiBBZGp1c3QgYnVm ZmVyIHBvaW50ZXIsICovCisgICAga2JjLS07CQkJCS8qIGNvdW50LCAqLworICAgIHJldHVybigo aW50KSgqa2JwKyspICYgMDM3Nyk7CS8qIGFuZCByZXR1cm4gZmlyc3QgY2hhcmFjdGVyLiAqLwor fQorCisjaWZkZWYgQkVCT1gKKy8qCisgKiBDcmVhdGVTb2NrZXRQYWlyIC0tCisgKgorICoJVGhp cyBwcm9jZWR1cmUgY3JlYXRlcyBhIGNvbm5lY3RlZCBzb2NrZXQgcGFpcgorICoKKyAqIFJlc3Vs dHM6CisgKgkwIGlmIE9LLCB0aGUgZXJyb3IgaWYgbm90IE9LLgorICoKKyAqIFNpZGUgZWZmZWN0 czoKKyAqCU5vbmUKKyAqLworaW50Citzb2NrZXRwYWlyKGludCAqcGFpcikgeworICAgIGludCBz ZXJ2c29jazsKKyAgICBpbnQgdmFsOworICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBzZXJ2X2FkZHIs IGNsaV9hZGRyOworICAgIGV4dGVybiBjaGFyIG15aXBhZGRyW107CisKKyAgICBkZWJ1ZyhGMTEw LCJzb2NrZXRwYWlyIixteWlwYWRkciwwKTsKKworICAgIGlmIChteWlwYWRkclswXSA9PSAwKQor ICAgICAgZ2V0bG9jYWxpcGFkZHIoKTsKKworICAgIHNlcnZzb2NrID0gc29ja2V0KEFGX0lORVQs IFNPQ0tfU1RSRUFNLCAwKTsKKyAgICBpZiAoc2VydnNvY2sgPT0gMCkgeworCXJldHVybiBoX2Vy cm5vOworICAgIH0KKyAgICBkZWJ1ZyhGMTExLCJzb2NrZXRwYWlyIiwic29ja2V0IixzZXJ2c29j ayk7CisKKyAgICBtZW1zZXQoJnNlcnZfYWRkciwgMCwgc2l6ZW9mKHNlcnZfYWRkcikpOworICAg IHNlcnZfYWRkci5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyAgICBzZXJ2X2FkZHIuc2luX2FkZHIu c19hZGRyID0gaHRvbmwoSU5BRERSX0FOWSk7CisgICAgc2Vydl9hZGRyLnNpbl9wb3J0ID0gaHRv bnMoMCk7CisKKyAgICB2YWwgPSBzaXplb2Yoc2Vydl9hZGRyKTsKKyAgICBpZiAoYmluZChzZXJ2 c29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSAmc2Vydl9hZGRyLCB2YWwpIDwgMCkgeworCWNsb3Nl c29ja2V0KHNlcnZzb2NrKTsKKwlyZXR1cm4gaF9lcnJubzsKKyAgICB9CisgICAgZGVidWcoRjEx MSwic29ja2V0cGFpciIsImJpbmQiLDApOworCisgICAgbGlzdGVuKHNlcnZzb2NrLCAxKTsKKyAg ICBkZWJ1ZyhGMTExLCJzb2NrZXRwYWlyIiwibGlzdGVuIiwwKTsKKworICAgIGlmIChnZXRzb2Nr bmFtZShzZXJ2c29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSAmc2Vydl9hZGRyLCAmdmFsKSA8IDAp IHsKKwljbG9zZXNvY2tldChzZXJ2c29jayk7CisJcmV0dXJuIGhfZXJybm87CisgICAgfQorICAg IGRlYnVnKEYxMTEsInNvY2tldHBhaXIiLCJnZXRzb2NrbmFtZSIsMCk7CisKKyAgICBwYWlyWzBd ID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCAwKTsKKyAgICBpZiAocGFpclswXSA9PSAw KSB7CisJY2xvc2Vzb2NrZXQoc2VydnNvY2spOworCXJldHVybiBoX2Vycm5vOworICAgIH0KKyAg ICBkZWJ1ZyhGMTExLCJzb2NrZXRwYWlyIiwic29ja2V0IixwYWlyWzBdKTsKKworICAgIG1lbXNl dCgmY2xpX2FkZHIsIDAsIHNpemVvZihjbGlfYWRkcikpOworICAgIGNsaV9hZGRyLnNpbl9mYW1p bHkgPSBBRl9JTkVUOworICAgIGNsaV9hZGRyLnNpbl9hZGRyLnNfYWRkciA9IGluZXRfYWRkciht eWlwYWRkclswXT9teWlwYWRkcjoiMTI3LjAuMC4xIik7CisgICAgY2xpX2FkZHIuc2luX3BvcnQg PSBzZXJ2X2FkZHIuc2luX3BvcnQ7CisKKyAgICBpZiAoY29ubmVjdChwYWlyWzBdLChzdHJ1Y3Qg c29ja2FkZHIgKikgJmNsaV9hZGRyLCBzaXplb2YoY2xpX2FkZHIpKSA8IDApIHsKKwljbG9zZXNv Y2tldChwYWlyWzBdKTsKKwljbG9zZXNvY2tldChzZXJ2c29jayk7CisJcmV0dXJuIGhfZXJybm87 CisgICAgfQorICAgIGRlYnVnKEYxMTEsInNvY2tldHBhaXIiLCJjb25uZWN0IiwwKTsKKworICAg IHBhaXJbMV0gPSBhY2NlcHQoc2VydnNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikgJnNlcnZfYWRk ciwgJnZhbCk7CisgICAgaWYgKHBhaXJbMV0gPT0gMCkgeworCWNsb3Nlc29ja2V0KHBhaXJbMF0p OworCWNsb3Nlc29ja2V0KHNlcnZzb2NrKTsKKwlyZXR1cm4gaF9lcnJubzsKKyAgICB9CisgICAg ZGVidWcoRjExMSwic29ja2V0cGFpciIsImFjY2VwdCIscGFpclsxXSk7CisKKyAgICBjbG9zZXNv Y2tldChzZXJ2c29jayk7CisgICAgZGVidWcoRjExMSwic29ja2V0cGFpciIsImNsb3Nlc29ja2V0 IiwwKTsKKyAgICByZXR1cm4gMDsKK30KKworbG9uZwora2JkcmVhZCh2b2lkICogcGFyYW0pIHsK KyAgICBpbnQgc29jayA9IChpbnQpIHBhcmFtOworICAgIGNoYXIgY2g7CisgICAgaW50IHJjID0g MDsKKworICAgIGRlYnVnKEYxMTEsImtiZHJlYWQiLCJzb2NrIixzb2NrKTsKKworICAgIHdoaWxl IChyYyA+PSAwKSB7CisJcmMgPSByZWFkKGZpbGVubyhzdGRpbiksICZjaCwgMSk7IC8qIFJlYWQg YSBjaGFyYWN0ZXIuICovCisJaWYgKHJjID4gMCkgeworCSAgICByYyA9IHNlbmQoc29jaywmY2gs MSwwKTsKKwkgICAgLyogZGVidWcoRjAwMCwia2JkcmVhZCIsInNlbmQoKSIsY2gpOyAqLworCSAg ICBwcmludGYoIlxyXG5nb3Q6ICVjIHJjID0gJWRcclxuIixjaCxyYyk7CisJfSBlbHNlCisJICBt c2xlZXAoMTAwKTsKKyAgICB9CisgICAgZGVidWcoRjExMCwia2JkcmVhZCIsInRlcm1pbmF0aW5n IiwwKTsKKyAgICByZXR1cm4ocmMpOworfQorI2VuZGlmIC8qIEJFQk9YICovCisKKyNpZmRlZiBD S0xFQVJOCitzdGF0aWMgVk9JRAorbGVhcm5jaGFyKGMpIGludCBjOyB7CQkJLyogTGVhcm5lZCBz Y3JpcHQga2V5Ym9hcmQgY2hhcmFjdGVyICovCisgICAgaW50IGNjOworICAgIGNoYXIgeGJ1Zls4 XTsKKworICAgIGlmICghbGVhcm5pbmcgfHwgIWxlYXJuZnApCisgICAgICByZXR1cm47CisKKyAg ICBzd2l0Y2ggKGxlYXJuc3QpIHsJCQkvKiBMZWFybiBzdGF0ZS4uLiAqLworICAgICAgY2FzZSAw OgkJCQkvKiBOZXV0cmFsICovCisgICAgICBjYXNlIDE6CQkJCS8qIE5ldCAqLworCWlmIChsZWFy bmJjID4gMCkgewkJLyogSGF2ZSBuZXQgY2hhcmFjdGVycz8gKi8KKwkgICAgY2hhciBidWZbTEVB Uk5CVUZTSVpdOworCSAgICBpbnQgaSwgaiwgbjsKKwkgICAgVUxPTkcgdDsKKworCSAgICB0ID0g KFVMT05HKSB0aW1lKDApOwkvKiBDYWxjdWxhdGUgSU5QVVQgdGltZW91dCAqLworCSAgICBqID0g dCAtIGxlYXJudDE7CisJICAgIGogKz0gKGogLyA0KSA+IDAgPyAoaiAvIDQpIDogMTsgLyogQWRk IHNvbWUgc2xvcCAqLworCSAgICBpZiAoaiA8IDIpIGogPSAyOwkJICAgIC8qIDIgc2Vjb25kcyBt aW5pbXVtICovCisKKwkgICAgZnB1dHMoIlxuSU5QVVQgIixsZWFybmZwKTsJLyogR2l2ZSBJTlBV VCBjb21tYW5kIGZvciB0aGVtICovCisJICAgIGZwdXRzKGNraXRvYShqKSxsZWFybmZwKTsKKwkg ICAgZnB1dHMoIiB7IixsZWFybmZwKTsKKwkgICAgbGVhcm50MSA9IHQ7CisKKwkgICAgbiA9IExF QVJOQlVGU0laOworCSAgICBpZiAobGVhcm5iYyA8IExFQVJOQlVGU0laKSB7ICAvKiBDaXJjdWxh ciBidWZmZXIgKi8KKwkJbiA9IGxlYXJuYmM7CQkgIC8qICBoYXNuJ3Qgd3JhcHBlZCB5ZXQuICov CisJCWxlYXJuYnAgPSAwOworCSAgICB9CisJICAgIGogPSAwOwkJCS8qIENvcHkgdG8gbGluZWFy IGJ1ZmZlciAqLworCSAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CS8qIE51bWJlciBvZiBj aGFycyBpbiBjaXJjdWxhciBidWYgKi8KKworCQljYyA9IGxlYXJuYnVmWyhsZWFybmJwICsgaSkg JSBMRUFSTkJVRlNJWl07CisKKwkJLyogTGF0ZXIgYWNjb3VudCBmb3IgcHJvbXB0cyB0aGF0IGVu ZCB3aXRoIGEgbmV3bGluZT8gKi8KKworCQlpZiAoY2MgPT0gQ1IgJiYgaiA+IDApIHsKKwkJICAg IGlmIChidWZbai0xXSAhPSBMRikKKwkJICAgICAgaiA9IDA7CisJCX0KKwkJYnVmW2orK10gPSBj YzsKKwkgICAgfQorCSAgICBmb3IgKGkgPSAwOyBpIDwgajsgaSsrKSB7CS8qIE5vdyBjb3B5IG91 dCB0aGUgYnVmZmVyICovCisJCWNjID0gYnVmW2ldOwkJLyogaW50ZXJwcmV0aW5nIGNvbnRyb2wg Y2hhcnMgKi8KKwkJaWYgKGNjID09IDApIHsJCS8qIFdlIGRvbid0IElOUFVUIE5VTHMgKi8KKwkJ ICAgIGNvbnRpbnVlOworCQl9IGVsc2UgaWYgKGNjIDwgU1AgfHwJLyogQ29udHJvbHMgbmVlZCBx dW90aW5nICovCisJCQkgICAoY2MgPiAxMjYgJiYgY2MgPCAxNjApKSB7CisJCSAgICBja21ha21z Zyh4YnVmLDgsIlxceyIsY2tpdG9hKChpbnQpY2MpLCJ9IixOVUxMKTsKKwkJICAgIGZwdXRzKHhi dWYsbGVhcm5mcCk7CisJCX0gZWxzZSB7CQkvKiBQbGFpbiBjaGFyYWN0ZXIgKi8KKwkJICAgIHB1 dGMoY2MsbGVhcm5mcCk7CisJCX0KKwkgICAgfQorCSAgICBmcHV0cygifVxuSUYgRkFJTCBTVE9Q IDEgSU5QVVQgdGltZW91dCIsbGVhcm5mcCk7CisJICAgIGxlYXJuYmMgPSAwOworCX0KKwlsZWFy bmJwID0gMDsKKwlmcHV0cygiXG5QQVVTRSAxXG5PVVRQVVQgIixsZWFybmZwKTsgLyogRW1pdCBP VVRQVVQgYW5kIGZhbGwgdGhydSAqLworCisgICAgICBjYXNlIDI6CQkJCS8qIEFscmVhZHkgaW4g S2V5Ym9hcmQgc3RhdGUgKi8KKwlpZiAoYyA9PSAwKSB7CisJICAgIGZwdXRzKCJcXE4iLGxlYXJu ZnApOworCX0gZWxzZSBpZiAoYyA9PSAtNykgeworCSAgICBmcHV0cygiXFxCIixsZWFybmZwKTsK Kwl9IGVsc2UgaWYgKGMgPT0gLTgpIHsKKwkgICAgZnB1dHMoIlxcTCIsbGVhcm5mcCk7CisJfSBl bHNlIGlmIChjIDwgU1AgfHwgKGMgPiAxMjYgJiYgYyA8IDE2MCkpIHsKKwkgICAgY2ttYWttc2co eGJ1Ziw4LCJcXHsiLGNraXRvYSgoaW50KWMpLCJ9IixOVUxMKTsKKwkgICAgZnB1dHMoeGJ1Zixs ZWFybmZwKTsKKwl9IGVsc2UgeworCSAgICBwdXRjKGMsbGVhcm5mcCk7CisJfQorICAgIH0KK30K KyNlbmRpZiAvKiBDS0xFQVJOICovCisKK3N0YXRpYyBpbnQgcHJpbnRiYXIgPSAwOworCisjZGVm aW5lIE9VVFhCVUZTSVogMTUKK3N0YXRpYyBDSEFSIGlueGJ1ZltPVVRYQlVGU0laKzFdOwkvKiBI b3N0LXRvLXNjcmVlbiBleHBhbnNpb24gYnVmZmVyICovCitzdGF0aWMgaW50IGlueGNvdW50ID0g MDsJCS8qIGFuZCBjb3VudCAqLworc3RhdGljIENIQVIgb3V0eGJ1ZltPVVRYQlVGU0laKzFdOwkv KiBLZXlib2FyZC10by1ob3N0IGV4cGFuc2lvbiBidWYgKi8KK3N0YXRpYyBpbnQgb3V0eGNvdW50 ID0gMDsJCS8qIGFuZCBjb3VudCAqLworCitpbnQKK2NvbmVjdCgpIHsKKyAgICBpbnQgcmMgPSAw OwkJCQkvKiBSZXR1cm4gY29kZTogMCA9IGZhaWwsIDEgPSBPSyAqLworICAgIGludCBpLCB4ID0g MCwgcHJldiA9IC0xOwkJLyogUmVhc29uIGNvZGUgaW4gY3hfc3RhdHVzICovCisjaWZkZWYgQ0tM RUFSTgorICAgIGludCBjcmZsYWcgPSAwOworI2VuZGlmIC8qIENLTEVBUk4gKi8KKyAgICByZWdp c3RlciBpbnQgYyA9IC0xLCBjMiwgY3NhdmU7CS8qIENoYXJhY3RlcnMgKi8KKyNpZmRlZiBUTkNP REUKKyAgICBpbnQgdHg7CQkJCS8qIEZvciBUZWxuZXQgbmVnb3RpYXRpb25zICovCisjZW5kaWYg LyogVE5DT0RFICovCisgICAgaW50IGFwY3JjID0gMDsJCQkvKiBGb3IgQVBDIGFuZCB0cmFuc3Bh cmVudCBwcmludCAqLworICAgIGludCBuLCBrYmluLCBzY3Jub3V0OwkJLyogc2VsZWN0KCkgaXRl bXMuLi4gKi8KKyAgICBmZF9zZXQgaW4sIG91dCwgZXJyOwkJLyogRmlsZSBkZXNjcmlwdG9yIHNl dHMgKi8KKyAgICBpbnQgZ290bmV0ID0gMDsJCQkvKiBGbGFnIGZvciBuZXQgcmVhZHkgdG8gcmVh ZCAqLworICAgIGludCBnb3RrYmQgPSAwOwkJCS8qIEZsYWcgZm9yIGtleWJvYXJkIHJlYWR5IHRv IHJlYWQgKi8KKyAgICBpbnQgb2xkcHJ0ID0gMDsJCQkvKiBVc2VkIHdpdGggcHJpbnRpbmcgKi8K KyAgICBpbnQgbXNnZmxnID0gMDsKKyAgICBjaGFyIGNidWZbMl07CQkJLyogRGl0dG8gKi8KKwor I2lmZGVmIEJFQk9YCisgICAgaW50IHRpZCA9IDA7CQkJLyogVGhyZWFkIElEICovCisgICAgaW50 IHBhaXJbMl07CQkJLyogU29ja2V0IFBhaXIgKi8KKyAgICBDSEFSIGNoOworICAgIENIQVIgYnVm WzY0XTsKKyNlbmRpZiAvKiBCRUJPWCAqLworCisgICAgY3hfc3RhdHVzID0gQ1NYX0lOVEVSTkFM OworICAgIGRlYm9rID0gMTsKKworI2lmZGVmIEJFQk9YCisgICAgeworCS8qIENyZWF0ZSBhIHNv Y2tldCBwYWlyIHRvIGJlIHVzZWQgZm9yIHRoZSBrZXlib2FyZCBpbnB1dCAqLworCWlmIChzb2Nr ZXRwYWlyKHBhaXIpKSB7CisJICAgIGRlYnVnKEYxMTAsImNvbmVjdCIsInVuYWJsZSB0byBjcmVh dGUgc29ja2V0IHBhaXIiLDApOworCSAgICByZXR1cm4oLTEpOworCX0KKwlkZWJ1ZyhGMTExLCJj b25uZWN0Iiwic29ja2V0IHBhaXJbMF0iLHBhaXJbMF0pOworCWRlYnVnKEYxMTEsImNvbm5lY3Qi LCJzb2NrZXQgcGFpclsxXSIscGFpclsxXSk7CisKKwkvKiBBc3NpZ24gb25lIGVuZCBvZiB0aGUg c29ja2V0IHRvIGtiaW4gKi8KKwlrYmluID0gcGFpclswXTsKKyAgICAgICAgdGlkID0gc3Bhd25f dGhyZWFkKGtiZHJlYWQsCisJCQkgICAiS2JkIHRvIFNvY2tldCBQYWlyIiwKKwkJCSAgICBCX05P Uk1BTF9QUklPUklUWSwKKwkJCSAgICh2b2lkICopcGFpclsxXQorCQkJICAgKTsKKyAgICAgICAg cmVzdW1lX3RocmVhZCh0aWQpOworCWRlYnVnKEYxMTAsImNvbm5lY3QiLCJ0aWQiLHRpZCk7Cisg ICAgfQorI2Vsc2UgLyogQkVCT1ggKi8KKyAgICBrYmluID0gZmlsZW5vKHN0ZGluKTsJCS8qIHN0 ZGluIGZpbGUgZGVzY3JpcHRvciAqLworI2VuZGlmIC8qIEJFQk9YICovCisKKyAgICBzY3Jub3V0 ID0gZmlsZW5vKHN0ZG91dCk7CQkvKiBzdGRvdXQgZmlsZSBkZXNjcmlwdG9yICovCisKKyNpZmRl ZiBDS19UUklHR0VSCisgICAgbWFrZXN0cigmdHJpZ2dlcnZhbCxOVUxMKTsJCS8qIFJlc2V0IHRy aWdnZXIgKi8KKyNlbmRpZiAvKiBDS19UUklHR0VSICovCisKKyNpZmRlZiBYUFJJTlQKKyAgICBl c2NidWZjID0gMDsJCQkvKiBSZXNldCBlc2Mtc2VxdWVuY2UgYnVmZmVyICovCisgICAgZXNjYnVm WzBdID0gTlVMOworI2VuZGlmIC8qIFhQUklOVCAqLworICAgIGNidWZbMV0gPSBOVUw7CisKKyAg ICB0dGltb2ZmKCk7CQkJCS8qIFR1cm4gb2ZmIGFueSB0aW1lciBpbnRlcnJ1cHRzICovCisgICAg aWYgKCFsb2NhbCkgewkJCS8qIEJlIHN1cmUgd2UncmUgbm90IGluIHJlbW90ZSBtb2RlICovCisj aWZkZWYgTkVUQ09OTgorI2lmZGVmIE5FV0ZUUAorCWlmIChmdHBpc2Nvbm5lY3RlZCgpKQorCSAg cHJpbnRmKCJTb3JyeSwgeW91IGNhbid0IENPTk5FQ1QgdG8gYW4gRlRQIHNlcnZlclxuIik7CisJ ZWxzZQorI2VuZGlmIC8qIE5FV0ZUUCAqLworCSAgcHJpbnRmKCJTb3JyeSwgeW91IG11c3QgU0VU IExJTkUgb3IgU0VUIEhPU1QgZmlyc3RcbiIpOworI2Vsc2UKKwlwcmludGYoIlNvcnJ5LCB5b3Ug bXVzdCBTRVQgTElORSBmaXJzdFxuIik7CisjZW5kaWYgLyogTkVUQ09OTiAqLworCXJldHVybigw KTsKKyAgICB9CisgICAgaWYgKHNwZWVkIDwgMEwgJiYgbmV0d29yayA9PSAwICYmIHR0ZmRmbGcg PT0gMCkgeworCXByaW50ZigiU29ycnksIHlvdSBtdXN0IFNFVCBTUEVFRCBmaXJzdFxuIik7CisJ cmV0dXJuKDApOworICAgIH0KKyNpZmRlZiBUQ1BTT0NLRVQKKyAgICBpZiAobmV0d29yayAmJiAh dHRwaXBlICYmIChuZXR0eXBlICE9IE5FVF9UQ1BCICYmIG5ldHR5cGUgIT0gTkVUX1BUWSkpIHsK KwlwcmludGYoIlNvcnJ5LCBuZXR3b3JrIHR5cGUgbm90IHN1cHBvcnRlZFxuIik7CisJcmV0dXJu KDApOworICAgIH0KKyNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KKworI2lmZGVmIERZTkFNSUMKKyAg ICBpZiAoIWlidWYpIHsKKwlpZiAoIShpYnVmID0gbWFsbG9jKElCVUZMKzEpKSkgeyAvKiBBbGxv Y2F0ZSBpbnB1dCBsaW5lIGJ1ZmZlciAqLworCSAgICBwcmludGYoIlNvcnJ5LCBDT05ORUNUIGlu cHV0IGJ1ZmZlciBjYW4ndCBiZSBhbGxvY2F0ZWRcbiIpOworCSAgICByZXR1cm4oMCk7CisJfSBl bHNlIHsKKwkgICAgaWJwID0gaWJ1ZjsKKwkgICAgaWJjID0gMDsKKwl9CisgICAgfQorICAgIGlm ICghb2J1ZikgeworCWlmICghKG9idWYgPSBtYWxsb2MoT0JVRkwrMSkpKSB7IC8qIEFsbG9jYXRl IG91dHB1dCBsaW5lIGJ1ZmZlciAqLworCSAgICBwcmludGYoIlNvcnJ5LCBDT05ORUNUIG91dHB1 dCBidWZmZXIgY2FuJ3QgYmUgYWxsb2NhdGVkXG4iKTsKKwkgICAgcmV0dXJuKDApOworCX0gZWxz ZSB7CisJICAgIG9icCA9IG9idWY7CisJICAgIG9iYyA9IDA7CisJfQorICAgIH0KKyAgICBpZiAo IWtidWYpIHsKKwlpZiAoIShrYnVmID0gbWFsbG9jKEtCVUZMKzEpKSkgeyAvKiBBbGxvY2F0ZSBr ZXlib2FyZCBpbnB1dCBidWZmZXIgKi8KKwkgICAgcHJpbnRmKCJTb3JyeSwgQ09OTkVDVCBrZXli b2FyZCBidWZmZXIgY2FuJ3QgYmUgYWxsb2NhdGVkXG4iKTsKKwkgICAgcmV0dXJuKDApOworCX0K KyAgICB9CisgICAgaWYgKCF0ZW1wKSB7CisJaWYgKCEodGVtcCA9IG1hbGxvYyhUTVBMRU4rMSkp KSB7IC8qIEFsbG9jYXRlIHRlbXBvcmFyeSBidWZmZXIgKi8KKwkgICAgcHJpbnRmKCJTb3JyeSwg Q09OTkVDVCB0ZW1wb3JhcnkgYnVmZmVyIGNhbid0IGJlIGFsbG9jYXRlZFxuIik7CisJICAgIHJl dHVybigwKTsKKwl9CisgICAgfQorI2Vsc2UKKyAgICBvYnAgPSBvYnVmOworICAgIG9iYyA9IDA7 CisjZW5kaWYgLyogRFlOQU1JQyAqLworCisgICAga2JwID0ga2J1ZjsJCQkJLyogQWx3YXlzIGNs ZWFyIHRoZXNlLiAqLworICAgICprYnAgPSBOVUw7CQkJCS8qIE5vIG5lZWQgdG8gcHJlc2VydmUg dGhlbSBiZXR3ZWVuICovCisgICAga2JjID0gMDsJCQkJLyogQ09OTkVDVCBzZXNzaW9ucy4gKi8K KworI2lmZGVmIERFQlVHCisgICAgaWYgKGRlYmxvZykgeworCWRlYnVnKEYxMDEsIkNPTk5FQ1Qg Y29uZWN0IGVudHJ5IHR0eWZkIiwiIix0dHlmZCk7CisJZGVidWcoRjEwMSwiQ09OTkVDVCBjb25l Y3QgZW50cnkgaWJjIiwiIixpYmMpOworCWRlYnVnKEYxMDEsIkNPTk5FQ1QgY29uZWN0IGVudHJ5 IG9iYyIsIiIsb2JjKTsKKwlkZWJ1ZyhGMTAxLCJDT05ORUNUIGNvbmVjdCBlbnRyeSBrYmMiLCIi LGtiYyk7CisjaWZkZWYgQ0tfVFJJR0dFUgorCWRlYnVnKEYxMTAsIkNPTk5FQ1QgY29uZWN0IHRy aWdnZXIiLHR0X3RyaWdnZXJbMF0sMCk7CisjZW5kaWYgLyogQ0tfVFJJR0dFUiAqLworCWlmICh0 dHlmZCA+IC0xKSB7CisJICAgIG4gPSB0dGNoaygpOworCSAgICBkZWJ1ZyhGMTAxLCJDT05ORUNU IGNvbmVjdCBlbnRyeSB0dGNoayIsIiIsbik7CisJfQorICAgIH0KKyNlbmRpZiAvKiBERUJVRyAq LworCisgICAgaWYgKHR0eWZkIDwgMCkgewkJCS8qIElmIGNvbW11bmljYXRpb24gZGV2aWNlIG5v dCBvcGVuICovCisjaWZkZWYgVFRMRUJVRgorICAgICAgICBpbnQgbiA9IGxlX2luYnVmKCk7Cisg ICAgICAgIGRlYnVnKEYxMTEsIkNPTk5FQ1QgbGVfaW5idWYoKSIsInR0eWZkIDwgMCIsbik7Cisg ICAgICAgIGlmIChuID4gMCkgeworICAgICAgICAgICAgd2hpbGUgKG4tLSkgeworICAgICAgICAg ICAgICAgIENIQVIgY2g7CisgICAgICAgICAgICAgICAgbGVfZ2V0Y2hhcigmY2gpOworICAgICAg ICAgICAgICAgIGNvbm9jKGNoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybigw KTsKKyAgICAgICAgfQorI2VuZGlmIC8qIFRUTEVCVUYgKi8KKworCWRlYnVnKEYxMDEsIkNPTk5F Q1QgdHRucHJvdG8iLCIiLHR0bnByb3RvKTsKKwlkZWJ1ZyhGMTExLCJDT05ORUNUIG9wZW5pbmci LHR0bmFtZSwwKTsgLyogT3BlbiBpdCBub3cgKi8KKwlpZiAodHRvcGVuKHR0bmFtZSwKKwkJICAg JmxvY2FsLAorCQkgICBuZXR3b3JrID8gLW5ldHR5cGUgOiBtZG10eXAsCisJCSAgIDAKKwkJICAg KSA8IDApIHsKKwkgICAgY2ttYWttc2codGVtcCxUTVBMRU4sIlNvcnJ5LCBjYW4ndCBvcGVuICIs dHRuYW1lLE5VTEwsTlVMTCk7CisJICAgIHBlcnJvcih0ZW1wKTsKKwkgICAgZGVidWcoRjExMCwi Q09OTkVDVCBvcGVuIGZhaWx1cmUiLHR0bmFtZSwwKTsKKwkgICAgcmV0dXJuKDApOworCX0KKwor I2lmZGVmIElLU19PUFRJT04KKwkvKiBJZiBwZWVyIGlzIGluIEtlcm1pdCBzZXJ2ZXIgbW9kZSwg cmV0dXJuIG5vdy4gKi8KKwlpZiAoVEVMT1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1pdC51X3N0 YXJ0KSB7CisJICAgIGN4X3N0YXR1cyA9IENTWF9JS1NEOworCSAgICByZXR1cm4oMCk7CisJfQor I2VuZGlmIC8qIElLU19PUFRJT04gKi8KKyAgICB9CisgICAgZG9oYW5ndXAgPSAwOwkJCS8qIEhh bmd1cCBub3QgcmVxdWVzdGVkIHlldCAqLworCisgICAgbXNnZmxnID0gIXF1aWV0CisjaWZkZWYg Q0tfQVBDCisgICAgICAmJiAhYXBjYWN0aXZlCisjZW5kaWYgLyogQ0tfQVBDICovCisJOworCisg ICAgaWYgKG1zZ2ZsZykgeworI2lmZGVmIE5FVENPTk4KKwlpZiAobmV0d29yaykgeworI2lmZGVm IENLX0VOQ1JZUFRJT04KKwkgICAgZXh0ZXJuIGludCBtZV9lbmNyeXB0LCB1X2VuY3J5cHQ7CisJ ICAgIGlmIChja190bl9lbmNyeXB0aW5nKCkgJiYgY2tfdG5fZGVjcnlwdGluZygpKQorCSAgICAg IHByaW50ZigiU0VDVVJFIGNvbm5lY3Rpb24gdG8gaG9zdCAlcyIsdHRuYW1lKTsKKwkgICAgZWxz ZQorI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KKwkgICAgICBpZiAodHRwaXBlIHx8IHR0cHR5 KQorCQlwcmludGYoIkNvbm5lY3RpbmcgdmlhIGNvbW1hbmQgXCIlc1wiIix0dG5hbWUpOworCSAg ICAgIGVsc2UKKwkJcHJpbnRmKCJDb25uZWN0aW5nIHRvIGhvc3QgJXMiLHR0bmFtZSk7CisJfSBl bHNlIHsKKyNlbmRpZiAvKiBORVRDT05OICovCisJICAgIHByaW50ZigiQ29ubmVjdGluZyB0byAl cyIsdHRuYW1lKTsKKwkgICAgaWYgKHNwZWVkID4gLTFMKSBwcmludGYoIiwgc3BlZWQgJWxkIixz cGVlZCk7CisjaWZkZWYgTkVUQ09OTgorCX0KKyNlbmRpZiAvKiBORVRDT05OICovCisJaWYgKHR0 X2VzY2FwZSkgeworCSAgICBwcmludGYoIlxyXG4iKTsKKwkgICAgc2hvZXNjKGVzY2FwZSk7CisJ ICAgIHByaW50ZigiVHlwZSB0aGUgZXNjYXBlIGNoYXJhY3RlciBmb2xsb3dlZCBieSBDIHRvIGdl dCBiYWNrLFxyXG4iKTsKKwkgICAgcHJpbnRmKCJvciBmb2xsb3dlZCBieSA/IHRvIHNlZSBvdGhl ciBvcHRpb25zLlxyXG4iKTsKKwl9IGVsc2UgeworCSAgICBwcmludGYoIi5cclxuXG5FU0NBUEUg Q0hBUkFDVEVSIElTIERJU0FCTEVEXHJcblxuIik7CisJfQorCWlmIChzZXNsb2cpIHsKKwkgICAg ZXh0ZXJuIGludCBzbG9ndHM7CisJICAgIGNoYXIgKiBzID0gIiI7CisJICAgIHN3aXRjaCAoc2Vz c2Z0KSB7CisJICAgICAgY2FzZSBYWUZUX0Q6CisJCXMgPSAiZGVidWciOyBicmVhazsKKwkgICAg ICBjYXNlIFhZRlRfVDoKKwkJcyA9IHNsb2d0cyA/ICJ0aW1lc3RhbXBlZC10ZXh0IiA6ICJ0ZXh0 IjsgYnJlYWs7CisJICAgICAgZGVmYXVsdDoKKwkJcyA9ICJiaW5hcnkiOworCSAgICB9CisJICAg IHByaW50ZigiU2Vzc2lvbiBMb2c6ICVzLCAlcyAoJWQpIFxyXG4iLHNlc2ZpbCxzLHNlc3NmdCk7 CisJfQorCWlmIChkZWJzZXMpIHByaW50ZigiRGVidWdnaW5nIERpc3BsYXkuLi4pXHJcbiIpOwor ICAgIH0KKworLyogQ29uZGl0aW9uIGNvbnNvbGUgdGVybWluYWwgYW5kIGNvbW11bmljYXRpb24g bGluZSAqLworCisgICAgaWYgKGNvbmJpbigoY2hhcillc2NhcGUpIDwgMCkgeworCXByaW50Zigi U29ycnksIGNhbid0IGNvbmRpdGlvbiBjb25zb2xlIHRlcm1pbmFsXG4iKTsKKwlmZmx1c2goc3Rk b3V0KTsKKwlyZXR1cm4oMCk7CisgICAgfQorICAgIGRlYnVnKEYxMDEsIkNPTk5FQ1QgY21hc2si LCIiLGNtYXNrKTsKKyAgICBkZWJ1ZyhGMTAxLCJDT05ORUNUIGNtZG1zayIsIiIsY21kbXNrKTsK KyAgICBkZWJ1ZyhGMTAxLCJDT05ORUNUIHNwZWVkIGJlZm9yZSB0dHZ0IiwiIixzcGVlZCk7Cisg ICAgaWYgKChuID0gdHR2dChzcGVlZCxmbG93KSkgPCAwKSB7CS8qIEVudGVyICJ2aXJ0dWFsIHRl cm1pbmFsIiBtb2RlICovCisJaWYgKCFuZXR3b3JrKSB7CisJICAgIGRlYnVnKEYxMDEsIkNPTk5F Q1QgdHR2dCIsIiIsbik7CisJICAgIHR0aGFuZygpOwkJCS8qIEhhbmcgdXAgYW5kIGNsb3NlIHRo ZSBkZXZpY2UuICovCisJICAgIHR0Y2xvcygwKTsKKwkgICAgZG9sb2dlbmQoKTsKKwkgICAgaWYg KHR0b3Blbih0dG5hbWUsCQkvKiBPcGVuIGl0IGFnYWluLi4uICovCisJCSAgICAgICAmbG9jYWws CisJCSAgICAgICBuZXR3b3JrID8gLW5ldHR5cGUgOiBtZG10eXAsCisJCSAgICAgICAwCisJCSAg ICAgICApIDwgMCkgeworCQljeF9zdGF0dXMgPSBDU1hfSU5URVJOQUw7CisJCWNrbWFrbXNnKHRl bXAsVE1QTEVOLCJTb3JyeSwgY2FuJ3QgcmVvcGVuICIsdHRuYW1lLE5VTEwsTlVMTCk7CisJCXBl cnJvcih0ZW1wKTsKKwkJcmV0dXJuKDApOworCSAgICB9CisjaWZkZWYgSUtTX09QVElPTgorCSAg ICBpZiAoVEVMT1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1pdC51X3N0YXJ0KSB7CisJCWN4X3N0 YXR1cyA9IENTWF9JS1NEOworCQlyZXR1cm4oMCk7CisJICAgIH0KKyNlbmRpZiAvKiBJS1NfT1BU SU9OICovCisKKwkgICAgaWYgKHR0dnQoc3BlZWQsZmxvdykgPCAwKSB7CS8qIFRyeSB2aXJ0dWFs IHRlcm1pbmFsIG1vZGUgYWdhaW4uICovCisJCWNvbnJlcygpOwkJLyogRmFpbHVyZSB0aGlzIHRp bWUgaXMgZmF0YWwuICovCisJCXByaW50ZigiU29ycnksIENhbid0IGNvbmRpdGlvbiBjb21tdW5p Y2F0aW9uIGxpbmVcbiIpOworCQljeF9zdGF0dXMgPSBDU1hfSU5URVJOQUw7CisJCXJldHVybigw KTsKKwkgICAgfQorCX0KKyAgICB9CisgICAgZGVidWcoRjEwMSwiQ09OTkVDVCB0dHZ0IG9rLCBl c2NhcGUiLCIiLGVzY2FwZSk7CisKKyAgICAvKiBEZXNwaXRlIHR0dnQoKSB0aGlzIGlzIHN0aWxs IG5lZWRlZCBpbiBIUC1VWCAqLworICAgIC8qIGJlY2F1c2Ugb2YgdGhlIEhQLTkwMDAgPFJFU0VU PiBrZXkuKi8KKworICAgIHNpZ25hbChTSUdJTlQsIFNJR19JR04pOworICAgIHNpZ25hbChTSUdR VUlULCBTSUdfSUdOKTsKKworICAgIGRlYnVnKEYxMDEsIkNPTk5FQ1QgY2Fycmllci13YXRjaCIs IiIsY2Fycmllcik7CisgICAgaWYgKCghbmV0d29yayAKKyNpZmRlZiBUTl9DT01QT1JUCisgICAg ICAgIHx8IGlzdG5jb21wb3J0KCkKKyNlbmRpZiAvKiBUTl9DT01QT1JUICovCisJKSAmJiAoY2Fy cmllciAhPSBDQVJfT0ZGKSkgeworCWludCB4OworCXggPSB0dGdtZG0oKTsKKwlkZWJ1ZyhGMTAw LCJDT05ORUNUIHR0Z21kbSIsIiIseCk7CisJaWYgKCh4ID4gLTEpICYmICEoeCAmIEJNX0RDRCkp IHsKKyNpZm5kZWYgTk9ISU5UUworCSAgICBleHRlcm4gaW50IGhpbnRzOworI2VuZGlmIC8qIE5P SElOVFMgKi8KKwkgICAgZGVidWcoRjEwMCwiQ09OTkVDVCB0dGdtZG0gQ0QgdGVzdCBmYWlscyIs IiIseCk7CisJICAgIGNvbnJlcygpOworCSAgICBwcmludGYoIj9DYXJyaWVyIHJlcXVpcmVkIGJ1 dCBub3QgZGV0ZWN0ZWQuXG4iKTsKKyNpZm5kZWYgTk9ISU5UUworCSAgICBjeF9zdGF0dXMgPSBD U1hfQ0FSUklFUjsKKwkgICAgaWYgKCFoaW50cykKKwkgICAgICByZXR1cm4oMCk7CisJICAgIHBy aW50ZigiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiIpOworCSAgICBwcmlu dGYoIiBIaW50OiBUbyBDT05ORUNUIHRvIGEgc2VyaWFsIGRldmljZSB0aGF0XG4iKTsKKwkgICAg cHJpbnRmKCIgaXMgbm90IHByZXNlbnRpbmcgdGhlIENhcnJpZXIgRGV0ZWN0IHNpZ25hbCxcbiIp OworCSAgICBwcmludGYoIiBmaXJzdCB0ZWxsIEMtS2VybWl0IHRvOlxuXG4iKTsKKwkgICAgcHJp bnRmKCIgICBTRVQgQ0FSUklFUi1XQVRDSCBPRkZcblxuIik7CisJICAgIHByaW50ZigiKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblxuIik7CisjZW5kaWYgLyogTk9ISU5UUyAq LworCSAgICByZXR1cm4oMCk7CisJfQorCWRlYnVnKEYxMDAsIkNPTk5FQ1QgdHRnbWRtIG9rIiwi IiwwKTsKKyAgICB9CisKKyAgICAvKiBOb3cgd2UgYXJlIGNvbm5lY3RlZC4gKi8KKworICAgIGlm IChtc2dmbGcgfHwgcHJpbnRiYXIpCisgICAgICBwcmludGYoIi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuIik7CisgICAgZmZsdXNoKHN0ZG91 dCk7CisKKyNpZm5kZWYgTk9DU0VUUworLyogU2V0IHVwIGNoYXJhY3RlciBzZXQgdHJhbnNsYXRp b25zICovCisKKyAgICB1bmljb2RlID0gMDsJCQkvKiBBc3N1bWUgVW5pY29kZSB3b24ndCBiZSBp bnZvbHZlZCAqLworICAgIHRjcyA9IDA7CQkJCS8qICJUcmFuc2ZlciIgb3IgIk90aGVyIiBjaGFy c2V0ICovCisgICAgc3hvID0gcnhvID0gTlVMTDsJCQkvKiBJbml0aWFsaXplIGJ5dGUtdG8tYnl0 ZSBmdW5jdGlvbnMgKi8KKyAgICBzeGkgPSByeGkgPSBOVUxMOworCisgICAgaWYgKHRjc3IgIT0g dGNzbCkgewkJCS8qIFJlbW90ZSBhbmQgbG9jYWwgc2V0cyBkaWZmZXIuLi4gKi8KKyNpZmRlZiBV TklDT0RFCisJaWYgKHRjc3IgPT0gRkNfVVRGOCB8fAkJLyogUmVtb3RlIGNoYXJzZXQgaXMgVVRG LTggKi8KKwkgICAgdGNzbCA9PSBGQ19VVEY4KSB7CQkvKiBvciBsb2NhbCBvbmUgaXMuICovCisJ ICAgIHh1ZiA9IHhsX3VmY1t0Y3NsXTsJCS8qIEluY29taW5nIFVuaWNvZGUgdG8gbG9jYWwgKi8K KwkgICAgaWYgKHh1ZiB8fCB0Y3NsID09IEZDX1VURjgpIHsKKwkJdGNzID0gKHRjc3IgPT0gRkNf VVRGOCkgPyB0Y3NsIDogdGNzcjsgLyogVGhlICJvdGhlciIgc2V0ICovCisJCXhmdSA9IHhsX2Zj dVt0Y3NdOwkvKiBMb2NhbCBieXRlIHRvIHJlbW90ZSBVbmljb2RlICovCisJCWlmICh4ZnUpCisJ CSAgdW5pY29kZSA9ICh0Y3NyID09IEZDX1VURjgpID8gMSA6IDI7CisJICAgIH0KKwkgICAgdGNz c2l6ZSA9IGZjc2luZm9bdGNzXS5zaXplOyAvKiBTaXplIG9mIG90aGVyIGNoYXJhY3RlciBzZXQu ICovCisJfSBlbHNlIHsKKyNlbmRpZiAvKiBVTklDT0RFICovCisJICAgIHRjcyA9IGdldHRjcyh0 Y3NyLHRjc2wpOwkvKiBHZXQgaW50ZXJtZWRpYXRlIHNldC4gKi8KKwkgICAgc3hvID0geGxzW3Rj c11bdGNzbF07CS8qIHRyYW5zbGF0aW9uIGZ1bmN0aW9uICovCisJICAgIHJ4byA9IHhsclt0Y3Nd W3Rjc3JdOwkvKiBwb2ludGVycyBmb3Igb3V0cHV0IGZ1bmN0aW9ucyAqLworCSAgICBzeGkgPSB4 bHNbdGNzXVt0Y3NyXTsJLyogYW5kIGZvciBpbnB1dCBmdW5jdGlvbnMuICovCisJICAgIHJ4aSA9 IHhsclt0Y3NdW3Rjc2xdOworI2lmZGVmIFVOSUNPREUKKwl9CisjZW5kaWYgLyogVU5JQ09ERSAq LworICAgIH0KKy8qCisgIFRoaXMgaXMgdG8gcHJldmVudCB1c2Ugb2Ygem1zdHVmZigpIGFuZCB6 ZHN0dWZmKCkgYnkgdHJhbnNsYXRpb24gZnVuY3Rpb25zLgorICBUaGV5IG9ubHkgd29yayB3aXRo IGRpc2sgaS9vLCBub3Qgd2l0aCBjb21tdW5pY2F0aW9uIGkvby4gIEx1Y2tpbHkgUnVzc2lhbgor ICB0cmFuc2xhdGlvbiBmdW5jdGlvbnMgZG9uJ3QgZG8gYW55IHN0dWZmaW5nLi4uCisqLworICAg IGxhbmdzdiA9IGxhbmd1YWdlOworI2lmbmRlZiBOT0NZUklMCisgICAgaWYgKGxhbmd1YWdlICE9 IExfUlVTU0lBTikKKyNlbmRpZiAvKiBOT0NZUklMICovCisgICAgICBsYW5ndWFnZSA9IExfVVNB U0NJSTsKKworI2lmZGVmIENPTU1FTlQKKyNpZmRlZiBERUJVRworICAgIGlmIChkZWJsb2cpIHsK KwlkZWJ1ZyhGMTAxLCJDT05ORUNUIHRjcyIsIiIsdGNzKTsKKwlkZWJ1ZyhGMTAxLCJDT05ORUNU IHRjc2wiLCIiLHRjc2wpOworCWRlYnVnKEYxMDEsIkNPTk5FQ1QgdGNzciIsIiIsdGNzcik7CisJ ZGVidWcoRjEwMSwiQ09OTkVDVCBmY3NpbmZvW3Rjc2xdLnNpemUiLCIiLGZjc2luZm9bdGNzbF0u c2l6ZSk7CisJZGVidWcoRjEwMSwiQ09OTkVDVCBmY3NpbmZvW3Rjc3JdLnNpemUiLCIiLGZjc2lu Zm9bdGNzcl0uc2l6ZSk7CisJZGVidWcoRjEwMSwiQ09OTkVDVCB1bmljb2RlIiwiIix1bmljb2Rl KTsKKyAgICB9CisjZW5kaWYgLyogREVCVUcgKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisKKyNp ZmRlZiBDS19YWVoKKyNpZm5kZWYgWFlaX0lOVEVSTkFMCisgICAgeworCWV4dGVybiBpbnQgYmlu YXJ5OwkJLyogU2VlIGFib3V0IFpNT0RFTSBhdXRvZG93bmxvYWRzICovCisJY2hhciAqIHM7CisJ cyA9IGJpbmFyeSA/IHB0YWJbUFJPVE9fWl0ucF9iX3JjbWQgOiBwdGFiW1BST1RPX1pdLnBfdF9y Y21kOworCWlmICghcykgcyA9ICIiOworCXptZGxvayA9ICgqcyAhPSBOVUwpOwkJLyogT0sgaWYg d2UgaGF2ZSBleHRlcm5hbCBjb21tYW5kcyAqLworICAgIH0KKyNlbmRpZiAvKiBYWVpfSU5URVJO QUwgKi8KKyNlbmRpZiAvKiBDS19YWVogKi8KKworI2lmbmRlZiBOT0VTQ1NFUQorLyoKKyAgV2Ug bmVlZCB0byBhY3RpdmF0ZSB0aGUgZXNjYXBlLXNlcXVlbmNlIHJlY29nbml0aW9uIGZlYXR1cmUg d2hlbjoKKyAgIChhKSB0cmFuc2xhdGlvbiBpcyBlbGVjdGVkLCBBTkQKKyAgIChiKSB0aGUgbG9j YWwgYW5kL29yIHJlbW90ZSBzZXQgaXMgYSA3LWJpdCBzZXQgb3RoZXIgdGhhbiBVUyBBU0NJSTsK KyAgT3I6CisgICBTRVQgU0VTU0lPTi1MT0cgaXMgVEVYVCAoc28gd2UgY2FuIHN0cmlwIGVzY2Fw ZSBzZXF1ZW5jZXMgb3V0IG9mIHRoZSBsb2cpOworICBPcjoKKyAgIFNFVCBURVJNSU5BTCBBUEMg aXMgbm90IE9GRiAoaGFuZGxlZCBpbiB0aGUgbmV4dCBzdGF0ZW1lbnQpLgorKi8KKyAgICBlc2Nz ZXEgPSAodGNzICE9IFRDX1RSQU5TUCkgJiYJLyogTm90IHRyYW5zcGFyZW50ICovCisgICAgICAo ZmNzaW5mb1t0Y3NsXS5zaXplID09IDEyOCB8fCBmY3NpbmZvW3Rjc3JdLnNpemUgPT0gMTI4KSAm JiAvKiA3IGJpdHMgKi8KKwkoZmNzaW5mb1t0Y3NsXS5jb2RlICE9IEZDX1VTQVNDSUkpOyAvKiBC dXQgbm90IEFTQ0lJICovCisjZW5kaWYgLyogTk9FU0NTRVEgKi8KKyNlbmRpZiAvKiBOT0NTRVRT ICovCisKKyNpZm5kZWYgTk9FU0NTRVEKKyAgICBpZiAoIWVzY3NlcSkgewkJCS8qIDIwMDkvMTAv MjIgKi8KKwlpZiAoc2VzbG9nICYmICFzZXNzZnQpCisJICBlc2NzZXEgPSAxOworICAgIH0KKyNp ZmRlZiBDS19BUEMKKyAgICBlc2NzZXEgPSBlc2NzZXEgfHwgKGFwY3N0YXR1cyAmIEFQQ19PTik7 CisgICAgYXBjYWN0aXZlID0gMDsJCQkvKiBBbiBBUEMgY29tbWFuZCBpcyBub3QgYWN0aXZlICov CisgICAgYXBjbGVuZ3RoID0gMDsJCQkvKiAuLi4gKi8KKyNlbmRpZiAvKiBDS19BUEMgKi8KKyNp ZmRlZiBYUFJJTlQKKyAgICBlc2NzZXEgfD0gdHRfcHJpbnQ7CisjZW5kaWYgLyogWFBSSU5UICov CisgICAgLyogSW5pdGlhbCBzdGF0ZSBvZiByZWNvZ25pemVyICovCisgICAgaW5lc2NbMF0gPSBF U19OT1JNQUw7CQkvKiBSZW1vdGUgdG8gc2NyZWVuICovCisgICAgaW5lc2NbMV0gPSBFU19OT1JN QUw7CQkvKiBLZXlib2FyZCB0byByZW1vdGUgKi8KKyAgICBkZWJ1ZyhGMTAxLCJDT05ORUNUIGVz Y3NlcSIsIiIsZXNjc2VxKTsKKyNlbmRpZiAvKiBOT0VTQ1NFUSAqLworCisgICAgaWYgKHR0eWZk ID4gLTEpIHsJCQkvKiAoanVzdCBpbiBjYXNlLi4uKSAqLworCXdoYXQgPSBXX0NPTk5FQ1Q7CQkv KiBLZWVwIHRyYWNrIG9mIHdoYXQgd2UncmUgZG9pbmcgKi8KKwlhY3RpdmUgPSAxOworICAgIH0K KyNpZmRlZiBDS0xFQVJOCisgICAgaWYgKGxlYXJuaW5nKSB7CQkJLyogTGVhcm5lZCBzY3JpcHQg YWN0aXZlLi4uICovCisJbGVhcm5icCA9IDA7CQkJLyogSU5QVVQgYnVmZmVyIHBvaW50ZXIgKi8K KwlsZWFybmJjID0gMDsJCQkvKiBJTlBVVCBidWZmZXIgY291bnQgKi8KKwlsZWFybnN0ID0gMDsJ CQkvKiBTdGF0ZSAoMCA9IG5ldXRyYWwsIG5vbmUpICovCisJbGVhcm50MSA9IChVTE9ORykgdGlt ZSgwKTsKKyAgICB9CisjZW5kaWYgLyogQ0tMRUFSTiAqLworCisjaWZkZWYgQ0tUSURMRQorICAg IGlkbGVsaW1pdCA9IHR0X2lkbGVsaW1pdDsKKyNlbmRpZiAvKiBDS1RJRExFICovCisKKyAgICB3 aGlsZSAoYWN0aXZlKSB7CQkJLyogQmlnIGxvb3AuLi4gKi8KKwlkZWJ1ZyhGMTAwLCJDT05ORUNU IHRvcCBvZiBsb29wIiwiIiwwKTsKKwlGRF9aRVJPKCZpbik7CQkJLyogQ2xlYXIgc2VsZWN0KCkg c3RydWN0cyAqLworCUZEX1pFUk8oJm91dCk7CisJRkRfWkVSTygmZXJyKTsKKwlnb3RrYmQgPSAw OworCWdvdG5ldCA9IHR0cGVlaygpOwkJLyogU29tZXRoaW5nIHNpdHRpbmcgaW4gY2t1dGlvIGJ1 ZiAqLworCWRlYnVnKEYxMDEsIkNPTk5FQ1QgdHRwZWVrIiwiIixnb3RuZXQpOworCisJaWYgKAor I2lmbmRlZiBOT1NFVEtFWQorCSAgICAha21wdHIJCQkvKiBDaGVjayBmb3Iga2V5IG1hY3JvIGFj dGl2ZSAqLworI2Vsc2UKKwkgICAgMQorI2VuZGlmIC8qIE5PU0VUS0VZICovCisJICAgICkgewor CSAgICBpZiAob2JjKSB7CQkJLyogTm8ga2V5IG1hY3JvIC0gc2V0IHVwIGZvciBzZWxlY3QgKi8K KwkJRkRfU0VUKHR0eWZkLCAmb3V0KTsJLyogSGF2ZSBzdHVmZiB0byBzZW5kIHRvIG5ldCAqLwor CSAgICB9IGVsc2UgeworCQlGRF9TRVQoa2JpbiwgJmluKTsJLyogTmVlZCB0byByZWFkIHN0dWZm IGZyb20ga2V5Ym9hcmQgKi8KKwkgICAgfQorI2lmZGVmIEJFQk9YCisJICAgIGlmICghKGliYyB8 fCBnb3RuZXQgPiAwKSkKKwkJRkRfU0VUKHR0eWZkLCAmaW4pOwkvKiBOZWVkIHRvIHJlYWQgc3R1 ZmYgZnJvbSBuZXQgKi8KKyNlbHNlIC8qIEJFQk9YICovCisJICAgIGlmIChpYmMgfHwgZ290bmV0 ID4gMCkgeworCQlGRF9TRVQoc2Nybm91dCwgJm91dCk7CS8qIEhhdmUgc3R1ZmYgdG8gcHV0IG9u IHNjcmVlbiAqLworCSAgICB9IGVsc2UgeworCQlGRF9TRVQodHR5ZmQsICZpbik7CS8qIE5lZWQg dG8gcmVhZCBzdHVmZiBmcm9tIG5ldCAqLworCSAgICB9CisjZW5kaWYgLyogQkVCT1ggKi8KKyAg ICAgICAgICAgIEZEX1NFVCh0dHlmZCwgJmVycik7CisjaWZkZWYgQ0tfRk9SV0FSRF9YCisgICAg ICAgICAgICBmd2R4X2luaXRfZmRfc2V0KCZpbik7CisjZW5kaWYgLyogQ0tfRk9SV0FSRF9YICov CisKKwkgICAgLyogV2FpdCB0aWxsIHRoZSBmaXJzdCBvbmUgb2YgdGhlIGFib3ZlIGlzIHJlYWR5 IGZvciBpL28gKi8KKwkgICAgLyogb3IgVEVSTSBJRExFLVNFTkQgaXMgYWN0aXZlIGFuZCB3ZSB0 aW1lIG91dC4gKi8KKworCSAgICBlcnJubyA9IDA7CisjaWZkZWYgQ0tUSURMRQorCSAgICAvKiBU aGlzIHJlYWxseSBjb3VsZCBiZSBtb3ZlZCBvdXQgb2YgdGhlIGxvb3AuLi4gKi8KKwkgICAgaWYg KGlkbGVsaW1pdCkgewkJLyogSWRsZSB0aW1lb3V0IHNldCAqLworCQlzdHJ1Y3QgdGltZXZhbCB0 djsKKwkJaWYgKGlkbGVsaW1pdCA+IDApIHsJLyogUG9zaXRpdmUgPSBzZWMgKi8KKwkJICAgIHR2 LnR2X3NlYyA9IChsb25nKSBpZGxlbGltaXQ7CisJCSAgICB0di50dl91c2VjID0gMEw7CisJCX0g ZWxzZSB7CQkvKiBOZWdhdGl2ZSA9IG1pbGxpc2VjICovCisJCSAgICBsb25nIHUgPSAoMCAtIGlk bGVsaW1pdCk7CisJCSAgICB0di50dl9zZWMgPSB1IC8gMTAwMEw7CisJCSAgICB0di50dl91c2Vj ID0gKCh1ICUgMTAwMEwpICogMTAwMEwpOworCQl9CisjaWZkZWYgSU5UU0VMRUNUCisJCWMgPSBz ZWxlY3QoRkRfU0VUU0laRSwoaW50ICopJmluLChpbnQgKikmb3V0LChpbnQgKikmZXJyLCAmdHYp OworI2Vsc2UKKwkJYyA9IHNlbGVjdChGRF9TRVRTSVpFLCAmaW4sICZvdXQsICZlcnIsICZ0dik7 CisjZW5kaWYgLyogSU5UU0VMRUNUICovCisJICAgIH0gZWxzZQorI2VuZGlmIC8qIENLVElETEUg Ki8KKyNpZmRlZiBJTlRTRUxFQ1QKKwkgICAgICBjID0gc2VsZWN0KEZEX1NFVFNJWkUsIChpbnQg KikmaW4sIChpbnQgKikmb3V0LCAoaW50ICopJmVyciwgMCk7CisjZWxzZQorCSAgICAgIGMgPSBz ZWxlY3QoRkRfU0VUU0laRSwgJmluLCAmb3V0LCAmZXJyLCAwKTsKKyNlbmRpZiAvKiBJTlRTRUxF Q1QgKi8KKwkgICAgaWYgKGMgPCAxKSB7CisjaWZkZWYgQ0tUSURMRQorCQlpZiAoYyA9PSAwKSB7 CQkvKiBUaW1lb3V0ICovCisJCSAgICBkZWJ1ZyhGMTAxLCJDT05ORUNUIHNlbGVjdCgpIHRpbWVv dXQiLCIiLHR0X2lkbGVhY3QpOworCQkgICAgc3dpdGNoICh0dF9pZGxlYWN0KSB7CisJCSAgICAg IGNhc2UgSURMRV9IQU5HOiB7CS8qIEhhbmcgdXAgKi8KKwkJCSAgaW50IHggPSAwOworI2lmbmRl ZiBOT0RJQUwKKwkJCSAgaWYgKGRpYWxtaHUpCisJCQkgICAgeCA9IG1kbWh1cCgpOworCQkJICBp ZiAoeCA8IDEpCisjZW5kaWYgLyogTk9ESUFMICovCisJCQkgICAgdHRoYW5nKCk7CS8qIGZhbGwg dGhydSBkZWxpYmVyYXRlbHkuLi4gKi8KKwkJICAgICAgfQorCQkgICAgICBjYXNlIElETEVfUkVU OgkvKiBSZXR1cm4gdG8gY29tbWFuZCBtb2RlICovCisJCQljeF9zdGF0dXMgPSBDU1hfSURMRTsK KwkJCWFjdGl2ZSA9IDA7CisJCQljb250aW51ZTsKKwkJICAgICAgY2FzZSBJRExFX09VVDoJLyog T1VUUFVUIGEgc3RyaW5nICovCisJCQlpZiAodHRfaWRsZXN0cikgeworCQkJICAgIGludCBsZW4g PSBzdHJsZW4odHRfaWRsZXN0cik7CisJCQkgICAgaWYgKGxlbiA+IDApCisJCQkgICAgICB0dG9s KChDSEFSICopdHRfaWRsZXN0cixsZW4pOworCQkJICAgIGVsc2UKKwkJCSAgICAgIHR0b2MoTlVM KTsgLyogTm8gc3RyaW5nLCBzZW5kIGEgTlVMICovCisJCQl9IGVsc2UKKwkJCSAgdHRvYyhOVUwp OwkvKiBObyBzdHJpbmcsIHNlbmQgYSBOVUwgKi8KKwkJCWNvbnRpbnVlOworCQkgICAgICBjYXNl IElETEVfRVhJVDoJLyogRXhpdCBmcm9tIEtlcm1pdCAqLworCQkJZG9leGl0KEdPT0RfRVhJVCx4 aXRzdGEpOworI2lmZGVmIFROQ09ERQorCQkgICAgICBjYXNlIElETEVfVEFZVDoJLyogU2VuZCBU ZWxuZXQgQXJlIFlvdSBUaGVyZT8gKi8KKwkJCWlmIChuZXR3b3JrICYmIElTX1RFTE5FVCgpKSB7 CisJCQkgICAgdG5vcHRbMF0gPSAoQ0hBUikgSUFDOworCQkJICAgIHRub3B0WzFdID0gKENIQVIp IFROX0FZVDsKKwkJCSAgICB0bm9wdFsyXSA9IE5VTDsKKwkJCSAgICBpZiAodHRvbCgoQ0hBUiAq KXRub3B0LDIpIDwgMCkKKwkJCSAgICAgIGFjdGl2ZSA9IDA7CisJCQl9CisJCQljb250aW51ZTsK KworCQkgICAgICBjYXNlIElETEVfVE5PUDoJLyogU2VuZCBUZWxuZXQgTk9QICovCisJCQlpZiAo bmV0d29yayAmJiBJU19URUxORVQoKSkgeworCQkJICAgIHRub3B0WzBdID0gKENIQVIpIElBQzsK KwkJCSAgICB0bm9wdFsxXSA9IChDSEFSKSBUTl9OT1A7CisJCQkgICAgdG5vcHRbMl0gPSBOVUw7 CisJCQkgICAgaWYgKHR0b2woKENIQVIgKil0bm9wdCwyKSA8IDApCisJCQkgICAgICBhY3RpdmUg PSAwOworCQkJfQorCQkJY29udGludWU7CisjZW5kaWYgLyogVE5DT0RFICovCisJCSAgICB9CisJ CX0KKyNlbmRpZiAvKiBDS1RJRExFICovCisKKwkJZGVidWcoRjEwMSwiQ09OTkVDVCBzZWxlY3Qo KSBlcnJubyIsIiIsZXJybm8pOworCQkvKiBBIHRvby1iaWcgZmlyc3QgYXJnIHRvIHNlbGVjdCgp IGdldHMgRUJBREYgKi8KKyNpZmRlZiBFSU5UUgorCQlpZiAoYyA9PSAtMSkgeworCQkgICAgaWYg KGVycm5vID09IEVJTlRSKSB7CisJCQljb250aW51ZTsKKwkJICAgIH0KKwkJfQorI2VuZGlmIC8q IEVJTlRSICovCisJCXNsZWVwKDEpOworCQljb250aW51ZTsKKwkgICAgfQorI2lmbmRlZiBCRUJP WAorI2lmZGVmIERFQlVHCisJICAgIGlmIChGRF9JU1NFVChzY3Jub3V0LCAmb3V0KSkgeworCQlk ZWJ1ZyhGMTAwLCJDT05ORUNUIFNFTEVDVCBzY3Jub3V0IiwiIiwwKTsKKwkgICAgfQorI2VuZGlm IC8qIERFQlVHICovCisjZW5kaWYgLyogQkVCT1ggKi8KKworI2lmZGVmIENLX0ZPUldBUkRfWAor ICAgICAgICAgICAgZndkeF9jaGVja19zb2NrZXRzKCZpbik7CisjZW5kaWYgLyogQ0tfRk9SV0FS RF9YICovCisKKwkgICAgaWYgKEZEX0lTU0VUKHR0eWZkLCAmaW4pKSB7CS8qIFJlYWQgZnJvbSBu ZXQ/ICovCisJCWRlYnVnKEYxMTAsIkNPTk5FQ1QgU0VMRUNUIHR0eWZkIiwiaW4iLDApOworCQlG RF9DTFIodHR5ZmQsICZpbik7CisJCWdvdG5ldCA9IDE7CQkvKiBOZXQgaXMgcmVhZHkgKi8KKwkg ICAgfQorCSAgICBpZiAoRkRfSVNTRVQoa2JpbiwgJmluKSkgewkvKiBSZWFkIGZyb20ga2V5Ym9h cmQ/ICovCisJCWRlYnVnKEYxMDAsIkNPTk5FQ1QgU0VMRUNUIGtiaW4iLCIiLDApOworCQlGRF9D TFIoa2JpbiwgJmluKTsKKwkJZ290a2JkID0gMTsJCS8qIEtleWJvYXJkIGlzIHJlYWR5ICovCisJ ICAgIH0KKyAgICAgICAgICAgIGlmIChGRF9JU1NFVCh0dHlmZCwgJmVycikpIHsKKwkJZGVidWco RjExMCwiQ09OTkVDVCBTRUxFQ1QgdHR5ZmQiLCJlcnIiLDApOworCQlGRF9DTFIodHR5ZmQsICZl cnIpOworI2lmZGVmIE5FVFBUWQorI2lmZGVmIEhBVkVfUFRZVFJBUAorCQkvKiBTcGVjaWFsIGhh bmRsaW5nIGZvciBIUC1VWCBwdHkgaS9vICovCisgICAgICAgICAgICAgICAgaWYgKHR0cHR5KSB7 CisgICAgICAgICAgICAgICAgICAgIGlmIChwdHlfdHJhcF9oYW5kbGVyKHR0eWZkKSA+IDApIHsK KyAgICAgICAgICAgICAgICAgICAgICAgIHR0Y2xvcygwKTsKKyAgICAgICAgICAgICAgICAgICAg ICAgIGdvdG8gY29ucmV0MTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisjZW5kaWYgLyogSEFWRV9QVFlUUkFQ ICovCisjZW5kaWYgLyogTkVUUFRZICovCisJCWdvdG5ldCA9IDE7CQkvKiBOZXQgaXMgcmVhZHkg KGRvbid0IHNldCBpZiBwdHkpICovCisgICAgICAgICAgICB9CisJfQorI2lmZGVmIERFQlVHCisJ aWYgKGRlYmxvZykgeworCSAgICBkZWJ1ZyhGMTAxLCJDT05ORUNUIGdvdGtiZCIsIiIsZ290a2Jk KTsKKwkgICAgZGVidWcoRjEwMSwiQ09OTkVDVCBrYmMiLCIiLGtiYyk7CisjaWZkZWYgQ09NTUVO VAorI2lmbmRlZiBOT1NFVEtFWQorCSAgICBkZWJ1ZyhGMTAxLCJDT05ORUNUIGttcHRyIiwiIixr bXB0cik7CisjZW5kaWYgLyogTk9TRVRLRVkgKi8KKyNlbmRpZgkvKiBDT01NRU5UICovCisJfQor I2VuZGlmIC8qIERFQlVHICovCisKKwl3aGlsZSAoZ290a2JkIHx8IGtiYyA+IDAJLyogSWYgd2Ug aGF2ZSBrZXlib2FyZCBjaGFycyAqLworI2lmbmRlZiBOT1NFVEtFWQorCSAgICAgICB8fCBrbXB0 cgorI2VuZGlmIC8qIE5PU0VUS0VZICovCisJICAgICAgICkgeworI2lmbmRlZiBOT1NFVEtFWQor CSAgICBpZiAoa21wdHIpIHsJCS8qIEhhdmUgY3VycmVudCBtYWNybz8gKi8KKwkJZGVidWcoRjEw MCwiQ09OTkVDVCBrbXB0ciBub24gTlVMTCIsIiIsMCk7CisJCWlmICgoYyA9IChDSEFSKSAqa21w dHIrKykgPT0gTlVMKSB7IC8qIEdldCBjaGFyIGZyb20gaXQgKi8KKwkJICAgIGRlYnVnKEYxMDAs IkNPTk5FQ1QgbWFjcm8gZW1wdHksIGNvbnRpbnVpbmciLCIiLDApOworCQkgICAga21wdHIgPSBO VUxMOwkvKiBJZiBubyBtb3JlIGNoYXJzLCAgKi8KKwkJICAgIGNvbnRpbnVlOwkJLyogUmVzZXQg cG9pbnRlciBhbmQgY29udGludWUgKi8KKwkJfQorCQlkZWJ1ZyhGMDAwLCJDT05ORUNUIGNoYXIg ZnJvbSBtYWNybyIsIiIsYyk7CisJICAgIH0gZWxzZSB7CQkJLyogTm8gbWFjcm8uLi4gKi8KKyNl bmRpZiAvKiBOT1NFVEtFWSAqLworI2lmZGVmIEJFQk9YCisJCXsKKwkJICAgIGludCByYyA9IDA7 CisJCSAgICBpZiAoKHJjID0gcmVjdihrYmluLGJ1ZiwxLDApKSA+IDApCisJCSAgICAgIGMgPSBi dWZbMF07CisJCSAgICBlbHNlCisJCSAgICAgIGMgPSAtMTsKKwkJICAgIGRlYnVnKEYxMTEsInJl Y3YiLCJyYyIscmMpOworCQkgICAgcHJpbnRmKCJcclxucmVjdjogJWMgcmM9JWRcclxuIixidWZb MF0scmMpOworCQl9CisjZWxzZSAvKiBCRUJPWCAqLworCQljID0gQ09OR0tTKCk7CQkvKiBZZXMs IHJlYWQgZnJvbSBrZXlib2FyZCAqLworI2VuZGlmIC8qIEJFQk9YICovCisJCWdvdGtiZCA9IDA7 CQkvKiBUdXJuIG9mZiBzZWxlY3QoKSByZXN1bHQgZmxhZyAqLworI2lmbmRlZiBOT1NFVEtFWQor CSAgICB9CisjZW5kaWYgLyogTk9TRVRLRVkgKi8KKwkgICAgaWYgKGMgPT0gLTEpIHsKKyNpZmRl ZiBFSU5UUgorCQlpZiAoZXJybm8gPT0gRUlOVFIpCisJCSAgY29udGludWU7CisjZW5kaWYgLyog RUlOVFIgKi8KKwkJY3hfc3RhdHVzID0gQ1NYX0lPRVJST1I7CisJCWNvbm9jKEJFTCk7CisJCWdv dG8gY29ucmV0MDsKKwkgICAgfQorCSAgICBjICY9IGNtZG1zazsJCS8qIERvIGFueSByZXF1ZXN0 ZWQgbWFza2luZyAqLworCisjaWZuZGVmIE5PU0VUS0VZCisvKgorICBOb3RlOiBrbXB0ciBpcyBO VUxMIGlmIHdlIGdvdCBjaGFyYWN0ZXIgYyBmcm9tIHRoZSBrZXlib2FyZCwgYW5kIGl0IGlzCisg IG5vdCBOVUxMIGlmIGl0IGNhbWUgZnJvbSBhIG1hY3JvLiAgSW4gdGhlIGxhdHRlciBjYXNlLCB3 ZSBtdXN0IGF2b2lkCisgIGV4cGFuZGluZyBpdCBhZ2Fpbi4KKyovCisJICAgIGlmICgha21wdHIg JiYgbWFjcm90YWJbY10pIHsgLyogTWFjcm8gZGVmaW5pdGlvbiBmb3IgYz8gKi8KKwkJZGVidWco RjAwMCwiQ09OTkVDVCBtYWNybyBrZXkiLG1hY3JvdGFiW2NdLGMpOworCQlrbXB0ciA9IG1hY3Jv dGFiW2NdOwkvKiBZZXMsIHNldCB1cCBtYWNybyBwb2ludGVyICovCisJCWNvbnRpbnVlOwkJLyog YW5kIHJlc3RhcnQgdGhlIGxvb3AsICovCisJICAgIH0gZWxzZSBjID0ga2V5bWFwW2NdOwkvKiBl bHNlIHVzZSBzaW5nbGUtY2hhciBrZXltYXAgKi8KKyNlbmRpZiAvKiBOT1NFVEtFWSAqLworCSAg ICBpZiAoCisjaWZuZGVmIE5PU0VUS0VZCisJCSFrbXB0ciAmJgorI2VuZGlmIC8qIE5PU0VUS0VZ ICovCisJCSh0dF9lc2NhcGUgJiYgKChjICYgMHhmZikgPT0gZXNjYXBlKSkpIHsgLyogRXNjYXBl IGNoYXI/ICovCisJCWRlYnVnKEYwMDAsIkNPTk5FQ1QgZ290IGVzY2FwZSIsIiIsYyk7CisjaWZk ZWYgQkVCT1gKKwkJaWYgKHJlY3Yoa2JpbixidWYsMSwwKT49MCkKKwkJICBjID0gYnVmWzBdOwor CQllbHNlCisJCSAgYyA9IC0xOworI2Vsc2UgLyogQkVCT1ggKi8KKwkJYyA9IENPTkdLUygpICYg MHg3ZjsJLyogUmVhZCBhcmd1bWVudCAqLworI2VuZGlmIC8qIEJFQk9YICovCisJCWRvZXNjKChj aGFyKSBjKTsJLyogSGFuZGxlIGl0ICovCisJCWNvbnRpbnVlOwkJLyogQmFjayB0byBsb29wICov CisJICAgIH0KKwkgICAgY3NhdmUgPSBjOwkJCS8qIFNhdmUgaXQgYmVmb3JlIHRyYW5zbGF0aW9u ICovCisJICAgIAkJCQkvKiBmb3IgbG9jYWwgZWNob2luZy4gKi8KKyNpZmRlZiBDS0xFQVJOCisJ ICAgIGNyZmxhZyA9IChjID09IENSKTsJCS8qIFJlbWVtYmVyIGlmIGl0IHdhcyBDUi4gKi8KKyNl bmRpZiAvKiBDS0xFQVJOICovCisKKyNpZm5kZWYgTk9DU0VUUworCSAgICBpZiAoaW5lc2NbMV0g PT0gRVNfTk9STUFMKSB7IC8qIElmIG5vdCBpbnNpZGUgZXNjYXBlIHNlcS4uICovCisJCS8qIFRy YW5zbGF0ZSBjaGFyYWN0ZXIgc2V0cyAqLworI2lmZGVmIFVOSUNPREUKKwkJaW50IHg7CisJCWlm ICh1bmljb2RlID09IDEpIHsJLyogUmVtb3RlIGlzIFVURi04ICovCisJCSAgICBvdXR4Y291bnQg PSBiX3RvX3UoKENIQVIpYyxvdXR4YnVmLE9VVFhCVUZTSVosdGNzc2l6ZSk7CisJCSAgICBvdXR4 YnVmW291dHhjb3VudF0gPSBOVUw7CisJCX0gZWxzZSBpZiAodW5pY29kZSA9PSAyKSB7IC8qIExv Y2FsIGlzIFVURi04ICovCisJCSAgICAKKwkJICAgIHggPSB1X3RvX2IoKENIQVIpYyk7CisJCSAg ICBpZiAoeCA8IDApCisJCSAgICAgIGNvbnRpbnVlOworCQkgICAgb3V0eGJ1ZlswXSA9ICh1bnNp Z25lZCkoeCAmIDB4ZmYpOworCQkgICAgb3V0eGNvdW50ID0gMTsKKwkJICAgIG91dHhidWZbb3V0 eGNvdW50XSA9IE5VTDsKKwkJfSBlbHNlIHsKKyNlbmRpZiAvKiBVTklDT0RFICovCisJCSAgICBp ZiAoc3hvKSBjID0gKCpzeG8pKChjaGFyKWMpOyAvKiBMb2NhbC1pbnRlcm1lZGlhdGUgKi8KKwkJ ICAgIGlmIChyeG8pIGMgPSAoKnJ4bykoKGNoYXIpYyk7IC8qIEludGVybWVkaWF0ZS1yZW1vdGUg Ki8KKwkJICAgIG91dHhidWZbMF0gPSBjOworCQkgICAgb3V0eGNvdW50ID0gMTsKKwkJICAgIG91 dHhidWZbb3V0eGNvdW50XSA9IE5VTDsKKyNpZmRlZiBVTklDT0RFCisJCX0KKyNlbmRpZiAvKiBV TklDT0RFICovCisJICAgIH0gZWxzZSB7CisJCW91dHhidWZbMF0gPSBjOworCQlvdXR4Y291bnQg PSAxOworCQlvdXR4YnVmW291dHhjb3VudF0gPSBOVUw7CisJICAgIH0KKwkgICAgaWYgKGVzY3Nl cSkKKwkgICAgICBhcGNyYyA9IGNoa2FlcygoY2hhciljLDEpOworI2Vsc2UgIC8qIE5PQ1NFVFMg Ki8KKwkgICAgb3V0eGJ1ZlswXSA9IGM7CisJICAgIG91dHhjb3VudCA9IDE7CisJICAgIG91dHhi dWZbb3V0eGNvdW50XSA9IE5VTDsKKyNlbmRpZiAvKiBOT0NTRVRTICovCisKKwkgICAgZGVidWco RjExMSwiT1VUWEJVRiIsb3V0eGJ1ZixvdXR4Y291bnQpOworCisJICAgIGZvciAoaSA9IDA7IGkg PCBvdXR4Y291bnQ7IGkrKykgeworCQljID0gb3V0eGJ1ZltpXTsKKy8qCisgSWYgU2hpZnQtSW4v U2hpZnQtT3V0IGlzIHNlbGVjdGVkIGFuZCB3ZSBoYXZlIGEgNy1iaXQgY29ubmVjdGlvbiwKKyBo YW5kbGUgc2hpZnRpbmcgaGVyZS4KKyovCisJCWlmIChzb3NpKSB7CQkJIC8qIFNoaWZ0LUluL091 dCBzZWxlY3RlZD8gKi8KKwkJICAgIGlmIChjbWFzayA9PSAwMTc3KSB7CSAvKiBJbiA3LWJpdCBl bnZpcm9ubWVudD8gKi8KKwkJCWlmIChjICYgMDIwMCkgewkJIC8qIDgtYml0IGNoYXJhY3Rlcj8g Ki8KKwkJCSAgICBpZiAob3V0c2hpZnQgPT0gMCkgeyAvKiBJZiBub3Qgc2hpZnRlZCwgKi8KKwkJ CQl0dG9jKGRvcGFyKFNPKSk7IC8qIHNoaWZ0LiAqLworCQkJCW91dHNoaWZ0ID0gMTsKKwkJCSAg ICB9CisJCQl9IGVsc2UgeworCQkJICAgIGlmIChvdXRzaGlmdCA9PSAxKSB7IC8qIDctYml0IGNo YXJhY3RlciAqLworCQkJCXR0b2MoZG9wYXIoU0kpKTsgLyogSWYgc2hpZnRlZCwgKi8KKwkJCQlv dXRzaGlmdCA9IDA7ICAgIC8qIHVuc2hpZnQuICovCisJCQkgICAgfQorCQkJfQorCQkgICAgfQor CQkgICAgaWYgKGMgPT0gU08pIG91dHNoaWZ0ID0gMTsgLyogVXNlciB0eXBlZCBTTyAqLworCQkg ICAgaWYgKGMgPT0gU0kpIG91dHNoaWZ0ID0gMDsgLyogVXNlciB0eXBlZCBTSSAqLworCQl9CisJ CWMgJj0gY21hc2s7CQkvKiBBcHBseSBLZXJtaXQtdG8taG9zdCBtYXNrIG5vdy4gKi8KKwkJaWYg KGMgPT0gJ1wwMTUnKSB7CS8qIENhcnJpYWdlIFJldHVybiAqLworCQkgICAgaW50IHN0dWZmID0g LTE7CisJCSAgICBpZiAodG5sbSkgewkJLyogVEVSTUlOQUwgTkVXTElORSBPTiAqLworCQkJc3R1 ZmYgPSBMRjsgCS8qIFN0dWZmIExGICovCisjaWZkZWYgVE5DT0RFCisJCSAgICB9IGVsc2UgaWYg KG5ldHdvcmsgJiYgLyogVEVMTkVUIE5FV0xJTkUgT04vT0ZGL1JBVyAqLworCQkJICAgICAgIElT X1RFTE5FVCgpKSB7CisJCQlzd2l0Y2ggKCFURUxPUFRfTUUoVEVMT1BUX0JJTkFSWSkgPyB0bl9u bG0gOiB0bl9iX25sbSl7CisJCQkgIGNhc2UgVE5MX0NSTEY6CisJCQkgICAgc3R1ZmYgPSBMRjsK KwkJCSAgICBicmVhazsKKwkJCSAgY2FzZSBUTkxfQ1JOVUw6CisJCQkgICAgc3R1ZmYgPSBOVUw7 CisJCQkgICAgYnJlYWs7CisJCQl9CisjZW5kaWYgLyogVE5DT0RFICovCisJCSAgICB9CisJCSAg ICBpZiAoc3R1ZmYgPiAtMSkgeworCQkJdHRvYyhkb3BhcignXDAxNScpKTsJLyogU2VuZCBDUiAq LworCQkJaWYgKGR1cGxleCkgY29ub2MoJ1wwMTUnKTsgLyogTWF5YmUgZWNobyBDUiAqLworCQkJ YyA9IHN0dWZmOwkvKiBDaGFyIHRvIHN0dWZmICovCisJCQljc2F2ZSA9IGM7CisJCSAgICB9CisJ CX0KKyNpZmRlZiBUTkNPREUKKy8qIElmIHVzZXIgdHlwZXMgdGhlIDB4ZmYgY2hhcmFjdGVyIChU RUxORVQgSUFDKSwgaXQgbXVzdCBiZSBkb3VibGVkLiAqLworCQllbHNlCQkvKiBOb3QgQ1IgKi8K KwkJICBpZiAoKGRvcGFyKChDSEFSKSBjKSA9PSBJQUMpICYmIC8qIElBQyAoMHhmZikgKi8KKwkJ ICAgICAgbmV0d29yayAmJiBJU19URUxORVQoKSkgeyAvKiBTZW5kIG9uZSBub3cgKi8KKwkJICAg ICAgdHRvYygoY2hhcilJQUMpOyAvKiBhbmQgdGhlIG90aGVyIG9uZSBqdXN0IGJlbG93LiAqLwor CQkgIH0KKyNlbmRpZiAvKiBUTkNPREUgKi8KKwkJLyogU2VuZCB0aGUgY2hhcmFjdGVyICovCisK KwkJeCA9IHR0b2MoKGNoYXIpZG9wYXIoKENIQVIpIGMpKTsKKwkJaWYgKHggPiAtMSkgeworI2lm ZGVmIENLTEVBUk4KKwkJICAgIGlmIChsZWFybmluZykgewkvKiBMZWFybmVkIHNjcmlwdCBhY3Rp dmUgKi8KKwkJCWlmIChjcmZsYWcpIHsJLyogVXNlciB0eXBlZCBDUiAqLworCQkJICAgIGxlYXJu Y2hhcihDUik7IC8qIEhhbmRsZSBDUiAqLworCQkJICAgIGxlYXJuc3QgPSAwOyAgIC8qIFNoaWZ0 IHRvIE5ldXRyYWwgKi8KKwkJCX0gZWxzZSB7CisJCQkgICAgbGVhcm5jaGFyKGMpOyAgLyogTm90 IENSICovCisJCQkgICAgbGVhcm5zdCA9IDI7ICAgLyogQ2hhbmdlIHN0YXRlIHRvIEtleWJvYXJk ICovCisJCQl9CisJCSAgICB9CisjZW5kaWYgLyogQ0tMRUFSTiAqLworCQkgICAgaWYgKGR1cGxl eCkgewkvKiBJZiBoYWxmIGR1cGxleCwgbXVzdCBlY2hvICovCisJCQlpZiAoZGVic2VzKQorCQkJ ICBjb25vbChkYmNocihjc2F2ZSkpOyAvKiB0aGUgb3JpZ2luYWwgY2hhciAqLworCQkJZWxzZQkJ Lyogbm90IHRoZSB0cmFuc2xhdGVkIG9uZSAqLworCQkJICBjb25vYygoY2hhciljc2F2ZSk7CisJ CQlpZiAoc2VzbG9nKSB7CS8qIEFuZCBtYXliZSBsb2cgaXQgdG9vICovCisJCQkgICAgYzIgPSBj c2F2ZTsKKwkJCSAgICBpZiAoc2Vzc2Z0ID09IDAgJiYgY3NhdmUgPT0gJ1xyJykKKwkJCSAgICAg IGMyID0gJ1xuJzsKKwkJCSAgICBMT0dDSEFSKChjaGFyKWMyKTsKKwkJCX0KKwkJICAgIH0KKwkJ fSBlbHNlIHsKKwkJICAgIHBlcnJvcigiXHJcbkNhbid0IHNlbmQgY2hhcmFjdGVyIik7CisJCSAg ICBjeF9zdGF0dXMgPSBDU1hfSU9FUlJPUjsKKwkJICAgIGFjdGl2ZSA9IDA7CisJCSAgICBicmVh azsKKwkJfQorCSAgICB9CisJfQorCWlmIChGRF9JU1NFVCh0dHlmZCwgJm91dCkpIHsKKwkgICAg RkRfQ0xSKHR0eWZkLCAmb3V0KTsKKwl9CisJd2hpbGUgKGdvdG5ldCA+IDAgfHwgaWJjID4gMCkg eworCSAgICBnb3RuZXQgPSAwOworCSAgICBwcmV2ID0gYzsKKwkgICAgYyA9IGNrY2dldGMoMCk7 CQkvKiBHZXQgbmV4dCBjaGFyYWN0ZXIgKi8KKwkgICAgaWYgKGMgPCAwKSB7CQkvKiBGYWlsZWQu Li4gKi8KKwkJY2tjcHV0ZigpOwkJLyogRmx1c2ggQ09OTkVDVCBvdXRwdXQgYnVmZmVyICovCisJ CWlmIChtc2dmbGcpIHsKKwkJICAgIHByaW50ZigiXHJcbkNvbW11bmljYXRpb25zIGRpc2Nvbm5l Y3QgIik7CisjaWZkZWYgQ09NTUVOVAorCQkgICAgaWYgKGMgPT0gLTMKKyNpZmRlZiB1bHRyaXgK Ky8qIFRoaXMgaGFwcGVucyBvbiBVbHRyaXggaWYgdGhlcmUncyBubyBjYXJyaWVyICovCisJCQkm JiBlcnJubyAhPSBFSU8KKyNlbmRpZiAvKiB1bHRyaXggKi8KKyNpZmRlZiBVVEVLCisvKiBUaGlz IGhhcHBlbnMgb24gVVRFSyBpZiB0aGVyZSdzIG5vIGNhcnJpZXIgKi8KKwkJCSYmIGVycm5vICE9 IEVXT1VMREJMT0NLCisjZW5kaWYgLyogVVRFSyAqLworCQkJKQorCQkgICAgICBwZXJyb3IoIlxy XG5DYW4ndCByZWFkIGNoYXJhY3RlciIpOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKwkJfQorI2lm ZGVmIE5PU0VUQlVGCisJCWZmbHVzaChzdGRvdXQpOworI2VuZGlmIC8qIE5PU0VUQlVGICovCisJ CWRvbG9nZW5kKCk7CisJCXR0aGFuZygpOwkJLyogSGFuZyB1cCB0aGUgY29ubmVjdGlvbiAqLwor CQlkZWJ1ZyhGMTExLCJDT05ORUNUIGkvbyBlcnJvciAxIixja19lcnJzdHIoKSxlcnJubyk7CisJ CWN4X3N0YXR1cyA9IENTWF9IT1NURElTQzsKKwkJZ290byBjb25yZXQwOworCSAgICB9CisjaWZk ZWYgVE5DT0RFCisJICAgIHR4ID0gMDsKKwkgICAgaWYgKChjID09IE5VTCkgJiYgbmV0d29yayAm JiBJU19URUxORVQoKSkgeworCQlpZiAocHJldiA9PSBDUikgeyAgICAvKiBEaXNjYXJkIDxOVUw+ IG9mIDxDUj48TlVMPiBpZiBwZWVyICovCisJCSAgICBpZiAoIVRFTE9QVF9VKFRFTE9QVF9CSU5B UlkpKSB7ICAvKiBub3QgaW4gYmluYXJ5IG1vZGUgKi8KKwkJCWRlYnVnKEYxMTEsIkNPTk5FQ1Qg TlVMIixja2l0b2EocHJldiksYyk7CisJCQlja2NwdXRmKCk7CS8qIEZsdXNoIHNjcmVlbiBvdXRw dXQgYnVmZmVyICovCisJCQlicmVhazsKKwkJICAgIH0KKwkJfQorCSAgICB9CisJICAgIGRlYnVn KEYxMTEsIkNPTk5FQ1QiLCJjIixjKTsKKwkgICAgZGVidWcoRjExMSwiQ09OTkVDVCIsIm5ldHdv cmsiLG5ldHdvcmspOworCSAgICBkZWJ1ZyhGMTExLCJDT05ORUNUIiwiSVNfVEVMTkVUIixJU19U RUxORVQoKSk7CisJICAgIGlmICgoYyA9PSBJQUMpICYmIG5ldHdvcmsgJiYgSVNfVEVMTkVUKCkp IHsKKyNpZmRlZiBDS19FTkNSWVBUSU9OCisJCWludCB4X2F1dGggPSBURUxPUFRfTUUoVEVMT1BU X0FVVEhFTlRJQ0FUSU9OKTsKKyNlbHNlCisJCWludCB4X2F1dGggPSAwOworI2VuZGlmIC8qIENL X0VOQ1JZUFRJT04gKi8KKwkJaW50IG1lX2JpbiA9IFRFTE9QVF9NRShURUxPUFRfQklOQVJZKTsK KwkJaW50IHVfYmluID0gVEVMT1BUX1UoVEVMT1BUX0JJTkFSWSk7CisJCWRlYnVnKEYxMDAsIkNP Tk5FQ1QgZ290IElBQyIsIiIsMCk7CisJCWNrY3B1dGYoKTsJCS8qIER1bXAgc2NyZWVuLW91dHB1 dCBidWZmZXIgKi8KKwkJaWYgKCh0eCA9IHRuX2Rvb3AoKENIQVIpKGMgJiAweGZmKSxkdXBsZXgs Y2tjZ2V0YykpID09IDApIHsKKwkJICAgIGlmIChtZV9iaW4gIT0gVEVMT1BUX01FKFRFTE9QVF9C SU5BUlkpKSB7CisJCQltZV9iaW4gPSBURUxPUFRfTUUoVEVMT1BUX0JJTkFSWSk7CisJCSAgICB9 IGVsc2UgaWYgKHVfYmluICE9IFRFTE9QVF9VKFRFTE9QVF9CSU5BUlkpKSB7CisJCQl1X2JpbiA9 IFRFTE9QVF9VKFRFTE9QVF9CSU5BUlkpOworI2lmZGVmIENLX0VOQ1JZUFRJT04KKy8qCisgIEhl cmUgd2UgaGF2ZSB0byBwdXNoIGJhY2sgYW55IGJ5dGVzIHdlIGhhdmUgcmVhZCB1c2luZyBibG9j ayByZWFkcywgc28gd2UKKyAgY2FuIHJlYWQgdGhlbSBhZ2FpbiB1c2luZyBzaW5nbGUtY2hhcmFj dGVyIHJlYWRzLCBzbyB0aGV5IGNhbiBiZSBkZWNyeXB0ZWQKKyAgaW4gY2FzZSB0aGVyZSB3YXMg YSBzd2l0Y2ggdG8gZW5jcnlwdGlvbiBpbiB0aGUgYmxvY2suICBOb3RlIHRoYXQgd2UgY2FuJ3QK KyAgaGFuZGxlIHN3aXRjaGVzIGluIHRoZSBlbmNyeXB0aW9uIHN0YXRlIGl0c2VsZiB0aGlzIHdh eSAtLSB3aGljaCB3b3VsZCBiZQorICBuaWNlLCBzaW5jZSBpdCB3b3VsZCBlbGltaW5hdGUgdGhl IG5lZWQgZm9yIHNpbmdsZS1jaGFyYWN0ZXIgcmVhZHMuICBXaHk/CisgIEJlY2F1c2UgaWYgYSBz ZXJpZXMgb2YgY2hhcmFjdGVycyBoYXMgYWxyZWFkeSBiZWVuIGRlY3J5cHRlZCB0aGF0IHNob3Vs ZG4ndAorICBoYXZlIGJlZW4sIHRoZW4gKGEpIGl0J3MgcnVpbmVkLCBhbmQgKGIpIHNvIGlzIHRo ZSBzdGF0ZSBvZiB0aGUgZGVjcnlwdGlvbgorICBtYWNoaW5lLiAgVG9vIGJhZC4KKyovCisJCSAg ICB9IGVsc2UgaWYgKFRFTE9QVF9NRShURUxPUFRfQVVUSEVOVElDQVRJT04pICE9IDAgJiYKKwkJ CSAgICAgICBURUxPUFRfTUUoVEVMT1BUX0FVVEhFTlRJQ0FUSU9OKSAhPSB4X2F1dGgKKwkJCSAg ICAgICApIHsKKwkJCWlmICh0dHB1c2hiYWNrKChDSEFSICopaWJwLGliYykgPiAtMSkgeworCQkJ ICAgIGliYyA9IDA7CisJCQkgICAgaWJwID0gaWJ1ZjsKKwkJCX0KKyNlbmRpZiAvKiBDS19FTkNS WVBUSU9OICovCisJCSAgICB9CisJCSAgICBjb250aW51ZTsKKwkJfSBlbHNlIGlmICh0eCA9PSAt MSkgewkvKiBJL08gZXJyb3IgKi8KKwkJICAgIGlmIChtc2dmbGcpCisJCSAgICAgIHByaW50Zigi XHJcbkNvbW11bmljYXRpb25zIGRpc2Nvbm5lY3QgIik7CisjaWZkZWYgTk9TRVRCVUYKKwkJICAg IGZmbHVzaChzdGRvdXQpOworI2VuZGlmIC8qIE5PU0VUQlVGICovCisJCSAgICBkb2xvZ2VuZCgp OworCQkgICAgZGVidWcoRjExMSwiQ09OTkVDVCBpL28gZXJyb3IgMiIsY2tfZXJyc3RyKCksZXJy bm8pOworCQkgICAgY3hfc3RhdHVzID0gQ1NYX0lPRVJST1I7CisJCSAgICBnb3RvIGNvbnJldDA7 CisJCX0gZWxzZSBpZiAodHggPT0gLTIpIHsJLyogSS9PIGVycm9yICovCisJCSAgICBpZiAobXNn ZmxnKQorCQkgICAgICBwcmludGYoIlxyXG5Db25uZWN0aW9uIGNsb3NlZCBieSBwZWVyIik7Cisj aWZkZWYgTk9TRVRCVUYKKwkJICAgIGZmbHVzaChzdGRvdXQpOworI2VuZGlmIC8qIE5PU0VUQlVG ICovCisJCSAgICBkb2xvZ2VuZCgpOworCQkgICAgZGVidWcoRjExMSwiQ09OTkVDVCBpL28gZXJy b3IgMyIsY2tfZXJyc3RyKCksZXJybm8pOworCQkgICAgY3hfc3RhdHVzID0gQ1NYX0lPRVJST1I7 CisJCSAgICBnb3RvIGNvbnJldDA7CisJCX0gZWxzZSBpZiAodHggPT0gLTMpIHsJLyogSS9PIGVy cm9yICovCisJCSAgICBpZiAobXNnZmxnKQorCQkgICAgICBwcmludGYoIlxyXG5Db25uZWN0aW9u IGNsb3NlZCBkdWUgdG8gdGVsbmV0IHBvbGljeSIpOworI2lmZGVmIE5PU0VUQlVGCisJCSAgICBm Zmx1c2goc3Rkb3V0KTsKKyNlbmRpZiAvKiBOT1NFVEJVRiAqLworCQkgICAgZG9sb2dlbmQoKTsK KwkJICAgIGRlYnVnKEYxMTEsIkNPTk5FQ1QgaS9vIGVycm9yIDQiLGNrX2VycnN0cigpLGVycm5v KTsKKwkJICAgIGN4X3N0YXR1cyA9IENTWF9JT0VSUk9SOworCQkgICAgZ290byBjb25yZXQwOwor CQl9IGVsc2UgaWYgKCh0eCA9PSAxKSAmJiAoIWR1cGxleCkpIHsgLyogRUNITyBjaGFuZ2UgKi8K KwkJICAgIGR1cGxleCA9IDE7CQkvKiBUdXJuIG9uIGxvY2FsIGVjaG8gKi8KKwkJICAgIGNvbnRp bnVlOworCQl9IGVsc2UgaWYgKCh0eCA9PSAyKSAmJiAoZHVwbGV4KSkgeyAvKiBFQ0hPIGNoYW5n ZSAqLworCQkgICAgZHVwbGV4ID0gMDsKKwkJICAgIGNvbnRpbnVlOworCQl9IGVsc2UgaWYgKHR4 ID09IDMpIHsJLyogUXVvdGVkIElBQyAqLworCQkgICAgYyA9IHBhcml0eSA/IDEyNyA6IDI1NTsK KwkJfQorI2lmZGVmIElLU19PUFRJT04KKyAgICAgICAgICAgICAgICBlbHNlIGlmICh0eCA9PSA0 KSB7ICAgLyogSUtTIFN0YXRlIENoYW5nZSAqLworICAgICAgICAgICAgICAgICAgICBpZiAoVEVM T1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1pdC51X3N0YXJ0ICYmCisJCQkhdGNwX2luY29taW5n CisJCQkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGhlcmUgd2UgbmVlZCB0byBwcmlu dCBhIG1zZyB0aGF0IHRoZSBvdGhlciAqLworICAgICAgICAgICAgICAgICAgICAgICAgLyogc2lk ZSBpcyBpbiBTRVJWRVIgbW9kZSBhbmQgdGhhdCBSRU1PVEUgICAgICovCisgICAgICAgICAgICAg ICAgICAgICAgICAvKiBjb21tYW5kcyBzaG91bGQgYmUgdXNlZC4gIEFuZCBDT05ORUNUIG1vZGUg Ki8KKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNob3VsZCBiZSBlbmRlZC4gICAgICAgICAg ICAgICAgICAgICAgICAgICAqLworCQkJY3hfc3RhdHVzID0gQ1NYX0lLU0Q7CisJCQlhY3RpdmUg PSAwOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorI2VuZGlmIC8q IElLU19PUFRJT04gKi8KKyAgICAgICAgICAgICAgICBlbHNlIGlmICh0eCA9PSA2KSB7CisgICAg ICAgICAgICAgICAgICAgIC8qIERPIExPR09VVCB3YXMgcmVjZWl2ZWQgKi8KKwkJICAgIGlmICht c2dmbGcpCisJCSAgICAgIHByaW50ZigiXHJcblJlbW90ZSBMb2dvdXQgIik7CisjaWZkZWYgTk9T RVRCVUYKKwkJICAgIGZmbHVzaChzdGRvdXQpOworI2VuZGlmIC8qIE5PU0VUQlVGICovCisJCSAg ICBkZWJ1ZyhGMTAwLCJDT05ORUNUIFJlbW90ZSBMb2dvdXQiLCIiLDApOworCQkgICAgY3hfc3Rh dHVzID0gQ1NYX1RSSUdHRVI7CisJCSAgICBnb3RvIGNvbnJldDA7CisgICAgICAgICAgICAgICAg fSBlbHNlCisJCSAgY29udGludWU7CQkvKiBOZWdvdGlhdGlvbiBPSywgZ2V0IG5leHQgY2hhci4g Ki8KKwkgICAgfSBlbHNlIGlmIChwYXJpdHkpCisJICAgICAgYyAmPSAweDdmOworCisJICAgIC8q IEknbSBlY2hvaW5nIGZvciB0aGUgcmVtb3RlICovCisgICAgICAgICAgICBpZiAoVEVMT1BUX01F KFRFTE9QVF9FQ0hPKSAmJiB0bl9yZW1fZWNobykKKwkgICAgICB0dG9jKChjaGFyKWMpOworI2Vu ZGlmIC8qIFROQ09ERSAqLworCisjaWZkZWYgQ0tMRUFSTgorCSAvKiBMZWFybmVkIHNjcmlwdDog UmVjb3JkIGluY29taW5nIGNoYXJzIGlmIG5vdCBpbiBLZXlib2FyZCBzdGF0ZSAqLworCisJICAg IGlmIChsZWFybmluZyAmJiBsZWFybnN0ICE9IDIpIHsgLyogTGVhcm5lZCBzY3JpcHQgYWN0aXZl ICovCisJCWxlYXJuYnVmW2xlYXJuYnArK10gPSBjOyAgICAvKiBTYXZlIGZvciBJTlBVVCBjb21t YW5kICovCisJCWlmIChsZWFybmJwID49IExFQVJOQlVGU0laKSAvKiBpbiBjaXJjdWxhciBidWZm ZXIgKi8KKwkJICBsZWFybmJwID0gMDsgICAgICAgICAgICAgIC8qIHdyYXBwaW5nIGlmIGF0IGVu ZC4gKi8KKwkJbGVhcm5iYysrOyAgICAgICAgICAgICAgICAgIC8qIENvdW50IHRoaXMgYnl0ZS4g Ki8KKwkJbGVhcm5zdCA9IDE7ICAgICAgICAgICAgICAgIC8qIFN0YXRlIGlzIE5ldC4gKi8KKwkg ICAgfQorI2VuZGlmIC8qIENLTEVBUk4gKi8KKworCSAgICBpZiAoZGVic2VzKSB7CQkvKiBPdXRw dXQgY2hhcmFjdGVyIHRvIHNjcmVlbiAqLworCQljaGFyICpzOwkJLyogRGVidWdnaW5nIGRpc3Bs YXkuLi4gKi8KKwkJcyA9IGRiY2hyKGMpOwkJLyogTWFrZSBjaGFyIGludG8gc3RyaW5nICovCisJ CXdoaWxlICgqcykgewkJLyogT3V0cHV0IGVhY2ggY2hhciBmcm9tIHN0cmluZyAqLworCQkgICAg Y2tjcHV0Yygqcyk7CisJCSAgICBpZiAoc2VzbG9nKQkJLyogQW5kIG1heWJlIGxvZyBpdC4gKi8K KwkJICAgICAgTE9HQ0hBUigoY2hhcikqcyk7CisJCSAgICBzKys7CisJCX0KKwkgICAgfSBlbHNl IHsJCQkvKiBSZWd1bGFyIGRpc3BsYXkgLi4uICovCisJCWMgJj0gY21hc2s7CQkvKiBBcHBseSBL ZXJtaXQtdG8tcmVtb3RlIG1hc2sgKi8KKwkJaWYgKHNlc2xvZyAmJiBzZXNzZnQpCS8qIElmIGJp bmFyeSBzZXNzaW9uIGxvZyAqLworCQkgIExPR0NIQVIoKGNoYXIpYyk7CS8qIGxvZyB0aGUgY2hh cmFjdGVyIG5vdy4gKi8KKyNpZm5kZWYgTk9YRkVSCisjaWZkZWYgQ0tfQVVUT0RMCisvKgorICBB dXRvZG93bmxvYWQuICBDaGVjayBmb3IgS2VybWl0IFMgcGFja2V0IHByaW9yIHRvIHRyYW5zbGF0 aW9uLCBzaW5jZSB0aGF0CisgIGNhbiBjaGFuZ2UgdGhlIHBhY2tldCBhbmQgbWFrZSBpdCB1bnJl Y29nbml6YWJsZSAoYXMgd2hlbiB0aGUgdGVybWluYWwKKyAgY2hhcmFjdGVyIHNldCBpcyBhbiBJ U08gNjQ2IG9uZSkuLi4gIERpdHRvIGZvciBabW9kZW0gc3RhcnQgcGFja2V0LgorKi8KKwkJaWYg KGF1dG9kbAkJLyogQXV0b2Rvd25sb2FkIGVuYWJsZWQ/ICovCisjaWZkZWYgSUtTX09QVElPTgor CQkgICAgfHwgVEVMT1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1pdC5tZV9zdGFydAorI2VuZGlm IC8qIElLU19PUFRJT04gKi8KKwkJICAgICkgeworCQkgICAgaW50IGsgPSAwOworCisJCSAgICBp ZiAoa3N0YXJ0YWN0aXZlIHx8IGMgPT0gc3RjaHIgLyogS2VybWl0IFMgb3IgSSBwYWNrZXQ/ICov CisjaWZkZWYgQ09NTUVOVAorCQkJfHwgYWRsX2ttb2RlID09IEFETFNUUiAvKiBOb3QgdXNlZCBp biBDLUtlcm1pdCAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKwkJCSkKKwkJICAgICAgayA9IGtz dGFydCgoQ0hBUiljKTsKKyNpZmRlZiBDS19YWVoKKwkJICAgIGlmICghayAmJiB6bWRsb2spCS8q IE9yIGFuICJzeiIgc3RhcnQ/ICovCisJCSAgICAgIGsgPSB6c3RhcnQoKENIQVIpYyk7CisjZW5k aWYgLyogQ0tfWFlaICovCisJCSAgICBpZiAoaykgeworCQkJaW50IGtzaWduID0gMDsKKwkJCWRl YnVnKEYxMDEsIkNPTk5FQ1QgYXV0b2Rvd25sb2FkIGsiLCIiLGspOworCQkJaWYgKGsgPCAwKSB7 IC8qIE1pbnVzLVByb3RvY29sPyAqLworI2lmZGVmIE5PU0VSVkVSCisJCQkgICAgZ290byBub3Nl cnZlcjsgLyogTmVlZCBzZXJ2ZXIgbW9kZSBmb3IgdGhpcyAqLworI2Vsc2UKKwkJCSAgICBrc2ln biA9IDE7IC8qIFJlbWVtYmVyICovCisJCQkgICAgayA9IDAgLSBrOyAvKiBDb252ZXJ0IHRvIGFj dHVhbCBwcm90b2NvbCAqLworCQkJICAgIGp1c3RvbmUgPSAxOyAvKiBGbGFnIGZvciBwcm90b2Nv bCBtb2R1bGUgKi8KKyNlbmRpZiAvKiBOT1NFUlZFUiAqLworCQkJfSBlbHNlCisJCQkgIGp1c3Rv bmUgPSAwOworCQkJay0tOwkJLyogQWRqdXN0IFtrel1zdGFydCdzIHJldHVybiB2YWx1ZSAqLwor CQkJaWYgKGsgPT0gUFJPVE9fSworI2lmZGVmIENLX1hZWgorCQkJICAgIHx8IGsgPT0gUFJPVE9f WgorI2VuZGlmIC8qIENLX1hZWiAqLworCQkJICAgICkgeworICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIERhbWFnZSB0aGUgcGFja2V0IHNvIHRoYXQgaXQgZG9lc24ndCB0cmlnZ2VyICov CisJCQkgICAgLyogYXV0b2Rvd25sb2FkIGRldGVjdGlvbiBkb3duc3RyZWFtLiAqLworICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGlmIChrID09IFBST1RPX0spIHsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW50IGksIGxlbiA9IHN0cmxlbigoY2hhciAqKWtzYnVmKTsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQor CQkJCSAgY2tjcHV0YyhCUyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorI2lmZGVm IENLX1hZWgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgaTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZm9yIChpID0gMDsgaSA8IDM7IGkrKykKKwkJCQkgIGNrY3B1dGMoQ0FOKTsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICB9CisjZW5kaWYgLyogQ0tfWFlaICovCisKKyNpZm5kZWYgTk9J Q1AKKwkJCSAgICAvKiBzcHJpbnRmIGlzIHNhZmUgaGVyZSAoYnVpbHRpbiBrZXl3b3JkcykgKi8K KwkJCSAgICBzcHJpbnRmKGFwY2J1ZiwKKwkJCQkgICAgInNldCBwcm90byAlcywgJXMsIHNldCBw cm90byAlcyIsCisJCQkJICAgIHB0YWJba10ucF9uYW1lLAorCQkJCSAgICBrc2lnbiA/ICJzZXJ2 ZXIiIDogInJlY2VpdmUiLAorCQkJCSAgICBwdGFiW3Byb3RvY29sXS5wX25hbWUKKwkJCQkgICAg KTsKKwkJCSAgICBhcGNsZW5ndGggPSBzdHJsZW4oYXBjYnVmKTsKKwkJCSAgICBkZWJ1ZyhGMTEx LCJDT05ORUNUIGtzYnVmIixrc2J1ZixrKTsKKwkJCSAgICBkZWJ1ZyhGMTEwLCJDT05ORUNUIGF1 dG9kb3dubG9hZCIsYXBjYnVmLDApOworCQkJICAgIGFwY2FjdGl2ZSA9IEFQQ19MT0NBTDsKKwkJ CSAgICBja2NwdXRmKCk7CS8qIEZvcmNlIHNjcmVlbiB1cGRhdGUgKi8KKwkJCSAgICBjeF9zdGF0 dXMgPSBDU1hfQVBDOworCQkJICAgIGdvdG8gY29ucmV0MTsKKyNlbHNlCisvKgorICBIZXJlJ3Mg YW5vdGhlciB3YXkgdGhhdCBkb2Vzbid0IHJlcXVpcmUgQVBDLCBidXQgdGhlbiB3ZSdsbCBoYXZl IHRvIGNoYW5nZQorICBhbGwgdGhlIG90aGVyIENPTk5FQ1QgbW9kdWxlcywgYW5kIHRoZW4gdGhl IG1haW5saW5lIGNvZGUgdGhhdCBjYWxscyB0aGVtLgorKi8KKwkJCSAgICB7CisJCQkJZXh0ZXJu IGNoYXIgc3N0YXRlOworCQkJCXNzdGF0ZSA9IGtzaWduID8gJ3gnIDogJ3YnOworCQkJCXByb3Rv KCk7CisJCQkgICAgfQorI2VuZGlmIC8qIE5PSUNQICovCisJCQl9CisJCSAgICB9CisJCX0KKyNp ZmRlZiBOT1NFUlZFUgorCSAgICAgIG5vc2VydmVyOgorI2VuZGlmIC8qIE5PU0VSVkVSICovCisK KyNlbmRpZiAvKiBDS19BVVRPREwgKi8KKyNlbmRpZiAvKiBOT1hGRVIgKi8KKwkJaWYgKHNvc2kp IHsJCS8qIEhhbmRsZSBTSS9TTyAqLworCQkgICAgaWYgKGMgPT0gU08pIHsJLyogU2hpZnQgT3V0 ICovCisJCQlpbnNoaWZ0ID0gMTsKKwkJCWNvbnRpbnVlOworCQkgICAgfSBlbHNlIGlmIChjID09 IFNJKSB7IC8qIFNoaWZ0IEluICovCisJCQlpbnNoaWZ0ID0gMDsKKwkJCWNvbnRpbnVlOworCQkg ICAgfQorCQkgICAgaWYgKGluc2hpZnQpIGMgfD0gMDIwMDsKKwkJfQorCQlpbnhidWZbMF0gPSBj OwkJLyogSW4gY2FzZSB0aGVyZSBpcyBubyB0cmFuc2xhdGlvbiAqLworCQlpbnhjb3VudCA9IDE7 CQkvKiAuLi4gKi8KKyNpZm5kZWYgTk9DU0VUUworCQlpZiAoaW5lc2NbMF0gPT0gRVNfTk9STUFM IC8qIElmIG5vdCBpbiBhbiBlc2NhcGUgc2VxdWVuY2UgKi8KKwkJICAgICYmICFwcmludGluZwkv KiBhbmQgbm90IGluIHRyYW5zcGFyZW50IHByaW50ICovCisJCSAgICApIHsJCQkvKiBUcmFuc2xh dGUgY2hhcmFjdGVyIHNldHMgKi8KKyNpZmRlZiBVTklDT0RFCisJCSAgICBpbnQgeDsKKwkJICAg IGlmICh1bmljb2RlID09IDEpIHsJLyogUmVtb3RlIGlzIFVURi04ICovCisJCQl4ID0gdV90b19i KChDSEFSKWMpOworCQkJaWYgKHggPT0gLTEpCisJCQkgIGNvbnRpbnVlOworCQkJZWxzZSBpZiAo eCA9PSAtMikgeyAvKiBMUyBvciBQUyAqLworCQkJICAgIGlueGJ1ZlswXSA9IENSOworCQkJICAg IGlueGJ1ZlsxXSA9IExGOworCQkJICAgIGlueGNvdW50ID0gMjsKKwkJCX0gZWxzZSBpZiAoeCA9 PSAtOSkgeyAvKiBVVEYtOCBlcnJvciAqLworCQkJICAgIGlueGJ1ZlswXSA9ICc/JzsKKwkJCSAg ICBpbnhidWZbMV0gPSB1X3RvX2IyKCk7CisJCQkgICAgaW54Y291bnQgPSAyOworCQkJfSBlbHNl IHsKKwkJCSAgICBpbnhidWZbMF0gPSAodW5zaWduZWQpKHggJiAweGZmKTsKKwkJCX0KKwkJCWMg PSBpbnhidWZbMF07CisJCSAgICB9IGVsc2UgaWYgKHVuaWNvZGUgPT0gMikgeyAvKiBMb2NhbCBp cyBVVEYtOCAqLworCQkJaW54Y291bnQgPSBiX3RvX3UoKENIQVIpYyxpbnhidWYsT1VUWEJVRlNJ Wix0Y3NzaXplKTsKKwkJCWMgPSBpbnhidWZbMF07CisJCSAgICB9IGVsc2UgeworI2VuZGlmIC8q IFVOSUNPREUgKi8KKwkJCWlmIChzeGkpIGMgPSAoKnN4aSkoKENIQVIpYyk7CisJCQlpZiAocnhp KSBjID0gKCpyeGkpKChDSEFSKWMpOworCQkJaW54YnVmWzBdID0gYzsKKyNpZmRlZiBVTklDT0RF CisJCSAgICB9CisjZW5kaWYgLyogVU5JQ09ERSAqLworCQl9CisjZW5kaWYgLyogTk9DU0VUUyAq LworCisjaWZuZGVmIE5PRVNDU0VRCisJCWlmIChlc2NzZXEpIHsJCS8qIElmIGhhbmRsaW5nIGVz Y2FwZSBzZXF1ZW5jZXMgKi8KKwkJICAgIG9sZHBydCA9IHByaW50aW5nOwkgICAgIC8qIHJlbWVt YmVyIHByaW50ZXIgc3RhdGUgKi8KKwkJICAgIGFwY3JjID0gY2hrYWVzKChjaGFyKWMsMCk7IC8q IGFuZCB1cGRhdGUgZXNjc2VxIHN0YXRlLiAqLworCQkgICAgaWYgKHByaW50aW5nICYmICFvbGRw cnQpIC8qIElmIHByaW50ZXIgd2FzIHR1cm5lZCBvbiAqLworCQkgICAgICBjb250aW51ZTsJCS8q IGRvbid0IHByaW50IGZpbmFsIGNoYXIgb2YgZXNjc2VxICovCisJCX0KKyNpZmRlZiBDS19BUEMK Ky8qCisgIElmIHdlIGFyZSBoYW5kbGluZyBBUENzLCB3ZSBoYXZlIHNldmVyYWwgcG9zc2liaWxp dGllcyBhdCB0aGlzIHBvaW50OgorICAgMS4gT3JkaW5hcnkgY2hhcmFjdGVyIHRvIGJlIHdyaXR0 ZW4gdG8gdGhlIHNjcmVlbi4KKyAgIDIuIEFuIEVzYzsgd2UgY2FuJ3Qgd3JpdGUgaXQgYmVjYXVz ZSBpdCBtaWdodCBiZSB0aGUgYmVnaW5uaW5nIG9mIGFuIEFQQy4KKyAgIDMuIFRoZSBjaGFyYWN0 ZXIgZm9sbG93aW5nIGFuIEVzYywgaW4gd2hpY2ggY2FzZSB3ZSB3cml0ZSBFc2MsIHRoZW4gY2hh ciwKKyAgICAgIGJ1dCBvbmx5IGlmIHdlIGhhdmUgbm90IGp1c3QgZW50ZXJlZCBhbiBBUEMgc2Vx dWVuY2UuCisqLworCQlpZiAoZXNjc2VxICYmIChhcGNzdGF0dXMgJiBBUENfT04pKSB7CisJCSAg ICBpZiAoaW5lc2NbMF0gPT0gRVNfR09URVNDKSAvKiBEb24ndCB3cml0ZSBFU0MgeWV0ICovCisJ CSAgICAgIGNvbnRpbnVlOworCQkgICAgZWxzZSBpZiAob2xkZXNjWzBdID09IEVTX0dPVEVTQyAm JiAhYXBjYWN0aXZlKSB7CisJCQlja2NwdXRjKEVTQyk7CS8qIFdyaXRlIHNhdmVkIEVTQyAqLwor CQkJaWYgKHNlc2xvZyAmJiAhc2Vzc2Z0KSBMT0dDSEFSKChjaGFyKUVTQyk7CisJCSAgICB9IGVs c2UgaWYgKGFwY3JjKSB7CS8qIFdlIGhhdmUgYW4gQVBDICovCisJCQlkZWJ1ZyhGMTExLCJDT05O RUNUIEFQQyBjb21wbGV0ZSIsYXBjYnVmLGFwY2xlbmd0aCk7CisJCQlja2NwdXRmKCk7CS8qIEZv cmNlIHNjcmVlbiB1cGRhdGUgKi8KKwkJCWN4X3N0YXR1cyA9IENTWF9BUEM7CisJCQlnb3RvIGNv bnJldDE7CisJCSAgICB9CisJCX0KKyNlbmRpZiAvKiBDS19BUEMgKi8KKyNlbmRpZiAvKiBOT0VT Q1NFUSAqLworCisJCWRlYnVnKEYxMTEsIklOWEJVRiIsaW54YnVmLGlueGNvdW50KTsKKwkJZm9y IChpID0gMDsgaSA8IGlueGNvdW50OyBpKyspIHsgLyogTG9vcCB0aHJ1ICovCisJCSAgICBjID0g aW54YnVmW2ldOwkvKiBpbnB1dCBleHBhbnNpb24gYnVmZmVyLi4uICovCisJCSAgICBpZiAoCisj aWZkZWYgQ0tfQVBDCisJCQkhYXBjYWN0aXZlICYmCS8qIERvbid0IGRpc3BsYXkgQVBDIHNlcXVl bmNlcyAqLworI2VuZGlmIC8qIENLX0FQQyAqLworCQkJIXByaW50aW5nCS8qIG9yIHRyYW5zcGFy ZW50IHByaW50IG1hdGVyaWFsICovCisKKwkJCSkgeworCQkJYyAmPSBjbWRtc2s7CS8qIEFwcGx5 IGNvbW1hbmQgbWFzay4gKi8KKworCQkJLyogSGFuZGxlIGJhcmUgY2FycmlhZ2UgcmV0dXJucyBh bmQgbGluZWZlZWRzICovCisKKwkJCWlmIChjID09IENSICYmIHR0X2NyZCkgeyAvKiBTRVQgVEVS TSBDUi1ESVNQTEEgQ1JMRj8gKi8KKwkJCSAgICBja2NwdXRjKGMpOwkvKiBZZXMsIG91dHB1dCBD UiAqLworCQkJICAgIGlmIChzZXNsb2cgJiYgIXNlc3NmdCkgTE9HQ0hBUigoY2hhciljKTsKKwkJ CSAgICBjID0gTEY7CS8qIGFuZCBpbnNlcnQgYSBsaW5lZmVlZCAqLworCQkJfQorCQkJaWYgKGMg PT0gTEYgJiYgdHRfbGZkKSB7IC8qIFNFVCBURVJNIENSLURJU1BMQSBDUkxGPyAqLworCQkJICAg IGNrY3B1dGMoQ1IpOyAvKiBZZXMsIG91dHB1dCBDUiAqLworCQkJICAgIGlmIChzZXNsb2cgJiYg IXNlc3NmdCkgTE9HQ0hBUigoY2hhcilDUik7CisJCQl9CisjaWZuZGVmIE5PRVNDU0VRCisJCQlp ZiAoZG9udHByaW50KQl7IC8qIERvIHRyYW5zcGFyZW50IHByaW50aW5nLiAqLworCQkJICAgIGRv bnRwcmludCA9IDA7CisJCQkgICAgY29udGludWU7CisJCQl9IGVsc2UKKyNlbmRpZgkvKiBOT0VT Q1NFUSAqLworCQkJY2tjcHV0YyhjKTsJLyogV3JpdGUgY2hhcmFjdGVyIHRvIHNjcmVlbiAqLwor CQkgICAgfQorCQkgICAgaWYgKHNlc2xvZyAmJiAhc2Vzc2Z0KSB7IC8qIEhhbmRsZSBzZXNzaW9u IGxvZy4gKi8KKwkJCUxPR0NIQVIoKGNoYXIpYyk7CisJCSAgICB9CisjaWZkZWYgWFBSSU5UCisJ CSAgICBpZiAocHJpbnRpbmcgJiYgIWluZXNjWzBdKSB7CisJCQkvKiB6Y2hvdXQoKSBjYW4ndCBi ZSB1c2VkIGJlY2F1c2UgKi8KKwkJCS8qIGl0J3MgYnVmZmVyZWQgZGlmZmVyZW50bHkuICovCisJ CQljYnVmWzBdID0gYzsKKwkJCXpzb3V0eChaTUZJTEUsKGNoYXIgKiljYnVmLDEpOworCQkgICAg fQorI2VuZGlmIC8qIFhQUklOVCAqLworCisjaWZkZWYgQ0tfVFJJR0dFUgorCQkgICAgLyogQ2hl Y2sgZm9yIHRyaWdnZXIgc3RyaW5nICovCisJCSAgICBpZiAodHRfdHJpZ2dlclswXSkgeworCQkJ aW50IGk7CisJCQlpZiAoKGkgPSBhdXRvZXhpdGNoaygoQ0hBUiljKSkgPiAtMSkgeworCQkJICAg IG1ha2VzdHIoJnRyaWdnZXJ2YWwsdHRfdHJpZ2dlcltpXSk7CisJCQkgICAgY2tjcHV0ZigpOwkv KiBGb3JjZSBzY3JlZW4gdXBkYXRlICovCisjaWZkZWYgTk9TRVRCVUYKKwkJCSAgICBmZmx1c2go c3Rkb3V0KTsgLyogSSBtZWFuIHJlYWxseSBmb3JjZSBpdCAqLworI2VuZGlmIC8qIE5PU0VUQlVG ICovCisJCQkgICAgY3hfc3RhdHVzID0gQ1NYX1RSSUdHRVI7CisJCQkgICAgZ290byBjb25yZXQx OworCQkJfQorCQkgICAgfQorI2VuZGlmIC8qIENLX1RSSUdHRVIgKi8KKwkJfQorCSAgICB9CisJ fQorI2lmbmRlZiBCRUJPWAorCWlmIChGRF9JU1NFVChzY3Jub3V0LCAmb3V0KSkgeworCSAgICBG RF9DTFIoc2Nybm91dCwgJm91dCk7CisJfQorI2VuZGlmIC8qIEJFQk9YICovCisgICAgfSAvKiBF bmQgb2YgYmlnIGxvb3AgKi8KKyAgY29ucmV0MToJCQkJLyogQ29tZSBoZXJlIHRvIHN1Y2NlZWQg Ki8KKyAgICByYyA9IDE7CisgIGNvbnJldDA6CQkJCS8qIENvbW1vbiBleGl0IHBvaW50ICovCisj aWZkZWYgQkVCT1gKKyAgICB7CisJbG9uZyByZXRfdmFsOworCWNsb3Nlc29ja2V0KHBhaXJbMF0p OworCWNsb3Nlc29ja2V0KHBhaXJbMV0pOworCXggPSBraWxsKHRpZCxTSUdLSUxMVEhSKTsJLyog S2lsbCB0aHJlYWQgKi8KKwl3YWl0X2Zvcl90aHJlYWQgKHRpZCwgJnJldF92YWwpOworICAgIH0K KyNlbmRpZiAvKiBCRUJPWCAqLworCisjaWZkZWYgQ0tMRUFSTgorICAgIGlmIChsZWFybmluZyAm JiBsZWFybmZwKQorICAgICAgZnB1dHMoIlxuIixsZWFybmZwKTsKKyNlbmRpZiAvKiBDS0xFQVJO ICovCisKKyAgICBjb25yZXMoKTsKKyAgICBpZiAoZG9oYW5ndXAgPiAwKSB7CisjaWZkZWYgTkVU Q09OTgorCWlmIChuZXR3b3JrCisjaWZkZWYgVE5DT0RFCisJICAgICYmICFURUxPUFRfTUUoVEVM T1BUX0NPTVBPUlQpCisjZW5kaWYgLyogVE5DT0RFICovCisJICAgICkKKwkgIHR0Y2xvcygwKTsK KyNlbmRpZiAvKiBORVRDT05OICovCisKKyNpZm5kZWYgQ09NTUVOVAorLyoKKyAgVGhpcyBpcyBi YWQgYmVjYXVzZSBpZiB0aGV5IHNhaWQgU0VUIE1PREVNIEhBTkdVUC1NRVRIT0QgTU9ERU0tQ09N TUFORCwKKyAgdGhleSBtZWFuIGl0IC0tIHdlIHNob3VsZG4ndCBmYWxsIGJhY2sgb24gdHRoYW5n KCkgaWYgbWRtaHVwKCkgZmFpbHMsCisgIGJlY2F1c2UgbWF5YmUgdGhleSBoYXZlIHNvbWUgc3Bl Y2lhbCBraW5kIG9mIGNvbm5lY3Rpb24uICBPbiB0aGUgb3RoZXIKKyAgaGFuZCwgbWFraW5nIHRo aXMgY2hhbmdlIHByZXZlbnRzIGRpYWxpbmcgZnJvbSB3b3JraW5nIGF0IGFsbCBpbiBzb21lCisg IGNhc2VzLiAgRnVydGhlciBzdHVkeSBuZWVkZWQuCisqLworI2lmbmRlZiBOT0RJQUwKKwlpZiAo ZG9oYW5ndXAgPiAxKQkJLyogVXNlciBhc2tlZCBmb3IgaXQgKi8KKwkgIGlmIChtZG1odXAoKSA8 IDEpCQkvKiBNYXliZSBoYW5nIHVwIHZpYSBtb2RlbSAqLworI2VuZGlmIC8qIE5PRElBTCAqLwor CSAgICB0dGhhbmcoKTsJCQkvKiBBbmQgbWFrZSBzdXJlIHdlIGRvbid0IGhhbmcgdXAgKi8KKyNl bHNlCisJaWYgKCFuZXR3b3JrKSB7CQkJLyogU2VyaWFsIGNvbm5lY3Rpb24uICovCisjaWZuZGVm IE5PRElBTAorCSAgICBpZiAoZGlhbG1odSkJCS8qIEhhbmcgdXAgdGhlIHdheSB0aGV5IHNhaWQg dG8uICovCisJICAgICAgbWRtaHVwKCk7CisJICAgIGVsc2UKKyNlbmRpZiAvKiBOT0RJQUwgKi8K KwkgICAgICB0dGhhbmcoKTsKKwl9CisjZW5kaWYgLyogQ09NTUVOVCAqLworCWRvbG9nZW5kKCk7 CisJZG9oYW5ndXAgPSAwOwkJCS8qIGFnYWluIHVubGVzcyByZXF1ZXN0ZWQgYWdhaW4uICovCisg ICAgfQorICAgIGlmIChxdWl0bm93KQkJCS8qIEV4aXQgbm93IGlmIHJlcXVlc3RlZC4gKi8KKyAg ICAgIGRvZXhpdChHT09EX0VYSVQseGl0c3RhKTsKKyAgICBpZiAobXNnZmxnCisjaWZkZWYgQ0tf QVBDCisJJiYgIWFwY2FjdGl2ZQorI2VuZGlmIC8qIENLX0FQQyAqLworCSkKKyAgICAgIHByaW50 ZigiKEJhY2sgYXQgJXMpIiwgKm15aG9zdCA/IG15aG9zdCA6ICJsb2NhbCBVTklYIHN5c3RlbSIp OworI2lmZGVmIENLX0FQQworICAgIGlmICghYXBjYWN0aXZlKQorI2VuZGlmIC8qIENLX0FQQyAq LworICAgICAgcHJpbnRmKCJcbiIpOworICAgIHdoYXQgPSBXX05PVEhJTkc7CQkJLyogU28gY29u c29sZSBtb2RlcyBzZXQgcmlnaHQuICovCisjaWZuZGVmIE5PQ1NFVFMKKyAgICBsYW5ndWFnZSA9 IGxhbmdzdjsJCQkvKiBSZXN0b3JlIGxhbmd1YWdlICovCisjZW5kaWYgLyogTk9DU0VUUyAqLwor I2lmZGVmIENLX0FQQworICAgIGRlYnVnKEYxMDEsIkNPTk5FQ1QgZXhpdCBhcGNhY3RpdmUiLCIi LGFwY2FjdGl2ZSk7CisgICAgZGVidWcoRjEwMSwiQ09OTkVDVCBleGl0IGp1c3RvbmUiLCIiLGp1 c3RvbmUpOworI2VuZGlmIC8qIENLX0FQQyAqLworICAgIGlmIChtc2dmbGcpIHsKKyNpZmRlZiBD S19BUEMKKwlpZiAoYXBjYWN0aXZlID09IEFQQ19MT0NBTCkKKwkgIHByaW50ZigiXG4iKTsKKyNl bmRpZiAvKiBDS19BUEMgKi8KKwlwcmludGYoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOworCXByaW50YmFyID0gMTsKKyAgICB9IGVsc2UK KwlwcmludGJhciA9IDA7CisgICAgZmZsdXNoKHN0ZG91dCk7CisgICAgcmV0dXJuKHJjKTsKK30K KworLyogIEggQyBPIE4gTiBFICAtLSAgR2l2ZSBoZWxwIG1lc3NhZ2UgZm9yIGNvbm5lY3QuICAq LworCisjZGVmaW5lIENYTV9TRVIgMQkJCS8qIFNlcmlhbCBjb25uZWN0aW9ucyBvbmx5ICovCisj ZGVmaW5lIENYTV9ORVQgMgkJCS8qIE5ldHdvcmsgb25seSAoYnV0IG5vdCBUZWxuZXQpICovCisj ZGVmaW5lIENYTV9URUwgNAkJCS8qIFRlbG5ldCBvbmx5ICovCisKK3N0YXRpYyBzdHJ1Y3QgaG1z Z3RhYiB7CisgICAgY2hhciAqIGhtc2c7CisgICAgaW50IGhmbGFnczsKK30gaGxwbXNnW10gPSB7 CisgICAgeyIgID8gb3IgSCBmb3IgdGhpcyBtZXNzYWdlIiwgICAgICAgICAgICAgICAgMH0sCisg ICAgeyIgIDAgKHplcm8pIHRvIHNlbmQgdGhlIE5VTCAoMCkgY2hhcmFjdGVyIiwgMH0sCisgICAg eyIgIEIgdG8gc2VuZCBhIEJSRUFLIHNpZ25hbCAoMC4yNzVzZWMpIiwgIENYTV9TRVJ9LAorI2lm ZGVmIE5FVENPTk4KKyAgICB7IiAgQiB0byBzZW5kIGEgbmV0d29yayBCUkVBSyIsICAgICAgICAg ICAgQ1hNX05FVH0sCisgICAgeyIgIEIgdG8gc2VuZCBhIFRlbG5ldCBCUkVBSyIsICAgICAgICAg ICAgIENYTV9URUx9LAorI2VuZGlmIC8qIE5FVENPTk4gKi8KKyNpZmRlZiBDS19MQlJLCisgICAg eyIgIEwgdG8gc2VuZCBhIExvbmcgQlJFQUsgKDEuNXNlYykiLCAgICAgIENYTV9TRVJ9LAorI2Vu ZGlmIC8qIENLX0xCUksgKi8KKyNpZmRlZiBORVRDT05OCisgICAgeyIgIEkgdG8gc2VuZCBhIG5l dHdvcmsgaW50ZXJydXB0IHBhY2tldCIsIENYTV9ORVR9LAorICAgIHsiICBJIHRvIHNlbmQgYSBU ZWxuZXQgSW50ZXJydXB0IHJlcXVlc3QiLCBDWE1fVEVMfSwKKyNpZmRlZiBUTkNPREUKKyAgICB7 IiAgQSB0byBzZW5kIFRlbG5ldCBBcmUtWW91LVRoZXJlPyIsICAgICAgQ1hNX1RFTH0sCisjZW5k aWYgLyogVE5DT0RFICovCisjZW5kaWYgLyogTkVUQ09OTiAqLworICAgIHsiICBVIHRvIGhhbmd1 cCBhbmQgY2xvc2UgdGhlIGNvbm5lY3Rpb24iLCAwfSwKKyAgICB7IiAgUSB0byBoYW5ndXAgYW5k IHF1aXQgS2VybWl0IiwgICAgICAgICAgMH0sCisgICAgeyIgIFMgZm9yIHN0YXR1cyIsICAgICAg ICAgICAgICAgICAgICAgICAgIDB9LAorI2lmZGVmIE5PUFVTSAorICAgIHsiICAhIHRvIHB1c2gg dG8gbG9jYWwgc2hlbGwgKGRpc2FibGVkKSIsICAwfSwKKyAgICB7IiAgWiB0byBzdXNwZW5kIChk aXNhYmxlZCkiLCAgICAgICAgICAgICAgMH0sCisjZWxzZQorICAgIHsiICAhIHRvIHB1c2ggdG8g bG9jYWwgc2hlbGwiLCAgICAgICAgICAgICAwfSwKKyNpZmRlZiBOT0pDCisgICAgeyIgIFogdG8g c3VzcGVuZCAoZGlzYWJsZWQpIiwgICAgICAgICAgICAgIDB9LAorI2Vsc2UKKyAgICB7IiAgWiB0 byBzdXNwZW5kIiwgICAgICAgICAgICAgICAgICAgICAgICAgMH0sCisjZW5kaWYgLyogTk9KQyAq LworI2VuZGlmIC8qIE5PUFVTSCAqLworICAgIHsiICBcXCBiYWNrc2xhc2ggY29kZToiLCAgICAg ICAgICAgICAgICAgICAwfSwKKyAgICB7IiAgICBcXG5ubiAgZGVjaW1hbCBjaGFyYWN0ZXIgY29k ZSIsICAgICAgMH0sCisgICAgeyIgICAgXFxPbm5uIG9jdGFsIGNoYXJhY3RlciBjb2RlIiwgICAg ICAgIDB9LAorICAgIHsiICAgIFxcWGhoICBoZXhhZGVjaW1hbCBjaGFyYWN0ZXIgY29kZTsiLCAw fSwKKyAgICB7IiAgICB0ZXJtaW5hdGUgd2l0aCBDYXJyaWFnZSBSZXR1cm4uIiwgICAgMH0sCisg ICAgeyIgIFR5cGUgdGhlIGVzY2FwZSBjaGFyYWN0ZXIgYWdhaW4gdG8gc2VuZCB0aGUgZXNjYXBl IGNoYXJhY3RlciBpdHNlbGYsIiwKKyAgICAgICAwfSwKKyAgICB7IiAgb3IgcHJlc3MgdGhlIHNw YWNlLWJhciB0byByZXN1bWUgdGhlIENPTk5FQ1Qgc2Vzc2lvbi4iLCAwfSwKKyAgICB7TlVMTCwg MH0KK307CisKK2ludAoraGNvbm5lKCkgeworICAgIGludCBjLCBpLCBjeHR5cGU7CisgICAgaWYg KG5ldHdvcmspCisgICAgICBjeHR5cGUgPSBJU19URUxORVQoKSA/IENYTV9URUwgOiBDWE1fTkVU OworICAgIGVsc2UKKyAgICAgIGN4dHlwZSA9IENYTV9TRVI7CisKKyAgICBjb25vbCgiXHJcbi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuIik7 CisgICAgY29ub2xsKCJQcmVzczoiKTsKKyAgICBjb25vbCgiICBDIHRvIHJldHVybiB0byAiKTsK KyAgICBjb25vbGwoKm15aG9zdCA/IG15aG9zdCA6ICJ0aGUgQy1LZXJtaXQgcHJvbXB0Iik7Cisg ICAgZm9yIChpID0gMDsgaGxwbXNnW2ldLmhtc2c7IGkrKykgeworCWlmICghKGhscG1zZ1tpXS5o ZmxhZ3MpIHx8IChobHBtc2dbaV0uaGZsYWdzID09IGN4dHlwZSkpCisJICBjb25vbGwoaGxwbXNn W2ldLmhtc2cpOworICAgIH0KKyAgICBjb25vbCgiUHJlc3MgYSBrZXk+Iik7CQkvKiBQcm9tcHQg Zm9yIGNvbW1hbmQuICovCisgICAgYyA9IENPTkdLUygpICYgMDE3NzsJCS8qIEdldCBjaGFyYWN0 ZXIsIHN0cmlwIGFueSBwYXJpdHkuICovCisgICAgLyogTm8ga2V5IG1hcHBpbmcgb3IgdHJhbnNs YXRpb24gaGVyZSAqLworICAgIGlmIChjICE9IENNRFEpCisgICAgICBjb25vbGwoIiIpOworICAg IGNvbm9sbCgiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSIpOworICAgIHJldHVybihjKTsJCQkJLyogUmV0dXJuIGl0LiAqLworfQorCisKKy8qICBE IE8gRSBTIEMgIC0tICBQcm9jZXNzIGFuIGVzY2FwZSBjaGFyYWN0ZXIgYXJndW1lbnQgICovCisK K1ZPSUQKKyNpZmRlZiBDS19BTlNJQworZG9lc2MoY2hhciBjKQorI2Vsc2UKK2RvZXNjKGMpIGNo YXIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogZG9lc2MgKi8geworICAgIENIQVIgZDsK KworICAgIGRlYnVnKEYxMDEsIkNPTk5FQ1QgZG9lc2MiLCIiLGMpOworICAgIHdoaWxlICgxKSB7 CisJaWYgKGMgPT0gZXNjYXBlKSB7CQkvKiBTZW5kIGVzY2FwZSBjaGFyYWN0ZXIgKi8KKwkgICAg ZCA9IGRvcGFyKChDSEFSKSBjKTsgdHRvYygoY2hhcikgZCk7IHJldHVybjsKKyAgICAJfSBlbHNl CQkJCS8qIE9yIGVsc2UgbG9vayBpdCB1cCBiZWxvdy4gKi8KKwkgICAgaWYgKGlzdXBwZXIoYykp IGMgPSB0b2xvd2VyKGMpOworCisJc3dpdGNoKGMpIHsKKworCSAgY2FzZSAnYyc6CQkJLyogRXNj YXBlIGJhY2sgdG8gcHJvbXB0ICovCisJICBjYXNlICdcMDMnOgorCSAgICBjeF9zdGF0dXMgPSBD U1hfRVNDQVBFOworI2lmZGVmIE5PSUNQCisJICAgIGNvbm9sbCgiIik7CisJICAgIGNvbm9sbCgi Iik7CisJICAgIGNvbm9sbCgKKyIgIFdBUk5JTkc6IFRoaXMgdmVyc2lvbiBvZiBDLUtlcm1pdCBo YXMgbm8gY29tbWFuZCBwcm9jZXNzb3IgdG8gZXNjYXBlIgorCQkgICApOworCSAgICBjb25vbGwo CisiICBiYWNrIHRvLiAgVG8gcmV0dXJuIHRvIHlvdXIgbG9jYWwgc3lzdGVtLCBsb2cgb3V0IGZy b20gdGhlIHJlbW90ZSBhbmQvb3IiCisJCSAgICk7CisJICAgIGNvbm9sbCgKKyIgIHVzZSB0aGUg ZXNjYXBlIGNoYXJhY3RlciBmb2xsb3dlZCBieSB0aGUgbGV0dGVyIFUgdG8gY2xvc2UgKGhhbmcg VXApIHRoZSIKKwkJICAgKTsKKwkgICAgY29ub2xsKAorIiAgY29ubmVjdGlvbi4gIFJlc3VtaW5n IHlvdXIgc2Vzc2lvbi4uLiIKKwkJICAgKTsKKwkgICAgY29ub2xsKCIiKTsKKwkgICAgcmV0dXJu OworI2Vsc2UKKwkgICAgYWN0aXZlID0gMDsgY29ub2woIlxyXG4iKTsgcmV0dXJuOworI2VuZGlm IC8qIE5PSUNQICovCisKKwkgIGNhc2UgJ2InOgkJCS8qIFNlbmQgYSBCUkVBSyBzaWduYWwgKi8K KwkgIGNhc2UgJ1wwMic6CisjaWZkZWYgQ0tMRUFSTgorCSAgICBsZWFybmNoYXIoLTcpOworI2Vu ZGlmIC8qIENLTEVBUk4gKi8KKwkgICAgdHRzbmRiKCk7IHJldHVybjsKKworI2lmZGVmIE5FVENP Tk4KKwkgIGNhc2UgJ2knOgkJCS8qIFNlbmQgSW50ZXJydXB0ICovCisJICBjYXNlICdcMDExJzoK KyNpZmRlZiBUQ1BTT0NLRVQKKwkgICAgaWYgKG5ldHdvcmsgJiYgSVNfVEVMTkVUKCkpIHsgLyog VEVMTkVUICovCisJCXRlbXBbMF0gPSAoQ0hBUikgSUFDOwkvKiBJIEFtIGEgQ29tbWFuZCAqLwor CQl0ZW1wWzFdID0gKENIQVIpIFROX0lQOwkvKiBJbnRlcnJ1cHQgUHJvY2VzcyAqLworCQl0ZW1w WzJdID0gTlVMOworCQl0dG9sKChDSEFSICopdGVtcCwyKTsKKwkgICAgfSBlbHNlCisjZW5kaWYg LyogVENQU09DS0VUICovCisJICAgICAgY29ub2MoQkVMKTsKKwkgICAgcmV0dXJuOworCisjaWZk ZWYgVENQU09DS0VUCisJICBjYXNlICdhJzoJCQkvKiAiQXJlIFlvdSBUaGVyZT8iICovCisJICBj YXNlICdcMDEnOgorCSAgICBpZiAobmV0d29yayAmJiBJU19URUxORVQoKSkgeworCQl0ZW1wWzBd ID0gKENIQVIpIElBQzsJLyogSSBBbSBhIENvbW1hbmQgKi8KKwkJdGVtcFsxXSA9IChDSEFSKSBU Tl9BWVQ7IC8qIEFyZSBZb3UgVGhlcmU/ICovCisJCXRlbXBbMl0gPSBOVUw7CisJCXR0b2woKENI QVIgKil0ZW1wLDIpOworCSAgICB9IGVsc2UgY29ub2MoQkVMKTsKKwkgICAgcmV0dXJuOworI2Vu ZGlmIC8qIFRDUFNPQ0tFVCAqLworI2VuZGlmIC8qIE5FVENPTk4gKi8KKworI2lmZGVmIENLX0xC UksKKwkgIGNhc2UgJ2wnOgkJCS8qIFNlbmQgYSBMb25nIEJSRUFLIHNpZ25hbCAqLworI2lmZGVm IENLTEVBUk4KKwkgICAgbGVhcm5jaGFyKC04KTsKKyNlbmRpZiAvKiBDS0xFQVJOICovCisJICAg IHR0c25kbGIoKTsgcmV0dXJuOworI2VuZGlmIC8qIENLX0xCUksgKi8KKworCSAgY2FzZSAndSc6 CQkJLyogSGFuZ3VwICovCisgICAgICAgLyogY2FzZSAnXDAxMCc6ICovCQkvKiBObywgdG9vIGRh bmdlcm91cyAqLworCSAgICBjeF9zdGF0dXMgPSBDU1hfVVNFUkRJU0M7CisJICAgIGRvaGFuZ3Vw ID0gMjsgYWN0aXZlID0gMDsgY29ub2woIlxyXG5IYW5naW5nIHVwICIpOyByZXR1cm47CisKKwkg IGNhc2UgJ3EnOgkJCS8qIFF1aXQgKi8KKwkgICAgY3hfc3RhdHVzID0gQ1NYX1VTRVJESVNDOwor CSAgICBkb2hhbmd1cCA9IDI7IHF1aXRub3cgPSAxOyBhY3RpdmUgPSAwOyBjb25vbCgiXHJcbiIp OyByZXR1cm47CisKKwkgIGNhc2UgJ3MnOgkJCS8qIFN0YXR1cyAqLworCSAgICBjb25vbGwoIiIp OworCSAgICBjb25vbGwoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0iKTsKKyNpZmRlZiBQVFlPUlBJUEUKKwkgICAgaWYgKHR0cGlwZSkKKwkgICAg ICBja21ha21zZyh0ZW1wLFRNUExFTiwiIFBpcGU6IFwiIix0dG5hbWUsIlwiIixOVUxMKTsKKwkg ICAgZWxzZSBpZiAodHRwdHkpCisJICAgICAgY2ttYWttc2codGVtcCxUTVBMRU4sIiBQdHk6IFwi Iix0dG5hbWUsIlwiIixOVUxMKTsKKwkgICAgZWxzZQorI2VuZGlmIC8qIFBUWU9SUElQRSAqLwor CSAgICAgIGNrbWFrbXNnKHRlbXAsCisJCSAgICAgICBUTVBMRU4sCisJCSAgICAgICAiICIsCisJ CSAgICAgICAobmV0d29yayA/ICJIb3N0IiA6ICJEZXZpY2UiKSwKKwkJICAgICAgICI6ICIsCisJ CSAgICAgICB0dG5hbWUKKwkJICAgICAgICk7CisJICAgIGNvbm9sbCh0ZW1wKTsKKworCSAgICAv KiBUaGUgZm9sbG93aW5nIHNwcmludGYncyBhcmUgc2FmZSwgdGVtcFtdIHNpemUgaXMgYXQgbGVh c3QgMjAwICovCisKKwkgICAgaWYgKCFuZXR3b3JrICYmIHNwZWVkID49IDBMKSB7CisJCXNwcmlu dGYodGVtcCwiU3BlZWQgJWxkIiwgc3BlZWQpOworCQljb25vbGwodGVtcCk7CisJICAgIH0KKwkg ICAgc3ByaW50Zih0ZW1wLCIgVGVybWluYWwgZWNobzogJXMiLCBkdXBsZXggPyAibG9jYWwiIDog InJlbW90ZSIpOworCSAgICBjb25vbGwodGVtcCk7CisJICAgIHNwcmludGYodGVtcCwiIFRlcm1p bmFsIGJ5dGVzaXplOiAlZCIsIChjbWFzayA9PSAwMTc3KSA/IDcgOiA4KTsKKwkgICAgY29ub2xs KHRlbXApOworCSAgICBzcHJpbnRmKHRlbXAsIiBDb21tYW5kIGJ5dGVzaXplOiAlZCIsIChjbWRt c2sgPT0gMDE3NykgPyA3IDogOCk7CisJICAgIGNvbm9sbCh0ZW1wKTsKKyAgICAgICAgICAgIGlm IChod3Bhcml0eSkKKyAgICAgICAgICAgICAgc3ByaW50Zih0ZW1wLCIgUGFyaXR5W2hhcmR3YXJl XTogJXMiLHBhcm5hbShod3Bhcml0eSkpOworICAgICAgICAgICAgZWxzZQkgICAgCisgICAgICAg ICAgICAgIHNwcmludGYodGVtcCwiIFBhcml0eTogJXMiLCBwYXJuYW0ocGFyaXR5KSk7CisJICAg IGNvbm9sbCh0ZW1wKTsKKyNpZm5kZWYgTk9YRkVSCisJICAgIHNwcmludGYodGVtcCwiIEF1dG9k b3dubG9hZDogJXMiLCBhdXRvZGwgPyAib24iIDogIm9mZiIpOworCSAgICBjb25vbGwodGVtcCk7 CisjZW5kaWYgLyogTk9YRkVSICovCisJICAgIGNrbWFrbXNnKHRlbXAsCQkvKiAod291bGQgbm90 IGJlIHNhZmUgZm9yIHNwcmludGYpICovCisJCSAgICAgVE1QTEVOLAorCQkgICAgICIgU2Vzc2lv biBsb2c6ICIsCisJCSAgICAgKnNlc2ZpbCA/IHNlc2ZpbCA6ICIobm9uZSkiLAorCQkgICAgIE5V TEwsCisJCSAgICAgTlVMTAorCQkgICAgICk7CisJICAgIGNvbm9sbCh0ZW1wKTsKKyNpZm5kZWYg Tk9TSE9XCisJICAgIGlmICghbmV0d29yaykgc2hvbWRtKCk7CisjZW5kaWYgLyogTk9TSE9XICov CisjaWZkZWYgQ0tMT0dESUFMCisJICAgIHsKKwkJbG9uZyB6OworCQl6ID0gZG9sb2dzaG93KDAp OworCQlpZiAoeiA+IC0xTCkgeworCQkgICAgc3ByaW50Zih0ZW1wLCIgRWxhcHNlZCB0aW1lOiAl cyIsaGhtbXNzKHopKTsKKwkJICAgIGNvbm9sbCh0ZW1wKTsKKwkJfQorCSAgICB9CisjZW5kaWYg LyogQ0tMT0dESUFMICovCisJICAgIGNvbm9sbCgiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOworCSAgICByZXR1cm47CisKKwkgIGNhc2UgJ2gn OgkJCS8qIEhlbHAgKi8KKwkgIGNhc2UgJz8nOgkJCS8qIEhlbHAgKi8KKwkgICAgYyA9IGhjb25u ZSgpOyBjb250aW51ZTsKKworCSAgY2FzZSAnMCc6CQkJLyogU2VuZCBhIG51bGwgKi8KKwkgICAg YyA9ICdcMCc7IGQgPSBkb3BhcigoQ0hBUikgYyk7IHR0b2MoKGNoYXIpIGQpOyByZXR1cm47CisK KwkgIGNhc2UgJ3onOiBjYXNlICdcMDMyJzoJLyogU3VzcGVuZCAqLworI2lmbmRlZiBOT1BVU0gK KwkgICAgaWYgKCFub3B1c2gpCisJICAgICAgc3RwdHJhcCgwKTsKKwkgICAgZWxzZQorCSAgICAg IGNvbm9jKEJFTCk7CisjZWxzZQorCSAgICBjb25vYyhCRUwpOworI2VuZGlmIC8qIE5PUFVTSCAq LworCSAgICByZXR1cm47CisKKwkgIGNhc2UgJ0AnOgkJCS8qIFN0YXJ0IGluZmVyaW9yIGNvbW1h bmQgcHJvY2Vzc29yICovCisJICBjYXNlICchJzoKKyNpZm5kZWYgTk9QVVNICisJICAgIGlmICgh bm9wdXNoKSB7CisJCWNvbnJlcygpOwkJICAgICAgLyogUHV0IGNvbnNvbGUgYmFjayB0byBub3Jt YWwgKi8KKwkJenNoY21kKCIiKTsJCSAgICAgIC8qIEZvcmsgYSBzaGVsbC4gKi8KKwkJaWYgKGNv bmJpbigoY2hhcillc2NhcGUpIDwgMCkgeworCQkgICAgY3hfc3RhdHVzID0gQ1NYX0lOVEVSTkFM OworCQkgICAgcHJpbnRmKCJFcnJvciByZXN1bWluZyBDT05ORUNUIHNlc3Npb25cbiIpOworCQkg ICAgYWN0aXZlID0gMDsKKwkJfQorCSAgICB9IGVsc2UgY29ub2MoQkVMKTsKKyNlbHNlCisJICAg IGNvbm9jKEJFTCk7CisjZW5kaWYgLyogTk9QVVNIICovCisJICAgIHJldHVybjsKKworCSAgY2Fz ZSBTUDoJCQkvKiBTcGFjZSwgaWdub3JlICovCisJICAgIHJldHVybjsKKworCSAgZGVmYXVsdDoJ CQkvKiBPdGhlciAqLworCSAgICBpZiAoYyA9PSBDTURRKSB7CQkvKiBCYWNrc2xhc2ggZXNjYXBl ICovCisJCWludCB4OworCQllY2JwID0gZWNidWY7CisJCSplY2JwKysgPSBjOworCQl3aGlsZSAo KChjID0gKENPTkdLUygpICYgY21kbXNrKSkgIT0gJ1xyJykgJiYgKGMgIT0gJ1xuJykpCisJCSAg KmVjYnArKyA9IGM7CisJCSplY2JwID0gTlVMOyBlY2JwID0gZWNidWY7CisJCXggPSB4eGVzYygm ZWNicCk7CS8qIEludGVycHJldCBpdCAqLworCQlpZiAoeCA+PSAwKSB7CQkvKiBObyBrZXkgbWFw cGluZyBoZXJlICovCisJCSAgICBjID0gZG9wYXIoKENIQVIpIHgpOworCQkgICAgdHRvYygoY2hh cikgYyk7CisJCSAgICByZXR1cm47CisJCX0gZWxzZSB7CQkvKiBJbnZhbGlkIGJhY2tzbGFzaCBj b2RlLiAqLworCQkgICAgY29ub2MoQkVMKTsKKwkJICAgIHJldHVybjsKKwkJfQorCSAgICB9CisJ ICAgIGNvbm9jKEJFTCk7IHJldHVybjsgCS8qIEludmFsaWQgZXNjIGFyZywgYmVlcCAqLworICAg IAl9CisgICAgfQorfQorI2VuZGlmIC8qIE5PTE9DQUwgKi8KCmRpZmYgLS1naXQgYS9ja2VybWl0 LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdWNvbi5jIGIvY2tlcm1pdC05LjAuMzAy LWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3Vjb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwLi41MGNlYjdlCi0tLSAvZGV2L251bGwKKysrIGIvY2tlcm1pdC05LjAuMzAyLWJ1 aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3Vjb24uYwpAQCAtMCwwICsxLDI2OTAgQEAKKyNpbmNsdWRl ICJja2NzeW0uaCIKKworY2hhciAqY29ubnYgPSAiQ09OTkVDVCBDb21tYW5kIGZvciBVTklYOmZv cmsoKSwgOS4wLjExNywgMTQgSnVsIDIwMTEiOworCisvKiAgQyBLIFUgQyBPIE4gIC0tICBUZXJt aW5hbCBjb25uZWN0aW9uIHRvIHJlbW90ZSBzeXN0ZW0sIGZvciBVTklYICAqLworLyoKKyAgQXV0 aG9yOiBGcmFuayBkYSBDcnV6IDxmZGNAY29sdW1iaWEuZWR1PiwKKyAgQ29sdW1iaWEgVW5pdmVy c2l0eSBBY2FkZW1pYyBJbmZvcm1hdGlvbiBTeXN0ZW1zLCBOZXcgWW9yayBDaXR5LgorCisgIENv cHlyaWdodCAoQykgMTk4NSwgMjAxMSwKKyAgICBUcnVzdGVlcyBvZiBDb2x1bWJpYSBVbml2ZXJz aXR5IGluIHRoZSBDaXR5IG9mIE5ldyBZb3JrLgorICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBT ZWUgdGhlIEMtS2VybWl0IENPUFlJTkcuVFhUIGZpbGUgb3IgdGhlCisgICAgY29weXJpZ2h0IHRl eHQgaW4gdGhlIGNrY21haS5jIG1vZHVsZSBmb3IgZGlzY2xhaW1lciBhbmQgcGVybWlzc2lvbnMu CisKKyAgTk9URTogVGhpcyBtb2R1bGUgaGFzIGJlZW4gc3VwZXJzZWRlZCBvbiBtb3N0IHBsYXRm b3JtcyBieSBja3VjbnMuYywgd2hpY2gKKyAgdXNlcyBzZWxlY3QoKSByYXRoZXIgdGhhbiBmb3Jr KCkgZm9yIG11bHRpcGxleGluZyBpdHMgaS9vLiAgVGhpcyBtb2R1bGUKKyAgaXMgc3RpbGwgbmVl ZGVkIGZvciBwbGF0Zm9ybXMgdGhhdCBkbyBub3Qgc3VwcG9ydCBzZWxlY3QoKSwgYW5kIGFsc28g Zm9yCisgIGl0cyBYLjI1IHN1cHBvcnQuICBBbHRob3VnaCB0aGUgdHdvIG1vZHVsZXMgc2hhcmUg bGFyZ2UgYW1vdW50cyBvZiBjb2RlLAorICB0aGVpciBzdHJ1Y3R1cmUgaXMgcmFkaWNhbGx5IGRp ZmZlcmVudCBhbmQgdGhlcmVmb3JlIGF0dGVtcHRzIGF0IG1lcmdpbmcKKyAgdGhlbSBoYXZlIHNv IGZhciBiZWVuIHVuc3VjY2Vzc2Z1bC4gIChOb3ZlbWJlciAxOTk4LikKKworICBTcGVjaWFsIHRo YW5rcyB0byBFZHVhcmQgVm9waWNrYSwgUHJhZ3VlIFVuaXZlcnNpdHkgb2YgRWNvbm9taWNzLAor ICBDemVjaCBSZXB1YmxpYywgZm9yIHZhbHVhYmxlIGNvbnRyaWJ1dGlvbnMgdG8gdGhpcyBtb2R1 bGUgaW4gSnVseSAxOTk0LAorICBhbmQgdG8gTmVhbCBQLiBNdXJwaHkgb2YgdGhlIE1vdG9yb2xh IENlbGx1bGFyIEluZnJhc3RydWN0dXJlIEdyb3VwIGluIDE5OTYKKyAgZm9yIHJlYXJyYW5naW5n IHRoZSBjb2RlIHRvIGFsbG93IG9wZXJhdGlvbiBvbiB0aGUgQmVCb3gsIHlldCBzdGlsbCB3b3Jr CisgIGluIHJlZ3VsYXIgVU5JWC4KKyovCisjaW5jbHVkZSAiY2tjZGViLmgiCQkJLyogQ29tbW9u IHRoaW5ncyBmaXJzdCAqLworCisjaWZuZGVmIE5PTE9DQUwKKworI2lmZGVmIEJFT1NPUkJFQk9Y CitzdGF0aWMgZG91YmxlIHRpbWVfc3RhcnRlZCA9IDAuMDsKKyNpbmNsdWRlIDxrZXJuZWwvT1Mu aD4KK19QUk9UT1RZUCggc3RhdGljIGxvbmcgY29uY2xkLCAodm9pZCAqKSApOworI2Vsc2UKK19Q Uk9UT1RZUCggc3RhdGljIFZPSUQgY29uY2xkLCAodm9pZCkgKTsKKyNlbmRpZiAvKiBCRU9TT1JC RUJPWCAqLworCisjaWZkZWYgTkVYVAorI3VuZGVmIE5TSUcKKyNpbmNsdWRlIDxzeXMvd2FpdC5o PgkJCS8qIEZvciB3YWl0KCkgKi8KKyNlbmRpZiAvKiBORVhUICovCisKKyNpbmNsdWRlIDxzaWdu YWwuaD4JCQkvKiBTaWduYWxzICovCisKKyNpZm5kZWYgSFBVWFBSRTY1CisjaW5jbHVkZSA8ZXJy bm8uaD4JCQkvKiBFcnJvciBudW1iZXIgc3ltYm9scyAqLworI2Vsc2UKKyNpZm5kZWYgRVJSTk9f SU5DTFVERUQKKyNpbmNsdWRlIDxlcnJuby5oPgkJCS8qIEVycm9yIG51bWJlciBzeW1ib2xzICov CisjZW5kaWYJLyogRVJSTk9fSU5DTFVERUQgKi8KKyNlbmRpZgkvKiBIUFVYUFJFNjUgKi8KKwor I2lmZGVmIFpJTE9HCQkJCS8qIExvbmdqdW1wcyAqLworI2luY2x1ZGUgPHNldHJldC5oPgorI2Vs c2UKKyNpbmNsdWRlIDxzZXRqbXAuaD4KKyNlbmRpZiAvKiBaSUxPRyAqLworI2luY2x1ZGUgImNr Y3NpZy5oIgorCisvKiBLZXJtaXQtc3BlY2lmaWMgaW5jbHVkZXMgKi8KKworI2luY2x1ZGUgImNr Y2FzYy5oIgkJCS8qIEFTQ0lJIGNoYXJhY3RlcnMgKi8KKyNpbmNsdWRlICJja2NrZXIuaCIJCQkv KiBLZXJtaXQgdGhpbmdzICovCisjaW5jbHVkZSAiY2t1Y21kLmgiCQkJLyogRm9yIHh4ZXNjKCkg cHJvdG90eXBlICovCisjaW5jbHVkZSAiY2tjbmV0LmgiCQkJLyogTmV0d29yayBzeW1ib2xzICov CisjaWZuZGVmIE5PQ1NFVFMKKyNpbmNsdWRlICJja2N4bGEuaCIJCQkvKiBDaGFyYWN0ZXIgc2V0 IHRyYW5zbGF0aW9uICovCisjZW5kaWYgLyogTk9DU0VUUyAqLworCisvKiBJbnRlcm5hbCBmdW5j dGlvbiBwcm90b3R5cGVzICovCisKK19QUk9UT1RZUCggVk9JRCB0dGZsdXgsICh2b2lkKSApOwor X1BST1RPVFlQKCBWT0lEIGRvZXNjLCAoY2hhcikgKTsKK19QUk9UT1RZUCggVk9JRCBsb2djaGFy LCAoY2hhcikgKTsKK19QUk9UT1RZUCggaW50IGhjb25uZSwgKHZvaWQpICk7CisjaWZuZGVmIE5P U0hPVworX1BST1RPVFlQKCBWT0lEIHNob21kbSwgKHZvaWQpICk7CisjZW5kaWYgLyogTk9TSE9X ICovCitfUFJPVE9UWVAoIHN0YXRpYyBpbnQga2JnZXQsICh2b2lkKSApOworX1BST1RPVFlQKCBz dGF0aWMgaW50IHBpcGVtc2csIChpbnQpICk7CitfUFJPVE9UWVAoIHN0YXRpYyBpbnQgY2tjcHV0 ZiwgKHZvaWQpICk7CitfUFJPVE9UWVAoIHN0YXRpYyBWT0lEIGNrX3NuZG1zZywgKHZvaWQpICk7 CisvKgorICBGb3IgaW50ZXItZm9yayBzaWduYWxpbmcuICBOb3JtYWxseSB3ZSB1c2UgU0lHVVNS MSwgZXhjZXB0IG9uIFNDTywgd2hlcmUKKyAgd2UgdXNlIFNJR1VTUjIgYmVjYXVzZSBTSUdVU1Ix IGlzIHVzZWQgYnkgdGhlIHN5c3RlbS4gIFlvdSBjYW4gZGVmaW5lCisgIENLX0ZPUktfU0lHIHRv IGJlIHdoYXRldmVyIG90aGVyIHNpZ25hbCB5b3UgbWlnaHQgd2FudCB0byB1c2UgYXQgY29tcGls ZQorICB0aW1lLiAgV2UgZG9uJ3QgdXNlIFNJR1VTUjIgZXZlcnl3aGVyZSBiZWNhdXNlIGluIHNv bWUgc3lzdGVtcywgbGlrZQorICBVbml4V2FyZSwgdGhlIGRlZmF1bHQgYWN0aW9uIGZvciBTSUdV U1IyIGlzIHRvIGtpbGwgdGhlIHByb2Nlc3MgdGhhdCBnZXRzIGl0LgorKi8KKyNpZm5kZWYgQ0tf Rk9SS19TSUcKKworI2lmbmRlZiBTSUdVU1IxCQkJCS8qIFVzZXItZGVmaW5lZCBzaWduYWxzICov CisjZGVmaW5lIFNJR1VTUjEgMzAKKyNlbmRpZiAvKiBTSUdVU1IxICovCisKKyNpZm5kZWYgU0lH VVNSMgorI2RlZmluZSBTSUdVU1IyIDMxCisjZW5kaWYgLyogU0lHVVNSMiAqLworCisjaWZkZWYg TV9VTklYCisjZGVmaW5lIENLX0ZPUktfU0lHIFNJR1VTUjIJCS8qIFNDTyAtIHVzZSBTSUdVU1Iy ICovCisjZWxzZQorI2RlZmluZSBDS19GT1JLX1NJRyBTSUdVU1IxCQkvKiBPdGhlcnMgLSB1c2Ug U0lHVVNSMSAqLworI2VuZGlmIC8qIE1fVU5JWCAqLworCisjZW5kaWYgLyogQ0tfRk9SS19TSUcg Ki8KKworLyogRXh0ZXJuYWwgdmFyaWFibGVzICovCisKK2V4dGVybiBzdHJ1Y3QgY2tfcCBwdGFi W107CisKK2V4dGVybiBpbnQgbG9jYWwsIGVzY2FwZSwgZHVwbGV4LCBwYXJpdHksIGZsb3csIHNl c2xvZywgc2Vzc2Z0LCBkZWJzZXMsCisgbWRtdHlwLCB0dG5wcm90bywgY21hc2ssIGNtZG1zaywg bmV0d29yaywgbmV0dHlwZSwgZGVibG9nLCBzb3NpLCB0bmxtLAorIHhpdHN0YSwgd2hhdCwgdHR5 ZmQsIHR0cGlwZSwgcXVpZXQsIGJhY2tncmQsIHBmbGFnLCB0dF9jcmQsIHR0X2xmZCwKKyB0bl9u bG0sIHR0ZmRmbGcsCisgdHRfZXNjYXBlLCBqdXN0b25lLCBjYXJyaWVyLCBod3Bhcml0eTsKKwor ZXh0ZXJuIGxvbmcgc3BlZWQ7CitleHRlcm4gY2hhciB0dG5hbWVbXSwgc2VzZmlsW10sIG15aG9z dFtdLCAqY2NudGFiW107CisjaWZkZWYgVE5DT0RFCitleHRlcm4gaW50IHRuX2JfbmxtLCB0bl9y ZW1fZWNobzsKKyNlbmRpZiAvKiBUTkNPREUgKi8KKworI2lmZGVmIENLX1RSSUdHRVIKK2V4dGVy biBjaGFyICogdHRfdHJpZ2dlcltdLCAqIHRyaWdnZXJ2YWw7CisjZW5kaWYgLyogQ0tfVFJJR0dF UiAqLworCitleHRlcm4gaW50IG5vcHVzaDsKKworI2lmZGVmIENLX0FQQworZXh0ZXJuIGludCBh cGNhY3RpdmU7CQkJLyogQXBwbGljYXRpb24gUHJvZ3JhbSBDb21tYW5kIChBUEMpICovCitleHRl cm4gaW50IGFwY3N0YXR1czsJCQkvKiBpdGVtcyAuLi4gKi8KK3N0YXRpYyBpbnQgYXBjbGVuZ3Ro ID0gMDsKKyNpZmRlZiBEQ01EQlVGCitleHRlcm4gY2hhciAqYXBjYnVmOworI2Vsc2UKK2V4dGVy biBjaGFyIGFwY2J1ZltdOworI2VuZGlmIC8qIERDTURCVUYgKi8KK3N0YXRpYyBpbnQgYXBjYnVm bGVuID0gQVBDQlVGTEVOIC0gMjsKK2V4dGVybiBpbnQgcHJvdG9jb2w7CQkJLyogQXV0byBkb3du bG9hZCAqLworI2VuZGlmIC8qIENLX0FQQyAqLworCitleHRlcm4gaW50IGF1dG9kbDsKKyNpZmRl ZiBDS19BVVRPREwKK2V4dGVybiBDSEFSIGtzYnVmW107CisjZW5kaWYgLyogQ0tfQVVUT0RMICov CisKKyNpZmRlZiBDS19YWVoKKyNpZmRlZiBYWVpfSU5URVJOQUwKK3N0YXRpYyBpbnQgem1kbG9r ID0gMTsJCQkvKiBabW9kZW0gYXV0b2Rvd25sb2FkcyBhdmFpbGFibGUgKi8KKyNlbHNlCitzdGF0 aWMgaW50IHptZGxvayA9IDA7CQkJLyogRGVwZW5kcyBvbiBleHRlcm5hbCBwcm90b2NvbCBkZWYg Ki8KKyNlbmRpZiAvKiBYWVpfSU5URVJOQUwgKi8KKyNlbHNlCitzdGF0aWMgaW50IHptZGxvayA9 IDA7CQkJLyogTm90IGF2YWlsYWJsZSBhdCBhbGwgKi8KKyNlbmRpZiAvKiBDS19YWVogKi8KKwor I2lmbmRlZiBOT1NFVEtFWQkJCS8qIEtleWJvYXJkIG1hcHBpbmcgKi8KK2V4dGVybiBLRVkgKmtl eW1hcDsJCQkvKiBTaW5nbGUtY2hhcmFjdGVyIGtleSBtYXAgKi8KK2V4dGVybiBNQUNSTyAqbWFj cm90YWI7CQkJLyogS2V5IG1hY3JvIHBvaW50ZXIgdGFibGUgKi8KK3N0YXRpYyBNQUNSTyBrbXB0 ciA9IE5VTEw7CQkvKiBQb2ludGVyIHRvIGN1cnJlbnQga2V5IG1hY3JvICovCisjZW5kaWYgLyog Tk9TRVRLRVkgKi8KKworLyogR2xvYmFsIHZhcmlhYmxlcyBsb2NhbCB0byB0aGlzIG1vZHVsZSAq LworCitzdGF0aWMgaW50CisgIHF1aXRub3cgPSAwLAkJCQkvKiA8ZXNjLWNoYXI+USB3YXMgdHlw ZWQgKi8KKyAgamJzZXQgPSAwLAkJCQkvKiBGbGFnIHdoZXRoZXIgam1wIGJ1ZiBpcyBzZXQuICov CisgIGRvaGFuZ3VwID0gMCwJCQkJLyogPGVzYy1jaGFyPkggd2FzIHR5cGVkICovCisgIHNqdmFs LAkJCQkvKiBTZXRqdW1wIHJldHVybiB2YWx1ZSAqLworICBnb3RlcnIgPSAwLAkJCQkvKiBGb3Jr L3BpcGUgY3JlYXRpb24gZXJyb3IgZmxhZyAqLworICBpbnNoaWZ0ID0gMCwJCQkJLyogU08vU0kg c2hpZnQgc3RhdGVzICovCisgIG91dHNoaWZ0ID0gMDsKKworaW50IGFjdGl2ZSA9IDA7CQkJCS8q IExvd2VyIGZvcmsgYWN0aXZlIGZsYWcgKi8KKworc3RhdGljIFBJRF9UIHBhcmVudF9pZCA9IChQ SURfVCkwOwkvKiBQcm9jZXNzIElEIG9mIGtleWJvYXJkIGZvcmsgKi8KKworc3RhdGljIGNoYXIg ZWNidWZbMTBdLCAqZWNicDsJCS8qIEVzY2FwZSBjaGFyIGJ1ZmZlciAmIHBvaW50ZXIgKi8KKwor I2lmZGVmIENLX1NNQUxMCisjZGVmaW5lIElCVUZMIDE1MzYJCQkvKiBJbnB1dCBidWZmZXIgbGVu Z3RoICovCisjZWxzZQorI2RlZmluZSBJQlVGTCA0MDk2CisjZW5kaWYgLyogQ0tfU01BTEwgKi8K Kworc3RhdGljIGludCBvYmMgPSAwOwkJCS8qIE91dHB1dCBidWZmZXIgY291bnQgKi8KKworI2lm bmRlZiBPWE9TCisjZGVmaW5lIE9CVUZMIDEwMjQJCQkvKiBPdXRwdXQgYnVmZmVyIGxlbmd0aCAq LworI2Vsc2UKKyNkZWZpbmUgT0JVRkwgSUJVRkwKKyNlbmRpZiAvKiBPWE9TICovCisKKyNpZmRl ZiBCSUdCVUZPSworI2RlZmluZSBUTVBMRU4gNDA5NgkJCS8qIFRlbXBvcmFyeSBtZXNzYWdlIGJ1 ZmZlciBsZW5ndGggKi8KKyNlbHNlCisjZGVmaW5lIFRNUExFTiAyMDAKKyNlbmRpZiAvKiBCSUdC VUZPSyAqLworCisjaWZkZWYgRFlOQU1JQworc3RhdGljIGNoYXIgKmlidWYgPSBOVUxMLCAqb2J1 ZiA9IE5VTEwsICp0ZW1wID0gTlVMTDsgLyogQnVmZmVycyAqLworI2Vsc2UKK3N0YXRpYyBjaGFy IGlidWZbSUJVRkxdLCBvYnVmW09CVUZMXSwgdGVtcFtUTVBMRU5dOworI2VuZGlmIC8qIERZTkFN SUMgKi8KKworI2lmZGVmIERZTkFNSUMKK3N0YXRpYyBjaGFyICppYnA7CQkJLyogSW5wdXQgYnVm ZmVyIHBvaW50ZXIgKi8KKyNlbHNlCitzdGF0aWMgY2hhciAqaWJwID0gaWJ1ZjsJCS8qIElucHV0 IGJ1ZmZlciBwb2ludGVyICovCisjZW5kaWYgLypEWU5BTUlDICovCitzdGF0aWMgaW50IGliYyA9 IDA7CQkJLyogSW5wdXQgYnVmZmVyIGNvdW50ICovCisKKyNpZmRlZiBEWU5BTUlDCitzdGF0aWMg Y2hhciAqb2JwOwkJCS8qIE91dHB1dCBidWZmZXIgcG9pbnRlciAqLworI2Vsc2UKK3N0YXRpYyBj aGFyICpvYnAgPSBvYnVmOwkJLyogT3V0cHV0IGJ1ZmZlciBwb2ludGVyICovCisjZW5kaWYgLyog RFlOQU1JQyAqLworCisvKiBYLjI1IGl0ZW1zICovCisKKyNpZmRlZiBBTllYMjUKK3N0YXRpYyBj aGFyICpwOwkJCQkvKiBHZW5lcmFsIHB1cnBvc2UgcG9pbnRlciAqLworY2hhciB4MjVpYnVmW01B WElYMjVdOwkJCS8qIElucHV0IGJ1ZmZlciAqLworY2hhciB4MjVvYnVmW01BWE9YMjVdOwkJCS8q IE91dHB1dCBidWZmZXIgKi8KK2ludCBpYnVmbDsJCQkJLyogTGVuZ3RoIG9mIGlucHV0IGJ1ZmZl ciAqLworaW50IG9idWZsOwkJCQkvKiBMZW5ndGggb2Ygb3V0cHV0IGJ1ZmZlciAqLwordW5zaWdu ZWQgY2hhciB0b3NlbmQgPSAwOworaW50IGxpbmtpZCwgbGNuOworc3RhdGljIGludCBkb3gyNWNs ciA9IDA7CisjaWZuZGVmIElCTVgyNQorZXh0ZXJuIENIQVIgcGFkcGFybXNbXTsKKyNlbmRpZiAv KiBJQk1YMjUgKi8KKyNlbmRpZiAvKiBBTllYMjUgKi8KKworc3RhdGljIGludCB4cGlwZVsyXSA9 IHstMSwgLTF9OwkvKiBQaXBlIGRlc2NyaXB0b3IgZm9yIGNoaWxkLXBhcmVudCBtZXNzYWdlcyAq Lworc3RhdGljIFBJRF9UIHBpZCA9IChQSURfVCkgMDsJLyogUHJvY2VzcyBJRCBvZiBjaGlsZCAq LworCisvKiBDaGFyYWN0ZXItc2V0IGl0ZW1zICovCisKK3N0YXRpYyBpbnQgdW5pY29kZSA9IDA7 CisKK3N0YXRpYyBpbnQgZXNjc2VxID0gMDsJCQkvKiAxID0gUmVjb2duaXplciBpcyBhY3RpdmUg Ki8KK2ludCBpbmVzYyA9IDA7CQkJCS8qIFN0YXRlIG9mIHNlcXVlbmNlIHJlY29nbml6ZXIgKi8K K2ludCBvbGRlc2MgPSAtMTsJCQkvKiBQcmV2aW91cyBzdGF0ZSBvZiByZWNvZ25pemVyICovCisK KyNkZWZpbmUgT1VUWEJVRlNJWiAxNQorc3RhdGljIENIQVIgaW54YnVmW09VVFhCVUZTSVorMV07 CS8qIEhvc3QtdG8tc2NyZWVuIGV4cGFuc2lvbiBidWZmZXIgKi8KK3N0YXRpYyBpbnQgaW54Y291 bnQgPSAwOwkJLyogYW5kIGNvdW50ICovCitzdGF0aWMgQ0hBUiBvdXR4YnVmW09VVFhCVUZTSVor MV07CS8qIEtleWJvYXJkLXRvLWhvc3QgZXhwYW5zaW9uIGJ1ZiAqLworc3RhdGljIGludCBvdXR4 Y291bnQgPSAwOwkJLyogYW5kIGNvdW50ICovCisKKyNpZm5kZWYgTk9DU0VUUworI2lmZGVmIENL X0FOU0lDIC8qIEFOU0kgQyBwcm90b3R5cGVzLi4uICovCitleHRlcm4gQ0hBUiAoKnhsc1tNQVhU Q1NFVFMrMV1bTUFYRkNTRVRTKzFdKShDSEFSKTsgLyogQ2hhcmFjdGVyIHNldCAqLworZXh0ZXJu IENIQVIgKCp4bHJbTUFYVENTRVRTKzFdW01BWEZDU0VUUysxXSkoQ0hBUik7IC8qIHRyYW5zbGF0 aW9uIGZ1bmN0aW9ucyAqLworc3RhdGljIENIQVIgKCpzeG8pKENIQVIpOwkvKiBMb2NhbCB0cmFu c2xhdGlvbiBmdW5jdGlvbnMgKi8KK3N0YXRpYyBDSEFSICgqcnhvKShDSEFSKTsJLyogZm9yIG91 dHB1dCAoc2VuZGluZykgdGVybWluYWwgY2hhcnMgKi8KK3N0YXRpYyBDSEFSICgqc3hpKShDSEFS KTsJLyogYW5kIGZvciBpbnB1dCAocmVjZWl2aW5nKSB0ZXJtaW5hbCBjaGFycy4gKi8KK3N0YXRp YyBDSEFSICgqcnhpKShDSEFSKTsKKyNlbHNlIC8qIE5vdCBBTlNJIEMuLi4gKi8KK2V4dGVybiBD SEFSICgqeGxzW01BWFRDU0VUUysxXVtNQVhGQ1NFVFMrMV0pKCk7CS8qIENoYXJhY3RlciBzZXQg Ki8KK2V4dGVybiBDSEFSICgqeGxyW01BWFRDU0VUUysxXVtNQVhGQ1NFVFMrMV0pKCk7CS8qIHRy YW5zbGF0aW9uIGZ1bmN0aW9ucy4gKi8KK3N0YXRpYyBDSEFSICgqc3hvKSgpOwkJLyogTG9jYWwg dHJhbnNsYXRpb24gZnVuY3Rpb25zICovCitzdGF0aWMgQ0hBUiAoKnJ4bykoKTsJCS8qIGZvciBv dXRwdXQgKHNlbmRpbmcpIHRlcm1pbmFsIGNoYXJzICovCitzdGF0aWMgQ0hBUiAoKnN4aSkoKTsJ CS8qIGFuZCBmb3IgaW5wdXQgKHJlY2VpdmluZykgdGVybWluYWwgY2hhcnMuICovCitzdGF0aWMg Q0hBUiAoKnJ4aSkoKTsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworZXh0ZXJuIGludCBsYW5ndWFn ZTsJCS8qIEN1cnJlbnQgbGFuZ3VhZ2UuICovCitzdGF0aWMgaW50IGxhbmdzdjsJCS8qIEZvciBy ZW1lbWJlcmluZyBsYW5ndWFnZSBzZXR0aW5nLiAqLworZXh0ZXJuIHN0cnVjdCBjc2luZm8gZmNz aW5mb1tdOyAvKiBGaWxlIGNoYXJhY3RlciBzZXQgaW5mby4gKi8KK2V4dGVybiBpbnQgdGNzciwg dGNzbDsJCS8qIFRlcm1pbmFsIGNoYXJhY3RlciBzZXRzLCByZW1vdGUgJiBsb2NhbC4gKi8KK3N0 YXRpYyBpbnQgdGNzOwkJCS8qIEludGVybWVkaWF0ZSAoInRyYW5zZmVyIikgY2hhcmFjdGVyIHNl dC4gKi8KK3N0YXRpYyBpbnQgdGNzc2l6ZSA9IDA7CQkvKiBTaXplIG9mIHRjcyAqLworI2lmZGVm IFVOSUNPREUJCQkJLyogVVRGLTggc3VwcG9ydCAqLworI2lmZGVmIENLX0FOU0lDCitleHRlcm4g aW50ICgqeGxfdWZjW01BWEZDU0VUUysxXSkoVVNIT1JUKTsgIC8qIFVuaWNvZGUgdG8gRkNTICov CitleHRlcm4gVVNIT1JUICgqeGxfZmN1W01BWEZDU0VUUysxXSkoQ0hBUik7IC8qIEZDUyB0byBV bmljb2RlICovCitleHRlcm4gaW50ICgqeHVmKShVU0hPUlQpOwkJLyogVHJhbnNsYXRpb24gZnVu Y3Rpb24gVUNTIHRvIEZDUyAqLworZXh0ZXJuIFVTSE9SVCAoKnhmdSkoQ0hBUik7CQkvKiBUcmFu c2xhdGlvbiBmdW5jdGlvbiBGQ1MgdG8gVUNTICovCisjZWxzZQorZXh0ZXJuIGludCAoKnhsX3Vm Y1tNQVhGQ1NFVFMrMV0pKCk7CitleHRlcm4gVVNIT1JUICgqeGxfZmN1W01BWEZDU0VUUysxXSko KTsKK2V4dGVybiBpbnQgKCp4dWYpKCk7CitleHRlcm4gVVNIT1JUICgqeGZ1KSgpOworI2VuZGlm IC8qIENLX0FOU0lDICovCisjZW5kaWYgLyogVU5JQ09ERSAqLworI2VuZGlmIC8qIE5PQ1NFVFMg Ki8KKworLyoKKyAgV2UgZG8gbm90IG5lZWQgdG8gcGFyc2UgYW5kIHJlY29nbml6ZSBlc2NhcGUg c2VxdWVuY2VzIGlmIHdlIGFyZSBiZWluZyBidWlsdAorICB3aXRob3V0IGNoYXJhY3Rlci1zZXQg c3VwcG9ydCBBTkQgd2l0aG91dCBBUEMgc3VwcG9ydC4KKyovCisjaWZkZWYgTk9DU0VUUwkJCQkv KiBObyBjaGFyYWN0ZXIgc2V0cyAqLworI2lmbmRlZiBDS19BUEMJCQkJLyogTm8gQVBDICovCisj aWZuZGVmIE5PRVNDU0VRCisjZGVmaW5lIE5PRVNDU0VRCQkJLyogU28gbm8gZXNjYXBlIHNlcXVl bmNlIHJlY29nbml6ZXIgKi8KKyNlbmRpZiAvKiBOT0VTQ1NFUSAqLworI2VuZGlmIC8qIENLX0FQ QyAqLworI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKworLyogQ2hpbGQgcHJvY2VzcyBldmVudHMgYW5k IG1lc3NhZ2VzICovCisKKyNkZWZpbmUgQ0VWX05PICAwCQkJLyogTm8gZXZlbnQgKi8KKyNkZWZp bmUgQ0VWX0hVUCAxCQkJLyogQ29tbXVuaWNhdGlvbnMgaGFuZ3VwICovCisjZGVmaW5lIENFVl9Q QUQgMgkJCS8qIFguMjUgLSBjaGFuZ2UgUEFEIHBhcmFtZXRlcnMgKi8KKyNkZWZpbmUgQ0VWX0RV UCAzCQkJLyogVG9nZ2xlIGR1cGxleCAqLworI2RlZmluZSBDRVZfQVBDIDQJCQkvKiBFeGVjdXRl IEFQQyAqLworI2lmZGVmIFROQ09ERQorI2RlZmluZSBDRVZfTUVCSU4gNQkJCS8qIENoYW5nZSBv ZiBtZV9iaW5hcnkgKi8KKyNkZWZpbmUgQ0VWX1VCSU4gNgkJCS8qIENoYW5nZSBvZiB1X2JpbmFy eSAqLworI2VuZGlmIC8qIFROQ09ERSAqLworI2RlZmluZSBDRVZfQURMIDcJCQkvKiBBdXRvZG93 bmxvYWQgKi8KKyNkZWZpbmUgQ0VWX0FVTCA4CQkJLyogQXV0b3VwbG9hZCAqLworI2RlZmluZSBD RVZfVFJJIDkJCQkvKiBUcmlnZ2VyIHN0cmluZyAqLworCisjaWZkZWYgTk9FU0NTRVEKKyNkZWZp bmUgY2hrYWVzKHgpIDAKKyNlbHNlCisvKgorICBBcyBvZiBlZGl0IDE3OCwgdGhlIENPTk5FQ1Qg Y29tbWFuZCBza2lwcyBwYXN0IEFOU0kgZXNjYXBlIHNlcXVlbmNlcyB0bworICBhdm9pZCB0cmFu c2xhdGluZyB0aGUgY2hhcmFjdGVycyB3aXRoaW4gdGhlbS4gIFRoaXMgYWxsb3dzIHRoZSBDT05O RUNUCisgIGNvbW1hbmQgdG8gd29yayBjb3JyZWN0bHkgd2l0aCBhIGhvc3QgdGhhdCB1c2VzIGEg Ny1iaXQgSVNPIDY0NiBuYXRpb25hbAorICBjaGFyYWN0ZXIgc2V0LCBpbiB3aGljaCBjaGFyYWN0 ZXJzIGxpa2UgJ1snIHdvdWxkIG5vcm1hbGx5IGJlIHRyYW5zbGF0ZWQKKyAgaW50byBhY2NlbnRl ZCBjaGFyYWN0ZXJzLCBydWluaW5nIHRoZSB0ZXJtaW5hbCdzIGludGVycHJldGF0aW9uIChhbmQK KyAgZ2VuZXJhdGlvbikgb2YgZXNjYXBlIHNlcXVlbmNlcy4KKworICBBcyBvZiBlZGl0IDE5MCwg dGhlIENPTk5FQ1QgY29tbWFuZCByZXNwb25kcyB0byBBUEMgZXNjYXBlIHNlcXVlbmNlcworICAo RVNDIF8gdGV4dCBFU0MgXCkgaWYgdGhlIHVzZXIgU0VUcyBURVJNSU5BTCBBUEMgT04gb3IgVU5D SEVDS0VELCBhbmQgdGhlCisgIHByb2dyYW0gd2FzIGJ1aWx0IHdpdGggQ0tfQVBDIGRlZmluZWQu CisKKyAgTm9uLUFOU0kvSVNPLWNvbXBsaWFudCBlc2NhcGUgc2VxdWVuY2VzIGFyZSBub3QgaGFu ZGxlZC4KKyovCisKKy8qIFN0YXRlcyBmb3IgdGhlIGVzY2FwZS1zZXF1ZW5jZSByZWNvZ25pemVy LiAqLworCisjZGVmaW5lIEVTX05PUk1BTCAwCQkJLyogTm9ybWFsLCBub3QgaW4gYW4gZXNjYXBl IHNlcXVlbmNlICovCisjZGVmaW5lIEVTX0dPVEVTQyAxCQkJLyogQ3VycmVudCBjaGFyYWN0ZXIg aXMgRVNDICovCisjZGVmaW5lIEVTX0VTQ1NFUSAyCQkJLyogSW5zaWRlIGFuIGVzY2FwZSBzZXF1 ZW5jZSAqLworI2RlZmluZSBFU19HT1RDU0kgMwkJCS8qIEluc2lkZSBhIGNvbnRyb2wgc2VxdWVu Y2UgKi8KKyNkZWZpbmUgRVNfU1RSSU5HIDQJCQkvKiBJbnNpZGUgRENTLE9TQyxQTSwgb3IgQVBD IHN0cmluZyAqLworI2RlZmluZSBFU19URVJNSU4gNQkJCS8qIDFzdCBjaGFyIG9mIHN0cmluZyB0 ZXJtaW5hdG9yICovCisKKy8qCisgIEFOU0kgZXNjYXBlIHNlcXVlbmNlIGhhbmRsaW5nLiAgT25s eSB0aGUgNy1iaXQgZm9ybSBpcyB0cmVhdGVkLCBiZWNhdXNlCisgIHRyYW5zbGF0aW9uIGlzIG5v dCBhIHByb2JsZW0gaW4gdGhlIDgtYml0IGVudmlyb25tZW50LCBpbiB3aGljaCBhbGwgR0wKKyAg Y2hhcmFjdGVycyBhcmUgQVNDSUkgYW5kIG5vIHRyYW5zbGF0aW9uIHRha2VzIHBsYWNlLiAgU28g d2UgZG9uJ3QgY2hlY2sKKyAgZm9yIHRoZSA4LWJpdCBzaW5nbGUtY2hhcmFjdGVyIHZlcnNpb25z IG9mIENTSSwgRENTLCBPU0MsIEFQQywgb3IgU1QuCisgIEhlcmUgaXMgdGhlIEFOU0kgc2VxdWVu Y2UgcmVjb2duaXplciBzdGF0ZSB0YWJsZSwgZm9sbG93ZWQgYnkgdGhlIGNvZGUKKyAgdGhhdCBp bXBsZW1lbnRzIGl0LgorCisgIERlZmluaXRpb25zOgorICAgIENBTiA9IENhbmNlbCAgICAgICAg ICAgICAgICAgICAgICAgMDEvMDggICAgICAgICBDdHJsLVgKKyAgICBTVUIgPSBTdWJzdGl0dXRl ICAgICAgICAgICAgICAgICAgIDAxLzEwICAgICAgICAgQ3RybC1aCisgICAgRENTID0gRGV2aWNl IENvbnRyb2wgU2VxdWVuY2UgICAgICAwMS8xMSAwNS8wMCAgIEVTQyBQCisgICAgQ1NJID0gQ29u dHJvbCBTZXF1ZW5jZSBJbnRyb2R1Y2VyICAwMS8xMSAwNS8xMSAgIEVTQyBbCisgICAgU1QgID0g U3RyaW5nIFRlcm1pbmF0b3IgICAgICAgICAgICAwMS8xMSAwNS8xMiAgIEVTQyBcCisgICAgT1ND ID0gT3BlcmF0aW5nIFN5c3RlbSBDb21tYW5kICAgICAwMS8xMSAwNS8xMyAgIEVTQyBdCisgICAg UE0gID0gUHJpdmFjeSBNZXNzYWdlICAgICAgICAgICAgICAwMS8xMSAwNS8xNCAgIEVTQyBeCisg ICAgQVBDID0gQXBwbGljYXRpb24gUHJvZ3JhbSBDb21tYW5kICAwMS8xMSAwNS8xNSAgIEVTQyBf CisKKyAgQU5TSSBlc2NhcGUgc2VxdWVuY2UgcmVjb2duaXplcjoKKworICAgIFN0YXRlICAgIElu cHV0ICBOZXcgU3RhdGUgIDsgQ29tbWVudGFyeQorCisgICAgTk9STUFMICAgKHN0YXJ0KSAgICAg ICAgICAgOyBTdGFydCBpbiBOT1JNQUwgc3RhdGUKKworICAgIChhbnkpICAgIENBTiAgICBOT1JN QUwgICAgIDsgXlggY2FuY2VscworICAgIChhbnkpICAgIFNVQiAgICBOT1JNQUwgICAgIDsgXlog Y2FuY2VscworCisgICAgTk9STUFMICAgRVNDICAgIEdPVEVTQyAgICAgOyBCZWdpbiBlc2NhcGUg c2VxdWVuY2UKKyAgICBOT1JNQUwgICBvdGhlciAgICAgICAgICAgICA7IE5PUk1BTCBjb250cm9s IG9yIGdyYXBoaWMgY2hhcmFjdGVyCisKKyAgICBHT1RFU0MgICBFU0MgICAgICAgICAgICAgICA7 IFN0YXJ0IGFnYWluCisgICAgR09URVNDICAgWyAgICAgIEdPVENTSSAgICAgOyBDU0kKKyAgICBH T1RFU0MgICBQICAgICAgU1RSSU5HICAgICA7IERDUyBpbnRyb2R1Y2VyLCBjb25zdW1lIHRocm91 Z2ggU1QKKyAgICBHT1RFU0MgICBdICAgICAgU1RSSU5HICAgICA7IE9TQyBpbnRyb2R1Y2VyLCBj b25zdW1lIHRocm91Z2ggU1QKKyAgICBHT1RFU0MgICBeICAgICAgU1RSSU5HICAgICA7IFBNICBp bnRyb2R1Y2VyLCBjb25zdW1lIHRocm91Z2ggU1QKKyAgICBHT1RFU0MgICBfICAgICAgU1RSSU5H ICAgICA7IEFQQyBpbnRyb2R1Y2VyLCBjb25zdW1lIHRocm91Z2ggU1QKKyAgICBHT1RFU0MgICAw Li5+ICAgTk9STUFMICAgICA7IDAzLzAwIHRocm91Z2ggMTcvMTQgPSBGaW5hbCBjaGFyYWN0ZXIK KyAgICBHT1RFU0MgICBvdGhlciAgRVNDU0VRICAgICA7IEludGVybWVkaWF0ZSBvciBpZ25vcmVk IGNvbnRyb2wgY2hhcmFjdGVyCisKKyAgICBFU0NTRVEgICBFU0MgICAgR09URVNDICAgICA7IFN0 YXJ0IGFnYWluCisgICAgRVNDU0VRICAgMC4ufiAgIE5PUk1BTCAgICAgOyAwMy8wMCB0aHJvdWdo IDE3LzE0ID0gRmluYWwgY2hhcmFjdGVyCisgICAgRVNDU0VRICAgb3RoZXIgICAgICAgICAgICAg OyBJbnRlcm1lZGlhdGUgb3IgaWdub3JlZCBjb250cm9sIGNoYXJhY3RlcgorCisgICAgR09UQ1NJ ICAgRVNDICAgIEdPVEVTQyAgICAgOyBTdGFydCBhZ2FpbgorICAgIEdPVENTSSAgIEAuLn4gICBO T1JNQUwgICAgIDsgMDQvMDAgdGhyb3VnaCAxNy8xNCA9IEZpbmFsIGNoYXJhY3RlcgorICAgIEdP VENTSSAgIG90aGVyICAgICAgICAgICAgIDsgSW50ZXJtZWRpYXRlIGNoYXIgb3IgaWdub3JlZCBj b250cm9sIGNoYXIKKworICAgIFNUUklORyAgIEVTQyAgICBURVJNSU4gICAgIDsgTWF5YmUgaGF2 ZSBTVAorICAgIFNUUklORyAgIG90aGVyICAgICAgICAgICAgIDsgQ29uc3VtZSBhbGwgZWxzZQor CisgICAgVEVSTUlOICAgXCAgICAgIE5PUk1BTCAgICAgOyBFbmQgb2Ygc3RyaW5nCisgICAgVEVS TUlOICAgb3RoZXIgIFNUUklORyAgICAgOyBTdGlsbCBpbiBzdHJpbmcKKyovCisvKgorICBjaGth ZXMoKSAtLSBDaGVjayBBTlNJIEVzY2FwZSBTZXF1ZW5jZS4KKyAgQ2FsbCB3aXRoIEVBQ0ggY2hh cmFjdGVyIGluIGlucHV0IHN0cmVhbS4KKyAgU2V0cyBnbG9iYWwgaW5lc2MgdmFyaWFibGUgYWNj b3JkaW5nIHRvIGVzY2FwZSBzZXF1ZW5jZSBzdGF0ZS4KKyAgUmV0dXJucyAwIG5vcm1hbGx5LCAx IGlmIGFuIEFQQyBzZXF1ZW5jZSBpcyB0byBiZSBleGVjdXRlZC4KKyovCitpbnQKKyNpZmRlZiBD S19BTlNJQworY2hrYWVzKGNoYXIgYykKKyNlbHNlCitjaGthZXMoYykgY2hhciBjOworI2VuZGlm IC8qIENLX0FOU0lDICovCisvKiBjaGthZXMgKi8geworCisgICAgb2xkZXNjID0gaW5lc2M7CQkJ LyogUmVtZW1iZXIgcHJldmlvdXMgc3RhdGUgKi8KKyAgICBpZiAoYyA9PSBDQU4gfHwgYyA9PSBT VUIpCQkvKiBDQU4gYW5kIFNVQiBjYW5jZWwgYW55IHNlcXVlbmNlICovCisgICAgICBpbmVzYyA9 IEVTX05PUk1BTDsKKyAgICBlbHNlCQkJCS8qIE90aGVyd2lzZSAqLworICAgICAgc3dpdGNoIChp bmVzYykgewkJCS8qIGVudGVyIHN0YXRlIHN3aXRjaGVyICovCisKKwljYXNlIEVTX05PUk1BTDoJ CQkvKiBOT1JNQUwgc3RhdGUgKi8KKwkgIGlmIChjID09IEVTQykJCQkvKiBHb3QgYW4gRVNDICov CisJICAgIGluZXNjID0gRVNfR09URVNDOwkJLyogQ2hhbmdlIHN0YXRlIHRvIEdPVEVTQyAqLwor CSAgYnJlYWs7CQkJLyogT3RoZXJ3aXNlIHN0YXkgaW4gTk9STUFMIHN0YXRlICovCisKKwljYXNl IEVTX0dPVEVTQzoJCQkvKiBHT1RFU0Mgc3RhdGUgKi8KKwkgIGlmIChjID09ICdbJykJCQkvKiBM ZWZ0IGJyYWNrZXQgYWZ0ZXIgRVNDIGlzIENTSSAqLworCSAgICBpbmVzYyA9IEVTX0dPVENTSTsJ CS8qIENoYW5nZSB0byBHT1RDU0kgc3RhdGUgKi8KKwkgIGVsc2UgaWYgKGMgPT0gJ1AnIHx8IChj ID4gMDEzNCAmJiBjIDwgMDE0MCkpIHsgLyogUCwgWywgXiwgb3IgXyAqLworCSAgICAgIGluZXNj ID0gRVNfU1RSSU5HOwkvKiBTd2l0Y2ggdG8gU1RSSU5HLWFic29ycHRpb24gc3RhdGUgKi8KKyNp ZmRlZiBDS19BUEMKKwkgICAgICBpZiAoYyA9PSAnXycgJiYgcGlkID09IDAgJiYgLyogQVBDIGhh bmRsZWQgaW4gY2hpbGQgb25seSAqLworCQkgIChhcGNzdGF0dXMgJiBBUENfT04pKSB7IC8qIGFu ZCBvbmx5IGlmIG5vdCBkaXNhYmxlZC4gKi8KKwkJICBkZWJ1ZyhGMTAwLCJDT05ORUNUIEFQQyBi ZWdpbiIsIiIsMCk7CisJCSAgYXBjYWN0aXZlID0gQVBDX1JFTU9URTsgLyogU2V0IEFQQy1BY3Rp dmUgZmxhZyAqLworCQkgIGFwY2xlbmd0aCA9IDA7CS8qIGFuZCByZXNldCBBUEMgYnVmZmVyIHBv aW50ZXIgKi8KKwkgICAgICB9CisjZW5kaWYgLyogQ0tfQVBDICovCisJICB9IGVsc2UgaWYgKGMg PiAwNTcgJiYgYyA8IDAxNzcpIC8qIEZpbmFsIGNoYXJhY3RlciAnMCcgdGhydSAnficgKi8KKwkg ICAgaW5lc2MgPSBFU19OT1JNQUw7CQkvKiBCYWNrIHRvIG5vcm1hbCAqLworCSAgZWxzZSBpZiAo YyAhPSBFU0MpCQkvKiBFU0MgaW4gYW4gZXNjYXBlIHNlcXVlbmNlLi4uICovCisJICAgIGluZXNj ID0gRVNfRVNDU0VROwkJLyogc3RhcnRzIGEgbmV3IGVzY2FwZSBzZXF1ZW5jZSAqLworCSAgYnJl YWs7CQkJLyogSW50ZXJtZWRpYXRlIG9yIGlnbm9yZWQgY3RybCBjaGFyICovCisKKwljYXNlIEVT X0VTQ1NFUToJCQkvKiBFU0NTRVEgLS0gaW4gYW4gZXNjYXBlIHNlcXVlbmNlICovCisJICBpZiAo YyA+IDA1NyAmJiBjIDwgMDE3NykJLyogRmluYWwgY2hhcmFjdGVyICcwJyB0aHJ1ICd+JyAqLwor CSAgICBpbmVzYyA9IEVTX05PUk1BTDsJCS8qIFJldHVybiB0byBOT1JNQUwgc3RhdGUuICovCisJ ICBlbHNlIGlmIChjID09IEVTQykJCS8qIEVTQyAuLi4gKi8KKwkgICAgaW5lc2MgPSBFU19HT1RF U0M7CQkvKiBzdGFydHMgYSBuZXcgZXNjYXBlIHNlcXVlbmNlICovCisJICBicmVhazsJCQkvKiBJ bnRlcm1lZGlhdGUgb3IgaWdub3JlZCBjdHJsIGNoYXIgKi8KKworCWNhc2UgRVNfR09UQ1NJOgkJ CS8qIEdPVENTSSAtLSBJbiBhIGNvbnRyb2wgc2VxdWVuY2UgKi8KKwkgIGlmIChjID4gMDc3ICYm IGMgPCAwMTc3KQkvKiBGaW5hbCBjaGFyYWN0ZXIgJ0AnIHRocnUgJ34nICovCisJICAgIGluZXNj ID0gRVNfTk9STUFMOwkJLyogUmV0dXJuIHRvIE5PUk1BTC4gKi8KKwkgIGVsc2UgaWYgKGMgPT0g RVNDKQkJLyogRVNDIC4uLiAqLworCSAgICBpbmVzYyA9IEVTX0dPVEVTQzsJCS8qIHN0YXJ0cyBv dmVyLiAqLworCSAgYnJlYWs7CQkJLyogSW50ZXJtZWRpYXRlIG9yIGlnbm9yZWQgY3RybCBjaGFy ICovCisKKwljYXNlIEVTX1NUUklORzoJCQkvKiBJbnNpZGUgYSBzdHJpbmcgKi8KKwkgIGlmIChj ID09IEVTQykJCQkvKiBFU0MgbWF5IGJlIDFzdCBjaGFyIG9mIHRlcm1pbmF0b3IgKi8KKwkgICAg aW5lc2MgPSBFU19URVJNSU47CQkvKiBHbyBzZWUuICovCisjaWZkZWYgQ0tfQVBDCisJICBlbHNl IGlmIChhcGNhY3RpdmUgJiYgKGFwY2xlbmd0aCA8IGFwY2J1ZmxlbikpIC8qIElmIGluIEFQQywg Ki8KKwkgICAgYXBjYnVmW2FwY2xlbmd0aCsrXSA9IGM7CS8qIGRlcG9zaXQgdGhpcyBjaGFyYWN0 ZXIuICovCisJICBlbHNlIHsJCQkvKiBCdWZmZXIgb3ZlcnJ1biAqLworCSAgICAgIGFwY2FjdGl2 ZSA9IDA7CQkvKiBEaXNjYXJkIHdoYXQgd2UgZ290ICovCisJICAgICAgYXBjbGVuZ3RoID0gMDsJ CS8qIGFuZCBnbyBiYWNrIHRvIG5vcm1hbCAqLworCSAgICAgIGFwY2J1ZlswXSA9IDA7CQkvKiBO b3QgcHJldHR5LCBidXQgd2hhdCBlbHNlICovCisJICAgICAgaW5lc2MgPSBFU19OT1JNQUw7CS8q IGNhbiB3ZSBkbz8gIChTVCBtaWdodCBub3QgY29tZSkgKi8KKwkgIH0KKyNlbmRpZiAvKiBDS19B UEMgKi8KKwkgIGJyZWFrOwkJCS8qIEFic29yYiBhbGwgb3RoZXIgY2hhcmFjdGVycy4gKi8KKwor CWNhc2UgRVNfVEVSTUlOOgkJCS8qIE1heSBoYXZlIGEgc3RyaW5nIHRlcm1pbmF0b3IgKi8KKwkg IGlmIChjID09ICdcXCcpIHsJCS8qIHdoaWNoIG11c3QgYmUgYmFja3NsYXNoICovCisJICAgICAg aW5lc2MgPSBFU19OT1JNQUw7CS8qIElmIHNvLCBiYWNrIHRvIE5PUk1BTCAqLworI2lmZGVmIENL X0FQQworCSAgICAgIGlmIChhcGNhY3RpdmUpIHsJCS8qIElmIGl0IHdhcyBhbiBBUEMgc3RyaW5n LCAqLworCQkgIGRlYnVnKEYxMDEsIkNPTk5FQ1QgQVBDIHRlcm1pbmF0ZWQiLCIiLGMpOworCQkg IGFwY2J1ZlthcGNsZW5ndGhdID0gTlVMOyAvKiB0ZXJtaW5hdGUgaXQgYW5kIHRoZW4gLi4uICov CisJCSAgcmV0dXJuKDEpOworCSAgICAgIH0KKyNlbmRpZiAvKiBDS19BUEMgKi8KKwkgIH0gZWxz ZSB7CQkJLyogT3RoZXJ3aXNlICovCisJICAgICAgaW5lc2MgPSBFU19TVFJJTkc7CS8qIEJhY2sg dG8gc3RyaW5nIGFic29ycHRpb24uICovCisjaWZkZWYgQ0tfQVBDCisJICAgICAgaWYgKGFwY2Fj dGl2ZSAmJiAoYXBjbGVuZ3RoKzEgPCBhcGNidWZsZW4pKSB7IC8qIEluIEFQQyBzdHJpbmcgKi8K KwkJICBhcGNidWZbYXBjbGVuZ3RoKytdID0gRVNDOyAvKiBkZXBvc2l0IHRoZSBFc2MgY2hhcmFj dGVyICovCisJCSAgYXBjYnVmW2FwY2xlbmd0aCsrXSA9IGM7ICAgLyogYW5kIHRoaXMgY2hhcmFj dGVyIHRvbyAqLworCSAgICAgIH0KKyNlbmRpZiAvKiBDS19BUEMgKi8KKwkgIH0KKyAgICAgIH0K KyAgICByZXR1cm4oMCk7Cit9CisjZW5kaWYgLyogTk9FU0NTRVEgKi8KKworLyogQ29ubmVjdCBz dGF0ZSBwYXJlbnQvY2hpbGQgY29tbXVuaWNhdGlvbiBzaWduYWwgaGFuZGxlcnMgKi8KKworLyog Um91dGluZXMgdXNlZCBieSB0aGUgY2hpbGQgcHJvY2VzcyAqLworCitzdGF0aWMgaW50CitwaXBl bXNnKG4pIGludCBuOyB7CQkJLyogU2VuZCBtZXNzYWdlIElEIHRvIHBhcmVudCAqLworICAgIGlu dCBjb2RlID0gbiAmIDI1NTsKKyAgICByZXR1cm4od3JpdGUoeHBpcGVbMV0sICZjb2RlLCBzaXpl b2YoY29kZSkpKTsKK30KKworLyogRW52aXJvbm1lbnQgcG9pbnRlciBmb3IgQ0tfRk9SS19TSUcg c2lnbmFsIGhhbmRsaW5nIGluIGNoaWxkLi4uICovCisKKyNpZmRlZiBDS19QT1NJWF9TSUcKK3N0 YXRpYyBzaWdqbXBfYnVmIHNpZ19lbnY7CisjZWxzZQorc3RhdGljIGptcF9idWYgc2lnX2VudjsK KyNlbmRpZiAvKiBDS19QT1NJWF9TSUcgKi8KKworc3RhdGljIFNJR1RZUAkJCQkvKiBDS19GT1JL X1NJRyBoYW5kbGluZyBpbiBjaGlsZCAuLi4gKi8KK2ZvcmtpbnQoZm9vKSBpbnQgZm9vOyB7Cisg ICAgLyogSXQgaXMgaW1wb3J0YW50IHRvIGRpc2FibGUgQ0tfRk9SS19TSUcgYmVmb3JlIGxvbmdq bXAgKi8KKyAgICBzaWduYWwoQ0tfRk9SS19TSUcsIFNJR19JR04pOwkvKiBTZXQgdG8gaWdub3Jl IENLX0ZPUktfU0lHICovCisgICAgZGVidWcoRjEwMCwiQ09OTkVDVCBmb3JraW50IC0gQ0tfRk9S S19TSUciLCAiIiwgMCk7CisgICAgLyogRm9yY2UgcmV0dXJuIGZyb20gY2tfc25kbXNnKCkgKi8K KyAgICBja2xvbmdqbXAoc2lnX2VudiwgMSk7CisgICAgLyogTk9UUkVBQ0hFRCAqLworfQorCitz dGF0aWMgVk9JRAorY2tfc25kbXNnKCkgewkJCQkvKiBFeGVjdXRlZCBieSBjaGlsZCBvbmx5IC4u LiAqLworICAgIGRlYnVnKEYxMDAsIkNPTk5FQ1QgY2tfc25kbXNnLCBhY3RpdmUiLCAiIiwgYWN0 aXZlKTsKKyAgICBpZiAoCisjaWZkZWYgQ0tfUE9TSVhfU0lHCisJc2lnc2V0am1wKHNpZ19lbnYs MSkKKyNlbHNlCisJc2V0am1wKHNpZ19lbnYpCisjZW5kaWYgLyogQ0tfUE9TSVhfU0lHICovCisJ PT0gMCkgeworCWRlYnVnKEYxMDAsIkNPTk5FQ1QgY2tfc25kbXNnIHNpZ25hbGluZyBwYXJlbnQi LCIiLDApOworICAgICAgICBzaWduYWwoQ0tfRk9SS19TSUcsIGZvcmtpbnQpOwkvKiBTZXQgdXAg c2lnbmFsIGhhbmRsZXIgKi8KKyAgICAgICAga2lsbChwYXJlbnRfaWQsIENLX0ZPUktfU0lHKTsJ LyogS2ljayB0aGUgcGFyZW50ICovCisJZGVidWcoRjEwMCwiY2tfc25kbXNnIHBhdXNpbmciLCIi LDApOworICAgICAgICBmb3IgKDs7KSBwYXVzZSgpOwkJLyogV2FpdCBmb3IgQ0tfRk9SS19TSUcg b3IgU0lHS0lMTCAqLworCS8qIE5PVFJFQUNIRUQgKi8KKyAgICB9CisgICAgLyogV2UgY29tZSBo ZXJlIGZyb20gZm9ya2ludCgpIHZpYSBbc2lnXWNrbG9uZ2ptcChzaWdfZW52LDEpICovCisgICAg ZGVidWcoRjEwMCwiQ09OTkVDVCBja19zbmRtc2cgaXMgcGFyZW50IC0gcmV0dXJuaW5nIiwgIiIs IDApOworfQorCisvKiBSb3V0aW5lcyB1c2VkIGJ5IHRoZSBwYXJlbnQgcHJvY2VzcyAqLworCisj aWZkZWYgQ0tfUE9TSVhfU0lHCQkgLyogRW52aXJvbm1lbnQgcG9pbnRlciBmb3IgQ09OTkVDVCBl cnJvcnMgKi8KK3N0YXRpYyBzaWdqbXBfYnVmIGNvbl9lbnY7CisjZWxzZQorc3RhdGljIGptcF9i dWYgY29uX2VudjsKKyNlbmRpZiAvKiBDS19QT1NJWF9TSUcgKi8KKy8qCisgIHBpcGVpbnQoKSBo YW5kbGVzIENLX0ZPUktfU0lHIHNpZ25hbHMgZnJvbSB0aGUgbG93ZXIgKHBvcnQpIGZvcmsuCisg IEl0IHJlYWRzIGEgZnVuY3Rpb24gY29kZSBmcm9tIHRoZSBwaXBlIHRoYXQgY29ubmVjdHMgdGhl IHR3byBmb3JrcywKKyAgdGhlbiByZWFkcyBhZGRpdGlvbmFsIGRhdGEgZnJvbSB0aGUgcGlwZSwg dGhlbiBoYW5kbGVzIGl0LgorKi8KK3N0YXRpYyBTSUdUWVAKK3BpcGVpbnQoYXJnKSBpbnQgYXJn OyB7CQkJLyogRHVtbXkgYXJndW1lbnQgKi8KKyAgICBpbnQgY29kZSwgY3gsIHgsIGkgLyogLCBu ICovIDsKKworI2lmbmRlZiBOT0NDVFJBUAorICAgIGV4dGVybiBja2ptcGJ1ZiBjbWpidWY7Cisj ZW5kaWYgLyogTk9DQ1RSQVAgKi8KKyAgICAvKgorICAgICAgSU1QT1JUQU5UOiBBdCB0aGlzIHBv aW50LCB0aGUgY2hpbGQgZm9yayBpcyB3YWl0aW5nIGZvciBDS19GT1JLX1NJRworICAgICAgKGV2 ZW50dWFsbHkgZm9yIFNJR0tJTEwpIGluc2lkZSBvZiBja19zbmRtc2coKS4gIFNvIHdlIGNhbid0 IGdldCBhbnkKKyAgICAgIHN1YnNlcXVlbnQgQ0tfRk9SS19TSUcgZnJvbSBjaGlsZCBiZWZvcmUg d2Ugc2VuZCBpdCBDS19GT1JLX1NJRy4KKyAgICAqLworICAgIHNpZ25hbChDS19GT1JLX1NJRywg U0lHX0lHTik7CS8qIElnbm9yZSBDS19GT1JLX1NJRyBub3cgKi8KKyAgICBkZWJ1ZyhGMTAxLCJD T05ORUNUIHBpcGVpbnQgYXJnIiwiIixhcmcpOworCisgICAgcmVhZCh4cGlwZVswXSwgJmNvZGUs IHNpemVvZihjb2RlKSk7IC8qIEdldCBmdW5jdGlvbiBjb2RlIGZyb20gcGlwZSAqLworICAgIGRl YnVnKEYxMDEsIkNPTk5FQ1QgcGlwZWludCBjb2RlIiwiIixjb2RlKTsKKyAgICBjeCA9IGNvZGUg JiAyNTU7CQkJLyogOC1iaXQgdmVyc2lvbiBvZiBmdW5jdGlvbiBjb2RlICovCisKKyNpZm5kZWYg Tk9DQ1RSQVAKKyNpZm5kZWYgTk9JQ1AKKyNkZWZpbmUgVVNFQ0NKTVBCVUYKKyNlbmRpZiAvKiBO T0lDUCAqLworI2VuZGlmIC8qIE5PQ0NUUkFQICovCisvKgorICBSZWFkIGluZm8gcGFzc2VkIGJh Y2sgdXAgdG8gdXMgYnkgdGhlIGxvd2VyIGZvcmssIGRlcGVuZGluZyBvbiB0aGUgZnVuY3Rpb24K KyAgcmVxdWVzdGVkLiAgVGhlIHNhbWUgbnVtYmVyIG9mIGl0ZW1zIG11c3QgYmUgcmVhZCBmcm9t IHRoZSBwaXBlIGluIHRoZSBzYW1lCisgIG9yZGVyIGFzIHRoZSBsb3dlciBmb3JrIHB1dCB0aGVt IHRoZXJlLiAgVHJ5aW5nIHRvIHJlYWQgc29tZXRoaW5nIHRoYXQncyBub3QKKyAgdGhlcmUgbWFr ZXMgdGhlIHByb2dyYW0gaGFuZyB1bmludGVycnVwdGlibHkuICBQYXkgY2xvc2UgYXR0ZW50aW9u IC0tIG5vdGljZQorICBob3cgd2UgZmFsbCB0aHJvdWdoIHNvbWUgb2YgdGhlIGNhc2VzIHJhdGhl ciB0aGFuIGJyZWFrOyB0aGF0J3MgZGVsaWJlcmF0ZS4KKyovCisgICAgc3dpdGNoIChjeCkgewor I2lmZGVmIENLX1RSSUdHRVIKKyAgICAgIGNhc2UgQ0VWX1RSSToJCQkvKiBUcmlnZ2VyIHN0cmlu ZyAqLworCWRlYnVnKEYxMDAsIkNPTk5FQ1QgdHJpZ2dlciIsIiIsMCk7CisJcmVhZCh4cGlwZVsw XSwgKGNoYXIgKikmaSwgc2l6ZW9mKGkpKTsgLyogVHJpZ2dlciBpbmRleCAqLworCWRlYnVnKEYx MDEsIkNPTk5FQ1QgdHJpZ2dlciBpbmRleCIsIiIsaSk7CisJbWFrZXN0cigmdHJpZ2dlcnZhbCx0 dF90cmlnZ2VyW2ldKTsgLyogTWFrZSBhIGNvcHkgb2YgdGhlIHRyaWdnZXIgKi8KKwlkZWJ1ZyhG MTEwLCJDT05ORUNUIHRyaWdnZXJ2YWwiLHRyaWdnZXJ2YWwsMCk7CisJcmVhZCh4cGlwZVswXSwg KGNoYXIgKikmaWJjLCBzaXplb2YoaWJjKSk7IC8qIENvcHkgY2hpbGQncyAqLworCWRlYnVnKEYx MDEsIkNPTk5FQ1QgdHJpZ2dlciBpYmMgKHVwcGVyKSIsIiIsaWJjKTsgLyogaW5wdXQgYnVmZmVy LiAqLworCWlmIChpYmMgPiAwKSB7CisJICAgIHJlYWQoeHBpcGVbMF0sIChjaGFyICopJmlicCwg c2l6ZW9mKGlicCkpOworCSAgICByZWFkKHhwaXBlWzBdLCBpYnAsIGliYyk7CisJfQorCS8qIEZh bGwgdGhydS4uLiAqLworCisjZW5kaWYgLyogQ0tfVFJJR0dFUiAqLworCisgICAgICBjYXNlIENF Vl9IVVA6CisvKgorICBUaGUgQ0VWX0hVUCBjYXNlIGlzIGV4ZWN1dGVkIHdoZW4gdGhlIG90aGVy IHNpZGUgaGFzIGh1bmcgdXAgb24gdXMuCisgIEluIHNvbWUgY2FzZXMsIHRoaXMgaGFwcGVucyBi ZWZvcmUgd2UgaGF2ZSBoYWQgYSBjaGFuY2UgdG8gZXhlY3V0ZSB0aGUKKyAgc2V0am1wKGNvbl9l bnYsMSkgY2FsbCwgYW5kIGluIHRoYXQgY2FzZSB3ZSdkIGJldHRlciBub3QgdGFrZSB0aGUgbG9u Z2ptcCEKKyAgQSBnb29kIGV4YW1wbGUgaXMgd2hlbiB5b3UgVEVMTkVUIHRvIHBvcnQgMTMgb24g dGhlIGxvY2FsIGhvc3Q7IGl0IHByaW50cworICBpdHMgYXNjdGltZSgpIHN0cmluZyAoMjYgY2hh cnMpIGFuZCB0aGVuIGNsb3NlcyB0aGUgY29ubmVjdGlvbi4KKyovCisjaWZkZWYgQ0tfVFJJR0dF UgorCWlmIChjeCA9PSBDRVZfVFJJKQorCSAgc2p2YWwgPSBDRVZfVFJJOwkJLyogU2V0IGdsb2Jh bCB2YXJpYWJsZS4gKi8KKwllbHNlCisjZW5kaWYgLyogQ0tfVFJJR0dFUiAqLworCSAgc2p2YWwg PSBDRVZfSFVQOworCWlmIChqYnNldCkgewkJCS8qIGptcF9idWYgaXMgaW5pdGlhbGl6ZWQgKi8K KwkgICAgY2tsb25nam1wKGNvbl9lbnYsc2p2YWwpOwkvKiBzbyBkbyB0aGUgcmlnaHQgdGhpbmcu ICovCisJfSBlbHNlIHsKKwkgICAgaW50IHggPSAwOworI2lmZGVmIFVTRUNDSk1QQlVGCisJICAg IC8qIGptcF9idWYgbm90IGluaXQnZCB5ZXQgYSBjbG9zZSBhcHByb3hpbWF0aW9uLi4uICovCisj aWZkZWYgQ0tfVFJJR0dFUgorCSAgICBpZiAoY3ggPT0gQ0VWX0hVUCkKKyNlbmRpZiAvKiBDS19U UklHR0VSICovCisJICAgICAgdHRjbG9zKDApOwkJLyogQ2xvc2Ugb3VyIGVuZCBvZiB0aGUgY29u bmVjdGlvbiAqLworCSAgICBpZiAocGlkKSB7CisJCWRlYnVnKEYxMDEsIkNPTk5FQ1QgdHJpZ2dl ciBraWxsaW5nIHBpZCIsIiIscGlkKTsKKyNpZmRlZiBCRU9TT1JCRUJPWAorCQl7CisJCSAgICBs b25nIHJldF92YWw7CisJCSAgICB4ID0ga2lsbChwaWQsU0lHS0lMTFRIUik7CS8qIEtpbGwgbG93 ZXIgZm9yayAqLworCQkgICAgd2FpdF9mb3JfdGhyZWFkIChwaWQsICZyZXRfdmFsKTsKKwkJfQor I2Vsc2UKKyNpZmRlZiBQbGFuOQorCQl4ID0ga2lsbChwaWQsIFNJR0tJTEwpOyAvKiAoc2hvdWxk IGFsd2F5cyB1c2UgdGhpcyByZWFsbHkpICovCisjZWxzZQorCQl4ID0ga2lsbChwaWQsOSk7CS8q IEtpbGwgbG93ZXIgZm9yayAoaGlzdG9yeSkgKi8KKyNlbmRpZiAvKiBQbGFuOSAqLworCQl3YWl0 KChXQUlUX1QgKikwKTsJLyogV2FpdCB0aWxsIGdvbmUuICovCisJCWlmICh4IDwgMCkgeworCQkg ICAgcHJpbnRmKCJFUlJPUjogRmFpbHVyZSB0byBraWxsIHBpZCAlbGQ6ICVzLCBlcnJubz0lZFxu IiwKKwkJCSAgIChsb25nKSBwaWQsIGNrX2VycnN0cigpLCBlcnJubyk7CisJCSAgICBkZWJ1ZyhG MTExLCJDT05ORUNUIGVycm9yIGtpbGxpbmcgc3RhbGUgcGlkIiwKKwkJCSAgY2tfZXJyc3RyKCks ZXJybm8pOworCQl9CisJCXBpZCA9IChQSURfVCkgMDsKKyNlbmRpZiAvKiBCRU9TT1JCRUJPWCAq LworCSAgICB9CisJICAgIGNvbnJlcygpOwkJCS8qIFJlc2V0IHRoZSBjb25zb2xlLiAqLworCSAg ICBpZiAoIXF1aWV0KSB7CisJCXByaW50ZigiXHJcbihCYWNrIGF0ICVzKVxyXG4iLAorCQkgICAg ICAgKm15aG9zdCA/IG15aG9zdCA6CisjaWZkZWYgVU5JWAorCQkgICAgICAgImxvY2FsIFVOSVgg c3lzdGVtIgorI2Vsc2UKKwkJICAgICAgICJsb2NhbCBzeXN0ZW0iCisjZW5kaWYgLyogVU5JWCAq LworCQkgICAgICAgKTsKKwkgICAgfQorCSAgICB3aGF0ID0gV19OT1RISU5HOwkJLyogU28gY29u c29sZSBtb2RlcyBhcmUgc2V0IHJpZ2h0LiAqLworCSAgICBwcmludGYoIlxyXG4iKTsJCS8qIHBy ZXZlbnQgcHJvbXB0LXN0b21waW5nICovCisJICAgIGNrbG9uZ2ptcChjbWpidWYsMCk7CS8qIERv IHdoYXQgdGhlIEN0cmwtQyBoYW5kbGVyIGRvZXMgKi8KKyNlbHNlCisJICAgIHByaW50ZigiXHJc bkxvbmdqdW1wIGZhaWx1cmUgLSBmYXRhbFxyXG4iKTsKKwkgICAgZG9leGl0KEdPT0RfRVhJVCwt MSk7CS8qIEJldHRlciB0aGFuIGR1bXBpbmcgY29yZS4uLiAqLworI2VuZGlmIC8qIFVTRUNDSk1Q QlVGICovCisJfQorI2lmZGVmIFVTRUNDSk1QQlVGCisjdW5kZWYgVVNFQ0NKTVBCVUYKKyNlbmRp ZiAvKiBVU0VDQ0pNUEJVRiAqLworCisgICAgICBjYXNlIENFVl9EVVA6CQkJLyogQ2hpbGQgc2Vu ZHMgZHVwbGV4IGNoYW5nZSAqLworCXJlYWQoeHBpcGVbMF0sIChjaGFyICopJmR1cGxleCwgc2l6 ZW9mKGR1cGxleCkpOworCWRlYnVnKEYxMDEsIkNPTk5FQ1QgcGlwZWludCBkdXBsZXgiLCIiLGR1 cGxleCk7CisJYnJlYWs7CisjaWZkZWYgVE5DT0RFCisgICAgICBjYXNlIENFVl9NRUJJTjoJCQkv KiBDaGlsZCBzZW5kcyBtZV9iaW5hcnkgY2hhbmdlICovCisJcmVhZCh4cGlwZVswXSwKKwkgICAg IChjaGFyICopJlRFTE9QVF9NRShURUxPUFRfQklOQVJZKSwKKwkgICAgIHNpemVvZihURUxPUFRf TUUoVEVMT1BUX0JJTkFSWSkpCisJICAgICApOworCWRlYnVnKEYxMDEsIkNPTk5FQ1QgcGlwZWlu dCBtZV9iaW5hcnkiLCIiLFRFTE9QVF9NRShURUxPUFRfQklOQVJZKSk7CisJYnJlYWs7CisgICAg ICBjYXNlIENFVl9VQklOOgkJCS8qIENoaWxkIHNlbmRzIHVfYmluYXJ5IGNoYW5nZSAqLworCXJl YWQoeHBpcGVbMF0sCisJICAgICAoY2hhciAqKSZURUxPUFRfVShURUxPUFRfQklOQVJZKSwKKwkg ICAgIHNpemVvZihURUxPUFRfVShURUxPUFRfQklOQVJZKSkKKwkgICAgICk7CisJZGVidWcoRjEw MSwiQ09OTkVDVCBwaXBlaW50IHVfYmluYXJ5IiwiIixURUxPUFRfVShURUxPUFRfQklOQVJZKSk7 CisJYnJlYWs7CisjZW5kaWYgLyogVE5DT0RFICovCisKKyNpZmRlZiBDS19BUEMKKyAgICAgIGNh c2UgQ0VWX0FVTDoJCQkvKiBBdXRvdXBsb2FkICovCisJanVzdG9uZSA9IDE7CisJZGVidWcoRjEw MCwiQ09OTkVDVCBhdXRvdXBsb2FkIGF0IHBhcmVudCIsIiIsMCk7CisjaWZkZWYgQ0tfQVVUT0RM CisgICAgICBjYXNlIENFVl9BREw6CQkJLyogQXV0b2Rvd25sb2FkICovCisJYXBjYWN0aXZlID0g QVBDX0xPQ0FMOworCWlmICghanVzdG9uZSkgZGVidWcoRjEwMCwiQ09OTkVDVCBhdXRvZG93bmxv YWQgYXQgcGFyZW50IiwiIiwwKTsKKwkvKiBDb3B5IGNoaWxkJ3MgS2VybWl0IHBhY2tldCBpZiBh bnkgKi8KKwlyZWFkKHhwaXBlWzBdLCAoY2hhciAqKSZ4LCBzaXplb2YoeCkpOworCWRlYnVnKEYx MDEsIkNPTk5FQ1QgdHJpZ2dlciBpYmMgKHVwcGVyKSIsIiIsaWJjKTsKKwlpZiAoeCA+IDApCisJ ICByZWFkKHhwaXBlWzBdLCAoY2hhciAqKWtzYnVmLCB4KzEpOworI2VuZGlmIC8qIENLX0FVVE9E TCAqLworICAgICAgY2FzZSBDRVZfQVBDOgkJCS8qIEFwcGxpY2F0aW9uIFByb2dyYW0gQ29tbWFu ZCAqLworCXJlYWQoeHBpcGVbMF0sIChjaGFyICopJmFwY2xlbmd0aCwgc2l6ZW9mKGFwY2xlbmd0 aCkpOworCXJlYWQoeHBpcGVbMF0sIGFwY2J1ZiwgYXBjbGVuZ3RoKzEpOyAvKiBJbmNsdWRlIHRy YWlsaW5nIHplcm8gYnl0ZSAqLworCWRlYnVnKEYxMTEsIkNPTk5FQ1QgQVBDIGF0IHBhcmVudCIs YXBjYnVmLGFwY2xlbmd0aCk7CisJcmVhZCh4cGlwZVswXSwgKGNoYXIgKikmaWJjLCBzaXplb2Yo aWJjKSk7IC8qIENvcHkgY2hpbGQncyAqLworCWlmIChpYmMgPiAwKSB7CQkJCSAgIC8qIGlucHV0 IGJ1ZmZlci4gKi8KKwkgICAgcmVhZCh4cGlwZVswXSwgKGNoYXIgKikmaWJwLCBzaXplb2YoaWJw KSk7CisJICAgIHJlYWQoeHBpcGVbMF0sIGlicCwgaWJjKTsKKwl9CisJb2JjID0gMDsgb2JwID0g b2J1ZjsgKm9idWYgPSBOVUw7IC8qIEJlY2F1c2UgcG9ydCBmb3JrIGZsdXNoZWQgKi8KKwlzanZh bCA9IENFVl9BUEM7CisJY2tsb25nam1wKGNvbl9lbnYsc2p2YWwpOworCS8qIE5PVFJFQUNIRUQg Ki8KKyNlbmRpZiAvKiBDS19BUEMgKi8KKworI2lmZGVmIFNVTlgyNQorICAgICAgY2FzZSBDRVZf UEFEOgkJCS8qIFguMjUgUEFEIHBhcmFtZXRlciBjaGFuZ2UgKi8KKwlkZWJ1ZyhGMTAwLCJDT05O RUNUIHBpcGVpbnQgUEFEIGNoYW5nZSIsIiIsMCk7CisJcmVhZCh4cGlwZVswXSxwYWRwYXJtcyxN QVhQQURQQVJNUyk7CisJc2p2YWwgPSBDRVZfUEFEOwkJLyogU2V0IGdsb2JhbCB2YXJpYWJsZS4g Ki8KKyNpZmRlZiBDT01NRU5UCQkJCS8qIFdlIG1pZ2h0IG5vdCBuZWVkIHRvIGRvIHRoaXMuLi4g Ki8KKwlja2xvbmdqbXAoY29uX2VudixzanZhbCk7CisJLyogTk9UUkVBQ0hFRCAqLworI2Vsc2Ug IC8qIENPTU1FTlQgKi8KKwlicmVhazsKKyNlbmRpZiAvKiBDT01NRU5UICovCisjZW5kaWYgLyog U1VOWDI1ICovCisgICAgfQorICAgIHNpZ25hbChDS19GT1JLX1NJRywgcGlwZWludCk7CS8qIFNl dCB1cCBzaWduYWwgaGFuZGxlciAqLworICAgIGtpbGwocGlkLCBDS19GT1JLX1NJRyk7CQkvKiBT aWduYWwgdGhlIHBvcnQgZm9yayAuLi4gKi8KK30KKworLyogIEMgSyBDIFAgVSBUIEMgIC0tICBD LUtlcm1pdCBDT05ORUNUIFB1dCBDaGFyYWN0ZXIgdG8gU2NyZWVuICAqLworLyoKKyAgT3V0cHV0 IGlzIGJ1ZmZlcmVkIHRvIGF2b2lkIHNsb3cgc2NyZWVuIHdyaXRlcyBvbiBmYXN0IGNvbm5lY3Rp b25zLgorICBOT1RFOiBUaGVzZSBjb3VsZCAoZWFzaWx5PykgYmVjb21lIG1hY3JvcyAuLi4KKyov CitzdGF0aWMgaW50Citja2NwdXRmKCkgewkJCQkvKiBEdW1wIHRoZSBvdXRwdXQgYnVmZmVyICov CisgICAgaW50IHggPSAwOworICAgIGlmIChvYmMgPiAwKQkJCS8qIElmIHdlIGhhdmUgYW55IGNo YXJhY3RlcnMsICovCisgICAgICB4ID0gY29ueG8ob2JjLG9idWYpOwkJLyogZHVtcCB0aGVtLCAq LworICAgIG9icCA9IG9idWY7CQkJCS8qIHJlc2V0IHRoZSBwb2ludGVyICovCisgICAgb2JjID0g MDsJCQkJLyogYW5kIHRoZSBjb3VudGVyLiAqLworICAgIHJldHVybih4KTsJCQkJLyogUmV0dXJu IGNvbnhvJ3MgcmV0dXJuIGNvZGUgKi8KK30KKworaW50Citja2NwdXRjKGMpIGludCBjOyB7Cisg ICAgaW50IHg7CisKKyAgICAqb2JwKysgPSBjICYgMHhmZjsJCQkvKiBEZXBvc2l0IHRoZSBjaGFy YWN0ZXIgKi8KKyAgICBvYmMrKzsJCQkJLyogQ291bnQgaXQgKi8KKyAgICBpZiAoaWJjID09IDAg fHwJCQkvKiBJZiBpbnB1dCBidWZmZXIgYWJvdXQgZW1wdHkgKi8KKwlvYmMgPT0gT0JVRkwpIHsJ CQkvKiBvciBvdXRwdXQgYnVmZmVyIGZ1bGwgKi8KKwlkZWJ1ZyhGMTAxLCJDT05ORUNUIENLQ1BV VEMgb2JjIiwiIixvYmMpOworCXggPSBjb254byhvYmMsb2J1Zik7CQkvKiBkdW1wIHRoZSBidWZm ZXIsICovCisJb2JwID0gb2J1ZjsJCQkvKiByZXNldCB0aGUgcG9pbnRlciAqLworCW9iYyA9IDA7 CQkJLyogYW5kIHRoZSBjb3VudGVyLiAqLworCXJldHVybih4KTsJCQkvKiBSZXR1cm4gY29ueG8n cyByZXR1cm4gY29kZSAqLworICAgIH0gZWxzZSByZXR1cm4oMCk7Cit9CisKKy8qICBDIEsgQyBH IEUgVCBDICAtLSAgQy1LZXJtaXQgQ09OTkVDVCBHZXQgQ2hhcmFjdGVyICAqLworLyoKKyAgQnVm ZmVyZWQgcmVhZCBmcm9tIGNvbW11bmljYXRpb24gZGV2aWNlLgorICBSZXR1cm5zIHRoZSBuZXh0 IGNoYXJhY3RlciwgcmVmaWxsaW5nIHRoZSBidWZmZXIgaWYgbmVjZXNzYXJ5LgorICBPbiBlcnJv ciwgcmV0dXJucyB0dGluYydzIHJldHVybiBjb2RlIChzZWUgdHRpbmMoKSBkZXNjcmlwdGlvbiku CisgIER1bW15IGFyZ3VtZW50IGZvciBjb21wYXRpYmxlIGNhbGxpbmcgY29udmVudGlvbnMgd2l0 aCB0dGluYygpLgorICBOT1RFOiBXZSBkb24ndCBoYXZlIGEgbWFjcm8gZm9yIHRoaXMgYmVjYXVz ZSB3ZSBoYXZlIHRvIHBhc3MKKyAgYSBwb2ludGVyIHRvIHRoaXMgZnVuY3Rpb24gYXMgYW4gYXJn dW1lbnQgdG8gdG5fZG9vcCgpLgorKi8KK2ludAorY2tjZ2V0YyhkdW1teSkgaW50IGR1bW15OyB7 CisgICAgaW50IGMsIG47CisjaWZkZWYgQ0tfU1NMCisgICAgZXh0ZXJuIGludCBzc2xfYWN0aXZl X2ZsYWcsIHRsc19hY3RpdmVfZmxhZzsKKyNlbmRpZiAvKiBDS19TU0wgKi8KKworI2lmZGVmIENL X0VOQ1JZUFRJT04KKyAgICAvKiBObyBidWZmZXJpbmcgZm9yIHBvc3NpYmx5IGVuY3J5cHRlZCBj b25uZWN0aW9ucyAqLworICAgIGlmIChuZXR3b3JrICYmIElTX1RFTE5FVCgpICYmIFRFTE9QVF9N RShURUxPUFRfQVVUSEVOVElDQVRJT04pKQorICAgICAgcmV0dXJuKHR0aW5jKDApKTsKKyNlbmRp ZiAvKiBDS19FTkNSWVBUSU9OICovCisjaWZkZWYgQ0tfU1NMCisgICAgaWYgKHNzbF9hY3RpdmVf ZmxhZyB8fCB0bHNfYWN0aXZlX2ZsYWcpCisgICAgICAgIHJldHVybih0dGluYygwKSk7CisjZW5k aWYgLyogQ0tfU1NMICovCisjaWZkZWYgQ09NTUVOVAorLyogdG9vIG11Y2ggKi8KKyAgICBkZWJ1 ZyhGMTAxLCJDT05ORUNUIENLQ0dFVEMgMSBpYmMiLCIiLGliYyk7IC8qIExvZyAqLworI2VuZGlm IC8qIENPTU1FTlQgKi8KKyAgICBpZiAoaWJjIDwgMSkgewkJCS8qIE5lZWQgdG8gcmVmaWxsIGJ1 ZmZlcj8gKi8KKwlpYmMgPSAwOwkJCS8qIFllcywgcmVzZXQgY291bnQgKi8KKwlpYnAgPSBpYnVm OwkJCS8qIGFuZCBidWZmZXIgcG9pbnRlciAqLworCS8qIGRlYnVnKEYxMDAsIkNPTk5FQ1QgQ0tD R0VUQyAxIGNhbGxpbmcgdHRpbmMoMCkiLCIiLDApOyAqLworI2lmZGVmIENPTU1FTlQKKy8qCisg IFRoaXMgY2hlY2sgaXMgbm90IHdvcnRoIHRoZSBvdmVyaGVhZC4gIFNjZW5hcmlvOiB0dGNoaygp IHJldHVybnMgMCwgc28gd2UKKyAgZmFsbCB0aHJvdWdoIHRvIHRoZSBibG9ja2luZyB0dGluYygp LiAgV2hpbGUgaW4gdHRpbmMoKSwgdGhlIGNvbm5lY3Rpb24gaXMKKyAgbG9zdC4gIEJ1dCB0aGUg cmVhZCgpIHRoYXQgdHRpbmMoKSBjYWxscyBkb2VzIG5vdCBub3RpY2UsIGFuZCBuZXZlciByZXR1 cm5zLgorICBUaGlzIGhhcHBlbnMgYXQgbGVhc3QgaW4gSFAtVVgsIGFuZCBjYW4gYmUgc2VlbiB3 aGVuIHdlIHR1cm4gb2ZmIHRoZSBtb2RlbS4KKyovCisJaWYgKCFuZXR3b3JrICYmIChjYXJyaWVy ICE9IENBUl9PRkYpKQorCSAgaWYgKChuID0gdHRjaGsoKSkgPCAwKQkvKiBNYWtlIHN1cmUgY29u bmVjdGlvbiBpcyBub3QgbG9zdCAqLworCSAgICByZXR1cm4obik7CisjZW5kaWYgLyogQ09NTUVO VCAqLworCWMgPSB0dGluYygwKTsJCQkvKiBSZWFkIG9uZSBjaGFyYWN0ZXIsIGJsb2NraW5nICov CisJLyogZGVidWcoRjEwMSwiQ09OTkVDVCBDS0NHRVRDIDEgdHRpbmMoMCkiLCIiLGMpOyAqLwor CWlmIChjIDwgMCkgewkJCS8qIElmIGVycm9yLCByZXR1cm4gZXJyb3IgY29kZSAqLworCSAgICBy ZXR1cm4oYyk7CisJfSBlbHNlIHsJCQkvKiBPdGhlcndpc2UsIGdvdCBvbmUgY2hhcmFjdGVyICov CisJICAgICppYnArKyA9IGM7CQkJLyogQWR2YW5jZSBidWZmZXIgcG9pbnRlciAqLworCSAgICBp YmMrKzsJCQkvKiBhbmQgY291bnQuICovCisJfQorCWlmICgobiA9IHR0Y2hrKCkpID4gMCkgewkv KiBBbnkgbW9yZSB3YWl0aW5nPyAqLworCSAgICBpZiAobiA+IChJQlVGTCAtIGliYykpCS8qIEdl dCB0aGVtIGFsbCBhdCBvbmNlLiAqLworCSAgICAgIG4gPSBJQlVGTCAtIGliYzsJCS8qIERvbid0 IG92ZXJmbG93IGJ1ZmZlciAqLworCSAgICBpZiAoKG4gPSB0dHhpbihuLChDSEFSICopaWJwKSkg PiAwKSB7CisjaWZkZWYgQ0tfRU5DUllQVElPTgorCQlpZiAoVEVMT1BUX1UoVEVMT1BUX0VOQ1JZ UFRJT04pKQorCQkgIGNrX3RuX2RlY3J5cHQoaWJwLG4pOworI2VuZGlmIC8qIENLX0VOQ1JZUFRJ T04gKi8KKwkJaWJjICs9IG47CQkJLyogQWR2YW5jZSBjb3VudGVyICovCisJICAgIH0KKwl9IGVs c2UgaWYgKG4gPCAwKSB7CQkvKiBFcnJvcj8gKi8KKwkgICAgcmV0dXJuKG4pOwkJCS8qIFJldHVy biB0aGUgZXJyb3IgY29kZSAqLworCX0KKwlkZWJ1ZyhGMTAxLCJDT05ORUNUIENLQ0dFVEMgMiBp YmMiLCIiLGliYyk7IC8qIExvZyBob3cgbWFueSAqLworCWlicCA9IGlidWY7CQkJLyogUG9pbnQg dG8gYmVnaW5uaW5nIG9mIGJ1ZmZlciAqLworICAgIH0KKyAgICBjID0gKmlicCsrICYgMHhmZjsJ CQkvKiBHZXQgbmV4dCBjaGFyYWN0ZXIgZnJvbSBidWZmZXIgKi8KKyAgICBpYmMtLTsJCQkJLyog UmVkdWNlIGJ1ZmZlciBjb3VudCAqLworICAgIHJldHVybihjKTsJCQkJLyogUmV0dXJuIHRoZSBj aGFyYWN0ZXIgKi8KK30KKworLyoKKyAgIEtleWJvYXJkIGhhbmRsaW5nLCBidWZmZXJlZCBmb3Ig c3BlZWQsIHdoaWNoIGlzIG5lZWRlZCB3aGVuIEMtS2VybWl0IGlzCisgICBpbiBDT05ORUNUIG1v ZGUgYmV0d2VlbiB0d28gb3RoZXIgY29tcHV0ZXJzIHRoYXQgYXJlIHRyYW5zZmVycmluZyBkYXRh LgorKi8KK3N0YXRpYyBjaGFyICprYnA7CQkJLyogS2V5Ym9hcmQgaW5wdXQgYnVmZmVyIHBvaW50 ZXIgKi8KK3N0YXRpYyBpbnQga2JjOwkJCQkvKiBLZXlib2FyZCBpbnB1dCBidWZmZXIgY291bnQg Ki8KKworI2lmZGVmIENLX1NNQUxMCQkJCS8qIEtleWJvYXJkIGlucHV0IGJ1ZmZlciBsZW5ndGgg Ki8KKyNkZWZpbmUgS0JVRkwgMzIJCQkvKiBTbWFsbCBmb3IgUERQLTExIFVOSVggKi8KKyNlbHNl CisjZGVmaW5lIEtCVUZMIDI1NwkJCS8qIFJlZ3VsYXIga2VybmVsIHNpemUgZm9yIG90aGVycyAq LworI2VuZGlmIC8qIENLX1NNQUxMICovCisKKyNpZmRlZiBEWU5BTUlDCitzdGF0aWMgY2hhciAq a2J1ZiA9IE5VTEw7CisjZWxzZQorc3RhdGljIGNoYXIga2J1ZltLQlVGTF07CisjZW5kaWYgLyog RFlOQU1JQyAqLworCisvKiBNYWNybyBmb3IgcmVhZGluZyBrZXlzdHJva2VzLiAqLworCisjZGVm aW5lIENPTkdLUygpICgoKC0ta2JjKT49MCkgPyAoKGludCkoKmticCsrKSAmIDAzNzcpIDoga2Jn ZXQoKSkKKworLyoKKyAgTm90ZSB0aGF0IHdlIGNhbGwgcmVhZCgpIGRpcmVjdGx5IGhlcmUsIG5v cm1hbGx5IGEgbm8tbm8sIGJ1dCBpbiB0aGlzIGNhc2UKKyAgd2Uga25vdyBpdCdzIFVOSVggYW5k IHdlJ3JlIG9ubHkgZG9pbmcgd2hhdCBjb25pbmMoMCkgd291bGQgaGF2ZSBkb25lLAorICBleGNl cHQgd2UncmUgcmVhZGluZyBhIGJsb2NrIG9mIGNoYXJhY3RlcnMgcmF0aGVyIHRoYW4ganVzdCBv bmUuICBUaGVyZSBpcywKKyAgYXQgcHJlc2VudCwgbm8gY29ueGluKCkgYW5hbG9nIHRvIHR0eGlu KCkgZm9yIGNodW5rIHJlYWRzLCBhbmQgaW5zdGl0dXRpbmcKKyAgb25lIHdvdWxkIG9ubHkgYWRk IGZ1bmN0aW9uLWNhbGwgb3ZlcmhlYWQgYXMgaXQgd291bGQgb25seSBiZSBhIHdyYXBwZXIgZm9y CisgIGEgcmVhZCgpIGNhbGwgYW55d2F5LgorKi8KKy8qCisgIEFub3RoZXIgbm90ZTogV2Ugc3Rp Y2sgaW4gdGhpcyByZWFkKCkgdGlsbCB0aGUgdXNlciB0eXBlcyBzb21ldGhpbmcuCisgIEJ1dCB0 aGUgb3RoZXIgKGxvd2VyKSBmb3JrIGlzIHJ1bm5pbmcgdG9vLCBhbmQgb24gVEVMTkVUIGNvbm5l Y3Rpb25zLAorICBpdCB3aWxsIHNpZ25hbCB1cyB0byBpbmRpY2F0ZSBlY2hvLWNoYW5nZSBuZWdv dGlhdGlvbnMsIGFuZCB0aGlzIGNhbgorICBpbnRlcnJ1cHQgdGhlIHJlYWQoKS4gIFNvbWUgVU5J WGVzIGF1dG9tYXRpY2FsbHkgcmVzdGFydCB0aGUgaW50ZXJydXB0ZWQKKyAgc3lzdGVtIGNhbGws IG90aGVycyByZXR1cm4gZnJvbSBpdCB3aXRoIGVycm5vID09IEVJTlRSLgorKi8KK3N0YXRpYyBp bnQJCQkJLyogS2V5Ym9hcmQgYnVmZmVyIGZpbGxlciAqLwora2JnZXQoKSB7CisjaWZkZWYgRUlO VFIKKyAgICBpbnQgdHJpZXMgPSAxMDsJCQkvKiBJZiByZWFkKCkgaXMgaW50ZXJydXB0ZWQsICov CisgICAgaW50IG9rID0gMDsKKyAgICB3aGlsZSAodHJpZXMtLSA+IDApIHsJCS8qIHRyeSBhIGZl dyB0aW1lcy4uLiAqLworI2VuZGlmIC8qIEVJTlRSICovCisJaWYgKChrYmMgPSBjb25jaGsoKSkg PCAxKQkvKiBIb3cgbWFueSBjaGFycyB3YWl0aW5nPyAqLworCSAga2JjID0gMTsJCQkvKiBJZiBu b25lIG9yIGR1bm5vLCB3YWl0IGZvciBvbmUuICovCisJZWxzZSBpZiAoa2JjID4gS0JVRkwpCQkv KiBJZiB0b28gbWFueSwgKi8KKwkgIGtiYyA9IEtCVUZMOwkJCS8qIG9ubHkgcmVhZCB0aGlzIG1h bnkuICovCisJaWYgKChrYmMgPSByZWFkKDAsIGtidWYsIGtiYykpIDwgMSkgeyAvKiBOb3cgcmVh ZCBpdC90aGVtLiAqLworCSAgICBkZWJ1ZyhGMTAxLCJDT05ORUNUIGtiZ2V0IGVycm5vIiwiIixl cnJubyk7CS8qIEdvdCBhbiBlcnJvci4gKi8KKyNpZmRlZiBFSU5UUgorCSAgICBpZiAoZXJybm8g PT0gRUlOVFIpCQkvKiBJbnRlcnJ1cHRlZCBzeXN0ZW0gY2FsbC4gKi8KKwkgICAgICBjb250aW51 ZTsJCQkvKiBUcnkgYWdhaW4sIHVwIHRvIGxpbWl0LiAqLworCSAgICBlbHNlCQkJLyogU29tZXRo aW5nIGVsc2UuICovCisjZW5kaWYgLyogRUlOVFIgKi8KKwkgICAgICByZXR1cm4oLTEpOwkJLyog UGFzcyBhbG9uZyByZWFkKCkgZXJyb3IuICovCisJfQorI2lmZGVmIEVJTlRSCisJZWxzZSB7IG9r ID0gMTsgYnJlYWs7IH0KKyAgICB9CisgICAgaWYgKCFvaykgcmV0dXJuKC0xKTsKKyNlbmRpZiAv KiBFSU5UUiAqLworICAgIGticCA9IGtidWY7CQkJCS8qIEFkanVzdCBidWZmZXIgcG9pbnRlciwg Ki8KKyAgICBrYmMtLTsJCQkJLyogY291bnQsICovCisgICAgcmV0dXJuKChpbnQpKCprYnArKykg JiAwMzc3KTsJLyogYW5kIHJldHVybiBmaXJzdCBjaGFyYWN0ZXIuICovCit9CisKKy8qICBDIE8g TiBDIEwgRCAtLSAgSW50ZXJhY3RpdmUgdGVybWluYWwgY29ubmVjdGlvbiBjaGlsZCBmdW5jdGlv biAqLworCitzdGF0aWMKKyNpZmRlZiBCRU9TT1JCRUJPWAorbG9uZworI2Vsc2UKK1ZPSUQKKyNl bmRpZiAvKiBCRU9TT1JCRUJPWCAqLworY29uY2xkICgKKyNpZmRlZiBCRU9TT1JCRUJPWAorICAg ICAgIHZvaWQgKmJldm9pZAorI2VuZGlmIC8qIEJFT1NPUkJFQk9YICovCisgICAgICAgKSB7Cisg ICAgaW50CW47CQkJLyogR2VuZXJhbCBwdXJwb3NlIGNvdW50ZXIgKi8KKyAgICBpbnQgaTsJCQkv KiBGb3IgbG9vcHMuLi4gKi8KKyAgICBpbnQgYyA9IC0xOwkJCS8qIGMgaXMgYSBjaGFyYWN0ZXIs IGJ1dCBtdXN0IGJlIHNpZ25lZAorCQkJCSAgIGludGVnZXIgdG8gcGFzcyB0aHJ1IC0xLCB3aGlj aCBpcyB0aGUKKwkJCQkgICBtb2RlbSBkaXNjb25uZWN0aW9uIHNpZ25hbCwgYW5kIGlzCisJCQkJ ICAgZGlmZmVyZW50IGZyb20gdGhlIGNoYXJhY3RlciAwMzc3ICovCisgICAgaW50IHByZXY7Cisj aWZkZWYgVE5DT0RFCisgICAgaW50IHR4OwkJCS8qIHRuX2Rvb3AoKSByZXR1cm4gY29kZSAqLwor I2VuZGlmIC8qIFROQ09ERSAqLworI2lmZGVmIENLX1RSSUdHRVIKKyAgICBpbnQgaXg7CQkJCS8q IFRyaWdnZXIgaW5kZXggKi8KKyNlbmRpZiAvKiBDS19UUklHR0VSICovCisjaWZuZGVmIE5PRVND U0VRCisgICAgaW50IGFwY3JjOworI2VuZGlmIC8qIE5PRVNDU0VRICovCisKKyNpZmRlZiBDT01N RU5UCisgICAgaW50IGNvbnJldCA9IDA7CQkJLyogUmV0dXJuIHZhbHVlIGZyb20gY29uZWN0KCkg Ki8KKyAgICBqYmNoa3N1bSA9IC0xTDsKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgamJzZXQg PSAwOwkJCQkvKiBqbXBfYnVmIG5vdCBzZXQgeWV0LCBkb24ndCB1c2UgaXQgKi8KKyAgICBkZWJ1 ZyhGMTAxLCJDT05ORUNUIGNvbmNsZCBlbnRyeSIsIiIsQ0tfRk9SS19TSUcpOworIAkvKiAqKiog Ki8JCS8qIEluZmVyaW9yIHJlYWRzLCBwcmludHMgcG9ydCBpbnB1dCAqLworCisgICAgaWYgKHBy aXZfY2FuKCkpIHsJCQkvKiBDYW5jZWwgYWxsIHByaXZzICovCisJcHJpbnRmKCI/c2V0dWlkIGVy cm9yIC0gZmF0YWxcbiIpOworCWRvZXhpdChCQURfRVhJVCwtMSk7CisgICAgfQorICAgIHNpZ25h bChTSUdJTlQsIFNJR19JR04pOwkJLyogSW4gY2FzZSB0aGVzZSBoYXZlbid0IGJlZW4gKi8KKyAg ICBzaWduYWwoU0lHUVVJVCwgU0lHX0lHTik7CQkvKiBpbmhlcml0ZWQgZnJvbSBhYm92ZS4uLiAq LworICAgIHNpZ25hbChDS19GT1JLX1NJRywgU0lHX0lHTik7CS8qIENLX0ZPUktfU0lHIG5vdCBl eHBlY3RlZCB5ZXQgKi8KKworICAgIGluc2hpZnQgPSBvdXRzaGlmdCA9IDA7CQkvKiBJbml0aWFs IFNPL1NJIHNoaWZ0IHN0YXRlLiAqLworICAgIHsJCQkJCS8qIFdhaXQgZm9yIHBhcmVudCdzIHNl dHVwICovCisJaW50IGk7CisJd2hpbGUgKChpID0gcmVhZCh4cGlwZVswXSwgJmMsIDEpKSA8PSAw KSB7CisJICAgIGlmIChpIDwgMCkgeworCQlkZWJ1ZyhGMTAxLCJDT05ORUNUIGNvbmNsZCBzZXR1 cCBlcnJvciIsIiIsaSk7CisJCWRlYnVnKEYxMTEsIkNPTk5FQ1QgY29uY2xkIHNldHVwIGVycm9y Iixja19lcnJzdHIoKSxlcnJubyk7CisJCXBpcGVtc2coQ0VWX0hVUCk7CS8qIFJlYWQgZXJyb3Ig LSBoYW5ndXAgKi8KKwkJY2tfc25kbXNnKCk7CQkvKiBTZW5kIGFuZCB3YWl0IHRvIGJlIGtpbGxl ZCAqLworCQkvKiBOT1RSRUFDSEVEICovCisJICAgIH0gLyogUmVzdGFydCBpbnRlcnJ1cHRlZCBy ZWFkKCkgKi8KKwl9CisgICAgfQorICAgIGNsb3NlKHhwaXBlWzBdKTsgeHBpcGVbMF0gPSAtMTsJ LyogQ2hpbGQgLSBwcmV2ZW50IGZ1dHVyZSByZWFkcyAqLworI2lmZGVmIERFQlVHCisgICAgaWYg KGRlYmxvZykgeworCWRlYnVnKEYxMDAsIkNPTk5FQ1Qgc3RhcnRpbmcgcG9ydCBmb3JrIiwiIiww KTsKKwlkZWJ1ZyhGMTAxLCJDT05ORUNUIHBvcnQgZm9yayBpYmMiLCIiLGliYyk7CisJZGVidWco RjEwMSwiQ09OTkVDVCBwb3J0IGZvcmsgb2JjIiwiIixvYmMpOworICAgIH0KKyNlbmRpZiAvKiBE RUJVRyAqLworICAgIHdoYXQgPSBXX0NPTk5FQ1Q7CisKKyAgICB3aGlsZSAoMSkgewkJCQkvKiBG cmVzaCByZWFkLCB3YWl0IGZvciBhIGNoYXJhY3Rlci4gKi8KKyNpZmRlZiBBTllYMjUKKwlpZiAo bmV0d29yayAmJiAobmV0dHlwZSA9PSBORVRfU1gyNSkpIHsKKwkgICAgYnplcm8oeDI1aWJ1Zixz aXplb2YoeDI1aWJ1ZikpIDsKKwkgICAgaWYgKChpYnVmbCA9IHR0eGluKE1BWElYMjUsKENIQVIg Kil4MjVpYnVmKSkgPCAwKSB7CisjaWZuZGVmIElCTVgyNQorCQlpZiAoaWJ1ZmwgPT0gLTIpIHsg IC8qIFBBRCBwYXJtcyBjaGFuZ2VzICovCisJCSAgICBwaXBlbXNnKENFVl9QQUQpOworCQkgICAg d3JpdGUoeHBpcGVbMV0scGFkcGFybXMsTUFYUEFEUEFSTVMpOworCQkgICAgY2tfc25kbXNnKCk7 CisJCX0gZWxzZSB7CisjZW5kaWYgLyogSUJNWDI1ICovCisJCSAgICBpZiAoIXF1aWV0KQorCQkg ICAgICBwcmludGYoIlxyXG5Db21tdW5pY2F0aW9ucyBkaXNjb25uZWN0ICIpOworCQkgICAgZG9s b2dlbmQoKTsKKwkJICAgIHBpcGVtc2coQ0VWX0hVUCk7CisJCSAgICBja19zbmRtc2coKTsJCS8q IFdhaXQgdG8gYmUga2lsbGVkICovCisJCSAgICAvKiBOT1RSRUFDSEVEICovCisjaWZuZGVmIElC TVgyNQorICAJCX0KKyNlbmRpZiAvKiBJQk1YMjUgKi8KKwkJLyogcGF1c2UoKTsgPC0tLSBTSE9V TEQgQkUgT0JTT0xFVEUgTk9XISAqLworCQkvKiBCRUNBVVNFIHBhdXNlKCkgaXMgZG9uZSBpbnNp ZGUgb2YgY2tfc25kbXNnKCkgKi8KKwkgICAgfQorCSAgICBpZiAoZGVic2VzKSB7CQkvKiBEZWJ1 Z2dpbmcgb3V0cHV0ICovCisJCXAgPSB4MjVpYnVmIDsKKwkJd2hpbGUgKGlidWZsLS0pIHsgYyA9 ICpwKys7IGNvbm9sKGRiY2hyKGMpKTsgfQorCSAgICB9IGVsc2UgeworCQlpZiAoc2VzbG9nICYm IHNlc3NmdCkJLyogQmluYXJ5IHNlc3Npb24gbG9nICovCisJCSAgbG9nY2hhcigoY2hhciljKTsJ LyogTG9nIGNoYXIgYmVmb3JlIHRyYW5zbGF0aW9uICovCisKKwkJaWYgKHNvc2kKKyNpZm5kZWYg Tk9DU0VUUworCQkgICAgfHwgdGNzbCAhPSB0Y3NyCisjZW5kaWYgLyogTk9DU0VUUyAqLworCQkg ICAgKSB7IC8qIENoYXJhY3RlciBhdCBhIHRpbWUgKi8KKwkJICAgIGZvciAoaSA9IDE7IGkgPCBp YnVmbDsgaSsrKSB7CisJCQljID0geDI1aWJ1ZltpXSAmIGNtYXNrOworCQkJaWYgKHNvc2kpIHsg LyogSGFuZGxlIFNJL1NPICovCisJCQkgICAgaWYgKGMgPT0gU08pIHsKKwkJCQlpbnNoaWZ0ID0g MTsKKwkJCQljb250aW51ZTsKKwkJCSAgICB9IGVsc2UgaWYgKGMgPT0gU0kpIHsKKwkJCQlpbnNo aWZ0ID0gMDsKKwkJCQljb250aW51ZTsKKwkJCSAgICB9CisJCQkgICAgaWYgKGluc2hpZnQpCisJ CQkgICAgICBjIHw9IDAyMDA7CisJCQl9CisjaWZuZGVmIE5PQ1NFVFMKKwkJCWlmIChpbmVzYyA9 PSBFU19OT1JNQUwpIHsKKyNpZmRlZiBVTklDT0RFCisJCQkgICAgaW50IHg7CisJCQkgICAgaWYg KHVuaWNvZGUgPT0gMSkgewkvKiBSZW1vdGUgaXMgVVRGLTggKi8KKwkJCQl4ID0gdV90b19iKChD SEFSKWMpOworCQkJICAgICAgICBpZiAoeCA9PSAtMSkKKwkJCQkgIGNvbnRpbnVlOworCQkJCWVs c2UgaWYgKHggPT0gLTIpIHsgLyogTFMgb3IgUFMgKi8KKwkJCQkgICAgaW54YnVmWzBdID0gQ1I7 CisJCQkJICAgIGlueGJ1ZlsxXSA9IExGOworCQkJCSAgICBpbnhjb3VudCA9IDI7CisJCQkJfSBl bHNlIHsKKwkJCQkgICAgaW54YnVmWzBdID0gKHVuc2lnbmVkKSh4ICYgMHhmZik7CisJCQkJfQor CQkJCWMgPSBpbnhidWZbMF07CisJCQkgICAgfSBlbHNlIGlmICh1bmljb2RlID09IDIpIHsgLyog TG9jYWwgaXMgVVRGLTggKi8KKwkJCQlpbnhjb3VudCA9CisJCQkJICBiX3RvX3UoKENIQVIpYyxp bnhidWYsT1VUWEJVRlNJWix0Y3NzaXplKTsKKwkJCQljID0gaW54YnVmWzBdOworCQkJICAgIH0g ZWxzZSB7CisjZW5kaWYgLyogVU5JQ09ERSAqLworCQkJCWlmIChzeGkpIGMgPSAoKnN4aSkoKENI QVIpYyk7CisJCQkJaWYgKHJ4aSkgYyA9ICgqcnhpKSgoQ0hBUiljKTsKKwkJCQlpbnhidWZbMF0g PSBjOworI2lmZGVmIFVOSUNPREUKKwkJCSAgICB9CisjZW5kaWYgLyogVU5JQ09ERSAqLworCQkJ fQorI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKwkJCWMgJj0gY21kbXNrOyAvKiBBcHBseSBjb21tYW5k IG1hc2suICovCisJCQljb25vYyhjKTsgICAgLyogT3V0cHV0IHRvIHNjcmVlbiAqLworCQkJaWYg KHNlc2xvZyAmJiAhc2Vzc2Z0KSAvKiBhbmQgc2Vzc2lvbiBsb2cgKi8KKwkJCSAgbG9nY2hhcihj KTsKKwkJICAgIH0KKwkJfSBlbHNlIHsJCS8qIEFsbCBhdCBvbmNlICovCisJCSAgICBmb3IgKGkg PSAxOyBpIDwgaWJ1Zmw7IGkrKykKKwkJICAgICAgeDI1aWJ1ZltpXSAmPSAoY21hc2sgJiBjbWRt c2spOworCQkgICAgY29ueG8oaWJ1ZmwseDI1aWJ1Zik7CisJCSAgICBpZiAoc2VzbG9nKSB6c291 dHgoWlNGSUxFLHgyNWlidWYsaWJ1ZmwpOworCQl9CisJICAgIH0KKwkgICAgY29udGludWU7CisK Kwl9IGVsc2UgewkJCS8qIE5vdCBYLjI1Li4uICovCisjZW5kaWYgLyogQU5ZWDI1ICovCisvKgor ICBHZXQgdGhlIG5leHQgY29tbXVuaWNhdGlvbiBsaW5lIGNoYXJhY3RlciBmcm9tIG91ciBpbnRl cm5hbCBidWZmZXIuCisgIElmIHRoZSBidWZmZXIgaXMgZW1wdHksIHJlZmlsbCBpdC4KKyovCisJ ICAgIHByZXYgPSBjOwkJCS8qIFJlbWVtYmVyIHByZXZpb3VzIGNoYXJhY3RlciAqLworCSAgICBj ID0gY2tjZ2V0YygwKTsJCS8qIEdldCBuZXh0IGNoYXJhY3RlciAqLworCSAgICAvKiBkZWJ1ZyhG MTAxLCJDT05ORUNUIGMiLCIiLGMpOyAqLworCSAgICBpZiAoYyA8IDApIHsJCS8qIEZhaWxlZC4u LiAqLworCQlkZWJ1ZyhGMTAxLCJDT05ORUNUIGRpc2Nvbm5lY3QgaWJjIiwiIixpYmMpOworCQlk ZWJ1ZyhGMTAxLCJDT05ORUNUIGRpc2Nvbm5lY3Qgb2JjIiwiIixvYmMpOworCQlja2NwdXRmKCk7 CQkvKiBGbHVzaCBDT05ORUNUIG91dHB1dCBidWZmZXIgKi8KKwkJaWYgKCFxdWlldCkgeworCQkg ICAgcHJpbnRmKCJcclxuQ29tbXVuaWNhdGlvbnMgZGlzY29ubmVjdCAiKTsKKyNpZmRlZiBDT01N RU5UCisJCSAgICBpZiAoIGMgPT0gLTMKKyNpZmRlZiB1bHRyaXgKKy8qIFRoaXMgaGFwcGVucyBv biBVbHRyaXggaWYgdGhlcmUncyBubyBjYXJyaWVyICovCisJCQkmJiBlcnJubyAhPSBFSU8KKyNl bmRpZiAvKiB1bHRyaXggKi8KKyNpZmRlZiBVVEVLCisvKiBUaGlzIGhhcHBlbnMgb24gVVRFSyBp ZiB0aGVyZSdzIG5vIGNhcnJpZXIgKi8KKwkJCSYmIGVycm5vICE9IEVXT1VMREJMT0NLCisjZW5k aWYgLyogVVRFSyAqLworCQkJKQorCQkgICAgICBwZXJyb3IoIlxyXG5DYW4ndCByZWFkIGNoYXJh Y3RlciIpOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKwkJfQorI2lmZGVmIE5PU0VUQlVGCisJCWZm bHVzaChzdGRvdXQpOworI2VuZGlmIC8qIE5PU0VUQlVGICovCisJCXR0aGFuZygpOwkJLyogSGFu ZyB1cCB0aGUgY29ubmVjdGlvbiAqLworCQlkZWJ1ZyhGMTExLCJDT05ORUNUIGNvbmNsZCBpL28g ZXJyb3IiLGNrX2VycnN0cigpLGVycm5vKTsKKwkJcGlwZW1zZyhDRVZfSFVQKTsKKwkJY2tfc25k bXNnKCk7CQkvKiBXYWl0IHRvIGJlIGtpbGxlZCAqLworCSAgICB9CisjaWZkZWYgQ09NTUVOVAor LyogdG9vIG11Y2guLi4gKi8KKwkgICAgZGVidWcoRjEwMSwiQ09OTkVDVCAqKiBQT1JUIiwiIixj KTsgLyogR290IGNoYXJhY3RlciBjIE9LLiAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyNpZmRl ZiBUTkNPREUKKwkgICAgLyogSGFuZGxlIFRFTE5FVCBuZWdvdGlhdGlvbnMuLi4gKi8KKworCSAg ICBpZiAoKGMgPT0gTlVMKSAmJiBuZXR3b3JrICYmIElTX1RFTE5FVCgpKSB7CisJCWlmIChwcmV2 ID09IENSKQkJLyogRGlzY2FyZCA8TlVMPiBvZiA8Q1I+PE5VTD4gKi8KKwkJICBpZiAoIVRFTE9Q VF9VKFRFTE9QVF9CSU5BUlkpKQorCQkgICAgY29udGludWU7CisJICAgIH0KKwkgICAgaWYgKChj ID09IElBQykgJiYgbmV0d29yayAmJiBJU19URUxORVQoKSkgeworCQlpbnQgbWVfYmluID0gVEVM T1BUX01FKFRFTE9QVF9CSU5BUlkpOworCQlpbnQgdV9iaW4gPSBURUxPUFRfVShURUxPUFRfQklO QVJZKTsKKwkJZGVidWcoRjEwMCwiQ09OTkVDVCBnb3QgSUFDIiwiIiwwKTsKKwkJY2tjcHV0Zigp OwkJLyogRHVtcCBzY3JlZW4tb3V0cHV0IGJ1ZmZlciAqLworCQlpZiAoKHR4ID0gdG5fZG9vcCgo Q0hBUikoYyAmIDB4ZmYpLGR1cGxleCxja2NnZXRjKSkgPT0gMCkgeworCQkgICAgaWYgKG1lX2Jp biAhPSBURUxPUFRfTUUoVEVMT1BUX0JJTkFSWSkpIHsKKwkJCWRlYnVnKEYxMDEsCisJCQkgICAg ICAiQ09OTkVDVCBURUxORVQgbWVfYmluIiwKKwkJCSAgICAgICIiLAorCQkJICAgICAgVEVMT1BU X01FKFRFTE9QVF9CSU5BUlkpCisJCQkgICAgICApOworCQkJcGlwZW1zZyhDRVZfTUVCSU4pOyAv KiBUZWxsIHBhcmVudCAqLworCQkJd3JpdGUoeHBpcGVbMV0sCisJCQkgICAgICAmVEVMT1BUX01F KFRFTE9QVF9CSU5BUlkpLAorCQkJICAgICAgc2l6ZW9mKFRFTE9QVF9NRShURUxPUFRfQklOQVJZ KSkKKwkJCSAgICAgICk7CisJCQlja19zbmRtc2coKTsJLyogVGVsbCB0aGUgcGFyZW50IGZvcmsg Ki8KKwkJICAgIH0gZWxzZSBpZiAodV9iaW4gIT0gVEVMT1BUX1UoVEVMT1BUX0JJTkFSWSkpIHsK KwkJCWRlYnVnKEYxMDEsCisJCQkgICAgICAiQ09OTkVDVCBURUxORVQgdV9iaW4iLAorCQkJICAg ICAgIiIsCisJCQkgICAgICBURUxPUFRfVShURUxPUFRfQklOQVJZKQorCQkJICAgICAgKTsKKwkJ CXBpcGVtc2coQ0VWX1VCSU4pOyAvKiBUZWxsIHBhcmVudCAqLworCQkJd3JpdGUoeHBpcGVbMV0s CisJCQkgICAgICAmVEVMT1BUX1UoVEVMT1BUX0JJTkFSWSksCisJCQkgICAgICBzaXplb2YoVEVM T1BUX1UoVEVMT1BUX0JJTkFSWSkpCisJCQkgICAgICApOworCQkJY2tfc25kbXNnKCk7CS8qIFRl bGwgdGhlIHBhcmVudCBmb3JrICovCisJCSAgICB9CisJCSAgICBjb250aW51ZTsKKwkJfSBlbHNl IGlmICh0eCA9PSAtMSkgewkvKiBJL08gZXJyb3IgKi8KKwkJICAgIGlmICghcXVpZXQpCisJCSAg ICAgIHByaW50ZigiXHJcbkNvbW11bmljYXRpb25zIGRpc2Nvbm5lY3QgIik7CisjaWZkZWYgTk9T RVRCVUYKKwkJICAgIGZmbHVzaChzdGRvdXQpOworI2VuZGlmIC8qIE5PU0VUQlVGICovCisJCSAg ICBkb2xvZ2VuZCgpOworCQkgICAgZGVidWcoRjExMSwiQ09OTkVDVCBjb25jbGQgaS9vIGVycm9y IDIiLGNrX2VycnN0cigpLGVycm5vKTsKKwkJICAgIHBpcGVtc2coQ0VWX0hVUCk7CisJCSAgICBj a19zbmRtc2coKTsJLyogV2FpdCB0byBiZSBraWxsZWQgKi8KKwkJICAgIC8qIE5PVFJFQUNIRUQg Ki8KKwkJfSBlbHNlIGlmICh0eCA9PSAtMykgewkvKiBJL08gZXJyb3IgKi8KKwkJICAgIGlmICgh cXVpZXQpCisJCSAgICAgIHByaW50ZigiXHJcbkNvbm5lY3Rpb24gY2xvc2VkIGR1ZSB0byB0ZWxu ZXQgcG9saWN5ICIpOworI2lmZGVmIE5PU0VUQlVGCisJCSAgICBmZmx1c2goc3Rkb3V0KTsKKyNl bmRpZiAvKiBOT1NFVEJVRiAqLworCQkgICAgZG9sb2dlbmQoKTsKKwkJICAgIGRlYnVnKEYxMTEs IkNPTk5FQ1QgY29uY2xkIGkvbyBlcnJvciAyIixja19lcnJzdHIoKSxlcnJubyk7CisJCSAgICBw aXBlbXNnKENFVl9IVVApOworCQkgICAgY2tfc25kbXNnKCk7CS8qIFdhaXQgdG8gYmUga2lsbGVk ICovCisJCSAgICAvKiBOT1RSRUFDSEVEICovCisJCX0gZWxzZSBpZiAodHggPT0gLTIpIHsJLyog SS9PIGVycm9yICovCisJCSAgICBpZiAoIXF1aWV0KQorCQkgICAgICBwcmludGYoIlxyXG5Db25u ZWN0aW9uIGNsb3NlZCBieSBwZWVyICIpOworI2lmZGVmIE5PU0VUQlVGCisJCSAgICBmZmx1c2go c3Rkb3V0KTsKKyNlbmRpZiAvKiBOT1NFVEJVRiAqLworCQkgICAgZG9sb2dlbmQoKTsKKwkJICAg IGRlYnVnKEYxMTEsIkNPTk5FQ1QgY29uY2xkIGkvbyBlcnJvciAyIixja19lcnJzdHIoKSxlcnJu byk7CisJCSAgICBwaXBlbXNnKENFVl9IVVApOworCQkgICAgY2tfc25kbXNnKCk7CS8qIFdhaXQg dG8gYmUga2lsbGVkICovCisJCSAgICAvKiBOT1RSRUFDSEVEICovCisJCX0gZWxzZSBpZiAoKHR4 ID09IDEpICYmICghZHVwbGV4KSkgeyAvKiBFQ0hPIGNoYW5nZSAqLworCQkgICAgZHVwbGV4ID0g MTsJCS8qIFR1cm4gb24gbG9jYWwgZWNobyAqLworCQkgICAgZGVidWcoRjEwMSwiQ09OTkVDVCBU RUxORVQgZHVwbGV4IGNoYW5nZSIsIiIsZHVwbGV4KTsKKwkJICAgIHBpcGVtc2coQ0VWX0RVUCk7 CS8qIFRlbGwgcGFyZW50ICovCisJCSAgICB3cml0ZSh4cGlwZVsxXSwgJmR1cGxleCwgc2l6ZW9m KGR1cGxleCkpOworCQkgICAgY2tfc25kbXNnKCk7CS8qIFRlbGwgdGhlIHBhcmVudCBmb3JrICov CisJCSAgICBjb250aW51ZTsKKwkJfSBlbHNlIGlmICgodHggPT0gMikgJiYgKGR1cGxleCkpIHsg LyogRUNITyBjaGFuZ2UgKi8KKwkJICAgIGR1cGxleCA9IDA7CisJCSAgICBkZWJ1ZyhGMTAxLCJD T05ORUNUIFRFTE5FVCBkdXBsZXggY2hhbmdlIiwiIixkdXBsZXgpOworCQkgICAgcGlwZW1zZyhD RVZfRFVQKTsKKwkJICAgIHdyaXRlKHhwaXBlWzFdLCAmZHVwbGV4LCBzaXplb2YoZHVwbGV4KSk7 CisJCSAgICBja19zbmRtc2coKTsKKwkJICAgIGNvbnRpbnVlOworCQl9IGVsc2UgaWYgKHR4ID09 IDMpIHsgLyogUXVvdGVkIElBQyAqLworCQkgICAgYyA9IHBhcml0eSA/IDEyNyA6IDI1NTsKKwkJ fQorI2lmZGVmIElLU19PUFRJT04KKyAgICAgICAgICAgICAgICBlbHNlIGlmICh0eCA9PSA0KSB7 ICAgLyogSUtTIFN0YXRlIENoYW5nZSAqLworICAgICAgICAgICAgICAgICAgICBpZiAoVEVMT1BU X1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1pdC51X3N0YXJ0ICYmCisJCQkhdGNwX2luY29taW5nCisJ CQkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGhlcmUgd2UgbmVlZCB0byBwcmludCBh IG1zZyB0aGF0IHRoZSBvdGhlciAqLworICAgICAgICAgICAgICAgICAgICAgICAgLyogc2lkZSBp cyBpbiBTRVJWRVIgbW9kZSBhbmQgdGhhdCBSRU1PVEUgICAgICovCisgICAgICAgICAgICAgICAg ICAgICAgICAvKiBjb21tYW5kcyBzaG91bGQgYmUgdXNlZC4gIEFuZCBDT05ORUNUIG1vZGUgKi8K KyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNob3VsZCBiZSBlbmRlZC4gICAgICAgICAgICAg ICAgICAgICAgICAgICAqLworCQkJYWN0aXZlID0gMDsKKwkJICAgIH0KKwkJfQorI2VuZGlmIC8q IElLU19PUFRJT04gKi8KKyAgICAgICAgICAgICAgICBlbHNlIGlmICh0eCA9PSA2KSB7CisgICAg ICAgICAgICAgICAgICAgIC8qIERPIExPR09VVCByZWNlaXZlZCAqLworCQkgICAgaWYgKCFxdWll dCkKKwkJICAgICAgcHJpbnRmKCJcclxuUmVtb3RlIExvZ291dCAiKTsKKyNpZmRlZiBOT1NFVEJV RgorCQkgICAgZmZsdXNoKHN0ZG91dCk7CisjZW5kaWYgLyogTk9TRVRCVUYgKi8KKwkJICAgIGRl YnVnKEYxMDAsIkNPTk5FQ1QgUmVtb3RlIExvZ291dCIsIiIsMCk7CisJCSAgICBwaXBlbXNnKENF Vl9IVVApOworCQkgICAgY2tfc25kbXNnKCk7CS8qIFdhaXQgdG8gYmUga2lsbGVkICovCisJCSAg ICAvKiBOT1RSRUFDSEVEICovCisgICAgICAgICAgICAgICAgfSBlbHNlCisJCSAgY29udGludWU7 CQkvKiBOZWdvdGlhdGlvbiBPSywgZ2V0IG5leHQgY2hhci4gKi8KKworCSAgICB9IGVsc2UgaWYg KHBhcml0eSkKKwkgICAgICBjICY9IDB4N2Y7CisKKyAgICAgICAgICAgIGlmIChURUxPUFRfTUUo VEVMT1BUX0VDSE8pICYmIHRuX3JlbV9lY2hvKQorICAgICAgICAgICAgICAgIHR0b2MoYyk7ICAg ICAgICAgICAgICAgIC8qIEknbSBlY2hvaW5nIGZvciB0aGUgcmVtb3RlICovCisjZW5kaWYgLyog VE5DT0RFICovCisKKwkgICAgaWYgKGRlYnNlcykgewkJLyogT3V0cHV0IGNoYXJhY3RlciB0byBz Y3JlZW4gKi8KKwkJY2hhciAqczsJCS8qIERlYnVnZ2luZyBkaXNwbGF5Li4uICovCisJCXMgPSBk YmNocihjKTsKKwkJd2hpbGUgKCpzKQorCQkgIGNrY3B1dGMoKnMrKyk7CisJICAgIH0gZWxzZSB7 CQkJLyogUmVndWxhciBkaXNwbGF5IC4uLiAqLworCQljICY9IGNtYXNrOwkJLyogQXBwbHkgS2Vy bWl0LXRvLXJlbW90ZSBtYXNrICovCisjaWZkZWYgQ0tfQVVUT0RMCisvKgorICBBdXRvZG93bmxv YWQuICBDaGVjayBmb3IgS2VybWl0IFMgcGFja2V0IHByaW9yIHRvIHRyYW5zbGF0aW9uLCBzaW5j ZSB0aGF0CisgIGNhbiBjaGFuZ2UgdGhlIHBhY2tldCBhbmQgbWFrZSBpdCB1bnJlY29nbml6YWJs ZSAoYXMgd2hlbiB0aGUgdGVybWluYWwKKyAgY2hhcmFjdGVyIHNldCBpcyBhbiBJU08gNjQ2IG9u ZSkuLi4gIERpdHRvIGZvciBabW9kZW0gc3RhcnQgcGFja2V0LgorKi8KKwkJaWYgKGF1dG9kbAkJ LyogQXV0b2Rvd25sb2FkIGVuYWJsZWQ/ICovCisjaWZkZWYgSUtTX09QVElPTgorCQkgICAgfHwg VEVMT1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1pdC5tZV9zdGFydAorI2VuZGlmIC8qIElLU19P UFRJT04gKi8KKwkJICAgICkgeworCQkgICAgaW50IGs7CisJCSAgICBrID0ga3N0YXJ0KChDSEFS KWMpOyAvKiBLZXJtaXQgUyBvciBJIHBhY2tldD8gKi8KKyNpZmRlZiBDS19YWVoKKwkJICAgIGlm ICghayAmJiB6bWRsb2spCS8qIE9yIGFuICJzeiIgc3RhcnQ/ICovCisJCSAgICAgIGsgPSB6c3Rh cnQoKENIQVIpYyk7CisjZW5kaWYgLyogQ0tfWFlaICovCisJCSAgICBpZiAoaykgeworCQkJaW50 IGtzaWduID0gMDsKKwkJCWRlYnVnKEYxMDEsIkNPTk5FQ1QgYXV0b2Rvd25sb2FkIGsiLCIiLGsp OworCQkJaWYgKGsgPCAwKSB7IC8qIE1pbnVzLVByb3RvY29sPyAqLworI2lmZGVmIE5PU0VSVkVS CisJCQkgICAgZ290byBub3NlcnZlcjsgLyogTmVlZCBzZXJ2ZXIgbW9kZSBmb3IgdGhpcyAqLwor I2Vsc2UKKwkJCSAgICBrc2lnbiA9IDE7IC8qIFJlbWVtYmVyICovCisJCQkgICAgayA9IDAgLSBr OyAvKiBDb252ZXJ0IHRvIGFjdHVhbCBwcm90b2NvbCAqLworCQkJICAgIGp1c3RvbmUgPSAxOyAv KiBGbGFnIGZvciBwcm90b2NvbCBtb2R1bGUgKi8KKyNlbmRpZiAvKiBOT1NFUlZFUiAqLworCQkJ fSBlbHNlCisJCQkgIGp1c3RvbmUgPSAwOworCQkJay0tOwkJLyogQWRqdXN0IFtrel1zdGFydCdz IHJldHVybiB2YWx1ZSAqLworCQkJaWYgKGsgPT0gUFJPVE9fSworI2lmZGVmIENLX1hZWgorCQkJ ICAgIHx8IGsgPT0gUFJPVE9fWgorI2VuZGlmIC8qIENLX1hZWiAqLworCQkJICAgICkgeworCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTm93IGRhbWFnZSB0aGUgcGFja2V0IHNvIHRo YXQgaXQgZG9lcyBub3QgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRyaWdn ZXIgYXV0b2Rvd25sb2FkIGRldGVjdGlvbiBvbiBzdWJzcXVlbnQgKi8KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBsaW5rcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICovCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoayA9PSBQUk9UT19LKSB7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpLCBsZW4gPSBzdHJsZW4oKGNo YXIqKWtzYnVmKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsg aSA8IGxlbjsgaSsrKQorCQkJCSAgY2tjcHV0YyhCUyk7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgfQorI2lmZGVmIENLX1hZWgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Ug eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaTsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDM7IGkrKykKKwkJCQkgIGNrY3B1dGMo Q0FOKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisjZW5kaWYgLyogQ0tfWFlaICov CisJCQkgICAgLyogTm90aWZ5IHBhcmVudCAqLworCQkJICAgIHBpcGVtc2coanVzdG9uZSA/IENF Vl9BVUwgOiBDRVZfQURMKTsKKy8qCisgIFNlbmQgb3VyIG1lbW9yeSBiYWNrIHVwIHRvIHRoZSB0 b3AgZm9yayB0aHJ1IHRoZSBwaXBlLgorICBDQVJFRlVMIC0tIFdyaXRlIHRoaXMgc3R1ZmYgaW4g dGhlIHNhbWUgb3JkZXIgaXQgaXMgdG8gYmUgcmVhZCEKKyovCisJCQkgICAgLyogQ29weSBvdXIg S2VybWl0IHBhY2tldCB0byB0aGUgcGFyZW50IGZvcmsgKi8KKwkJCSAgICBuID0gKGludCkgc3Ry bGVuKChjaGFyICopa3NidWYpOworCQkJICAgIHdyaXRlKHhwaXBlWzFdLCAoY2hhciAqKSZuLCBz aXplb2YobikpOworCQkJICAgIGlmIChuID4gMCkKKwkJCSAgICAgIHdyaXRlKHhwaXBlWzFdLCAo Y2hhciAqKWtzYnVmLCBuKzEpOworCQkJICAgIGRlYnVnKEYxMTEsIkNPTk5FQ1QgYXV0b2Rvd25s b2FkIGtzYnVmIixrc2J1ZixuKTsKKwkJCSAgICBkZWJ1ZyhGMTAxLCJDT05ORUNUIGF1dG9kb3du bG9hZCBqdXN0b25lIiwiIiwKKwkJCQkgIGp1c3RvbmUpOworCQkJICAgIC8qIENvbnN0cnVjdCB0 aGUgQVBDIGNvbW1hbmQgKi8KKwkJCSAgICBzcHJpbnRmKGFwY2J1ZiwKKwkJCQkgICAgInNldCBw cm90byAlcywgJXMsIHNldCBwcm90byAlcyIsCisJCQkJICAgIHB0YWJba10ucF9uYW1lLAorCQkJ CSAgICBrc2lnbiA/ICJzZXJ2ZXIiIDogInJlY2VpdmUiLAorCQkJCSAgICBwdGFiW3Byb3RvY29s XS5wX25hbWUKKwkJCQkgICAgKTsKKwkJCSAgICBhcGNsZW5ndGggPSBzdHJsZW4oYXBjYnVmKTsK KwkJCSAgICBkZWJ1ZyhGMTExLCJDT05ORUNUIGtzYnVmIixrc2J1ZixrKTsKKwkJCSAgICBkZWJ1 ZyhGMTEwLCJDT05ORUNUIGF1dG9kb3dubG9hZCIsYXBjYnVmLDApOworCQkJICAgIGFwY2FjdGl2 ZSA9IEFQQ19MT0NBTDsKKwkJCSAgICBja2NwdXRmKCk7CS8qIEZvcmNlIHNjcmVlbiB1cGRhdGUg Ki8KKworCQkJICAgIC8qIFdyaXRlIGJ1ZmZlciBpbmNsdWRpbmcgdHJhaWxpbmcgTlVMIGJ5dGUg Ki8KKwkJCSAgICBkZWJ1ZyhGMTAxLCJDT05ORUNUIHdyaXRlIHhwaXBlIGFwY2xlbmd0aCIsIiIs CisJCQkJICBhcGNsZW5ndGgpOworCQkJICAgIHdyaXRlKHhwaXBlWzFdLAorCQkJCSAgKGNoYXIg KikmYXBjbGVuZ3RoLAorCQkJCSAgc2l6ZW9mKGFwY2xlbmd0aCkKKwkJCQkgICk7CisJCQkgICAg ZGVidWcoRjExMCwiQ09OTkVDVCB3cml0ZSB4cGlwZSBhcGNidWYiLGFwY2J1ZiwwKTsKKwkJCSAg ICB3cml0ZSh4cGlwZVsxXSwgYXBjYnVmLCBhcGNsZW5ndGgrMSk7CisKKwkJCSAgICAvKiBDb3B5 IG91ciBpbnB1dCBidWZmZXIgdG8gdGhlIHBhcmVudCBmb3JrICovCisKKwkJCSAgICBkZWJ1ZyhG MTAxLCJDT05ORUNUIGF1dG9kb3dubG9hZCBjb21wbGV0ZSBpYmMiLAorCQkJCSAgIiIsaWJjKTsK KwkJCSAgICBkZWJ1ZyhGMTAxLCJDT05ORUNUIGF1dG9kb3dubG9hZCBjb21wbGV0ZSBvYmMiLAor CQkJCSAgIiIsb2JjKTsKKwkJCSAgICB3cml0ZSh4cGlwZVsxXSwgKGNoYXIgKikmaWJjLCBzaXpl b2YoaWJjKSk7CisJCQkgICAgaWYgKGliYyA+IDApIHsKKwkJCQl3cml0ZSh4cGlwZVsxXSwgKGNo YXIgKikmaWJwLCBzaXplb2YoaWJwKSk7CisJCQkJd3JpdGUoeHBpcGVbMV0sIGlicCwgaWJjKTsK KwkJCSAgICB9CisJCQkgICAgY2tfc25kbXNnKCk7IC8qIFdhaXQgdG8gYmUga2lsbGVkICovCisJ CQkgICAgLyogTk9UUkVBQ0hFRCAqLworCQkJfQorCQkgICAgfQorCQl9CisjaWZkZWYgTk9TRVJW RVIKKwkgICAgICBub3NlcnZlcjoKKyNlbmRpZiAvKiBOT1NFUlZFUiAqLworI2VuZGlmIC8qIENL X0FVVE9ETCAqLworCQlpZiAoc29zaSkgewkJLyogSGFuZGxlIFNJL1NPICovCisJCSAgICBpZiAo YyA9PSBTTykgewkvKiBTaGlmdCBPdXQgKi8KKwkJCWluc2hpZnQgPSAxOworCQkJY29udGludWU7 CisJCSAgICB9IGVsc2UgaWYgKGMgPT0gU0kpIHsgLyogU2hpZnQgSW4gKi8KKwkJCWluc2hpZnQg PSAwOworCQkJY29udGludWU7CisJCSAgICB9CisJCSAgICBpZiAoaW5zaGlmdCkgYyB8PSAwMjAw OworCQl9CisJCWlueGJ1ZlswXSA9IGM7CQkvKiBJbiBjYXNlIHRoZXJlIGlzIG5vIHRyYW5zbGF0 aW9uICovCisJCWlueGNvdW50ID0gMTsJCS8qIC4uLiAqLworI2lmbmRlZiBOT0NTRVRTCisJCWlm IChpbmVzYyA9PSBFU19OT1JNQUwpCXsgLyogSWYgbm90IGluIGFuIGVzY2FwZSBzZXF1ZW5jZSAq LworI2lmZGVmIFVOSUNPREUKKwkJICAgIGludCB4OwkJLyogVHJhbnNsYXRlIGNoYXJhY3RlciBz ZXRzICovCisJCSAgICBDSEFSIGNoOworCQkgICAgY2ggPSBjOworCQkgICAgaWYgKHVuaWNvZGUg PT0gMSkgewkvKiBSZW1vdGUgaXMgVVRGLTggKi8KKwkJCXggPSB1X3RvX2IoY2gpOworCQkJaWYg KHggPCAwKQorCQkJICBjb250aW51ZTsKKwkJCWlueGJ1ZlswXSA9ICh1bnNpZ25lZCkoeCAmIDB4 ZmYpOworCQkJYyA9IGlueGJ1ZlswXTsKKwkJICAgIH0gZWxzZSBpZiAodW5pY29kZSA9PSAyKSB7 IC8qIExvY2FsIGlzIFVURi04ICovCisJCQlpbnhjb3VudCA9IGJfdG9fdShjaCxpbnhidWYsT1VU WEJVRlNJWix0Y3NzaXplKTsKKwkJCWMgPSBpbnhidWZbMF07CisJCSAgICB9IGVsc2UgeworI2Vu ZGlmIC8qIFVOSUNPREUgKi8KKwkJCWlmIChzeGkpIGMgPSAoKnN4aSkoKENIQVIpYyk7CisJCQlp ZiAocnhpKSBjID0gKCpyeGkpKChDSEFSKWMpOworCQkJaW54YnVmWzBdID0gYzsKKyNpZmRlZiBV TklDT0RFCisJCSAgICB9CisjZW5kaWYgLyogVU5JQ09ERSAqLworCQl9CisjZW5kaWYgLyogTk9D U0VUUyAqLworCisjaWZuZGVmIE5PRVNDU0VRCisJCWlmIChlc2NzZXEpCQkvKiBJZiBoYW5kbGlu ZyBlc2NhcGUgc2VxdWVuY2VzICovCisJCSAgYXBjcmMgPSBjaGthZXMoKGNoYXIpYyk7IC8qIHVw ZGF0ZSBvdXIgc3RhdGUgKi8KKyNpZmRlZiBDS19BUEMKKy8qCisgIElmIHdlIGFyZSBoYW5kbGlu ZyBBUENzLCB3ZSBoYXZlIHNldmVyYWwgcG9zc2liaWxpdGllcyBhdCB0aGlzIHBvaW50OgorICAg MS4gT3JkaW5hcnkgY2hhcmFjdGVyIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIHNjcmVlbi4KKyAgIDIu IEFuIEVzYzsgd2UgY2FuJ3Qgd3JpdGUgaXQgYmVjYXVzZSBpdCBtaWdodCBiZSB0aGUgYmVnaW5u aW5nIG9mIGFuIEFQQy4KKyAgIDMuIFRoZSBjaGFyYWN0ZXIgZm9sbG93aW5nIGFuIEVzYywgaW4g d2hpY2ggY2FzZSB3ZSB3cml0ZSBFc2MsIHRoZW4gY2hhciwKKyAgICAgIGJ1dCBvbmx5IGlmIHdl IGhhdmUgbm90IGp1c3QgZW50ZXJlZCBhbiBBUEMgc2VxdWVuY2UuCisqLworCQlpZiAoZXNjc2Vx ICYmIChhcGNzdGF0dXMgJiBBUENfT04pKSB7CisJCSAgICBpZiAoaW5lc2MgPT0gRVNfR09URVND KQkvKiBEb24ndCB3cml0ZSBFU0MgeWV0ICovCisJCSAgICAgIGNvbnRpbnVlOworCQkgICAgZWxz ZSBpZiAob2xkZXNjID09IEVTX0dPVEVTQyAmJiAhYXBjYWN0aXZlKSB7CisJCQlja2NwdXRjKEVT Qyk7CS8qIFdyaXRlIHNhdmVkIEVTQyAqLworCQkJaWYgKHNlc2xvZyAmJiAhc2Vzc2Z0KQorCQkJ ICBsb2djaGFyKChjaGFyKUVTQyk7CisJCSAgICB9IGVsc2UgaWYgKGFwY3JjKSB7CS8qIFdlIGhh dmUgYW4gQVBDICovCisJCQlkZWJ1ZyhGMTExLCJDT05ORUNUIEFQQyBjb21wbGV0ZSIsYXBjYnVm LGFwY2xlbmd0aCk7CisJCQlja2NwdXRmKCk7CQkvKiBGb3JjZSBzY3JlZW4gdXBkYXRlICovCisJ CQlwaXBlbXNnKENFVl9BUEMpOwkvKiBOb3RpZnkgcGFyZW50ICovCisJCQl3cml0ZSh4cGlwZVsx XSwKKwkJCSAgICAgIChjaGFyICopJmFwY2xlbmd0aCwKKwkJCSAgICAgIHNpemVvZihhcGNsZW5n dGgpCisJCQkgICAgICApOworCQkJLyogV3JpdGUgYnVmZmVyIGluY2x1ZGluZyB0cmFpbGluZyBO VUwgYnl0ZSAqLworCisJCQl3cml0ZSh4cGlwZVsxXSwgYXBjYnVmLCBhcGNsZW5ndGgrMSk7CisK KwkJCS8qIENvcHkgb3VyIGlucHV0IGJ1ZmZlciB0byB0aGUgcGFyZW50IGZvcmsgKi8KKworCQkJ ZGVidWcoRjEwMSwiQ09OTkVDVCBBUEMgY29tcGxldGUgaWJjIiwiIixpYmMpOworCQkJZGVidWco RjEwMSwiQ09OTkVDVCBBUEMgY29tcGxldGUgb2JjIiwiIixvYmMpOworCQkJd3JpdGUoeHBpcGVb MV0sIChjaGFyICopJmliYywgc2l6ZW9mKGliYykpOworCQkJaWYgKGliYyA+IDApIHsKKwkJCSAg ICB3cml0ZSh4cGlwZVsxXSwgKGNoYXIgKikmaWJwLCBzaXplb2YoaWJwKSk7CisJCQkgICAgd3Jp dGUoeHBpcGVbMV0sIGlicCwgaWJjKTsKKwkJCX0KKwkJCWNrX3NuZG1zZygpOwkvKiBXYWl0IHRv IGJlIGtpbGxlZCAqLworCQkJLyogTk9UUkVBQ0hFRCAqLworCQkgICAgfQorCQl9CisjZW5kaWYg LyogQ0tfQVBDICovCisjZW5kaWYgLyogTk9FU0NTRVEgKi8KKworCQlmb3IgKGkgPSAwOyBpIDwg aW54Y291bnQ7IGkrKykgeyAvKiBMb29wIHRocnUgKi8KKwkJICAgIGMgPSBpbnhidWZbaV07CS8q IGlucHV0IGV4cGFuc2lvbiBidWZmZXIuLi4gKi8KKwkJICAgIGlmICgKKyNpZmRlZiBDS19BUEMK KwkJCSFhcGNhY3RpdmUJLyogSWdub3JlIEFQQyBzZXF1ZW5jZXMgKi8KKyNlbHNlCisJCQkxCisj ZW5kaWYgLyogQ0tfQVBDICovCisJCQkpIHsKKwkJCWMgJj0gY21kbXNrOwkvKiBBcHBseSBjb21t YW5kIG1hc2suICovCisJCQlpZiAoYyA9PSBDUiAmJiB0dF9jcmQpIHsgLyogU0VUIFRFUk0gQ1It RElTUExBIENSTEY/ICovCisJCQkgICAgY2tjcHV0YyhjKTsJLyogWWVzLCBvdXRwdXQgQ1IgKi8K KwkJCSAgICBpZiAoc2VzbG9nICYmICFzZXNzZnQpCisJCQkgICAgICBsb2djaGFyKChjaGFyKWMp OworCQkJICAgIGMgPSBMRjsJLyogYW5kIGluc2VydCBhIGxpbmVmZWVkICovCisJCQl9CisJCQlp ZiAoYyA9PSBMRiAmJiB0dF9sZmQpIHsgLyogU0VUIFRFUk0gQ1ItRElTUExBIENSTEY/ICovCisJ CQkgICAgY2tjcHV0YyhDUik7IC8qIFllcywgb3V0cHV0IENSICovCisJCQkgICAgaWYgKHNlc2xv ZyAmJiAhc2Vzc2Z0KSBsb2djaGFyKChjaGFyKUNSKTsKKwkJCX0KKwkJCWNrY3B1dGMoYyk7CS8q IFdyaXRlIGNoYXJhY3RlciB0byBzY3JlZW4gKi8KKwkJICAgIH0KKwkJICAgIGlmIChzZXNsb2cg JiYgIXNlc3NmdCkgLyogSGFuZGxlIHNlc3Npb24gbG9nICovCisJCSAgICAgIGxvZ2NoYXIoKGNo YXIpYyk7CisjaWZkZWYgQ0tfVFJJR0dFUgorCQkgICAgLyogQ2hlY2sgZm9yIHRyaWdnZXIgc3Ry aW5nICovCisJCSAgICBpZiAodHRfdHJpZ2dlclswXSkgaWYgKChpeCA9IGF1dG9leGl0Y2hrKChD SEFSKWMpKSA+IC0xKSB7CisJCQlja2NwdXRmKCk7CS8qIEZvcmNlIHNjcmVlbiB1cGRhdGUgKi8K KyNpZmRlZiBOT1NFVEJVRgorCQkJZmZsdXNoKHN0ZG91dCk7CS8qIEkgbWVhbiByZWFsbHkgZm9y Y2UgaXQgKi8KKyNlbmRpZiAvKiBOT1NFVEJVRiAqLworCQkJcGlwZW1zZyhDRVZfVFJJKTsgLyog U2VuZCB1cCB0cmlnZ2VyIGluZGljYXRpb24gKi8KKwkJCXdyaXRlKHhwaXBlWzFdLCAoY2hhciAq KSZpeCwgc2l6ZW9mKGl4KSk7IC8qIGluZGV4ICovCisJCQl3cml0ZSh4cGlwZVsxXSwgKGNoYXIg KikmaWJjLCBzaXplb2YoaWJjKSk7CisJCQlpZiAoaWJjID4gMCkgeworCQkJICAgIHdyaXRlKHhw aXBlWzFdLCAoY2hhciAqKSZpYnAsIHNpemVvZihpYnApKTsKKwkJCSAgICB3cml0ZSh4cGlwZVsx XSwgaWJwLCBpYmMpOworCQkJfQorCQkJZGVidWcoRjEwMCwiQ09OTkVDVCBjb25jbGQgdHJpZ2dl ciIsIiIsMCk7CisJCQlja19zbmRtc2coKTsJLyogV2FpdCB0byBiZSBraWxsZWQgKi8KKwkJCWFj dGl2ZSA9IDA7CS8qIFNob3VsZG4ndCBiZSBuZWNlc3NhcnkuLi4gKi8KKwkJCWJyZWFrOworCQkg ICAgfQorCQkgICAgLyogTk9UUkVBQ0hFRCAqLworI2VuZGlmIC8qIENLX1RSSUdHRVIgKi8KKwkJ fQorCSAgICB9CisjaWZkZWYgQU5ZWDI1CisJfQorI2VuZGlmIC8qIEFOWVgyNSAqLworICAgIH0K K30KKworCisvKiAgQyBPIE4gRSBDIFQgIC0tICBJbnRlcmFjdGl2ZSB0ZXJtaW5hbCBjb25uZWN0 aW9uICAqLworCitpbnQKK2NvbmVjdCgpIHsKKyAgICBpbnQJbjsJCQkvKiBHZW5lcmFsIHB1cnBv c2UgY291bnRlciAqLworICAgIGludCBpOwkJCS8qIEZvciBsb29wcy4uLiAqLworICAgIGludCBj OwkJCS8qIGMgaXMgYSBjaGFyYWN0ZXIsIGJ1dCBtdXN0IGJlIHNpZ25lZAorCQkJCSAgIGludGVn ZXIgdG8gcGFzcyB0aHJ1IC0xLCB3aGljaCBpcyB0aGUKKwkJCQkgICBtb2RlbSBkaXNjb25uZWN0 aW9uIHNpZ25hbCwgYW5kIGlzCisJCQkJICAgZGlmZmVyZW50IGZyb20gdGhlIGNoYXJhY3RlciAw Mzc3ICovCisgICAgaW50IGMyOwkJCS8qIEEgY29weSBvZiBjICovCisgICAgaW50IGNzYXZlOwkJ CS8qIEFub3RoZXIgY29weSBvZiBjICovCisjaWZuZGVmIE5PRVNDU0VRCisgICAgaW50IGFwY3Jj OworI2VuZGlmIC8qIE5PRVNDU0VRICovCisKKyAgICBpbnQgY29ucmV0ID0gMDsJCQkvKiBSZXR1 cm4gdmFsdWUgZnJvbSBjb25lY3QoKSAqLworICAgIGludCBtc2dmbGcgPSAwOworICAgIC8qIGpi Y2hrc3VtID0gLTFMOyAqLworICAgIGpic2V0ID0gMDsJCQkJLyogam1wX2J1ZiBub3Qgc2V0IHll dCwgZG9uJ3QgdXNlIGl0ICovCisgICAgZGVib2sgPSAxOworCisgICAgZGVidWcoRjEwMSwiQ09O TkVDVCBmb3JrIHNpZ25hbCIsIiIsQ0tfRk9SS19TSUcpOworICAgIGRlYnVnKEYxMDEsIkNPTk5F Q1QgZW50cnkgcGlkIiwiIixwaWQpOworCisgICAgbXNnZmxnID0gIXF1aWV0CisjaWZkZWYgQ0tf QVBDCisgICAgICAmJiAhYXBjYWN0aXZlCisjZW5kaWYgLyogQ0tfQVBDICovCisJOworLyoKKyAg VGhlIGZvbGxvd2luZyBpcyB0byBoYW5kbGUgYSBmb3JrIGxlZnQgYmVoaW5kIGlmIHdlIGV4aXQg Q09OTkVDVCBtb2RlCisgIHdpdGhvdXQga2lsbGluZyBpdCwgYW5kIHRoZW4gcmV0dXJuIHRvIENP Tk5FQ1QgbW9kZS4gIFRoaXMgaGFwcGVuZWQgaW4KKyAgSFAtVVgsIHdoZXJlIHRoZSBSZXNldCBr ZXkgd291bGQgcmFpc2UgU0lHSU5UIGV2ZW4gdGhvdWdoIFNJR0lOVCB3YXMgc2V0IHRvCisgIFNJ R19JR04uICBUaGUgY29kZSBiZWxvdyBmaXhlcyB0aGUgc3ltcHRvbTsgdGhlIHJlYWwgZml4IGlz IGluIHRoZSBtYWluCisgIFNJR0lOVCBoYW5kbGVyIChpZiBTSUdJTlQgc2hvd3MgdXAgZHVyaW5n IENPTk5FQ1QsIGp1c3QgcmV0dXJuIHJhdGhlciB0aGFuCisgIHRha2luZyB0aGUgbG9uZ2ptcCku CisqLworICAgIGlmIChwaWQpIHsJCQkJLyogVGhpcyBzaG91bGQgYmUgMCAqLworCWludCB4ID0g MDsKKwlkZWJ1ZyhGMTAxLCJDT05ORUNUIGVudHJ5IGtpbGxpbmcgc3RhbGUgcGlkIiwiIixwaWQp OworCXByaW50ZigiV0FSTklORzogT2xkIENPTk5FQ1QgZm9yayBzZWVtcyB0byBiZSBhY3RpdmUu XG4iKTsKKwlwcmludGYoIkF0dGVtcHRpbmcgdG8gcmVtb3ZlIGl0Li4uIik7CisjaWZkZWYgQkVP U09SQkVCT1gKKwl7CisJICAgIGxvbmcgcmV0X3ZhbDsKKwkgICAgeCA9IGtpbGwocGlkLFNJR0tJ TExUSFIpOyAvKiBLaWxsIGxvd2VyIGZvcmsgKi8KKwkgICAgd2FpdF9mb3JfdGhyZWFkIChwaWQs ICZyZXRfdmFsKTsKKwl9CisjZWxzZQorI2lmZGVmIFBsYW45CisJeCA9IGtpbGwocGlkLFNJR0tJ TEwpOwkJLyogS2lsbCBsb3dlciBmb3JrICovCisjZWxzZQorCXggPSBraWxsKHBpZCw5KTsKKyNl bmRpZiAvKiBQbGFuOSAqLworI2VuZGlmIC8qIEJFT1NPUkJFQk9YICovCisJd2FpdCgoV0FJVF9U ICopMCk7CQkvKiBXYWl0IHRpbGwgZ29uZS4gKi8KKwlpZiAoeCA8IDApIHsKKwkgICAgcHJpbnRm KCJFUlJPUjogRmFpbHVyZSB0byBraWxsIHBpZCAlZDogJXMsIGVycm5vPSVkXG4iLAorCQkgICAo aW50KSBwaWQsIGNrX2VycnN0cigpLCBlcnJubyk7CisJICAgIGRlYnVnKEYxMTEsIkNPTk5FQ1Qg ZXJyb3Iga2lsbGluZyBzdGFsZSBwaWQiLGNrX2VycnN0cigpLHBpZCk7CisJfQorCXBpZCA9IChQ SURfVCkgMDsKKwlwcmludGYoIlxuIik7CisgICAgfQorICAgIHNpZ25hbChDS19GT1JLX1NJRywg U0lHX0lHTik7CS8qIEluaXRpYWwgQ0tfRk9SS19TSUcgaGFuZGxpbmcsICovCisvKgorICBUaGUg Zm9sbG93aW5nIHR0aW1vZmYoKSBjYWxsIHNob3VsZCBub3QgYmUgbmVjZXNzYXJ5LCBidXQgZXZp ZGVudGx5IHRoZXJlCisgIGFyZSBjYXNlcyB3aGVyZSBhIHRpbWVyIGlzIGxlZnQgYWN0aXZlIGFu ZCB0aGVuIGdvZXMgb2ZmLCB0YWtpbmcgYSBsb25nam1wCisgIHRvIG5vd2hlcmUgYWZ0ZXIgdGhl IHByb2dyYW0ncyBzdGFjayBoYXMgY2hhbmdlZC4gIEluIGFueSBjYXNlLCB0aGlzIGlzCisgIHNh ZmUgYmVjYXVzZSB0aGUgQ09OTkVDVCBtb2R1bGUgdXNlcyBubyB0aW1lciBvZiBhbnkga2luZCwg YW5kIG5vIG90aGVyIHRpbWVyCisgIHNob3VsZCBiZSBhcm1lZCB3aGlsZSBLZXJtaXQgaXMgaW4g Q09OTkVDVCBtb2RlLgorKi8KKyAgICB0dGltb2ZmKCk7CQkJCS8qIFR1cm4gb2ZmIGFueSB0aW1l ciBpbnRlcnJ1cHRzICovCisKKyNpZmRlZiBDS19UUklHR0VSCisgICAgbWFrZXN0cigmdHJpZ2dl cnZhbCxOVUxMKTsJCS8qIFJlc2V0IHRyaWdnZXIgKi8KKyNlbmRpZiAvKiBDS19UUklHR0VSICov CisKKyAgICBpZiAoIWxvY2FsKSB7CisjaWZkZWYgTkVUQ09OTgorCXByaW50ZigiU29ycnksIHlv dSBtdXN0IFNFVCBMSU5FIG9yIFNFVCBIT1NUIGZpcnN0XG4iKTsKKyNlbHNlCisJcHJpbnRmKCJT b3JyeSwgeW91IG11c3QgU0VUIExJTkUgZmlyc3RcbiIpOworI2VuZGlmIC8qIE5FVENPTk4gKi8K Kwlnb3RvIGNvbnJldDA7CisgICAgfQorICAgIGlmIChzcGVlZCA8IDBMICYmIG5ldHdvcmsgPT0g MCAmJiB0dGZkZmxnID09IDApIHsKKwlwcmludGYoIlNvcnJ5LCB5b3UgbXVzdCBTRVQgU1BFRUQg Zmlyc3RcbiIpOworCWdvdG8gY29ucmV0MDsKKyAgICB9CisjaWZkZWYgVENQU09DS0VUCisgICAg aWYgKG5ldHdvcmsgJiYgKG5ldHR5cGUgIT0gTkVUX1RDUEIpCisjaWZkZWYgU1VOWDI1CisgICAg ICAgICYmIChuZXR0eXBlICE9IE5FVF9TWDI1KQorI2VuZGlmIC8qIFNVTlgyNSAqLworI2lmZGVm IElCTVgyNQorCSYmIChuZXR0eXBlICE9IE5FVF9JWDI1KQorI2VuZGlmIC8qIElCTVgyNSAqLwor I2lmZGVmIE5FVENNRAorICAgICAgICAmJiAobmV0dHlwZSAhPSBORVRfQ01EKQorI2VuZGlmIC8q IE5FVENNRCAqLworI2lmZGVmIE5FVFBUWQorICAgICAgICYmIChuZXR0eXBlICE9IE5FVF9QVFkp CisjZW5kaWYgLyogTkVUUFRZICovCisgICAgKSB7CisJcHJpbnRmKCJTb3JyeSwgbmV0d29yayB0 eXBlIG5vdCBzdXBwb3J0ZWRcbiIpOworCWdvdG8gY29ucmV0MDsKKyAgICB9CisjZW5kaWYgLyog VENQU09DS0VUICovCisKKyNpZmRlZiBEWU5BTUlDCisgICAgaWYgKCFpYnVmKSB7CisJaWYgKCEo aWJ1ZiA9IG1hbGxvYyhJQlVGTCsxKSkpIHsgLyogQWxsb2NhdGUgaW5wdXQgbGluZSBidWZmZXIg Ki8KKwkgICAgcHJpbnRmKCJTb3JyeSwgQ09OTkVDVCBpbnB1dCBidWZmZXIgY2FuJ3QgYmUgYWxs b2NhdGVkXG4iKTsKKwkgICAgZ290byBjb25yZXQwOworCX0gZWxzZSB7CisJICAgIGlicCA9IGli dWY7CisJICAgIGliYyA9IDA7CisJfQorICAgIH0KKyAgICBpZiAoIW9idWYpIHsKKwlpZiAoIShv YnVmID0gbWFsbG9jKE9CVUZMKzEpKSkgeyAgICAvKiBBbGxvY2F0ZSBvdXRwdXQgbGluZSBidWZm ZXIgKi8KKwkgICAgcHJpbnRmKCJTb3JyeSwgQ09OTkVDVCBvdXRwdXQgYnVmZmVyIGNhbid0IGJl IGFsbG9jYXRlZFxuIik7CisJICAgIGdvdG8gY29ucmV0MDsKKwl9IGVsc2UgeworCSAgICBvYnAg PSBvYnVmOworCSAgICBvYmMgPSAwOworCX0KKyAgICB9CisgICAgaWYgKCFrYnVmKSB7CisJaWYg KCEoa2J1ZiA9IG1hbGxvYyhLQlVGTCsxKSkpIHsgLyogQWxsb2NhdGUga2V5Ym9hcmQgaW5wdXQg YnVmZmVyICovCisJICAgIHByaW50ZigiU29ycnksIENPTk5FQ1Qga2V5Ym9hcmQgYnVmZmVyIGNh bid0IGJlIGFsbG9jYXRlZFxuIik7CisJICAgIGdvdG8gY29ucmV0MDsKKwl9CisgICAgfQorICAg IGlmICghdGVtcCkgeworCWlmICghKHRlbXAgPSBtYWxsb2MoVE1QTEVOKzEpKSkgeyAvKiBBbGxv Y2F0ZSB0ZW1wb3JhcnkgYnVmZmVyICovCisJICAgIHByaW50ZigiU29ycnksIENPTk5FQ1QgdGVt cG9yYXJ5IGJ1ZmZlciBjYW4ndCBiZSBhbGxvY2F0ZWRcbiIpOworCSAgICBnb3RvIGNvbnJldDA7 CisJfQorICAgIH0KKyNlbHNlCisjaWZkZWYgQ09NTUVOVAorICAgIGlicCA9IGlidWY7CisgICAg aWJjID0gMDsKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgb2JwID0gb2J1ZjsKKyAgICBvYmMg PSAwOworI2VuZGlmIC8qIERZTkFNSUMgKi8KKworICAgIGticCA9IGtidWY7CQkJCS8qIEFsd2F5 cyBjbGVhciB0aGVzZS4gKi8KKyAgICAqa2JwID0gTlVMOwkJCQkvKiBObyBuZWVkIHRvIHByZXNl cnZlIHRoZW0gYmV0d2VlbiAqLworICAgIGtiYyA9IDA7CQkJCS8qIENPTk5FQ1Qgc2Vzc2lvbnMu ICovCisKKyNpZmRlZiBERUJVRworICAgIGlmIChkZWJsb2cpIHsKKwlkZWJ1ZyhGMTAxLCJDT05O RUNUIGNvbmVjdCBlbnRyeSB0dHlmZCIsIiIsdHR5ZmQpOworCWRlYnVnKEYxMDEsIkNPTk5FQ1Qg Y29uZWN0IGVudHJ5IGliYyIsIiIsaWJjKTsKKwlkZWJ1ZyhGMTAxLCJDT05ORUNUIGNvbmVjdCBl bnRyeSBvYmMiLCIiLG9iYyk7CisJZGVidWcoRjEwMSwiQ09OTkVDVCBjb25lY3QgZW50cnkga2Jj IiwiIixrYmMpOworI2lmZGVmIENLX1RSSUdHRVIKKwlkZWJ1ZyhGMTEwLCJDT05ORUNUIGNvbmVj dCB0cmlnZ2VyIix0dF90cmlnZ2VyWzBdLDApOworI2VuZGlmIC8qIENLX1RSSUdHRVIgKi8KKwlp ZiAodHR5ZmQgPiAtMSkgeworCSAgICBuID0gdHRjaGsoKTsKKwkgICAgZGVidWcoRjEwMSwiQ09O TkVDVCBjb25lY3QgZW50cnkgdHRjaGsiLCIiLG4pOworCX0KKyAgICB9CisjZW5kaWYgLyogREVC VUcgKi8KKworICAgIGlmICh0dHlmZCA8IDApIHsJCQkvKiBJZiBjb21tdW5pY2F0aW9uIGRldmlj ZSBub3Qgb3BlbiAqLworCWRlYnVnKEYxMDEsIkNPTk5FQ1QgdHRucHJvdG8iLCIiLHR0bnByb3Rv KTsKKwlkZWJ1ZyhGMTExLCJDT05ORUNUIG9wZW5pbmciLHR0bmFtZSwwKTsgLyogT3BlbiBpdCBu b3cgKi8KKwlpZiAodHRvcGVuKHR0bmFtZSwKKwkJICAgJmxvY2FsLAorCQkgICBuZXR3b3JrID8g LW5ldHR5cGUgOiBtZG10eXAsCisJCSAgIDAKKwkJICAgKSA8IDApIHsKKwkgICAgY2ttYWttc2co dGVtcCxUTVBMRU4sIlNvcnJ5LCBjYW4ndCBvcGVuICIsdHRuYW1lLE5VTEwsTlVMTCk7CisJICAg IHBlcnJvcih0ZW1wKTsKKwkgICAgZGVidWcoRjExMCwiQ09OTkVDVCBvcGVuIGZhaWx1cmUiLHR0 bmFtZSwwKTsKKwkgICAgZ290byBjb25yZXQwOworCX0KKyNpZmRlZiBJS1NfT1BUSU9OCisJLyog SWYgcGVlciBpcyBpbiBLZXJtaXQgc2VydmVyIG1vZGUsIHJldHVybiBub3cuICovCisJaWYgKFRF TE9QVF9TQihURUxPUFRfS0VSTUlUKS5rZXJtaXQudV9zdGFydCkKKwkgIHJldHVybigwKTsKKyNl bmRpZiAvKiBJS1NfT1BUSU9OICovCisgICAgfQorICAgIGRvaGFuZ3VwID0gMDsJCQkvKiBIYW5n dXAgbm90IHJlcXVlc3RlZCB5ZXQgKi8KKyNpZmRlZiBBTllYMjUKKyAgICBkb3gyNWNsciA9IDA7 CQkJLyogWC4yNSBjbGVhciBub3QgcmVxdWVzdGVkIHlldCAqLworI2VuZGlmIC8qIEFOWVgyNSAq LworCisgICAgaWYgKG1zZ2ZsZykgeworI2lmZGVmIE5FVENPTk4KKwlpZiAobmV0d29yaykgewor CSAgICBpZiAodHRwaXBlKQorCSAgICAgIHByaW50ZigiQ29ubmVjdGluZyB2aWEgY29tbWFuZCBc IiVzXCIiLHR0bmFtZSk7CisJICAgIGVsc2UKKwkgICAgICBwcmludGYoIkNvbm5lY3RpbmcgdG8g aG9zdCAlcyIsdHRuYW1lKTsKKyNpZmRlZiBBTllYMjUKKwkgICAgaWYgKG5ldHR5cGUgPT0gTkVU X1NYMjUgfHwgbmV0dHlwZSA9PSBORVRfSVgyNSkKKwkgICAgICBwcmludGYoIiwgTGluayBJRCAl ZCwgTENOICVkIixsaW5raWQsbGNuKTsKKyNlbmRpZiAvKiBBTllYMjUgKi8KKwl9IGVsc2Ugewor I2VuZGlmIC8qIE5FVENPTk4gKi8KKwkgICAgcHJpbnRmKCJDb25uZWN0aW5nIHRvICVzIix0dG5h bWUpOworCSAgICBpZiAoc3BlZWQgPiAtMUwpIHByaW50ZigiLCBzcGVlZCAlbGQiLHNwZWVkKTsK KyNpZmRlZiBORVRDT05OCisJfQorI2VuZGlmIC8qIE5FVENPTk4gKi8KKwlpZiAodHRfZXNjYXBl KSB7CisJICAgIHByaW50ZigiXHJcbiIpOworCSAgICBzaG9lc2MoZXNjYXBlKTsKKwkgICAgcHJp bnRmKCJUeXBlIHRoZSBlc2NhcGUgY2hhcmFjdGVyIGZvbGxvd2VkIGJ5IEMgdG8gZ2V0IGJhY2ss XHJcbiIpOworCSAgICBwcmludGYoIm9yIGZvbGxvd2VkIGJ5ID8gdG8gc2VlIG90aGVyIG9wdGlv bnMuXHJcbiIpOworCX0gZWxzZSB7CisJICAgIHByaW50ZigiLlxyXG5cbkVTQ0FQRSBDSEFSQUNU RVIgSVMgRElTQUJMRURcclxuXG4iKTsKKwl9CisJaWYgKHNlc2xvZykgeworCSAgICBleHRlcm4g aW50IHNsb2d0czsKKwkgICAgY2hhciAqIHMgPSAiIjsKKwkgICAgc3dpdGNoIChzZXNzZnQpIHsK KwkgICAgICBjYXNlIFhZRlRfRDoKKwkJcyA9ICJkZWJ1ZyI7IGJyZWFrOworCSAgICAgIGNhc2Ug WFlGVF9UOgorCQlzID0gc2xvZ3RzID8gInRpbWVzdGFtcGVkLXRleHQiIDogInRleHQiOyBicmVh azsKKwkgICAgICBkZWZhdWx0OgorCQlzID0gImJpbmFyeSI7CisJICAgIH0KKwkgICAgcHJpbnRm KCJTZXNzaW9uIExvZzogJXMsICVzXHJcbiIsc2VzZmlsLHMpOworCX0KKwlpZiAoZGVic2VzKSBw cmludGYoIkRlYnVnZ2luZyBEaXNwbGF5Li4uKVxyXG4iKTsKKyAgICAgICAgcHJpbnRmKCItLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiIpOwor CWZmbHVzaChzdGRvdXQpOworICAgIH0KKworLyogQ29uZGl0aW9uIGNvbnNvbGUgdGVybWluYWwg YW5kIGNvbW11bmljYXRpb24gbGluZSAqLworCisgICAgaWYgKGNvbmJpbigoY2hhcillc2NhcGUp IDwgMCkgeworCXByaW50ZigiU29ycnksIGNhbid0IGNvbmRpdGlvbiBjb25zb2xlIHRlcm1pbmFs XG4iKTsKKwlnb3RvIGNvbnJldDA7CisgICAgfQorICAgIGRlYnVnKEYxMDEsIkNPTk5FQ1QgY21h c2siLCIiLGNtYXNrKTsKKyAgICBkZWJ1ZyhGMTAxLCJDT05ORUNUIGNtZG1zayIsIiIsY21kbXNr KTsKKyAgICBkZWJ1ZyhGMTAxLCJDT05ORUNUIHNwZWVkIGJlZm9yZSB0dHZ0IiwiIixzcGVlZCk7 CisgICAgaWYgKChuID0gdHR2dChzcGVlZCxmbG93KSkgPCAwKSB7CS8qIEVudGVyICJ2aXJ0dWFs IHRlcm1pbmFsIiBtb2RlICovCisJaWYgKCFuZXR3b3JrKSB7CisJICAgIGRlYnVnKEYxMDEsIkNP Tk5FQ1QgdHR2dCIsIiIsbik7CisJICAgIHR0aGFuZygpOwkJCS8qIEhhbmcgdXAgYW5kIGNsb3Nl IHRoZSBkZXZpY2UuICovCisJICAgIHR0Y2xvcygwKTsKKwkgICAgZG9sb2dlbmQoKTsKKwkgICAg aWYgKHR0b3Blbih0dG5hbWUsCQkvKiBPcGVuIGl0IGFnYWluLi4uICovCisJCSAgICAgICAmbG9j YWwsCisJCSAgICAgICBuZXR3b3JrID8gLW5ldHR5cGUgOiBtZG10eXAsCisJCSAgICAgICAwCisJ CSAgICAgICApIDwgMCkgeworCQlja21ha21zZyh0ZW1wLFRNUExFTiwiU29ycnksIGNhbid0IHJl b3BlbiAiLHR0bmFtZSxOVUxMLE5VTEwpOworCQlwZXJyb3IodGVtcCk7CisJCWdvdG8gY29ucmV0 MDsKKwkgICAgfQorI2lmZGVmIElLU19PUFRJT04KKwkgICAgaWYgKFRFTE9QVF9TQihURUxPUFRf S0VSTUlUKS5rZXJtaXQudV9zdGFydCkKKwkgICAgICByZXR1cm4oMCk7CisjZW5kaWYgLyogSUtT X09QVElPTiAqLworCSAgICBpZiAodHR2dChzcGVlZCxmbG93KSA8IDApIHsJLyogVHJ5IHZpcnR1 YWwgdGVybWluYWwgbW9kZSBhZ2Fpbi4gKi8KKwkJY29ucmVzKCk7CQkvKiBGYWlsdXJlIHRoaXMg dGltZSBpcyBmYXRhbC4gKi8KKwkJcHJpbnRmKCJTb3JyeSwgQ2FuJ3QgY29uZGl0aW9uIGNvbW11 bmljYXRpb24gbGluZVxuIik7CisJCWdvdG8gY29ucmV0MDsKKwkgICAgfQorCX0KKyAgICB9Cisg ICAgZGVidWcoRjEwMSwiQ09OTkVDVCB0dHZ0IG9rLCBlc2NhcGUiLCIiLGVzY2FwZSk7CisKKyAg ICBkZWJ1ZyhGMTAxLCJDT05ORUNUIGNhcnJpZXItd2F0Y2giLCIiLGNhcnJpZXIpOworICAgIGlm ICgoIW5ldHdvcmsgCisjaWZkZWYgVE5fQ09NUE9SVAorCSAgfHwgaXN0bmNvbXBvcnQoKQorI2Vu ZGlmIC8qIFROX0NPTVBPUlQgKi8KKwkgKSAmJiAoY2FycmllciAhPSBDQVJfT0ZGKSkgeworCWlu dCB4OworCXggPSB0dGdtZG0oKTsKKwlkZWJ1ZyhGMTAwLCJDT05ORUNUIHR0Z21kbSIsIiIseCk7 CisJaWYgKCh4ID4gLTEpICYmICEoeCAmIEJNX0RDRCkpIHsKKyNpZm5kZWYgTk9ISU5UUworCSAg ICBleHRlcm4gaW50IGhpbnRzOworI2VuZGlmIC8qIE5PSElOVFMgKi8KKwkgICAgZGVidWcoRjEw MCwiQ09OTkVDVCB0dGdtZG0gQ0QgdGVzdCBmYWlscyIsIiIseCk7CisJICAgIGNvbnJlcygpOwor CSAgICBwcmludGYoIj9DYXJyaWVyIHJlcXVpcmVkIGJ1dCBub3QgZGV0ZWN0ZWQuXG4iKTsKKyNp Zm5kZWYgTk9ISU5UUworCSAgICBpZiAoIWhpbnRzKQorCSAgICAgIHJldHVybigwKTsKKwkgICAg cHJpbnRmKCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIik7CisJICAgIHBy aW50ZigiIEhpbnQ6IFRvIENPTk5FQ1QgdG8gYSBzZXJpYWwgZGV2aWNlIHRoYXRcbiIpOworCSAg ICBwcmludGYoIiBpcyBub3QgcHJlc2VudGluZyB0aGUgQ2FycmllciBEZXRlY3Qgc2lnbmFsLFxu Iik7CisJICAgIHByaW50ZigiIGZpcnN0IHRlbGwgQy1LZXJtaXQgdG86XG5cbiIpOworCSAgICBw cmludGYoIiAgIFNFVCBDQVJSSUVSLVdBVENIIE9GRlxuXG4iKTsKKwkgICAgcHJpbnRmKCIqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG4iKTsKKyNlbmRpZiAvKiBOT0hJTlRT ICovCisJICAgIGdvdG8gY29ucmV0MDsKKwl9CisJZGVidWcoRjEwMCwiQ09OTkVDVCB0dGdtZG0g b2siLCIiLDApOworICAgIH0KKyNpZm5kZWYgTk9DU0VUUworLyogU2V0IHVwIGNoYXJhY3RlciBz ZXQgdHJhbnNsYXRpb25zICovCisKKyAgICB1bmljb2RlID0gMDsJCQkvKiBBc3N1bWUgVW5pY29k ZSB3b24ndCBiZSBpbnZvbHZlZCAqLworICAgIHRjcyA9IDA7CQkJCS8qICJUcmFuc2ZlciIgb3Ig Ik90aGVyIiBjaGFyc2V0ICovCisgICAgc3hvID0gcnhvID0gTlVMTDsJCQkvKiBJbml0aWFsaXpl IGJ5dGUtdG8tYnl0ZSBmdW5jdGlvbnMgKi8KKyAgICBzeGkgPSByeGkgPSBOVUxMOworICAgIGlm ICh0Y3NyICE9IHRjc2wpIHsJCQkvKiBSZW1vdGUgYW5kIGxvY2FsIHNldHMgZGlmZmVyLi4uICov CisjaWZkZWYgVU5JQ09ERQorCWlmICh0Y3NyID09IEZDX1VURjggfHwJCS8qIFJlbW90ZSBjaGFy c2V0IGlzIFVURi04ICovCisJICAgIHRjc2wgPT0gRkNfVVRGOCkgewkJLyogb3IgbG9jYWwgb25l IGlzLiAqLworCSAgICB4dWYgPSB4bF91ZmNbdGNzbF07CQkvKiBJbmNvbWluZyBVbmljb2RlIHRv IGxvY2FsICovCisJICAgIGlmICh4dWYgfHwgdGNzbCA9PSBGQ19VVEY4KSB7CisJCXRjcyA9ICh0 Y3NyID09IEZDX1VURjgpID8gdGNzbCA6IHRjc3I7IC8qIFRoZSAib3RoZXIiIHNldCAqLworCQl4 ZnUgPSB4bF9mY3VbdGNzXTsJLyogTG9jYWwgYnl0ZSB0byByZW1vdGUgVW5pY29kZSAqLworCQlp ZiAoeGZ1KQorCQkgIHVuaWNvZGUgPSAodGNzciA9PSBGQ19VVEY4KSA/IDEgOiAyOworCSAgICB9 CisJICAgIHRjc3NpemUgPSBmY3NpbmZvW3Rjc10uc2l6ZTsgLyogU2l6ZSBvZiBvdGhlciBjaGFy YWN0ZXIgc2V0LiAqLworCX0gZWxzZSB7CisjZW5kaWYgLyogVU5JQ09ERSAqLworCSAgICB0Y3Mg PSBnZXR0Y3ModGNzcix0Y3NsKTsJLyogR2V0IGludGVybWVkaWF0ZSBzZXQuICovCisJICAgIHN4 byA9IHhsc1t0Y3NdW3Rjc2xdOwkvKiB0cmFuc2xhdGlvbiBmdW5jdGlvbiAqLworCSAgICByeG8g PSB4bHJbdGNzXVt0Y3NyXTsJLyogcG9pbnRlcnMgZm9yIG91dHB1dCBmdW5jdGlvbnMgKi8KKwkg ICAgc3hpID0geGxzW3Rjc11bdGNzcl07CS8qIGFuZCBmb3IgaW5wdXQgZnVuY3Rpb25zLiAqLwor CSAgICByeGkgPSB4bHJbdGNzXVt0Y3NsXTsKKyNpZmRlZiBVTklDT0RFCisJfQorI2VuZGlmIC8q IFVOSUNPREUgKi8KKyAgICB9CisvKgorICBUaGlzIGlzIHRvIHByZXZlbnQgdXNlIG9mIHptc3R1 ZmYoKSBhbmQgemRzdHVmZigpIGJ5IHRyYW5zbGF0aW9uIGZ1bmN0aW9ucy4KKyAgVGhleSBvbmx5 IHdvcmsgd2l0aCBkaXNrIGkvbywgbm90IHdpdGggY29tbXVuaWNhdGlvbiBpL28uICBMdWNraWx5 IFJ1c3NpYW4KKyAgdHJhbnNsYXRpb24gZnVuY3Rpb25zIGRvbid0IGRvIGFueSBzdHVmZmluZy4u LgorKi8KKyAgICBsYW5nc3YgPSBsYW5ndWFnZTsKKyNpZm5kZWYgTk9DWVJJTAorICAgIGlmIChs YW5ndWFnZSAhPSBMX1JVU1NJQU4pCisjZW5kaWYgLyogTk9DWVJJTCAqLworICAgICAgbGFuZ3Vh Z2UgPSBMX1VTQVNDSUk7CisKKyNpZmRlZiBDT01NRU5UCisjaWZkZWYgREVCVUcKKyAgICBpZiAo ZGVibG9nKSB7CisJZGVidWcoRjEwMSwiQ09OTkVDVCB0Y3MiLCIiLHRjcyk7CisJZGVidWcoRjEw MSwiQ09OTkVDVCB0Y3NsIiwiIix0Y3NsKTsKKwlkZWJ1ZyhGMTAxLCJDT05ORUNUIHRjc3IiLCIi LHRjc3IpOworCWRlYnVnKEYxMDEsIkNPTk5FQ1QgZmNzaW5mb1t0Y3NsXS5zaXplIiwiIixmY3Np bmZvW3Rjc2xdLnNpemUpOworCWRlYnVnKEYxMDEsIkNPTk5FQ1QgZmNzaW5mb1t0Y3NyXS5zaXpl IiwiIixmY3NpbmZvW3Rjc3JdLnNpemUpOworCWRlYnVnKEYxMDEsIkNPTk5FQ1QgdW5pY29kZSIs IiIsdW5pY29kZSk7CisgICAgfQorI2VuZGlmIC8qIERFQlVHICovCisjZW5kaWYgLyogQ09NTUVO VCAqLworCisjaWZkZWYgQ0tfWFlaCisjaWZuZGVmIFhZWl9JTlRFUk5BTAorICAgIHsKKwlleHRl cm4gaW50IGJpbmFyeTsJCS8qIFNlZSBhYm91dCBaTU9ERU0gYXV0b2Rvd25sb2FkcyAqLworCWNo YXIgKiBzOworCXMgPSBiaW5hcnkgPyBwdGFiW1BST1RPX1pdLnBfYl9yY21kIDogcHRhYltQUk9U T19aXS5wX3RfcmNtZDsKKwlpZiAoIXMpIHMgPSAiIjsKKwl6bWRsb2sgPSAoKnMgIT0gTlVMKTsJ CS8qIE9LIGlmIHdlIGhhdmUgZXh0ZXJuYWwgY29tbWFuZHMgKi8KKyAgICB9CisjZW5kaWYgLyog WFlaX0lOVEVSTkFMICovCisjZW5kaWYgLyogQ0tfWFlaICovCisKKyNpZm5kZWYgTk9FU0NTRVEK Ky8qCisgIFdlIG5lZWQgdG8gYWN0aXZhdGUgdGhlIGVzY2FwZS1zZXF1ZW5jZSByZWNvZ25pdGlv biBmZWF0dXJlIHdoZW46CisgICAoYSkgdHJhbnNsYXRpb24gaXMgZWxlY3RlZCwgQU5ECisgICAo YikgdGhlIGxvY2FsIGFuZC9vciByZW1vdGUgc2V0IGlzIGEgNy1iaXQgc2V0IG90aGVyIHRoYW4g VVMgQVNDSUkuCisgIE9yOgorICAgU0VUIFRFUk1JTkFMIEFQQyBpcyBub3QgT0ZGIChoYW5kbGVk IGluIHRoZSBuZXh0IHN0YXRlbWVudCkuCisqLworICAgIGVzY3NlcSA9ICh0Y3MgIT0gVENfVFJB TlNQKSAmJgkvKiBOb3QgdHJhbnNwYXJlbnQgKi8KKyAgICAgIChmY3NpbmZvW3Rjc2xdLnNpemUg PT0gMTI4IHx8IGZjc2luZm9bdGNzcl0uc2l6ZSA9PSAxMjgpICYmIC8qIDcgYml0cyAqLworCShm Y3NpbmZvW3Rjc2xdLmNvZGUgIT0gRkNfVVNBU0NJSSk7IC8qIEJ1dCBub3QgQVNDSUkgKi8KKyNl bmRpZiAvKiBOT0VTQ1NFUSAqLworI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKworI2lmbmRlZiBOT0VT Q1NFUQorI2lmZGVmIENLX0FQQworICAgIGVzY3NlcSA9IGVzY3NlcSB8fCAoYXBjc3RhdHVzICYg QVBDX09OKTsKKyAgICBhcGNhY3RpdmUgPSAwOwkJCS8qIEFuIEFQQyBjb21tYW5kIGlzIG5vdCBh Y3RpdmUgKi8KKyAgICBhcGNsZW5ndGggPSAwOwkJCS8qIC4uLiAqLworI2VuZGlmIC8qIENLX0FQ QyAqLworICAgIGluZXNjID0gRVNfTk9STUFMOwkJCS8qIEluaXRpYWwgc3RhdGUgb2YgcmVjb2du aXplciAqLworICAgIGRlYnVnKEYxMDEsIkNPTk5FQ1QgZXNjc2VxIiwiIixlc2NzZXEpOworI2Vu ZGlmIC8qIE5PRVNDU0VRICovCisKKyAgICBwYXJlbnRfaWQgPSBnZXRwaWQoKTsJCS8qIEdldCBw YXJlbnQncyBwaWQgZm9yIHNpZ25hbGxpbmcgKi8KKyAgICBkZWJ1ZyhGMTAxLCJDT05ORUNUIHBh cmVudCBwaWQiLCIiLHBhcmVudF9pZCk7CisKKyAgICBpZiAoeHBpcGVbMF0gPiAtMSkJCQkvKiBJ ZiBvbGQgcGlwZSBoYW5naW5nIGFyb3VuZCwgY2xvc2UgKi8KKyAgICAgIGNsb3NlKHhwaXBlWzBd KTsKKyAgICB4cGlwZVswXSA9IC0xOworICAgIGlmICh4cGlwZVsxXSA+IC0xKQorICAgICAgY2xv c2UoeHBpcGVbMV0pOworICAgIHhwaXBlWzFdID0gLTE7CisgICAgZ290ZXJyID0gMDsJCQkJLyog RXJyb3IgZmxhZyBmb3IgcGlwZSAmIGZvcmsgKi8KKyAgICBpZiAocGlwZSh4cGlwZSkgIT0gMCkg ewkJLyogQ3JlYXRlIG5ldyBwaXBlIHRvIHBhc3MgaW5mbyAqLworCXBlcnJvcigiQ2FuJ3QgbWFr ZSBwaXBlIik7CS8qIGJldHdlZW4gZm9ya3MuICovCisJZGVidWcoRjEwMSwiQ09OTkVDVCBwaXBl IGVycm9yIiwiIixlcnJubyk7CisJZ290ZXJyID0gMTsKKyAgICB9IGVsc2UKKyNpZmRlZiBCRU9T T1JCRUJPWAorICAgIHsKKyAgICAgICAgcGlkID0gc3Bhd25fdGhyZWFkKGNvbmNsZCwgIkxvd2Vy IEZvcmsiLCBCX05PUk1BTF9QUklPUklUWSwgTlVMTCk7CisgICAgICAgIHJlc3VtZV90aHJlYWQo cGlkKTsKKyAgICB9CisjZWxzZQorICAgIGlmICgocGlkID0gZm9yaygpKSA9PSAoUElEX1QpIC0x KSB7IC8qIFBpcGUgT0ssIG1ha2UgcG9ydCBmb3JrLiAqLworCXBlcnJvcigiQ2FuJ3QgbWFrZSBw b3J0IGZvcmsiKTsKKwlkZWJ1ZyhGMTAxLCJDT05ORUNUIGZvcmsgZXJyb3IiLCIiLGVycm5vKTsK Kwlnb3RlcnIgPSAxOworICAgIH0KKyNlbmRpZiAvKiBCRU9TT1JCRUJPWCAqLworICAgIGRlYnVn KEYxMDEsIkNPTk5FQ1QgY3JlYXRlZCBmb3JrLCBwaWQiLCIiLHBpZCk7CisgICAgaWYgKGdvdGVy cikgewkJCS8qIEZhaWxlZCB0byBtYWtlIHBpcGUgb3IgZm9yayAqLworCWNvbnJlcygpOwkJCS8q IFJlc2V0IHRoZSBjb25zb2xlLiAqLworCWlmIChtc2dmbGcpIHsKKwkgICAgcHJpbnRmKCJcclxu Q29tbXVuaWNhdGlvbnMgZGlzY29ubmVjdCAoQmFjayBhdCAlcylcclxuIiwKKwkJICAgKm15aG9z dCA/CisJCSAgIG15aG9zdCA6CisjaWZkZWYgVU5JWAorCQkgICAibG9jYWwgVU5JWCBzeXN0ZW0i CisjZWxzZQorCQkgICAibG9jYWwgc3lzdGVtIgorI2VuZGlmIC8qIFVOSVggKi8KKwkJICAgKTsK Kwl9CisJcHJpbnRmKCJcbiIpOworCXdoYXQgPSBXX05PVEhJTkc7CQkvKiBTbyBjb25zb2xlIG1v ZGVzIGFyZSBzZXQgcmlnaHQuICovCisjaWZuZGVmIE5PQ1NFVFMKKwlsYW5ndWFnZSA9IGxhbmdz djsJCS8qIFJlc3RvcmUgbGFuZ3VhZ2UgKi8KKyNlbmRpZiAvKiBOT0NTRVRTICovCisJcGFyZW50 X2lkID0gKFBJRF9UKSAwOwkJLyogQ2xlYW4gdXAgKi8KKwlnb3RvIGNvbnJldDE7CisgICAgfQor ICAgIGRlYnVnKEYxMDEsIkNPTk5FQ1QgZm9yayBwaWQiLCIiLHBpZCk7CisKKy8qIFVwcGVyIGZv cmsgKEtFWUIgZm9yaykgcmVhZHMga2V5c3Ryb2tlcyBhbmQgc2VuZHMgdGhlbSBvdXQuICovCisK KyAgICBpZiAocGlkKSB7CQkJCS8qIHBpZCAhPSAwLCBzbyBJIGFtIHRoZSB1cHBlciBmb3JrLiAq LworLyoKKyAgQmVmb3JlIGRvaW5nIGFueXRoaW5nIHNpZ25pZmljYW50LCB0aGUgY2hpbGQgZm9y ayBtdXN0IHdhaXQgZm9yIGEgZ28tYWhlYWQKKyAgY2hhcmFjdGVyIGZyb20geHBpcGVbMF0uICBC ZWZvcmUgc3RhcnRpbmcgdG8gd2FpdCwgd2UgaGF2ZSBlbm91Z2ggdGltZSB0bworICBjbGVhciBi dWZmZXJzIGFuZCBzZXQgdXAgdGhlIHNpZ25hbCBoYW5kbGVyLiAgV2hlbiBkb25lIHdpdGggdGhp cywgd2Ugd2lsbAorICBhbGxvdyB0aGUgY2hpbGQgdG8gY29udGludWUgYnkgc2F0aXNmeWluZyBp dHMgcGVuZGluZyByZWFkLgorCisgIFJlbWVtYmVyIHRoZSBjaGlsZCBhbmQgcGFyZW50IGhhdmUg c2VwYXJhdGUgYWRkcmVzcyBzcGFjZS4gIFRoZSBjaGlsZCBoYXMKKyAgaXRzIG93biBjb3B5IG9m IGlucHV0IGJ1ZmZlcnMsIHNvIHdlIG11c3QgY2xlYXIgdGhlIGlucHV0IGJ1ZmZlcnMgaW4gdGhl CisgIHBhcmVudC4gIE90aGVyd2lzZSBzdHJhbmdlIGVmZmVjdHMgbWF5IG9jY3VyLCBsaWtlIGNo dW5rcyBvZiBjaGFyYWN0ZXJzCisgIHJlcGVhdGVkbHkgZWNob2VkIG9uIHRlcm1pbmFsIHNjcmVl bi4gIFRoZSBjaGlsZCBwcm9jZXNzIGlzIGRlc2lnbmVkIHRvCisgIGVtcHR5IGl0cyBpbnB1dCBi dWZmZXJzIGJ5IHJlYWRpbmcgYWxsIGF2YWlsYWJsZSBjaGFyYWN0ZXJzIGFuZCBlaXRoZXIKKyAg ZWNob2luZyB0aGVtIG9uIHRoZSB0ZXJtaW5hbCBzY3JlZW4gb3Igc2F2aW5nIHRoZW0gZm9yIGZ1 dHVyZSB1c2UgaW4gdGhlCisgIHBhcmVudC4gIFRoZSBsYXR0ZXIgY2FzZSBoYXBwZW5zIGR1cmlu ZyBBUEMgcHJvY2Vzc2luZyAtIHNlZSB0aGUgY29kZSBhcm91bmQKKyAgQ0VWX0FQQyBvY2N1cnJl bmNlcyB0byBzZWUgaG93IHRoZSBjaGlsZCBwYXNzZXMgaXRzIGlidWYgZXRjIHRvIHBhcmVudCB2 aWEKKyAgeHBpcGUsIGZvciBwcmVzZXJ2YXRpb24gdW50aWwgdGhlIG5leHQgZW50cnkgdG8gdGhp cyBtb2R1bGUsIHRvIGVuc3VyZSB0aGF0CisgIG5vIGNoYXJhY3RlcnMgYXJlIGxvc3QgYmV0d2Vl biBDT05ORUNUIHNlc3Npb25zLgorKi8KKworLyoKKyAgVGhpcyBvbmUgbmVlZHMgYSBiaXQgb2Yg ZXh0cmEgZXhwbGFuYXRpb24uLi4gIEluIGFkZGl0aW9uIHRvIHRoZSBDT05ORUNUCisgIG1vZHVs ZSdzIG93biBidWZmZXJzLCB3aGljaCBhcmUgY29tbXVuaWNhdGVkIGFuZCBzeW5jaHJvbml6ZWQg dmlhIHhwaXBlLAorICB0aGUgbG93LWxldmVsIFVOSVggY29tbXVuaWNhdGlvbiByb3V0aW5lcyAo dHRpbmMsIHR0eGluLCBldGMpIGFyZSBhbHNvCisgIGJ1ZmZlcmVkLCBzdGF0aWNhbGx5LCBpbiB0 aGUgY2t1dGlvLmMgbW9kdWxlLiAgQnV0IHdoZW4gdGhlIHR3byBDT05ORUNUCisgIGZvcmtzIHNw bGl0IG9mZiwgdGhlIGxvd2VyIGZvcmsgaXMgdXBkYXRpbmcgdGhpcyBidWZmZXIncyBwb2ludGVy cyBhbmQKKyAgY291bnRzLCBidXQgdGhlIHVwcGVyIGZvcmsgbmV2ZXIgZmluZHMgb3V0IGFib3V0 IGl0IGFuZCBzdGlsbCBoYXMgdGhlIG9sZAorICBvbmVzLiAgVGhlIGZvbGxvd2luZyBVTklYLXNw ZWNpZmljIGNhbGwgdG8gdGhlIGNrdXRpby5jIG1vZHVsZSB0YWtlcyBjYXJlCisgIG9mIHRoaXMu Li4gIFdpdGhvdXQgaXQsIHdlIGdldCBkdWFsIGVjaG9pbmcgb2YgaW5jb21pbmcgY2hhcmFjdGVy cy4KKyovCisJdHRmbHV4KCk7CisvKgorICBBdCB0aGlzIHBvaW50LCBwZXJoYXBzIHlvdSBhcmUg d29uZGVyaW5nIHdoeSB3ZSB1c2UgZm9ya3MgYXQgYWxsLiAgSXQgaXMKKyAgc2ltcGx5IGJlY2F1 c2UgdGhlcmUgaXMgbm8gb3RoZXIgbWV0aG9kIHBvcnRhYmxlIGFtb25nIGFsbCBVTklYIHZhcmlh dGlvbnMuCisgIE5vdCB0aHJlYWRzLCBub3Qgc2VsZWN0KCksIC4uLiAgKFllcywgc2VsZWN0KCkg aXMgbW9yZSBjb21tb24gbm93OyBpdCBtaWdodAorICBhY3R1YWxseSBiZSB3b3J0aCB3cml0aW5n IGEgdmFyaWF0aW9uIG9mIHRoaXMgbW9kdWxlIHRoYXQgd29ya3MgbGlrZSBCU0QKKyAgVGVsbmV0 LCBvbmUgZm9yaywgZHJpdmVuIGJ5IHNlbGVjdCgpKS4KKyovCisJaWJwID0gaWJ1ZjsJCQkvKiBD bGVhciBpYnVmW10uICovCisJaWJjID0gMDsJCQkvKiBDaGlsZCBub3cgaGFzIGl0cyBvd24gY29w eSAqLworCXNpZ25hbChDS19GT1JLX1NJRywgcGlwZWludCk7CS8qIEhhbmRsZXIgZm9yIG1lc3Nh Z2VzIGZyb20gY2hpbGQuICovCisJd3JpdGUoeHBpcGVbMV0sIGlidWYsIDEpOwkvKiBBbGxvdyBj aGlsZCB0byBwcm9jZWVkICovCisJY2xvc2UoeHBpcGVbMV0pOyB4cGlwZVsxXSA9IC0xOyAvKiBQ YXJlbnQgLSBwcmV2ZW50IGZ1dHVyZSB3cml0ZXMgKi8KKworCXdoYXQgPSBXX0NPTk5FQ1Q7CQkv KiBLZWVwIHRyYWNrIG9mIHdoYXQgd2UncmUgZG9pbmcgKi8KKwlhY3RpdmUgPSAxOworCWRlYnVn KEYxMDEsIkNPTk5FQ1Qga2V5Ym9hcmQgZm9yayBkdXBsZXgiLCIiLGR1cGxleCk7CisvKgorICBD YXRjaCBjb21tdW5pY2F0aW9uIGVycm9ycyBvciBtb2RlIGNoYW5nZXMgaW4gbG93ZXIgZm9yay4K KworICBOb3RlOiBTb21lIEMgY29tcGlsZXJzIChlLmcuIENyYXkgVU5JQ09TKSBpbnRlcnByZXQg dGhlIEFOU0kgQyBzdGFuZGFyZAorICBhYm91dCBzZXRqbXAoKSBpbiBhIHdheSB0aGF0IGRpc2Fs bG93cyBjb25zdHJ1Y3Rpb25zIGxpa2U6CisKKyAgICAgICAgaWYgKCh2YXIgPSBbc2lnXXNldGpt cChlbnYpKSA9PSAwKSAuLi4KKworICB3aGljaCBwcmV2ZW50cyB0aGUgdmFsdWUgcmV0dXJuZWQg YnkgY2tsb25nam1wKCkgZnJvbSBiZWluZyB1c2VkIGF0IGFsbC4KKyAgU28gdGhlIHNpZ25hbCBo YW5kbGVycyBzZXQgYSBnbG9iYWwgdmFyaWFibGUsIHNqdmFsLCBpbnN0ZWFkLgorKi8KKwlpZiAo CisjaWZkZWYgQ0tfUE9TSVhfU0lHCisJICAgIHNpZ3NldGptcChjb25fZW52LDEpCisjZWxzZQor CSAgICBzZXRqbXAoY29uX2VudikKKyNlbmRpZiAvKiBDS19QT1NJWF9TSUcgKi8KKwkgICAgPT0g MCkgewkJCS8qIE5vcm1hbCBlbnRyeS4uLiAqLworCSAgICBqYnNldCA9IDE7CQkJLyogTm93IHdl IGhhdmUgYSBsb25nam1wIGJ1ZmZlciAqLworCSAgICBzanZhbCA9IENFVl9OTzsJCS8qIEluaXRp YWxpemUgc2V0am1wIHJldHVybiBjb2RlLiAqLworCisJICAgIGRlYnVnKEYxMDEsIkNPTk5FQ1Qg c2V0am1wIG5vcm1hbCBlbnRyeSIsIiIsc2p2YWwpOworCisjaWZkZWYgQU5ZWDI1CisJICAgIGlm IChuZXR3b3JrICYmIChuZXR0eXBlID09IE5FVF9TWDI1IHx8IG5ldHR5cGUgPT0gTkVUX0lYMjUp KSB7CisJCW9idWZsID0gMDsKKwkJYnplcm8gKHgyNW9idWYsc2l6ZW9mKHgyNW9idWYpKTsKKwkg ICAgfQorI2VuZGlmIC8qIEFOWVgyNSAqLworLyoKKyAgSGVyZSBpcyB0aGUgYmlnIGxvb3AgdGhh dCBnZXRzIGNoYXJhY3RlcnMgZnJvbSB0aGUga2V5Ym9hcmQgYW5kIHNlbmRzIHRoZW0KKyAgb3V0 IHRoZSBjb21tdW5pY2F0aW9uIGRldmljZS4gIFRoZXJlIGFyZSB0d28gY29tcG9uZW50cyB0byB0 aGUgY29tbXVuaWNhdGlvbgorICBwYXRoOiB0aGUgY29ubmVjdGlvbiBmcm9tIHRoZSBrZXlib2Fy ZCB0byBDLUtlcm1pdCwgYW5kIGZyb20gQy1LZXJtaXQgdG8KKyAgdGhlIHJlbW90ZSBjb21wdXRl ci4gIFRoZSB0cmVhdG1lbnQgb2YgdGhlIDh0aCBiaXQgb2Yga2V5Ym9hcmQgY2hhcmFjdGVycwor ICBpcyBnb3Zlcm5lZCBieSBTRVQgQ09NTUFORCBCWVRFU0laRSAoY21kbXNrKS4gIFRoZSB0cmVh dG1lbnQgb2YgdGhlIDh0aCBiaXQKKyAgb2YgY2hhcmFjdGVycyBzZW50IHRvIHRoZSByZW1vdGUg aXMgZ292ZXJuZWQgYnkgU0VUIFRFUk1JTkFMIEJZVEVTSVpFCisgIChjbWFzaykuICAgVGhpcyBk aXN0aW5jdGlvbiB3YXMgaW50cm9kdWNlZCBpbiBlZGl0IDVBKDE2NCkuCisqLworCSAgICB3aGls ZSAoYWN0aXZlKSB7CisjaWZuZGVmIE5PU0VUS0VZCisJCWlmIChrbXB0cikgewkJLyogSGF2ZSBj dXJyZW50IG1hY3JvPyAqLworCQkgICAgZGVidWcoRjEwMCwiQ09OTkVDVCBrbXB0ciBub24gTlVM TCIsIiIsMCk7CisJCSAgICBpZiAoKGMgPSAoQ0hBUikgKmttcHRyKyspID09IE5VTCkgeyAvKiBH ZXQgY2hhciBmcm9tIGl0ICovCisJCQlrbXB0ciA9IE5VTEw7CS8qIElmIG5vIG1vcmUgY2hhcnMs ICAqLworCQkJZGVidWcoRjEwMCwiQ09OTkVDVCBtYWNybyBlbXB0eSwgY29udGludWluZyIsIiIs MCk7CisJCQljb250aW51ZTsJLyogcmVzZXQgcG9pbnRlciBhbmQgY29udGludWUgKi8KKwkJICAg IH0KKwkJICAgIGRlYnVnKEYwMDAsIkNPTk5FQ1QgY2hhciBmcm9tIG1hY3JvIiwiIixjKTsKKwkJ fSBlbHNlCQkJLyogTm8gbWFjcm8uLi4gKi8KKyNlbmRpZiAvKiBOT1NFVEtFWSAqLworCQkgIGMg PSBDT05HS1MoKTsJCS8qIFJlYWQgZnJvbSBrZXlib2FyZCAqLworCisjaWZkZWYgQ09NTUVOVAor LyogdG9vIG11Y2guLi4gKi8KKwkJZGVidWcoRjEwMSwiQ09OTkVDVCAqKiBLRVlCIiwiIixjKTsK KyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgICAgICAgICAgICAgaWYgKGMgPT0gLTEpIHsJCS8q IElmIHJlYWQoKSBnb3QgYW4gZXJyb3IuLi4gKi8KKwkJICAgIGRlYnVnKEYxMDEsIkNPTk5FQ1Qg a2V5Ym9hcmQgcmVhZCBlcnJubyIsIiIsZXJybm8pOworI2lmZGVmIENPTU1FTlQKKy8qCisgVGhp cyBzZWVtcyB0byBjYXVzZSBwcm9ibGVtcy4gIElmIHJlYWQoKSByZXR1cm5zIC0xLCB0aGUgc2ln bmFsIGhhcyBhbHJlYWR5CisgYmVlbiBkZWxpdmVyZWQsIGFuZCBub3RoaW5nIHdpbGwgd2FrZSB1 cCB0aGUgcGF1c2UoKS4KKyovCisJCSAgICBwYXVzZSgpOwkJLyogV2FpdCBmb3IgdHJhbnNtaXR0 ZXIgdG8gZmluaXNoLiAqLworI2Vsc2UKKyNpZmRlZiBBOTg2CisvKgorICBPbiBBbHRvcyBtYWNo aW5lcyB3aXRoIFhlbml4IDMuMCwgcHJlc3NpbmcgREVMIGluIGNvbm5lY3QgbW9kZSBicmluZ3Mg dXMKKyAgaGVyZSAocmVhc29uIHVua25vd24pLiAgVGhlIGNvbnNvbGUgbGluZSBkaXNjaXBsaW5l IGF0IHRoaXMgcG9pbnQgaGFzCisgIGludHIgPSBeQy4gIFRoZSBjb21tdW5pY2F0aW9ucyB0dHkg aGFzIGludHIgPSBERUwgYnV0IHdlIGdldCBoZXJlIGFmdGVyCisgIHByZXNzaW5nIERFTCBvbiB0 aGUga2V5Ym9hcmQsIGV2ZW4gd2hlbiB0aGUgcmVtb3RlIHN5c3RlbSBoYXMgYmVlbiBzZXQgbm90 CisgIHRvIGVjaG8uICBXaXRoIEE5ODYgZGVmaW5lZCwgd2Ugc3RheSBpbiB0aGUgcmVhZCBsb29w IGFuZCBiZWVwIG9ubHkgaWYgdGhlCisgIG9mZmVuZGluZyBjaGFyYWN0ZXIgaXMgbm90IERFTC4K KyovCisJCSAgICBpZiAoKGMgJiAxMjcpICE9IDEyNykgY29ub2MoQkVMKTsKKyNlbHNlCisjaWZk ZWYgRUlOVFIKKy8qCisgICBUaGlzIGNhbiBiZSBjYXVzZWQgYnkgdGhlIG90aGVyIGZvcmsgc2ln bmFsbGluZyB0aGlzIG9uZSBhYm91dAorICAgYW4gZWNob2luZyBjaGFuZ2UgZHVyaW5nIFRFTE5F VCBuZWdvdGlhdGlvbnMuCisqLworCQkgICAgaWYgKGVycm5vID09IEVJTlRSKQorCQkgICAgICBj b250aW51ZTsKKyNlbmRpZiAvKiBFSU5UUiAqLworCQkgICAgY29ub2MoQkVMKTsJCS8qIE90aGVy d2lzZSwgYmVlcCAqLworCQkgICAgYWN0aXZlID0gMDsJCS8qIGFuZCB0ZXJtaW5hdGUgdGhlIHJl YWQgbG9vcCAqLworCQkgICAgY29udGludWU7CisjZW5kaWYgLyogQTk4NiAqLworI2VuZGlmIC8q IENPTU1FTlQgKi8KKwkJfQorCQljICY9IGNtZG1zazsJCS8qIERvIGFueSByZXF1ZXN0ZWQgbWFz a2luZyAqLworI2lmbmRlZiBOT1NFVEtFWQorLyoKKyAgTm90ZToga21wdHIgaXMgTlVMTCBpZiB3 ZSBnb3QgY2hhcmFjdGVyIGMgZnJvbSB0aGUga2V5Ym9hcmQsIGFuZCBpdCBpcworICBub3QgTlVM TCBpZiBpdCBjYW1lIGZyb20gYSBtYWNyby4gIEluIHRoZSBsYXR0ZXIgY2FzZSwgd2UgbXVzdCBh dm9pZAorICBleHBhbmRpbmcgaXQgYWdhaW4uCisqLworCQlpZiAoIWttcHRyICYmIG1hY3JvdGFi W2NdKSB7IC8qIE1hY3JvIGRlZmluaXRpb24gZm9yIGM/ICovCisJCSAgICBrbXB0ciA9IG1hY3Jv dGFiW2NdOyAgICAgLyogWWVzLCBzZXQgdXAgbWFjcm8gcG9pbnRlciAqLworCQkgICAgY29udGlu dWU7CQkgICAgIC8qIGFuZCByZXN0YXJ0IHRoZSBsb29wLCAqLworCQl9IGVsc2UgYyA9IGtleW1h cFtjXTsJICAgICAvKiBlbHNlIHVzZSBzaW5nbGUtY2hhciBrZXltYXAgKi8KKyNlbmRpZiAvKiBO T1NFVEtFWSAqLworCQlpZiAoCisjaWZuZGVmIE5PU0VUS0VZCisJCSAgICAha21wdHIgJiYKKyNl bmRpZiAvKiBOT1NFVEtFWSAqLworCQkgICAgKHR0X2VzY2FwZSAmJiAoYyAmIDB4ZmYpID09IGVz Y2FwZSkpIHsgLyogRXNjYXBlIGNoYXI/ICovCisJCSAgICBkZWJ1ZyhGMDAwLCJDT05ORUNUIGdv dCBlc2NhcGUiLCIiLGMpOworCQkgICAgYyA9IENPTkdLUygpICYgMDE3NzsgLyogR290IGVzYywg Z2V0IGl0cyBhcmcgKi8KKwkJICAgIC8qIE5vIGtleSBtYXBwaW5nIGhlcmUgKi8KKwkJICAgIGRv ZXNjKChjaGFyKSBjKTsJLyogTm93IHByb2Nlc3MgaXQgKi8KKworCQl9IGVsc2UgewkJLyogSXQn cyBub3QgdGhlIGVzY2FwZSBjaGFyYWN0ZXIgKi8KKwkJICAgIGNzYXZlID0gYzsJCS8qIFNhdmUg aXQgYmVmb3JlIHRyYW5zbGF0aW9uICovCisJCQkJCS8qIGZvciBsb2NhbCBlY2hvaW5nLiAqLwor I2lmbmRlZiBOT0NTRVRTCisJCSAgICBpZiAoaW5lc2MgPT0gRVNfTk9STUFMKSB7IC8qIElmIG5v dCBpbnNpZGUgZXNjYXBlIHNlcS4uICovCisJCQkvKiBUcmFuc2xhdGUgY2hhcmFjdGVyIHNldHMg Ki8KKyNpZmRlZiBVTklDT0RFCisJCQlpbnQgeDsKKwkJCUNIQVIgY2g7CisJCQljaCA9IGM7CisJ CQlpZiAodW5pY29kZSA9PSAxKSB7IC8qIFJlbW90ZSBpcyBVVEYtOCAqLworCQkJICAgIG91dHhj b3VudCA9IGJfdG9fdShjaCxvdXR4YnVmLE9VVFhCVUZTSVosdGNzc2l6ZSk7CisJCQkgICAgb3V0 eGJ1ZltvdXR4Y291bnRdID0gTlVMOworCQkJfSBlbHNlIGlmICh1bmljb2RlID09IDIpIHsgLyog TG9jYWwgaXMgVVRGLTggKi8KKwkJCSAgICB4ID0gdV90b19iKGNoKTsgLyogU28gdHJhbnNsYXRl IHRvIHJlbW90ZSBieXRlICovCisJCQkgICAgaWYgKHggPCAwKQorCQkJICAgICAgY29udGludWU7 CisJCQkgICAgb3V0eGJ1ZlswXSA9ICh1bnNpZ25lZCkoeCAmIDB4ZmYpOworCQkJICAgIG91dHhj b3VudCA9IDE7CisJCQkgICAgb3V0eGJ1ZltvdXR4Y291bnRdID0gTlVMOworCQkJfSBlbHNlIHsK KyNlbmRpZiAvKiBVTklDT0RFICovCisJCQkgICAgLyogTG9jYWwtdG8taW50ZXJtZWRpYXRlICov CisJCQkgICAgaWYgKHN4bykgYyA9ICgqc3hvKSgoY2hhciljKTsKKwkJCSAgICAvKiBJbnRlcm1l ZGlhdGUtdG8tcmVtb3RlICovCisJCQkgICAgaWYgKHJ4bykgYyA9ICgqcnhvKSgoY2hhciljKTsK KwkJCSAgICBvdXR4YnVmWzBdID0gYzsKKwkJCSAgICBvdXR4Y291bnQgPSAxOworCQkJICAgIG91 dHhidWZbb3V0eGNvdW50XSA9IE5VTDsKKyNpZmRlZiBVTklDT0RFCisJCQl9CisjZW5kaWYgLyog VU5JQ09ERSAqLworCQkgICAgfQorCQkgICAgaWYgKGVzY3NlcSkKKwkJICAgICAgYXBjcmMgPSBj aGthZXMoKGNoYXIpYyk7CisjZWxzZQorCQkgICAgb3V0eGJ1ZlswXSA9IGM7CisJCSAgICBvdXR4 Y291bnQgPSAxOworCQkgICAgb3V0eGJ1ZltvdXR4Y291bnRdID0gTlVMOworI2VuZGlmIC8qIE5P Q1NFVFMgKi8KKwkJICAgIGZvciAoaSA9IDA7IGkgPCBvdXR4Y291bnQ7IGkrKykgeworCQkJYyA9 IG91dHhidWZbaV07CisvKgorIElmIFNoaWZ0LUluL1NoaWZ0LU91dCBpcyBzZWxlY3RlZCBhbmQg d2UgaGF2ZSBhIDctYml0IGNvbm5lY3Rpb24sCisgaGFuZGxlIHNoaWZ0aW5nIGhlcmUuCisqLwor CQkJaWYgKHNvc2kpIHsJLyogU2hpZnQtSW4vT3V0IHNlbGVjdGVkPyAqLworCQkJICAgIGlmIChj bWFzayA9PSAwMTc3KSB7IC8qIEluIDctYml0IGVudmlyb25tZW50PyAqLworCQkJCWlmIChjICYg MDIwMCkgewkvKiA4LWJpdCBjaGFyYWN0ZXI/ICovCisJCQkJICAgIGlmIChvdXRzaGlmdCA9PSAw KSB7IC8qIElmIG5vdCBzaGlmdGVkLCAqLworCQkJCQl0dG9jKGRvcGFyKFNPKSk7IC8qIHNoaWZ0 LiAqLworCQkJCQlvdXRzaGlmdCA9IDE7CisJCQkJICAgIH0KKwkJCQl9IGVsc2UgeworCQkJCSAg ICBpZiAob3V0c2hpZnQgPT0gMSkgeyAvKiA3LWJpdCBjaGFyYWN0ZXIgKi8KKwkJCQkJdHRvYyhk b3BhcihTSSkpOyAvKiBJZiBzaGlmdGVkLCAqLworCQkJCQlvdXRzaGlmdCA9IDA7ICAgIC8qIHVu c2hpZnQuICovCisJCQkJICAgIH0KKwkJCQl9CisJCQkgICAgfQorCQkJICAgIGlmIChjID09IFNP KSBvdXRzaGlmdCA9IDE7ICAgLyogVXNlciB0eXBlZCBTTyAqLworCQkJICAgIGlmIChjID09IFNJ KSBvdXRzaGlmdCA9IDA7ICAgLyogVXNlciB0eXBlZCBTSSAqLworCQkJfQorCQkJYyAmPSBjbWFz azsJLyogQXBwbHkgS2VybWl0LXRvLWhvc3QgbWFzayBub3cuICovCisjaWZkZWYgU1VOWDI1CisJ CQlpZiAobmV0d29yayAmJiBuZXR0eXBlID09IE5FVF9TWDI1KSB7CisJCQkgICAgaWYgKHBhZHBh cm1zW1BBRF9FQ0hPXSkgeworCQkJCWlmIChkZWJzZXMpCisJCQkJICBjb25vbChkYmNocihjKSkg OworCQkJCWVsc2UKKwkJCQkgIGlmICgoYyAhPSBwYWRwYXJtc1tQQURfQ0hBUl9ERUxFVEVfQ0hB Ul0pICYmCisJCQkJICAgIChjICE9IHBhZHBhcm1zW1BBRF9CVUZGRVJfREVMRVRFX0NIQVJdKSAm JgorCQkJCSAgICAoYyAhPSBwYWRwYXJtc1tQQURfQlVGRkVSX0RJU1BMQVlfQ0hBUl0pKQorCQkJ CSAgICBjb25vYyhjKSA7CisJCQkJaWYgKHNlc2xvZyAmJiAhc2Vzc2Z0KQorCQkJCSAgbG9nY2hh cihjKTsKKwkJCSAgICB9CisJCQkgICAgaWYgKGMgPT0gQ1IgJiYgKHBhZHBhcm1zW1BBRF9MRl9B RlRFUl9DUl0gPT0gNCB8fAorCQkJCQkgICAgcGFkcGFybXNbUEFEX0xGX0FGVEVSX0NSXSA9PSA1 KSkgeworCQkJCWlmIChkZWJzZXMpCisJCQkJICBjb25vbChkYmNocihMRikpIDsKKwkJCQllbHNl CisJCQkJICBjb25vYyhMRikgOworCQkJCWlmIChzZXNsb2cgJiYgIXNlc3NmdCkKKwkJCQkgIGxv Z2NoYXIoTEYpOworCQkJICAgIH0KKwkJCSAgICBpZiAoYyA9PSBwYWRwYXJtc1tQQURfQlJFQUtf Q0hBUkFDVEVSXSkgeworCQkJCWJyZWFrYWN0KCk7CisJCQkgICAgfSBlbHNlIGlmIChwYWRwYXJt c1tQQURfREFUQV9GT1JXQVJEX1RJTUVPVVRdKSB7CisJCQkJdG9zZW5kID0gMTsKKwkJCQl4MjVv YnVmIFtvYnVmbCsrXSA9IGM7CisJCQkgICAgfSBlbHNlIGlmICgoKGMgPT0gcGFkcGFybXNbUEFE X0NIQVJfREVMRVRFX0NIQVJdKXx8CisJCQkJICAgICAoYyA9PSBwYWRwYXJtc1tQQURfQlVGRkVS X0RFTEVURV9DSEFSXSkgfHwKKwkJCQkgICAgIChjID09IHBhZHBhcm1zW1BBRF9CVUZGRVJfRElT UExBWV9DSEFSXSkpCisJCQkJICAgICAgICYmIChwYWRwYXJtc1tQQURfRURJVElOR10pKSB7CisJ CQkJaWYgKGMgPT0gcGFkcGFybXNbUEFEX0NIQVJfREVMRVRFX0NIQVJdKSB7CisJCQkJICAgIGlm IChvYnVmbCA+IDApIHsKKwkJCQkJY29ub2woIlxiIFxiIik7IG9idWZsLS07CisJCQkJICAgIH0g ZWxzZSB7fQorCQkJCX0gZWxzZSBpZgorCQkJCSAgKGMgPT0gcGFkcGFybXNbUEFEX0JVRkZFUl9E RUxFVEVfQ0hBUl0pIHsKKwkJCQkgICAgICBjb25vbCAoIlxyXG5QQUQgQnVmZmVyIERlbGV0ZWRc clxuIik7CisJCQkJICAgICAgb2J1ZmwgPSAwOworCQkJCX0gZWxzZSBpZgorCQkJCSAgKGM9PXBh ZHBhcm1zW1BBRF9CVUZGRVJfRElTUExBWV9DSEFSXSkgeworCQkJCSAgICAgIGNvbm9sKCJcclxu Iik7CisJCQkJICAgICAgY29ub2woeDI1b2J1Zik7CisJCQkJICAgICAgY29ub2woIlxyXG4iKTsK KwkJCQl9IGVsc2Uge30KKwkJCSAgICB9IGVsc2UgeworCQkJCXgyNW9idWYgW29idWZsKytdID0g YzsKKwkJCQlpZiAob2J1ZmwgPT0gTUFYT1gyNSkgdG9zZW5kID0gMTsKKwkJCQllbHNlIGlmIChj ID09IENSKSB0b3NlbmQgPSAxOworCQkJICAgIH0KKwkJCSAgICBpZiAodG9zZW5kKSB7CisJCQkJ aWYgKHR0b2woKENIQVIgKil4MjVvYnVmLG9idWZsKSA8IDApIHsKKwkJCQkgICAgcGVycm9yICgi XHJcbkNhbid0IHNlbmQgY2hhcmFjdGVycyIpOworCQkJCSAgICBhY3RpdmUgPSAwOworCQkJCX0g ZWxzZSB7CisJCQkJICAgIGJ6ZXJvICh4MjVvYnVmLHNpemVvZih4MjVvYnVmKSk7CisJCQkJICAg IG9idWZsID0gMDsKKwkJCQkgICAgdG9zZW5kID0gMDsKKwkJCQl9CisJCQkgICAgfSBlbHNlIHt9 OworCQkJfSBlbHNlIHsKKyNlbmRpZiAvKiBTVU5YMjUgKi8KKwkJCSAgICBpZiAoYyA9PSAnXDAx NScpIHsgLyogQ2FycmlhZ2UgUmV0dXJuICovCisJCQkJaW50IHN0dWZmID0gLTE7CisJCQkJaWYg KHRubG0pIHsgLyogVEVSTUlOQUwgTkVXTElORSBPTiAqLworCQkJCSAgICBzdHVmZiA9IExGOwkv KiBTdHVmZiBMRiAqLworI2lmZGVmIFROQ09ERQorCQkJCX0gZWxzZSBpZiAobmV0d29yayAmJiAv KiBURUxORVQgTkVXTElORSAqLworCQkJCQkgICBJU19URUxORVQoKSkgeworCQkJCSAgICBzd2l0 Y2ggKCFURUxPUFRfTUUoVEVMT1BUX0JJTkFSWSkgPworCQkJCQkgICAgdG5fbmxtIDoKKwkJCQkJ ICAgIHRuX2JfbmxtCisJCQkJCSAgICApIHsKKwkJCQkgICAgICBjYXNlIFROTF9DUkxGOgorCQkJ CQlzdHVmZiA9IExGOworCQkJCQlicmVhazsKKwkJCQkgICAgICBjYXNlIFROTF9DUk5VTDoKKwkJ CQkJc3R1ZmYgPSBOVUw7CisJCQkJCWJyZWFrOworCQkJCSAgICB9CisjZW5kaWYgLyogVE5DT0RF ICovCisJCQkJfQorCQkJCWlmIChzdHVmZiA+IC0xKSB7CisJCQkJICAgIHR0b2MoZG9wYXIoJ1ww MTUnKSk7IC8qIFNlbmQgQ1IgKi8KKwkJCQkgICAgaWYgKGR1cGxleCkgY29ub2MoJ1wwMTUnKTsg LyogRWNobyBDUiAqLworCQkJCSAgICBjID0gc3R1ZmY7IC8qIENoYXIgdG8gc3R1ZmYgKi8KKwkJ CQkgICAgY3NhdmUgPSBjOworCQkJCX0KKwkJCSAgICB9CisjaWZkZWYgVE5DT0RFCisvKiBJZiB1 c2VyIHR5cGVzIHRoZSAweGZmIGNoYXJhY3RlciAoVEVMTkVUIElBQyksIGl0IG11c3QgYmUgZG91 YmxlZC4gKi8KKwkJCSAgICBlbHNlCS8qIE5vdCBDUiAqLworCQkJICAgICAgaWYgKChkb3Bhcigo Q0hBUikgYykgPT0gSUFDKSAmJiAvKiBJQUMgKDB4ZmYpICovCisJCQkJICBuZXR3b3JrICYmIElT X1RFTE5FVCgpKSB7CisJCQkJICAvKiBTZW5kIG9uZSBjb3B5IG5vdyAqLworCQkJCSAgLyogYW5k IHRoZSBvdGhlciBvbmUganVzdCBiZWxvdy4gKi8KKwkJCQkgIHR0b2MoKGNoYXIpSUFDKTsKKwkJ CSAgICAgIH0KKyNlbmRpZiAvKiBUTkNPREUgKi8KKwkJCSAgICAvKiBTZW5kIHRoZSBjaGFyYWN0 ZXIgKi8KKworCQkJICAgIGlmICh0dG9jKChjaGFyKWRvcGFyKChDSEFSKSBjKSkgPiAtMSkgewor CQkJCWlmIChkdXBsZXgpIHsJLyogSWYgaGFsZiBkdXBsZXgsIG11c3QgZWNobyAqLworCQkJCSAg ICBpZiAoZGVic2VzKQorCQkJCSAgICAgIGNvbm9sKGRiY2hyKGNzYXZlKSk7IC8qIG9yaWdpbmFs IGNoYXIgKi8KKwkJCQkgICAgZWxzZSAvKiBub3QgdGhlIHRyYW5zbGF0ZWQgb25lICovCisJCQkJ ICAgICAgY29ub2MoKGNoYXIpY3NhdmUpOworCQkJCSAgICBpZiAoc2VzbG9nKSB7IC8qIEFuZCBt YXliZSBsb2cgaXQgdG9vICovCisJCQkJCWMyID0gY3NhdmU7CisJCQkJCWlmIChzZXNzZnQgPT0g MCAmJiBjc2F2ZSA9PSAnXHInKQorCQkJCQkgIGMyID0gJ1xuJzsKKwkJCQkJbG9nY2hhcigoY2hh ciljMik7CisJCQkJICAgIH0KKwkJCQl9CisJCQkgICAgfSBlbHNlIHsKKwkJCQlwZXJyb3IoIlxy XG5DYW4ndCBzZW5kIGNoYXJhY3RlciIpOworCQkJCWFjdGl2ZSA9IDA7CisJCQkgICAgfQorI2lm ZGVmIFNVTlgyNQorCQkJfQorI2VuZGlmIC8qIFNVTlgyNSAqLworCQkgICAgfSAvKiBmb3IuLi4g Ki8KKwkJfQorCSAgICB9CisKKwkgICAgLyogbm93IGFjdGl2ZSA9PSAwICovCisgICAgICAgICAg ICBzaWduYWwoQ0tfRk9SS19TSUcsIFNJR19JR04pOyAvKiBUdXJuIG9mZiBDS19GT1JLX1NJRyAq LworCSAgICBzanZhbCA9IENFVl9OTzsJCS8qIFNldCB0byBoYW5ndXAgKi8KKwl9CQkJCS8qIENv bWUgaGVyZSBvbiB0ZXJtaW5hdGlvbiBvZiBjaGlsZCAqLworCisvKiBja2xvbmdqbXAoKSBleGVj dXRlZCBpbiBwaXBlaW50KCkgKHBhcmVudCBvbmx5ISkgY29tZXMgaGVyZSAqLworCisvKgorICBO b3cgdGhlIGNoaWxkIGZvcmsgaXMgZ29uZSBvciBpcyB3YWl0aW5nIGZvciBDS19GT1JLX1NJRyBp biBja19zbmRtc2coKS4KKyAgU28gd2UgY2FuJ3QgZ2V0IChpbiB0aGUgcGFyZW50KSBhbnkgc3Vi c2VxdWVudCBDS19GT1JLX1NJRyBzaWduYWxzIHVudGlsCisgIHdlIHNpZ25hbCB0aGUgY2hpbGQg d2l0aCBDS19GT1JLX1NJRy4KKyovCisJZGVidWcoRjEwMCwiQ09OTkVDVCBzaWduYWxpbmcgcG9y dCBmb3JrIiwiIiwwKTsKKwlzaWduYWwoQ0tfRk9SS19TSUcsIFNJR19JR04pOwkvKiBUdXJuIHRo aXMgb2ZmICovCisJZGVidWcoRjEwMSwiQ09OTkVDVCBraWxsaW5nIHBvcnQgZm9yayIsIiIscGlk KTsKKwlpZiAocGlkKSB7CisJICAgIGludCB4ID0gMDsKKyNpZmRlZiBCRU9TT1JCRUJPWAorCSAg ICB7CisJCWxvbmcgcmV0X3ZhbDsKKwkJeCA9IGtpbGwocGlkLFNJR0tJTExUSFIpOyAvKiBLaWxs IGxvd2VyIGZvcmsgKi8KKwkJd2FpdF9mb3JfdGhyZWFkKHBpZCwgJnJldF92YWwpOworCSAgICB9 CisjZWxzZQorI2lmZGVmIFBsYW45CisJICAgIHggPSBraWxsKHBpZCxTSUdLSUxMKTsJLyogS2ls bCBsb3dlciBmb3JrICovCisjZWxzZQorCSAgICB4ID0ga2lsbChwaWQsOSk7CisjZW5kaWYgLyog UGxhbjkgKi8KKyNlbmRpZiAvKiBCRU9TT1JCRUJPWCAqLworCSAgICB3YWl0KChXQUlUX1QgKikw KTsJCS8qIFdhaXQgdGlsbCBnb25lLiAqLworCSAgICBpZiAoeCA8IDApIHsKKwkJcHJpbnRmKCJX QVJOSU5HOiBGYWlsdXJlIHRvIGtpbGwgZm9yaywgcGlkICVkOiAlcywgZXJybm89JWRcbiIsCisJ CSAgICAgICAoaW50KSBwaWQsIGNrX2VycnN0cigpLCBlcnJubyk7CisJCWRlYnVnKEYxMTEsIkNP Tk5FQ1QgZXJyb3Iga2lsbGluZyBwaWQiLGNrX2VycnN0cigpLGVycm5vKTsKKwkgICAgfQorCSAg ICBkZWJ1ZyhGMTAxLCJDT05ORUNUIGtpbGxlZCBwb3J0IGZvcmsiLCIiLHBpZCk7CisJICAgIHBp ZCA9IChQSURfVCkgMDsKKwl9CisJaWYgKHNqdmFsID09IENFVl9IVVApIHsJCS8qIFJlYWQgZXJy b3Igb24gY29tbSBkZXZpY2UgKi8KKwkgICAgZG9oYW5ndXAgPSAxOwkJLyogc28gd2Ugd2FudCB0 byBoYW5nIHVwIG91ciBzaWRlICovCisjaWZkZWYgTkVUQ09OTgorCSAgICBpZiAobmV0d29yaykg ewkJLyogYW5kL29yIGNsb3NlIG5ldHdvcmsgY29ubmVjdGlvbiAqLworCQl0dGNsb3MoMCk7CisJ CWRvbG9nZW5kKCk7CisjaWZkZWYgU1VOWDI1CisJCWlmIChuZXR0eXBlID09IE5FVF9TWDI1KSAv KiBJZiBYLjI1LCByZXN0b3JlIHRoZSBQQUQgcGFyYW1zICovCisJCSAgaW5pdHBhZCgpOworI2Vu ZGlmIC8qIFNVTlgyNSAqLworCSAgICB9CisjZW5kaWYgLyogTkVUQ09OTiAqLworCX0KKyNpZmRl ZiBDS19BUEMKKwlpZiAoc2p2YWwgPT0gQ0VWX0FQQykgewkJLyogQXBwbGljYXRpb24gUHJvZ3Jh bSBDb21tYW5kIHJlYydkICovCisJICAgIGFwY2FjdGl2ZSA9IEFQQ19SRU1PVEU7CS8qIEZsYWcg QVBDIGFzIGFjdGl2ZSAqLworCSAgICBhY3RpdmUgPSAwOwkJCS8qIEZsYWcgQ09OTkVDVCBhcyBp bmFjdGl2ZSAqLworCX0KKyNlbmRpZiAvKiBDS19BUEMgKi8KKwljb25yZXMoKTsJCQkvKiBSZXNl dCB0aGUgY29uc29sZS4gKi8KKwlpZiAoZG9oYW5ndXAgPiAwKSB7CQkvKiBJZiBoYW5ndXAgcmVx dWVzdGVkLCBkbyB0aGF0LiAqLworI2lmbmRlZiBOT0RJQUwKKwkgICAgaWYgKGRvaGFuZ3VwID4g MSkJCS8qIFVzZXIgYXNrZWQgZm9yIGl0ICovCisJICAgICAgaWYgKG1kbWh1cCgpIDwgMSkJCS8q IE1heWJlIGhhbmcgdXAgdmlhIG1vZGVtICovCisjZW5kaWYgLyogTk9ESUFMICovCisJCXR0aGFu ZygpOwkJLyogQW5kIG1ha2Ugc3VyZSB3ZSBkb24ndCBoYW5nIHVwICovCisJICAgIGRvaGFuZ3Vw ID0gMDsJCS8qIGFnYWluIHVubGVzcyByZXF1ZXN0ZWQgYWdhaW4uICovCisJfQorCisjaWZkZWYg Q09NTUVOVAorI2lmZGVmIE5FVENPTk4KKyNpZmRlZiBTSUdQSVBFCisJaWYgKG5ldHdvcmsgJiYg c2lncGlwaCkJCS8qIFJlc3RvcmUgcHJldmlvdXMgU0lHUElQRSBoYW5kbGVyICovCisJICAoVk9J RCkgc2lnbmFsKFNJR1BJUEUsIHNpZ3BpcGgpOworI2VuZGlmIC8qIFNJR1BJUEUgKi8KKyNlbmRp ZiAvKiBORVRDT05OICovCisjZW5kaWYgLyogQ09NTUVOVCAqLworCisjaWZkZWYgQU5ZWDI1CisJ aWYgKGRveDI1Y2xyKSB7CQkJLyogSWYgWC4yNSBDbGVhciByZXF1ZXN0ZWQgKi8KKwkgICAgeDI1 Y2xlYXIoKTsJCQkvKiBkbyB0aGF0LiAqLworI2lmbmRlZiBJQk1YMjUKKwkgICAgaW5pdHBhZCgp OworI2VuZGlmIC8qIElCTVgyNSAqLworCSAgICBkb3gyNWNsciA9IDA7CQkvKiBCdXQgb25seSBv bmNlLiAqLworCX0KKyNlbmRpZiAvKiBBTllYMjUgKi8KKworCWlmIChxdWl0bm93KSBkb2V4aXQo R09PRF9FWElULHhpdHN0YSk7IC8qIEV4aXQgbm93IGlmIHJlcXVlc3RlZC4gKi8KKyAgCWlmICht c2dmbGcpCisJICBwcmludGYoIihCYWNrIGF0ICVzKSIsICpteWhvc3QgPyBteWhvc3QgOiAibG9j YWwgVU5JWCBzeXN0ZW0iKTsKKyNpZmRlZiBDS19BUEMKKyAgICAgICAgaWYgKCFhcGNhY3RpdmUp CisjZW5kaWYgLyogQ0tfQVBDICovCisJICBwcmludGYoIlxuIik7CisJd2hhdCA9IFdfTk9USElO RzsJCS8qIFNvIGNvbnNvbGUgbW9kZXMgc2V0IHJpZ2h0LiAqLworI2lmbmRlZiBOT0NTRVRTCisJ bGFuZ3VhZ2UgPSBsYW5nc3Y7CQkvKiBSZXN0b3JlIGxhbmd1YWdlICovCisjZW5kaWYgLyogTk9D U0VUUyAqLworCXBhcmVudF9pZCA9IChQSURfVCkgMDsKKwlnb3RvIGNvbnJldDE7CisKKyAgICB9 CisjaWZuZGVmIEJFT1NPUkJFQk9YCisgICAgZWxzZSB7CS8qICoqKiAqLwkJLyogSW5mZXJpb3Ig cmVhZHMsIHByaW50cyBwb3J0IGlucHV0ICovCisgICAgICAgIGNvbmNsZCgvKiAodm9pZCAqKSZw aWQgKi8pOworICAgIH0KKyNlbmRpZiAvKiBCRU9TT1JCRUJPWCAqLworCitjb25yZXQxOgorICAg IGNvbnJldCA9IDE7Citjb25yZXQwOgorICAgIHNpZ25hbChDS19GT1JLX1NJRywgU0lHX0lHTik7 CS8qIEluIGNhc2UgdGhpcyB3YXNuJ3QgZG9uZSBhbHJlYWR5ICovCisgICAgZGVidWcoRjEwMSwi Q09OTkVDVCBjb25lY3QgZXhpdCBpYmMiLCIiLGliYyk7CisgICAgZGVidWcoRjEwMSwiQ09OTkVD VCBjb25lY3QgZXhpdCBvYmMiLCIiLG9iYyk7CisgICAgY2xvc2UoeHBpcGVbMF0pOyB4cGlwZVsw XSA9IC0xOwkvKiBDbG9zZSB0aGUgcGlwZSAqLworICAgIGNsb3NlKHhwaXBlWzFdKTsgeHBpcGVb MV0gPSAtMTsKKyAgICBpZiAobXNnZmxnKSB7CisjaWZkZWYgQ0tfQVBDCisJaWYgKGFwY2FjdGl2 ZSA9PSBBUENfTE9DQUwpCisJICBwcmludGYoIlxuIik7CisjZW5kaWYgLyogQ0tfQVBDICovCisJ cHJpbnRmKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tXHJcbiIpOworICAgIH0KKyAgICBmZmx1c2goc3Rkb3V0KTsKKyAgICByZXR1cm4oY29ucmV0 KTsKK30KKworCisvKiAgSCBDIE8gTiBOIEUgIC0tICBHaXZlIGhlbHAgbWVzc2FnZSBmb3IgY29u bmVjdC4gICovCisKK2ludAoraGNvbm5lKCkgeworICAgIGludCBjOworICAgIHN0YXRpYyBjaGFy ICpobHBtc2dbXSA9IHsKKyJcclxuICA/IGZvciB0aGlzIG1lc3NhZ2UiLAorIlxyXG4gIDAgKHpl cm8pIHRvIHNlbmQgYSBudWxsIiwKKyJcclxuICBCIHRvIHNlbmQgYSBCUkVBSyIsCisjaWZkZWYg Q0tfTEJSSworIlxyXG4gIEwgdG8gc2VuZCBhIExvbmcgQlJFQUsiLAorI2VuZGlmIC8qIENLX0xC UksgKi8KKyNpZmRlZiBORVRDT05OCisiXHJcbiAgSSB0byBzZW5kIGEgbmV0d29yayBpbnRlcnJ1 cHQgcGFja2V0IiwKKyNpZmRlZiBUQ1BTT0NLRVQKKyJcclxuICBBIHRvIHNlbmQgQXJlIFlvdSBU aGVyZT8iLAorI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLworI2lmZGVmIEFOWVgyNQorIlxyXG4gIFIg dG8gcmVzZXQgWC4yNSB2aXJ0dWFsIGNpcmN1aXQiLAorI2VuZGlmIC8qIEFOWVgyNSAqLworI2Vu ZGlmIC8qIE5FVENPTk4gKi8KKyJcclxuICBVIHRvIGhhbmd1cCBhbmQgY2xvc2UgdGhlIGNvbm5l Y3Rpb24iLAorIlxyXG4gIFEgdG8gaGFuZ3VwIGFuZCBxdWl0IEtlcm1pdCIsCisiXHJcbiAgUyBm b3Igc3RhdHVzIiwKKyNpZmRlZiBOT1BVU0gKKyJcclxuICAhIHRvIHB1c2ggdG8gbG9jYWwgc2hl bGwgKGRpc2FibGVkKSIsCisiXHJcbiAgWiB0byBzdXNwZW5kIChkaXNhYmxlZCkiLAorI2Vsc2UK KyJcclxuICAhIHRvIHB1c2ggdG8gbG9jYWwgc2hlbGwiLAorI2lmZGVmIE5PSkMKKyJcclxuICBa IHRvIHN1c3BlbmQgKGRpc2FibGVkKSIsCisjZWxzZQorIlxyXG4gIFogdG8gc3VzcGVuZCIsCisj ZW5kaWYgLyogTk9KQyAqLworI2VuZGlmIC8qIE5PUFVTSCAqLworIlxyXG4gIFxcIGJhY2tzbGFz aCBjb2RlOiIsCisiXHJcbiAgICBcXG5ubiAgZGVjaW1hbCBjaGFyYWN0ZXIgY29kZSIsCisiXHJc biAgICBcXE9ubm4gb2N0YWwgY2hhcmFjdGVyIGNvZGUiLAorIlxyXG4gICAgXFxYaGggIGhleGFk ZWNpbWFsIGNoYXJhY3RlciBjb2RlIiwKKyJcclxuICAgIHRlcm1pbmF0ZSB3aXRoIGNhcnJpYWdl IHJldHVybi4iLAorIlxyXG4gVHlwZSB0aGUgZXNjYXBlIGNoYXJhY3RlciBhZ2FpbiB0byBzZW5k IHRoZSBlc2NhcGUgY2hhcmFjdGVyLCBvciIsCisiXHJcbiBwcmVzcyB0aGUgc3BhY2UtYmFyIHRv IHJlc3VtZSB0aGUgQ09OTkVDVCBjb21tYW5kLlxyXG4iLAorIiIgfTsKKworICAgIGNvbm9sKCJc clxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIp OworICAgIGNvbm9sKCJcclxuUHJlc3MgQyB0byByZXR1cm4gdG8gIik7CisgICAgY29ub2woKm15 aG9zdCA/IG15aG9zdCA6ICJ0aGUgQy1LZXJtaXQgcHJvbXB0Iik7CisgICAgY29ub2woIiwgb3I6 Iik7CisgICAgY29ub2xhKGhscG1zZyk7CQkJLyogUHJpbnQgdGhlIGhlbHAgbWVzc2FnZS4gKi8K KyAgICBjb25vbCgiQ29tbWFuZD4iKTsJCQkvKiBQcm9tcHQgZm9yIGNvbW1hbmQuICovCisgICAg YyA9IENPTkdLUygpICYgMDE3NzsJCS8qIEdldCBjaGFyYWN0ZXIsIHN0cmlwIGFueSBwYXJpdHku ICovCisgICAgLyogTm8ga2V5IG1hcHBpbmcgb3IgdHJhbnNsYXRpb24gaGVyZSAqLworICAgIGlm IChjICE9IENNRFEpCisgICAgICBjb25vbGwoIiIpOworICAgIGNvbm9sbCgiLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOworICAgcmV0dXJuKGMp OwkJCQkvKiBSZXR1cm4gaXQuICovCit9CisKKworLyogIEQgTyBFIFMgQyAgLS0gIFByb2Nlc3Mg YW4gZXNjYXBlIGNoYXJhY3RlciBhcmd1bWVudCAgKi8KKworVk9JRAorI2lmZGVmIENLX0FOU0lD Citkb2VzYyhjaGFyIGMpCisjZWxzZQorZG9lc2MoYykgY2hhciBjOworI2VuZGlmIC8qIENLX0FO U0lDICovCisvKiBkb2VzYyAqLyB7CisgICAgQ0hBUiBkOworCisgICAgZGVidWcoRjEwMSwiQ09O TkVDVCBkb2VzYyIsIiIsYyk7CisgICAgd2hpbGUgKDEpIHsKKwlpZiAoYyA9PSBlc2NhcGUpIHsJ CS8qIFNlbmQgZXNjYXBlIGNoYXJhY3RlciAqLworCSAgICBkID0gZG9wYXIoKENIQVIpIGMpOyB0 dG9jKChjaGFyKSBkKTsgcmV0dXJuOworICAgIAl9IGVsc2UJCQkJLyogT3IgZWxzZSBsb29rIGl0 IHVwIGJlbG93LiAqLworCSAgICBpZiAoaXN1cHBlcihjKSkgYyA9IHRvbG93ZXIoYyk7CisKKwlz d2l0Y2goYykgeworCisJY2FzZSAnYyc6CQkJLyogRXNjYXBlIGJhY2sgdG8gcHJvbXB0ICovCisJ Y2FzZSAnXDAzJzoKKwkgICAgYWN0aXZlID0gMDsgY29ub2woIlxyXG4iKTsgcmV0dXJuOworCisJ Y2FzZSAnYic6CQkJLyogU2VuZCBhIEJSRUFLIHNpZ25hbCAqLworCWNhc2UgJ1wwMic6CisJICAg IHR0c25kYigpOyByZXR1cm47CisKKyNpZmRlZiBORVRDT05OCisJY2FzZSAnaSc6CQkJLyogU2Vu ZCBJbnRlcnJ1cHQgKi8KKwljYXNlICdcMDExJzoKKyNpZmRlZiBUQ1BTT0NLRVQKKyNpZm5kZWYg SVAKKyNkZWZpbmUgSVAgMjQ0CisjZW5kaWYgLyogSVAgKi8KKwkgICAgaWYgKG5ldHdvcmsgJiYg SVNfVEVMTkVUKCkpIHsgLyogVEVMTkVUICovCisJCXRlbXBbMF0gPSAoQ0hBUikgSUFDOwkvKiBJ IEFtIGEgQ29tbWFuZCAqLworCQl0ZW1wWzFdID0gKENIQVIpIElQOwkvKiBJbnRlcnJ1cHQgUHJv Y2VzcyAqLworCQl0ZW1wWzJdID0gTlVMOworCQl0dG9sKChDSEFSICopdGVtcCwyKTsKKwkgICAg fSBlbHNlCisjZW5kaWYgLyogVENQU09DS0VUICovCisjaWZkZWYgU1VOWDI1CisJICAgIGlmIChu ZXR3b3JrICYmIChuZXR0eXBlID09IE5FVF9TWDI1KSkgeworCQkoVk9JRCkgeDI1aW50cigwKTsJ ICAgICAgICAgICAgLyogWC4yNSBpbnRlcnJ1cHQgcGFja2V0ICovCisJCWNvbm9sKCJcclxuIik7 CisJICAgIH0gZWxzZQorI2VuZGlmIC8qIFNVTlgyNSAqLworCSAgICAgIGNvbm9jKEJFTCk7CisJ ICAgIHJldHVybjsKKworI2lmZGVmIFRDUFNPQ0tFVAorCWNhc2UgJ2EnOgkJCS8qICJBcmUgWW91 IFRoZXJlPyIgKi8KKwljYXNlICdcMDEnOgorI2lmbmRlZiBBWVQKKyNkZWZpbmUgQVlUIDI0Ngor I2VuZGlmIC8qIEFZVCAqLworCSAgICBpZiAobmV0d29yayAmJiBJU19URUxORVQoKSkgeworCQl0 ZW1wWzBdID0gKENIQVIpIElBQzsJLyogSSBBbSBhIENvbW1hbmQgKi8KKwkJdGVtcFsxXSA9IChD SEFSKSBBWVQ7CS8qIEFyZSBZb3UgVGhlcmU/ICovCisJCXRlbXBbMl0gPSBOVUw7CisJCXR0b2wo KENIQVIgKil0ZW1wLDIpOworCSAgICB9IGVsc2UgY29ub2MoQkVMKTsKKwkgICAgcmV0dXJuOwor I2VuZGlmIC8qIFRDUFNPQ0tFVCAqLworI2VuZGlmIC8qIE5FVENPTk4gKi8KKworI2lmZGVmIENL X0xCUksKKwljYXNlICdsJzoJCQkvKiBTZW5kIGEgTG9uZyBCUkVBSyBzaWduYWwgKi8KKwkgICAg dHRzbmRsYigpOyByZXR1cm47CisjZW5kaWYgLyogQ0tfTEJSSyAqLworCisJY2FzZSAndSc6CQkJ LyogSGFuZ3VwICovCisgICAgIC8qCWNhc2UgJ1wwMTAnOiAqLwkJCS8qIE5vLCB0b28gZGFuZ2Vy b3VzICovCisjaWZkZWYgQU5ZWDI1CisgICAgICAgICAgICBpZiAobmV0d29yayAmJiAobmV0dHlw ZSA9PSBORVRfU1gyNSB8fCBuZXR0eXBlID09IE5FVF9JWDI1KSkKKwkgICAgICBkb3gyNWNsciA9 IDE7CisgICAgICAgICAgICBlbHNlCisjZW5kaWYgLyogQU5ZWDI1ICovCisJICAgIGRvaGFuZ3Vw ID0gMjsgYWN0aXZlID0gMDsgY29ub2woIlxyXG5IYW5naW5nIHVwICIpOyByZXR1cm47CisKKyNp ZmRlZiBBTllYMjUKKyAgICAgICAgY2FzZSAncic6ICAgICAgICAgICAgICAgICAgICAgICAvKiBS ZXNldCB0aGUgWC4yNSB2aXJ0dWFsIGNpcmN1aXQgKi8KKyAgICAgICAgY2FzZSAnXDAyMic6Cisg ICAgICAgICAgICBpZiAobmV0d29yayAmJiAobmV0dHlwZSA9PSBORVRfU1gyNSB8fCBuZXR0eXBl ID09IE5FVF9JWDI1KSkKKwkJKFZPSUQpIHgyNXJlc2V0KDAsMCk7CisgICAgICAgICAgICBjb25v bCgiXHJcbiIpOworCSAgICByZXR1cm47CisjZW5kaWYgLyogQU5ZWDI1ICovCisKKwljYXNlICdx JzoJCQkvKiBRdWl0ICovCisJICAgIGRvaGFuZ3VwID0gMjsgcXVpdG5vdyA9IDE7IGFjdGl2ZSA9 IDA7IGNvbm9sKCJcclxuIik7IHJldHVybjsKKworCWNhc2UgJ3MnOgkJCS8qIFN0YXR1cyAqLwor CSAgICBjb25vbGwoIiIpOworCSAgICBjb25vbGwoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKKyNpZmRlZiBORVRDTUQKKwkgICAgaWYgKHR0 cGlwZSkKKwkgICAgICBja21ha21zZyh0ZW1wLFRNUExFTiwiIFBpcGU6IFwiIix0dG5hbWUsIlwi IixOVUxMKTsKKwkgICAgZWxzZQorI2VuZGlmIC8qIE5FVENNRCAqLworCSAgICAgIGNrbWFrbXNn KHRlbXAsCisJCSAgICAgICBUTVBMRU4sCisJCSAgICAgICAiICIsCisJCSAgICAgICAobmV0d29y ayA/ICJIb3N0IiA6ICJEZXZpY2UiKSwKKwkJICAgICAgICI6ICIsCisJCSAgICAgICB0dG5hbWUK KwkJICAgICAgICk7CisJICAgIGNvbm9sbCh0ZW1wKTsKKwkgICAgaWYgKCFuZXR3b3JrICYmIHNw ZWVkID49IDBMKSB7CisJCXNwcmludGYodGVtcCwiU3BlZWQgJWxkIiwgc3BlZWQpOworCQljb25v bGwodGVtcCk7CisJICAgIH0KKwkgICAgc3ByaW50Zih0ZW1wLCIgVGVybWluYWwgZWNobzogJXMi LCBkdXBsZXggPyAibG9jYWwiIDogInJlbW90ZSIpOworCSAgICBjb25vbGwodGVtcCk7CisJICAg IHNwcmludGYodGVtcCwiIFRlcm1pbmFsIGJ5dGVzaXplOiAlZCIsIChjbWFzayAgPT0gMDE3Nykg PyA3IDogOCk7CisJICAgIGNvbm9sbCh0ZW1wKTsKKwkgICAgc3ByaW50Zih0ZW1wLCIgQ29tbWFu ZCBieXRlc2l6ZTogJWQiLCAoY21kbXNrID09IDAxNzcpID8gNyA6IDggKTsKKwkgICAgY29ub2xs KHRlbXApOworICAgICAgICAgICAgaWYgKGh3cGFyaXR5KQorICAgICAgICAgICAgICBzcHJpbnRm KHRlbXAsIiBQYXJpdHlbaGFyZHdhcmVdOiAlcyIscGFybmFtKChjaGFyKWh3cGFyaXR5KSk7Cisg ICAgICAgICAgICBlbHNlCSAgICAKKyAgCSAgICAgIHNwcmludGYodGVtcCwiIFBhcml0eTogJXMi LCBwYXJuYW0oKGNoYXIpcGFyaXR5KSk7CisJICAgIGNvbm9sbCh0ZW1wKTsKKwkgICAgc3ByaW50 Zih0ZW1wLCIgQXV0b2Rvd25sb2FkOiAlcyIsIGF1dG9kbCA/ICJvbiIgOiAib2ZmIik7CisJICAg IGNvbm9sbCh0ZW1wKTsKKwkgICAgY2ttYWttc2codGVtcCwJCS8qICh3b3VsZCBub3QgYmUgc2Fm ZSBmb3Igc3ByaW50ZikgKi8KKwkJICAgICBUTVBMRU4sCisJCSAgICAgIiBTZXNzaW9uIGxvZzog IiwKKwkJICAgICAqc2VzZmlsID8gc2VzZmlsIDogIihub25lKSIsCisJCSAgICAgTlVMTCwKKwkJ ICAgICBOVUxMCisJCSAgICAgKTsKKwkgICAgY29ub2xsKHRlbXApOworI2lmbmRlZiBOT1NIT1cK KwkgICAgaWYgKCFuZXR3b3JrKSBzaG9tZG0oKTsKKyNlbmRpZiAvKiBOT1NIT1cgKi8KKyNpZmRl ZiBDS0xPR0RJQUwKKwkgICAgeworCQlsb25nIHo7CisJCXogPSBkb2xvZ3Nob3coMCk7CisJCWlm ICh6ID4gLTFMKSB7CisJCSAgICBzcHJpbnRmKHRlbXAsIiBFbGFwc2VkIHRpbWU6ICVzIixoaG1t c3MoeikpOworCQkgICAgY29ub2xsKHRlbXApOworCQl9CisJICAgIH0KKyNlbmRpZiAvKiBDS0xP R0RJQUwgKi8KKwkgICAgY29ub2xsKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tIik7CisJICAgIHJldHVybjsKKworCWNhc2UgJ2gnOgkJCS8qIEhl bHAgKi8KKwljYXNlICc/JzoJCQkvKiBIZWxwICovCisJICAgIGMgPSBoY29ubmUoKTsgY29udGlu dWU7CisKKwljYXNlICcwJzoJCQkvKiBTZW5kIGEgbnVsbCAqLworCSAgICBjID0gJ1wwJzsgZCA9 IGRvcGFyKChDSEFSKSBjKTsgdHRvYygoY2hhcikgZCk7IHJldHVybjsKKworCWNhc2UgJ3onOiBj YXNlICdcMDMyJzoJCS8qIFN1c3BlbmQgKi8KKyNpZm5kZWYgTk9QVVNICisJICAgIGlmICghbm9w dXNoKQorCSAgICAgIHN0cHRyYXAoMCk7CisJICAgIGVsc2UKKwkgICAgICBjb25vYyhCRUwpOwor I2Vsc2UKKwkgICAgY29ub2MoQkVMKTsKKyNlbmRpZiAvKiBOT1BVU0ggKi8KKwkgICAgcmV0dXJu OworCisJY2FzZSAnQCc6CQkJLyogU3RhcnQgaW5mZXJpb3IgY29tbWFuZCBwcm9jZXNzb3IgKi8K KwljYXNlICchJzoKKyNpZm5kZWYgTk9QVVNICisJICAgIGlmICghbm9wdXNoKSB7CisJCWNvbnJl cygpOwkJICAgICAgLyogUHV0IGNvbnNvbGUgYmFjayB0byBub3JtYWwgKi8KKwkJenNoY21kKCIi KTsJCSAgICAgIC8qIEZvcmsgYSBzaGVsbC4gKi8KKwkJaWYgKGNvbmJpbigoY2hhcillc2NhcGUp IDwgMCkgeworCQkgICAgcHJpbnRmKCJFcnJvciByZXN1bWluZyBDT05ORUNUIHNlc3Npb25cbiIp OworCQkgICAgYWN0aXZlID0gMDsKKwkJfQorCSAgICB9IGVsc2UgY29ub2MoQkVMKTsKKyNlbHNl CisJICAgIGNvbm9jKEJFTCk7CisjZW5kaWYgLyogTk9QVVNIICovCisJICAgIHJldHVybjsKKwor CWNhc2UgU1A6CQkJLyogU3BhY2UsIGlnbm9yZSAqLworCSAgICByZXR1cm47CisKKwlkZWZhdWx0 OgkJCS8qIE90aGVyICovCisJICAgIGlmIChjID09IENNRFEpIHsJCS8qIEJhY2tzbGFzaCBlc2Nh cGUgKi8KKwkJaW50IHg7CisJCWVjYnAgPSBlY2J1ZjsKKwkJKmVjYnArKyA9IGM7CisJCXdoaWxl ICgoKGMgPSAoQ09OR0tTKCkgJiBjbWRtc2spKSAhPSAnXHInKSAmJiAoYyAhPSAnXG4nKSkKKwkJ ICAqZWNicCsrID0gYzsKKwkJKmVjYnAgPSBOVUw7IGVjYnAgPSBlY2J1ZjsKKwkJeCA9IHh4ZXNj KCZlY2JwKTsJLyogSW50ZXJwcmV0IGl0ICovCisJCWlmICh4ID49IDApIHsJCS8qIE5vIGtleSBt YXBwaW5nIGhlcmUgKi8KKwkJICAgIGMgPSBkb3BhcigoQ0hBUikgeCk7CisJCSAgICB0dG9jKChj aGFyKSBjKTsKKwkJICAgIHJldHVybjsKKwkJfSBlbHNlIHsJCS8qIEludmFsaWQgYmFja3NsYXNo IGNvZGUuICovCisJCSAgICBjb25vYyhCRUwpOworCQkgICAgcmV0dXJuOworCQl9CisJICAgIH0K KwkgICAgY29ub2MoQkVMKTsgcmV0dXJuOyAJLyogSW52YWxpZCBlc2MgYXJnLCBiZWVwICovCisg ICAgCX0KKyAgICB9Cit9CisjZW5kaWYgLyogTk9MT0NBTCAqLwoKZGlmZiAtLWdpdCBhL2NrZXJt aXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1ZGlhLmMgYi9ja2VybWl0LTkuMC4z MDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdWRpYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLjU4N2EwZDEKLS0tIC9kZXYvbnVsbAorKysgYi9ja2VybWl0LTkuMC4zMDIt YnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdWRpYS5jCkBAIC0wLDAgKzEsODI0OSBAQAorI2luY2x1 ZGUgImNrY3N5bS5oIgorY2hhciAqZGlhbHYgPSAiRGlhbCBDb21tYW5kLCA5LjAuMTYwLCAxNiBP Y3QgMjAwOSI7CisKKy8qICBDIEsgVSBEIEkgQQkgLS0gIE1vZHVsZSBmb3IgYXV0b21hdGljIG1v ZGVtIGRpYWxpbmcuICovCisKKy8qCisgIENvcHlyaWdodCAoQykgMTk4NSwgMjAwOSwKKyAgICBU cnVzdGVlcyBvZiBDb2x1bWJpYSBVbml2ZXJzaXR5IGluIHRoZSBDaXR5IG9mIE5ldyBZb3JrLgor ICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBTZWUgdGhlIEMtS2VybWl0IENPUFlJTkcuVFhUIGZp bGUgb3IgdGhlCisgICAgY29weXJpZ2h0IHRleHQgaW4gdGhlIGNrY21haS5jIG1vZHVsZSBmb3Ig ZGlzY2xhaW1lciBhbmQgcGVybWlzc2lvbnMuCisqLworCisvKgorICBBdXRob3JzOgorCisgIE9y aWdpbmFsICh2ZXJzaW9uIDEsIDE5ODUpIGF1dGhvcjogSGVybSBGaXNjaGVyLCBFbmNpbm8sIENB LgorICBDb250cmlidXRlZCB0byBDb2x1bWJpYSBVbml2ZXJzaXR5IGluIDE5ODUgZm9yIGluY2x1 c2lvbiBpbiBDLUtlcm1pdCA0LjAuCisgIEF1dGhvciBhbmQgbWFpbnRhaW5lciBzaW5jZSAxOTg1 OiBGcmFuayBkYSBDcnV6LCBDb2x1bWJpYSBVbml2ZXJzaXR5LAorICBmZGNAY29sdW1iaWEuZWR1 LgorCisgIENvbnRyaWJ1dGlvbnMgYnkgbWFueSBvdGhlcnMgdGhyb3VnaG91dCB0aGUgeWVhcnMs IGluY2x1ZGluZzogSmVmZnJleQorICBBbHRtYW4sIE1hcmsgQmVycnltYW4sIEZlcm5hbmRvIENh YnJhbCwgSm9obiBDaG1pZWxld3NraSwgSm9lIERvdXBuaWssCisgIFJpY2hhcmQgSGlsbCwgTGFy cnkgSmFjb2JzLCBFcmljIEpvbmVzLCBUb20gS2xvb3MsIEJvYiBMYXJzb24sIFBldGVyIE1hdXpl eSwKKyAgSm9lIE9yb3N0LCBLZXZpbiBPJ0dvcm1hbiwgS2FpIFV3ZSBSb21tZWwsIERhbiBTY2h1 bGxtYW4sIFdhcnJlbiBUdWNrZXIsIGFuZAorICBtYW55IG90aGVycy4KKyovCisKKy8qCisgIEVu dHJ5IHBvaW50czoKKyAgICBja2RpYWwoY2hhciAqIG51bWJlcikgICBEaWFsIGEgbnVtYmVyIG9y IGFuc3dlciBhIGNhbGwKKyAgICBkaWFsaHVwKCkgICAgICAgICAgICAgICBIYW5nIHVwIGEgZGlh bGVkIGNvbm5lY3Rpb24KKyAgICBtZG1odXAoKSAgICAgICAgICAgICAgICBVc2UgbW9kZW0gY29t bWFuZHMgdG8gaGFuZyB1cAorCisgIEFsbCBvdGhlciByb3V0aW5lcyBhcmUgc3RhdGljLgorICBE b24ndCBjYWxsIGRpYWxodXAoKSBvciBtZG1odXAoKSB3aXRob3V0IGZpcnN0IGNhbGxpbmcgY2tk aWFsKCkuCisqLworCisvKgorICBUaGlzIG1vZHVsZSBjYWxscyBleHRlcm5hbGx5IGRlZmluZWQg c3lzdGVtLWRlcGVuZGVudCBmdW5jdGlvbnMgZm9yCisgIGNvbW11bmljYXRpb25zIGkvbywgYXMg ZGVzY3JpYmVkIGluIENLQ1BMTS5ET0MsIHRoZSBDLUtlcm1pdCBQcm9ncmFtIExvZ2ljCisgIE1h bnVhbCwgYW5kIHRodXMgc2hvdWxkIGJlIHBvcnRhYmxlIHRvIGFsbCBzeXN0ZW1zIHRoYXQgaW1w bGVtZW50IHRob3NlCisgIGZ1bmN0aW9ucywgYW5kIHdoZXJlIGFsYXJtKCkgYW5kIHNpZ25hbCgp IHdvcmsuCisKKyAgSE9XIFRPIEFERCBTVVBQT1JUIEZPUiBBTk9USEVSIE1PREVNOgorCisgIDEu IEluIGNrdXVzci5oLCBkZWZpbmUgYSBtb2RlbS10eXBlIG51bWJlciBzeW1ib2wgKG5fWFhYKSBm b3IgdGhlIG5ldyBtb2RlbSwKKyAgICAgdGhlIG5leHQgaGlnaGVzdCBvbmUuCisKKyAgMi4gSW4g Y2t1dXNyLmgsIGFkanVzdCBNQVhfTURNIHRvIHRoZSBuZXcgbnVtYmVyIG9mIG1vZGVtIHR5cGVz LgorCitUaGUgcmVtYWluaW5nIHN0ZXBzIGFyZSBpbiB0aGlzIG1vZHVsZToKKworICAzLiBDcmVh dGUgYSBNRE1JTkYgc3RydWN0dXJlIGZvciBpdC4gIE5PVEU6IFRoZSB3YWtlX3N0ciBzaG91bGQg aW5jbHVkZQorICAgICBhbGwgaW52YXJpYW50IHNldHVwIGluZm8sIGUuZy4gZW5hYmxlIHJlc3Vs dCBjb2RlcywgQlJFQUsgdHJhbnNwYXJlbmN5LAorICAgICBtb2R1bGF0aW9uIG5lZ290aWF0aW9u LCBldGMuICBTZWUgY2tja2VyLmggZm9yIE1ETUlORiBzdHJ1Y3QgZGVmaW5pdGlvbi4KKworICA0 LiBBZGQgdGhlIGFkZHJlc3Mgb2YgdGhlIE1ETUlORiBzdHJ1Y3R1cmUgdG8gdGhlIG1vZGVtcFtd IGFycmF5LAorICAgICBhY2NvcmRpbmcgdG8gdGhlIG51bWVyaWNhbCB2YWx1ZSBvZiB0aGUgbW9k ZW0tdHlwZSBudW1iZXIuCisKKyAgNS4gQWRkIHRoZSB1c2VyLXZpc2libGUgKFNFVCBNT0RFTSkg bmFtZSBhbmQgY29ycmVzcG9uZGluZyBtb2RlbSBudW1iZXIKKyAgICAgdG8gdGhlIG1kbXRhYltd IGFycmF5LCBpbiBhbHBoYWJldGljYWwgb3JkZXIgYnkgbW9kZW0tbmFtZSBzdHJpbmcuCisKKyAg Ni4gSWYgdGhpcyBmYWxscyBpbnRvIGEgY2xhc3MgbGlrZSBpc19yb2Nrd2VsbCwgaXNfc3VwcmEs IGV0YywgYWRkIHRoZSBuZXcKKyAgICAgb25lIHRvIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBjbGFz cy4KKworICA3LiBBZGp1c3QgdGhlIGdldGhybigpIHJvdXRpbmUgdG8gYWNjb3VudCBmb3IgYW55 IHNwZWNpYWwgbnVtZXJpYyByZXN1bHQKKyAgICAgY29kZXMgKGlmIGl0J3MgYSBIYXllcyBjb21w YXRpYmxlIG1vZGVtKS4KKworICA4LiBSZWFkIHRocm91Z2ggdGhlIGNvZGUgYW5kIGFkZCBhbnkg bW9kZW0tc3BlY2lmaWMgc2VjdGlvbnMgYXMgbmVjZXNzYXJ5LgorICAgICBGb3IgbW9zdCBtb2Rl cm4gSGF5ZXMtY29tcGF0aWJsZSBtb2RlbXMsIG5vIHNwZWNpZmljIGNvZGUgd2lsbCBiZQorICAg ICBuZWVkZWQuCisKKyAgTk9URTogVGhlIE1JTklESUFMIHN5bWJvbCBpcyB1c2VkIHRvIGJ1aWxk IHRoaXMgbW9kdWxlIHRvIGluY2x1ZGUgc3VwcG9ydAorICBmb3Igb25seSBhIG1pbmltdW0gbnVt YmVyIG9mIHN0YW5kYXJkIGFuZC9vciBnZW5lcmFsbHkgdXNlZnVsIG1vZGVtIHR5cGVzLAorICBu YW1lbHkgSGF5ZXMgMTIwMCBhbmQgMjQwMCwgSVRVLVQgKENDSVRUKSBWLjI1YmlzIGFuZCBWLjI1 dGVyIChWLjI1MCksCisgIEdlbmVyaWMtSGlnaC1TcGVlZCwgIlVua25vd24iLCBhbmQgTm9uZS4g IFdoZW4gYWRkaW5nIHN1cHBvcnQgZm9yIGEgbmV3CisgIG1vZGVtIHR5cGUsIGtlZXAgaXQgb3V0 c2lkZSBvZiB0aGUgTUlOSURJQUwgc2VjdGlvbnMgdW5sZXNzIGl0IGRlc2VydmVzIHRvCisgIGJl IGluIGl0LgorKi8KKworI2luY2x1ZGUgImNrY2RlYi5oIgorI2lmbmRlZiBOT0xPQ0FMCisjaWZu ZGVmIE5PRElBTAorI2lmbmRlZiBOT0lDUAorCisjaWZuZGVmIENLX0FURFQKKyNkZWZpbmUgQ0tf QVREVAorI2VuZGlmIC8qIENLX0FURFQgKi8KKworI2lmbmRlZiBOT09MRE1PREVNUyAgICAgICAg LyogVW5sZXNzIGluc3RydWN0ZWQgb3RoZXJ3aXNlLCAqLworI2RlZmluZSBPTERNT0RFTVMgICAg ICAgICAgLyoga2VlcCBzdXBwb3J0IGZvciBvbGQgbW9kZW1zLiAqLworI2VuZGlmIC8qIE5PT0xE TU9ERU1TICovCisKKyNpZm5kZWYgTV9PTEQJCSAgIC8qIEhpZGUgb2xkIG1vZGVtIGtleXdvcmRz IGluIFNFVCBNT0RFTSB0YWJsZS4gKi8KKyNkZWZpbmUgTV9PTEQgMAkJICAgLyogRGVmaW5lIGFz IENNX0lOViB0byBtYWtlIHRoZW0gaW52aXNpYmxlLiAqLworI2VuZGlmIC8qIE1fT0xEICovCisK KyNpZm5kZWYgTV9BTElBUworI2RlZmluZSBNX0FMSUFTIDY0CisjZW5kaWYgLyogTV9BTElBUyAq LworCisjaWZuZGVmIE1BQworI2luY2x1ZGUgPHNpZ25hbC5oPgorI2VuZGlmIC8qIE1BQyAqLwor I2luY2x1ZGUgImNrY2FzYy5oIgorI2luY2x1ZGUgImNrY2tlci5oIgorI2luY2x1ZGUgImNrdWNt ZC5oIgorI2luY2x1ZGUgImNrY25ldC5oIgorI2luY2x1ZGUgImNrdXVzci5oIgorCisjaWZkZWYg T1MyT05MWQorI2RlZmluZSBJTkNMX1ZJTwkJCS8qIE5lZWRlZCBmb3IgY2tvY29uLmggKi8KKyNp bmNsdWRlIDxvczIuaD4KKyN1bmRlZiBDT01NRU5UCisjaW5jbHVkZSAiY2tvY29uLmgiCisjZW5k aWYgLyogT1MyT05MWSAqLworCisjaWZkZWYgTlQKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjaW5j bHVkZSA8dGFwaS5oPgorI2luY2x1ZGUgImNrbndpbi5oIgorI2luY2x1ZGUgImNrbnRhcC5oIgor I2VuZGlmIC8qIE5UICovCisjaWZkZWYgT1MyCisjaW5jbHVkZSAiY2tvd2luLmgiCisjZW5kaWYg LyogT1MyICovCisKKyNpZm5kZWYgWklMT0cKKyNpZmRlZiBOVAorI2luY2x1ZGUgPHNldGptcGV4 Lmg+CisjZWxzZSAvKiBOVCAqLworI2luY2x1ZGUgPHNldGptcC5oPgorI2VuZGlmIC8qIE5UICov CisjZWxzZQorI2luY2x1ZGUgPHNldHJldC5oPgorI2VuZGlmIC8qIFpJTE9HICovCisKKyNpbmNs dWRlICJja2NzaWcuaCIgICAgICAgIC8qIEMtS2VybWl0IHNpZ25hbCBwcm9jZXNzaW5nICovCisK KyNpZmRlZiBNQUMKKyNkZWZpbmUgc2lnbmFsIG1zaWduYWwKKyNkZWZpbmUgU0lHVFlQIGxvbmcK KyNkZWZpbmUgYWxhcm0gbWFsYXJtCisjZGVmaW5lIFNJR19JR04gMAorI2RlZmluZSBTSUdBTFJN IDEKKyNkZWZpbmUgU0lHSU5UICAyCitTSUdUWVAgKCptc2lnbmFsKGludCB0eXBlLCBTSUdUWVAg KCpmdW5jKShpbnQpKSkoaW50KTsKKyNlbmRpZiAvKiBNQUMgKi8KKworI2lmZGVmIEFNSUdBCisj ZGVmaW5lIHNpZ25hbCBhc2lnbmFsCisjZGVmaW5lIGFsYXJtIGFhbGFybQorI2RlZmluZSBTSUdB TFJNIChfTlVNU0lHKzEpCisjZGVmaW5lIFNJR1RZUCB2b2lkCitTSUdUWVAgKCphc2lnbmFsKGlu dCB0eXBlLCBTSUdUWVAgKCpmdW5jKShpbnQpKSkoaW50KTsKK3Vuc2lnbmVkIGFhbGFybSh1bnNp Z25lZCk7CisjZW5kaWYgLyogQU1JR0EgKi8KKworI2lmZGVmIFNUUkFUVVMKKy8qCisgIFZPUyBk b2Vzbid0IGhhdmUgYWxhcm0oKSwgYnV0IGl0IGRvZXMgaGF2ZSBzb21lIHRoaW5ncyB3ZSBjYW4g d29yayB3aXRoLgorICBIb3dldmVyLCB3ZSBoYXZlIHRvIGNhdGNoIGFsbCB0aGUgc2lnbmFscyBp biBvbmUgcGxhY2UgdG8gZG8gdGhpcywgc28KKyAgd2UgaW50ZXJjZXB0IHRoZSBzaWduYWwoKSBy b3V0aW5lIGFuZCBjYWxsIGl0IGZyb20gb3VyIG93biByZXBsYWNlbWVudC4KKyovCisjZGVmaW5l IHNpZ25hbCB2c2lnbmFsCisjZGVmaW5lIGFsYXJtIHZhbGFybQorU0lHVFlQICgqdnNpZ25hbChp bnQgdHlwZSwgU0lHVFlQICgqZnVuYykoaW50KSkpKGludCk7CitpbnQgdmFsYXJtKGludCBpbnRl cnZhbCk7CisjaWZkZWYgcHV0Y2hhcgorI3VuZGVmIHB1dGNoYXIKKyNlbmRpZiAvKiBwdXRjaGFy ICovCisjZGVmaW5lIHB1dGNoYXIoeCkgY29ub2MoeCkKKyNpZmRlZiBnZXRjaGFyCisjdW5kZWYg Z2V0Y2hhcgorI2VuZGlmIC8qIGdldGNoYXIgKi8KKyNkZWZpbmUgZ2V0Y2hhcih4KSBjb25pbmMo MCkKKyNlbmRpZiAvKiBTVFJBVFVTICovCisKKyNpZmRlZiBPUzIKKyNpZmRlZiBwdXRjaGFyCisj dW5kZWYgcHV0Y2hhcgorI2VuZGlmIC8qIHB1dGNoYXIgKi8KKyNkZWZpbmUgcHV0Y2hhcih4KSBj b25vYyh4KQorI2VuZGlmIC8qIE9TMiAqLworCisjaWZuZGVmIE5PSElOVFMKK2V4dGVybiBpbnQg aGludHM7CisjZW5kaWYgLyogTk9ISU5UUyAqLworCisjaWZkZWYgQ0tfVEFQSQorZXh0ZXJuIGlu dCB0dHRhcGk7CitleHRlcm4gaW50IHRhcGlwYXNzOworI2VuZGlmIC8qIENLX1RBUEkgKi8KKwor I2lmZGVmIENLTE9HRElBTAorZXh0ZXJuIGludCBkaWFsb2c7CisjZW5kaWYgLyogQ0tMT0dESUFM ICovCisKK2NoYXIgKiBkaWFsbXNnW10gPSB7CQkJLyogRElBTCBzdGF0dXMgc3RyaW5ncyAqLwor CisgICAgLyogS2V5ZWQgdG8gbnVtYmVycyBkZWZpbmVkIGluIGNrY2tlci5oIC0tIGtlZXAgaW4g c3luYyEgKi8KKworICAgICJESUFMIHN1Y2NlZWRlZCIsCQkJICAgIC8qICAwIERJQV9PSyAqLwor ICAgICJNb2RlbSB0eXBlIG5vdCBzcGVjaWZpZWQiLAkJICAgIC8qICAxIERJQV9OT01PICovCisg ICAgIkNvbW11bmljYXRpb24gZGV2aWNlIG5vdCBzcGVjaWZpZWQiLCAgIC8qICAyIERJQV9OT0xJ ICovCisgICAgIkNvbW11bmljYXRpb24gZGV2aWNlIGNhbid0IGJlIG9wZW5lZCIsIC8qICAzIERJ QV9PUEVOICovCisgICAgIlNwZWVkIG5vdCBzcGVjaWZpZWQiLAkJICAgIC8qICA0IERJQV9OT1NQ ICovCisgICAgIlByZS1ESUFMIGhhbmd1cCBmYWlsZWQiLAkJICAgIC8qICA1IERJQV9IQU5HICov CisgICAgIkludGVybmFsIGVycm9yIiwJCQkgICAgLyogIDYgRElBX0lFICAgKi8KKyAgICAiRGV2 aWNlIGlucHV0L291dHB1dCBlcnJvciIsCSAgICAvKiAgNyBESUFfSU8gICAqLworICAgICJESUFM IFRJTUVPVVQgZXhwaXJlZCIsCQkgICAgLyogIDggRElBX1RJTU8gKi8KKyAgICAiSW50ZXJydXB0 ZWQgYnkgdXNlciIsCQkgICAgLyogIDkgRElBX0lOVFIgKi8KKyAgICAiTW9kZW0gbm90IHJlYWR5 IiwJCQkgICAgLyogMTAgRElBX05SRFkgKi8KKyAgICAiUGFydGlhbCBkaWFsIE9LIiwJCQkgICAg LyogMTEgRElBX1BBUlQgKi8KKyAgICAiRGlhbCBkaXJlY3RvcnkgbG9va3VwIGVycm9yIiwJICAg IC8qIDEyIERJQV9ESVIgICovCisgICAgIkhhbmd1cCBPSyIsCQkJICAgIC8qIDEzIERJQV9IVVAg ICovCisgICAgTlVMTCwJCQkJICAgIC8qIDE0ICh1bmRlZikgICovCisgICAgTlVMTCwJCQkJICAg IC8qIDE1ICh1bmRlZikgICovCisgICAgTlVMTCwJCQkJICAgIC8qIDE2ICh1bmRlZikgICovCisg ICAgTlVMTCwJCQkJICAgIC8qIDE3ICh1bmRlZikgICovCisgICAgTlVMTCwJCQkJICAgIC8qIDE4 ICh1bmRlZikgICovCisgICAgIk5vIHJlc3BvbnNlIGZyb20gbW9kZW0iLAkJICAgIC8qIDE5IERJ QV9OUlNQICovCisgICAgIk1vZGVtIGNvbW1hbmQgZXJyb3IiLAkJICAgIC8qIDIwIERJQV9FUlIg ICovCisgICAgIkZhaWx1cmUgdG8gaW5pdGlhbGl6ZSBtb2RlbSIsCSAgICAvKiAyMSBESUFfTk9J TiAqLworICAgICJQaG9uZSBidXN5IiwJCQkgICAgLyogMjIgRElBX0JVU1kgKi8KKyAgICAiTm8g Y2FycmllciIsCQkJICAgIC8qIDIzIERJQV9OT0NBICovCisgICAgIk5vIGRpYWx0b25lIiwJCQkg ICAgLyogMjQgRElBX05PRFQgKi8KKyAgICAiSW5jb21pbmcgY2FsbCIsCQkJICAgIC8qIDI1IERJ QV9SSU5HICovCisgICAgIk5vIGFuc3dlciIsCQkJICAgIC8qIDI2IERJQV9OT0FOICovCisgICAg IkRpc2Nvbm5lY3RlZCIsCQkJICAgIC8qIDI3IERJQV9ESVNDICovCisgICAgIkFuc3dlcmVkIGJ5 IHZvaWNlIiwJCSAgICAvKiAyOCBESUFfVk9JQyAqLworICAgICJBY2Nlc3MgZGVuaWVkIC8gZm9y YmlkZGVuIGNhbGwiLAkgICAgLyogMjkgRElBX05PQUMgKi8KKyAgICAiQmxhY2tsaXN0ZWQiLAkJ CSAgICAvKiAzMCBESUFfQkxDSyAqLworICAgICJEZWxheWVkIiwgICAgCQkJICAgIC8qIDMxIERJ QV9ERUxBICovCisgICAgIkZheCBjb25uZWN0aW9uIiwJCQkgICAgLyogMzIgRElBX0ZBWCAgKi8K KyAgICAiRGlnaXRhbCBsaW5lIiwJCQkgICAgLyogMzMgRElBX0RJR0kgKi8KKyAgICAiVEFQSSBk aWFsaW5nIGZhaWx1cmUiLAkgICAgICAgICAgICAvKiAzNCBESUFfVEFQSSAqLworICAgIE5VTEwJ CQkJICAgIC8qIDM0ICovCit9OworCisjaWZkZWYgQ09NTUVOVAorI2lmZGVmIE5PU1BMCitzdGF0 aWMKKyNlbmRpZiAvKiBOT1NQTCAqLworY2hhciBtb2RlbW1zZ1sxMjhdID0geyBOVUwsIE5VTCB9 OwkvKiBESUFMIHJlc3BvbnNlIGZyb20gbW9kZW0gKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisK KyNpZmRlZiBOVFNJRworZXh0ZXJuIGludCBUbHNJbmRleDsKKyNlbmRpZiAvKiBOVFNJRyAqLwor CitpbnQgbWRtdHlwID0gbl9HRU5FUklDOwkJCS8qIERlZmF1bHQgbW9kZW0gdHlwZSAqLworaW50 IG1kbXNldCA9IDA7CQkJCS8qIFVzZXIgZXhwbGljaXRseSBzZXQgYSBtb2RlbSB0eXBlICovCisK K2ludAkJCQkJLyogU0VUIERJQUwgcGFyYW1ldGVycyAqLworICBkaWFsaG5nID0gMSwJCQkJLyog RElBTCBIQU5HVVAsIGRlZmF1bHQgaXMgT04gKi8KKyAgZGlhbGRweSA9IDAsCQkJCS8qIERJQUwg RElTUExBWSwgZGVmYXVsdCBpcyBPRkYgKi8KKyAgbWRtc3BkICA9IDAsCQkJCS8qIERJQUwgU1BF RUQtTUFUQ0hJTkcgKDAgPSBPRkYpICovCisgIG1kbXNwayAgPSAxLAkJCQkvKiBNT0RFTSBTUEVB S0VSICovCisgIG1kbXZvbCAgPSAyLAkJCQkvKiBNT0RFTSBWT0xVTUUgKi8KKyAgZGlhbHRtbyA9 IDAsCQkJCS8qIERJQUwgVElNRU9VVCAqLworICBkaWFsYXRtbyA9IC0xLAkJCS8qIEFOU1dFUiBU SU1FT1VUICovCisgIGRpYWxrc3AgPSAwLAkJCQkvKiBESUFMIEtFUk1JVC1TUE9PRiwgMCA9IE9G RiAqLworICBkaWFsaWR0ID0gMCwJCQkJLyogRElBTCBJR05PUkUtRElBTFRPTkUgKi8KKyNpZm5k ZWYgQ0tfUlRTQ1RTCisgIC8qIElmIHdlIGNhbid0IGRvIFJUUy9DVFMgdGhlbiB0aGVyZSdzIG5v IGZsb3cgY29udHJvbCBhdCBmaXJzdC4gICovCisgIC8qIFNvIHdlIG1pZ2h0IGVhc2lseSBsb3Nl IHRoZSBlY2hvIHRvIHRoZSBpbml0IHN0cmluZyBhbmQgdGhlIE9LICovCisgIC8qIGFuZCB0aGVu IGdpdmUgIk5vIHJlc3BvbnNlIGZyb20gbW9kZW0iIGVycm9ycy4gKi8KKyAgZGlhbHBhY2UgPSAx NTAsCQkJLyogRElBTCBQQUNJTkcgKi8KKyNlbHNlCisgIGRpYWxwYWNlID0gLTEsCisjZW5kaWYg LyogQ0tfUlRTQ1RTICovCisKKyAgLyogMCA9IFJTMjMyIChkcm9wIERUUik7IDEgPSBNT0RFTS1D T01NQU5EIChlLmcuIDxzZWM+KysrPHNlYz5BVEgwKSAqLworICBkaWFsbWh1ID0gREVGTURNSFVQ OwkJCS8qIE1PREVNIEhBTkdVUC1NRVRIT0QgKi8KKworaW50CisgIGRpYWxlYyA9IDEsCQkJCS8q IERJQUwgRVJST1ItQ09SUkVDVElPTiAqLworICBkaWFsZGMgPSAxLAkJCQkvKiBESUFMIENPTVBS RVNTSU9OICAqLworI2lmZGVmIFZNUworICAvKiBWTVMgY2FuIG9ubHkgdXNlIFhvbi9Yb2ZmICov CisgIGRpYWxmYyA9IEZMT19YT05YLAkJCS8qIERJQUwgRkxPVy1DT05UUk9MICovCisjZWxzZQor ICBkaWFsZmMgPSBGTE9fQVVUTywKKyNlbmRpZiAvKiBWTVMgKi8KKyAgZGlhbG10aCA9IFhZRE1f RCwJCQkvKiBESUFMIE1FVEhPRCAoVG9uZSwgUHVsc2UsIERlZmFsdCkgKi8KKyAgZGlhbG1hdXRv ID0gMSwJCQkvKiBESUFMIE1FVEhPRCBpcyBBVVRPICovCisgIGRpYWxlc2MgPSAwOwkJCQkvKiBE SUFMIEVTQ0FQRSAqLworCitpbnQgdGVsZXBob255ID0gMDsJCQkvKiBDb21tYW5kLWxpbmUgJy1U JyBvcHRpb24gKi8KKworbG9uZyBkaWFsbWF4ID0gMEwsCQkJLyogTW9kZW0ncyBtYXggaW50ZXJm YWNlIHNwZWVkICovCisgIGRpYWxjYXBhcyAgPSAwTDsJCQkvKiBNb2RlbSdzIGNhcGFiaWxpdGll cyAqLworCitpbnQgZGlhbHN0YSA9IERJQV9VTks7CQkJLyogRGV0YWlsZWQgcmV0dXJuIGNvZGUg KGNrdXVzci5oKSAqLworCisjaWZkZWYgQ09NTUVOVAoraW50IGFuc19jaWQgPSAwOwkJCS8qIFNF VCBBTlNXRVIgcGFyYW1ldGVycyAqLworaW50IGFuc19yaW5ncyA9IDA7CQkJLyogKG5vdCB1c2Vk IHlldC4uLikgKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisKK2ludCBpc19yb2Nrd2VsbCA9IDA7 CitpbnQgaXNfbW90b3JvbGEgPSAwOworaW50IGlzX3N1cHJhID0gMDsKK2ludCBpc19oYXllc2hp c3BkID0gMDsKKworLyogRGlhbGluZyBkaXJlY3RvcnkgbGlzdCAqLworCitjaGFyICpkaWFsZGly W01BWERESVJdOwkJCS8qIERJQUwgRElSRUNUT1JZIGZpbGVuYW1lIGFycmF5ICovCitpbnQgICBu ZGlhbGRpciA9IDA7CQkJLyogSG93IG1hbnkgZGlhbCBkaXJlY3RvcmllcyAqLworCisvKiBVc2Vy IG92ZXJyaWRlcyBmb3IgYnVpbHQtaW4gbW9kZW0gY29tbWFuZHMgKi8KKworY2hhciAqZGlhbGlu aSA9IE5VTEw7CQkJLyogTU9ERU0gSU5JVC1TVFJJTkcgbm9uZSAqLworY2hhciAqZGlhbG1zdHIg PSBOVUxMOwkJCS8qIE1PREVNIERJQUxNT0RFLVNUUklORyAqLworY2hhciAqZGlhbG1wcm10ID0g TlVMTDsJCQkvKiBNT0RFTSBESUFMTU9ERS1QUk9NUFQgKi8KK2NoYXIgKmRpYWxjbWQgPSBOVUxM OwkJCS8qIE1PREVNIERJQUwtQ09NTUFORCwgZGVmYXVsdCBub25lICovCitjaGFyICpkaWFsbmFt ZSAgPSBOVUxMOwkJCS8qIERlc2NyaXB0aXZlIG5hbWUgZm9yIG1vZGVtICovCitjaGFyICpkaWFs ZGNvbiAgPSBOVUxMOwkJCS8qIERDIE9OIGNvbW1hbmQgKi8KK2NoYXIgKmRpYWxkY29mZiA9IE5V TEw7CQkJLyogREMgT0ZGIGNvbW1hbmQgKi8KK2NoYXIgKmRpYWxlY29uICA9IE5VTEw7CQkJLyog RUMgT04gY29tbWFuZCAqLworY2hhciAqZGlhbGVjb2ZmID0gTlVMTDsJCQkvKiBFQyBPRkYgY29t bWFuZCAqLworY2hhciAqZGlhbGFhb24gID0gTlVMTDsJCQkvKiBBdXRvYW5zd2VyIE9OIGNvbW1h bmQgKi8KK2NoYXIgKmRpYWxhYW9mZiA9IE5VTEw7CQkJLyogQXV0b2Fuc3dlciBPRkYgY29tbWFu ZCAqLworY2hhciAqZGlhbGhjbWQgID0gTlVMTDsJCQkvKiBIYW5ndXAgY29tbWFuZCAqLworY2hh ciAqZGlhbGh3ZmMgID0gTlVMTDsJCQkvKiBIYXJkd2FyZSBmbG93IGNvbnRyb2wgY29tbWFuZCAq LworY2hhciAqZGlhbHN3ZmMgID0gTlVMTDsJCQkvKiAoTG9jYWwpIHNvZnR3YXJlIGYuYy4gY29t bWFuZCAqLworY2hhciAqZGlhbG5vZmMgID0gTlVMTDsJCQkvKiBObyAoTG9jYWwpIGZsb3cgY29u dHJvbCBjb21tYW5kICovCitjaGFyICpkaWFsdG9uZSAgPSBOVUxMOwkJCS8qIENvbW1hbmQgdG8g Zm9yY2UgdG9uZSBkaWFsaW5nICovCitjaGFyICpkaWFscHVsc2UgPSBOVUxMOwkJCS8qICAuLnRv IGZvcmNlIHB1bHNlIGRpYWxpbmcgKi8KK2NoYXIgKmRpYWx4MyAgICA9IE5VTEw7CQkJLyogSWdu b3JlIGRpYWx0b25lICovCitjaGFyICptZG1uYW1lICAgPSBOVUxMOworY2hhciAqZGlhbHNwb24g ID0gTlVMTDsJCQkvKiBTcGVha2VyIE9uIGNvbW1hbmQgKi8KK2NoYXIgKmRpYWxzcG9mZiA9IE5V TEw7CQkJLyogU3BlYWtlciBPZmYgY29tbWFuZCAqLworY2hhciAqZGlhbHZvbDEgID0gTlVMTDsJ CQkvKiBWb2x1bWUgTG93IGNvbW1hbmQgKi8KK2NoYXIgKmRpYWx2b2wyICA9IE5VTEw7CQkJLyog Vm9sdW1lIE1lZGl1bSBjb21tYW5kICovCitjaGFyICpkaWFsdm9sMyAgPSBOVUxMOwkJCS8qIFZv bHVtZSBIaWdoIGNvbW1hbmQgKi8KK2NoYXIgKmRpYWxpbmkyICA9IE5VTEw7CQkJLyogU2Vjb25k IGluaXQgc3RyaW5nICovCisKKy8qIFBob25lIG51bWJlciBvcHRpb25zICovCisKK2NoYXIgKmRp YWxucHIgPSBOVUxMOwkJCS8qIERJQUwgUFJFRklYLCBkaXR0byAqLworY2hhciAqZGlhbGxhYyA9 IE5VTEw7CQkJLyogRElBTCBMT0NBTC1BUkVBLUNPREUsIGRpdHRvICovCitjaGFyICpkaWFsbGNj ID0gTlVMTDsJCQkvKiBESUFMIExPQ0FMLUNPVU5UUlktQ09ERSwgZGl0dG8gKi8KK2NoYXIgKmRp YWxpeHAgPSBOVUxMOwkJCS8qIERJQUwgSU5UTC1QUkVGSVggKi8KK2NoYXIgKmRpYWxpeHMgPSBO VUxMOwkJCS8qIERJQUwgSU5UTC1TVUZGSVggKi8KK2NoYXIgKmRpYWxsZHAgPSBOVUxMOwkJCS8q IERJQUwgTEQtUFJFRklYICovCitjaGFyICpkaWFsbGRzID0gTlVMTDsJCQkvKiBESUFMIExELVNV RkZJWCAqLworY2hhciAqZGlhbGxjcCA9IE5VTEw7CQkJLyogRElBTCBMT0NBTC1QUkVGSVggKi8K K2NoYXIgKmRpYWxsY3MgPSBOVUxMOwkJCS8qIERJQUwgTE9DQUwtU1VGRklYICovCitjaGFyICpk aWFscHhpID0gTlVMTDsJCQkvKiBESUFMIFBCWC1JTlRFUk5BTC1QUkVGSVggKi8KK2NoYXIgKmRp YWxweG8gPSBOVUxMOwkJCS8qIERJQUwgUEJYLU9VVFNJREUtUFJFRklYICovCitjaGFyICpkaWFs c2Z4ID0gTlVMTDsJCQkvKiBESUFMIFNVRkZJWCAqLworY2hhciAqZGlhbHRmcCA9IE5VTEw7CQkJ LyogRElBTCBUT0xMLUZSRUUtUFJFRklYICovCisKK2NoYXIgKmNhbGxpZF9kYXRlID0gTlVMTDsJ CS8qIENhbGxlciBJRCBzdHJpbmdzICovCitjaGFyICpjYWxsaWRfdGltZSA9IE5VTEw7CitjaGFy ICpjYWxsaWRfbmFtZSA9IE5VTEw7CitjaGFyICpjYWxsaWRfbm1iciA9IE5VTEw7CitjaGFyICpj YWxsaWRfbWVzZyA9IE5VTEw7CisKK2V4dGVybiBjaGFyICogZF9uYW1lOworZXh0ZXJuIGNoYXIg KiBkaWFsdGZjW107CQkvKiBESUFMIFRPTEwtRlJFRS1BUkVBLUNPREUgKi8KK2V4dGVybiBjaGFy ICogZGlhbHB4eFtdOwkJLyogRElBTCBQQlgtRVhDSEFOR0UgKi8KK2V4dGVybiBpbnQgbnRvbGxm cmVlOworZXh0ZXJuIGludCBuZGlhbHB4eDsKKworZXh0ZXJuIGNoYXIgKiBkaWFscHVjY1tdOwkJ LyogRElBTCBQdWxzZSBjb3VudHJpZXMgKi8KK2V4dGVybiBpbnQgbmRpYWxwdWNjOworZXh0ZXJu IGNoYXIgKiBkaWFsdG9jY1tdOwkJLyogRElBTCBUb25lIGNvdW50cmllcyAqLworZXh0ZXJuIGlu dCBuZGlhbHRvY2M7CisKK2NoYXIgKmRpYWxtYWMgICA9IE5VTEw7CQkJLyogRElBTCBtYWNybyAq LworCisvKiBDb3VudHJpZXMgd2hlcmUgcHVsc2UgZGlhbGluZyBtdXN0IGJlIHVzZWQgKHRvbmUg aXMgbm90IGF2YWlsYWJsZSkgKi8KK3N0YXRpYyBjaGFyICogcHVsc2VjY1tdID0geyBOVUxMIH07 CS8qIChVbmtub3duIGF0IHByZXNlbnQpICovCisKKy8qIENvdW50cmllcyB3aGVyZSB0b25lIGRp YWxpbmcgbWF5IHNhZmVseSBiZSB0aGUgZGVmYXVsdC4gKi8KKy8qICIrIiBtYXJrcyBjb3VudHJp ZXMgd2hlcmUgcHVsc2UgaXMgYWxzbyBhbGxvd2VkLiAqLworLyogQm90aCBQdWxzZSBhbmQgVG9u ZSBhcmUgYWxsb3dlZCBpbiBBdXN0cmlhICYgU3dpdHplcmxhbmQgYnV0IGl0IGlzIG5vdCAqLwor LyogeWV0IGtub3duIGlmIFRvbmUgaXMgdW5pdmVyc2FsbHkgaW4gdGhvc2UgY291bnRyaWVzLiAq Lworc3RhdGljIGNoYXIgKiB0b25lY2NbXSA9IHsKKyAgICAiMSIsCQkJCS8qICsgTm9ydGggQW1l cmljYW4gTnVtYmVyaW5nIFBsYW4gKi8KKyAgICAiMzEiLAkJCQkvKiAgIE5ldGhlcmxhbmRzICov CisgICAgIjMyIiwJCQkJLyogICBCZWxnaXVtICovCisgICAgIjMzIiwJCQkJLyogICBGcmFuY2Ug Ki8KKyAgICAiMzUyIiwJCQkJLyogICBMdXhlbWJvdXJnICovCisgICAgIjM1MyIsCQkJCS8qICAg SXJlbGFuZCAqLworICAgICIzNTQiLAkJCQkvKiAgIEljZWxhbmQgKi8KKyAgICAiMzU4IiwJCQkJ LyogICBGaW5sYW5kICovCisgICAgIjM5IiwJCQkJLyogICBJdGFseSAqLworICAgICI0NCIsCQkJ CS8qICsgVUsgKi8KKyAgICAiNDUiLAkJCQkvKiAgIERlbm1hcmsgKi8KKyAgICAiNDYiLAkJCQkv KiAgIFN3ZWRlbiAqLworICAgICI0NyIsCQkJCS8qICAgTm9yd2F5ICovCisgICAgIjQ5IiwJCQkJ LyogKyBHZXJtYW55ICovCisgICAgTlVMTAorfTsKKworI2lmbmRlZiBNSU5JRElBTAorLyoKKyAg VGVsZWJpdCBtb2RlbCBjb2RlczoKKworICBBVEkgIE1vZGVsIE51bWJlcnMgICAgICAgICAgIEV4 YW1wbGVzCisgIC0tLSAgLS0tLS0tLS0tLS0tLSAgICAgICAgICAgLS0tLS0tLS0KKyAgMTIzICAg ICAgICAgICAgICAgICAgICAgICAgICBUZWxlYml0IGluICJ0b3RhbCBIYXllcy0xMjAwIiBlbXVs YXRpb24gbW9kZQorICA5NjAgICAgICAgICAgICAgICAgICAgICAgICAgIFRlbGViaXQgaW4gQ29u dmVudGlvbmFsIENvbW1hbmQgKEhheWVzKSBtb2RlCisgIDk2MSAgUkExMkMgICAgICAgICAgICAg ICAgICAgSUJNIFBDIGludGVybmFsIG9yaWdpbmFsIFRyYWlsYmxhemVyCisgIDk2MiAgUkExMkUg ICAgICAgICAgICAgICAgICAgRXh0ZXJuYWwgb3JpZ2luYWwgVHJhaWxibGF6ZXIKKyAgOTYzICBS TTEyQyAgICAgICAgICAgICAgICAgICBSYWNrbW91bnQgb3JpZ2luYWwgVHJhaWxibGF6ZXIKKyAg OTY0ICBUMThQQyAgICAgICAgICAgICAgICAgICBJQk0gUEMgaW50ZXJuYWwgVHJhaWxibGF6ZXIt UGx1cyAoVEIrKQorICA5NjUgIFQxOFNBLCBUMlNBQSwgVDJTQVMgICAgIEV4dGVybmFsIFRCKywg VDE2MDAsIFQyMDAwLCBUMzAwMCwgV0IsIGFuZCBsYXRlcgorICA5NjYgIFQxOFJNTSAgICAgICAg ICAgICAgICAgIFJhY2ttb3VudCBUQisKKyAgOTY3ICBUMk1DICAgICAgICAgICAgICAgICAgICBJ Qk0gUFMvMiBpbnRlcm5hbCBUQisKKyAgOTY4ICBUMTAwMCAgICAgICAgICAgICAgICAgICBFeHRl cm5hbCBUMTAwMAorICA5NjkgID8gICAgICAgICAgICAgICAgICAgICAgIFFibGF6ZXIKKyAgOTcw ICAgICAgICAgICAgICAgICAgICAgICAgICBRYmxhemVyIFBsdXMKKyAgOTcxICBUMjUwMCAgICAg ICAgICAgICAgICAgICBFeHRlcm5hbCBUMjUwMAorICA5NzIgIFQyNTAwICAgICAgICAgICAgICAg ICAgIFJhY2ttb3VudCBUMjUwMAorKi8KKworLyogVGVsZWJpdCBtb2RlbCBjb2RlcyAqLworCisj ZGVmaW5lIFRCX1VOSyAgMAkJCS8qIFVua25vd24gVGVsZWJpdCBtb2RlbCAqLworI2RlZmluZSBU Ql9CTEFaIDEJCQkvKiBPcmlnaW5hbCBUcmFpbEJsYXplciAqLworI2RlZmluZSBUQl9QTFVTCTIJ CQkvKiBUcmFpbEJsYXplciBQbHVzICovCisjZGVmaW5lIFRCXzEwMDAgMwkJCS8qIFQxMDAwICov CisjZGVmaW5lIFRCXzE1MDAgNAkJCS8qIFQxNTAwICovCisjZGVmaW5lIFRCXzE2MDAgNQkJCS8q IFQxNjAwICovCisjZGVmaW5lIFRCXzIwMDAgNgkJCS8qIFQyMDAwICovCisjZGVmaW5lIFRCXzI1 MDAgNwkJCS8qIFQyNTAwICovCisjZGVmaW5lIFRCXzMwMDAgOAkJCS8qIFQzMDAwICovCisjZGVm aW5lIFRCX1FCTEEgOQkJCS8qIFFibGF6ZXIgKi8KKyNkZWZpbmUgVEJfV0JMQSAxMAkJCS8qIFdv cmxkQmxhemVyICovCisjZGVmaW5lIFRCX19NQVggMTAJCQkvKiBIaWdoZXN0IG51bWJlciAqLwor CitjaGFyICp0Yl9uYW1lW10gPSB7CQkJLyogQXJyYXkgb2YgbW9kZWwgbmFtZXMgKi8KKyAgICAi VW5rbm93biIsCQkJCS8qIFRCX1VOSyAgKi8KKyAgICAiVHJhaWxCbGF6ZXIiLAkJCS8qIFRCX0JM QVogKi8KKyAgICAiVHJhaWxCbGF6ZXItUGx1cyIsCQkJLyogVEJfUExVUyAqLworICAgICJUMTAw MCIsCQkJCS8qIFRCXzEwMDAgKi8KKyAgICAiVDE1MDAiLAkJCQkvKiBUQl8xNTAwICovCisgICAg IlQxNjAwIiwJCQkJLyogVEJfMTYwMCAqLworICAgICJUMjAwMCIsCQkJCS8qIFRCXzIwMDAgKi8K KyAgICAiVDI1MDAiLAkJCQkvKiBUQl8yNTAwICovCisgICAgIlQzMDAwIiwJCQkJLyogVEJfMzAw MCAqLworICAgICJRYmxhemVyIiwJCQkJLyogVEJfUUJMQSAqLworICAgICJXb3JsZEJsYXplciIs CQkJLyogVEJfV0JMQSAqLworICAgICIiCit9OworI2VuZGlmIC8qIE1JTklESUFMICovCisKK2V4 dGVybiBpbnQgZmxvdywgbG9jYWwsIG1kbXR5cCwgcXVpZXQsIGJhY2tncmQsIHBhcml0eSwgc2Vz bG9nLCBuZXR3b3JrOworZXh0ZXJuIGludCBjYXJyaWVyLCBkdXBsZXgsIG1kbXNhdiwgcmVsaWFi bGUsIHNldHJlbGlhYmxlOworZXh0ZXJuIGludCB0dG5wcm90bywgbmV0dHlwZTsKK2V4dGVybiBs b25nIHNwZWVkOworZXh0ZXJuIGNoYXIgdHRuYW1lW10sIHNlc2ZpbFtdOworI2lmbmRlZiBOT1hG RVIKK2V4dGVybiBDSEFSIHN0Y2hyOworZXh0ZXJuIGludCBpbnRlcnJ1cHRlZDsKKyNlbmRpZiAv KiBOT1hGRVIgKi8KKworLyogIEZhaWx1cmUgY29kZXMgICovCisKKyNkZWZpbmUgRl9USU1FCQkx CQkvKiB0aW1lb3V0ICovCisjZGVmaW5lIEZfSU5UCQkyCQkvKiBpbnRlcnJ1cHQgKi8KKyNkZWZp bmUgRl9NT0RFTQkJMwkJLyogbW9kZW0tZGV0ZWN0ZWQgZmFpbHVyZSAqLworI2RlZmluZSBGX01J TklUCQk0CQkvKiBjYW5ub3QgaW5pdGlhbGl6ZSBtb2RlbSAqLworCisjaWZuZGVmIENLX1RBUEkK K3N0YXRpYworI2VuZGlmIC8qIENLX1RBUEkgKi8KKyNpZmRlZiBPUzIKKyB2b2xhdGlsZQorI2Vu ZGlmIC8qIE9TMiAqLworIGludCBmYWlsX2NvZGUgPSAgMDsJCQkvKiBEZWZhdWx0IGZhaWx1cmUg cmVhc29uLiAqLworCitzdGF0aWMgaW50IHhyZWRpYWwgPSAwOworc3RhdGljIGludCBmdW5jX2Nv ZGU7CQkJLyogMCA9IGRpYWxpbmcsIG5vbnplcm8gPSBhbnN3ZXJpbmcgKi8KK3N0YXRpYyBpbnQg cGFydGlhbDsKK3N0YXRpYyBpbnQgbXltZG10eXAgPSAwOworCisjZGVmaW5lIERXX05PVEhJTkcg ICAgICAwCQkvKiBXaGF0IHdlIGFyZSBkb2luZyAqLworI2RlZmluZSBEV19JTklUICAgICAgICAg MQorI2RlZmluZSBEV19ESUFMICAgICAgICAgMgorCitzdGF0aWMgaW50IGRpYWxfd2hhdCA9IERX X05PVEhJTkc7CS8qIE5vdGhpbmcgYXQgZmlyc3QuICovCitzdGF0aWMgaW50IG5vbnZlcmJhbCA9 IDA7CQkvKiBIYXllcyBpbiBudW1lcmljIHJlc3BvbnNlIG1vZGUgKi8KK3N0YXRpYyBNRE1JTkYg KiBtcDsKK3N0YXRpYyBDSEFSIGVzY2J1Zls2XTsKK3N0YXRpYyBsb25nIG1kbWNhcGFzOworCitf UFJPVE9UWVAgKHN0YXRpYyBWT0lEIGRyZXNldCwgKHZvaWQpICk7CitfUFJPVE9UWVAgKHN0YXRp YyBpbnQgKCp4eF9vayksIChpbnQsaW50KSApOworX1BST1RPVFlQIChzdGF0aWMgaW50IGRkaW5j LCAoaW50KSApOworX1BST1RPVFlQIChpbnQgZGlhbGh1cCwgKHZvaWQpICk7CitfUFJPVE9UWVAg KGludCBnZXRvaywgKGludCxpbnQpICk7CitfUFJPVE9UWVAgKGNoYXIgKiBja190aW1lLCAodm9p ZCkgKTsKK19QUk9UT1RZUCAoc3RhdGljIFZPSUQgdHRzbG93LCAoY2hhciAqLCBpbnQpICk7Cisj aWZkZWYgQ09NTUVOVAorX1BST1RPVFlQIChzdGF0aWMgVk9JRCB4Y3B5LCAoY2hhciAqLCBjaGFy ICosIHVuc2lnbmVkIGludCkgKTsKKyNlbmRpZiAvKiBDT01NRU5UICovCitfUFJPVE9UWVAgKHN0 YXRpYyBWT0lEIHdhaXRmb3IsIChjaGFyICopICk7CitfUFJPVE9UWVAgKHN0YXRpYyBWT0lEIGRp YWxvYywgKGNoYXIpICk7CitfUFJPVE9UWVAgKHN0YXRpYyBpbnQgZGlkd2VnZXQsIChjaGFyICos IGNoYXIgKikgKTsKK19QUk9UT1RZUCAoc3RhdGljIFZPSUQgc3BkY2hnLCAobG9uZykgKTsKK19Q Uk9UT1RZUCAoc3RhdGljIGludCBkaWFsZmFpbCwgKGludCkgKTsKK19QUk9UT1RZUCAoc3RhdGlj IFZPSUQgZ2V0aHJ3LCAodm9pZCkgKTsKK19QUk9UT1RZUCAoc3RhdGljIFZPSUQgZ2V0aHJuLCAo dm9pZCkgKTsKKworaW50IGRpYWx1ZHQgPSBuX1VERUY7CQkJLyogTnVtYmVyIG9mIHVzZXItZGVm aW5lZCB0eXBlICovCisKKy8qIEJFR0lOIE1ETUlORiBTVFJVQ1QgREVGSU5JVElPTlMgKi8KKwor LyoKKyAgRGVjbGFyZSBzdHJ1Y3R1cmVzIGNvbnRhaW5pbmcgbW9kZW0tc3BlY2lmaWMgaW5mb3Jt YXRpb24uCisgIFJFTUVNQkVSIHRoYXQgb25seSB0aGUgZmlyc3QgU0VWRU4gY2hhcmFjdGVycyBv ZiB0aGVzZSBuYW1lcyBhcmUKKyAgZ3VhcmFudGVlZCB0byBiZSB1bmlxdWUuCisKKyAgRmlyc3Qg ZGVjbGFyZSB0aGUgdGhyZWUgdHlwZXMgdGhhdCBhcmUgYWxsb3dlZCBmb3IgTUlOSURJQUwgdmVy c2lvbnMuCisqLworc3RhdGljCitNRE1JTkYgQ0NJVFQgPQkJCQkvKiBDQ0lUVCAvIElUVS1UIFYu MjViaXMgYXV0b2RpYWxlciAqLworLyoKKyAgQWNjb3JkaW5nIHRvIFYuMjViaXM6CisgIC4gRXZl biBwYXJpdHkgaXMgcmVxdWlyZWQgZm9yIGdpdmluZyBjb21tYW5kcyB0byB0aGUgbW9kZW0uCisg IC4gQ29tbWFuZHMgbWlnaHQgb3IgbWlnaHQgbm90IGVjaG8uCisgIC4gUmVzcG9uc2VzICgiSW5k aWNhdGlvbnMiKSBmcm9tIHRoZSBtb2RlbSBhcmUgdGVybWluYXRlZCBieSBDUiBhbmQgTEYuCisg IC4gQ2FsbCBzZXR1cCBpcyBhY2NvbXBsaXNoZWQgYnk6CisgICAgLSBEVEUgcmFpc2VzIERUUiAo Vi4yNCBjaXJjdWl0IDEwOCkgICAgICAgICAgICAgIFt0dG9wZW4oKSBkb2VzIHRoaXNdCisgICAg LSBNb2RlbSByYWlzZXMgQ1RTIChWLjI0IGNpcmN1aXQgMTA2KSAgICAgICAgICAgIFtDLUtlcm1p dCBpZ25vcmVzIHRoaXNdCisgICAgLSBEVEUgaXNzdWVzIGEgY2FsbCByZXF1ZXN0IGNvbW1hbmQg KCJDUk4iKQorICAgIC0gTW9kZW0gcmVzcG9uZHMgd2l0aCAiVkFMIiAoImNvbW1hbmQgYWNjZXB0 ZWQiKQorICAgIC0gSWYgdGhlIGNhbGwgaXMgY29tcGxldGVkOgorICAgICAgICBtb2RlbSByZXNw b25kcyB3aXRoICJDTlgiICgiY2FsbCBjb25uZWN0ZWQiKTsKKyAgICAgICAgbW9kZW0gdHVybnMg Q1RTICgxMDYpIE9GRjsKKyAgICAgICAgbW9kZW0gdHVybnMgRFNSICgxMDcpIE9OOworICAgICAg ZWxzZToKKyAgICAgICAgbW9kZW0gcmVzcG9uZHMgd2l0aCAiQ0ZJIDxwYXJhbWV0ZXI+IiAoImNh bGwgZmFpbHVyZSBpbmRpY2F0aW9uIikuCisgIC4gVG8gY2xlYXIgYSBjYWxsLCB0aGUgRFRFIHR1 cm5zIERUUiAoMTA4KSBPRkYuCisgIC4gVGhlcmUgaXMgbm8gbWVudGlvbiBvZiB0aGUgQ2Fycmll ciBEZXRlY3QgY2lyY3VpdCAoMTA5KSBpbiB0aGUgc3RhbmRhcmQuCisgIC4gVGhlcmUgaXMgbm8g cHJvdmlzaW9uIGZvciAiZXNjYXBpbmcgYmFjayIgdG8gdGhlIG1vZGVtJ3MgY29tbWFuZCBtb2Rl LgorCisgIEl0IGlzIG5vdCBrbm93biB3aGV0aGVyIHRoZXJlIGV4aXN0cyBpbiByZWFsIGxpZmUg YSBwdXJlIFYuMjViaXMgbW9kZW0uCisgIElmIHRoZXJlIGlzLCB0aGlzIGNvZGUgaGFzIG5ldmVy IGJlZW4gdGVzdGVkIG9uIGl0LiAgU2VlIHRoZSBEaWdpdGVsIGVudHJ5LgorKi8KKyAgICB7Cisg ICAgIkFueSBDQ0lUVCAvIElUVS1UIFYuMjViaXMgY29uZm9ybWFudCBtb2RlbSIsCisgICAgIiIs CQkJLyogcHVsc2UgY29tbWFuZCAqLworICAgICIiLAkJCS8qIHRvbmUgY29tbWFuZCAqLworICAg IDQwLAkJCS8qIGRpYWxfdGltZSAtLSBwcm9ncmFtbWFibGUgLS0gKi8KKyAgICAiLDoiLAkJLyog cGF1c2VfY2hhcnMgLS0gIiwiIHdhaXRzIGZvciBwcm9ncmFtbWFibGUgdGltZSAqLworICAgICAg ICAgICAgICAgICAgICAgICAgLyogIjoiIHdhaXRzIGZvciBkaWFsIHRvbmUgKi8KKyAgICAxMCwJ CQkvKiBwYXVzZV90aW1lIChzZWNvbmRzLCBqdXN0IGEgZ3Vlc3MpICovCisgICAgIiIsCQkJLyog d2FrZV9zdHIgKG5vbmUpICovCisgICAgMjAwLAkJLyogd2FrZV9yYXRlIChtc2VjKSAqLworICAg ICJWQUwiLAkJLyogd2FrZV9wcm9tcHQgKi8KKyAgICAiIiwJCQkvKiBkbW9kZV9zdHIgKG5vbmUp ICovCisgICAgIiIsCQkJLyogZG1vZGVfcHJvbXB0IChub25lKSAqLworICAgICJDUk4lc1wwMTUi LCAgICAgICAgLyogZGlhbF9zdHIgKi8KKyAgICAyMDAsCQkvKiBkaWFsX3JhdGUgKG1zZWMpICov CisgICAgMCwJCQkvKiBObyBlc2NfdGltZSAqLworICAgIDAsCQkJLyogTm8gZXNjX2NoYXIgICov CisgICAgIiIsCQkJLyogTm8gaHVwX3N0ciAgKi8KKyAgICAiIiwJCQkvKiBod2ZjX3N0ciAqLwor ICAgICIiLAkJCS8qIHN3ZmNfc3RyICovCisgICAgIiIsCQkJLyogbm9mY19zdHIgKi8KKyAgICAi IiwJCQkvKiBlY19vbl9zdHIgKi8KKyAgICAiIiwJCQkvKiBlY19vZmZfc3RyICovCisgICAgIiIs CQkJLyogZGNfb25fc3RyICovCisgICAgIiIsCQkJLyogZGNfb2ZmX3N0ciAqLworICAgICJDSUNc MDE1IiwJCS8qIGFhX29uX3N0ciAqLworICAgICJESUNcMDE1IiwJCS8qIGFhX29mZl9zdHIgKi8K KyAgICAiIiwJCQkvKiBzYl9vbl9zdHIgKi8KKyAgICAiIiwJCQkvKiBzYl9vZmZfc3RyICovCisg ICAgIiIsCQkJLyogc3Bfb2ZmX3N0ciAqLworICAgICIiLAkJCS8qIHNwX29uX3N0ciAqLworICAg ICIiLAkJCS8qIHZvbDFfc3RyICovCisgICAgIiIsCQkJLyogdm9sMl9zdHIgKi8KKyAgICAiIiwJ CQkvKiB2b2wzX3N0ciAqLworICAgICIiLAkJCS8qIGlnbm9yZWR0ICovCisgICAgIiIsCQkJLyog aW5pMiAqLworICAgIDBMLAkJCS8qIG1heF9zcGVlZCAqLworICAgIENLRF9WMjUsCQkvKiBjYXBh cyAqLworICAgIE5VTEwJCS8qIE5vIG9rX2ZuICAgICovCit9OworCitzdGF0aWMKK01ETUlORiBI QVlFUyA9CQkJCS8qIEhheWVzIDI0MDAgYW5kIGNvbXBhdGlibGUgbW9kZW1zICovCisgICAgewor ICAgICJIYXllcyBTbWFydG1vZGVtIDI0MDAgYW5kIGNvbXBhdGlibGVzIiwKKyAgICAiQVRQXDAx NSIsCQkJCS8qIHB1bHNlIGNvbW1hbmQgKi8KKyAgICAiQVRUXDAxNSIsCQkJCS8qIHRvbmUgY29t bWFuZCAqLworICAgIDM1LAkJCQkJLyogZGlhbF90aW1lICovCisgICAgIiwiLAkJCQkvKiBwYXVz ZV9jaGFycyAqLworICAgIDIsCQkJCQkvKiBwYXVzZV90aW1lICovCisjaWZkZWYgT1MyCisgICAg IkFURTFRMFYxJlMwJkMxJkQyXDAxNSIsCQkvKiB3YWtlX3N0ciAqLworI2Vsc2UKKyNpZmRlZiBW TVMKKyAgICAiQVRRMCZTMVwwMTUiLAkJCS8qIHdha2Vfc3RyICovCisjZWxzZQorICAgICJBVFEw XDAxNSIsCQkJCS8qIHdha2Vfc3RyICovCisjZW5kaWYgLyogVk1TICovCisjZW5kaWYgLyogT1My ICovCisgICAgMCwJCQkJCS8qIHdha2VfcmF0ZSAqLworICAgICJPS1wwMTUiLAkJCQkvKiB3YWtl X3Byb21wdCAqLworICAgICIiLAkJCQkJLyogZG1vZGVfc3RyICovCisgICAgIiIsCQkJCQkvKiBk bW9kZV9wcm9tcHQgKi8KKyAgICAiQVREJXNcMDE1IiwJCQkvKiBkaWFsX3N0ciwgdXNlciBzdXBw bGllcyBEIG9yIFQgKi8KKyAgICAwLAkJCQkJLyogZGlhbF9yYXRlICovCisgICAgMTEwMCwJCQkJ LyogZXNjX3RpbWUgKi8KKyAgICA0MywJCQkJCS8qIGVzY19jaGFyICovCisgICAgIkFUUTBIMFww MTUiLAkJCS8qIGh1cF9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGh3ZmNfc3RyICovCisgICAgIiIs CQkJCQkvKiBzd2ZjX3N0ciAqLworICAgICIiLAkJCQkJLyogbm9mY19zdHIgKi8KKyAgICAiIiwJ CQkJCS8qIGVjX29uX3N0ciAqLworICAgICIiLAkJCQkJLyogZWNfb2ZmX3N0ciAqLworICAgICIi LAkJCQkJLyogZGNfb25fc3RyICovCisgICAgIiIsCQkJCQkvKiBkY19vZmZfc3RyICovCisgICAg IkFUUzA9MVwwMTUiLAkJCS8qIGFhX29uX3N0ciAqLworICAgICJBVFMwPTBcMDE1IiwJCQkvKiBh YV9vZmZfc3RyICovCisgICAgIiIsCQkJCQkvKiBzYl9vbl9zdHIgKi8KKyAgICAiIiwJCQkJCS8q IHNiX29mZl9zdHIgKi8KKyAgICAiQVRNMVwwMTUiLAkJCQkvKiBzcF9vbl9zdHIgKi8KKyAgICAi QVRNMFwwMTUiLAkJCQkvKiBzcF9vZmZfc3RyICovCisgICAgIkFUTDFcMDE1IiwJCQkJLyogdm9s MV9zdHIgKi8KKyAgICAiQVRMMlwwMTUiLAkJCQkvKiB2b2wyX3N0ciAqLworICAgICJBVEwzXDAx NSIsCQkJCS8qIHZvbDNfc3RyICovCisgICAgIkFUWDNcMDE1IiwJCQkJLyogaWdub3JlZHQgKi8K KyAgICAiIiwJCQkJCS8qIGluaTIgKi8KKyAgICAyNDAwTCwJCQkJLyogbWF4X3NwZWVkICovCisg ICAgQ0tEX0FULAkJCQkvKiBjYXBhcyAqLworICAgIGdldG9rCQkJCS8qIG9rX2ZuICovCit9Owor CisvKgorICBUaGUgaW50ZW50IG9mIHRoZSAidW5rbm93biIgbW9kZW0gaXMgdG8gYWxsb3cgS0VS TUlUIHRvIHN1cHBvcnQKKyAgdW5rbm93biBtb2RlbXMgYnkgaGF2aW5nIHRoZSB1c2VyIHR5cGUg dGhlIGVudGlyZSBhdXRvZGlhbCBzZXF1ZW5jZQorICAocG9zc2libHkgaW5jbHVkaW5nIGNvbnRy b2wgY2hhcmFjdGVycywgZXRjLikgYXMgdGhlICJwaG9uZSBudW1iZXIiLgorICBUaGUgcHJvdG9j b2wgYW5kIG90aGVyIGNoYXJhY3RlcmlzdGljcyBvZiB0aGlzIG1vZGVtIGFyZSB1bmtub3duLCB3 aXRoCisgIHNvbWUgInJlYXNvbmFibGUiIHZhbHVlcyBiZWluZyBjaG9zZW4gZm9yIHNvbWUgb2Yg dGhlbS4gIFRoZSBvbmx5IHdheSB0bworICBkZXRlY3QgaWYgYSBjb25uZWN0aW9uIGlzIG1hZGUg aXMgdG8gbG9vayBmb3IgY2Fycmllci4KKyovCitzdGF0aWMKK01ETUlORiBVTktOT1dOID0JCQkv KiBJbmZvcm1hdGlvbiBmb3IgIlVua25vd24iIG1vZGVtICovCisgICAgeworICAgICJVbmtub3du IiwJCQkJLyogbmFtZSAqLworICAgICIiLAkJCQkJLyogcHVsc2UgY29tbWFuZCAqLworICAgICIi LAkJCQkJLyogdG9uZSBjb21tYW5kICovCisgICAgMzAsCQkJCQkvKiBkaWFsX3RpbWUgKi8KKyAg ICAiIiwJCQkJCS8qIHBhdXNlX2NoYXJzICovCisgICAgMCwJCQkJCS8qIHBhdXNlX3RpbWUgKi8K KyAgICAiIiwJCQkJCS8qIHdha2Vfc3RyICovCisgICAgMCwJCQkJCS8qIHdha2VfcmF0ZSAqLwor ICAgICIiLAkJCQkJLyogd2FrZV9wcm9tcHQgKi8KKyAgICAiIiwJCQkJCS8qIGRtb2RlX3N0ciAq LworICAgIE5VTEwsCQkJCS8qIGRtb2RlX3Byb21wdCAqLworICAgICIlc1wwMTUiLAkJCQkvKiBk aWFsX3N0ciAqLworICAgIDAsCQkJCQkvKiBkaWFsX3JhdGUgKi8KKyAgICAwLAkJCQkJLyogZXNj X3RpbWUgKi8KKyAgICAwLAkJCQkJLyogZXNjX2NoYXIgKi8KKyAgICAiIiwJCQkJCS8qIGh1cF9z dHIgKi8KKyAgICAiIiwJCQkJCS8qIGh3ZmNfc3RyICovCisgICAgIiIsCQkJCQkvKiBzd2ZjX3N0 ciAqLworICAgICIiLAkJCQkJLyogbm9mY19zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGVjX29uX3N0 ciAqLworICAgICIiLAkJCQkJLyogZWNfb2ZmX3N0ciAqLworICAgICIiLAkJCQkJLyogZGNfb25f c3RyICovCisgICAgIiIsCQkJCQkvKiBkY19vZmZfc3RyICovCisgICAgIiIsCQkJCQkvKiBhYV9v bl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGFhX29mZl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHNi X29uX3N0ciAqLworICAgICIiLAkJCQkJLyogc2Jfb2ZmX3N0ciAqLworICAgICIiLAkJCQkJLyog c3Bfb2ZmX3N0ciAqLworICAgICIiLAkJCQkJLyogc3Bfb25fc3RyICovCisgICAgIiIsCQkJCQkv KiB2b2wxX3N0ciAqLworICAgICIiLAkJCQkJLyogdm9sMl9zdHIgKi8KKyAgICAiIiwJCQkJCS8q IHZvbDNfc3RyICovCisgICAgIiIsCQkJCQkvKiBpZ25vcmVkdCAqLworICAgICIiLAkJCQkJLyog aW5pMiAqLworICAgIDBMLAkJCQkJLyogbWF4X3NwZWVkICovCisgICAgMCwJCQkJCS8qIGNhcGFz ICovCisgICAgTlVMTAkJCQkvKiBva19mbiAqLworfTsKKworI2lmbmRlZiBNSU5JRElBTAorc3Rh dGljCitNRE1JTkYgQVRUSVNOID0JCQkJLyogQVQmVCBJU04gTmV0d29yayAqLworICAgIHsKKyAg ICAiIiwJCQkJCS8qIHB1bHNlIGNvbW1hbmQgKi8KKyAgICAiIiwJCQkJCS8qIHRvbmUgY29tbWFu ZCAqLworICAgICJBVCZUIElTTiBOZXR3b3JrIiwKKyAgICAzMCwJCQkJCS8qIERpYWwgdGltZSAq LworICAgICIiLAkJCQkJLyogUGF1c2UgY2hhcmFjdGVycyAqLworICAgIDAsCQkJCQkvKiBQYXVz ZSB0aW1lICovCisgICAgIlwwMTVcMDE1XDAxNVwwMTUiLAkJCS8qIFdha2Ugc3RyaW5nICovCisg ICAgOTAwLAkJCQkvKiBXYWtlIHJhdGUgKi8KKyAgICAiRElBTCIsCQkJCS8qIFdha2UgcHJvbXB0 ICovCisgICAgIiIsCQkJCQkvKiBkbW9kZV9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGRtb2RlX3By b21wdCAqLworICAgICIlc1wwMTUiLAkJCQkvKiBkaWFsX3N0ciAqLworICAgIDAsCQkJCQkvKiBk aWFsX3JhdGUgKi8KKyAgICAwLAkJCQkJLyogZXNjX3RpbWUgKi8KKyAgICAwLAkJCQkJLyogZXNj X2NoYXIgKi8KKyAgICAiIiwJCQkJCS8qIGh1cF9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGh3ZmNf c3RyICovCisgICAgIiIsCQkJCQkvKiBzd2ZjX3N0ciAqLworICAgICIiLAkJCQkJLyogbm9mY19z dHIgKi8KKyAgICAiIiwJCQkJCS8qIGVjX29uX3N0ciAqLworICAgICIiLAkJCQkJLyogZWNfb2Zm X3N0ciAqLworICAgICIiLAkJCQkJLyogZGNfb25fc3RyICovCisgICAgIiIsCQkJCQkvKiBkY19v ZmZfc3RyICovCisgICAgIiIsCQkJCQkvKiBhYV9vbl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGFh X29mZl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHNiX29uX3N0ciAqLworICAgICIiLAkJCQkJLyog c2Jfb2ZmX3N0ciAqLworICAgICIiLAkJCQkJLyogc3Bfb2ZmX3N0ciAqLworICAgICIiLAkJCQkJ Lyogc3Bfb25fc3RyICovCisgICAgIiIsCQkJCQkvKiB2b2wxX3N0ciAqLworICAgICIiLAkJCQkJ Lyogdm9sMl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHZvbDNfc3RyICovCisgICAgIiIsCQkJCQkv KiBpZ25vcmVkdCAqLworICAgICIiLAkJCQkJLyogaW5pMiAqLworICAgIDBMLAkJCQkJLyogbWF4 X3NwZWVkICovCisgICAgMCwJCQkJCS8qIGNhcGFzICovCisgICAgTlVMTAkJCQkvKiBva19mbiAq LworfTsKKworc3RhdGljCitNRE1JTkYgQVRUTU9ERU0gPQkvKiBpbmZvcm1hdGlvbiBmb3IgQVQm VCBzd2l0Y2hlZC1uZXR3b3JrIG1vZGVtcyAqLworCQkJLyogIk51bWJlciIgZm9sbG93aW5nICJk aWFsIiBjYW4gaW5jbHVkZTogcCdzIGFuZAorCQkJICogdCdzIHRvIGluZGljYXRlIHB1bHNlIG9y IHRvbmUgKGRlZmF1bHQpIGRpYWxpbmcsCisJCQkgKiArIGZvciB3YWl0IGZvciBkaWFsIHRvbmUs ICwgZm9yIHBhdXNlLCByIGZvcgorCQkJICogbGFzdCBudW1iZXIgZGlhbGVkLCBhbmQsIGV4Y2Vw dCBmb3IgMjIyNEIsIHNvbWUKKwkJCSAqIGNvbW1hLWRlbGltaXRlZCBvcHRpb25zIGxpa2UgbzEy PXksIGJlZm9yZSBudW1iZXIuCisKKyAqICJJbXBvcnRhbnQiIG9wdGlvbnMgZm9yIHRoZSBtb2Rl bXM6CisgKgorICoJQWxsOgkJRXhjZXB0IGZvciAyMjI0QiwgZW5hYmxlIG9wdGlvbiAxMiBmb3Ig InRyYW5zcGFyZW50CisgKgkJCWRhdGEsIiBvMTI9eS4gIElmIGEgY29tcHV0ZXIgcG9ydCB1c2Vk IGZvciBib3RoCisgKgkJCWluY29taW5nIGFuZCBvdXRnb2luZyBjYWxscyBpcyBjb25uZWN0ZWQg dG8gdGhlCisgKgkJCW1vZGVtLCBkaXNhYmxlICJlbnRlciBpbnRlcmFjdGl2ZSBtb2RlIG9uIGNh cnJpYWdlCisgKgkJCXJldHVybiwiIEVJQ1IuICBUaGUgS2VybWl0ICJkaWFsIiBjb21tYW5kIGNh bgorICoJCQlmdW5jdGlvbiB3aXRoIEVJQSBsZWFkcyBzdGFuZGFyZCwgRUlBUy4KKyAqCisgKgky MjEyQzoJCUludGVybmFsIGhhcmR3YXJlIHN3aXRjaGVzIGF0IHRoZWlyIGRlZmF1bHQKKyAqCQkJ cG9zaXRpb25zIChmb3VyIHJvY2tlcnMgZG93biBhd2F5IGZyb20gbnVtYmVycykKKyAqCQkJdW5s ZXNzIEVJQ1IgaXMgbm90IHdhbnRlZCAocm9ja2VyIGRvd24gYXQgdGhlIDQpLgorICoJCQlGb3Ig RUlBUywgcm9ja2VyIGRvd24gYXQgdGhlIDEuCisgKgorICoJMjIyNEI6CQlGcm9udC1wYW5lbCBz d2l0Y2ggcG9zaXRpb24gMSBtdXN0IGJlIHVwIChhdCB0aGUgMSwKKyAqCQkJY2xvc2VkKS4gIERp c2FibGUgRUlDUiB3aXRoIHBvc2l0aW9uIDIgZG93bi4KKyAqCQkJRm9yIEVJQVMsIHBvc2l0aW9u IDQgZG93bi4KKyAqCQkJQWxsIHN3aXRjaGVzIG9uIHRoZSBiYWNrIHBhbmVsIGRvd24uCisgKgor ICoJMjIyNENFTzoJQWxsIGZyb250LXBhbmVsIHN3aXRjaGVzIGRvd24gZXhjZXB0IGVpdGhlciA1 IG9yIDYuCisgKgkJCUVuYWJsZSBpbnRlcmFjdGl2ZSBmbG93IGNvbnRyb2wgd2l0aCBvMTY9eS4K KyAqCQkJU2VsZWN0IG5vcm1hbCBhc3luY2hyb25vdXMgbW9kZSB3aXRoIG8zND0wICh6ZXJvKS4K KyAqCQkJRGlzYWJsZSBFSUNSIHdpdGggcG9zaXRpb24gMyB1cC4gIEZvciBFSUFTLCAxIHVwLgor ICoJCQlSZXNldCB0aGUgbW9kZW0gYWZ0ZXIgY2hhbmdpbmcgc3dpdGNoZXMuCisgKgorICoJMjI5 NkE6CQlJZiBvcHRpb24gMDAgKHplcm9zKSBpcyBwcmVzZW50LCB1c2UgbzAwPTAuCisgKgkJCUVu YWJsZSBpbnRlcmFjdGl2ZSBmbG93IGNvbnRyb2wgd2l0aCBvMTY9eS4KKyAqCQkJU2VsZWN0IG5v cm1hbCBhc3luY2hyb25vdXMgbW9kZSB3aXRoIG8zND0wICh6ZXJvKS4KKyAqICAgICAgICAgICAg ICAgICAgICAgIChhdmFpbGFibGUgaW4gTWljcm9jb20gTmV0d29ya2luZyB2ZXJzaW9uLCBidXQK KyAqICAgICAgICAgICAgICAgICAgICAgIG5vdCBuZWNlc3NhcmlseSBvdGhlciBtb2RlbHMgb2Yg dGhlIDIyOTZBKS4KKyAqCQkJRW5hYmxlIG1vZGVtLXBvcnQgZmxvdyBjb250cm9sIChpZiBhdmFp bGFibGUpIHdpdGgKKyAqIAkJCW80Mj15LiAgRW5hYmxlIGFzeW5jaHJvbm91cyBvcGVyYXRpb24g d2l0aCBvNTA9eS4KKyAqIAkJCURpc2FibGUgRUlDUiB3aXRoIG82OT1uLiAgRm9yIEVJQVMsIG82 Nj1uLCB1c2luZworICogCQkJZnJvbnQgcGFuZWwuCisgKi8KKyAgICB7CisgICAiQVQmVCBzd2l0 Y2hlZC1uZXR3b3JrIG1vZGVtcyIsCisgICAgIiIsCQkJCQkvKiBwdWxzZSBjb21tYW5kICovCisg ICAgIiIsCQkJCQkvKiB0b25lIGNvbW1hbmQgKi8KKyAgICAyMCwJCQkJCS8qIGRpYWxfdGltZSAq LworICAgICIsIiwJCQkJLyogcGF1c2VfY2hhcnMgKi8KKyAgICAyLAkJCQkJLyogcGF1c2VfdGlt ZSAqLworICAgICIrIiwJCQkJLyogd2FrZV9zdHIgKi8KKyAgICAwLAkJCQkJLyogd2FrZV9yYXRl ICovCisgICAgIiIsCQkJCQkvKiB3YWtlX3Byb21wdCAqLworICAgICIiLAkJCQkJLyogZG1vZGVf c3RyICovCisgICAgIiIsCQkJCQkvKiBkbW9kZV9wcm9tcHQgKi8KKyAgICAiYXQlc1wwMTUiLAkJ CQkvKiBkaWFsX3N0ciAqLworICAgIDAsCQkJCQkvKiBkaWFsX3JhdGUgKi8KKyAgICAwLAkJCQkJ LyogZXNjX3RpbWUgKi8KKyAgICAwLAkJCQkJLyogZXNjX2NoYXIgKi8KKyAgICAiIiwJCQkJCS8q IGh1cF9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGh3ZmNfc3RyICovCisgICAgIiIsCQkJCQkvKiBz d2ZjX3N0ciAqLworICAgICIiLAkJCQkJLyogbm9mY19zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGVj X29uX3N0ciAqLworICAgICIiLAkJCQkJLyogZWNfb2ZmX3N0ciAqLworICAgICIiLAkJCQkJLyog ZGNfb25fc3RyICovCisgICAgIiIsCQkJCQkvKiBkY19vZmZfc3RyICovCisgICAgIiIsCQkJCQkv KiBhYV9vbl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGFhX29mZl9zdHIgKi8KKyAgICAiIiwJCQkJ CS8qIHNiX29uX3N0ciAqLworICAgICIiLAkJCQkJLyogc2Jfb2ZmX3N0ciAqLworICAgICIiLAkJ CQkJLyogc3Bfb2ZmX3N0ciAqLworICAgICIiLAkJCQkJLyogc3Bfb25fc3RyICovCisgICAgIiIs CQkJCQkvKiB2b2wxX3N0ciAqLworICAgICIiLAkJCQkJLyogdm9sMl9zdHIgKi8KKyAgICAiIiwJ CQkJCS8qIHZvbDNfc3RyICovCisgICAgIiIsCQkJCQkvKiBpZ25vcmVkdCAqLworICAgICIiLAkJ CQkJLyogaW5pMiAqLworICAgIDBMLAkJCQkJLyogbWF4X3NwZWVkICovCisgICAgQ0tEX0FULAkJ CQkvKiBjYXBhcyAqLworICAgIE5VTEwJCQkJLyogb2tfZm4gKi8KK307CisKK3N0YXRpYworTURN SU5GIEFUVERURE0gPSAvKiBBVCZUIERpZ2l0YWwgVGVybWluYWwgRGF0YSBNb2R1bGUgICovCisJ CSAvKiBGb3IgZGlhbGluZzogS1lCRCBzd2l0Y2ggZG93biwgb3RoZXJzIHVzdWFsbHkgdXAuICov CisgICAgeworICAgICJBVCZUIERpZ2l0YWwgVGVybWluYWwgRGF0YSBNb2R1bGUiLAorICAgICIi LAkJCQkJLyogcHVsc2UgY29tbWFuZCAqLworICAgICIiLAkJCQkJLyogdG9uZSBjb21tYW5kICov CisgICAgMjAsCQkJCQkvKiBkaWFsX3RpbWUgKi8KKyAgICAiIiwJCQkJCS8qIHBhdXNlX2NoYXJz ICovCisgICAgMCwJCQkJCS8qIHBhdXNlX3RpbWUgKi8KKyAgICAiIiwJCQkJCS8qIHdha2Vfc3Ry ICovCisgICAgMCwJCQkJCS8qIHdha2VfcmF0ZSAqLworICAgICIiLAkJCQkJLyogd2FrZV9wcm9t cHQgKi8KKyAgICAiIiwJCQkJCS8qIGRtb2RlX3N0ciAqLworICAgICIiLAkJCQkJLyogZG1vZGVf cHJvbXB0ICovCisgICAgIiVzXDAxNSIsCQkJCS8qIGRpYWxfc3RyICovCisgICAgMCwJCQkJCS8q IGRpYWxfcmF0ZSAqLworICAgIDAsCQkJCQkvKiBlc2NfdGltZSAqLworICAgIDAsCQkJCQkvKiBl c2NfY2hhciAqLworICAgICIiLAkJCQkJLyogaHVwX3N0ciAqLworICAgICIiLAkJCQkJLyogaHdm Y19zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHN3ZmNfc3RyICovCisgICAgIiIsCQkJCQkvKiBub2Zj X3N0ciAqLworICAgICIiLAkJCQkJLyogZWNfb25fc3RyICovCisgICAgIiIsCQkJCQkvKiBlY19v ZmZfc3RyICovCisgICAgIiIsCQkJCQkvKiBkY19vbl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGRj X29mZl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGFhX29uX3N0ciAqLworICAgICIiLAkJCQkJLyog YWFfb2ZmX3N0ciAqLworICAgICIiLAkJCQkJLyogc2Jfb25fc3RyICovCisgICAgIiIsCQkJCQkv KiBzYl9vZmZfc3RyICovCisgICAgIiIsCQkJCQkvKiBzcF9vZmZfc3RyICovCisgICAgIiIsCQkJ CQkvKiBzcF9vbl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHZvbDFfc3RyICovCisgICAgIiIsCQkJ CQkvKiB2b2wyX3N0ciAqLworICAgICIiLAkJCQkJLyogdm9sM19zdHIgKi8KKyAgICAiIiwJCQkJ CS8qIGlnbm9yZWR0ICovCisgICAgIiIsCQkJCQkvKiBpbmkyICovCisgICAgMEwsCQkJCQkvKiBt YXhfc3BlZWQgKi8KKyAgICAwLAkJCQkJLyogY2FwYXMgKi8KKyAgICBOVUxMCQkJCS8qIG9rX2Zu ICovCit9OworCitzdGF0aWMKK01ETUlORiBESUdJVEVMID0gICAgICAgIC8qIERpZ2l0ZWwgRFQt MjIgQ0NJVFQgdmFyaWFudCB1c2VkIGluIEJyYXppbCAqLworLyoKKyAgQXR0ZW1wdHMgdG8gYWRo ZXJlIHN0cmljdGx5IHRvIHRoZSBWLjI1YmlzIHNwZWNpZmljYXRpb24gZG8gbm90IHByb2R1Y2Ug Z29vZAorICByZXN1bHRzIGluIHJlYWwgbGlmZS4gIFRoZSBtb2RlbSBmb3Igd2hpY2ggdGhpcyBj b2RlIHdhcyBkZXZlbG9wZWQ6IChhKQorICBpZ25vcmVzIHBhcml0eTsgKGIpIHNvbWV0aW1lcyB0 ZXJtaW5hdGVzIHJlc3BvbnNlcyB3aXRoIExGIENSIGluc3RlYWQgb2YgQ1IKKyAgTEY7IChjKSBo YXMgYSBIYXllcy1saWtlIGVzY2FwZSBzZXF1ZW5jZTsgKGQpIHN1cHBvcnRzIGEgaGFuZ3VwICgi SFVQIikKKyAgY29tbWFuZC4gIEluZm9ybWF0aW9uIGZyb20gRmVybmFuZG8gQ2FicmFsIGluIEJy YXNpbGlhLgorKi8KKyAgICB7CisgICAgIkRpZ2l0ZWwgRFQtMjIgQ0NJVFQgZGlhbGVyIiwKKyAg ICAiIiwJCQkJLyogcHVsc2UgY29tbWFuZCAqLworICAgICIiLAkJCQkvKiB0b25lIGNvbW1hbmQg Ki8KKyAgICA0MCwJCQkJLyogZGlhbF90aW1lIC0tIHByb2dyYW1tYWJsZSAtLSAqLworICAgICIs OiIsCQkvKiBwYXVzZV9jaGFycyAtLSAiLCIgd2FpdHMgZm9yIHByb2dyYW1tYWJsZSB0aW1lICov CisgICAgICAgICAgICAgICAgICAgICAgICAvKiAiOiIgd2FpdHMgZm9yIGRpYWwgdG9uZSAqLwor ICAgIDEwLAkJCS8qIHBhdXNlX3RpbWUgKHNlY29uZHMsIGp1c3QgYSBndWVzcykgKi8KKyAgICAi SFVQXDAxNSIsICAgICAgICAgIC8qIHdha2Vfc3RyIChOb3QgU3RhbmRhcmQgQ0NJVFQpICovCisg ICAgMjAwLAkJLyogd2FrZV9yYXRlIChtc2VjKSAqLworICAgICJWQUwiLAkJLyogd2FrZV9wcm9t cHQgKi8KKyAgICAiIiwJCQkvKiBkbW9kZV9zdHIgKG5vbmUpICovCisgICAgIiIsCQkJLyogZG1v ZGVfcHJvbXB0IChub25lKSAqLworICAgICJDUk4lc1wwMTUiLCAgICAgICAgLyogZGlhbF9zdHIg Ki8KKyAgICAyMDAsCQkvKiBkaWFsX3JhdGUgKG1zZWMpICovCisgICAgMTEwMCwJCS8qIGVzY190 aW1lIChOb3QgU3RhbmRhcmQgQ0NJVFQpICovCisgICAgNDMsCQkJLyogZXNjX2NoYXIgIChOb3Qg U3RhbmRhcmQgQ0NJVFQpICovCisgICAgIkhVUFwwMTUiLAkJLyogaHVwX3N0ciAgKE5vdCBTdGFu ZGFyZCBDQ0lUVCkgKi8KKyAgICAiIiwJCQkJCS8qIGh3ZmNfc3RyICovCisgICAgIiIsCQkJCQkv KiBzd2ZjX3N0ciAqLworICAgICIiLAkJCQkJLyogbm9mY19zdHIgKi8KKyAgICAiIiwJCQkJCS8q IGVjX29uX3N0ciAqLworICAgICIiLAkJCQkJLyogZWNfb2ZmX3N0ciAqLworICAgICIiLAkJCQkJ LyogZGNfb25fc3RyICovCisgICAgIiIsCQkJCQkvKiBkY19vZmZfc3RyICovCisgICAgIkNJQ1ww MTUiLAkJCQkvKiBhYV9vbl9zdHIgKi8KKyAgICAiRElDXDAxNSIsCQkJCS8qIGFhX29mZl9zdHIg Ki8KKyAgICAiIiwJCQkJCS8qIHNiX29uX3N0ciAqLworICAgICIiLAkJCQkJLyogc2Jfb2ZmX3N0 ciAqLworICAgICIiLAkJCQkJLyogc3Bfb2ZmX3N0ciAqLworICAgICIiLAkJCQkJLyogc3Bfb25f c3RyICovCisgICAgIiIsCQkJCQkvKiB2b2wxX3N0ciAqLworICAgICIiLAkJCQkJLyogdm9sMl9z dHIgKi8KKyAgICAiIiwJCQkJCS8qIHZvbDNfc3RyICovCisgICAgIiIsCQkJCQkvKiBpZ25vcmVk dCAqLworICAgICIiLAkJCQkJLyogaW5pMiAqLworICAgIDBMLAkJCQkJLyogbWF4X3NwZWVkICov CisgICAgQ0tEX1YyNSwJCQkJLyogY2FwYXMgKi8KKyAgICBnZXRvawkJCQkvKiBva19mbiAqLwor fTsKKworc3RhdGljCitNRE1JTkYgSF8xMjAwID0JCS8qIEhheWVzIDEyMDAgYW5kIGNvbXBhdGli bGUgbW9kZW1zICovCisgICAgeworICAgICJIYXllcyBTbWFydG1vZGVtIDEyMDAgYW5kIGNvbXBh dGlibGVzIiwKKyAgICAiQVRQXDAxNSIsCQkJCS8qIHB1bHNlIGNvbW1hbmQgKi8KKyAgICAiQVRU XDAxNSIsCQkJCS8qIHRvbmUgY29tbWFuZCAqLworICAgIDM1LAkJCQkJLyogZGlhbF90aW1lICov CisgICAgIiwiLAkJCQkvKiBwYXVzZV9jaGFycyAqLworICAgIDIsCQkJCQkvKiBwYXVzZV90aW1l ICovCisjaWZkZWYgT1MyCisgICAgIkFURTFRMFYxXDAxNSIsCQkJLyogd2FrZV9zdHIgKi8KKyNl bHNlCisgICAgIkFUUTBcMDE1IiwJCQkJLyogd2FrZV9zdHIgKi8KKyNlbmRpZiAvKiBPUzIgKi8K KyAgICAwLAkJCQkJLyogd2FrZV9yYXRlICovCisgICAgIk9LXDAxNSIsCQkJCS8qIHdha2VfcHJv bXB0ICovCisgICAgIiIsCQkJCQkvKiBkbW9kZV9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGRtb2Rl X3Byb21wdCAqLworICAgICJBVEQlc1wwMTUiLAkJCS8qIGRpYWxfc3RyICovCisgICAgMCwJCQkJ CS8qIGRpYWxfcmF0ZSAqLworICAgIDExMDAsCQkJCS8qIGVzY190aW1lICovCisgICAgNDMsCQkJ CQkvKiBlc2NfY2hhciAqLworICAgICJBVFEwSDBcMDE1IiwJCQkvKiBodXBfc3RyICovCisgICAg IiIsCQkJCQkvKiBod2ZjX3N0ciAqLworICAgICIiLAkJCQkJLyogc3dmY19zdHIgKi8KKyAgICAi IiwJCQkJCS8qIG5vZmNfc3RyICovCisgICAgIiIsCQkJCQkvKiBlY19vbl9zdHIgKi8KKyAgICAi IiwJCQkJCS8qIGVjX29mZl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGRjX29uX3N0ciAqLworICAg ICIiLAkJCQkJLyogZGNfb2ZmX3N0ciAqLworICAgICJBVFMwPTFcMDE1IiwJCQkvKiBhYV9vbl9z dHIgKi8KKyAgICAiQVRTMD0wXDAxNSIsCQkJLyogYWFfb2ZmX3N0ciAqLworICAgICIiLAkJCQkJ Lyogc2Jfb25fc3RyICovCisgICAgIiIsCQkJCQkvKiBzYl9vZmZfc3RyICovCisgICAgIkFUTTFc MDE1IiwJCQkJLyogc3Bfb25fc3RyICovCisgICAgIkFUTTBcMDE1IiwJCQkJLyogc3Bfb2ZmX3N0 ciAqLworICAgICJBVEwxXDAxNSIsCQkJCS8qIHZvbDFfc3RyICovCisgICAgIkFUTDJcMDE1IiwJ CQkJLyogdm9sMl9zdHIgKi8KKyAgICAiQVRMM1wwMTUiLAkJCQkvKiB2b2wzX3N0ciAqLworICAg ICIiLAkJCQkJLyogaWdub3JlZHQgKi8KKyAgICAiIiwJCQkJCS8qIGluaTIgKi8KKyAgICAxMjAw TCwJCQkJLyogbWF4X3NwZWVkICovCisgICAgQ0tEX0FULAkJCQkvKiBjYXBhcyAqLworICAgIGdl dG9rCQkJCS8qIG9rX2ZuICovCit9OworCitzdGF0aWMKK01ETUlORiBIX1VMVFJBID0JCQkvKiBI YXllcyBoaWdoLXNwZWVkICovCisgICAgeworICAgICJIYXllcyBVbHRyYS9PcHRpbWEvQWNjdXJh IDk2LzE0NC8yODgiLCAvKiBVLE8sQSAqLworICAgICJBVFBcMDE1IiwJCQkJLyogcHVsc2UgY29t bWFuZCAqLworICAgICJBVFRcMDE1IiwJCQkJLyogdG9uZSBjb21tYW5kICovCisgICAgMzUsCQkJ CQkvKiBkaWFsX3RpbWUgKi8KKyAgICAiLCIsCQkJCS8qIHBhdXNlX2NoYXJzICovCisgICAgMiwJ CQkJCS8qIHBhdXNlX3RpbWUgKi8KKyNpZmRlZiBPUzIKKyAgICAiQVRFMVEwVjFYNE4xWTAmUzAm QzEmRDJTMzc9MFM4Mj0xMjhcMDE1IiwgLyogd2FrZV9zdHIgKi8KKyNlbHNlCisjaWZkZWYgVk1T CisgICAgIkFUUTBYNE4xWTAmUzFTMzc9MFM4Mj0xMjhcMDE1IiwJLyogd2FrZV9zdHIgKi8KKyNl bHNlCisgICAgIkFUUTBYNE4xWTBTMzc9MFM4Mj0xMjhcMDE1IiwJLyogd2FrZV9zdHIgKi8KKyNl bmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAwLAkJCQkJLyogd2FrZV9yYXRl ICovCisgICAgIk9LXDAxNSIsCQkJCS8qIHdha2VfcHJvbXB0ICovCisgICAgIiIsCQkJCQkvKiBk bW9kZV9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGRtb2RlX3Byb21wdCAqLworICAgICJBVEQlc1ww MTUiLAkJCS8qIGRpYWxfc3RyICovCisgICAgMCwJCQkJCS8qIGRpYWxfcmF0ZSAqLworICAgIDEx MDAsCQkJCS8qIGVzY190aW1lICovCisgICAgNDMsCQkJCQkvKiBlc2NfY2hhciAqLworICAgICJB VFEwSDBcMDE1IiwJCQkvKiBodXBfc3RyICovCisgICAgIkFUJkszXDAxNSIsCQkJLyogaHdmY19z dHIgKi8gICAvKiBPSyBmb3IgVSxPICovCisgICAgIkFUJks0XDAxNSIsCQkJLyogc3dmY19zdHIg Ki8gICAvKiBPSyBmb3IgVSxPICovCisgICAgIkFUJkswXDAxNSIsCQkJLyogbm9mY19zdHIgKi8g ICAvKiBPSyBmb3IgVSxPICovCisgICAgIkFUJlE1UzM2PTdTNDg9N1wwMTUiLAkJLyogZWNfb25f c3RyICovICAvKiBPSyBmb3IgVSxPICovCisgICAgIkFUJlEwXDAxNSIsCQkJLyogZWNfb2ZmX3N0 ciAqLyAvKiBPSyBmb3IgVSxPICovCisgICAgIkFUUzQ2PTJcMDE1IiwJCQkvKiBkY19vbl9zdHIg Ki8KKyAgICAiQVRTNDY9MFwwMTUiLAkJCS8qIGRjX29mZl9zdHIgKi8KKyAgICAiQVRTMD0xXDAx NSIsCQkJLyogYWFfb25fc3RyICovCisgICAgIkFUUzA9MFwwMTUiLAkJCS8qIGFhX29mZl9zdHIg Ki8KKyAgICAiIiwJCQkJCS8qIHNiX29uX3N0ciAqLworICAgICIiLAkJCQkJLyogc2Jfb2ZmX3N0 ciAqLworICAgICJBVE0xXDAxNSIsCQkJCS8qIHNwX29uX3N0ciAqLworICAgICJBVE0wXDAxNSIs CQkJCS8qIHNwX29mZl9zdHIgKi8KKyAgICAiQVRMMVwwMTUiLAkJCQkvKiB2b2wxX3N0ciAqLwor ICAgICJBVEwyXDAxNSIsCQkJCS8qIHZvbDJfc3RyICovCisgICAgIkFUTDNcMDE1IiwJCQkJLyog dm9sM19zdHIgKi8KKyAgICAiQVRYM1wwMTUiLAkJCQkvKiBpZ25vcmVkdCAqLworICAgICIiLAkJ CQkJLyogaW5pMiAqLworICAgIDExNTIwMEwsCQkJCS8qIG1heF9zcGVlZCAqLyAgLyogKHZhcmll cykgKi8KKyAgICBDS0RfQVR8Q0tEX1NCfENLRF9FQ3xDS0RfREN8Q0tEX0hXfENLRF9TVywgLyog Y2FwYXMgKi8KKyAgICBnZXRvawkJCQkvKiBva19mbiAqLworfTsKKworc3RhdGljCitNRE1JTkYg SF9BQ0NVUkEgPQkJCS8qIEhheWVzIEFjY3VyYSAqLworICAgIHsJCQkJCS8qIEdVRVNTSU5HIElU J1MgTElLRSBVTFRSQSAmIE9QVElNQSAqLworICAgICJIYXllcyBBY2N1cmEiLAorICAgICJBVFBc MDE1IiwJCQkJLyogcHVsc2UgY29tbWFuZCAqLworICAgICJBVFRcMDE1IiwJCQkJLyogdG9uZSBj b21tYW5kICovCisgICAgMzUsCQkJCQkvKiBkaWFsX3RpbWUgKi8KKyAgICAiLCIsCQkJCS8qIHBh dXNlX2NoYXJzICovCisgICAgMiwJCQkJCS8qIHBhdXNlX3RpbWUgKi8KKyNpZmRlZiBPUzIKKyAg ICAiQVRFMVEwVjFYNE4xWTAmUzAmQzEmRDJTMzc9MFwwMTUiLAkvKiB3YWtlX3N0ciAqLworI2Vs c2UKKyNpZmRlZiBWTVMKKyAgICAiQVRRMFg0TjFZMCZTMVMzNz0wXDAxNSIsCQkvKiB3YWtlX3N0 ciAqLworI2Vsc2UKKyAgICAiQVRRMFg0TjFZMFMzNz0wXDAxNSIsCQkvKiB3YWtlX3N0ciAqLwor I2VuZGlmIC8qIFZNUyAqLworI2VuZGlmIC8qIE9TMiAqLworICAgIDAsCQkJCQkvKiB3YWtlX3Jh dGUgKi8KKyAgICAiT0tcMDE1IiwJCQkJLyogd2FrZV9wcm9tcHQgKi8KKyAgICAiIiwJCQkJCS8q IGRtb2RlX3N0ciAqLworICAgICIiLAkJCQkJLyogZG1vZGVfcHJvbXB0ICovCisgICAgIkFURCVz XDAxNSIsCQkJLyogZGlhbF9zdHIgKi8KKyAgICAwLAkJCQkJLyogZGlhbF9yYXRlICovCisgICAg MTEwMCwJCQkJLyogZXNjX3RpbWUgKi8KKyAgICA0MywJCQkJCS8qIGVzY19jaGFyICovCisgICAg IkFUUTBIMFwwMTUiLAkJCS8qIGh1cF9zdHIgKi8KKyAgICAiQVQmSzNcMDE1IiwJCQkvKiBod2Zj X3N0ciAqLworICAgICJBVCZLNFwwMTUiLAkJCS8qIHN3ZmNfc3RyICovCisgICAgIkFUJkswXDAx NSIsCQkJLyogbm9mY19zdHIgKi8KKyAgICAiQVQmUTVTMzY9N1M0OD03XDAxNSIsCQkvKiBlY19v bl9zdHIgKi8KKyAgICAiQVQmUTBcMDE1IiwJCQkvKiBlY19vZmZfc3RyICovCisgICAgIkFUUzQ2 PTJcMDE1IiwJCQkvKiBkY19vbl9zdHIgKi8KKyAgICAiQVRTNDY9MFwwMTUiLAkJCS8qIGRjX29m Zl9zdHIgKi8KKyAgICAiQVRTMD0xXDAxNSIsCQkJLyogYWFfb25fc3RyICovCisgICAgIkFUUzA9 MFwwMTUiLAkJCS8qIGFhX29mZl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHNiX29uX3N0ciAqLwor ICAgICIiLAkJCQkJLyogc2Jfb2ZmX3N0ciAqLworICAgICJBVE0xXDAxNSIsCQkJCS8qIHNwX29u X3N0ciAqLworICAgICJBVE0wXDAxNSIsCQkJCS8qIHNwX29mZl9zdHIgKi8KKyAgICAiQVRMMVww MTUiLAkJCQkvKiB2b2wxX3N0ciAqLworICAgICJBVEwyXDAxNSIsCQkJCS8qIHZvbDJfc3RyICov CisgICAgIkFUTDNcMDE1IiwJCQkJLyogdm9sM19zdHIgKi8KKyAgICAiQVRYM1wwMTUiLAkJCQkv KiBpZ25vcmVkdCAqLworICAgICIiLAkJCQkJLyogaW5pMiAqLworICAgIDExNTIwMEwsCQkJCS8q IG1heF9zcGVlZCAqLyAgLyogKHZhcmllcykgKi8KKyAgICBDS0RfQVR8Q0tEX1NCfENLRF9FQ3xD S0RfREN8Q0tEX0hXfENLRF9TVywgLyogY2FwYXMgKi8KKyAgICBnZXRvawkJCQkvKiBva19mbiAq LworfTsKKworc3RhdGljCitNRE1JTkYgUFBJID0JCQkJLyogUHJhY3RpY2FsIFBlcmlwaGVyYWxz ICAqLworICAgIHsKKyAgICAiUHJhY3RpY2FsIFBlcmlwaGVyYWxzIFYuMjJiaXMgb3IgaGlnaGVy IHdpdGggVi40MiBhbmQgVi40MmJpcyIsCisgICAgIkFUUFwwMTUiLAkJCQkvKiBwdWxzZSBjb21t YW5kICovCisgICAgIkFUVFwwMTUiLAkJCQkvKiB0b25lIGNvbW1hbmQgKi8KKyAgICAzNSwJCQkJ CS8qIGRpYWxfdGltZSAqLworICAgICIsIiwJCQkJLyogcGF1c2VfY2hhcnMgKi8KKyAgICAyLAkJ CQkJLyogcGF1c2VfdGltZSAqLworI2lmZGVmIENPTU1FTlQKKy8qIEluIG5ld2VyIG1vZGVscyBT ODIgKEJSRUFLIGhhbmRsaW5nKSB3YXMgZWxpbWluYXRlZCwgY2F1c2luZyBhbiBlcnJvci4gKi8K KyNpZmRlZiBPUzIKKyAgICAiQVRRMFg0TjEmUzAmQzEmRDJTMzc9MFM4Mj0xMjhcMDE1IiwgLyog d2FrZV9zdHIgKi8KKyNlbHNlCisgICAgIkFUUTBYNE4xUzM3PTBTODI9MTI4XDAxNSIsCQkvKiB3 YWtlX3N0ciAqLworI2VuZGlmIC8qIE9TMiAqLworI2Vsc2UgLyogU28gbm93IHdlIHVzZSBZMCBp bnN0ZWFkICovCisjaWZkZWYgT1MyCisgICAgIkFURTFRMFYxWDROMSZTMCZDMSZEMlkwUzM3PTBc MDE1IiwJLyogd2FrZV9zdHIgKi8KKyNlbHNlCisjaWZkZWYgVk1TCisgICAgIkFUUTBYNE4xWTAm UzFTMzc9MFwwMTUiLAkJLyogd2FrZV9zdHIgKi8KKyNlbHNlCisgICAgIkFUUTBYNE4xWTBTMzc9 MFwwMTUiLAkJLyogd2FrZV9zdHIgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBPUzIg Ki8KKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgMCwJCQkJCS8qIHdha2VfcmF0ZSAqLworICAg ICJPS1wwMTUiLAkJCQkvKiB3YWtlX3Byb21wdCAqLworICAgICIiLAkJCQkJLyogZG1vZGVfc3Ry ICovCisgICAgIiIsCQkJCQkvKiBkbW9kZV9wcm9tcHQgKi8KKyAgICAiQVREJXNcMDE1IiwJCQkv KiBkaWFsX3N0ciAqLworICAgIDAsCQkJCQkvKiBkaWFsX3JhdGUgKi8KKyAgICAxMTAwLAkJCQkv KiBlc2NfdGltZSAqLworICAgIDQzLAkJCQkJLyogZXNjX2NoYXIgKi8KKyAgICAiQVRRMEgwXDAx NSIsCQkJLyogaHVwX3N0ciAqLworICAgICJBVCZLM1wwMTUiLAkJCS8qIGh3ZmNfc3RyICovCisg ICAgIkFUJks0XDAxNSIsCQkJLyogc3dmY19zdHIgKi8KKyAgICAiQVQmSzBcMDE1IiwJCQkvKiBu b2ZjX3N0ciAqLworICAgICJBVCZRNVMzNj03UzQ4PTdcMDE1IiwJCS8qIGVjX29uX3N0ciAqLwor ICAgICJBVCZRMFMzNj0wUzQ4PTEyOFwwMTUiLAkJLyogZWNfb2ZmX3N0ciAqLworICAgICJBVFM0 Nj0yXDAxNSIsCQkJLyogZGNfb25fc3RyICovCisgICAgIkFUUzQ2PTBcMDE1IiwJCQkvKiBkY19v ZmZfc3RyICovCisgICAgIkFUUzA9MVwwMTUiLAkJCS8qIGFhX29uX3N0ciAqLworICAgICJBVFMw PTBcMDE1IiwJCQkvKiBhYV9vZmZfc3RyICovCisgICAgIiIsCQkJCQkvKiBzYl9vbl9zdHIgICov CisgICAgIiIsCQkJCQkvKiBzYl9vZmZfc3RyICAqLworICAgICJBVE0xXDAxNSIsCQkJCS8qIHNw X29uX3N0ciAqLworICAgICJBVE0wXDAxNSIsCQkJCS8qIHNwX29mZl9zdHIgKi8KKyAgICAiQVRM MVwwMTUiLAkJCQkvKiB2b2wxX3N0ciAqLworICAgICJBVEwyXDAxNSIsCQkJCS8qIHZvbDJfc3Ry ICovCisgICAgIkFUTDNcMDE1IiwJCQkJLyogdm9sM19zdHIgKi8KKyAgICAiQVRYM1wwMTUiLAkJ CQkvKiBpZ25vcmVkdCAqLworICAgICIiLAkJCQkJLyogaW5pMiAqLworICAgIDExNTIwMEwsCQkJ CS8qIG1heF9zcGVlZCAqLworICAgIENLRF9BVHxDS0RfU0J8Q0tEX0VDfENLRF9EQ3xDS0RfSFd8 Q0tEX1NXLCAvKiBjYXBhcyAqLworICAgIGdldG9rCQkJCS8qIG9rX2ZuICovCit9OworCitzdGF0 aWMKK01ETUlORiBEQVRBUE9SVCA9CQkJLyogQVQmVCBEYXRhcG9ydCAgKi8KKyAgICB7CisgICAg IkFUJlQgLyBQYXJhZHluZSBEYXRhUG9ydCBWLjMyIG9yIGhpZ2hlciIsCisgICAgIkFUUFwwMTUi LAkJCQkvKiBwdWxzZSBjb21tYW5kICovCisgICAgIkFUVFwwMTUiLAkJCQkvKiB0b25lIGNvbW1h bmQgKi8KKyAgICAzNSwJCQkJCS8qIGRpYWxfdGltZSAqLworICAgICIsIiwJCQkJLyogcGF1c2Vf Y2hhcnMgKi8KKyAgICAyLAkJCQkJLyogcGF1c2VfdGltZSAqLworICAgIC8qCisgICAgICAgTm90 ZTogUzQxPTAgKHVzZSBoaWdoZXN0IG1vZHVsYXRpb24pIG9taXR0ZWQsIHNpbmNlIGl0IGlzIG5v dAorICAgICAgIHN1cHBvcnRlZCBvbiB0aGUgVi4zMiBhbmQgbG93ZXIgbW9kZWxzLiAgU28gbGV0 J3Mgbm90IHRvdWNoIGl0LgorICAgICovCisjaWZkZWYgT1MyCisgICAgIkFUUTBFMVYxWDYmUzAm QzEmRDImUTBZMFxcSzVTNzg9MFwwMTUiLCAvKiB3YWtlX3N0ciAqLworI2Vsc2UKKyNpZmRlZiBW TVMKKyAgICAiQVRRMEUxWDYmUzEmUTBZMFxcSzVTNzg9MFwwMTUiLAkvKiB3YWtlX3N0ciAqLwor I2Vsc2UKKyAgICAiQVRRMEUxWDYmUTBZMFxcSzVTNzg9MFwwMTUiLAkJLyogd2FrZV9zdHIgKi8K KyNlbmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAwLAkJCQkJLyogd2FrZV9y YXRlICovCisgICAgIk9LXDAxNSIsCQkJCS8qIHdha2VfcHJvbXB0ICovCisgICAgIiIsCQkJCQkv KiBkbW9kZV9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGRtb2RlX3Byb21wdCAqLworICAgICJBVEQl c1wwMTUiLAkJCS8qIGRpYWxfc3RyICovCisgICAgMCwJCQkJCS8qIGRpYWxfcmF0ZSAqLworICAg IDExMDAsCQkJCS8qIGVzY190aW1lICovCisgICAgNDMsCQkJCQkvKiBlc2NfY2hhciAqLworICAg ICJBVFEwSDBcMDE1IiwJCQkvKiBodXBfc3RyICovCisgICAgIkFUXFxRM1wwMTUiLAkJCS8qIGh3 ZmNfc3RyICovCisgICAgIkFUXFxRMVxcWDBcMDE1IiwJCQkvKiBzd2ZjX3N0ciAqLworICAgICJB VFxcUTBcMDE1IiwJCQkvKiBub2ZjX3N0ciAqLworICAgICJBVFxcTjdcMDE1IiwJCQkvKiBlY19v bl9zdHIgKi8KKyAgICAiQVRcXE4wXDAxNSIsCQkJLyogZWNfb2ZmX3N0ciAqLworICAgICJBVCVD MVwwMTUiLAkJCS8qIGRjX29uX3N0ciAqLworICAgICJBVCVDMFwwMTUiLAkJCS8qIGRjX29mZl9z dHIgKi8KKyAgICAiQVRTMD0xXDAxNSIsCQkJLyogYWFfb25fc3RyICovCisgICAgIkFUUzA9MFww MTUiLAkJCS8qIGFhX29mZl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHNiX29uX3N0ciAqLworICAg ICIiLAkJCQkJLyogc2Jfb2ZmX3N0ciAqLworICAgICJBVE0xXDAxNSIsCQkJCS8qIHNwX29uX3N0 ciAqLworICAgICJBVE0wXDAxNSIsCQkJCS8qIHNwX29mZl9zdHIgKi8KKyAgICAiQVRMMVwwMTUi LAkJCQkvKiB2b2wxX3N0ciAqLworICAgICJBVEwyXDAxNSIsCQkJCS8qIHZvbDJfc3RyICovCisg ICAgIkFUTDNcMDE1IiwJCQkJLyogdm9sM19zdHIgKi8KKyAgICAiQVRYM1wwMTUiLAkJCQkvKiBp Z25vcmVkdCAqLworICAgICIiLAkJCQkJLyogaW5pMiAqLworICAgIDU3NjAwTCwJCQkJLyogbWF4 X3NwZWVkICovCisgICAgQ0tEX0FUfENLRF9TQnxDS0RfRUN8Q0tEX0RDfENLRF9IV3xDS0RfU1cs IC8qIGNhcGFzICovCisgICAgZ2V0b2sJCQkJLyogb2tfZm4gKi8KK307CisKK3N0YXRpYworTURN SU5GIFVDT01fQVQgPQkJCS8qIE1pY3JvY29tIERlc2tQb3J0ZSBGQVNUIEVTIDI4LjggKi8KKyAg ICB7CisgICAgIk1pY3JvY29tIERlc2tQb3J0ZSBGQVNUIDI4LjgiLAorICAgICJBVFBcMDE1IiwJ CQkJLyogcHVsc2UgY29tbWFuZCAqLworICAgICJBVFRcMDE1IiwJCQkJLyogdG9uZSBjb21tYW5k ICovCisgICAgMzUsCQkJCQkvKiBkaWFsX3RpbWUgKi8KKyAgICAiLCIsCQkJCS8qIHBhdXNlX2No YXJzICovCisgICAgMiwJCQkJCS8qIHBhdXNlX3RpbWUgKi8KKyNpZmRlZiBPUzIKKyAgICAiQVRF MVEwVjFYNFxcTjBGMCZTMCZDMSZEMlxcSzVcMDE1IiwgLyogd2FrZV9zdHIgKi8KKyNlbHNlCisj aWZkZWYgVk1TCisgICAgIkFUUTBYNEYwJlMxXFxLNVwwMTUiLAkJLyogd2FrZV9zdHIgKi8KKyNl bHNlCisgICAgIkFUUTBYNEYwXFxLNVwwMTUiLAkJCS8qIHdha2Vfc3RyICovCisjZW5kaWYgLyog Vk1TICovCisjZW5kaWYgLyogT1MyICovCisgICAgMCwJCQkJCS8qIHdha2VfcmF0ZSAqLworICAg ICJPS1wwMTUiLAkJCQkvKiB3YWtlX3Byb21wdCAqLworICAgICIiLAkJCQkJLyogZG1vZGVfc3Ry ICovCisgICAgIiIsCQkJCQkvKiBkbW9kZV9wcm9tcHQgKi8KKyAgICAiQVREJXNcMDE1IiwJCQkv KiBkaWFsX3N0ciAqLworICAgIDAsCQkJCQkvKiBkaWFsX3JhdGUgKi8KKyAgICAxMTAwLAkJCQkv KiBlc2NfdGltZSAqLworICAgIDQzLAkJCQkJLyogZXNjX2NoYXIgKi8KKyAgICAiQVRRMEgwXDAx NSIsCQkJLyogaHVwX3N0ciAqLworICAgICJBVFxcUTNcMDE1IiwJCQkvKiBod2ZjX3N0ciAqLwor ICAgICJBVFxcUTFcMDE1IiwJCQkvKiBzd2ZjX3N0ciAqLworICAgICJBVFxcSDBcXFEwXDAxNSIs CQkJLyogbm9mY19zdHIgKi8KKyAgICAiQVRcXE4zXDAxNSIsCQkJLyogZWNfb25fc3RyICovCisg ICAgIkFUXFxOMFwwMTUiLAkJCS8qIGVjX29mZl9zdHIgKi8KKyAgICAiQVQlQzNcMDE1IiwJCQkv KiBkY19vbl9zdHIgKi8KKyAgICAiQVQlQzBcMDE1IiwJCQkvKiBkY19vZmZfc3RyICovCisgICAg IkFUUzA9MVwwMTUiLAkJCS8qIGFhX29uX3N0ciAqLworICAgICJBVFMwPTBcMDE1IiwJCQkvKiBh YV9vZmZfc3RyICovCisgICAgIkFULUowXDAxNSIsCQkJLyogc2Jfb25fc3RyICovCisgICAgIkFU LUoxXDAxNSIsCQkJLyogc2Jfb2ZmX3N0ciAqLworICAgICJBVE0xXDAxNSIsCQkJCS8qIHNwX29u X3N0ciAqLworICAgICJBVE0wXDAxNSIsCQkJCS8qIHNwX29mZl9zdHIgKi8KKyAgICAiQVRMMVww MTUiLAkJCQkvKiB2b2wxX3N0ciAqLworICAgICJBVEwyXDAxNSIsCQkJCS8qIHZvbDJfc3RyICov CisgICAgIkFUTDNcMDE1IiwJCQkJLyogdm9sM19zdHIgKi8KKyAgICAiQVRYM1wwMTUiLAkJCQkv KiBpZ25vcmVkdCAqLworICAgICIiLAkJCQkJLyogaW5pMiAqLworICAgIDExNTIwMEwsCQkJCS8q IG1heF9zcGVlZCAqLworICAgIENLRF9BVHxDS0RfU0J8Q0tEX0VDfENLRF9EQ3xDS0RfSFd8Q0tE X1NXLCAvKiBjYXBhcyAqLworICAgIGdldG9rCQkJCS8qIG9rX2ZuICovCit9OworCitzdGF0aWMK K01ETUlORiBaT09NID0JCQkJLyogWm9vbSBUZWxlcGhvbmljcyBWLjMyYmlzICAqLworICAgIHsK KyAgICAiWm9vbSBUZWxlcGhvbmljcyBWLjMyYmlzIiwKKyAgICAiQVRQXDAxNSIsCQkJCS8qIHB1 bHNlIGNvbW1hbmQgKi8KKyAgICAiQVRUXDAxNSIsCQkJCS8qIHRvbmUgY29tbWFuZCAqLworICAg IDM1LAkJCQkJLyogZGlhbF90aW1lICovCisgICAgIiwiLAkJCQkvKiBwYXVzZV9jaGFycyAqLwor ICAgIDIsCQkJCQkvKiBwYXVzZV90aW1lICovCisjaWZkZWYgT1MyCisgICAgIkFURTFRMFYxTjFX MVg0JlMwJkMxJkQyUzgyPTEyOFM5NT00N1wwMTUiLCAvKiB3YWtlX3N0ciAqLworI2Vsc2UKKyNp ZmRlZiBWTVMKKyAgICAiQVRRMEUxTjFXMVg0JlMxUzgyPTEyOFM5NT00N1wwMTUiLAkvKiB3YWtl X3N0ciAqLworI2Vsc2UKKyAgICAiQVRRMEUxTjFXMVg0UzgyPTEyOFM5NT00N1wwMTUiLAkvKiB3 YWtlX3N0ciAqLworI2VuZGlmIC8qIFZNUyAqLworI2VuZGlmIC8qIE9TMiAqLworICAgIDAsCQkJ CQkvKiB3YWtlX3JhdGUgKi8KKyAgICAiT0tcMDE1IiwJCQkJLyogd2FrZV9wcm9tcHQgKi8KKyAg ICAiIiwJCQkJCS8qIGRtb2RlX3N0ciAqLworICAgICIiLAkJCQkJLyogZG1vZGVfcHJvbXB0ICov CisgICAgIkFURCVzXDAxNSIsCQkJLyogZGlhbF9zdHIgKi8KKyAgICAwLAkJCQkJLyogZGlhbF9y YXRlICovCisgICAgMTEwMCwJCQkJLyogZXNjX3RpbWUgKi8KKyAgICA0MywJCQkJCS8qIGVzY19j aGFyICovCisgICAgIkFUUTBIMFwwMTUiLAkJCS8qIGh1cF9zdHIgKi8KKyAgICAiQVQmSzNcMDE1 IiwJCQkvKiBod2ZjX3N0ciAqLworICAgICJBVCZLNFwwMTUiLAkJCS8qIHN3ZmNfc3RyICovCisg ICAgIkFUJkswXDAxNSIsCQkJLyogbm9mY19zdHIgKi8KKyAgICAiQVQmUTVTMzY9N1M0OD03XDAx NSIsCQkvKiBlY19vbl9zdHIgKi8KKyAgICAiQVQmUTBcMDE1IiwJCQkvKiBlY19vZmZfc3RyICov CisgICAgIkFUUzQ2PTEzOFwwMTUiLAkJCS8qIGRjX29uX3N0ciAqLworICAgICJBVFM0Nj0xMzZc MDE1IiwJCQkvKiBkY19vZmZfc3RyICovCisgICAgIkFUUzA9MVwwMTUiLAkJCS8qIGFhX29uX3N0 ciAqLworICAgICJBVFMwPTBcMDE1IiwJCQkvKiBhYV9vZmZfc3RyICovCisgICAgIiIsCQkJCQkv KiBzYl9vbl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHNiX29mZl9zdHIgKi8KKyAgICAiQVRNMVww MTUiLAkJCQkvKiBzcF9vbl9zdHIgKi8KKyAgICAiQVRNMFwwMTUiLAkJCQkvKiBzcF9vZmZfc3Ry ICovCisgICAgIkFUTDFcMDE1IiwJCQkJLyogdm9sMV9zdHIgKi8KKyAgICAiQVRMMlwwMTUiLAkJ CQkvKiB2b2wyX3N0ciAqLworICAgICJBVEwzXDAxNSIsCQkJCS8qIHZvbDNfc3RyICovCisgICAg IkFUWDNcMDE1IiwJCQkJLyogaWdub3JlZHQgKi8KKyAgICAiIiwJCQkJCS8qIGluaTIgKi8KKyAg ICA1NzYwMEwsCQkJCS8qIG1heF9zcGVlZCAqLworICAgIENLRF9BVHxDS0RfU0J8Q0tEX0VDfENL RF9EQ3xDS0RfSFd8Q0tEX1NXLCAvKiBjYXBhcyAqLworICAgIGdldG9rCQkJCS8qIG9rX2ZuICov Cit9OworCitzdGF0aWMKK01ETUlORiBaWVhFTCA9CQkJCS8qIFp5WEVMIFUtU2VyaWVzICovCisg ICAgeworICAgICJaeVhFTCBVLVNlcmllcyBWLjMyYmlzIG9yIGhpZ2hlciIsCisgICAgIkFUUFww MTUiLAkJCQkvKiBwdWxzZSBjb21tYW5kICovCisgICAgIkFUVFwwMTUiLAkJCQkvKiB0b25lIGNv bW1hbmQgKi8KKyAgICAzNSwJCQkJCS8qIGRpYWxfdGltZSAqLworICAgICIsIiwJCQkJLyogcGF1 c2VfY2hhcnMgKi8KKyAgICAyLAkJCQkJLyogcGF1c2VfdGltZSAqLworI2lmZGVmIE9TMgorICAg ICJBVEUxUTBWMSZTMCZDMSZEMiZOMFg1JlkxXDAxNSIsCS8qIHdha2Vfc3RyICovCisjZWxzZQor I2lmZGVmIFZNUworICAgICJBVFEwRTEmUzEmTjBYNSZZMVwwMTUiLAkJLyogd2FrZV9zdHIgKi8K KyNlbHNlCisgICAgIkFUUTBFMSZOMFg1JlkxXDAxNSIsCQkvKiB3YWtlX3N0ciAqLworI2VuZGlm IC8qIFZNUyAqLworI2VuZGlmIC8qIE9TMiAqLworICAgIDAsCQkJCQkvKiB3YWtlX3JhdGUgKi8K KyAgICAiT0tcMDE1IiwJCQkJLyogd2FrZV9wcm9tcHQgKi8KKyAgICAiIiwJCQkJCS8qIGRtb2Rl X3N0ciAqLworICAgICIiLAkJCQkJLyogZG1vZGVfcHJvbXB0ICovCisgICAgIkFURCVzXDAxNSIs CQkJLyogZGlhbF9zdHIgKi8KKyAgICAwLAkJCQkJLyogZGlhbF9yYXRlICovCisgICAgMTEwMCwJ CQkJLyogZXNjX3RpbWUgKi8KKyAgICA0MywJCQkJCS8qIGVzY19jaGFyICovCisgICAgIkFUUTBI MFwwMTUiLAkJCS8qIGh1cF9zdHIgKi8KKyAgICAiQVQmSDNcMDE1IiwJCQkvKiBod2ZjX3N0ciAq LworICAgICJBVCZINFwwMTUiLAkJCS8qIHN3ZmNfc3RyICovCisgICAgIkFUJkgwXDAxNSIsCQkJ Lyogbm9mY19zdHIgKi8KKyAgICAiQVQmSzNcMDE1IiwJCQkvKiBlY19vbl9zdHIgKi8KKyAgICAi QVQmSzBcMDE1IiwJCQkvKiBlY19vZmZfc3RyICovCisgICAgIkFUJks0XDAxNSIsCQkJLyogZGNf b25fc3RyICovCisgICAgIkFUJkszXDAxNSIsCQkJLyogZGNfb2ZmX3N0ciAqLworICAgICJBVFMw PTFcMDE1IiwJCQkvKiBhYV9vbl9zdHIgKi8KKyAgICAiQVRTMD0wXDAxNSIsCQkJLyogYWFfb2Zm X3N0ciAqLworICAgICIiLAkJCQkJLyogc2Jfb25fc3RyICovCisgICAgIiIsCQkJCQkvKiBzYl9v ZmZfc3RyICovCisgICAgIkFUTTFcMDE1IiwJCQkJLyogc3Bfb25fc3RyICovCisgICAgIkFUTTBc MDE1IiwJCQkJLyogc3Bfb2ZmX3N0ciAqLworICAgICJBVEwxXDAxNSIsCQkJCS8qIHZvbDFfc3Ry ICovCisgICAgIkFUTDJcMDE1IiwJCQkJLyogdm9sMl9zdHIgKi8KKyAgICAiQVRMM1wwMTUiLAkJ CQkvKiB2b2wzX3N0ciAqLworICAgICJBVFgzXDAxNSIsCQkJCS8qIGlnbm9yZWR0ICovCisgICAg IiIsCQkJCQkvKiBpbmkyICovCisgICAgNTc2MDBMLAkJCQkvKiBtYXhfc3BlZWQgKi8KKyAgICBD S0RfQVR8Q0tEX1NCfENLRF9FQ3xDS0RfREN8Q0tEX0hXfENLRF9TVywgLyogY2FwYXMgKi8KKyAg ICBnZXRvawkJCQkvKiBva19mbiAqLworfTsKKworc3RhdGljCitNRE1JTkYgWk9MVFJJWCA9CQkJ LyogWm9sdHJpeCAqLworICAgIHsKKyAgICAiWm9sdHJpeCBWLjMyYmlzIGFuZCBWLjM0IG1vZGVt cyB3aXRoIFJvY2t3ZWxsIEFDSSBjaGlwc2V0IiwKKyAgICAiQVRQXDAxNSIsCQkJCS8qIHB1bHNl IGNvbW1hbmQgKi8KKyAgICAiQVRUXDAxNSIsCQkJCS8qIHRvbmUgY29tbWFuZCAqLworICAgIDM1 LAkJCQkJLyogZGlhbF90aW1lICovCisgICAgIiwiLAkJCQkvKiBwYXVzZV9jaGFycyAqLworICAg IDIsCQkJCQkvKiBwYXVzZV90aW1lICovCisjaWZkZWYgT1MyCisgICAiQVRFMVEwVjFGMFcxWDRZ MCZTMCZDMSZEMlxcSzVTODI9MTI4Uzk1PTQxXDAxNSIsIC8qIHdha2Vfc3RyICovCisjZWxzZQor I2lmZGVmIFZNUworICAgIkFUUTBFMUYwVzFYNFkwJlMxXFxLNVM4Mj0xMjhTOTU9NDFcMDE1Iiwg Lyogd2FrZV9zdHIgKi8KKyNlbHNlCisgICAiQVRRMEUxRjBXMVg0WTBcXEs1UzgyPTEyOFM5NT00 MVwwMTUiLCAvKiB3YWtlX3N0ciAqLworI2VuZGlmIC8qIFZNUyAqLworI2VuZGlmIC8qIE9TMiAq LworICAgIDAsCQkJCQkvKiB3YWtlX3JhdGUgKi8KKyAgICAiT0tcMDE1IiwJCQkJLyogd2FrZV9w cm9tcHQgKi8KKyAgICAiIiwJCQkJCS8qIGRtb2RlX3N0ciAqLworICAgICIiLAkJCQkJLyogZG1v ZGVfcHJvbXB0ICovCisgICAgIkFURCVzXDAxNSIsCQkJLyogZGlhbF9zdHIgKi8KKyAgICAwLAkJ CQkJLyogZGlhbF9yYXRlICovCisgICAgMTEwMCwJCQkJLyogZXNjX3RpbWUgKi8KKyAgICA0MywJ CQkJCS8qIGVzY19jaGFyICovCisgICAgIkFUUTBIMFwwMTUiLAkJCS8qIGh1cF9zdHIgKi8KKyAg ICAiQVQmSzNcMDE1IiwJCQkvKiBod2ZjX3N0ciAqLworICAgICJBVCZLNFMzMj0xN1MzMz0xOVww MTUiLAkJLyogc3dmY19zdHIgKi8KKyAgICAiQVQmSzBcMDE1IiwJCQkvKiBub2ZjX3N0ciAqLwor ICAgICJBVFxcTjNcMDE1IiwJCQkvKiBlY19vbl9zdHIgKi8KKyAgICAiQVRcXE4xXDAxNSIsCQkJ LyogZWNfb2ZmX3N0ciAqLworICAgICJBVFM0Nj0xMzglQzNcMDE1IiwJCQkvKiBkY19vbl9zdHIg Ki8KKyAgICAiQVRTNDY9MTM2JUMwXDAxNSIsCQkJLyogZGNfb2ZmX3N0ciAqLworICAgICJBVFMw PTFcMDE1IiwJCQkvKiBhYV9vbl9zdHIgKi8KKyAgICAiQVRTMD0wXDAxNSIsCQkJLyogYWFfb2Zm X3N0ciAqLworICAgICJBVFxcTjBcMDE1IiwJCQkvKiBzYl9vbl9zdHIgKi8KKyAgICAiQVQmUTBc MDE1IiwJCQkvKiBzYl9vZmZfc3RyICovCisgICAgIkFUTTFcMDE1IiwJCQkJLyogc3Bfb25fc3Ry ICovCisgICAgIkFUTTBcMDE1IiwJCQkJLyogc3Bfb2ZmX3N0ciAqLworICAgICJBVEwxXDAxNSIs CQkJCS8qIHZvbDFfc3RyICovCisgICAgIkFUTDJcMDE1IiwJCQkJLyogdm9sMl9zdHIgKi8KKyAg ICAiQVRMM1wwMTUiLAkJCQkvKiB2b2wzX3N0ciAqLworICAgICJBVFgzXDAxNSIsCQkJCS8qIGln bm9yZWR0ICovCisgICAgIiIsCQkJCQkvKiBpbmkyICovCisgICAgNTc2MDBMLAkJCQkvKiBtYXhf c3BlZWQgKi8KKyAgICBDS0RfQVR8Q0tEX1NCfENLRF9FQ3xDS0RfREN8Q0tEX0hXfENLRF9TVywg LyogY2FwYXMgKi8KKyAgICBnZXRvawkJCQkvKiBva19mbiAqLworfTsKKworc3RhdGljCitNRE1J TkYgTU9UT1JPTEEgPSB7CQkJLyogTW90b3JvbGEgRmFzVGFsayBJSSBvciBMaWZlc3R5bGUgKi8K Ky8qCisgICJcRSIgYW5kICJcWCIgY29tbWFuZHMgcmVtb3ZlZCAtIE1vdG9yb2xhIExpZmVzdHls ZSBkb2Vzbid0IGhhdmUgdGhlbS4KKyAgICAgXEUwID0gRG9uJ3QgZWNobyB3aGlsZSBvbmxpbmUK KyAgICAgXFgwID0gUHJvY2VzcyBYb24vWG9mZiBidXQgZG9uJ3QgcGFzcyB0aHJvdWdoCisqLwor ICAgICJNb3Rvcm9sYSBGYXNUYWxrIElJIG9yIExpZmVzdHlsZSIsCS8qIE5hbWUgKi8KKyAgICAi QVRQXDAxNSIsCQkJCS8qIHB1bHNlIGNvbW1hbmQgKi8KKyAgICAiQVRUXDAxNSIsCQkJCS8qIHRv bmUgY29tbWFuZCAqLworICAgIDM1LAkJCQkJLyogZGlhbF90aW1lICovCisgICAgIiwiLAkJCQkv KiBwYXVzZV9jaGFycyAqLworICAgIDIsCQkJCQkvKiBwYXVzZV90aW1lICovCisjaWZkZWYgT1My CisgICAgIkFURTFRMFYxWDQmUzAmQzEmRDJcXEs1XFxWMVwwMTUiLAkvKiB3YWtlX3N0ciAqLwor I2Vsc2UKKyNpZmRlZiBWTVMKKyAgICAiQVRRMEUxWDQmUzFcXEs1XFxWMVwwMTUiLAkJLyogd2Fr ZV9zdHIgKi8KKyNlbHNlCisgICAgIkFUUTBFMVg0XFxLNVxcVjFcMDE1IiwJCS8qIHdha2Vfc3Ry ICovCisjZW5kaWYgLyogVk1TICovCisjZW5kaWYgLyogT1MyICovCisgICAgMCwJCQkJCS8qIHdh a2VfcmF0ZSAqLworICAgICJPS1wwMTUiLAkJCQkvKiB3YWtlX3Byb21wdCAqLworICAgICIiLAkJ CQkJLyogZG1vZGVfc3RyICovCisgICAgIiIsCQkJCQkvKiBkbW9kZV9wcm9tcHQgKi8KKyAgICAi QVREJXNcMDE1IiwJCQkvKiBkaWFsX3N0ciAqLworICAgIDAsCQkJCQkvKiBkaWFsX3JhdGUgKi8K KyAgICAxMTAwLAkJCQkvKiBlc2NfdGltZSAqLworICAgIDQzLAkJCQkJLyogZXNjX2NoYXIgKi8K KyAgICAiQVRRMEgwXDAxNSIsCQkJLyogaHVwX3N0ciAqLworICAgICJBVFxcUTNcMDE1IiwJCQkv KiBod2ZjX3N0ciAqLworICAgICJBVFxcUTFcMDE1IiwJCQkvKiBzd2ZjX3N0ciAqLworICAgICJB VFxcUTBcMDE1IiwJCQkvKiBub2ZjX3N0ciAqLworICAgICJBVFxcTjZcMDE1IiwJCQkvKiBlY19v bl9zdHIgKi8KKyAgICAiQVRcXE4xXDAxNSIsCQkJLyogZWNfb2ZmX3N0ciAqLworICAgICJBVCVD MVwwMTUiLAkJCS8qIGRjX29uX3N0ciAqLworICAgICJBVCVDMFwwMTUiLAkJCS8qIGRjX29mZl9z dHIgKi8KKyAgICAiQVRTMD0xXDAxNSIsCQkJLyogYWFfb25fc3RyICovCisgICAgIkFUUzA9MFww MTUiLAkJCS8qIGFhX29mZl9zdHIgKi8KKyAgICAiQVRcXEowXDAxNSIsCQkJLyogc2Jfb25fc3Ry ICovCisgICAgIkFUXFxKMVwwMTUiLAkJCS8qIHNiX29mZl9zdHIgKi8KKyAgICAiQVRNMVwwMTUi LAkJCQkvKiBzcF9vbl9zdHIgKi8KKyAgICAiQVRNMFwwMTUiLAkJCQkvKiBzcF9vZmZfc3RyICov CisgICAgIkFUTDFcMDE1IiwJCQkJLyogdm9sMV9zdHIgKi8KKyAgICAiQVRMMlwwMTUiLAkJCQkv KiB2b2wyX3N0ciAqLworICAgICJBVEwzXDAxNSIsCQkJCS8qIHZvbDNfc3RyICovCisgICAgIkFU WDNcMDE1IiwJCQkJLyogaWdub3JlZHQgKi8KKyAgICAiIiwJCQkJCS8qIGluaTIgKi8KKyAgICA1 NzYwMEwsCQkJCS8qIG1heF9zcGVlZCAqLworICAgIENLRF9BVHxDS0RfU0J8Q0tEX0VDfENLRF9E Q3xDS0RfSFd8Q0tEX1NXLCAvKiBjYXBhcyAqLworICAgIGdldG9rCQkJCS8qIG9rX2ZuICovCit9 OworCitzdGF0aWMKK01ETUlORiBCT0NBID0JCQkJLyogQm9jYSAqLworICAgIHsKKyAgICAiQk9D QSAxNC40IEZheG1vZGVtIiwKKyAgICAiQVRQXDAxNSIsCQkJCS8qIHB1bHNlIGNvbW1hbmQgKi8K KyAgICAiQVRUXDAxNSIsCQkJCS8qIHRvbmUgY29tbWFuZCAqLworICAgIDM1LAkJCQkJLyogZGlh bF90aW1lICovCisgICAgIiwiLAkJCQkvKiBwYXVzZV9jaGFycyAqLworICAgIDIsCQkJCQkvKiBw YXVzZV90aW1lICovCisjaWZkZWYgT1MyCisgICAgIkFURTFRMFYxRjFOMVcxJlMwJkMxJkQyXFxL NVMzNz0xMVM4Mj0xMjhTOTU9NDdYNFwwMTUiLCAvKiB3YWtlX3N0ciAqLworI2Vsc2UKKyNpZmRl ZiBWTVMKKyAgICAiQVRRMEUxRjFOMVcxJlMxXFxLNVMzNz0xMVM4Mj0xMjhTOTU9NDdYNFwwMTUi LCAvKiB3YWtlX3N0ciAqLworI2Vsc2UKKyAgICAiQVRRMEUxRjFOMVcxXFxLNVMzNz0xMVM4Mj0x MjhTOTU9NDdYNFwwMTUiLCAvKiB3YWtlX3N0ciAqLworI2VuZGlmIC8qIFZNUyAqLworI2VuZGlm IC8qIE9TMiAqLworICAgIDAsCQkJCQkvKiB3YWtlX3JhdGUgKi8KKyAgICAiT0tcMDE1IiwJCQkJ Lyogd2FrZV9wcm9tcHQgKi8KKyAgICAiIiwJCQkJCS8qIGRtb2RlX3N0ciAqLworICAgICIiLAkJ CQkJLyogZG1vZGVfcHJvbXB0ICovCisgICAgIkFURCVzXDAxNSIsCQkJLyogZGlhbF9zdHIgKi8K KyAgICAwLAkJCQkJLyogZGlhbF9yYXRlICovCisgICAgMTEwMCwJCQkJLyogZXNjX3RpbWUgKi8K KyAgICA0MywJCQkJCS8qIGVzY19jaGFyICovCisgICAgIkFUUTBIMFwwMTUiLAkJCS8qIGh1cF9z dHIgKi8KKyAgICAiQVQmSzNcMDE1IiwJCQkvKiBod2ZjX3N0ciAqLworICAgICJBVCZLNFwwMTUi LAkJCS8qIHN3ZmNfc3RyICovCisgICAgIkFUJkswXDAxNSIsCQkJLyogbm9mY19zdHIgKi8KKyAg ICAiQVRcXE4zUzM2PTdTNDg9N1wwMTUiLAkJLyogZWNfb25fc3RyICovCisgICAgIkFUXFxOMVww MTUiLAkJCS8qIGVjX29mZl9zdHIgKi8KKyAgICAiQVRTNDY9MTM4XDAxNSIsCQkJLyogZGNfb25f c3RyICovCisgICAgIkFUUzQ2PTEzNlwwMTUiLAkJCS8qIGRjX29mZl9zdHIgKi8KKyAgICAiQVRT MD0xXDAxNSIsCQkJLyogYWFfb25fc3RyICovCisgICAgIkFUUzA9MFwwMTUiLAkJCS8qIGFhX29m Zl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHNiX29uX3N0ciAqLworICAgICIiLAkJCQkJLyogc2Jf b2ZmX3N0ciAqLworICAgICJBVE0xXDAxNSIsCQkJCS8qIHNwX29uX3N0ciAqLworICAgICJBVE0w XDAxNSIsCQkJCS8qIHNwX29mZl9zdHIgKi8KKyAgICAiQVRMMVwwMTUiLAkJCQkvKiB2b2wxX3N0 ciAqLworICAgICJBVEwyXDAxNSIsCQkJCS8qIHZvbDJfc3RyICovCisgICAgIkFUTDNcMDE1IiwJ CQkJLyogdm9sM19zdHIgKi8KKyAgICAiQVRYM1wwMTUiLAkJCQkvKiBpZ25vcmVkdCAqLworICAg ICIiLAkJCQkJLyogaW5pMiAqLworICAgIDU3NjAwTCwJCQkJLyogbWF4X3NwZWVkICovCisgICAg Q0tEX0FUfENLRF9TQnxDS0RfRUN8Q0tEX0RDfENLRF9IV3xDS0RfU1csIC8qIGNhcGFzICovCisg ICAgZ2V0b2sJCQkJLyogb2tfZm4gKi8KK307CisKK3N0YXRpYworTURNSU5GIElOVEVMID0JCQkJ LyogSW50ZWwgKi8KKyAgICB7CisgICAgIkludGVsIEhpZ2gtU3BlZWQgRmF4bW9kZW0iLAorICAg ICJBVFBcMDE1IiwJCQkJLyogcHVsc2UgY29tbWFuZCAqLworICAgICJBVFRcMDE1IiwJCQkJLyog dG9uZSBjb21tYW5kICovCisgICAgMzUsCQkJCQkvKiBkaWFsX3RpbWUgKi8KKyAgICAiLCIsCQkJ CS8qIHBhdXNlX2NoYXJzICovCisgICAgMiwJCQkJCS8qIHBhdXNlX3RpbWUgKi8KKyNpZmRlZiBP UzIKKyAgICAiQVRFMVEwVjFZMFg0JlMwJkMxJkQyXFxLMVxcVjJTMjU9NTBcMDE1IiwgLyogd2Fr ZV9zdHIgKi8KKyNlbHNlCisjaWZkZWYgVk1TCisgICAgIkFUUTBFMVkwWDQmUzFcXEsxXFxWMlMy NT01MFwwMTUiLAkvKiB3YWtlX3N0ciAqLworI2Vsc2UKKyAgICAiQVRRMEUxWTBYNFxcSzFcXFYy UzI1PTUwXDAxNSIsCS8qIHdha2Vfc3RyICovCisjZW5kaWYgLyogVk1TICovCisjZW5kaWYgLyog T1MyICovCisgICAgMCwJCQkJCS8qIHdha2VfcmF0ZSAqLworICAgICJPS1wwMTUiLAkJCQkvKiB3 YWtlX3Byb21wdCAqLworICAgICJBVEIxK0ZDTEFTUz0wXDAxNSIsCQkvKiBkbW9kZV9zdHIgKi8K KyAgICAiT0tcMDE1IiwJCQkJLyogZG1vZGVfcHJvbXB0ICovCisgICAgIkFURCVzXDAxNSIsCQkJ LyogZGlhbF9zdHIgKi8KKyAgICAwLAkJCQkJLyogZGlhbF9yYXRlICovCisgICAgMTEwMCwJCQkJ LyogZXNjX3RpbWUgKi8KKyAgICA0MywJCQkJCS8qIGVzY19jaGFyICovCisgICAgIkFUUTBIMFww MTUiLAkJCS8qIGh1cF9zdHIgKi8KKyAgICAiQVRcXEcxXFxRM1wwMTUiLAkJCS8qIGh3ZmNfc3Ry ICovCisgICAgIkFUXFxHMVxcUTFcXFgwXDAxNSIsCQkvKiBzd2ZjX3N0ciAqLworICAgICJBVFxc RzBcMDE1IiwJCQkvKiBub2ZjX3N0ciAqLworICAgICJBVFxcSjBcXE4zXCJIM1wwMTUiLAkJLyog ZWNfb25fc3RyICovCisgICAgIkFUXFxOMVwwMTUiLAkJCS8qIGVjX29mZl9zdHIgKi8KKyAgICAi QVQlQzFcMDE1IiwJCQkvKiBkY19vbl9zdHIgKi8KKyAgICAiQVQlQzBcMDE1IiwJCQkvKiBkY19v ZmZfc3RyICovCisgICAgIkFUUzA9MVwwMTUiLAkJCS8qIGFhX29uX3N0ciAqLworICAgICJBVFMw PTBcMDE1IiwJCQkvKiBhYV9vZmZfc3RyICovCisgICAgIiIsCQkJCQkvKiBzYl9vbl9zdHIgKi8K KyAgICAiIiwJCQkJCS8qIHNiX29mZl9zdHIgKi8KKyAgICAiQVRNMVwwMTUiLAkJCQkvKiBzcF9v bl9zdHIgKi8KKyAgICAiQVRNMFwwMTUiLAkJCQkvKiBzcF9vZmZfc3RyICovCisgICAgIkFUTDFc MDE1IiwJCQkJLyogdm9sMV9zdHIgKi8KKyAgICAiQVRMMlwwMTUiLAkJCQkvKiB2b2wyX3N0ciAq LworICAgICJBVEwzXDAxNSIsCQkJCS8qIHZvbDNfc3RyICovCisgICAgIkFUWDNcMDE1IiwJCQkJ LyogaWdub3JlZHQgKi8KKyAgICAiIiwJCQkJCS8qIGluaTIgKi8KKyAgICA1NzYwMEwsCQkJCS8q IG1heF9zcGVlZCAqLworICAgIENLRF9BVHxDS0RfU0J8Q0tEX0VDfENLRF9EQ3xDS0RfSFd8Q0tE X1NXLCAvKiBjYXBhcyAqLworICAgIGdldG9rCQkJCS8qIG9rX2ZuICovCit9OworCitzdGF0aWMK K01ETUlORiBNVUxUSVRFQ0ggPQkJCS8qIE11bHRpdGVjaCAqLworICAgIHsKKyAgICAiTXVsdGl0 ZWNoIE1UMTQzMiBvciBNVDI4MzQgU2VyaWVzIiwKKyAgICAiQVRQXDAxNSIsCQkJCS8qIHB1bHNl IGNvbW1hbmQgKi8KKyAgICAiQVRUXDAxNSIsCQkJCS8qIHRvbmUgY29tbWFuZCAqLworICAgIDM1 LAkJCQkJLyogZGlhbF90aW1lICovCisgICAgIiwiLAkJCQkvKiBwYXVzZV9jaGFycyAqLworICAg IDIsCQkJCQkvKiBwYXVzZV90aW1lICovCisvKiAjUDAgKD0gbm8gcGFyaXR5KSBpcyBub3QgbGlz dGVkIGluIHRoZSBtYW51YWwgZm9yIG5ld2VyIG1vZGVscyAqLworLyogc28gaXQgaGFzIGJlZW4g cmVtb3ZlZCBmcm9tIGFsbCB0aHJlZSBjb3BpZXMgb2YgdGhlIE11bHRpdGVjaCB3YWtlX3N0ciAq LworI2lmZGVmIE9TMgorICAgICJBVEUxUTBWMVg0JlMwJkMxJkQyJkU4JlEwXDAxNSIsCS8qIHdh a2Vfc3RyICovCisjZWxzZQorI2lmZGVmIFZNUworICAgICJBVFEwRTFYNCZTMSZFOCZRMFwwMTUi LAkJLyogd2FrZV9zdHIgKi8KKyNlbHNlCisgICAgIkFUUTBFMVg0JkU4JlEwXDAxNSIsCQkvKiB3 YWtlX3N0ciAqLworI2VuZGlmIC8qIFZNUyAqLworI2VuZGlmIC8qIE9TMiAqLworICAgIDAsCQkJ CQkvKiB3YWtlX3JhdGUgKi8KKyAgICAiT0tcMDE1IiwJCQkJLyogd2FrZV9wcm9tcHQgKi8KKyAg ICAiIiwJCQkJCS8qIGRtb2RlX3N0ciAqLworICAgICIiLAkJCQkJLyogZG1vZGVfcHJvbXB0ICov CisgICAgIkFURCVzXDAxNSIsCQkJLyogZGlhbF9zdHIgKi8KKyAgICAwLAkJCQkJLyogZGlhbF9y YXRlICovCisgICAgMTEwMCwJCQkJLyogZXNjX3RpbWUgKi8KKyAgICA0MywJCQkJCS8qIGVzY19j aGFyICovCisgICAgIkFUUTBIMFwwMTUiLAkJCS8qIGh1cF9zdHIgKi8KKyAgICAiQVQmRTQmRTcm RTgmRTExJkUxM1wwMTUiLAkJLyogaHdmY19zdHIgKi8KKyAgICAiQVQmRTUmRTYmRTgmRTExJkUx M1wwMTUiLAkJLyogc3dmY19zdHIgKi8KKyAgICAiQVQmRTMmRTcmRTgmRTEwJkUxMlwwMTUiLAkJ Lyogbm9mY19zdHIgKi8KKyAgICAiQVQmRTFcMDE1IiwJCQkvKiBlY19vbl9zdHIgKi8KKyAgICAi QVQmRTBcMDE1IiwJCQkvKiBlY19vZmZfc3RyICovCisgICAgIkFUJkUxNVwwMTUiLAkJCS8qIGRj X29uX3N0ciAqLworICAgICJBVCZFMTRcMDE1IiwJCQkvKiBkY19vZmZfc3RyICovCisgICAgIkFU UzA9MVwwMTUiLAkJCS8qIGFhX29uX3N0ciAqLworICAgICJBVFMwPTBcMDE1IiwJCQkvKiBhYV9v ZmZfc3RyICovCisgICAgIkFUJEJBMFwwMTUiLAkJCS8qIHNiX29uX3N0ciAoPSAiYmF1ZCBhZGp1 c3Qgb2ZmIikgKi8KKyAgICAiQVQkQkExXDAxNSIsCQkJLyogc2Jfb2ZmX3N0ciAqLworICAgICJB VE0xXDAxNSIsCQkJCS8qIHNwX29uX3N0ciAqLworICAgICJBVE0wXDAxNSIsCQkJCS8qIHNwX29m Zl9zdHIgKi8KKyAgICAiQVRMMVwwMTUiLAkJCQkvKiB2b2wxX3N0ciAqLworICAgICJBVEwyXDAx NSIsCQkJCS8qIHZvbDJfc3RyICovCisgICAgIkFUTDNcMDE1IiwJCQkJLyogdm9sM19zdHIgKi8K KyAgICAiQVRYM1wwMTUiLAkJCQkvKiBpZ25vcmVkdCAqLworICAgICIiLAkJCQkJLyogaW5pMiAq LworICAgIDU3NjAwTCwJCQkJLyogbWF4X3NwZWVkICovCisgICAgQ0tEX0FUfENLRF9TQnxDS0Rf RUN8Q0tEX0RDfENLRF9IV3xDS0RfU1csIC8qIGNhcGFzICovCisgICAgZ2V0b2sJCQkJLyogb2tf Zm4gKi8KK307CisKK3N0YXRpYworTURNSU5GIFNVUFJBID0JCQkJLyogU3VwcmEgKi8KKyAgICB7 CisgICAgIlN1cHJhRkFYTW9kZW0gMTQ0IG9yIDI4OCIsCisgICAgIkFUUFwwMTUiLAkJCQkvKiBw dWxzZSBjb21tYW5kICovCisgICAgIkFUVFwwMTUiLAkJCQkvKiB0b25lIGNvbW1hbmQgKi8KKyAg ICAzNSwJCQkJCS8qIGRpYWxfdGltZSAqLworICAgICIsIiwJCQkJLyogcGF1c2VfY2hhcnMgKi8K KyAgICAyLAkJCQkJLyogcGF1c2VfdGltZSAqLworI2lmZGVmIE9TMgorICAgICJBVFEwRTFWMU4x VzBYNFkwJlMwJkMxJkQyXFxLNVM4Mj0xMjhcMDE1IiwgLyogd2FrZV9zdHIgKi8KKyNlbHNlCisj aWZkZWYgVk1TCisgICAgIkFUUTBFMU4xVzBYNFkwJlMxXFxLNVM4Mj0xMjhcMDE1IiwJLyogd2Fr ZV9zdHIgKi8KKyNlbHNlCisgICAgIkFUUTBFMU4xVzBYNFkwXFxLNVM4Mj0xMjhcMDE1IiwJLyog d2FrZV9zdHIgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAwLAkJ CQkJLyogd2FrZV9yYXRlICovCisgICAgIk9LXDAxNSIsCQkJCS8qIHdha2VfcHJvbXB0ICovCisg ICAgIiIsCQkJCQkvKiBkbW9kZV9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGRtb2RlX3Byb21wdCAq LworICAgICJBVEQlc1wwMTUiLAkJCS8qIGRpYWxfc3RyICovCisgICAgMCwJCQkJCS8qIGRpYWxf cmF0ZSAqLworICAgIDExMDAsCQkJCS8qIGVzY190aW1lICovCisgICAgNDMsCQkJCQkvKiBlc2Nf Y2hhciAqLworICAgICJBVFEwSDBcMDE1IiwJCQkvKiBodXBfc3RyICovCisgICAgIkFUJkszXDAx NSIsCQkJLyogaHdmY19zdHIgKi8KKyAgICAiQVQmSzRcMDE1IiwJCQkvKiBzd2ZjX3N0ciAqLwor ICAgICJBVCZLMFwwMTUiLAkJCS8qIG5vZmNfc3RyICovCisgICAgIkFUJlE1XFxOM1M0OD03XDAx NSIsCQkvKiBlY19vbl9zdHIgKi8KKyAgICAiQVQmUTBcXE4xXDAxNSIsCQkJLyogZWNfb2ZmX3N0 ciAqLworICAgICJBVCVDMVM0Nj0xMzhcMDE1IiwJCQkvKiBkY19vbl9zdHIgKi8KKyAgICAiQVQl QzBTNDY9MTM2XDAxNSIsCQkJLyogZGNfb2ZmX3N0ciAqLworICAgICJBVFMwPTFcMDE1IiwJCQkv KiBhYV9vbl9zdHIgKi8KKyAgICAiQVRTMD0wXDAxNSIsCQkJLyogYWFfb2ZmX3N0ciAqLworICAg ICIiLAkJCQkJLyogc2Jfb25fc3RyICovCisgICAgIiIsCQkJCQkvKiBzYl9vZmZfc3RyICovCisg ICAgIkFUTTFcMDE1IiwJCQkJLyogc3Bfb25fc3RyICovCisgICAgIkFUTVwwMTUiLAkJCQkvKiBz cF9vZmZfc3RyICovCisgICAgIkFUTFwwMTUiLAkJCQkvKiB2b2wxX3N0ciAqLworICAgICJBVEwy XDAxNSIsCQkJCS8qIHZvbDJfc3RyICovCisgICAgIkFUTDNcMDE1IiwJCQkJLyogdm9sM19zdHIg Ki8KKyAgICAiQVRYM1wwMTUiLAkJCQkvKiBpZ25vcmVkdCAqLworICAgICIiLAkJCQkJLyogaW5p MiAqLworICAgIDU3NjAwTCwJCQkJLyogbWF4X3NwZWVkICovCisgICAgQ0tEX0FUfENLRF9TQnxD S0RfRUN8Q0tEX0RDfENLRF9IV3xDS0RfU1csIC8qIGNhcGFzICovCisgICAgZ2V0b2sJCQkJLyog b2tfZm4gKi8KK307CisKK3N0YXRpYworTURNSU5GIFNVUFJBWCA9CQkJCS8qIFN1cHJhIEV4cHJl c3MgKi8KKyAgICB7CisgICAgIkRpYW1vbmQgU3VwcmEgRXhwcmVzcyBWLjkwIiwKKyAgICAiQVRQ XDAxNSIsCQkJCS8qIHB1bHNlIGNvbW1hbmQgKi8KKyAgICAiQVRUXDAxNSIsCQkJCS8qIHRvbmUg Y29tbWFuZCAqLworICAgIDM1LAkJCQkJLyogZGlhbF90aW1lICovCisgICAgIiwiLAkJCQkvKiBw YXVzZV9jaGFycyAqLworICAgIDIsCQkJCQkvKiBwYXVzZV90aW1lICovCisjaWZkZWYgT1MyCisg ICAgIkFUUTBFMVYxVzBYNCZDMSZEMiZTMFxcSzVcMDE1IiwJLyogd2FrZV9zdHIgKi8KKyNlbHNl CisjaWZkZWYgVk1TCisgICAgIkFUUTBFMVcwWDQmUzFcXEs1XDAxNSIsCQkvKiB3YWtlX3N0ciAq LworI2Vsc2UKKyAgICAiQVRRMEUxVzBYNFxcSzVcMDE1IiwJCS8qIHdha2Vfc3RyICovCisjZW5k aWYgLyogVk1TICovCisjZW5kaWYgLyogT1MyICovCisgICAgMCwJCQkJCS8qIHdha2VfcmF0ZSAq LworICAgICJPS1wwMTUiLAkJCQkvKiB3YWtlX3Byb21wdCAqLworICAgICIiLAkJCQkJLyogZG1v ZGVfc3RyICovCisgICAgIiIsCQkJCQkvKiBkbW9kZV9wcm9tcHQgKi8KKyAgICAiQVREJXNcMDE1 IiwJCQkvKiBkaWFsX3N0ciAqLworICAgIDAsCQkJCQkvKiBkaWFsX3JhdGUgKi8KKyAgICAxMTAw LAkJCQkvKiBlc2NfdGltZSAqLworICAgIDQzLAkJCQkJLyogZXNjX2NoYXIgKi8KKyAgICAiQVRR MEgwXDAxNSIsCQkJLyogaHVwX3N0ciAqLworICAgICJBVCZLM1wwMTUiLAkJCS8qIGh3ZmNfc3Ry ICovCisgICAgIkFUJks0XDAxNSIsCQkJLyogc3dmY19zdHIgKi8KKyAgICAiQVQmSzBcMDE1IiwJ CQkvKiBub2ZjX3N0ciAqLworICAgICJBVFxcTjNcMDE1IiwJCQkvKiBlY19vbl9zdHIgKi8KKyAg ICAiQVRcXE4xXDAxNSIsCQkJLyogZWNfb2ZmX3N0ciAqLworICAgICJBVCVDMlwwMTUiLAkJCS8q IGRjX29uX3N0ciAqLworICAgICJBVCVDMFwwMTUiLAkJCS8qIGRjX29mZl9zdHIgKi8KKyAgICAi QVRTMD0xXDAxNSIsCQkJLyogYWFfb25fc3RyICovCisgICAgIkFUUzA9MFwwMTUiLAkJCS8qIGFh X29mZl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHNiX29uX3N0ciAqLworICAgICIiLAkJCQkJLyog c2Jfb2ZmX3N0ciAqLworICAgICJBVE0xXDAxNSIsCQkJCS8qIHNwX29uX3N0ciAqLworICAgICJB VE1cMDE1IiwJCQkJLyogc3Bfb2ZmX3N0ciAqLworICAgICJBVExcMDE1IiwJCQkJLyogdm9sMV9z dHIgKi8KKyAgICAiQVRMMlwwMTUiLAkJCQkvKiB2b2wyX3N0ciAqLworICAgICJBVEwzXDAxNSIs CQkJCS8qIHZvbDNfc3RyICovCisgICAgIkFUWDNcMDE1IiwJCQkJLyogaWdub3JlZHQgKi8KKyAg ICAiIiwJCQkJCS8qIGluaTIgKi8KKyAgICAyMzA0MDBMLAkJCQkvKiBtYXhfc3BlZWQgKi8KKyAg ICBDS0RfQVR8Q0tEX1NCfENLRF9FQ3xDS0RfREN8Q0tEX0hXfENLRF9TVywgLyogY2FwYXMgKi8K KyAgICBnZXRvawkJCQkvKiBva19mbiAqLworfTsKKworc3RhdGljCitNRE1JTkYgTUFYVEVDSCA9 CQkJLyogTWF4VGVjaCAqLworICAgIHsKKyAgICAiTWF4VGVjaCBYTTI4OEVBIG9yIEdWQyBGQVhN b2RlbSIsCisgICAgIkFUUFwwMTUiLAkJCQkvKiBwdWxzZSBjb21tYW5kICovCisgICAgIkFUVFww MTUiLAkJCQkvKiB0b25lIGNvbW1hbmQgKi8KKyAgICAzNSwJCQkJCS8qIGRpYWxfdGltZSAqLwor ICAgICIsIiwJCQkJLyogcGF1c2VfY2hhcnMgKi8KKyAgICAyLAkJCQkJLyogcGF1c2VfdGltZSAq LworI2lmZGVmIE9TMgorICAgICJBVFEwRTFWMVg0WTAmUzAmQzEmRDImTDAmTTBcXEs1XDAxNSIs IC8qIHdha2Vfc3RyICovCisjZWxzZQorI2lmZGVmIFZNUworICAgICJBVFEwRTFYNFkwJkwwJk0w JlMxXFxLNVwwMTUiLAkvKiB3YWtlX3N0ciAqLworI2Vsc2UKKyAgICAiQVRRMEUxWDRZMCZMMCZN MFxcSzVcMDE1IiwJCS8qIHdha2Vfc3RyICovCisjZW5kaWYgLyogVk1TICovCisjZW5kaWYgLyog T1MyICovCisgICAgMCwJCQkJCS8qIHdha2VfcmF0ZSAqLworICAgICJPS1wwMTUiLAkJCQkvKiB3 YWtlX3Byb21wdCAqLworICAgICIiLAkJCQkJLyogZG1vZGVfc3RyICovCisgICAgIiIsCQkJCQkv KiBkbW9kZV9wcm9tcHQgKi8KKyAgICAiQVREJXNcMDE1IiwJCQkvKiBkaWFsX3N0ciAqLworICAg IDAsCQkJCQkvKiBkaWFsX3JhdGUgKi8KKyAgICAxMTAwLAkJCQkvKiBlc2NfdGltZSAqLworICAg IDQzLAkJCQkJLyogZXNjX2NoYXIgKi8KKyAgICAiQVRRMEgwXDAxNSIsCQkJLyogaHVwX3N0ciAq LworICAgICJBVFxcUTNcMDE1IiwJCQkvKiBod2ZjX3N0ciAqLworICAgICJBVFxcUTFcXFgwXDAx NSIsCQkJLyogc3dmY19zdHIgKi8KKyAgICAiQVRcXFEwXDAxNSIsCQkJLyogbm9mY19zdHIgKi8K KyAgICAiQVRcXE42XDAxNSIsCQkJLyogZWNfb25fc3RyICovCisgICAgIkFUXFxOMFwwMTUiLAkJ CS8qIGVjX29mZl9zdHIgKi8KKyAgICAiQVRcXE42JUMxXDAxNSIsCQkJLyogZGNfb25fc3RyICov CisgICAgIkFUXFxONiVDMFwwMTUiLAkJCS8qIGRjX29mZl9zdHIgKi8KKyAgICAiQVRTMD0xXDAx NSIsCQkJLyogYWFfb25fc3RyICovCisgICAgIkFUUzA9MFwwMTUiLAkJCS8qIGFhX29mZl9zdHIg Ki8KKyAgICAiIiwJCQkJCS8qIHNiX29uX3N0ciAqLworICAgICIiLAkJCQkJLyogc2Jfb2ZmX3N0 ciAqLworICAgICJBVE0xXDAxNSIsCQkJCS8qIHNwX29uX3N0ciAqLworICAgICJBVE0wXDAxNSIs CQkJCS8qIHNwX29mZl9zdHIgKi8KKyAgICAiQVRMMVwwMTUiLAkJCQkvKiB2b2wxX3N0ciAqLwor ICAgICJBVEwyXDAxNSIsCQkJCS8qIHZvbDJfc3RyICovCisgICAgIkFUTDNcMDE1IiwJCQkJLyog dm9sM19zdHIgKi8KKyAgICAiQVRYM1wwMTUiLAkJCQkvKiBpZ25vcmVkdCAqLworICAgICIiLAkJ CQkJLyogaW5pMiAqLworICAgIDExNTIwMEwsCQkJCS8qIG1heF9zcGVlZCAqLworICAgIENLRF9B VHxDS0RfU0J8Q0tEX0VDfENLRF9EQ3xDS0RfSFd8Q0tEX1NXLCAvKiBjYXBhcyAqLworICAgIGdl dG9rCQkJCS8qIG9rX2ZuICovCit9OworCitzdGF0aWMKK01ETUlORiBST0xNID0JCS8qIElCTSAv IFNpZW1lbnMgLyBSb2xtIDgwMDAsIDkwMDAsIDk3NTEgQ0JYIERDTSAqLworICAgIHsKKyAgICAi SUJNL1NpZW1lbnMvUm9sbSBDQlggRGF0YSBDb21tdW5pY2F0aW9ucyBNb2R1bGUiLAorICAgICIi LAkJCQkJLyogcHVsc2UgY29tbWFuZCAqLworICAgICIiLAkJCQkJLyogdG9uZSBjb21tYW5kICov CisgICAgNjAsCQkJCQkvKiBkaWFsX3RpbWUgKi8KKyAgICAiIiwJCQkJCS8qIHBhdXNlX2NoYXJz ICovCisgICAgMCwJCQkJCS8qIHBhdXNlX3RpbWUgKi8KKyAgICAiXDAxNVwwMTUiLAkJCQkvKiB3 YWtlX3N0ciAqLworICAgIDUwLAkJCQkJLyogd2FrZV9yYXRlICovCisgICAgIk1PRElGWT8iLAkJ CQkvKiB3YWtlX3Byb21wdCAqLworICAgICIiLAkJCQkJLyogZG1vZGVfc3RyICovCisgICAgIiIs CQkJCQkvKiBkbW9kZV9wcm9tcHQgKi8KKyAgICAiQ0FMTCAlc1wwMTUiLAkJCS8qIGRpYWxfc3Ry ICovCisgICAgMCwJCQkJCS8qIGRpYWxfcmF0ZSAqLworICAgIDAsCQkJCQkvKiBlc2NfdGltZSAq LworICAgIDAsCQkJCQkvKiBlc2NfY2hhciAqLworICAgICIiLAkJCQkJLyogaHVwX3N0ciAqLwor ICAgICIiLAkJCQkJLyogaHdmY19zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHN3ZmNfc3RyICovCisg ICAgIiIsCQkJCQkvKiBub2ZjX3N0ciAqLworICAgICIiLAkJCQkJLyogZWNfb25fc3RyICovCisg ICAgIiIsCQkJCQkvKiBlY19vZmZfc3RyICovCisgICAgIiIsCQkJCQkvKiBkY19vbl9zdHIgKi8K KyAgICAiIiwJCQkJCS8qIGRjX29mZl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGFhX29uX3N0ciAq LworICAgICIiLAkJCQkJLyogYWFfb2ZmX3N0ciAqLworICAgICIiLAkJCQkJLyogc2Jfb25fc3Ry ICovCisgICAgIiIsCQkJCQkvKiBzYl9vZmZfc3RyICovCisgICAgIiIsCQkJCQkvKiBzcF9vZmZf c3RyICovCisgICAgIiIsCQkJCQkvKiBzcF9vbl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHZvbDFf c3RyICovCisgICAgIiIsCQkJCQkvKiB2b2wyX3N0ciAqLworICAgICIiLAkJCQkJLyogdm9sM19z dHIgKi8KKyAgICAiIiwJCQkJCS8qIGlnbm9yZWR0ICovCisgICAgIiIsCQkJCQkvKiBpbmkyICov CisgICAgMTkyMDBMLAkJCQkvKiBtYXhfc3BlZWQgKi8KKyAgICAwLAkJCQkJLyogY2FwYXMgKi8K KyAgICBOVUxMCQkJCS8qIG9rX2ZuICovCit9OworCitzdGF0aWMKK01ETUlORiBVU1IgPQkJCQkv KiBVU1IgQ291cmllciBhbmQgU3BvcnRzdGVyIG1vZGVtcyAqLworICAgIHsKKyAgICAiVVMgUm9i b3RpY3MgQ291cmllciwgU3BvcnRzdGVyLCBvciBjb21wYXRpYmxlIiwKKyAgICAiQVRQXDAxNSIs CQkJCS8qIHB1bHNlIGNvbW1hbmQgKi8KKyAgICAiQVRUXDAxNSIsCQkJCS8qIHRvbmUgY29tbWFu ZCAqLworICAgIDM1LAkJCQkJLyogZGlhbF90aW1lICovCisgICAgIiwiLAkJCQkvKiBwYXVzZV9j aGFycyAqLworICAgIDIsCQkJCQkvKiBwYXVzZV90aW1lICovCisjaWZkZWYgT1MyCisgICAgIkFU UTBFMVYxWDQmQTMmUzAmQzEmRDImTjAmWTNTMTQ9MFwwMTUiLCAvKiB3YWtlX3N0ciAqLworI2Vs c2UKKyNpZmRlZiBTVU5PUzQKKyAgICAiQVRRMFg0JkEzJlMwJk4wJlkzUzE0PTBcMDE1IiwJLyog d2FrZV9zdHIgLS0gbmVlZHMgJlMwIGluIFN1bk9TICovCisjZWxzZQorI2lmZGVmIFZNUworICAg ICJBVFEwWDQmQTMmUzEmTjAmWTNTMTQ9MFwwMTUiLAkvKiB3YWtlX3N0ciAtLSBuZWVkcyAmUzEg aW4gVk1TICovCisjZWxzZQorICAgICJBVFEwWDQmQTMmTjAmWTNTMTQ9MFwwMTUiLAkJLyogd2Fr ZV9zdHIgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBTVU5PUzQgKi8KKyNlbmRpZiAv KiBPUzIgKi8KKyAgICAwLAkJCQkJLyogd2FrZV9yYXRlICovCisgICAgIk9LXDAxNSIsCQkJCS8q IHdha2VfcHJvbXB0ICovCisgICAgIiIsCQkJCQkvKiBkbW9kZV9zdHIgKi8KKyAgICAiIiwJCQkJ CS8qIGRtb2RlX3Byb21wdCAqLworICAgICJBVEQlc1wwMTUiLAkJCS8qIGRpYWxfc3RyICovCisg ICAgMCwJCQkJCS8qIGRpYWxfcmF0ZSAqLworICAgIDExMDAsCQkJCS8qIGVzY190aW1lICovCisg ICAgNDMsCQkJCQkvKiBlc2NfY2hhciAqLworICAgICJBVFEwSDBcMDE1IiwJCQkvKiBodXBfc3Ry ICovCisgICAgIkFUJkgxJlIyJkkwXDAxNSIsCQkJLyogaHdmY19zdHIgKi8KKyAgICAiQVQmSDIm UjEmSTJcMDE1IiwJCQkvKiBzd2ZjX3N0ciAqLworICAgICJBVCZIMCZSMSZJMFwwMTUiLAkJCS8q IG5vZmNfc3RyICovCisgICAgIkFUJk00JkIxXDAxNSIsCQkJLyogZWNfb25fc3RyICovCisgICAg IkFUJk0wXDAxNSIsCQkJLyogZWNfb2ZmX3N0ciAqLworICAgICJBVCZLMVwwMTUiLAkJCS8qIGRj X29uX3N0ciAqLworICAgICJBVCZLMFwwMTUiLAkJCS8qIGRjX29mZl9zdHIgKi8KKyAgICAiQVRT MD0xXDAxNSIsCQkJLyogYWFfb25fc3RyICovCisgICAgIkFUUzA9MFwwMTUiLAkJCS8qIGFhX29m Zl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHNiX29uX3N0ciAqLworICAgICIiLAkJCQkJLyogc2Jf b2ZmX3N0ciAqLworICAgICJBVE0xXDAxNSIsCQkJCS8qIHNwX29uX3N0ciAqLworICAgICJBVE0w XDAxNSIsCQkJCS8qIHNwX29mZl9zdHIgKi8KKyAgICAiQVRMMVwwMTUiLAkJCQkvKiB2b2wxX3N0 ciAqLworICAgICJBVEwyXDAxNSIsCQkJCS8qIHZvbDJfc3RyICovCisgICAgIkFUTDNcMDE1IiwJ CQkJLyogdm9sM19zdHIgKi8KKyAgICAiQVRYM1wwMTUiLAkJCQkvKiBpZ25vcmVkdCAqLworICAg ICIiLAkJCQkJLyogaW5pMiAqLworICAgIDExNTIwMEwsCQkJCS8qIG1heF9zcGVlZCAqLworICAg IENLRF9BVHxDS0RfU0J8Q0tEX0VDfENLRF9EQ3xDS0RfSFd8Q0tEX1NXLCAvKiBjYXBhcyAqLwor ICAgIGdldG9rCQkJCS8qIG9rX2ZuICovCit9OworCisKK3N0YXRpYworTURNSU5GIFVTUlgyID0J CQkJLyogVVNSIFhKLUNDMTU2MCBYMiA1NksgKi8KKyAgICB7CisgICAgIlVTIFJvYm90aWNzIC8g TWVnYWhlcnR6IENDL1hKLUNDMTU2MCBYMiIsCisgICAgIkFUUFwwMTUiLAkJCQkvKiBwdWxzZSBj b21tYW5kICovCisgICAgIkFUVFwwMTUiLAkJCQkvKiB0b25lIGNvbW1hbmQgKi8KKyAgICAzNSwJ CQkJCS8qIGRpYWxfdGltZSAqLworICAgICIsIiwJCQkJLyogcGF1c2VfY2hhcnMgKi8KKyAgICAy LAkJCQkJLyogcGF1c2VfdGltZSAqLworI2lmZGVmIE9TMgorICAgICJBVFEwRTFWMVg0JkEzJlMw JkIyJkMxJkQyJk4wXDAxNSIsCS8qIHdha2Vfc3RyICovCisjZWxzZQorI2lmZGVmIFZNUworICAg ICJBVFEwWDQmQTMmQjImTjAmUzFcMDE1IiwJCS8qIHdha2Vfc3RyICovCisjZWxzZQorICAgICJB VFEwWDQmQTMmQjImTjBcMDE1IiwJCS8qIHdha2Vfc3RyICovCisjZW5kaWYgLyogVk1TICovCisj ZW5kaWYgLyogT1MyICovCisgICAgMCwJCQkJCS8qIHdha2VfcmF0ZSAqLworICAgICJPS1wwMTUi LAkJCQkvKiB3YWtlX3Byb21wdCAqLworICAgICIiLAkJCQkJLyogZG1vZGVfc3RyICovCisgICAg IiIsCQkJCQkvKiBkbW9kZV9wcm9tcHQgKi8KKyAgICAiQVREJXNcMDE1IiwJCQkvKiBkaWFsX3N0 ciAqLworICAgIDAsCQkJCQkvKiBkaWFsX3JhdGUgKi8KKyAgICAxMTAwLAkJCQkvKiBlc2NfdGlt ZSAqLworICAgIDQzLAkJCQkJLyogZXNjX2NoYXIgKi8KKyAgICAiQVRRMEgwXDAxNSIsCQkJLyog aHVwX3N0ciAqLworICAgICJBVCZIMSZJMFwwMTUiLAkJCS8qIGh3ZmNfc3RyICovCisgICAgIkFU JkgyJkkyXDAxNSIsCQkJLyogc3dmY19zdHIgKi8KKyAgICAiQVQmSDAmSTBcMDE1IiwJCQkvKiBu b2ZjX3N0ciAqLworICAgICJBVCZNNFwwMTUiLAkJCS8qIGVjX29uX3N0ciAqLworICAgICJBVCZN MFwwMTUiLAkJCS8qIGVjX29mZl9zdHIgKi8KKyAgICAiQVQmSzFcMDE1IiwJCQkvKiBkY19vbl9z dHIgKi8KKyAgICAiQVQmSzBcMDE1IiwJCQkvKiBkY19vZmZfc3RyICovCisgICAgIkFUUzA9MVww MTUiLAkJCS8qIGFhX29uX3N0ciAqLworICAgICJBVFMwPTBcMDE1IiwJCQkvKiBhYV9vZmZfc3Ry ICovCisgICAgIkFUJkIxXDAxNSIsCQkJLyogc2Jfb25fc3RyICovCisgICAgIkFUJkIwXDAxNSIs CQkJLyogc2Jfb2ZmX3N0ciAqLworICAgICJBVE0xXDAxNSIsCQkJCS8qIHNwX29uX3N0ciAqLwor ICAgICJBVE0wXDAxNSIsCQkJCS8qIHNwX29mZl9zdHIgKi8KKyAgICAiQVRMMVwwMTUiLAkJCQkv KiB2b2wxX3N0ciAqLworICAgICJBVEwyXDAxNSIsCQkJCS8qIHZvbDJfc3RyICovCisgICAgIkFU TDNcMDE1IiwJCQkJLyogdm9sM19zdHIgKi8KKyAgICAiQVRYM1wwMTUiLAkJCQkvKiBpZ25vcmVk dCAqLworICAgICIiLAkJCQkJLyogaW5pMiAqLworICAgIDExNTIwMEwsCQkJCS8qIG1heF9zcGVl ZCAqLworICAgIENLRF9BVHxDS0RfU0J8Q0tEX0VDfENLRF9EQ3xDS0RfSFd8Q0tEX1NXLCAvKiBj YXBhcyAqLworICAgIGdldG9rCQkJCS8qIG9rX2ZuICovCit9OworCitzdGF0aWMKK01ETUlORiBP TERUQiA9CQkJCS8qIE9sZCBUZWxlYml0cyAqLworICAgIHsKKyAgICAiVGVsZWJpdCBUcmFpbEJs YXplciwgVDEwMDAsIFQxNTAwLCBUMjAwMCwgVDI1MDAiLAorICAgICJBVFBcMDE1IiwJCQkJLyog cHVsc2UgY29tbWFuZCAqLworICAgICJBVFRcMDE1IiwJCQkJLyogdG9uZSBjb21tYW5kICovCisg ICAgNjAsCQkJCQkvKiBkaWFsX3RpbWUgKi8KKyAgICAiLCIsCQkJCS8qIHBhdXNlX2NoYXJzICov CisgICAgMiwJCQkJCS8qIHBhdXNlX3RpbWUgKi8KKyNpZmRlZiBPUzIKKyAgICAiXDAyMUFBQUFB VFEwRTFWMVgxJlMwJkMxJkQyUzEyPTUwUzUwPTBTNTQ9M1wwMTUiLCAvKiB3YWtlX3N0ci4gKi8K KyNlbHNlCisjaWZkZWYgVk1TCisgICAgIlwwMjFBQUFBQVRRMFgxUzEyPTUwUzUwPTBTNTQ9M1ww MTUiLCAvKiB3YWtlX3N0ci4gKi8KKyNlbHNlCisgICAgIlwwMjFBQUFBQVRRMFgxJlMxUzEyPTUw UzUwPTBTNTQ9M1wwMTUiLCAvKiB3YWtlX3N0ci4gKi8KKyNlbmRpZiAvKiBWTVMgKi8KKyNlbmRp ZiAvKiBPUzIgKi8KKyAgICAxMDAsCQkJCS8qIHdha2VfcmF0ZSA9IDEwMCBtc2VjICovCisgICAg Ik9LXDAxNSIsCQkJCS8qIHdha2VfcHJvbXB0ICovCisgICAgIiIsCQkJCQkvKiBkbW9kZV9zdHIg Ki8KKyAgICAiIiwJCQkJCS8qIGRtb2RlX3Byb21wdCAqLworICAgICJBVEQlc1wwMTUiLAkJCS8q IGRpYWxfc3RyLCBOb3RlOiBubyBUIG9yIFAgKi8KKyAgICA4MCwJCQkJCS8qIGRpYWxfcmF0ZSAq LworICAgIDExMDAsCQkJCS8qIGVzY190aW1lIChndWFyZCB0aW1lKSAqLworICAgIDQzLAkJCQkJ LyogZXNjX2NoYXIgKi8KKyAgICAiQVRRMEgwXDAxNSIsCQkJLyogaHVwX3N0ciAqLworICAgICJB VFM1OD0yUzY4PTJcMDE1IiwJCQkvKiBod2ZjX3N0ciAqLworICAgICJBVFM1OD0zUzY4PTNTNjk9 MFwwMTUiLAkJLyogc3dmY19zdHIgKi8KKyAgICAiQVRTNTg9MFM2OD0wXDAxNSIsCQkJLyogbm9m Y19zdHIgKi8KKyAgICAiQVRTNjY9MVM5NT0yXDAxNSIsCQkJLyogZWNfb25fc3RyICovCisgICAg IkFUUzk1PTBcMDE1IiwJCQkvKiBlY19vZmZfc3RyICovCisgICAgIkFUUzExMD0xUzk2PTFcMDE1 IiwJCS8qIGRjX29uX3N0ciAqLworICAgICJBVFMxMTA9MFM5Nj0wXDAxNSIsCQkvKiBkY19vZmZf c3RyICovCisgICAgIkFUUzA9MVwwMTUiLAkJCS8qIGFhX29uX3N0ciAqLworICAgICJBVFMwPTBc MDE1IiwJCQkvKiBhYV9vZmZfc3RyICovCisgICAgIiIsCQkJCQkvKiBzYl9vbl9zdHIgKi8KKyAg ICAiIiwJCQkJCS8qIHNiX29mZl9zdHIgKi8KKyAgICAiQVRNMVwwMTUiLAkJCQkvKiBzcF9vbl9z dHIgKi8KKyAgICAiQVRNMFwwMTUiLAkJCQkvKiBzcF9vZmZfc3RyICovCisgICAgIkFUTDFcMDE1 IiwJCQkJLyogdm9sMV9zdHIgKi8KKyAgICAiQVRMMlwwMTUiLAkJCQkvKiB2b2wyX3N0ciAqLwor ICAgICJBVEwzXDAxNSIsCQkJCS8qIHZvbDNfc3RyICovCisgICAgIkFUWDNcMDE1IiwJCQkJLyog aWdub3JlZHQgKi8KKyAgICAiIiwJCQkJCS8qIGluaTIgKi8KKyAgICAxOTIwMEwsCQkJCS8qIG1h eF9zcGVlZCAqLworICAgIENLRF9BVHxDS0RfU0J8Q0tEX0VDfENLRF9EQ3xDS0RfSFd8Q0tEX1NX fENLRF9UQnxDS0RfS1MsIC8qIGNhcGFzICovCisgICAgZ2V0b2sJCQkJLyogb2tfZm4gKi8KK307 CisKK3N0YXRpYworTURNSU5GIE5FV1RCID0JCQkJLyogTmV3IFRlbGViaXRzICovCisgICAgewor ICAgICJUZWxlYml0IFQxNjAwLCBUMzAwMCwgUUJsYXplciwgV29ybGRCbGF6ZXIsIGV0Yy4iLAor ICAgICJBVFBcMDE1IiwJCQkJLyogcHVsc2UgY29tbWFuZCAqLworICAgICJBVFRcMDE1IiwJCQkJ LyogdG9uZSBjb21tYW5kICovCisgICAgNjAsCQkJCQkvKiBkaWFsX3RpbWUgKi8KKyAgICAiLCIs CQkJCS8qIHBhdXNlX2NoYXJzICovCisgICAgMiwJCQkJCS8qIHBhdXNlX3RpbWUgKi8KKyNpZmRl ZiBPUzIKKyAgICAiXDAyMUFBQUFBVFEwRTFWMVgyJlMwJkMxJkQyUzEyPTUwUzUwPTBTNjE9MFM2 Mz0wXDAxNSIsIC8qIHdha2Vfc3RyLiAqLworI2Vsc2UKKyNpZmRlZiBWTVMKKyAgICAiXDAyMUFB QUFBVFEwWDImUzFTMTI9NTBTNTA9MFM2MT0wUzYzPTBcMDE1IiwgLyogd2FrZV9zdHIuICovCisj ZWxzZQorICAgICJcMDIxQUFBQUFUUTBYMlMxMj01MFM1MD0wUzYxPTBTNjM9MFwwMTUiLCAvKiB3 YWtlX3N0ci4gKi8KKyNlbmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAxMDAs CQkJCS8qIHdha2VfcmF0ZSA9IDEwMCBtc2VjICovCisgICAgIk9LXDAxNSIsCQkJCS8qIHdha2Vf cHJvbXB0ICovCisgICAgIiIsCQkJCQkvKiBkbW9kZV9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGRt b2RlX3Byb21wdCAqLworICAgICJBVEQlc1wwMTUiLAkJCS8qIGRpYWxfc3RyLCBOb3RlOiBubyBU IG9yIFAgKi8KKyAgICA4MCwJCQkJCS8qIGRpYWxfcmF0ZSAqLworICAgIDExMDAsCQkJCS8qIGVz Y190aW1lIChndWFyZCB0aW1lKSAqLworICAgIDQzLAkJCQkJLyogZXNjX2NoYXIgKi8KKyAgICAi QVRRMEgwXDAxNSIsCQkJLyogaHVwX3N0ciAqLworICAgICJBVFM1OD0yUzY4PTJcMDE1IiwJCQkv KiBod2ZjX3N0ciAqLworICAgICJBVFM1OD0zUzY4PTNcMDE1IiwJCQkvKiBzd2ZjX3N0ciAqLwor ICAgICJBVFM1OD0wUzY4PTBcMDE1IiwJCQkvKiBub2ZjX3N0ciAqLworICAgICJBVFMxODA9M1ww MTUiLAkJCS8qIGVjX29uX3N0ciAqLworICAgICJBVFMxODA9MFwwMTUiLAkJCS8qIGVjX29mZl9z dHIgKi8KKyAgICAiQVRTMTkwPTFcMDE1IiwJCQkvKiBkY19vbl9zdHIgKi8KKyAgICAiQVRTMTkw PTBcMDE1IiwJCQkvKiBkY19vZmZfc3RyICovCisgICAgIkFUUzA9MVwwMTUiLAkJCS8qIGFhX29u X3N0ciAqLworICAgICJBVFMwPTBcMDE1IiwJCQkvKiBhYV9vZmZfc3RyICovCisgICAgIiIsCQkJ CQkvKiBzYl9vbl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHNiX29mZl9zdHIgKi8KKyAgICAiQVRN MVwwMTUiLAkJCQkvKiBzcF9vbl9zdHIgKi8KKyAgICAiQVRNMFwwMTUiLAkJCQkvKiBzcF9vZmZf c3RyICovCisgICAgIkFUTDFcMDE1IiwJCQkJLyogdm9sMV9zdHIgKi8KKyAgICAiQVRMMlwwMTUi LAkJCQkvKiB2b2wyX3N0ciAqLworICAgICJBVEwzXDAxNSIsCQkJCS8qIHZvbDNfc3RyICovCisg ICAgIkFUWDNcMDE1IiwJCQkJLyogaWdub3JlZHQgKi8KKyAgICAiIiwJCQkJCS8qIGluaTIgKi8K KyAgICAzODQwMEwsCQkJCS8qIG1heF9zcGVlZCAqLworICAgIENLRF9BVHxDS0RfU0J8Q0tEX0VD fENLRF9EQ3xDS0RfSFd8Q0tEX1NXfENLRF9UQnxDS0RfS1MsIC8qIGNhcGFzICovCisgICAgZ2V0 b2sJCQkJLyogb2tfZm4gKi8KK307CisjZW5kaWYgLyogTUlOSURJQUwgKi8KKworc3RhdGljCitN RE1JTkYgRFVNTVkgPSAvKiBkdW1teSBpbmZvcm1hdGlvbiBmb3IgbW9kZW1zIHRoYXQgYXJlIGhh bmRsZWQgZWxzZXdoZXJlICovCisgICAgeworICAgICIoZHVtbXkpIiwKKyAgICAiIiwJCQkJCS8q IHB1bHNlIGNvbW1hbmQgKi8KKyAgICAiIiwJCQkJCS8qIHRvbmUgY29tbWFuZCAqLworICAgIDMw LAkJCQkJLyogZGlhbF90aW1lICovCisgICAgIiIsCQkJCQkvKiBwYXVzZV9jaGFycyAqLworICAg IDAsCQkJCQkvKiBwYXVzZV90aW1lICovCisgICAgIiIsCQkJCQkvKiB3YWtlX3N0ciAqLworICAg IDAsCQkJCQkvKiB3YWtlX3JhdGUgKi8KKyAgICAiIiwJCQkJCS8qIHdha2VfcHJvbXB0ICovCisg ICAgIiIsCQkJCQkvKiBkbW9kZV9zdHIgKi8KKyAgICBOVUxMLAkJCQkvKiBkbW9kZV9wcm9tcHQg Ki8KKyAgICAiJXNcMDE1IiwJCQkJLyogZGlhbF9zdHIgKi8KKyAgICAwLAkJCQkJLyogZGlhbF9y YXRlICovCisgICAgMCwJCQkJCS8qIGVzY190aW1lICovCisgICAgMCwJCQkJCS8qIGVzY19jaGFy ICovCisgICAgIiIsCQkJCQkvKiBodXBfc3RyICovCisgICAgIiIsCQkJCQkvKiBod2ZjX3N0ciAq LworICAgICIiLAkJCQkJLyogc3dmY19zdHIgKi8KKyAgICAiIiwJCQkJCS8qIG5vZmNfc3RyICov CisgICAgIiIsCQkJCQkvKiBlY19vbl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGVjX29mZl9zdHIg Ki8KKyAgICAiIiwJCQkJCS8qIGRjX29uX3N0ciAqLworICAgICIiLAkJCQkJLyogZGNfb2ZmX3N0 ciAqLworICAgICIiLAkJCQkJLyogYWFfb25fc3RyICovCisgICAgIiIsCQkJCQkvKiBhYV9vZmZf c3RyICovCisgICAgIiIsCQkJCQkvKiBzYl9vbl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHNiX29m Zl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHNwX29mZl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHNw X29uX3N0ciAqLworICAgICIiLAkJCQkJLyogdm9sMV9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHZv bDJfc3RyICovCisgICAgIiIsCQkJCQkvKiB2b2wzX3N0ciAqLworICAgICIiLAkJCQkJLyogaWdu b3JlZHQgKi8KKyAgICAiIiwJCQkJCS8qIGluaTIgKi8KKyAgICAwTCwJCQkJCS8qIG1heF9zcGVl ZCAqLworICAgIDAsCQkJCQkvKiBjYXBhcyAqLworICAgIE5VTEwJCQkJLyogb2tfZm4gKi8KK307 CisKKyNpZm5kZWYgTUlOSURJQUwKK3N0YXRpYworTURNSU5GIFJXVjMyID0JCQkJLyogR2VuZXJp YyBSb2Nrd2VsbCBWLjMyICovCisgICAgeworICAgICJHZW5lcmljIFJvY2t3ZWxsIFYuMzIgbW9k ZW0iLAkvKiBBVEkzLCBBVEk0LCBhbmQgQVRJNiBmb3IgZGV0YWlscyAqLworICAgICJBVFBcMDE1 IiwJCQkJLyogcHVsc2UgY29tbWFuZCAqLworICAgICJBVFRcMDE1IiwJCQkJLyogdG9uZSBjb21t YW5kICovCisgICAgMzUsCQkJCQkvKiBkaWFsX3RpbWUgKi8KKyAgICAiLCIsCQkJCS8qIHBhdXNl X2NoYXJzICovCisgICAgMiwJCQkJCS8qIHBhdXNlX3RpbWUgKi8KKyNpZmRlZiBPUzIKKyAgICAi QVRRMEUxVjFYNFkwJlMwJkMxJkQyJUUyXFxLNStGQ0xBU1M9ME4xUzM3PTBcMDE1IiwgLyogd2Fr ZV9zdHIgKi8KKyNlbHNlCisjaWZkZWYgVk1TCisgICAgIkFUUTBYNFkwJlMxJUUyXFxLNStGQ0xB U1M9ME4xUzM3PTBcMDE1IiwgLyogd2FrZV9zdHIgKi8KKyNlbHNlCisgICAgIkFUUTBYNFkwJUUy XFxLNStGQ0xBU1M9ME4xUzM3PTBcMDE1IiwgLyogd2FrZV9zdHIgKi8KKyNlbmRpZiAvKiBWTVMg Ki8KKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAwLAkJCQkJLyogd2FrZV9yYXRlICovCisgICAgIk9L XDAxNSIsCQkJCS8qIHdha2VfcHJvbXB0ICovCisgICAgIiIsCQkJCQkvKiBkbW9kZV9zdHIgKi8K KyAgICAiIiwJCQkJCS8qIGRtb2RlX3Byb21wdCAqLworICAgICJBVEQlc1wwMTUiLAkJCS8qIGRp YWxfc3RyICovCisgICAgMCwJCQkJCS8qIGRpYWxfcmF0ZSAqLworICAgIDExMDAsCQkJCS8qIGVz Y190aW1lICovCisgICAgNDMsCQkJCQkvKiBlc2NfY2hhciAqLworICAgICJBVFEwSDBcMDE1IiwJ CQkvKiBodXBfc3RyICovCisgICAgIkFUJkszXDAxNSIsCQkJLyogaHdmY19zdHIgKi8KKyAgICAi QVQmSzRTMzI9MTdTMzM9MTlcMDE1IiwJCS8qIHN3ZmNfc3RyICovCisgICAgIkFUJkswXDAxNSIs CQkJLyogbm9mY19zdHIgKi8KKyAgICAiQVQmUTZcMDE1IiwJCQkvKiBlY19vbl9zdHIgKi8KKyAg ICAiQVQmUTBcMDE1IiwJCQkvKiBlY19vZmZfc3RyICovCisgICAgIkFUJUMxXDAxNSIsCQkJLyog ZGNfb25fc3RyICovCisgICAgIkFUJUMwXDAxNSIsCQkJLyogZGNfb2ZmX3N0ciAqLworICAgICJB VFMwPTFcMDE1IiwJCQkvKiBhYV9vbl9zdHIgKi8KKyAgICAiQVRTMD0wXDAxNSIsCQkJLyogYWFf b2ZmX3N0ciAqLworICAgICIiLAkJCQkJLyogc2Jfb25fc3RyICovCisgICAgIiIsCQkJCQkvKiBz Yl9vZmZfc3RyICovCisgICAgIkFUTTFcMDE1IiwJCQkJLyogc3Bfb25fc3RyICovCisgICAgIkFU TTBcMDE1IiwJCQkJLyogc3Bfb2ZmX3N0ciAqLworICAgICJBVEwxXDAxNSIsCQkJCS8qIHZvbDFf c3RyICovCisgICAgIkFUTDJcMDE1IiwJCQkJLyogdm9sMl9zdHIgKi8KKyAgICAiQVRMM1wwMTUi LAkJCQkvKiB2b2wzX3N0ciAqLworICAgICJBVFgzXDAxNSIsCQkJCS8qIGlnbm9yZWR0ICovCisg ICAgIiIsCQkJCQkvKiBpbmkyICovCisgICAgNTc2MDBMLAkJCQkvKiBtYXhfc3BlZWQgKi8KKyAg ICBDS0RfQVR8Q0tEX1NCfENLRF9FQ3xDS0RfREN8Q0tEX0hXfENLRF9TVywgLyogY2FwYXMgKi8K KyAgICBnZXRvawkJCQkvKiBva19mbiAqLworfTsKKworc3RhdGljCitNRE1JTkYgUldWMzJCID0J CQkJLyogR2VuZXJpYyBSb2Nrd2VsbCBWLjMyYmlzICovCisgICAgeworICAgICJHZW5lcmljIFJv Y2t3ZWxsIFYuMzJiaXMgbW9kZW0iLAkvKiBBVEkzLCBBVEk0LCBhbmQgQVRJNiBmb3IgZGV0YWls cyAqLworICAgICJBVFBcMDE1IiwJCQkJLyogcHVsc2UgY29tbWFuZCAqLworICAgICJBVFRcMDE1 IiwJCQkJLyogdG9uZSBjb21tYW5kICovCisgICAgMzUsCQkJCQkvKiBkaWFsX3RpbWUgKi8KKyAg ICAiLCIsCQkJCS8qIHBhdXNlX2NoYXJzICovCisgICAgMiwJCQkJCS8qIHBhdXNlX3RpbWUgKi8K KyNpZmRlZiBPUzIKKyAgICAiQVRRMEUxVjFYNFkwJlMwJkMxJkQyJUUyXFxLNStGQ0xBU1M9ME4x UzM3PTBcMDE1IiwgLyogd2FrZV9zdHIgKi8KKyNlbHNlCisjaWZkZWYgVk1TCisgICAgIkFUUTBY NFkwJlMxJUUyXFxLNStGQ0xBU1M9ME4xUzM3PTBcMDE1IiwgLyogd2FrZV9zdHIgKi8KKyNlbHNl CisgICAgIkFUUTBYNFkwJUUyXFxLNStGQ0xBU1M9ME4xUzM3PTBcMDE1IiwgLyogd2FrZV9zdHIg Ki8KKyNlbmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAwLAkJCQkJLyogd2Fr ZV9yYXRlICovCisgICAgIk9LXDAxNSIsCQkJCS8qIHdha2VfcHJvbXB0ICovCisgICAgIiIsCQkJ CQkvKiBkbW9kZV9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGRtb2RlX3Byb21wdCAqLworICAgICJB VEQlc1wwMTUiLAkJCS8qIGRpYWxfc3RyICovCisgICAgMCwJCQkJCS8qIGRpYWxfcmF0ZSAqLwor ICAgIDExMDAsCQkJCS8qIGVzY190aW1lICovCisgICAgNDMsCQkJCQkvKiBlc2NfY2hhciAqLwor ICAgICJBVFEwSDBcMDE1IiwJCQkvKiBodXBfc3RyICovCisgICAgIkFUJkszXDAxNSIsCQkJLyog aHdmY19zdHIgKi8KKyAgICAiQVQmSzRTMzI9MTdTMzM9MTlcMDE1IiwJCS8qIHN3ZmNfc3RyICov CisgICAgIkFUJkswXDAxNSIsCQkJLyogbm9mY19zdHIgKi8KKyAgICAiQVQmUTVcMDE1IiwJCQkv KiBlY19vbl9zdHIgKi8KKyAgICAiQVQmUTBcMDE1IiwJCQkvKiBlY19vZmZfc3RyICovCisgICAg IkFUUyVDMVwwMTUiLAkJCS8qIGRjX29uX3N0ciAqLworICAgICJBVFMlQzBcMDE1IiwJCQkvKiBk Y19vZmZfc3RyICovCisgICAgIkFUUzA9MVwwMTUiLAkJCS8qIGFhX29uX3N0ciAqLworICAgICJB VFMwPTBcMDE1IiwJCQkvKiBhYV9vZmZfc3RyICovCisgICAgIiIsCQkJCQkvKiBzYl9vbl9zdHIg Ki8KKyAgICAiIiwJCQkJCS8qIHNiX29mZl9zdHIgKi8KKyAgICAiQVRNMVwwMTUiLAkJCQkvKiBz cF9vbl9zdHIgKi8KKyAgICAiQVRNMFwwMTUiLAkJCQkvKiBzcF9vZmZfc3RyICovCisgICAgIkFU TDFcMDE1IiwJCQkJLyogdm9sMV9zdHIgKi8KKyAgICAiQVRMMlwwMTUiLAkJCQkvKiB2b2wyX3N0 ciAqLworICAgICJBVEwzXDAxNSIsCQkJCS8qIHZvbDNfc3RyICovCisgICAgIkFUWDNcMDE1IiwJ CQkJLyogaWdub3JlZHQgKi8KKyAgICAiIiwJCQkJCS8qIGluaTIgKi8KKyAgICA1NzYwMEwsCQkJ CS8qIG1heF9zcGVlZCAqLworICAgIENLRF9BVHxDS0RfU0J8Q0tEX0VDfENLRF9EQ3xDS0RfSFd8 Q0tEX1NXLCAvKiBjYXBhcyAqLworICAgIGdldG9rCQkJCS8qIG9rX2ZuICovCit9OworCitzdGF0 aWMKK01ETUlORiBSV1YzNCA9CQkJCS8qIEdlbmVyaWMgUm9ja3dlbGwgVi4zNCBEYXRhL0ZheCAq LworICAgIHsKKyAgICAiR2VuZXJpYyBSb2Nrd2VsbCBWLjM0IG1vZGVtIiwJLyogQVRJMywgQVRJ NCwgYW5kIEFUSTYgZm9yIGRldGFpbHMgKi8KKyAgICAiQVRQXDAxNSIsCQkJCS8qIHB1bHNlIGNv bW1hbmQgKi8KKyAgICAiQVRUXDAxNSIsCQkJCS8qIHRvbmUgY29tbWFuZCAqLworICAgIDM1LAkJ CQkJLyogZGlhbF90aW1lICovCisgICAgIiwiLAkJCQkvKiBwYXVzZV9jaGFycyAqLworICAgIDIs CQkJCQkvKiBwYXVzZV90aW1lICovCisjaWZkZWYgT1MyCisgICAgIkFUUTBWMVg0WTAmQzEmRDIm UzAlRTJcXEs1K0ZDTEFTUz0wXDAxNSIsIC8qIHdha2Vfc3RyICovCisjZWxzZQorI2lmZGVmIFZN UworICAgICJBVFEwVjFYNFkwJkMxJkQyJlMxJUUyXFxLNStGQ0xBU1M9MFwwMTUiLCAvKiB3YWtl X3N0ciAqLworI2Vsc2UKKyAgICAiQVRRMFYxWDRZMCZDMSZEMiVFMlxcSzUrRkNMQVNTPTBcMDE1 IiwgLyogd2FrZV9zdHIgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyAg ICAwLAkJCQkJLyogd2FrZV9yYXRlICovCisgICAgIk9LXDAxNSIsCQkJCS8qIHdha2VfcHJvbXB0 ICovCisgICAgIiIsCQkJCQkvKiBkbW9kZV9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGRtb2RlX3By b21wdCAqLworICAgICJBVEQlc1wwMTUiLAkJCS8qIGRpYWxfc3RyICovCisgICAgMCwJCQkJCS8q IGRpYWxfcmF0ZSAqLworICAgIDExMDAsCQkJCS8qIGVzY190aW1lICovCisgICAgNDMsCQkJCQkv KiBlc2NfY2hhciAqLworICAgICJBVFEwSDBcMDE1IiwJCQkvKiBodXBfc3RyICovCisgICAgIkFU JkszXDAxNSIsCQkJLyogaHdmY19zdHIgKi8KKyAgICAiQVQmSzRTMzI9MTdTMzM9MTlcMDE1IiwJ CS8qIHN3ZmNfc3RyICovCisgICAgIkFUJkswXDAxNSIsCQkJLyogbm9mY19zdHIgKi8KKyAgICAi QVQmUTVcMDE1IiwJCQkvKiBlY19vbl9zdHIgKi8KKyAgICAiQVQmUTBcMDE1IiwJCQkvKiBlY19v ZmZfc3RyICovCisgICAgIkFUUyVDM1wwMTUiLAkJCS8qIGRjX29uX3N0ciAqLworICAgICJBVFMl QzBcMDE1IiwJCQkvKiBkY19vZmZfc3RyICovCisgICAgIkFUUzA9MVwwMTUiLAkJCS8qIGFhX29u X3N0ciAqLworICAgICJBVFMwPTBcMDE1IiwJCQkvKiBhYV9vZmZfc3RyICovCisgICAgIiIsCQkJ CQkvKiBzYl9vbl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHNiX29mZl9zdHIgKi8KKyAgICAiQVRN MVwwMTUiLAkJCQkvKiBzcF9vbl9zdHIgKi8KKyAgICAiQVRNMFwwMTUiLAkJCQkvKiBzcF9vZmZf c3RyICovCisgICAgIkFUTDFcMDE1IiwJCQkJLyogdm9sMV9zdHIgKi8KKyAgICAiQVRMMlwwMTUi LAkJCQkvKiB2b2wyX3N0ciAqLworICAgICJBVEwzXDAxNSIsCQkJCS8qIHZvbDNfc3RyICovCisg ICAgIkFUWDNcMDE1IiwJCQkJLyogaWdub3JlZHQgKi8KKyAgICAiIiwJCQkJCS8qIGluaTIgKi8K KyAgICAxMTUyMDBMLAkJCQkvKiBtYXhfc3BlZWQgKi8KKyAgICBDS0RfQVR8Q0tEX1NCfENLRF9F Q3xDS0RfREN8Q0tEX0hXfENLRF9TVywgLyogY2FwYXMgKi8KKyAgICBnZXRvawkJCQkvKiBva19m biAqLworfTsKKworc3RhdGljCitNRE1JTkYgUldWOTAgPQkJCQkvKiBHZW5lcmljIFJvY2t3ZWxs IFYuOTAgRGF0YS9GYXggKi8KKyAgICB7CisgICAgIkdlbmVyaWMgUm9ja3dlbGwgVi45MCA1Nksg bW9kZW0iLAkvKiBBVEkzLCBBVEk0LCBhbmQgQVRJNiBmb3IgZGV0YWlscyAqLworICAgICJBVFBc MDE1IiwJCQkJLyogcHVsc2UgY29tbWFuZCAqLworICAgICJBVFRcMDE1IiwJCQkJLyogdG9uZSBj b21tYW5kICovCisgICAgMzUsCQkJCQkvKiBkaWFsX3RpbWUgKi8KKyAgICAiLCIsCQkJCS8qIHBh dXNlX2NoYXJzICovCisgICAgMiwJCQkJCS8qIHBhdXNlX3RpbWUgKi8KKyNpZmRlZiBPUzIKKyAg ICAiQVRRMFYxTjFYNFkwJkMxJkQyJlMwJUUyXFxLNStGQ0xBU1M9MFMzNz0wXDAxNSIsIC8qIEs5 NSAqLworI2Vsc2UKKyNpZmRlZiBWTVMKKyAgICAiQVRRMFYxTjFYNFkwJkMxJkQyJlMxJUUyXFxL NStGQ0xBU1M9MFMzNz0wXDAxNSIsIC8qIHdha2Vfc3RyICovCisjZWxzZQorICAgICJBVFEwVjFO MVg0WTAmQzEmRDIlRTJcXEs1K0ZDTEFTUz0wUzM3PTBcMDE1IiwgLyogd2FrZV9zdHIgKi8KKyNl bmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAwLAkJCQkJLyogd2FrZV9yYXRl ICovCisgICAgIk9LXDAxNSIsCQkJCS8qIHdha2VfcHJvbXB0ICovCisgICAgIiIsCQkJCQkvKiBk bW9kZV9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGRtb2RlX3Byb21wdCAqLworICAgICJBVEQlc1ww MTUiLAkJCS8qIGRpYWxfc3RyICovCisgICAgMCwJCQkJCS8qIGRpYWxfcmF0ZSAqLworICAgIDEx MDAsCQkJCS8qIGVzY190aW1lICovCisgICAgNDMsCQkJCQkvKiBlc2NfY2hhciAqLworICAgICJB VFEwSDBcMDE1IiwJCQkvKiBodXBfc3RyICovCisgICAgIkFUJkszXDAxNSIsCQkJLyogaHdmY19z dHIgKi8KKyAgICAiQVQmSzRTMzI9MTdTMzM9MTlcMDE1IiwJCS8qIHN3ZmNfc3RyICovCisgICAg IkFUJkswXDAxNSIsCQkJLyogbm9mY19zdHIgKi8KKyAgICAiQVQmUTVcMDE1IiwJCQkvKiBlY19v bl9zdHIgKi8KKyAgICAiQVQmUTBcMDE1IiwJCQkvKiBlY19vZmZfc3RyICovCisgICAgIkFUJUMz XDAxNSIsCQkJLyogZGNfb25fc3RyICovCisgICAgIkFUJUMwXDAxNSIsCQkJLyogZGNfb2ZmX3N0 ciAqLworICAgICJBVFMwPTFcMDE1IiwJCQkvKiBhYV9vbl9zdHIgKi8KKyAgICAiQVRTMD0wXDAx NSIsCQkJLyogYWFfb2ZmX3N0ciAqLworICAgICIiLAkJCQkJLyogc2Jfb25fc3RyICovCisgICAg IiIsCQkJCQkvKiBzYl9vZmZfc3RyICovCisgICAgIkFUTTFcMDE1IiwJCQkJLyogc3Bfb25fc3Ry ICovCisgICAgIkFUTTBcMDE1IiwJCQkJLyogc3Bfb2ZmX3N0ciAqLworICAgICJBVEwxXDAxNSIs CQkJCS8qIHZvbDFfc3RyICovCisgICAgIkFUTDJcMDE1IiwJCQkJLyogdm9sMl9zdHIgKi8KKyAg ICAiQVRMM1wwMTUiLAkJCQkvKiB2b2wzX3N0ciAqLworICAgICJBVFgzXDAxNSIsCQkJCS8qIGln bm9yZWR0ICovCisgICAgIiIsCQkJCQkvKiBpbmkyICovCisgICAgMTE1MjAwTCwJCQkJLyogbWF4 X3NwZWVkICovCisgICAgQ0tEX0FUfENLRF9TQnxDS0RfRUN8Q0tEX0RDfENLRF9IV3xDS0RfU1cs IC8qIGNhcGFzICovCisgICAgZ2V0b2sJCQkJLyogb2tfZm4gKi8KK307CisKK3N0YXRpYworTURN SU5GIE1XQVZFID0JCQkJLyogSUJNIE13YXZlICovCisgICAgeworICAgICJJQk0gTXdhdmUgQWRh cHRlciIsCisgICAgIkFUUFwwMTUiLAkJCQkvKiBwdWxzZSBjb21tYW5kICovCisgICAgIkFUVFww MTUiLAkJCQkvKiB0b25lIGNvbW1hbmQgKi8KKyAgICAzNSwJCQkJCS8qIGRpYWxfdGltZSAqLwor ICAgICIsIiwJCQkJLyogcGF1c2VfY2hhcnMgKi8KKyAgICAyLAkJCQkJLyogcGF1c2VfdGltZSAq LworI2lmZGVmIE9TMgorICAgICJBVFEwRTFWMVg0WTAmUzAmQzEmRDImTTAmUTAmTjFcXEszXFxU MCVFMlMyOD0wXDAxNSIsIC8qIHdha2Vfc3RyICovCisjZWxzZQorI2lmZGVmIFZNUworICAgICJB VFEwWDRZMCZNMCZTMSZRMCZOMSZTMFxcSzNcXFQwJUUyUzI4PTBcMDE1IiwgLyogd2FrZV9zdHIg Ki8KKyNlbHNlCisgICAgIkFUUTBYNFkwJk0wJlEwJk4xJlMwXFxLM1xcVDAlRTJTMjg9MFwwMTUi LCAvKiB3YWtlX3N0ciAqLworI2VuZGlmIC8qIFZNUyAqLworI2VuZGlmIC8qIE9TMiAqLworICAg IDAsCQkJCQkvKiB3YWtlX3JhdGUgKi8KKyAgICAiT0tcMDE1IiwJCQkJLyogd2FrZV9wcm9tcHQg Ki8KKyAgICAiIiwJCQkJCS8qIGRtb2RlX3N0ciAqLworICAgICIiLAkJCQkJLyogZG1vZGVfcHJv bXB0ICovCisgICAgIkFURCVzXDAxNSIsCQkJLyogZGlhbF9zdHIgKi8KKyAgICAwLAkJCQkJLyog ZGlhbF9yYXRlICovCisgICAgMTEwMCwJCQkJLyogZXNjX3RpbWUgKi8KKyAgICA0MywJCQkJCS8q IGVzY19jaGFyICovCisgICAgIkFUUTBIMFwwMTUiLAkJCS8qIGh1cF9zdHIgKi8KKyAgICAiQVRc XFEzXDAxNSIsCQkJLyogaHdmY19zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHN3ZmNfc3RyIChpdCBk b2Vzbid0ISkgKi8KKyAgICAiQVRcXFEwXDAxNSIsCQkJLyogbm9mY19zdHIgKi8KKyAgICAiQVRc XE43XDAxNSIsCQkJLyogZWNfb25fc3RyICovCisgICAgIkFUXFxOMFwwMTUiLAkJCS8qIGVjX29m Zl9zdHIgKi8KKyAgICAiQVQlQzFcIkgzXDAxNSIsCQkJLyogZGNfb25fc3RyICovCisgICAgIkFU JUMwXCJIMFwwMTUiLAkJCS8qIGRjX29mZl9zdHIgKi8KKyAgICAiQVRTMD0xXDAxNSIsCQkJLyog YWFfb25fc3RyICovCisgICAgIkFUUzA9MFwwMTUiLAkJCS8qIGFhX29mZl9zdHIgKi8KKyAgICAi IiwJCQkJCS8qIHNiX29uX3N0ciAqLworICAgICIiLAkJCQkJLyogc2Jfb2ZmX3N0ciAqLworICAg ICJBVE0xXDAxNSIsCQkJCS8qIHNwX29uX3N0ciAqLworICAgICJBVE0wXDAxNSIsCQkJCS8qIHNw X29mZl9zdHIgKi8KKyAgICAiQVRMMVwwMTUiLAkJCQkvKiB2b2wxX3N0ciAqLworICAgICJBVEwy XDAxNSIsCQkJCS8qIHZvbDJfc3RyICovCisgICAgIkFUTDNcMDE1IiwJCQkJLyogdm9sM19zdHIg Ki8KKyAgICAiQVRYM1wwMTUiLAkJCQkvKiBpZ25vcmVkdCAqLworICAgICIiLAkJCQkJLyogaW5p MiAqLworICAgIDU3NjAwTCwJCQkJLyogbWF4X3NwZWVkICovCisgICAgQ0tEX0FUfENLRF9TQnxD S0RfRUN8Q0tEX0RDfENLRF9IVywgLyogY2FwYXMgKi8KKyAgICBnZXRvawkJCQkvKiBva19mbiAq LworfTsKKworc3RhdGljCitNRE1JTkYgVEVMRVBBVEggPQkJCS8qIEdhdGV3YXkgMjAwMCBUZWxl cGF0aCAqLworICAgIHsKKyAgICAiR2F0ZXdheSAyMDAwIFRlbGVwYXRoIElJIDI4LjgiLAorICAg ICJBVFBcMDE1IiwJCQkJLyogcHVsc2UgY29tbWFuZCAqLworICAgICJBVFRcMDE1IiwJCQkJLyog dG9uZSBjb21tYW5kICovCisgICAgMzUsCQkJCQkvKiBkaWFsX3RpbWUgKi8KKyAgICAiLCIsCQkJ CS8qIHBhdXNlX2NoYXJzICovCisgICAgMiwJCQkJCS8qIHBhdXNlX3RpbWUgKi8KKyNpZmRlZiBP UzIKKyAgICAiQVRRMEUxVjFYNCZTMCZDMSZEMiZOMCZZMiNDTFM9MFMxMz0wUzE1PTBTMTk9MFww MTUiLCAvKiB3YWtlX3N0ciAqLworI2Vsc2UKKyNpZmRlZiBWTVMKKyAgICAiQVRRMFg0Jk4wJlMx JlkxI0NMUz0wUzEzPTBTMTU9MFMxOT0wXDAxNSIsIC8qIHdha2Vfc3RyICovCisjZWxzZQorICAg ICJBVFEwWDQmTjAmWTEjQ0xTPTBTMTM9MFMxNT0wUzE5PTBcMDE1IiwgLyogd2FrZV9zdHIgKi8K KyNlbmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAwLAkJCQkJLyogd2FrZV9y YXRlICovCisgICAgIk9LXDAxNSIsCQkJCS8qIHdha2VfcHJvbXB0ICovCisgICAgIiIsCQkJCQkv KiBkbW9kZV9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGRtb2RlX3Byb21wdCAqLworICAgICJBVEQl c1wwMTUiLAkJCS8qIGRpYWxfc3RyICovCisgICAgMCwJCQkJCS8qIGRpYWxfcmF0ZSAqLworICAg IDExMDAsCQkJCS8qIGVzY190aW1lICovCisgICAgNDMsCQkJCQkvKiBlc2NfY2hhciAqLworICAg ICJBVFEwSDBcMDE1IiwJCQkvKiBodXBfc3RyICovCisgICAgIkFUJkgxJlIyXDAxNSIsCQkJLyog aHdmY19zdHIgKi8KKyAgICAiQVQmSDImSTJTMjI9MTdTMjM9MTlcMDE1IiwJCS8qIHN3ZmNfc3Ry ICovCisgICAgIkFUJkgwJkkwJlIxXDAxNSIsCQkJLyogbm9mY19zdHIgKi8KKyAgICAiQVQmTTQm QjFcMDE1IiwJCQkvKiBlY19vbl9zdHIgLS0gYWxzbyBmaXhlcyBzcGVlZCAqLworICAgICJBVCZN MFwwMTUiLAkJCS8qIGVjX29mZl9zdHIgKi8KKyAgICAiQVQmSzFcMDE1IiwJCQkvKiBkY19vbl9z dHIgKi8KKyAgICAiQVQmSzBcMDE1IiwJCQkvKiBkY19vZmZfc3RyICovCisgICAgIkFUUzA9MVww MTUiLAkJCS8qIGFhX29uX3N0ciAqLworICAgICJBVFMwPTBcMDE1IiwJCQkvKiBhYV9vZmZfc3Ry ICovCisgICAgIiIsCQkJCQkvKiBzYl9vbl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHNiX29mZl9z dHIgKi8KKyAgICAiQVRNMVwwMTUiLAkJCQkvKiBzcF9vbl9zdHIgKi8KKyAgICAiQVRNMFwwMTUi LAkJCQkvKiBzcF9vZmZfc3RyICovCisgICAgIkFUTDFcMDE1IiwJCQkJLyogdm9sMV9zdHIgKi8K KyAgICAiQVRMMlwwMTUiLAkJCQkvKiB2b2wyX3N0ciAqLworICAgICJBVEwzXDAxNSIsCQkJCS8q IHZvbDNfc3RyICovCisgICAgIkFUWDNcMDE1IiwJCQkJLyogaWdub3JlZHQgKi8KKyAgICAiIiwJ CQkJCS8qIGluaTIgKi8KKyAgICA1NzYwMEwsCQkJCS8qIG1heF9zcGVlZCAqLworICAgIENLRF9B VHxDS0RfU0J8Q0tEX0VDfENLRF9EQ3xDS0RfSFd8Q0tEX1NXLCAvKiBjYXBhcyAqLworICAgIGdl dG9rCQkJCS8qIG9rX2ZuICovCit9OworCitzdGF0aWMKK01ETUlORiBDQVJESU5BTCA9CQkJLyog Q2FyZGluYWwgLSBiYXNlZCBvbiBSb2Nrd2VsbCBWLjM0ICovCisgICAgeworICAgICJDYXJkaW5h bCBNVlAyODhYIFNlcmllcyIsCQkvKiBBVEkzLCBBVEk0LCBhbmQgQVRJNiBmb3IgZGV0YWlscyAq LworICAgICJBVFBcMDE1IiwJCQkJLyogcHVsc2UgY29tbWFuZCAqLworICAgICJBVFRcMDE1IiwJ CQkJLyogdG9uZSBjb21tYW5kICovCisgICAgMzUsCQkJCQkvKiBkaWFsX3RpbWUgKi8KKyAgICAi LCIsCQkJCS8qIHBhdXNlX2NoYXJzICovCisgICAgMiwJCQkJCS8qIHBhdXNlX3RpbWUgKi8KKyNp ZmRlZiBPUzIKKyAgICAiQVRRMEUxVjFYNFcxWTAlRTImUzAmQzEmRDJcXEs1K0ZDTEFTUz0wK01T PTExLDFcMDE1IiwgLyogd2FrZV9zdHIgKi8KKyNlbHNlCisjaWZkZWYgVk1TCisgICAgIkFUUTBY NFcxWTAmUzElRTJcXEs1K0ZDTEFTUz0wK01TPTExLDFcMDE1IiwgLyogd2FrZV9zdHIgKi8KKyNl bHNlCisgICAgIkFUUTBYNFcxWTAlRTJcXEs1K0ZDTEFTUz0wK01TPTExLDFcMDE1IiwgLyogd2Fr ZV9zdHIgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAwLAkJCQkJ Lyogd2FrZV9yYXRlICovCisgICAgIk9LXDAxNSIsCQkJCS8qIHdha2VfcHJvbXB0ICovCisgICAg IiIsCQkJCQkvKiBkbW9kZV9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGRtb2RlX3Byb21wdCAqLwor ICAgICJBVEQlc1wwMTUiLAkJCS8qIGRpYWxfc3RyICovCisgICAgMCwJCQkJCS8qIGRpYWxfcmF0 ZSAqLworICAgIDExMDAsCQkJCS8qIGVzY190aW1lICovCisgICAgNDMsCQkJCQkvKiBlc2NfY2hh ciAqLworICAgICJBVFEwSDBcMDE1IiwJCQkvKiBodXBfc3RyICovCisgICAgIkFUJkszXDAxNSIs CQkJLyogaHdmY19zdHIgKi8KKyAgICAiQVQmSzRTMzI9MTdTMzM9MTlcMDE1IiwJCS8qIHN3ZmNf c3RyICovCisgICAgIkFUJkswXDAxNSIsCQkJLyogbm9mY19zdHIgKi8KKyAgICAiQVQmUTVTMzY9 N1M0OD03XFxOM1wwMTUiLAkJLyogZWNfb25fc3RyICovCisgICAgIkFUJlEwUzQ4PTEyOFxcTjFc MDE1IiwJCS8qIGVjX29mZl9zdHIgKi8KKyAgICAiQVRTNDY9MTM4JUMxXDAxNSIsCQkJLyogZGNf b25fc3RyICovCisgICAgIkFUUzQ2PTEzNiVDMFwwMTUiLAkJCS8qIGRjX29mZl9zdHIgKi8KKyAg ICAiQVRTMD0xXDAxNSIsCQkJLyogYWFfb25fc3RyICovCisgICAgIkFUUzA9MFwwMTUiLAkJCS8q IGFhX29mZl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHNiX29uX3N0ciAqLworICAgICIiLAkJCQkJ Lyogc2Jfb2ZmX3N0ciAqLworICAgICJBVE0xXDAxNSIsCQkJCS8qIHNwX29uX3N0ciAqLworICAg ICJBVE0wXDAxNSIsCQkJCS8qIHNwX29mZl9zdHIgKi8KKyAgICAiQVRMMVwwMTUiLAkJCQkvKiB2 b2wxX3N0ciAqLworICAgICJBVEwyXDAxNSIsCQkJCS8qIHZvbDJfc3RyICovCisgICAgIkFUTDNc MDE1IiwJCQkJLyogdm9sM19zdHIgKi8KKyAgICAiQVRYM1wwMTUiLAkJCQkvKiBpZ25vcmVkdCAq LworICAgICIiLAkJCQkJLyogaW5pMiAqLworICAgIDExNTIwMEwsCQkJCS8qIG1heF9zcGVlZCAq LworICAgIENLRF9BVHxDS0RfU0J8Q0tEX0VDfENLRF9EQ3xDS0RfSFd8Q0tEX1NXLCAvKiBjYXBh cyAqLworICAgIGdldG9rCQkJCS8qIG9rX2ZuICovCit9OworCitzdGF0aWMKK01ETUlORiBMVUNF TlQgPQkJCQkvKiBMdWNlbnQgVmVudXMgb3IgRGF0YS9GYXggbW9kZW0gKi8KKyAgICB7CisgICAg Ikx1Y2VudCBWZW51cyBjaGlwc2V0IiwKKyAgICAiQVRQXDAxNSIsCQkJCS8qIHB1bHNlIGNvbW1h bmQgKi8KKyAgICAiQVRUXDAxNSIsCQkJCS8qIHRvbmUgY29tbWFuZCAqLworICAgIDM1LAkJCQkJ LyogZGlhbF90aW1lICovCisgICAgIiwiLAkJCQkvKiBwYXVzZV9jaGFycyAqLworICAgIDIsCQkJ CQkvKiBwYXVzZV90aW1lICovCisjaWZkZWYgT1MyCisgICAgIkFUUTBWMU4xWDRZMCZDMSZEMiZT MCVFMlxcSzUrRkNMQVNTPTBTMzc9MFwwMTUiLCAvKiBLOTUgKi8KKyNlbHNlCisjaWZkZWYgVk1T CisgICAgIkFUUTBWMU4xWDRZMCZDMSZEMiZTMSVFMlxcSzUrRkNMQVNTPTBTMzc9MFwwMTUiLCAv KiBWTVMgKi8KKyNlbHNlCisgICAgIkFUUTBWMU4xWDRZMCZDMSZEMiVFMlxcSzUrRkNMQVNTPTBT Mzc9MFwwMTUiLCAvKiBBbGwgb3RoZXJzICovCisjZW5kaWYgLyogVk1TICovCisjZW5kaWYgLyog T1MyICovCisgICAgMCwJCQkJCS8qIHdha2VfcmF0ZSAqLworICAgICJPS1wwMTUiLAkJCQkvKiB3 YWtlX3Byb21wdCAqLworICAgICIiLAkJCQkJLyogZG1vZGVfc3RyICovCisgICAgIiIsCQkJCQkv KiBkbW9kZV9wcm9tcHQgKi8KKyAgICAiQVREJXNcMDE1IiwJCQkvKiBkaWFsX3N0ciAqLworICAg IDAsCQkJCQkvKiBkaWFsX3JhdGUgKi8KKyAgICAxMTAwLAkJCQkvKiBlc2NfdGltZSAqLworICAg IDQzLAkJCQkJLyogZXNjX2NoYXIgKi8KKyAgICAiQVRRMEgwXDAxNSIsCQkJLyogaHVwX3N0ciAq LworICAgICJBVCZLM1wwMTUiLAkJCS8qIGh3ZmNfc3RyICovCisgICAgIkFUJks0UzMyPTE3UzMz PTE5XDAxNSIsCQkvKiBzd2ZjX3N0ciAqLworICAgICJBVCZLMFwwMTUiLAkJCS8qIG5vZmNfc3Ry ICovCisgICAgIkFUJlE1XDAxNSIsCQkJLyogZWNfb25fc3RyICovCisgICAgIkFUJlEwXDAxNSIs CQkJLyogZWNfb2ZmX3N0ciAqLworICAgICJBVCVDMVwwMTUiLAkJCS8qIGRjX29uX3N0ciAqLwor ICAgICJBVCVDMFwwMTUiLAkJCS8qIGRjX29mZl9zdHIgKi8KKyAgICAiQVRTMD0xXDAxNSIsCQkJ LyogYWFfb25fc3RyICovCisgICAgIkFUUzA9MFwwMTUiLAkJCS8qIGFhX29mZl9zdHIgKi8KKyAg ICAiIiwJCQkJCS8qIHNiX29uX3N0ciAqLworICAgICIiLAkJCQkJLyogc2Jfb2ZmX3N0ciAqLwor ICAgICJBVE0xXDAxNSIsCQkJCS8qIHNwX29uX3N0ciAqLworICAgICJBVE0wXDAxNSIsCQkJCS8q IHNwX29mZl9zdHIgKi8KKyAgICAiQVRMMVwwMTUiLAkJCQkvKiB2b2wxX3N0ciAqLworICAgICJB VEwyXDAxNSIsCQkJCS8qIHZvbDJfc3RyICovCisgICAgIkFUTDNcMDE1IiwJCQkJLyogdm9sM19z dHIgKi8KKyAgICAiQVRYM1wwMTUiLAkJCQkvKiBpZ25vcmVkdCAqLworICAgICIiLAkJCQkJLyog aW5pMiAqLworICAgIDExNTIwMEwsCQkJCS8qIG1heF9zcGVlZCAqLworICAgIENLRF9BVHxDS0Rf U0J8Q0tEX0VDfENLRF9EQ3xDS0RfSFd8Q0tEX1NXLCAvKiBjYXBhcyAqLworICAgIGdldG9rCQkJ CS8qIG9rX2ZuICovCit9OworCitzdGF0aWMKK01ETUlORiBDT05FWEFOVCA9CQkJLyogQ29uZXhh bnQgZmFtaWx5ICovCisgICAgeworICAgICJDb25leGFudCBmYW1pbHkgb2YgbW9kZW1zIiwKKyAg ICAiQVRQXDAxNSIsCQkJCS8qIHB1bHNlIGNvbW1hbmQgKi8KKyAgICAiQVRUXDAxNSIsCQkJCS8q IHRvbmUgY29tbWFuZCAqLworICAgIDM1LAkJCQkJLyogZGlhbF90aW1lICovCisgICAgIiwiLAkJ CQkvKiBwYXVzZV9jaGFycyAqLworICAgIDIsCQkJCQkvKiBwYXVzZV90aW1lICovCisjaWZkZWYg T1MyCisgICAgIkFUUTBWMVg0JkMxJkQyJlMwJUUxK0ZDTEFTUz0wXDAxNSIsIC8qIEs5NSAqLwor I2Vsc2UKKyNpZmRlZiBWTVMKKyAgICAiQVRRMFYxWDQmQzEmRDImUzElRTErRkNMQVNTPTBcMDE1 IiwgLyogVk1TICovCisjZWxzZQorICAgICJBVFEwVjFYNCZDMSZEMiVFMStGQ0xBU1M9MFwwMTUi LCAvKiBVTklYIGV0YyAqLworI2VuZGlmIC8qIFZNUyAqLworI2VuZGlmIC8qIE9TMiAqLworICAg IDAsCQkJCQkvKiB3YWtlX3JhdGUgKi8KKyAgICAiT0tcMDE1IiwJCQkJLyogd2FrZV9wcm9tcHQg Ki8KKyAgICAiIiwJCQkJCS8qIGRtb2RlX3N0ciAqLworICAgICIiLAkJCQkJLyogZG1vZGVfcHJv bXB0ICovCisgICAgIkFURCVzXDAxNSIsCQkJLyogZGlhbF9zdHIgKi8KKyAgICAwLAkJCQkJLyog ZGlhbF9yYXRlICovCisgICAgMTEwMCwJCQkJLyogZXNjX3RpbWUgKi8KKyAgICA0MywJCQkJCS8q IGVzY19jaGFyICovCisgICAgIkFUUTBIMFwwMTUiLAkJCS8qIGh1cF9zdHIgKi8KKyAgICAiQVQm SzNcMDE1IiwJCQkvKiBod2ZjX3N0ciAqLworICAgICJBVCZLNFMzMj0xN1MzMz0xOVwwMTUiLAkJ Lyogc3dmY19zdHIgKi8KKyAgICAiQVQmSzBcMDE1IiwJCQkvKiBub2ZjX3N0ciAqLworICAgICJB VCZRNVwwMTUiLAkJCS8qIGVjX29uX3N0ciAqLworICAgICJBVCZRMFwwMTUiLAkJCS8qIGVjX29m Zl9zdHIgKi8KKyAgICAiQVQlQzNcMDE1IiwJCQkvKiBkY19vbl9zdHIgKi8KKyAgICAiQVQlQzBc MDE1IiwJCQkvKiBkY19vZmZfc3RyICovCisgICAgIkFUUzA9MVwwMTUiLAkJCS8qIGFhX29uX3N0 ciAqLworICAgICJBVFMwPTBcMDE1IiwJCQkvKiBhYV9vZmZfc3RyICovCisgICAgIiIsCQkJCQkv KiBzYl9vbl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHNiX29mZl9zdHIgKi8KKyAgICAiQVRNMVww MTUiLAkJCQkvKiBzcF9vbl9zdHIgKi8KKyAgICAiQVRNMFwwMTUiLAkJCQkvKiBzcF9vZmZfc3Ry ICovCisgICAgIkFUTDFcMDE1IiwJCQkJLyogdm9sMV9zdHIgKi8KKyAgICAiQVRMMlwwMTUiLAkJ CQkvKiB2b2wyX3N0ciAqLworICAgICJBVEwzXDAxNSIsCQkJCS8qIHZvbDNfc3RyICovCisgICAg IkFUWDNcMDE1IiwJCQkJLyogaWdub3JlZHQgKi8KKyAgICAiIiwJCQkJCS8qIGluaTIgKi8KKyAg ICAxMTUyMDBMLAkJCQkvKiBtYXhfc3BlZWQgKi8KKyAgICBDS0RfQVR8Q0tEX1NCfENLRF9FQ3xD S0RfREN8Q0tEX0hXfENLRF9TVywgLyogY2FwYXMgKi8KKyAgICBnZXRvawkJCQkvKiBva19mbiAq LworfTsKKworc3RhdGljCitNRE1JTkYgUENURUwgPQkJCQkvKiBQQ1RlbCBjaGlwc2V0ICovCisg ICAgeworICAgICJQQ1RlbCBjaGlwc2V0IiwKKyAgICAiQVRQXDAxNSIsCQkJCS8qIHB1bHNlIGNv bW1hbmQgKi8KKyAgICAiQVRUXDAxNSIsCQkJCS8qIHRvbmUgY29tbWFuZCAqLworICAgIDM1LAkJ CQkJLyogZGlhbF90aW1lICovCisgICAgIiwiLAkJCQkvKiBwYXVzZV9jaGFycyAqLworICAgIDIs CQkJCQkvKiBwYXVzZV90aW1lICovCisjaWZkZWYgT1MyCisgICAgIkFUUTBWMU4xWDRZMCZDMSZE MiZTMCVFMlxcSzVTMzc9MFwwMTUiLCAvKiBLOTUgKi8KKyNlbHNlCisjaWZkZWYgVk1TCisgICAg IkFUUTBWMU4xWDRZMCZDMSZEMiZTMSVFMlxcSzVTMzc9MFwwMTUiLCAvKiBWTVMgKi8KKyNlbHNl CisgICAgIkFUUTBWMU4xWDRZMCZDMSZEMiVFMlxcSzVTMzc9MFwwMTUiLCAvKiBVTklYIGV0YyAq LworI2VuZGlmIC8qIFZNUyAqLworI2VuZGlmIC8qIE9TMiAqLworICAgIDAsCQkJCQkvKiB3YWtl X3JhdGUgKi8KKyAgICAiT0tcMDE1IiwJCQkJLyogd2FrZV9wcm9tcHQgKi8KKyAgICAiIiwJCQkJ CS8qIGRtb2RlX3N0ciAqLworICAgICIiLAkJCQkJLyogZG1vZGVfcHJvbXB0ICovCisgICAgIkFU RCVzXDAxNSIsCQkJLyogZGlhbF9zdHIgKi8KKyAgICAwLAkJCQkJLyogZGlhbF9yYXRlICovCisg ICAgMTEwMCwJCQkJLyogZXNjX3RpbWUgKi8KKyAgICA0MywJCQkJCS8qIGVzY19jaGFyICovCisg ICAgIkFUUTBIMFwwMTUiLAkJCS8qIGh1cF9zdHIgKi8KKyAgICAiQVQmSzNcMDE1IiwJCQkvKiBo d2ZjX3N0ciAqLworICAgICJBVCZLNFMzMj0xN1MzMz0xOVwwMTUiLAkJLyogc3dmY19zdHIgKi8K KyAgICAiQVQmSzBcMDE1IiwJCQkvKiBub2ZjX3N0ciAqLworICAgICJBVFxcTjNcMDE1IiwJCQkv KiBlY19vbl9zdHIgKi8KKyAgICAiQVRcXE4wXDAxNSIsCQkJLyogZWNfb2ZmX3N0ciAqLworICAg ICJBVCVDMVwwMTUiLAkJCS8qIGRjX29uX3N0ciAqLworICAgICJBVCVDMFwwMTUiLAkJCS8qIGRj X29mZl9zdHIgKi8KKyAgICAiQVRTMD0xXDAxNSIsCQkJLyogYWFfb25fc3RyICovCisgICAgIkFU UzA9MFwwMTUiLAkJCS8qIGFhX29mZl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHNiX29uX3N0ciAq LworICAgICIiLAkJCQkJLyogc2Jfb2ZmX3N0ciAqLworICAgICJBVE0xXDAxNSIsCQkJCS8qIHNw X29uX3N0ciAqLworICAgICJBVE0wXDAxNSIsCQkJCS8qIHNwX29mZl9zdHIgKi8KKyAgICAiQVRM MVwwMTUiLAkJCQkvKiB2b2wxX3N0ciAqLworICAgICJBVEwyXDAxNSIsCQkJCS8qIHZvbDJfc3Ry ICovCisgICAgIkFUTDNcMDE1IiwJCQkJLyogdm9sM19zdHIgKi8KKyAgICAiQVRYM1wwMTUiLAkJ CQkvKiBpZ25vcmVkdCAqLworICAgICIiLAkJCQkJLyogaW5pMiAqLworICAgIDExNTIwMEwsCQkJ CS8qIG1heF9zcGVlZCAqLworICAgIENLRF9BVHxDS0RfU0J8Q0tEX0VDfENLRF9EQ3xDS0RfSFd8 Q0tEX1NXLCAvKiBjYXBhcyAqLworICAgIGdldG9rCQkJCS8qIG9rX2ZuICovCit9OworCitzdGF0 aWMKK01ETUlORiBaT09NVjM0ID0JCQkvKiBab29tIFRlbGVwaG9uaWNzIFYuMzQgICovCisgICAg eworICAgICJab29tIFRlbGVwaG9uaWNzIFYuMzQiLAorICAgICJBVFBcMDE1IiwJCQkJLyogcHVs c2UgY29tbWFuZCAqLworICAgICJBVFRcMDE1IiwJCQkJLyogdG9uZSBjb21tYW5kICovCisgICAg MzUsCQkJCQkvKiBkaWFsX3RpbWUgKi8KKyAgICAiLCIsCQkJCS8qIHBhdXNlX2NoYXJzICovCisg ICAgMiwJCQkJCS8qIHBhdXNlX3RpbWUgKi8KKyNpZmRlZiBPUzIKKyAgICAiQVRRMFYxTjFXMVg0 JlMwJkMxJkQyUzgyPTEyOFwwMTUiLCAvKiB3YWtlX3N0ciAqLworI2Vsc2UKKyNpZmRlZiBWTVMK KyAgICAiQVRRMFYxTjFXMVg0JlMxUzgyPTEyOFwwMTUiLAkvKiB3YWtlX3N0ciAqLworI2Vsc2UK KyAgICAiQVRRMFYxTjFXMVg0UzgyPTEyOFMwMTUiLAkJLyogd2FrZV9zdHIgKi8KKyNlbmRpZiAv KiBWTVMgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAwLAkJCQkJLyogd2FrZV9yYXRlICovCisg ICAgIk9LXDAxNSIsCQkJCS8qIHdha2VfcHJvbXB0ICovCisgICAgIiIsCQkJCQkvKiBkbW9kZV9z dHIgKi8KKyAgICAiIiwJCQkJCS8qIGRtb2RlX3Byb21wdCAqLworICAgICJBVEQlc1wwMTUiLAkJ CS8qIGRpYWxfc3RyICovCisgICAgMCwJCQkJCS8qIGRpYWxfcmF0ZSAqLworICAgIDExMDAsCQkJ CS8qIGVzY190aW1lICovCisgICAgNDMsCQkJCQkvKiBlc2NfY2hhciAqLworICAgICJBVFEwSDBc MDE1IiwJCQkvKiBodXBfc3RyICovCisgICAgIkFUJkszXDAxNSIsCQkJLyogaHdmY19zdHIgKi8K KyAgICAiQVQmSzRcMDE1UzMyPTE3UzMzPTE5IiwJCS8qIHN3ZmNfc3RyICovCisgICAgIkFUJksw XDAxNSIsCQkJLyogbm9mY19zdHIgKi8KKyAgICAiQVQmUTVcMDE1IiwJCQkvKiBlY19vbl9zdHIg Ki8KKyAgICAiQVQmUTBcMDE1IiwJCQkvKiBlY19vZmZfc3RyICovCisgICAgIkFUUyVDM1wwMTUi LAkJCS8qIGRjX29uX3N0ciAqLworICAgICJBVFMlQzBcMDE1IiwJCQkvKiBkY19vZmZfc3RyICov CisgICAgIkFUUzA9MVwwMTUiLAkJCS8qIGFhX29uX3N0ciAqLworICAgICJBVFMwPTBcMDE1IiwJ CQkvKiBhYV9vZmZfc3RyICovCisgICAgIiIsCQkJCQkvKiBzYl9vbl9zdHIgKi8KKyAgICAiIiwJ CQkJCS8qIHNiX29mZl9zdHIgKi8KKyAgICAiQVRNMVwwMTUiLAkJCQkvKiBzcF9vbl9zdHIgKi8K KyAgICAiQVRNMFwwMTUiLAkJCQkvKiBzcF9vZmZfc3RyICovCisgICAgIkFUTDFcMDE1IiwJCQkJ Lyogdm9sMV9zdHIgKi8KKyAgICAiQVRMMlwwMTUiLAkJCQkvKiB2b2wyX3N0ciAqLworICAgICJB VEwzXDAxNSIsCQkJCS8qIHZvbDNfc3RyICovCisgICAgIkFUWDNcMDE1IiwJCQkJLyogaWdub3Jl ZHQgKi8KKyAgICAiIiwJCQkJCS8qIGluaTIgKi8KKyAgICA1NzYwMEwsCQkJCS8qIG1heF9zcGVl ZCAqLworICAgIENLRF9BVHxDS0RfU0J8Q0tEX0VDfENLRF9EQ3xDS0RfSFd8Q0tEX1NXLCAvKiBj YXBhcyAqLworICAgIGdldG9rCQkJCS8qIG9rX2ZuICovCit9OworCitzdGF0aWMKK01ETUlORiBa T09NVjkwID0JCQkvKiBaT09NIFYuOTAgKi8KKyAgICB7CisgICAgIlpvb20gVi45MCA1NksiLAor ICAgICJBVFBcMDE1IiwJCQkJLyogcHVsc2UgY29tbWFuZCAqLworICAgICJBVFRcMDE1IiwJCQkJ LyogdG9uZSBjb21tYW5kICovCisgICAgMzUsCQkJCQkvKiBkaWFsX3RpbWUgKi8KKyAgICAiLCIs CQkJCS8qIHBhdXNlX2NoYXJzICovCisgICAgMiwJCQkJCS8qIHBhdXNlX3RpbWUgKi8KKyNpZmRl ZiBPUzIKKyAgICAiQVRRMFYxTjFYNFkwJkMxJkQyJlMwJUUyXFxLNStGQ0xBU1M9MFMzNz0wXDAx NSIsIC8qIEs5NSAqLworI2Vsc2UKKyNpZmRlZiBWTVMKKyAgICAiQVRRMFYxTjFYNFkwJkMxJkQy JlMxJUUyXFxLNStGQ0xBU1M9MFMzNz0wXDAxNSIsIC8qIFZNUyAqLworI2Vsc2UKKyAgICAiQVRR MFYxTjFYNFkwJkMxJkQyJUUyXFxLNStGQ0xBU1M9MFMzNz0wXDAxNSIsIC8qIEFsbCBvdGhlcnMg Ki8KKyNlbmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAwLAkJCQkJLyogd2Fr ZV9yYXRlICovCisgICAgIk9LXDAxNSIsCQkJCS8qIHdha2VfcHJvbXB0ICovCisgICAgIiIsCQkJ CQkvKiBkbW9kZV9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGRtb2RlX3Byb21wdCAqLworICAgICJB VEQlc1wwMTUiLAkJCS8qIGRpYWxfc3RyICovCisgICAgMCwJCQkJCS8qIGRpYWxfcmF0ZSAqLwor ICAgIDExMDAsCQkJCS8qIGVzY190aW1lICovCisgICAgNDMsCQkJCQkvKiBlc2NfY2hhciAqLwor ICAgICJBVFEwSDBcMDE1IiwJCQkvKiBodXBfc3RyICovCisgICAgIkFUJkszXDAxNSIsCQkJLyog aHdmY19zdHIgKi8KKyAgICAiQVQmSzRTMzI9MTdTMzM9MTlcMDE1IiwJCS8qIHN3ZmNfc3RyICov CisgICAgIkFUJkswXDAxNSIsCQkJLyogbm9mY19zdHIgKi8KKyAgICAiQVQmUTVcMDE1IiwJCQkv KiBlY19vbl9zdHIgKi8KKyAgICAiQVQmUTBcMDE1IiwJCQkvKiBlY19vZmZfc3RyICovCisgICAg IkFUJUMxXDAxNSIsCQkJLyogZGNfb25fc3RyICovCisgICAgIkFUJUMwXDAxNSIsCQkJLyogZGNf b2ZmX3N0ciAqLworICAgICJBVFMwPTFcMDE1IiwJCQkvKiBhYV9vbl9zdHIgKi8KKyAgICAiQVRT MD0wXDAxNSIsCQkJLyogYWFfb2ZmX3N0ciAqLworICAgICIiLAkJCQkJLyogc2Jfb25fc3RyICov CisgICAgIiIsCQkJCQkvKiBzYl9vZmZfc3RyICovCisgICAgIkFUTTFcMDE1IiwJCQkJLyogc3Bf b25fc3RyICovCisgICAgIkFUTTBcMDE1IiwJCQkJLyogc3Bfb2ZmX3N0ciAqLworICAgICJBVEwx XDAxNSIsCQkJCS8qIHZvbDFfc3RyICovCisgICAgIkFUTDJcMDE1IiwJCQkJLyogdm9sMl9zdHIg Ki8KKyAgICAiQVRMM1wwMTUiLAkJCQkvKiB2b2wzX3N0ciAqLworICAgICJBVFgzXDAxNSIsCQkJ CS8qIGlnbm9yZWR0ICovCisgICAgIiIsCQkJCQkvKiBpbmkyICovCisgICAgMTE1MjAwTCwJCQkJ LyogbWF4X3NwZWVkICovCisgICAgQ0tEX0FUfENLRF9TQnxDS0RfRUN8Q0tEX0RDfENLRF9IV3xD S0RfU1csIC8qIGNhcGFzICovCisgICAgZ2V0b2sJCQkJLyogb2tfZm4gKi8KK307CisKK3N0YXRp YworTURNSU5GIFpPT01WOTIgPQkJCS8qIFpPT00gVi45MiAqLworICAgIHsKKyAgICAiWm9vbSBW LjkyIHdpdGggVi40NCBjb21wcmVzc2lvbiIsCisgICAgIkFUUFwwMTUiLAkJCQkvKiBwdWxzZSBj b21tYW5kICovCisgICAgIkFUVFwwMTUiLAkJCQkvKiB0b25lIGNvbW1hbmQgKi8KKyAgICAzNSwJ CQkJCS8qIGRpYWxfdGltZSAqLworICAgICIsIiwJCQkJLyogcGF1c2VfY2hhcnMgKi8KKyAgICAy LAkJCQkJLyogcGF1c2VfdGltZSAqLworI2lmZGVmIE9TMgorICAgICJBVFEwVjFOMVg0WTAmQzEm RDImUzAlRTJcXEs1K0ZDTEFTUz0wUzM3PTArTVM9VjkyXDAxNSIsIC8qIEs5NSAqLworI2Vsc2UK KyNpZmRlZiBWTVMKKyAgICAiQVRRMFYxTjFYNFkwJkMxJkQyJlMxJUUyXFxLNStGQ0xBU1M9MFMz Nz0wK01TPVY5MlwwMTUiLCAvKiBWTVMgKi8KKyNlbHNlCisgICAgIkFUUTBWMU4xWDRZMCZDMSZE MiVFMlxcSzUrRkNMQVNTPTBTMzc9MCtNUz1WOTJcMDE1IiwgLyogQWxsIG90aGVycyAqLworI2Vu ZGlmIC8qIFZNUyAqLworI2VuZGlmIC8qIE9TMiAqLworICAgIDAsCQkJCQkvKiB3YWtlX3JhdGUg Ki8KKyAgICAiT0tcMDE1IiwJCQkJLyogd2FrZV9wcm9tcHQgKi8KKyAgICAiIiwJCQkJCS8qIGRt b2RlX3N0ciAqLworICAgICIiLAkJCQkJLyogZG1vZGVfcHJvbXB0ICovCisgICAgIkFURCVzXDAx NSIsCQkJLyogZGlhbF9zdHIgKi8KKyAgICAwLAkJCQkJLyogZGlhbF9yYXRlICovCisgICAgMTEw MCwJCQkJLyogZXNjX3RpbWUgKi8KKyAgICA0MywJCQkJCS8qIGVzY19jaGFyICovCisgICAgIkFU UTBIMFwwMTUiLAkJCS8qIGh1cF9zdHIgKi8KKyAgICAiQVQmSzNcMDE1IiwJCQkvKiBod2ZjX3N0 ciAqLworICAgICJBVCZLNFMzMj0xN1MzMz0xOVwwMTUiLAkJLyogc3dmY19zdHIgKi8KKyAgICAi QVQmSzBcMDE1IiwJCQkvKiBub2ZjX3N0ciAqLworICAgICJBVCZRNVwwMTUiLAkJCS8qIGVjX29u X3N0ciAqLworICAgICJBVCZRMFwwMTUiLAkJCS8qIGVjX29mZl9zdHIgKi8KKyAgICAiQVQlQzEr RENTPTEsMVwwMTUiLAkJLyogZGNfb25fc3RyICovCisgICAgIkFUJUMwXDAxNSIsCQkJLyogZGNf b2ZmX3N0ciAqLworICAgICJBVFMwPTFcMDE1IiwJCQkvKiBhYV9vbl9zdHIgKi8KKyAgICAiQVRT MD0wXDAxNSIsCQkJLyogYWFfb2ZmX3N0ciAqLworICAgICIiLAkJCQkJLyogc2Jfb25fc3RyICov CisgICAgIiIsCQkJCQkvKiBzYl9vZmZfc3RyICovCisgICAgIkFUTTFcMDE1IiwJCQkJLyogc3Bf b25fc3RyICovCisgICAgIkFUTTBcMDE1IiwJCQkJLyogc3Bfb2ZmX3N0ciAqLworICAgICJBVEwx XDAxNSIsCQkJCS8qIHZvbDFfc3RyICovCisgICAgIkFUTDJcMDE1IiwJCQkJLyogdm9sMl9zdHIg Ki8KKyAgICAiQVRMM1wwMTUiLAkJCQkvKiB2b2wzX3N0ciAqLworICAgICJBVFgzXDAxNSIsCQkJ CS8qIGlnbm9yZWR0ICovCisgICAgIiIsCQkJCQkvKiBpbmkyICovCisgICAgMTE1MjAwTCwJCQkJ LyogbWF4X3NwZWVkICovCisgICAgQ0tEX0FUfENLRF9TQnxDS0RfRUN8Q0tEX0RDfENLRF9IV3xD S0RfU1csIC8qIGNhcGFzICovCisgICAgZ2V0b2sJCQkJLyogb2tfZm4gKi8KK307CisKKworLyoK KyAgTm93IHRoZSAib2xkIiBtb2RlbXMsIGFsbCBncm91cGVkIHRvZ2V0aGVyLCBhbmQgYWxzbyB3 aXRoaW4KKyAgImlmIG5vdCBkZWZpbmVkIE1JTklESUFMIi4uLgorKi8KKyNpZmRlZiBPTERNT0RF TVMKKworc3RhdGljCitNRE1JTkYgQ0VSTUVURUsgPQkvKiBJbmZvcm1hdGlvbiBmb3IgIkNlcm1l dGVrIEluZm8tTWF0ZSAyMTIgQSIgbW9kZW0gKi8KKyAgICB7CisgICAgIkNlcm1ldGVrIEluZm8t TWF0ZSAyMTIgQSIsCisgICAgIiIsCQkJCQkvKiBwdWxzZSBjb21tYW5kICovCisgICAgIiIsCQkJ CQkvKiB0b25lIGNvbW1hbmQgKi8KKyAgICAyMCwJCQkJCS8qIGRpYWxfdGltZSAqLworICAgICJC YlBwVHQiLAkJCQkvKiBwYXVzZV9jaGFycyAqLworICAgIDAsCQkJCQkvKiBwYXVzZV90aW1lICov CisgICAgIiAgWFlcMDE2UlwwMTUiLAkJCS8qIHdha2Vfc3RyICovCisgICAgMjAwLAkJCQkvKiB3 YWtlX3JhdGUgKi8KKyAgICAiIiwJCQkJCS8qIHdha2VfcHJvbXB0ICovCisgICAgIiIsCQkJCQkv KiBkbW9kZV9zdHIgKi8KKyAgICBOVUxMLAkJCQkvKiBkbW9kZV9wcm9tcHQgKi8KKyAgICAiXDAx NkQgJyVzJ1wwMTUiLAkJCS8qIGRpYWxfc3RyICovCisgICAgMjAwLAkJCQkvKiBkaWFsX3JhdGUg Ki8KKyAgICAwLAkJCQkJLyogZXNjX3RpbWUgKi8KKyAgICAwLAkJCQkJLyogZXNjX2NoYXIgKi8K KyAgICAiIiwJCQkJCS8qIGh1cF9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGh3ZmNfc3RyICovCisg ICAgIiIsCQkJCQkvKiBzd2ZjX3N0ciAqLworICAgICIiLAkJCQkJLyogbm9mY19zdHIgKi8KKyAg ICAiIiwJCQkJCS8qIGVjX29uX3N0ciAqLworICAgICIiLAkJCQkJLyogZWNfb2ZmX3N0ciAqLwor ICAgICIiLAkJCQkJLyogZGNfb25fc3RyICovCisgICAgIiIsCQkJCQkvKiBkY19vZmZfc3RyICov CisgICAgIiIsCQkJCQkvKiBhYV9vbl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGFhX29mZl9zdHIg Ki8KKyAgICAiIiwJCQkJCS8qIHNiX29uX3N0ciAqLworICAgICIiLAkJCQkJLyogc2Jfb2ZmX3N0 ciAqLworICAgICIiLAkJCQkJLyogc3Bfb2ZmX3N0ciAqLworICAgICIiLAkJCQkJLyogc3Bfb25f c3RyICovCisgICAgIiIsCQkJCQkvKiB2b2wxX3N0ciAqLworICAgICIiLAkJCQkJLyogdm9sMl9z dHIgKi8KKyAgICAiIiwJCQkJCS8qIHZvbDNfc3RyICovCisgICAgIiIsCQkJCQkvKiBpZ25vcmVk dCAqLworICAgICIiLAkJCQkJLyogaW5pMiAqLworICAgIDEyMDBMLAkJCQkvKiBtYXhfc3BlZWQg Ki8KKyAgICAwLAkJCQkJLyogY2FwYXMgKi8KKyAgICBOVUxMCQkJCS8qIG9rX2ZuICovCit9Owor CitzdGF0aWMKK01ETUlORiBERjAzID0JCS8qIGluZm9ybWF0aW9uIGZvciAiREVDIERGMDMtQUMi IG1vZGVtICovCisgICAgeworICAgICJEaWdpdGFsIERGMDMtQUMiLAorICAgICIiLAkJCQkJLyog cHVsc2UgY29tbWFuZCAqLworICAgICIiLAkJCQkJLyogdG9uZSBjb21tYW5kICovCisgICAgMjcs CQkJCQkvKiBkaWFsX3RpbWUgKi8KKyAgICAiPSIsCQkJCS8qIHBhdXNlX2NoYXJzICovCisgICAg MTUsCQkJCQkvKiBwYXVzZV90aW1lICovCisgICAgIlwwMDFcMDAyIiwJCQkJLyogd2FrZV9zdHIg Ki8KKyAgICAwLAkJCQkJLyogd2FrZV9yYXRlICovCisgICAgIiIsCQkJCQkvKiB3YWtlX3Byb21w dCAqLworICAgICIiLAkJCQkJLyogZG1vZGVfc3RyICovCisgICAgTlVMTCwJCQkJLyogZG1vZGVf cHJvbXB0ICovCisgICAgIiVzIiwJCQkJLyogZGlhbF9zdHIgKi8KKyAgICAwLAkJCQkJLyogZGlh bF9yYXRlICovCisgICAgMCwJCQkJCS8qIGVzY190aW1lICovCisgICAgMCwJCQkJCS8qIGVzY19j aGFyICovCisgICAgIiIsCQkJCQkvKiBodXBfc3RyICovCisgICAgIiIsCQkJCQkvKiBod2ZjX3N0 ciAqLworICAgICIiLAkJCQkJLyogc3dmY19zdHIgKi8KKyAgICAiIiwJCQkJCS8qIG5vZmNfc3Ry ICovCisgICAgIiIsCQkJCQkvKiBlY19vbl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGVjX29mZl9z dHIgKi8KKyAgICAiIiwJCQkJCS8qIGRjX29uX3N0ciAqLworICAgICIiLAkJCQkJLyogZGNfb2Zm X3N0ciAqLworICAgICIiLAkJCQkJLyogYWFfb25fc3RyICovCisgICAgIiIsCQkJCQkvKiBhYV9v ZmZfc3RyICovCisgICAgIiIsCQkJCQkvKiBzYl9vbl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHNi X29mZl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHNwX29mZl9zdHIgKi8KKyAgICAiIiwJCQkJCS8q IHNwX29uX3N0ciAqLworICAgICIiLAkJCQkJLyogdm9sMV9zdHIgKi8KKyAgICAiIiwJCQkJCS8q IHZvbDJfc3RyICovCisgICAgIiIsCQkJCQkvKiB2b2wzX3N0ciAqLworICAgICIiLAkJCQkJLyog aWdub3JlZHQgKi8KKyAgICAiIiwJCQkJCS8qIGluaTIgKi8KKyAgICAwTCwJCQkJCS8qIG1heF9z cGVlZCAqLworICAgIDAsCQkJCQkvKiBjYXBhcyAqLworICAgIE5VTEwJCQkJLyogb2tfZm4gKi8K K307CisKK3N0YXRpYworTURNSU5GIERGMTAwID0JCS8qIGluZm9ybWF0aW9uIGZvciAiREVDIERG MTAwLXNlcmllcyIgbW9kZW0gKi8KKwkJCS8qCisJCQkgKiBUaGUgdGVsZXBob25lICJudW1iZXIi IGNhbiBpbmNsdWRlICJQInMgYW5kL29yICJUInMKKwkJCSAqIHdpdGhpbiBpdCB0byBpbmRpY2F0 ZSB0aGF0IHN1YnNlcXVlbnQgZGlnaXRzIGFyZQorCQkJICogdG8gYmUgZGlhbGVkIHVzaW5nIHB1 bHNlIG9yIHRvbmUgZGlhbGluZy4gIFRoZQorCQkJICogbW9kZW0gZGVmYXVsdHMgdG8gcHVsc2Ug ZGlhbGluZy4gIFlvdSBtYXkgbW9kaWZ5CisJCQkgKiB0aGUgZGlhbCBzdHJpbmcgYmVsb3cgdG8g ZXhwbGljaXRseSBkZWZhdWx0IGFsbAorCQkJICogZGlhbGluZyB0byBwdWxzZSBvciB0b25lLCBi dXQgZG9pbmcgc28gcHJldmVudHMKKwkJCSAqIHRoZSB1c2Ugb2YgcGhvbmUgbnVtYmVycyB0aGF0 IHlvdSBtYXkgaGF2ZSBzdG9yZWQKKwkJCSAqIGluIHRoZSBtb2RlbSdzIG1lbW9yeS4KKwkJCSAq LworICAgIHsKKyAgICAiRGlnaXRhbCBERi0xMDAiLAorICAgICIiLAkJCQkJLyogcHVsc2UgY29t bWFuZCAqLworICAgICIiLAkJCQkJLyogdG9uZSBjb21tYW5kICovCisgICAgMzAsCQkJCQkvKiBk aWFsX3RpbWUgKi8KKyAgICAiPSIsCQkJCS8qIHBhdXNlX2NoYXJzICovCisgICAgMTUsCQkJCQkv KiBwYXVzZV90aW1lICovCisgICAgIlwwMDEiLAkJCQkvKiB3YWtlX3N0ciAqLworICAgIDAsCQkJ CQkvKiB3YWtlX3JhdGUgKi8KKyAgICAiIiwJCQkJCS8qIHdha2VfcHJvbXB0ICovCisgICAgIiIs CQkJCQkvKiBkbW9kZV9zdHIgKi8KKyAgICBOVUxMLAkJCQkvKiBkbW9kZV9wcm9tcHQgKi8KKyAg ICAiJXMjIiwJCQkJLyogZGlhbF9zdHIgKi8KKyAgICAwLAkJCQkJLyogZGlhbF9yYXRlICovCisg ICAgMCwJCQkJCS8qIGVzY190aW1lICovCisgICAgMCwJCQkJCS8qIGVzY19jaGFyICovCisgICAg IiIsCQkJCQkvKiBodXBfc3RyICovCisgICAgIiIsCQkJCQkvKiBod2ZjX3N0ciAqLworICAgICIi LAkJCQkJLyogc3dmY19zdHIgKi8KKyAgICAiIiwJCQkJCS8qIG5vZmNfc3RyICovCisgICAgIiIs CQkJCQkvKiBlY19vbl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGVjX29mZl9zdHIgKi8KKyAgICAi IiwJCQkJCS8qIGRjX29uX3N0ciAqLworICAgICIiLAkJCQkJLyogZGNfb2ZmX3N0ciAqLworICAg ICIiLAkJCQkJLyogYWFfb25fc3RyICovCisgICAgIiIsCQkJCQkvKiBhYV9vZmZfc3RyICovCisg ICAgIiIsCQkJCQkvKiBzYl9vbl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHNiX29mZl9zdHIgKi8K KyAgICAiIiwJCQkJCS8qIHNwX29mZl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHNwX29uX3N0ciAq LworICAgICIiLAkJCQkJLyogdm9sMV9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHZvbDJfc3RyICov CisgICAgIiIsCQkJCQkvKiB2b2wzX3N0ciAqLworICAgICIiLAkJCQkJLyogaWdub3JlZHQgKi8K KyAgICAiIiwJCQkJCS8qIGluaTIgKi8KKyAgICAwTCwJCQkJCS8qIG1heF9zcGVlZCAqLworICAg IDAsCQkJCQkvKiBjYXBhcyAqLworICAgIE5VTEwJCQkJLyogb2tfZm4gKi8KK307CisKK3N0YXRp YworTURNSU5GIERGMjAwID0JCS8qIGluZm9ybWF0aW9uIGZvciAiREVDIERGMjAwLXNlcmllcyIg bW9kZW0gKi8KKwkJCS8qCisJCQkgKiBUaGUgdGVsZXBob25lICJudW1iZXIiIGNhbiBpbmNsdWRl ICJQInMgYW5kL29yICJUInMKKwkJCSAqIHdpdGhpbiBpdCB0byBpbmRpY2F0ZSB0aGF0IHN1YnNl cXVlbnQgZGlnaXRzIGFyZQorCQkJICogdG8gYmUgZGlhbGVkIHVzaW5nIHB1bHNlIG9yIHRvbmUg ZGlhbGluZy4gIFRoZQorCQkJICogbW9kZW0gZGVmYXVsdHMgdG8gcHVsc2UgZGlhbGluZy4gIFlv dSBtYXkgbW9kaWZ5CisJCQkgKiB0aGUgZGlhbCBzdHJpbmcgYmVsb3cgdG8gZXhwbGljaXRseSBk ZWZhdWx0IGFsbAorCQkJICogZGlhbGluZyB0byBwdWxzZSBvciB0b25lLCBidXQgZG9pbmcgc28g cHJldmVudHMKKwkJCSAqIHRoZSB1c2Ugb2YgcGhvbmUgbnVtYmVycyB0aGF0IHlvdSBtYXkgaGF2 ZSBzdG9yZWQKKwkJCSAqIGluIHRoZSBtb2RlbSdzIG1lbW9yeS4KKwkJCSAqLworICAgIHsKKyAg ICAiRGlnaXRhbCBERi0yMDAiLAorICAgICIiLAkJCS8qIHB1bHNlIGNvbW1hbmQgKi8KKyAgICAi IiwJCQkvKiB0b25lIGNvbW1hbmQgKi8KKyAgICAzMCwJCQkvKiBkaWFsX3RpbWUgKi8KKyAgICAi PVciLAkJLyogcGF1c2VfY2hhcnMgKi8JLyogPTogc2Vjb25kIHRvbmU7IFc6IDUgc2VjcyAqLwor ICAgIDE1LAkJCS8qIHBhdXNlX3RpbWUgKi8JLyogd29yc3QgY2FzZSAqLworICAgICJcMDAyIiwJ CS8qIHdha2Vfc3RyICovCQkvKiBhbGxvdyBzdG9yZWQgbnVtYmVyIHVzYWdlICovCisgICAgMCwJ CQkvKiB3YWtlX3JhdGUgKi8KKyAgICAiIiwJCQkvKiB3YWtlX3Byb21wdCAqLworICAgICIiLAkJ CS8qIGRtb2RlX3N0ciAqLworICAgIE5VTEwsCQkvKiBkbW9kZV9wcm9tcHQgKi8KKyNpZmRlZiBD T01NRU5UCisgICAgIiVzISIsCQkvKiBkaWFsX3N0ciAqLworI2Vsc2UKKyAgICAiICAgZCAlc1ww MTUiLAorI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAwLAkJCQkJLyogZGlhbF9yYXRlICovCisg ICAgMCwJCQkJCS8qIGVzY190aW1lICovCisgICAgMCwJCQkJCS8qIGVzY19jaGFyICovCisgICAg IiIsCQkJCQkvKiBodXBfc3RyICovCisgICAgIiIsCQkJCQkvKiBod2ZjX3N0ciAqLworICAgICIi LAkJCQkJLyogc3dmY19zdHIgKi8KKyAgICAiIiwJCQkJCS8qIG5vZmNfc3RyICovCisgICAgIiIs CQkJCQkvKiBlY19vbl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGVjX29mZl9zdHIgKi8KKyAgICAi IiwJCQkJCS8qIGRjX29uX3N0ciAqLworICAgICIiLAkJCQkJLyogZGNfb2ZmX3N0ciAqLworICAg ICIiLAkJCQkJLyogYWFfb25fc3RyICovCisgICAgIiIsCQkJCQkvKiBhYV9vZmZfc3RyICovCisg ICAgIiIsCQkJCQkvKiBzYl9vbl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHNiX29mZl9zdHIgKi8K KyAgICAiIiwJCQkJCS8qIHNwX29mZl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHNwX29uX3N0ciAq LworICAgICIiLAkJCQkJLyogdm9sMV9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHZvbDJfc3RyICov CisgICAgIiIsCQkJCQkvKiB2b2wzX3N0ciAqLworICAgICIiLAkJCQkJLyogaWdub3JlZHQgKi8K KyAgICAiIiwJCQkJCS8qIGluaTIgKi8KKyAgICAwTCwJCQkJCS8qIG1heF9zcGVlZCAqLworICAg IDAsCQkJCQkvKiBjYXBhcyAqLworICAgIE5VTEwJCQkJLyogb2tfZm4gKi8KK307CisKK3N0YXRp YworTURNSU5GIEdEQyA9CQkvKiBpbmZvcm1hdGlvbiBmb3IgIkdlbmVyYWxEYXRhQ29tbSAyMTJB L0VEIiBtb2RlbSAqLworICAgIHsKKyAgICAiR2VuZXJhbERhdGFDb21tIDIxMkEvRUQiLAorICAg ICIiLAkJCQkJLyogcHVsc2UgY29tbWFuZCAqLworICAgICIiLAkJCQkJLyogdG9uZSBjb21tYW5k ICovCisgICAgMzIsCQkJCQkvKiBkaWFsX3RpbWUgKi8KKyAgICAiJSIsCQkJCS8qIHBhdXNlX2No YXJzICovCisgICAgMywJCQkJCS8qIHBhdXNlX3RpbWUgKi8KKyAgICAiXDAxNVwwMTUiLAkJCQkv KiB3YWtlX3N0ciAqLworICAgIDUwMCwJCQkJLyogd2FrZV9yYXRlICovCisgICAgIiQiLAkJCQkv KiB3YWtlX3Byb21wdCAqLworICAgICJEXDAxNSIsCQkJCS8qIGRtb2RlX3N0ciAqLworICAgICI6 IiwJCQkJLyogZG1vZGVfcHJvbXB0ICovCisgICAgIlQlc1wwMTUiLAkJCQkvKiBkaWFsX3N0ciAq LworICAgIDAsCQkJCQkvKiBkaWFsX3JhdGUgKi8KKyAgICAwLAkJCQkJLyogZXNjX3RpbWUgKi8K KyAgICAwLAkJCQkJLyogZXNjX2NoYXIgKi8KKyAgICAiIiwJCQkJCS8qIGh1cF9zdHIgKi8KKyAg ICAiIiwJCQkJCS8qIGh3ZmNfc3RyICovCisgICAgIiIsCQkJCQkvKiBzd2ZjX3N0ciAqLworICAg ICIiLAkJCQkJLyogbm9mY19zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGVjX29uX3N0ciAqLworICAg ICIiLAkJCQkJLyogZWNfb2ZmX3N0ciAqLworICAgICIiLAkJCQkJLyogZGNfb25fc3RyICovCisg ICAgIiIsCQkJCQkvKiBkY19vZmZfc3RyICovCisgICAgIiIsCQkJCQkvKiBhYV9vbl9zdHIgKi8K KyAgICAiIiwJCQkJCS8qIGFhX29mZl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHNiX29uX3N0ciAq LworICAgICIiLAkJCQkJLyogc2Jfb2ZmX3N0ciAqLworICAgICIiLAkJCQkJLyogc3Bfb2ZmX3N0 ciAqLworICAgICIiLAkJCQkJLyogc3Bfb25fc3RyICovCisgICAgIiIsCQkJCQkvKiB2b2wxX3N0 ciAqLworICAgICIiLAkJCQkJLyogdm9sMl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHZvbDNfc3Ry ICovCisgICAgIiIsCQkJCQkvKiBpZ25vcmVkdCAqLworICAgICIiLAkJCQkJLyogaW5pMiAqLwor ICAgIDEyMDBMLAkJCQkvKiBtYXhfc3BlZWQgKi8KKyAgICAwLAkJCQkJLyogY2FwYXMgKi8KKyAg ICBOVUxMCQkJCS8qIG9rX2ZuICovCit9OworCitzdGF0aWMKK01ETUlORiBQRU5SSUwgPQkJLyog aW5mb3JtYXRpb24gZm9yICJQZW5yaWwiIG1vZGVtICovCisgICAgeworICAgICJQZW5yaWwgbW9k ZW0iLAorICAgICIiLAkJCQkJLyogcHVsc2UgY29tbWFuZCAqLworICAgICIiLAkJCQkJLyogdG9u ZSBjb21tYW5kICovCisgICAgNTAsCQkJCQkvKiBkaWFsX3RpbWUgKi8KKyAgICAiIiwJCQkJCS8q IHBhdXNlX2NoYXJzICovCisgICAgMCwJCQkJCS8qIHBhdXNlX3RpbWUgKi8KKyAgICAiXDAxNVww MTUiLAkJCQkvKiB3YWtlX3N0ciAqLworICAgIDMwMCwJCQkJLyogd2FrZV9yYXRlICovCisgICAg Ij4iLAkJCQkvKiB3YWtlX3Byb21wdCAqLworICAgICJrXDAxNSIsCQkJCS8qIGRtb2RlX3N0ciAq LworICAgICI6IiwJCQkJLyogZG1vZGVfcHJvbXB0ICovCisgICAgIiVzXDAxNSIsCQkJCS8qIGRp YWxfc3RyICovCisgICAgMCwJCQkJCS8qIGRpYWxfcmF0ZSAqLworICAgIDAsCQkJCQkvKiBlc2Nf dGltZSAqLworICAgIDAsCQkJCQkvKiBlc2NfY2hhciAqLworICAgICIiLAkJCQkJLyogaHVwX3N0 ciAqLworICAgICIiLAkJCQkJLyogaHdmY19zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHN3ZmNfc3Ry ICovCisgICAgIiIsCQkJCQkvKiBub2ZjX3N0ciAqLworICAgICIiLAkJCQkJLyogZWNfb25fc3Ry ICovCisgICAgIiIsCQkJCQkvKiBlY19vZmZfc3RyICovCisgICAgIiIsCQkJCQkvKiBkY19vbl9z dHIgKi8KKyAgICAiIiwJCQkJCS8qIGRjX29mZl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGFhX29u X3N0ciAqLworICAgICIiLAkJCQkJLyogYWFfb2ZmX3N0ciAqLworICAgICIiLAkJCQkJLyogc2Jf b25fc3RyICovCisgICAgIiIsCQkJCQkvKiBzYl9vZmZfc3RyICovCisgICAgIiIsCQkJCQkvKiBz cF9vZmZfc3RyICovCisgICAgIiIsCQkJCQkvKiBzcF9vbl9zdHIgKi8KKyAgICAiIiwJCQkJCS8q IHZvbDFfc3RyICovCisgICAgIiIsCQkJCQkvKiB2b2wyX3N0ciAqLworICAgICIiLAkJCQkJLyog dm9sM19zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGlnbm9yZWR0ICovCisgICAgIiIsCQkJCQkvKiBp bmkyICovCisgICAgMEwsCQkJCQkvKiBtYXhfc3BlZWQgKi8KKyAgICAwLAkJCQkJLyogY2FwYXMg Ki8KKyAgICBOVUxMCQkJCS8qIG9rX2ZuICovCit9OworCitzdGF0aWMKK01ETUlORiBSQUNBTCA9 CQkJCS8qIFJhY2FsIFZhZGljIFZBNDQ5MkUgKi8KKyAgICB7CisgICAgIlJhY2FsIFZhZGljIFZB NDQ5MkUiLAorICAgICIiLAkJCQkJLyogcHVsc2UgY29tbWFuZCAqLworICAgICIiLAkJCQkJLyog dG9uZSBjb21tYW5kICovCisgICAgMzUsCQkJLyogZGlhbF90aW1lIChtYW51YWwgc2F5cyBtb2Rl bSBpcyBoYXJkd2lyZWQgdG8gNjApICovCisgICAgIktrIiwJCQkJLyogcGF1c2VfY2hhcnMgKi8K KyAgICA1LAkJCQkJLyogcGF1c2VfdGltZSAqLworICAgICJcMDA1XDAxNSIsCQkJCS8qIHdha2Vf c3RyLCBeRV5NICovCisgICAgNTAsCQkJCQkvKiB3YWtlX3JhdGUgKi8KKyAgICAiKiIsCQkJCS8q IHdha2VfcHJvbXB0ICovCisgICAgIkRcMDE1IiwJCQkJLyogZG1vZGVfc3RyICovCisgICAgIj8i LAkJCQkvKiBkbW9kZV9wcm9tcHQgKi8KKyAgICAiJXNcMDE1IiwJCQkJLyogZGlhbF9zdHIgKi8K KyAgICAwLAkJCQkJLyogZGlhbF9yYXRlICovCisgICAgMTEwMCwJCQkJLyogZXNjX3RpbWUgKi8K KyAgICA1LAkJCQkJLyogZXNjX2NoYXIsIF5FICovCisgICAgIlwwMDNcMDA0IiwJCQkJLyogaHVw X3N0ciwgXkNeRCAqLworICAgIDAsCQkJCQkvKiBod2ZjX3N0ciAqLworICAgICIiLAkJCQkJLyog c3dmY19zdHIgKi8KKyAgICAiIiwJCQkJCS8qIG5vZmNfc3RyICovCisgICAgIiIsCQkJCQkvKiBl Y19vbl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGVjX29mZl9zdHIgKi8KKyAgICAiIiwJCQkJCS8q IGRjX29uX3N0ciAqLworICAgICIiLAkJCQkJLyogZGNfb2ZmX3N0ciAqLworICAgICIiLAkJCQkJ LyogYWFfb25fc3RyICovCisgICAgIiIsCQkJCQkvKiBhYV9vZmZfc3RyICovCisgICAgIiIsCQkJ CQkvKiBzYl9vbl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHNiX29mZl9zdHIgKi8KKyAgICAiIiwJ CQkJCS8qIHNwX29mZl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHNwX29uX3N0ciAqLworICAgICIi LAkJCQkJLyogdm9sMV9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHZvbDJfc3RyICovCisgICAgIiIs CQkJCQkvKiB2b2wzX3N0ciAqLworICAgICIiLAkJCQkJLyogaWdub3JlZHQgKi8KKyAgICAiIiwJ CQkJCS8qIGluaTIgKi8KKyAgICAwTCwJCQkJCS8qIG1heF9zcGVlZCAqLworICAgIDAsCQkJCQkv KiBjYXBhcyAqLworICAgIE5VTEwJCQkJLyogb2tfZm4gKi8KK307CisKK3N0YXRpYworTURNSU5G IFZFTlRFTCA9CQkJCS8qIEluZm9ybWF0aW9uIGZvciBWZW4tVGVsIG1vZGVtICovCisgICAgewor ICAgICJWZW4tVGVsIiwKKyAgICAiIiwJCQkJCS8qIHB1bHNlIGNvbW1hbmQgKi8KKyAgICAiIiwJ CQkJCS8qIHRvbmUgY29tbWFuZCAqLworICAgIDIwLAkJCQkJLyogZGlhbF90aW1lICovCisgICAg IiUiLAkJCQkvKiBwYXVzZV9jaGFycyAqLworICAgIDUsCQkJCQkvKiBwYXVzZV90aW1lICovCisg ICAgIlwwMTVcMDE1XDAxNSIsCQkJLyogd2FrZV9zdHIgKi8KKyAgICAzMDAsCQkJCS8qIHdha2Vf cmF0ZSAqLworICAgICIkIiwJCQkJLyogd2FrZV9wcm9tcHQgKi8KKyAgICAiS1wwMTUiLAkJCQkv KiBkbW9kZV9zdHIgKHdhcyAiIikgKi8KKyAgICAiTnVtYmVyIHRvIGNhbGw6ICIsCQkJLyogZG1v ZGVfcHJvbXB0ICh3YXMgTlVMTCkgKi8KKyAgICAiJXNcMDE1IiwJCQkJLyogZGlhbF9zdHIgKHdh cyAiPEslc1xyPiIpICovCisgICAgMCwJCQkJCS8qIGRpYWxfcmF0ZSAqLworICAgIDAsCQkJCQkv KiBlc2NfdGltZSAqLworICAgIDAsCQkJCQkvKiBlc2NfY2hhciAqLworICAgICIiLAkJCQkJLyog aHVwX3N0ciAqLworICAgICIiLAkJCQkJLyogaHdmY19zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHN3 ZmNfc3RyICovCisgICAgIiIsCQkJCQkvKiBub2ZjX3N0ciAqLworICAgICIiLAkJCQkJLyogZWNf b25fc3RyICovCisgICAgIiIsCQkJCQkvKiBlY19vZmZfc3RyICovCisgICAgIiIsCQkJCQkvKiBk Y19vbl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGRjX29mZl9zdHIgKi8KKyAgICAiIiwJCQkJCS8q IGFhX29uX3N0ciAqLworICAgICIiLAkJCQkJLyogYWFfb2ZmX3N0ciAqLworICAgICIiLAkJCQkJ Lyogc2Jfb25fc3RyICovCisgICAgIiIsCQkJCQkvKiBzYl9vZmZfc3RyICovCisgICAgIiIsCQkJ CQkvKiBzcF9vZmZfc3RyICovCisgICAgIiIsCQkJCQkvKiBzcF9vbl9zdHIgKi8KKyAgICAiIiwJ CQkJCS8qIHZvbDFfc3RyICovCisgICAgIiIsCQkJCQkvKiB2b2wyX3N0ciAqLworICAgICIiLAkJ CQkJLyogdm9sM19zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGlnbm9yZWR0ICovCisgICAgIiIsCQkJ CQkvKiBpbmkyICovCisgICAgMEwsCQkJCQkvKiBtYXhfc3BlZWQgKi8KKyAgICAwLAkJCQkJLyog Y2FwYXMgKi8KKyAgICBOVUxMCQkJCS8qIG9rX2ZuICovCit9OworCitzdGF0aWMKK01ETUlORiBD T05DT1JEID0JLyogSW5mbyBmb3IgQ29uZG9yIENEUyAyMjAgMjQwMGIgbW9kZW0gKi8KKyAgICB7 CisgICAgIkNvbmNvcmQgQ29uZG9yIENEUyAyMjAgMjQwMGIiLAorICAgICIiLAkJCQkJLyogcHVs c2UgY29tbWFuZCAqLworICAgICIiLAkJCQkJLyogdG9uZSBjb21tYW5kICovCisgICAgMzUsCQkJ CQkvKiBkaWFsX3RpbWUgKi8KKyAgICAiLCIsCQkJCS8qIHBhdXNlX2NoYXJzICovCisgICAgMiwJ CQkJCS8qIHBhdXNlX3RpbWUgKi8KKyAgICAiXDAxNVwwMTUiLAkJCQkvKiB3YWtlX3N0ciAqLwor ICAgIDIwLAkJCQkJLyogd2FrZV9yYXRlICovCisgICAgIkNEUyA+IiwJCQkJLyogd2FrZV9wcm9t cHQgKi8KKyAgICAiIiwJCQkJCS8qIGRtb2RlX3N0ciAqLworICAgIE5VTEwsCQkJCS8qIGRtb2Rl X3Byb21wdCAqLworICAgICI8RCBNJXNcMDE1PiIsCQkJLyogZGlhbF9zdHIgKi8KKyAgICAwLAkJ CQkJLyogZGlhbF9yYXRlICovCisgICAgMCwJCQkJCS8qIGVzY190aW1lICovCisgICAgMCwJCQkJ CS8qIGVzY19jaGFyICovCisgICAgIiIsCQkJCQkvKiBodXBfc3RyICovCisgICAgIiIsCQkJCQkv KiBod2ZjX3N0ciAqLworICAgICIiLAkJCQkJLyogc3dmY19zdHIgKi8KKyAgICAiIiwJCQkJCS8q IG5vZmNfc3RyICovCisgICAgIiIsCQkJCQkvKiBlY19vbl9zdHIgKi8KKyAgICAiIiwJCQkJCS8q IGVjX29mZl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGRjX29uX3N0ciAqLworICAgICIiLAkJCQkJ LyogZGNfb2ZmX3N0ciAqLworICAgICIiLAkJCQkJLyogYWFfb25fc3RyICovCisgICAgIiIsCQkJ CQkvKiBhYV9vZmZfc3RyICovCisgICAgIiIsCQkJCQkvKiBzYl9vbl9zdHIgKi8KKyAgICAiIiwJ CQkJCS8qIHNiX29mZl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHNwX29mZl9zdHIgKi8KKyAgICAi IiwJCQkJCS8qIHNwX29uX3N0ciAqLworICAgICIiLAkJCQkJLyogdm9sMV9zdHIgKi8KKyAgICAi IiwJCQkJCS8qIHZvbDJfc3RyICovCisgICAgIiIsCQkJCQkvKiB2b2wzX3N0ciAqLworICAgICIi LAkJCQkJLyogaWdub3JlZHQgKi8KKyAgICAiIiwJCQkJCS8qIGluaTIgKi8KKyAgICAyNDAwTCwJ CQkJLyogbWF4X3NwZWVkICovCisgICAgMCwJCQkJCS8qIGNhcGFzICovCisgICAgTlVMTAkJCQkv KiBva19mbiAqLworfTsKKyNlbmRpZiAvKiBPTERNT0RFTVMgKi8KKworc3RhdGljCitNRE1JTkYg TUlDUk9DT00gPQkvKiBNaWNyb2NvbSBtb2RlbXMgaW4gbmF0aXZlIFNYIG1vZGUgKi8KKwkJCS8q IChsb25nIGFuc3dlciBvbmx5KSAqLworeworICAgICJNaWNyb2NvbSBNTlAgbW9kZW1zIGluIFNY IGNvbW1hbmQgbW9kZSIsCisgICAgIkRQXDAxNSIsCQkJCS8qIHB1bHNlIGNvbW1hbmQgKi8KKyAg ICAiRFRcMDE1IiwJCQkJLyogdG9uZSBjb21tYW5kICovCisgICAgMzUsCQkJCQkvKiBkaWFsX3Rp bWUgKi8KKyAgICAiLCFAIiwJCS8qIHBhdXNlX2NoYXJzICghIGFuZCBAIGFyZW4ndCBwdXJlIHBh dXNlcykgKi8KKyAgICAzLAkJCQkJLyogcGF1c2VfdGltZSAqLworLyoKKyAgVGhlIGZvbGxvd2lu ZyBzZXRzIDggYml0cywgbm8gcGFyaXR5LCBCUkVBSyBwYXNzdGhydSwgYW5kIFNFMCBkaXNhYmxl cyB0aGUKKyAgZXNjYXBlIGNoYXJhY3Rlciwgd2hpY2ggaXMgYSBzaW5nbGUgY2hhcmFjdGVyIHdp dGggbm8gZ3VhcmQgdGltZSwgdG90YWxseQorICB1bnNhZmUsIHNvIHdlIGhhdmUgbm8gY2hvaWNl IGJ1dCB0byBkaXNhYmxlIGl0LiAgRXNwZWNpYWxseSBzaW5jZSwgYnkKKyAgZGVmYXVsdCwgaXQg aXMgQ3RybC1BLCB3aGljaCBpcyBLZXJtaXQncyBwYWNrZXQtc3RhcnQgY2hhcmFjdGVyLiAgV2Ug d291bGQKKyAgY2hhbmdlIGl0IHRvIHNvbWV0aGluZyBlbHNlLCB3aGljaCB3b3VsZCBlbmFibGUg Im1kbWh1cCgpIiwgYnV0IHRoZSB1c2VyCisgIHdvdWxkbid0IGtub3cgYWJvdXQgaXQuICBWZXJ5 IGJhZC4gIE5vdGU6IFNFMSBzZXRzIGl0IHRvIEN0cmwtQSwgU0UyCisgIHNldHMgaXQgdG8gQ3Ry bC1CLCBldGMgKDEuLjMxIGFsbG93ZWQpLiAgQWxzbyBTRS9RIHNldHMgaXQgdG8gIlEiLgorKi8K KyAgICAiU0UwO1MxUDQ7U0JSSzVcMDE1IiwJCS8qIHdha2Vfc3RyICovCisgICAgMTAwLAkJCQkv KiB3YWtlX3JhdGUgKi8KKyAgICAiISIsCQkJCS8qIHdha2VfcHJvbXB0ICovCisgICAgIiIsCQkJ CQkvKiBkbW9kZV9zdHIgKi8KKyAgICBOVUxMLAkJCQkvKiBkbW9kZV9wcm9tcHQgKi8KKyAgICAi RCVzXDAxNSIsCQkJCS8qIGRpYWxfc3RyIC0gbnVtYmVyIHVwIHRvIDM5IGNoYXJzICovCisgICAg MCwJCQkJCS8qIGRpYWxfcmF0ZSAqLworICAgIDAsCQkJCQkvKiBlc2NfdGltZSAqLworICAgIDAs CQkJCQkvKiBlc2NfY2hhciAtIHdlIGNhbid0IHVzZSB0aGlzICovCisgICAgIiIsCQkJCQkvKiBo dXBfc3RyIC0gaXQncyAiSCIgYnV0IGNhbid0IHVzZSAqLworICAgICJTRjEzXDAxNSIsCQkJCS8q IGh3ZmNfc3RyICovCisgICAgIlNGMTFcMDE1IiwJCQkJLyogc3dmY19zdHIgKi8KKyAgICAiU0Yx MFwwMTUiLAkJCQkvKiBub2ZjX3N0ciAqLworICAgICJCQU9GRjtTTUFVVFwwMTUiLAkJCS8qIGVj X29uX3N0ciAqLworICAgICJCQU9OO1NNRElSXDAxNSIsCQkJLyogZWNfb2ZmX3N0ciAqLworICAg ICJDT01QMVwwMTUiLAkJCS8qIGRjX29uX3N0ciAqLworICAgICJDT01QMFwwMTUiLAkJCS8qIGRj X29mZl9zdHIgKi8KKyAgICAiQUEiLAkJCQkvKiBhYV9vbl9zdHIgKi8KKyAgICAiIiwJCQkJCS8q IGFhX29mZl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHNiX29uX3N0ciAqLworICAgICIiLAkJCQkJ Lyogc2Jfb2ZmX3N0ciAqLworICAgICJTQTIiLAkJCQkvKiBzcF9vZmZfc3RyICovCisgICAgIlNB MCIsCQkJCS8qIHNwX29uX3N0ciAqLworICAgICIiLAkJCQkJLyogdm9sMV9zdHIgKi8KKyAgICAi IiwJCQkJCS8qIHZvbDJfc3RyICovCisgICAgIiIsCQkJCQkvKiB2b2wzX3N0ciAqLworICAgICIi LAkJCQkJLyogaWdub3JlZHQgKi8KKyAgICAiIiwJCQkJCS8qIGluaTIgKi8KKyAgICAwTCwJCQkJ CS8qIG1heF9zcGVlZCAqLworICAgIENLRF9TQnxDS0RfRUN8Q0tEX0RDfENLRF9IV3xDS0RfU1d8 Q0tEX0tTLCAvKiBjYXBhcyAqLworICAgIGdldG9rCQkJCS8qIG9rX2ZuICovCit9OworCitzdGF0 aWMKK01ETUlORiBNSUNST0xJTksgPQkJCS8qIE1pY3JvTGluayAuLi4gKi8KKyAgICB7CQkJCQkv KiAxNC40VFEsVEwsUEM7MjguOFRRLFRRVjsyNDQwVC9UUiAqLworICAgICJFTFNBIE1pY3JvTGlu ayAxNC40LCAyOC44LCAzMy42IG9yIDU2SyIsIC8qIEVMU0EgR21iSCwgQWFjaGVuICovCisgICAg IkFUUFwwMTUiLAkJCQkvKiBwdWxzZSBjb21tYW5kICovCisgICAgIkFUVFwwMTUiLAkJCQkvKiB0 b25lIGNvbW1hbmQgKi8KKyAgICAzNSwJCQkJCS8qIGRpYWxfdGltZSAqLworICAgICIsIiwJCQkJ LyogcGF1c2VfY2hhcnMgKi8KKyAgICAyLAkJCQkJLyogcGF1c2VfdGltZSAqLworI2lmZGVmIE9T MgorICAgICJBVFEwRTFWMVg0JlMwXFxEMCZDMSZEMlxcSzVcMDE1IiwJLyogd2FrZV9zdHIgKi8K KyNlbHNlCisjaWZkZWYgVk1TCisgICAgIkFUUTBYNCZTMVxcSzVcMDE1IiwJCS8qIHdha2Vfc3Ry ICovCisjZWxzZQorICAgICJBVFEwWDRcXEs1XDAxNSIsCQkJLyogd2FrZV9zdHIgKi8KKyNlbmRp ZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAwLAkJCQkJLyogd2FrZV9yYXRlICov CisgICAgIk9LXDAxNSIsCQkJCS8qIHdha2VfcHJvbXB0ICovCisgICAgIiIsCQkJCQkvKiBkbW9k ZV9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGRtb2RlX3Byb21wdCAqLworICAgICJBVEQlc1wwMTUi LAkJCS8qIGRpYWxfc3RyICovCisgICAgMCwJCQkJCS8qIGRpYWxfcmF0ZSAqLworICAgIDExMDAs CQkJCS8qIGVzY190aW1lICovCisgICAgNDMsCQkJCQkvKiBlc2NfY2hhciAqLworICAgICJBVFEw SFwwMTUiLAkJCS8qIGh1cF9zdHIgKi8KKyAgICAiQVRcXFEzXDAxNSIsCQkJLyogaHdmY19zdHIg Ki8KKyAgICAiQVRcXFExXFxYMFwwMTUiLAkJCS8qIHN3ZmNfc3RyICovCisgICAgIkFUXFxRMFww MTUiLAkJCS8qIG5vZmNfc3RyICovCisgICAgIkFUXFxOM1wwMTUiLAkJCS8qIGVjX29uX3N0ciAq LworICAgICJBVFxcTjBcMDE1IiwJCQkvKiBlY19vZmZfc3RyICovCisgICAgIkFUJUMzXDAxNSIs CQkJLyogZGNfb25fc3RyICovCisgICAgIkFUJUMwXDAxNSIsCQkJLyogZGNfb2ZmX3N0ciAqLwor ICAgICJBVFMwPTFcMDE1IiwJCQkvKiBhYV9vbl9zdHIgKi8KKyAgICAiQVRTMD0wXDAxNSIsCQkJ LyogYWFfb2ZmX3N0ciAqLworICAgICJcXEowIiwJCQkJLyogc2Jfb25fc3RyICg/KSAqLworICAg ICIiLAkJCQkJLyogc2Jfb2ZmX3N0ciAqLworICAgICJBVE0xXDAxNSIsCQkJCS8qIHNwX29uX3N0 ciAqLworICAgICJBVE0wXDAxNSIsCQkJCS8qIHNwX29mZl9zdHIgKi8KKyAgICAiQVRMMVwwMTUi LAkJCQkvKiB2b2wxX3N0ciAqLworICAgICJBVEwyXDAxNSIsCQkJCS8qIHZvbDJfc3RyICovCisg ICAgIkFUTDNcMDE1IiwJCQkJLyogdm9sM19zdHIgKi8KKyAgICAiQVRYM1wwMTUiLAkJCQkvKiBp Z25vcmVkdCAqLworICAgICIiLAkJCQkJLyogaW5pMiAqLworICAgIDU3NjAwTCwJCQkJLyogbWF4 X3NwZWVkICovCisgICAgQ0tEX0FUfENLRF9TQnxDS0RfRUN8Q0tEX0RDfENLRF9IV3xDS0RfU1cs IC8qIGNhcGFzICovCisgICAgZ2V0b2sJCQkJLyogb2tfZm4gKi8KK307CisKK3N0YXRpYworTURN SU5GIFVMSU5LVjI1MCA9CQkJLyogTWljcm9MaW5rIFYuMjUwICovCisgICAgewkJCQkJLyogNTZL ZmxleCwgVi45MDsgVi4yNTAgY29tbWFuZCBzZXQgKi8KKyAgICAiRUxTQSBNaWNyb0xpbmsgNTZL IFYuMjUwIiwJCS8qIEVMU0EgR21iSCwgQWFjaGVuICovCisgICAgIkFUUFwwMTUiLAkJCQkvKiBw dWxzZSBjb21tYW5kICovCisgICAgIkFUVFwwMTUiLAkJCQkvKiB0b25lIGNvbW1hbmQgKi8KKyAg ICAzNSwJCQkJCS8qIGRpYWxfdGltZSAqLworICAgICIsIiwJCQkJLyogcGF1c2VfY2hhcnMgKi8K KyAgICAyLAkJCQkJLyogcGF1c2VfdGltZSAqLworI2lmZGVmIE9TMgorICAgIC8qIFxEMCA9IERT UiAmIENUUyBhbHdheXMgb24gYnV0IGh3ZmMgb3ZlcnJpZGVzIG9uIENUUy4gKi8KKyAgICAiQVRR MEUxVjFYNCZTMFxcRDAmQzEmRDJcMDE1IiwJLyogd2FrZV9zdHIgKi8KKyNlbHNlCisjaWZkZWYg Vk1TCisgICAgIkFUUTBYNCZTMVwwMTUiLAkJCS8qIHdha2Vfc3RyICovCisjZWxzZQorICAgICJB VFEwWDRcMDE1IiwJCQkvKiB3YWtlX3N0ciAqLworI2VuZGlmIC8qIFZNUyAqLworI2VuZGlmIC8q IE9TMiAqLworICAgIDAsCQkJCQkvKiB3YWtlX3JhdGUgKi8KKyAgICAiT0tcMDE1IiwJCQkJLyog d2FrZV9wcm9tcHQgKi8KKyAgICAiIiwJCQkJCS8qIGRtb2RlX3N0ciAqLworICAgICIiLAkJCQkJ LyogZG1vZGVfcHJvbXB0ICovCisgICAgIkFURCVzXDAxNSIsCQkJLyogZGlhbF9zdHIgKi8KKyAg ICAwLAkJCQkJLyogZGlhbF9yYXRlICovCisgICAgMTEwMCwJCQkJLyogZXNjX3RpbWUgKi8KKyAg ICA0MywJCQkJCS8qIGVzY19jaGFyICovCisgICAgIkFUUTBIMFwwMTUiLAkJCS8qIGh1cF9zdHIg Ki8KKyAgICAiQVQrSUZDPTIsMlwwMTUiLAkJCS8qIGh3ZmNfc3RyICovCisgICAgIkFUK0lGQz0x LDFcMDE1IiwJCQkvKiBzd2ZjX3N0ciAqLworICAgICJBVCtJRkM9MCwwXDAxNSIsCQkJLyogbm9m Y19zdHIgKi8KKyAgICAiQVQrRVM9MywwXDAxNSIsCQkJLyogZWNfb25fc3RyICovCisgICAgIkFU K0VTPTEsMFwwMTUiLAkJCS8qIGVjX29mZl9zdHIgKi8KKyAgICAiQVQrRFM9MywwLDIwNDgsMzJc MDE1IiwJCS8qIGRjX29uX3N0ciAqLworICAgICJBVCtEUz0wLDBcMDE1IiwJCQkvKiBkY19vZmZf c3RyICovCisKKyAgICAiQVRTMD0xXDAxNSIsCQkJLyogYWFfb25fc3RyICovCisgICAgIkFUUzA9 MFwwMTUiLAkJCS8qIGFhX29mZl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHNiX29uX3N0ciAoPykg Ki8KKyAgICAiIiwJCQkJCS8qIHNiX29mZl9zdHIgKi8KKyAgICAiQVRNMVwwMTUiLAkJCQkvKiBz cF9vbl9zdHIgKi8KKyAgICAiQVRNMFwwMTUiLAkJCQkvKiBzcF9vZmZfc3RyICovCisgICAgIkFU TDFcMDE1IiwJCQkJLyogdm9sMV9zdHIgKi8KKyAgICAiQVRMMlwwMTUiLAkJCQkvKiB2b2wyX3N0 ciAqLworICAgICJBVEwzXDAxNSIsCQkJCS8qIHZvbDNfc3RyICovCisgICAgIkFUWDNcMDE1IiwJ CQkJLyogaWdub3JlZHQgKi8KKyAgICAiIiwJCQkJCS8qIGluaTIgKi8KKyAgICA1NzYwMEwsCQkJ CS8qIG1heF9zcGVlZCAqLworICAgIENLRF9BVHxDS0RfU0J8Q0tEX0VDfENLRF9EQ3xDS0RfSFd8 Q0tEX1NXLCAvKiBjYXBhcyAqLworICAgIGdldG9rCQkJCS8qIG9rX2ZuICovCit9OworI2VuZGlm IC8qIE1JTklESUFMICovCisKK3N0YXRpYworTURNSU5GIElUVVRWMjUwID0JCQkvKiBJVFUtVCBW LjI1MCBjb25mb3JtaW5nIG1vZGVtICovCit7CisgICAgIkFueSBJVFUtVCBWLjI1dGVyL1YuMjUw IGNvbmZvcm1hbnQgbW9kZW0iLAorICAgICJBVFBcMDE1IiwJCQkJLyogcHVsc2UgY29tbWFuZCAq LworICAgICJBVFRcMDE1IiwJCQkJLyogdG9uZSBjb21tYW5kICovCisgICAgMzUsCQkJCQkvKiBk aWFsX3RpbWUgKi8KKyAgICAiLCIsCQkJCS8qIHBhdXNlX2NoYXJzICovCisgICAgMiwJCQkJCS8q IHBhdXNlX3RpbWUgKi8KKyAgICAiQVRRMEUxVjFYNCZDMSZEMlwwMTUiLAkJLyogd2FrZV9zdHIg KG5vICZTbiBpbiBWLjI1KSAqLworICAgIDAsCQkJCQkvKiB3YWtlX3JhdGUgKi8KKyAgICAiT0tc MDE1IiwJCQkJLyogd2FrZV9wcm9tcHQgKi8KKyAgICAiIiwJCQkJCS8qIGRtb2RlX3N0ciAqLwor ICAgICIiLAkJCQkJLyogZG1vZGVfcHJvbXB0ICovCisgICAgIkFURCVzXDAxNSIsCQkJLyogZGlh bF9zdHIgKi8KKyAgICAwLAkJCQkJLyogZGlhbF9yYXRlICovCisgICAgMTEwMCwJCQkJLyogZXNj X3RpbWUgKi8KKyAgICA0MywJCQkJCS8qIGVzY19jaGFyICovCisgICAgIkFUUTBIMFwwMTUiLAkJ CS8qIGh1cF9zdHIgKi8KKyAgICAiQVQrSUZDPTIsMlwwMTUiLAkJCS8qIGh3ZmNfc3RyICovCisg ICAgIkFUK0lGQz0xLDFcMDE1IiwJCQkvKiBzd2ZjX3N0ciAqLworICAgICJBVCtJRkM9MCwwXDAx NSIsCQkJLyogbm9mY19zdHIgKi8KKyAgICAiQVQrRVM9MywwLDI7K0VCPTEsMCwzMFwwMTUiLAkv KiBlY19vbl9zdHIgKi8KKyAgICAiQVQrRVM9MFwwMTUiLAkJCS8qIGVjX29mZl9zdHIgKi8KKyAg ICAiQVQrRFM9MywwXDAxNSIsCQkJLyogZGNfb25fc3RyICovCisgICAgIkFUK0RTPTAsMFwwMTUi LAkJCS8qIGRjX29mZl9zdHIgKi8KKyAgICAiQVRTMD0xXDAxNSIsCQkJLyogYWFfb25fc3RyICov CisgICAgIkFUUzA9MFwwMTUiLAkJCS8qIGFhX29mZl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHNi X29uX3N0ciAqLworICAgICIiLAkJCQkJLyogc2Jfb2ZmX3N0ciAqLworICAgICJBVE0xXDAxNSIs CQkJCS8qIHNwX29uX3N0ciAqLworICAgICJBVE0wXDAxNSIsCQkJCS8qIHNwX29mZl9zdHIgKi8K KyAgICAiQVRMMVwwMTUiLAkJCQkvKiB2b2wxX3N0ciAqLworICAgICJBVEwyXDAxNSIsCQkJCS8q IHZvbDJfc3RyICovCisgICAgIkFUTDNcMDE1IiwJCQkJLyogdm9sM19zdHIgKi8KKyAgICAiQVRY M1wwMTUiLAkJCQkvKiBpZ25vcmVkdCAqLworICAgICIiLAkJCQkJLyogaW5pMiAqLworICAgIDU3 NjAwTCwJCQkJLyogbWF4X3NwZWVkICovCisgICAgQ0tEX0FUfENLRF9TQnxDS0RfRUN8Q0tEX0RD fENLRF9IV3xDS0RfU1csIC8qIGNhcGFzICovCisgICAgZ2V0b2sJCQkJLyogb2tfZm4gKi8KK307 CisKKyNpZm5kZWYgQ0tfVEFQSQorc3RhdGljCisjZW5kaWYgLyogQ0tfVEFQSSAqLworTURNSU5G IEdFTkVSSUMgPQkJCS8qIEdlbmVyaWMgaGlnaCBzcGVlZCAuLi4gKi8KKyAgICB7CisgICAgIkdl bmVyaWMgaGlnaC1zcGVlZCBBVCBjb21tYW5kIHNldCIsCisgICAgIkFUUFwwMTUiLAkJCQkvKiBw dWxzZSBjb21tYW5kICovCisgICAgIkFUVFwwMTUiLAkJCQkvKiB0b25lIGNvbW1hbmQgKi8KKyAg ICAzNSwJCQkJCS8qIGRpYWxfdGltZSAqLworICAgICIsIiwJCQkJLyogcGF1c2VfY2hhcnMgKi8K KyAgICAyLAkJCQkJLyogcGF1c2VfdGltZSAqLworICAgICIiLAkJCQkJLyogd2FrZV9zdHIgKi8K KyAgICAwLAkJCQkJLyogd2FrZV9yYXRlICovCisgICAgIiIsCQkJCQkvKiB3YWtlX3Byb21wdCAq LworICAgICIiLAkJCQkJLyogZG1vZGVfc3RyICovCisgICAgIiIsCQkJCQkvKiBkbW9kZV9wcm9t cHQgKi8KKyAgICAiQVREJXNcMDE1IiwJCQkvKiBkaWFsX3N0ciAqLworICAgIDAsCQkJCQkvKiBk aWFsX3JhdGUgKi8KKyAgICAxMTAwLAkJCQkvKiBlc2NfdGltZSAqLworICAgIDQzLAkJCQkJLyog ZXNjX2NoYXIgKi8KKyAgICAiQVRRMEgwXDAxNSIsCQkJLyogaHVwX3N0ciAqLworICAgICIiLAkJ CQkJLyogaHdmY19zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHN3ZmNfc3RyICovCisgICAgIiIsCQkJ CQkvKiBub2ZjX3N0ciAqLworICAgICIiLAkJCQkJLyogZWNfb25fc3RyICovCisgICAgIiIsCQkJ CQkvKiBlY19vZmZfc3RyICovCisgICAgIiIsCQkJCQkvKiBkY19vbl9zdHIgKi8KKyAgICAiIiwJ CQkJCS8qIGRjX29mZl9zdHIgKi8KKyAgICAiQVRTMD0xXDAxNSIsCQkJLyogYWFfb25fc3RyICov CisgICAgIkFUUzA9MFwwMTUiLAkJCS8qIGFhX29mZl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHNi X29uX3N0ciAqLworICAgICIiLAkJCQkJLyogc2Jfb2ZmX3N0ciAqLworICAgICIiLAkJCQkJLyog c3Bfb25fc3RyICovCisgICAgIiIsCQkJCQkvKiBzcF9vZmZfc3RyICovCisgICAgIiIsCQkJCQkv KiB2b2wxX3N0ciAqLworICAgICIiLAkJCQkJLyogdm9sMl9zdHIgKi8KKyAgICAiIiwJCQkJCS8q IHZvbDNfc3RyICovCisgICAgIkFUWDNcMDE1IiwJCQkJLyogaWdub3JlZHQgKi8KKyAgICAiIiwJ CQkJCS8qIGluaTIgKi8KKyAgICAxMTUyMDAsCQkJCS8qIG1heF9zcGVlZCAqLworICAgIENLRF9B VHxDS0RfU0J8Q0tEX0VDfENLRF9EQ3xDS0RfSFcsIC8qIGNhcGFzICovCisgICAgZ2V0b2sJCQkJ Lyogb2tfZm4gKi8KK307CisKKyNpZm5kZWYgTUlOSURJQUwKK3N0YXRpYworTURNSU5GIFhKQUNL ID0JCQkJLyogTWVnYWhlcnR6IFgtSmFjayAqLworICAgIHsKKyAgICAiTWVnYWhlcnR6IFgtSmFj ayBYSjMxNDQgLyBDQzYxNDQiLAorICAgICJBVFBcMDE1IiwJCQkJLyogcHVsc2UgY29tbWFuZCAq LworICAgICJBVFRcMDE1IiwJCQkJLyogdG9uZSBjb21tYW5kICovCisgICAgMzUsCQkJCQkvKiBk aWFsX3RpbWUgKi8KKyAgICAiLCIsCQkJCS8qIHBhdXNlX2NoYXJzICovCisgICAgMiwJCQkJCS8q IHBhdXNlX3RpbWUgKi8KKyNpZmRlZiBPUzIKKyAgICAiQVRRMEUxVjFYNE4xJkMxJkQyXFxLNVww MTUiLAkvKiB3YWtlX3N0ciAqLworI2Vsc2UKKyAgICAiQVRRMFg0TjFcXEs1XDAxNSIsCQkJLyog d2FrZV9zdHIgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAwLAkJCQkJLyogd2FrZV9yYXRlICov CisgICAgIk9LXDAxNSIsCQkJCS8qIHdha2VfcHJvbXB0ICovCisgICAgIiIsCQkJCQkvKiBkbW9k ZV9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGRtb2RlX3Byb21wdCAqLworICAgICJBVEQlc1wwMTUi LAkJCS8qIGRpYWxfc3RyICovCisgICAgMCwJCQkJCS8qIGRpYWxfcmF0ZSAqLworICAgIDExMDAs CQkJCS8qIGVzY190aW1lICovCisgICAgNDMsCQkJCQkvKiBlc2NfY2hhciAqLworICAgICJBVFEw SFwwMTUiLAkJCS8qIGh1cF9zdHIgKi8KKyAgICAiQVQmSzNcMDE1IiwJCQkvKiBod2ZjX3N0ciAq LworICAgICJBVCZLNFwwMTUiLAkJCS8qIHN3ZmNfc3RyICovCisgICAgIkFUJkswXDAxNSIsCQkJ Lyogbm9mY19zdHIgKi8KKyAgICAiQVRcXE4zJlE1XDAxNSIsCQkJLyogZWNfb25fc3RyICovCisg ICAgIkFUXFxOMSZRMFwwMTUiLAkJCS8qIGVjX29mZl9zdHIgKi8KKyAgICAiQVQlQzNcMDE1IiwJ CQkvKiBkY19vbl9zdHIgKi8KKyAgICAiQVQlQzBcMDE1IiwJCQkvKiBkY19vZmZfc3RyICovCisg ICAgIkFUUzA9MVwwMTUiLAkJCS8qIGFhX29uX3N0ciAqLworICAgICJBVFMwPTBcMDE1IiwJCQkv KiBhYV9vZmZfc3RyICovCisgICAgIiIsCQkJCQkvKiBzYl9vbl9zdHIgKi8KKyAgICAiIiwJCQkJ CS8qIHNiX29mZl9zdHIgKi8KKyAgICAiQVRNMVwwMTUiLAkJCQkvKiBzcF9vbl9zdHIgKi8KKyAg ICAiQVRNMFwwMTUiLAkJCQkvKiBzcF9vZmZfc3RyICovCisgICAgIkFUTDFcMDE1IiwJCQkJLyog dm9sMV9zdHIgKi8KKyAgICAiQVRMMlwwMTUiLAkJCQkvKiB2b2wyX3N0ciAqLworICAgICJBVEwz XDAxNSIsCQkJCS8qIHZvbDNfc3RyICovCisgICAgIkFUWDNcMDE1IiwJCQkJLyogaWdub3JlZHQg Ki8KKyAgICAiIiwJCQkJCS8qIGluaTIgKi8KKyAgICA1NzYwMEwsCQkJCS8qIG1heF9zcGVlZCAq LworICAgIENLRF9BVHxDS0RfU0J8Q0tEX0VDfENLRF9EQ3xDS0RfSFd8Q0tEX1NXLCAvKiBjYXBh cyAqLworICAgIGdldG9rCQkJCS8qIG9rX2ZuICovCit9OworCitzdGF0aWMKK01ETUlORiBTUElS SVRJSSA9CQkJLyogUXVpY2tDb21tIFNwaXJpdCBJSSAqLworICAgIHsKKyAgICAiUXVpY2tDb21t IFNwaXJpdCBJSSIsCisgICAgIkFUUFwwMTUiLAkJCQkvKiBwdWxzZSBjb21tYW5kICovCisgICAg IkFUVFwwMTUiLAkJCQkvKiB0b25lIGNvbW1hbmQgKi8KKyAgICAzNSwJCQkJCS8qIGRpYWxfdGlt ZSAqLworICAgICIsIiwJCQkJLyogcGF1c2VfY2hhcnMgKi8KKyAgICAyLAkJCQkJLyogcGF1c2Vf dGltZSAqLworICAgICJBVCZGXDAxNSIsCQkJCS8qIHdha2Vfc3RyICovCisgICAgMCwJCQkJCS8q IHdha2VfcmF0ZSAqLworICAgICJPS1wwMTUiLAkJCQkvKiB3YWtlX3Byb21wdCAqLworICAgICIi LAkJCQkJLyogZG1vZGVfc3RyICovCisgICAgIiIsCQkJCQkvKiBkbW9kZV9wcm9tcHQgKi8KKyAg ICAiQVREJXNcMDE1IiwJCQkvKiBkaWFsX3N0ciAqLworICAgIDAsCQkJCQkvKiBkaWFsX3JhdGUg Ki8KKyAgICAxMTAwLAkJCQkvKiBlc2NfdGltZSAqLworICAgIDQzLAkJCQkJLyogZXNjX2NoYXIg Ki8KKyAgICAiQVRRMEhcMDE1IiwJCQkvKiBodXBfc3RyICovCisgICAgIkFUKkYzXDAxNSIsCQkJ LyogaHdmY19zdHIgKi8KKyAgICAiQVQqRjJcMDE1IiwJCQkvKiBzd2ZjX3N0ciAqLworICAgICJB VCpGMFwwMTUiLAkJCS8qIG5vZmNfc3RyICovCisgICAgIkFUKkU2XDAxNSIsCQkJLyogZWNfb25f c3RyICovCisgICAgIkFUKkUwXDAxNSIsCQkJLyogZWNfb2ZmX3N0ciAqLworICAgICJBVCpFOVww MTUiLAkJCS8qIGRjX29uX3N0ciAqLworICAgICJBVCpFMFwwMTUiLAkJCS8qIGRjX29mZl9zdHIg Ki8KKyAgICAiQVRTMD0yXDAxNSIsCQkJLyogYWFfb25fc3RyICovCisgICAgIkFUUzA9MFwwMTUi LAkJCS8qIGFhX29mZl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHNiX29uX3N0ciAqLworICAgICIi LAkJCQkJLyogc2Jfb2ZmX3N0ciAqLworICAgICJBVE0xXDAxNSIsCQkJCS8qIHNwX29uX3N0ciAq LworICAgICJBVE0wXDAxNSIsCQkJCS8qIHNwX29mZl9zdHIgKi8KKyAgICAiQVRMMVwwMTUiLAkJ CQkvKiB2b2wxX3N0ciAqLworICAgICJBVEwyXDAxNSIsCQkJCS8qIHZvbDJfc3RyICovCisgICAg IkFUTDNcMDE1IiwJCQkJLyogdm9sM19zdHIgKi8KKyAgICAiQVRYM1wwMTUiLAkJCQkvKiBpZ25v cmVkdCAqLworICAgICIiLAkJCQkJLyogaW5pMiAqLworICAgIDU3NjAwTCwJCQkJLyogbWF4X3Nw ZWVkICovCisgICAgQ0tEX0FUfENLRF9TQnxDS0RfRUN8Q0tEX0RDfENLRF9IV3xDS0RfU1csIC8q IGNhcGFzICovCisgICAgZ2V0b2sJCQkJLyogb2tfZm4gKi8KK307CisKK3N0YXRpYworTURNSU5G IE1PTlRBTkEgPSB7CQkJLyogTW90b3JvbGEgTW9udGFuYSAqLworICAgICJNb3Rvcm9sYSBNb250 YW5hIiwJCQkvKiBOYW1lICovCisgICAgIkFUUFwwMTUiLAkJCQkvKiBwdWxzZSBjb21tYW5kICov CisgICAgIkFUVFwwMTUiLAkJCQkvKiB0b25lIGNvbW1hbmQgKi8KKyAgICAzNSwJCQkJCS8qIGRp YWxfdGltZSAqLworICAgICIsIiwJCQkJLyogcGF1c2VfY2hhcnMgKi8KKyAgICAyLAkJCQkJLyog cGF1c2VfdGltZSAqLworI2lmZGVmIE9TMgorICAgICJBVFEwRTFWMVg0JlMwJkMxJkQyXFxLNVxc VjFcMDE1IiwJLyogd2FrZV9zdHIgKi8KKyNlbHNlCisjaWZkZWYgVk1TCisgICAgIkFUUTBFMVg0 JlMxXFxLNVxcVjFcMDE1IiwJCS8qIHdha2Vfc3RyICovCisjZWxzZQorICAgICJBVFEwRTFYNFxc SzVcXFYxXDAxNSIsCQkvKiB3YWtlX3N0ciAqLworI2VuZGlmIC8qIFZNUyAqLworI2VuZGlmIC8q IE9TMiAqLworICAgIDAsCQkJCQkvKiB3YWtlX3JhdGUgKi8KKyAgICAiT0tcMDE1IiwJCQkJLyog d2FrZV9wcm9tcHQgKi8KKyAgICAiIiwJCQkJCS8qIGRtb2RlX3N0ciAqLworICAgICIiLAkJCQkJ LyogZG1vZGVfcHJvbXB0ICovCisgICAgIkFURCVzXDAxNSIsCQkJLyogZGlhbF9zdHIgKi8KKyAg ICAwLAkJCQkJLyogZGlhbF9yYXRlICovCisgICAgMTEwMCwJCQkJLyogZXNjX3RpbWUgKi8KKyAg ICA0MywJCQkJCS8qIGVzY19jaGFyICovCisgICAgIkFUUTBIMFwwMTUiLAkJCS8qIGh1cF9zdHIg Ki8KKyAgICAiQVRcXFEzXDAxNSIsCQkJLyogaHdmY19zdHIgKi8KKyAgICAiQVRcXFExXDAxNSIs CQkJLyogc3dmY19zdHIgKi8KKyAgICAiQVRcXFEwXDAxNSIsCQkJLyogbm9mY19zdHIgKi8KKyAg ICAiQVRcXE40XDAxNSIsCQkJLyogZWNfb25fc3RyICovCisgICAgIkFUXFxOMVwwMTUiLAkJCS8q IGVjX29mZl9zdHIgKi8KKyAgICAiQVQlQzFcMDE1IiwJCQkvKiBkY19vbl9zdHIgKi8KKyAgICAi QVQlQzBcMDE1IiwJCQkvKiBkY19vZmZfc3RyICovCisgICAgIkFUUzA9MVwwMTUiLAkJCS8qIGFh X29uX3N0ciAqLworICAgICJBVFMwPTBcMDE1IiwJCQkvKiBhYV9vZmZfc3RyICovCisgICAgIkFU XFxKMFwwMTUiLAkJCS8qIHNiX29uX3N0ciAqLworICAgICJBVFxcSjFcMDE1IiwJCQkvKiBzYl9v ZmZfc3RyICovCisgICAgIkFUTTFcMDE1IiwJCQkJLyogc3Bfb25fc3RyICovCisgICAgIkFUTTBc MDE1IiwJCQkJLyogc3Bfb2ZmX3N0ciAqLworICAgICJBVEwxXDAxNSIsCQkJCS8qIHZvbDFfc3Ry ICovCisgICAgIkFUTDJcMDE1IiwJCQkJLyogdm9sMl9zdHIgKi8KKyAgICAiQVRMM1wwMTUiLAkJ CQkvKiB2b2wzX3N0ciAqLworICAgICJBVFgzXDAxNSIsCQkJCS8qIGlnbm9yZWR0ICovCisgICAg IiIsCQkJCQkvKiBpbmkyICovCisgICAgNTc2MDBMLAkJCQkvKiBtYXhfc3BlZWQgKi8KKyAgICBD S0RfQVR8Q0tEX1NCfENLRF9FQ3xDS0RfREN8Q0tEX0hXfENLRF9TVywgLyogY2FwYXMgKi8KKyAg ICBnZXRvawkJCQkvKiBva19mbiAqLworfTsKKworc3RhdGljCitNRE1JTkYgQ09NUEFRID0gewkJ CS8qIENvbXBhcSBEYXRhK0ZheCBNb2RlbSAqLworICAgICJDb21wYXEgRGF0YStGYXggTW9kZW0i LAkJLyogTmFtZSAqLworICAgICJBVFBcMDE1IiwJCQkJLyogcHVsc2UgY29tbWFuZCAqLworICAg ICJBVFRcMDE1IiwJCQkJLyogdG9uZSBjb21tYW5kICovCisgICAgMzUsCQkJCQkvKiBkaWFsX3Rp bWUgKi8KKyAgICAiLCIsCQkJCS8qIHBhdXNlX2NoYXJzICovCisgICAgMiwJCQkJCS8qIHBhdXNl X3RpbWUgKi8KKyNpZmRlZiBPUzIKKyAgICAiQVRRMEUxVjFYNCZTMCZDMSZEMlwwMTUiLAkJLyog d2FrZV9zdHIgKi8KKyNlbHNlCisjaWZkZWYgVk1TCisgICAgIkFUUTBFMVg0JlMxXDAxNSIsCQkJ Lyogd2FrZV9zdHIgKi8KKyNlbHNlCisgICAgIkFUUTBFMVg0XDAxNSIsCQkJLyogd2FrZV9zdHIg Ki8KKyNlbmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAwLAkJCQkJLyogd2Fr ZV9yYXRlICovCisgICAgIk9LXDAxNSIsCQkJCS8qIHdha2VfcHJvbXB0ICovCisgICAgIiIsCQkJ CQkvKiBkbW9kZV9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGRtb2RlX3Byb21wdCAqLworICAgICJB VEQlc1wwMTUiLAkJCS8qIGRpYWxfc3RyICovCisgICAgMCwJCQkJCS8qIGRpYWxfcmF0ZSAqLwor ICAgIDExMDAsCQkJCS8qIGVzY190aW1lICovCisgICAgNDMsCQkJCQkvKiBlc2NfY2hhciAqLwor ICAgICJBVFEwSDBcMDE1IiwJCQkvKiBodXBfc3RyICovCisgICAgIkFUXFxRM1wwMTUiLAkJCS8q IGh3ZmNfc3RyIChzYW1lIGFzICZLMykgKi8KKyAgICAiQVRcXFExXDAxNSIsCQkJLyogc3dmY19z dHIgKHNhbWUgYXMgJks0KSAqLworICAgICJBVFxcUTBcMDE1IiwJCQkvKiBub2ZjX3N0ciAoc2Ft ZSBhcyAmSzApICovCisgICAgIkFUXFxOM1wwMTUiLAkJCS8qIGVjX29uX3N0ciAqLworICAgICJB VFxcTjBcMDE1IiwJCQkvKiBlY19vZmZfc3RyICovCisgICAgIkFUJUMxXDAxNSIsCQkJLyogZGNf b25fc3RyICovCisgICAgIkFUJUMwXDAxNSIsCQkJLyogZGNfb2ZmX3N0ciAqLworICAgICJBVFMw PTFcMDE1IiwJCQkvKiBhYV9vbl9zdHIgKi8KKyAgICAiQVRTMD0wXDAxNSIsCQkJLyogYWFfb2Zm X3N0ciAqLworICAgICJBVFxcTjNcMDE1IiwJCQkvKiBzYl9vbl9zdHIgKi8KKyAgICAiQVRcXE4x XDAxNSIsCQkJLyogc2Jfb2ZmX3N0ciAqLworICAgICJBVE0xXDAxNSIsCQkJCS8qIHNwX29uX3N0 ciAqLworICAgICJBVE0wXDAxNSIsCQkJCS8qIHNwX29mZl9zdHIgKi8KKyAgICAiQVRMMFwwMTUi LAkJCQkvKiB2b2wxX3N0ciAqLworICAgICJBVEwyXDAxNSIsCQkJCS8qIHZvbDJfc3RyICovCisg ICAgIkFUTDNcMDE1IiwJCQkJLyogdm9sM19zdHIgKi8KKyAgICAiQVRYM1wwMTUiLAkJCQkvKiBp Z25vcmVkdCAqLworICAgICIiLAkJCQkJLyogaW5pMiAqLworICAgIDExNTIwMEwsCQkJCS8qIG1h eF9zcGVlZCAqLworICAgIENLRF9BVHxDS0RfU0J8Q0tEX0VDfENLRF9EQ3xDS0RfSFd8Q0tEX1NX LCAvKiBjYXBhcyAqLworICAgIGdldG9rCQkJCS8qIG9rX2ZuICovCit9OworCisKK3N0YXRpYwor TURNSU5GIEZVSklUU1UgPSB7CQkJLyogRnVqaXRzdSAqLworICAgICJGdWppdHN1IEZheC9Nb2Rl bSBBZGFwdGVyIiwJLyogTmFtZSAqLworICAgICJBVFBcMDE1IiwJCQkJLyogcHVsc2UgY29tbWFu ZCAqLworICAgICJBVFRcMDE1IiwJCQkJLyogdG9uZSBjb21tYW5kICovCisgICAgMzUsCQkJCQkv KiBkaWFsX3RpbWUgKi8KKyAgICAiLCIsCQkJCS8qIHBhdXNlX2NoYXJzICovCisgICAgMiwJCQkJ CS8qIHBhdXNlX3RpbWUgKi8KKyNpZmRlZiBPUzIKKyAgICAiQVRRMEUxVjFYNCZTMCZDMSZEMlxc SzVcXE4zXDAxNSIsCS8qIHdha2Vfc3RyICovCisjZWxzZQorI2lmZGVmIFZNUworICAgICJBVFEw RTFYNCZTMVxcSzVcXE4zXDAxNSIsCQkvKiB3YWtlX3N0ciAqLworI2Vsc2UKKyAgICAiQVRRMEUx WDRcXEs1XFxOM1wwMTUiLAkJLyogd2FrZV9zdHIgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKyNlbmRp ZiAvKiBPUzIgKi8KKyAgICAwLAkJCQkJLyogd2FrZV9yYXRlICovCisgICAgIk9LXDAxNSIsCQkJ CS8qIHdha2VfcHJvbXB0ICovCisgICAgIiIsCQkJCQkvKiBkbW9kZV9zdHIgKi8KKyAgICAiIiwJ CQkJCS8qIGRtb2RlX3Byb21wdCAqLworICAgICJBVEQlc1wwMTUiLAkJCS8qIGRpYWxfc3RyICov CisgICAgMCwJCQkJCS8qIGRpYWxfcmF0ZSAqLworICAgIDExMDAsCQkJCS8qIGVzY190aW1lICov CisgICAgNDMsCQkJCQkvKiBlc2NfY2hhciAqLworICAgICJBVFEwSDBcMDE1IiwJCQkvKiBodXBf c3RyICovCisgICAgIkFUJkszXFxRM1wwMTUiLAkJCS8qIGh3ZmNfc3RyICovCisgICAgIkFUJks0 XFxRMVwwMTUiLAkJCS8qIHN3ZmNfc3RyICovCisgICAgIkFUJkswXFxRMFwwMTUiLAkJCS8qIG5v ZmNfc3RyICovCisgICAgIkFUXFxOM1wwMTUiLAkJCS8qIGVjX29uX3N0ciAqLworICAgICJBVFxc TjBcMDE1IiwJCQkvKiBlY19vZmZfc3RyICovCisgICAgIkFUJUMxIiwJCQkJLyogZGNfb25fc3Ry ICovCisgICAgIkFUJUMwIiwJCQkJLyogZGNfb2ZmX3N0ciAqLworICAgICJBVFMwPTFcMDE1IiwJ CQkvKiBhYV9vbl9zdHIgKi8KKyAgICAiQVRTMD0wXDAxNSIsCQkJLyogYWFfb2ZmX3N0ciAqLwor ICAgICJBVFxcSjBcMDE1IiwJCQkvKiBzYl9vbl9zdHIgKi8KKyAgICAiQVRcXEoxXDAxNSIsCQkJ Lyogc2Jfb2ZmX3N0ciAqLworICAgICJBVE0xXDAxNSIsCQkJCS8qIHNwX29uX3N0ciAqLworICAg ICJBVE0wXDAxNSIsCQkJCS8qIHNwX29mZl9zdHIgKi8KKyAgICAiQVRMMVwwMTUiLAkJCQkvKiB2 b2wxX3N0ciAqLworICAgICJBVEwyXDAxNSIsCQkJCS8qIHZvbDJfc3RyICovCisgICAgIkFUTDNc MDE1IiwJCQkJLyogdm9sM19zdHIgKi8KKyAgICAiQVRYM1wwMTUiLAkJCQkvKiBpZ25vcmVkdCAq LworICAgICIiLAkJCQkJLyogaW5pMiAqLworICAgIDExNTIwMEwsCQkJCS8qIG1heF9zcGVlZCAq LworICAgIENLRF9BVHxDS0RfU0J8Q0tEX0VDfENLRF9EQ3xDS0RfSFd8Q0tEX1NXLCAvKiBjYXBh cyAqLworICAgIGdldG9rCQkJCS8qIG9rX2ZuICovCit9OworCitzdGF0aWMKK01ETUlORiBNSFpB VFQgPQkJCQkvKiBNZWdhaGVydHogQVQmVCBWLjM0ICovCisgICAgeworICAgICJNZWdhaGVydHog QVQmVCBWLjM0IiwKKyAgICAiQVRQXDAxNSIsCQkJCS8qIHB1bHNlIGNvbW1hbmQgKi8KKyAgICAi QVRUXDAxNSIsCQkJCS8qIHRvbmUgY29tbWFuZCAqLworICAgIDM1LAkJCQkJLyogZGlhbF90aW1l ICovCisgICAgIiwiLAkJCQkvKiBwYXVzZV9jaGFycyAqLworICAgIDIsCQkJCQkvKiBwYXVzZV90 aW1lICovCisjaWZkZWYgT1MyCisgICAgIkFUUTBFMVYxWDROMSZDMSZEMlxcSzVcMDE1IiwJLyog d2FrZV9zdHIgKi8KKyNlbHNlCisgICAgIkFUUTBYNE4xXFxLNVwwMTUiLAkJCS8qIHdha2Vfc3Ry ICovCisjZW5kaWYgLyogT1MyICovCisgICAgMCwJCQkJCS8qIHdha2VfcmF0ZSAqLworICAgICJP S1wwMTUiLAkJCQkvKiB3YWtlX3Byb21wdCAqLworICAgICIiLAkJCQkJLyogZG1vZGVfc3RyICov CisgICAgIiIsCQkJCQkvKiBkbW9kZV9wcm9tcHQgKi8KKyAgICAiQVREJXNcMDE1IiwJCQkvKiBk aWFsX3N0ciAqLworICAgIDAsCQkJCQkvKiBkaWFsX3JhdGUgKi8KKyAgICAxMTAwLAkJCQkvKiBl c2NfdGltZSAqLworICAgIDQzLAkJCQkJLyogZXNjX2NoYXIgKi8KKyAgICAiQVRRMEhcMDE1IiwJ CQkvKiBodXBfc3RyICovCisgICAgIkFUJkszXDAxNSIsCQkJLyogaHdmY19zdHIgKi8KKyAgICAi QVQmSzRcMDE1IiwJCQkvKiBzd2ZjX3N0ciAqLworICAgICJBVCZLMFwwMTUiLAkJCS8qIG5vZmNf c3RyICovCisgICAgIkFUXFxOM1wwMTUiLAkJCS8qIGVjX29uX3N0ciAqLworICAgICJBVFxcTjBc MDE1IiwJCQkvKiBlY19vZmZfc3RyICovCisgICAgIkFUJUMxXCJIM1wwMTUiLAkJCS8qIGRjX29u X3N0ciAqLworICAgICJBVCVDMFwiSDBcMDE1IiwJCQkvKiBkY19vZmZfc3RyICovCisgICAgIkFU UzA9MVwwMTUiLAkJCS8qIGFhX29uX3N0ciAqLworICAgICJBVFMwPTBcMDE1IiwJCQkvKiBhYV9v ZmZfc3RyICovCisgICAgIkFUXFxKMFwwMTUiLAkJCS8qIHNiX29uX3N0ciAqLworICAgICJBVFxc SjFcMDE1IiwJCQkvKiBzYl9vZmZfc3RyICovCisgICAgIkFUTTFcMDE1IiwJCQkJLyogc3Bfb25f c3RyICovCisgICAgIkFUTTBcMDE1IiwJCQkJLyogc3Bfb2ZmX3N0ciAqLworICAgICJBVEwxXDAx NSIsCQkJCS8qIHZvbDFfc3RyICovCisgICAgIkFUTDJcMDE1IiwJCQkJLyogdm9sMl9zdHIgKi8K KyAgICAiQVRMM1wwMTUiLAkJCQkvKiB2b2wzX3N0ciAqLworICAgICJBVFgzXDAxNSIsCQkJCS8q IGlnbm9yZWR0ICovCisgICAgIiIsCQkJCQkvKiBpbmkyICovCisgICAgMTE1MjAwTCwJCQkJLyog bWF4X3NwZWVkICovCisgICAgQ0tEX0FUfENLRF9TQnxDS0RfRUN8Q0tEX0RDfENLRF9IV3xDS0Rf U1csIC8qIGNhcGFzICovCisgICAgZ2V0b2sJCQkJLyogb2tfZm4gKi8KK307CisKK3N0YXRpYwor TURNSU5GIFNVUFJBU09OID0JCQkvKiBTdXByYVNvbmljICovCisgICAgeworICAgICJEaWFtb25k IFN1cHJhU29uaWMgMjg4VisiLAkJLyogRGlhbW9uZCBNdWx0aW1lZGlhIFN5c3RlbXMgSW5jICov CisgICAgIkFUUFwwMTUiLAkJCQkvKiBwdWxzZSBjb21tYW5kICovCisgICAgIkFUVFwwMTUiLAkJ CQkvKiB0b25lIGNvbW1hbmQgKi8KKyAgICAzNSwJCQkJCS8qIGRpYWxfdGltZSAqLworICAgICIs IiwJCQkJLyogcGF1c2VfY2hhcnMgKi8KKyAgICAyLAkJCQkJLyogcGF1c2VfdGltZSAqLworI2lm ZGVmIE9TMgorICAgICJBVFEwRTFWMU4xVzBYNFkwJlMwJkMxJkQyXDAxNSIsCS8qIHdha2Vfc3Ry ICovCisjZWxzZQorI2lmZGVmIFZNUworICAgICJBVFEwRTFOMVcwWDRZMCZTMVwwMTUiLAkJLyog d2FrZV9zdHIgKi8KKyNlbHNlCisgICAgIkFUUTBFMU4xVzBYNFkwXDAxNSIsCQkvKiB3YWtlX3N0 ciAqLworI2VuZGlmIC8qIFZNUyAqLworI2VuZGlmIC8qIE9TMiAqLworICAgIDAsCQkJCQkvKiB3 YWtlX3JhdGUgKi8KKyAgICAiT0tcMDE1IiwJCQkJLyogd2FrZV9wcm9tcHQgKi8KKyAgICAiIiwJ CQkJCS8qIGRtb2RlX3N0ciAqLworICAgICIiLAkJCQkJLyogZG1vZGVfcHJvbXB0ICovCisgICAg IkFURCVzXDAxNSIsCQkJLyogZGlhbF9zdHIgKi8KKyAgICAwLAkJCQkJLyogZGlhbF9yYXRlICov CisgICAgMTEwMCwJCQkJLyogZXNjX3RpbWUgKi8KKyAgICA0MywJCQkJCS8qIGVzY19jaGFyICov CisgICAgIkFUUTBIMFwwMTUiLAkJCS8qIGh1cF9zdHIgKi8KKyAgICAiQVQmSzNcMDE1IiwJCQkv KiBod2ZjX3N0ciAqLworICAgICJBVCZLNFwwMTUiLAkJCS8qIHN3ZmNfc3RyICovCisgICAgIkFU JktcMDE1IiwJCQkJLyogbm9mY19zdHIgKi8KKyAgICAiQVQmUTVcXE4zUzQ4PTdcMDE1IiwJCS8q IGVjX29uX3N0ciAqLworICAgICJBVCZRMFxcTjFcMDE1IiwJCQkvKiBlY19vZmZfc3RyICovCisg ICAgIkFUJUMzUzQ2PTEzOFwwMTUiLAkJCS8qIGRjX29uX3N0ciAqLworICAgICJBVCVDMFM0Nj0x MzZcMDE1IiwJCQkvKiBkY19vZmZfc3RyICovCisgICAgIkFUUzA9MVwwMTUiLAkJCS8qIGFhX29u X3N0ciAqLworICAgICJBVFMwPTBcMDE1IiwJCQkvKiBhYV9vZmZfc3RyICovCisgICAgIiIsCQkJ CQkvKiBzYl9vbl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHNiX29mZl9zdHIgKi8KKyAgICAiQVRN MVwwMTUiLAkJCQkvKiBzcF9vbl9zdHIgKi8KKyAgICAiQVRNXDAxNSIsCQkJCS8qIHNwX29mZl9z dHIgKi8KKyAgICAiQVRMXDAxNSIsCQkJCS8qIHZvbDFfc3RyICovCisgICAgIkFUTDJcMDE1IiwJ CQkJLyogdm9sMl9zdHIgKi8KKyAgICAiQVRMM1wwMTUiLAkJCQkvKiB2b2wzX3N0ciAqLworICAg ICJBVFgzXDAxNSIsCQkJCS8qIGlnbm9yZWR0ICovCisgICAgIiIsCQkJCQkvKiBpbmkyICovCisg ICAgMTE1MjAwTCwJCQkJLyogbWF4X3NwZWVkICovCisgICAgQ0tEX0FUfENLRF9TQnxDS0RfRUN8 Q0tEX0RDfENLRF9IV3xDS0RfU1csIC8qIGNhcGFzICovCisgICAgZ2V0b2sJCQkJLyogb2tfZm4g Ki8KK307CisKK3N0YXRpYworTURNSU5GIEJFU1REQVRBID0JCQkvKiBCZXN0IERhdGEgKi8KKyAg ICB7CisgICAgIkJlc3QgRGF0YSBGYXggTW9kZW0iLAkJLyogQmVzdCBEYXRhIEZheCBNb2RlbSAq LworICAgICJBVFBcMDE1IiwJCQkJLyogcHVsc2UgY29tbWFuZCAqLworICAgICJBVFRcMDE1IiwJ CQkJLyogdG9uZSBjb21tYW5kICovCisgICAgMzUsCQkJCQkvKiBkaWFsX3RpbWUgKi8KKyAgICAi LCIsCQkJCS8qIHBhdXNlX2NoYXJzICovCisgICAgMiwJCQkJCS8qIHBhdXNlX3RpbWUgKi8KKyNp ZmRlZiBPUzIKKyAgICAiQVRRMEUxVjFOMVcwWDRZMCZTMCZDMSZEMlwwMTUiLAkvKiB3YWtlX3N0 ciAqLworI2Vsc2UKKyNpZmRlZiBWTVMKKyAgICAiQVRRMEUxTjFXMFg0WTAmUzFcMDE1IiwJCS8q IHdha2Vfc3RyICovCisjZWxzZQorICAgICJBVFEwRTFOMVcwWDRZMFwwMTUiLAkJLyogd2FrZV9z dHIgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAwLAkJCQkJLyog d2FrZV9yYXRlICovCisgICAgIk9LXDAxNSIsCQkJCS8qIHdha2VfcHJvbXB0ICovCisgICAgIiIs CQkJCQkvKiBkbW9kZV9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGRtb2RlX3Byb21wdCAqLworICAg ICJBVEQlc1wwMTUiLAkJCS8qIGRpYWxfc3RyICovCisgICAgMCwJCQkJCS8qIGRpYWxfcmF0ZSAq LworICAgIDExMDAsCQkJCS8qIGVzY190aW1lICovCisgICAgNDMsCQkJCQkvKiBlc2NfY2hhciAq LworICAgICJBVFEwSDBcMDE1IiwJCQkvKiBodXBfc3RyICovCisgICAgIkFUJkszXDAxNSIsCQkJ LyogaHdmY19zdHIgKi8KKyAgICAiQVQmSzRcMDE1IiwJCQkvKiBzd2ZjX3N0ciAqLworICAgICJB VCZLXDAxNSIsCQkJCS8qIG5vZmNfc3RyICovCisgICAgIkFUJlE2XFxOM1wwMTUiLAkJCS8qIGVj X29uX3N0ciAqLworICAgICJBVCZRMFxcTjFcMDE1IiwJCQkvKiBlY19vZmZfc3RyICovCisgICAg IkFUJUMzXDAxNSIsCQkJLyogZGNfb25fc3RyICovCisgICAgIkFUJUMwXDAxNSIsCQkJLyogZGNf b2ZmX3N0ciAqLworICAgICJBVFMwPTFcMDE1IiwJCQkvKiBhYV9vbl9zdHIgKi8KKyAgICAiQVRT MD0wXDAxNSIsCQkJLyogYWFfb2ZmX3N0ciAqLworICAgICJBVFxcTjNcMDE1IiwJCQkvKiBzYl9v bl9zdHIgKi8KKyAgICAiQVRcXE4wXDAxNSIsCQkJLyogc2Jfb2ZmX3N0ciAqLworICAgICJBVE0x XDAxNSIsCQkJCS8qIHNwX29uX3N0ciAqLworICAgICJBVE0wXDAxNSIsCQkJCS8qIHNwX29mZl9z dHIgKi8KKyAgICAiQVRMMVwwMTUiLAkJCQkvKiB2b2wxX3N0ciAqLworICAgICJBVEwyXDAxNSIs CQkJCS8qIHZvbDJfc3RyICovCisgICAgIkFUTDNcMDE1IiwJCQkJLyogdm9sM19zdHIgKi8KKyAg ICAiQVRYM1wwMTUiLAkJCQkvKiBpZ25vcmVkdCAqLworICAgICIiLAkJCQkJLyogaW5pMiAqLwor ICAgIDU3NjAwTCwJCQkJLyogbWF4X3NwZWVkICovCisgICAgQ0tEX0FUfENLRF9TQnxDS0RfRUN8 Q0tEX0RDfENLRF9IV3xDS0RfU1csIC8qIGNhcGFzICovCisgICAgZ2V0b2sJCQkJLyogb2tfZm4g Ki8KK307CisKK3N0YXRpYworTURNSU5GIEFUVDE5MDAgPQkJCS8qIEFUJlQgU2VjdXJlIERhdGEg U1RVIElJSSAxOTAwICovCisgICAgeworICAgICJBVCZUIFNlY3VyZSBEYXRhIFNUVSBJSUkgTW9k ZWwgMTkwMCIsIC8qIG5hbWUgKi8KKyAgICAiIiwJCQkJCS8qIHB1bHNlIGNvbW1hbmQgKi8KKyAg ICAiIiwJCQkJCS8qIHRvbmUgY29tbWFuZCAqLworICAgIDM1LAkJCQkJLyogZGlhbF90aW1lICov CisgICAgIiwiLAkJCQkvKiBwYXVzZV9jaGFycyAqLworICAgIDIsCQkJCQkvKiBwYXVzZV90aW1l ICovCisjaWZkZWYgT1MyCisgICAgIkFUUTBFMVYxWDRcMDE1IiwJCQkvKiB3YWtlX3N0ciAqLwor I2Vsc2UKKyAgICAiQVRRMEUxWDRcMDE1IiwJCQkvKiB3YWtlX3N0ciAqLworI2VuZGlmIC8qIE9T MiAqLworICAgIDAsCQkJCQkvKiB3YWtlX3JhdGUgKi8KKyAgICAiT0tcMDE1IiwJCQkJLyogd2Fr ZV9wcm9tcHQgKi8KKyAgICAiIiwJCQkJCS8qIGRtb2RlX3N0ciAqLworICAgICIiLAkJCQkJLyog ZG1vZGVfcHJvbXB0ICovCisgICAgIkFURCVzXDAxNSIsCQkJLyogZGlhbF9zdHIgKi8KKyAgICAw LAkJCQkJLyogZGlhbF9yYXRlICovCisgICAgMTEwMCwJCQkJLyogZXNjX3RpbWUgKi8KKyAgICA0 MywJCQkJCS8qIGVzY19jaGFyICovCisgICAgIkFUUTBIMFwwMTUiLAkJCS8qIGh1cF9zdHIgKi8K KyAgICAiIiwJCQkJCS8qIGh3ZmNfc3RyICovCisgICAgIiIsCQkJCQkvKiBzd2ZjX3N0ciAqLwor ICAgICIiLAkJCQkJLyogbm9mY19zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGVjX29uX3N0ciAqLwor ICAgICIiLAkJCQkJLyogZWNfb2ZmX3N0ciAqLworICAgICIiLAkJCQkJLyogZGNfb25fc3RyICov CisgICAgIiIsCQkJCQkvKiBkY19vZmZfc3RyICovCisgICAgIkFUUzA9MVwwMTUiLAkJCS8qIGFh X29uX3N0ciAqLworICAgICJBVFMwPTBcMDE1IiwJCQkvKiBhYV9vZmZfc3RyICovCisgICAgIiIs CQkJCQkvKiBzYl9vbl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHNiX29mZl9zdHIgKi8KKyAgICAi IiwJCQkJCS8qIHNwX29uX3N0ciAqLworICAgICIiLAkJCQkJLyogc3Bfb2ZmX3N0ciAqLworICAg ICIiLAkJCQkJLyogdm9sMV9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHZvbDJfc3RyICovCisgICAg IiIsCQkJCQkvKiB2b2wzX3N0ciAqLworICAgICIiLAkJCQkJLyogaWdub3JlZHQgKi8KKyAgICAi IiwJCQkJCS8qIGluaTIgKi8KKyAgICA5NjAwTCwJCQkJLyogbWF4X3NwZWVkICovCisgICAgQ0tE X0FUfENLRF9TQnxDS0RfSFcsCQkvKiBjYXBhcyAqLworICAgIGdldG9rCQkJCS8qIG9rX2ZuICov Cit9OworCisvKgorICBFeHBlcmltZW50YXRpb24gc2hvd2VkIHRoYXQgaGFyZGx5IGFueSBvZiB0 aGUgZG9jdW1lbnRlZCBjb21tYW5kcyBkaWQKKyAgYW55dGhpbmcgb3RoZXIgdGhhdCBwcmludCBF UlJPUi4gIEF0IGZpcnN0IHRoZXJlIHdhcyBubyBjb21tdW5pY2F0aW9uIGF0CisgIGFsbCBhdCA5 NjAwIGJwcyAtLSB0dXJucyBvdXQgdGhlIGludGVyZmFjZSBzcGVlZCB3YXMgc3R1Y2sgYXQgMjQw MC4KKyAgQVRTMjg9MTMwIChnaXZlbiBhdCAyNDAwIGJwcykgYWxsb3dlZCBpdCB0byB3b3JrIGF0 IDk2MDAuCisqLworc3RhdGljCitNRE1JTkYgQVRUMTkxMCA9CQkJLyogQVQmVCBTZWN1cmUgRGF0 YSBTVFUgSUlJIDE5MTAgKi8KKyAgICB7CQkJCQkvKiBBZGRzIFYuMzJiaXMsIFYuNDIsIFYuNDJi aXMgKi8KKyAgICAiQVQmVCBTZWN1cmUgRGF0YSBTVFUgSUlJIE1vZGVsIDE5MTAiLCAvKiBuYW1l ICovCisKKy8qIEJlbGlldmUgaXQgb3Igbm90LCAiQVRUIiBhbmQgIkFUUCIgcmVzdWx0IGluIEVS Uk9SICovCisKKyAgICAiIiwJCQkJCS8qIHB1bHNlIGNvbW1hbmQgKi8KKyAgICAiIiwJCQkJCS8q IHRvbmUgY29tbWFuZCAqLworICAgIDM1LAkJCQkJLyogZGlhbF90aW1lICovCisgICAgIiwiLAkJ CQkvKiBwYXVzZV9jaGFycyAqLworICAgIDIsCQkJCQkvKiBwYXVzZV90aW1lICovCisjaWZkZWYg T1MyCisgICAgIkFUUTBFMVYxWDRcMDE1IiwJCQkvKiB3YWtlX3N0ciAqLworI2Vsc2UKKyAgICAi QVRRMEUxWDRcMDE1IiwJCQkvKiB3YWtlX3N0ciAqLworI2VuZGlmIC8qIE9TMiAqLworICAgIDAs CQkJCQkvKiB3YWtlX3JhdGUgKi8KKyAgICAiT0tcMDE1IiwJCQkJLyogd2FrZV9wcm9tcHQgKi8K KyAgICAiIiwJCQkJCS8qIGRtb2RlX3N0ciAqLworICAgICIiLAkJCQkJLyogZG1vZGVfcHJvbXB0 ICovCisgICAgIkFURCVzXDAxNSIsCQkJLyogZGlhbF9zdHIgKi8KKyAgICAwLAkJCQkJLyogZGlh bF9yYXRlICovCisgICAgMTEwMCwJCQkJLyogZXNjX3RpbWUgKi8KKyAgICA0MywJCQkJCS8qIGVz Y19jaGFyICovCisgICAgIkFUUTBIMFwwMTUiLAkJCS8qIGh1cF9zdHIgKi8KKyAgICAiIiwJCQkJ CS8qIGh3ZmNfc3RyICovCisgICAgIiIsCQkJCQkvKiBzd2ZjX3N0ciAqLworICAgICIiLAkJCQkJ Lyogbm9mY19zdHIgKi8KKyNpZmRlZiBDT01NRU5UCisvKiBUaGVzZSBhcmUgZXZpZGVudGx5IHJl YWQtb25seSByZWdpc3RlcnMgKi8KKyAgICAiQVRTNDY9MTM4UzQ3PTBcMDE1IiwJCS8qIGVjX29u X3N0ciAqLworICAgICJBVFM0Nj0xMzhTNDc9MTI4XDAxNSIsCQkvKiBlY19vZmZfc3RyICovCisg ICAgIkFUUzQ2PTEzOFM0Nz0wXDAxNSIsCQkvKiBkY19vbl9zdHIgKi8KKyAgICAiQVRTNDY9MTM4 UzQ3PTEyOFwwMTUiLAkJLyogZGNfb2ZmX3N0ciAqLworI2Vsc2UKKyAgICAiIiwKKyAgICAiIiwK KyAgICAiIiwKKyAgICAiIiwKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgIkFUUzA9MVwwMTUi LAkJCS8qIGFhX29uX3N0ciAqLworICAgICJBVFMwPTBcMDE1IiwJCQkvKiBhYV9vZmZfc3RyICov CisgICAgIiIsCQkJCQkvKiBzYl9vbl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHNiX29mZl9zdHIg Ki8KKyAgICAiIiwJCQkJCS8qIHNwX29uX3N0ciAqLworICAgICIiLAkJCQkJLyogc3Bfb2ZmX3N0 ciAqLworICAgICIiLAkJCQkJLyogdm9sMV9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHZvbDJfc3Ry ICovCisgICAgIiIsCQkJCQkvKiB2b2wzX3N0ciAqLworICAgICIiLAkJCQkJLyogaWdub3JlZHQg Ki8KKyAgICAiIiwJCQkJCS8qIGluaTIgKi8KKyAgICA5NjAwTCwJCQkJLyogbWF4X3NwZWVkICov CisgICAgQ0tEX0FUfENLRF9TQnxDS0RfRUN8Q0tEX0RDfENLRF9IVywJLyogY2FwYXMgKi8KKyAg ICBnZXRvawkJCQkvKiBva19mbiAqLworfTsKKworc3RhdGljCitNRE1JTkYgS0VFUElOVE9VQ0gg PQkJCS8qIEFUJlQgS2VlcGluVG91Y2ggQ2FyZCBNb2RlbSAqLworICAgIHsKKyAgICAiQVQmVCBL ZWVwaW5Ub3VjaCBWLjMyYmlzIENhcmQgTW9kZW0iLCAvKiBOYW1lICovCisgICAgIkFUUFwwMTUi LAkJCQkvKiBwdWxzZSBjb21tYW5kICovCisgICAgIkFUVFwwMTUiLAkJCQkvKiB0b25lIGNvbW1h bmQgKi8KKyAgICAzNSwJCQkJCS8qIGRpYWxfdGltZSAqLworICAgICIsIiwJCQkJLyogcGF1c2Vf Y2hhcnMgKi8KKyAgICAyLAkJCQkJLyogcGF1c2VfdGltZSAqLworI2lmZGVmIE9TMgorLyogVGhp cyB1c2VkIHRvIGluY2x1ZGUgJkMxJlMwJkQyK1EwIGJ1dCB0aGF0IGdpdmVzIEVSUk9SICovCisg ICAgIkFUUTBFMVYxWDQmUzAmQzEmRDJcXEs1XDAxNSIsCS8qIHdha2Vfc3RyICovCisjZWxzZQor I2lmZGVmIFZNUworICAgICJBVFEwRTFYNCZTMVxcSzVcMDE1IiwJCS8qIHdha2Vfc3RyICovCisj ZWxzZQorICAgICJBVFEwRTFYNFxcSzVcMDE1IiwJCQkvKiB3YWtlX3N0ciAqLworI2VuZGlmIC8q IFZNUyAqLworI2VuZGlmIC8qIE9TMiAqLworICAgIDAsCQkJCQkvKiB3YWtlX3JhdGUgKi8KKyAg ICAiT0tcMDE1IiwJCQkJLyogd2FrZV9wcm9tcHQgKi8KKyAgICAiIiwJCQkJCS8qIGRtb2RlX3N0 ciAqLworICAgICIiLAkJCQkJLyogZG1vZGVfcHJvbXB0ICovCisgICAgIkFURCVzXDAxNSIsCQkJ LyogZGlhbF9zdHIgKi8KKyAgICAwLAkJCQkJLyogZGlhbF9yYXRlICovCisgICAgMTEwMCwJCQkJ LyogZXNjX3RpbWUgKi8KKyAgICA0MywJCQkJCS8qIGVzY19jaGFyICovCisgICAgIkFUUTBIMFww MTUiLAkJCS8qIGh1cF9zdHIgKi8KKyAgICAiQVRcXFEzXDAxNSIsCQkJLyogaHdmY19zdHIgKi8K KyAgICAiQVRcXFExXFxYMFwwMTUiLAkJCS8qIHN3ZmNfc3RyICovCisgICAgIkFUXFxRMFwwMTUi LAkJCS8qIG5vZmNfc3RyICovCisgICAgIkFUXFxOMy1KMVwwMTUiLAkJCS8qIGVjX29uX3N0ciAq LworICAgICJBVFxcTjFcMDE1IiwJCQkvKiBlY19vZmZfc3RyICovCisgICAgIkFUJUMzXCJIM1ww MTUiLAkJCS8qIGRjX29uX3N0ciAqLworICAgICJBVCVDMFwiSDBcMDE1IiwJCQkvKiBkY19vZmZf c3RyICovCisgICAgIkFUUzA9MVwwMTUiLAkJCS8qIGFhX29uX3N0ciAqLworICAgICJBVFMwPTBc MDE1IiwJCQkvKiBhYV9vZmZfc3RyICovCisgICAgIkFUTjBcXEowXDAxNSIsCQkJLyogc2Jfb25f c3RyICovCisgICAgIkFUTjFcXEoxXDAxNSIsCQkJLyogc2Jfb2ZmX3N0ciAqLworICAgICJBVE0x XDAxNSIsCQkJCS8qIHNwX29uX3N0ciAqLworICAgICJBVE0wXDAxNSIsCQkJCS8qIHNwX29mZl9z dHIgKi8KKyAgICAiIiwJCQkJCS8qIHZvbDFfc3RyICovCisgICAgIiIsCQkJCQkvKiB2b2wyX3N0 ciAqLworICAgICIiLAkJCQkJLyogdm9sM19zdHIgKi8KKyAgICAiQVRYM1wwMTUiLAkJCQkvKiBp Z25vcmVkdCAqLworICAgICIiLAkJCQkJLyogaW5pMiAqLworICAgIDU3NjAwTCwJCQkJLyogbWF4 X3NwZWVkICovCisgICAgQ0tEX0FUfENLRF9TQnxDS0RfRUN8Q0tEX0RDfENLRF9IV3xDS0RfU1cs IC8qIGNhcGFzICovCisgICAgZ2V0b2sJCQkJLyogb2tfZm4gKi8KK307CisKK3N0YXRpYworTURN SU5GIFJPTE1fQVQgPQkJLyogUm9sbSBkYXRhIHBob25lIHdpdGggQVQgY29tbWFuZCBzZXQgKi8K KyAgICB7CisgICAgIlJvbG0gMjQ0UEMgb3IgNjAwIFNlcmllcyB3aXRoIEFUIENvbW1hbmQgU2V0 IiwKKyAgICAiIiwJCQkJCS8qIHB1bHNlIGNvbW1hbmQgKi8KKyAgICAiIiwJCQkJCS8qIHRvbmUg Y29tbWFuZCAqLworICAgIDM1LAkJCQkJLyogZGlhbF90aW1lICovCisgICAgIiwiLAkJCQkvKiBw YXVzZV9jaGFycyAqLworICAgIDIsCQkJCQkvKiBwYXVzZV90aW1lICovCisjaWZkZWYgT1MyCisg ICAgIkFURTFRMFYxXDAxNSIsCQkJLyogd2FrZV9zdHIgKi8KKyNlbHNlCisgICAgIkFUUTBcMDE1 IiwJCQkJLyogd2FrZV9zdHIgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAwLAkJCQkJLyogd2Fr ZV9yYXRlICovCisgICAgIk9LXDAxNSIsCQkJCS8qIHdha2VfcHJvbXB0ICovCisgICAgIiIsCQkJ CQkvKiBkbW9kZV9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGRtb2RlX3Byb21wdCAqLworICAgICJB VERUJXNcMDE1IiwJCQkvKiBkaWFsX3N0ciAtLSBhbHdheXMgVG9uZSAqLworICAgIDAsCQkJCQkv KiBkaWFsX3JhdGUgKi8KKyAgICAxMTAwLAkJCQkvKiBlc2NfdGltZSAqLworICAgIDQzLAkJCQkJ LyogZXNjX2NoYXIgKi8KKyAgICAiQVRRMEgwXDAxNSIsCQkJLyogaHVwX3N0ciAqLworICAgICIi LAkJCQkJLyogaHdmY19zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHN3ZmNfc3RyICovCisgICAgIiIs CQkJCQkvKiBub2ZjX3N0ciAqLworICAgICIiLAkJCQkJLyogZWNfb25fc3RyICovCisgICAgIiIs CQkJCQkvKiBlY19vZmZfc3RyICovCisgICAgIiIsCQkJCQkvKiBkY19vbl9zdHIgKi8KKyAgICAi IiwJCQkJCS8qIGRjX29mZl9zdHIgKi8KKyAgICAiQVRTMD0xXDAxNSIsCQkJLyogYWFfb25fc3Ry ICovCisgICAgIkFUUzA9MFwwMTUiLAkJCS8qIGFhX29mZl9zdHIgKi8KKyAgICAiIiwJCQkJCS8q IHNiX29uX3N0ciAqLworICAgICIiLAkJCQkJLyogc2Jfb2ZmX3N0ciAqLworICAgICIiLAkJCQkJ Lyogc3Bfb25fc3RyICovCisgICAgIiIsCQkJCQkvKiBzcF9vZmZfc3RyICovCisgICAgIiIsCQkJ CQkvKiB2b2wxX3N0ciAqLworICAgICIiLAkJCQkJLyogdm9sMl9zdHIgKi8KKyAgICAiIiwJCQkJ CS8qIHZvbDNfc3RyICovCisgICAgIiIsCQkJCQkvKiBpZ25vcmVkdCAqLworICAgICIiLAkJCQkJ LyogaW5pMiAqLworICAgIDE5MjAwTCwJCQkJLyogbWF4X3NwZWVkICovCisgICAgQ0tEX0FULAkJ CQkvKiBjYXBhcyAqLworICAgIGdldG9rCQkJCS8qIG9rX2ZuICovCit9OworCitzdGF0aWMKK01E TUlORiBBVExBUyA9CQkJCS8qIEF0bGFzIC8gTmV3Y29tIGl4ZkMgMzMuNiAqLworICAgIHsKKyAg ICAiQXRsYXMgLyBOZXdjb20gMzM2MDBpeGZDIERhdGEvRmF4IE1vZGVtIiwgLyogTmFtZSAqLwor ICAgICJBVFBcMDE1IiwJCQkJLyogcHVsc2UgY29tbWFuZCAqLworICAgICJBVFRcMDE1IiwJCQkJ LyogdG9uZSBjb21tYW5kICovCisgICAgMzUsCQkJCQkvKiBkaWFsX3RpbWUgKi8KKyAgICAiLCIs CQkJCS8qIHBhdXNlX2NoYXJzICovCisgICAgMiwJCQkJCS8qIHBhdXNlX3RpbWUgKi8KKyNpZmRl ZiBPUzIKKyAgICAiQVRaMCZGUTBWMSZDMSZEMlwwMTUiLAkJLyogd2FrZV9zdHIgKi8KKyNlbHNl CisgICAgIkFUWjAmRlEwVjFcMDE1IiwJCQkvKiB3YWtlX3N0ciAqLworI2VuZGlmIC8qIE9TMiAq LworICAgIDAsCQkJCQkvKiB3YWtlX3JhdGUgKi8KKyAgICAiT0tcMDE1IiwJCQkJLyogd2FrZV9w cm9tcHQgKi8KKyAgICAiIiwJCQkJCS8qIGRtb2RlX3N0ciAqLworICAgICIiLAkJCQkJLyogZG1v ZGVfcHJvbXB0ICovCisgICAgIkFURCVzXDAxNSIsCQkJLyogZGlhbF9zdHIgKi8KKyAgICAwLAkJ CQkJLyogZGlhbF9yYXRlICovCisgICAgMTEwMCwJCQkJLyogZXNjX3RpbWUgKi8KKyAgICA0MywJ CQkJCS8qIGVzY19jaGFyICovCisgICAgIkFUUTBIMFwwMTUiLAkJCS8qIGh1cF9zdHIgKi8KKyAg ICAiQVQmSzNcMDE1IiwJCQkvKiBod2ZjX3N0ciAqLworICAgICJBVCZLNFwwMTUiLAkJCS8qIHN3 ZmNfc3RyICovCisgICAgIkFUJkswXDAxNSIsCQkJLyogbm9mY19zdHIgKi8KKyAgICAiQVRcIkgz XDAxNSIsCQkJLyogZWNfb25fc3RyICovCisgICAgIkFUXCJIMFwwMTUiLAkJCS8qIGVjX29mZl9z dHIgKi8KKyAgICAiQVQlQzFcMDE1IiwJCQkvKiBkY19vbl9zdHIgKi8KKyAgICAiQVQlQzBcMDE1 IiwJCQkvKiBkY19vZmZfc3RyICovCisgICAgIkFUUzA9MVwwMTUiLAkJCS8qIGFhX29uX3N0ciAq LworICAgICJBVFMwPTBcMDE1IiwJCQkvKiBhYV9vZmZfc3RyICovCisgICAgIkFUTjBcXEowXDAx NSIsCQkJLyogc2Jfb25fc3RyICovCisgICAgIkFUTjFcXEoxXDAxNSIsCQkJLyogc2Jfb2ZmX3N0 ciAqLworICAgICJBVE0xXDAxNSIsCQkJCS8qIHNwX29uX3N0ciAqLworICAgICJBVE0wXDAxNSIs CQkJCS8qIHNwX29mZl9zdHIgKi8KKyAgICAiQVRMMVwwMTUiLAkJCQkvKiB2b2wxX3N0ciAqLwor ICAgICJBVEwyXDAxNSIsCQkJCS8qIHZvbDJfc3RyICovCisgICAgIkFUTDNcMDE1IiwJCQkJLyog dm9sM19zdHIgKi8KKyAgICAiQVRYM1wwMTUiLAkJCQkvKiBpZ25vcmVkdCAqLworICAgICIiLAkJ CQkJLyogaW5pMiAqLworICAgIDExNTIwMEwsCQkJCS8qIG1heF9zcGVlZCAqLworICAgIENLRF9B VHxDS0RfU0J8Q0tEX0VDfENLRF9EQ3xDS0RfSFd8Q0tEX1NXLCAvKiBjYXBhcyAqLworICAgIGdl dG9rCQkJCS8qIG9rX2ZuICovCit9OworCitzdGF0aWMKK01ETUlORiBDT0RFWCA9IHsJCQkvKiBN b3Rvcm9sYSBDb2RleCAqLworICAgICJNb3Rvcm9sYSBDb2RleCAzMjZYIFNlcmllcyIsCS8qIE5h bWUgLSBBVCZWIHRvIHNlZSBzZXR0aW5ncyAqLworICAgICJBVFBcMDE1IiwJCQkJLyogcHVsc2Ug Y29tbWFuZCAqLworICAgICJBVFRcMDE1IiwJCQkJLyogdG9uZSBjb21tYW5kICovCisgICAgMzUs CQkJCQkvKiBkaWFsX3RpbWUgKi8KKyAgICAiLCIsCQkJCS8qIHBhdXNlX2NoYXJzICovCisgICAg MiwJCQkJCS8qIHBhdXNlX3RpbWUgKi8KKyNpZmRlZiBPUzIKKyAgICAvKiAmTTA9QXN5bmMgKG5v dCBzeW5jKSAqLworICAgIC8qICpNTTA9QXV0b21hdGljIG1vZHVsYXRpb24gbmVnb3RpYXRpb24g Ki8KKyAgICAvKiAqREUyMj1BdXRvbWF0aWMgZGF0YSByYXRlICovCisgICAgIkFUWlEwRTFWMVg0 WTAqREUyMipNTTAmQzEmTTAmUzAmRDJcMDE1IiwgLyogd2FrZV9zdHIgKi8KKyNlbHNlCisjaWZk ZWYgVk1TCisgICAgIkFUWlEwRTFWMVg0WTAqREUyMipNTTAmQzEmTTAmUzFcMDE1IiwgLyogd2Fr ZV9zdHIgKi8KKyNlbHNlCisgICAgIkFUWlEwRTFWMVg0WTAqREUyMipNTTAmQzEmTTBcMDE1IiwJ Lyogd2FrZV9zdHIgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAw LAkJCQkJLyogd2FrZV9yYXRlICovCisgICAgIk9LXDAxNSIsCQkJCS8qIHdha2VfcHJvbXB0ICov CisgICAgIiIsCQkJCQkvKiBkbW9kZV9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGRtb2RlX3Byb21w dCAqLworICAgICJBVEQlc1wwMTUiLAkJCS8qIGRpYWxfc3RyICovCisgICAgMCwJCQkJCS8qIGRp YWxfcmF0ZSAqLworICAgIDExMDAsCQkJCS8qIGVzY190aW1lICovCisgICAgNDMsCQkJCQkvKiBl c2NfY2hhciAqLworICAgICJBVFEwSDBcMDE1IiwJCQkvKiBodXBfc3RyICovCisgICAgIkFUKk1G MSpGTDNcMDE1IiwJCQkvKiBod2ZjX3N0ciAqLworICAgICJBVCpNRjEqRkwxXDAxNSIsCQkJLyog c3dmY19zdHIgKi8KKyAgICAiQVQqTUYwKkZMMFwwMTUiLAkJCS8qIG5vZmNfc3RyICovCisgICAg IkFUKkVDMCpTTTMqU0MwXDAxNSIsCQkvKiBlY19vbl9zdHIgKi8KKyAgICAiQVQqU00wXDAxNSIs CQkJLyogZWNfb2ZmX3N0ciAqLworICAgICJBVCpEQzFcMDE1IiwJCQkvKiBkY19vbl9zdHIgKi8K KyAgICAiQVQqREMwXDAxNSIsCQkJLyogZGNfb2ZmX3N0ciAqLworICAgICJBVCpBQTVTMD0xXDAx NSIsCQkJLyogYWFfb25fc3RyICovCisgICAgIkFUKkFBNVMwPTBcMDE1IiwJCQkvKiBhYV9vZmZf c3RyICovCisgICAgIkFUKlNDMVwwMTUiLAkJCS8qIHNiX29uX3N0ciAqLworICAgICJBVCpTQzBc MDE1IiwJCQkvKiBzYl9vZmZfc3RyICovCisgICAgIkFUTTFcMDE1IiwJCQkJLyogc3Bfb25fc3Ry ICovCisgICAgIkFUTTBcMDE1IiwJCQkJLyogc3Bfb2ZmX3N0ciAqLworICAgICJBVEwxXDAxNSIs CQkJCS8qIHZvbDFfc3RyICovCisgICAgIkFUTDJcMDE1IiwJCQkJLyogdm9sMl9zdHIgKi8KKyAg ICAiQVRMM1wwMTUiLAkJCQkvKiB2b2wzX3N0ciAqLworICAgICJBVFgzKkJEMlwwMTUiLAkJCS8q IGlnbm9yZWR0ICovCisgICAgIiIsCQkJCQkvKiBpbmkyICovCisgICAgMTE1MjAwTCwJCQkJLyog bWF4X3NwZWVkICovCisgICAgQ0tEX0FUfENLRF9TQnxDS0RfRUN8Q0tEX0RDfENLRF9IV3xDS0Rf U1csIC8qIGNhcGFzICovCisgICAgZ2V0b2sJCQkJLyogb2tfZm4gKi8KK307CisKK3N0YXRpYwor TURNSU5GIE1UNTYzNFpQWCA9CQkJLyogTXVsdGl0ZWNoICovCisgICAgeworICAgICJNdWx0aXRl Y2ggTVQ1NjM0WlBYIiwJCS8qIG5hbWUgKi8KKyAgICAiQVRQXDAxNSIsCQkJCS8qIHB1bHNlIGNv bW1hbmQgKi8KKyAgICAiQVRUXDAxNSIsCQkJCS8qIHRvbmUgY29tbWFuZCAqLworICAgIDM1LAkJ CQkJLyogZGlhbF90aW1lICovCisgICAgIiwiLAkJCQkvKiBwYXVzZV9jaGFycyAqLworICAgIDIs CQkJCQkvKiBwYXVzZV90aW1lICovCisjaWZkZWYgT1MyCisgICAgIkFURTFRMFYxWDQmUzAmQzEm RDImUTBcMDE1IiwJLyogd2FrZV9zdHIgKi8KKyNlbHNlCisjaWZkZWYgVk1TCisgICAgIkFUUTBF MVg0JlMxJlEwXDAxNSIsCQkvKiB3YWtlX3N0ciAqLworI2Vsc2UKKyAgICAiQVRRMEUxWDQmUTBc MDE1IiwJCQkvKiB3YWtlX3N0ciAqLworI2VuZGlmIC8qIFZNUyAqLworI2VuZGlmIC8qIE9TMiAq LworICAgIDAsCQkJCQkvKiB3YWtlX3JhdGUgKi8KKyAgICAiT0tcMDE1IiwJCQkJLyogd2FrZV9w cm9tcHQgKi8KKyAgICAiIiwJCQkJCS8qIGRtb2RlX3N0ciAqLworICAgICIiLAkJCQkJLyogZG1v ZGVfcHJvbXB0ICovCisgICAgIkFURCVzXDAxNSIsCQkJLyogZGlhbF9zdHIgKi8KKyAgICAwLAkJ CQkJLyogZGlhbF9yYXRlICovCisgICAgMTEwMCwJCQkJLyogZXNjX3RpbWUgKi8KKyAgICA0MywJ CQkJCS8qIGVzY19jaGFyICovCisgICAgIkFUUTBIMFwwMTUiLAkJCS8qIGh1cF9zdHIgKi8KKyAg ICAiQVQmSzNcMDE1IiwJCQkvKiBod2ZjX3N0ciAqLworICAgICJBVCZLNFwwMTUiLAkJCS8qIHN3 ZmNfc3RyICovCisgICAgIkFUJkswXDAxNSIsCQkJLyogbm9mY19zdHIgKi8KKyAgICAiQVRcXE4z XDAxNSIsCQkJLyogZWNfb25fc3RyICovCisgICAgIkFUXFxOMVwwMTUiLAkJCS8qIGVjX29mZl9z dHIgKi8KKyAgICAiQVQlQzFcMDE1IiwJCQkvKiBkY19vbl9zdHIgKi8KKyAgICAiQVQlQzBcMDE1 IiwJCQkvKiBkY19vZmZfc3RyICovCisgICAgIkFUUzA9MVwwMTUiLAkJCS8qIGFhX29uX3N0ciAq LworICAgICJBVFMwPTBcMDE1IiwJCQkvKiBhYV9vZmZfc3RyICovCisgICAgIkFUXFxKMFwwMTUi LAkJCS8qIHNiX29uX3N0ciAqLworICAgICJBVFxcSjFcMDE1IiwJCQkvKiBzYl9vZmZfc3RyIChO T1QgU1VQUE9SVEVEKSAqLworICAgICJBVE0xXDAxNSIsCQkJCS8qIHNwX29uX3N0ciAqLworICAg ICJBVE0wXDAxNSIsCQkJCS8qIHNwX29mZl9zdHIgKi8KKyAgICAiQVRMMVwwMTUiLAkJCQkvKiB2 b2wxX3N0ciAqLworICAgICJBVEwyXDAxNSIsCQkJCS8qIHZvbDJfc3RyICovCisgICAgIkFUTDNc MDE1IiwJCQkJLyogdm9sM19zdHIgKi8KKyAgICAiQVRYM1wwMTUiLAkJCQkvKiBpZ25vcmVkdCAq LworICAgICIiLAkJCQkJLyogaW5pMiAqLworICAgIDExNTIwMEwsCQkJCS8qIG1heF9zcGVlZCAq LworICAgIENLRF9BVHxDS0RfU0J8Q0tEX0VDfENLRF9EQ3xDS0RfSFd8Q0tEX1NXLCAvKiBjYXBh cyAqLworICAgIGdldG9rCQkJCS8qIG9rX2ZuICovCit9OworCitzdGF0aWMKK01ETUlORiBNT1RT TTU2ID0JCQkvKiBNb3Rvcm9sYSBTTTU2IENoaXBzZXQgKi8KKyAgICB7CisgICAgIk1vdG9yb2xh IFNNNTYgVi45MCBjaGlwc2V0IiwJLyogbmFtZSAqLworICAgICJBVFBcMDE1IiwJCQkJLyogcHVs c2UgY29tbWFuZCAqLworICAgICJBVFRcMDE1IiwJCQkJLyogdG9uZSBjb21tYW5kICovCisgICAg MzUsCQkJCQkvKiBkaWFsX3RpbWUgKi8KKyAgICAiLCIsCQkJCS8qIHBhdXNlX2NoYXJzICovCisg ICAgMiwJCQkJCS8qIHBhdXNlX3RpbWUgKi8KKyNpZmRlZiBPUzIKKyAgICAiQVRRMFYxWDQmUzAm QzEmRDIqTU0xNlwwMTUiLAkvKiB3YWtlX3N0ciAqLworI2Vsc2UKKyNpZmRlZiBWTVMKKyAgICAi QVRRMFYxWDQmUzEmQzEmRDIqTU0xNlwwMTUiLAkvKiB3YWtlX3N0ciAqLworI2Vsc2UKKyAgICAi QVRRMFYxWDQmQzEmRDIqTU0xNlwwMTUiLAkJLyogd2FrZV9zdHIgKi8KKyNlbmRpZiAvKiBWTVMg Ki8KKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAwLAkJCQkJLyogd2FrZV9yYXRlICovCisgICAgIk9L XDAxNSIsCQkJCS8qIHdha2VfcHJvbXB0ICovCisgICAgIiIsCQkJCQkvKiBkbW9kZV9zdHIgKi8K KyAgICAiIiwJCQkJCS8qIGRtb2RlX3Byb21wdCAqLworICAgICJBVEQlc1wwMTUiLAkJCS8qIGRp YWxfc3RyICovCisgICAgMCwJCQkJCS8qIGRpYWxfcmF0ZSAqLworICAgIDExMDAsCQkJCS8qIGVz Y190aW1lICovCisgICAgNDMsCQkJCQkvKiBlc2NfY2hhciAqLworICAgICJBVFEwSDBcMDE1IiwJ CQkvKiBodXBfc3RyICovCisgICAgIkFUXFxRM1wwMTUiLAkJCS8qIGh3ZmNfc3RyICovCisgICAg IkFUXFxRMVwwMTUiLAkJCS8qIHN3ZmNfc3RyICovCisgICAgIkFUXFxRMFwwMTUiLAkJCS8qIG5v ZmNfc3RyICovCisgICAgIkFUXFxON1wwMTUiLAkJCS8qIGVjX29uX3N0ciAqLworICAgICJBVFxc TjFcMDE1IiwJCQkvKiBlY19vZmZfc3RyICovCisgICAgIkFUJUMxXDAxNSIsCQkJLyogZGNfb25f c3RyICovCisgICAgIkFUJUMwXDAxNSIsCQkJLyogZGNfb2ZmX3N0ciAqLworICAgICJBVFMwPTFc MDE1IiwJCQkvKiBhYV9vbl9zdHIgKi8KKyAgICAiQVRTMD0wXDAxNSIsCQkJLyogYWFfb2ZmX3N0 ciAqLworICAgICJBVFxcSjBcMDE1IiwJCQkvKiBzYl9vbl9zdHIgKi8KKyAgICAiQVRcXEoxXDAx NSIsCQkJLyogc2Jfb2ZmX3N0ciAoTk9UIFNVUFBPUlRFRCkgKi8KKyAgICAiQVRNMVwwMTUiLAkJ CQkvKiBzcF9vbl9zdHIgKi8KKyAgICAiQVRNMFwwMTUiLAkJCQkvKiBzcF9vZmZfc3RyICovCisg ICAgIkFUTDFcMDE1IiwJCQkJLyogdm9sMV9zdHIgKi8KKyAgICAiQVRMMlwwMTUiLAkJCQkvKiB2 b2wyX3N0ciAqLworICAgICJBVEwzXDAxNSIsCQkJCS8qIHZvbDNfc3RyICovCisgICAgIkFUWDNc MDE1IiwJCQkJLyogaWdub3JlZHQgKi8KKyAgICAiIiwJCQkJCS8qIGluaTIgKi8KKyAgICAxMTUy MDBMLAkJCQkvKiBtYXhfc3BlZWQgKi8KKyAgICBDS0RfQVR8Q0tEX1NCfENLRF9FQ3xDS0RfREN8 Q0tEX0hXfENLRF9TVywgLyogY2FwYXMgKi8KKyAgICBnZXRvawkJCQkvKiBva19mbiAqLworfTsK KyNlbmRpZiAvKiBNSU5JRElBTCAqLworCisvKiBFTkQgTURNSU5GIFNUUlVDVCBERUZJTklUSU9O UyAqLworCisvKgorICBUYWJsZSB0byBjb252ZXJ0IG1vZGVtIG51bWJlcnMgdG8gTURNSU5GIHN0 cnVjdCBwb2ludGVycy4KKyAgVGhlIGVudHJpZXMgTVVTVCBiZSBpbiBhc2NlbmRpbmcgb3JkZXIg YnkgbW9kZW0gbnVtYmVyLCB3aXRob3V0IGFueQorICAiZ2FwcyIgaW4gdGhlIG51bWJlcnMsIGFu ZCBzdGFydGluZyBmcm9tIG9uZSAoMSkuCisqLworCitNRE1JTkYgKm1vZGVtcFtdID0geworI2lm ZGVmIE1JTklESUFMCisgICAgTlVMTCwJCQkJLyogIDAgKi8KKyAgICAmQ0NJVFQsCQkJCS8qICAx ICovCisgICAgJkhBWUVTLAkJCQkvKiAgMiAqLworICAgICZVTktOT1dOLAkJCQkvKiAgMyAqLwor ICAgICZEVU1NWSwJCQkJLyogIDQgKi8KKyAgICAmR0VORVJJQywJCQkJLyogIDUgKi8KKyAgICAm SVRVVFYyNTAJCQkJLyogIDYgKi8KKyNlbHNlICAvKiBOb3QgTUlOSURJQUwgKi8KKyAgICBOVUxM LAkJCQkvKiAgMCAqLworICAgICZBVFREVERNLAkJCQkvKiAgMSAqLworICAgICZBVFRJU04sCQkJ CS8qICAyICovCisgICAgJkFUVE1PREVNLAkJCQkvKiAgMyAqLworICAgICZDQ0lUVCwJCQkJLyog IDQgKi8KKyNpZmRlZiBPTERNT0RFTVMKKyAgICAmQ0VSTUVURUssCQkJCS8qICA1ICovCisgICAg JkRGMDMsCQkJCS8qICA2ICovCisgICAgJkRGMTAwLAkJCQkvKiAgNyAqLworICAgICZERjIwMCwJ CQkJLyogIDggKi8KKyAgICAmR0RDLAkJCQkvKiAgOSAqLworI2Vsc2UKKyAgICBOVUxMLAorICAg IE5VTEwsCisgICAgTlVMTCwKKyAgICBOVUxMLAorICAgIE5VTEwsCisjZW5kaWYgLyogT0xETU9E RU1TICovCisgICAgJkhBWUVTLAkJCQkvKiAxMCAqLworI2lmZGVmIE9MRE1PREVNUworICAgICZQ RU5SSUwsCQkJCS8qIDExICovCisgICAgJlJBQ0FMLAkJCQkvKiAxMiAqLworI2Vsc2UKKyAgICBO VUxMLAorICAgIE5VTEwsCisjZW5kaWYgLyogT0xETU9ERU1TICovCisgICAgJlVOS05PV04sCQkJ CS8qIDEzICovCisjaWZkZWYgT0xETU9ERU1TCisgICAgJlZFTlRFTCwJCQkJLyogMTQgKi8KKyAg ICAmQ09OQ09SRCwJCQkJLyogMTUgKi8KKyNlbHNlCisgICAgTlVMTCwKKyAgICBOVUxMLAorI2Vu ZGlmIC8qIE9MRE1PREVNUyAqLworICAgICZEVU1NWSwJCQkJLyogMTYgKi8KKyAgICAmUk9MTSwJ CQkJLyogMTcgKi8KKyNpZmRlZiBPTERNT0RFTVMKKyAgICAmTUlDUk9DT00sCQkJCS8qIDE4ICov CisjZWxzZQorICAgIE5VTEwsCisjZW5kaWYgLyogT0xETU9ERU1TICovCisgICAgJlVTUiwJCQkJ LyogMTkgVVNSIENvdXJpZXIgYW5kIFNwb3J0c3RlciAqLworICAgICZPTERUQiwJCQkJLyogMjAg T2xkIFRlbGViaXRzICovCisgICAgJkRJR0lURUwsCQkJCS8qIDIxIERpZ2l0ZWwgQ0NJVFQgKi8K KyAgICAmSF8xMjAwLAkJCQkvKiAyMiBIYXllcyAxMjAwICovCisgICAgJkhfVUxUUkEsCQkJCS8q IDIzIEhheWVzIFVsdHJhICovCisgICAgJkhfQUNDVVJBLAkJCQkvKiAyNCBIYXllcyBPcHRpbWEg Ki8KKyAgICAmUFBJLAkJCQkvKiAyNSBQUEkgKi8KKyAgICAmREFUQVBPUlQsCQkJCS8qIDI2IERh dGFwb3J0ICovCisgICAgJkJPQ0EsCQkJCS8qIDI3IEJvY2EgKi8KKyAgICAmTU9UT1JPTEEsCQkJ CS8qIDI4IE1vdG9yb2xhIFVEUyBNT1RPUk9MQSAqLworICAgIE5VTEwsCQkJCS8qIDI5IERpZ2lj b21tICovCisgICAgTlVMTCwJCQkJLyogMzAgRHluYWxpbmsgKi8KKyAgICAmSU5URUwsCQkJCS8q IDMxIEludGVsICovCisgICAgJlVDT01fQVQsCQkJCS8qIDMyIE1pY3JvY29tIGluIEFUIG1vZGUg Ki8KKyAgICAmTVVMVElURUNILAkJCQkvKiAzMyBNdWx0aXRlY2ggKi8KKyAgICAmU1VQUkEsCQkJ CS8qIDM0IFN1cHJhICovCisgICAgJlpPTFRSSVgsCQkJCS8qIDM1IFpvbHRyaXggKi8KKyAgICAm Wk9PTSwJCQkJLyogMzYgWm9vbSAqLworICAgICZaWVhFTCwJCQkJLyogMzcgWnlYRUwgKi8KKyAg ICAmRFVNTVksCQkJCS8qIDM4IFRBUEkgKi8KKyAgICAmTkVXVEIsCQkJCS8qIDM5IE5ldy1UZWxl Yml0ICovCisgICAgJk1BWFRFQ0gsCQkJCS8qIDQwIE1heFRlY2ggKi8KKyAgICAmRFVNTVksCQkJ CS8qIDQxIFVzZXItZGVmaW5lZCAqLworICAgICZSV1YzMiwJCQkJLyogNDIgUm9ja3dlbGwgVi4z MiAqLworICAgICZSV1YzMkIsCQkJCS8qIDQzIFJvY2t3ZWxsIFYuMzJiaXMgKi8KKyAgICAmUldW MzQsCQkJCS8qIDQ0IFJvY2t3ZWxsIFYuMzQgKi8KKyAgICAmTVdBVkUsCQkJCS8qIDQ1IElCTSBN d2F2ZSAqLworICAgICZURUxFUEFUSCwJCQkJLyogNDYgR2F0ZXdheSAyMDAwIFRlbGVwYXRoIElJ IDI4LjggKi8KKyAgICAmTUlDUk9MSU5LLAkJCQkvKiA0NyBNaWNyb0xpbmsgbW9kZW1zICovCisg ICAgJkNBUkRJTkFMLAkJCQkvKiA0OCBDYXJkaW5hbCAqLworICAgICZHRU5FUklDLAkJCQkvKiA0 OSBHZW5lcmljIGhpZ2gtc3BlZWQgKi8KKyAgICAmWEpBQ0ssCQkJCS8qIDUwIE1lZ2FoZXJ0ei1Y amFjayAqLworICAgICZTUElSSVRJSSwJCQkJLyogNTEgUXVpY2tDb21tIFNwaXJpdCBJSSAqLwor ICAgICZNT05UQU5BLAkJCQkvKiA1MiBNb3Rvcm9sYSBNb250YW5hICovCisgICAgJkNPTVBBUSwJ CQkJLyogNTMgQ29tcGFxIERhdGErRmF4ICovCisgICAgJkZVSklUU1UsCQkJCS8qIDU0IEZ1aml0 c3UgKi8KKyAgICAmTUhaQVRULAkJCQkvKiA1NSBNZWdhaGVydHogQVQmVCBWLjM0ICovCisgICAg JlNVUFJBU09OLAkJCQkvKiA1NiBTdXByYXNvbmljICovCisgICAgJkJFU1REQVRBLAkJCQkvKiA1 NyBCZXN0IERhdGEgKi8KKyAgICAmQVRUMTkwMCwJCQkJLyogNTggQVQmVCBTZWN1cmUgRGF0YSBT VFUgSUlJIDE5MDAgKi8KKyAgICAmQVRUMTkxMCwJCQkJLyogNTkgQVQmVCBTZWN1cmUgRGF0YSBT VFUgSUlJIDE5MTAgKi8KKyAgICAmS0VFUElOVE9VQ0gsCQkJLyogNjAgQVQmVCBLZWVwaW5Ub3Vj aCAqLworICAgICZVU1JYMiwJCQkJLyogNjEgVVNSIFhKLTE1NjAgWDIgKi8KKyAgICAmUk9MTV9B VCwJCQkJLyogNjIgUm9sbSB3aXRoIEFUIGNvbW1hbmQgc2V0ICovCisgICAgJkFUTEFTLAkJCQkv KiA2MyBBdGxhcyAvIE5ld2NvbSAqLworICAgICZDT0RFWCwJCQkJLyogNjQgTW90b3JvbGEgQ29k ZXggKi8KKyAgICAmTVQ1NjM0WlBYLAkJCQkvKiA2NSBNdWx0aXRlY2ggTVQ1NjM0WlBYICovCisg ICAgJlVMSU5LVjI1MCwJCQkJLyogNjYgTWljcm9saW5rIFYuMjUwIDU2SyAqLworICAgICZJVFVU VjI1MCwJCQkJLyogNjcgR2VuZXJpYyBJVFUtVCBWLjI1MCAqLworICAgICZSV1Y5MCwJCQkJLyog NjggUm9ja3dlbGwgVi45MCA1NksgKi8KKyAgICAmU1VQUkFYLAkJCQkvKiA2OSBEaWFtb25kIFN1 cHJhIEV4cHJlc3MgVi45MCAqLworICAgICZMVUNFTlQsCQkJCS8qIDcwIEx1Y2VudCBWZW51cyBj aGlwc2V0ICovCisgICAgJlBDVEVMLAkJCQkvKiA3MSBQQ1RlbCAqLworICAgICZDT05FWEFOVCwJ CQkJLyogNzIgQ29uZXhhbnQgKi8KKyAgICAmWk9PTVYzNCwJCQkJLyogNzMgWm9vbSBWLjM0ICov CisgICAgJlpPT01WOTAsCQkJCS8qIDc0IFpvb20gVi45MCAqLworICAgICZaT09NVjkyLAkJCQkv KiA3NSBab29tIFYuOTIgKi8KKyAgICAmTU9UU001NgkJCQkvKiA3NiBNb3Rvcm9sYSBTTTU2IGNo aXBzZXQgKi8KKyNlbmRpZiAvKiBNSU5JRElBTCAqLworfTsKKy8qCisgKiBEZWNsYXJlIG1vZGVt IG5hbWVzIGFuZCBhc3NvY2lhdGVkIG51bWJlcnMgZm9yIGNvbW1hbmQgcGFyc2luZywKKyAqIGFu ZCBhbHNvIGZvciBkb2luZyBudW1iZXItdG8tbmFtZSB0cmFuc2xhdGlvbi4KKyAqCisgKiBUaGUg ZW50cmllcyBtdXN0IGJlIGluIGFscGhhYmV0aWNhbCBvcmRlciBieSBtb2RlbSBuYW1lLgorICov CitzdHJ1Y3Qga2V5dGFiIG1kbXRhYltdID0geworI2lmbmRlZiBNSU5JRElBTAorICAgICIzY29t LXVzci1tZWdhaGVydHotNTZrIiwgbl9VU1JYMiwgIENNX0lOViwKKyAgICAiYWNlci12OTAiLCAg ICAgICAgIG5fUldWOTAsICAgICAgICBNX0FMSUFTLAorICAgICJhdGxhcy1uZXdjb20tMzM2MDBp ZnhDIiwgbl9BVExBUywgIDAsCisgICAgImF0dC0xOTAwLXN0dS1paWkiLCBuX0FUVDE5MDAsICAg ICAgMCwKKyAgICAiYXR0LTE5MTAtc3R1LWlpaSIsIG5fQVRUMTkxMCwgICAgICAwLAorICAgICJh dHQtNzMwMCIsCQluX0FUVFVQQywJMCwKKyAgICAiYXR0LWRhdGFwb3J0IiwJbl9EQVRBUE9SVCwJ MCwKKyAgICAiYXR0LWR0ZG0iLAkJbl9BVFREVERNLAkwLAorICAgICJhdHQtaXNuIiwgICAgICAg ICAgbl9BVFRJU04sICAgICAgIDAsCisgICAgImF0dC1rZWVwaW50b3VjaCIsICBuX0tFRVBJTlRP VUNILCAgMCwKKyAgICAiYXR0LXN3aXRjaGVkLW5ldCIsIG5fQVRUTU9ERU0sCTAsCisKKyAgICAi YXR0NzMwMCIsCQluX0FUVFVQQywJQ01fSU5WLAkvKiBvbGQgbmFtZSAqLworICAgICJhdHRkdGRt IiwJCW5fQVRURFRETSwJQ01fSU5WLAkvKiBvbGQgbmFtZSAqLworICAgICJhdHRpc24iLCAgICAg ICAgICAgbl9BVFRJU04sICAgICAgIENNX0lOViwJLyogb2xkIG5hbWUgKi8KKyAgICAiYXR0bW9k ZW0iLAkJbl9BVFRNT0RFTSwJQ01fSU5WLAkvKiBvbGQgbmFtZSAqLworCisgICAgImJlc3RkYXRh IiwgICAgICAgICBuX0JFU1REQVRBLCAgICAgMCwKKyAgICAiYm9jYSIsCQluX0JPQ0EsCQkwLAor ICAgICJjYXJkaW5hbCIsICAgICAgICAgbl9DQVJESU5BTCwgICAgIDAsCisjZW5kaWYgLyogTUlO SURJQUwgKi8KKyAgICAiY2NpdHQtdjI1YmlzIiwJbl9DQ0lUVCwJQ01fSU5WLCAvKiBOYW1lIGNo YW5nZWQgdG8gSVRVLVQgKi8KKyNpZm5kZWYgTUlOSURJQUwKKyNpZmRlZiBPTERNT0RFTVMKKyAg ICAiY2VybWV0ZWsiLAkJbl9DRVJNRVRFSywJTV9PTEQsCisjZW5kaWYgLyogT0xETU9ERU1TICov CisgICAgImNvbXBhcSIsICAgICAgICAgICBuX0NPTVBBUSwgICAgICAgMCwKKyNpZmRlZiBPTERN T0RFTVMKKyAgICAiY29uY29yZCIsCQluX0NPTkNPUkQsCU1fT0xELAorI2VuZGlmIC8qIE9MRE1P REVNUyAqLworICAgICJjb25leGFudCIsICAgICAgICAgbl9DT05FWEFOVCwgICAgIDAsCisgICAg ImNvdXJpZXIiLCAgICAgICAgICBuX1VTUiwgICAgICAgICAgQ01fSU5WLAorICAgICJkYXRhcG9y dCIsCQluX0RBVEFQT1JULAlDTV9JTlYsCS8qID09IGF0dC1kYXRhcG9ydCAqLworI2lmZGVmIE9M RE1PREVNUworICAgICJkZjAzLWFjIiwJCW5fREYwMywJCU1fT0xELAorICAgICJkZjEwMC1zZXJp ZXMiLAluX0RGMTAwLAlNX09MRCwKKyAgICAiZGYyMDAtc2VyaWVzIiwJbl9ERjIwMCwJTV9PTEQs CisjZW5kaWYgLyogT0xETU9ERU1TICovCisgICAgImRpZ2l0ZWwtZHQyMiIsCW5fRElHSVRFTCwJ MCwKKyNlbmRpZiAvKiBNSU5JRElBTCAqLworICAgICJkaXJlY3QiLAkJMCwJCUNNX0lOViwJLyog U3lub255bSBmb3IgTk9ORSAqLworI2lmbmRlZiBNSU5JRElBTAorICAgICJmdWppdHN1IiwgICAg ICAgICAgbl9GVUpJVFNVLCAgICAgIDAsCisgICAgImdhdGV3YXktdGVsZXBhdGgiLCBuX1RFTEVQ QVRILCAgICAgMCwKKyNpZmRlZiBPTERNT0RFTVMKKyAgICAiZ2RjLTIxMmEvZWQiLAluX0dEQywJ CU1fT0xELAorICAgICJnZSIsICAgICAgICAgICAgICAgbl9HRU5FUklDLAlDTV9JTlZ8Q01fQUJS LAorICAgICJnZW4iLCAgICAgICAgICAgICAgbl9HRU5FUklDLAlDTV9JTlZ8Q01fQUJSLAorICAg ICJnZW5kYXRhY29tbSIsCW5fR0RDLAkJQ01fSU5WLAkvKiBTeW5vbnltIGZvciBHREMgKi8KKyNl bmRpZiAvKiBPTERNT0RFTVMgKi8KKyNlbmRpZiAvKiBNSU5JRElBTCAqLworICAgICJnZW5lIiwg ICAgICAgICAgICAgbl9HRU5FUklDLCAgICAgIENNX0lOVnxDTV9BQlIsCisgICAgImdlbmVyaWMi LCAgICAgICAgICBuX0dFTkVSSUMsICAgICAgMCwKKyAgICAiZ2VuZXJpYy1oaWdoLXNwZWVkIixu X0dFTkVSSUMsICAgICBDTV9JTlYsCisgICAgImgiLCAJICAgCW5fSEFZRVMsCUNNX0lOVnxDTV9B QlIsCisgICAgImhhIiwgCSAgIAluX0hBWUVTLAlDTV9JTlZ8Q01fQUJSLAorICAgICJoYXkiLCAg ICAJCW5fSEFZRVMsCUNNX0lOVnxDTV9BQlIsCisgICAgImhheWUiLCAJICAgCW5fSEFZRVMsCUNN X0lOVnxDTV9BQlIsCisgICAgImhheWVzIiwgICAgCW5fSEFZRVMsCUNNX0lOVnxDTV9BQlIsIC8q IEhheWVzIDI0MDAgKi8KKyNpZm5kZWYgTUlOSURJQUwKKyAgICAiaGF5ZXMtMTIwMCIsCW5fSF8x MjAwLAkwLAorI2VuZGlmIC8qIE1JTklESUFMICovCisgICAgImhheWVzLTI0MDAiLAluX0hBWUVT LAkwLAorI2lmbmRlZiBNSU5JRElBTAorICAgICJoYXllcy1oaWdoLXNwZWVkIiwgbl9IX0FDQ1VS QSwgICAgIDAsCisgICAgImhheWVzLWFjY3VyYSIsICAgICBuX0hfQUNDVVJBLCAgICAgQ01fSU5W LAorICAgICJoYXllcy1vcHRpbWEiLCAgICAgbl9IX0FDQ1VSQSwgICAgIENNX0lOViwKKyAgICAi aGF5ZXMtdWx0cmEiLAluX0hfVUxUUkEsCUNNX0lOViwKKyAgICAiaHN0LWNvdXJpZXIiLCAgICAg IG5fVVNSLCAgICAgICAgICBDTV9JTlYsCS8qIFN5bm9ueW0gZm9yIENPVVJJRVIgKi8KKyAgICAi aW50ZWwiLAkJbl9JTlRFTCwgICAgICAgIDAsCisjZW5kaWYgLyogTUlOSURJQUwgKi8KKworICAg ICJpdHUtdC12MjUwIiwgICAgICAgbl9JVFVUVjI1MCwgICAgIDAsCisgICAgIml0dS10LXYyNWJp cyIsCW5fQ0NJVFQsCTAsCS8qIE5ldyBuYW1lIGZvciBDQ0lUVCAqLworICAgICJpdHUtdC12MjV0 ZXIvdjI1MCIsbl9JVFVUVjI1MCwgICAgIENNX0lOViwKKworI2lmbmRlZiBNSU5JRElBTAorICAg ICJsdWNlbnQiLCAgICAgICAgICAgbl9MVUNFTlQsICAgICAgMCwKKyAgICAibWF4dGVjaCIsCQlu X01BWFRFQ0gsICAgICAwLAorCisgICAgIm1lZ2FoZXJ0ei1hdHQtdjM0IiwgICAgbl9NSFpBVFQs ICAwLCAvKiBNZWdhaGVydHplcyAqLworICAgICJtZWdhaGVydHoteGphY2siLCAgICAgIG5fWEpB Q0ssICAgQ01fSU5WfENNX0FCUiwKKyAgICAibWVnYWhlcnR6LXhqYWNrLTMzLjYiLCBuX1hKQUNL LCAgIDAsCisgICAgIm1lZ2FoZXJ0ei14amFjay01NmsiLCAgbl9VU1JYMiwgICAwLCAvKiAzQ09N L1VTUi9NZWdhaGVydHogMzMuNiBQQyBDYXJkICovCisKKyAgICAibWkiLAkJbl9NSUNST0NPTSwJ Q01fSU5WfENNX0FCUiwKKyAgICAibWljIiwJCW5fTUlDUk9DT00sCUNNX0lOVnxDTV9BQlIsCisg ICAgIm1pY3IiLAkJbl9NSUNST0NPTSwJQ01fSU5WfENNX0FCUiwKKyAgICAibWljcm8iLAkJbl9N SUNST0NPTSwJQ01fSU5WfENNX0FCUiwKKyAgICAibWljcm9jIiwJCW5fTUlDUk9DT00sCUNNX0lO VnxDTV9BQlIsCisgICAgIm1pY3JvY28iLAkJbl9NSUNST0NPTSwJQ01fSU5WfENNX0FCUiwKKyAg ICAibWljcm9jb20iLAkJbl9NSUNST0NPTSwJQ01fSU5WfENNX0FCUiwKKyAgICAibWljcm9jb20t YXQtbW9kZSIsCW5fVUNPTV9BVCwJMCwgLyogTWljcm9jb20gRGVza1BvcnRlLCBldGMgKi8KKyAg ICAibWljcm9jb20tc3gtbW9kZSIsCW5fTUlDUk9DT00sCTAsIC8qIE1pY3JvY29tIEFYLFFYLFNY LCBuYXRpdmUgbW9kZSAqLworICAgICJtaWNyb2xpbmsiLCAgICAgICAgbl9NSUNST0xJTkssICAg IDAsCisgICAgIm1pY3JvbGluay12MjUwIiwgICBuX1VMSU5LVjI1MCwgICAgMCwKKyAgICAibW90 b3JvbGEtY29kZXgiLCAgIG5fQ09ERVgsICAgICAgICAwLAorICAgICJtb3Rvcm9sYS1mYXN0YWxr Iiwgbl9NT1RPUk9MQSwJMCwKKyAgICAibW90b3JvbGEtbGlmZXN0eWxlIixuX01PVE9ST0xBLAkw LAorICAgICJtb3Rvcm9sYS1tb250YW5hIiwgbl9NT05UQU5BLAkwLAorICAgICJtb3Rvcm9sYS1z bTU2LXY5MCIsbl9NT1RTTTU2LAkwLAorICAgICJtdDU2MzR6cHgiLCAgICAgICAgbl9NVDU2MzRa UFgsICAgIDAsCisgICAgIm11bHRpdGVjaCIsCW5fTVVMVEksCTAsCisgICAgIm13YXZlIiwJCW5f TVdBVkUsCTAsCisjZW5kaWYgLyogTUlOSURJQUwgKi8KKyAgICAibm9uZSIsICAgICAgICAgICAg IDAsICAgICAgICAgICAgICAwLAorI2lmbmRlZiBNSU5JRElBTAorI2lmbmRlZiBPTERUQkNPREUK KyAgICAib2xkLXRlbGViaXQiLCAgICAgIG5fVEVMRUJJVCwgICAgICAwLAorI2VuZGlmIC8qIE9M RFRCQ09ERSAqLworICAgICJwY3RlbCIsICAgICAgICAgICAgbl9QQ1RFTCwgICAgICAgIDAsCisj aWZkZWYgT0xETU9ERU1TCisgICAgInBlbnJpbCIsCQluX1BFTlJJTCwJTV9PTEQsCisjZW5kaWYg LyogT0xETU9ERU1TICovCisgICAgInBwaSIsICAgICAgICAgICAgICBuX1BQSSwJCTAsCisjaWZk ZWYgT0xETU9ERU1TCisgICAgInJhY2FsdmFkaWMiLAluX1JBQ0FMLAlNX09MRCwKKyNlbmRpZiAv KiBPTERNT0RFTVMgKi8KKyAgICAicm9ja3dlbGwtdjMyIiwJbl9SV1YzMiwJMCwKKyAgICAicm9j a3dlbGwtdjMyYmlzIiwJbl9SV1YzMkIsCTAsCisgICAgInJvY2t3ZWxsLXYzNCIsCW5fUldWMzQs CTAsCisgICAgInJvY2t3ZWxsLXY5MCIsCW5fUldWOTAsCTAsCisgICAgInJvbG0iLCAgICAgICAg ICAgICBuX1JPTE0sCQlDTV9JTlZ8Q01fQUJSLAorICAgICJyb2xtLTI0NHBjIiwgICAgICAgbl9S T0xNQVQsICAgICAgIDAsCisgICAgInJvbG0tNjAwLXNlcmllcyIsICBuX1JPTE1BVCwgICAgICAg MCwKKyAgICAicm9sbS1kY20iLAkJbl9ST0xNLAkJMCwKKyAgICAic21hcnRsaW5rLXY5MCIsICAg IG5fVVNSLCAgICAgICAgICBNX0FMSUFTLAorICAgICJzcGlyaXQtaWkiLCAgICAgICAgbl9TUElS SVRJSSwgICAgIDAsCisgICAgInNwb3J0c3RlciIsICAgICAgICBuX1VTUiwgICAgICAgICAgTV9B TElBUywKKyAgICAic3VwIiwJICAgICAgICBuX1NVUFJBLAlDTV9JTlZ8Q01fQUJSLAorICAgICJz dXByIiwJICAgICAgICBuX1NVUFJBLAlDTV9JTlZ8Q01fQUJSLAorICAgICJzdXByYSIsCSAgICAg ICAgbl9TVVBSQSwJQ01fSU5WfENNX0FCUiwKKyAgICAic3VwcmEtZXhwcmVzcy12OTAiLG5fU1VQ UkFYLCAgICAgICAwLAorICAgICJzdXByYWZheG1vZGVtIiwJbl9TVVBSQSwJMCwKKyAgICAic3Vw cmFzb25pYyIsCW5fU1VQUkFTT04sCTAsCisjaWZkZWYgQ0tfVEFQSQorICAgICJ0YXBpIiwJCW5f VEFQSSwJCTAsCisjZW5kaWYgLyogQ0tfVEFQSSAqLworICAgICJ0ZSIsICAgICAgICAgICAgICAg bl9UQk5FVywgICAgICAgIENNX0lOVnxDTV9BQlIsCisgICAgInRlbCIsICAgICAgICAgICAgICBu X1RCTkVXLCAgICAgICAgQ01fSU5WfENNX0FCUiwKKyAgICAidGVsZWJpdCIsICAgICAgICAgIG5f VEJORVcsICAgICAgICAwLAorICAgICJ0ZWxlcGF0aCIsICAgICAgICAgbl9URUxFUEFUSCwgICAg IENNX0lOViwKKyNlbmRpZiAvKiBNSU5JRElBTCAqLworICAgICJ1bmtub3duIiwJCW5fVU5LTk9X TiwJMCwKKyAgICAidXNlci1kZWZpbmVkIiwgICAgIG5fVURFRiwJCTAsCisjaWZuZGVmIE1JTklE SUFMCisKKyAgICAidXNyIiwgICAgICAgICAgICAgICBuX1VTUiwgICAgICAgICBDTV9JTlZ8Q01f QUJSLAorICAgICJ1c3ItMjEyYSIsCQkgbl9IQVlFUywJQ01fSU5WfE1fQUxJQVMsCisgICAgInVz ci1jb3VyaWVyIiwgICAgICAgbl9VU1IsICAgICAgICAgQ01fSU5WLAorICAgICJ1c3ItbWVnYWhl cnR6LTU2ayIsIG5fVVNSWDIsICAgICAgIDAsCisgICAgInVzci1zcG9ydHN0ZXIiLCAgICAgbl9V U1IsICAgICAgICAgQ01fSU5WLAorICAgICJ1c3IteGoxNTYwLXgyIiwgICAgIG5fVVNSWDIsICAg ICAgIENNX0lOViwKKyAgICAidXNyb2JvdGljcyIsICAgICAgICBuX1VTUiwgICAgICAgICAwLAor CisgICAgInYyNWJpcyIsCQluX0NDSVRULAlDTV9JTlYsIC8qIE5hbWUgY2hhbmdlZCB0byBJVFUt VCAqLworI2lmZGVmIE9MRE1PREVNUworICAgICJ2ZW50ZWwiLAkJbl9WRU5URUwsCU1fT0xELAor I2VuZGlmIC8qIE9MRE1PREVNUyAqLworICAgICJ6b2x0cml4LXYzNCIsCW5fWk9MVFJJWCwJMCwK KyAgICAiem9sdHJpeC1oc3AtdjkwIiwgIG5fUENURUwsICAgICAgICBNX0FMSUFTLAorICAgICJ6 b2x0cml4LWhjZi12OTAiLCAgbl9JVFVUVjI1MCwgICAgIDAsCisgICAgInpvbyIsCQluX1pPT00s CQlDTV9JTlZ8Q01fQUJSLAorICAgICJ6b29tIiwJCW5fWk9PTSwJCUNNX0lOVnxDTV9BQlIsCisg ICAgInpvb20tdjMyYmlzIiwJbl9aT09NLAkJMCwKKyAgICAiem9vbS12MzQiLAkJbl9aT09NVjM0 LAkwLAorICAgICJ6b29tLXY5MCIsCQluX1pPT01WOTAsCTAsCisgICAgInpvb20tdjkyIiwJCW5f Wk9PTVY5MiwJMCwKKyAgICAienl4ZWwiLAkJbl9aWVhFTCwJMCwKKyNlbmRpZiAvKiBNSU5JRElB TCAqLworICAgICIiLCAgICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgIDAKK307CitpbnQg bm1kbSA9IChzaXplb2YobWRtdGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSkgLSAxOyAvKiBO dW1iZXIgb2YgbW9kZW1zICovCisKKyNkZWZpbmUgQ09OTkVDVEVEIDEJCQkvKiBGb3IgY29tcGxl dGlvbiBzdGF0dXMgKi8KKyNkZWZpbmUgRF9GQUlMRUQgIDIKKyNkZWZpbmUgRF9QQVJUSUFMIDMK Kworc3RhdGljIGludCB0cmllcyA9IDA7CitzdGF0aWMgaW50IG1kbWVjaG8gPSAwOwkJCS8qIEFz c3VtZSBtb2RlbSBkb2VzIG5vdCBlY2hvICovCisKK3N0YXRpYyBjaGFyICpwOwkJCQkvKiBGb3Ig Y29tbWFuZCBzdHJpbmdzICYgbWVzc2FnZXMgKi8KKworI2RlZmluZSBMQlVGTCAyMDAKK3N0YXRp YyBjaGFyIGxidWZbTEJVRkwrNF07CitjaGFyIG1vZGVtbXNnW0xCVUZMKzRdID0geyBOVUwsIE5V TCB9OwkvKiBESUFMIHJlc3BvbnNlIGZyb20gbW9kZW0gKi8KKworI2lmZGVmIERZTkFNSUMKKyNk ZWZpbmUgUkJVRkwgMjU2CitzdGF0aWMgY2hhciAqcmJ1ZiA9IE5VTEw7CisjZWxzZQorI2RlZmlu ZSBSQlVGTCA2Mworc3RhdGljIGNoYXIgcmJ1ZltSQlVGTCsxXTsKKyNlbmRpZiAvKiBEWU5BTUlD ICovCisKKyNpZmRlZiBEWU5BTUlDCisjZGVmaW5lIEZVTExOVU1MIDI1NgorY2hhciAqZmJ1ZiA9 IE5VTEw7CQkJLyogRm9yIGZ1bGwgKHByZWZpeGVkKSBwaG9uZSBudW1iZXIgKi8KKyNlbHNlCisj ZGVmaW5lIEZVTExOVU1MIDEwMAorY2hhciBmYnVmW0ZVTExOVU1MXTsKKyNlbmRpZiAvKiBEWU5B TUlDICovCisKK3N0YXRpYyBja2ptcGJ1ZiBzamJ1ZjsKKworI2lmZGVmIENLX0FOU0lDCitzdGF0 aWMgU0lHVFlQICgqc2F2YWxybSkoaW50KTsJLyogRm9yIHNhdmluZyBhbGFybSBoYW5kbGVyICov CitzdGF0aWMgU0lHVFlQICgqc2F2aW50KShpbnQpOwkvKiBGb3Igc2F2aW5nIGludGVycnVwdCBo YW5kbGVyICovCisjZWxzZQorc3RhdGljIFNJR1RZUCAoKnNhdmFscm0pKCk7CS8qIEZvciBzYXZp bmcgYWxhcm0gaGFuZGxlciAqLworc3RhdGljIFNJR1RZUCAoKnNhdmludCkoKTsJLyogRm9yIHNh dmluZyBpbnRlcnJ1cHQgaGFuZGxlciAqLworI2VuZGlmIC8qIENLX0FOU0lDICovCisKKyNpZmRl ZiBDS0xPR0RJQUwKK3N0YXRpYyBWT0lECitkb2xvZ2RpYWwocykgY2hhciAqczsgeworICAgIGNo YXIgYnVmMlsxNl07CisgICAgY2hhciAqIHIgPSBOVUxMOworICAgIGludCB4LCBtLCBuOworICAg IGV4dGVybiBjaGFyIGN4bG9nYnVmW10sIHVpZGJ1ZltdLCBteWhvc3RbXTsKKworICAgIGlmICgh cykgcyA9ICIiOworICAgIGlmICgoeCA9IHN0cmxlbihzKSkgPiAwKSB7CQkvKiBSZXBsYWNlIHNw YWNlcyBieSB1bmRlcnNjb3JlcyAqLworCXIgPSAoY2hhciAqKW1hbGxvYyh4KzEpOworCWlmIChy KSB7CisJICAgIGludCBpOworCSAgICBmb3IgKGkgPSAwOyBpIDw9IHg7IGkrKykgeworCQlpZiAo c1tpXSAhPSAwICYmIHNbaV0gPD0gU1ApCisJCSAgcltpXSA9ICdfJzsKKwkJZWxzZQorCQkgIHJb aV0gPSBzW2ldOworCSAgICB9CisJICAgIHMgPSByOworCX0KKyAgICB9CisgICAgcCA9IGNrZGF0 ZSgpOworICAgIG4gPSBja3N0cm5jcHkoY3hsb2didWYscCxDWExPR0JVRkwpOworICAgIGlmICgh dWlkYnVmWzBdKSB7CisJZGVidWcoRjEwMCwiZG9sb2dkaWFsIHVpZGJ1ZiBlbXB0eSIsIiIsMCk7 CisJY2tzdHJuY3B5KHVpZGJ1ZiwoY2hhciAqKXdob2FtaSgpLFVJREJVRkxFTik7CisgICAgfQor ICAgIG0gPSBzdHJsZW4odWlkYnVmKStzdHJsZW4obXlob3N0KStzdHJsZW4odHRuYW1lKStzdHJs ZW4ocykrc3RybGVuKGJ1ZjIpKzMyOworICAgIGlmIChuK20gPCBDWExPR0JVRkwtMSkgeworCXAg PSBjeGxvZ2J1ZituOworCWlmIChkaWFsbGNjICYmIGRpYWxsYWMpIHsKKwkgICAgYnVmMlswXSA9 ICcrJzsKKwkgICAgY2ttYWttc2coJmJ1ZjJbMV0sMTUsZGlhbGxjYywiKCIsZGlhbGxhYywiKSIp OworCX0gZWxzZSB7CisJICAgIGNrc3RybmNweShidWYyLCJVbmtub3duIiwxNik7CisJfQorCXNw cmludGYocCwiICVzICVzIFQ9RElBTCBIPSVzIEQ9JXMgTj0lcyBPPSVzICIsCS8qIHNhZmUgKHBy ZWNoZWNrZWQpICovCisJCXVpZGJ1ZiwKKwkJY2tnZXRwaWQoKSwKKwkJbXlob3N0LAorCQl0dG5h bWUsCisJCXMsCisJCWJ1ZjIKKwkJKTsKKwlkZWJ1ZyhGMTEwLCJkb2xvZ2RpYWwgY3hsb2didWYi LGN4bG9nYnVmLDApOworICAgIH0gZWxzZQorICAgICAgc3ByaW50ZihwLCJMT0dESUFMIEJVRkZF UiBPVkVSRkxPVyIpOworICAgIGlmIChyKSBmcmVlKHIpOworfQorI2VuZGlmIC8qIENLTE9HRElB TCAqLworCisjaWZuZGVmIE1JTklESUFMCisKKyNpZmRlZiBDT01NRU5UCitzdGF0aWMgVk9JRAor eGNweSh0byxmcm9tLGxlbikJCS8qIENvcHkgdGhlIGdpdmVuIG51bWJlciBvZiBieXRlcyAqLwor ICAgIHJlZ2lzdGVyIGNoYXIgKnRvLCAqZnJvbTsKKyAgICByZWdpc3RlciB1bnNpZ25lZCBpbnQg bGVuOyB7CisJd2hpbGUgKGxlbi0tKSAqdG8rKyA9ICpmcm9tKys7Cit9CisjZW5kaWYgLyogQ09N TUVOVCAqLworI2VuZGlmIC8qIE1JTklESUFMICovCisKK3N0YXRpYyBTSUdUWVAKKyNpZmRlZiBD S19BTlNJQworZGlhbHRpbWUoaW50IGZvbykJCQkvKiBUaW1lciBpbnRlcnJ1cHQgaGFuZGxlciAq LworI2Vsc2UKK2RpYWx0aW1lKGZvbykgaW50IGZvbzsJCQkvKiBUaW1lciBpbnRlcnJ1cHQgaGFu ZGxlciAqLworI2VuZGlmIC8qIENLX0FOU0lDICovCisvKiBkaWFsdGltZSAqLyB7CisKKyAgICBm YWlsX2NvZGUgPSBGX1RJTUU7CQkJLyogRmFpbHVyZSByZWFzb24gPSB0aW1lb3V0ICovCisgICAg ZGVidWcoRjEwMCwiZGlhbHRpbWUgY2F1Z2h0IFNJR0FMUk0iLCIiLDApOworI2lmZGVmIEJFQk9Y CisjaWZkZWYgQkVfRFJfNworICAgIGFsYXJtX2V4cGlyZWQoKTsKKyNlbmRpZiAvKiBCRV9EUl83 ICovCisjZW5kaWYgLyogQkVCT1ggKi8KKyNpZmRlZiBPUzIKKyAgICBzaWduYWwoU0lHQUxSTSwg ZGlhbHRpbWUpOworI2VuZGlmIC8qIE9TMiAqLworI2lmZGVmIF9fRU1YX18KKyAgICBzaWduYWwo U0lHQUxSTSwgU0lHX0FDSyk7CQkvKiBOZWVkZWQgZm9yIE9TLzIgKi8KKyNlbmRpZiAvKiBfX0VN WF9fICovCisKKyNpZmRlZiBPU0sJCQkJLyogT1MtOSAqLworLyoKKyAgV2UgYXJlIGluIGFuIGlu dGVyY2VwdCByb3V0aW5lIGJ1dCBkbyBub3QgcGVyZm9ybSBhIEYkUlRFIChkb25lIGltcGxpY2l0 bHkKKyAgYnkgUlRTKSwgc28gd2UgaGF2ZSB0byBkZWNyZW1lbnQgdGhlIHNpZ21hc2sgYXMgRiRS VEUgZG9lcy4gIFdhcm5pbmc6CisgIGxvbmdqdW1wIG9ubHkgcmVzdG9yZXMgdGhlIENQVSByZWdp c3RlcnMsIE5PVCB0aGUgRlBVIHJlZ2lzdGVycy4gIFNvLCBkb24ndAorICB1c2UgRlBVIGF0IGFs bCBvciBhdCBsZWFzdCBkb24ndCB1c2UgY29tbW9uIEZQVSAoZG91YmxlIG9yIGZsb2F0KSByZWdp c3RlcgorICB2YXJpYWJsZXMuCisqLworICAgIHNpZ21hc2soLTEpOworI2VuZGlmIC8qIE9TSyAq LworCisjaWZkZWYgTlRTSUcKKyAgICBpZiAoZm9vID09IFNJR0FMUk0pCisgICAgICBQb3N0QWxh cm1TaWdTZW0oKTsKKyAgICBlbHNlCisgICAgICBQb3N0Q3RybENTZW0oKTsKKyNlbHNlIC8qIE5U U0lHICovCisjaWZkZWYgTlQKKyAgICBja2xvbmdqbXAoY2tqYWRkcihzamJ1ZiksMSk7CisjZWxz ZSAvKiBOVCAqLworICAgIGNrbG9uZ2ptcChzamJ1ZiwxKTsKKyNlbmRpZiAvKiBOVCAqLworI2Vu ZGlmIC8qIE5UU0lHICovCisgICAgLyogTk9UUkVBQ0hFRCAqLworICAgIFNJR1JFVFVSTjsKK30K Kworc3RhdGljIFNJR1RZUAorI2lmZGVmIENLX0FOU0lDCitkaWFsaW50KGludCBmb28pCQkJLyog S2V5Ym9hcmQgaW50ZXJydXB0IGhhbmRsZXIgKi8KKyNlbHNlCitkaWFsaW50KGZvbykgaW50IGZv bzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogZGlhbGludCAqLyB7CisgICAgZmFpbF9jb2Rl ID0gRl9JTlQ7CisgICAgZGVidWcoRjEwMCwiZGlhbGludCBjYXVnaHQgU0lHSU5UIiwiIiwwKTsK KyNpZmRlZiBPUzIKKyAgICBzaWduYWwoU0lHSU5ULCBkaWFsaW50KTsKKyAgICBkZWJ1ZyhGMTAw LCJkaWFsaW50KCkgU0lHSU5UIGNhdWdodCAtLSBkaWFsaW50IHJlc3RvcmVkIiwiIiwwKSA7Cisj ZW5kaWYgLyogT1MyICovCisjaWZkZWYgX19FTVhfXworICAgIHNpZ25hbChTSUdJTlQsIFNJR19B Q0spOwkJLyogTmVlZGVkIGZvciBPUy8yICovCisjZW5kaWYgLyogX19FTVhfXyAqLworI2lmZGVm IE9TSwkJCQkvKiBPUy05LCBzZWUgY29tbWVudCBpbiBkaWFsdGltZSgpICovCisgICAgc2lnbWFz aygtMSk7CisjZW5kaWYgLyogT1NLICovCisjaWZkZWYgTlRTSUcKKyAgICBQb3N0Q3RybENTZW0o KSA7CisjaWZkZWYgQ0tfVEFQSQorICAgIFBvc3RUQVBJQ29ubmVjdFNlbSgpOworICAgIFBvc3RU QVBJQW5zd2VyU2VtKCk7CisjZW5kaWYgLyogQ0tfVEFQSSAqLworI2Vsc2UgLyogTlRTSUcgKi8K KyNpZmRlZiBOVAorICAgIGNrbG9uZ2ptcChja2phZGRyKHNqYnVmKSwxKTsKKyNlbHNlIC8qIE5U ICovCisgICAgY2tsb25nam1wKHNqYnVmLDEpOworI2VuZGlmIC8qIE5UICovCisjZW5kaWYgLyog TlQgKi8KKyAgICBTSUdSRVRVUk47Cit9CisKKy8qCisgIFJvdXRpbmUgdG8gcmVhZCBhIGNoYXJh Y3RlciBmcm9tIGNvbW11bmljYXRpb24gZGV2aWNlLCBoYW5kbGluZyBURUxORVQKKyAgcHJvdG9j b2wgbmVnb3RpYXRpb25zIGluIGNhc2Ugd2UncmUgY29ubmVjdGVkIHRvIHRoZSBtb2RlbSB0aHJv dWdoIGEKKyAgVENQL0lQIFRFTE5FVCBtb2RlbSBzZXJ2ZXIuCisqLworc3RhdGljIGludAorZGRp bmMobikgaW50IG47IHsKKyNpZmRlZiBUTkNPREUKKyAgICBpbnQgYyA9IDA7CisgICAgaW50IGRv bmUgPSAwOworICAgIGRlYnVnKEYxMDEsImRkaW5jIGVudHJ5IG4iLCIiLG4pOworICAgIHdoaWxl ICghZG9uZSkgeworCWMgPSB0dGluYyhuKTsKKwkvKiBkZWJ1ZyhGMDAwLCJkZGluYyIsIiIsYyk7 ICovCisJaWYgKGMgPCAwKSByZXR1cm4oYyk7CisjaWZuZGVmIE9TMgorCWlmICgoYyA9PSBJQUMp ICYmIG5ldHdvcmsgJiYgSVNfVEVMTkVUKCkpIHsKKwkgICAgc3dpdGNoICh0bl9kb29wKChDSEFS KShjICYgMHhmZiksZHVwbGV4LHR0aW5jKSkgeworCSAgICAgIGNhc2UgMjogZHVwbGV4ID0gMDsg Y29udGludWU7CisJICAgICAgY2FzZSAxOiBkdXBsZXggPSAxOworCSAgICAgIGRlZmF1bHQ6IGNv bnRpbnVlOworCSAgICB9CisJfSBlbHNlIGRvbmUgPSAxOworI2Vsc2UgLyogT1MyICovCisJZG9u ZSA9ICEoYyA9PSBJQUMgJiYgbmV0d29yayAmJiBJU19URUxORVQoKSk7CisJc2NyaXB0d3J0YnVm KGMpOwkvKiBURUxORVQgbmVnb3RpYXRpb25zIGhhbmRsZWQgYnkgZW11bGF0b3IgKi8KKyNlbmRp ZiAvKiBPUzIgKi8KKyAgICB9CisgICAgcmV0dXJuKGMgJiAweGZmKTsKKyNlbHNlICAvKiBUTkNP REUgKi8KKyAgICByZXR1cm4odHRpbmMobikpOworI2VuZGlmIC8qIFROQ09ERSAqLworfQorCitz dGF0aWMgVk9JRAordHRzbG93KHMsbWlsbGlzZWMpIGNoYXIgKnM7IGludCBtaWxsaXNlYzsgeyAv KiBPdXRwdXQgcy1sLW8tdy1sLXkgKi8KKyNpZmRlZiBUQ1BTT0NLRVQKKyAgICBleHRlcm4gaW50 IHRuX25sbSwgdG5fYl9ubG07CisjZW5kaWYgLyogVENQU09DS0VUICovCisgICAgZGVidWcoRjEx MSwidHRzbG93IixzLG1pbGxpc2VjKTsKKyAgICBpZiAoZGlhbGRweSAmJiAoZHVwbGV4IHx8ICFt ZG1lY2hvKSkgeyAvKiBFY2hvIHRoZSBjb21tYW5kIGluIGNhc2UgbW9kZW0gKi8KKwlwcmludGYo IiVzXG4iLHMpOwkJLyogaXNuJ3QgZWNob2luZyBjb21tYW5kcy4gKi8KKyNpZmRlZiBPUzIKKwl7 CisJICAgIGNoYXIgKnMyID0gczsJCS8qIEVjaG8gdG8gZW11bGF0b3IgKi8KKwkgICAgd2hpbGUg KCpzMikgeworCQlzY3JpcHR3cnRidWYoKFVTSE9SVCkqczIrKyk7CisJICAgIH0KKwkgICAgc2Ny aXB0d3J0YnVmKChVU0hPUlQpQ1IpOworCSAgICBzY3JpcHR3cnRidWYoKFVTSE9SVClMRik7CisJ fQorI2VuZGlmIC8qIE9TMiAqLworICAgIH0KKyAgICBmb3IgKDsgKnM7IHMrKykgeworCXR0b2Mo KnMpOworI2lmZGVmIFRDUFNPQ0tFVAorCWlmICgqcyA9PSBDUiAmJiBuZXR3b3JrICYmIElTX1RF TE5FVCgpKSB7CisJICAgIGlmICghVEVMT1BUX01FKFRFTE9QVF9CSU5BUlkpICYmIHRuX25sbSAh PSBUTkxfQ1IpCisJICAgICAgdHRvYygoY2hhcikoKHRuX25sbSA9PSBUTkxfQ1JMRikgPyBMRiA6 IE5VTCkpOworCSAgICBlbHNlIGlmIChURUxPUFRfTUUoVEVMT1BUX0JJTkFSWSkgJiYKKwkJICAg ICAodG5fYl9ubG0gPT0gVE5MX0NSTEYgfHwgdG5fYl9ubG0gPT0gVE5MX0NSTlVMKSkKKwkgICAg ICB0dG9jKChjaGFyKSgodG5fYl9ubG0gPT0gVE5MX0NSTEYpID8gTEYgOiBOVUwpKTsKKyAgICAg ICAgfQorI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLworCWlmIChtaWxsaXNlYyA+IDApCisJICBtc2xl ZXAobWlsbGlzZWMpOworICAgIH0KK30KKworLyoKKyAqIFdhaXQgZm9yIGEgc3RyaW5nIG9mIGNo YXJhY3RlcnMuCisgKgorICogVGhlIGNoYXJhY3RlcnMgYXJlIHdhaXRlZCBmb3IgaW5kaXZpZHVh bGx5LCBhbmQgb3RoZXIgY2hhcmFjdGVycyBtYXkKKyAqIGJlIHJlY2VpdmVkICJpbiBiZXR3ZWVu Ii4gIFRoaXMgbWVyZWx5IGd1YXJhbnRlZXMgdGhhdCB0aGUgY2hhcmFjdGVycworICogQVJFIHJl Y2VpdmVkLCBhbmQgaW4gdGhlIG9yZGVyIHNwZWNpZmllZC4KKyAqLworc3RhdGljIFZPSUQKK3dh aXRmb3IocykgY2hhciAqczsgeworICAgIENIQVIgYywgeDsKKyAgICB3aGlsZSAoKGMgPSAqcysr KSkgewkJLyogd2hpbGUgbW9yZSBjaGFyYWN0ZXJzIHJlbWFpbi4uLiAqLworCWRvIHsJCQkJLyog d2FpdCBmb3IgdGhlIGNoYXJhY3RlciAqLworCSAgICB4ID0gKENIQVIpIChkZGluYygwKSAmIDAx NzcpOworCSAgICBkZWJ1ZyhGMDAwLCJkaWFsIHdhaXRmb3IgZ290IiwiIix4KTsKKwkgICAgaWYg KGRpYWxkcHkpIHsKKwkJaWYgKHggIT0gTEYpIGNvbm9jKHgpOworCQlpZiAoeCA9PSBDUikgY29u b2MoTEYpOworCSAgICB9CisJfSB3aGlsZSAoeCAhPSBjKTsKKyAgICB9Cit9CisKK3N0YXRpYyBp bnQKK2RpZHdlZ2V0KHMscikgY2hhciAqcywgKnI7IHsJLyogTG9va3MgaW4gc3RyaW5nIHMgZm9y IHJlc3BvbnNlIHIgKi8KKyAgICBpbnQgbHIgPSAoaW50KXN0cmxlbihyKTsJLyogIDAgbWVhbnMg bm90IGZvdW5kLCAxIG1lYW5zIGZvdW5kIGl0ICovCisgICAgaW50IGk7CisgICAgZGVidWcoRjEx MCwiZGlkd2VnZXQiLHIsMCk7CisgICAgZGVidWcoRjExMCwiIGluIixzLDApOworICAgIGZvciAo aSA9IChpbnQpc3RybGVuKHMpLWxyOyBpID49IDA7IGktLSkKKwlpZiAoIHNbaV0gPT0gclswXSAp IGlmICggIXN0cm5jbXAocytpLHIsbHIpICkgcmV0dXJuKCAxICk7CisgICAgcmV0dXJuKCAwICk7 Cit9CisKKworLyogUiBFIFMgRSBUIC0tIFJlc2V0IGFsYXJtcywgZXRjLiBvbiBleGl0LiAqLwor CitzdGF0aWMgVk9JRAorZHJlc2V0KCkgeworICAgIGRlYnVnKEYxMDAsImRyZXNldCByZXNldHRp bmcgYWxhcm0gYW5kIHNpZ25hbCBoYW5kbGVycyIsIiIsMCk7CisgICAgYWxhcm0oMCk7CisgICAg c2lnbmFsKFNJR0FMUk0sc2F2YWxybSk7CQkvKiByZXN0b3JlIGFsYXJtIGhhbmRsZXIgKi8KKyAg ICBzaWduYWwoU0lHSU5ULHNhdmludCk7CQkvKiByZXN0b3JlIGludGVycnVwdCBoYW5kbGVyICov CisgICAgZGVidWcoRjEwMCwiZHJlc2V0IGFsYXJtIGFuZCBzaWduYWwgaGFuZGxlcnMgcmVzZXQi LCIiLDApOworfQorCisvKgorICBDYWxsIHRoaXMgcm91dGluZSB3aGVuIHRoZSBtb2RlbSByZXBv cnRzIHRoYXQgaXQgaGFzIGNvbm5lY3RlZCBhdCBhIGNlcnRhaW4KKyAgc3BlZWQsIGdpdmluZyB0 aGF0IHNwZWVkIGFzIHRoZSBhcmd1bWVudC4gIElmIHRoZSBjb25uZWN0aW9uIHNwZWVkIGlzIG5v dAorICB0aGUgc2FtZSBhcyBLZXJtaXQncyBjdXJyZW50IGNvbW11bmljYXRpb24gc3BlZWQsIEFO RCB0aGUgbW9kZW0gaW50ZXJmYWNlCisgIHNwZWVkIGlzIG5vdCBsb2NrZWQgKGkuZS4gRElBTCBT UEVFRC1NQVRDSElORyBpcyBub3QgT04pLCB0aGVuIGNoYW5nZSB0aGUKKyAgZGV2aWNlIHNwZWVk IHRvIHRoZSBvbmUgZ2l2ZW4uCisqLworc3RhdGljIFZPSUQKKyNpZmRlZiBDS19BTlNJQworc3Bk Y2hnKGxvbmcgcykKKyNlbHNlCitzcGRjaGcocykgbG9uZyBzOworI2VuZGlmIC8qIENLX0FOU0lD ICovCisvKiBzcGRjaGcgKi8geworICAgIGludCBzMjsKKyAgICBpZiAoIW1kbXNwZCkJCQkvKiBJ ZiBtb2RlbSBpbnRlcmZhY2Ugc3BlZWQgbG9ja2VkLCAqLworICAgICAgcmV0dXJuOwkJCQkvKiAg ZG9uJ3QgZG8gdGhpcy4gKi8KKyAgICBpZiAoc3BlZWQgIT0gcykgewkJCS8qIFNwZWVkcyBkaWZm ZXI/ICovCisJczIgPSBzIC8gMTBMOwkJCS8qIENvbnZlcnQgdG8gY3BzIGV4cHJlc3NlZCBhcyBp bnQgKi8KKwlpZiAodHRzc3BkKHMyKSA8IDApIHsJCS8qIENoYW5nZSBzcGVlZC4gKi8KKwkgICAg cHJpbnRmKCIgV0FSTklORyAtIHNwZWVkIGNoYW5nZSB0byAlbGQgZmFpbGVkLlxyXG4iLHMpOwor CX0gZWxzZSB7CisJICAgIHByaW50ZigiIFNwZWVkIGNoYW5nZWQgdG8gJWxkLlxyXG4iLHMpOwor CSAgICBzcGVlZCA9IHM7CQkJLyogVXBkYXRlIGdsb2JhbCBzcGVlZCB2YXJpYWJsZSAqLworCX0K KyAgICB9Cit9CisKKy8qCisgIERpc3BsYXkgYWxsIGNoYXJhY3RlcnMgcmVjZWl2ZWQgZnJvbSBt b2RlbSBkaWFsZXIgdGhyb3VnaCB0aGlzIHJvdXRpbmUsCisgIGZvciBjb25zaXN0ZW50IGhhbmRs aW5nIG9mIGNhcnJpYWdlIHJldHVybnMgYW5kIGxpbmVmZWVkcy4KKyovCitzdGF0aWMgVk9JRAor I2lmZGVmIENLX0FOU0lDCitkaWFsb2MoY2hhciBjKQorI2Vsc2UKK2RpYWxvYyhjKSBjaGFyIGM7 CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sgLyogZGlhbG9jICovCQkJCS8qIERpYWwgT3V0cHV0 IENoYXJhY3RlciAqLworICAgIGlmIChkaWFsZHB5KSB7CisJaWYgKGMgIT0gTEYpIGNvbm9jKGMp OwkJLyogRG9uJ3QgZWNobyBMRiAqLworCWlmIChjID09IENSKSBjb25vYyhMRik7CQkvKiBFY2hv IENSIGFzIENSTEYgKi8KKyAgICB9Cit9CisKKyNpZm5kZWYgTk9TUEwKK2NoYXIgKgorZ2V0ZG0o eCkgaW50IHg7IHsJCQkvKiBSZXR1cm4gZGlhbCBtb2RpZmllciAqLworICAgIE1ETUlORiAqIG1w OworICAgIGludCBtOworICAgIGludCBpc2hheWVzID0gMDsKKyAgICBtID0gbWRtdHlwOworICAg IGlmIChtIDwgMSkKKyAgICAgIGlmIChtZG1zYXYgPiAtMSkKKwltID0gbWRtc2F2OworICAgIGlm IChtIDwgMSkKKyAgICAgIHJldHVybigiIik7CisjaWZuZGVmIE1JTklESUFMCisgICAgaWYgKG0g PT0gbl9UQVBJKQorICAgICAgbSA9IG5fSEFZRVM7CisjZW5kaWYgLyogTUlOSURJQUwgKi8KKyAg ICBtcCA9IG1vZGVtcFttXTsKKyAgICBpc2hheWVzID0gKGRpYWxjYXBhcyA/IGRpYWxjYXBhcyA6 IG1wLT5jYXBhcykgJiBDS0RfQVQ7CisgICAgc3dpdGNoICh4KSB7CisgICAgICBjYXNlIFZOX0RN X0xQOgorCXJldHVybihpc2hheWVzID8gIiwiIDogIiIpOworICAgICAgY2FzZSBWTl9ETV9TUDoK KyNpZmRlZiBNSU5JRElBTAorCXJldHVybigiIik7CisjZWxzZQorCXJldHVybihtID09IG5fVVNS ID8gIi8iIDogIiIpOworI2VuZGlmIC8qIE1JTklESUFMICovCisgICAgICBjYXNlIFZOX0RNX1BE OgorCXJldHVybihpc2hheWVzID8gIlAiIDogIiIpOworICAgICAgY2FzZSBWTl9ETV9URDoKKwly ZXR1cm4oaXNoYXllcyA/ICJUIiA6ICIiKTsKKyAgICAgIGNhc2UgVk5fRE1fV0E6CisJcmV0dXJu KGlzaGF5ZXMgPyAiQCIgOiAiIik7CisgICAgICBjYXNlIFZOX0RNX1dEOgorCXJldHVybihpc2hh eWVzID8gIlciIDogIiIpOworICAgICAgY2FzZSBWTl9ETV9SQzoKKwlyZXR1cm4oaXNoYXllcyA/ ICI7IiA6ICIiKTsKKyAgICAgIGNhc2UgVk5fRE1fSEY6CisJcmV0dXJuKGlzaGF5ZXMgPyAiISIg OiAiIik7CisgICAgICBjYXNlIFZOX0RNX1dCOgorCXJldHVybihpc2hheWVzID8gIiQiIDogIiIp OworICAgIH0KKyAgICByZXR1cm4oIiIpOworfQorI2VuZGlmIC8qIE5PU1BMICovCisKK3N0YXRp YyBWT0lECitnZXRkaWFsbXRoKCkgeworICAgIGlmIChkaWFsbWF1dG8gJiYgZGlhbGxjYykgewkJ LyogSWYgRElBTCBNRVRIT0QgQVVUTy4uLiAqLworCWludCBpOwkJCQkvKiBhbmQgd2Uga25vdyBv dXIgYXJlYSBjb2RlLi4uICovCisJZm9yIChpID0gMDsgaSA8IG5kaWFsdG9jYzsgaSsrKSB7IC8q IEZpcnN0IGNoZWNrIFRvbmUgY291bnRyaWVzIGxpc3QgKi8KKwkgICAgaWYgKCFzdHJjbXAoZGlh bHRvY2NbaV0sZGlhbGxjYykpIHsKKwkJZGlhbG10aCA9IFhZRE1fVDsKKwkJYnJlYWs7CisJICAg IH0KKwl9CisJZm9yIChpID0gMDsgaSA8IG5kaWFscHVjYzsgaSsrKSB7IC8qIFRoZW4gUHVsc2Ug Y291bnRyaWVzIGxpc3QgKi8KKwkgICAgaWYgKCFzdHJjbXAoZGlhbHB1Y2NbaV0sZGlhbGxjYykp IHsKKwkJZGlhbG10aCA9IFhZRE1fUDsKKwkJYnJlYWs7CisJICAgIH0KKwl9CisgICAgfQorfQor CitWT0lECQkJCS8qIEdldCBkaWFsaW5nIGRlZmF1bHRzIGZyb20gZW52aXJvbm1lbnQgKi8KK2dl dGRpYWxlbnYoKSB7CisgICAgY2hhciAqcCA9IE5VTEw7CisgICAgaW50IGksIHg7CisKKyAgICBt YWtlc3RyKCZwLGdldGVudigiS19ESUFMX0RJUkVDVE9SWSIpKTsKKyAgICBpZiAocCkgeworCWlu dCBpOworCXh3b3JkcyhwLChNQVhERElSIC0gMiksZGlhbGRpciwwKTsKKwlmb3IgKGkgPSAwOyBp IDwgKE1BWERESVIgLSAxKTsgaSsrKSB7CisJICAgIGlmICghZGlhbGRpcltpKzFdKQorCSAgICAg IGJyZWFrOworCSAgICBlbHNlCisJICAgICAgZGlhbGRpcltpXSA9IGRpYWxkaXJbaSsxXTsKKwl9 CisJbmRpYWxkaXIgPSBpOworICAgIH0KKyAgICB4bWFrZXN0cigmZGlhbGxjYyxnZXRlbnYoIktf Q09VTlRSWUNPREUiKSk7IC8qIE15IGNvdW50cnkgY29kZSAqLworICAgIHhtYWtlc3RyKCZkaWFs aXhwLGdldGVudigiS19MRF9QUkVGSVgiKSk7ICAgLyogTXkgbG9uZy1kaXN0YW5jZSBwcmVmaXgg Ki8KKyAgICB4bWFrZXN0cigmZGlhbGxkcCxnZXRlbnYoIktfSU5UTF9QUkVGSVgiKSk7IC8qIE15 IGludGVybmF0aW9uYWwgcHJlZml4ICovCisgICAgeG1ha2VzdHIoJmRpYWxsZHAsZ2V0ZW52KCJL X1RGX1BSRUZJWCIpKTsgICAvKiBOeSBUb2xsLWZyZWUgcHJlZml4ICovCisKKyNpZm5kZWYgTk9J Q1AKKyAgICBwID0gZ2V0ZW52KCJLX0RJQUxfTUVUSE9EIik7CS8qIExvY2FsIGRpYWwgbWV0aG9k ICovCisgICAgaWYgKHApIGlmICgqcCkgeworCWV4dGVybiBzdHJ1Y3Qga2V5dGFiIGRpYWxfbVtd OworCWV4dGVybiBpbnQgbmRpYWxfbTsKKwlpID0gbG9va3VwKGRpYWxfbSxwLG5kaWFsX20sJngp OworCWlmIChpID4gLTEpIHsKKwkgICAgaWYgKGkgPT0gWFlETV9BKSB7CisJCWRpYWxtYXV0byA9 IDE7CisJCWRpYWxtdGggPSBYWURNX0Q7CisJICAgIH0gZWxzZSB7CisJCWRpYWxtYXV0byA9IDA7 CisJCWRpYWxtdGggPSBpOworCSAgICB9CisJfQorICAgIH0KKyNlbmRpZiAvKiBOT0lDUCAqLwor CisgICAgcCA9IE5VTEw7CisgICAgeG1ha2VzdHIoJnAsZ2V0ZW52KCJLX1RGX0FSRUFDT0RFIikp OyAvKiBUb2xsLWZyZWUgYXJlYWNvZGVzICovCisgICAgaWYgKHApIHsKKwlpbnQgaTsKKwl4d29y ZHMocCw3LGRpYWx0ZmMsMCk7CisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCSAgICBpZiAo IWRpYWx0ZmNbaSsxXSkKKwkgICAgICBicmVhazsKKwkgICAgZWxzZQorCSAgICAgIGRpYWx0ZmNb aV0gPSBkaWFsdGZjW2krMV07CisJfQorCW50b2xsZnJlZSA9IGk7CisJZnJlZShwKTsKKyAgICB9 CisgICAgZm9yIChpID0gMDsgaSA8IE1BWFRQQ0M7IGkrKykgewkvKiBDbGVhciBUb25lL1B1bHNl IGNvdW50cnkgbGlzdHMgKi8KKwlkaWFsdG9jY1tpXSA9IE5VTEw7CisJZGlhbHB1Y2NbaV0gPSBO VUxMOworICAgIH0KKyAgICBmb3IgKGkgPSAwOyBpIDwgTUFYVFBDQzsgaSsrKSB7CS8qIEluaXQg VG9uZSBjb3VudHJ5IGxpc3QgKi8KKwlpZiAodG9uZWNjW2ldKQorCSAgbWFrZXN0cigmKGRpYWx0 b2NjW2ldKSx0b25lY2NbaV0pOworCWVsc2UKKwkgIGJyZWFrOworICAgIH0KKyAgICBuZGlhbHRv Y2MgPSBpOworICAgIGZvciAoaSA9IDA7IGkgPCBNQVhUUENDOyBpKyspIHsJLyogSW5pdCBQdWxz ZSBjb3VudHJ5IGxpc3QgKi8KKwlpZiAocHVsc2VjY1tpXSkKKwkgIG1ha2VzdHIoJihkaWFscHVj Y1tpXSkscHVsc2VjY1tpXSk7CisJZWxzZQorCSAgYnJlYWs7CisgICAgfQorICAgIG5kaWFscHVj YyA9IGk7CisKKyAgICBpZiAoZGlhbGxjYykgewkJCS8qIEhhdmUgY291bnRyeSBjb2RlICovCisJ aWYgKCFzdHJjbXAoZGlhbGxjYywiMSIpKSB7CS8qIElmIGl0J3MgMSAqLworCSAgICBpZiAoIWRp YWxsZHApCQkvKiBTZXQgdGhlc2UgcHJlZml4ZXMuLi4gKi8KKwkgICAgICBtYWtlc3RyKCZkaWFs bGRwLCIxIik7CisJICAgIGlmICghZGlhbHRmcCkKKwkgICAgICBtYWtlc3RyKCZkaWFsdGZwLCIx Iik7CisJICAgIGlmICghZGlhbGl4cCkKKwkgICAgICBtYWtlc3RyKCZkaWFsaXhwLCIwMTEiKTsK KwkgICAgaWYgKG50b2xsZnJlZSA9PSAwKSB7CS8qIFRvbGwtZnJlZSBhcmVhIGNvZGVzICovCisJ CWlmICgoZGlhbHRmY1swXSA9IG1hbGxvYyg0KSkpIHsKKwkJICAgIGNrc3RybmNweShkaWFsdGZj WzBdLCI4MDAiLDQpOyAvKiAxOTcwLXNvbWV0aGluZyAqLworCQkgICAgbnRvbGxmcmVlKys7CisJ CSAgICBpZiAoKGRpYWx0ZmNbMV0gPSBtYWxsb2MoNCkpKSB7CisJCQlja3N0cm5jcHkoZGlhbHRm Y1sxXSwiODg4Iiw0KTsgLyogMTk5NiAqLworCQkJbnRvbGxmcmVlKys7CisJCQlpZiAoKGRpYWx0 ZmNbMl0gPSBtYWxsb2MoNCkpKSB7CisJCQkgICAgY2tzdHJuY3B5KGRpYWx0ZmNbMl0sIjg3NyIs NCk7IC8qIDUgQXByaWwgMTk5OCAqLworCQkJICAgIG50b2xsZnJlZSsrOworCQkJICAgIGlmICgo ZGlhbHRmY1szXSA9IG1hbGxvYyg0KSkpIHsKKwkJCQlja3N0cm5jcHkoZGlhbHRmY1szXSwiODY2 Iiw0KTsgLyogMjAwMD8gKi8KKwkJCQludG9sbGZyZWUrKzsKKwkJCSAgICB9CisJCQl9CisJCSAg ICB9CisJCX0KKwkgICAgfQorCX0gZWxzZSBpZiAoIXN0cmNtcChkaWFsbGNjLCIzNTgiKSAmJgor CQkgICAoKGludCkgc3RyY21wKHp6bmRhdGUoKSwiMTk5NjEwMTEiKSA+IDApCisJCSAgICkgewkJ CS8qIEZpbmxhbmQgKi8KKwkgICAgaWYgKCFkaWFsbGRwKQkJLyogTG9uZy1kaXN0YW5jZSBwcmVm aXggKi8KKwkgICAgICBtYWtlc3RyKCZkaWFsbGRwLCI5Iik7CisJICAgIGlmICghZGlhbGl4cCkg CQkvKiBJbnRlcm5hdGlvbmFsIGRpYWxpbmcgcHJlZml4ICovCisJICAgICAgbWFrZXN0cigmZGlh bGl4cCwiOTkwIik7CisJfSBlbHNlIHsJCQkvKiBOb3QgTkFOUCBvciBGaW5sYW5kICovCisJICAg IGlmICghZGlhbGxkcCkKKwkgICAgICBtYWtlc3RyKCZkaWFsbGRwLCIwIik7CisJICAgIGlmICgh ZGlhbGl4cCkKKwkgICAgICBtYWtlc3RyKCZkaWFsaXhwLCIwMCIpOworCX0KKyAgICB9CisgICAg eG1ha2VzdHIoJmRpYWxsYWMsZ2V0ZW52KCJLX0FSRUFDT0RFIikpOworICAgIHhtYWtlc3RyKCZk aWFscHhvLGdldGVudigiS19QQlhfT0NQIikpOworICAgIHhtYWtlc3RyKCZkaWFscHhpLGdldGVu digiS19QQlhfSUNQIikpOworICAgIHAgPSBnZXRlbnYoIktfUEJYX1hDSCIpOworI2lmZGVmIENP TU1FTlQKKyAgICB4bWFrZXN0cigmZGlhbHB4eCxwKTsKKyNlbHNlCisgICAgaWYgKHApIGlmICgq cCkgeworCWNoYXIgKiBzID0gTlVMTDsKKwljaGFyICogcHBbTUFYUEJYRVhDSCsyXTsKKwltYWtl c3RyKCZzLHApOwkJCS8qIE1ha2UgYSBjb3B5IGZvciBwb2tpbmcgKi8KKwlpZiAocykgeworCSAg ICB4d29yZHMocyxNQVhQQlhFWENIKzEscHAsMCk7IC8qIE5vdGU6IHBwW10gaXMgMS1iYXNlZC4g Ki8KKwkgICAgZm9yIChpID0gMDsgaSA8PSBNQVhQQlhFWENIOyBpKyspIHsKKyAgICAgICAgICAg ICAgICBpZiAoIXBwW2krMV0pIGJyZWFrOworCQltYWtlc3RyKCYoZGlhbHB4eFtpXSkscHBbaSsx XSk7CisJCW5kaWFscHh4Kys7CisJICAgIH0KKwkgICAgbWFrZXN0cigmcyxOVUxMKTsJCS8qIEZy ZWUgcG9rZWQgY29weSAqLworCX0KKyAgICB9CisjZW5kaWYgLyogQ09NTUVOVCAqLworfQorCitz dGF0aWMgaW50CitkaWFsZmFpbCh4KSBpbnQgeDsgeworICAgIGNoYXIgKiBzOworCisgICAgZmFp bF9jb2RlID0geDsKKyAgICBkZWJ1ZyhGMTAxLCJja3VkaWFsIGRpYWxmYWlsIiwiIix4KTsKKyAg ICBkcmVzZXQoKTsJCQkJLyogUmVzZXQgYWxhcm0gYW5kIHNpZ25hbCBoYW5kbGVycyAqLworCisg ICAgcHJpbnRmKCIlcyBGYWlsdXJlOiAiLCBmdW5jX2NvZGUgPT0gMCA/ICJESUFMIiA6ICJBTlNX RVIiKTsKKyAgICBpZiAoZGlhbGRweSkgewkJCS8qIElmIHNob3dpbmcgcHJvZ3Jlc3MgKi8KKyAg ICAgICBkZWJ1ZyhGMTAwLCJkaWFsIGRpc3BsYXkgaXMgb24iLCIiLDApOworCXAgPSBja190aW1l KCk7CQkJLyogZ2V0IGN1cnJlbnQgdGltZTsgKi8KKwlpZiAoKnApIHByaW50ZigiJXM6ICIscCk7 CisgICAgfQorICAgIHN3aXRjaCAoZmFpbF9jb2RlKSB7CQkvKiBUeXBlIG9mIGZhaWx1cmUgKi8K KyAgICAgIGNhc2UgRl9USU1FOiAJCQkvKiBUaW1lb3V0ICovCisJaWYgKGRpYWxfd2hhdCA9PSBE V19JTklUKQorCSAgcHJpbnRmICgiVGltZWQgb3V0IHdoaWxlIHRyeWluZyB0byBpbml0aWFsaXpl IG1vZGVtLlxuIik7CisJZWxzZSBpZiAoZGlhbF93aGF0ID09IERXX0RJQUwpCisJICBwcmludGYg KCIlcyBpbnRlcnZhbCBleHBpcmVkLlxuIiwKKwkJICBmdW5jX2NvZGUgPT0gMCA/ICJESUFMIFRJ TUVPVVQiIDogIkFOU1dFUiB0aW1lb3V0Iik7CisJZWxzZQorCSAgcHJpbnRmKCJUaW1lb3V0Llxu Iik7CisJZmZsdXNoKHN0ZG91dCk7CisJaWYgKG1kbWNhcGFzICYgQ0tEX0FUKQorCSAgdHRvYygn XDAxNScpOwkJCS8qIFNlbmQgQ1IgdG8gaW50ZXJydXB0IGRpYWxpbmcgKi8KKwkvKiBTb21lIEhh eWVzIG1vZGVtcyBkb24ndCBmYWlsIHdpdGggQlVTWSBvbiBidXN5IGxpbmVzICovCisJZGlhbHN0 YSA9IERJQV9USU1POworCWRlYnVnKEYxMTAsImRpYWwiLCJ0aW1lb3V0IiwwKTsKKwlicmVhazsK KworICAgICAgY2FzZSBGX0lOVDoJCQkvKiBEaWFsaW5nIGludGVycnVwdGVkICovCisJcHJpbnRm ICgiSW50ZXJydXB0ZWQuXG4iKTsKKwlmZmx1c2goc3Rkb3V0KTsKKyNpZm5kZWYgTk9YRkVSCisJ aW50ZXJydXB0ZWQgPSAxOworI2VuZGlmIC8qIE5PWEZFUiAqLworCWRlYnVnKEYxMTEsImRpYWwi LCJpbnRlcnJ1cHRlZCIsbWRtY2FwYXMgJiBDS0RfQVQpOworCWlmIChtZG1jYXBhcyAmIENLRF9B VCkKKwkgIHR0b2MoJ1wwMTUnKTsJCQkvKiBTZW5kIENSIHRvIGludGVycnVwdCBkaWFsaW5nICov CisJZGlhbHN0YSA9IERJQV9JTlRSOworCWJyZWFrOworCisgICAgY2FzZSBGX01PREVNOgkJCS8q IE1vZGVtIGRldGVjdGVkIGEgZmFpbHVyZSAqLworICAgICAgICAgZGVidWcoRjExMSwiZGlhbGZh aWwoKSIsImxidWYiLGxidWYpOworICAgICAgICAgaWYgKGxidWYgJiYgKmxidWYpIHsKKyAgICAg ICAgICAgIHByaW50ZigiIFwiIik7CisgICAgICAgICAgICBmb3IgKHMgPSBsYnVmOyAqczsgcysr KQorICAgICAgICAgICAgICAgaWYgKGlzcHJpbnQoKnMpKQorICAgICAgICAgICAgICAgICAgcHV0 Y2hhcigqcyk7CQkvKiBEaXNwbGF5IHByaW50YWJsZSByZWFzb24gKi8KKyAgICAgICAgICAgIHBy aW50ZiAoIlwiIik7CisgICAgICAgICB9IGVsc2UgcHJpbnRmKGZ1bmNfY29kZSA9PSAwID8KKyAg ICAgICAgICAgICAgICAgICAgICAgICIgQ2FsbCBub3QgY29tcGxldGVkLiIgOgorICAgICAgICAg ICAgICAgICAgICAgICAgIiBDYWxsIGRpZCBub3QgY29tZSBpbi4iCisgICAgICAgICAgICAgICAg ICAgICAgICApOworCXByaW50ZigiXG4iKTsKKwlkZWJ1ZyhGMTEwLCJkaWFsIixsYnVmLDApOwor CWlmIChkaWFsc3RhIDwgMCkgZGlhbHN0YSA9IERJQV9VTlNQOworCWJyZWFrOworCisgICAgICBj YXNlIEZfTUlOSVQ6CQkJLyogRmFpbHVyZSB0byBpbml0aWFsaXplIG1vZGVtICovCisJcHJpbnRm ICgiRXJyb3IgaW5pdGlhbGl6aW5nIG1vZGVtLlxuIik7CisJZGVidWcoRjExMCwiZGlhbCIsIm1v ZGVtIGluaXQiLDApOworCWRpYWxzdGEgPSBESUFfTk9JTjsKKwlicmVhazsKKworICAgIGRlZmF1 bHQ6CisJcHJpbnRmKCJ1bmtub3duXG4iKTsKKwlkZWJ1ZyhGMTEwLCJkaWFsIiwidW5rbm93biIs MCk7CisJZmZsdXNoKHN0ZG91dCk7CisJaWYgKG1kbWNhcGFzICYgQ0tEX0FUKQorCSAgdHRvYygn XDAxNScpOwkJCS8qIFNlbmQgQ1IgdG8gaW50ZXJydXB0IGRpYWxpbmcgKi8KKwlkaWFsc3RhID0g RElBX0lOVFI7CisgICAgfQorCisjaWZkZWYgRFlOQU1JQworICAgIGlmIChyYnVmKSBmcmVlKHJi dWYpOyByYnVmID0gTlVMTDsKKyAgICBpZiAoZmJ1ZikgZnJlZShmYnVmKTsgZmJ1ZiA9IE5VTEw7 CisjZW5kaWYgLyogRFlOQU1JQyAqLworCisgICAgaWYgKGRpYWxzdGEgPCAwKSBkaWFsc3RhID0g RElBX1VFUlI7IC8qIFNldCBmYWlsdXJlIGNvZGUgKi8KKyAgICByZXR1cm4oMCk7CQkJCS8qIFJl dHVybiB6ZXJvIChpbXBvcnRhbnQpICovCit9CisKKy8qICBDIEsgRCBJIEEgTAkgLS0gIERpYWwg dXAgdGhlIHJlbW90ZSBzeXN0ZW0gKi8KKworLyogUmV0dXJucyAxIGlmIGNhbGwgY29tcGxldGVk LCAwIG90aGVyd2lzZSAqLworCitzdGF0aWMgaW50IG1kbXdhaXQsIG1kbXN0YXQgPSAwOworI2lm bmRlZiBDS19UQVBJCitzdGF0aWMKKyNlbmRpZiAvKiBDS19UQVBJICovCitpbnQgd2FpdGN0Owor aW50IG1kbXdhaXRkID0gMTAgOwkJCS8qIGRpYWx0bW8gLyBtZG13YWl0IGRpZmZlcmVuY2UgKi8K K3N0YXRpYyBjaGFyIGM7CitzdGF0aWMgY2hhciAqdGVsbmJyOworCitzdGF0aWMgaW50IHdyID0g MDsJCQkvKiB3ciA9IHdha2UgcmF0ZSAqLworc3RhdGljIGNoYXIgKiB3czsJCQkvKiB3cyA9IHdh a2Ugc3RyaW5nICovCitzdGF0aWMgY2hhciAqIHhudW0gPSBOVUxMOworc3RhdGljIGludCBpbml0 ZWQgPSAwOworCitzdGF0aWMgU0lHVFlQCisjaWZkZWYgQ0tfQU5TSUMKK19kb2RpYWwodm9pZCAq IHRocmVhZGluZm8pCisjZWxzZSAvKiBDS19BTlNJQyAqLworX2RvZGlhbCh0aHJlYWRpbmZvKSBW T0lEICogdGhyZWFkaW5mbzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogX2RvZGlhbCAqLyB7 CisgICAgY2hhciBjMjsKKyAgICBjaGFyICpkY21kLCAqcywgKmZsb2NtZCA9IE5VTEw7CisgICAg aW50IHggPSAwLCBuID0gRl9USU1FOworCisjaWZkZWYgTlRTSUcKKyAgICBzaWduYWwoIFNJR0lO VCwgZGlhbGludCApOworICAgIGlmICh0aHJlYWRpbmZvKSB7CQkJLyogVGhyZWFkIGxvY2FsIHN0 b3JhZ2UuLi4gKi8KKwlUbHNTZXRWYWx1ZShUbHNJbmRleCx0aHJlYWRpbmZvKTsKKyAgICB9Cisj ZW5kaWYgLyogTlRTSUcgKi8KKworICAgIGRjbWQgPSBkaWFsY21kID8gZGlhbGNtZCA6IG1wLT5k aWFsX3N0cjsKKyAgICBpZiAoKGludClzdHJsZW4oZGNtZCkgKyAoaW50KXN0cmxlbih0ZWxuYnIp ID4gKExCVUZMIC0gMikpIHsKKwlwcmludGYoIkRJQUwgY29tbWFuZCArIHBob25lIG51bWJlciB0 b28gbG9uZyFcbiIpOworCWRyZXNldCgpOworI2lmZGVmIERZTkFNSUMKKwlpZiAocmJ1ZikgZnJl ZShyYnVmKTsgcmJ1ZiA9IE5VTEw7CisJaWYgKGZidWYpIGZyZWUoZmJ1Zik7IGZidWYgPSBOVUxM OworI2VuZGlmIC8qIERZTkFNSUMgKi8KKyNpZmRlZiBOVFNJRworCWNrVGhyZWFkRW5kKHRocmVh ZGluZm8pOworI2VuZGlmIC8qIE5UU0lHICovCisJU0lHUkVUVVJOOwkgLyogTm8gY29udmVyc2F0 aW9uIHdpdGggbW9kZW0gdG8gY29tcGxldGUgZGlhbGluZyAqLworICAgIH0KKyAgICBtYWtlc3Ry KCZ4bnVtLHRlbG5icik7CisKKyAgICBnZXRkaWFsbXRoKCk7CQkJLyogR2V0IGRpYWwgbWV0aG9k ICovCisKKyNpZmRlZiBDS19BVERUCisgICAgLyogQ29tYmluZSB0aGUgU0VUIERJQUwgTUVUSE9E IGNvbW1hbmQgd2l0aCB0aGUgRElBTCBjb21tYW5kIHN0cmluZyAqLworICAgIGlmICghZGlhbGNt ZCAmJgkJCS8qIFVzaW5nIGRlZmF1bHQgRElBTCBjb21tYW5kICovCisJKG1kbWNhcGFzICYgQ0tE X0FUKSAmJgkJLyogQVQgY29tbWFuZCBzZXQgb25seSAqLworCSgoZGlhbG10aCA9PSBYWURNX1Qg JiYgIWRpYWx0b25lKSB8fCAvKiBhbmQgdXNpbmcgZGVmYXVsdCAqLworCSAoZGlhbG10aCA9PSBY WURNX1AgJiYgIWRpYWxwdWxzZSkpKSB7IC8qIG1vZGVtIGNvbW1hbmRzLi4uICovCisJY2hhciBj OworCWRlYnVnKEYxMTAsImRpYWwgYXRkdCB4bnVtIDEiLHhudW0sMCk7CisJcyA9IGRjbWQ7CisJ ZGVidWcoRjExMCwiZGlhbCBhdGR0IHMiLHMsMCk7CisJaWYgKCp0ZWxuYnIgIT0gJ1QnICYmCisJ ICAgICp0ZWxuYnIgIT0gJ1AnICYmCisJICAgICp0ZWxuYnIgIT0gJ3QnICYmCisJICAgICp0ZWxu YnIgIT0gJ3AnICYmCisJICAgICFja3N0cmNtcChzLCJhdGQiLDMsMCkgJiYKKwkgICAgc1szXSAh PSAnVCcgJiYKKwkgICAgc1szXSAhPSAnUCcgJiYKKwkgICAgc1szXSAhPSAndCcgJiYKKwkgICAg c1szXSAhPSAncCcpIHsKKwkgICAgY2hhciB4YnVmWzIwMF07CisJICAgIGMgPSAoZGlhbG10aCA9 PSBYWURNX1QpID8gJ1QnIDogJ1AnOworCSAgICBpZiAoaXNsb3dlcihzWzBdKSkKKwkgICAgICBj ID0gdG9sb3dlcihjKTsKKwkgICAgaWYgKChpbnQpc3RybGVuKHRlbG5icikgPCAxOTkpIHsKKwkJ c3ByaW50Zih4YnVmLCIlYyVzIixjLHRlbG5icik7CisJCW1ha2VzdHIoJnhudW0seGJ1Zik7CisJ ICAgIH0KKwl9CisgICAgfQorI2VuZGlmIC8qIENLX0FURFQgKi8KKyAgICBkZWJ1ZyhGMTExLCJf ZG9kaWFsIix4bnVtLHhyZWRpYWwpOworCisgICAgLyogSGFuZyB1cCB0aGUgbW9kZW0gKGluIGNh c2UgaXQgd2Fzbid0ICJvbiBob29rIikgKi8KKyAgICAvKiBCdXQgb25seSBpZiBTRVQgRElBTCBI QU5HVVAgT04uLi4gKi8KKworICAgIGlmICgheHJlZGlhbCkgewkJCS8qIE1vZGVtIG5vdCBpbml0 YWxpemVkIHlldC4gKi8KKwlpbml0ZWQgPSAwOworICAgIH0KKyAgICBpZiAoIXhyZWRpYWwgfHwg IWluaXRlZCkgeworCWlmIChkaWFsaHVwKCkgPCAwKSB7CQkvKiBIYW5ndXAgZmlyc3QgKi8KKwkg ICAgZGVidWcoRjEwMCwiX2RvZGlhbCBkaWFsaHVwIGZhaWxlZCIsIiIsMCk7CisjaWZuZGVmIE1J TklESUFMCisJICAgIGlmIChtZG1jYXBhcyAmIENLRF9UQikJLyogVGVsZWJpdHMgbWlnaHQgbmVl ZCBhIEJSRUFLICovCisJICAgICAgdHRzbmRiKCk7CQkJLyogIGZpcnN0LiAqLworI2VuZGlmIC8q IE1JTklESUFMICovCisJICAgIGlmIChkaWFsaG5nICYmIGRpYWxzdGEgIT0gRElBX1BBUlQpIHsg LyogSWYgaGFuZ3VwIGZhaWxlZCwgKi8KKwkJdHRjbG9zKDApOwkJLyogY2xvc2UgYW5kIHJlb3Bl biB0aGUgZGV2aWNlLiAqLworCQlpZiAodHRvcGVuKHR0bmFtZSwmbG9jYWwsbXltZG10eXAsMCkg PCAwKSB7CisJCSAgICBwcmludGYoIlNvcnJ5LCBDYW4ndCBoYW5nIHVwIGNvbW11bmljYXRpb24g ZGV2aWNlLlxuIik7CisJCSAgICBwcmludGYoIlRyeSAnc2V0IGxpbmUgJXMnIGFnYWluLlxuIix0 dG5hbWUpOworCQkgICAgZGlhbHN0YSA9IERJQV9IQU5HOworI2lmZGVmIERZTkFNSUMKKwkJICAg IGlmIChyYnVmKSBmcmVlKHJidWYpOyByYnVmID0gTlVMTDsKKwkJICAgIGlmIChmYnVmKSBmcmVl KGZidWYpOyBmYnVmID0gTlVMTDsKKyNlbmRpZiAvKiBEWU5BTUlDICovCisJCSAgICBkcmVzZXQo KTsKKyNpZmRlZiBOVFNJRworCQkgICAgY2tUaHJlYWRFbmQodGhyZWFkaW5mbyk7CisjZW5kaWYg LyogTlRTSUcgKi8KKwkJICAgIFNJR1JFVFVSTjsKKwkJfQorCSAgICB9CisJfQorCWluaXRlZCA9 IDA7CQkJLyogV2UgaHVuZyB1cCBzbyBtdXN0IHJlaW5pdCAqLworICAgIH0KKyNpZm5kZWYgTUlO SURJQUwKKyAgICAvKiBEb24ndCBzdGFydCB0YWxraW5nIHRvIFJvbG0gdG9vIHNvb24gKi8KKyAg ICBpZiAobXltZG10eXAgPT0gbl9ST0xNICYmIGRpYWxzdGEgIT0gRElBX1BBUlQpCisgICAgICBt c2xlZXAoNTAwKTsKKyNlbmRpZiAvKiBNSU5JRElBTCAqLworCisgICAgaWYgKGRpYWxzdGEgIT0g RElBX1BBUlQJCS8qIFNvbWUgaW5pdGlhbCBzZXR1cHMuICovCisjaWZuZGVmIE1JTklESUFMCisJ JiYgbXltZG10eXAgIT0gbl9BVFRVUEMKKyNlbmRpZiAvKiBNSU5JRElBTCAqLworCSkgeworCWZh aWxfY29kZSA9IEZfTUlOSVQ7CQkvKiBEZWZhdWx0IGZhaWx1cmUgY29kZSAqLworCWRpYWxfd2hh dCA9IERXX0lOSVQ7CQkvKiBXaGF0IEknbSBEb2luZyBOb3cgICAqLworCWlmIChkaWFsZHB5KSB7 CQkJLyogSWYgc2hvd2luZyBwcm9ncmVzcywgKi8KKwkgICAgcCA9IGNrX3RpbWUoKTsJCS8qIGdl dCB0aW1lc3RhbXAuICAgKi8KKwkgICAgaWYgKCFpbml0ZWQpCisJICAgICAgaWYgKCpwKQorCQlw cmludGYoIiBJbml0aWFsaXppbmc6ICVzLi4uXG4iLHApOworCX0KKyAgICB9CisjaWZuZGVmIE1J TklESUFMCisjaWZkZWYgQVRUNzMwMAorICAgIGlmIChteW1kbXR5cCA9PSBuX0FUVFVQQykgewor LyoKKyAgRm9yIEFUVDczMDAvVW5peCBQQydzIHdpdGggdGhlaXIgc3BlY2lhbCBpbnRlcm5hbCBt b2RlbS4gIFdob2xlIGRpYWxpbmcKKyAgcHJvY2VzcyBpcyBoYW5kbGVkIHJpZ2h0IGhlcmUsIGFu IGV4Y2VwdGlvbiB0byB0aGUgbm9ybWFsIHN0cnVjdHVyZS4KKyAgVGltZW91dCBhbmQgdXNlciBp bnRlcnJ1cHRzIGFyZSBlbmFibGVkIGR1cmluZyBkaWFsaW5nLiAgYXR0ZGlhbCgpIGlzIGluCisg IGZpbGUgY2t1dGlvLmMuICAtIGpyZAorKi8KKyAgICAgICAgX1BST1RPVFlQKCBpbnQgYXR0ZGlh bCwgKGNoYXIgKiwgbG9uZywgY2hhciAqKSApOworCWZhaWxfY29kZSA9IEZfTU9ERU07CQkvKiBE ZWZhdWx0IGZhaWx1cmUgY29kZSAqLworCWRpYWxfd2hhdCA9IERXX0RJQUw7CisJaWYgKGRpYWxk cHkpIHsJCQkvKiBJZiBzaG93aW5nIHByb2dyZXNzICovCisJICAgIHAgPSBja190aW1lKCk7CQkv KiBnZXQgY3VycmVudCB0aW1lOyAqLworCSAgICBpZiAoKnApCisJICAgICAgcHJpbnRmKCIgRGlh bGluZzogJXMuLi5cbiIscCk7CisJfQorCWFsYXJtKHdhaXRjdCk7CQkJLyogU2V0IGFsYXJtICov CisJaWYgKGF0dGRpYWwodHRuYW1lLHNwZWVkLHRlbG5icikpIHsgLyogZGlhbCBpbnRlcm5hbCBt b2RlbSAqLworCSAgICBkcmVzZXQoKTsJCQkvKiByZXNldCBhbGFybXMsIGV0Yy4gKi8KKwkgICAg cHJpbnRmKCIgQ2FsbCBmYWlsZWQuXHJcbiIpOworCSAgICBkaWFsaHVwKCk7CSAgICAgICAgCS8q IEhhbmd1cCB0aGUgY2FsbCAqLworI2lmZGVmIERZTkFNSUMKKwkgICAgaWYgKHJidWYpIGZyZWUo cmJ1Zik7IHJidWYgPSBOVUxMOworCSAgICBpZiAoZmJ1ZikgZnJlZShmYnVmKTsgZmJ1ZiA9IE5V TEw7CisjZW5kaWYgLyogRFlOQU1JQyAqLworCSAgICBkaWFsc3RhID0gRElBX1VFUlI7CisjaWZk ZWYgTlRTSUcKKwkgICAgY2tUaHJlYWRFbmQodGhyZWFkaW5mbyk7CisjZW5kaWYgLyogTlRTSUcg Ki8KKwkgICAgU0lHUkVUVVJOOwkJCS8qIHJldHVybiBmYWlsdXJlICovCisJfQorCWRyZXNldCgp OwkJCS8qIHJlc2V0IGFsYXJtcywgZXRjLiAqLworCXR0cGt0KHNwZWVkLEZMT19ESUFYLHBhcml0 eSk7CS8qIGNhbmNlbCBkaWFsaW5nIGlvY3RsICovCisJaWYgKCFxdWlldCAmJiAhYmFja2dyZCkg eworCSAgICBpZiAoZGlhbGRweSkgeworCQlwcmludGYoIlxuIik7CisJCXByaW50ZigiIENhbGwg Y29tcGxldGUuXHJcbiIpOworCSAgICB9IGVsc2UgaWYgKG1vZGVtbXNnWzBdKQorCQlwcmludGYo IiBDYWxsIGNvbXBsZXRlOiBcIiVzXCIuXHJcbiIsKGNoYXIgKiltb2RlbW1zZyk7CisJICAgIGVs c2UKKwkgICAgICBwcmludGYoIiBDYWxsIGNvbXBsZXRlLlxyXG4iKTsKKwl9CisjaWZkZWYgQ0tM T0dESUFMCisJZG9sb2dkaWFsKHRlbG5icik7CisjZW5kaWYgLyogQ0tMT0dESUFMICovCisKKwlk aWFsc3RhID0gRElBX09LOworI2lmZGVmIERZTkFNSUMKKwlpZiAocmJ1ZikgZnJlZShyYnVmKTsg cmJ1ZiA9IE5VTEw7CisJaWYgKGZidWYpIGZyZWUoZmJ1Zik7IGZidWYgPSBOVUxMOworI2VuZGlm IC8qIERZTkFNSUMgKi8KKyNpZmRlZiBOVFNJRworCWNrVGhyZWFkRW5kKHRocmVhZGluZm8pOwor I2VuZGlmIC8qIE5UU0lHICovCisJU0lHUkVUVVJOOwkvKiBObyBjb252ZXJzYXRpb24gd2l0aCBt b2RlbSB0byBjb21wbGV0ZSBkaWFsaW5nICovCisgICAgfSBlbHNlCisjZW5kaWYgLyogQVRUNzMw MCAqLworI2lmZGVmIENLX1RBUEkKKyAgICAgIGlmICh0dHRhcGkgJiYgIXRhcGlwYXNzKSB7CS8q IFRBUEkgRGlhbGluZyAqLworCSAgc3dpdGNoIChmdW5jX2NvZGUpIHsKKwkgICAgY2FzZSAwOgkJ CS8qIERpYWwgKi8KKwkgICAgICBpZiAoY2t0YXBpZGlhbCh0ZWxuYnIpKSB7CisJCSAgZmFpbF9j b2RlID0gMDsKKwkJICBpZiAocGFydGlhbCkgeworCQkgICAgICBkaWFsc3RhID0gRElBX1BBUlQ7 CisJCSAgfSBlbHNlIHsKKwkJICAgICAgZGlhbHN0YSA9IERJQV9PSzsKKwkJICAgICAgc3BlZWQg PSB0dGdzcGQoKTsKKwkJICB9CisJICAgICAgfSBlbHNlIHsKKwkJICBpZiAoZGlhbHN0YSA9PSBE SUFfUEFSVCkKKwkJICAgIGNrdGFwaWhhbmd1cCgpOworCQkgIGlmICghZmFpbF9jb2RlKQorCQkg ICAgZmFpbF9jb2RlID0gRl9NT0RFTTsKKwkJICBkaWFsc3RhID0gRElBX1RBUEk7CisJICAgICAg fQorCSAgICAgIGJyZWFrOworCSAgICBjYXNlIDE6IHsJCQkvKiBBbnN3ZXIgKi8KKwkJbG9uZyBz dHJ0dGltZSA9IHRpbWUoKGxvbmcgKilOVUxMKTsKKwkJbG9uZyBkaWZmID0gMDsKKwkJZG8gewor CQkgICAgaWYgKGRpYWxhdG1vID4gMCkgeworCQkJc3RydHRpbWUgKz0gZGlmZjsKKwkJCXdhaXRj dCAgIC09IGRpZmY7CisJCSAgICB9CisJCSAgICBmYWlsX2NvZGUgPSAwOworCQkgICAgaWYgKGNr dGFwaWFuc3dlcigpKSB7IC8qIFNVQ0NFU1MgKi8KKwkJCWRpYWxzdGEgPSBESUFfT0s7CisJCQlz cGVlZCA9IHR0Z3NwZCgpOworCQkJYnJlYWs7CisJCSAgICB9IGVsc2UgewkJLyogRkFJTFVSRSAq LworCQkJaWYgKGZhaWxfY29kZSkgeworCQkJICAgIGRpYWxzdGEgPSBESUFfVEFQSTsKKwkJCSAg ICBicmVhazsKKwkJCX0gZWxzZSB7CisJCQkgICAgZmFpbF9jb2RlID0gRl9NT0RFTTsKKwkJCSAg ICBkaWFsc3RhID0gRElBX1RBUEk7CisJCQl9CisJCSAgICB9CisJCSAgICBpZiAoZGlhbGF0bW8g PiAwKSB7CisJCQlkaWZmID0gdGltZSgobG9uZyAqKU5VTEwpIC0gc3RydHRpbWU7CisJCSAgICB9 CisJCX0gd2hpbGUgKChkaWFsYXRtbyA+IDApID8gKGRpZmYgPCB3YWl0Y3QpIDogMSk7CisJCWJy ZWFrOworCSAgICB9CisJICB9CisjaWZkZWYgTlRTSUcKKwkgIGNrVGhyZWFkRW5kKHRocmVhZGlu Zm8pOworI2VuZGlmIC8qIE5UU0lHICovCisJICBTSUdSRVRVUk47CisgICAgICB9IGVsc2UKKyNl bmRpZiAvKiBDS19UQVBJICovCisjZW5kaWYgLyogTUlOSURJQUwgKi8KKworLyogTW9kZW1zIHdp dGggQVQgY29tbWFuZCBzZXQuLi4gKi8KKworICAgICAgaWYgKChtZG1jYXBhcyAmIENLRF9BVCkg JiYgZGlhbHN0YSAhPSBESUFfUEFSVCkgeworCisJICBpZiAoZGlhbHBhY2UgPiAtMSkJCS8qIFNl dCBpbnRlcmNoYXJhY3RlciBwYWNpbmcgKi8KKwkgICAgd3IgPSBkaWFscGFjZTsKKwkgIGVsc2UK KwkgICAgd3IgPSBtcC0+d2FrZV9yYXRlOworCisJICBpZiAoZGlhbGluaSkJCQkvKiBHZXQgd2Fr ZXVwL2luaXQgc3RyaW5nICovCisJICAgIHdzID0gZGlhbGluaTsKKwkgIGVsc2UKKwkgICAgd3Mg PSBtcC0+d2FrZV9zdHI7CisjaWZkZWYgQ09NTUVOVAorCSAgaWYgKCF3cykgd3MgPSAiXDAxNSI7 CQkvKiBJZiBub25lLCB1c2UgQ1IgKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisKKwkgIC8qIEZp cnN0IGdldCB0aGUgbW9kZW0ncyBhdHRlbnRpb24gYW5kIGVuYWJsZSByZXN1bHQgY29kZXMgKi8K KworCSAgZm9yICh0cmllcyA9IDA7IHRyaWVzIDwgNTsgdHJpZXMrKykgeyAvKiBTZW5kIHNob3J0 IGNvbW1hbmQgKi8KKwkgICAgICBpZiAodHJpZXMgPiAwKSB7CisJCSAgdHRvYygnXDAxNScpOwkJ LyogQVQgbXVzdCBnbyBmaXJzdCBmb3Igc3BlZWQgKi8KKwkJICBtc2xlZXAod3IpOwkJLyogZGV0 ZWN0aW9uLiAqLworCSAgICAgIH0KKwkgICAgICBpZiAobXltZG10eXAgPT0gbl9HRU5FUklDKSAv KiBGb3JjZSB3b3JkIHJlc3VsdCBjb2RlcyAqLworCQl0dHNsb3coIkFUUTBWMVwwMTUiLHdyKTsg LyogZm9yIGdlbmVyaWMgbW9kZW0gdHlwZSAqLworCSAgICAgIGVsc2UKKwkJdHRzbG93KCJBVFEw XDAxNSIsd3IpOworCSAgICAgIG1kbXN0YXQgPSBnZXRvayh0cmllcyA8IDIgPyAyIDogdHJpZXMs IDEpOyAvKiBHZXQgcmVzcG9uc2UgKi8KKwkgICAgICBpZiAobWRtc3RhdCA+IDApIGJyZWFrOwkv KiBPSyAtIGRvbmUgKi8KKwkgICAgICBpZiAoZGlhbGRweSAmJiB0cmllcyA+IDApIHsKKwkJICBw cmludGYoIlxyXG4gTm8gcmVzcG9uc2UgZnJvbSBtb2RlbSIpOworCQkgIGlmICh0cmllcyA9PSA0 KSB7CisJCSAgICAgIHByaW50ZigiLlxyXG4iKTsKKwkJICAgICAgZGlhbHN0YSA9IERJQV9OUlNQ OworI2lmZGVmIERZTkFNSUMKKwkJICAgICAgaWYgKHJidWYpIGZyZWUocmJ1Zik7IHJidWYgPSBO VUxMOworCQkgICAgICBpZiAoZmJ1ZikgZnJlZShmYnVmKTsgZmJ1ZiA9IE5VTEw7CisjZW5kaWYg LyogRFlOQU1JQyAqLworI2lmZGVmIE5UU0lHCisJCSAgICAgIGNrVGhyZWFkRW5kKHRocmVhZGlu Zm8pOworI2VuZGlmIC8qIE5UU0lHICovCisJCSAgICAgIFNJR1JFVFVSTjsJLyogcmV0dXJuIGZh aWx1cmUgKi8KKwkJICB9CisJCSAgcHJpbnRmKCIsIHJldHJ5aW5nJXMuLi5cclxuIiwKKwkJCSAo dHJpZXMgPiAxKSA/ICIgYWdhaW4iIDogIiIpOworCQkgIGZmbHVzaChzdGRvdXQpOworCSAgICAg IH0KKwkgICAgICB0dGZsdWkoKTsKKwkgICAgICBzd2l0Y2ggKHRyaWVzKSB7CisJCWNhc2UgMDog bXNsZWVwKDEwMCk7IGJyZWFrOworCQljYXNlIDE6IHR0c25kYigpOyBicmVhazsKKwkJZGVmYXVs dDoKKwkJICBpZiAobmV0d29yaykgeworCQkgICAgICB0dHNuZGIoKTsKKwkJICB9IGVsc2Ugewor CQkgICAgICBpZiAodHJpZXMgPT0gMikgeworCQkJICB0dGhhbmcoKTsKKwkJCSAgdHRmbHVpKCk7 CisJCSAgICAgIH0gZWxzZSB7CisJCQkgIG1kbWh1cCgpOworCQkgICAgICB9CisJCSAgICAgIGlu aXRlZCA9IDA7CisJCSAgfQorCSAgICAgIH0KKwkgICAgICBmZmx1c2goc3Rkb3V0KTsKKwkgIH0K KwkgIGRlYnVnKEYxMDEsIl9kb2RpYWwgQVRRMCBtZG1zdGF0IiwiIixtZG1zdGF0KTsKKworCSAg aWYgKHhyZWRpYWwgJiYgaW5pdGVkKSB7CS8qIFJlZGlhbGluZy4uLiAqLworCSAgICAgIHR0b2Mo J1wwMTUnKTsJCS8qIENhbmNlbCBwcmV2aW91cyAqLworCSAgICAgIG1zbGVlcCgyNTApOwkJLyog V2FpdCBhIGJpdCAqLworI2lmZGVmIENPTU1FTlQKKy8qIFRoaXMgd2Fzbid0IHRoZSBwcm9ibGVt Li4uICovCisJICAgICAgdHRmbHVpKCk7CQkJLyogQ2xlYXIgb3V0IHN0dWZmIGZyb20gbW9kZW0g c2V0dXAgKi8KKwkgICAgICB0dHNsb3coIkFUUzc9NjBcMDE1Iix3cik7CS8qIFJlZG8gY2Fycmll ciB3YWl0ICovCisJICAgICAgZ2V0b2soNCwxKTsJCS8qIEdldCByZXNwb25zZSAqLworI2VuZGlm IC8qIENPTU1FTlQgKi8KKwkgICAgICBhbGFybSgwKTsJCQkvKiBKdXN0IGluIGNhc2UuLi4gKi8K KwkgICAgICB0dGZsdWkoKTsJCQkvKiBDbGVhciBvdXQgc3R1ZmYgZnJvbSBtb2RlbSBzZXR1cCAq LworCSAgICAgIGdvdG8gUkVESUFMOwkJLyogU2tpcCBzZXR1cCAtIHdlIGFscmVhZHkgZGlkIGl0 ICovCisJICB9CisvKgorICBEbyBmbG93IGNvbnRyb2wgbmV4dCBiZWNhdXNlIGEgbG9uZyBpbml0 IHN0cmluZyBlY2hvaW5nIGJhY2sgY291bGQKKyAgY2F1c2UgZGF0YSBvdmVycnVucywgY2F1c2lu ZyB1cyB0byBtaXNzIHRoZSBPSywgb3IgKHdvcnNlKSB0byBnZXQgb3V0CisgIG9mIHN5bmMgZW50 aXJlbHkuCisqLworCSAgeCA9IDA7CQkJLyogVXNlciBzYWlkIFNFVCBESUFMIEZMT1cgUlRTL0NU UyAqLworCSAgaWYgKGRpYWxmYyA9PSBGTE9fUlRTQyB8fAkvKiBFdmVuIGlmIEtlcm1pdCdzIEZM T1cgaXNuJ3QuLi4gICovCisJICAgICAgKGRpYWxmYyA9PSBGTE9fQVVUTyAmJiBmbG93ID09IEZM T19SVFNDKSkgeworCSAgICAgIGlmIChkaWFsaHdmYykgewkJLyogVXNlci1kZWZpbmVkIEhXRkMg c3RyaW5nICovCisJCSAgaWYgKCpkaWFsaHdmYykgeworCQkgICAgICB4ID0gMTsKKwkJICAgICAg ZmxvY21kID0gZGlhbGh3ZmM7CisJCSAgfQorCSAgICAgIH0gZWxzZSBpZiAoKG1kbWNhcGFzICYg Q0tEX0hXKSAmJiAqKG1wLT5od2ZjX3N0cikpIHsKKwkJICB4ID0gMTsKKwkJICBmbG9jbWQgPSBt cC0+aHdmY19zdHI7CisJICAgICAgfQorCSAgfSBlbHNlIGlmIChkaWFsZmMgPT0gRkxPX1hPTlgg fHwgLyogVXNlciBzYWlkIFNFVCBESUFMIEZMT1cgU09GVCAqLworCQkgICAgIChkaWFsZmMgPT0g RkxPX0FVVE8gJiYgZmxvdyA9PSBGTE9fWE9OWCkpIHsKKwkgICAgICBpZiAoZGlhbHN3ZmMpIHsK KwkJICBpZiAoKmRpYWxzd2ZjKSB7CisJCSAgICAgIHggPSAxOworCQkgICAgICBmbG9jbWQgPSBk aWFsc3dmYzsKKwkJICB9CisJICAgICAgfSBlbHNlIGlmICgobWRtY2FwYXMgJiBDS0RfU1cpICYm ICoobXAtPnN3ZmNfc3RyKSkgeworCQkgIHggPSAxOworCQkgIGZsb2NtZCA9IG1wLT5zd2ZjX3N0 cjsKKwkgICAgICB9CisJICB9IGVsc2UgaWYgKGRpYWxmYyA9PSBGTE9fTk9ORSkgeyAvKiBVc2Vy IHNhaWQgU0VUIERJQUwgRkxPVyBOT05FICovCisJICAgICAgaWYgKGRpYWxub2ZjKSB7CisJCSAg aWYgKCpkaWFsbm9mYykgeworCQkgICAgICB4ID0gMTsKKwkJICAgICAgZmxvY21kID0gZGlhbG5v ZmM7CisJCSAgfQorCSAgICAgIH0gZWxzZSBpZiAobXAtPm5vZmNfc3RyICYmICoobXAtPm5vZmNf c3RyKSkgeworCQkgIHggPSAxOworCQkgIGZsb2NtZCA9IG1wLT5ub2ZjX3N0cjsKKwkgICAgICB9 CisJICB9CisJICBpZiAoeCkgewkJCS8qIFNlbmQgdGhlIGZsb3cgY29udHJvbCBjb21tYW5kICov CisJICAgICAgZGVidWcoRjExMCwiX2RvZGlhbCBmbG9jbWQiLGZsb2NtZCwwKTsKKwkgICAgICBm b3IgKHRyaWVzID0gNDsgdHJpZXMgPiAwOyB0cmllcy0tKSB7IC8qIFNlbmQgdGhlIGNvbW1hbmQg Ki8KKwkJICB0dHNsb3coZmxvY21kLHdyKTsKKwkJICBtZG1zdGF0ID0gZ2V0b2soNSwxKTsKKwkJ ICBpZiAobWRtc3RhdCA+IDApIGJyZWFrOworCQkgIGlmIChkaWFsZHB5ICYmIHRyaWVzID4gMSkK KwkJICAgIHByaW50ZigiIE5vIHJlc3BvbnNlIGZyb20gbW9kZW0sIHJldHJ5aW5nJXMuLi5cbiIs CisJCQkgICAodHJpZXMgPCA0KSA/ICIgYWdhaW4iIDogIiIpOworCSAgICAgIH0KKworI2lmZGVm IENLX1RUU0VURkxPVworI2lmZGVmIENLX1JUU0NUUworLyoKKyAgU28gZmFyIG9ubHkgY2t1dGlv LmMgaGFzIHR0c2V0ZmxvdygpLgorICBXZSBoYXZlIGp1c3QgdG9sZCB0aGUgbW9kZW0gdG8gdHVy biBvbiBSVFMvQ1RTIGZsb3cgY29udHJvbCBhbmQgdGhlIG1vZGVtCisgIGhhcyBzYWlkIE9LLiAg QnV0IHdlIG91cnNlbHZlcyBoYXZlIG5vdCB0dXJuZWQgaXQgb24geWV0IGJlY2F1c2Ugb2YgdGhl CisgIGRpc2d1c3RpbmcgdHRwa3QoLi4uRkxPX0RJQUwuLi4pIGhhY2suICBTbyBub3csIGlmIHRo ZSBjb21wdXRlciBkb2VzIG5vdAorICBoYXBwZW4gdG8gYmUgYXNzZXJ0aW5nIFJUUywgdGhlIG1v ZGVtIHdpbGwgbm8gbG9uZ2VyIHNlbmQgY2hhcmFjdGVycyB0byBpdC4KKyAgU28gYXQgRVhBQ1RM WSBUSElTIFBPSU5ULCB3ZSBtdXN0IGVuYWJsZSBSVFMvQ1RTIGluIHRoZSBkZXZpY2UgZHJpdmVy LgorKi8KKwkgICAgICBpZiAoZGlhbGZjID09IEZMT19SVFNDIHx8CisJCSAgKGRpYWxmYyA9PSBG TE9fQVVUTyAmJiBmbG93ID09IEZMT19SVFNDKSkgeworCQkgIHR0c2V0ZmxvdyhGTE9fUlRTQyk7 CisJICAgICAgfQorI2VuZGlmIC8qIENLX1JUU0NUUyAqLworI2VuZGlmIC8qIENLX1RUU0VURkxP VyAqLworCSAgfQorCSAgdHRmbHVpKCk7CQkJLyogQ2xlYXIgb3V0IHN0dWZmIGZyb20gbW9kZW0g c2V0dXAgKi8KKwkgIG1zbGVlcCgyNTApOworCisJICBpZiAoIXdzKSBnb3RvIHhkaWFsZWM7CS8q IE5vIGluaXQgc3RyaW5nICovCisJICBpZiAoISp3cykgZ290byB4ZGlhbGVjOworCisJICBmb3Ig KHRyaWVzID0gNDsgdHJpZXMgPiAwOyB0cmllcy0tKSB7IC8qIFNlbmQgaW5pdCBzdHJpbmcgKi8K KwkgICAgICB0dHNsb3cod3Msd3IpOworCSAgICAgIG1kbXN0YXQgPSBnZXRvayg0LDEpOwkvKiBH ZXQgcmVzcG9uc2UgKi8KKwkgICAgICBpZiAobWRtc3RhdCA+IDApIGJyZWFrOworCSAgICAgIGlm IChkaWFsZHB5ICYmIHRyaWVzID4gMSkKKwkJcHJpbnRmKCIgTm8gcmVzcG9uc2UgZnJvbSBtb2Rl bSwgcmV0cnlpbmclcy4uLlxuIiwKKwkJICAgICAgICh0cmllcyA8IDQpID8gIiBhZ2FpbiIgOiAi Iik7CisJICB9CisJICBkZWJ1ZyhGMTAxLCJfZG9kaWFsIHdha2Vfc3RyIG1kbXN0YXQiLCIiLG1k bXN0YXQpOworCisJICBpZiAobWRtc3RhdCA8IDEpIHsJCS8qIEluaXRpYWxpemVkIE9LPyAqLwor CSAgICAgIGRpYWxmYWlsKEZfTUlOSVQpOwkvKiBObywgZmFpbC4gKi8KKyNpZmRlZiBOVFNJRwor CSAgICAgIGNrVGhyZWFkRW5kKHRocmVhZGluZm8pOworI2VuZGlmIC8qIE5UU0lHICovCisJICAg ICAgU0lHUkVUVVJOOworCSAgfQorCisjaWZuZGVmIE1JTklESUFMCisgICAgfSBlbHNlIGlmICht eW1kbXR5cCA9PSBuX0FUVERURE0gJiYgZGlhbHN0YSAhPSBESUFfUEFSVCkgeyAvKiBBVCZUIC4u LiAqLworCXR0c25kYigpOwkJCS8qIFNlbmQgQlJFQUsgKi8KKyNlbmRpZiAvKiBNSU5JRElBTCAq LworCisgICAgfSBlbHNlIGlmIChkaWFsc3RhICE9IERJQV9QQVJUKSB7IC8qIEFsbCBvdGhlcnMg Ki8KKworCS8qIFBsYWNlIG1vZGVtIGludG8gY29tbWFuZCBtb2RlICovCisKKwl3cyA9IGRpYWxp bmkgPyBkaWFsaW5pIDogbXAtPndha2Vfc3RyOworCWlmICh3cyAmJiAoaW50KXN0cmxlbih3cykg PiAwKSB7CisJICAgIGRlYnVnKEYxMTEsIl9kb2RpYWwgZGVmYXVsdCwgd2FrZSBzdHJpbmciLCB3 cywgd3IpOworCSAgICB0dHNsb3cod3MsIHdyKTsKKwl9IGVsc2UgZGVidWcoRjEwMCwiX2RvZGlh bCBubyB3YWtlX3N0ciIsIiIsMCk7CisJaWYgKG1wLT53YWtlX3Byb21wdCAmJiAoaW50KXN0cmxl bihtcC0+d2FrZV9wcm9tcHQpID4gMCkgeworCSAgICBkZWJ1ZyhGMTEwLCJfZG9kaWFsIGRlZmF1 bHQsIHdhaXRpbmcgZm9yIHdha2VfcHJvbXB0IiwKKwkJICBtcC0+d2FrZV9wcm9tcHQsMCk7CisJ ICAgIGFsYXJtKDEwKTsKKwkgICAgd2FpdGZvcihtcC0+d2FrZV9wcm9tcHQpOworCSAgICBhbGFy bSgwKTsKKwl9IGVsc2UgZGVidWcoRjEwMCwiX2RvZGlhbCBubyB3YWtlX3Byb21wdCIsIiIsMCk7 CisgICAgfQorCisvKiBIYW5kbGUgZXJyb3IgY29ycmVjdGlvbiwgZGF0YSBjb21wcmVzc2lvbiwg YW5kIGZsb3cgY29udHJvbC4uLiAqLworCisgIHhkaWFsZWM6CisKKyAgICBpZiAoZGlhbHN0YSAh PSBESUFfUEFSVCkgeworCWFsYXJtKDApOwkJCS8qIFR1cm4gb2ZmIGFsYXJtICovCisJZGVidWco RjEwMCwiX2RvZGlhbCBnb3Qgd2FrZSBwcm9tcHQiLCIiLDApOworCW1zbGVlcCg1MDApOwkJCS8q IEFsbG93IHNldHRsaW5nIHRpbWUgKi8KKworCS8qIEVuYWJsZS9kaXNhYmxlIGVycm9yLWNvcnJl Y3Rpb24gKi8KKworCXggPSAwOworCWlmIChkaWFsZWMpIHsJCQkvKiBESUFMIEVSUk9SLUNPUlJF Q1RJT04gaXMgT04gKi8KKwkgICAgaWYgKGRpYWxlY29uKSB7CQkvKiBTRVQgRElBTCBTVFJJTkcg RVJST1ItQ09SUkVDVElPTiAqLworCQlpZiAoKmRpYWxlY29uKSB7CisJCSAgICB4ID0gMTsKKwkJ ICAgIHR0c2xvdyhkaWFsZWNvbiwgd3IpOworCQl9CisJICAgIH0gZWxzZSBpZiAoKG1kbWNhcGFz ICYgQ0tEX0VDKSAmJiAqKG1wLT5lY19vbl9zdHIpKSB7CisJCXggPSAxOworCQl0dHNsb3cobXAt PmVjX29uX3N0ciwgd3IpOworCSAgICB9CisjaWZkZWYgQ09NTUVOVAorCSAgICBlbHNlIHByaW50 ZigKKwkJICAiV0FSTklORyAtIEkgZG9uJ3Qga25vdyBob3cgdG8gdHVybiBvbiBFQyBmb3IgdGhp cyBtb2RlbVxuIgorCQkgICAgICk7CisjZW5kaWYgLyogQ09NTUVOVCAqLworCX0gZWxzZSB7CisJ ICAgIGlmIChkaWFsZWNvZmYpIHsJCS8qIERJQUwgRVJST1ItQ09SUkVDVElPTiBPRkYgKi8KKwkJ aWYgKCpkaWFsZWNvZmYpIHsKKwkJICAgIHggPSAxOworCQkgICAgdHRzbG93KGRpYWxlY29mZiwg d3IpOworCQl9CisJICAgIH0gZWxzZSBpZiAoKG1kbWNhcGFzICYgQ0tEX0VDKSAmJiAqKG1wLT5l Y19vZmZfc3RyKSkgeworCQl4ID0gMTsKKwkJdHRzbG93KG1wLT5lY19vZmZfc3RyLCB3cik7CisJ ICAgIH0KKyNpZmRlZiBDT01NRU5UCisJICAgIGVsc2UgcHJpbnRmKAorCQkgICJXQVJOSU5HIC0g SSBkb24ndCBrbm93IGhvdyB0byB0dXJuIG9mZiBFQyBmb3IgdGhpcyBtb2RlbVxuIgorCQkgICAg ICk7CisjZW5kaWYgLyogQ09NTUVOVCAqLworCX0KKwkvKiBkZWJ1ZyhGMTAxLCJja3VkaWEgeHhf b2siLCIiLHh4X29rKTsgKi8KKwlpZiAoeCAmJiB4eF9vaykgewkJCS8qIExvb2sgZm9yIE9LIHJl c3BvbnNlICovCisJICAgIGRlYnVnKEYxMDAsImNrdWRpYSBjYWxsaW5nIHh4X29rIGZvciBFQyIs IiIsMCk7CisJICAgIHggPSAoKnh4X29rKSg1LDEpOworCSAgICBkZWJ1ZyhGMTAxLCJja3VkaWEg eHhfb2siLCIiLHgpOworCSAgICBpZiAoeCA8IDApIHsKKwkJcHJpbnRmKCJXQVJOSU5HIC0gVHJv dWJsZSBlbmFibGluZyBlcnJvci1jb3JyZWN0aW9uLlxuIik7CisJCXByaW50ZigKKyIgTGlrZWx5 IGNhdXNlOiBZb3VyIG1vZGVtIGlzIGFuIFJQSSBtb2RlbCwgd2hpY2ggZG9lcyBub3QgaGF2ZSBi dWlsdC1pblxuIik7CisJCXByaW50ZigiIGVycm9yIGNvcnJlY3Rpb24gYW5kIGRhdGEgY29tcHJl c3Npb24uIik7CisJICAgIH0KKwl9CisKKwkvKiBFbmFibGUvZGlzYWJsZSBkYXRhIGNvbXByZXNz aW9uICovCisKKwlpZiAoeCA+IDApIHggPSAwOworCWlmIChkaWFsZGMpIHsKKwkgICAgaWYgKHgg PCAwIHx8ICFkaWFsZWMpIHsKKwkJcHJpbnRmKAorIldBUk5JTkcgLSBZb3UgY2FuJ3QgaGF2ZSBj b21wcmVzc2lvbiB3aXRob3V0IGVycm9yIGNvcnJlY3Rpb24uXG4iKTsKKwkgICAgfSBlbHNlIGlm IChkaWFsZGNvbikgewkvKiBTRVQgRElBTCBTVFJJTkcgLi4uICovCisJCWlmICgqZGlhbGRjb24p IHsKKwkJICAgIHggPSAxOworCQkgICAgdHRzbG93KGRpYWxkY29uLCB3cik7CisJCX0KKwkgICAg fSBlbHNlIGlmICgobWRtY2FwYXMgJiBDS0RfREMpICYmICoobXAtPmRjX29uX3N0cikpIHsKKwkJ eCA9IDE7CisJCXR0c2xvdyhtcC0+ZGNfb25fc3RyLCB3cik7CisJICAgIH0KKyNpZmRlZiBDT01N RU5UCisJICAgIGVsc2UgcHJpbnRmKAorCQkgICJXQVJOSU5HIC0gSSBkb24ndCBrbm93IGhvdyB0 byB0dXJuIG9uIERDIGZvciB0aGlzIG1vZGVtXG4iCisJCQkgICk7CisjZW5kaWYgLyogQ09NTUVO VCAqLworCX0gZWxzZSB7CisJICAgIGlmIChkaWFsZGNvZmYpIHsKKwkJaWYgKCpkaWFsZGNvZmYp IHsKKwkJICAgIHggPSAxOworCQkgICAgdHRzbG93KGRpYWxkY29mZiwgd3IpOworCQl9CisJICAg IH0gZWxzZSBpZiAoKG1kbWNhcGFzICYgQ0tEX0RDKSAmJiAqKG1wLT5kY19vZmZfc3RyKSkgewor CQl4ID0gMTsKKwkJdHRzbG93KG1wLT5kY19vZmZfc3RyLCB3cik7CisJICAgIH0KKyNpZmRlZiBD T01NRU5UCisJICAgIGVsc2UgcHJpbnRmKAorIldBUk5JTkcgLSBJIGRvbid0IGtub3cgaG93IHRv IHR1cm4gb2ZmIGNvbXByZXNzaW9uIGZvciB0aGlzIG1vZGVtXG4iCisJCQkgICk7CisjZW5kaWYg LyogQ09NTUVOVCAqLworCX0KKwlpZiAoeCAmJiB4eF9vaykgewkJCS8qIExvb2sgZm9yIE9LIHJl c3BvbnNlICovCisJICAgIHggPSAoKnh4X29rKSg1LDEpOworCSAgICBpZiAoeCA8IDApIHByaW50 ZigiV0FSTklORyAtIFRyb3VibGUgZW5hYmxpbmcgY29tcHJlc3Npb25cbiIpOworCX0KKyAgICB9 CisKKyNpZm5kZWYgTk9YRkVSCisjaWZuZGVmIE1JTklESUFMCisgICAgaWYgKG1kbWNhcGFzICYg Q0tEX0tTICYmIGRpYWxzdGEgIT0gRElBX1BBUlQpIHsgLyogS2VybWl0IHNwb29mICovCisJaW50 IHI7CQkJCS8qIFJlZ2lzdGVyICovCisJY2hhciB0YmNtZGJ1Zls2NF07CQkvKiBDb21tYW5kIGJ1 ZmZlciAqLworCXN3aXRjaCAobXltZG10eXApIHsKKworCSAgY2FzZSBuX01JQ1JPQ09NOgkJLyog TWljcm9jb21zIGluIFNYIG1vZGUgKi8KKyAgCSAgICBpZiAoZGlhbGtzcCkKKwkgICAgICBzcHJp bnRmKHRiY21kYnVmLCJBUE0xO0tNQyVkXDAxNSIsc3RjaHIpOwkvKiBzYWZlICovCisJICAgIGVs c2UKKwkgICAgICBzcHJpbnRmKHRiY21kYnVmLCJBUE0wXDAxNSIpOyAvKiBzYWZlICovCisgIAkg ICAgdHRzbG93KHRiY21kYnVmLCBNSUNST0NPTS53YWtlX3JhdGUpOworICAJICAgIGFsYXJtKDMp OworCSAgICB3YWl0Zm9yKG1wLT53YWtlX3Byb21wdCk7CisJICAgIGFsYXJtKDApOworCSAgICBi cmVhazsKKworCSAgY2FzZSBuX1RFTEVCSVQ6CQkvKiBPbGQgYW5kIG5ldyBUZWxlYml0cyAqLwor CSAgY2FzZSBuX1RCTkVXOgorCSAgICBpZiAoIWRpYWxrc3ApIHsKKwkJc3ByaW50Zih0YmNtZGJ1 ZiwiQVRTMTExPTBcMDE1Iik7IC8qIHNhZmUgKi8KKwkgICAgfSBlbHNlIHsKKwkJc3dpdGNoIChw YXJpdHkpIHsJLyogUzExMSB2YWx1ZSBkZXBlbmRzIG9uIHBhcml0eSAqLworCQkgIGNhc2UgJ2Un OiByID0gMTI7IGJyZWFrOworCQkgIGNhc2UgJ20nOiByID0gMTM7IGJyZWFrOworCQkgIGNhc2Ug J28nOiByID0gMTE7IGJyZWFrOworCQkgIGNhc2UgJ3MnOiByID0gMTQ7IGJyZWFrOworCQkgIGNh c2UgMDoKKwkJICBkZWZhdWx0OiAgciA9IDEwOyBicmVhazsKKwkJfQorCQlzcHJpbnRmKHRiY21k YnVmLCJBVFMxMTE9JWQgUzExMj0lZFwwMTUiLHIsc3RjaHIpOyAvKiBzYWZlICovCisJICAgIH0K KwkgICAgdHRzbG93KHRiY21kYnVmLCB3cik7CisKKy8qIE5vdCBhbGwgVGVsZWJpdCBtb2RlbHMg aGF2ZSB0aGUgS2VybWl0IHNwb29mLCBzbyBpZ25vcmUgcmVzcG9uc2UuICovCisKKwkgICAgaWYg KHh4X29rKSB7CQkvKiBHZXQgbW9kZW0ncyByZXNwb25zZSAqLworCQl4ID0gKCp4eF9vaykoNSwx KTsKKwkgICAgfQorCX0KKyAgICB9CisjZW5kaWYgLyogTUlOSURJQUwgKi8KKyNlbmRpZiAvKiBO T1hGRVIgKi8KKworICAgIC8qIFNwZWFrZXIgKi8KKworICAgIGlmIChteW1kbXR5cCAhPSBuX0dF TkVSSUMgJiYKKwkobWRtY2FwYXMgJiBDS0RfQVQpICYmIChkaWFsc3RhICE9IERJQV9QQVJUKSAm JgorCSFkaWFsc3BvbiAmJiAhZGlhbHNwb2ZmICYmCisJIWRpYWx2b2wxICYmICFkaWFsdm9sMiAm JiFkaWFsdm9sMykgeworCS8qIEFUIGNvbW1hbmQgc2V0IGFuZCBjb21tYW5kcyBoYXZlIG5vdCBi ZWVuIGN1c3RvbWl6ZWQgKi8KKwkvKiBzbyBjb21iaW5lIHNwZWFrZXIgYW5kIHZvbHVtZSBjb21t YW5kcy4gKi8KKwlpZiAobWRtc3BrKQorCSAgc3ByaW50ZihsYnVmLCJBVE0xTCVkJWMiLG1kbXZv bCwxMyk7IC8qIHNhZmUgKi8KKwllbHNlCisJICBzcHJpbnRmKGxidWYsIkFUTTAlYyIsMTMpOwkv KiBzYWZlICovCisJdHRzbG93KGxidWYsd3IpOwkJLyogU2VuZCBjb21tYW5kICovCisJZ2V0b2so NSwxKTsJCQkvKiBHZXQgYnV0IGlnbm9yZSByZXNwb25zZSAqLworICAgIH0gZWxzZSBpZiAoZGlh bHN0YSAhPSBESUFfUEFSVCkgewkvKiBDdXN0b21pemVkIG9yIG5vdCBBVCBjb21tYW5kcyAqLwor CXggPSAwOwkJCQkvKiBEbyBpdCB0aGUgaGFyZCB3YXkgKi8KKwlpZiAobWRtc3BrKSB7CisJICAg IGlmIChkaWFsc3BvbikgeworCQlpZiAoKmRpYWxzcG9uKSB7CisJCSAgICB4ID0gMTsKKwkJICAg IHR0c2xvdyhkaWFsc3Bvbix3cik7CisJCX0KKwkgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg ICBpZiAobXAtPnNwX29uX3N0clswXSkgeworCQkgICAgeCA9IDE7CisJCSAgICB0dHNsb3cobXAt PnNwX29uX3N0cix3cik7CisJCX0KKwkgICAgfQorCX0gZWxzZSB7CisJICAgIC8qIHMgPSBkaWFs c3BvZmYgPyBkaWFsc3BvZmYgOiBtcC0+c3Bfb2ZmX3N0cjsgKi8KKwkgICAgaWYgKGRpYWxzcG9m ZikgeworCQlpZiAoKmRpYWxzcG9mZikgeworCQkgICAgeCA9IDE7CisJCSAgICB0dHNsb3coZGlh bHNwb2ZmLHdyKTsKKwkJfQorCSAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChtcC0+ c3Bfb2ZmX3N0clswXSkgeworCQkgICAgeCA9IDE7CisJCSAgICB0dHNsb3cobXAtPnNwX29mZl9z dHIsd3IpOworCQl9CisJICAgIH0KKwl9CisJaWYgKHgpIHsKKwkgICAgaWYgKHh4X29rKQkJCS8q IEdldCByZXNwb25zZSAqLworCSAgICAgIHggPSAoKnh4X29rKSg1LDEpOworCSAgICBpZiAoeCAm JiBtZG1zcGspIHsJCS8qIEdvb2QgcmVzcG9uc2UgYW5kIHNwZWFrZXIgb24/ICovCisJCXN3aXRj aCAobWRtdm9sKSB7CS8qIFllcywgc2VuZCB2b2x1bWUgY29tbWFuZC4gKi8KKwkJICBjYXNlIDA6 CisJCSAgY2FzZSAxOgorCQkgICAgcyA9IGRpYWx2b2wxID8gZGlhbHZvbDEgOiBtcC0+dm9sMV9z dHI7IGJyZWFrOworCQkgIGNhc2UgMjoKKwkJICAgIHMgPSBkaWFsdm9sMiA/IGRpYWx2b2wyIDog bXAtPnZvbDJfc3RyOyBicmVhazsKKwkJICBjYXNlIDM6CisJCSAgICBzID0gZGlhbHZvbDMgPyBk aWFsdm9sMyA6IG1wLT52b2wzX3N0cjsgYnJlYWs7CisJCSAgZGVmYXVsdDoKKwkJICAgIHMgPSBO VUxMOworCQl9CisJCWlmIChzKSBpZiAoKnMpIHsJLyogU2VuZCB2b2x1bWUgY29tbWFuZC4gKi8K KwkJICAgIHR0c2xvdyhzLCB3cik7CisJCSAgICBpZiAoeHhfb2spCQkvKiBHZXQgcmVzcG9uc2Ug YnV0IGlnbm9yZSBpdCAqLworCQkgICAgICAoKnh4X29rKSg1LDEpOworCQl9CisJICAgIH0KKwl9 CisgICAgfQorCisjaWZuZGVmIENLX0FURFQKKyAgICAvKiBEaWFsaW5nIE1ldGhvZCAqLworCisg ICAgaWYgKGRpYWxtdGggJiYgZGlhbHN0YSAhPSBESUFfUEFSVCkgeyAvKiBJZiBkaWFsaW5nIG1l dGhvZCBzcGVjaWZpZWQuLi4gKi8KKwljaGFyICpzID0gIiI7CQkJLyogRG8gaXQgaGVyZS4uLiAq LworCisJaWYgKGRpYWxtdGggPT0gWFlETV9UICYmIGRpYWx0b25lKSAvKiBUb25lICovCisJICBz ID0gZGlhbHRvbmU7CisJZWxzZSBpZiAoZGlhbG10aCA9PSBYWURNX1AgJiYgZGlhbHB1bHNlKSAv KiBQdWxzZSAqLworCSAgcyA9IGRpYWxwdWxzZTsKKwlpZiAocykgaWYgKCpzKSB7CisJICAgIHR0 c2xvdyhzLCB3cik7CisJICAgIGlmICh4eF9vaykJCQkvKiBHZXQgbW9kZW0ncyByZXNwb25zZSAq LworCSAgICAgICgqeHhfb2spKDUsMSk7CQkvKiAoYnV0IGlnbm9yZSBpdC4uLikgKi8KKwl9Cisg ICAgfQorI2VuZGlmIC8qIENLX0FURFQgKi8KKworICAgIGlmIChkaWFsaWR0KSB7CQkJLyogSWdu b3JlIGRpYWx0b25lPyAqLworCWNoYXIgKnMgPSAiIjsKKwlzID0gZGlhbHgzID8gZGlhbHgzIDog bXAtPmlnbm9yZWR0OworCWlmIChzKSBpZiAoKnMpIHsKKwkgICAgdHRzbG93KHMsIHdyKTsKKwkg ICAgaWYgKHh4X29rKQkJCS8qIEdldCBtb2RlbSdzIHJlc3BvbnNlICovCisJICAgICAgKCp4eF9v aykoNSwxKTsJCS8qIChidXQgaWdub3JlIGl0Li4uKSAqLworCX0KKyAgICB9CisgICAgeworCWNo YXIgKnMgPSAiIjsJCQkvKiBMYXN0LW1pbnV0ZSBpbml0IHN0cmluZz8gKi8KKwlzID0gZGlhbGlu aTIgPyBkaWFsaW5pMiA6IG1wLT5pbmkyOworCWlmIChzKSBpZiAoKnMpIHsKKwkgICAgdHRzbG93 KHMsIHdyKTsKKwkgICAgaWYgKHh4X29rKQkJCS8qIEdldCBtb2RlbSdzIHJlc3BvbnNlICovCisJ ICAgICAgKCp4eF9vaykoNSwxKTsJCS8qIChidXQgaWdub3JlIGl0Li4uKSAqLworCX0KKyAgICB9 CisgICAgaWYgKGZ1bmNfY29kZSA9PSAxKSB7CQkvKiBBTlNXRVIgKG5vdCBESUFMKSAqLworCWNo YXIgKnM7CisJcyA9IGRpYWxhYW9uID8gZGlhbGFhb24gOiBtcC0+YWFfb25fc3RyOworCWlmICgh cykgcyA9ICIiOworCWlmICgqcykgeworCSAgICAvKiBIZXJlIHdlIHdvdWxkIGhhbmRsZSBjYWxs ZXIgSUQgKi8KKwkgICAgdHRzbG93KHMsIChkaWFscGFjZSA+IC0xKSA/IHdyIDogbXAtPmRpYWxf cmF0ZSk7CisJICAgIGlmICh4eF9vaykJCQkvKiBHZXQgbW9kZW0ncyByZXNwb25zZSAqLworCSAg ICAgICgqeHhfb2spKDUsMSk7CQkvKiAoYnV0IGlnbm9yZSBpdC4uLikgKi8KKwl9IGVsc2Ugewor CSAgICBwcmludGYoCisiV0FSTklORyAtIEkgZG9uJ3Qga25vdyBob3cgdG8gZW5hYmxlIGF1dG9h bnN3ZXIgZm9yIHRoaXMgbW9kZW0uXG4iCisJCSAgICk7CisJfSAvKiBBbmQgc2tpcCBhbGwgdGhl IHBob25lLW51bWJlciAmIGRpYWxpbmcgc3R1ZmYuLi4gKi8KKwlhbGFybSh3YWl0Y3QpOwkJCS8q IFRoaXMgbXVjaCB0aW1lIGFsbG93ZWQuICovCisJZGVidWcoRjEwMSwiX2RvZGlhbCBBTlNXRVIg d2FpdGN0IiwiIix3YWl0Y3QpOworCisgICAgfSBlbHNlIHsJCQkJLyogRElBTCAobm90IEFOU1dF UikgKi8KKworCWlmIChkaWFsc3RhICE9IERJQV9QQVJUKSB7CS8qIExhc3QgZGlhbCB3YXMgbm90 IHBhcnRpYWwgKi8KKworCSAgICBjaGFyICpzID0gIiI7CisjaWZkZWYgQ09NTUVOVAorCSAgICBz ID0gZGlhbGFhb2ZmID8gZGlhbGFhb2ZmIDogbXAtPmFhX29mZl9zdHI7CisjZW5kaWYgLyogQ09N TUVOVCAqLworCSAgICBpZiAocykgaWYgKCpzKSB7CisJCXR0c2xvdyhzLCAoZGlhbHBhY2UgPiAt MSkgPyB3ciA6IG1wLT5kaWFsX3JhdGUpOworCQlpZiAoeHhfb2spCQkvKiBHZXQgbW9kZW0ncyBy ZXNwb25zZSAqLworCQkgICgqeHhfb2spKDUsMSk7CS8qIChidXQgaWdub3JlIGl0Li4uKSAqLwor CSAgICB9CisKKwkgICAgLyogUHV0IG1vZGVtIGludG8gZGlhbGluZyBtb2RlLCBpZiB0aGUgbW9k ZW0gcmVxdWlyZXMgaXQuICovCisKKwkgICAgaWYgKG1wLT5kbW9kZV9zdHIgJiYgKihtcC0+ZG1v ZGVfc3RyKSkgeworCQl0dHNsb3cobXAtPmRtb2RlX3N0ciwgKGRpYWxwYWNlID4gLTEpID8gd3Ig OiBtcC0+ZGlhbF9yYXRlKTsKKwkJc2F2YWxybSA9IHNpZ25hbChTSUdBTFJNLGRpYWx0aW1lKTsK KwkJYWxhcm0oMTApOworCQkvKiBXYWl0IGZvciBwcm9tcHQsIGlmIGFueSBleHBlY3RlZCAqLwor CQlpZiAobXAtPmRtb2RlX3Byb21wdCAmJiAqKG1wLT5kbW9kZV9wcm9tcHQpKSB7CisJCSAgICB3 YWl0Zm9yKG1wLT5kbW9kZV9wcm9tcHQpOworCQkgICAgbXNsZWVwKDMwMCk7CisJCX0KKwkJYWxh cm0oMCk7CQkvKiBUdXJuIG9mZiBhbGFybSBvbiBkaWFsaW5nIHByb21wdHMgKi8KKwkJc2lnbmFs KFNJR0FMUk0sc2F2YWxybSk7IC8qIFJlc3RvcmUgYWxhcm0gKi8KKwkgICAgfQorCX0KKwkvKiBB VC1Db21tYW5kLVNldCBub24tR2VuZXJpYyBtb2RlbSAqLworCWlmIChtZG1jYXBhcyAmIENLRF9B VCAmJiBteW1kbXR5cCAhPSBuX0dFTkVSSUMgJiYKKwkgICAgZGlhbHN0YSAhPSBESUFfUEFSVCkg eworCSAgICBpZiAobWRtd2FpdCA+IDI1NSkJCS8qIElmIGxhcmdlciB0aGFuIG1heGltdW0sICov CisJICAgICAgbWRtd2FpdCA9IDI1NTsJCS8qIG1ha2UgaXQgbWF4aW11bS4gKi8KKwkgICAgaWYg KGRpYWxlc2MgPiAwICYmCQkvKiBNb2RlbSBlc2NhcGUgY2hhcmFjdGVyIGlzIHNldCAqLworCQlk aWFsbWh1ID4gMCkgewkJLyogSGFuZ3VwIG1ldGhvZCBpcyBtb2RlbSBjb21tYW5kICovCisJCWlu dCB4ID0gZGlhbGVzYzsKKwkJaWYgKGRpYWxlc2MgPCAwIHx8IGRpYWxlc2MgPiAxMjcpCisJCSAg eCA9IDEyODsKKwkJc3ByaW50ZihsYnVmLAorCQkJIkFUUzI9JWRTNz0lZFwwMTUiLAorCQkJZGlh bGVzYyA/IHggOiBtcC0+ZXNjX2NoYXIsIG1kbXdhaXQpOyAvKiBzYWZlICovCisJICAgIH0gZWxz ZQorCSAgICAgIHNwcmludGYobGJ1ZiwiQVRTNz0lZCVjIixtZG13YWl0LDEzKTsgLyogc2FmZSAq LworCSAgICB0dHNsb3cobGJ1Zix3cik7CQkvKiBTZXQgaXQuICovCisJICAgIG1kbXN0YXQgPSBn ZXRvayg1LDEpOwkvKiBHZXQgcmVzcG9uc2UgZnJvbSBtb2RlbSAqLworCSAgICAvKiBJZiBpdCBn ZXRzIGFuIGVycm9yLCBnbyBhaGVhZCBhbnl3YXkgKi8KKwkgICAgZGVidWcoRjEwMSwiX2RvZGlh bCBTNyBtZG1zdGF0IiwiIixtZG1zdGF0KTsKKwl9CisJdHRmbHVpKCk7CQkJLyogQ2xlYXIgb3V0 IHN0dWZmIGZyb20gbW9kZW0gc2V0dXAgKi8KKwlpbml0ZWQgPSAxOwkJCS8qIFJlbWVtYmVyIG1v ZGVtIGlzIGluaXRpYWxpemVkICovCisKKyAgICAgIFJFRElBTDoKKwlpZiAoKGludClzdHJsZW4o ZGNtZCkgKyAoaW50KXN0cmxlbih4bnVtKSA+IExCVUZMKQorCSAgY2tzdHJuY3B5KGxidWYsIk5V TUJFUiBUT08gTE9ORyEiLExCVUZMKTsKKwllbHNlCisJICBzcHJpbnRmKGxidWYsIGRjbWQsIHhu dW0pOwkvKiBzYWZlIChwcmVjaGVja2VkKSAqLworCWRlYnVnKEYxMTAsImRpYWxpbmciLGxidWYs MCk7CisJLyogU2VuZCB0aGUgZGlhbGluZyBzdHJpbmcgKi8KKwl0dHNsb3cobGJ1ZixkaWFscGFj ZSA+IC0xID8gd3IgOiBtcC0+ZGlhbF9yYXRlKTsKKworCWZhaWxfY29kZSA9IEZfTU9ERU07CQkv KiBOZXcgZGVmYXVsdCBmYWlsdXJlIGNvZGUgY2hhbmdlcyAqLworCWRpYWxfd2hhdCA9IERXX0RJ QUw7CQkvKiBhbmQgb3VyIHN0YXRlLCB0b28uICovCisJaWYgKGRpYWxkcHkpIHsJCQkvKiBJZiBz aG93aW5nIHByb2dyZXNzICovCisJICAgIHAgPSBja190aW1lKCk7CQkvKiBnZXQgY3VycmVudCB0 aW1lOyAqLworCSAgICBpZiAoKnApIHByaW50ZigiIERpYWxpbmc6ICVzLi4uXG4iLHApOworI2lm ZGVmIFZNUworCSAgICBwcmludGYoIiBcbiIpOworCSAgICBmZmx1c2goc3Rkb3V0KTsKKyNlbmRp ZiAvKiBWTVMgKi8KKwl9CisJYWxhcm0od2FpdGN0KTsJCQkvKiBUaGlzIG11Y2ggdGltZSBhbGxv d2VkLiAqLworCWRlYnVnKEYxMDEsIl9kb2RpYWwgd2FpdGN0IiwiIix3YWl0Y3QpOworCisjaWZu ZGVmIE1JTklESUFMCisjaWZkZWYgT0xETU9ERU1TCisJc3dpdGNoIChteW1kbXR5cCkgeworCSAg Y2FzZSBuX1JBQ0FMOgkJCS8qIEFja25vd2xlZGdlIGRpYWxpbmcgc3RyaW5nICovCisJICAgIHNs ZWVwKDMpOworCSAgICB0dGZsdWkoKTsKKwkgICAgdHRvYygnXDAxNScpOworCSAgICBicmVhazsK KwkgIGNhc2Ugbl9WRU5URUw6CisJICAgIHdhaXRmb3IoIlwwMTJcMDEyIik7CS8qIElnbm9yZSB0 aGUgZmlyc3QgdHdvIHN0cmluZ3MgKi8KKwkgICAgYnJlYWs7CisJICBkZWZhdWx0OgorCSAgICBi cmVhazsKKwl9CisjZW5kaWYgLyogT0xETU9ERU1TICovCisjZW5kaWYgLyogTUlOSURJQUwgKi8K KyAgICB9CisKKy8qIENoZWNrIGZvciBjb25uZWN0aW9uICovCisKKyAgICBtZG1zdGF0ID0gMDsJ CQkvKiBObyBzdGF0dXMgeWV0ICovCisgICAgbGJ1ZlswXSA9IE5VTDsJCQkvKiBEZWZhdWx0IHJl YXNvbiBmb3IgZmFpbHVyZSAqLworICAgIGRlYnVnKEYxMDEsImRpYWwgYXdhaXRpbmcgcmVzcG9u c2UsIG15bWRtdHlwIiwiIixteW1kbXR5cCk7CisKKyNpZm5kZWYgTk9TUEwKKyAgICBtb2RlbW1z Z1swXSA9IE5VTDsKKyNlbmRpZiAvKiBOT1NQTCAqLworICAgIHdoaWxlIChtZG1zdGF0ID09IDAp IHsJCS8qIFRpbGwgd2UgZ2V0IGEgcmVzdWx0IG9yIHRpbWUgb3V0ICovCisKKwlpZiAoKG1kbWNh cGFzICYgQ0tEX0FUKSAmJiBub252ZXJiYWwpIHsgLyogQVQgY29tbWFuZCBzZXQgKi8KKwkgICAg Z2V0aHJuKCk7CQkJLyogSW4gZGlnaXQgcmVzdWx0IG1vZGUgKi8KKwkgICAgaWYgKHBhcnRpYWwg JiYgZGlhbHN0YSA9PSBESUFfRVJSKSB7CisJCS8qCisJCSAgIElmIHdlIGdldCBhbiBlcnJvciBo ZXJlLCB0aGUgcGhvbmUgaXMgc3RpbGwKKwkJICAgb2ZmIGhvb2sgc28gd2UgaGF2ZSB0byBoYW5n IGl0IHVwLgorCQkqLworCQlkaWFsaHVwKCk7CisJCWRpYWxzdGEgPSBESUFfRVJSOwkvKiAoYmVj YXVzZSBkaWFsaHVwKCkgY2hhbmdlcyBpdCkgKi8KKwkgICAgfQorCSAgICBjb250aW51ZTsKKwor CX0gZWxzZSBpZiAobXltZG10eXAgPT0gbl9VTktOT1dOKSB7IC8qIFVua25vd24gbW9kZW0gdHlw ZSAqLworCSAgICBpbnQgeCwgeSA9IHdhaXRjdDsKKwkgICAgbWRtc3RhdCA9IERfRkFJTEVEOwkJ LyogQXNzdW1lIGZhaWx1cmUuICovCisJICAgIHdoaWxlICh5LS0gPiAtMSkgeworCQl4ID0gdHRj aGsoKTsKKwkJaWYgKHggPiAwKSB7CisJCSAgICBpZiAoeCA+IExCVUZMKSB4ID0gTEJVRkw7CisJ CSAgICB4ID0gdHR4aW4oeCwoQ0hBUiAqKWxidWYpOworCQkgICAgaWYgKCh4ID4gMCkgJiYgZGlh bGRweSkgY29ub2wobGJ1Zik7CisJCX0gZWxzZSBpZiAobmV0d29yayAKKyNpZmRlZiBUTl9DT01Q T1JUCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAhaXN0bmNvbXBvcnQoKQorI2VuZGlm IC8qIFROX0NPTVBPUlQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHggPCAwKSB7 IC8qIENvbm5lY3Rpb24gZHJvcHBlZCAqLworCQkgICAgaW5pdGVkID0gMDsKKyNpZmRlZiBOVFNJ RworCQkgICAgY2tUaHJlYWRFbmQodGhyZWFkaW5mbyk7CisjZW5kaWYgLyogTlRTSUcgKi8KKwkJ ICAgIGRpYWxzdGEgPSBESUFfSU87CS8qIENhbGwgaXQgYW4gSS9PIGVycm9yICovCisjaWZkZWYg RFlOQU1JQworCQkgICAgaWYgKHJidWYpIGZyZWUocmJ1Zik7IHJidWYgPSBOVUxMOworCQkgICAg aWYgKGZidWYpIGZyZWUoZmJ1Zik7IGZidWYgPSBOVUxMOworI2VuZGlmIC8qIERZTkFNSUMgKi8K KwkJICAgIFNJR1JFVFVSTjsKKwkJfQorCQl4ID0gdHRnbWRtKCk7CQkvKiBUcnkgdG8gcmVhZCBt b2RlbSBzaWduYWxzICovCisJCWlmICh4IDwgMCkgYnJlYWs7CS8qIENhbid0LCBmYWlsLiAqLwor CQlpZiAoeCAmIEJNX0RDRCkgewkvKiBHb3Qgc2lnbmFscyBPSy4gIENhcnJpZXIgcHJlc2VudD8g Ki8KKwkJICAgIG1kbXN0YXQgPSBDT05ORUNURUQ7IC8qIFllcywgZG9uZS4gKi8KKwkJICAgIGJy ZWFrOworCQl9CQkJLyogTm8sIGtlZXAgd2FpdGluZy4gKi8KKwkJc2xlZXAoMSk7CisJICAgIH0K KwkgICAgY29udGludWU7CisJfQorCisJZm9yIChuID0gLTE7IG4gPCBMQlVGTC0xOyApIHsJLyog QWNjdW11bGF0ZSBtb2RlbSByZXNwb25zZSAqLworCSAgICBpbnQgeHg7CisJICAgIGMyID0gKGNo YXIpICh4eCA9IGRkaW5jKDApKTsgLyogUmVhZCBhIGNoYXJhY3RlciwgYmxvY2tpbmcgKi8KKwkg ICAgaWYgKHh4IDwgMSkJCQkvKiBJZ25vcmUgTlVMcyBhbmQgZXJyb3JzICovCisJICAgICAgY29u dGludWU7CQkJLyogKFRpbWVvdXQgd2lsbCBoYW5kbGUgZXJyb3JzKSAqLworCSAgICBlbHNlCQkJ LyogUmVhbCBjaGFyYWN0ZXIsIGtlZXAgaXQgKi8KKwkgICAgICBsYnVmWysrbl0gPSAoY2hhcikg KGMyICYgMDE3Nyk7CisJICAgIGRpYWxvYyhsYnVmW25dKTsJCS8qIE1heWJlIGVjaG8gaXQgICov CisJICAgIGlmIChtZG1jYXBhcyAmIENLRF9WMjUpIHsJLyogVi4yNWJpcyBkaWFsaW5nLi4uICov CisvKgorICBUaGlzIGFzc3VtZXMgdGhhdCBWLjI1YmlzIGluZGljYXRpb25zIGFyZSBhbGwgYXQg bGVhc3QgMyBjaGFyYWN0ZXJzIGxvbmcKKyAgYW5kIGFyZSB0ZXJtaW5hdGVkIGJ5IGVpdGhlciBD UkxGIG9yIExGQ1IuCisqLworCQlpZiAobXltZG10eXAgPT0gbl9DQ0lUVCkgeworCQkgICAgaWYg KG4gPCAzKSBjb250aW51ZTsKKwkJICAgIGlmICgobGJ1ZltuXSA9PSBDUikgJiYgKGxidWZbbi0x XSA9PSBMRikpIGJyZWFrOworCQkgICAgaWYgKChsYnVmW25dID09IExGKSAmJiAobGJ1ZltuLTFd ID09IENSKSkgYnJlYWs7CisJCX0KKyNpZm5kZWYgTUlOSURJQUwKKwkJZWxzZSBpZiAobXltZG10 eXAgPT0gbl9ESUdJVEVMKSB7CisJCSAgICBpZiAoKChsYnVmW25dID09IENSKSAmJiAobGJ1Zltu LTFdID09IExGKSkgfHwKKwkJCSgobGJ1ZltuXSA9PSBMRikgJiYgKGxidWZbbi0xXSA9PSBDUikp KQorCQkgICAgICBicmVhazsKKwkJICAgIGVsc2UKKwkJICAgICAgY29udGludWU7CisJCX0KKyNl bmRpZiAvKiBNSU5JRElBTCAqLworCSAgICB9IGVsc2UgewkJCS8qIEFsbCBvdGhlcnMsIGJyZWFr IG9uIENSIG9yIExGICovCisJCWlmICggbGJ1ZltuXSA9PSBDUiB8fCBsYnVmW25dID09IExGICkg YnJlYWs7CisJICAgIH0KKwl9CisJbGJ1ZlsrK25dID0gJ1wwJzsJCS8qIFRlcm1pbmF0ZSByZXNw b25zZSBmcm9tIG1vZGVtICovCisJZGVidWcoRjExMSwiX2RvZGlhbCBtb2RlbSByZXNwb25zZSIs bGJ1ZixuKTsKKyNpZm5kZWYgTk9TUEwKKwlja3N0cm5jcHkobW9kZW1tc2csbGJ1ZixMQlVGTCk7 CS8qIENhbGwgcmVzdWx0IG1lc3NhZ2UgKi8KKwlsYnVmWzc5XSA9IE5VTDsKKwl7CisJICAgIGlu dCB4OwkJCS8qIFN0cmlwIGp1bmsgZnJvbSBlbmQgKi8KKwkgICAgeCA9IChpbnQpc3RybGVuKG1v ZGVtbXNnKSAtIDE7CisJICAgIHdoaWxlICh4ID4gLTEpIHsKKwkJaWYgKG1vZGVtbXNnW3hdIDwg KGNoYXIpIDMzKQorCQkgIG1vZGVtbXNnW3hdID0gTlVMOworCQllbHNlCisJCSAgYnJlYWs7CisJ CXgtLTsKKwkgICAgfQorCX0KKyNlbmRpZiAvKiBOT1NQTCAqLworCWlmIChtZG1jYXBhcyAmIENL RF9BVCkgewkvKiBIYXllcyBBVCBjb21tYW5kIHNldCAqLworCSAgICBnZXRocncoKTsJCQkvKiBp biB3b3JkIHJlc3VsdCBtb2RlICovCisJICAgIGlmIChwYXJ0aWFsICYmIGRpYWxzdGEgPT0gRElB X0VSUikgeworCQlkaWFsaHVwKCk7CisJCWRpYWxzdGEgPSBESUFfRVJSOwkvKiAoYmVjYXVzZSBk aWFsaHVwKCkgY2hhbmdlcyBpdCkgKi8KKwkgICAgfQorCSAgICBjb250aW51ZTsKKwl9IGVsc2Ug aWYgKG1kbWNhcGFzICYgQ0tEX1YyNSkgeyAvKiBDQ0lUVCBjb21tYW5kIHNldCAqLworCSAgICBp ZiAoZGlkd2VnZXQobGJ1ZiwiVkFMIikpIHsgLyogRGlhbCBjb21tYW5kIGNvbmZpcm1hdGlvbiAq LworI2lmbmRlZiBNSU5JRElBTAorCQlpZiAobXltZG10eXAgPT0gbl9DQ0lUVCkKKyNlbmRpZiAv KiBNSU5JRElBTCAqLworCQkgIGNvbnRpbnVlOwkJLyogR28gYmFjayBhbmQgcmVhZCBtb3JlICov CisjaWZuZGVmIE1JTklESUFMCisvKiBEaWdpdGVsIGRvZXNuJ3QgZ2l2ZSBhbiBleHBsaWNpdCBj b25uZWN0IGNvbmZpcm1hdGlvbiBtZXNzYWdlICovCisJCWVsc2UgeworCQkgICAgaW50IG47CisJ CSAgICBmb3IgKG4gPSAtMTsgbiA8IExCVUZMLTE7ICkgeworCQkJbGJ1ZlsrK25dID0gYzIgPSAo Y2hhcikgKGRkaW5jKDApICYgMDE3Nyk7CisJCQlkaWFsb2MobGJ1ZltuXSk7CisJCQlpZiAoKChs YnVmW25dID09IENSKSAmJiAobGJ1ZltuLTFdID09IExGKSkgfHwKKwkJCSAgICAoKGxidWZbbl0g PT0gTEYpICYmIChsYnVmW24tMV0gPT0gQ1IpKSkKKwkJCSAgYnJlYWs7CisJCSAgICB9CisJCSAg ICBtZG1zdGF0ID0gQ09OTkVDVEVEOyAvKiBBc3N1bWUgd2UncmUgY29ubmVjdGVkICovCisJCSAg ICBpZiAoZGlhbGRweSAmJiBjYXJyaWVyICE9IENBUl9PRkYpIHsKKyNpZmRlZiBUTl9DT01QT1JU CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXN0bmNvbXBvcnQoKSkgeworICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGludCBpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZv ciAoaSA9IDA7IGkgPCA1OyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZGVidWcoRjEwMCwiVE4gQ29tIFBvcnQgRENEIHdhaXQuLi4iLCIiLDApOworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpZiAoKG4gPSB0dGdtZG0oKSkgPj0gMCkgeworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChuICYgQk1fRENEKSkKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG1zbGVlcCg1MDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdG5jX3dhaXQoCisJCQkJCShDSEFSICopIl9kb2RpYWwgd2FpdGluZyBmb3IgRENE IiwxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQorI2VuZGlmIC8q IFROX0NPTVBPUlQgKi8KKwkJCSAgc2xlZXAoMSk7IAkvKiBXYWl0IGEgc2Vjb25kICovCisJCQlu ID0gdHRnbWRtKCk7CS8qIFRyeSB0byByZWFkIG1vZGVtIHNpZ25hbHMgKi8KKwkJCWlmICgobiA+ IC0xKSAmJiAoKG4gJiBCTV9EQ0QpID09IDApKQorCQkJICBwcmludGYoIldBUk5JTkcgLSBubyBj YXJyaWVyXG4iKTsKKwkJICAgIH0KKwkJfQorI2VuZGlmIC8qIE1JTklESUFMICovCisKKwkJLyog U3RhbmRhcmQgVi4yNWJpcyBzdHVmZiAqLworCisJICAgIH0gZWxzZSBpZiAoZGlkd2VnZXQobGJ1 ZiwiQ05YIikpIHsgLyogQ29ubmVjdGVkICovCisJCW1kbXN0YXQgPSBDT05ORUNURUQ7CisJICAg IH0gZWxzZSBpZiAoZGlkd2VnZXQobGJ1ZiwgIklOViIpKSB7CisJCW1kbXN0YXQgPSBEX0ZBSUxF RDsJLyogQ29tbWFuZCBlcnJvciAqLworCQlkaWFsc3RhID0gRElBX0VSUjsKKwkJY2tzdHJuY3B5 KGxidWYsIklOViIsTEJVRkwpOworCisJICAgIH0gZWxzZSBpZiAoZGlkd2VnZXQobGJ1ZiwiQ0ZJ IikpIHsgLyogQ2FsbCBGYWlsdXJlICovCisKKwkJaWYgKGRpZHdlZ2V0KGxidWYsIkFCIikpIHsg LyogSW50ZXJwcmV0IHJlYXNvbiBjb2RlICovCisJCSAgICBja3N0cm5jcHkobGJ1ZiwiQUI6IFRp bWVkIG91dCIsTEJVRkwpOworCQkgICAgZGlhbHN0YSA9IERJQV9USU1POworCQl9IGVsc2UgaWYg KGRpZHdlZ2V0KGxidWYsIkNCIikpIHsKKwkJICAgIGNrc3RybmNweShsYnVmLCJDQjogTG9jYWwg RENFIEJ1c3kiLExCVUZMKTsKKwkJICAgIGRpYWxzdGEgPSBESUFfTlJEWTsKKwkJfSBlbHNlIGlm IChkaWR3ZWdldChsYnVmLCJFVCIpKSB7CisJCSAgICBja3N0cm5jcHkobGJ1ZiwiRVQ6IEJ1c3ki LExCVUZMKTsKKwkJICAgIGRpYWxzdGEgPSBESUFfQlVTWTsKKwkJfSBlbHNlIGlmIChkaWR3ZWdl dChsYnVmLCAiTlMiKSkgeworCQkgICAgY2tzdHJuY3B5KGxidWYsIk5TOiBOdW1iZXIgbm90IHN0 b3JlZCIsTEJVRkwpOworCQkgICAgZGlhbHN0YSA9IERJQV9FUlI7CisJCX0gZWxzZSBpZiAoZGlk d2VnZXQobGJ1ZiwiTlQiKSkgeworCQkgICAgY2tzdHJuY3B5KGxidWYsIk5UOiBObyBhbnN3ZXIi LExCVUZMKTsKKwkJICAgIGRpYWxzdGEgPSBESUFfTk9BTjsKKwkJfSBlbHNlIGlmIChkaWR3ZWdl dChsYnVmLCJSVCIpKSB7CisJCSAgICBja3N0cm5jcHkobGJ1ZiwiUlQ6IFJpbmcgdG9uZSIsTEJV RkwpOworCQkgICAgZGlhbHN0YSA9IERJQV9SSU5HOworCQl9IGVsc2UgaWYgKGRpZHdlZ2V0KGxi dWYsIlBWIikpIHsKKwkJICAgIGNrc3RybmNweShsYnVmLCJQVjogUGFyYW1ldGVyIHZhbHVlIGVy cm9yIixMQlVGTCk7CisJCSAgICBkaWFsc3RhID0gRElBX0VSUjsKKwkJfSBlbHNlIGlmIChkaWR3 ZWdldChsYnVmLCJQUyIpKSB7CisJCSAgICBja3N0cm5jcHkobGJ1ZiwiUFM6IFBhcmFtZXRlciBz eW50YXggZXJyb3IiLExCVUZMKTsKKwkJICAgIGRpYWxzdGEgPSBESUFfRVJSOworCQl9IGVsc2Ug aWYgKGRpZHdlZ2V0KGxidWYsIk1TIikpIHsKKwkJICAgIGNrc3RybmNweShsYnVmLCJNUzogTWVz c2FnZSBzeW50YXggZXJyb3IiLExCVUZMKTsKKwkJICAgIGRpYWxzdGEgPSBESUFfRVJSOworCQl9 IGVsc2UgaWYgKGRpZHdlZ2V0KGxidWYsIkNVIikpIHsKKwkJICAgIGNrc3RybmNweShsYnVmLCJD VTogQ29tbWFuZCB1bmtub3duIixMQlVGTCk7CisJCSAgICBkaWFsc3RhID0gRElBX0VSUjsKKwkJ fSBlbHNlIGlmIChkaWR3ZWdldChsYnVmLCJGQyIpKSB7CisJCSAgICBja3N0cm5jcHkobGJ1Ziwi RkM6IEZvcmJpZGRlbiBjYWxsIixMQlVGTCk7CisJCSAgICBkaWFsc3RhID0gRElBX05PQUM7CisJ CX0KKwkJbWRtc3RhdCA9IERfRkFJTEVEOworCSAgICB9IGVsc2UgaWYgKGRpZHdlZ2V0KGxidWYs IklOQyIpKSB7IC8qIEluY29taW5nIENhbGwgKi8KKwkJY2tzdHJuY3B5KGxidWYsIklOQzogSW5j b21pbmcgY2FsbCIsTEJVRkwpOworCQlkaWFsc3RhID0gRElBX1JJTkc7CisJCW1kbXN0YXQgPSBE X0ZBSUxFRDsKKwkgICAgfSBlbHNlIGlmIChkaWR3ZWdldChsYnVmLCJETEMiKSkgeyAvKiBEZWxh eWVkIENhbGwgKi8KKwkJY2tzdHJuY3B5KGxidWYsIkRMQzogRGVsYXllZCBjYWxsIixMQlVGTCk7 CisJCWRpYWxzdGEgPSBESUFfTk9BTjsKKwkJbWRtc3RhdCA9IERfRkFJTEVEOworCSAgICB9IGVs c2UJCQkvKiBSZXNwb25zZSB3YXMgcHJvYmFibHkgYW4gZWNoby4gKi8KKyNpZm5kZWYgTUlOSURJ QUwKKwkgICAgICBpZiAobXltZG10eXAgPT0gbl9DQ0lUVCkKKyNlbmRpZiAvKiBNSU5JRElBTCAq LworCQljb250aW51ZTsKKyNpZm5kZWYgTUlOSURJQUwKKwkgICAgICBlbHNlCQkJLyogRGlnaXRl bDogSWYgbm8gZXJyb3IsIGNvbm5lY3QuICovCisJCW1kbXN0YXQgPSBDT05ORUNURUQ7CisjZW5k aWYgLyogTUlOSURJQUwgKi8KKwkgICAgYnJlYWs7CisKKwl9IGVsc2UgaWYgKG4pIHsJCQkvKiBO b24tSGF5ZXMtY29tcGF0aWJsZXMuLi4gKi8KKwkgICAgc3dpdGNoIChteW1kbXR5cCkgeworI2lm bmRlZiBNSU5JRElBTAorCSAgICAgIGNhc2Ugbl9BVFRNT0RFTToKKwkJLyogQ2FyZWZ1bCAtICJD b25uZWN0ZWQiIC8gIk5vdCBDb25uZWN0ZWQiICovCisJCWlmIChkaWR3ZWdldChsYnVmLCJCdXN5 IikpIHsKKwkJICAgIG1kbXN0YXQgPSBEX0ZBSUxFRDsKKwkJICAgIGRpYWxzdGEgPSBESUFfQlVT WTsKKwkJfSBlbHNlIGlmIChkaWR3ZWdldChsYnVmLCJOb3QgY29ubmVjdGVkIikgfHwKKwkJCSAg IGRpZHdlZ2V0KGxidWYsIk5vdCBDb25uZWN0ZWQiKSkgeworCQkgICAgbWRtc3RhdCA9IERfRkFJ TEVEOworCQkgICAgZGlhbHN0YSA9IERJQV9OT0NBOworCQl9IGVsc2UgaWYgKGRpZHdlZ2V0KGxi dWYsIk5vIGRpYWwgdG9uZSIpIHx8CisJCQkgICBkaWR3ZWdldChsYnVmLCJObyBEaWFsIFRvbmUi KSkgeworCQkgICAgbWRtc3RhdCA9IERfRkFJTEVEOworCQkgICAgZGlhbHN0YSA9IERJQV9OT0RU OworCQl9IGVsc2UgaWYgKGRpZHdlZ2V0KGxidWYsIk5vIGFuc3dlciIpIHx8CisJCQkgICBkaWR3 ZWdldChsYnVmLCJObyBBbnN3ZXIiKSkgeworCQkgICAgbWRtc3RhdCA9IERfRkFJTEVEOworCQkg ICAgZGlhbHN0YSA9IERJQV9OT0FOOworCQl9IGVsc2UgaWYgKGRpZHdlZ2V0KGxidWYsIkFuc3dl cmVkIikgfHwKKwkJCSAgIGRpZHdlZ2V0KGxidWYsIkNvbm5lY3RlZCIpKSB7CisJCSAgICBtZG1z dGF0ID0gQ09OTkVDVEVEOworCQkgICAgZGlhbHN0YSA9IERJQV9PSzsKKwkJfQorCQlicmVhazsK KworCSAgICAgIGNhc2Ugbl9BVFRJU046CisJCWlmIChkaWR3ZWdldChsYnVmLCJBTlNXRVJFRCIp KSB7CisJCSAgICBtZG1zdGF0ID0gQ09OTkVDVEVEOworCQkgICAgZGlhbHN0YSA9IERJQV9PSzsK KwkJfSBlbHNlIGlmIChkaWR3ZWdldChsYnVmLCJCVVNZIikpIHsKKwkJICAgIG1kbXN0YXQgPSBE X0ZBSUxFRDsKKwkJICAgIGRpYWxzdGEgPSBESUFfQlVTWTsKKwkJfSBlbHNlIGlmIChkaWR3ZWdl dChsYnVmLCJESVNDT05ORUNUIikpIHsKKwkJICAgIG1kbXN0YXQgPSBEX0ZBSUxFRDsKKwkJICAg IGRpYWxzdGEgPSBESUFfRElTQzsKKwkJfSBlbHNlIGlmIChkaWR3ZWdldChsYnVmLCJOTyBBTlNX RVIiKSkgeworCQkgICAgbWRtc3RhdCA9IERfRkFJTEVEOworCQkgICAgZGlhbHN0YSA9IERJQV9O T0FOOworCQl9IGVsc2UgaWYgKGRpZHdlZ2V0KGxidWYsIldST05HIEFERFJFU1MiKSkgeworCQkg ICAgbWRtc3RhdCA9IERfRkFJTEVEOworCQkgICAgZGlhbHN0YSA9IERJQV9OT0FDOworCQl9CisJ CWJyZWFrOworCisJICAgICAgY2FzZSBuX0FUVERURE06CisJCWlmIChkaWR3ZWdldChsYnVmLCJB TlNXRVJFRCIpKSB7CisJCSAgICBtZG1zdGF0ID0gQ09OTkVDVEVEOworCQl9IGVsc2UgaWYgKGRp ZHdlZ2V0KGxidWYsIkJVU1kiKSkgeworCQkgICAgbWRtc3RhdCA9IERfRkFJTEVEOworCQkgICAg ZGlhbHN0YSA9IERJQV9CVVNZOworCQl9IGVsc2UgaWYgKGRpZHdlZ2V0KGxidWYsIkNIRUNLIE9Q VElPTlMiKSkgeworCQkgICAgbWRtc3RhdCA9IERfRkFJTEVEOworCQkgICAgZGlhbHN0YSA9IERJ QV9FUlI7CisJCX0gZWxzZSBpZiAoZGlkd2VnZXQobGJ1ZiwiRElTQ09OTkVDVEVEIikpIHsKKwkJ ICAgIG1kbXN0YXQgPSBEX0ZBSUxFRDsKKwkJICAgIGRpYWxzdGEgPSBESUFfRElTQzsKKwkJfSBl bHNlIGlmIChkaWR3ZWdldChsYnVmLCJERU5JRUQiKSkgeworCQkgICAgbWRtc3RhdCA9IERfRkFJ TEVEOworCQkgICAgZGlhbHN0YSA9IERJQV9OT0FDOworCQl9CisjaWZkZWYgREVCVUcKKyNpZmRl ZiBBVFQ2MzAwCisJCS8qIEhvcnJpYmxlIGhhY2sgbG9zdCBpbiBoaXN0b3J5LiAqLworCQllbHNl IGlmIChkZWJsb2cgJiYgZGlkd2VnZXQobGJ1Ziwifn4iKSkKKwkJICBtZG1zdGF0ID0gQ09OTkVD VEVEOworI2VuZGlmIC8qIEFUVDYzMDAgKi8KKyNlbmRpZiAvKiBERUJVRyAqLworCQlicmVhazsK KworI2lmZGVmIE9MRE1PREVNUworCSAgICAgIGNhc2Ugbl9DRVJNRVRFSzoKKwkJaWYgKGRpZHdl Z2V0KGxidWYsIlwwMTZBIikpIHsKKwkJICAgIG1kbXN0YXQgPSBDT05ORUNURUQ7CisJCSAgICB0 dHNsb3coIlwwMTZVIDFcMDE1IiwyMDApOyAvKiBNYWtlIHRyYW5zcGFyZW50Ki8KKwkJfQorCQli cmVhazsKKworCSAgICAgIGNhc2Ugbl9ERjAzOgorCQkvKiBCZWNhdXNlIHJlc3BvbnNlIGxhY2tz IENSIG9yIE5MIC4gLiAuICovCisJCWMgPSAoY2hhcikgKGRkaW5jKDApICYgMDE3Nyk7CisJCWRp YWxvYyhjKTsKKwkJZGVidWcoRjAwMCwiZGlhbCBkZjAzIGdvdCIsIiIsYyk7CisJCWlmICggYyA9 PSAnQScgKSBtZG1zdGF0ID0gQ09OTkVDVEVEOworCQlpZiAoIGMgPT0gJ0InICkgbWRtc3RhdCA9 IERfRkFJTEVEOworCQlicmVhazsKKworCSAgICAgIGNhc2Ugbl9ERjEwMDoJICAgICAvKiBERjEw MCBoYXMgc2hvcnQgcmVzcG9uc2UgY29kZXMgKi8KKwkJaWYgKHN0cmNtcChsYnVmLCJBIikgPT0g MCkgeworCQkgICAgbWRtc3RhdCA9IENPTk5FQ1RFRDsgLyogQXR0YWNoZWQgKi8KKwkJICAgIGRp YWxzdGEgPSBESUFfT0s7CisJCX0gZWxzZSBpZiAoc3RyY21wKGxidWYsIk4iKSA9PSAwKSB7CisJ CSAgICBtZG1zdGF0ID0gRF9GQUlMRUQ7CisJCSAgICBkaWFsc3RhID0gRElBX05PQU47IC8qIE5v IGFuc3dlciBvciBubyBkaWFsdG9uZSAqLworCQl9IGVsc2UgaWYgKHN0cmNtcChsYnVmLCJFIikg PT0gMCB8fCAvKiBFcnJvciAqLworCQkJICAgc3RyY21wKGxidWYsIlIiKSA9PSAwKSB7IC8qICJS ZWFkeSIgKD8pICovCisJCSAgICBtZG1zdGF0ID0gRF9GQUlMRUQ7CisJCSAgICBkaWFsc3RhID0g RElBX0VSUjsJLyogQ29tbWFuZCBlcnJvciAqLworCQl9CisJCS8qIG90aGVyd2lzZSBmYWxsIHRo cnUuLi4gKi8KKworCSAgICAgIGNhc2Ugbl9ERjIwMDoKKwkJaWYgKGRpZHdlZ2V0KGxidWYsIkF0 dGFjaGVkIikpIHsKKwkJICAgIG1kbXN0YXQgPSBDT05ORUNURUQ7CisJCSAgICBkaWFsc3RhID0g RElBX09LOworCQkgICAgLyoKKwkJICAgICAqIFRoZSBERjEwMCB3aWxsIHJlc3BvbmQgd2l0aCAi QXR0YWNoZWQiIGV2ZW4gaWYgRFRSCisJCSAgICAgKiBhbmQvb3IgY2FycmllciBhcmUgbm90IHBy ZXNlbnQuCUFub3RoZXIgcmVhc29uIHRvCisJCSAgICAgKiAoYWxzbykgd2FpdCBmb3IgY2Fycmll cj8KKwkJICAgICAqLworCQl9IGVsc2UgaWYgKGRpZHdlZ2V0KGxidWYsIkJ1c3kiKSkgeworCQkg ICAgbWRtc3RhdCA9IERfRkFJTEVEOworCQkgICAgZGlhbHN0YSA9IERJQV9CVVNZOworCQl9IGVs c2UgaWYgKGRpZHdlZ2V0KGxidWYsIkRpc2Nvbm5lY3RlZCIpKSB7CisJCSAgICBtZG1zdGF0ID0g RF9GQUlMRUQ7CisJCSAgICBkaWFsc3RhID0gRElBX0RJU0M7CisJCX0gZWxzZSBpZiAoZGlkd2Vn ZXQobGJ1ZiwiRXJyb3IiKSkgeworCQkgICAgbWRtc3RhdCA9IERfRkFJTEVEOworCQkgICAgZGlh bHN0YSA9IERJQV9FUlI7CisJCX0gZWxzZSBpZiAoZGlkd2VnZXQobGJ1ZiwiTm8gYW5zd2VyIikp IHsKKwkJICAgIG1kbXN0YXQgPSBEX0ZBSUxFRDsKKwkJICAgIGRpYWxzdGEgPSBESUFfTk9BTjsK KwkJfSBlbHNlIGlmIChkaWR3ZWdldChsYnVmLCJObyBkaWFsIHRvbmUiKSkgeworCQkgICAgbWRt c3RhdCA9IERfRkFJTEVEOworCQkgICAgZGlhbHN0YSA9IERJQV9OT0RUOworCQl9IGVsc2UgaWYg KGRpZHdlZ2V0KGxidWYsIlNwZWVkOikiKSkgeworCQkgICAgbWRtc3RhdCA9IERfRkFJTEVEOwor CQkgICAgZGlhbHN0YSA9IERJQV9FUlI7CisJCX0KKwkJLyoKKwkJICogSXQgYXBwZWFycyB0aGF0 IHRoZSAiU3BlZWQ6Li4uIiByZXNwb25zZSBjb21lcyBhZnRlciBhbgorCQkgKiAiQXR0YWNoZWQi IHJlc3BvbnNlLCBzbyB0aGlzIGlzIG5ldmVyIHNlZW4uICBIT1dFVkVSLAorCQkgKiBpdCB3b3Vs ZCBiZSB2ZXJ5IGhhbmR5IHRvIGRldGVjdCB0aGlzIGFuZCB0ZW1wb3JhcmlseQorCQkgKiByZXNl dCB0aGUgc3BlZWQsIHNpbmNlIGl0J3MgYSBudWlzYW5jZSBvdGhlcndpc2UuCisJCSAqIElmIHdl IHdhaXQgZm9yIHNvbWUgbW9yZSBpbnB1dCBmcm9tIHRoZSBtb2RlbSwgaG93IGRvCisJCSAqIHdl IGtub3cgaWYgaXQncyBmcm9tIHRoZSByZW1vdGUgaG9zdCBvciB0aGUgbW9kZW0/CisJCSAqIENh cnJpZXIgcmVwb3J0ZWRseSBkb2Vzbid0IGdldCBzZXQgdW50aWwgYWZ0ZXIgdGhlCisJCSAqICJT cGVlZDouLi4iIHJlc3BvbnNlIChpZiBhbnkpIGlzIHNlbnQuICBBbm90aGVyIHJlYXNvbgorCQkg KiB0byAoYWxzbykgd2FpdCBmb3IgY2Fycmllci4KKwkJICovCisJCWJyZWFrOworCisJICAgICAg Y2FzZSBuX0dEQzoKKwkJaWYgKGRpZHdlZ2V0KGxidWYsIk9OIExJTkUiKSkKKwkJICBtZG1zdGF0 ID0gQ09OTkVDVEVEOworCQllbHNlIGlmIChkaWR3ZWdldChsYnVmLCJOTyBDT05ORUNUIikpCisJ CSAgbWRtc3RhdCA9IERfRkFJTEVEOworCQlicmVhazsKKworCSAgICAgIGNhc2Ugbl9QRU5SSUw6 CisJCWlmIChkaWR3ZWdldChsYnVmLCJPSyIpKSB7CisJCSAgICBtZG1zdGF0ID0gQ09OTkVDVEVE OworCQl9IGVsc2UgaWYgKGRpZHdlZ2V0KGxidWYsIkJVU1kiKSkgeworCQkgICAgbWRtc3RhdCA9 IERfRkFJTEVEOworCQkgICAgZGlhbHN0YSA9IERJQV9CVVNZOworCQkgICAgfSBlbHNlIGlmIChk aWR3ZWdldChsYnVmLCJOTyBSSU5HIikpIHsKKwkJCW1kbXN0YXQgPSBEX0ZBSUxFRDsKKwkJCWRp YWxzdGEgPSBESUFfTk9DQTsKKwkJICAgIH0KKwkJYnJlYWs7CisKKwkgICAgICBjYXNlIG5fUkFD QUw6CisJCWlmIChkaWR3ZWdldChsYnVmLCJPTiBMSU5FIikpCisJCSAgbWRtc3RhdCA9IENPTk5F Q1RFRDsKKwkJZWxzZSBpZiAoZGlkd2VnZXQobGJ1ZiwiRkFJTEVEIENBTEwiKSkKKwkJICBtZG1z dGF0ID0gRF9GQUlMRUQ7CisJCWJyZWFrOworI2VuZGlmIC8qIE9MRE1PREVNUyAqLworCisJICAg ICAgY2FzZSBuX1JPTE06CisJCWlmIChkaWR3ZWdldChsYnVmLCJDQUxMSU5HIikpCisJCSAgbWRt c3RhdCA9IDA7CisJCWVsc2UgaWYgKGRpZHdlZ2V0KGxidWYsIkNPTVBMRVRFIikpCisJCSAgbWRt c3RhdCA9IENPTk5FQ1RFRDsKKwkJZWxzZSBpZiAoZGlkd2VnZXQobGJ1ZiwiRkFJTEVEIikgfHwK KwkJCSBkaWR3ZWdldChsYnVmLCJBQkFORE9OREVEIikpIHsKKwkJICAgIG1kbXN0YXQgPSBEX0ZB SUxFRDsKKwkJICAgIGRpYWxzdGEgPSBESUFfTk9DQTsKKwkJfSBlbHNlIGlmIChkaWR3ZWdldChs YnVmLCJOT1QgQVZBSUxBQkxFIikgfHwKKwkJCSAgIGRpZHdlZ2V0KGxidWYsIkxBQ0tTIFBFUk1J U1NJT04iKSB8fAorCQkJICAgZGlkd2VnZXQobGJ1ZiwiTk9UIEEgREFUQUxJTkUiKSB8fAorCQkJ ICAgZGlkd2VnZXQobGJ1ZiwiSU5WQUxJRCBEQVRBIExJTkUgTlVNQkVSIikgfHwKKwkJCSAgIGRp ZHdlZ2V0KGxidWYsIklOVkFMSUQgR1JPVVAgTkFNRSIpKSB7CisJCSAgICBtZG1zdGF0ID0gRF9G QUlMRUQ7CisJCSAgICBkaWFsc3RhID0gRElBX05PQUM7CisJCX0gZWxzZSBpZiAoZGlkd2VnZXQo bGJ1ZiwiQlVTWSIpKSB7CisJCSAgICBtZG1zdGF0ID0gRF9GQUlMRUQ7CisJCSAgICBkaWFsc3Rh ID0gRElBX0JVU1k7CisJCX0gZWxzZSBpZiAoZGlkd2VnZXQobGJ1ZiwiRE9FUyBOT1QgQU5TV0VS IikpIHsKKwkJICAgIG1kbXN0YXQgPSBEX0ZBSUxFRDsKKwkJICAgIGRpYWxzdGEgPSBESUFfTk9B TjsKKwkJfQorCQlicmVhazsKKworI2lmZGVmIE9MRE1PREVNUworCSAgICAgIGNhc2Ugbl9WRU5U RUw6CisJCWlmIChkaWR3ZWdldChsYnVmLCJPTkxJTkUhIikgfHwKKwkJICAgIGRpZHdlZ2V0KGxi dWYsIk9ubGluZSEiKSkgeworCQkgICAgbWRtc3RhdCA9IENPTk5FQ1RFRDsKKwkJfSBlbHNlIGlm IChkaWR3ZWdldChsYnVmLCJCVVNZIikgfHwKKwkJCSAgIGRpZHdlZ2V0KGxidWYsIkJ1c3kiKSkg eworCQkgICAgbWRtc3RhdCA9IERfRkFJTEVEOworCQkgICAgZGlhbHN0YSA9IERJQV9CVVNZOwor CQl9IGVsc2UgaWYgKGRpZHdlZ2V0KGxidWYsIkRFQUQgUEhPTkUiKSkgeworCQkgICAgbWRtc3Rh dCA9IERfRkFJTEVEOworCQkgICAgZGlhbHN0YSA9IERJQV9ESVNDOworCQl9CisJCWJyZWFrOwor CisJICAgICAgY2FzZSBuX0NPTkNPUkQ6CisJCWlmIChkaWR3ZWdldChsYnVmLCJJTklUSUFUSU5H IikpCisJCSAgbWRtc3RhdCA9IENPTk5FQ1RFRDsKKwkJZWxzZSBpZiAoZGlkd2VnZXQobGJ1Ziwi QlVTWSIpKSB7CisJCSAgICBtZG1zdGF0ID0gRF9GQUlMRUQ7CisJCSAgICBkaWFsc3RhID0gRElB X0JVU1k7CisJCX0gZWxzZSBpZiAoZGlkd2VnZXQobGJ1ZiwiQ0FMTCBGQUlMRUQiKSkgeworCQkg ICAgbWRtc3RhdCA9IERfRkFJTEVEOworCQkgICAgZGlhbHN0YSA9IERJQV9OT0NBOworCQl9CisJ CWJyZWFrOworI2VuZGlmIC8qIE9MRE1PREVNUyAqLworCisJICAgICAgY2FzZSBuX01JQ1JPQ09N OgorCQkvKiAiUklOR0JBQ0siIG1lYW5zIHBob25lIGxpbmUgcmluZ2luZywgY29udGludWUgKi8K KwkJaWYgKGRpZHdlZ2V0KGxidWYsIk5PIENPTk5FQ1QiKSkgeworCQkgICAgbWRtc3RhdCA9IERf RkFJTEVEOworCQkgICAgZGlhbHN0YSA9IERJQV9OT0NBOworCQl9IGVsc2UgaWYgKGRpZHdlZ2V0 KGxidWYsIkJVU1kiKSkgeworCQkgICAgbWRtc3RhdCA9IERfRkFJTEVEOworCQkgICAgZGlhbHN0 YSA9IERJQV9CVVNZOworCQl9IGVsc2UgaWYgKGRpZHdlZ2V0KGxidWYsIk5PIERJQUxUT05FIikp IHsKKwkJICAgIG1kbXN0YXQgPSBEX0ZBSUxFRDsKKwkJICAgIGRpYWxzdGEgPSBESUFfTk9EVDsK KwkJfSBlbHNlIGlmIChkaWR3ZWdldChsYnVmLCJDT01NQU5EIEVSUk9SIikpIHsKKwkJICAgIG1k bXN0YXQgPSBEX0ZBSUxFRDsKKwkJICAgIGRpYWxzdGEgPSBESUFfRVJSOworCQl9IGVsc2UgaWYg KGRpZHdlZ2V0KGxidWYsIklOIFVTRSIpKSB7CisJCSAgICBtZG1zdGF0ID0gRF9GQUlMRUQ7CisJ CSAgICBkaWFsc3RhID0gRElBX05PQUM7CisJCX0gZWxzZSBpZiAoZGlkd2VnZXQobGJ1ZiwiQ09O TkVDVCIpKSB7CisJCSAgICBtZG1zdGF0ID0gQ09OTkVDVEVEOworCQkgICAgLyogdHJhaWxpbmcg c3BlZWQgaWdub3JlZCAqLworCQl9CisJCWJyZWFrOworCisjZW5kaWYgLyogTUlOSURJQUwgKi8K KwkgICAgICBkZWZhdWx0OgorCQlwcmludGYoCisJCSAgICAiUFJPR1JBTSBFUlJPUiAtIE5vIHJl c3BvbnNlIGhhbmRsZXIgZm9yIG1vZGVtIHR5cGUgJWRcbiIsCisJCSAgICAgICBteW1kbXR5cCk7 CisJCW1kbXN0YXQgPSBEX0ZBSUxFRDsKKwkJZGlhbHN0YSA9IERJQV9FUlI7CisJICAgIH0KKwl9 CisgICAgfSAvKiB3aGlsZSAobWRtc3RhdCA9PSAwKSAqLworCisgICAgZGVidWcoRjEwMSwiX2Rv ZGlhbCBhbGFybSBvZmYiLCIiLHgpOworICAgIGFsYXJtKDApOworICAgIGlmIChtZG1zdGF0ID09 IERfRkFJTEVEKSB7CQkvKiBGYWlsdXJlIGRldGVjdGVkIGJ5IG1vZGVtICAqLworICAgICAgICBk aWFsZmFpbChGX01PREVNKTsKKyNpZmRlZiBOVFNJRworCWNrVGhyZWFkRW5kKHRocmVhZGluZm8p OworI2VuZGlmIC8qIE5UU0lHICovCisgICAgICAgIFNJR1JFVFVSTjsKKyAgICB9IGVsc2UgaWYg KG1kbXN0YXQgPT0gRF9QQVJUSUFMICkJeyAvKiBQYXJ0aWFsIGRpYWwgY29tbWFuZCBPSyAqLwor CW1zbGVlcCg1MDApOworCWRlYnVnKEYxMDAsImRpYWwgcGFydGlhbCIsIiIsMCk7CisgICAgfSBl bHNlIHsJCQkJLyogQ2FsbCB3YXMgY29tcGxldGVkICovCisJaW50IHg7CisJbXNsZWVwKDcwMCk7 CQkJLyogSW4gY2FzZSBtb2RlbSBzaWduYWxzIGJsaW5rICAqLworCWRlYnVnKEYxMDAsImRpYWwg c3VjY2VlZGVkIiwiIiwwKTsKKwlpZiAoCisjaWZuZGVmIE1JTklESUFMCisJICAgIG15bWRtdHlw ICE9IG5fUk9MTQkJLyogUm9sbSBoYXMgd2VpcmQgbW9kZW0gc2lnbmFsaW5nICovCisjZWxzZQor CSAgICAxCisjZW5kaWYgLyogTUlOSURJQUwgKi8KKwkgICAgKSB7CisJICAgIGFsYXJtKDMpOwkJ CS8qIEluIGNhc2UgdHRwa3QoKSBnZXRzIHN0dWNrLi4uICovCisJICAgIHR0cGt0KHNwZWVkLEZM T19ESUFYLHBhcml0eSk7IC8qIENhbmNlbCBkaWFsaW5nIHN0YXRlIGlvY3RsICovCisgICAgICAg ICAgICBhbGFybSgwKTsKKwl9CisvKgorICBJbiBjYXNlIENEIHdlbnQgb2ZmIGluIHRoZSBpbnRl cnZhbCBiZXR3ZWVuIGNhbGwgY29tcGxldGlvbiBhbmQgcmV0dXJuCisgIGZyb20gdHRwa3QoKS4u LgorKi8KKwlpZiAoY2FycmllciAhPSBDQVJfT0ZGKSB7CisgICAgICAgICAgICBpZiAoKHggPSB0 dGdtZG0oKSkgPj0gMCkgeworI2lmZGVmIFROX0NPTVBPUlQKKyAgICAgICAgICAgICAgICBpZiAo aXN0bmNvbXBvcnQoKSAmJiAhKHggJiBCTV9EQ0QpKSB7CisgICAgICAgICAgICAgICAgICAgIGlu dCBpOworICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKSB7CisgICAg ICAgICAgICAgICAgICAgICAgICBtc2xlZXAoNTAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAg IHRuY193YWl0KChDSEFSICopIl9kb2RpYWwgd2FpdGluZyBmb3IgRENEIiwxKTsKKyAgICAgICAg ICAgICAgICAgICAgICAgIGlmICgoeCA9IHR0Z21kbSgpKSA+PSAwKSB7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaWYgKCh4ICYgQk1fRENEKSkKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisjZW5kaWYgLyogVE5fQ09NUE9SVCAqLworICAg ICAgICAgICAgICAgIGlmICghKHggJiBCTV9EQ0QpKQorCQkgIHByaW50ZigiV0FSTklORzogQ2Fy cmllciBzZWVtcyB0byBoYXZlIGRyb3BwZWQuLi5cbiIpOworICAgICAgICAgICAgfQorICAgICAg ICB9CisgICAgfQorICAgIGRyZXNldCgpOwkJCQkvKiBSZXNldCBhbGFybXMgYW5kIHNpZ25hbHMu ICovCisgICAgaWYgKCFxdWlldCAmJiAhYmFja2dyZCkgeworCWlmIChkaWFsZHB5ICYmIChwID0g Y2tfdGltZSgpKSkgeyAvKiBJZiBESUFMIERJU1BMQVkgT04sICovCisJICAgIHByaW50ZigiICVz YWxsIGNvbXBsZXRlOiAlcy5cbiIsIC8qIGluY2x1ZGUgdGltZXN0YW1wLiAgKi8KKwkJICAgKG1k bXN0YXQgPT0gRF9QQVJUSUFMKSA/CisJCSAgICJQYXJ0aWFsIGMiIDoKKwkJICAgIkMiLAorCQkg ICBwICk7CisJfSBlbHNlIGlmIChtb2RlbW1zZ1swXSkgeworCSAgICBwcmludGYgKCIgJXNhbGwg Y29tcGxldGU6IFwiJXNcIi5cbiIsCisJCSAgICAobWRtc3RhdCA9PSBEX1BBUlRJQUwpID8gIlBh cnRpYWwgYyIgOiAiQyIsCisJCSAgICAoY2hhciAqKW1vZGVtbXNnCisJCSAgICApOworCX0gZWxz ZSB7CisJICAgIHByaW50ZiAoIiAlc2FsbCBjb21wbGV0ZS5cbiIsCisJCSAgICAobWRtc3RhdCA9 PSBEX1BBUlRJQUwpID8KKwkJICAgICJQYXJ0aWFsIGMiIDoKKwkJICAgICJDIgorCQkgICAgKTsK Kwl9CisgICAgfQorI2lmZGVmIENLTE9HRElBTAorICAgIGRvbG9nZGlhbCh0ZWxuYnIpOworI2Vu ZGlmIC8qIENLTE9HRElBTCAqLworCisjaWZkZWYgRFlOQU1JQworICAgIGlmIChyYnVmKSBmcmVl KHJidWYpOyByYnVmID0gTlVMTDsKKyAgICBpZiAoZmJ1ZikgZnJlZShmYnVmKTsgZmJ1ZiA9IE5V TEw7CisjZW5kaWYgLyogRFlOQU1JQyAqLworICAgIGRpYWxzdGEgPSAobWRtc3RhdCA9PSBEX1BB UlRJQUwpID8gRElBX1BBUlQgOiBESUFfT0s7CisjaWZkZWYgTlRTSUcKKyAgICBja1RocmVhZEVu ZCh0aHJlYWRpbmZvKTsKKyNlbmRpZiAvKiBOVFNJRyAqLworICAgIFNJR1JFVFVSTjsKK30KKwor c3RhdGljIFNJR1RZUAorI2lmZGVmIENLX0FOU0lDCitmYWlsZGlhbCh2b2lkICogdGhyZWFkaW5m bykKKyNlbHNlIC8qIE5vdCBDS19BTlNJQyAqLworZmFpbGRpYWwodGhyZWFkaW5mbykgVk9JRCAq IHRocmVhZGluZm87CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIGZhaWxkaWFsICovIHsKKyAg ICBkZWJ1ZyhGMTAwLCJsb25nam1wIHJldHVybnMgdG8gZGlhbCByb3V0aW5lIiwiIiwwKTsKKyAg ICBkaWFsZmFpbChmYWlsX2NvZGUpOworICAgIFNJR1JFVFVSTjsKK30KKworLyoKKyAgbmJyID0g bnVtYmVyIHRvIGRpYWwgKHN0cmluZykKKyAgeDEgID0gUmV0cnkgY291bnRlcgorICB4MiAgPSBO dW1iZXIgY291bnRlcgorICBmYyAgPSBGdW5jdGlvbiBjb2RlOgorICAgICAgICAwID09IERJQUwK KyAgICAgICAgMSA9PSBBTlNXRVIKKyAgICAgICAgMiA9PSBJTklUL0NPTkZJRworICAgICAgICAz ID09IFBBUlRJQUwgRElBTAorKi8KKworaW50CisjaWZkZWYgT0xEX0RJQUwKK2NrZGlhbChuYnIp IGNoYXIgKm5icjsKKyNlbHNlCitja2RpYWwobmJyLCB4MSwgeDIsIGZjLCByZWRpYWwpIGNoYXIg Km5icjsgaW50IHgxLCB4MiwgZmMsIHJlZGlhbDsKKyNlbmRpZiAvKiBPTERfRElBTCAqLworLyog Y2tkaWFsICovIHsKKyNkZWZpbmUgRVJNU0dMIDUwCisgICAgY2hhciBlcnJtc2dbRVJNU0dMXSwg KmVycDsJCS8qIEZvciBlcnJvciBtZXNzYWdlcyAqLworICAgIGludCBuID0gRl9USU1FOworICAg IGNoYXIgKnM7CisgICAgbG9uZyBzcGRtYXg7CisjaWZkZWYgT1MyCisgICAgZXh0ZXJuIGludCB0 ZXJtX2lvOworICAgIGludCB0ZXJtX2lvX3NhdiA9IHRlcm1faW87CisjZW5kaWYgLyogT1MyICov CisKKyAgICBjaGFyICptbXNnID0gIlNvcnJ5LCBESUFMIG1lbW9yeSBidWZmZXIgY2FuJ3QgYmUg YWxsb2NhdGVkXG4iOworICAgIC8qCisgICAgICBBIERJQUwgY29tbWFuZCBpbXBsaWVzIGEgU0VU IE1PREVNIFRZUEUgY29tbWFuZCBhbmQgdGhlcmVmb3JlIGVuYWJsZXMKKyAgICAgIGhhbmdpbmcg dXAgYnkgbW9kZW0gY29tbWFuZHMgcmF0aGVyIHRoYW4gZHJvcHBpbmcgRFRSLgorICAgICovCisg ICAgbWRtc2V0ID0gMTsJCQkJLyogU2VlIG1kbWh1cCgpICovCisKKyAgICBwYXJ0aWFsID0gMDsK KyAgICBpZiAoZmMgPT0gMykgewkJCS8qIFBhcnRpYWwgZGlhbCByZXF1ZXN0ZWQgKi8KKwlwYXJ0 aWFsID0gMTsJCQkvKiBTZXQgZmxhZyAqLworCWZjID0gMDsJCQkJLyogVHJlYXQgbGlrZSByZWd1 bGFyIGRpYWxpbmcgKi8KKyAgICB9CisgICAgZnVuY19jb2RlID0gZmM7CQkJLyogTWFrZSBnbG9i YWwgdG8gdGhpcyBtb2R1bGUgKi8KKyAgICB0ZWxuYnIgPSBuYnI7CisgICAgeHJlZGlhbCA9IHJl ZGlhbDsKKyAgICBkZWJ1ZyhGMTExLCJja2RpYWwgZW50cnkgcGFydGlhbCIsY2tpdG9hKGZjKSxw YXJ0aWFsKTsKKyAgICBkZWJ1ZyhGMTExLCJja2RpYWwgZW50cnkgbnVtYmVyIixuYnIscmVkaWFs KTsKKworICAgIGlmIChmYyA9PSAxKSB7CQkJLyogQU5TV0VSIGNvbW1hbmQ/ICovCisJLyogUmVz ZXQgY2FsbGVyIElEIHN0cmluZ3MgKi8KKwlpZiAoY2FsbGlkX2RhdGUpIG1ha2VzdHIoJmNhbGxp ZF9kYXRlLE5VTEwpOworCWlmIChjYWxsaWRfdGltZSkgbWFrZXN0cigmY2FsbGlkX3RpbWUsTlVM TCk7CisJaWYgKGNhbGxpZF9uYW1lKSBtYWtlc3RyKCZjYWxsaWRfbmFtZSxOVUxMKTsKKwlpZiAo Y2FsbGlkX25tYnIpIG1ha2VzdHIoJmNhbGxpZF9ubWJyLE5VTEwpOworCWlmIChjYWxsaWRfbWVz ZykgbWFrZXN0cigmY2FsbGlkX21lc2csTlVMTCk7CisgICAgfQorCisjaWZkZWYgQ0tfVEFQSV9Y CisgICAgaWYgKHR0dGFwaSAmJiB0YXBpcGFzcykgeworCWlmIChtb2RlbXBbbl9UQVBJXSA9IGNr dGFwaUdldE1vZGVtSW5mKCkpIHsKKwkgICAgbXltZG10eXAgPSBuX1RBUEk7CisJfSBlbHNlIHsK KwkgICAgbXltZG10eXAgPSBtZG10eXA7CisJICAgIG1vZGVtcFtuX1RBUEldID0gJkdFTkVSSUM7 CisJfQorICAgIH0gZWxzZQorI2VuZGlmIC8qIENLX1RBUEkgKi8KKyAgICBteW1kbXR5cCA9IG1k bXR5cDsKKyAgICBpZiAobXltZG10eXAgPCAwKSB7CQkJLyogV2hvYSwgbmV0d29yayBkaWFsaW5n Li4uICovCisJaWYgKG1kbXNhdiA+IC0xKQorCSAgbXltZG10eXAgPSBtZG1zYXY7CisgICAgfQor ICAgIGlmIChteW1kbXR5cCA8IDApIHsKKwlwcmludGYoIkludmFsaWQgbW9kZW0gdHlwZSAlZCAt IGludGVybmFsIGVycm9yLlxuIixteW1kbXR5cCk7CisJZGlhbHN0YSA9IERJQV9OT01POworCXJl dHVybigwKTsKKyAgICB9CisgICAgZGlhbF93aGF0ID0gRFdfTk9USElORzsJCS8qIERvaW5nIG5v dGhpbmcgYXQgZmlyc3QuICovCisgICAgbm9udmVyYmFsID0gMDsKKworLyogVGhlc2UgYXJlIE9O TFkgZm9yIHRoZSBwdXJwb3NlIG9mIGludGVycHJldGluZyBudW1lcmljIHJlc3VsdCBjb2Rlcy4g Ki8KKworICAgIGlzX21vdG9yb2xhID0KKyNpZmRlZiBNSU5JRElBTAorICAgICAgMAorI2Vsc2UK KyAgICAgIG15bWRtdHlwID09IG5fU1VQUkEgfHwgbXltZG10eXAgPT0gbl9TVVBSQVNPTjsKKyNl bmRpZiAvKiBNSU5JRElBTCAqLworCTsKKworICAgIGlzX21vdG9yb2xhID0KKyNpZmRlZiBNSU5J RElBTAorICAgICAgMAorI2Vsc2UKKyAgICAgIG15bWRtdHlwID09IG5fTU9UT1JPTEEgfHwgbXlt ZG10eXAgPT0gbl9NT05UQU5BOworI2VuZGlmIC8qIE1JTklESUFMICovCisJOworCisgICAgaXNf cm9ja3dlbGwgPQorI2lmZGVmIE1JTklESUFMCisgICAgICAwCisjZWxzZQorICAgICAgbXltZG10 eXAgPT0gbl9SV1YzMiB8fCBteW1kbXR5cCA9PSBuX1JXVjMyQiB8fAorCW15bWRtdHlwID09IG5f UldWMzQgfHwgbXltZG10eXAgPT0gbl9SV1Y5MCB8fAorCSAgbXltZG10eXAgPT0gbl9CT0NBIHx8 IG15bWRtdHlwID09IG5fVEVMRVBBVEggfHwKKwkgICAgbXltZG10eXAgPT0gbl9DQVJESU5BTCB8 fCBteW1kbXR5cCA9PSBuX0JFU1REQVRBIHx8CisJICAgICAgbXltZG10eXAgPT0gbl9DT05FWEFO VCB8fCBteW1kbXR5cCA9PSBuX1BDVEVMCisjZW5kaWYgLyogTUlOSURJQUwgKi8KKwk7CisKKyAg ICBpc19oYXllc2hpc3BkID0KKyNpZmRlZiBNSU5JRElBTAorICAgICAgMAorI2Vsc2UKKyAgICAg IG15bWRtdHlwID09IG5fSF9VTFRSQSB8fCBteW1kbXR5cCA9PSBuX0hfQUNDVVJBIHx8IG5fUFBJ CisjZW5kaWYgLyogTUlOSURJQUwgKi8KKwk7CisKKyAgICBpc19zdXByYSA9CisjaWZkZWYgTUlO SURJQUwKKyAgICAgIDAKKyNlbHNlCisgICAgICBteW1kbXR5cCA9PSBuX1NVUFJBIHx8IG15bWRt dHlwID09IG5fU1VQUkFYIHx8IG5fU1VQUkFTT04KKyNlbmRpZiAvKiBNSU5JRElBTCAqLworCTsK KworICAgIG1wID0gbW9kZW1wW215bWRtdHlwXTsJCS8qIFNldCBwb2ludGVyIHRvIG1vZGVtIGlu Zm8gKi8KKyAgICBpZiAoIW1wKSB7CisJcHJpbnRmKCJTb3JyeSwgaGFuZGxlciBmb3IgdGhpcyBt b2RlbSB0eXBlIG5vdCB5ZXQgZmlsbGVkIGluLlxuIik7CisJZGlhbHN0YSA9IERJQV9OT01POwor CXJldHVybiAwOworICAgIH0KKyAgICBkZWJ1ZyhGMTEwLCJkaWFsIG51bWJlciIsdGVsbmJyLDAp OworI2lmZGVmIENPTU1FTlQKKyAgICBkZWJ1ZyhGMTEwLCJkaWFsIHByZWZpeCIsKGRpYWxucHIg PyBkaWFsbnByIDogIiIpLCAwKTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisKKyNpZmRlZiBEWU5B TUlDCisgICAgKmxidWYgPSBOVUw7CisgICAgZGVidWcoRjEwMSwiRElBTCBsYnVmIG1hbGxvYyBv ayIsIiIsTEJVRkwrMSk7CisKKyAgICBpZiAoIXJidWYpIHsgICAgLyogVGhpcyBvbmUgbWlnaHQg YWxyZWFkeSBoYXZlIGJlZW4gYWxsb2NhdGVkIGJ5IGdldG9rKCkgKi8KKwlpZiAoIShyYnVmID0g bWFsbG9jKFJCVUZMKzEpKSkgeyAgICAvKiBBbGxvY2F0ZSBpbnB1dCBsaW5lIGJ1ZmZlciAqLwor CSAgICBwcmludGYoIiVzIiwgbW1zZyk7CisJICAgIGRpYWxzdGEgPSBESUFfSUU7CisJICAgIHJl dHVybiAwOworCX0gZWxzZQorCSAgZGVidWcoRjEwMSwiRElBTCByYnVmIG1hbGxvYyBvayIsIiIs UkJVRkwrMSk7CisgICAgfQorICAgIGlmICghKGZidWYgPSBtYWxsb2MoRlVMTE5VTUwrMSkpKSB7 ICAgIC8qIEFsbG9jYXRlIGlucHV0IGxpbmUgYnVmZmVyICovCisJcHJpbnRmKCIlcyIsIG1tc2cp OworCWRpYWxzdGEgPSBESUFfSUU7CisJaWYgKHJidWYpIGZyZWUocmJ1Zik7IHJidWYgPSBOVUxM OworCXJldHVybiAwOworICAgIH0KKyAgICBkZWJ1ZyhGMTAxLCJESUFMIGZidWYgbWFsbG9jIG9r IiwiIixGVUxMTlVNTCsxKTsKKyNlbmRpZiAvKiBEWU5BTUlDICovCisKKyAgICAvKiBOT1RFOiBt ZG10eXAsIG5vdCBteW1kbXR5cCAqLworCisgICAgaWYgKHR0b3Blbih0dG5hbWUsJmxvY2FsLG1k bXR5cCwwKSA8IDApIHsgLyogT3Blbiwgbm8gY2FycmllciB3YWl0ICovCisJZXJwID0gZXJybXNn OworCWlmICgoaW50KXN0cmxlbih0dG5hbWUpIDwgKEVSTVNHTCAtIDE4KSkgLyogc2FmZSwgY2hl Y2tlZCAqLworCSAgc3ByaW50ZihlcnAsIlNvcnJ5LCBjYW4ndCBvcGVuICVzIix0dG5hbWUpOwor CWVsc2UKKwkgIHNwcmludGYoZXJwLCJTb3JyeSwgY2FuJ3Qgb3BlbiBkZXZpY2UiKTsKKwlwZXJy b3IoZXJybXNnKTsKKwlkaWFsc3RhID0gRElBX09QRU47CisjaWZkZWYgRFlOQU1JQworCWlmIChy YnVmKSBmcmVlKHJidWYpOyByYnVmID0gTlVMTDsKKwlpZiAoZmJ1ZikgZnJlZShmYnVmKTsgZmJ1 ZiA9IE5VTEw7CisjZW5kaWYgLyogRFlOQU1JQyAqLworCXJldHVybiAwOworICAgIH0KKworI2lm ZGVmIENLX1RBUEkKKyAgICBpZiAoIXR0dGFwaSkgeworI2VuZGlmIC8qIENLX1RBUEkgKi8KKwor LyogQ29uZGl0aW9uIGNvbnNvbGUgdGVybWluYWwgYW5kIGNvbW11bmljYXRpb24gbGluZSAqLwor CisgICAgLyogUGxhY2UgbGluZSBpbnRvICJjbG9jYWwiIGRpYWxpbmcgc3RhdGUsICovCisgICAg LyogaW1wb3J0YW50IG1haW5seSBmb3IgU3lzdGVtIFYgVU5JWC4gICAgICovCisKKyAgICBpZiAo dHRwa3Qoc3BlZWQsRkxPX0RJQUwscGFyaXR5KSA8IDApIHsKKwl0dGNsb3MoMCk7CQkJLyogSWYg dHRwa3QgZmFpbHMgZG8gYWxsIHRoaXMuLi4gKi8KKwlpZiAodHRvcGVuKHR0bmFtZSwmbG9jYWws bXltZG10eXAsMCkgPCAwKSB7CisJICAgIGVycCA9IGVycm1zZzsKKwkgICAgaWYgKChpbnQpc3Ry bGVuKHR0bmFtZSkgPCAoRVJNU0dMIC0gMTgpKSAvKiBzYWZlLCBjaGVja2VkICovCisJICAgICAg c3ByaW50ZihlcnAsIlNvcnJ5LCBjYW4ndCByZW9wZW4gJXMiLHR0bmFtZSk7CisJICAgIGVsc2UK KwkgICAgICBzcHJpbnRmKGVycCwiU29ycnksIGNhbid0IHJlb3BlbiBkZXZpY2UiKTsKKwkgICAg cGVycm9yKGVycm1zZyk7CisJICAgIGRpYWxzdGEgPSBESUFfT1BFTjsKKyNpZmRlZiBEWU5BTUlD CisJICAgIGlmIChyYnVmKSBmcmVlKHJidWYpOyByYnVmID0gTlVMTDsKKwkgICAgaWYgKGZidWYp IGZyZWUoZmJ1Zik7IGZidWYgPSBOVUxMOworI2VuZGlmIC8qIERZTkFNSUMgKi8KKwkgICAgcmV0 dXJuIDA7CisJfQkJCQkvKiBBbmQgdHJ5IGFnYWluLiAqLworCWlmICgodHRwa3Qoc3BlZWQsRkxP X0RJQUwscGFyaXR5KSA8IDApCisjaWZkZWYgVU5JWAorCSYmIChzdHJjbXAodHRuYW1lLCIvZGV2 L251bGwiKSkKKyNlbHNlCisjaWZkZWYgT1NLCisJJiYgKHN0cmNtcCh0dG5hbWUsIi9uaWwiKSkK KyNlbmRpZiAvKiBPU0sgKi8KKyNlbmRpZiAvKiBVTklYICovCisjaWZkZWYgQ0tfVEFQSQorCSAg ICAgJiYgIXR0dGFwaQorI2VuZGlmIC8qIENLX1RBUEkgKi8KKwkgICAgKSB7CisJICAgIHByaW50 ZigiU29ycnksIENhbid0IGNvbmRpdGlvbiBjb21tdW5pY2F0aW9uIGxpbmVcbiIpOworCSAgICBw cmludGYoIlRyeSAnc2V0IGxpbmUgJXMnIGFnYWluXG4iLHR0bmFtZSk7CisJICAgIGRpYWxzdGEg PSBESUFfT1BFTjsKKyNpZmRlZiBEWU5BTUlDCisJICAgIGlmIChyYnVmKSBmcmVlKHJidWYpOyBy YnVmID0gTlVMTDsKKwkgICAgaWYgKGZidWYpIGZyZWUoZmJ1Zik7IGZidWYgPSBOVUxMOworI2Vu ZGlmIC8qIERZTkFNSUMgKi8KKwkgICAgcmV0dXJuIDA7CisJfQorICAgIH0KKyNpZmRlZiBDS19U QVBJCisgICAgfQorI2VuZGlmIC8qIENLX1RBUEkgKi8KKworICAgIC8qIE1vZGVtJ3MgZXNjYXBl IHNlcXVlbmNlLi4uICovCisKKyAgICBpZiAoZGlhbGVzYyA8IDAgfHwgZGlhbGVzYyA+IDEyNykK KyAgICAgIGMgPSBOVUw7CisgICAgZWxzZQorICAgICAgYyA9IChjaGFyKSAoZGlhbGVzYyA/IGRp YWxlc2MgOiBtcC0+ZXNjX2NoYXIpOworICAgIG1kbWNhcGFzID0gZGlhbGNhcGFzID8gZGlhbGNh cGFzIDogbXAtPmNhcGFzOworCisgICAgeHhfb2sgPSBtcC0+b2tfZm47CQkJLyogUG9pbnRlciB0 byByZXNwb25zZSByZWFkZXIgKi8KKworICAgIGlmIChtZG1jYXBhcyAmIENLRF9BVCkgewkJLyog SGF5ZXMgY29tcGF0aWJsZSAqLworCWVzY2J1ZlswXSA9IGM7CisJZXNjYnVmWzFdID0gYzsKKwll c2NidWZbMl0gPSBjOworCWVzY2J1ZlszXSA9IE5VTDsKKwkvKiBJbiBjYXNlIHRoaXMgbW9kZW0g dHlwZSBpcyB1c2VyLWRlZmluZWQgKi8KKwlpZiAoIXh4X29rKSB4eF9vayA9IGdldG9rOworICAg IH0gZWxzZSB7CQkJCS8qIE90aGVyICovCisJZXNjYnVmWzBdID0gYzsKKwllc2NidWZbMV0gPSBO VUw7CisJLyogSW4gY2FzZSB1c2VyLWRlZmluZWQgKi8KKwlpZiAobWRtY2FwYXMgJiBDS0RfVjI1 KSBpZiAoIXh4X29rKSB4eF9vayA9IGdldG9rOworICAgIH0KKworICAgIC8qIFBhcnRpYWwgZGlh bGluZyAqLworCisgICAgaWYgKG1kbWNhcGFzICYgQ0tEX0FUCisjaWZuZGVmIE1JTklESUFMCisJ fHwgbXltZG10eXAgPT0gbl9NSUNST0NPTQorI2VuZGlmIC8qIE1JTklESUFMICovCisJKSB7CisJ aW50IHg7CisJeCA9IChpbnQpIHN0cmxlbih0ZWxuYnIpOworCWlmICh4ID4gMCkgeworCSAgICBp ZiAodGVsbmJyW3gtMV0gPT0gJzsnKSB7CisJCXBhcnRpYWwgPSAxOworCQlkZWJ1ZyhGMTEwLCJj a2RpYWwgc2V0cyBwYXJ0aWFsPTE6Iix0ZWxuYnIsMCk7CisJICAgIH0gZWxzZSBpZiAocGFydGlh bCkgeworCQlja21ha21zZyhmYnVmLEZVTExOVU1MLHRlbG5iciwiOyIsTlVMTCxOVUxMKTsgLyog YWRkIG9uZSAqLworCQl0ZWxuYnIgPSBmYnVmOworCSAgICB9CisJfQorICAgIH0KKyAgICBtc2xl ZXAoNTAwKTsKKworICAgIGRlYnVnKEYxMDEsImNrZGlhbCBkaWFsdG1vIiwiIixkaWFsdG1vKTsg LyogVGltZW91dCAqLworCisgICAgaWYgKGZjID09IDEpIHsJCQkvKiBBTlNXRVIgKi8KKwl3YWl0 Y3QgPSAoZGlhbGF0bW8gPiAtMSkgPyBkaWFsYXRtbyA6IDA7CisgICAgfSBlbHNlIHsJCQkJLyog RElBTCAqLworCWlmIChkaWFsdG1vIDwgMSkgewkJLyogQXV0b21hdGljIGNvbXB1dGF0aW9uLiAq LworI2lmZGVmIENLX1RBUEkKKwkgICAgaWYgKHR0dGFwaSAmJiAhdGFwaXBhc3MpIHsKKwkJd2Fp dGN0ID0gMSAqIChpbnQpc3RybGVuKHRlbG5icikgOyAvKiBXb3JzdCBjYXNlIGRpYWwgdGltZSAq LworCQl3YWl0Y3QgKz0gNjA7CQkvKiBkaWFsdG9uZSArIGNvbXBsZXRpb24gd2FpdCB0aW1lcyAq LworCQlmb3IgKHMgPSB0ZWxuYnI7ICpzOyBzKyspIHsgLyogYWRkIGluIHBhdXNlIGNoYXJhY3Rl cnMgdGltZSAqLworCQkgICAgaWYgKCpzID09ICcsJykgeworCQkJd2FpdGN0ICs9IDI7IC8qIHVu bGVzcyBpdCB3YXMgY2hhbmdlZCBpbiB0aGUgbW9kZW0gKi8KKwkJICAgIH0gZWxzZSBpZiAoKnMg PT0gJ1cnIHx8CisJCQkgICAgICAgKnMgPT0gJ3cnIHx8CisJCQkgICAgICAgKnMgPT0gJyQnIHx8 CisJCQkgICAgICAgKnMgPT0gJ0AnCisJCQkgICAgICAgKSB7CisJCQl3YWl0Y3QgKz0gODsKKwkJ ICAgIH0KKwkJfQorCSAgICB9IGVsc2UgeworI2VuZGlmIC8qIENLX1RBUEkgKi8KKwkJd2FpdGN0 ID0gMSAqIChpbnQpc3RybGVuKHRlbG5icikgOworCQkvKiBkaWFsdG9uZSArIGNvbXBsZXRpb24g d2FpdCB0aW1lcyAqLworCQl3YWl0Y3QgKz0gbXAtPmRpYWxfdGltZTsKKwkJZm9yIChzID0gdGVs bmJyOyAqczsgcysrKSB7CisJCSAgICBmb3IgKHAgPSBtcC0+cGF1c2VfY2hhcnM7ICpwOyBwKysp CisJCSAgICAgIGlmICgqcyA9PSAqcCkgeworCQkJICB3YWl0Y3QgKz0gbXAtPnBhdXNlX3RpbWU7 CisJCQkgIGJyZWFrOworCQkgICAgICB9CisJCX0KKyNpZmRlZiBDS19UQVBJCisJICAgIH0KKyNl bmRpZiAvKiBDS19UQVBJICovCisJfSBlbHNlIHsKKwkgICAgd2FpdGN0ID0gZGlhbHRtbzsJCS8q IFVzZXItc3BlY2lmaWVkIHRpbWVvdXQgKi8KKwl9CisJZGVidWcoRjEwMSwiY2tkaWFsIHdhaXRj dCBBIiwiIix3YWl0Y3QpOworICAgIH0KKworLyoKKyAgd2FpdGN0IGlzIG91ciBhbGFybSgpIHRp bWVyLgorICBtZG13YWl0IGlzIGhvdyBsb25nIHdlIHRlbGwgdGhlIG1vZGVtIHRvIHdhaXQgZm9y IGNhcnJpZXIuCisgIFdlIHNldCBtZG13YWl0IHRvIGJlIDUgc2Vjb25kcyBsZXNzIHRoYW4gd2Fp dGN0LCB0byBpbmNyZWFzZSB0aGUKKyAgY2hhbmNlIHRoYXQgd2UgZ2V0IGEgcmVzcG9uc2UgZnJv bSB0aGUgbW9kZW0gYmVmb3JlIHRpbWluZyBvdXQuCisqLworICAgIGlmICh3YWl0Y3QgPD0gMCkg ewkJCS8qIDAgb3IgbmVnYXRpdmUgbWVhbnMgd2FpdCBmb3JldmVyICAqLworI2lmZGVmIENPTU1F TlQKKwl3YWl0Y3QgPSAyNTQ7CQkJLyogVGhlc2Ugd2VyZSBiYWNrd2FyZHMgaW4gNy4wLjE5NiAq LworCW1kbXdhaXQgPSAwOworI2Vsc2UKKwl3YWl0Y3QgPSAwOwkJCS8qIEZpeGVkIGluIDcuMC4x OTguICovCisJbWRtd2FpdCA9IDI1NDsKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgfSBlbHNl IHsKKwlpZiAoZGlhbHRtbyA8IDEpIHsJCS8qIEF1dG9tYXRpYyBjb21wdXRhdGlvbi4gKi8KKyNp ZmRlZiBYV0FJVENUCisJICAgIC8qIEFkZHRsIHdhaXQgc2xvcCBjYW4gYmUgZGVmaW5lZCBhdCBj b21waWxlIHRpbWUgKi8KKwkgICAgd2FpdGN0ICs9IFhXQUlUQ1Q7CisjZW5kaWYgLyogWFdBSVRD VCAqLworCSAgICBpZiAod2FpdGN0IDwgNjAgKyBtZG13YWl0ZCkKKwkgICAgICB3YWl0Y3QgPSA2 MCArIG1kbXdhaXRkOworCX0KKwlpZiAobWRtY2FwYXMgJiBDS0RfQVQpIHsJLyogQVQgY29tbWFu ZC1zZXQgbW9kZW1zICovCisJICAgIG1kbXdhaXQgPSB3YWl0Y3Q7CQkvKiBTNyB0aW1lb3V0ID0g d2hhdCB1c2VyIGFza2VkIGZvciAqLworCSAgICB3YWl0Y3QgKz0gbWRtd2FpdGQ7CQkvKiBLZXJt aXQgdGltZW91dCBhIGJpdCBsYXRlciAqLworCX0gZWxzZSB7CQkJLyogTm9uLUFUICovCisJICAg IG1kbXdhaXQgPSB3YWl0Y3Q7CQkvKiBubyBkaWZmZXJlbmNlICovCisJfQorICAgIH0KKyAgICBk ZWJ1ZyhGMTAxLCJja2RpYWwgd2FpdGN0IEIiLCIiLHdhaXRjdCk7CisgICAgaWYgKGZjID09IDEp IHsJCQkvKiBBTlNXRVIgKi8KKyNpZmRlZiBDT01NRU5UCisvKgorICBUaGlzIGlzIHdyb25nLiAg bWRtd2FpdCBpcyB0aGUgdmFsdWUgZ2l2ZW4gdG8gUzcgaW4gSGF5ZXNsaWtlIG1vZGVtcy4KKyAg V2hlbiBpbiBhdXRvYW5zd2VyIG1vZGUsIHRoaXMgaXMgdGhlIGFtb3VudCBvZiB0aW1lIHRoZSBt b2RlbSB3YWl0cyBmb3IKKyAgY2FycmllciBvbmNlIHJpbmdpbmcgc3RhcnRzLiAgV2hlcmVhcyB3 YWl0Y3QgaXMgdGhlIHRpbWVvdXQgZ2l2ZW4gdG8gdGhlCisgIEFOU1dFUiBjb21tYW5kLCB3aGlj aCBpcyBhbiBlbnRpcmVseSBkaWZmZXJlbnQgdGhpbmcuICBTaW5jZSB0aGUgZGVmYXVsdAorICBB TlNXRVIgdGltZW91dCBpcyAwIChtZWFuaW5nICJ3YWl0IGZvcmV2ZXIiKSwgdGhlIGZvbGxvd2lu ZyBzdGF0ZW1lbnQgc2V0cworICBTNyB0byAwLCB3aGljaCwgb24gc29tZSBtb2RlbXMgKGxpa2Ug dGhlIFVTUiBTcG9ydHN0ZXIpIG1ha2VzIGl0IGhhbmcgdXAKKyAgYW5kIHJlcG9ydCBOTyBDQVJS SUVSIHRoZSBpbnN0YW50IHRoZSBwaG9uZSByaW5ncy4KKyovCisJbWRtd2FpdCA9IHdhaXRjdDsK KyNlbHNlCisJaWYgKG1kbXdhaXQgPD0gMCkKKwkgIG1kbXdhaXQgPSA2MDsJCQkvKiBBbHdheXMg d2FpdCA2MCBzZWNvbmRzLiAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKworICAgIH0KKyAgICBp ZiAoIXF1aWV0ICYmICFiYWNrZ3JkKSB7CQkvKiBQcmludCBpbmZvcm1hdGlvbiBtZXNzYWdlcy4g Ki8KKyNpZmRlZiBWTVMKKwlwcmludGYoIiBcbiIpOworCWZmbHVzaChzdGRvdXQpOworI2VuZGlm IC8qIFZNUyAqLworCWlmIChmYyA9PSAxKQorCSAgcHJpbnRmKCIgV2FpdGluZyBmb3IgcGhvbmUg Y2FsbC4uLlxuIik7CisJZWxzZQorCSAgcHJpbnRmKCIgJXNyeWluZzogJXMuLi5cbiIsIHgxID4g MCA/ICJSZXQiIDogIlQiLCB0ZWxuYnIpOworCWlmICh4MSA9PSAwICYmIHgyID09IDAgJiYgZGlh bHN0YSAhPSBESUFfUEFSVCkgeworCSAgICBpZiAobmV0d29yaykgeworCQlwcmludGYoIiBWaWEg bW9kZW0gc2VydmVyOiAlcywgbW9kZW06ICVzXG4iLAorCQkgICAgICAgdHRuYW1lLCBnbWRtdHlw KCkgKTsKKwkgICAgfSBlbHNlIHsKKyNpZmRlZiBDS19UQVBJCisJCWlmICh0dHRhcGkgJiYgIXRh cGlwYXNzKQorCQkgIHByaW50ZigiIERldmljZTogJXMsIG1vZGVtOiAlcyIsIHR0bmFtZSwgIlRB UEkiICk7CisJCWVsc2UKKyNlbmRpZiAvKiBDS19UQVBJICovCisJCXByaW50ZigiIERldmljZTog JXMsIG1vZGVtOiAlcyIsCisJCSAgICAgICB0dG5hbWUsIGdtZG10eXAoKSApOworCQlpZiAoc3Bl ZWQgPiAtMUwpCisJCSAgcHJpbnRmKCIsIHNwZWVkOiAlbGRcbiIsIHNwZWVkKTsKKwkJZWxzZQor CQkgIHByaW50ZigiLCBzcGVlZDogKHVua25vd24pXG4iKTsKKwkgICAgfQorCSAgICBzcGRtYXgg PSBkaWFsbWF4ID4gMEwgPyBkaWFsbWF4IDogbXAtPm1heF9zcGVlZDsKKworI2lmbmRlZiBOT0hJ TlRTCisJICAgIGlmIChoaW50cyAmJiAhcXVpZXQgJiYKKwkJIW5ldHdvcmsgJiYgc3BkbWF4ID4g MEwgJiYgc3BlZWQgPiBzcGRtYXgKKyNpZmRlZiBDS19UQVBJCisJCSYmICghdHR0YXBpIHx8IHRh cGlwYXNzKQorI2VuZGlmIC8qIENLX1RBUEkgKi8KKwkJKSB7CisJCXByaW50ZigiXG4qKioqKioq KioqKioqKioqKioqKioqKioqXG4iKTsKKwkJcHJpbnRmKAorICAgICJJbnRlcmZhY2Ugc3BlZWQg JWxkIG1pZ2h0IGJlIHRvbyBoaWdoIGZvciB0aGlzIG1vZGVtIHR5cGUuXG4iLAorCQkgICAgICAg c3BlZWQKKwkJICAgICAgICk7CisJCXByaW50ZigKKyAgICAiSWYgZGlhbGluZyBmYWlscywgU0VU IFNQRUVEIHRvICVsZCBvciBsZXNzIGFuZCB0cnkgYWdhaW4uXG4iLAorCQkgICAgICAgc3BkbWF4 CisJCSAgICAgICApOworCQlwcmludGYoIihVc2UgU0VUIEhJTlRTIE9GRiB0byBzdXBwcmVzcyBm dXR1cmUgaGludHMuKVxuIik7CisJCXByaW50ZigiKioqKioqKioqKioqKioqKioqKioqKioqKlxu Iik7CisJCXByaW50ZigiXG4iKTsKKwkgICAgfQorI2VuZGlmIC8qIE5PSElOVFMgKi8KKwkgICAg cHJpbnRmKCIgJXMgdGltZW91dDogIiwgZmMgPT0gMCA/ICJEaWFsIiA6ICJBbnN3ZXIiKTsKKwkg ICAgaWYgKHdhaXRjdCA+IDApCisJICAgICAgcHJpbnRmKCIlZCBzZWNvbmRzXG4iLG1kbXdhaXQp OworCSAgICBlbHNlCisJICAgICAgcHJpbnRmKCIgKG5vbmUpXG4iKTsKKwkgICAgcHJpbnRmKAor I2lmZGVmIE1BQworCSAgICAgICAiIFR5cGUgQ29tbWFuZC0uIHRvIGNhbmNlbC5cbiIKKyNlbHNl CisjaWZkZWYgVU5JWAorCSAgICAgICAiIFRvIGNhbmNlbDogdHlwZSB5b3VyIGludGVycnVwdCBj aGFyYWN0ZXIgKG5vcm1hbGx5IEN0cmwtQykuXG4iCisjZWxzZQorCSAgICAgICAiIFRvIGNhbmNl bDogdHlwZSBDdHJsLUMgKGhvbGQgZG93biBDdHJsLCBwcmVzcyBDKS5cbiIKKyNlbmRpZiAvKiBV TklYICovCisjZW5kaWYgLyogTUFDICovCisJICAgICAgICk7CisgICAgICAgIH0KKyAgICB9Cisg ICAgZGVidWcoRjExMSwiY2tkaWFsIix0dG5hbWUsKGludCkgKHNwZWVkIC8gMTBMKSk7CisgICAg ZGVidWcoRjEwMSwiY2tkaWFsIHRpbWVvdXQiLCIiLHdhaXRjdCk7CisjaWZkZWYgT1MyCisgICAg dGVybV9pbyA9IDA7CisjZW5kaWYgLyogT1MyICovCisKKy8qIFNldCB0aW1lciBhbmQgaW50ZXJy dXB0IGhhbmRsZXJzLiAqLworICAgIHNhdmludCA9IHNpZ25hbCggU0lHSU5ULCBkaWFsaW50ICkg OyAvKiBBbmQgdGVybWluYWwgaW50ZXJydXB0IGhhbmRsZXIuICovCisgICAgY2NfYWxybV9leGVj dXRlKGNramFkZHIoc2pidWYpLCAwLCBkaWFsdGltZSwgX2RvZGlhbCwgZmFpbGRpYWwpOworCisg ICAgc2lnbmFsKFNJR0lOVCwgc2F2aW50KTsKKyNpZmRlZiBPUzIKKyAgICBpZiAoZGlhbHN0YSA9 PSBESUFfT0spCQkvKiBEaWFsaW5nIGlzIGNvbXBsZXRlZCAqLworICAgICAgRGlhbGVyU2VuZChP UFRfS0VSTUlUX0NPTk5FQ1QsIDApOworICAgIHRlcm1faW8gPSB0ZXJtX2lvX3NhdjsKKyNlbmRp ZiAvKiBPUzIgKi8KKyAgICBpZiAoZGlhbHN0YSA9PSBESUFfUEFSVCB8fCBkaWFsc3RhID09IERJ QV9PSykgeworCS8qIFRoaXMgaXMgbmVlZGVkLCBlLmcuLCBmb3IgVGVsbmV0IG1vZGVtIHNlcnZl cnMgKi8KKwlpZiAocmVsaWFibGUgIT0gU0VUX09GRiB8fCAhc2V0cmVsaWFibGUpIHsKKwkgICAg cmVsaWFibGUgPSBTRVRfT0ZGOwkJLyogVHJhbnNwb3J0IGlzIG5vdCByZWxpYWJsZSAqLworCSAg ICBkZWJ1ZyhGMTAxLCJja2RpYWwgcmVsaWFibGUiLCIiLHJlbGlhYmxlKTsKKwl9CisJcmV0dXJu KDEpOwkJCS8qIERpYWwgYXR0ZW1wdCBzdWNjZWVkZWQgKi8KKyAgICB9IGVsc2UgeworCXJldHVy bigwKTsJCQkvKiBEaWFsIGF0dGVtcHQgZmFpbGVkICovCisgICAgfQorfSAvKiBja2RpYWwgKi8K KworLyoKKyAgZ2V0b2soKSAtIHdhaXQgdXAgdG8gbiBzZWNvbmRzIGZvciBPSyAoMCkgb3IgRVJS T1IgKDQpIHJlc3BvbnNlIGZyb20gbW9kZW0uCisgIFVzZSB3aXRoIEhheWVzbGlrZSBvciBDQ0lU VCBtb2RlbXMgZm9yIHJlYWRpbmcgdGhlIHJlcGx5IHRvIGEgbm9uZGlhbGluZworICBjb21tYW5k LgorCisgIFNlY29uZCBhcmd1bWVudCBzYXlzIHdoZXRoZXIgdG8gYmUgc3RyaWN0IGFib3V0IG51 bWVyaWMgcmVzdWx0IGNvZGVzLCBpLmUuCisgIHRvIHJlcXVpcmUgdGhleSBiZSBwcmVjZWRlZCBi eSBDUiBvciBlbHNlIGJlIHRoZSBmaXJzdCBjaGFyYWN0ZXIgaW4gdGhlCisgIHJlc3BvbnNlLCBl LmcuIHRvIHByZXZlbnQgdGhlIEFUSDA8Q1I+IGVjaG8gZnJvbSBsb29raW5nIGxpa2UgYSB2YWxp ZAorICByZXNwb25zZS4gIFN0cmljdCA9PSAwIGlzIG5lZWRlZCBmb3IgQVRJIG9uIFRlbGViaXQs IHdoaWNoIGNhbiByZXR1cm4gdGhlCisgIG1vZGVsIG51bWJlciBjb25jYXRlbmF0ZWQgd2l0aCB0 aGUgbnVtZXJpYyByZXNwb25zZSBjb2RlLCBlLmcuICI5NjIwIgorICAoIjk2MiIgaXMgdGhlIG1v ZGVsIG51bWJlciwgIjAiIGlzIHRoZSByZXNwb25zZSBjb2RlKS4gIGdldG9rKCkgUmV0dXJuczoK KworICAgMCBpZiBpdCB0aW1lZCBvdXQsCisgICAxIGlmIGl0IHN1Y2NlZWRlZCwKKyAgLTEgb24g bW9kZW0gY29tbWFuZCwgaS9vLCBvciBvdGhlciBlcnJvci4KKyovCitzdGF0aWMgY2tqbXBidWYg b2tidWY7CisKK3N0YXRpYyBTSUdUWVAKKyNpZmRlZiBDS19BTlNJQworb2t0aW1vKGludCBmb28p CQkJCS8qIEFsYXJtIGhhbmRsZXIgZm9yIGdldG9rKCkuICovCisjZWxzZQorb2t0aW1vKGZvbykg aW50IGZvbzsJCQkvKiBBbGFybSBoYW5kbGVyIGZvciBnZXRvaygpLiAqLworI2VuZGlmIC8qIENL X0FOU0lDICovCisvKiBva3RpbW8gKi8geworCisjaWZkZWYgT1MyCisgICAgYWxhcm0oMCk7Cisg ICAgLyogc2lnbmFsKFNJR0FMUk0sU0lHX0lHTik7ICovCisgICAgZGVidWcoRjEwMCwib2t0aW1v KCkgU0lHQUxSTSBjYXVnaHQgLS0gU0lHX0lHTiBzZXQiLCIiLDApIDsKKyNlbmRpZiAvKiBPUzIg Ki8KKworI2lmZGVmIE9TSwkJCQkvKiBPUy05LCBzZWUgY29tbWVudCBpbiBkaWFsdGltZSgpLiAq LworICAgIHNpZ21hc2soLTEpOworI2VuZGlmIC8qIE9TSyAqLworI2lmZGVmIE5UU0lHCisgICAg aWYgKCBmb28gPT0gU0lHQUxSTSApCisgICAgICBQb3N0QWxhcm1TaWdTZW0oKTsKKyAgICBlbHNl CisgICAgICBQb3N0Q3RybENTZW0oKTsKKyNlbHNlIC8qIE5UU0lHICovCisjaWZkZWYgTlQKKyAg ICBja2xvbmdqbXAoY2tqYWRkcihva2J1ZiksMSk7CisjZWxzZSAvKiBOVCAqLworICAgIGNrbG9u Z2ptcChva2J1ZiwxKTsKKyNlbmRpZiAvKiBOVFNJRyAqLworI2VuZGlmIC8qIE5UICovCisgICAg LyogTk9UUkVBQ0hFRCAqLworICAgIFNJR1JFVFVSTjsKK30KKworc3RhdGljIGludCBva3N0YXR1 cywgb2tuLCBva3N0cmljdDsKKworc3RhdGljIFNJR1RZUAorI2lmZGVmIENLX0FOU0lDCitkb29r KHZvaWQgKiB0aHJlYWRpbmZvKQorI2Vsc2UgLyogQ0tfQU5TSUMgKi8KK2Rvb2sodGhyZWFkaW5m bykgVk9JRCAqIHRocmVhZGluZm8gOworI2VuZGlmIC8qIENLX0FOU0lDICovCisvKiBkb29rICov IHsKKyAgICBDSEFSIGM7CisjaWZkZWYgREVCVUcKKyAgICBjaGFyICogbWRtbXNnID0gIiI7Cisj ZW5kaWYgLyogREVCVUcgKi8KKworICAgIGludCBpLCB4OworI2lmZGVmIElLU0QKKyAgICBleHRl cm4gaW50IGluc2VydmVyOworI2VuZGlmIC8qIElLU0QgKi8KKyNpZmRlZiBOVFNJRworICAgIHNp Z25hbChTSUdJTlQsb2t0aW1vKTsKKyAgICBpZiAodGhyZWFkaW5mbykgewkJCS8qIFRocmVhZCBs b2NhbCBzdG9yYWdlLi4uICovCisJVGxzU2V0VmFsdWUoVGxzSW5kZXgsdGhyZWFkaW5mbyk7Cisg ICAgfQorI2VuZGlmIC8qIE5UU0lHICovCisjaWZkZWYgQ0tfTE9HSU4KKyNpZmRlZiBOVAorI2lm ZGVmIElLU0QKKyAgICBpZiAoaW5zZXJ2ZXIpCisgICAgICBzZXRudGNyZWRzKCk7CisjZW5kaWYg LyogSUtTRCAqLworI2VuZGlmIC8qIE5UICovCisjZW5kaWYgLyogQ0tfTE9HSU4gKi8KKworICAg IGlmIChtZG1jYXBhcyAmIENLRF9WMjUpIHsJCS8qIENDSVRULCBlYXN5Li4uICovCisgICAgICAg IHdhaXRmb3IoIlZBTCIpOworICAgICAgICBva3N0YXR1cyA9IDE7CisJZGVidWcoRjExMSwiTW9k ZW1fUmVzcG9uc2UoVjI1KSIsIlZBTCIsb2tzdGF0dXMpOworI2lmZGVmIE5UU0lHCisJY2tUaHJl YWRFbmQodGhyZWFkaW5mbyk7CisjZW5kaWYgLyogTlRTSUcgKi8KKwlTSUdSRVRVUk47CisjaWZu ZGVmIE1JTklESUFMCisgICAgfSBlbHNlIGlmIChteW1kbXR5cCA9PSBuX01JQ1JPQ09NKSB7IC8q IE1pY3JvY29tIGluIFNYIG1vZGUsIGFsc28gZWFzeSAqLworICAgICAgICB3YWl0Zm9yKE1JQ1JP Q09NLndha2VfcHJvbXB0KTsJLyogKEkgdGhpbmsuLi4pICovCisJZGVidWcoRjExMSwiTW9kZW1f UmVzcG9uc2UoTWljcm9jb20pIixNSUNST0NPTS53YWtlX3Byb21wdCxva3N0YXR1cyk7CisgICAg ICAgIG9rc3RhdHVzID0gMTsKKyNpZmRlZiBOVFNJRworCWNrVGhyZWFkRW5kKHRocmVhZGluZm8p OworI2VuZGlmIC8qIE5UU0lHICovCisJU0lHUkVUVVJOOworI2VuZGlmIC8qIE1JTklESUFMICov CisgICAgfSBlbHNlIHsJCQkJLyogSGF5ZXMgJiBmcmllbmRzLCBzdGFydCBoZXJlLi4uICovCisJ b2tzdGF0dXMgPSAwOwkJCS8qIE5vIHN0YXR1cyB5ZXQuICovCisJZm9yICh4ID0gMDsgeCA8IFJC VUZMOyB4KyspCS8qIEluaXRpYWxpemUgcmVzcG9uc2UgYnVmZmVyICovCisJICByYnVmW3hdID0g U1A7CQkJLyogIHRvIGFsbCBzcGFjZXMgKi8KKwlyYnVmW1JCVUZMXSA9IE5VTDsJCS8qIGFuZCB0 ZXJtaW5hdGUgd2l0aCBOVUwuICovCisJd2hpbGUgKG9rc3RhdHVzID09IDApIHsJCS8qIFdoaWxl IG5vIHN0YXR1cy4uLiAqLworCSAgICB4ID0gZGRpbmMob2tuKTsJCS8qIFJlYWQgYSBjaGFyYWN0 ZXIgKi8KKwkgICAgaWYgKHggPCAwKSB7CQkvKiBJL08gZXJyb3IgKi8KKwkJb2tzdGF0dXMgPSAt MTsKKyNpZmRlZiBOVFNJRworCQlja1RocmVhZEVuZCh0aHJlYWRpbmZvKTsKKyNlbmRpZiAvKiBO VFNJRyAqLworCQlTSUdSRVRVUk47CisJICAgIH0KKyNpZmRlZiBDT01NRU5UCisJICAgIC8qIHRv byBtdWNoICovCisJICAgIGRlYnVnKEYxMDEsImdldG9rIGRkaW5jIiwiIix4KTsgLyogR290IGEg Y2hhcmFjdGVyLiAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKwkgICAgYyA9IChjaGFyKSAoeCAm IDB4N2YpOwkvKiBHZXQgbG93IG9yZGVyIDcgYml0cyAqLworCSAgICBpZiAoIWMpCQkJLyogRG9u J3QgZGVwb3NpdCBOVUxzICovCisJICAgICAgY29udGludWU7CQkJLyogb3IgZWxzZSBkaWR3ZWdl dCgpIHdvbid0IHdvcmsgKi8KKwkgICAgaWYgKGRpYWxkcHkpIGNvbm9jKChjaGFyKWMpOyAvKiBF Y2hvIGl0IGlmIHJlcXVlc3RlZCAqLworCSAgICBmb3IgKGkgPSAwOyBpIDwgUkJVRkwtMTsgaSsr KSAvKiBSb3RhdGUgYnVmZmVyICovCisJICAgICAgcmJ1ZltpXSA9IHJidWZbaSsxXTsKKwkgICAg cmJ1ZltSQlVGTC0xXSA9IGM7CQkvKiBEZXBvc2l0IGNoYXJhY3RlciBhdCBlbmQgKi8KKyNpZmRl ZiBDT01NRU5UCisJICAgIC8qIHRvbyBtdWNoICovCisJICAgIGRlYnVnKEYwMDAsImdldG9rOiIs cmJ1ZiwoaW50KSBjKTsgLyogTG9nIGl0ICovCisjZW5kaWYgLyogQ09NTUVOVCAqLworCSAgICBz d2l0Y2ggKGMpIHsJCS8qIEludGVycHJldCBpdC4gKi8KKwkgICAgICBjYXNlIENSOgkJCS8qIEdv dCBhIGNhcnJpYWdlIHJldHVybi4gKi8KKwkJc3dpdGNoKHJidWZbUkJVRkwtMl0pIHsJLyogTG9v ayBhdCBjaGFyYWN0ZXIgYmVmb3JlIGl0LiAqLworCQkgIGNhc2UgJzAnOgkJLyogMCA9IE9LIG51 bWVyaWMgcmVzcG9uc2UgKi8KKwkJICAgIGlmICghb2tzdHJpY3QgfHwKKwkJCXJidWZbUkJVRkwt M10gPT0gQ1IgfHwgcmJ1ZltSQlVGTC0zXSA9PSBTUCkgeworCQkJbm9udmVyYmFsID0gMTsKKwkJ CW9rc3RhdHVzID0gMTsJLyogR29vZCByZXNwb25zZSAqLworCQkgICAgfQorCQkgICAgZGVidWco RjExMSwiTW9kZW1fUmVzcG9uc2UoSGF5ZXMpIiwiMCIsb2tzdGF0dXMpOworCQkgICAgYnJlYWs7 CisJCSAgY2FzZSAnNCc6CQkvKiA0ID0gRVJST1IgbnVtZXJpYyByZXNwb25zZSAqLworI2lmbmRl ZiBNSU5JRElBTAorCQkgICAgLyogT3IgVGVsZWJpdCBtb2RlbCBudW1iZXIgOTY0ISAqLworCQkg ICAgaWYgKG15bWRtdHlwID09IG5fVEVMRUJJVCAmJgorCQkJaXNkaWdpdChyYnVmW1JCVUZMLTNd KSAmJgorCQkJaXNkaWdpdChyYnVmW1JCVUZMLTRdKSkKKwkJICAgICAgYnJlYWs7CisJCSAgICBl bHNlCisjZW5kaWYgLyogTUlOSURJQUwgKi8KKwkJICAgICAgaWYgKCFva3N0cmljdCB8fAorCQkJ cmJ1ZltSQlVGTC0zXSA9PSBDUiB8fCByYnVmW1JCVUZMLTNdID09IFNQKSB7CisJCQlub252ZXJi YWwgPSAxOworCQkJb2tzdGF0dXMgPSAtMTsJLyogQmFkIGNvbW1hbmQgKi8KKwkJICAgIH0KKwkJ ICAgIGRlYnVnKEYxMTEsIk1vZGVtX1Jlc3BvbnNlKEhheWVzKSIsIjQiLG9rc3RhdHVzKTsKKwkJ ICAgIGJyZWFrOworCQl9CisJCWlmIChkaWFsZHB5ICYmIG5vbnZlcmJhbCkgLyogSWYgbnVtZXJp YyByZXN1bHRzLCAqLworCQkgIGNvbm9jKExGKTsJCSAgLyogZWNobyBhIGxpbmVmZWVkIHRvby4g Ki8KKwkJYnJlYWs7CisJICAgICAgY2FzZSBMRjoJCQkvKiBHb3QgYSBsaW5lZmVlZC4gKi8KKwkJ LyoKKwkJICBOb3RlIHVzZSBvZiBleHBsaWNpdCBvY3RhbCBjb2RlcyBpbiB0aGUgc3RyaW5nIGZv cgorCQkgIENSIGFuZCBMRi4gIFdlIHdhbnQgcmVhbCBDUiBhbmQgTEYgaGVyZSwgbm90IHdoYXRl dmVyCisJCSAgdGhlIGNvbXBpbGVyIGhhcHBlbnMgdG8gcmVwbGFjZSBcciBhbmQgXG4gd2l0aC4u LgorCQkqLworCQlpZiAoIXN0cmNtcChyYnVmK1JCVUZMLTQsIk9LXDAxNVwwMTIiKSkgeyAvKiBH b29kIHJlc3BvbnNlICovCisJCSAgICBva3N0YXR1cyA9IDE7CisJCSAgICBkZWJ1ZyhGMTExLCJN b2RlbV9SZXNwb25zZShIYXllcykiLCJPSyIsb2tzdGF0dXMpOworCQl9CisJCWlmICghc3RyY21w KHJidWYrUkJVRkwtMywiT0tcMDEyIikpIHsgLyogR29vZCByZXNwb25zZSAqLworCQkgICAgb2tz dGF0dXMgPSAxOworCQkgICAgZGVidWcoRjExMSwiTW9kZW1fUmVzcG9uc2UoSGF5ZXMpIiwiT0si LG9rc3RhdHVzKTsKKwkJfSBlbHNlIGlmICghc3RyY21wKHJidWYrUkJVRkwtNywiRVJST1JcMDE1 XDAxMiIpKSB7IC8qIEVycm9yICovCisJCSAgICBva3N0YXR1cyA9IC0xOworCQkgICAgZGVidWco RjExMSwiTW9kZW1fUmVzcG9uc2UoSGF5ZXMpIiwiRVJST1IiLG9rc3RhdHVzKTsKKwkJfSBlbHNl IGlmICghc3RyY21wKHJidWYrUkJVRkwtNiwiRVJST1JcMDEyIikpIHsgLyogRXJyb3IgKi8KKwkJ ICAgIG9rc3RhdHVzID0gLTE7CisJCSAgICBkZWJ1ZyhGMTExLCJNb2RlbV9SZXNwb25zZShIYXll cykiLCJFUlJPUiIsb2tzdGF0dXMpOworCQl9CisJCWJyZWFrOworCSAgICAgIC8qIENoZWNrIHdo ZXRoZXIgbW9kZW0gZWNob2VzIGl0cyBjb21tYW5kcy4uLiAqLworCSAgICAgIGNhc2UgJ3QnOgkJ CS8qIEdvdCBsaXR0bGUgdCAqLworCQlpZiAoIXN0cmNtcChyYnVmK1JCVUZMLTMsIlwwMTVhdCIp IHx8IC8qIFNlZSBpZiBpdCdzICJhdCIgKi8KKwkJICAgICFzdHJjbXAocmJ1ZitSQlVGTC0zLCIg YXQiKSkKKwkJICAgIG1kbWVjaG8gPSAxOworCQkvKiBkZWJ1ZyhGMTExLCJNRE1FQ0hPLXQiLHJi dWYrUkJVRkwtMixtZG1lY2hvKTsgKi8KKwkJYnJlYWs7CisJICAgICAgY2FzZSAnVCc6CQkJLyog R290IEJpZyBUICovCisJCWlmICghc3RyY21wKHJidWYrUkJVRkwtMywiXDAxNUFUIikgfHwJLyog U2VlIGlmIGl0J3MgIkFUIiAqLworCQkgICAgIXN0cmNtcChyYnVmK1JCVUZMLTMsIiBBVCIpKQor CQkgICAgbWRtZWNobyA9IDE7CisJCS8qIGRlYnVnKEYxMTEsIk1ETUVDSE8tVCIscmJ1ZitSQlVG TC0zLG1kbWVjaG8pOyAqLworCQlicmVhazsKKwkgICAgICBkZWZhdWx0OgkJCS8qIE90aGVyIGNo YXJhY3RlcnMsIGFjY3VtdWxhdGUuICovCisJCW9rc3RhdHVzID0gMDsKKwkJYnJlYWs7CisJICAg IH0KKwl9CisgICAgfQorICAgIGRlYnVnKEYxMDEsImdldG9rIiwiIixva3N0YXR1cyk7CS8qIDwt LSBJdCdzIGEgbGllICh3aHk/KSAqLworI2lmZGVmIE5UU0lHCisgICAgY2tUaHJlYWRFbmQodGhy ZWFkaW5mbyk7CisjZW5kaWYgLyogTlRTSUcgKi8KKyAgICBTSUdSRVRVUk47Cit9CisKK3N0YXRp YyBTSUdUWVAKKyNpZmRlZiBDS19BTlNJQworZmFpbG9rKHZvaWQgKiB0aHJlYWRpbmZvKQorI2Vs c2UgLyogQ0tfQU5TSUMgKi8KK2ZhaWxvayh0aHJlYWRpbmZvKSBWT0lEICogdGhyZWFkaW5mbzsK KyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogZmFpbG9rICovIHsKKyAgICBkZWJ1ZyhGMTAwLCJs b25nam1wIHJldHVybmVkIHRvIGdldG9rKCkiLCIiLDApOworICAgIGRlYnVnKEYxMDAsImdldG9r IHRpbWVvdXQiLCIiLDApOworICAgIFNJR1JFVFVSTjsKK30KKworaW50CitnZXRvayhuLCBzdHJp Y3QpIGludCBuLCBzdHJpY3Q7IHsKKyAgICBkZWJ1ZyhGMTAxLCJnZXRvayBlbnRyeSBuIiwiIixu KTsKKyAgICBva3N0YXR1cyA9IDA7CisgICAgb2tuID0gbjsKKyAgICBva3N0cmljdCA9IHN0cmlj dDsKKworI2lmZGVmIERZTkFNSUMKKyAgICBpZiAoIXJidWYpIHsKKwlpZiAoIShyYnVmID0gbWFs bG9jKFJCVUZMKzEpKSkgeyAvKiBBbGxvY2F0ZSBpbnB1dCBsaW5lIGJ1ZmZlciAqLworCSAgICBk aWFsc3RhID0gRElBX0lFOworCSAgICByZXR1cm4oLTEpOworCX0KKwlkZWJ1ZyhGMTAxLCJHRVRP SyByYnVmIG1hbGxvYyBvayIsIiIsUkJVRkwrMSk7CisgICAgfQorI2VuZGlmIC8qIERZTkFNSUMg Ki8KKworICAgIG1kbWVjaG8gPSAwOwkJCS8qIEFzc3VtZSBubyBlY2hvaW5nIG9mIGNvbW1hbmRz ICovCisKKyAgICBkZWJ1ZyhGMTAwLCJhYm91dCB0byBhbHJtX2V4ZWN1dGUgZG9vaygpIiwiIiww KTsKKyAgICBhbHJtX2V4ZWN1dGUoIGNramFkZHIob2tidWYpLCBuLCBva3RpbW8sIGRvb2ssIGZh aWxvayApIDsKKyAgICBkZWJ1ZyhGMTAwLCJyZXR1cm5pbmcgZnJvbSBhbHJtX2V4ZWN1dGUgZG9v aygpIiwiIiwwKTsKKworICAgIHR0Zmx1aSgpOwkJCQkvKiBGbHVzaCBpbnB1dCBidWZmZXIgKi8K KyAgICByZXR1cm4ob2tzdGF0dXMpOwkJCS8qIFJldHVybiBzdGF0dXMgKi8KK30KKworLyogIEcg RSBUIEggUiBOICAtLSAgR2V0IEhheWVzIFJlc3VsdCBOdW1lcmljICAqLworCitzdGF0aWMgVk9J RAorZ2V0aHJuKCkgeworICAgIGNoYXIgYzsKKyAgICBpbnQgeDsKKy8qCisgIEhheWVzIG51bWVy aWMgcmVzdWx0IGNvZGVzIChIYXllcyAxMjAwIGFuZCBoaWdoZXIpOgorICAgICAwID0gT0sKKyAg ICAgMSA9IENPTk5FQ1QgYXQgMzAwIGJwcyAob3IgMTIwMCBicHMgb24gSGF5ZXMgMTIwMCB3aXRo IGJhc2ljIGNvZGUgc2V0KQorICAgICAyID0gUklORworICAgICAzID0gTk8gQ0FSUklFUgorICAg ICA0ID0gRVJST1IgKGluIGNvbW1hbmQgbGluZSkKKyAgICAgNSA9IENPTk5FQ1QgMTIwMCAoZXh0 ZW5kZWQgY29kZSBzZXQpCisgIEhheWVzIDI0MDAgYW5kIGhpZ2hlcjoKKyAgICAgNiA9IE5PIERJ QUxUT05FCisgICAgIDcgPSBCVVNZCisgICAgIDggPSBOTyBBTlNXRVIKKyAgICAgOSA9ICh0aGVy ZSBpcyBubyA5KQorICAgIDEwID0gQ09OTkVDVCAyNDAwCisgIFJlcG9ydGVkbHksIHRoZSBjb2Rl cyBmb3IgSGF5ZXMgVi4zMiBtb2RlbXMgYXJlOgorICAgIDF4ID0gQ09OTkVDVCA8c3VmZml4Pgor ICAgIDV4ID0gQ09OTkVDVCAxMjAwIDxzdWZmaXg+CisgICAgOXggPSBDT05ORUNUIDI0MDAgPHN1 ZmZpeD4KKyAgIDExeCA9IENPTk5FQ1QgNDgwMCA8c3VmZml4PgorICAgMTJ4ID0gQ09OTkVDVCA5 NjAwIDxzdWZmaXg+CisgIFdoZXJlOgorICAgIHg6ICAgc3VmZml4OgorICAgIFIgID0gUkVMSUFC TEUKKyAgICBSQyA9IFJFTElBQkxFIENPTVBSRVNTRUQKKyAgICBMICA9IExBUE0KKyAgICBMQyA9 IExBUE0gQ09NUFJFU1NFRAorICBBbmQgZm9yIFRlbGViaXRzLCBhbGwgdGhlIGFib3ZlLCBleGNl cHQgbm8gc3VmZml4IGluIG51bWVyaWMgbW9kZSwgcGx1czoKKyAgICAxMSA9IENPTk5FQ1QgNDgw MAorICAgIDEyID0gQ09OTkVDVCA5NjAwCisgICAgMTMgPSBDT05ORUNUIDE0NDAwCisgICAgMTQg PSBDT05ORUNUIDE5MjAwCisgICAgMTUgPSBDT05ORUNUIDM4NDAwCisgICAgMTYgPSBDT05ORUNU IDU3NjAwCisgICAgMjAgPSBDT05ORUNUIDMwMC9SRUwgICg9IE1OUCkKKyAgICAyMiA9IENPTk5F Q1QgMTIwMC9SRUwgKD0gTU5QKQorICAgIDIzID0gQ09OTkVDVCAyNDAwL1JFTCAoPSBNTlApCisg ICAgNDYgPSBDT05ORUNUIDc1MTIgIChpLmUuIDc1LzEyMDApCisgICAgNDcgPSBDT05ORUNUIDEy NzUgIChpLmUuIDEyMDAvNzUpCisgICAgNDggPSBDT05ORUNUIDcyMDAKKyAgICA0OSA9IENPTk5F Q1QgMTIwMDAKKyAgICA1MCA9IENPTk5FQ1QgRkFTVCAobm90IG9uIFQxNjAwLzMwMDApCisgICAg NTIgPSBSUklORworICAgIDUzID0gRElBTElORworICAgIDU0ID0gTk8gUFJPTVBUVE9ORQorICAg IDYxID0gQ09OTkVDVCBGQVNUL0tFUk0gKEtlcm1pdCBzcG9vZikKKyAgICA3MCA9IENPTk5FQ1Qg RkFTVC9DT01QIChQRVAgKyBjb21wcmVzc2lvbikKKyAgICA3MSA9IENPTk5FQ1QgRkFTVC9LRVJN L0NPTVAgKFBFUCArIGNvbXByZXNzaW9uICsgS2VybWl0IHNwb29mKQorCisgIEFuZCBmb3Igb3Ro ZXJzLCBsb3RzIG9mIHNwZWNpYWwgY2FzZXMgYmVsb3cuLi4KKyovCisjZGVmaW5lIE5CVUZMIDgK KyAgICBjaGFyIG5idWZbTkJVRkwrMV07CQkJLyogUmVzcG9uc2UgYnVmZmVyICovCisgICAgaW50 IGkgPSAwLCBqID0gMDsJCQkvKiBCdWZmZXIgcG9pbnRlcnMgKi8KKworICAgIGRlYnVnKEYxMDEs IlJFU1BPTlNFIG1kbWVjaG8iLCIiLG1kbWVjaG8pOworICAgIGlmIChtZG1lY2hvKSB7CQkJLyog U3BvbmdlIHVwIGRpYWxpbmcgc3RyaW5nIGVjaG8uICovCisJd2hpbGUgKDEpIHsKKwkgICAgYyA9 IChjaGFyKSAoZGRpbmMoMCkgJiAweDdmKTsKKwkgICAgZGVidWcoRjAwMCwiU1BPTkdFIiwiIixj KTsKKwkgICAgZGlhbG9jKGMpOworCSAgICBpZiAoYyA9PSBDUikgYnJlYWs7CisJfQorICAgIH0K KyAgICB3aGlsZSAobWRtc3RhdCA9PSAwKSB7CQkvKiBSZWFkIHJlc3BvbnNlICovCisJZm9yIChp ID0gMDsgaSA8IE5CVUZMOyBpKyspCS8qIENsZWFyIHRoZSBidWZmZXIgKi8KKwkgIG5idWZbaV0g PSAnXDAnOworCWkgPSAwOwkJCQkvKiBSZXNldCB0aGUgYnVmZmVyIHBvaW50ZXIuICovCisJYyA9 IChjaGFyKSAoZGRpbmMoMCkgJiAwMTc3KTsJLyogR2V0IGZpcnN0IGRpZ2l0IG9mIHJlc3BvbnNl LiAqLworCQkJCQkvKiB1c2luZyBhbiB1bnRpbWVkLCBibG9ja2luZyByZWFkLiAqLworCWRlYnVn KEYwMDAsIlJFU1BPTlNFLUEiLCIiLGMpOworCWRpYWxvYyhjKTsJCQkvKiBFY2hvIGl0IGlmIHJl cXVlc3RlZC4gKi8KKwlpZiAoIWlzZGlnaXQoYykpCQkvKiBJZiBub3QgYSBkaWdpdCwga2VlcCBs b29raW5nLiAqLworCSAgY29udGludWU7CisJbmJ1ZltpKytdID0gYzsJCQkvKiBHb3QgZmlyc3Qg ZGlnaXQsIHNhdmUgaXQuICovCisJd2hpbGUgKGMgIT0gQ1IgJiYgaSA8IDgpIHsJLyogUmVhZCBj aGFycyB1cCB0byBDUiAqLworCSAgICB4ID0gZGRpbmMoMCkgJiAwMTc3OwkvKiBHZXQgYSBjaGFy YWN0ZXIuICovCisJICAgIGMgPSAoY2hhcikgeDsJCS8qIEdvdCBpdCBPSy4gKi8KKwkgICAgZGVi dWcoRjAwMCwiUkVTUE9OU0UtQyIsIiIsYyk7CisJICAgIGlmIChjICE9IENSKQkJLyogSWYgaXQn cyBub3QgYSBjYXJyaWFnZSByZXR1cm4sICovCisJICAgICAgbmJ1ZltpKytdID0gYzsJCS8qICBz YXZlIGl0LiAqLworCSAgICBkaWFsb2MoYyk7CQkJLyogRWNobyBpdC4gKi8KKwl9CisJbmJ1Zltp XSA9ICdcMCc7CQkJLyogRG9uZSwgdGVybWluYXRlIHRoZSBidWZmZXIuICovCisJZGVidWcoRjEx MCwiZGlhbCBoYXllc252IGxidWYiLGxidWYsMCk7CisJZGVidWcoRjExMSwiZGlhbCBoYXllc252 IGdvdCIsbmJ1ZixpKTsKKwkvKgorCSAgIFNlcGFyYXRlIGFueSBub24tbnVtZXJpYyBzdWZmaXgg ZnJvbSB0aGUgbnVtZXJpYworCSAgIHJlc3VsdCBjb2RlIHdpdGggYSBudWxsLgorCSovCisJZm9y IChqID0gaS0xOyAoaiA+IC0xKSAmJiAhaXNkaWdpdChuYnVmW2pdKTsgai0tKQorCSAgbmJ1Zltq KzFdID0gbmJ1ZltqXTsKKwlqKys7CisJbmJ1ZltqKytdID0gJ1wwJzsKKwlkZWJ1ZyhGMTEwLCJk aWFsIGhheWVzbnYgbnVtZXJpYyIsbmJ1ZiwwKTsKKwlkZWJ1ZyhGMTExLCJkaWFsIGhheWVzbnYg c3VmZml4ICIsbmJ1ZitqLGopOworCS8qIFByb2JhYmx5IHBob25lIG51bWJlciBlY2hvaW5nLiAq LworCWlmICgoaW50KXN0cmxlbihuYnVmKSA+IDMpCisJICBjb250aW51ZTsKKworCS8qIE5vdyBy ZWFkIGFuZCBpbnRlcnByZXQgdGhlIHJlc3VsdHMuLi4gKi8KKworCWkgPSBhdG9pKG5idWYpOwkv KiBDb252ZXJ0IHRvIGludGVnZXIgKi8KKwlzd2l0Y2ggKGkpIHsKKwkgIGNhc2UgMDoKKwkgICAg bWRtc3RhdCA9IERfUEFSVElBTDsJLyogT0sgcmVzcG9uc2UgKi8KKwkgICAgYnJlYWs7CisJICBj YXNlIDE6CQkJLyogQ09OTkVDVCAqLworCSAgICBtZG1zdGF0ID0gQ09OTkVDVEVEOwkvKiBDb3Vs ZCBiZSBhbnkgc3BlZWQgKi8KKwkgICAgYnJlYWs7CisJICBjYXNlIDI6CQkJLyogUklORyAqLwor CSAgICBpZiAoZGlhbGRweSkKKwkgICAgICBwcmludGYoIlxyXG4gTG9jYWwgcGhvbmUgaXMgcmlu Z2luZyFcclxuIik7CisJICAgIG1kbXN0YXQgPSBEX0ZBSUxFRDsKKwkgICAgZGlhbHN0YSA9IERJ QV9SSU5HOworCSAgICBicmVhazsKKwkgIGNhc2UgMzoJCQkvKiBOTyBDQVJSSUVSICovCisJICAg IGlmIChkaWFsZHB5KSBwcmludGYoIlxyXG4gTm8gQ2Fycmllci5cclxuIik7CisJICAgIG1kbXN0 YXQgPSBEX0ZBSUxFRDsKKwkgICAgZGlhbHN0YSA9IERJQV9OT0NBOworCSAgICBicmVhazsKKwkg IGNhc2UgNDoJCQkvKiBFUlJPUiAqLworCSAgICBpZiAoZGlhbGRweSkKKwkgICAgICBwcmludGYo IlxyXG4gTW9kZW0gQ29tbWFuZCBFcnJvci5cclxuIik7CisJICAgIG1kbXN0YXQgPSBEX0ZBSUxF RDsKKwkgICAgZGlhbHN0YSA9IERJQV9FUlI7CisJICAgIGJyZWFrOworCSAgY2FzZSA1OgkJCS8q IENPTk5FQ1QgMTIwMCAqLworCSAgICBzcGRjaGcoMTIwMEwpOyAvKiBDaGFuZ2Ugc3BlZWQgaWYg bmVjZXNzYXJ5LiAqLworCSAgICBtZG1zdGF0ID0gQ09OTkVDVEVEOworCSAgICBicmVhazsKKwkg IGNhc2UgNjoJCQkvKiBOTyBESUFMVE9ORSAqLworI2lmbmRlZiBNSU5JRElBTAorCSAgICBpZiAo bXltZG10eXAgPT0gbl9NSUNST0xJTksgJiYgYXRvaShkaWFsbGNjKSA9PSA0OSAmJiBkaWFsZHB5 KQorCSAgICAgIHByaW50ZigiXHJcbiBEaWFsIExvY2tlZC5cclxuIik7IC8qIEdlcm1hbnkgKi8K KwkgICAgZWxzZQorI2VuZGlmIC8qIE1JTklESUFMICovCisJICAgICAgaWYgKGRpYWxkcHkpCisJ CXByaW50ZigiXHJcbiBObyBEaWFsdG9uZS5cclxuIik7CisJICAgIG1kbXN0YXQgPSBEX0ZBSUxF RDsKKwkgICAgZGlhbHN0YSA9IERJQV9OT0RUOworCSAgICBicmVhazsKKwkgIGNhc2UgNzoJCQkv KiBCVVNZICovCisJICAgIGlmIChkaWFsZHB5KSBwcmludGYoIlxyXG4gQnVzeS5cclxuIik7CisJ ICAgIG1kbXN0YXQgPSBEX0ZBSUxFRDsKKwkgICAgZGlhbHN0YSA9IERJQV9CVVNZOworCSAgICBi cmVhazsKKwkgIGNhc2UgODoJCQkvKiBOTyBBTlNXRVIgKi8KKyNpZm5kZWYgTUlOSURJQUwKKwkg ICAgaWYgKG15bWRtdHlwID09IG5fTUlDUk9MSU5LICYmIGF0b2koZGlhbGxjYykgPT0gNDEgJiYg ZGlhbGRweSkKKwkgICAgICBwcmludGYoIlxyXG4gRGlhbCBMb2NrZWQuXHJcbiIpOyAvKiBTd2l0 emVybGFuZCAqLworCSAgICBlbHNlCisjZW5kaWYgLyogTUlOSURJQUwgKi8KKwkgICAgICBpZiAo ZGlhbGRweSkKKwkJcHJpbnRmKCJcclxuIE5vIEFuc3dlci5cclxuIik7CisJICAgIG1kbXN0YXQg PSBEX0ZBSUxFRDsKKwkgICAgZGlhbHN0YSA9IERJQV9OT0FOOworCSAgICBicmVhazsKKworCSAg Y2FzZSA5OgorI2lmbmRlZiBNSU5JRElBTAorCSAgICBpZiAobXltZG10eXAgPT0gbl9YSkFDSyB8 fCBteW1kbXR5cCA9PSBuX1NVUFJBWCkgeworCQlzcGRjaGcoNjAwKTsKKwkJYnJlYWs7CisJICAg IH0gLyogZmFsbCB0aHJ1ICovCisjZW5kaWYgLyogTUlOSURJQUwgKi8KKwkgIGNhc2UgMTA6CQkJ LyogQ09OTkVDVCAyNDAwICovCisJICAgIHNwZGNoZygyNDAwTCk7CQkvKiBDaGFuZ2Ugc3BlZWQg aWYgbmVjZXNzYXJ5LiAqLworCSAgICBtZG1zdGF0ID0gQ09OTkVDVEVEOworCSAgICBicmVhazsK KworI2lmbmRlZiBNSU5JRElBTAorCisvKiBTdGFydGluZyBoZXJlLCB3ZSBnZXQgZGlmZmVyZW50 IG1lYW5pbmdzIGZyb20gZGlmZmVyZW50IG1hbnVmYWN0dXJlcnMgKi8KKworCSAgY2FzZSAxMToK KwkgICAgaWYgKG15bWRtdHlwID09IG5fVVNSKSB7CisJCWlmIChkaWFsZHB5KSBwcmludGYoIiBS aW5naW5nLi4uXHJcbiIpOworCSAgICB9IGVsc2UgeworCQlzcGRjaGcoNDgwMEwpOwkJLyogQ09O TkVDVCA0ODAwICovCisJCW1kbXN0YXQgPSBDT05ORUNURUQ7CisJICAgIH0KKwkgICAgYnJlYWs7 CisJICBjYXNlIDEyOgorCSAgICBpZiAobXltZG10eXAgPT0gbl9VU1IpIHsKKwkJaWYgKGRpYWxk cHkpCisJCSAgcHJpbnRmKCJcclxuIEFuc3dlcmVkIGJ5IHZvaWNlLlxyXG4iKTsKKwkJbWRtc3Rh dCA9IERfRkFJTEVEOworCQlkaWFsc3RhID0gRElBX1ZPSUM7CisJICAgIH0gZWxzZSBpZiAobXlt ZG10eXAgPT0gbl9LRUVQSU5UT1VDSCkgeworCQlzcGRjaGcoNzIwMEwpOworCQltZG1zdGF0ID0g Q09OTkVDVEVEOworCSAgICB9IGVsc2UgeworCQlzcGRjaGcoOTYwMEwpOworCQltZG1zdGF0ID0g Q09OTkVDVEVEOworCSAgICB9CisJICAgIGJyZWFrOworCSAgY2FzZSAxMzoKKwkgICAgaWYgKG15 bWRtdHlwID09IG5fQVRUMTkwMCB8fCBteW1kbXR5cCA9PSBuX0FUVDE5MTApIHsKKwkJaWYgKGRp YWxkcHkpIHByaW50ZigiIFdhaXQuLi5cclxuIik7CisJCWJyZWFrOworCSAgICB9IGVsc2UgaWYg KG15bWRtdHlwID09IG5fVVNSIHx8IG15bWRtdHlwID09IG5fVVNSWDIpCisJICAgICAgc3BkY2hn KDk2MDBMKTsKKwkgICAgZWxzZSBpZiAoaXNfcm9ja3dlbGwgfHwgaXNfc3VwcmEgfHwKKwkJbXlt ZG10eXAgPT0gbl9aT0xUUklYIHx8IG15bWRtdHlwID09IG5fWEpBQ0spCisJICAgICAgc3BkY2hn KDcyMDBMKTsKKwkgICAgZWxzZSBpZiAobXltZG10eXAgIT0gbl9NSUNST0xJTkspCisJICAgICAg c3BkY2hnKDE0NDAwTCk7CisJICAgIG1kbXN0YXQgPSBDT05ORUNURUQ7CisJICAgIGJyZWFrOwor CSAgY2FzZSAxNDoKKwkgICAgaWYgKGlzX3JvY2t3ZWxsIHx8IGlzX3N1cHJhIHx8IG15bWRtdHlw ID09IG5fWEpBQ0spCisJICAgICAgc3BkY2hnKDEyMDAwTCk7CisJICAgIGVsc2UgaWYgKG15bWRt dHlwID09IG5fREFUQVBPUlQgfHwgbXltZG10eXAgPT0gbl9NSUNST0xJTkspCisJICAgICAgc3Bk Y2hnKDE0NDAwTCk7CisJICAgIGVsc2UgaWYgKG15bWRtdHlwID09IG5fS0VFUElOVE9VQ0gpCisJ ICAgICAgc3BkY2hnKDk2MDBMKTsKKwkgICAgZWxzZSBpZiAobXltZG10eXAgIT0gbl9VU1IgJiYg bXltZG10eXAgIT0gbl9aT0xUUklYKQorCSAgICAgIHNwZGNoZygxOTIwMEwpOworCSAgICBtZG1z dGF0ID0gQ09OTkVDVEVEOworCSAgICBicmVhazsKKwkgIGNhc2UgMTU6CisJICAgIGlmIChpc19y b2Nrd2VsbCB8fCBpc19zdXByYSB8fAorCQlteW1kbXR5cCA9PSBuX1pPTFRSSVggfHwgbXltZG10 eXAgPT0gbl9YSkFDSykKKwkgICAgICBzcGRjaGcoMTQ0MDBMKTsKKwkgICAgZWxzZSBpZiAobXlt ZG10eXAgPT0gbl9VU1IpCisJICAgICAgc3BkY2hnKDEyMDBMKTsKKwkgICAgZWxzZSBpZiAobXlt ZG10eXAgPT0gbl9aWVhFTCB8fCBteW1kbXR5cCA9PSBuX0lOVEVMKQorCSAgICAgIHNwZGNoZyg3 MjAwTCk7CisJICAgIGVsc2UgaWYgKG15bWRtdHlwID09IG5fREFUQVBPUlQpCisJICAgICAgc3Bk Y2hnKDE5MjAwTCk7CisJICAgIGVsc2UKKwkgICAgICBzcGRjaGcoMzg0MDBMKTsKKwkgICAgbWRt c3RhdCA9IENPTk5FQ1RFRDsKKwkgICAgYnJlYWs7CisJICBjYXNlIDE2OgorCSAgICBpZiAoaXNf cm9ja3dlbGwgfHwgaXNfc3VwcmEgfHwKKwkJbXltZG10eXAgPT0gbl9aT0xUUklYIHx8IG15bWRt dHlwID09IG5fWEpBQ0spCisJICAgICAgc3BkY2hnKDE5MjAwTCk7CisJICAgIGVsc2UgaWYgKG15 bWRtdHlwID09IG5fVVNSKQorCSAgICAgIHNwZGNoZygyNDAwTCk7CisJICAgIGVsc2UgaWYgKG15 bWRtdHlwID09IG5fREFUQVBPUlQpCisJICAgICAgc3BkY2hnKDcyMDBMKTsKKwkgICAgZWxzZSBp ZiAobXltZG10eXAgIT0gbl9aWVhFTCAmJiBteW1kbXR5cCAhPSBuX0lOVEVMKSAvKiAxMjAwMCAq LworCSAgICAgIHNwZGNoZyg1NzYwMEwpOworCSAgICBtZG1zdGF0ID0gQ09OTkVDVEVEOworCSAg ICBicmVhazsKKwkgIGNhc2UgMTc6CisJICAgIGlmIChteW1kbXR5cCAhPSBuX0RBVEFQT1JUIHx8 IG15bWRtdHlwID09IG5fWEpBQ0spCS8qIDE2ODAwICovCisJICAgICAgc3BkY2hnKDM4NDAwTCk7 CisJICAgIGVsc2UgaWYgKG15bWRtdHlwID09IG5fWllYRUwgfHwgbXltZG10eXAgPT0gbl9JTlRF TCkKKwkgICAgICBzcGRjaGcoMTQ0MDBMKTsKKwkgICAgZWxzZSBpZiAobXltZG10eXAgPT0gbl9L RUVQSU5UT1VDSCkKKwkgICAgICBzcGRjaGcoMTQ0MDBMKTsKKwkgICAgZWxzZSBpZiAobXltZG10 eXAgPT0gbl9VU1IpCisJICAgICAgc3BkY2hnKDk2MDBMKTsKKwkgICAgbWRtc3RhdCA9IENPTk5F Q1RFRDsKKwkgICAgYnJlYWs7CisJICBjYXNlIDE4OgorCSAgICBpZiAoaXNfcm9ja3dlbGwgfHwg aXNfc3VwcmEgfHwKKwkJbXltZG10eXAgPT0gbl9aT0xUUklYIHx8IG15bWRtdHlwID09IG5fWEpB Q0sgfHwKKwkJbXltZG10eXAgPT0gbl9NSFpBVFQgfHwgbXltZG10eXAgPT0gbl9MVUNFTlQpCisJ ICAgICAgc3BkY2hnKDU3NjAwTCk7CisJICAgIGVsc2UgaWYgKG15bWRtdHlwID09IG5fSU5URUwp CisJICAgICAgc3BkY2hnKDE5MjAwTCk7CisJICAgIGVsc2UgaWYgKG15bWRtdHlwID09IG5fVVNS IHx8IG15bWRtdHlwID09IG5fVVNSWDIpCisJICAgICAgc3BkY2hnKDQ4MDBMKTsKKwkgICAgbWRt c3RhdCA9IENPTk5FQ1RFRDsKKwkgICAgYnJlYWs7CisJICBjYXNlIDE5OgorCSAgICBpZiAobXlt ZG10eXAgPT0gbl9EQVRBUE9SVCkKKwkgICAgICBzcGRjaGcoMzAwTCk7CisJICAgIGVsc2UgaWYg KG15bWRtdHlwID09IG5fWllYRUwgfHwgbXltZG10eXAgPT0gbl9JTlRFTCkKKwkgICAgICBzcGRj aGcoMzg0MDBMKTsKKwkgICAgZWxzZQorCSAgICAgIHNwZGNoZygxMTUyMDBMKTsKKwkgICAgbWRt c3RhdCA9IENPTk5FQ1RFRDsKKwkgICAgYnJlYWs7CisJICBjYXNlIDIwOgorCSAgICBpZiAobXlt ZG10eXAgPT0gbl9VU1IgfHwgbXltZG10eXAgPT0gbl9VU1JYMikKKwkgICAgICBzcGRjaGcoNzIw MEwpOworCSAgICBlbHNlIGlmIChteW1kbXR5cCA9PSBuX0RBVEFQT1JUKQorCSAgICAgIHNwZGNo ZygyNDAwTCk7CisJICAgIGVsc2UgaWYgKG15bWRtdHlwID09IG5fWllYRUwgfHwgbXltZG10eXAg PT0gbl9JTlRFTCkKKwkgICAgICBzcGRjaGcoNTc2MDBMKTsKKwkgICAgZWxzZQorCSAgICAgIHNw ZGNoZygzMDBMKTsKKwkgICAgbWRtc3RhdCA9IENPTk5FQ1RFRDsKKwkgICAgYnJlYWs7CisJICBj YXNlIDIxOgorCSAgICBpZiAobXltZG10eXAgPT0gbl9EQVRBUE9SVCkKKwkgICAgICBzcGRjaGco NDgwMEwpOworCSAgICBtZG1zdGF0ID0gQ09OTkVDVEVEOworCSAgICBicmVhazsKKwkgIGNhc2Ug MjI6CisJICAgIGlmIChpc19yb2Nrd2VsbCB8fCBpc19zdXByYSB8fCBteW1kbXR5cCA9PSBuX1hK QUNLKQorCSAgICAgIHNwZGNoZyg4ODgwTCk7CisJICAgIGVsc2UgaWYgKG15bWRtdHlwID09IG5f REFUQVBPUlQpCisJICAgICAgc3BkY2hnKDk2MDBMKTsKKwkgICAgZWxzZSBpZiAobXltZG10eXAg PT0gbl9LRUVQSU5UT1VDSCkKKwkgICAgICBzcGRjaGcoMzAwTCk7CisJICAgIGVsc2UgaWYgKCFp c19oYXllc2hpc3BkKQorCSAgICAgIHNwZGNoZygxMjAwTCk7CisJICAgIG1kbXN0YXQgPSBDT05O RUNURUQ7CisJICAgIGJyZWFrOworCSAgY2FzZSAyMzoKKwkgICAgaWYgKGlzX2hheWVzaGlzcGQg fHwgaXNfc3VwcmEgfHwKKwkJbXltZG10eXAgPT0gbl9NVUxUSSB8fCBteW1kbXR5cCA9PSBuX1hK QUNLKQorCSAgICAgIHNwZGNoZyg4ODgwTCk7CisJICAgIGVsc2UgaWYgKG15bWRtdHlwICE9IG5f REFUQVBPUlQgJiYgIWlzX3JvY2t3ZWxsKSAvKiAxMjAwMCAqLworCSAgICAgIHNwZGNoZygyNDAw TCk7CisJICAgIG1kbXN0YXQgPSBDT05ORUNURUQ7CisJICAgIGJyZWFrOworCSAgY2FzZSAyNDoK KwkgICAgaWYgKGlzX3JvY2t3ZWxsIHx8ICBpc19zdXByYSB8fCBteW1kbXR5cCA9PSBuX1hKQUNL KSB7CisJCW1kbXN0YXQgPSBEX0ZBSUxFRDsKKwkJZGlhbHN0YSA9IERJQV9ERUxBOwkvKiBEZWxh eWVkICovCisJCWJyZWFrOworCSAgICB9IGVsc2UgaWYgKGlzX2hheWVzaGlzcGQgfHwgbXltZG10 eXAgPT0gbl9MVUNFTlQpCisJICAgICAgc3BkY2hnKDcyMDBMKTsKKwkgICAgZWxzZSBpZiAobXlt ZG10eXAgPT0gbl9EQVRBUE9SVCkKKwkgICAgICBzcGRjaGcoMTQ0MDBMKTsKKwkgICAgZWxzZSBp ZiAobXltZG10eXAgPT0gbl9JTlRFTCB8fCBteW1kbXR5cCA9PSBuX0tFRVBJTlRPVUNIKQorCSAg ICAgIHNwZGNoZygxMjAwTCk7CisJICAgIG1kbXN0YXQgPSBDT05ORUNURUQ7CisJICAgIGJyZWFr OworCSAgY2FzZSAyNToKKwkgICAgaWYgKG15bWRtdHlwID09IG5fVVNSIHx8IG15bWRtdHlwID09 IG5fVVNSWDIpCisJICAgICAgc3BkY2hnKDE0NDAwTCk7CisJICAgIGVsc2UgaWYgKG15bWRtdHlw ID09IG5fTFVDRU5UKQorCSAgICAgIHNwZGNoZygxMjAwMEwpOworCSAgICBlbHNlIGlmIChpc19t b3Rvcm9sYSkKKwkgICAgICBzcGRjaGcoOTYwMEwpOworCSAgICBlbHNlIGlmIChteW1kbXR5cCA9 PSBuX0lOVEVMIHx8IG15bWRtdHlwID09IG5fS0VFUElOVE9VQ0gpCisJICAgICAgc3BkY2hnKDI0 MDBMKTsKKwkgICAgbWRtc3RhdCA9IENPTk5FQ1RFRDsKKwkgICAgYnJlYWs7CisJICBjYXNlIDI2 OgorCSAgICBpZiAobXltZG10eXAgPT0gbl9EQVRBUE9SVCkKKwkgICAgICBzcGRjaGcoMTkyMDBM KTsKKwkgICAgZWxzZSBpZiAobXltZG10eXAgPT0gbl9JTlRFTCB8fCBteW1kbXR5cCA9PSBuX0tF RVBJTlRPVUNIKQorCSAgICAgIHNwZGNoZyg0ODAwTCk7CisJICAgIG1kbXN0YXQgPSBDT05ORUNU RUQ7CisJICAgIGJyZWFrOworCSAgY2FzZSAyNzoKKwkgICAgaWYgKG15bWRtdHlwID09IG5fREFU QVBPUlQpCisJICAgICAgc3BkY2hnKDM4NDAwTCk7CisJICAgIGVsc2UgaWYgKG15bWRtdHlwID09 IG5fSU5URUwgfHwgbXltZG10eXAgPT0gbl9LRUVQSU5UT1VDSCkKKwkgICAgICBzcGRjaGcoNzIw MEwpOworCSAgICBlbHNlIGlmIChteW1kbXR5cCA9PSBuX01IWkFUVCkKKwkgICAgICBzcGRjaGco ODg4MEwpOworCSAgICBtZG1zdGF0ID0gQ09OTkVDVEVEOworCSAgICBicmVhazsKKwkgIGNhc2Ug Mjg6CisJICAgIGlmIChteW1kbXR5cCA9PSBuX0RBVEFQT1JUKQorCSAgICAgIHNwZGNoZyg3MjAw TCk7CisJICAgIGVsc2UgaWYgKG15bWRtdHlwID09IG5fSU5URUwgfHwgbXltZG10eXAgPT0gbl9L RUVQSU5UT1VDSCkKKwkgICAgICBzcGRjaGcoOTYwMEwpOworCSAgICBlbHNlIGlmIChteW1kbXR5 cCA9PSBuX01IWkFUVCB8fCBteW1kbXR5cCA9PSBuX0xVQ0VOVCkKKwkgICAgICBzcGRjaGcoMzg0 MDBMKTsKKwkgICAgbWRtc3RhdCA9IENPTk5FQ1RFRDsKKwkgICAgYnJlYWs7CisJICBjYXNlIDI5 OgorCSAgICBpZiAoaXNfbW90b3JvbGEpCisJICAgICAgc3BkY2hnKDQ4MDBMKTsKKwkgICAgZWxz ZSBpZiAobXltZG10eXAgPT0gbl9EQVRBUE9SVCkKKwkgICAgICBzcGRjaGcoMTkyMDBMKTsKKwkg ICAgbWRtc3RhdCA9IENPTk5FQ1RFRDsKKwkgICAgYnJlYWs7CisJICBjYXNlIDMwOgorCSAgICBp ZiAobXltZG10eXAgPT0gbl9JTlRFTCB8fCBteW1kbXR5cCA9PSBuX0tFRVBJTlRPVUNIKSB7CisJ CXNwZGNoZygxNDQwMEwpOworCQltZG1zdGF0ID0gQ09OTkVDVEVEOworCSAgICB9IC8qIGZhbGwg dGhydSBvbiBwdXJwb3NlLi4uICovCisJICBjYXNlIDMxOgorCSAgICBpZiAobXltZG10eXAgPT0g bl9VQ09NX0FUIHx8IG15bWRtdHlwID09IG5fTUlDUk9MSU5LKSB7CisJCXNwZGNoZyg0ODAwTCk7 CisJCW1kbXN0YXQgPSBDT05ORUNURUQ7CisJICAgIH0gZWxzZSBpZiAoaXNfbW90b3JvbGEpIHsK KwkJc3BkY2hnKDU3NjAwTCk7CisJCW1kbXN0YXQgPSBDT05ORUNURUQ7CisJICAgIH0KKwkgICAg YnJlYWs7CisJICBjYXNlIDMyOgorCSAgICBpZiAoaXNfcm9ja3dlbGwgfHwgaXNfc3VwcmEgfHwg bXltZG10eXAgPT0gbl9YSkFDSykgeworCQltZG1zdGF0ID0gRF9GQUlMRUQ7CisJCWRpYWxzdGEg PSBESUFfQkxDSzsJLyogQmxhY2tsaXN0ZWQgKi8KKwkgICAgfSBlbHNlIGlmIChteW1kbXR5cCA9 PSBuX1VDT01fQVQgfHwgbXltZG10eXAgPT0gbl9NSUNST0xJTkspIHsKKwkJc3BkY2hnKDk2MDBM KTsKKwkJbWRtc3RhdCA9IENPTk5FQ1RFRDsKKwkgICAgfSBlbHNlIGlmIChteW1kbXR5cCA9PSBu X0tFRVBJTlRPVUNIKSB7CisJCXNwZGNoZygzMDBMKTsKKwkJbWRtc3RhdCA9IENPTk5FQ1RFRDsK KwkgICAgfSBlbHNlIGlmIChteW1kbXR5cCA9PSBuX0lOVEVMKSB7CisJCXNwZGNoZygyNDAwTCk7 CisJCW1kbXN0YXQgPSBDT05ORUNURUQ7CisJICAgIH0KKwkgICAgYnJlYWs7CisJICBjYXNlIDMz OgkJCS8qIEZBWCBjb25uZWN0aW9uICovCisJICAgIGlmIChpc19yb2Nrd2VsbCB8fCBpc19zdXBy YSB8fAorCQlteW1kbXR5cCA9PSBuX1pPTFRSSVggfHwgbXltZG10eXAgPT0gbl9YSkFDSykgewor CQltZG1zdGF0ID0gRF9GQUlMRUQ7CisJCWRpYWxzdGEgPSBESUFfRkFYOworCSAgICB9IGVsc2Ug aWYgKG15bWRtdHlwID09IG5fVUNPTV9BVCB8fAorCQkgICAgICAgaXNfbW90b3JvbGEgfHwKKwkJ ICAgICAgIG15bWRtdHlwID09IG5fTUlDUk9MSU5LCisJCSAgICAgICApIHsKKwkJc3BkY2hnKDk2 MDBMKTsKKwkJbWRtc3RhdCA9IENPTk5FQ1RFRDsKKwkgICAgfSBlbHNlIGlmIChteW1kbXR5cCA9 PSBuX01IWkFUVCkgeworCQlzcGRjaGcoMTE1MjAwTCk7CisJCW1kbXN0YXQgPSBDT05ORUNURUQ7 CisJICAgIH0KKwkgICAgYnJlYWs7CisJICBjYXNlIDM0OgorCSAgICBpZiAobXltZG10eXAgPT0g bl9JTlRFTCB8fCBteW1kbXR5cCA9PSBuX0tFRVBJTlRPVUNIKSB7CisJCXNwZGNoZygxMjAwTCk7 CisJCW1kbXN0YXQgPSBDT05ORUNURUQ7CisJICAgIH0gZWxzZSBpZiAobXltZG10eXAgPT0gbl9N SUNST0xJTkspIHsKKwkJc3BkY2hnKDcyMDBMKTsKKwkJbWRtc3RhdCA9IENPTk5FQ1RFRDsKKwkg ICAgfQorCSAgICBicmVhazsKKwkgIGNhc2UgMzU6CisJICAgIGlmIChpc19yb2Nrd2VsbCkgewor CQlzcGRjaGcoMzAwTCk7CisJCWRpYWxzdGEgPSBDT05ORUNURUQ7CisJICAgIH0gZWxzZSBpZiAo aXNfbW90b3JvbGEpIHsKKwkJc3BkY2hnKDE0NDAwTCk7CisJCW1kbXN0YXQgPSBDT05ORUNURUQ7 CisJICAgIH0gZWxzZSBpZiAobXltZG10eXAgPT0gbl9JTlRFTCB8fCBteW1kbXR5cCA9PSBuX0tF RVBJTlRPVUNIKSB7CisJCXNwZGNoZygyNDAwTCk7CisJCW1kbXN0YXQgPSBDT05ORUNURUQ7CisJ ICAgIH0gZWxzZSBpZiAobXltZG10eXAgPT0gbl9NSUNST0xJTkspIHsKKwkJc3BkY2hnKDcyMDBM KTsKKwkJbWRtc3RhdCA9IENPTk5FQ1RFRDsKKwkgICAgfSBlbHNlIGlmIChteW1kbXR5cCA9PSBu X1pPTFRSSVggfHwgbXltZG10eXAgPT0gbl9YSkFDSykgLyogREFUQSAqLworCSAgICAgIG1kbXN0 YXQgPSBDT05ORUNURUQ7CisJICAgIGJyZWFrOworCSAgY2FzZSAzNjoKKwkgICAgaWYgKG15bWRt dHlwID09IG5fVUNPTV9BVCkgeworCQlzcGRjaGcoMTkyMDBMKTsKKwkJbWRtc3RhdCA9IENPTk5F Q1RFRDsKKwkgICAgfSBlbHNlIGlmIChpc19tb3Rvcm9sYSkgeworCQlzcGRjaGcoMTIwMEwpOwor CQltZG1zdGF0ID0gQ09OTkVDVEVEOworCSAgICB9IGVsc2UgaWYgKG15bWRtdHlwID09IG5fSU5U RUwgfHwgbXltZG10eXAgPT0gbl9LRUVQSU5UT1VDSCkgeworCQlzcGRjaGcoNDgwMEwpOworCQlt ZG1zdGF0ID0gQ09OTkVDVEVEOworCSAgICB9CisJICAgIGJyZWFrOworCSAgY2FzZSAzNzoKKwkg ICAgaWYgKG15bWRtdHlwID09IG5fVUNPTV9BVCkgeworCQlzcGRjaGcoMTkyMDBMKTsKKwkJbWRt c3RhdCA9IENPTk5FQ1RFRDsKKwkgICAgfSBlbHNlIGlmIChpc19tb3Rvcm9sYSkgeworCQlzcGRj aGcoMjQwMEwpOworCQltZG1zdGF0ID0gQ09OTkVDVEVEOworCSAgICB9IGVsc2UgaWYgKG15bWRt dHlwID09IG5fSU5URUwgfHwgbXltZG10eXAgPT0gbl9LRUVQSU5UT1VDSCkgeworCQlzcGRjaGco NzIwMEwpOworCQltZG1zdGF0ID0gQ09OTkVDVEVEOworCSAgICB9CisJICAgIGJyZWFrOworCSAg Y2FzZSAzODoKKwkgICAgaWYgKGlzX21vdG9yb2xhKSB7CisJCXNwZGNoZyg0ODAwTCk7CisJCW1k bXN0YXQgPSBDT05ORUNURUQ7CisJICAgIH0gZWxzZSBpZiAobXltZG10eXAgPT0gbl9JTlRFTCB8 fCBteW1kbXR5cCA9PSBuX0tFRVBJTlRPVUNIKSB7CisJCXNwZGNoZyg5NjAwTCk7CisJCW1kbXN0 YXQgPSBDT05ORUNURUQ7CisJICAgIH0gLyogZmFsbCB0aHJ1IG9uIHB1cnBvc2UuLi4gKi8KKwkg IGNhc2UgMzk6CisJICAgIGlmIChteW1kbXR5cCA9PSBuX1VDT01fQVQpIHsKKwkJc3BkY2hnKDM4 NDAwTCk7CisJCW1kbXN0YXQgPSBDT05ORUNURUQ7CisJICAgIH0gZWxzZSBpZiAoaXNfbW90b3Jv bGEpIHsKKwkJc3BkY2hnKDk2MDBMKTsKKwkJbWRtc3RhdCA9IENPTk5FQ1RFRDsKKwkgICAgfSBl bHNlIGlmIChteW1kbXR5cCA9PSBuX01JQ1JPTElOSykgeworCQlzcGRjaGcoMTQ0MDBMKTsKKwkJ bWRtc3RhdCA9IENPTk5FQ1RFRDsKKwkgICAgfQorCSAgICBicmVhazsKKwkgIGNhc2UgNDA6CisJ ICAgIGlmIChteW1kbXR5cCA9PSBuX1VDT01fQVQpIHsKKwkJbWRtc3RhdCA9IERfRkFJTEVEOwor CQlkaWFsc3RhID0gRElBX05PQ0E7CisJICAgIH0gZWxzZSBpZiAoaXNfbW90b3JvbGEgfHwgbXlt ZG10eXAgPT0gbl9JTlRFTCB8fAorCQkgICAgICAgbXltZG10eXAgPT0gbl9LRUVQSU5UT1VDSCkg eworCQlzcGRjaGcoMTQ0MDBMKTsKKwkJbWRtc3RhdCA9IENPTk5FQ1RFRDsKKwkgICAgfQorCSAg ICBicmVhazsKKwkgIGNhc2UgNDE6CisJICAgIGlmIChpc19tb3Rvcm9sYSkgeworCQlzcGRjaGco MTkyMDBMKTsKKwkJbWRtc3RhdCA9IENPTk5FQ1RFRDsKKwkgICAgfQorCSAgICBicmVhazsKKwkg IGNhc2UgNDI6CisJICAgIGlmIChteW1kbXR5cCA9PSBuX0tFRVBJTlRPVUNIKSB7CisJCXNwZGNo ZygzMDBMKTsKKwkJbWRtc3RhdCA9IENPTk5FQ1RFRDsKKwkgICAgfSBlbHNlIGlmIChpc19tb3Rv cm9sYSkgeworCQlzcGRjaGcoMzg0MDBMKTsKKwkJbWRtc3RhdCA9IENPTk5FQ1RFRDsKKwkgICAg fSAvKiBmYWxsIHRocnUgb24gcHVycG9zZS4uLiAqLworCSAgY2FzZSA0MzoKKwkgICAgaWYgKG15 bWRtdHlwID09IG5fVUNPTV9BVCkgeworCQlzcGRjaGcoNTc2MDBMKTsKKwkJbWRtc3RhdCA9IENP Tk5FQ1RFRDsKKwkgICAgfSBlbHNlIGlmIChteW1kbXR5cCA9PSBuX1VTUlgyKQorCSAgICAgIG1k bXN0YXQgPSBDT05ORUNURUQ7CS8qIDE2ODAwMCAqLworCSAgICBicmVhazsKKwkgIGNhc2UgNDQ6 CisJICAgIGlmIChpc19yb2Nrd2VsbCkgeworCQlzcGRjaGcoODgwMEwpOworCQlkaWFsc3RhID0g Q09OTkVDVEVEOworCSAgICB9IGVsc2UgaWYgKGlzX21vdG9yb2xhKSB7CisJCXNwZGNoZyg3MjAw TCk7CisJCW1kbXN0YXQgPSBDT05ORUNURUQ7CisJICAgIH0gZWxzZSBpZiAobXltZG10eXAgPT0g bl9JTlRFTCB8fCBteW1kbXR5cCA9PSBuX0tFRVBJTlRPVUNIKSB7CisJCXNwZGNoZygxMjAwTCk7 CisJCW1kbXN0YXQgPSBDT05ORUNURUQ7CisJICAgIH0KKwkgICAgYnJlYWs7CisJICBjYXNlIDQ1 OgorCSAgICBpZiAoaXNfbW90b3JvbGEpIHsKKwkJc3BkY2hnKDU3NjAwTCk7CisJCW1kbXN0YXQg PSBDT05ORUNURUQ7CisJICAgIH0gZWxzZSBpZiAobXltZG10eXAgPT0gbl9JTlRFTCB8fCBteW1k bXR5cCA9PSBuX0tFRVBJTlRPVUNIKSB7CisJCXNwZGNoZygyNDAwTCk7CisJCW1kbXN0YXQgPSBD T05ORUNURUQ7CisJICAgIH0gZWxzZSBpZiAobl9VU1IpIHsKKwkJc3BkY2hnKDE0NDAwTCk7CisJ CW1kbXN0YXQgPSBDT05ORUNURUQ7CisJICAgIH0KKwkgICAgYnJlYWs7CisJICBjYXNlIDQ2Ogor CSAgICBpZiAoaXNfcm9ja3dlbGwpCisJICAgICAgc3BkY2hnKDEyMDBMKTsKKwkgICAgZWxzZSBp ZiAobXltZG10eXAgPT0gbl9JTlRFTCB8fCBteW1kbXR5cCA9PSBuX0tFRVBJTlRPVUNIKQorCSAg ICAgIHNwZGNoZyg0ODAwTCk7CisJICAgIGVsc2UKKwkgICAgICBzcGRjaGcoODg4MEwpOwkJLyog NzUvMTIwMCBzcGxpdCBzcGVlZCAqLworCSAgICBtZG1zdGF0ID0gQ09OTkVDVEVEOworCSAgICBi cmVhazsKKwkgIGNhc2UgNDc6CisJICAgIGlmIChpc19yb2Nrd2VsbCkKKwkgICAgICBzcGRjaGco MjQwMEwpOworCSAgICBlbHNlIGlmIChteW1kbXR5cCA9PSBuX0lOVEVMIHx8IG15bWRtdHlwID09 IG5fS0VFUElOVE9VQ0gpCisJICAgICAgc3BkY2hnKDcyMDBMKTsKKwkgICAgZWxzZQorCSAgICAg IHByaW50ZigiQ09OTkVDVCAxMjAwLzc1IC0gTm90IHN1cHBvcnRlZCBieSBDLUtlcm1pdFxyXG4i KTsKKwkgICAgbWRtc3RhdCA9IENPTk5FQ1RFRDsKKwkgICAgYnJlYWs7CisJICBjYXNlIDQ4Ogor CSAgICBpZiAoaXNfcm9ja3dlbGwpCisJICAgICAgc3BkY2hnKDQ4MDBMKTsKKwkgICAgZWxzZSBp ZiAobXltZG10eXAgPT0gbl9JTlRFTCB8fCBteW1kbXR5cCA9PSBuX0tFRVBJTlRPVUNIKQorCSAg ICAgIHNwZGNoZyg5NjAwTCk7CisJICAgIGVsc2UKKwkgICAgICBzcGRjaGcoNzIwMEwpOworCSAg ICBtZG1zdGF0ID0gQ09OTkVDVEVEOworCSAgICBicmVhazsKKwkgIGNhc2UgNDk6CisJICAgIGlm IChpc19yb2Nrd2VsbCkKKwkgICAgICBzcGRjaGcoNzIwMEwpOworCSAgICBtZG1zdGF0ID0gQ09O TkVDVEVEOworCSAgICBicmVhazsKKwkgIGNhc2UgNTA6CQkJLyogQ09OTkVDVCBGQVNUICovCisJ ICAgIGlmIChpc19yb2Nrd2VsbCkKKwkgICAgICBzcGRjaGcoOTYwMEwpOworCSAgICBlbHNlIGlm IChteW1kbXR5cCA9PSBuX0lOVEVMIHx8IG15bWRtdHlwID09IG5fS0VFUElOVE9VQ0gpCisJICAg ICAgc3BkY2hnKDE0NDAwTCk7CisJICAgIG1kbXN0YXQgPSBDT05ORUNURUQ7CisJICAgIGJyZWFr OworCSAgY2FzZSA1MToKKwkgICAgaWYgKG15bWRtdHlwID09IG5fVUNPTV9BVCkgeworCQltZG1z dGF0ID0gRF9GQUlMRUQ7CisJCWRpYWxzdGEgPSBESUFfTk9EVDsKKwkgICAgfQorCSAgICBicmVh azsKKwkgIGNhc2UgNTI6CQkJLyogUlJJTkcgKi8KKwkgICAgaWYgKG15bWRtdHlwID09IG5fVEVM RUJJVCkKKwkgICAgICBpZiAoZGlhbGRweSkgcHJpbnRmKCIgUmluZ2luZy4uLlxyXG4iKTsKKwkg ICAgYnJlYWs7CisJICBjYXNlIDUzOgkJCS8qIERJQUxJTkcgKi8KKwkgICAgaWYgKG15bWRtdHlw ID09IG5fVEVMRUJJVCkKKwkgICAgICBpZiAoZGlhbGRweSkgcHJpbnRmKCIgRGlhbGluZy4uLlxy XG4iKTsKKwkgICAgYnJlYWs7CisJICBjYXNlIDU0OgorCSAgICBpZiAoaXNfcm9ja3dlbGwpIHsK KwkJc3BkY2hnKDE5MjAwTCk7CisJCW1kbXN0YXQgPSBDT05ORUNURUQ7CisJICAgIH0gZWxzZSBp ZiAobXltZG10eXAgPT0gbl9JTlRFTCB8fCBteW1kbXR5cCA9PSBuX0tFRVBJTlRPVUNIKSB7CisJ CXNwZGNoZygxMjAwTCk7CisJCW1kbXN0YXQgPSBDT05ORUNURUQ7CisJICAgIH0gZWxzZSBpZiAo bXltZG10eXAgPT0gbl9URUxFQklUKSB7CisJCWlmIChkaWFsZHB5KSBwcmludGYoIlxyXG4gTm8g UHJvbXB0dG9uZS5cclxuIik7CisJCW1kbXN0YXQgPSBEX0ZBSUxFRDsKKwkJZGlhbHN0YSA9IERJ QV9OT0RUOworCSAgICB9CisJICAgIGJyZWFrOworCSAgY2FzZSA1NToKKwkgICAgaWYgKG15bWRt dHlwID09IG5fSU5URUwgfHwgbXltZG10eXAgPT0gbl9LRUVQSU5UT1VDSCkgeworCQlzcGRjaGco MjQwMEwpOworCQltZG1zdGF0ID0gQ09OTkVDVEVEOworCSAgICB9CisJICAgIGJyZWFrOworCSAg Y2FzZSA1NjoKKwkgICAgaWYgKG15bWRtdHlwID09IG5fSU5URUwgfHwgbXltZG10eXAgPT0gbl9L RUVQSU5UT1VDSCkgeworCQlzcGRjaGcoNDgwMEwpOworCQltZG1zdGF0ID0gQ09OTkVDVEVEOwor CSAgICB9CisJICAgIGJyZWFrOworCSAgY2FzZSA1NzoKKwkgICAgaWYgKG15bWRtdHlwID09IG5f SU5URUwgfHwgbXltZG10eXAgPT0gbl9LRUVQSU5UT1VDSCkgeworCQlzcGRjaGcoNzIwMEwpOwor CQltZG1zdGF0ID0gQ09OTkVDVEVEOworCSAgICB9CisJICAgIGJyZWFrOworCSAgY2FzZSA1ODoK KwkgICAgaWYgKG15bWRtdHlwID09IG5fSU5URUwgfHwgbXltZG10eXAgPT0gbl9LRUVQSU5UT1VD SCkgeworCQlzcGRjaGcoOTYwMEwpOworCQltZG1zdGF0ID0gQ09OTkVDVEVEOworCSAgICB9CisJ ICAgIGJyZWFrOworCSAgY2FzZSA1OToKKwkgICAgaWYgKG15bWRtdHlwID09IG5fSU5URUwpCS8q IDEyMDAwICovCisJICAgICAgbWRtc3RhdCA9IENPTk5FQ1RFRDsKKwkgICAgYnJlYWs7CisJICBj YXNlIDYwOgorCSAgICBpZiAobXltZG10eXAgPT0gbl9JTlRFTCB8fCBteW1kbXR5cCA9PSBuX0tF RVBJTlRPVUNIKSB7CisJCXNwZGNoZygxNDQwMEwpOworCQltZG1zdGF0ID0gQ09OTkVDVEVEOwor CSAgICB9CisJICAgIGJyZWFrOworCSAgY2FzZSA2NDoKKwkgICAgaWYgKG15bWRtdHlwID09IG5f SU5URUwpIHsKKwkJc3BkY2hnKDEyMDBMKTsKKwkJbWRtc3RhdCA9IENPTk5FQ1RFRDsKKwkgICAg fSBlbHNlIGlmIChpc19zdXByYSkgeworCQlzcGRjaGcoMjg4MDBMKTsKKwkJbWRtc3RhdCA9IENP Tk5FQ1RFRDsKKwkgICAgfQorCSAgICBicmVhazsKKwkgIGNhc2UgNjU6CisJICAgIGlmIChteW1k bXR5cCA9PSBuX0lOVEVMIHx8IG15bWRtdHlwID09IG5fS0VFUElOVE9VQ0gpIHsKKwkJc3BkY2hn KDI0MDBMKTsKKwkJbWRtc3RhdCA9IENPTk5FQ1RFRDsKKwkgICAgfQorCSAgICBicmVhazsKKwkg IGNhc2UgNjY6CisJICAgIGlmIChteW1kbXR5cCA9PSBuX0lOVEVMIHx8IG15bWRtdHlwID09IG5f S0VFUElOVE9VQ0gpIHsKKwkJc3BkY2hnKDQ4MDBMKTsKKwkJbWRtc3RhdCA9IENPTk5FQ1RFRDsK KwkgICAgfQorCSAgICBicmVhazsKKwkgIGNhc2UgNjc6CisJICAgIGlmIChteW1kbXR5cCA9PSBu X0lOVEVMIHx8IG15bWRtdHlwID09IG5fS0VFUElOVE9VQ0gpIHsKKwkJc3BkY2hnKDcyMDBMKTsK KwkJbWRtc3RhdCA9IENPTk5FQ1RFRDsKKwkgICAgfQorCSAgICBicmVhazsKKwkgIGNhc2UgNjg6 CisJICAgIGlmIChteW1kbXR5cCA9PSBuX0lOVEVMIHx8IG15bWRtdHlwID09IG5fS0VFUElOVE9V Q0gpIHsKKwkJc3BkY2hnKDk2MDBMKTsKKwkJbWRtc3RhdCA9IENPTk5FQ1RFRDsKKwkgICAgfQor CSAgICBicmVhazsKKwkgIGNhc2UgNjk6CisJICAgIGlmIChteW1kbXR5cCA9PSBuX0lOVEVMIHx8 IG15bWRtdHlwID09IG5fS0VFUElOVE9VQ0gpIC8qIDEyMDAwICovCisJICAgICAgbWRtc3RhdCA9 IENPTk5FQ1RFRDsKKwkgICAgYnJlYWs7CisJICBjYXNlIDcwOgorCSAgICBpZiAobXltZG10eXAg PT0gbl9JTlRFTCB8fCBteW1kbXR5cCA9PSBuX0tFRVBJTlRPVUNIKSB7CisJCXNwZGNoZygxNDQw MEwpOworCQltZG1zdGF0ID0gQ09OTkVDVEVEOworCSAgICB9CisJICAgIGJyZWFrOworCSAgY2Fz ZSA3MzoKKwkgICAgaWYgKG15bWRtdHlwID09IG5fVUNPTV9BVCkgeworCQlzcGRjaGcoMTE1MjAw TCk7CisJCW1kbXN0YXQgPSBDT05ORUNURUQ7CisJCWJyZWFrOworCSAgICB9IC8qIGVsc2UgZmFs bCB0aHJ1ICovCisJICAgIGlmIChteW1kbXR5cCA9PSBuX1RFTEVCSVQpCS8qIEVhcmx5IG1vZGVs cyBvbmx5ICovCisJICAgICAgbWRtc3RhdCA9IENPTk5FQ1RFRDsKKwkgICAgYnJlYWs7CisJICBj YXNlIDg1OgorCSAgICBpZiAobXltZG10eXAgPT0gbl9VU1IgfHwgbXltZG10eXAgPT0gbl9VU1JY MikKKwkgICAgICBzcGRjaGcoMTkyMDBMKTsKKwkgICAgbWRtc3RhdCA9IENPTk5FQ1RFRDsKKwkg ICAgYnJlYWs7CisJICBjYXNlIDkxOgkJCS8qIDIxNjAwICovCisJICBjYXNlIDk5OgkJCS8qIDI0 MDAwICovCisJICBjYXNlIDEwMzoJCQkvKiAyNjQwMCAqLworCSAgICBpZiAobXltZG10eXAgPT0g bl9VU1JYMikKKwkgICAgICBtZG1zdGF0ID0gQ09OTkVDVEVEOworCSAgICBicmVhazsKKwkgIGNh c2UgMTA3OgorCSAgICBpZiAobXltZG10eXAgPT0gbl9VU1IgfHwgbXltZG10eXAgPT0gbl9VU1JY MikgeworCQlzcGRjaGcoMjg4MDBMKTsKKwkJbWRtc3RhdCA9IENPTk5FQ1RFRDsKKwkgICAgfQor CSAgICBicmVhazsKKwkgIGNhc2UgMTUxOgkJCS8qIDMxMjAwMCAqLworCSAgY2FzZSAxNTU6CQkJ LyogMzM2MDAwICovCisJICAgIGlmIChteW1kbXR5cCA9PSBuX1VTUlgyKQorCSAgICAgIG1kbXN0 YXQgPSBDT05ORUNURUQ7CisJICAgIGJyZWFrOworCisjZW5kaWYgLyogTUlOSURJQUwgKi8KKwkg IGRlZmF1bHQ6CisjaWZuZGVmIE1JTklESUFMCisJICAgIGlmIChteW1kbXR5cCA9PSBuX1VTUiB8 fCBteW1kbXR5cCA9PSBuX1VTUlgyIHx8CisJCWlzX2hheWVzaGlzcGQgfHwgaXNfcm9ja3dlbGwp CisjZW5kaWYgLyogTUlOSURJQUwgKi8KKwkgICAgICBpZiAoaSA+IDEyKQkJLyogVGhlcmUgYXJl IGh1bmRyZWRzIG9mIHRoZW0uLi4gKi8KKwkJbWRtc3RhdCA9IENPTk5FQ1RFRDsKKwkgICAgYnJl YWs7CisJfQorICAgIH0KKyAgICBpZiAobWRtc3RhdCA9PSBDT05ORUNURUQgJiYgbmJ1ZltqXSAh PSAnXDAnKSB7CisJaWYgKGRpYWxkcHkpIHsKKwkgICAgcHJpbnRmKCJcclxuIik7CisJICAgIGlm IChuYnVmW2pdID09ICdSJykgcHJpbnRmKCIgUkVMSUFCTEUiKTsKKwkgICAgaWYgKG5idWZbal0g PT0gJ0wnKSBwcmludGYoIiBMQVBNIik7CisJICAgIGlmIChuYnVmW2orMV0gPT0gJ0MnKSBwcmlu dGYoIiBDT01QUkVTU0VEIik7CisJICAgIHByaW50ZigiXHJcbiIpOworCX0KKwlja3N0cm5jcHko bGJ1ZixuYnVmLExCVUZMKTsJCS8qIChmb3IgbWVzc2FnZXMuLi4pICovCisgICAgfQorfQorCitz dGF0aWMgVk9JRAkJCQkvKiBHZXQgSGF5ZXMgUmVzdWx0IGluIFdvcmQgbW9kZSAqLworZ2V0aHJ3 KCkgeworICAgIGNoYXIgKmNwdHIsICpzOworICAgIGxvbmcgY29uc3BkOworCisgICAgaWYgKG1k bXNwZCAmJiAhbmV0d29yaykgeworCXMgPSBsYnVmOworCXdoaWxlICgqcyAhPSAnXDAnICYmICpz ICE9ICdDJykgcysrOworCWNwdHIgPSAoKnMgPT0gJ0MnKSA/IHMgOiBOVUxMOworCWNvbnNwZCA9 IDBMOworCWlmICgoY3B0ciAhPSBOVUxMKSAmJiAhc3RybmNtcChjcHRyLCJDT05ORUNUICIsOCkp IHsKKwkgICAgaWYgKChpbnQpc3RybGVuKGNwdHIpIDwgOSkgICAvKiBKdXN0IENPTk5FQ1QsICov CisJICAgICAgY29uc3BkID0gMzAwTDsJCSAvKiB1c2UgMzAwIGJwcyAqLworCSAgICBlbHNlIGlm IChpc2RpZ2l0KCooY3B0cis4KSkpIC8qIG5vdCBDT05ORUNUIEZBU1QgKi8KKwkgICAgICBjb25z cGQgPSBhdG9sKGNwdHIgKyA4KTsgICAvKiBDT05ORUNUIG5ubm4gKi8KKwkgICAgaWYgKGNvbnNw ZCAhPSBzcGVlZCkgeworCQlpZiAoKGNvbnNwZCAvIDEwTCkgPiAwKSB7CisJCSAgICBpZiAodHRz c3BkKChpbnQpIChjb25zcGQgLyAxMEwpKSA8IDApIHsKKwkJCXByaW50ZigiIENhbid0IGNoYW5n ZSBzcGVlZCB0byAlbGRcclxuIiwKKwkJCSAgICAgICBjb25zcGQpOworCQkgICAgfSBlbHNlIHsK KwkJCXNwZWVkID0gY29uc3BkOworCQkJbWRtc3RhdCA9IENPTk5FQ1RFRDsKKwkJCWlmICggIXF1 aWV0ICYmICFiYWNrZ3JkICkKKwkJCSAgcHJpbnRmKCIgU3BlZWQgY2hhbmdlZCB0byAlbGRcclxu IiwKKwkJCQkgY29uc3BkKTsKKwkJICAgIH0KKwkJfQorCSAgICB9IC8qIEV4cGFuZGVkIHRvIGhh bmRsZSBhbnkgY29uY2VpdmFibGUgc3BlZWQgKi8KKwl9CisgICAgfQorI2lmbmRlZiBNSU5JRElB TAorICAgIGlmIChteW1kbXR5cCA9PSBuX1RFTEVCSVQpIHsKKwlpZiAoZGlkd2VnZXQobGJ1Ziwi Q09OTkVDVCBGQVNUL0tFUk0iKSkgeworCSAgICBtZG1zdGF0ID0gQ09OTkVDVEVEOworCSAgICBp ZiAoZGlhbGRweSkgcHJpbnRmKCJGQVNUL0tFUk0gIik7CisJICAgIHJldHVybjsKKwl9CisgICAg fQorI2VuZGlmIC8qIE1JTklESUFMICovCisgICAgaWYgKGRpZHdlZ2V0KGxidWYsIlJSSU5HIikg fHwKKwlkaWR3ZWdldChsYnVmLCJSSU5HSU5HIikgfHwKKwlkaWR3ZWdldChsYnVmLCJESUFMSU5H IikpIHsKKwltZG1zdGF0ID0gMDsKKyAgICB9IGVsc2UgaWYgKGRpZHdlZ2V0KGxidWYsIkNPTk5F Q1QiKSkgeworCW1kbXN0YXQgPSBDT05ORUNURUQ7CisgICAgfSBlbHNlIGlmIChkaWR3ZWdldChs YnVmLCJPSyIpKSB7CisJaWYgKHBhcnRpYWwpIHsKKwkgICAgbWRtc3RhdCA9IERfUEFSVElBTDsK Kwl9IGVsc2UgeworCSAgICBtZG1zdGF0ID0gRF9GQUlMRUQ7CisJICAgIGRpYWxzdGEgPSBESUFf RVJSOworCX0KKyAgICB9IGVsc2UgaWYgKGRpZHdlZ2V0KGxidWYsIk5PIENBUlJJRVIiKSkgewor CW1kbXN0YXQgPSBEX0ZBSUxFRDsKKwlkaWFsc3RhID0gRElBX05PQ0E7CisgICAgfSBlbHNlIGlm IChkaWR3ZWdldChsYnVmLCJOTyBESUFMVE9ORSIpKSB7CisJbWRtc3RhdCA9IERfRkFJTEVEOwor CWRpYWxzdGEgPSBESUFfTk9EVDsKKyAgICB9IGVsc2UgaWYgKGRpZHdlZ2V0KGxidWYsIk5PIERJ QUwgVE9ORSIpKSB7CisJbWRtc3RhdCA9IERfRkFJTEVEOworCWRpYWxzdGEgPSBESUFfTk9EVDsK KyAgICB9IGVsc2UgaWYgKGRpZHdlZ2V0KGxidWYsIkJVU1kiKSkgeworCW1kbXN0YXQgPSBEX0ZB SUxFRDsKKwlkaWFsc3RhID0gRElBX0JVU1k7CisgICAgfSBlbHNlIGlmIChkaWR3ZWdldChsYnVm LCJOTyBBTlNXRVIiKSkgeworCW1kbXN0YXQgPSBEX0ZBSUxFRDsKKwlkaWFsc3RhID0gRElBX05P QU47CisgICAgfSBlbHNlIGlmIChkaWR3ZWdldChsYnVmLCJWT0lDRSIpKSB7CisJbWRtc3RhdCA9 IERfRkFJTEVEOworCWRpYWxzdGEgPSBESUFfVk9JQzsKKyAgICB9IGVsc2UgaWYgKGRpZHdlZ2V0 KGxidWYsIlZDT04iKSkgeworCW1kbXN0YXQgPSBEX0ZBSUxFRDsKKwlkaWFsc3RhID0gRElBX1ZP SUM7CisgICAgfSBlbHNlIGlmIChkaWR3ZWdldChsYnVmLCJOTyBQUk9NUFQgVE9ORSIpKSB7CisJ bWRtc3RhdCA9IERfRkFJTEVEOworCWRpYWxzdGEgPSBESUFfTk9EVDsKKyAgICB9IGVsc2UgaWYg KGRpZHdlZ2V0KGxidWYsIlJFTU9URSBBQ0NFU1MgRkFJTEVEIikpIHsKKwltZG1zdGF0ID0gRF9G QUlMRUQ7CisJZGlhbHN0YSA9IERJQV9OT0NBOworICAgIH0gZWxzZSBpZiAoZGlkd2VnZXQobGJ1 ZiwiRkFYIikpIHsKKwltZG1zdGF0ID0gRF9GQUlMRUQ7CisJZGlhbHN0YSA9IERJQV9GQVg7Cisg ICAgfSBlbHNlIGlmIChkaWR3ZWdldChsYnVmLCJXQUlUIC0gQ09OTkVDVElORyIpIHx8CisJICAg ICAgIGRpZHdlZ2V0KGxidWYsIldBSVQtQ09OTkVDVElORyIpKSB7IC8qIEFUJlQgU1RVLUlJSSAx OXh4ICovCisJbWRtc3RhdCA9IDA7CisgICAgfSBlbHNlIGlmIChkaWR3ZWdldChsYnVmLCJERUxB WUVEIikpIHsKKwltZG1zdGF0ID0gRF9GQUlMRUQ7CisJZGlhbHN0YSA9IERJQV9ERUxBOworICAg IH0gZWxzZSBpZiAoZGlkd2VnZXQobGJ1ZiwiQkxBQ0tMSVNURUQiKSkgeworCW1kbXN0YXQgPSBE X0ZBSUxFRDsKKwlkaWFsc3RhID0gRElBX0JMQ0s7CisgICAgfSBlbHNlIGlmIChkaWR3ZWdldChs YnVmLCJDT01QUkVTU0lPTiIpKSB7CisJbWRtc3RhdCA9IDA7CisgICAgfSBlbHNlIGlmIChkaWR3 ZWdldChsYnVmLCJQUk9UT0NPTCIpKSB7CisJbWRtc3RhdCA9IDA7CisgICAgfSBlbHNlIGlmIChk aWR3ZWdldChsYnVmLCJESUFMIExPQ0tFRCIpKSB7IC8qIEdlcm1hbnksIEF1c3RyaWEsIFNjaHdl aXogKi8KKwltZG1zdGF0ID0gRF9GQUlMRUQ7CisJZGlhbHN0YSA9IERJQV9CTENLOworICAgIH0g ZWxzZSBpZiAoIGRpZHdlZ2V0KGxidWYsIlJJTkciKSB8fAorCSAgICAgICAgZGlkd2VnZXQobGJ1 ZiwiUklORzEiKSB8fCAvKiBEaXN0aW5jdGl2ZSBSaW5nIDEgKi8KKwkJZGlkd2VnZXQobGJ1Ziwi UklORzIiKSB8fCAvKiBEaXN0aW5jdGl2ZSBSaW5nIDIgKi8KKwkJZGlkd2VnZXQobGJ1ZiwiUklO RzMiKSApIHsKKwltZG1zdGF0ID0gKGZ1bmNfY29kZSA9PSAwKSA/IERfRkFJTEVEIDogMDsKKwlk aWFsc3RhID0gRElBX1JJTkc7CisgICAgfSBlbHNlIGlmIChkaWR3ZWdldChsYnVmLCJFUlJPUiIp KSB7CisJbWRtc3RhdCA9IERfRkFJTEVEOworCWRpYWxzdGEgPSBESUFfRVJSOworICAgIH0gZWxz ZSBpZiAoZGlkd2VnZXQobGJ1ZiwiQ0FSUklFUiIpKSB7IC8qIEJvY2EgLyBSb2Nrd2VsbCBmYW1p bHkgKi8KKyNpZmRlZiBDT01NRU5UCisJaWYgKGlzX3JvY2t3ZWxsKQorI2VuZGlmIC8qIENPTU1F TlQgKi8KKwkgIG1kbXN0YXQgPSAwOworI2lmZGVmIENPTU1FTlQKKwkvKiBEb2VzIENBUlJJRVIg ZXZlciBtZWFuIHRoZSBzYW1lIGFzIENPTk5FQ1Q/ICovCisJZWxzZQorCSAgbWRtc3RhdCA9IENP Tk5FQ1RFRDsKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgfSBlbHNlIGlmIChkaWR3ZWdldChs YnVmLCJEQVRBIikpIHsJLyogQm9jYSAvIFJvY2t3ZWxsIGZhbWlseSAqLworCS8qIFRoaXMgbWVz c2FnZSBpcyBzZW50IHdoZW4gdGhlIG1vZGVtIGlzIGluIEZBWCBtb2RlICAqLworCS8qIFNvIHNl dHRpbmcgdGhpcyB0byBDT05ORUNURUQgbWF5IG5vdCBiZSBhcHByb3ByaWF0ZSAqLworCS8qIFdl IG11c3Qgc2VuZCBBVE9cMDE1IHRvIHRoZSBtb2RlbSBpbiByZXNwb25zZSAgICAgICAqLworCS8q IFRoZW4gd2Ugd2lsbCBnZXQgYSBDT05ORUNURUQgbWVzc2FnZSAgICAgICAgICAgICAgICAqLwor CW1kbXN0YXQgPSBDT05ORUNURUQ7CisgICAgfSBlbHNlIGlmIChkaWR3ZWdldChsYnVmLCJESUdJ VEFMIExJTkUiKSkgeworCW1kbXN0YXQgPSBEX0ZBSUxFRDsKKwlkaWFsc3RhID0gRElBX0RJR0k7 CisgICAgfSBlbHNlIGlmIChkaWR3ZWdldChsYnVmLCJEQVRFIikpIHsgLyogQ2FsbGVyIElEIERh dGUgKi8KKwlkZWJ1ZyhGMTEwLCJDQUxMSUQgREFURSIsbGJ1ZiwwKTsKKwkvKiBGb3JtYXQgaXMg IkRBVEUgICAgID0gICBNTUREIiAgICovCisJbWFrZXN0cigmY2FsbGlkX2RhdGUsbGJ1Zik7Cisg ICAgfSBlbHNlIGlmIChkaWR3ZWdldChsYnVmLCJUSU1FIikpIHsgLyogQ2FsbGVyIElEIFRpbWUg Ki8KKwkvKiBGb3JtYXQgaXMgIlRJTUUgICAgID0gICBISE1NIiAgICovCisJZGVidWcoRjExMCwi Q0FMTElEIFRJTUUiLGxidWYsMCk7CisJbWFrZXN0cigmY2FsbGlkX3RpbWUsbGJ1Zik7CisgICAg fSBlbHNlIGlmIChkaWR3ZWdldChsYnVmLCJOQU1FIikpIHsgLyogQ2FsbGVyIElEIE5hbWUgKi8K KwkvKiBGb3JtYXQgaXMgIk5BTUUgICAgID0gICA8bGlzdGluZyBuYW1lPiIgICAqLworCWRlYnVn KEYxMTAsIkNBTExJRCBOQU1FIixsYnVmLDApOworCW1ha2VzdHIoJmNhbGxpZF9uYW1lLGxidWYp OworICAgIH0gZWxzZSBpZiAoZGlkd2VnZXQobGJ1ZiwiTk1CUiIpKSB7IC8qIENhbGxlciBJRCBO dW1iZXIgKi8KKwkvKiBGb3JtYXQgaXMgIk5NQlIgICAgID0gICA8bnVtYmVyPiwgJ1AnIG9yICdP JyIgICAqLworCS8qIAknUCcgbWVhbnMgUHJpdmFjeSBSZXF1ZXN0ZWQgCQkgICAqLworCS8qICAg ICAgJ08nIG1lYW5zIE91dCBvZiBTZXJ2aWNlIG9yIE5vdCBhdmFpbGFibGUgICovCisJZGVidWco RjExMCwiQ0FMTElEIE5NQlIiLGxidWYsMCk7CisJbWFrZXN0cigmY2FsbGlkX25tYnIsbGJ1Zik7 CisgICAgfSBlbHNlIGlmIChkaWR3ZWdldChsYnVmLCJNRVNHIikpIHsgLyogQ2FsbGVyIElEIFVu cmVjb2duaXplZCBNZXNzYWdlICovCisJLyogRm9ybWF0IGlzICJNRVNHICAgICA9ICAgPHRhZz48 bGVuZ3RoPjxkYXRhPjxjaGVja3N1bT4iICAgKi8KKwlkZWJ1ZyhGMTEwLCJDQUxMSUQgTUVTRyIs bGJ1ZiwwKTsKKwltYWtlc3RyKCZjYWxsaWRfbWVzZyxsYnVmKTsKKyAgICB9Cit9CisKKy8qIE1h eWJlIGhhbmcgdXAgdGhlIHBob25lLCBkZXBlbmRpbmcgb24gdmFyaW91cyBTRVQgRElBTCBwYXJh bWV0ZXJzLiAqLworCitpbnQKK2RpYWxodXAoKSB7CisgICAgaW50IHggPSAwOworICAgIGlmIChk aWFsaG5nICYmIGRpYWxzdGEgIT0gRElBX1BBUlQpIHsgLyogRElBTCBIQU5HVVAgT04/ICovCisJ eCA9IG1kbWh1cCgpOwkJCS8qIFRyeSBtb2RlbS1zcGVjaWZpYyBtZXRob2QgZmlyc3QgKi8KKwlk ZWJ1ZyhGMTAxLCJkaWFsaHVwIG1kbWh1cCIsIiIseCk7CisJaWYgKHggPiAwKSB7CQkJLyogSWYg aXQgd29ya2VkLCAqLworCSAgICBkaWFsc3RhID0gRElBX0hVUDsKKwkgICAgaWYgKGRpYWxkcHkp CisJICAgICAgcHJpbnRmKCIgTW9kZW0gaGFuZ3VwIE9LXHJcbiIpOyAvKiBmaW5lLiAqLworCX0g ZWxzZSBpZiAobmV0d29yawkJLyogSWYgd2UncmUgdGVsbmV0dGVkIHRvICovCisjaWZkZWYgVE5f Q09NUE9SVAorICAgICAgICAgICAgICAgICAgICYmICFpc3RuY29tcG9ydCgpICAgIC8qICh3aXRo b3V0IFJGQyAyMjE3KSAgICAqLworI2VuZGlmIC8qIFROX0NPTVBPUlQgKi8KKyAgICAgICAgICAg ICAgICAgICApIHsJCQorCSAgICBkaWFsc3RhID0gRElBX0hBTkc7CisJICAgIGlmIChkaWFsZHB5 KQkJLyogYSBtb2RlbSBzZXJ2ZXIsIGp1c3QgcHJpbnQgYSBtc2cgKi8KKwkgICAgICBwcmludGYo IiBXQVJOSU5HIC0gbW9kZW0gaGFuZ3VwIGZhaWxlZFxyXG4iKTsgLyogZG9uJ3QgaGFuZ3VwISAq LworCSAgICByZXR1cm4oMCk7CisJfSBlbHNlIHsJCQkvKiBPdGhlcndpc2UgKi8KKwkgICAgeCA9 IHR0aGFuZygpOwkJLyogVGVsbCB0aGUgT1MgdG8gdHVybiBvZmYgRFRSLiAqLworCSAgICBpZiAo eCA+IDApIHsJCS8qIFllcywgdGVsbCByZXN1bHRzIGZyb20gdHRoYW5nKCkgKi8KKwkJZGlhbHN0 YSA9IERJQV9IVVA7CisJCWlmIChkaWFsZHB5KSBwcmludGYoIiBIYW5ndXAgT0tcclxuIik7CisJ ICAgIH0gZWxzZSBpZiAoeCA9PSAwKSB7CisJCWlmIChkaWFsZHB5KSBwcmludGYoIiBIYW5ndXAg c2tpcHBlZFxyXG4iKTsKKwkgICAgfSBlbHNlIHsKKwkJZGlhbHN0YSA9IERJQV9IQU5HOworCQlp ZiAoZGlhbGRweSkgcGVycm9yKCIgSGFuZ3VwIGVycm9yIik7CisJICAgIH0KKwkgICAgdHRmbHVp KCk7CisJfQorICAgIH0gZWxzZSBpZiAoZGlhbGRweSkgcHJpbnRmKCIgSGFuZ3VwIHNraXBwZWRc clxuIik7IC8qIERJQUwgSEFOR1VQIE9GRiAqLworICAgIHJldHVybih4KTsKK30KKworLyoKKyAg TSBEIE0gSCBVIFAgIC0tCisKKyAgU2VuZHMgZXNjYXBlIHNlcXVlbmNlIHRvIG1vZGVtLCB0aGVu IHNlbmRzIGl0cyBoYW5ndXAgY29tbWFuZC4gIFJldHVybnM6CisgICAwOiBJZiBtb2RlbSB0eXBl IGlzIDAgKGRpcmVjdCBzZXJpYWwgY29ubmVjdGlvbiksCisgICAgICBvciBpZiBtb2RlbSB0eXBl IGlzIDwgMCAobmV0d29yayBjb25uZWN0aW9uKSwKKyAgICAgIG9yIGlmIG5vIGFjdGlvbiB0YWtl biBiZWNhdXNlIERJQUwgTU9ERU0tSEFOR1VQIGlzIE9GRikKKyAgICAgICAgb3IgYmVjYXVzZSBu byBoYW5ndXAgc3RyaW5nIGZvciBjdXJyZW50IG1vZGVtIHR5cGUsCisgICAgICBvciBDLUtlcm1p dCBpcyBpbiByZW1vdGUgbW9kZSwKKyAgICAgIG9yIGlmIGFjdGlvbiB0YWtlbiBidXQgdGhlcmUg d2FzIG5vIHBvc2l0aXZlIHJlc3BvbnNlIGZyb20gbW9kZW07CisgICAxOiBTdWNjZXNzOiBtb2Rl bSBpcyBpbiBjb21tYW5kIHN0YXRlIGFuZCBhY2tub3dsZWRnZWQgdGhlIGhhbmd1cCBjb21tYW5k OworICAtMTogT24gbW9kZW0gY29tbWFuZCBlcnJvci4KKyovCitpbnQKK21kbWh1cCgpIHsKKyNp ZmRlZiBNRE1IVVAKKyAgICBpbnQgbSwgeCA9IDA7CisgICAgaW50IHhwYXJpdHk7CisgICAgaW50 IHNhdmNhcnI7CisgICAgZXh0ZXJuIGludCB0dGNhcnI7CisgICAgY2hhciAqcywgKnAsIGM7Cisg ICAgTURNSU5GICogbXAgPSBOVUxMOworCisgICAgZGVidWcoRjEwMSwibWRtaHVwIGRpYWxtaHUi LCIiLGRpYWxtaHUpOyAvKiBNT0RFTS1IQU5HVVAgTUVUSE9EICovCisgICAgZGVidWcoRjEwMSwi bWRtaHVwIGxvY2FsIiwiIixsb2NhbCk7CisKKyAgICBpZiAoZGlhbG1odSA9PSAwIHx8IGxvY2Fs ID09IDApCS8qIElmIERJQUwgTU9ERU0tSEFOR1VQIGlzIE9GRiwgKi8KKyAgICAgIHJldHVybigw KTsJCQkvKiAgb3Igbm90IGluIGxvY2FsIG1vZGUsIGZhaWwuICovCisKKyAgICBkZWJ1ZyhGMTAx LCJtZG1odXAgZGlhbHN0YSIsIiIsZGlhbHN0YSk7CisgICAgZGVidWcoRjEwMSwibWRtaHVwIG1k bXNldCIsIiIsbWRtc2V0KTsKKworICAgIGlmIChkaWFsc3RhICE9IERJQV9PSyAmJiAhbWRtc2V0 KQkvKiBJdCdzIG5vdCBhIGRpYWxlZCBjb25uZWN0aW9uICovCisgICAgICByZXR1cm4oMCk7CisK KyNpZmRlZiBDS19UQVBJCisgICAgaWYgKHR0dGFwaSAmJiAhdGFwaXBhc3MpCQkvKiBEb24ndCBo YW5ndXAgaWYgdXNpbmcgVEFQSSAqLworICAgICAgcmV0dXJuKDApOworI2VuZGlmIC8qIENLX1RB UEkgKi8KKworI2lmZGVmIENPTU1FTlQKKyAgICAvKiBObywgd2Ugc3RpbGwgbmVlZCB0aGlzIGZv ciBtb2RlbXMgdGhhdCBpZ25vcmUgRFRSICovCisgICAgaWYgKG15bWRtdHlwID09IG5fR0VORVJJ QyAmJiAhbmV0d29yaykKKyAgICAgIHJldHVybigwKTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisK KyAgICBkZWJ1ZyhGMTAxLCJtZG1odXAgZGlhbGVzYyIsIiIsZGlhbGVzYyk7CisgICAgaWYgKGRp YWxlc2MgPCAwKQorICAgICAgcmV0dXJuKDApOwkJCS8qIE5vIG1vZGVtIGVzY2FwZS1jaGFyYWN0 ZXIsIGZhaWwuICovCisKKyAgICBzYXZjYXJyID0gdHRjYXJyOworICAgIHR0Y2FyciA9IENBUl9P RkY7CisgICAgeCA9IHR0Y2hrKCk7CisgICAgdHRjYXJyID0gc2F2Y2FycjsKKyAgICBkZWJ1ZyhG MTAxLCJtZG1odXAgdHRjaGsiLCIiLHgpOworICAgIGlmICh4IDwgMCkJCQkJLyogVGhlcmUgYXBw ZWFycyB0byBiZSBubyBjb25uZWN0aW9uICovCisgICAgICByZXR1cm4oMCk7CisgICAgeCA9IDA7 CisKKyNpZmRlZiBPUzIKKy8qCisgIEluIE9TLzIsIGlmIENBUlJJRVIgaXMgT0ZGLCBhbmQgdGhl cmUgaXMgaW5kZWVkIG5vIGNhcnJpZXIgc2lnbmFsLCBhbnkKKyAgYXR0ZW1wdCB0byBkbyBpL28g YXQgdGhpcyBwb2ludCBjYW4gaGFuZyB0aGUgcHJvZ3JhbS4gIFRoaXMgbWlnaHQgYmUgdHJ1ZQor ICBmb3Igb3RoZXIgb3BlcmF0aW5nIHN5c3RlbXMgdG9vLgorKi8KKyAgICBpZiAoIW5ldHdvcmsJ CQkvKiBOb3QgYSBuZXR3b3JrIGNvbm5lY3Rpb24gKi8KKyNpZmRlZiBUTl9DT01QT1JUCisgICAg ICAgIHx8IGlzdG5jb21wb3J0KCkKKyNlbmRpZiAvKiBUTl9DT01QT1JUICovCisJKSB7CisJbSA9 IHR0Z21kbSgpOwkJCS8qIEdldCBtb2RlbSBzaWduYWxzICovCisJaWYgKChtID4gLTEpICYmICht ICYgQk1fRENEID09IDApKSAvKiBDaGVjayBmb3IgY2FycmllciAqLworCSAgcmV0dXJuKDApOwkJ CS8qIE5vIGNhcnJpZXIsIHNraXAgdGhlIHJlc3QgKi8KKyAgICB9CisjZW5kaWYgLyogT1MyICov CisKKyAgICBkZWJ1ZyhGMTExLCJtZG1odXAgbmV0d29yayIsdHRuYW1lLG5ldHdvcmspOworICAg IGRlYnVnKEYxMDEsIm1kbWh1cCBteW1kbXR5cCIsIiIsbXltZG10eXApOworICAgIGRlYnVnKEYx MDEsIm1kbWh1cCBtZG10eXAiLCIiLG1kbXR5cCk7CisgICAgLyogSW4gY2FzZSBvZiBIQU5HVVAg YmVmb3JlIERJQUwgKi8KKyAgICBpZiAobmV0d29yayAmJiBtZG10eXAgPCAxKQkJLyogU0VUIEhP U1QgYnV0IG5vIHN1YnNlcXVlbnQgKi8KKyAgICAgIHJldHVybigwKTsJCQkvKiBTRVQgTU9ERU0g VFlQRS4uLiAqLworICAgIGlmIChteW1kbXR5cCA9PSAwICYmIG1kbXR5cCA+IDApCisgICAgICBt eW1kbXR5cCA9IG1kbXR5cDsKKyAgICBpZiAobXltZG10eXAgPCAxKQkJCS8qIE5vdCB1c2luZyBh IG1vZGVtICovCisgICAgICByZXR1cm4oMCk7CisgICAgaWYgKG15bWRtdHlwID4gMCkJCQkvKiBB biBhY3R1YWwgbW9kZW0uLi4gKi8KKyAgICAgIG1wID0gbW9kZW1wW215bWRtdHlwXTsKKyAgICBp ZiAoIW1wKSB7CQkJCS8qIEdldCBwb2ludGVyIHRvIGl0cyBNRE1JTkYgc3RydWN0ICovCisJZGVi dWcoRjEwMCwibWRtaHVwIG5vIE1ETUlORiIsIiIsMCk7CisJcmV0dXJuKDApOworICAgIH0KKyAg ICBtZG1jYXBhcyA9IGRpYWxjYXBhcyA/IGRpYWxjYXBhcyA6IG1wLT5jYXBhczsKKyAgICB4eF9v ayA9IG1wLT5va19mbjsJCQkvKiBQb2ludGVyIHRvIHJlc3BvbnNlIHJlYWRlciAqLworCisgICAg cyA9IGRpYWxoY21kID8gZGlhbGhjbWQgOiBtcC0+aHVwX3N0cjsgLyogR2V0IGhhbmd1cCBjb21t YW5kICovCisgICAgaWYgKCFzKSBzID0gIiI7CisgICAgZGVidWcoRjExMCwibWRtaHVwIGh1cF9z dHIiLHMsMCk7CisgICAgaWYgKCEqcykgcmV0dXJuKDApOwkJCS8qIElmIG5vbmUsIGZhaWwuICov CisKKyAgICBpZiAodHRwa3Qoc3BlZWQsRkxPX0RJQUwscGFyaXR5KSA8IDApIC8qIENvbmRpdGlv biBsaW5lIGZvciBkaWFsaW5nICovCisgICAgICByZXR1cm4oLTEpOworCisgICAgeHBhcml0eSA9 IHBhcml0eTsJCQkvKiBTZXQgUEFSSVRZIHRvIE5PTkUgdGVtcG9yYXJpbHkgKi8KKyAgICBwYXJp dHkgPSAwOworCisgICAgLyogSW4gY2FzZSB0aGV5IGdhdmUgYSBTRVQgTU9ERU0gRVNDQVBFIGNv bW1hbmQgcmVjZW50bHkuLi4gKi8KKworICAgIGlmIChkaWFsZXNjIDwgMCB8fCBkaWFsZXNjID4g MTI3KQorICAgICAgYyA9IE5VTDsKKyAgICBlbHNlCisgICAgICBjID0gKGNoYXIpIChkaWFsZXNj ID8gZGlhbGVzYyA6IG1wLT5lc2NfY2hhcik7CisKKyAgICBpZiAobWRtY2FwYXMgJiBDS0RfQVQp IHsJCS8qIEhheWVzIGNvbXBhdGlibGUgKi8KKwllc2NidWZbMF0gPSBjOworCWVzY2J1ZlsxXSA9 IGM7CisJZXNjYnVmWzJdID0gYzsKKwllc2NidWZbM10gPSBOVUw7CisgICAgfSBlbHNlIHsJCQkJ LyogT3RoZXIgKi8KKwllc2NidWZbMF0gPSBjOworCWVzY2J1ZlsxXSA9IE5VTDsKKyAgICB9Cisg ICAgZGVidWcoRjExMCwibWRtaHVwIGVzY2J1ZiIsZXNjYnVmLDApOworICAgIGlmIChlc2NidWZb MF0pIHsJCQkvKiBIYXZlIGVzY2FwZSBzZXF1ZW5jZT8gKi8KKwlkZWJ1ZyhGMTAxLCJtZG1odXAg ZXNjX3RpbWUiLDAsbXAtPmVzY190aW1lKTsKKwlpZiAobXAtPmVzY190aW1lKQkJLyogSWYgd2Ug aGF2ZSBhIGd1YXJkIHRpbWUgKi8KKwkgIG1zbGVlcChtcC0+ZXNjX3RpbWUpOwkJLyogUGF1c2Ug Zm9yIGd1YXJkIHRpbWUgKi8KKwlkZWJ1ZyhGMTAwLCJtZG1odXAgcGF1c2UgMSBPSyIsIiIsMCk7 CisKKyNpZmRlZiBORVRDT05OCQkJCS8qIFNlbmQgbW9kZW0ncyBlc2NhcGUgc2VxdWVuY2UgKi8K KwlpZiAobmV0d29yaykgewkJCS8qIE11c3QgY2F0Y2ggZXJyb3JzIGhlcmUuICovCisJICAgIGlm ICh0dG9sKChDSEFSICopZXNjYnVmLChpbnQpc3RybGVuKChjaGFyICopZXNjYnVmKSkgPCAwKSB7 CisJCXBhcml0eSA9IHhwYXJpdHk7CisJCXJldHVybigtMSk7CisJICAgIH0KKwkgICAgZGVidWco RjExMCwibWRtaHVwIHR0c2xvdyBuZXQgb2siLGVzY2J1ZiwwKTsKKwl9IGVsc2UgeworI2VuZGlm IC8qIE5FVENPTk4gKi8KKwkgICAgdHRzbG93KChjaGFyICopZXNjYnVmLHdyKTsgLyogU2VuZCBl c2NhcGUgc2VxdWVuY2UgKi8KKwkgICAgZGVidWcoRjExMCwibWRtaHVwIHR0c2xvdyBvayIsZXNj YnVmLDApOworI2lmZGVmIE5FVENPTk4KKwl9CisjZW5kaWYgLyogTkVUQ09OTiAqLworCisJaWYg KG1wLT5lc2NfdGltZSkJCS8qIFBhdXNlIGZvciBndWFyZCB0aW1lIGFnYWluICovCisJICBtc2xl ZXAobXAtPmVzY190aW1lKTsKKwllbHNlCisJICBtc2xlZXAoNTAwKTsJCQkvKiBXYWl0IGhhbGYg YSBzZWMgZm9yIGVjaG9lcy4gKi8KKwlkZWJ1ZyhGMTAwLCJtZG1odXAgcGF1c2UgMSBPSyIsIiIs MCk7CisjaWZkZWYgQ09NTUVOVAorCXR0Zmx1aSgpOwkJCS8qIEZsdXNoIHJlc3BvbnNlIG9yIGVj aG8sIGlmIGFueSAqLworCWRlYnVnKEYxMDAsIm1kbWh1cCB0dGZsdWkgT0siLCIiLDApOworI2Vu ZGlmIC8qIENPTU1FTlQgKi8KKyAgICB9CisgICAgdHRzbG93KHMsd3IpOwkJCS8qIE5vdyBTZW5k IGhhbmd1cCBzdHJpbmcgKi8KKyAgICBkZWJ1ZyhGMTEwLCJtZG1odXAgdHRzbG93IG9rIixzLDAp OworLyoKKyAgVGhpcyBpcyBub3QgZXhhY3RseSByaWdodCwgYnV0IGl0IHdvcmtzLgorICBJZiB3 ZSBhcmUgb25saW5lOgorICAgIHRoZSBtb2RlbSBzYXlzIE9LIHdoZW4gaXQgZ2V0cyB0aGUgZXNj YXBlIHNlcXVlbmNlLAorICAgIGFuZCBpdCBzYXlzIE5PIENBUlJJRVIgd2hlbiBpdCBnZXRzIHRo ZSBoYW5ndXAgY29tbWFuZC4KKyAgSWYgd2UgYXJlIG9mZmxpbmU6CisgICAgdGhlIG1vZGVtIGRv ZXMgTk9UIHNheSBPSyAob3IgYW55dGhpbmcgZWxzZSkgd2hlbiBpdCBnZXRzIHRoZSBlc2Mgc2Vx dWVuY2UsCisgICAgYnV0IGl0IERPRVMgc2F5IE9LIChhbmQgbm90IE5PIENBUlJJRVIpIHdoZW4g aXQgZ2V0cyB0aGUgaGFuZ3VwIGNvbW1hbmQuCisgIFNvIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb24g c2hvdWxkIHJlYWQgdGhlIE9LIGluIGJvdGggY2FzZXMuCisgIE9mIGNvdXJzZSwgdGhpcyBpcyBz b21ld2hhdCBIYXllcy1zcGVjaWZpYy4uLgorKi8KKyAgICBpZiAoeHhfb2spIHsJCQkvKiBMb29r IGZvciBPSyByZXNwb25zZSAqLworCWRlYnVnKEYxMDAsIm1kbWh1cCBjYWxsaW5nIHJlc3BvbnNl IGZ1bmN0aW9uIiwiIiwwKTsKKwl4ID0gKCp4eF9vaykoMywxKTsJCS8qIEdpdmUgaXQgMyBzZWNv bmRzLCBiZSBzdHJpY3QuICovCisJZGVidWcoRjEwMSwibWRtaHVwIGhhbmd1cCByZXNwb25zZSIs IiIseCk7CisJbXNsZWVwKDUwMCk7CQkJLyogV2FpdCBoYWxmIGEgc2VjICovCisJdHRmbHVpKCk7 CQkJLyogR2V0IHJpZCBvZiBOTyBDQVJSSUVSLCBpZiBhbnkgKi8KKyAgICB9IGVsc2UgewkJCQkv KiBObyBPSyBmdW5jdGlvbiwgKi8KKwl4ID0gMTsJCQkJLyogc28gYXNzdW1lIGl0IHdvcmtlZCAq LworCWRlYnVnKEYxMDEsIm1kbWh1cCBubyBva19mbiIsIiIseCk7CisgICAgfQorICAgIHBhcml0 eSA9IHhwYXJpdHk7CQkJLyogUmVzdG9yZSBwcmV2YWlsaW5nIHBhcml0eSAqLworICAgIHJldHVy bih4KTsJCQkJLyogUmV0dXJuIE9LIGZ1bmN0aW9uJ3MgcmV0dXJuIGNvZGUuICovCisKKyNlbHNl ICAvKiBNRE1IVVAgbm90IGRlZmluZWQuICovCisKKyAgICBkZWJ1ZyhGMTAwLCJtZG1odXAgTURN SFVQIG5vdCBkZWZpbmVkIiwiIiwwKTsKKyAgICByZXR1cm4oMCk7CQkJCS8qIEFsd2F5cyBmYWls LiAqLworCisjZW5kaWYgLyogTURNSFVQICovCit9CisKKyNlbmRpZiAvKiBOT0lDUCAqLworI2Vs c2UgLyogTk9ESUFMICovCisKK2ludCBtZG10eXAgPSAwOwkJCQkvKiBEZWZhdWx0IG1vZGVtIHR5 cGUgKi8KKworaW50CQkJCQkvKiBUbyBhbGxvdyBOT0RJQUwgdmVyc2lvbnMgdG8gKi8KK21kbWh1 cCgpIHsJCQkJLyogY2FsbCBtZG1odXAoKSwgc28gY2FsbHMgdG8gICovCisgICAgcmV0dXJuKDAp OwkJCQkvKiBtZG1odXAoKSBuZWVkIG5vdCBiZSB3aXRoaW4gKi8KK30JCQkJCS8qICNpZm5kZWYg Tk9ESUFMIGNvbmRpdGlvbmFscyAqLworI2VuZGlmIC8qIE5PRElBTCAqLworI2Vsc2UKK2ludCBt ZG10eXAgPSAwOwkJCQkvKiBEZWZhdWx0IG1vZGVtIHR5cGUgKi8KKyNlbmRpZiAvKiBOT0xPQ0FM ICovCgpkaWZmIC0tZ2l0IGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9j a3VmaW8uYyBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1ZmlvLmMK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjViZmFhZQotLS0gL2Rldi9udWxs CisrKyBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1ZmlvLmMKQEAg LTAsMCArMSw4NTQ1IEBACisvKiBDIEsgVSBGIEkgTyAgLS0gIEtlcm1pdCBmaWxlIHN5c3RlbSBz dXBwb3J0IGZvciBVTklYLCBBZWdpcywgYW5kIFBsYW4gOSAqLworCisjZGVmaW5lIENLX05PTkJM T0NLICAgICAgICAgICAgICAgICAgICAgLyogU2VlIHpvdXRkdW1wKCkgKi8KKworI2lmZGVmIGFl Z2lzCitjaGFyICpja3p2ID0gIkFlZ2lzIEZpbGUgc3VwcG9ydCwgOS4wLjIxNiwgMjAgQXVnIDIw MTEiOworI2Vsc2UKKyNpZmRlZiBQbGFuOQorY2hhciAqY2t6diA9ICJQbGFuIDkgRmlsZSBzdXBw b3J0LCA5LjAuMjE2LCAyMCBBdWcgMjAxMSI7CisjZWxzZQorY2hhciAqY2t6diA9ICJVTklYIEZp bGUgc3VwcG9ydCwgOS4wLjIxNiwgMjAgQXVnIDIwMTEiOworI2VuZGlmIC8qIFBsYW45ICovCisj ZW5kaWYgLyogYWVnaXMgKi8KKy8qCisgIEF1dGhvcjogRnJhbmsgZGEgQ3J1eiA8ZmRjQGNvbHVt YmlhLmVkdT4sCisgIENvbHVtYmlhIFVuaXZlcnNpdHkgQWNhZGVtaWMgSW5mb3JtYXRpb24gU3lz dGVtcywgTmV3IFlvcmsgQ2l0eSwKKyAgYW5kIG90aGVycyBub3RlZCBpbiB0aGUgY29tbWVudHMg YmVsb3cuICBOb3RlOiBDVUNDQSA9IFByZXZpb3VzIG5hbWUgb2YKKyAgQ29sdW1iaWEgVW5pdmVy c2l0eSBBY2FkZW1pYyBJbmZvcm1hdGlvbiBTeXN0ZW1zLiAgTm90ZTogQWNJUyA9IFByZXZpb3Vz CisgIG9mIENvbHVtYmlhIFVuaXZlcnNpdHkgSW5mb3JtYXRpb24gVGVjaG5vbG9neS4KKworICBD b3B5cmlnaHQgKEMpIDE5ODUsIDIwMTEsCisgICAgVHJ1c3RlZXMgb2YgQ29sdW1iaWEgVW5pdmVy c2l0eSBpbiB0aGUgQ2l0eSBvZiBOZXcgWW9yay4KKyAgICBBbGwgcmlnaHRzIHJlc2VydmVkLiAg U2VlIHRoZSBDLUtlcm1pdCBDT1BZSU5HLlRYVCBmaWxlIG9yIHRoZQorICAgIGNvcHlyaWdodCB0 ZXh0IGluIHRoZSBja2NtYWkuYyBtb2R1bGUgZm9yIGRpc2NsYWltZXIgYW5kIHBlcm1pc3Npb25z LgorKi8KKworLyoKKyAgTk9URSBUTyBDT05UUklCVVRPUlM6IFRoaXMgZmlsZSwgYW5kIGFsbCB0 aGUgb3RoZXIgQy1LZXJtaXQgZmlsZXMsIG11c3QgYmUKKyAgY29tcGF0aWJsZSB3aXRoIEMgcHJl cHJvY2Vzc29ycyB0aGF0IHN1cHBvcnQgb25seSAjaWZkZWYsICNlbHNlLCAjZW5kaWYsCisgICNk ZWZpbmUsIGFuZCAjdW5kZWYuICBQbGVhc2UgZG8gbm90IHVzZSAjaWYsIGxvZ2ljYWwgb3BlcmF0 b3JzLCBvciBvdGhlcgorICBwcmVwcm9jZXNzb3IgZmVhdHVyZXMgaW4gYW55IG9mIHRoZSBwb3J0 YWJsZSBDLUtlcm1pdCBtb2R1bGVzLiAgWW91IGNhbiwKKyAgb2YgY291cnNlLCB1c2UgdGhlc2Ug Y29uc3RydWN0aW9ucyBpbiBwbGF0Zm9ybS1zcGVjaWZpYyBtb2R1bGVzIHdoZXJlIHlvdQorICBr bm93IHRoZXkgYXJlIHN1cHBvcnRlZC4KKyovCisvKiBJbmNsdWRlIEZpbGVzICovCisKKyNpZmRl ZiBNSU5JWDIKKyNkZWZpbmUgX01JTklYCisjZW5kaWYgLyogTUlOSVgyICovCisKKyNpbmNsdWRl ICJja2NzeW0uaCIKKyNpbmNsdWRlICJja2NkZWIuaCIKKyNpbmNsdWRlICJja2Nhc2MuaCIKKwor I2lmbmRlZiBOT0NTRVRTCisjaW5jbHVkZSAiY2tjeGxhLmgiCisjZW5kaWYgLyogTk9DU0VUUyAq LworCisvKiBUbyBhdm9pZCBwdWxsaW5nIGluIGFsbCBvZiBja3V1c3IuaCBzbyB3ZSBjb3B5IHRo ZSBmZXcgbmVlZGVkIHByb3RvdHlwZXMgKi8KKworc3RydWN0IG10YWIgewkJCQkvKiBNYWNybyB0 YWJsZSwgbGlrZSBrZXl3b3JkIHRhYmxlICovCisgICAgY2hhciAqa3dkOwkJCQkvKiBCdXQgd2l0 aCBwb2ludGVycyBmb3IgdmFscyAqLworICAgIGNoYXIgKm12YWw7CQkJCS8qIGluc3RlYWQgb2Yg aW50cy4gKi8KKyAgICBzaG9ydCBmbGdzOworfTsKK19QUk9UT1RZUCggaW50IG1sb29rLCAoc3Ry dWN0IG10YWIgW10sIGNoYXIgKiwgaW50KSApOworX1BST1RPVFlQKCBpbnQgZG9kbywgKGludCwg Y2hhciAqLCBpbnQpICk7CitfUFJPVE9UWVAoIGludCBwYXJzZXIsICggaW50ICkgKTsKKworI2lm ZGVmIENPTU1FTlQKKy8qIFRoaXMgY2F1c2VzIHRyb3VibGUgaW4gQy1LZXJtaXQgOC4wLiAgSSBk b24ndCByZW1lbWJlciB0aGUgb3JpZ2luYWwgKi8KKy8qIHJlYXNvbiBmb3IgdGhpcyBiZWluZyBo ZXJlIGJ1dCBpdCBtdXN0IGhhdmUgYmVlbiBuZWVkZWQgYXQgdGhlIHRpbWUuLi4gKi8KKyNpZmRl ZiBPU0YxMworI2lmZGVmIENLX0FOU0lDCisjaWZkZWYgX05PX1BST1RPCisjdW5kZWYgX05PX1BS T1RPCisjZW5kaWYgLyogX05PX1BST1RPICovCisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKyNlbmRp ZiAvKiBPU0YxMyAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKworI2lmbmRlZiBIUFVYUFJFNjUK KyNpbmNsdWRlIDxlcnJuby5oPgkJCS8qIEVycm9yIG51bWJlciBzeW1ib2xzICovCisjZWxzZQor I2lmbmRlZiBFUlJOT19JTkNMVURFRAorI2luY2x1ZGUgPGVycm5vLmg+CQkJLyogRXJyb3IgbnVt YmVyIHN5bWJvbHMgKi8KKyNlbmRpZgkvKiBFUlJOT19JTkNMVURFRCAqLworI2VuZGlmCS8qIEhQ VVhQUkU2NSAqLworCisjaW5jbHVkZSA8c2lnbmFsLmg+CisKKyNpZmRlZiBNSU5JWDIKKyN1bmRl ZiBNSU5JWAorI3VuZGVmIENLU1lTTE9HCisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8 dGltZS5oPgorI2RlZmluZSBOT0ZJTEVICisjZW5kaWYgLyogTUlOSVgyICovCisKKyNpZmRlZiBN SU5JWAorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1 ZGUgPHRpbWUuaD4KKyNlbHNlCisjaWZkZWYgUE9TSVgKKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNl bHNlCisjaWZkZWYgU1ZSMworI2luY2x1ZGUgPGxpbWl0cy5oPgorI2VuZGlmIC8qIFNWUjMgKi8K KyNlbmRpZiAvKiBQT1NJWCAqLworI2VuZGlmIC8qIE1JTklYICovCisvKgorICBEaXJlY3Rvcnkg U2VwYXJhdG9yIG1hY3JvcywgdG8gYWxsb3cgdGhpcyBtb2R1bGUgdG8gd29yayB3aXRoIGJvdGgg VU5JWCBhbmQKKyAgT1MvMjogQmVjYXVzZSBvZiBhbWJpZ3VpdHkgd2l0aCB0aGUgY29tbWFuZCBs aW5lIGVkaXRvciBlc2NhcGUgXCBjaGFyYWN0ZXIsCisgIHRoZSBkaXJlY3Rvcnkgc2VwYXJhdG9y IGlzIGN1cnJlbnRseSBsZWZ0IGFzIC8gZm9yIE9TLzIgdG9vLCBiZWNhdXNlIHRoZQorICBPUy8y IGtlcm5lbCBhbHNvIGFjY2VwdHMgLyBhcyBkaXJlY3Rvcnkgc2VwYXJhdG9yLiAgQnV0IHRoaXMg aXMgc3ViamVjdCB0bworICBjaGFuZ2UgaW4gZnV0dXJlIHZlcnNpb25zIHRvIGNvbmZvcm0gdG8g dGhlIG5vcm1hbCBPUy8yIHN0eWxlLgorKi8KKyNpZm5kZWYgRElSU0VQCisjZGVmaW5lIERJUlNF UCAgICAgICAnLycKKyNlbmRpZiAvKiBESVJTRVAgKi8KKyNpZm5kZWYgSVNESVJTRVAKKyNkZWZp bmUgSVNESVJTRVAoYykgICgoYyk9PScvJykKKyNlbmRpZiAvKiBJU0RJUlNFUCAqLworCisjaWZk ZWYgU0RJUkVOVAorI2RlZmluZSBESVJFTlQKKyNlbmRpZiAvKiBTRElSRU5UICovCisKKyNpZmRl ZiBYTkRJUgorI2luY2x1ZGUgPHN5cy9uZGlyLmg+CisjZWxzZSAvKiAhWE5ESVIgKi8KKyNpZmRl ZiBORElSCisjaW5jbHVkZSA8bmRpci5oPgorI2Vsc2UgLyogIU5ESVIsICFYTkRJUiAqLworI2lm ZGVmIFJUVQorI2luY2x1ZGUgIi91c3IvbGliL25kaXIuaCIKKyNlbHNlIC8qICFSVFUsICFORElS LCAhWE5ESVIgKi8KKyNpZmRlZiBESVJFTlQKKyNpZmRlZiBTRElSRU5UCisjaW5jbHVkZSA8c3lz L2RpcmVudC5oPgorI2Vsc2UKKyNpbmNsdWRlIDxkaXJlbnQuaD4KKyNlbmRpZiAvKiBTRElSRU5U ICovCisjZWxzZQorI2luY2x1ZGUgPHN5cy9kaXIuaD4KKyNlbmRpZiAvKiBESVJFTlQgKi8KKyNl bmRpZiAvKiBSVFUgKi8KKyNlbmRpZiAvKiBORElSICovCisjZW5kaWYgLyogWE5ESVIgKi8KKwor I2lmZGVmIFVOSVggICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBvaW50ZXIgYXJnIHRv IHdhaXQoKSBhbGxvd2VkICovCisjZGVmaW5lIENLX0NISUxEICAgICAgICAgICAgICAgICAgICAg ICAgLyogQXNzdW1lIHRoaXMgaXMgc2FmZSBpbiBhbGwgVU5JWCAqLworI2VuZGlmIC8qIFVOSVgg Ki8KKworZXh0ZXJuIGludCBiaW5hcnksIHJlY3Vyc2l2ZSwgc3RhdGhhY2s7CisjaWZkZWYgQ0tf Q1RSTFoKK2V4dGVybiBpbnQgZW9mbWV0aG9kOworI2VuZGlmIC8qIENLX0NUUkxaICovCisKKyNp bmNsdWRlIDxwd2QuaD4gICAgICAgICAgICAgICAgICAgICAgICAvKiBQYXNzd29yZCBmaWxlIGZv ciBzaGVsbCBuYW1lICovCisjaWZkZWYgQ0tfU1JQCisjaW5jbHVkZSA8dF9wd2QuaD4gICAgICAg ICAgICAgICAgICAgICAgLyogU1JQIFBhc3N3b3JkIGZpbGUgKi8KKyNlbmRpZiAvKiBDS19TUlAg Ki8KKworI2lmZGVmIEhQVVgxMF9UUlVTVEVECisjaW5jbHVkZSA8aHBzZWN1cml0eS5oPgorI2lu Y2x1ZGUgPHByb3QuaD4KKyNlbmRpZiAvKiBIUFVYMTBfVFJVU1RFRCAqLworCisjaWZkZWYgQ09N TUVOVAorLyogTW92ZWQgdG8gY2tjZGViLmggKi8KKyNpZmRlZiBQT1NJWAorI2RlZmluZSBVVElN RUgKKyNlbHNlCisjaWZkZWYgSFBVWDkKKyNkZWZpbmUgVVRJTUVICisjZW5kaWYgLyogSFBVWDkg Ki8KKyNlbmRpZiAvKiBQT1NJWCAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKworI2lmZGVmIFNZ U1VUSU1FSCAgICAgICAgICAgICAgICAgICAgICAgIC8qIDxzeXMvdXRpbWUuaD4gaWYgcmVxdWVz dGVkLCAgKi8KKyNpbmNsdWRlIDxzeXMvdXRpbWUuaD4gICAgICAgICAgICAgICAgICAvKiBmb3Ig ZXh0cmEgZmllbGRzIHJlcXVpcmVkIGJ5ICovCisjZWxzZSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogODhPcGVuIHNwZWMuICovCisjaWZkZWYgVVRJTUVIICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogb3IgPHV0aW1lLmg+IGlmIHJlcXVlc3RlZCAqLworI2luY2x1ZGUg PHV0aW1lLmg+ICAgICAgICAgICAgICAgICAgICAgIC8qIChTVlI0LCBQT1NJWCkgKi8KKyNpZm5k ZWYgQlNENDQKKyNpZm5kZWYgVjcKKy8qIE5vdCBzdXJlIHdoeSB0aGlzIGlzIGhlcmUuICBXaGF0 IGl0IGltcGxpZXMgaXMgdGhhdCB0aGUgY29kZSBicmFja2V0ZWQKKyAgIGJ5IFNZU1VUSU1FSCBp cyB2YWxpZCBvbiBhbGwgcGxhdGZvcm1zIG9uIHdoaWNoIHdlIHN1cHBvcnQgdGltZSAKKyAgIGZ1 bmN0aW9uYWxpdHkuICBCdXQgd2Uga25vdyB0aGF0IGlzIG5vdCB0cnVlIGJlY2F1c2UgdGhlIEJT RDQ0IGFuZCBWNworICAgcGxhdGZvcm1zIGRvIG5vdCBzdXBwb3J0IHN5cy91dGltZS5oIGFuZCB0 aGUgZGF0YSBzdHJ1Y3R1cmVzIHdoaWNoCisgICBhcmUgZGVmaW5lZCBpbiB0aGVtLiAgTm93IHRo aXMgd29ya2VkIGJlZm9yZSBiZWNhdXNlIHByaW9yIHRvIHRvZGF5J3MKKyAgIGNoYW5nZXMgdGhl IFVUSU1FSCBkZWZpbml0aW9uIGZvciBCU0Q0NCBhbmQgVjcgZGlkIG5vdCB0YWtlIHBsYWNlCisg ICB1bnRpbCBhZnRlciBTWVNVVElNRUggd2FzIGRlZmluZWQuICBJdCBhbHNvIHdvdWxkIG5vdCBo YXZlIGJlZW4gYSAKKyAgIHByb2JsZW0gaWYgdGhlIG9yZGVyaW5nIG9mIGFsbCB0aGUgdGltZSBi bG9ja3Mgd2FzIGNvbnNpc3RlbnQuICBBbGwgYnV0CisgICBvbmUgb2YgdGhlIGJsb2NrcyB3ZXJl IEJTRDQ0LCBWNywgU1lTVVRJTUVILCA8T1RIRVI+LiAgVGhhdCBvbmUgY2FzZQorICAgaXMgd2hl cmUgdGhpcyBwcm9ibGVtIHdhcyB0cmlnZ2VyZWQuCisqLworI2RlZmluZSBTWVNVVElNRUggICAg ICAgICAgICAgICAgICAgICAgIC8qIFVzZSB0aGlzIGZvciBib3RoIGNhc2VzLiAqLworI2VuZGlm IC8qIFY3ICovCisjZW5kaWYgLyogQlNENDQgKi8KKyNlbmRpZiAvKiBVVElNRUggKi8KKyNlbmRp ZiAvKiBTWVNVVElNRUggKi8KKworI2lmbmRlZiBOT1RJTUVTVEFNUAorI2lmZGVmIFBPU0lYCisj aWZuZGVmIEFTNDAwCisjZGVmaW5lIFRJTUVTVEFNUAorI2VuZGlmIC8qIEFTNDAwICovCisjZW5k aWYgLyogUE9TSVggKi8KKworI2lmZGVmIEJTRDQ0ICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIEJTRCA0LjQgKi8KKyNpZm5kZWYgVElNRVNUQU1QCisjZGVmaW5lIFRJTUVTVEFNUCAgICAg ICAgICAgICAgICAgICAgICAgLyogQ2FuIGRvIGZpbGUgZGF0ZXMgKi8KKyNlbmRpZiAvKiBUSU1F U1RBTVAgKi8KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPHN5cy90aW1lYi5oPgor CisjZWxzZSAgLyogTm90IEJTRDQ0ICovCisKKyNpZmRlZiBCU0Q0ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBCU0QgNC4zIGFuZCBiZWxvdyAqLworI2RlZmluZSBUSU1FU1RBTVAgICAg ICAgICAgICAgICAgICAgICAgIC8qIENhbiBkbyBmaWxlIGRhdGVzICovCisjaW5jbHVkZSA8dGlt ZS5oPiAgICAgICAgICAgICAgICAgICAgICAgLyogTmVlZCB0aGlzICovCisjaW5jbHVkZSA8c3lz L3RpbWViLmg+ICAgICAgICAgICAgICAgICAgLyogTmVlZCB0aGlzIGlmIHJlYWxseSBCU0QgKi8K KworI2Vsc2UgIC8qIE5vdCBCU0QgNC4zIGFuZCBiZWxvdyAqLworCisjaWZkZWYgU1ZPUlBPU0lY ICAgICAgICAgICAgICAgICAgICAgICAgLyogU3lzdGVtIFYgb3IgUE9TSVggKi8KKyNpZm5kZWYg VElNRVNUQU1QCisjZGVmaW5lIFRJTUVTVEFNUAorI2VuZGlmIC8qIFRJTUVTVEFNUCAqLworI2lu Y2x1ZGUgPHRpbWUuaD4KKworLyogdm9pZCB0enNldCgpOyAodGhlICJ2b2lkIiB0eXBlIHVwc2V0 cyBzb21lIGNvbXBpbGVycykgKi8KKyNpZm5kZWYgSVJJWDYwCisjaWZuZGVmIHVsdHJpeAorI2lm bmRlZiBDT05WRVg5CisvKiBDb252ZXhPUyA5LjAsIHN1cHBvc2VkbHkgUE9TSVgsIGhhcyBleHRl cm4gY2hhciAqdGltZXpvbmUoaW50LGludCkgKi8KKyNpZm5kZWYgUGxhbjkKK2V4dGVybiBsb25n IHRpbWV6b25lOworI2VuZGlmIC8qIFBsYW45ICovCisjZW5kaWYgLyogQ09OVkVYOSAqLworI2Vu ZGlmIC8qIHVsdHJpeCAqLworI2VuZGlmIC8qIElSSVg2MCAqLworI2VuZGlmIC8qIFNWT1JQT1NJ WCAqLworI2VuZGlmIC8qIEJTRDQgKi8KKyNlbmRpZiAvKiBCU0Q0NCAqLworCisjaWZkZWYgQ09I RVJFTlQKKyNpbmNsdWRlIDx0aW1lLmg+CisjZW5kaWYgLyogQ09IRVJFTlQgKi8KKworLyogSXMg YHknIGEgbGVhcCB5ZWFyPyAqLworI2RlZmluZSBsZWFwKHkpICgoKHkpICUgNCA9PSAwICYmICh5 KSAlIDEwMCAhPSAwKSB8fCAoeSkgJSA0MDAgPT0gMCkKKworLyogTnVtYmVyIG9mIGxlYXAgeWVh cnMgZnJvbSAxOTcwIHRvIGB5JyAobm90IGluY2x1ZGluZyBgeScgaXRzZWxmKS4gKi8KKyNkZWZp bmUgbmxlYXAoeSkgKCgoeSkgLSAxOTY5KSAvIDQgLSAoKHkpIC0gMTkwMSkgLyAxMDAgKyAoKHkp IC0gMTYwMSkgLyA0MDApCisKKyNlbmRpZiAvKiBOT1RJTUVTVEFNUCAqLworCisjaWZkZWYgQ0lF CisjaW5jbHVkZSA8c3RhdC5oPiAgICAgICAgICAgICAgICAgICAgICAgLyogRmlsZSBzdGF0dXMg Ki8KKyNlbHNlCisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNlbmRpZiAvKiBDSUUgKi8KKworCisK Ky8qIE1hY3JvIHRvIGFsbGV2aWF0ZSBpc2RpcigpIGNhbGxzIGludGVybmFsIHRvIHRoaXMgbW9k dWxlICovCisKK3N0YXRpYyBzdHJ1Y3Qgc3RhdCBTVEFUQlVGOworI2RlZmluZSB4aXNkaXIoYSkg KChzdGF0KGEsJlNUQVRCVUYpPT0tMSk/MDooU19JU0RJUihTVEFUQlVGLnN0X21vZGUpPzE6MCkp CisKK2V4dGVybiBjaGFyIHVpZGJ1ZltdOworZXh0ZXJuIGludCB4ZmVybG9nOworZXh0ZXJuIGNo YXIgKiB4ZmVyZmlsZTsKK2ludCBpa2xvZ29wZW4gPSAwOworc3RhdGljIHRpbWVfdCB0aW1lbm93 OworCisjZGVmaW5lIElLU0RNU0dMRU4gQ0tNQVhQQVRIKzUxMgorCitzdGF0aWMgY2hhciBpa3Nk bXNnW0lLU0RNU0dMRU5dOworCitleHRlcm4gaW50IGxvY2FsOworCitleHRlcm4gaW50IHNlcnZl ciwgZW5fbWtkLCBlbl9jd2QsIGVuX2RlbDsKKworLyoKKyAgRnVuY3Rpb25zIChuIGlzIG9uZSBv ZiB0aGUgcHJlZGVmaW5lZCBmaWxlIG51bWJlcnMgZnJvbSBja2NrZXIuaCk6CisKKyAgIHpvcGVu aShuLG5hbWUpICAgLS0gT3BlbnMgYW4gZXhpc3RpbmcgZmlsZSBmb3IgaW5wdXQuCisgICB6b3Bl bm8obixuYW1lLGF0dHIsZmNiKSAtLSBPcGVucyBhIG5ldyBmaWxlIGZvciBvdXRwdXQuCisgICB6 Y2xvc2UobikgICAgICAgIC0tIENsb3NlcyBhIGZpbGUuCisgICB6Y2hpbihuLCZjKSAgICAgIC0t IEdldHMgdGhlIG5leHQgY2hhcmFjdGVyIGZyb20gYW4gaW5wdXQgZmlsZS4KKyAgIHpzaW5sKG4s JnMseCkgICAgLS0gUmVhZCBhIGxpbmUgZnJvbSBmaWxlIG4sIG1heCBsZW4geCwgaW50byBhZGRy ZXNzIHMuCisgICB6c291dChuLHMpICAgICAgIC0tIFdyaXRlIGEgbnVsbC10ZXJtaW5hdGVkIHN0 cmluZyB0byBvdXRwdXQgZmlsZSwgYnVmZmVyZWQuCisgICB6c291dGwobixzKSAgICAgIC0tIExp a2UgenNvdXQsIGJ1dCBhcHBlbmRzIGEgbGluZSB0ZXJtaW5hdG9yLgorICAgenNvdXR4KG4scyx4 KSAgICAtLSBXcml0ZSB4IGNoYXJhY3RlcnMgdG8gb3V0cHV0IGZpbGUsIHVuYnVmZmVyZWQuCisg ICB6Y2hvdXQobixjKSAgICAgIC0tIEFkZCBhIGNoYXJhY3RlciB0byBhbiBvdXRwdXQgZmlsZSwg dW5idWZmZXJlZC4KKyAgIHpjaGtpKG5hbWUpICAgICAgLS0gQ2hlY2sgaWYgbmFtZWQgZmlsZSBl eGlzdHMgYW5kIGlzIHJlYWRhYmxlLCByZXR1cm4gc2l6ZS4KKyAgIHpjaGtvKG5hbWUpICAgICAg LS0gQ2hlY2sgaWYgbmFtZWQgZmlsZSBjYW4gYmUgY3JlYXRlZC4KKyAgIHpjaGtzcGEobmFtZSxu KSAgLS0gQ2hlY2sgaWYgbiBieXRlcyBhdmFpbGFibGUgdG8gY3JlYXRlIG5ldyBmaWxlLCBuYW1l LgorICAgem5ld24obmFtZSxzKSAgICAtLSBNYWtlIGEgbmV3IHVuaXF1ZSBmaWxlIG5hbWUgYmFz ZWQgb24gdGhlIGdpdmVuIG5hbWUuCisgICB6ZGVsZXQobmFtZSkgICAgIC0tIERlbGV0ZSB0aGUg bmFtZWQgZmlsZS4KKyAgIHp4cGFuZChzdHJpbmcpICAgLS0gRXhwYW5kcyB0aGUgZ2l2ZW4gd2ls ZGNhcmQgc3RyaW5nIGludG8gYSBsaXN0IG9mIGZpbGVzLgorICAgem5leHQoc3RyaW5nKSAgICAt LSBSZXR1cm5zIHRoZSBuZXh0IGZpbGUgZnJvbSB0aGUgbGlzdCBpbiAic3RyaW5nIi4KKyAgIHp4 cmV3aW5kKCkgICAgICAgLS0gUmV3aW5kIHp4cGFuZCBsaXN0LgorICAgenhjbWQobixjbWQpICAg ICAtLSBFeGVjdXRlIHRoZSBjb21tYW5kIGluIGEgbG93ZXIgZm9yayBvbiBmaWxlIG51bWJlciBu LgorICAgemNsb3NmKCkgICAgICAgICAtLSBDbG9zZSBpbnB1dCBmaWxlIGFzc29jaWF0ZWQgd2l0 aCB6eGNtZCgpJ3MgbG93ZXIgZm9yay4KKyAgIHpydG9sKG4xLG4yKSAgICAgLS0gQ29udmVydCBy ZW1vdGUgZmlsZW5hbWUgaW50byBsb2NhbCBmb3JtLgorICAgemx0b3IobjEsbjIpICAgICAtLSBD b252ZXJ0IGxvY2FsIGZpbGVuYW1lIGludG8gcmVtb3RlIGZvcm0uCisgICB6Y2hkaXIoZGlybmFt KSAgIC0tIENoYW5nZSB3b3JraW5nIGRpcmVjdG9yeS4KKyAgIHpob21lKCkgICAgICAgICAgLS0g UmV0dXJuIHBvaW50ZXIgdG8gaG9tZSBkaXJlY3RvcnkgbmFtZSBzdHJpbmcuCisgICB6a3NlbGYo KSAgICAgICAgIC0tIEtpbGwgc2VsZiwgbG9nIG91dCBvd24gam9iLgorICAgenNhdHRyKHN0cnVj dCB6YXR0ciAqKSAtLSBSZXR1cm4gYXR0cmlidXRlcyBmb3IgZmlsZSB3aGljaCBpcyBiZWluZyBz ZW50LgorICAgenN0aW1lKGYsIHN0cnVjdCB6YXR0ciAqLCB4KSAtIFNldCBmaWxlIGNyZWF0aW9u IGRhdGUgZnJvbSBhdHRyaWJ1dGUgcGFja2V0LgorICAgenJlbmFtZShvbGQsIG5ldykgLS0gUmVu YW1lIGEgZmlsZS4KKyAgIHpjb3B5KHNvdXJjZSxkZXN0aW5hdGlvbikgLS0gQ29weSBhIGZpbGUu CisgICB6bWtkaXIocGF0aCkgICAgICAgLS0gQ3JlYXRlIHRoZSBkaXJlY3RvcnkgcGF0aCBpZiBw b3NzaWJsZQorICAgemZucWZwKGZuYW1lLGxlbixmdWxscGF0aCkgLSBEZXRlcm1pbmUgZnVsbCBw YXRoIGZvciBmaWxlIG5hbWUuCisgICB6Z2V0ZnMobmFtZSkgICAgIC0tIHJldHVybiBmaWxlIHNp emUgcmVnYXJkbGVzcyBvZiBhY2Nlc3NpYmlsaXR5CisgICB6Y2hrcGlkKHBpZCkgICAgIC0tIHRl bGwgaWYgUElEIGlzIHZhbGlkIGFuZCBhY3RpdmUKKyovCisKKy8qIEtlcm1pdC1zcGVjaWZpYyBp bmNsdWRlcyAqLworLyoKKyAgRGVmaW5pdGlvbnMgaGVyZSBzdXBlcnNlZGUgdGhvc2UgZnJvbSBz eXN0ZW0gaW5jbHVkZSBmaWxlcy4KKyAgY2tjZGViLmggaXMgaW5jbHVkZWQgYWJvdmUuCisqLwor I2luY2x1ZGUgImNrY2tlci5oIiAgICAgICAgICAgICAgICAgICAgIC8qIEtlcm1pdCBkZWZpbml0 aW9ucyAqLworI2luY2x1ZGUgImNrdWNtZC5oIiAgICAgICAgICAgICAgICAgICAgIC8qIEZvciBr ZXl3b3JkIHRhYmxlcyAqLworI2luY2x1ZGUgImNrdXZlci5oIiAgICAgICAgICAgICAgICAgICAg IC8qIFZlcnNpb24gaGVyYWxkICovCisKK2NoYXIgKmNrenN5cyA9IEhFUkFMRDsKKworLyoKKyAg RmlsZSBhY2Nlc3MgY2hlY2tpbmcgLi4uICBUaGVyZSBhcmUgdHdvIGNhbGxzIHRvIGFjY2Vzcygp IGluIHRoaXMgbW9kdWxlLgorICBJZiB0aGlzIHByb2dyYW0gaXMgaW5zdGFsbGVkIHNldHVpZCBv ciBzZXRnaWQgb24gYSBCZXJrZWxleS1iYXNlZCBVTklYCisgIHN5c3RlbSB0aGF0IGRvZXMgTk9U IGluY29ycG9yYXRlIHRoZSBzYXZlZC1vcmlnaW5hbC1lZmZlY3RpdmUtdWlkL2dpZAorICBmZWF0 dXJlLCB0aGVuLCB3aGVuIHdlIGhhdmUgc3dhcHBlZCB0aGUgZWZmZWN0aXZlIGFuZCBvcmlnaW5h bCB1aWQvZ2lkLAorICBhY2Nlc3MoKSBmYWlscyBiZWNhdXNlIGl0IHVzZXMgd2hhdCBpdCB0aGlu a3MgYXJlIHRoZSBSRUFMIGlkcywgYnV0IHdlIGhhdmUKKyAgc3dhcHBlZCB0aGVtLiAgVGhpcyBv Y2N1cnMgb24gc3lzdGVtcyB3aGVyZSBBTllCU0QgaXMgZGVmaW5lZCwgTk9TRVRSRVUKKyAgaXMg Tk9UIGRlZmluZWQsIGFuZCBTQVZFRFVJRCBpcyBOT1QgZGVmaW5lZC4gIFNvLCBpbiB0aGVvcnks IHdlIHNob3VsZCB0YWtlCisgIGNhcmUgb2YgdGhpcyBzaXR1YXRpb24gbGlrZSBzbzoKKworICAg IGlmZGVmIEFOWUJTRAorICAgIGlmbmRlZiBOT1NFVFJFVQorICAgIGlmbmRlZiBTQVZFRFVJRAor ICAgIGRlZmluZSBTV19BQ0NfSUQKKyAgICBlbmRpZgorICAgIGVuZGlmCisgICAgZW5kaWYKKwor ICBCdXQgd2UgY2FuJ3QgdGVzdCBzdWNoIGEgZ2VuZXJhbCBzY2hlbWUgZXZlcnl3aGVyZSwgc28g bGV0J3Mgb25seSBkbyB0aGlzCisgIHdoZW4gd2Uga25vdyB3ZSBoYXZlIHRvLi4uCisqLworI2lm ZGVmIE5FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5lWFRTVEVQIDEuMC0zLjAg Ki8KKyNkZWZpbmUgU1dfQUNDX0lECisjZW5kaWYgLyogTkVYVCAqLworCisvKiBTdXBwb3J0IGZv ciB0aWxkZS1leHBhbnNpb24gaW4gZmlsZSBhbmQgZGlyZWN0b3J5IG5hbWVzICovCisKKyNpZmRl ZiBQT1NJWAorI2RlZmluZSBOQU1FRU5WICJMT0dOQU1FIgorI2Vsc2UKKyNpZmRlZiBCU0Q0Cisj ZGVmaW5lIE5BTUVFTlYgIlVTRVIiCisjZWxzZQorI2lmZGVmIEFUVFNWCisjZGVmaW5lIE5BTUVF TlYgIkxPR05BTUUiCisjZW5kaWYgLyogQVRUU1YgKi8KKyNlbmRpZiAvKiBCU0Q0ICovCisjZW5k aWYgLyogUE9TSVggKi8KKworLyogQmVya2VsZXkgVW5peCBWZXJzaW9uIDQueCAqLworLyogNC4x YnNkIHN1cHBvcnQgZnJvbSBDaGFybGVzIEUgQnJvb2tzLCBFRE4tVkFYICovCisKKyNpZmRlZiBC U0Q0CisjaWZkZWYgTUFYTkFNTEVOCisjZGVmaW5lIEJTRDQyCisjZW5kaWYgLyogTUFYTkFNTEVO ICovCisjZW5kaWYgLyogQlNENCAqLworCisvKiBEZWZpbml0aW9ucyBvZiBzb21lIHN5c3RlbSBj b21tYW5kcyAqLworCitjaGFyICpERUxDTUQgPSAicm0gLWYgIjsgICAgICAgICAgICAgICAgLyog Rm9yIGZpbGUgZGVsZXRpb24gKi8KK2NoYXIgKkNQWUNNRCA9ICJjcCAiOyAgICAgICAgICAgICAg ICAgICAvKiBGb3IgZmlsZSBjb3B5ICovCitjaGFyICpSRU5DTUQgPSAibXYgIjsgICAgICAgICAg ICAgICAgICAgLyogRm9yIGZpbGUgcmVuYW1lICovCitjaGFyICpQV0RDTUQgPSAicHdkICI7ICAg ICAgICAgICAgICAgICAgLyogRm9yIHNheWluZyB3aGVyZSBJIGFtICovCisKKyNpZmRlZiBDT01N RU5UCisjaWZkZWYgSFBVWDEwCitjaGFyICpESVJDTUQgPSAiL3Vzci9iaW4vbHMgLWwgIjsgICAg ICAgLyogRm9yIGRpcmVjdG9yeSBsaXN0aW5nICovCitjaGFyICpESVJDTTIgPSAiL3Vzci9iaW4v bHMgLWwgIjsgICAgICAgLyogRm9yIGRpcmVjdG9yeSBsaXN0aW5nLCBubyBhcmdzICovCisjZWxz ZQorY2hhciAqRElSQ01EID0gIi9iaW4vbHMgLWwgIjsgICAgICAgICAgIC8qIEZvciBkaXJlY3Rv cnkgbGlzdGluZyAqLworY2hhciAqRElSQ00yID0gIi9iaW4vbHMgLWwgIjsgICAgICAgICAgIC8q IEZvciBkaXJlY3RvcnkgbGlzdGluZywgbm8gYXJncyAqLworI2VuZGlmIC8qIEhQVVgxMCAqLwor I2Vsc2UKK2NoYXIgKkRJUkNNRCA9ICJscyAtbCAiOyAgICAgICAgICAgICAgICAvKiBGb3IgZGly ZWN0b3J5IGxpc3RpbmcgKi8KK2NoYXIgKkRJUkNNMiA9ICJscyAtbCAiOyAgICAgICAgICAgICAg ICAvKiBGb3IgZGlyZWN0b3J5IGxpc3RpbmcsIG5vIGFyZ3MgKi8KKyNlbmRpZiAvKiBDT01NRU5U ICovCisKK2NoYXIgKlRZUENNRCA9ICJjYXQgIjsgICAgICAgICAgICAgICAgICAvKiBGb3IgdHlw aW5nIGEgZmlsZSAqLworCisjaWZkZWYgSFBVWAorY2hhciAqTUFJTENNRCA9ICJtYWlseCI7ICAg ICAgICAgICAgICAgIC8qIEZvciBzZW5kaW5nIG1haWwgKi8KKyNlbHNlCisjaWZkZWYgREdVWDU0 MAorY2hhciAqTUFJTENNRCA9ICJtYWlseCI7CisjZWxzZQorI2lmZGVmIFVOSVgKKyNpZmRlZiBD S19NQUlMQ01ECitjaGFyICpNQUlMQ01EID0gQ0tfTUFJTENNRDsJCS8qIENGTEFHUyBvdmVycmlk ZSAqLworI2Vsc2UKK2NoYXIgKk1BSUxDTUQgPSAiTWFpbCI7CQkJLyogRGVmYXVsdCAqLworI2Vu ZGlmIC8qIENLX01BSUxDTUQgKi8KKyNlbHNlCitjaGFyICpNQUlMQ01EID0gIiI7CisjZW5kaWYg LyogVU5JWCAqLworI2VuZGlmIC8qIEhQVVggKi8KKyNlbmRpZiAvKiBER1VYNDAgKi8KKworI2lm ZGVmIFVOSVgKKyNpZmRlZiBBTllCU0QgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBCU0Qg dXNlcyBscHIgdG8gc3Bvb2wgKi8KKyNpZmRlZiBER1VYNTQwICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBBbmQgREcvVVggKi8KK2NoYXIgKiBQUklOVENNRCA9ICJscCI7CisjZWxzZQorY2hh ciAqIFBSSU5UQ01EID0gImxwciI7CisjZW5kaWYgLyogREdVWDU0MCAqLworI2Vsc2UgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFN5cyBWIHVzZXMgbHAgKi8KKyNpZmRlZiBU UlMxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBleGNlcHQgZm9yIFRhbmR5LTE2LzYw MDAuLi4gKi8KK2NoYXIgKiBQUklOVENNRCA9ICJscHIiOworI2Vsc2UKK2NoYXIgKiBQUklOVENN RCA9ICJscCI7CisjZW5kaWYgLyogVFJTMTYgKi8KKyNlbmRpZiAvKiBBTllCU0QgKi8KKyNlbHNl ICAvKiBOb3QgVU5JWCAqLworI2RlZmluZSBQUklOVENNRCAiIgorI2VuZGlmIC8qIFVOSVggKi8K KworI2lmZGVmIEZUMTggICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZvcnR1bmUgRm9y OlBybyAxLjggKi8KKyN1bmRlZiBCU0Q0CisjZW5kaWYgLyogRlQxOCAqLworCisjaWZkZWYgQlNE NAorY2hhciAqU1BBQ01EID0gInB3ZCA7IGRmIC4iOyAgICAgICAgICAgIC8qIFNwYWNlIGluIGN1 cnJlbnQgZGlyZWN0b3J5ICovCisjZWxzZQorI2lmZGVmIEZUMTgKK2NoYXIgKlNQQUNNRCA9ICJw d2QgOyBkdSA7IGRmIC4iOworI2Vsc2UKK2NoYXIgKlNQQUNNRCA9ICJkZiAiOworI2VuZGlmIC8q IEZUMTggKi8KKyNlbmRpZiAvKiBCU0Q0ICovCisKK2NoYXIgKlNQQUNNMiA9ICJkZiAiOyAgICAg ICAgICAgICAgICAgICAvKiBGb3Igc3BhY2UgaW4gc3BlY2lmaWVkIGRpcmVjdG9yeSAqLworCisj aWZkZWYgRlQxOAorI2RlZmluZSBCU0Q0CisjZW5kaWYgLyogRlQxOCAqLworCisjaWZkZWYgQlNE NAorY2hhciAqV0hPQ01EID0gImZpbmdlciAiOworI2Vsc2UKK2NoYXIgKldIT0NNRCA9ICJ3aG8g IjsKKyNlbmRpZiAvKiBCU0Q0ICovCisKKy8qIE1vcmUgc3lzdGVtLWRlcGVuZGVudCBpbmNsdWRl cywgd2hpY2ggZGVwZW5kIG9uIHN5bWJvbHMgZGVmaW5lZCAqLworLyogaW4gdGhlIEtlcm1pdC1z cGVjaWZpYyBpbmNsdWRlcy4gIE9oIHdoYXQgYSB0YW5nbGVkIHdlYiB3ZSB3ZWF2ZS4uLiAqLwor CisjaWZkZWYgQ09IRVJFTlQgICAgICAgICAgICAgICAgICAgICAgICAgLyogPHN5cy9maWxlLmg+ ICovCisjZGVmaW5lIE5PRklMRUgKKyNlbmRpZiAvKiBDT0hFUkVOVCAqLworCisjaWZkZWYgTUlO SVgKKyNkZWZpbmUgTk9GSUxFSAorI2VuZGlmIC8qIE1JTklYICovCisKKyNpZmRlZiBhZWdpcwor I2RlZmluZSBOT0ZJTEVICisjZW5kaWYgLyogYWVnaXMgKi8KKworI2lmZGVmIHVub3MKKyNkZWZp bmUgTk9GSUxFSAorI2VuZGlmIC8qIHVub3MgKi8KKworI2lmbmRlZiBOT0ZJTEVICisjaW5jbHVk ZSA8c3lzL2ZpbGUuaD4KKyNlbmRpZiAvKiBOT0ZJTEVIICovCisKKyNpZm5kZWYgaXM2OGsgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBXaGV0aGVyIHRvIGluY2x1ZGUgPGZjbnRsLmg+ICov CisjaWZuZGVmIEJTRDQxICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQWxsIGJ1dCBhIGNv dXBsZSBVTklYZXMgaGF2ZSBpdC4gKi8KKyNpZm5kZWYgRlQxOAorI2lmbmRlZiBDT0hFUkVOVAor I2luY2x1ZGUgPGZjbnRsLmg+CisjZW5kaWYgLyogQ09IRVJFTlQgKi8KKyNlbmRpZiAvKiBGVDE4 ICAqLworI2VuZGlmIC8qIEJTRDQxICovCisjZW5kaWYgLyogaXM2OGsgKi8KKworI2lmZGVmIENP SEVSRU5UCisjaWZkZWYgX0kzODYKKyNpbmNsdWRlIDxmY250bC5oPgorI2Vsc2UKKyNpbmNsdWRl IDxzeXMvZmNudGwuaD4KKyNlbmRpZiAvKiBfSTM4NiAqLworI2VuZGlmIC8qIENPSEVSRU5UICov CisKK2V4dGVybiBpbnQgaW5zZXJ2ZXI7CQkJLyogSSBhbSBJS1NEICovCitpbnQgZ3Vlc3QgPSAw OyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQW5vbnltb3VzIHVzZXIgKi8KKworI2lmZGVm IElLU0QKK2V4dGVybiBpbnQgaXNndWVzdDsKK2V4dGVybiBjaGFyICogYW5vbnJvb3Q7CisjZW5k aWYgLyogSUtTRCAqLworCisjaWZkZWYgQ0tfTE9HSU4KKyNkZWZpbmUgR1VFU1RQQVNTIDI1Ngor c3RhdGljIGNoYXIgZ3Vlc3RwYXNzW0dVRVNUUEFTU10gPSB7IE5VTCwgTlVMIH07IC8qIEFub255 bW91cyAicGFzc3dvcmQiICovCitzdGF0aWMgaW50IGxvZ2dlZF9pbiA9IDA7ICAgICAgICAgICAg ICAgLyogU2V0IHdoZW4gdXNlciBpcyBsb2dnZWQgaW4gKi8KK3N0YXRpYyBpbnQgYXNrcGFzc3dk ID0gMDsgICAgICAgICAgICAgICAvKiBIYXZlIE9LIHVzZXIsIG11c3QgYXNrIGZvciBwYXNzd2Qg Ki8KKyNpZmRlZiBDS19QQU0KK2V4dGVybiBpbnQgZ290ZW1wdHlwYXNzd2Q7CisjZW5kaWYgLyog Q0tfUEFNICovCisjZW5kaWYgLyogQ0tfTE9HSU4gKi8KKworI2lmZGVmIENLUk9PVAorc3RhdGlj IGNoYXIgY2tyb290W0NLTUFYUEFUSCsxXSA9IHsgTlVMLCBOVUwgfTsKK3N0YXRpYyBpbnQgY2ty b290c2V0ID0gMDsKK2ludCBja3Jvb3RlcnIgPSAwOworI2VuZGlmIC8qIENLUk9PVCAqLworCitf UFJPVE9UWVAoIFZPSUQgaWdub3JzaWdzLCAodm9pZCkgKTsKK19QUk9UT1RZUCggVk9JRCByZXN0 b3JzaWdzLCAodm9pZCkgKTsKKyNpZmRlZiBTRUxFQ1QKK19QUk9UT1RZUCggaW50IHR0d2FpdCwg KGludCwgaW50KSApOwkvKiBja3V0aW8uYyAqLworI2VuZGlmCS8qIFNFTEVDVCAqLworCisvKgor ICBDaGFuZ2UgYXJndW1lbnQgdG8gIihjb25zdCBjaGFyICopIiBpZiB0aGlzIGNhdXNlcyB0cm91 YmxlLgorICBPci4uLiBpZiBpdCBjYXVzZXMgdHJvdWJsZSwgdGhlbiBtYXliZSBpdCB3YXMgYWxy ZWFkeSBkZWNsYXJlZAorICBpbiBhIGhlYWRlciBmaWxlIGFmdGVyIGFsbCwgc28geW91IGNhbiBy ZW1vdmUgdGhpcyBwcm90b3R5cGUuCisqLworI2lmbmRlZiBOREdQV05BTSAvKiBJZiBub3QgZGVm aW5lZCBObyBEZWNsYXJlIGdldHB3bmFtLi4uICovCisjaWZuZGVmIF9QT1NJWF9TT1VSQ0UKKyNp Zm5kZWYgTkVYVAorI2lmbmRlZiBTVlI0CisvKiBQT1NJWCA8cHdkLmg+IGFscmVhZHkgZ2F2ZSBw cm90b3R5cGVzIGZvciB0aGVzZS4gKi8KKyNpZmRlZiBJUklYNDAKK19QUk9UT1RZUCggc3RydWN0 IHBhc3N3ZCAqIGdldHB3bmFtLCAoY29uc3QgY2hhciAqKSApOworI2Vsc2UKKyNpZmRlZiBJUklY NTEKK19QUk9UT1RZUCggc3RydWN0IHBhc3N3ZCAqIGdldHB3bmFtLCAoY29uc3QgY2hhciAqKSAp OworI2Vsc2UKKyNpZmRlZiBNX1VOSVgKK19QUk9UT1RZUCggc3RydWN0IHBhc3N3ZCAqIGdldHB3 bmFtLCAoY29uc3QgY2hhciAqKSApOworI2Vsc2UKKyNpZmRlZiBIUFVYOQorX1BST1RPVFlQKCBz dHJ1Y3QgcGFzc3dkICogZ2V0cHduYW0sIChjb25zdCBjaGFyICopICk7CisjZWxzZQorI2lmZGVm IEhQVVgxMAorX1BST1RPVFlQKCBzdHJ1Y3QgcGFzc3dkICogZ2V0cHduYW0sIChjb25zdCBjaGFy ICopICk7CisjZWxzZQorI2lmZGVmIERDR1BXTkFNCitfUFJPVE9UWVAoIHN0cnVjdCBwYXNzd2Qg KiBnZXRwd25hbSwgKGNvbnN0IGNoYXIgKikgKTsKKyNlbHNlCitfUFJPVE9UWVAoIHN0cnVjdCBw YXNzd2QgKiBnZXRwd25hbSwgKGNoYXIgKikgKTsKKyNlbmRpZiAvKiBEQ0dQV05BTSAqLworI2Vu ZGlmIC8qIEhQVVgxMCAqLworI2VuZGlmIC8qIEhQVVg5ICovCisjZW5kaWYgLyogTV9VTklYICov CisjZW5kaWYgLyogSVJJWDUxICovCisjZW5kaWYgLyogSVJJWDQwICovCisjaWZuZGVmIFNVTk9T NAorI2lmbmRlZiBIUFVYOQorI2lmbmRlZiBIUFVYMTAKKyNpZm5kZWYgX1NDT19EUworX1BST1RP VFlQKCBzdHJ1Y3QgcGFzc3dkICogZ2V0cHd1aWQsIChQV0lEX1QpICk7CisjZW5kaWYgLyogX1ND T19EUyAqLworI2VuZGlmIC8qIEhQVVgxMCAqLworI2VuZGlmIC8qIEhQVVg5ICovCisjZW5kaWYg LyogU1VOT1M0ICovCitfUFJPVE9UWVAoIHN0cnVjdCBwYXNzd2QgKiBnZXRwd2VudCwgKHZvaWQp ICk7CisjZW5kaWYgLyogU1ZSNCAqLworI2VuZGlmIC8qIE5FWFQgKi8KKyNlbmRpZiAvKiBfUE9T SVhfU09VUkNFICovCisjZW5kaWYgLyogTkRHUFdOQU0gKi8KKworI2lmZGVmIENLX1NIQURPVyAg ICAgICAgICAgICAgICAgICAgICAgIC8qIFNoYWRvdyBQYXNzd29yZHMuLi4gKi8KKyNpbmNsdWRl IDxzaGFkb3cuaD4KKyNlbmRpZiAvKiBDS19TSEFET1cgKi8KKyNpZmRlZiBDS19QQU0gICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBQQU0uLi4gKi8KKyNpZmRlZiBNQUNPU1gKKyNpbmNsdWRl IDxwYW0vcGFtX2FwcGwuaD4KKyNlbHNlIC8qIE1BQ09TWCAqLworI2luY2x1ZGUgPHNlY3VyaXR5 L3BhbV9hcHBsLmg+CisjZW5kaWYgLyogTUFDT1NYICovCisjaWZuZGVmIFBBTV9TRVJWSUNFX1RZ UEUgICAgICAgICAgICAgICAgLyogRGVmaW5lcyB3aGljaCBQQU0gc2VydmljZSB3ZSBhcmUgKi8K KyNkZWZpbmUgUEFNX1NFUlZJQ0VfVFlQRSAia2VybWl0IgorI2VuZGlmIC8qIFBBTV9TRVJWSUNF X1RZUEUgKi8KKworI2lmZGVmIFNPTEFSSVMKKyNkZWZpbmUgUEFNX0NPTlNUIAorI2Vsc2UgLyog U09MQVJJUyAqLworI2RlZmluZSBQQU1fQ09OU1QgQ09OU1QKKyNlbmRpZiAKKworc3RhdGljIGNo YXIgKiBwYW1fcHcgPSBOVUxMOworCitpbnQKKyNpZmRlZiBDS19BTlNJQworcGFtX2NiKGludCBu dW1fbXNnLAorICAgICAgIFBBTV9DT05TVCBzdHJ1Y3QgcGFtX21lc3NhZ2UgKiptc2csCisgICAg ICAgc3RydWN0IHBhbV9yZXNwb25zZSAqKnJlc3AsCisgICAgICAgdm9pZCAqYXBwZGF0YV9wdHIK KyAgICAgICApCisjZWxzZSAvKiBDS19BTlNJQyAqLworcGFtX2NiKG51bV9tc2csIG1zZywgcmVz cCwgYXBwZGF0YV9wdHIpCisgICAgaW50IG51bV9tc2c7CisgICAgUEFNX0NPTlNUIHN0cnVjdCBw YW1fbWVzc2FnZSAqKm1zZzsKKyAgICBzdHJ1Y3QgcGFtX3Jlc3BvbnNlICoqcmVzcDsKKyAgICB2 b2lkICphcHBkYXRhX3B0cjsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworICAgIGludCBpOwor CisgICAgZGVidWcoRjExMSwicGFtX2NiIiwibnVtX21zZyIsbnVtX21zZyk7CisKKyAgICBmb3Ig KGkgPSAwOyBpIDwgbnVtX21zZzsgaSsrKSB7CisgICAgICAgIGNoYXIgbWVzc2FnZVtQQU1fTUFY X01TR19TSVpFXTsKKworICAgICAgICAvKiBJc3N1ZSBwcm9tcHQgYW5kIGdldCByZXNwb25zZSAq LworICAgICAgICBkZWJ1ZyhGMTExLCJwYW1fY2IiLCJNZXNzYWdlIixpKTsKKyAgICAgICAgZGVi dWcoRjExMSwicGFtX2NiIixtc2dbaV0tPm1zZyxtc2dbaV0tPm1zZ19zdHlsZSk7CisgICAgICAg IGlmIChtc2dbaV0tPm1zZ19zdHlsZSA9PSBQQU1fRVJST1JfTVNHKSB7CisgICAgICAgICAgICBk ZWJ1ZyhGMTExLCJwYW1fY2IiLCJQQU0gRVJST1IiLDApOworICAgICAgICAgICAgZnByaW50Zihz dGRvdXQsIiVzXG4iLCBtc2dbaV0tPm1zZyk7CisgICAgICAgICAgICByZXR1cm4oMCk7CisgICAg ICAgIH0gZWxzZSBpZiAobXNnW2ldLT5tc2dfc3R5bGUgPT0gUEFNX1RFWFRfSU5GTykgeworICAg ICAgICAgICAgZGVidWcoRjExMSwicGFtX2NiIiwiUEFNIFRFWFQgSU5GTyIsMCk7CisgICAgICAg ICAgICBmcHJpbnRmKHN0ZG91dCwiJXNcbiIsIG1zZ1tpXS0+bXNnKTsKKyAgICAgICAgICAgIHJl dHVybigwKTsKKyAgICAgICAgfSBlbHNlIGlmIChtc2dbaV0tPm1zZ19zdHlsZSA9PSBQQU1fUFJP TVBUX0VDSE9fT0ZGKSB7CisgICAgICAgICAgICBkZWJ1ZyhGMTExLCJwYW1fY2IiLCJSZWFkaW5n IHJlc3BvbnNlLCBubyBlY2hvIiwwKTsKKyAgICAgICAgICAgIC8qIFVnbHkgaGFjay4gIFdlIGNo ZWNrIHRvIHNlZSBpZiBhIHBhc3N3b3JkIGhhcyBiZWVuIHB1c2hlZCAqLworICAgICAgICAgICAg LyogaW50byB6dnBhc3N3ZCgpLiAgVGhpcyB3b3VsZCBiZSB0cnVlIGlmIHRoZSBwYXNzd29yZCB3 YXMgICovCisgICAgICAgICAgICAvKiByZWNlaXZlZCBieSBSRU1PVEUgTE9HSU4uICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGlmIChwYW1fcHcpIHsKKyAg ICAgICAgICAgICAgICBja3N0cm5jcHkobWVzc2FnZSxwYW1fcHcsUEFNX01BWF9NU0dfU0laRSk7 CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICByZWFkcGFzcygoY2hhciAqKW1z Z1tpXS0+bXNnLG1lc3NhZ2UsUEFNX01BWF9NU0dfU0laRSk7CisgICAgICAgIH0gZWxzZSBpZiAo bXNnW2ldLT5tc2dfc3R5bGUgPT0gUEFNX1BST01QVF9FQ0hPX09OKSB7CisgICAgICAgICAgICBk ZWJ1ZyhGMTExLCJwYW1fY2IiLCJSZWFkaW5nIHJlc3BvbnNlLCB3aXRoIGVjaG8iLDApOworICAg ICAgICAgICAgcmVhZHRleHQoKGNoYXIgKiltc2dbaV0tPm1zZyxtZXNzYWdlLFBBTV9NQVhfTVNH X1NJWkUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZGVidWcoRjExMSwicGFtX2Ni IiwidW5rbm93biBzdHlsZSIsMCk7CisgICAgICAgICAgICByZXR1cm4oMCk7CisgICAgICAgIH0K KworICAgICAgICAvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgdGhpcyBtZXNzYWdlJ3MgcmVzcG9uc2Ug c3RydWN0dXJlICovCisgICAgICAgIHJlc3BbaV0gPSAoc3RydWN0IHBhbV9yZXNwb25zZSAqKSBt YWxsb2Moc2l6ZW9mIChzdHJ1Y3QgcGFtX3Jlc3BvbnNlKSk7CisgICAgICAgIGlmICghcmVzcFtp XSkgeworICAgICAgICAgICAgaW50IGo7CisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJwYW1fY2Ii LCJtYWxsb2MgZmFpbHVyZSIsMCk7CisgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgaTsgaisr KSB7CisgICAgICAgICAgICAgICAgZnJlZShyZXNwW2pdLT5yZXNwKTsKKyAgICAgICAgICAgICAg ICBmcmVlKHJlc3Bbal0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuKDApOwor ICAgICAgICB9CisKKyAgICAgICAgLyogQWxsb2NhdGUgYSBidWZmZXIgZm9yIHRoZSByZXNwb25z ZSAqLworICAgICAgICByZXNwW2ldLT5yZXNwID0gKGNoYXIgKikgbWFsbG9jKChpbnQpc3RybGVu KG1lc3NhZ2UpICsgMSk7CisgICAgICAgIGlmICghcmVzcFtpXS0+cmVzcCkgeworICAgICAgICAg ICAgaW50IGo7CisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJwYW1fY2IiLCJtYWxsb2MgZmFpbHVy ZSIsMCk7CisgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgaTsgaisrKSB7CisgICAgICAgICAg ICAgICAgZnJlZShyZXNwW2pdLT5yZXNwKTsKKyAgICAgICAgICAgICAgICBmcmVlKHJlc3Bbal0p OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZnJlZShyZXNwW2ldKTsKKyAgICAgICAgICAg IHJldHVybigwKTsKKyAgICAgICAgfQorICAgICAgICAvKiBSZXR1cm4gdGhlIHJlc3VsdHMgYmFj ayB0byBQQU0gKi8KKyAgICAgICAgc3RyY3B5KHJlc3BbaV0tPnJlc3AsIG1lc3NhZ2UpOwkvKiBz YWZlIChwcmVjaGVja2VkKSAqLworICAgICAgICByZXNwW2ldLT5yZXNwX3JldGNvZGUgPSAwOwor ICAgIH0KKyAgICBkZWJ1ZyhGMTEwLCJwYW1fY2IiLCJFeGl0aW5nIiwwKTsKKyAgICByZXR1cm4o MCk7Cit9CisjZW5kaWYgLyogQ0tfUEFNICovCisKKy8qIERlZmluZSBtYWNyb3MgZm9yIGdldHRp bmcgZmlsZSB0eXBlICovCisKKyNpZmRlZiBPWE9TCisvKgorICBPbGl2ZXR0aSBYL09TIDIuMyBo YXMgU19JU1JFRyBhbmQgU19JU0RJUiBkZWZpbmVkCisgIGluY29ycmVjdGx5LCBzbyB3ZSBmb3Jj ZSB0aGVpciByZWRlZmluaXRpb24uCisqLworI3VuZGVmIFNfSVNSRUcKKyN1bmRlZiBTX0lTRElS CisjZW5kaWYgLyogT1hPUyAqLworCisjaWZkZWYgVVRTViAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogU2FtZSBkZWFsIGZvciBBbWRhaGwgVVRTViAqLworI3VuZGVmIFNfSVNSRUcKKyN1 bmRlZiBTX0lTRElSCisjZW5kaWYgLyogVVRTViAqLworCisjaWZkZWYgVU5JU1lTNTIgICAgICAg ICAgICAgICAgICAgICAgICAgLyogQW5kIGZvciBVTklTWVMgVVRTIFYgNS4yICovCisjdW5kZWYg U19JU1JFRworI3VuZGVmIFNfSVNESVIKKyNlbmRpZiAvKiBVTklTWVM1MiAqLworCisjaWZkZWYg SUNMU1ZSMyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQW5kIGZvciBvbGQgSUNMIHZlcnNp b25zICovCisjdW5kZWYgU19JU1JFRworI3VuZGVmIFNfSVNESVIKKyNlbmRpZiAvKiBJQ0xTVlIz ICovCisKKyNpZmRlZiBJU0RJUkJVRyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBbHNvIGFs bG93IHRoaXMgZnJvbSBjb21tYW5kIGxpbmUgKi8KKyNpZmRlZiBTX0lTUkVHCisjdW5kZWYgU19J U1JFRworI2VuZGlmIC8qIFNfSVNSRUcgKi8KKyNpZmRlZiBTX0lTRElSCisjdW5kZWYgU19JU0RJ UgorI2VuZGlmIC8qICBTX0lTRElSICovCisjZW5kaWYgLyogSVNESVJCVUcgKi8KKworI2lmbmRl ZiBfSUZNVAorI2lmZGVmIFNfSUZNVAorI2RlZmluZSBfSUZNVCBTX0lGTVQKKyNlbHNlCisjZGVm aW5lIF9JRk1UIDAxNzAwMDAKKyNlbmRpZiAvKiBTX0lGTVQgKi8KKyNlbmRpZiAvKiBfSUZNVCAq LworCisjaWZuZGVmIFNfSVNSRUcKKyNkZWZpbmUgU19JU1JFRyhtKSAoKChtKSAmIFNfSUZNVCkg PT0gU19JRlJFRykKKyNlbmRpZiAvKiBTX0lTUkVHICovCisjaWZuZGVmIFNfSVNESVIKKyNkZWZp bmUgU19JU0RJUihtKSAoKChtKSAmIFNfSUZNVCkgPT0gU19JRkRJUikKKyNlbmRpZiAvKiBTX0lT RElSICovCisKKy8qIFRoZSBmb2xsb3dpbmcgbWFpbmx5IGZvciBOZVhUU1RFUC4uLiAqLworCisj aWZuZGVmIFNfSVdVU1IKKyNkZWZpbmUgU19JV1VTUiAwMDAwMjAwCisjZW5kaWYgLyogU19JV1VT UiAqLworCisjaWZuZGVmIFNfSVJHUlAKKyNkZWZpbmUgU19JUkdSUCAwMDAwMDQwCisjZW5kaWYg LyogU19JUkdSUCAqLworCisjaWZuZGVmIFNfSVdHUlAKKyNkZWZpbmUgU19JV0dSUCAwMDAwMDIw CisjZW5kaWYgLyogU19JV0dSUCAqLworCisjaWZuZGVmIFNfSVhHUlAKKyNkZWZpbmUgU19JWEdS UCAwMDAwMDEwCisjZW5kaWYgLyogU19JWEdSUCAqLworCisjaWZuZGVmIFNfSVJPVEgKKyNkZWZp bmUgU19JUk9USCAwMDAwMDA0CisjZW5kaWYgLyogU19JUk9USCAqLworCisjaWZuZGVmIFNfSVdP VEgKKyNkZWZpbmUgU19JV09USCAwMDAwMDAyCisjZW5kaWYgLyogU19JV09USCAqLworCisjaWZu ZGVmIFNfSVhPVEgKKyNkZWZpbmUgU19JWE9USCAwMDAwMDAxCisjZW5kaWYgLyogU19JWE9USCAq LworLyoKKyAgRGVmaW5lIG1heGltdW0gbGVuZ3RoIGZvciBhIGZpbGUgbmFtZSBpZiBub3QgYWxy ZWFkeSBkZWZpbmVkLgorICBOT1RFOiBUaGlzIGFwcGxpZXMgdG8gYSBwYXRoIHNlZ21lbnQgKGRp cmVjdG9yeSBvciBmaWxlIG5hbWUpLAorICBub3QgdGhlIGVudGlyZSBwYXRoIHN0cmluZywgd2hp Y2ggY2FuIGJlIENLTUFYUEFUSCBieXRlcyBsb25nLgorKi8KKyNpZmRlZiBRTlgKKyNpZmRlZiBf TUFYX0ZOQU1FCisjZGVmaW5lIE1BWE5BTUxFTiBfTUFYX0ZOQU1FCisjZWxzZQorI2RlZmluZSBN QVhOQU1MRU4gNDgKKyNlbmRpZiAvKiBfTUFYX0ZOQU1FICovCisjZWxzZQorI2lmbmRlZiBNQVhO QU1MRU4KKyNpZmRlZiBzdW4KKyNkZWZpbmUgTUFYTkFNTEVOIDI1NQorI2Vsc2UKKyNpZmRlZiBG SUxFTkFNRV9NQVgKKyNkZWZpbmUgTUFYTkFNTEVOIEZJTEVOQU1FX01BWAorI2Vsc2UKKyNpZmRl ZiBOQU1FX01BWAorI2RlZmluZSBNQVhOQU1MRU4gTkFNRV9NQVgKKyNlbHNlCisjaWZkZWYgX1BP U0lYX05BTUVfTUFYCisjZGVmaW5lIE1BWE5BTUxFTiBfUE9TSVhfTkFNRV9NQVgKKyNlbHNlCisj aWZkZWYgX0RfTkFNRV9NQVgKKyNkZWZpbmUgTUFYTkFNTEVOIF9EX05BTUVfTUFYCisjZWxzZQor I2lmZGVmIERJUlNJWgorI2RlZmluZSBNQVhOQU1MRU4gRElSU0laCisjZWxzZQorI2RlZmluZSBN QVhOQU1MRU4gMTQKKyNlbmRpZiAvKiBESVJTSVogKi8KKyNlbmRpZiAvKiBfRF9OQU1FX01BWCAq LworI2VuZGlmIC8qIF9QT1NJWF9OQU1FX01BWCAqLworI2VuZGlmIC8qIE5BTUVfTUFYICovCisj ZW5kaWYgLyogRklMRU5BTUVfTUFYICovCisjZW5kaWYgLyogc3VuICovCisjZW5kaWYgLyogTUFY TkFNTEVOICovCisjZW5kaWYgLyogUU5YICovCisKKyNpZmRlZiBDT01NRU5UCisvKiBBcyBvZiAy MDAxLTExLTAzIHRoaXMgaXMgaGFuZGxlZCBpbiBja2NkZWIuaCAqLworLyogTG9uZ2VzdCBwYXRo bmFtZSAuLi4gKi8KKy8qCisgIEJld2FyZTogTUFYUEFUSExFTiBpcyBvbmUgb2YgVU5JWCdzIGRp cnR5IGxpdHRsZSBzZWNyZXRzLiAgV2hlcmUgaXMgaXQKKyAgZGVmaW5lZD8gIFdobyBrbm93cy4u LiAgPHBhcmFtLmg+LCA8bW9kLmg+LCA8dW5pc3RkLmg+LCA8bGltaXRzLmg+LCAuLi4KKyAgVGhl cmUgaXMgbm90IG5lY2Vzc2FyaWx5IGV2ZW4gYSBkZWZpbml0aW9uIGZvciBpdCBhbnl3aGVyZSwg b3IgaXQgbWlnaHQgaGF2ZQorICBhbm90aGVyIG5hbWUuICBJZiB5b3UgZ2V0IGl0IHdyb25nLCBi YWQgdGhpbmdzIGhhcHBlbiB3aXRoIGdldGN3ZCgpIGFuZC9vcgorICBnZXR3ZCgpLiAgSWYgeW91 IGFsbG9jYXRlIGEgYnVmZmVyIHRoYXQgaXMgdG9vIHNob3J0LCBnZXR3ZCgpIG1pZ2h0IHdyaXRl CisgIG92ZXIgbWVtb3J5IGFuZCBnZXRjd2QoKSB3aWxsIGZhaWwgd2l0aCBFUkFOR0UuICBUaGUg ZGVmaW5pdGlvbnMgb2YgdGhlc2UKKyAgZnVuY3Rpb25zIChlLmcuIGluIFNWSUQgb3IgUE9TSVgu MSkgZG8gbm90IHRlbGwgeW91IGhvdyB0byBkZXRlcm1pbmUgdGhlCisgIG1heGltdW0gcGF0aCBs ZW5ndGggaW4gb3JkZXIgdG8gYWxsb2NhdGUgYSBidWZmZXIgdGhhdCBpcyB0aGUgcmlnaHQgc2l6 ZS4KKyovCisjaWZkZWYgQlNENDQKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4gICAgICAgICAgICAg ICAgICAvKiBGb3IgTUFYUEFUSExFTiAqLworI2VuZGlmIC8qIEJTRDQ0ICovCisjaWZkZWYgQ09I RVJFTlQKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4gIC8qIGZvciBNQVhQQVRITEVOLCBuZWVkZWQg Zm9yIC1ERElSRU5UICovCisjZW5kaWYgLyogQ09IRVJFTlQgKi8KKyNlbmRpZiAvKiBDT01NRU5U ICovCisKKyNpZmRlZiBNQVhQQVRITEVOCisjaWZkZWYgTUFYUEFUSAorI3VuZGVmIE1BWFBBVEgK KyNlbmRpZiAvKiBNQVhQQVRIICovCisjZGVmaW5lIE1BWFBBVEggTUFYUEFUSExFTgorI2Vsc2UK KyNpZmRlZiBQQVRIX01BWAorI2RlZmluZSBNQVhQQVRIIFBBVEhfTUFYCisjZWxzZQorI2lmZGVm IF9QT1NJWF9QQVRIX01BWAorI2RlZmluZSBNQVhQQVRIIF9QT1NJWF9QQVRIX01BWAorI2Vsc2UK KyNpZmRlZiBCU0Q0MgorI2RlZmluZSBNQVhQQVRIIDEwMjQKKyNlbHNlCisjaWZkZWYgU1ZSNAor I2RlZmluZSBNQVhQQVRIIDEwMjQKKyNlbHNlCisjZGVmaW5lIE1BWFBBVEggMjU1CisjZW5kaWYg LyogU1ZSNCAqLworI2VuZGlmIC8qIEJTRDQyICovCisjZW5kaWYgLyogX1BPU0lYX1BBVEhfTUFY ICovCisjZW5kaWYgLyogUEFUSF9NQVggKi8KKyNlbmRpZiAvKiBNQVhQQVRITEVOICovCisKKy8q IE1heGltdW0gbnVtYmVyIG9mIGZpbGVuYW1lcyBmb3Igd2lsZGNhcmQgZXhwYW5zaW9uICovCisK KyNpZm5kZWYgTUFYV0xECisvKiBBbHJlYWR5IGRlZmluZWQgaW4gY2tjZGViLmggc28gdGhlIGZv bGxvd2luZyBpcyBzdXBlcmZsdW91cy4gKi8KKy8qIERvbid0IGV4cGVjdCBjaGFuZ2luZyB0aGVt IHRvIGhhdmUgYW55IGVmZmVjdC4gKi8KKyNpZmRlZiBDS19TTUFMTAorI2RlZmluZSBNQVhXTEQg NTAKKyNlbHNlCisjaWZkZWYgQklHQlVGT0sKKyNkZWZpbmUgTUFYV0xEIDEwMjQwMAorI2Vsc2UK KyNkZWZpbmUgTUFYV0xEIDgxOTIKKyNlbmRpZiAvKiBCSUdCVUZPSyAqLworI2VuZGlmIC8qIENL X1NNQUxMICovCisjZW5kaWYgLyogTUFYV0xEICovCisKK3N0YXRpYyBpbnQgbWF4bmFtZXMgPSBN QVhXTEQ7CisKKy8qIERlZmluZSB0aGUgc2l6ZSBvZiB0aGUgc3RyaW5nIHNwYWNlIGZvciBmaWxl bmFtZSBleHBhbnNpb24uICovCisKKyNpZm5kZWYgRFlOQU1JQworI2lmZGVmIFBST1ZYMQorI2Rl ZmluZSBTU1BBQ0UgNTAwCisjZWxzZQorI2lmZGVmIEJTRDI5CisjZGVmaW5lIFNTUEFDRSA1MDAK KyNlbHNlCisjaWZkZWYgcGRwMTEKKyNkZWZpbmUgU1NQQUNFIDUwMAorI2Vsc2UKKyNpZmRlZiBh ZWdpcworI2RlZmluZSBTU1BBQ0UgMTAwMDAgICAgICAgICAgICAgICAgICAgIC8qIFNpemUgb2Yg c3RyaW5nLWdlbmVyYXRpbmcgYnVmZmVyICovCisjZWxzZSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogRGVmYXVsdCBzdGF0aWMgYnVmZmVyIHNpemUgKi8KKyNpZmRlZiBCSUdC VUZPSworI2RlZmluZSBTU1BBQ0UgNjUwMDAgICAgICAgICAgICAgICAgICAgIC8qIFNpemUgb2Yg c3RyaW5nLWdlbmVyYXRpbmcgYnVmZmVyICovCisjZWxzZQorI2RlZmluZSBTU1BBQ0UgMjAwMCAg ICAgICAgICAgICAgICAgICAgIC8qIHNpemUgb2Ygc3RyaW5nLWdlbmVyYXRpbmcgYnVmZmVyICov CisjZW5kaWYgLyogQklHQlVGT0sgKi8KKyNlbmRpZiAvKiBhZWdpcyAqLworI2VuZGlmIC8qIHBk cDExICovCisjZW5kaWYgLyogQlNEMjkgKi8KKyNlbmRpZiAvKiBQUk9WWDEgKi8KK3N0YXRpYyBj aGFyIHNzcGFjZVtTU1BBQ0VdOyAgICAgICAgICAgICAvKiBCdWZmZXIgZm9yIGdlbmVyYXRpbmcg ZmlsZW5hbWVzICovCisjZWxzZSAvKiBpcyBEWU5BTUlDICovCisjaWZkZWYgQ0tfNjRCSVQKKyNk ZWZpbmUgU1NQQUNFIDIwMDAwMDAwMDAJCS8qIFR3byBiaWxsaW9uIGJ5dGVzICovCisjZWxzZQor I2lmZGVmIEJJR0JVRk9LCisjZGVmaW5lIFNTUEFDRSAxMDAwMDAwMAkJCS8qIFRlbiBtaWxsaW9u ICovCisjZWxzZQorI2RlZmluZSBTU1BBQ0UgMTAwMDAJCQkvKiBUZW4gdGhvdXNhbmQgKi8KKyNl bmRpZiAvKiBCSUdCVUZPSyAqLworI2VuZGlmCS8qIENLXzY0QklUICovCitjaGFyICpzc3BhY2Ug PSAoY2hhciAqKTA7CisjZW5kaWYgLyogRFlOQU1JQyAqLworc3RhdGljIGludCBzc3BsZW4gPSBT U1BBQ0U7CQkvKiBMZW5ndGggb2Ygc3RyaW5nIHNwYWNlIGJ1ZmZlciAqLworCisjaWZkZWYgRENM RkRPUEVOCisvKiBmZG9wZW4oKSBuZWVkcyBkZWNsYXJpbmcgYmVjYXVzZSBpdCdzIG5vdCBkZWNs YXJlZCBpbiA8c3RkaW8uaD4gKi8KK19QUk9UT1RZUCggRklMRSAqIGZkb3BlbiwgKGludCwgY2hh ciAqKSApOworI2VuZGlmIC8qIERDTEZET1BFTiAqLworCisjaWZkZWYgRENMUE9QRU4KKy8qIHBv cGVuKCkgbmVlZHMgZGVjbGFyaW5nIGJlY2F1c2UgaXQncyBub3QgZGVjbGFyZWQgaW4gPHN0ZGlv Lmg+ICovCitfUFJPVE9UWVAoIEZJTEUgKiBwb3BlbiwgKGNoYXIgKiwgY2hhciAqKSApOworI2Vu ZGlmIC8qIERDTFBPUEVOICovCisKK2V4dGVybiBpbnQgbm9wdXNoOworCisvKiBNb3JlIGludGVy bmFsIGZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KKy8qCisgKiBUaGUgcGF0aCBzdHJ1Y3R1cmUgaXMg dXNlZCB0byByZXByZXNlbnQgdGhlIG5hbWUgdG8gbWF0Y2guCisgKiBFYWNoIHNsYXNoLXNlcGFy YXRlZCBzZWdtZW50IG9mIHRoZSBuYW1lIGlzIGtlcHQgaW4gb25lCisgKiBzdWNoIHN0cnVjdHVy ZSwgYW5kIHRoZXkgYXJlIGxpbmtlZCB0b2dldGhlciwgdG8gbWFrZQorICogdHJhdmVyc2luZyB0 aGUgbmFtZSBlYXNpZXIuCisgKi8KK3N0cnVjdCBwYXRoIHsKKyAgICBjaGFyIG5wYXJ0W01BWE5B TUxFTis0XTsgICAgICAgICAgICAvKiBuYW1lIHBhcnQgb2YgcGF0aCBzZWdtZW50ICovCisgICAg c3RydWN0IHBhdGggKmZ3ZDsgICAgICAgICAgICAgICAgICAgLyogZm9yd2FyZCBwdHIgKi8KK307 CisjaWZuZGVmIE5PUFVTSAorX1BST1RPVFlQKCBpbnQgc2h4cGFuZCwgKGNoYXIgKiwgY2hhciAq W10sIGludCApICk7CisjZW5kaWYgLyogTk9QVVNIICovCitfUFJPVE9UWVAoIHN0YXRpYyBpbnQg ZmdlbiwgKGNoYXIgKiwgY2hhciAqW10sIGludCApICk7CitfUFJPVE9UWVAoIHN0YXRpYyBWT0lE IHRyYXZlcnNlLCAoc3RydWN0IHBhdGggKiwgY2hhciAqLCBjaGFyICopICk7CitfUFJPVE9UWVAo IHN0YXRpYyBWT0lEIGFkZHJlc3VsdCwgKGNoYXIgKiwgaW50KSApOworI2lmZGVmIENPTU1FTlQK Ky8qIFJlcGxhY2VkIGJ5IGNrbWF0Y2goKSAqLworX1BST1RPVFlQKCBzdGF0aWMgaW50IG1hdGNo LCAoY2hhciAqLCBjaGFyICopICk7CisjZW5kaWYgLyogQ09NTUVOVCAqLworX1BST1RPVFlQKCBj aGFyICogd2hvYW1pLCAodm9pZCkgKTsKK19QUk9UT1RZUCggVUlEX1QgcmVhbF91aWQsICh2b2lk KSApOworX1BST1RPVFlQKCBzdGF0aWMgc3RydWN0IHBhdGggKnNwbGl0cGF0aCwgKGNoYXIgKnAp ICk7CitfUFJPVE9UWVAoIGNoYXIgKiB6ZHRzdHIsICh0aW1lX3QpICk7CitfUFJPVE9UWVAoIHRp bWVfdCB6c3RyZHQsIChjaGFyICosIGludCkgKTsKKworLyogU29tZSBzeXN0ZW1zIGRlZmluZSB0 aGVzZSBzeW1ib2xzIGluIGluY2x1ZGUgZmlsZXMsIG90aGVycyBkb24ndC4uLiAqLworCisjaWZu ZGVmIFJfT0sKKyNkZWZpbmUgUl9PSyA0ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGb3Ig YWNjZXNzICovCisjZW5kaWYgLyogUl9PSyAqLworCisjaWZuZGVmIFdfT0sKKyNkZWZpbmUgV19P SyAyCisjZW5kaWYgLyogV19PSyAqLworCisjaWZuZGVmIFhfT0sKKyNkZWZpbmUgWF9PSyAxCisj ZW5kaWYgLyogWF9PSyAqLworCisjaWZuZGVmIE9fUkRPTkxZCisjZGVmaW5lIE9fUkRPTkxZIDAw MAorI2VuZGlmIC8qIE9fUkRPTkxZICovCisKKy8qIHN5c2xvZyBhbmQgd3RtcCBpdGVtcyBmb3Ig SW50ZXJuZXQgS2VybWl0IFNlcnZpY2UgKi8KKworZXh0ZXJuIGNoYXIgKiBjbGllbnRob3N0OyAg ICAgICAgICAgICAgIC8qIEZyb20gY2tjbWFpLmMuICovCisKK3N0YXRpYyBjaGFyIGZ1bGxuYW1l W0NLTUFYUEFUSCsxXTsKK3N0YXRpYyBjaGFyIHRtcDJbQ0tNQVhQQVRIKzFdOworCitleHRlcm4g aW50IGNreGxvZ2dpbmc7CisKKyNpZmRlZiBDS1hQUklOVEYgICAgICAgICAgICAgICAgICAgICAg ICAvKiBPdXIgcHJpbnRmIG1hY3JvIGNvbmZsaWN0cyB3aXRoICovCisjdW5kZWYgcHJpbnRmICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogdXNlIG9mICJwcmludGYiIGluIHN5c2xvZy5oICov CisjZW5kaWYgLyogQ0tYUFJJTlRGICovCisjaWZkZWYgQ0tTWVNMT0cKKyNpZmRlZiBSVEFJWAor I2luY2x1ZGUgPHN5cy9zeXNsb2cuaD4KKyNlbHNlICAvKiBSVEFJWCAqLworI2luY2x1ZGUgPHN5 c2xvZy5oPgorI2VuZGlmIC8qIFJUQUlYICovCisjZW5kaWYgLyogQ0tTWVNMT0cgKi8KKyNpZmRl ZiBDS1hQUklOVEYKKyNkZWZpbmUgcHJpbnRmIGNreHByaW50ZgorI2VuZGlmIC8qIENLWFBSSU5U RiAqLworCitpbnQgY2t4YW5vbiA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgLyogQW5vbnlt b3VzIGxvZ2luIG9rICovCitpbnQgY2t4cGVybXMgPSAwMDQwOyAgICAgICAgICAgICAgICAgICAg LyogQW5vbnltb3VzIGZpbGUgcGVybWlzc2lvbnMgKi8KK2ludCBja3hwcml2ID0gMTsJCQkvKiBQ cml2J2QgbG9naW4gb2sgKi8KKworI2lmbmRlZiBYRkVSRklMRQorI2RlZmluZSBYRkVSRklMRSAi L3Zhci9sb2cvaWtzZC5sb2ciCisjZW5kaWYgLyogWEZFUkZJTEUgKi8KKworLyogd3RtcCBsb2dn aW5nIGZvciBJS1NELi4uICovCisKKyNpZm5kZWYgQ0tXVE1QICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiB3dG1wIGxvZ2dpbmcgbm90IHNlbGVjdGVkICovCitpbnQgY2t4d3RtcCA9IDA7ICAg ICAgICAgICAgICAgICAgICAgICAgLyogS25vdyB0aGlzIGF0IHJ1bnRpbWUgKi8KKyNlbHNlICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB3dG1wIGZpbGUgZGV0YWlscyAqLwor aW50IGNreHd0bXAgPSAxOworI2lmZGVmIFVUTVBCVUcgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIFVuZm9ydHVuYXRlbHkuLi4gKi8KKy8qCisgIFNvbWUgdmVyc2lvbnMgb2YgTGludXggaGF2 ZSBhIDx1dG1wLmg+IGZpbGUgdGhhdCBjb250YWlucworICAiZW51bSB1dGxvZ2luIHsgbG9jYWws IHRlbG5ldCwgcmxvZ2luLCBzY3JlZW4sIC4uLiB9OyIgIFRoaXMgY2xvYmJlcnMKKyAgYW55IHBy b2dyYW0gdGhhdCB1c2VzIGFueSBvZiB0aGVzZSB3b3JkcyBhcyB2YXJpYWJsZSBuYW1lcywgZnVu Y3Rpb24KKyAgbmFtZXMsIG1hY3JvIG5hbWVzLCBldGMuICAoT3RoZXIgdmVyc2lvbnMgb2YgTGlu dXggaGF2ZSB0aGlzIGRlY2xhcmF0aW9uCisgIHdpdGhpbiAjaWYgMCAuLi4gI2VuZGlmLikgIFRo ZXJlIGlzIG5vdGhpbmcgd2UgY2FuIGRvIGFib3V0IHRoaXMgb3RoZXIKKyAgdGhhbiB0byBub3Qg aW5jbHVkZSB0aGUgc3R1cGlkIGZpbGUuICBCdXQgd2UgbmVlZCBzdHVmZiBmcm9tIGl0LCBzby4u LgorKi8KKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2Rl ZmluZSBVVF9MSU5FU0laRSAgICAgMzIKKyNkZWZpbmUgVVRfTkFNRVNJWkUgICAgIDMyCisjZGVm aW5lIFVUX0hPU1RTSVpFICAgICAyNTYKKworc3RydWN0IHRpbWV2YWwgeworICB0aW1lX3QgdHZf c2VjOworICB0aW1lX3QgdHZfdXNlYzsKK307CisKK3N0cnVjdCBleGl0X3N0YXR1cyB7CisgIHNo b3J0IGludCBlX3Rlcm1pbmF0aW9uOyAgICAgIC8qIFByb2Nlc3MgdGVybWluYXRpb24gc3RhdHVz LiAgKi8KKyAgc2hvcnQgaW50IGVfZXhpdDsgICAgICAgICAgICAgLyogUHJvY2VzcyBleGl0IHN0 YXR1cy4gICovCit9OworCitzdHJ1Y3QgdXRtcCB7CisgIHNob3J0IGludCB1dF90eXBlOyAgICAg ICAgICAgICAgICAgICAgLyogVHlwZSBvZiBsb2dpbiAqLworICBwaWRfdCB1dF9waWQ7ICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIFBpZCBvZiBsb2dpbiBwcm9jZXNzICovCisgIGNoYXIgdXRf bGluZVtVVF9MSU5FU0laRV07ICAgICAgICAgICAgLyogTlVMLXRlcm1pbmF0ZWQgZGV2aWNlbmFt ZSBvZiB0dHkgKi8KKyAgY2hhciB1dF9pZFs0XTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBJ bml0dGFiIGlkICovCisgIGNoYXIgdXRfdXNlcltVVF9OQU1FU0laRV07ICAgICAgICAgICAgLyog VXNlcm5hbWUgKG5vdCBOVUwgdGVybWluYXRlZCkgKi8KKworICBjaGFyIHV0X2hvc3RbVVRfSE9T VFNJWkVdOyAgICAgICAgICAgIC8qIEhvc3RuYW1lIGZvciByZW1vdGUgbG9naW4gKi8KKyAgc3Ry dWN0IGV4aXRfc3RhdHVzIHV0X2V4aXQ7ICAgICAgICAgICAvKiBFeGl0IHN0YXR1cyAqLworICBs b25nIHV0X3Nlc3Npb247ICAgICAgICAgICAgICAgICAgICAgIC8qIFNlc3Npb24gSUQsIHVzZWQg Zm9yIHdpbmRvd2luZyAqLworICBzdHJ1Y3QgdGltZXZhbCB1dF90djsgICAgICAgICAgICAgICAg IC8qIFRpbWUgZW50cnkgd2FzIG1hZGUgKi8KKyAgaW50MzJfdCB1dF9hZGRyX3Y2WzRdOyAgICAg ICAgICAgICAgICAvKiBJbnRlcm5ldCBhZGRyZXNzIG9mIHJlbW90ZSBob3N0ICovCisgIGNoYXIg cGFkWzIwXTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVzZXJ2ZWQgKi8KK307CisKKyNk ZWZpbmUgdXRfdGltZSB1dF90di50dl9zZWMgICAgLyogV2h5IHNob3VsZCBMaW51eCBiZSBsaWtl IGFueXRoaW5nIGVsc2U/ICovCisjZGVmaW5lIHV0X25hbWUgdXRfdXNlciAgICAgICAgIC8qIC4u LiAqLworCitleHRlcm4gdm9pZAorbG9nd3RtcCBfX1AgKChfX2NvbnN0IGNoYXIgKl9fdXRfbGlu ZSwgX19jb25zdCBjaGFyICpfX3V0X25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIF9f Y29uc3QgY2hhciAqX191dF9ob3N0KSk7CisKKyNlbHNlICAvKiBOb3QgVVRNUEJVRyAqLworCisj aWZuZGVmIEhBVkVVVE1QWCAgICAgICAgICAgICAgICAgICAgICAgLyogV2hvIGhhcyA8dXRtcHgu aD4gKi8KKyNpZmRlZiBTT0xBUklTCisjZGVmaW5lIEhBVkVVVE1QWAorI2Vsc2UKKyNpZmRlZiBJ UklYNjAKKyNkZWZpbmUgSEFWRVVUTVBYCisjZWxzZQorI2lmZGVmIENLX1NDT1Y1CisjZGVmaW5l IEhBVkVVVE1QWAorI2Vsc2UKKyNpZmRlZiBIUFVYMTAwCisjZGVmaW5lIEhBVkVVVE1QWAorI2Vs c2UKKyNpZmRlZiBVTklYV0FSRQorI2RlZmluZSBIQVZFVVRNUFgKKyNlbmRpZiAvKiBVTklYV0FS RSAqLworI2VuZGlmIC8qIEhQVVgxMDAgKi8KKyNlbmRpZiAvKiBDS19TQ09WNSAqLworI2VuZGlm IC8qIElSSVg2MCAqLworI2VuZGlmIC8qIFNPTEFSSVMgKi8KKyNlbmRpZiAvKiBIQVZFVVRNUFgg Ki8KKworI2lmZGVmIEhBVkVVVE1QWAorI2luY2x1ZGUgPHV0bXB4Lmg+CisjZWxzZQorI2lmZGVm IE9TRjUwCisvKiBCZWNhdXNlIHRoZSB0aW1lX3QgaW4gdGhlIHV0bXAgc3RydWN0IGlzIDY0IGJp dHMgYnV0IHRpbWUoKSB3YW50cyAzMiAqLworI2RlZmluZSBfX1Y0MF9PQkpfQ09NUEFUIDEKKyNl bmRpZiAvKiBPU0Y1MCAqLworI2luY2x1ZGUgPHV0bXAuaD4KKyNpZmRlZiBPU0Y1MAorI3VuZGVm IF9fVjQwX09CSl9DT01QQVQKKyNlbmRpZiAvKiBPU0Y1MCAqLworI2VuZGlmIC8qIEhBVkVVVE1Q WCAqLworI2VuZGlmIC8qIFVUTVBCVUcgKi8KKworI2lmZGVmIEhBVkVVVE1QWAorI2RlZmluZSBV VE1QU1RSVUNUIHV0bXB4CisjZWxzZQorI2RlZmluZSBVVE1QU1RSVUNUIHV0bXAKKyNlbmRpZgkv KiBIQVZFVVRNUFggKi8KKworI2lmbmRlZiBXVE1QRklMRQorI2lmZGVmIFFOWAorI2RlZmluZSBX VE1QRklMRSAiL3Vzci9hZG0vd3RtcC4xIgorI2Vsc2UKKyNpZmRlZiBMSU5VWAorI2RlZmluZSBX VE1QRklMRSAiL3Zhci9sb2cvd3RtcCIKKyNlbHNlCisjZGVmaW5lIFdUTVBGSUxFICIvdXNyL2Fk bS93dG1wIgorI2VuZGlmIC8qIFFOWCAqLworI2VuZGlmIC8qIExJTlVYICovCisjZW5kaWYgLyog V1RNUEZJTEUgKi8KK2NoYXIgKiB3dG1wZmlsZSA9IE5VTEw7CisKK3N0YXRpYyBpbnQgd3RtcGZk ID0gMDsKK3N0YXRpYyBjaGFyIGNrc3lzbGluZVszMl0gPSB7IE5VTCwgTlVMIH07CisKKyNpZm5k ZWYgSEFWRVVUSE9TVCAgICAgICAgICAgICAgICAgICAgICAvKiBEb2VzIHV0bXAgaW5jbHVkZSB1 dF9ob3N0W10/ICovCisjaWZkZWYgSEFWRVVUTVBYICAgICAgICAgICAgICAgICAgICAgICAgLyog dXRtcHggYWx3YXlzIGRvZXMgKi8KKyNkZWZpbmUgSEFWRVVUSE9TVAorI2Vsc2UKKyNpZmRlZiBM SU5VWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBMaW51eCBkb2VzICovCisjZGVmaW5l IEhBVkVVVEhPU1QKKyNlbHNlCisjaWZkZWYgU1VOT1M0ICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogU3VuT1MgZG9lcyAqLworI2RlZmluZSBIQVZFVVRIT1NUCisjZWxzZQorI2lmZGVmIEFJ WDQxICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFJWCA0LjEgYW5kIGxhdGVyIGRvICov CisjZGVmaW5lIEhBVkVVVEhPU1QKKyNlbmRpZiAvKiBBSVg0MSAqLworI2VuZGlmIC8qIFNVTk9T NCAqLworI2VuZGlmIC8qIExJTlVYICovCisjZW5kaWYgLyogSEFWRVVUTVBYICovCisjZW5kaWYg LyogSEFWRVVUSE9TVCAqLworCisjaWZkZWYgVVcyMDAKK1BJRF9UIF92Zm9yaygpIHsgICAgICAg ICAgICAgICAgICAgICAgICAvKiBUbyBzYXRpc2Z5IGEgbGlicmFyeSBmb3VsdXAgKi8KKyAgICBy ZXR1cm4oZm9yaygpKTsgICAgICAgICAgICAgICAgICAgICAvKiBpbiBVbml4d2FyZSAyLjAueCAq LworfQorI2VuZGlmIC8qIFVXMjAwICovCisKK1ZPSUQKKyNpZmRlZiBDS19BTlNJQworbG9nd3Rt cChjb25zdCBjaGFyICogbGluZSwgY29uc3QgY2hhciAqIG5hbWUsIGNvbnN0IGNoYXIgKiBob3N0 KQorI2Vsc2UKK2xvZ3d0bXAobGluZSwgbmFtZSwgaG9zdCkgY2hhciAqbGluZSwgKm5hbWUsICpo b3N0OworI2VuZGlmIC8qIENLX0FOU0lDICovCisvKiBsb2d3dG1wICovIHsKKyAgICBzdHJ1Y3Qg VVRNUFNUUlVDVCB1dDsKKyAgICBzdHJ1Y3Qgc3RhdCBidWY7CisgICAgLyogdGltZV90IHRpbWUo KTsgKi8KKworICAgIGlmICghY2t4d3RtcCkKKyAgICAgIHJldHVybjsKKworICAgIGlmICghd3Rt cGZpbGUpCisgICAgICBtYWtlc3RyKCZ3dG1wZmlsZSxXVE1QRklMRSk7CisKKyAgICBpZiAoIWxp bmUpIGxpbmUgPSAiIjsKKyAgICBpZiAoIW5hbWUpIG5hbWUgPSAiIjsKKyAgICBpZiAoIWhvc3Qp IGhvc3QgPSAiIjsKKworICAgIGlmICghd3RtcGZkICYmICh3dG1wZmQgPSBvcGVuKHd0bXBmaWxl LCBPX1dST05MWXxPX0FQUEVORCwgMCkpIDwgMCkgeworICAgICAgICBja3h3dG1wID0gMDsKKyAg ICAgICAgZGVidWcoRjExMCwiV1RNUCBvcGVuIGZhaWxlZCIsbGluZSwwKTsKKyAgICAgICAgcmV0 dXJuOworICAgIH0KKyAgICBpZiAoIWZzdGF0KHd0bXBmZCwgJmJ1ZikpIHsKKyAgICAgICAgY2tz dHJuY3B5KHV0LnV0X2xpbmUsIGxpbmUsIHNpemVvZih1dC51dF9saW5lKSk7CisjaWZkZWYgRlJF RUJTRDkKKyAgICAgICAgY2tzdHJuY3B5KHV0LnV0X3VzZXIsIG5hbWUsIHNpemVvZih1dC51dF91 c2VyKSk7CisjZWxzZQorICAgICAgICBja3N0cm5jcHkodXQudXRfbmFtZSwgbmFtZSwgc2l6ZW9m KHV0LnV0X25hbWUpKTsKKyNlbmRpZgkvKiBGUkVFQlNEOSAqLworI2lmZGVmIEhBVkVVVEhPU1QK KyAgICAgICAgLyogTm90IHBvcnRhYmxlICovCisgICAgICAgIGNrc3RybmNweSh1dC51dF9ob3N0 LCBob3N0LCBzaXplb2YodXQudXRfaG9zdCkpOworI2VuZGlmIC8qIEhBVkVVVEhPU1QgKi8KKyNp ZmRlZiBIQVZFVVRNUFgKKyAgICAgICAgdGltZSgmdXQudXRfdHYudHZfc2VjKTsKKyNlbHNlCisj aWZkZWYgTElOVVgKKy8qIEluIGxpZ2h0IG9mIHRoZSBmb2xsb3dpbmcgY29tbWVudCBwZXJoYXBz IHRoZSBwcmV2aW91cyBsaW5lIHNob3VsZCAqLworLyogYmUgIiNpZm5kZWYgQ09NTUVOVCIuICov CisgICAgICAgIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBPbiA2NC1iaXQgcGxh dGZvcm1zIHNpemVvZih0aW1lX3QpIGFuZCBzaXplb2YodXQudXRfdGltZSkKKyAgICAgICAgICAg ICAqIGFyZSBub3QgdGhlIHNhbWUgYW5kIGF0dGVtcHQgdG8gdXNlIGFuIGFkZHJlc3Mgb2YKKyAg ICAgICAgICAgICAqIHV0LnV0X3RpbWUgYXMgYW4gYXJndW1lbnQgdG8gdGltZSgpIGNhbGwgbWF5 IGNhdXNlCisgICAgICAgICAgICAgKiAidW5hbGlnbmVkIGFjY2VzcyIgdHJhcC4KKyAgICAgICAg ICAgICAqLworICAgICAgICAgICAgdGltZV90IHp6OworICAgICAgICAgICAgdGltZSgmenopOwor ICAgICAgICAgICAgdXQudXRfdGltZSA9IHp6OworICAgICAgICB9CisjZWxzZQorI2lmZGVmIENL XzY0QklUCisgICAgICAgIHsKKwkgICAgLyogTm93IChKYW4gMjAwNikgd2UgY2FuIGRvIHRoaXMg Zm9yIGFueSA2NC1iaXQgYnVpbGQgKi8KKyAgICAgICAgICAgIHRpbWVfdCB6ejsKKyAgICAgICAg ICAgIHRpbWUoJnp6KTsKKyAgICAgICAgICAgIHV0LnV0X3RpbWUgPSB6ejsKKyAgICAgICAgfQor I2Vsc2UKKyAgICAgICAgdGltZSgmdXQudXRfdGltZSk7CisjZW5kaWYJLyogQ0tfNjRCSVQgKi8K KyNlbmRpZiAvKiBMSU5VWCAqLworI2VuZGlmIC8qIEhBVkVVVE1QWCAqLworICAgICAgICBpZiAo d3JpdGUod3RtcGZkLCAoY2hhciAqKSZ1dCwgc2l6ZW9mKHN0cnVjdCBVVE1QU1RSVUNUKSkgIT0K KyAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgVVRNUFNUUlVDVCkpIHsKKyNpZm5kZWYgTk9GVFJV TkNBVEUKKyNpZm5kZWYgQ09IRVJFTlQKKyAgICAgICAgICAgIGZ0cnVuY2F0ZSh3dG1wZmQsIGJ1 Zi5zdF9zaXplKTsgLyogRXJyb3IsIHVuZG8gYW55IHBhcnRpYWwgd3JpdGUgKi8KKyNlbHNlCisg ICAgICAgICAgICBjaHNpemUod3RtcGZkLCBidWYuc3Rfc2l6ZSk7IC8qIEVycm9yLCB1bmRvIGFu eSBwYXJ0aWFsIHdyaXRlICovCisjZW5kaWYgLyogQ09IRVJFTlQgKi8KKyNlbmRpZiAvKiBOT0ZU UlVOQ0FURSAqLworICAgICAgICAgICAgZGVidWcoRjExMCwiV1RNUCB3cml0ZSBlcnJvciIsbGlu ZSwwKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMTAsIldUTVAgcmVj b3JkIE9LIixsaW5lLDApOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQor fQorI2VuZGlmIC8qIENLV1RNUCAqLworCisjaWZkZWYgQ0tTWVNMT0cKKy8qCisgIEMgSyBTIFkg UyBMIE8gRyAgLS0gIEMtS2VybWl0IHN5c3RlbSBsb2dnaW5nIGZ1bmN0aW9uLAorCisgIEZvciB1 c2UgYnkgb3RoZXIgbW9kdWxlcy4KKyAgVGhpcyBtb2R1bGUgY2FuLCBidXQgZG9lc24ndCBoYXZl IHRvLCB1c2UgaXQuCisgIENhbGwgd2l0aDoKKyAgICBuID0gU1lTTEdfeHggdmFsdWVzIGRlZmlu ZWQgaW4gY2tjZGViLmgKKyAgICBzMSwgczIsIHMzOiBzdHJpbmdzLgorKi8KK1ZPSUQKK2Nrc3lz bG9nKG4sIG0sIHMxLCBzMiwgczMpIGludCBuLCBtOyBjaGFyICogczEsICogczIsICogczM7IHsK KyAgICBpbnQgbGV2ZWw7CisKKyAgICBpZiAoIWNreGxvZ2dpbmcpICAgICAgICAgICAgICAgICAg ICAvKiBzeXNsb2dnaW5nICovCisgICAgICByZXR1cm47CisgICAgaWYgKCFzMSkgczEgPSAiIjsg ICAgICAgICAgICAgICAgICAgLyogRml4IG51bGwgYXJncyAqLworICAgIGlmICghczIpIHMyID0g IiI7CisgICAgaWYgKCFzMykgczMgPSAiIjsKKyAgICBzd2l0Y2ggKG4pIHsgICAgICAgICAgICAg ICAgICAgICAgICAvKiBUcmFuc2xhdGUgS2VybWl0IGxldmVsICovCisgICAgICBjYXNlIFNZU0xH X0RCOiAgICAgICAgICAgICAgICAgICAgLyogdG8gc3lzbG9nIGxldmVsICovCisgICAgICAgIGxl dmVsID0gTE9HX0RFQlVHOworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAg IGxldmVsID0gbSA/IExPR19JTkZPIDogTE9HX0VSUjsKKyAgICB9CisgICAgZGVidWcoRjExMCwi Y2tzeXNsb2cgczEiLHMxLDApOworICAgIGRlYnVnKEYxMTAsImNrc3lzbG9nIHMyIixzMiwwKTsK KyAgICBkZWJ1ZyhGMTEwLCJja3N5c2xvZyBzMyIsczMsMCk7CisgICAgZXJybm8gPSAwOworICAg IHN5c2xvZyhsZXZlbCwgIiVzOiAlcyAlcyIsIHMxLCBzMiwgczMpOyAvKiBXcml0ZSBzeXNsb2cg cmVjb3JkICovCisgICAgZGVidWcoRjEwMSwiY2tzeXNsb2cgZXJybm8iLCIiLGVycm5vKTsKK30K KyNlbmRpZiAvKiBDS1NZU0xPRyAqLworCisKKy8qIERlY2xhcmF0aW9ucyAqLworCitpbnQgbWF4 bmFtID0gTUFYTkFNTEVOOyAgICAgICAgICAgICAgICAgLyogQXZhaWxhYmxlIHRvIHRoZSBvdXRz aWRlICovCitpbnQgbWF4cGF0aCA9IE1BWFBBVEg7CitpbnQgY2tfem5ld24gPSAtMTsKKworI2lm ZGVmIFVOSVgKK2NoYXIgc3RhcnR1cGRpcltNQVhQQVRIKzFdOworI2VuZGlmIC8qIFVOSVggKi8K KworaW50IHBleGl0c3RhdCA9IC0yOyAgICAgICAgICAgICAgICAgICAgIC8qIFByb2Nlc3MgZXhp dCBzdGF0dXMgKi8KKworRklMRSAqZnBbWk5GSUxTXSA9IHsgICAgICAgICAgICAgICAgICAgIC8q IEZpbGUgcG9pbnRlcnMgKi8KKyAgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEws IE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwKK307CisKKy8qIEZsYWdz IGZvciBlYWNoIGZpbGUgaW5kaWNhdGluZyB3aGV0aGVyIGl0IHdhcyBvcGVuZWQgd2l0aCBwb3Bl bigpICovCitpbnQgaXNwaXBlW1pORklMU10gPSB7IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs IDAsIDAsIDAsIDAgfTsKKworLyogQnVmZmVycyBhbmQgcG9pbnRlcnMgdXNlZCBpbiBidWZmZXJl ZCBmaWxlIGlucHV0IGFuZCBvdXRwdXQuICovCisjaWZkZWYgRFlOQU1JQworZXh0ZXJuIGNoYXIg KnppbmJ1ZmZlciwgKnpvdXRidWZmZXI7CisjZWxzZQorZXh0ZXJuIGNoYXIgemluYnVmZmVyW10s IHpvdXRidWZmZXJbXTsKKyNlbmRpZiAvKiBEWU5BTUlDICovCitleHRlcm4gY2hhciAqemlucHRy LCAqem91dHB0cjsKK2V4dGVybiBpbnQgemluY250LCB6b3V0Y250OworZXh0ZXJuIGludCB3aWxk eHBhbmQsIHdpbGRlbmE7CQkvKiBXaWxkY2FyZCBoYW5kbGluZyAqLworCitzdGF0aWMgQ0tfT0ZG X1QgaWZsZW4gPSAoQ0tfT0ZGX1QpLTE7CS8qIElucHV0IGZpbGUgbGVuZ3RoICovCisKK3N0YXRp YyBQSURfVCBwaWQgPSAwOyAgICAgICAgICAgICAgICAgICAvKiBwaWQgb2YgY2hpbGQgZm9yayAq Lworc3RhdGljIGludCBmY291bnQgPSAwOyAgICAgICAgICAgICAgICAgIC8qIE51bWJlciBvZiBm aWxlcyBpbiB3aWxkIGdyb3VwICovCitzdGF0aWMgaW50IG54cGFuZCA9IDA7ICAgICAgICAgICAg ICAgICAgLyogQ29weSBvZiBmY291bnQgKi8KK3N0YXRpYyBjaGFyIG5hbWJ1ZltDS01BWFBBVEgr NF07ICAgICAgICAvKiBCdWZmZXIgZm9yIGEgcGF0aG5hbWUgKi8KKworI2lmbmRlZiBOT0ZSSUxM UworI2RlZmluZSBaTUJVRkxFTiAyMDAKK3N0YXRpYyBjaGFyIHptYnVmW1pNQlVGTEVOXTsJCS8q IEZvciBtYWlsLCByZW1vdGUgcHJpbnQgc3RyaW5ncyAqLworI2VuZGlmIC8qIE5PRlJJTExTICov CisKK2NoYXIgKiptdGNocyA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAvKiBNYXRjaGVzIGZv dW5kIGZvciBmaWxlbmFtZSAqLworY2hhciAqKm10Y2hwdHIgPSBOVUxMOyAgICAgICAgICAgICAg ICAgIC8qIFBvaW50ZXIgdG8gY3VycmVudCBtYXRjaCAqLworCisvKiAgWiBLIFMgRSBMIEYgIC0t ICBLaWxsIFNlbGY6IGxvZyBvdXQgb3duIGpvYiwgaWYgcG9zc2libGUuICAqLworCisvKiBOb3Rl LCBzaG91bGQgZ2V0IGN1cnJlbnQgcGlkLCBidXQgaWYgeW91ciBzeXN0ZW0gZG9lc24ndCBoYXZl ICovCisvKiBnZXRwcGlkKCksIHRoZW4ganVzdCBraWxsKDAsOSkuLi4gICovCisKKyNpZm5kZWYg U1ZSMworI2lmbmRlZiBQT1NJWAorI2lmbmRlZiBPU0ZQQworLyogQWxyZWFkeSBkZWNsYXJlZCBp biB1bmlzdGQuaCBmb3IgU1ZSMyBhbmQgUE9TSVggKi8KKyNpZmRlZiBDS19BTlNJQworZXh0ZXJu IFBJRF9UIGdldHBwaWQodm9pZCk7CisjZWxzZQorI2lmbmRlZiBQUzJBSVgxMAorI2lmbmRlZiBD T0hFUkVOVAorZXh0ZXJuIFBJRF9UIGdldHBwaWQoKTsKKyNlbmRpZiAvKiBDT0hFUkVOVCAqLwor I2VuZGlmIC8qIFBTMkFJWDEwICovCisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKyNlbmRpZiAvKiBP U0ZQQyAqLworI2VuZGlmIC8qIFBPU0lYICovCisjZW5kaWYgLyogU1ZSMyAqLworCitpbnQKK3pr c2VsZigpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGb3IgImJ5ZSIsIGJ1dCBu byBndWFyYW50ZWUhICovCisjaWZkZWYgUFJPVlgxCisgICAgcmV0dXJuKGtpbGwoMCw5KSk7Cisj ZWxzZQorI2lmZGVmIFY3CisgICAgcmV0dXJuKGtpbGwoMCw5KSk7CisjZWxzZQorI2lmZGVmIFRP V0VSMQorICAgIHJldHVybihraWxsKDAsOSkpOworI2Vsc2UKKyNpZmRlZiBGVDE4CisgICAgcmV0 dXJuKGtpbGwoMCw5KSk7CisjZWxzZQorI2lmZGVmIGFlZ2lzCisgICAgcmV0dXJuKGtpbGwoMCw5 KSk7CisjZWxzZQorI2lmZGVmIENPSEVSRU5UCisgICAgcmV0dXJuKGtpbGwoKFBJRF9UKWdldHBp ZCgpLDEpKTsKKyNlbHNlCisjaWZkZWYgUElEX1QKKyAgICBleGl0KGtpbGwoKFBJRF9UKWdldHBw aWQoKSwxKSk7CisgICAgcmV0dXJuKDApOworI2Vsc2UKKyAgICBleGl0KGtpbGwoZ2V0cHBpZCgp LDEpKTsKKyAgICByZXR1cm4oMCk7CisjZW5kaWYKKyNlbmRpZgorI2VuZGlmCisjZW5kaWYKKyNl bmRpZgorI2VuZGlmCisjZW5kaWYKK30KKworc3RhdGljIFZPSUQKK2dldGZ1bGxuYW1lKG5hbWUp IGNoYXIgKiBuYW1lOyB7CisgICAgY2hhciAqcCA9IChjaGFyICopZnVsbG5hbWU7CisgICAgaW50 IGxlbiA9IDA7CisgICAgZnVsbG5hbWVbMF0gPSAnXDAnOworICAgIC8qIElmIG5lY2Vzc2FyeSB3 ZSBjb3VsZCBhbHNvIGNoYXNlIGRvd24gc3ltbGlua3MgaGVyZS4uLiAqLworI2lmZGVmIENPTU1F TlQKKyAgICAvKiBUaGlzIHdvcmtzIGJ1dCBpcyBpbmNvbXBhdGlibGUgd2l0aCB3dWZ0cGQgKi8K KyAgICBpZiAoaXNndWVzdCAmJiBhbm9ucm9vdCkgeworICAgICAgICBja3N0cm5jcHkoZnVsbG5h bWUsYW5vbnJvb3QsQ0tNQVhQQVRIKTsKKyAgICAgICAgbGVuID0gc3RybGVuKGZ1bGxuYW1lKTsK KyAgICAgICAgaWYgKGxlbiA+IDApCisgICAgICAgICAgaWYgKGZ1bGxuYW1lW2xlbi0xXSA9PSAn LycpCisgICAgICAgICAgICBsZW4tLTsKKyAgICB9CisgICAgcCArPSBsZW47CisjZW5kaWYgLyog Q09NTUVOVCAqLworICAgIHpmbnFmcChuYW1lLCBDS01BWFBBVEggLSBsZW4sIHApOworICAgIHdo aWxlICgqcCkgeworICAgICAgICBpZiAoKnAgPCAnIScpICpwID0gJ18nOworICAgICAgICBwKys7 CisgICAgfQorfQorCisvKiAgRCBPIEkgSyBMIE8gRyAgLS0gIE9wZW4gS2VybWl0LXNwZWNpZmlj IGZ0cC1saWtlIHRyYW5zZmVyIGxvZy4gKi8KKworVk9JRCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIENhbGxlZCBpbiBja2NtYWkuYyAqLworZG9pa2xvZygpIHsKKyAgICBp ZiAoaWtsb2dvcGVuKSAgICAgICAgICAgICAgICAgICAgICAvKiBBbHJlYWR5IG9wZW4/ICovCisg ICAgICByZXR1cm47CisgICAgaWYgKHhmZXJsb2cpIHsgICAgICAgICAgICAgICAgICAgICAgLyog T3BlbiBpa3NkIGxvZyBpZiByZXF1ZXN0ZWQgKi8KKyAgICAgICAgaWYgKCF4ZmVyZmlsZSkgICAg ICAgICAgICAgICAgICAvKiBJZiBubyBwYXRobmFtZSBnaXZlbiAqLworICAgICAgICAgIG1ha2Vz dHIoJnhmZXJmaWxlLFhGRVJGSUxFKTsJLyogdXNlIHRoaXMgZGVmYXVsdCAqLworICAgICAgICBp ZiAoKnhmZXJmaWxlKSB7CisgICAgICAgICAgICB4ZmVybG9nID0gb3Blbih4ZmVyZmlsZSwgT19X Uk9OTFkgfCBPX0FQUEVORCB8IE9fQ1JFQVQsIDA2NjApOworICAgICAgICAgICAgZGVidWcoRjEw MSwiZG9pa2xvZyBvcGVuIiwiIix4ZmVybG9nKTsKKyAgICAgICAgICAgIGlmICh4ZmVybG9nIDwg MCkgeworI2lmZGVmIENLU1lTTE9HCisgICAgICAgICAgICAgICAgc3lzbG9nKExPR19FUlIsICJ4 ZmVybG9nIG9wZW4gZmFpbHVyZSAlczogJW0iLCB4ZmVyZmlsZSk7CisjZW5kaWYgLyogQ0tTWVNM T0cgKi8KKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJkb2lrbG9nIG9wZW4gZXJybm8iLCIi LGVycm5vKTsKKyAgICAgICAgICAgICAgICB4ZmVybG9nID0gMDsKKyAgICAgICAgICAgIH0gZWxz ZQorICAgICAgICAgICAgICBpa2xvZ29wZW4gPSAxOworICAgICAgICB9IGVsc2UKKyAgICAgICAg ICB4ZmVybG9nID0gMDsKKyNpZmRlZiBDS1NZU0xPRworICAgICAgICBpZiAoeGZlcmxvZyAmJiBj a3hsb2dnaW5nKQorICAgICAgICAgIHN5c2xvZyhMT0dfSU5GTywgInhmZXJsb2c6ICVzIG9wZW4g b2siLCB4ZmVyZmlsZSk7CisjZW5kaWYgLyogQ0tTWVNMT0cgKi8KKyAgICB9Cit9CisKKy8qICBa IE8gUCBFIE4gSSAgLS0gIE9wZW4gYW4gZXhpc3RpbmcgZmlsZSBmb3IgaW5wdXQuICovCisKKy8q IFJldHVybnMgMSBvbiBzdWNjZXNzLCAwIG9uIGZhaWx1cmUgKi8KKworaW50Cit6b3Blbmkobixu YW1lKSBpbnQgbjsgY2hhciAqbmFtZTsgeworICAgIGludCB4OworCisgICAgZGVidWcoRjExMSwi em9wZW5pIixuYW1lLG4pOworICAgIGlmICgoeCA9IGNoa2ZuKG4pKSAhPSAwKSB7CisJZGVidWco RjExMSwiem9wZW5pIGNoa2ZuIixja2l0b2EobikseCk7CisJcmV0dXJuKDApOworICAgIH0KKyAg ICB6aW5jbnQgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXNldCBpbnB1dCBidWZm ZXIgKi8KKyAgICBpZiAobiA9PSBaU1lTRk4pIHsgICAgICAgICAgICAgICAgICAvKiBJbnB1dCBm cm9tIGEgc3lzdGVtIGZ1bmN0aW9uPyAqLworI2lmZGVmIENPTU1FTlQKKy8qKiogTm90ZSwgdGhp cyBmdW5jdGlvbiBzaG91bGQgbm90IGJlIGNhbGxlZCB3aXRoIFpTWVNGTiAqKiovCisvKioqIEFs d2F5cyBjYWxsIHp4Y21kKCkgZGlyZWN0bHksIGFuZCBnaXZlIGl0IHRoZSByZWFsIGZpbGUgbnVt YmVyICoqKi8KKy8qKiogeW91IHdhbnQgdG8gdXNlLiAgKioqLworICAgICAgICByZXR1cm4oenhj bWQobixuYW1lKSk7ICAgICAgICAgIC8qIFRyeSB0byBmb3JrIHRoZSBjb21tYW5kICovCisjZWxz ZQorICAgICAgICBkZWJ1ZyhGMTEwLCJ6b3BlbmkgY2FsbGVkIHdpdGggWlNZU0ZOLCBmYWlsaW5n ISIsbmFtZSwwKTsKKyAgICAgICAgKm5hbWJ1ZiA9ICdcMCc7ICAgICAgICAgICAgICAgICAvKiBO byBmaWxlbmFtZS4gKi8KKyAgICAgICAgcmV0dXJuKDApOyAgICAgICAgICAgICAgICAgICAgICAv KiBmYWlsLiAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICB9CisgICAgaWYgKG4gPT0gWlNU RElPKSB7ICAgICAgICAgICAgICAgICAgLyogU3RhbmRhcmQgaW5wdXQ/ICovCisgICAgICAgIGlm IChpc19hX3R0eSgwKSkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsIlRlcm1pbmFsIGlu cHV0IG5vdCBhbGxvd2VkIik7CisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJ6b3Blbmk6IGF0dGVt cHRzIGlucHV0IGZyb20gdW5yZWRpcmVjdGVkIHN0ZGluIiwiIiwwKTsKKyAgICAgICAgICAgIHJl dHVybigwKTsKKyAgICAgICAgfQorICAgICAgICBmcFtaSUZJTEVdID0gc3RkaW47CisgICAgICAg IGlzcGlwZVtaSUZJTEVdID0gMDsKKyAgICAgICAgcmV0dXJuKDEpOworICAgIH0KKyNpZmRlZiBD S1JPT1QKKyAgICBkZWJ1ZyhGMTExLCJ6b3Blbmkgc2V0cm9vdCIsY2tyb290LGNrcm9vdHNldCk7 CisgICAgaWYgKGNrcm9vdHNldCkgaWYgKCF6aW5yb290KG5hbWUpKSB7CisJZGVidWcoRjExMCwi em9wZW5pIHNldHJvb3QgdmlvbGF0aW9uIixuYW1lLDApOworCXJldHVybigwKTsKKyAgICB9Cisj ZW5kaWYgLyogQ0tST09UICovCisgICAgZnBbbl0gPSBmb3BlbihuYW1lLCJyIik7ICAgICAgICAg ICAgLyogUmVhbCBmaWxlLCBvcGVuIGl0LiAqLworICAgIC8qIGRlYnVnKEYxMTEsInpvcGVuaSBm b3BlbiIsIG5hbWUsIGZwW25dKTsgKi8KKyNpZmRlZiBaREVCVUcKKyAgICAvKiBwcmludGYoIlpP UEVOSSBmcFslZF09JWxkXG4iLG4sZnBbbl0pOyAqLworI2VuZGlmIC8qIFpERUJVRyAqLworICAg IGlzcGlwZVtuXSA9IDA7CisKKyAgICBpZiAoeGZlcmxvZworI2lmZGVmIENLU1lTTE9HCisgICAg ICAgIHx8ICgoY2t4c3lzbG9nID49IFNZU0xHX0ZBKSAmJiBja3hsb2dnaW5nKQorI2VuZGlmIC8q IENLU1lTTE9HICovCisgICAgICAgICkgeworICAgICAgICBnZXRmdWxsbmFtZShuYW1lKTsKKyAg ICAgICAgZGVidWcoRjExMCwiem9wZW5pIGZ1bGxuYW1lIixmdWxsbmFtZSwwKTsKKyAgICB9Cisg ICAgaWYgKGZwW25dID09IE5VTEwpIHsKKyNpZmRlZiBDS1NZU0xPRworICAgICAgICBpZiAoY2t4 c3lzbG9nID49IFNZU0xHX0ZBICYmIGNreGxvZ2dpbmcpIHsKKwkgICAgc3lzbG9nKExPR19JTkZP LCAiZmlsZVslZF0gJXM6IG9wZW4gZmFpbGVkICglbSkiLCBuLCBmdWxsbmFtZSk7CisJICAgIHBl cnJvcihmdWxsbmFtZSk7CisJfSBlbHNlCisjZW5kaWYgLyogQ0tTWVNMT0cgKi8KKwkgIHBlcnJv cihuYW1lKTsKKyAgICAgICAgcmV0dXJuKDApOworICAgIH0gZWxzZSB7CisjaWZkZWYgQ0tTWVNM T0cKKyAgICAgICAgaWYgKGNreHN5c2xvZyA+PSBTWVNMR19GQSAmJiBja3hsb2dnaW5nKQorICAg ICAgICAgIHN5c2xvZyhMT0dfSU5GTywgImZpbGVbJWRdICVzOiBvcGVuIHJlYWQgb2siLCBuLCBm dWxsbmFtZSk7CisjZW5kaWYgLyogQ0tTWVNMT0cgKi8KKyAgICAgICAgY2xlYXJlcnIoZnBbbl0p OworICAgICAgICByZXR1cm4oMSk7CisgICAgfQorfQorCisjaWZkZWYgUU5YCisjZGVmaW5lIERP TkRFTEFZCisjZWxzZQorI2lmZGVmIE9fTkRFTEFZCisjZGVmaW5lIERPTkRFTEFZCisjZW5kaWYg LyogT19OREVMQVkgKi8KKyNlbmRpZiAvKiBRTlggKi8KKworLyogIFogTyBQIEUgTiBPICAtLSAg T3BlbiBhIG5ldyBmaWxlIGZvciBvdXRwdXQuICAqLworCisvKkFSR1NVU0VEKi8JLyogenogbm90 IHVzZWQgKi8KK2ludAorem9wZW5vKG4sbmFtZSx6eixmY2IpCisvKiB6b3Blbm8gKi8gIGludCBu OyBjaGFyICpuYW1lOyBzdHJ1Y3QgemF0dHIgKnp6OyBzdHJ1Y3QgZmlsaW5mbyAqZmNiOyB7CisK KyAgICBjaGFyIHBbOF07CisgICAgaW50IGFwcGVuZCA9IDA7CisgICAgaW50IGlzdHR5ID0gMCwg ZmlsZWZkID0gMDsKKworLyogQXMgb2YgVmVyc2lvbiA1QSwgdGhlIGF0dHJpYnV0ZSBzdHJ1Y3R1 cmUgYW5kIHRoZSBmaWxlIGluZm9ybWF0aW9uICovCisvKiBzdHJ1Y3R1cmUgYXJlIGluY2x1ZGVk IGluIHRoZSBhcmdsaXN0LiAqLworCisjaWZkZWYgREVCVUcKKyAgICBkZWJ1ZyhGMTExLCJ6b3Bl bm8iLG5hbWUsbik7CisgICAgaWYgKGZjYikgeworICAgICAgICBkZWJ1ZyhGMTAxLCJ6b3Blbm8g ZmNiIGRpc3AiLCIiLGZjYi0+ZHNwKTsKKyAgICAgICAgZGVidWcoRjEwMSwiem9wZW5vIGZjYiB0 eXBlIiwiIixmY2ItPnR5cCk7CisgICAgICAgIGRlYnVnKEYxMDEsInpvcGVubyBmY2IgY2hhciIs IiIsZmNiLT5jcyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZGVidWcoRjEwMCwiem9wZW5vIGZj YiBpcyBOVUxMIiwiIiwwKTsKKyAgICB9CisjZW5kaWYgLyogREVCVUcgKi8KKworICAgIGlmIChj aGtmbihuKSAhPSAwKSAgICAgICAgICAgICAgICAgIC8qIEFscmVhZHkgb3Blbj8gKi8KKyAgICAg IHJldHVybigwKTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBOb3RoaW5nIHRvIGRvLiAqLwor CisgICAgaWYgKChuID09IFpDVEVSTSkgfHwgKG4gPT0gWlNURElPKSkgeyAvKiBUZXJtaW5hbCBv ciBzdGFuZGFyZCBvdXRwdXQgKi8KKyAgICAgICAgZnBbWk9GSUxFXSA9IHN0ZG91dDsKKyAgICAg ICAgaXNwaXBlW1pPRklMRV0gPSAwOworI2lmZGVmIENPTU1FTlQKKwkvKiBUaGlzIHNlZW1zIHJp Z2h0IGJ1dCBpdCBicmVha3MgY2xpZW50IHNlcnZlciBvcHMgKi8KKwlmcFtuXSA9IHN0ZG91dDsK KyAgICAgICAgaXNwaXBlW25dID0gMDsKKyNlbmRpZiAvKiBDT01NRU5UICovCisjaWZkZWYgQ09N TUVOVAorI2lmZGVmIERFQlVHCisgICAgICAgIGlmIChuICE9IFpERklMRSkKKyAgICAgICAgICBk ZWJ1ZyhGMTAxLCJ6b3Blbm8gZnBbbl09c3Rkb3V0IiwiIixmcFtuXSk7CisjZW5kaWYgLyogREVC VUcgKi8KKyNlbmRpZgkvKiBDT01NRU5UICovCisgICAgICAgIHpvdXRjbnQgPSAwOworICAgICAg ICB6b3V0cHRyID0gem91dGJ1ZmZlcjsKKyAgICAgICAgcmV0dXJuKDEpOworICAgIH0KKworLyog QSByZWFsIGZpbGUuICBPcGVuIGl0IGluIGRlc2lyZWQgbW9kZSAoY3JlYXRlIG9yIGFwcGVuZCku ICovCisKKyNpZmRlZiBDS1JPT1QKKyAgICBkZWJ1ZyhGMTExLCJ6b3Blbm8gc2V0cm9vdCIsY2ty b290LGNrcm9vdHNldCk7CisgICAgaWYgKGNrcm9vdHNldCkgaWYgKCF6aW5yb290KG5hbWUpKSB7 CisJZGVidWcoRjExMCwiem9wZW5vIHNldHJvb3QgdmlvbGF0aW9uIixuYW1lLDApOworCXJldHVy bigwKTsKKyAgICB9CisjZW5kaWYgLyogQ0tST09UICovCisKKyAgICBja3N0cm5jcHkocCwidyIs OCk7CQkJLyogQXNzdW1lIHdyaXRlL2NyZWF0ZSBtb2RlICovCisgICAgaWYgKGZjYikgeyAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogSWYgY2FsbGVkIHdpdGggYW4gRkNCLi4uICovCisgICAg ICAgIGlmIChmY2ItPmRzcCA9PSBYWUZaX0EpIHsgICAgICAgLyogRG9lcyBpdCBzYXkgQXBwZW5k PyAqLworICAgICAgICAgICAgY2tzdHJuY3B5KHAsImEiLDgpOwkJLyogWWVzLiAqLworICAgICAg ICAgICAgZGVidWcoRjEwMCwiem9wZW5vIGFwcGVuZCIsIiIsMCk7CisgICAgICAgICAgICBhcHBl bmQgPSAxOworICAgICAgICB9CisgICAgfQorICAgIGlmICh4ZmVybG9nCisjaWZkZWYgQ0tTWVNM T0cKKyAgICAgICAgfHwgKChja3hzeXNsb2cgPj0gU1lTTEdfRkMpICYmIGNreGxvZ2dpbmcpCisj ZW5kaWYgLyogQ0tTWVNMT0cgKi8KKyAgICAgICAgKSB7CisgICAgICAgIGdldGZ1bGxuYW1lKG5h bWUpOworICAgICAgICBkZWJ1ZyhGMTEwLCJ6b3Blbm8gZnVsbG5hbWUiLGZ1bGxuYW1lLDApOwor ICAgIH0KKyAgICB7CisgICAgLyogQWxsb3cgdHR5IGRldmljZXMgdG8gb3BlbmVkIGFzIG91dHB1 dCBmaWxlcyAyMDA5LzEwLzIwICovCisJaW50IGZkLCBtb2RlID0gMDsKKwlkZWJ1ZyhGMTEwLCJ6 b3Blbm8gYXR0ZW1wdGluZyB0byBvcGVuIixuYW1lLDApOworI2lmZGVmIE9fTk9OQkxPQ0sKKwlt b2RlID0gT19OT05CTE9DSzsKKyNlbHNlCisjaWZkZWYgT19OREVMQVkKKwltb2RlID0gT19OREVM QVk7CisjZWxzZQorI2lmZGVmIEZOREVMQVkKKwltb2RlID0gRk5ERUxBWTsKKyNlbmRpZiAvKiBG TkRFTEFZICovCisjZW5kaWYJLyogT19OREVMQVkgKi8KKyNlbmRpZgkvKiBPX05PTkJMT0NLICov CisJZGVidWcoRjExMSwiem9wZW5vIG9wZW4gbW9kZSIsbmFtZSxtb2RlKTsKKwlmZCA9IG9wZW4o bmFtZSxPX1dST05MWSxtb2RlKTsKKwlkZWJ1ZyhGMTExLCJ6b3Blbm8gb3BlbiIsbmFtZSxmZCk7 IAorCWlmIChmZCA+IC0xKSB7CisJICAgIGlmIChpc2F0dHkoZmQpKSB7CisJCWZpbGVmZCA9IGZk OworCQlpc3R0eSsrOworCSAgICB9CisJfQorICAgIH0KKyAgICBkZWJ1ZyhGMTExLCJ6b3Blbm8g aXN0dHkiLG5hbWUsaXN0dHkpOworICAgIGRlYnVnKEYxMTAsInpvcGVubyBmb3BlbiBhcmciLHAs MCk7CisgICAgaWYgKGlzdHR5KQorICAgICAgZnBbbl0gPSBmZG9wZW4oZmlsZWZkLHApOworICAg IGVsc2UKKyAgICAgIGZwW25dID0gZm9wZW4obmFtZSxwKTsJCS8qIFRyeSB0byBvcGVuIHRoZSBm aWxlICovCisgICAgaXNwaXBlW1pJRklMRV0gPSAwOworCisjaWZkZWYgWkRFQlVHCisgICAgcHJp bnRmKCJaT1BFTk8gZnBbJWRdPSVsZFxuIixuLGZwW25dKTsKKyNlbmRpZiAvKiBaREVCVUcgKi8K KworICAgIGlmIChmcFtuXSA9PSBOVUxMKSB7ICAgICAgICAgICAgICAgIC8qIEZhaWxlZCAqLwor ICAgICAgICBkZWJ1ZyhGMTAxLCJ6b3Blbm8gZmFpbGVkIGVycm5vIiwiIixlcnJubyk7CisJaWYg KGlzdHR5KSBjbG9zZShmaWxlZmQpOworI2lmZGVmIENLU1lTTE9HCisgICAgICAgIGlmIChja3hz eXNsb2cgPj0gU1lTTEdfRkMgJiYgY2t4bG9nZ2luZykKKyAgICAgICAgICBzeXNsb2coTE9HX0lO Rk8sICJmaWxlWyVkXSAlczogJXMgZmFpbGVkICglbSkiLAorICAgICAgICAgICAgICAgICBuLAor ICAgICAgICAgICAgICAgICBmdWxsbmFtZSwKKyAgICAgICAgICAgICAgICAgYXBwZW5kID8gImFw cGVuZCIgOiAiY3JlYXRlIgorICAgICAgICAgICAgICAgICApOworI2VuZGlmIC8qIENLU1lTTE9H ICovCisjaWZkZWYgQ09NTUVOVCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTGV0IHVwcGVy IGxldmVscyBwcmludCBtZXNzYWdlLiAqLworICAgICAgICBwZXJyb3IoIkNhbid0IG9wZW4gb3V0 cHV0IGZpbGUiKTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgfSBlbHNlIHsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogU3VjY2VlZGVkICovCisgICAgICAgIGV4dGVybiBpbnQgem9m YnVmZmVyLCB6b2ZibG9jaywgem9idWZzaXplOworICAgICAgICBkZWJ1ZyhGMTAxLCAiem9wZW5v IHpvYnVmc2l6ZSIsICIiLCB6b2J1ZnNpemUpOworICAgICAgICBpZiAobiA9PSBaREZJTEUgfHwg biA9PSBaVEZJTEUpIHsgLyogSWYgZGVidWcgb3IgdHJhbnNhY3Rpb24gbG9nICovCisgICAgICAg ICAgICBzZXRidWYoZnBbbl0sTlVMTCk7ICAgICAgICAgICAvKiBtYWtlIGl0IHVuYnVmZmVyZWQu ICovCisjaWZkZWYgRE9OREVMQVkKKyAgICAgICAgfSBlbHNlIGlmIChuID09IFpPRklMRSAmJiAh em9mYmxvY2spIHsgLyogYmxvY2tpbmcgb3Igbm9uYmxvY2tpbmcgKi8KKyAgICAgICAgICAgIGlu dCBmbGFnczsKKyAgICAgICAgICAgIGlmICgoZmxhZ3MgPSBmY250bChmaWxlbm8oZnBbbl0pLEZf R0VURkwsMCkpID4gLTEpCisgICAgICAgICAgICAgIGZjbnRsKGZpbGVubyhmcFtuXSksRl9TRVRG TCwgZmxhZ3MgfAorI2lmZGVmIFFOWAorICAgICAgICAgICAgICAgICAgICBPX05PTkJMT0NLCisj ZWxzZQorICAgICAgICAgICAgICAgICAgICBPX05ERUxBWQorI2VuZGlmIC8qIFFOWCAqLworICAg ICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgZGVidWcoRjEwMCwiem9wZW5vIFpPRklM RSBub25ibG9ja2luZyIsIiIsMCk7CisjZW5kaWYgLyogRE9OREVMQVkgKi8KKyAgICAgICAgfSBl bHNlIGlmIChuID09IFpPRklMRSAmJiAhem9mYnVmZmVyKSB7IC8qIGJ1ZmZlcmVkIG9yIHVuYnVm ZmVyZWQgKi8KKyAgICAgICAgICAgIHNldGJ1ZihmcFtuXSxOVUxMKTsKKyAgICAgICAgICAgIGRl YnVnKEYxMDAsInpvcGVubyBaT0ZJTEUgdW5idWZmZXJlZCIsIiIsMCk7CisgICAgICAgIH0KKwor I2lmZGVmIENLX0xPR0lOCisgICAgICAgIC8qIEVuZm9yY2UgYW5vbnltb3VzIGZpbGUtY3JlYXRp b24gcGVybWlzc2lvbiAqLworICAgICAgICBpZiAoaXNndWVzdCkKKyAgICAgICAgICBpZiAobiA9 PSBaV0ZJTEUgfHwgbiA9PSBaTUZJTEUgfHwKKyAgICAgICAgICAgICAgbiA9PSBaT0ZJTEUgfHwg biA9PSBaREZJTEUgfHwKKyAgICAgICAgICAgICAgbiA9PSBaVEZJTEUgfHwgbiA9PSBaUEZJTEUg fHwKKyAgICAgICAgICAgICAgbiA9PSBaU0ZJTEUpCisgICAgICAgICAgICBjaG1vZChuYW1lLGNr eHBlcm1zKTsKKyNlbmRpZiAvKiBDS19MT0dJTiAqLworI2lmZGVmIENLU1lTTE9HCisgICAgICAg IGlmIChja3hzeXNsb2cgPj0gU1lTTEdfRkMgJiYgY2t4bG9nZ2luZykKKyAgICAgICAgICBzeXNs b2coTE9HX0lORk8sICJmaWxlWyVkXSAlczogJXMgb2siLAorICAgICAgICAgICAgICAgICBuLAor ICAgICAgICAgICAgICAgICBmdWxsbmFtZSwKKyAgICAgICAgICAgICAgICAgYXBwZW5kID8gImFw cGVuZCIgOiAiY3JlYXRlIgorICAgICAgICAgICAgICAgICApOworI2VuZGlmIC8qIENLU1lTTE9H ICovCisgICAgICAgIGRlYnVnKEYxMDAsICJ6b3Blbm8gb2siLCAiIiwgMCk7CisgICAgfQorICAg IHpvdXRjbnQgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIChQV1ApIHJlc2V0IG91dHB1 dCBidWZmZXIgKi8KKyAgICB6b3V0cHRyID0gem91dGJ1ZmZlcjsKKyAgICByZXR1cm4oKGZwW25d ICE9IE5VTEwpID8gMSA6IDApOworfQorCisvKiAgWiBDIEwgTyBTIEUgIC0tICBDbG9zZSB0aGUg Z2l2ZW4gZmlsZS4gICovCisKKy8qICBSZXR1cm5zIDAgaWYgYXJnIG91dCBvZiByYW5nZSwgMSBp ZiBzdWNjZXNzZnVsLCAtMSBpZiBjbG9zZSBmYWlsZWQuICAqLworCitpbnQKK3pjbG9zZShuKSBp bnQgbjsgeworICAgIGludCB4ID0gMCwgeDIgPSAwOworICAgIGV4dGVybiBDS19PRkZfVCBmZmM7 CisKKyAgICBkZWJ1ZyhGMTAxLCJ6Y2xvc2UgZmlsZSBudW1iZXIiLCIiLG4pOworICAgIGlmIChj aGtmbihuKSA8IDEpIHJldHVybigwKTsgICAgICAgIC8qIENoZWNrIHJhbmdlIG9mIG4gKi8KKyAg ICBpZiAoKG4gPT0gWk9GSUxFKSAmJiAoem91dGNudCA+IDApKSAvKiAoUFdQKSBvdXRwdXQgbGVm dG92ZXJzICovCisgICAgICB4MiA9IHpvdXRkdW1wKCk7CisKKyAgICBpZiAoZnBbWlNZU0ZOXSB8 fCBpc3BpcGVbbl0pIHsgICAgICAvKiBJZiBmaWxlIGlzIHJlYWxseSBwaXBlICovCisjaWZuZGVm IE5PUFVTSAorICAgICAgICB4ID0gemNsb3NmKG4pOyAgICAgICAgICAgICAgICAgIC8qIGRvIGl0 IHNwZWNpYWxseSAqLworI2Vsc2UKKyAgICAgICAgeCA9IEVPRjsKKyNlbmRpZiAvKiBOT1BVU0gg Ki8KKyAgICAgICAgZGVidWcoRjEwMSwiemNsb3NlIHpjbG9zZiIsIiIseCk7CisgICAgICAgIC8q IGRlYnVnKEYxMDEsInpjbG9zZSB6Y2xvc2YgZnBbbl0iLCIiLGZwW25dKTsgKi8KKyAgICB9IGVs c2UgeworICAgICAgICBpZiAoKGZwW25dICE9IHN0ZG91dCkgJiYgKGZwW25dICE9IHN0ZGluKSkK KyAgICAgICAgICB4ID0gZmNsb3NlKGZwW25dKTsKKyAgICAgICAgZnBbbl0gPSBOVUxMOworI2lm ZGVmIENPTU1FTlQKKwlpZiAobiA9PSBaQ1RFUk0gfHwgbiA9PSBaU1RESU8pCS8qIFNlZSB6b3Bl bm8oKSAqLworCSAgaWYgKGZwW1pPRklMRV0gPT0gc3Rkb3V0KQorCSAgICBmcFtaT0ZJTEVdID0g TlVMTDsKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgfQorICAgIGlmbGVuID0gLTFMOyAgICAg ICAgICAgICAgICAgICAgICAgIC8qIEludmFsaWRhdGUgZmlsZSBsZW5ndGggKi8KKyAgICBpZiAo eCA9PSBFT0YpIHsgICAgICAgICAgICAgICAgICAgICAvKiBpZiB3ZSBnb3QgYSBjbG9zZSBlcnJv ciAqLworICAgICAgICBkZWJ1ZyhGMTAxLCJ6Y2xvc2UgZmNsb3NlIGZhaWxzIiwiIix4KTsKKyAg ICAgICAgcmV0dXJuKC0xKTsKKyAgICB9IGVsc2UgaWYgKHgyIDwgMCkgeyAgICAgICAgICAgICAg ICAvKiBvciBlcnJvciBmbHVzaGluZyBsYXN0IGJ1ZmZlciAqLworICAgICAgICBkZWJ1ZyhGMTAx LCJ6Y2xvc2UgZXJyb3IgZmx1c2hpbmcgbGFzdCBidWZmZXIiLCIiLHgyKTsKKyAgICAgICAgcmV0 dXJuKC0xKTsgICAgICAgICAgICAgICAgICAgICAvKiB0aGVuIHJldHVybiBhbiBlcnJvciAqLwor ICAgIH0gZWxzZSB7CisgICAgICAgIC8qIFByaW50IGxvZyByZWNvcmQgY29tcGF0aWJsZSB3aXRo IHd1LWZ0cGQgKi8KKyAgICAgICAgaWYgKHhmZXJsb2cgJiYgKG4gPT0gWklGSUxFIHx8IG4gPT0g Wk9GSUxFKSkgeworICAgICAgICAgICAgY2hhciAqIHMsICpwOworICAgICAgICAgICAgZXh0ZXJu IGNoYXIgdHRuYW1lW107CisgICAgICAgICAgICBpZiAoIWlrbG9nb3BlbikgKFZPSUQpIGRvaWts b2coKTsgLyogT3BlbiBsb2cgaWYgbmVjZXNzYXJ5ICovCisgICAgICAgICAgICBkZWJ1ZyhGMTAx LCJ6Y2xvc2UgaWtsb2dvcGVuIiwiIixpa2xvZ29wZW4pOworICAgICAgICAgICAgaWYgKGlrbG9n b3BlbikgeworCQlpbnQgbGVuOworCQljaGFyICogZm5hbTsKKworICAgICAgICAgICAgICAgIHRp bWVub3cgPSB0aW1lKE5VTEwpOworI2lmZGVmIENLX0xPR0lOCisgICAgICAgICAgICAgICAgaWYg KGxvZ2dlZF9pbikKKyAgICAgICAgICAgICAgICAgIHMgPSBjbGllbnRob3N0OworICAgICAgICAg ICAgICAgIGVsc2UKKyNlbmRpZiAvKiBDS19MT0dJTiAqLworICAgICAgICAgICAgICAgICAgcyA9 IChjaGFyICopdHRuYW1lOworICAgICAgICAgICAgICAgIGlmICghcykgcyA9ICIiOworICAgICAg ICAgICAgICAgIGlmICghKnMpIHMgPSAiKiI7CisjaWZkZWYgQ0tfTE9HSU4KKyAgICAgICAgICAg ICAgICBpZiAobG9nZ2VkX2luKSB7CisgICAgICAgICAgICAgICAgICAgIHAgPSBndWVzdHBhc3M7 CisgICAgICAgICAgICAgICAgICAgIGlmICghKnApIHAgPSAiKiI7CisgICAgICAgICAgICAgICAg fSBlbHNlCisjZW5kaWYgLyogQ0tfTE9HSU4gKi8KKyAgICAgICAgICAgICAgICAgIHAgPSB3aG9h bWkoKTsKKworCQlsZW4gPSAyNCArIDEyICsgKGludClzdHJsZW4ocykgKyAxNgorCQkgICsgKGlu dClzdHJsZW4oZnVsbG5hbWUpICsgMSArIDEgKyAxICsgMQorCQkgICAgKyAoaW50KXN0cmxlbihw KSArIDYgKyAyICsgMTI7CisJCWZuYW0gPSBmdWxsbmFtZTsKKwkJaWYgKCEqZm5hbSkgZm5hbSA9 ICIocGlwZSkiOworCisJCWlmIChsZW4gPiBJS1NETVNHTEVOKQorCQkgIHNwcmludGYoaWtzZG1z ZywJLyogU0FGRSAqLworICAgICAgICAgICAgICAgICAgICAgICAgIiUuMjRzIFtCVUZGRVIgV09V TEQgT1ZFUkZMT1ddXG4iLGN0aW1lKCZ0aW1lbm93KSk7CisJCWVsc2UKKwkJICBzcHJpbnRmKGlr c2Rtc2csCS8qIFNBRkUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICIlLjI0cyAlZCAlcyAl cyAlcyAlYyAlcyAlYyAlYyAlcyAlcyAlZCAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAg IGN0aW1lKCZ0aW1lbm93KSwgICAgICAgIC8qIGRhdGUvdGltZSAqLworICAgICAgICAgICAgICAg ICAgICAgICAgZ3RpbWVyKCksICAgICAgICAgICAgICAgLyogZWxhcHNlZCBzZWNzICovCisgICAg ICAgICAgICAgICAgICAgICAgICBzLCAgICAgICAgICAgICAgICAgICAgICAvKiBwZWVyIG5hbWUg Ki8KKwkJCWNrZnN0b2EoZmZjKSwJICAgICAgICAvKiBieXRlIGNvdW50ICovCisgICAgICAgICAg ICAgICAgICAgICAgICBmbmFtLAkJCS8qIGZ1bGwgcGF0aG5hbWUgb2YgZmlsZSAqLworICAgICAg ICAgICAgICAgICAgICAgICAgKGJpbmFyeSA/ICdiJyA6ICdhJyksICAgLyogYmluYXJ5IG9yIGFz Y2lpICovCisgICAgICAgICAgICAgICAgICAgICAgICAiXyIsICAgICAgICAgICAgICAgICAgICAv KiBvcHRpb25zID0gbm9uZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgbiA9PSBaSUZJTEUg PyAnbycgOiAnaScsIC8qIGluL291dCAqLworI2lmZGVmIENLX0xPR0lOCisgICAgICAgICAgICAg ICAgICAgICAgICAoaXNndWVzdCA/ICdhJyA6ICdyJyksICAvKiBVc2VyIHR5cGUgKi8KKyNlbHNl CisgICAgICAgICAgICAgICAgICAgICAgICAncicsCisjZW5kaWYgLyogQ0tfTE9HSU4gKi8KKyAg ICAgICAgICAgICAgICAgICAgICAgIHAsICAgICAgICAgICAgICAgICAgICAgIC8qIFVzZXJuYW1l IG9yIGd1ZXN0IHBhc3N3ZCAqLworI2lmZGVmIENLX0xPR0lOCisgICAgICAgICAgICAgICAgICAg ICAgICBsb2dnZWRfaW4gPyAiaWtzIiA6ICJrZXJtaXQiLCAvKiBSZWNvcmQgSUQgKi8KKyNlbHNl CisgICAgICAgICAgICAgICAgICAgICAgICAia2VybWl0IiwKKyNlbmRpZiAvKiBDS19MT0dJTiAq LworICAgICAgICAgICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgIC8qIFVzZXIgSUQgb24g Y2xpZW50IHN5c3RlbSB1bmtub3duICovCisgICAgICAgICAgICAgICAgICAgICAgICAiKiIgICAg ICAgICAgICAgLyogRGl0dG8gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAg ICAgICAgICAgZGVidWcoRjExMCwiemNsb3NlIGlrc2Rtc2ciLGlrc2Rtc2csMCk7CisgICAgICAg ICAgICAgICAgd3JpdGUoeGZlcmxvZywgaWtzZG1zZywgKGludClzdHJsZW4oaWtzZG1zZykpOwor ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGRlYnVnKEYxMDEsInpjbG9zZSByZXR1 cm5zIiwiIiwxKTsKKyAgICAgICAgcmV0dXJuKDEpOworICAgIH0KK30KKworLyogIFogQyBIIEkg TiAgLS0gIEdldCBhIGNoYXJhY3RlciBmcm9tIHRoZSBpbnB1dCBmaWxlLiAgKi8KKworLyogIFJl dHVybnMgLTEgaWYgRU9GLCAwIG90aGVyd2lzZSB3aXRoIGNoYXJhY3RlciByZXR1cm5lZCBpbiBh cmd1bWVudCAgKi8KKworaW50Cit6Y2hpbihuLGMpIGludCBuOyBpbnQgKmM7IHsKKyAgICBpbnQg YTsKKworI2lmZGVmIElLU0QKKyAgICBpZiAoaW5zZXJ2ZXIgJiYgIWxvY2FsICYmIChuID09IFpD VEVSTSB8fCBuID09IFpTVERJTykpIHsKKyAgICAgICAgYSA9IGNvbmluYygwKTsKKyAgICAgICAg aWYgKCpjIDwgMCkKKyAgICAgICAgICByZXR1cm4oLTEpOworICAgIH0gZWxzZQorI2VuZGlmIC8q IElLU0QgKi8KKyAgICAvKiAoUFdQKSBKdXN0IGluIGNhc2UgdGhpcyBnZXRzIGNhbGxlZCB3aGVu IGl0IHNob3VsZG4ndC4gKi8KKyAgICBpZiAobiA9PSBaSUZJTEUpIHsKKyAgICAgICAgYSA9IHpt aW5jaGFyKCk7CQkJLyogTm90ZTogdGhpcyBjYXRjaGVzIEN0cmwtWiAqLworICAgICAgICBpZiAo YSA8IDApCQkJLyogKFNlZSB6aW5maWxsKCkuLi4pICovCisJICByZXR1cm4oLTEpOworICAgIH0g ZWxzZSB7CisJYSA9IGdldGMoZnBbbl0pOworCWlmIChhID09IEVPRikgcmV0dXJuKC0xKTsKKyNp ZmRlZiBDS19DVFJMWgorCS8qIElmIFNFVCBGSUxFIEVPRiBDVFJMLVosIGZpcnN0IEN0cmwtWiBt YXJrcyBFT0YgKi8KKwlpZiAoIWJpbmFyeSAmJiBhID09IDB4MUEgJiYgZW9mbWV0aG9kID09IFhZ RU9GX1opCisJICByZXR1cm4oLTEpOworI2VuZGlmIC8qIENLX0NUUkxaICovCisgICAgfQorICAg ICpjID0gKENIQVIpIGEgJiAwMzc3OworICAgIHJldHVybigwKTsKK30KKworLyogIFogUyBJIE4g TCAgLS0gIFJlYWQgYSBsaW5lIGZyb20gYSBmaWxlICAqLworCisvKgorICBXcml0ZXMgdGhlIGxp bmUgaW50byB0aGUgYWRkcmVzcyBwcm92aWRlZCBieSB0aGUgY2FsbGVyLgorICBuIGlzIHRoZSBL ZXJtaXQgImNoYW5uZWwgbnVtYmVyIi4KKyAgV3JpdGluZyB0ZXJtaW5hdGVzIHdoZW4gbmV3bGlu ZSBpcyBlbmNvdW50ZXJlZCwgbmV3bGluZSBpcyBub3QgY29waWVkLgorICBXcml0aW5nIGFsc28g dGVybWluYXRlcyB1cG9uIEVPRiBvciBpZiBsZW5ndGggeCBpcyBleGhhdXN0ZWQuCisgIFJldHVy bnMgMCBvbiBzdWNjZXNzLCAtMSBvbiBFT0Ygb3IgZXJyb3IuCisqLworaW50Cit6c2lubChuLHMs eCkgaW50IG4sIHg7IGNoYXIgKnM7IHsKKyAgICBpbnQgYSwgeiA9IDA7ICAgICAgICAgICAgICAg ICAgICAgICAvKiB6IGlzIHJldHVybiBjb2RlLiAqLworICAgIGludCBjb3VudCA9IDA7CisgICAg aW50IGxlbiA9IDA7CisgICAgY2hhciAqYnVmOworICAgIGV4dGVybiBDSEFSIGZlb2w7ICAgICAg ICAgICAgICAgICAgIC8qIExpbmUgdGVybWluYXRvciAqLworCisgICAgaWYgKCFzIHx8IGNoa2Zu KG4pIDwgMSkgICAgICAgICAgICAgLyogTWFrZSBzdXJlIGZpbGUgaXMgb3BlbiwgZXRjICovCisg ICAgICByZXR1cm4oLTEpOworICAgIGJ1ZiA9IHM7CisgICAgc1swXSA9ICdcMCc7ICAgICAgICAg ICAgICAgICAgICAgICAgLyogRG9uJ3QgcmV0dXJuIGp1bmsgKi8KKworICAgIGEgPSAtMTsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEN1cnJlbnQgY2hhcmFjdGVyLCBub25lIHlldC4g Ki8KKyAgICB3aGlsZSAoeC0tKSB7ICAgICAgICAgICAgICAgICAgICAgICAvKiBVcCB0byBnaXZl biBsZW5ndGggKi8KKyAgICAgICAgaW50IG9sZCA9IDA7CisgICAgICAgIGlmIChmZW9sKSAgICAg ICAgICAgICAgICAgICAgICAgLyogUHJldmlvdXMgY2hhcmFjdGVyICovCisgICAgICAgICAgb2xk ID0gYTsKKyAgICAgICAgaWYgKHpjaGluKG4sJmEpIDwgMCkgeyAgICAgICAgICAvKiBSZWFkIGEg Y2hhcmFjdGVyIGZyb20gdGhlIGZpbGUgKi8KKyAgICAgICAgICAgIGRlYnVnKEYxMDEsInpzaW5s IHpjaGluIGZhaWwiLCIiLGNvdW50KTsKKyAgICAgICAgICAgIGlmIChjb3VudCA9PSAwKQorICAg ICAgICAgICAgICB6ID0gLTE7ICAgICAgICAgICAgICAgICAgIC8qIEVPRiBvciBvdGhlciBlcnJv ciAqLworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgIGNvdW50 Kys7CisgICAgICAgIGlmIChmZW9sKSB7ICAgICAgICAgICAgICAgICAgICAgLyogU2luZ2xlLWNo YXJhY3RlciBsaW5lIHRlcm1pbmF0b3IgKi8KKyAgICAgICAgICAgIGlmIChhID09IGZlb2wpCisg ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAg ICAgIC8qIENSTEYgbGluZSB0ZXJtaW5hdG9yICovCisgICAgICAgICAgICBpZiAoYSA9PSAnXDAx NScpICAgICAgICAgICAgLyogQ1IsIGdldCBuZXh0IGNoYXJhY3RlciAqLworICAgICAgICAgICAg ICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmIChvbGQgPT0gJ1wwMTUnKSB7ICAgICAgICAvKiBQ cmV2aW91cyBjaGFyYWN0ZXIgd2FzIENSICovCisgICAgICAgICAgICAgICAgaWYgKGEgPT0gJ1ww MTInKSB7ICAgICAgLyogVGhpcyBvbmUgaXMgTEYsIHNvIHdlIGhhdmUgYSBsaW5lICovCisgICAg ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0gZWxzZSB7ICAgICAgICAg ICAgICAgIC8qIE5vdCBMRiwgZGVwb3NpdCBDUiAqLworICAgICAgICAgICAgICAgICAgICAqcysr ID0gJ1wwMTUnOworICAgICAgICAgICAgICAgICAgICB4LS07CisgICAgICAgICAgICAgICAgICAg IGxlbisrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg ICAgICAqcyA9IGE7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERlcG9zaXQgY2hhcmFjdGVy ICovCisgICAgICAgIHMrKzsKKyAgICAgICAgbGVuKys7CisgICAgfQorICAgICpzID0gJ1wwJzsg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRlcm1pbmF0ZSB0aGUgc3RyaW5nICovCisgICAg ZGVidWcoRjAxMSwienNpbmwiLGJ1ZixsZW4pOworICAgIHJldHVybih6KTsKK30KKworLyogIFog WCBJIE4gIC0tICBSZWFkIHggYnl0ZXMgZnJvbSBhIGZpbGUgICovCisKKy8qCisgIFJlYWRzIHgg Ynl0ZXMgKG9yIGxlc3MpIGZyb20gY2hhbm5lbCBuIGFuZCB3cml0ZXMgdGhlbQorICB0byB0aGUg YWRkcmVzcyBwcm92aWRlZCBieSB0aGUgY2FsbGVyLgorICBSZXR1cm5zIG51bWJlciBvZiBieXRl cyByZWFkIG9uIHN1Y2Nlc3MsIDAgb24gRU9GIG9yIGVycm9yLgorKi8KK2ludAorenhpbihuLHMs eCkgaW50IG4sIHg7IGNoYXIgKnM7IHsKKyNpZmRlZiBJS1NECisgICAgaWYgKGluc2VydmVyICYm ICFsb2NhbCAmJiAobiA9PSBaQ1RFUk0gfHwgbiA9PSBaU1RESU8pKSB7CisgICAgICAgIGludCBh LCBpOworICAgICAgICBhID0gdHRjaGsoKTsKKyAgICAgICAgaWYgKGEgPCAxKSByZXR1cm4oMCk7 CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBhICYmIGkgPCB4OyBpKyspCisgICAgICAgICAgc1tp XSA9IGNvbmluYygwKTsKKyAgICAgICAgcmV0dXJuKGkpOworICAgIH0KKyNlbmRpZiAvKiBJS1NE ICovCisKKyAgICByZXR1cm4oZnJlYWQocywgc2l6ZW9mIChjaGFyKSwgeCwgZnBbbl0pKTsKK30K KworLyoKKyAgWiBJIE4gRiBJIEwgTCAgLS0gIEJ1ZmZlcmVkIGZpbGUgaW5wdXQuCisKKyAgKHJl KWZpbGwgdGhlIGZpbGUgaW5wdXQgYnVmZmVyIHdpdGggZGF0YS4gIEFsbCBmaWxlIGlucHV0Cisg IHNob3VsZCBnbyB0aHJvdWdoIHRoaXMgcm91dGluZSwgdXN1YWxseSBieSBjYWxsaW5nIHRoZSB6 bWluY2hhcigpCisgIG1hY3JvIGRlZmluZWQgaW4gY2tja2VyLmguICBSZXR1cm5zOgorCisgIFZh bHVlIDAuLjI1NSBvbiBzdWNjZXNzLCB0aGUgY2hhcmFjdGVyIHRoYXQgd2FzIHJlYWQuCisgIC0x IG9uIGVuZCBvZiBmaWxlLgorICAtMiBvbiBhbnkga2luZCBvZiBlcnJvciBvdGhlciB0aGFuIGVu ZCBvZiBmaWxlLgorICAtMyB0aW1lb3V0IHdoZW4gcmVhZGluZyBmcm9tIHBpcGUgKEtlcm1pdCBw YWNrZXQgbW9kZSBvbmx5KS4KKyovCitpbnQKK3ppbmZpbGwoKSB7CisgICAgZXh0ZXJuIGludCBr YWN0aXZlLCBzcnZwaW5nOworICAgIGVycm5vID0gMDsKKworI2lmZGVmIFpERUJVRworICAgIHBy aW50ZigiWklORklMTCBmcFslZF09JWxkXG4iLFpJRklMRSxmcFtaSUZJTEVdKTsKKyNlbmRpZiAv KiBaREVCVUcgKi8KKworI2lmZGVmIElLU0QKKyAgICBpZiAoaW5zZXJ2ZXIgJiYgIWxvY2FsICYm IGZwW1pJRklMRV0gPT0gc3RkaW4pIHsKKyAgICAgICAgaW50IGEsIGk7CisgICAgICAgIGEgPSB0 dGNoaygpOworICAgICAgICBpZiAoYSA8IDApIHJldHVybigtMik7CisgICAgICAgIGZvciAoaSA9 IDA7IGkgPCBhICYmIGkgPCBJTkJVRlNJWkU7IGkrKykgeworICAgICAgICAgICAgemluYnVmZmVy W2ldID0gY29uaW5jKDApOworICAgICAgICB9CisgICAgICAgIHppbmNudCA9IGk7CisgICAgICAg IC8qIHNldCBwb2ludGVyIHRvIGJlZ2lubmluZywgKD09ICZ6aW5idWZmZXJbMF0pICovCisgICAg ICAgIHppbnB0ciA9IHppbmJ1ZmZlcjsKKyAgICAgICAgaWYgKHppbmNudCA9PSAwKSByZXR1cm4o LTEpOworICAgICAgICB6aW5jbnQtLTsgICAgICAgICAgICAgICAgICAgICAgIC8qIE9uZSBsZXNz IGNoYXIgaW4gYnVmZmVyICovCisgICAgICAgIHJldHVybigoaW50KSgqemlucHRyKyspICYgMDM3 Nyk7IC8qIGJlY2F1c2Ugd2UgcmV0dXJuIHRoZSBmaXJzdCAqLworICAgIH0KKyNlbmRpZiAvKiBJ S1NEICovCisKKyAgICBkZWJ1ZyhGMTAxLCJ6aW5maWxsIGthY3RpdmUiLCIiLGthY3RpdmUpOwor CisgICAgaWYgKCEoa2FjdGl2ZSAmJiBpc3BpcGVbWklGSUxFXSkpIHsKKyAgICAgICAgaWYgKGZl b2YoZnBbWklGSUxFXSkpIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMDAsIlpJTkZJTEwgZmVvZiIs IiIsMCk7CisjaWZkZWYgWkRFQlVHCisgICAgICAgICAgICBwcmludGYoIlpJTkZJTEwgRU9GXG4i KTsKKyNlbmRpZiAvKiBaREVCVUcgKi8KKyAgICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAg IH0KKyAgICB9CisgICAgY2xlYXJlcnIoZnBbWklGSUxFXSk7CisKKyNpZmRlZiBTRUxFQ1QKKyAg ICAvKiBIZXJlIHdlIGNhbiBjYWxsIHNlbGVjdCgpIHRvIGdldCBhIHRpbWVvdXQuLi4gKi8KKyAg ICBpZiAoa2FjdGl2ZSAmJiBpc3BpcGVbWklGSUxFXSkgeworICAgICAgICBpbnQgc2VjcywgeiA9 IDA7CisjaWZuZGVmIE5PWEZFUgorICAgICAgICBpZiAoc3J2cGluZykgeworICAgICAgICAgICAg c2VjcyA9IDE7CisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJ6aW5maWxsIGNhbGxpbmcgdHR3YWl0 IiwiIixzZWNzKTsKKyAgICAgICAgICAgIHogPSB0dHdhaXQoZmlsZW5vKGZwW1pJRklMRV0pLHNl Y3MpOworICAgICAgICAgICAgZGVidWcoRjEwMSwiemluZmlsbCB0dHdhaXQiLCIiLHopOworICAg ICAgICB9CisjZW5kaWYgLyogTk9YRkVSICovCisgICAgICAgIGlmICh6ID09IDApCisgICAgICAg ICAgcmV0dXJuKC0zKTsKKyAgICB9CisjZW5kaWYgLyogU0VMRUNUICovCisKKyNpZmRlZiBERUJV RworICAgIGlmIChkZWJsb2cpIHsKKyAgICAgICAgaW50IGk7CisgICAgICAgIGRlYnVnKEYxMDEs IlpJTkZJTEwgSU5CVUZTSVpFIiwiIixJTkJVRlNJWkUpOworI2lmZGVmIFVTRV9NRU1DUFkKKyAg ICAgICAgbWVtc2V0KHppbmJ1ZmZlciwgMHhGRiwgSU5CVUZTSVpFKTsKKyNlbHNlCisgICAgICAg IGZvciAoaSA9IDA7IGkgPCBJTkJVRlNJWkU7IGkrKykgeworICAgICAgICAgICAgemluYnVmZmVy W2ldID0gMHhGRjsKKyNpZmRlZiBDT01NRU5UCQkJCS8qIFRvbyBtdWNoISAqLworICAgICAgICAg ICAgZGVidWcoRjEwMSwiWklORklMTCB6aW5idWZmZXJbaV0iLCIiLGkpOworI2VuZGlmIC8qIENP TU1FTlQgKi8KKyAgICAgICAgfQorI2VuZGlmIC8qIFVTRV9NRU1DUFkgKi8KKwlja3N0cm5jcHko emluYnVmZmVyLCJ6aW5idWZmZXIgaXMgYSB2YWxpZCBidWZmZXIiLElOQlVGU0laRSk7CisJLyog ZGVidWcoRjExMSwiWklORklMTCBhYm91dCB0byBjYWxsIGZyZWFkIix6aW5idWZmZXIsemluYnVm ZmVyKTsgKi8KKyAgICB9CisjZW5kaWYgLyogREVCVUcgKi8KKworLyoKKyAgTm90ZTogVGhlIGZv bGxvd2luZyByZWFkIE1VU1QgYmUgbm9uYmxvY2tpbmcgd2hlbiByZWFkaW5nIGZyb20gYSBwaXBl CisgIGFuZCB3ZSB3YW50IHRpbWVvdXRzIHRvIHdvcmsuICBTZWUgenhjbWQoKS4KKyovCisgICAg emluY250ID0gZnJlYWQoemluYnVmZmVyLCBzaXplb2YgKGNoYXIpLCBJTkJVRlNJWkUsIGZwW1pJ RklMRV0pOworICAgIGRlYnVnKEYxMDEsIlpJTkZJTEwgZnJlYWQiLCIiLHppbmNudCk7IC8qIEp1 c3QgdGhlIHNpemUgKi8KKyNpZmRlZiBaREVCVUcKKyAgICBwcmludGYoIkZSRUFEPSVkXG4iLHpp bmNudCk7CisjZW5kaWYgLyogWkRFQlVHICovCisjaWZkZWYgQ0tfQ1RSTFoKKyAgICAvKiBJZiBT RVQgRklMRSBFT0YgQ1RSTC1aLCBmaXJzdCBDdHJsLVogbWFya3MgRU9GICovCisgICAgaWYgKHpp bmNudCA+IDAgJiYgIWJpbmFyeSAmJiBlb2ZtZXRob2QgPT0gWFlFT0ZfWikgeworCXJlZ2lzdGVy IGludCBpOworCWZvciAoaSA9IDA7IGkgPCB6aW5jbnQ7IGkrKykgeworCSAgICBpZiAoemluYnVm ZmVyW2ldID09IFNVQikgeworCQl6aW5jbnQgPSBpOwkJLyogU3RvcCBhdCBmaXJzdCBDdHJsLVog Ki8KKwkJaWYgKGkgPT0gMCkKKwkJICByZXR1cm4oLTEpOworCQlicmVhazsKKwkgICAgfQorICAg ICAgICB9CisgICAgfQorI2VuZGlmIC8qIENLX0NUUkxaICovCisKKyAgICBpZiAoemluY250ID09 IDApIHsgICAgICAgICAgICAgICAgICAvKiBHb3Qgbm90aGluZz8gKi8KKyAgICAgICAgaWYgKGZl cnJvcihmcFtaSUZJTEVdKSkgeworICAgICAgICAgICAgZGVidWcoRjEwMCwiWklORklMTCBmZXJy b3IiLCIiLDApOworICAgICAgICAgICAgZGVidWcoRjEwMSwiWklORklMTCBlcnJubyIsIiIsZXJy bm8pOworI2lmZGVmIFpERUJVRworICAgICAgICAgICAgcHJpbnRmKCJaSU5GSUxMIGVycm5vPSVk XG4iLGVycm5vKTsKKyNlbmRpZiAvKiBaREVCVUcgKi8KKyNpZmRlZiBFV09VTERCTE9DSworICAg ICAgICAgICAgcmV0dXJuKChlcnJubyA9PSBFV09VTERCTE9DSykgPyAtMyA6IC0yKTsKKyNlbHNl CisgICAgICAgICAgICByZXR1cm4oLTIpOworI2VuZGlmIC8qIEVXT1VMREJMT0NLICovCisgICAg ICAgIH0KKworICAgIC8qIEluIGNhc2UgZmVvZigpIGRpZG4ndCB3b3JrIGp1c3QgYWJvdmUgLS0g c29tZXRpbWVzIGl0IGRvZXNuJ3QuLi4gKi8KKworICAgICAgICBpZiAoZmVvZihmcFtaSUZJTEVd KSApIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMDAsIlpJTkZJTEwgY291bnQgMCBFT0YgcmV0dXJu IC0xIiwiIiwwKTsKKyAgICAgICAgICAgIHJldHVybiAoLTEpOworICAgICAgICB9IGVsc2Ugewor ICAgICAgICAgICAgZGVidWcoRjEwMCwiWklORklMTCBjb3VudCAwIG5vdCBFT0YgcmV0dXJuIC0y IiwiIiwwKTsKKyAgICAgICAgICAgIHJldHVybigtMik7CisgICAgICAgIH0KKyAgICB9CisgICAg emlucHRyID0gemluYnVmZmVyOyAgICAvKiBzZXQgcG9pbnRlciB0byBiZWdpbm5pbmcsICg9PSAm emluYnVmZmVyWzBdKSAqLworICAgIHppbmNudC0tOyAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIE9uZSBsZXNzIGNoYXIgaW4gYnVmZmVyICovCisgICAgcmV0dXJuKChpbnQpKCp6aW5wdHIr KykgJiAwMzc3KTsgICAgLyogYmVjYXVzZSB3ZSByZXR1cm4gdGhlIGZpcnN0ICovCit9CisKKy8q ICBaIFMgTyBVIFQgIC0tICBXcml0ZSBhIHN0cmluZyBvdXQgdG8gdGhlIGdpdmVuIGZpbGUsIGJ1 ZmZlcmVkLiAgKi8KKworLyogIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtMSBvbiBmYWlsdXJlICov CisKK2ludAorenNvdXQobixzKSBpbnQgbjsgY2hhciAqczsgeworICAgIGludCByYyA9IDA7Cisg ICAgcmMgPSBjaGtmbihuKTsKKyAgICBpZiAocmMgPCAxKSByZXR1cm4oLTEpOyAgICAgICAgICAg ICAvKiBLZWVwIHRoaXMsIHByZXZlbnRzIG1lbW9yeSBmYXVsdHMgKi8KKyAgICBpZiAoIXMpIHJl dHVybigwKTsgICAgICAgICAgICAgICAgICAvKiBOdWxsIHBvaW50ZXIsIGRvIG5vdGhpbmcsIHN1 Y2NlZWQgKi8KKyAgICBpZiAoISpzKSByZXR1cm4oMCk7ICAgICAgICAgICAgICAgICAvKiBlbXB0 eSBzdHJpbmcsIGRpdHRvICovCisKKyNpZmRlZiBJS1NECisgICAgLyoKKyAgICAgIFRoaXMgaGFw cGVucyB3aXRoIGNsaWVudC1zaWRlIEtlcm1pdCBzZXJ2ZXIgd2hlbiBhIFJFTU9URSBjb21tYW5k CisgICAgICB3YXMgc2VudCBmcm9tIHRoZSBzZXJ2ZXIgdG8gdGhlIGNsaWVudCBhbmQgdGhlIHNl cnZlciBpcyBzdXBwb3NlZCB0bworICAgICAgZGlzcGxheSB0aGUgdGV4dCwgYnV0IG9mIGNvdXJz ZSB0aGVyZSBpcyBubyBwbGFjZSB0byBkaXNwbGF5IGl0CisgICAgICBzaW5jZSBpdCBpcyBpbiBy ZW1vdGUgbW9kZSBleGVjdXRpbmcgS2VybWl0IHByb3RvY29sLgorICAgICovCisgICAgaWYgKGlu c2VydmVyICYmICFsb2NhbCAmJiAobiA9PSBaQ1RFUk0gfHwgbiA9PSBaU1RESU8pKSB7CisjaWZk ZWYgQ09NTUVOVAorICAgICAgICByZXR1cm4odHRvbChzLCgoaW50KXN0cmxlbihzKSkgPCAwKSA/ IC0xIDogMCk7CisjZWxzZQorICAgICAgICByZXR1cm4oMCk7CisjZW5kaWYgLyogQ09NTUVOVCAq LworICAgIH0KKyNlbmRpZiAvKiBJS1NEICovCisKKyAgICBpZiAobiA9PSBaU0ZJTEUpIHsKKwlp bnQgazsKKwlrID0gc3RybGVuKHMpOworCXJjID0gd3JpdGUoZmlsZW5vKGZwW25dKSxzLGspOwor CXJldHVybigocmMgPT0gaykgPyAwIDogLTEpOworICAgIH0KKyAgICByYyA9IGZwdXRzKHMsZnBb bl0pID09IEVPRiA/IC0xIDogMDsKKyAgICBpZiAobiA9PSBaV0ZJTEUpCisgICAgICBmZmx1c2go ZnBbbl0pOworICAgIHJldHVybihyYyk7Cit9CisKKy8qICBaIFMgTyBVIFQgTCAgLS0gIFdyaXRl IHN0cmluZyB0byBmaWxlLCB3aXRoIGxpbmUgdGVybWluYXRvciwgYnVmZmVyZWQgICovCisKKy8q ICBSZXR1cm5zIDAgb24gc3VjY2VzcywgLTEgb24gZmFpbHVyZSAqLworCitpbnQKK3pzb3V0bChu LHMpIGludCBuOyBjaGFyICpzOyB7CisgICAgaWYgKHpzb3V0KG4scykgPCAwKQorICAgICAgICBy ZXR1cm4oLTEpOworCisjaWZkZWYgSUtTRAorICAgIGlmIChpbnNlcnZlciAmJiAhbG9jYWwgJiYg KG4gPT0gWkNURVJNIHx8IG4gPT0gWlNURElPKSkgeworI2lmZGVmIENPTU1FTlQKKyAgICAgICAg cmV0dXJuKHR0b2MoTEYpKTsKKyNlbHNlCisgICAgICAgIHJldHVybigwKTsgICAgICAgICAgICAg ICAgICAgICAgLyogU2VlIGNvbW1lbnRzIGluIHpzb3V0KCkgKi8KKyNlbmRpZiAvKiBDT01NRU5U ICovCisgICAgfQorI2VuZGlmIC8qIElLU0QgKi8KKworICAgIGlmIChuID09IFpTRklMRSkgICAg ICAgICAgICAgICAgICAgIC8qIFNlc3Npb24gbG9nIGlzIHVuYnVmZmVyZWQgKi8KKyAgICAgIHJl dHVybih3cml0ZShmaWxlbm8oZnBbbl0pLCJcbiIsMSkgPT0gMSA/IDAgOiAtMSk7CisgICAgZWxz ZSBpZiAoZnB1dHMoIlxuIixmcFtuXSkgPT0gRU9GKQorICAgICAgcmV0dXJuKC0xKTsKKyAgICBp ZiAobiA9PSBaRElGSUwgfHwgbiA9PSBaV0ZJTEUpICAgICAvKiBGbHVzaCBjb25uZWN0aW9uIGxv ZyByZWNvcmRzICovCisgICAgICBmZmx1c2goZnBbbl0pOworICAgIHJldHVybigwKTsKK30KKwor LyogIFogUyBPIFUgVCBYICAtLSAgV3JpdGUgeCBjaGFyYWN0ZXJzIHRvIGZpbGUsIHVuYnVmZmVy ZWQuICAqLworCisvKiAgUmV0dXJucyBudW1iZXIgb2YgY2hhcmFjdGVycyB3cml0dGVuIG9uIHN1 Y2Nlc3MsIC0xIG9uIGZhaWx1cmUgKi8KKworaW50Cit6c291dHgobixzLHgpIGludCBuLCB4OyBj aGFyICpzOyB7CisgICAgaW50IGs7CisgICAgaWYgKCFzKSByZXR1cm4oMCk7CisgICAgaWYgKCEq cykgcmV0dXJuKDApOworCisjaWZkZWYgSUtTRAorICAgIGlmIChpbnNlcnZlciAmJiAhbG9jYWwg JiYgKG4gPT0gWkNURVJNIHx8IG4gPT0gWlNURElPKSkgeworI2lmZGVmIENPTU1FTlQKKyAgICAg ICAgcmV0dXJuKHR0b2wocyx4KSk7ICAgICAgICAgICAgICAvKiBTZWUgY29tbWVudHMgaW4genNv dXQoKSAqLworI2Vsc2UKKyAgICAgICAgcmV0dXJuKHgpOworI2VuZGlmIC8qIENPTU1FTlQgKi8K KyAgICB9CisjZW5kaWYgLyogSUtTRCAqLworCisgICAgaWYgKChrID0gKGludClzdHJsZW4ocykp ID4geCkgeCA9IGs7IC8qIE5vdGhpbmcgZWxzZSB3b3VsZCBtYWtlIHNlbnNlICovCisjaWZkZWYg Q09NTUVOVAorICAgIGlmIChjaGtmbihuKSA8IDEpIHJldHVybigtMSk7CisgICAgcmV0dXJuKHdy aXRlKGZwW25dLT5fZmlsZSxzLHgpKTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgcmV0dXJu KHdyaXRlKGZpbGVubyhmcFtuXSkscyx4KSA9PSB4ID8geCA6IC0xKTsKK30KKworLyogIFogQyBI IE8gVSBUICAtLSAgQWRkIGEgY2hhcmFjdGVyIHRvIHRoZSBnaXZlbiBmaWxlLiAgKi8KKworLyog IFNob3VsZCByZXR1cm4gMCBvciBncmVhdGVyIG9uIHN1Y2Nlc3MsIC0xIG9uIGZhaWx1cmUgKGUu Zy4gZGlzayBmdWxsKSAgKi8KKworaW50CisjaWZkZWYgQ0tfQU5TSUMKK3pjaG91dChyZWdpc3Rl ciBpbnQgbiwgY2hhciBjKQorI2Vsc2UKK3pjaG91dChuLGMpIHJlZ2lzdGVyIGludCBuOyBjaGFy IGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIHpjaG91dCgpICovIHsKKyAgICAvKiBpZiAo Y2hrZm4obikgPCAxKSByZXR1cm4oLTEpOyAqLworCisjaWZkZWYgSUtTRAorICAgIGlmIChpbnNl cnZlciAmJiAhbG9jYWwgJiYgKG4gPT0gWkNURVJNIHx8IG4gPT0gWlNURElPKSkgeworI2lmZGVm IENPTU1FTlQKKyAgICAgICAgcmV0dXJuKHR0b2MoYykpOworI2Vsc2UKKyAgICAgICAgcmV0dXJu KDApOyAgICAgICAgICAgICAgICAgICAgICAvKiBTZWUgY29tbWVudHMgaW4genNvdXQoKSAqLwor I2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICB9CisjZW5kaWYgLyogSUtTRCAqLworCisgICAgaWYg KG4gPT0gWlNGSUxFKSAgICAgICAgICAgICAgICAgICAgLyogVXNlIHVuYnVmZmVyZWQgZm9yIHNl c3Npb24gbG9nICovCisgICAgICByZXR1cm4od3JpdGUoZmlsZW5vKGZwW25dKSwmYywxKSA9PSAx ID8gMCA6IC0xKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQnVmZmVyZWQg Zm9yIGV2ZXJ5dGhpbmcgZWxzZSAqLworICAgIGlmIChwdXRjKGMsZnBbbl0pID09IEVPRikgICAv KiBJZiB0cnVlLCBtYXliZSB0aGVyZSB3YXMgYW4gZXJyb3IgKi8KKyAgICAgIHJldHVybihmZXJy b3IoZnBbbl0pPy0xOjApOyAgICAgICAvKiBDaGVjayB0byBtYWtlIHN1cmUgKi8KKyAgICBlbHNl ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBPdGhlcndpc2UuLi4gKi8KKyAgICAg IHJldHVybigwKTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBUaGVyZSB3YXMgbm8gZXJyb3Iu ICovCit9CisKKy8qIChQV1ApIGJ1ZmZlcmVkIGNoYXJhY3RlciBvdXRwdXQgcm91dGluZSB0byBz cGVlZCB1cCBmaWxlIElPICovCisKK2ludAorem91dGR1bXAoKSB7CisgICAgaW50IHg7CisgICAg Y2hhciAqIHpwOworICAgIHpvdXRwdHIgPSB6b3V0YnVmZmVyOyAgICAgICAgICAgICAgIC8qIFJl c2V0IGJ1ZmZlciBwb2ludGVyIGluIGFsbCBjYXNlcyAqLworI2lmZGVmIERFQlVHCisgICAgaWYg KGRlYmxvZykKKyAgICAgIGRlYnVnKEYxMDEsInpvdXRkdW1wIHpvdXRjbnQiLCIiLHpvdXRjbnQp OworI2VuZGlmIC8qIERFQlVHICovCisgICAgaWYgKHpvdXRjbnQgPT0gMCkgeyAgICAgICAgICAg ICAgICAgLyogTm90aGluZyB0byBvdXRwdXQgKi8KKyAgICAgICAgcmV0dXJuKDApOworICAgIH0g ZWxzZSBpZiAoem91dGNudCA8IDApIHsgICAgICAgICAgIC8qIFVuZXhwZWN0ZWQgbmVnYXRpdmUg YXJndW1lbnQgKi8KKyAgICAgICAgem91dGNudCA9IDA7ICAgICAgICAgICAgICAgICAgICAvKiBS ZXNldCBvdXRwdXQgYnVmZmVyIGNvdW50ICovCisgICAgICAgIHJldHVybigtMSk7ICAgICAgICAg ICAgICAgICAgICAgLyogYW5kIGZhaWwuICovCisgICAgfQorCisjaWZkZWYgSUtTRAorICAgIGlm IChpbnNlcnZlciAmJiAhbG9jYWwgJiYgZnBbWk9GSUxFXSA9PSBzdGRvdXQpIHsKKyNpZmRlZiBD T01NRU5UCisgICAgICAgIHggPSB0dG9sKHpvdXRidWZmZXIsem91dGNudCk7CisjZWxzZQorICAg ICAgICB4ID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNlZSBjb21tZW50cyBpbiB6 c291dCgpICovCisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAgICB6b3V0Y250ID0gMDsKKyAg ICAgICAgcmV0dXJuKHggPiAwID8gMCA6IC0xKTsKKyAgICB9CisjZW5kaWYgLyogSUtTRCAqLwor CisvKgorICBGcmFuayBQcmluZGxlIHN1Z2dlc3RlZCB0aGF0IHJlcGxhY2luZyB0aGlzIGZ3cml0 ZSgpIGJ5IGFuIGZmbHVzaCgpCisgIGZvbGxvd2VkIGJ5IGEgd3JpdGUoKSB3b3VsZCBpbXByb3Zl IHRoZSBlZmZpY2llbmN5LCBlc3BlY2lhbGx5IHdoZW4KKyAgd3JpdGluZyB0byBzdGRvdXQuICBT dWJzZXF1ZW50IHRlc3RzIHNob3dlZCBhIDUtZm9sZCBpbXByb3ZlbWVudC4KKyovCisjaWZkZWYg Q09NTUVOVAorICAgIGlmICh4ID0gZndyaXRlKHpvdXRidWZmZXIsIDEsIHpvdXRjbnQsIGZwW1pP RklMRV0pKSAuLi4KKyNlbmRpZiAvKiBDT01NRU5UICovCisKKyNpZm5kZWYgQ0tfTk9OQkxPQ0sK KyAgICBmZmx1c2goZnBbWk9GSUxFXSk7CisjZW5kaWYgLyogQ0tfTk9OQkxPQ0sgKi8KKyAgICB6 cCA9IHpvdXRidWZmZXI7CisgICAgd2hpbGUgKHpvdXRjbnQgPiAwKSB7CisgICAgICAgIGlmICgo eCA9IHdyaXRlKGZpbGVubyhmcFtaT0ZJTEVdKSx6cCx6b3V0Y250KSkgPiAtMSkgeworI2lmZGVm IERFQlVHCisgICAgICAgICAgICBpZiAoZGVibG9nKSAgICAgICAgICAgICAgICAgLyogU2F2ZSBh IGZ1bmN0aW9uIGNhbGwuLi4gKi8KKyAgICAgICAgICAgICAgZGVidWcoRjEwMSwiem91dGR1bXAg d3JvdGUiLCIiLHgpOworI2VuZGlmIC8qIERFQlVHICovCisgICAgICAgICAgICB6b3V0Y250IC09 IHg7ICAgICAgICAgICAgICAgLyogQWRqdXN0IG91dHB1dCBidWZmZXIgY291bnQgKi8KKyAgICAg ICAgICAgIHpwICs9IHg7ICAgICAgICAgICAgICAgICAgICAvKiBhbmQgcG9pbnRlciAqLworICAg ICAgICB9IGVsc2UgeworI2lmZGVmIERFQlVHCisgICAgICAgICAgICBpZiAoZGVibG9nKSB7Cisg ICAgICAgICAgICAgICAgZGVidWcoRjEwMSwiem91dGR1bXAgd3JpdGUgZXJyb3IiLCIiLGVycm5v KTsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJ6b3V0ZHVtcCB3cml0ZSByZXR1cm5zIiwi Iix4KTsKKyAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBERUJVRyAqLworICAgICAgICAgICAgem91 dGNudCA9IDA7ICAgICAgICAgICAgICAgIC8qIFJlc2V0IG91dHB1dCBidWZmZXIgY291bnQgKi8K KyAgICAgICAgICAgIHJldHVybigtMSk7ICAgICAgICAgICAgICAgICAvKiB3cml0ZSgpIGZhaWxl ZCAqLworICAgICAgICB9CisgICAgfQorICAgIHJldHVybigwKTsKK30KKworLyogIEMgSCBLIEYg TiAgLS0gIEludGVybmFsIGZ1bmN0aW9uIHRvIHZlcmlmeSBmaWxlIG51bWJlciBpcyBvayAgKi8K KworLyoKKyBSZXR1cm5zOgorICAtMTogRmlsZSBudW1iZXIgbiBpcyBvdXQgb2YgcmFuZ2UKKyAg IDA6IG4gaXMgaW4gcmFuZ2UsIGJ1dCBmaWxlIGlzIG5vdCBvcGVuCisgICAxOiBuIGluIHJhbmdl IGFuZCBmaWxlIGlzIG9wZW4KKyovCitpbnQKK2Noa2ZuKG4pIGludCBuOyB7CisgICAgLyogaWYg KG4gIT0gWkRGSUxFKSBkZWJ1ZyhGMTAxLCJjaGtmbiIsIiIsbik7ICovCisgICAgaWYgKG4gPCAw IHx8IG4gPj0gWk5GSUxTKSB7CisgICAgICAgIGlmIChuICE9IFpERklMRSkgZGVidWcoRjEwMSwi Y2hrZm4gb3V0IG9mIHJhbmdlIiwiIixuKTsKKyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9IGVs c2UgeworICAgICAgICAvKiBpZiAobiAhPSBaREZJTEUpIGRlYnVnKEYxMDEsImNoa2ZuIGZwW25d IiwiIixmcFtuXSk7ICovCisgICAgICAgIHJldHVybigoZnBbbl0gPT0gTlVMTCkgPyAwIDogMSk7 CisgICAgfQorfQorCisvKiAgWiBHIEUgVCBGIFMgLS0gUmV0dXJuIGZpbGUgc2l6ZSByZWdhcmRs ZXNzIG9mIGFjY2Vzc2liaWxpdHkgKi8KKy8qCisgIFVzZWQgZm9yIGRpcmVjdG9yeSBsaXN0aW5n cywgZXRjLgorICBSZXR1cm5zOgorICAgIFRoZSBzaXplIG9mIHRoZSBmaWxlIGluIGJ5dGVzLCAw IG9yIGdyZWF0ZXIsIGlmIHRoZSBzaXplIGNhbiBiZSBsZWFybmVkLgorICAgIC0xIGlmIHRoZSBm aWxlIHNpemUgY2FuIG5vdCBiZSBvYnRhaW5lZC4KKyAgQWxzbyAoYW5kIHRoaXMgaXMgYSBoYWNr IGp1c3QgZm9yIFVOSVgpOgorICAgIElmIHRoZSBhcmd1bWVudCBpcyB0aGUgbmFtZSBvZiBhIHN5 bWJvbGljIGxpbmssCisgICAgdGhlIGdsb2JhbCB2YXJpYWJsZSBpc3N5bWxpbmsgaXMgc2V0IHRv IDEsCisgICAgYW5kIHRoZSBnbG9iYWwgYnVmZmVyIGxpbmtuYW1lW10gZ2V0cyB0aGUgbGluayB2 YWx1ZS4KKyAgICBBbmQgaXQgc2V0cyB6Z2ZzX2RpciB0byAxIGlmIGl0J3MgYSBkaXJlY3Rvcnks IG90aGVyd2lzZSAwLgorICBUaGlzIGxldHMgdXMgYXZvaWQgbnVtZXJvdXMgcmVkdW5kYW50IGNh bGxzIHRvIHN0YXQoKS4KKyovCitpbnQgemdmc19saW5rID0gMDsKK2ludCB6Z2ZzX2RpciA9IDA7 Cit0aW1lX3Qgemdmc19tdGltZSA9IDA7Cit1bnNpZ25lZCBpbnQgemdmc19tb2RlID0gMDsKKwor I2lmZGVmIENLU1lNTElOSworY2hhciBsaW5rbmFtZVtDS01BWFBBVEgrMV07CisjaWZuZGVmIF9J RkxOSworI2RlZmluZSBfSUZMTksgMDEyMDAwMAorI2VuZGlmIC8qIF9JRkxOSyAqLworI2VuZGlm IC8qIENLU1lNTElOSyAqLworCitDS19PRkZfVAoremdldGZzKG5hbWUpIGNoYXIgKm5hbWU7IHsK KyAgICBzdHJ1Y3Qgc3RhdCBidWY7CisgICAgY2hhciBmbmFtW0NLTUFYUEFUSCs0XTsKKyAgICBD S19PRkZfVCBzaXplID0gKENLX09GRl9UKS0xOworICAgIGludCB4OworICAgIGludCBuZWVkcmxp bmsgPSAwOworICAgIGNoYXIgKiBzOworCisgICAgaWYgKCFuYW1lKSBuYW1lID0gIiI7CisgICAg aWYgKCEqbmFtZSkgcmV0dXJuKC0xKTsKKworI2lmZGVmIFVOSVgKKyAgICB4ID0gc3RybGVuKG5h bWUpOworICAgIGlmICh4ID09IDkgJiYgIXN0cmNtcChuYW1lLCIvZGV2L251bGwiKSkKKyAgICAg IHJldHVybigwKTsKKyNlbmRpZiAvKiBVTklYICovCisKKyAgICBzID0gbmFtZTsKKyNpZmRlZiBE VElMREUKKyAgICBpZiAoKnMgPT0gJ34nKSB7CisgICAgICAgIHMgPSB0aWxkZV9leHBhbmQocyk7 CisgICAgICAgIGlmICghcykgcyA9ICIiOworICAgICAgICBpZiAoISpzKSBzID0gbmFtZTsKKyAg ICB9CisjZW5kaWYgLyogRFRJTERFICovCisgICAgeCA9IGNrc3RybmNweShmbmFtLHMsQ0tNQVhQ QVRIKTsKKyAgICBzID0gZm5hbTsKKyAgICBkZWJ1ZyhGMTExLCJ6Z2V0ZnMgZm5hbSIscyx4KTsK KyAgICBpZiAoeCA+IDAgJiYgc1t4LTFdID09ICcvJykKKyAgICAgIHNbeC0xXSA9ICdcMCc7CisK KyAgICB6Z2ZzX2RpciA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAvKiBBc3N1bWUgaXQncyBu b3QgYSBkaXJlY3RvcnkgKi8KKyAgICB6Z2ZzX2xpbmsgPSAwOyAgICAgICAgICAgICAgICAgICAg ICAvKiBBc3N1bWUgaXQncyBub3QgYSBzeW1saW5rICovCisgICAgemdmc19tdGltZSA9IDA7CQkJ LyogTm8gdGltZSB5ZXQgKi8KKyAgICB6Z2ZzX21vZGUgPSAwOwkJCS8qIE5vIHBlcm1pc3Npb24g Yml0cyB5ZXQgKi8KKworI2lmZGVmIENLU1lNTElOSyAgICAgICAgICAgICAgICAgICAgICAgIC8q IFdlJ3JlIGRvaW5nIHN5bWxpbmtzPyAqLworI2lmZGVmIFVTRV9MU1RBVCAgICAgICAgICAgICAg ICAgICAgICAgIC8qIE9LIHRvIHVzZSBsc3RhdCgpPyAqLworICAgIHggPSBsc3RhdChzLCZidWYp OworICAgIGRlYnVnKEYxMDEsIlNUQVQiLCIiLDEpOworICAgIGlmICh4IDwgMCkgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIHN0YXQoKSBmYWlsZWQgKi8KKyAgICAgIHJldHVybigtMSk7Cisg ICAgaWYgKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTm93IHNlZSBpZiBpdCdz IGEgc3ltbGluayAqLworI2lmZGVmIFNfSVNMTksKKyAgICAgICAgU19JU0xOSyhidWYuc3RfbW9k ZSkKKyNlbHNlCisjaWZkZWYgX0lGTE5LCisgICAgICAgICgoX0lGTVQgJiBidWYuc3RfbW9kZSkg PT0gX0lGTE5LKQorI2VuZGlmIC8qIF9JRkxOSyAqLworI2VuZGlmIC8qIFNfSVNMTksgKi8KKyAg ICAgICAgKSB7CisgICAgICAgIHpnZnNfbGluayA9IDE7ICAgICAgICAgICAgICAgICAgLyogSXQn cyBhIHN5bWxpbmsgKi8KKyAgICAgICAgbGlua25hbWVbMF0gPSAnXDAnOyAgICAgICAgICAgICAv KiBHZXQgdGhlIG5hbWUgKi8KKyAgICAgICAgeCA9IHJlYWRsaW5rKHMsbGlua25hbWUsQ0tNQVhQ QVRIKTsKKyAgICAgICAgZGVidWcoRjEwMSwiemdldGZzIHJlYWRsaW5rIixzLHgpOworICAgICAg ICBpZiAoeCA+IC0xICYmIHggPCBDS01BWFBBVEgpIHsgIC8qIEl0J3MgYSBsaW5rICovCisgICAg ICAgICAgICBsaW5rbmFtZVt4XSA9ICdcMCc7CisgICAgICAgICAgICBzaXplID0gYnVmLnN0X3Np emU7ICAgICAgICAgLyogUmVtZW1iZXIgc2l6ZSBvZiBsaW5rICovCisgICAgICAgICAgICB4ID0g c3RhdChzLCZidWYpOyAgICAgICAgICAgLyogTm93IHN0YXQgdGhlIGxpbmtlZC10byBmaWxlICov CisJICAgIGRlYnVnKEYxMDEsIlNUQVQiLCIiLDIpOworICAgICAgICAgICAgaWYgKHggPCAwKSAg ICAgICAgICAgICAgICAgIC8qIHNvIHdlIGNhbiBzZWUgaWYgaXQncyBhIGRpcmVjdG9yeSAqLwor ICAgICAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg Y2tzdHJuY3B5KGxpbmtuYW1lLCIobG9va3VwIGZhaWxlZCkiLENLTUFYUEFUSCk7CisgICAgICAg IH0KKyAgICB9CisjZWxzZSAgLyogIVVTRV9MU1RBVCAqLworICAgIHggPSBzdGF0KHMsJmJ1Zik7 ICAgICAgICAgICAgICAgICAgIC8qIE5vIGxzdGF0KCksIHVzZSBzdGF0KCkgaW5zdGVhZCAqLwor ICAgIGRlYnVnKEYxMDEsIlNUQVQiLCIiLDMpOworICAgIGlmICh4IDwgMCkKKyAgICAgIHJldHVy bigtMSk7CisjZW5kaWYgLyogVVNFX0xTVEFUICovCisKKyAgICAvKiBEbyB3ZSBuZWVkIHRvIGNh bGwgcmVhZGxpbmsoKT8gKi8KKworI2lmZGVmIE5PTElOS0JJVFMKKy8qCisgIGxzdGF0KCkgZG9l cyBub3Qgd29yayBpbiBTQ08gb3BlcmF0aW5nIHN5c3RlbXMuICBGcm9tICJtYW4gTlMgbHN0YXQi OgorCisgIGxzdGF0IG9idGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGZpbGUgbmFtZWQgYnkg cGF0aC4gSW4gdGhlIGNhc2Ugb2YgYQorICBzeW1ib2xpYyBsaW5rLCBsc3RhdCByZXR1cm5zIGlu Zm9ybWF0aW9uIGFib3V0IHRoZSBsaW5rLCBhbmQgbm90IHRoZSBmaWxlCisgIG5hbWVkIGJ5IHRo ZSBsaW5rLiBJdCBpcyBvbmx5IHVzZWQgYnkgdGhlIE5GUyBhdXRvbW91bnQgZGFlbW9uIGFuZCBz aG91bGQKKyAgbm90IGJlIHV0aWxpemVkIGJ5IHVzZXJzLgorKi8KKyAgICBuZWVkcmxpbmsgPSAx OworICAgIGRlYnVnKEYxMDEsInpnZXRmcyBmb3JjZWQgbmVlZHJsaW5rIiwiIixuZWVkcmxpbmsp OworI2Vsc2UKKyNpZmRlZiBTX0lTTE5LCisgICAgbmVlZHJsaW5rID0gU19JU0xOSyhidWYuc3Rf bW9kZSk7CisgICAgZGVidWcoRjEwMSwiemdldGZzIFNfSVNMTksgbmVlZHJsaW5rIiwiIixuZWVk cmxpbmspOworI2Vsc2UKKyNpZmRlZiBfSUZMTksKKyAgICBuZWVkcmxpbmsgPSAoX0lGTVQgJiBi dWYuc3RfbW9kZSkgPT0gX0lGTE5LOworICAgIGRlYnVnKEYxMDEsInpnZXRmcyBfSUZMTksgbmVl ZHJsaW5rIiwiIixuZWVkcmxpbmspOworI2Vsc2UKKyAgICBuZWVkcmxpbmsgPSAxOworICAgIGRl YnVnKEYxMDEsInpnZXRmcyBkZWZhdWx0IG5lZWRybGluayIsIiIsbmVlZHJsaW5rKTsKKyNlbmRp ZiAvKiBfSUZMTksgKi8KKyNlbmRpZiAvKiBTX0lTTE5LICovCisjZW5kaWYgLyogTk9MSU5LQklU UyAqLworCisgICAgaWYgKG5lZWRybGluaykgeworICAgICAgICBsaW5rbmFtZVswXSA9ICdcMCc7 CisgICAgICAgIGVycm5vID0gMDsKKyAgICAgICAgeCA9IHJlYWRsaW5rKHMsbGlua25hbWUsQ0tN QVhQQVRIKTsKKyNpZmRlZiBERUJVRworICAgICAgICBkZWJ1ZyhGMTExLCJ6Z2V0ZnMgcmVhZGxp bmsiLHMseCk7CisgICAgICAgIGlmICh4IDwgMCkKKyAgICAgICAgICBkZWJ1ZyhGMTAxLCJ6Z2V0 ZnMgcmVhZGxpbmsgZXJybm8iLCIiLGVycm5vKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIGRl YnVnKEYxMTAsInpnZXRmcyByZWFkbGluayByZXN1bHQiLGxpbmtuYW1lLDApOworI2VuZGlmIC8q IERFQlVHICovCisgICAgICAgIGlmICh4ID4gLTEgJiYgeCA8IENLTUFYUEFUSCkgeworICAgICAg ICAgICAgemdmc19saW5rID0gMTsKKyAgICAgICAgICAgIGxpbmtuYW1lW3hdID0gJ1wwJzsKKyAg ICAgICAgfQorICAgIH0KKyNlbHNlICAvKiAhQ0tTWU1MSU5LICovCisgICAgeCA9IHN0YXQocywm YnVmKTsgICAgICAgICAgICAgICAgICAgLyogSnVzdCBzdGF0IHRoZSBmaWxlICovCisgICAgZGVi dWcoRjExMSwiemdldGZzIHN0YXQiLHMseCk7CisgICAgaWYgKHggPCAwKSAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogYW5kIGdldCB0aGUgc2l6ZSAqLworICAgICAgcmV0dXJuKC0xKTsKKyNl bmRpZiAvKiBDS1NZTUxJTksgKi8KKworICAgIHpnZnNfbXRpbWUgPSBidWYuc3RfbXRpbWU7Cisg ICAgemdmc19tb2RlID0gYnVmLnN0X21vZGU7CisgICAgemdmc19kaXIgPSAoU19JU0RJUihidWYu c3RfbW9kZSkpID8gMSA6IDA7IC8qIFNldCAiaXMgZGlyZWN0b3J5IiBmbGFnICovCisgICAgZGVi dWcoRjExMSwiemdldGZzIHNpemUiLHMsc2l6ZSk7CisgICAgZGVidWcoRjExMSwiemdldGZzIHN0 X3NpemUiLHMsYnVmLnN0X3NpemUpOworICAgIHJldHVybigoc2l6ZSA8IDBMKSA/IGJ1Zi5zdF9z aXplIDogc2l6ZSk7IC8qIFJldHVybiB0aGUgc2l6ZSAqLworfQorCisKKy8qICBaIEMgSCBLIEkg IC0tICBDaGVjayBpZiBpbnB1dCBmaWxlIGV4aXN0cyBhbmQgaXMgcmVhZGFibGUgICovCisKKy8q CisgIFJldHVybnM6CisgICA+PSAwIGlmIHRoZSBmaWxlIGNhbiBiZSByZWFkIChyZXR1cm5zIHRo ZSBzaXplKS4KKyAgICAgLTEgaWYgZmlsZSBkb2Vzbid0IGV4aXN0IG9yIGNhbid0IGJlIGFjY2Vz c2VkLAorICAgICAtMiBpZiBmaWxlIGV4aXN0cyBidXQgaXMgbm90IHJlYWRhYmxlIChlLmcuIGEg ZGlyZWN0b3J5IGZpbGUpLgorICAgICAtMyBpZiBmaWxlIGV4aXN0cyBidXQgcHJvdGVjdGVkIGFn YWluc3QgcmVhZCBhY2Nlc3MuCisKKyAgRm9yIEJlcmtlbGV5IFVuaXgsIGEgZmlsZSBtdXN0IGJl IG9mIHR5cGUgInJlZ3VsYXIiIHRvIGJlIHJlYWRhYmxlLgorICBEaXJlY3RvcnkgZmlsZXMsIHNw ZWNpYWwgZmlsZXMsIGFuZCBzeW1ib2xpYyBsaW5rcyBhcmUgbm90IHJlYWRhYmxlLgorKi8KK0NL X09GRl9UCit6Y2hraShuYW1lKSBjaGFyICpuYW1lOyB7CisgICAgc3RydWN0IHN0YXQgYnVmOwor ICAgIGNoYXIgKiBzOworICAgIGludCB4LCBpdHNhZGlyID0gMDsKKyAgICBleHRlcm4gaW50IHpj aGtpZCwgZGlyYWN0aXZlLCBtYXRjaGZpZm87CisKKyAgICBpZiAoIW5hbWUpCisgICAgICByZXR1 cm4oLTEpOworICAgIHggPSBzdHJsZW4obmFtZSk7CisgICAgaWYgKHggPCAxKQorICAgICAgcmV0 dXJuKC0xKTsKKyAgICBzID0gbmFtZTsKKworI2lmZGVmIFVOSVgKKyAgICBpZiAoeCA9PSA5ICYm ICFzdHJjbXAocywiL2Rldi9udWxsIikpCisgICAgICByZXR1cm4oMCk7CisgICAgaWYgKHggPT0g OCAmJiAhc3RyY21wKHMsIi9kZXYvdHR5IikpCisgICAgICByZXR1cm4oMCk7CisjZW5kaWYgLyog VU5JWCAqLworCisjaWZkZWYgRFRJTERFCisgICAgaWYgKCpzID09ICd+JykgeworICAgICAgICBz ID0gdGlsZGVfZXhwYW5kKHMpOworICAgICAgICBpZiAoIXMpIHMgPSAiIjsKKyAgICAgICAgaWYg KCEqcykgcyA9IG5hbWU7CisgICAgfQorI2VuZGlmIC8qIERUSUxERSAqLworCisjaWZkZWYgQ0tS T09UCisgICAgZGVidWcoRjExMSwiemNoa2kgc2V0cm9vdCIsY2tyb290LGNrcm9vdHNldCk7Cisg ICAgaWYgKGNrcm9vdHNldCkgaWYgKCF6aW5yb290KG5hbWUpKSB7CisJZGVidWcoRjExMCwiemNo a2kgc2V0cm9vdCB2aW9sYXRpb24iLG5hbWUsMCk7CisJcmV0dXJuKC0xKTsKKyAgICB9CisjZW5k aWYgLyogQ0tST09UICovCisKKyAgICB4ID0gc3RhdChzLCZidWYpOworICAgIGRlYnVnKEYxMDEs IlNUQVQiLCIiLDUpOworICAgIGlmICh4IDwgMCkgeworICAgICAgICBkZWJ1ZyhGMTExLCJ6Y2hr aSBzdGF0IGZhaWxzIixzLGVycm5vKTsKKyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9CisgICAg aWYgKFNfSVNESVIgKGJ1Zi5zdF9tb2RlKSkKKyAgICAgIGl0c2FkaXIgPSAxOworCisgICAgaWYg KCEoaXRzYWRpciAmJiB6Y2hraWQpKSB7ICAgICAgICAgLyogVW5sZXNzIHRoaXMuLi4gKi8KKyAg ICAgICAgaWYgKCFTX0lTUkVHIChidWYuc3RfbW9kZSkgICAgICAvKiBNdXN0IGJlIHJlZ3VsYXIg ZmlsZSAqLworI2lmZGVmIFNfSVNGSUZPCisgICAgICAgICAgICAmJiAoIW1hdGNoZmlmbyB8fCAh U19JU0ZJRk8gKGJ1Zi5zdF9tb2RlKSkgIC8qIG9yIEZJRk8gKi8KKyNlbmRpZiAvKiBTX0lTRklG TyAqLworICAgICAgICAgICAgKSB7CisgICAgICAgICAgICBkZWJ1ZyhGMTExLCJ6Y2hraSBub3Qg cmVndWxhciBmaWxlIChvciBmaWZvKSIscyxtYXRjaGZpZm8pOworICAgICAgICAgICAgcmV0dXJu KC0yKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBkZWJ1ZyhGMTExLCJ6Y2hraSBzdGF0IG9rOiIs cyx4KTsKKworICAgIGlmIChkaXJhY3RpdmUpIHsJCQkvKiBJZiBsaXN0aW5nIGRvbid0IGNoZWNr IGFjY2VzcyAqLworCXggPSAxOworICAgIH0gZWxzZSB7CisjaWZkZWYgU1dfQUNDX0lECisJZGVi dWcoRjEwMCwiemNoa2kgc3dhcHBpbmcgaWRzIGZvciBhY2Nlc3MoKSIsIiIsMCk7CisJcHJpdl9v bigpOworI2VuZGlmIC8qIFNXX0FDQ19JRCAqLworCWlmICgoeCA9IGFjY2VzcyhzLFJfT0spKSA8 IDApCisJICB4ID0gYWNjZXNzKHMsWF9PSyk7CQkvKiBGb3IgUlVOLWNsYXNzIGNvbW1hbmRzICov CisjaWZkZWYgU1dfQUNDX0lECisJcHJpdl9vZmYoKTsKKwlkZWJ1ZyhGMTAwLCJ6Y2hraSBzd2Fw cGVkIGlkcyByZXN0b3JlZCIsIiIsMCk7CisjZW5kaWYgLyogU1dfQUNDX0lEICovCisgICAgfQor ICAgIGlmICh4IDwgMCkgewkJCS8qIElzIHRoZSBmaWxlIGFjY2Vzc2libGU/ICovCisgICAgICAg IGRlYnVnKEYxMTEsInpjaGtpIGFjY2VzcyBmYWlsZWQ6IixzLHgpOyAvKiBObyAqLworICAgICAg ICByZXR1cm4oLTMpOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmbGVuID0gYnVmLnN0X3NpemU7 ICAgICAgICAgICAgLyogWWVzLCByZW1lbWJlciBzaXplICovCisgICAgICAgIGNrc3RybmNweShu YW1idWYscyxDS01BWFBBVEgpOyAgLyogYW5kIG5hbWUgZ2xvYmFsbHkuICovCisgICAgICAgIGRl YnVnKEYxMTEsInpjaGtpIGFjY2VzcyBvazoiLHMsaWZsZW4pOworICAgICAgICByZXR1cm4oKGlm bGVuID4gLTFMKSA/IGlmbGVuIDogMEwpOworICAgIH0KK30KKworLyogIFogQyBIIEsgTyAgLS0g IENoZWNrIGlmIG91dHB1dCBmaWxlIGNhbiBiZSBjcmVhdGVkICAqLworCisvKgorICBSZXR1cm5z IC0xIGlmIHdyaXRlIHBlcm1pc3Npb24gZm9yIHRoZSBmaWxlIHdvdWxkIGJlIGRlbmllZCwgMCBv dGhlcndpc2UuCisKKyAgTk9URTogVGhlIGRlc2lnbiBpcyBmbGF3ZWQuICBUaGVyZSBpcyBubyBk aXN0aW5jdGlvbiBhbW9uZzoKKyAgIC4gQ2FuIEkgb3ZlcndyaXRlIGFuIGV4aXN0aW5nIGZpbGU/ CisgICAuIENhbiBJIGNyZWF0ZSBhIGZpbGUgKG9yIGRpcmVjdG9yeSkgaW4gYW4gZXhpc3Rpbmcg ZGlyZWN0b3J5PworICAgLiBDYW4gSSBjcmVhdGUgYSBmaWxlIChvciBkaXJlY3RvcnkpIGFuZCBp dHMgcGFyZW50KHMpPworKi8KK2ludAoremNoa28obmFtZSkgY2hhciAqbmFtZTsgeworICAgIGlu dCBpLCB4LCBpdHNhZGlyID0gMDsKKyAgICBjaGFyICpzID0gTlVMTDsKKyAgICBjaGFyICogb25h bWU7CisgICAgZXh0ZXJuIGludCB6Y2hrb2Q7ICAgICAgICAgICAgICAgICAgLyogVXNlZCBieSBJ RiBXUklURUFCTEUgKi8KKworICAgIGRlYnVnKEYxMTAsInpjaGtvIGVudHJ5IixuYW1lLDApOwor CisgICAgaWYgKCFuYW1lKSByZXR1cm4oLTEpOyAgICAgICAgICAgICAgLyogV2F0Y2ggb3V0IGZv ciBudWxsIHBvaW50ZXIuICovCisKKyAgICBvbmFtZSA9IG5hbWU7CisKKyNpZmRlZiBDS1JPT1QK KyAgICBkZWJ1ZyhGMTExLCJ6Y2hrbyBzZXRyb290Iixja3Jvb3QsY2tyb290c2V0KTsKKyAgICBp ZiAoY2tyb290c2V0KSBpZiAoIXppbnJvb3QobmFtZSkpIHsKKwlkZWJ1ZyhGMTEwLCJ6Y2hrbyBz ZXRyb290IHZpb2xhdGlvbiIsbmFtZSwwKTsKKwllcnJubyA9IEVBQ0NFUzsKKwlyZXR1cm4oLTEp OworICAgIH0KKyNlbmRpZiAvKiBDS1JPT1QgKi8KKworICAgIHggPSAoaW50KXN0cmxlbihuYW1l KTsgICAgICAgICAgICAgIC8qIEdldCBsZW5ndGggb2YgZmlsZW5hbWUgKi8KKyAgICBkZWJ1ZyhG MTExLCJ6Y2hrbyBsZW4iLG5hbWUseCk7CisgICAgZGVidWcoRjExMSwiemNoa28gemNoa29kIixu YW1lLHpjaGtvZCk7CisKKyNpZmRlZiBVTklYCisvKgorICBXcml0aW5nIHRvIG51bGwgZGV2aWNl IGlzIE9LLgorKi8KKyAgICBpZiAoeCA9PSA5ICYmICFzdHJjbXAobmFtZSwiL2Rldi9udWxsIikp CisgICAgICByZXR1cm4oMCk7CisgICAgaWYgKHggPT0gOCAmJiAhc3RyY21wKG5hbWUsIi9kZXYv dHR5IikpCisgICAgICByZXR1cm4oMCk7CisjZW5kaWYgLyogVU5JWCAqLworCisgICAgcyA9IG5h bWU7CisjaWZkZWYgRFRJTERFCisgICAgaWYgKCpzID09ICd+JykgeworICAgICAgICBzID0gdGls ZGVfZXhwYW5kKHMpOworICAgICAgICBpZiAoIXMpIHMgPSAiIjsKKyAgICAgICAgaWYgKCEqcykg cyA9IG5hbWU7CisJeCA9IHN0cmxlbihzKTsKKyAgICB9CisjZW5kaWYgLyogRFRJTERFICovCisg ICAgbmFtZSA9IHM7CisgICAgcyA9IE5VTEw7CisvKgorICB6Y2hrb2QgaXMgYSBnbG9iYWwgZmxh ZyBtZWFuaW5nIHdlJ3JlIGNoZWNraW5nIG5vdCB0byBzZWUgaWYgdGhlIGRpcmVjdG9yeQorICBm aWxlIGlzIHdyaXRlYWJsZSwgYnV0IGlmIGl0J3MgT0sgdG8gY3JlYXRlIGZpbGVzIElOIHRoZSBk aXJlY3RvcnkuCisqLworICAgIGlmICghemNoa29kICYmIGlzZGlyKG5hbWUpKSB7CS8qIERpcmVj dG9yaWVzIGFyZSBub3Qgd3JpdGVhYmxlICovCisJZGVidWcoRjExMSwiemNoa28gaXNkaXIiLG5h bWUsMSk7CisJcmV0dXJuKC0xKTsKKyAgICB9CisgICAgcyA9IG1hbGxvYyh4KzMpOyAgICAgICAg ICAgICAgICAgICAgLyogTXVzdCBjb3B5IGJlY2F1c2Ugd2UgY2FuJ3QgKi8KKyAgICBpZiAoIXMp IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB3cml0ZSBpbnRvIG91ciBhcmd1bWVudC4g Ki8KKyAgICAgICAgZnByaW50ZihzdGRlcnIsInpjaGtvOiBNYWxsb2MgZXJyb3IgNDZcbiIpOwor ICAgICAgICByZXR1cm4oLTEpOworICAgIH0KKyAgICBja3N0cm5jcHkocyxuYW1lLHgrMyk7Cisj aWZkZWYgVU5JWAorI2lmZGVmIE5PVVVDUAorICAgIHsJCQkJCS8qIDIwMDkvMTAvMjAgKi8KKyAg ICAvKiBBbGxvdyB0dHkgZGV2aWNlcyB0byBvcGVuZWQgYXMgb3V0cHV0IGZpbGVzICovCisJaW50 IGZkLCBpc3R0eSA9IDAsIG1vZGUgPSAwOworCWRlYnVnKEYxMTAsInpjaGtvIGF0dGVtcHRpbmcg dG8gb3BlbiIsbmFtZSwwKTsKKwkvKiBEb24ndCBibG9jayBvbiBsYWNrIG9mIENhcnJpZXIgb3Ig b3RoZXIgbW9kZW0gc2lnbmFscyAqLworI2lmZGVmIE9fTk9OQkxPQ0sKKwltb2RlID0gT19OT05C TE9DSzsKKyNlbHNlCisjaWZkZWYgT19OREVMQVkKKwltb2RlID0gT19OREVMQVk7CisjZWxzZQor I2lmZGVmIEZOREVMQVkKKwltb2RlID0gRk5ERUxBWTsKKyNlbmRpZiAvKiBGTkRFTEFZICovCisj ZW5kaWYJLyogT19OREVMQVkgKi8KKyNlbmRpZgkvKiBPX05PTkJMT0NLICovCisJZGVidWcoRjEx MSwiemNoa28gb3BlbiBtb2RlIixuYW1lLG1vZGUpOworCWZkID0gb3BlbihuYW1lLE9fV1JPTkxZ LG1vZGUpOwkvKiBNdXN0IGF0dGVtcHQgdG8gb3BlbiBpdCAqLworCWRlYnVnKEYxMTEsInpjaGtv IG9wZW4iLG5hbWUsZmQpOyAKKwlpZiAoZmQgPiAtMSkgewkJCS8qIHRvIGdldCBhIGZpbGUgZGVz Y3JpcHRvciAqLworCSAgICBpZiAoaXNhdHR5KGZkKSkJCS8qIGZvciBpc2F0dHkoKSAqLworCSAg ICAgIGlzdHR5Kys7CisJICAgIGRlYnVnKEYxMTEsInpjaGtvIGlzYXR0eSIsbmFtZSxpc3R0eSk7 CisJICAgIGZkID0gY2xvc2UoZmQpOworCSAgICBpZiAoaXN0dHkpIHsKKwkJZ290byBkb2FjY2Vz czsKKwkgICAgfQorCX0gZWxzZSB7CisJICAgIGRlYnVnKEYxMDEsInpjaGtvIG9wZW4gZXJybm8i LCIiLGVycm5vKTsgCisJICAgIHggPSAtMTsKKwl9CisgICAgfQorI2VuZGlmCS8qIE5PVVVDUCAq LworI2VuZGlmCS8qIFVOSVggKi8KKyAgICBmb3IgKGkgPSB4OyBpID4gMDsgaS0tKSB7ICAgICAg ICAgICAvKiBTdHJpcCBmaWxlbmFtZSBmcm9tIHJpZ2h0LiAqLworICAgICAgICBpZiAoSVNESVJT RVAoc1tpLTFdKSkgeworICAgICAgICAgICAgaXRzYWRpciA9IDE7CisgICAgICAgICAgICBicmVh azsKKyAgICAgICAgfQorICAgIH0KKyAgICBkZWJ1ZyhGMTAxLCJ6Y2hrbyBpIiwiIixpKTsKKyAg ICBkZWJ1ZyhGMTAxLCJ6Y2hrbyBpdHNhZGlyIiwiIixpdHNhZGlyKTsKKworI2lmZGVmIENPTU1F TlQKKy8qIFgvT1BFTiBYUEczLWNvbXBsaWFudCBzeXN0ZW1zIGZhaWwgaWYgYXJndW1lbnQgZW5k cyB3aXRoICIvIi4uLiAgKi8KKyAgICBpZiAoaSA9PSAwKSAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBJZiBubyBwYXRoLCB1c2UgY3VycmVudCBkaXJlY3RvcnkgKi8KKyAgICAgIHN0cmNweShz LCIuLyIpOworICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE90aGVy d2lzZSwgdXNlIGdpdmVuIG9uZS4gKi8KKyAgICAgIHNbaV0gPSAnXDAnOworI2Vsc2UKKyNpZmRl ZiBDT01NRU5UCisvKgorICBUaGUgZm9sbG93aW5nIGRvZXMgbm90IHdvcmsgZm9yICJmb28vYmFy IiB3aGVyZSB0aGUgZm9vIGRpcmVjdG9yeSBkb2VzCisgIG5vdCBleGlzdCBldmVuIHRob3VnaCB3 ZSBjb3VsZCBjcmVhdGUgaXQ6IGFjY2VzcygiZm9vLy4iKSBmYWlscywgYnV0CisgIGFjY2Vzcygi Zm9vIikgd29ya3MgT0suCisqLworLyogU28gbm93IHdlIHVzZSAicGF0aC8uIiBpZiBwYXRoIGdp dmVuLCBvciAiLiIgaWYgbm8gcGF0aCBnaXZlbi4gKi8KKyAgICBzW2krK10gPSAnLic7ICAgICAg ICAgICAgICAgICAgICAgICAvKiBBcHBlbmQgIi4iIHRvIHBhdGguICovCisgICAgc1tpXSA9ICdc MCc7CisjZWxzZQorLyogU28gTk9XIHdlIHN0cmlwIHBhdGggc2VnbWVudHMgZnJvbSB0aGUgcmln aHQgYXMgbG9uZyBhcyB0aGV5IGRvbid0ICovCisvKiBleGlzdCAtLSB3ZSBvbmx5IGNhbGwgYWNj ZXNzKCkgZm9yIHBhdGggc2VnbWVudHMgdGhhdCAqZG8qIGV4aXN0Li4gKi8KKy8qIChCdXQgdGhp cyBpc24ndCBxdWl0ZSByaWdodCBlaXRoZXIgc2luY2Ugbm93IHpjaGtvKC9mb28vYmFyL2Jhei94 eHgpICovCisvKiBzdWNjZWVkcyB3aGVuIEkgaGF2ZSB3cml0ZSBhY2Nlc3MgdG8gZm9vIGFuZCBi YXIgYnV0IGJheiBkb2Vzbid0IGV4aXQuKSAqLworCisgICAgaWYgKGl0c2FkaXIgJiYgaSA+IDAp IHsKKyAgICAgICAgc1tpLTFdID0gJ1wwJzsKKyAgICAgICAgd2hpbGUgKHNbMF0gJiYgIWlzZGly KHMpKSB7CisgICAgICAgICAgICBmb3IgKGkgPSAoaW50KXN0cmxlbihzKTsgaSA+IDA7IGktLSkg eworICAgICAgICAgICAgICAgIGlmIChJU0RJUlNFUChzW2ktMV0pKSB7CisgICAgICAgICAgICAg ICAgICAgIHNbaS0xXSA9ICdcMCc7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChpID09IDApCisgICAg ICAgICAgICAgIHNbMF0gPSAnXDAnOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAg c1tpKytdID0gJy4nOyAgICAgICAgICAgICAgICAgICAvKiBBcHBlbmQgIi4iIHRvIHBhdGguICov CisgICAgICAgIHNbaV0gPSAnXDAnOworICAgIH0KKyNlbmRpZiAvKiBDT01NRU5UICovCisjZW5k aWYgLyogQ09NTUVOVCAqLworCisgICAgaWYgKCFzWzBdKQorICAgICAgY2tzdHJuY3B5KHMsIi4i LHgrMyk7CisKKyAgZG9hY2Nlc3M6CisKKyNpZmRlZiBTV19BQ0NfSUQKKyAgICBkZWJ1ZyhGMTAw LCJ6Y2hrbyBzd2FwcGluZyBpZHMgZm9yIGFjY2VzcygpIiwiIiwwKTsKKyAgICBwcml2X29uKCk7 CisjZW5kaWYgLyogU1dfQUNDX0lEICovCisKKyAgICB4ID0gYWNjZXNzKHMsV19PSyk7ICAgICAg ICAgICAgICAgICAvKiBDaGVjayBhY2Nlc3Mgb2YgcGF0aC4gKi8KKworI2lmZGVmIFNXX0FDQ19J RAorICAgIHByaXZfb2ZmKCk7CisgICAgZGVidWcoRjEwMCwiemNoa28gc3dhcHBlZCBpZHMgcmVz dG9yZWQiLCIiLDApOworI2VuZGlmIC8qIFNXX0FDQ19JRCAqLworCisgICAgaWYgKHggPCAwKQor ICAgICAgZGVidWcoRjExMSwiemNoa28gYWNjZXNzIGZhaWxlZDoiLHMsZXJybm8pOworICAgIGVs c2UKKyAgICAgIGRlYnVnKEYxMTEsInpjaGtvIGFjY2VzcyBvazoiLHMseCk7CisgICAgaWYgKHMp IGZyZWUocyk7CQkJLyogRnJlZSB0ZW1wb3Jhcnkgc3RvcmFnZSAqLworCisgICAgcmV0dXJuKCh4 IDwgMCkgPyAtMSA6IDApOyAgICAgICAgICAgLyogYW5kIHJldHVybi4gKi8KK30KKworLyogIFog RCBFIEwgRSBUICAtLSAgRGVsZXRlIHRoZSBuYW1lZCBmaWxlLiAgKi8KKworLyogUmV0dXJuczog LTEgb24gZXJyb3IsIDAgb24gc3VjY2VzcyAqLworCitpbnQKK3pkZWxldChuYW1lKSBjaGFyICpu YW1lOyB7CisgICAgaW50IHg7CisjaWZkZWYgQ0tfTE9HSU4KKyAgICBpZiAoaXNndWVzdCkKKyAg ICAgIHJldHVybigtMSk7CisjZW5kaWYgLyogQ0tfTE9HSU4gKi8KKworI2lmZGVmIENLUk9PVAor ICAgIGRlYnVnKEYxMTEsInpkZWxldCBzZXRyb290Iixja3Jvb3QsY2tyb290c2V0KTsKKyAgICBp ZiAoY2tyb290c2V0KSBpZiAoIXppbnJvb3QobmFtZSkpIHsKKwlkZWJ1ZyhGMTEwLCJ6ZGVsZXQg c2V0cm9vdCB2aW9sYXRpb24iLG5hbWUsMCk7CisJcmV0dXJuKC0xKTsKKyAgICB9CisjZW5kaWYg LyogQ0tST09UICovCisKKyAgICB4ID0gdW5saW5rKG5hbWUpOworICAgIGRlYnVnKEYxMTEsInpk ZWxldCIsbmFtZSx4KTsKKyNpZmRlZiBDS1NZU0xPRworICAgIGlmIChja3hzeXNsb2cgPj0gU1lT TEdfRkMgJiYgY2t4bG9nZ2luZykgeworICAgICAgICBmdWxsbmFtZVswXSA9ICdcMCc7CisgICAg ICAgIHpmbnFmcChuYW1lLENLTUFYUEFUSCxmdWxsbmFtZSk7CisgICAgICAgIGRlYnVnKEYxMTAs InpkZWxldCBmdWxsbmFtZSIsZnVsbG5hbWUsMCk7CisgICAgICAgIGlmICh4IDwgMCkKKyAgICAg ICAgICBzeXNsb2coTE9HX0lORk8sICJmaWxlW10gJXM6IGRlbGV0ZSBmYWlsZWQgKCVtKSIsIGZ1 bGxuYW1lKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIHN5c2xvZyhMT0dfSU5GTywgImZpbGVb XSAlczogZGVsZXRlIG9rIiwgZnVsbG5hbWUpOworICAgIH0KKyNlbmRpZiAvKiBDS1NZU0xPRyAq LworICAgIHJldHVybih4KTsKK30KKworLyogIFogUiBUIE8gTCAgLS0gIENvbnZlcnQgcmVtb3Rl IGZpbGVuYW1lIGludG8gbG9jYWwgZm9ybSAgKi8KKworVk9JRAorenJ0b2wobmFtZSxuYW1lMikg Y2hhciAqbmFtZSwgKm5hbWUyOyB7CisgICAgbnpydG9sKG5hbWUsbmFtZTIsMSwwLENLTUFYUEFU SCk7Cit9CisKK1ZPSUQKK256cnRvbChuYW1lLG5hbWUyLGZuY252LGZucnBhdGgsbWF4KQorICAg IGNoYXIgKm5hbWUsICpuYW1lMjsgaW50IGZuY252LCBmbnJwYXRoLCBtYXg7Cit7IC8qIG56cnRv bCAqLworICAgIGNoYXIgKnMsICpwOworICAgIGludCBmbGFnID0gMCwgbiA9IDA7CisgICAgY2hh ciBmdWxsbmFtZVtDS01BWFBBVEgrMV07CisgICAgaW50IGRldm51bGwgPSAwOworICAgIGludCBh Y2FzZSA9IDA7CisgICAgaWYgKCFuYW1lMikgcmV0dXJuOworICAgIGlmICghbmFtZSkgbmFtZSA9 ICIiOworCisgICAgZGVidWcoRjExMSwibnpydG9sIG5hbWUiLG5hbWUsZm5jbnYpOworCisjaWZk ZWYgRFRJTERFCisgICAgcyA9IG5hbWU7CisgICAgaWYgKCpzID09ICd+JykgeworICAgICAgICBz ID0gdGlsZGVfZXhwYW5kKHMpOworICAgICAgICBpZiAoIXMpIHMgPSAiIjsKKyAgICAgICAgaWYg KCpzKSBuYW1lID0gczsKKyAgICB9CisjZW5kaWYgLyogRFRJTERFICovCisKKyAgICAvKiBIYW5k bGUgdGhlIHBhdGggLS0gd2UgZG9uJ3QgaGF2ZSB0byBjb252ZXJ0IGl0cyBmb3JtYXQsIHNpbmNl ICovCisgICAgLyogdGhlIHN0YW5kYXJkIHBhdGggZm9ybWF0IGFuZCBvdXIgKFVOSVgpIGZvcm1h dCBhcmUgdGhlIHNhbWUuICovCisKKyAgICBmdWxsbmFtZVswXSA9IE5VTDsKKyAgICBkZXZudWxs ID0gIXN0cmNtcChuYW1lLCIvZGV2L251bGwiKTsKKworICAgIGlmICghZGV2bnVsbCAmJiBmbnJw YXRoID09IFBBVEhfT0ZGKSB7IC8qIFJFQ0VJVkUgUEFUSE5BTUVTIE9GRiAqLworICAgICAgICB6 c3RyaXAobmFtZSwmcCk7CisgICAgICAgIHN0cm5jcHkoZnVsbG5hbWUscCxDS01BWFBBVEgpOwor ICAgIH0gZWxzZSBpZiAoIWRldm51bGwgJiYgZm5ycGF0aCA9PSBQQVRIX0FCUykgeyAvKiBSRUMg UEFUSE5BTUVTIEFCU09MVVRFICovCisgICAgICAgIHN0cm5jcHkoZnVsbG5hbWUsbmFtZSxDS01B WFBBVEgpOworICAgIH0gZWxzZSBpZiAoIWRldm51bGwgJiYgaXNhYnNvbHV0ZShuYW1lKSkgeyAv KiBSRUNFSVZFIFBBVEhOQU1FUyBSRUxBVElWRSAqLworCWNrbWFrbXNnKGZ1bGxuYW1lLENLTUFY UEFUSCwiLiIsbmFtZSxOVUxMLE5VTEwpOworICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIERpdHRvICovCisgICAgICAgIGNrc3RybmNweShmdWxsbmFtZSxuYW1lLENL TUFYUEFUSCk7CisgICAgfQorICAgIGZ1bGxuYW1lW0NLTUFYUEFUSF0gPSBOVUw7CisgICAgZGVi dWcoRjExMCwibnpydG9sIGZ1bGxuYW1lIixmdWxsbmFtZSwwKTsKKworI2lmbmRlZiBOT1RSVU5D QVRFCisvKgorICBUaGUgbWF4aW11bSBsZW5ndGggZm9yIGFueSBzZWdtZW50IG9mIGEgZmlsZW5h bWUgaXMgTUFYTkFNTEVOLCBkZWZpbmVkCisgIGFib3ZlLiAgT24gc29tZSBwbGF0Zm9ybXMgKGF0 IGxlYXN0IFFOWCkgaWYgYSBzZWdtZW50IGV4Y2VlZHMgdGhpcyBsaW1pdCwKKyAgdGhlIG9wZW4g ZmFpbHMgd2l0aCBFTkFNRVRPT0xPTkcsIHNvIHdlIG11c3QgcHJldmVudCBpdCBieSB0cnVuY2F0 aW5nIGVhY2gKKyAgb3ZlcmxvbmcgbmFtZSBzZWdtZW50IHRvIHRoZSBtYXhpbXVtIHNlZ21lbnQg bGVuZ3RoIGJlZm9yZSBwYXNzaW5nIHRoZQorICBuYW1lIHRvIG9wZW4oKS4gIFRoaXMgbXVzdCBi ZSBkb25lIGV2ZW4gd2hlbiBmaWxlIG5hbWVzIGFyZSBsaXRlcmFsLCBzbyBhcworICBub3QgdG8g aGFsdCBhIGZpbGUgdHJhbnNmZXIgdW5uZWNlc3NhcmlseS4KKyovCisgICAgeworICAgICAgICBj aGFyIGJ1ZltDS01BWFBBVEgrMV07ICAgICAgICAgIC8qIE5ldyB0ZW1wb3JhcnkgYnVmZmVyIG9u IHN0YWNrICovCisgICAgICAgIGNoYXIgKnAgPSBmdWxsbmFtZTsgICAgICAgICAgICAgLyogU291 cmNlIGFuZCAgKi8KKyAgICAgICAgY2hhciAqcyA9IGJ1ZjsgICAgICAgICAgICAgICAgICAvKiBk ZXN0aW5hdGlvbiBwb2ludGVycyAqLworICAgICAgICBpbnQgaSA9IDAsIG4gPSAwOworICAgICAg ICBkZWJ1ZyhGMTAxLCJuenJ0b2wgc2l6aW5nIE1BWE5BTUxFTiIsIiIsTUFYTkFNTEVOKTsKKyAg ICAgICAgd2hpbGUgKCpwICYmIG4gPCBDS01BWFBBVEgpIHsgICAvKiBDb3B5IG5hbWUgdG8gbmV3 IGJ1ZmZlciAqLworICAgICAgICAgICAgaWYgKCsraSA+IE1BWE5BTUxFTikgeyAgICAgIC8qIElm IHRoaXMgc2VnbWVudCB0b28gbG9uZyAqLworICAgICAgICAgICAgICAgIHdoaWxlICgqcCAmJiAq cCAhPSAnLycpIC8qIHNraXAgcGFzdCB0aGUgcmVzdC4uLiAqLworICAgICAgICAgICAgICAgICAg cCsrOworICAgICAgICAgICAgICAgIGkgPSAwOyAgICAgICAgICAgICAgICAgIC8qIGFuZCByZXNl dCBjb3VudGVyLiAqLworICAgICAgICAgICAgfSBlbHNlIGlmICgqcCA9PSAnLycpIHsgICAgIC8q IEVuZCBvZiB0aGlzIHNlZ21lbnQuICovCisgICAgICAgICAgICAgICAgaSA9IDA7ICAgICAgICAg ICAgICAgICAgLyogUmVzZXQgY291bnRlci4gKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg ICpzKysgPSAqcCsrOyAgICAgICAgICAgICAgICAvKiBDb3B5IHRoaXMgY2hhcmFjdGVyLiAqLwor ICAgICAgICAgICAgbisrOworICAgICAgICB9CisgICAgICAgICpzID0gTlVMOworICAgICAgICBj a3N0cm5jcHkoZnVsbG5hbWUsYnVmLENLTUFYUEFUSCk7IC8qIENvcHkgYmFjayB0byBvcmlnaW5h bCBidWZmZXIuICovCisgICAgICAgIGRlYnVnKEYxMTEsIm56cnRvbCBzaXppbmciLGZ1bGxuYW1l LG4pOworICAgIH0KKyNlbmRpZiAvKiBOT1RSVU5DQVRFICovCisKKyAgICBpZiAoIWZuY252IHx8 IGRldm51bGwpIHsgICAgICAgICAgICAvKiBOb3QgY29udmVydGluZyAqLworICAgICAgICBja3N0 cm5jcHkobmFtZTIsZnVsbG5hbWUsbWF4KTsgIC8qIFdlJ3JlIGRvbmUuICovCisgICAgICAgIHJl dHVybjsKKyAgICB9CisgICAgbmFtZSA9IGZ1bGxuYW1lOyAgICAgICAgICAgICAgICAgICAgLyog Q29udmVydGluZyAqLworCisgICAgcCA9IG5hbWUyOworICAgIGZvciAoOyAqbmFtZSAhPSAnXDAn ICYmIG4gPCBtYXhuYW07IG5hbWUrKykgeworICAgICAgICBpZiAoKm5hbWUgPiBTUCkgZmxhZyA9 IDE7ICAgICAgIC8qIFN0cmlwIGxlYWRpbmcgYmxhbmtzIGFuZCBjb250cm9scyAqLworICAgICAg ICBpZiAoZmxhZyA9PSAwICYmICpuYW1lIDwgJyEnKQorICAgICAgICAgIGNvbnRpbnVlOworCWlm IChmbmNudiA+IDApIHsKKwkgICAgaWYgKCpuYW1lID09IFNQKSB7CisJCSpwKysgPSAnXyc7CisJ CW4rKzsKKwkJY29udGludWU7CisJICAgIH0KKwkgICAgaWYgKGlzdXBwZXIoKm5hbWUpKQkJLyog Q2hlY2sgZm9yIG1peGVkIGNhc2UgKi8KKwkgICAgICBhY2FzZSB8PSAxOworCSAgICBlbHNlIGlm IChpc2xvd2VyKCpuYW1lKSkKKwkgICAgICBhY2FzZSB8PSAyOworCX0KKyAgICAgICAgKnArKyA9 ICpuYW1lOworICAgICAgICBuKys7CisgICAgfQorICAgICpwLS0gPSAnXDAnOyAgICAgICAgICAg ICAgICAgICAgICAgIC8qIFRlcm1pbmF0ZSAqLworICAgIHdoaWxlICgqcCA8ICchJyAmJiBwID4g bmFtZTIpICAgICAgIC8qIFN0cmlwIHRyYWlsaW5nIGJsYW5rcyAmIGNvbnRyb2xzICovCisgICAg ICAqcC0tID0gJ1wwJzsKKworICAgIGlmICgqbmFtZTIgPT0gJ1wwJykgeyAgICAgICAgICAgICAg IC8qIE5vdGhpbmcgbGVmdD8gKi8KKyAgICAgICAgY2tzdHJuY3B5KG5hbWUyLCJOT05BTUUiLG1h eCk7CS8qIGRvIHRoaXMuLi4gKi8KKyAgICB9IGVsc2UgaWYgKGFjYXNlID09IDEpIHsgICAgICAg ICAgICAvKiBBbGwgdXBwZXJjYXNlPyAqLworICAgICAgICBwID0gbmFtZTI7ICAgICAgICAgICAg ICAgICAgICAgIC8qIFNvIGNvbnZlcnQgYWxsIGxldHRlcnMgdG8gbG93ZXIgKi8KKyAgICAgICAg d2hpbGUgKCpwKSB7CisgICAgICAgICAgICBpZiAoaXN1cHBlcigqcCkpCisgICAgICAgICAgICAg ICpwID0gdG9sb3dlcigqcCk7CisgICAgICAgICAgICBwKys7CisgICAgICAgIH0KKyAgICB9Cisg ICAgZGVidWcoRjExMCwibnpydG9sIG5ldyBuYW1lIixuYW1lMiwwKTsKK30KKworCisvKiAgWiBT IFQgUiBJIFAgIC0tICBTdHJpcCBkZXZpY2UgJiBkaXJlY3RvcnkgbmFtZSBmcm9tIGZpbGUgc3Bl Y2lmaWNhdGlvbiAqLworCisvKiAgU3RyaXAgcGF0aG5hbWUgZnJvbSBmaWxlbmFtZSAibmFtZSIs IHJldHVybiBwb2ludGVyIHRvIHJlc3VsdCBpbiBuYW1lMiAqLworCitzdGF0aWMgY2hhciB3b3Jr W0NLTUFYUEFUSCsxXTsKKworVk9JRAorenN0cmlwKG5hbWUsbmFtZTIpIGNoYXIgKm5hbWUsICoq bmFtZTI7IHsKKyAgICBjaGFyICpjcCwgKnBwOworICAgIGludCBuID0gMDsKKworICAgIGRlYnVn KEYxMTAsInpzdHJpcCBiZWZvcmUiLG5hbWUsMCk7CisgICAgaWYgKCFuYW1lKSB7ICpuYW1lMiA9 ICIiOyByZXR1cm47IH0KKyAgICBwcCA9IHdvcms7CisjaWZkZWYgRFRJTERFCisgICAgLyogU3Ry aXAgbGVhZGluZyB0aWxkZSAqLworICAgIGlmICgqbmFtZSA9PSAnficpIG5hbWUrKzsKKyAgICBk ZWJ1ZyhGMTEwLCJ6c3RyaXAgYWZ0ZXIgdGlsZGUtc3RyaXBwaW5nIixuYW1lLDApOworI2VuZGlm IC8qIERUSUxERSAqLworICAgIGZvciAoY3AgPSBuYW1lOyAqY3A7IGNwKyspIHsKKyAgICAgICAg aWYgKElTRElSU0VQKCpjcCkpIHsKKyAgICAgICAgICAgIHBwID0gd29yazsKKyAgICAgICAgICAg IG4gPSAwOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgKnBwKysgPSAqY3A7CisgICAg ICAgICAgICBpZiAobisrID49IENLTUFYUEFUSCkKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgIH0KKyAgICB9CisgICAgKnBwID0gJ1wwJzsgICAgICAgICAgICAgICAgICAgICAgICAgLyog VGVybWluYXRlIHRoZSBzdHJpbmcgKi8KKyAgICAqbmFtZTIgPSB3b3JrOworICAgIGRlYnVnKEYx MTAsInpzdHJpcCBhZnRlciIsKm5hbWUyLDApOworfQorCisvKiAgWiBMIFQgTyBSICAtLSAgTG9j YWwgVE8gUmVtb3RlICovCisKK1ZPSUQKK3psdG9yKG5hbWUsbmFtZTIpIGNoYXIgKm5hbWUsICpu YW1lMjsgeworICAgIG56bHRvcihuYW1lLG5hbWUyLDEsMCxDS01BWFBBVEgpOworfQorCisvKiAg TiBaIEwgVCBPIFIgIC0tICBOZXcgTG9jYWwgVE8gUmVtb3RlICovCisKKy8qCisgIGZuY252ID0g MCBmb3Igbm8gY29udmVyc2lvbiwgPiAwIGZvciByZWd1bGFyIGNvbnZlcnNpb24sIDwgMCBmb3Ig bWluaW1hbC4KKyovCitWT0lECituemx0b3IobmFtZSxuYW1lMixmbmNudixmbnNwYXRoLG1heCkK KyAgICBjaGFyICpuYW1lLCAqbmFtZTI7IGludCBmbmNudiwgZm5zcGF0aCwgbWF4OworeyAvKiBu emx0b3IgKi8KKyAgICBjaGFyICpjcCwgKnBwOworI2lmZGVmIENPTU1FTlQKKyAgICBpbnQgZGMg PSAwOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICBpbnQgbiA9IDA7CisgICAgY2hhciAqZG90 cCA9IE5VTEw7CisgICAgY2hhciAqZGlycCA9IE5VTEw7CisgICAgY2hhciBmdWxsbmFtZVtDS01B WFBBVEgrMV07CisgICAgY2hhciAqcDsKKyAgICBDSEFSIGM7CisKKyNpZm5kZWYgTk9DU0VUUwor ICAgIGV4dGVybiBpbnQgZmNoYXJzZXQsIC8qIHRjaGFyc2V0LCAqLyBsYW5ndWFnZTsKKyAgICBp bnQgbGFuZ3N2OworICAgIF9QUk9UT1RZUCAoIENIQVIgKCpzeG8pLCAoQ0hBUikgKSA9IE5VTEw7 IC8qIFRyYW5zbGF0aW9uIGZ1bmN0aW9ucyAqLworI2lmZGVmIENLX0FOU0lDCisgICAgZXh0ZXJu IENIQVIgKCp4bHNbTUFYVENTRVRTKzFdW01BWEZDU0VUUysxXSkoQ0hBUik7CisjZWxzZQorICAg IGV4dGVybiBDSEFSICgqeGxzW01BWFRDU0VUUysxXVtNQVhGQ1NFVFMrMV0pKCk7CisjZW5kaWYg LyogQ0tfQU5TSUMgKi8KKyAgICBsYW5nc3YgPSBsYW5ndWFnZTsKKyAgICBsYW5ndWFnZSA9IExf VVNBU0NJSTsKKyNpZmRlZiBDT01NRU5UCisgICAgLyogUHJvcGVyIHRyYW5zbGF0aW9uIG9mIGZp bGVuYW1lcyBtdXN0IGJlIGRvbmUgZWxzZXdoZXJlICovCisgICAgbiA9IHRjaGFyc2V0ID8gdGNo YXJzZXQgOiBUQ19VU0FTQ0lJOworICAgIHN4byA9IHhsc1tuXVtmY2hhcnNldF07CisjZWxzZQor ICAgIHN4byA9IHhsc1tUQ19VU0FTQ0lJXVtmY2hhcnNldF07CisjZW5kaWYgLyogQ09NTUVOVCAq LworI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKworICAgIGRlYnVnKEYxMTAsIm56bHRvciBuYW1lIixu YW1lLDApOworCisgICAgLyogSGFuZGxlIHBhdGhuYW1lICovCisKKyAgICBmdWxsbmFtZVswXSA9 IE5VTDsKKyAgICBpZiAoZm5zcGF0aCA9PSBQQVRIX09GRikgeyAgICAgICAgICAvKiBQQVRITkFN RVMgT0ZGICovCisgICAgICAgIHpzdHJpcChuYW1lLCZwKTsKKyAgICAgICAgY2tzdHJuY3B5KGZ1 bGxuYW1lLHAsQ0tNQVhQQVRIKTsKKyAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBQQVRITkFNRVMgUkVMQVRJVkUgb3IgQUJTT0xVVEUgKi8KKyAgICAgICAgY2hhciAq IHAgPSBuYW1lOworICAgICAgICB3aGlsZSAoMSkgeworICAgICAgICAgICAgaWYgKCFzdHJuY21w KHAsIi4uLyIsMykpCisgICAgICAgICAgICAgIHAgKz0gMzsKKyAgICAgICAgICAgIGVsc2UgaWYg KCFzdHJuY21wKHAsIi4vIiwyKSkKKyAgICAgICAgICAgICAgcCArPSAyOworICAgICAgICAgICAg ZWxzZQorICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoZm5zcGF0 aCA9PSBQQVRIX0FCUykgeyAgICAgIC8qIEFCU09MVVRFICovCisgICAgICAgICAgICB6Zm5xZnAo cCxDS01BWFBBVEgsZnVsbG5hbWUpOworICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAg ICAgICAgIC8qIFJFTEFUSVZFICovCisgICAgICAgICAgICBja3N0cm5jcHkoZnVsbG5hbWUscCxD S01BWFBBVEgpOworICAgICAgICB9CisgICAgfQorICAgIGRlYnVnKEYxMTAsIm56bHRvciBmdWxs bmFtZSIsZnVsbG5hbWUsMCk7CisKKyAgICBpZiAoIWZuY252KSB7ICAgICAgICAgICAgICAgICAg ICAgICAvKiBOb3QgY29udmVydGluZyAqLworICAgICAgICBja3N0cm5jcHkobmFtZTIsZnVsbG5h bWUsbWF4KTsgIC8qIFdlJ3JlIGRvbmUuICovCisjaWZuZGVmIE5PQ1NFVFMKKyAgICAgICAgbGFu Z3N2ID0gbGFuZ3VhZ2U7CisjZW5kaWYgLyogTk9DU0VUUyAqLworICAgICAgICByZXR1cm47Cisg ICAgfQorICAgIG5hbWUgPSBmdWxsbmFtZTsgICAgICAgICAgICAgICAgICAgIC8qIENvbnZlcnRp bmcgKi8KKworI2lmZGVmIGFlZ2lzCisgICAgY2hhciAqbmFtZWNoYXJzOworICAgIGludCB0aWxk ZSA9IDAsIGJzbGFzaCA9IDA7CisKKyAgICBpZiAoKG5hbWVjaGFycyA9IGdldGVudigiTkFNRUNI QVJTIikpICE9IE5VTEwpIHsKKyAgICAgICAgaWYgKGNrc3RyY2hyKG5hbWVjaGFycywgJ34nICkg IT0gTlVMTCkgdGlsZGUgID0gJ34nOworICAgICAgICBpZiAoY2tzdHJjaHIobmFtZWNoYXJzLCAn XFwnKSAhPSBOVUxMKSBic2xhc2ggPSAnXFwnOworICAgIH0gZWxzZSB7CisgICAgICAgIHRpbGRl ID0gJ34nOworICAgICAgICBic2xhc2ggPSAnXFwnOworICAgIH0KKyNlbmRpZiAvKiBhZWdpcyAq LworCisgICAgcHAgPSB3b3JrOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogT3V0cHV0IGJ1 ZmZlciAqLworICAgIGZvciAoY3AgPSBuYW1lLCBuID0gMDsgKmNwICYmIG4gPCBtYXg7IGNwKyss bisrKSB7IC8qIENvbnZlcnQgbmFtZSBjaGFycyAqLworICAgICAgICBjID0gKmNwOworI2lmbmRl ZiBOT0NTRVRTCisgICAgICAgIGlmIChzeG8pIGMgPSAoKnN4bykoYyk7ICAgICAgICAgLyogQ29u dmVydCB0byBBU0NJSSAqLworI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKyAgICAgICAgaWYgKGZuY252 ID4gMCAmJiBpc2xvd2VyKGMpKQkvKiBVcHBlcmNhc2UgbGV0dGVycyAqLworICAgICAgICAgICpw cCsrID0gdG91cHBlcihjKTsgICAgICAgICAgIC8qIENoYW5nZSB0aWxkZSB0byBoeXBoZW4gKi8K KyAgICAgICAgZWxzZSBpZiAoYyA9PSAnficpCisgICAgICAgICAgKnBwKysgPSAnLSc7CisgICAg ICAgIGVsc2UgaWYgKGZuY252ID4gMCAmJiBjID09ICcjJykJLyogQ2hhbmdlIG51bWJlciBzaWdu IHRvICdYJyAqLworICAgICAgICAgICpwcCsrID0gJ1gnOworICAgICAgICBlbHNlIGlmIChjID09 ICcqJyB8fCBjID09ICc/JykgIC8qIENoYW5nZSB3aWxkY2FyZCBjaGFycyB0byAnWCcgKi8KKyAg ICAgICAgICAqcHArKyA9ICdYJzsKKyAgICAgICAgZWxzZSBpZiAoYyA9PSAnICcpICAgICAgICAg ICAgICAvKiBDaGFuZ2Ugc3BhY2UgdG8gdW5kZXJzY29yZSAqLworICAgICAgICAgICpwcCsrID0g J18nOworICAgICAgICBlbHNlIGlmIChjIDwgJyAnKSAgICAgICAgICAgICAgIC8qIENoYW5nZSBj b250cm9scyB0byAnWCcgKi8KKyAgICAgICAgICAqcHArKyA9ICdYJzsKKyAgICAgICAgZWxzZSBp ZiAoZm5jbnYgPiAwICYmIGMgPT0gJy4nKSB7IC8qIENoYW5nZSBkb3QgdG8gdW5kZXJzY29yZSAq LworICAgICAgICAgICAgZG90cCA9IHBwOyAgICAgICAgICAgICAgICAgIC8qIFJlbWVtYmVyIHdo ZXJlIHdlIGxhc3QgZGlkIHRoaXMgKi8KKyAgICAgICAgICAgICpwcCsrID0gJ18nOworICAgICAg ICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKGMgPT0gJy8nKQorICAgICAgICAgICAgICBkaXJw ID0gcHA7CisgICAgICAgICAgICAqcHArKyA9IGM7CisgICAgICAgIH0KKyAgICB9CisgICAgKnBw ID0gTlVMOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVGllIGl0IG9mZi4gKi8KKyNpZmRl ZiBDT01NRU5UCisgICAgaWYgKGRvdHApICpkb3RwID0gJy4nOyAgICAgICAgICAgICAgLyogUmVz dG9yZSBsYXN0IGRvdCAoaWYgYW55KSAqLworI2Vsc2UKKyAgICBpZiAoZG90cCA+IGRpcnApICpk b3RwID0gJy4nOyAgICAgICAvKiBSZXN0b3JlIGxhc3QgZG90IGluIGZpbGUgbmFtZSAqLworI2Vu ZGlmIC8qIENPTU1FTlQgKi8KKyAgICBjcCA9IG5hbWUyOyAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBJZiBub3RoaW5nIGJlZm9yZSBkb3QsICovCisgICAgaWYgKCp3b3JrID09ICcuJykgKmNw KysgPSAnWCc7ICAgICAgLyogaW5zZXJ0ICdYJyAqLworICAgIGNrc3RybmNweShjcCx3b3JrLG1h eCk7CisjaWZuZGVmIE5PQ1NFVFMKKyAgICBsYW5ndWFnZSA9IGxhbmdzdjsKKyNlbmRpZiAvKiBO T0NTRVRTICovCisgICAgZGVidWcoRjExMCwibnpsdG9yIG5hbWUyIixuYW1lMiwwKTsKK30KKwor CisvKiAgWiBDIEggRCBJIFIgIC0tICBDaGFuZ2UgZGlyZWN0b3J5ICAqLworLyoKKyAgQ2FsbCB3 aXRoOgorICAgIGRpcm5hbSA9IHBvaW50ZXIgdG8gbmFtZSBvZiBkaXJlY3RvcnkgdG8gY2hhbmdl IHRvLAorICAgICAgd2hpY2ggbWF5IGJlICIiIG9yIE5VTEwgdG8gaW5kaWNhdGUgdXNlcidzIGhv bWUgZGlyZWN0b3J5LgorICBSZXR1cm5zOgorICAgIDAgb24gZmFpbHVyZQorICAgIDEgb24gc3Vj Y2VzcworKi8KK2ludAoremNoZGlyKGRpcm5hbSkgY2hhciAqZGlybmFtOyB7CisgICAgY2hhciAq aGQsICpzcDsKKyNpZmRlZiBJS1NEQgorICAgIF9QUk9UT1RZUCAoaW50IHNsb3RkaXIsKGNoYXIg KixjaGFyICopKTsKKyNlbmRpZiAvKiBJS1NEQiAqLworI2lmbmRlZiBOT1NQTAorICAgIGV4dGVy biBzdHJ1Y3QgbXRhYiAqbWFjdGFiOyAgICAgICAgICAgICAvKiBNYWluIG1hY3JvIHRhYmxlICov CisgICAgZXh0ZXJuIGludCBubWFjOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIE51bWJlciBv ZiBtYWNyb3MgKi8KKyNlbmRpZiAvKiBOT1NQTCAqLworCisgICAgZGVidWcoRjExMCwiemNoZGly IixkaXJuYW0sMCk7CisgICAgaWYgKCFkaXJuYW0pIGRpcm5hbSA9ICIiOworICAgIGlmICghKmRp cm5hbSkgICAgICAgICAgICAgICAgICAgICAgIC8qIElmIGFyZ3VtZW50IGlzIG51bGwgb3IgZW1w dHksICovCisgICAgICBkaXJuYW0gPSB6aG9tZSgpOyAgICAgICAgICAgICAgICAgLyogdXNlIHVz ZXIncyBob21lIGRpcmVjdG9yeS4gKi8KKyAgICBzcCA9IGRpcm5hbTsKKyAgICBkZWJ1ZyhGMTEw LCJ6Y2hkaXIgMiIsZGlybmFtLDApOworCisjaWZkZWYgRFRJTERFCisgICAgaGQgPSB0aWxkZV9l eHBhbmQoZGlybmFtKTsgICAgICAgICAgLyogQXR0ZW1wdCB0byBleHBhbmQgdGlsZGUgKi8KKyAg ICBpZiAoIWhkKSBoZCA9ICIiOworICAgIGlmICgqaGQgPT0gJ1wwJykgaGQgPSBkaXJuYW07ICAg ICAgIC8qIGluIGRpcmVjdG9yeSBuYW1lLiAqLworI2Vsc2UKKyAgICBoZCA9IGRpcm5hbTsKKyNl bmRpZiAvKiBEVElMREUgKi8KKyAgICBkZWJ1ZyhGMTEwLCJ6Y2hkaXIgMyIsaGQsMCk7CisKKyNp ZmRlZiBDS1JPT1QKKyAgICBkZWJ1ZyhGMTExLCJ6Y2hkaXIgc2V0cm9vdCIsY2tyb290LGNrcm9v dHNldCk7CisgICAgaWYgKGNrcm9vdHNldCkgaWYgKCF6aW5yb290KGhkKSkgeworCWRlYnVnKEYx MTAsInpjaGRpciBzZXRyb290IHZpb2xhdGlvbiIsaGQsMCk7CisJcmV0dXJuKDApOworICAgIH0K KyNlbmRpZiAvKiBDS1JPT1QgKi8KKworI2lmZGVmIHBkcDExCisgICAgLyogSnVzdCB0byBzYXZl IHNvbWUgc3BhY2UgKi8KKyAgICByZXR1cm4oKGNoZGlyKGhkKSA9PSAwKSA/IDEgOiAwKTsKKyNl bHNlCisgICAgaWYgKGNoZGlyKGhkKSA9PSAwKSB7ICAgICAgICAgICAgICAgICAgICAgICAvKiBU cnkgdG8gY2QgKi8KKyNpZmRlZiBJS1NEQgorI2lmZGVmIENLX0xPR0lOCisgICAgICAgIGlmIChp bnNlcnZlciAmJiBpa2Rib3BlbikKKyAgICAgICAgICBzbG90ZGlyKGlzZ3Vlc3QgPyBhbm9ucm9v dCA6ICIiLCB6Z3RkaXIoKSk7CisjZW5kaWYgLyogQ0tfTE9HSU4gKi8KKyNlbmRpZiAvKiBJS1NE QiAqLworCisjaWZuZGVmIE5PU1BMCisgICAgICAgIGlmIChubWFjKSB7CQkJLyogQW55IG1hY3Jv cyBkZWZpbmVkPyAqLworICAgICAgICAgICAgaW50IGs7CQkJLyogWWVzICovCisgICAgICAgICAg ICBzdGF0aWMgaW50IG9uX2NkID0gMDsKKyAgICAgICAgICAgIGlmICghb25fY2QpIHsKKyAgICAg ICAgICAgICAgICBvbl9jZCA9IDE7CisgICAgICAgICAgICAgICAgayA9IG1sb29rKG1hY3RhYiwi b25fY2QiLG5tYWMpOyAgIC8qIExvb2sgdGhpcyB1cCAqLworICAgICAgICAgICAgICAgIGlmIChr ID49IDApIHsgICAgICAgICAgICAgICAgICAgICAvKiBJZiBmb3VuZCwgKi8KKyAgICAgICAgICAg ICAgICAgICAgaWYgKGRvZG8oayx6Z3RkaXIoKSwwKSA+IC0xKSAgLyogc2V0IGl0IHVwLCAqLwor CQkgICAgICBwYXJzZXIoMSk7ICAgICAgICAgICAgICAgICAgLyogYW5kIGV4ZWN1dGUgaXQgKi8K KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgb25fY2QgPSAwOworICAgICAgICAg ICAgfQorICAgICAgICB9CisjZW5kaWYgLyogTk9TUEwgKi8KKyAgICAgICAgcmV0dXJuKDEpOwor ICAgIH0KKyAgICByZXR1cm4oMCk7CisjZW5kaWYgLyogcGRwMTEgKi8KK30KKworaW50CisjaWZk ZWYgQ0tfQU5TSUMKK3pjaGtwaWQodW5zaWduZWQgbG9uZyB4cGlkKQorI2Vsc2UKK3pjaGtwaWQo eHBpZCkgdW5zaWduZWQgbG9uZyB4cGlkOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAg cmV0dXJuKChraWxsKChQSURfVCl4cGlkLDApIDwgMCkgPyAwIDogMSk7Cit9CisKKworLyogIFog SCBPIE0gRSAgLS0gIFJldHVybiBwb2ludGVyIHRvIHVzZXIncyBob21lIGRpcmVjdG9yeSAgKi8K Kworc3RhdGljIGNoYXIgKiB6aG9tZGlyID0gTlVMTDsKKworY2hhciAqCit6aG9tZSgpIHsKKyAg ICBjaGFyICogaG9tZTsKKworI2lmZGVmIENLUk9PVAorICAgIGlmIChja3Jvb3RzZXQpCisgICAg ICByZXR1cm4oKGNoYXIgKilja3Jvb3QpOworI2VuZGlmIC8qIENLUk9PVCAqLworCisjaWZkZWYg UGxhbjkKKyAgICBob21lID0gZ2V0ZW52KCJob21lIik7CisjZWxzZQorICAgIGhvbWUgPSBnZXRl bnYoIkhPTUUiKTsKKyNlbmRpZiAvKiBQbGFuOSAqLworICAgIG1ha2VzdHIoJnpob21kaXIsaG9t ZSk7CisgICAgcmV0dXJuKGhvbWUgPyB6aG9tZGlyIDogIi4iKTsKK30KKworLyogIFogRyBUIEQg SSBSICAtLSAgUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGN1cnJlbnQgZGlyZWN0b3J5ICAqLwor CisvKgorICBUaGUgInByZWZlcnJlZCIgaW50ZXJmYWNlIGZvciBnZXR0aW5nIHRoZSBjdXJyZW50 IGRpcmVjdG9yeSBpbiBtb2Rlcm4gVU5JWAorICBpcyBnZXRjd2QoKSBbUE9TSVggMTAwMy4xIDUu Mi4yXS4gIEhvd2V2ZXIsIG9uIGNlcnRhaW4gcGxhdGZvcm1zIChzdWNoIGFzCisgIFN1bk9TKSwg aXQgaXMgaW1wbGVtZW50ZWQgYnkgZm9ya2luZyBhIHNoZWxsLCBmZWVkaW5nIGl0IHRoZSBwd2Qg Y29tbWFuZCwKKyAgYW5kIHJldHVybmluZyB0aGUgcmVzdWx0LCB3aGljaCBpcyBub3Qgb25seSBp bmVmZmljaWVudCBidXQgYWxzbyBjYW4gcmVzdWx0CisgIGluIHN0cmF5IG1lc3NhZ2VzIHRvIHRo ZSB0ZXJtaW5hbC4gIEluIHN1Y2ggY2FzZXMgLS0gYXMgd2VsbCBhcyB3aGVuCisgIGdldGN3ZCgp IGlzIG5vdCBhdmFpbGFibGUgYXQgYWxsIC0tIGdldHdkKCkgY2FuIGJlIHVzZWQgaW5zdGVhZCBi eSBkZWZpbmluZworICBVU0VfR0VUV0QuICBIb3dldmVyLCBub3RlIHRoYXQgZ2V0d2QoKSBwcm92 aWRlcyBubyBidWZmZXItbGVuZ3RoIGFyZ3VtZW50CisgIGFuZCB0aGVyZWZvcmUgbm8gc2FmZWd1 YXJkIGFnYWluc3QgbWVtb3J5IGxlYWtzLgorKi8KKyNpZm5kZWYgVVNFX0dFVFdECisjaWZkZWYg QlNENDIKKyNkZWZpbmUgVVNFX0dFVFdECisjZWxzZQorI2lmZGVmIFNVTk9TNAorI2RlZmluZSBV U0VfR0VUV0QKKyNlbmRpZiAvKiBTVU5PUzQgKi8KKyNlbmRpZiAvKiBCU0Q0MiAqLworI2VuZGlm IC8qIFVTRV9HRVRXRCAqLworCisjaWZkZWYgcGRwMTEKKyNkZWZpbmUgQ1dEQkwgODAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBTYXZlIGV2ZXJ5IGJ5dGUgd2UgY2FuLi4uICovCisjZWxzZQor I2RlZmluZSBDV0RCTCBDS01BWFBBVEgKKyNlbmRpZiAvKiBwZHAxMSAqLworc3RhdGljIGNoYXIg Y3dkYnVmW0NXREJMKzJdOworLyoKKyAgTk9URTogVGhlIGdldGN3ZCgpIHByb3RvdHlwZXMgYXJl IGNvbW1lbnRlZCBvdXQgb24gcHVycG9zZS4gIElmIHlvdSBnZXQKKyAgY29tcGlsZS10aW1lIHdh cm5pbmdzLCBzZWFyY2ggdGhyb3VnaCB5b3VyIHN5c3RlbSdzIGhlYWRlciBmaWxlcyB0byBzZWUK KyAgd2hpY2ggb25lIGhhcyB0aGUgbmVlZGVkIHByb3RvdHlwZSwgYW5kICNpbmNsdWRlIGl0LiAg VXN1YWxseSBpdCBpcworICA8dW5pc3RkLmg+LiAgU2VlIHRoZSBzZWN0aW9uIGZvciBpbmNsdWRp bmcgPHVuaXN0ZC5oPiBpbiBja2NkZWIuaCBhbmQKKyAgbWFrZSBhbnkgbmVlZGVkIGFkanVzdG1l bnRzIHRoZXJlIChhbmQgcmVwb3J0IHRoZW0pLgorKi8KK2NoYXIgKgoremd0ZGlyKCkgeworICAg IGNoYXIgKiBidWYgPSBjd2RidWY7CisgICAgY2hhciAqIHM7CisKKyNpZmRlZiBVU0VfR0VUV0QK KyAgICBleHRlcm4gY2hhciAqZ2V0d2QoKTsKKyAgICBzID0gZ2V0d2QoYnVmKTsKKyAgICBkZWJ1 ZyhGMTEwLCJ6Z3RkaXIgQlNENCBnZXR3ZCgpIixzLDApOworICAgIGlmICghcykgcyA9ICIuLyI7 CisgICAgcmV0dXJuKHMpOworI2Vsc2UKKyNpZmRlZiBCU0Q0NAorI2lmZGVmIERDTEdFVENXRAor X1BST1RPVFlQKCBjaGFyICogZ2V0Y3dkLCAoY2hhciAqLCBTSVpFX1QpICk7CisjZW5kaWYgLyog RENMR0VUQ1dEICovCisgICAgZGVidWcoRjEwMSwiemd0ZGlyIEJTRDQ0IENXREJMIiwiIixDV0RC TCk7CisgICAgcyA9IGdldGN3ZChidWYsQ1dEQkwpOworICAgIGlmICghcykgcyA9ICIuLyI7Cisg ICAgcmV0dXJuKHMpOworI2Vsc2UKKyNpZmRlZiBNSU5JWDIKKyNpZmRlZiBEQ0xHRVRDV0QKKyAg ICBfUFJPVE9UWVAoIGNoYXIgKiBnZXRjd2QsIChjaGFyICosIFNJWkVfVCkgKTsKKyNlbmRpZiAv KiBEQ0xHRVRDV0QgKi8KKyAgICBkZWJ1ZyhGMTAxLCJ6Z3RkaXIgTUlOSVgyIENXREJMIiwiIixD V0RCTCk7CisgICAgcyA9IGdldGN3ZChidWYsQ1dEQkwpOworICAgIGlmICghcykgcyA9ICIuLyI7 CisgICAgcmV0dXJuKHMpOworI2Vsc2UKKyNpZmRlZiBTVk9SUE9TSVgKKyNpZmRlZiBDT01NRU5U CisvKiBUaGlzIG5vbi1BTlNJIHByb3RvdHlwZSBjYW4gYmUgZmF0YWwgYXQgcnVudGltZSEgKGUu Zy4gaW4gU0NPMy4ydjUuMC41KS4gKi8KKy8qIEFueXdheSBpdCdzIGFscmVhZHkgcHJvdG90eXBl ZCBpbiBzb21lIGhlYWRlciBmaWxlIHRoYXQgd2UgaGF2ZSBpbmNsdWRlZC4gKi8KKyAgICBleHRl cm4gY2hhciAqZ2V0Y3dkKCk7CisjZWxzZQorI2lmZGVmIERDTEdFVENXRAorICAgIF9QUk9UT1RZ UCggY2hhciAqIGdldGN3ZCwgKGNoYXIgKiwgU0laRV9UKSApOworI2VuZGlmIC8qIERDTEdFVENX RCAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICBkZWJ1ZyhGMTAxLCJ6Z3RkaXIgU1ZPUlBP U0lYIENXREJMIiwiIixDV0RCTCk7CisgICAgcyA9IGdldGN3ZChidWYsQ1dEQkwpOworICAgIGlm ICghcykgcyA9ICIuLyI7CisgICAgcmV0dXJuKHMpOworI2Vsc2UKKyNpZmRlZiBDT0hFUkVOVAor I2lmZGVmIF9JMzg2CisjaWZkZWYgRENMR0VUQ1dECisgICAgZXh0ZXJuIGNoYXIgKmdldGN3ZCgp OworI2VuZGlmIC8qIERDTEdFVENXRCAqLworICAgIGRlYnVnKEYxMDEsInpndGRpciBDT0hFUkVO VCBfSTM4NiBDV0RCTCIsIiIsQ1dEQkwpOworICAgIHMgPSBnZXRjd2QoYnVmLENXREJMKTsKKyAg ICBpZiAoIXMpIHMgPSAiLi8iOworICAgIHJldHVybihzKTsKKyNlbHNlCisgICAgZXh0ZXJuIGNo YXIgKmdldHdkKCk7CisgICAgZGVidWcoRjEwMSwiemd0ZGlyIENPSEVSRU5UIENXREJMIiwiIixD V0RCTCk7CisgICAgcyA9IGdldHdkKGJ1Zik7CisgICAgaWYgKCFzKSBzID0gIi4vIjsKKyAgICBy ZXR1cm4ocyk7CisjZW5kaWYgLyogX0kzODYgKi8KKyNlbHNlCisjaWZkZWYgU1VOT1M0CisgICAg ZGVidWcoRjEwMSwiemd0ZGlyIFNVTk9TIENXREJMIiwiIixDV0RCTCk7CisgICAgcyA9IGdldGN3 ZChidWYsQ1dEQkwpOworICAgIGlmICghcykgcyA9ICIuLyI7CisgICAgcmV0dXJuKHMpOworI2Vs c2UKKyAgICByZXR1cm4oIi4vIik7CisjZW5kaWYgLyogU1VOT1M0ICovCisjZW5kaWYgLyogQ09I RVJFTlQgKi8KKyNlbmRpZiAvKiBTWVNWT1JQT1NJWCAqLworI2VuZGlmIC8qIE1JTklYMiAqLwor I2VuZGlmIC8qIEJTRDQ0ICovCisjZW5kaWYgLyogVVNFX0dFVFdEICovCit9CisKKy8qICBaIFgg QyBNIEQgLS0gUnVuIGEgc3lzdGVtIGNvbW1hbmQgc28gaXRzIG91dHB1dCBjYW4gYmUgcmVhZCBs aWtlIGEgZmlsZSAqLworCisjaWZuZGVmIE5PUFVTSAoraW50Cit6eGNtZChmaWxudW0sY29tYW5k KSBpbnQgZmlsbnVtOyBjaGFyICpjb21hbmQ7IHsKKyAgICBpbnQgb3V0OworICAgIGludCBwaXBl c1syXTsKKyAgICBleHRlcm4gaW50IGthY3RpdmU7ICAgICAgICAgICAgICAgICAvKiBGcm9tIGNr Y3Byby53IGFuZCBja2NtYWkuYyAqLworCisgICAgaWYgKG5vcHVzaCkgeworICAgICAgICBkZWJ1 ZyhGMTAwLCJ6eGNtZCBmYWlsczogbm9wdXNoIiwiIiwwKTsKKyAgICAgICAgcmV0dXJuKC0xKTsK KyAgICB9CisgICAgZGVidWcoRjExMSwienhjbWQiLGNvbWFuZCxmaWxudW0pOworICAgIGlmIChj aGtmbihmaWxudW0pIDwgMCkgcmV0dXJuKC0xKTsgIC8qIE5lZWQgYSB2YWxpZCBLZXJtaXQgZmls ZSBudW1iZXIuICovCisgICAgaWYgKGZpbG51bSA9PSBaU1RESU8gfHwgZmlsbnVtID09IFpDVEVS TSkgLyogQnV0IG5vdCBvbmUgb2YgdGhlc2UuICovCisgICAgICByZXR1cm4oMCk7CisKKyAgICBv dXQgPSAoZmlsbnVtID09IFpJRklMRSB8fCBmaWxudW0gPT0gWlJGSUxFKSA/IDAgOiAxIDsKKyAg ICBkZWJ1ZyhGMTAxLCJ6eGNtZCBvdXQiLGNvbWFuZCxvdXQpOworCisvKiBPdXRwdXQgdG8gYSBj b21tYW5kICovCisKKyAgICBpZiAob3V0KSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBO ZWVkIHBvcGVuKCkgdG8gZG8gdGhpcy4gKi8KKwlja3N0cm5jcHkoZnVsbG5hbWUsIihwaXBlKSIs Q0tNQVhQQVRIKTsKKyNpZmRlZiBOT1BPUEVOCisgICAgICAgIHJldHVybigwKTsgICAgICAgICAg ICAgICAgICAgICAgLyogbm8gcG9wZW4oKSwgZmFpbC4gKi8KKyNlbHNlCisvKiBVc2UgcG9wZW4o KSB0byBydW4gdGhlIGNvbW1hbmQuICovCisKKyNpZmRlZiBfUE9TSVhfU09VUkNFCisvKiBTdHJp Y3RseSBzcGVha2luZywgcG9wZW4oKSBpcyBub3QgYXZhaWxhYmxlIGluIFBPU0lYLjEgKi8KKyNk ZWZpbmUgRENMUE9QRU4KKyNlbmRpZiAvKiBfUE9TSVhfU09VUkNFICovCisKKwlkZWJ1ZyhGMTEw LCJ6eGNtZCBvdXQiLGNvbWFuZCwwKTsKKworICAgICAgICBpZiAocHJpdl9jaGsoKSkgeworCSAg ICBkZWJ1ZyhGMTAwLCJ6eGNtZCBwcml2X2NoayBmYWlsZWQiLCIiLDApOworICAgICAgICAgICAg cmV0dXJuKDApOworCX0JCisJZXJybm8gPSAwOworICAgICAgICBmcFtmaWxudW1dID0gcG9wZW4o Y29tYW5kLCJ3Iik7CisJZGVidWcoRjExMSwienhjbWQgcG9wZW4iLGZwW2ZpbG51bV0gPyAiT0si IDogIkZhaWxlZCIsIGVycm5vKTsKKwlpZiAoZnBbZmlsbnVtXSA9PSBOVUxMKQorCSAgcmV0dXJu KDApOworI2lmZGVmIENPTU1FTlQKKy8qIEkgd29uZGVyIHdoYXQgdGhpcyBpcyBhbGwgYWJvdXQu Li4gKi8KKwljbG9zZShwaXBlc1swXSk7CQkvKiBEb24ndCBuZWVkIHRoZSBpbnB1dCBzaWRlICov CisJZnBbZmlsbnVtXSA9IGZkb3BlbihwaXBlc1sxXSwidyIpOyAvKiBPcGVuIG91dHB1dCBzdHJl YW0uICovCisJZnBbWlNZU0ZOXSA9IGZwW2ZpbG51bV07ICAgICAgICAgICAvKiBSZW1lbWJlci4g Ki8KKyNlbmRpZiAvKiBDT01NRU5UICovCisJaXNwaXBlW2ZpbG51bV0gPSAxOworCXpvdXRjbnQg PSAwOwkJCS8qIChQV1ApIHJlc2V0IGlucHV0IGJ1ZmZlciAqLworCXpvdXRwdHIgPSB6b3V0YnVm ZmVyOworCXJldHVybigxKTsKKyNlbmRpZiAvKiBOT1BPUEVOICovCisgICAgfQorCisvKiBJbnB1 dCBmcm9tIGEgY29tbWFuZCAqLworCisjaWZkZWYgU05JNTQxCisgICAgLyogU0lOSVgtTCA1LjQx IGRvZXMgbm90IGxpa2UgZmRvcGVuKCkgKi8KKyAgICByZXR1cm4oMCk7CisjZWxzZQorICAgIGlm IChwaXBlKHBpcGVzKSAhPSAwKSB7CisgICAgICAgIGRlYnVnKEYxMDAsInp4Y21kIHBpcGUgZmFp bHVyZSIsIiIsMCk7CisgICAgICAgIHJldHVybigwKTsgICAgICAgICAgICAgICAgICAgICAgLyog Y2FuJ3QgbWFrZSBwaXBlLCBmYWlsICovCisgICAgfQorCisvKiBDcmVhdGUgYSBmb3JrIGluIHdo aWNoIHRvIHJ1biB0aGUgbmFtZWQgcHJvY2VzcyAqLworCisgICAgaWYgKCgKKyNpZmRlZiBhZWdp cworICAgICAgICAgcGlkID0gdmZvcmsoKSAgICAgICAgICAgICAgICAgIC8qIGNoaWxkICovCisj ZWxzZQorICAgICAgICAgcGlkID0gZm9yaygpICAgICAgICAgICAgICAgICAgIC8qIGNoaWxkICov CisjZW5kaWYgLyogYWVnaXMgKi8KKyAgICAgICAgICkgPT0gMCkgeworCisvKiBXZSdyZSBpbiB0 aGUgZm9yay4gKi8KKworICAgICAgICBjaGFyICpzaHBhdGgsICpzaG5hbWUsICpzaHB0cjsgIC8q IEZpbmQgdXNlcidzIHByZWZlcnJlZCBzaGVsbCAqLworI2lmbmRlZiBhZWdpcworICAgICAgICBz dHJ1Y3QgcGFzc3dkICpwOworICAgICAgICBjaGFyICpkZWZzaGVsbDsKKyNpZmRlZiBIUFVYMTAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEZWZhdWx0IHNoZWxsICovCisgICAgICAgIGRl ZnNoZWxsID0gIi91c3IvYmluL3NoIjsKKyNlbHNlCisjaWZkZWYgUGxhbjkKKyAgICAgICAgZGVm c2hlbGwgPSAiL2Jpbi9yYyI7CisjZWxzZQorICAgICAgICBkZWZzaGVsbCA9ICIvYmluL3NoIjsK KyNlbmRpZiAvKiBQbGFuOSAqLworI2VuZGlmIC8qIEhQVVgxMCAqLworI2VuZGlmIC8qIGFlZ2lz ICovCisgICAgICAgIGlmIChwcml2X2NhbigpKSBleGl0KDEpOyAgICAgICAgLyogVHVybiBvZmYg YW55IHByaXZpbGVnZXMhICovCisgICAgICAgIGRlYnVnKEYxMDEsInp4Y21kIHBpZCIsIiIscGlk KTsKKyAgICAgICAgY2xvc2UocGlwZXNbMF0pOyAgICAgICAgICAgICAgICAvKiBjbG9zZSBpbnB1 dCBzaWRlIG9mIHBpcGUgKi8KKyAgICAgICAgY2xvc2UoMCk7ICAgICAgICAgICAgICAgICAgICAg ICAvKiBjbG9zZSBzdGRpbiAqLworICAgICAgICBpZiAob3BlbigiL2Rldi9udWxsIiwwKSA8IDAp IHJldHVybigwKTsgLyogcmVwbGFjZSBpbnB1dCBieSBudWxsICovCisjaWZuZGVmIE9YT1MKKyNp Zm5kZWYgU1ZPUlBPU0lYCisgICAgICAgIGR1cDIocGlwZXNbMV0sMSk7ICAgICAgICAgICAgICAg LyogQlNEOiByZXBsYWNlIHN0ZG91dCAmIHN0ZGVyciAqLworICAgICAgICBkdXAyKHBpcGVzWzFd LDIpOyAgICAgICAgICAgICAgIC8qIGJ5IHRoZSBwaXBlICovCisjZWxzZQorICAgICAgICBjbG9z ZSgxKTsgICAgICAgICAgICAgICAgICAgICAgIC8qIEFUJlQ6IGNsb3NlIHN0ZG91dCAqLworICAg ICAgICBpZiAoZHVwKHBpcGVzWzFdKSAhPSAxKSAgICAgICAgIC8qIFNlbmQgc3Rkb3V0IHRvIHRo ZSBwaXBlICovCisgICAgICAgICAgcmV0dXJuKDApOworICAgICAgICBjbG9zZSgyKTsgICAgICAg ICAgICAgICAgICAgICAgIC8qIFNlbmQgc3RkZXJyIHRvIHRoZSBwaXBlICovCisgICAgICAgIGlm IChkdXAocGlwZXNbMV0pICE9IDIpCisgICAgICAgICAgcmV0dXJuKDApOworI2VuZGlmIC8qIFNW T1JQT1NJWCAqLworI2Vsc2UgLyogT1hPUyAqLworICAgICAgICBkdXAyKHBpcGVzWzFdLDEpOwor ICAgICAgICBkdXAyKHBpcGVzWzFdLDIpOworI2VuZGlmIC8qIE9YT1MgKi8KKyAgICAgICAgY2xv c2UocGlwZXNbMV0pOyAgICAgICAgICAgICAgICAvKiBEb24ndCBuZWVkIHRoaXMgYW55IG1vcmUu ICovCisKKyNpZmRlZiBhZWdpcworICAgICAgICBpZiAoKHNocGF0aCA9IGdldGVudigiU0VSVkVS U0hFTEwiKSkgPT0gTlVMTCkKKyAgICAgICAgICBzaHBhdGggPSAiL2Jpbi9zaCI7CisjZWxzZQor ICAgICAgICBzaHBhdGggPSBnZXRlbnYoIlNIRUxMIik7ICAgICAgIC8qIFdoYXQgc2hlbGw/ICov CisgICAgICAgIGlmIChzaHBhdGggPT0gTlVMTCkgeworICAgICAgICAgICAgcCA9IGdldHB3dWlk KCByZWFsX3VpZCgpICk7IC8qIEdldCBsb2dpbiBkYXRhICovCisgICAgICAgICAgICAvKiBkZWJ1 ZyhGMTExLCJ6eGNtZCBzaHBhdGgiLCJnZXRwd3VpZCgpIixwKTsgKi8KKyAgICAgICAgICAgIGlm IChwID09IChzdHJ1Y3QgcGFzc3dkICopTlVMTCB8fCAhKihwLT5wd19zaGVsbCkpCisgICAgICAg ICAgICAgIHNocGF0aCA9IGRlZnNoZWxsOworICAgICAgICAgICAgZWxzZSBzaHBhdGggPSBwLT5w d19zaGVsbDsKKyAgICAgICAgfQorI2VuZGlmIC8qIGFlZ2lzICovCisgICAgICAgIHNocHRyID0g c2huYW1lID0gc2hwYXRoOworICAgICAgICB3aGlsZSAoKnNocHRyICE9ICdcMCcpCisgICAgICAg ICAgaWYgKCpzaHB0cisrID09ICcvJykKKyAgICAgICAgICAgIHNobmFtZSA9IHNocHRyOworICAg ICAgICBkZWJ1ZyhGMTEwLHNocGF0aCxzaG5hbWUsMCk7CisJcmVzdG9yc2lncygpOwkJCS8qIFJl c3RvcmUgaWdub3JlZCBzaWduYWxzICovCisgICAgICAgIGV4ZWNsKHNocGF0aCxzaG5hbWUsIi1j Iixjb21hbmQsKGNoYXIgKilOVUxMKTsgLyogRXhlY3V0ZSB0aGUgY21kICovCisgICAgICAgIGV4 aXQoMCk7ICAgICAgICAgICAgICAgICAgICAgICAgLyoganVzdCBwdW50IGlmIGl0IGZhaWxlZC4g Ki8KKyAgICB9IGVsc2UgaWYgKHBpZCA9PSAoUElEX1QpIC0xKSB7CisgICAgICAgIGRlYnVnKEYx MDAsInp4Y21kIGZvcmsgZmFpbHVyZSIsIiIsMCk7CisgICAgICAgIHJldHVybigwKTsKKyAgICB9 CisgICAgZGVidWcoRjEwMSwienhjbWQgcGlkIiwiIixwaWQpOworICAgIGNsb3NlKHBpcGVzWzFd KTsgICAgICAgICAgICAgICAgICAgIC8qIERvbid0IG5lZWQgdGhlIG91dHB1dCBzaWRlICovCisg ICAgaXNwaXBlW2ZpbG51bV0gPSAxOyAgICAgICAgICAgICAgICAgLyogUmVtZW1iZXIgaXQncyBh IHBpcGUgKi8KKyAgICBmcFtmaWxudW1dID0gZmRvcGVuKHBpcGVzWzBdLCJyIik7CS8qIE9wZW4g YSBzdHJlYW0gZm9yIGlucHV0LiAqLworCisjaWZkZWYgRE9OREVMQVkKKyNpZmRlZiBTRUxFQ1QK KyAgICBpZiAoZmlsbnVtID09IFpJRklMRSAmJiBrYWN0aXZlKSB7ICAvKiBNYWtlIHBpcGUgcmVh ZHMgbm9uYmxvY2tpbmcgKi8KKyAgICAgICAgaW50IGZsYWdzLCB4OworICAgICAgICBpZiAoKGZs YWdzID0gZmNudGwoZmlsZW5vKGZwW2ZpbG51bV0pLEZfR0VURkwsMCkpID4gLTEpIHsKKyAgICAg ICAgICAgIGRlYnVnKEYxMDEsInp4Y21kIGZjbnRsIDEgcGlwZSBmbGFncyIsIiIsZmxhZ3MpOwor ICAgICAgICAgICAgeCA9IGZjbnRsKGZpbGVubyhmcFtmaWxudW1dKSxGX1NFVEZMLCBmbGFncyB8 CisjaWZkZWYgUU5YCisgICAgICAgICAgICAgICAgICBPX05PTkJMT0NLCisjZWxzZQorICAgICAg ICAgICAgICAgICAgT19OREVMQVkKKyNlbmRpZiAvKiBRTlggKi8KKyAgICAgICAgICAgICAgICAg ICk7CisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJ6eGNtZCBmY250bCAyIHJlc3VsdCIsIiIseCk7 CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgLyogU0VMRUNUICovCisjZW5kaWYgLyogRE9OREVM QVkgKi8KKyNlbmRpZiAvKiBTTkk1NDEgKi8KKyAgICBmcFtaU1lTRk5dID0gZnBbZmlsbnVtXTsg ICAgICAgICAgICAvKiBSZW1lbWJlci4gKi8KKyAgICB6aW5jbnQgPSAwOyAgICAgICAgICAgICAg ICAgICAgICAgICAvKiAoUFdQKSByZXNldCBpbnB1dCBidWZmZXIgKi8KKyAgICB6aW5wdHIgPSB6 aW5idWZmZXI7CisgICAgZnVsbG5hbWVbMF0gPSAnXDAnOworICAgIHJldHVybigxKTsKK30gLyog enhjbWQgKi8KKworLyogIFogQyBMIE8gUyBGICAtIHdhaXQgZm9yIHRoZSBjaGlsZCBmb3JrIHRv IHRlcm1pbmF0ZSBhbmQgY2xvc2UgdGhlIHBpcGUuICovCisKKy8qICBVc2VkIGludGVybmFsbHkg YnkgemNsb3NlIC0gcmV0dXJucyAtMSBvbiBmYWlsdXJlLCAxIG9uIHN1Y2Nlc3MuICovCisKK2lu dAoremNsb3NmKGZpbG51bSkgaW50IGZpbG51bTsgeworICAgIGludCB3c3RhdCwgb3V0OworICAg IGludCBzdGF0dXNwOworCisgICAgZGVidWcoRjEwMSwiemNsb3NmIGZpbG51bSIsIiIsZmlsbnVt KTsKKyAgICBvdXQgPSAoZmlsbnVtID09IFpJRklMRSB8fCBmaWxudW0gPT0gWlJGSUxFKSA/IDAg OiAxIDsKKyAgICBkZWJ1ZyhGMTAxLCJ6Y2xvc2Ygb3V0IiwiIixvdXQpOworCisjaWZuZGVmIE5P UE9QRU4KKyAgICBpZiAoaXNwaXBlW2ZpbG51bV0KKyAgICAgICAgLyogSW4gVU5JWCB3ZSB1c2Ug cG9wZW4oKSBvbmx5IGZvciBvdXRwdXQgZmlsZXMgKi8KKyAgICAgICAgJiYgb3V0CisgICAgICAg ICkgeworICAgICAgICBpbnQgeDsKKyAgICAgICAgeCA9IHBjbG9zZShmcFtmaWxudW1dKTsKKyAg ICAgICAgcGV4aXRzdGF0ID0geCA+PiA4OworICAgICAgICBkZWJ1ZyhGMTAxLCJ6Y2xvc2YgcGNs b3NlIiwiIix4KTsKKyAgICAgICAgZGVidWcoRjEwMSwiemNsb3NmIHBleGl0c3RhdCIsIiIscGV4 aXRzdGF0KTsKKyAgICAgICAgZnBbZmlsbnVtXSA9IGZwW1pTWVNGTl0gPSBOVUxMOworICAgICAg ICBpc3BpcGVbZmlsbnVtXSA9IDA7CisgICAgICAgIHJldHVybigoeCAhPSAwKSA/IC0xIDogMSk7 CisgICAgfQorI2VuZGlmIC8qIE5PUE9QRU4gKi8KKyAgICAvKiBkZWJ1ZyhGMTAxLCJ6Y2xvc2Yg ZnBbZmlsbnVtXSIsIiIsIGZwW2ZpbG51bV0pOyAqLworICAgIC8qIGRlYnVnKEYxMDEsInpjbG9z ZiBmcFtaU1lTRk5dIiwiIiwgZnBbWlNZU0ZOXSk7ICovCisKKyAgICBpZiAocGlkICE9IChQSURf VCkgMCkgeworICAgICAgICBkZWJ1ZyhGMTAxLCJ6Y2xvc2Yga2lsbGluZyBwaWQiLCIiLHBpZCk7 CisjaWZkZWYgUGxhbjkKKyAgICAgICAga2lsbChwaWQsIFNJR0tJTEwpOworI2Vsc2UKKyAgICAg ICAga2lsbChwaWQsOSk7CisjZW5kaWYgLyogUGxhbjkgKi8KKworI2lmbmRlZiBDS19DSElMRAor LyoKKyAgVGhpcyBpcyB0aGUgb3JpZ2luYWwgY29kZSAoYmVmb3JlIDIwIEFwcmlsIDE5OTcpIGFu ZCBoYXMgcHJvdmVuIHRvdGFsbHkKKyAgcG9ydGFibGUuICBCdXQgaXQgZG9lcyBub3QgZ2l2ZSB1 cyB0aGUgcHJvY2VzcydzIHJldHVybiBjb2RlLgorKi8KKyAgICAgICAgd2hpbGUgKCh3c3RhdCA9 IHdhaXQoKFdBSVRfVCAqKTApKSAhPSBwaWQgJiYgd3N0YXQgIT0gLTEpIDsKKyNlbHNlCisvKiBI ZXJlIHdlIHRyeSB0byBnZXQgdGhlIHJldHVybiBjb2RlLiAgTGV0J3MgaG9wZSB0aGlzIGlzIHBv cnRhYmxlIHRvby4gKi8KKyAgICAgICAgd2hpbGUgKCh3c3RhdCA9IHdhaXQoJnN0YXR1c3ApKSAh PSBwaWQgJiYgd3N0YXQgIT0gLTEpIDsKKyAgICAgICAgcGV4aXRzdGF0ID0gKHN0YXR1c3AgJiAw eGZmKSA/IHN0YXR1c3AgOiBzdGF0dXNwID4+IDg7CisgICAgICAgIGRlYnVnKEYxMDEsInpjbG9z ZiB3YWl0IHN0YXR1c3AiLCIiLHN0YXR1c3ApOworICAgICAgICBkZWJ1ZyhGMTAxLCJ6Y2xvc2Yg d2FpdCBwZXhpdHN0YXQiLCIiLHBleGl0c3RhdCk7CisjZW5kaWYgLyogQ0tfQ0hJTEQgKi8KKyAg ICAgICAgcGlkID0gMDsKKyAgICB9CisgICAgZmNsb3NlKGZwW2ZpbG51bV0pOworICAgIGZwW2Zp bG51bV0gPSBmcFtaU1lTRk5dID0gTlVMTDsKKworICAgIGlzcGlwZVtmaWxudW1dID0gMDsKKyAg ICAvKiBkZWJ1ZyhGMTAxLCJ6Y2xvc2YgZnBbZmlsbnVtXSIsIiIsZnBbZmlsbnVtXSk7ICovCisj aWZkZWYgQ0tfQ0hJTEQKKyAgICByZXR1cm4ocGV4aXRzdGF0ID09IDAgPyAxIDogLTEpOworI2Vs c2UKKyAgICByZXR1cm4oMSk7CisjZW5kaWYgLyogQ0tfQ0hJTEQgKi8KK30KKworI2Vsc2UgIC8q IE5PUFVTSCAqLworCitpbnQKK3p4Y21kKGZpbG51bSxjb21hbmQpIGludCBmaWxudW07IGNoYXIg KmNvbWFuZDsgeworICAgIHJldHVybigwKTsKK30KK2ludAoremNsb3NmKGZpbG51bSkgaW50IGZp bG51bTsgeworICAgIHJldHVybihFT0YpOworfQorI2VuZGlmIC8qIE5PUFVTSCAqLworCisKKy8q ICBaIFggUCBBIE4gRCAgLS0gIEV4cGFuZCBhIHdpbGRjYXJkIHN0cmluZyBpbnRvIGFuIGFycmF5 IG9mIHN0cmluZ3MgICovCisvKgorICBBcyBvZiBDLUtlcm1pdCA3LjAsIHRoaXMgQVBJIGlzIG9i c29sZXRlLCByZXBsYWNlZCBieSBuenhwYW5kKCksIGFuZCB0aGlzCisgIGZ1bmN0aW9uIGlzIG9u bHkgdXNlZCBpbnRlcm5hbGx5LiAgU2VlIG56eHBhbmQoKSBiZWxvdy4KKworICBSZXR1cm5zIHRo ZSBudW1iZXIgb2YgZmlsZXMgdGhhdCBtYXRjaCBmbmFyZywgd2l0aCBkYXRhIHN0cnVjdHVyZXMg c2V0IHVwCisgIHNvIHRoYXQgZmlyc3QgZmlsZSAoaWYgYW55KSB3aWxsIGJlIHJldHVybmVkIGJ5 IHRoZSBuZXh0IHpuZXh0KCkgY2FsbC4KKworICBEZXBlbmRzIG9uIGV4dGVybmFsIHZhcmlhYmxl IHdpbGR4cGFuZDogMCBtZWFucyB3ZSBleHBhbmQgd2lsZGNhcmRzCisgIGludGVybmFsbHksIG5v bnplcm8gbWVhbnMgd2UgY2FsbCB0aGUgc2hlbGwgdG8gZG8gaXQuCisgIAorICBBTkQgaW4gQy1L ZXJtaXQgOC4wLjIxMiBhbmQgbGF0ZXIsIG9uIGV4dGVybiB3aWxkZW5hOiAxIG1lYW5zIHdpbGRj YXJkcworICBhcmUgZW5hYmxlZCwgMCBtZWFucyBkaXNhYmxlZCwgdGhlIGNoYXJhY3RlcnMgYXJl IHRha2VuIGxpdGVyYWxseS4KKyovCitzdGF0aWMgaW50IHhkaXJvbmx5ID0gMDsKK3N0YXRpYyBp bnQgeGZpbG9ubHkgPSAwOworc3RhdGljIGludCB4bWF0Y2hkb3QgPSAwOworc3RhdGljIGludCB4 cmVjdXJzaXZlID0gMDsKK3N0YXRpYyBpbnQgeG5vYmFja3VwID0gMDsKK3N0YXRpYyBpbnQgeG5v bGlua3MgPSAwOworCitzdGF0aWMgY2hhciAqZnJlZXB0ciA9IE5VTEwsICoqcmVzcHRyID0gTlVM TDsgLyogQ29waWVzIG9mIGNhbGxlcidzIGFyZ3MgKi8KK3N0YXRpYyBpbnQgcmVtbGVuOyAgICAg ICAgICAgICAgICAgICAgICAvKiBSZW1haW5pbmcgc3BhY2UgaW4gY2FsbGVyJ3MgYXJyYXkgKi8K K3N0YXRpYyBpbnQgbnVtZm5kID0gMDsJCQkvKiBOdW1iZXIgb2YgbWF0Y2hlcyBmb3VuZCAqLwor CisjZGVmaW5lIE1JTlNQQUNFIDEwMjQKKworc3RhdGljIGludAoraW5pdHNwYWNlKHJlc2Fycnks bGVuKSBjaGFyICogcmVzYXJyeVtdOyBpbnQgbGVuOyB7CisjaWZkZWYgRFlOQU1JQworICAgIGlm IChsZW4gPCBNSU5TUEFDRSkgbGVuID0gTUlOU1BBQ0U7CisgICAgaWYgKCFzc3BhY2UpIHsgICAg ICAgICAgICAgICAgICAgICAgLyogTmVlZCB0byBhbGxvY2F0ZSBzdHJpbmcgc3BhY2U/ICovCisg ICAgICAgIHdoaWxlIChsZW4gPj0gTUlOU1BBQ0UpIHsKKyAgICAgICAgICAgIGlmICgoc3NwYWNl ID0gbWFsbG9jKGxlbisyKSkpIHsgLyogR290IGl0LiAqLworICAgICAgICAgICAgICAgIGRlYnVn KEYxMDEsImZnZW4gc3RyaW5nIHNwYWNlIiwiIixsZW4pOworICAgICAgICAgICAgICAgIGJyZWFr OworICAgICAgICAgICAgfQorICAgICAgICAgICAgbGVuID0gKGxlbiAvIDIpICsgKGxlbiAvIDQp OyAvKiBEaWRuJ3QsIHJlZHVjZSBieSAzLzQgKi8KKyAgICAgICAgfQorICAgICAgICBpZiAobGVu IDw9IE1JTlNQQUNFKSB7CQkvKiBEaWQgd2UgZ2V0IGl0PyAqLworICAgICAgICAgICAgZnByaW50 ZihzdGRlcnIsImZnZW4gY2FuJ3QgbWFsbG9jIHN0cmluZyBzcGFjZVxuIik7CisgICAgICAgICAg ICByZXR1cm4oLTEpOworICAgICAgICB9CisJc3NwbGVuID0gbGVuOworICAgIH0KKyNlbmRpZiAv KiBEWU5BTUlDICovCisKKyAgICBmcmVlcHRyID0gc3NwYWNlOyAgICAgICAgICAgICAgICAgICAv KiBUaGlzIGlzIHdoZXJlIG1hdGNoZXMgYXJlIGNvcGllZC4gKi8KKyAgICByZXNwdHIgPSByZXNh cnJ5OwkJCS8qIFN0YXRpYyBjb3BpZXMgb2YgdGhlc2Ugc28gKi8KKyAgICByZW1sZW4gPSBsZW47 ICAgICAgICAgICAgICAgICAgICAgICAvKiByZWN1cnNpdmUgY2FsbHMgY2FuIGFsdGVyIHRoZW0u ICovCisgICAgZGVidWcoRjEwMSwiaW5pdHNwYWNlIHNzcGxlbiIsIiIsc3NwbGVuKTsKKyAgICBy ZXR1cm4oMCk7Cit9CisKKy8qCisgIFogUyBFIFQgRiBJIEwgIC0tICBRdWVyeSBvciBjaGFuZ2Ug dGhlIHNpemUgb2YgZmlsZSBsaXN0IGJ1ZmZlcnMuCisKKyAgZmMgPSAxOiBDaGFuZ2UgY3VycmVu dCBzdHJpbmcgc3BhY2UgdG8gbiwgcmV0dXJuIG5ldyBzaXplLgorICBmYyA9IDI6IFJldHVybiBj dXJyZW50IHN0cmluZyBzcGFjZSBzaXplLgorICBmYyA9IDM6IENoYW5nZSBjdXJyZW50IG1heG5h bWVzIHRvIG4sIHJldHVybiBuZXcgbWF4bmFtZXMuCisgIGZjID0gNDogUmV0dXJuIGN1cnJlbnQg bWF4bmFtZXMuCisgIFJldHVybnMgPCAwIG9uIGVycm9yLgorKi8KK2ludAorenNldGZpbChuLCBm YykgaW50IG4sIGZjOyB7CisjaWZkZWYgRFlOQU1JQworICAgIHN3aXRjaCAoZmMpIHsKKyAgICAg IGNhc2UgMToJCQkJLyogU3RyaW5nc3BhY2UgKi8KKwlpZiAoc3NwYWNlKSB7CisJICAgIGZyZWUo c3NwYWNlKTsKKwkgICAgc3NwYWNlID0gTlVMTDsKKwl9CisJaWYgKGluaXRzcGFjZShtdGNocyxu KSA8IDApCisJICByZXR1cm4oLTEpOworICAgICAgY2FzZSAyOgkJCQkvKiBGYWxsIHRocnUgZGVs aWJlcmF0ZWx5ICovCisJcmV0dXJuKHNzcGxlbik7CisgICAgICBjYXNlIDM6CQkJCS8qIExpc3Rz aXplICovCisJaWYgKG10Y2hzKSB7CisJICAgIGZyZWUoKGNoYXIgKiltdGNocyk7CisJICAgIG10 Y2hzID0gTlVMTDsKKwl9CisJbXRjaHMgPSAoY2hhciAqKiltYWxsb2MobiAqIHNpemVvZihjaGFy ICopKTsKKwlpZiAoIW10Y2hzKQorCSAgcmV0dXJuKC0xKTsKKwltYXhuYW1lcyA9IG47CisgICAg ICBjYXNlIDQ6CQkJCS8qIEZhbGwgdGhydSBkZWxpYmVyYXRlbHkgKi8KKwlyZXR1cm4obWF4bmFt ZXMpOworICAgIH0KKyNlbmRpZiAvKiBEWU5BTUlDICovCisgICAgcmV0dXJuKC0xKTsKK30KKwor CisKKyNpZm5kZWYgTk9OWlhQQU5ECisjaWZuZGVmIHBkcDExCitzdGF0aWMKKyNlbmRpZiAvKiBw ZHAxMSAqLworI2VuZGlmIC8qIE5PTlpYUEFORCAqLworaW50Cit6eHBhbmQoZm5hcmcpIGNoYXIg KmZuYXJnOyB7CisgICAgZXh0ZXJuIGludCBkaXJhY3RpdmU7CisgICAgY2hhciBmbmJ1ZltDS01B WFBBVEgrOF0sICogZm4sICogcDsKKworI2lmZGVmIERUSUxERSAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIEJ1aWx0IHdpdGggdGlsZGUtZXhwYW5zaW9uPyAqLworICAgIGNoYXIgKnRuYW07 CisjZW5kaWYgLyogRFRJTERFICovCisgICAgaW50IHg7CisgICAgaW50IGhhdmVvbmVkaXIgPSAw OworCisgICAgaWYgKCFmbmFyZykgeyAgICAgICAgICAgICAgICAgICAgICAgLyogSWYgbm8gYXJn dW1lbnQgcHJvdmlkZWQgKi8KKwlueHBhbmQgPSBmY291bnQgPSAwOworCXJldHVybigwKTsJCQkv KiBSZXR1cm4gemVybyBmaWxlcyBmb3VuZCAqLworICAgIH0KKyAgICBkZWJ1ZyhGMTEwLCJ6eHBh bmQgZW50cnkiLGZuYXJnLDApOworICAgIGRlYnVnKEYxMDEsInp4cGFuZCB4ZGlyb25seSIsIiIs eGRpcm9ubHkpOworICAgIGRlYnVnKEYxMDEsInp4cGFuZCB4Zmlsb25seSIsIiIseGZpbG9ubHkp OworCisgICAgaWYgKCEqZm5hcmcpIHsJCQkvKiBJZiBubyBhcmd1bWVudCBwcm92aWRlZCAqLwor CW54cGFuZCA9IGZjb3VudCA9IDA7CisJcmV0dXJuKDApOwkJCS8qIFJldHVybiB6ZXJvIGZpbGVz IGZvdW5kICovCisgICAgfQorCisjaWZkZWYgQ0tST09UCisgICAgZGVidWcoRjExMSwienhwYW5k IHNldHJvb3QiLGNrcm9vdCxja3Jvb3RzZXQpOworICAgIGlmIChja3Jvb3RzZXQpIGlmICghemlu cm9vdChmbmFyZykpIHsKKwlkZWJ1ZyhGMTEwLCJ6eHBhbmQgc2V0cm9vdCB2aW9sYXRpb24iLGZu YXJnLDApOworCW54cGFuZCA9IGZjb3VudCA9IDA7CisJcmV0dXJuKDApOworICAgIH0KKyNlbmRp ZiAvKiBDS1JPT1QgKi8KKworI2lmZGVmIENPTU1FTlQKKy8qCisgIFRoaXMgd291bGQgaGF2ZSBi ZWVuIHBlcmZlY3QsIGV4Y2VwdCBpdCBtYWtlcyB1cyByZXR1cm4gZnVsbHkgcXVhbGlmaWVkCisg IHBhdGhuYW1lcyBmb3IgYWxsIGZpbGVzLgorKi8KKyAgICB6Zm5xZnAoZm5hcmcsQ0tNQVhQQVRI LGZuYnVmKTsKKyAgICBkZWJ1ZyhGMTEwLCJ6eHBhbmQgemZucWZwIixmbmJ1ZiwwKTsKKyAgICBz ID0gemd0ZGlyKCk7CisgICAgZGVidWcoRjExMCwienhwYW5kIHpndGRpciIscywwKTsKKyAgICBw ID0gZm5idWY7CisgICAgd2hpbGUgKCpwICYmICpzKSAgICAgICAgICAgICAgICAgICAgLyogTWFr ZSBpdCByZWxhdGl2ZSAqLworICAgICAgaWYgKCpzKysgIT0gKnArKykKKyAgICAgICAgYnJlYWs7 CisgICAgZm4gPSAoKnMpID8gZm5idWYgOiBwOworICAgIGRlYnVnKEYxMTAsInp4cGFuZCBmbiAw IixmbiwwKTsKKyAgICBpZiAoISpmbikgeworICAgICAgICBmbiA9IGZuYnVmOworICAgICAgICBm bmJ1ZlswXSA9ICcqJzsKKyAgICAgICAgZm5idWZbMV0gPSAnXDAnOworICAgIH0KKyAgICBkZWJ1 ZyhGMTEwLCJ6eHBhbmQgZm4gMC41IixmbiwwKTsKKyNlbHNlCisjaWZkZWYgRFRJTERFICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogQnVpbHQgd2l0aCB0aWxkZS1leHBhbnNpb24/ICovCisg ICAgaWYgKCpmbmFyZyA9PSAnficpIHsgICAgICAgICAgICAgICAgLyogU3RhcnRzIHdpdGggdGls ZGU/ICovCisgICAgICAgIHRuYW0gPSB0aWxkZV9leHBhbmQoZm5hcmcpOyAgICAgLyogVHJ5IHRv IGV4cGFuZCBpdC4gKi8KKyAgICAgICAgY2tzdHJuY3B5KGZuYnVmLHRuYW0sQ0tNQVhQQVRIKTsK KyAgICB9IGVsc2UKKyNlbmRpZiAvKiBEVElMREUgKi8KKyAgICAgIGNrc3RybmNweShmbmJ1Zixm bmFyZyxDS01BWFBBVEgpOworICAgIGZuID0gZm5idWY7ICAgICAgICAgICAgICAgICAgICAgICAg IC8qIFBvaW50IHRvIHdoYXQgd2UnbGwgd29yayB3aXRoICovCisjZW5kaWYgLyogQ09NTUVOVCAq LworICAgIGRlYnVnKEYxMTAsInp4cGFuZCBmbiAxIixmbiwwKTsKKworICAgIGlmICghKmZuKSAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEJ1dCBtYWtlIHN1cmUgc29tZXRoaW5nIGlzIHRo ZXJlICovCisgICAgICByZXR1cm4oMCk7CisKKyAgICBwID0gZm4gKyAoaW50KXN0cmxlbihmbikg LSAxOworICAgIGlmICgqcCA9PSAnLycpIHsgICAgICAgICAgICAgICAgICAgIC8qIElmIGxhc3Qg Y2hhciA9IC8gaXQgbXVzdCBiZSBhIGRpciAqLworCWlmICgheGZpbG9ubHkgJiYgIWlzd2lsZChw KSkgaGF2ZW9uZWRpcisrOworICAgICAgICBja3N0cm5jYXQoZm4sICIqIiwgQ0tNQVhQQVRIKzgp OyAvKiBzbyBhcHBlbmQgJyonICovCisgICAgfSBlbHNlIGlmIChwID4gZm4pIHsgICAgICAgICAg ICAgICAgLyogSWYgZW5kcyBpbiAiLy4iICovCisgICAgICAgIGlmICgqKHAtMSkgPT0gJy8nICYm ICpwID09ICcuJykgLyogY2hhbmdlICcuJyB0byAnKicgKi8KKyAgICAgICAgICAqcCA9ICcqJzsK KyAgICB9IGVsc2UgaWYgKHAgPT0gZm4pIHsgICAgICAgICAgICAgICAvKiBJZiBpdCdzICcuJyBh bG9uZSAqLworICAgICAgICBpZiAoKnAgPT0gJy4nKSAgICAgICAgICAgICAgICAgIC8qIGNoYW5n ZSAnLicgdG8gJyonICovCisgICAgICAgICAgKnAgPSAnKic7CisgICAgfQorICAgIGRlYnVnKEYx MTAsInp4cGFuZCBmbiAyIixmbiwwKTsKKyAgICB4ID0gaXNkaXIoZm4pOyAgICAgICAgICAgICAg ICAgICAgICAvKiBJcyBpdCBhIGRpcmVjdG9yeT8gKi8KKyAgICBkZWJ1ZyhGMTExLCJ6eHBhbmQg aXNkaXIgMSIsZm4seCk7CisgICAgaWYgKHgpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogSWYgc28sIG1ha2UgaXQgaW50byBhIHdpbGRjYXJkICovCisJaWYgKCF4Zmlsb25seSAmJiAh aXN3aWxkKHApKQorCSAgaGF2ZW9uZWRpcisrOworICAgICAgICBpZiAoKHggPSBzdHJsZW4oZm4p KSA+IDApIHsKKyAgICAgICAgICAgIGlmICghSVNESVJTRVAoZm5beC0xXSkpCisgICAgICAgICAg ICAgIGZuW3grK10gPSBESVJTRVA7CisgICAgICAgICAgICBmblt4KytdID0gJyonOworICAgICAg ICAgICAgZm5beF0gPSAnXDAnOworICAgICAgICB9CisgICAgfQorICAgIGRlYnVnKEYxMTEsInp4 cGFuZCBmbiAzIGhhdmVvbmVkaXIiLGZuLGhhdmVvbmVkaXIpOworLyoKKyAgVGhlIGZvbGxvd2lu ZyBhbGxvd3MgdXMgdG8gcGFyc2UgYSBzaW5nbGUgZGlyZWN0b3J5IG5hbWUgd2l0aG91dCBvcGVu aW5nCisgIHRoZSBkaXJlY3RvcnkgYW5kIGxvb2tpbmcgYXQgaXRzIGNvbnRlbnRzLiAgVGhlIGRp cmFjdGl2ZSBmbGFnIGlzIGEgaG9ycmlibGUKKyAgaGFjayAoZXNwZWNpYWxseSBzaW5jZSBESVIg L05PUkVDVVJTSVZFIHR1cm5zIGl0IG9mZiksIGJ1dCBvdGhlcndpc2Ugd2UnZAorICBoYXZlIHRv IGNoYW5nZSB0aGUgQVBJLgorKi8KKyAgICBkZWJ1ZyhGMTExLCJ6eHBhbmQgZm4gMyBkaXJhY3Rp dmUiLGZuLGRpcmFjdGl2ZSk7CisgICAgaWYgKCFkaXJhY3RpdmUgJiYgaGF2ZW9uZWRpcikgewor CWZjb3VudCA9IDA7CisJaWYgKCFtdGNocykgeworCSAgICBtdGNocyA9IChjaGFyICoqKW1hbGxv YyhtYXhuYW1lcyAqIHNpemVvZigqbXRjaHMpKTsKKwkgICAgaWYgKCFtdGNocykKKwkgICAgICBy ZXR1cm4obnhwYW5kID0gZmNvdW50KTsKKwl9CisJZmNvdW50ID0gMTsKKwlkZWJ1ZyhGMTEwLCJ6 eHBhbmQgaGF2ZW9uZWRpciBBMSIsZm5hcmcsMCk7CisJaW5pdHNwYWNlKG10Y2hzLHNzcGxlbik7 CisJYWRkcmVzdWx0KGZuYXJnLDEpOworCWlmIChudW1mbmQgPCAwKSByZXR1cm4oLTEpOworCW10 Y2hwdHIgPSBtdGNoczsJCS8qIFNhdmUgcG9pbnRlciBmb3IgbmV4dC4gKi8KKwlkZWJ1ZyhGMTEx LCJ6eHBhbmQgaGF2ZW9uZWRpciBBMiIsKm10Y2hwdHIsbnVtZm5kKTsKKwlyZXR1cm4obnhwYW5k ID0gZmNvdW50KTsKKyAgICB9CisKKyNpZm5kZWYgTk9QVVNICisgICAgaWYgKCFub3B1c2ggJiYg d2lsZHhwYW5kKSAgICAgICAgICAgLyogV2hvIGlzIGV4cGFuZGluZyB3aWxkY2FyZHM/ICovCisg ICAgICBmY291bnQgPSAobXRjaHMgPT0gTlVMTCAmJiAgICAgICAgLyogU2hlbGwgKi8KKyAgICAg ICAgICAgICAgICAobXRjaHMgPSAoY2hhciAqKiltYWxsb2MobWF4bmFtZXMgKiBzaXplb2YoKm10 Y2hzKSkpID09IE5VTEwpCisgICAgICAgID8gMAorICAgICAgICAgIDogIHNoeHBhbmQoZm4sbXRj aHMsbWF4bmFtZXMpOworICAgIGVsc2UKKyNlbmRpZiAvKiBOT1BVU0ggKi8KKyAgICAgIGZjb3Vu dCA9IChtdGNocyA9PSBOVUxMICYmICAgICAgICAvKiBLZXJtaXQgKi8KKyAgICAgICAgICAgICAg ICAobXRjaHMgPSAoY2hhciAqKiltYWxsb2MobWF4bmFtZXMgKiBzaXplb2YoKm10Y2hzKSkpID09 IE5VTEwpCisgICAgICAgID8gMAorICAgICAgICAgIDogZmdlbihmbixtdGNocyxtYXhuYW1lcyk7 ICAgICAgLyogTG9vayB1cCB0aGUgZmlsZS4gKi8KKworICAgIGlmIChmY291bnQgPT0gMCAmJiBo YXZlb25lZGlyKSB7CisJZmNvdW50ID0gMTsKKwlkZWJ1ZyhGMTEwLCJ6eHBhbmQgaGF2ZW9uZWRp ciBCIixmbmFyZywwKTsKKwlhZGRyZXN1bHQoZm5hcmcsMSk7CisJaWYgKG51bWZuZCA8IDApIHJl dHVybigtMSk7CisgICAgfQorICAgIG10Y2hwdHIgPSBtdGNoczsgICAgICAgICAgICAgICAgICAg IC8qIFNhdmUgcG9pbnRlciBmb3IgbmV4dC4gKi8KKyAgICBueHBhbmQgPSBmY291bnQ7CisKKyNp ZmRlZiBERUJVRworICAgIGlmIChkZWJsb2cpIHsKKyAgICAgICAgaWYgKGZjb3VudCA+IDEpCisg ICAgICAgICAgZGVidWcoRjExMSwienhwYW5kIG9rIixtdGNoc1swXSxmY291bnQpOworICAgICAg ICBlbHNlCisgICAgICAgICAgZGVidWcoRjEwMSwienhwYW5kIGZjb3VudCIsIiIsZmNvdW50KTsK KyAgICB9CisjZW5kaWYgLyogREVCVUcgKi8KKyAgICByZXR1cm4oZmNvdW50KTsKK30KKworI2lm bmRlZiBOT05aWFBBTkQKKy8qICBOIFogWCBQIEEgTiBEICAtLSAgRXhwYW5kIGEgZmlsZSBsaXN0 LCB3aXRoIG9wdGlvbnMuICAqLworLyoKKyAgQ2FsbCB3aXRoOgorICAgcyA9IHBvaW50ZXIgdG8g ZmlsZW5hbWUgb3IgcGF0dGVybi4KKyAgIGZsYWdzID0gb3B0aW9uIGJpdHM6CisKKyAgICAgZmxh Z3MgJiBaWF9GSUxPTkxZICAgTWF0Y2ggcmVndWxhciBmaWxlcworICAgICBmbGFncyAmIFpYX0RJ Uk9OTFkgICBNYXRjaCBkaXJlY3RvcmllcworICAgICBmbGFncyAmIFpYX1JFQ1VSU0UgICBEZXNj ZW5kIHRocm91Z2ggZGlyZWN0b3J5IHRyZWUKKyAgICAgZmxhZ3MgJiBaWF9NQVRDSERPVCAgTWF0 Y2ggImRvdCBmaWxlcyIKKyAgICAgZmxhZ3MgJiBaWF9OT0JBQ0tVUCAgRG9uJ3QgbWF0Y2ggImJh Y2t1cCBmaWxlcyIKKyAgICAgZmxhZ3MgJiBaWF9OT0xJTktTICAgRG9uJ3QgZm9sbG93IHN5bWxp bmtzLgorCisgICBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZmlsZXMgdGhhdCBtYXRjaCBzLCB3aXRo IGRhdGEgc3RydWN0dXJlcyBzZXQgdXAKKyAgIHNvIHRoYXQgZmlyc3QgZmlsZSAoaWYgYW55KSB3 aWxsIGJlIHJldHVybmVkIGJ5IHRoZSBuZXh0IHpuZXh0KCkgY2FsbC4KKyovCitpbnQKK256eHBh bmQocyxmbGFncykgY2hhciAqIHM7IGludCBmbGFnczsgeworICAgIGNoYXIgKiBwOworICAgIGlu dCB4OworCisgICAgZGVidWcoRjExMSwibnp4cGFuZCIscyxmbGFncyk7CisgICAgeCA9IGZsYWdz ICYgKFpYX0RJUk9OTFl8WlhfRklMT05MWSk7CisgICAgeGRpcm9ubHkgPSAoeCA9PSBaWF9ESVJP TkxZKTsKKyAgICB4Zmlsb25seSA9ICh4ID09IFpYX0ZJTE9OTFkpOworICAgIGlmICh4ZGlyb25s eSAmJiB4Zmlsb25seSkgeworICAgICAgICB4ZGlyb25seSA9IDA7CisgICAgICAgIHhmaWxvbmx5 ID0gMDsKKyAgICB9CisgICAgeG1hdGNoZG90ICA9IChmbGFncyAmIFpYX01BVENIRE9UKTsKKyAg ICBkZWJ1ZyhGMTExLCJuenhwYW5kIHhtYXRjaGRvdCAxIixzLHhtYXRjaGRvdCk7CisgICAgLyog SWYgeG1hdGNoZG90IG5vdCBzZXQgYnkgY2FsbGVyIGJ1dCBwYXR0ZXJuIGltcGxpZXMgaXQsIHNl dCBpdCBhbnl3YXkgKi8KKyAgICBpZiAoIXhtYXRjaGRvdCAmJiAoKHAgPSBja3N0cmNocihzLCcu JykpKSkgeworCWlmIChwID09IHMgJiYgcFsxXSAhPSAnLycpIHsKKwkgICAgeG1hdGNoZG90ID0g MTsKKwkgICAgZGVidWcoRjExMSwibnp4cGFuZCB4bWF0Y2hkb3QgMiIscyx4bWF0Y2hkb3QpOwor CX0gZWxzZSBpZiAocCA+IHMpIHsKKwkgICAgeG1hdGNoZG90ID0gKCoocC0xKSA9PSAnLCcpIHx8 ICgqKHAtMSkgPT0gJ3snKSB8fCAoKihwLTEpID09ICcvJyk7CisJICAgIGRlYnVnKEYxMTEsIm56 eHBhbmQgeG1hdGNoZG90IDMiLHMseG1hdGNoZG90KTsKKwl9CisgICAgfQorICAgIHhyZWN1cnNp dmUgPSAoZmxhZ3MgJiBaWF9SRUNVUlNFKTsKKyAgICB4bm9iYWNrdXAgID0gKGZsYWdzICYgWlhf Tk9CQUNLVVApOworICAgIHhub2xpbmtzICAgPSAoZmxhZ3MgJiBaWF9OT0xJTktTKTsKKworI2lm ZGVmIERFQlVHCisgICAgaWYgKGRlYmxvZykgeworCWRlYnVnKEYxMDEsIm56eHBhbmQgeGRpcm9u bHkiLCIiLHhkaXJvbmx5KTsKKwlkZWJ1ZyhGMTAxLCJuenhwYW5kIHhmaWxvbmx5IiwiIix4Zmls b25seSk7CisJZGVidWcoRjEwMSwibnp4cGFuZCB4bWF0Y2hkb3QiLCIiLHhtYXRjaGRvdCk7CisJ ZGVidWcoRjEwMSwibnp4cGFuZCB4cmVjdXJzaXZlIiwiIix4cmVjdXJzaXZlKTsKKwlkZWJ1ZyhG MTAxLCJuenhwYW5kIHhub2JhY2t1cCIsIiIseG5vYmFja3VwKTsKKwlkZWJ1ZyhGMTAxLCJuenhw YW5kIHhub2xpbmtzIiwiIix4bm9saW5rcyk7CisgICAgfQorI2VuZGlmIC8qIERFQlVHICovCisK KyAgICB4ID0genhwYW5kKHMpOworICAgIGlmICh4ID4gMSkKKyAgICAgIHNoX3NvcnQobXRjaHMs TlVMTCx4LDAsMCwxKTsJLyogQWxwaGFiZXRpemUgdGhlIGxpc3QgKi8KKyAgICB4ZGlyb25seSA9 IDA7CisgICAgeGZpbG9ubHkgPSAwOworICAgIHhtYXRjaGRvdCA9IDA7CisgICAgeHJlY3Vyc2l2 ZSA9IDA7CisgICAgeG5vYmFja3VwID0gMDsKKyAgICB4bm9saW5rcyA9IDA7CisgICAgcmV0dXJu KHgpOworfQorI2VuZGlmIC8qIE5PTlpYUEFORCAqLworCisjaWZuZGVmIE5PWlhSRVdJTkQKKy8q ICBaIFggUiBFIFcgSSBOIEQgIC0tICBSZXdpbmRzIHRoZSB6eHBhbmQoKSBsaXN0ICovCisKK2lu dAorenhyZXdpbmQoKSB7CisgICAgLyogaWYgKCFtdGNocykgcmV0dXJuKC0xKTsgKi8KKyAgICBm Y291bnQgPSBueHBhbmQ7CisgICAgbXRjaHB0ciA9IG10Y2hzOworICAgIHJldHVybihueHBhbmQp OworfQorI2VuZGlmIC8qIE5PWlhSRVdJTkQgKi8KKworLyogIFogTiBFIFggVCAgLS0gIEdldCBu YW1lIG9mIG5leHQgZmlsZSBmcm9tIGxpc3QgY3JlYXRlZCBieSB6eHBhbmQoKS4gKi8KKy8qCisg IFJldHVybnMgPjAgaWYgdGhlcmUncyBhbm90aGVyIGZpbGUsIHdpdGggaXRzIG5hbWUgY29waWVk IGludG8gdGhlIGFyZyBzdHJpbmcsCisgIG9yIDAgaWYgbm8gbW9yZSBmaWxlcyBpbiBsaXN0Lgor Ki8KK2ludAorem5leHQoZm4pIGNoYXIgKmZuOyB7CisgICAgaWYgKGZjb3VudC0tID4gMCkgewor ICAgICAgICBja3N0cm5jcHkoZm4sKm10Y2hwdHIrKyxDS01BWFBBVEgpOworICAgIH0gZWxzZSB7 CisgICAgICAgIGZuWzBdID0gJ1wwJzsKKyAgICB9CisjaWZuZGVmIENPTU1FTlQKKyAgICBkZWJ1 ZyhGMTExLCJ6bmV4dCIsZm4sZmNvdW50KzEpOworICAgIHJldHVybihmY291bnQrMSk7CisjZWxz ZQorICAgIGRlYnVnKEYxMTEsInpuZXh0IixmbixmY291bnQpOyAgICAgIC8qIFJldHVybiAwIGlm IG5vIGZpbGVuYW1lIHRvIHJldHVybiAqLworICAgIHJldHVybihmY291bnQpOworI2VuZGlmIC8q IENPTU1FTlQgKi8KK30KKworLyogIFogQyBIIEsgUyBQIEEgIC0tICBDaGVjayBpZiB0aGVyZSBp cyBlbm91Z2ggc3BhY2UgdG8gc3RvcmUgdGhlIGZpbGUgICovCisKKy8qCisgQ2FsbCB3aXRoIGZp bGUgc3BlY2lmaWNhdGlvbiBmLCBzaXplIG4gaW4gYnl0ZXMuCisgUmV0dXJucyAtMSBvbiBlcnJv ciwgMCBpZiBub3QgZW5vdWdoIHNwYWNlLCAxIGlmIGVub3VnaCBzcGFjZS4KKyovCisvKkFSR1NV U0VEKi8KK2ludAorI2lmZGVmIENLX0FOU0lDCit6Y2hrc3BhKGNoYXIgKmYsIENLX09GRl9UIG4p CisjZWxzZQoremNoa3NwYShmLG4pIGNoYXIgKmY7IENLX09GRl9UIG47CisjZW5kaWYgLyogQ0tf QU5TSUMgKi8KKy8qIHpjaGtzcGEoKSAqLyB7CisgICAgLyogSW4gVU5JWCB0aGVyZSBpcyBubyBn b29kIChhbmQgcG9ydGFibGUpIHdheS4gKi8KKyAgICByZXR1cm4oMSk7ICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBBbHdheXMgc2F5IE9LLiAqLworfQorCisjaWZkZWYgQ09NTUVOVAkJCQkv KiAobm90IHVzZWQpICovCisKKy8qICBJIFMgQiBBIEMgSyBVIFAgIC0tICBUZWxscyBpZiBnaXZl biBmaWxlIGhhcyBhIGJhY2t1cCBzdWZmaXggICovCisvKgorICAgUmV0dXJuczoKKyAgIC0xOiBJ bnZhbGlkIGFyZ3VtZW50CisgICAgMDogRmlsZSBkb2VzIG5vdCBoYXZlIGEgYmFja3VwIHN1ZmZp eAorICAgPjA6IEJhY2t1cCBzdWZmaXggbnVtYmVyCisqLworaW50Citpc2JhY2t1cChmbikgY2hh ciAqIGZuOyB7CQkvKiBHZXQgYmFja3VwIHN1ZmZpeCBudW1iZXIgKi8KKyAgICBpbnQgaSwgaiwg aywgeCwgc3RhdGUsIGZsYWc7CisKKyAgICBpZiAoIWZuKQkJCQkvKiBXYXRjaCBvdXQgZm9yIG51 bGwgcG9pbnRlcnMuICovCisgICAgICByZXR1cm4oLTEpOworICAgIGlmICghKmZuKQkJCQkvKiBB bmQgZW1wdHkgbmFtZXMuICovCisgICAgICByZXR1cm4oLTEpOworCisgICAgZmxhZyA9IHN0YXRl ID0gMDsKKyAgICBmb3IgKGkgPSAoaW50KXN0cmxlbihmbikgLSAxOyAoIWZsYWcgJiYgKGkgPiAw KSk7IGktLSkgeworCXN3aXRjaCAoc3RhdGUpIHsKKwkgIGNhc2UgMDoJCQkvKiBTdGF0ZSAwIC0g ZmluYWwgY2hhciAqLworCSAgICBpZiAoZm5baV0gPT0gJ34nKQkJLyogSXMgdGlsZGUgKi8KKwkg ICAgICBzdGF0ZSA9IDE7CQkvKiBTd2l0Y2ggdG8gbmV4dCBzdGF0ZSAqLworCSAgICBlbHNlCQkJ LyogT3RoZXJ3aXNlICovCisJICAgICAgZmxhZyA9IDE7CQkJLyogUXVpdCAtIG5vIGJhY2t1cCBz dWZmaXguICovCisJICAgIGJyZWFrOworCSAgY2FzZSAxOgkJCS8qIFN0YXRlIDEgLSBkaWdpdHMg Ki8KKwkgICAgaWYgKGZuW2ldID09ICd+JyAgJiYgZm5baS0xXSA9PSAnLicpIHsgLyogSGF2ZSBz dWZmaXggKi8KKwkJcmV0dXJuKGF0b2koJmZuW2krMV0pKTsKKwkgICAgfSBlbHNlIGlmIChmbltp XSA+PSAnMCcgJiYgZm5baV0gPD0gJzknKSB7IC8qIEluIG51bWJlciBwYXJ0ICovCisJCWNvbnRp bnVlOwkJLyogS2VlcCBnb2luZyAqLworCSAgICB9IGVsc2UgewkJCS8qIFNvbWV0aGluZyBlbHNl ICovCisJCWZsYWcgPSAxOwkJLyogTm90IGEgYmFja3VwIHN1ZmZpeCAtIHF1aXQuICovCisJICAg IH0KKwkgICAgYnJlYWs7CisJfQorICAgIH0KKyAgICByZXR1cm4oMCk7Cit9CisjZW5kaWYgLyog Q09NTUVOVCAqLworCisKKy8qICBaIE4gRSBXIE4gIC0tICBNYWtlIGEgbmV3IG5hbWUgZm9yIHRo ZSBnaXZlbiBmaWxlICAqLworCisvKgorICBHaXZlbiB0aGUgbmFtZSwgZm4sIG9mIGEgZmlsZSB0 aGF0IGFscmVhZHkgZXhpc3RzLCB0aGlzIGZ1bmN0aW9uIGJ1aWxkcyBhCisgIG5ldyBuYW1lIG9m IHRoZSBmb3JtICI8b2xkbmFtZT4ufjxuPn4iLCB3aGVyZSA8b2xkbmFtZT4gaXMgYXJndW1lbnQg bmFtZQorICAoZm4pLCBhbmQgPG4+IGlzIGEgdmVyc2lvbiBudW1iZXIsIG9uZSBoaWdoZXIgdGhh biBhbnkgZXhpc3RpbmcgdmVyc2lvbgorICBudW1iZXIgZm9yIHRoYXQgZmlsZSwgdXAgdG8gOTk5 OTkuICBUaGlzIGZvcm1hdCBpcyBjb25zaXN0ZW50IHdpdGggdGhhdCB1c2VkCisgIGJ5IEdOVSBF TUFDUy4gIElmIHRoZSBjb25zdHJ1Y3RlZCBuYW1lIGlzIHRvbyBsb25nIGZvciB0aGUgc3lzdGVt J3MgbWF4aW11bSwKKyAgZW5vdWdoIGNoYXJhY3RlcnMgYXJlIHRydW5jYXRlZCBmcm9tIHRoZSBl bmQgb2YgPGZuPiB0byBhbGxvdyB0aGUgdmVyc2lvbgorICBudW1iZXIgdG8gZml0LiAgSWYgbm8g ZnJlZSB2ZXJzaW9uIG51bWJlcnMgZXhpc3QgYmV0d2VlbiAxIGFuZCA5OTk5OSwgYQorICB2ZXJz aW9uIG51bWJlciBvZiAieHh4eCIgaXMgdXNlZC4gIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBu ZXcgbmFtZSBpbgorICBhcmd1bWVudCBzLgorKi8KKyNpZmRlZiBwZHAxMQorI2RlZmluZSBaTkVX TkJMIDYzICAgICAgICAgICAgICAgICAgICAgIC8qIE5hbWUgYnVmZmVyIGxlbmd0aCAqLworI2Rl ZmluZSBaTkVXTk1EIDMgICAgICAgICAgICAgICAgICAgICAgIC8qIE1heCBkaWdpdHMgZm9yIHZl cnNpb24gbnVtYmVyICovCisjZWxzZQorI2RlZmluZSBaTkVXTkJMIENLTUFYUEFUSAorI2RlZmlu ZSBaTkVXTk1EIDQKKyNlbmRpZiAvKiBwZHAxMSAqLworCisjZGVmaW5lIE1BWEJVRElHSVRTIDUK Kworc3RhdGljIGNoYXIgem5ld2J1ZltaTkVXTkJMKzEyXTsKKworVk9JRAorem5ld24oZm4scykg Y2hhciAqZm4sICoqczsgeworICAgIGNoYXIgKiBidWY7CQkJCS8qIFBvaW50ZXIgdG8gYnVmZmVy IGZvciBuZXcgbmFtZSAqLworICAgIGNoYXIgKiB4cCwgKiBuYW1lcGFydCA9IE5VTEw7ICAgICAg IC8qIFBvaW50ZXIgdG8gZmlsZW5hbWUgcGFydCAqLworICAgIHN0cnVjdCB6Zm5mcCAqIGZuZnA7 ICAgICAgICAgICAgICAgIC8qIHpuZnFmcCgpIHJlc3VsdCBzdHJ1Y3QgcG9pbnRlciAqLworICAg IGludCBkID0gMCwgdCwgZm5sZW4sIGJ1ZmxlbjsKKyAgICBpbnQgbiwgaSwgaywgZmxhZywgc3Rh dGU7CisgICAgaW50IG1heCA9IE1BWE5BTUxFTjsgICAgICAgICAgICAgICAgLyogTWF4aW11bSBu YW1lIGxlbmd0aCAqLworICAgIGNoYXIgKiBkbmFtZSA9IE5VTEw7CisKKyAgICBidWYgPSB6bmV3 YnVmOworICAgICpzID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEluaXRpYWxp emUgcmV0dXJuIHZhbHVlICovCisgICAgaWYgKCFmbikgZm4gPSAiIjsgICAgICAgICAgICAgICAg ICAgLyogQ2hlY2sgZmlsZW5hbWUgYXJndW1lbnQgKi8KKyAgICBpID0gc3RybGVuKGZuKTsKKwor LyogSWYgaW5jb21pbmcgZmlsZSBhbHJlYWR5IGhhcyBhIGJhY2t1cCBzdWZmaXgsIHJlbW92ZSBp dC4gKi8KKy8qIFRoZW4gd2UnbGwgdGFjayBhIG5ldyBvbiBsYXRlciwgd2hpY2ggd2lsbCBiZSB0 aGUgaGlnaGVzdCBmb3IgdGhpcyBmaWxlLiAqLworCisgICAgaWYgKGkgPD0gbWF4ICYmIGkgPiAw ICYmIGZuW2ktMV0gPT0gJ34nKSB7CisJY2hhciAqIHA7CisJaS0tOworCWRlYnVnKEYxMTEsInpu ZXduIHN1ZmZpeCByZW1vdmFsIixmbixpKTsKKwlpZiAoKGRuYW1lID0gKGNoYXIgKiltYWxsb2Mo aSsxKSkpIHsKKwkgICAgY2tzdHJuY3B5KGRuYW1lLGZuLGkrMSk7CisJICAgIHAgPSBkbmFtZTsK KwkgICAgZm9yIChmbGFnID0gc3RhdGUgPSAwOyAoIWZsYWcgJiYgKGkgPiAwKSk7IGktLSkgewor CQlzd2l0Y2ggKHN0YXRlKSB7CisJCSAgY2FzZSAwOgkJLyogU3RhdGUgMCAtIGZpbmFsIGNoYXIg Ki8KKwkJICAgIGlmIChwW2ldID09ICd+JykJLyogSXMgdGlsZGUgKi8KKwkJICAgICAgc3RhdGUg PSAxOwkvKiBTd2l0Y2ggdG8gbmV4dCBzdGF0ZSAqLworCQkgICAgZWxzZQkJLyogT3RoZXJ3aXNl ICovCisJCSAgICAgIGZsYWcgPSAxOwkJLyogUXVpdCAtIG5vIGJhY2t1cCBzdWZmaXguICovCisJ CSAgICBicmVhazsKKwkJICBjYXNlIDE6CQkvKiBTdGF0ZSAxIC0gZGlnaXRzICovCisJCSAgICBp ZiAocFtpXSA9PSAnficgICYmIHBbaS0xXSA9PSAnLicpIHsgLyogSGF2ZSBzdWZmaXggKi8KKwkJ CXBbaS0xXSA9IE5VTDsJLyogVHJpbSBpdCAqLworCQkJZm4gPSBkbmFtZTsKKwkJCWRlYnVnKEYx MTEsInpuZXduIHN1ZmZpeCByZW1vdmFsIDIiLGZuLGkpOworCQkJZmxhZyA9IDE7CS8qIGRvbmUg Ki8KKwkJICAgIH0gZWxzZSBpZiAocFtpXSA+PSAnMCcgJiYgcFtpXSA8PSAnOScpIHsgLyogTnVt YmVyIHBhcnQgKi8KKwkJCWNvbnRpbnVlOwkvKiBLZWVwIGdvaW5nICovCisJCSAgICB9IGVsc2Ug ewkJLyogU29tZXRoaW5nIGVsc2UgKi8KKwkJCWZsYWcgPSAxOwkvKiBOb3QgYSBiYWNrdXAgc3Vm Zml4IC0gcXVpdC4gKi8KKwkJICAgIH0KKwkJICAgIGJyZWFrOworCQl9CisJICAgIH0KKwl9Cisg ICAgfQorICAgIGlmICgoZm5sZW4gPSBzdHJsZW4oZm4pKSA8IDEpIHsJLyogR2V0IGxlbmd0aCAq LworCWlmIChkbmFtZSkgZnJlZShkbmFtZSk7CisJcmV0dXJuOworICAgIH0KKyAgICBkZWJ1ZyhG MTExLCJ6bmV3biIsZm4sZm5sZW4pOworCisgICAgZGVidWcoRjEwMSwiem5ld24gbWF4IDEiLCIi LG1heCk7CisgICAgaWYgKG1heCA8IDE0KSBtYXggPSAxNDsgICAgICAgICAgICAgLyogTWFrZSBt YXggcmVhc29uYWJsZSBmb3IgYW55IFVOSVggKi8KKyAgICBpZiAobWF4ID4gWk5FV05CTCkgbWF4 ID0gWk5FV05CTDsKKyAgICBkZWJ1ZyhGMTAxLCJ6bmV3biBtYXggMiIsIiIsbWF4KTsKKworICAg IGlmICgoZm5mcCA9IHpmbnFmcChmbiwgWk5FV05CTCwgYnVmKSkpIHsgLyogR2V0IGZ1bGx5IHF1 YWxpZmllZCBuYW1lICovCisgICAgICAgIG5hbWVwYXJ0ID0gZm5mcC0+Zm5hbWU7ICAgICAgICAg LyogSXNvbGF0ZSB0aGUgZmlsZW5hbWUgKi8KKyAgICAgICAgayA9IHN0cmxlbihmbik7ICAgICAg ICAgICAgICAgICAvKiBMZW5ndGggb2YgbmFtZSBwYXJ0ICovCisgICAgICAgIGRlYnVnKEYxMTEs InpuZXduIG5hbWVwYXJ0IixuYW1lcGFydCxrKTsKKyAgICB9IGVsc2UgeworCWlmIChkbmFtZSkg ZnJlZShkbmFtZSk7CisJcmV0dXJuOworICAgIH0KKyAgICBidWZsZW4gPSBmbmZwLT5sZW47ICAg ICAgICAgICAgICAgICAvKiBMZW5ndGggb2YgZnVsbHkgcXVhbGlmaWVkIG5hbWUgKi8KKyAgICBk ZWJ1ZyhGMTExLCJ6bmV3biBsZW4iLGJ1ZixidWZsZW4pOworCisgICAgaWYgKGsgKyBNQVhCVURJ R0lUUyArIDMgPCBtYXgpIHsgICAgLyogQmFja3VwIG5hbWUgZml0cyAtIG5vIG92ZXJmbG93ICov CisJLyogTWFrZSBwYXR0ZXJuIGZvciBiYWNrdXAgbmFtZXMgKi8KKyAgICAgICAgY2tzdHJuY3B5 KGJ1ZitidWZsZW4sIi5+Kn4iLFpORVdOQkwrMTItYnVmbGVuKTsKKyAgICAgICAgbiA9IG56eHBh bmQoYnVmLFpYX0ZJTE9OTFkpOyAgICAvKiBFeHBhbmQgdGhlIHBhdHRlcm4gKi8KKyAgICAgICAg ZGVidWcoRjExMSwiem5ld24gQSBtYXRjaGVzIixidWYsbik7CisgICAgICAgIHdoaWxlIChuLS0g PiAwKSB7ICAgICAgICAgICAgICAgLyogRmluZCBhbnkgZXhpc3RpbmcgbmFtZS5+bn4gZmlsZXMg Ki8KKyAgICAgICAgICAgIHhwID0gKm10Y2hwdHIrKzsgICAgICAgICAgICAvKiBQb2ludCBhdCBt YXRjaGluZyBuYW1lICovCisgICAgICAgICAgICB0ID0gYXRvaSh4cCtidWZsZW4rMik7ICAgICAg LyogR2V0IG51bWJlciAqLworICAgICAgICAgICAgaWYgKHQgPiBkKSBkID0gdDsgICAgICAgICAg IC8qIFNhdmUgZCA9IGhpZ2hlc3QgdmVyc2lvbiBudW1iZXIgKi8KKyAgICAgICAgfQorICAgICAg ICBzcHJpbnRmKGJ1ZitidWZsZW4sIi5+JWR+IixkKzEpOyAvKiBZZXMsIG1ha2UgIm5hbWUufjxk KzE+fiIgKi8KKyAgICAgICAgZGVidWcoRjExMCwiem5ld24gQSBuZXduYW1lIixidWYsMCk7Cisg ICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQmFja3VwIG5hbWUgd291 bGQgYmUgdG9vIGxvbmcgKi8KKyAgICAgICAgaW50IHhsZW47ICAgICAgICAgICAgICAgICAgICAg ICAvKiBTbyB3ZSBoYXZlIHRvIGVhdCBiYWNrIGludG8gaXQgKi8KKyAgICAgICAgaW50IGRlbHRh OworICAgICAgICBjaGFyIGJ1ZjJbWk5FV05CTCsxMl07CisKKyAgICAgICAgZGVsdGEgPSBtYXgg LSBrOworICAgICAgICBkZWJ1ZyhGMTAxLCJ6bmV3biBCIGRlbHRhIiwiIixkZWx0YSk7CisKKyAg ICAgICAgZm9yIChpID0gTUFYQlVESUdJVFM7IGkgPiAwOyBpLS0pIHsgLyogSW4gdGhpcyBjYXNl IHRoZSBmb3JtYXQgb2YgKi8KKyAgICAgICAgICAgIGNrc3RybmNweShidWYyLGJ1ZixaTkVXTkJM KzEyKTsgLyogdGhlIGJhY2t1cCBuYW1lIGRlcGVuZHMgb24gKi8KKyAgICAgICAgICAgIHhsZW4g PSBidWZsZW4gLSBpIC0gMyArIGRlbHRhOyAgLyogaG93IG1hbnkgZGlnaXRzIGFyZSBpbiB0aGUg Ki8KKyAgICAgICAgICAgIGNrc3RybmNweShidWYyK3hsZW4sIi5+Kn4iLFpORVdOQkwrMTIteGxl bik7IC8qIGJhY2t1cCBudW1iZXIgKi8KKyAgICAgICAgICAgIG4gPSBuenhwYW5kKGJ1ZjIsWlhf RklMT05MWSk7CisgICAgICAgICAgICBkZWJ1ZyhGMTExLCJ6bmV3biBCIG1hdGNoZXMiLGJ1ZjIs bik7CisgICAgICAgICAgICBpZiAobiA+IDApCisgICAgICAgICAgICAgIGJyZWFrOworICAgICAg ICB9CisgICAgICAgIHdoaWxlIChuLS0gPiAwKSB7ICAgICAgICAgICAgICAgLyogRmluZCBhbnkg ZXhpc3RpbmcgbmFtZS5+bn4gZmlsZXMgKi8KKyAgICAgICAgICAgIHhwID0gKm10Y2hwdHIrKzsg ICAgICAgICAgICAvKiBQb2ludCBhdCBtYXRjaGluZyBuYW1lICovCisgICAgICAgICAgICB0ID0g YXRvaSh4cCt4bGVuKzIpOyAgICAgICAgLyogR2V0IG51bWJlciAqLworICAgICAgICAgICAgaWYg KHQgPiBkKSBkID0gdDsgICAgICAgICAgIC8qIFNhdmUgZCA9IGhpZ2hlc3QgdmVyc2lvbiBudW1i ZXIgKi8KKyAgICAgICAgfQorICAgICAgICBpZiAoZCA+IDApICAgICAgICAgICAgICAgICAgICAg IC8qIElmIHRoZSBvZG9tZXRlciB0dXJuZWQgb3Zlci4uLiAqLworICAgICAgICAgIGlmICgoZCAl IDEwKSA9PSA5KSAgICAgICAgICAgIC8qIGJhY2sgdXAgb25lIHNwYWNlLiAqLworICAgICAgICAg ICAgeGxlbi0tOworICAgICAgICBzcHJpbnRmKGJ1ZjIreGxlbiwiLn4lZH4iLGQrMSk7IC8qIFRo aXMganVzdCBmaXRzICovCisgICAgICAgIGNrc3RybmNweShidWYsYnVmMixaTkVXTkJMKzEyKTsJ LyogKHdlIGNvdWxkIGJlIG1vcmUgY2xldmVyIGhlcmUuLi4pICovCisgICAgICAgIGRlYnVnKEYx MTAsInpuZXduIEIgbmV3IG5hbWUiLGJ1ZiwwKTsKKyAgICB9CisgICAgKnMgPSBidWY7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogUG9pbnQgdG8gbmV3IG5hbWUgKi8KKyAgICBja196bmV3 biA9IGQrMTsgICAgICAgICAgICAgICAgICAgICAvKiBBbHNvIG1ha2UgaXQgYXZhaWxhYmxlIGds b2JhbGx5ICovCisgICAgaWYgKGRuYW1lKSBmcmVlKGRuYW1lKTsKKyAgICByZXR1cm47Cit9CisK Ky8qICBaIFIgRSBOIEEgTSBFICAtLSAgUmVuYW1lIGEgZmlsZSAgKi8KKy8qCisgICBDYWxsIHdp dGggb2xkIGFuZCBuZXcgbmFtZXMuCisgICBJZiBuZXcgbmFtZSBpcyB0aGUgbmFtZSBvZiBhIGRp cmVjdG9yeSwgdGhlICdvbGQnIGZpbGUgaXMgbW92ZWQgdG8KKyAgIHRoYXQgZGlyZWN0b3J5Lgor ICAgUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGZhaWx1cmUuCisqLworaW50Cit6cmVuYW1l KG9sZCxuZXcpIGNoYXIgKm9sZCwgKm5ldzsgeworICAgIGNoYXIgKnAsICpzOworICAgIGludCB4 OworCisgICAgaWYgKCFvbGQpIG9sZCA9ICIiOworICAgIGlmICghbmV3KSBuZXcgPSAiIjsKKyAg ICBkZWJ1ZyhGMTEwLCJ6cmVuYW1lIG9sZCIsb2xkLDApOworICAgIGRlYnVnKEYxMTAsInpyZW5h bWUgbmV3IixuZXcsMCk7CisgICAgaWYgKCEqb2xkKSByZXR1cm4oLTEpOworICAgIGlmICghKm5l dykgcmV0dXJuKC0xKTsKKworI2lmZGVmIElLU0QKKyNpZmRlZiBDS19MT0dJTgorICAgIGlmIChp bnNlcnZlciAmJiBpc2d1ZXN0KQorICAgICAgcmV0dXJuKC0xKTsKKyNlbmRpZiAvKiBDS19MT0dJ TiAqLworI2VuZGlmIC8qIElLU0QgKi8KKworI2lmZGVmIENLUk9PVAorICAgIGRlYnVnKEYxMTEs InpyZW5hbWUgc2V0cm9vdCIsY2tyb290LGNrcm9vdHNldCk7CisgICAgaWYgKGNrcm9vdHNldCkg eworCWlmICghemlucm9vdChvbGQpKSB7CisJICAgIGRlYnVnKEYxMTAsInpyZW5hbWUgb2xkOiBz ZXRyb290IHZpb2xhdGlvbiIsb2xkLDApOworCSAgICByZXR1cm4oLTEpOworCX0KKwlpZiAoIXpp bnJvb3QobmV3KSkgeworCSAgICBkZWJ1ZyhGMTEwLCJ6cmVuYW1lIG5ldzogc2V0cm9vdCB2aW9s YXRpb24iLG5ldywwKTsKKwkgICAgcmV0dXJuKC0xKTsKKwl9CisgICAgfQorI2VuZGlmIC8qIENL Uk9PVCAqLworCisgICAgcCA9IE5VTEw7CisgICAgcyA9IG5ldzsKKworICAgIGlmIChpc2Rpcihu ZXcpKSB7CisgICAgICAgIGNoYXIgKnEgPSBOVUxMOworICAgICAgICB4ID0gc3RybGVuKG5ldyk7 CisgICAgICAgIGlmICghKHAgPSBtYWxsb2Moc3RybGVuKG5ldykgKyBzdHJsZW4ob2xkKSArIDIp KSkKKyAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICBzdHJjcHkocCxuZXcpOyAgICAgICAg ICAgICAgICAgIC8qIChzYWZlKSBEaXJlY3RvcnkgcGFydCAqLworICAgICAgICBpZiAoIUlTRElS U0VQKCoobmV3K3gtMSkpKSAgICAgIC8qIFNlcGFyYXRvciwgaWYgbmVlZGVkICovCisgICAgICAg ICAgc3RyY2F0KHAsIi8iKTsJCS8qIChzYWZlKSAqLworICAgICAgICB6c3RyaXAob2xkLCZxKTsg ICAgICAgICAgICAgICAgIC8qIFN0cmlwIHBhdGggcGFydCBmcm9tIG9sZCBuYW1lICovCisgICAg ICAgIHN0cmNhdChwLHEpOyAgICAgICAgICAgICAgICAgICAgLyogY2F0IHRvIG5ldyBkaXJlY3Rv cnkgKHNhZmUpICovCisgICAgICAgIHMgPSBwOworICAgICAgICBkZWJ1ZyhGMTEwLCJ6cmVuYW1l IGRpciIscywwKTsKKyAgICB9CisjaWZkZWYgREVCVUcKKyAgICBlbHNlIGRlYnVnKEYxMTAsInpy ZW5hbWUgbm8gZGlyIixzLDApOworI2VuZGlmIC8qIERFQlVHICovCisKKyNpZmRlZiBJS1NECisg ICAgaWYgKGluc2VydmVyICYmICghRU5BQkxFRChlbl9kZWwpKSkgeworCWlmICh6Y2hraShzKSA+ IC0xKQkJLyogRGVzdGluYXRpb24gZmlsZSBleGlzdHM/ICovCisJICByZXR1cm4oLTEpOworICAg IH0KKyNlbmRpZiAvKiBJS1NEICovCisKKyAgICB4ID0gLTE7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBSZXR1cm4gY29kZS4gKi8KKyNpZmRlZiBSRU5BTUUKKy8qIEF0b21pYywgcHJl ZmVycmVkLCB1c2VzIGEgc2luZ2xlIHN5c3RlbSBjYWxsLCByZW5hbWUoKSwgaWYgYXZhaWxhYmxl LiAqLworICAgIHggPSByZW5hbWUob2xkLHMpOworICAgIGRlYnVnKEYxMTEsInpyZW5hbWUgcmVu YW1lKCkiLG9sZCx4KTsKKyAgICBpZiAoeCkgeCA9IC0xOworI2VuZGlmIC8qIFJFTkFNRSAqLwor CisgICAgLyogSWYgcmVuYW1lKCkgZmFpbGVkIG9yIG5vdCBhdmFpbGFibGUgdHJ5IGxpbmsoKS91 bmxpbmsoKSAqLworCisgICAgaWYgKHggPCAwKSB7CisJaWYgKHpjaGtvKG9sZCkgPiAtMSkgewkJ LyogUmVxdWlyZXMgd3JpdGUgYWNjZXNzIHRvIG9yaWduYWwgKi8KKwkgICAgeCA9IGxpbmsob2xk LHMpOworCSAgICBkZWJ1ZyhGMTExLCJ6cmVuYW1lIGxpbmsoKSIsb2xkLHgpOworCSAgICBpZiAo eCA+IC0xKSB7CQkvKiBNYWtlIGEgbGluayB3aXRoIHRoZSBuZXcgbmFtZS4gKi8KKwkJeCA9IHVu bGluayhvbGQpOworCQlkZWJ1ZyhGMTExLCJ6cmVuYW1lIHVubGluaygpIixvbGQseCk7CisJICAg IH0KKwkgICAgLyogSWYgbGluay91bmxpbmsgZmFpbGVkIGNvcHkgYW5kIGRlbGV0ZSAqLworCSAg ICBpZiAoeCA8IDApIHsKKwkJeCA9IHpjb3B5KG9sZCxzKTsKKwkJZGVidWcoRjExMSwienJlbmFt ZSB6Y29weSgpIixvbGQseCk7CisJCWlmICh4ID4gLTEpIHsKKwkJICAgIHggPSB6ZGVsZXQob2xk KTsKKwkJICAgIGRlYnVnKEYxMTEsInpyZW5hbWUgemRlbGV0KCkiLG9sZCx4KTsKKwkJfQorCSAg ICB9CisJfQorICAgIH0KKyAgICBmdWxsbmFtZVswXSA9ICdcMCc7CQkJLyogQ2xlYXIgdGhpcyBv dXQgZm9yIG5leHQgdGltZS4gKi8KKworI2lmZGVmIENLU1lTTE9HCisgICAgaWYgKGNreHN5c2xv ZyA+PSBTWVNMR19GQyAmJiBja3hsb2dnaW5nKSB7CisgICAgICAgIHpmbnFmcChvbGQsQ0tNQVhQ QVRILGZ1bGxuYW1lKTsKKyAgICAgICAgdG1wMlswXSA9ICdcMCc7CisgICAgICAgIHpmbnFmcChz LENLTUFYUEFUSCx0bXAyKTsKKyAgICAgICAgaWYgKHggPiAtMSkKKyAgICAgICAgICBzeXNsb2co TE9HX0lORk8sImZpbGVbXSAlczogcmVuYW1lZCB0byAlcyBvayIsIGZ1bGxuYW1lLCB0bXAyKTsK KyAgICAgICAgZWxzZQorICAgICAgICAgIHN5c2xvZyhMT0dfSU5GTywiZmlsZVtdICVzOiByZW5h bWUgdG8gJXMgZmFpbGVkICglbSkiLGZ1bGxuYW1lLHRtcDIpOworICAgIH0KKyNlbmRpZiAvKiBD S1NZU0xPRyAqLworCisgICAgaWYgKHApIGZyZWUocCk7CisgICAgcmV0dXJuKHgpOworfQorCisv KiAgWiBDIE8gUCBZICAtLSAgQ29weSBhIHNpbmdsZSBmaWxlLiAqLworLyoKKyAgQ2FsbCB3aXRo IHNvdXJjZSBhbmQgZGVzdGluYXRpb24gbmFtZXMuCisgIElmIGRlc3RpbmF0aW9uIGlzIGEgZGly ZWN0b3J5LCB0aGUgc291cmNlIGZpbGUgaXMKKyAgY29waWVkIHRvIHRoYXQgZGlyZWN0b3J5IHdp dGggaXRzIG9yaWdpbmFsIG5hbWUuCisgIFJldHVybnM6CisgICAwIG9uIHN1Y2Nlc3MuCisgIDww IG9uIGZhaWx1cmU6CisgIC0yID0gc291cmNlIGZpbGUgaXMgbm90IGEgcmVndWxhciBmaWxlLgor ICAtMyA9IHNvdXJjZSBmaWxlIG5vdCBmb3VuZC4KKyAgLTQgPSBwZXJtaXNzaW9uIGRlbmllZC4K KyAgLTUgPSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFyZSB0aGUgc2FtZSBmaWxlLgorICAtNiA9 IGkvbyBlcnJvci4KKyAgLTEgPSBvdGhlciBlcnJvci4KKyovCitpbnQKK3pjb3B5KHNvdXJjZSxk ZXN0aW5hdGlvbikgY2hhciAqc291cmNlLCAqZGVzdGluYXRpb247IHsKKyAgICBjaGFyICpzcmMs ICpkc3Q7CQkJLyogTG9jYWwgcG9pbnRlcnMgdG8gZmlsZW5hbWVzICovCisgICAgaW50IHgsIHks IHJjOyAgICAgICAgICAgICAgICAgICAgICAgLyogV29ya2VycyAqLworICAgIGludCBpbiA9IC0x LCBvdXQgPSAtMTsgICAgICAgICAgICAgIC8qIGkvbyBmaWxlIGRlc2NyaXB0b3JzICovCisgICAg c3RydWN0IHN0YXQgc3JjYnVmOyAgICAgICAgICAgICAgICAgLyogU291cmNlIGZpbGUgaW5mbyBi dWZmZXIgKi8KKyAgICBpbnQgcGVybXM7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBPdXRw dXQgZmlsZSBwZXJtaXNzaW9ucyAqLworICAgIGNoYXIgYnVmWzEwMjRdOyAgICAgICAgICAgICAg ICAgICAgIC8qIEZpbGUgY29weWluZyBidWZmZXIgKi8KKworICAgIGlmICghc291cmNlKSBzb3Vy Y2UgPSAiIjsKKyAgICBpZiAoIWRlc3RpbmF0aW9uKSBkZXN0aW5hdGlvbiA9ICIiOworCisgICAg ZGVidWcoRjExMCwiemNvcHkgc3JjIGFyZyIsc291cmNlLDApOworICAgIGRlYnVnKEYxMTAsInpj b3B5IGRzdCBhcmciLGRlc3RpbmF0aW9uLDApOworCisgICAgaWYgKCEqc291cmNlKSByZXR1cm4o LTEpOworICAgIGlmICghKmRlc3RpbmF0aW9uKSByZXR1cm4oLTEpOworCisjaWZkZWYgSUtTRAor I2lmZGVmIENLX0xPR0lOCisgICAgaWYgKGluc2VydmVyICYmIGlzZ3Vlc3QpCisgICAgICByZXR1 cm4oLTQpOworI2VuZGlmIC8qIENLX0xPR0lOICovCisjZW5kaWYgLyogSUtTRCAqLworCisjaWZk ZWYgQ0tST09UCisgICAgZGVidWcoRjExMSwiemNvcHkgc2V0cm9vdCIsY2tyb290LGNrcm9vdHNl dCk7CisgICAgaWYgKGNrcm9vdHNldCkgeworCWlmICghemlucm9vdChzb3VyY2UpKSB7CisJICAg IGRlYnVnKEYxMTAsInpjb3B5IHNvdXJjZTogc2V0cm9vdCB2aW9sYXRpb24iLHNvdXJjZSwwKTsK KwkgICAgcmV0dXJuKC0xKTsKKwl9CisJaWYgKCF6aW5yb290KGRlc3RpbmF0aW9uKSkgeworCSAg ICBkZWJ1ZyhGMTEwLCJ6Y29weSBkZXN0aW5hdGlvbjogc2V0cm9vdCB2aW9sYXRpb24iLGRlc3Rp bmF0aW9uLDApOworCSAgICByZXR1cm4oLTEpOworCX0KKyAgICB9CisjZW5kaWYgLyogQ0tST09U ICovCisKKyAgICBzcmMgPSBzb3VyY2U7CisgICAgZHN0ID0gZGVzdGluYXRpb247CisKKyAgICBp ZiAoc3RhdChzcmMsJnNyY2J1ZikgPT0gMCkgeyAgICAgICAvKiBHZXQgc291cmNlIGZpbGUgaW5m byAqLworICAgICAgICBzdHJ1Y3Qgc3RhdCBkc3RidWY7ICAgICAgICAgICAgIC8qIERlc3RpbmF0 aW9uIGZpbGUgaW5mbyBidWZmZXIgKi8KKwlkZWJ1ZyhGMTAxLCJTVEFUIiwiIiw2KTsKKyAgICAg ICAgaWYgKHN0YXQoZHN0LCZkc3RidWYpID09IDApIHsKKwkgICAgZGVidWcoRjEwMSwiU1RBVCIs IiIsNyk7CisgICAgICAgICAgICBpZiAoc3JjYnVmLnN0X2RldiA9PSBkc3RidWYuc3RfZGV2KQor ICAgICAgICAgICAgICBpZiAoc3JjYnVmLnN0X2lubyA9PSBkc3RidWYuc3RfaW5vKSB7CisgICAg ICAgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJ6Y29weSBmaWxlcyBpZGVudGljYWw6IHN0YXQoKSIs IiIsMCk7CisgICAgICAgICAgICAgICAgICByZXR1cm4oLTUpOworICAgICAgICAgICAgICB9Cisg ICAgICAgIH0KKyAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzdGF0 KCkgZmFpbGVkLi4uICovCisJZGVidWcoRjEwMSwiU1RBVCIsIiIsOCk7CisgICAgICAgIGRlYnVn KEYxMTEsInNvdXJjZSBmaWxlIG5vdCBmb3VuZCIsc3JjLGVycm5vKTsKKyAgICAgICAgcmV0dXJu KC0zKTsKKyAgICB9CisgICAgZnVsbG5hbWVbMF0gPSAnXDAnOyAgICAgICAgICAgICAgICAgLyog R2V0IGZ1bGwgcGF0aG5hbWVzICovCisgICAgaWYgKHpmbnFmcChzb3VyY2UsQ0tNQVhQQVRILGZ1 bGxuYW1lKSkKKyAgICAgIHNyYyA9IGZ1bGxuYW1lOworICAgIGRlYnVnKEYxMTAsInpjb3B5IHNy YyIsc3JjLDApOworICAgIHRtcDJbMF0gPSAnXDAnOworICAgIGlmICh6Zm5xZnAoZGVzdGluYXRp b24sQ0tNQVhQQVRILHRtcDIpKQorICAgICAgZHN0ID0gdG1wMjsKKyAgICBkZWJ1ZyhGMTEwLCJ6 Y29weSBkc3QgMSIsZHN0LDApOworICAgIGlmICghc3RyY21wKHNyYyxkc3QpKSB7ICAgICAgICAg ICAgIC8qIFNyYyBhbmQgZHN0IGFyZSBzYW1lIGZpbGU/ICovCisgICAgICAgIGRlYnVnKEYxMDAs Inpjb3B5IGZpbGVzIGlkZW50aWNhbDogc3RyY21wKCkiLCIiLDApOyAvKiBUaGlzLi4uICovCisg ICAgICAgIHJldHVybigtNSk7ICAgICAgICAgICAgICAgICAgICAgLyogc2hvdWxkIG5vdCBoYXBw ZW4uICovCisgICAgfQorICAgIGlmIChpc2RpcihzcmMpKSB7ICAgICAgICAgICAgICAgICAgIC8q IFNvdXJjZSBmaWxlIGlzIGEgZGlyZWN0b3J5PyAqLworICAgICAgICBkZWJ1ZyhGMTEwLCJ6Y29w eSBzb3VyY2UgaXMgZGlyZWN0b3J5IixzcmMsMCk7CisgICAgICAgIHJldHVybigtMik7ICAgICAg ICAgICAgICAgICAgICAgLyogRmFpbCAqLworICAgIH0KKyAgICBpZiAoaXNkaXIoZHN0KSkgeyAg ICAgICAgICAgICAgICAgICAvKiBEZXN0aW5hdGlvbiBpcyBhIGRpcmVjdG9yeT8gKi8KKyAgICAg ICAgY2hhciAqcSA9IE5VTEw7ICAgICAgICAgICAgICAgICAvKiBZZXMsIGFkZCBmaWxlbmFtZSB0 byBpdC4gKi8KKyAgICAgICAgeCA9IHN0cmxlbihkc3QpOworCWlmICh4IDwgMSkgcmV0dXJuKC0x KTsKKyAgICAgICAgaWYgKCFJU0RJUlNFUCgqKGRzdCt4LTEpKSkgeyAgICAvKiBBZGQgc2VwYXJh dG9yIGlmIG5lZWRlZCAqLworICAgICAgICAgICAgdG1wMlt4KytdID0gJy8nOworICAgICAgICAg ICAgdG1wMlt4XSA9ICdcMCc7CisgICAgICAgIH0KKwlkZWJ1ZyhGMTExLCJ6Y29weSBkc3QgMiIs ZHN0LHgpOworICAgICAgICB6c3RyaXAoc3JjLCZxKTsgICAgICAgICAgICAgICAgIC8qIFN0cmlw IHBhdGggcGFydCBmcm9tIG9sZCBuYW1lICovCisgICAgICAgIGNrc3RybmNweSh0bXAyK3gscSxD S01BWFBBVEgteCk7IC8qIENvbmNhdGVuYXRlIGl0IHRvIG5ldyBuYW1lICovCisgICAgfQorICAg IGRlYnVnKEYxMTAsInpjb3B5IGRzdCAzIixkc3QsMCk7CisKKyNpZmRlZiBJS1NECisgICAgaWYg KGluc2VydmVyICYmICghRU5BQkxFRChlbl9kZWwpKSkgeworCWlmICh6Y2hraShkc3QpID4gLTEp CQkvKiBEZXN0aW5hdGlvbiBmaWxlIGV4aXN0cz8gKi8KKwkgIHJldHVybigtNCk7CisgICAgfQor I2VuZGlmIC8qIElLU0QgKi8KKworICAgIHBlcm1zID0gdW1hc2soMCk7ICAgICAgICAgICAgICAg ICAgIC8qIEdldCB1c2VyJ3MgdW1hc2sgKi8KKyAgICB1bWFzayhwZXJtcyk7CQkJLyogUHV0IGl0 IGJhY2shICovCisgICAgcGVybXMgXj0gMDc3NzsgICAgICAgICAgICAgICAgICAgICAgLyogRmxp cCB0aGUgYml0cyAqLworICAgIHBlcm1zICY9IDA2NjY7ICAgICAgICAgICAgICAgICAgICAgIC8q IFplcm8gZXhlY3V0ZSBiaXRzIGZyb20gdW1hc2sgKi8KKyAgICBwZXJtcyB8PSAoc3JjYnVmLnN0 X21vZGUgJiAwMTExKTsgICAvKiBPUiBpbiBzb3VyY2UgZmlsZSdzIGV4ZWN1dGUgYml0cyAqLwor ICAgIHJjID0gLTE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERlZmF1bHQgcmV0dXJu IGNvZGUgKi8KKyAgICBlcnJubyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXNl dCBlcnJubyAqLworICAgIGluID0gb3BlbihzcmMsIE9fUkRPTkxZLCAwKTsgICAgICAgIC8qIE9w ZW4gc291cmNlIGZpbGUgKi8KKyAgICBkZWJ1ZyhGMTExLCJ6Y29weSBvcGVuIHNvdXJjZSIsc3Jj LGluKTsKKyAgICBpZiAoaW4gPiAtMSkgeyAgICAgICAgICAgICAgICAgICAgICAvKiBJZiBvcGVu Li4uICovCisJLyogT3BlbiBkZXN0aW5hdGlvbiBmaWxlICovCisjaWZkZWYgT19UUlVOQworICAg ICAgICBvdXQgPSBvcGVuKGRzdCwgT19XUk9OTFl8T19DUkVBVHxPX1RSVU5DLCBwZXJtcyk7Cisj ZWxzZQorICAgICAgICBvdXQgPSBvcGVuKGRzdCwgT19XUk9OTFl8T19DUkVBVCwgcGVybXMpOwor I2VuZGlmIC8qIE9fVFJVTkMgKi8KKyAgICAgICAgZGVidWcoRjExMSwiemNvcHkgb3BlbiBkZXN0 Iixkc3Qsb3V0KTsKKyAgICAgICAgaWYgKG91dCA+IC0xKSB7ICAgICAgICAgICAgICAgICAvKiBJ ZiBvcGVuLi4uICovCisgICAgICAgICAgICB3aGlsZSAoKHggPSByZWFkKGluLGJ1ZiwxMDI0KSkg PiAwKSB7IC8qIENvcHkgaW4gMUsgYmxvY2tzICovCisgICAgICAgICAgICAgICAgeSA9IHdyaXRl KG91dCxidWYseCk7CisgICAgICAgICAgICAgICAgaWYgKHkgPCAwKSB7ICAgICAgICAgICAgLyog T24gd3JpdGUgZmFpbHVyZSAqLworICAgICAgICAgICAgICAgICAgICB4ID0gLTE7CisgICAgICAg ICAgICAgICAgICAgIHJjID0gLTY7ICAgICAgICAgICAgLyogSW5kaWNhdGUgaS9vIGVycm9yICov CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIH0KKyAgICAgICAgICAgIGRlYnVnKEYxMDEsInpjb3B5IGZpbmFsIHJlYWQiLCIiLHgpOwor ICAgICAgICAgICAgZGVidWcoRjEwMSwiemNvcHkgZXJybm8iLCIiLGVycm5vKTsKKyAgICAgICAg ICAgIHJjID0gKHggPT0gMCkgPyAwIDogLTY7ICAgICAvKiBJbiBjYXNlIG9mIHJlYWQgZmFpbHVy ZSAqLworICAgICAgICB9CisgICAgfQorICAgIGlmIChpbiA+IC0xKSBjbG9zZShpbik7ICAgICAg ICAgICAgIC8qIENsb3NlIGZpbGVzICovCisgICAgaWYgKG91dCA+IC0xKSBjbG9zZShvdXQpOwor ICAgIGlmIChyYyA9PSAtMSkgeyAgICAgICAgICAgICAgICAgICAgIC8qIFNldCByZXR1cm4gY29k ZSAqLworICAgICAgICBzd2l0Y2ggKGVycm5vKSB7CisgICAgICAgICAgY2FzZSBFTk9FTlQ6IHJj ID0gLTM7IGJyZWFrOworICAgICAgICAgIGNhc2UgRUFDQ0VTOiByYyA9IC00OyBicmVhazsKKyAg ICAgICAgICBjYXNlIEVJTzogICAgcmMgPSAtNjsKKyAgICAgICAgfQorICAgIH0KKworI2lmZGVm IENLU1lTTE9HCisgICAgaWYgKHJjID4gLTEgJiYgY2t4c3lzbG9nID49IFNZU0xHX0ZDICYmIGNr eGxvZ2dpbmcpIHsKKyAgICAgICAgaWYgKHJjKQorICAgICAgICAgIHN5c2xvZyhMT0dfSU5GTywi ZmlsZVtdICVzOiBjb3B5IHRvICVzIGZhaWxlZCAoJW0pIiwgZnVsbG5hbWUsIHRtcDIpOworICAg ICAgICBlbHNlCisgICAgICAgICAgc3lzbG9nKExPR19JTkZPLCJmaWxlW10gJXM6IGNvcHkgdG8g JXMgb2siLCBmdWxsbmFtZSwgdG1wMik7CisgICAgfQorI2VuZGlmIC8qIENLU1lTTE9HICovCisK KyAgICByZXR1cm4ocmMpOworfQorCisvKiAgWiBTIEEgVCBUIFIgKi8KKy8qCisgRmlsbHMgaW4g YSBLZXJtaXQgZmlsZSBhdHRyaWJ1dGUgc3RydWN0dXJlIGZvciB0aGUgZmlsZSB3aGljaCBpcyB0 byBiZSBzZW50LgorIFJldHVybnMgMCBvbiBzdWNjZXNzIHdpdGggdGhlIHN0cnVjdHVyZSBmaWxs ZWQgaW4sIG9yIC0xIG9uIGZhaWx1cmUuCisgSWYgYW55IHN0cmluZyBtZW1iZXIgaXMgbnVsbCwg dGhlbiBpdCBzaG91bGQgYmUgaWdub3JlZC4KKyBJZiBhbnkgbnVtZXJpYyBtZW1iZXIgaXMgLTEs IHRoZW4gaXQgc2hvdWxkIGJlIGlnbm9yZWQuCisqLworI2lmZGVmIENLX1BFUk1TCisKKyNpZmRl ZiBDS19HUEVSTVMKKyN1bmRlZiBDS19HUEVSTVMKKyNlbmRpZiAvKiBDS19HUEVSTVMgKi8KKwor I2lmZGVmIFVOSVgKKyNpZm5kZWYgU19JUlVTUgorI2RlZmluZSBTX0lSVVNSIDA0MDAKKyNlbmRp ZiAvKiBTX0lSVVNSICovCisjaWZuZGVmIFNfSVdVU1IKKyNkZWZpbmUgU19JWFVTUiAwMjAwCisj ZW5kaWYgLyogU19JV1VTUiAqLworI2lmbmRlZiBTX0lYVVNSCisjZGVmaW5lIFNfSVhVU1IgMDEw MAorI2VuZGlmIC8qIFNfSVhVU1IgKi8KKyNlbmRpZiAvKiBVTklYICovCisKKyNpZmRlZiBTX0lS VVNSCisjaWZkZWYgU19JV1VTUgorI2lmZGVmIFNfSVhVU1IKKyNkZWZpbmUgQ0tfR1BFUk1TCisj ZW5kaWYgLyogU19JWFVTUiAqLworI2VuZGlmIC8qIFNfSVdVU1IgKi8KKyNlbmRpZiAvKiBTX0lS VVNSICovCisKK3N0YXRpYyBjaGFyIGdwZXJtc1syXTsKKworI2VuZGlmIC8qIENLX0dQRVJNUyAq LworCitzdGF0aWMgY2hhciBscGVybXNbMjRdOworCisjaWZkZWYgQ0tfUEVSTVMKK3N0YXRpYyBj aGFyIHhscGVybXNbMjRdOworCisvKiAgWiBTIEUgVCBQIEUgUiBNICAtLSAgU2V0IHBlcm1pc3Np b25zIG9mIGEgZmlsZSAgKi8KKworaW50Cit6c2V0cGVybShmLGNvZGUpIGNoYXIgKiBmOyBpbnQg Y29kZTsgeworICAgIGludCB4OworI2lmZGVmIENLX1NDTzMyVjQKKyAgICBtb2RlX3QgbWFzazsK KyNlbHNlCisgICAgaW50IG1hc2s7CisjZW5kaWYgLyogQ0tfU0NPMzJWNCAqLworICAgIG1hc2sg PSBjb2RlOworICAgIGlmIChpbnNlcnZlciAmJiBndWVzdCkgeworCWRlYnVnKEYxMTAsInpzZXRw ZXJtIGd1ZXN0IixmLDApOworCXJldHVybigwKTsKKyAgICB9CisgICAgeCA9IGNobW9kKGYsbWFz ayk7CisgICAgaWYgKHggPCAwKSB7CisJZGVidWcoRjExMSwienNldHBlcm0gZXJyb3IiLGYsZXJy bm8pOworCXJldHVybigwKTsKKyAgICB9CisgICAgZGVidWcoRjExMSwienNldHBlcm0gb2siLGYs bWFzayk7CisgICAgcmV0dXJuKDEpOworfQorCisvKiAgWiBHIFAgRSBSIE0gIC0tICBHZXQgcGVy bWlzc2lvbnMgb2YgYSBmaWxlIGFzIGFuIG9jdGFsIHN0cmluZyAgKi8KKworY2hhciAqCit6Z3Bl cm0oZikgY2hhciAqZjsgeworICAgIGV4dGVybiBpbnQgZGlyYWN0aXZlOworICAgIGludCB4OyBj aGFyICpzID0gKGNoYXIgKil4bHBlcm1zOworICAgIHN0cnVjdCBzdGF0IGJ1ZjsKKyAgICBkZWJ1 ZyhGMTEwLCJ6Z3Blcm0iLGYsMCk7CisgICAgaWYgKCFmKSByZXR1cm4oIi0tLS0tLS0tLS0iKTsK KyAgICBpZiAoISpmKSByZXR1cm4oIi0tLS0tLS0tLS0iKTsKKworI2lmZGVmIENLUk9PVAorICAg IGRlYnVnKEYxMTEsInpncGVybSBzZXRyb290Iixja3Jvb3QsY2tyb290c2V0KTsKKyAgICBpZiAo Y2tyb290c2V0KSBpZiAoIXppbnJvb3QoZikpIHsKKwlkZWJ1ZyhGMTEwLCJ6Z3Blcm0gc2V0cm9v dCB2aW9sYXRpb24iLGYsMCk7CisJcmV0dXJuKCItLS0tLS0tLS0tIik7CisgICAgfQorI2VuZGlm IC8qIENLUk9PVCAqLworCisjaWZkZWYgVVNFX0xTVEFUCisgICAgaWYgKGRpcmFjdGl2ZSkKKyAg ICAgIHggPSBsc3RhdChmLCZidWYpOworICAgIGVsc2UKKyNlbmRpZiAvKiBVU0VfTFNUQVQgKi8K KyAgICAgIHggPSBzdGF0KGYsJmJ1Zik7CisgICAgZGVidWcoRjEwMSwiU1RBVCIsIiIsOSk7Cisg ICAgaWYgKHggPCAwKQorICAgICAgcmV0dXJuKCItLS0tLS0tLS0tIik7CisgICAgc3ByaW50Zihz LCIlbyIsYnVmLnN0X21vZGUpOworICAgIGRlYnVnKEYxMTAsInpncGVybSIscywwKTsKKyAgICBy ZXR1cm4ocyk7Cit9CisKKy8qIExpa2UgemdwZXJtKCkgYnV0IHJldHVybnMgcGVybWlzc2lvbnMg aW4gImxzIC1sIiBzdHJpbmcgZm9ybWF0ICovCisKK3N0YXRpYyBjaGFyIHhzcGVybXNbMjRdOwor CitjaGFyICoKK3ppcGVybShmKSBjaGFyICogZjsgeworICAgIGV4dGVybiBpbnQgZGlyYWN0aXZl OworICAgIGludCB4OyBjaGFyICpzID0gKGNoYXIgKil4c3Blcm1zOworICAgIHN0cnVjdCBzdGF0 IGJ1ZjsKKyAgICB1bnNpZ25lZCBpbnQgcGVybXMgPSAwOworCisgICAgZGVidWcoRjExMCwiemlw ZXJtIixmLDApOworCisgICAgaWYgKCFmKSByZXR1cm4oTlVMTCk7CisgICAgaWYgKCEqZikgcmV0 dXJuKE5VTEwpOworCisgICAgaWYgKGRpcmFjdGl2ZSAmJiB6Z2ZzX21vZGUgIT0gMCkgeworCXBl cm1zID0gemdmc19tb2RlOwkJLyogemdldGZzKCkgYWxyZWFkeSBnb3QgdGhlbSAqLworICAgIH0g ZWxzZSB7CisjaWZkZWYgVVNFX0xTVEFUCisJaWYgKGRpcmFjdGl2ZSkKKwkgIHggPSBsc3RhdChm LCZidWYpOworCWVsc2UKKyNlbmRpZiAvKiBVU0VfTFNUQVQgKi8KKwkgIHggPSBzdGF0KGYsJmJ1 Zik7CisJZGVidWcoRjEwMSwiU1RBVCIsIiIsMTApOworCWlmICh4IDwgMCkKKwkgIHJldHVybigi LS0tLS0tLS0tLSIpOworCXBlcm1zID0gYnVmLnN0X21vZGU7CisgICAgfQorICAgIHN3aXRjaCAo cGVybXMgJiBTX0lGTVQpIHsKKyAgICAgIGNhc2UgU19JRkRJUjoKKyAgICAgICAgKnMrKyA9ICdk JzsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIFNfSUZDSFI6ICAgICAgICAgICAgICAgICAg ICAgLyogQ2hhcmFjdGVyIHNwZWNpYWwgKi8KKyAgICAgICAgKnMrKyA9ICdjJzsKKyAgICAgICAg YnJlYWs7CisgICAgICBjYXNlIFNfSUZCTEs6ICAgICAgICAgICAgICAgICAgICAgLyogQmxvY2sg c3BlY2lhbCAqLworICAgICAgICAqcysrID0gJ2InOworICAgICAgICBicmVhazsKKyAgICAgIGNh c2UgU19JRlJFRzogICAgICAgICAgICAgICAgICAgICAvKiBSZWd1bGFyICovCisgICAgICAgICpz KysgPSAnLSc7CisgICAgICAgIGJyZWFrOworI2lmZGVmIFNfSUZMTksKKyAgICAgIGNhc2UgU19J RkxOSzogICAgICAgICAgICAgICAgICAgICAvKiBTeW1ib2xpYyBsaW5rICovCisgICAgICAgICpz KysgPSAnbCc7CisgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIFNfSUZMTksgKi8KKyNpZmRlZiBT X0lGU09DSworICAgICAgY2FzZSBTX0lGU09DSzogICAgICAgICAgICAgICAgICAgIC8qIFNvY2tl dCAqLworICAgICAgICAqcysrID0gJ3MnOworICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBTX0lG U09DSyAqLworI2lmZGVmIFNfSUZJRk8KKyNpZm5kZWYgUGxhbjkKKyNpZm5kZWYgQ09IRVJFTlQK KyAgICAgIGNhc2UgU19JRklGTzogICAgICAgICAgICAgICAgICAgICAvKiBGSUZPICovCisgICAg ICAgICpzKysgPSAncCc7CisgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIENPSEVSRU5UICovCisj ZW5kaWYgLyogUGxhbjkgKi8KKyNlbmRpZiAvKiBTX0lGSUZPICovCisjaWZkZWYgU19JRldIVAor ICAgICAgY2FzZSBTX0lGV0hUOiAgICAgICAgICAgICAgICAgICAgIC8qIFdoaXRlb3V0ICovCisg ICAgICAgICpzKysgPSAndyc7CisgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIFNfSUZXSFQgKi8K KyAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVbmtub3duICovCisg ICAgICAgICpzKysgPSAnPyc7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAocGVybXMg JiBTX0lSVVNSKSAgICAgICAgICAvKiBPd25lcidzIHBlcm1pc3Npb25zICovCisgICAgICAqcysr ID0gJ3InOworICAgIGVsc2UKKyAgICAgICpzKysgPSAnLSc7CisgICAgaWYgKHBlcm1zICYgU19J V1VTUikKKyAgICAgICpzKysgPSAndyc7CisgICAgZWxzZQorICAgICAgKnMrKyA9ICctJzsKKyAg ICBzd2l0Y2ggKHBlcm1zICYgKFNfSVhVU1IgfCBTX0lTVUlEKSkgeworICAgICAgY2FzZSAwOgor ICAgICAgICAqcysrID0gJy0nOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgU19JWFVTUjoK KyAgICAgICAgKnMrKyA9ICd4JzsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIFNfSVNVSUQ6 CisgICAgICAgICpzKysgPSAnUyc7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBTX0lYVVNS IHwgU19JU1VJRDoKKyAgICAgICAgKnMrKyA9ICdzJzsKKyAgICAgICAgYnJlYWs7CisgICAgfQor ICAgIGlmIChwZXJtcyAmIFNfSVJHUlApICAgICAgICAgIC8qIEdyb3VwIHBlcm1pc3Npb25zICov CisgICAgICAqcysrID0gJ3InOworICAgIGVsc2UKKyAgICAgICpzKysgPSAnLSc7CisgICAgaWYg KHBlcm1zICYgU19JV0dSUCkKKyAgICAgICpzKysgPSAndyc7CisgICAgZWxzZQorICAgICAgKnMr KyA9ICctJzsKKyAgICBzd2l0Y2ggKHBlcm1zICYgKFNfSVhHUlAgfCBTX0lTR0lEKSkgeworICAg ICAgY2FzZSAwOgorICAgICAgICAqcysrID0gJy0nOworICAgICAgICBicmVhazsKKyAgICAgIGNh c2UgU19JWEdSUDoKKyAgICAgICAgKnMrKyA9ICd4JzsKKyAgICAgICAgYnJlYWs7CisgICAgICBj YXNlIFNfSVNHSUQ6CisgICAgICAgICpzKysgPSAnUyc7CisgICAgICAgIGJyZWFrOworICAgICAg Y2FzZSBTX0lYR1JQIHwgU19JU0dJRDoKKyAgICAgICAgKnMrKyA9ICdzJzsKKyAgICAgICAgYnJl YWs7CisgICAgfQorICAgIGlmIChwZXJtcyAmIFNfSVJPVEgpICAgICAgICAgIC8qIFdvcmxkIHBl cm1pc3Npb25zICovCisgICAgICAqcysrID0gJ3InOworICAgIGVsc2UKKyAgICAgICpzKysgPSAn LSc7CisgICAgaWYgKHBlcm1zICYgU19JV09USCkKKyAgICAgICpzKysgPSAndyc7CisgICAgZWxz ZQorICAgICAgKnMrKyA9ICctJzsKKyAgICBzd2l0Y2ggKAorI2lmZGVmIFBsYW45CisgICAgICAg ICAgICBwZXJtcyAmIChTX0lYT1RIKQorI2Vsc2UKKyAgICAgICAgICAgIHBlcm1zICYgKFNfSVhP VEggfCBTX0lTVlRYKQorI2VuZGlmCisgICAgICAgICAgICApIHsKKyAgICAgIGNhc2UgMDoKKyAg ICAgICAgKnMrKyA9ICctJzsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIFNfSVhPVEg6Cisg ICAgICAgICpzKysgPSAneCc7CisgICAgICAgIGJyZWFrOworI2lmbmRlZiBQbGFuOQorICAgICAg Y2FzZSBTX0lTVlRYOgorICAgICAgICAqcysrID0gJ1QnOworICAgICAgICBicmVhazsKKyAgICAg IGNhc2UgU19JWE9USCB8IFNfSVNWVFg6CisgICAgICAgICpzKysgPSAndCc7CisgICAgICAgIGJy ZWFrOworI2VuZGlmIC8qIFBsYW45ICovCisgICAgfQorICAgICpzID0gJ1wwJzsKKyAgICBkZWJ1 ZyhGMTEwLCJ6aXBlcm0iLHhzcGVybXMsMCk7CisgICAgcmV0dXJuKChjaGFyICopeHNwZXJtcyk7 Cit9CisKKyNlbHNlCisKK2NoYXIgKgoremdwZXJtKGYpIGNoYXIgKmY7IHsKKyAgICByZXR1cm4o Ii0tLS0tLS0tLS0iKTsKK30KK2NoYXIgKgoremlwZXJtcyhmKSBjaGFyICpmOyB7CisgICAgcmV0 dXJuKCItLS0tLS0tLS0tIik7Cit9CisjZW5kaWYgLyogQ0tfUEVSTVMgKi8KKworaW50Cit6c2F0 dHIoeHgpIHN0cnVjdCB6YXR0ciAqeHg7IHsKKyAgICBDS19PRkZfVCBrOyBpbnQgeDsKKyAgICBz dHJ1Y3Qgc3RhdCBidWY7CisKKyAgICBrID0gaWZsZW4gJSAxMDI0OwkJCS8qIEZpbGUgbGVuZ3Ro IGluIEsgKi8KKyAgICBpZiAoaykgayA9IDFMOworICAgIHh4LT5sZW5ndGhrID0gKGlmbGVuIC8g MTAyNCkgKyBrOworICAgIHh4LT50eXBlLmxlbiA9IDA7ICAgICAgICAgICAgICAgICAgIC8qIEZp bGUgdHlwZSBjYW4ndCBiZSBmaWxsZWQgaW4gaGVyZSAqLworICAgIHh4LT50eXBlLnZhbCA9ICIi OworICAgIGlmICgqbmFtYnVmKSB7CisgICAgICAgIHh4LT5kYXRlLnZhbCA9IHpmY2RhdChuYW1i dWYpOyAgLyogRmlsZSBjcmVhdGlvbiBkYXRlICovCisgICAgICAgIHh4LT5kYXRlLmxlbiA9IChp bnQpc3RybGVuKHh4LT5kYXRlLnZhbCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgeHgtPmRhdGUu bGVuID0gMDsKKyAgICAgICAgeHgtPmRhdGUudmFsID0gIiI7CisgICAgfQorICAgIHh4LT5jcmVh dG9yLmxlbiA9IDA7ICAgICAgICAgICAgICAgIC8qIEZpbGUgY3JlYXRvciAqLworICAgIHh4LT5j cmVhdG9yLnZhbCA9ICIiOworICAgIHh4LT5hY2NvdW50LmxlbiA9IDA7ICAgICAgICAgICAgICAg IC8qIEZpbGUgYWNjb3VudCAqLworICAgIHh4LT5hY2NvdW50LnZhbCA9ICIiOworICAgIHh4LT5h cmVhLmxlbiA9IDA7ICAgICAgICAgICAgICAgICAgIC8qIEZpbGUgYXJlYSAqLworICAgIHh4LT5h cmVhLnZhbCA9ICIiOworICAgIHh4LT5wYXNzd29yZC5sZW4gPSAwOyAgICAgICAgICAgICAgIC8q IEFyZWEgcGFzc3dvcmQgKi8KKyAgICB4eC0+cGFzc3dvcmQudmFsID0gIiI7CisgICAgeHgtPmJs a3NpemUgPSAtMUw7ICAgICAgICAgICAgICAgICAgLyogRmlsZSBibG9ja3NpemUgKi8KKyAgICB4 eC0+eGFjY2Vzcy5sZW4gPSAwOyAgICAgICAgICAgICAgICAvKiBGaWxlIGFjY2VzcyAqLworICAg IHh4LT54YWNjZXNzLnZhbCA9ICIiOworICAgIHh4LT5lbmNvZGluZy5sZW4gPSAwOyAgICAgICAg ICAgICAgIC8qIFRyYW5zZmVyIHN5bnRheCAqLworICAgIHh4LT5lbmNvZGluZy52YWwgPSAwOwor ICAgIHh4LT5kaXNwLmxlbiA9IDA7ICAgICAgICAgICAgICAgICAgIC8qIERpc3Bvc2l0aW9uIHVw b24gYXJyaXZhbCAqLworICAgIHh4LT5kaXNwLnZhbCA9ICIiOworICAgIHh4LT5scHJvdGVjdC5s ZW4gPSAwOyAgICAgICAgICAgICAgIC8qIExvY2FsIHByb3RlY3Rpb24gKi8KKyAgICB4eC0+bHBy b3RlY3QudmFsID0gIiI7CisgICAgeHgtPmdwcm90ZWN0LmxlbiA9IDA7ICAgICAgICAgICAgICAg LyogR2VuZXJpYyBwcm90ZWN0aW9uICovCisgICAgeHgtPmdwcm90ZWN0LnZhbCA9ICIiOworICAg IHggPSAtMTsKKyAgICBpZiAoKm5hbWJ1ZikgeCA9IHN0YXQobmFtYnVmLCZidWYpOworICAgIGRl YnVnKEYxMDEsIlNUQVQiLCIiLDExKTsKKyAgICBpZiAoeCA+PSAwKSB7CisgICAgICAgIGRlYnVn KEYxMTEsInpzYXR0ciBidWYuc3RfbW9kZSAmIDA3NzciLG5hbWJ1ZixidWYuc3RfbW9kZSAmIDA3 NzcpOworICAgICAgICAvKiBVTklYIGZpbGVtb2RlIGFzIGFuIG9jdGFsIHN0cmluZyB3aXRob3V0 IGZpbGV0eXBlIGJpdHMgKi8KKyAgICAgICAgc3ByaW50ZihscGVybXMsIiVvIixidWYuc3RfbW9k ZSAmIDA3NzcpOworICAgICAgICB4eC0+bHByb3RlY3QubGVuID0gKGludClzdHJsZW4obHBlcm1z KTsKKyAgICAgICAgeHgtPmxwcm90ZWN0LnZhbCA9IChjaGFyICopbHBlcm1zOworICAgICAgICB4 ID0gMDsKKyNpZmRlZiBDS19HUEVSTVMKKyAgICAgICAgLyogR2VuZXJpYyBwZXJtaXNzaW9ucyBv bmx5IGlmIHdlIGhhdmUgc3RhdC5oIHN5bWJvbHMgZGVmaW5lZCAqLworICAgICAgICBpZiAoYnVm LnN0X21vZGUgJiBTX0lSVVNSKSB4IHw9IDE7ICAgICAgLyogUmVhZCAqLworICAgICAgICBpZiAo YnVmLnN0X21vZGUgJiBTX0lXVVNSKSB4IHw9ICgyKzE2KTsgLyogV3JpdGUgYW5kIERlbGV0ZSAq LworICAgICAgICBpZiAoYnVmLnN0X21vZGUgJiBTX0lYVVNSKSB4IHw9IDQ7ICAgICAgLyogRXhl Y3V0ZSAqLworICAgICAgICBncGVybXNbMF0gPSB0b2NoYXIoeCk7CisgICAgICAgIGdwZXJtc1sx XSA9IE5VTDsKKyAgICAgICAgeHgtPmdwcm90ZWN0LmxlbiA9IDE7CisgICAgICAgIHh4LT5ncHJv dGVjdC52YWwgPSAoY2hhciAqKWdwZXJtczsKKyNlbmRpZiAvKiBDS19HUEVSTVMgKi8KKyAgICB9 CisgICAgZGVidWcoRjExMSwienNhdHRyIGxwZXJtcyIseHgtPmxwcm90ZWN0LnZhbCx4eC0+bHBy b3RlY3QubGVuKTsKKyAgICBkZWJ1ZyhGMTExLCJ6c2F0dHIgZ3Blcm1zIix4eC0+Z3Byb3RlY3Qu dmFsLHh4LT5ncHJvdGVjdC5sZW4pOworICAgIHh4LT5zeXN0ZW1pZC52YWwgPSAiVTEiOyAgICAg ICAgICAgIC8qIFUxID0gVU5JWCAqLworICAgIHh4LT5zeXN0ZW1pZC5sZW4gPSAyOyAgICAgICAg ICAgICAgIC8qIFN5c3RlbSBJRCAqLworICAgIHh4LT5yZWNmbS5sZW4gPSAwOyAgICAgICAgICAg ICAgICAgIC8qIFJlY29yZCBmb3JtYXQgKi8KKyAgICB4eC0+cmVjZm0udmFsID0gIiI7CisgICAg eHgtPnN5c3BhcmFtLmxlbiA9IDA7ICAgICAgICAgICAgICAgLyogU3lzdGVtLWRlcGVuZGVudCBw YXJhbWV0ZXJzICovCisgICAgeHgtPnN5c3BhcmFtLnZhbCA9ICIiOworICAgIHh4LT5sZW5ndGgg PSBpZmxlbjsgICAgICAgICAgICAgICAgIC8qIExlbmd0aCAqLworICAgIHJldHVybigwKTsKK30K KworLyogWiBGIEMgRCBBIFQgIC0tICBHZXQgZmlsZSBjcmVhdGlvbiBkYXRlICovCisvKgorICBD YWxsIHdpdGggcG9pbnRlciB0byBmaWxlbmFtZS4KKyAgT24gc3VjY2VzcywgcmV0dXJucyBwb2lu dGVyIHRvIG1vZGlmaWNhdGlvbiBkYXRlIGluIHl5eXltbWRkIGhoOm1tOnNzIGZvcm1hdC4KKyAg T24gZmFpbHVyZSwgcmV0dXJucyBwb2ludGVyIHRvIG51bGwgc3RyaW5nLgorKi8KK3N0YXRpYyBj aGFyIGRhdGJ1Zls0MF07CisKK2NoYXIgKgorI2lmZGVmIENLX0FOU0lDCit6ZHRzdHIodGltZV90 IHRpbWVhcmcpCisjZWxzZQoremR0c3RyKHRpbWVhcmcpIHRpbWVfdCB0aW1lYXJnOworI2VuZGlm IC8qIENLX0FOU0lDICovCisvKiB6ZHRzdHIgKi8geworI2lmbmRlZiBUSU1FU1RBTVAKKyAgICBy ZXR1cm4oIiIpOworI2Vsc2UKKyAgICBzdHJ1Y3QgdG0gKiB0aW1lX3N0YW1wOworICAgIHN0cnVj dCB0bSAqIGxvY2FsdGltZSgpOworICAgIGludCB5eSwgc3M7CisKKyAgICBkZWJ1ZyhGMTAxLCJ6 ZHRzdHIgdGltZWFyZyIsIiIsdGltZWFyZyk7CisgICAgaWYgKHRpbWVhcmcgPCAwKQorICAgICAg cmV0dXJuKCIiKTsKKyAgICB0aW1lX3N0YW1wID0gbG9jYWx0aW1lKCYodGltZWFyZykpOworICAg IGlmICghdGltZV9zdGFtcCkgeworICAgICAgICBkZWJ1ZyhGMTAwLCJsb2NhbHRpbWUgcmV0dXJu cyBudWxsIiwiIiwwKTsKKyAgICAgICAgcmV0dXJuKCIiKTsKKyAgICB9CisvKgorICBXZSBhc3N1 bWUgdGhhdCB0bV95ZWFyIGlzIEFMV0FZUyB5ZWFycyBzaW5jZSAxOTAwLgorICBBbnkgcGxhdGZv cm0gd2hlcmUgdGhpcyBpcyBub3QgdGhlIGNhc2Ugd2lsbCBoYXZlIHByb2JsZW1zCisgIHN0YXJ0 aW5nIGluIDIwMDAuCisqLworICAgIHl5ID0gdGltZV9zdGFtcC0+dG1feWVhcjsgICAgICAgICAg IC8qIFllYXIgLSAxOTAwICovCisgICAgZGVidWcoRjEwMSwiemR0c3RyIHRtX3llYXIiLCIiLHRp bWVfc3RhbXAtPnRtX3llYXIpOworICAgIGlmICh5eSA+IDEwMDApIHsKKyAgICAgICAgZGVidWco RjEwMSwienN0cmR0IFlFQVItMjAwMCBBTEVSVCAxOiBsb2NhbHRpbWUgeWVhciIsIiIseXkpOwor ICAgIH0KKyAgICB5eSArPSAxOTAwOworICAgIGRlYnVnKEYxMDEsInpkYXRzdHIgeWVhciIsIiIs eXkpOworCisgICAgaWYgKHRpbWVfc3RhbXAtPnRtX21vbiAgPCAwIHx8IHRpbWVfc3RhbXAtPnRt X21vbiAgPiAxMSkKKyAgICAgIHJldHVybigiIik7CisgICAgaWYgKHRpbWVfc3RhbXAtPnRtX21k YXkgPCAwIHx8IHRpbWVfc3RhbXAtPnRtX21kYXkgPiAzMSkKKyAgICAgIHJldHVybigiIik7Cisg ICAgaWYgKHRpbWVfc3RhbXAtPnRtX2hvdXIgPCAwIHx8IHRpbWVfc3RhbXAtPnRtX2hvdXIgPiAy MykKKyAgICAgIHJldHVybigiIik7CisgICAgaWYgKHRpbWVfc3RhbXAtPnRtX21pbiAgPCAwIHx8 IHRpbWVfc3RhbXAtPnRtX21pbiAgPiA1OSkKKyAgICAgIHJldHVybigiIik7CisgICAgc3MgPSB0 aW1lX3N0YW1wLT50bV9zZWM7ICAgICAgICAgICAgLyogU2Vjb25kcyAqLworICAgIGlmIChzcyA8 IDAgfHwgc3MgID4gNTkpICAgICAgICAgICAgIC8qIFNvbWUgc3lzdGVtcyBnaXZlIGEgQklHIG51 bWJlciAqLworICAgICAgc3MgPSAwOworICAgIHNwcmludGYoZGF0YnVmLAorI2lmZGVmIHBkcDEx CisvKiBGb3Igc29tZSByZWFzb24sIDIuMXggQlNEIHNwcmludGYgZ2V0cyB0aGUgbGFzdCBmaWVs ZCB3cm9uZy4gKi8KKyAgICAgICAgICAgICIlMDRkJTAyZCUwMmQgJTAyZDolMDJkOjAwIiwKKyNl bHNlCisgICAgICAgICAgICAiJTA0ZCUwMmQlMDJkICUwMmQ6JTAyZDolMDJkIiwKKyNlbmRpZiAv KiBwZHAxMSAqLworICAgICAgICAgICAgeXksCisgICAgICAgICAgICB0aW1lX3N0YW1wLT50bV9t b24gKyAxLAorICAgICAgICAgICAgdGltZV9zdGFtcC0+dG1fbWRheSwKKyAgICAgICAgICAgIHRp bWVfc3RhbXAtPnRtX2hvdXIsCisgICAgICAgICAgICB0aW1lX3N0YW1wLT50bV9taW4KKyNpZm5k ZWYgcGRwMTEKKyAgICAgICAgICAgICwgc3MKKyNlbmRpZiAvKiBwZHAxMSAqLworICAgICAgICAg ICAgKTsKKyAgICB5eSA9IChpbnQpc3RybGVuKGRhdGJ1Zik7CisgICAgZGVidWcoRjExMSwiemRh dHN0ciIsZGF0YnVmLHl5KTsKKyAgICBpZiAoeXkgPiAxNykgZGF0YnVmWzE3XSA9ICdcMCc7Cisg ICAgcmV0dXJuKGRhdGJ1Zik7CisjZW5kaWYgLyogVElNRVNUQU1QICovCit9CisKK2NoYXIgKgor emZjZGF0KG5hbWUpIGNoYXIgKm5hbWU7IHsKKyNpZmRlZiBUSU1FU1RBTVAKKyAgICBzdHJ1Y3Qg c3RhdCBidWZmZXI7CisgICAgZXh0ZXJuIGludCBkaXJhY3RpdmU7CisgICAgdW5zaWduZWQgaW50 IG10aW1lOworICAgIGludCB4OworICAgIGNoYXIgKiBzOworCisgICAgaWYgKCFuYW1lKQorICAg ICAgcmV0dXJuKCIiKTsKKyAgICBzID0gbmFtZTsKKyAgICBpZiAoISpzKQorICAgICAgcmV0dXJu KCIiKTsKKworI2lmZGVmIENLUk9PVAorICAgIGRlYnVnKEYxMTEsInpmY2RhdCBzZXRyb290Iixj a3Jvb3QsY2tyb290c2V0KTsKKyAgICBpZiAoY2tyb290c2V0KSBpZiAoIXppbnJvb3QobmFtZSkp IHsKKwlkZWJ1ZyhGMTEwLCJ6ZmNkYXQgc2V0cm9vdCB2aW9sYXRpb24iLG5hbWUsMCk7CisJcmV0 dXJuKCIiKTsKKyAgICB9CisjZW5kaWYgLyogQ0tST09UICovCisKKyNpZmRlZiBEVElMREUKKyAg ICBpZiAoKnMgPT0gJ34nKSB7CisgICAgICAgIHMgPSB0aWxkZV9leHBhbmQocyk7CisgICAgICAg IGlmICghcykgcyA9ICIiOworICAgICAgICBpZiAoISpzKSBzID0gbmFtZTsKKyAgICB9CisjZW5k aWYgLyogRFRJTERFICovCisKKyAgICBkYXRidWZbMF0gPSAnXDAnOworICAgIHggPSAwOworICAg IGRlYnVnKEYxMTEsInpmY2RhdCIscyxkaXJhY3RpdmUpOworCisgICAgaWYgKGRpcmFjdGl2ZSAm JiB6Z2ZzX210aW1lKSB7CisJbXRpbWUgPSB6Z2ZzX210aW1lOworICAgIH0gZWxzZSB7CisjaWZk ZWYgVVNFX0xTVEFUCisJaWYgKGRpcmFjdGl2ZSkgeworCSAgICB4ID0gbHN0YXQocywmYnVmZmVy KTsKKwkgICAgZGVidWcoRjEwMSwiU1RBVCIsIiIsMTIpOworCSAgICBkZWJ1ZyhGMTAxLCJ6ZmNk YXQgbHN0YXQiLCIiLHgpOworCX0gZWxzZSB7CisjZW5kaWYgLyogVVNFX0xTVEFUICovCisJICAg IHggPSBzdGF0KHMsJmJ1ZmZlcik7CisJICAgIGRlYnVnKEYxMDEsIlNUQVQiLCIiLDEzKTsKKwkg ICAgZGVidWcoRjEwMSwiemZjZGF0IHN0YXQiLCIiLHgpOworI2lmZGVmIFVTRV9MU1RBVAorCX0K KyNlbmRpZiAvKiBVU0VfTFNUQVQgKi8KKwlpZiAoeCAhPSAwKSB7CisjaWZkZWYgVVNFX0xTVEFU CisJICAgIGRlYnVnKEYxMTEsInpmY2RhdCBzdGF0IGZhaWxlZCIscyxlcnJubyk7CisjZWxzZQor CSAgICBkZWJ1ZyhGMTExLCJ6ZmNkYXQgbHN0YXQgZmFpbGVkIixzLGVycm5vKTsKKyNlbmRpZiAv KiBVU0VfTFNUQVQgKi8KKwkgICAgcmV0dXJuKCIiKTsKKwl9CisJZGVidWcoRjEwMSwiemZjZGF0 IGJ1ZmZlci5zdF9tdGltZSIsIiIsYnVmZmVyLnN0X210aW1lKTsKKwltdGltZSA9IGJ1ZmZlci5z dF9tdGltZTsKKyAgICB9CisgICAgcmV0dXJuKHpkdHN0cihtdGltZSkpOworI2Vsc2UKKyAgICBy ZXR1cm4oIiIpOworI2VuZGlmIC8qIFRJTUVTVEFNUCAqLworfQorCisjaWZuZGVmIE5PVElNRVNU QU1QCisKKy8qIFogUyBUIFIgRCBUICAtLSAgQ29udmVydHMgbG9jYWwgZGF0ZSBzdHJpbmcgdG8g aW50ZXJuYWwgcmVwcmVzZW50YXRpb24gKi8KKy8qCisgIEluIG91ciBjYXNlIChVTklYKSB0aGlz IGlzIHNlY29uZHMgc2luY2UgbWlkbml0ZSAxIEphbiAxOTcwIFVUQywKKyAgc3VpdGFibGUgZm9y IGNvbXBhcmlzb24gd2l0aCBVTklYIGZpbGUgZGF0ZXMuICBBcyBmYXIgYXMgSSBrbm93LCB0aGVy ZSBpcworICBubyBsaWJyYXJ5IG9yIHN5c3RlbSBjYWxsIC0tIGF0IGxlYXN0IG5vdGhpbmcgcmVh c29uYWJseSBwb3J0YWJsZSAtLSB0bworICBjb252ZXJ0IGxvY2FsIHRpbWUgdG8gVVRDLgorKi8K K3RpbWVfdAorenN0cmR0KGRhdGUsbGVuKSBjaGFyICogZGF0ZTsgaW50IGxlbjsgeworI2lmZGVm IE1fVU5JWAorLyoKKyAgU0NPIFVOSVggMy4ydjIuMCBhbmQgT0RUIDIuMCBsYWNrIHByb3RvdHlw ZXMgZm9yIGZ0aW1lKCkuCisgIE9EVCAzLjAgKDMuMnY0LjIgT1MpIGhhcyBhIHByb3RvdHlwZSwg d2hpY2ggbWF5IHZhcnkgaW4KKyAgZGVwZW5kZW5jZSBvbiB0aGUgWFBHNCBzdXBwbGVtZW50IHBy ZXNlbmNlLiAgU28gYWx3YXlzIHVzZQorICB3aGF0IHRoZSBzeXN0ZW0gaGVhZGVyIGZpbGUgc3Vw cGxpZXMgaW4gT0RUIDMuMC4uLgorKi8KKyNpZm5kZWYgT0RUMzAKKyNpZm5kZWYgX1NDT19EUwor ICAgIGV4dGVybiB2b2lkIGZ0aW1lKCk7ICAvKiBleHRlcm4gdm9pZCBmdGltZShzdHJ1Y3QgdGlt ZWIgKikgKi8KKyNlbmRpZiAvKiBfU0NPX0RTICovCisjZW5kaWYgLyogT0RUMzAgKi8KKyNlbHNl CisjaWZuZGVmIE1fWEVOSVgKKyAgICBleHRlcm4gaW50IGZ0aW1lKCk7CisjZW5kaWYgLyogTV9Y RU5JWCAqLworI2VuZGlmIC8qIE1fVU5JWCAqLworICAgIGV4dGVybiBzdHJ1Y3QgdG0gKiBsb2Nh bHRpbWUoKTsKKworICAgIC8qIEFuZCB0aGlzIHNob3VsZCBoYXZlIGJlZW4gZGVjbGFyZWQgYWx3 YXlzIHRocm91Z2ggYSBoZWFkZXIgZmlsZSAqLworI2lmZGVmIEhQVVgxMAorICAgIHRpbWVfdCB0 bXg7CisgICAgbG9uZyBkYXlzOworI2Vsc2UKKyNpZmRlZiBCU0Q0NAorICAgIHRpbWVfdCB0bXg7 CisgICAgbG9uZyBkYXlzOworI2Vsc2UKKyAgICBsb25nIHRteCwgZGF5czsKKyNlbmRpZiAvKiBC U0Q0NCAqLworI2VuZGlmIC8qIEhQVVgxMCAqLworICAgIGludCBpLCBuLCBpc2xlYXB5ZWFyOwor ICAgICAgICAgICAgICAgICAgIC8qICAgICAgIEogIEYgIE0gIEEgICBNICAgSiAgIEogICBBICAg UyAgIE8gICBOICAgRCAgICovCisgICAgICAgICAgICAgICAgICAgLyogICAgICAzMSAyOCAzMSAz MCAgMzEgIDMwICAzMSAgMzEgIDMwICAzMSAgMzAgIDMxICAgKi8KKyAgICBzdGF0aWMKKyAgICBp bnQgbW9udGhkYXlzIFsxM10gPSB7ICAwLDAsMzEsNTksOTAsMTIwLDE1MSwxODEsMjEyLDI0Mywy NzMsMzA0LDMzNCB9OworICAgIGNoYXIgc1s1XTsKKyAgICBzdHJ1Y3QgdG0gKnRpbWVfc3RhbXA7 CisKKyNpZmRlZiBCU0Q0NAorICAgIHN0cnVjdCB0aW1ldmFsIHRwWzJdOworICAgIGxvbmcgeHRp bWV6b25lID0gMEw7CisjZWxzZQorI2lmZGVmIFY3CisgICAgc3RydWN0IHV0aW1idWYgeworICAg ICAgdGltZV90IHRpbWVwWzJdOyAgICAgICAgICAvKiBOZXcgYWNjZXNzIGFuZCBtb2RpZmljYXRv biB0aW1lICovCisgICAgfSB0cDsKKyAgICBjaGFyICp0ejsKKyAgICBsb25nIHRpbWV6b25lOyAg ICAgICAgICAgICAgLyogSW4gY2FzZSB0aW1lem9uZSBub3QgZGVmaW5lZCBpbiAuaCBmaWxlICov CisjZWxzZQorI2lmZGVmIFNZU1VUSU1FSAorICAgIHN0cnVjdCB1dGltYnVmIHRwOworI2Vsc2UK KyAgICBzdHJ1Y3QgdXRpbWJ1ZiB7CisgICAgICAgIHRpbWVfdCBhdGltZTsKKyAgICAgICAgdGlt ZV90IG10aW1lOworICAgIH0gdHA7CisjZW5kaWYgLyogU1lTVVRJTUVIICovCisjZW5kaWYgLyog VjcgKi8KKyNlbmRpZiAvKiBCU0Q0NCAqLworCisjaWZkZWYgQU5ZQlNECisgICAgbG9uZyB0aW1l em9uZSA9IDBMOworICAgIHN0YXRpYyBzdHJ1Y3QgdGltZWIgdGJwOworI2VuZGlmIC8qIEFOWUJT RCAqLworCisjaWZkZWYgQkVCT1gKKyAgICBsb25nIHRpbWV6b25lID0gMEw7CisjZW5kaWYgLyog QkVCT1ggKi8KKworICAgIGRlYnVnKEYxMTEsInpzdHJkdCIsZGF0ZSxsZW4pOworCisgICAgaWYg KChsZW4gPT0gMCkKKyAgICAgICAgfHwgKGxlbiAhPSAxNykKKyAgICAgICAgfHwgKGRhdGVbOF0g IT0gJyAnKQorICAgICAgICB8fCAoZGF0ZVsxMV0gIT0gJzonKQorICAgICAgICB8fCAoZGF0ZVsx NF0gIT0gJzonKSApIHsKKyAgICAgICAgZGVidWcoRjExMSwiQmFkIGNyZWF0aW9uIGRhdGUgIixk YXRlLGxlbik7CisgICAgICAgIHJldHVybigtMSk7CisgICAgfQorICAgIGRlYnVnKEYxMTEsInpz dHJkdCBkYXRlIGNoZWNrIDEiLGRhdGUsbGVuKTsKKyAgICBmb3IoaSA9IDA7IGkgPCA4OyBpKysp IHsKKyAgICAgICAgaWYgKCFpc2RpZ2l0KGRhdGVbaV0pKSB7CisgICAgICAgICAgICBkZWJ1ZyhG MTExLCJCYWQgY3JlYXRpb24gZGF0ZSAiLGRhdGUsbGVuKTsKKyAgICAgICAgICAgIHJldHVybigt MSk7CisgICAgICAgIH0KKyAgICB9CisgICAgZGVidWcoRjExMSwienN0cmR0IGRhdGUgY2hlY2sg MiIsZGF0ZSxsZW4pOworICAgIGkrKzsKKworICAgIGZvciAoOyBpIDwgMTY7IGkgKz0gMykgewor ICAgICAgICBpZiAoKCFpc2RpZ2l0KGRhdGVbaV0pKSB8fCAoIWlzZGlnaXQoZGF0ZVtpICsgMV0p KSkgeworICAgICAgICAgICAgZGVidWcoRjExMSwiQmFkIGNyZWF0aW9uIGRhdGUgIixkYXRlLGxl bik7CisgICAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICB9CisgICAgfQorICAgIGRlYnVn KEYxMTEsInpzdHJkdCBkYXRlIGNoZWNrIDMiLGRhdGUsbGVuKTsKKworCisjaWZkZWYgQ09NTUVO VCAvKiB3YXMgQlNENDQgKi8KKy8qCisgICBtYW4gZ2V0dGltZW9mZGF5IG9uIEJTREkgMy4xIHNh eXM6CisgICAiVGhlIHRpbWV6b25lIGZpZWxkIGlzIG5vIGxvbmdlciB1c2VkOyB0aW1lem9uZSBp bmZvcm1hdGlvbiBpcyBzdG9yZWQgb3V0LQorICAgICBzaWRlIHRoZSBrZXJuZWwuICBTZWUgY3Rp bWUoMykgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiAgU28gdGhpcyBjaHVuayBvZgorICAgY29kZSBp cyBlZmZlY3RpdmVseSBhIG5vLW9wLCBhdCBsZWFzdCBpbiBCU0RJIDMueC4KKyovCisgICAgewor ICAgICAgICBpbnQgeDsKKyAgICAgICAgc3RydWN0IHRpbWV6b25lIHR6cDsKKyAgICAgICAgeCA9 IGdldHRpbWVvZmRheShOVUxMLCAmdHpwKTsKKyAgICAgICAgZGVidWcoRjEwMSwienN0cmR0IEJT RDQ0IGdldHRpbWVvZmRheSIsIiIseCk7CisgICAgICAgIGlmICh4ID4gLTEpCisgICAgICAgICAg eHRpbWV6b25lID0gdHpwLnR6X21pbnV0ZXN3ZXN0ICogNjBMOworICAgICAgICBlbHNlCisgICAg ICAgICAgeHRpbWV6b25lID0gMEw7CisgICAgICAgIGRlYnVnKEYxMDEsInpzdHJkdCBCU0Q0NCB0 aW1lem9uZSIsIiIseHRpbWV6b25lKTsKKyAgICB9CisjZWxzZQorI2lmZGVmIEFOWUJTRAorICAg IGRlYnVnKEYxMDAsInpzdHJkdCBCU0QgY2FsbGluZyBmdGltZSIsIiIsMCk7CisgICAgZnRpbWUo JnRicCk7CisgICAgZGVidWcoRjEwMCwienN0cmR0IEJTRCBiYWNrIGZyb20gZnRpbWUiLCIiLDAp OworICAgIHRpbWV6b25lID0gdGJwLnRpbWV6b25lICogNjBMOworICAgIGRlYnVnKEYxMDEsInpz dHJkdCBCU0QgdGltZXpvbmUiLCIiLHRpbWV6b25lKTsKKyNlbHNlCisjaWZkZWYgU1ZPUlBPU0lY CisgICAgdHpzZXQoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2V0IHRpbWV6b25l ICovCisjZWxzZQorI2lmZGVmIFY3CisgICAgaWYgKCh0eiA9IGdldGVudigiVFoiKSkgPT0gTlVM TCkKKyAgICAgIHRpbWV6b25lID0gMDsgICAgICAgICAgICAgICAgICAgICAvKiBVVEMvR01UICov CisgICAgZWxzZQorICAgICAgdGltZXpvbmUgPSBhdG9pKCZ0elszXSk7ICAgICAgICAgIC8qIFNl dCAndGltZXpvbmUnLiAqLworICAgIHRpbWV6b25lICo9IDYwTDsKKyNlbmRpZiAvKiBWNyAqLwor I2VuZGlmIC8qIFNWT1JQT1NJWCAqLworI2VuZGlmIC8qIEFOWUJTRCAqLworI2VuZGlmIC8qIENP TU1FTlQgKHdhcyBCU0Q0NCkgKi8KKworICAgIGRlYnVnKEYxMDAsInpzdHJkdCBzbyBmYXIgc28g Z29vZCIsIiIsMCk7CisKKyAgICBzWzRdID0gJ1wwJzsKKyAgICBmb3IgKGkgPSAwOyBpIDwgNDsg aSsrKSAgICAgICAgICAgICAvKiBGaXggdGhlIHllYXIgKi8KKyAgICAgIHNbaV0gPSBkYXRlW2ld OworCisgICAgbiA9IGF0b2kocyk7CisgICAgZGVidWcoRjExMSwienN0cmR0IHllYXIiLHMsbik7 CisgICAgaWYgKG4gPCAxOTcwKSB7CisgICAgICAgIGRlYnVnKEYxMDAsInpzdHJkdCBmYWlscyAt IHllYXIiLCIiLG4pOworICAgICAgICByZXR1cm4oLTEpOworICAgIH0KKworLyogIFByZXZpb3Vz IHllYXIncyBsZWFwIGRheXMuICBUaGlzIHdvbid0IHdvcmsgYWZ0ZXIgeWVhciAyMTAwLiAqLwor CisgICAgaXNsZWFweWVhciA9ICgoIG4gJSA0ID09IDAgJiYgbiAlIDEwMCAhPTApIHx8IG4gJSA0 MDAgPT0gMCk7CisgICAgZGF5cyA9IChsb25nKSAobiAtIDE5NzApICogMzY1OworICAgIGRheXMg Kz0gKG4gLSAxOTY4IC0gMSkgLyA0IC0gKG4gLSAxOTAwIC0gMSkgLyAxMDAgKyAobiAtIDE2MDAg LSAxKSAvIDQwMDsKKworICAgIHNbMl0gPSAnXDAnOworCisgICAgZm9yIChpID0gNDsgaSA8IDE2 OyBpICs9IDIpIHsKKyAgICAgICAgc1swXSA9IGRhdGVbaV07CisgICAgICAgIHNbMV0gPSBkYXRl W2kgKyAxXTsKKyAgICAgICAgbiA9IGF0b2kocyk7CisgICAgICAgIHN3aXRjaCAoaSkgeworICAg ICAgICAgIGNhc2UgNDogICAgICAgICAgICAgICAgICAgICAgIC8qIE1NOiBtb250aCAqLworICAg ICAgICAgICAgaWYgKChuIDwgMSApIHx8ICggbiA+IDEyKSkgeworICAgICAgICAgICAgICAgIGRl YnVnKEYxMTEsInpzdHJkdCA0IGJhZCBkYXRlICIsZGF0ZSxsZW4pOworICAgICAgICAgICAgICAg IHJldHVybigtMSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkYXlzICs9IG1vbnRoZGF5 cyBbbl07CisgICAgICAgICAgICBpZiAoaXNsZWFweWVhciAmJiBuID4gMikKKyAgICAgICAgICAg ICAgKytkYXlzOworICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICBjYXNlIDY6ICAg ICAgICAgICAgICAgICAgICAgICAvKiBERDogZGF5ICovCisgICAgICAgICAgICBpZiAoKG4gPCAx ICkgfHwgKCBuID4gMzEpKSB7CisgICAgICAgICAgICAgICAgZGVidWcoRjExMSwienN0cmR0IDYg YmFkIGRhdGUgIixkYXRlLGxlbik7CisgICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIHRteCA9IChkYXlzICsgbiAtIDEpICogMjRMICogNjBMICog NjBMOworICAgICAgICAgICAgaSsrOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNraXAgdGhl IHNwYWNlICovCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgIGNhc2UgOTogICAg ICAgICAgICAgICAgICAgICAgIC8qIGhoOiBob3VyICovCisgICAgICAgICAgICBpZiAoKG4gPCAw ICkgfHwgKCBuID4gMjMpKSB7CisgICAgICAgICAgICAgICAgZGVidWcoRjExMSwienN0cmR0IDkg YmFkIGRhdGUgIixkYXRlLGxlbik7CisgICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIHRteCArPSBuICogNjBMICogNjBMOworICAgICAgICAgICAg aSsrOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNraXAgdGhlIGNvbG9uICovCisgICAgICAg ICAgICBjb250aW51ZTsKKworICAgICAgICAgIGNhc2UgMTI6ICAgICAgICAgICAgICAgICAgICAg IC8qIG1tOiBtaW51dGUgKi8KKyAgICAgICAgICAgIGlmICgobiA8IDAgKSB8fCAoIG4gPiA1OSkp IHsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJ6c3RyZHQgMTIgYmFkIGRhdGUgIixkYXRl LGxlbik7CisgICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgICAgIH0KKyNpZmRl ZiBDT01NRU5UIC8qICh3YXMgQlNENDQpICovICAgICAgICAvKiBDb3JyZWN0IGZvciB0aW1lIHpv bmUgKi8KKyAgICAgICAgICAgIHRteCArPSB4dGltZXpvbmU7CisgICAgICAgICAgICBkZWJ1ZyhG MTAxLCJ6c3RyZHQgQlNENDQgdG14IiwiIix0bXgpOworI2Vsc2UKKyNpZmRlZiBBTllCU0QKKyAg ICAgICAgICAgIHRteCArPSB0aW1lem9uZTsKKyNlbHNlCisjaWZuZGVmIENPTlZFWDkgLyogRG9u J3QgeWV0IGtub3cgaG93IHRvIGRvIHRoaXMgaGVyZSAqLworI2lmZGVmIHVsdHJpeAorICAgICAg ICAgICAgdG14ICs9IChsb25nKSB0aW1lem9uZTsKKyNlbHNlCisjaWZkZWYgUGxhbjkKKyAgICAg ICAgICAgIHsKKyAgICAgICAgICAgICAgICBleHRlcm4gdGltZV90IHR6b2Zmc2V0OworICAgICAg ICAgICAgICAgIHRteCArPSB0em9mZnNldDsKKyAgICAgICAgICAgIH0KKyNlbHNlCisjaWZuZGVm IEJTRDQ0CisjaWZuZGVmIE5PVElNRVpPTkUKKyAgICAgICAgICAgIHRteCArPSB0aW1lem9uZTsK KyNlbmRpZgkvKiBOT1RJTUVaT05FICovCisjZW5kaWYgLyogQlNENDQgKi8KKyNlbmRpZiAvKiBQ bGFuOSAqLworI2VuZGlmIC8qIHVsdHJpeCAqLworI2VuZGlmIC8qIENPTlZFWDkgKi8KKyNlbmRp ZiAvKiBBTllCU0QgKi8KKyNlbmRpZiAvKiBDT01NRU5UICh3YXMgQlNENDQpICovCisgICAgICAg ICAgICB0bXggKz0gbiAqIDYwTDsKKyAgICAgICAgICAgIGkrKzsgICAgICAgICAgICAgICAgICAg ICAgICAvKiBTa2lwIHRoZSBjb2xvbiAqLworICAgICAgICAgICAgY29udGludWU7CisKKyAgICAg ICAgICBjYXNlIDE1OiAgICAgICAgICAgICAgICAgICAgICAvKiBzczogc2Vjb25kICovCisgICAg ICAgICAgICBpZiAoKG4gPCAwICkgfHwgKCBuID4gNTkpKSB7CisgICAgICAgICAgICAgICAgZGVi dWcoRjExMSwienN0cmR0IDE1IGJhZCBkYXRlICIsZGF0ZSxsZW4pOworICAgICAgICAgICAgICAg IHJldHVybigtMSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0bXggKz0gbjsKKyAgICAg ICAgfQorICAgICAgICB0aW1lX3N0YW1wID0gbG9jYWx0aW1lKCZ0bXgpOworICAgICAgICBkZWJ1 ZyhGMTAxLCJ6c3RyZHQgdG14IDEiLCIiLHRteCk7CisgICAgICAgIGlmICghdGltZV9zdGFtcCkK KyAgICAgICAgICByZXR1cm4oLTEpOworI2lmZGVmIENPTU1FTlQKKyAgICAgICAgLyogV2h5IHdh cyB0aGlzIGhlcmU/ICovCisgICAgICAgIHRpbWVfc3RhbXAgPSBsb2NhbHRpbWUoJnRteCk7Cisg ICAgICAgIGRlYnVnKEYxMDEsInpzdHJkdCB0bXggMiIsIiIsdG14KTsKKyNlbmRpZiAvKiBDT01N RU5UICovCisjaWZkZWYgQlNENDQKKyAgICAgICAgeyAgIC8qIE5ldyB0byA3LjAgLSBXb3JrcyBp biBhdCBhdCBsZWFzdCBCU0RJIDMuMSBhbmQgRnJlZUJTRCAyLjIuNyAqLworICAgICAgICAgICAg bG9uZyB6ejsKKyAgICAgICAgICAgIHp6ID0gdGltZV9zdGFtcC0+dG1fZ210b2ZmOyAvKiBTZWNv bmRzIGF3YXkgZnJvbSBaZXJvIE1lcmlkaWFuICovCisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJ6 c3RyZHQgQlNENDQgdG1fZ210b2ZmIiwiIix6eik7CisgICAgICAgICAgICB0bXggLT0geno7Cisg ICAgICAgICAgICBkZWJ1ZyhGMTAxLCJ6c3RyZHQgQlNENDQgdG14IDMgKEdNVCkiLCIiLHRteCk7 CisgICAgICAgIH0KKyNlbHNlCisgICAgICAgIC8qCisgICAgICAgICAgIERheWxpZ2h0IFNhdmlu Z3MgVGltZSBhZGp1c3RtZW50LgorICAgICAgICAgICBEbyB0aGlzIGV2ZXJ5d2hlcmUgQlVUIGlu IEJTRDQ0IGJlY2F1c2UgaW4gQlNENDQsCisgICAgICAgICAgIHRtX2dtdG9mZiBhbHNvIGluY2x1 ZGVzIHRoZSBEU1QgYWRqdXN0bWVudC4KKyAgICAgICAgKi8KKyAgICAgICAgaWYgKHRpbWVfc3Rh bXAtPnRtX2lzZHN0KSB7CisgICAgICAgICAgICB0bXggLT0gNjBMICogNjBMOworICAgICAgICAg ICAgZGVidWcoRjEwMSwienN0cmR0IHRteCAzIChEU1QpIiwiIix0bXgpOworICAgICAgICB9Cisj ZW5kaWYgLyogQlNENDQgKi8KKyAgICAgICAgbiA9IHRpbWVfc3RhbXAtPnRtX3llYXI7CisgICAg ICAgIGlmIChuIDwgMzAwKSB7CisgICAgICAgICAgICBuICs9IDE5MDA7CisgICAgICAgIH0KKyAg ICB9CisgICAgcmV0dXJuKHRteCk7Cit9CisKKworI2lmZGVmIFpMT0NBTFRJTUUKKy8qIFogTCBP IEMgQSBMIFQgSSBNIEUgIC0tICBHTVQvVVRDIHRpbWUgc3RyaW5nIHRvIGxvY2FsIHRpbWUgc3Ry aW5nICovCisKKy8qCisgICBDYWxsIHdpdGg6ICJ5eXl5bW1kZCBoaDptbTpzcyIgR01UL1VUQyBk YXRlLXRpbWUuCisgICBSZXR1cm5zOiAgICJ5eXl5bW1kZCBoaDptbTpzcyIgbG9jYWwgZGF0ZS10 aW1lIG9uIHN1Y2Nlc3MsIE5VTEwgb24gZmFpbHVyZS4KKyovCitzdGF0aWMgY2hhciB6bHRpbWJ1 Zls2NF07CisKK2NoYXIgKgoremxvY2FsdGltZShnbXRzdHJpbmcpIGNoYXIgKiBnbXRzdHJpbmc7 IHsKKyNpZmRlZiBNX1VOSVgKKy8qCisgIFNDTyBVTklYIDMuMnYyLjAgYW5kIE9EVCAyLjAgbGFj ayBwcm90b3R5cGVzIGZvciBmdGltZSgpLgorICBPRFQgMy4wICgzLjJ2NC4yIE9TKSBoYXMgYSBw cm90b3R5cGUsIHdoaWNoIG1heSB2YXJ5IGluCisgIGRlcGVuZGVuY2Ugb24gdGhlIFhQRzQgc3Vw cGxlbWVudCBwcmVzZW5jZS4gIFNvIGFsd2F5cyB1c2UKKyAgd2hhdCB0aGUgc3lzdGVtIGhlYWRl ciBmaWxlIHN1cHBsaWVzIGluIE9EVCAzLjAuLi4KKyovCisjaWZuZGVmIE9EVDMwCisjaWZuZGVm IF9TQ09fRFMKKyAgICBleHRlcm4gdm9pZCBmdGltZSgpOyAgLyogZXh0ZXJuIHZvaWQgZnRpbWUo c3RydWN0IHRpbWViICopICovCisjZW5kaWYgLyogX1NDT19EUyAqLworI2VuZGlmIC8qIE9EVDMw ICovCisjZWxzZQorI2lmbmRlZiBNX1hFTklYCisgICAgZXh0ZXJuIGludCBmdGltZSgpOworI2Vu ZGlmIC8qIE1fWEVOSVggKi8KKyNlbmRpZiAvKiBNX1VOSVggKi8KKyAgICBleHRlcm4gc3RydWN0 IHRtICogbG9jYWx0aW1lKCk7CisKKyAgICAvKiBBbmQgdGhpcyBzaG91bGQgaGF2ZSBiZWVuIGRl Y2xhcmVkIGFsd2F5cyB0aHJvdWdoIGEgaGVhZGVyIGZpbGUgKi8KKyNpZmRlZiBIUFVYMTAKKyAg ICB0aW1lX3QgdG14OworICAgIGxvbmcgZGF5czsKKyNlbHNlCisjaWZkZWYgQlNENDQKKyAgICB0 aW1lX3QgdG14OworICAgIGxvbmcgZGF5czsKKyNlbHNlCisgICAgbG9uZyB0bXgsIGRheXM7Cisj ZW5kaWYgLyogQlNENDQgKi8KKyNlbmRpZiAvKiBIUFVYMTAgKi8KKyAgICBpbnQgaSwgbiwgeCwg aXNsZWFweWVhcjsKKyAgICAgICAgICAgICAgICAgICAvKiAgICAgICBKICBGICBNICBBICAgTSAg IEogICBKICAgQSAgIFMgICBPICAgTiAgIEQgICAqLworICAgICAgICAgICAgICAgICAgIC8qICAg ICAgMzEgMjggMzEgMzAgIDMxICAzMCAgMzEgIDMxICAzMCAgMzEgIDMwICAzMSAgICovCisgICAg c3RhdGljCisgICAgaW50IG1vbnRoZGF5cyBbMTNdID0geyAgMCwwLDMxLDU5LDkwLDEyMCwxNTEs MTgxLDIxMiwyNDMsMjczLDMwNCwzMzQgfTsKKyAgICBjaGFyIHNbNV07CisgICAgc3RydWN0IHRt ICp0aW1lX3N0YW1wOworCisjaWZkZWYgQlNENDQKKyAgICBzdHJ1Y3QgdGltZXZhbCB0cFsyXTsK KyNlbHNlCisjaWZkZWYgVjcKKyAgICBzdHJ1Y3QgdXRpbWJ1ZiB7CisgICAgICB0aW1lX3QgdGlt ZXBbMl07ICAgICAgICAgIC8qIE5ldyBhY2Nlc3MgYW5kIG1vZGlmaWNhdG9uIHRpbWUgKi8KKyAg ICB9IHRwOworI2Vsc2UKKyNpZmRlZiBTWVNVVElNRUgKKyAgICBzdHJ1Y3QgdXRpbWJ1ZiB0cDsK KyNlbHNlCisgICAgc3RydWN0IHV0aW1idWYgeworICAgICAgICB0aW1lX3QgYXRpbWU7CisgICAg ICAgIHRpbWVfdCBtdGltZTsKKyAgICB9IHRwOworI2VuZGlmIC8qIFNZU1VUSU1FSCAqLworI2Vu ZGlmIC8qIFY3ICovCisjZW5kaWYgLyogQlNENDQgKi8KKworI2lmZGVmIEFOWUJTRAorICAgIHN0 YXRpYyBzdHJ1Y3QgdGltZWIgdGJwOworI2VuZGlmIC8qIEFOWUJTRCAqLworCisgICAgY2hhciAq IGRhdGUgPSBnbXRzdHJpbmc7CisgICAgaW50IGxlbjsKKworICAgIGxlbiA9IHN0cmxlbihkYXRl KTsKKyAgICBkZWJ1ZyhGMTExLCJ6bG9jYWx0aW1lIixkYXRlLGxlbik7CisKKyAgICBpZiAoKGxl biA9PSAwKQorICAgICAgICB8fCAobGVuICE9IDE3KQorICAgICAgICB8fCAoZGF0ZVs4XSAhPSAn ICcpCisgICAgICAgIHx8IChkYXRlWzExXSAhPSAnOicpCisgICAgICAgIHx8IChkYXRlWzE0XSAh PSAnOicpICkgeworICAgICAgICBkZWJ1ZyhGMTExLCJCYWQgY3JlYXRpb24gZGF0ZSAiLGRhdGUs bGVuKTsKKyAgICAgICAgcmV0dXJuKE5VTEwpOworICAgIH0KKyAgICBkZWJ1ZyhGMTExLCJ6bG9j YWx0aW1lIGRhdGUgY2hlY2sgMSIsZGF0ZSxsZW4pOworICAgIGZvcihpID0gMDsgaSA8IDg7IGkr KykgeworICAgICAgICBpZiAoIWlzZGlnaXQoZGF0ZVtpXSkpIHsKKyAgICAgICAgICAgIGRlYnVn KEYxMTEsIkJhZCBjcmVhdGlvbiBkYXRlICIsZGF0ZSxsZW4pOworICAgICAgICAgICAgcmV0dXJu KE5VTEwpOworICAgICAgICB9CisgICAgfQorICAgIGRlYnVnKEYxMTEsInpsb2NhbHRpbWUgZGF0 ZSBjaGVjayAyIixkYXRlLGxlbik7CisgICAgaSsrOworCisgICAgZm9yICg7IGkgPCAxNjsgaSAr PSAzKSB7CisgICAgICAgIGlmICgoIWlzZGlnaXQoZGF0ZVtpXSkpIHx8ICghaXNkaWdpdChkYXRl W2kgKyAxXSkpKSB7CisgICAgICAgICAgICBkZWJ1ZyhGMTExLCJCYWQgY3JlYXRpb24gZGF0ZSAi LGRhdGUsbGVuKTsKKwkgICAgcmV0dXJuKE5VTEwpOworICAgICAgICB9CisgICAgfQorICAgIGRl YnVnKEYxMTEsInpsb2NhbHRpbWUgZGF0ZSBjaGVjayAzIixkYXRlLGxlbik7CisKKyAgICBkZWJ1 ZyhGMTAwLCJ6bG9jYWx0aW1lIHNvIGZhciBzbyBnb29kIiwiIiwwKTsKKworICAgIHNbNF0gPSAn XDAnOworICAgIGZvciAoaSA9IDA7IGkgPCA0OyBpKyspICAgICAgICAgICAgIC8qIEZpeCB0aGUg eWVhciAqLworICAgICAgc1tpXSA9IGRhdGVbaV07CisKKyAgICBuID0gYXRvaShzKTsKKyAgICBk ZWJ1ZyhGMTExLCJ6bG9jYWx0aW1lIHllYXIiLHMsbik7CisgICAgaWYgKG4gPCAxOTcwKSB7Cisg ICAgICAgIGRlYnVnKEYxMDAsInpsb2NhbHRpbWUgZmFpbHMgLSB5ZWFyIiwiIixuKTsKKyAgICAg ICAgcmV0dXJuKE5VTEwpOworICAgIH0KKworLyogIFByZXZpb3VzIHllYXIncyBsZWFwIGRheXMu ICBUaGlzIHdvbid0IHdvcmsgYWZ0ZXIgeWVhciAyMTAwLiAqLworCisgICAgaXNsZWFweWVhciA9 ICgoIG4gJSA0ID09IDAgJiYgbiAlIDEwMCAhPTApIHx8IG4gJSA0MDAgPT0gMCk7CisgICAgZGF5 cyA9IChsb25nKSAobiAtIDE5NzApICogMzY1OworICAgIGRheXMgKz0gKG4gLSAxOTY4IC0gMSkg LyA0IC0gKG4gLSAxOTAwIC0gMSkgLyAxMDAgKyAobiAtIDE2MDAgLSAxKSAvIDQwMDsKKworICAg IHNbMl0gPSAnXDAnOworCisgICAgZm9yIChpID0gNDsgaSA8IDE2OyBpICs9IDIpIHsKKyAgICAg ICAgc1swXSA9IGRhdGVbaV07CisgICAgICAgIHNbMV0gPSBkYXRlW2kgKyAxXTsKKyAgICAgICAg biA9IGF0b2kocyk7CisgICAgICAgIHN3aXRjaCAoaSkgeworICAgICAgICAgIGNhc2UgNDogICAg ICAgICAgICAgICAgICAgICAgIC8qIE1NOiBtb250aCAqLworICAgICAgICAgICAgaWYgKChuIDwg MSApIHx8ICggbiA+IDEyKSkgeworICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsInpsb2NhbHRp bWUgNCBiYWQgZGF0ZSAiLGRhdGUsbGVuKTsKKyAgICAgICAgICAgICAgICByZXR1cm4oTlVMTCk7 CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkYXlzICs9IG1vbnRoZGF5cyBbbl07CisgICAg ICAgICAgICBpZiAoaXNsZWFweWVhciAmJiBuID4gMikKKyAgICAgICAgICAgICAgKytkYXlzOwor ICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICBjYXNlIDY6ICAgICAgICAgICAgICAg ICAgICAgICAvKiBERDogZGF5ICovCisgICAgICAgICAgICBpZiAoKG4gPCAxICkgfHwgKCBuID4g MzEpKSB7CisgICAgICAgICAgICAgICAgZGVidWcoRjExMSwiemxvY2FsdGltZSA2IGJhZCBkYXRl ICIsZGF0ZSxsZW4pOworICAgICAgICAgICAgICAgIHJldHVybihOVUxMKTsKKyAgICAgICAgICAg IH0KKyAgICAgICAgICAgIHRteCA9IChkYXlzICsgbiAtIDEpICogMjRMICogNjBMICogNjBMOwor ICAgICAgICAgICAgaSsrOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNraXAgdGhlIHNwYWNl ICovCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgIGNhc2UgOTogICAgICAgICAg ICAgICAgICAgICAgIC8qIGhoOiBob3VyICovCisgICAgICAgICAgICBpZiAoKG4gPCAwICkgfHwg KCBuID4gMjMpKSB7CisgICAgICAgICAgICAgICAgZGVidWcoRjExMSwiemxvY2FsdGltZSA5IGJh ZCBkYXRlICIsZGF0ZSxsZW4pOworICAgICAgICAgICAgICAgIHJldHVybihOVUxMKTsKKyAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIHRteCArPSBuICogNjBMICogNjBMOworICAgICAgICAgICAg aSsrOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNraXAgdGhlIGNvbG9uICovCisgICAgICAg ICAgICBjb250aW51ZTsKKworICAgICAgICAgIGNhc2UgMTI6ICAgICAgICAgICAgICAgICAgICAg IC8qIG1tOiBtaW51dGUgKi8KKyAgICAgICAgICAgIGlmICgobiA8IDAgKSB8fCAoIG4gPiA1OSkp IHsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJ6bG9jYWx0aW1lIDEyIGJhZCBkYXRlICIs ZGF0ZSxsZW4pOworICAgICAgICAgICAgICAgIHJldHVybihOVUxMKTsKKyAgICAgICAgICAgIH0K KyAgICAgICAgICAgIHRteCArPSBuICogNjBMOworICAgICAgICAgICAgaSsrOyAgICAgICAgICAg ICAgICAgICAgICAgIC8qIFNraXAgdGhlIGNvbG9uICovCisgICAgICAgICAgICBjb250aW51ZTsK KworICAgICAgICAgIGNhc2UgMTU6ICAgICAgICAgICAgICAgICAgICAgIC8qIHNzOiBzZWNvbmQg Ki8KKyAgICAgICAgICAgIGlmICgobiA8IDAgKSB8fCAoIG4gPiA1OSkpIHsKKyAgICAgICAgICAg ICAgICBkZWJ1ZyhGMTExLCJ6bG9jYWx0aW1lIDE1IGJhZCBkYXRlICIsZGF0ZSxsZW4pOworICAg ICAgICAgICAgICAgIHJldHVybihOVUxMKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRt eCArPSBuOworICAgICAgICB9CisKKy8qCisgIEF0IHRoaXMgcG9pbnQgdG14IGlzIHRoZSB0aW1l X3QgcmVwcmVzZW50YXRpb24gb2YgdGhlIGFyZ3VtZW50IGRhdGUtdGltZQorICBzdHJpbmcgd2l0 aG91dCBhbnkgdGltZXpvbmUgb3IgRFNUIGFkanVzdG1lbnRzLiAgVGhlcmVmb3JlIGl0IHNob3Vs ZCBiZQorICB0aGUgc2FtZSBhcyB0aGUgdGltZV90IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBHTVQv VVRDIHRpbWUuICBOb3cgd2Ugc2hvdWxkCisgIGJlIGFibGUgdG8gZmVlZCBpdCB0byBsb2NhbHRp bWUoKSBhbmQgaGF2ZSBpdCBjb252ZXJ0ZWQgdG8gYSBzdHJ1Y3QgdG0KKyAgcmVwcmVzZW50aW5n IHRoZSBsb2NhbCB0aW1lIGVxdWl2YWxlbnQgb2YgdGhlIGdpdmVuIFVUQyB0aW1lLgorKi8KKyAg ICAgICAgdGltZV9zdGFtcCA9IGxvY2FsdGltZSgmdG14KTsKKyAgICAgICAgaWYgKCF0aW1lX3N0 YW1wKQorICAgICAgICAgIHJldHVybihOVUxMKTsKKyAgICB9CisKKy8qIE5vdyB3ZSBzaW1wbHkg cmVmb3JtYXQgdGhlIHN0cnVjdCB0bSB0byBhIHN0cmluZyAqLworCisgICAgeCA9IHRpbWVfc3Rh bXAtPnRtX3llYXI7CisgICAgaWYgKHRpbWVfc3RhbXAtPnRtX3llYXIgPCA3MCB8fCB0aW1lX3N0 YW1wLT50bV95ZWFyID4gODA5OSkKKyAgICAgIHJldHVybihOVUxMKTsKKyAgICBpZiAodGltZV9z dGFtcC0+dG1fbW9uIDwgMCB8fCB0aW1lX3N0YW1wLT50bV9tb24gPiAxMSkKKyAgICAgIHJldHVy bihOVUxMKTsKKyAgICBpZiAodGltZV9zdGFtcC0+dG1fbWRheSA8IDEgfHwgdGltZV9zdGFtcC0+ dG1fbWRheSA+IDMxKQorICAgICAgcmV0dXJuKE5VTEwpOworICAgIGlmICh0aW1lX3N0YW1wLT50 bV9ob3VyIDwgMCB8fCB0aW1lX3N0YW1wLT50bV9ob3VyID4gMjQpCisgICAgICByZXR1cm4oTlVM TCk7CisgICAgaWYgKHRpbWVfc3RhbXAtPnRtX21pbiA8IDAgfHwgdGltZV9zdGFtcC0+dG1fbWlu ID4gNjApCisgICAgICByZXR1cm4oTlVMTCk7CisgICAgaWYgKHRpbWVfc3RhbXAtPnRtX3NlYyA8 IDAgfHwgdGltZV9zdGFtcC0+dG1fc2VjID4gNjApCisgICAgICByZXR1cm4oTlVMTCk7CisgICAg c3ByaW50Zih6bHRpbWJ1ZiwiJTA0ZCUwMmQlMDJkICUwMmQ6JTAyZDolMDJkIiwKKwkgICAgdGlt ZV9zdGFtcC0+dG1feWVhciArIDE5MDAsCisJICAgIHRpbWVfc3RhbXAtPnRtX21vbiArIDEsCisJ ICAgIHRpbWVfc3RhbXAtPnRtX21kYXksCisJICAgIHRpbWVfc3RhbXAtPnRtX2hvdXIsCisJICAg IHRpbWVfc3RhbXAtPnRtX21pbiwKKwkgICAgdGltZV9zdGFtcC0+dG1fc2VjCisJICAgICk7Cisg ICAgcmV0dXJuKChjaGFyICopemx0aW1idWYpOworfQorI2VuZGlmIC8qIFpMT0NBTFRJTUUgKi8K KyNlbmRpZiAvKiBOT1RJTUVTVEFNUCAqLworCisvKiBaIFMgVCBJIE0gRSAgLS0gIFNldCBtb2Rp ZmljYXRpb24gZGF0ZS90aW1lK3Blcm1pc3Npb25zIGZvciBpbmNvbWluZyBmaWxlICovCisvKgor IENhbGwgd2l0aDoKKyBmICA9IHBvaW50ZXIgdG8gbmFtZSBvZiBleGlzdGluZyBmaWxlLgorIHl5 ID0gcG9pbnRlciB0byBhIEtlcm1pdCBmaWxlIGF0dHJpYnV0ZSBzdHJ1Y3R1cmUgaW4gd2hpY2gg eXktPmRhdGUudmFsCisgICAgICBpcyBhIGRhdGUgb2YgdGhlIGZvcm0geXl5eW1tZGQgaGg6bW06 c3MsIGUuZy4gMTk5MDAyMDggMTM6MDA6MDAuCisgICAgICB5eS0+bHByb3RlY3QudmFsICYgeXkt Pmdwcm90ZWN0LnZhbCBhcmUgcGVybWlzc2lvbi9wcm90ZWN0aW9uIHZhbHVlcy4KKyB4ICA9IGlz IGEgZnVuY3Rpb24gY29kZTogMCBtZWFucyB0byBzZXQgdGhlIGZpbGUncyBhdHRyaWJ1dGVzIGFz IGdpdmVuLgorICAgICAgMSBtZWFucyBjb21wYXJlIHRoZSBkYXRlIGluIHN0cnVjdCB5eSB3aXRo IHRoZSBmaWxlIGNyZWF0aW9uIGRhdGUuCisgUmV0dXJuczoKKyAtMSBvbiBhbnkga2luZCBvZiBl cnJvci4KKyAgMCBpZiB4IGlzIDAgYW5kIHRoZSBhdHRyaWJ1dGVzIHdlcmUgc2V0IHN1Y2Nlc3Nm dWxseS4KKyAgMCBpZiB4IGlzIDEgYW5kIGRhdGUgZnJvbSBhdHRyaWJ1dGUgc3RydWN0dXJlIDw9 IGZpbGUgY3JlYXRpb24gZGF0ZS4KKyAgMSBpZiB4IGlzIDEgYW5kIGRhdGUgZnJvbSBhdHRyaWJ1 dGUgc3RydWN0dXJlID4gZmlsZSBjcmVhdGlvbiBkYXRlLgorKi8KK2ludAorenN0aW1lKGYseXks eCkKKyAgICBjaGFyICpmOyBzdHJ1Y3QgemF0dHIgKnl5OyBpbnQgeDsKKy8qIHpzdGltZSAqLyB7 CisgICAgaW50IHIgPSAtMTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmV0dXJuIGNvZGUg Ki8KKyNpZmRlZiBDS19QRVJNUworICAgIGludCBzZXRwZXJtcyA9IDA7CisjZW5kaWYgLyogQ0tf UEVSTVMgKi8KKyAgICBpbnQgc2V0ZGF0ZSA9IDA7CisKKy8qIEl0IGlzIGlmZGVmJ2QgVElNRVNU QU1QIGJlY2F1c2UgaXQgbWlnaHQgbm90IHdvcmsgb24gVjcuIGJrQGt1bGxtYXIuc2UuICAqLwor CisjaWZkZWYgVElNRVNUQU1QCisjaWZkZWYgQlNENDQKKyAgICBleHRlcm4gaW50IHV0aW1lcygp OworI2Vsc2UKKyAgICBleHRlcm4gaW50IHV0aW1lKCk7CisjZW5kaWYgLyogQlNENDQgKi8KKwor ICAgIHN0cnVjdCBzdGF0IHNiOworCisvKiBBdCBsZWFzdCwgdGhlIGRlY2xhcmF0aW9ucyBmb3Ig aW50IGZ1bmN0aW9ucyBhcmUgbm90IG5lZWRlZCBhbnl3YXkgKi8KKworI2lmZGVmIEJTRDQ0Cisg ICAgc3RydWN0IHRpbWV2YWwgdHBbMl07CisgICAgbG9uZyB4dGltZXpvbmU7CisjZWxzZQorI2lm ZGVmIFY3CisgICAgc3RydWN0IHV0aW1idWYgeworCXRpbWVfdCB0aW1lcFsyXTsJCS8qIE5ldyBh Y2Nlc3MgYW5kIG1vZGlmaWNhdG9uIHRpbWUgKi8KKyAgICB9IHRwOworICAgIGNoYXIgKnR6Owor ICAgIGxvbmcgdGltZXpvbmU7ICAgICAgICAgICAgICAgICAgICAgIC8qIEluIGNhc2Ugbm90IGRl ZmluZWQgaW4gLmggZmlsZSAqLworI2Vsc2UKKyNpZmRlZiBTWVNVVElNRUgKKyAgICBzdHJ1Y3Qg dXRpbWJ1ZiB0cDsKKyNlbHNlCisgICAgc3RydWN0IHV0aW1idWYgeworICAgICAgICB0aW1lX3Qg YXRpbWU7CisgICAgICAgIHRpbWVfdCBtdGltZTsKKyAgICB9IHRwOworI2VuZGlmIC8qIFNZU1VU SU1FSCAqLworI2VuZGlmIC8qIFY3ICovCisjZW5kaWYgLyogQlNENDQgKi8KKworICAgIGxvbmcg dG0gPSAwTDsKKworICAgIGlmICghZikgZiA9ICIiOworICAgIGlmICghKmYpIHJldHVybigtMSk7 CisgICAgaWYgKCF5eSkgcmV0dXJuKC0xKTsKKworI2lmZGVmIENLUk9PVAorICAgIGRlYnVnKEYx MTEsInpzdGltZSBzZXRyb290Iixja3Jvb3QsY2tyb290c2V0KTsKKyAgICBpZiAoY2tyb290c2V0 KSBpZiAoIXppbnJvb3QoZikpIHsKKwlkZWJ1ZyhGMTEwLCJ6c3RpbWUgc2V0cm9vdCB2aW9sYXRp b24iLGYsMCk7CisJcmV0dXJuKDApOworICAgIH0KKyNlbmRpZiAvKiBDS1JPT1QgKi8KKworICAg IGlmICh5eS0+ZGF0ZS5sZW4gPT0gMCkgeyAgICAgICAgICAgIC8qIE5vIGRhdGUgaW4gc3RydWN0 ICovCisgICAgICAgIGlmICh5eS0+bHByb3RlY3QubGVuICE9IDApIHsgICAgLyogU28gZ28gZG8g cGVybWlzc2lvbnMgKi8KKyAgICAgICAgICAgIGdvdG8genNwZXJtczsKKyAgICAgICAgfSBlbHNl IHsKKyAgICAgICAgICAgIGRlYnVnKEYxMDAsInpzdGltZTogbm90aGluZyB0byBkbyIsIiIsMCk7 CisgICAgICAgICAgICByZXR1cm4oMCk7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKCh0bSA9 IHpzdHJkdCh5eS0+ZGF0ZS52YWwseXktPmRhdGUubGVuKSkgPCAwKSB7CisgICAgICAgIGRlYnVn KEYxMDEsInpzdGltZTogenN0cmR0IGZhaWxzIiwiIiwwKTsKKyAgICAgICAgcmV0dXJuKC0xKTsK KyAgICB9CisgICAgZGVidWcoRjEwMSwienN0aW1lOiB0bSIsIiIsdG0pOworICAgIGRlYnVnKEYx MTEsInpzdGltZTogQS1wa3QgZGF0ZSBvayAiLHl5LT5kYXRlLnZhbCx5eS0+ZGF0ZS5sZW4pOwor CisgICAgaWYgKHN0YXQoZiwmc2IpKSB7ICAgICAgICAgICAgICAgICAgLyogR2V0IHRoZSB0aW1l IGZvciB0aGUgZmlsZSAqLworCWRlYnVnKEYxMDEsIlNUQVQiLCIiLDE0KTsKKyAgICAgICAgZGVi dWcoRjExMSwienN0aW1lOiBDYW4ndCBzdGF0IGZpbGU6IixmLGVycm5vKTsKKyAgICAgICAgcmV0 dXJuKC0xKTsKKyAgICB9CisgICAgZGVidWcoRjEwMSwiU1RBVCIsIiIsMTUpOworICAgIHNldGRh dGUgPSAxOworCisgIHpzcGVybXM6CisjaWZkZWYgQ0tfUEVSTVMKKyAgICB7CisgICAgICAgIGlu dCBpLCB4ID0gMCwgeHgsIGZsYWcgPSAwOworICAgICAgICBjaGFyICogczsKKyNpZmRlZiBERUJV RworICAgICAgICBjaGFyIG9idWZbMjRdOworICAgICAgICBpZiAoZGVibG9nKSB7CisgICAgICAg ICAgICBkZWJ1ZyhGMTExLCJ6c3RpbWUgbHBlcm1zIix5eS0+bHByb3RlY3QudmFsLHl5LT5scHJv dGVjdC5sZW4pOworICAgICAgICAgICAgZGVidWcoRjExMSwienN0aW1lIGdwZXJtcyIseXktPmdw cm90ZWN0LnZhbCx5eS0+Z3Byb3RlY3QubGVuKTsKKyAgICAgICAgICAgIGRlYnVnKEYxMTAsInpz dGltZSBzeXN0ZW0gaWQiLHl5LT5zeXN0ZW1pZC52YWwsMCk7CisgICAgICAgICAgICBzcHJpbnRm KG9idWYsIiVvIixzYi5zdF9tb2RlKTsKKyAgICAgICAgICAgIGRlYnVnKEYxMTAsInpzdGltZSBm aWxlIHBlcm1zIGJlZm9yZSIsb2J1ZiwwKTsKKyAgICAgICAgfQorI2VuZGlmIC8qIERFQlVHICov CisKKyNpZmRlZiBDS19MT0dJTgorICAgICAgICBkZWJ1ZyhGMTAxLCJ6c3RpbWUgaXNndWVzdCIs IiIsaXNndWVzdCk7CisgICAgICAgIGRlYnVnKEYxMDEsInpzdGltZSBja3hwZXJtcyIsIiIsY2t4 cGVybXMpOworICAgICAgICBpZiAoaXNndWVzdCkgeworI2lmZGVmIENPTU1FTlQKKyAgICAgICAg ICAgIC8qIENsZWFyIG93bmVyIHBlcm1pc3Npb25zICovCisgICAgICAgICAgICBzYi5zdF9tb2Rl ICY9ICh1bnNpZ25lZCkgMDE3NzA3NzsgLyogKDE2IGJpdHMpICovCisjZWxzZQorICAgICAgICAg ICAgLyogU2V0IHBlcm1pc3Npb25zIGZyb20gY2t4cGVybXMgdmFyaWFibGUgKi8KKyAgICAgICAg ICAgIHNiLnN0X21vZGUgPSBja3hwZXJtczsKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgICAg ICAgICBkZWJ1ZyhGMTAxLCJ6c3RpbWUgaXNndWVzdCBzYi5zdF9tb2RlIiwiIixzYi5zdF9tb2Rl KTsKKyNpZmRlZiBDT01NRU5UCisgICAgICAgICAgICAvKiBXZSBhbHJlYWR5IHNldCB0aGVtIGlu IHpvcGVubygpICovCisgICAgICAgICAgICBzZXRwZXJtcyA9IDE7CisjZW5kaWYgLyogQ09NTUVO VCAqLworICAgICAgICAgICAgZmxhZyA9IDA7CisgICAgICAgIH0gZWxzZQorI2VuZGlmIC8qIENL X0xPR0lOICovCisgICAgICAgICAgaWYgKCh5eS0+bHByb3RlY3QubGVuID4gMCAmJiAgLyogSGF2 ZSBsb2NhbC1mb3JtYXQgcGVybWlzc2lvbnMgKi8KKyAgICAgICAgICAgIHl5LT5zeXN0ZW1pZC5s ZW4gPiAwICYmICAgICAvKiBmcm9tIEEtcGFja2V0Li4uICovCisjaWZkZWYgVU5JWAorICAgICAg ICAgICAgIXN0cmNtcCh5eS0+c3lzdGVtaWQudmFsLCJVMSIpIC8qIEFORCB5b3UgYXJlIHNhbWUg YXMgbWUgKi8KKyNlbHNlCisgICAgICAgICAgICAwCisjZW5kaWYgLyogVU5JWCAqLworICAgICAg ICAgICAgICkgfHwgKHl5LT5scHJvdGVjdC5sZW4gPCAwKSAvKiBPUiBieSBpbmhlcml0YW5jZSBm cm9tIG9sZCBmaWxlICovCisgICAgICAgICAgICApIHsKKyAgICAgICAgICAgIGZsYWcgPSAxOwor ICAgICAgICAgICAgcyA9IHl5LT5scHJvdGVjdC52YWw7ICAgICAgIC8qIFVOSVggZmlsZW1vZGUg Ki8KKyAgICAgICAgICAgIHh4ID0geXktPmxwcm90ZWN0LmxlbjsKKyAgICAgICAgICAgIGlmICh4 eCA8IDApICAgICAgICAgICAgICAgICAvKiBsZW4gPCAwIG1lYW5zIGluaGVyaXRhbmNlICovCisg ICAgICAgICAgICAgIHh4ID0gMCAtIHh4OworICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHh4 OyBpKyspIHsgIC8qIERlY29kZSBvY3RhbCBzdHJpbmcgKi8KKyAgICAgICAgICAgICAgICBpZiAo KnMgPD0gJzcnICYmICpzID49ICcwJykgeworICAgICAgICAgICAgICAgICAgICB4ID0gOCAqIHgg KyAoaW50KSgqcykgLSAnMCc7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg ICAgICAgICAgZmxhZyA9IDA7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgICBzKys7CisgICAgICAgICAgICB9CisjaWZkZWYgREVC VUcKKyAgICAgICAgICAgIHNwcmludGYob2J1ZiwiJW8iLHgpOworICAgICAgICAgICAgZGVidWco RjExMCwienN0aW1lIG9jdGFsIGxwZXJtIixvYnVmLDApOworI2VuZGlmIC8qIERFQlVHICovCisg ICAgICAgIH0gZWxzZSBpZiAoIWZsYWcgJiYgeXktPmdwcm90ZWN0LmxlbiA+IDApIHsKKyAgICAg ICAgICAgIGludCBnOworI2lmZGVmIENLX1NDTzMyVjQKKyAgICAgICAgICAgIG1vZGVfdCBtYXNr OworI2Vsc2UKKyAgICAgICAgICAgIGludCBtYXNrOworI2VuZGlmIC8qIENLX1NDTzMyVjQgKi8K KyAgICAgICAgICAgIG1hc2sgPSB1bWFzaygwKTsgICAgICAgICAgICAvKiBHZXQgdW1hc2sgKi8K KyAgICAgICAgICAgIGRlYnVnKEYxMDEsInpzdGltZSBtYXNrIDEiLCIiLG1hc2spOworICAgICAg ICAgICAgdW1hc2sobWFzayk7ICAgICAgICAgICAgICAgIC8qIFB1dCBpdCBiYWNrICovCisgICAg ICAgICAgICBtYXNrIF49IDA3Nzc7ICAgICAgICAgICAgICAgLyogRmxpcCB0aGUgYml0cyAqLwor ICAgICAgICAgICAgZGVidWcoRjEwMSwienN0aW1lIG1hc2sgMiIsIiIsbWFzayk7CisgICAgICAg ICAgICBnID0geHVuY2hhcigqKHl5LT5ncHJvdGVjdC52YWwpKTsgLyogRGVjb2RlIGdlbmVyaWMg cHJvdGVjdGlvbiAqLworICAgICAgICAgICAgZGVidWcoRjEwMSwienN0aW1lIGdwcm90ZWN0Iiwi IixnKTsKKyNpZmRlZiBTX0lSVVNSCisgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJ6c3RpbWUgU19J UlVTUiIsIiIsMCk7CisgICAgICAgICAgICBpZiAoZyAmIDEpIHggfD0gU19JUlVTUjsgICAgLyog UmVhZCBwZXJtaXNzaW9uICovCisgICAgICAgICAgICBmbGFnID0gMTsKKyNlbmRpZiAvKiBTX0lS VVNSICovCisjaWZkZWYgU19JV1VTUgorICAgICAgICAgICAgZGVidWcoRjEwMCwienN0aW1lIFNf SVdVU1IiLCIiLDApOworICAgICAgICAgICAgaWYgKGcgJiAyKSB4IHw9IFNfSVdVU1I7ICAgIC8q IFdyaXRlIHBlcm1pc3Npb24gKi8KKyAgICAgICAgICAgIGlmIChnICYgMTYpIHggfD0gU19JV1VT UjsgICAvKiBEZWxldGUgcGVybWlzc2lvbiAqLworICAgICAgICAgICAgZmxhZyA9IDE7CisjZW5k aWYgLyogU19JV1VTUiAqLworI2lmZGVmIFNfSVhVU1IKKyAgICAgICAgICAgIGRlYnVnKEYxMDAs InpzdGltZSBTX0lYVVNSIiwiIiwwKTsKKyAgICAgICAgICAgIGlmIChnICYgNCkgICAgICAgICAg ICAgICAgICAvKiBIYXMgZXhlY3V0ZSBwZXJtaXNzaW9uIGJpdCAqLworICAgICAgICAgICAgICB4 IHw9IFNfSVhVU1I7CisgICAgICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgLyog RG9lc24ndCBoYXZlIGl0ICovCisgICAgICAgICAgICAgIG1hc2sgJj0gMDY2NjsgICAgICAgICAg ICAgLyogc28gYWxzbyBjbGVhciBpdCBvdXQgb2YgbWFzayAqLworICAgICAgICAgICAgZmxhZyA9 IDE7CisjZW5kaWYgLyogU19JWFVTUiAqLworICAgICAgICAgICAgZGVidWcoRjEwMSwienN0aW1l IG1hc2sgeCIsIiIseCk7CisgICAgICAgICAgICB4IHw9IG1hc2s7CisgICAgICAgICAgICBkZWJ1 ZyhGMTAxLCJ6c3RpbWUgbWFzayB4fG1hc2siLCIiLHgpOworICAgICAgICB9CisgICAgICAgIGRl YnVnKEYxMDEsInpzdGltZSBmbGFnIiwiIixmbGFnKTsKKyAgICAgICAgaWYgKGZsYWcpIHsKKyNp ZmRlZiBTX0lGTVQKKyAgICAgICAgICAgIGRlYnVnKEYxMDEsInpzdGltZSBTX0lGTVQgeCIsIiIs eCk7CisgICAgICAgICAgICBzYi5zdF9tb2RlID0gKHNiLnN0X21vZGUgJiBTX0lGTVQpIHwgeDsK KyAgICAgICAgICAgIHNldHBlcm1zID0gMTsKKyNlbHNlCisjaWZkZWYgX0lGTVQKKyAgICAgICAg ICAgIGRlYnVnKEYxMDEsInpzdGltZSBfSUZNVCB4IiwiIix4KTsKKyAgICAgICAgICAgIHNiLnN0 X21vZGUgPSAoc2Iuc3RfbW9kZSAmIF9JRk1UKSB8IHg7CisgICAgICAgICAgICBzZXRwZXJtcyA9 IDE7CisjZW5kaWYgLyogX0lGTVQgKi8KKyNlbmRpZiAvKiBTX0lGTVQgKi8KKyAgICAgICAgfQor I2lmZGVmIERFQlVHCisgICAgICAgIHNwcmludGYob2J1ZiwiJTA0byIsc2Iuc3RfbW9kZSk7Cisg ICAgICAgIGRlYnVnKEYxMTEsInpzdGltZSBmaWxlIHBlcm1zIGFmdGVyIixvYnVmLHNldHBlcm1z KTsKKyNlbmRpZiAvKiBERUJVRyAqLworICAgIH0KKyNlbmRpZiAvKiBDS19QRVJNUyAqLworCisg ICAgZGVidWcoRjEwMSwienN0aW1lOiBzYi5zdF9hdGltZSIsIiIsc2Iuc3RfYXRpbWUpOworCisj aWZkZWYgQlNENDQKKyAgICB0cFswXS50dl9zZWMgPSBzYi5zdF9hdGltZTsgICAgICAgICAvKiBB Y2Nlc3MgdGltZSBmaXJzdCAqLworICAgIHRwWzFdLnR2X3NlYyA9IHRtOyAgICAgICAgICAgICAg ICAgIC8qIFVwZGF0ZSB0aW1lIHNlY29uZCAqLworICAgIGRlYnVnKEYxMDAsInpzdGltZTogQlNE NDQgbW9kdGltZSIsIiIsMCk7CisjZWxzZQorI2lmZGVmIFY3CisgICAgdHAudGltZXBbMF0gPSB0 bTsgICAgICAgICAgICAgICAgICAgLyogU2V0IG1vZGlmLiB0aW1lIHRvIGNyZWF0aW9uIGRhdGUg Ki8KKyAgICB0cC50aW1lcFsxXSA9IHNiLnN0X2F0aW1lOyAgICAgICAgICAvKiBEb24ndCBjaGFu Z2UgdGhlIGFjY2VzcyB0aW1lICovCisgICAgZGVidWcoRjEwMCwienN0aW1lOiBWNyBtb2R0aW1l IiwiIiwwKTsKKyNlbHNlCisjaWZkZWYgU1lTVVRJTUVICisgICAgdHAubW9kdGltZSA9IHRtOyAg ICAgICAgICAgICAgICAgICAgLyogU2V0IG1vZGlmLiB0aW1lIHRvIGNyZWF0aW9uIGRhdGUgKi8K KyAgICB0cC5hY3RpbWUgPSBzYi5zdF9hdGltZTsgICAgICAgICAgICAvKiBEb24ndCBjaGFuZ2Ug dGhlIGFjY2VzcyB0aW1lICovCisgICAgZGVidWcoRjEwMCwienN0aW1lOiBTWVNVVElNRUggbW9k dGltZSIsIiIsMCk7CisjZWxzZQorICAgIHRwLm10aW1lID0gdG07ICAgICAgICAgICAgICAgICAg ICAgIC8qIFNldCBtb2RpZi4gdGltZSB0byBjcmVhdGlvbiBkYXRlICovCisgICAgdHAuYXRpbWUg PSBzYi5zdF9hdGltZTsgICAgICAgICAgICAgLyogRG9uJ3QgY2hhbmdlIHRoZSBhY2Nlc3MgdGlt ZSAqLworICAgIGRlYnVnKEYxMDAsInpzdGltZTogZGVmYXVsdCBtb2R0aW1lIiwiIiwwKTsKKyNl bmRpZiAvKiBTWVNVVElNRUggKi8KKyNlbmRpZiAvKiBWNyAqLworI2VuZGlmIC8qIEJTRDQ0ICov CisKKyAgICBzd2l0Y2ggKHgpIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBFeGVjdXRlIGRl c2lyZWQgZnVuY3Rpb24gKi8KKyAgICAgIGNhc2UgMDogICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBTZXQgdGhlIGNyZWF0aW9uIGRhdGUgb2YgdGhlIGZpbGUgKi8KKyNpZmRlZiBDS19QRVJN UyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBbmQgcGVybWlzc2lvbnMgKi8KKy8qCisgIE5P VEU6IElmIHdlIGFyZSBpbmhlcml0aW5nIHBlcm1pc3Npb25zIGZyb20gYSBwcmV2aW91cyBmaWxl LCBhbmQgdGhlCisgIHByZXZpb3VzIGZpbGUgd2FzIGEgZGlyZWN0b3J5LCB0aGlzIHdvdWxkIHR1 cm4gdGhlIG5ldyBmaWxlIGludG8gYSBkaXJlY3RvcnkKKyAgdG9vLCBidXQgaXQncyBub3QsIHNv IHdlIHRyeSB0byB1bnNldCB0aGUgcmlnaHQgYml0LiAgTHVja2lseSwgdGhpcyBjb2RlCisgIHdp bGwgcHJvYmFibHkgbmV2ZXIgYmUgZXhlY3V0ZWQgc2luY2UgdGhlIHVwcGVyIGxldmVsIG1vZHVs ZXMgZG8gbm90IGFsbG93CisgIHJlY2VwdGlvbiBvZiBhIGZpbGUgdGhhdCBoYXMgdGhlIHNhbWUg bmFtZSBhcyBhIGRpcmVjdG9yeS4KKworICBOT1RFIDI6IFdlIGNoYW5nZSB0aGUgcGVybWlzc2lv bnMgKmJlZm9yZSogd2UgY2hhbmdlIHRoZSBtb2RpZmljYXRpb24gdGltZSwKKyAgb3RoZXJ3aXNl IGNoYW5naW5nIHRoZSBwZXJtaXNzaW9ucyB3b3VsZCBzZXQgdGhlIG1vZCB0aW1lIHRvIHRoZSBw cmVzZW50CisgIHRpbWUuCisqLworICAgICAgICB7CisgICAgICAgICAgICBpbnQgeDsKKyAgICAg ICAgICAgIGRlYnVnKEYxMDEsInpzdGltZSBzZXRwZXJtcyIsIiIsc2V0cGVybXMpOworICAgICAg ICAgICAgaWYgKFNfSVNESVIoc2Iuc3RfbW9kZSkpIHsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhG MTAxLCJ6c3RpbWUgRElSRUNUT1JZIGJpdCBvbiIsIiIsc2Iuc3RfbW9kZSk7CisgICAgICAgICAg ICAgICAgc2Iuc3RfbW9kZSBePSAwMDQwMDAwOworICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEs InpzdGltZSBESVJFQ1RPUlkgYml0IG9mZiIsIiIsc2Iuc3RfbW9kZSk7CisgICAgICAgICAgICB9 CisgICAgICAgICAgICBpZiAoc2V0cGVybXMpIHsKKyAgICAgICAgICAgICAgICB4ID0gY2htb2Qo ZixzYi5zdF9tb2RlKTsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJ6c3RpbWUgY2htb2Qi LCIiLHgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICh4IDwgMCkgcmV0 dXJuKC0xKTsKKyNlbmRpZiAvKiBDS19QRVJNUyAqLworCisgICAgICAgIGlmICghc2V0ZGF0ZSkg ICAgICAgICAgICAgICAgICAgLyogV2UgZG9uJ3QgaGF2ZSBhIGRhdGUgKi8KKyAgICAgICAgICBy ZXR1cm4oMCk7ICAgICAgICAgICAgICAgICAgICAvKiBzbyBza2lwIHRoZSBmb2xsb3dpbmcuLi4g Ki8KKworICAgICAgICBpZiAoCisjaWZkZWYgQlNENDQKKyAgICAgICAgICAgIHV0aW1lcyhmLHRw KQorI2Vsc2UKKyAgICAgICAgICAgIHV0aW1lKGYsJnRwKQorI2VuZGlmIC8qIEJTRDQ0ICovCisg ICAgICAgICAgICApIHsgICAgICAgICAgICAgICAgICAgICAgICAgLyogRml4IG1vZGlmaWNhdGlv biB0aW1lICovCisgICAgICAgICAgICBkZWJ1ZyhGMTExLCJ6c3RpbWUgMDogY2FuJ3Qgc2V0IG1v ZHRpbWUgZm9yIGZpbGUiLGYsZXJybm8pOworICAgICAgICAgICAgciA9IC0xOworICAgICAgICB9 IGVsc2UgIHsKKwkgICAgLyogSW5jbHVkaW5nIHRoZSBtb2R0aW1lIGhlcmUgaXMgbm90IHBvcnRh YmxlICovCisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJ6c3RpbWUgMDogbW9kdGltZSBzZXQgZm9y IGZpbGUiLGYsMCk7CisgICAgICAgICAgICByID0gMDsKKyAgICAgICAgfQorICAgICAgICBicmVh azsKKworICAgICAgY2FzZSAxOiAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvbXBhcmUg dGhlIGRhdGVzICovCisvKgorICBUaGlzIHdhcyBzdF9hdGltZSwgd2hpY2ggd2FzIHdyb25nLiAg V2Ugd2FudCB0aGUgZmlsZS1kYXRhIG1vZGlmaWNhdGlvbgorICB0aW1lLCBzdF9tdGltZS4KKyov CisgICAgICAgIGRlYnVnKEYxMTEsInpzdGltZSAxOiBjb21wYXJlIixmLHNiLnN0X210aW1lKTsK KyAgICAgICAgZGVidWcoRjExMSwienN0aW1lIDE6IGNvbXBhcmUiLCJwYWNrZXQiLHRtKTsKKwor ICAgICAgICByID0gKHNiLnN0X210aW1lIDwgdG0pID8gMCA6IDE7CisgICAgICAgIGJyZWFrOwor CisgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRXJyb3IgKi8KKyAg ICAgICAgciA9IC0xOworICAgIH0KKyNlbmRpZiAvKiBUSU1FU1RBTVAgKi8KKyAgICByZXR1cm4o cik7Cit9CisKKy8qIEZpbmQgaW5pdGlhbGl6YXRpb24gZmlsZS4gKi8KKworI2lmZGVmIE5PVFVT RUQKK2ludAoremtlcm1pbmkoKSB7CisvKiAgbm90aGluZyBoZXJlIGZvciBVbml4LiAgVGhpcyBm dW5jdGlvbiBhZGRlZCBmb3IgYmVuZWZpdCBvZiBWTVMgS2VybWl0LiAgKi8KKyAgICByZXR1cm4o MCk7Cit9CisjZW5kaWYgLyogTk9UVVNFRCAqLworCisjaWZuZGVmIFVOSVgKKy8qIEhpc3Rvcmlj YWwgLS0gbm90IHVzZWQgaW4gVW5peCBhbnkgbW9yZSAoMjAwMS0xMS0wMykgKi8KKyNpZm5kZWYg Tk9GUklMTFMKK2ludAorem1haWwocCxmKSBjaGFyICpwOyBjaGFyICpmOyB7ICAgICAgICAgIC8q IFNlbmQgZmlsZSBmIGFzIG1haWwgdG8gYWRkcmVzcyBwICovCisvKgorICBSZXR1cm5zIDAgb24g c3VjY2VzcworICAgMiBpZiBtYWlsIGRlbGl2ZXJlZCBidXQgdGVtcCBmaWxlIGNhbid0IGJlIGRl bGV0ZWQKKyAgLTIgaWYgbWFpbCBjYW4ndCBiZSBkZWxpdmVyZWQKKyAgLTEgb24gZmlsZSBhY2Nl c3MgZXJyb3IKKyAgVGhlIFVOSVggdmVyc2lvbiBhbHdheXMgcmV0dXJucyAwIGJlY2F1c2UgaXQg Y2FuJ3QgZ2V0IGEgZ29vZCByZXR1cm4KKyAgY29kZSBmcm9tIHpzeXNjbWQuCisqLworICAgIGlu dCBuOworCisjaWZkZWYgQ0tfTE9HSU4KKyAgICBpZiAoaXNndWVzdCkKKyAgICAgIHJldHVybigt Mik7CisjZW5kaWYgLyogQ0tfTE9HSU4gKi8KKworICAgIGlmICghZikgZiA9ICIiOworICAgIGlm ICghKmYpIHJldHVybigtMSk7CisKKyNpZmRlZiBDS1JPT1QKKyAgICBkZWJ1ZyhGMTExLCJ6bWFp bCBzZXRyb290Iixja3Jvb3QsY2tyb290c2V0KTsKKyAgICBpZiAoY2tyb290c2V0KSBpZiAoIXpp bnJvb3QoZikpIHsKKwlkZWJ1ZyhGMTEwLCJ6bWFpbCBzZXRyb290IHZpb2xhdGlvbiIsZiwwKTsK KwlyZXR1cm4oLTEpOworICAgIH0KKyNlbmRpZiAvKiBDS1JPT1QgKi8KKworI2lmZGVmIEJTRDQK Ky8qIFRoZSBpZGVhIGlzIHRvIHVzZSAvdXNyL3VjYi9tYWlsLCByYXRoZXIgdGhhbiByZWd1bGFy IG1haWwsIHNvIHRoYXQgICAqLworLyogYSBzdWJqZWN0IGxpbmUgY2FuIGJlIGluY2x1ZGVkIHdp dGggLXMuICBTaW5jZSB3ZSBjYW4ndCBkZXBlbmQgb24gdGhlICovCisvKiB1c2VyJ3MgcGF0aCwg d2UgdXNlIHRoZSBjb252ZW50aW9uIHRoYXQgL3Vzci91Y2IvTWFpbCA9IC91c3IvdWNiL21haWwg Ki8KKy8qIGFuZCBldmVuIGlmIE1haWwgaGFzIGJlZW4gbW92ZWQgdG8gc29tZXdoZXJlIGVsc2Us IHRoaXMgc2hvdWxkIHN0aWxsICAqLworLyogZmluZCBpdC4uLiAgVGhlIHNlYXJjaCBjb3VsZCBi ZSBtYWRlIG1vcmUgcmVsaWFibGUgYnkgYWN0dWFsbHkgdXNpbmcgICovCisvKiBhY2Nlc3MoKSB0 byBzZWUgaWYgL3Vzci91Y2IvTWFpbCBleGlzdHMuICovCisKKyAgICBuID0gc3RybGVuKGYpOwor ICAgIG4gPSBuICsgbiArIDE1ICsgKGludClzdHJsZW4ocCk7CisKKyAgICBpZiAobiA+IFpNQlVG TEVOKQorICAgICAgcmV0dXJuKC0yKTsKKworI2lmZGVmIERHVVg1NDAKKyAgICBzcHJpbnRmKHpt YnVmLCJtYWlseCAtcyAlYyVzJWMgJXMgPCAlcyIsICciJywgZiwgJyInLCBwLCBmKTsKKyNlbHNl CisgICAgc3ByaW50Zih6bWJ1ZiwiTWFpbCAtcyAlYyVzJWMgJXMgPCAlcyIsICciJywgZiwgJyIn LCBwLCBmKTsKKyNlbmRpZiAvKiBER1VYNTQwICovCisgICAgenN5c2NtZCh6bWJ1Zik7CisjZWxz ZQorI2lmZGVmIFNWT1JQT1NJWAorI2lmbmRlZiBPWE9TCisgICAgc3ByaW50Zih6bWJ1ZiwibWFp bCAlcyA8ICVzIiwgcCwgZik7CisjZWxzZSAvKiBPWE9TICovCisgICAgc3ByaW50Zih6bWJ1Ziwi bWFpbHggLXMgJWMlcyVjICVzIDwgJXMiLCAnIicsIGYsICciJywgcCwgZik7CisjZW5kaWYgLyog T1hPUyAqLworICAgIHpzeXNjbWQoem1idWYpOworI2Vsc2UKKyAgICAqem1idWYgPSAnXDAnOwor I2VuZGlmCisjZW5kaWYKKyAgICByZXR1cm4oMCk7Cit9CisjZW5kaWYgLyogTk9GUklMTFMgKi8K KyNlbmRpZiAvKiBVTklYICovCisKKyNpZm5kZWYgTk9GUklMTFMKK2ludAorenByaW50KHAsZikg Y2hhciAqcDsgY2hhciAqZjsgeyAgICAgICAgIC8qIFByaW50IGZpbGUgZiB3aXRoIG9wdGlvbnMg cCAqLworICAgIGV4dGVybiBjaGFyICogcHJpbnRlcm5hbWU7ICAgICAgICAgIC8qIEZyb20gY2t1 dXMzLmMgKi8KKyAgICBleHRlcm4gaW50IHByaW50cGlwZTsKKyAgICBpbnQgbjsKKworI2lmZGVm IENLX0xPR0lOCisgICAgaWYgKGlzZ3Vlc3QpCisgICAgICByZXR1cm4oLTIpOworI2VuZGlmIC8q IENLX0xPR0lOICovCisKKyAgICBpZiAoIWYpIGYgPSAiIjsKKyAgICBpZiAoISpmKSByZXR1cm4o LTEpOworCisjaWZkZWYgQ0tST09UCisgICAgZGVidWcoRjExMSwienByaW50IHNldHJvb3QiLGNr cm9vdCxja3Jvb3RzZXQpOworICAgIGlmIChja3Jvb3RzZXQpIGlmICghemlucm9vdChmKSkgewor CWRlYnVnKEYxMTAsInpwcmludCBzZXRyb290IHZpb2xhdGlvbiIsZiwwKTsKKwlyZXR1cm4oLTEp OworICAgIH0KKyNlbmRpZiAvKiBDS1JPT1QgKi8KKworICAgIGRlYnVnKEYxMTAsInpwcmludCBm aWxlIixmLDApOworICAgIGRlYnVnKEYxMTAsInpwcmludCBmbGFncyIscCwwKTsKKyAgICBkZWJ1 ZyhGMTEwLCJ6cHJpbnQgcHJpbnRlcm5hbWUiLHByaW50ZXJuYW1lLDApOworICAgIGRlYnVnKEYx MDEsInpwcmludCBwcmludHBpcGUiLCIiLHByaW50cGlwZSk7CisKKyNpZmRlZiBVTklYCisvKgor ICBOb3RlIHVzZSBvZiBzdGFuZGFyZCBpbnB1dCByZWRpcmVjdGlvbi4gIEluIHNvbWUgc3lzdGVt cywgbHBbcl0gcnVucworICBzZXR1aWQgdG8gbHAgKG9yIC4uLj8pLCBzbyBpZiB1c2VyIGhhcyBz ZW50IGEgZmlsZSBpbnRvIGEgZGlyZWN0b3J5CisgIHRoYXQgbHAgZG9lcyBub3QgaGF2ZSByZWFk IGFjY2VzcyB0bywgaXQgY2FuJ3QgYmUgcHJpbnRlZCB1bmxlc3MgaXQgaXMKKyAgZmVkIHRvIGxw W3JdIGFzIHN0YW5kYXJkIGlucHV0LgorKi8KKyAgICBpZiAocHJpbnRwaXBlICYmIHByaW50ZXJu YW1lKSB7CisJbiA9IDggKyAoaW50KXN0cmxlbihmKSArIChpbnQpc3RybGVuKHByaW50ZXJuYW1l KTsKKwlpZiAobiA+IFpNQlVGTEVOKQorCSAgcmV0dXJuKC0yKTsKKyAgICAgICAgc3ByaW50Zih6 bWJ1ZiwiY2F0ICVzIHwgJXMiLCBmLCBwcmludGVybmFtZSk7CisgICAgfSBlbHNlIGlmIChwcmlu dGVybmFtZSkgeworCW4gPSA4ICsgKGludClzdHJsZW4oZikgKyAoaW50KXN0cmxlbihwcmludGVy bmFtZSk7CisJaWYgKG4gPiBaTUJVRkxFTikKKwkgIHJldHVybigtMik7CisgICAgICAgIHNwcmlu dGYoem1idWYsImNhdCAlcyA+PiAlcyIsIGYsIHByaW50ZXJuYW1lKTsKKyAgICB9IGVsc2Ugewor CW4gPSA0ICsgKGludClzdHJsZW4oUFJJTlRDTUQpICsgKGludClzdHJsZW4ocCkgKyAoaW50KXN0 cmxlbihmKTsKKwlpZiAobiA+IFpNQlVGTEVOKQorCSAgcmV0dXJuKC0yKTsKKyAgICAgICAgc3By aW50Zih6bWJ1ZiwiJXMgJXMgPCAlcyIsIFBSSU5UQ01ELCBwLCBmKTsKKyAgICB9CisgICAgZGVi dWcoRjExMCwienByaW50IGNvbW1hbmQiLHptYnVmLDApOworICAgIHpzeXNjbWQoem1idWYpOwor I2Vsc2UgLyogTm90IFVOSVggKi8KKyAgICAqem1idWYgPSAnXDAnOworI2VuZGlmIC8qIFVOSVgg Ki8KKyAgICByZXR1cm4oMCk7Cit9CisjZW5kaWYgLyogTk9GUklMTFMgKi8KKworLyogIFdpbGRj YXJkIGV4cGFuc2lvbiBmdW5jdGlvbnMuLi4gICovCisKK3N0YXRpYyBjaGFyIHNjcmF0Y2hbTUFY UEFUSCs0XTsgICAgICAgICAvKiBVc2VkIGJ5IGJvdGggbWV0aG9kcyAqLworCitzdGF0aWMgaW50 IG9sZG10Y2hzID0gMDsgICAgICAgICAgICAgICAgLyogTGV0IHNoZWxsIChscykgZXhwYW5kIHRo ZW0uICovCisjaWZkZWYgQ09NTUVOVAorc3RhdGljIGNoYXIgKmxzY21kID0gIi9iaW4vbHMgLWQi OyAgICAgIC8qIENvbW1hbmQgdG8gdXNlLiAqLworI2Vsc2UKK3N0YXRpYyBjaGFyICpsc2NtZCA9 ICJlY2hvIjsgICAgICAgICAgICAvKiBDb21tYW5kIHRvIHVzZS4gKi8KKyNlbmRpZiAvKiBDT01N RU5UICovCisKKyNpZm5kZWYgTk9QVVNICitpbnQKK3NoeHBhbmQocGF0LG5hbWxzdCxsZW4pIGNo YXIgKnBhdCwgKm5hbWxzdFtdOyBpbnQgbGVuOyB7CisgICAgY2hhciAqZmdidWYgPSBOVUxMOyAg ICAgICAgICAgICAgICAgLyogQnVmZmVyIGZvciBmb3JtaW5nIGxzIGNvbW1hbmQgKi8KKyAgICBj aGFyICpwLCAqcTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBXb3JrZXJzICovCisKKyAgICBp bnQgaSwgeCwgcmV0Y29kZSwgaXRzYWRpcjsKKyAgICBjaGFyIGM7CisKKyAgICB4ID0gKGludClz dHJsZW4ocGF0KSArIChpbnQpc3RybGVuKGxzY21kKSArIDM7IC8qIExlbmd0aCBvZiBscyBjb21t YW5kICovCisgICAgZm9yIChpID0gMDsgaSA8IG9sZG10Y2hzOyBpKyspIHsgICAgLyogRnJlZSBw cmV2aW91cyBmaWxlIGxpc3QgKi8KKyAgICAgICAgaWYgKG5hbWxzdFtpXSApIHsgICAgICAgICAg ICAgICAvKiBJZiBtZW1vcnkgaXMgYWxsb2NhdGVkICAqLworICAgICAgICAgICAgZnJlZShuYW1s c3RbaV0pOyAgICAgICAgICAgIC8qIEZyZWUgdGhlIG1lbW9yeSAgICAgICAgICovCisgICAgICAg ICAgICBuYW1sc3RbaV0gPSBOVUxMIDsgICAgICAgICAgLyogUmVtZW1iZXIgbm8gbWVtb3J5IGlz IGFsbG9jYXRlZCAqLworICAgICAgICB9CisgICAgfQorICAgIG9sZG10Y2hzID0gMCA7ICAgICAg ICAgICAgICAgICAgICAgIC8qIFJlbWVtYmVyIHRoZXJlIGFyZSBubyBtYXRjaGVzICovCisgICAg ZmdidWYgPSBtYWxsb2MoeCk7ICAgICAgICAgICAgICAgICAgLyogR2V0IGJ1ZmZlciBmb3IgY29t bWFuZCAqLworICAgIGlmICghZmdidWYpIHJldHVybigtMSk7ICAgICAgICAgICAgIC8qIEZhaWwg aWYgY2Fubm90ICovCisgICAgY2ttYWttc2coZmdidWYseCxsc2NtZCwiICIscGF0LE5VTEwpOyAv KiBGb3JtIHRoZSBjb21tYW5kICovCisgICAgenhjbWQoWklGSUxFLGZnYnVmKTsgICAgICAgICAg ICAgICAgLyogU3RhcnQgdGhlIGNvbW1hbmQgKi8KKyAgICBpID0gMDsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBGaWxlIGNvdW50ZXIgKi8KKyAgICBwID0gc2NyYXRjaDsgICAgICAg ICAgICAgICAgICAgICAgICAvKiBQb2ludCB0byBzY3JhdGNoIGFyZWEgKi8KKyAgICByZXRjb2Rl ID0gLTE7ICAgICAgICAgICAgICAgICAgICAgICAvKiBBc3N1bWUgZmFpbHVyZSAqLworICAgIHdo aWxlICgoeCA9IHptaW5jaGFyKCkpICE9IC0xKSB7ICAgIC8qIFJlYWQgY2hhcmFjdGVycyBmcm9t IGNvbW1hbmQgKi8KKyAgICAgICAgYyA9IChjaGFyKSB4OworICAgICAgICBpZiAoYyA9PSAnICcg fHwgYyA9PSAnXG4nKSB7ICAgIC8qIEdvdCBuZXdsaW5lIG9yIHNwYWNlPyAqLworICAgICAgICAg ICAgKnAgPSAnXDAnOyAgICAgICAgICAgICAgICAgIC8qIFllcywgdGVybWluYXRlIHN0cmluZyAq LworICAgICAgICAgICAgcCA9IHNjcmF0Y2g7ICAgICAgICAgICAgICAgIC8qIFBvaW50IGJhY2sg dG8gYmVnaW5uaW5nICovCisgICAgICAgICAgICBpZiAoemNoa2kocCkgPT0gLTEpICAgICAgICAg LyogRG9lcyBmaWxlIGV4aXN0PyAqLworICAgICAgICAgICAgICBjb250aW51ZTsgICAgICAgICAg ICAgICAgIC8qIE5vLCBjb250aW51ZSAqLworICAgICAgICAgICAgaXRzYWRpciA9IGlzZGlyKHAp OyAgICAgICAgIC8qIFllcywgaXMgaXQgYSBkaXJlY3Rvcnk/ICovCisgICAgICAgICAgICBpZiAo eGRpcm9ubHkgJiYgIWl0c2FkaXIpICAgLyogV2FudCBvbmx5IGRpcnMgYnV0IHRoaXMgaXNuJ3Qg Ki8KKyAgICAgICAgICAgICAgY29udGludWU7ICAgICAgICAgICAgICAgICAvKiBzbyBza2lwLiAq LworICAgICAgICAgICAgaWYgKHhmaWxvbmx5ICYmIGl0c2FkaXIpICAgIC8qIEl0J3MgYSBkaXIg YnV0IHdhbnQgb25seSBmaWxlcyAqLworICAgICAgICAgICAgICBjb250aW51ZTsgICAgICAgICAg ICAgICAgIC8qIHNvIHNraXAuICovCisgICAgICAgICAgICB4ID0gKGludClzdHJsZW4ocCk7ICAg ICAgICAgLyogS2VlcCAtIGdldCBsZW5ndGggb2YgbmFtZSAqLworICAgICAgICAgICAgcSA9IG1h bGxvYyh4KzEpOyAgICAgICAgICAgIC8qIEFsbG9jYXRlIHNwYWNlIGZvciBpdCAqLworICAgICAg ICAgICAgaWYgKCFxKSBnb3RvIHNoeGZpbjsgICAgICAgIC8qIEZhaWwgaWYgc3BhY2UgY2FuJ3Qg YmUgb2J0YWluZWQgKi8KKyAgICAgICAgICAgIHN0cmNweShxLHNjcmF0Y2gpOyAgICAgICAgICAv KiAoc2FmZSkgQ29weSBuYW1lIHRvIHNwYWNlICovCisgICAgICAgICAgICBuYW1sc3RbaSsrXSA9 IHE7ICAgICAgICAgICAgLyogQ29weSBwb2ludGVyIHRvIG5hbWUgaW50byBhcnJheSAqLworICAg ICAgICAgICAgaWYgKGkgPj0gbGVuKSBnb3RvIHNoeGZpbjsgIC8qIEZhaWwgaWYgdG9vIG1hbnkg Ki8KKyAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZWd1bGFyIGNo YXJhY3RlciAqLworICAgICAgICAgICAgKnArKyA9IGM7ICAgICAgICAgICAgICAgICAgIC8qIENv cHkgaXQgaW50byBzY3JhdGNoIGFyZWEgKi8KKyAgICAgICAgfQorICAgIH0KKyAgICByZXRjb2Rl ID0gaTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXR1cm4gbnVtYmVyIG9mIG1hdGNoaW5n IGZpbGVzICovCitzaHhmaW46ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ29t bW9uIGV4aXQgcG9pbnQgKi8KKyAgICBmcmVlKGZnYnVmKTsgICAgICAgICAgICAgICAgICAgICAg ICAvKiBGcmVlIGNvbW1hbmQgYnVmZmVyICovCisgICAgZmdidWYgPSBOVUxMOworICAgIHpjbG9z ZihaSUZJTEUpOyAgICAgICAgICAgICAgICAgICAgIC8qIERlbGV0ZSB0aGUgY29tbWFuZCBmb3Jr LiAqLworICAgIG9sZG10Y2hzID0gaTsgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlbWVtYmVy IGhvdyBtYW55IGZpbGVzICovCisgICAgcmV0dXJuKHJldGNvZGUpOworfQorI2VuZGlmIC8qIE5P UFVTSCAqLworCisvKgorICBEaXJlY3RvcnktcmVhZGluZyBmdW5jdGlvbnMgZm9yIFVOSVggb3Jp Z2luYWxseSB3cml0dGVuIGZvciBDLUtlcm1pdCA0LjAKKyAgYnkgSmVmZiBEYW1lbnMsIENVQ0NB LCAxOTg0LgorKi8KK3N0YXRpYyBjaGFyICogeHBhdCA9IE5VTEw7ICAgICAgICAgICAgICAvKiBH bG9iYWwgY29weSBvZiBmZ2VuKCkgcGF0dGVybiAqLworc3RhdGljIGNoYXIgKiB4cGF0bGFzdCA9 IE5VTEw7ICAgICAgICAgIC8qIFJpZ2h0bW9zdCBzZWdtZW50IG9mIHBhdHRlcm4qLworc3RhdGlj IGludCB4cGF0c2xhc2ggPSAwOyAgICAgICAgICAgICAgIC8qIFNsYXNoIGNvdW50IGluIHBhdHRl cm4gKi8KK3N0YXRpYyBpbnQgeHBhdHdpbGQgPSAwOyAgICAgICAgICAgICAgICAvKiBPcmlnaW5h bCBwYXR0ZXJuIGlzIHdpbGQgKi8KK3N0YXRpYyBpbnQgeGxlYWZ3aWxkID0gMDsgICAgICAgICAg ICAgICAvKiBMYXN0IHNlZ21lbnQgb2YgcGF0dGVybiBpcyB3aWxkICovCitzdGF0aWMgaW50IHhw YXRhYnNvbHV0ZSA9IDA7CisKKyNpZmRlZiBhZWdpcworc3RhdGljIGNoYXIgYnNsYXNoOworI2Vu ZGlmIC8qIGFlZ2lzICovCisKKworLyogIFMgUCBMIEkgVCBQIEEgVCBIICAqLworCisvKgorICBT cGxpdHMgdGhlIHNsYXNoLXNlcGFyYXRlZCBwb3J0aW9ucyBvZiB0aGUgYXJndW1lbnQgc3RyaW5n IGludG8KKyAgYSBsaXN0IG9mIHBhdGggc3RydWN0dXJlcy4gIFJldHVybnMgdGhlIGhlYWQgb2Yg dGhlIGxpc3QuICBUaGUKKyAgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkIGJ5IG1hbGxvYywgc28g dGhleSBtdXN0IGJlIGZyZWVkLgorICBTcGxpdHBhdGggaXMgdXNlZCBpbnRlcm5hbGx5IGJ5IHRo ZSBmaWxlbmFtZSBnZW5lcmF0b3IuCisKKyAgSW5wdXQ6CisgICAgQSBwYXRoIHN0cmluZy4KKwor ICBSZXR1cm5zOgorICAgIEEgbGlua2VkIGxpc3Qgb2YgdGhlIHNsYXNoLXNlcGFyYXRlZCBzZWdt ZW50cyBvZiB0aGUgaW5wdXQuCisqLworc3RhdGljIHN0cnVjdCBwYXRoICoKK3NwbGl0cGF0aChw KSBjaGFyICpwOyB7CisgICAgc3RydWN0IHBhdGggKmhlYWQsKmN1ciwqcHJ2OworICAgIGludCBp OworCisgICAgZGVidWcoRjExMSwic3BsaXRwYXRoIixwLHhyZWN1cnNpdmUpOworICAgIGhlYWQg PSBwcnYgPSBOVUxMOworCisgICAgaWYgKCFwKSByZXR1cm4oTlVMTCk7CisgICAgaWYgKCEqcCkg cmV0dXJuKE5VTEwpOworCisgICAgaWYgKCFzdHJjbXAocCwiKioiKSkgeyAgICAgICAgICAgICAg LyogRml4IHRoaXMgKi8KKyAgICAgICAgcCA9ICIqIjsKKyAgICB9CisgICAgaWYgKElTRElSU0VQ KCpwKSkgcCsrOyAgICAgICAgICAgICAgLyogU2tpcCBsZWFkaW5nIHNsYXNoIGlmIGFueSAqLwor CisgICAgLyogTWFrZSBsaW5rZWQgbGlzdCBvZiBwYXRoIHNlZ21lbnRzIGZyb20gcGF0dGVybiAq LworCisgICAgd2hpbGUgKCpwKSB7CisgICAgICAgIGN1ciA9IChzdHJ1Y3QgcGF0aCAqKSBtYWxs b2Moc2l6ZW9mIChzdHJ1Y3QgcGF0aCkpOworICAgICAgICAvKiBkZWJ1ZyhGMTAxLCJzcGxpdHBh dGggbWFsbG9jIiwiIixjdXIpOyAqLworICAgICAgICBpZiAoY3VyID09IE5VTEwpIHsKKyAgICAg ICAgICAgIGRlYnVnKEYxMDAsInNwbGl0cGF0aCBtYWxsb2MgZmFpbHVyZSIsIiIsMCk7CisgICAg ICAgICAgICBwcnYgLT4gZndkID0gTlVMTDsKKyAgICAgICAgICAgIHJldHVybigoc3RydWN0IHBh dGggKilOVUxMKTsKKyAgICAgICAgfQorICAgICAgICBjdXIgLT4gZndkID0gTlVMTDsKKyAgICAg ICAgaWYgKGhlYWQgPT0gTlVMTCkgICAgICAgICAgICAgICAvKiBGaXJzdCwgbWFrZSBsaXN0IGhl YWQgKi8KKyAgICAgICAgICBoZWFkID0gY3VyOworICAgICAgICBlbHNlICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIE5vdCBmaXJzdCwgbGluayBpbnRvIGNoYWluICovCisgICAgICAgICAg cHJ2IC0+IGZ3ZCA9IGN1cjsKKyAgICAgICAgcHJ2ID0gY3VyOyAgICAgICAgICAgICAgICAgICAg ICAvKiBMaW5rIGZyb20gcHJldmlvdXMgdG8gdGhpcyBvbmUgKi8KKworI2lmZGVmIGFlZ2lzCisg ICAgICAgIC8qIHRyZWF0IGJhY2tzbGFzaCBhcyAiLi4vIiAqLworICAgICAgICBpZiAoYnNsYXNo ICYmICpwID09IGJzbGFzaCkgeworICAgICAgICAgICAgc3RyY3B5KGN1ci0+bnBhcnQsICIuLiIp OwkvKiBzYWZlICovCisgICAgICAgICAgICArK3A7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg ICAgICBmb3IgKGk9MDsgaSA8IE1BWE5BTUxFTiAmJiAqcCAmJiAqcCAhPSAnLycgJiYgKnAgIT0g YnNsYXNoOyBpKyspCisgICAgICAgICAgICAgIGN1ciAtPiBucGFydFtpXSA9ICpwKys7CisgICAg ICAgICAgICBjdXIgLT4gbnBhcnRbaV0gPSAnXDAnOyAgICAgLyogZW5kIHRoaXMgc2VnbWVudCAq LworICAgICAgICAgICAgaWYgKGkgPj0gTUFYTkFNTEVOKQorICAgICAgICAgICAgICB3aGlsZSAo KnAgJiYgKnAgIT0gJy8nICYmICpwICE9IGJzbGFzaCkKKyAgICAgICAgICAgICAgICBwKys7Cisg ICAgICAgIH0KKyAgICAgICAgaWYgKCpwID09ICcvJykgcCsrOworI2Vsc2UKKyAgICAgICAgLyog R2VuZXJhbCBjYXNlIChVTklYKSAqLworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgTUFYTkFNTEVO ICYmICFJU0RJUlNFUCgqcCkgJiYgKnAgIT0gJ1wwJzsgaSsrKSB7CisgICAgICAgICAgICBjdXIg LT4gbnBhcnRbaV0gPSAqcCsrOworICAgICAgICB9CisKKyAgICAgICAgY3VyIC0+IG5wYXJ0W2ld ID0gJ1wwJzsgICAgICAgICAvKiBFbmQgdGhpcyBwYXRoIHNlZ21lbnQgKi8KKyAgICAgICAgaWYg KGkgPj0gTUFYTkFNTEVOKQorICAgICAgICAgIHdoaWxlICghSVNESVJTRVAoKnApICYmICpwICE9 ICdcMCcpIHArKzsKKyAgICAgICAgaWYgKElTRElSU0VQKCpwKSkKKyAgICAgICAgICBwKys7CisK KyNlbmRpZiAvKiBhZWdpcyAqLworICAgIH0KKyAgICBpZiAocHJ2KSB7CisgICAgICAgIG1ha2Vz dHIoJnhwYXRsYXN0LHBydiAtPiBucGFydCk7CisgICAgICAgIGRlYnVnKEYxMTAsInNwbGl0cGF0 aCB4cGF0bGFzdCIseHBhdGxhc3QsMCk7CisgICAgfQorI2lmZGVmIERFQlVHCisgICAgLyogU2hv dyBvcmlnaW5hbCBwYXRoIGxpc3QgKi8KKyAgICBpZiAoZGVibG9nKSB7CisgICAgICAgIGZvciAo aSA9IDAsIGN1ciA9IGhlYWQ7IGN1cjsgaSsrKSB7CisgICAgICAgICAgICBkZWJ1ZyhGMTExLCJT UExJVFBBVEgiLGN1ciAtPiBucGFydCwgaSk7CisgICAgICAgICAgICBjdXIgPSBjdXIgLT4gZndk OworICAgICAgICB9CisgICAgfQorI2VuZGlmIC8qIERFQlVHICovCisgICAgcmV0dXJuKGhlYWQp OworfQorCisvKiAgRiBHIEUgTiAgLS0gIEdlbmVyYXRlIEZpbGUgTGlzdCAgKi8KKworLyoKKyAg RmlsZSBuYW1lIGdlbmVyYXRvci4gIEl0IGlzIHBhc3NlZCBhIHN0cmluZywgcG9zc2libHkgY29u dGFpbmluZyB3aWxkY2FyZHMsCisgIGFuZCBhbiBhcnJheSBvZiBjaGFyYWN0ZXIgcG9pbnRlcnMu ICBJdCBmaW5kcyBhbGwgdGhlIG1hdGNoaW5nIGZpbGVuYW1lcyBhbmQKKyAgc3RvcmVzIHBvaW50 ZXJzIHRvIHRoZW0gaW4gdGhlIGFycmF5LiAgVGhlIHJldHVybmVkIHN0cmluZ3MgYXJlIGFsbG9j YXRlZAorICBmcm9tIGEgc3RhdGljIGJ1ZmZlciBsb2NhbCB0byB0aGlzIG1vZHVsZSAoc28gdGhl IGNhbGxlciBkb2Vzbid0IGhhdmUgdG8KKyAgd29ycnkgYWJvdXQgZGVhbGxvY2F0aW5nIHRoZW0p OyB0aGlzIG1lYW5zIHRoYXQgc3VjY2Vzc2l2ZSBjYWxscyB0byBmZ2VuCisgIHdpbGwgd2lwZSBv dXQgdGhlIHJlc3VsdHMgb2YgcHJldmlvdXMgY2FsbHMuCisKKyAgSW5wdXQ6CisgICAgQSB3aWxk Y2FyZCBzdHJpbmcsIGFuIGFycmF5IHRvIHdyaXRlIG5hbWVzIHRvLCB0aGUgbGVuZ3RoIG9mIHRo ZSBhcnJheS4KKworICBSZXR1cm5zOgorICAgIFRoZSBudW1iZXIgb2YgbWF0Y2hlcy4KKyAgICBU aGUgYXJyYXkgaXMgZmlsbGVkIHdpdGggZmlsZW5hbWVzIHRoYXQgbWF0Y2hlZCB0aGUgcGF0dGVy bi4KKyAgICBJZiB0aGVyZSB3YXNuJ3QgZW5vdWdoIHJvb20gaW4gdGhlIGFycmF5LCAtMSBpcyBy ZXR1cm5lZC4KKworICBPcmlnaW5hbGx5IGJ5OiBKZWZmIERhbWVucywgQ1VDQ0EsIDE5ODQuICBN YW55IGNoYW5nZXMgc2luY2UgdGhlbi4KKyovCitzdGF0aWMgaW50CitmZ2VuKHBhdCxyZXNhcnJ5 LGxlbikgY2hhciAqcGF0LCpyZXNhcnJ5W107IGludCBsZW47IHsKKyAgICBzdHJ1Y3QgcGF0aCAq aGVhZDsKKyAgICBjaGFyICpzcHRyLCAqczsKKyAgICBpbnQgbjsKKworI2lmZGVmIGFlZ2lzCisg ICAgY2hhciAqbmFtZWNoYXJzOworICAgIGludCB0aWxkZSA9IDAsIGJxdW90ZSA9IDA7CisKKyAg ICBpZiAoKG5hbWVjaGFycyA9IGdldGVudigiTkFNRUNIQVJTIikpICE9IE5VTEwpIHsKKyAgICAg ICAgaWYgKGNrc3RyY2hyKG5hbWVjaGFycywgJ34nICkgIT0gTlVMTCkgdGlsZGUgID0gJ34nOwor ICAgICAgICBpZiAoY2tzdHJjaHIobmFtZWNoYXJzLCAnXFwnKSAhPSBOVUxMKSBic2xhc2ggPSAn XFwnOworICAgICAgICBpZiAoY2tzdHJjaHIobmFtZWNoYXJzLCAnYCcgKSAhPSBOVUxMKSBicXVv dGUgPSAnYCc7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdGlsZGUgPSAnfic7IGJzbGFzaCA9ICdc XCc7IGJxdW90ZSA9ICdgJzsKKyAgICB9CisgICAgc3B0ciA9IHNjcmF0Y2g7CisKKyAgICAvKiBj b3B5ICJgbm9kZV9kYXRhIiwgZXRjLiBhbmNob3JzICovCisgICAgaWYgKGJxdW90ZSAmJiAqcGF0 ID09IGJxdW90ZSkKKyAgICAgIHdoaWxlICgqcGF0ICYmICpwYXQgIT0gJy8nICYmICpwYXQgIT0g YnNsYXNoKQorICAgICAgICAqc3B0cisrID0gKnBhdCsrOworICAgIGVsc2UgaWYgKHRpbGRlICYm ICpwYXQgPT0gdGlsZGUpCisgICAgICAqc3B0cisrID0gKnBhdCsrOworICAgIHdoaWxlICgqcGF0 ID09ICcvJykKKyAgICAgICpzcHRyKysgPSAqcGF0Kys7CisgICAgaWYgKHNwdHIgPT0gc2NyYXRj aCkgeworICAgICAgICBzdHJjcHkoc2NyYXRjaCwiLi8iKTsJCS8qIHNhZmUgKi8KKyAgICAgICAg c3B0ciA9IHNjcmF0Y2grMjsKKyAgICB9CisgICAgaWYgKCEoaGVhZCA9IHNwbGl0cGF0aChwYXQp KSkgcmV0dXJuKC0xKTsKKworI2Vsc2UgLyogbm90IGFlZ2lzICovCisKKyAgICBkZWJ1ZyhGMTEx LCJmZ2VuIHBhdCIscGF0LGxlbik7CisgICAgZGVidWcoRjExMCwiZmdlbiBjdXJyZW50IGRpcmVj dG9yeSIsemd0ZGlyKCksMCk7CisgICAgZGVidWcoRjEwMSwiZmdlbiBzdGF0aGFjayIsIiIsc3Rh dGhhY2spOworCisgICAgc2NyYXRjaFswXSA9ICdcMCc7CisgICAgeHBhdHdpbGQgPSAwOworICAg IHhsZWFmd2lsZCA9IDA7CisgICAgeHBhdGFic29sdXRlID0gMDsKKworICAgIGlmICghKGhlYWQg PSBzcGxpdHBhdGgocGF0KSkpICAgICAgIC8qIE1ha2UgdGhlIHBhdGggc2VnbWVudCBsaXN0ICov CisJcmV0dXJuKC0xKTsKKworICAgIHNwdHIgPSBzY3JhdGNoOworCisjaWZkZWYgQ09NTUVOVAor ICAgIGlmIChzdHJuY21wKHBhdCwiLi8iLDIpICYmIHN0cm5jbXAocGF0LCIuLi8iLDMpKSB7Cisj ZW5kaWYgLyogQ09NTUVOVCAqLworCWlmICghSVNESVJTRVAoKnBhdCkpCQkvKiBJZiBuYW1lIGlz IG5vdCBhYnNvbHV0ZSAqLworCSAgKnNwdHIrKyA9ICcuJzsJCS8qIHB1dCAiLi8iIGluIGZyb250 LiAqLworCSpzcHRyKysgPSBESVJTRVA7CisjaWZkZWYgQ09NTUVOVAorICAgIH0KKyNlbmRpZiAv KiBDT01NRU5UICovCisgICAgKnNwdHIgPSAnXDAnOworI2VuZGlmIC8qIGFlZ2lzICovCisKKyAg ICBtYWtlc3RyKCZ4cGF0LHBhdCk7ICAgICAgICAgICAgICAgICAvKiBTYXZlIGNvcHkgb2Ygb3Jp Z2luYWwgcGF0dGVybiAqLworICAgIGRlYnVnKEYxMTAsImZnZW4gc2NyYXRjaCIsc2NyYXRjaCww KTsKKworICAgIGZvciAobiA9IDAsIHMgPSB4cGF0OyAqczsgcysrKSAgICAgIC8qIEhvdyBtYW55 IHNsYXNoZXMgaW4gdGhlIHBhdHRlcm4gKi8KKyAgICAgIGlmICgqcyA9PSBESVJTRVApICAgICAg ICAgICAgICAgICAvKiBzaW5jZSB0aGVzZSBhcmUgZmVuY2VzIGZvciAqLworICAgICAgICBuKys7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHBhdHRlcm4gbWF0Y2hpbmcgKi8KKyAgICB4 cGF0c2xhc2ggPSBuOworICAgIGRlYnVnKEYxMDEsImZnZW4geHBhdHNsYXNoIiwiIix4cGF0c2xh c2gpOworCisgICAgbnVtZm5kID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogTm9uZSBm b3VuZCB5ZXQgKi8KKworICAgIGlmIChpbml0c3BhY2UocmVzYXJyeSxzc3BsZW4pIDwgMCkKKyAg ICAgIHJldHVybigtMSk7CisKKyAgICB4cGF0d2lsZCA9IGlzd2lsZCh4cGF0KTsJCS8qIE9yaWdp bmFsIHBhdHRlcm4gaXMgd2lsZD8gKi8KKyAgICB4cGF0YWJzb2x1dGUgPSBpc2Fic29sdXRlKHhw YXQpOworICAgIHhsZWFmd2lsZCA9IGlzd2lsZCh4cGF0bGFzdCk7CisKKyAgICBkZWJ1ZyhGMTEx LCJmZ2VuIHhwYXQiLHhwYXQseHBhdHdpbGQpOworICAgIGRlYnVnKEYxMTEsImZnZW4geHBhdGxh c3QiLHhwYXRsYXN0LHhsZWFmd2lsZCk7CisgICAgZGVidWcoRjEwMSwiZmdlbiB4cGF0YWJzb2x1 dGUiLCIiLHhwYXRhYnNvbHV0ZSk7CisKKyAgICB0cmF2ZXJzZShoZWFkLHNjcmF0Y2gsc3B0cik7 ICAgICAgICAvKiBHbyB3YWxrIHRoZSBkaXJlY3RvcnkgdHJlZS4gKi8KKyAgICB3aGlsZSAoaGVh ZCAhPSBOVUxMKSB7ICAgICAgICAgICAgICAvKiBEb25lIC0gZnJlZSBwYXRoIHNlZ21lbnQgbGlz dC4gKi8KKyAgICAgICAgc3RydWN0IHBhdGggKm5leHQgPSBoZWFkIC0+IGZ3ZDsKKyAgICAgICAg ZnJlZSgoY2hhciAqKWhlYWQpOworICAgICAgICBoZWFkID0gbmV4dDsKKyAgICB9CisgICAgZGVi dWcoRjEwMSwiZmdlbiIsIiIsbnVtZm5kKTsKKyAgICByZXR1cm4obnVtZm5kKTsgICAgICAgICAg ICAgICAgICAgICAvKiBSZXR1cm4gdGhlIG51bWJlciBvZiBtYXRjaGVzICovCit9CisKKy8qIERl ZmluZSBMT05HRk4gKGxvbmcgZmlsZSBuYW1lcykgYXV0b21hdGljYWxseSBmb3IgQlNEIDIuOSBh bmQgNC4yICovCisvKiBMT05HRk4gY2FuIGFsc28gYmUgZGVmaW5lZCBvbiB0aGUgY2MgY29tbWFu ZCBsaW5lLiAqLworCisjaWZkZWYgQlNEMjkKKyNpZm5kZWYgTE9OR0ZOCisjZGVmaW5lIExPTkdG TgorI2VuZGlmCisjZW5kaWYKKworI2lmZGVmIEJTRDQyCisjaWZuZGVmIExPTkdGTgorI2RlZmlu ZSBMT05HRk4KKyNlbmRpZgorI2VuZGlmCisKKy8qCisgICBUIFIgQSBWIEUgUiBTIEUgIC0tICBU cmF2ZXJzZSBhIGRpcmVjdG9yeSB0cmVlLgorCisgICBXYWxrcyB0aGUgZGlyZWN0b3J5IHRyZWUg bG9va2luZyBmb3IgbWF0Y2hlcyB0byBpdHMgYXJndW1lbnRzLgorICAgVGhlIGFsZ29yaXRobSBp cywgYnJpZWZseToKKworICAgIElmIHRoZSBjdXJyZW50IHBhdHRlcm4gc2VnbWVudCBjb250YWlu cyBubyB3aWxkY2FyZHMsIHRoYXQKKyAgICBzZWdtZW50IGlzIGFkZGVkIHRvIHdoYXQgd2UgYWxy ZWFkeSBoYXZlLiAgSWYgdGhlIG5hbWUgc28gZmFyCisgICAgZXhpc3RzLCB3ZSBjYWxsIG91cnNl bHZlcyByZWN1cnNpdmVseSB3aXRoIHRoZSBuZXh0IHNlZ21lbnQKKyAgICBpbiB0aGUgcGF0dGVy biBzdHJpbmc7IG90aGVyd2lzZSwgd2UganVzdCByZXR1cm4uCisKKyAgICBJZiB0aGUgY3VycmVu dCBwYXR0ZXJuIHNlZ21lbnQgY29udGFpbnMgd2lsZGNhcmRzLCB3ZSBvcGVuIHRoZSBuYW1lCisg ICAgd2UndmUgYWNjdW11bGF0ZWQgc28gZmFyIChhc3N1bWluZyBpdCBpcyByZWFsbHkgYSBkaXJl Y3RvcnkpLCB0aGVuIHJlYWQKKyAgICBlYWNoIGZpbGVuYW1lIGluIGl0LCBhbmQsIGlmIGl0IG1h dGNoZXMgdGhlIHdpbGRjYXJkIHBhdHRlcm4gc2VnbWVudCwgYWRkCisgICAgdGhhdCBmaWxlbmFt ZSB0byB3aGF0IHdlIGhhdmUgc28gZmFyIGFuZCBjYWxsIG91cnNlbHZlcyByZWN1cnNpdmVseSBv bgorICAgIHRoZSBuZXh0IHNlZ21lbnQuCisKKyAgICBGaW5hbGx5LCB3aGVuIG5vIG1vcmUgcGF0 dGVybiBzZWdtZW50cyByZW1haW4sIHdlIGFkZCB3aGF0J3MgYWNjdW11bGF0ZWQKKyAgICBzbyBm YXIgdG8gdGhlIHJlc3VsdCBhcnJheSBhbmQgaW5jcmVtZW50IHRoZSBudW1iZXIgb2YgbWF0Y2hl cy4KKworICBJbnB1dHM6CisgICAgQSBwYXR0ZXJuIHBhdGggbGlzdCAoYXMgZ2VuZXJhdGVkIGJ5 IHNwbGl0cGF0aCksIGEgc3RyaW5nIHBvaW50ZXIgdGhhdAorICAgIHBvaW50cyB0byB3aGF0IHdl J3ZlIHRyYXZlcnNlZCBzbyBmYXIgKHRoaXMgY2FuIGJlIGluaXRpYWxpemVkIHRvICIvIgorICAg IHRvIHN0YXJ0IHRoZSBzZWFyY2ggYXQgdGhlIHJvb3QgZGlyZWN0b3J5LCBvciB0byAiLi8iIHRv IHN0YXJ0IHRoZQorICAgIHNlYXJjaCBhdCB0aGUgY3VycmVudCBkaXJlY3RvcnkpLCBhbmQgYSBz dHJpbmcgcG9pbnRlciB0byB0aGUgZW5kIG9mCisgICAgdGhlIHN0cmluZyBpbiB0aGUgcHJldmlv dXMgYXJndW1lbnQsIHBsdXMgdGhlIGdsb2JhbCAicmVjdXJzaXZlIiwKKyAgICAieG1hdGNoZG90 IiwgYW5kICJ4ZGlyb25seSIgZmxhZ3MuCisKKyAgUmV0dXJuczogdm9pZCwgd2l0aDoKKyAgICBt dGNoc1tdIGNvbnRhaW5pbmcgdGhlIGFycmF5IG9mIGZpbGVuYW1lIHN0cmluZyBwb2ludGVycywg YW5kOgorICAgIG51bWZuZCBjb250YWluaW5nIHRoZSBudW1iZXIgb2YgZmlsZW5hbWVzLgorCisg IEFsdGhvdWdoIGl0IG1pZ2h0IGJlIHBvb3IgcHJhY3RpY2UsIHRoZSBtdGNoc1tdIGFycmF5IGlz IHJldmVhbGVkIHRvIHRoZQorICBvdXRzaWRlIGluIGNhc2UgaXQgbmVlZHMgaXQ7IGZvciBleGFt cGxlLCB0byBiZSBzb3J0ZWQgcHJpb3IgdG8gdXNlLgorICAoSXQgaXMgcG9vciBwcmFjdGljZSBi ZWNhdXNlIG5vdCBhbGwgcGxhdGZvcm1zIGltcGxlbWVudCBmaWxlIGxpc3RzIHRoZQorICBzYW1l IHdheTsgc29tZSBkb24ndCB1c2UgYW4gYXJyYXkgYXQgYWxsLikKKworICBOb3RlIHRoYXQgYWRk cmVzdWx0KCkgYWN0cyBhcyBhIHNlY29uZC1sZXZlbCBmaWx0ZXI7IGR1ZSB0byBzZWxlY3Rpb24K KyAgY3JpdGVyaWEgb3V0c2lkZSBvZiB0aGUgcGF0dGVybiwgaXQgbWlnaHQgZGVjbGluZSB0byBh ZGQgZmlsZXMgdGhhdAorICB0aGlzIHJvdXRpbmUgYXNrcyBpdCB0bywgZS5nLiBiZWNhdXNlIHdl IGFyZSBjb2xsZWN0aW5nIG9ubHkgZGlyZWN0b3J5CisgIG5hbWVzIGJ1dCBub3QgdGhlIG5hbWVz IG9mIHJlZ3VsYXIgZmlsZXMuCisKKyAgV0FSTklORzogSW4gdGhlIGNvdXJzZSBvZiBDLUtlcm1p dCA3LjAgZGV2ZWxvcG1lbnQsIHRoaXMgcm91dGluZSBiZWNhbWUKKyAgcmlkaWN1bG91c2x5IGNv bXBsZXgsIGluIG9yZGVyIHRvIG1lZXQgYXBwcm94aW1hdGVseSBzaXh0eSBzcGVjaWZpYworICBy ZXF1aXJlbWVudHMuICBET04nVCBFVkVOIFRISU5LIEFCT1VUIE1PRElGWUlORyBUSElTIFJPVVRJ TkUhICBUcnVzdCBtZTsKKyAgaXQgaXMgbm90IHBvc3NpYmxlIHRvIGZpeCBhbnl0aGluZyBpbiBp dCB3aXRob3V0IGJyZWFraW5nIHNvbWV0aGluZyBlbHNlLgorICBUaGlzIHJvdXRpbmUgYmFkbHkg bmVlZHMgYSB0b3RhbCByZWRlc2lnbiBhbmQgcmV3cml0ZS4gIE5vdGU6IFRoZXJlIG1heQorICBi ZSBzb21lIGdvb2QgYXBwbGljYXRpb25zIGZvciByZWFscGF0aCgpIGFuZC9vciBzY2FuZGlyKCkg YW5kL29yIGZ0c19ibGFoKCkKKyAgaGVyZSwgb24gcGxhdGZvcm1zIHdoZXJlIHRoZXkgYXJlIGF2 YWlsYWJsZS4KKyovCitzdGF0aWMgVk9JRAordHJhdmVyc2UocGwsc29mYXIsZW5kY3VyKSBzdHJ1 Y3QgcGF0aCAqcGw7IGNoYXIgKnNvZmFyLCAqZW5kY3VyOyB7CisKKy8qIEFwcHJvcHJpYXRlIGRl Y2xhcmF0aW9ucyBmb3IgZGlyZWN0b3J5IHJvdXRpbmVzIGFuZCBzdHJ1Y3R1cmVzICovCisvKiAj ZGVmaW5lIE9QRU5ESVIgbWVhbnMgdG8gdXNlIG9wZW5kaXIoKSwgcmVhZGRpcigpLCBjbG9zZWRp cigpICAqLworLyogSWYgT1BFTkRJUiBub3QgZGVmaW5lZCwgd2UgdXNlIG9wZW4oKSwgcmVhZCgp LCBjbG9zZSgpICovCisKKyNpZmRlZiBESVJFTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBOZXcgd2F5LCA8ZGlyZW50Lmg+ICovCisjZGVmaW5lIE9QRU5ESVIKKyAgICBESVIgKmZkLCAq b3BlbmRpcigpOworICAgIHN0cnVjdCBkaXJlbnQgKmRpcmJ1ZjsKKyAgICBzdHJ1Y3QgZGlyZW50 ICpyZWFkZGlyKCk7CisjZWxzZSAvKiAhRElSRU5UICovCisjaWZkZWYgTE9OR0ZOICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogT2xkIHdheSwgPGRpci5oPiB3aXRoIG9wZW5kaXIoKSAqLwor I2RlZmluZSBPUEVORElSCisgICAgRElSICpmZCwgKm9wZW5kaXIoKTsKKyAgICBzdHJ1Y3QgZGly ZWN0ICpkaXJidWY7CisjZWxzZSAvKiAhTE9OR0ZOICovCisgICAgaW50IGZkOyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogT2xkIHdheSwgPGRpci5oPiB3aXRoIG9wZW4oKSAqLworICAg IHN0cnVjdCBkaXJlY3QgZGlyX2VudHJ5OworICAgIHN0cnVjdCBkaXJlY3QgKmRpcmJ1ZiA9ICZk aXJfZW50cnk7CisjZW5kaWYgLyogTE9OR0ZOICovCisjZW5kaWYgLyogRElSRU5UICovCisgICAg aW50IG1vcHRzID0gMDsJCQkvKiBja21hdGNoKCkgb3B0cyAqLworICAgIGludCBkZXB0aCA9IDA7 CQkJLyogRGlyZWN0b3J5IHRyZWUgZGVwdGggKi8KKworICAgIGNoYXIgbmFtYnVmW01BWE5BTUxF Tis0XTsgICAgICAgICAgIC8qIEJ1ZmZlciBmb3IgYSBmaWxlbmFtZSAqLworICAgIGludCBpdHNh ZGlyID0gMCwgc2VnaXNkaXIgPSAwLCBpdHN3aWxkID0gMCwgbXJlc3VsdCwgbiwgeCAvKiAsIHkg Ki8gOworICAgIHN0cnVjdCBzdGF0IHN0YXRidWY7ICAgICAgICAgICAgICAgIC8qIEZvciBmaWxl IGluZm8uICovCisKKyAgICBkZWJ1ZyhGMTAxLCJTVEFUIiwiIiwxNik7CisgICAgaWYgKHBsID09 IE5VTEwpIHsgICAgICAgICAgICAgICAgICAgLyogRW5kIG9mIHBhdGgtc2VnbWVudCBsaXN0ICov CisgICAgICAgICotLWVuZGN1ciA9ICdcMCc7IC8qIFRlcm1pbmF0ZSBzdHJpbmcsIG92ZXJ3cml0 ZSB0cmFpbGluZyBzbGFzaCAqLworICAgICAgICBkZWJ1ZyhGMTEwLCJ0cmF2ZXJzZSBhZGQ6IGVu ZCBvZiBwYXRoIHNlZ21lbnQiLHNvZmFyLDApOworICAgICAgICBhZGRyZXN1bHQoc29mYXIsLTEp OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChzdGF0aGFjaykgeworCS8qIFRoaXMg c3BlZWRzIHVwIHRoZSBzZWFyY2ggYSBsb3QgYW5kIHdlIHN0aWxsIGdldCBnb29kIHJlc3VsdHMg Ki8KKwkvKiBidXQgaXQgYnJlYWtzIHRoZSB0YWdnaW5nIG9mIGRpcmVjdG9yeSBuYW1lcyBkb25l IGluIGFkZHJlc3VsdCAqLworCWlmICh4cmVjdXJzaXZlIHx8IHhmaWxvbmx5IHx8IHhkaXJvbmx5 IHx8IHhwYXRzbGFzaCkgeworCSAgICBpdHNhZGlyID0geGlzZGlyKHNvZmFyKTsKKwkgICAgZGVi dWcoRjEwMSwiU1RBVCIsIiIsMTcpOworCX0gZWxzZQorCSAgaXRzYWRpciA9IChzdHJuY21wKHNv ZmFyLCIuLyIsMikgPT0gMCk7CisgICAgfSBlbHNlIHsKKwlpdHNhZGlyID0geGlzZGlyKHNvZmFy KTsKKwlkZWJ1ZyhGMTAxLCJTVEFUIiwiIiwxOCk7CisgICAgfQorICAgIGRlYnVnKEYxMTEsInRy YXZlcnNlIGVudHJ5IHNvZmFyIixzb2ZhcixpdHNhZGlyKTsKKworI2lmZGVmIENLU1lNTElOSyAg ICAgICAgICAgICAgICAgICAgICAgIC8qIFdlJ3JlIGRvaW5nIHN5bWxpbmtzPyAqLworI2lmZGVm IFVTRV9MU1RBVCAgICAgICAgICAgICAgICAgICAgICAgIC8qIE9LIHRvIHVzZSBsc3RhdCgpPyAq LworICAgIGlmIChpdHNhZGlyICYmIHhub2xpbmtzKSB7CQkvKiBJZiBub3QgZm9sbG93aW5nIHN5 bWxpbmtzICovCisJaW50IHg7CisJc3RydWN0IHN0YXQgYnVmOworCXggPSBsc3RhdChzb2Zhciwm YnVmKTsKKwlkZWJ1ZyhGMTExLCJ0cmF2ZXJzZSBsc3RhdCAxIixzb2Zhcix4KTsKKwlpZiAoeCA+ IC0xICYmCisjaWZkZWYgU19JU0xOSworCSAgICBTX0lTTE5LKGJ1Zi5zdF9tb2RlKQorI2Vsc2UK KyNpZmRlZiBfSUZMTksKKwkgICAgKChfSUZNVCAmIGJ1Zi5zdF9tb2RlKSA9PSBfSUZMTkspCisj ZW5kaWYgLyogX0lGTE5LICovCisjZW5kaWYgLyogU19JU0xOSyAqLworCSAgICApCisJICBpdHNh ZGlyID0gMDsKKyAgICB9CisjZW5kaWYgLyogVVNFX0xTVEFUICovCisjZW5kaWYgLyogQ0tTWU1M SU5LICovCisKKyAgICBpZiAoIXhtYXRjaGRvdCAmJiB4cGF0bGFzdFswXSA9PSAnLicpCisgICAg ICB4bWF0Y2hkb3QgPSAxOworICAgIGlmICgheG1hdGNoZG90ICYmIHhwYXRbMF0gPT0gJy4nICYm IHhwYXRbMV0gIT0gJy8nICYmIHhwYXRbMV0gIT0gJy4nKQorICAgICAgeG1hdGNoZG90ID0gMTsK KworICAgIC8qIGNrbWF0Y2goKSBvcHRpb25zICovCisKKyAgICBpZiAoeG1hdGNoZG90KSAgIG1v cHRzIHw9IDE7CS8qIE1hdGNoIGRvdCAqLworICAgIGlmICgheHJlY3Vyc2l2ZSkgbW9wdHMgfD0g MjsJLyogRGlyc2VwIGlzIGZlbmNlICovCisKKyAgICBkZWJ1ZyhGMTExLCJ0cmF2ZXJzZSBlbnRy eSB4cGF0Iix4cGF0LHhwYXRzbGFzaCk7CisgICAgZGVidWcoRjExMSwidHJhdmVyc2UgZW50cnkg eHBhdGxhc3QiLHhwYXRsYXN0LHhtYXRjaGRvdCk7CisgICAgZGVidWcoRjExMCwidHJhdmVyc2Ug ZW50cnkgcGwgLT4gbnBhcnQiLHBsIC0+IG5wYXJ0LDApOworCisjaWZkZWYgUkVDVVJTSVZFCisg ICAgaWYgKHhyZWN1cnNpdmUgPiAwICYmICFpdHNhZGlyKSB7CisgICAgICAgIGNoYXIgKiBzOyAg ICAgICAgIC8qIFJlY3Vyc2l2ZSBkZXNjZW50IGFuZCB0aGlzIGlzIGEgcmVndWxhciBmaWxlICov CisgICAgICAgICotLWVuZGN1ciA9ICdcMCc7IC8qIFRlcm1pbmF0ZSBzdHJpbmcsIG92ZXJ3cml0 ZSB0cmFpbGluZyBzbGFzaCAqLworCisgICAgICAgIC8qIEZpbmQgdGhlIG50aCBzbGFzaCBmcm9t IHRoZSByaWdodCBhbmQgbWF0Y2ggZnJvbSB0aGVyZS4uLiAqLworICAgICAgICAvKiAobiA9PSB0 aGUgbnVtYmVyIG9mIHNsYXNoZXMgaW4gdGhlIG9yaWdpbmFsIHBhdHRlcm4gLSBzZWUgZmdlbikg Ki8KKyAgICAgICAgaWYgKCpzb2ZhciA9PSAnLycpIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMTAs InRyYXZlcnNlIHhwYXRzbGFzaCBhYnNvbHV0ZSIsc29mYXIsMCk7CisgICAgICAgICAgICBzID0g c29mYXI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkZWJ1ZyhGMTExLCJ0cmF2ZXJz ZSB4cGF0c2xhc2ggcmVsYXRpdmUiLHNvZmFyLHhwYXRzbGFzaCk7CisgICAgICAgICAgICBmb3Ig KHMgPSBlbmRjdXIgLSAxLCBuID0gMDsgcyA+PSBzb2Zhcjsgcy0tKSB7CisgICAgICAgICAgICAg ICAgaWYgKCpzID09ICcvJykgeworICAgICAgICAgICAgICAgICAgICBpZiAoKytuID49IHhwYXRz bGFzaCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcysrOworICAgICAgICAgICAgICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICB9CisgICAgICAgIH0KKyNpZm5kZWYgTk9TS0lQTUFUQ0gKKwkvKiBUaGlzIHNw ZWVkcyB0aGluZ3MgdXAgYSBiaXQuICovCisJLyogSWYgaXQgY2F1c2VzIHRyb3VibGUgZGVmaW5l IE5PU0tJUE1BVENIIGFuZCByZWJ1aWxkLiAqLworCWlmICh4cGF0WzBdID09ICcqJyAmJiAheHBh dFsxXSkKKwkgIHggPSB4bWF0Y2hkb3QgPyAxIDogKHNbMF0gIT0gJy4nKTsKKwllbHNlCisjZW5k aWYgLyogTk9TS0lQTUFUQ0ggKi8KKwkgIHggPSBja21hdGNoKHhwYXQsIHMsIDEsIG1vcHRzKTsg LyogTWF0Y2ggd2l0aCBvcmlnaW5hbCBwYXR0ZXJuICovCisgICAgICAgIGRlYnVnKEYxMTEsInRy YXZlcnNlIHhwYXRzbGFzaCBja21hdGNoIixzLHgpOworICAgICAgICBpZiAoeCA+IDApIHsKKyAg ICAgICAgICAgIGRlYnVnKEYxMTAsInRyYXZlcnNlIGFkZDogcmVjdXJzaXZlLCBtYXRjaCwgJiYg IWlzZGlyIixzb2ZhciwwKTsKKyAgICAgICAgICAgIGFkZHJlc3VsdChzb2ZhcixpdHNhZGlyKTsK KyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmIC8qIFJFQ1VSU0lWRSAq LworCisgICAgZGVidWcoRjExMSwidHJhdmVyc2Ugc29mYXIgMiIsc29mYXIsMCk7CisKKyAgICBz ZWdpc2RpciA9ICgocGwgLT4gZndkKSA9PSBOVUxMKSA/IDAgOiAxOworICAgIGl0c3dpbGQgPSB3 aWxkZW5hID8gKGlzd2lsZChwbCAtPiBucGFydCkpIDogMDsgLyogMTUgSnVuIDIwMDUgKi8KKwor ICAgIGRlYnVnKEYxMTEsInRyYXZlcnNlIHNlZ2lzZGlyIixzb2ZhcixzZWdpc2Rpcik7CisgICAg ZGVidWcoRjExMSwidHJhdmVyc2UgaXRzd2lsZCAiLHBsIC0+IG5wYXJ0LGl0c3dpbGQpOworCisj aWZkZWYgUkVDVVJTSVZFCisgICAgaWYgKHhyZWN1cnNpdmUgPiAwKSB7ICAgICAgICAgICAgICAg LyogSWYgcmVjdXJzaW5nIGFuZC4uLiAqLworICAgICAgICBpZiAoc2VnaXNkaXIgJiYgaXRzd2ls ZCkgICAgICAgIC8qIHRoaXMgaXMgYSBkaXIgYW5kIG5wYXJ0IGlzIHdpbGQgKi8KKyAgICAgICAg ICBnb3RvIGJsYWg7ICAgICAgICAgICAgICAgICAgICAvKiBvci4uLiAqLworICAgICAgICBlbHNl IGlmICgheHBhdGFic29sdXRlICYmICF4cGF0d2lsZCkgLyogc2VhcmNoIG9iamVjdCBpcyBub253 aWxkICovCisgICAgICAgICAgZ290byBibGFoOyAgICAgICAgICAgICAgICAgICAgLyogdGhlbiBn byByZWN1cnNlICovCisgICAgfQorI2VuZGlmIC8qIFJFQ1VSU0lWRSAqLworCisgICAgaWYgKCFp dHN3aWxkKSB7ICAgICAgICAgICAgICAgICAgICAgLyogVGhpcyBwYXRoIHNlZ21lbnQgbm90IHdp bGQ/ICovCisjaWZkZWYgQ09NTUVOVAorICAgICAgICBzdHJjcHkoZW5kY3VyLHBsIC0+IG5wYXJ0 KTsgICAgIC8qIChzYWZlKSBBcHBlbmQgbmV4dCBwYXJ0LiAqLworICAgICAgICBlbmRjdXIgKz0g KGludClzdHJsZW4ocGwgLT4gbnBhcnQpOyAvKiBBZHZhbmNlIGVuZCBwb2ludGVyICovCisjZWxz ZQorLyoKKyAgc3RyY3B5KCkgZG9lcyBub3QgYWNjb3VudCBmb3IgcXVvdGVkIG1ldGFjaGFyYWN0 ZXJzLgorICBXZSBtdXN0IHJlbW92ZSB0aGUgcXVvdGVzIGJlZm9yZSBkb2luZyB0aGUgc3RhdCgp LgorKi8KKwl7CisJICAgIGludCBxdW90ZSA9IDA7CisJICAgIGNoYXIgYywgKiBzOworCSAgICBz ID0gcGwgLT4gbnBhcnQ7CisJICAgIHdoaWxlICgoYyA9ICpzKyspKSB7CisJCWlmICghcXVvdGUp IHsKKwkJICAgIGlmIChjID09IENNRFEpIHsKKwkJCXF1b3RlID0gMTsKKwkJCWNvbnRpbnVlOwor CQkgICAgfQorCQl9CisJCSplbmRjdXIrKyA9IGM7CisJCXF1b3RlID0gMDsKKwkgICAgfQorCX0K KyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgICAgICplbmRjdXIgPSAnXDAnOyAgICAgICAgICAg ICAgICAgLyogRW5kIG5ldyBjdXJyZW50IHN0cmluZy4gKi8KKworICAgICAgICBpZiAoc3RhdChz b2Zhciwmc3RhdGJ1ZikgPT0gMCkgeyAvKiBJZiB0aGlzIHBpZWNlIGV4aXN0cy4uLiAqLworICAg ICAgICAgICAgZGVidWcoRjExMCwidHJhdmVyc2UgZXhpc3RzIixzb2ZhciwwKTsKKyAgICAgICAg ICAgICplbmRjdXIrKyA9IERJUlNFUDsgICAgICAgICAvKiBhZGQgc2xhc2ggdG8gZW5kICovCisg ICAgICAgICAgICAqZW5kY3VyID0gJ1wwJzsgICAgICAgICAgICAgLyogYW5kIGVuZCB0aGUgc3Ry aW5nIGFnYWluLiAqLworICAgICAgICAgICAgdHJhdmVyc2UocGwgLT4gZndkLCBzb2ZhciwgZW5k Y3VyKTsKKyAgICAgICAgfQorI2lmZGVmIERFQlVHCisgICAgICAgIGVsc2UgZGVidWcoRjExMCwi dHJhdmVyc2Ugbm90IGZvdW5kIiwgc29mYXIsIDApOworI2VuZGlmIC8qIERFQlVHICovCisgICAg ICAgIHJldHVybjsKKyAgICB9CisKKyAgICAqZW5kY3VyID0gJ1wwJzsgICAgICAgICAgICAgICAg ICAgICAvKiBFbmQgY3VycmVudCBzdHJpbmcgKi8KKyAgICBkZWJ1ZyhGMTExLCJ0cmF2ZXJzZSBz b2ZhciAzIixzb2ZhciwwKTsKKworICAgIGlmICghaXRzYWRpcikKKyAgICAgIHJldHVybjsKKwor ICAgIC8qIFNlYXJjaCBpcyByZWN1cnNpdmUgb3IgLi4uICovCisgICAgLyogcGF0aCBzZWdtZW50 IGNvbnRhaW5zIHdpbGRjYXJkcywgaGF2ZSB0byBvcGVuIGFuZCBzZWFyY2ggZGlyZWN0b3J5LiAq LworCisgIGJsYWg6CisKKyAgICBkZWJ1ZyhGMTEwLCJ0cmF2ZXJzZSBvcGVuaW5nIGRpcmVjdG9y eSIsIHNvZmFyLCAwKTsKKworI2lmZGVmIE9QRU5ESVIKKyAgICBkZWJ1ZyhGMTEwLCJ0cmF2ZXJz ZSBvcGVuZGlyKCkiLHNvZmFyLDApOworICAgIGlmICgoZmQgPSBvcGVuZGlyKHNvZmFyKSkgPT0g TlVMTCkgeyAgICAgICAgLyogQ2FuJ3Qgb3BlbiwgZmFpbC4gKi8KKyAgICAgICAgZGVidWcoRjEw MSwidHJhdmVyc2Ugb3BlbmRpcigpIGZhaWxlZCIsIiIsZXJybm8pOworICAgICAgICByZXR1cm47 CisgICAgfQorICAgIHdoaWxlICgoZGlyYnVmID0gcmVhZGRpcihmZCkpKQorI2Vsc2UgLyogIU9Q RU5ESVIgKi8KKyAgICBkZWJ1ZyhGMTEwLCJ0cmF2ZXJzZSBkaXJlY3Rvcnkgb3BlbigpIixzb2Zh ciwwKTsKKyAgICBpZiAoKGZkID0gb3Blbihzb2ZhcixPX1JET05MWSkpIDwgMCkgeworICAgICAg ICBkZWJ1ZyhGMTAxLCJ0cmF2ZXJzZSBkaXJlY3Rvcnkgb3BlbigpIGZhaWxlZCIsIiIsZXJybm8p OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHdoaWxlIChyZWFkKGZkLCAoY2hhciAqKWRp cmJ1Ziwgc2l6ZW9mIGRpcl9lbnRyeSkgPiAwKQorI2VuZGlmIC8qIE9QRU5ESVIgKi8KKyAgICAg IHsgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVhZCBlYWNoIGVudHJ5IGluIHRoaXMgZGly ZWN0b3J5ICovCisgICAgICAgICAgaW50IGV4aXN0czsKKyAgICAgICAgICBjaGFyICplb3MsICpz OworICAgICAgICAgIGV4aXN0cyA9IDA7CisKKyAgICAgICAgICAvKiBPbiBzb21lIHBsYXRmb3Jt cywgdGhlIHJlYWRbZGlyXSgpIGNhbiByZXR1cm4gZGVsZXRlZCBmaWxlcywgKi8KKyAgICAgICAg ICAvKiBlLmcuIEhQLVVYIDUuMDAuICBUaGVyZSBpcyBubyBwb2ludCBpbiBncmluZGluZyB0aHJv dWdoIHRoaXMgKi8KKyAgICAgICAgICAvKiByb3V0aW5lIHdoZW4gdGhlIGZpbGUgZG9lc24ndCBl eGlzdC4uLiAqLworCisgICAgICAgICAgaWYgKCAgICAgICAgICAvKiBUaGVyZSAgYWN0dWFsbHkg aXMgYW4gaW5vZGUuLi4gKi8KKyNpZmRlZiBCU0Q0MgorICAgICAgICAgICAgICAgICAgICAgICAg IGRpcmJ1Zi0+ZF9pbm8gIT0gLTEKKyNlbHNlCisjaWZkZWYgdW5vcworICAgICAgICAgICAgICAg ICAgICAgICAgIGRpcmJ1Zi0+ZF9pbm8gIT0gLTEKKyNlbHNlCisjaWZkZWYgUU5YCisgICAgICAg ICAgICAgICAgICAgICAgICAgZGlyYnVmLT5kX3N0YXQuc3RfaW5vICE9IDAKKyNlbHNlCisjaWZk ZWYgU09MQVJJUworICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmJ1Zi0+ZF9pbm8gIT0gMAor I2Vsc2UKKyNpZmRlZiBzdW4KKyAgICAgICAgICAgICAgICAgICAgICAgICBkaXJidWYtPmRfZmls ZW5vICE9IDAKKyNlbHNlCisjaWZkZWYgYnNkaQorICAgICAgICAgICAgICAgICAgICAgICAgIGRp cmJ1Zi0+ZF9maWxlbm8gIT0gMAorI2Vsc2UKKyNpZmRlZiBfXzM4NkJTRF9fCisgICAgICAgICAg ICAgICAgICAgICAgICAgZGlyYnVmLT5kX2ZpbGVubyAhPSAwCisjZWxzZQorI2lmZGVmIF9fRnJl ZUJTRF9fCisgICAgICAgICAgICAgICAgICAgICAgICAgZGlyYnVmLT5kX2ZpbGVubyAhPSAwCisj ZWxzZQorI2lmZGVmIHVsdHJpeAorICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmJ1Zi0+Z2Rf aW5vICE9IDAKKyNlbHNlCisjaWZkZWYgUGxhbjkKKyAgICAgICAgICAgICAgICAgICAgICAgICAx CisjZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmJ1Zi0+ZF9pbm8gIT0gMAorI2Vu ZGlmIC8qIFBsYW45ICovCisjZW5kaWYgLyogdWx0cml4ICovCisjZW5kaWYgLyogX19GcmVlQlNE X18gKi8KKyNlbmRpZiAvKiBfXzM4NkJTRF9fICovCisjZW5kaWYgLyogYnNkaSAqLworI2VuZGlm IC8qIHN1biAqLworI2VuZGlmIC8qIFNPTEFSSVMgKi8KKyNlbmRpZiAvKiBRTlggKi8KKyNlbmRp ZiAvKiB1bm9zICovCisjZW5kaWYgLyogQlNENDIgKi8KKyAgICAgICAgICAgICAgKQorICAgICAg ICAgICAgZXhpc3RzID0gMTsKKyAgICAgICAgICBpZiAoIWV4aXN0cykKKyAgICAgICAgICAgIGNv bnRpbnVlOworCisgICAgICAgICAgY2tzdHJuY3B5KG5hbWJ1ZiwgICAgICAgICAgICAgLyogQ29w eSB0aGUgbmFtZSAqLworICAgICAgICAgICAgICAgICAgZGlyYnVmLT5kX25hbWUsCisgICAgICAg ICAgICAgICAgICBNQVhOQU1MRU4KKyAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgaWYg KG5hbWJ1ZlswXSA9PSAnLicpIHsKKyAgICAgICAgICAgICAgaWYgKCFuYW1idWZbMV0gfHwgKG5h bWJ1ZlsxXSA9PSAnLicgJiYgIW5hbWJ1ZlsyXSkpIHsKKyAgICAgICAgICAgICAgICAgIGRlYnVn KEYxMTAsInRyYXZlcnNlIHNraXBwaW5nIixuYW1idWYsMCk7CisgICAgICAgICAgICAgICAgICBj b250aW51ZTsgICAgICAgICAgICAgLyogc2tpcCAiLiIgYW5kICIuLiIgKi8KKyAgICAgICAgICAg ICAgfQorICAgICAgICAgIH0KKyAgICAgICAgICBzID0gbmFtYnVmOyAgICAgICAgICAgICAgICAg ICAvKiBDb3B5IG5hbWUgdG8gZW5kIG9mIHNvZmFyICovCisgICAgICAgICAgZW9zID0gZW5kY3Vy OworICAgICAgICAgIHdoaWxlICgoKmVvcyA9ICpzKSkgeworICAgICAgICAgICAgICBzKys7Cisg ICAgICAgICAgICAgIGVvcysrOworICAgICAgICAgIH0KKy8qCisgIE5vdyB3ZSBjaGVjayB0aGUg ZmlsZSBmb3IgKGEpIHdoZXRoZXIgaXQgaXMgYSBkaXJlY3RvcnksIGFuZCAoYikgd2hldGhlcgor ICBpdHMgbmFtZSBtYXRjaGVzIG91ciBwYXR0ZXJuLiAgSWYgaXQgaXMgYSBkaXJlY3RvcnksIGFu ZCBpZiB3ZSBoYXZlIGJlZW4KKyAgdG9sZCB0byBidWlsZCBhIHJlY3Vyc2l2ZSBsaXN0LCB0aGVu IHdlIG11c3QgZGVzY2VuZCByZWdhcmRsZXNzIG9mIHdoZXRoZXIKKyAgaXQgbWF0Y2hlcyB0aGUg cGF0dGVybi4gIElmIGl0IGlzIG5vdCBhIGRpcmVjdG9yeSBhbmQgaXQgZG9lcyBub3QgbWF0Y2gK KyAgb3VyIHBhdHRlcm4sIHdlIHNraXAgaXQuICBOb3RlOiBzb2ZhciBpcyB0aGUgZnVsbCBwYXRo bmFtZSwgbmFtYnVmIGlzCisgIHRoZSBuYW1lIG9ubHkuCisqLworICAgICAgICAgIC8qIERvIHRo aXMgZmlyc3QgdG8gc2F2ZSBwb2ludGxlc3MgZnVuY3Rpb24gY2FsbHMgKi8KKyAgICAgICAgICBp ZiAobmFtYnVmWzBdID09ICcuJyAmJiAheG1hdGNoZG90KSAvKiBEaXIgbmFtZSBzdGFydHMgd2l0 aCAnLicgKi8KKyAgICAgICAgICAgIGNvbnRpbnVlOworCSAgaWYgKHN0YXRoYWNrKSB7CisJICAg ICAgaWYgKHhyZWN1cnNpdmUgfHwgeGZpbG9ubHkgfHwgeGRpcm9ubHkgfHwgeHBhdHNsYXNoKSB7 CisJCSAgaXRzYWRpciA9IHhpc2Rpcihzb2Zhcik7IC8qIFNlZSBpZiBpdCdzIGEgZGlyZWN0b3J5 ICovCisJCSAgZGVidWcoRjEwMSwiU1RBVCIsIiIsMTkpOworCSAgICAgIH0gZWxzZSB7CisJCSAg aXRzYWRpciA9IDA7CisJICAgICAgfQorCSAgfSBlbHNlIHsKKwkgICAgICBpdHNhZGlyID0geGlz ZGlyKHNvZmFyKTsKKwkgICAgICBkZWJ1ZyhGMTAxLCJTVEFUIiwiIiwyMCk7CisJICB9CisKKyNp ZmRlZiBDS1NZTUxJTksKKyNpZmRlZiBVU0VfTFNUQVQKKwkgIGlmIChpdHNhZGlyICYmIHhub2xp bmtzKSB7CQkvKiBJZiBub3QgZm9sbG93aW5nIHN5bWxpbmtzICovCisJICAgICAgaW50IHg7CisJ ICAgICAgc3RydWN0IHN0YXQgYnVmOworCSAgICAgIHggPSBsc3RhdChzb2ZhciwmYnVmKTsKKwkg ICAgICBkZWJ1ZyhGMTExLCJ0cmF2ZXJzZSBsc3RhdCAyIixzb2Zhcix4KTsKKwkgICAgICBpZiAo eCA+IC0xICYmCisjaWZkZWYgU19JU0xOSworCQkgIFNfSVNMTksoYnVmLnN0X21vZGUpCisjZWxz ZQorI2lmZGVmIF9JRkxOSworCQkgICgoX0lGTVQgJiBidWYuc3RfbW9kZSkgPT0gX0lGTE5LKQor I2VuZGlmIC8qIF9JRkxOSyAqLworI2VuZGlmIC8qIFNfSVNMTksgKi8KKwkJICApCisJCWl0c2Fk aXIgPSAwOworCSAgfQorI2VuZGlmIC8qIFVTRV9MU1RBVCAqLworI2VuZGlmIC8qIENLU1lNTElO SyAqLworCisjaWZkZWYgUkVDVVJTSVZFCisgICAgICAgICAgaWYgKHhyZWN1cnNpdmUgPiAwICYm IGl0c2FkaXIgJiYKKyAgICAgICAgICAgICAgKHhwYXRsYXN0WzBdID09ICcqJykgJiYgIXhwYXRs YXN0WzFdCisgICAgICAgICAgICAgICkgeworICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLAorICAg ICAgICAgICAgICAgICAgICAidHJhdmVyc2UgYWRkOiByZWN1cnNpdmUgJiYgaXNkaXIgJiYgc2Vn aXNkaXIgb3IgbWF0Y2giLAorICAgICAgICAgICAgICAgICAgICBzb2ZhciwKKyAgICAgICAgICAg ICAgICAgICAgc2VnaXNkaXIKKyAgICAgICAgICAgICAgICAgICAgKTsKKwkgICAgICBhZGRyZXN1 bHQoc29mYXIsaXRzYWRpcik7CisJICAgICAgaWYgKG51bWZuZCA8IDApIHJldHVybjsKKyAgICAg ICAgICB9CisjZW5kaWYgLyogUkVDVVJTSVZFICovCisKKyAgICAgICAgICBkZWJ1ZyhGMTExLCJ0 cmF2ZXJzZSBtcmVzdWx0IHhwYXQiLHhwYXQseHJlY3Vyc2l2ZSk7CisgICAgICAgICAgZGVidWco RjExMSwidHJhdmVyc2UgbXJlc3VsdCBwbCAtPiBucGFydCIsCisgICAgICAgICAgICAgICAgcGwg LT4gbnBhcnQsCisgICAgICAgICAgICAgICAgKChwbCAtPiBmd2QpID8gOTk5OSA6IDApCisgICAg ICAgICAgICAgICAgKTsKKyAgICAgICAgICBkZWJ1ZyhGMTExLCJ0cmF2ZXJzZSBtcmVzdWx0IHNv ZmFyIHNlZ2lzZGlyIixzb2ZhcixzZWdpc2Rpcik7CisgICAgICAgICAgZGVidWcoRjExMSwidHJh dmVyc2UgbXJlc3VsdCBzb2ZhciBpdHNhZGlyIixzb2ZhcixpdHNhZGlyKTsKKyAgICAgICAgICBk ZWJ1ZyhGMTAxLCJ0cmF2ZXJzZSBtcmVzdWx0IHhtYXRjaGRvdCIsIiIseG1hdGNoZG90KTsKKy8q CisgIE1hdGNoIHRoZSBwYXRoIHNvIGZhciB3aXRoIHRoZSBwYXR0ZXJuIGFmdGVyIHN0cmlwcGlu ZyBhbnkgbGVhZGluZyAiLi8iCisgIGZyb20gZWl0aGVyIG9yIGJvdGguICBUaGUgcGF0dGVybiBj aG9zZW4gaXMgdGhlIGZ1bGwgb3JpZ2luYWwgcGF0dGVybiBpZgorICB0aGUgbWF0Y2ggY2FuZGlk YXRlIChzb2ZhcikgaXMgbm90IGEgZGlyZWN0b3J5LCBvciBlbHNlIGp1c3QgdGhlIG5hbWUgcGFy dAorICAocGwtPm5wYXJ0KSBpZiBpdCBpcy4KKyovCisJICB7CisJICAgICAgY2hhciAqIHMxOwkJ LyogVGhlIHBhdHRlcm4gKi8KKwkgICAgICBjaGFyICogczIgPSBzb2ZhcjsJLyogVGhlIHBhdGgg c28gZmFyICovCisJICAgICAgY2hhciAqIHMzOwkJLyogV29ya2VyICovCisJICAgICAgaW50IG9w dHM7CQkJLyogTWF0Y2ggb3B0aW9ucyAqLworCisJICAgICAgczEgPSBpdHNhZGlyID8gcGwtPm5w YXJ0IDogeHBhdDsKKworI2lmbmRlZiBDT01NRU5UCisJICAgICAgLyogSSBjYW4ndCBleHBsYWlu IHRoaXMgYnV0IGl0IHVuYnJlYWtzICJjZCBibGFoL3N1YjxFc2M+IiAqLworCSAgICAgIGlmIChp dHNhZGlyICYmICF4cmVjdXJzaXZlICYmIHhwYXRzbGFzaCA+IDAgJiYKKwkJICBzZWdpc2RpciA9 PSAwICYmIGl0c3dpbGQpIHsKKwkJICBzMSA9IHhwYXQ7CisJCSAgZGVidWcoRjExMCwidHJhdmVy c2UgbXJlc3VsdCBzMSBrbHVkZ2UiLHMxLDApOworCSAgICAgIH0KKyNlbmRpZiAvKiBDT01NRU5U ICovCisKKwkgICAgICBpZiAoeHJlY3Vyc2l2ZSAmJiB4cGF0c2xhc2ggPT0gMCkKKwkJczIgPSBu YW1idWY7CisJICAgICAgd2hpbGUgKChzMVswXSA9PSAnLicpICYmIChzMVsxXSA9PSAnLycpKSAv KiBTdHJpcCAiLi8iICovCisJCXMxICs9IDI7CisJICAgICAgd2hpbGUgKChzMlswXSA9PSAnLicp ICYmIChzMlsxXSA9PSAnLycpKSAvKiBEaXR0byAqLworCQlzMiArPSAyOworCSAgICAgIG9wdHMg PSBtb3B0czsJCS8qIE1hdGNoIG9wdGlvbnMgKi8KKwkgICAgICBpZiAoaXRzYWRpcikgCQkvKiBD dXJyZW50IHNlZ21lbnQgaXMgYSBkaXJlY3RvcnkgKi8KKwkJb3B0cyA9IG1vcHRzICYgMTsJLyog Tm8gZmVuY2VzICovCisJICAgICAgczMgPSBzMjsJCQkvKiBHZXQgc2VnbWVudCBkZXB0aCAqLwor CSAgICAgIGRlcHRoID0gMDsKKwkgICAgICB3aGlsZSAoKnMzKSB7IGlmICgqczMrKyA9PSAnLycp IGRlcHRoKys7IH0KKyNpZm5kZWYgTk9TS0lQTUFUQ0gKKwkgICAgICAvKiBUaGlzIHNwZWVkcyB0 aGluZ3MgdXAgYSBiaXQuICovCisJICAgICAgLyogSWYgaXQgY2F1c2VzIHRyb3VibGUgZGVmaW5l IE5PU0tJUE1BVENIIGFuZCByZWJ1aWxkLiAqLworCSAgICAgIGlmIChkZXB0aCA9PSAwICYmIChz MVswXSA9PSAnKicpICYmICFzMVsxXSkKKwkJbXJlc3VsdCA9IHhtYXRjaGRvdCA/IDEgOiAoczJb MF0gIT0gJy4nKTsKKwkgICAgICBlbHNlCisjZW5kaWYgLyogTk9TS0lQTUFUQ0ggKi8KKwkJbXJl c3VsdCA9IGNrbWF0Y2goczEsczIsMSxvcHRzKTsgLyogTWF0Y2ggKi8KKwkgIH0KKyNpZmRlZiBE RUJVRworCSAgaWYgKGRlYmxvZykgeworCSAgICAgIGRlYnVnKEYxMTEsInRyYXZlcnNlIG1yZXN1 bHQgZGVwdGgiLHNvZmFyLGRlcHRoKTsKKwkgICAgICBkZWJ1ZyhGMTAxLCJ0cmF2ZXJzZSBtcmVz dWx0IHhwYXRzbGFzaCIsIiIseHBhdHNsYXNoKTsKKwkgICAgICBkZWJ1ZyhGMTExLCJ0cmF2ZXJz ZSBtcmVzdWx0IG5hbWJ1ZiIsbmFtYnVmLG1yZXN1bHQpOworCSAgICAgIGRlYnVnKEYxMTEsInRy YXZlcnNlIG1yZXN1bHQgaXRzd2lsZCIscGwgLT4gbnBhcnQsaXRzd2lsZCk7CisJICAgICAgZGVi dWcoRjExMSwidHJhdmVyc2UgbXJlc3VsdCBzZWdpc2RpciIscGwgLT4gbnBhcnQsc2VnaXNkaXIp OworCSAgfQorI2VuZGlmIC8qIERFQlVHICovCisgICAgICAgICAgaWYgKG1yZXN1bHQgfHwJCS8q IElmIG1hdGNoIHN1Y2NlZWRlZCAqLworCSAgICAgIHhyZWN1cnNpdmUgfHwJCS8qIE9yIHNlYXJj aCBpcyByZWN1cnNpdmUgKi8KKwkgICAgICBkZXB0aCA8IHhwYXRzbGFzaAkJLyogT3Igbm90IGRl ZXAgZW5vdWdoIHRvIG1hdGNoLi4uICovCisJICAgICAgKSB7CisgICAgICAgICAgICAgIGlmICgg ICAgICAgICAgICAgICAgICAgICAgLyogSWYgaXQncyBub3QgYSBkaXJlY3RvcnkuLi4gKi8KKy8q CisgIFRoZSBwcm9ibGVtIGhlcmUgaXMgdGhhdCBzZWdpc2RpciBpcyBhcHBhcmVudGx5IG5vdCBz ZXQgYXBwcm9wcmlhdGVseS4KKyAgSWYgSSBsZWF2ZSBpbiB0aGUgIXNlZ2lzZGlyIHRlc3QsIHRo ZW4gImRpciAvcmVjdXJzaXZlIGJsYWgiICh3aGVyZSBibGFoIGlzCisgIGEgZGlyZWN0b3J5IG5h bWUpIG1pc3NlcyBzb21lIHJlZ3VsYXIgZmlsZXMgYmVjYXVzZSBzb21ldGltZXMgc2VnaXNkaXIK KyAgaXMgc2V0IGFuZCBzb21ldGltZXMgaXQncyBub3QuICBCdXQgaWYgSSBjb21tZW50IGl0IG91 dCwgdGhlbgorICAiZGlyIDxzdGFyPi88c3Rhcj4udHh0IGxpc3RzIGV2ZXJ5IGZpbGUgaW4gKiBh bmQgZG9lcyBub3QgZXZlbiBvcGVuIHVwIHRoZQorICBzdWJkaXJlY3Rvcmllcy4gIEhvd2V2ZXIs ICJkaXIgL3JlYyA8c3Rhcj4vPHN0YXI+LnR4dCIgd29ya3MgcmlnaHQuCisqLworI2lmZGVmIENP TU1FTlQKKyAgICAgICAgICAgICAgICAgIG1yZXN1bHQgJiYgKCFpdHNhZGlyICYmICFzZWdpc2Rp cikKKyNlbHNlCisgICAgICAgICAgICAgICAgICBtcmVzdWx0ICYmCQkvKiBNYXRjaGVkICovCisg ICAgICAgICAgICAgICAgICAhaXRzYWRpciAmJgkJLyogc29mYXIgaXMgbm90IGEgZGlyZWN0b3J5 ICovCisgICAgICAgICAgICAgICAgICAoKCF4cmVjdXJzaXZlICYmICFzZWdpc2RpcikgfHwgeHJl Y3Vyc2l2ZSkKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgICAgICAgICAgICAgICApIHsKKwkJ ICBkZWJ1ZyhGMTEwLAorCQkJInRyYXZlcnNlIGFkZDogbWF0Y2ggJiYgIWl0c2FkaXIiLHNvZmFy LDApOworCQkgIGFkZHJlc3VsdChzb2ZhcixpdHNhZGlyKTsKKwkJICBpZiAobnVtZm5kIDwgMCkg cmV0dXJuOworICAgICAgICAgICAgICB9IGVsc2UgaWYgKGl0c2FkaXIgJiYgKHhyZWN1cnNpdmUg fHwgbXJlc3VsdCkpIHsKKyAgICAgICAgICAgICAgICAgIHN0cnVjdCBwYXRoICogeHggPSBOVUxM OworICAgICAgICAgICAgICAgICAgKmVvcysrID0gRElSU0VQOyAgICAgIC8qIEFkZCBkaXJlY3Rv cnkgc2VwYXJhdG9yICovCisgICAgICAgICAgICAgICAgICAqZW9zID0gJ1wwJzsgICAgICAgICAg LyogdG8gZW5kIG9mIHNlZ21lbnQgKi8KKyNpZmRlZiBSRUNVUlNJVkUKKyAgICAgICAgICAgICAg ICAgIC8qIENvcHkgcHJldmlvdXMgcGF0dGVybiBzZWdtZW50IHRvIHRoaXMgbmV3IGRpcmVjdG9y eSAqLworCisgICAgICAgICAgICAgICAgICBpZiAoeHJlY3Vyc2l2ZSA+IDAgJiYgIShwbCAtPiBm d2QpKSB7CisgICAgICAgICAgICAgICAgICAgICAgeHggPSAoc3RydWN0IHBhdGggKikgbWFsbG9j KHNpemVvZiAoc3RydWN0IHBhdGgpKTsKKyAgICAgICAgICAgICAgICAgICAgICBwbCAtPiBmd2Qg PSB4eDsKKyAgICAgICAgICAgICAgICAgICAgICBpZiAoeHgpIHsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgeHggLT4gZndkID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ry Y3B5KHh4IC0+IG5wYXJ0LCBwbCAtPiBucGFydCk7IC8qIHNhZmUgKi8KKyAgICAgICAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICAgICAgICB9CisjZW5kaWYgLyogUkVDVVJTSVZFICovCisg ICAgICAgICAgICAgICAgICB0cmF2ZXJzZShwbCAtPiBmd2QsIHNvZmFyLCBlb3MpOyAvKiBUcmF2 ZXJzZSBuZXcgZGlyZWN0b3J5ICovCisgICAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAg ICB9CisjaWZkZWYgT1BFTkRJUgorICAgIGNsb3NlZGlyKGZkKTsKKyNlbHNlIC8qICFPUEVORElS ICovCisgICAgY2xvc2UoZmQpOworI2VuZGlmIC8qIE9QRU5ESVIgKi8KK30KKworLyoKKyAqIGFk ZHJlc3VsdDoKKyAqICBBZGRzIGEgcmVzdWx0IHN0cmluZyB0byB0aGUgcmVzdWx0IGFycmF5LiAg SW5jcmVtZW50cyB0aGUgbnVtYmVyCisgKiAgb2YgbWF0Y2hlcyBmb3VuZCwgY29waWVzIHRoZSBm b3VuZCBzdHJpbmcgaW50byBvdXIgc3RyaW5nCisgKiAgYnVmZmVyLCBhbmQgcHV0cyBhIHBvaW50 ZXIgdG8gdGhlIGJ1ZmZlciBpbnRvIHRoZSBjYWxsZXIncyByZXN1bHQKKyAqICBhcnJheS4gIE91 ciBmcmVlIGJ1ZmZlciBwb2ludGVyIGlzIHVwZGF0ZWQuICBJZiB0aGVyZSBpcyBubworICogIG1v cmUgcm9vbSBpbiB0aGUgY2FsbGVyJ3MgYXJyYXksIHRoZSBudW1iZXIgb2YgbWF0Y2hlcyBpcyBz ZXQgdG8gLTEuCisgKiBJbnB1dDogYSByZXN1bHQgc3RyaW5nLgorICogUmV0dXJuczogbm90aGlu Zy4KKyAqLworc3RhdGljIFZPSUQKK2FkZHJlc3VsdChzdHIsaXRzYWRpcikgY2hhciAqc3RyOyBp bnQgaXRzYWRpcjsgeworICAgIGludCBsZW47CisKKyAgICBpZiAoIWZyZWVwdHIpIHsKKwlkZWJ1 ZyhGMTAwLCJhZGRyZXN1bHQgc3RyaW5nIHNwYWNlIG5vdCBpbml0J2QiLCIiLDApOworCWluaXRz cGFjZShtdGNocyxzc3BsZW4pOworICAgIH0KKyAgICBpZiAoIXN0cikgc3RyID0gIiI7CisgICAg ZGVidWcoRjExMSwiYWRkcmVzdWx0IixzdHIsaXRzYWRpcik7CisgICAgaWYgKCEqc3RyKQorICAg ICAgcmV0dXJuOworCisgICAgaWYgKGl0c2FkaXIgPCAwKSB7CisJaXRzYWRpciA9IHhpc2Rpcihz dHIpOworICAgIH0KKyAgICBpZiAoKHhkaXJvbmx5ICYmICFpdHNhZGlyKSB8fCAoeGZpbG9ubHkg JiYgaXRzYWRpcikpIHsKKyAgICAgICAgZGVidWcoRjExMSwiYWRkcmVzdWx0IHNraXAiLHN0cixp dHNhZGlyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICB3aGlsZSAoc3RyWzBdID09ICcu JyAmJiBJU0RJUlNFUChzdHJbMV0pKSAvKiBTdHJpcCBhbGwgIi4vIiBmcm9tIGZyb250ICovCisg ICAgICBzdHIgKz0gMjsKKyAgICBpZiAoLS1yZW1sZW4gPCAwKSB7ICAgICAgICAgICAgICAgICAv KiBFbGVtZW50cyBsZWZ0IGluIGFycmF5IG9mIG5hbWVzICovCisgICAgICAgIGRlYnVnKEYxMTEs ImFkZHJlc3VsdCBBUlJBWSBGVUxMIixzdHIsbnVtZm5kKTsKKyAgICAgICAgbnVtZm5kID0gLTE7 CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbGVuID0gKGludClzdHJsZW4oc3RyKTsJCS8q IFNwYWNlIHRoaXMgd2lsbCB1c2UgKi8KKyAgICBkZWJ1ZyhGMTExLCJhZGRyZXN1bHQgbGVuIixz dHIsbGVuKTsKKworICAgIGlmIChsZW4gPCAxKQorICAgICAgcmV0dXJuOworCisgICAgaWYgKChm cmVlcHRyICsgbGVuICsgaXRzYWRpciArIDEpID4gKHNzcGFjZSArIHNzcGxlbikpIHsKKyAgICAg ICAgZGVidWcoRjExMSwiYWRkcmVzdWx0IE9VVCBPRiBTUEFDRSIsc3RyLG51bWZuZCk7CisjaWZk ZWYgRFlOQU1JQworCXByaW50ZigKKyI/U3RyaW5nIHNwYWNlICVkIGV4aGF1c3RlZCAtIHVzZSBT RVQgRklMRSBTVFJJTkdTUEFDRSB0byBpbmNyZWFzZVxuIixzc3BsZW4pOworI2Vsc2UKKwlwcmlu dGYoIj9TdHJpbmcgc3BhY2UgJWQgZXhoYXVzdGVkXG4iLHNzcGxlbik7CisjZW5kaWYgLyogRFlO QU1JQyAqLworICAgICAgICBudW1mbmQgPSAtMTsgICAgICAgICAgICAgICAgICAgIC8qIERvIG5v dCByZWNvcmQgaWYgbm90IGVub3VnaCBzcGFjZSAqLworICAgICAgICByZXR1cm47CisgICAgfQor ICAgIHN0cmNweShmcmVlcHRyLHN0cik7CQkvKiBzYWZlICovCisKKyAgICAvKiBUYWcgZGlyZWN0 b3J5IG5hbWVzIGJ5IHB1dHRpbmcgJy8nIGF0IHRoZSBlbmQgKi8KKworICAgIGlmIChpdHNhZGly ICYmIChmcmVlcHRyW2xlbi0xXSA9PSAnLycpKSB7CisgICAgICAgIGZyZWVwdHJbbGVuKytdID0g RElSU0VQOworICAgICAgICBmcmVlcHRyW2xlbl0gPSAnXDAnOworICAgIH0KKyAgICBpZiAobnVt Zm5kID49IG1heG5hbWVzKSB7CisjaWZkZWYgRFlOQU1JQworCXByaW50ZigKKyI/VG9vIG1hbnkg ZmlsZXMgKCVkIG1heCkgLSB1c2UgU0VUIEZJTEUgTElTVFNJWkUgdG8gaW5jcmVhc2VcbiIsbWF4 bmFtZXMpOworI2Vsc2UKKwlwcmludGYoIj9Ub28gbWFueSBmaWxlcyAtICVkIG1heFxuIixtYXhu YW1lcyk7CisjZW5kaWYgLyogRFlOQU1JQyAqLworICAgICAgICBudW1mbmQgPSAtMTsKKyAgICAg ICAgcmV0dXJuOworICAgIH0KKyAgICBzdHIgPSBmcmVlcHRyOworICAgICpyZXNwdHIrKyA9IGZy ZWVwdHI7CisgICAgZnJlZXB0ciArPSAobGVuICsgMSk7CisgICAgbnVtZm5kKys7CisgICAgZGVi dWcoRjExMSwiYWRkcmVzdWx0IEFERCIsc3RyLG51bWZuZCk7Cit9CisKKyNpZmRlZiBDT01NRU5U CisvKgorICogbWF0Y2gocGF0dGVybixzdHJpbmcpOgorICogIHBhdHRlcm4gbWF0Y2hlci4gIFRh a2VzIGEgc3RyaW5nIGFuZCBhIHBhdHRlcm4gcG9zc2libHkgY29udGFpbmluZworICogIHRoZSB3 aWxkY2FyZCBjaGFyYWN0ZXJzICcqJyBhbmQgJz8nLiAgUmV0dXJucyB0cnVlIGlmIHRoZSBwYXR0 ZXJuCisgKiAgbWF0Y2hlcyB0aGUgc3RyaW5nLCBmYWxzZSBvdGhlcndpc2UuCisgKiBPcmlnbmFs bHkgYnk6IEplZmYgRGFtZW5zLCBDVUNDQSwgMTk4NAorICogTm8gbG9uZ2VyIHVzZWQgYXMgb2Yg Qy1LZXJtaXQgNy4wLCBub3cgd2UgdXNlIGNrbWF0Y2goKSBpbnN0ZWFkIChja2NsaWIuYykuCisg KgorICogSW5wdXQ6IGEgc3RyaW5nIGFuZCBhIHdpbGRjYXJkIHBhdHRlcm4uCisgKiBSZXR1cm5z OiAxIGlmIG1hdGNoLCAwIGlmIG5vIG1hdGNoLgorICovCitzdGF0aWMgaW50CittYXRjaChwYXR0 ZXJuLCBzdHJpbmcpIGNoYXIgKnBhdHRlcm4sICpzdHJpbmc7IHsKKyAgICBjaGFyICpwc2F2ZSA9 IE5VTEwsICpzc2F2ZSA9IE5VTEw7ICAvKiBCYWNrdXAgcG9pbnRlcnMgZm9yIGZhaWx1cmUgKi8K KyAgICBpbnQgcSA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBRdW90ZSBmbGFnICov CisKKyAgICBpZiAoKnN0cmluZyA9PSAnLicgJiYgKnBhdHRlcm4gIT0gJy4nICYmICF4bWF0Y2hk b3QpIHsKKyAgICAgICAgZGVidWcoRjExMCwibWF0Y2ggc2tpcCIsc3RyaW5nLDApOworICAgICAg ICByZXR1cm4oMCk7CisgICAgfQorICAgIHdoaWxlICgxKSB7CisgICAgICAgIGZvciAoOyAqcGF0 dGVybiA9PSAqc3RyaW5nOyBwYXR0ZXJuKyssc3RyaW5nKyspIC8qIFNraXAgZmlyc3QgKi8KKyAg ICAgICAgICBpZiAoKnN0cmluZyA9PSAnXDAnKSByZXR1cm4oMSk7IC8qIEVuZCBvZiBzdHJpbmdz LCBzdWNjZWVkICovCisKKyAgICAgICAgaWYgKCpwYXR0ZXJuID09ICdcXCcgJiYgcSA9PSAwKSB7 IC8qIFdhdGNoIG91dCBmb3IgcXVvdGVkICovCisgICAgICAgICAgICBxID0gMTsgICAgICAgICAg ICAgICAgICAgICAgLyogbWV0YWNoYXJhY3RlcnMgKi8KKyAgICAgICAgICAgIHBhdHRlcm4rKzsg ICAgICAgICAgICAgICAgICAvKiBhZHZhbmNlIHBhc3QgcXVvdGUgKi8KKyAgICAgICAgICAgIGlm ICgqcGF0dGVybiAhPSAqc3RyaW5nKSByZXR1cm4oMCk7CisgICAgICAgICAgICBjb250aW51ZTsK KyAgICAgICAgfSBlbHNlIHEgPSAwOworCisgICAgICAgIGlmIChxKSB7CisgICAgICAgICAgICBy ZXR1cm4oMCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoKnN0cmluZyAhPSAn XDAnICYmICpwYXR0ZXJuID09ICc/JykgeworICAgICAgICAgICAgICAgIHBhdHRlcm4rKzsgICAg ICAgICAgICAgIC8qICc/JywgbGV0IGl0IG1hdGNoICovCisgICAgICAgICAgICAgICAgc3RyaW5n Kys7CisgICAgICAgICAgICB9IGVsc2UgaWYgKCpwYXR0ZXJuID09ICcqJykgeyAvKiAnKicgLi4u ICovCisgICAgICAgICAgICAgICAgcHNhdmUgPSArK3BhdHRlcm47ICAgICAgLyogcmVtZW1iZXIg d2hlcmUgd2Ugc2F3IGl0ICovCisgICAgICAgICAgICAgICAgc3NhdmUgPSBzdHJpbmc7ICAgICAg ICAgLyogbGV0IGl0IG1hdGNoIDAgY2hhcnMgKi8KKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc3Nh dmUgIT0gTlVMTCAmJiAqc3NhdmUgIT0gJ1wwJykgeyAvKiBpZiBub3QgYXQgZW5kICAqLworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC4uLmhhdmUgc2VlbiBhIHN0 YXIgKi8KKyAgICAgICAgICAgICAgICBzdHJpbmcgPSArK3NzYXZlOyAgICAgICAvKiBza2lwIDEg Y2hhciBmcm9tIHN0cmluZyAqLworICAgICAgICAgICAgICAgIHBhdHRlcm4gPSBwc2F2ZTsgICAg ICAgIC8qIGFuZCBiYWNrIHVwIHBhdHRlcm4gKi8KKyAgICAgICAgICAgIH0gZWxzZSByZXR1cm4o MCk7ICAgICAgICAgICAvKiBvdGhlcndpc2UganVzdCBmYWlsICovCisgICAgICAgIH0KKyAgICB9 Cit9CisjZW5kaWYgLyogQ09NTUVOVCAqLworCisvKgorICBUaGUgZm9sbG93aW5nIHR3byBmdW5j dGlvbnMgYXJlIGZvciBleHBhbmRpbmcgdGlsZGUgaW4gZmlsZW5hbWVzCisgIENvbnRyaWJ1dGVk IGJ5IEhvd2llIEtheWUsIENVQ0NBLCBkZXZlbG9wZWQgZm9yIENDTUQgcGFja2FnZS4KKyovCisK Ky8qICBXIEggTyBBIE0gSSAgLS0gIEdldCB1c2VyJ3MgdXNlcm5hbWUuICAqLworCisvKgorICAx KSBHZXQgcmVhbCB1aWQKKyAgMikgU2VlIGlmIHRoZSAkVVNFUiBlbnZpcm9ubWVudCB2YXJpYWJs ZSBpcyBzZXQgKCRMT0dOQU1FIG9uIEFUJlQpCisgIDMpIElmICRVU0VSJ3MgdWlkIGlzIHRoZSBz YW1lIGFzIHJ1aWQsIHJlYWxuYW1lIGlzICRVU0VSCisgIDQpIE90aGVyd2lzZSBnZXQgbG9nZ2Vk IGluIHVzZXIncyBuYW1lCisgIDUpIElmIHRoYXQgbmFtZSBoYXMgdGhlIHNhbWUgdWlkIGFzIHRo ZSByZWFsIHVpZCByZWFsbmFtZSBpcyBsb2dpbm5hbWUKKyAgNikgT3RoZXJ3aXNlLCBnZXQgYSBu YW1lIGZvciBydWlkIGZyb20gL2V0Yy9wYXNzd2QKKyovCitjaGFyICoKK3dob2FtaSgpIHsKKyNp ZmRlZiBEVElMREUKKyNpZmRlZiBwZHAxMQorI2RlZmluZSBXSE9MRU4gMTAwCisjZWxzZQorI2Rl ZmluZSBXSE9MRU4gMjU3CisjZW5kaWYgLyogcGRwMTEgKi8KKyAgICBzdGF0aWMgY2hhciByZWFs bmFtZVtVSURCVUZMRU4rMV07ICAvKiB1c2VyJ3MgbmFtZSAqLworICAgIHN0YXRpYyBpbnQgcnVp ZCA9IC0xOyAgICAgICAgICAgICAgIC8qIHVzZXIncyByZWFsIHVpZCAqLworICAgIGNoYXIgbG9n aW5uYW1lW1VJREJVRkxFTisxXSwgZW52bmFtZVsyNTZdOyAvKiB0ZW1wIHN0b3JhZ2UgKi8KKyAg ICBjaGFyICpjOworICAgIHN0cnVjdCBwYXNzd2QgKnA7CisgICAgX1BST1RPVFlQKGV4dGVybiBj aGFyICogZ2V0bG9naW4sICh2b2lkKSApOworCisgICAgZGVidWcoRjExMSwid2hvYW1pIHJ1aWQg QSIscmVhbG5hbWUscnVpZCk7CisKKyAgICBpZiAocnVpZCAhPSAtMSkKKyAgICAgIHJldHVybihy ZWFsbmFtZSk7CisKKyAgICBydWlkID0gcmVhbF91aWQoKTsgICAgICAgICAgICAgICAgICAvKiBn ZXQgb3VyIHVpZCAqLworICAgIGRlYnVnKEYxMDEsIndob2FtaSBydWlkIEIiLCIiLHJ1aWQpOwor ICAgIGlmIChydWlkIDwgMCkgcnVpZCA9IGdldHVpZCgpOworICAgIGRlYnVnKEYxMDEsIndob2Ft aSBydWlkIEMiLCIiLHJ1aWQpOworCisgIC8qIGhvdyBhYm91dCAkVVNFUiBvciAkTE9HTkFNRT8g Ki8KKyAgICBpZiAoKGMgPSBnZXRlbnYoTkFNRUVOVikpICE9IE5VTEwpIHsgLyogY2hlY2sgdGhl IGVudiB2YXJpYWJsZSAqLworICAgICAgICBja3N0cm5jcHkoZW52bmFtZSwgYywgMjU1KTsKKwlk ZWJ1ZyhGMTEwLCJ3aG9hbWkgZW52bmFtZSIsZW52bmFtZSwwKTsKKyAgICAgICAgaWYgKChwID0g Z2V0cHduYW0oZW52bmFtZSkpICE9IE5VTEwpIHsKKyAgICAgICAgICAgIGlmIChwLT5wd191aWQg PT0gcnVpZCkgeyAgICAvKiBnZXQgcGFzc3dkIGVudHJ5IGZvciBlbnZuYW1lICovCisgICAgICAg ICAgICAgICAgY2tzdHJuY3B5KHJlYWxuYW1lLCBlbnZuYW1lLCBVSURCVUZMRU4pOyAvKiB1aWQn cyBhcmUgc2FtZSAqLworCQlkZWJ1ZyhGMTEwLCJ3aG9hbWkgcmVhbG5hbWUiLHJlYWxuYW1lLDAp OworICAgICAgICAgICAgICAgIHJldHVybihyZWFsbmFtZSk7CisgICAgICAgICAgICB9CisgICAg ICAgIH0KKyAgICB9CisKKyAgLyogY2FuIHdlIHVzZSBsb2dpbm5hbWUoKSA/ICovCisKKyAgICBp ZiAoKGMgPSAgZ2V0bG9naW4oKSkgIT0gTlVMTCkgeyAgICAvKiBuYW1lIGZyb20gdXRtcCBmaWxl ICovCisgICAgICAgIGNrc3RybmNweSAobG9naW5uYW1lLCBjLCBVSURCVUZMRU4pOworCWRlYnVn KEYxMTAsIndob2FtaSBsb2dpbm5hbWUiLGxvZ2lubmFtZSwwKTsgCisgICAgICAgIGlmICgocCA9 IGdldHB3bmFtKGxvZ2lubmFtZSkpICE9IE5VTEwpIC8qIGdldCBwYXNzd2QgZW50cnkgKi8KKyAg ICAgICAgICBpZiAocC0+cHdfdWlkID09IHJ1aWQpICAgICAgICAvKiBmb3IgbG9naW5uYW1lICov CisgICAgICAgICAgICBja3N0cm5jcHkocmVhbG5hbWUsIGVudm5hbWUsIFVJREJVRkxFTik7IC8q IGlmIHVpZCdzIGFyZSBzYW1lICovCisgICAgfQorCisgIC8qIFVzZSBmaXJzdCBuYW1lIHdlIGdl dCBmb3IgcnVpZCAqLworCisgICAgaWYgKChwID0gZ2V0cHd1aWQocnVpZCkpID09IE5VTEwpIHsg LyogbmFtZSBmb3IgdWlkICovCisJZGVidWcoRjEwMSwid2hvYW1pIG5vIHVzZXJuYW1lIGZvciBy dWlkIiwiIixydWlkKTsgCisgICAgICAgIHJlYWxuYW1lWzBdID0gJ1wwJzsgICAgICAgICAgICAg Lyogbm8gdXNlciBuYW1lICovCisgICAgICAgIHJ1aWQgPSAtMTsKKyAgICAgICAgcmV0dXJuKE5V TEwpOworICAgIH0KKyAgICBja3N0cm5jcHkocmVhbG5hbWUsIHAtPnB3X25hbWUsIFVJREJVRkxF Tik7CisgICAgZGVidWcoRjExMCwid2hvYW1pIHJlYWxuYW1lIGZyb20gZ2V0cHd1aWQiLHJlYWxu YW1lLDApOworICAgIHJldHVybihyZWFsbmFtZSk7CisjZWxzZQorICAgIHJldHVybihOVUxMKTsK KyNlbmRpZiAvKiBEVElMREUgKi8KK30KKworLyogIFQgSSBMIEQgRSBfIEUgWCBQIEEgTiBEICAt LSAgZXhwYW5kIH51c2VyIHRvIHRoZSB1c2VyJ3MgaG9tZSBkaXJlY3RvcnkuICovCisKK2NoYXIg KgordGlsZGVfZXhwYW5kKGRpcm5hbWUpIGNoYXIgKmRpcm5hbWU7IHsKKyNpZmRlZiBEVElMREUK KyNpZmRlZiBwZHAxMQorI2RlZmluZSBCVUZMRU4gMTAwCisjZWxzZQorI2RlZmluZSBCVUZMRU4g MjU3CisjZW5kaWYgLyogcGRwMTEgKi8KKyAgICBzdHJ1Y3QgcGFzc3dkICp1c2VyOworICAgIHN0 YXRpYyBjaGFyIG9sZGRpcltCVUZMRU4rMV07CisgICAgc3RhdGljIGNoYXIgb2xkcmVhbGRpcltC VUZMRU4rMV07CisgICAgc3RhdGljIGNoYXIgdGVtcFtCVUZMRU4rMV07CisgICAgaW50IGksIGo7 CisKKyAgICBkZWJ1ZyhGMTExLCJ0aWxkZV9leHBhbmQiLGRpcm5hbWUsZGlybmFtZVswXSk7CisK KyAgICBpZiAoZGlybmFtZVswXSAhPSAnficpIHsgICAgICAgICAgICAgIC8qIE5vdCBhIHRpbGRl Li4ucmV0dXJuIHBhcmFtICovCisJZGVidWcoRjAwMCwidGlsZGVfZXhwYW5kIE5PVCBUSUxERSIs IiIsZGlybmFtZVswXSk7CisJcmV0dXJuKGRpcm5hbWUpOworICAgIH0KKyAgICBpZiAoIXN0cmNt cChvbGRkaXIsZGlybmFtZSkpIHsgICAgICAvKiBTYW1lIGFzIGxhc3QgdGltZSAqLworCWRlYnVn KEYxMTAsInRpbGRlX2V4cGFuZCBzYW1lIGFzIHByZXZpb3VzIixvbGRyZWFsZGlyLDApOworCXJl dHVybihvbGRyZWFsZGlyKTsgICAgICAgICAgICAgICAvKiBzbyByZXR1cm4gb2xkIGFuc3dlci4g Ki8KKyAgICB9IGVsc2UgeworCWRlYnVnKEYxMTAsInRpbGRlX2V4cGFuZCB3b3JraW5nLi4uIiwi IiwwKTsKKyAgICAgICAgaiA9IChpbnQpc3RybGVuKGRpcm5hbWUpOworICAgICAgICBmb3IgKGkg PSAwOyBpIDwgajsgaSsrKSAgICAgICAgIC8qIGZpbmQgdXNlcm5hbWUgcGFydCBvZiBzdHJpbmcg Ki8KKyAgICAgICAgICBpZiAoIUlTRElSU0VQKGRpcm5hbWVbaV0pKQorICAgICAgICAgICAgdGVt cFtpXSA9IGRpcm5hbWVbaV07CisgICAgICAgICAgZWxzZSBicmVhazsKKyAgICAgICAgdGVtcFtp XSA9ICdcMCc7ICAgICAgICAgICAgICAgICAvKiB0aWUgb2ZmIHdpdGggYSBOVUxMICovCisJZGVi dWcoRjExMSwidGlsZGVfZXhwYW5kIGZpcnN0IHBhcnQiLHRlbXAsaSk7CisgICAgICAgIGlmIChp ID09IDEpIHsgICAgICAgICAgICAgICAgICAgLyogaWYganVzdCBhICJ+IiAqLworI2lmZGVmIElL U0QKKyAgICAgICAgICAgIGlmIChpbnNlcnZlcikKKyAgICAgICAgICAgICAgdXNlciA9IGdldHB3 bmFtKHVpZGJ1Zik7ICAvKiBHZXQgaW5mbyBvbiBjdXJyZW50IHVzZXIgKi8KKyAgICAgICAgICAg IGVsc2UKKyNlbmRpZiAvKiBJS1NEICovCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg Y2hhciAqIHAgPSB3aG9hbWkoKTsKKwkJZGVidWcoRjExMCwidGlsZGVfZXhwYW5kIHAiLHAsMCk7 CisgICAgICAgICAgICAgICAgaWYgKHApIHsKKwkJICAgIHVzZXIgPSBnZXRwd25hbShwKTsKKwkJ ICAgIGRlYnVnKEYxMTAsInRpbGRlX2V4cGFuZCBnZXRwd3BhbSB+Iix1c2VyLDApOworCQl9IGVs c2UgeworCQkgICAgdXNlciA9IE5VTEw7CisJCX0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBl bHNlIHsKKwkgICAgZGVidWcoRjExMCwidGlsZGVfZXhwYW5kIH51c2VyIiwmdGVtcFsxXSwwKTsK KyAgICAgICAgICAgIHVzZXIgPSBnZXRwd25hbSgmdGVtcFsxXSk7ICAvKiBvdGhlcndpc2Ugb24g dGhlIHNwZWNpZmllZCB1c2VyICovCisJICAgIGRlYnVnKEYxMTAsInRpbGRlX2V4cGFuZCBnZXRw d3BhbSB1c2VyIix1c2VyLDApOworICAgICAgICB9CisKKyAgICB9CisgICAgaWYgKHVzZXIgIT0g TlVMTCkgeyAgICAgICAgICAgICAgICAgLyogdmFsaWQgdXNlcj8gKi8KKyAgICAgICAgY2tzdHJu Y3B5KG9sZGRpciwgZGlybmFtZSwgQlVGTEVOKTsgLyogcmVtZW1iZXIgdGhlIGRpcmVjdG9yeSAq LworICAgICAgICBja3N0cm5jcHkob2xkcmVhbGRpcix1c2VyLT5wd19kaXIsIEJVRkxFTik7IC8q IGFuZCBob21lIGRpcmVjdG9yeSAqLworICAgICAgICBja3N0cm5jYXQob2xkcmVhbGRpciwmZGly bmFtZVtpXSwgQlVGTEVOKTsKKyAgICAgICAgb2xkcmVhbGRpcltCVUZMRU5dID0gJ1wwJzsKKyAg ICAgICAgcmV0dXJuKG9sZHJlYWxkaXIpOworICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIGludmFsaWQ/ICovCisgICAgICAgIGNrc3RybmNweShvbGRkaXIsIGRpcm5h bWUsIEJVRkxFTik7IC8qIHJlbWVtYmVyIGZvciBuZXh0IHRpbWUgKi8KKyAgICAgICAgY2tzdHJu Y3B5KG9sZHJlYWxkaXIsIGRpcm5hbWUsIEJVRkxFTik7CisgICAgICAgIHJldHVybihvbGRyZWFs ZGlyKTsKKyAgICB9CisjZWxzZQorICAgIHJldHVybihOVUxMKTsKKyNlbmRpZiAvKiBEVElMREUg Ki8KK30KKworLyoKKyAgRnVuY3Rpb25zIGZvciBleGVjdXRpbmcgc3lzdGVtIGNvbW1hbmRzLgor ICB6c3lzY21kKCkgZXhlY3V0ZXMgdGhlIHN5c3RlbSBjb21tYW5kIGluIHRoZSBub3JtYWwsIGRl ZmF1bHQgd2F5IGZvcgorICB0aGUgc3lzdGVtLiAgSW4gVU5JWCwgaXQgZG9lcyB3aGF0IHN5c3Rl bSgpIGRvZXMuICBUaHVzLCBpdHMgcmVzdWx0cworICBhcmUgYWx3YXlzIHByZWRpY3RhYmxlLgor ICB6c2hjbWQoKSBleGVjdXRlcyB0aGUgY29tbWFuZCB1c2luZyB0aGUgdXNlcidzIHByZWZlcnJl ZCBzaGVsbC4KKyovCitpbnQKK3pzeXNjbWQocykgY2hhciAqczsgeworI2lmZGVmIGFlZ2lzCisg ICAgaWYgKG5vcHVzaCkgcmV0dXJuKC0xKTsKKyAgICBpZiAoIXByaXZfY2hrKCkpIHJldHVybihz eXN0ZW0ocykpOworI2Vsc2UKKyAgICBQSURfVCBzaHBpZDsKKyNpZmRlZiBDT01NRU5UCisvKiBU aGlzIGRvZXNuJ3Qgd29yay4uLiAqLworICAgIFdBSVRfVCBzdGF0dXM7CisjZWxzZQorICAgIGlu dCBzdGF0dXM7CisjZW5kaWYgLyogQ09NTUVOVCAqLworCisgICAgaWYgKG5vcHVzaCkgcmV0dXJu KC0xKTsKKyAgICBpZiAoKHNocGlkID0gZm9yaygpKSkgeworICAgICAgICBpZiAoc2hwaWQgPCAo UElEX1QpMCkgcmV0dXJuKC0xKTsgLyogUGFyZW50ICovCisgICAgICAgIHdoaWxlIChzaHBpZCAh PSAoUElEX1QpIHdhaXQoJnN0YXR1cykpCisgICAgICAgICA7CisgICAgICAgIHJldHVybihzdGF0 dXMpOworICAgIH0KKyAgICBpZiAocHJpdl9jYW4oKSkgeyAgICAgICAgICAgICAgICAgICAvKiBD aGlsZDogY2FuY2VsIGFueSBwcml2J3MgKi8KKyAgICAgICAgcHJpbnRmKCI/UHJpdmlsZWdlIGNh bmNlbGxhdGlvbiBmYWlsdXJlXG4iKTsKKyAgICAgICAgX2V4aXQoMjU1KTsKKyAgICB9CisgICAg cmVzdG9yc2lncygpOwkJCS8qIFJlc3RvcmUgaWdub3JlZCBzaWduYWxzICovCisjaWZkZWYgSFBV WDEwCisgICAgZXhlY2woIi91c3IvYmluL3NoIiwic2giLCItYyIscyxOVUxMKTsKKyAgICBwZXJy b3IoIi91c3IvYmluL3NoIik7CisjZWxzZQorI2lmZGVmIFBsYW45CisgICAgZXhlY2woIi9iaW4v cmMiLCAicmMiLCAiLWMiLCBzLCBOVUxMKTsKKyAgICBwZXJyb3IoIi9iaW4vcmMiKTsKKyNlbHNl CisgICAgZXhlY2woIi9iaW4vc2giLCJzaCIsIi1jIixzLE5VTEwpOworICAgIHBlcnJvcigiL2Jp bi9zaCIpOworI2VuZGlmIC8qIFBsYW45ICovCisjZW5kaWYgLyogSFBVWDEwICovCisgICAgX2V4 aXQoMjU1KTsKKyAgICByZXR1cm4oMCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTaHV0 IHVwIEFOU0kgY29tcGlsZXJzLiAqLworI2VuZGlmIC8qIGFlZ2lzICovCit9CisKKworLyogIFog XyBFIFggRSBDICAtLSAgT3ZlcmxheSBvdXJzZWx2ZXMgd2l0aCBhbm90aGVyIHByb2dyYW0gICov CisKKyNpZm5kZWYgTk9aRVhFQworI2lmZGVmIEhQVVg1CisjZGVmaW5lIE5PWkVYRUMKKyNlbHNl CisjaWZkZWYgQVRUNzMwMAorI2RlZmluZSBOT1pFWEVDCisjZW5kaWYgLyogQVRUNzMwMCAqLwor I2VuZGlmIC8qIEhQVVg1ICovCisjZW5kaWYgLyogTk9aRVhFQyAqLworCitWT0lECit6X2V4ZWMo cCxzLHQpIGNoYXIgKiBwLCAqKiBzOyBpbnQgdDsgeyAgLyogT3ZlcmxheSBvdXJzZWx2ZXMgd2l0 aCAicCBzLi4uIiAqLworI2lmZGVmIE5PWkVYRUMKKyAgICBwcmludGYoIkVYRUMgL1JFRElSRUNU IE5PVCBJTVBMRU1FTlRFRCBJTiBUSElTIFZFUlNJT04gT0YgQy1LRVJNSVRcbiIpOworICAgIGRl YnVnKEYxMTAsInpfZXhlYyBOT1QgSU1QTEVNRU5URUQiLHAsMCk7CisjZWxzZQorICAgIGludCB4 OworICAgIGV4dGVybiBpbnQgdHR5ZmQ7CisgICAgZGVidWcoRjExMCwiel9leGVjIGNvbW1hbmQi LHAsMCk7CisgICAgZGVidWcoRjExMCwiel9leGVjIGFyZyAwIixzWzBdLDApOworICAgIGRlYnVn KEYxMTAsInpfZXhlYyBhcmcgMSIsc1sxXSwwKTsKKyAgICBkZWJ1ZyhGMTAxLCJ6X2V4ZWMgdCIs IiIsdCk7CisgICAgZXJybm8gPSAwOworICAgIGlmICh0KSB7CisgICAgICAgIGlmICh0dHlmZCA+ IDIpIHsKKyAgICAgICAgICAgIGR1cDIodHR5ZmQsIDApOworICAgICAgICAgICAgZHVwMih0dHlm ZCwgMSk7CisgICAgICAgICAgICAvKiBkdXAyKHR0eWZkLCAyKTsgKi8KKyAgICAgICAgICAgIGNs b3NlKHR0eWZkKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXN0b3JzaWdzKCk7CQkJLyogUmVz dG9yZSBpZ25vcmVkIHNpZ25hbHMgKi8KKyAgICB4ID0gZXhlY3ZwKHAscyk7CisgICAgaWYgKHgg PCAwKSBkZWJ1ZyhGMTAxLCJ6X2V4ZWMgZXJybm8iLCIiLGVycm5vKTsKKyNlbmRpZiAvKiBOT1pF WEVDICovCit9CisKKy8qCisgIFogUyBIIEMgTSBEICAtLSAgRXhlY3V0ZSBhIHNoZWxsIGNvbW1h bmQgKG9yIHByb2dyYW0gdGhydSB0aGUgc2hlbGwpLgorCisgIE9yaWdpbmFsIFVOSVggY29kZSBi eSBILiBGaXNjaGVyOyBjb3B5cmlnaHQgcmlnaHRzIGFzc2lnbmVkIHRvIENvbHVtYmlhIFUuCisg IEFkYXB0ZWQgdG8gdXNlIGdldHB3dWlkIHRvIGZpbmQgbG9naW4gc2hlbGwgYmVjYXVzZSBtYW55 IHN5c3RlbXMgZG8gbm90CisgIGhhdmUgU0hFTEwgaW4gZW52aXJvbm1lbnQsIGFuZCB0byB1c2Ug ZGlyZWN0IGNhbGxpbmcgb2Ygc2hlbGwgcmF0aGVyCisgIHRoYW4gaW50ZXJtZWRpYXRlIHN5c3Rl bSgpIGNhbGwuIC0tIEguIEZpc2NoZXIgKDE5ODUpOyBtYW55IGNoYW5nZXMgc2luY2UKKyAgdGhl bi4gIENhbGwgd2l0aCBzIHBvaW50aW5nIHRvIGNvbW1hbmQgdG8gZXhlY3V0ZS4gIFJldHVybnM6 CisgICAtMSBvbiBmYWlsdXJlIHRvIHN0YXJ0IHRoZSBjb21tYW5kIChjYW4ndCBmaW5kLCBjYW4n dCBmb3JrLCBjYW4ndCBydW4pLgorICAgIDEgaWYgY29tbWFuZCByYW4gYW5kIGdhdmUgYW4gZXhp dCBzdGF0dXMgb2YgMC4KKyAgICAwIGlmIGNvbW1hbmQgcmFuIGFuZCBnYXZlIGEgbm9uemVybyBl eGl0IHN0YXR1cy4KKyAgd2l0aCBwZXhpdHN0YXR1cyBjb250YWluaW5nIHRoZSBjb21tYW5kJ3Mg ZXhpdCBzdGF0dXMuCisqLworaW50Cit6c2hjbWQocykgY2hhciAqczsgeworICAgIFBJRF9UIHBp ZDsKKworI2lmZGVmIE5PUFVTSAorICAgIHJldHVybigwKTsKKyNlbHNlCisgICAgaWYgKG5vcHVz aCkgcmV0dXJuKC0xKTsKKyAgICBpZiAoIXMpIHJldHVybigtMSk7CisgICAgd2hpbGUgKCpzID09 ICcgJykgcysrOworCisgICAgZGVidWcoRjExMCwienNoY21kIGNvbW1hbmQiLHMsMCk7CisKKyNp ZmRlZiBhZWdpcworICAgIGlmICgocGlkID0gdmZvcmsoKSkgPT0gMCkgeyAgICAgICAgIC8qIE1h a2UgY2hpbGQgcXVpY2tseSAqLworICAgICAgICBjaGFyICpzaHBhdGgsICpzaG5hbWUsICpzaHB0 cjsgIC8qIEZvciBmaW5kaW5nIGRlc2lyZWQgc2hlbGwgKi8KKworICAgICAgICBpZiAocHJpdl9j YW4oKSkgZXhpdCgxKTsgICAgICAgIC8qIFR1cm4gb2ZmIHByaXZzLiAqLworICAgICAgICBpZiAo KHNocGF0aCA9IGdldGVudigiU0hFTEwiKSkgPT0gTlVMTCkgc2hwYXRoID0gIi9jb20vc2giOwor CisjZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQWxsIFVuaXggc3lz dGVtcyAqLworICAgIGlmICgocGlkID0gZm9yaygpKSA9PSAwKSB7ICAgICAgICAgIC8qIE1ha2Ug Y2hpbGQgKi8KKyAgICAgICAgY2hhciAqc2hwYXRoLCAqc2huYW1lLCAqc2hwdHI7ICAvKiBGb3Ig ZmluZGluZyBkZXNpcmVkIHNoZWxsICovCisgICAgICAgIHN0cnVjdCBwYXNzd2QgKnA7CisjaWZk ZWYgSFBVWDEwICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRGVmYXVsdCAqLworICAgICAg ICBjaGFyICpkZWZzaGVsbCA9ICIvdXNyL2Jpbi9zaCI7CisjZWxzZQorI2lmZGVmIFBsYW45Cisg ICAgICAgIGNoYXIgKmRlZnNoZWxsID0gIi9iaW4vcmMiOworI2Vsc2UKKyAgICAgICAgY2hhciAq ZGVmc2hlbGwgPSAiL2Jpbi9zaCI7CisjZW5kaWYgLyogUGxhbjkgKi8KKyNlbmRpZiAvKiBIUFVY MTAgKi8KKyAgICAgICAgaWYgKHByaXZfY2FuKCkpIGV4aXQoMSk7ICAgICAgICAvKiBUdXJuIG9m ZiBwcml2cy4gKi8KKyNpZmRlZiBDT01NRU5UCisvKiBPbGQgd2F5IGFsd2F5cyB1c2VkIC9ldGMv cGFzc3dkIHNoZWxsICovCisgICAgICAgIHAgPSBnZXRwd3VpZChyZWFsX3VpZCgpKTsgICAgICAg LyogR2V0IGxvZ2luIGRhdGEgKi8KKyAgICAgICAgaWYgKHAgPT0gKHN0cnVjdCBwYXNzd2QgKikg TlVMTCB8fCAhKihwLT5wd19zaGVsbCkpCisgICAgICAgICAgc2hwYXRoID0gZGVmc2hlbGw7Cisg ICAgICAgIGVsc2UKKyAgICAgICAgICBzaHBhdGggPSBwLT5wd19zaGVsbDsKKyNlbHNlCisvKiBO ZXcgd2F5IGxldHMgdXNlciBvdmVycmlkZSB3aXRoIFNIRUxMIHZhcmlhYmxlLCBidXQgZG9lcyBu b3QgcmVseSBvbiBpdC4gKi8KKy8qIFRoaXMgYWxsb3dzIHVzZXIgdG8gc3BlY2lmeSBhIGRpZmZl cmVudCBzaGVsbC4gKi8KKyAgICAgICAgc2hwYXRoID0gZ2V0ZW52KCJTSEVMTCIpOyAgICAgICAv KiBXaGF0IHNoZWxsPyAqLworCWRlYnVnKEYxMTAsInpzaGNtZCBTSEVMTCIsc2hwYXRoLDApOwor CXsKKwkgICAgaW50IHggPSAwOworCSAgICBpZiAoIXNocGF0aCkgeworCQl4Kys7CisJICAgIH0g ZWxzZSBpZiAoISpzaHBhdGgpIHsKKwkJeCsrOworCSAgICB9CisJICAgIGlmICh4KSB7CisJCWRl YnVnKEYxMDAsInpzaGNtZCBTSEVMTCBub3QgZGVmaW5lZCIsIiIsMCk7CisJCXAgPSBnZXRwd3Vp ZCggcmVhbF91aWQoKSApOyAvKiBHZXQgbG9naW4gZGF0YSAqLworCQlpZiAocCA9PSAoc3RydWN0 IHBhc3N3ZCAqKU5VTEwgfHwgISoocC0+cHdfc2hlbGwpKSB7CisJCSAgICBzaHBhdGggPSBkZWZz aGVsbDsKKwkJfSBlbHNlIHsKKwkJICAgIHNocGF0aCA9IHAtPnB3X3NoZWxsOworCQl9CisJCWRl YnVnKEYxMTAsInpzaGNtZCBzaHBhdGggZnJvbSBnZXRwd3VpZCIsc2hwYXRoLDApOworCSAgICB9 CisgICAgICAgIH0KKyNlbmRpZiAvKiBDT01NRU5UICovCisjZW5kaWYgLyogYWVnaXMgKi8KKyAg ICAgICAgc2hwdHIgPSBzaG5hbWUgPSBzaHBhdGg7CisgICAgICAgIHdoaWxlICgqc2hwdHIgIT0g J1wwJykKKyAgICAgICAgICBpZiAoKnNocHRyKysgPT0gRElSU0VQKQorICAgICAgICAgICAgc2hu YW1lID0gc2hwdHI7CisJcmVzdG9yc2lncygpOwkJCS8qIFJlc3RvcmUgaWdub3JlZCBzaWduYWxz ICovCisJZGVidWcoRjExMCwienNoY21kIGV4ZWNsIHNocGF0aCIsc2hwYXRoLDApOworCWRlYnVn KEYxMTAsInpzaGNtZCBleGVjbCBzaG5hbWUiLHNobmFtZSwwKTsKKyAgICAgICAgaWYgKHMgPT0g TlVMTCB8fCAqcyA9PSAnXDAnKSB7ICAvKiBJbnRlcmFjdGl2ZSBzaGVsbCByZXF1ZXN0ZWQ/ICov CisJICAgIGRlYnVnKEYxMDAsInpzaGNtZCBleGVjbCBpbnRlcmFjdGl2ZSIsIiIsMCk7CisgICAg ICAgICAgICBleGVjbChzaHBhdGgsc2huYW1lLCItaSIsTlVMTCk7IC8qIFllcywgZG8gdGhhdCAq LworICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgIC8qIE90aGVyd2lzZSwg Ki8KKwkgICAgZGVidWcoRjExMCwienNoY21kIGV4ZWNsIGNvbW1hbmQiLHMsMCk7CisgICAgICAg ICAgICBleGVjbChzaHBhdGgsc2huYW1lLCItYyIscyxOVUxMKTsgLyogZXhlYyB0aGUgZ2l2ZW4g Y29tbWFuZCAqLworICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIElm IGV4ZWNsKCkgZmFpbGVkLCAqLworICAgICAgICBkZWJ1ZyhGMTAxLCJ6c2hjbWQgZXJybm8iLCIi LGVycm5vKTsKKwlwZXJyb3Ioc2hwYXRoKTsJCQkvKiBwcmludCByZWFzb24gYW5kICovCisgICAg ICAgIGV4aXQoQkFEX0VYSVQpOyAgICAgICAgICAgICAgICAgLyogcmV0dXJuIGJhZCByZXR1cm4g Y29kZS4gKi8KKworICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBh cmVudCAqLworCisgICAgICAgIGludCB3c3RhdDsgICAgICAgICAgICAgICAgICAgICAgLyogLi4u IG11c3Qgd2FpdCBmb3IgY2hpbGQgKi8KKyNpZmRlZiBDS19DSElMRAorICAgICAgICBpbnQgY2hp bGQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIENoaWxkJ3MgZXhpdCBzdGF0dXMgKi8KKyNlbmRp ZiAvKiBDS19DSElMRCAqLworICAgICAgICBTSUdUWVAgKCppc3RhdCkoKSwgKCpxc3RhdCkoKTsK KworICAgICAgICBpZiAocGlkID09IChQSURfVCkgLTEpIHJldHVybigtMSk7IC8qIGZvcmsoKSBm YWlsZWQ/ICovCisKKyAgICAgICAgaXN0YXQgPSBzaWduYWwoU0lHSU5ULFNJR19JR04pOyAvKiBM ZXQgdGhlIGZvcmsgaGFuZGxlIGtleWJvYXJkICovCisgICAgICAgIHFzdGF0ID0gc2lnbmFsKFNJ R1FVSVQsU0lHX0lHTik7IC8qIGludGVycnVwdHMgaXRzZWxmLi4uICovCisKKwlkZWJ1ZyhGMTEw LCJ6c2hjbWQgcGFyZW50IHdhaXRpbmcgZm9yIGNoaWxkIixzLDApOworI2lmZGVmIENLX0NISUxE CisgICAgICAgIHdoaWxlICgoKHdzdGF0ID0gd2FpdCgmY2hpbGQpKSAhPSBwaWQpICYmICh3c3Rh dCAhPSAtMSkpCisjZWxzZQorICAgICAgICB3aGlsZSAoKCh3c3RhdCA9IHdhaXQoKFdBSVRfVCAq KTApKSAhPSBwaWQpICYmICh3c3RhdCAhPSAtMSkpCisjZW5kaWYgLyogQ0tfQ0hJTEQgKi8KKyAg ICAgICAgICA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXYWl0IGZvciBmb3JrICov CisgICAgICAgIHNpZ25hbChTSUdJTlQsaXN0YXQpOyAgICAgICAgICAgLyogUmVzdG9yZSBpbnRl cnJ1cHRzICovCisgICAgICAgIHNpZ25hbChTSUdRVUlULHFzdGF0KTsKKyNpZmRlZiBDS19DSElM RAorICAgICAgICBwZXhpdHN0YXQgPSAoY2hpbGQgJiAweGZmKSA/IGNoaWxkIDogY2hpbGQgPj4g ODsKKwlkZWJ1ZyhGMTAxLCJ6c2hjbWQgZXhpdCBzdGF0dXMiLCIiLHBleGl0c3RhdCk7CisgICAg ICAgIHJldHVybihjaGlsZCA9PSAwID8gMSA6IDApOyAgICAgLyogUmV0dXJuIGNoaWxkJ3Mgc3Rh dHVzICovCisjZW5kaWYgLyogQ0tfQ0hJTEQgKi8KKyAgICB9CisgICAgcmV0dXJuKDEpOworI2Vu ZGlmIC8qIE5PUFVTSCAqLworfQorCisvKiAgSSBTIFcgSSBMIEQgIC0tICBDaGVjayBpZiBmaWxl c3BlYyBpcyAid2lsZCIgICovCisKKy8qCisgIFJldHVybnM6CisgICAgMCB3aWxkY2FyZHMgZGlz YWJsZWQgb3IgYXJndW1lbnQgaXMgZW1wdHkgb3IgaXMgdGhlIG5hbWUgb2YgYSBzaW5nbGUgZmls ZTsKKyAgICAxIGlmIGl0IGNvbnRhaW5zIHdpbGRjYXJkIGNoYXJhY3RlcnMuCisgIE5vdGU6IG11 c3QgbWF0Y2ggdGhlIGFsZ29yaXRobSB1c2VkIGJ5IG1hdGNoKCksIGhlbmNlIG5vIFthLXpdLCBl dGMuCisqLworaW50Citpc3dpbGQoZmlsZXNwZWMpIGNoYXIgKmZpbGVzcGVjOyB7CisgICAgY2hh ciBjLCAqcCwgKmY7IGludCB4OworICAgIGludCBxdW8gPSAwOworICAgIGlmICghZmlsZXNwZWMp CQkJLyogU2FmZXR5ICovCisgICAgICByZXR1cm4oMCk7CisgICAgaWYgKCF3aWxkZW5hKQkJCS8q IFdpbGRjYXJkcyBkaXNhYmxlZCAtIDEyIEp1biAyMDA1ICovCisgICAgICByZXR1cm4oMCk7Cisg ICAgZiA9IGZpbGVzcGVjOworICAgIGlmICh3aWxkeHBhbmQpIHsJCQkvKiBTaGVsbCBoYW5kbGVz IHdpbGRjYXJkaW5nICovCisgICAgICAgIGlmICgoeCA9IG56eHBhbmQoZmlsZXNwZWMsMCkpID4g MSkKKyAgICAgICAgICByZXR1cm4oMSk7CisgICAgICAgIGlmICh4ID09IDApIHJldHVybigwKTsg ICAgICAgICAgLyogRmlsZSBkb2VzIG5vdCBleGlzdCAqLworICAgICAgICBwID0gbWFsbG9jKE1B WE5BTUxFTiArIDIwKTsKKyAgICAgICAgem5leHQocCk7CisgICAgICAgIHggPSAoc3RyY21wKGZp bGVzcGVjLHApICE9IDApOworICAgICAgICBmcmVlKHApOworICAgICAgICBwID0gTlVMTDsKKyAg ICAgICAgcmV0dXJuKHgpOworICAgIH0gZWxzZSB7CQkJCS8qIFdlIGRvIGl0IG91cnNlbHZlcyAq LworICAgICAgICB3aGlsZSAoKGMgPSAqZmlsZXNwZWMrKykgIT0gJ1wwJykgeworICAgICAgICAg ICAgaWYgKGMgPT0gJ1xcJyAmJiBxdW8gPT0gMCkgeworICAgICAgICAgICAgICAgIHF1byA9IDE7 CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp ZiAoIXF1byAmJiAoYyA9PSAnKicgfHwgYyA9PSAnPycKKyNpZmRlZiBDS1JFR0VYCisjaWZuZGVm IFZNUworICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGMgPT0gJ1snCisjZW5kaWYgLyogVk1T ICovCisJCQkgfHwgYyA9PSAneycKKyNlbmRpZiAvKiBDS1JFR0VYICovCisgICAgICAgICAgICAg ICAgICAgICAgICAgKSkgeworCQlkZWJ1ZyhGMTExLCJpc3dpbGQiLGYsMSk7CisJCXJldHVybigx KTsKKwkgICAgfQorICAgICAgICAgICAgcXVvID0gMDsKKyAgICAgICAgfQorCWRlYnVnKEYxMTEs Imlzd2lsZCIsZiwwKTsKKyAgICAgICAgcmV0dXJuKDApOworICAgIH0KK30KKworLyoKKyAgSSBT IEQgSSBSICAtLSAgSXMgYSBEaXJlY3RvcnkuCisKKyAgVGVsbCBpZiBzdHJpbmcgcG9pbnRlciBz IGlzIHRoZSBuYW1lIG9mIGFuIGV4aXN0aW5nIGRpcmVjdG9yeS4gIFJldHVybnMgMSBpZgorICBk aXJlY3RvcnksIDAgaWYgbm90IGEgZGlyZWN0b3J5LgorCisgIFRoZSBmb2xsb3dpbmcgbm8gbG9u Z2VyIGFwcGxpZXM6CisKKyAgSWYgdGhlIGZpbGUgaXMgYSBzeW1saW5rLCB3ZSByZXR1cm4gMSBp ZgorICBpdCBpcyBhIGRpcmVjdG9yeSBPUiBpZiBpdCBpcyBhIGxpbmsgdG8gYSBkaXJlY3Rvcnkg YW5kIHRoZSAieHJlY3Vyc2l2ZSIgZmxhZworICBpcyBOT1Qgc2V0LiAgVGhpcyBpcyB0byBhbGxv dyBwYXJzaW5nIGEgbGluayB0byBhIGRpcmVjdG9yeSBhcyBpZiBpdCB3ZXJlIGEKKyAgZGlyZWN0 b3J5IChlLmcuIGluIHRoZSBDRCBvciBJRiBESVJFQ1RPUlkgY29tbWFuZCkgYnV0IHN0aWxsIHBy ZXZlbnQKKyAgcmVjdXJzaXZlIHRyYXZlcnNhbCBmcm9tIHZpc2l0aW5nIHRoZSBzYW1lIGRpcmVj dG9yeSB0d2ljZS4KKyovCisKKyNpZmRlZiBJU0RJUkNBQ0hFCisvKiBUaGlzIHR1cm5zIG91dCB0 byBiZSB1bnNhZmUgYW5kIGdpdmVzIGxpdHRsZSBiZW5lZml0IGFueXdheS4gKi8KKy8qIFNlZSBu b3RlcyAyOCBTZXAgMjAwMy4gIFRodXMgSVNESVJDQUNIRSBpcyBub3QgZGVmaW5lZC4gKi8KKwor c3RhdGljIGNoYXIgcHJldnBhdGhbQ0tNQVhQQVRIKzRdID0geyAnXDAnLCAnXDAnIH07CitzdGF0 aWMgaW50IHByZXZzdGF0ID0gLTE7CitpbnQKK2NscmRpcmNhY2hlKCkgeworICAgIGRlYnVnKEYx MDAsIkNMRUFSIElTRElSIENBQ0hFIiwiIiwwKTsKKyAgICBwcmV2c3RhdCA9IC0xOworICAgIHBy ZXZwYXRoWzBdID0gTlVMOworfQorI2VuZGlmIC8qIElTRElSQ0FDSEUgKi8KKworaW50Citpc2Fs aW5rKHMpIGNoYXIgKnM7IHsKKyNpZm5kZWYgQ0tTWU1MSU5LCisgICAgcmV0dXJuKDApOworI2Vs c2UKKyAgICBpbnQgciA9IDA7CisgICAgY2hhciBmaWxidWZbQ0tNQVhQQVRIKzRdOworICAgIGlm IChyZWFkbGluayhzLGZpbGJ1ZixDS01BWFBBVEgpID4gLTEpCisgICAgICByID0gMTsKKyAgICBk ZWJ1ZyhGMTEwLCJpc2FsaW5rIHJlYWRsaW5rIixzLHIpOworICAgIHJldHVybihyKTsKKyNlbmRp ZgkvKiBDS1NZTUxJTksgKi8KK30KKworaW50Citpc2RpcihzKSBjaGFyICpzOyB7CisgICAgaW50 IHgsIG5lZWRybGluayA9IDAsIGlzbGluayA9IDA7CisgICAgc3RydWN0IHN0YXQgc3RhdGJ1ZjsK KyAgICBjaGFyIGZuYW1bQ0tNQVhQQVRIKzRdOworCisgICAgaWYgKCFzKSByZXR1cm4oMCk7Cisg ICAgZGVidWcoRjExMCwiaXNkaXIgZW50cnkiLHMsMCk7CisjaWZkZWYgRFRJTERFCQkJCS8qIDIw MDUtMDgtMTMgKi8KKyAgICBpZiAoKnMgPT0gJ34nKSB7CQkJLyogU3RhcnRzIHdpdGggdGlsZGU/ ICovCisgICAgICAgIHMgPSB0aWxkZV9leHBhbmQocyk7CQkvKiBBdHRlbXB0IHRvIGV4cGFuZCB0 aWxkZSAqLworICAgICAgICBpZiAoIXMpIHMgPSAiIjsKKwlkZWJ1ZyhGMTEwLCJpc2RpciB0aWxk ZV9leHBhbmQiLHMsMCk7CisgICAgfQorI2VuZGlmIC8qIERUSUxERSAqLworICAgIGlmICghKnMp IHJldHVybigwKTsKKworI2lmZGVmIElTRElSQ0FDSEUKKyAgICBpZiAocHJldnN0YXQgPiAtMSkg eworCWlmIChzWzBdID09IHByZXZwYXRoWzBdKSB7CisJICAgIGlmICghc3RyY21wKHMscHJldnBh dGgpKSB7CisJCWRlYnVnKEYxMTEsImlzZGlyIGNhY2hlIGhpdCIscyxwcmV2c3RhdCk7CisJCXJl dHVybihwcmV2c3RhdCk7CisJICAgIH0KKwl9CisgICAgfQorI2VuZGlmIC8qIElTRElSQ0FDSEUg Ki8KKworI2lmZGVmIENLU1lNTElOSworI2lmZGVmIENPTU1FTlQKKy8qCisgIFRoZSBmb2xsb3dp bmcgb3Zlci1jbGV2ZXIgYml0IGhhcyBiZWVuIGNvbW1lbnRlZCBvdXQgYmVjYXVzZSBpdCBwcmVz dW1lcworICB0byBrbm93IHdoZW4gYSBzeW1saW5rIG1pZ2h0IGJlIHJlZHVuZGFudCwgd2hpY2gg aXQgY2FuJ3QgcG9zc2libHkga25vdy4KKyAgVXNpbmcgcGxhaW4gb2xkIHN0YXQoKSBnaXZlcyBL ZXJtaXQgdGhlIHNhbWUgcmVzdWx0cyBhcyBscyBhbmQgbHMgLVIsIHdoaWNoCisgIGlzIGp1c3Qg ZmluZTogbm8gc3VycHJpc2VzLgorKi8KKyNpZmRlZiBVU0VfTFNUQVQKKyAgICBpZiAoeHJlY3Vy c2l2ZSkgeworICAgICAgICB4ID0gbHN0YXQocywmc3RhdGJ1Zik7CisgICAgICAgIGRlYnVnKEYx MTEsImlzZGlyIGxzdGF0IixzLHgpOworICAgIH0gZWxzZSB7CisjZW5kaWYgLyogVVNFX0xTVEFU ICovCisgICAgICAgIHggPSBzdGF0KHMsJnN0YXRidWYpOworICAgICAgICBkZWJ1ZyhGMTExLCJp c2RpciBzdGF0IixzLHgpOworI2lmZGVmIFVTRV9MU1RBVAorICAgIH0KKyNlbmRpZiAvKiBVU0Vf TFNUQVQgKi8KKyNlbHNlCisgICAgeCA9IHN0YXQocywmc3RhdGJ1Zik7CisgICAgZGVidWcoRjEx MSwiaXNkaXIgc3RhdCIscyx4KTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgaWYgKHggPT0g LTEpIHsKKyAgICAgICAgZGVidWcoRjEwMSwiaXNkaXIgZXJybm8iLCIiLGVycm5vKTsKKyAgICAg ICAgcmV0dXJuKDApOworICAgIH0KKyAgICBpc2xpbmsgPSAwOworICAgIGlmICh4cmVjdXJzaXZl KSB7CisjaWZkZWYgTk9MSU5LQklUUworICAgICAgICBuZWVkcmxpbmsgPSAxOworI2Vsc2UKKyNp ZmRlZiBTX0lTTE5LCisgICAgICAgIGlzbGluayA9IFNfSVNMTksoc3RhdGJ1Zi5zdF9tb2RlKTsK KyAgICAgICAgZGVidWcoRjEwMSwiaXNkaXIgU19JU0xOSyBpc2xpbmsiLCIiLGlzbGluayk7Cisj ZWxzZQorI2lmZGVmIF9JRkxOSworICAgICAgICBpc2xpbmsgPSAoX0lGTVQgJiBzdGF0YnVmLnN0 X21vZGUpID09IF9JRkxOSzsKKyAgICAgICAgZGVidWcoRjEwMSwiaXNkaXIgX0lGTE5LIGlzbGlu ayIsIiIsaXNsaW5rKTsKKyNlbmRpZiAvKiBfSUZMTksgKi8KKyNlbmRpZiAvKiBTX0lTTE5LICov CisjZW5kaWYgLyogTk9MSU5LQklUUyAqLworICAgICAgICBpZiAobmVlZHJsaW5rKSB7CisgICAg ICAgICAgICBpZiAocmVhZGxpbmsocyxmbmFtLENLTUFYUEFUSCkgPiAtMSkKKyAgICAgICAgICAg ICAgaXNsaW5rID0gMTsKKyAgICAgICAgfQorICAgIH0KKyNlbHNlCisgICAgeCA9IHN0YXQocywm c3RhdGJ1Zik7CisgICAgaWYgKHggPT0gLTEpIHsKKyAgICAgICAgZGVidWcoRjEwMSwiaXNkaXIg ZXJybm8iLCIiLGVycm5vKTsKKyAgICAgICAgcmV0dXJuKDApOworICAgIH0KKyAgICBkZWJ1ZyhG MTExLCJpc2RpciBzdGF0IixzLHgpOworI2VuZGlmIC8qIENLU1lNTElOSyAqLworICAgIGRlYnVn KEYxMDEsImlzZGlyIGlzbGluayIsIiIsaXNsaW5rKTsKKyAgICBkZWJ1ZyhGMTAxLCJpc2RpciBz dGF0YnVmLnN0X21vZGUiLCIiLHN0YXRidWYuc3RfbW9kZSk7CisgICAgeCA9IGlzbGluayA/IDAg OiAoU19JU0RJUiAoc3RhdGJ1Zi5zdF9tb2RlKSA/IDEgOiAwKTsKKyNpZmRlZiBJU0RJUkNBQ0hF CisgICAgcHJldnN0YXQgPSB4OworICAgIGNrc3RybmNweShwcmV2cGF0aCxzLENLTUFYUEFUSCsx KTsKKyNlbmRpZiAvKiBJU0RJUkNBQ0hFICovCisgICAgcmV0dXJuKHgpOworfQorCisjaWZkZWYg Q0tfTUtESVIKKy8qIFNvbWUgc3lzdGVtcyBkb24ndCBoYXZlIG1rZGlyKCksIGUuZy4gVGFuZHkg WGVuaXggMy4yLi4gKi8KKworLyogWiBNIEsgRCBJIFIgIC0tICBDcmVhdGUgZGlyZWN0b3J5KHMp IGlmIG5lY2Vzc2FyeSAqLworLyoKKyAgIENhbGwgd2l0aDoKKyAgICBBIHBvaW50ZXIgdG8gYSBm aWxlIHNwZWNpZmljYXRpb24gdGhhdCBtaWdodCBjb250YWluIGRpcmVjdG9yeQorICAgIGluZm9y bWF0aW9uLiAgVGhlIGZpbGVuYW1lIGlzIGV4cGVjdGVkIHRvIGJlIGluY2x1ZGVkLgorICAgIElm IHRoZSBmaWxlIHNwZWNpZmljYXRpb24gZG9lcyBub3QgaW5jbHVkZSBhbnkgZGlyZWN0b3J5IHNl cGFyYXRvcnMsCisgICAgdGhlbiBpdCBpcyBhc3N1bWVkIHRvIGJlIGEgcGxhaW4gZmlsZS4KKyAg ICBJZiBvbmUgb3IgbW9yZSBkaXJlY3RvcmllcyBhcmUgaW5jbHVkZWQgaW4gdGhlIGZpbGUgc3Bl Y2lmaWNhdGlvbiwKKyAgICB0aGlzIHJvdXRpbmUgdHJpZXMgdG8gY3JlYXRlIHRoZW0gaWYgdGhl eSBkb24ndCBhbHJlYWR5IGV4aXN0LgorICAgUmV0dXJuczoKKyAgICAwIG9yIGdyZWF0ZXIgb24g c3VjY2VzcywgaS5lLiB0aGUgbnVtYmVyIG9mIGRpcmVjdG9yaWVzIGNyZWF0ZWQuCisgICAtMSBv biBmYWlsdXJlIHRvIGNyZWF0ZSB0aGUgZGlyZWN0b3J5CisqLworaW50Cit6bWtkaXIocGF0aCkg Y2hhciAqcGF0aDsgeworICAgIGNoYXIgKnhwLCAqdHAsIGM7CisgICAgaW50IHgsIGNvdW50ID0g MDsKKworICAgIGlmICghcGF0aCkgcGF0aCA9ICIiOworICAgIGlmICghKnBhdGgpIHJldHVybigt MSk7CisKKyNpZmRlZiBDS1JPT1QKKyAgICBkZWJ1ZyhGMTExLCJ6bWtkaXIgc2V0cm9vdCIsY2ty b290LGNrcm9vdHNldCk7CisgICAgaWYgKGNrcm9vdHNldCkgaWYgKCF6aW5yb290KHBhdGgpKSB7 CisJZGVidWcoRjExMCwiem1rZGlyIHNldHJvb3QgdmlvbGF0aW9uIixwYXRoLDApOworCXJldHVy bigtMSk7CisgICAgfQorI2VuZGlmIC8qIENLUk9PVCAqLworCisgICAgeCA9IHN0cmxlbihwYXRo KTsKKyAgICBkZWJ1ZyhGMTExLCJ6bWtkaXIiLHBhdGgseCk7CisgICAgaWYgKHggPCAxIHx8IHgg PiBNQVhQQVRIKSAgICAgICAgICAgLyogQ2hlY2sgbGVuZ3RoICovCisgICAgICByZXR1cm4oLTEp OworICAgIGlmICghKHRwID0gbWFsbG9jKHgrMSkpKSAgICAgICAgICAgIC8qIE1ha2UgYSB0ZW1w b3JhcnkgY29weSAqLworICAgICAgcmV0dXJuKC0xKTsKKyAgICBzdHJjcHkodHAscGF0aCk7CQkJ Lyogc2FmZSAocHJlY2hlY2tlZCkgKi8KKyNpZmRlZiBEVElMREUKKyAgICBpZiAoKnRwID09ICd+ JykgeyAgICAgICAgICAgICAgICAgICAvKiBTdGFydHMgd2l0aCB0aWxkZT8gKi8KKyAgICAgICAg eHAgPSB0aWxkZV9leHBhbmQodHApOyAgICAgICAgICAvKiBBdHRlbXB0IHRvIGV4cGFuZCB0aWxk ZSAqLworICAgICAgICBpZiAoIXhwKSB4cCA9ICIiOworICAgICAgICBpZiAoKnhwKSB7CisgICAg ICAgICAgICBjaGFyICp6cDsKKyAgICAgICAgICAgIGRlYnVnKEYxMTAsInpta2RpciB0aWxkZV9l eHBhbmQiLHhwLDApOworICAgICAgICAgICAgaWYgKCEoenAgPSBtYWxsb2Moc3RybGVuKHhwKSAr IDEpKSkgeyAvKiBNYWtlIGEgcGxhY2UgZm9yIGl0ICovCisgICAgICAgICAgICAgICAgZnJlZSh0 cCk7CisgICAgICAgICAgICAgICAgdHAgPSBOVUxMOworICAgICAgICAgICAgICAgIHJldHVybigt MSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmcmVlKHRwKTsgICAgICAgICAgICAgICAg ICAgLyogRnJlZSBwcmV2aW91cyBidWZmZXIgKi8KKyAgICAgICAgICAgIHRwID0genA7ICAgICAg ICAgICAgICAgICAgICAvKiBQb2ludCB0byBuZXcgb25lICovCisgICAgICAgICAgICBzdHJjcHko dHAseHApOyAgICAgICAgICAgICAgLyogQ29weSBleHBhbmRlZCBuYW1lIHRvIG5ldyBidWZmZXIg Ki8KKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBEVElMREUgKi8KKyAgICBkZWJ1ZyhGMTEw LCJ6bWtkaXIgdHAgYWZ0ZXIgdGlsZGVfZXhwYW5zaW9uIix0cCwwKTsKKyAgICB4cCA9IHRwOwor ICAgIGlmIChJU0RJUlNFUCgqeHApKSAgICAgICAgICAgICAgICAgIC8qIERvbid0IGNyZWF0ZSBy b290IGRpcmVjdG9yeSEgKi8KKyAgICAgIHhwKys7CisKKyAgICAvKiBHbyB0aHJ1IGZpbGVzcGVj IGZyb20gbGVmdCB0byByaWdodC4uLiAqLworCisgICAgZm9yICg7ICp4cDsgeHArKykgeyAgICAg ICAgICAgICAgICAgLyogQ3JlYXRlIHBhcnRzIHRoYXQgZG9uJ3QgZXhpc3QgKi8KKyAgICAgICAg aWYgKCFJU0RJUlNFUCgqeHApKSAgICAgICAgICAgICAvKiBGaW5kIG5leHQgZGlyZWN0b3J5IHNl cGFyYXRvciAqLworICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBjID0gKnhwOyAgICAgICAg ICAgICAgICAgICAgICAgIC8qIEdvdCBvbmUuICovCisgICAgICAgICp4cCA9IE5VTDsgICAgICAg ICAgICAgICAgICAgICAgLyogTWFrZSB0aGlzIHRoZSBlbmQgb2YgdGhlIHN0cmluZy4gKi8KKyAg ICAgICAgaWYgKCFpc2Rpcih0cCkpIHsgICAgICAgICAgICAgICAvKiBUaGlzIGRpcmVjdG9yeSBl eGlzdHMgYWxyZWFkeT8gKi8KKyNpZmRlZiBDS19MT0dJTgorICAgICAgICAgICAgaWYgKGlzZ3Vl c3QpICAgICAgICAgICAgICAgICAgICAvKiBOb3QgYWxsb3dlZCBmb3IgZ3Vlc3RzICovCisJICAg ICAgcmV0dXJuKC0xKTsKKyNpZm5kZWYgTk9YRkVSCisgICAgICAgICAgICAvKiBOb3IgaWYgTUtE SVIgYW5kL29yIENEIGFyZSBkaXNhYmxlZCAqLworICAgICAgICAgICAgZWxzZQorI2VuZGlmIC8q IENLX0xPR0lOICovCisJICAgICAgaWYgKChzZXJ2ZXIKKyNpZmRlZiBJS1NECisJCSAgIHx8IGlu c2VydmVyCisjZW5kaWYgLyogSUtTRCAqLworCQkgICApICYmICghRU5BQkxFRChlbl9ta2QpIHx8 ICFFTkFCTEVEKGVuX2N3ZCkpKQorCQlyZXR1cm4oLTEpOworI2VuZGlmIC8qIElLU0QgKi8KKwor ICAgICAgICAgICAgZGVidWcoRjExMCwiem1rZGlyIG1ha2luZyIsdHAsMCk7CisgICAgICAgICAg ICB4ID0gICAgICAgICAgICAgICAgICAgICAgICAgLyogTm8sIHRyeSB0byBjcmVhdGUgaXQgKi8K KyNpZmRlZiBOT01LRElSCisgICAgICAgICAgICAgICAtMSAgICAgICAgICAgICAgICAgICAgICAg LyogU3lzdGVtcyB3aXRob3V0IG1rZGlyKCkgKi8KKyNlbHNlCisgICAgICAgICAgICAgICBta2Rp cih0cCwwNzc3KSAgICAgICAgICAgLyogVU5JWCAqLworI2VuZGlmIC8qIE5PTUtESVIgKi8KKyAg ICAgICAgICAgICAgICAgOworICAgICAgICAgICAgaWYgKHggPCAwKSB7CisgICAgICAgICAgICAg ICAgZGVidWcoRjEwMSwiem1rZGlyIGZhaWxlZCwgZXJybm8iLCIiLGVycm5vKTsKKyAgICAgICAg ICAgICAgICBmcmVlKHRwKTsgICAgICAgICAgICAgICAvKiBGcmVlIHRlbXBvcmFyeSBidWZmZXIu ICovCisgICAgICAgICAgICAgICAgdHAgPSBOVUxMOworICAgICAgICAgICAgICAgIHJldHVybigt MSk7ICAgICAgICAgICAgIC8qIFJldHVybiBmYWlsdXJlIGNvZGUuICovCisgICAgICAgICAgICB9 IGVsc2UKKyAgICAgICAgICAgICAgY291bnQrKzsKKyAgICAgICAgfQorICAgICAgICAqeHAgPSBj OyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlcGxhY2UgdGhlIHNlcGFyYXRvci4gKi8KKyAg ICB9CisgICAgZnJlZSh0cCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRnJlZSB0ZW1w b3JhcnkgYnVmZmVyLiAqLworICAgIHJldHVybihjb3VudCk7ICAgICAgICAgICAgICAgICAgICAg IC8qIFJldHVybiBzdWNjZXNzIGNvZGUuICovCit9CisjZW5kaWYgLyogQ0tfTUtESVIgKi8KKwor aW50Cit6cm1kaXIocGF0aCkgY2hhciAqcGF0aDsgeworI2lmZGVmIENLX0xPR0lOCisgICAgaWYg KGlzZ3Vlc3QpCisgICAgICByZXR1cm4oLTEpOworI2VuZGlmIC8qIENLX0xPR0lOICovCisKKyAg ICBpZiAoIXBhdGgpIHBhdGggPSAiIjsKKyAgICBpZiAoISpwYXRoKSByZXR1cm4oLTEpOworCisj aWZkZWYgQ0tST09UCisgICAgZGVidWcoRjExMSwienJtZGlyIHNldHJvb3QiLGNrcm9vdCxja3Jv b3RzZXQpOworICAgIGlmIChja3Jvb3RzZXQpIGlmICghemlucm9vdChwYXRoKSkgeworCWRlYnVn KEYxMTAsInpybWRpciBzZXRyb290IHZpb2xhdGlvbiIscGF0aCwwKTsKKwlyZXR1cm4oLTEpOwor ICAgIH0KKyNlbmRpZiAvKiBDS1JPT1QgKi8KKworI2lmbmRlZiBOT01LRElSCisgICAgcmV0dXJu KHJtZGlyKHBhdGgpKTsKKyNlbHNlCisgICAgcmV0dXJuKC0xKTsKKyNlbmRpZiAvKiBOT01LRElS ICovCit9CisKKy8qIFogRiBTIEUgRSBLICAtLSAgUG9zaXRpb24gaW5wdXQgZmlsZSBwb2ludGVy ICovCisvKgorICAgQ2FsbCB3aXRoOgorICAgIENLX09GRl9UICgzMiBvciA2NCBiaXRzKSwgMC1i YXNlZCwgaW5kaWNhdGluZyBkZXNpcmVkIHBvc2l0aW9uLgorICAgUmV0dXJuczoKKyAgICAwIG9u IHN1Y2Nlc3MuCisgICAtMSBvbiBmYWlsdXJlLgorKi8KKyNpZm5kZWYgTk9SRVNFTkQKK2ludAor I2lmZGVmIENLX0FOU0lDCit6ZnNlZWsoQ0tfT0ZGX1QgcG9zKQorI2Vsc2UKK3pmc2Vlayhwb3Mp IENLX09GRl9UIHBvczsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogemZzZWVrICovIHsKKyAg ICB6aW5jbnQgPSAtMTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBNdXN0IGVtcHR5IHRoZSBp bnB1dCBidWZmZXIgKi8KKyAgICBkZWJ1ZyhGMTAxLCJ6ZnNlZWsiLCIiLHBvcyk7CisgICAgcmV0 dXJuKENLRlNFRUsoZnBbWklGSUxFXSwgcG9zLCAwKT8tMTowKTsKK30KKyNlbmRpZiAvKiBOT1JF U0VORCAqLworCisvKiAgWiBGIE4gUSBGIFAgIC0tICBDb252ZXJ0IGZpbGVuYW1lIHRvIGZ1bGx5 IHF1YWxpZmllZCBhYnNvbHV0ZSBwYXRobmFtZSAqLworCisvKgorICBHaXZlbiBhIHBvc3NpYmx5 IHVucXVhbGlmaWVkIG9yIHJlbGF0aXZlIGZpbGUgc3BlY2lmaWNhdGlvbiBmbiwgemZucWZwKCkK KyAgcmV0dXJucyB0aGUgZnVsbHkgcXVhbGlmaWVkIGZpbGVzcGVjIGZvciB0aGUgc2FtZSBmaWxl LCByZXR1cm5pbmcgYSBzdHJ1Y3QKKyAgdGhhdCBjb250YWlucyB0aGUgbGVuZ3RoIChsZW4pIG9m IHRoZSByZXN1bHQsIGEgcG9pbnRlciAoZnBhdGgpIHRvIHRoZQorICB3aG9sZSByZXN1bHQsIGFu ZCBhIHBvaW50ZXIgKGZuYW1lKSB0byB3aGVyZSB0aGUgZmlsZW5hbWUgc3RhcnRzLgorKi8KK3N0 YXRpYyBzdHJ1Y3QgemZuZnAgZm5mcCA9IHsgMCwgTlVMTCwgTlVMTCB9OworCitzdHJ1Y3QgemZu ZnAgKgoremZucWZwKGZuYW1lLCBidWZsZW4sIGJ1ZikgIGNoYXIgKiBmbmFtZTsgaW50IGJ1Zmxl bjsgY2hhciAqIGJ1ZjsgeworICAgIGNoYXIgKiBzOworICAgIGludCBsZW47CisjaWZkZWYgTUFY UEFUSExFTgorICAgIGNoYXIgemZudG1wW01BWFBBVEhMRU4rNF07CisjZWxzZQorICAgIGNoYXIg emZudG1wW0NLTUFYUEFUSCs0XTsKKyNlbmRpZiAvKiBNQVhQQVRITEVOICovCisKKyAgICBjaGFy IHNiWzMyXSwgKiB0bXA7CisgICAgaW50IGkgPSAwLCBqID0gMCwgayA9IDAsIHggPSAwLCB5ID0g MDsKKyAgICBpbnQgaXRzYWRpciA9IDA7CisKKyAgICBzID0gZm5hbWU7CisgICAgaWYgKCFzKQor ICAgICAgcmV0dXJuKE5VTEwpOworICAgIGlmICghKnMpCisgICAgICByZXR1cm4oTlVMTCk7Cisg ICAgaWYgKCFidWYpCisgICAgICByZXR1cm4oTlVMTCk7CisKKyAgICAvKiBJbml0aWFsaXplIHRo ZSBkYXRhIHN0cnVjdHVyZSAqLworCisgICAgZm5mcC5sZW4gPSBja3N0cm5jcHkoYnVmLGZuYW1l LGJ1Zmxlbik7CisgICAgZm5mcC5mcGF0aCA9IGJ1ZjsKKyAgICBmbmZwLmZuYW1lID0gTlVMTDsK KyAgICBsZW4gPSBidWZsZW47CisgICAgZGVidWcoRjExMSwiemZucWZwIGZuYW1lIixmbmFtZSxs ZW4pOworCisjaWZkZWYgRFRJTERFCisgICAgaWYgKCpzID09ICd+JykgeyAgICAgICAgICAgICAg ICAgICAgLyogU3RhcnRzIHdpdGggdGlsZGU/ICovCisgICAgICAgIGNoYXIgKiB4cDsKKyAgICAg ICAgeHAgPSB0aWxkZV9leHBhbmQocyk7ICAgICAgICAgICAvKiBBdHRlbXB0IHRvIGV4cGFuZCB0 aWxkZSAqLworICAgICAgICBkZWJ1ZyhGMTEwLCJ6Zm5xZnAgeHAiLHhwLDApOyAgIC8qIChyZWFs cGF0aCgpIGRvZXNuJ3QgZG8gdGhpcykgKi8KKyAgICAgICAgaWYgKCF4cCkgeHAgPSAiIjsKKyAg ICAgICAgaWYgKCp4cCkKKyAgICAgICAgICBzID0geHA7CisgICAgfQorI2VuZGlmIC8qIERUSUxE RSAqLworCisjaWZkZWYgQ0tSRUFMUEFUSAorCisvKiBOLkIuOiBUaGUgcmVhbHBhdGgoKSByZXN1 bHQgYnVmZmVyIE1VU1QgYmUgTUFYUEFUSExFTiBieXRlcyBsb25nICovCisvKiBvdGhlcndpc2Ug d2Ugd3JpdGUgb3ZlciBtZW1vcnkuICovCisKKyAgICBpZiAoIXJlYWxwYXRoKHMsemZudG1wKSkg eworICAgICAgICBkZWJ1ZyhGMTExLCJ6Zm5xZnAgcmVhbHBhdGggZmFpbHMiLHMsZXJybm8pOwor I2lmZGVmIENPTU1FTlQKKwlpZiAoZXJybm8gIT0gRU5PRU5UKQorCSAgcmV0dXJuKE5VTEwpOwor I2Vsc2UKKwkvKiBJZiByZWFscGF0aCgpIGZhaWxzIHVzZSB0aGUgZG8taXQteW91cnNlbGYgbWV0 aG9kICovCisJLyogMTYgSmFuIDIwMDIgKi8KKwlnb3RvIG5vcmVhbHBhdGg7CisjZW5kaWYgLyog Q09NTUVOVCAqLworICAgIH0KKyAgICBsZW4gPSBzdHJsZW4oemZudG1wKTsKKyAgICBpZiAobGVu ID4gYnVmbGVuKSB7CisJZGVidWcoRjExMSwiemZucWZwIHJlc3VsdCB0b28gbG9uZyIsY2tpdG9h KGJ1ZmxlbiksbGVuKTsKKwlyZXR1cm4oTlVMTCk7CisgICAgfSBlbHNlIHsKKwlja3N0cm5jcHko YnVmLHpmbnRtcCxidWZsZW4pOworICAgIH0KKyAgICBpZiAoYnVmW2xlbi0xXSAhPSAnLycpIHsK KwlpZiAoKGl0c2FkaXIgPSBpc2RpcihidWYpKSAmJiBsZW4gPCAoYnVmbGVuIC0gMSkpIHsKKwkg ICAgYnVmW2xlbisrXSA9ICcvJzsKKwkgICAgYnVmW2xlbl0gPSBOVUw7CisJfQorICAgIH0KKyAg ICBmbmZwLmxlbiA9IGxlbjsKKyAgICBmbmZwLmZwYXRoID0gYnVmOworICAgIGRlYnVnKEYxMTAs InpmbnFmcCByZWFscGF0aCBwYXRoIixmbmZwLmZwYXRoLDApOworICAgIHRtcCA9IGJ1ZiArIGZu ZnAubGVuIC0gMTsKKyAgICBpZiAoIWl0c2FkaXIpIHsKKwl3aGlsZSAodG1wID49IGJ1Zikgewor CSAgICBpZiAoKnRtcCA9PSAnLycpIHsKKwkJZm5mcC5mbmFtZSA9IHRtcCArIDE7CisJCWRlYnVn KEYxMTAsInpmbnFmcCByZWFscGF0aCBuYW1lIixmbmZwLmZuYW1lLDApOworCQlicmVhazsKKwkg ICAgfQorCSAgICB0bXAtLTsKKwl9CisgICAgfQorICAgIHJldHVybigmZm5mcCk7CisKKyNlbmRp ZiAvKiBDS1JFQUxQQVRIICovCisKKyAgbm9yZWFscGF0aDoKKworICAgIHRtcCA9IHpmbnRtcDsK KyAgICB3aGlsZSAoKnMpIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZW1vdmUgbGVhZGlu ZyAiLi8iICgwIG9yIG1vcmUpICovCisgICAgICAgIGRlYnVnKEYxMTAsInpmbnFmcCB3aGlsZSAq cyIscywwKTsKKyAgICAgICAgaWYgKCpzID09ICcuJyAmJiAqKHMrMSkgPT0gJy8nKSB7CisgICAg ICAgICAgICBzICs9IDI7CisgICAgICAgICAgICB3aGlsZSAoKnMgPT0gJy8nKSBzKys7CisgICAg ICAgIH0gZWxzZQorICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAoISpzKSByZXR1cm4o TlVMTCk7CisgICAgaWYgKCpzID09ICcvJykgeyAgICAgICAgICAgICAgICAgICAgLyogUGF0aG5h bWUgaXMgYWJzb2x1dGUgKi8KKyAgICAgICAgY2tzdHJuY3B5KGJ1ZixzLGxlbik7CisgICAgICAg IHggPSBzdHJsZW4oYnVmKTsKKyAgICAgICAgeSA9IDA7CisgICAgfSBlbHNlIHsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogUGF0aG5hbWUgaXMgcmVsYXRpdmUgKi8KKyAgICAgICAgY2hh ciAqIHA7CisgICAgICAgIGlmIChwID0gemd0ZGlyKCkpIHsgICAgICAgICAgICAgLyogU28gZ2V0 IGN1cnJlbnQgZGlyZWN0b3J5ICovCisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJ6Zm5xZnAgemd0 ZGlyIixwLDApOworICAgICAgICAgICAgeCA9IGNrc3RybmNweShidWYscCxsZW4pOworICAgICAg ICAgICAgYnVmW3grK10gPSAnLyc7CisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJ6Zm5xZnAgYnVm IDEiLGJ1ZiwwKTsKKyAgICAgICAgICAgIGxlbiAtPSB4OyAgICAgICAgICAgICAgICAgICAvKiBI b3cgbXVjaCByb29tIGxlZnQgaW4gYnVmZmVyICovCisgICAgICAgICAgICBpZiAoKHkgPSAoaW50 KXN0cmxlbihzKSkgPiBsZW4pIC8qIElmIGVub3VnaCByb29tLi4uICovCisgICAgICAgICAgICAg IHJldHVybihOVUxMKTsKKyAgICAgICAgICAgIGNrc3RybmNweShidWYreCxzLGxlbik7ICAgICAv KiAuLi4gYXBwZW5kIHRoZSBmaWxlbmFtZSAqLworICAgICAgICAgICAgZGVidWcoRjExMCwiemZu cWZwIGJ1ZiAyIixidWYsMCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4o TlVMTCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBCdWYgbm93IGhvbGRzIGZ1bGwgcGF0 aCBidXQgbWF5YmUgY29udGFpbmluZyBzb21lIC4gb3IgLi4gdHJpY2tzICovCisKKyAgICBqID0g eCArIHk7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBMZW5ndGggb2Ygd2hhdCdzIGluIGJ1 ZiAqLworICAgIGxlbiA9IGo7CisgICAgZGVidWcoRjEwMSwiemZucWZwIGxlbiIsIiIsbGVuKTsK KworICAgIC8qIENhdGNoIGRhbmdsaW5nICIvLiIgb3IgIi8uLiIgKi8KKyAgICBpZiAoKGogPiAx ICYmIGJ1ZltqLTFdID09ICcuJyAmJiBidWZbai0yXSA9PSAnLycpIHx8CisgICAgICAgIChqID4g MiAmJiBidWZbai0xXSA9PSAnLicgJiYgYnVmW2otMl0gPT0gJy4nICYmIGJ1ZltqLTNdID09ICcv JykpIHsKKyAgICAgICAgaWYgKGogPCBidWZsZW4gLSAyKSB7CisgICAgICAgICAgICBidWZbal0g PSAnLyc7CisgICAgICAgICAgICBidWZbaisxXSA9IE5VTDsKKyAgICAgICAgfQorICAgIH0KKyAg ICBqID0gLTE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBqID0gcG9zaXRpb24gb2Yg cmlnaHRtb3N0ICIvIiAqLworICAgIGkgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIGkgPSBkZXN0aW5hdGlvbiBpbmRleCAqLworICAgIHRtcFtpXSA9IE5VTDsgICAgICAgICAg ICAgICAgICAgICAgIC8qIGRlc3RpbmF0aW9uIGlzIHRlbXBvcmFyeSBidWZmZXIgICovCisKKyAg ICBmb3IgKHggPSAwOyB4IDwgbGVuOyB4KyspIHsgICAgICAgICAvKiB4ID0gc291cmNlIGluZGV4 ICovCisgICAgICAgIGlmIChidWZbeF0gPT0gJy8nKSB7CisgICAgICAgICAgICBmb3IgKGsgPSAw OyBrIDwgNDsgaysrKSB7CisgICAgICAgICAgICAgICAgc2Jba10gPSBidWZbeCtrXTsKKyAgICAg ICAgICAgICAgICBzYltrKzFdID0gJ1wwJzsKKyAgICAgICAgICAgICAgICBpZiAoIXNiW2tdKSBi cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghc3RybmNtcChzYiwiLy4vIiwz KSkgeyAvKiBFbGltaW5hdGUgIi4vIiBpbiAiLy4vIiAqLworICAgICAgICAgICAgICAgIHggKz0g MTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoIXN0 cm5jbXAoc2IsIi8vIiwyKSkgeyAvKiBDaGFuZ2UgIi8vIiB0byAiLyIgKi8KKyAgICAgICAgICAg ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoIXN0cm5jbXAoc2IsIi8uLi8i LDQpKSB7IC8qICIuLiIgaW4gcGF0aCAqLworICAgICAgICAgICAgICAgIGZvciAoayA9IGkgLSAx OyBrID49IDA7IGstLSkgeyAvKiBCYWNrIHVwIG9uZSBsZXZlbCAqLworICAgICAgICAgICAgICAg ICAgICBpZiAodG1wW2tdID09ICcvJykgeworICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGs7 CisgICAgICAgICAgICAgICAgICAgICAgICB0bXBbaV0gPSBOVUw7CisgICAgICAgICAgICAgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgICB4ICs9IDI7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGkgPj0gKGJ1ZmxlbiAtIDEpKSB7Cisg ICAgICAgICAgICBkZWJ1ZyhGMTExLCJ6Zm5xZnAgb3ZlcmZsb3ciLHRtcCxpKTsKKyAgICAgICAg ICAgIHJldHVybihOVUxMKTsKKyAgICAgICAgfQorICAgICAgICB0bXBbaSsrXSA9IGJ1Zlt4XTsg ICAgICAgICAgICAgIC8qIFJlZ3VsYXIgY2hhcmFjdGVyLCBjb3B5ICovCisgICAgICAgIHRtcFtp XSA9IE5VTDsKKyAgICAgICAgaWYgKGJ1Zlt4XSA9PSAnLycpICAgICAgICAgICAgICAvKiBSZW1l bWJlciByaWdodG1vc3QgIi8iICovCisgICAgICAgICAgaiA9IGk7CisgICAgfQorICAgIGNrc3Ry bmNweShidWYsdG1wLGJ1Zmxlbi0xKTsgICAgICAgIC8qIENvcHkgdGhlIHJlc3VsdCBiYWNrICov CisKKyAgICBidWZbYnVmbGVuLTFdID0gTlVMOworICAgIGlmICghYnVmWzBdKSB7ICAgICAgICAg ICAgICAgICAgICAgIC8qIElmIGVtcHR5LCBzYXkgcm9vdCAqLworICAgICAgICBidWZbMF0gPSAn Lyc7CisgICAgICAgIGJ1ZlsyXSA9IE5VTDsKKyAgICAgICAgaiA9IDA7CisgICAgICAgIGkgPSAx OworICAgIH0KKyAgICBpZiAoKGl0c2FkaXIgPSBpc2RpcihidWYpKSkgeworCWlmIChidWZbaS0x XSAhPSAnLycgJiYgaSA8IChidWZsZW4gLSAxKSkgeworCSAgICBidWZbaSsrXSA9ICcvJzsKKwkg ICAgYnVmW2ldID0gTlVMOworCX0KKyAgICB9CisgICAgaWYgKCFpdHNhZGlyICYmIChqID4gLTEp KSB7CQkvKiBTZXQgcG9pbnRlciB0byBiYXNlbmFtZSAqLworICAgICAgICBmbmZwLmZuYW1lID0g KGNoYXIgKikoYnVmICsgaik7CisgICAgICAgIGZuZnAuZnBhdGggPSAoY2hhciAqKWJ1ZjsKKyAg ICAgICAgZm5mcC5sZW4gPSBpOworICAgICAgICBkZWJ1ZyhGMTExLCJ6Zm5xZnAgcGF0aCIsZm5m cC5mcGF0aCxpKTsKKyAgICAgICAgZGVidWcoRjExMCwiemZucWZwIG5hbWUiLGZuZnAuZm5hbWUs MCk7CisgICAgICAgIHJldHVybigmZm5mcCk7CisgICAgfQorICAgIHJldHVybihOVUxMKTsKK30K KworLyogIFogQyBNIFAgRiBOICAtLSAgQ29tcGFyZSB0d28gZmlsZW5hbWVzICAqLworCisvKiAg UmV0dXJucyAxIGlmIHRoZSB0d28gbmFtZXMgcmVmZXIgdG8gdGhlIHNhbWUgZXhpc3RpbmcgZmls ZSwgMCBvdGhlcndpc2UuICovCisKK2ludAoremNtcGZuKHMxLHMyKSBjaGFyICogczEsICogczI7 IHsKKyAgICBjaGFyIGJ1ZjFbQ0tNQVhQQVRIKzFdOworICAgIGNoYXIgYnVmMltDS01BWFBBVEgr MV07CisKKyNpZmRlZiBVU0VfTFNUQVQKKyAgICBjaGFyIGxpbmtuYW1lW0NLTUFYUEFUSCsxXTsK KyAgICBzdHJ1Y3Qgc3RhdCBidWY7CisjZW5kaWYgLyogVVNFX0xTVEFUICovCisgICAgaW50IHgs IHJjID0gMDsKKworICAgIGlmICghczEpIHMxID0gIiI7CisgICAgaWYgKCFzMikgczIgPSAiIjsK KyAgICBpZiAoISpzMSB8fCAhKnMyKSByZXR1cm4oMCk7CisKKyNpZmRlZiBDS1NZTUxJTksgICAg ICAgICAgICAgICAgICAgICAgICAvKiBXZSdyZSBkb2luZyBzeW1saW5rcz8gKi8KKyNpZmRlZiBV U0VfTFNUQVQgICAgICAgICAgICAgICAgICAgICAgICAvKiBPSyB0byB1c2UgbHN0YXQoKT8gKi8K KyAgICB4ID0gbHN0YXQoczEsJmJ1Zik7CisgICAgaWYgKHggPiAtMSAmJgkJCS8qIE5vdyBzZWUg aWYgaXQncyBhIHN5bWxpbmsgKi8KKyNpZmRlZiBTX0lTTE5LCisgICAgICAgIFNfSVNMTksoYnVm LnN0X21vZGUpCisjZWxzZQorI2lmZGVmIF9JRkxOSworICAgICAgICAoKF9JRk1UICYgYnVmLnN0 X21vZGUpID09IF9JRkxOSykKKyNlbmRpZiAvKiBfSUZMTksgKi8KKyNlbmRpZiAvKiBTX0lTTE5L ICovCisgICAgICAgICkgeworICAgICAgICBsaW5rbmFtZVswXSA9ICdcMCc7ICAgICAgICAgICAg IC8qIEdldCB0aGUgbmFtZSAqLworICAgICAgICB4ID0gcmVhZGxpbmsoczEsbGlua25hbWUsQ0tN QVhQQVRIKTsKKyAgICAgICAgaWYgKHggPiAtMSAmJiB4IDwgQ0tNQVhQQVRIKSB7ICAvKiBJdCdz IGEgbGluayAqLworICAgICAgICAgICAgbGlua25hbWVbeF0gPSAnXDAnOworCSAgICBzMSA9IGxp bmtuYW1lOworICAgICAgICB9CisgICAgfQorI2VuZGlmIC8qIFVTRV9MU1RBVCAqLworI2VuZGlm IC8qIENLU1lNTElOSyAqLworCisgICAgaWYgKHpmbnFmcChzMSxDS01BWFBBVEgsYnVmMSkpIHsJ LyogQ29udmVydCB0byBmdWxsIHBhdGhuYW1lICovCisKKyNpZmRlZiBDS1NZTUxJTksJCQkvKiBT YW1lIGRlYWwgZm9yIHNlY29uZCBuYW1lLi4uICovCisjaWZkZWYgVVNFX0xTVEFUCisJeCA9IGxz dGF0KHMyLCZidWYpOworCWlmICh4ID4gLTEgJiYKKyNpZmRlZiBTX0lTTE5LCisJICAgIFNfSVNM TksoYnVmLnN0X21vZGUpCisjZWxzZQorI2lmZGVmIF9JRkxOSworCSAgICAoKF9JRk1UICYgYnVm LnN0X21vZGUpID09IF9JRkxOSykKKyNlbmRpZiAvKiBfSUZMTksgKi8KKyNlbmRpZiAvKiBTX0lT TE5LICovCisJICAgICkgeworCSAgICBsaW5rbmFtZVswXSA9ICdcMCc7CisJICAgIHggPSByZWFk bGluayhzMixsaW5rbmFtZSxDS01BWFBBVEgpOworCSAgICBpZiAoeCA+IC0xICYmIHggPCBDS01B WFBBVEgpIHsKKwkJbGlua25hbWVbeF0gPSAnXDAnOworCQlzMiA9IGxpbmtuYW1lOworCSAgICB9 CisJfQorI2VuZGlmIC8qIFVTRV9MU1RBVCAqLworI2VuZGlmIC8qIENLU1lNTElOSyAqLworCWlm ICh6Zm5xZnAoczIsQ0tNQVhQQVRILGJ1ZjIpKSB7CisJICAgIGRlYnVnKEYxMTAsInpjbXBmbiBz MSIsYnVmMSwwKTsKKwkgICAgZGVidWcoRjExMCwiemNtcGZuIHMyIixidWYyLDApOworCSAgICBp ZiAoIXN0cm5jbXAoYnVmMSxidWYyLENLTUFYUEFUSCkpCisJICAgICAgcmMgPSAxOworCX0KKyAg ICB9CisgICAgZGVidWcoRjEwMSwiemNtcGZuIHJlc3VsdCIsIiIscmMpOworICAgIHJldHVybihy Yyk7Cit9CisKKyNpZmRlZiBDS1JPT1QKKworLyogVXNlci1tb2RlIGNocm9vdCgpIGltcGxlbWVu dGF0aW9uICovCisKK2ludAorenNldHJvb3QocykgY2hhciAqIHM7IHsJCQkvKiBTZXRzIHRoZSBy b290ICovCisgICAgY2hhciBidWZbQ0tNQVhQQVRIKzFdOworICAgIGlmICghcykgcmV0dXJuKC0x KTsKKyAgICBpZiAoISpzKSByZXR1cm4oLTEpOworICAgIGRlYnVnKEYxMTAsInpzZXRyb290Iixz LDApOworICAgIGlmICghaXNkaXIocykpIHJldHVybigtMik7CisgICAgaWYgKCF6Zm5xZnAocyxD S01BWFBBVEgsYnVmKSkJLyogR2V0IGZ1bGwsIHJlYWwgcGF0aCAqLworICAgICAgcmV0dXJuKC0z KTsKKyAgICBpZiAoYWNjZXNzKGJ1ZixSX09LKSA8IDApIHsJCS8qIENoZWNrIGFjY2VzcyAqLwor CWRlYnVnKEYxMTAsInpzZXRyb290IGFjY2VzcyBkZW5pZWQiLGJ1ZiwwKTsKKwlyZXR1cm4oLTQp OworICAgIH0KKyAgICBzID0gYnVmOworICAgIGlmIChja3Jvb3RzZXQpIHsJCQkvKiBJZiByb290 IGFscmVhZHkgc2V0ICovCisJaWYgKCF6aW5yb290KHMpKSB7CQkvKiBtYWtlIHN1cmUgbmV3IHJv b3QgaXMgaW4gaXQgKi8KKwkgICAgZGVidWcoRjExMCwienNldHJvb3QgbmV3IHJvb3Qgbm90IGlu IHJvb3QiLGNrcm9vdCwwKTsKKwkgICAgcmV0dXJuKC01KTsKKwl9CisgICAgfQorICAgIGlmICh6 Y2hkaXIoYnVmKSA8IDEpIHJldHVybigtNCk7CS8qIENoYW5nZSBkaXJlY3RvcnkgdG8gbmV3IHJv b3QgKi8KKyAgICBja3Jvb3RzZXQgPSBja3N0cm5jcHkoY2tyb290LGJ1ZixDS01BWFBBVEgpOyAv KiBOb3cgc2V0IHRoZSBuZXcgcm9vdCAqLworICAgIGlmIChja3Jvb3RbY2tyb290c2V0LTFdICE9 ICcvJykgeworCWNrcm9vdFtja3Jvb3RzZXQrK10gPSAnLyc7CisJY2tyb290W2Nrcm9vdHNldF0g PSAnXDAnOworICAgIH0KKyAgICBkZWJ1ZyhGMTExLCJ6c2V0cm9vdCByb290c2V0Iixja3Jvb3Qs Y2tyb290c2V0KTsKKyAgICBja3Jvb3RlcnIgPSAwOwkJCS8qIFJlc2V0IGVycm9yIGZsYWcgKi8K KyAgICByZXR1cm4oMSk7Cit9CisKK2NoYXIgKgoremdldHJvb3QoKSB7CQkJCS8qIFJldHVybnMg dGhlIHJvb3QgKi8KKyAgICBpZiAoIWNrcm9vdHNldCkKKyAgICAgIHJldHVybihOVUxMKTsKKyAg ICByZXR1cm4oKGNoYXIgKilja3Jvb3QpOworfQorCitpbnQKK3ppbnJvb3QocykgY2hhciAqIHM7 IHsJCQkvKiBDaGVja3MgaWYgZmlsZSBzIGlzIGluIHRoZSByb290ICovCisgICAgaW50IHgsIG47 CisgICAgc3RydWN0IHpmbmZwICogZiA9IE5VTEw7CisgICAgY2hhciBidWZbQ0tNQVhQQVRIKzJd OworCisgICAgZGVidWcoRjExMSwiemlucm9vdCBzZXRyb290Iixja3Jvb3QsY2tyb290c2V0KTsK KyAgICBja3Jvb3RlcnIgPSAwOwkJCS8qIFJlc2V0IGdsb2JhbCBlcnJvciBmbGFnICovCisgICAg aWYgKCFja3Jvb3RzZXQpCQkJLyogUm9vdCBub3Qgc2V0ICovCisgICAgICByZXR1cm4oMSk7CQkJ Lyogc28gaXQncyBvayAtIG5vIG5lZWQgdG8gY2hlY2sgKi8KKyAgICBpZiAoIShmID0gemZucWZw KHMsQ0tNQVhQQVRILGJ1ZikpKQkvKiBHZXQgZnVsbCBhbmQgcmVhbCBwYXRobmFtZSAqLworICAg ICAgcmV0dXJuKDApOwkJCS8qIEZhaWwgaWYgd2UgY2FuJ3QgICovCisgICAgbiA9IGYtPmxlbjsJ CQkJLyogTGVuZ3RoIG9mIGZ1bGwgcGF0aG5hbWUgKi8KKyAgICBkZWJ1ZyhGMTExLCJ6aW5yb290 IG4iLGJ1ZixuKTsKKyAgICBpZiAobiA8IChja3Jvb3RzZXQgLSAxKSB8fCBuID4gQ0tNQVhQQVRI KSB7CS8qIEJhZCBsZW5ndGggKi8KKwlja3Jvb3RlcnIgPSAxOwkJCSAgICAgICAgLyogRmFpbCAq LworCXJldHVybigwKTsKKyAgICB9CisgICAgaWYgKGlzZGlyKGJ1ZikgJiYgYnVmW24tMV0gIT0g Jy8nKSB7ICAvKiBJZiBpdCdzIGEgZGlyZWN0b3J5IG5hbWUgKi8KKwlidWZbbisrXSA9ICcvJzsJ CQkgIC8qIG1ha2Ugc3VyZSBpdCBlbmRzIHdpdGggJy8nICovCisJYnVmW25dID0gJ1wwJzsKKyAg ICB9CisgICAgeCA9IHN0cm5jbXAoYnVmLGNrcm9vdCxja3Jvb3RzZXQpOwkvKiBDb21wYXJlLCBj YXNlLXNlbnNpdGl2ZSAqLworICAgIGRlYnVnKEYxMTEsInppbnJvb3QgY2hlY2tlZCIsYnVmLHgp OworICAgIGlmICh4ID09IDApCQkJCS8qIE9LICovCisgICAgICByZXR1cm4oMSk7CisgICAgY2ty b290ZXJyID0gMTsJCQkvKiBOb3QgT0sgKi8KKyAgICByZXR1cm4oMCk7Cit9CisjZW5kaWYgLyog Q0tST09UICovCisKKyNpZmRlZiBDS19MT0dJTgorLyoKKyAgVGhlIGZvbGxvd2luZyBjb2RlIHBy b3ZpZGVzIHN1cHBvcnQgZm9yIHVzZXIgbG9naW4gYW5kIGxvZ291dAorICBpbmNsdWRpbmcgYW5v bnltb3VzIGFjY291bnRzLiAgSWYgdGhpcyBmZWF0dXJlIGlzIHRvIGJlIHN1cHBvcnRlZAorICBv dXRzaWRlIG9mIFVOSVgsIGl0IHNob3VsZCBiZSBzcHJlYWQgb3V0IGFtb25nIHRoZSBjaz9maW8u YyBtb2R1bGVzLi4uCisqLworI2lmbmRlZiBfUEFUSF9CU0hFTEwKKyNkZWZpbmUgX1BBVEhfQlNI RUxMICAgICIvdXNyL2Jpbi9iYXNoIgorI2VuZGlmIC8qIF9QQVRIX0JTSEVMTCAqLworI2lmbmRl ZiBfUEFUSF9GVFBVU0VSUworI2RlZmluZSBfUEFUSF9GVFBVU0VSUyAgIi9ldGMvZnRwdXNlcnMi CisjZW5kaWYgLyogX1BBVEhfRlRQVVNFUlMgKi8KKworLyoKKyAqIEhlbHBlciBmdW5jdGlvbiBm b3Igc2dldHB3bmFtKCkuCisgKi8KK2NoYXIgKgorc2dldHNhdmUocykgY2hhciAqczsgeworICAg IGNoYXIgKm5ldyA9IG1hbGxvYygodW5zaWduZWQpIHN0cmxlbihzKSArIDEpOworICAgIGlmIChu ZXcgPT0gTlVMTCkgeworICAgICAgICBwcmludGYoIj9Mb2NhbCByZXNvdXJjZSBmYWlsdXJlOiBt YWxsb2NcbiIpOworICAgICAgICBleGl0KDEpOworICAgICAgICAvKiBOT1RSRUFDSEVEICovCisg ICAgfQorICAgICh2b2lkKSBzdHJjcHkobmV3LCBzKTsJCS8qIHNhZmUgKi8KKyAgICByZXR1cm4g KG5ldyk7Cit9CisKKy8qCisgKiBTYXZlIHRoZSByZXN1bHQgb2YgZ2V0cHduYW0oKS4gIFVzZWQg Zm9yIFVTRVIgY29tbWFuZCwgc2luY2UKKyAqIHRoZSBkYXRhIHJldHVybmVkIG11c3Qgbm90IGJl IGNsb2JiZXJlZCBieSBhbnkgb3RoZXIgY29tbWFuZAorICogKGUuZy4sIGdsb2JiaW5nKS4KKyAq Lworc3RydWN0IHBhc3N3ZCAqCitzZ2V0cHduYW0obmFtZSkgY2hhciAqbmFtZTsgeworICAgIHN0 YXRpYyBzdHJ1Y3QgcGFzc3dkIHNhdmU7CisgICAgcmVnaXN0ZXIgc3RydWN0IHBhc3N3ZCAqcDsK KyNpZmRlZiBDS19TSEFET1cKKyAgICByZWdpc3RlciBzdHJ1Y3Qgc3B3ZCAqc3A7CisjZW5kaWYg LyogQ0tfU0hBRE9XICovCisgICAgY2hhciAqc2dldHNhdmUoKTsKKworI2lmZGVmIEhQVVgxMF9U UlVTVEVECisgICAgc3RydWN0IHByX3Bhc3N3ZCAqcHI7CisjZW5kaWYgLyogSFBVWDEwX1RSVVNU RUQgKi8KKworI2lmZGVmIENLX1NIQURPVworICAgIHNwID0gZ2V0c3BuYW0obmFtZSk7CisgICAg aWYgKHNwID09IE5VTEwpIHsKKyAgICAgICAgZGVidWcoRjExMCwic2dldHB3bmFtIiwiZ2V0c3Bu YW0oKSBmYWlscyIsMCk7CisJcmV0dXJuIChOVUxMKTsKKyAgICB9CisjZW5kaWYgLyogQ0tfU0hB RE9XICovCisKKyNpZmRlZiBIUFVYMTBfVFJVU1RFRAorICAgIGlmICgocHIgPSBnZXRwcnB3bmFt KG5hbWUpKSA9PSBOVUxMKQorICAgICAgcmV0dXJuKE5VTEwpOworI2VuZGlmIC8qIEhQVVgxMF9U UlVTVEVEICovCisKKyAgICBwID0gZ2V0cHduYW0obmFtZSk7CisgICAgLyogZGVidWcoRjExMSwi c2dldHB3bmFtIiwiZ2V0cHduYW0oKSIscCk7ICovCisgICAgaWYgKHAgPT0gTlVMTCkKKyAgICAg IHJldHVybihOVUxMKTsKKyAgICBpZiAoc2F2ZS5wd19uYW1lKSB7CisgICAgICAgIGZyZWUoc2F2 ZS5wd19uYW1lKTsKKyAgICAgICAgZnJlZShzYXZlLnB3X3Bhc3N3ZCk7CisgICAgICAgIGZyZWUo c2F2ZS5wd19nZWNvcyk7CisgICAgICAgIGZyZWUoc2F2ZS5wd19kaXIpOworICAgICAgICBmcmVl KHNhdmUucHdfc2hlbGwpOworICAgIH0KKyAgICBzYXZlID0gKnA7CisgICAgc2F2ZS5wd19uYW1l ID0gc2dldHNhdmUocC0+cHdfbmFtZSk7CisjaWZkZWYgQ0tfU0hBRE9XCisgICAgc2F2ZS5wd19w YXNzd2QgPSBzZ2V0c2F2ZShzcC0+c3BfcHdkcCk7CisjZWxzZSAvKiBDS19TSEFET1cgKi8KKyNp ZmRlZiBIUFVYMTBfVFJVU1RFRAorICAgIGlmIChwci0+dWZsZy5mZ19lbmNyeXB0ICYmIHByLT51 ZmxkLmZkX2VuY3J5cHQgJiYgKnByLT51ZmxkLmZkX2VuY3J5cHQpCisgICAgICBzYXZlLnB3X3Bh c3N3ZCA9IHNnZXRzYXZlKHByLT51ZmxkLmZkX2VuY3J5cHQpOworICAgIGVsc2UKKyAgICAgIHNh dmUucHdfcGFzc3dkID0gc2dldHNhdmUoIiIpOworI2Vsc2UgLyogSFBVWDEwX1RSVVNURUQgKi8K KyAgICBzYXZlLnB3X3Bhc3N3ZCA9IHNnZXRzYXZlKHAtPnB3X3Bhc3N3ZCk7CisjZW5kaWYgLyog SFBVWDEwX1RSVVNURUQgKi8KKyNlbmRpZiAvKiBDS19TSEFET1cgKi8KKyAgICBzYXZlLnB3X2dl Y29zID0gc2dldHNhdmUocC0+cHdfZ2Vjb3MpOworICAgIHNhdmUucHdfZGlyID0gc2dldHNhdmUo cC0+cHdfZGlyKTsKKyAgICBzYXZlLnB3X3NoZWxsID0gc2dldHNhdmUocC0+cHdfc2hlbGwpOwor ICAgIHJldHVybigmc2F2ZSk7Cit9CisKKyNkZWZpbmUgQ0tYTE9HQlNJWiAyNTYKKworc3RydWN0 IHBhc3N3ZCAqIHB3ID0gTlVMTDsKK2NoYXIgKiBob21lID0gTlVMTDsgICAgICAgICAgICAgICAg ICAgICAvKiBIb21lIGRpcmVjdG9yeSBwb2ludGVyIGZvciBnbG9iICovCisjaWZkZWYgQ01BU0sK KyN1bmRlZiBDTUFTSworI2VuZGlmIC8qIENNQVNLICovCisKKyNkZWZpbmUgQ01BU0sgMDI3CisK K2ludCBkZWZ1bWFzayA9IENNQVNLOyAgICAgICAgICAgICAgICAgICAvKiBEZWZhdWx0IHVtYXNr IHZhbHVlICovCisKKy8qICBaIFYgVSBTIEUgUiAgLS0gIFZlcmlmeSB1c2VyLCBSZXR1cm5zIDEg aWYgdXNlciBPSywgMCBvdGhlcndpc2UuICAqLworCisvKiBTZXRzIGdsb2JhbCBwYXNzd2QgcG9p bnRlciBwdyBpZiBuYW1lZCBhY2NvdW50IGV4aXN0cyBhbmQgaXMgYWNjZXB0YWJsZTsKKyAqIHNl dHMgYXNrcGFzc3dkIGlmIGEgUEFTUyBjb21tYW5kIGlzIGV4cGVjdGVkLiAgSWYgbG9nZ2VkIGlu IHByZXZpb3VzbHksCisgKiBuZWVkIHRvIHJlc2V0IHN0YXRlLiAgSWYgbmFtZSBpcyAiZnRwIiBv ciAiYW5vbnltb3VzIiwgdGhlIG5hbWUgaXMgbm90IGluCisgKiBfUEFUSF9GVFBVU0VSUywgYW5k IGZ0cCBhY2NvdW50IGV4aXN0cywgc2V0IGd1ZXN0IGFuZCBwdywgdGhlbiBqdXN0IHJldHVybi4K KyAqIElmIGFjY291bnQgZG9lc24ndCBleGlzdCwgYXNrIGZvciBwYXNzd2QgYW55d2F5LiAgT3Ro ZXJ3aXNlLCBjaGVjayB1c2VyCisgKiByZXF1ZXN0aW5nIGxvZ2luIHByaXZpbGVnZXMuICBEaXNh bGxvdyBhbnlvbmUgd2hvIGRvZXMgbm90IGhhdmUgYSBzdGFuZGFyZAorICogc2hlbGwgYXMgcmV0 dXJuZWQgYnkgZ2V0dXNlcnNoZWxsKCkuICBEaXNhbGxvdyBhbnlvbmUgbWVudGlvbmVkIGluIHRo ZSBmaWxlCisgKiBfUEFUSF9GVFBVU0VSUyB0byBhbGxvdyBwZW9wbGUgc3VjaCBhcyByb290IGFu ZCB1dWNwIHRvIGJlIGF2b2lkZWQuCisgKi8KK19QUk9UT1RZUChzdGF0aWMgaW50IGNoZWNrdXNl ciwgKGNoYXIgKikgKTsKKworY2hhciB6dnVuYW1lWzY0XSA9IHsgTlVMLCBOVUwgfTsKK2NoYXIg enZob21lW0NLTUFYUEFUSCsxXSA9IHsgTlVMLCBOVUwgfTsKKyNkZWZpbmUgWkVOVlVTRVIgNzAK KyNkZWZpbmUgWkVOVkhPTUUgQ0tNQVhQQVRIKzEyCisjZGVmaW5lIFpFTlZMT0dOQU1FIDc0Citz dGF0aWMgY2hhciB6ZW52dXNlcltaRU5WVVNFUl07CitzdGF0aWMgY2hhciB6ZW52aG9tZVtaRU5W SE9NRV07CitzdGF0aWMgY2hhciB6ZW52bG9nbmFtZVtaRU5WTE9HTkFNRV07CisKKyNpZmRlZiBD S19QQU0KK3N0YXRpYyBjaGFyIHBhbV9kYXRhWzUwMF07CitzdHJ1Y3QgcGFtX2NvbnYgcGFtX2Nv bnYgPSB7cGFtX2NiLCBwYW1fZGF0YX07IC8qIFBBTSBzdHJ1Y3R1cmUgKi8KK3N0cnVjdCBwYW1f aGFuZGxlICogcGFtaCA9IE5VTEw7ICAgICAgICAgICAgICAgLyogUEFNIHJlZmVyZW5jZSBoYW5k bGUgKi8KKyNlbmRpZiAvKiBDS19QQU0gKi8KKworaW50Cit6dnVzZXIobmFtZSkgY2hhciAqbmFt ZTsgeworICAgIHJlZ2lzdGVyIGNoYXIgKmNwID0gTlVMTDsKKyAgICBpbnQgeDsKKyAgICBjaGFy ICpzaGVsbDsKKyNpZmRlZiBHRVRVU0VSU0hFTEwKK19QUk9UT1RZUChjaGFyICogZ2V0dXNlcnNo ZWxsLCAodm9pZCkgKTsKKyNlbmRpZiAvKiBHRVRVU0VSU0hFTEwgKi8KKyNpZm5kZWYgTk9EQ0xF TkRVU0VSU0hFTEwKK19QUk9UT1RZUChWT0lEIGVuZHVzZXJzaGVsbCwgKHZvaWQpICk7CisjZW5k aWYJLyogTk9EQ0xFTkRVU0VSU0hFTEwgKi8KKworI2lmZGVmIENLX1BBTQorICAgIGludCBwYW1f c3RhdHVzOworICAgIGNvbnN0IGNoYXIgKiByZXBseSA9IE5VTEw7CisjZW5kaWYgLyogQ0tfUEFN ICovCisKKyAgICBkZWJ1ZyhGMTExLCJ1c2VyIixuYW1lLGxvZ2dlZF9pbik7CisKKyAgICBpZiAo IW5hbWUpIG5hbWUgPSAiIjsKKyAgICB6dnVuYW1lWzBdID0gTlVMOworCisgICAgZGVidWcoRjEw MSwienZ1c2VyIGNreHN5c2xvZyIsIiIsY2t4c3lzbG9nKTsKKworI2lmZGVmIENLU1lTTE9HCisg ICAgZGVidWcoRjEwMCwienZ1c2VyIENLU1lTTE9HIGRlZmluZWQiLCIiLDApOworI2VuZGlmIC8q IENLU1lTTE9HICovCisKKyAgICBpZiAobG9nZ2VkX2luKSAgICAgICAgICAgICAgICAgICAgICAv KiBTaG91bGQgbm90IGJlIGNhbGxlZCBpZiBsb2dnZWQgaW4gKi8KKyAgICAgIHJldHVybigwKTsK KworI2lmZGVmIENLU1lTTE9HCisgICAgaWYgKGNreHN5c2xvZyAmJiBja3hsb2dnaW5nKSB7Cisg ICAgICAgIHN5c2xvZyhMT0dfSU5GTywKKyAgICAgICAgICAgICAgICAibG9naW46IHVzZXIgJXMi LG5hbWUKKyAgICAgICAgICAgICAgICApOworICAgIH0KKyNlbmRpZiAvKiBDS1NZU0xPRyAqLwor CisgICAgZ3Vlc3QgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQXNzdW1lIG5vdCBn dWVzdCAqLworICAgIGFza3Bhc3N3ZCA9IDA7CisKKyAgICBpZiAoc3RyY21wKG5hbWUsICJmdHAi KSA9PSAwIHx8IHN0cmNtcChuYW1lLCAiYW5vbnltb3VzIikgPT0gMCkgeworICAgICAgICBkZWJ1 ZyhGMTAxLCJ6dnVzZXIgYW5vbnltb3VzIGNreGFub24iLCIiLGNreGFub24pOworICAgICAgICBp ZiAoIWNreGFub24pIHsgICAgICAgICAgICAgICAgIC8qIEFub255bW91cyBsb2dpbiBub3QgYWxs b3dlZCAqLworI2lmZGVmIENLU1lTTE9HCisgICAgICAgICAgICBpZiAoY2t4c3lzbG9nICYmIGNr eGxvZ2dpbmcpIHsKKyAgICAgICAgICAgICAgICBzeXNsb2coTE9HX0lORk8sCisgICAgICAgICAg ICAgICAgICAgICAgICJsb2dpbjogYW5vbnltb3VzIGxvZ2luIG5vdCBhbGxvd2VkOiAlcyIsCisg ICAgICAgICAgICAgICAgICAgICAgIGNsaWVudGhvc3QgPyBjbGllbnRob3N0IDogIih1bmtub3du IGhvc3QpIgorICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgfQorI2VuZGlm IC8qIENLU1lTTE9HICovCisgICAgICAgICAgICByZXR1cm4oMCk7CisgICAgICAgIH0KKyAgICAg ICAgaWYgKGNoZWNrdXNlcigiZnRwIikgfHwgY2hlY2t1c2VyKCJhbm9ueW1vdXMiKSkgeworICAg ICAgICAgICAgZGVidWcoRjEwMCwienZ1c2VyIGFub24gZm9yYmlkZGVuIGJ5IGZ0cHVzZXJzIGZp bGUiLCIiLDApOworI2lmZGVmIENLU1lTTE9HCisgICAgICAgICAgICBpZiAoY2t4c3lzbG9nICYm IGNreGxvZ2dpbmcpIHsKKyAgICAgICAgICAgICAgICBzeXNsb2coTE9HX0lORk8sCisgICAgICAg ICAgICAgICAgICAgICAgICJsb2dpbjogYW5vbnltb3VzIGxvZ2luIGZvcmJpZGRlbiBieSBmdHB1 c2VycyBmaWxlOiAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgIGNsaWVudGhvc3QgPyBjbGll bnRob3N0IDogIih1bmtub3duIGhvc3QpIgorICAgICAgICAgICAgICAgICAgICAgICApOworICAg ICAgICAgICAgfQorI2VuZGlmIC8qIENLU1lTTE9HICovCisgICAgICAgICAgICByZXR1cm4oMCk7 CisJfSBlbHNlIGlmICgocHcgPSBzZ2V0cHduYW0oImZ0cCIpKSAhPSBOVUxMKSB7CisgICAgICAg ICAgICBkZWJ1ZyhGMTAwLCJ6dnVzZXIgYW5vbiBzZ2V0cHduYW0oZnRwKSBPSyIsIiIsMCk7Cisg ICAgICAgICAgICBndWVzdCA9IDE7CisgICAgICAgICAgICBhc2twYXNzd2QgPSAxOworICAgICAg ICAgICAgY2tzdHJuY3B5KHp2dW5hbWUsImFub255bW91cyIsNjQpOworICAgICAgICAgICAgcmV0 dXJuKDEpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZGVidWcoRjEwMCwienZ1c2Vy IGFub24gc2dldHB3bmFtKGZ0cCkgRkFJTEVEIiwiIiwwKTsKKyNpZmRlZiBDS1NZU0xPRworICAg ICAgICAgICAgaWYgKGNreHN5c2xvZyAmJiBja3hsb2dnaW5nKSB7CisgICAgICAgICAgICAgICAg c3lzbG9nKExPR19JTkZPLAorICAgICAgICAgICAgICAgICAgICAgICAibG9naW46IGFub255bW91 cyBnZXRwd25hbShmdHApIGZhaWxlZDogJXMiLAorICAgICAgICAgICAgICAgICAgICAgICBjbGll bnRob3N0ID8gY2xpZW50aG9zdCA6ICIodW5rbm93biBob3N0KSIKKyAgICAgICAgICAgICAgICAg ICAgICAgKTsKKyAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBDS1NZU0xPRyAqLworICAgICAgICAg ICAgcmV0dXJuKDApOworICAgICAgICB9CisgICAgfQorICAgIHB3ID0gc2dldHB3bmFtKG5hbWUp OworICAgIGlmIChwdykgeworLyoKKyAgT2YgY291cnNlIHNvbWUgVU5JWCBwbGF0Zm9ybXMgKGxp a2UgQUlYKSBkb24ndCBoYXZlIGdldHVzZXJzaGVsbCgpLgorICBJbiB0aGF0IGNhc2Ugd2UgY2Fu J3QgY2hlY2sgaWYgdGhlIHVzZXIncyBhY2NvdW50IGhhcyBiZWVuICJ0dXJuZWQgb2ZmIgorICBv ciBzb21lc3VjaCwgZS5nLiBieSBzZXR0aW5nIHRoZWlyIHNoZWxsIHRvICIvZXRjL25vbG9naW4i IG9yIHNvbWVzdWNoLAorICB3aGljaCBydW5zICh1c3VhbGx5IGp1c3QgcHJpbnRpbmcgYSBtZXNz YWdlIGFuZCBleGl0aW5nKSwgYnV0IHdoaWNoIGlzCisgIG5vdCBsaXN0ZWQgaW4gL2V0Yy9zaGVs bHMuICBGb3IgdGhhdCBtYXR0ZXIsIGlmIGdldHVzZXJzaGVsbCgpIGlzIG5vdAorICBhdmFpbGFi bGUsIHRoZW4gcHJvYmFibHkgbmVpdGhlciBpcyAvZXRjL3NoZWxscy4KKyovCisgICAgICAgIGRl YnVnKEYxMDAsInp2dXNlciBzZ2V0cHduYW0gb2siLCIiLDApOworICAgICAgICBzaGVsbCA9IHB3 LT5wd19zaGVsbDsKKyAgICAgICAgaWYgKCFzaGVsbCkgc2hlbGwgPSAiIjsKKyAgICAgICAgaWYg KCEqc2hlbGwpCisgICAgICAgICAgc2hlbGwgPSBfUEFUSF9CU0hFTEw7CisgICAgICAgIGRlYnVn KEYxMTAsInp2dXNlciBzaGVsbCIsc2hlbGwsMCk7CisjaWZkZWYgR0VUVVNFUlNIRUxMCisgICAg ICAgIHdoaWxlICgoY3AgPSBnZXR1c2Vyc2hlbGwoKSkgIT0gTlVMTCkgeworICAgICAgICAgICAg ZGVidWcoRjExMCwienZ1c2VyIGdldHVzZXJzaGVsbCIsY3AsMCk7CisgICAgICAgICAgICBpZiAo KGludClzdHJjbXAoY3AsIHNoZWxsKSA9PSAwKQorICAgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgfQorICAgICAgICBkZWJ1ZyhGMTAwLCJ6dnVzZXIgZW5kdXNlcnNoZWxsIDEiLCIiLDApOwor I2lmbmRlZiBOT0RDTEVORFVTRVJTSEVMTAorICAgICAgICAoVk9JRCkgZW5kdXNlcnNoZWxsKCk7 CisjZWxzZQorICAgICAgICBlbmR1c2Vyc2hlbGwoKTsKKyNlbmRpZgkvKiBOT0RDTEVORFVTRVJT SEVMTCAqLworICAgICAgICBkZWJ1ZyhGMTAwLCJ6dnVzZXIgZW5kdXNlcnNoZWxsIDIiLCIiLDAp OworI2Vsc2UgLyogR0VUVVNFUlNIRUxMICovCisgICAgICAgIGNwID0gIiI7ICAgICAgICAgICAg ICAgICAgICAgICAgLyogRG8gbm90IHJlZnVzZSBpZiB3ZSBjYW5ub3QgY2hlY2sgKi8KKyNlbmRp ZiAvKiBHRVRVU0VSU0hFTEwgKi8KKyAgICAgICAgeCA9IGNoZWNrdXNlcihuYW1lKTsKKyAgICAg ICAgZGVidWcoRjEwMSwienZ1c2VyIGNoZWNrdXNlciIsIiIseCk7CisgICAgICAgIGlmIChjcCA9 PSBOVUxMKSB7CisgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJ6dnVzZXIgcmVmdXNlZCAxIiwiIiww KTsKKyAgICAgICAgICAgIHB3ID0gKHN0cnVjdCBwYXNzd2QgKikgTlVMTDsKKyNpZmRlZiBDS1NZ U0xPRworICAgICAgICAgICAgaWYgKGNreHN5c2xvZyAmJiBja3hsb2dnaW5nKSB7CisgICAgICAg ICAgICAgICAgc3lzbG9nKExPR19JTkZPLAorICAgICAgICAgICAgICAgICAgICAgICAibG9naW46 IGludmFsaWQgc2hlbGwgJXMgZm9yICVzICVzIixzaGVsbCwgbmFtZSwKKyAgICAgICAgICAgICAg ICAgICAgICAgY2xpZW50aG9zdCA/IGNsaWVudGhvc3QgOiAiKHVua25vd24gaG9zdCkiCisgICAg ICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICB9CisjZW5kaWYgLyogQ0tTWVNMT0cg Ki8KKyAgICAgICAgICAgIHJldHVybigwKTsKKyAgICAgICAgfSBlbHNlIGlmICh4KSB7CisgICAg ICAgICAgICBkZWJ1ZyhGMTAwLCJ6dnVzZXIgcmVmdXNlZCAyIiwiIiwwKTsKKyAgICAgICAgICAg IHB3ID0gKHN0cnVjdCBwYXNzd2QgKikgTlVMTDsKKyNpZmRlZiBDS1NZU0xPRworICAgICAgICAg ICAgaWYgKGNreHN5c2xvZyAmJiBja3hsb2dnaW5nKSB7CisgICAgICAgICAgICAgICAgc3lzbG9n KExPR19JTkZPLAorICAgICAgICAgICAgICAgICAgICAgICAibG9naW46ICVzIGxvZ2luIGZvcmJp ZGRlbiBieSBmdHB1c2VycyBmaWxlOiAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgIG5hbWUs IGNsaWVudGhvc3QgPyBjbGllbnRob3N0IDogIih1bmtub3duIGhvc3QpIgorICAgICAgICAgICAg ICAgICAgICAgICApOworICAgICAgICAgICAgfQorI2VuZGlmIC8qIENLU1lTTE9HICovCisgICAg ICAgICAgICByZXR1cm4oMCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB4ID0gMDsK KyNpZmRlZiBDS19QQU0KKyAgICAgICAgICAgIC8qIEdldCBQQU0gYXV0aGVudGljYXRpb24gZGV0 YWlscyAqLworICAgICAgICAgICAgZGVidWcoRjExMCwienZ1c2VyIiwiY2FsbGluZyBwYW1fc3Rh cnQiLDApOworICAgICAgICAgICAgaWYgKChwYW1fc3RhdHVzID0KKyAgICAgICAgICAgICAgICAg cGFtX3N0YXJ0KFBBTV9TRVJWSUNFX1RZUEUsbmFtZSwmcGFtX2NvbnYsJnBhbWgpKQorICAgICAg ICAgICAgICAgICE9IFBBTV9TVUNDRVNTKSB7CisgICAgICAgICAgICAgICAgcmVwbHkgPSBwYW1f c3RyZXJyb3IoTlVMTCwgcGFtX3N0YXR1cyk7CisgICAgICAgICAgICAgICAgZGVidWcoRjExMCwi enZ1c2VyIFBBTSBmYWlsdXJlIixyZXBseSwwKTsKKyAgICAgICAgICAgICAgICBwcmludGYoIiVz XG4iLHJlcGx5KTsKKyNpZmRlZiBDS1NZU0xPRworICAgICAgICAgICAgICAgIGlmIChja3hzeXNs b2cgJiYgY2t4bG9nZ2luZykgeworICAgICAgICAgICAgICAgICAgICBzeXNsb2coTE9HX0lORk8s CisgICAgICAgICAgICAgICAgICAgICAgICAgICAibG9naW46ICVzIHJlZnVzZWQgYnkgUEFNIFwi JXNcIjogJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSxyZXBseSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNsaWVudGhvc3QgPyBjbGllbnRob3N0IDogIih1bmtub3du IGhvc3QpIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICB9 CisjZW5kaWYgLyogQ0tTWVNMT0cgKi8KKyAgICAgICAgICAgICAgICByZXR1cm4oMCk7CisgICAg ICAgICAgICB9CisjZW5kaWYgLyogQ0tfUEFNICovCisgICAgICAgICAgICBhc2twYXNzd2QgPSAx OworICAgICAgICAgICAgY2tzdHJuY3B5KHp2dW5hbWUsbmFtZSw2NCk7CisgICAgICAgICAgICBy ZXR1cm4oMSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICB4ID0gMDsKKyAgICAg ICAgZGVidWcoRjEwMCwienZ1c2VyIHNnZXRwd25hbSBOVUxMIiwiIiwwKTsKKyNpZmRlZiBDS1NZ U0xPRworICAgICAgICBpZiAoY2t4c3lzbG9nICYmIGNreGxvZ2dpbmcpIHsKKyAgICAgICAgICAg IHN5c2xvZyhMT0dfSU5GTywKKyAgICAgICAgICAgICAgICAgICAibG9naW46IGdldHB3bmFtKCVz KSBmYWlsZWQ6ICVzIixuYW1lLAorICAgICAgICAgICAgICAgICAgIGNsaWVudGhvc3QgPyBjbGll bnRob3N0IDogIih1bmtub3duIGhvc3QpIgorICAgICAgICAgICAgICAgICAgICk7CisgICAgICAg IH0KKyNlbmRpZiAvKiBDS1NZU0xPRyAqLworICAgICAgICByZXR1cm4oMCk7CisgICAgfQorCisj aWZkZWYgRlRQX0tFUkJFUk9TCisgICAgaWYgKGF1dGhfdHlwZSAmJiBzdHJjbXAoYXV0aF90eXBl LCAiS0VSQkVST1NfVjQiKSA9PSAwKSB7CisjaWZkZWYgQ09NTUVOVAorCS8qIFdoeSBzcHJpbnRm IGFuZCB0aGVuIHByaW50Zj8gKi8KKwkvKiBBbHNvLCB3aGF0IGlzIGtlcmJfb2s/ICBBbmQgaXMg dGhlIHRlc3Qgb24gaXQgcmlnaHQ/ICovCisgICAgICAgIGNoYXIgYnVmW0NLWExPR0JTSVpdOwor ICAgICAgICBzcHJpbnRmKGJ1ZiwgIktlcmJlcm9zIHVzZXIgJXMlcyVzQCVzIGlzJXMgYXV0aG9y aXplZCBhcyAlcyVzIiwKKyAgICAgICAgICAgICAgICAga2RhdGEucG5hbWUsICprZGF0YS5waW5z dCA/ICIuIiA6ICIiLAorICAgICAgICAgICAgICAgICBrZGF0YS5waW5zdCwga2RhdGEucHJlYWxt LAorICAgICAgICAgICAgICAgICAoa2VyYl9vayA9IGt1c2Vyb2soJmtkYXRhLG5hbWUpID09IDAp ID8gIiIgOiAiIG5vdCIsCisgICAgICAgICAgICAgICAgIG5hbWUsIGtlcmJfb2sgPyAiIiA6ICI7 IFBhc3N3b3JkIHJlcXVpcmVkLiIpOworICAgICAgICBwcmludGYoIiVzIiwgYnVmKTsKKyNlbHNl CisgICAgICAgIHByaW50ZigiS2VyYmVyb3MgdXNlciAlcyVzJXNAJXMgaXMlcyBhdXRob3JpemVk IGFzICVzJXMiLAorICAgICAgICAgICAgICAgICBrZGF0YS5wbmFtZSwgKmtkYXRhLnBpbnN0ID8g Ii4iIDogIiIsCisgICAgICAgICAgICAgICAgIGtkYXRhLnBpbnN0LCBrZGF0YS5wcmVhbG0sCisg ICAgICAgICAgICAgICAgIChrZXJiX29rID0ga3VzZXJvaygma2RhdGEsbmFtZSkgPT0gMCkgPyAi IiA6ICIgbm90IiwKKyAgICAgICAgICAgICAgICAgbmFtZSwga2VyYl9vayA/ICIiIDogIjsgUGFz c3dvcmQgcmVxdWlyZWQuIik7CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAgICBpZiAoa2Vy Yl9vaykgcmV0dXJuKDEpOworICAgIH0gZWxzZQorICAgICAgcmV0dXJuKDApOworI2VuZGlmIC8q IEZUUF9LRVJCRVJPUyAqLworfQorCisvKiBDaGVjayBpZiB0aGUgZ2l2ZW4gdXNlciBpcyBpbiB0 aGUgZm9yYmlkZGVuLXVzZXIgZmlsZSAqLworCitzdGF0aWMgaW50CitjaGVja3VzZXIobmFtZSkg Y2hhciAqbmFtZTsgeworICAgIGV4dGVybiBjaGFyICogdXNlcmZpbGU7CisgICAgRklMRSAqZmQ7 CisgICAgaW50IGk7CisgICAgY2hhciBsaW5lW0NLWExPR0JTSVorMV07CisKKyAgICBpZiAoIW5h bWUpCisgICAgICBuYW1lID0gIiI7CisgICAgaSA9IHN0cmxlbihuYW1lKTsKKyAgICBkZWJ1ZyhG MTExLCJjaGVja3VzZXIgbmFtZSIsbmFtZSxpKTsKKyAgICBpZiAoISpuYW1lKQorICAgICAgcmV0 dXJuKDEpOworCisgICAgZmQgPSBmb3Blbih1c2VyZmlsZSA/IHVzZXJmaWxlIDogX1BBVEhfRlRQ VVNFUlMsICJyIik7CisgICAgLyogZGVidWcoRjExMSwiY2hlY2t1c2VyIHVzZXJmaWxlIix1c2Vy ZmlsZSxmZCk7ICovCisgICAgaWYgKGZkKSB7CisgICAgICAgIGxpbmVbMF0gPSAnXDAnOworICAg ICAgICB3aGlsZSAoZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBmZCkpIHsKKyAgICAgICAgICAg IGRlYnVnKEYxMTAsImNoZWNrdXNlciBsaW5lIixsaW5lLDApOworICAgICAgICAgICAgaWYgKGxp bmVbMF0gPD0gJyMnKQorICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmIChz dHJuY21wKGxpbmUsIG5hbWUsIGkpID09IDApIHsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEw LCJjaGVja3VzZXIgUkVGVVNFRCIsbmFtZSwwKTsKKyAgICAgICAgICAgICAgICByZXR1cm4oMSk7 CisgICAgICAgICAgICB9CisgICAgICAgICAgICBsaW5lWzBdID0gJ1wwJzsKKyAgICAgICAgfQor ICAgICAgICAoVk9JRCkgZmNsb3NlKGZkKTsKKyAgICB9CisgICAgZGVidWcoRjExMCwiY2hlY2t1 c2VyIE9LIixuYW1lLDApOworICAgIHJldHVybigwKTsKK30KKworLyogIFogViBMIE8gRyBPIFUg VCAgLS0gIExvZyBvdXQgZnJvbSBJbnRlcm5ldCBLZXJtaXQgU2VydmljZSAgKi8KKworVk9JRAor enZsb2dvdXQoKSB7CisjaWZkZWYgQ09NTUVOVAorICAgIC8qIFRoaXMgY291bGQgYmUgZGFuZ2Vy b3VzICovCisgICAgaWYgKHNldHVpZCgoVUlEX1QpMCkgPCAwKSB7CisgICAgICAgIGRlYnVnKEYx MDAsInp2bG9nb3V0IHNldHVpZCBGQUlMRUQiLCIiLDApOworICAgICAgICBnb3RvIGJhZDsKKyAg ICB9CisgICAgZGVidWcoRjEwMCwienZsb2dvdXQgc2V0dWlkIE9LIiwiIiwwKTsKKyNlbmRpZiAv KiBDT01NRU5UICovCisjaWZkZWYgQ0tTWVNMT0cKKyAgICBpZiAoY2t4c3lzbG9nID49IFNZU0xH X0xJICYmIGNreGxvZ2dpbmcpIHsKKyAgICAgICAgY2tzeXNsb2coU1lTTEdfTEksIDEsICJsb2dv dXQiLChjaGFyICopIHVpZGJ1ZiwgY2xpZW50aG9zdCk7CisgICAgfQorI2VuZGlmIC8qIENLU1lT TE9HICovCisjaWZkZWYgQ0tXVE1QCisgICAgZGVidWcoRjExMCwiV1RNUCBsb2dvdXQiLGNrc3lz bGluZSxsb2dnZWRfaW4pOworICAgIGlmIChsb2dnZWRfaW4pCisgICAgICBsb2d3dG1wKGNrc3lz bGluZSwgIiIsICIiKTsKKyNlbmRpZiAvKiBDS1dUTVAgKi8KKyAgICBwdyA9IE5VTEw7CisgICAg bG9nZ2VkX2luID0gMDsKKyAgICBndWVzdCA9IDA7CisgICAgaXNndWVzdCA9IDA7Cit9CisKKyNp ZmRlZiBGVFBfS0VSQkVST1MKK2twYXNzKG5hbWUsIHApIGNoYXIgKm5hbWUsICpwOyB7CisgICAg Y2hhciBpbnN0YW5jZVtJTlNUX1NaXTsKKyAgICBjaGFyIHJlYWxtW1JFQUxNX1NaXTsKKyAgICBj aGFyIHRrdF9maWxlWzIwXTsKKyAgICBLVEVYVF9TVCB0aWNrZXQ7CisgICAgQVVUSF9EQVQgYXV0 aGRhdGE7CisgICAgdW5zaWduZWQgbG9uZyBmYWRkcjsKKyAgICBzdHJ1Y3QgaG9zdGVudCAqaHA7 CisKKyAgICBpZiAoa3JiX2dldF9scmVhbG0ocmVhbG0sIDEpICE9IEtTVUNDRVNTKQorICAgICAg cmV0dXJuKDApOworCisgICAgY2tzdHJuY3B5KHRrdF9maWxlLCBUS1RfUk9PVCwgMjApOworICAg IGNrc3RybmNhdCh0a3RfZmlsZSwgIl9mdHBkWFhYWFhYIiwgMjApOworICAgIGtyYl9zZXRfdGt0 X3N0cmluZyhta3RlbXAodGt0X2ZpbGUpKTsKKworICAgIChWT0lEKSBja3N0cm5jcHkoaW5zdGFu Y2UsIGtyYl9nZXRfcGhvc3QoaG9zdG5hbWUpLCBzaXplb2YoaW5zdGFuY2UpKTsKKworICAgIGlm ICgoaHAgPSBnZXRob3N0YnluYW1lKGluc3RhbmNlKSkgPT0gTlVMTCkKKyAgICAgIHJldHVybigw KTsKKworI2lmZGVmIEhBRERSTElTVAorICAgIGhwID0gY2tfY29weWhvc3RlbnQoaHApOwkJLyog c2FmZSBjb3B5IHRoYXQgd29uJ3QgY2hhbmdlICovCisjZW5kaWYgLyogSEFERFJMSVNUICovCisg ICAgYmNvcHkoKGNoYXIgKilocC0+aF9hZGRyLCAoY2hhciAqKSAmZmFkZHIsIHNpemVvZihmYWRk cikpOworCisgICAgaWYgKGtyYl9nZXRfcHdfaW5fdGt0KG5hbWUsICIiLCByZWFsbSwgImtyYnRn dCIsIHJlYWxtLCAxLCBwKSB8fAorICAgICAgICBrcmJfbWtfcmVxKCZ0aWNrZXQsICJyY21kIiwg aW5zdGFuY2UsIHJlYWxtLCAzMykgfHwKKyAgICAgICAga3JiX3JkX3JlcSgmdGlja2V0LCAicmNt ZCIsIGluc3RhbmNlLCBmYWRkciwgJmF1dGhkYXRhLCAiIikgfHwKKyAgICAgICAga3VzZXJvaygm YXV0aGRhdGEsIG5hbWUpKSB7CisgICAgICAgIGRlc3RfdGt0KCk7CisgICAgICAgIHJldHVybigw KTsKKyAgICB9CisgICAgZGVzdF90a3QoKTsKKyAgICByZXR1cm4oMSk7Cit9CisjZW5kaWYgLyog RlRQX0tFUkJFUk9TICovCisKK1ZPSUQKK3pzeXNsb2coKSB7CisjaWZkZWYgQ0tTWVNMT0cKKyAg ICBpZiAoY2t4c3lzbG9nICYmICFja3hsb2dnaW5nKSB7CisjaWZkZWYgTE9HX0RBRU1PTgorICAg ICAgICBvcGVubG9nKGluc2VydmVyID8gImlrc2QiIDogImNrZXJtaXQiLCBMT0dfUElELCBMT0df REFFTU9OKTsKKyNlbHNlCisgICAgICAgIG9wZW5sb2coaW5zZXJ2ZXIgPyAiaWtzZCIgOiAiY2tl cm1pdCIsIExPR19QSUQpOworI2VuZGlmIC8qIExPR19EQUVNT04gKi8KKyAgICAgICAgY2t4bG9n Z2luZyA9IDE7CisgICAgICAgIGRlYnVnKEYxMDAsInpzeXNsb2cgc3lzbG9nIG9wZW5lZCIsIiIs MCk7CisgICAgfQorI2VuZGlmIC8qIENLU1lTTE9HICovCit9CisKKy8qICBaIFYgUCBBIFMgUyAg LS0gIFZlcmlmeSBwYXNzd29yZDsgcmV0dXJucyAxIGlmIE9LLCAwIG90aGVyd2lzZSAgKi8KKwor I2lmbmRlZiBBVVRIX1VTRVIKKyNkZWZpbmUgQVVUSF9VU0VSIDMKKyNlbmRpZiAvKiBBVVRIX1VT RVIgKi8KKyNpZm5kZWYgQVVUSF9WQUxJRAorI2RlZmluZSBBVVRIX1ZBTElEIDQKKyNlbmRpZiAv KiBBVVRIX1ZBTElEICovCisKKyNpZmRlZiBfX0ZyZWVCU0RfXwkJCS8qIDI5OSBUaGlzIHdhcyBu ZWNlc3NhcnkgaW4gKi8KKyNpZm5kZWYgTk9EQ0xJTklUR1JPVVBTCQkJLyogRnJlZUJTRCA0LjQs IGRvbid0IGtub3cgKi8KKyNkZWZpbmUgTk9EQ0xJTklUR1JPVVBTCQkJLyogYWJvdXQgb3RoZXIg dmVyc2lvbnMuLi4gKi8KKyNlbmRpZgkvKiBOT0RDTElOSVRHUk9VUFMgKi8gICAgICAgICAgICAK KyNlbmRpZgkvKiAgX19GcmVlQlNEX18gKi8KKworaW50Cit6dnBhc3MocCkgY2hhciAqcDsgewor I2lmbmRlZiBOT0RDTElOSVRHUk9VUFMKK19QUk9UT1RZUChpbnQgaW5pdGdyb3VwcywgKGNvbnN0 IGNoYXIgKiwgZ2lkX3QpICk7CisjZW5kaWYJLyogTk9EQ0xJTklUR1JPVVBTICovCisKKyAgICBj aGFyICp4cGFzc3dkLCAqc2FsdDsKKyAgICBjaGFyICogZGlyID0gTlVMTDsKKyNpZmRlZiBDS19Q QU0KKyAgICBpbnQgcGFtX3N0YXR1czsKKyAgICBjb25zdCBjaGFyICogcmVwbHkgPSBOVUxMOwor I2VuZGlmIC8qIENLX1BBTSAqLworCisgICAgaWYgKGxvZ2dlZF9pbiB8fCBhc2twYXNzd2QgPT0g MCkgeworICAgICAgICByZXR1cm4oMCk7CisgICAgfQorICAgIGRlYnVnKEYxMTEsInp2cGFzcyIs cCA/IChndWVzdCA/IHAgOiAieHh4eHh4IikgOiAiKG51bGwpIixndWVzdCk7CisgICAgaWYgKCFw KSBwID0gIiI7CisgICAgYXNrcGFzc3dkID0gMDsKKyAgICBpZiAoZ3Vlc3QgJiYgISpwKSB7ICAg ICAgICAgICAgICAgICAvKiBHdWVzdHMgbXVzdCBzcGVjaWZ5IGEgcGFzc3dvcmQgKi8KKyNpZmRl ZiBDS1NZU0xPRworICAgICAgICBpZiAoY2t4c3lzbG9nICYmIGNreGxvZ2dpbmcpIHsKKyAgICAg ICAgICAgIHN5c2xvZyhMT0dfSU5GTywKKyAgICAgICAgICAgICAgICAgICAibG9naW46IGFub255 bW91cyBndWVzdHMgbXVzdCBzcGVjaWZ5IGEgcGFzc3dvcmQiCisgICAgICAgICAgICAgICAgICAg KTsKKyAgICAgICAgfQorI2VuZGlmIC8qIENLU1lTTE9HICovCisgICAgICAgIHJldHVybigwKTsK KyAgICB9CisgICAgaWYgKCFndWVzdAorI2lmZGVmIENLX0FVVEhFTlRJQ0FUSU9OCisgICAgICAg ICYmIGNrX3RuX2F1dGhfdmFsaWQoKSAhPSBBVVRIX1ZBTElECisjZW5kaWYgLyogQ0tfQVVUSEVO VElDQVRJT04gKi8KKyAgICAgICAgKSB7ICAgICAgICAgICAgICAgICAgICAgLyogImZ0cCIgaXMg b25seSBhY2NvdW50IGFsbG93ZWQgbm8gcGFzc3dvcmQgKi8KKyNpZmRlZiBDS19QQU0KKyAgICAg ICAgZGVidWcoRjExMCwienZwYXNzIiwiY2FsbGluZyBwYW1fc2V0X2l0ZW0oQVVUSFRPSykiLDAp OworICAgICAgICBpZiAoKHBhbV9zdGF0dXMgPSBwYW1fc2V0X2l0ZW0ocGFtaCxQQU1fQVVUSFRP SyxwKSkgIT0gUEFNX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgIHJlcGx5ID0gcGFtX3N0cmVycm9y KHBhbWgsIHBhbV9zdGF0dXMpOworICAgICAgICAgICAgZGVidWcoRjExMCwienZwYXNzIFBBTSBm YWlsdXJlIixyZXBseSwwKTsKKyAgICAgICAgICAgIC8qIGlmIG5vIHBhc3N3b3JkIGdpdmVuIHRy ZWF0IGFzIG5vbi1mYXRhbCBlcnJvciAqLworICAgICAgICAgICAgLyogcGFtIHdpbGwgcHJvbXB0 IGZvciBwYXNzd29yZCBpbiBwYW1fYXV0aGVudGljYXRlKCkgKi8KKyAgICAgICAgICAgIGlmICgh cCkgeworICAgICAgICAgICAgICAgIHByaW50ZigiJXNcbiIscmVwbHkpOworICAgICAgICAgICAg ICAgIHBhbV9lbmQocGFtaCwgMCk7CisgICAgICAgICAgICAgICAgZGVidWcoRjEwMCwienZwYXNz IGRlbmllZCIsIiIsMCk7CisgICAgICAgICAgICAgICAgcHcgPSBOVUxMOworICAgICAgICAgICAg ICAgIHp2dW5hbWVbMF0gPSBOVUw7CisgICAgICAgICAgICAgICAgcmV0dXJuKDApOworICAgICAg ICAgICAgfQorICAgICAgICB9CisgICAgICAgIGRlYnVnKEYxMTAsInp2cGFzcyIsImNhbGxpbmcg cGFtX2F1dGhlbnRpY2F0ZSIsMCk7CisjaWZkZWYgQ09NTUVOVAorICAgICAgICBpZiAoKnApCisJ ICBwYW1fcHcgPSBwOworI2Vsc2UKKy8qCisgIE1ha2UgSUtTRCBhdXRoZW50aWNhdGlvbiAodXNp bmcgUEFNKSBhc2sgZm9yIGEgcGFzc3dvcmQgd2hlbiBhbgorICBpbnZhbGlkIHVzZXJuYW1lIGhh cyBiZWVuIGdpdmVuLCB0byBhdm9pZCBkaXNjbG9zaW5nIHdoaWNoIGFjY291bnQKKyAgbmFtZXMg YXJlIHZhbGlkLiBTZWUgIzQxNzI0NyAoRGViaWFuKS4KKyovCisgICAgICAgIGlmICgqcAorI2lm ZGVmIENLX0xPR0lOCisJICAgIHx8IGdvdGVtcHR5cGFzc3dkCisjZW5kaWYgLyogQ0tfTE9HSU4g Ki8KKwkgICAgKQorCSAgICBwYW1fcHcgPSBwOworI2VuZGlmCS8qIENPTU1FTlQgKi8KKyAgICAg ICAgaWYgKChwYW1fc3RhdHVzID0gcGFtX2F1dGhlbnRpY2F0ZShwYW1oLCAwKSkgIT0gUEFNX1NV Q0NFU1MpIHsKKyAgICAgICAgICAgIHJlcGx5ID0gcGFtX3N0cmVycm9yKHBhbWgsIHBhbV9zdGF0 dXMpOworICAgICAgICAgICAgZGVidWcoRjExMCwienZwYXNzIFBBTSBmYWlsdXJlIixyZXBseSww KTsKKyAgICAgICAgICAgIHByaW50ZigiJXNcbiIscmVwbHkpOworICAgICAgICAgICAgcGFtX2Vu ZChwYW1oLCAwKTsKKyAgICAgICAgICAgIGRlYnVnKEYxMDAsInp2cGFzcyBkZW5pZWQiLCIiLDAp OworICAgICAgICAgICAgcGFtX3B3ID0gTlVMTDsKKyAgICAgICAgICAgIHB3ID0gTlVMTDsKKyAg ICAgICAgICAgIHp2dW5hbWVbMF0gPSBOVUw7CisgICAgICAgICAgICByZXR1cm4oMCk7CisgICAg ICAgIH0KKyAgICAgICAgcGFtX3B3ID0gTlVMTDsKKyAgICAgICAgZGVidWcoRjExMCwienZwYXNz IiwiY2FsbGluZyBwYW1fYWNjdF9tZ210IiwwKTsKKyAgICAgICAgaWYgKChwYW1fc3RhdHVzID0g cGFtX2FjY3RfbWdtdChwYW1oLCAwKSkgIT0gUEFNX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgIHJl cGx5ID0gcGFtX3N0cmVycm9yKHBhbWgsIHBhbV9zdGF0dXMpOworICAgICAgICAgICAgZGVidWco RjExMCwienZwYXNzIFBBTSBmYWlsdXJlIixyZXBseSwwKTsKKyAgICAgICAgICAgIHByaW50Zigi JXNcbiIscmVwbHkpOworICAgICAgICAgICAgcGFtX2VuZChwYW1oLCAwKTsKKyAgICAgICAgICAg IGRlYnVnKEYxMDAsInp2cGFzcyBkZW5pZWQiLCIiLDApOworICAgICAgICAgICAgcHcgPSBOVUxM OworICAgICAgICAgICAgenZ1bmFtZVswXSA9IE5VTDsKKyAgICAgICAgICAgIHJldHVybigwKTsK KyAgICAgICAgfQorICAgICAgICBkZWJ1ZyhGMTEwLCJ6dnBhc3MiLCJQQU0gdmFsaWRhdGVzIE9L IiwwKTsKKyAgICAgICAgcGFtX2VuZChwYW1oLDApOworI2Vsc2UgLyogQ0tfUEFNICovCisgICAg ICAgIGlmIChwdyA9PSBOVUxMKQorICAgICAgICAgIHNhbHQgPSAieHgiOworICAgICAgICBlbHNl CisgICAgICAgICAgc2FsdCA9IHB3LT5wd19wYXNzd2Q7CisKKyNpZmRlZiBIUFVYMTBfVFJVU1RF RAorICAgICAgICB4cGFzc3dkID0gYmlnY3J5cHQocCwgc2FsdCk7CisjZWxzZQorLyoKKyAgT24g NjQtYml0IHBsYXRmb3JtcyB0aGlzIGNhbiBnaXZlICJjYXN0IHRvIHBvaW50ZXIgZnJvbSBpbnRl Z2VyIG9mCisgIGRpZmZlcmVudCBzaXplIiB3YXJuaW5nLCBidXQgSSdtIG5vdCBzdXJlIHdoYXQg dGhlIGVmZmVjdCBpcyBhdCBydW50aW1lLAorICBvciB3aGF0IHRvIGRvIGFib3V0IGl0LgorICov CisgICAgICAgIHhwYXNzd2QgPSAoY2hhciAqKWNyeXB0KHAsIHNhbHQpOworI2VuZGlmIC8qIEhQ VVgxMF9UUlVTVEVEICovCisKKyAgICAgICAgaWYgKAorI2lmZGVmIEZUUF9LRVJCRVJPUworICAg ICAgICAgICAgLyogbnVsbCBwd19wYXNzd2Qgb2sgaWYgS2VyYmVyb3MgcGFzc3dvcmQgb2sgKi8K KyAgICAgICAgICAgIHB3ID09IE5VTEwgfHwKKyAgICAgICAgICAgICgoKnB3LT5wd19wYXNzd2Qg IT0gJ1wwJyB8fAorICAgICAgICAgICAgICBzdHJjbXAoeHBhc3N3ZCwgcHctPnB3X3Bhc3N3ZCkp CisgICAgICAgICAgICAgJiYgIWtwYXNzKHB3LT5wd19uYW1lLCBwKSkKKyNlbHNlCisjaWZkZWYg Q0tfU1JQCisgICAgICAgICAgICAvKiBjaGVjayB3aXRoIHRwYXNzd2QgZmlyc3QgaWYgdGhlcmUg Ki8KKyAgICAgICAgICAgIHB3ID09IE5VTEwgfHwgKnB3LT5wd19wYXNzd2QgPT0gJ1wwJyB8fAor ICAgICAgICAgICAgdF92ZXJpZnlwdyAocHctPnB3X25hbWUsIHApID09IDAgfHwKKyAgICAgICAg ICAgICh0X3ZlcmlmeXB3IChwdy0+cHdfbmFtZSwgcCkgPCAwICYmCisgICAgICAgICAgICBzdHJj bXAgKHhwYXNzd2QsIHB3LT5wd19wYXNzd2QpKQorI2Vsc2UgLyogQ0tfU1JQICovCisgICAgICAg ICAgICAvKiBUaGUgc3RyY21wIGRvZXMgbm90IGNhdGNoIG51bGwgcGFzc3dvcmRzISAqLworICAg ICAgICAgICAgKHB3ID09IE5VTEwpIHx8ICgqcHctPnB3X3Bhc3N3ZCA9PSAnXDAnKSB8fAorICAg ICAgICAgICAgc3RyY21wKHhwYXNzd2QsIHB3LT5wd19wYXNzd2QpCisjZW5kaWYgLyogQ0tfU1JQ ICovCisjZW5kaWYgLyogRlRQX0tFUkJFUk9TICovCisgICAgICAgICAgICApIHsKKyAgICAgICAg ICAgIGRlYnVnKEYxMDAsInp2cGFzcyBkZW5pZWQiLCIiLDApOworICAgICAgICAgICAgcHcgPSBO VUxMOworICAgICAgICAgICAgenZ1bmFtZVswXSA9IE5VTDsKKyAgICAgICAgICAgIHJldHVybigw KTsKKyAgICAgICAgfQorI2VuZGlmIC8qIENLX1BBTSAqLworICAgIH0KKworICAgIChWT0lEKSBz ZXRnaWQoKEdJRF9UKXB3LT5wd19naWQpOyAgIC8qIFNldCBncm91cCBJRCAqLworCisjaWZuZGVm IE5PSU5JVEdST1VQUworICAgIChWT0lEKSBpbml0Z3JvdXBzKHB3LT5wd19uYW1lLCBwdy0+cHdf Z2lkKTsKKyNlbmRpZiAvKiBOT0lOSVRHUk9VUFMgKi8KKworICAgIGxvZ2dlZF9pbiA9IDE7Cisg ICAgZGlyID0gcHctPnB3X2RpcjsKKworI2lmZGVmIENLV1RNUAorICAgIC8qIE9wZW4gd3RtcCBi ZWZvcmUgY2hyb290ICovCisgICAgaWYgKGNreHd0bXApIHsKKyAgICAgICAgc3ByaW50Zihja3N5 c2xpbmUsImlrc18lMDR4IiwgZ2V0cGlkKCkpOyAvKiBzYWZlICovCisgICAgICAgIGxvZ3d0bXAo Y2tzeXNsaW5lLCBwdy0+cHdfbmFtZSwKKyAgICAgICAgICAgICAgICAgY2xpZW50aG9zdCA/IGNs aWVudGhvc3QgOiAiKHVua25vd24gaG9zdCkiCisgICAgICAgICAgICAgICAgKTsKKyAgICAgICAg ZGVidWcoRjExMCwiV1RNUCBsb2dpbiIsY2tzeXNsaW5lLGxvZ2dlZF9pbik7CisgICAgfQorI2Vu ZGlmIC8qIENLV1RNUCAqLworLyoKKyAgRm9yIGFub255bW91cyB1c2Vycywgd2UgY2hyb290IHRv IHVzZXIgZnRwJ3MgaG9tZSBkaXJlY3RvcnkgdW5sZXNzCisgIHN0YXJ0ZWQgd2l0aCAtLWFub25y b290Onh4eCwgaW4gd2hpY2ggY2FzZSB3ZSBjaHJvb3QgdG8geHh4LiAgV2UgbXVzdAorICBpbW1l ZGlhdGVseSBjaGRpcigpIHRvIHRoZSBzYW1lIGRpcmVjdG9yeSB3ZSBjaHJvb3QoKSB0byBvciBl bHNlIHRoZQorICBvbGQgY3VycmVudCBkaXJlY3RvcnkgcmVtYWlucyBhY2Nlc3NpYmxlIGFzICIu IiBvdXRzaWRlIHRoZSBuZXcgcm9vdC4KKyovCisgICAgaWYgKGd1ZXN0KSB7CisgICAgICAgIGlm IChhbm9ucm9vdCkgICAgICAgICAgICAgICAgICAgLyogTm9uLWRlZmF1bHQgYW5vbnltb3VzIHJv b3QgKi8KKyAgICAgICAgICBkaXIgPSBhbm9ucm9vdDsKKyAgICAgICAgZWxzZQorICAgICAgICAg IG1ha2VzdHIoJmFub25yb290LGRpcik7CisgICAgICAgIGVycm5vID0gMDsKKyAgICAgICAgZGVi dWcoRjExMCwienZwYXNzIGFub24gY2hyb290IixkaXIsMCk7CisgICAgICAgIGlmIChjaHJvb3Qo ZGlyKSA8IDApIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMTEsInp2cGFzcyBhbm9uIGNocm9vdCBG QUlMRUQiLGRpcixlcnJubyk7CisgICAgICAgICAgICBnb3RvIGJhZDsKKyAgICAgICAgfQorICAg ICAgICBlcnJubyA9IDA7CisgICAgICAgIGlmIChjaGRpcigiLyIpIDwgMCkgeworICAgICAgICAg ICAgZGVidWcoRjExMSwienZwYXNzIGFub24gY2hkaXIgRkFJTEVEIixkaXIsZXJybm8pOworICAg ICAgICAgICAgZ290byBiYWQ7CisgICAgICAgIH0KKyAgICAgICAgZGVidWcoRjExMCwienZwYXNz IGFub24gY2hyb290L2NoZGlyIE9LIixkaXIsMCk7CisgICAgfSBlbHNlIGlmIChjaGRpcihkaXIp IDwgMCkgeyAgICAgICAgLyogTm90IGd1ZXN0ICovCisjaWZkZWYgQ09NTUVOVAorICAgICAgICBp ZiAoY2hkaXIoIi8iKSA8IDApIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMTAsIk5vbi1ndWVzdCBj aGRpciBGQUlMRUQiLGRpciwwKTsKKyAgICAgICAgICAgIGdvdG8gYmFkOworICAgICAgICB9IGVs c2UKKyAgICAgICAgICBwcmludGYoIj9ObyBkaXJlY3RvcnkhIExvZ2dpbmcgaW4gd2l0aCBob21l PS9cbiIpOworI2Vsc2UKKyAgICAgICAgZGVidWcoRjExMCwienZwYXNzIG5vbi1ndWVzdCBjaGRp ciBGQUlMRUQiLGRpciwwKTsKKyAgICAgICAgZ290byBiYWQ7ICAgICAgICAgICAgICAgICAgICAg ICAvKiBCZSBjb25zZXJ2YXRpdmUgYXQgZmlyc3QgKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisg ICAgfQorICAgIGRlYnVnKEYxMTAsInp2cGFzcyBub24tZ3Vlc3QgY2hkaXIgT0siLGRpciwwKTsK KyAgICBpZiAoc2V0dWlkKChVSURfVClwdy0+cHdfdWlkKSA8IDApIHsKKyAgICAgICAgZGVidWco RjEwMSwienZwYXNzIHNldHVpZCBGQUlMRUQiLCIiLHB3LT5wd191aWQpOworICAgICAgICBnb3Rv IGJhZDsKKyAgICB9CisgICAgZGVidWcoRjEwMSwienZwYXNzIHNldHVpZCBPSyIsIiIscHctPnB3 X3VpZCk7CisKKyAgICBndWVzdHBhc3NbMF0gPSAnXDAnOworICAgIGlmIChndWVzdCkgeworICAg ICAgICBleHRlcm4gaW50IGZuY2FjdDsKKyAgICAgICAgaXNndWVzdCA9IDE7CisgICAgICAgIGZu Y2FjdCA9IFhZRlhfUjsgICAgICAgICAgICAgICAgLyogRklMRSBDT0xMSVNJT04gPSBSRU5BTUUg Ki8KKyAgICAgICAgZGVidWcoRjExMCwiR1VFU1QgZm5jYWN0PVIiLHAsMCk7CisgICAgICAgIGxz ZXQoZ3Vlc3RwYXNzLCJhbm9ueW1vdXM6IiwxMCwzMik7CisgICAgICAgIGNrc3RybmNweSgmZ3Vl c3RwYXNzWzEwXSxwLEdVRVNUUEFTUy0xMCk7CisgICAgICAgIGhvbWUgPSAiLyI7CisgICAgICAg IHByaW50ZigiQW5vbnltb3VzIGxvZ2luLlxyXG4iKTsKKworI2lmZGVmIFNFVFBST0NUSVRMRQor CS8qIHByb2N0aXRsZSBkZWNsYXJlZCB3aGVyZT8gIE9idmlvdXNseSB0aGlzIGNvZGUgaXMgbmV2 ZXIgY29tcGlsZWQuICovCisgICAgICAgIHNwcmludGYocHJvY3RpdGxlLCAiJXM6IGFub255bW91 cy8lLipzIiwKKyAgICAgICAgICAgICAgICBjbGllbnRob3N0ID8gY2xpZW50aG9zdCA6ICIodW5r KSIsCisgICAgICAgICAgICAgICAgc2l6ZW9mKHByb2N0aXRsZSkgLSBzaXplb2YoY2xpZW50aG9z dCkgLQorICAgICAgICAgICAgICAgIHNpemVvZigiOiBhbm9ueW1vdXMvIiksIHApOworICAgICAg ICBzZXRwcm9jdGl0bGUocHJvY3RpdGxlKTsKKyNlbmRpZiAvKiBTRVRQUk9DVElUTEUgKi8KKwor I2lmZGVmIENLU1lTTE9HCisgICAgICAgIGlmIChja3hzeXNsb2cgJiYgY2t4bG9nZ2luZykgewor ICAgICAgICAgICAgc3lzbG9nKExPR19JTkZPLAorICAgICAgICAgICAgICAgICAgICJsb2dpbjog YW5vbnltb3VzICVzICVzIiwKKyAgICAgICAgICAgICAgICAgICBjbGllbnRob3N0ID8gY2xpZW50 aG9zdCA6ICIodW5rbm93biBob3N0KSIsCisgICAgICAgICAgICAgICAgICAgcAorICAgICAgICAg ICAgICAgICAgICk7CisgICAgICAgIH0KKyNlbmRpZiAvKiBDS1NZU0xPRyAqLworCisgICAgfSBl bHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVhbCB1c2VyICovCisgICAgICAg IGlzZ3Vlc3QgPSAwOworICAgICAgICBob21lID0gZGlyOworICAgICAgICBja3N0cm5jcHkoZ3Vl c3RwYXNzLHp2dW5hbWUsR1VFU1RQQVNTKTsKKworICAgICAgICBwcmludGYoIlVzZXIgJXMgbG9n Z2VkIGluLlxyXG4iLCBwdy0+cHdfbmFtZSk7CisjaWZkZWYgU0VUUFJPQ1RJVExFCisJLyogbm90 IHVzZWQgKi8KKyAgICAgICAgc3ByaW50Zihwcm9jdGl0bGUsICIlczogJXMiLAorICAgICAgICAg ICAgICAgIGNsaWVudGhvc3QgPyBjbGllbnRob3N0IDogIih1bmspIiwKKyAgICAgICAgICAgICAg ICBwdy0+cHdfbmFtZQorICAgICAgICAgICAgICAgICk7CisgICAgICAgIHNldHByb2N0aXRsZShw cm9jdGl0bGUpOworI2VuZGlmIC8qIFNFVFBST0NUSVRMRSAqLworCisjaWZkZWYgQ0tTWVNMT0cK KyAgICAgICAgaWYgKGNreHN5c2xvZyAmJiBja3hsb2dnaW5nKQorICAgICAgICAgIHN5c2xvZyhM T0dfSU5GTywgImxvZ2luOiAlcyAlcyIsCisgICAgICAgICAgICAgICAgIHB3LT5wd19uYW1lLAor ICAgICAgICAgICAgICAgICBjbGllbnRob3N0ID8gY2xpZW50aG9zdCA6ICIodW5rbm93biBob3N0 KSIKKyAgICAgICAgICAgICAgICAgKTsKKyNlbmRpZiAvKiBDS1NZU0xPRyAqLworICAgIH0KKyAg ICBja3N0cm5jcHkoenZob21lLGhvbWUsQ0tNQVhQQVRIKTsgICAvKiBTZXQgZW52aXJvbm1lbnQg dmFyaWFibGVzICovCisjaWZuZGVmIE5PUFVURU5WCisKKyAgICBja21ha21zZyh6ZW52dXNlcixa RU5WVVNFUiwiVVNFUj0iLHp2dW5hbWUsTlVMTCxOVUxMKTsKKyAgICBwdXRlbnYoKGNoYXIgKil6 ZW52dXNlcik7CisgICAgY2ttYWttc2coemVudmxvZ25hbWUsWkVOVkxPR05BTUUsIkxPR05BTUU9 Iix6dnVuYW1lLE5VTEwsTlVMTCk7CisgICAgcHV0ZW52KChjaGFyICopemVudmxvZ25hbWUpOwor ICAgIGNrbWFrbXNnKHplbnZob21lLFpFTlZIT01FLCJIT01FPSIsenZob21lLE5VTEwsTlVMTCk7 CisgICAgcHV0ZW52KChjaGFyICopemVudmhvbWUpOworI2VuZGlmIC8qIE5PUFVURU5WICovCisg ICAgLyogaG9tZGlyID0gKGNoYXIgKil6dmhvbWU7ICovCisgICAgY2tzdHJuY3B5KChjaGFyICop dWlkYnVmLChjaGFyICopenZ1bmFtZSw2NCk7CisgICAgKFZPSUQpIHVtYXNrKGRlZnVtYXNrKTsK KyNpZmRlZiBJS1NEQgorICAgIGlmIChpa2Rib3BlbikgeworICAgICAgICBjaGFyICogcDI7Cisg ICAgICAgIGludCBrOworICAgICAgICBleHRlcm4gY2hhciBkYnJlY1tdOworICAgICAgICBleHRl cm4gdW5zaWduZWQgbG9uZyBteWZsYWdzOworICAgICAgICBleHRlcm4gdW5zaWduZWQgaW50IG15 ZGJzbG90OworICAgICAgICBleHRlcm4gc3RydWN0IGlrc2RiZmxkIGRiZmxkW107CisjaWZkZWYg Q0tfQVVUSEVOVElDQVRJT04KKyAgICAgICAgZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbXlhbW9kZSwg bXlhdHlwZTsKKyNlbmRpZiAvKiBDS19BVVRIRU5USUNBVElPTiAqLworICAgICAgICBteWZsYWdz IHw9IERCRl9MT0dHRUQ7CisjaWZkZWYgREVCVUcKKwlpZiAoZGVibG9nKSB7CisJICAgIGRlYnVn KEYxMDEsInp2cGFzcyBndWVzdCIsIiIsZ3Vlc3QpOworCSAgICBkZWJ1ZyhGMTExLCJ6dnBhc3Mg enZ1bmFtZSIsenZ1bmFtZSwwKTsKKwkgICAgZGVidWcoRjExMCwienZwYXNzIGd1ZXN0cGFzcyIs Z3Vlc3RwYXNzLDApOworCSAgICBkZWJ1ZyhGMTEwLCJ6dnBhc3MgZGlyIixkaXIsMCk7CisJICAg IGRlYnVnKEYxMTAsInp2cGFzcyBob21lIixob21lLDApOworCSAgICBkZWJ1ZyhGMTEwLCJ6dnBh c3MgYW5vbnJvb3QiLGFub25yb290LDApOworCX0KKyNlbmRpZiAvKiBERUJVRyAqLworICAgICAg ICBwMiA9IGd1ZXN0ID8gZ3Vlc3RwYXNzIDogenZ1bmFtZTsKKyAgICAgICAgaWYgKGd1ZXN0KSB7 CisgICAgICAgICAgICBwMiA9IChjaGFyICopZ3Vlc3RwYXNzOworICAgICAgICAgICAgbXlmbGFn cyAmPSB+REJGX1VTRVI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwMiA9IChjaGFy ICopenZ1bmFtZTsKKyAgICAgICAgICAgIG15ZmxhZ3MgfD0gREJGX1VTRVI7CisgICAgICAgIH0K KyAgICAgICAgayA9IHN0cmxlbihwMik7CisgICAgICAgIHN0cm5jcHkoJmRicmVjW0RCX1VMRU5d LHVsb25ndG9oZXgoKHVuc2lnbmVkIGxvbmcpayw0KSw0KTsKKyAgICAgICAgbHNldCgmZGJyZWNb ZGJmbGRbZGJfVVNFUl0ub2ZmXSxwMiwxMDI0LDMyKTsKKyAgICAgICAgc3RybmNweSgmZGJyZWNb REJfRkxBR1NdLHVsb25ndG9oZXgobXlmbGFncyw0KSw0KTsKKyNpZmRlZiBDS19BVVRIRU5USUNB VElPTgorICAgICAgICBteWFtb2RlID0gY2tfdG5fYXV0aF92YWxpZCgpOworICAgICAgICBzdHJu Y3B5KCZkYnJlY1tEQl9BTU9ERV0sdWxvbmd0b2hleChteWFtb2RlLDQpLDQpOworICAgICAgICBt eWF0eXBlID0gY2tfdG5fYXV0aGVudGljYXRlZCgpOworICAgICAgICBzdHJuY3B5KCZkYnJlY1tE Ql9BVFlQRV0sdWxvbmd0b2hleChteWF0eXBlLDQpLDQpOworI2VuZGlmIC8qIENLX0FVVEhFTlRJ Q0FUSU9OICovCisgICAgICAgIGlmIChndWVzdCkgeworICAgICAgICAgICAgcDIgPSBkaXI7Cisg ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwMiA9IHpndGRpcigpOworICAgICAgICAgICAg aWYgKCFwMikgcDIgPSAiIjsKKyAgICAgICAgICAgIGlmICghKnAyKSBwMiA9IGhvbWU7CisgICAg ICAgIH0KKyAgICAgICAgc3RybmNweSgmZGJyZWNbREJfRExFTl0sCisgICAgICAgICAgICAgICAg dWxvbmd0b2hleCgodW5zaWduZWQgbG9uZylzdHJsZW4ocDIpLDQpLAorICAgICAgICAgICAgICAg IDQKKyAgICAgICAgICAgICAgICApOworICAgICAgICBsc2V0KCZkYnJlY1tkYmZsZFtkYl9ESVJd Lm9mZl0scDIsMTAyNCwzMik7CisgICAgICAgIHVwZHNsb3QobXlkYnNsb3QpOworICAgIH0KKyNl bmRpZiAvKiBJS1NEQiAqLworICAgIHJldHVybigxKTsKKworYmFkOiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIENvbW1vbiBmYWlsdXJlIGV4aXQgKi8KKyAgICB6dnVuYW1l WzBdID0gTlVMOworICAgIHp2bG9nb3V0KCk7CisgICAgcmV0dXJuKDApOworfQorI2VuZGlmIC8q IENLX0xPR0lOICovCisKKy8qIEJ1Z2d5IFhlbml4IDIuMy40IGNjIG5lZWRzIHRoaXMgbGluZSBh ZnRlciB0aGUgZW5kaWYgKi8KCmRpZmYgLS1naXQgYS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tl cm1pdC05LjAuMzAyL2NrdWlucy50eHQgYi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05 LjAuMzAyL2NrdWlucy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhj ZmVkYgotLS0gL2Rldi9udWxsCisrKyBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTku MC4zMDIvY2t1aW5zLnR4dApAQCAtMCwwICsxLDM1ODggQEAKKworICAgWzFdVGhlIENvbHVtYmlh IENyb3duIFRoZSBLZXJtaXQgUHJvamVjdCB8IENvbHVtYmlhIFVuaXZlcnNpdHkKKyAgIDYxMiBX ZXN0IDExNXRoIFN0cmVldCwgTmV3IFlvcmsgTlkgMTAwMjUgVVNBIG8gWzJda2VybWl0QGNvbHVt YmlhLmVkdQorICAgLi4uc2luY2UgMTk4MQorICAgWzNdSG9tZSBbNF1LZXJtaXQgOTUgWzVdQy1L ZXJtaXQgWzZdU2NyaXB0cyBbN11DdXJyZW50IFs4XU5ldyBbOV1GQVEKKyAgIFsxMF1TdXBwb3J0 CisKK0MtS2VybWl0IDkuMCBJbnN0YWxsYXRpb24gSW5zdHJ1Y3Rpb25zIGFuZCBPcHRpb25zIGZv ciBVbml4CisKKyAgIFsgWzExXUNvbnRlbnRzIF0gWyBbMTJdQy1LZXJtaXQgXSBbIFsxM11LZXJt aXQgSG9tZSBdCisKKyAgIEZyYW5rIGRhIENydXoKKyAgIFRoZSBLZXJtaXQgUHJvamVjdAorICAg Q29sdW1iaWEgVW5pdmVyc2l0eQorCisgICAgICBBcyBvZiBDLUtlcm1pdCB2ZXJzaW9uOiA5LjAu MzAyLCAyMCBBdWd1c3QgMjAxMQorICAgICAgVGhpcyBmaWxlIGxhc3QgdXBkYXRlZDogU3VuIEF1 ZyAyMSAxMjowODoyOSAyMDExIChOZXcgWW9yayBDaXR5CisgICB0aW1lKQorCisgICBJRiBZT1Ug QVJFIFJFQURJTkcgQSBQTEFJTi1URVhUIHZlcnNpb24gb2YgdGhpcyBkb2N1bWVudCwgaXQgaXMg YQorICAgcGxhaW4tdGV4dCBjb3B5IG9mIGEgV2ViIHBhZ2UuIFlvdSBjYW4gdmlzaXQgdGhlIG9y aWdpbmFsIChhbmQgcG9zc2libHkKKyAgIG1vcmUgdXAtdG8tZGF0ZSkgV2ViIHBhZ2UgaGVyZToK KworWzE0XWh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbAorCitDT05U RU5UUworCisgICBbMTVdT1ZFUlZJRVcKKyAgICAxLiBbMTZdSU5URVJORVQgUVVJQ0sgU1RBUlQK KyAgICAyLiBbMTddSU5TVEFMTElORyBGUk9NIFBBQ0tBR0VTCisgICAgMy4gWzE4XUlOU1RBTExJ TkcgUFJFQlVJTFQgQklOQVJJRVMKKyAgICA0LiBbMTldQlVJTERJTkcgRlJPTSBTT1VSQ0UgQ09E RQorICAgIDUuIFsyMF1JTlNUQUxMSU5HIFRIRSBLRVJNSVQgRklMRVMKKyAgICA2LiBbMjFdSU5T VEFMTElORyBVTklYIEMtS0VSTUlUIEZST00gRE9TLUZPUk1BVCBESVNLRVRURVMKKyAgICA3LiBb MjJdQ0hFQ0tJTkcgVEhFIFJFU1VMVFMKKyAgICA4LiBbMjNdUkVEVUNJTkcgVEhFIFNJWkUgT0Yg VEhFIEVYRUNVVEFCTEUgUFJPR1JBTSBJTUFHRQorICAgIDkuIFsyNF1VTklYIFZFUlNJT05TCisg ICAxMC4gWzI1XURJQUxJTkcgT1VUIEFORCBDT09SRElOQVRJTkcgV0lUSCBVVUNQCisgICAxMS4g WzI2XVJVTk5JTkcgVU5JWCBDLUtFUk1JVCBTRVRVSUQgT1IgU0VUR0lECisgICAxMi4gWzI3XUNP TkZJR1VSSU5HIFVOSVggV09SS1NUQVRJT05TCisgICAxMy4gWzI4XUJJWkFSUkUgQkVIQVZJT1Ig QVQgUlVOVElNRQorICAgMTQuIFsyOV1DUkFTSEVTIEFORCBDT1JFIERVTVBTCisgICAxNS4gWzMw XVNZU0xPR0dJTkcKKyAgIDE2LiBbMzFdQlVJTERJTkcgU0VDVVJFIFZFUlNJT05TIE9GIEMtS0VS TUlUIDkuMAorICAgMTcuIFszMl1JTlNUQUxMSU5HIEMtS0VSTUlUIEFTIEFOIFNTSCBTRVJWRVIg U1VCU1lTVEVNCisKK09WRVJWSUVXCisKKyAgIFsgWzMzXVRvcCBdIFsgWzM0XUNvbnRlbnRzIF0g WyBbMzVdTmV4dCBdCisKKyAgICAgV0FSTklORzogVGhpcyBkb2N1bWVudCBjb250YWlucyBub3Rl cyB0aGF0IGhhdmUgYmVlbiBhY2N1bXVsYXRpbmcKKyAgICAgc2luY2UgdGhlIG1pZCAxOTgwcy4g TWFueSBvZiB0aGUgcHJvZHVjdHMgYW5kIFVuaXggdmVyc2lvbnMKKyAgICAgbWVudGlvbmVkIGhl cmUgaGF2ZSBub3QgYmVlbiBoZWFyZCBvZiBpbiBhIGxvbmcgd2hpbGUsIGJ1dCB0aGF0IGRvZXMK KyAgICAgbm90IG5lY2Vzc2FyaWx5IG1lYW4gdGhleSBhcmUgbm90IHN0aWxsIHJ1bm5pbmcgaW4g c29tZSBvYnNjdXJlCisgICAgIG5vb2suCisKKyAgIFRoaXMgZmlsZSBjb250YWlucyBVbml4LXNw ZWNpZmljIGluZm9ybWF0aW9uLiBBIGxvdCBvZiBpdC4gVW5saWtlIG1vc3QKKyAgIG90aGVyIHBh Y2thZ2VzLCBDLUtlcm1pdCB0cmllcyB2ZXJ5IGhhcmQgdG8gYmUgcG9ydGFibGUgdG8gZXZlcnkg VW5peAorICAgdmFyaWV0eSAoYW5kIGV2ZXJ5IHJlbGVhc2Ugb2YgZWFjaCBvbmUpIGtub3duIHRv IGV4aXN0LCBpbmNsdWRpbmcgbWFueQorICAgdGhhdCBhcmUgcXVpdGUgb2xkLCBhcyB3ZWxsIGFz IHRvIG90aGVyIHBsYXRmb3JtcyBsaWtlIFZNUywgQU9TL1ZTLAorICAgVk9TLCBPUy05LCB0aGUg QmVCb3gsIHRoZSBBbWlnYSwgZXRjLgorCisgICBTaW5jZSBDLUtlcm1pdCBnZXRzIHNvIGRlZXBs eSBpbnRvIHRoZSBmaWxlIHN5c3RlbSwgaS9vIHN5c3RlbSwgYW5kCisgICBvdGhlciBhcmVhcyB0 aGF0IGRpZmZlciByYWRpY2FsbHkgZnJvbSBvbmUgVW5peCBwbGF0Zm9ybSB0byB0aGUgbmV4dCwK KyAgIHRoaXMgbWVhbnMgdGhhdCBhIGxvdCBjYW4gZ28gd3Jvbmcgd2hlbiB5b3UgdHJ5IHRvIGlu c3RhbGwgQy1LZXJtaXQgb24KKyAgIChmb3IgZXhhbXBsZSkgYSBuZXcgcmVsZWFzZSBvZiBhIHBh cnRpY3VsYXIgdmFyaWV0eSBvZiBVbml4LCBpbiB3aGljaAorICAgY2VydGFpbiB0aGluZ3MgbWln aHQgaGF2ZSBjaGFuZ2VkIHRoYXQgQy1LZXJtaXQgZGVwZW5kZWQgdXBvbi4KKworICAgVGhpcyBm aWxlIGNvbmNlbnRyYXRlcyBvbiBpbnN0YWxsYXRpb24uIEZvciBhIGRlc2NyaXB0aW9uIG9mIGdl bmVyYWwKKyAgIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgQy1LZXJtaXQsIHBsZWFzZSByZWFk IHRoZSBbMzZdQ29uZmlndXJhdGlvbnMKKyAgIE9wdGlvbnMgZG9jdW1lbnQuIEZvciB0cm91Ymxl c2hvb3RpbmcgYWZ0ZXIgaW5zdGFsbGF0aW9uLCBzZWUgdGhlCisgICBbMzddR2VuZXJhbCBIaW50 cyBhbmQgVGlwcyBhbmQgWzM4XVVuaXgtU3BlY2lmaWMgSGludHMgYW5kIFRpcHMKKyAgIGRvY3Vt ZW50cy4gVGhlIGxhdHRlciwgaW4gcGFydGljdWxhciwgY29udGFpbnMgbG90cyBvZiBpbmZvcm1h dGlvbiBvbgorICAgbG90cyBvZiBzcGVjaWZpYyBVbml4IHBsYXRmb3Jtcy4gSWYgeW91IHdhbnQg dG8gd29yayBvbiB0aGUgc291cmNlCisgICBjb2RlLCBzZWUgdGhlIFszOV1DLUtlcm1pdCBQcm9n cmFtIExvZ2ljIE1hbnVhbAorCisgICBZb3UgbWF5IGluc3RhbGwgQy1LZXJtaXQ6CisKKyAgICAg KiBGcm9tIGFuICJbNDBdaW5zdGFsbCBwYWNrYWdlIiwgaWYgb25lIGlzIGF2YWlsYWJsZS4KKyAg ICAgKiBBcyBhIFs0MV1wcmVidWlsdCBiaW5hcnksIGlmIGF2YWlsYWJsZSwgcGx1cyBhY2NvbXBh bnlpbmcgdGV4dAorICAgICAgIGZpbGVzLgorICAgICAqIEJ5IGJ1aWxkaW5nIGZyb20gWzQyXXNv dXJjZSBjb2RlLgorCisxLiBJTlRFUk5FVCBRVUlDSyBTVEFSVAorCisgICBbIFs0M11Ub3AgXSBb IFs0NF1Db250ZW50cyBdIFsgWzQ1XU5leHQgXSBbIFs0Nl1QcmV2aW91cyBdCisKKyAgIElmIHlv dXIgVW5peCBjb21wdXRlciBpcyBvbiB0aGUgSW50ZXJuZXQgYW5kIGl0IGhhcyBhIEMgY29tcGls ZXIsCisgICBoZXJlJ3MgaG93IHRvIGRvd25sb2FkLCBidWlsZCwgYW5kIGluc3RhbGwgQy1LZXJt aXQgZGlyZWN0bHkgZnJvbSB0aGUKKyAgICJ0YXJiYWxscyIgb3IgWmlwIGFyY2hpdmVzOgorCisg ICAgMS4gTWFrZSBhIGZyZXNoIGRpcmVjdG9yeSBhbmQgY2QgdG8gaXQuCisgICAgMi4gRG93bmxv YWQgdGhlIEMtS2VybWl0IHNvdXJjZSBjb2RlOgorICAgICAgIFs0N11mdHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9hcmNoaXZlcy9ja3UyMTEudGFyLlogKGNvbXByZXNzCisgICAgICAgZm9y bWF0KSBvciBbNDhdZnRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvYXJjaGl2ZXMvY2t1MjEx LnRhci5negorICAgICAgIChndW56aXAgZm9ybWF0KS4gSWYgdGhvc2UgbGlua3MgZG9uJ3Qgd29y aywgRlRQIHRyYW5zZmVycyBhcmUgYmVpbmcKKyAgICAgICBibG9ja2VkOyB0cnkgdGhlc2UgSFRU UCBsaW5rcyBpbnN0ZWFkOgorICAgICAgIFs0OV1odHRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9m dHAvYXJjaGl2ZXMvY2t1MjExLnRhci5aIChjb21wcmVzcworICAgICAgIGZvcm1hdCkgb3IKKyAg ICAgICBbNTBdaHR0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUvZnRwL2FyY2hpdmVzL2NrdTIxMS50 YXIuZ3ogKGd1bnppcAorICAgICAgIGZvcm1hdCkuCisgICAgMy4gVW5jb21wcmVzcyB0aGUgY29t cHJlc3NlZCB0YXIgZmlsZSB3aXRoICJ1bmNvbXByZXNzIiBvciAiZ3VuemlwIiwKKyAgICAgICBh Y2NvcmRpbmcgdG8gd2hpY2ggdHlwZSBvZiBjb21wcmVzc2VkIGZpbGUgeW91IGRvd25sb2FkZWQu IChJZiB5b3UKKyAgICAgICBkb24ndCB1bmRlcnN0YW5kIHRoaXMsIHlvdSBjb3VsZCBkb3dubG9h ZCBhIChtdWNoIGxhcmdlcikKKyAgICAgICB1bmNvbXByZXNzZWQgdGFyIGFyY2hpdmUgZGlyZWN0 bHk6CisgICAgICAgWzUxXWZ0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2FyY2hpdmVzL2Nr dTIxMS50YXIgb3IKKyAgICAgICBbNTJdaHR0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUvZnRwL2Fy Y2hpdmVzL2NrdTIxMS50YXIKKyAgICA0LiBOb3cgdHlwZSAidGFyIHh2ZiBja3UyMTEudGFyIiB0 byB1bnBhY2sgdGhlIGluZGl2aWR1YWwgZmlsZXMgZnJvbQorICAgICAgIHRoZSB0YXIgYXJjaGl2 ZS4KKyAgICA1LiBUeXBlICJybSBja3UyMTEudGFyIiB0byBnZXQgcmlkIG9mIHRoZSB0YXIgYXJj aGl2ZSwgd2hpY2ggaXMgbm8KKyAgICAgICBsb25nZXIgbmVlZGVkLgorICAgIDYuIFJlYWQgdGhl IGNvbW1lbnRzIGF0IHRoZSB0b3Agb2YgdGhlIG1ha2VmaWxlIHRvIGZpbmQgb3V0IHdoaWNoCisg ICAgICAgdGFyZ2V0IHRvIHVzZSBhbmQgdGhlbiB0eXBlIHRoZSBhcHByb3ByaWF0ZSAibWFrZSIg Y29tbWFuZCwgc3VjaCBhcworICAgICAgICJtYWtlIGxpbnV4IiwgIm1ha2Ugc29sYXJpczgiLCBl dGMuCisgICAgNy4gVGhpcyBwcm9kdWNlcyBhIGJpbmFyeSBpbiB5b3VyIGN1cnJlbnQgZGlyZWN0 b3J5IGNhbGxlZCAid2VybWl0Ii4KKyAgICAgICBTdGFydCBpdCBieSB0eXBpbmcgIi4vd2VybWl0 IiBhbmQgWzUzXXRyeSBpdCBvdXQgdG8gbWFrZSBzdXJlIGl0CisgICAgICAgd29ya3MuIFRoZW4g cmVhZCBbNTRdU2VjdGlvbiA1IGZvciBob3cgdG8gaW5zdGFsbCBpdCwgb3Igc2ltcGx5CisgICAg ICAgY29weSB0aGUgd2VybWl0IGJpbmFyeSB0byB0aGUgZGVzaXJlZCBwdWJsaWMgZGlyZWN0b3J5 LCByZW5hbWUgaXQKKyAgICAgICB0byBrZXJtaXQsIGFuZCBnaXZlIGl0IHRoZSBuZWVkZWQgcGVy bWlzc2lvbnMgKGFuZCwgaWYgaXQgaXMgZ29pbmcKKyAgICAgICB0byBiZSB1c2VkIHRvIGRpYWwg b3V0LCBnaXZlIGl0IHRoZSBzYW1lIGdyb3VwIGFuZCBvd25lciBhbmQKKyAgICAgICBwZXJtaXNz aW9ucyBhcyB0aGUgY3UsIHRpcCwgb3IgbWluaWNvbSBwcm9ncmFtKS4KKworICAgRm9yIHNlY3Vy ZSBpbnN0YWxsYXRpb25zLCBzZWUgWzU1XVNlY3Rpb25zIDUgYW5kIFs1Nl0xNi4KKworMi4gSU5T VEFMTElORyBGUk9NIFBBQ0tBR0VTCisKKyAgIFsgWzU3XVRvcCBdIFsgWzU4XUNvbnRlbnRzIF0g WyBbNTldTmV4dCBdIFsgWzYwXVByZXZpb3VzIF0KKworICAgVmFyaW91cyBVbml4IHZhcmlldGll cyAtLSBMaW51eCwgU29sYXJpcywgQUlYLCBldGMgLS0gbm93IGluY29ycG9yYXRlCisgICB0aGUg aWRlYSBvZiAiaW5zdGFsbCBwYWNrYWdlcyIsIGFuZCBtYW55IHVzZXJzIGV4cGVjdCB0byBmaW5k IGFsbCBuZXcKKyAgIGFwcGxpY2F0aW9ucyBpbiB0aGlzIGZvcm1hdC4gQSBzZWxlY3Rpb24gb2Yg aW5zdGFsbCBwYWNrYWdlcyBtaWdodCBiZQorICAgYXZhaWxhYmxlIGZvciBhbnkgZ2l2ZW4gcmVs ZWFzZSBvZiBDLUtlcm1pdCwgYnV0IHRoZXJlIGlzIGEgdHJhZGVvZmYKKyAgIGJldHdlZW4gY29u dmVuaWVuY2UgYW5kIHNhZmV0eS4gVW5peCBwcmVzZW50cyBzZXZlcmFsIG5vdGFibGUgcHJvYmxl bXMKKyAgIHRvIHRoZSBidWlsZGVyIG9mIGluc3RhbGwgcGFja2FnZXM6CisKKyAgICBhLiBTaW5j ZSBDLUtlcm1pdCBpcyBwb3J0YWJsZSB0byBtYW55IG5vbi1Vbml4IHBsYXRmb3JtcyAoVk1TLCBW T1MsCisgICAgICAgQU9TL1ZTLCBldGMpLCBzb21lIG9mIHRoZSBmaWxlcyBpbiB0aGUgQy1LZXJt aXQgZGlzdHJpYnV0aW9uIGRvIG5vdAorICAgICAgIGZpdCBpbnRvIHRoZSBVbml4IGFwcGxpY2F0 aW9uIG1vZGVsLiBJbiBwYXJ0aWN1bGFyLCBDLUtlcm1pdAorICAgICAgIGluY2x1ZGVzIHNvbWUg cGxhaW4gdGV4dCBmaWxlcyAoZGVzY3JpYmVkIGluIFs2MV1TZWN0aW9uIDUpIGFuZAorICAgICAg IFVuaXggaGFzIG5vIHN0YW5kYXJkIHBsYWNlIHRvIHB1dCBzdWNoIGZpbGVzLiBUeXBpY2FsIFVu aXggcGFja2FnZQorICAgICAgIG1hbmFnZXJzIGRvIG5vdCBhbGxvdyBmb3IgdGhlbS4gV2hlcmUg c2hvdWxkIHRoZXkgZ28sIGFuZCBob3cgd2lsbAorICAgICAgIHRoZSB1c2VyIGtub3cgd2hlcmUg dG8gZmluZCB0aGVtPworICAgIGIuIEluc3RhbGxhdGlvbiBvZiBhbnkgcHJvZ3JhbSB0aGF0IHdp bGwgYmUgdXNlZCB0byBtYWtlIG1vZGVtIGNhbGxzCisgICAgICAgcmVxdWlyZXMgc29tZSBpbXBv cnRhbnQgZGVjaXNpb25zIGZyb20gdGhlIGluc3RhbGxlciByZWdhcmRpbmcKKyAgICAgICBzZWN1 cml0eSBhbmQgcHJpdmlsZWdlLgorCisgICBJdGVtIChiKSBpcyBkaXNjdXNzZWQgYXQgbGVuZ3Ro IGluIFs2Ml1TZWN0aW9ucyAxMCBhbmQgWzYzXTExIG9mIHRoaXMKKyAgIGRvY3VtZW50LCBidXQg dGhlIHBhY2thZ2UtcmVsYXRlZCBhc3BlY3RzIGFyZSBhbHNvIGdpdmVuIGhlcmUuIFRoZQorICAg YmFzaWMgcHJvYmxlbSBpcyB0aGF0IFVuaXggZGlhbG91dCBkZXZpY2VzIGFuZCB0aGUgVVVDUCAi bG9jayBmaWxlcyIKKyAgIHRoYXQgcmVndWxhdGUgY29udGVudGlvbiBmb3IgdGhlbSAoZGVzY3Jp YmVkIGluIFs2NF1TZWN0aW9uIDEwKSBhcmUKKyAgIHVzdWFsbHkgcHJvdGVjdGVkIGFnYWluc3Qg IndvcmxkIi4gVGhlcmVmb3JlLCB0aGUgaW5zdGFsbCBwcm9jZWR1cmUKKyAgIG11c3QgZWl0aGVy IHJ1biBhcyByb290IGluIG9yZGVyIHRvIGdpdmUgdGhlIEtlcm1pdCBiaW5hcnkgdGhlIHJlcXVp cmVkCisgICBwZXJtaXNzaW9ucywgZ3JvdXAsIGFuZC9vciBvd25lciwgb3IgZWxzZSB0aGUgZGlh bG91dCBkZXZpY2VzIGFuZAorICAgYXNzb2NpYXRlZCBkaXJlY3RvcmllcyBtdXN0IGJlIG9wZW4g Zm9yIGdyb3VwIG9yIHdvcmxkIHJlYWRpbmcgYW5kCisgICB3cml0aW5nLiBPdGhlcndpc2UsIHRo ZSBLZXJtaXQgcHJvZ3JhbSBqdXN0IGluc3RhbGxlZCBXSUxMIE5PVCBXT1JLIGZvcgorICAgZGlh bGluZyBvdXQuCisKKyAgIFRodXMsIGEgd2VsbC1jcmFmdGVkIGluc3RhbGxhdGlvbiBwcm9jZWR1 cmUgc2hvdWxkIHByZXNlbnQgdGhlIG9wdGlvbnMKKyAgIGFuZCBhbGxvdyB0aGUgaW5zdGFsbGVy IHRvIGNob29zZSB0aGUgbWV0aG9kLCBpZiBhbnksIGZvciByZWd1bGF0aW5nCisgICBhY2Nlc3Mg dG8gdGhlIGRpYWxvdXQgZGV2aWNlczoKKworICAgIGEuIENoZWNrIHRoZSBwZXJtaXNzaW9ucyBv ZiB0aGUgbG9ja2ZpbGUgZGlyZWN0b3J5IGFuZCB0aGUgZGlhbG91dAorICAgICAgIGRldmljZXMu IElmIHRoZXkgZG8gbm90IGFsbG93IGdyb3VwIG9yIHdvcmxkIFIvVyBhY2Nlc3MsIHRoZW46Cisg ICAgYi4gIllvdXIgVVVDUCBsb2NrZmlsZSBkaXJlY3RvcnkgYW5kL29yIGRpYWxvdXQgZGV2aWNl cyByZXF1aXJlCisgICAgICAgcHJpdmlsZWdlIHRvIGFjY2Vzcy4gWW91IG11c3QgZWl0aGVyIGNo YW5nZSB0aGVpciBwZXJtaXNzaW9ucyBvcgorICAgICAgIGluc3RhbGwgS2VybWl0IHdpdGggcHJp dmlsZWdlcy4iCisgICAgYy4gIklmIHlvdSB3aXNoIHRvIGluc3RhbGwgS2VybWl0IHdpdGggcHJp dmlsZWdlcywgaXQgd2lsbCBiZSBnaXZlbgorICAgICAgIHRoZSBzYW1lIG93bmVyLCBncm91cCwg YW5kIHBlcm1pc3Npb25zIGFzIHRoZSBjdSBwcm9ncmFtIHNvIGl0IGNhbgorICAgICAgIHVzZSB0 aGUgZGlhbG91dCBkZXZpY2VzLiIgKFRoaXMgaXMgaW5jcmVhc2luZ2x5IHByb2JsZW1hdGljIGFz IHNvbWUKKyAgICAgICBuZXdlciBVbml4IHN5c3RlbXMgbGlrZSBNYWMgT1MgWCBkb24ndCBoYXZl IGEgY3UgcHJvZ3JhbSwgb3IgZXZlbiBhCisgICAgICAgc2VyaWFsIHBvcnQhKQorICAgIGQuIElm IHRoZXkgY2hvb3NlIChjKSBidXQgdGhlIHVzZXIgaXMgbm90IHJvb3QsIGdpdmUgYSBtZXNzYWdl IHRoYXQKKyAgICAgICB0aGUgaW5zdGFsbCBwcm9jZWR1cmUgY2FuIGJlIHJ1biBvbmx5IGJ5IHJv b3QgYW5kIHRoZW4gcXVpdC4KKworICAgSXQgc2hvdWxkIGdvIHdpdGhvdXQgc2F5aW5nLCBvZiBj b3Vyc2UsIHRoYXQgYW55IGJpbmFyaWVzIHRoYXQgYXJlIHRvCisgICBiZSBpbmNsdWRlZCBpbiBh biBpbnN0YWxsIHBhY2thZ2Ugc2hvdWxkIGJlIGJ1aWx0IGZyZXNoIG9uIHRoZSBleGFjdAorICAg cGxhdGZvcm0gKGUuZy4gUmVkIEhhdCA4LjAgb24gSW50ZWwpIGZvciB3aGljaCB0aGUgcGFja2Fn ZSBpcyB0YXJnZXRlZDsKKyAgIHByZWJ1aWx0IGJpbmFyaWVzIChbNjVdbmV4dCBzZWN0aW9uKSBm cm9tIG90aGVyIHNpdGVzIGFyZSBsaWtlbHkgdG8KKyAgIGhhdmUgbGlicmFyeSBtaXNtYXRjaGVz LiBbNjZdQ0xJQ0sgSEVSRSBmb3IgbW9yZSBhYm91dCBidWlsZGluZworICAgQy1LZXJtaXQgaW5z dGFsbCBwYWNrYWdlcy4KKworICAgVGhlIEtlcm1pdCBQcm9qZWN0IGRvZXMgbm90IGhhdmUgdGhl IHJlc291cmNlcyBvciB0aGUgZXhwZXJ0aXNlIHRvIG1ha2UKKyAgIGluc3RhbGwgcGFja2FnZXMg Zm9yIGV2ZXJ5IHBsYXRmb3JtLiBNb3N0IGluc3RhbGwgcGFja2FnZXMsIHRoZXJlZm9yZSwKKyAg IGFyZSBjb250cmlidXRlZCBieSBvdGhlcnMsIGFuZCB0aGV5IGRvIG5vdCBuZWNlc3NhcmlseSBm b2xsb3cgdGhlCisgICBndWlkZWxpbmVzIGdpdmVuIGFib3ZlLiBQYXkgYXR0ZW50aW9uIHRvIHdo YXQgdGhleSBkby4KKworICAgSWYgeW91IGFyZSBhbiBlbmQgdXNlciB3aG8gaGFzIG9idGFpbmVk IGEgQy1LZXJtaXQgaW5zdGFsbCBwYWNrYWdlIGZvcgorICAgYSBwYXJ0aWN1bGFyIHBsYXRmb3Jt LCB5b3Ugc2hvdWxkIGJlIGF3YXJlIHRoYXQgc29tZSBhZGRpdGlvbmFsIHN0ZXBzCisgICBtaWdo dCBuZWVkZWQgaWYgeW91IHdhbnQgdG8gdXNlIEtlcm1pdCB0byBkaWFsIG91dC4gUmVhZCBbNjdd U2VjdGlvbiAxMAorICAgZm9yIGRldGFpbHMuCisKKzMuIElOU1RBTExJTkcgUFJFQlVJTFQgQklO QVJJRVMKKworICAgWyBbNjhdVG9wIF0gWyBbNjldQ29udGVudHMgXSBbIFs3MF1OZXh0IF0gWyBb NzFdUHJldmlvdXMgXQorCisgICBIdW5kcmVkcyBvZiBwcmVidWlsdCBDLUtlcm1pdCBiaW5hcmll cyBhcmUgYXZhaWxhYmxlIG9uIHRoZSBDRFJPTSBpbgorICAgdGhlIEJJTkFSWSB0cmVlIFtOT1RF OiBUaGUgQy1LZXJtaXQgQ0RST00gaXMgc3RpbGwgZm9yIHZlcnNpb24gNy4wXSwKKyAgIGFuZCBh dCBvdXIgZnRwIHNpdGUgaW4gdGhlIFs3Ml1rZXJtaXQvYmluIGFyZWEgKHdpdGggbmFtZXMgc3Rh cnRpbmcKKyAgIHdpdGggImNrIiksIGFsc28gYWNjZXNzaWJsZSBvbiB0aGUgWzczXUMtS2VybWl0 IHdlYnNpdGUuIFRvIGluc3RhbGwgYQorICAgcHJlYnVpbHQgYmluYXJ5OgorCisgICAgYS4gUmVu YW1lIHRoZSBiaW5hcnkgdG8gIndlcm1pdCIuCisgICAgYi4gTWFrZSBzdXJlIGl0IHdvcmtzOyBz b21lIHRlc3RzIGFyZSBzdWdnZXN0ZWQgaW4gWzc0XVNlY3Rpb24gNy4KKyAgICBjLiBGb2xsb3cg c3RlcHMgKGIpIHRocm91Z2ggKGUpIGluIFs3NV1TZWN0aW9uIDQuCisgICAgZC4gSW5zdGFsbCBy ZWxhdGVkIGZpbGVzIGFzIGRlc2NyaWJlZCBpbiBbNzZdU2VjdGlvbiA1LgorCisgICBCdXQgZmly c3QuLi4gUGxlYXNlIGhlZWQgdGhlIGZvbGxvd2luZyBjYXV0aW9uczoKKworICAgIGEuIElmIHlv dSBwaWNrIHRoZSB3cm9uZyBiaW5hcnksIGl0IHdvbid0IHdvcmsgKG9yIHdvcnNlKS4KKyAgICBi LiBFdmVuIHdoZW4geW91IHBpY2sgdGhlIGFwcHJvcHJpYXRlIGJpbmFyeSwgaXQgc3RpbGwgbWln aHQgbm90IHdvcmsKKyAgICAgICBkdWUgdG8gc2hhcmVkLWxpYnJhcnkgbWlzbWF0Y2hlcywgZXRj LiAoc2VlIFs3N11TZWN0aW9uIDQuMCkuCisgICAgYy4gRG9uJ3QgZXhwZWN0IGEgYmluYXJ5IGJ1 aWx0IG9uIG9yIGZvciB2ZXJzaW9uIG4gb2YgeW91ciBPUyB0byB3b3JrCisgICAgICAgb24gdmVy c2lvbiBuIC0geCAod2hlcmUgeCA+IDApLiBIb3dldmVyLCBpdCBpcyBzdXBwb3NlZCB0byBiZSBz YWZlCisgICAgICAgdG8gcnVuIGEgYmluYXJ5IGJ1aWx0IG9uIChvciBmb3IpIGFuIG9sZGVyIE9T IHJlbGVhc2Ugb24gYSBuZXdlcgorICAgICAgIG9uZSAoYnV0IGlzIFs3OF1pbmNyZWFzaW5nbHkg bGVzcyBzbyBhcyB0aW1lLWhvbm9yZWQgcHJpbmNpcGxlcyBvZgorICAgICAgIHN0YWJpbGl0eSBh bmQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgZ28gZmFkaW5nIGludG8gb2JzY3VyaXR5KS4KKwor ICAgVGhlcmVmb3JlLCBpdCBpcyBhbHdheXMgYmV0dGVyIHRvIGJ1aWxkIHlvdXIgb3duIGJpbmFy eSBmcm9tIHNvdXJjZQorICAgY29kZSAoWzc5XW5leHQgc2VjdGlvbikgaWYgeW91IGNhbi4gQnV0 IHNpbmNlIGl0IGlzIGluY3JlYXNpbmdseSBjb21tb24KKyAgIGZvciBVbml4IHN5c3RlbXMgKG5v dCB0byBtZW50aW9uIFZNUyBhbmQgb3RoZXIgT1MncykgdG8gYmUgZGVsaXZlcmVkCisgICB3aXRo b3V0IEMgY29tcGlsZXJzLCBpdCBpcyBzb21ldGltZXMgbm90IHBvc3NpYmxlLiBJbiBzdWNoIGNh c2VzLCB0cnkKKyAgIHRoZSBtb3N0IGFwcHJvcHJpYXRlIHByZWJ1aWx0IGJpbmFyeSBvciBiaW5h cmllcywgYW5kIGlmIG5vbmUgb2YgdGhlbQorICAgd29yaywgWzgwXWNvbnRhY3QgdXMgYW5kIHdl J2xsIHNlZSB3aGF0IHdlIGNhbiBkbyB0byBoZWxwLgorCis0LiBCVUlMRElORyBGUk9NIFNPVVJD RSBDT0RFCisKKyAgIFsgWzgxXVRvcCBdIFsgWzgyXUNvbnRlbnRzIF0gWyBbODNdTmV4dCBdIFsg Wzg0XVByZXZpb3VzIF0KKworICAgQWxzbyBzZWU6IFs4NV1TZWN0aW9uIDggYW5kIFs4Nl1TZWN0 aW9uIDkuCisKKyAgIEMtS2VybWl0IGlzIGRlc2lnbmVkIHRvIGJlIGJ1aWx0IGFuZCB1c2VkIG9u IGFzIG1hbnkgcGxhdGZvcm1zIGFzCisgICBwb3NzaWJsZTogVW5peCBhbmQgbm9uLVVuaXgsIG9s ZCBhbmQgbmV3IChhbmQgYW5jaWVudCksIEFOU0kgQyBhbmQgSyZSLgorICAgVGhlIFVuaXggdmVy c2lvbiBkb2VzIG5vdCB1c2Ugb3IgZGVwZW5kIG9uIGFueSBleHRlcm5hbCB0b29scyBmb3IKKyAg IGJ1aWxkaW5nIGV4Y2VwdCB0aGUgIm1ha2UiIHV0aWxpdHksIHRoZSBDIGNvbXBpbGVyLCB0aGUg bGlua2VyLCBhbmQgdGhlCisgICBzaGVsbC4gSXQgZG9lcyBub3QgdXNlIGFueSBleHRlcm5hbCBh dXRvbWF0ZWQgY29uZmlndXJhdGlvbiB0b29scyBzdWNoCisgICBhcyBjb25maWd1cmUsIGF1dG9j b25mLCBhdXRvbWFrZSwgbGlidG9vbCwgZXRjLiBFdmVyeXRoaW5nIGluIEMtS2VybWl0CisgICBo YXMgYmVlbiBidWlsdCBieSBoYW5kIGJhc2VkIG9uIGRpcmVjdCBleHBlcmllbmNlIG9yIHJlcG9y dHMgb3IKKyAgIGNvbnRyaWJ1dGlvbnMgZnJvbSB1c2VycyBvZiBlYWNoIHBsYXRmb3JtLgorCisg ICBUaGUgWzg3XUMtS2VybWl0IG1ha2VmaWxlIGNvbnRhaW5zIHRoZSBydWxlcyBmb3IgYnVpbGRp bmcgdGhlIHByb2dyYW0KKyAgIGZvciBlYWNoIG9mIHRoZSBodW5kcmVkcyBvZiBkaWZmZXJlbnQg a2luZHMgb2YgVW5peCBzeXN0ZW1zIHRoYXQKKyAgIEMtS2VybWl0IGF0dGVtcHRzIHRvIHN1cHBv cnQuIEl0IGNvdmVycyBhbGwgVW5peCB2YXJpYXRpb25zIHNpbmNlIGFib3V0CisgICAxOTgwIC0t IHByZXR0eSBtdWNoIGV2ZXJ5dGhpbmcgYWZ0ZXIgVW5peCBWNi4gU2VwYXJhdGUgbWFrZWZpbGVz IGFyZQorICAgdXNlZCBmb3IgWzg4XVBsYW4gOSBhbmQgWzg5XTIueCBCU0QuCisKKyAgIFByZXJl cXVpc2l0ZXM6CisKKyAgICAgKiBUaGUgQyBjb21waWxlciwgbGlua2VyLCBhbmQgbWFrZSBwcm9n cmFtIG11c3QgYmUgaW5zdGFsbGVkLgorICAgICAqIFRoZSBDIGxpYnJhcmllcyBhbmQgaGVhZGVy IGZpbGVzIG11c3QgYmUgaW5zdGFsbGVkICgqKS4KKyAgICAgKiBUaGUgQy1LZXJtaXQgc291cmNl IGNvZGUgYW5kIG1ha2VmaWxlIGluIHlvdXIgY3VycmVudCBkaXJlY3RvcnkuCisgICAgICogVGhl IEMtS2VybWl0IHRleHQgZmlsZXMgKFs5MF1TZWN0aW9uIDUpIGluIHlvdXIgY3VycmVudCBkaXJl Y3RvcnkuCisKKyAgICAgKiBUaGlzIGlzIGJlY29taW5nIHByb2JsZW1hdGljIGluIHRoaXMgbmV3 IGFnZSBvZiAic2VsZWN0aXZlCisgICAgICAgaW5zdGFsbHMiIGUuZy4gb2YgTGludXggcGFja2Fn ZXMuIEMtS2VybWl0IGJ1aWxkcyB3aWxsIG9mdGVuIGZhaWwKKyAgICAgICBiZWNhdXNlIHJlcGx5 aW5nICJubyIgdG8gc29tZSBvYnNjdXJlIExpbnV4IGluc3RhbGxhdGlvbiBvcHRpb24KKyAgICAg ICB3aWxsIHJlc3VsdCBpbiBtaXNzaW5nIGxpYnJhcmllcyBvciBoZWFkZXIgZmlsZXMuIERpdHRv IG9uCisgICAgICAgcGxhdGZvcm1zIGxpa2UgQUlYIGFuZCBTb2xhcmlzIHRoYXQgZG9uJ3QgY29t ZSB3aXRoIEMgY29tcGlsZXJzLAorICAgICAgIGFuZCB0aGVuIGxhdGVyIGhhdmUgZ2NjIGluc3Rh bGxlZCwgYnV0IGFyZSBzdGlsbCBtaXNzaW5nIGNydWNpYWwKKyAgICAgICBsaWJyYXJpZXMsIGxp a2UgbGlibSAobWF0aCkuCisKKyAgIFBsdXM6CisKKyAgICAgKiBGb3IgVENQL0lQIG5ldHdvcmtp bmcgc3VwcG9ydCwgdGhlIHNvY2tldHMgbGlicmFyeSBhbmQgcmVsYXRlZAorICAgICAgIGhlYWRl ciBmaWxlcyBtdXN0IGJlIGluc3RhbGxlZC4KKyAgICAgKiBUaGUgbWF0aCBsaWJyYXJ5IGZvciBm bG9hdGluZy1wb2ludCBhcml0aG1ldGljIHN1cHBvcnQgKGNhbiBiZQorICAgICAgIGRlc2VsZWN0 ZWQgYnkgYWRkaW5nIC1ETk9GTE9BVCB0byBDRkxBR1MgYW5kIHJlbW92aW5nIC1sbSBmcm9tCisg ICAgICAgTElCUykuCisgICAgICogTWFueSBhbmQgdmFyaWVkIHNlY3VyaXR5IGxpYnJhcmllcyBm b3IgYnVpbGRpbmcgYSBzZWN1cmUgdmVyc2lvbgorICAgICAgIChLZXJiZXJvcywgU1NML1RMUywg U1JQLCBabGliLC4uLikgVGhlc2UgYXJlIHJlcXVpcmVkIG9ubHkgaWYgeW91CisgICAgICAgc2Vs ZWN0IGEgc2VjdXJlIHRhcmdldC4KKyAgICAgKiBGb3IgdGhlIGN1cnNlcy1iYXNlZCBmdWxsc2Ny ZWVuIGZpbGUtdHJhbnNmZXIgZGlzcGxheSwgdGhlIGN1cnNlcworICAgICAgIG9yIG5jdXJzZXMg aGVhZGVyIGZpbGUocykgYW5kIGxpYnJhcnksIGFuZCBwcm9iYWJseSBhbHNvIHRoZQorICAgICAg IHRlcm1jYXAgYW5kL29yIHRlcm1saWIgbGlicmFyeS4gTm90ZSB0aGF0IHRoZSBuYW1lcyBhbmQg bG9jYXRpb25zCisgICAgICAgb2YgdGhlc2UgZmlsZXMgYW5kIGxpYnJhcmllcyBhcmUgbGlrZWx5 IHRvIGNoYW5nZSBjYXByaWNpb3VzbHkgd2l0aAorICAgICAgIGV2ZXJ5IG5ldyByZWxlYXNlIG9m IHlvdXIgVW5peCBwcm9kdWN0LiBJZiB5b3UgZGlzY292ZXIgdGhhdCB0aGUKKyAgICAgICBDLUtl cm1pdCBidWlsZCBwcm9jZWR1cmUgZmFpbHMgYmVjYXVzZSB5b3VyIGN1cnNlcyBhbmQvb3IgdGVy bXh4eAorICAgICAgIGhlYWRlcnMgb3IgbGlicmFyaWVzIGFyZSBub3QgbmFtZWQgb3IgbG9jYXRl ZCBhcyBleHBlY3RlZCwgcGxlYXNlCisgICAgICAgWzkxXWxldCB1cyBrbm93LiBJbiB0aGUgbWVh bnRpbWUsIHdvcmsgYXJvdW5kIGJ5IGluc3RhbGxpbmcKKyAgICAgICBzeW1saW5rcy4KKyAgICAg KiBJTVBPUlRBTlQ6IE1vZGVybiBMaW51eCBkaXN0cmlidXRpb25zIG1pZ2h0IGdpdmUgeW91IHRo ZSBjaG9pY2UKKyAgICAgICBkdXJpbmcgaW5zdGFsbGF0aW9uIG9mIHdoZXRoZXIgdG8gaW5zdGFs bCB0aGUgIm5jdXJzZXMgZGV2ZWxvcG1lbnQKKyAgICAgICBwYWNrYWdlIiAocGVyaGFwcyBjYWxs ZWQgIm5jdXJzZXMtZGV2ZWwiKS4gSWYgeW91IGRpZCBub3QgaW5zdGFsbAorICAgICAgIGl0LCB5 b3Ugd29uJ3QgYmUgYWJsZSB0byBidWlsZCBDLUtlcm1pdCB3aXRoIGN1cnNlcyBzdXBwb3J0Cisg ICAgICAgaW5jbHVkZWQuIEluIHRoaXMgY2FzZSwgZWl0aGVyIGdvIGJhY2sgYW5kIGluc3RhbGwg bmN1cnNlcywgb3IgZWxzZQorICAgICAgIGNob29zZSAob3IgY3JlYXRlKSBhIG5vbi1jdXJzZXMg bWFrZWZpbGUgdGFyZ2V0IGZvciB5b3VyIHBsYXRmb3JtLgorICAgICAgIFRvIGluc3RhbGwgdGhl IG5jdXJzZXMgZGV2ZWxvcGVycyB0b29scyBpbiBSZWQgSGF0IExpbnV4LCBkbworICAgICAgICJh cHQtZ2V0IGluc3RhbGwgbmN1cnNlcy1kZXZlbG9wZXIiIG9yIGlmIHlvdSBoYXZlIHRoZSBDRDoK KworbW91bnQgcmVkaGF0IGNkcm9tCitnb3RvIFJlZEhhdC9SUE1TCitycG0gLWl2aCBuY3Vyc2Vz LWRldmVsKi5ycG0KK29yIHRvIGhhdmUgdGhlIGV4YWN0IG5hbWUgbHMgbmN1cnNlKiBhbmQgbG9h ZCBhcworcnBtIC1pdmggZmlsZW5hbWUKK3RoZW4gbGVhdmUgdGhlIGNkcm9tIGFuZCB1bm1vdW50 IGl0LgorCisgICAgICogSW4gQUlYIHlvdSBtaWdodCBoYXZlIHRvIGdvIGJhY2sgYW5kIGluc3Rh bGwgYW55IG9yIGFsbCBvZjoKKworYm9zLmFkdC5iYXNlCitib3MuYWR0LmluY2x1ZGUKK2Jvcy5h ZHQubGliCitib3MuYWR0LmxpYm0KK2Jvcy5hZHQudXRpbHMKKworICAgICAgIGZyb20gdGhlIGZp cnN0IGluc3RhbGxhdGlvbiBDRC4KKworICAgRGVwZW5kaW5nIG9uIHdoZXJlIHlvdSBnb3QgaXQs IHRoZSBtYWtlZmlsZSBtaWdodCBuZWVkIHRvIGJlIHJlbmFtZWQKKyAgIGZyb20gY2t1a2VyLm1h ayB0byBtYWtlZmlsZS4gRGlyZWN0aW9uczoKKworICAgIGEuIFR5cGUgIm1ha2UgeHh4IiB3aGVy ZSB4eHggaXMgdGhlIG5hbWUgb2YgdGhlIG1ha2VmaWxlIHRhcmdldCBtb3N0CisgICAgICAgYXBw cm9wcmlhdGUgdG8geW91ciBwbGF0Zm9ybSwgZS5nLiAibWFrZSBsaW51eCIsICJtYWtlIGFpeDQz IiwgZXRjLgorICAgICAgIFJlYWQgdGhlIFs5Ml1jb21tZW50cyBhdCB0aGUgdG9wIG9mIHRoZSBt YWtlZmlsZSBmb3IgYSBjb21wbGV0ZQorICAgICAgIGxpc3Qgb2YgYXZhaWxhYmxlIHRhcmdldHMg KGl0J3MgYSBsb25nIGxpc3QpLgorICAgIGIuIFRlc3QgdGhlIHJlc3VsdGluZyAnd2VybWl0JyBm aWxlIChzZWUgWzkzXVNlY3Rpb24gNyBmb3IKKyAgICAgICBzdWdnZXN0aW9ucykuIElmIGl0J3Mg T0ssIHByb2NlZWQ7IG90aGVyd2lzZSBbOTRdbm90aWZ5IHVzLgorCisgICAgIE5PVEU6IHN0ZXBz IChjKSB0aHJvdWdoIChlKSBjYW4gYmUgYWNjb21wbGlzaGVkIHVzaW5nIHRoZQorICAgICBbOTVd bWFrZWZpbGUgJ2luc3RhbGwnIHRhcmdldCBhcyBkZXNjcmliZWQgaW4gWzk2XVNlY3Rpb24gNS40 LgorICAgIGMuIFJlbmFtZSB0aGUgJ3dlcm1pdCcgZmlsZSB0byAna2VybWl0JywgY29weSBpdCB0 byB0aGUgZGVzaXJlZCBiaW5hcnkKKyAgICAgICBkaXJlY3RvcnkgKHN1Y2ggYXMgL3Vzci9sb2Nh bC9iaW4gb3IgL29wdC9zb21ldGhpbmcpLCBhbmQgaWYgaXQgaXMKKyAgICAgICB0byBiZSB1c2Vk IGZvciBkaWFsaW5nIG91dCwgZ2l2ZSBpdCB0aGUgc2FtZSBvd25lciwgZ3JvdXAsIGFuZAorICAg ICAgIHBlcm1pc3Npb25zIGFzIHRoZSAnY3UnIHByb2dyYW0gKElNUE9SVEFOVDogcmVhZCBbOTdd U2VjdGlvbnMgMTAKKyAgICAgICBhbmQgWzk4XTExIGZvciBkZXRhaWxzKS4KKyAgICBkLiBJbnN0 YWxsIHRoZSBtYW4gcGFnZSwgY2t1a2VyLm5yLCB3aXRoIHlvdXIgb3RoZXIgbWFuIHBhZ2VzLgor ICAgIGUuIEluc3RhbGwgdGhlIGFjY29tcGFueWluZyB0ZXh0IGZpbGVzIChzZWUgWzk5XVNlY3Rp b24gNSkuCisgICAgZi4gSWYgeW91IHdhbnQgQy1LZXJtaXQgdG8gYWxzbyBvZmZlciBhIFRlbG5l dCBjb21tYW5kLWxpbmUKKyAgICAgICBwZXJzb25hbGl0eSwgbWFrZSBhIHN5bWJvbGljIGxpbmsg YXMgZm9sbG93czoKKworY2QgZGlyZWN0b3J5LXdoZXJlLWtlcm1pdC1iaW5hcnktaXMKK2xuIC1z IGtlcm1pdCB0ZWxuZXQKKworICAgICAgIElmIHlvdSB3YW50IEMtS2VybWl0IHRvIGJlIHRoZSBk ZWZhdWx0IFRlbG5ldCBjbGllbnQsIG1ha2Ugc3VyZSB0aGUKKyAgICAgICBkaXJlY3RvcnkgaW4g d2hpY2ggeW91IGNyZWF0ZWQgdGhlIHN5bWxpbmsgaXMgaW4gdGhlIFBBVEggYWhlYWQgb2YKKyAg ICAgICB0aGUgd2hlcmUgdGhlIHJlZ3VsYXIgVGVsbmV0IGNsaWVudCBpcy4KKyAgICBnLiBJZiB5 b3Ugd2FudCBDLUtlcm1pdCB0byBhbHNvIG9mZmVyIGFuIEZUUCBjb21tYW5kLWxpbmUgcGVyc29u YWxpdHksCisgICAgICAgbWFrZSBhIHN5bWxpbmsgY2FsbGVkICJmdHAiIGFzIGluIChmKS4KKyAg ICBoLiBJZiB5b3Ugd2FudCBDLUtlcm1pdCB0byBhbHNvIG9mZmVyIGFuIEZUVFAgY29tbWFuZC1s aW5lCisgICAgICAgcGVyc29uYWxpdHksIG1ha2UgYSBzeW1saW5rIGNhbGxlZCAiaHR0cCIgYXMg aW4gKGYpLgorICAgIGkuIElmIHlvdSB3YW50IHRvIG9mZmVyIGFuIEludGVybmV0IEtlcm1pdCBT ZXJ2aWNlLCBmb2xsb3cgdGhlCisgICAgICAgZGlyZWN0aW9ucyBpbiB0aGUgWzEwMF1JS1NEIEFk bWluaXN0cmF0b3IncyBHdWlkZS4KKworNC4wLiBTcGVjaWFsIENvbnNpZGVyYXRpb25zIGZvciBD LUtlcm1pdCA4LjAtOS4wCisKKyAgIFsgWzEwMV1Ub3AgXSBbIFsxMDJdQ29udGVudHMgXSBbIFsx MDNdTmV4dCBdCisKKyAgIEFsc28gc2VlOiBbMTA0XUMtS2VybWl0IENvbmZpZ3VyYXRpb24gT3B0 aW9ucworCisgICBTRUNUSU9OIENPTlRFTlRTCisKKzQuMS4gWzEwNV1UaGUgVW5peCBNYWtlZmls ZQorNC4yLiBbMTA2XVRoZSBDLUtlcm1pdCBJbml0aWFsaXphdGlvbiBGaWxlCis0LjMuIFsxMDdd VGhlIDIueCBCU0QgTWFrZWZpbGUKKzQuNC4gWzEwOF1UaGUgUGxhbiA5IE1ha2VmaWxlCis0LjUu IFsxMDldTWFrZWZpbGUgRmFpbHVyZXMKKworICAgKEFsc28gc2VlIHRoZSBbMTEwXUNvbmZpZ3Vy YXRpb25zIE9wdGlvbnMgZG9jdW1lbnQsIFsxMTFdU2VjdGlvbiA4KS4KKworICAgTG90cyBvZiBu ZXcgZmVhdHVyZXMgaGF2ZSBiZWVuIGFkZGVkIGluIHZlcnNpb25zIDcuMCBhbmQgOC4wIHRoYXQK KyAgIHJlcXVpcmUgYWNjZXNzIHRvIG5ldyBzeW1ib2xzLCBBUElzLCBsaWJyYXJpZXMsIGV0Yywg YW5kIHRoaXMgd2lsbCBubworICAgZG91YnQgY2F1c2UgcHJvYmxlbXMgaW4gY29tcGlsaW5nLCBs aW5raW5nLCBvciBleGVjdXRpb24gb24gcGxhdGZvcm1zCisgICB3aGVyZSA2LjAgYW5kIGVhcmxp ZXIgYnVpbHQgd2l0aG91dCBpbmNpZGVudC4gVGhpcyBzZWN0aW9uIGNvbnRhaW5zCisgICB3aGF0 IHdlIGtub3cgYXMgb2YgdGhlIGRhdGUgb2YgdGhpcyBmaWxlLgorCisgICBUaGUgZmlyc3QgY2F0 ZWdvcnkgY29uY2VybnMgdGhlIG5ldyBLZXJtaXQgU2VydmljZSBEYWVtb24gKElLU0Q7IHNlZQor ICAgdGhlIFsxMTJdSUtTRCBBZG1pbmlzdHJhdG9yJ3MgR3VpZGUgZm9yIGRldGFpbHMpOgorCisg ICBUaGUgd3RtcCBGaWxlCisgICAgICAgICAgV2hlbiBDLUtlcm1pdCBpcyBzdGFydGVkIGFzIGFu IElLU0QgKHVuZGVyIGluZXRkKSwgaXQgbWFrZXMKKyAgICAgICAgICBzeXNsb2cgYW5kIHd0bXAg ZW50cmllcywgYW5kIGFsc28ga2VlcHMgaXRzIG93biBmdHBkLWxpa2UgbG9nLgorICAgICAgICAg IFRoZSBjb2RlIGFzc3VtZXMgdGhlIHd0bXAgbG9nIGlzIC92YXIvbG9nL3d0bXAgb24gTGludXgg YW5kCisgICAgICAgICAgL3Vzci9hZG0vd3RtcCBlbHNld2hlcmUuIE5vIGRvdWJ0IHRoaXMgYXNz dW1wdGlvbiB3aWxsIG5lZWQKKyAgICAgICAgICBhZGp1c3RtZW50LiBVc2UgLURXVE1QRklMRT1w YXRoIHRvIG92ZXJyaWRlIGF0IGNvbXBpbGUgdGltZQorICAgICAgICAgICh0aGVyZSBpcyBhbHNv IGEgcnVudGltZSBvdmVycmlkZSkuIFNlZSBbMTEzXWlrc2QuaHRtbCBmb3IKKyAgICAgICAgICBk ZXRhaWxzLgorCisgICBVVE1QLCB1dHNuYW1lKCksIGV0YworICAgICAgICAgIEMtS2VybWl0IDcu MCBnZXRzIGFzIG11Y2ggaW5mbyBhcyBpdCBjYW4gYWJvdXQgaXRzIGpvYiAtLSBtYWlubHkKKyAg ICAgICAgICBmb3IgSUtTRCBsb2dnaW5nIC0tIGZyb20gdXRtcC4gQnV0IG9mIGNvdXJzZSB1dG1w IGZvcm1hdHMgYW5kCisgICAgICAgICAgZmllbGRzIGRpZmZlciwgYW5kIGZvciB0aGF0IG1hdHRl ciwgdGhlcmUgY2FuIGJlIHR3byBkaWZmZXJlbnQKKyAgICAgICAgICBoZWFkZXIgZmlsZXMsIDx1 dG1wLmg+IGFuZCA8dXRtcHguaD4uIExvb2sgZm9yIEhBVkVVVE1QWCBhbmQKKyAgICAgICAgICBI QVZFVVRIT1NUIGluIFsxMTRdY2t1ZmlvLmMgYW5kIGxldCBtZSBrbm93IG9mIGFueSBuZWVkZWQK KyAgICAgICAgICBhZGp1c3RtZW50cy4KKworICAgUGFzc3dvcmQgbG9va3VwCisgICAgICAgICAg SUtTRCBuZWVkcyB0byBhdXRoZW50aWNhdGUgaW5jb21pbmcgdXNlcnMgYWdhaW5zdCB0aGUgcGFz c3dvcmQKKyAgICAgICAgICBsaXN0LiBJbiBzb21lIGNhc2VzLCB0aGlzIHJlcXVpcmVzIHRoZSBh ZGRpdGlvbiBvZiAtbGNyeXB0IChlLmcuCisgICAgICAgICAgaW4gVW5peHdhcmUgMi54KS4gSW4g bW9zdCBvdGhlcnMsIHRoZSBjcnlwdCBmdW5jdGlvbnMgYXJlIGluIHRoZQorICAgICAgICAgIHJl Z3VsYXIgQyBsaWJyYXJ5LiBJZiB5b3UgZ2V0ICJjcnlwdCIgYXMgYW4gdW5yZXNvbHZlZCBzeW1i b2wgYXQKKyAgICAgICAgICBsaW5rIHRpbWUsIGFkZCAtbGNyeXB0IHRvIExJQlMuIElmIHlvdXIg c2l0ZSBoYXMgbG9jYWwKKyAgICAgICAgICByZXBsYWNlbWVudCBsaWJyYXJpZXMgZm9yIGF1dGhl bnRpY2F0aW9uLCB5b3UgbWlnaHQgbmVlZCBhCisgICAgICAgICAgc3BlY2lhbCBMSUJTIGNsYXVz ZSBzdWNoIGFzICJMSUJTPS1ML3Vzci9sb2NhbC9saWIgLWxwd2VudCIuCisKKyAgICAgICAgICBU aGVzZSBkYXlzIG1vc3QgVW5peCBzeXN0ZW1zIHRha2UgYWR2YW50YWdlIG9mIHNoYWRvdyBwYXNz d29yZAorICAgICAgICAgIGZpbGVzIG9yIFBsdWdnYWJsZSBBdXRoZW50aWNhdGlvbiBNb2R1bGVz IChQQU0pLiBJZiB5b3VyIHN5c3RlbQorICAgICAgICAgIHVzZXMgc2hhZG93IHBhc3N3b3JkcyB5 b3UgbXVzdCBhZGQgLURDS19TSEFET1cgdG8gdGhlIENGTEFHUworICAgICAgICAgIGxpc3QuIElm IHlvdXIgc3lzdGVtIHJlcXVpcmVzIFBBTSB5b3UgbXVzdCBhZGQgLURDS19QQU0gdG8gdGhlCisg ICAgICAgICAgQ0ZMQUdTIGFuZCAtbHBhbSAtbGRsIHRvIExJQlMuCisKKyAgIGdldHVzZXJzaGVs bCgpCisgICAgICAgICAgVGhpcyBpcyBjYWxsZWQgYnkgdGhlIElLU0QgYXQgbG9naW4gdGltZSB0 byBzZWUgaWYgYSB1c2VyIGhhcworICAgICAgICAgIGJlZW4gInR1cm5lZCBvZmYiLiBCdXQgbWFu eSBVbml4IHBsYXRmb3JtcyBsYWNrIHRoaXMgZnVuY3Rpb24uCisgICAgICAgICAgSW4gdGhhdCBj YXNlLCB5b3Ugd2lsbCBnZXQgdW5yZXNvbHZlZCBzeW1ib2wgcmVwb3J0cyBhdCBsaW5rCisgICAg ICAgICAgdGltZSBmb3IgX2dldHVzZXJzaGVsbCwgX2VuZHVzZXJzaGVsbDsgdG8gd29yayBhcm91 bmQsIGFkZAorICAgICAgICAgIC1ETk9HRVRVU0VSU0hFTEwuCisKKyAgIGluaXRncm91cHMoKQor ICAgICAgICAgIFRoaXMgaXMgY2FsbGVkIGJ5IElLU0QgYWZ0ZXIgc3VjY2Vzc2Z1bCBhdXRoZW50 aWNhdGlvbi4gQnV0IHNvbWUKKyAgICAgICAgICBwbGF0Zm9ybXMgZG8gbm90IGhhdmUgdGhpcyBm dW5jdGlvbiwgc28gb2J2aW91c2x5IGl0IGNhbid0IGJlCisgICAgICAgICAgY2FsbGVkIHRoZXJl LCBpbiB3aGljaCBjYXNlIGFkZCAtRE5PSU5JVEdST1VQUy4KKworICAgc2V0cmV1aWQoKSwgc2V0 cmV1aWQoKSwgc2V0cmVnaWQoKSBub3QgZm91bmQgb3IgImRlcHJlY2F0ZWQiCisgICAgICAgICAg RmluZCBvdXQgd2hhdCB5b3VyIFVuaXggdmFyaWV0eSB3YW50cyB5b3UgdG8gdXNlIGluc3RlYWQs IGFuZAorICAgICAgICAgIG1ha2UgYXBwcm9wcmlhdGUgc3Vic3RpdHV0aW9ucyBpbiByb3V0aW5l IHp2cGFzcygpLCBtb2R1bGUKKyAgICAgICAgICBbMTE1XWNrdWZpby5jLCBhbmQgWzExNl1sZXQg dXMga25vdy4KKworICAgcHJpbnRmKCkKKyAgICAgICAgICBJS1NEIGluc3RhbGxzIGEgcHJpbnRm KCkgc3Vic3RpdHV0ZSB0byBhbGxvdyByZWRpcmVjdGlvbiBvZgorICAgICAgICAgIHByaW50Zi1s aWtlIG91dHB1dCB0byB0aGUgY29ubmVjdGlvbi4gSG93ZXZlciwgdGhpcyBjYW4gY29uZmxpY3QK KyAgICAgICAgICB3aXRoIHNvbWUgY3Vyc2VzIGxpYnJhcmllcy4gSW4gdGhpcyBjYXNlLCBzZXBh cmF0ZSBiaW5hcmllcyBtdXN0CisgICAgICAgICAgYmUgYnVpbHQgZm9yIElLU0QgYW5kIG5vbi1J S1NEIHVzZS4KKworICAgSWYgeW91IGVuY291bnRlciBkaWZmaWN1bHRpZXMgd2l0aCBhbnkgb2Yg dGhlIGFib3ZlLCBhbmQgeW91IGFyZSBub3QKKyAgIGludGVyZXN0ZWQgaW4gcnVubmluZyBDLUtl cm1pdCBhcyBhbiBJS1NELCB0aGVuIHNpbXBseSBhZGQgTk9JS1NEIHRvCisgICBDRkxBR1MgYW5k IHJlYnVpbGQuIEV4YW1wbGU6CisKK21ha2Ugc2NvMjg2CisoZ2V0IGxvdHMgb2YgZXJyb3JzKQor bWFrZSBjbGVhbgorbWFrZSBzY28yODYgIktGTEFHUz0tRE5PSUtTRCIKKworICAgU29tZSBub24t SUtTRCB0aGluZ3MgdG8gd2F0Y2ggb3V0IGZvcjoKKworICAgUmV0dXJuIHR5cGUgb2YgbWFpbigp CisgICAgICAgICAgVGhlIG1haW4oKSByb3V0aW5lIGlzIGluIFsxMTddY2tjbWFpLmMuIElmIHlv dSBnZXQgY29tcGxhaW50cworICAgICAgICAgIGFib3V0ICJtYWluOiByZXR1cm4gdHlwZSBpcyBu b3QgYmxhaCIsIGRlZmluZSBNQUlOVFlQRSBvbiB0aGUgQ0MKKyAgICAgICAgICBjb21tYW5kIGxp bmUsIGUuZy46CisKK21ha2UgeHh4ICJLRkxBR1M9LURNQUlOVFlQRT1ibGFoCisKKyAgICAgICAg ICAod2hlcmUgYmxhaCBpcyBpbnQsIGxvbmcsIG9yIHdoYXRldmVyKS4gSWYgdGhlIGNvbXBsYWlu dCBpcworICAgICAgICAgICJBdHRlbXB0IHRvIHJldHVybiBhIHZhbHVlIGZyb20gYSBmdW5jdGlv biBvZiB0eXBlIHZvaWQiIHRoZW4KKyAgICAgICAgICBhZGQgLURNQUlOSVNWT0lEOgorCittYWtl IHh4eCAiS0ZMQUdTPS1ETUFJTklTVk9JRD1ibGFoCisKKyAgIEROUyBTZXJ2aWNlIFJlY29yZHMK KyAgICAgICAgICBUaGlzIGZlYXR1cmUgYWxsb3dzIGEgcmVtb3RlIGhvc3QgdG8gcmVkaXJlY3Qg Qy1LZXJtaXQgdG8gdGhlCisgICAgICAgICAgYXBwcm9wcmlhdGUgc29ja2V0IGZvciB0aGUgcmVx dWVzdGVkIHNlcnZpY2U7IGUuZy4gaWYgQy1LZXJtaXQKKyAgICAgICAgICByZXF1ZXN0cyBzZXJ2 aWNlICJ0ZWxuZXQiIGFuZCB0aGUgaG9zdCBvZmZlcnMgVGVsbmV0IHNlcnZpY2Ugb24KKyAgICAg ICAgICBwb3J0IDk5OSByYXRoZXIgdGhhbiB0aGUgY3VzdG9tYXJ5IHBvcnQgMjMuIElmIHlvdSBn ZXQKKyAgICAgICAgICBjb21waWxlLXRpbWUgY29tcGxhaW50cyBhYm91dCBub3QgYmVpbmcgYWJs ZSB0byBmaW5kIDxyZXNvbHYuaD4sCisgICAgICAgICAgPG5ldGRiLmg+LCBvciA8YXJwYS9uYW1l c2VyLmg+LCBhZGQgLUROT19ETlNfU1JWIHRvIENGTEFHUy4gSWYKKyAgICAgICAgICB5b3UgZ2V0 IGxpbmstdGltZSBjb21wbGFpbnRzIGFib3V0IHVucmVzb2x2ZWQgc3ltYm9scyByZXNfc2VhcmNo CisgICAgICAgICAgb3IgZG5fZXhwYW5kLCB0cnkgYWRkaW5nIC1scmVzb2x2ZSB0byBMSUJTLgor CisgICBcdihpcGFkZHJlc3MpCisgICAgICAgICAgSWYgImVjaG8gXHYoaXBhZGRyZXNzKSIgc2hv d3MgYW4gZW1wdHkgc3RyaW5nIHJhdGhlciB0aGFuIHlvdXIKKyAgICAgICAgICBsb2NhbCBJUCBh ZGRyZXNzLCBhZGQgLURDS0dITkxIT1NUIHRvIENGTEFHUyBhbmQgcmVidWlsZC4KKworICAgPHN5 cy93YWl0Lmg+CisgICAgICAgICAgSWYgdGhpcyBmaWxlIGNhbid0IGJlIGZvdW5kIGF0IGNvbXBp bGUgdGltZSwgYWRkIC1ETk9SRURJUkVDVCB0bworICAgICAgICAgIENGTEFHUy4gVGhpcyBkaXNh YmxlcyB0aGUgUkVESVJFQ1QgYW5kIFBJUEUgY29tbWFuZHMgYW5kCisgICAgICAgICAgYW55dGhp bmcgZWxzZSB0aGF0IG5lZWRzIHRoZSB3YWl0KCkgc3lzdGVtIHNlcnZpY2UuCisKKyAgIHN5c2xv ZygpCisgICAgICAgICAgQy1LZXJtaXQgY2FuIG5vdyB3cml0ZSBzeXNsb2cgcmVjb3Jkcy4gU29t ZSBvbGRlciBwbGF0Zm9ybXMKKyAgICAgICAgICBtaWdodCBub3QgaGF2ZSB0aGUgc3lzbG9nIGZh Y2lsaXR5LiBJbiB0aGF0IGNhc2UsIGFkZAorICAgICAgICAgIC1ETk9TWVNMT0cuIE90aGVycyBt aWdodCBoYXZlIGl0LCBidXQgcmVxdWlyZSBhZGRpdGlvbiBvZgorICAgICAgICAgIC1sc29ja2V0 IHRvIExJQlMgKFNDTyBPU1I1IGlzIGFuIGV4YW1wbGUpLiBTZWUgWzExOF1TZWN0aW9uIDE1Lgor CisgICBwdXRlbnYoKQorICAgICAgICAgIElmICJfcHV0ZW52IiBjb21lcyB1cCBhcyBhbiB1bmRl ZmluZWQgc3ltYm9sLCBhZGQgLUROT1BVVEVOViB0bworICAgICAgICAgIENGTEFHUyBhbmQgcmVi dWlsZC4KKworICAgIlBhc3NpbmcgYXJnMSBvZiAndGltZScgZnJvbSBpbmNvbXBhdGlibGUgcG9p bnRlciIKKyAgICAgICAgICBUaGlzIGlzIGEgbWVzcy4gU2VlIHRoZSBtYXNzIG9mICNpZmRlZnMg aW4gdGhlIGFwcHJvcHJpYXRlCisgICAgICAgICAgbW9kdWxlLCBbMTE5XWNrdXRpby5jIG9yIFsx MjBdY2t1ZmlvLmMuCisKKyAgIGdldHRpbWVvZmRheSgpCisgICAgICAgICAgV3JvbmcgbnVtYmVy IG9mIGFyZ3VtZW50cy4gT24gbW9zdCBwbGF0Zm9ybXMsIGdldHRpbWVvZmRheSgpCisgICAgICAg ICAgdGFrZXMgdHdvIGFyZ3VtZW50cywgYnV0IG9uIGEgaGFuZGZ1bCBvZiBvdGhlcnMgKGUuZy4g TW90b3JvbGEKKyAgICAgICAgICBTeXN0ZW0gVi84OCBWNCwgU05JIFJlbGlhbnQgVU5JWCA1LjQz LCBldGMpIGl0IHRha2VzIG9uZS4gSWYKKyAgICAgICAgICB5b3VyIHZlcnNpb24gb2YgZ2V0dGlt ZW9mZGF5KCkgaXMgYmVpbmcgY2FsbGVkIHdpdGggdHdvIGFyZ3MgYnV0CisgICAgICAgICAgd2Fu dHMgb25lLCBhZGQgLURHVE9ET05FQVJHLgorCisgICAiQXNzaWdubWVudCBtYWtlcyBwb2ludGVy IGZyb20gaW50ZWdlciB3aXRob3V0IGEgY2FzdCIKKyAgICAgICAgICBUaGlzIHdhcm5pbmcgbWln aHQgYXBwZWFyIGluIFsxMjFdY2t1dGlvLmMgb3IgWzEyMl1ja3VmaW8uYy4gKG9yCisgICAgICAg ICAgZWxzZXdoZXJlKSwgYW5kIHVzdWFsbHkgY2FuIGJlIHRyYWNlZCB0byB0aGUgdXNlIG9mIGEg c3lzdGVtIG9yCisgICAgICAgICAgbGlicmFyeSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBwb2lu dGVyIGJ1dCB0aGF0IGlzIG5vdCBkZWNsYXJlZAorICAgICAgICAgIGluIHRoZSBzeXN0ZW0gaGVh ZGVyIGZpbGVzIGV2ZW4gdGhvdWdoIGl0IHNob3VsZCBiZS4gU2V2ZXJhbAorICAgICAgICAgIGZ1 bmN0aW9ucyBhcmUgY29tbW9ubHkgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZXJyb3I6CisKKyAgICAg ICAgICArIGdldGN3ZCgpOiBBZGQgLUREQ0xHRVRDV0QgdG8gQ0ZMQUdTIGFuZCByZWJ1aWxkLgor ICAgICAgICAgICsgcG9wZW4oKSA6IEFkZCAtRERDTFBPUEVOIHRvIENGTEFHUyBhbmQgcmVidWls ZC4KKyAgICAgICAgICArIGZkb3BlbigpOiBBZGQgLUREQ0xGRE9QRU4gdG8gQ0ZMQUdTIGFuZCBy ZWJ1aWxkLgorCisgICAiT3BlcmFuZHMgb2YgPSBoYXZlIGluY29tcGF0aWJsZSB0eXBlcyIKKyAg ICJJbmNvbXBhdGlibGUgdHlwZXMgaW4gYXNzaWdubWVudCIKKyAgICAgICAgICBJZiB0aGlzIGNv bWVzIGZyb20gWzEyM11ja2NuZXQuYyBhbmQgY29tZXMgZnJvbSBhIHN0YXRlbWVudAorICAgICAg ICAgIGludm9sdmluZyBpbmV0X2FkZHIoKSwgdHJ5IGFkZGluZyAtRElOQUREUlggdG8gQ0ZMQUdT LiBJZiB0aGF0CisgICAgICAgICAgZG9lc24ndCBoZWxwLCB0aGVuIHRyeSBhZGRpbmcgLUROT01I SE9TVC4KKworICAgQ29tcGxhaW50cyBhYm91dCBhcmdzIHRvIGdldC9zZXRzb2Nrb3B0KCksIGdl dHBlZXJuYW1lKCksIGdldHNvY2tuYW1lKCkKKyAgICAgICAgICBUaGVzZSBhcmUgYWxsIGluIFsx MjRdY2tjbmV0LmMuIERpZmZlcmVudCBwbGF0Zm9ybXMgYW5kIE9TJ3MgYW5kCisgICAgICAgICAg dmVyc2lvbnMgb2YgdGhlIHNhbWUgT1MgY2hhbmdlIHRoaXMgYWxsIHRoZSB0aW1lOiBpbnQsIHNp emVfdCwKKyAgICAgICAgICB1bnNpZ25lZCBsb25nLCBldGMuIEFsbCB0aGUgYWZmZWN0ZWQgdmFy aWFibGVzIGFyZSBkZWNsYXJlZAorICAgICAgICAgIGFjY29yZGluZyB0byAjaWZkZWZzIHdpdGhp biBja2NuZXQuYywgc28gZmluZCB0aGUgZGVjbGFyYXRpb25zCisgICAgICAgICAgYW5kIGFkanVz dCB0aGUgI2lmZGVmcyBhY2NvcmRpbmdseS4KKworICAgc2l6ZV90CisgICAgICAgICAgSW4gY2Fz ZSBvZiBjb21wbGFpbnRzIGFib3V0ICJ1bmtub3duIHR5cGUgc2l6ZV90IiwgYWRkCisgICAgICAg ICAgLURTSVpFX1Q9aW50IChvciBvdGhlciBhcHByb3ByaWF0ZSB0eXBlKSB0byBDRkxBR1MuCisK KyAgICd0eicgdW5kZWZpbmVkCisgICBVc2Ugb2YgdW5kZWZpbmVkIGVudW0vc3RydWN0L3VuaW9u ICd0aW1lem9uZScKKyAgICAgICAgICBMZWZ0IG9mICd0dl9zZWMnIHNwZWNpZmllcyB1bmRlZmlu ZWQgc3RydWN0L3VuaW9uICd0aW1ldmFsJyBBbmQKKyAgICAgICAgICBzaW1pbGFyIGNvbXBsYWlu dHMgaW4gWzEyNV1ja3V0aW8uYzogQWRkIC1ETk9HRlRJTUVSIGFuZC9vcgorICAgICAgICAgIC1E Tk9USU1FVkFMLgorCisgICBTeW1saW5rcworICAgICAgICAgIFRoZSBuZXcgYnVpbHQtaW4gRElS RUNUT1JZIGNvbW1hbmQgc2hvdWxkIHNob3cgc3ltbGlua3MgbGlrZSAibHMKKyAgICAgICAgICAt bCIgZG9lcy4gSWYgaXQgZG9lcyBub3QsIGNoZWNrIHRvIHNlZSBpZiB5b3VyIHBsYXRmb3JtIGhh cyB0aGUKKyAgICAgICAgICBsc3RhdCgpIGFuZCByZWFkbGluaygpIGZ1bmN0aW9ucy4gSWYgc28s IGFkZCAtRFVTRV9MU1RBVCBhbmQKKyAgICAgICAgICAtRENLU1lNTElOSyB0byBDRkxBR1MgYW5k IHJlYnVpbGQuIE9uIHRoZSBvdGhlciBoYW5kLCBpZiBsc3RhdCgpCisgICAgICAgICAgaXMgdW5y ZXNvbHZlZCBhdCBsaW5rIHRpbWUsIGFkZCAtRE5PTFNUQVQgdG8gQ0ZMQUdTLiBJZgorICAgICAg ICAgIHJlYWRsaW5rKCkgaXMgYWxzbyB1bnJlc29sdmVkLCBhZGQgLUROT1NZTUxJTksuCisKKyAg IHJlYWxwYXRoKCkKKyAgICAgICAgICBMaW5rLXRpbWUgY29tcGxhaW5zIGFib3V0IHJlYWxwYXRo KCkgLS0gZmluZCB0aGUgbGlicmFyeSBpbgorICAgICAgICAgIHdoaWNoIGl0IHJlc2lkZXMgYW5k IGFkZCBpdCB0byBMSUJTIChleGFtcGxlIGZvciBVbml4d2FyZSA3LjE6CisgICAgICAgICAgIi1s Y3VkazcwIikgb3IgYWRkIC1ETk9SRUFMUEFUSCB0byBDRkxBR1MgYW5kIHJlYnVpbGQuIElmIGJ1 aWx0CisgICAgICAgICAgd2l0aCByZWFscGF0aCgpIGJ1dCBkZWJ1ZyBsb2cgZmlsZSBpcyB0cnVu Y2F0ZWQgb3IgbWFuZ2xlZCwKKyAgICAgICAgICBkaXR0byAoc29tZSByZWFscGF0aCgpIGltcGxl bWVudGF0aW9ucyBiZWhhdmUgZGlmZmVyZW50bHkgZnJvbQorICAgICAgICAgIG90aGVycykuIElm IGJ1aWx0IHdpdGggcmVhbHBhdGgoKSBhbmQgc2VlbWluZ2x5IHJhbmRvbSBjb3JlCisgICAgICAg ICAgZHVtcHMgb2NjdXIgZHVyaW5nIGZpbGUgcGF0aCByZXNvbHV0aW9uLCBkaXR0by4KKworICAg RmFpbHVyZSB0byBsb2NhdGUgaGVhZGVyIGZpbGUgPHRlcm0uaD4KKyAgICAgICAgICBVc3VhbGx5 IGhhcHBlbnMgb24gTGludXggc3lzdGVtcyB0aGF0IGhhdmUgdGhlIEMgY29tcGlsZXIKKyAgICAg ICAgICBpbnN0YWxsZWQsIGJ1dCBub3QgdGhlIG5jdXJzZXMgcGFja2FnZSAoc2VlIGNvbW1lbnRz IGFib3V0CisgICAgICAgICAgc2VsZWN0aXZlIGluc3RhbGxzIGFib3ZlKS4gR28gYmFjayBhbmQg aW5zdGFsbCBuY3Vyc2VzLCBvciB1c2UKKyAgICAgICAgICAibWFrZSBsaW51eG5jIiAoTGludXgg Tm8gQ3Vyc2VzKS4KKworICAgIkNhbid0IGZpbmQgc2hhcmVkIGxpYnJhcnkgbGliYy5zby4yLjEi CisgICAiQ2FuJ3QgZmluZCBzaGFyZWQgbGlicmFyeSBsaWJuY3Vyc2VzLnNvLjMuMCIsIGV0Yy4u LgorICAgICAgICAgIFlvdSBhcmUgdHJ5aW5nIHRvIHJ1biBhIGJpbmFyeSB0aGF0IHdhcyBidWls dCBvbiBhIGNvbXB1dGVyIHRoYXQKKyAgICAgICAgICBoYXMgZGlmZmVyZW50IGxpYnJhcnkgdmVy c2lvbnMgdGhhbiB5b3VyIGNvbXB1dGVyLCBhbmQgeW91cgorICAgICAgICAgIGNvbXB1dGVyJ3Mg bG9hZGVyIGlzIHBpY2t5IGFib3V0IGxpYnJhcnkgdmVyc2lvbiBudW1iZXJzLgorICAgICAgICAg IFJlYnVpbGQgZnJvbSBzb3VyY2Ugb24geW91ciBjb21wdXRlci4KKworICAgVGltZSAoc3RydWN0 IHRtKSByZWxhdGVkIGRpZmZpY3VsdGllczoKKyAgICAgICAgICBFcnJvcnMgbGlrZSB0aGUgZm9s bG93aW5nOgorCisiY2t1dGlvLmMiLCBsaW5lIDExOTk0OiBpbmNvbXBsZXRlIHN0cnVjdC91bmlv bi9lbnVtIHRtOiBfdG0KKyJja3V0aW8uYyIsIGxpbmUgMTE5OTU6IGVycm9yOiBjYW5ub3QgZGVy ZWZlcmVuY2Ugbm9uLXBvaW50ZXIgdHlwZQorImNrdXRpby5jIiwgbGluZSAxMTk5NTogZXJyb3I6 IGFzc2lnbm1lbnQgdHlwZSBtaXNtYXRjaAorImNrdXRpby5jIiwgbGluZSAxMTk5Nzogd2Fybmlu ZzogdXNpbmcgb3V0IG9mIHNjb3BlIGRlY2xhcmF0aW9uOiBsb2NhbHRpbWUKKyJja3V0aW8uYyIs IGxpbmUgMTE5OTc6IGVycm9yOiB1bmtub3duIG9wZXJhbmQgc2l6ZTogb3AgIj0iCisiY2t1dGlv LmMiLCBsaW5lIDExOTk3OiBlcnJvcjogYXNzaWdubWVudCB0eXBlIG1pc21hdGNoCisiY2t1dGlv LmMiLCBsaW5lIDExOTk4OiBlcnJvcjogdW5kZWZpbmVkIHN0cnVjdC91bmlvbiBtZW1iZXI6IHRt X3llYXIKKyJja3V0aW8uYyIsIGxpbmUgMTIwMDA6IGVycm9yOiB1bmRlZmluZWQgc3RydWN0L3Vu aW9uIG1lbWJlcjogdG1fbW9uCisiY2t1dGlvLmMiLCBsaW5lIDEyMDAxOiBlcnJvcjogdW5kZWZp bmVkIHN0cnVjdC91bmlvbiBtZW1iZXI6IHRtX21kYXkKKyJja3V0aW8uYyIsIGxpbmUgMTIwMDI6 IGVycm9yOiB1bmRlZmluZWQgc3RydWN0L3VuaW9uIG1lbWJlcjogdG1faG91cgorImNrdXRpby5j IiwgbGluZSAxMjAwMzogZXJyb3I6IHVuZGVmaW5lZCBzdHJ1Y3QvdW5pb24gbWVtYmVyOiB0bV9t aW4KKyJja3V0aW8uYyIsIGxpbmUgMTIwMDQ6IGVycm9yOiB1bmRlZmluZWQgc3RydWN0L3VuaW9u IG1lbWJlcjogdG1fc2VjCisKKyAgICAgICAgICBhcmUgZHVlIHRvIGZhaWx1cmUgdG8gaW5jbHVk ZSB0aGUgYXBwcm9wcmlhdGUgdGltZS5oIGhlYWRlcgorICAgICAgICAgIGZpbGVzLiBVbml4IHBs YXRmb3JtcyBnZW5lcmFsbHkgaGF2ZSBvbmUgb3IgbW9yZSBvZiB0aGUKKyAgICAgICAgICBmb2xs b3dpbmc6IDx0aW1lLmg+LCA8c3lzL3RpbWUuaD4sIGFuZCA8c3lzL3RpbWViLmg+LiBBbnkKKyAg ICAgICAgICBjb21iaW5hdGlvbiBvZiB0aGVzZSBtaWdodCBiZSByZXF1aXJlZC4gRGVmYXVsdHMg YXJlIHNldCB1cCBmb3IKKyAgICAgICAgICBlYWNoIG1ha2VmaWxlIHRhcmdldC4gVGhlIGRlZmF1 bHRzIGNhbiBiZSBjb3JyZWN0ZWQgb24gdGhlIENDCisgICAgICAgICAgY29tbWFuZCBsaW5lIGJ5 IGFkZGluZyB0aGUgYXBwcm9wcmlhdGUgZGVmaW5pdGlvbiBmcm9tIHRoZQorICAgICAgICAgIGZv bGxvd2luZyBsaXN0IHRvIENGTEFHUzoKKworLURUSU1FSCAgICAgICAgIEluY2x1ZGUgPHRpbWUu aD4KKy1ETk9USU1FSCAgICAgICBEb24ndCBpbmNsdWRlIDx0aW1lLmg+CistRFNZU1RJTUVIICAg ICAgSW5jbHVkZSA8c3lzL3RpbWUuaD4KKy1ETk9TWVNUSU1FSCAgICBEb24ndCBpbmNsdWRlIDxz eXMvdGltZS5oPgorLURTWVNUSU1FQkggICAgIEluY2x1ZGUgPHN5cy90aW1lYi5oPgorLUROT1NZ U1RJTUVCSCAgIERvbid0IGluY2x1ZGUgPHN5cy90aW1lYi5oPgorCisgICAgICAgICAgTm90ZSB0 aGF0IDxzeXMvdGltZWIuaD4gaXMgcmVsYXRpdmVseSBzY2FyY2UgaW4gdGhlIFN5c3RlbSBWIGFu ZAorICAgICAgICAgIFBPU0lYIGVudmlyb25tZW50czsgdGhlIG9ubHkgcGxhdGZvcm0gb2YgcmVj ZW50IHZpbnRhZ2Ugd2hlcmUgaXQKKyAgICAgICAgICB3YXMvaXMgdXNlZCBpcyBPU0YvMSBhbmQg aXRzIGRlcml2YXRpdmVzIChEaWdpdGFsIFVuaXggYW5kIFRydTY0CisgICAgICAgICAgVW5peCku CisKKyAgIFN0cnVjdCB0aW1ldmFsIGFuZC9vciB0aW1lem9uZSBub3QgZGVjbGFyZWQ6CisgICAg ICAgICAgSW4gc29tZSBjYXNlcywgbWVyZWx5IGluY2x1ZGluZyB0aGUgYXBwcm9wcmlhdGUgdGlt ZS5oIGhlYWRlcgorICAgICAgICAgIGZpbGVzIGlzIHN0aWxsIG5vdCBlbm91Z2guIFBPU0lYLjEg ZG9lcyBub3QgZGVmaW5lIHRoZSB0aW1ldmFsCisgICAgICAgICAgc3RydWN0LCBhbmQgc28gdGhl IGl0ZW1zIHdlIG5lZWQgZnJvbSB0aGUgaGVhZGVyIGFyZSBwcm90ZWN0ZWQKKyAgICAgICAgICBh Z2FpbnN0IHVzIGJ5ICNpZm5kZWYgX1BPU0lYX1NPVVJDRSBvciBzb21lc3VjaC4gSW4gdGhpcyBj YXNlLAorICAgICAgICAgIHdlIGhhdmUgdG8gZGVjbGFyZSB0aGUgdGltZXZhbCAoYW5kIHRpbWV6 b25lKSBzdHJ1Y3RzIG91cnNlbHZlcy4KKyAgICAgICAgICBUbyBmb3JjZSB0aGlzLCBpbmNsdWRl IC1ERENMVElNRVZBTCBpbiBDRkxBR1MuCisKKyAgIFdhcm5pbmdzIGFib3V0IGRuX2V4cGFuZCgp IEFyZ3VtZW50ICM0CisgICAgICAgICAgV0FSTklORzogYXJndW1lbnQgaXMgaW5jb21wYXRpYmxl IHdpdGggcHJvdG90eXAuIEl0J3MgdGhlIG9sZAorICAgICAgICAgIGNoYXIgdmVyc3VzIHVuc2ln bmVkIGNoYXIgc3R1cGlkaXR5IGFnYWluLiBUcnkgdG8gZmluZCBhCisgICAgICAgICAgY29tcGls ZXIgc3dpdGNoIGxpa2UgR0NDJ3MgIi1mdW5zaWduZWQtY2hhciIuIEZhaWxpbmcgdGhhdCwgYWRk CisgICAgICAgICAgLURDS1FVRVJZVFlQRT14eHggdG8gQ0ZMQUdTLCB3aGVyZSB4eHggaXMgd2hh dGV2ZXIgJ21hbgorICAgICAgICAgIGRuX2V4cGFuZCcgdGVsbHMgeW91IHRoZSB0eXBlIG9mIHRo ZSA0dGggYXJndW1lbnQgc2hvdWxkIGJlCisgICAgICAgICAgKHByZXN1bWFibHkgZWl0aGVyIGNo YXIgb3IgdW5zaWduZWQgY2hhcjsgaW4gdGhlIGxhdHRlciBjYXNlIHVzZQorICAgICAgICAgIENI QVIgdG8gYXZvaWQgY29uZnVzaW9uIGNhdXNlZCBieSBtdWx0aXBsZSB3b3Jkcy4KKworICAgU3dp dGNoIFRhYmxlIE92ZXJmbG93IChpbiBbMTI2XWNrY3VuaS5jKQorICAgICAgICAgIEFkZCAtRE5P VU5JQ09ERSB0byBDRkxBR1MuCisKKyAgIENvbXBpbGUtdGltZSB3YXJuaW5ncyBhYm91dCBja19v dXQoKSBvciB0Z2V0c3RyKCkgb3IgdHB1dHMoKToKKyAgICAgICAgICBFYXN5IHNvbHV0aW9uOiBB ZGQgLUROT1RFUk1DQVAgdG8gQ0ZMQUdTLiBCdXQgdGhlbiB5b3UgbG9zZSB0aGUKKyAgICAgICAg ICBTQ1JFRU4gZnVuY3Rpb24uIFJlYWwgc29sdXRpb246IFRyeSBhbGwgZGlmZmVyZW50IGNvbWJp bmF0aW9ucworICAgICAgICAgIG9mIHRoZSBmb2xsb3dpbmcgQ0ZMQUdTOgorCistRFRQVVRTQVJH VFlQRT1jaGFyICAgIC1EVFBVVFNGTlRZUEU9aW50CistRFRQVVRTQVJHVFlQRT1pbnQgICAgIC1E VFBVVFNGTlRZUEU9dm9pZAorCisgICAgICAgICAgVW50aWwgdGhlIHdhcm5pbmdzIGdvIGF3YXks IGV4Y2VwdCBtYXliZSAiY2tfb3V0YzogcmV0dXJuIHdpdGggYQorICAgICAgICAgIHZhbHVlIGlu IGEgZnVuY3Rpb24gcmV0dXJuaW5nIHZvaWQiLCBhbmQgaW4gdGhhdCBjYXNlIGFsc28gYWRkCisg ICAgICAgICAgLURUUFVUU0lTVk9JRC4KKworICAgIlBhc3NpbmcgYXJnIDEgb2YgdG8gdHB1dHMo KSBtYWtlcyBwb2ludGVyIGZyb20gaW50ZWdlciB3aXRob3V0IGEKKyAgICAgICAgICBjYXN0IjoK KyAgICAgICAgICBBZGQgLURUUFVUU0FSRzFDT05TVCB0byBDRkxBR1MuCisKKyAgICJVbmRlZmlu ZWQgc3ltYm9sOiBkdXAyIgorICAgICAgICAgIEFkZCAtRE5PWkVYRUMgdG8gQ0ZMQUdTLgorCisg ICAiaGVhZGVyIGZpbGUgJ3Rlcm1jYXAuaCcgbm90IGZvdW5kIgorICAgICAgICAgIEFkZCAtRE5P SFRFUk1DQVAgdG8gQ0ZMQUdTLgorCisgICBPdGhlciBkaWZmaWN1bHRpZXMgYXJlIGdlbmVyYWxs eSBvZiB0aGUgIndoZXJlIGlzIGN1cnNlcy5oIGFuZCB3aGF0IGlzCisgICBpdCBjYWxsZWQgdGhp cyB3ZWVrPyIgdmFyaWV0eSAobW9zdCBlYXNpbHkgc29sdmVkIGJ5IG1ha2luZyBzeW1saW5rcyBp bgorICAgdGhlIGluY2x1ZGUgYW5kIGxpYiBkaXJlY3RvcmllcyksIG9yIG92ZXJ6ZWFsb3VzIGNv bXBsYWludHMgcmVnYXJkaW5nCisgICB0eXBlIG1pc21hdGNoZXMgaW4gZnVuY3Rpb24gY2FsbHMg YmVjYXVzZSBvZiB0aGUgdG90YWxseSBuZWVkbGVzcyBhbmQKKyAgIHNpbGx5IHNpZ25lZCB2ZXJz dXMgdW5zaWduZWQgY2hhciBjb25mbGljdCAoKiksIGV0Yy4gSW4gYW55IGNhc2UsCisgICBwbGVh c2Ugc2VuZCBhbnkgY29tcGlsYXRpb24gb3IgbGlua2luZyB3YXJuaW5ncyBvciBlcnJvcnMgdG8g dGhlCisgICBhdXRob3IsIHByZWZlcmFibHkgYWxvbmcgd2l0aCBmaXhlcy4KKworICAgICAqIEMt S2VybWl0IGRvZXMgbm90IHVzZSB0aGUgc2lnbmVkIHByb3BlcnR5IG9mIGNoYXJzIGF0IGFsbCBh bnl3aGVyZSwKKyAgICAgICBldmVyLiBTbyBpZiBhbGwgY2hhcnMgYW5kIGNoYXIgKidzIGNhbiBi ZSBtYWRlIHVuc2lnbmVkIGF0IGNvbXBpbGUKKyAgICAgICB0aW1lLCBhcyB0aGV5IGNhbiBpbiBn Y2Mgd2l0aCAiLWZ1bnNpZ25lZC1jaGFyIiwgdGhleSBzaG91bGQgYmUuCisKKyAgIElNUE9SVEFO VDogSWYgeW91IGZpbmQgYW55IG9mIHRoZXNlIGhpbnRzIG5lY2Vzc2FyeSBmb3IgYSBwYXJ0aWN1 bGFyCisgICBtYWtlIHRhcmdldCAob3IgeW91IGhpdCB1cG9uIG90aGVycyBub3QgbGlzdGVkIGhl cmUpLCBQTEVBU0UgU0VORCBBCisgICBSRVBPUlQgVE86CisKK1sxMjdda2VybWl0LXN1cHBvcnRA Y29sdW1iaWEuZWR1CisKKzQuMS4gVGhlIFVuaXggTWFrZWZpbGUKKworICAgWyBbMTI4XVRvcCBd IFsgWzEyOV1Db250ZW50cyBdIFsgWzEzMF1TZWN0aW9uIENvbnRlbnRzIF0gWyBbMTMxXU5leHQg XQorICAgWyBbMTMyXVByZXZpb3VzIF0KKworICAgSWYgeW91ciBkaXN0cmlidXRpb24gZG9lcyBu b3QgY29udGFpbiBhIGZpbGUgd2l0aCB0aGUgbmFtZSAibWFrZWZpbGUiCisgICBvciAiTWFrZWZp bGUiLCB0aGVuIHJlbmFtZSB0aGUgZmlsZSBjYWxsZWQgY2t1a2VyLm1hayB0byBtYWtlZmlsZToK KworbXYgY2t1a2VyLm1hayBtYWtlZmlsZQorCisgICBUaGVuIHR5cGUgIm1ha2UgeHh4Iiwgd2hl cmUgeHh4IGlzIHRoZSBwbGF0Zm9ybSB5b3Ugd2FudCB0byBidWlsZAorICAgQy1LZXJtaXQgZm9y LiBUaGVzZSBhcmUgbGlzdGVkIGluIHRoZSBbMTMzXWNvbW1lbnRzIGF0IHRoZSB0b3Agb2YgdGhl CisgICBtYWtlZmlsZS4gRm9yIGV4YW1wbGUsIHRvIGJ1aWxkIEMtS2VybWl0IGZvciBMaW51eCwg dHlwZToKKworbWFrZSBsaW51eAorCisgICBIZXJlIGFyZSBzb21lIHR5cGljYWwgZXhhbXBsZXM6 CisKKyAgICAgVGFyZ2V0ICAgIERlc2NyaXB0aW9uCisgICAgIGxpbnV4ICAgICBMaW51eCwgYW55 IHZlcnNpb24gb24gYW55IGhhcmR3YXJlIHBsYXRmb3JtCisgICAgIG9wZW5ic2QgICBPcGVuQlNE LCBhbnkgdmVyc2lvbiBvbiBhbnkgaGFyZHdhcmUgcGxhdGZvcm0KKyAgICAgYWl4NDMgICAgIEFJ WCA0LjMKKyAgICAgYWl4NDNnICAgIEFJWCA0LjMsIGJ1aWx0IHdpdGggZ2NjCisgICAgIHNvbGFy aXM5ICBTb2xhcmlzIDkKKyAgICAgc29sYXJpczlnIFNvbGFyaXMgOSBidWlsdCB3aXRoIGdjYwor ICAgICBocHV4MTEwMCAgSFAtVVggMTEtcG9pbnQtYW55dGhpbmcKKworICAgVGhlIG1ha2VmaWxl IGlzIHF1aXRlIGxvbmcsIGFuZCBhdCBsZWFzdCB0d28gdmVyc2lvbnMgb2YgVW5peCwgU0NPCisg ICBYZW5peC8yODYgYW5kIDIueCBCU0QsIGNhbm5vdCBjb3BlIHdpdGggaXRzIGxlbmd0aC4gQW4g YXR0ZW1wdCB0byAibWFrZQorICAgc2NvMjg2IiBnaXZlcyB0aGUgbWVzc2FnZSAiTWFrZTogQ2Fu bm90IGFsbG9jIG1lbSBmb3IgZW52Li4gU3RvcCIuCisgICBTb2x1dGlvbjogZWRpdCBhd2F5IHNv bWUgb3IgYWxsIG9mIHRoZSBub25yZWxldmFudCBtYXRlcmlhbCBmcm9tIHRoZQorICAgbWFrZWZp bGUuIChBIHNlcGFyYXRlIHZlcnNpb24gb2YgdGhlIG1ha2VmaWxlIGlzIHByb3ZpZGVkIGZvciBC U0QgMi54OgorICAgY2t1YnMyLm1hayBidXQgQy1LZXJtaXQgOC4wIGNhbid0IGJlIGJ1aWx0IGZv ciBCU0QgMi54IC0tIGl0IGhhcyBzaW1wbHkKKyAgIGdyb3duIHRvbyBsYXJnZS4pCisKKyAgIFNv bWUgbWFrZSBwcm9ncmFtcyByZXBvcnRlZGx5IGNhbm5vdCBoYW5kbGUgY29udGludWVkIGxpbmVz IChsaW5lcworICAgZW5kaW5nIGluIGJhY2tzbGFzaCAoXCkpLiBJZiB5b3UgaGF2ZSBhIHByb2Js ZW0gd2l0aCB0aGUgbWFrZWZpbGUsIHRyeQorICAgZWRpdGluZyB0aGUgbWFrZWZpbGUgdG8gam9p biB0aGUgY29udGludWVkIGxpbmVzIChyZW1vdmUgdGhlCisgICBiYWNrc2xhc2hlcyBhbmQgdGhl IGZvbGxvd2luZyBsaW5lZmVlZCkuCisKKyAgIE90aGVyIG1ha2VmaWxlIHRyb3VibGVzIG1heSBv Y2N1ciBiZWNhdXNlIHRhYnMgaW4gdGhlIG1ha2VmaWxlIGhhdmUKKyAgIHNvbWVob3cgYmVlbiBj b252ZXJ0ZWQgdG8gc3BhY2VzLiBTcGFjZXMgYW5kIHRhYnMgYXJlIGRpc3RpbmN0IGluIFVuaXgK KyAgIG1ha2VmaWxlcy4KKworICAgU2ltaWxhcmx5LCBjYXJyaWFnZSByZXR1cm5zIG1pZ2h0IGhh dmUgYmVlbiBhZGRlZCB0byB0aGUgZW5kIG9mIGVhY2gKKyAgIGxpbmUsIHdoaWNoIGFsc28gcHJv dmVzIGNvbmZ1c2luZyB0byBtb3N0IFVuaXggdmVyc2lvbnMgb2YgbWFrZS4KKworICAgQ2hlY2sg dG8gc2VlIGlmIHRoZXJlIGFyZSBjb21tZW50cyBhYm91dCB5b3VyIHBhcnRpY3VsYXIgdmVyc2lv biBpbiBpdHMKKyAgIG1ha2VmaWxlIHRhcmdldCBpdHNlbGYuIEluIGEgdGV4dCBlZGl0b3Igc3Vj aCBhcyBFTUFDUyBvciBWSSwgc2VhcmNoCisgICBmb3IgdGhlIG1ha2UgZW50cnkgbmFtZSBmb2xs b3dlZCBieSBhIGNvbG9uLCBlLmcuICJsaW51eDoiIChpZiB5b3UKKyAgIHJlYWxseSBhcmUgYnVp bGRpbmcgQy1LZXJtaXQgZm9yIExpbnV4LCBkbyB0aGlzIG5vdykuCisKKyAgIENoZWNrIHRvIHNl ZSBpZiB0aGVyZSBhcmUgY29tbWVudHMgYWJvdXQgeW91ciBwYXJ0aWN1bGFyIHZlcnNpb24gaW4g dGhlCisgICBbMTM0XWNrdWJ3ci50eHQgZmlsZSAoWzEzNV1DTElDSyBIRVJFIGZvciB0aGUgV2Vi IHZlcnNpb24pLgorCisgICBJZiB5b3UgaGF2ZSB0cm91YmxlIHdpdGggYnVpbGRpbmcgWzEzNl1j a3dhcnQuYywgb3IgcnVubmluZyB0aGUKKyAgIHJlc3VsdGluZyB3YXJ0IHByZXByb2Nlc3NvciBw cm9ncmFtIG9uIFsxMzddY2tjcHJvLnc6CisKKyAgICAxLiBKdXN0ICJ0b3VjaCIgdGhlIFsxMzhd Y2tjcHJvLmMgZmlsZSB0aGF0IGNvbWVzIGluIHRoZSBkaXN0cmlidXRpb24KKyAgICAgICBhbmQg dGhlbiBnaXZlIHRoZSAibWFrZSIgY29tbWFuZCBhZ2Fpbiwgb3I6CisgICAgMi4gQ29tcGlsZSBj a3dhcnQuYyAiYnkgaGFuZCI6IGNjIC1vIHdhcnQgY2t3YXJ0LmMsIG9yOgorICAgIDMuIFRyeSB2 YXJpb3VzIG90aGVyIHRyaWNrcy4gRS5nLiBvbmUgTGludXggdXNlciByZXBvcnRlZCB0aGF0IHRo YXQKKyAgICAgICBhZGRpbmcgdGhlICJzdGF0aWMiIHN3aXRjaCB0byB0aGUgcnVsZSBmb3IgYnVp bGRpbmcgd2FydCBmaXhlZAorICAgICAgIGV2ZXJ5dGhpbmc6CisKK3dhcnQ6IGNrd2FydC4kKEVY VCkKKyAgICAgICAgJChDQykgLXN0YXRpYyAtbyB3YXJ0IGNrd2FydC4kKEVYVCkgJChMSUJTKQor CisgICBJZiB5b3VyIGNvbXBpbGVyIHN1cHBvcnRzIGEgY29tcGlsZS10aW1lIG9wdGlvbiB0byB0 cmVhdCBBTEwgY2hhcnMgKGFuZAorICAgY2hhciAqJ3MsIGV0YykgYXMgdW5zaWduZWQsIGJ5IGFs bCBtZWFucyB1c2UgaXQgLS0gYW5kIHNlbmQgbWUgZW1haWwgdG8KKyAgIGxldCBtZSBrbm93IHdo YXQgaXQgaXMgKEkgYWxyZWFkeSBrbm93IGFib3V0IGdjYyAtZnVuc2lnbmVkLWNoYXIpLgorCisg ICBUbyBhZGQgY29tcGlsYXRpb24gb3B0aW9ucyAod2hpY2ggYXJlIGV4cGxhaW5lZCBsYXRlciBp biB0aGlzIGRvY3VtZW50KQorICAgdG8geW91ciBtYWtlZmlsZSB0YXJnZXQgd2l0aG91dCBlZGl0 aW5nIHRoZSBtYWtlZmlsZSwgaW5jbHVkZQorICAgIktGTEFHUz0uLi4iIG9uIHRoZSBtYWtlIGNv bW1hbmQgbGluZSwgZm9yIGV4YW1wbGU6CisKK21ha2UgbGludXggS0ZMQUdTPS1ETk9ERUJVRwor bWFrZSBic2QgIktGTEFHUz0tREtBTkpJIC1ETk9ERUJVRyAtRE5PVExPRyAtRERZTkFNSUMgLVVU Q1BTT0NLRVQiCisKKyAgIE11bHRpcGxlIG9wdGlvbnMgbXVzdCBiZSBzZXBhcmF0ZWQgYnkgc3Bh Y2VzLiBRdW90ZXMgYXJlIG5lY2Vzc2FyeSBpZgorICAgdGhlIEtGTEFHUz0gY2xhdXNlIGluY2x1 ZGVzIHNwYWNlcy4gVGhlIEtGTEFHUyBhcmUgYWRkZWQgdG8gdGhlIGVuZCBvZgorICAgdGhlIENG TEFHUyB0aGF0IGFyZSBkZWZpbmVkIGluIHRoZSBzZWxlY3RlZCBtYWtlZmlsZSB0YXJnZXQuIEZv cgorICAgZXhhbXBsZSwgdGhlICJic2QiIGVudHJ5IGluY2x1ZGVzIC1EQlNENCAtRFRDUFNPQ0tF VCwgc28gdGhlIHNlY29uZAorICAgZXhhbXBsZSBhYm92ZSBjb21waWxlcyBLZXJtaXQgd2l0aCB0 aGUgZm9sbG93aW5nIG9wdGlvbnM6CisKKy1EQlNENCAtRFRDUFNPQ0tFVCAtREtBTkpJIC1ETk9E RUJVRyAtRE5PVExPRyAtRERZTkFNSUMgLVVUQ1BTT0NLRVQKKworICAgKE5vdGljZSBob3cgIi1V VENQU09DS0VUIiBpcyB1c2VkIHRvIG5lZ2F0ZSB0aGUgZWZmZWN0IG9mIHRoZQorICAgIi1EVENQ U09DS0VUIiBvcHRpb24gdGhhdCBpcyBpbmNsdWRlZCBpbiB0aGUgbWFrZWZpbGUgdGFyZ2V0LikK KworICAgV0FSTklORzogQmUgY2FyZWZ1bCB3aXRoIEtGTEFHUy4gSWYgeW91IGJ1aWxkIEMtS2Vy bWl0LCBjaGFuZ2Ugc29tZQorICAgZmlsZXMsIGFuZCB0aGVuIHJ1biBtYWtlIGFnYWluIHVzaW5n IHRoZSBzYW1lIG1ha2UgZW50cnkgYnV0IHNwZWNpZnlpbmcKKyAgIGRpZmZlcmVudCBLRkxBR1Mg dGhhbiBsYXN0IHRpbWUsIG1ha2Ugd29uJ3QgZGV0ZWN0IGl0IGFuZCB5b3UgY291bGQKKyAgIGVh c2lseSB3aW5kIHVwIHdpdGggaW5jb25zaXN0ZW50IG9iamVjdCBtb2R1bGVzLCBlLmcuIHNvbWUg b2YgdGhlbQorICAgYnVpbHQgd2l0aCBhIGNlcnRhaW4gb3B0aW9uLCBvdGhlcnMgbm90LiBXaGVu IGluIGRvdWJ0LCAibWFrZSBjbGVhbiIKKyAgIGZpcnN0IHRvIG1ha2Ugc3VyZSBhbGwgeW91ciBv YmplY3QgZmlsZXMgYXJlIGNvbnNpc3RlbnQuIFNpbWlsYXJseSwgaWYKKyAgIHlvdSBjaGFuZ2Ug Q0ZMQUdTLCBMSUJTLCBvciBhbnkgb3RoZXIgaXRlbXMgaW4gdGhlIG1ha2VmaWxlLCBvciB5b3UK KyAgIHJlYnVpbGQgdXNpbmcgYSBkaWZmZXJlbnQgbWFrZWZpbGUgdGFyZ2V0LCAibWFrZSBjbGVh biIgZmlyc3QuCisKKyAgIElmIHlvdSBjcmVhdGUgYSBuZXcgbWFrZWZpbGUgdGFyZ2V0LCB1c2Ug c3RhdGljIGxpbmtpbmcgaWYgcG9zc2libGUuCisgICBFdmVuIHRob3VnaCB0aGlzIG1ha2VzIHlv dXIgQy1LZXJtaXQgYmluYXJ5IGJpZ2dlciwgdGhlIHJlc3VsdGluZworICAgYmluYXJ5IHdpbGwg YmUgbW9yZSBwb3J0YWJsZS4gRHluYW1pY2FsbHkgbGlua2VkIGJpbmFyaWVzIHRlbmQgdG8gcnVu CisgICBvbmx5IG9uIHRoZSBleGFjdCBjb25maWd1cmF0aW9uIGFuZCB2ZXJzaW9uIHdoZXJlIHRo ZXkgd2VyZSBidWlsdDsgb24KKyAgIG90aGVycywgaW52b2NhdGlvbiB0ZW5kcyB0byBmYWlsIHdp dGggYSBtZXNzYWdlIGxpa2U6CisKK0Nhbid0IGZpbmQgc2hhcmVkIGxpYnJhcnkgImxpYmMuc28u Mi4xIgorCis0LjIuIFRoZSBDLUtlcm1pdCBJbml0aWFsaXphdGlvbiBGaWxlCisKKyAgIFsgWzEz OV1Ub3AgXSBbIFsxNDBdQ29udGVudHMgXSBbIFsxNDFdU2VjdGlvbiBDb250ZW50cyBdIFsgWzE0 Ml1OZXh0IF0KKyAgIFsgWzE0M11QcmV2aW91cyBdCisKKyAgIChUaGlzIHNlY3Rpb24gaXMgb2Jz b2xldGUuKSBSZWFkIFsxNDRdU2VjdGlvbiA1IGFib3V0IHRoZQorICAgaW5pdGlhbGl6YXRpb24g ZmlsZS4KKworNC4zLiBUaGUgMi54IEJTRCBNYWtlZmlsZQorCisgICBbIFsxNDVdVG9wIF0gWyBb MTQ2XUNvbnRlbnRzIF0gWyBbMTQ3XVNlY3Rpb24gQ29udGVudHMgXSBbIFsxNDhdTmV4dCBdCisg ICBbIFsxNDldUHJldmlvdXMgXQorCisgICAgIFRoaXMgc2VjdGlvbiBpcyBvYnNvbGV0ZS4gQy1L ZXJtaXQgNi4wIHdhcyB0aGUgbGFzdCByZWxlYXNlIHRoYXQKKyAgICAgY291bGQgYmUgYnVpbHQg b24gUERQLTExIGJhc2VkIEJTRCB2ZXJzaW9ucy4KKworNC40LiBUaGUgUGxhbiA5IE1ha2VmaWxl CisKKyAgIFsgWzE1MF1Ub3AgXSBbIFsxNTFdQ29udGVudHMgXSBbIFsxNTJdU2VjdGlvbiBDb250 ZW50cyBdIFsgWzE1M11OZXh0IF0KKyAgIFsgWzE1NF1QcmV2aW91cyBdCisKKyAgIFVzZSB0aGUg c2VwYXJhdGUgbWFrZWZpbGUgWzE1NV1ja3BrZXIubWsuIE5PVEU6IFRoZSBQbGFuIDkgdmVyc2lv biBvZgorICAgQy1LZXJtaXQgOC4wIGhhcyBub3QgeWV0IGJlZW4gYnVpbHQuIFRoZXJlIHNob3Vs ZCBiZSBubyBpbXBlZGltZW50IHRvCisgICBidWlsZGluZyBpdC4gSG93ZXZlciwgZXZlbiB3aGVu IGJ1aWx0IHN1Y2Nlc3NmdWxseSwgY2VydGFpbiBrZXkKKyAgIGZlYXR1cmVzIGFyZSBtaXNzaW5n LCBub3RhYmx5IFRDUC9JUCBuZXR3b3JraW5nLgorCis0LjUuIE1ha2VmaWxlIEZhaWx1cmVzCisK KyAgIFsgWzE1Nl1Ub3AgXSBbIFsxNTddQ29udGVudHMgXSBbIFsxNThdU2VjdGlvbiBDb250ZW50 cyBdIFsKKyAgIFsxNTldUHJldmlvdXMgXQorCisgICBGaXJzdCwgYmUgc3VyZSB0aGUgc291cmNl IGZpbGVzIGFyZSBzdG9yZWQgb24geW91ciBjdXJyZW50IGRpc2sgYW5kCisgICBkaXJlY3Rvcnkg d2l0aCB0aGUgcmlnaHQgbmFtZXMgKGluIGxvd2VyY2FzZSkuIFNlY29uZCwgbWFrZSBzdXJlIHRo YXQKKyAgIHRoZSBtYWtlZmlsZSBpdHNlbGYgZG9lcyBub3QgY29udGFpbiBhbnkgbGluZXMgd2l0 aCBsZWFkaW5nIHNwYWNlczoKKyAgIGluZGVudGVkIGxpbmVzIG11c3QgYWxsIHN0YXJ0IHdpdGgg aG9yaXpvbnRhbCBUQUIsIGFuZCBubyBzcGFjZXMuCisKKyAgIFRoZW4gbWFrZSBzdXJlIHRoYXQg eW91ciBVbml4IFBBVEggaXMgZGVmaW5lZCB0byBmaW5kIHRoZSBhcHByb3ByaWF0ZQorICAgY29t cGlsZXIgZm9yIHlvdXIgbWFrZWZpbGUgdGFyZ2V0LiBGb3IgZXhhbXBsZSwgb24gU3VuT1Mgc3lz dGVtcywgIm1ha2UKKyAgIHN1bm9zNDEiIGJ1aWxkcyBDLUtlcm1pdCBmb3IgdGhlIEJTRCBlbnZp cm9ubWVudCwgYW5kIGFzc3VtZXMgdGhhdAorICAgL3Vzci91Y2IvY2Mgd2lsbCBiZSB1c2VkIGZv ciBjb21waWxhdGlvbiBhbmQgbGlua2luZy4gSWYgeW91ciBQQVRIIGhhcworICAgL3Vzci81Ymlu IGFoZWFkIG9mIC91c3IvdWNiLCB5b3UgY2FuIGhhdmUgcHJvYmxlbXMgYXQgY29tcGlsZSBvciBs aW5rCisgICB0aW1lIChhIGNvbW1vbmx5IHJlcG9ydGVkIHN5bXB0b20gaXMgdGhlIGluYWJpbGl0 eSB0byBmaW5kICJmdGltZSIKKyAgIGR1cmluZyBsaW5raW5nKS4gRml4IHN1Y2ggcHJvYmxlbXMg YnkgcmVkZWZpbmluZyB5b3VyIFVuaXggUEFUSCwgb3IgYnkKKyAgIHNwZWNpZnlpbmcgdGhlIGFw cHJvcHJpYXRlICJjYyIgaW4gQ0M9IGFuZCBDQzI9IHN0YXRlbWVudHMgaW4geW91cgorICAgbWFr ZWZpbGUgdGFyZ2V0LgorCisgICBEdXJpbmcgZWRpdHMgMTY2LTE2NywgY29uc2lkZXJhYmxlIGVm Zm9ydCB3ZW50IGludG8gbWFraW5nIEMtS2VybWl0CisgICBjb21waWxhYmxlIGJ5IEFOU0kgQyBj b21waWxlcnMuIFRoaXMgaW5jbHVkZXMgcHJvdG90eXBpbmcgYWxsIG9mCisgICBDLUtlcm1pdCdz IGZ1bmN0aW9ucywgYW5kIGluY2x1ZGluZyB0aGUgQU5TSS1kZWZpbmVkIHN5c3RlbSBoZWFkZXIK KyAgIGZpbGVzIGZvciBzeXN0ZW0gYW5kIGxpYnJhcnkgZnVuY3Rpb25zLCBhcyBkZWZpbmVkIGlu IEsmUiwgc2Vjb25kCisgICBlZGl0aW9uOiA8c3RyaW5nLmg+LCA8c3RkbGliLmg+LCA8dW5pc3Rk Lmg+IChleGNlcHQgaW4gTmVYVFNURVAgdGhpcyBpcworICAgPGxpYmMuaD4pLCBhbmQgPHN5cy9z dGR0eXBlcy5oPi4gSWYgeW91IGdldCB3YXJuaW5ncyBhYm91dCBhbnkgb2YgdGhlc2UKKyAgIGhl YWRlciBmaWxlcyBub3QgYmVpbmcgZm91bmQsIG9yIGFib3V0IGFyZ3VtZW50IG1pc21hdGNoZXMg aW52b2x2aW5nCisgICBwaWRfdCwgdWlkX3QsIG9yIGdpZF90LCBsb29rIGluIGNrY2RlYi5oIGFu ZCBtYWtlIGFtZW5kbWVudHMuIEMtS2VybWl0CisgICBhc3N1bWVzIGl0IGlzIGJlaW5nIGNvbXBp bGVkIGJ5IGFuIEFOU0ktY29tcGxpYW50IEMgY29tcGlsZXIgaWYKKyAgIF9fU1REQ19fIGlzIGRl ZmluZWQsIG5vcm1hbGx5IGRlZmluZWQgYnkgdGhlIGNvbXBpbGVyIGl0c2VsZi4gWW91IGNhbgor ICAgZm9yY2UgQU5TSSBjb21waWxhdGlvbiB3aXRob3V0IGRlZmluaW5nIF9fU1REQ19fICh3aGlj aCBzb21lIGNvbXBpbGVycworICAgd29uJ3QgbGV0IHlvdSBkZWZpbmUpIGJ5IGluY2x1ZGluZyAt RENLX0FOU0lDIG9uIHRoZSBjYyBjb21tYW5kIGxpbmUuCisKKyAgIE9uIHRoZSBvdGhlciBoYW5k LCBpZiB5b3VyIGNvbXBpbGVyIGRlZmluZXMgX19TVERDX18gYnV0IHN0aWxsCisgICBjb21wbGFp bnMgYWJvdXQgdGhlIHN5bnRheCBvZiBLZXJtaXQncyBmdW5jdGlvbiBwcm90b3R5cGVzLCB5b3Ug Y2FuCisgICBkaXNhYmxlIHRoZSBBTlNJLXN0eWxlIGZ1bmN0aW9uIHByb3RvdHlwaW5nIGJ5IGlu Y2x1ZGluZyAtRE5PQU5TSSBvbgorICAgdGhlIGNvbW1hbmQgbGluZS4KKworICAgRm9yIFNDTyBP cGVuU2VydmVyLCBVTklYLCBPRFQsIGFuZCBYRU5JWCBjb21waWxhdGlvbnMsIGJlIHN1cmUgdG8g cGljaworICAgdGhlIG1vc3QgYXBwcm9wcmlhdGUgWzE2MF1tYWtlZmlsZSB0YXJnZXQsIGFuZCBi ZSBzdXJlIHlvdSBoYXZlCisgICBpbnN0YWxsZWQgYW4gU0NPIGRldmVsb3BtZW50IHN5c3RlbSB0 aGF0IGlzIGtleWVkIHRvIHlvdXIgZXhhY3QgU0NPCisgICBvcGVyYXRpbmcgc3lzdGVtIHJlbGVh c2UsIGRvd24gdG8gdGhlIG1pbm9yIHZlcnNpb24gKGxpa2UgMi4zLjEpLgorCisgICBBbHNvIG5v dGUgdGhhdCBTQ08gZGlzdHJpYnV0ZXMgc29tZSBvZiBpdHMgbGlicmFyaWVzIGluIGVuY3J5cHRl ZCBmb3JtLAorICAgYW5kIHRoZXkgbXVzdCBiZSBkZWNyeXB0ZWQgYmVmb3JlIEMtS2VybWl0IGNh biBiZSBsaW5rZWQgd2l0aCB0aGVtLiBJZgorICAgbm90LCB5b3UgbWlnaHQgc2VlIGEgbWVzc2Fn ZSBsaWtlOgorCitsZDogZmlsZSAvdXNyL2xpYi9saWJzb2NrZXQuYSBpcyBvZiB1bmtub3duIHR5 cGU6IG1hZ2ljIG51bWJlciA9IDYzNjUKKworICAgVG8gZGVjcnlwdCwgeW91IG11c3Qgc3VwcGx5 IGEga2V5IChwYXNzd29yZCkgdGhhdCBjYW1lIHdpdGggeW91cgorICAgbGljZW5zZS4gQ2FsbCBT Q08gZm9yIGZ1cnRoZXIgaW5mby4KKworICAgSWYgeW91ciBjb21waWxlciB1c2VzIHNvbWV0aGlu ZyBvdGhlciB0aGFuIGludCBmb3IgdGhlIHBpZCAocHJvY2VzcyBpZCkKKyAgIGRhdGEgdHlwZSwg cHV0IC1EUElEX1Q9cGlkX3Qgb3Igd2hhdGV2ZXIgaW4geW91ciBDRkxBR1MuCisKKyAgIElmIHlv dSBnZXQgY29tcGxhaW50cyBhYm91dCB1bmtub3duIGRhdGEgdHlwZXMgdWlkX3QgYW5kIGdpZF90 LCBwdXQKKyAgIC1EVUlEX1Q9eHh4IC1ER0lEX1Q9eXl5IGluIHlvdXIgQ0ZMQUdTLCB3aGVyZSB4 eHggYW5kIHl5eSBhcmUgdGhlCisgICBhcHByb3ByaWF0ZSB0eXBlcy4KKworICAgSWYgeW91ciBj b21waWxhdGlvbiBmYWlscyBiZWNhdXNlIG9mIGNvbmZsaWN0aW5nIG9yIGR1cGxpY2F0ZQorICAg ZGVjbGFyYXRpb25zIGZvciBzeXNfZXJybGlzdCwgYWRkIC1EVVNFX1NUUkVSUk9SIG9yIC1ETkRT WVNFUlJMSVNUIHRvCisgICBDRkxBR1MuCisKKyAgIElmIHlvdXIgY29tcGlsYXRpb24gZGllcyBi ZWNhdXNlIGdldHB3bmFtKCkgaXMgYmVpbmcgcmVkZWNsYXJlZCAob3IKKyAgIGJlY2F1c2Ugb2Yg ImNvbmZsaWN0aW5nIHR5cGVzIGZvciBnZXR3cG5hbSIpLCBhZGQgLUROREdQV05BTSB0byB5b3Vy CisgICBDRkxBR1MuIElmIHRoYXQgZG9lc24ndCB3b3JrLCB0aGVuIGFkZCAtRERDR1BXTkFNIHRv IHlvdXIgQ0ZMQUdTIChzZWUKKyAgIGNrdWZpby5jIGFyb3VuZCBsaW5lIDQ0MCkuCisKKyAgIElm IHRoZSBjb21waWxlciBjb21wbGFpbnMgYWJvdXQgdGhlIGRlY2xhcmF0aW9uIG9mIGdldHB3bmFt KCkgZHVyaW5nIGFuCisgICBBTlNJIEMgY29tcGlsYXRpb24sIHJlbW92ZSB0aGUgZGVjbGFyYXRp b24gZnJvbSBja3VmaW8uYyBvciBjaGFuZ2UgdGhlCisgICBhcmd1bWVudCBpbiB0aGUgcHJvdG90 eXBlIGZyb20gKGNoYXIgKikgdG8gKGNvbnN0IGNoYXIgKikuCisKKyAgIElmIHlvdSBnZXQgY29t cGxhaW50cyB0aGF0IGdldHB3dWlkKCkgaXMgYmVpbmcgY2FsbGVkIHdpdGggYW4gaW1wcm9wZXIK KyAgIHR5cGUsIHB1dCAtRFBXSURfVD14eCBpbiB5b3VyIENGTEFHUy4KKworICAgSWYgeW91IGdl dCBjb21waWxlLXRpbWUgd2FybmluZ3MgdGhhdCB0X2Jya2Mgb3IgdF9lb2ZjICh0Y2hhcnMKKyAg IHN0cnVjdHVyZSBtZW1iZXJzLCB1c2VkIGluIEJTRC1iYXNlZCB2ZXJzaW9ucykgYXJlIHVuZGVm aW5lZCwgb3IKKyAgIHN0cnVjdHVyZS1tZW1iZXItIHJlbGF0ZWQgd2FybmluZ3MgdGhhdCBtaWdo dCBiZSB0cmFjZWQgdG8gdGhpcyBmYWN0LAorICAgYWRkIC1ETk9CUktDIHRvIENGTEFHUy4KKwor ICAgSWYgeW91IGdldCBhIGxpbmtlciBtZXNzYWdlIHRvIHRoZSBlZmZlY3QgdGhhdCBfc2V0cmV1 aWQgb3IgX3NldHJlZ2lkCisgICBpcyBub3QgZGVmaW5lZCwgYWRkIC1ETk9TRVRSRVUgdG8gQ0ZM QUdTLCBvciBhZGQgLURDS1RZUF9IPWJsYWggdG8KKyAgIENGTEFHUyB0byBtYWtlIEMtS2VybWl0 IHJlYWQgdGhlIHJpZ2h0IDx0eXBlcy5oPi1raW5kLW9mLWZpbGUgdG8gcGljaworICAgdXAgdGhl c2UgZGVmaW5pdGlvbnMuCisKKyAgIElmIHlvdSBnZXQgYSBtZXNzYWdlIHRoYXQgX3BvcGVuIGlz IHVuZGVmaW5lZCwgYWRkIC1ETk9QT1BFTiB0byBDRkxBR1MuCisKKyAgIElmIHlvdSBnZXQgYSBj b21wbGFpbnQgYXQgY29tcGlsZSB0aW1lIGFib3V0IGFuIGlsbGVnYWwgcG9pbnRlci1pbnRlZ2Vy CisgICBjb21iaW5hdGlvbiBpbiBja3VmaW8uYyBpbnZvbHZpbmcgcG9wZW4oKSwgb3IgYXQgbGlu ayB0aW1lIHRoYXQgX3BvcGVuCisgICBpcyBhbiB1bmRlZmluZWQgc3ltYm9sLCBhZGQgdGhlIGRl Y2xhcmF0aW9uICJGSUxFICpwb3BlbigpOyIgdG8gdGhlCisgICBmdW5jdGlvbiB6eGNtZCgpIGlu IGNrdWZpby5jICh0aGlzIGRlY2xhcmF0aW9uIGlzIHN1cHBvc2VkIHRvIGJlIGluCisgICA8c3Rk aW8uaD4pLiBJZiBtYWtpbmcgdGhpcyBjaGFuZ2UgZG9lcyBub3QgaGVscCwgdGhlbiBhcHBhcmVu dGx5IHlvdXIKKyAgIFVuaXggZG9lcyBub3QgaGF2ZSB0aGUgcG9wZW4oKSBmdW5jdGlvbiwgc28g eW91IHNob3VsZCBhZGQgLUROT1BPUEVOIHRvCisgICB5b3VyIG1ha2UgZW50cnksIGluIHdoaWNo IGNhc2UgY2VydGFpbiBmdW5jdGlvbnMgaW52b2x2aW5nICJmaWxlIiBpL28KKyAgIHRvIHRoZSBz dGFuZGFyZCBpbnB1dCBhbmQgb3V0cHV0IG9mIHN1YnByb2Nlc3NlcyB3aWxsIG5vdCBiZSBhdmFp bGFibGUuCisKKyAgIElmIHlvdXIgbGlua2VyIGNvbXBsYWlucyB0aGF0IF9nZXRjd2QgaXMgdW5k ZWZpbmVkLCB5b3UgY2FuIGFkZCBhCisgICBnZXRjd2QoKSBmdW5jdGlvbiB0byBja3VmaW8uYywg b3IgYWRkIGl0IHRvIHlvdXIgbGliYy5hIGxpYnJhcnkgdXNpbmcKKyAgIGFyOgorCisjaW5jbHVk ZSA8c3RkaW8uaD4KKworY2hhciAqCitnZXRjd2QoYnVmLHNpemUpIGNoYXIgKmJ1ZjsgaW50IHNp emU7IHsKKyNpZm5kZWYgTk9QT1BFTgorI2lmZGVmIERDTFBPUEVOCisgICAgRklMRSAqcG9wZW4o KTsKKyNlbmRpZgorICAgIEZJTEUgKnBmcDsKKworICAgIGlmICghYnVmKSByZXR1cm4oTlVMTCk7 CisgICAgaWYgKCEocGZwID0gcG9wZW4oInB3ZCIsInIiKSkpIHJldHVybihOVUxMKTsKKyAgICBm Z2V0cyhidWYsc2l6ZS0yLHBmcCk7CisgICAgcGNsb3NlKHBmcCk7CisgICAgYnVmW3N0cmxlbihi dWYpLTFdID0gJ1wwJzsKKyAgICByZXR1cm4oKGNoYXIgKilidWYpOworI2Vsc2UKKyAgICBidWZb MF0gPSAnXDAnOworICAgIHJldHVybihOVUxMKTsKKyNlbmRpZiAvKiBOT1BPUEVOICovCit9CisK KyNpZmRlZiBOT1BPUEVOCitGSUxFICpwb3BlbihzLHQpIGNoYXIgKnMsKnQ7IHsKKyAgICByZXR1 cm4oTlVMTCk7Cit9CisjZW5kaWYgLyogTk9QT1BFTiAqLworCisgICBJZiB5b3UgZ2V0IGNvbXBs YWludHMgYWJvdXQgTlBST0MgaGF2aW5nIGFuIGludmFsaWQgdmFsdWUsIGFkZCBhIHZhbGlkCisg ICBkZWZpbml0aW9uIGZvciBpdCAoZGVwZW5kcyBvbiB5b3VyIHN5c3RlbSksIGFzIGluIHRoZSBj cmF5IGVudHJ5LgorCisgICBJZiB5b3UgZ2V0IHNvbWUgc3ltYm9sIHRoYXQncyBtdWx0aXBseSBk ZWZpbmVkLCBpdCBwcm9iYWJseSBtZWFucyB0aGF0CisgICBhIHZhcmlhYmxlIG5hbWUgdXNlZCBi eSBLZXJtaXQgaXMgYWxzbyB1c2VkIGluIG9uZSBvZiB5b3VyIHN5c3RlbQorICAgbGlicmFyaWVz IHRoYXQgS2VybWl0IGlzIGxpbmtlZCB3aXRoLiBGb3IgZXhhbXBsZSwgdW5kZXIgUEMvSVggc29t ZQorICAgbGlicmFyeSBoYXMgYSB2YXJpYWJsZSBvciBmdW5jdGlvbiBjYWxsZWQgImRhdGEiLCBh bmQgdGhlIHZhcmlhYmxlCisgICAiZGF0YSIgaXMgYWxzbyB1c2VkIGV4dGVuc2l2ZWx5IGJ5IEtl cm1pdC4gUmF0aGVyIHRoYW4gZWRpdCB0aGUgS2VybWl0CisgICBzb3VyY2UgZmlsZXMsIGp1c3Qg cHV0IGEgLUQgaW4gdGhlIG1ha2UgZW50cnkgQ0ZMQUdTIHRvIGNoYW5nZSB0aGUKKyAgIEtlcm1p dCBzeW1ib2wgYXQgY29tcGlsZSB0aW1lLiBJbiB0aGlzIGV4YW1wbGUsIGl0IG1pZ2h0IGJlCisg ICAtRGRhdGE9eGRhdGEuCisKKyAgIFNvbWUgc3ltYm9sIGlzIGRlZmluZWQgaW4geW91ciBzeXN0 ZW0ncyBoZWFkZXIgZmlsZXMsIGJ1dCBpdCBwcm9kdWNlcworICAgY29uZmxpY3RzIHdpdGgsIG9y IHVuZGVzaXJlZCByZXN1bHRzIGZyb20sIEtlcm1pdC4gVHJ5IHVuZGVmaW5pbmcgdGhlCisgICBz eW1ib2wgaW4gdGhlIG1ha2VmaWxlIHRhcmdldCdzIENGTEFHUywgZm9yIGV4YW1wbGUgLVVGSU9O UkVBRC4KKworICAgU29tZSB3ZWxsLWtub3duIHN5bWJvbCBpcyBtaXNzaW5nIGZyb20geW91ciBz eXN0ZW0gaGVhZGVyIGZpbGVzLiBUcnkKKyAgIGRlZmluaW5nIGluIHRoZSBtYWtlZmlsZSB0YXJn ZXQncyBDRkxBR1MsIGZvciBleGFtcGxlIC1ERlJFQUQ9MS4KKworICAgWW91IGdldCBtYW55IHdh cm5pbmdzIGFib3V0IHBvaW50ZXIgbWlzbWF0Y2hlcy4gVGhpcyBwcm9iYWJseSBtZWFucworICAg dGhhdCBLZXJtaXQgaXMgYXNzdW1pbmcgYW4gaW50IHR5cGUgZm9yIHNpZ25hbCgpIHdoZW4gaXQg c2hvdWxkIGJlCisgICB2b2lkLCBvciB2aWNlLXZlcnNhLiBUcnkgYWRkaW5nIC1EU0lHX0kgKGZv ciBpbnRlZ2VyIHNpZ25hbCgpKSBvcgorICAgLURTSUdfViAoZm9yIHZvaWQpIHRvIENGTEFHUy4g T3IganVzdCBpbmNsdWRlIEtGTEFHUz0tRFNJR19WIChvcgorICAgd2hhdGV2ZXIpIGluIHlvdXIg Im1ha2UiIGNvbW1hbmQsIGZvciBleGFtcGxlOgorCittYWtlIGJzZCBLRkxBR1M9LURTSUdfVgor CisgICBZb3UgZ2V0IG1hbnkgbWVzc2FnZXMgYWJvdXQgdmFyaWFibGVzIHRoYXQgYXJlIGRlY2xh cmVkIGFuZC9vciBzZXQgYnV0CisgICBuZXZlciB1c2VkLiBJdCBpcyBkaWZmaWN1bHQgdG8gYXZv aWQgdGhlc2UgYmVjYXVzZSBvZiBhbGwgdGhlCisgICBjb25kaXRpb25hbCBjb21waWxhdGlvbiBp biB0aGUgcHJvZ3JhbS4gSWdub3JlIHRoZXNlIG1lc3NhZ2VzLgorCisgICBTb21lIG9mIEMtS2Vy bWl0J3MgbW9kdWxlcyBhcmUgc28gbGFyZ2UsIG9yIGNvbnRhaW4gc28gbWFueSBjaGFyYWN0ZXIK KyAgIHN0cmluZyBjb25zdGFudHMsIG9yIGFyZSBzbyBvZmZlbnNpdmUgaW4gc29tZSBvdGhlciB3 YXksIHRoYXQgc29tZSBDCisgICBjb21waWxlcnMgZ2l2ZSB1cCBhbmQgcmVmdXNlIHRvIGNvbXBp bGUgdGhlbS4gVGhpcyBpcyB1c3VhbGx5IGJlY2F1c2UKKyAgIHRoZSAtTyAob3B0aW1pemUpIG9w dGlvbiBpcyBpbmNsdWRlZCBpbiB0aGUgbWFrZSBlbnRyeS4gSWYgdGhpcyBoYXBwZW5zCisgICB0 byB5b3UsIHlvdSBjYW4gKGEpIHJlbW92ZSB0aGUgLU8gb3B0aW9uIGZyb20gdGhlIG1ha2UgZW50 cnksIHdoaWNoCisgICB3aWxsIHR1cm4gb2ZmIHRoZSBvcHRpbWl6ZXIgZm9yIEFMTCBtb2R1bGVz OyBvciAoYikgY29tcGlsZSB0aGUKKyAgIG9mZmVuZGluZyBtb2R1bGUocykgYnkgaGFuZCwgaW5j bHVkaW5nIGFsbCB0aGUgc3dpdGNoZXMgZnJvbSBtYWtlIGVudHJ5CisgICBleGNlcHQgZm9yIC1P LCBhbmQgdGhlbiBnaXZlIHRoZSBhcHByb3ByaWF0ZSAibWFrZSIgY29tbWFuZCBhZ2Fpbjsgb3IK KyAgIChjKSBpbmNyZWFzZSB0aGUgdmFsdWUgb2YgdGhlIC1PbGltaXQgb3B0aW9uLCBpZiB5b3Vy IGNvbXBpbGVyIHN1cHBvcnRzCisgICB0aGlzIG9wdGlvbjsgb3IgKGQpIGNoYW5nZSB0aGUgWzE2 MV1tYWtlZmlsZSB0YXJnZXQgdG8gZmlyc3QgY29tcGlsZQorICAgZWFjaCBvZmZlbmRpbmcgbW9k dWxlIGV4cGxpY2l0bHkgd2l0aG91dCBvcHRpbWl6YXRpb24sIHRoZW4gY29tcGlsZSB0aGUKKyAg IG90aGVycyBub3JtYWxseSAod2l0aCBvcHRpbWl6YXRpb24pLCBmb3IgZXhhbXBsZToKKworI0Zv cnR1bmUgMzI6MTYsIEZvcjpQcm8gMi4xIChtb3N0bHkgbGlrZSA0LjFic2QpCitmdDIxOgorICAg ICAgICBAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBGb3J0dW5lIDMyOjE2IEZv cjpQcm8gMi4xLi4uJworICAgICAgICAkKE1BS0UpIGNrdXVzeC4kKEVYVCkgIkNGTEFHUz0gLURO T0RFQlVHIC1EQlNENCAtREZUMjEgLUROT0ZJTEVIIFwKKyAgICAgICAgLVNZTSA4MDAgXCAtRERZ TkFNSUMgLUROT1NFVEJVRiAtRENLX0NVUlNFUyAkKEtGTEFHUykgLURQSURfVD1zaG9ydCIKKyAg ICAgICAgJChNQUtFKSBja3V4bGEuJChFWFQpICJDRkxBR1M9IC1ETk9ERUJVRyAtREJTRDQgLURG VDIxIC1ETk9GSUxFSCBcCisgICAgICAgIC1TWU0gODAwIFwgLUREWU5BTUlDIC1ETk9TRVRCVUYg LURDS19DVVJTRVMgJChLRkxBR1MpIC1EUElEX1Q9c2hvcnQiCisgICAgICAgICQoTUFLRSkgY2t1 ZGlhLiQoRVhUKSAiQ0ZMQUdTPSAtRE5PREVCVUcgLURCU0Q0IC1ERlQyMSAtRE5PRklMRUggXAor ICAgICAgICAtU1lNIDgwMCBcIC1ERFlOQU1JQyAtRE5PU0VUQlVGIC1EQ0tfQ1VSU0VTICQoS0ZM QUdTKSAtRFBJRF9UPXNob3J0IgorICAgICAgICAkKE1BS0UpIHdlcm1pdCAiQ0ZMQUdTPSAtTyAt RE5PREVCVUcgLURCU0Q0IC1ERlQyMSAtRE5PRklMRUggLVNZTSA4MDAgXAorICAgICAgICAtRERZ TkFNSUMgLUROT1NFVEJVRiAtRENLX0NVUlNFUyAkKEtGTEFHUykgLURQSURfVD1zaG9ydCIgXAor ICAgICAgICAiTE5LRkxBR1M9IC1uIC1zIiAiTElCUz0gLWxjdXJzZXMgLWx0ZXJtY2FwIC1sdiAt bG5ldCIKKworICAgQXMgYW4gZXh0cmVtZSBleGFtcGxlLCBzb21lIGNvbXBpbGVycyAoZS5nLiBn Y2Mgb24gdGhlIERHIEFWaWlPTikgaGF2ZQorICAgYmVlbiBrbm93biB0byBkdW1wIGNvcmUgd2hl biB0cnlpbmcgdG8gY29tcGlsZSBja3dhcnQuYyB3aXRoCisgICBvcHRpbWl6YXRpb24uIFNvIGp1 c3QgZG8gdGhpcyBvbmUgImJ5IGhhbmQiOgorCitjYyAtbyB3YXJ0IGNrd2FydC5jCisKKyAgIG9y OgorCit0b3VjaCBja2Nwcm8uYworCisgICBhbmQgdGhlbiBnaXZlIHRoZSAibWFrZSIgY29tbWFu ZCBhZ2Fpbi4KKworICAgU3BlYWtpbmcgb2Ygd2FydCwgaXQgaXMgdW5hdm9pZGFibGUgdGhhdCBz b21lIHBpY2t5IGNvbXBpbGVycyBtaWdodAorICAgZ2VuZXJhdGUgInN0YXRlbWVudCB1bnJlYWNo YWJsZSIgbWVzc2FnZXMgd2hlbiBjb21waWxpbmcgY2tjcHJvLmMuCisgICBVbnJlYWNoYWJsZSBz dGF0ZW1lbnRzIGNhbiBiZSBnZW5lcmF0ZWQgYnkgdGhlIHdhcnQgcHJvZ3JhbSwgd2hpY2gKKyAg IGdlbmVyYXRlcyBja2Nwcm8uYyBhdXRvbWF0aWNhbGx5IGZyb20gWzE2Ml1ja2Nwcm8udywgd2hp Y2ggdHJhbnNsYXRlcworICAgbGV4LWxpa2Ugc3RhdGUvaW5wdXQgY29uc3RydWN0aW9ucyBpbnRv IGEgYmlnIHN3aXRjaC9jYXNlIGNvbnN0cnVjdGlvbi4KKworICAgU29tZSBmdW5jdGlvbiBpbiBL ZXJtaXQgd3JlYWtzIGhhdm9jIHdoZW4gaXQgaXMgY2FsbGVkLiBDaGFuZ2UgYWxsCisgICBpbnZv Y2F0aW9ucyBvZiB0aGUgZnVuY3Rpb24gaW50byBhIG1hY3JvIHRoYXQgZXZhbHVhdGVzIHRvIHRo ZQorICAgYXBwcm9wcmlhdGUgcmV0dXJuIGNvZGUgdGhhdCB3b3VsZCBoYXZlIGJlZW4gcmV0dXJu ZWQgYnkgdGhlIGZ1bmN0aW9uCisgICBoYWQgaXQgYmVlbiBjYWxsZWQgYW5kIGZhaWxlZCwgZm9y IGV4YW1wbGU6IC1EemtzZWxmKCk9MC4gT2J2aW91c2x5IG5vdAorICAgYSBnb29kIGlkZWEgaWYg dGhlIGZ1bmN0aW9uIGlzIHJlYWxseSBuZWVkZWQuCisKKyAgIElmIHlvdSBoYXZlIGp1c3QgaW5z dGFsbGVkIFN1bk9TIDQuMS4yIG9yIDQuMS4zLCB5b3UgbWlnaHQgZmluZCB0aGF0CisgICBDLUtl cm1pdCAoYW5kIGFueSBvdGhlciBDIHByb2dyYW0pIGZhaWxzIHRvIGxpbmsgYmVjYXVzZSBvZiB1 bnJlc29sdmVkCisgICByZWZlcmVuY2VzIGZyb20gd2l0aGluIGxpYmMuIFRoaXMgaXMgYmVjYXVz ZSBvZiBhIG1pc3Rha2UgaW4gU3VuJ3MKKyAgIC91c3IvbGliL3NobGliLmV0YyBmaWxlcyBmb3Ig YnVpbGRpbmcgdGhlIG5ldyBsaWJjLiBDaGFuZ2UgdGhlIGxpYmMKKyAgIE1ha2VmaWxlIHNvIHRo YXQgdGhlICJsZCIgbGluZXMgaGF2ZSAiLWxkbCIgYXQgdGhlIGVuZC4gQ2hhbmdlIHRoZQorICAg UkVBRE1FIGZpbGUgdG8gc2F5ICJtdiB4Y2NzLm11bHRpYnl0ZS4geGNjcy5tdWx0aWJ5dGUubyIg YW5kIGZvbGxvdworICAgdGhhdCBpbnN0cnVjdGlvbi4KKworNS4gSU5TVEFMTElORyBUSEUgS0VS TUlUIEZJTEVTCisKKyAgIFsgWzE2M11Ub3AgXSBbIFsxNjRdQ29udGVudHMgXSBbIFsxNjVdTmV4 dCBdIFsgWzE2Nl1QcmV2aW91cyBdCisKKyAgIFNFQ1RJT04gQ09OVEVOVFMKKworNS4xLiBbMTY3 XVRoZSBDLUtlcm1pdCBJbml0aWFsaXphdGlvbiBGaWxlCis1LjIuIFsxNjhdVGV4dCBGaWxlcwor NS4zLiBbMTY5XUluc3RhbGxpbmcgdGhlIEtlcm1pdCBGaWxlcworNS40LiBbMTcwXVRoZSBNYWtl ZmlsZSBJbnN0YWxsIFRhcmdldAorCisgICBUaGUgQy1LZXJtaXQgZXhlY3V0YWJsZSBkb2VzIG5v dCBuZWVkIGFueSBleHRlcm5hbCBmaWxlcyB0byBydW4uCisgICBVbmxpa2UsIHNheSwgdGhlIGN1 IHByb2dyYW0sIHdoaWNoIG9uIG1vc3QgcGxhdGZvcm1zIGlzIHVzZWxlc3MgdW5sZXNzCisgICB5 b3UgKGFzIHJvb3QpIGVkaXQgdGhlIC91c3Ivc3Bvb2wvdXVjcC9TeXN0ZW1zIGFuZAorICAgL3Vz ci9zcG9vbC91dWNwL0RldmljZXMgZmlsZXMgdG8gc3VwcGx5IHdoYXRldmVyIG9ic2N1cmUgYW5k CisgICB1bmRvY3VtZW50ZWQgc3ludGF4IGlzIHJlcXVpcmVkIHRvIG1hdGNoIHNvbWUgc3VwcG9z ZWRseSB1c2VyLWZyaWVuZGx5CisgICBtbmVtb25pYyB0byB0aGUgcmVhbCBwYXRobmFtZSBvZiB3 aGF0ZXZlciBkZXZpY2UgeW91IHdhbnQgdG8gdXNlLAorICAgS2VybWl0IHJ1bnMgb24gaXRzIG93 biB3aXRob3V0IG5lZWRpbmcgYW55IGV4dGVybmFsIGNvbmZpZ3VyYXRpb24KKyAgIGZpbGVzLCBh bmQgbGV0cyB5b3UgcmVmZXIgdG8gZGV2aWNlIChhbmQgbmV0d29yayBob3N0cyBhbmQgc2Vydmlj ZXMpIGJ5CisgICB0aGVpciBvd24gbmF0dXJhbCB1bmRpc2d1aXNlZCBuYW1lcy4KKworICAgTmV2 ZXJ0aGVsZXNzLCBhIG51bWJlciBvZiBleHRlcm5hbCBmaWxlcyBjYW4gYmUgaW5zdGFsbGVkIGFs b25nIHdpdGgKKyAgIHRoZSBDLUtlcm1pdCBleGVjdXRhYmxlIGlmIHlvdSB3aXNoLiBUaGVzZSBp bmNsdWRlIGNvbmZpZ3VyYXRpb24gYW5kCisgICBjdXN0b21pemF0aW9uIGZpbGVzIHRoYXQgYXJl IHJlYWQgYnkgS2VybWl0IGFzIHdlbGwgYXMgZG9jdW1lbnRhdGlvbgorICAgZmlsZXMgdG8gYmUg cmVhZCBieSBwZW9wbGUuIEFsbCBvZiB0aGlzIG1hdGVyaWFsIGlzIChhKSBvcHRpb25hbCwgYW5k CisgICAoYikgYXZhaWxhYmxlIG9uIHRoZSBLZXJtaXQgd2Vic2l0ZToKKworWzE3MV1odHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvCisKKyAgIGFuZCB1c3VhbGx5IGluIGEgbW9yZSBwbGVh c2FudCBmb3JtLCBwZXJoYXBzIGFsc28gd2l0aCB1cGRhdGVkIGNvbnRlbnQuCisgICBTbyBpZiB5 b3VyIGNvbXB1dGVyIGlzIG9uIHRoZSBJbnRlcm5ldCwgdGhlcmUgaXMgbm8gbmVlZCB0byBpbnN0 YWxsCisgICBhbnl0aGluZyBidXQgdGhlIEtlcm1pdCBleGVjdXRhYmxlIGlmIHVzZXJzIGtub3cg aG93IHRvIGZpbmQgdGhlIEtlcm1pdAorICAgd2Vic2l0ZSAoYW5kIGlmIHRoZXkgZG9uJ3QsIEtl cm1pdCdzICJoZWxwIiBjb21tYW5kIHRlbGxzIHRoZW0pLgorCis1LjEuIFRoZSBDLUtlcm1pdCBJ bml0aWFsaXphdGlvbiBGaWxlCisKKyAgIEluIEMtS2VybWl0IDcuMCBhbmQgZWFybGllciwgdGhl IHN0YW5kYXJkIGluaXRpYWxpemF0aW9uIGZpbGUgd2FzIGEga2V5CisgICBDLUtlcm1pdCBjb21w b25lbnQgYmVjYXVzZToKKworICAgIGEuIEl0ICJsb2FkZWQiIHRoZSBkaWFsaW5nIGFuZCBuZXR3 b3JrIGRpcmVjdG9yaWVzLgorICAgIGIuIEl0IGRlZmluZWQgYWxsIHRoZSBtYWNyb3MgYW5kIHZh cmlhYmxlcyBmb3IgdGhlIHNlcnZpY2VzIGRpcmVjdG9yeS4KKyAgICBjLiBJdCBkZWZpbmVkIG1h Y3JvcyBmb3IgcXVpY2tseSBjaGFuZ2luZyBLZXJtaXQncyBmaWxlLXRyYW5zZmVyCisgICAgICAg cGVyZm9ybWFuY2UgdHVuaW5nLgorCisgICBUaGUgc3RhbmRhcmQgaW5pdGlhbGl6YXRpb24gZmls ZSBpcyBxdWl0ZSBsb25nIChtb3JlIHRoYW4gNjAwIGxpbmVzKQorICAgYW5kIHJlcXVpcmVzIG5v dGljZWFibGUgcHJvY2Vzc2luZyB0aW1lICh0aGUgc2xvd2VyIHRoZSBjb21wdXRlciwgdGhlCisg ICBtb3JlIG5vdGljZWFibGUpLCB5ZXQgZmV3IHBlb3BsZSBhY3R1YWxseSB1c2UgdGhlIHNlcnZp Y2VzIGRpcmVjdG9yeSwKKyAgIHdob3NlIGRlZmluaXRpb24gdGFrZXMgdXAgbW9zdCBvZiBpdHMg YnVsay4gTWVhbndoaWxlLCBpbiBDLUtlcm1pdCA4LjAsCisgICBtYW55IG9mIHRoZSByZW1haW5p bmcgZnVuY3Rpb25zIG9mIHRoZSBzdGFuZGFyZCBpbml0aWFsaXphdGlvbiBmaWxlIGFyZQorICAg bm93IGJ1aWx0IGluOyBmb3IgZXhhbXBsZSwgdGhlIEZBU1QsIENBVVRJT1VTLCBhbmQgUk9CVVNU IGNvbW1hbmRzLgorCisgICBNb3JlIHRvIHRoZSBwb2ludCwgbWFueSBvZiB0aGUgc2V0dGluZ3Mg dGhhdCBjb3VsZCBiZSBtYWRlIG9ubHkgaW4gdGhlCisgICBpbml0aWFsaXphdGlvbiBhbmQgY3Vz dG9taXphdGlvbiBmaWxlcyBjYW4gbm93IGJlIHBpY2tlZCB1cCBmcm9tCisgICBlbnZpcm9ubWVu dCB2YXJpYWJsZXMuIFRoZSBmaXJzdCBncm91cCBpZGVudGlmaWVzIGluaXRpYWxpemF0aW9uIGFu ZAorICAgZGlyZWN0b3J5IGZpbGVzOgorCisgICBDS0VSTUlUX0lOSQorICAgICAgICAgIFRoZSBw YXRoIG9mIHlvdXIgS2VybWl0IGluaXRpYWxpemF0aW9uIGZpbGUsIGlmIGFueS4gVGhpcworICAg ICAgICAgIG92ZXJyaWRlcyB0aGUgYnVpbHQtaW4gc2VhcmNoIGZvciAkSE9NRS8ua2VybXJjLgor CisgICBLX0NIQVJTRVQKKyAgICAgICAgICBUaGUgY2hhcmFjdGVyIHNldCB1c2VkIGZvciBlbmNv ZGluZyBsb2NhbCB0ZXh0IGZpbGVzLiBFcXVpdmFsZW50CisgICAgICAgICAgdG8gU0VUIEZJTEUg Q0hBUkFDVEVSLVNFVC4KKworICAgS19ESUFMX0RJUkVDVE9SWQorICAgICAgICAgIFRoZSBmdWxs IHBhdGhuYW1lIG9mIG9uZSBvciBtb3JlIEtlcm1pdCBkaWFsaW5nIGRpcmVjdG9yeSBmaWxlcy4K KyAgICAgICAgICBFcXVpdmFsZW50IHRvIFNFVCBESUFMIERJUkVDVE9SWS4KKworICAgS19ORVRf RElSRUNUT1JZCisgICAgICAgICAgVGhlIGZ1bGwgcGF0aG5hbWUgb2Ygb25lIG9yIG1vcmUgS2Vy bWl0IG5ldHdvcmsgZGlyZWN0b3J5IGZpbGVzLgorICAgICAgICAgIEVxdWl2YWxlbnQgdG8gU0VU IE5FVFdPUksgRElSRUNUT1JZLgorCisgICBLX0lORk9fRElSRUNUT1JZCisgICBLX0lORk9fRElS CisgICAgICAgICAgVGhlIGZ1bGwgcGF0aG5hbWUgb2YgYSBkaXJlY3RvcnkgY29udGFpbmluZyBL ZXJtaXQgKGlmIGFueSkKKyAgICAgICAgICBjb250YWluaW5nIGNrdWJ3ci50eHQgYW5kIG90aGVy IEtlcm1pdCB0ZXh0IGZpbGVzLiBPdmVycmlkZXMKKyAgICAgICAgICBLZXJtaXQncyBidWlsdC1p biBzZWFyY2ggZm9yIHRoaXMgZGlyZWN0b3J5LgorCisgICBUaGUgbmV4dCBncm91cCBpcyByZWxh dGVkIHRvIGRpYWxpbmcgbW9kZW1zOgorCisgICBLX0NPVU5UUllDT0RFCisgICAgICAgICAgVGhl IHRlbGVwaG9uaWMgbnVtZXJpYyBjb3VudHJ5IGNvZGUgZm9yIHRoaXMgbG9jYXRpb24sIGUuZy4g MQorICAgICAgICAgIGZvciBOb3J0aCBBbWVyaWNhIG9yIDM5IGZvciBJdGFseS4gSXQgaXMgcmVj b21tZW5kZWQgdGhhdCB0aGlzCisgICAgICAgICAgb25lIGJlIHNldCBmb3IgYWxsIHVzZXJzLCBz eXN0ZW0td2lkZS4gTm90IG9ubHkgaXMgaXQgdXNlZCB0bworICAgICAgICAgIHByb2Nlc3MgcG9y dGFibGUtZm9ybWF0IGRpYWxpbmcgZGlyZWN0b3J5IGVudHJpZXMsIGJ1dCBpdCBpcworICAgICAg ICAgIGFsc28gY29tcGFyZWQgYWdhaW5zdCBLZXJtaXQncyBidWlsdC1pbiBsaXN0IG9mICJ0b25l IGNvdW50cmllcyIKKyAgICAgICAgICB0byBzZWUgaWYgdG9uZSBkaWFsaW5nIGNhbiBiZSB1c2Vk LiBFcXVpdmFsZW50IHRvIEtlcm1pdCdzIFNFVAorICAgICAgICAgIERJQUwgQ09VTlRSWS1DT0RF IGNvbW1hbmQuCisKKyAgIEtfQVJFQUNPREUKKyAgICAgICAgICBUaGUgdGVsZXBob25pYyBudW1l cmljIGFyZWEgY29kZSBmb3IgdGhpcyBsb2NhdGlvbiwgZS5nLiAyMTIgZm9yCisgICAgICAgICAg TWFuaGF0dGFuLCBOZXcgWW9yaywgVVNBLiBSZWNvbW1lbmQgdGhpcyBvbmUgYWxzbyBiZSBzZXQK KyAgICAgICAgICBzeXN0ZW0td2lkZSwgc28gc2hhcmVkIHBvcnRhYmxlLWZvcm1hdCBkaWFsaW5n IGRpcmVjdG9yaWVzIHdpbGwKKyAgICAgICAgICB3b3JrIGF1dG9tYXRpY2FsbHkgZm9yIGV2ZXJ5 Ym9keS4gRXF1aXZhbGVudCB0byBLZXJtaXQncyBTRVQKKyAgICAgICAgICBESUFMIEFSRUEtQ09E RSBjb21tYW5kLgorCisgICBLX0RJQUxfTUVUSE9ECisgICAgICAgICAgVE9ORSBvciBQVUxTRS4g RXF1aXZhbGVudCB0byBLZXJtaXQncyBTRVQgRElBTCBNRVRIT0QgY29tbWFuZC4KKyAgICAgICAg ICBJZiBhIGRpYWwgbWV0aG9kIGlzIG5vdCBzZXQgZXhwbGljaXRseSAob3IgaW1wbGljaXRseSBm cm9tIHRoZQorICAgICAgICAgIGNvdW50cnkgY29kZSksIEtlcm1pdCBkb2VzIG5vdCBzcGVjaWZ5 IGEgZGlhbGluZyBtZXRob2QsIGFuZAorICAgICAgICAgIHVzZXMgdGhlIG1vZGVtJ3MgZGVmYXVs dCBtZXRob2QsIHdoaWNoIHRlbmRzIHRvIGJlIHB1bHNlLgorCisgICBLX0lOVExfUFJFRklYCisg ICAgICAgICAgVGhlIHRlbGVwaG9uaWMgbnVtZXJpYyBpbnRlcm5hdGlvbmFsIGRpYWxpbmcgcHJl Zml4IGZvciB0aGlzCisgICAgICAgICAgbG9jYXRpb24uIEVxdWl2YWxlbnQgdG8gS2VybWl0J3Mg U0VUIERJQUwgSU5UTC1QUkVGSVggY29tbWFuZC4KKworICAgS19MRF9QUkVGSVgKKyAgICAgICAg ICBUaGUgdGVsZXBob25pYyBudW1lcmljIGxvbmctZGlzdGFuY2UgZGlhbGluZyBwcmVmaXggZm9y IHRoaXMKKyAgICAgICAgICBsb2NhdGlvbi4gRXF1aXZhbGVudCB0byBLZXJtaXQncyBTRVQgRElB TCBMRC1QUkVGSVggY29tbWFuZC4KKworICAgS19QQlhfSUNQCisgICAgICAgICAgVGhlIHRlbGVw aG9uaWMgbnVtZXJpYyBQQlggaW50ZXJuYWwgY2FsbCBwcmVmaXggZm9yIHRoaXMKKyAgICAgICAg ICBsb2NhdGlvbi4gRXF1aXZhbGVudCB0byBLZXJtaXQncyBTRVQgRElBTCBQQlgtSU5TSURFLVBS RUZJWAorICAgICAgICAgIGNvbW1hbmQuCisKKyAgIEtfUEJYX09DUAorICAgICAgICAgIFRoZSB0 ZWxlcGhvbmljIG51bWVyaWMgUEJYIGV4dGVybmFsIGNhbGwgcHJlZml4IGZvciB0aGlzCisgICAg ICAgICAgbG9jYXRpb24uIEVxdWl2YWxlbnQgdG8gS2VybWl0J3MgU0VUIERJQUwgUEJYLU9VVFNJ REUtUFJFRklYCisgICAgICAgICAgY29tbWFuZC4KKworICAgS19QQlhfWENICisgICAgICAgICAg VGhlIHRlbGVwaG9uaWMgbnVtZXJpYyBQQlggZXhjaGFuZ2UgKGZpcnN0IHBhcnQgb2YgdGhlCisg ICAgICAgICAgc3Vic2NyaWJlciBudW1iZXIpLiBFcXVpdmFsZW50IHRvIEtlcm1pdCdzIFNFVCBE SUFMIFBCWC1FWENIQU5HRQorICAgICAgICAgIGNvbW1hbmQuCisKKyAgIEtfVEZfQVJFQUNPREUK KyAgICAgICAgICBBIGxpc3Qgb2Ygb25lIG9yIG1vcmUgdGVsZXBob25pYyBudW1lcmljIHRvbGwt ZnJlZSBhcmVhIGNvZGVzLgorCisgICBLX1RGX1BSRUZJWAorICAgICAgICAgIFRoZSB0ZWxlcGhv bmljIG51bWVyaWMgdG9sbC1mcmVlIGRpYWxpbmcgcHJlZml4LCBpbiBjYXNlIGl0IGlzCisgICAg ICAgICAgZGlmZmVyZW50IGZyb20gdGhlIGxvbmctZGlzdGFuY2UgcHJlZml4LiBFcXVpdmFsZW50 IHRvIEtlcm1pdCdzCisgICAgICAgICAgU0VUIERJQUwgVEYtUFJFRklYIGNvbW1hbmQuCisKKyAg IFRoZSBmaW5hbCBncm91cCBpbmNsdWRlcyB3ZWxsLWtub3duIGVudmlyb25tZW50IHZhcmlhYmxl cyB0aGF0IGFyZSBhbHNvCisgICB1c2VkIGJ5IEtlcm1pdDoKKworICAgQ0RQQVRICisgICAgICAg ICAgV2hlcmUgdGhlIENEIGNvbW1hbmQgc2hvdWxkIGxvb2sgZm9yIHJlbGF0aXZlIGRpcmVjdG9y eSBuYW1lcy4KKworICAgU0hFTEwKKyAgICAgICAgICBUaGUgcGF0aCBvZiB5b3VyIFVuaXggc2hl bGwuIFVzZWQgYnkgdGhlIFJVTiAoISkgY29tbWFuZCB0bworICAgICAgICAgIGNob29zZSB0aGUg c2hlbGwgdG8gZXhlY3V0ZSBpdHMgYXJndW1lbnRzLgorCisgICBVU0VSCisgICAgICAgICAgWW91 ciBVbml4IHVzZXJuYW1lLgorCisgICBFRElUT1IKKyAgICAgICAgICBUaGUgbmFtZSBvciBwYXRo IG9mIHlvdXIgcHJlZmVycmVkIGVkaXRvciAodXNlZCBieSB0aGUgRURJVAorICAgICAgICAgIGNv bW1hbmQpLiBFcXVpdmFsZW50IHRvIFNFVCBFRElUT1IuCisKKyAgIEJST1dTRVIKKyAgICAgICAg ICBUaGUgbmFtZSBvciBwYXRoIG9mIHlvdXIgcHJlZmVycmVkIHdlYiBicm93c2VyICh1c2VkIGJ5 IHRoZQorICAgICAgICAgIEJST1dTRSBjb21tYW5kKS4gRXF1aXZhbGVudCB0byBLZXJtaXQncyBT RVQgQlJPV1NFUiBjb21tYW5kLgorCisgICBEb2VzIHRoaXMgbWVhbiB0aGUgaW5pdGlhbGl6YXRp b24gZmlsZSBjYW4gYmUgYWJvbGlzaGVkPyBJIHRoaW5rIHNvLgorICAgSGVyZSdzIHdoeToKKwor ICAgICAqIEtlcm1pdCBhbHJlYWR5IGRvZXMgZXZlcnl0aGluZyBtb3N0IHBlb3BsZSB3YW50IGl0 IHRvIGRvIHdpdGhvdXQKKyAgICAgICBvbmUuCisgICAgICogSW1wb3J0YW50IHNpdGUtc3BlY2lm aWMgY3VzdG9taXphdGlvbnMgY2FuIGJlIGRvbmUgd2l0aCBnbG9iYWwKKyAgICAgICBlbnZpcm9u bWVudCB2YXJpYWJsZXMuCisgICAgICogVGhlcmUgaXMgbm8gbG9uZ2VyIGFueSBuZWVkIGZvciBl dmVyeWJvZHkgdG8gaGF2ZSB0byB1c2UgdGhlCisgICAgICAgc3RhbmRhcmQgaW5pdGlhbGl6YXRp b24gZmlsZS4KKyAgICAgKiBUaGlzIG1lYW5zIHRoYXQgeW91ciBpbml0aWFsaXphdGlvbiBmaWxl LCBpZiB5b3Ugd2FudCBvbmUsIGNhbgorICAgICAgIGNvbnRhaW4geW91ciBvd24gcGVyc29uYWwg c2V0dGluZ3MsIGRlZmluaXRpb25zLCBhbmQgcHJlZmVyZW5jZXMsCisgICAgICAgcmF0aGVyIHRo YW4gNjAwIGxpbmVzIG9mICJzdGFuZGFyZCIgc2V0dXBzLgorICAgICAqIElmIHlvdSBzdGlsbCB3 YW50IHRoZSBzZXJ2aWNlcyBkaXJlY3RvcnksIHlvdSBjYW4gZWl0aGVyIFRBS0UgdGhlCisgICAg ICAgc3RhbmRhcmQgaW5pdGlhbGl6YXRpb24gZmlsZSAod2hpY2ggbXVzdCBiZSBuYW1lZCBhbnl0 aGluZyBvdGhlcgorICAgICAgIHRoYW4gJEhPTUUvLmtlcm1yYyB0byBhdm9pZCBiZWluZyBleGVj dXRlZCBhdXRvbWF0aWNhbGx5IGV2ZXJ5IHRpbWUKKyAgICAgICB5b3Ugc3RhcnQgS2VybWl0KSwg b3IgeW91IGNhbiBtYWtlIGl0IGEga2VyYmFuZyBzY3JpcHQgYW5kIGV4ZWN1dGUKKyAgICAgICBp dCAiZGlyZWN0bHkiICh0aGUgWzE3Ml1tYWtlZmlsZSBpbnN0YWxsIHRhcmdldCBkb2VzIHRoaXMg Zm9yIHlvdQorICAgICAgIGJ5IHB1dHRpbmcgY2tlcm1pdC5pbmkgaW4gdGhlIHNhbWUgZGlyZWN0 b3J5IGFzIHRoZSBLZXJtaXQgYmluYXJ5LAorICAgICAgIGFkZGluZyB0aGUgYXBwcm9wcmlhdGUg S2VyYmFuZyBsaW5lIHRvIHRoZSB0b3AsIGFuZCBnaXZpbmcgaXQKKyAgICAgICBleGVjdXRlIHBl cm1pc3Npb24pLgorCisgICBJbiBmYWN0LCB5b3UgY2FuIHB1dCBhbnkgbnVtYmVyIG9mIGtlcmJh bmcgc2NyaXB0cyBpbiB5b3VyIFBBVEggdG8KKyAgIHN0YXJ0IHVwIEMtS2VybWl0IGluIGRpZmZl cmVudCB3YXlzLCB0byBoYXZlIGl0IGFkb3B0IGNlcnRhaW4gc2V0dGluZ3MsCisgICBtYWtlIHBh cnRpY3VsYXIgY29ubmVjdGlvbnMsIGV4ZWN1dGUgY29tcGxpY2F0ZWQgc2NyaXB0cywgd2hhdGV2 ZXIgeW91CisgICB3YW50LgorCisgICBBbmQgaW4gQy1LZXJtaXQgOS4wIHRoZSBpbml0aWFsaXph dGlvbiBoYXMgaW5kZWVkIGJlZW4gInJldGlyZWQiIGJ5CisgICByZW5hbWluZyBpdCB0byBva2Vy bWl0LmluaSwgYW5kIHJlcGxhY2VkIGJ5IGEgc3R1YiBja2VybWl0LmluaSB0aGF0CisgICBkb2Vz bid0IGRvIGFueXRoaW5nIGJ1dCBwcmludCBhIG1lc3NhZ2UuIERpdHRvIGZvciBja2VybW9kLmlu aS4KKworNS4yLiBUZXh0IEZpbGVzCisKKyAgIFRoZXNlIGFyZSBlbnRpcmVseSBvcHRpb25hbC4g TWFueSBvZiB0aGVtIGFyZSB0byBiZSBmb3VuZCBhdCB0aGUgS2VybWl0CisgICB3ZWJzaXRlIGlu IEhUTUwgZm9ybSAoaS5lLiBhcyBXZWIgcGFnZXMgd2l0aCBjbGlja2FibGUgbGlua3MsIGV0Yyks IGFuZAorICAgdmVyeSBsaWtlbHkgYWxzbyBtb3JlIHVwIHRvIGRhdGUuIFBsYWluLXRleHQgZmls ZXMgdGhhdCBjb3JyZXNwb25kIHRvCisgICBXZWIgcGFnZXMgd2VyZSBzaW1wbHkgImR1bXBlZCIg YnkgTHlueCBmcm9tIHRoZSB3ZWJzaXRlIHRvIHBsYWluIEFTQ0lJCisgICB0ZXh0LiBUaGUgZm9y bWF0IGlzIHdoYXRldmVyIEx5bnggdXNlcyBmb3IgdGhpcyBwdXJwb3NlLiBJZiB5b3Ugd2lzaCwK KyAgIHlvdSBjYW4gaW5zdGFsbCB0aGVtIG9uIHlvdXIgY29tcHV0ZXIgYXMgZGVzY3JpYmVkIGlu IHRoZSBbMTczXW5leHQKKyAgIHNlY3Rpb24uCisKKyAgIFsxNzRdQ09QWUlORy5UWFQKKyAgICAg ICAgICBDb3B5cmlnaHQgbm90aWNlLCBwZXJtaXNzaW9ucywgYW5kIGRpc2NsYWltZXIuCisKKyAg IFsxNzVdY2tlcm1pdC5pbmkKKyAgICAgICAgICBUaGUgc3RhbmRhcmQgaW5pdGlhbGl6YXRpb24g ZmlsZSwgaW50ZW5kZWQgbW9yZSBmb3IgcmVmZXJlbmNlCisgICAgICAgICAgKGluIG1vc3QgY2Fz ZXMpIHRoYW4gYWN0dWFsIHVzZTsgc2VlIFsxNzZdU2VjdGlvbiA1LjEuCisKKyAgIFsxNzddY2tl cm1vZC5pbmkKKyAgICAgICAgICBBIHNhbXBsZSBjdXN0b21pemF0aW9uIGZpbGUuCisKKyAgIFsx NzhdY2tlcm1pdDcwLnR4dAorICAgICAgICAgIFN1cHBsZW1lbnQgdG8gWzE3OV1Vc2luZyBDLUtl cm1pdCBmb3IgdmVyc2lvbiA3LjAuIEF2YWlsYWJsZSBvbgorICAgICAgICAgIHRoZSBLZXJtaXQg d2Vic2l0ZSBhczoKKyAgICAgICAgICBbMTgwXWh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0NzAuaHRtbAorCisgICBbMTgxXWNrZXJtaXQ4MC50eHQKKyAgICAgICAgICBTdXBw bGVtZW50IHRvIFsxODJdVXNpbmcgQy1LZXJtaXQgZm9yIHZlcnNpb24gOC4wLiBBdmFpbGFibGUg b24KKyAgICAgICAgICB0aGUgS2VybWl0IHdlYnNpdGUgYXM6CisgICAgICAgICAgWzE4M11odHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwKKworICAgWzE4NF1ja2Vy bWl0OTAudHh0CisgICAgICAgICAgU3VwcGxlbWVudCB0byBbMTg1XVVzaW5nIEMtS2VybWl0IGZv ciB2ZXJzaW9uIDkuMC4gQXZhaWxhYmxlIG9uCisgICAgICAgICAgdGhlIEtlcm1pdCB3ZWJzaXRl IGFzOgorICAgICAgICAgIFsxODZdaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQ5MC5odG1sCisKKyAgIFsxODddY2tjYndyLnR4dAorICAgICAgICAgIFRoZSBnZW5lcmFsIEMt S2VybWl0IGhpbnRzIGFuZCB0aXBzICgiYmV3YXJlIikgZmlsZS4gQXZhaWxhYmxlCisgICAgICAg ICAgb24gdGhlIEtlcm1pdCB3ZWJzaXRlIGFzOgorICAgICAgICAgIFsxODhdaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrY2J3ci5odG1sCisKKyAgIFsxODldY2t1YndyLnR4dAorICAg ICAgICAgIFRoZSBVbml4LXNwZWNpZmljIEMtS2VybWl0IGhpbnRzIGFuZCB0aXBzIGZpbGUuIEF2 YWlsYWJsZSBvbiB0aGUKKyAgICAgICAgICBLZXJtaXQgd2Vic2l0ZSBhczoKKyAgICAgICAgICBb MTkwXWh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbAorCisgICBbMTkx XWNrdWlucy50eHQKKyAgICAgICAgICBVbml4IEMtS2VybWl0IEluc3RhbGxhdGlvbiBJbnN0cnVj dGlvbnMgKHRoaXMgZmlsZSkuIEF2YWlsYWJsZQorICAgICAgICAgIG9uIHRoZSBLZXJtaXQgd2Vi c2l0ZSBhczoKKyAgICAgICAgICBbMTkyXWh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a3VpbnMuaHRtbAorCisgICBbMTkzXWNrY2NmZy50eHQKKyAgICAgICAgICBDLUtlcm1pdCBjb21w aWxlLXRpbWUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBBdmFpbGFibGUgb24gdGhlCisgICAgICAg ICAgS2VybWl0IHdlYnNpdGUgYXM6CisgICAgICAgICAgWzE5NF1odHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwKKworICAgWzE5NV1ja2NwbG0udHh0CisgICAgICAgICAg VGhlIEMtS2VybWl0IHByb2dyYW0gbG9naWMgbWFudWFsLiBBdmFpbGFibGUgb24gdGhlIEtlcm1p dAorICAgICAgICAgIHdlYnNpdGUgYXM6CisgICAgICAgICAgWzE5Nl1odHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tjcGxtLmh0bWwKKworICAgWzE5N11jYV9jZXJ0cy5wZW0KKyAgICAg ICAgICBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgY2VydGlmaWNhdGVzIGZvciBzZWN1cmUgY29ubmVj dGlvbnMgKHNlZQorICAgICAgICAgIFsxOThdU2VjdGlvbiAxNikuCisKKzUuMy4gSW5zdGFsbGlu ZyB0aGUgS2VybWl0IEZpbGVzCisKKyAgIFRoZXJlIGlzIGFuICJpbnN0YWxsIiB0YXJnZXQgaW4g dGhlIFsxOTldbWFrZWZpbGUgdGhhdCB5b3UgY2FuIHVzZSBpZgorICAgeW91IHdpc2guIEhvd2V2 ZXIsIHNpbmNlIGV2ZXJ5IHNpdGUgaGFzIGl0cyBvd24gbGF5b3V0IGFuZAorICAgcmVxdWlyZW1l bnRzLCBpdCBpcyBvZnRlbiBiZXR0ZXIgdG8gaW5zdGFsbCB0aGUgS2VybWl0IGZpbGVzIGJ5IGhh bmQuCisgICBZb3UgZG9uJ3QgaGF2ZSB0byB1c2UgdGhlIG1ha2VmaWxlIGluc3RhbGwgdGFyZ2V0 IHRvIGluc3RhbGwgQy1LZXJtaXQuCisgICBUaGlzIGlzIGVzcGVjaWFsbHkgdHJ1ZSBzaW5jZSBu b3QgYWxsIHNpdGVzIGJ1aWxkIEMtS2VybWl0IGZyb20gc291cmNlLAorICAgYW5kIHRoZXJlZm9y ZSBtaWdodCBub3QgZXZlbiBoYXZlIHRoZSBtYWtlZmlsZS4gQnV0IHlvdSBzaG91bGQgcmVhZAor ICAgdGhpcyBzZWN0aW9uIGluIGFueSBjYXNlLgorCisgICAgIElmIHlvdXIgY29tcHV0ZXIgYWxy ZWFkeSBoYXMgYW4gb2xkZXIgdmVyc2lvbiBvZiBDLUtlcm1pdCBpbnN0YWxsZWQsCisgICAgIHlv dSBzaG91bGQgcmVuYW1lIGl0IChlLmcuIHRvICJrZXJtaXQ2IiBvciAia2VybWl0NyIpIHNvIGlu IGNhc2UgeW91CisgICAgIGhhdmUgYW55IHRyb3VibGUgd2l0aCB0aGUgbmV3IHZlcnNpb24sIHRo ZSBvbGQgb25lIGlzIHN0aWxsCisgICAgIGF2YWlsYWJsZS4KKworICAgSW4gbW9zdCBjYXNlcywg eW91IG5lZWQgdG8gYmUgcm9vdCB0byBpbnN0YWxsIEMtS2VybWl0LCBpZiBvbmx5IHRvIGdhaW4K KyAgIHdyaXRlIGFjY2VzcyB0byBkaXJlY3RvcmllcyBpbiB3aGljaCB0aGUgYmluYXJ5IGFuZCBt YW51YWwgcGFnZSBhcmUgdG8KKyAgIGJlIGNvcGllZC4gVGhlIEMtS2VybWl0IGJpbmFyeSBzaG91 bGQgYmUgaW5zdGFsbGVkIGluIGEgZGlyZWN0b3J5IHRoYXQKKyAgIGlzIGluIHRoZSB1c2Vycycg UEFUSCwgYnV0IHRoYXQgaXMgbm90IGxpa2VseSB0byBiZSBvdmVyd3JpdHRlbiB3aGVuCisgICB5 b3UgaW5zdGFsbCBhIG5ldyB2ZXJzaW9uIG9mIHRoZSBvcGVyYXRpbmcgc3lzdGVtLiBBIGdvb2Qg Y2FuZGlkYXRlCisgICB3b3VsZCBiZSB0aGUgL3Vzci9sb2NhbC9iaW4vIGRpcmVjdG9yeSwgYnV0 IHRoZSBzcGVjaWZpYyBjaG9pY2UgaXMgc2l0ZQorICAgZGVwZW5kZW50LiBFeGFtcGxlIChhc3N1 bWluZyB0aGUgYXBwcm9wcmlhdGUgS2VybWl0IGJpbmFyeSBpcyBzdG9yZWQgaW4KKyAgIHlvdXIg Y3VycmVudCBkaXJlY3RvcnkgYXMgIndlcm1pdCIsIGUuZy4gYmVjYXVzZSB5b3UganVzdCBidWls dCBpdCBmcm9tCisgICBzb3VyY2UgYW5kIHRoYXQncyB0aGUgbmFtZSB0aGUgbWFrZWZpbGUgZ2F2 ZSBpdCk6CisKK212IHdlcm1pdCAvdXNyL2xvY2FsL2Jpbi9rZXJtaXQKK2NobW9kIDc1NSAvdXNy L2xvY2FsL2Jpbi9rZXJtaXQKKworICAgb3IgKG9ubHkgYWZ0ZXIgeW91IGZpbmlzaCByZWFkaW5n IHRoaXMgc2VjdGlvbiEpIHNpbXBseToKKworbWFrZSBpbnN0YWxsCisKKyAgIElNUE9SVEFOVDog SUYgQy1LRVJNSVQgSVMgVE8gQkUgVVNFRCBGT1IgRElBTElORyBPVVQsIHlvdSBtdXN0IGFsc28g ZG8KKyAgIHNvbWV0aGluZyB0byBnaXZlIGl0IGFjY2VzcyB0byB0aGUgZGlhbG91dCBkZXZpY2Vz IGFuZCBsb2NrZmlsZQorICAgZGlyZWN0b3JpZXMuIFRoZSAnaW5zdGFsbCcgdGFyZ2V0IGRvZXMg bm90IGF0dGVtcHQgdG8gc2V0IEtlcm1pdCdzCisgICBvd25lciwgZ3JvdXAsIGFuZCBwZXJtaXNz aW9ucyB0byBhbGxvdyBkaWFsaW5nIG91dC4gVGhpcyByZXF1aXJlcworICAgcHJpdmlsZWdlcywg b3BlbiBleWVzLCBhbmQgaHVtYW4gZGVjaXNpb24tbWFraW5nLiBQbGVhc2UgcmVhZAorICAgWzIw MF1TZWN0aW9ucyAxMCBhbmQgWzIwMV0xMSBiZWxvdywgbWFrZSB0aGUgbmVjZXNzYXJ5IGRlY2lz aW9ucywgYW5kCisgICB0aGVuIGltcGxlbWVudCB0aGVtIGJ5IGhhbmQgYXMgZGVzY3JpYmVkIGlu IHRob3NlIHNlY3Rpb25zLgorCisgICBZb3Ugc2hvdWxkIGFsc28gaW5zdGFsbCB0aGUgbWFuIHBh Z2UsIHdoaWNoIGlzIGNhbGxlZCBja3VrZXIubnIsIGluIHRoZQorICAgbWFuIHBhZ2UgZGlyZWN0 b3J5IGZvciBsb2NhbCBjb21tYW5kcywgc3VjaCBhcyAvdXNyL21hbi9tYW4xLywgcmVuYW1lZAor ICAgYXBwcm9wcmlhdGVseSwgZS5nLiB0byBrZXJtaXQuMS4gVGhpcyBpcyBhbHNvIHRha2VuIGNh cmUgb2YgYnkgIm1ha2UKKyAgIGluc3RhbGwiLgorCisgICBPcHRpb25hbGx5LCB0aGUgdGV4dCBm aWxlcyBsaXN0ZWQgaW4gdGhlIFsyMDJdcHJldmlvdXMgc2VjdGlvbiBjYW4gYmUKKyAgIHBsYWNl ZCBpbiBhIHB1YmxpY2x5IHJlYWRhYmxlIGRpcmVjdG9yeS4gU3VnZ2VzdGVkIGRpcmVjdG9yeSBu YW1lcyBhcmU6CisKKy91c3IvbG9jYWwvZG9jL2tlcm1pdC8KKy91c3IvbG9jYWwvbGliL2tlcm1p dC8KKy91c3Ivc2hhcmUvbGliL2tlcm1pdC8KKy9vcHQva2VybWl0L2RvYy8KKworICAgKG9yIGFu eSBvZiB0aGVzZSB3aXRob3V0IHRoZSAiL2tlcm1pdCIpLiBVcG9uIHN0YXJ0dXAsIEMtS2VybWl0 IGNoZWNrcworICAgdGhlIGZvbGxvd2luZyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgd2hvc2UgcHVy cG9zZSBpcyB0byBzcGVjaWZ5IHRoZQorICAgZGlyZWN0b3J5IHdoZXJlIHRoZSBDLUtlcm1pdCB0 ZXh0IGZpbGVzIGFyZSwgaW4gdGhlIGZvbGxvd2luZyBvcmRlcjoKKworS19JTkZPX0RJUkVDVE9S WQorS19JTkZPX0RJUgorCisgICBJZiBlaXRoZXIgb2YgdGhlc2UgaXMgZGVmaW5lZCwgQy1LZXJt aXQgY2hlY2tzIGZvciB0aGUgZXhpc3RlbmNlIG9mIHRoZQorICAgY2t1YndyLnR4dCBmaWxlIChV bml4IEMtS2VybWl0IEhpbnRzIGFuZCBUaXBzKS4gSWYgbm90IGZvdW5kLCBpdCBjaGVja3MKKyAg IHRoZSBkaXJlY3RvcmllcyBsaXN0ZWQgYWJvdmUgKGJvdGggd2l0aCBhbmQgd2l0aG91dCB0aGUg Ii9rZXJtaXQiKSBwbHVzCisgICBzZXZlcmFsIG90aGVycyB0byBzZWUgaWYgdGhleSBjb250YWlu IHRoZSBja3Vid3IudHh0IGZpbGUuIElmIGZvdW5kLAorICAgdmFyaW91cyBDLUtlcm1pdCBtZXNz YWdlcyBjYW4gcmVmZXIgdGhlIHVzZXIgdG8gdGhpcyBkaXJlY3RvcnkuCisKKyAgIEZpbmFsbHks IGlmIHlvdSB3YW50IHRvIHB1dCB0aGUgc291cmNlIGNvZGUgZmlsZXMgc29tZXdoZXJlIGZvciBw ZW9wbGUKKyAgIHRvIGxvb2sgYXQsIHlvdSBjYW4gZG8gdGhhdCB0b28uCisKKzUuNC4gVGhlIE1h a2VmaWxlIEluc3RhbGwgVGFyZ2V0CisKKyAgIFRoZSBtYWtlZmlsZSAiaW5zdGFsbCIgdGFyZ2V0 IGRvZXMgYWxtb3N0IGV2ZXJ5dGhpbmcgZm9yIHlvdSBpZiB5b3UKKyAgIGdpdmUgaXQgdGhlIGlu Zm9ybWF0aW9uIGl0IG5lZWRzIGJ5IHNldHRpbmcgdGhlIHZhcmlhYmxlcyBkZXNjcmliZWQKKyAg IGJlbG93LiBZb3UgY2FuIHVzZSB0aGlzIHRhcmdldCBpZjoKKworICAgICAqIFlvdSBkb3dubG9h ZGVkIHRoZSBbMjAzXWNvbXBsZXRlIEMtS2VybWl0IGFyY2hpdmUgYW5kIGJ1aWx0CisgICAgICAg Qy1LZXJtaXQgZnJvbSBzb3VyY2U7IG9yOgorICAgICAqIFlvdSBkb3dubG9hZGVkIGFuIFsyMDRd aW5kaXZpZHVhbCBDLUtlcm1pdCBiaW5hcnkgYW5kIHRoZQorICAgICAgIFsyMDVdQy1LZXJtaXQg dGV4dC1maWxlIGFyY2hpdmUsIGFuZCB5b3VyIGNvbXB1dGVyIGhhcyBhICJtYWtlIgorICAgICAg IGNvbW1hbmQuCisKKyAgIEhlcmUgYXJlIHRoZSBwYXJhbWV0ZXJzIHlvdSBuZWVkIHRvIGtub3c6 CisKKyAgIEJJTkFSWQorICAgICAgICAgIE5hbWUgb2YgdGhlIGJpbmFyeSB5b3Ugd2FudCB0byBp bnN0YWxsIGFzICJrZXJtaXQiLiBEZWZhdWx0OgorICAgICAgICAgICJ3ZXJtaXQiLgorCisgICBw cmVmaXgKKyAgICAgICAgICAobG93ZXIgY2FzZSkgSWYgeW91IGRlZmluZSB0aGlzIHZhcmlhYmxl LCBpdHMgdmFsdWUgaXMgcHJlcGVuZGVkCisgICAgICAgICAgdG8gYWxsIHRoZSBmb2xsb3dpbmcg eHh4RElSIHZhcmlhYmxlcyAoOC4wLjIxMSBhbmQgbGF0ZXIpLgorCisgICBERVNURElSCisgICAg ICAgICAgSWYgeW91IHdhbnQgdG8gaW5zdGFsbCB0aGUgS2VybWl0IGZpbGVzIGluIGEgZGlyZWN0 b3J5IHN0cnVjdHVyZQorICAgICAgICAgIGxpa2UgL29wdC9rZXJtaXQvYmluLywgL29wdC9rZXJt aXQvZG9jLywgL29wdC9rZXJtaXQvc3JjLywgdGhlbgorICAgICAgICAgIGRlZmluZSBERVNUSVIg YXMgdGhlIHJvb3Qgb2YgdGhpcyBzdHJ1Y3R1cmU7IGZvciBleGFtcGxlLAorICAgICAgICAgIC9v cHQva2VybWl0LiBUaGUgREVTVERJUiBzdHJpbmcgc2hvdWxkIG5vdCBlbmQgd2l0aCBhIHNsYXNo LiBCeQorICAgICAgICAgIGRlZmF1bHQsIERFU1RESVIgaXMgbm90IGRlZmluZWQuIElmIGl0IGlz IGRlZmluZWQsIGJ1dCB0aGUKKyAgICAgICAgICBkaXJlY3RvcnkgZG9lcyBub3QgZXhpc3QsIHRo ZSBtYWtlZmlsZSBhdHRlbXB0cyB0byBjcmVhdGUgaXQsCisgICAgICAgICAgd2hpY2ggbWlnaHQg cmVxdWlyZSB5b3UgdG8gYmUgcm9vdC4gRXZlbiBzbywgdGhpcyBjYW4gZmFpbCBpZgorICAgICAg ICAgIGFueSBzZWdtZW50cyBpbiB0aGUgcGF0aCBleGNlcHQgdGhlIGxhc3Qgb25lIGRvIG5vdCBh bHJlYWR5CisgICAgICAgICAgZXhpc3QuIFdBUk5JTkc6IElmIHRoZSBtYWtlZmlsZSBjcmVhdGVz IGFueSBkaXJlY3RvcmllcywgaXQKKyAgICAgICAgICBnaXZlcyB0aGVtIGEgbW9kZSBvZiA3NTUs IGFuZCB0aGUgZGVmYXVsdCBvd25lciBhbmQgZ3JvdXAuCisgICAgICAgICAgTW9kaWZ5IHRoZXNl IGJ5IGhhbmQgaWYgbmVjZXNzYXJ5LgorCisgICBCSU5ESVIKKyAgICAgICAgICBEaXJlY3Rvcnkg aW4gd2hpY2ggdG8gaW5zdGFsbCB0aGUgS2VybWl0IGJpbmFyeSAoYW5kIHRoZQorICAgICAgICAg IHN0YW5kYXJkIEMtS2VybWl0IGluaXRpYWxpemF0aW9uIGZpbGUsIGlmIGl0IGlzIGZvdW5kLCBh cyBhCisgICAgICAgICAgS2VyYmFuZyBzY3JpcHQpLiBJZiBERVNURElSIGlzIGRlZmluZWQsIEJJ TkRJUiBtdXN0IHN0YXJ0IHdpdGggYQorICAgICAgICAgIHNsYXNoLiBCSU5ESVIgbXVzdCBub3Qg ZW5kIHdpdGggYSBzbGFzaC4gSWYgREVTVERJUiBpcyBkZWZpbmVkLAorICAgICAgICAgIEJJTkRJ UiBpcyBhIHN1YmRpcmVjdG9yeSBvZiBERVNURElSLiBJZiBCSU5ESVIgZG9lcyBub3QgZXhpc3Qs CisgICAgICAgICAgdGhlIG1ha2VmaWxlIGF0dGVtcHRzIHRvIGNyZWF0ZSBpdCBhcyB3aXRoIERF U1RESVIuIERlZmF1bHQ6CisgICAgICAgICAgL3Vzci9sb2NhbC9iaW4uCisKKyAgIE1BTkRJUgor ICAgICAgICAgIERpcmVjdG9yeSBpbiB3aGljaCB0byBpbnN0YWxsIHRoZSBDLUtlcm1pdCBtYW51 YWwgcGFnZSBhcworICAgICAgICAgICJrZXJtaXQiIGZvbGxvd2VkIGJ5IHRoZSBtYW51YWwtY2hh cHRlciBleHRlbnNpb24gKG5leHQgaXRlbSkuCisgICAgICAgICAgRGVmYXVsdDogL3Vzci9tYW4v bWFuMS4gSWYgTUFORElSIGlzIGRlZmluZWQsIHRoZSBkaXJlY3RvcnkgbXVzdAorICAgICAgICAg IGFscmVhZHkgZXhpc3QuCisKKyAgIE1BTkVYVAorICAgICAgICAgIEV4dGVuc2lvbiBmb3IgdGhl IG1hbnVhbCBwYWdlLiBEZWZhdWx0OiAxIChkaWdpdCBvbmUpLgorCisgICBTUkNESVIKKyAgICAg ICAgICBEaXJlY3RvcnkgaW4gd2hpY2ggdG8gaW5zdGFsbCB0aGUgQy1LZXJtaXQgc291cmNlIGNv ZGUuIElmCisgICAgICAgICAgREVTVERJUiBpcyBkZWZpbmVkLCB0aGlzIGlzIGEgc3ViZGlyZWN0 b3J5IG9mIERFU1RESVIuIERlZmF1bHQ6CisgICAgICAgICAgTm9uZS4KKworICAgQ0VSVERJUgor ICAgICAgICAgIEZvciBzZWN1cmUgYnVpbGRzIG9ubHk6IERpcmVjdG9yeSBpbiB3aGljaCB0byBp bnN0YWxsIHRoZQorICAgICAgICAgIGNhX2NlcnRzLnBlbSBmaWxlLiBUaGlzIG11c3QgYmUgdGhl IHZlcmlmaWNhdGlvbiBkaXJlY3RvcnkgdXNlZAorICAgICAgICAgIGJ5IHByb2dyYW1zIHRoYXQg dXNlIHRoZSBTU0wgbGlicmFyaWVzIGF0IHlvdXIgc2l0ZS4gRGVmYXVsdDoKKyAgICAgICAgICBu b25lLiBQb3NzaWJpbGl0aWVzIGluY2x1ZGU6IC91c3IvbG9jYWwvc3NsLCAvb3B0L3NzbCwKKyAg ICAgICAgICAvdXNyL2xpYi9zc2wsIC4gLiAuICAgICBJZiBDRVJURElSIGlzIGRlZmluZWQsIHRo ZSBkaXJlY3RvcnkKKyAgICAgICAgICBtdXN0IGFscmVhZHkgZXhpc3QuCisKKyAgIElORk9ESVIK KyAgICAgICAgICBEaXJlY3RvcnkgaW4gd2hpY2ggdG8gaW5zdGFsbCB0aGUgQy1LZXJtaXQgdGV4 dCBmaWxlcy4gSWYKKyAgICAgICAgICBERVNURElSIGlzIGRlZmluZWQsIHRoaXMgaXMgYSBzdWJk aXJlY3Rvcnkgb2YgREVTVERJUi4gRGVmYXVsdDoKKyAgICAgICAgICBOb25lLiBJZiBJTkZPRElS IGlzIGRlZmluZWQgYnV0IGRvZXMgbm90IGV4aXN0LCB0aGUgbWFrZWZpbGUKKyAgICAgICAgICBh dHRlbXB0cyB0byBjcmVhdGUgaXQsIGFzIHdpdGggREVTVERJUi4KKworICAgRXhhbXBsZXM6CisK KyAgIG1ha2UgaW5zdGFsbAorICAgICAgICAgIEluc3RhbGxzICJ3ZXJtaXQiIGFzIC91c3IvbG9j YWwvYmluL2tlcm1pdCB3aXRoIHBlcm1pc3Npb25zIDc1NSwKKyAgICAgICAgICB0aGUgZGVmYXVs dCBvd25lciBhbmQgZ3JvdXAsIGFuZCBubyBzcGVjaWFsIHByaXZpbGVnZXMuIFRoZQorICAgICAg ICAgIG1hbnVhbCBwYWdlIGlzIGluc3RhbGxlZCBhcyAvdXNyL21hbi9tYW4xL2tlcm1pdC4xLiBU ZXh0IGZpbGVzCisgICAgICAgICAgYXJlIG5vdCBjb3BpZWQgYW55d2hlcmUsIG5vciBhcmUgdGhl IHNvdXJjZXMuCisKKyAgIG1ha2UgTUFORElSPSBpbnN0YWxsCisgICAgICAgICAgSnVzdCBsaWtl ICJtYWtlIGluc3RhbGwiIGJ1dCBkb2VzIG5vdCBhdHRlbXB0IHRvIGluc3RhbGwgdGhlCisgICAg ICAgICAgbWFudWFsIHBhZ2UuCisKKyAgIG1ha2UgREVTVERJUj0vb3B0L2tlcm1pdCBCSU5ESVI9 L2JpbiBTUkNESVI9L3NyYyBJTkZPRElSPS9kb2MgaW5zdGFsbAorICAgICAgICAgIEluc3RhbGxz IHRoZSBLZXJtaXQgYmluYXJ5ICJ3ZXJtaXQiIGFzIC9vcHQva2VybWl0L2Jpbi9rZXJtaXQsCisg ICAgICAgICAgcHV0cyB0aGUgc291cmNlIGNvZGUgaW4gL29wdC9rZXJtaXQvc3JjLCBhbmQgcHV0 cyB0aGUgdGV4dCBmaWxlcworICAgICAgICAgIGluIC9vcHQva2VybWl0L2RvYywgY3JlYXRpbmcg dGhlIGRpcmVjdG9yaWVzIGlmIHRoZXkgZG9uJ3QKKyAgICAgICAgICBhbHJlYWR5IGV4aXN0LCBh bmQgcHV0cyB0aGUgbWFuIHBhZ2UgaW4gdGhlIGRlZmF1bHQgbG9jYXRpb24uCisKKyAgIG1ha2Ug QklORElSPS91c3IvbG9jYWwvYmluIENFUlRESVI9L3Vzci9sb2NhbC9zc2wgaW5zdGFsbAorICAg ICAgICAgIEluc3RhbGxzIHRoZSBLZXJiZXJpemVkIEtlcm1pdCBiaW5hcnkgIndlcm1pdCIgYXMK KyAgICAgICAgICAvdXNyL2xvY2FsL2Jpbi9rZXJtaXQsIHB1dHMgdGhlIENBIENlcnRpZmljYXRl cyBmaWxlIGluCisgICAgICAgICAgL3Vzci9sb2NhbC9zc2wvLCBhbmQgdGhlIG1hbiBwYWdlIGlu IHRoZSBub3JtYWwgcGxhY2UuCisKKyAgIEZvciBkZWZpbml0aXZlIGluZm9ybWF0aW9uLCBzZWUg dGhlIG1ha2VmaWxlLiBUaGUgZm9sbG93aW5nIGlzCisgICBleGNlcnB0ZWQgZnJvbSB0aGUgOC4w LjIxMSBtYWtlZmlsZToKKworIyBUaGUgZm9sbG93aW5nIHN5bWJvbHMgYXJlIHVzZWQgdG8gc3Bl Y2lmeSBsaWJyYXJ5IGFuZCBoZWFkZXIgZmlsZSBsb2NhdGlvbnMKKyMgUmVkZWZpbmUgdGhlbSB0 byB0aGUgdmFsdWVzIHVzZWQgb24geW91ciBzeXN0ZW0gYnk6CisjIC4gZWRpdGluZyB0aGlzIGZp bGUKKyMgLiBkZWZpbmluZyB0aGUgdmFsdWVzIG9uIHRoZSBjb21tYW5kIGxpbmUKKyMgLiBkZWZp bmluZyB0aGUgdmFsdWVzIGluIHRoZSBlbnZpcm9ubWVudCBhbmQgdXNlIHRoZSAtZSBvcHRpb24K KyMKK3ByZWZpeCAgPSAvdXNyL2xvY2FsCitzcnByb290ID0gJChwcmVmaXgpCitzc2xyb290ID0g JChwcmVmaXgpCittYW5yb290ID0gJChwcmVmaXgpCisKK0s0TElCPS1ML3Vzci9rZXJiZXJvcy9s aWIKK0s0SU5DPS1JL3Vzci9rZXJiZXJvcy9pbmNsdWRlCitLNUxJQj0tTC91c3Iva2VyYmVyb3Mv bGliCitLNUlOQz0tSS91c3Iva2VyYmVyb3MvaW5jbHVkZQorU1JQTElCPS1MJChzcnByb290KS9s aWIKK1NSUElOQz0tSSQoc3Jwcm9vdCkvaW5jbHVkZQorU1NMTElCPS1MJChzc2xyb290KS9zc2wv bGliCitTU0xJTkM9LUkkKHNzbHJvb3QpL3NzbC9pbmNsdWRlCisuLi4KK1dFUk1JVCA9IG1ha2V3 aGF0CitCSU5BUlkgPSB3ZXJtaXQKK0RFU1RESVIgPQorQklORElSID0gJChwcmVmaXgpL2Jpbgor TUFORElSID0gJChtYW5yb290KS9tYW4vbWFuMQorTUFORVhUID0gMQorU1JDRElSID0KK0lORk9E SVIgPQorQ0VSVERJUiA9CisKKzYuIElOU1RBTExJTkcgVU5JWCBDLUtFUk1JVCBGUk9NIERPUy1G T1JNQVQgRElTS0VUVEVTCisKKyAgIFsgWzIwNl1Ub3AgXSBbIFsyMDddQ29udGVudHMgXSBbIFsy MDhdTmV4dCBdIFsgWzIwOV1QcmV2aW91cyBdCisKKyAgICAgVGhpcyBzZWN0aW9uIGlzIG9ic29s ZXRlLiBXZSBkb24ndCBkaXN0cmlidXRlIEMtS2VybWl0IG9uIGRpc2tldHRlcworICAgICBhbnkg bW9yZSBiZWNhdXNlIChhKXRoZXJlIGlzIG5vIGRlbWFuZCwgYW5kIChiKSBpdCBubyBsb25nZXIg Zml0cy4KKworICAgSWYgeW91IHJlY2VpdmVkIGEgRE9TLWZvcm1hdCBkaXNrZXR0ZSBjb250YWlu aW5nIGEgYmluYXJ5IGV4ZWN1dGFibGUKKyAgIEMtS2VybWl0IHByb2dyYW0gcGx1cyBzdXBwb3J0 aW5nIHRleHQgZmlsZXMsIGJlIHN1cmUgdG8gY2htb2QgK3ggdGhlCisgICBleGVjdXRhYmxlIGJl Zm9yZSBhdHRlbXB0aW5nIHRvIHJ1biBpdC4KKworICAgSW4gdmVyc2lvbiA1QSgxOTApIGFuZCBs YXRlciwgYWxsIHRoZSB0ZXh0IGZpbGVzIG9uIHRoZSBDLUtlcm1pdAorICAgRE9TLWZvcm1hdCBk aXNrZXR0ZXMgYXJlIGluIFVuaXggZm9ybWF0OiBMRiBhdCB0aGUgZW5kIG9mIGVhY2ggbGluZQor ICAgcmF0aGVyIHRoYW4gQ1JMRi4gVGhpcyBtZWFucyB0aGF0IG5vIGNvbnZlcnNpb25zIGFyZSBu ZWNlc3Nhcnkgd2hlbgorICAgY29weWluZyB0byB5b3VyIFVuaXggZmlsZSBzeXN0ZW0sIGFuZCB0 aGF0IGFsbCB0aGUgZmlsZXMgb24gdGhlCisgICBkaXNrZXR0ZSwgdGV4dCBhbmQgYmluYXJ5LCBj YW4gYmUgY29waWVkIHRvZ2V0aGVyLiBUaGUgZm9sbG93aW5nCisgICBjb21tZW50cyBhcHBseSB0 byB0aGUgRE9TLWZvcm1hdCBkaXNrZXR0ZXMgZnVybmlzaGVkIHdpdGggdmVyc2lvbgorICAgNUEo MTg5KSBhbmQgZWFybGllciBvciB0byBvdGhlciBET1MtZm9ybWF0IGRpc2tldHRlcyB5b3UgbWln aHQgaGF2ZQorICAgb2J0YWluZWQgZnJvbSBvdGhlciBzb3VyY2VzLgorCisgICBJZiB5b3UgaGF2 ZSByZWNlaXZlZCBDLUtlcm1pdCBvbiBNUy1ET1MgZm9ybWF0IGRpc2tldHRlcyAoc3VjaCBhcyB0 aG9zZQorICAgZGlzdHJpYnV0ZWQgYnkgQ29sdW1iaWEgVW5pdmVyc2l0eSksIHlvdSBzaG91bGQg bWFrZSBzdXJlIHRoYXQgeW91cgorICAgRE9TLXRvLVVuaXggY29udmVyc2lvbiB1dGlsaXR5IChz dWNoIGFzICJkb3NyZWFkIikgYm90aDogKDEpIGNoYW5nZXMKKyAgIGxpbmUgdGVybWluYXRvcnMg aW4gYWxsIGZpbGVzIGZyb20gY2FycmlhZ2UtcmV0dXJuIGxpbmVmZWVkIChDUkxGKSB0bworICAg anVzdCBsaW5lZmVlZCAoTEYpIChzdWNoIGFzICJkb3NyZWFkIC1hIikgYW5kIHJlbW92ZSBhbnkg Q3RybC1aJ3MsIGFuZAorICAgKDIpIHRoYXQgYWxsIGZpbGVuYW1lcyBhcmUgY29udmVydGVkIGZy b20gdXBwZXJjYXNlIHRvIGxvd2VyY2FzZS4gSWYKKyAgIHRoZXNlIGNvbnZlcnNpb25zIHdlcmUg bm90IGRvbmUsIHlvdSBjYW4gdXNlIHRoZSBmb2xsb3dpbmcgc2hlbGwgc2NyaXB0CisgICBvbiB5 b3VyIFVuaXggc3lzdGVtIHRvIGRvIHRoZW06CisKKy0tLShjdXQgaGVyZSktLS0KKyMhL2Jpbi9z aAorIworIyBTaGVsbCBzY3JpcHQgdG8gY29udmVydCBDLUtlcm1pdCBET1MtZm9ybWF0IGZpbGVz IGludG8gVW5peCBmb3JtYXQuCisjIExvd2VyY2FzZXMgdGhlIGZpbGVuYW1lcywgc3RyaXBzIG91 dCBjYXJyaWFnZSByZXR1cm5zIGFuZCBDdHJsLVoncy4KKyMKK3g9JDEgIyB0aGUgbmFtZSBvZiB0 aGUgc291cmNlIGRpcmVjdG9yeQoreT0kMiAjIHRoZSBuYW1lIG9mIHRoZSB0YXJnZXQgZGlyZWN0 b3J5IGlmIFsgJCMgLWx0IDIgXTsgdGhlbgorICBlY2hvICJ1c2FnZTogJDAgc291cmNlLWRpcmVj dG9yeSB0YXJnZXQtZGlyZWN0b3J5IgorICBleGl0IDEKK2ZpCitpZiBjZCAkMSA7IHRoZW4KKyAg ZWNobyAiQ29udmVydGluZyBmaWxlcyBmcm9tICQxIHRvICQyIgorZWxzZQorICBlY2hvICIkMDog Y2Fubm90IGNkIHRvICQxIgorICBleGl0IDEKK2ZpCitmb3IgaSBpbiAqOyBkbworICBqPWBlY2hv ICRpIHwgdHIgJ0EtWicgJ2EteidgCisgIGVjaG8gJHgvJGkgPVw+ICR5LyRqCisgIHRyIC1kICdc MDE1XDAzMicgPCAkaSA+ICR5LyRqCitkb25lCistLS0oY3V0IGhlcmUpLS0tCisKKyAgIEN1dCBv dXQgdGhpcyBzaGVsbCBzY3JpcHQsIHNhdmUgaXQgYXMgImNvbnZlcnQuc2giIChvciBhbnkgb3Ro ZXIgbmFtZQorICAgeW91IHByZWZlciksIHRoZW4gImNobW9kICt4IGNvbnZlcnQuc2giLiBUaGVu LCBjcmVhdGUgYSBuZXcsIGVtcHR5CisgICBkaXJlY3RvcnkgdG8gcHV0IHRoZSBjb252ZXJ0ZWQg ZmlsZXMgaW4sIGFuZCB0aGVuICJjb252ZXJ0LnNoIC94eHgKKyAgIC95eXkiIHdoZXJlIC94eHgg aXMgdGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSB3aGVyZSB0aGUgUEMtZm9ybWF0IGZpbGVzCisg ICBhcmUsIGFuZCAveXl5IGlzIHRoZSBuYW1lIG9mIHRoZSBuZXcsIGVtcHR5IGRpcmVjdG9yeS4g VGhlIGNvbnZlcnRlZAorICAgZmlsZXMgd2lsbCBhcHBlYXIgaW4gdGhlIG5ldyBkaXJlY3Rvcnku CisKKzcuIENIRUNLSU5HIFRIRSBSRVNVTFRTCisKKyAgIFsgWzIxMF1Ub3AgXSBbIFsyMTFdQ29u dGVudHMgXSBbIFsyMTJdTmV4dCBdIFsgWzIxM11QcmV2aW91cyBdCisKKyAgIEZpcnN0IHNvbWUg cXVpY2sgY2hlY2tzIGZvciBwcm9ibGVtcyB0aGF0IGNhbiBiZSBlYXNpbHkgY29ycmVjdGVkIGJ5 CisgICByZWNvbXBpbGluZyB3aXRoIGRpZmZlcmVudCBvcHRpb25zOgorCisgICBESVJFQ1RPUlkg bGlzdGluZyBpcyBnYXJiYWdlCisgICAgICAgICAgUGVybWlzc2lvbnMsIHNpemUsIGFuZCBkYXRl IGFyZSByYW5kb20gZ2FyYmFnZSAoYnV0IHRoZQorICAgICAgICAgIGZpbGVuYW1lcyBhcmUgY29y cmVjdCkgaW4gYSBDLUtlcm1pdCBESVJFQ1RPUlkgbGlzdGluZy4gT24gc29tZQorICAgICAgICAg IHBsYXRmb3JtcywgdGhlIGxzdGF0KCkgZnVuY3Rpb24gaXMgcHJlc2VudCBidXQgc2ltcGx5IGRv ZXNuJ3QKKyAgICAgICAgICB3b3JrOyB0cnkgYWRkaW5nIC1ETk9MU1RBVCB0byBDRkxBR1MgYW5k IHJlYnVpbGQuIElmIHRoYXQKKyAgICAgICAgICBkb2Vzbid0IGZpeCBpdCwgYWxzbyBhZGQgLURO T0xJTktCSVRTLiBJZiBpdCdzIHN0aWxsIG5vdCBmaXhlZCwKKyAgICAgICAgICByZW1vdmUgLURO T0xTVEFUIGFuZCAtRE5PTElOS0JJVFMgYW5kIGFkZCAtRE5PU1lNTElOSy4KKworICAgY3Vyc2Vz CisgICAgICAgICAgV2hlbiB5b3UgbWFrZSBhIGNvbm5lY3Rpb24gd2l0aCBDLUtlcm1pdCBhbmQg dHJhbnNmZXIgZmlsZXMKKyAgICAgICAgICB1c2luZyB0aGUgZnVsbHNjcmVlbiAoY3Vyc2VzKSBm aWxlLXRyYW5zZmVyIGRpc3BsYXksIGFuZCB0aGVuCisgICAgICAgICAgZ2V0IHRoZSBDLUtlcm1p dD4gcHJvbXB0IGJhY2sgYWZ0ZXJ3YXJkcywgZG8gY2hhcmFjdGVycyBlY2hvCisgICAgICAgICAg d2hlbiB5b3UgdHlwZSB0aGVtPyBJZiBub3QsIHRoZSBjdXJzZXMgbGlicmFyeSBoYXMgYWx0ZXJl ZCB0aGUKKyAgICAgICAgICBidWZmZXJpbmcgb2YgL2Rldi90dHkuIFRyeSByZWJ1aWxkaW5nIHdp dGggS0ZMQUdTPS1EQ0tfTkVXVEVSTS4KKyAgICAgICAgICBJZiBpdCBhbHJlYWR5IGhhcyAtRENL X05FV1RFUk0gaW4gQ0ZMQUdTLCB0cnkgcmVtb3ZpbmcgaXQuIElmCisgICAgICAgICAgdGhhdCBk b2Vzbid0IGhlbHAsIHRoZW4gcmVidWlsZCB3aXRoIC1ETk9OT1NFVEJVRiAoeWVzLCB0d28KKyAg ICAgICAgICBOTydzKS4gSWYgbm9uZSBvZiB0aGlzIHdvcmtzIChhbmQgeW91IGNhbid0IGZpeCB0 aGUgY29kZSksIHRoZW4KKyAgICAgICAgICBlaXRoZXIgZG9uJ3QgdXNlIHRoZSBmdWxsc2NyZWVu IGRpc3BsYXksIG9yIHJlYnVpbGQgd2l0aAorICAgICAgICAgIC1ETk9DVVJTRVMuCisKKyAgIEN0 cmwtTCBvciBhbnkgU0NSRUVOIGNvbW1hbmQgY3Jhc2hlcyBDLUtlcm1pdDoKKyAgICAgICAgICBS ZWJ1aWxkIHdpdGggLUROT1RFUk1DQVAuCisKKyAgIE5vIHByb21wdCBhZnRlciBDT05ORUNUOgor ICAgICAgICAgIEFmdGVyIGVzY2FwaW5nIGJhY2sgZnJvbSBDT05ORUNUIG1vZGUsIGRvZXMgeW91 ciBDLUtlcm1pdD4KKyAgICAgICAgICBwcm9tcHQgZGlzYXBwZWFyPyAoWWV0LCB0eXBpbmcgIj8i IHN0aWxsIHByb2R1Y2VzIGEgY29tbWFuZAorICAgICAgICAgIGxpc3QsIGV0YykgSW4gdGhhdCBj YXNlLCBhZGQgLURDS0NPTklOVEI0Q0IgdG8gQ0ZMQUdTIGFuZAorICAgICAgICAgIHJlYnVpbGQu CisKKyAgIEhlcmUgaXMgYSBtb3JlIHRob3JvdWdoIGNoZWNrbGlzdCBjYW4gdXNlIHRvIHRlbGwg d2hldGhlciB5b3VyIHZlcnNpb24KKyAgIG9mIEMtS2VybWl0IHdhcyBidWlsdCBjb3JyZWN0bHkg Zm9yIHlvdXIgVW5peCBzeXN0ZW0sIHdpdGggaGludHMgb24gaG93CisgICB0byBmaXggb3Igd29y ayBhcm91bmQgcHJvYmxlbXM6CisKKyAgICBhLiBTdGFydCBDLUtlcm1pdCAodXN1YWxseSBieSB0 eXBpbmcgIi4vd2VybWl0IiBpbiB0aGUgZGlyZWN0b3J5IHdoZXJlCisgICAgICAgeW91IHJhbiB0 aGUgbWFrZWZpbGUpLiBEbyB5b3Ugc2VlIHRoZSBDLUtlcm1pdD4gcHJvbXB0PyBJZiBub3QsCisg ICAgICAgQy1LZXJtaXQgaW5jb3JyZWN0bHkgZGVkdWNlZCB0aGF0IGl0IHdhcyBydW5uaW5nIGlu IHRoZSBiYWNrZ3JvdW5kLgorICAgICAgIFRoZSB0ZXN0IGlzIGluIGNvbmJndCgpIGluIFsyMTRd Y2t1dGlvLmMuIElmIHlvdSBjYW4gZml4IGl0IGZvcgorICAgICAgIHlvdXIgc3lzdGVtLCBwbGVh c2Ugc2VuZCBpbiB0aGUgZml4IChIaW50OiByZWFkIGFib3V0ICJQSURfVCIKKyAgICAgICBiZWxv dykuIE90aGVyd2lzZSwgeW91IGNhbiBmb3JjZSBDLUtlcm1pdCB0byBmb3JlZ3JvdW5kIG1vZGUg YnkKKyAgICAgICBzdGFydGluZyBpdCB3aXRoIHRoZSAteiBjb21tYW5kIGxpbmUgb3B0aW9uLCBh cyBpbiAia2VybWl0IC16Iiwgb3IKKyAgICAgICBnaXZpbmcgdGhlIGludGVyYWN0aXZlIGNvbW1h bmQgU0VUIEJBQ0tHUk9VTkQgT0ZGLgorICAgIGIuIFdoZW4geW91IHR5cGUgY2hhcmFjdGVycyBh dCB0aGUgQy1LZXJtaXQgcHJvbXB0LCBkbyB0aGV5IGVjaG8KKyAgICAgICBpbW1lZGlhdGVseT8g SWYgbm90LCBzb21ldGhpbmcgaXMgd3Jvbmcgd2l0aCBjb25jYigpIGFuZCBwcm9iYWJseQorICAg ICAgIHRoZSBvdGhlciB0ZXJtaW5hbCBtb2RlIHNldHRpbmdzIHJvdXRpbmVzIGluIFsyMTVdY2t1 dGlvLmMuIEJlIHN1cmUKKyAgICAgICB5b3UgaGF2ZSB1c2VkIHRoZSBtb3N0IGFwcHJvcHJpYXRl IG1ha2UgZW50cnkuCisgICAgYy4gQXQgdGhlIEMtS2VybWl0PiBwcm9tcHQsIHR5cGUgInNlbmQg Li8/Ii4gQy1LZXJtaXQgc2hvdWxkIGxpc3QgYWxsCisgICAgICAgdGhlIGZpbGVzIGluIHRoZSBj dXJyZW50IGRpcmVjdG9yeS4gSWYgbm90LCBpdCB3YXMgYnVpbHQgZm9yIHRoZQorICAgICAgIHdy b25nIHR5cGUgb2YgVW5peCBmaWxlIHN5c3RlbS4gRGV0YWlscyBiZWxvdy4gSW4gdGhlIG1lYW50 aW1lLCB0cnkKKyAgICAgICBTRVQgV0lMRENBUkQtRVhQQU5TSU9OIFNIRUxMIGFzIGEgd29ya2Fy b3VuZC4KKyAgICBkLiBDRCB0byBhIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIGEgdmFyaWV0eSBv ZiBmaWxlcywgc3ltbGlua3MsIGFuZAorICAgICAgIHN1YmRpcmVjdG9yaWVzIGFuZCBnaXZlIGEg RElSRUNUT1JZIGNvbW1hbmQgYXQgdGhlIEMtS2VybWl0PgorICAgICAgIHByb21wdC4gRG8gdGhl IHBlcm1pc3Npb25zLCBzaXplLCBhbmQgZGF0ZSBhcHBlYXIgY29ycmVjdD8gSWYgbm90CisgICAg ICAgc2VlIFsyMTZdU2VjdGlvbiA0LjAuCisgICAgZS4gQXNzdW1pbmcgeW91ciBwbGF0Zm9ybSBz dXBwb3J0cyBsb25nIGZpbGUgbmFtZXMsIGNyZWF0ZSBhIGZpbGUgd2l0aAorICAgICAgIGEgbG9u ZyBuYW1lIGluIHlvdXIgY3VycmVudCBkaXJlY3RvcnksIGUuZy46CisKKyQgdG91Y2ggdGhpc2lz YWZpbGV3aXRoYXZlcnl2ZXJ5dmVyeXZlcnl2ZXJ5dmVyeXZlcnl2ZXJ5bG9vb29vb29vb25nbmFt ZQorCisgICAgICAgKHlvdSBtaWdodCBuZWVkIHRvIG1ha2UgaXQgbG9uZ2VyIHRoYW4gdGhpcywg cGVyaGFwcyBhcyBsb25nIGFzIDI1NworICAgICAgIG9yIGV2ZW4gMTAyNSBjaGFyYWN0ZXJzKS4K KyAgICAgICBDaGVjayB3aXRoIGxzIHRvIHNlZSBpZiB5b3VyIHZlcnNpb24gb2YgVW5peCB0cnVu Y2F0ZWQgdGhlIG5hbWUuCisgICAgICAgTm93IHN0YXJ0IEMtS2VybWl0IGFuZCB0eXBlICJzZW5k IHRoaXNpczxFU0M+Ii4gRG9lcyBLZXJtaXQKKyAgICAgICBjb21wbGV0ZSB0aGUgbmFtZSwgc2hv d2luZyB0aGUgc2FtZSBuYW1lIGFzIGxzIGRpZD8gSWYgbm90LCB3cm9uZworICAgICAgIGZpbGVz eXN0ZW0uIFJlYWQgb24uCisgICAgZi4gTWFrZSBzdXJlIHRoYXQgS2VybWl0IGhhcyB0aGUgbWF4 aW11bSBwYXRoIGxlbmd0aCByaWdodC4gSnVzdCB0eXBlCisgICAgICAgU0hPVyBGSUxFIGFuZCBz ZWUgd2hhdCBpdCBzYXlzIGFib3V0IHRoaXMuIElmIGl0IGlzIHRvbyBzaG9ydCwKKyAgICAgICB0 aGVyZSBjb3VsZCBiZSBzb21lIHByb2JsZW1zIGF0IHJ1bnRpbWUuIFRvIGNvcnJlY3QsIGxvb2sg aW4KKyAgICAgICBbMjE3XWNrY2RlYi5oIHRvIHNlZSBob3cgdGhlIHN5bWJvbCBDS01BWFBBVEgg aXMgc2V0IGFuZCBtYWtlIGFueQorICAgICAgIG5lZWRlZCBhZGp1c3RtZW50cy4KKyAgICBnLiBT ZW5kIGEgZmlsZSB0byB5b3VyIG5ldyBLZXJtaXQgcHJvZ3JhbSBmcm9tIGEgZGlmZmVyZW50IEtl cm1pdAorICAgICAgIHByb2dyYW0gdGhhdCBpcyBrbm93biB0byB3b3JrLiBJcyB0aGUgZGF0ZS90 aW1lc3RhbXAgb2YgdGhlIG5ldworICAgICAgIGZpbGUgaWRlbnRpY2FsIHRvIHRoZSBvcmlnaW5h bD8gSWYgbm90LCBhZGp1c3RtZW50cyBhcmUgbmVlZGVkIGluCisgICAgICAgenN0cmR0KCkgaW4g WzIxOF1ja3VmaW8uYy4KKyAgICBoLiBHbyB0byBhbm90aGVyIGNvbXB1dGVyIChDb21wdXRlciBC KSBmcm9tIHdoaWNoIHlvdSBjYW4gc2VuZCBmaWxlcworICAgICAgIHRvIEMtS2VybWl0LiBDb25u ZWN0IENvbXB1dGVyIEIgdG8gdGhlIGNvbXB1dGVyIChBKSB3aGVyZSB5b3UgYXJlCisgICAgICAg dGVzdGluZyBDLUtlcm1pdC4gVGhlbjoKKyAgICBpLiBTZW5kIGEgZmlsZSBmcm9tIEIgdG8gQS4g TWFrZSBzdXJlIGl0IHRyYW5zZmVycmVkIE9LIGFuZCB3YXMKKyAgICAgICBjcmVhdGVkIHdpdGgg dGhlIHJpZ2h0IG5hbWUuCisgICAgai4gU2VuZCBhIGZpbGUgZnJvbSBCIHRvIEEsIHNwZWNpZnlp bmcgYW4gImFzLW5hbWUiIHRoYXQgaXMgdmVyeSwgdmVyeQorICAgICAgIGxvbmcgKGxvbmdlciB0 aGFuIHRoZSBtYXhpbXVtIG5hbWUgbGVuZ3RoIG9uIGNvbXB1dGVyIEEpLiBDaGVjayB0bworICAg ICAgIG1ha2Ugc3VyZSB0aGF0IHRoZSBmaWxlIHdhcyByZWNlaXZlZCBPSyBhbmQgdGhhdCBpdHMg bmFtZSB3YXMKKyAgICAgICB0cnVuY2F0ZWQgdG8gQ29tcHV0ZXIgQSdzIG1heGltdW0gbGVuZ3Ro LiBJZiBub3QsIGNoZWNrIHRoZQorICAgICAgIE1BWE5BTUxFTiBkZWZpbml0aW9uIGluIFsyMTld Y2t1ZmlvLmMuCisgICAgay4gVGVsbCBDLUtlcm1pdCBvbiBDb21wdXRlciBBIHRvICJzZXQgcmVj ZWl2ZSBwYXRobmFtZXMgcmVsYXRpdmUiIGFuZAorICAgICAgIHRoZW4gc2VuZCBpdCBhIGZpbGUg ZnJvbSBDb21wdXRlciBCIHNwZWNpZnlpbmcgYW4gYXMtbmFtZSB0aGF0CisgICAgICAgY29udGFp bnMgc2V2ZXJhbCBkaXJlY3Rvcnkgc2VnbWVudHM6CisKK3NlbmQgZm9vIGRpcjEvZGlyMi9kaXIz L2ZvbworCisgICAgICAgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoYXQgZGlyMS9kaXIyL2RpcjMvZm9v IHdhcyBjcmVhdGVkIGluIENvbXB1dGVyCisgICAgICAgQSdzIGN1cnJlbnQgZGlyZWN0b3J5IChp LmUuIHRoYXQgdGhyZWUgbGV2ZWxzIG9mIGRpcmVjdG9yaWVzIHdlcmUKKyAgICAgICBjcmVhdGVk KS4KKyAgICBsLiBSZXBlYXQgc3RlcCBrLCBidXQgbWFrZSBlYWNoIHBhdGggc2VnbWVudCBpbiB0 aGUgcGF0aG5hbWUgbG9uZ2VyCisgICAgICAgdGhhbiBDb21wdXRlciBBJ3MgbWF4aW11bSBuYW1l IGxlbmd0aC4gTWFrZSBzdXJlIGVhY2ggZGlyZWN0b3J5CisgICAgICAgbmFtZSwgYW5kIHRoZSBm aW5hbCBmaWxlbmFtZSwgd2VyZSB0cnVuY2F0ZWQgcHJvcGVybHkuCisgICAgbS4gVHlwZSBDdHJs LUMgKG9yIHdoYXRldmVyIHlvdXIgVW5peCBpbnRlcnJ1cHQgY2hhcmFjdGVyIGlzKSBhdCB0aGUK KyAgICAgICBwcm9tcHQuIERvIHlvdSBnZXQgIl5DLi4uIiBhbmQgYSBuZXcgcHJvbXB0PyBJZiBp bnN0ZWFkLCB5b3UgZ2V0IGEKKyAgICAgICBjb3JlIGR1bXAgKHRoaXMgc2hvdWxkbid0IGhhcHBl biBhbnkgbW9yZSkgInJtIGNvcmUiIGFuZCB0aGVuCisgICAgICAgcmVidWlsZCB3aXRoIC1ETk9D Q1RSQVAgYWRkZWQgdG8geW91ciBDRkxBR1MuIElmIGl0IGRpZCB3b3JrLCB0aGVuCisgICAgICAg dHlwZSBhbm90aGVyIEN0cmwtQy4gSWYgdGhpcyBkb2VzIHRoZSBzYW1lIHRoaW5nIGFzIHRoZSBm aXJzdCBvbmUsCisgICAgICAgdGhlbiBDdHJsLUMgaGFuZGxpbmcgaXMgT0suIE90aGVyd2lzZSwg dGhlIFNJR0lOVCBzaWduYWwgaXMgZWl0aGVyCisgICAgICAgbm90IGdldHRpbmcgcmUtYXJtZWQg KHNob3VsZG4ndCBoYXBwZW4pIG9yIGlzIGJlaW5nIG1hc2tlZCBvZmYKKyAgICAgICBhZnRlciB0 aGUgZmlyc3QgdGltZSBpdCBpcyBjYXVnaHQsIGluIHdoaWNoIGNhc2UsIGlmIHlvdXIgVW5peCBp cworICAgICAgIFBPU0lYLWJhc2VkLCB0cnkgcmVidWlsZGluZyBDLUtlcm1pdCB3aXRoIC1EQ0tf UE9TSVhfU0lHLgorICAgIG4uIFR5cGUgQ3RybC1aIChvciB3aGF0ZXZlciB5b3VyIFVuaXggc3Vz cGVuZCBjaGFyYWN0ZXIgaXMpIHRvIHB1dAorICAgICAgIEMtS2VybWl0IGluIHRoZSBiYWNrZ3Jv dW5kLiBEaWQgaXQgd29yaz8gSWYgbm90aGluZyBoYXBwZW5lZCwgdGhlbgorICAgICAgIChhKXlv dXIgdmVyc2lvbiBvZiBVbml4IGRvZXMgbm90IHN1cHBvcnQgam9iIGNvbnRyb2wsIG9yIChiKSB5 b3VyCisgICAgICAgdmVyc2lvbiBvZiBDLUtlcm1pdCB3YXMgcHJvYmFibHkgYnVpbHQgd2l0aCAt RE5PSkMuIElmIHlvdXIgc2Vzc2lvbgorICAgICAgIGJlY2FtZSB0b3RhbGx5IGZyb3plbiwgdGhl biB5b3UgYXJlIHByb2JhYmx5IHJ1bm5pbmcgQy1LZXJtaXQgb24gYQorICAgICAgIFVuaXggdmVy c2lvbiB0aGF0IHN1cHBvcnRzIGpvYiBjb250cm9sLCBidXQgdW5kZXIgYSBzaGVsbCB0aGF0Cisg ICAgICAgZG9lc24ndC4gSWYgdGhhdCdzIG5vdCB0aGUgY2FzZSwgbG9vayBpbiB0aGUgY29uZ20o KSBhbmQgcHN1c3BlbmQoKQorICAgICAgIHJvdXRpbmVzIGluIFsyMjBdY2t1dGlvLmMgYW5kIHNl ZSBpZiB5b3UgY2FuIGZpZ3VyZSBvdXQgd2hhdCdzCisgICAgICAgd3JvbmcuIElmIHlvdSBjYW4n dCwgcmVidWlsZCB3aXRoIC1ETk9KQy4KKyAgICBvLiBHaXZlIGEgU0VUIExJTkUgY29tbWFuZCBm b3IgYSBkaWFsb3V0IGRldmljZSwgZS5nLiAic2V0IGxpbmUKKyAgICAgICAvZGV2L3R0eTAwIi4g SWYgeW91IGdvdCBzb21lIGtpbmQgb2YgcGVybWlzc2lvbiBvciBhY2Nlc3MgZGVuaWVkCisgICAg ICAgbWVzc2FnZSwgZ28gcmVhZCBbMjIxXVNlY3Rpb24gMTAgYW5kIHRoZW4gY29tZSBiYWNrIGhl cmUuCisgICAgcC4gQWZ0ZXIgZ2l2aW5nIGEgc3VjY2Vzc2Z1bCBTRVQgTElORSBjb21tYW5kLCB0 eXBlICJzaG93IGNvbW0iIHRvIHNlZQorICAgICAgIHRoZSBjb21tdW5pY2F0aW9uIHBhcmFtZXRl cnMuIERvIHRoZXkgbWFrZSBzZW5zZT8KKyAgICBxLiBUeXBlICJzZXQgc3BlZWQgPyIgYW5kIG9i c2VydmUgdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIHNwZWVkcy4gSXMgaXQKKyAgICAgICB3aGF0IHlv dSBleHBlY3RlZD8gSWYgbm90LCBzZWUgWzIyMl1TZWN0aW9uIDIpIG9mIHRoZQorICAgICAgIFsy MjNdQ29uZmlndXJhdGlvbnMgT3B0aW9ucyBkb2N1bWVudC4KKyAgICByLiBHaXZlIGEgU0VUIFNQ RUVEIGNvbW1hbmQgdG8gY2hhbmdlIHRoZSBkZXZpY2UncyBzcGVlZC4gRGlkIGl0IHdvcms/Cisg ICAgICAgKFR5cGUgInNob3cgY29tbSIgYWdhaW4gdG8gY2hlY2suKQorICAgIHMuIFRyeSBkaWFs aW5nIG91dDogU0VUIE1PREVNIFRZUEUgLCBTRVQgTElORSAsIFNFVCBTUEVFRCAsIERJQUwgLiBJ ZgorICAgICAgIGl0IGRvZXNuJ3Qgd29yaywga2VlcCByZWFkaW5nLiBBZnRlciBkaWFsaW5nLCBj YW4geW91IFJFRElBTD8KKyAgICB0LiBJZiB5b3VyIHZlcnNpb24gd2FzIGJ1aWx0IHdpdGggVENQ L0lQIG5ldHdvcmsgc3VwcG9ydCwgdHJ5IHRoZQorICAgICAgIFRFTE5FVCBjb21tYW5kLgorICAg IHUuIFRyYW5zZmVyIHNvbWUgZmlsZXMgaW4gcmVtb3RlIG1vZGUgb24gaW5jb21pbmcgYXN5bmNo cm9ub3VzIHNlcmlhbAorICAgICAgIChkaXJlY3Qgb3IgbW9kZW0pIGNvbm5lY3Rpb25zLCBhbmQg b24gaW5jb21pbmcgbmV0d29yayAodGVsbmV0LAorICAgICAgIHJsb2dpbiwgdGVybWluYWwgc2Vy dmVyKSBjb25uZWN0aW9ucy4gSWYgeW91IGdldCBsb3RzIG9mIGVycm9ycywKKyAgICAgICB0cnkg ZGlmZmVyZW50IFNFVCBGTE9XIHNldHRpbmdzIG9uIHRoZSByZW1vdGUgS2VybWl0IHByb2dyYW0u CisgICAgdi4gRXN0YWJsaXNoIGEgc2VyaWFsIGNvbm5lY3Rpb24gZnJvbSBDLUtlcm1pdCB0byBh bm90aGVyIGNvbXB1dGVyCisgICAgICAgKGRpcmVjdCBvciBkaWFsZWQpIGFuZCB0cmFuc2ZlciBz b21lIGZpbGVzLiBJZiB5b3UgaGF2ZSBuZXR3b3JrCisgICAgICAgc3VwcG9ydCwgZG8gdGhlIHNh bWUgd2l0aCBhIG5ldHdvcmsgY29ubmVjdGlvbi4KKyAgICB3LiBJZiB5b3VyIHZlcnNpb24gd2Fz IGJ1aWx0IHdpdGggZnVsbHNjcmVlbiBmaWxlIHRyYW5zZmVyIGRpc3BsYXkKKyAgICAgICBzdXBw b3J0LCBjaGVjayB0aGF0IGl0IHdvcmtzIGR1cmluZyBsb2NhbC1tb2RlIGZpbGUgdHJhbnNmZXIu IEFsc28sCisgICAgICAgY2hlY2sgQy1LZXJtaXQncyBvcGVyYXRpb24gYWZ0ZXJ3YXJkczogaXMg dGhlIGVjaG9pbmcgZnVubnk/IGV0YworICAgICAgIGV0Yy4gSWYgdGhlcmUgYXJlIHByb2JsZW1z LCBzZWUgWzIyNF1TZWN0aW9uIDQuCisgICAgeC4gSWYgeW91ciB2ZXJzaW9uIHdhcyBidWlsdCB3 aXRoIHNjcmlwdCBwcm9ncmFtbWluZyBsYW5ndWFnZSBzdXBwb3J0LAorICAgICAgIFRBS0UgdGhl IGNrZWRlbW8ua3NjIGZpbGUgdG8gZ2l2ZSBpdCBhIHdvcmtvdXQuCisgICAgeS4gRG9lcyBDLUtl cm1pdCBpbnRlcmxvY2sgY29ycmVjdGx5IHdpdGggVVVDUC1mYW1pbHkgcHJvZ3JhbXMgKGN1LAor ICAgICAgIHRpcCwgdXVjcCwgZXRjKT8gSWYgbm90LCByZWFkIHRoZSBzZWN0aW9uIFsyMjVdRElB TElORyBPVVQgQU5ECisgICAgICAgQ09PUkRJTkFUSU5HIFdJVEggVVVDUCBiZWxvdy4KKyAgICB6 LiBNb2RlbSBzaWduYWxzLi4uIEdpdmUgYSBTRVQgTElORSBjb21tYW5kIHRvIGEgc2VyaWFsIGRl dmljZSBhbmQKKyAgICAgICB0aGVuIHR5cGUgdGhlIFNIT1cgTU9ERU0gY29tbWFuZC4gSWYgaXQg c2F5cyAiTW9kZW0gc2lnbmFscworICAgICAgIHVuYXZhaWxhYmxlIGluIHRoaXMgdmVyc2lvbiBv ZiBLZXJtaXQiLCB0aGVuIHlvdSBtaWdodCB3YW50IHRvIGxvb2sKKyAgICAgICBhdCB0aGUgdHRn bWRtKCkgcm91dGluZSBpbiBbMjI2XWNrdXRpby5jIGFuZCBhZGQgdGhlIG5lZWRlZCBjb2RlIC0t CisgICAgICAgaWYgaW5kZWVkIHlvdXIgdmVyc2lvbiBvZiBVbml4IHByb3ZpZGVzIGEgd2F5IHRv IGdldCBtb2RlbSBzaWduYWxzCisgICAgICAgKHNvbWUgZG9uJ3Q7IGUuZy4gbW9kZW0gc2lnbmFs cyBhcmUgYSBmb3JlaWduIGNvbmNlcHQgdG8gUE9TSVgsCisgICAgICAgcmVxdWlyaW5nIHBvbGl0 aWNhbGx5IGluY29ycmVjdCB3b3JrYXJvdW5kcykuCisgICBhYS4gSWYgaXQgc2F5cyAiTW9kZW0g c2lnbmFscyB1bmF2YWlsYWJsZSIsIHRoZW4gaXQgaXMgbGlrZWx5IHRoYXQgdGhlCisgICAgICAg QVBJIGZvciBnZXR0aW5nIG1vZGVtIHNpZ25hbHMgaXMgcHJvdmlkZWQsIGJ1dCBpdCBkb2Vzbid0 IGFjdHVhbGx5CisgICAgICAgZG8gYW55dGhpbmcgKGUuZy4gaW9jdGwodHR5ZmQsVElPQ01HRVQs JngpIHJldHVybnMgRUlOVkFMKS4KKyAgIGFiLiBJbiBhbnkgY2FzZSwgaXQgc3RpbGwgc2hvdWxk IGJlIGFibGUgdG8gbWFuaXB1bGF0ZSB0aGUgRFRSIHNpZ25hbC4KKyAgICAgICBUbyB0ZXN0LCBT RVQgTElORSAsIFNFVCBNT0RFTSBOT05FLCBhbmQgSEFOR1VQLiBUaGUgRFRSIGxpZ2h0CisgICAg ICAgc2hvdWxkIGdvIG91dCBtb21lbnRhcmlseS4gSWYgaXQgZG9lc24ndCwgc2VlIGlmIHlvdSBj YW4gYWRkIHRoZQorICAgICAgIG5lZWRlZCBjb2RlIGZvciB5b3VyIHN5c3RlbSB0byB0aGUgdHRo YW5nKCkgcm91dGluZSBpbgorICAgICAgIFsyMjddY2t1dGlvLmMuCisgICBhYy4gSWYgeW91ciB2 ZXJzaW9uIG9mIEtlcm1pdCBoYXMgdGhlIFNFVCBGTE9XIFJUUy9DVFMgY29tbWFuZCwgY2hlY2sK KyAgICAgICB0byBzZWUgaWYgaXQgd29ya3M6IGdpdmUgS2VybWl0IHRoaXMgY29tbWFuZCwgc2V0 IHlvdXIgbW9kZW0gZm9yCisgICAgICAgUlRTL0NUUywgdHJhbnNmZXIgc29tZSBmaWxlcyAodXNp bmcgYmlnIHBhY2tldCBhbmQgd2luZG93IHNpemVzKQorICAgICAgIGFuZCB3YXRjaCB0aGUgUlRT IGFuZCBDVFMgbGlnaHRzIG9uIHRoZSBtb2RlbS4gSWYgdGhleSBnbyBvbiBhbmQKKyAgICAgICBv ZmYgKGFuZCBLZXJtaXQgZG9lcyBub3QgZ2V0IHBhY2tldCBlcnJvcnMpLCB0aGVuIGl0IHdvcmtz LiBJZiB5b3VyCisgICAgICAgdmVyc2lvbiBvZiBLZXJtaXQgZG9lcyBub3QgaGF2ZSB0aGlzIGNv bW1hbmQsIGJ1dCB5b3VyIHZlcnNpb24gb2YKKyAgICAgICBVbml4IGRvZXMgc3VwcG9ydCBoYXJk d2FyZSBmbG93IGNvbnRyb2wsIHRha2UgYSBsb29rIGF0IHRoZQorICAgICAgIHR0aGZsb3coKSBj b21tYW5kIGluIFsyMjhdY2t1dGlvLmMgYW5kIHNlZSBpZiB5b3UgY2FuIGFkZCB0aGUKKyAgICAg ICBuZWVkZWQgY29kZSAoc2VlIHRoZSBzZWN0aW9uIG9uIFsyMjldSEFSRFdBUkUgRkxPVyBDT05U Uk9MIGJlbG93KS4KKyAgICAgICAoQW5kIHBsZWFzZSBbMjMwXXNlbmQgYmFjayBhbnkgYWRkZWQg Y29kZSwgc28gdGhhdCBvdGhlcnMgY2FuCisgICAgICAgYmVuZWZpdCBmcm9tIGl0IGFuZCBpdCBj YW4gYmUgY2FycmllZCBmb3J3YXJkIGludG8gZnV0dXJlCisgICAgICAgcmVsZWFzZXMuKQorICAg YWQuIElmIEMtS2VybWl0IHN0YXJ0cyBub3JtYWxseSBhbmQgaXNzdWVzIGl0cyBwcm9tcHQsIGVj aG9pbmcgaXMKKyAgICAgICBub3JtYWwsIGV0YywgYnV0IHRoZW4gYWZ0ZXIgcmV0dXJuaW5nIGZy b20gYSBDT05ORUNUIHNlc3Npb24sIHRoZQorICAgICAgIHByb21wdCBubyBsb25nZXIgYXBwZWFy cywgdHJ5IHJlYnVpbGRpbmcgd2l0aCAtRENLQ09OSU5UQjRDQi4KKyAgIGFlLiAoOC4wLjIwNiBv ciBsYXRlcikgVHlwZSBzb21lIGNvbW1hbmRzIGF0IHRoZSBDLUtlcm1pdCBwcm9tcHQuIENhbgor ICAgICAgIHlvdSB1c2UgdGhlIFVwLWFycm93IGFuZCBEb3duLWFycm93IGtleXMgb24geW91ciBr ZXlib2FyZCB0byBhY2Nlc3MKKyAgICAgICBLZXJtaXQncyBjb21tYW5kIGhpc3Rvcnk/IElmIG5v dCwgYW5kIHlvdSdyZSBhIHByb2dyYW1tZXIsIHRha2UgYQorICAgICAgIGxvb2sgYXQgdGhlIFVT RV9BUlJPV0tFWVMgc2VjdGlvbnMgb2YgY2t1Y21kLmMuCisKKzguIFJFRFVDSU5HIFRIRSBTSVpF IE9GIFRIRSBFWEVDVVRBQkxFIFBST0dSQU0gSU1BR0UKKworICAgWyBbMjMxXVRvcCBdIFsgWzIz Ml1Db250ZW50cyBdIFsgWzIzM11OZXh0IF0gWyBbMjM0XVByZXZpb3VzIF0KKworICAgQWxzbyBz ZWU6IFsyMzVdQy1LZXJtaXQgQ29uZmlndXJhdGlvbiBPcHRpb25zCisKKyAgICBhLiBNYW55IG9m IEMtS2VybWl0J3Mgb3B0aW9ucyBhbmQgZmVhdHVyZXMgY2FuIGJlIGRlc2VsZWN0ZWQgYXQKKyAg ICAgICBjb21waWxlIHRpbWUuIFRoZSBncmVhdGVzdCBzYXZpbmdzIGF0IHRoZSBsZWFzdCBzYWNy aWZpY2UgaW4KKyAgICAgICBmdW5jdGlvbmFsaXR5IGlzIHRvIGRpc2FibGUgdGhlIGxvZ2dpbmcg b2YgZGVidWcgaW5mb3JtYXRpb24gYnkKKyAgICAgICBkZWZpbmluZyBOT0RFQlVHIGR1cmluZyBj b21waWxhdGlvbi4gU2VlIHRoZSBbMjM2XUNvbmZpZ3VyYXRpb25zCisgICAgICAgT3B0aW9ucyBk b2N1bWVudCBmb3IgZnVydGhlciBpbmZvcm1hdGlvbi4KKyAgICBiLiBVc2Ugc2hhcmVkIGxpYnJh cmllcyByYXRoZXIgdGhhbiBzdGF0aWMgbGlua2luZy4gVGhpcyBpcyB0aGUKKyAgICAgICBkZWZh dWx0IG9uIG1hbnkgVW5peCBzeXN0ZW1zIGFueXdheS4gSG93ZXZlciwgZXhlY3V0YWJsZXMgYnVp bHQgZm9yCisgICAgICAgZHluYW1pYyBsaW5raW5nIHdpdGggc2hhcmVkIGxpYnJhcmllcyBhcmUg Z2VuZXJhbGx5IG5vdCBwb3J0YWJsZQorICAgICAgIGF3YXkgZnJvbSB0aGUgbWFjaGluZSB0aGV5 IHdlcmUgYnVpbHQgb24sIHNvIHRoaXMgaXMgcmVjb21tZW5kZWQgaWYKKyAgICAgICB0aGUgYmlu YXJ5IGlzIGZvciB5b3VyIHVzZSBvbmx5LgorICAgIGMuIE1vc3QgVW5peCBzeXN0ZW1zIGhhdmUg YSAic3RyaXAiIGNvbW1hbmQgdG8gcmVtb3ZlIHN5bWJvbCB0YWJsZQorICAgICAgIGluZm9ybWF0 aW9uIGZyb20gYW4gZXhlY3V0YWJsZSBwcm9ncmFtIGltYWdlLiAibWFuIHN0cmlwIiBmb3IKKyAg ICAgICBmdXJ0aGVyIGluZm9ybWF0aW9uLiBUaGUgc2FtZSBlZmZlY3QgY2FuIGJlIGFjaGlldmVk IGJ5IGluY2x1ZGluZworICAgICAgICItcyIgYW1vbmcgdGhlIGxpbmsgZmxhZ3Mgd2hlbiBidWls ZGluZyBDLUtlcm1pdC4KKyAgICBkLiBTQ08sIEludGVyYWN0aXZlLCBhbmQgc29tZSBvdGhlciBV bml4IHZlcnNpb25zIGhhdmUgYW4gIm1jcyIKKyAgICAgICBjb21tYW5kLiAibWNzIC1kIHdlcm1p dCIgY2FuIGJlIHVzZWQgdG8gZGVsZXRlIHRoZSBjb250ZW50cyBvZiB0aGUKKyAgICAgICAiLmNv bW1lbnQiIHNlY3Rpb24gZnJvbSB0aGUgZXhlY3V0YWJsZSBwcm9ncmFtIGltYWdlLgorICAgIGUu IE1hbnkgbW9kZXJuIG9wdGltaXplcnMgY2FuIGJlIGluc3RydWN0ZWQgdG8gb3B0aW1pemUgZm9y IHNwYWNlCisgICAgICAgcmF0aGVyIHRoYW4gZXhlY3V0aW9uIGVmZmljaWVuY3kuIENoZWNrIHRo ZSBDRkxBR1MgaW4gdGhlIG1ha2VmaWxlCisgICAgICAgdGFyZ2V0LCBhZGp1c3QgYXMgZGVzaXJl ZC4KKworOS4gVU5JWCBWRVJTSU9OUworCisgICBbIFsyMzddVG9wIF0gWyBbMjM4XUNvbnRlbnRz IF0gWyBbMjM5XU5leHQgXSBbIFsyNDBdUHJldmlvdXMgXQorCisgICBTRUNUSU9OIENPTlRFTlRT CisKKzkuMSBbMjQxXVN0YW5kYXJkcworICAgICA5LjEuMS4gWzI0Ml1QT1NJWAorICAgICA5LjEu Mi4gWzI0M11BTlNJIEMKKyAgICAgOS4xLjMuIFsyNDRdT3RoZXIgU3RhbmRhcmRzCis5LjIuIFsy NDVdTGlicmFyeSBJc3N1ZXMKKzkuMy4gWzI0Nl1Vbml4IEZpbGUgU3lzdGVtIFBlY3VsaWFyaXRp ZXMKKzkuNC4gWzI0N11IYXJkd2FyZSBGbG93IENvbnRyb2wKKzkuNS4gWzI0OF1UZXJtaW5hbCBT cGVlZHMKKzkuNi4gWzI0OV1NaWxsaXNlY29uZCBTbGVlcHMKKzkuNy4gWzI1MF1Ob25kZXN0cnVj dGl2ZSBJbnB1dCBCdWZmZXIgUGVla2luZworOS44LiBbMjUxXU90aGVyIFN5c3RlbS1EZXBlbmRl bnQgRmVhdHVyZXMKKzkuOS4gWzI1Ml1UZXJtaW5hbCBJbnRlcnJ1cHRpb24KKworICAgVGhlcmUg YXJlIHNldmVyYWwgbWFqb3IgdmFyaWV0aWVzIG9mIFVuaXg6IEJlbGwgTGFib3JhdG9yaWVzIFNl dmVudGgKKyAgIEVkaXRpb24sIEFUJlQgU3lzdGVtIFYsIEJlcmtlbGV5IFN0YW5kYXJkIERpc3Ry aWJ1dGlvbiAoQlNEKSwgYW5kCisgICBQT1NJWC4gRWFjaCBoYXMgbWFueSwgbWFueSBzdWJ2YXJp ZXRpZXMgYW5kIGRlc2NlbmRlbnRzLCBhbmQgdGhlcmUgYXJlCisgICBhbHNvIGh5YnJpZHMgdGhh dCBleGhpYml0IHN5bXB0b21zIG9mIHR3byBvciBtb3JlIHZhcmlldGllcywgcGx1cworICAgc3Bl Y2lhbCBxdWlya3Mgb2YgdGhlaXIgb3duLgorCisgICBTZXZlbnRoIGVkaXRpb24gdmVyc2lvbnMg b2YgQy1LZXJtaXQgaW5jbHVkZSB0aGUgY29tcGlsZS10aW1lIG9wdGlvbgorICAgLURWNyBpbiB0 aGUgQ0ZMQUdTIHN0cmluZyBpbiB0aGUgbWFrZWZpbGUgdGFyZ2V0LiBWYXJpb3VzIFY3LWJhc2Vk CisgICBpbXBsZW1lbnRhdGlvbnMgYXJlIGFsc28gc3VwcG9ydGVkOiAtRENPSEVSRU5ULCAtRE1J TklYLCBldGMuCisKKyAgIEFUJlQtYmFzZWQgdmVyc2lvbnMgb2YgVW5peCBLZXJtaXQgaW5jbHVk ZSB0aGUgY29tcGlsZS10aW1lIG9wdGlvbgorICAgLURBVFRTViAoc3RhbmRpbmcgZm9yIEFUJm1w O1QgVW5peCBTeXN0ZW0gVikuIFRoaXMgYXBwbGllcyB0byBTeXN0ZW0KKyAgIElJSSBhbmQgdG8g U3lzdGVtIFYgdXAgdG8gYW5kIGluY2x1ZGluZyBSZWxlYXNlIDIuIEZvciBTeXN0ZW0gViBSZWxl YXNlCisgICAzLCB0aGUgZmxhZyAtRFNWUjMgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZCAod2hpY2gg YWxzbyBpbXBsaWVzIC1EQVRUU1YpLgorICAgVGhpcyBpcyBiZWNhdXNlIHRoZSBkYXRhIHR5cGUg b2Ygc2lnbmFsKCkgYW5kIHNldmVyYWwgb3RoZXIgZnVuY3Rpb25zCisgICB3YXMgY2hhbmdlZCBi ZXR3ZWVuIFNWUjIgYW5kIFNWUjMuIEZvciBTeXN0ZW0gViBSZWxlYXNlIDQsIGluY2x1ZGUKKyAg IC1EU1ZSNCBiZWNhdXNlIG9mIGNoYW5nZXMgaW4gVVVDUCBsb2NrZmlsZSBjb252ZW50aW9uczsg dGhpcyBhbHNvCisgICBpbXBsaWVzIC1EU1ZSMyBhbmQgLURBVFRTVi4KKworICAgRm9yIEJTRCwg dGhlIGZsYWcgLUJTRHh4IG11c3QgYmUgaW5jbHVkZWQsIHdoZXJlIHh4IGlzIHRoZSBCU0QgdmVy c2lvbgorICAgbnVtYmVyLCBmb3IgZXhhbXBsZSBCU0Q0IChmb3IgdmVyc2lvbiA0LjIgb3IgbGF0 ZXIsIHVzaW5nIG9ubHkgNC4yCisgICBmZWF0dXJlcyksIC1EQlNENDEgKGZvciBCU0QgNC4xIG9u bHkpLCAtREJTRDQzIChmb3IgNC4zKSwgLURCU0QyOSAoQlNECisgICAyLjkgZm9yIERFQyBQRFAt MTFzKS4gLURCU0Q0NCBpcyBmb3IgNC40QlNELCB3aGljaCBpcyB0aGUgYmFzaXMgb2YKKyAgIEZy ZWVCU0QsIE5ldEJTRCwgT3BlbkJTRCwgQlNESSwgYW5kIE1hYyBPUyBYLCBhbmQgd2hpY2ggY29u dGFpbnMgbWFueQorICAgUE9TSVggZmVhdHVyZXMsIGFuZCBoYXMgbGl0dGxlIHJlbGF0aW9uIHRv IDQuM0JTRCBhbmQgZWFybGllci4KKworICAgRm9yIFBPU0lYLCBpbmNsdWRlIHRoZSBmbGFnIC1E UE9TSVguIFBPU0lYIGRlZmluZXMgYSB3aG9sZSBuZXcgc2V0IG9mCisgICB0ZXJtaW5hbCBpL28g ZnVuY3Rpb25zIHRoYXQgYXJlIG5vdCBmb3VuZCBpbiB0cmFkaXRpb25hbCBBVCZUIG9yCisgICBC ZXJrZWxleSBpbXBsZW1lbnRhdGlvbnMsIGFuZCBhbHNvIGRlZmluZXMgdGhlIHN5bWJvbCBfUE9T SVhfU09VUkNFLAorICAgd2hpY2ggaXMgdXNlZCBpbiBtYW55IHN5c3RlbSBhbmQgbGlicmFyeSBo ZWFkZXIgZmlsZXMsIG1haW5seSB0bworICAgZGlzYWJsZSBub24tUE9TSVggKGkuZS4gdXNlZnVs KSBmZWF0dXJlcy4KKworICAgTm90ZSAoY2lyY2EgMTk5Nyk6IEluIG9yZGVyIHRvIGVuYWJsZSBz ZXJpYWwgc3BlZWRzIGhpZ2hlciB0aGFuIDM4NDAwCisgICBicHMsIGl0IGlzIGdlbmVyYWxseSBu ZWNlc3NhcnkgdG8gYWRkIC1EUE9TSVggKGFtb25nIG90aGVyIHRoaW5ncyksCisgICBzaW5jZSB0 aGUgb2xkZXIgdGVybWluYWwgQVBJcyBjYW4gbm90IGFjY29tbW9kYXRlIHRoZSBuZXcgc3BlZWRz IC0tIG91dAorICAgbycgYml0cy4gQnV0IHRoaXMgb2Z0ZW4gYWxzbyBtZWFucyB3aG9sZXNhbGUg Y29udmVyc2lvbiB0byBQT1NJWCBBUElzLgorICAgSW4gZ2VuZXJhbCwganVzdCB0cnkgYWRkaW5n IC1EUE9TSVggYW5kIHRoZW4gc2VlIHdoYXQgZ29lcyB3cm9uZy4gQmUKKyAgIHdhcnkgb2YgZmVh dHVyZXMgZGlzYXBwZWFyaW5nOiB3aGVuIF9QT1NJWF9TT1VSQ0UgaXMgZGVmaW5lZCwgYWxsIHNv cnRzCisgICBvZiB0aGluZ3MgdGhhdCB3ZXJlIHBlcmZlY3RseSBPSyBiZWZvcmUgc3VkZGVubHkg YmVjb21lIHBvbGl0aWNhbGx5CisgICBpbmNvcnJlY3QgLS0gbGlrZSByZWFkaW5nIG1vZGVtIHNp Z25hbHMsIGRvaW5nIGhhcmR3YXJlIGZsb3cgY29udHJvbCwKKyAgIGV0Yy4gUE9TSVggd2FzIGV2 aWRlbnRseSBub3QgZGVzaWduZWQgd2l0aCBzZXJpYWwgY29tbXVuaWNhdGlvbiBpbgorICAgbWlu ZCEKKworICAgQ2FzZSBpbiBwb2ludDogSW4gVW5peFdhcmUgNy4wLCAjZGVmaW5lJ2luZyBQT1NJ WCBjYXVzZXMgc3RyaWN0bmVzcworICAgY2xhdXNlcyBpbiB0aGUgaGVhZGVyIGZpbGVzIHRvIHRh a2UgZWZmZWN0LiBUaGVzZSBwcmV2ZW50IDxzeXMvdGltZS5oPgorICAgZnJvbSBkZWZpbmluZyB0 aGUgdGltZXZhbCBhbmQgdGltZXpvbmUgc3RydWN0cywgd2hpY2ggYXJlIG5lZWRlZCBmb3IKKyAg IGFsbCBzb3J0cyBvZiB0aGluZ3MgKGxpa2Ugc2VsZWN0KCkpLiBUaHVzLCBpZiB3ZSB3YW50IHRo ZSBoaWdoIHNlcmlhbAorICAgc3BlZWRzLCB3ZSBoYXZlIHRvIGNpcmN1bXZlbnQgdGhlIFBPU0lY IGNsYXVzZXMuCisKKyAgIFNpbWlsYXJseSBpbiBTQ08gT3BlblNlcnZlciBSNS4wLjQgd2hlcmUs IGFnYWluLCB3ZSBtdXN0IHVzZSB0aGUgUE9TSVgKKyAgIEFQSXMgdG8gZ2V0IGF0IHNlcmlhbCBz cGVlZHMgaGlnaGVyIHRoYW4gMzg0MDAsIGJ1dCB0aGVuIGRvaW5nIHNvCisgICByZW1vdmVzIGhh cmR3YXJlIGZsb3cgY29udHJvbCAtLSBqdXN0IHdoZW4gd2UgbmVlZCBpdCBtb3N0ISBJbiBjYXNl cworICAgbGlrZSB0aGlzLCBkaXJ0eSB0cmlja3MgYXJlIHRoZSBvbmx5IHJlY291cnNlIChzZWFy Y2ggZm9yIFNDT19PU1I1MDQgaW4KKyAgIFsyNTNdY2t1dGlvLmMgZm9yIGV4YW1wbGVzKS4KKwor ICAgRm9yIHJlYXNvbnMgbGlrZSB0aGlzLCBVbml4IGltcGxlbWVudGF0aW9ucyB0ZW5kIHRvIGJl IG5laXRoZXIgcHVyZQorICAgQVQmVCBub3IgcHVyZSBCU0Qgbm9yIHB1cmUgUE9TSVgsIGJ1dCBh IG1peHR1cmUgb2YgdHdvIG9yIG1vcmUgb2YKKyAgIHRoZXNlLCB3aXRoICJjb21wYXRpYmlsaXR5 IGZlYXR1cmVzIiBhbGxvd2luZyBkaWZmZXJlbnQgdmFyaWV0aWVzIG9mCisgICBwcm9ncmFtcyB0 byBiZSBidWlsdCBvbiB0aGUgc2FtZSBjb21wdXRlci4gSW4gZ2VuZXJhbCwgS2VybWl0IHRyaWVz IG5vdAorICAgdG8gbWl4IGFuZCBtYXRjaCBidXQgdG8ga2VlcCBhIGNvbnNpc3RlbnQgcmVwZXJ0 b2lyZSB0aHJvdWdob3V0LgorICAgSG93ZXZlciwgdGhlcmUgYXJlIGNlcnRhaW4gVW5peCBpbXBs ZW1lbnRhdGlvbnMgdGhhdCBvbmx5IHdvcmsgd2hlbiB5b3UKKyAgIG1peCBhbmQgbWF0Y2guIEZv ciBleGFtcGxlLCB0aGUgU2lsaWNvbiBHcmFwaGljcyBJUklYIG9wZXJhdGluZyBzeXN0ZW0KKyAg IChwcmlvciB0byB2ZXJzaW9uIDMuMykgaXMgYW4gQVQmVCBVbml4IGJ1dCB3aXRoIGEgQlNEIGZp bGUgc3lzdGVtLiBUaGUKKyAgIG9ubHkgd2F5IHlvdSBjYW4gYnVpbGQgS2VybWl0IHN1Y2Nlc3Nm dWxseSBmb3IgdGhpcyBjb25maWd1cmF0aW9uIGlzIHRvCisgICBpbmNsdWRlIC1EU1ZSMyBwbHVz IHRoZSBzcGVjaWFsIG9wdGlvbiAtRExPTkdGTiwgbWVhbmluZyAicHJldGVuZCBJIHdhcworICAg YnVpbHQgd2l0aCAtREJTRHh4IHdoZW4gaXQncyB0aW1lIHRvIGNvbXBpbGUgZmlsZS1yZWxhdGVk IGNvZGUiLiBTZWUKKyAgIHRoZSAiaXJpcyIgbWFrZWZpbGUgdGFyZ2V0LgorCis5LjEuIFN0YW5k YXJkcworCisgICBbIFsyNTRdVG9wIF0gWyBbMjU1XVNlY3Rpb24gQ29udGVudHMgXSBbIFsyNTZd Q29udGVudHMgXSBbIFsyNTddTmV4dCBdCisKKyAgIFNVQlNFQ1RJT04gQ09OVEVOVFMKKworOS4x LjEuIFsyNThdUE9TSVgKKzkuMS4yLiBbMjU5XUFOU0kgQworOS4xLjMuIFsyNjBdT3RoZXIgU3Rh bmRhcmRzCisKKyAgIEluIGVkaXRzIDE2Ni0xNjcgKDE5ODgtODkpLCBDLUtlcm1pdCB3YXMgaGVh dmlseSBtb2RpZmllZCB0byB0cnkgdG8KKyAgIGtlZXAgYWJyZWFzdCBvZiBuZXcgc3RhbmRhcmRz IHdoaWxlIHN0aWxsIHJlbWFpbmluZyBjb21wYXRpYmxlIHdpdGggb2xkCisgICB2ZXJzaW9ucyBv ZiBDIGFuZCBVbml4LiBUaGVyZSBhcmUgdHdvIG5ldyBzdGFuZGFyZHMgb2YgaW50ZXJlc3Q6IEFO U0kgQworICAgKGFzIGRlc2NyaWJlZCBpbiBLZXJuaWdoYW4gYW5kIFJpdGNoaWUsICJUaGUgQyBQ cm9ncmFtbWluZyBMYW5ndWFnZSIsCisgICBTZWNvbmQgRWRpdGlvbiwgUHJlbnRpY2UgSGFsbCwg MTk4OCkgYW5kIFBPU0lYLjEgKElFRUUgU3RhbmRhcmQgMTAwMy4xCisgICBhbmQgSVNPL0lFQyA5 OTQ1LTEsIDE5OTAsICJQb3J0YWJsZSBPcGVyYXRpbmcgU3lzdGVtIEludGVyZmFjZSIpLiBUaGVz ZQorICAgdHdvIHN0YW5kYXJkcyBoYXZlIG5vdGhpbmcgdG8gZG8gd2l0aCBlYWNoIG90aGVyOiB5 b3UgY2FuIGJ1aWxkCisgICBDLUtlcm1pdCB3aXRoIGEgbm9uLUFOU0kgY29tcGlsZXIgZm9yIGEg UE9TSVggc3lzdGVtLCBvciBmb3IgYQorICAgbm9uLVBPU0lYIHN5c3RlbSB3aXRoIHdpdGggYW4g QU5TSSBjb21waWxlci4KKworOS4xLjEuIFBPU0lYCisKKyAgIFBPU0lYLjEgZGVmaW5lcyBhIHJl cGVydG9pcmUgb2Ygc3lzdGVtIGZ1bmN0aW9ucyBhbmQgaGVhZGVyIGZpbGVzIGZvcgorICAgdXNl IGJ5IEMgbGFuZ3VhZ2UgcHJvZ3JhbXMuIE1vc3Qgbm90YWJseSwgdGhlIGlvY3RsKCkgZnVuY3Rp b24gaXMgbm90CisgICBhbGxvd2VkIGluIFBPU0lYOyBhbGwgaW9jdGwoKSBmdW5jdGlvbnMgaGF2 ZSBiZWVuIHJlcGxhY2VkIGJ5CisgICBkZXZpY2Utc3BlY2lmaWMgZnVuY3Rpb25zIGxpa2UgdGNz ZXRhdHRyKCksIHRjc2VuZGJyZWFrKCksIGV0Yy4KKworICAgQ29tcHV0ZXIgc3lzdGVtcyB0aGF0 IGNsYWltIHNvbWUgZGVncmVlIG9mIFBPU0lYIGNvbXBsaWFuY2UgaGF2ZSBtYWRlCisgICBzb21l IGF0dGVtcHQgdG8gcHV0IHRoZWlyIGhlYWRlciBmaWxlcyBpbiB0aGUgcmlnaHQgcGxhY2VzIGFu ZCBnaXZlCisgICB0aGVtIHRoZSByaWdodCBuYW1lcywgYW5kIHRvIHByb3ZpZGUgc3lzdGVtIGxp YnJhcnkgZnVuY3Rpb25zIHdpdGggdGhlCisgICByaWdodCBuYW1lcyBhbmQgY2FsbGluZyBjb252 ZW50aW9ucy4gV2l0aGluIHRoZSBoZWFkZXIgZmlsZXMsCisgICBQT1NJWC1jb21wbGlhbnQgZnVu Y3Rpb25zIGFyZSBzdXBwb3NlZCB0byBiZSB3aXRoaW4gI2lmZGVmCisgICBfUE9TSVhfU09VUkNF Li4jZW5kaWYgY29uZGl0aW9uYWxzLCBhbmQgbm9uLVBPU0lYIGl0ZW1zIGFyZSBub3Qgd2l0aGlu CisgICB0aGVzZSBjb25kaXRpb25hbHMuCisKKyAgIElmIEtlcm1pdCBpcyBidWlsdCB3aXRoIG5l aXRoZXIgLURfUE9TSVhfU09VUkNFIG5vciAtRFBPU0lYLCB0aGUKKyAgIGZ1bmN0aW9ucyBhbmQg aGVhZGVyIGZpbGVzIG9mIHRoZSBzZWxlY3RlZCB2ZXJzaW9uIG9mIFVuaXggKG9yIFZNUywKKyAg IGV0YykgYXJlIHVzZWQgYWNjb3JkaW5nIHRvIHRoZSBDRkxBR1MgS2VybWl0IHdhcyBidWlsdCB3 aXRoLgorCisgICBJZiBLZXJtaXQgaXMgYnVpbHQgd2l0aCAtRF9QT1NJWF9TT1VSQ0UgYnV0IG5v dCAtRFBPU0lYLCB0aGVuIG9uZSBvZgorICAgdGhlIC1EQlNEIG9yIC1EQVRUU1YgZmxhZ3MgKG9y IG9uZSB0aGF0IGltcGxpZXMgdGhlbSkgbXVzdCBhbHNvIGJlCisgICBkZWZpbmVkLCBidXQgaXQg c3RpbGwgdXNlcyBvbmx5IHRoZSBQT1NJWCBmZWF0dXJlcyBpbiB0aGUgc3lzdGVtIGhlYWRlcgor ICAgZmlsZXMuIFRoaXMgYWxsb3dzIEMtS2VybWl0IHRvIGJlIGJ1aWx0IG9uIEJTRCBvciBBVCZU IHN5c3RlbXMgdGhhdAorICAgaGF2ZSBzb21lIGRlZ3JlZSBvZiBQT1NJWCBjb21wbGlhbmNlLCBi dXQgc3RpbGwgdXNlIEJTRCBvciBBVCZUCisgICBzcGVjaWZpYyBmZWF0dXJlcy4KKworICAgVGhl IGRpbGVtbWEgaXMgdGhpczogaXQgaXMgb2Z0ZW4gbmVjZXNzYXJ5IHRvIGRlZmluZSBfUE9TSVhf U09VUkNFIHRvCisgICBnZXQgYXQgbmV3IG9yIG1vZGVybiBmZWF0dXJlcywgc3VjaCBhcyBoaWdo IHNlcmlhbCBzcGVlZHMgYW5kIHRoZSBBUElzCisgICB0byBkZWFsIHdpdGggdGhlbS4gQnV0IGRl ZmluaW5nIF9QT1NJWF9TT1VSQ0UgYWxzbyBoaWRlcyBvdGhlciBBUElzCisgICB0aGF0IEtlcm1p dCBuZWVkcywgZm9yIGV4YW1wbGUgdGhlIG9uZXMgZGVhbGluZyB3aXRoIG1vZGVtIHNpZ25hbHMK KyAgIChvdGhlcnMgYXJlIGxpc3RlZCBqdXN0IGJlbG93KS4gVGh1cyBhbGwgc29ydHMgb2YgaGlk ZW91cyBjb250b3J0aW9ucworICAgYXJlIG9mdGVuIHJlcXVpcmVkIHRvIGdldCBhIGZ1bGwgc2V0 IG9mIGZlYXR1cmVzLgorCisgICBUaGUgUE9TSVggc3RhbmRhcmQgZG9lcyBub3QgZGVmaW5lIGFu eXRoaW5nIGFib3V0IHV1Y3AgbG9ja2ZpbGVzLiAibWFrZQorICAgcG9zaXgiIHVzZXMgTk8gKHJl cGVhdCwgTk8pIGxvY2tmaWxlIGNvbnZlbnRpb25zLiBJZiB5b3VyCisgICBQT1NJWC1jb21wbGlh bnQgVW5peCB2ZXJzaW9uIHVzZXMgYSBsb2NrZmlsZSBjb252ZW50aW9uIHN1Y2ggYXMgSERCVVVD UAorICAgKHNlZSBiZWxvdyksIHVzZSB0aGUgInBvc2l4IiBlbnRyeSwgYnV0IGluY2x1ZGUgdGhl IGFwcHJvcHJpYXRlCisgICBsb2NrZmlsZSBvcHRpb24gaW4geW91ciBLRkxBR1Mgb24gdGhlICJt YWtlIiBjb21tYW5kIGxpbmUsIGZvciBleGFtcGxlOgorCittYWtlIHBvc2l4ICJLRkxBR1M9LURI REJVVUNQIgorCisgICBQT1NJWC4xIGFsc28gbGFja3MgY2VydGFpbiBvdGhlciBmZWF0dXJlcyB0 aGF0IEtlcm1pdCBuZWVkcy4gRm9yCisgICBleGFtcGxlOgorCisgICAgICogVGhlcmUgaXMgbm8g ZGVmaW5lZCB3YXkgZm9yIGFuIGFwcGxpY2F0aW9uIHRvIGRvIHdpbGRjYXJkIG1hdGNoaW5nCisg ICAgICAgb2YgZmlsZW5hbWVzLiBLZXJtaXQgdXNlcyB0aGUgaW5vZGUgaW4gdGhlIGRpcmVjdG9y eSBzdHJ1Y3R1cmUsIGJ1dAorICAgICAgIFBPU0lYLjEgZG9lcyBub3QgaW5jbHVkZSB0aGlzIGNv bmNlcHQuIChMYXRlciBQT1NJWCByZXZpc2lvbnMKKyAgICAgICBpbmNsdWRlIGZ1bmN0aW9ucyBu YW1lZCAoSSB0aGluaykgZ2xvYigpIGFuZCBmbm1hdGNoKCksIGJ1dCB0aGVzZQorICAgICAgIGZ1 bmN0aW9ucyBhcmUgbm90IHlldCBpbiBLZXJtaXQsIGFuZCBtaWdodCBub3QgYmUgYXBwcm9wcmlh dGUgaW4KKyAgICAgICBhbnkgY2FzZS4pCisgICAgICogVGhlcmUgaXMgbm8gUE9TSVggbWVjaGFu aXNtIGZvciBzZW5zaW5nIG9yIGNvbnRyb2xsaW5nIG1vZGVtCisgICAgICAgc2lnbmFscywgbm9y IHRvIGVuYWJsZSBSVFMvQ1RTIG9yIG90aGVyIGhhcmR3YXJlIGZsb3cgY29udHJvbC4KKyAgICAg KiBUaGVyZSBpcyBubyBzZWxlY3QoKSBmb3IgbXVsdGlwbGV4aW5nIGkvbywgYW5kIHRoZXJlZm9y ZSBubyBUQ1AvSVAuCisgICAgICogVGhlcmUgaXMgbm8gd2F5IHRvIGNoZWNrIGlmIGNoYXJhY3Rl cnMgYXJlIHdhaXRpbmcgaW4gYQorICAgICAgIGNvbW11bmljYXRpb25zIGRldmljZSAob3IgY29u c29sZSkgaW5wdXQgYnVmZmVyLCBzaG9ydCBvZiB0cnlpbmcgdG8KKyAgICAgICByZWFkIHRoZW0g LS0gbm8gc2VsZWN0KCksIGlvY3RsKGZkLEZJT05SRUFELGJsYWgpLCByZGNoaygpLCBldGMuCisg ICAgICAgVGhpcyBpcyBiYWQgZm9yIENPTk5FQ1QgbW9kZSBhbmQgYmFkIGZvciBzbGlkaW5nIHdp bmRvd3MuCisgICAgICogTm8gd2F5IHRvIGRvIGEgbWlsbGlzZWNvbmQgc2xlZXAgKG5vIG5hcCgp LCB1c2xlZXAoKSwgc2VsZWN0KCksCisgICAgICAgZXRjKS4KKyAgICAgKiBUaGVyZSBpcyBubyBw b3BlbigpLgorCisgICBTbyBhdCB0aGlzIHBvaW50LCB0aGVyZSBjYW5ub3QgYmUgb25lIHNpbmds ZSBmdWxseSBmdW5jdGlvbmFsIFBPU0lYCisgICBmb3JtIG9mIEMtS2VybWl0IHVubGVzcyBpdCBh bHNvIGhhcyAiZXh0ZW5zaW9ucyIsIGFzIGRvIExpbnV4LCBRTlgsCisgICBldGMuCisKKyAgIE1v cmUgb24gUE9TSVggKHF1b3RpbmcgZnJvbSBhIG5ld3Nncm91cCBwb3N0aW5nIGJ5IERhdmUgQnV0 ZW5ob2YpOgorCisgICAgIFN0YW5kYXJkcyB0ZW5kIHRvIGxvb2sgYXQgdGhlbXNlbHZlcyBhcyAi ZW5hYmxpbmciLiBTbyBQT1NJWAorICAgICBzdGFuZGFyZHMgc2F5IHRoYXQsIGluIG9yZGVyIHRv IHVzZSBQT1NJWCBmdW5jdGlvbnMsIGEgcHJvZ3JhbSBtdXN0CisgICAgIGRlZmluZSBzb21lIG1h Y3JvIHRoYXQgd2lsbCBwdXQgdGhlIGRldmVsb3BtZW50IGVudmlyb25tZW50IGluCisgICAgICJQ T1NJWCBtb2RlIi4gRm9yIHRoZSBhbmNpZW50IFBPU0lYIDEwMDMuMS0xOTkwLCB0aGUgc3ltYm9s IGlzCisgICAgIF9QT1NJWF9TT1VSQ0UuIEZvciByZWNlbnQgcmV2aXNpb25zLCBpdCdzIF9QT1NJ WF9DX1NPVVJDRSB3aXRoIGFuCisgICAgIGFwcHJvcHJpYXRlIHZhbHVlLiBQT1NJWCAxMDAzLjEt MTk5NiBzYXlzIHRoYXQsIHRvIHVzZSBpdHMgZmVhdHVyZXMKKyAgICAgaW4gYSBwb3J0YWJsZSBt YW5uZXIsIHlvdSBtdXN0IGRlZmluZSBfUE9TSVhfQ19TT1VSQ0U9MTk5NTA2TCBiZWZvcmUKKyAg ICAgaW5jbHVkaW5nIGFueSBoZWFkZXIgZmlsZXMuCisKKyAgICAgQnV0IGZvciBTb2xhcmlzLCBv ciBEaWdpdGFsIFVuaXgsIHRoZSBwaWN0dXJlIGlzIGRpZmZlcmVudC4gUE9TSVggaXMKKyAgICAg b25lIGltcG9ydGFudCBidXQgc21hbGwgcGFydCBvZiB0aGUgdW5pdmVyc2UuIFlldCBQT1NJWAor ICAgICB1bmNvbmRpdGlvbmFsbHkgYW5kIHVuYW1iaWd1b3VzbHkgUkVRVUlSRVMgdGhhdCwgd2hl bgorICAgICBfUE9TSVhfQ19TT1VSQ0U9MTk5NTA2TCwgQUxMIG9mIHRoZSBmdW5jdGlvbnMgYW5k IGRlZmluaXRpb25zCisgICAgIHJlcXVpcmVkIGJ5IHRoZSBzdGFuZGFyZCwgYW5kIE5PIG90aGVy cyAoZXhjZXB0IGluIHNwZWNpZmljCisgICAgIHJlc3RyaWN0ZWQgbmFtZXNwYWNlcywgc3BlY2lm aWNhbGx5ICJfIiBmb2xsb3dlZCBieSBhbiB1cHBlcmNhc2UKKyAgICAgbGV0dGVyIG9yICJfXyIg Zm9sbG93ZWQgYnkgYSBsb3dlcmNhc2UgbGV0dGVyKSBzaGFsbCBiZSB2aXNpYmxlLgorICAgICBU aGF0IGtpbmRhIHB1dHMgYSBjcmFtcCBvbiBCU0QgYW5kIFNWSUQgc3VwcG9ydCwgYmVjYXVzZSB0 aG9zZQorICAgICByZXF1aXJlIG5hbWVzIHRoYXQgYXJlIG5vdCBpbiB0aGUgInByb3RlY3RlZCIg UE9TSVggbmFtZXNwYWNlcy4gSXQncworICAgICBJTExFR0FMIHRvIG1ha2UgdGhvc2Ugc3ltYm9s cyB2aXNpYmxlLCB1bmxlc3MgeW91J3ZlIGRvbmUgc29tZXRoaW5nCisgICAgIGVsc2UgdGhhdCdz IGJleW9uZCB0aGUgc2NvcGUgb2YgUE9TSVggdG8gYWxsb3cgdGhlIHN5c3RlbSB0byBpbmZlcgor ICAgICB0aGF0IHlvdSBkaWRuJ3QgcmVhbGx5IG1lYW4gaXQuCisKKyAgICAgSW4gbW9zdCBjYXNl cywgeW91IHNob3VsZCBqdXN0IGNvbXBpbGUsIHdpdGggbm8gc3RhbmRhcmRzLXJlbGF0ZWQKKyAg ICAgbWFjcm9zIGRlZmluZWQuIFRoZSBzeXN0ZW0gd2lsbCBtYWtlIGF2YWlsYWJsZSBldmVyeSBp bnRlcmZhY2UgYW5kCisgICAgIGRlZmluaXRpb24gdGhhdCBpc24ndCBpbmNvbXBhdGlibGUgd2l0 aCB0aGUgIm1haW4gc3RyZWFtIi4gVGhlcmUgbWF5CisgICAgIGluZGVlZCBiZSBjYXNlcyB3aGVy ZSB0d28gc3RhbmRhcmRzIGNyb3NzLCBhbmQgeW91IHJlYWxseSBjYW4ndCB1c2UKKyAgICAgYm90 aCB0b2dldGhlci4gQnV0LCBpbiBnZW5lcmFsLCB0aGV5IHBsYXkgbmljZWx5IHRvZ2V0aGVyIGFz IGxvbmcgYXMKKyAgICAgeW91IGRvbid0IGRvIGFueXRoaW5nIHJhc2ggLS0gbGlrZSB0ZWxsaW5n IHRoZSBzeXN0ZW0gdGhhdCBpdCdzIG5vdAorICAgICBhbGxvd2VkIHRvIGxldCB0aGVtLgorCisg ICAgIEluIHRoZSBhcmVhIG9mIHRocmVhZHMsIGJvdGggU29sYXJpcyBhbmQgRGlnaXRhbCBVbml4 IHN1cHBvcnQKKyAgICAgaW5jb21wYXRpYmxlIHRocmVhZCBBUElzLiBXZSBoYXZlIFBPU0lYIGFu ZCBEQ0UsIHRoZXkgaGF2ZSBQT1NJWCBhbmQKKyAgICAgVUkuIFRoZSBuYXN0eSBhcmVhcyBhcmUg aW4gdGhlIF9yIHJvdXRpbmVzIGFuZCBpbiBzb21lIGFzcGVjdHMgb2YKKyAgICAgc2lnbmFsIGJl aGF2aW9yLiBZb3UgY2Fubm90IGNvbXBpbGUgYSBzaW5nbGUgc291cmNlIGZpbGUgdGhhdCB1c2Vz CisgICAgIGJvdGggc2VtYW50aWNzLiBUaGF0J3MgbGlmZS4gSXQgc291bmRzIGFzIGlmIFNvbGFy aXMgZGVmYXVsdHMgdG8gdGhlCisgICAgIFVJIHZhcmlhbnRzLCBidXQgYWxsb3dzIHlvdSB0byBk ZWZpbmUgdGhpcyBfUE9TSVhfVEhSRUFEX1NFTUFOVElDUworICAgICB0byBnZXQgYXJvdW5kIGl0 LiBXZSBkZWZhdWx0IHRvIFBPU0lYLCBhbmQgYWxsb3cgeW91IHRvIGRlZmluZQorICAgICBfUFRI UkVBRF9VU0VfRDQgKGF1dG9tYXRpY2FsbHkgZGVmaW5lZCBieSB0aGUgY2MgIi10aHJlYWRzIiBz d2l0Y2gpCisgICAgIHRvIHNlbGVjdCB0aGUgRENFIHRocmVhZCB2YXJpYW50cy4gVGhhdCBkZWZh dWx0LCBiZWNhdXNlIHlvdSdyZQorICAgICBvcGVyYXRpbmcgb3V0c2lkZSBvZiBhbnkgaW5kaXZp ZHVhbCBzdGFuZGFyZCwgaXMgcmVhbGx5IGp1c3QgYQorICAgICBtYXJrZXRpbmcgZGVjaXNpb24u CisKKzkuMS4yLiBBTlNJIEMKKworICAgWyBbMjYxXVRvcCBdIFsgWzI2Ml1Db250ZW50cyBdIFsg WzI2M11TZWN0aW9uIENvbnRlbnRzIF0gWworICAgWzI2NF1TdWJzZWN0aW9uIENvbnRlbnRzIF0g WyBbMjY1XU5leHQgXSBbIFsyNjZdUHJldmlvdXMgXQorCisgICBUaGUgbWFqb3IgZGlmZmVyZW5j ZSBiZXR3ZWVuIEFOU0kgQyBhbmQgZWFybGllciBDIGNvbXBpbGVycyBpcyBmdW5jdGlvbgorICAg cHJvdG90eXBpbmcuIEFOU0kgQyBhbGxvd3MgZnVuY3Rpb24gYXJndW1lbnRzIHRvIGJlIGNoZWNr ZWQgZm9yIHR5cGUKKyAgIGFncmVlbWVudCwgYW5kICh3aGVuIHBvc3NpYmxlKSB0eXBlIGNvZXJj aW9uIGluIHRoZSBldmVudCBvZiBhCisgICBtaXNtYXRjaC4gRm9yIHRoaXMgdG8gd29yaywgZnVu Y3Rpb25zIGFuZCB0aGVpciBhcmd1bWVudHMgbXVzdCBiZQorICAgZGVjbGFyZWQgYmVmb3JlIHRo ZXkgYXJlIGNhbGxlZC4gVGhlIGZvcm0gZm9yIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyBpcworICAg ZGlmZmVyZW50IGluIEFOU0kgQyBhbmQgbm9uLUFOU0kgQyAoQU5TSSBDIGFsc28gYWNjZXB0cyB0 aGUgZWFybGllcgorICAgZm9ybSwgYnV0IHRoZW4gZG9lcyBub3QgZG8gdHlwZSBjaGVja2luZyku CisKKyAgIEFzIG9mIGVkaXQgMTY3LCBDLUtlcm1pdCB0cmllcyB0byB0YWtlIGZ1bGwgYWR2YW50 YWdlIG9mIEFOU0kgQworICAgZmVhdHVyZXMsIGVzcGVjaWFsbHkgZnVuY3Rpb24gcHJvdG90eXBp bmcuIFRoaXMgcmVtb3ZlcyBtYW55IGJ1Z3MKKyAgIGludHJvZHVjZWQgYnkgZGlmZmVyaW5nIGRh dGEgdHlwZXMgdXNlZCBvciByZXR1cm5lZCBieSB0aGUgc2FtZQorICAgZnVuY3Rpb25zIG9uIGRp ZmZlcmVudCBjb21wdXRlcnMuIEFOU0kgQyBmZWF0dXJlcyBhcmUgYXV0b21hdGljYWxseQorICAg ZW5hYmxlZCB3aGVuIHRoZSBzeW1ib2wgX19TVERDX18gaXMgZGVmaW5lZC4gTW9zdCBBTlNJIEMg Y29tcGlsZXJzLAorICAgc3VjaCBhcyBHTlUgQ0MgYW5kIHRoZSBuZXcgREVDIEMgY29tcGlsZXIg ZGVmaW5lIHRoaXMgc3ltYm9sCisgICBpbnRlcm5hbGx5LgorCisgICBPbiB0aGUgZG93bnNpZGUs IEFOU0kgQyBjb21waWxhdGlvbiBpbmNyZWFzZXMgdGhlCisgICBhZG1pbmlzdHJhdGl2ZS9idXJl YXVjcmF0aWMgYnVyZGVuLCBzcGV3aW5nIG91dCBjb3VudGxlc3MgdW5uZWVkZWQKKyAgIHdhcm5p bmdzIGFib3V0IG1pc21hdGNoZWQgdHlwZXMsIGVzcGVjaWFsbHkgd2hlbiB3ZSBhcmUgZGVhbGlu ZyB3aXRoCisgICBzaWduZWQgYW5kIHVuc2lnbmVkIGNoYXJhY3RlcnMsIHJlcXVpcmluZyBjYXN0 cyBldmVyeXdoZXJlIHRvIHNodXQgdXAKKyAgIHRoZSBtaW5kbGVzcyBjb21wbGFpbnRzIC0tIHRo ZXJlIGlzIG5vIHVzZSBmb3Igc2lnbmVkIGNoYXJzIGluIEtlcm1pdAorICAgKG9yIHByb2JhYmx5 IGFueXdoZXJlIGVsc2UpLiBTb21lIGNvbXBpbGVycywgbWVyY2lmdWxseSwgaW5jbHVkZSBhCisg ICAidHJlYXQgYWxsIGNoYXJzIGFzIHVuc2lnbmVkIiBvcHRpb24sIGFuZCB3aGVuIGF2YWlsYWJs ZSBpdCBzaG91bGQgYmUKKyAgIHVzZWQgLS0gbm90IG9ubHkgdG8gc3RvcCB0aGUgd2FybmluZ3Ms IGJ1dCBhbHNvIHRvIGF2b2lkIHVuaGVscGZ1bCBzaWduCisgICBleHRlbnNpb24gb24gaGlnaC1i aXQgY2hhcmFjdGVycy4KKworICAgVG8gZm9yY2UgdXNlIG9mIEFOU0kgQyBwcm90b3R5cGVzLCBp bmNsdWRlIC1EQ0tfQU5TSUMgb24gdGhlIGNjIGNvbW1hbmQKKyAgIGxpbmUuIFRvIGRpc2FibGUg dGhlIHVzZSBvZiBBTlNJIHByb3RvdHlwZXMsIGluY2x1ZGUgLUROT0FOU0kuCisKKzkuMS4zLiBP dGhlciBTdGFuZGFyZHMKKworICAgWyBbMjY3XVRvcCBdIFsgWzI2OF1Db250ZW50cyBdIFsgWzI2 OV1TZWN0aW9uIENvbnRlbnRzIF0gWworICAgWzI3MF1TdWJzZWN0aW9uIENvbnRlbnRzIF0gWyBb MjcxXU5leHQgXSBbIFsyNzJdUHJldmlvdXMgXQorCisgICBBcyB0aGUgeWVhcnMgZ28gYnksIHN0 YW5kYXJkcyB3aXRoLXdoaWNoLWFsbC1tdXN0LWNvbXBseSBjb250aW51ZSB0bworICAgcGlsZSB1 cDogQUVTLCBYUEcyLCBYUEczLCBYUEc0LCBGSVBTIDE1MS0yLCBzdWNjZXNzaXZlIGdlbmVyYXRp b25zIG9mCisgICBQT1NJWCwgT1NGLzEsIFgvT3BlbiwgU3BlYyAxMTcwLCBVTklYOTUsIE9wZW4g R3JvdXAgVU5JWDk4LCBJU08vSUVDCisgICA5OTQ1IHBhcnRzIDEtNCwgSVNPIDk4OTksIDg4T3Bl biwgT1MgOTksIFNpbmdsZSBVbml4IFNwZWNpZmljYXRpb24KKyAgIChTVVMsIFsyNzNdSUVFRSAx MDAzLjEtMjAwMSwgbm90IHRvIG1lbnRpb24gIm1hdHVyZSBzdGFuZGFyZHMiIGxpa2UgVjcsCisg ICA0LjIvNC4zQlNELCBTeXN0ZW0gViBSMyBhbmQgUjQgKFNWSUQyIGFuZCBTVklEMyksIDQuNEJT RCAodGhlIGJhc2lzIGZvcgorICAgQlNESSwgT3BlbkJTRCwgTmV0QlNELCBGcmVlQlNELCBNYWMg T1MgWCBldGMpLCAvdXNyL2dyb3VwLCBwbHVzCisgICBhc3NvcnRlZCBzZWlzbWljIHByb25vdW5j ZW1lbnRzIG9mIHRoZSBuZXZlcmVuZGluZyBzZXJpZXMgb2YgZXBoZW1lcmFsCisgICBjb3Jwb3Jh dGUgY29uc29ydGlhLCBub3QgdG8gbWVudGlvbiB0aGUgbGliYy12cy1nbGliYyB0dXJtb2lsIGlu IHRoZQorICAgTGludXggYXJlbmEgYW5kIHdobyBrbm93cyB3aGF0IGVsc2UuCisKKyAgIE5vbmUg b2YgdGhlc2Ugc3RhbmRhcmRzIHNpbXBsaWZpZXMgbGlmZSBmb3IgcG9ydGFibGUgYXBwbGljYXRp b25zIGxpa2UKKyAgIEMtS2VybWl0IC0tIGVhY2ggb25lIGlzIHNpbXBseSBvbmUgbW9yZSBlbnZp cm9ubWVudCB0byBzdXBwb3J0IChvcgorICAgY2lyY3VtdmVudCwgYXMgaW4gbWFueSBjYXNlcyB0 aGVzZSBzdGFuZGFyZHMgZG8gbW9yZSBoYXJtIHRoYW4gZ29vZCBieQorICAgZGVueWluZyBhY2Nl c3MgdG8gZmFjaWxpdGllcyB3ZSBuZWVkLCBlLmcuIGFzIG5vdGVkIGluIGFib3ZlIGluCisgICBb Mjc0XTkuMS4xKS4KKworOS4yLiBMaWJyYXJ5IElzc3VlcworCisgICBbIFsyNzVdVG9wIF0gWyBb Mjc2XUNvbnRlbnRzIF0gWyBbMjc3XVNlY3Rpb24gQ29udGVudHMgXSBbCisgICBbMjc4XVN1YnNl Y3Rpb24gQ29udGVudHMgXSBbIFsyNzldTmV4dCBdIFsgWzI4MF1QcmV2aW91cyBdCisKKyAgIE9u IG1vc3QgbW9kZXJuIHBsYXRmb3JtcywgYXBwbGljYXRpb25zIGFyZSAtLSBhbmQgb2Z0ZW4gbXVz dCBiZSAtLQorICAgZHluYW1pY2FsbHkgbGlua2VkLiBUaGlzIGhhcyBudW1lcm91cyBhZHZhbnRh Z2VzIChzbWFsbGVyIGV4ZWN1dGFibGVzLAorICAgYWJpbGl0eSB0byBwYXRjaCBhIGxpYnJhcnkg YW5kIHRoZXJlYnkgcGF0Y2ggYWxsIGFwcGxpY2F0aW9ucyB0aGF0IHVzZQorICAgaXQsIGV0Yyks IGJ1dCBhbHNvIGNhdXNlcyBzb21lIGhlYWRhY2hlczogbW9zdCBjb21tb25seSwgdGhlIGxpYnJh cnkgSUQKKyAgIGJ1aWx0IGludG8gdGhlIGV4ZWN1dGFibGUgYXQgbGluayB0aW1lIGRvZXMgbm90 IG1hdGNoIHRoZSBJRCBvZiB0aGUKKyAgIGNvcnJlc3BvbmRpbmcgbGlicmFyeSBvbiB0aGUgdGFy Z2V0IHN5c3RlbSwgYW5kIHNvIHRoZSBsb2FkZXIgcmVmdXNlcworICAgdG8gbGV0IHRoZSBhcHBs aWNhdGlvbiBydW4uCisKKyAgIFRoaXMgcHJvYmxlbSBvbmx5IGdldHMgd29yc2Ugb3ZlciB0aW1l LiBJbiB0aGUgTGludXggYW5kICpCU0Qgd29ybGQsIHdlCisgICBhbHNvIGhhdmUgdG90YWxseSBk aWZmZXJlbnQgbGlicmFyaWVzIChlYWNoIHdpdGggdGhlaXIgb3duIG5hbWVzIGFuZAorICAgbnVt YmVyaW5nIHN5c3RlbXMpIHRoYXQgY292ZXIgdGhlIHNhbWUgdGVycml0b3J5OyBmb3IgZXhhbXBs ZSwgY3Vyc2VzCisgICB2cyBuY3Vyc2VzLCBsaWJjIHZlcnN1cyBnbGliYy4gQ29tYmluYXRpb25z IHByb2xpZmVyYXRlIGFuZCBhbnkgZ2l2ZW4KKyAgIFVuaXggY29tcHV0ZXIgbWlnaHQgaGF2ZSBh bnkgY29tYmluYXRpb24uIEZvciB0aGlzIHJlYXNvbiBpdCBpcworICAgYmVjb21pbmcgaW5jcmVh c2luZ2x5IGRpZmZpY3VsdCB0byBwcm9kdWNlIGEgIkxpbnV4IGJpbmFyeSIgZm9yIGEgZ2l2ZW4K KyAgIGFyY2hpdGVjdHVyZSAoZS5nLiBQQyBvciBBbHBoYSkuIFRoZXJlIGhhcyB0byBiZSBhIHNl cGFyYXRlIGJpbmFyeSBmb3IKKyAgIChhdCBsZWFzdCkgZXZlcnkgY29tYmluYXRpb24gb2YgY3Vy c2VzIHZzIG5jdXJzZXMgYW5kIGxpYmMgdnMgZ2xpYmMuCisKKyAgIEluIHN1Y2ggY2FzZXMsIHRo ZSBiZXN0IGFkdmljZSBpcyBmb3IgZXZlcnkgdXNlciB0byBidWlsZCBDLUtlcm1pdCBmcm9tCisg ICBzb3VyY2UgY29kZSBvbiB0aGUgc3lzdGVtIHdoZXJlIGl0IHdpbGwgcnVuLiBUb28gYmFkIG1v c3QgY29tbWVyY2lhbAorICAgVW5peCB2ZW5kb3JzIGhhdmUgc3RvcHBlZCBpbmNsdWRpbmcgQyBj b21waWxlcnMgd2l0aCB0aGUgb3BlcmF0aW5nCisgICBzeXN0ZW0hCisKKzkuMy4gVW5peCBGaWxl IFN5c3RlbSBQZWN1bGlhcml0aWVzCisKKyAgIFsgWzI4MV1Ub3AgXSBbIFsyODJdQ29udGVudHMg XSBbIFsyODNdU2VjdGlvbiBDb250ZW50cyBdIFsgWzI4NF1OZXh0IF0KKyAgIFsgWzI4NV1QcmV2 aW91cyBdCisKKyAgIE5vcm1hbGx5LCBpbmNsdWRpbmcgYSBCU0QsIFN5c3RlbS1WLCBQT1NJWCwg b3IgRElSRU5UIGZsYWcgaW4gdGhlIG1ha2UKKyAgIGVudHJ5IHNlbGVjdHMgdGhlIHJpZ2h0IGZp bGUgc3lzdGVtIGNvZGUuIEJ1dCBzb21lIHZlcnNpb25zIG9mIFVuaXggYXJlCisgICBpbmNvbnNp c3RlbnQgaW4gdGhpcyByZWdhcmQsIGFuZCBidWlsZGluZyBpbiB0aGUgbm9ybWFsIHdheSBlaXRo ZXIKKyAgIGdpdmVzIGNvbXBpbGVyIG9yIGxpbmtlciBlcnJvcnMsIG9yIHJlc3VsdHMgaW4gcHJv YmxlbXMgYXQgcnVudGltZSwKKyAgIHR5cGljYWxseSBmYWlsdXJlIHRvIHByb3Blcmx5IGV4cGFu ZCB3aWxkY2FyZCBmaWxlIHNwZWNpZmljYXRpb25zIHdoZW4KKyAgIHlvdSBkbyBzb21ldGhpbmcg bGlrZSAic2VuZCAqLioiLCBvciBmYWlsdXJlIHRvIHJlY29nbml6ZSBsb25nCisgICBmaWxlbmFt ZXMsIGFzIGluICJzZW5kIGZpbGV3aXRoYXZlcnl2ZXJ5dmVyeXZlcnl2ZXJ5bG9uZ25hbWUiLgor CisgICBDLUtlcm1pdCBpcyBzdXBwb3NlZCB0byBrbm93IGFib3V0IGFsbCB0aGUgdmFyaW91cyBz dHlsZXMgb2YgVW5peCBmaWxlCisgICBzeXN0ZW1zLCBidXQgaXQgaGFzIHRvIGJlIHRvbGQgd2hp Y2ggb25lIHRvIHVzZSB3aGVuIHlvdSBidWlsZCBpdCwKKyAgIHVzdWFsbHkgaW4gdGhlIG1ha2Vm aWxlIHRhcmdldCBDRkxBR1MgYXMgc2hvd24gYmVsb3csIGJ1dCB5b3UgbWlnaHQKKyAgIGFsc28g aGF2ZSB0byBhZGQgc29tZXRoaW5nIGxpa2UgLUkvdXNyL2luY2x1ZGUvYnNkIHRvIENGTEFHUywg b3IKKyAgIHNvbWV0aGluZyBsaWtlIC1sYnNkIHRvIExJQlMuCisKKyAgIEMtS2VybWl0IGdpdmVz IHlvdSB0aGUgZm9sbG93aW5nIENGTEFHUyBzd2l0Y2hlcyB0byBhZGFwdCB0byB5b3VyIGZpbGUK KyAgIHN5c3RlbSdzIHBlY3VsaWFyaXRpZXM6CisKKy1ERElSRU5UICAgLSAjaW5jbHVkZSA8ZGly ZW50Lmg+CistRFNESVJFTlQgIC0gI2luY2x1ZGUgPHN5cy9kaXJlbnQuaD4KKy1ETkRJUiAgICAg LSAjaW5jbHVkZSA8bmRpci5oPgorLURYTkRJUiAgICAtICNpbmNsdWRlIDxzeXMvbmRpci5oPgor LURSVFUgICAgICAtICNpbmNsdWRlICIvdXNyL2xpYi9uZGlyLmgiLCBvbmx5IGlmIE5ESVIgYW5k IFhORElSIG5vdCBkZWZpbmVkLgorLURTWVNVVElNSCAtICNpbmNsdWRlIDxzeXMvdXRpbWUuaD4g Zm9yIHNldHRpbmcgZmlsZSBjcmVhdGlvbiBkYXRlcy4KKy1EVVRJTUVIICAgLSAjaW5jbHVkZSA8 dXRpbWUuaD4gZm9yIHNldHRpbmcgZmlsZSBjcmVhdGlvbiBkYXRlcy4KKworICAgKE5vdGUsIFJU VSBzaG91bGQgb25seSBiZSB1c2VkIGZvciBNYXNzY29tcCBSVFUgc3lzdGVtcywgYmVjYXVzZSBp dAorICAgYWxzbyBzZWxlY3RzIGNlcnRhaW4gb3RoZXIgUlRVLXNwZWNpZmljIGZlYXR1cmVzLikK KworICAgSWYgbm9uZSBvZiB0aGVzZSBpcyBkZWZpbmVkLCB0aGVuIDxzeXMvZGlyLmg+IGlzIHVz ZWQuIElNUE9SVEFOVDogSWYKKyAgIHlvdXIgc3lzdGVtIGhhcyB0aGUgZmlsZSAvdXNyL2luY2x1 ZGUvZGlyZW50LmggdGhlbiBiZSBzdXJlIHRvIGFkZAorICAgLURESVJFTlQgdG8geW91ciBtYWtl ZmlsZSB0YXJnZXQncyBDRkxBR1MuICJkaXJlbnQiIHNob3VsZCBiZSB1c2VkIGluCisgICBwcmVm ZXJlbmNlIHRvIGFueSBvZiB0aGUgb3RoZXJzLCBiZWNhdXNlIGl0IHN1cHBvcnRzIGFsbCB0aGUg ZmVhdHVyZXMKKyAgIG9mIHlvdXIgZmlsZSBzeXN0ZW0sIGFuZCB0aGUgb3RoZXJzIHByb2JhYmx5 IGRvbid0LgorCisgICBIYXZpbmcgc2VsZWN0ZWQgdGhlIGFwcHJvcHJpYXRlIGRpcmVjdG9yeSBo ZWFkZXIgZmlsZSwgeW91IG1pZ2h0IGFsc28KKyAgIG5lZWQgdG8gdGVsbCBLZXJtaXQgaG93IHRv IGRlY2xhcmUgdGhlIHJvdXRpbmVzIGFuZCB2YXJpYWJsZXMgaXQgbmVlZHMKKyAgIHRvIHJlYWQg dGhlIGRpcmVjdG9yeS4gVGhpcyBoYXBwZW5zIG1vc3QgY29tbW9ubHkgb24gQVQmVCBTeXN0ZW0t VgorICAgYmFzZWQgVU5JWGVzLCBwYXJ0aWN1bGFybHkgU3lzdGVtIFYgUjMgYW5kIGVhcmxpZXIs IHRoYXQgcHJvdmlkZSBsb25nCisgICBmaWxlIGFuZCBkaXJlY3RvcnkgbmFtZXMgKGxvbmdlciB0 aGFuIDE0IGNoYXJhY3RlcnMpLiBFeGFtcGxlcyBpbmNsdWRlCisgICBjZXJ0YWluIHJlbGVhc2Vz IG9mIEhQLVVYLCBESUFCIEROSVgsIG9sZGVyIHZlcnNpb25zIG9mIFNpbGljb24KKyAgIEdyYXBo aWNzIElSSVgsIGFuZCBwZXJoYXBzIGFsc28gTUlQUy4gSW4gdGhpcyBjYXNlLCB0cnkgYWRkaW5n IC1ETE9OR0ZOCisgICB0byB5b3VyIG1ha2VmaWxlIHRhcmdldC4KKworICAgQW5vdGhlciBwcm9i bGVtIGNoaWxkIGlzIDxzeXMvZmlsZS5oPi4gTW9zdCBVbml4IEMtS2VybWl0IHZlcnNpb25zIG5l ZWQKKyAgIHRvICNpbmNsdWRlIHRoaXMgZmlsZSBmcm9tIHdpdGhpbiBbMjg2XWNrdWZpby5jIGFu ZCBbMjg3XWNrdXRpby5jLCBidXQKKyAgIHNvbWUgbm90IG9ubHkgZG8gbm90IG5lZWQgdG8gaW5j bHVkZSBpdCwgYnV0IE1VU1Qgbm90IGluY2x1ZGUgaXQKKyAgIGJlY2F1c2UgKGEpIGl0IGRvZXNu J3QgZXhpc3QsIG9yIChiKSBpdCBoYXMgYWxyZWFkeSBiZWVuIGluY2x1ZGVkIGJ5CisgICBzb21l IG90aGVyIGhlYWRlciBmaWxlIGFuZCBpdCBkb2Vzbid0IHByb3RlY3QgaXRzZWxmIGFnYWluc3Qg bXVsdGlwbGUKKyAgIGluY2x1c2lvbiwgb3IgKGMpIHNvbWUgb3RoZXIgcmVhc29uIHRoYXQgcHJl dmVudHMgc3VjY2Vzc2Z1bAorICAgY29tcGlsYXRpb24uIElmIHlvdSBoYXZlIGNvbXBpbGF0aW9u IHByb2JsZW1zIHRoYXQgc2VlbSB0byBzdGVtIGZyb20KKyAgIGluY2x1ZGluZyB0aGlzIGZpbGUs IHRoZW4gYWRkIHRoZSBmb2xsb3dpbmcgc3dpdGNoIHRvIENGTEFHUyBpbiB5b3VyCisgICBtYWtl ZmlsZSB0YXJnZXQ6CisKKy1ETk9GSUxFSAorCisgICBUaGVyZSBhcmUgYSBmZXcgb2RkIGNhc2Vz IHdoZXJlIDxzeXMvZmlsZS5oPiBtdXN0IGJlIGluY2x1ZGVkIGluIG9uZSBvZgorICAgdGhlIGNr dVtmdF1pby5jIGZpbGVzLCBidXQgbm90IHRoZSBvdGhlci4gSW4gdGhhdCBjYXNlLCBhZGQgdGhl CisgICBhZm9yZW1lbnRpb25lZCBzd2l0Y2gsIGJ1dCBnbyBpbnRvIHRoZSBmaWxlIHRoYXQgbmVl ZHMgPHN5cy9maWxlLmg+IGFuZAorICAgYWRkIHNvbWV0aGluZyBsaWtlIHRoaXM6CisKKyNpZmRl ZiBYWFggICAgICAgLyogKHdoZXJlIFhYWCBpcyBhIHN5bWJvbCB1bmlxdWUgdG8geW91ciBzeXN0 ZW0pICovCisjdW5kZWYgTk9GSUxFSAorI2VuZGlmIC8qIFhYWCAqLworCisgICBiZWZvcmUgdGhl IHNlY3Rpb24gdGhhdCBpbmNsdWRlcyA8c3lzL2ZpbGUuaD4uCisKKyAgIEtlcm1pdCdzIFNFTkQg Y29tbWFuZCBleHBhbmRzIHdpbGRjYXJkIGNoYXJhY3RlcnMgIj8iIGFuZCAiKiIgaXRzZWxmLgor ICAgQmVmb3JlIHZlcnNpb24gNUEsIGNvbW1hbmRzIGxpa2UgInNlbmQgKiIgd291bGQgc2VuZCBh bGwgcmVndWxhcgorICAgKG5vbi1kaXJlY3RvcnkpIGZpbGVzLCBpbmNsdWRpbmcgImhpZGRlbiBm aWxlcyIgKHdob3NlIG5hbWVzIHN0YXJ0IHdpdGgKKyAgICIuIikuIEluIHZlcnNpb24gNUEsIHRo ZSBkZWZhdWx0IGJlaGF2aW9yIGlzIHRvIG1hdGNoIGxpa2UgdGhlIEJvdXJuZQorICAgc2hlbGwg b3IgdGhlIGxzIGNvbW1hbmQsIGFuZCBub3QgaW5jbHVkZSBmaWxlcyB3aG9zZSBuYW1lcyBzdGFy dCB3aXRoCisgICBkb3QuIFN1Y2ggZmlsZXMgY2FuIHN0aWxsIGJlIHNlbnQgaWYgdGhlIGRvdCBp cyBpbmNsdWRlZCBleHBsaWNpdGx5IGluCisgICB0aGUgU0VORCBjb21tYW5kOiAic2VuZCAub29m YSwgc2VuZCAuKiIuIFRvIGNoYW5nZSBiYWNrIHRvIHRoZSBvbGQgd2F5CisgICBhbmQgbGV0IGxl YWRpbmcgd2lsZGNhcmQgY2hhcmFjdGVycyBtYXRjaCBkb3QgZmlsZXMsIGluY2x1ZGUgdGhlCisg ICBmb2xsb3dpbmcgaW4geW91ciBDRkxBR1M6CisKKy1ETUFUQ0hET1QKKworICAgKEluIEMtS2Vy bWl0IDYuMCwgdGhlcmUgaXMgYWxzbyBhIGNvbW1hbmQgdG8gY29udHJvbCB0aGlzIGF0IHJ1bnRp bWUuKQorCisgICBDb21wbGFpbnRzIGFib3V0IGRhdGEtdHlwZSBtaXNtYXRjaGVzOgorCisgICAg ICogSWYgeW91IGdldCBjb21waWxlLXRpbWUgY29tcGxhaW50cyBhYm91dCBkYXRhIHR5cGUgbWlz bWF0Y2hlcyBmb3IKKyAgICAgICBwcm9jZXNzLUlEIHJlbGF0ZWQgZnVuY3Rpb25zIGxpa2UgZ2V0 cGlkKCksIGFkZCAtRFBJRF9UPXBpZF90LgorICAgICAqIElmIHlvdSBnZXQgY29tcGlsZS10aW1l IGNvbXBsYWludHMgYWJvdXQgZGF0YSB0eXBlIG1pc21hdGNoZXMgZm9yCisgICAgICAgdXNlciBJ RCByZWxhdGVkIGZ1bmN0aW9ucyBsaWtlIGdldHVpZCgpLCBhZGQgLURVSURfVD11aWRfdC4KKyAg ICAgKiBJZiB5b3UgZ2V0IGNvbXBpbGUtdGltZSBjb21wbGFpbnRzIGFib3V0IGRhdGEgdHlwZSBt aXNtYXRjaGVzIGZvcgorICAgICAgIHVzZXItSUQgcmVsYXRlZCBmdW5jdGlvbnMgbGlrZSBnZXRn aWQoKSwgYWRkIC1ER0lEX1Q9Z2lkX3QuCisgICAgICogSWYgeW91IGdldCBjb21waWxlLXRpbWUg Y29tcGxhaW50cyBhYm91dCBkYXRhIHR5cGUgbWlzbWF0Y2hlcyBmb3IKKyAgICAgICBnZXRwd3Vp ZCgpLCBhZGQgLURQV0lEX1Q9dWlkX3QgKG9yIHdoYXRldmVyIGl0IHNob3VsZCBiZSkuCisKKyAg IEZpbGUgY3JlYXRpb24gZGF0ZXM6IEMtS2VybWl0IGF0dGVtcHRzIHRvIHNldCB0aGUgY3JlYXRp b24gZGF0ZS90aW1lIG9mCisgICBhbiBpbmNvbWluZyBmaWxlIGFjY29yZGluZyB0byB0aGUgZGF0 ZS90aW1lIGdpdmVuIGluIHRoZSBmaWxlJ3MKKyAgIGF0dHJpYnV0ZSBwYWNrZXQsIGlmIGFueS4g SWYgeW91IGZpbmQgdGhhdCB0aGUgZGF0ZXMgYXJlIHNldAorICAgaW5jb3JyZWN0bHksIHlvdSBt aWdodCBuZWVkIHRvIGJ1aWxkIEtlcm1pdCB3aXRoIHRoZSAtRFNZU1VUSU1FSCBmbGFnLAorICAg dG8gdGVsbCBpdCB0byBpbmNsdWRlIDxzeXMvdXRpbWUuaD4uIElmIHRoYXQgZG9lc24ndCBoZWxw LCBsb29rIGF0IHRoZQorICAgY29kZSBpbiB6c3RyZHQoKSBpbiBbMjg4XWNrdWZpby5jLgorCis5 LjQuIEhhcmR3YXJlIEZsb3cgQ29udHJvbAorCisgICBbIFsyODldVG9wIF0gWyBbMjkwXUNvbnRl bnRzIF0gWyBbMjkxXVNlY3Rpb24gQ29udGVudHMgXSBbIFsyOTJdTmV4dCBdCisgICBbIFsyOTNd UHJldmlvdXMgXQorCisgICBIYXJkd2FyZSBmbG93IGNvbnRyb2wgaXMgYSBwcm9ibGVtYXRpYyBj b25jZXB0IGluIG1hbnkgcG9wdWxhciBVbml4CisgICBpbXBsZW1lbnRhdGlvbnMuIE9mdGVuIGl0 IGlzIGxhY2tpbmcgYWx0b2dldGhlciwgYW5kIHdoZW4gYXZhaWxhYmxlLAorICAgdGhlIGFwcGxp Y2F0aW9uIHByb2dyYW0gaW50ZXJmYWNlIChBUEkpIHRvIGl0IGlzIGluY29uc2lzdGVudCBmcm9t CisgICBzeXN0ZW0gdG8gc3lzdGVtLiBIZXJlIGFyZSBzb21lIGV4YW1wbGVzOgorCisgICAgYS4g UE9TSVggZG9lcyBub3Qgc3VwcG9ydCBoYXJkd2FyZSBmbG93IGNvbnRyb2wuCisgICAgYi4gUlRT L0NUUyBmbG93IGNvbnRyb2wgc3VwcG9ydCBNSUdIVCBiZSBhdmFpbGFibGUgZm9yIFN5c3RlbSBW IFIzIGFuZAorICAgICAgIGxhdGVyIGlmIC91c3IvaW5jbHVkZS90ZXJtaW94LmggZXhpc3RzIChp dHMgc3VjY2Vzc2Z1bCBvcGVyYXRpb24KKyAgICAgICBhbHNvIGRlcGVuZHMgb24gdGhlIGRldmlj ZSBkcml2ZXIsIGFuZCB0aGUgZGV2aWNlIGl0c2VsZiwgbm90IHRvCisgICAgICAgbWVudGlvbiB0 aGUgWzI5NF1jYWJsZSwgZXRjLCBhY3R1YWxseSBzdXBwb3J0aW5nIGl0KS4gSWYgeW91cgorICAg ICAgIFNWUjMtb3ItbGF0ZXIgVW5peCBzeXN0ZW0gZG9lcyBoYXZlIHRoaXMgZmlsZSwgYWRkOgor CistRFRFUk1JT1gKKworICAgICAgIHRvIHlvdXIgQ0ZMQUdTLiBJZiB0aGUgZmlsZSBpcyBpbiAv dXNyL2luY2x1ZGUvc3lzIGluc3RlYWQsIGFkZDoKKworLURTVEVSTUlPWAorCisgICAgICAgTm90 ZSB0aGF0IHRoZSBwcmVzZW5jZSBvZiB0aGlzIGZpbGUgZG9lcyBub3QgZ3VhcmFudGVlIHRoYXQg UlRTL0NUUworICAgICAgIHdpbGwgYWN0dWFsbHkgd29yayAtLSB0aGF0IGRlcGVuZHMgb24gdGhl IGRldmljZS1kcml2ZXIKKyAgICAgICBpbXBsZW1lbnRhdGlvbiAocmVwb3J0ZWRseSwgbWFueSBV bml4IHZlcnNpb25zIHRyZWF0CisgICAgICAgaGFyZHdhcmUtZmxvdy1jb250cm9sIHJlbGF0ZWQg aW9jdGwncyBhcyBuby1vcHMpLgorICAgIGMuIFNlYXJjaCAoImdyZXAgLWkiKSB0aHJvdWdoIC91 c3IvaW5jbHVkZS8qLmggYW5kCisgICAgICAgL3Vzci9pbmNsdWRlL3N5cy8qLmggZm9yIFJUUyBv ciBDVFMgYW5kIHNlZSB3aGF0IHR1cm5zIHVwLiBGb3IKKyAgICAgICBleGFtcGxlLCBpbiBTdW5P UyA0Lnggd2UgZmluZCAiQ1JUU0NUUyIuIEZpZ3VyaW5nIG91dCBob3cgdG8gdXNlIGl0CisgICAg ICAgaXMgYW5vdGhlciBxdWVzdGlvbiBlbnRpcmVseSEgSW4gSUJNIEFJWCBSUy82MDAwIDMueCwg d2UgaGF2ZSB0bworICAgICAgICJhZGQiIGEgbmV3ICJsaW5lIGRpc2NpcGxpbmUiIChhbmQgeW91 IHdvbid0IGZpbmQgdXBwZXJjYXNlIFJUUyBvcgorICAgICAgIENUUyBzeW1ib2xzIGluIHRoZSBo ZWFkZXIgZmlsZXMpLgorICAgIGQuIE5lWFRTVEVQIGFuZCBJUklYLCBhbmQgcG9zc2libHkgb3Ro ZXJzLCBzdXBwb3J0IGhhcmR3YXJlIGZsb3cKKyAgICAgICBjb250cm9sLCBidXQgZG8gbm90IGZ1 cm5pc2ggYW4gQVBJIHRvIGNvbnRyb2wgaXQsIGFuZCB0aHVzIG9uIHRoZXNlCisgICAgICAgc3lz dGVtcyBLZXJtaXQgaGFzIG5vIGNvbW1hbmQgdG8gc2VsZWN0IGl0IC0tIGluc3RlYWQsIGEgc3Bl Y2lhbAorICAgICAgIGRldmljZSBuYW1lIG11c3QgYmUgdXNlZC4gKE5lWFRTVEVQOiAvZGV2L2N1 ZmEgaW5zdGVhZCBvZiAvZGV2L2N1YTsKKyAgICAgICBJUklYOiAvZGV2L3R0eWYwMCkKKworICAg U2VlIHRoZSByb3V0aW5lIHR0aGZsb3coKSBpbiBbMjk1XWNrdXRpby5jIGZvciBkZXRhaWxzLiBJ ZiB5b3UgZmluZAorICAgdGhhdCB5b3VyIHN5c3RlbSBvZmZlcnMgaGFyZHdhcmUgZmxvdyBjb250 cm9sIHNlbGVjdGlvbiB1bmRlciBwcm9ncmFtCisgICBjb250cm9sLCB5b3UgY2FuIGFkZCB0aGlz IGNhcGFiaWxpdHkgdG8gQy1LZXJtaXQgYXMgZm9sbG93czoKKworICAgIGEuIFNlZSBpZiBpdCBh Z3JlZXMgd2l0aCBvbmUgb2YgdGhlIG1ldGhvZHMgYWxyZWFkeSB1c2VkIGluIHR0aGZsb3coKS4K KyAgICAgICBpZiBub3QsIGFkZCBuZXcgY29kZSwgYXBwcm9wcmlhdGVseSAjaWZkZWYnZC4KKyAg ICBiLiBBZGQgLURDS19SVFNDVFMgdG8gdGhlIGNvbXBpbGVyIENGTEFHUyBpbiB5b3VyIG1ha2Vm aWxlIHRhcmdldCBvcgorICAgICAgIGRlZmluZSB0aGlzIHN5bWJvbCB3aXRoaW4gdGhlIGFwcHJv cHJpYXRlICNpZmRlZnMgaW4gWzI5Nl1ja2NkZWIuaC4KKworICAgVG8gaWxsdXN0cmF0ZSB0aGUg ZGlmZmljdWx0aWVzIHdpdGggUlRTL0NUUywgaGVyZSBpcyBhIHRhbGUgZnJvbSBKYW1pZQorICAg V2F0c29uIDxqd0BhZGFzb2Z0LmNoPiwgd2hvIGFkZGVkIHRoZSBSVFMvQ1RTIGNvZGUgZm9yIHRo ZSBSUy82MDAwLAorICAgYWJvdXQgaGlzIGF0dGVtcHRzIHRvIGRvIHRoZSBzYW1lIGZvciBERUMg VUxUUklYOgorCisgICAgICJUaGUgbnVtYmVyIGFuZCB0eXBlIG9mIGhhcmR3YXJlIHNpZ25hbHMg YXZhaWxhYmxlIHRvL2Zyb20gYSBzZXJpYWwKKyAgICAgcG9ydCB2YXJ5IGJldHdlZW4gZGlmZmVy ZW50IG1hY2hpbmVzIGFuZCBkaWZmZXJlbnQgdHlwZXMgb2Ygc2VyaWFsCisgICAgIGludGVyZmFj ZXMgb24gZWFjaCBtYWNoaW5lLiBUaGlzIG1lYW5zIHRoYXQsIGZvciBleGFtcGxlLCB0aGVyZSBh cmUKKyAgICAgdmlydHVhbGx5IG5vIGhhcmR3YXJlIHNpZ25hbHMgaW4gb3Igb3V0IGF2YWlsYWJs ZSBvbiB0aGUgREVDc3lzdGVtCisgICAgIDMwMDAvMzEwMCBzZXJpZXM7IG9uIHRoZSBERUNzeXN0 ZW0gNTAwMC8yeHggc2VyaWVzIGFsbCBtb2RlbSBzaWduYWxzCisgICAgIGluL291dCBhcmUgcHJl c2VudCBvbiBib3RoIGJ1aWx0LWluIHNlcmlhbCBwb3J0czsgb24gdGhlIERFQ3N5c3RlbQorICAg ICA1MTAwIHNvbWUgcG9ydHMgaGF2ZSBhbGwgc2lnbmFscyBhbmQgc29tZSBvbmx5IGhhdmUgc29t ZTsgYW5kIHNvCisgICAgIG9uLi4uIEl0IGxvb2tzIHRvIG1lIGFzIGlmIHRoaXMgcHJldHR5IHdl bGwgcnVsZXMgb3V0IGFueSBhdHRlbXB0IHRvCisgICAgIHVzZSBoYXJkd2FyZSBmbG93IGNvbnRy b2wgb24gdGhlc2UgcGxhdGZvcm1zLCBldmVuIGlmIHdlIGNvdWxkCisgICAgIGZpZ3VyZSBvdXQg aG93IHRvIGRvIGl0LiBUaGUgY29uZnVzaW9uIG9uIHRoZSB1c2VyIGxldmVsIGFib3V0CisgICAg IHdoZXRoZXIgb3Igbm90IGl0IHNob3VsZCB3b3JrIGZvciBhbnkgZ2l2ZW4gcGxhdGZvcm0gb3Ig cG9ydCB3b3VsZAorICAgICBiZSB0cmVtZW5kb3VzLiBBbmQgdGhlbiBpdCBpc24ndCBjbGVhciBo b3cgdG8gdXNlIHRoZSBoYXJkd2FyZQorICAgICBzaWduYWxzIGV2ZW4gaW4gdGhlIGNhc2VzIHdo ZXJlIHRoZSBkZXZpY2Ugc3VwcG9ydHMgdGhlbS4iCisKKyAgOS41LiBUZXJtaW5hbCBTcGVlZHMK KworICAgWyBbMjk3XVRvcCBdIFsgWzI5OF1Db250ZW50cyBdIFsgWzI5OV1TZWN0aW9uIENvbnRl bnRzIF0gWyBbMzAwXU5leHQgXQorICAgWyBbMzAxXVByZXZpb3VzIF0KKworICAgVGhlIGFsbG93 YWJsZSBzcGVlZHMgZm9yIHRoZSBTRVQgU1BFRUQgY29tbWFuZCBhcmUgZGVmaW5lZCBpbgorICAg WzMwMl1ja2NkZWIuaC4gSWYgeW91ciBzeXN0ZW0gc3VwcG9ydHMgc3BlZWRzIHRoYXQgYXJlIG5v dCBsaXN0ZWQgaW4KKyAgICJzZXQgc3BlZWQgPyIsIHlvdSBjYW4gYWRkIGRlZmluaXRpb25zIGZv ciB0aGVtIHRvIGNrY2RlYi5oLgorCisgICBUaGVuIGlmIHRoZSBzcGVlZCB5b3UgYXJlIGFkZGlu ZyBpcyBvbmUgdGhhdCB3YXMgbmV2ZXIgdXNlZCBiZWZvcmUgaW4KKyAgIEtlcm1pdCwgc3VjaCBh cyA5MjE2MDAsIHlvdSdsbCBhbHNvIG5lZWQgdG8gYWRkIHRoZSBhcHByb3ByaWF0ZQorICAga2V5 d29yZHMgdG8gc3BkdGFiW10gaW4gWzMwM11ja3V1czMuYywgYW5kIHRoZSBjb3JyZXNwb25kaW5n IGNhc2UgdG8KKyAgIHR0c3NwZCgpIGluIFszMDRdY2t1dGlvLmMuCisKKyAgOS42LiBNaWxsaXNl Y29uZCBTbGVlcHMKKworICAgWyBbMzA1XVRvcCBdIFsgWzMwNl1Db250ZW50cyBdIFsgWzMwN11T ZWN0aW9uIENvbnRlbnRzIF0gWyBbMzA4XU5leHQgXQorICAgWyBbMzA5XVByZXZpb3VzIF0KKwor ICAgVGhlcmUgaXMgbm8gc3RhbmRhcmQgZm9yIG1pbGxpc2Vjb25kIHNsZWVwcywgYnV0IGF0IGxl YXN0IGZpdmUKKyAgIGRpZmZlcmVudCBmdW5jdGlvbnMgaGF2ZSBhcHBlYXJlZCBpbiB2YXJpb3Vz IFVuaXggdmVyc2lvbnMgdGhhdCBjYW4gYmUKKyAgIHVzZWQgZm9yIHRoaXMgcHVycG9zZTogbmFw KCkgKG1vc3RseSBpbiBTeXN0ZW0gViksIHVzbGVlcCgpIChmb3VuZCBhdAorICAgbGVhc3QgaW4g U3VuT1MgYW5kIE5lWFQgT1MpLCBzZWxlY3QoKSAoZm91bmQgaW4gNC4yQlNEIGFuZCBsYXRlciwg YW5kCisgICBwYXJ0IG9mIGFueSBUQ1AvSVAgc29ja2V0cyBsaWJyYXJ5KSwgbmFub3NsZWVwKCks IGFuZCBzZ2luYXAoKS4gSWYgeW91CisgICBoYXZlIGFueSBvZiB0aGVzZSBhdmFpbGFibGUsIHBp Y2sgb25lIChpbiB0aGlzIG9yZGVyIG9mIHByZWZlcmVuY2UsIGlmCisgICB5b3UgaGF2ZSBtb3Jl IHRoYW4gb25lKToKKworLURTRUxFQ1Q6IEluY2x1ZGUgdGhpcyBpbiBDRkxBR1MgaWYgeW91ciBz eXN0ZW0gaGFzIHRoZSBzZWxlY3QoKSBmdW5jdGlvbi4KKy1ETkFQOiAgICBJbmNsdWRlIHRoaXMg aW4gQ0ZMQUdTIGlmIHlvdXIgc3lzdGVtIGhhcyB0aGUgbmFwKCkgZnVuY3Rpb24uCistVVNMRUVQ OiAgSW5jbHVkZSB0aGlzIGluIENGTEFHUyBpZiB5b3VyIHN5c3RlbSBoYXMgdGhlIHVzbGVlcCgp IGZ1bmN0aW9uLgorCisgICBOT1RFOiBUaGUgbmFwKCkgZnVuY3Rpb24gaXMgYXNzdW1lZCB0byBi ZSBhIGZ1bmN0aW9uIHRoYXQgcHV0cyB0aGUKKyAgIHByb2Nlc3MgdG8gc2xlZXAgZm9yIHRoZSBn aXZlbiBudW1iZXIgb2YgbWlsbGlzZWNvbmRzLiBJZiB5b3VyIHN5c3RlbSdzCisgICBuYXAoKSBm dW5jdGlvbiBkb2VzIHNvbWV0aGluZyBlbHNlIG9yIHVzZXMgc29tZSBvdGhlciB1bml0cyBvZiB0 aW1lCisgICAobGlrZSB0aGUgTkNSIFRvd2VyIDMyLCB3aGljaCB1c2VzIGNsb2NrLXRpY2tzKSwg ZG8gbm90IGluY2x1ZGUgLUROQVAuCisKKyAgIFJlcG9ydGVkbHksIGFsbCB2ZXJzaW9ucyBvZiBT eXN0ZW0gViBSNCBmb3IgSW50ZWwtYmFzZWQgY29tcHV0ZXJzLCBhbmQKKyAgIHBvc3NpYmx5IGFs c28gU1ZSMy4yLCBpbmNsdWRlIG5hcCgpIGFzIGEga2VybmVsIGNhbGwsIGJ1dCBpdCdzIG5vdCBp bgorICAgdGhlIGxpYnJhcnkuIFRvIGluY2x1ZGUgY29kZSB0byB1c2UgaXQgdmlhIHN5c2NhbGwo MzExMix4KSwgd2l0aG91dAorICAgaGF2aW5nIHRvIGluY2x1ZGUgWGVuaXggY29tcGF0aWJpbGl0 eSBmZWF0dXJlcywgaW5jbHVkZSB0aGUgZm9sbG93aW5nCisgICBjb21waWxlLXRpbWUgb3B0aW9u OgorCistRE5BUEhBQ0sKKworICA5LjcuIE5vbmRlc3RydWN0aXZlIElucHV0IEJ1ZmZlciBQZWVr aW5nCisKKyAgIFsgWzMxMF1Ub3AgXSBbIFszMTFdQ29udGVudHMgXSBbIFszMTJdU2VjdGlvbiBD b250ZW50cyBdIFsgWzMxM11OZXh0IF0KKyAgIFsgWzMxNF1QcmV2aW91cyBdCisKKyAgIFNvbWUg QVQmVCBVbml4IHZlcnNpb25zIGhhdmUgbm8gd2F5IHRvIGNoZWNrIGlmIGlucHV0IGlzIHdhaXRp bmcgb24gYQorICAgdHR5IGRldmljZSwgYnV0IHRoaXMgaXMgYSB2ZXJ5IGltcG9ydGFudCBmZWF0 dXJlIGZvciBLZXJtaXQuIFdpdGhvdXQKKyAgIGl0LCBzbGlkaW5nIHdpbmRvd3MgbWlnaHQgbm90 IHdvcmsgdmVyeSB3ZWxsIChvciBhdCBhbGwpLCBhbmQgeW91IGFsc28KKyAgIGhhdmUgdG8gdHlw ZSB5b3VyIGVzY2FwZSBjaGFyYWN0ZXIgdG8gZ2V0IEtlcm1pdCdzIGF0dGVudGlvbiBpbiBvcmRl cgorICAgdG8gaW50ZXJydXB0IGEgbG9jYWwtbW9kZSBmaWxlIHRyYW5zZmVyLiBJZiB5b3VyIHN5 c3RlbSBvZmZlcnMgYW4KKyAgIEZJT05SRUFEIGlvY3RsLCB0aGUgYnVpbGQgcHJvY2VkdXJlIHNo b3VsZCBwaWNrIHRoYXQgdXAgYXV0b21hdGljYWxseQorICAgYW5kIHVzZSBpdCwgd2hpY2ggaXMg aWRlYWwuCisKKyAgIElmIHlvdXIgc3lzdGVtIGxhY2tzIEZJT05SRUFEIGJ1dCBoYXMgYSBzZWxl Y3QoKSBmdW5jdGlvbiwgdGhpcyBjYW4gYmUKKyAgIHVzZWQgaW5zdGVhZC4gSWYgdGhlIGJ1aWxk IHByb2NlZHVyZSBmYWlscyB0byBpbmNsdWRlIGl0IChTSE9XIEZFQVRVUkVTCisgICB3aWxsIGxp c3QgU0VMRUNUKSwgdGhlbiB5b3UgY2FuIGFkZCBpdCB0byB5b3VyIENGTEFHUzoKKworLURTRUxF Q1QKKworICAgQ29udmVyc2VseSwgaWYgdGhlIGJ1aWxkIHByb2NlZHVyZSB0cmllcyB0byB1c2Ug c2VsZWN0KCkgd2hlbiBpdCByZWFsbHkKKyAgIGlzIG5vdCB0aGVyZSwgYWRkOgorCistRE5PU0VM RUNUCisKKyAgIE5vdGU6IHNlbGVjdCgpIGlzIG5vdCBwYXJ0IG9mIFN5c3RlbSBWIG5vciBvZiBQ T1NJWCwgYnV0IGl0IGhhcyBiZWVuCisgICBhZGRlZCB0byB2YXJpb3VzIFN5c3RlbS1WLSBhbmQg UE9TSVgtYmFzZWQgc3lzdGVtcyBhcyBhbiBleHRlbnNpb24uCisKKyAgIFNvbWUgU3lzdGVtLVYg dmFyaWF0aW9ucyAoU0NPIFhlbml4L1VOSVgvT0RUIGFuZCBESUFCIEROSVgpIGluY2x1ZGUgYQor ICAgcmRjaGsoKSBmdW5jdGlvbiB0aGF0IGNhbiBiZSB1c2VkIGZvciBidWZmZXIgcGVla2luZy4g SXQgcmV0dXJucyAwIGlmCisgICBubyBjaGFyYWN0ZXJzIGFyZSB3YWl0aW5nIGFuZCAxIGlmIGNo YXJhY3RlcnMgYXJlIHdhaXRpbmcgKGJ1dCB1bmxpa2UKKyAgIEZJT05SRUFELCBpdCBkb2VzIG5v dCB0ZWxsIHRoZSBhY3R1YWwgbnVtYmVyKS4gSWYgeW91ciBzeXN0ZW0gaGFzCisgICByZGNoaygp LCBhZGQ6CisKKy1EUkRDSEs6ICBJbmNsdWRlIHRoaXMgaW4gQ0ZMQUdTIGlmIHlvdXIgc3lzdGVt IGhhcyB0aGUgcmRjaGsoKSBmdW5jdGlvbi4KKworICAgT3RoZXJ3aXNlLCBpZiB5b3VyIHZlcnNp b24gb2YgVW5peCBoYXMgdGhlIHBvbGwoKSBmdW5jdGlvbiAoYW5kIHRoZQorICAgL3Vzci9pbmNs dWRlL3BvbGwuaCBmaWxlKSAtLSB3aGljaCBhcHBlYXJzIHRvIGJlIGEgc3RhbmRhcmQgcGFydCBv ZgorICAgU3lzdGVtIFYgZ29pbmcgYmFjayB0byBhdCBsZWFzdCBTVlIzLCBpbmNsdWRlOgorCist RENLX1BPTEwKKworICA5LjguIE90aGVyIFN5c3RlbS1EZXBlbmRlbnQgRmVhdHVyZXMKKworICAg WyBbMzE1XVRvcCBdIFsgWzMxNl1Db250ZW50cyBdIFsgWzMxN11TZWN0aW9uIENvbnRlbnRzIF0g WyBbMzE4XU5leHQgXQorICAgWyBbMzE5XVByZXZpb3VzIF0KKworICAgU3lzdGVtcyB3aXRoIDx0 ZXJtaW9zLmg+IG1pZ2h0IGhhdmUgdGhlIHN5bWJvbCBJRVhURU4gZGVmaW5lZC4gVGhpcyBpcwor ICAgdXNlZCB0byB0dXJuICJleHRlbmRlZCBmZWF0dXJlcyIgaW4gdGhlIHR0eSBkZXZpY2UgZHJp dmVyIG9uIGFuZCBvZmYsCisgICBzdWNoIGFzIEN0cmwtTyB0byB0b2dnbGUgb3V0cHV0IGZsdXNo aW5nLCBDdHJsLVYgdG8gcXVvdGUgaW5wdXQKKyAgIGNoYXJhY3RlcnMsIGV0Yy4KKworICAgSW4g bW9zdCBVbml4IGltcGxlbWVudGF0aW9ucywgaXQgc2hvdWxkIGJlIHR1cm5lZCBvZmYgZHVyaW5n IEtlcm1pdAorICAgb3BlcmF0aW9uLCBzbyBpZiBbMzIwXWNrdXRpby5jIGZpbmRzIHRoaXMgc3lt Ym9sLCBpdCB1c2VzIGl0LiBUaGlzIGlzCisgICBuZWNlc3NhcnksIGF0IGxlYXN0LCBvbiBCU0RJ LiBPbiBzb21lIHN5c3RlbXMsIGhvd2V2ZXIsIElFWFRFTiBpcworICAgZWl0aGVyIG1pc2RlZmlu ZWQgb3IgbWlzaW1wbGVtZW50ZWQuIFRoZSBzeW1wdG9tIGlzIHRoYXQgQ1IsIHdoZW4gdHlwZWQK KyAgIHRvIHRoZSBjb21tYW5kIHByb2Nlc3NvciwgaXMgZWNob2VkIGFzIExGLCByYXRoZXIgdGhh biBDUkxGLiBUaGlzCisgICBoYXBwZW5zIChhdCBsZWFzdCkgb24gQ29udmV4L09TIDkuMS4gVGhl IHNvbHV0aW9uIGlzIHRvIGFkZCB0aGUKKyAgIGZvbGxvd2luZyBzeW1ib2wgdG8gdGhlIG1ha2Vm aWxlIHRhcmdldCdzIENGTEFDUzoKKworLUROT0lFWFRFTgorCisgICBIb3dldmVyLCBpbiBhdCBs ZWFzdCBvbmUgVW5peCBpbXBsZW1lbnRhdGlvbiwgUU5YIDQuMjEsIElFWFRFTiBtdXN0IGJlCisg ICBzZXQgYmVmb3JlIGhhcmR3YXJlIGZsb3cgY29udHJvbCBjYW4gYmUgdXNlZC4KKworICAgSW4g ZWRpdHMgMTc3IGFuZCBlYXJsaWVyLCB3b3Jrc3RhdGlvbiB1c2VycyBub3RpY2VkIGEgInNsb3cg c2NyZWVuCisgICB3cml0aW5nIiBwaGVub21lbm9uIGR1cmluZyBpbnRlcmFjdGl2ZSBjb21tYW5k IHBhcnNpbmcuIFRoaXMgd2FzIHRyYWNlZAorICAgdG8gYSBzZXRidWYoKSBjYWxsIGluIFszMjFd Y2t1dGlvLmMgdGhhdCBtYWRlIGNvbnNvbGUgKHN0ZG91dCkgd3JpdGVzCisgICB1bmJ1ZmZlcmVk LiBUaGlzIHNldGJ1ZigpIGNhbGwgaGFzIGJlZW4gdGhlcmUgZm9yZXZlciwgYW5kIGNvdWxkIG5v dCBiZQorICAgcmVtb3ZlZCB3aXRob3V0IHNvbWUgcmlzay4gS2VybWl0J3Mgb3BlcmF0aW9uIHdh cyB0ZXN0ZWQgb24gdGhlIE5lWFQgaW4KKyAgIGVkaXQgMTc4IHdpdGggdGhlIHNldGJ1ZigpIGNh bGwgcmVtb3ZlZCwgYW5kIHRoZSBzbG93LXdyaXRpbmcgc3ltcHRvbQorICAgd2FzIGN1cmVkLCBh bmQgZXZlcnl0aGluZyBlbHNlIChjb21tYW5kIHBhcnNpbmcsIHByb3BlciB3YWtldXAgb24gPywK KyAgIEVTQywgQ3RybC1VLCBhbmQgb3RoZXIgZWRpdGluZyBjaGFyYWN0ZXJzLCB0ZXJtaW5hbCBl bXVsYXRpb24sCisgICByZW1vdGUtbW9kZSBhbmQgbG9jYWwtbW9kZSBmaWxlIHRyYW5zZmVyLCBl dGMpIHNlZW1lZCB0byB3b3JrIGFzIHdlbGwKKyAgIGFzIG9yIGJldHRlciB0aGFuIGJlZm9yZS4g SW4gc3Vic2VxdWVudCBlZGl0cywgdGhpcyBjaGFuZ2Ugd2FzIG1hZGUgdG8KKyAgIG1hbnkgb3Ro ZXIgdmVyc2lvbnMgdG9vLCB3aXRoIG5vIGFwcGFyZW50IGlsbCBlZmZlY3RzLiBUbyByZW1vdmUg dGhlCisgICBzZXRidWYoKSBjYWxsIGZvciB5b3VyIHZlcnNpb24gb2YgS2VybWl0LCBhZGQ6CisK Ky1ETk9TRVRCVUYKKworICAgTGF0ZXIgcmVwb3J0cyBpbmRpY2F0ZSB0aGF0IGFkZGluZyAtRE5P U0VUQlVGIGhhcyBvdGhlciBiZW5lZmljaWFsCisgICBlZmZlY3RzLCBsaWtlIGN1dHRpbmcgZG93 biBvbiBzd2FwcGluZyB3aGVuIEtlcm1pdCBpcyBydW4gb24KKyAgIHdvcmtzdGF0aW9ucyB3aXRo IHNtYWxsIG1lbW9yaWVzLiBCdXQgQkVXQVJFOiBvbiBjZXJ0YWluIHNtYWxsIFVuaXgKKyAgIHN5 c3RlbXMsIG5vdGFibHkgdGhlIEFUJlQgNjMwMCBhbmQgM0IxICh0aGUgdmVyeSBzYW1lIG9uZXMg dGhhdCBiZW5lZml0CisgICBmcm9tIE5PU0VUQlVGKSwgTk9TRVRCVUYgc2VlbXMgdG8gY29uZmxp Y3Qgd2l0aCBDS19DVVJTRVMuIFRoZSBwcm9ncmFtCisgICBidWlsZHMgYW5kIHJ1bnMgT0ssIGJ1 dCBhZnRlciBvbmNlIHVzaW5nIHRoZSBjdXJzZXMgZGlzcGxheSwgZWNob2luZyBpcworICAgbWVz c2VkIHVwLiBJbiB0aGlzIGNhc2UsIHdlIHVzZSBhIFN5c3RlbS1WIHNwZWNpZmljIHZhcmlhdGlv biBpbiB0aGUKKyAgIGN1cnNlcyBjb2RlLCB1c2luZyBuZXd0ZXJtKCkgdG8gcHJldmVudCBTeXN0 ZW0gViBmcm9tIGFsdGVyaW5nIHRoZQorICAgYnVmZmVyaW5nLiBTZWUgbWFrZWZpbGUgZW50cmll cyBmb3IgQVQmVCA2MzAwIGFuZCAzQjEuCisKKyAgIFRoZSBVbml4IHZlcnNpb24gb2YgQy1LZXJt aXQgaW5jbHVkZXMgY29kZSB0byBzd2l0Y2ggdG8gZmlsZSBkZXNjcmlwdG9yCisgICB6ZXJvIChz dGRpbikgZm9yIHJlbW90ZS1tb2RlIGZpbGUgdHJhbnNmZXIuIFRoaXMgY29kZSBpcyBuZWNlc3Nh cnkgdG8KKyAgIHByZXZlbnQgS2VybWl0IGZyb20gZ2l2aW5nIHRoZSBpbXByZXNzaW9uIHRoYXQg aXQgaXMgImlkbGUiIGR1cmluZyBmaWxlCisgICB0cmFuc2ZlcnMsIHdoaWNoLCBhdCBzb21lIHNp dGVzLCBjYW4gcmVzdWx0IGluIHRoZSBqb2IgYmVpbmcgbG9nZ2VkIG91dAorICAgaW4gdGhlIG1p ZGRsZSBvZiBhbiBhY3RpdmUgZmlsZSB0cmFuc2ZlciBieSBpZGxlLWpvYiBtb25pdG9ycy4KKwor ICAgSG93ZXZlciwgdGhpcyBmZWF0dXJlIGNhbiBpbnRlcmZlcmUgd2l0aCBjZXJ0YWluIHNldHVw czsgZm9yIGV4YW1wbGUsCisgICB0aGVyZSBpcyBhIHBhY2thZ2Ugd2hpY2ggc3Vic3RpdHV0ZXMg YSBwdHkvdHR5IHBhaXIgZm9yIC9kZXYvdHR5IGFuZAorICAgc2V0cyBmaWxlIGRlc2NyaXB0b3Ig MCB0byBiZSByZWFkLW9ubHksIHByZXZlbnRpbmcgS2VybWl0IGZyb20gc2VuZGluZworICAgcGFj a2V0cy4gT3IuLi4gV2hlbiBhIFVuaXggc2hlbGwgaXMgaW52b2tlZCB1bmRlciB0aGUgUElDSyBl bnZpcm9ubWVudCwKKyAgIGZpbGUgZGVzY3JpcHRvciAwIGlzIGlub3BlcmF0aXZlLgorCisgICBU byByZW1vdmUgdGhpcyBmZWF0dXJlIGFuZCBhbGxvdyBLZXJtaXQgdG8gd29yayBpbiBzdWNoIGVu dmlyb25tZW50cywKKyAgIGFkZCB0aGUgY29tcGlsZS10aW1lIG9wdGlvbjoKKworLUROT0ZEWkVS TworCisgICBPbiBzb21lIHZlcnNpb25zIG9mIFVuaXgsIGVhcmxpZXIgcmVsZWFzZXMgb2YgQy1L ZXJtaXQgd2VyZSByZXBvcnRlZCB0bworICAgcmVuZGVyIGEgdHR5IGRldmljZSB1bnVzYWJsZSBh ZnRlciBhIGhhbmd1cCBvcGVyYXRpb24uIEV4YW1wbGVzIGluY2x1ZGUKKyAgIElCTSBBSVggb24g dGhlIFJUIFBDIGFuZCBSUy82MDAwLiBBIHR5cGljYWwgc3ltcHRvbSBvZiB0aGlzIHBoZW5vbWVu b24KKyAgIGlzIHRoYXQgdGhlIERJQUwgY29tbWFuZCBkb2Vzbid0IHdvcmssIGJ1dCBDT05ORUNU aW5nIHRvIHRoZSBkZXZpY2UgYW5kCisgICBkaWFsaW5nIG1hbnVhbGx5IGRvIHdvcmsuIEEgZnVy dGhlciB0ZXN0IGlzIHRvIFNFVCBESUFMIEhBTkdVUCBPRkYsCisgICB3aGljaCBzaG91bGQgbWFr ZSBkaWFsaW5nIHdvcmsgb25jZSBieSBza2lwcGluZyB0aGUgcHJlLWRpYWwgaGFuZ3VwLgorICAg SG93ZXZlciwgYWZ0ZXIgdGhlIGNvbm5lY3Rpb24gaXMgYnJva2VuLCBpdCBjYW4ndCBiZSB1c2Vk IGFueSBtb3JlOgorICAgc3Vic2VxdWVudCBhdHRlbXB0cyB0byBESUFMIHRoZSBzYW1lIGRldmlj ZSBkb24ndCB3b3JrLiBUaGUgY3VyZSBpcworICAgdXN1YWxseSB0byBjbG9zZSBhbmQgcmVvcGVu IHRoZSBkZXZpY2UgYXMgcGFydCBvZiB0aGUgaGFuZ3VwIG9wZXJhdGlvbi4KKyAgIFRvIGRvIHRo aXMsIGluY2x1ZGUgdGhlIGZvbGxvd2luZyBjb21waWxlLXRpbWUgb3B0aW9uOgorCistRENMU09Q TgorCisgICBTaW1pbGFybHksIHRoZXJlIGlzIGEgc2VjdGlvbiBvZiBjb2RlIGluIHR0b3Blbigp LCB3aGljaCBkb2VzIGFub3RoZXIKKyAgIGNsb3NlKG9wZW4oKSkgdG8gZm9yY2UgdGhlIE9fTkRF TEFZIG1vZGUgY2hhbmdlLiBPbiBzb21lIHN5c3RlbXMsIHRoZQorICAgY2xvc2Uob3BlbigpKSBp cyByZXF1aXJlZCB0byBtYWtlIHRoZSBtb2RlIGNoYW5nZSB0YWtlIGVmZmVjdCwgYW5kCisgICBh cHBhcmVudGx5IG9uIG1vc3Qgb3RoZXJzIGl0IGRvZXMgbm8gaGFybS4gQnV0IHJlcG9ydGVkbHkg b24gYXQgbGVhc3QKKyAgIG9uZSBTeXN0ZW0gViBSNCBpbXBsZW1lbnRhdGlvbiwgYW5kIG9uIFND TyBYZW5peCAzLjIsIHRoZSBjbG9zZShvcGVuKCkpCisgICBvcGVyYXRpb24gaGFuZ3MgaWYgdGhl IGRldmljZSBsYWNrcyBjYXJyaWVyLCBFVkVOIFRIT1VHSCB0aGUgQ0xPQ0FMCisgICBjaGFyYWN0 ZXJpc3RpYyBoYXMganVzdCBiZWVuIHNldCB0byBhdm9pZCB0aGlzIHZlcnkgcHJvYmxlbS4gSWYg dGhpcworICAgaGFwcGVucyB0byB5b3UsIGFkZCB0aGlzIHRvIHlvdXIgQ0ZMQUdTOgorCistRE5P Q09URk1DCisKKyAgIG9yLCBlcXVpdmFsZW50bHksIGluIHlvdXIgS0ZMQUdTIG9uIHRoZSBtYWtl IGNvbW1hbmQgbGluZS4gSXQgc3RhbmRzCisgICBmb3IgTk8gQ2xvc2UoT3BlbigpKSBUbyBGb3Jj ZSBNb2RlIENoYW5nZS4KKworICAgQy1LZXJtaXQgcmVuYW1lcyBmaWxlcyB3aGVuIHlvdSBnaXZl IGEgUkVOQU1FIGNvbW1hbmQgYW5kIGFsc28KKyAgIGFjY29yZGluZyB0byB0aGUgY3VycmVudCBT RVQgRklMRSBDT0xMSVNJT04gb3B0aW9uIHdoZW4gcmVjZWl2aW5nCisgICBmaWxlcy4gVGhlIG5v cm1hbCBVbml4IHdheSB0byByZW5hbWUgYSBmaWxlIGlzIHZpYSB0d28gc3lzdGVtIGNhbGxzOgor ICAgbGluaygpIGFuZCB1bmxpbmsoKS4gQnV0IHRoaXMgbGVhdmVzIG9wZW4gYSB3aW5kb3cgb2Yg dnVsbmVyYWJpbGl0eS4KKyAgIFNvbWUgVW5peCBzeXN0ZW1zIGFsc28gb2ZmZXIgYW4gYXRvbWlj IHJlbmFtZShvbGRuYW1lLG5ld25hbWUpCisgICBmdW5jdGlvbi4gSWYgeW91ciB2ZXJzaW9uIG9m IFVuaXggaGFzIHRoaXMgZnVuY3Rpb24sIGFkZCB0aGUgZm9sbG93aW5nCisgICB0byB5b3VyIENG TEFHUzoKKworLURSRU5BTUUKKworICAgQy1LZXJtaXQgcHJlZGVmaW5lcyB0aGUgUkVOQU1FIGZv ciBzZXZlcmFsIFVuaXggdmVyc2lvbnMgaW4KKyAgIFszMjJdY2tjZGViLmggKFNWUjQsIFNVTk9T NDEsIEJTRDQ0LCBBSVhSUywgZXRjKS4gWW91IGNhbiB0ZWxsIGlmCisgICByZW5hbWUoKSBpcyBi ZWluZyB1c2VkIGlmIHRoZSBTSE9XIEZFQVRVUkVTIGNvbW1hbmQgaW5jbHVkZXMgUkVOQU1FIGlu CisgICB0aGUgY29tcGlsZXIgb3B0aW9ucyBsaXN0LiBJZiB0aGUgcHJlZGVmaW5lZCBSRU5BTUUg c3ltYm9sIGNhdXNlcworICAgdHJvdWJsZSwgdGhlbiBhZGQgTk9SRU5BTUUgdG8geW91ciBDRkxB R1MuIFRyb3VibGUgaW5jbHVkZXM6CisKKyAgICBhLiBMaW5rZXIgY29tcGxhaW5zIHRoYXQgX3Jl bmFtZSBpcyBhbiB1bnJlc29sdmVkIHN5bWJvbC4KKyAgICBiLiBMaW5raW5nIHdvcmtzLCBidXQg S2VybWl0J3MgUkVOQU1FIGNvbW1hbmQgZG9lc24ndCB3b3JrICh3aGljaAorICAgICAgIGhhcHBl bnMgYmVjYXVzZSBvbGRlciB2ZXJzaW9ucyBvZiByZW5hbWUoKSBtaWdodCBoYXZlIHRoZWlyCisg ICAgICAgYXJndW1lbnRzIHJldmVyc2VkKS4KKworICAgSWYgcmVuYW1lKCkgaXMgbm90IHVzZWQs IHRoZW4gS2VybWl0IHVzZXMgbGluaygpL3VubGluaygpLCB3aGljaCBpcworICAgZXF1aXZhbGVu dCBleGNlcHQgaXQgaXMgbm90IGF0b21pYzogdGhlcmUgaXMgYSB0aW55IGludGVydmFsIGluIHdo aWNoCisgICBzb21lIG90aGVyIHByb2Nlc3MgbWlnaHQgImRvIHNvbWV0aGluZyIgdG8gb25lIG9m IHRoZSBmaWxlcyBvciBsaW5rcy4KKworICAgU29tZSBVbml4IHN5c3RlbXMgKE9saXZldHRpIFgv T1MsIEFtZGFobCBVVFMvViwgSUNMIFNWUjMsIGV0YykgZGVmaW5lCisgICB0aGUgU19JU1JFRyBh bmQgU19JU0RJUiBtYWNyb3MgaW5jb3JyZWN0bHkuIFRoaXMgaXMgY29tcGVuc2F0ZWQgZm9yCisg ICBhdXRvbWF0aWNhbGx5IGluIFszMjNdY2t1ZmlvLmMuIE90aGVyIHN5c3RlbXMgbWlnaHQgaGF2 ZSB0aGlzIHNhbWUKKyAgIHByb2JsZW0uIElmIHlvdSBnZXQgYSBjb21waWxlLXRpbWUgZXJyb3Ig bWVzc2FnZSByZWdhcmRpbmcgU19JU1JFRworICAgYW5kL29yIFNfSVNESVIsIGFkZCB0aGUgZm9s bG93aW5nIHRvIHlvdXIgQ0ZMQUdTOgorCistRElTRElSQlVHCisKKyAgIEZpbmFsbHksIGhlcmUn cyBhIHN5bWJvbCB5b3Ugc2hvdWxkIE5FVkVSIGRlZmluZToKKworLURDT01NRU5UCisKKyAgIEl0 J3MgdXNlZCBmb3IgY29tbWVudGluZyBvdXQgYmxvY2tzIG9mIGNvZGUuIElmIGZvciBzb21lIHJl YXNvbiB5b3UKKyAgIGZpbmQgdGhhdCB5b3VyIGNvbXBpbGVyIGhhcyBDT01NRU5UIGRlZmluZWQs IHRoZW4gYWRkIC1VQ09NTUVOVCB0bworICAgQ0ZMQUdTIG9yIEtGTEFHUyEgU2ltaWxhcmx5LCBz b21lIGhlYWRlciBmaWxlcyBoYXZlIGJlZW4ga25vd24gdG8KKyAgIGRlZmluZSBDT01NRU5ULCBp biB3aGljaCBjYXNlIHlvdSBtdXN0IGFkZCAiI3VuZGVmIENPTU1FTlQiIHRvIGVhY2gKKyAgIEMt S2VybWl0IHNvdXJjZSBtb2R1bGUsIGFmdGVyIGFsbCB0aGUgI2luY2x1ZGVzLgorCisgIDkuOS4g VGVybWluYWwgSW50ZXJydXB0aW9uCisKKyAgIFsgWzMyNF1Ub3AgXSBbIFszMjVdQ29udGVudHMg XSBbIFszMjZdU2VjdGlvbiBDb250ZW50cyBdIFsgWzMyN11OZXh0IF0KKyAgIFsgWzMyOF1QcmV2 aW91cyBdCisKKyAgIFdoZW4gQy1LZXJtaXQgZW50ZXJzIGludGVyYWN0aXZlIGNvbW1hbmQgbW9k ZSwgaXQgc2V0cyBhIENvbnRyb2wtQworICAgKHRlcm1pbmFsIGtleWJvYXJkIGludGVycnVwdCA9 IFNJR0lOVCkgdHJhcCB0byBhbGxvdyBpdCB0byByZXR1cm4gdG8KKyAgIHRoZSBjb21tYW5kIHBy b21wdCB3aGVuZXZlciB0aGUgdXNlciB0eXBlcyBDb250cm9sLUMgKG9yIHdoYXRldmVyIGlzCisg ICBhc3NpZ25lZCB0byBiZSB0aGUgaW50ZXJydXB0IGNoYXJhY3RlcikuIFRoaXMgaXMgaW1wbGVt ZW50ZWQgdXNpbmcKKyAgIHNldGptcCgpIGFuZCBsb25nam1wKCkuIE9uIHNvbWUgc3lzdGVtcywg ZGVwZW5kaW5nIG9uIHRoZSBtYWNoaW5lCisgICBhcmNoaXRlY3R1cmUgYW5kIEMgY29tcGlsZXIg YW5kIHdobyBrbm93cyB3aGF0IGVsc2UsIHlvdSBtaWdodCBnZXQKKyAgICJNZW1vcnkgZmF1bHQg KGNvcmVkdW1wKSIgb3IgImxvbmdqbXAgYm90Y2giIGluc3RlYWQgb2YgdGhlIGRlc2lyZWQKKyAg IGVmZmVjdCAodGhpcyBzaG91bGQgbm90IGhhcHBlbiBpbiA1QSgxOTApIGFuZCBsYXRlcikuIElu IHRoYXQgY2FzZSwgYWRkCisgICAtRE5PQ0NUUkFQIHRvIHlvdXIgQ0ZMQUdTIGFuZCByZWJ1aWxk IHRoZSBwcm9ncmFtLgorCisgICBKb2IgY29udHJvbCAtLSB0aGUgYWJpbGl0eSB0byAic3VzcGVu ZCIgQy1LZXJtaXQgb24gYSBVbml4IHN5c3RlbSBieQorICAgdHlwaW5nIHRoZSAic3VzcCIgY2hh cmFjdGVyIChub3JtYWxseSBDdHJsLVopIGFuZCB0aGVuIHJlc3VtZSBleGVjdXRpb24KKyAgIGxh dGVyICh3aXRoIHRoZSAiZmciIGNvbW1hbmQpIC0tIGlzIGEgdHJpY2t5IGJ1c2luZXNzLiBDLUtl cm1pdCBtdXN0CisgICB0cmFwIHN1c3BlbmQgc2lnbmFscyBzbyBpdCBjYW4gcHV0IHRoZSB0ZXJt aW5hbCBiYWNrIGludG8gbm9ybWFsIG1vZGUKKyAgIHdoZW4geW91IHN1c3BlbmQgaXQgKEtlcm1p dCBwdXRzIHRoZSB0ZXJtaW5hbCBpbnRvIHZhcmlvdXMgc3RyYW5nZQorICAgbW9kZXMgZHVyaW5n IGludGVyYWN0aXZlIGNvbW1hbmQgcGFyc2luZywgQ09OTkVDVCwgYW5kIGZpbGUgdHJhbnNmZXIp LgorICAgU3VwcG9ydGluZyBjb2RlIGlzIGNvbXBpbGVkIGludG8gQy1LZXJtaXQgYXV0b21hdGlj YWxseSBpZiA8c2lnbmFsLmg+CisgICBpbmNsdWRlcyBhIGRlZmluaXRpb24gZm9yIHRoZSBTSUdU U1RQIHNpZ25hbC4gSE9XRVZFUi4uLiBzb21lIHN5c3RlbXMKKyAgIGRlZmluZSB0aGlzIHNpZ25h bCB3aXRob3V0IHN1cHBvcnRpbmcgam9iIGNvbnRyb2wgY29ycmVjdGx5LiBZb3UgY2FuCisgICBi dWlsZCBLZXJtaXQgdG8gaWdub3JlIFNJR1RTVFAgc2lnbmFscyBieSBpbmNsdWRpbmcgdGhlIC1E Tk9KQyBvcHRpb24KKyAgIGluIENGTEFHUy4gKFlvdSBjYW4gYWxzbyBkbyB0aGlzIGF0IHJ1bnRp bWUgYnkgZ2l2aW5nIHRoZSBjb21tYW5kIFNFVAorICAgU1VTUEVORCBPRkYuKQorCisgICAgIE5P VEU6IEFzIG9mIHZlcnNpb24gNUEoMTkwKSwgQy1LZXJtaXQgbWFrZXMgYW5vdGhlciBzYWZldHkg Y2hlY2suCisgICAgIEV2ZW4gaWYgam9iIGNvbnRyb2wgaXMgYXZhaWxhYmxlIGluIHRoZSBvcGVy YXRpbmcgc3lzdGVtIChhY2NvcmRpbmcKKyAgICAgdG8gdGhlIG51bWVyb3VzIGNoZWNrcyBtYWRl IGluIGNvbmdtKCkpLCBpdCB3aWxsIHN0aWxsIGRpc2FibGUgdGhlCisgICAgIGNhdGNoaW5nIG9m IFNJR1RTVFAgc2lnbmFscyBpZiBTSUdUU1RQIHdhcyBzZXQgdG8gU0lHX0lHTiBhdCB0aGUKKyAg ICAgdGltZSBDLUtlcm1pdCB3YXMgc3RhcnRlZC4KKworICAgU3lzdGVtIFYgUjMgYW5kIGVhcmxp ZXIgc3lzdGVtcyBub3JtYWxseSBkbyBub3Qgc3VwcG9ydCBqb2IgY29udHJvbC4gSWYKKyAgIHlv dSBoYXZlIGFuIFNWUjMgc3lzdGVtIHRoYXQgZG9lcywgaW5jbHVkZSB0aGUgZm9sbG93aW5nIG9w dGlvbiBpbiB5b3VyCisgICBDRkxBR1M6CisKKy1EU1ZSM0pDCisKKyAgIE9uIHN5c3RlbXMgdGhh dCBjb3JyZWN0bHkgaW1wbGVtZW50IFBPU0lYIHNpZ25hbCBoYW5kbGluZywgc2lnbmFscyBjYW4K KyAgIGJlIGhhbmRsZWQgbW9yZSByZWxpYWJseSB0aGFuIGluIEJlbGwsIEJlcmtlbGV5LCBvciBB VCZUIFVuaXhlcy4gT24KKyAgIHN5c3RlbXMgKHN1Y2ggYXMgUU5YKSB0aGF0IGFyZSAic3RyaWN0 bHkgUE9TSVgiLCBQT1NJWCBzaWduYWwgaGFuZGxpbmcKKyAgICptdXN0KiBiZSB1c2VkLCBvdGhl cndpc2Ugbm8gc2lnbmFsIHdpbGwgd29yayBtb3JlIHRoYW4gb25jZS4gSWYgeW91CisgICBoYXZl IFBPU0lYLWJhc2VkIHN5c3RlbSBhbmQgeW91IGZpbmQgdGhhdCB5b3VyIHZlcnNpb24gb2YgS2Vy bWl0CisgICByZXNwb25kcyB0byBDdHJsLUMgKFNJR0lOVCkgb3IgQ3RybC1aIChTSUdUU1RQKSBv bmx5IG9uY2UsIHRoZW4geW91CisgICBzaG91bGQgYWRkIHRoZSBmb2xsb3dpbmcgb3B0aW9uIHRv IHlvdXIgQ0ZMQUdTOgorCistRENLX1BPU0lYX1NJRworCisgICBCdXQgYmUgY2FyZWZ1bDsgc29t ZSBQT1NJWCBpbXBsZW1lbnRhdGlvbnMsIG5vdGFibHkgNC40QlNELCBpbmNsdWRlCisgICBQT1NJ WCBzaWduYWwgaGFuZGxpbmcgc3ltYm9scyBhbmQgZnVuY3Rpb25zIGFzICJzdHVicyIgb25seSwg d2hpY2ggZG8KKyAgIG5vdGhpbmcuIExvb2sgaW4gPHNpZ25hbC5oPiBmb3Igc2lnc2V0am1wIGFu ZCBzaWdsb25nam1wIGFuZCByZWFkIHRoZQorICAgY29tbWVudHMuCisKKzEwLiBESUFMSU5HIE9V VCBBTkQgQ09PUkRJTkFUSU5HIFdJVEggVVVDUAorCisgICBbIFszMjldVG9wIF0gWyBbMzMwXUNv bnRlbnRzIF0gWyBbMzMxXU5leHQgXSBbIFszMzJdUHJldmlvdXMgXQorCisgICBUaGUgc2hvcnQg dmVyc2lvbiAoZ2VuZXJhbCk6CisKKyAgICAgSW4gb3JkZXIgZm9yIEMtS2VybWl0IHRvIGJlIGFi bGUgdG8gZGlhbCBvdXQgZnJvbSB5b3VyIFVuaXgKKyAgICAgY29tcHV0ZXIsIHlvdSBuZWVkIHRv IGdpdmUgaXQgdGhlIHNhbWUgb3duZXIsIGdyb3VwLCBhbmQgcGVybWlzc2lvbnMKKyAgICAgYXMg eW91ciBvdGhlciBkaWFsb3V0IHByb2dyYW1zLCBzdWNoIGFzIGN1LCB0aXAsIG1pbmljb20sIHV1 Y3AsCisgICAgIHNleW9uLCBldGMuCisKKyAgIFRoZSBzaG9ydCB2ZXJzaW9uIGZvciBMaW51eCBv bmx5OgorCisgICAgIFNpbmNlIFJlZCBIYXQgNy4yLCBhYm91dCAyMDAyLCBMaW51eCBkb2VzIG5v dCBsZWF2ZSB0aGUgbG9ja2ZpbGUKKyAgICAgaGFuZGxpbmcgdG8gZWFjaCBhcHBsaWNhdGlvbiwg YnV0IGluc3RlYWQgcHJvdmlkZXMgYW4gZXh0ZXJuYWwKKyAgICAgYXBwbGljYXRpb24sIC91c3Iv c2Jpbi9sb2NrZGV2LCB0aGF0IGFsbCBhcHBsaWNhdGlvbnMgc2hvdWxkIGludm9rZQorICAgICB3 aGVuIHRoZXkgbmVlZCB0byBhY2Nlc3MgYSBzZXJpYWwgcG9ydDsgbG9ja2RldiBsb2NrcyBhbmQg dW5sb2NrcworICAgICB0aGUgcG9ydCB3aXRob3V0IHJlcXVpcmluZyB0aGUgYXBwbGljYXRpb24g dG8gaGF2ZSBwcml2aWxlZ2VzLCBzaW5jZQorICAgICB0aGUgcHJpdmlsZWdlcyBvbiB0aGUgbG9j a2ZpbGUgZGlyZWN0b3J5IGFyZSBhc3NpZ25lZCB0byBsb2NrZGV2LgorICAgICBDLUtlcm1pdCA4 LjAuMjExIGFuZCBsYXRlciBzdXBwb3J0IHRoaXMgbWV0aG9kLiBCdXQgQy1LZXJtaXQgc3RpbGwK KyAgICAgbmVlZHMgdG8gYmUgYWJsZSB0byBvcGVuIHRoZSBwb3J0IGl0c2VsZiwgYW5kIHRoZXJl Zm9yZSBpZiB0aGUKKyAgICAgcG9ydCdzIHBlcm1pc3Npb25zIGRvIG5vdCBhbGxvdyByZWFkL3dy aXRlIGFjY2VzcyB0byB0aGUgZ2VuZXJhbAorICAgICBwdWJsaWMsIHRoZSBnZW5lcmFsIHJ1bGUg bXVzdCBzdGlsbCBiZSBmb2xsb3dlZDogaW4gdGhlIG1vc3QgY29tbW9uCisgICAgIGNhc2UsIGl0 IG11c3QgYmUgU0VUR0lEIHRvIHRoZSBncm91cCB1dWNwIChleHBsYWluZWQgYmVsb3cpLiBJZiBh CisgICAgIHByZS04LjAuMjExIHZlcnNpb24gb2YgQy1LZXJtaXQgaXMgdG8gYmUgaW5zdGFsbGVk IGZvciB1c2Ugd2l0aAorICAgICBzZXJpYWwgcG9ydHMgb24gYW55IHZlcnNpb24gb2YgTGludXgs IGl0IG11c3Qgc3RpbGwgYmUgaW5zdGFsbGVkIGFzCisgICAgIGRlc2NyaWJlZCBpbiB0aGUgZm9s bG93aW5nIHNlY3Rpb25zLgorCisgICBUaGUgbG9uZyB2ZXJzaW9uOgorCisgICBNYWtlIHN1cmUg eW91ciBkaWFsb3V0IGxpbmUgaXMgY29ycmVjdGx5IGNvbmZpZ3VyZWQgZm9yIGRpYWxpbmcgb3V0 IChhcworICAgb3Bwb3NlZCB0byBsb2dpbikuIFRoZSBtZXRob2QgZm9yIGRvaW5nIHRoaXMgaXMg ZGlmZmVyZW50IGZvciBlYWNoIGtpbmQKKyAgIG9mIFVuaXguIENvbnN1bHQgeW91ciBzeXN0ZW0g ZG9jdW1lbnRhdGlvbiBmb3IgY29uZmlndXJpbmcgbGluZXMgZm9yCisgICBkaWFsaW5nIG91dCAo Zm9yIGV4YW1wbGUsIFN1biBTUEFSQ3N0YXRpb24gSVBDIHVzZXJzIHNob3VsZCByZWFkIHRoZQor ICAgc2VjdGlvbiAiU2V0dGluZyB1cCBNb2RlbSBTb2Z0d2FyZSIgaW4gdGhlIERlc2t0b3AgU1BB UkMgU3VuIFN5c3RlbSBhbmQKKyAgIE5ldHdvcmsgTWFuYWdlcidzIEd1aWRlLCBvciB0aGUgVGVy bWluYWxzIGFuZCBNb2RlbXMgc2VjdGlvbiBvZiB0aGUgSFAKKyAgIG1hbnVhbCwgIkNvbmZpZ3Vy aW5nIEhQLVVYIGZvciBQZXJpcGhlcmFscyIgKGUuZy4gL3Vzci9zYmluL3NhbSA9PgorICAgUGVy aXBoZXJhbCBEZXZpY2VzID0+IFRlcm1pbmFscyBhbmQgTW9kZW1zID0+IEFkZCBNb2RlbSkuCisK KyAgIFVubGlrZSBtb3N0IG90aGVyIG11bHRpdXNlciwgbXVsdGl0YXNraW5nIG9wZXJhdGluZyBz eXN0ZW1zLCBVbml4CisgICBhbGxvd3MgbXVsdGlwbGUgdXNlcnMgdG8gYWNjZXNzIHRoZSBzYW1l IHNlcmlhbCBkZXZpY2UgYXQgdGhlIHNhbWUKKyAgIHRpbWUsIGV2ZW4gdGhvdWdoIHRoZXJlIGlz IG5vIGVhcnRobHkgcmVhc29uIHdoeSB0d28gdXNlcnMgc2hvdWxkIGRvCisgICB0aGlzLiBXaGVu IHRoZXkgZG8sIHVzZXIgQSB3aWxsIHJlYWQgc29tZSBvZiB0aGUgaW5jb21pbmcgY2hhcmFjdGVy cywKKyAgIGFuZCB1c2VyIEIgd2lsbCByZWFkIHRoZSBvdGhlcnMuIEluIGFsbCBsaWtlbGlob29k LCBuZWl0aGVyIHVzZXIgd2lsbAorICAgc2VlIHRoZW0gYWxsLiBGdXJ0aGVybW9yZSwgVXNlciBC IGNhbiBoYW5nIHVwIFVzZXIgQSdzIGNhbGwsIGFuZCBzbworICAgb25lLgorCisgICBSYXRoZXIg dGhhbiBjaGFuZ2UgVW5peCB0byBlbmZvcmNlIGV4Y2x1c2l2ZSBhY2Nlc3MgdG8gc2VyaWFsIGRl dmljZXMKKyAgIHN1Y2ggYXMgdHR5cywgd2hlbiBpdCBtaWdodCBzdGlsbCBoYXZlIGJlZW4gcG9z c2libGUsIFVuaXggZGV2ZWxvcGVycworICAgb3B0ZWQgZm9yIGEgImxvY2sgZmlsZSIgbWVjaGFu aXNtLiBBbnkgcHJvY2VzcyB0aGF0IHdhbnRzIHRvIG9wZW4gYSB0dHkKKyAgIGRldmljZSBzaG91 bGQgZmlyc3QgY2hlY2sgdG8gc2VlIGlmIGEgZmlsZSBvZiBhIGNlcnRhaW4gbmFtZSBleGlzdHMs CisgICBhbmQgaWYgc28sIG5vdCB0byBvcGVuIHRoZSBkZXZpY2UuIElmIHRoZSBmaWxlIGRvZXMg bm90IGV4aXN0LCB0aGUKKyAgIHByb2Nlc3MgY3JlYXRlcyB0aGUgZmlsZSBhbmQgdGhlbiBvcGVu cyB0aGUgZGV2aWNlLiBXaGVuIHRoZSBwcm9jZXNzCisgICBjbG9zZXMgdGhlIGRldmljZSwgaXQg ZGVzdHJveXMgdGhlIGxvY2tmaWxlLiBUaGlzIHByb2NlZHVyZSB3YXMKKyAgIG9yaWdpbmF0ZWQg Zm9yIHVzZSB3aXRoIFVuaXgncyBVVUNQLCBDVSwgYW5kIFRJUCBwcm9ncmFtcywgYW5kIHNvIHRo ZXNlCisgICBsb2NrZmlsZXMgYXJlIGNvbW1vbmx5IGNhbGxlZCAiVVVDUCBsb2NrZmlsZXMiIChV VUNQID0gVW5peC10by1Vbml4CisgICBDb3B5IFByb2dyYW0pLgorCisgICBBcyB5b3UgY2FuIGlt YWdpbmUsIHRoaXMgbWV0aG9kIGlzIHJpZGRsZWQgd2l0aCBwaXRmYWxsczoKKworICAgICAqIElm IGEgcHJvY2VzcyBkb2VzIG5vdCBvYnNlcnZlIHRoZSBwcmV2YWlsaW5nIGxvY2tmaWxlIGNvbnZl bnRpb24sCisgICAgICAgdGhlbiBpdCBjYW4gaW50ZXJmZXJlIHdpdGggb3RoZXIgInBvbGl0ZSIg cHJvY2Vzc2VzLiBBbmQgaW4gZmFjdCwKKyAgICAgICB2ZXJ5IGZldyBVbml4IGFwcGxpY2F0aW9u cyBvciBjb21tYW5kcyBoYW5kbGUgbG9ja2ZpbGVzIGF0IGFsbDsgYW4KKyAgICAgICBvcmlnaW5h bCBkZXNpZ24gZ29hbCBvZiBVbml4IHdhcyB0aGF0ICJldmVyeXRoaW5nIGlzIGEgZmlsZSIsIGFu ZAorICAgICAgIGNvdW50bGVzcyB1dGlsaXRpZXMgb3BlcmF0ZSBvbiBmaWxlcyBkaXJlY3RseSAo Ynkgb3BlbmluZyB0aGVtKSBvcgorICAgICAgIGluZGlyZWN0bHkgdGhyb3VnaCByZWRpcmVjdGlv biBvZiBzdGFuZGFyZCBpL28sIHdpdGhvdXQgY3JlYXRpbmcgb3IKKyAgICAgICBsb29raW5nIGZv ciBsb2NrZmlsZXMuCisgICAgICogSWYgYSBwcm9jZXNzIGNyYXNoZXMgd2hpbGUgaXQgaGFzIHRo ZSBkZXZpY2Ugb3BlbiwgdGhlIGxvY2tmaWxlIGlzCisgICAgICAgbGVmdCBiZWhpbmQsIHByZXZl bnRpbmcgZnVydGhlciBwcm9jZXNzZXMgZnJvbSB1c2luZyB0aGUgZGV2aWNlLgorICAgICAqIFZh cmlvdXMgdmVyc2lvbnMgb2YgVW5peCB1c2UgZGlmZmVyZW50IG5hbWVzIGZvciB0aGUgbG9ja2Zp bGVzLCBwdXQKKyAgICAgICB0aGVtIGluIGRpZmZlcmVudCBkaXJlY3Rvcmllcywgd2l0aCBkaWZm ZXJlbnQgb3duZXJzIGFuZCBncm91cHMgYW5kCisgICAgICAgcGVybWlzc2lvbnMsIGFuZCBzcGVj aWZ5IHRoZWlyIGNvbnRlbnRzIGRpZmZlcmVudGx5LgorICAgICAqIE9uIGEgZ2l2ZW4gcGxhdGZv cm0sIHRoZSBsb2NrZmlsZSBjb252ZW50aW9ucyBtYXkgY2hhbmdlIGZyb20gb25lCisgICAgICAg VW5peCByZWxlYXNlIHRvIHRoZSBuZXh0IChmb3IgZXhhbXBsZSwgU3VuT1MgNC4wIHRvIDQuMSkg b3IsIGluIHRoZQorICAgICAgIGNhc2Ugb2YgTGludXgsIGFjcm9zcyBkaWZmZXJlbnQgZGlzdHJp YnV0aW9ucy4KKyAgICAgKiBUaGUgc2FtZSB0dHkgZGV2aWNlIG1pZ2h0IGhhdmUgbW9yZSB0aGFu IG9uZSBuYW1lLCBhbmQgbW9zdAorICAgICAgIGxvY2tmaWxlIGNvbnZlbnRpb25zIGRvbid0IGFs bG93IGZvciB0aGlzLiBTaW1pbGFybHkgZm9yIHN5bWJvbGljCisgICAgICAgbGlua3MuCisKKyAg IEluIGFuIGF0dGVtcHQgdG8gYWRkcmVzcyB0aGUgcHJvYmxlbSBvZiAic3RhbGUiIGxvY2tmaWxl cywgbW9zdCBVVUNQCisgICBpbXBsZW1lbnRhdGlvbnMgcHV0IHRoZSBQSUQgKFByb2Nlc3MgSUQp IG9mIHRoZSBjcmVhdGluZyBwcm9jZXNzIGluIHRoZQorICAgbG9ja2ZpbGUuIFRodXMsIGFub3Ro ZXIgcHJvY2VzcyB0aGF0IHdhbnRzIHRvIG9wZW4gdGhlIGNvcnJlc3BvbmRpbmcKKyAgIGRldmlj ZSBjYW4gY2hlY2sgbm90IG9ubHkgZm9yIHRoZSBsb2NrZmlsZSBpdHNlbGYsIGJ1dCBhbHNvIGNh biBjaGVjaworICAgdGhlIFBJRCBmb3IgdmFsaWRpdHkuIEJ1dCB0aGlzIGRvZXNuJ3Qgd29yayB3 ZWxsIGVpdGhlcjoKKworICAgICAqIFBJRHMgYXJlIHN0b3JlZCBpbiBkaXZlcnNlIGZvcm1hdHMg dGhhdCBjaGFuZ2Ugd2l0aCBldmVyeSBuZXcKKyAgICAgICByZWxlYXNlIChzaG9ydCwgaW50ZWdl ciwgbG9uZywgb3Igc3RyaW5nIGluIGFueSBvZiB2YXJpb3VzCisgICAgICAgZm9ybWF0cykuIElm IHRoZSByZWFkaW5nIHByb2dyYW0gZG9lcyBub3QgZm9sbG93IHRoZSBzYW1lCisgICAgICAgY29u dmVudGlvbiBhcyB0aGUgd3JpdGluZyBwcm9ncmFtLCBpdCBjYW4gZGlhZ25vc2UgYSB2YWxpZCBQ SUQgdG8KKyAgICAgICBiZSBpbnZhbGlkLCBhbmQgdGhlcmVmb3JlIG5vdCBob25vciB0aGUgbG9j ay4KKyAgICAgKiBQSURzIHJlY3ljbGUuIElmIHRoZSBsb2NrZmlsZSB3YXMgY3JlYXRlZCBieSBQ SUQgMTIzNCwgd2hpY2ggbGF0ZXIKKyAgICAgICBjcmFzaGVkIHdpdGhvdXQgcmVtb3ZpbmcgdGhl IGxvY2tmaWxlLCBhbmQgdGhlbiBhIG5ldyBwcm9jZXNzIDEyMzQKKyAgICAgICBleGlzdHMgYSB0 aGUgdGltZSB0aGUgbG9ja2ZpbGUgaXMgY2hlY2tlZCwgdGhlIGxvY2tmaWxlIHdpbGwgYmUKKyAg ICAgICBpbXByb3Blcmx5IHRha2VuIGFzIHZhbGlkLCBhbmQgYWNjZXNzIHRvIHRoZSBkZXZpY2Ug ZGVuaWVkCisgICAgICAgdW5uZWNlc3NhcmlseS4KKworICAgU2V2ZXJhbCB0ZWNobmlxdWVzIGFk ZHJlc3MgdGhlIHByb2JsZW0gb2YgbXVsdGlwbGUgbmFtZXMgZm9yIHRoZSBzYW1lCisgICBkZXZp Y2U6CisKKyAgICAgKiBNdWx0aXBsZSBsb2NrZmlsZXMuIEZvciBleGFtcGxlLCBpZiB0aGUgdXNl ciBvcGVucyBhIGRldmljZSB0aHJvdWdoCisgICAgICAgYSBzeW1saW5rLCBhIGxvY2tmaWxlIGlz IGNyZWF0ZWQgZm9yIGJvdGggdGhlIHN5bWxpbmsgbmFtZSBhbmQgdGhlCisgICAgICAgdHJ1ZSBu YW1lIChvYnRhaW5lZCBmcm9tIHJlYWRsaW5rKCkpLiBIb3dldmVyLCB3aGVuIG11bHRpcGxlCisg ICAgICAgZHJpdmVycyBhcmUgaW5zdGFsbGVkIGZvciB0aGUgc2FtZSBkZXZpY2UgKGUuZy4gL2Rl di9jdWEsCisgICAgICAgL2Rldi9jdWZhLCBldGMpLCB0aGlzIGFwcHJvYWNoIHdvbid0IHdvcmsg dW5sZXNzIGFsbCBhcHBsaWNhdGlvbnMKKyAgICAgICAqa25vdyogYWxsIHRoZSBkaWZmZXJlbnQg bmFtZXMgZm9yIHRoZSBzYW1lIGRldmljZSBhbmQgbWFrZQorICAgICAgIGxvY2tmaWxlcyBmb3Ig YWxsIG9mIHRoZW0sIHdoaWNoIGlzIG9idmlvdXNseSBub3QgcHJhY3RpY2FsLgorICAgICAqIExv Y2tmaWxlcyB3aG9zZSBuYW1lcyBhcmUgbm90IGJhc2VkIG9uIHRoZSBkZXZpY2UgbmFtZS4gVGhl c2UKKyAgICAgICBsb2NrZmlsZXMgZ2VuZXJhbGx5IGhhdmUgbmFtZXMgbGlrZSBMSy5pbm9kZS9t YWpvci9taW5vciwgd2hlcmUKKyAgICAgICBpbm9kZSwgbWFqb3IsIGFuZCBtaW5vciBhcmUgbnVt YmVycywgd2hpY2ggd2lsbCBhbHdheXMgYmUgdGhlIHNhbWUKKyAgICAgICBmb3IgYW55IHBoeXNp Y2FsIGRldmljZSwgbm8gbWF0dGVyIHdoYXQgaXRzIG5hbWUuIFRoaXMgZm9ybSBvZgorICAgICAg IGxvY2tmaWxlIGlzIHVzZWQgaW4gU3lzdGVtIFYgUjQgYW5kIGl0cyBkZXJpdmF0aXZlcywgc3Vj aCBhcworICAgICAgIFNvbGFyaXMsIFVuaXhXYXJlLCBldGMuIElmIGxvY2tmaWxlcyBtdXN0IGJl IHVzZWQgKGFzIG9wcG9zZWQgdG8sCisgICAgICAgc2F5LCBrZXJuZWwtYmFzZWQgbG9ja3MpLCB0 aGlzIHdvdWxkIHNlZW0gdG8gYmUgdGhlIG1vc3QgZWZmZWN0aXZlCisgICAgICAgZm9ybS4KKwor ICAgTW9zdCB2ZXJzaW9ucyBvZiBVbml4IHdlcmUgbm90IGRlc2lnbmVkIHRvIGFjY29tbW9kYXRl IHRoaXJkLXBhcnR5CisgICBjb21tdW5pY2F0aW9ucyBzb2Z0d2FyZTsgdGh1cyB2ZW5kb3JzIG9m IHRoZXNlIFVuaXggcHJvZHVjdHMgZmVlbCBubworICAgY29tcHVuY3Rpb24gYWJvdXQgY2hhbmdp bmcgbG9ja2ZpbGUgY29udmVudGlvbnMgZnJvbSByZWxlYXNlIHRvCisgICByZWxlYXNlLCBzaW5j ZSB0aGV5IGFsc28gY2hhbmdlIHRoZWlyIHZlcnNpb25zIG9mIHRoZSBjdSwgdXVjcCwgdGlwLAor ICAgZXRjLCBwcm9ncmFtcyBhdCB0aGUgc2FtZSB0aW1lIHRvIG1hdGNoLiBBbmQgc2luY2UgdGhl IHNvdXJjZSBjb2RlIHRvCisgICB0aGVzZSBwcm9ncmFtcyBtaWdodCBub3QgYmUgcHVibGlzaGVk LCBpdCBpcyBkaWZmaWN1bHQgZm9yIG1ha2VycyBvZgorICAgdGhpcmQtcGFydHkgcHJvZHVjdHMg bGlrZSBDLUtlcm1pdCB0byBmaW5kIG91dCB3aGF0IHRoZSBuZXcgY29udmVudGlvbnMKKyAgIGFy ZS4gSXQgYWxzbyBmb3JjZXMgcmVsZWFzZSBvZiBuZXcgdmVyc2lvbnMgb2YgQy1LZXJtaXQgd2hl bmV2ZXIgdGhlIE9TCisgICB2ZW5kb3IgbWFrZXMgYSBjaGFuZ2UgbGlrZSB0aGlzLgorCisgICBT b21lIFVuaXggdmVuZG9ycyBoYXZlIHRha2VuIGEgc21hbGwgc3RlcCB0byBzaW1wbGlmeSBjb21t dW5pY2F0aW9ucworICAgYXBwbGljYXRpb24gZGV2ZWxvcG1lbnQgZm9yIHRoZWlyIHByb2R1Y3Rz OiB0aGUgaW5jbHVzaW9uIG9mIGxvY2tmaWxlCisgICByb3V0aW5lcyBpbiB0aGUgc3RhbmRhcmQg c3lzdGVtIEMgcnVudGltZSBsaWJyYXJpZXMgdG8gc2hpZWxkIHRoZQorICAgYXBwbGljYXRpb24g ZnJvbSB0aGUgZGV0YWlscyBvZiBsb2NrZmlsZSBtYW5hZ2VtZW50IChJQk0gQUlYIGlzIGFuCisg ICBleGFtcGxlKS4gV2hlbiBzdWNoIHJvdXRpbmVzIGFyZSB1c2VkLCBjb21tdW5pY2F0aW9ucyBh cHBsaWNhdGlvbnMgZG8KKyAgIG5vdCBuZWVkIG1vZGlmaWNhdGlvbiB3aGVuIGxvY2tmaWxlIGNv bnZlbnRpb25zIGNoYW5nZSAoYWx0aG91Z2ggdGhleQorICAgd2lsbCBuZWVkIHJlY29tcGlsaW5n IGlmIHRoZSByb3V0aW5lcyBhcmUgc3RhdGljYWxseSBsaW5rZWQgaW50byB0aGUKKyAgIGFwcGxp Y2F0aW9uKS4gSW4gdGhlIEFJWCBleGFtcGxlLCB0aGUgc2ltcGxlIGZ1bmN0aW9uIGNhbGxzIHR0 eWxvY2soKSwKKyAgIHR0eXVubG9jaygpLCBhbmQgdHR5bG9ja2VkKCkgcmVwbGFjZSBodW5kcmVk cyBvZiBsaW5lcyBvZiB1Z2x5IGNvZGUgaW4KKyAgIEMtS2VybWl0IHRoYXQgYXR0ZW1wdHMgdG8g a2VlcCBwYWNlIHdpdGggZXZlcnkgcmVsZWFzZSBvZiBldmVyeSBVbml4CisgICBwcm9kdWN0IG92 ZXIgdGhlIGxhc3QgMjAgeWVhcnMuIEluY2x1c2lvbiBvZiB0dHlsb2NrKCkgY29kZSBvY2N1cnMK KyAgIHdoZW46CisKKy1EVVNFVFRZTE9DSworCisgICBpcyBpbmNsdWRlZCBpbiB0aGUgQ0ZMQUdT LgorCisgICBJZiBzdWNoIHJvdXRpbmVzIGFyZSBhdmFpbGFibGUsIHRoZXkgc2hvdWxkIGJlIHVz ZWQuIFRoZSByZXN0IG9mIHRoaXMKKyAgIHNlY3Rpb24gYXBwbGllcyB3aGVuIHRoZXkgYXJlIG5v dC4KKworICAgVG8gZml0IGluIHdpdGggVVVDUCBhbmQgb3RoZXIgVW5peC1iYXNlZCBzZXJpYWwt cG9ydCBjb21tdW5pY2F0aW9uCisgICBzb2Z0d2FyZSwgQy1LZXJtaXQgbXVzdCBoYXZlIHRoZSBz YW1lIGlkZWEgYXMgeW91ciBzeXN0ZW0ncyB1dWNwLCBjdSwKKyAgIGFuZCB0aXAgcHJvZ3JhbXMg YWJvdXQgd2hhdCB0aGUgVVVDUCBsb2NrIGRpcmVjdG9yeSBpcyBjYWxsZWQsIHdoYXQgdGhlCisg ICBsb2NrZmlsZSBpdHNlbGYgaXMgY2FsbGVkLCBhbmQgd2hhdCBpdHMgY29udGVudHMgc2hvdWxk IGJlLiBJbiBtb3N0CisgICBjYXNlcywgQy1LZXJtaXQgcHJlcHJvY2Vzc29yIGZsYWdzIGNyZWF0 ZSB0aGUgYXBwcm9wcmlhdGUgY29uZmlndXJhdGlvbgorICAgYXQgY29tcGlsZSB0aW1lIGlmIHRo ZSBhcHByb3ByaWF0ZSBtYWtlZmlsZSB0YXJnZXQgd2FzIHVzZWQgKHNlZQorICAgWzMzM11ja3V0 aW8uYykuIFRoZSBmb2xsb3dpbmcgQ0ZMQUdTIG9wdGlvbnMgY2FuIGJlIHVzZWQgdG8gb3ZlcnJp ZGUKKyAgIHRoZSBidWlsdC1pbiBjb25maWd1cmF0aW9uOgorCisgICAtRExDS0RJUgorICAgICAg ICAgIFRlbGxzIEtlcm1pdCB0aGF0IHRoZSBVVUNQIGxvY2sgZGlyZWN0b3J5IGlzCisgICAgICAg ICAgL3Vzci9zcG9vbC91dWNwL0xDSy4KKworICAgLURBQ1VDTlRSTAorICAgICAgICAgIFRlbGxz IEtlcm1pdCB0byB1c2UgdGhlIEJTRCA0LjMgYWN1Y250cmwoKSBwcm9ncmFtIHRvIHR1cm4gb2Zm CisgICAgICAgICAgZ2V0dHkgKGxvZ2luKSBvbiB0aGUgbGluZSBiZWZvcmUgdXNpbmcgaXQsIGFu ZCByZXN0b3JlIGdldHR5CisgICAgICAgICAgd2hlbiBkb25lLgorCisgICAtREhEQlVVQ1AKKyAg ICAgICAgICBJbmNsdWRlIHRoaXMgaWYgeW91ciBzeXN0ZW0gdXNlcyBIb25leSBEYW5CZXIgVVVD UCwgaW4gd2hpY2ggdGhlCisgICAgICAgICAgbG9ja2ZpbGUgZGlyZWN0b3J5IGFuZCBmb3JtYXQg YXJlIHJlbGF0aXZlbHkgc3RhbmRhcmRpemVkLgorCisgICAtRExPQ0tfRElSPVxcXCIveHh4L3l5 eVxcXCIKKyAgICAgICAgICBHaXZlcyB0aGUgbG9jayBkaXJlY3RvcnkgbmFtZSBleHBsaWNpdGx5 LiBUaGUgdHJpcGxlIHF1b3RpbmcgaXMKKyAgICAgICAgICBuZWNlc3NhcnkuIEZvciBleGFtcGxl OgorCitDRkxBR1M9IC1EQlNENCAtRExPQ0tfRElSPVxcXCIvdXNyL2xvY2FsL2xvY2tzXFxcIiAt RE5PREVCVUcKKworICAgICAgICAgIChOT1RFOiBUaGUgdHJpcGxlIHF1b3RpbmcgYXNzdW1lcyB0 aGlzIGlzIGEgInRvcC1sZXZlbCIgbWFrZQorICAgICAgICAgIGVudHJ5LCBhbmQgbm90IGEgbWFr ZSBlbnRyeSB0aGF0IGNhbGxzIGFub3RoZXIgb25lLikKKworICAgLURMRkRFVk5PIFRoZSBsb2Nr ZmlsZSBuYW1lIHVzZXMgdGhlIHR0eSBkZXZpY2UgaW5vZGUgYW5kIG1ham9yIGFuZAorICAgICAg ICAgIG1pbm9yCisgICAgICAgICAgbnVtYmVyczogTEsuZGV2Lm1hai5taW4sIGFzIGluIFN5cyBW IFI0LCBlLmcuIExLLjAzNS4wNDQuMDA4LgorCisgICBXaGVuIHRoZSBMSy5pbm9kZS5tYWpvci5t aW5vciBmb3JtIGlzIHVzZWQsIGEgc2luZ2xlIGxvY2tmaWxlIGlzCisgICBlbm91Z2guIE90aGVy d2lzZSwgYSBzaW5nbGUgbG9ja2ZpbGUgcmFyZWx5IHN1ZmZpY2VzLiBGb3IgZXhhbXBsZSwgaW4K KyAgIExpbnV4LCBpdCBpcyBjb21tb24gdG8gaGF2ZSBhIC9kZXYvbW9kZW0gc3ltYm9saWMgbGlu ayB0byBhbiBhY3R1YWwKKyAgIGRpYWxvdXQgZGV2aWNlLCBsaWtlIC9kZXYvY3VhMCBvciAvZGV2 L3R0eVMwLCB3aG9zZSBwdXJwb3NlIGlzIHRvIGhpZGUKKyAgIHRoZSBkZXRhaWxzIG9mIHRoZSBh Y3R1YWwgZHJpdmVyIGZyb20gdGhlIHVzZXIuIFNvIGlmIG9uZSB1c2VyIG9wZW5zCisgICAvZGV2 L21vZGVtLCBhIGxvY2tmaWxlIGNhbGxlZCBMQ0suLm1vZGVtIGlzIGNyZWF0ZWQsIHdoaWNoIGRv ZXMgbm90CisgICBwcmV2ZW50IGFub3RoZXIgdXNlciBmcm9tIHNpbXVsdGFuZW91c2x5IG9wZW5p bmcgdGhlIHNhbWUgZGV2aWNlIGJ5IGl0cworICAgcmVhbCBuYW1lLgorCisgICBPbiBTQ08gVW5p eCBwbGF0Zm9ybXMsIHdlIGhhdmUgYSBzbGlnaHRseSBkaWZmZXJlbnQgcHJvYmxlbTogdGhlIHNh bWUKKyAgIGRldmljZSBpcywgYnkgY29udmVudGlvbiwga25vd24gYnkgImxvd2VyY2FzZSIgYW5k ICJ1cHBlcmNhc2UiIG5hbWVzLAorICAgZGVwZW5kaW5nIG9uIHdoZXRoZXIgaXQgaGFzIG1vZGVt IGNvbnRyb2wuIFNvIGJ5IGNvbnZlbnRpb24sCisgICBjb21tdW5pY2F0aW9ucyBwcm9ncmFtcyBh cmUgc3VwcG9zZWQgdG8gY3JlYXRlIHRoZSBsb2NrZmlsZXMgYmFzZWQgb24KKyAgIHRoZSBsb3dl cmNhc2UgbmFtZS4gQnV0IHNvbWUgcHJvZ3JhbXMgZG9uJ3QgZm9sbG93IHRoaXMgY29udmVudGlv bi4gSW4KKyAgIEhQLVVYLCB3ZSBoYXZlIHNldmVyYWwgZGlmZmVyZW50IG5hbWVzIGZvciBlYWNo IHNlcmlhbCBkZXZpY2UuIEFuZCBzbworICAgb24uCisKKyAgIEZvciB0aGlzIHJlYXNvbiwgb24g cGxhdGZvcm1zIHdoZXJlIHRoZSBMSy5pbm9kZS5tYWpvci5taW5vciBmb3JtIGlzCisgICBub3Qg dXNlZCwgQy1LZXJtaXQgYWxzbyBjcmVhdGVzIGEgc2Vjb25kYXJ5IGxvY2tmaWxlICh3aGljaCBp cyBzaW1wbHkgYQorICAgbGluayB0byB0aGUgZmlyc3QpIGlmOgorCisgICAgYS4gVGhlIGdpdmVu IGRldmljZSBuYW1lIGlzIGEgc3ltYm9saWMgbGluay4gVGhlIHNlY29uZGFyeSBsaW5rIGlzCisg ICAgICAgYmFzZWQgb24gdGhlIGRldmljZSdzIHJlYWwgbmFtZS4KKyAgICBiLiBPbiBTQ086IFRo ZSBkZXZpY2UgbmFtZSBpcyBub3QgYSBzeW1ib2xpYyBsaW5rLCBidXQgaXQgY29udGFpbnMKKyAg ICAgICB1cHBlcmNhc2UgbGV0dGVycy4gVGhlIHByaW1hcnkgbGluayBpcyBiYXNlZCBvbiB0aGUg bG93ZXJjYXNlIG5hbWU7CisgICAgICAgdGhlIHNlY29uZGFyeSBsaW5rIGlzIGJhc2VkIG9uIHRo ZSBuYW1lIHRoYXQgd2FzIGdpdmVuLgorICAgIGMuIE9uIEhQLVVYOiBUaGUgZGV2aWNlIG5hbWUg c3RhcnRzIHdpdGggImN1Ii4gVGhlIHByaW1hcnkgbGluayBpcworICAgICAgIGJhc2VkIG9uIHRo ZSBuYW1lIHRoYXQgd2FzIGdpdmVuOyB0aGUgc2Vjb25kYXJ5IGxpbmsgaXMgYmFzZWQgb24KKyAg ICAgICB0aGUgY29ycmVzcG9uZGluZyAidHR5ZCIgZGV2aWNlLCBlLmcuICJMQ0suLmN1YTBwMCIg YW5kCisgICAgICAgIkxDSy4udHR5ZDBwMCIuCisKKyAgIE5PVEU6IHN5bWxpbmtzIGFyZSBub3Qg aGFuZGxlZCBpbiBIUC1VWC4KKworICAgSG9uZXkgRGFuQmVyIChIREIpIFVVQ1AsIHRoZSBiYXNp cyBvZiBtYW55IFVVQ1AgaW1wbGVtZW50YXRpb25zLCBoYXMKKyAgIHR3byBjaGFyYWN0ZXJpc3Rp Y3M6CisKKyAgICBhLiBMb2NrZmlsZXMgYXJlIGtlcHQgaW4gL3Vzci9zcG9vbC9sb2Nrcy8gKHVz dWFsbHkpLgorICAgIGIuIEEgbG9ja2ZpbGUgY29udGFpbnMgdGhlIHByb2Nlc3MgaWQgKHBpZCkg aW4gQVNDSUksIHJhdGhlciB0aGFuIGFzCisgICAgICAgYW4gaW50LgorCisgICBOb24tSERCIHNl bGVjdGlvbnMgYXNzdW1lIHRoZSBsb2NrZmlsZSBjb250YWlucyB0aGUgcGlkIGluIGludCBmb3Jt CisgICAob3IsIG1vcmUgcHJlY2lzZWx5LCBpbiBQSURfVCBmb3JtLCB3aGVyZSBQSURfVCBpcyBl aXRoZXIgaW50IG9yIHBpZF90LAorICAgZGVwZW5kaW5nIG9uIHlvdXIgc3lzdGVtJ3MgQyBsaWJy YXJ5IGFuZCBoZWFkZXIgZmlsZXMpLiAoYiksIGJ5IHRoZQorICAgd2F5LCBpcyBzdWJqZWN0IHRv IGludGVycHJldGF0aW9uOiB0aGUgbnVtZXJpYyBBU0NJSSBzdHJpbmcgbWF5IG9yIG1heQorICAg bm90IGJlIHRlcm1pbmF0ZWQgYnkgYSBuZXdsaW5lLCBpdCBtYXkgb3IgbWF5IG5vdCBoYXZlIGxl YWRpbmcgc3BhY2VzCisgICAob3IgemVyb3MpLCBhbmQgdGhlIG51bWJlciBvZiBsZWFkaW5nIHNw YWNlcyBvciB6ZXJvcyBjYW4gZGlmZmVyLCBhbmQKKyAgIHRoZSBkaWZmZXJlbmNlcyBjYW4gYmUg c2lnbmlmaWNhbnQuCisKKyAgIEV2ZW4gaWYgeW91IGJ1aWxkIHRoZSBwcm9ncmFtIHdpdGggdGhl IHJpZ2h0IGxvY2tmaWxlIG9wdGlvbiwgeW91IGNhbgorICAgc3RpbGwgaGF2ZSBwcm9ibGVtcyB3 aGVuIHlvdSB0cnkgdG8gb3BlbiB0aGUgZGV2aWNlLiBIZXJlIGFyZSB0aGUgZXJyb3IKKyAgIG1l c3NhZ2VzIHlvdSBjYW4gZ2V0IGZyb20gU0VUIExJTkUsIGFuZCB3aGF0IHRoZXkgbWVhbjoKKwor ICAgIGEuICJUaW1lZCBvdXQsIG5vIGNhcnJpZXIuIiBUaGlzIG9uZSBpcyBub3QgcmVsYXRlZCB0 byBsb2NrZmlsZXMuIEl0CisgICAgICAgbWVhbnMgdGhhdCB5b3UgaGF2ZSBTRVQgQ0FSUklFUiBP TiB4eCwgd2hlcmUgeHggaXMgdGhlIG51bWJlciBvZgorICAgICAgIHNlY29uZHMgdG8gd2FpdCBm b3IgY2FycmllciwgYW5kIGNhcnJpZXIgZGlkIG5vdCBhcHBlYXIgd2l0aGluIHh4CisgICAgICAg c2Vjb25kcy4gU29sdXRpb246IFNFVCBDQVJSSUVSIEFVVE8gb3IgT0ZGLgorICAgIGIuICJTb3Jy eSwgYWNjZXNzIHRvIGxvY2sgZGVuaWVkLiIgS2VybWl0IGhhcyBiZWVuIGNvbmZpZ3VyZWQgdG8g dXNlCisgICAgICAgbG9ja2ZpbGVzLCBidXQgKGEpdGhlIGxvY2tmaWxlIGRpcmVjdG9yeSBpcyB3 cml0ZS1wcm90ZWN0ZWQgYWdhaW5zdAorICAgICAgIHlvdSwgb3IgKGIpIGl0IGRvZXMgbm90IGV4 aXN0LiBUaGUgImFjY2VzcyB0byBsb2NrIGRlbmllZCIgbWVzc2FnZQorICAgICAgIHdpbGwgdGVs bCB5b3UgdGhlIHJlYXNvbi4gSWYgdGhlIGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdCwgY2hlY2sg dG8KKyAgICAgICBtYWtlIHN1cmUgS2VybWl0IGlzIHVzaW5nIHRoZSByaWdodCBuYW1lLiBKdXN0 IGJlY2F1c2UgdmVyc2lvbiBuIG9mCisgICAgICAgeW91ciBVbml4IHVzZWQgYSBjZXJ0YWluIGxv Y2tmaWxlIGRpcmVjdG9yeSBpcyBubyBndWFyYW50ZWUgdGhhdAorICAgICAgIHZlcnNpb24gbi4x IGRvZXMgbm90IHVzZSBhIGRpZmZlcmVudCBvbmUuIFdvcmthcm91bmQ6IGFzayB0aGUKKyAgICAg ICBzeXN0ZW0gYWRtaW5pc3RyYXRvciB0byBpbnN0YWxsIGEgc3ltYm9saWMgbGluayBmcm9tIHRo ZSBvbGQgbmFtZQorICAgICAgIHRvIHRoZSBuZXcgbmFtZS4gT3RoZXIgc29sdXRpb25zOiAoc2Vl IGJlbG93KQorICAgIGMuICJTb3JyeSwgYWNjZXNzIHRvIHR0eSBkZXZpY2UgZGVuaWVkLiIgVGhl IHR0eSBkZXZpY2UgdGhhdCB5b3UKKyAgICAgICBzcGVjaWZpZWQgaW4geW91ciBTRVQgTElORSBj b21tYW5kIGlzIHJlYWQvd3JpdGUgcHJvdGVjdGVkIGFnYWluc3QKKyAgICAgICB5b3UuIFNvbHV0 aW9uOiAoc2VlIGJlbG93KQorICAgIGQuICJTb3JyeSwgZGV2aWNlIGlzIGluIHVzZS4iIFRoZSB0 dHkgZGV2aWNlIHlvdSBoYXZlIHNwZWNpZmllZCBpcworICAgICAgIGN1cnJlbnRseSBiZWluZyB1 c2VkIGJ5IGFub3RoZXIgdXNlci4gQSBwcmVmYXRvcnkgbWVzc2FnZSBnaXZlcyB5b3UKKyAgICAg ICBhbiAibHMgLWwiIGxpc3Rpbmcgb2YgdGhlIGxvY2tmaWxlLCB3aGljaCBzaG91bGQgc2hvdyB0 aGUgdXNlcm5hbWUKKyAgICAgICBvZiB0aGUgcGVyc29uIHdobyBjcmVhdGVkIGl0LCBwbHVzIGEg bWVzc2FnZSAicGlkID0gbm5uIiB0byBzaG93CisgICAgICAgeW91IHRoZSBwcm9jZXNzIGlkIG9m IHRoZSB1c2VyJ3MgcHJvZ3JhbS4gU29sdXRpb25zOiB0cnkgYW5vdGhlcgorICAgICAgIGRldmlj ZSwgd2FpdCB1bnRpbCB0aGUgb3RoZXIgdXNlciBpcyBmaW5pc2hlZCwgYXNrIHRoZSBvdGhlciB1 c2VyCisgICAgICAgdG8gaHVycnkgdXAsIG9yIGFzayB0aGUgc3lzdGVtIG1hbmFnZXIgZm9yIGhl bHAuCisgICAgZS4gIlNvcnJ5LCBjYW4ndCBvcGVuIGNvbm5lY3Rpb246IHJlYXNvbiIuIFRoZSBk ZXZpY2UgY2Fubm90IGJlIG9wZW5lZAorICAgICAgIGZvciBzb21lIG90aGVyIHJlYXNvbiwgd2hp Y2ggaXMgbGlzdGVkLgorICAgIGYuICJzaDogL3Vzci9saWIvdXVjcC9hY3VjbnRybDogbm90IGZv dW5kIi4gVGhpcyBtZWFucyB5b3VyIEtlcm1pdAorICAgICAgIHByb2dyYW0gd2FzIGJ1aWx0IHdp dGggdGhlIC1EQUNVQ05UUkwgc3dpdGNoLCBidXQgeW91ciBjb21wdXRlcgorICAgICAgIHN5c3Rl bSBkb2VzIG5vdCBoYXZlIHRoZSBCU0QgNC4zIGFjdWNudHJsIHByb2dyYW0uIFNvbHV0aW9uOgor ICAgICAgIGluc3RhbGwgdGhlIGFjdWNudHJsIHByb2dyYW0gaWYgeW91IGhhdmUgaXQsIG9yIHJl YnVpbGQgS2VybWl0CisgICAgICAgd2l0aG91dCB0aGUgLURBQ1VDTlRSTCBzd2l0Y2guCisKKyAg IFRoZXJlIGFyZSB0d28gc29sdXRpb25zIGZvciBwcm9ibGVtcyAoYikgYW5kIChjKSwgYm90aCBv ZiB3aGljaCBpbnZvbHZlCisgICBpbnRlcnZlbnRpb24gYnkgeW91ciBVbml4IHN5c3RlbSBhZG1p bmlzdHJhdG9yIChzdXBlcnVzZXIpOgorCisgICAgYS4gSGF2ZSB0aGUgc3VwZXJ1c2VyIGNoYW5n ZSB0aGUgcGVybWlzc2lvbiBvZiB0aGUgbG9ja2ZpbGUgZGlyZWN0b3J5CisgICAgICAgYW5kIHRv IHRoZSB0dHkgZGV2aWNlcyBzbyB0aGF0IGV2ZXJ5b25lIG9uIHRoZSBzeXN0ZW0gaGFzCisgICAg ICAgcmVhZC93cml0ZSBwZXJtaXNzaW9uLgorCitzdSUgY2htb2QgNzc3IC91c3Ivc3Bvb2wvbG9j a3MgKG9yIHdoYXRldmVyIHRoZSBwYXRoIGlzKQorc3UlIGNobW9kIDY2NiAvZGV2L3R0eVhYCisK KyAgICAgICBPbmUgcmlzayBoZXJlIGlzIHRoYXQgcGVvcGxlIGNhbiB3cml0ZSBsb3RzIG9mIGp1 bmsgaW50byB0aGUKKyAgICAgICBsb2NrZmlsZSBkaXJlY3RvcnksIGRlbGV0ZSBvdGhlciBwZW9w bGUncyBmaWxlcyBpbiB0aGUgbG9ja2ZpbGUKKyAgICAgICBkaXJlY3RvcnksIGFuZCBpbnRlcmNl cHQgb3RoZXIgcGVvcGxlJ3MgZGF0YSBhcyBpdCBnb2VzIGluIGFuZCBvdXQKKyAgICAgICBvZiB0 aGUgdHR5IGRldmljZS4gVGhlIG1ham9yIGRhbmdlciBoZXJlIHdvdWxkIGJlIGludGVyY2VwdGlu ZyBhCisgICAgICAgcHJpdmlsZWdlZCBwYXNzd29yZC4gT2YgY291cnNlLCBhbnkgdXNlciBjb3Vs ZCB3cml0ZSBhIHNob3J0LAorICAgICAgIG9yZGluYXJ5LCB1bnByaXZpbGVnZWQgcHJvZ3JhbSB0 byBkbyBleGFjdGx5IHRoZSBzYW1lIHRoaW5nIGlmIHRoZQorICAgICAgIHR0eSBkZXZpY2Ugd2Fz IHdvcmxkIHJlYWQvd3JpdGVhYmxlLiBUaGUgb3RoZXIgcmlzayBhcyB0aGF0CisgICAgICAgdGVs ZXBob25lIGNhbGxzIGFyZSBub3QgY29udHJvbGxlZCAtLSBhbnlib2R5IG9uIHlvdXIgc3lzdGVt IGNhbgorICAgICAgIG1ha2UgdGhlbSwgd2l0aG91dCBoYXZpbmcgdG8gYmVsb25nIHRvIGFueSBw YXJ0aWN1bGFyIGdyb3VwLCBhbmQKKyAgICAgICB0aGlzIGNvdWxkIHJ1biB1cCB5b3VyIHBob25l IGJpbGwuCisgICAgYi4gVXNlIGdyb3VwcyB0byByZWd1bGF0ZSBhY2Nlc3MuIE5vcm1hbGx5IHRo ZSBsb2NrZmlsZSBkaXJlY3RvcnkgYW5kCisgICAgICAgYW5kIHRoZSBkaWFsb3V0IGRldmljZXMg d2lsbCBoYXZlIHRoZSBzYW1lIGdyb3VwIChzdWNoIGFzIHV1Y3ApLiBJZgorICAgICAgIHNvLCB0 aGVuIHB1dCBldmVyeWJvZHkgd2hvJ3MgYWxsb3dlZCB0byBkaWFsIG91dCBpbnRvIHRoYXQgZ3Jv dXAsCisgICAgICAgYW5kIG1ha2Ugc3VyZSB0aGF0IHRoZSBsb2NrZmlsZSBkaXJlY3RvcnkgYW5k IHRoZSB0dHkgZGV2aWNlcyBoYXZlCisgICAgICAgZ3JvdXAgcmVhZCBBTkQgd3JpdGUgcGVybWlz c2lvbi4gRXhhbXBsZToKKworc3UlIGNobW9kIDc3MCAvdXNyL3Nwb29sL2xvY2tzIChvciB3aGF0 ZXZlciB0aGUgcGF0aCBpcykKK3N1JSBjaG1vZCA2NjAgL2Rldi90dHlYWAorCisgICAgICAgVXNl ciB3aGF0ZXZlciB0b29sIGlzIGF2YWlsYWJsZSBvbiB5b3VyIHBsYXRmb3JtIHRvIGFkZCB1c2Vy cyB0bworICAgICAgIHRoZSBhcHByb3ByaWF0ZSBncm91cCAoZS5nLiBlZGl0IHRoZSAvZXRjL2dy b3VwIGZpbGUpLgorICAgIGMuIEhhdmUgdGhlIHN1cGVydXNlciBjaGFuZ2UgS2VybWl0IHRvIHJ1 biBzZXR1aWQgYW5kL29yIHNldGdpZCB0byB0aGUKKyAgICAgICBvd25lciBhbmQvb3IgZ3JvdXAg b2YgdGhlIGxvY2tmaWxlIGRpcmVjdG9yeSBhbmQgdGhlIHR0eSBkZXZpY2VzIGlmCisgICAgICAg bmVjZXNzYXJ5KSwgdHlwaWNhbGx5IHV1Y3AgKHNlZSBbMzM0XW5leHQgc2VjdGlvbiksIGJ1dCBO T1Qgcm9vdC4KKyAgICAgICBFeGFtcGxlOgorCitzdSUgY2hvd24gdXVjcCBrZXJtaXQgICAgICAg ICAgLSBvciAtICBjaGdycCB1dWNwIGtlcm1pdAorc3UlIGNobW9kIHUrcyBrZXJtaXQgKHNldHVp ZCkgIC0gb3IgLSAgY2htb2QgZytzIGtlcm1pdCAoc2V0Z2lkKQorCisgICAgICAgYW5kIHRoZW4g bWFrZSBzdXJlIHRoZSBsb2NrZmlsZSBkaXJlY3RvcnksIGFuZCB0aGUgdHR5IGRldmljZXMsCisg ICAgICAgaGF2ZSBvd25lciAoc2V0dWlkKSBhbmQvb3IgZ3JvdXAgKHNldGdpZCkgd3JpdGUgcGVy bWlzc2lvbi4gRm9yCisgICAgICAgZXhhbXBsZToKKworc3UlIGNobW9kIG8rcnd4IC91c3Ivc3Bv b2wvdXVjcAorc3UlIGNob3duIHV1Y3AgL2Rldi90dHlYWCA7IGNobW9kIDYwMCAvZGV2L3R0eVhY CisKKyAgICAgICBJbiBzb21lIGNhc2VzLCB0aGUgb3duZXIgYW5kIGdyb3VwIG11c3QgYmUgZGlz dGluY3Q7IHRoZSBrZXkgcG9pbnQKKyAgICAgICBpcyB0aGF0IHJlYWQvd3JpdGUgYWNjZXNzIGlz IHJlcXVpcmVkIHRvIGJvdGggdGhlIFVVQ1AgbG9ja2ZpbGUKKyAgICAgICBkaXJlY3RvcnkgYW5k IHRoZSB0dHkgaXRzZWxmLgorCisgICBJZiB5b3UgbWFrZSBDLUtlcm1pdCBzZXR1aWQgb3Igc2V0 Z2lkIHRvIHJvb3QsIGl0IHJlZnVzZXMgdG8gcnVuOgorCitGYXRhbDogQy1LZXJtaXQgc2V0dWlk IHRvIHJvb3QhCisKKyAgIEV4YW1wbGU6CisKK2Nydy1yLS0tLS0gICAxIHV1Y3AgICAgIHV1Y3Ag ICAgICAgNSwgIDY3IEZlYiAxMSAwNjoyMyAvZGV2L2N1YTMKK2Ryd3hyd3hyLXggICAzIHJvb3Qg ICAgIHV1Y3AgICAgICAgICAxMDI0IEZlYiAxMSAwNjoyMiAvdmFyL2xvY2sKKworICAgcmVxdWly ZXMgc3VpZCB1dWNwIHRvIGdldCByZWFkL3dyaXRlIGFjY2VzcyBvbiAvZGV2L2N1YTMgYW5kIHNn aWQgdG8KKyAgIGdldCByZWFkL3dyaXRlIGFjY2VzcyBvbiAvdmFyL2xvY2sgKHNpbmNlIHlvdSBj YW4ndCBzZXQgS2VybWl0J3MgdWlkIG9yCisgICBnaWQgdG8gcm9vdCkuCisKKyAgICAgVGhlIHJl YXNvbiBLZXJtaXQgY2FuJ3QgYmUgc2V0dWlkIG9yIHNldGdpZCB0byByb290IGhhcyB0byBkbyB3 aXRoCisgICAgIHRoZSBmYWN0IHRoYXQgc29tZSBVbml4IE9TJ3MgY2FuJ3Qgc3dpdGNoIHVzZXIg b3IgZ3JvdXAgSURzIGluIHRoYXQKKyAgICAgY2FzZS4gVW5mb3J0dW5hdGVseSwgdGhlIHByb2hp Yml0aW9uIGFnYWluc3QgbWFraW5nIEtlcm1pdCBzZXR1aWQgb3IKKyAgICAgc2V0Z2lkIHRvIHJv b3QgbWVhbnMgdGhhdCBVbml4IEMtS2VybWl0IGNhbid0IGJlIHVzZWQgdG8gbWFrZSBybG9naW4K KyAgICAgY29ubmVjdGlvbnMgYnkgbm9uLXJvb3QgdXNlcnMuIChUaGUgcmxvZ2luIHBvcnQgaXMg cHJpdmlsZWdlZCwgd2hpY2gKKyAgICAgaXMgd2h5IHRoZSByZWd1bGFyIHJsb2dpbiBjb21tYW5k IGlzIHNldHVpZCByb290IC0tIHdoaWNoIGlzIHNhZmUKKyAgICAgYmVjYXVzZSB0aGUgcmxvZ2lu IHByb2dyYW0gbmV2ZXIgaGFzIHRvIGNyZWF0ZSBvciBhY2Nlc3MgZmlsZXMgbGlrZQorICAgICBL ZXJtaXQgZG9lcy4pCisKKyAgIEZvciB0aGUgbG9ja2ZpbGUgbWVjaGFuaXNtIHRvIGFjaGlldmUg aXRzIGRlc2lyZWQgcHVycG9zZSAtLSBwcmV2ZW50aW9uCisgICBvZiBhY2Nlc3MgdG8gdGhlIHNh bWUgdHR5IGRldmljZSBieSBtb3JlIHRoYW4gb25lIHByb2Nlc3MgYXQgYSB0aW1lIC0tCisgICBB TEwgcHJvZ3JhbXMgb24gYSBnaXZlbiBjb21wdXRlciB0aGF0IG9wZW4sIHJlYWQgb3Igd3JpdGUs IGFuZCBjbG9zZQorICAgdHR5IGRldmljZXMgbXVzdCB1c2UgdGhlIFNBTUUgbG9ja2ZpbGUgY29u dmVudGlvbnMuIFVuZm9ydHVuYXRlbHksIHRoaXMKKyAgIGlzIG9mdGVuIG5vdCB0aGUgY2FzZS4g SGVyZSBpcyBhIHR5cGljYWwgZXhhbXBsZSBvZiBob3cgdGhpcyBjYW4gZ28KKyAgIHdyb25nOiBJ biBTdW5PUyA0LjAgYW5kIGVhcmxlciwgdGhlIGxvY2tmaWxlIGRpcmVjdG9yeSB3YXMKKyAgIC91 c3Ivc3Bvb2wvdXVjcDsgaW4gNC4xIGl0IHdhcyBjaGFuZ2VkIHRvIC92YXIvc3Bvb2wvbG9ja3Mg aW4gdGhlIHF1ZXN0CisgICBmb3IgcG9saXRpY2FsIGNvcnJlY3RuZXNzLiBDb25zZXF1ZW50bHks IGFueSB0aGlyZC1wYXJ0eSBwcm9ncmFtcyAoc3VjaAorICAgYXMgQy1LZXJtaXQpIHRoYXQgd2Vy ZSBub3QgbW9kaWZpZWQgdG8gYWNjb3VudCBmb3IgdGhpcyBjaGFuZ2UsCisgICByZWNvbXBpbGVk LCBhbmQgcmVpbnN0YWxsZWQsIGRpZCBub3QgdXNlIHRoZSBzYW1lIGxvY2tmaWxlcyBhcyB1dWNw LAorICAgdGlwLCBldGMsIGFuZCBzbyB0aGUgZW50aXJlIHB1cnBvc2Ugb2YgdGhlIGxvY2tmaWxl IGlzIGRlZmVhdGVkLgorCisgICBXaGF0IGlmIHlvdXIgVW5peCBzeXN0ZW0gZG9lcyBub3QgaGF2 ZSBVVUNQIGluc3RhbGxlZD8gRm9yIGV4YW1wbGUsIHlvdQorICAgaGF2ZSBhIFVuaXggd29ya3N0 YXRpb24sIGFuZCB5b3UgZG8gbm90IHVzZSB1dWNwLCBjdSwgb3IgdGlwLCBvciBVVUNQCisgICB3 YXMgbm90IGV2ZW4gc3VwcGxpZWQgd2l0aCB5b3VyIHZlcnNpb24gb2YgVW5peCAoUU5YIGlzIGFu IGV4YW1wbGUpLiBJbgorICAgdGhpcyBjYXNlLCB5b3UgaGF2ZSB0d28gY2hvaWNlczoKKworICAg IGEuIElmIHRoZXJlIG1heSBiZSBtb3JlIHRoYW4gb25lIHBlcnNvbiBydW5uaW5nIEtlcm1pdCBh dCB0aGUgc2FtZQorICAgICAgIHRpbWUsIGNvbXBldGluZyBmb3IgdGhlIHNhbWUgdHR5IGRldmlj ZSwgdGhlbiBjcmVhdGUgYSBzcGVjaWFsCisgICAgICAgbG9ja2ZpbGUgZGlyZWN0b3J5IGp1c3Qg Zm9yIEtlcm1pdCwgZm9yIGV4YW1wbGUsIC91c3Ivc3Bvb2wva2VybWl0LAorICAgICAgIGFuZCBt YWtlIHN1cmUgeW91IGhhdmUgcmVhZC93cml0ZSBhY2Nlc3MgdG8gaXQuIFRoZW4gYWRkIHRoZQor ICAgICAgIGZvbGxvd2luZyB0byB5b3VyIG1ha2VmaWxlIHRhcmdldCBDRkxBR1MsIGFzIHNob3du IGVhcmxpZXI6CisKKy1ETE9DS19ESVI9XFxcIi91c3Ivc3Bvb2wva2VybWl0XFxcIgorCisgICAg Yi4gSWYgeW91IGFyZSB0aGUgb25seSB1c2VyIG9uIHlvdXIgd29ya3N0YXRpb24sIGFuZCBubyBv dGhlcgorICAgICAgIHByb2Nlc3NlcyB3aWxsIGV2ZXIgYmUgY29tcGV0aW5nIHdpdGggS2VybWl0 IGZvciB0aGUgZGlhbG91dCB0dHkKKyAgICAgICBkZXZpY2UsIHRoZW4gYWRkIC1ETk9VVUNQIHRv IHlvdXIgbWFrZWZpbGUgdGFyZ2V0J3MgQ0ZMQUdTIGFuZAorICAgICAgIHJlYnVpbGQgS2VybWl0 LgorCisxMS4gUlVOTklORyBVTklYIEMtS0VSTUlUIFNFVFVJRCBPUiBTRVRHSUQKKworICAgWyBb MzM1XVRvcCBdIFsgWzMzNl1Db250ZW50cyBdIFsgWzMzN11OZXh0IF0gWyBbMzM4XVByZXZpb3Vz IF0KKworICAgRXZlbiBpZiB5b3UgZG9uJ3QgaW50ZW5kIHRvIHJ1biBDLUtlcm1pdCBzZXR1aWQs IHNvbWVib2R5IGVsc2UgbWlnaHQKKyAgIGNvbWUgYWxvbmcgYW5kIGNob3duIGFuZCBjaG1vZCBp dCBhZnRlciBpdCBoYXMgYmVlbiBidWlsdC4gWW91IHNob3VsZAorICAgYmUgc3VyZSB0aGF0IGl0 IGlzIGJ1aWx0IGNvcnJlY3RseSB0byBydW4gc2V0dWlkIG9uIHlvdXIgc3lzdGVtLiBGb3IKKyAg IFBPU0lYIGFuZCBBVCZUIFVuaXggYmFzZWQgdmVyc2lvbnMsIHlvdSBkb24ndCBoYXZlIHRvIGRv IGFueXRoaW5nCisgICBzcGVjaWFsLgorCisgICBGb3IgNC4yIGFuZCA0LjMgQlNELWJhc2VkIFVu aXggdmVyc2lvbnMsIHlvdSBub3JtYWxseSBuZWVkIG5vdCBhZGQKKyAgIGFueXRoaW5nIHNwZWNp YWwgdG8gdGhlIG1ha2VmaWxlLiBUaGUgcHJvZ3JhbSBhc3N1bWVzIHRoYXQgdGhlCisgICBzZXRy ZXVpZCgpIGFuZCBzZXRyZWdpZCgpIGZ1bmN0aW9ucyBhcmUgYXZhaWxhYmxlLCB3aXRob3V0IHdo aWNoIHdlCisgICBjYW5ub3Qgc3dpdGNoIGJhY2sgYW5kIGZvcnRoIGJldHdlZW4gcmVhbCBhbmQg ZWZmZWN0aXZlIHVpZHMuIElmICJtYWtlIgorICAgY29tcGxhaW5zIHRoYXQgX3NldHJldWlkIG9y IF9zZXRyZWdpZCBpcy9hcmUgbm90IGRlZmluZWQsIGFkZAorICAgLUROT1NFVFJFVSB0byBDRkxB R1MuIEluIHRoaXMgY2FzZSBpdCBpcyB2ZXJ5IGxpa2VseSAoYnV0IG5vdCBjZXJ0YWluKQorICAg dGhhdCB5b3UgY2Fubm90IHByb3RlY3QgdHR5cyBhbmQgbG9ja2ZpbGVzIGFnYWluc3QgcGVvcGxl IGFuZCBoYXZlIHRoZW0KKyAgIHJ1biBLZXJtaXQgc2V0dWlkLgorCisgICBJZiBtYWtlIGRvZXMg bm90IGNvbXBsYWluIGFib3V0IHRoaXMsIHlvdSBzaG91bGQgZmluZCBvdXQgd2hldGhlciB5b3Vy CisgICBCU0QgdmVyc2lvbiAoNC4zIG9yIG90aGVyIHN5c3RlbXMgbGlrZSBTdW5PUyA0LnggdGhh dCBjbGFpbSB0byBpbmNsdWRlCisgICBCU0QgNC4zIGNvbXBhdGliaWxpdHkpIGluY2x1ZGVzIHRo ZSBzYXZlZC1zZXR1aWQgZmVhdHVyZSAoc2VlIGxvbmcKKyAgIG5vdGVzIHVuZGVyIGVkaXQgMTQ2 IGluIGNrYzE3OC51cGQpLiBJZiBpdCBkb2VzLCB0aGVuIGFkZCAtRFNBVkVEVUlEIHRvCisgICBD RkxBR1MuCisKKyAgICAgSU1QT1JUQU5UIE5PVEU6IE1vc3QgVW5peCBzeXN0ZW0gZG9jdW1lbnRh dGlvbiB3aWxsIG5vdCBnaXZlIHlvdSB0aGUKKyAgICAgcmVxdWlyZWQgaW5mb3JtYXRpb24uIFRv IGRldGVybWluZSB3aGV0aGVyIHlvdXIgVW5peCBzeXN0ZW0gc3VwcGxpZXMKKyAgICAgdGhlIHNh dmVkLW9yaWdpbmFsLWVmZmVjdGl2ZS11c2VyL2dyb3VwLWlkIGZlYXR1cmUsIHVzZSB0aGUgY2t1 dWlkLmMKKyAgICAgcHJvZ3JhbS4gUmVhZCBhbmQgZm9sbG93IHRoZSBpbnN0cnVjdGlvbnMgaW4g dGhlIGNvbW1lbnRzIGF0IHRoZQorICAgICBiZWdpbm5pbmcuCisKKyAgIEMtS2VybWl0IGZvciA0 LjRCU0QtYmFzZWQgc3lzdGVtcyBhdXRvbWF0aWNhbGx5IHVzZSBzZXRlW3VnXWlkKCkuIFNlZQor ICAgWzMzOV1ja3V0aW8uYy4KKworICAgSWYgeW91IGhhdmUgYSB2ZXJzaW9uIG9mIFVuaXggdGhh dCBpcyBub3QgQlNELWJhc2VkLCBidXQgd2hpY2ggc3VwcGxpZXMKKyAgIHRoZSBzZXRyZXVpZCgp IGFuZCBzZXRyZWdpZCgpIGZ1bmN0aW9ucywgYW5kIHRoZXNlIGFyZSB0aGUgb25seSB3YXkgdG8K KyAgIHN3aXRjaCBiZXR3ZWVuIHJlYWwgYW5kIGVmZmVjdGl2ZSB1aWQsIGFkZCAtRFNFVFJFVUlE IHRvIHlvdXIgbWFrZWZpbGUKKyAgIHRhcmdldC4KKworICAgICBXQVJOSU5HOiBUaGVyZSBhcmUg dHdvIGNhbGxzIHRvIGFjY2VzcygpIGluIFszNDBdY2t1ZmlvLmMsIGJ5IHdoaWNoCisgICAgIEtl cm1pdCBjaGVja3MgdG8gc2VlIGlmIGl0IGNhbiBjcmVhdGUgYW4gb3V0cHV0IGZpbGUuIFRoZXNl IGNhbGxzCisgICAgIHdpbGwgbm90IHdvcmsgY29ycmVjdGx5IHdoZW4gKGEpeW91IGhhdmUgaW5z dGFsbGVkIEMtS2VybWl0IHNldHVpZAorICAgICBvciBzZXRnaWQgb24gYSBCU0QtYmFzZWQgVW5p eCBzeXN0ZW0sIGFuZCAoYikgdGhlCisgICAgIHNhdmVkLW9yaWdpbmFsLWVmZmVjdGl2ZS11aWQv Z2lkIGZlYXR1cmUgaXMgbm90IHByZXNlbnQsIGFuZCAoYykgdGhlCisgICAgIGFjY2VzcygpIGZ1 bmN0aW9uIGFsd2F5cyBjaGVja3Mgd2hhdCBpdCBiZWxpZXZlcyB0byBiZSB0aGUgcmVhbCBJRAor ICAgICByYXRoZXIgdGhhbiB0aGUgZWZmZWN0aXZlIElELiBUaGlzIGlzIHRoZSBjYXNlLCBmb3Ig ZXhhbXBsZSwgaW4KKyAgICAgT2xpdmV0dGkgWC9PUyBhbmQgaW4gTmVYVFNURVAuIEluIHN1Y2gg Y2FzZXMsIHlvdSBjYW4gZm9yY2UgY29ycmVjdAorICAgICBvcGVyYXRpb24gb2YgYWNjZXNzKCkg Y2FsbHMgYnkgZGVmaW5pbmcgdGhlIHN5bWJvbCBTV19BQ0NfSUQgYXQKKyAgICAgY29tcGlsZSB0 aW1lIGluIENGTEFHUy4KKworICAgSWYgeW91IGhhdmUgYSB2ZXJzaW9uIG9mIFVuaXggdGhhdCBk b2VzIG5vdCBhbGxvdyBhIHByb2Nlc3MgdG8gc3dpdGNoCisgICBiYWNrIGFuZCBmb3J0aCBiZXR3 ZWVuIGl0cyBlZmZlY3RpdmUgYW5kIHJlYWwgdXNlciBhbmQgZ3JvdXAgaWRzCisgICBtdWx0aXBs ZSB0aW1lcywgeW91IHByb2JhYmx5IHNob3VsZCBub3QgYXR0ZW1wdCB0byBydW4gS2VybWl0IHNl dHVpZCwKKyAgIGJlY2F1c2Ugb25jZSBoYXZpbmcgZ2l2ZW4gdXAgaXRzIGVmZmVjdGl2ZSB1aWQg b3IgZ2lkICh3aGljaCBpdCBtdXN0IGRvCisgICBpbiBvcmRlciB0byB0cmFuc2ZlciBmaWxlcywg Zm9yayBhIHNoZWxsLCBldGMpIGl0IGNhbiBuZXZlciBnZXQgaXQKKyAgIGJhY2ssIGFuZCBzbyBp dCBjYW4gbm90IHVzZSB0aGUgb3JpZ2luYWwgZWZmZWN0aXZlIHVpZCBvciBnaWQgdG8gY3JlYXRl CisgICBvciBkZWxldGUgdXVjcCBsb2NrZmlsZXMuIEluIHRoaXMgY2FzZSwgeW91J2xsIGVpdGhl ciBoYXZlIHRvIHNldCB0aGUKKyAgIHBlcm1pc3Npb25zIG9uIHlvdXIgbG9ja2ZpbGUgZGlyZWN0 b3J5IHRvIG1ha2UgdGhlbSBwdWJsaWNseQorICAgcmVhZC93cml0YWJsZSwgb3IgZGlzcGVuc2Ug d2l0aCBsb2NraW5nIGFsdG9nZXRoZXIuCisKKyAgIE1PUkFMOiBBcmUgeW91IHRob3JvdWdobHkg c2lja2VuZWQgYW5kL29yIGZyaWdodGVuZWQgYnkgYWxsIHRoYXQgeW91CisgICBoYXZlIGp1c3Qg cmVhZD8gWW91IHNob3VsZCBiZS4gV2hhdCBpcyB0aGUgcmVhbCBhbnN3ZXI/IFNpbXBsZS4gU2Vy aWFsCisgICBkZXZpY2VzIC0tIHN1Y2ggYXMgdHR5cyBhbmQgbWFnbmV0aWMgdGFwZXMgLS0gaW4g VW5peCBzaG91bGQgYmUgb3BlbmVkCisgICB3aXRoIGV4Y2x1c2l2ZSBhY2Nlc3Mgb25seSwgZW5m b3JjZWQgYnkgdGhlIFVuaXgga2VybmVsLiBTaGFyZWQgYWNjZXNzCisgICBoYXMgbm8gY29uY2Vp dmFibGUgcHVycG9zZSwgbGVnaXRpbWF0ZSBvciBvdGhlcndpc2UsIGV4Y2VwdCBieQorICAgcHJp dmlsZWdlZCBzeXN0ZW0gcHJvZ3JhbXMgc3VjaCBhcyBnZXR0eS4gVGhlIG9yaWdpbmFsIGRlc2ln biBkYXRlcworICAgZnJvbSB0aGUgbGF0ZSAxOTYwcywgd2hlbiBVbml4IHdhcyBkZXZlbG9wZWQg Zm9yIGxhYm9yYXRvcnkgdXNlIHVuZGVyIGEKKyAgIHBoaWxvc29waHkgb2YgdHJ1c3QgYnkgcGVv cGxlIHdpdGhpbiBzaG91dGluZyBkaXN0YW5jZSBvZiBlYWNoIG90aGVyIC0tCisgICBidXQgZXZl biB0aGVuLCBubyB1c2VmdWwgcHVycG9zZSB3YXMgc2VydmVkIGJ5IHRoaXMgcGFydGljdWxhciBm b3JtIG9mCisgICBvcGVubmVzczsgaXQgd2FzIHByb2JhYmx5IG1vcmUgb2YgYSBwb2xpdGljYWwg c3RhdGVtZW50LiBTaW5jZSB0aGUKKyAgIGVtZXJnZW5jZSBvZiBVbml4IGZyb20gdGhlIGxhYm9y YXRvcnkgaW50byB0aGUgY29tbWVyY2lhbCBtYXJrZXQsIHdlCisgICBoYXZlIHNlZW4gZXZlcnkg dmVzdGlnZSBvZiBvcGVubmVzcyAtLSBidXQgdGhpcyBvbmUgLS0gc3RyaXBwZWQgYXdheS4KKyAg IEknZCBsaWtlIHRvIHNlZSBzb21lIGluZmx1ZW50aWFsIFVuaXggbWFrZXIgdGFrZSB0aGUgYm9s ZCBzdGVwIG9mCisgICBtYWtpbmcgdGhlIHNpbXBsZSBrZXJuZWwgY2hhbmdlIHJlcXVpcmVkIHRv IGVuZm9yY2UgZXhjbHVzaXZlIGFjY2VzcyB0bworICAgc2VyaWFsIGRldmljZXMuIChXZWxsLCBw ZXJoYXBzIG5vdCBzbyBzaW1wbGUgd2hlbiBiaWRpcmVjdGlvbmFsaXR5IG11c3QKKyAgIGFsc28g YmUgYSBnb2FsIC0tIGJ1dCB0aGVuIG90aGVyIE9TJ3MgbGlrZSBWTVMgc29sdmVkIHRoaXMgcHJv YmxlbQorICAgZGVjYWRlcyBhZ28uKQorCisxMi4gQ09ORklHVVJJTkcgVU5JWCBXT1JLU1RBVElP TlMKKworICAgWyBbMzQxXVRvcCBdIFsgWzM0Ml1Db250ZW50cyBdIFsgWzM0M11OZXh0IF0gWyBb MzQ0XVByZXZpb3VzIF0KKworICAgT24gZGVza3RvcCB3b3Jrc3RhdGlvbnMgdGhhdCBhcmUgdXNl ZCBieSBvbmx5IHRoZSB1c2VyIGF0IHRoZSBjb25zb2xlCisgICBrZXlib2FyZCwgQy1LZXJtaXQg aXMgYWx3YXlzIHVzZWQgaW4gbG9jYWwgbW9kZS4gQnV0IGFzIGRlbGl2ZXJlZCwKKyAgIEMtS2Vy bWl0IHJ1bnMgaW4gcmVtb3RlIG1vZGUgYnkgZGVmYXVsdC4gVG8gcHV0IGl0IGluIGxvY2FsIG1v ZGUgYXQKKyAgIHN0YXJ0dXAsIHlvdSBjYW4gcHV0IGEgU0VUIExJTkUgY29tbWFuZCBpbiB5b3Vy IC5teWtlcm1yYy4KKworICAgWW91IGNhbiBhbHNvIGJ1aWxkIEMtS2VybWl0IHRvIHN0YXJ0IHVw IGluIGxvY2FsIG1vZGUgYnkgZGVmYXVsdC4gVG8gZG8KKyAgIHRoaXMsIGluY2x1ZGUgdGhlIGZv bGxvd2luZyBpbiB0aGUgQ0ZMQUdTIGluIHlvdXIgbWFrZWZpbGUgdGFyZ2V0OgorCistRERGVFRZ PVxcXCIvZGV2L3R0eXh4XFxcIgorCisgICB3aGVyZSB0dHl4eCBpcyB0aGUgbmFtZSBvZiB0aGUg ZGV2aWNlIHlvdSB3aWxsIGJlIHVzaW5nIGZvcgorICAgY29tbXVuaWNhdGlvbnMuIFByZXNlbnRs eSB0aGVyZSBpcyBubyB3YXkgb2Ygc2V0dGluZyB0aGUgZGVmYXVsdCBtb2RlbQorICAgdHlwZSBh dCBjb21waWxlIHRpbWUsIHNvIHVzZSB0aGlzIG9wdGlvbiBvbmx5IGZvciBkaXJlY3QgbGluZXMu CisKKyAgIEMtS2VybWl0IGRvZXMgbm90IHdvcmsgd2VsbCBvbiBjZXJ0YWluIHdvcmtzdGF0aW9u cyBpZiBpdCBpcyBub3QgcnVuCisgICBmcm9tIHdpdGhpbiBhIHRlcm1pbmFsIHdpbmRvdy4gRm9y IGV4YW1wbGUsIHlvdSBjYW5ub3Qgc3RhcnQgQy1LZXJtaXQKKyAgIG9uIGEgTmVYVCBieSBsYXVu Y2hpbmcgaXQgZGlyZWN0bHkgZnJvbSBOZVhUc3RlcC4gU2ltaWxhcmx5IGZvciBTdW4KKyAgIHdv cmtzdGF0aW9ucyBpbiB0aGUgT3BlbiBXaW5kb3dzIGVudmlyb25tZW50LiBSdW4gS2VybWl0IGlu IGEgdGVybWluYWwKKyAgIHdpbmRvdy4KKworMTMuIEJJWkFSUkUgQkVIQVZJT1IgQVQgUlVOVElN RQorCisgICBbIFszNDVdVG9wIF0gWyBbMzQ2XUNvbnRlbnRzIF0gWyBbMzQ3XU5leHQgXSBbIFsz NDhdUHJldmlvdXMgXQorCisgICBTZWUgdGhlICJiZXdhcmUgZmlsZSIsCisKKyAgIFszNDldY2t1 YndyLnR4dCwgZm9yIGhpbnRzIGFib3V0IHJ1bnRpbWUgbWlzYmVoYXZpb3IuIFRoaXMgc2VjdGlv bgorICAgbGlzdHMgc29tZSBydW50aW1lIHByb2JsZW1zIHRoYXQgY2FuIGJlIGN1cmVkIGJ5IHJl YnVpbGRpbmcgQy1LZXJtaXQuCisKKyAgIFRoZSBwcm9ncmFtIHN0YXJ0cywgYnV0IHRoZXJlIGlz IG5vIHByb21wdCwgYW5kIGNlcnRhaW4gb3BlcmF0aW9ucworICAgZG9uJ3Qgd29yayAoeW91IHNl ZSBlcnJvciBtZXNzYWdlcyBsaWtlICJLZXJtaXQgY29tbWFuZCBlcnJvciBpbgorICAgYmFja2dy b3VuZCBleGVjdXRpb24iKS4gVGhpcyBpcyBiZWNhdXNlIEtlcm1pdCB0aGlua3MgaXQgaXMgcnVu bmluZyBpbgorICAgdGhlIGJhY2tncm91bmQuIFNlZSBjb25iZ3QoKSBpbiBbMzUwXWNrdXRpby5j LiBUcnkgcmVidWlsZGluZyBLZXJtaXQKKyAgIHdpdGg6CisKKyAtRFBJRF9UPXBpZF90CisKKyAg IGFkZGVkIHRvIHlvdXIgQ0ZMQUdTLiBJZiB0aGF0IGRvZXNuJ3QgaGVscCwgZmluZCBvdXQgdGhl IGFjdHVhbCBkYXRhCisgICB0eXBlIGZvciBwaWRzIChsb29rIGluIHR5cGVzLmggb3Igc2ltaWxh ciBmaWxlKSBhbmQgdXNlIGl0IGluIHBsYWNlIG9mCisgICAicGlkX3QiLCBmb3IgZXhhbXBsZToK KworIC1EUElEX1Q9c2hvcnQKKworICAgVW5leHBsYWluYWJsZSBhbmQgaW5hcHByb3ByaWF0ZSBl cnJvciBtZXNzYWdlcyAoIlNvY2tldHMgbm90IHN1cHBvcnRlZAorICAgb24gdGhpcyBkZXZpY2Ui LCBldGMpIGhhdmUgYmVlbiB0cmFjZWQgaW4gYXQgbGVhc3Qgb25lIGNhc2UgdG8gYSBsYWNrCisg ICBvZiBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgc3lzdGVtIGhlYWRlciBmaWxlcyBhbmQgdGhlIGFj dHVhbCBrZXJuZWwuCisgICBUaGlzIGhhcHBlbmVkIGJlY2F1c2UgdGhlIEdOVSBDIGNvbXBpbGVy IChnY2MpIHdhcyBiZWluZyB1c2VkLiBnY2MKKyAgIHdhbnRzIHRvIGhhdmUgQU5TSS1DLWNvbXBs aWFudCBoZWFkZXIgZmlsZXMsIGFuZCBzbyBwYXJ0IG9mIHRoZQorICAgaW5zdGFsbGF0aW9uIHBy b2NlZHVyZSBmb3IgZ2NjIGlzIChvciB3YXMpIHRvIHJ1biBhIHNoZWxsIHNjcmlwdCBjYWxsZWQK KyAgICJmaXhpbmNsdWRlcyIsIHdoaWNoIHRyYW5zbGF0ZXMgdGhlIHN5c3RlbSdzIGhlYWRlciBm aWxlcyBpbnRvIGEKKyAgIHNlcGFyYXRlIHNldCBvZiBoZWFkZXJzIHRoYXQgZ2NjIGxpa2VzLiBT byBmYXIgc28gZ29vZC4gTGF0ZXIsIGEgbmV3CisgICB2ZXJzaW9uIG9mIHRoZSBvcGVyYXRpbmcg c3lzdGVtIGlzIGluc3RhbGxlZCBhbmQgbm9ib2R5IHJlbWVtYmVycyB0bworICAgcnVuIGZpeGlu Y2x1ZGVzIGFnYWluLiBGcm9tIHRoYXQgcG9pbnQsIGFueSBwcm9ncmFtIGNvbXBpbGVkIHdpdGgg Z2NjCisgICB0aGF0IG1ha2VzIHVzZSBvZiBoZWFkZXIgZmlsZXMgKHBhcnRpY3VsYXJseSBpb2N0 bC5oKSBpcyB2ZXJ5IGxpa2VseSB0bworICAgbWlzYmVoYXZlLiBTb2x1dGlvbjogcnVuIGZpeGlu Y2x1ZGVzIGFnYWluLCBvciB1c2UgeW91ciBzeXN0ZW0ncworICAgcmVndWxhciBDIGNvbXBpbGVy LCBsaWJyYXJpZXMsIGFuZCBoZWFkZXIgZmlsZXMgaW5zdGVhZCBvZiBnY2MuCisKKzE0LiBDUkFT SEVTIEFORCBDT1JFIERVTVBTCisKKyAgIFsgWzM1MV1Ub3AgXSBbIFszNTJdQ29udGVudHMgXSBb IFszNTNdTmV4dCBdIFsgWzM1NF1QcmV2aW91cyBdCisKKyAgIElmIEMtS2VybWl0IGNvbnNpc3Rl bnRseSBkdW1wcyBjb3JlIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBmaWxlCisgICB0cmFuc2Zlciwg bG9vayBpbiBTSE9XIEZFQVRVUkVTIGZvciBDS1JFQUxQQVRILiBJZiBmb3VuZCwgcmVidWlsZCB3 aXRoCisgICAtRE5PUkVBTFBBVEggYW5kIHNlZSBpZiB0aGF0IGZpeGVzIHRoZSBwcm9ibGVtIChz b21lIFVOSVhlcyBoYXZlCisgICByZWFscGF0aCgpIGJ1dCBpdCBkb2Vzbid0IHdvcmspLgorCisg ICBUb3RhbCBmYWlsdXJlIG9mIHRoZSBLZXJtaXQgcHJvZ3JhbSBjYW4gb2NjdXIgYmVjYXVzZSBv ZiBiYWQgbWVtb3J5CisgICByZWZlcmVuY2VzLCBiYWQgc3lzdGVtIGNhbGxzLCBvciBwcm9ibGVt cyB3aXRoIGR5bmFtaWMgbWVtb3J5CisgICBhbGxvY2F0aW9uLiBGaXJzdCwgdHJ5IHRvIHJlcHJv ZHVjZSB0aGUgcHJvYmxlbSB3aXRoIGRlYnVnZ2luZyB0dXJuZWQKKyAgIG9uOiBydW4gS2VybWl0 IHdpdGggdGhlIC1kIGNvbW1hbmQtbGluZSBvcHRpb24gKGZvciBleGFtcGxlLCAid2VybWl0Cisg ICAtZCIpIGFuZCB0aGVuIGV4YW1pbmUgdGhlIHJlc3VsdGluZyBkZWJ1Zy5sb2cgZmlsZS4gVGhl IGxhc3QgZW50cnkKKyAgIHNob3VsZCBiZSBpbiB0aGUgdmljaW5pdHkgb2YgdGhlIGNyYXNoLiBJ biBWTVMsIGEgY3Jhc2ggYXV0b21hdGljYWxseQorICAgcHJvZHVjZXMgYSAic3RhY2sgZHVtcCIg d2hpY2ggc2hvd3MgdGhlIHJvdXRpbmUgd2hlcmUgdGhlIGNyYXNoIG9jY3Vycy4KKyAgIEluIHNv bWUgdmVyc2lvbnMgb2YgVW5peCwgeW91IGNhbiBnZXQgYSBzdGFjayBkdW1wIHdpdGggImFkYiIg LS0ganVzdAorICAgdHlwZSAiYWRiIHdlcm1pdCBjb3JlIiBhbmQgdGhlbiBnaXZlIHRoZSBjb21t YW5kICIkYyIsIHRoZW4gQ3RybC1EIHRvCisgICBxdWl0IChub3RlOiByZXBsYWNlICJ3ZXJtaXQi IGJ5ICJrZXJtaXQiIG9yIGJ5IHRoZSBmdWxsIHBhdGhuYW1lIG9mIHRoZQorICAgZXhlY3V0YWJs ZSB0aGF0IGNyYXNoZWQgaWYgaXQgaXMgbm90IGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSkuIE9y IHVzZQorICAgZ2RiIHRvIGdldCBhIGJhY2t0cmFjZSwgZXRjLgorCisgICBJbiBlZGl0IDE4Niwg b25lIGltcGxlbWVudGF0aW9uLCBVTklTWVMgNTAwMC85NSBidWlsdCB3aXRoICJtYWtlCisgICBz eXM1cjMiLCBoYXMgYmVlbiByZXBvcnRlZCB0byBydW4gb3V0IG9mIG1lbW9yeSB2ZXJ5IHF1aWNr bHkgKGUuZy4KKyAgIHdoaWxlIGV4ZWN1dGluZyBhIHNob3J0IGluaXRpYWxpemF0aW9uIGZpbGUg dGhhdCBjb250YWlucyBhIFNFVCBESUFMCisgICBESVJFQ1RPUlkgY29tbWFuZCkuIERlYnVnIGxv Z3Mgc2hvdyB0aGF0IG1hbGxvYyBjYWxscyBhcmUgZmFpbGluZywKKyAgIHJlYXNvbiB1bmtub3du LiBGb3IgdGhpcyBhbmQgYW55IG90aGVyIGltcGxlbWVudGF0aW9uIHRoYXQgZ2l2ZXMgZXJyb3IK KyAgIG1lc3NhZ2VzIGFib3V0ICJtYWxsb2MgZmFpbHVyZSIgb3IgIm1lbW9yeSBhbGxvY2F0aW9u IGZhaWx1cmUiLCByZWJ1aWxkCisgICB0aGUgcHJvZ3JhbSAqd2l0aG91dCogdGhlIC1ERFlOQU1J QyBDRkxBR1MgZGVmaW5pdGlvbiwgZm9yIGV4YW1wbGU6CisKK21ha2Ugc3lzNXIzIEtGTEFHUz0t VURZTkFNSUMKKworICAgQXMgb2YgZWRpdCAxNjksIEMtS2VybWl0IGluY2x1ZGVzIGEgbWFsbG9j KCkgZGVidWdnaW5nIHBhY2thZ2Ugd2hpY2gKKyAgIHlvdSBtYXkgbGluayB3aXRoIHRoZSBLZXJt aXQgcHJvZ3JhbSB0byBjYXRjaCBydW50aW1lIG1hbGxvYyBlcnJvcnMuCisgICBTZWUgdGhlIG1h a2VmaWxlIGVudHJpZXMgZm9yIHN1bm9zNDFtZCBhbmQgbmV4dG1kIGZvciBleGFtcGxlcyBvZiBo b3cKKyAgIHRvIHNlbGVjdCBtYWxsb2MgZGVidWdnaW5nLiBPbmNlIHlvdSBoYXZlIGxpbmtlZCBL ZXJtaXQgd2l0aCB0aGUgbWFsbG9jCisgICBkZWJ1Z2dlciwgaXQgd2lsbCBoYWx0IHdpdGggYW4g aW5mb3JtYXRpdmUgbWVzc2FnZSBpZiBhIG1hbGxvYy1yZWxhdGVkCisgICBlcnJvciBvY2N1cnMg YW5kLCBpZiBwb3NzaWJsZSwgZHVtcCBjb3JlLiBGb3IgdGhpcyByZWFzb24sCisgICBtYWxsb2Mt ZGVidWdnaW5nIHZlcnNpb25zIG9mIEtlcm1pdCBzaG91bGQgYmUgYnVpbHQgd2l0aG91dCB0aGUg Ii1zIgorICAgbGluayBvcHRpb24gKHdoaWNoIHJlbW92ZXMgc3ltYm9scywgcHJldmVudGluZyBh bmFseXNpcyBvZiB0aGUgY29yZQorICAgZHVtcCkuIFlvdSBoYXZlIHNldmVyYWwgd2F5cyB0byB0 cmFjayBkb3duIHRoZSBtYWxsb2MgZXJyb3I6IEFuYWx5emUKKyAgIHRoZSBjb3JlIGR1bXAgd2l0 aCBhZGIuIE9yIHJlcHJvZHVjZSB0aGUgcHJvYmxlbSB3aXRoICJsb2cgZGVidWciIGFuZAorICAg dGhlbiBsb29rIGF0IHRoZSBjb2RlIGFyb3VuZCB0aGUgbGFzdCBkZWJ1Zy5sb2cgZW50cnkuIElm IHlvdSBoYXZlIGdjYywKKyAgIGJ1aWxkIHRoZSBwcm9ncmFtIHdpdGggIi1nIiBhZGRlZCB0byBD RkxBR1MgYW5kIHRoZW4gZGVidWcgaXQgd2l0aCBnZGIsCisgICBlLmcuCisKK2dkYiB3ZXJtaXQK K2JyZWFrIG1haW4KK3J1bgorLi4gc2V0IG90aGVyIGJyZWFrcG9pbnRzIG9yIHdhdGNocG9pbnRz Citjb250aW51ZQorCisgICBXYXRjaHBvaW50cyBhcmUgZXNwZWNpYWxseSB1c2VmdWwgZm9yIGZp bmRpbmcgbWVtb3J5IGxlYWtzLCBidXQgdGhleQorICAgbWFrZSB0aGUgcHJvZ3JhbSBydW4gYWJv dXQgYSB0aG91c2FuZCB0aW1lcyBzbG93ZXIgdGhhbiB1c3VhbCwgc28gZG9uJ3QKKyAgIHNldCB0 aGVtIHVudGlsIHRoZSBsYXN0IHBvc3NpYmxlIG1vbWVudC4gV2hlbiBhIHdhdGNocG9pbnQgaXMg aGl0LCB5b3UKKyAgIGNhbiB1c2UgdGhlICJ3aGVyZSIgY29tbWFuZCB0byBmaW5kIG91dCB3aGlj aCBDLUtlcm1pdCBzb3VyY2Ugc3RhdGVtZW50CisgICB0cmlnZ2VyZWQgaXQuCisKKyAgIElmIHlv dSBoYXZlIHRoZSBQdXJlIFNvZnR3YXJlIEluYyAiUHVyaWZ5IiBwcm9kdWN0LCBzZWUgdGhlIHN1 bm9zNDFjcAorICAgbWFrZWZpbGUgZW50cnkgZm9yIGFuIGV4YW1wbGUgb2YgaG93IHRvIHVzZSBp dCB0byBkZWJ1ZyBDLUtlcm1pdC4KKworMTUuIFNZU0xPR0dJTkcKKworICAgWyBbMzU1XVRvcCBd IFsgWzM1Nl1Db250ZW50cyBdIFsgWzM1N11OZXh0IF0gWyBbMzU4XVByZXZpb3VzIF0KKworICAg IlN5c2xvZ2dpbmciIG1lYW5zIHJlY29yZGluZyBzZWxlY3RlZCBpbmZvcm1hdGlvbiBpbiB0aGUg c3lzdGVtIGxvZyB2aWEKKyAgIHRoZSBVbml4IHN5c2xvZygpIGZhY2lsaXR5LCB3aGljaCBpcyBh dmFpbGFibGUgaW4gbW9zdCBVbml4IHZlcnNpb25zLgorICAgU3lzbG9nZ2luZyBpcyBub3QgZG9u ZSB1bmxlc3MgQy1LZXJtaXQgaXMgc3RhcnRlZCB3aXRoOgorCistLXN5c2xvZzpuCisKKyAgIG9u IHRoZSBjb21tYW5kLWxpbmUsIHdoZXJlIG4gaXMgYSBudW1iZXIgZ3JlYXRlciB0aGFuIDAgdG8g aW5kaWNhdGUgdGhlCisgICBsZXZlbCBvZiBzeXNsb2dnaW5nLiBTZWUgWzM1OV1TZWN0aW9uIDQu MiBvZiB0aGUgWzM2MF1JS1NECisgICBBZG1pbmlzdHJhdG9yJ3MgR3VpZGUgZm9yIGRldGFpbHMu CisKKyAgIE9idmlvdXNseSB5b3UgY2FuJ3QgZGVwZW5kIG9uIHVzZXJzIHRvIGluY2x1ZGUgLS1z eXNsb2c6MyAob3Igd2hhdGV2ZXIpCisgICBvbiB0aGUgY29tbWFuZCBsaW5lIGV2ZXJ5IHRpbWUg dGhleSBzdGFydCBDLUtlcm1pdCwgc28gaWYgeW91IHdhbnQKKyAgIGNlcnRhaW4ga2luZHMgb2Yg cmVjb3JkcyB0byBiZSByZWNvcmRlZCBpbiB0aGUgc3lzdGVtIGxvZywgeW91IGNhbgorICAgYnVp bGQgQy1LZXJtaXQgd2l0aCBmb3JjZWQgc3lzbG9nZ2luZyBhdCB0aGUgZGVzaXJlZCBsZXZlbDsg Zm9yCisgICBleGFtcGxlLCB0byByZWNvcmQgbG9naW5zIGFuZCBkaWFsb3V0czoKKworbWFrZSBs aW51eCBLRkxBR1M9LURTWVNMT0dMRVZFTD0yCisKKyAgIExldmVscyAyIGFuZCAzIGFyZSB0aGUg bW9zdCBsaWtlbHkgY2FuZGlkYXRlcyBmb3IgdGhpcyB0cmVhdG1lbnQuIExldmVsCisgICAyIGZv cmNlcyBsb2dnaW5nIG9mIGFsbCBzdWNjZXNzZnVsIGRpYWxvdXQgY2FsbHMgKGUuZy4gZm9yIGNo ZWNraW5nCisgICBhZ2FpbnN0IG9yIHBob25lIGJpbGxzKSwgYW5kIGxldmVsIDMgcmVjb3JkcyBh bGwgY29ubmVjdGlvbnMgKFNFVCBMSU5FCisgICBvciBTRVQgSE9TVCAvIFRFTE5FVCAvIFJMT0dJ TiwgZXRjKSBzbyB5b3UgY2FuIHNlZSB3aG8gaXMgY29ubmVjdGluZworICAgb3V0IGZyb20geW91 ciBzeXN0ZW0sIGFuZCB0byB3aGVyZSwgZS5nLiBmb3Igc2VjdXJpdHkgYXVkaXRpbmcuCisKKyAg IExldmVsIDIgYW5kIDMgcmVjb3JkcyBhcmUgZXF1aXZhbGVudCB0byB0aG9zZSBpbiB0aGUgY29u bmVjdGlvbiBsb2c7CisgICBzZWUgdGhlIFszNjFdQy1LZXJtaXQgNy4wIFN1cHBsZW1lbnQpIGZv ciBhIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIHRoZQorICAgY29ubmVjdGlvbiBsb2cuCisKKzE2 LiBCVUlMRElORyBTRUNVUkUgVkVSU0lPTlMgT0YgQy1LRVJNSVQgOC4wCisKKyAgIFsgWzM2Ml1U b3AgXSBbIFszNjNdQ29udGVudHMgXSBbIFszNjRdTmV4dCBdIFsgWzM2NV1QcmV2aW91cyBdCisK KyAgIEMtS2VybWl0IDcuMCBhbmQgbGF0ZXIgbWF5IGJlIGJ1aWx0IHdpdGggS2VyYmVyb3MoVE0p IGFuZC9vciBTUlAoVE0pCisgICAoU2VjdXJlIFJlbW90ZSBQYXNzd29yZCkgYW5kL29yIFNTTC9U TFMgc2VjdXJpdHkgZm9yIHN0cm9uZworICAgYXV0aGVudGljYXRpb24gYW5kIGVuY3J5cHRpb24g b2YgSW50ZXJuZXQgY29ubmVjdGlvbnMuIFRoZXNlIHNlY3VyaXR5CisgICBtZXRob2RzIHJlcXVp cmUgZXh0ZXJuYWwgbGlicmFyaWVzIHRoYXQsIGluIHRoZWlyIGJpbmFyeSBmb3JtcywgYXJlCisg ICByZXN0cmljdGVkIGZyb20gZXhwb3J0IGJ5IFVTQSBsYXcuIFNlZSB0aGUgWzM2Nl1LZXJtaXQg U2VjdXJpdHkKKyAgIFJlZmVyZW5jZSkgZm9yIGRldGFpbHMuIEMtS2VybWl0IGJpbmFyaWVzIHRo ZW1zZWx2ZXMgYXJlIGxpa2V3aXNlCisgICByZXN0cmljdGVkOyB0aGUgQy1LZXJtaXQgYmluYXJp ZXMgdGhhdCBhcmUgYXZhaWxhYmxlIGZvciBwdWJsaWMKKyAgIGRvd25sb2FkIG9uIHRoZSBJbnRl cm5ldCBhcmUgbm90IGFsbG93ZWQgdG8gY29udGFpbiB0aGUgc2VjdXJpdHkKKyAgIG9wdGlvbnMu CisKKyAgIFNhbXBsZSBtYWtlZmlsZSBlbnRyaWVzIGFyZSBwcm92aWRlZCBmb3IgTGludXggYW5k IG1hbnkgb3RoZXIgb3BlcmF0aW5nCisgICBzeXN0ZW1zLiBBIGxpc3Qgb2Ygc2VjdXJlIG1ha2Vm aWxlIGVudHJpZXMgaXMgaW5jbHVkZWQgaW4gdGhlIE1ha2VmaWxlLgorICAgQ29tcGxldGUgaW5z dHJ1Y3Rpb25zIG9uIGJ1aWxkaW5nIEMtS2VybWl0IDguMCB3aXRoIE1JVCBLZXJiZXJvczsKKyAg IFNlY3VyZSBSZW1vdGUgUGFzc3dvcmQ7IGFuZC9vciBPcGVuU1NMIGNhbiBiZSBmb3VuZCBpbiB0 aGUgWzM2N11LZXJtaXQKKyAgIFNlY3VyaXR5IFJlZmVyZW5jZS4KKworICAgU1NML1RMUyBhbmQg S2VyYmVyb3MgYnVpbGRzIGFyZSBpbmNyZWFzaW5nbHkgcHJvYmxlbWF0aWMgd2l0aCB0aGUKKyAg ICJkZXByZWNhdGlvbiIgb2YgREVTLiBUaGVyZSBpcyBjb2RlIHRvIGRldGVjdCB0aGUgcHJlc2Vu Y2Ugb3IgYWJzZW5jZQorICAgb2YgREVTIGluIHRoZSBPcGVuU1NMIGJ1aWxkcywgYnV0IGl0IGRv ZXNuJ3QgYWx3YXlzIHdvcmsgYmVjYXVzZQorICAgc29tZXRpbWVzIHRoZSBTU0wgbGlicmFyaWVz IGFyZSBwcmVzZW50IGJ1dCByb3V0aW5lcyBhcmUgbWlzc2luZyBmcm9tCisgICB0aGVtLgorCisg ICAgICogRmlyc3Qgb2YgYWxsIHJlbWVtYmVyIHRoYXQgaWYgeW91ciBTU0wgYW5kL29yIEtlcmJl cm9zIGhlYWRlciBmaWxlcworICAgICAgIGFuZCBsaWJyYXJpZXMgYXJlIG5vdCBpbiB0aGUgZGVm YXVsdCBwbGFjZSwgeW91J2xsIG5lZWQgdG8gb3ZlcnJpZGUKKyAgICAgICB0aGUgYXNzdW1lZCBw YXRocy4gVG8gZmluZCBvdXQgd2hhdCB0aGUgZGVmYXVsdCBwbGFjZXMgYXJlIHR5cGUKKyAgICAg ICAibWFrZSBzaG93IiwgZS5nLjoKKworW34va2VybWl0XSBtYWtlIHNob3cKK3ByZWZpeD0vdXNy L2xvY2FsCitzcnByb290PS91c3IvbG9jYWwKK3NzbHJvb3Q9L3Vzci9sb2NhbAorbWFucm9vdD0v dXNyL2xvY2FsCitLNExJQj0tTC91c3Iva2VyYmVyb3MvbGliCitLNElOQz0tSS91c3Iva2VyYmVy b3MvaW5jbHVkZQorSzVMSUI9LUwvdXNyL2tlcmJlcm9zL2xpYgorSzVJTkM9LUkvdXNyL2tlcmJl cm9zL2luY2x1ZGUKK1NSUExJQj0tTC91c3IvbG9jYWwvbGliCitTUlBJTkM9LUkvdXNyL2xvY2Fs L2luY2x1ZGUKK1NTTExJQj0tTC91c3IvbG9jYWwvc3NsL2xpYgorU1NMSU5DPS1JL3Vzci9sb2Nh bC9zc2wvaW5jbHVkZQorW34va2VybWl0XQorCisgICAgICogWW91IGNhbiBvdmVycmlkZSBhbnkg b3IgYWxsIG9mIHRoZXNlIGJ5IHB1dHRpbmcgYXNzaWdubWVudHMgb24gdGhlCisgICAgICAgJ21h a2UnIGNvbW1hbmQgbGluZTsgZXhhbXBsZXM6CisKK21ha2UgbGludXgra3JiNSBcCisgIks1SU5D PS1JL3Vzci9pbmNsdWRlLyIgXAorICJLNUxJQj0tTC91c3IvbGliNjQvIgorCittYWtlIHNvbGFy aXM5Zytzc2wgXAorICAiU1NMTElCPS1ML29wdC9vcGVuc3NsLTAuOS44cS9saWIiIFwKKyAgIlNT TElOQz0tSS9vcHQvb3BlbnNzbC0wLjkuOHEvaW5jbHVkZSIKKworICAgICAgIE9yIGJ5IHNldHRp bmcgYW5kIGV4cG9ydGluZyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgcHJpb3IgdG8gZ2l2aW5nCisg ICAgICAgdGhlICdtYWtlJyBjb21tYW5kLCBhcyBpbiB0aGlzIGV4YW1wbGUgaW4gd2hpY2ggKGFm dGVyIEJldGEuMDEgd2FzCisgICAgICAgdXBsb2FkZWQpIEMtS2VybWl0IHdhcyBzdWNjZXNzZnVs bHkgbGlua2VkIHdpdGggT3BlblNTTCAxLjAuMGQsCisgICAgICAgd2hpY2ggd2FzIGluc3RhbGxl ZCBhbG9uZ3NpZGUgT3BlblNTTCAwLjkuOHIgb24gdGhlIHNhbWUgY29tcHV0ZXIuCisgICAgICAg Tm90ZSB0aGUgdXNlIG9mIHRoZSAnLWknIG9wdGlvbiBpbnN0ZWFkIG9mICctSScgdG8gZm9yY2Ug Z2NjIHRvCisgICAgICAgaW5jbHVkZSB0aGUgcmlnaHQgaGVhZGVyIGZpbGVzICh0aGFua3MgdG8g TmVsc29uIEJlZWJlIGZvciB0aGlzKToKKworZXhwb3J0IFBBVEg9L3Vzci9iaW46JFBBVEgKK2V4 cG9ydCBTU0xJTkM9LWlzeXN0ZW0vdXNyL2luY2x1ZGUKK2V4cG9ydCAiU1NMTElCPS1ML3Vzci9s aWIgLVdsLC1ycGF0aCwvdXNyL2xpYiIKK21ha2UgbGludXgrc3NsCisKKyAgICAgICAtaSBpcyBl eHBsYWluZWQgaW4gJ21hbiBnY2MnOyB0aGVyZSBpcyBhIGNoYW5nZSBpbiB3aGF0IC1JIGRvZXMK KyAgICAgICB0aGF0IGNvdWxkIGhhdmUgcmFtaWZpY2F0aW9ucyBmb3IgbWFueSBtYWtlZmlsZSB0 YXJnZXRzLCBub3QganVzdAorICAgICAgIEtlcm1pdC4gQW5kIC1XbCBhbmQgLXJwYXRoIGFyZSBl eHBsYWluZWQgaW4gJ21hbiBsZCc7IHRoZSBpZGVhIGlzCisgICAgICAgYnVpbGQgYSBiaW5hcnkg ZnJvbSB3aGljaCB1c2VmdWwgcmVwb3J0cyBjYW4gYmUgb2J0YWluZWQgd2l0aCBsZGQuCisgICAg ICogQnVpbGRpbmcgd2l0aCBPcGVuU1NMIHZlcnNpb25zIHByaW9yIHRvIDAuOS43IGRvZXNuJ3Qg d29yaywgZXZlbgorICAgICAgIHRob3VnaCBDLUtlcm1pdCBpcyBkZXNpZ25lZCB0byB3b3JrIHdp dGggYm90aCB0aGUgb2xkIGFuZCBuZXcKKyAgICAgICB2ZXJzaW9ucy4gVGhpcyBjb3VsZCBwcm9i YWJseSBiZSBmaXhlZCBpZiBhbnlib2R5IGNhcmVzLgorICAgICAqIElmIGEgS2VyYmVyb3Mgb3Ig U1NMIGJ1aWxkIGZhaWxzIGF0IGxpbmsgdGltZSBiZWNhdXNlCisgICAgICAgZGVzX2VjYjNfZW5j cnlwdCwgZGVzX3JhbmRvbV9zZWVkLCBhbmQvb3IgZGVzX3NldF9vZGRfcGFyaXR5IGNvbWUKKyAg ICAgICB1cCBtaXNzaW5nLCByZWRvIHRoZSBidWlsZCB3aXRoIC1VQ0tfREVTOgorCittYWtlIG5l dGJzZCtrcmI1K3NzbCBcCisgIks1SU5DPS1JL3Vzci9sb2NhbC9pbmNsdWRlIiBcCisgIks1TElC PS1ML3Vzci9sb2NhbC9rZXJibGliIiBLRkxBR1M9LVVDS19ERVMKKworICAgICAgIEkgc3VwcG9z ZSBhbGwgdGhlIFNTTCBhbmQgS2VyYmVyb3MgdGFyZ2V0cyBjb3VsZCBiZSByZWNvZGVkIHRvCisg ICAgICAgZmlndXJlIHRoaXMgb3V0IGF1dG9tYXRpY2FsbHkgKGkuZS4gdGhhdCBERVMgaXMgaW5z dGFsbGVkIGJ1dCB3aXRoCisgICAgICAgc29tZSBlbnRyeSBwb2ludHMgbWlzc2luZyksIGJ1dCBp dCB3b3VsZG4ndCBiZSBwcmV0dHkuCisgICAgICogRGlmZmVyZW50IEtlcmJlcm9zIGFuZCBPcGVu U1NMIGRpc3RyaWJ1dGlvbnMgY2FuIGJlIGluc3RhbGxlZCB3aXRoCisgICAgICAgZGlmZmVyZW50 IG9wdGlvbnM7IGNlcnRhaW4gbGlicmFyaWVzIG1pZ2h0IGJlIG1pc3Npbmcgb3IgbmFtZWQKKyAg ICAgICBkaWZmZXJlbnRseSAoZm9yIGV4YW1wbGUsIGxpYmdzc2FwaSB2cyBsaWJnc3NhcGlfa3Ji NSkuIFNvbWUsIGJ1dAorICAgICAgIG5vdCBhbGwsIG9mIHRoZSBDLUtlcm1pdCBtYWtlZmlsZSB0 YXJnZXRzIGhhdmUgYmVlbiBmaXhlZCB0byB0YWtlCisgICAgICAgc29tZSBvZiB0aGVzZSB2YXJp YXRpb25zIGludG8gYWNjb3VudCBieSB0ZXN0aW5nIGZvciB0aGVtLCBtb3N0CisgICAgICAgbm90 YWJseSB0aGUgbGludXggb25lcywgbGludXgrc3NsLCBsaW51eCtrcmI1LCBhbmQgbGludXgra3Ji NStzc2wuCisgICAgICAgUHJvYmFibHkgZXZlcnkgdGFyZ2V0IHRoYXQgYnVpbGRzIHdpdGggT3Bl blNTTCBvciBLZXJiZXJvcyBuZWVkcworICAgICAgIHRoZSBzYW1lIHRyZWF0bWVudCBidXQgSSB3 b24ndCBoYXZlIHRpbWUuCisgICAgICogV2h5IGRvZXNuJ3QgQy1LZXJtaXQganVzdCB1c2UgQXV0 b2NvbmY/IE1haW5seSBiZWNhdXNlIHRoZSBtYWtlZmlsZQorICAgICAgIGlzIGZ1bGwgb2YgdGFy Z2V0cyBmb3IgcGxhdGZvcm1zIHRoYXQgZG9uJ3QgaGF2ZSBBdXRvY29uZiBvciBhbnkKKyAgICAg ICBvdGhlciB0b29sIGxpa2UgaXQuIChBbm90aGVyIHJlYXNvbiBpcyB0aGF0IEkndmUgYWx3YXlz IHByZWZlcnJlZAorICAgICAgIHRoYXQgS2VybWl0IGhhdmUgdGhlIGxlYXN0IGRlcGVuZGVuY2ll cyBwb3NzaWJsZSBvbiBleHRlcm5hbAorICAgICAgIHRvb2xzZXRzLikgUGVyaGFwcyBjZXJ0YWlu IHRhcmdldHMgY291bGQgYmUgY29udmVydGVkIHRvIHVzZSB0aGVtLAorICAgICAgIGVzcGVjaWFs bHkgTGludXggYmVjYXVzZSB0aGVyZSBhcmUgc28gbWFueSB2YXJpYXRpb25zIGFtb25nCisgICAg ICAgZGlzdHJpYnV0aW9ucyBhbmQgdmVyc2lvbnMuIEFueWJvZHkgd2hvIHdhbnRzIHRvIG1ha2Us IHNheSwgYW4KKyAgICAgICBBdXRvY29uZi1iYXNlZCBMaW51eCB0YXJnZXQsIGJlIG15IGd1ZXN0 LCBidXQgYmVhciBpbiBtaW5kIHRoYXQgb25lCisgICAgICAgTGludXggdGFyZ2V0IGlzIHN1cHBv c2VkIHRvIHdvcmsgZm9yIGFsbCB2ZXJzaW9ucyBhbmQgZGlzdHJpYnV0aW9ucworICAgICAgIG9m IExpbnV4IG9uIGFsbCBwbGF0Zm9ybXMuIFdlbGwsIG9uZSB0YXJnZXQgZm9yIExpbnV4IGJ5IGl0 c2VsZiwKKyAgICAgICBhbm90aGVyIGZvciBMaW51eCB3aXRoIE9wZW5TU0wsIGFub3RoZXIgZm9y IExpbnV4IHdpdGggS2VyYmVyb3MgNSwKKyAgICAgICBhbmQgYW5vdGhlciBmb3IgTGludXggd2l0 aCBLZXJiZXJvcyA1IGFuZCBPcGVuU1NMLiBFYWNoIG9mIHRoZXNlIGlzCisgICAgICAgc3VwcG9z ZWQgdG8gd29yayBvbiBhbnkgTGludXggdmVyc2lvbiB3aXRoIGFueSB2ZXJzaW9uIG9mCisgICAg ICAgS2VyYmVyb3MgNSBvciBPcGVuU1NMLgorCisgICBBbHNvIG5vdGUgdGhhdCBLZXJiZXJvcyBz dXBwb3J0IGlzIGZvciB0aGUgTUlUIHZlcnNpb24gb25seSwgSGVpbWRhbAorICAgYW5kIG90aGVy cyBhcmUgbm90IHN1cHBvcnRlZCAobmV2ZXIgaGF2ZSBiZWVuKS4gT2YgY291cnNlIGFueWJvZHkg Y2FuCisgICBwaXRjaCBpbiBhbmQgYWRkIG9yIGltcHJvdmUgc3VwcG9ydCBmb3Igd2hhdGV2ZXIg dGhleSB3YW50LgorCisxNy4gSU5TVEFMTElORyBDLUtFUk1JVCBBUyBBTiBTU0ggU0VSVkVSIFNV QlNZU1RFTQorCisgICBbIFszNjhdVG9wIF0gWyBbMzY5XUNvbnRlbnRzIF0gWyBbMzcwXVByZXZp b3VzIF0KKworICAgVGhpcyByZXF1aXJlcyBDLUtlcm1pdCA4LjAuMjA2IG9yIGxhdGVyIGFuZCBh biBTU0ggdjIgc2VydmVyLiBJZiB5b3UKKyAgIGxpc3QgQy1LZXJtaXQgYXMgYSBTdWJzeXN0ZW0g aW4gdGhlIFNTSCB2MiBzZXJ2ZXIgY29uZmlndXJhdGlvbiBmaWxlCisgICAoYXMsIGZvciBleGFt cGxlLCBTRlRQIGlzIGxpc3RlZCksIHVzZXJzIGNhbiBtYWtlIFNTSCBjb25uZWN0aW9ucworICAg ZGlyZWN0IHRvIGEgS2VybWl0IHNlcnZlciBhcyBleHBsYWluZWQgaGVyZToKKworWzM3MV1odHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvc2tlcm1pdC5odG1sCisKKyAgIFRoZSBuYW1lIGFu ZCBsb2NhdGlvbiBvZiB0aGUgU1NIIHNlcnZlciBjb25maWd1cmF0aW9uIGZpbGUgZGVwZW5kcyBv bgorICAgeW91ciBwbGF0Zm9ybSwgd2hpY2ggU1NIIHByb2R1Y3QocykgeW91IGhhdmUsIGV0Yy4g Qy1LZXJtaXQgaXRzZWxmIG11c3QKKyAgIGJlIHJlZmVycmVkIHRvIGluIHRoaXMgZmlsZSBhcyAi a2VybWl0LXNzaHN1YiIuIE9uIHRoZSBob3N0LCBpbnN0YWxsCisgICB0aGUgQy1LZXJtaXQgOC4w LjIxMSBiaW5hcnkgaW4gdGhlIG5vcm1hbCB3YXkuIFRoZW4sIGluIHRoZSBzYW1lCisgICBkaXJl Y3RvcnkgYXMgdGhlIEMtS2VybWl0IGJpbmFyeSwgbWFrZSBhIHN5bWJvbGljIGxpbms6CisKK2xu IC1zIGtlcm1pdCBrZXJtaXQtc3Noc3ViCisKKyAgIChOb3RlOiB0aGUgIm1ha2UgaW5zdGFsbCIg bWFrZWZpbGUgdGFyZ2V0IGRvZXMgdGhpcyBmb3IgeW91LikgVGhlbiBpbgorICAgdGhlIHNzaGQg Y29uZmlndXJhdGlvbiBmaWxlLCBhZGQgYSBsaW5lOgorCitTdWJzeXN0ZW0gIGtlcm1pdCAgIC9z b21lL3BhdGgva2VybWl0LXNzaHN1YgorCisgICAod2hlcmUgL3NvbWUvcGF0aCBpcyB0aGUgZnVs bHkgc3BlY2lmaWVkIGRpcmVjdG9yeSB3aGVyZSB0aGUgc3ltbGluaworICAgaXMuKSBUaGlzIGlz IHNpbWlsYXIgdG8gdGhlIGxpbmUgdGhhdCBzZXRzIHVwIHRoZSBTRlRQIHN1YnN5c3RlbS4KKyAg IEV4YW1wbGU6CisKK1N1YnN5c3RlbSAgIHNmdHAgICAgL3Vzci9sb2NhbC9saWJleGVjL3NmdHAt c2VydmVyCitTdWJzeXN0ZW0gICBrZXJtaXQgIC91c3IvbG9jYWwvYmluL2tlcm1pdC1zc2hzdWIK KworICAgVGhlIG1lY2hhbmljcyBtaWdodCB2YXJ5IGZvciBvdGhlciBTU0ggc2VydmVyczsgIm1h biBzc2hkIiBmb3IgZGV0YWlscy4KKyAgIFRoZSBtZXRob2Qgc2hvd24gaGVyZSBpcyB1c2VkIGJl Y2F1c2UgdGhlIE9wZW5TU0ggc2VydmVyIGRvZXMgbm90CisgICBwZXJtaXQgdGhlIHN1YnN5c3Rl bSBpbnZvY2F0aW9uIHRvIGluY2x1ZGUgY29tbWFuZC1saW5lIG9wdGlvbnMuCisgICBDLUtlcm1p dCB3b3VsZCBoYXZlIG5vIHdheSBvZiBrbm93aW5nIHRoYXQgaXQgc2hvdWxkIGVudGVyIFNlcnZl ciBtb2RlCisgICBpZiBpdCB3ZXJlIG5vdCBjYWxsZWQgYnkgYSBzcGVjaWFsIG5hbWUuCisKKyAg IFsgWzM3Ml1Ub3AgXSBbIFszNzNdQ29udGVudHMgXSBbIFszNzRdQy1LZXJtaXQgSG9tZSBdIFsg WzM3NV1DLUtlcm1pdAorICAgOS4wIE92ZXJ2aWV3IF0gWyBbMzc2XUtlcm1pdCBIb21lIF0KKyAg ICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fCisKKworICAgIEMtS2VybWl0IDkuMCBVbml4IEluc3RhbGxhdGlvbiBJbnN0 cnVjdGlvbnMgLyBUaGUgS2VybWl0IFByb2plY3QgLworICAgIENvbHVtYmlhIFVuaXZlcnNpdHkg LyAzMCBKdW5lIDIwMTEKKworUmVmZXJlbmNlcworCisgICAxLiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS8KKyAgIDIuIG1haWx0bzprZXJtaXRAY29sdW1iaWEuZWR1CisgICAzLiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRtbAorICAgNC4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2s5NS5odG1sCisgICA1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tlcm1pdC5odG1sCisgICA2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tz Y3JpcHRzLmh0bWwKKyAgIDcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9jdXJyZW50 Lmh0bWwKKyAgIDguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC93aGF0c25ldy5odG1s CisgICA5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvZmFxLmh0bWwKKyAgMTAuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9zdXBwb3J0Lmh0bWwKKyAgMTEuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCNjb250ZW50cworICAxMi4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAorICAxMy4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0bWwKKyAgMTQuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja3VpbnMuaHRtbAorICAxNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrdWlucy5odG1sI3gwCisgIDE2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2t1aW5zLmh0bWwjeDEKKyAgMTcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vp bnMuaHRtbCN4MgorICAxOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5o dG1sI3gzCisgIDE5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwj eDQKKyAgMjAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4NQor ICAyMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g2CisgIDIy LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDcKKyAgMjMuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4OAorICAyNC4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g5CisgIDI1LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDEwCisgIDI2LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDExCisgIDI3LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDEyCisgIDI4LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDEzCisgIDI5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2t1aW5zLmh0bWwjeDE0CisgIDMwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t1aW5zLmh0bWwjeDE1CisgIDMxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2t1aW5zLmh0bWwjeDE2CisgIDMyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2t1aW5zLmh0bWwjeDE3CisgIDMzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1 aW5zLmh0bWwjdG9wCisgIDM0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5z Lmh0bWwjY29udGVudHMKKyAgMzUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vp bnMuaHRtbCN4MQorICAzNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5o dG1sCisgIDM3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjYndyLmh0bWwKKyAg MzguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbAorICAzOS4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY3BsbS5odG1sCisgIDQwLiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDIKKyAgNDEuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4MworICA0Mi4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g0CisgIDQzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2t1aW5zLmh0bWwjdG9wCisgIDQ0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t1aW5zLmh0bWwjY29udGVudHMKKyAgNDUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja3VpbnMuaHRtbCN4MgorICA0Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrdWlucy5odG1sI3gwCisgIDQ3LiBmdHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9h cmNoaXZlcy9ja3UyMTEudGFyLloKKyAgNDguIGZ0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2FyY2hpdmVzL2NrdTIxMS50YXIuZ3oKKyAgNDkuIGh0dHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1 L2Z0cC9hcmNoaXZlcy9ja3UyMTEudGFyLloKKyAgNTAuIGh0dHA6Ly9rZXJtaXQuY29sdW1iaWEu ZWR1L2Z0cC9hcmNoaXZlcy9ja3UyMTEudGFyLmd6CisgIDUxLiBmdHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9hcmNoaXZlcy9ja3UyMTEudGFyCisgIDUyLiBodHRwOi8va2VybWl0LmNvbHVt YmlhLmVkdS9mdHAvYXJjaGl2ZXMvY2t1MjExLnRhcgorICA1My4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g3CisgIDU0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2t1aW5zLmh0bWwjeDUKKyAgNTUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja3VpbnMuaHRtbCN4NQorICA1Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrdWlucy5odG1sI3gxNgorICA1Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr dWlucy5odG1sI3RvcAorICA1OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlu cy5odG1sI2NvbnRlbnRzCisgIDU5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1 aW5zLmh0bWwjeDMKKyAgNjAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMu aHRtbCN4MQorICA2MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1s I3g1CisgIDYyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjWDEw CisgIDYzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDExCisg IDY0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDEwCisgIDY1 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDMKKyAgNjYuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9jazgwcGFja2FnZXMuaHRtbAorICA2Ny4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3gxMAorICA2OC4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3RvcAorICA2OS4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI2NvbnRlbnRzCisgIDcwLiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDQKKyAgNzEuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4MgorICA3Mi4gZnRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvYmluLworICA3My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrODBiaW5hcmllcy5odG1sCisgIDc0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2t1aW5zLmh0bWwjeDcKKyAgNzUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vp bnMuaHRtbCNidWlsZAorICA3Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlu cy5odG1sI3g1CisgIDc3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0 bWwjeDQKKyAgNzguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2ZhcS5odG1sI3Zl cnNpb24KKyAgNzkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4 NAorICA4MC4gbWFpbHRvOmtlcm1pdEBjb2x1bWJpYS5lZHUKKyAgODEuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN0b3AKKyAgODIuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCNjb250ZW50cworICA4My4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g1CisgIDg0LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDMKKyAgODUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja3VpbnMuaHRtbCN4OAorICA4Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrdWlucy5odG1sI3g5CisgIDg3LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1p dC9jLWtlcm1pdC9tYWtlZmlsZQorICA4OC4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJt aXQvYy1rZXJtaXQvY2twa2VyLm1rCisgIDg5LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tl cm1pdC9jLWtlcm1pdC9ja3Vic2QubWFrCisgIDkwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t1aW5zLmh0bWwjeDUKKyAgOTEuIG1haWx0bzprZXJtaXQtc3VwcG9ydEBjb2x1bWJp YS5lZHUKKyAgOTIuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L21h a2VmaWxlCisgIDkzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwj eDcKKyAgOTQuIG1haWx0bzprZXJtaXQtc3VwcG9ydEBjb2x1bWJpYS5lZHUKKyAgOTUuIGZ0cDov L2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L21ha2VmaWxlCisgIDk2LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDUuNAorICA5Ny4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3gxMAorICA5OC4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3gxMQorICA5OS4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g1CisgMTAwLiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvaWtzZC5odG1sCisgMTAxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t1aW5zLmh0bWwjdG9wCisgMTAyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2t1aW5zLmh0bWwjY29udGVudHMKKyAxMDMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja3VpbnMuaHRtbCN4NC4xCisgMTA0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tjY2ZnLmh0bWwKKyAxMDUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vp bnMuaHRtbCN4NC4xCisgMTA2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5z Lmh0bWwjeDQuMgorIDEwNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5o dG1sI3g0LjMKKyAxMDguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRt bCN4NC40CisgMTA5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwj eDQuNQorIDExMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5odG1sCisg MTExLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwjeDgKKyAxMTIu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pa3NkLmh0bWwKKyAxMTMuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pa3NkLmh0bWwKKyAxMTQuIGZ0cDovL2tlcm1pdC5jb2x1 bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrdWZpby5jCisgMTE1LiBmdHA6Ly9rZXJtaXQuY29s dW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja3VmaW8uYworIDExNi4gbWFpbHRvOmtlcm1pdC1z dXBwb3J0QGNvbHVtYmlhLmVkdQorIDExNy4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJt aXQvYy1rZXJtaXQvY2tjbWFpLmMKKyAxMTguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja3VpbnMuaHRtbCN4MTUKKyAxMTkuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0 L2Mta2VybWl0L2NrdXRpby5jCisgMTIwLiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1p dC9jLWtlcm1pdC9ja3VmaW8uYworIDEyMS4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJt aXQvYy1rZXJtaXQvY2t1dGlvLmMKKyAxMjIuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2Vy bWl0L2Mta2VybWl0L2NrdWZpby5jCisgMTIzLiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tl cm1pdC9jLWtlcm1pdC9ja2NuZXQuYworIDEyNC4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9r ZXJtaXQvYy1rZXJtaXQvY2tjbmV0LmMKKyAxMjUuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUv a2VybWl0L2Mta2VybWl0L2NrdXRpby5jCisgMTI2LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1 L2tlcm1pdC9jLWtlcm1pdC9ja2N1bmkuYworIDEyNy4gbWFpbHRvOmtlcm1pdC1zdXBwb3J0QGNv bHVtYmlhLmVkdQorIDEyOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5o dG1sI3RvcAorIDEyOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1s I2NvbnRlbnRzCisgMTMwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0 bWwjeDQKKyAxMzEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4 NC4yCisgMTMyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDQu MAorIDEzMy4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvbWFrZWZp bGUKKyAxMzQuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrdWJ3 ci50eHQKKyAxMzUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbAor IDEzNi4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2t3YXJ0LmMK KyAxMzcuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrY3Byby53 CisgMTM4LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja2Nwcm8u YworIDEzOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3RvcAor IDE0MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI2NvbnRlbnRz CisgMTQxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDQKKyAx NDIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4NC4zCisgMTQz LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDQuMQorIDE0NC4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g1CisgMTQ1LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjdG9wCisgMTQ2LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjY29udGVudHMKKyAxNDcuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4NAorIDE0OC4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g0LjQKKyAxNDkuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4NC4yCisgMTUwLiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjdG9wCisgMTUxLiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjY29udGVudHMKKyAxNTIuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4NAorIDE1My4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g0LjUKKyAxNTQuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4NC4zCisgMTU1LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEu ZWR1L2tlcm1pdC9jLWtlcm1pdC9ja3BrZXIubWsKKyAxNTYuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN0b3AKKyAxNTcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja3VpbnMuaHRtbCNjb250ZW50cworIDE1OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrdWlucy5odG1sI3g0CisgMTU5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t1aW5zLmh0bWwjeDQuNAorIDE2MC4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9r ZXJtaXQvYy1rZXJtaXQvbWFrZWZpbGUKKyAxNjEuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUv a2VybWl0L2Mta2VybWl0L21ha2VmaWxlCisgMTYyLiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1 L2tlcm1pdC9jLWtlcm1pdC9ja2Nwcm8udworIDE2My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrdWlucy5odG1sI3RvcAorIDE2NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrdWlucy5odG1sI2NvbnRlbnRzCisgMTY1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t1aW5zLmh0bWwjeDYKKyAxNjYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja3VpbnMuaHRtbCN4NAorIDE2Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr dWlucy5odG1sI3g1LjEKKyAxNjguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vp bnMuaHRtbCN4NS4yCisgMTY5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5z Lmh0bWwjeDUuMworIDE3MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5o dG1sI3g1LjQKKyAxNzEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC8KKyAxNzIuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4NS40CisgMTczLiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDUuMworIDE3NC4gZnRwOi8v a2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvQ09QWUlORy5UWFQKKyAxNzUuIGZ0 cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrZXJtaXQuaW5pCisgMTc2 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDUuMQorIDE3Ny4g ZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2tlcm1vZC5pbmkKKyAx NzguIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrZXJtaXQ3MC50 eHQKKyAxNzkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9jazYwbWFudWFsLmh0bWwK KyAxODAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbAorIDE4 MS4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2tlcm1pdDgwLnR4 dAorIDE4Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrNjBtYW51YWwuaHRtbAor IDE4My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sCisgMTg0 LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja2VybWl0OTAudHh0 CisgMTg1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2s2MG1hbnVhbC5odG1sCisg MTg2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDkwLmh0bWwKKyAxODcu IGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrY2J3ci50eHQKKyAx ODguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Nid3IuaHRtbAorIDE4OS4gZnRw Oi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2t1YndyLnR4dAorIDE5MC4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sCisgMTkxLiBmdHA6Ly9r ZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja3VpbnMudHh0CisgMTkyLiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwKKyAxOTMuIGZ0cDovL2tlcm1p dC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrY2NmZy50eHQKKyAxOTQuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NjZmcuaHRtbAorIDE5NS4gZnRwOi8va2VybWl0LmNv bHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2tjcGxtLnR4dAorIDE5Ni4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrY3BsbS5odG1sCisgMTk3LiBmdHA6Ly9rZXJtaXQuY29sdW1i aWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9jYV9jZXJ0cy5wZW0KKyAxOTguIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4MTYiCisgMTk5LiBmdHA6Ly9rZXJtaXQuY29s dW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9tYWtlZmlsZQorIDIwMC4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g/CisgMjAxLiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDExCisgMjAyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2t1aW5zLmh0bWwjeDUuMgorIDIwMy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrZXJtaXQuaHRtbCNkb3dubG9hZAorIDIwNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrYmluYXJpZXMuaHRtbAorIDIwNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrZXJtaXQuaHRtbCNkb3dubG9hZAorIDIwNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrdWlucy5odG1sI3RvcAorIDIwNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrdWlucy5odG1sI2NvbnRlbnRzCisgMjA4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2t1aW5zLmh0bWwjeDcKKyAyMDkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja3VpbnMuaHRtbCN4NQorIDIxMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrdWlucy5odG1sI3RvcAorIDIxMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr dWlucy5odG1sI2NvbnRlbnRzCisgMjEyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2t1aW5zLmh0bWwjeDgKKyAyMTMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vp bnMuaHRtbCN4NgorIDIxNC4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJt aXQvY2t1dGlvLmMKKyAyMTUuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2Vy bWl0L2NrdXRpby5jCisgMjE2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5z Lmh0bWwjeDQuMAorIDIxNy4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJt aXQvY2tjZGViLmgKKyAyMTguIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2Vy bWl0L2NrdWZpby5jCisgMjE5LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtl cm1pdC9ja3VmaW8uYworIDIyMC4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1r ZXJtaXQvY2t1dGlvLmMKKyAyMjEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vp bnMuaHRtbCN4MTAKKyAyMjIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NjZmcu aHRtbCN4MgorIDIyMy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5odG1s CisgMjI0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDQKKyAy MjUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4MTAKKyAyMjYu IGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrdXRpby5jCisgMjI3 LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja3V0aW8uYworIDIy OC4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2t1dGlvLmMKKyAy MjkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4OS40CisgMjMw LiBtYWlsdG86a2VybWl0LXN1cHBvcnRAY29sdW1iaWEuZWR1CisgMjMxLiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjdG9wCisgMjMyLiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjY29udGVudHMKKyAyMzMuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4OQorIDIzNC4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g3CisgMjM1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tjY2ZnLmh0bWwKKyAyMzYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2NjZmcuaHRtbAorIDIzNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlu cy5odG1sI3RvcAorIDIzOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5o dG1sI2NvbnRlbnRzCisgMjM5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5z Lmh0bWwjeDEwCisgMjQwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0 bWwjeDgKKyAyNDEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4 OS4xCisgMjQyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDku MS4xCisgMjQzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDku MS4yCisgMjQ0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDku MS4zCisgMjQ1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDku MgorIDI0Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g5LjMK KyAyNDcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4OS40Cisg MjQ4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDkuNQorIDI0 OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g5LjYKKyAyNTAu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4OS43CisgMjUxLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDkuOAorIDI1Mi4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g5LjkKKyAyNTMuIGZ0cDov L2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrdXRpby5jCisgMjU0LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjdG9wCisgMjU1LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDkKKyAyNTYuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCNjb250ZW50cworIDI1Ny4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g5LjIKKyAyNTguIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4OS4xLjEKKyAyNTkuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4OS4xLjIKKyAyNjAuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4OS4xLjMKKyAyNjEuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN0b3AKKyAyNjIuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCNjb250ZW50cworIDI2My4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g5CisgMjY0LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDkuMQorIDI2NS4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g5LjEuMworIDI2Ni4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g5LjEuMQorIDI2Ny4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrdWlucy5odG1sI3RvcAorIDI2OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrdWlucy5odG1sI2NvbnRlbnRzCisgMjY5LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDkKKyAyNzAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja3VpbnMuaHRtbCN4OS4xCisgMjcxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t1aW5zLmh0bWwjeDkuMgorIDI3Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrdWlucy5odG1sI3g5LjEuMgorIDI3My4gaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29u bGluZXB1YnMvMDA3OTA0OTc1LworIDI3NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrdWlucy5odG1sI3g5LjEuMQorIDI3NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrdWlucy5odG1sI3RvcAorIDI3Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr dWlucy5odG1sI2NvbnRlbnRzCisgMjc3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2t1aW5zLmh0bWwjeDkKKyAyNzguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vp bnMuaHRtbCN4OS4xCisgMjc5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5z Lmh0bWwjeDkuMworIDI4MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5o dG1sI3g5LjEKKyAyODEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRt bCN0b3AKKyAyODIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCNj b250ZW50cworIDI4My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1s I3g5CisgMjg0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDku NAorIDI4NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g5LjIK KyAyODYuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrdWZpby5j CisgMjg3LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja3V0aW8u YworIDI4OC4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2t1Zmlv LmMKKyAyODkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN0b3AK KyAyOTAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCNjb250ZW50 cworIDI5MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g5Cisg MjkyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDkuNQorIDI5 My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g5LjMKKyAyOTQu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9jYWJsZS5odG1sCisgMjk1LiBmdHA6Ly9r ZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja3V0aW8uYworIDI5Ni4gZnRwOi8v a2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2tjZGViLmgKKyAyOTcuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN0b3AKKyAyOTguIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCNjb250ZW50cworIDI5OS4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g5CisgMzAwLiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDkuNgorIDMwMS4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g5LjQKKyAzMDIuIGZ0cDovL2tlcm1pdC5j b2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrY2RlYi5oCisgMzAzLiBmdHA6Ly9rZXJtaXQu Y29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja3V1czMuYworIDMwNC4gZnRwOi8va2VybWl0 LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2t1dGlvLmMKKyAzMDUuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN0b3AKKyAzMDYuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCNjb250ZW50cworIDMwNy4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g5CisgMzA4LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDkuNworIDMwOS4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g5LjUKKyAzMTAuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN0b3AKKyAzMTEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja3VpbnMuaHRtbCNjb250ZW50cworIDMxMi4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrdWlucy5odG1sI3g5CisgMzEzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t1aW5zLmh0bWwjeDkuOAorIDMxNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrdWlucy5odG1sI3g5LjYKKyAzMTUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja3VpbnMuaHRtbCN0b3AKKyAzMTYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a3VpbnMuaHRtbCNjb250ZW50cworIDMxNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrdWlucy5odG1sI3g5CisgMzE4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1 aW5zLmh0bWwjeDkuOQorIDMxOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlu cy5odG1sI3g5LjcKKyAzMjAuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2Vy bWl0L2NrdXRpby5jCisgMzIxLiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtl cm1pdC9ja3V0aW8uYworIDMyMi4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1r ZXJtaXQvY2tjZGViLmgKKyAzMjMuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mt a2VybWl0L2NrdWZpby5jCisgMzI0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1 aW5zLmh0bWwjdG9wCisgMzI1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5z Lmh0bWwjY29udGVudHMKKyAzMjYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vp bnMuaHRtbCN4OQorIDMyNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5o dG1sI3gxMAorIDMyOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1s I3g5LjgKKyAzMjkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN0 b3AKKyAzMzAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCNjb250 ZW50cworIDMzMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3gx MQorIDMzMi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g5Cisg MzMzLiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja3V0aW8uYwor IDMzNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3gxMQorIDMz NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3RvcAorIDMzNi4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI2NvbnRlbnRzCisgMzM3 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDEyCisgMzM4LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDEwCisgMzM5LiBmdHA6 Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja3V0aW8uYworIDM0MC4gZnRw Oi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2t1ZmlvLmMKKyAzNDEuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN0b3AKKyAzNDIuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCNjb250ZW50cworIDM0My4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3gxMworIDM0NC4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3gxMQorIDM0NS4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3RvcAorIDM0Ni4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI2NvbnRlbnRzCisgMzQ3LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDE0CisgMzQ4LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDEyCisgMzQ5LiBmdHA6Ly9rZXJtaXQuY29s dW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja3Vid3IudHh0CisgMzUwLiBmdHA6Ly9rZXJtaXQu Y29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja3V0aW8uYworIDM1MS4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3RvcAorIDM1Mi4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI2NvbnRlbnRzCisgMzUzLiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDE1CisgMzU0LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDEzCisgMzU1LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjdG9wCisgMzU2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2t1aW5zLmh0bWwjY29udGVudHMKKyAzNTcuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4MTYKKyAzNTguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja3VpbnMuaHRtbCN4MTQKKyAzNTkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC91aWtzZC5odG1sI3g0LjIKKyAzNjAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC91aWtzZC5odG1sCisgMzYxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dDIuaHRtbAorIDM2Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1s I3RvcAorIDM2My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI2Nv bnRlbnRzCisgMzY0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwj eDE3CisgMzY1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDE1 CisgMzY2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvc2VjdXJpdHkuaHRtbAorIDM2 Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L3NlY3VyaXR5ODAuaHRtbAorIDM2OC4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3RvcAorIDM2OS4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI2NvbnRlbnRzCisgMzcwLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDE2CisgMzcxLiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvc2tlcm1pdC5odG1sCisgMzcyLiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjdG9wCisgMzczLiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjY29udGVudHMKKyAzNzQuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKKyAzNzUuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9jazkwdXBkYXRlcy5odG1sCisgMzc2LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvaW5kZXguaHRtbAoKZGlmZiAtLWdpdCBhL2NrZXJtaXQtOS4wLjMwMi1idWls ZC9ja2VybWl0LTkuMC4zMDIvY2t1a2VyLm5yIGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJt aXQtOS4wLjMwMi9ja3VrZXIubnIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u MDNiMzBlNwotLS0gL2Rldi9udWxsCisrKyBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0 LTkuMC4zMDIvY2t1a2VyLm5yCkBAIC0wLDAgKzEsMTgzMSBAQAorLlwiIEAoIykga2VybWl0LjEg OS4wLjMwMiAyMDExLzA4LzIwIENvbHVtYmlhIFVuaXZlcnNpdHkKKy5USCBLRVJNSVQgMSAiSlVM WSAyMDExIiAiVXNlciBNYW51YWxzIgorLm5hCisuU0ggTkFNRQora2VybWl0IFwtCisuQiBDXCho eUtlcm1pdCA5LjA6Cit0cmFuc3BvcnRcKGh5IGFuZCBwbGF0Zm9ybVwoaHlpbmRlcGVuZGVudAor aW50ZXJhY3RpdmUgYW5kIHNjcmlwdGFibGUgY29tbXVuaWNhdGlvbnMgc29mdHdhcmUuCisuSVAK KworVGhpcyBkb2N1bWVudCBpcyBpbnRlbmRlZCB0byBnaXZlIHRoZSBiZWdpbm5lciBzdWZmaWNp ZW50IGluZm9ybWF0aW9uIHRvCittYWtlIGJhc2ljIChpZiBub3QgYWR2YW5jZWQpIHVzZSBvZiBD XChoeUtlcm1pdCA5LjAuICBBbHRob3VnaCBpdCBtaWdodCBiZQorcmF0aGVyIGxvbmcgZm9yIGEg VW5peCBtYW51YWwgcGFnZSwgaXQncyBzdGlsbCBmYXIgc2hvcnRlciB0aGFuIHRoZQorQ1woaHlL ZXJtaXQgbWFudWFsLCB3aGljaCBzaG91bGQgYmUgY29uc3VsdGVkIGZvciBhZHZhbmNlZCB0b3Bp Y3Mgc3VjaCBhcworY3VzdG9taXphdGlvbiwgY2hhcmFjdGVyXChoeXNldHMsIHNjcmlwdGluZywg ZXRjLiBXZSBhbHNvIGF0dGVtcHQgdG8gcHJvdmlkZQorYSBjbGVhciBzdHJ1Y3R1cmFsIG92ZXJ2 aWV3IG9mIENcKGh5S2VybWl0J3MgbWFueSBjYXBhYmlsaXRpZXMsIGZ1bmN0aW9uYWwKK2FyZWFz LCBzdGF0ZXMsIGFuZCBtb2RlcyBhbmQgdGhlaXIgaW50ZXJyZWxhdGlvbiwgdGhhdCBzaG91bGQg YmUgaGVscGZ1bCB0bworYmVnaW5uZXJzIGFuZCB2ZXRlcmFucyBhbGlrZSwgYXMgd2VsbCBhcyB0 byB0aG9zZSB1cGdyYWRpbmcgdG8gdmVyc2lvbiA5LjAKK2Zyb20gZWFybGllciByZWxlYXNlcy4K Ky5QUAorVGhpcyBkb2N1bWVudCBpcyBhbHNvIGF2YWlsYWJsZSBhcyBhIFdlYiBwYWdlIGF0Ogor LklQCitodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbAorLlNIIERF U0NSSVBUSU9OCitDXChoeUtlcm1pdCBpcyBhbiBhbGxcKGh5cHVycG9zZSBjb21tdW5pY2F0aW9u cyBzb2Z0d2FyZSBwYWNrYWdlIGZyb20gdGhlIEtlcm1pdAorUHJvamVjdCBhdCBDb2x1bWJpYSBV bml2ZXJzaXR5IHRoYXQ6CisuUFAKKy5uZgorXChidQlJcyBwb3J0YWJsZSB0byBtYW55IHBsYXRm b3JtcywgVW5peCBhbmQgbm9uXChoeVVuaXggYWxpa2UuCisuYnIKK1woYnUJQ2FuIG1ha2UgYm90 aCBzZXJpYWwgYW5kIG5ldHdvcmsgY29ubmVjdGlvbnMuCisuYnIKK1woYnUJQ2FuIGNvbmR1Y3Qg aW50ZXJhY3RpdmUgdGVybWluYWwgc2Vzc2lvbnMgb3ZlciBpdHMgY29ubmVjdGlvbi4KKy5icgor XChidQlDYW4gdHJhbnNmZXIgdGV4dCBvciBiaW5hcnkgZmlsZXMgb3ZlciB0aGUgc2FtZSBjb25u ZWN0aW9uLgorLmJyCitcKGJ1CUNhbiBjb252ZXJ0IGNoYXJhY3RlciBzZXRzIGluIHRoZSB0ZXJt aW5hbCBzZXNzaW9uLgorLmJyCitcKGJ1CUNhbiBjb252ZXJ0IGNoYXJhY3RlciBzZXRzIGR1cmlu ZyB0ZXh0XChoeWZpbGUgZmlsZSB0cmFuc2Zlci4KKy5icgorXChidQlJcyBjdXN0b21pemFibGUg aW4gZXZlcnkgYXNwZWN0IG9mIGl0cyBvcGVyYXRpb24uCisuZmkKKy5QUAorQ1woaHlLZXJtaXQg aXMgYSBtb2RlbSBwcm9ncmFtLCBhIFRlbG5ldCBjbGllbnQsIGFuIFJsb2dpbiBjbGllbnQsIGFu IEZUUAorY2xpZW50LCBhbiBIVFRQIGNsaWVudCwgYW5kIG9uIHNlbGVjdGVkIHBsYXRmb3Jtcywg YWxzbyBhbiBYLjI1IGNsaWVudC4gSXQKK2NhbiBtYWtlIGl0cyBvd24gc2VjdXJlIEludGVybmV0 IGNvbm5lY3Rpb25zIHVzaW5nIElFVEZcKGh5YXBwcm92ZWQgc2VjdXJpdHkKK21ldGhvZHMgaW5j bHVkaW5nIEtlcmJlcm9zIElWLCBLZXJiZXJvcyBWLCBTU0wvVExTLCBhbmQgU1JQIGFuZCBpdCBj YW4gYWxzbworbWFrZSBTU0ggY29ubmVjdGlvbnMgdGhyb3VnaCB5b3VyIGV4dGVybmFsIFNTSCBj bGllbnQgYXBwbGljYXRpb24uIEl0IGNhbgorYmUgdGhlIGZhclwoaHllbmQgZmlsZVwoaHl0cmFu c2ZlciBvciBjbGllbnQvc2VydmVyIHBhcnRuZXIgb2YgeW91ciBkZXNrdG9wCitLZXJtaXQgY2xp ZW50LiBJdCBjYW4gYWxzbyBhY2NlcHQgaW5jb21pbmcgZGlhbGVkIGFuZCBuZXR3b3JrIGNvbm5l Y3Rpb25zLgorSXQgY2FuIGV2ZW4gYmUgaW5zdGFsbGVkIGFzIGFuIEludGVybmV0IHNlcnZpY2Ug b24gaXRzIG93biBzdGFuZGFyZCBUQ1AKK3NvY2tldCwgMTY0OSBbUkZDMjgzOSwgUkZDMjg0MF0u CisuUFAKK0FuZCBwZXJoYXBzIG1vc3QgaW1wb3J0YW50LCBldmVyeXRoaW5nIHlvdSBjYW4gZG8g ImJ5IGhhbmQiIChpbnRlcmFjdGl2ZWx5KQord2l0aCBDXChoeUtlcm1pdCwgY2FuIGJlICJzY3Jp cHRlZCIgKGF1dG9tYXRlZCkgdXNpbmcgaXRzIGJ1aWx0XChoeWluCitjcm9zc1woaHlwbGF0Zm9y bSB0cmFuc3BvcnRcKGh5aW5kZXBlbmRlbnQgc2NyaXB0IHByb2dyYW1taW5nIGxhbmd1YWdlLCB3 aGljaAoraGFwcGVucyB0byBiZSBpZGVudGljYWwgdG8gaXRzIGludGVyYWN0aXZlIGNvbW1hbmQg bGFuZ3VhZ2UuCisuUFAKK1RoaXMgbWFudWFsIHBhZ2Ugb2ZmZXJzIGFuIG92ZXJ2aWV3IG9mIENc KGh5S2VybWl0IDkuMCBmb3IgVW5peCAoIlVuaXgiIGlzIGFuCitvcGVyYXRpbmcgc3lzdGVtIGZh bWlseSB0aGF0IGluY2x1ZGVzIEFJWCwgREcvVVgsIEZyZWVCU0QsIEhQXChoeVVYLCBJUklYLAor TGludXgsIE1hYyBPUyBYLCBOZXRCU0QsIE9wZW5CU0QsIE9wZW4gU2VydmVyLCBPcGVuIFVuaXgs IFFOWCwgU29sYXJpcywKK1N1bk9TLCBTeXN0ZW0gViBSMywgU3lzdGVtIFYgUjQsIFRydTY0IFVu aXgsIFVuaXh3YXJlLCBYZW5peCwgYW5kIG1hbnkKK290aGVycykuIEZvciB0aG9yb3VnaCBjb3Zl cmFnZSwgcGxlYXNlIGNvbnN1bHQgdGhlIHB1Ymxpc2hlZCBDXChoeUtlcm1pdAorbWFudWFsIGFu ZCBzdXBwbGVtZW50cyAoc2VlIERPQ1VNRU5UQVRJT04gYmVsb3cpLiBGb3IgZnVydGhlciBpbmZv cm1hdGlvbgorYWJvdXQgQ1woaHlLZXJtaXQsIEtlcm1pdCBzb2Z0d2FyZSBmb3Igb3RoZXIgcGxh dGZvcm1zLCBhbmQgS2VybWl0IG1hbnVhbHMsCit2aXNpdCB0aGUgS2VybWl0IFByb2plY3Qgd2Vi c2l0ZToKKy5QUAorICBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvCisuUFAKK1RoaXMg aXMgYSBsb25nZXJcKGh5dGhhblwoaHlhdmVyYWdlIG1hbnVhbCBwYWdlLCBhbmQgeWV0IGl0IGJh cmVseSBzY3JhdGNoZXMgdGhlCitzdXJmYWNlLiBEb24ndCBiZSBkYXVudGVkLiBDXChoeUtlcm1p dCBpcyBhIGxhcmdlIGFuZCBjb21wbGV4IHBhY2thZ2UsCitldm9sdmluZyBvdmVyIGRlY2FkZXMg b2YgcHJhY3RpY2UgYW5kIGV4cGVyaWVuY2UsIGJ1dCB0aGF0IGRvZXNuJ3QgbWVhbgoraXQncyBo YXJkIHRvIGxlYXJuIG9yIHVzZS4gSXRzIG1vc3QgY29tbW9ubHkgdXNlZCBmdW5jdGlvbnMgYXJl IGV4cGxhaW5lZAoraGVyZSB3aXRoIHBvaW50ZXJzIHRvIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24g ZWxzZXdoZXJlLgorLlNIIFNZTk9QU0lTCisuQiBrZXJtaXQgWworLkkgZmlsZW5hbWUKKy5CIF0g WworLkkgb3B0aW9ucworLkIgXSBbIHs9LFwtXC0sK30KKy5JIHRleHQKKy5CIF0gXQorLlBQCitv cjoKKy5QUAorLkIga2VybWl0IAorLkkgVVJMCisuUFAKK0lmIHRoZSBmaXJzdCBjb21tYW5kXCho eWxpbmUgYXJndW1lbnQgaXMgdGhlIG5hbWUgb2YgYSBmaWxlLCBpbnRlcmFjdGl2ZVwoaHltb2Rl Citjb21tYW5kcyBhcmUgZXhlY3V0ZWQgZnJvbSB0aGUgZmlsZS4gVGhlICc9JyAob3IgIlwtXC0i KSBhcmd1bWVudCB0ZWxscworS2VybWl0IG5vdCB0byBwYXJzZSB0aGUgcmVtYWluZGVyIG9mIHRo ZSBjb21tYW5kIGxpbmUsIGJ1dCB0byBtYWtlIHRoZQord29yZHMgZm9sbG93aW5nICc9JyBhdmFp bGFibGUgYXMgXGUlMSwgXGUlMiwgLi4uIFxlJTkuIFRoZSAiKyIgYXJndW1lbnQgaXMKK2xpa2Ug Ij0iIGJ1dCBmb3IgdXNlIGluICJrZXJiYW5nIHNjcmlwdHMiIChleHBsYWluZWQgYmVsb3cpLiBB IHNlY29uZAorY29tbWFuZFwoaHlsaW5lIGZvcm1hdCBhbGxvd3MgdGhlIG9uZSBhbmQgb25seSBh cmd1bWVudCB0byBiZSBhIFRlbG5ldCwgRlRQLAorSFRUUCwgb3IgSUtTRCBVUkwuCisuUFAKK09y ZGVyIG9mIGV4ZWN1dGlvbjoKKy5UUAorIDEuCitUaGUgY29tbWFuZCBmaWxlIChpZiBhbnkpLgor LlRQCisubmYKKyAyLgorVGhlIGluaXRpYWxpemF0aW9uIGZpbGUsIGlmIGFueSwgdW5sZXNzIHN1 cHByZXNzZWQgd2l0aCBcLVkuCisuZmkKKy5UUAorIDMuCitUaGUgY3VzdG9taXphdGlvbiBmaWxl IChpZiBpdCBpcyBleGVjdXRlZCBieSB0aGUgaW5pdGlhbGl6YXRpb24gZmlsZSkuCisuVFAKKyA0 LgorVGhlIGNvbW1hbmRcKGh5bGluZSBVUkwgKGlmIGFueSwgYW5kIGlmIHNvLCBleGVjdXRpb24g c3RvcHMgaGVyZSkuCisuVFAKKyA1LgorQ29tbWFuZFwoaHlsaW5lIG9wdGlvbnMgKGlmIGFueSku CisuVFAKKyA2LgorSW50ZXJhY3RpdmUgY29tbWFuZHMuCisuUFAKK1NvbWUgY29tbWFuZFwoaHls aW5lIG9wdGlvbnMgY2FuIGNhdXNlIGFjdGlvbnMgKHN1Y2ggYXMgXC1zIHRvIHNlbmQgYSBmaWxl KTsKK290aGVycyBqdXN0IHNldCBwYXJhbWV0ZXJzLiBJZiBhbnkgYWN0aW9uIG9wdGlvbnMgYXJl IGluY2x1ZGVkIG9uIHRoZQorY29tbWFuZCBsaW5lLCBLZXJtaXQgZXhpdHMgd2hlbiBmaW5pc2hl ZCB1bmxlc3MgYWxzbyBnaXZlbiB0aGUgXC1TICgic3RheSIpCitvcHRpb24uIElmIG5vIGFjdGlv biBvcHRpb25zIGFyZSBnaXZlbiwgbm8gaW5pdGlhbGl6YXRpb24gb3IgY29tbWFuZCBmaWxlcwor Y29udGFpbmVkIGFuIEVYSVQgb3IgUVVJVCBjb21tYW5kLCBhbmQgbm8gZmF0YWwgZXJyb3JzIG9j Y3VycmVkLCBLZXJtaXQKK2lzc3VlcyBpdHMgcHJvbXB0IGFuZCB3YWl0cyBmb3IgeW91IHRvIHR5 cGUgY29tbWFuZHMuCisuSVAKK0JlYXIgaW4gbWluZCB0aGF0IENcKGh5S2VybWl0IGNhbiBiZSBi dWlsdCB3aXRoIHNlbGVjdGVkIGZlYXR1cmVzCitkaXNhYmxlZCwgYW5kIGFsc28gdGhhdCBjZXJ0 YWluIGZlYXR1cmVzIGFyZSBub3QgYXZhaWxhYmxlIG9uIGFsbAorcGxhdGZvcm1zLiBGb3IgZXhh bXBsZSwgQ1woaHlLZXJtaXQgY2FuJ3QgYmUgYnVpbHQgd2l0aCBUQ1AvSVAKK3N1cHBvcnQgb24g YSBwbGF0Zm9ybSB0aGF0IGRvZXMgbm90IGhhdmUgVENQL0lQIGhlYWRlciBmaWxlcyBhbmQKK2xp YnJhcmllcyAoYW5kIGV2ZW4gaWYgS2VybWl0IGRvZXMgaW5jbHVkZSBUQ1AvSVAgc3VwcG9ydCwg aXQKK2Nhbid0IGJlIHVzZWQgdG8gbWFrZSBUQ1AvSVAgY29ubmVjdGlvbnMgb24gYSBjb21wdXRl ciB0aGF0IGRvZXMKK25vdCBoYXZlIGEgVENQL0lQIHN0YWNrIGluc3RhbGxlZCkuIElmIHlvdXIg dmVyc2lvbiBvZiAKK0NcKGh5S2VybWl0IGxhY2tzIGEgZmVhdHVyZSBtZW50aW9uZWQgaGVyZSwg dXNlIGl0cyBTSE9XIEZFQVRVUkVTIGNvbW1hbmQgdG8KK3NlZSB3aGF0IG1pZ2h0IGhhdmUgYmVl biBleGNsdWRlZC4KKy5QUAorQ1woaHlLZXJtaXQgaGFzIHRocmVlIGtpbmRzIG9mIGNvbW1hbmRz OiByZWd1bGFyIHNpbmdsZVwoaHlsZXR0ZXIgY29tbWFuZFwoaHlsaW5lCitvcHRpb25zLCBleHRl bmRlZFwoaHlmb3JtYXQgY29tbWFuZFwoaHlsaW5lIG9wdGlvbnMsIGFuZCBpbnRlcmFjdGl2ZSBj b21tYW5kcy4KKy5QUAorTGlrZSBtb3N0IFVuaXggY29tbWFuZHMsIENcKGh5S2VybWl0IGNhbiBi ZSBiZSBnaXZlbiBvcHRpb25zIG9uIHRoZSBjb21tYW5kCitsaW5lLiBCdXQgQ1woaHlLZXJtaXQg YWxzbyBjYW4gYmUgdXNlZCBpbnRlcmFjdGl2ZWx5IGJ5IGdpdmluZyBpdCBjb21tYW5kcworY29t cG9zZWQgb2Ygd29yZHMsIHdoaWNoIGFyZSBtb3JlIGludHVpdGl2ZSB0aGFuIGNyeXB0aWMgY29t bWFuZFwoaHlsaW5lCitvcHRpb25zLCBhbmQgbW9yZSBmbGV4aWJsZSB0b28uIEluIG90aGVyIHdv cmRzLCB5b3UgZG9uJ3QgaGF2ZSB0byB1c2UKK0NcKGh5S2VybWl0J3MgY29tbWFuZFwoaHlsaW5l IG9wdGlvbnMsIGJ1dCB0aGV5IGFyZSBhdmFpbGFibGUgaWYgeW91IHdhbnQgdG8uIChCeQordGhl IHNhbWUgdG9rZW4sIHlvdSBkb24ndCBoYXZlIHRvIHVzZSBpdHMgaW50ZXJhY3RpdmUgY29tbWFu ZHMgZWl0aGVyIFwoaHlcKGh5Cit5b3UgY2FuIHVzZSBlaXRoZXIgb3IgYm90aCBpbiBhbnkgY29t YmluYXRpb24uKQorLlBQCitDXChoeUtlcm1pdCBpcyBnZW5lcmFsbHkgaW5zdGFsbGVkIGluIHRo ZSBQQVRIIGFzICJrZXJtaXQiLCBhbmQgdGhlcmVmb3JlIGlzCitpbnZva2VkIGJ5IHR5cGluZyB0 aGUgd29yZCAia2VybWl0IiAobG93ZXJjYXNlKSBhdCB0aGUgc2hlbGwgcHJvbXB0LCBhbmQKK3Ro ZW4gcHJlc3NpbmcgdGhlIFJldHVybiBvciBFbnRlciBrZXkuIElmIHlvdSB3aXNoIHRvIGluY2x1 ZGUgY29tbWFuZFwoaHlsaW5lCitvcHRpb25zLCBwdXQgdGhlbSBhZnRlciB0aGUgd29yZCAia2Vy bWl0IiBidXQgYmVmb3JlIHByZXNzaW5nIFJldHVybiBvcgorRW50ZXIsIHNlcGFyYXRlZCBieSBz cGFjZXMsIGZvciBleGFtcGxlOgorLlBQCisgICQga2VybWl0IFwtcyBja2VybWl0LnRhci5negor LlBQCisoJyQnIGlzIHRoZSBzaGVsbCBwcm9tcHQ7ICJrZXJtaXQgXC1zIGNrZXJtaXQudGFyLmd6 IiBpcyB3aGF0IHlvdSB0eXBlLAorZm9sbG93ZWQgYnkgUmV0dXJuIG9yIEVudGVyLikKKy5TSCBP UFRJT05TCitIZXJlIGlzIGEgbGlzdCBvZiBDXChoeUtlcm1pdCdzIHNpbmdsZVwoaHlsZXR0ZXIg Y29tbWFuZFwoaHlsaW5lIG9wdGlvbnMsIHdoaWNoCitzdGFydCB3aXRoIGEgc2luZ2xlIGRhc2gg KFwtKSwgaW4gQVNDSUkgKCJhbHBoYWJldGljYWwiKSBvcmRlci4gQWxwaGFiZXRpYworY2FzZSBp cyBzaWduaWZpY2FudCAoXC1BIGlzIG5vdCB0aGUgc2FtZSBhcyBcLWEpLiAgQWN0aW9uIG9wdGlv bnMgYXJlIAordGFnZ2VkICJBQ1RJT04iLgorLlRQCitcLTAKKyhkaWdpdCB6ZXJvKSAgMTAwJSB0 cmFuc3BhcmVudCBDb25uZWN0IHN0YXRlIGZvcgorImluXChoeXRoZVwoaHltaWRkbGUiIG9wZXJh dGlvbjogOCBiaXRzLCBubyBwYXJpdHksIG5vCitlc2NhcGUgY2hhcmFjdGVyLCBldmVyeXRoaW5n IHBhc3NlcyB0aHJvdWdoLgorLlRQCitcLTgKKyhkaWdpdCBlaWdodCkgIENvbm5lY3Rpb24gaXMg OFwoaHliaXQgY2xlYW4gKHRoaXMgaXMgdGhlCitkZWZhdWx0IGluIENcKGh5S2VybWl0IDguMCBh bmQgbGF0ZXIpLiBFcXVpdmFsZW50IHRvIHRoZSBFSUdIVEJJVAorY29tbWFuZCwgd2hpY2ggaW4g dHVybiBpcyBhIHNob3J0Y3V0IGZvciBTRVQgVEVSTUlOQUwKK0JZVEVTSVpFIDgsIFNFVCBDT01N QU5EIEJZVEVTSVpFIDgsIFNFVCBQQVJJVFkgTk9ORS4KKy5UUAorXC05IGFyZworKGRpZ2l0IG5p bmUpICBNYWtlIGEgY29ubmVjdGlvbiB0byBhbiBGVFAgc2VydmVyLgorRXF1aXZhbGVudCB0byB0 aGUgRlRQIE9QRU4gY29tbWFuZC4KK0FyZ3VtZW50OiBJUFwoaHlhZGRyZXNzXChoeW9yXChoeWhv c3RuYW1lWzpvcHRpb25hbFwoaHlUQ1BcKGh5cG9ydF0uCitOT1RFOiBDXChoeUtlcm1pdCBhbHNv IGhhcyBhIHNlcGFyYXRlIEZUUCBjb21tYW5kXChoeWxpbmUKK3BlcnNvbmFsaXR5LCB3aXRoIHJl Z3VsYXIgRlRQXChoeWxpa2UgY29tbWFuZFwoaHlsaW5lCitzeW50YXguIE1vcmUgYWJvdXQgdGhp cyBiZWxvdy4KKy5UUAorXC1BCitLZXJtaXQgaXMgdG8gYmUgc3RhcnRlZCBhcyBhbiBJbnRlcm5l dCBzZXJ2aWNlIChJS1NEKQorKG9ubHkgZnJvbSBpbmV0ZC5jb25mKS4KKy5UUAorXC1CCitLZXJt aXQgaXMgcnVubmluZyBpbiBCYXRjaCBvciBCYWNrZ3JvdW5kIChubworY29udHJvbGxpbmcgdGVy bWluYWwpLiBUbyBiZSB1c2VkIGluIGNhc2UgS2VybWl0Citkb2Vzbid0IGF1dG9tYXRpY2FsbHkg c2Vuc2UgaXRzIGJhY2tncm91bmQgc3RhdHVzLgorRXF1aXZhbGVudCB0byB0aGUgU0VUIEJBQ0tH Uk9VTkQgT04gY29tbWFuZC4KKy5UUAorXC1DIGFyZworSW50ZXJhY3RpdmVcKGh5bW9kZSBDb21t YW5kcyB0byBiZSBleGVjdXRlZC4KK0FyZ3VtZW50OiBDb21tYW5kcyBzZXBhcmF0ZWQgYnkgY29t bWFzLCBsaXN0IGluCitkb3VibGVxdW90ZXMuCisuVFAKK1wtRCBhcmcKK0RlbGF5IGJlZm9yZSBz dGFydGluZyB0byBzZW5kIGluIFJlbW90ZSBtb2RlLgorRXF1aXZhbGVudCB0byB0aGUgU0VUIERF TEFZIGNvbW1hbmQuCitBcmd1bWVudDogTnVtYmVyIG9mIHNlY29uZHMuCisuVFAKK1wtRQorRXhp dCBhdXRvbWF0aWNhbGx5IHdoZW4gY29ubmVjdGlvbiBjbG9zZXMuIEVxdWl2YWxlbnQKK3RvIFNF VCBFWElUIE9OXC1ESVNDT05ORUNUIE9OLgorLlRQCitcLUYgYXJnCitVc2UgYW4gb3BlbiBUQ1Ag Y29ubmVjdGlvbi4KK0FyZ3VtZW50OiBOdW1lcmljIGZpbGUgZGVzY3JpcHRvciBvZiBvcGVuIFRD UAorY29ubmVjdGlvbi4KK0Fsc28gc2VlOiBcLWosIFwtSi4KKy5UUAorXC1HIGFyZworKEFDVElP TikgR2V0IGZpbGUocykgZnJvbSBzZXJ2ZXIsIHNlbmQgY29udGVudHMgdG8gc3RhbmRhcmQKK291 dHB1dCwgd2hpY2ggbm9ybWFsbHkgd291bGQgYmUgcGlwZWQgdG8gYW5vdGhlcgorcHJvY2Vzcy4K K0FyZ3VtZW50OiBSZW1vdGUgZmlsZSBzcGVjaWZpY2F0aW9uLCBpbiBxdW90ZXMgaWYgaXQKK2Nv bnRhaW5zIG1ldGFjaGFyYWN0ZXJzLgorQWxzbyBzZWU6IFwtZywgXC1rLgorLlRQCitcLUgKK1N1 cHByZXNzIHByb2dyYW0gc3RhcnR1cCBIZXJhbGQgYW5kIGdyZWV0aW5nLgorLlRQCitcLUkKK1Rl bGwgS2VybWl0IGl0IGhhcyBhIHJlbGlhYmxlIGNvbm5lY3Rpb24sIHRvIGZvcmNlIHN0cmVhbWlu ZyB0byBiZSB1c2VkIHdoZXJlCitpdCBub3JtYWxseSB3b3VsZCBub3QgYmUuICBFcXVpdmFsZW50 IHRvIHRoZSBTRVQgUkVMSUFCTEUgT04gY29tbWFuZC4KKy5UUAorXC1KIGFyZworKEFDVElPTikg IkJlIGxpa2UgVGVsbmV0LiIgTGlrZSBcLWogYnV0IGltcGxpZXMgXC1FLiAgQXJndW1lbnQ6IElQ Citob3N0bmFtZS9hZGRyZXNzIG9wdGlvbmFsbHkgZm9sbG93ZWQgYnkgc2VydmljZS4gIE5PVEU6 IENcKGh5S2VybWl0IGFsc28gaGFzIGEKK3NlcGFyYXRlIFRlbG5ldCBjb21tYW5kXChoeWxpbmUg cGVyc29uYWxpdHksIHdpdGggcmVndWxhciBUZWxuZXRcKGh5bGlrZQorY29tbWFuZFwoaHlsaW5l IHN5bnRheC4gTW9yZSBhYm91dCB0aGlzIGJlbG93LgorLlRQCitcLUwKK1JlY3Vyc2l2ZSBkaXJl Y3RvcnkgZGVzY2VudCBmb3IgZmlsZXMgaW4gXC1zIG9wdGlvbi4KKy5UUAorXC1NIGFyZworTXkg dXNlciBuYW1lIChmb3IgdXNlIHdpdGggVGVsbmV0LCBSbG9naW4sIEZUUCwgZXRjKS4KK0VxdWl2 YWxlbnQgdG8gdGhlIFNFVCBMT0dJTiBVU0VSIGNvbW1hbmQuCitBcmd1bWVudDogVXNlcm5hbWUg c3RyaW5nLgorLlRQCitcLU8KKyhBQ1RJT04pIChVcHBlcmNhc2UgbGV0dGVyIE8pIEJlIGEgc2Vy dmVyIGZvciBPbmUgY29tbWFuZCBvbmx5LgorQWxzbyBzZWU6IFwteC4KKy5UUAorXC1QCitEb24n dCBjb252ZXJ0IGZpbGUgKFBhdGgpIG5hbWVzIG9mIHRyYW5zZmVycmVkIGZpbGVzLgorRXF1aXZh bGVudCB0byBTRVQgRklMRSBOQU1FUyBMSVRFUkFMLgorLlRQCitcLVEKK1F1aWNrIEtlcm1pdCBw cm90b2NvbCBzZXR0aW5ncy4gRXF1aXZhbGVudCB0byB0aGUgRkFTVAorY29tbWFuZC4gVGhpcyBp cyB0aGUgZGVmYXVsdCBpbiBDXChoeUtlcm1pdCA3LjAgYW5kIGxhdGVyLgorLlRQCitcLVIKK1Jl bW90ZVwoaHlvbmx5ICh0aGlzIGp1c3QgbWFrZXMgSUYgUkVNT1RFIHRydWUpLgorLlRQCitcLVMK K1N0YXkgKGVudGVyIGNvbW1hbmQgcGFyc2VyIGFmdGVyIGFjdGlvbiBvcHRpb25zKS4KKy5UUAor XC1UCitGb3JjZSBUZXh0IG1vZGUgZm9yIGZpbGUgdHJhbnNmZXI7IGltcGxpZXMgXC1WLgorRXF1 aXZhbGVudCB0byBTRVQgVFJBTlNGRVIgTU9ERSBNQU5VQUwsIFNFVCBGSUxFIFRZUEUgVEVYVC4K Ky5UUAorXC1WCitEaXNhYmxlIGF1dG9tYXRpYyBwZXJcKGh5ZmlsZSB0ZXh0L2JpbmFyeSBzd2l0 Y2hpbmcuCitFcXVpdmFsZW50IHRvIFNFVCBUUkFOU0ZFUiBNT0RFIE1BTlVBTC4KKy5UUAorXC1Z CitTa2lwIChkb24ndCBleGVjdXRlKSB0aGUgaW5pdGlhbGl6YXRpb24gZmlsZS4KKy5UUAorXC1h IGFyZworQXNcKGh5bmFtZSBmb3IgZmlsZShzKSBpbiBcLXMsIFwtciwgb3IgXC1nLgorQXJndW1l bnQ6IEFzXChoeW5hbWUgc3RyaW5nIChhbHRlcm5hdGl2ZSBmaWxlbmFtZSkuIFdoZW4KK3JlY2Vp dmluZyBmaWxlcywgdGhpcyBjYW4gYmUgYSBkaXJlY3RvcnkgbmFtZS4KKy5UUAorXC1iIGFyZwor U3BlZWQgZm9yIHNlcmlhbCBkZXZpY2UuIEVxdWl2YWxlbnQgdG8gU0VUIFNQRUVELgorQXJndW1l bnQ6IE51bWVyaWMgQml0cyBwZXIgc2Vjb25kIGZvciBzZXJpYWwKK2Nvbm5lY3Rpb25zLgorLlRQ CitcLWMKKyhBQ1RJT04pIEVudGVyIENvbm5lY3Qgc3RhdGUgYmVmb3JlIHRyYW5zZmVycmluZyBm aWxlcy4KKy5UUAorXC1kCitDcmVhdGUgYSBkZWJ1Zy5sb2cgZmlsZSB3aXRoIGRldGFpbGVkIGRl YnVnZ2luZworaW5mb3JtYXRpb24gKGEgc2Vjb25kIFwtZCBhZGRzIHRpbWVzdGFtcHMpLiBFcXVp dmFsZW50Cit0byBMT0cgREVCVUcgYnV0IHRha2VzIGVmZmVjdCBzb29uZXIuCisuVFAKK1wtZSBh cmcKK01heGltdW0gbGVuZ3RoIGZvciBpbmNvbWluZyBLZXJtaXQgZmlsZVwoaHl0cmFuc2Zlcgor cGFja2V0cy4gRXF1aXZhbGVudCB0byBTRVQgUkVDRUlWRSBQQUNLRVRcLUxFTkdUSC4KK0FyZ3Vt ZW50OiBMZW5ndGggaW4gYnl0ZXMuCisuVFAKK1wtZgorKEFDVElPTikgU2VuZCBhIEZJTklTSCBj b21tYW5kIHRvIGEgS2VybWl0IHNlcnZlci4KKy5UUAorXC1nIGFyZworR2V0IGZpbGUocykgZnJv bSBhIEtlcm1pdCBzZXJ2ZXIuCitBcmd1bWVudDogRmlsZSBzcGVjaWZpY2F0aW9uIG9uIG90aGVy IGNvbXB1dGVyLCBpbgorcXVvdGVzIGlmIGl0IGNvbnRhaW5zIG1ldGFjaGFyYWN0ZXJzLiBFcXVp dmFsZW50IHRvCitHRVQuIEFsc28gc2VlOiBcLWEsIFwtRywgXC1yLgorLlRQCitcLWgKKyhBQ1RJ T04pIFByaW50IEhlbHAgdGV4dCBmb3Igc2luZ2xlXChoeWxldHRlciBjb21tYW5kXChoeWxpbmUg b3B0aW9ucworKHBpcGUgdGhydSAnbW9yZScgdG8gcHJldmVudCBzY3JvbGxpbmcpLgorLlRQCitc LWkKK0ZvcmNlIGJpbmFyeSAoSW1hZ2UpIG1vZGUgZm9yIGZpbGUgdHJhbnNmZXI7IGltcGxpZXMK K1wtVi4gRXF1aXZhbGVudCB0byBTRVQgVFJBTlNGRVIgTU9ERSBNQU5VQUwsIFNFVCBGSUxFCitU WVBFIEJJTkFSWS4KKy5UUAorXC1qIGFyZworTWFrZSBhIFRDUC9JUCBjb25uZWN0aW9uLgorQXJn dW1lbnQ6IElQIGhvc3QgbmFtZS9hZGRyZXNzIGFuZCBvcHRpb25hbCBzZXJ2aWNlCituYW1lIG9y IG51bWJlci4gRXF1aXZhbGVudCB0byB0aGUgVEVMTkVUIGNvbW1hbmQuCitBbHNvIHNlZTogXC1K LCBcLUYuCisuVFAKK1wtaworKEFDVElPTikgUmVjZWl2ZSBmaWxlKHMpIHRvIHN0YW5kYXJkIG91 dHB1dCwgd2hpY2ggbm9ybWFsbHkgCit3b3VsZCBiZSBwaXBlZCB0byBhbm90aGVyIHByb2Nlc3Mu CitBbHNvIHNlZTogXC1yLCBcLUcuCisuVFAKK1wtbCBhcmcKKyhMb3dlcmNhc2UgbGV0dGVyIEwp IE1ha2UgYSBjb25uZWN0aW9uIG9uIHRoZSBnaXZlbgorc2VyaWFsIGNvbW11bmljYXRpb25zIGRl dmljZS4gRXF1aXZhbGVudCB0byB0aGUgU0VUCitMSU5FIChTRVQgUE9SVCkgY29tbWFuZC4KK0Fy Z3VtZW50OiBTZXJpYWwgZGV2aWNlIG5hbWUsIGUuZy4gL2Rldi90dHlTMC4KKy5UUAorXC1tIGFy ZworTW9kZW0gdHlwZSBmb3IgdXNlIHdpdGggdGhlIFwtbCBkZXZpY2UuIEVxdWl2YWxlbnQgdG8K K3RoZSBTRVQgTU9ERU0gVFlQRSBjb21tYW5kLgorQXJndW1lbnQ6IE1vZGVtIG5hbWUgYXMgaW4g U0VUIE1PREVNIFRZUEUgY29tbWFuZCwKK2UuZy4gInVzcm9ib3RpY3MiLgorLlRQCitcLW4KKyhB Q1RJT04pIEVudGVyIENvbm5lY3Qgc3RhdGUgYWZ0ZXIgdHJhbnNmZXJyaW5nIGZpbGVzIChoaXN0 b3JpY2FsKS4KKy5UUAorXC1wIGFyZworUGFyaXR5LiBFcXVpdmFsZW50IHRvIHRoZSBTRVQgUEFS SVRZIGNvbW1hbmQuCitBcmd1bWVudDogT25lIG9mIHRoZSBmb2xsb3dpbmc6IGUodmVuKSwgbyhk ZCksIG0oYXJrKSwKK24ob25lKSwgcyhwYWNlKS4KKy5UUAorXC1xCitRdWlldCAoc3VwcHJlc3Mg bW9zdCBtZXNzYWdlcykuIEVxdWl2YWxlbnQgdG8gU0VUIFFVSUVUIE9OLgorLlRQCitcLXIKKyhB Q1RJT04pIFJlY2VpdmUgZmlsZShzKS4gRXF1aXZhbGVudCB0byB0aGUgUkVDRUlWRSBjb21tYW5k LgorQXJndW1lbnQ6IChub25lLCBidXQgc2VlIFwtYSkKKy5UUAorXC1zIGFyZworU2VuZCBmaWxl KHMpLgorQXJndW1lbnQ6IE9uZSBvciBtb3JlIGxvY2FsIGZpbGUgc3BlY2lmaWNhdGlvbnMuCitF cXVpdmFsZW50IHRvIHRoZSBTRU5EIGNvbW1hbmQuCitBbHNvIHNlZTogXC1hLgorLlRQCitcLXQK KyhIaXN0b3JpY2FsKSBYb24gKEN0cmxcLVEpIFR1cm5hcm91bmQgY2hhcmFjdGVyIGZvcgoraGFs ZlwoaHlkdXBsZXggY29ubmVjdGlvbnMgKHVzZWQgb24gc2VyaWFsIGxpbmVtb2RlCitjb25uZWN0 aW9ucyB0byBvbGQgbWFpbmZyYW1lcykuIEVxdWl2YWxlbnQgdG8gU0VUCitEVVBMRVggSEFMRiwg U0VUIEhBTkRTSEFLRSBYT04uCisuVFAKK1wtdiBhcmcKK1dpbmRvdyBzaXplIGZvciBLZXJtaXQg cHJvdG9jb2wgKGlnbm9yZWQgd2hlbgorc3RyZWFtaW5nKS4gRXF1aXZhbGFuZXQgdG8gU0VUIFdJ TkRPV1wtU0laRS4KK0FyZ3VtZW50OiBOdW1iZXIsIDEgdG8gMzIuCisuVFAKK1wtdworSW5jb21p bmcgZmlsZXMgV3JpdGUgb3ZlciBleGlzdGluZyBmaWxlcy4gRXF1aXZhbGVudAordG8gU0VUIEZJ TEUgQ09MTElTSU9OIE9WRVJXUklURS4KKy5UUAorXC14CisoQUNUSU9OKSBFbnRlciBzZXJ2ZXIg bW9kZS4gRXF1aXZhbGVudCB0byB0aGUgU0VSVkVSIGNvbW1hbmQuCitBbHNvIHNlZTogXC1PLgor LlRQCitcLXkgYXJnCitBbHRlcm5hdGl2ZSBpbml0aWFsaXphdGlvbiBmaWxlLgorQXJndW1lbnQ6 IEZpbGVuYW1lLgorLlRQCitcLXoKK0ZvcmNlIGZvcmVncm91bmQgYmVoYXZpb3IuIFRvIGJlIHVz ZWQgaW4gY2FzZSBLZXJtaXQKK2RvZXNuJ3QgYXV0b21hdGljYWxseSBzZW5zZSBpdHMgZm9yZWdy b3VuZCBzdGF0dXMuCitFcXVpdmFsZW50IHRvIHRoZSBTRVQgQkFDS0dST1VORCBPRkYgY29tbWFu ZC4KKy5QUAorRXh0ZW5kZWQgY29tbWFuZFwoaHlsaW5lIG9wdGlvbnMgKG5lY2Vzc2FyeSBiZWNh dXNlIHNpbmdsZVwoaHlsZXR0ZXIgb25lcyBhcmUKK2Fib3V0IHVzZWQgdXApIHN0YXJ0IHdpdGgg dHdvIGRhc2hlcyAoXC1cLSksIHdpdGggd29yZHMgcmF0aGVyIHRoYW4gc2luZ2xlCitsZXR0ZXJz IGFzIG9wdGlvbiBuYW1lcy4gSWYgYW4gZXh0ZW5kZWQgb3B0aW9uIHRha2VzIGFuIGFyZ3VtZW50 LCBpdCBpcworc2VwYXJhdGVkIGZyb20gdGhlIG9wdGlvbiB3b3JkIGJ5IGEgY29sb24gKDopLiBF eHRlbmRlZCBvcHRpb25zIGluY2x1ZGU6CisKKy5UUAorIFwtXC1iYW5uZXJmaWxlOmZpbGVuYW1l CitGaWxlIHRvIGRpc3BsYXkgdXBvbiBzdGFydHVwIG9yIElLU0QgbG9naW4uCisuVFAKKyBcLVwt Y2RmaWxlOmZpbGVuYW1lCitGaWxlIHRvIGJlIHNlbnQgZm9yIGRpc3BsYXkgdG8gdGhlIGNsaWVu dCB3aGVuCitzZXJ2ZXIgY2hhbmdlcyBkaXJlY3RvcnkgKGZpbGVuYW1lIGlzIHJlbGF0aXZlIHRv Cit0aGUgY2hhbmdlZFwoaHl0byBkaXJlY3RvcnkpLgorLlRQCisgXC1cLWNkbWVzc2FnZTp7b24s b2ZmfQorRW5hYmxlL2Rpc2FibGUgdGhlIHNlcnZlciBDRCBtZXNzYWdlIGZlYXR1cmUuCisuVFAK KyBcLVwtaGVscAorUHJpbnRzIHVzYWdlIG1lc3NhZ2UgZm9yIGV4dGVuZGVkIG9wdGlvbnMuCisu VFAKKyBcLVwtaGVscGZpbGU6ZmlsZW5hbWUKK0Rlc2lnbmF0ZXMgYSBmaWxlIGNvbnRhaW5pbmcg Y3VzdG9tIHRleHQgdG8KK3JlcGxhY2UgdGhlIHRvcFwoaHlsZXZlbCBIRUxQIGNvbW1hbmQuCisu VFAKKyBcLVwtbm9pbnRlcnJ1cHRzCitEaXNhYmxlcyBrZXlib2FyZCBpbnRlcnJ1cHRzLgorLlRQ CisgXC1cLW5vcGVybXMKK0Rpc2FibGVzIHRoZSBLZXJtaXQgcHJvdG9jb2wgZmlsZSBQZXJtaXNz aW9ucworYXR0cmlidXRlLCB0byBwcmV2ZW50IHRyYW5zbWlzc2lvbiBvZiBmaWxlCitwZXJtaXNz aW9ucyAocHJvdGVjdGlvbikgZnJvbSBzZW5kZXIgdG8gcmVjZWl2ZXIuCisuVFAKKyBcLVwtdmVy c2lvbgorKEFDVElPTikgQ1woaHlLZXJtaXQgcHJpbnRzIGl0cyB2ZXJzaW9uIG51bWJlci4KKy5Q UAorUGx1cyBzZXZlcmFsIG90aGVyIElLU0RcKGh5T25seSBvcHRpb25zIGRlc2NyaWJlZCBhdDoK Ky5QUAorICBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaWtzZC5odG1sCisuUFAKK1Nl ZSB0aGUgZmlsZVwoaHl0cmFuc2ZlciBzZWN0aW9uIGZvciBleGFtcGxlcyBvZiBjb21tYW5kXCho eWxpbmUgaW52b2NhdGlvbi4KKy5TSCBDT01NQU5EIExBTkdVQUdFCitDXChoeUtlcm1pdCdzIGlu dGVyYWN0aXZlIGNvbW1hbmQgbGFuZ3VhZ2UgaXMgdGhlIHN1YmplY3Qgb2YgYSA2MjJcKGh5cGFn ZSBib29rCithbmQgYW5vdGhlciBzZXZlcmFsIGh1bmRyZWQgcGFnZXMgb2YgdXBkYXRlcywgZmFy IHRvbyBtdWNoIGZvciBhIG1hbnVhbAorcGFnZS4gQnV0IGl0J3Mgbm90IGhhcmQgdG8gZ2V0IHN0 YXJ0ZWQuIEF0IHRoZSBzaGVsbCBwcm9tcHQsIGp1c3QgdHlwZQorImtlcm1pdCIgdG8gZ2V0IENc KGh5S2VybWl0J3MgaW50ZXJhY3RpdmUgY29tbWFuZCBwcm9tcHQ6CisuUFAKKy5uZgorICAkIGtl cm1pdAorICAoL2N1cnJlbnQvZGlyZWN0b3J5KSBDXC1LZXJtaXQ+CisuZmkKKy5QUAorQmVnaW4g YnkgdHlwaW5nICJoZWxwIiAoYW5kIHRoZW4gcHJlc3MgdGhlIFJldHVybiBvciBFbnRlciBrZXkp IGZvciBhCit0b3BcKGh5bGV2ZWwgb3ZlcnZpZXcsIHJlYWQgaXQsIGFuZCBnbyBmcm9tIHRoZXJl LiBZb3VyIHNlY29uZCBjb21tYW5kIHNob3VsZAorcHJvYmFibHkgYmUgImludHJvIiAoaW50cm9k dWN0aW9uKS4gTm90ZSB0aGUgcHJvbXB0IHNob3dzIHlvdXIgY3VycmVudAorZGlyZWN0b3J5ICh1 bmxlc3MgeW91IHRlbGwgS2VybWl0IHRvIHByb21wdCB5b3Ugd2l0aCBzb21ldGhpbmcgZWxzZSku CisuUFAKK0ludGVyYWN0aXZlIGNvbW1hbmRzIGFyZSBjb21wb3NlZCBtYWlubHkgb2YgcmVndWxh ciBFbmdsaXNoIHdvcmRzLCB1c3VhbGx5CitpbiB0aGUgZm9ybSBvZiBpbXBlcmF0aXZlIHNlbnRl bmNlcywgc3VjaCBhczoKKy5QUAorICBzZW5kIG9vZmEudHh0CisuUFAKK3doaWNoIHRlbGxzIEtl cm1pdCB0byBzZW5kICh0cmFuc2ZlcikgdGhlIGZpbGUgd2hvc2UgbmFtZSBpcyBvb2ZhLnR4dCwg b3I6CisuUFAKKyAgc2V0IHRyYW5zZmVyIG1vZGUgYXV0b21hdGljCisuUFAKK3doaWNoIHNldHMg S2VybWl0J3MgInRyYW5zZmVyIG1vZGUiIHRvICJhdXRvbWF0aWMiICh3aGF0ZXZlciB0aGF0IG1l YW5zKS4KKy5QUAorV2hpbGUgdHlwaW5nIGNvbW1hbmRzLCB5b3UgY2FuIGFiYnJldmlhdGUsIGFz ayBmb3IgaGVscCAoYnkgcHJlc3NpbmcgdGhlCisiPyIga2V5IGFueXdoZXJlIGluIGEgY29tbWFu ZCksIGNvbXBsZXRlIGtleXdvcmRzIG9yIGZpbGVuYW1lcyAod2l0aCB0aGUKK1RhYiBvciBFc2Mg a2V5KSwgYW5kIGVkaXQgeW91ciB0eXBpbmcgd2l0aCBCYWNrc3BhY2Ugb3IgRGVsZXRlLCBDdHJs XC1XLAorQ3RybFwtVSwgZXRjLiBZb3UgY2FuIGFsc28gcmVjYWxsIHByZXZpb3VzIGNvbW1hbmRz LCBzYXZlIHlvdXIgY29tbWFuZAoraGlzdG9yeSwgYW5kIHdobyBrbm93cyB3aGF0IGVsc2UuIEdp dmUgdGhlIElOVFJPIGNvbW1hbmQgZm9yIGRldGFpbHMuCisuUFAKK0NcKGh5S2VybWl0IGhhcyBo dW5kcmVkcyBvZiBjb21tYW5kcywgYW5kIHRoZXkgY2FuIGJlIGlzc3VlZCBpbiBpbmZpbml0ZQor dmFyaWV0eSBhbmQgY29tYmluYXRpb25zLCBpbmNsdWRpbmcgY29tbWFuZHMgZm9yOgorLm5mCisu UFAKK1woYnUJTWFraW5nIGNvbm5lY3Rpb25zIChTRVQgTElORSwgRElBTCwgVEVMTkVULCBTU0gs IEZUUCwgLi4uKQorLmJyCitcKGJ1CUJyZWFraW5nIGNvbm5lY3Rpb25zIChIQU5HVVAsIENMT1NF KQorLmJyCitcKGJ1CVRyYW5zZmVycmluZyBmaWxlcyAoU0VORCwgR0VULCBSRUNFSVZFLCBNT1ZF LCBSRVNFTkQsIC4uLikKKy5icgorXChidQlFc3RhYmxpc2hpbmcgcHJlZmVyZW5jZXMgKFNFVCkK Ky5icgorXChidQlEaXNwbGF5aW5nIHByZWZlcmVuY2VzIChTSE9XKQorLmJyCitcKGJ1CU1hbmFn aW5nIGxvY2FsIGZpbGVzIChDRCwgREVMRVRFLCBNS0RJUiwgRElSLCBSRU5BTUUsIFRZUEUsIC4u LikKKy5icgorXChidQlNYW5hZ2luZyByZW1vdGUgZmlsZXMgKFJDRCwgUkRFTCwgUk1LRElSLCBS RElSLCAuLi4pCisuYnIKK1woYnUJVXNpbmcgbG9jYWwgZmlsZXMgKEZPUEVOLCBGQ0xPU0UsIEZS RUFELCBGV1JJVEUpCisuYnIKK1woYnUJUHJvZ3JhbW1pbmcgKFRBS0UsIERFRklORSwgSUYsIEZP UiwgV0hJTEUsIFNXSVRDSCwgREVDTEFSRSwgLi4uKQorLmJyCitcKGJ1CUludGVyYWN0aW5nIHdp dGggdGhlIHVzZXIgKEVDSE8sIEFTSywgLi4uKQorLmJyCitcKGJ1CUludGVyYWN0aW5nIHdpdGgg YSByZW1vdGUgY29tcHV0ZXIgKElOUFVULCBPVVRQVVQsIC4uLikKKy5icgorXChidQlJbnRlcmFj dGluZyB3aXRoIGxvY2FsIHByb2dyYW1zIChSVU4sIEVYRUMsIFBUWSwgLi4uKQorLmJyCitcKGJ1 CUxvZ2dpbmcgdGhpbmdzIChMT0cgU0VTU0lPTiwgTE9HIFBBQ0tFVFMsIExPRyBERUJVRywgLi4u KQorLlBQCisuZmkKK0FuZCBvZiBjb3Vyc2UgUVVJVCBvciBFWElUIHRvIGdldCBvdXQgYW5kIEhF TFAgdG8gZ2V0IGhlbHAsIGFuZCBmb3IKK3Byb2dyYW1tZXJzOiBsb29wcywgZGVjaXNpb24gbWFr aW5nLCB2YXJpYWJsZXMsIGFycmF5cywgYXNzb2NpYXRpdmUgYXJyYXlzLAoraW50ZWdlciBhbmQg ZmxvYXRpbmcgcG9pbnQgYXJpdGhtZXRpYywgbWFjcm9zLCBidWlsdFwoaHlpbiBhbmQgdXNlclwo aHlkZWZpbmVkCitmdW5jdGlvbnMsIHN0cmluZyBtYW5pcHVsYXRpb24sIHBhdHRlcm4gbWF0Y2hp bmcsIGJsb2NrIHN0cnVjdHVyZSwgc2NvcGluZywKK3JlY3Vyc2lvbiwgYW5kIGFsbCB0aGUgcmVz dC4gVG8gZ2V0IGEgbGlzdCBvZiBhbGwgQ1woaHlLZXJtaXQncyBjb21tYW5kcywgdHlwZQorYSBx dWVzdGlvbiBtYXJrICg/KSBhdCB0aGUgcHJvbXB0LiBUbyBnZXQgYSBkZXNjcmlwdGlvbiBvZiBh bnkgY29tbWFuZCwKK3R5cGUgSEVMUCBmb2xsb3dlZCBieSB0aGUgbmFtZSBvZiB0aGUgY29tbWFu ZCwgZm9yIGV4YW1wbGU6CisuUFAKKyAgaGVscCBzZW5kCisuUFAKK1RoZSBjb21tYW5kIGludGVy cnVwdGlvbiBjaGFyYWN0ZXIgaXMgQ3RybFwtQyAoaG9sZCBkb3duIHRoZSBDdHJsIGtleSBhbmQK K3ByZXNzIHRoZSBDIGtleSkuCisuUFAKK1RoZSBjb21tYW5kIGxhbmd1YWdlICJlc2NhcGUgY2hh cmFjdGVyIiwgdXNlZCB0byBpbnRyb2R1Y2UgdmFyaWFibGUgbmFtZXMsCitmdW5jdGlvbiBpbnZv Y2F0aW9ucywgYW5kIHNvIG9uLCBpcyBiYWNrc2xhc2ggKFwpLiBJZiB5b3UgbmVlZCB0byBpbmNs dWRlIGEKK2xpdGVyYWwgYmFja3NsYXNoIGluIGEgY29tbWFuZCwgdHlwZSB0d28gb2YgdGhlbSwg ZS5nLjoKKy5QUAorICBnZXQgYzpcZWs5NVxlazk1Y3VzdG9tLmluaQorLlNTIENvbW1hbmQgRmls ZXMsIE1hY3JvcywgYW5kIFNjcmlwdHMKK0EgZmlsZSBjb250YWluaW5nIEtlcm1pdCBjb21tYW5k cyBpcyBjYWxsZWQgYSBLZXJtaXQgY29tbWFuZCBmaWxlIG9yIEtlcm1pdAorc2NyaXB0LiBJdCBj YW4gYmUgZXhlY3V0ZWQgd2l0aCBLZXJtaXQncyBUQUtFIGNvbW1hbmQ6CisuUFAKKyAgKC9jdXJy ZW50L2RpcikgQ1wtS2VybWl0PiB0YWtlIGNvbW1hbmRmaWxlCisuUFAKKyh3aGVyZSAiY29tbWFu ZGZpbGUiIGlzIHRoZSBuYW1lIG9mIHRoZSBjb21tYW5kIGZpbGUpLiBQbGVhc2UgZG9uJ3QgcGlw ZSBhCitjb21tYW5kIGZpbGUgaW50byBLZXJtaXQncyBzdGFuZGFyZCBpbnB1dCAod2hpY2ggbWln aHQgb3IgbWlnaHQgbm90IHdvcmspOworaWYgeW91IGhhdmUgS2VybWl0IGNvbW1hbmRzIGluIGEg ZmlsZSwgdGVsbCBLZXJtaXQgdG8gVEFLRSB0aGUgZmlsZS4KKy5QUAorSW4gVW5peCBvbmx5LCBh IEtlcm1pdCBjb21tYW5kIGZpbGUgY2FuIGFsc28gYmUgZXhlY3V0ZWQgZGlyZWN0bHkgYnkKK2lu Y2x1ZGluZyBhICJrZXJiYW5nIiBsaW5lIGFzIHRoZSBmaXJzdCBsaW5lIG9mIHRoZSBmaWxlOgor LlBQCisgICMhL3Vzci9sb2NhbC9iaW4va2VybWl0ICsKKy5QUAorVGhhdCBpcywgYSB0b3AgbGlu ZSB0aGF0IHN0YXJ0cyB3aXRoICIjISIsIGZvbGxvd2VkIGltbWVkaWF0ZWx5IGJ5IHRoZSBmdWxs CitwYXRoIG9mIHRoZSBLZXJtaXQgZXhlY3V0YWJsZSwgYW5kIHRoZW4sIGlmIHRoZSBLZXJtaXQg c2NyaXB0IGlzIHRvIGJlCitnaXZlbiBhcmd1bWVudHMgb24gdGhlIGNvbW1hbmQgbGluZSwgYSBz cGFjZSBhbmQgYSBwbHVzIHNpZ24uIFRoZSBzY3JpcHQKK2ZpbGUgbXVzdCBhbHNvIGhhdmUgZXhl Y3V0ZSBwZXJtaXNzaW9uOgorLlBQCisgIGNobW9kICt4IGNvbW1hbmRmaWxlCisuUFAKK0V4Y2Vw dCBmb3IgdGhlICIgKyIgcGFydCwgdGhpcyBpcyBleGFjdGx5IHRoZSBzYW1lIGFzIHlvdSB3b3Vs ZCBkbyBmb3IgYQorc2hlbGwgc2NyaXB0LCBhIFBlcmwgc2NyaXB0LCBldGMuIEhlcmUncyBhIHNp bXBsZSBidXQgdXNlbGVzcyBleGFtcGxlCitzY3JpcHQgdGhhdCByZWd1cmdpdGF0ZXMgaXRzIGFy Z3VtZW50cyAodXAgdG8gdGhyZWUgb2YgdGhlbSk6CisuUFAKKyAgIyEvdXNyL2xvY2FsL2Jpbi9r ZXJtaXQgKworICBpZiBkZWZpbmVkIFxlJTEgZWNobyAiQXJndW1lbnQgMTogXGUlMSIKKyAgaWYg ZGVmaW5lZCBcZSUyIGVjaG8gIkFyZ3VtZW50IDI6IFxlJTIiCisgIGlmIGRlZmluZWQgXGUlMyBl Y2hvICJBcmd1bWVudCAzOiBcZSUzIgorICBpZiBkZWZpbmVkIFxlJTQgZWNobyAiZXRjLi4uIgor ICBleGl0CisuUFAKK0lmIHRoaXMgZmlsZSBpcyBzdG9yZWQgaW4geW91ciBjdXJyZW50IGRpcmVj dG9yeSBhcyAiY29tbWFuZGZpbGUiLCB0aGVuOgorLlBQCisgIC4vY29tbWFuZGZpbGUgb25lIHR3 byB0aHJlZSBmb3VyIGZpdmUKKy5QUAorcHJpbnRzOgorLlBQCisgIEFyZ3VtZW50IDE6IG9uZQor ICBBcmd1bWVudCAyOiB0d28KKyAgQXJndW1lbnQgMzogdGhyZWUKKyAgZXRjLi4uCisuUFAKK1Ro aXMgaWxsdXN0cmF0ZXMgdGhlIGJhc2ljIHN0cnVjdHVyZSBvZiBhIHN0YW5kYWxvbmUgS2VybWl0 IHNjcmlwdDogdGhlCisia2VyYmFuZyBsaW5lIiwgdGhlbiBzb21lIGNvbW1hbmRzLiBJdCBzaG91 bGQgZW5kIHdpdGggImV4aXQiIHVubGVzcyB5b3UKK3dhbnQgdGhlIEtlcm1pdCBwcm9tcHQgdG8g YXBwZWFyIHdoZW4gaXQgaXMgZmluaXNoZWQuIFxlJTEgaXMgdGhlIGZpcnN0Cithcmd1bWVudCwg XGUlMiB0aGUgc2Vjb25kLCBhbmQgc28gb24uCisuUFAKK1lvdSBjYW4gYWxzbyBjcmVhdGUgeW91 ciBvd24gY29tbWFuZHMgYnkgZGVmaW5pbmcgbmFtZWQgbWFjcm9zIGNvbXBvc2VkIG9mCitvdGhl ciBLZXJtaXQgY29tbWFuZHMgKG9yIG1hY3JvcykuIEZvciBleGFtcGxlOgorLlBQCisubmYKKyAg ZGVmaW5lIG15ZGVsZXRlIHsKKyAgICAgIGxvY2FsIHRyYXNoCisgICAgICBhc3NpZ24gdHJhc2gg XGV2KGhvbWUpdHJhc2hjYW4vCisgICAgICBpZiBub3QgZGVmaW5lZCBcZSUxIGVuZCAxICJEZWxl dGUgd2hhdD8iCisgICAgICBpZiB3aWxkIFxlJTEgeworICAgICAgICAgIGVuZCAxICJEZWxldGlu ZyBtdWx0aXBsZSBmaWxlcyBpcyB0b28gc2NhcnkiCisgICAgICB9CisgICAgICBpZiBub3QgZXhp c3QgXGUlMSBlbmQgMSAiSSBjYW4ndCBmaW5kIFxlJTEiCisgICAgICBpZiBub3QgZGlyZWN0b3J5 IFxlbSh0cmFzaCkgeworICAgICAgICAgIG1rZGlyIFxlbSh0cmFzaCkKKyAgICAgICAgICBpZiBm YWlsIGVuZCAxICJObyB0cmFzaCBjYW4iCisgICAgICB9CisgICAgICByZW5hbWUgL2xpc3QgXGUl MSBcZW0odHJhc2gpCisgIH0KKyAgZGVmaW5lIG15dW5kZWxldGUgeworICAgICAgbG9jYWwgdHJh c2gKKyAgICAgIGFzc2lnbiB0cmFzaCBcZXYoaG9tZSl0cmFzaGNhbi8KKyAgICAgIGlmIG5vdCBk ZWZpbmVkIFxlJTEgZW5kIDEgIlVuZGVsZXRlIHdoYXQ/IgorICAgICAgaWYgd2lsZCBcZSUxIHsK KyAgICAgICAgICBlbmQgMSAiVW5kZWxldGluZyBtdWx0aXBsZSBmaWxlcyBpcyB0b28gaGFyZCIK KyAgICAgIH0KKyAgICAgIGlmIG5vdCBkaXJlY3RvcnkgXGVtKHRyYXNoKSBlbmQgMSAiTm8gdHJh c2ggY2FuIgorICAgICAgaWYgbm90IGV4aXN0IFxlbSh0cmFzaClcZSUxIHsKKyAgICAgICAgICBl bmQgMSAiSSBjYW4ndCBmaW5kIFxlJTEgaW4gdHJhc2ggY2FuIgorICAgICAgfQorICAgICAgcmVu YW1lIC9saXN0IFxlbSh0cmFzaClcZSUxIC4KKyAgfQorLlBQCisuZmkKK1RoZXNlIHNhbXBsZSBt YWNyb3MgYXJlIG5vdCBleGFjdGx5IHByb2R1Y3Rpb24gcXVhbGl0eSAodGhleSBkb24ndCBoYW5k bGUKK2ZpbGVuYW1lcyB0aGF0IGluY2x1ZGUgcGF0aCBzZWdtZW50cywgdGhleSBkb24ndCBoYW5k bGUgbXVsdGlwbGUgZmlsZXMsCitldGMpLCBidXQgeW91IGdldCB0aGUgaWRlYTogeW91IGNhbiBw YXNzIGFyZ3VtZW50cyB0byBtYWNyb3MsIGFuZCB0aGV5IGNhbgorY2hlY2sgdGhlbSBhbmQgbWFr ZSBvdGhlciBraW5kcyBvZiBkZWNpc2lvbnMuIElmIHlvdSBwdXQgdGhlIGFib3ZlIGxpbmVzCitp bnRvIHlvdXIgaW5pdGlhbGl6YXRpb24gb3IgY3VzdG9taXphdGlvbiBmaWxlIChleHBsYWluZWQg YmVsb3cpLCB5b3UnbGwKK2hhdmUgTVlERUxFVEUgYW5kIE1ZVU5ERUxFVEUgY29tbWFuZHMgYXZh aWxhYmxlIGV2ZXJ5IHRpbWUgeW91IHN0YXJ0CitLZXJtaXQsIGF0IGxlYXN0IGFzIGxvbmcgYXMg eW91IGRvbid0IHN1cHByZXNzIGV4ZWN1dGlvbiBvZiB0aGUKK2luaXRpYWxpemF0aW9uIGZpbGUu IChFeGVyY2lzZSBmb3IgdGhlIHJlYWRlcjogTWFrZSB0aGVzZSBtYWNyb3MgZ2VuZXJhbGx5Cit1 c2VmdWw6IHJlbW92ZSBsaW1pdGF0aW9ucywgYWRkIHRyYXNoY2FuIGRpc3BsYXksIGJyb3dzaW5n LCBlbXB0eWluZywgZXRjLikKKy5QUAorS2VyYmFuZyBzY3JpcHRzIGV4ZWN1dGUgd2l0aG91dCB0 aGUgaW5pdGlhbGl6YXRpb24gZmlsZS4gVGhpcyB0byBrZWVwIHRoZW0KK3BvcnRhYmxlIGFuZCBh bHNvIHRvIG1ha2UgdGhlbSBzdGFydCBmYXN0ZXIuIElmIHlvdSB3YW50IHRvIHdyaXRlIEtlcmJh bmcKK3NjcmlwdHMgdGhhdCBkZXBlbmQgb24gdGhlIGluaXRpYWxpemF0aW9uIGZpbGUsIGluY2x1 ZGUgdGhlIGNvbW1hbmQKKy5QUAorICB0YWtlIFxldihob21lKS5rZXJtcmMKKy5QUAorYXQgdGhl IGRlc2lyZWQgc3BvdCBpbiB0aGUgc2NyaXB0LiBCeSB0aGUgd2F5LCBcZXYoeHh4KSBpcyBhIGJ1 aWx0XChoeWluCit2YXJpYWJsZSAoeHh4IGlzIHRoZSB2YXJpYWJsZSBuYW1lLCAiaG9tZSIgaW4g dGhpcyBjYXNlKS4gVG8gc2VlIHdoYXQKK2J1aWx0XChoeWluIHZhcmlhYmxlcyBhcmUgYXZhaWxh YmxlLCB0eXBlICJzaG93IHZhcmlhYmxlcyIgYXQgdGhlIENcKGh5S2VybWl0Citwcm9tcHQuIFRv IHNlZSB3aGF0IGVsc2UgeW91IGNhbiBzaG93LCB0eXBlICJzaG93ID8iLiBcZW0oeHh4KSBpcyBh IHVzZXIKK2RlZmluZWQgdmFyaWFibGUgKHN0cmljdGx5IHNwZWFraW5nLCBpdCBpcyBhIG1hY3Jv IHVzZWQgYXMgYSB2YXJpYWJsZSkuCisuU1MgQ29tbWFuZCBMaXN0CitDXChoeUtlcm1pdCBoYXMg bW9yZSB0aGFuIDIwMCB0b3BcKGh5bGV2ZWwgY29tbWFuZHMsIGFuZCBzb21lIG9mIHRoZXNlLCBz dWNoIGFzCitTRVQsIGJyYW5jaCBvZmYgaW50byBodW5kcmVkcyBvZiBzdWJjb21tYW5kcyBvZiB0 aGVpciBvd24sIHNvIGl0J3Mgbm90CitwcmFjdGljYWwgdG8gZGVzY3JpYmUgdGhlbSBhbGwgaGVy ZS4gSW5zdGVhZCwgaGVyZSdzIGEgY29uY2lzZSBsaXN0IG9mIHRoZQorbW9zdCBjb21tb25seSB1 c2VkIHRvcFwoaHlsZXZlbCBjb21tYW5kcywgZ3JvdXBlZCBieSBjYXRlZ29yeS4gVG8gbGVhcm4g YWJvdXQKK2VhY2ggY29tbWFuZCwgdHlwZSAiaGVscCIgZm9sbG93ZWQgYnkgdGhlIGNvbW1hbmQg bmFtZSwgZS5nLiAiaGVscCBzZXQiLgorVGVybXMgc3VjaCBhcyBDb21tYW5kIHN0YXRlIGFuZCBD b25uZWN0IHN0YXRlIGFyZSBleHBsYWluZWQgaW4gc3Vic2VxdWVudAorc2VjdGlvbnMuCisuUFAK K09wdGlvbmFsIGZpZWxkcyBhcmUgc2hvd24gaW4gWyBicmFja2V0cyBdLiAgImZpbGVuYW1lIiBt ZWFucyB0aGUKK25hbWUgb2YgYSBzaW5nbGUgZmlsZS4gZmlsZXNwZWMgbWVhbnMgYSBmaWxlIHNw ZWNpZmljYXRpb24gdGhhdCBpcyBhbGxvd2VkCit0byBjb250YWluIHdpbGRjYXJkIGNoYXJhY3Rl cnMgbGlrZSAnKicgdG8gbWF0Y2ggZ3JvdXBzIG9mIGZpbGVzLiBvcHRpb25zCithcmUgKG9wdGlv bmFsKSBzd2l0Y2hlcyBsaWtlIC9QQUdFLCAvTk9QQUdFLCAvUVVJRVQsIGV0YywgbGlzdGVkIGlu IHRoZQorSEVMUCB0ZXh0IGZvciBlYWNoIGNvbW1hbmQuIEV4YW1wbGU6CisuUFAKKy5uZgorICBz ZW5kIC9yZWN1cnNpdmUgL2xhcmdlcjoxMDAwMCAvYWZ0ZXI6XC0xd2VlayAvZXhjZXB0OioudHh0 ICoKKy5maQorLlBQCit3aGljaCBjYW4gYmUgcmVhZCBhcyAic2VuZCBhbGwgdGhlIGZpbGVzIGlu IHRoaXMgZGlyZWN0b3J5IGFuZCBhbGwgdGhlIG9uZXMKK3VuZGVybmVhdGggaXQgdGhhdCBhcmUg bGFyZ2VyIHRoYW4gMTAwMDAgYnl0ZXMsIG5vIG1vcmUgdGhhbiBvbmUgd2VlayBvbGQsCithbmQg d2hvc2UgbmFtZXMgZG9uJ3QgZW5kIHdpdGggIi50eHQiLgorLlNTCitCYXNpYyBDb21tYW5kcwor LlJTCisuVFAKK0hFTFAKK1JlcXVlc3RzIHRvcFwoaHlsZXZlbCBoZWxwLgorLlRQCitIRUxQIGNv bW1hbmQKK1JlcXVlc3RzIGhlbHAgYWJvdXQgdGhlIGdpdmVuIGNvbW1hbmQuCisuVFAKK0lOVFJP RFVDVElPTgorUmVxdWVzdHMgYSBicmllZiBpbnRyb2R1Y3Rpb24gdG8gQ1woaHlLZXJtaXQuCisu VFAKK0xJQ0VOU0UKK0Rpc3BsYXlzIHRoZSBDXChoeUtlcm1pdCBzb2Z0d2FyZSBjb3B5cmlnaHQg YW5kIGxpY2Vuc2UuCisuVFAKK1ZFUlNJT04KK0Rpc3BsYXlzIENcKGh5S2VybWl0J3MgdmVyc2lv biBudW1iZXIuCisuVFAKK0VYSVQgWyBudW1iZXIgXQorRXhpdHMgZnJvbSBLZXJtaXQgd2l0aCB0 aGUgZ2l2ZW4KK3N0YXR1cyBjb2RlLiBTeW5vbnltczogUVVJVCwgRSwgUS4KKy5UUAorVEFLRSBm aWxlbmFtZSBbIHBhcmFtZXRlcnMuLi4gXQorRXhlY3V0ZXMgY29tbWFuZHMgZnJvbSB0aGUgZ2l2 ZW4KKy5UUAorTE9HIGl0ZW0gWyBmaWxlbmFtZSBdCitLZWVwcyBhIGxvZyBvZiB0aGUgZ2l2ZW4g aXRlbSBpbiB0aGUgZ2l2ZW4gZmlsZS4KKy5UUAorWyBETyBdIG1hY3JvIFsgcGFyYW1ldGVycy4u LiBdCitFeGVjdXRlcyBjb21tYW5kcyBmcm9tIHRoZSBnaXZlbiBtYWNyby4KKy5UUAorU0VUIHBh cmFtZXRlciB2YWx1ZQorU2V0cyB0aGUgZ2l2ZW4gcGFyYW1ldGVyIHRvIHRoZSBnaXZlbiB2YWx1 ZS4KKy5UUAorU0hPVyBjYXRlZ29yeQorU2hvd3Mgc2V0dGluZ3MgaW4gYSBnaXZlbiBjYXRlZ29y eS4KKy5UUAorU1RBVFVTCitUZWxscyB3aGV0aGVyIHByZXZpb3VzIGNvbW1hbmQgc3VjY2VlZGVk IG9yIGZhaWxlZC4KKy5UUAorREFURSBbIGRhdGVcKGh5YW5kL29yXChoeXRpbWUgXQorU2hvd3Mg Y3VycmVudCBkYXRlXChoeXRpbWUgb3IgaW50ZXJwcmV0cyBnaXZlbiBkYXRlXChoeXRpbWUuCisu VFAKK1JVTiBbIGV4dGVyblwoaHljb21tYW5kIFsgcGFyYW1ldGVycy4uLiBdICAgICAgICAgICAg ICAgICAKK1J1bnMgdGhlIGdpdmVuIGV4dGVybmFsIGNvbW1hbmQuIFN5bm9ueW06ICEuCisuVFAK K0VYRUMgWyBleHRlcm5cKGh5Y29tbWFuZCBbIHBhcmFtcy4uLiBdCitLZXJtaXQgb3ZlcmxheXMg aXRzZWxmIHdpdGggdGhlIGdpdmVuIGNvbW1hbmQuCisuVFAKK1NVU1BFTkQKK1N0b3BzIEtlcm1p dCBhbmQgcHV0cyBpdCBpbiB0aGUgYmFja2dyb3VuZC4gU3lub255bTogWi4KKy5SRQorLlNTCitM b2NhbCBGaWxlIE1hbmFnZW1lbnQKKy5SUworLlRQCitUWVBFIFsgb3B0aW9ucyBdIGZpbGVuYW1l CitEaXNwbGF5cyB0aGUgY29udGVudHMgb2YgdGhlIGdpdmVuIGZpbGUuCisuVFAKK01PUkUgWyBv cHRpb25zIF0gZmlsZW5hbWUgICAgIAorRXF1aXZhbGVudCB0byBUWVBFIC9QQUdFIChwYXVzZSBh ZnRlciBlYWNoIHNjcmVlbmZ1bCkuCisuVFAKK0NBVCBbIG9wdGlvbnMgXSBmaWxlbmFtZSAgICAg IAorRXF1aXZhbGVudCB0byBUWVBFIC9OT1BBR0UuCisuVFAKK0hFQUQgWyBvcHRpb25zIF0gZmls ZW5hbWUgICAgIAorRGlzcGxheXMgdGhlIGZpcnN0IGZldyBsaW5lcyBvZiBhIGdpdmVuIGZpbGUu CisuVFAKK1RBSUwgWyBvcHRpb25zIF0gZmlsZW5hbWUgICAgIAorRGlzcGxheXMgdGhlIGxhc3Qg ZmV3IGxpbmVzIG9mIGEgZ2l2ZW4gZmlsZS4KKy5UUAorR1JFUCBbIG9wdGlvbnMgXSBwYXR0ZXJu IGZpbGVzcGVjCitEaXNwbGF5cyBsaW5lcyBmcm9tIGZpbGVzIHRoYXQgbWF0Y2gKK3RoZSBwYXR0 ZXJuLiBTeW5vbnltOiBGSU5ELgorLlRQCitESVJFQ1RPUlkgWyBvcHRpb25zIF0gW2ZpbGVzcGVj IF0KK0xpc3RzIGZpbGVzIChidWlsdFwoaHlpbiwgbWFueSBvcHRpb25zKS4KKy5UUAorTFMgWyBv cHRpb25zIF0gWyBmaWxlc3BlYyBdICAgCitMaXN0cyBmaWxlcyAocnVucyBleHRlcm5hbCAibHMi IGNvbW1hbmQpLgorLlRQCitERUxFVEUgWyBvcHRpb25zIF0gWyBmaWxlc3BlYyBdCitEZWxldGVz IGZpbGVzLiBTeW5vbnltOiBSTS4KKy5UUAorUFVSR0UgWyBvcHRpb25zIF0gWyBmaWxlc3BlYyBd CitSZW1vdmVzIGJhY2t1cCAoKi5+bn4pIGZpbGVzLgorLlRQCitDT1BZIFsgb3B0aW9ucyBdIFsg ZmlsZXNwZWNzLi4uIF0KK0NvcGllcyBmaWxlcy4gU3lub255bTogQ1AuCisuVFAKK1JFTkFNRSBb IG9wdGlvbnMgXSBbIGZpbGVzcGVjcy4uLiBdCitSZW5hbWVzIGZpbGVzLiBTeW5vbnltOiBNVi4K Ky5UUAorQ0hNT0QgWyBvcHRpb25zIF0gWyBmaWxlc3BlY3MuLi4gXQorQ2hhbmdlcyBwZXJtaXNz aW9ucyBvZiBmaWxlcy4KKy5UUAorVFJBTlNMQVRFIGZpbGVuYW1lIGNoYXJzZXRzIFsgZmlsZW5h bWUgXQorQ29udmVydHMgZmlsZSdzIGNoYXJhY3RlciBzZXQuIFN5bm9ueW06IFhMQVRFLgorLlRQ CitDRAorQ2hhbmdlcyB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5IHRvIHlvdXIgaG9tZSBkaXJlY3Rv cnkuCisuVFAKK0NEIGRpcmVjdG9yeQorQ2hhbmdlcyB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5IHRv IHRoZSBvbmUgZ2l2ZW4uCisuVFAKK0NEVVAKK0NoYW5nZXMgeW91ciB3b3JraW5nIGRpcmVjdG9y eSBvbmUgbGV2ZWwgdXAuCisuVFAKK1BXRAorRGlzcGxheXMgeW91ciB3b3JraW5nIGRpcmVjdG9y eS4KKy5UUAorQkFDSworUmV0dXJucyB0byB5b3VyIHByZXZpb3VzIHdvcmtpbmcgZGlyZWN0b3J5 LgorLlRQCitNS0RJUiBbIGRpcmVjdG9yeSBdCitDcmVhdGVzIGEgZGlyZWN0b3J5LgorLlRQCitS TURJUiBbIGRpcmVjdG9yeSBdCitSZW1vdmVzIGEgZGlyZWN0b3J5LgorLlJFCisuU1MKK01ha2lu ZyBDb25uZWN0aW9ucworLlJTCisuVFAKK1NFVCBMSU5FIFsgb3B0aW9ucyBdIGRldmljZW5hbWUg ICAgICAgICAgICAgICAgICAgICAgCitPcGVucyB0aGUgbmFtZWQgc2VyaWFsIHBvcnQuIFN5bm9u eW06IFNFVCBQT1JULgorLlRQCitPUEVOIExJTkUgWyBvcHRpb25zIF0gZGV2aWNlbmFtZQorU2Ft ZSBhcyBTRVQgTElORS4gU3lub255bTogT1BFTiBQT1JULgorLlRQCitTRVQgTU9ERU0gVFlQRSBb IG5hbWUgXQorVGVsbHMgS2VybWl0IHdoYXQga2luZCBvZiBtb2RlbSBpcyBvbiB0aGUgcG9ydC4K Ky5UUAorRElBTCBbIG51bWJlciBdCitUZWxscyBLZXJtaXQgdG8gZGlhbCB0aGUgZ2l2ZW4gcGhv bmUgbnVtYmVyIHdpdGggdGhlIG1vZGVtLgorLlRQCitSRURJQUwKK1JlZGlhbHMgdGhlIG1vc3Qg cmVjZW50bHkgZGlhbGVkIHBob25lIG51bWJlci4KKy5UUAorQU5TV0VSCitXYWl0cyBmb3IgYW5k IGFuc3dlcnMgYW4gaW5jb21pbmcgY2FsbCBvbiB0aGUgbW9kZW0uCisuVFAKK0FVVEhFTlRJQ0FU RSBbIHBhcmFtZXRlcnMuLi4gXQorUGVyZm9ybXMgc2VjdXJlIGF1dGhlbnRpY2F0aW9uIG9uIGEg VENQL0lQIGNvbm5lY3Rpb24uCisuVFAKK1NFVCBORVRXT1JLIFRZUEUgeyBUQ1AvSVAsIFguMjUs IC4uLiB9CitTZWxlY3RzIG5ldHdvcmsgdHlwZSBmb3Igc3Vic2VxdWVudCBTRVQgSE9TVCBjb21t YW5kcy4KKy5UUAorU0VUIEhPU1QgWyBvcHRpb25zIF0gaG9zdCBbIHBvcnQgXSAgICAgICAgICAg ICAgICAgICAgICAgICAgCitPcGVucyBhIG5ldHdvcmsgY29ubmVjdGlvbiB0byB0aGUgZ2l2ZW4g aG9zdCBhbmQgcG9ydC4KKy5UUAorU0VUIEhPU1QgKiBwb3J0CitXYWl0cyBmb3IgYW4gaW5jb21p bmcgVENQL0lQIGNvbm5lY3Rpb24gb24gdGhlIGdpdmVuIHBvcnQuCisuVFAKK1RFTE5FVCBbIG9w dGlvbnMgXSBob3N0CitPcGVucyBhIFRlbG5ldCBjb25uZWN0aW9uIHRvIHRoZSBob3N0IGFuZCBl bnRlcnMgQ29ubmVjdCBzdGF0ZS4KKy5UUAorUkxPR0lOIFsgb3B0aW9ucyBdIGhvc3QKK09wZW5z IGFuIFJsb2dpbiBjb25uZWN0aW9uIHRvIHRoZSBob3N0IGFuZCBlbnRlcnMgQ29ubmVjdCBzdGF0 ZS4KKy5UUAorSUtTRCBbIG9wdGlvbnMgXSBob3N0CitPcGVucyBhIGNvbm5lY3Rpb24gdG8gYW4g SW50ZXJuZXQgS2VybWl0IFNlcnZpY2UuCisuVFAKK1NTSCBbIG9wdGlvbnMgXSBob3N0CitPcGVu cyBhbiBTU0ggY29ubmVjdGlvbiB0byB0aGUgaG9zdCBhbmQgZW50ZXJzIENvbm5lY3Qgc3RhdGUu CisuVFAKK0ZUUCBPUEVOIGhvc3QgWyBvcHRpb25zIF0KK09wZW5zIGFuIEZUUCBjb25uZWN0aW9u IHRvIHRoZSBob3N0LgorLlRQCitIVFRQIFsgb3B0aW9ucyBdIE9QRU4gaG9zdAorT3BlbnMgYW4g SFRUUCBjb25uZWN0aW9uIHRvIHRoZSBob3N0LgorLlRQCitQVFkgZXh0ZXJuYWxcKGh5Y29tbWFu ZAorUnVucyB0aGUgY29tbWFuZCBvbiBhIHBzZXVkb3Rlcm1pbmFsIGFzIGlmIGl0IHdlcmUgYSBj b25uZWN0aW9uLgorLlRQCitQSVBFIGV4dGVybmFsXChoeWNvbW1hbmQKK1J1bnMgdGhlIGNvbW1h bmQgdGhyb3VnaCBhIHBpcGUgYXMgaWYgaXQgd2VyZSBhIGNvbm5lY3Rpb24uCisuUkUKKy5TUwor VXNpbmcgQ29ubmVjdGlvbnMKKy5SUworLlRQCitDT05ORUNUIFsgb3B0aW9ucyBdCitFbnRlcnMg Q29ubmVjdCAodGVybWluYWwpIHN0YXRlLiAgU3lub255bTogQy4KKy5UUAorUkVESVJFQ1QgY29t bWFuZAorUmVkaXJlY3RzIHRoZSBnaXZlbiBleHRlcm5hbCBjb21tYW5kIG92ZXIgdGhlIGNvbm5l Y3Rpb24uCisuVFAKK1RFTE9QVCBjb21tYW5kCitTZW5kcyBhIFRlbG5ldCBwcm90b2NvbCBjb21t YW5kIChUZWxuZXQgY29ubmVjdGlvbnMgb25seSkuCisuVFAKK0N0cmxcLVxlQworIkVzY2FwZXMg YmFjayIgZnJvbSBDb25uZWN0IHN0YXRlIHRvIENvbW1hbmQgc3RhdGUuCisuVFAKK0N0cmxcLVxl QgorKEluIENvbm5lY3Qgc3RhdGUpIFNlbmRzIGEgQlJFQUsgc2lnbmFsIChzZXJpYWwgb3IgVGVs bmV0KS4KKy5UUAorQ3RybFwtXGUhCisoSW4gQ29ubmVjdCBzdGF0ZSkgRW50ZXJzIGluZmVyaW9y IHNoZWxsOyAiZXhpdCIgdG8gcmV0dXJuLgorLlRQCitDdHJsXC1cZT8KKyhJbiBDb25uZWN0IHN0 YXRlKSBTaG93cyBhIG1lbnUgb2Ygb3RoZXIgZXNjYXBlXChoeWxldmVsIG9wdGlvbnMuCisuVFAK K0N0cmxcLVxlQ3RybFwtXGUKKyhJbiBDb25uZWN0IHN0YXRlKSBUeXBlIHR3bworQ3RybFwtQmFj a3NsYXNoZXMgdG8gc2VuZCBvbmUgb2YgdGhlbS4KKy5UUAorU0VUIEVTQ0FQRSBbIGNoYXJhY3Rl ciBdCitDaGFuZ2VzIEtlcm1pdCdzIENvbm5lY3RcKGh5c3RhdGUgZXNjYXBlIGNoYXJhY3Rlci4K Ky5SRQorLlNTCitDbG9zaW5nIENvbm5lY3Rpb25zCisuUlMKKy5UUAorSEFOR1VQCitIYW5ncyB1 cCB0aGUgY3VycmVudGx5IG9wZW4KK3NlcmlhbFwoaHlwb3J0IG9yIG5ldHdvcmsgY29ubmVjdGlv bi4KKy5UUAorQ0xPU0UKK0Nsb3NlcyB0aGUgY3VycmVudGx5IG9wZW4KK3NlcmlhbFwoaHlwb3J0 IG9yIG5ldHdvcmsgY29ubmVjdGlvbi4KKy5UUAorU0VUIExJTkUgKHdpdGggbm8gZGV2aWNlbmFt ZSkKK0Nsb3NlcyB0aGUgY3VycmVudGx5IG9wZW4KK3NlcmlhbFwoaHlwb3J0IG9yIG5ldHdvcmsg Y29ubmVjdGlvbi4KKy5UUAorU0VUIEhPU1QgKHdpdGggbm8gaG9zdG5hbWUpCitDbG9zZXMgdGhl IGN1cnJlbnRseSBvcGVuIHNlcmlhbFwoaHlwb3J0IG9yIG5ldHdvcmsgY29ubmVjdGlvbi4KKy5U UAorRlRQIENMT1NFCitDbG9zZXMgdGhlIGN1cnJlbnRseSBvcGVuIEZUUCBjb25uZWN0aW9uLgor LlRQCitIVFRQIENMT1NFCitDbG9zZXMgdGhlIGN1cnJlbnRseSBvcGVuIEhUVFAgY29ubmVjdGlv bi4KKy5UUAorRVhJVCAKK0Fsc28gY2xvc2VzIGFsbCBjb25uZWN0aW9ucy4gU3lub255bTogUVVJ VC4KKy5UUAorU0VUIEVYSVQgV0FSTklORyBPRkYKK1N1cHByZXNzZXMgd2FybmluZyBhYm91dCBv cGVuIGNvbm5lY3Rpb25zIG9uIGV4aXQgb3IgY2xvc2UuCisuUkUKKy5TUworRmlsZSBUcmFuc2Zl cgorLlJTCisuVFAKK1NFTkQgWyBvcHRpb25zIF0gZmlsZW5hbWUgWyBhc1woaHluYW1lIF0KK1Nl bmRzIHRoZSBnaXZlbiBmaWxlLiBTeW5vbnltOiBTLgorLlRQCitTRU5EIFsgb3B0aW9ucyBdIGZp bGVzcGVjCitTZW5kcyBhbGwgZmlsZXMgdGhhdCBtYXRjaC4KKy5UUAorUkVTRU5EIFsgb3B0aW9u cyBdIGZpbGVzcGVjCitSZXN1bWVzIGFuIGludGVycnVwdGVkIFNFTkQgZnJvbSB0aGUgcG9pbnQg b2YgZmFpbHVyZS4KKy5UUAorUkVDRUlWRSBbIG9wdGlvbnMgXSBbIGFzXChoeW5hbWUgXSAgICAg ICAgICAgICAgICAgICAgCitXYWl0cyBwYXNzaXZlbHkgZm9yIGZpbGVzIHRvIGFycml2ZS4gU3lu b255bTogUi4KKy5UUAorTE9HIFRSQU5TQUNUSU9OUyBbIGZpbGVuYW1lIF0KK0tlZXBzIGEgcmVj b3JkIG9mIGZpbGUgdHJhbnNmZXJzLgorLlRQCitGQVNUCitVc2UgZmFzdCBmaWxlXChoeXRyYW5z ZmVyIHNldHRpbmdzIChkZWZhdWx0KS4KKy5UUAorQ0FVVElPVVMKK1VzZSBjYXV0aW91cyBhbmQg bGVzcyBmYXN0IGZpbGVcKGh5dHJhbnNmZXIgc2V0dGluZ3MuCisuVFAKK1JPQlVTVAorVXNlIHVs dHJhXChoeWNvbnNlcnZhdGl2ZSBhbmQgc2xvdyBmaWxlXChoeXRyYW5zZmVyIHNldHRpbmdzLgor LlRQCitTVEFUSVNUSUNTIFsgb3B0aW9ucyBdIAorR2l2ZXMgc3RhdGlzdGljcyBhYm91dCB0aGUg bW9zdCByZWNlbnQgZmlsZSB0cmFuc2Zlci4KKy5UUAorV0hFUkUKK0FmdGVyIHRyYW5zZmVyOiAi V2hlcmUgZGlkIG15IGZpbGVzIGdvPyIuCisuVFAKK1RSQU5TTUlUIFsgb3B0aW9ucyBdIFtvZmls ZW5hbWUgXQorU2VuZHMgZmlsZSB3aXRob3V0IHByb3RvY29sLiBTeW5vbnltOiBYTUlULgorLlRQ CitMT0cgU0VTU0lPTiBbIGZpbGVuYW1lIF0KK0NhcHR1cmVzIHJlbW90ZSB0ZXh0IG9yIGZpbGVz IHdpdGhvdXQgcHJvdG9jb2wuCisuVFAKK1NFVCBQUk9UT0NPTCBbIG5hbWUuLi4gXQorVGVsbHMg S2VybWl0IHRvIHVzZSBhbiBleHRlcm5hbCBmaWxlXChoeXRyYW5zZmVyIHByb3RvY29sLgorLlRQ CitGVFAgeyBQVVQsIE1QVVQsIEdFVCwgTUdFVCwgLi4uIH0KK0ZUUCBjbGllbnQgY29tbWFuZHMu CisuVFAKK0hUVFAgeyBQVVQsIEdFVCwgSEVBRCwgUE9TVCwgLi4uIH0KK0hUVFAgY2xpZW50IGNv bW1hbmRzLgorLlJFCisuU1MKK0tlcm1pdCBTZXJ2ZXIKKy5SUworLlRQCitFTkFCTEUsIERJU0FC TEUKK0NvbnRyb2xzIHdoaWNoIHNlcnZlciBmZWF0dXJlcyBjYW4gYmUgdXNlZCBieSBjbGllbnRz LgorLlRQCitTRVQgU0VSVkVSCitTZXRzIHBhcmFtZXRlcnMgcHJpb3IgdG8gZW50ZXJpbmcgU2Vy dmVyIHN0YXRlLgorLlRQCitTRVJWRVIKK0VudGVycyBTZXJ2ZXIgc3RhdGUuCisuUkUKKy5TUwor Q2xpZW50IG9mIEtlcm1pdCBvciBGVFAgU2VydmVyCisuUlMKKy5UUAorWyBSRU1PVEUgXSBMT0dJ TiBbIHVzZXIgcGFzc3dvcmQgXSAgICAgICAgIAorTG9ncyBpbiB0byBhIEtlcm1pdCBzZXJ2ZXIg b3IgSUtTRCB0aGF0IHJlcXVpcmVzIGl0LgorLlRQCitbIFJFTU9URSBdIExPR09VVAorTG9ncyBv dXQgZnJvbSBhIEtlcm1pdCBzZXJ2ZXIgb3IgSUtTRC4KKy5UUAorU0VORCBbIG9wdGlvbnMgXSBm aWxlbmFtZSBbIGFzXChoeW5hbWUgXSAgICAgICAgICAgICAgICAgICAKK1NlbmRzIHRoZSBnaXZl biBmaWxlIHRvIHRoZSBzZXJ2ZXIuIFN5bm9ueW1zOiBTLCBQVVQuCisuVFAKK1NFTkQgWyBvcHRp b25zIF0gZmlsZXNwZWMKK1NlbmRzIGFsbCBmaWxlcyB0aGF0IG1hdGNoLgorLlRQCitSRVNFTkQg WyBvcHRpb25zIF0gZmlsZXNwZWMKK1Jlc3VtZXMgYW4gaW50ZXJydXB0ZWQgU0VORCBmcm9tIHRo ZSBwb2ludCBvZiBmYWlsdXJlLgorLlRQCitHRVQgWyBvcHRpb25zIF0gcmVtb3RlXChoeWZpbGVz cGVjCitBc2tzIHRoZSBzZXJ2ZXIgdG8gc2VuZCB0aGUgZ2l2ZW4gZmlsZXMuIFN5bm9ueW06IEcu CisuVFAKK1JFR0VUIFsgb3B0aW9ucyBdIHJlbW90ZVwoaHlmaWxlc3BlYworUmVzdW1lcyBhbiBp bnRlcnJ1cHRlZCBHRVQgZnJvbSB0aGUgcG9pbnQgb2YgZmFpbHVyZS4KKy5UUAorUkVNT1RFIENE IFsgZGlyZWN0b3J5IF0KK0Fza3Mgc2VydmVyIHRvIGNoYW5nZSBpdHMgd29ya2luZworZGlyZWN0 b3J5LiBTeW5vbnltOiBSQ0QuCisuVFAKK1JFTU9URSBQV0QgWyBkaXJlY3RvcnkgXQorQXNrcyBz ZXJ2ZXIgdG8gZGlzcGxheSBpdHMgd29ya2luZyBkaXJlY3RvcnkuIFN5bm9ueW06IFJQV0QuCisu VFAKK1JFTU9URSBESVJFQ1RPUlkgWyBmaWxlc3BlYy4uLiBdCitBc2tzIHNlcnZlciB0byBzZW5k IGEgZGlyZWN0b3J5IGxpc3RpbmcuIFN5bm9ueW06IFJESVIuCisuVFAKK1JFTU9URSBERUxFVEUg WyBmaWxlc3BlYy4uLiBdCitBc2tzIHNlcnZlciB0byBkZWxldGUgZmlsZXMuIFN5bm9ueW06IFJE RUwuCisuVFAKK1JFTU9URSBbIGNvbW1hbmQuLi4gXQorKE1hbnkgb3RoZXIgY29tbWFuZHM6ICJy ZW1vdGUgPyIgZm9yIGEgbGlzdCkuCisuVFAKK01BSUwgWyBvcHRpb25zIF0gZmlsZXNwZWMKK1Nl bmRzIGZpbGUocykgdG8gYmUgZGVsaXZlcmVkIGFzIGVcKGh5bWFpbCAoS2VybWl0IG9ubHkpLgor LlRQCitGSU5JU0gKK0Fza3MgdGhlIHNlcnZlciB0byBleGl0IHNlcnZlciBzdGF0ZSAoS2VybWl0 IG9ubHkpLgorLlRQCitCWUUKK0Fza3MgdGhlIHNlcnZlciB0byBsb2cgb3V0IGFuZCBjbG9zZSB0 aGUgY29ubmVjdGlvbi4KKy5SRQorLlNTCitTY3JpcHQgUHJvZ3JhbW1pbmcKKy5QUAorLlJTCitE RUZJTkUsIERFQ0xBUkUsIFVOREVGSU5FLCBVTkRFQ0xBUkUsIEFTU0lHTiwgRVZBTFVBVEUsIFNF WFBSRVNTSU9OLAorQVJSQVksIFNPUlQsIElOUFVULCBPVVRQVVQsIElGLCBGT1IsIFdISUxFLCBT V0lUQ0gsIEdPVE8sIEVDSE8sIEFTSywKK0dFVEMsIEdFVE9LLCBBU1NFUlQsIFdBSVQsIFNMRUVQ LCBGT1BFTiwgRlJFQUQsIEZXUklURSwgRkNMT1NFLCBTVE9QLAorRU5ELCBSRVRVUk4sIExFQVJO LCBTSElGVCwgVFJBQ0UsIFZPSUQsIElOQ1JFTUVOVCwgREVDUkVNRU5ULCAuLi4gRm9yCit0aGVz ZSBhbmQgbWFueSBtb3JlIHlvdSdsbCBuZWVkIHRvIGNvbnN1bHQgdGhlIG1hbnVhbCBhbmQgc3Vw cGxlbWVudHMsCithbmQvb3IgdmlzaXQgdGhlIEtlcm1pdCBTY3JpcHQgTGlicmFyeSwgd2hpY2gg YWxzbyBpbmNsdWRlcyBhIGJyaWVmCit0dXRvcmlhbC4gSGludDogSEVMUCBMRUFSTiB0byBmaW5k IG91dCBob3cgdG8gZ2V0IEtlcm1pdCB0byB3cml0ZQorc2ltcGxlIHNjcmlwdHMgZm9yIHlvdS4K Ky5SRQorLlBQCitNYW55IG9mIEtlcm1pdCdzIGNvbW1hbmRzIGhhdmUgc3lub255bXMsIHZhcmlh bnRzLCByZWxhdGl2ZXMsIGFuZCBzbyBvbi4KK0ZvciBleGFtcGxlLCBNU0VORCBpcyBhIHZlcnNp b24gb2YgU0VORCB0aGF0IGFjY2VwdHMgYSBsaXN0IG9mIGZpbGUKK3NwZWNpZmljYXRpb25zIHRv IGJlIHNlbnQsIHJhdGhlciB0aGFuIGp1c3Qgb25lIGZpbGUgc3BlY2lmaWNhdGlvbiwgYW5kCitN UFVUIGlzIGEgc3lub255bSBvZiBNU0VORC4gTU9WRSBtZWFucyB0byBTRU5EIGFuZCB0aGVuIERF TEVURSB0aGUgc291cmNlCitmaWxlIGlmIHN1Y2Nlc3NmdWwuIE1NT1ZFIGlzIGxpa2UgTU9WRSwg YnV0IGFjY2VwdHMgYSBsaXN0IG9mIGZpbGVzcGVjcywKK2FuZCBzbyBvbi4gVGhlc2UgYXJlIGRl c2NyaWJlZCBpbiB0aGUgZnVsbCBkb2N1bWVudGF0aW9uLgorLlBQCitVc2UgcXVlc3Rpb24gbWFy ayB0byBmZWVsIHlvdXIgd2F5IHRocm91Z2ggYW4gdW5mYW1pbGlhciBjb21tYW5kLCBhcyBpbgor dGhpcyBleGFtcGxlOgorLlBQCisubmYKKyAgQ1wtS2VybWl0PiByZW1vdGUgPyBPbmUgb2YgdGhl IGZvbGxvd2luZzoKKyAgIGFzc2lnbiAgICAgZGlyZWN0b3J5ICBrZXJtaXQgICAgIHByaW50ICAg ICAgcm1kaXIKKyAgIGNkICAgICAgICAgZXhpdCAgICAgICBsb2dpbiAgICAgIHB3ZCAgICAgICAg c2V0CisgICBjb3B5ICAgICAgIGhlbHAgICAgICAgbG9nb3V0ICAgICBxdWVyeSAgICAgIHNwYWNl CisgICBkZWxldGUgICAgIGhvc3QgICAgICAgbWtkaXIgICAgICByZW5hbWUgICAgIHR5cGUKKyAg Q1wtS2VybWl0PiByZW1vdGUgc2V0ID8gT25lIG9mIHRoZSBmb2xsb3dpbmc6CisgICBhdHRyaWJ1 dGVzICAgZmlsZSAgICAgICAgIHJldHJ5ICAgICAgICB0cmFuc2ZlcgorICAgYmxvY2tcLWNoZWNr ICByZWNlaXZlICAgICAgc2VydmVyICAgICAgIHdpbmRvdworICBDXC1LZXJtaXQ+IHJlbW90ZSBz ZXQgZmlsZSA/IE9uZSBvZiB0aGUgZm9sbG93aW5nOgorICAgY2hhcmFjdGVyXC1zZXQgIGluY29t cGxldGUgICAgIHJlY29yZFwtbGVuZ3RoCisgICBjb2xsaXNpb24gICAgICBuYW1lcyAgICAgICAg ICB0eXBlCisgIENcLUtlcm1pdD4gcmVtb3RlIHNldCBmaWxlIG5hbWVzID8gT25lIG9mIHRoZSBm b2xsb3dpbmc6CisgICBjb252ZXJ0ZWQgIGxpdGVyYWwKKyAgQ1wtS2VybWl0PiByZW1vdGUgc2V0 IGZpbGUgbmFtZXMgbGl0ZXJhbAorICBDXC1LZXJtaXQ+CisuUFAKKy5maQorVGhpcyBpcyBjYWxs ZWQgbWVudSBvbiBkZW1hbmQ6IHlvdSBnZXQgYSBtZW51IHdoZW4geW91IHdhbnQgb25lLCBidXQg bWVudXMKK2FyZSBub3QgZm9yY2VkIG9uIHlvdSBldmVuIHdoZW4ga25vdyB3aGF0IHlvdSdyZSBk b2luZy4gTm90ZSB0aGF0IHlvdSBjYW4KK2Fsc28gYWJicmV2aWF0ZSBtb3N0IGtleXdvcmRzLCBh bmQgeW91IGNhbiBjb21wbGV0ZSB0aGVtIHdpdGggdGhlIFRhYiBvcgorRXNjIGtleS4gQWxzbyBu b3RlIHRoYXQgPyB3b3JrcyBmb3IgZmlsZW5hbWVzIHRvbywgYW5kIHRoYXQgeW91IGNhbiB1c2Ug aXQKK2luIHRoZSBtaWRkbGUgb2YgYSBrZXl3b3JkIG9yIGZpbGVuYW1lLCBub3QganVzdCBhdCB0 aGUgYmVnaW5uaW5nLiBGb3IKK2V4YW1wbGUsICJzZW5kIHg/IiBsaXN0cyBhbGwgdGhlIGZpbGVz IGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSB3aG9zZSBuYW1lcworc3RhcnQgd2l0aCAneCcuCisu U0ggSU5JVElBTElaQVRJT04gRklMRQorSW4gaXRzIGRlZmF1bHQgY29uZmlndXJhdGlvbiwgQ1wo aHlLZXJtaXQgZXhlY3V0ZXMgY29tbWFuZHMgZnJvbSBhIGZpbGUgCitjYWxsZWQgLmtlcm1yYyBp biB5b3VyIGhvbWUgZGlyZWN0b3J5IHdoZW4gaXQgc3RhcnRzLCB1bmxlc3MgaXQgaXMgZ2l2ZW4g dGhlCitcLVkgb3IgXC15IGNvbW1hbmRcKGh5bGluZSBvcHRpb24uIEN1c3RvbSBjb25maWd1cmF0 aW9ucyBtaWdodCBzdWJzdGl0dXRlIGEgc2hhcmVkCitzeXN0ZW1cKGh5d2lkZSBpbml0aWFsaXph dGlvbiBmaWxlLiBUaGUgU0hPVyBGSUxFIGNvbW1hbmQgdGVsbHMgd2hhdAoraW5pdGlhbGl6YXRp b24gZmlsZSwgaWYgYW55LCB3YXMgdXNlZC4gVGhlIHN0YW5kYXJkIGluaXRpYWxpemF0aW9uIGZp bGUKKyJjaGFpbnMiIHRvIGFuIGluZGl2aWR1YWwgY3VzdG9taXphdGlvbiBmaWxlLCAubXlrZXJt YywgaW4gdGhlIGhvbWUgZGlyZWN0b3J5LAoraW4gd2hpY2ggZWFjaCB1c2VyIGNhbiBlc3RhYmxp c2ggaGVyL2hpcyBvd24gcHJlZmVyZW5jZXMsIGRlZmluZSBtYWNyb3MsIGFuZAorc28gb24uCisu UFAKK1NpbmNlIGV4ZWN1dGlvbiBvZiB0aGUgaW5pdGlhbGl6YXRpb24gZmlsZSAoYXQgbGVhc3Qg dGhlIHN0YW5kYXJkIG9uZSkKK21ha2VzIENcKGh5S2VybWl0IHRha2UgbG9uZ2VyIHRvIHN0YXJ0 LCBpdCBtaWdodCBiZSBiZXR0ZXIgbm90IHRvIGhhdmUgYW4KK2luaXRpYWxpemF0aW9uIGZpbGUs IGVzcGVjaWFsbHkgbm93IHRoYXQgS2VybWl0J3MgZGVmYXVsdCBzdGFydHVwCitjb25maWd1cmF0 aW9uIGlzIHdlbGwgYXR0dW5lZCB0byBtb2Rlcm4gY29tcHV0aW5nIGFuZCBuZXR3b3JraW5nIFwo aHlcKGh5IGluCitvdGhlciB3b3JkcywgeW91IG5vIGxvbmdlciBoYXZlIGRvIGFueXRoaW5nIHNw ZWNpYWwgdG8gbWFrZSBLZXJtaXQKK3RyYW5zZmVycyBnbyBmYXN0LiBTbyBpbnN0ZWFkIG9mIGhh dmluZyBhbiBpbml0aWFsaXphdGlvbiBmaWxlIHRoYXQgaXMKK2V4ZWN1dGVkIGV2ZXJ5IHRpbWUg S2VybWl0IHN0YXJ0cywgeW91IG1pZ2h0IGNvbnNpZGVyIG1ha2luZyBvbmUgb3IgbW9yZQora2Vy YmFuZyBzY3JpcHRzICh3aXRoIG5hbWVzIG90aGVyIHRoYXQgLmtlcm1yYykgdGhhdCBkbyBOT1Qg aW5jbHVkZSBhbgorImV4aXQiIGNvbW1hbmQsIGFuZCBpbnZva2UgdGhvc2Ugd2hlbiB5b3UgbmVl ZCB0aGUgc2V0dGluZ3MsIG1hY3JvCitkZWZpbml0aW9ucywgYW5kL29yIHNjcmlwdGVkIGFjdGlv bnMgdGhleSBjb250YWluLCBhbmQgaW52b2tlIENcKGh5S2VybWl0CitkaXJlY3RseSB3aGVuIHlv dSBkb24ndC4KKy5QUAorVG8gcHV0IGl0IGFub3RoZXIgd2F5Li4uIFdlIHN0aWxsIGRpc3RyaWJ1 dGUgdGhlIHN0YW5kYXJkIGluaXRpYWxpemF0aW9uCitmaWxlIHNpbmNlIGl0J3MgZmVhdHVyZWQg aW4gdGhlIG1hbnVhbCBhbmQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgaXMKK2ltcG9ydGFudCB0 byB1cy4gQnV0IHRoZXJlJ3Mgbm8gaGFybSBpbiBub3QgdXNpbmcgaXQgaWYgeW91IGRvbid0IG5l ZWQgdGhlCitzdHVmZiB0aGF0J3MgaW4gaXQgKHNlcnZpY2VzIGRpcmVjdG9yeSwgZGlhbGluZyBk aXJlY3RvcnksIG5ldHdvcmsKK2RpcmVjdG9yeSwgYW5kIGFzc29jaWF0ZWQgbWFjcm8gZGVmaW5p dGlvbnMpLiBPbiB0aGUgb3RoZXIgaGFuZCwgaWYgdGhlcmUKK2FyZSBzZXR0aW5ncyBvciBtYWNy b3MgeW91IHdhbnQgaW4gZWZmZWN0IEVWRVJZIHRpbWUgeW91IHVzZSBLZXJtaXQsIHRoZQoraW5p dGlhbGl6YXRpb24gZmlsZSAob3IgdGhlIGN1c3RvbWl6YXRpb24gZmlsZSBpdCBjaGFpbnMgdG8p IGlzIHRoZSBwbGFjZQordG8gcHV0IHRoZW0sIGJlY2F1c2UgdGhhdCdzIHRoZSBvbmx5IHBsYWNl IEtlcm1pdCBsb29rcyBmb3IgdGhlbQorYXV0b21hdGljYWxseSBlYWNoIHRpbWUgeW91IHN0YXJ0 IGl0LgorLlNIIE1PREVTIE9GIE9QRVJBVElPTgorS2VybWl0IGlzIHNhaWQgdG8gYmUgaW4gTG9j YWwgbW9kZSBpZiBpdCBoYXMgbWFkZSBhIGNvbm5lY3Rpb24gdG8gYW5vdGhlcgorY29tcHV0ZXIs IGUuZy4gYnkgZGlhbGluZyBpdCBvciBlc3RhYmxpc2hpbmcgYSBUZWxuZXQgY29ubmVjdGlvbiB0 byBpdC4gVGhlCitvdGhlciBjb21wdXRlciBpcyByZW1vdGUsIHNvIGlmIHlvdSBzdGFydCBhbm90 aGVyIGNvcHkgb2YgS2VybWl0IG9uIHRoZQorcmVtb3RlIGNvbXB1dGVyLCBpdCBpcyBzYWlkIHRv IGJlIGluIFJlbW90ZSBtb2RlIChhcyBsb25nIGFzIGl0IGhhcyBub3QKK21hZGUgYW55IGNvbm5l Y3Rpb25zIG9mIGl0cyBvd24pLiBUaGUgbG9jYWwgS2VybWl0IGNvbW11bmljYXRlcyBvdmVyIHRo ZQorY29tbXVuaWNhdGlvbnMgZGV2aWNlIG9yIG5ldHdvcmsgY29ubmVjdGlvbiwgYWN0aW5nIGFz IGEgY29uZHVpdCBiZXR3ZWVuCit0aGUgdGhlIHJlbW90ZSBjb21wdXRlciBhbmQgeW91ciBrZXli b2FyZCBhbmQgc2NyZWVuLiBUaGUgcmVtb3RlIEtlcm1pdCBpcwordGhlIGZpbGVcKGh5dHJhbnNm ZXIgcGFydG5lciB0byB0aGUgbG9jYWwgS2VybWl0IGFuZCBjb21tdW5pY2F0ZXMgb25seSB0aHJv dWdoCitpdHMgc3RhbmRhcmQgaW5wdXQgYW5kIG91dHB1dC4KKy5QUAorQXQgYW55IG1vbWVudCwg YSBLZXJtaXQgcHJvZ3JhbSBjYW4gYmUgaW4gYW55IG9mIHRoZSBmb2xsb3dpbmcgc3RhdGVzLiBJ dCdzCitpbXBvcnRhbnQgdG8ga25vdyB3aGF0IHRoZXkgYXJlIGFuZCBob3cgdG8gY2hhbmdlIGZy b20gb25lIHRvIHRoZSBvdGhlci4KKy5UUAorQ29tbWFuZCBzdGF0ZQorSW4gdGhpcyBzdGF0ZSwg S2VybWl0IHJlYWRzIGNvbW1hbmRzIGZyb206Cisuc3AKK1woYnUJWW91ciBrZXlib2FyZDsgb3I6 CisuYnIKK1woYnUJQSBmaWxlLCBvcjoKKy5icgorXChidQlBIG1hY3JvIGRlZmluaXRpb24uCisu c3AKK1lvdSBjYW4gZXhpdCBmcm9tIENvbW1hbmQgc3RhdGUgYmFjayB0byBVbml4IHdpdGggdGhl IEVYSVQgb3IgUVVJVAorY29tbWFuZCAoc2FtZSB0aGluZykuIFlvdSBjYW4gZW50ZXIgQ29ubmVj dCBzdGF0ZSB3aXRoIGFueSBvZiB2YXJpb3VzCitjb21tYW5kcyAoQ09OTkVDVCwgRElBTCwgVEVM TkVULCBldGMpLiBZb3UgY2FuIGVudGVyIGZpbGUgdHJhbnNmZXIKK3N0YXRlIHdpdGggY29tbWFu ZHMgbGlrZSBTRU5ELCBSRUNFSVZFLCBhbmQgR0VULiBZb3UgY2FuIGVudGVyIFNlcnZlcgorc3Rh dGUgd2l0aCB0aGUgU0VSVkVSIGNvbW1hbmQuIFRoZSBUQUtFIGNvbW1hbmQgdGVsbHMgS2VybWl0 IHRvIHJlYWQKK2FuZCBleGVjdXRlIGNvbW1hbmRzIGZyb20gYSBmaWxlLiBUaGUgKHBlcmhhcHMg aW1wbGllZCkgRE8gY29tbWFuZAordGVsbHMgS2VybWl0IHRvIHJlYWQgYW5kIGV4ZWN1dGUgY29t bWFuZHMgZnJvbSBhIG1hY3JvIGRlZmluaXRpb24uCitXaGlsZSBpbiBDb21tYW5kIHN0YXRlLCB5 b3UgY2FuIGludGVycnVwdCBhbnkgY29tbWFuZCwgbWFjcm8sIG9yCitjb21tYW5kIGZpbGUgYnkg dHlwaW5nIEN0cmxcLUMgKGhvbGQgZG93biB0aGUgQ3RybCBrZXkgYW5kIHByZXNzIHRoZSBDCitr ZXkpOyB0aGlzIG5vcm1hbGx5IGJyaW5ncyB5b3UgYmFjayB0byB0aGUgcHJvbXB0LgorLlRQCitT aGVsbCBzdGF0ZQorWW91IGNhbiBpbnZva2UgYW4gaW5mZXJpb3Igc2hlbGwgb3IgZXh0ZXJuYWwg Y29tbWFuZCBmcm9tIHRoZSBLZXJtaXQKK2NvbW1hbmQgcHJvbXB0IGJ5IHVzaW5nIHRoZSBQVVNI LCBSVU4gKCEpLCBFRElULCBvciBCUk9XU0UgY29tbWFuZC4KK1doaWxlIHRoZSBpbmZlcmlvciBz aGVsbCBvciBjb21tYW5kIGlzIGFjdGl2ZSwgS2VybWl0IGlzIHN1c3BlbmRlZCBhbmQKK2RvZXMg bm90aGluZy4gUmV0dXJuIHRvIEtlcm1pdCBDb21tYW5kIHN0YXRlIGJ5IGV4aXRpbmcgZnJvbSB0 aGUKK2luZmVyaW9yIHNoZWxsIG9yIGFwcGxpY2F0aW9uLgorLlRQCitDb25uZWN0IHN0YXRlCitJ biB0aGlzIHN0YXRlLCB3aGljaCBjYW4gYmUgZW50ZXJlZCBvbmx5IHdoZW4gaW4gTG9jYWwgbW9k ZSAoaS5lLiB3aGVuCitLZXJtaXQgaGFzIG1hZGUgYSBjb25uZWN0aW9uIHRvIGFub3RoZXIgY29t cHV0ZXIpLCBLZXJtaXQgaXMgYWN0aW5nIGFzCithIHRlcm1pbmFsIHRvIHRoZSByZW1vdGUgY29t cHV0ZXIuIFlvdXIga2V5c3Ryb2tlcyBhcmUgc2VudCB0byB0aGUKK3JlbW90ZSBjb21wdXRlciBh bmQgY2hhcmFjdGVycyB0aGF0IGFycml2ZSBvdmVyIHRoZSBjb21tdW5pY2F0aW9uCitjb25uZWN0 aW9uIGFyZSBkaXNwbGF5ZWQgb24geW91ciBzY3JlZW4uIFRoaXMgc3RhdGUgaXMgZW50ZXJlZCB3 aGVuCit5b3UgZ2l2ZSBhIENPTk5FQ1QsIERJQUwsIFRFTE5FVCwgUkxPR0lOLCBvciBJS1NEIGNv bW1hbmQuIFlvdSBjYW4KK3JldHVybiB0byBjb21tYW5kIHN0YXRlIGJ5IGxvZ2dpbmcgb3V0IG9m IHRoZSByZW1vdGUgY29tcHV0ZXIsIG9yIGJ5Cit0eXBpbmc6Cisuc3AKKyAgQ3RybFwtXGVjCisu c3AKK1RoYXQgaXM6IEhvbGQgZG93biB0aGUgQ3RybCBrZXkgYW5kIHByZXNzIHRoZSBiYWNrc2xh c2gga2V5LCB0aGVuIGxldAorZ28gb2YgdGhlIEN0cmwga2V5IGFuZCBwcmVzcyB0aGUgQyBrZXku IFRoaXMgaXMgY2FsbGVkIGVzY2FwaW5nIGJhY2suCitDZXJ0YWluIG90aGVyIGVzY2FwZVwoaHls ZXZlbCBjb21tYW5kcyBhcmUgYWxzbyBwcm92aWRlZDsgdHlwZSBDdHJsXC1cZT8KK2ZvciBhIGxp c3QuIEZvciBleGFtcGxlLCB5b3UgY2FuIGVudGVyIFNoZWxsIHN0YXRlIHdpdGg6Cisuc3AKKyAg Q3RybFwtXGUhCisuc3AKK1RvIHNlbmQgYSBDdHJsXC1cZSB0byB0aGUgaG9zdCB3aGlsZSBpbiBD b25uZWN0IHN0YXRlLCB0eXBlIHR3byBvZiB0aGVtCitpbiBhIHJvdy4gU2VlIEhFTFAgQ09OTkVD VCBhbmQgSEVMUCBTRVQgRVNDQVBFIGZvciBtb3JlIGluZm8uCisuVFAKK0xvY2FsIGZpbGVcKGh5 dHJhbnNmZXIgc3RhdGUKK0luIHRoaXMgc3RhdGUsIEtlcm1pdCBpcyBzZW5kaW5nIHBhY2tldHMg YmFjayBhbmQgZm9ydGggd2l0aCB0aGUgb3RoZXIKK2NvbXB1dGVyIGluIG9yZGVyIHRvIHRyYW5z ZmVyIGEgZmlsZSBvciBhY2NvbXBsaXNoIHNvbWUgb3RoZXIKK2ZpbGVcKGh5cmVsYXRlZCB0YXNr LiBBbmQgYXQgdGhlIHNhbWUgdGltZSwgaXQgaXMgZGlzcGxheWluZyBpdHMgcHJvZ3Jlc3MKK29u IHlvdXIgc2NyZWVuIGFuZCB3YXRjaGluZyB5b3VyIGtleWJvYXJkIGZvciBpbnRlcnJ1cHRpb25z LiBJbiB0aGlzCitzdGF0ZSwgdGhlIGZvbGxvd2luZyBzaW5nbGVcKGh5a2V5c3Ryb2tlIGNvbW1h bmRzIGFyZSBhY2NlcHRlZDoKKy5zcAorLlJTCisuVFAKK1gKK0ludGVycnVwdCB0aGUgY3VycmVu dCBmaWxlIGFuZCBnbyBvbiB0byB0aGUgbmV4dCAoaWYgYW55KS4KKy5UUAorWgorSW50ZXJydXB0 IHRoZSBjdXJyZW50IGZpbGUgYW5kIHNraXAgYWxsIHRoZSByZXN0LgorLlRQCitFCitMaWtlIFog YnV0IHVzZXMgYSAic3Ryb25nZXIiIHByb3RvY29sICh1c2UgaWYgWCBvciBaIGRvbid0IHdvcmsp LgorLlRQCitDdHJsXC1DCitJbnRlcnJ1cHQgZmlsZVwoaHl0cmFuc2ZlciBtb2RlICh1c2UgaWYg WiBvciBFIGRvbid0IHdvcmspLgorLnNwCisuUkUKK0tlcm1pdCByZXR1cm5zIHRvIGl0cyBwcmV2 aW91cyBzdGF0ZSAoQ29tbWFuZCBvciBDb25uZWN0KSB3aGVuIHRoZQordHJhbnNmZXIgaXMgY29t cGxldGUgb3Igd2hlbiBpbnRlcnJ1cHRlZCBzdWNjZXNzZnVsbHkgYnkgWCwgWiwgRSwgb3IKK0N0 cmxcLUMgKGhvbGQgZG93biB0aGUgQ3RybCBrZXkgYW5kIHByZXNzIHRoZSBDIGtleSkuCisuVFAK K1JlbW90ZSBmaWxlXChoeXRyYW5zZmVyIHN0YXRlCitJbiB0aGlzIHN0YXRlLCBLZXJtaXQgaXMg ZXhjaGFuZ2luZyBmaWxlXChoeXRyYW5zZmVyIHBhY2tldHMgd2l0aCBpdHMKK2xvY2FsIHBhcnRu ZXIgb3ZlciBpdHMgc3RhbmRhcmQgaS9vLiBJdCBsZWF2ZXMgdGhpcyBzdGF0ZQorYXV0b21hdGlj YWxseSB3aGVuIHRoZSB0cmFuc2ZlciBpcyBjb21wbGV0ZS4gSW4gY2FzZSB5b3UgZmluZCB5b3Vy Citsb2NhbCBLZXJtaXQgaW4gQ29ubmVjdCBzdGF0ZSBhbmQgdGhlIHJlbW90ZSBvbmUgaW4gRmls ZVwoaHl0cmFuc2Zlcgorc3RhdGUgKGluIHdoaWNoIGl0IHNlZW1zIHRvIGlnbm9yZSB5b3VyIGtl eXN0cm9rZXMpLCB5b3UgY2FuIHVzdWFsbHkKK3JldHVybiBpdCB0byBjb21tYW5kIHN0YXRlIGJ5 IHR5cGluZyB0aHJlZSBDdHJsXC1DJ3MgaW4gYSByb3cuIElmIHRoYXQKK2RvZXNuJ3Qgd29yaywg cmV0dXJuIHlvdXIgbG9jYWwgS2VybWl0IHRvIENvbW1hbmQgc3RhdGUgKEN0cmxcLVxlIEMpIGFu ZAordHlwZSAiZVwoaHlwYWNrZXQiIGFuZCB0aGVuIHByZXNzIHRoZSBSZXR1cm4gb3IgRW50ZXIg a2V5OyB0aGlzIGZvcmNlcyBhCitmYXRhbCBLZXJtaXQgcHJvdG9jb2wgZXJyb3IuCisuVFAKK1Jl bW90ZSBTZXJ2ZXIgc3RhdGUKK1RoaXMgaXMgbGlrZSBSZW1vdGUgRmlsZVwoaHl0cmFuc2ZlciBz dGF0ZSwgZXhjZXB0IGl0IG5ldmVyIHJldHVybnMKK2F1dG9tYXRpY2FsbHkgdG8gQ29tbWFuZCBz dGF0ZS4gUmF0aGVyLCBpdCBhd2FpdHMgZnVydGhlciBpbnN0cnVjdGlvbnMKK2Zyb20gdGhlIGNs aWVudCBwcm9ncmFtOyB0aGF0IGlzLCBmcm9tIHlvdXIgTG9jYWwgS2VybWl0IHByb2dyYW0uIFlv dQorY2FuIHJldHVybiB0aGUgUmVtb3RlIFNlcnZlciB0byBpdHMgcHJldmlvdXMgc3RhdGUgYnkg aXNzdWluZyBhCisiZmluaXNoIiBjb21tYW5kIHRvIHRoZSBjbGllbnQsIG9yIGlmIHlvdSBhcmUg aW4gQ29ubmVjdCBzdGF0ZSwgYnkKK3R5cGluZyB0aHJlZSBDdHJsXC1DJ3MgaW4gYSByb3cuIFlv dSBjYW4gdGVsbCB0aGUgc2VydmVyIGpvYiB0byBsb2cgb3V0CithbmQgYnJlYWsgdGhlIGNvbm5l Y3Rpb24gYnkgaXNzdWluZyBhICJieWUiIGNvbW1hbmQgdG8gdGhlIGNsaWVudC4KKy5UUAorTG9j YWwgU2VydmVyIHN0YXRlCitMaWtlIFJlbW90ZVwoaHlTZXJ2ZXIgc3RhdGUsIGJ1dCBpbiBsb2Nh bCBtb2RlLCBhbmQgdGhlcmVmb3JlIHdpdGggaXRzCitmaWxlXChoeXRyYW5zZmVyIGRpc3BsYXkg c2hvd2luZywgYW5kIGxpc3RlbmluZyBmb3Igc2luZ2xlXChoeWtleSBjb21tYW5kcywKK2FzIGlu IExvY2FsIEZpbGVcKGh5dHJhbnNmZXIgc3RhdGUuIFVzdWFsbHkgdGhpcyBzdGF0ZSBpcyBlbnRl cmVkCithdXRvbWF0aWNhbGx5IHdoZW4gYSByZW1vdGUgS2VybWl0IHByb2dyYW0gZ2l2ZXMgYSBH RVQgY29tbWFuZC4KKy5zcAorQ1woaHlLZXJtaXQsIEtlcm1pdCA5NSwgYW5kIE1TXChoeURPUyBL ZXJtaXQgYWxsIGNhbiBzd2l0Y2ggYXV0b21hdGljYWxseSBmcm9tCitDb25uZWN0IHN0YXRlIHRv IExvY2FsIEZpbGVcKGh5dHJhbnNmZXIgc3RhdGUgd2hlbiB5b3UgaW5pdGlhdGUgYSBmaWxlCit0 cmFuc2ZlciBmcm9tIHRoZSByZW1vdGUgY29tcHV0ZXIgYnkgc3RhcnRpbmcgS2VybWl0IGFuZCB0 ZWxsaW5nIGl0IHRvIHNlbmQKK29yIGdldCBhIGZpbGUsIGluIHdoaWNoIGNhc2UsIENvbm5lY3Qg c3RhdGUgaXMgYXV0b21hdGljYWxseSByZXN1bWVkIGFmdGVyCit0aGUgZmlsZSB0cmFuc2ZlciBp cyBmaW5pc2hlZC4KKy5zcAorTm90ZSB0aGF0IENcKGh5S2VybWl0IGlzIG5vdCBhIHRlcm1pbmFs IGVtdWxhdG9yLiBJdCBpcyBhIGNvbW11bmljYXRpb25zCithcHBsaWNhdGlvbiB0aGF0IHlvdSBy dW4gaW4gYSB0ZXJtaW5hbCB3aW5kb3cgKGUuZy4gY29uc29sZSBvciBYdGVybSkuIFRoZQorc3Bl Y2lmaWMgZW11bGF0aW9uLCBzdWNoIGFzIFZUMTAwLCBWVDIyMCwgTGludXggQ29uc29sZSwgb3Ig WHRlcm0sIGlzCitwcm92aWRlZCBieSB0aGUgdGVybWluYWwgd2luZG93IGluIHdoaWNoIHlvdSBh cmUgcnVubmluZyBDXChoeUtlcm1pdC4gS2VybWl0Cis5NSBhbmQgTVNcKGh5RE9TIEtlcm1pdCwg b24gdGhlIG90aGVyIGhhbmQsIGFyZSB0cnVlIHRlcm1pbmFsIGVtdWxhdG9ycy4gV2h5CitpcyBD XChoeUtlcm1pdCBub3QgYSB0ZXJtaW5hbCBlbXVsYXRvcj8gQ0xJQ0sgSEVSRSB0byByZWFkIGFi b3V0IGl0LgorLlNIIE1BS0lORyBDT05ORUNUSU9OUworSGVyZSBpcyBob3cgdG8gbWFrZSBkaWZm ZXJlbnQga2luZHMgb2YgY29ubmVjdGlvbnMgdXNpbmcgaW50ZXJhY3RpdmUgS2VybWl0Citjb21t YW5kcyAoYXMgbm90ZWQgYWJvdmUsIHlvdSBjYW4gYWxzbyBtYWtlIGNvbm5lY3Rpb25zIHdpdGgg Y29tbWFuZFwoaHlsaW5lCitvcHRpb25zKS4gTm90ZSB0aGF0IHlvdSBkb24ndCBoYXZlIHRvIG1h a2UgY29ubmVjdGlvbnMgd2l0aCBLZXJtaXQuIEl0IGNhbgorYWxzbyBiZSB1c2VkIG9uIHRoZSBm YXIgZW5kIG9mIGEgY29ubmVjdGlvbiBhcyB0aGUgcmVtb3RlIGZpbGUgdHJhbnNmZXIgYW5kCitt YW5hZ2VtZW50IHBhcnRuZXIgb2YgeW91ciBsb2NhbCBjb21tdW5pY2F0aW9ucyBzb2Z0d2FyZS4K Ky5UUAorTWFraW5nIGEgVGVsbmV0IENvbm5lY3Rpb24KK0F0IHRoZSBDXChoeUtlcm1pdCBjb21t YW5kIHByb21wdCwgc2ltcGx5IHR5cGU6Cisuc3AKKy5uZgorICB0ZWxuZXQgZm9vLmJhci5jb20K Ky5maQorLnNwCisoc3Vic3RpdHV0aW5nIGRlc2lyZWQgaG9zdG5hbWUgb3IgYWRkcmVzcykuICAK K1lvdSBjYW4gYWxzbyBpbmNsdWRlIGEgcG9ydCBudW1iZXI6Cisuc3AKKy5uZgorICB0ZWxuZXQg eHl6Y29ycC5jb20gMzAwMCA7IAorLmZpCisuc3AKK0lmIHRoZSBjb25uZWN0aW9uIGlzIHN1Y2Nl c3NmdWwsIEtlcm1pdCBhdXRvbWljYWxseSBlbnRlcnMgQ29ubmVjdAorc3RhdGUuIFdoZW4geW91 IGxvZ291dCBmcm9tIHRoZSByZW1vdGUgaG9zdCwgS2VybWl0IGF1dG9tYXRpY2FsbHkKK3JldHVy bnMgdG8gaXRzIHByb21wdC4gTW9yZSBpbmZvOiBIRUxQIFRFTE5FVCwgSEVMUCBTRVQgVEVMTkVU LCBIRUxQCitTRVQgVEVMT1BULiBBbHNvIHNlZSB0aGUgSUtTRCBzZWN0aW9uIGJlbG93LgorLlRQ CitNYWtpbmcgYW4gUmxvZ2luIGNvbm5lY3Rpb24KK1RoaXMgaXMganVzdCBsaWtlIFRlbG5ldCwg ZXhjZXB0IHlvdSBoYXZlIHRvIGJlIHJvb3QgdG8gZG8gaXQgYmVjYXVzZQorUmxvZ2luIHVzZXMg YSBwcml2aWxlZ2VkIFRDUCBwb3J0OgorLnNwCisubmYKKyAgcmxvZ2luIGZvby5iYXIuY29tCisu ZmkKKy5zcAorTW9yZSBpbmZvOiBIRUxQIFJMT0dJTi4KKy5UUAorTWFraW5nIGFuIFNTSCBDb25u ZWN0aW9uCitVbmxpa2UgVGVsbmV0IGFuZCBSbG9naW4sIFNTSCBjb25uZWN0aW9ucyBhcmUgbm90 IGJ1aWx0XChoeWluLCBidXQKK2hhbmRsZWQgYnkgcnVubmluZyB5b3VyIGV4dGVybmFsIFNTSCBj bGllbnQgdGhyb3VnaCBhIHBzZXVkb3Rlcm1pbmFsLgorVXNpbmcgQ1woaHlLZXJtaXQgdG8gY29u dHJvbCB0aGUgU1NIIGNsaWVudCBnaXZlcyB5b3UgYWxsIG9mIEtlcm1pdCdzCitmZWF0dXJlcyAo ZmlsZSB0cmFuc2ZlciwgY2hhcmFjdGVyXChoeXNldCBjb252ZXJzaW9uLCBzY3JpcHRpbmcsIGV0 YykKK292ZXIgU1NILgorLnNwCisgIHNzaCBmb28uYmFyLmNvbQorLnNwCitNb3JlIGluZm86IEhF TFAgU1NILCBIRUxQIFNFVCBTU0guCisuVFAKK0RpYWxpbmcgd2l0aCBhIE1vZGVtCitJZiBpdCdz IGFuIGV4dGVybmFsIG1vZGVtLCBtYWtlIHN1cmUgaXQgaXMgY29ubmVjdGVkIHRvIGEgdXNhYmxl CitzZXJpYWwgcG9ydCBvbiB5b3VyIGNvbXB1dGVyIHdpdGggYSByZWd1bGFyIChzdHJhaWdodFwo aHl0aHJvdWdoKSBtb2RlbQorY2FibGUsIGFuZCB0byB0aGUgdGVsZXBob25lIGphY2sgd2l0aCBh IHRlbGVwaG9uZSBjYWJsZSwgYW5kIHRoYXQgaXQncwordHVybmVkIG9uLiBUaGVuIHVzZSB0aGVz ZSBjb21tYW5kczoKKy5zcAorLm5mCisgIHNldCBtb2RlbSB0eXBlIHVzcm9ib3RpY3MgIDsgT3Ig b3RoZXIgc3VwcG9ydGVkIHR5cGUKKyAgc2V0IGxpbmUgL2Rldi90dHlTMCAgICAgICAgOyBTcGVj aWZ5IGRldmljZSBuYW1lCisgIHNldCBzcGVlZCA1NzYwMCAgICAgICAgICAgIDsgT3Igb3RoZXIg ZGVzaXJlZCBzcGVlZAorICBzZXQgZmxvdyBydHMvY3RzICAgICAgICAgICA7IE1vc3QgbW9kZXJu IG1vZGVtcyBzdXBwb3J0IHRoaXMKKyAgc2V0IGRpYWwgbWV0aG9kIHRvbmUgICAgICAgOyAob3Ig cHVsc2UpCisgIGRpYWwgNzY1NDMyMSAgICAgICAgICAgICAgIDsgRGlhbCB0aGUgZGVzaXJlZCBu dW1iZXIKKy5maQorLnNwCitUeXBlICJzZXQgbW9kZW0gdHlwZSA/IiBmb3IgYSBsaXN0IG9mIHN1 cHBvcnRlZCBtb2RlbSB0eXBlcy4gSWYgeW91CitvbWl0IHRoZSBTRVQgTU9ERU0gVFlQRSBjb21t YW5kLCB0aGUgZGVmYXVsdCB0eXBlIGlzCisiZ2VuZXJpY1woaHloaWdoXChoeXNwZWVkIiwgd2hp Y2ggc2hvdWxkIHdvcmsgZm9yIG1vc3QgbW9kZXJuIEFUXChoeWNvbW1hbmRcKGh5c2V0Cittb2Rl bXMuIElmIHRoZSBsaW5lIGlzIGJ1c3ksIEtlcm1pdCByZWRpYWxzIGF1dG9tYXRpY2FsbHkuIElm IHRoZSBjYWxsCitkb2VzIG5vdCBzdWNjZWVkLCB1c2UgInNldCBkaWFsIGRpc3BsYXkgb24iIGFu ZCB0cnkgaXQgYWdhaW4gdG8gd2F0Y2gKK3doYXQgaGFwcGVucy4gSWYgdGhlIGNhbGwgc3VjY2Vl ZHMsIEtlcm1pdCBlbnRlcnMgQ29ubmVjdCBzdGF0ZQorYXV0b21hdGljYWxseSBhbmQgcmV0dXJu cyB0byBpdHMgcHJvbXB0IGF1dG9tYXRpY2FsbHkgd2hlbiB5b3UgbG9nIG91dAorZnJvbSB0aGUg cmVtb3RlIGNvbXB1dGVyIG9yIHRoZSBjb25uZWN0aW9uIGlzIG90aGVyd2lzZSBsb3N0LgorLnNw CitZb3UgY2FuIGFsc28gZGlhbCBmcm9tIGEgbW9kZW0gdGhhdCBpcyBhY2Nlc3NpYmxlIGJ5IFRl bG5ldCwgZS5nLiB0byBhCityZXZlcnNlIHRlcm1pbmFsIHNlcnZlci4gSW4gdGhpcyBjYXNlIHRo ZSBjb21tYW5kIHNlcXVlbmNlIGlzOgorLnNwCisubmYKKyAgc2V0IGhvc3QgdHMueHh4LmNvbSAy MDAwICAgOyBUZXJtaW5hbFwoaHlzZXJ2ZXIgYW5kIHBvcnQKKyAgc2V0IG1vZGVtIHR5cGUgdXNy b2JvdGljcyAgOyBPciBvdGhlciBzdXBwb3J0ZWQgdHlwZQorICBzZXQgZGlhbCBtZXRob2QgdG9u ZSAgICAgICA7IChvciBwdWxzZSkKKyAgZGlhbCA3NjU0MzIxICAgICAgICAgICAgICAgOyBEaWFs IHRoZSBkZXNpcmVkIG51bWJlcgorLmZpCisuc3AKK0lmIHRoZSB0ZXJtaW5hbCBzZXJ2ZXIgc3Vw cG9ydHMgdGhlIFRlbG5ldCBDb20gUG9ydCBPcHRpb24sIFJGQyAyMjE3LAoreW91IGNhbiBhbHNv IGdpdmUgc2VyaWFsXChoeXBvcnQgcmVsYXRlZCBjb21tYW5kcyBzdWNoIGFzIFNFVCBTUEVFRCwg U0VUCitQQVJJVFksIGFuZCBzbyBvbiwgYW5kIEtlcm1pdCByZWxheXMgdGhlbSB0byB0aGUgdGVy bWluYWwgc2VydmVyIHVzaW5nCit0aGUgcHJvdG9jb2wgc3BlY2lmaWVkIGluIHRoZSBSRkMuCisu c3AKK01vcmUgaW5mbzogSEVMUCBTRVQgTU9ERU0sIEhFTFAgU0VUIExJTkUsIEhFTFAgU0VUIFNQ RUVELCBIRUxQIFNFVAorRkxPVywgSEVMUCBESUFMLCBIRUxQIFNFVCBESUFMLCBIRUxQIFNFVCBN T0RFTSwgSEVMUCBTRVQgCitDQVJSSUVSXC1XQVRDSCwgU0hPVyBDT01NVU5JQ0FUSU9OUywgU0hP VyBNT0RFTSwgU0hPVyBESUFMLgorLlRQCitEaXJlY3QgU2VyaWFsIFBvcnQKK0Nvbm5lY3QgdGhl IHR3byBjb21wdXRlcnMsIEEgYW5kIEIsIHdpdGggYSBudWxsIG1vZGVtIGNhYmxlIChvciB0d28K K21vZGVtIGNhYmxlcyBpbnRlcmNvbm5lY3RlZCB3aXRoIGEgbnVsbFwoaHltb2RlbSBhZGFwdGVy IG9yIG1vZGVtCitlbGltaW5hdG9yKS4gRnJvbSBDb21wdXRlciBBOgorLnNwCisubmYKKyAgc2V0 IG1vZGVtIHR5cGUgbm9uZSAgIDsgVGhlcmUgaXMgbm8gbW9kZW0KKyAgc2V0IGxpbmUgL2Rldi90 dHlTMCAgIDsgU3BlY2lmeSBkZXZpY2UgbmFtZQorICBzZXQgY2Fycmllclwtd2F0Y2ggb2ZmIDsg SWYgRFRSIENEIGFyZSBub3QgY3Jvc3NcKGh5Y29ubmVjdGVkCisgIHNldCBzcGVlZCA1NzYwMCAg ICAgICA7IE9yIG90aGVyIGRlc2lyZWQgc3BlZWQKKyAgc2V0IGZsb3cgcnRzL2N0cyAgICAgIDsg SWYgUlRTIGFuZCBDVFMgYXJlIGNyb3NzXChoeWNvbm5lY3RlZAorICBzZXQgcGFyaXR5IGV2ZW4g ICAgICAgOyAob3IgIm1hcmsiIG9yICJzcGFjZSIsIGlmIG5lY2Vzc2FyeSkKKyAgc2V0IHN0b3Bc LWJpdHMgMiAgICAgICA7IChyYXJlbHkgbmVjZXNzYXJ5KQorICBzZXQgZmxvdyB4b24veG9mZiAg ICAgOyBJZiB5b3UgY2FuJ3QgdXNlIFJUUy9DVFMKKyAgY29ubmVjdCAgICAgICAgICAgICAgIDsg RW50ZXIgQ29ubmVjdCAodGVybWluYWwpIHN0YXRlCisuZmkKKy5zcAorVGhpcyBhc3N1bWVzIENv bXB1dGVyIEIgaXMgc2V0IHVwIHRvIGxldCB5b3UgbG9nIGluLiBJZiBpdCBpc24ndCwgeW91IAor Y2FuIHJ1biBhIGNvcHkgb2YgS2VybWl0IG9uIENvbXB1dGVyIEIgYW5kIGZvbGxvdyBhcHByb3hp bWF0ZWx5IHRoZQorc2FtZSBkaXJlY3Rpb25zLiBNb3JlIGluZm86IEFzIGFib3ZlIHBsdXMgSEVM UCBDT05ORUNULgorLlBQCitXaXRoIG1vZGVtcyBvciBkaXJlY3Qgc2VyaWFsIGNvbm5lY3Rpb25z LCB5b3UgbWlnaHQgYWxzbyBoYXZlIHRvICJzZXQKK3Bhcml0eSBldmVuIiAob3IgIm1hcmsiIG9y ICJzcGFjZSIpIGlmIGl0J3MgYSA3XChoeWJpdCBjb25uZWN0aW9uLgorLlBQCitPZiB0aGUgY29u bmVjdGlvbiB0eXBlcyBsaXN0ZWQgYWJvdmUsIG9ubHkgb25lIGNhbiBiZSBvcGVuIGF0IGEgdGlt ZS4KK0hvd2V2ZXIsIGFueSBvbmUgb2YgdGhlc2UgY2FuIGJlIG9wZW4gY29uY3VycmVudGx5IHdp dGggYW4gRlRQIG9yIEhUVFAKK3Nlc3Npb24uIEVhY2ggY29ubmVjdGlvbiB0eXBlIGNhbiBiZSBj dXN0b21pemVkIHRvIGFueSBkZXNpcmVkIGRlZ3JlZSwKK3NjcmlwdGVkLCBsb2dnZWQsIHlvdSBu YW1lIGl0LiBTZWUgdGhlIG1hbnVhbC4KKy5QUAorTk9URTogT24gc2VsZWN0ZWQgcGxhdGZvcm1z LCBDXChoeUtlcm1pdCBhbHNvIGNhbiBtYWtlIFguMjUgY29ubmVjdGlvbnMuIFNlZQordGhlIG1h bnVhbCBmb3IgZGV0YWlscy4KKy5TSCBUUkFOU0ZFUlJJTkcgRklMRVMgV0lUSCBLRVJNSVQKK1Ro ZXJlIGlzIGEgd2lkZXNwcmVhZCBhbmQgcGVyc2lzdGVudCBiZWxpZWYgdGhhdCBLZXJtaXQgaXMg YSBzbG93IHByb3RvY29sLgorVGhpcyBpcyBiZWNhdXNlLCB1bnRpbCByZWNlbnRseSwgaXQgdXNl ZCBjb25zZXJ2YXRpdmUgdHVuaW5nIGJ5IGRlZmF1bHQgdG8KK21ha2Ugc3VyZSBmaWxlIHRyYW5z ZmVycyBzdWNjZWVkZWQsIHJhdGhlciB0aGFuIGZhaWxpbmcgYmVjYXVzZSB0aGV5CitvdmVybG9h ZGVkIHRoZSBjb25uZWN0aW9uLiBTb21lIGV4dHJhIGNvbW1hbmRzIChvciBjb21tYW5kXChoeWxp bmUgb3B0aW9ucywKK2xpa2UgXC1RKSB3ZXJlIG5lZWRlZCB0byBtYWtlIGl0IGdvIGZhc3QsIGJ1 dCBub2JvZHkgYm90aGVyZWQgdG8gZmluZCBvdXQKK2Fib3V0IHRoZW0uIEFsc28sIGl0IHRha2Vz IHR3byB0byB0YW5nbzogbW9zdCBub25cKGh5S2VybWl0XChoeVByb2plY3QgS2VybWl0Citwcm90 b2NvbCBpbXBsZW1lbnRhdGlvbnMgcmVhbGx5IEFSRSBzbG93LiBUaGUgYmVzdCBmaWxlXChoeXRy YW5zZmVyIHBhcnRuZXJzCitmb3IgQ1woaHlLZXJtaXQgYXJlOiBhbm90aGVyIGNvcHkgb2YgQ1wo aHlLZXJtaXQgKDcuMCBvciBsYXRlcikgYW5kIEtlcm1pdCA5NS4KK1RoZXNlIGNvbWJpbmF0aW9u cyB3b3JrIHdlbGwgYW5kIHRoZXkgd29yayBmYXN0IGJ5IGRlZmF1bHQuIE1TXChoeURPUyBLZXJt aXQKK2lzIGdvb2QgdG9vLCBidXQgeW91IGhhdmUgdG8gdGVsbCBpdCB0byBnbyBmYXN0IChieSBn aXZpbmcgaXQgdGhlIEZBU1QKK2NvbW1hbmQpLgorLlBQCitGdXJ0aGVybW9yZSwgYWxsIHRocmVl IG9mIHRoZXNlIEtlcm1pdCBwcm9ncmFtcyBzdXBwb3J0ICJhdXRvZG93bmxvYWQiIGFuZAorImF1 dG91cGxvYWQiLCBtZWFuaW5nIHRoYXQgd2hlbiB0aGV5IGFyZSBpbiBDb25uZWN0IHN0YXRlIGFu ZCBhIEtlcm1pdAorcGFja2V0IGNvbWVzIGluIGZyb20gdGhlIHJlbW90ZSwgdGhleSBhdXRvbWF0 aWNhbGx5IHN3aXRjaCBpbnRvIGZpbGUKK3RyYW5zZmVyIG1vZGUuCisuUFAKK0FuZCBwbHVzLCBD XChoeUtlcm1pdCBhbmQgSzk1IGFsc28gc3dpdGNoIGF1dG9tYXRpY2FsbHkgYmV0d2VlbiB0ZXh0 IGFuZAorYmluYXJ5IG1vZGUgZm9yIGVhY2ggZmlsZSwgc28gdGhlcmUgaXMgbm8gbmVlZCB0byAi c2V0IGZpbGUgdHlwZSBiaW5hcnkiIG9yCisic2V0IGZpbGUgdHlwZSB0ZXh0Iiwgb3IgdG8gd29y cnkgYWJvdXQgZmlsZXMgYmVpbmcgY29ycnVwdGVkIGJlY2F1c2UgdGhleQord2VyZSB0cmFuc2Zl cnJlZCBpbiB0aGUgd3JvbmcgbW9kZS4KKy5QUAorV2hhdCBhbGwgb2YgdGhlc2Ugd29yZHMgYWRk IHVwIHRvIGlzIHRoYXQgbm93LCB3aGVuIHlvdSB1c2UgdXBcKGh5dG9cKGh5ZGF0ZQorS2VybWl0 IHNvZnR3YXJlIGZyb20gdGhlIEtlcm1pdCBQcm9qZWN0LCBmaWxlIHRyYW5zZmVyIGlzIG5vdCBv bmx5IGZhc3QsCitpdCdzIHJpZGljdWxvdXNseSBlYXN5LiBZb3UgYmFyZWx5IGhhdmUgdG8gZ2l2 ZSBhbnkgY29tbWFuZHMgYXQgYWxsLgorLlRQCitEb3dubG9hZGluZyBGaWxlcworTGV0J3Mgc2F5 IHlvdSBoYXZlIEtlcm1pdCA5NSwgQ1woaHlLZXJtaXQsIG9yIE1TXChoeURPUyBLZXJtaXQgb24g eW91cgorZGVza3RvcCBjb21wdXRlciwgd2l0aCBhIGNvbm5lY3Rpb24gdG8gYSBVbml4IGNvbXB1 dGVyIHRoYXQgaGFzCitDXChoeUtlcm1pdCBpbnN0YWxsZWQgYXMgImtlcm1pdCIuIFRvIGRvd25s b2FkIGEgZmlsZSAoc2VuZCBpdCBmcm9tIFVuaXgKK3RvIHlvdXIgZGVza3RvcCBjb21wdXRlciks IGp1c3QgdHlwZSB0aGUgZm9sbG93aW5nIGNvbW1hbmQgYXQgeW91cgorVW5peCBzaGVsbCBwcm9t cHQ6Cisuc3AKKyAga2VybWl0IFwtcyBvb2ZhLnR4dAorLnNwCisod2hlcmUgb29mYS50eHQgaXMg dGhlIGZpbGVuYW1lKS4gSWYgeW91IHdhbnQgdG8gc2VuZCBtb3JlIHRoYW4gb25lCitmaWxlLCB5 b3UgY2FuIHB1dCBhcyBtYW55IGZpbGVuYW1lcyBhcyB5b3Ugd2FudCBvbiB0aGUgY29tbWFuZCBs aW5lLAorYW5kIHRoZXkgY2FuIGJlIGFueSBjb21iaW5hdGlvbiBvZiB0ZXh0IGFuZCBiaW5hcnk6 Cisuc3AKKyAga2VybWl0IFwtcyBvb2ZhLnR4dCBvb2ZhLnppcCBvb2ZhLmh0bWwgb29mYS50YXIu Z3oKKy5zcAorYW5kL29yIHlvdSBjYW4gdXNlIHdpbGRjYXJkcyB0byBzZW5kIGdyb3VwcyBvZiBm aWxlczoKKy5zcAorICBrZXJtaXQgXC1zIG9vZmEuKgorLnNwCitJZiB5b3Ugd2FudCB0byBzZW5k IGEgZmlsZSB1bmRlciBhbiBhc3N1bWVkIG5hbWUsIHVzZToKKy5zcAorICBrZXJtaXQgXC1zIGZy aWRheS50eHQgXC1hIHRvZGF5LnR4dAorLnNwCitUaGlzIHNlbmRzIHRoZSBmaWxlIGZyaWRheS50 eHQgYnV0IHRlbGxzIHRoZSByZWNlaXZpbmcgS2VybWl0IHRoYXQgaXRzCituYW1lIGlzIHRvZGF5 LnR4dC4gSW4gYWxsIGNhc2VzLCBhcyBub3RlZCwgd2hlbiB0aGUgZmlsZSB0cmFuc2ZlciBpcwor ZmluaXNoZWQsIHlvdXIgZGVza3RvcCBLZXJtaXQgcmV0dXJucyBhdXRvbWF0aWNhbGx5IHRvIENv bm5lY3Qgc3RhdGUuCitObyB3b3JyaWVzIGFib3V0IGVzY2FwaW5nIGJhY2ssIHJlXChoeWNvbm5l Y3RpbmcsIHRleHQvYmluYXJ5IG1vZGUKK3N3aXRjaGluZy4gQWxtb3N0IHRvbyBlYXN5LCByaWdo dD8KKy5UUAorVXBsb2FkaW5nIEZpbGVzCitUbyB1cGxvYWQgZmlsZXMgKHNlbmQgdGhlbSBmcm9t IHlvdXIgZGVza3RvcCBjb21wdXRlciB0byB0aGUgcmVtb3RlCitVbml4IGNvbXB1dGVyKSBkbyB0 aGUgc2FtZSB0aGluZywgYnV0IHVzZSB0aGUgXC1nIChHRVQpIG9wdGlvbiBpbnN0ZWFkCitvZiBc LXM6Cisuc3AKKyAga2VybWl0IFwtZyBvb2ZhLnR4dAorLnNwCitUaGlzIGNhdXNlcyB5b3VyIGxv Y2FsIEtlcm1pdCB0byBlbnRlciBzZXJ2ZXIgbW9kZTsgdGhlbiB0aGUgcmVtb3RlCitLZXJtaXQg cHJvZ3JhbSByZXF1ZXN0cyB0aGUgbmFtZWQgZmlsZSBhbmQgdGhlIGxvY2FsIEtlcm1pdCBzZW5k cyBpdAorYW5kIHJldHVybnMgYXV0b21hdGljYWxseSB0byBDb25uZWN0IHN0YXRlIHdoZW4gZG9u ZS4KKy5zcAorSWYgeW91IHdhbnQgdG8gdXBsb2FkIG11bHRpcGxlIGZpbGVzLCB5b3UgaGF2ZSBo YXZlIHVzZSBzaGVsbCBxdW90aW5nCitydWxlcywgc2luY2UgdGhlc2UgYXJlbid0IGxvY2FsIGZp bGVzOgorLnNwCisubmYKKyAga2VybWl0IFwtZyAib29mYS50eHQgb29mYS56aXAgb29mYS5odG1s IG9vZmEudGFyLmd6IgorICBrZXJtaXQgXC1nICJvb2ZhLioiCisuZmkKKy5zcAorSWYgeW91IHdh bnQgdG8gdXBsb2FkIGEgZmlsZSBidXQgc3RvcmUgaXQgdW5kZXIgYSBkaWZmZXJlbnQgbmFtZSwg dXNlOgorLnNwCisgIGtlcm1pdCBcLWcgZnJpZGF5LnR4dCBcLWEgdG9kYXkudHh0CisuVFAKK0tl cm1pdCBUcmFuc2ZlcnMgdGhlIE9sZFwoaHlGYXNoaW9uZWQgV2F5CitJZiB5b3VyIGRlc2t0b3Ag Y29tbXVuaWNhdGlvbnMgc29mdHdhcmUgZG9lcyBub3Qgc3VwcG9ydCBhdXRvdXBsb2FkIG9yCith dXRvZG93bmxvYWQsIG9yIGl0IGRvZXMgbm90IGluY2x1ZGUgS2VybWl0IHNlcnZlciBtb2RlLCB0 aGUgcHJvY2VkdXJlCityZXF1aXJlcyBtb3JlIHN0ZXBzLgorLnNwCitUbyBkb3dubG9hZCBhIGZp bGUsIHR5cGU6Cisuc3AKKyAga2VybWl0IFwtcyBmaWxlbmFtZQorLnNwCitvbiB0aGUgaG9zdCBh cyBiZWZvcmUsIGJ1dCBpZiBub3RoaW5nIGhhcHBlbnMgYXV0b21hdGljYWxseSBpbgorcmVzcG9u c2UgdG8gdGhpcyBjb21tYW5kLCB5b3UgaGF2ZSB0byBzd2l0Y2ggeW91ciBkZXNrdG9wCitjb21t dW5pY2F0aW9ucyBzb2Z0d2FyZSBpbnRvIEtlcm1pdCBSZWNlaXZlIHN0YXRlLiBUaGlzIG1pZ2h0 IGJlIGRvbmUKK2J5IGVzY2FwaW5nIGJhY2sgdXNpbmcga2V5Ym9hcmQgY2hhcmFjdGVycyBvciBo b3Qga2V5cyAoQWx0XC14IGlzCit0eXBpY2FsKSBhbmQvb3Igd2l0aCBhIGNvbW1hbmQgKGxpa2Ug UkVDRUlWRSkgb3IgYSBtZW51LiBXaGVuIHRoZSBmaWxlCit0cmFuc2ZlciBpcyBjb21wbGV0ZSwg eW91IGhhdmUgdG8gZ28gYmFjayB0byBDb25uZWN0IHN0YXRlLCBUZXJtaW5hbAorZW11bGF0aW9u LCBvciB3aGF0ZXZlciB0ZXJtaW5vbG9neSBhcHBsaWVzIHRvIHlvdXIgZGVza3RvcAorY29tbXVu aWNhdGlvbnMgc29mdHdhcmUuCisuc3AKK1RvIHVwbG9hZCBhIGZpbGUsIHR5cGU6Cisuc3AKKyAg a2VybWl0IFwtcgorLnNwCitvbiB0aGUgaG9zdCAocmF0aGVyIHRoYW4gImtlcm1pdCBcLWciKS4g VGhpcyB0ZWxscyBDXChoeUtlcm1pdCB0byB3YWl0CitwYXNzaXZlbHkgZm9yIGEgZmlsZSB0byBz dGFydCBhcnJpdmluZy4gVGhlbiByZWdhaW4gdGhlIGF0dGVudGlvbiBvZgoreW91ciBkZXNrdG9w IHNvZnR3YXJlIChBbHRcLXggb3Igd2hhdGV2ZXIpIGFuZCBpbnN0cnVjdCBpdCB0byBzZW5kIHRo ZQorZGVzaXJlZCBmaWxlKHMpIHdpdGggS2VybWl0IHByb3RvY29sLiBXaGVuIHRoZSB0cmFuc2Zl ciBpcyBmaW5pc2hlZCwKK3JldHVybiB0byB0aGUgQ29ubmVjdCBvciBUZXJtaW5hbCBzY3JlZW4u CisuVFAKK0lmIEZpbGUgVHJhbnNmZXIgRmFpbHMKK0FsdGhvdWdoIGV2ZXJ5IGFzcGVjdCBvZiBL ZXJtaXQncyBvcGVyYXRpb24gY2FuIGJlIGZpbmVseSB0dW5lZCwgdGhlcmUKK2FyZSBhbHNvIHRo cmVlIHNob3J0IGFuZCBzaW1wbGUgIm9tbmlidXMgdHVuaW5nIiBjb21tYW5kcyB5b3UgY2FuIHVz ZQorZm9yIHRyb3VibGVzaG9vdGluZzoKKy5SUworLlRQCitGQVNUCitVc2UgZmFzdCBmaWxlXCho eXRyYW5zZmVyIHNldHRpbmdzLiBUaGlzIGhhcyBiZWVuIHRoZSBkZWZhdWx0IHNpbmNlCitDXCho eUtlcm1pdCA3LjAgbm93IHRoYXQgbW9zdCBtb2Rlcm4gY29tcHV0ZXJzIGFuZCBjb25uZWN0aW9u cworc3VwcG9ydCBpdC4gSWYgdHJhbnNmZXJzIGZhaWwgd2l0aCBmYXN0IHNldHRpbmdzLCB0cnkg LiAuIC4KKy5UUAorQ0FVVElPVVMKK1VzZSBjYXV0aW91cyBidXQgbm90IHBhcmFub2lkIHNldHRp bmdzLiBGaWxlIHRyYW5zZmVycywgaWYgdGhleQord29yaywgd2lsbCBnbyBhdCBtZWRpdW0gc3Bl ZWQuIElmIG5vdCwgdHJ5IC4gLiAuCisuVFAKK1JPQlVTVAorVXNlIHRoZSBtb3N0IHJvYnVzdCwg cmVzaWxpZW50LCBjb25zZXJ2YXRpdmUsIHNhZmUsIGFuZCByZWxpYWJsZQorc2V0dGluZ3MuIEZp bGUgdHJhbnNmZXJzIHdpbGwgYWxtb3N0IGNlcnRhaW5seSB3b3JrLCBidXQgdGhleQord2lsbCBi ZSBxdWl0ZSBzbG93IChvZiBjb3Vyc2UgdGhpcyBpcyBhIGNsYXNzaWMgdHJhZGVvZmY7IFJPQlVT VAord2FzIENcKGh5S2VybWl0J3MgZGVmYXVsdCB0dW5pbmcgaW4gdmVyc2lvbnMgNi4wIGFuZCBl YXJsaWVyLCB3aGljaAorbWFkZSBldmVyeWJvZHkgdGhpbmsgS2VybWl0IHByb3RvY29sIHdhcyBz bG93KS4gSWYgUk9CVVNUIGRvZXNuJ3QKK2RvIHRoZSB0cmljaywgdHJ5IGFnYWluIHdpdGggU0VU IFBBUklUWSBTUEFDRSBmaXJzdCBpbiBjYXNlIGl0J3MKK25vdCBhbiA4XChoeWJpdCBjb25uZWN0 aW9uLgorLlJFCisuc3AKK09idmlvdXNseSB0aGUgc3VjY2VzcyBhbmQgcGVyZm9ybWFuY2Ugb2Yg YSBmaWxlIHRyYW5zZmVyIGFsc28gZGVwZW5kcworb24gQ1woaHlLZXJtaXQncyBmaWxlIHRyYW5z ZmVyIHBhcnRuZXIuIFVwXChoeXRvXChoeWRhdGUsIHJlYWwgS2VybWl0IFByb2plY3QKK3BhcnRu ZXJzIGFyZSByZWNvbW1lbmRlZCBiZWNhdXNlIHRoZXkgY29udGFpbiB0aGUgYmVzdCBLZXJtaXQg cHJvdG9jb2wKK2ltcGxlbWVudGF0aW9ucyBhbmQgYmVjYXVzZSB3ZSBjYW4gc3VwcG9ydCB0aGVt IGluIGNhc2Ugb2YgdHJvdWJsZS4KKy5zcAorSWYgeW91IHN0aWxsIGhhdmUgdHJvdWJsZSwgY29u c3VsdCBDaGFwdGVyIDEwIG9mIFVzaW5nIENcKGh5S2VybWl0LCBvcgorc2VuZCBlbWFpbCB0byBr ZXJtaXRcKGh5c3VwcG9ydEBjb2x1bWJpYS5lZHUuCisuVFAKK0FkdmFuY2VkIEtlcm1pdCBGaWxl XChoeVRyYW5zZmVyIEZlYXR1cmVzCitPYnZpb3VzbHkgdGhlcmUgaXMgYSBsb3QgbW9yZSB0byBL ZXJtaXQgZmlsZSB0cmFuc2ZlciwgaW5jbHVkaW5nIGFsbAorc29ydHMgb2YgaW50ZXJhY3RpdmUg Y29tbWFuZHMsIHByZWZlcmVuY2VzLCBvcHRpb25zLCBsb2dnaW5nLAorZGVidWdnaW5nLCB0cm91 Ymxlc2hvb3RpbmcsIGFuZCBhbnl0aGluZyBlbHNlIHlvdSBjYW4gaW1hZ2luZSBidXQKK3RoYXQn cyB3aGF0IHRoZSBtYW51YWwgYW5kIHVwZGF0ZXMgYXJlIGZvci4gSGVyZSBhcmUgYSBmZXcgdG9w aWNzIHlvdQorY2FuIGV4cGxvcmUgaWYgeW91J3JlIGludGVyZXN0ZWQgYnkgVHlwaW5nIEhFTFAg Zm9yIHRoZSBsaXN0ZWQKK2NvbW1hbmRzOgorLlJTCisuVFAKK0xvZ2dpbmcgdHJhbnNmZXJzOgor TE9HIFRSQU5TQUNUSU9OUyAoSEVMUCBMT0cpCisuVFAKK0F1dG9tYXRpYyBwZXJcKGh5ZmlsZSB0 ZXh0L2JpbmFyeSBtb2RlIHN3aXRjaGluZzoKK1NFVCBUUkFOU0ZFUiBNT0RFIHsgQVVUT01BVElD LCBNQU5VQUwgfSAoSEVMUCBTRVQgVFJBTlNGRVIpLgorLlRQCitDcm9zc1woaHlwbGF0Zm9ybSBy ZWN1cnNpdmUgZGlyZWN0b3J5IHRyZWUgdHJhbnNmZXI6CitTRU5EIC9SRUNVUlNJVkUsIEdFVCAv UkVDVVJTSVZFIChIRUxQIFNFTkQsIEhFTFAgR0VUKS4KKy5UUAorRmlsZSBjb2xsaXNpb24gb3B0 aW9uczoKK1NFVCBGSUxFIENPTExJU0lPTiB7IE9WRVJXUklURSwgQkFDS1VQLCBESVNDQVJELCAu Li4gfSAoSEVMUCBTRVQgRklMRSkuCisuVFAKK1VwZGF0ZTogVHJhbnNmZXIgb25seSBmaWxlcyB0 aGF0IGNoYW5nZWQgc2luY2UgbGFzdCB0aW1lOgorU0VUIEZJTEUgQ09MTElTSU9OIFVQREFURSAo SEVMUCBTRVQgRklMRSkuCisuVFAKK0ZpbGVuYW1lIHNlbGVjdGlvbiBwYXR0ZXJuczoKKyhIRUxQ IFdJTERDQVJEKS4KKy5UUAorRmxleGlibGUgZmlsZSBzZWxlY3Rpb246CitTRU5EIChvciBHRVQp IC9CRUZPUkUgL0FGVEVSIC9MQVJHRVIgL1NNQUxMRVIgL1RZUEUgL0VYQ0VQVCwgLi4uCisuVFAK K0NoYXJhY3RlclwoaHlzZXQgY29udmVyc2lvbjoKK1NFVCB7IEZJTEUsIFRSQU5TRkVSIH0gQ0hB UkFDVEVSXC1TRVQsIEFTU09DSUFURSwgLi4uCisuVFAKK0ZpbGUvUGF0aG5hbWUgY29udHJvbDoK K1NFVCB7IFNFTkQsIFJFQ0VJVkUgfSBQQVRITkFNRVMsIFNFVCBGSUxFIE5BTUVTLgorLlRQCitB dG9taWMgZmlsZSBtb3ZlbWVudDoKK1NFTkQgKG9yIEdFVCkgL0RFTEVURSAvUkVOQU1FIC9NT1ZF XC1UTworLlRQCitUcmFuc2ZlcnJpbmcgdG8vZnJvbSBzdGFuZGFyZCBpL28gb2Ygb3RoZXIgY29t bWFuZHM6CitTRU5EIChvciBHRVQpIC9DT01NQU5ECisuVFAKK1JlY292ZXJ5IG9mIGludGVycnVw dGVkIHRyYW5zZmVyIGZyb20gcG9pbnQgb2YgZmFpbHVyZToKK1JFU0VORCwgUkVHRVQgKEhFTFAg UkVTRU5ELCBIRUxQIFJFR0VUKS4KKy5SRQorLlRQCitOb25cKGh5S2VybWl0IEZpbGUgVHJhbnNm ZXIKK1lvdSBjYW4gYWxzbyB1c2UgQ1woaHlLZXJtaXQgdG8gdHJhbnNmZXIgZmlsZXMgd2l0aCBG VFAgb3IgSFRUUCBJbnRlcm5ldAorcHJvdG9jb2xzOyBzZWUgYmVsb3cuCisuc3AKK09uIGEgcmVn dWxhciBzZXJpYWwgb3IgVGVsbmV0IGNvbm5lY3Rpb24gd2hlcmUgdGhlIG90aGVyIGNvbXB1dGVy Citkb2Vzbid0IHN1cHBvcnQgS2VybWl0IHByb3RvY29sIGF0IGFsbCwgeW91IGhhdmUgc2V2ZXJh bCBvcHRpb25zLiBGb3IKK2V4YW1wbGUsIGlmIHlvdXIgZGVza3RvcCBjb21tdW5pY2F0aW9ucyBz b2Z0d2FyZSBzdXBwb3J0cyBabW9kZW0sIHVzZQorInJ6IiBhbmQgInN6IiBvbiB0aGUgaG9zdCBy YXRoZXIgdGhhbiBLZXJtaXQuIEJ1dCBpZiBLZXJtaXQgaXMgeW91cgorZGVza3RvcCBzb2Z0d2Fy ZSwgYW5kIHlvdSBhcmUgdXNpbmcgaXQgdG8gbWFrZSBjYWxscyBvciBuZXR3b3JrCitjb25uZWN0 aW9ucyB0byBvdGhlciBjb21wdXRlcnMgdGhhdCBkb24ndCBzdXBwb3J0IEtlcm1pdCBwcm90b2Nv bCAob3IKK3RoYXQgZG9uJ3QgaGF2ZSBhIGdvb2QgaW1wbGVtZW50YXRpb24gb2YgaXQpLCB0aGVu IGlmIHlvdXIgY29tcHV0ZXIKK2Fsc28gaGFzIGV4dGVybmFsIFgsIFksIG9yIFptb2RlbSBwcm9n cmFtcyB0aGF0IGFyZSByZWRpcmVjdGFibGUsCitLZXJtaXQgY2FuIHVzZSB0aGVtIGFzIGV4dGVy bmFsIHByb3RvY29scy4gSEVMUCBTRVQgUFJPVE9DT0wgZm9yCitkZXRhaWxzLgorLnNwCitZb3Ug Y2FuIGFsc28gY2FwdHVyZSAicmF3IiBkYXRhIHN0cmVhbXMgZnJvbSB0aGUgb3RoZXIgY29tcHV0 ZXIgd2l0aAorTE9HIFNFU1NJT04gKEhFTFAgTE9HIGFuZCBIRUxQIFNFVCBTRVNTSU9OXC1MT0cg Zm9yIGRldGFpbHMpLCBhbmQgeW91CitjYW4gdXBsb2FkIGZpbGVzIHdpdGhvdXQgYW55IHByb3Rv Y29sIGF0IGFsbCB3aXRoIFRSQU5TTUlUIChIRUxQCitUUkFOU01JVCwgSEVMUCBTRVQgVFJBTlNN SVQpLgorLlNIIEtFUk1JVCdTIEJVSUxUXChoeUlOIEZUUCBBTkQgSFRUUCBDTElFTlRTCitLZXJt aXQncyBGVFAgY2xpZW50IGlzIGxpa2UgdGhlIHJlZ3VsYXIgVW5peCBGVFAgY2xpZW50IHRoYXQg eW91J3JlIHVzZWQKK3RvLCBidXQgd2l0aCBzb21lIGRpZmZlcmVuY2VzOgorLlRQCitcKGJ1CitJ dCBoYXMgbG90cyBtb3JlIGNvbW1hbmRzIGFuZCBmZWF0dXJlcy4KKy5UUAorXChidQorRWFjaCBG VFAgY29tbWFuZCBtdXN0IGJlIHByZWZpeGVkIHdpdGggImZ0cCIsIGZvciBleGFtcGxlICJmdHAg b3BlbiIsCisiZnRwIGdldCIsICJmdHAgYnllIiwgZXRjICh0aGlzIGlzIG5vdCBzdHJpY3RseSB0 cnVlLCBidXQgdW50aWwgeW91J3JlCittb3JlIGZhbWlsaWFyIHdpdGggaXQsIGl0J3MgYmVzdCB0 byBmb2xsb3cgdGhpcyBydWxlKS4KKy5UUAorXChidQorQ29tbWFuZHMgbGlrZSAiY2QiLCAiZGly ZWN0b3J5IiwgZXRjLCBleGVjdXRlIGxvY2FsbHksIG5vdCBvbiB0aGUKK3NlcnZlci4gVXNlICJm dHAgY2QiLCAiZnRwIGRpciIsIGV0YywgdG8gaGF2ZSB0aGVtIGFjdCBvbiB0aGUgc2VydmVyLgor LlRQCitcKGJ1CitZb3UgY2FuIGhhdmUgYW4gRlRQIHNlc3Npb24gYW5kIGEgcmVndWxhciBLZXJt aXQgc2VyaWFsIG9yIFRlbG5ldAorc2Vzc2lvbiBvcGVuIGF0IHRoZSBzYW1lIHRpbWUuCisuVFAK K1woYnUKK0ZUUCBzZXNzaW9ucyBjYW4gYmUgZnVsbHkgYXV0b21hdGVkLgorLlBQCitQZW5kaW5n IHB1YmxpY2F0aW9uIG9mIHRoZSBuZXh0IGVkaXRpb24gb2YgdGhlIG1hbnVhbCwgdGhlIEtlcm1p dCBGVFAKK2NsaWVudCBpcyB0aG9yb3VnaGx5IGRvY3VtZW50ZWQgYXQgdGhlIEtlcm1pdCBQcm9q ZWN0IHdlYnNpdGU6Cisuc3AKKyAgaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Z0cGNs aWVudC5odG1sCisuc3AKK1lvdSBhbHNvIGNhbiB1c2UgSEVMUCBGVFAgYW5kIEhFTFAgU0VUIEZU UCB0byBnZXQgZGVzY3JpcHRpb25zIG9mIEtlcm1pdCdzCitGVFBcKGh5cmVsYXRlZCBjb21tYW5k cy4KKy5QUAorVGhlIEhUVFAgY2xpZW50IGlzIHNpbWlsYXIgdG8gdGhlIEZUUCBvbmUsIGV4Y2Vw dCB5b3UgcHJlZml4IGVhY2ggY29tbWFuZAord2l0aCBIVFRQIGluc3RlYWQgb2YgRlRQOiBIVFRQ IE9QRU4sIEhUVFAgR0VULCBIVFRQIFBVVCwgSFRUUCBDTE9TRSwgZXRjLgorVHlwZSBIRUxQIEhU VFAgZm9yIGRldGFpbHMsIG9yIHZpc2l0IHRoZSB0byB2aWV3IHRoZSBtYW51YWwgc3VwcGxlbWVu dHMuCitIVFRQIGNvbm5lY3Rpb25zIGNhbiBiZSBvcGVuIGF0IHRoZSBzYW1lIHRpbWUgYXMgcmVn dWxhciBzZXJpYWwgb3IgVGVsbmV0Citjb25uZWN0aW9ucyBhbmQgRlRQIGNvbm5lY3Rpb25zLiBT byBLZXJtaXQgY2FuIG1hbmFnZSB1cCB0byB0aHJlZSB0eXBlcworY29ubmVjdGlvbnMgc2ltdWx0 YW5lb3VzbHkuCisuU0ggSU5URVJORVQgS0VSTUlUIFNFUlZJQ0UKK0NcKGh5S2VybWl0IGNhbiBi ZSBjb25maWd1cmVkIGFuZCBydW4gYXMgYW4gSW50ZXJuZXQgc2VydmljZSAoY2FsbGVkIElLU0Qp LAorc2ltaWxhciB0byBhbiBGVFAgc2VydmVyIChGVFBEKSBleGNlcHQgeW91IGNhbiAoYnV0IG5l ZWQgbm90KSBpbnRlcmFjdCB3aXRoCitpdCBkaXJlY3RseSwgcGx1cyBpdCBkb2VzIGEgbG90IG1v cmUgdGhhbiBhbiBGVFAgc2VydmVyIGNhbiBkby4gVGhlIFRDUAorcG9ydCBmb3IgSUtTRCBpcyAx NjQ5LiBJdCB1c2VzIFRlbG5ldCBwcm90b2NvbC4gQ1woaHlLZXJtaXQgY2FuIGJlIGFuIEludGVy bmV0CitLZXJtaXQgU2VydmVyLCBvciBpdCBjYW4gYmUgYSBjbGllbnQgb2YgYW4gSUtTRC4gWW91 IGNhbiBtYWtlIGNvbm5lY3Rpb25zCitmcm9tIENcKGh5S2VybWl0IHRvIGFuIElLU0Qgd2l0aCBh bnkgb2YgdGhlIGZvbGxvd2luZyBjb21tYW5kczoKKy5zcAorLm5mCisgIHRlbG5ldCBmb28uYmFy LmVkdSAxNjQ5CisgIHRlbG5ldCBmb28uYmFyLmVkdSBrZXJtaXQgICA7IGlmICJrZXJtaXQiIGlz IGxpc3RlZCBpbiAvZXRjL3NlcnZpY2VzCisgIGlrc2QgZm9vLmJhci5lZHUKKy5maQorLnNwCitU aGUgSUtTRCBjb21tYW5kIGlzIGVxdWl2YWxlbnQgdG8gYSBURUxORVQgY29tbWFuZCBzcGVjaWZ5 aW5nIHBvcnQgMTY0OS4KK0ZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IG1ha2luZyBhbmQgdXNp bmcgY29ubmVjdGlvbnMgdG8gYW4gSUtTRCwgc2VlOgorLnNwCisgIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9jdWlrc2QuaHRtbAorLnNwCitZb3UgY2FuIHJ1biBhbiBJbnRlcm5ldCBL ZXJtaXQgU2VydmljZSBvbiB5b3VyIG93biBjb21wdXRlciB0b28gKGlmIHlvdSBhcmUKK3RoZSBz eXN0ZW0gYWRtaW5pc3RyYXRvcikuIEZvciBpbnN0cnVjdGlvbnMsIHNlZToKKy5zcAorICBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaWtzZC5odG1sCisuU0ggU0VDVVJJVFkKK0FsbCBv ZiBDXChoeUtlcm1pdCdzIGJ1aWx0XChoeWluIFRDUC9JUCBuZXR3b3JraW5nIG1ldGhvZHMgKFRl bG5ldCwgUmxvZ2luLCBJS1NELAorRlRQLCBhbmQgSFRUUCkgY2FuIGJlIHNlY3VyZWQgYnkgb25l IG9yIG1vcmUgb2YgdGhlIGZvbGxvd2luZyBJRVRGXChoeWFwcHJvdmVkCittZXRob2RzOgorLlBQ CitcKGJ1CU1JVCBLZXJiZXJvcyBJVgorLmJyCitcKGJ1CU1JVCBLZXJiZXJvcyBWCisuYnIKK1wo YnUJU1NML1RMUworLmJyCitcKGJ1CVN0YW5mb3JkIFNSUAorLlBQCitGb3IgY29tcGxldGUgaW5z dHJ1Y3Rpb25zIHNlZToKKy5QUAorICBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvc2Vj dXJpdHkuaHRtbAorLlBQCitBbmQgYXMgbm90ZWQgcHJldmlvdXNseSwgeW91IGNhbiBhbHNvIG1h a2UgU1NIIGNvbm5lY3Rpb25zIHdpdGggQ1woaHlLZXJtaXQgaWYKK3lvdSBhbHJlYWR5IGhhdmUg YW4gU1NIIGNsaWVudCBpbnN0YWxsZWQuCisuU0ggQUxURVJOQVRJVkUgQ09NTUFORFwoaHlMSU5F IFBFUlNPTkFMSVRJRVMKK1doZW4gaW52b2tlZCBhcyAia2VybWl0IiBvciBhbnkgb3RoZXIgbmFt ZSBiZXNpZGVzICJmdHAiIG9yICJ0ZWxuZXQiLAorQ1woaHlLZXJtaXQgaGFzIHRoZSBjb21tYW5k XChoeWxpbmUgb3B0aW9ucyBkZXNjcmliZWQgYWJvdmUgaW4gdGhlIE9QVElPTlMKK3NlY3Rpb24u IEhvd2V2ZXIsIGlmIHlvdSBpbnZva2UgQ1woaHlLZXJtaXQgYXMgInRlbG5ldCIgb3IgImZ0cCIs IGl0IGNoYW5nZXMKK2l0cyBjb21tYW5kXChoeWxpbmUgcGVyc29uYWxpdHkgdG8gbWF0Y2guIFRo aXMgY2FuIGJlIGRvbmUgKGFtb25nIG90aGVyIHdheXMpCit3aXRoIHN5bWJvbGljIGxpbmtzIChz eW1saW5rcykuIEZvciBleGFtcGxlLCBpZiB5b3Ugd2FudCBDXChoeUtlcm1pdCB0byBiZQoreW91 ciByZWd1bGFyIFRlbG5ldCBjbGllbnQsIG9yIHRoZSBUZWxuZXQgaGVscGVyIG9mIHlvdXIgV2Vi IGJyb3dzZXIsIHlvdQorY2FuIGNyZWF0ZSBhIGxpbmsgbGlrZSB0aGUgZm9sbG93aW5nIGluIGEg ZGlyZWN0b3J5IHRoYXQgbGllcyBpbiB5b3VyIFBBVEgKK2FoZWFkIG9mIHRoZSByZWd1bGFyIHRl bG5ldCBwcm9ncmFtOgorLnNwCisgIGxuIFwtcyAvdXNyL2xvY2FsL2Jpbi9rZXJtaXQgdGVsbmV0 Cisuc3AKK05vdyB3aGVuIHlvdSBnaXZlIGEgInRlbG5ldCIgY29tbWFuZCwgeW91IGFyZSBpbnZv a2luZyBLZXJtaXQgaW5zdGVhZCwgYnV0Cit3aXRoIGl0cyBUZWxuZXQgY29tbWFuZFwoaHlsaW5l IHBlcnNvbmFsaXR5IHNvLCBmb3IgZXhhbXBsZToKKy5zcAorICB0ZWxuZXQgeHl6Y29ycC5jb20K Ky5zcAorTWFrZXMgYSBUZWxuZXQgY29ubmVjdGlvbiB0byB4eXpjb3JwLmNvbSwgYW5kIEtlcm1p dCBleGl0cyBhdXRvbWF0aWNhbGx5Cit3aGVuIHRoZSBjb25uZWN0aW9uIGlzIGNsb3NlZCAoanVz dCBsaWtlIHRoZSByZWd1bGFyIFRlbG5ldCBjbGllbnQpLiBUeXBlCisidGVsbmV0IFwtaCIgdG8g Z2V0IGEgbGlzdCBvZiBLZXJtaXQncyBUZWxuZXRcKGh5cGVyc29uYWxpdHkgY29tbWFuZFwoaHls aW5lCitvcHRpb25zLCB3aGljaCBhcmUgaW50ZW5kZWQgdG8gYmUgYXMgY29tcGF0aWJsZSBhcyBw b3NzaWJsZSB3aXRoIHRoZQorcmVndWxhciBUZWxuZXQgY2xpZW50LgorLlBQCitTaW1pbGFybHkg Zm9yIEZUUDoKKy5zcAorICBsbiBcLXMgL3Vzci9sb2NhbC9iaW4va2VybWl0IGZ0cAorLnNwCitB bmQgbm93IHR5cGUgImZ0cCBcLWgiIHRvIHNlZSBpdHMgY29tbWFuZFwoaHlsaW5lIG9wdGlvbnMs IGFuZCBjb21tYW5kIGxpbmVzCitqdXN0IGxpa2UgeW91IHdvdWxkIGdpdmUgeW91ciByZWd1bGFy IEZUUCBjbGllbnQ6Cisuc3AKKyAgZnRwIHh5emNvcnAuY29tCisuc3AKK2J1dCB3aXRoIGFkZGl0 aW9uYWwgb3B0aW9ucyBhbGxvd2luZyBhbiBlbnRpcmUgc2Vzc2lvbiB0byBiZSBzcGVjaWZpZWQg b24KK3RoZSBjb21tYW5kIGxpbmUuIEZpbmFsbHksIGlmIEtlcm1pdCdzCitmaXJzdCBjb21tYW5k XChoeWxpbmUgb3B0aW9uIGlzIGEgVGVsbmV0LCBGVFAsIElLU0QsIG9yIEhUVFAgVVJMLCBLZXJt aXQKK2F1dG9tYXRpY2FsbHkgbWFrZXMgdGhlIGFwcHJvcHJpYXRlIGtpbmQgb2YgY29ubmVjdGlv biBhbmQsIGlmIGluZGljYXRlZCBieQordGhlIFVSTCwgdGFrZXMgdGhlIGRlc2lyZWQgYWN0aW9u OgorLlRQCitrZXJtaXQgdGVsbmV0Onh5emNvcnAuY29tCitPcGVucyBhIFRlbG5ldCBzZXNzaW9u CisuVFAKK2tlcm1pdCB0ZWxuZXQ6Ly9vbGdhQHh5emNvcnAuY29tCitEaXR0byBmb3IgdXNlciBv bGdhCisuVFAKK2tlcm1pdCBmdHA6Ly9vbGdhQHh5emNvcnAuY29tL3B1YmxpYy9vb2ZhLnppcAor RG93bmxvYWRzIGEgZmlsZQorLlRQCitrZXJtaXQga2VybWl0Oi8va2VybWl0LmNvbHVtYmlhLmVk dS9rZXJtaXQvZi9SRUFELk1FCitEaXR0byBmb3IgSUtTRAorLlRQCitrZXJtaXQgaWtzZDovL2tl cm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2YvUkVBRC5NRQorKFRoaXMgd29ya3MgdG9vKQorLlRQ CitrZXJtaXQgaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0bWwKK0dyYWJz IGEgd2ViIHBhZ2UKKy5maQorLlNIIExJQ0VOU0UKK0NcKGh5S2VybWl0IGhhcyBhbiB1bnVzdWFs IGxpY2Vuc2UsIGJ1dCBhIGZhaXIgYW5kIHNlbnNpYmxlIG9uZSBzaW5jZSB0aGUKK0tlcm1pdCBQ cm9qZWN0IG11c3Qgc3VwcG9ydCBpdHNlbGYgb3V0IG9mIHJldmVudWU6IGl0J3Mgbm90IGEgQlNE IGxpY2Vuc2UsCitub3QgR1BMLCBub3QgQXJ0aXN0aWMsIG5vdCBjb21tZXJjaWFsLCBub3Qgc2hh cmV3YXJlLCBub3QgZnJlZXdhcmUuIEl0IGNhbgorYmUgc3VtbWVkIHVwIGxpa2UgdGhpczogaWYg eW91IHdhbnQgQ1woaHlLZXJtaXQgZm9yIHlvdXIgb3duIHVzZSwgeW91IGNhbgorZG93bmxvYWQg YW5kIHVzZSBpdCB3aXRob3V0IGNvc3Qgb3IgbGljZW5zZSAoYnV0IHdlJ2QgYXBwcmVjaWF0ZSBp dCBpZiB5b3UKK3dvdWxkIHB1cmNoYXNlIHRoZSBtYW51YWwpLiBCdXQgaWYgeW91IHdhbnQgdG8g c2VsbCBDXChoeUtlcm1pdCBvciBidW5kbGUgaXQKK3dpdGggYSBwcm9kdWN0IG9yIG90aGVyd2lz ZSBkaXN0cmlidXRlIGl0IGluIGEgY29tbWVyY2lhbCBzZXR0aW5nIEVYQ0VQVAorV0lUSCBBTiBP UEVOXChoeVNPVVJDRSBPUEVSQVRJTkcgU1lTVEVNIERJU1RSSUJVVElPTiBzdWNoIGFzIExpbnV4 LCBGcmVlQlNELAorTmV0QlNELCBvciBPcGVuQlNELCB5b3UgbXVzdCBsaWNlbnNlIGl0LiBUbyBz ZWUgdGhlIGNvbXBsZXRlIGxpY2Vuc2UsIGdpdmUKK3RoZSBMSUNFTlNFIGNvbW1hbmQgYXQgdGhl IHByb21wdCwgb3Igc2VlIHRoZSBDT1BZSU5HLlRYVCBmaWxlIGRpc3RyaWJ1dGVkCit3aXRoIENc KGh5S2VybWl0IDcuMCBvciBsYXRlciwgb3IgZG93bmxvYWQgaXQgZnJvbQorLnNwCisgIGZ0cDov L2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2NcLWtlcm1pdC9DT1BZSU5HLlRYVAorLnNwCitT ZW5kIGxpY2Vuc2luZyBpbnF1aXJpZXMgdG8ga2VybWl0QGNvbHVtYmlhLmVkdS4KKy5TSCBCVUdT CitTZWUgdGhlIGZvbGxvd2luZyBmaWxlcyBmb3IgbGlzdGluZ3Mgb2Yga25vd24gYnVncywgbGlt aXRhdGlvbnMsCit3b3JrYXJvdW5kcywgaGludHMgYW5kIHRpcHM6CisuVFAKK2NrY2J3ci50eHQK K0dlbmVyYWwgQ1woaHlLZXJtaXQgYnVncywgaGludHMsIHRpcHMuCisuVFAKK2NrdWJ3ci50eHQK K1VuaXhcKGh5c3BlY2lmaWMgQ1woaHlLZXJtaXQgYnVncywgaGludHMsIHRpcHMuCisuUFAKK1Jl cG9ydCBidWdzIGFuZCBwcm9ibGVtcyBieSBlbWFpbCB0bzoKKy5zcAorICAga2VybWl0XC1zdXBw b3J0QGNvbHVtYmlhLmVkdS4KKy5zcAorQmVmb3JlIHJlcXVlc3RpbmcgdGVjaG5pY2FsIHN1cHBv cnQsIHBsZWFzZSByZWFkIHRoZSBoaW50cyBoZXJlOgorLnNwCisgIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9zdXBwb3J0Lmh0bWwKKy5zcAorYW5kIGFsc28gcmVhZCB0aGUgQ1woaHlL ZXJtaXQgRnJlcXVlbnRseSBBc2tlZCBRdWVzdGlvbnM6Cisuc3AKKyAgaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZmFxLmh0bWwKKy5TSCBPVEhFUiBUT1BJQ1MKK1RoZXJlJ3Mgd2F5 IG1vcmUgdG8gQ1woaHlLZXJtaXQgdGhhbiB3ZSd2ZSB0b3VjaGVkIG9uIGhlcmUgXChoeVwoaHkg dHJvdWJsZXNob290aW5nLAorY3VzdG9taXphdGlvbiwgY2hhcmFjdGVyIHNldHMsIGRpYWxpbmcg ZGlyZWN0b3JpZXMsIHNlbmRpbmcgcGFnZXMsIHNjcmlwdAord3JpdGluZywgYW5kIG9uIGFuZCBv biwgYWxsIG9mIHdoaWNoIGFyZSBjb3ZlcmVkIGluIHRoZSBtYW51YWwgYW5kIHVwZGF0ZXMKK2Fu ZCBzdXBwbGVtZW50cy4gRm9yIHRoZSBtb3N0IHVwXChoeXRvXChoeWRhdGUgaW5mb3JtYXRpb24g b24gZG9jdW1lbnRhdGlvbiAob3IKK3VwZGF0ZWQgZG9jdW1lbnRhdGlvbiBpdHNlbGYpIHZpc2l0 IHRoZSBLZXJtaXQgUHJvamVjdCB3ZWJzaXRlOgorLnNwCisgIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC8KKy5QUAorVGhlcmUgeW91IHdpbGwgYWxzbyBmaW5kIEtlcm1pdCBzb2Z0d2Fy ZSBwYWNrYWdlcyBmb3Igb3RoZXIgcGxhdGZvcm1zOgorZGlmZmVyZW50IFVuaXggdmFyaWV0aWVz LCBXaW5kb3dzLCBET1MsIFZNUywgSUJNIG1haW5mcmFtZXMsIGFuZCBtYW55CitvdGhlcnM6IDIw KyB5ZWFycycgd29ydGguCisuU0ggRE9DVU1FTlRBVElPTiBBTkQgVVBEQVRFUworVGhlIG1hbnVh bCBmb3IgQ1woaHlLZXJtaXQgaXM6CisuVFAKKy5JCitVc2luZyBDXChoeUtlcm1pdAorRnJhbmsg ZGEgQ3J1eiBhbmQgQ2hyaXN0aW5lIE0uIEdpYW5vbmUsCitTZWNvbmQgRWRpdGlvbiwgRGlnaXRh bCBQcmVzcyAvIEJ1dHRlcndvcnRoXChoeUhlaW5lbWFubiwgV29idXJuLCBNQSwgMTk5NywgNjIy CitwYWdlcywgSVNCTiAxXC01NTU1OFwtMTY0XC0xLiBUaGlzIGlzIGEgcHJpbnRlZCBib29rLiBJ dCBjb3ZlcnMgQ1woaHlLZXJtaXQgNi4wLgorLlRQCitUaGUgQ1woaHlLZXJtaXQgNy4wIFN1cHBs ZW1lbnQKK2h0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbAorLlRQ CitUaGUgQ1woaHlLZXJtaXQgOC4wIFN1cHBsZW1lbnQKK2h0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2VybWl0ODAuaHRtbAorLlRQCitUaGUgQ1woaHlLZXJtaXQgOS4wIFN1cHBsZW1l bnQKK2h0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0OTAuaHRtbAorLlBQCitW aXNpdCBDXChoeUtlcm1pdCBob21lIHBhZ2U6Cisuc3AKKyAgaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaXQuaHRtbAorLnNwCit0byBsZWFybiBhYm91dCBuZXcgdmVyc2lvbnMs IEJldGEgdGVzdHMsIGFuZCBvdGhlciBuZXdzOyB0bworcmVhZCBjYXNlIHN0dWRpZXMgYW5kIHR1 dG9yaWFsczsgdG8gZG93bmxvYWQgc291cmNlIGNvZGUsIGluc3RhbGwgcGFja2FnZXMsCithbmQg cHJlYnVpbHQgYmluYXJpZXMgZm9yIG1hbnkgcGxhdGZvcm1zLiBBbHNvIHZpc2l0OgorLlRQCito dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvc2NyaXB0bGliLmh0bWwKK1RoZSBLZXJtaXQg c2NyaXB0IGxpYnJhcnkgYW5kIHR1dG9yaWFsCisuVFAKK2h0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9uZXdmYXEuaHRtbAorVGhlIEtlcm1pdCBGQVEgKEZyZXF1ZW50bHkgQXNrZWQgUXVl c3Rpb25zIGFib3V0IEtlcm1pdCkKKy5UUAoraHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZmFxLmh0bWwKK1RoZSBDXChoeUtlcm1pdCBGQVEgKEZyZXF1ZW50bHkgQXNrZWQgUXVlc3Rp b25zIGFib3V0IENcKGh5S2VybWl0KQorLlRQCitodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvdGVsbmV0Lmh0bWwKK0NcKGh5S2VybWl0IFRlbG5ldCBjbGllbnQgZG9jdW1lbnRhdGlvbgor LlRQCitodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvc2VjdXJpdHkuaHRtbAorQ1woaHlL ZXJtaXQgc2VjdXJpdHkgZG9jdW1lbnRhdGlvbiAoS2VyYmVyb3MsIFNTTC9UTFMsIGV0YykKKy5U UAoraHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2N1aWtzZC5odG1sCitJbnRlcm5ldCBL ZXJtaXQgU2VydmljZSB1c2VyIGRvY3VtZW50YXRpb24KKy5UUAoraHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2lrc2QuaHRtbAorSW50ZXJuZXQgS2VybWl0IFNlcnZpY2UgYWRtaW5pc3Ry YXRvciBkb2N1bWVudGF0aW9uCisuVFAKK2h0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9z dHVkaWVzLmh0bWwKK0Nhc2Ugc3R1ZGllcy4KKy5UUAoraHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L3N1cHBvcnQuaHRtbAorVGVjaG5pY2FsIHN1cHBvcnQuCisuVFAKK2h0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9rOTV0dXRvcmlhbC5odG1sCitLZXJtaXQgOTUgdHV0b3JpYWwu CisuVFAKK2NvbXAucHJvdG9jb2xzLmtlcm1pdC5taXNjCitUaGUgS2VybWl0IG5ld3Nncm91cCAo dW5tb2RlcmF0ZWQpLgorLlNIIEZJTEVTCisuVFAKK0NPUFlJTkcuVFhUCitDXChoeUtlcm1pdCBs aWNlbnNlLgorLlRQCit+Ly5rZXJtcmMKK0luaXRpYWxpemF0aW9uIGZpbGUuCisuVFAKK34vLm15 a2VybXJjCitDdXN0b21pemF0aW9uIGZpbGUuCisuVFAKK34vLmtkZAorS2VybWl0IGRpYWxpbmcg ZGlyZWN0b3J5IChzZWUgbWFudWFsKS4KKy5UUAorfi8ua25kCitLZXJtaXQgbmV0d29yayBkaXJl Y3RvcnkgKHNlZSBtYW51YWwpLgorLlRQCit+Ly5rc2QKK0tlcm1pdCBzZXJ2aWNlcyBkaXJlY3Rv cnkgKHNlZSBtYW51YWwpLgorLlRQCitjYV9jZXJ0cy5wZW0KK0NlcnRpZmljYXRlIEF1dGhvcml0 eSBjZXJ0aWZjYXRlcyB1c2VkIGZvciBTU0wgY29ubmVjdGlvbnMuCisuVFAKK2NrdWlucy50eHQK K0luc3RhbGxhdGlvbiBpbnN0cnVjdGlvbnMgZm9yIFVuaXguICBBbHNvIGF0CitodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwuCisuVFAKK2NrY2J3ci50eHQKK0dlbmVy YWwgQ1woaHlLZXJtaXQgYnVncywgaGludHMsIHRpcHMuCisuVFAKK2NrdWJ3ci50eHQKK1VuaXhc KGh5c3BlY2lmaWMgQ1woaHlLZXJtaXQgYnVncywgaGludHMsIHRpcHMuCisuVFAKK2NrY3BsbS50 eHQKK0NcKGh5S2VybWl0IHByb2dyYW0gbG9naWMgbWFudWFsLgorLlRQCitja2NjZmcudHh0CitD XChoeUtlcm1pdCBjb21waWxlXChoeXRpbWUgY29uZmlndXJhdGlvbiBvcHRpb25zLgorLlRQCitz c2gKKyhpbiB5b3VyIFBBVEgpIFNTSCBjb25uZWN0aW9uIGhlbHBlci4KKy5UUAorcnosIHN6LCBl dGMuCisoaW4geW91ciBQQVRIKSBleHRlcm5hbCBwcm90b2NvbHMgZm9yIFhZWm1vZGVtLgorLlRQ CisvdmFyL3Nwb29sL2xvY2tzIChvciB3aGF0ZXZlcikKK1VVQ1AgbG9ja2ZpbGUgZm9yIGRpYWxp bmcgb3V0IChzZWUgaW5zdGFsbGF0aW9uIGluc3RydWN0aW9ucykuCisuU0ggQVVUSE9SUworLlRQ CitTb2Z0d2FyZQorRnJhbmsgZGEgQ3J1eiBhbmQgSmVmZnJleSBFIEFsdG1hbiwKKy5icgorMTk4 NVwoaHlwcmVzZW50LCB3aXRoIGNvbnRyaWJ1dGlvbnMgZnJvbSBodW5kcmVkcyBvZiBvdGhlcnMg YWxsIG92ZXIgdGhlCit3b3JsZC4KKy5UUAorRG9jdW1lbnRhdGlvbgorRnJhbmsgZGEgQ3J1egor LlRQCitBZGRyZXNzCisubmYKK1RoZSBLZXJtaXQgUHJvamVjdCBcKGh5IENvbHVtYmlhIFVuaXZl cml0eQorNjEyIFdlc3QgMTE1dGggU3RyZWV0CitOZXcgWW9yayBOWSAxMDAyNVwtNzc5OQorVVNB CisuZmkKKy5UUAorRVwoaHlNYWlsCitrZXJtaXRAY29sdW1iaWEuZWR1CisuVFAKK1dlYgoraHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0LworLmZpCisuYnIKCmRpZmYgLS1naXQgYS9ja2Vy bWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdXB0eS5jIGIvY2tlcm1pdC05LjAu MzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3VwdHkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwLi44ZTA0NzZiCi0tLSAvZGV2L251bGwKKysrIGIvY2tlcm1pdC05LjAuMzAy LWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3VwdHkuYwpAQCAtMCwwICsxLDE5ODMgQEAKK2NoYXIg KmNrcHR5diA9ICJQc2V1ZG90ZXJtaW5hbCBzdXBwb3J0LCA5LjAuMTAxLCAxMyBKdW4gMjAxMSI7 CisKKy8qICBDIEsgVSBQIFQgWSAgLS0gIEMtS2VybWl0IHBzZXVkb3Rlcm1pbmFsIGNvbnRyb2wg ZnVuY3Rpb25zIGZvciBVTklYICAqLworCisvKiBMYXN0IHVwZGF0ZTogTW9uIEp1biAxMyAxMToz Mjo1MiAyMDExICovCisKKy8qCisgIENvcHlyaWdodCAxOTk1IGJ5IHRoZSBNYXNzYWNodXNldHRz IEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LgorCisgIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBt b2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cworICBkb2N1bWVudGF0 aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHBy b3ZpZGVkCisgIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBj b3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0CisgIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVy bWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcKKyAgZG9jdW1lbnRhdGlvbiwgYW5k IHRoYXQgdGhlIG5hbWUgb2YgTS5JLlQuIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yCisg IHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUgd2l0 aG91dCBzcGVjaWZpYywKKyAgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLiAgRnVydGhlcm1vcmUg aWYgeW91IG1vZGlmeSB0aGlzIHNvZnR3YXJlIHlvdSBtdXN0CisgIGxhYmVsIHlvdXIgc29mdHdh cmUgYXMgbW9kaWZpZWQgc29mdHdhcmUgYW5kIG5vdCBkaXN0cmlidXRlIGl0IGluIHN1Y2ggYQor ICBmYXNoaW9uIHRoYXQgaXQgbWlnaHQgYmUgY29uZnVzZWQgd2l0aCB0aGUgb3JpZ2luYWwgTS5J LlQuIHNvZnR3YXJlLgorICBNLkkuVC4gbWFrZXMgbm8gcmVwcmVzZW50YXRpb25zIGFib3V0IHRo ZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvcgorICBhbnkgcHVycG9zZS4gIEl0IGlz IHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisK KyAgTW9kaWZpZWQgZm9yIHVzZSBpbiBDLUtlcm1pdCwgYW5kIG5ldyBtYXRlcmlhbCBhZGRlZCwg Ynk6CisKKyAgSmVmZnJleSBBbHRtYW4gPGphbHRtYW5Ac2VjdXJlLWVuZHBvaW50cy5jb20+Cisg IFNlY3VyZSBFbmRwb2ludHMgSW5jLiwgTmV3IFlvcmsgQ2l0eQorICBOb3ZlbWJlciAxOTk5CisK KyAgUGFyYW1ldGVyaXplZCBmb3IgcHR5IGZpbGUgZGVzY3JpcHRvciBhbmQgZnVuY3Rpb24gY29k ZSwKKyAgRnJhbmsgZGEgQ3J1eiwgQ29sdW1iaWEgVW5pdmVyc2l0eSwgTmV3IFlvcmsgQ2l0eQor ICBEZWMgMjAwNiAtIFNlcCAyMDA5CisqLworCisvKgorICBCdWlsdCBhbmQgdGVzdGVkIHN1Y2Nl c3N1bGx5IG9uOgorICAgLiA0LjRCU0QsIGluY2x1ZGluZyBCU0RJL09TLCBOZXRCU0QsIEZyZWVC U0QsIE9wZW5CU0QsIE1hYyBPUyBYCisgICAuIEFJWCA0LjEgYW5kIGxhdGVyCisgICAuIERHL1VY IDUuNFI0LjExCisgICAuIERpZ2l0YWwgVU5JWCAzLjIgYW5kIDQuMAorICAgLiBIUC1VWCA5LjAw IGFuZCBsYXRlcgorICAgLiBJUklYIDYuMCBhbmQgbGF0ZXIKKyAgIC4gTGludXgKKyAgIC4gTWFj IE9TIFggMTAuNAorICAgLiBOZVhUU1RFUCAzLngKKyAgIC4gT3BlbkJTRAorICAgLiBRTlggNC4y NSAoZXhjZXB0IFBUWSBwcm9jZXNzIHRlcm1pbmF0aW9uIG5vdCBkZXRlY3RlZCkKKyAgIC4gU0NP IE9TUjUuMC41CisgICAuIFNDTyBVbml4d2FyZSA3CisgICAuIFNJTklYIDUuNDIKKyAgIC4gU29s YXJpcyAyLnggYW5kIDcKKyAgIC4gU3VuT1MgNC4xLjMKKworICBGYWlsdXJlcyBpbmNsdWRlOgor ICAgLiBTQ08gVU5JWCAzLjJ2NC4yIChjb21waWxlIGZhaWxzIHdpdGggc3ludGF4IGVycm9yIGlu IDxtZW1vcnkuaD4pCisgICAuIEhQLVVYIDguMDAgYW5kIGVhcmxpZXIgKG5vIHZoYW5ndXAgb3Ig cHRzbmFtZSByb3V0aW5lcykKKyovCisKKyNpbmNsdWRlICJja2NzeW0uaCIKKyNpbmNsdWRlICJj a2NkZWIuaCIJCQkvKiBUbyBwaWNrIHVwIE5FVFBUWSBkZWZpbml0aW9uICovCisKKyNpZm5kZWYg TkVUUFRZCQkJCS8qIFNlbGVjdG9yIGZvciBQVFkgc3VwcG9ydCAqLworCitjaGFyICogcHR5dmVy ID0gIk5vIFBUWSBzdXBwb3J0IjsKKworI2Vsc2UgIC8qIChyZXN0IG9mIHRoaXMgbW9kdWxlLi4u KSAqLworCitjaGFyICogcHR5dmVyID0gIlBUWSBzdXBwb3J0IDguMC4wMTYsIDIyIEF1ZyAyMDA3 IjsKKworLyogVGhlc2Ugd2lsbCBubyBkb3VidCBuZWVkIGFkanVzdG1lbnQuLi4gKi8KKworI2lm bmRlZiBORVhUCisjZGVmaW5lIEhBVkVfU0VUU0lECisjZW5kaWYgLyogTkVYVCAqLworI2RlZmlu ZSBIQVZFX0tJTExQRworI2RlZmluZSBIQVZFX1RUWU5BTUUKKyNkZWZpbmUgSEFWRV9XQUlUUElE CisKKyNpZmRlZiBTVU5PUzQxCisjZGVmaW5lIEJTRDQ0T1JQT1NJWAorI2VuZGlmCS8qIFNVTk9T NDEgKi8KKworI2lmbmRlZiBVU0VfVEVSTUlPCisjaWZkZWYgTElOVVgKKyNkZWZpbmUgVVNFX1RF Uk1JTworI2Vsc2UKKyNpZmRlZiBBVFRTVgorI2RlZmluZSBVU0VfVEVSTUlPCisjZWxzZQorI2lm ZGVmIEhQVVgKKyNkZWZpbmUgVVNFX1RFUk1JTworI2Vsc2UKKyNpZmRlZiBBSVgKKyNkZWZpbmUg VVNFX1RFUk1JTworI2Vsc2UKKyNpZmRlZiBCU0Q0NE9SUE9TSVgKKyNkZWZpbmUgVVNFX1RFUk1J TworI2Vsc2UKKyNpZmRlZiBJUklYNjAKKyNkZWZpbmUgVVNFX1RFUk1JTworI2Vsc2UKKyNpZmRl ZiBRTlgKKyNkZWZpbmUgVVNFX1RFUk1JTworI2VuZGlmIC8qIFFOWCAqLworI2VuZGlmIC8qIElS SVg2MCAqLworI2VuZGlmIC8qIEJTRDQ0T1JQT1NJWCAqLworI2VuZGlmIC8qIEFJWCAqLworI2Vu ZGlmIC8qIEhQVVggKi8KKyNlbmRpZiAvKiBBVFRTViAqLworI2VuZGlmIC8qIExJTlVYICovCisj ZW5kaWYgLyogVVNFX1RFUk1JTyAqLworCisjaWZkZWYgUU5YCisjaW5jbHVkZSA8ZmNudGwuaD4K KyNlbmRpZiAvKiBRTlggKi8KKworI2lmZGVmIFVTRV9URVJNSU8KKyNkZWZpbmUgUE9TSVhfVEVS TUlPUwkJCS8qIFNlZW1zIHRvIGJlIGEgbWlzbm9tZXIgKi8KKyNlbmRpZiAvKiBVU0VfVEVSTUlP ICovCisKKyNpZmRlZiBORVhUCisjaWZuZGVmIEdFVFBHUlBfT05FQVJHCisjZGVmaW5lIEdFVFBH UlBfT05FQVJHCisjZW5kaWYgLyogR0VUUEdSUF9PTkVBUkcgKi8KKyNlbmRpZiAvKiBORVhUICov CisKKyNpZmRlZiBXQU5UX1VUTVAJCQkvKiBTZWUgY2t1cHR5LmggKi8KKy8qCisgIFdBTlRfVVRN UCBpcyBub3QgZGVmaW5lZCBiZWNhdXNlIChhKSB0aGUgdXRtcC93dG1wIGp1bmsgaXMgdGhlIG1v c3QKKyAgbm9ucG9ydGFibGUgcGFydCBvZiB0aGlzIG1vZHVsZSwgYW5kIChiKSB3ZSdyZSBub3Qg bG9nZ2luZyBhbnlib2R5CisgIGluLCB3ZSdyZSBqdXN0IHJ1bm5pbmcgYSBwcm9jZXNzLCBhbmQg ZG9uJ3QgbmVlZCB0byB3cml0ZSB1dG1wL3d0bXAgcmVjb3Jkcy4KKyovCisjaWZuZGVmIEhBVkVf U0VUVVRYRU5UCQkJLyogV2hvIGhhcyA8dXRtcHguaD4gKi8KKyNpZmRlZiBTT0xBUklTCisjZGVm aW5lIEhBVkVfU0VUVVRYRU5UCisjZWxzZQorI2lmZGVmIElSSVg2MAorI2RlZmluZSBIQVZFX1NF VFVUWEVOVAorI2Vsc2UKKyNpZmRlZiBDS19TQ09WNQorI2RlZmluZSBIQVZFX1NFVFVUWEVOVAor I2Vsc2UKKyNpZmRlZiBIUFVYMTAKKyNkZWZpbmUgSEFWRV9TRVRVVFhFTlQKKyNlbHNlCisjaWZk ZWYgVU5JWFdBUkUKKyNkZWZpbmUgSEFWRV9TRVRVVFhFTlQKKyNlbHNlCisjaWZkZWYgSVJJWDYw CisjZGVmaW5lIEhBVkVfU0VUVVRYRU5UCisjZW5kaWYgLyogSVJJWDYwICovCisjZW5kaWYgLyog VU5JWFdBUkUgKi8KKyNlbmRpZiAvKiBIUFVYMTAgKi8KKyNlbmRpZiAvKiBDS19TQ09WNSAqLwor I2VuZGlmIC8qIElSSVg2MCAqLworI2VuZGlmIC8qIFNPTEFSSVMgKi8KKyNlbmRpZiAvKiBIQVZF X1NFVFVUWEVOVCAqLworCisjaWZuZGVmIEhBVkVfVVRIT1NUCQkJLyogRG9lcyB1dG1wIGluY2x1 ZGUgdXRfaG9zdFtdPyAqLworI2lmZGVmIEhBVkVfU0VUVVRYRU5UCQkJLyogdXRtcHggYWx3YXlz IGRvZXMgKi8KKyNkZWZpbmUgSEFWRV9VVEhPU1QKKyNlbHNlCisjaWZkZWYgTElOVVgJCQkJLyog TGludXggZG9lcyAqLworI2RlZmluZSBIQVZFX1VUSE9TVAorI2Vsc2UKKyNpZmRlZiBTVU5PUzQJ CQkJLyogU3VuT1MgZG9lcyAqLworI2RlZmluZSBIQVZFX1VUSE9TVAorI2Vsc2UKKyNpZmRlZiBB SVg0MQkJCQkvKiBBSVggNC4xIGFuZCBsYXRlciBkbyAqLworI2RlZmluZSBIQVZFX1VUSE9TVAor I2VuZGlmIC8qIEFJWDQxICovCisjZW5kaWYgLyogU1VOT1M0ICovCisjZW5kaWYgLyogTElOVVgg Ki8KKyNlbmRpZiAvKiBIQVZFX1NFVFVUWEVOVCAqLworI2VuZGlmIC8qIEhBVkVfVVRIT1NUICov CisKKyNpZm5kZWYgSEFWRV9VVF9IT1NUCisjaWZuZGVmIE5PX1VUX0hPU1QKKyNkZWZpbmUgTk9f VVRfSE9TVAorI2VuZGlmIC8qIE5PX1VUX0hPU1QgKi8KKyNlbmRpZiAvKiBIQVZFX1VUX0hPU1Qg Ki8KKworI2VuZGlmIC8qIFdBTlRfVVRNUCAqLworCisjaWZkZWYgTElOVVgKKyNkZWZpbmUgQ0tf VkhBTkdVUAorI2RlZmluZSBIQVZFX1NZU19TRUxFQ1RfSAorI2RlZmluZSBIQVZFX0dFVFVURU5U CisjZGVmaW5lIEhBVkVfU0VUVVRFTlQKKyNkZWZpbmUgSEFWRV9VUERXVE1QCisjZW5kaWYgLyog TElOVVggKi8KKworI2lmZGVmIEhQVVgxMAorI2RlZmluZSBDS19WSEFOR1VQCisjZGVmaW5lIFZI QU5HX0ZJUlNUCisjZGVmaW5lIEhBVkVfUFRTTkFNRQorI2lmbmRlZiBIQVZFX1BUWVRSQVAKKyNk ZWZpbmUgSEFWRV9QVFlUUkFQCisjZW5kaWYgLyogSEFWRV9QVFlUUkFQICovCisjZWxzZQorI2lm ZGVmIEhQVVg5CisjZGVmaW5lIENLX1ZIQU5HVVAKKyNkZWZpbmUgVkhBTkdfRklSU1QKKyNkZWZp bmUgSEFWRV9QVFNOQU1FCisjaWZuZGVmIEhBVkVfUFRZVFJBUAorI2RlZmluZSBIQVZFX1BUWVRS QVAKKyNlbmRpZiAvKiBIQVZFX1BUWVRSQVAgKi8KKyNlbmRpZiAvKiBIUFVYOSAqLworI2VuZGlm IC8qIEhQVVgxMCAqLworCisjaWZkZWYgU1VOT1M0CisjZGVmaW5lIENLX1ZIQU5HVVAKKyNkZWZp bmUgTk9fVVRfUElECisjZGVmaW5lIFZIQU5HX0ZJUlNUCisjZW5kaWYgLyogU1VOT1M0ICovCisK KyNpZmRlZiBJUklYNjAKKyNkZWZpbmUgQ0tfVkhBTkdVUAorI2RlZmluZSBIQVZFX19HRVRQVFkK KyNlbmRpZiAvKiBJUklYNjAgKi8KKworI2lmZGVmIFNJTklYCisjZGVmaW5lIEhBVkVfU1RSRUFN UworI2RlZmluZSBIQVZFX0dSQU5UUFQKKyNkZWZpbmUgSEFWRV9QVFNOQU1FCisjZGVmaW5lIFBV U0hfUFRFTQorI2RlZmluZSBQVVNIX0xEVEVSTQorI2RlZmluZSBQVVNIX1RUQ09NUEFUCisjZW5k aWYgLyogU0lOSVggKi8KKworI2lmZGVmIHVsdHJpeAorI2RlZmluZSBNVVNUX1NFVFBHUlAKKyNl bmRpZiAvKiB1bHRyaXggKi8KKworI2lmZGVmIFFOWAorI2RlZmluZSBNVVNUX1NFVFBHUlAKKyNk ZWZpbmUgTk9fREVWVFRZCisjZGVmaW5lIElOSVRfU1BUWQorI2VuZGlmIC8qIFFOWCAqLworCisj aWZkZWYgTElOVVgKKyNpZmRlZiBIQVZFX1BUTVgKKyNkZWZpbmUgSEFWRV9HUkFOVFBUCisjZGVm aW5lIEhBVkVfUFRTTkFNRQorI2VuZGlmIC8qIEhBVkVfUFRNWCAqLworI2Vsc2UKKyNpZmRlZiBI QVZFX1NUUkVBTVMKKyNkZWZpbmUgSEFWRV9QVE1YCisjZW5kaWYgLyogSEFWRV9TVFJFQU1TICov CisjZW5kaWYgLyogTElOVVggKi8KKworI2luY2x1ZGUgImNrdXB0eS5oIgorCisjaWZkZWYgUFRZ Tk9CTE9DSworI2lmbmRlZiBPX05ERUxBWQorI2lmZGVmIE9fTk9OQkxPQ0sKKyNkZWZpbmUgT19O REVMQVkgT19OT05CTE9DSworI2VuZGlmIC8qIE9fTk9OQkxPQ0sgKi8KKyNlbmRpZiAvKiBPX05E RUxBWSAqLworI2Vsc2UgLyogUFRZTk9CTE9DSyAqLworI2lmZGVmIE9fTkRFTEFZCisjdW5kZWYg T19OREVMQVkKKyNlbmRpZiAvKiBPX05ERUxBWSAqLworI2RlZmluZSBPX05ERUxBWSAwCisjZW5k aWYgLyogUFRZTk9CTE9DSyAqLworCisjaWZuZGVmIE9OTENSCisjZGVmaW5lIE9OTENSIDAKKyNl bmRpZiAvKiBPTkxDUiAqLworCisjaWZkZWYgQ0tfV0FJVF9ICisjaW5jbHVkZSA8c3lzL3dhaXQu aD4KKyNlbmRpZiAvKiBDS19XQUlUX0ggKi8KKworI2lmZGVmIFNUUkVBTVNQVFkKKyNpZm5kZWYg SU5JVF9TUFRZCisjZGVmaW5lIElOSVRfU1BUWQorI2VuZGlmIC8qIElOSVRfU1BUWSAqLworCisj aW5jbHVkZSA8c3lzL3N0cmVhbS5oPgorI2luY2x1ZGUgPHN0cm9wdHMuaD4KKyNpbmNsdWRlIDx0 ZXJtaW8uaD4KKworLyogTWFrZSBzdXJlIHdlIGRvbid0IGdldCB0aGUgQlNEIHZlcnNpb24gKi8K KworI2lmZGVmIEhBVkVfU1lTX1RUWV9ICisjaW5jbHVkZSAiL3Vzci9pbmNsdWRlL3N5cy90dHku aCIKKyNlbmRpZiAvKiBIQVZFX1NZU19UVFlfSCAqLworCisjaWZkZWYgSEFTX1BUWVZBUgkJCS8q IFdoZXJlIGlzIHRoaXMgc2V0PyAqLworCisjaW5jbHVkZSA8c3lzL3B0eXZhci5oPgorCisjZWxz ZSAvKiBIQVNfUFRZVkFSICovCisKKyNpZm5kZWYgVElPQ1BLVF9GTFVTSFdSSVRFCisjZGVmaW5l IFRJT0NQS1RfRkxVU0hXUklURSAweDAyCisjZGVmaW5lIFRJT0NQS1RfTk9TVE9QICAgICAweDEw CisjZGVmaW5lIFRJT0NQS1RfRE9TVE9QICAgICAweDIwCisjZGVmaW5lIFRJT0NQS1RfSU9DVEwg ICAgICAweDQwCisjZW5kaWYgLyogVElPQ1BLVF9GTFVTSFdSSVRFICovCisKKyNlbmRpZiAvKiBI QVNfUFRZVkFSICovCisKKyNpZmRlZiBIQVZFX1RUWV9ICisjaW5jbHVkZSA8dHR5Lmg+CisjZW5k aWYgLyogSEFWRV9UVFlfSCAqLworCisvKgorICBCZWNhdXNlIG9mIHRoZSB3YXkgcHR5aWJ1ZiBp cyB1c2VkIHdpdGggc3RyZWFtcyBtZXNzYWdlcywgd2UgbmVlZAorICBwdHlpYnVmKzEgdG8gYmUg b24gYSBmdWxsLXdvcmQgYm91bmRhcnkuICBUaGUgZm9sbG93aW5nIHdlaXJkbmVzcworICBpcyBz aW1wbHkgdG8gbWFrZSB0aGF0IGhhcHBlbi4KKyovCitsb25nIHB0eWlidWZidWZbQlVGU0laL3Np emVvZihsb25nKSsxXTsKK2NoYXIgKnB0eWlidWYgPSAoKGNoYXIgKikmcHR5aWJ1ZmJ1ZlsxXSkt MTsKK2NoYXIgKnB0eWlwID0gKChjaGFyICopJnB0eWlidWZidWZbMV0pLTE7CitjaGFyIHB0eWli dWYyW0JVRlNJWl07Cit1bnNpZ25lZCBjaGFyIGN0bGJ1ZltCVUZTSVpdOworc3RydWN0IHN0cmJ1 ZiBzdHJidWZjLCBzdHJidWZkOworCitpbnQgcmVhZHN0cmVhbSgpOworCisjZWxzZSAgLyogISBT VFJFQU1TUFRZICovCisKKy8qIEkvTyBkYXRhIGJ1ZmZlcnMsIHBvaW50ZXJzLCBhbmQgY291bnRl cnMuICovCisKK2NoYXIgcHR5aWJ1ZltCVUZTSVpdLCAqcHR5aXAgPSBwdHlpYnVmOworY2hhciBw dHlpYnVmMltCVUZTSVpdOworCisjZW5kaWYgLyogISBTVFJFQU1TUFRZICovCisKKyNpZm5kZWYg VVNFX1RFUk1JTworc3RydWN0IHRlcm1idWYgeworICAgIHN0cnVjdCBzZ3R0eWIgc2c7CisgICAg c3RydWN0IHRjaGFycyB0YzsKKyAgICBzdHJ1Y3QgbHRjaGFycyBsdGM7CisgICAgaW50IHN0YXRl OworICAgIGludCBsZmxhZ3M7Cit9IHRlcm1idWYsIHRlcm1idWYyOworCisjZGVmaW5lIGNmc2V0 b3NwZWVkKHRwLHZhbCkgKHRwKS0+c2cuc2dfb3NwZWVkID0gKHZhbCkKKyNkZWZpbmUgY2ZzZXRp c3BlZWQodHAsdmFsKSAodHApLT5zZy5zZ19pc3BlZWQgPSAodmFsKQorI2RlZmluZSBjZmdldG9z cGVlZCh0cCkgICAgICh0cCktPnNnLnNnX29zcGVlZAorI2RlZmluZSBjZmdldGlzcGVlZCh0cCkg ICAgICh0cCktPnNnLnNnX2lzcGVlZAorCisjZWxzZSAgLyogVVNFX1RFUk1JTyAqLworCisjaWZk ZWYgU1lTVl9URVJNSU8KKyNkZWZpbmUgdGVybWlvcyB0ZXJtaW8KKyNlbmRpZiAvKiBTWVNWX1RF Uk1JTyAqLworCisjaWZuZGVmIFRDU0FOT1cKKworI2lmZGVmIFRDU0VUUworCisjZGVmaW5lIFRD U0FOT1cgVENTRVRTCisjZGVmaW5lIFRDU0FEUkFJTiBUQ1NFVFNXCisjZGVmaW5lIHRjZ2V0YXR0 cihmLCB0KSBpb2N0bChmLCBUQ0dFVFMsIChjaGFyICopdCkKKworI2Vsc2UgLyogVENTRVRTICov CisKKyNpZmRlZiBUQ1NFVEEKKyNkZWZpbmUgVENTQU5PVyBUQ1NFVEEKKyNkZWZpbmUgVENTQURS QUlOIFRDU0VUQVcKKyNkZWZpbmUgdGNnZXRhdHRyKGYsdCkgaW9jdGwoZixUQ0dFVEEsKGNoYXIg Kil0KQorI2Vsc2UgLyogVENTRVRBICovCisjZGVmaW5lIFRDU0FOT1cgVElPQ1NFVEEKKyNkZWZp bmUgVENTQURSQUlOIFRJT0NTRVRBVworI2RlZmluZSB0Y2dldGF0dHIoZix0KSBpb2N0bChmLFRJ T0NHRVRBLChjaGFyICopdCkKKyNlbmRpZiAvKiBUQ1NFVEEgKi8KKworI2VuZGlmIC8qIFRDU0VU UyAqLworCisjZGVmaW5lIHRjc2V0YXR0cihmLGEsdCkgaW9jdGwoZixhLHQpCisjZGVmaW5lIGNm c2V0b3NwZWVkKHRwLHZhbCkgKHRwKS0+Y19jZmxhZyAmPSB+Q0JBVUQ7KHRwKS0+Y19jZmxhZ3w9 KHZhbCkKKyNkZWZpbmUgY2ZnZXRvc3BlZWQodHApICgodHApLT5jX2NmbGFnICYgQ0JBVUQpCisK KyNpZmRlZiBDSUJBVUQKKyNkZWZpbmUgY2ZzZXRpc3BlZWQodHAsdmFsKSBcCisgKHRwKS0+Y19j ZmxhZyAmPSB+Q0lCQVVEOyAodHApLT5jX2NmbGFnIHw9ICgodmFsKTw8SUJTSElGVCkKKyNkZWZp bmUgY2ZnZXRpc3BlZWQodHApICgoKHRwKS0+Y19jZmxhZyAmIENJQkFVRCk+PklCU0hJRlQpCisj ZWxzZSAvKiBDSUJBVUQgKi8KKyNkZWZpbmUgY2ZzZXRpc3BlZWQodHAsdmFsKSAodHApLT5jX2Nm bGFnICY9IH5DQkFVRDsgKHRwKS0+Y19jZmxhZ3w9KHZhbCkKKyNkZWZpbmUgY2ZnZXRpc3BlZWQo dHApICgodHApLT5jX2NmbGFnICYgQ0JBVUQpCisjZW5kaWYgLyogQ0lCQVVEICovCisKKyNlbmRp ZiAvKiBUQ1NBTk9XICovCisKKyNpZmRlZiBIQVZFX09QRU5QVFkKKyNpbmNsdWRlIDxwdHkuaD4K KyNlbmRpZgorCitzdHJ1Y3QgdGVybWlvcyB0ZXJtYnVmLCB0ZXJtYnVmMjsgICAgICAgLyogcHR5 IGNvbnRyb2wgc3RydWN0dXJlICovCisKKyNpZmRlZiBJTklUX1NQVFkKK3N0YXRpYyBpbnQgc3B0 eSA9IC0xOworI2VuZGlmIC8qIElOSVRfU1BUWSAqLworCisjZW5kaWYgLyogVVNFX1RFUk1JTyAq LworCisjaWZkZWYgUU5YCQkJCS8qIDI5OSAqLworI2lmbmRlZiBJWEFOWQorI2RlZmluZSBJWEFO WSAwCisjZW5kaWYJLyogSVhBTlkgKi8KKyNlbmRpZgkvKiBRTlggKi8KKworc3RhdGljIGludCBt c2cgPSAwOworCisvKiBWYXJpYWJsZXMgYXZhaWxhYmxlIHRvIG90aGVyIG1vZHVsZXMgKi8KKwor aW50IHB0eV9mb3JrX2FjdGl2ZSA9IDA7CQkvKiBwdHkgZm9yayBpcyBhY3RpdmUgKi8KK1BJRF9U IHB0eV9mb3JrX3BpZCA9IC0xOwkJLyogcHR5IGZvcmsgcGlkICovCitpbnQgcHR5X3NsYXZlX2Zk ID0gLTE7CQkJLyogcHR5IHNsYXZlIGZpbGUgZGVzY3JpcHRvciAqLworaW50IHB0eV9tYXN0ZXJf ZmQgPSAtMTsJCQkvKiBwdHkgbWFzdGVyIGZpbGUgZGVzY3JpcHRvciAqLworCisvKiB0ZXJtYnVm IHJvdXRpbmVzIChiZWdpbikgKi8KKy8qCisgIGluaXRfdGVybWJ1ZigpCisgIGNvcHlfdGVybWJ1 ZihjcCkKKyAgc2V0X3Rlcm1idWYoKQorCisgIFRoZXNlIHRocmVlIHJvdXRpbmVzIGFyZSB1c2Vk IHRvIGdldCBhbmQgc2V0IHRoZSAidGVybWJ1ZiIgc3RydWN0dXJlCisgIHRvIGFuZCBmcm9tIHRo ZSBrZXJuZWwuICBpbml0X3Rlcm1idWYoKSBnZXRzIHRoZSBjdXJyZW50IHNldHRpbmdzLgorICBj b3B5X3Rlcm1idWYoKSBoYW5kcyBpbiBhIG5ldyAidGVybWJ1ZiIgdG8gd3JpdGUgdG8gdGhlIGtl cm5lbCwgYW5kCisgIHNldF90ZXJtYnVmKCkgd3JpdGVzIHRoZSBzdHJ1Y3R1cmUgaW50byB0aGUg a2VybmVsLgorKi8KK1ZPSUQKK2luaXRfdGVybWJ1ZihmZCkgaW50IGZkOyB7CisgICAgaW50IHR0 eWZkOworICAgIGludCByYyA9IDA7CisKKyAgICB0dHlmZCA9IGZkOworCisjaWZkZWYgSEFWRV9T VFJFQU1TCisgICAgZGVidWcoRjEwMCwiaW5pdF90ZXJtYnVmIEhBVkVfU1RSRUFNUyIsIiIsMCk7 CisjZWxzZQorICAgIGRlYnVnKEYxMDAsImluaXRfdGVybWJ1ZiBIQVZFX1NUUkVBTVMgTk9UIERF RklORUQiLCIiLDApOworI2VuZGlmCS8qIEhBVkVfU1RSRUFNUyAqLworI2lmZGVmIFNUUkVBTVNQ VFkKKyAgICBkZWJ1ZyhGMTAwLCJpbml0X3Rlcm1idWYgU1RSRUFNU1BUWSIsIiIsMCk7CisjZWxz ZQorICAgIGRlYnVnKEYxMDAsImluaXRfdGVybWJ1ZiBTVFJFQU1TUFRZIE5PVCBERUZJTkVEIiwi IiwwKTsKKyNlbmRpZgkvKiBTVFJFQU1TUFRZICovCisjaWZkZWYgSU5JVF9TUFRZCisgICAgZGVi dWcoRjEwMCwiaW5pdF90ZXJtYnVmIElOSVRfU1BUWSIsIiIsMCk7CisjZWxzZQorICAgIGRlYnVn KEYxMDAsImluaXRfdGVybWJ1ZiBJTklUX1NQVFkgTk9UIERFRklORUQiLCIiLDApOworI2VuZGlm CS8qIElOSVRfU1BUWSAqLworCisgICAgZGVidWcoRjEwMSwiaW5pdF90ZXJtYnVmIHR0eWZkIiwi Iix0dHlmZCk7CisjaWZkZWYgSU5JVF9TUFRZCisgICAgZGVidWcoRjEwMSwiaW5pdF90ZXJtYnVm IHNwdHkiLCIiLHNwdHkpOworI2VuZGlmCS8qIElOSVRfU1BUWSAqLworCisgICAgbWVtc2V0KCZ0 ZXJtYnVmLDAsc2l6ZW9mKHRlcm1idWYpKTsKKyAgICBtZW1zZXQoJnRlcm1idWYyLDAsc2l6ZW9m KHRlcm1idWYyKSk7CisjaWZuZGVmCVVTRV9URVJNSU8KKyAgICByYyA9IGlvY3RsKHR0eWZkLCBU SU9DR0VUUCwgKGNoYXIgKikmdGVybWJ1Zi5zZyk7CisgICAgcmMgfD0gaW9jdGwodHR5ZmQsIFRJ T0NHRVRDLCAoY2hhciAqKSZ0ZXJtYnVmLnRjKTsKKyAgICByYyB8PSBpb2N0bCh0dHlmZCwgVElP Q0dMVEMsIChjaGFyICopJnRlcm1idWYubHRjKTsKKyNpZmRlZiBUSU9DR1NUQVRFCisgICAgcmMg fD0gaW9jdGwodHR5ZmQsIFRJT0NHU1RBVEUsIChjaGFyICopJnRlcm1idWYuc3RhdGUpOworI2Vu ZGlmIC8qIFRJT0NHU1RBVEUgKi8KKyNlbHNlIC8qIFVTRV9URVJNSU8gKi8KKyAgICBlcnJubyA9 IDA7CisjaWZkZWYgSU5JVF9TUFRZCisgICAgcmMgPSB0Y2dldGF0dHIoc3B0eSwgJnRlcm1idWYp OworICAgIGRlYnVnKEYxMTEsImluaXRfdGVybWJ1ZigpIHRjZ2V0YXR0cihzcHR5KSIsY2tpdG9h KHJjKSxlcnJubyk7CisjZWxzZQorICAgIHJjID0gdGNnZXRhdHRyKHR0eWZkLCAmdGVybWJ1Zik7 CisgICAgZGVidWcoRjExMSwiaW5pdF90ZXJtYnVmKCkgdGNnZXRhdHRyKHR0eWZkKSIsY2tpdG9h KHJjKSxlcnJubyk7CisjZW5kaWYgLyogSU5JVF9TUFRZICovCisjZW5kaWYgLyogVVNFX1RFUk1J TyAqLworICAgIGlmICghcmMpCisgICAgICB0ZXJtYnVmMiA9IHRlcm1idWY7Cit9CisKKyNpZmRl ZiBUSU9DUEtUX0lPQ1RMCitWT0lECitjb3B5X3Rlcm1idWYoY3AsIGxlbikgY2hhciAqY3A7IGlu dCBsZW47IHsKKyAgICBpZiAobGVuID4gc2l6ZW9mKHRlcm1idWYpKQorICAgICAgbGVuID0gc2l6 ZW9mKHRlcm1idWYpOworICAgIG1lbWNweSgoY2hhciAqKSZ0ZXJtYnVmLCBjcCwgbGVuKTsKKyAg ICB0ZXJtYnVmMiA9IHRlcm1idWY7Cit9CisjZW5kaWYgLyogVElPQ1BLVF9JT0NUTCAqLworCitW T0lECitzZXRfdGVybWJ1ZihmZCkgaW50IGZkOyB7CQkvKiBPbmx5IG1ha2UgdGhlIG5lY2Vzc2Fy eSBjaGFuZ2VzLiAqLworICAgIGludCB4OworICAgIGludCB0dHlmZDsKKyAgICB0dHlmZCA9IGZk OworCisgICAgZGVidWcoRjEwMSwic2V0X3Rlcm1idWYgdHR5ZmQiLCIiLHR0eWZkKTsKKyNpZmRl ZiBJTklUX1NQVFkKKyAgICBkZWJ1ZyhGMTAxLCJzZXRfdGVybWJ1ZiBzcHR5IiwiIixzcHR5KTsK KyNlbmRpZgkvKiBJTklUX1NQVFkgKi8KKworI2lmbmRlZglVU0VfVEVSTUlPCisgICAgZGVidWco RjEwMCwic2V0X3Rlcm1idWYgVVNFX1RFUk1JTyIsIiIsMCk7CisgICAgaWYgKG1lbWNtcCgoY2hh ciAqKSZ0ZXJtYnVmLnNnLCAoY2hhciAqKSZ0ZXJtYnVmMi5zZywgc2l6ZW9mKHRlcm1idWYuc2cp KSkKKyAgICAgIGlvY3RsKHR0eWZkLCBUSU9DU0VUTiwgKGNoYXIgKikmdGVybWJ1Zi5zZyk7Cisg ICAgaWYgKG1lbWNtcCgoY2hhciAqKSZ0ZXJtYnVmLnRjLCAoY2hhciAqKSZ0ZXJtYnVmMi50Yywg c2l6ZW9mKHRlcm1idWYudGMpKSkKKyAgICAgIGlvY3RsKHR0eWZkLCBUSU9DU0VUQywgKGNoYXIg KikmdGVybWJ1Zi50Yyk7CisgICAgaWYgKG1lbWNtcCgoY2hhciAqKSZ0ZXJtYnVmLmx0YywgKGNo YXIgKikmdGVybWJ1ZjIubHRjLAorCSAgICAgICBzaXplb2YodGVybWJ1Zi5sdGMpKSkKKyAgICAg IGlvY3RsKHR0eWZkLCBUSU9DU0xUQywgKGNoYXIgKikmdGVybWJ1Zi5sdGMpOworICAgIGlmICh0 ZXJtYnVmLmxmbGFncyAhPSB0ZXJtYnVmMi5sZmxhZ3MpCisgICAgICBpb2N0bCh0dHlmZCwgVElP Q0xTRVQsIChjaGFyICopJnRlcm1idWYubGZsYWdzKTsKKyNlbHNlICAvKiBVU0VfVEVSTUlPICov CisgICAgeCA9IG1lbWNtcCgoY2hhciAqKSZ0ZXJtYnVmLCAoY2hhciAqKSZ0ZXJtYnVmMiwgc2l6 ZW9mKHRlcm1idWYpKTsKKyAgICBkZWJ1ZyhGMTAxLCJzZXRfdGVybWJ1ZiAhVVNFX1RFUk1JTyBt ZW1jbXAiLCIiLHgpOworICAgIHggPSAxOwkJCQkvKiBGb3JjZSB0aGlzICovCisgICAgaWYgKHgp IHsKKwlpbnQgeDsKKwllcnJubyA9IDA7CisjaWZkZWYgSU5JVF9TUFRZCisJZGVidWcoRjEwMCwi c2V0X3Rlcm1idWYgSU5JVF9TUFRZIiwiIiwwKTsKKwl4ID0gdGNzZXRhdHRyKHNwdHksIFRDU0FO T1csICZ0ZXJtYnVmKTsKKwlkZWJ1ZyhGMTExLCJzZXRfdGVybWJ1ZiB0Y3NldGF0dHIoc3B0eSki LGNraXRvYSh4KSxlcnJubyk7CisjZWxzZQorCWRlYnVnKEYxMDAsInNldF90ZXJtYnVmICFJTklU X1NQVFkiLCIiLDApOworCXggPSB0Y3NldGF0dHIodHR5ZmQsIFRDU0FOT1csICZ0ZXJtYnVmKTsK KwlkZWJ1ZyhGMTExLCJzZXRfdGVybWJ1ZiB0Y3NldGF0dHIodHR5ZmQpIixja2l0b2EoeCksZXJy bm8pOworI2VuZGlmIC8qIElOSVRfU1BUWSAqLworICAgIH0KKyNlbmRpZiAvKiBVU0VfVEVSTUlP ICovCit9CisvKiB0ZXJtYnVmIHJvdXRpbmVzIChlbmQpICovCisKK1ZPSUQKK3B0eWludF92aGFu Z3VwKCkgeworI2lmZGVmIENLX1ZIQU5HVVAKKyNpZmRlZiBDS19QT1NJWF9TSUcKKyAgICBzdHJ1 Y3Qgc2lnYWN0aW9uIHNhOworICAgIC8qIEluaXRpYWxpemUgInNhIiBzdHJ1Y3R1cmUuICovCisg ICAgc2lnZW1wdHlzZXQoJnNhLnNhX21hc2spOworICAgIHNhLnNhX2ZsYWdzID0gMDsKKyAgICBz YS5zYV9oYW5kbGVyID0gU0lHX0lHTjsKKyAgICBzaWdhY3Rpb24oU0lHSFVQLCAmc2EsIChzdHJ1 Y3Qgc2lnYWN0aW9uICopMCk7CisgICAgdmhhbmd1cCgpOworICAgIHNhLnNhX2hhbmRsZXIgPSBT SUdfREZMOworICAgIHNpZ2FjdGlvbihTSUdIVVAsICZzYSwgKHN0cnVjdCBzaWdhY3Rpb24gKikw KTsKKyNlbHNlIC8qIENLX1BPU0lYX1NJRyAqLworICAgIHNpZ25hbChTSUdIVVAsU0lHX0lHTik7 CisgICAgdmhhbmd1cCgpOworICAgIHNpZ25hbChTSUdIVVAsU0lHX0RGTCk7CisjZW5kaWYgLyog Q0tfUE9TSVhfU0lHICovCisjZW5kaWYgLyogQ0tfVkhBTkdVUCAqLworfQorCisvKgorICBUaGlz IHJvdXRpbmUgaXMgY2FsbGVkIHR3aWNlLiAgSXQncyBub3QgcGFydGljdWxhcmx5IGltcG9ydGFu dCB0aGF0IHRoZQorICBzZXRzaWQoKSBvciBUSU9DU0NUVFkgaW9jdGxzIHN1Y2NlZWQgKHRoZXkg bWF5IG5vdCB0aGUgc2Vjb25kIHRpbWUpLCBidXQKKyAgcmF0aGVyIHRoYXQgd2UgaGF2ZSBhIGNv bnRyb2xsaW5nIHRlcm1pbmFsIGF0IHRoZSBlbmQuICBJdCBpcyBhc3N1bWVkIHRoYXQKKyAgdmhh bmd1cCBkb2Vzbid0IGV4aXN0IGFuZCBjb25mdXNlIHRoZSBwcm9jZXNzJ3Mgbm90aW9uIG9mIGNv bnRyb2xsaW5nCisgIHRlcm1pbmFsIG9uIGFueSBzeXN0ZW0gd2l0aG91dCBUSU9DTk9UVFkuICBU aGF0IGlzLCBlaXRoZXIgdmhhbmd1cCgpIGxlYXZlcworICB0aGUgY29udHJvbGxpbmcgdGVybWlu YWwgaW4gdGFjdCwgYnJlYWtzIHRoZSBhc3NvY2lhdGlvbiBjb21wbGV0ZWx5LCBvciB0aGUKKyAg c3lzdGVtIHByb3ZpZGVzIFRJT0NOT1RUWSB0byBnZXQgdGhpbmdzIGJhY2sgaW50byBhIHJlYXNv bmFibGUgc3RhdGUuICBJbgorICBwcmFjdGljZSwgdmhhbmd1cCgpIGVpdGhlciBicmVha3MgdGhl IGFzc29jaWF0aW9uIGNvbXBsZXRlbHkgb3IgZG9lc24ndAorICBlZmZlY3QgY29udHJvbGxpbmcg dGVybWluYWxzLCBzbyB0aGlzIGNvbmRpdGlvbiBpcyBtZXQuCisqLworbG9uZworcHR5aW50X3Zv aWRfYXNzb2NpYXRpb24oKSB7CisgICAgaW50IGNvbl9mZDsKKyNpZmRlZiBIQVZFX1NFVFNJRAor ICAgIGRlYnVnKEYxMTAsCisJICAicHR5aW50X3ZvaWRfYXNzb2NpYXRpb24oKSIsCisJICAic2V0 c2lkKCkiLAorCSAgMAorCSAgKTsKKyAgICBzZXRzaWQoKTsKKyNlbmRpZiAvKiBIQVZFX1NFVFNJ RCAqLworCisjaWZuZGVmIE5PX0RFVlRUWQorICAgIC8qIFZvaWQgdHR5IGFzc29jaWF0aW9uIGZp cnN0ICovCisjaWZkZWYgVElPQ05PVFRZCisgICAgY29uX2ZkID0gb3BlbigiL2Rldi90dHkiLCBP X1JEV1IpOworICAgIGRlYnVnKEYxMTEsCisJICAicHR5aW50X3ZvaWRfYXNzb2NpYXRpb24oKSBv cGVuKC9kZXYvdHR5LE9fUkRXUikiLAorCSAgIi9kZXYvdHR5IiwKKwkgIGNvbl9mZCk7CisgICAg aWYgKGNvbl9mZCA+PSAwKSB7CisgICAgICAgIGlvY3RsKGNvbl9mZCwgVElPQ05PVFRZLCAwKTsK KyAgICAgICAgY2xvc2UoY29uX2ZkKTsKKyAgICB9CisjaWZkZWYgREVCVUcKKyAgICBlbHNlIGRl YnVnKEYxMDEsICJwdHlpbnRfdm9pZF9hc3NvY2lhdGlvbigpIG9wZW4oKSBlcnJubyIsIiIsZXJy bm8pOworI2VuZGlmIC8qIERFQlVHICovCisjZW5kaWYgLyogVElPQ05PVFRZICovCisjZW5kaWYg LyogTk9fREVWVFRZICovCisgICAgcmV0dXJuKDApOworfQorCisvKiBQSUQgbWF5IGJlIHplcm8g Zm9yIHVua25vd24uKi8KKworbG9uZworcHR5X2NsZWFudXAoc2xhdmUsIHBpZCwgdXBkYXRlX3V0 bXApIGNoYXIgKnNsYXZlOyBpbnQgcGlkOyBpbnQgdXBkYXRlX3V0bXA7IHsKKyNpZmRlZiBWSEFO R19MQVNUCisgICAgaW50IHJldHZhbCwgZmQ7CisjZW5kaWYgLyogVkhBTkdfTEFTVCAqLworCisg ICAgZGVidWcoRjExMSwicHR5X2NsZWFudXAoKSIsc2xhdmUscGlkKTsKKyNpZmRlZiBXQU5UX1VU TVAKKyAgICBpZiAodXBkYXRlX3V0bXApCisgICAgICBwdHlfdXBkYXRlX3V0bXAoUFRZX0RFQURf UFJPQ0VTUywKKwkJICAgICAgMCwKKwkJICAgICAgIiIsCisJCSAgICAgIHNsYXZlLAorCQkgICAg ICAoY2hhciAqKTAsCisJCSAgICAgIFBUWV9VVE1QX1VTRVJOQU1FX1ZBTElECisJCSAgICAgICk7 CisjZW5kaWYgLyogV0FOVF9VVE1QICovCisKKyNpZmRlZiBTRVRVSUQKKyAgICBjaG1vZChzbGF2 ZSwgMDY2Nik7CisgICAgY2hvd24oc2xhdmUsIDAsIDApOworI2VuZGlmIC8qIFNFVFVJRCAqLwor CisjaWZkZWYgSEFWRV9SRVZPS0UKKyAgICByZXZva2Uoc2xhdmUpOworICAgIC8qCisgICAgICAg UmV2b2tlIGlzbid0IGd1YXJhbnRlZWQgdG8gc2VuZCBhIFNJR0hVUCB0byB0aGUgcHJvY2Vzc2Vz IGl0CisgICAgICAgZGlzc29jaWF0ZXMgZnJvbSB0aGUgdGVybWluYWwuICBUaGUgYmVzdCBzb2x1 dGlvbiB3aXRob3V0IGEgUG9zaXgKKyAgICAgICBtZWNoYW5pc20gZm9yIGZvcmNpbmcgYSBoYW5n dXAgaXMgdG8ga2lsbHBnKCkgdGhlIHByb2Nlc3MgZ3JvdXAgb2YgdGhlCisgICAgICAgcHR5LiAg VGhpcyB3aWxsIGF0IGxlYXN0IGtpbGwgdGhlIHNoZWxsIGFuZCBob3BlZnVsbHksIHRoZSBjaGls ZAorICAgICAgIHByb2Nlc3Nlcy4gIFRoaXMgaXMgbm90IGFsd2F5cyB0aGUgY2FzZSwgaG93ZXZl ci4gIElmIHRoZSBzaGVsbCBwdXRzCisgICAgICAgZWFjaCBqb2IgaW4gYSBwcm9jZXNzIGdyb3Vw IGFuZCBkb2Vzbid0IHBhc3MgYWxvbmcgU0lHSFVQLCBhbGwKKyAgICAgICBwcm9jZXNzZXMgbWF5 IG5vdCBkaWUuCisgICAgKi8KKyAgICBpZiAocGlkID4gMCkgeworI2lmZGVmIEhBVkVfS0lMTFBH CisJa2lsbHBnKHBpZCwgU0lHSFVQKTsKKyNlbHNlCisJa2lsbCgtKHBpZCksIFNJR0hVUCk7Cisj ZW5kaWYgLypIQVZFX0tJTExQRyovCisgICAgfQorI2Vsc2UgLyogSEFWRV9SRVZPS0UqLworI2lm ZGVmIFZIQU5HX0xBU1QKKyAgICB7CisgICAgICAgIGludCBzdGF0dXM7CisjaWZkZWYgQ0tfUE9T SVhfU0lHCisgICAgICAgIHNpZ3NldF90IG9sZCwgbmV3OworICAgICAgICBzaWdlbXB0eXNldCgm bmV3KTsKKyAgICAgICAgc2lnYWRkc2V0KCZuZXcsIFNJR0NITEQpOworICAgICAgICBzaWdwcm9j bWFzayhTSUdfQkxPQ0ssICZuZXcsICZvbGQpOworI2Vsc2UgLypDS19QT1NJWF9TSUcqLworICAg ICAgICBpbnQgbWFzayA9IHNpZ2Jsb2NrKHNpZ21hc2soU0lHQ0hMRCkpOworI2VuZGlmIC8qQ0tf UE9TSVhfU0lHKi8KKyAgICAgICAgc3dpdGNoIChyZXR2YWwgPSBmb3JrKCkpIHsKKwkgIGNhc2Ug LTE6CisjaWZkZWYgQ0tfUE9TSVhfU0lHCisgICAgICAgICAgICBzaWdwcm9jbWFzayhTSUdfU0VU TUFTSywgJm9sZCwgMCk7CisjZWxzZSAvKkNLX1BPU0lYX1NJRyovCisgICAgICAgICAgICBzaWdz ZXRtYXNrKG1hc2spOworI2VuZGlmIC8qQ0tfUE9TSVhfU0lHKi8KKyAgICAgICAgICAgIHJldHVy biBlcnJubzsKKwkgIGNhc2UgMDoKKyAgICAgICAgICAgIHB0eWludF92b2lkX2Fzc29jaWF0aW9u KCk7CisgICAgICAgICAgICBpZiAocmV0dmFsID0gKHB0eV9vcGVuX2N0dHkoc2xhdmUsICZmZCwg LTEpKSkKKwkgICAgICBleGl0KHJldHZhbCk7CisgICAgICAgICAgICBwdHlpbnRfdmhhbmd1cCgp OworICAgICAgICAgICAgZXhpdCgwKTsKKwkgICAgYnJlYWs7CisJICBkZWZhdWx0OgorI2lmZGVm IEhBVkVfV0FJVFBJRAorICAgICAgICAgICAgd2FpdHBpZChyZXR2YWwsICZzdGF0dXMsIDApOwor I2Vsc2UgLypIQVZFX1dBSVRQSUQqLworICAgICAgICAgICAgd2FpdCgmc3RhdHVzKTsKKyNlbmRp ZiAvKiBIQVZFX1dBSVRQSUQgKi8KKyNpZmRlZiBDS19QT1NJWF9TSUcKKyAgICAgICAgICAgIHNp Z3Byb2NtYXNrKFNJR19TRVRNQVNLLCAmb2xkLCAwKTsKKyNlbHNlIC8qQ0tfUE9TSVhfU0lHKi8K KyAgICAgICAgICAgIHNpZ3NldG1hc2sobWFzayk7CisjZW5kaWYgLypDS19QT1NJWF9TSUcqLwor ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgLypWSEFOR19MQVNU Ki8KKyNlbmRpZiAvKiBIQVZFX1JFVk9LRSovCisjaWZuZGVmIEhBVkVfU1RSRUFNUworICAgIHNs YXZlW3N0cmxlbigiL2Rldi8iKV0gPSAncCc7CisjaWZkZWYgU0VUVUlECisgICAgY2htb2Qoc2xh dmUsIDA2NjYpOworICAgIGNob3duKHNsYXZlLCAwLCAwKTsKKyNlbmRpZiAvKiBTRVRVSUQgKi8K KyNlbmRpZiAvKiBIQVZFX1NUUkVBTVMgKi8KKyAgICByZXR1cm4oMCk7Cit9CisKK2xvbmcKK3B0 eV9nZXRwdHkoZmQsIHNsYXZlLCBzbGF2ZWxlbmd0aCkgaW50IHNsYXZlbGVuZ3RoOyBpbnQgKmZk OyBjaGFyICpzbGF2ZTsgeworICAgIGNoYXIgKmNwOworICAgIGNoYXIgKnA7CisgICAgaW50IGks IHB0eW51bTsKKyAgICBzdHJ1Y3Qgc3RhdCBzdGI7CisjaWZuZGVmIEhBVkVfT1BFTlBUWQorI2lm bmRlZiBIQVZFX19HRVRQVFkKKyAgICBjaGFyIHNsYXZlYnVmWzEwMjRdOworI2VuZGlmIC8qIEhB VkVfX0dFVFBUWSAqLworI2VuZGlmIC8qIEhBVkVfT1BFTlBUWSAqLworI2lmZGVmIEhBVkVfX0dF VFBUWQorICAgIGNoYXIgKnNsYXZlcmV0OwkJCS8qIFRlbXAgdG8gaG9sZCBwb2ludGVyIHRvIHNs YXZlICovCisjZW5kaWYgLypIQVZFX19HRVRQVFkqLworCisjaWZkZWYgSEFWRV9PUEVOUFRZCisg ICAgaW50IHNsYXZlZmQ7CisKKyAgICBwdHlfbWFzdGVyX2ZkID0gLTE7CisgICAgZGVidWcoRjEw MCwiSEFWRV9PUEVOUFRZIiwiIiwwKTsKKyAgICBpZiAob3BlbnB0eShmZCwKKwkJJnNsYXZlZmQs CisJCXNsYXZlLAorCQkoc3RydWN0IHRlcm1pb3MgKikwLAorCQkoc3RydWN0IHdpbnNpemUgKikw CisJCSkKKwkpIHsKKwlwdHlfbWFzdGVyX2ZkID0gKmZkOworCXJldHVybigxKTsKKyAgICB9Cisg ICAgY2xvc2Uoc2xhdmVmZCk7CisgICAgcmV0dXJuKDApOworCisjZWxzZSAvKiBIQVZFX09QRU5Q VFkgKi8KKworI2lmZGVmIEhBVkVfX0dFVFBUWQorLyoKKyAgVGhpcyBjb2RlIGlzIGluY2x1ZGVk IGZvciBJcml4OyBhcyBvZiB2ZXJzaW9uIDUuMywgSXJpeCBoYXMgL2Rldi9wdG14LCBidXQKKyAg aXQgZmFpbHMgdG8gd29yayBwcm9wZXJseTsgZXZlbiBhZnRlciBjYWxsaW5nIHVubG9ja3B0LCBy b290IGdldHMgcGVybWlzc2lvbgorICBkZW5pZWQgb3BlbmluZyB0aGUgcHR5LiAgVGhlIGNvZGUg dG8gc3VwcG9ydCBfZ2V0cHR5IHNob3VsZCBiZSByZW1vdmVkIGlmCisgIElyaXggZ2V0cyB3b3Jr aW5nIHN0cmVhbXMgcHR5cyBpbiBmYXZvciBvZiBtYWludGFpbmluZyB0aGUgbGVhc3QgbmVlZGVk IGNvZGUKKyAgcGF0aHMuCisqLworICAgIGRlYnVnKEYxMDAsIkhBVkVfX0dFVFBUWSIsIiIsMCk7 CisgICAgaWYgKChzbGF2ZXJldCA9IF9nZXRwdHkoZmQsIE9fUkRXUiB8IE9fTkRFTEFZLCAwNjAw LCAwKSkgPT0gMCkgeworCSpmZCA9IC0xOworCXJldHVybihQVFlfR0VUUFRZX05PUFRZKTsKKyAg ICB9CisgICAgaWYgKHN0cmxlbihzbGF2ZXJldCkgPiBzbGF2ZWxlbmd0aCAtIDEpIHsKKwljbG9z ZSgqZmQpOworCSpmZCA9IC0xOworCXJldHVybihQVFlfR0VUUFRZX1NMQVZFX1RPT0xPTkcpOwor ICAgIH0gZWxzZSB7CisJY2tzdHJuY3B5KHNsYXZlLCBzbGF2ZXJldCwgc2xhdmVsZW5ndGgpOwor ICAgIH0KKyAgICByZXR1cm4oMCk7CisKKyNlbHNlIC8qIEhBVkVfX0dFVFBUWSAqLworCisgICAg KmZkID0gb3BlbigiL2Rldi9wdHltL2Nsb25lIiwgT19SRFdSfE9fTkRFTEFZKTsgLyogSFBVWCAq LworICAgIGlmICgqZmQgPj0gMCkgeworICAgICAgICBkZWJ1ZyhGMTEwLCJwdHlfZ2V0cHR5KCki LCJvcGVuKC9kZXYvcHR5bS9jbG9uZSkgc3VjY2VzcyIsMCk7CisgICAgICAgIGdvdG8gaGF2ZV9m ZDsKKyAgICB9CisKKyNpZmRlZiBIQVZFX1BUTVgKKyAgICBkZWJ1ZyhGMTAwLCJIQVZFX1BUTVgi LCIiLDApOworICAgICpmZCA9IG9wZW4oIi9kZXYvcHRteCIsT19SRFdSfE9fTkRFTEFZKTsKKyAg ICBpZiAoKmZkID49IDApIHsKKyAgICAgICAgZGVidWcoRjExMCwicHR5X2dldHB0eSgpIiwib3Bl bigvZGV2L3B0bXgpIHN1Y2Nlc3MiLDApOworICAgICAgICBnb3RvIGhhdmVfZmQ7CisgICAgfQor I2VuZGlmIC8qIEhBVkVfUFRNWCAqLworCisgICAgKmZkID0gb3BlbigiL2Rldi9wdGMiLCBPX1JE V1J8T19OREVMQVkpOyAvKiBBSVggKi8KKyAgICBpZiAoKmZkID49IDApIHsKKyAgICAgICAgZGVi dWcoRjExMCwicHR5X2dldHB0eSgpIiwib3BlbigvZGV2L3B0Yykgc3VjY2VzcyIsMCk7CisgICAg ICAgIGdvdG8gaGF2ZV9mZDsKKyAgICB9CisgICAgKmZkID0gb3BlbigiL2Rldi9wdHkiLCBPX1JE V1J8T19OREVMQVkpOyAvKiBzeXN2aW1wICovCisgICAgaWYgKCpmZCA+PSAwKQorICAgICAgICBk ZWJ1ZyhGMTEwLCJwdHlfZ2V0cHR5KCkiLCJvcGVuKC9kZXYvcHR5KSBzdWNjZXNzIiwwKTsKKwor ICBoYXZlX2ZkOgorICAgIC8qIFRoaXMgd291bGQgYmUgdGhlIHB0eSBtYXN0ZXIgKi8KKyAgICBk ZWJ1ZyhGMTAxLCJwdHlfZ2V0cHR5IGZkKEEpIiwiIiwqZmQpOworICAgIGlmICgqZmQgPj0gMCkg eworCXB0eV9tYXN0ZXJfZmQgPSAqZmQ7CisKKyNpZmRlZiBIQVZFX0dSQU5UUFQKKyNpZmRlZiBI QVZFX1BUTVgKKyAgICAgICAgZGVidWcoRjEwMCwiSEFWRV9HUkFOVFBUIiwiIiwwKTsKKwlpZiAo Z3JhbnRwdCgqZmQpIHx8IHVubG9ja3B0KCpmZCkpCisJICByZXR1cm4oUFRZX0dFVFBUWV9TVFJF QU1TKTsKKyNlbmRpZiAvKiBIQVZFX1BUTVggKi8KKyNlbmRpZiAvKiBIQVZFX0dSQU5UUFQgKi8K KworI2lmZGVmIEhBVkVfUFRTTkFNRQorICAgICAgICBkZWJ1ZyhGMTAwLCJIQVZFX1BUU05BTUUi LCIiLDApOworCXAgPSAoY2hhciAqKXB0c25hbWUoKmZkKTsKKyAgICAgICAgZGVidWcoRjExMCwi cHR5X2dldHB0eSgpIHB0c25hbWUoKSIscCwwKTsKKyNlbHNlCisjaWZkZWYgSEFWRV9UVFlOQU1F CisgICAgICAgIGRlYnVnKEYxMDAsIkhBVkVfVFRZTkFNRSIsIiIsMCk7CisJcCA9IHR0eW5hbWUo KmZkKTsKKyAgICAgICAgZGVidWcoRjExMCwicHR5X2dldHB0eSgpIHR0eW5hbWUoKSIscCwwKTsK KyNlbHNlCisJLyogSWYgd2UgZG9uJ3QgaGF2ZSBlaXRoZXIgd2hhdCBkbyB3ZSBkbz8gKi8KKyAg CXJldHVybihQVFlfR0VUUFRZX05PUFRZKTsJLyogcHVudCAqLworI2VuZGlmIC8qIEhBVkVfVFRZ TkFNRSAqLworI2VuZGlmIC8qIEhBVkVfUFRTTkFNRSAqLworCWlmIChwKSB7CisJICAgIGlmIChz dHJsZW4ocCkgPiBzbGF2ZWxlbmd0aCAtIDEpIHsKKyAgICAgICAgICAgICAgICBjbG9zZSAoKmZk KTsKKyAgICAgICAgICAgICAgICAqZmQgPSAtMTsKKyAgICAgICAgICAgICAgICByZXR1cm4oUFRZ X0dFVFBUWV9TTEFWRV9UT09MT05HKTsKKwkgICAgfQorCSAgICBja3N0cm5jcHkoc2xhdmUsIHAs IHNsYXZlbGVuZ3RoKTsKKwkgICAgcmV0dXJuKDApOworCX0KKwlpZiAoZnN0YXQoKmZkLCAmc3Ri KSA8IDApIHsKKwkgICAgY2xvc2UoKmZkKTsKKwkgICAgcmV0dXJuKFBUWV9HRVRQVFlfRlNUQVQp OworCX0KKwlwdHludW0gPSAoaW50KShzdGIuc3RfcmRldiYweEZGKTsKKwlzcHJpbnRmKHNsYXZl YnVmLCAiL2Rldi90dHlwJXgiLCBwdHludW0pOyAvKiBzYWZlICovCisJaWYgKHN0cmxlbihzbGF2 ZWJ1ZikgPiBzbGF2ZWxlbmd0aCAtIDEpIHsKKwkgICAgY2xvc2UoKmZkKTsKKwkgICAgKmZkID0g LTE7CisJICAgIHJldHVybihQVFlfR0VUUFRZX1NMQVZFX1RPT0xPTkcpOworCX0KKyAgICAgICAg ZGVidWcoRjExMCwicHR5X2dldHB0eSgpIHNsYXZlYnVmIixzbGF2ZWJ1ZiwwKTsKKwlja3N0cm5j cHkoc2xhdmUsIHNsYXZlYnVmLCBzbGF2ZWxlbmd0aCk7CisJcmV0dXJuKDApOworICAgIH0gZWxz ZSB7CisgICAgCWZvciAoY3AgPSAicHFyc3R1dnd4eXpQUVJTVCI7KmNwOyBjcCsrKSB7CisJICAg IHNwcmludGYoc2xhdmVidWYsIi9kZXYvcHR5WFgiKTsgLyogc2FmZSAqLworCSAgICBzbGF2ZWJ1 ZltzaXplb2YoIi9kZXYvcHR5IikgLSAxXSA9ICpjcDsKKwkgICAgc2xhdmVidWZbc2l6ZW9mKCIv ZGV2L3B0eXAiKSAtIDFdID0gJzAnOworCSAgICBpZiAoc3RhdChzbGF2ZWJ1ZiwgJnN0YikgPCAw KQorCSAgICAgIGJyZWFrOworCSAgICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgeworCQlzbGF2 ZWJ1ZltzaXplb2YoIi9kZXYvcHR5cCIpIC0gMV0gPSAiMDEyMzQ1Njc4OWFiY2RlZiJbaV07CisJ CWVycm5vID0gMDsKKwkJKmZkID0gb3BlbihzbGF2ZWJ1ZiwgT19SRFdSfE9fTkRFTEFZKTsKKwkJ aWYgKCpmZCA8IDApIHsKKwkJICAgIGRlYnVnKEYxMTEsInB0eV9nZXRwdHkoKSBwdHkgbWFzdGVy IG9wZW4gZXJyb3IiLAorCQkJICBzbGF2ZWJ1ZixlcnJubyk7CisJCSAgICBjb250aW51ZTsKKwkJ fQorICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsInB0eV9nZXRwdHkoKSBmb3VuZCBwdHkgbWFz dGVyIixzbGF2ZWJ1ZiwqZmQpOworCQlzbGF2ZWJ1ZltzaXplb2YoIi9kZXYvIikgLSAxXSA9ICd0 JzsgLyogZ290IHB0eSAqLworCQlpZiAoc3RybGVuKHNsYXZlYnVmKSA+IHNsYXZlbGVuZ3RoIC0x KSB7CisJCSAgICBjbG9zZSgqZmQpOworCQkgICAgKmZkID0gLTE7CisJCSAgICByZXR1cm4oUFRZ X0dFVFBUWV9TTEFWRV9UT09MT05HKTsKKwkJfQorCQlja3N0cm5jcHkoc2xhdmUsIHNsYXZlYnVm LCBzbGF2ZWxlbmd0aCk7CisgICAgICAgICAgICAgICAgZGVidWcoRjExMCwicHR5X2dldHB0eSBz bGF2ZSBuYW1lIixzbGF2ZSwwKTsKKwkJcHR5X21hc3Rlcl9mZCA9ICpmZDsKKwkJcmV0dXJuKDAp OworCSAgICB9CisJfQorCXJldHVybihQVFlfR0VUUFRZX05PUFRZKTsKKyAgICB9CisjZW5kaWYg LypIQVZFX19HRVRQVFkqLworI2VuZGlmIC8qIEhBVkVfT1BFTlBUWSAqLworfQorCitsb25nCitw dHlfaW5pdCgpIHsKKyNpZmRlZiBIQVZFX1BUWU0KKyAgICBzdGF0aWMgY2hhciBkdW1teTsKKyAg ICBkZWJ1ZyhGMTAwLCJIQVZFX1BUWU0iLCIiLDApOworICAgIHR0eV9iYW5rID0gICZtYXN0ZXJf bmFtZVtzdHJsZW4oIi9kZXYvcHR5bS9wdHkiKV07CisgICAgdHR5X251bSAgPSAgJm1hc3Rlcl9u YW1lW3N0cmxlbigiL2Rldi9wdHltL3B0eVgiKV07CisgICAgc2xhdmVfYmFuayA9ICZzbGF2ZV9u YW1lW3N0cmxlbigiL2Rldi9wdHkvdHR5IildOworICAgIHNsYXZlX251bSAgPSAmc2xhdmVfbmFt ZVtzdHJsZW4oIi9kZXYvcHR5L3R0eVgiKV07CisjZW5kaWYKKyAgICByZXR1cm4oMEwpOworfQor CisvKgorICBUaGUgZm9sbG93aW5nIGlzIGFuIGFycmF5IG9mIG1vZHVsZXMgdGhhdCBzaG91bGQg YmUgcHVzaGVkIG9uIHRoZSBzdHJlYW0uCisgIFNlZSBjb25maWd1cmUuaW4gZm9yIGNhdmlhdHMg YW5kIG5vdGVzIGFib3V0IHdoZW4gdGhpcyBhcnJheSBpcyB1c2VkIGFuZCBub3QKKyAgdXNlZC4K KyovCisjaWZkZWYgSEFWRV9TVFJFQU1TCisjaWZuZGVmIEhBVkVfTElORV9QVVNICitzdGF0aWMg Y2hhciAqcHVzaF9saXN0W10gPSB7CisjaWZkZWYgUFVTSF9QVEVNCisgICAgInB0ZW0iLAorI2Vu ZGlmCisjaWZkZWYgUFVTSF9MRFRFUk0KKyAgICAibGR0ZXJtIiwKKyNlbmRpZgorI2lmZGVmIFBV U0hfVFRDT01QQVQKKyAgICAidHRjb21wYXQiLAorI2VuZGlmCisgICAgMAorfTsKKyNlbmRpZiAv KiBIQVZFX0xJTkVfUFVTSCAqLworI2VuZGlmIC8qIEhBVkVfU1RSRUFNUyAqLworCitsb25nCitw dHlfaW5pdGlhbGl6ZV9zbGF2ZSAoZmQpIGludCBmZDsgeworI2lmZGVmIFBPU0lYX1RFUk1JT1MK KyNpZm5kZWYgdWx0cml4CisgICAgc3RydWN0IHRlcm1pb3MgbmV3X3Rlcm1pbzsKKyNlbHNlCisg ICAgc3RydWN0IHNndHR5YiBiOworI2VuZGlmIC8qIHVsdHJpeCAqLworI2Vsc2UKKyAgICBzdHJ1 Y3Qgc2d0dHliIGI7CisjZW5kaWYgLyogUE9TSVhfVEVSTUlPUyAqLworICAgIGludCBwaWQ7Cisj aWZkZWYgUE9TSVhfVEVSTUlPUworI2lmbmRlZiB1bHRyaXgKKyAgICBpbnQgcmM7CisjZW5kaWYg LyogdWx0cml4ICovCisjZW5kaWYgLyogUE9TSVhfVEVSTUlPUyAqLworCisgICAgZGVidWcoRjEx MSwicHR5X2luaXRpYWxpemVfc2xhdmUoKSIsImZkIixmZCk7CisKKyNpZmRlZiBIQVZFX1NUUkVB TVMKKyNpZmRlZiBIQVZFX0xJTkVfUFVTSAorICAgIHdoaWxlIChpb2N0bChmZCxJX1BPUCwwKSA9 PSAwKSA7CS8qIENsZWFyIG91dCBhbnkgb2xkIGxpbmVkJ3MgKi8KKworICAgIGlmIChsaW5lX3B1 c2goZmQpIDwgMCkgeworICAgICAgICBkZWJ1ZyhGMTEwLCJwdHlfaW5pdGlhbGl6ZV9zbGF2ZSgp IiwibGluZV9wdXNoKCkgZmFpbGVkIiwwKTsKKwljbG9zZShmZCk7CisgICAgICAgIGZkID0gLTE7 CisgICAgICAgIHJldHVybihQVFlfT1BFTl9TTEFWRV9MSU5FX1BVU0hGQUlMKTsKKyAgICB9Cisj ZWxzZSAvKk5vIGxpbmVfcHVzaCAqLworICAgIHsKKyAgICAgICAgY2hhciAqKm1vZHVsZSA9ICZw dXNoX2xpc3RbMF07CisgICAgICAgIHdoaWxlICgqbW9kdWxlKSB7CisJICAgIGlmIChpb2N0bChm ZCwgSV9QVVNILCAqKG1vZHVsZSsrKSkgPCAwKSB7CisgICAgICAgICAgICAgICAgZGVidWcoRjEx MCwicHR5X2luaXRpYWxpemVfc2xhdmUoKSIsImlvY3RsKElfUFVTSCkgZmFpbGVkIiwwKTsKKwkJ cmV0dXJuKFBUWV9PUEVOX1NMQVZFX1BVU0hfRkFJTCk7CisJICAgIH0KKwl9CisgICAgfQorI2Vu ZGlmIC8qTElORV9QVVNIKi8KKyNlbmRpZiAvKkhBVkVfU1RSRUFNUyovCisvKgorICBVbmRlciBV bHRyaXggMy4wLCB0aGUgcGdycCBvZiB0aGUgc2xhdmUgcHR5IHRlcm1pbmFsIG5lZWRzIHRvIGJl IHNldAorICBleHBsaWNpdGx5LiAgV2h5IHJsb2dpbmQgd29ya3MgYXQgYWxsIHdpdGhvdXQgdGhp cyBvbiA0LjNCU0QgaXMgYSBteXN0ZXJ5LgorKi8KKyNpZmRlZiBHRVRQR1JQX09ORUFSRworICAg IHBpZCA9IGdldHBncnAoZ2V0cGlkKCkpOworI2Vsc2UKKyAgICBwaWQgPSBnZXRwZ3JwKCk7Cisj ZW5kaWYgLyogR0VUUEdSUF9PTkVBUkcgKi8KKworICAgIGRlYnVnKEYxMTEsInB0eV9pbml0aWFs aXplX3NsYXZlKCkiLCJwaWQiLHBpZCk7CisKKyNpZmRlZiBUSU9DU1BHUlAKKyAgICBpb2N0bChm ZCwgVElPQ1NQR1JQLCAmcGlkKTsKKyNlbmRpZiAvKiBUSU9DU1BHUlAgKi8KKworI2lmZGVmIFBP U0lYX1RFUk1JT1MKKyNpZm5kZWYgdWx0cml4CisgICAgdGNzZXRwZ3JwKGZkLCBwaWQpOworICAg IGVycm5vID0gMDsKKyAgICByYyA9IHRjZ2V0YXR0cihmZCwmbmV3X3Rlcm1pbyk7CisgICAgZGVi dWcoRjExMSwicHR5X2luaXRpYWxpemVfc2xhdmUgdGNnZXRhdHRyKGZkKSIsY2tpdG9hKHJjKSxl cnJubyk7CisgICAgaWYgKHJjID09IDApIHsKKwluZXdfdGVybWlvLmNfY2NbVk1JTl0gPSAxOwor CW5ld190ZXJtaW8uY19jY1tWVElNRV0gPSAwOworCXJjID0gdGNzZXRhdHRyKGZkLFRDU0FOT1cs Jm5ld190ZXJtaW8pOworCWRlYnVnKEYxMTEsInB0eV9pbml0aWFsaXplX3NsYXZlIHRjc2V0YXR0 cihmZCkiLGNraXRvYShyYyksZXJybm8pOworICAgIH0KKyNlbmRpZiAvKiB1bHRyaXggKi8KKyNl bmRpZiAvKiBQT1NJWF9URVJNSU9TICovCisgICAgcmV0dXJuKDBMKTsKK30KKworI2lmZGVmIFdB TlRfVVRNUAorbG9uZworcHR5X2xvZ3d0bXAgKHR0eSwgdXNlciwgaG9zdCkgY2hhciAqdXNlciwg KnR0eSwgKmhvc3Q7IHsKKyNpZmRlZiBIQVZFX0xPR1dUTVAKKyAgICBsb2d3dG1wKHR0eSx1c2Vy LGhvc3QpOworICAgIHJldHVybigwKTsKKyNlbHNlCisgICAgc3RydWN0IHV0bXAgdXQ7CisgICAg Y2hhciAqdG1weDsKKyAgICBjaGFyIHV0bXBfaWRbNV07CisgICAgaW50IGxvZ2dpbmdpbiA9IHVz ZXJbMF07CQkvKiBXaWxsIGJlIGVtcHR5IGZvciBsb2dvdXQgKi8KKworI2lmbmRlZiBOT19VVF9I T1NUCisgICAgc3RybmNweSh1dC51dF9ob3N0LCBob3N0LCBzaXplb2YodXQudXRfaG9zdCkpOwor I2VuZGlmIC8qIE5PX1VUX0hPU1QgKi8KKworICAgIHN0cm5jcHkodXQudXRfbGluZSwgdHR5LCBz aXplb2YodXQudXRfbGluZSkpOworICAgIHV0LnV0X3RpbWUgPSB0aW1lKDApOworCisjaWZuZGVm IE5PX1VUX1BJRAorICAgIHV0LnV0X3BpZCA9IGdldHBpZCgpOworICAgIHN0cm5jcHkodXQudXRf dXNlciwgdXNlciwgc2l6ZW9mKHV0LnV0X3VzZXIpKTsKKworICAgIHRtcHggPSB0dHkgKyBzdHJs ZW4odHR5KSAtIDI7CisgICAgY2ttYWttc2codXRtcF9pZCw1LCJrciIsdG1weCxOVUxMLE5VTEwp OworICAgIHN0cm5jcHkodXQudXRfaWQsIHV0bXBfaWQsIHNpemVvZih1dC51dF9pZCkpOworICAg IHV0LnV0X3BpZCA9IChsb2dnaW5naW4gPyBnZXRwaWQoKSA6IDApOworICAgIHV0LnV0X3R5cGUg PSAobG9nZ2luZ2luID8gVVNFUl9QUk9DRVNTIDogREVBRF9QUk9DRVNTKTsKKyNlbHNlCisgICAg c3RybmNweSh1dC51dF9uYW1lLCB1c2VyLCBzaXplb2YodXQudXRfbmFtZSkpOworI2VuZGlmIC8q IE5PX1VUX1BJRCAqLworCisgICAgcmV0dXJuKHB0eWludF91cGRhdGVfd3RtcCgmdXQsIGhvc3Qs IHVzZXIpKTsKKworI2VuZGlmIC8qIEhBVkVfTE9HV1RNUCAqLworfQorI2VuZGlmIC8qIFdBTlRf VVRNUCAqLworCisvKgorICBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIHR3aWNlLiAgSXQncyBub3Qg cGFydGljdWxhcmx5IGltcG9ydGFudCB0aGF0IHRoZQorICBzZXRzaWQoKSBvciBUSU9DU0NUVFkg aW9jdGxzIHN1Y2NlZWQgKHRoZXkgbWF5IG5vdCB0aGUgc2Vjb25kIHRpbWUpLCBidXQKKyAgcmF0 aGVyIHRoYXQgd2UgaGF2ZSBhIGNvbnRyb2xsaW5nIHRlcm1pbmFsIGF0IHRoZSBlbmQuICBJdCBp cyBhc3N1bWVkIHRoYXQKKyAgdmhhbmd1cCBkb2Vzbid0IGV4aXN0IGFuZCBjb25mdXNlIHRoZSBw cm9jZXNzJ3Mgbm90aW9uIG9mIGNvbnRyb2xsaW5nCisgIHRlcm1pbmFsIG9uIGFueSBzeXN0ZW0g d2l0aG91dCBUSU9DTk9UVFkuICBUaGF0IGlzLCBlaXRoZXIgdmhhbmd1cCgpIGxlYXZlcworICB0 aGUgY29udHJvbGxpbmcgdGVybWluYWwgaW4gdGFjdCwgYnJlYWtzIHRoZSBhc3NvY2lhdGlvbiBj b21wbGV0ZWx5LCBvciB0aGUKKyAgc3lzdGVtIHByb3ZpZGVzIFRJT0NOT1RUWSB0byBnZXQgdGhp bmdzIGJhY2sgaW50byBhIHJlYXNvbmFibGUgc3RhdGUuICBJbgorICBwcmFjdGljZSwgdmhhbmd1 cCgpIGVpdGhlciBicmVha3MgdGhlIGFzc29jaWF0aW9uIGNvbXBsZXRlbHkgb3IgZG9lc24ndAor ICBlZmZlY3QgY29udHJvbGxpbmcgdGVybWluYWxzLCBzbyB0aGlzIGNvbmRpdGlvbiBpcyBtZXQu CisqLworbG9uZworcHR5X29wZW5fY3R0eShzbGF2ZSwgZmQsIGZjKSBjaGFyICogc2xhdmU7IGlu dCAqZmQ7IGludCBmYzsgeworICAgIGludCByZXR2YWw7CisKKyAgICBkZWJ1ZyhGMTEwLCJwdHlf b3Blbl9jdHR5KCkgc2xhdmUiLHNsYXZlLDApOworCisvKiBGaXJzdCwgZGlzc29jaWF0ZSBmcm9t IHByZXZpb3VzIHRlcm1pbmFsICovCisKKyAgICBpZiAoKHJldHZhbCA9IHB0eWludF92b2lkX2Fz c29jaWF0aW9uKCkpICE9IDApIHsKKyAgICAgICAgZGVidWcoRjExMSwKKwkgICAgICAicHR5X29w ZW5fY3R0eSgpIiwKKwkgICAgICAicHR5aW50X3ZvaWRfYXNzb2NpYXRpb24oKSBmYWlsZWQiLAor CSAgICAgIHJldHZhbAorCSAgICAgICk7CisJcmV0dXJuKHJldHZhbCk7CisgICAgfQorI2lmZGVm IE1VU1RfU0VUUEdSUAorLyoKKyAgVGhlIFVsdHJpeCAoYW5kIG90aGVyIEJTRCB0dHkgZHJpdmVy cykgcmVxdWlyZSB0aGUgcHJvY2VzcyBncm91cAorICB0byBiZSB6ZXJvIGluIG9yZGVyIHRvIGFj cXVpcmUgdGhlIG5ldyB0dHkgYXMgYSBjb250cm9sbGluZyB0dHkuCisqLworICAgIHNldHBncnAo MCwwKTsKKyAgICBkZWJ1ZyhGMTAxLCJwdHlfb3Blbl9jdHR5IE1VU1RfU0VUUEdSUCBzZXRwZ3Jw KDAsMCkiLCIiLGVycm5vKTsKKyNlbmRpZiAvKiBNVVNUX1NFVFBHUlAgKi8KKworICAgIGVycm5v ID0gMDsKKyAgICAqZmQgPSBvcGVuKHNsYXZlLCBPX1JEV1IpOworICAgIGRlYnVnKEYxMTEsInB0 eV9vcGVuX2N0dHkgb3BlbihzbGF2ZSkgZmQiLHNsYXZlLCpmZCk7CisgICAgaWYgKCpmZCA8IDAp IHsKKwlkZWJ1ZyhGMTExLCJwdHlfb3Blbl9jdHR5KCkgb3BlbiBmYWlsdXJlIiwgc2xhdmUsIGVy cm5vKTsKKwlyZXR1cm4oUFRZX09QRU5fU0xBVkVfT1BFTkZBSUwpOworICAgIH0KKyNpZmRlZiBT T0xBUklTCisgICAgLyogVGhpcyBmb3JjZXMgdGhlIGpvYiB0byBoYXZlIGEgY29udHJvbGxpbmcg dGVybWluYWwuICovCisgICAgY2xvc2UoKmZkKTsKKyAgICAqZmQgPSBvcGVuKHNsYXZlLCBPX1JE V1IpOworICAgIGRlYnVnKEYxMTEsInB0eV9vcGVuX2N0dHkgY2xvc2Uvb3BlbihzbGF2ZSkgZmQi LHNsYXZlLCpmZCk7CisjaWZkZWYgREVCVUcKKyAgICAvKiBUaGlzIHNob3dzIHRoYXQgL2Rldi90 dHkgZXhpc3RzICovCitpZiAoZGVibG9nKSB7CisJaW50IHg7CisJeCA9IG9wZW4oIi9kZXYvdHR5 IiwgT19SRFdSKTsKKwlkZWJ1ZyhGMTExLCJwdHlfb3Blbl9jdHR5IG9wZW4oL2Rldi90dHkpIGZk IixzbGF2ZSx4KTsKKwlpZiAoeCA8IDApIGRlYnVnKEYxMTEsInB0eV9vcGVuX2N0dHkgb3Blbigv ZGV2L3R0eSkgZXJybm8iLCIiLGVycm5vKTsKKwlkZWJ1ZyhGMTEwLCJwdHlfb3Blbl9jdHR5IHR0 eW5hbWUoL2Rldi90dHkpIix0dHluYW1lKHgpLDApOworCWlmICh4ID4gLTEpIGNsb3NlKHgpOwor ICAgIH0KKyNlbmRpZgkvKiBERUJVRyAqLworI2VuZGlmIC8qIFNPTEFSSVMgKi8KKworI2lmZGVm IE1VU1RfU0VUUEdSUAorICAgIHNldHBncnAoMCwgZ2V0cGlkKCkpOworI2VuZGlmIC8qIE1VU1Rf U0VUUEdSUCAqLworCisjaWZkZWYgVElPQ1NDVFRZCisgICAgaWYgKAorI2lmZGVmIENPTU1FTlQK KwlmYyA9PSAwCisjZWxzZQorCTEKKyNlbmRpZgkvKiBDT01NRU5UICovCisJKSB7CisJLyogVElP Q1NDVFRZID0gTWFrZSB0aGlzIHRoZSBqb2IncyBjb250cm9sbGluZyB0ZXJtaW5hbCAqLworCWVy cm5vID0gMDsKKwlyZXR2YWwgPSBpb2N0bCgqZmQsIFRJT0NTQ1RUWSwgMCk7IC8qIERvbid0IGNo ZWNrIHJldHVybi4qLworCWRlYnVnKEYxMTEsInB0eV9vcGVuX2N0dHkoKSBpb2N0bCBUSU9DU0NU VFkiLGNraXRvYShyZXR2YWwpLGVycm5vKTsKKyAgICB9CisjZW5kaWYgLyogVElPQ1NDVFRZICov CisgICAgcmV0dXJuKDBMKTsKK30KKworbG9uZworcHR5X29wZW5fc2xhdmUoc2xhdmUsIGZkLCBm YykgY2hhciAqc2xhdmU7IGludCAqZmQ7IGludCBmYzsgeworICAgIGludCB2ZmQsIHRlc3RmZDsK KyAgICBsb25nIHJldHZhbDsKKyNpZmRlZiBDS19QT1NJWF9TSUcKKyAgICBzdHJ1Y3Qgc2lnYWN0 aW9uIHNhOworCisgICAgc2lnZW1wdHlzZXQoJnNhLnNhX21hc2spOwkJLyogSW5pdGlhbGl6ZSAi c2EiIHN0cnVjdHVyZS4gKi8KKyAgICBzYS5zYV9mbGFncyA9IDA7CisjZW5kaWYgLyogQ0tfUE9T SVhfU0lHICovCisKKy8qCisgIEZpcnN0LCBjaG1vZCBhbmQgY2hvd24gdGhlIHNsYXZlLiAgSWYg d2UgaGF2ZSB2aGFuZ3VwIHRoZW4gd2UgcmVhbGx5IG5lZWQKKyAgcHR5X29wZW5fY3R0eSB0byBt YWtlIHN1cmUgb3VyIGNvbnRyb2xsaW5nIHRlcm1pbmFsIGlzIHRoZSBwdHkgd2UncmUKKyAgb3Bl bmluZy4gIEhvd2V2ZXIsIGlmIHdlIGFyZSB1c2luZyByZXZva2Ugb3Igbm90aGluZyB0aGVuIHdl IGp1c3QgbmVlZCBhCisgIGZpbGUgZGVzY3JpaXB0b3IgZm9yIHRoZSBwdHkuICBDb25zaWRlcmlu ZyBzb21lIE9TZXMgaW4gdGhpcyBjYXRlZ29yeSBicmVhaworICBvbiB0aGUgc2Vjb25kIGNhbGwg dG8gb3Blbl9jdHR5IChjdXJyZW50bHkgT1NGIGJ1dCBvdGhlcnMgbWF5KSwgd2Ugc2ltcGx5Cisg IHVzZSBhIGRlc2NyaXB0b3IgaWYgd2UgY2FuLgorKi8KKyNpZmRlZiBWSEFOR19GSVJTVAorICAg IGlmICgocmV0dmFsID0gcHR5X29wZW5fY3R0eShzbGF2ZSwgJnZmZCwgZmMpKSAhPSAwKSB7Cisg ICAgICAgIGRlYnVnKEYxMTEsCisJICAgICAgInB0eV9vcGVuX3NsYXZlKCkgVkhBTkdfRklSU1Qi LAorCSAgICAgICJwdHlfb3Blbl9jdHR5KCkgZmFpbGVkIiwKKwkgICAgICByZXR2YWwKKwkgICAg ICApOworICAgICAgICByZXR1cm4ocmV0dmFsKTsKKyAgICB9CisgICAgaWYgKHZmZCA8IDApIHsK KyAgICAgICAgZGVidWcoRjExMSwKKwkgICAgICAicHR5X29wZW5fc2xhdmUoKSBWSEFOR19GSVJT VCIsCisJICAgICAgIlBUWV9PUEVOX1NMQVZFX09QRU5GQUlMIiwKKwkgICAgICB2ZmQKKwkgICAg ICApOworCXJldHVybihQVFlfT1BFTl9TTEFWRV9PUEVORkFJTCk7CisgICAgfQorI2VuZGlmIC8q IFZIQU5HX0ZJUlNUICovCisKKyAgICBpZiAoc2xhdmUgPT0gTlVMTCB8fCAqc2xhdmUgPT0gJ1ww JykgeworICAgICAgICBkZWJ1ZyhGMTEwLCJwdHlfb3Blbl9zbGF2ZSgpIiwiUFRZX09QRU5fU0xB VkVfVE9PU0hPUlQiLDApOworICAgICAgICByZXR1cm4oUFRZX09QRU5fU0xBVkVfVE9PU0hPUlQp OworICAgIH0KKworI2lmZGVmIFNFVFVJRAorICAgIGlmIChjaG1vZChzbGF2ZSwgMCkpIHsKKyAg ICAgICAgZGVidWcoRjExMCwicHR5X29wZW5fc2xhdmUoKSIsIlBUWV9PUEVOX1NMQVZFX0NITU9E RkFJTCIsMCk7CisgICAgICAgIHJldHVybihQVFlfT1BFTl9TTEFWRV9DSE1PREZBSUwpOworICAg IH0KKyAgICBpZiAoY2hvd24oc2xhdmUsIDAsIDAgKSA9PSAtMSApIHsKKyAgICAgICAgZGVidWco RjExMCwicHR5X29wZW5fc2xhdmUoKSIsIlBUWV9PUEVOX1NMQVZFX0NIT1dORkFJTCIsMCk7Cisg ICAgICAgIHJldHVybihQVFlfT1BFTl9TTEFWRV9DSE9XTkZBSUwpOworICAgIH0KKyNlbmRpZiAv KiBTRVRVSUQgKi8KKyNpZmRlZiBWSEFOR19GSVJTVAorICAgIHB0eWludF92aGFuZ3VwKCk7Cisg ICAgY2xvc2UodmZkKTsKKyNlbmRpZiAvKiBWSEFOR19GSVJTVCAqLworCisgICAgaWYgKChyZXR2 YWwgPSBwdHlpbnRfdm9pZF9hc3NvY2lhdGlvbigpKSAhPSAwKSB7CisgICAgICAgIGRlYnVnKEYx MTEsCisJICAgICAgInB0eV9vcGVuX3NsYXZlKCkiLAorCSAgICAgICJwdHlpbnRfdm9pZF9hc3Nv Y2lhdGlvbigpIGZhaWxlZCIsCisJICAgICAgcmV0dmFsCisJICAgICAgKTsKKyAgICAgICAgcmV0 dXJuKHJldHZhbCk7CisgICAgfQorCisjaWZkZWYgSEFWRV9SRVZPS0UKKyAgICBpZiAocmV2b2tl IChzbGF2ZSkgPCAwICkgeworICAgICAgICBkZWJ1ZyhGMTEwLCJwdHlfb3Blbl9zbGF2ZSgpIiwi UFRZX09QRU5fU0xBVkVfUkVWT0tFRkFJTCIsMCk7CisJcmV0dXJuKFBUWV9PUEVOX1NMQVZFX1JF Vk9LRUZBSUwpOworICAgIH0KKyNlbmRpZiAvKiBIQVZFX1JFVk9LRSAqLworCisvKiBPcGVuIHRo ZSBwdHkgZm9yIHJlYWwuICovCisKKyAgICByZXR2YWwgPSBwdHlfb3Blbl9jdHR5KHNsYXZlLCBm ZCwgZmMpOworICAgIGRlYnVnKEYxMTEsInB0eV9vcGVuX3NsYXZlIHJldHZhbCIsc2xhdmUscmV0 dmFsKTsKKyAgICBkZWJ1ZyhGMTExLCJwdHlfb3Blbl9zbGF2ZSBmZCIsc2xhdmUsKmZkKTsKKyAg ICBpZiAocmV0dmFsICE9IDApIHsKKyAgICAgICAgZGVidWcoRjExMSwicHR5X29wZW5fc2xhdmUo KSIsInB0eV9vcGVuX2N0dHkoKSBmYWlsZWQiLHJldHZhbCk7CisJcmV0dXJuKFBUWV9PUEVOX1NM QVZFX09QRU5GQUlMKTsKKyAgICB9CisgICAgcHR5X3NsYXZlX2ZkID0gKmZkOwkJICAgLyogVGhp cyBpcyBub3QgdmlzaWJsZSB0byB0aGUgdXBwZXIgZm9yayAqLworICAgIGRlYnVnKEYxMTEsInB0 eV9vcGVuX3NsYXZlIGZkIGN0dHknZCIsc2xhdmUscHR5X3NsYXZlX2ZkKTsKKyAgICByZXR2YWwg PSBwdHlfaW5pdGlhbGl6ZV9zbGF2ZSgqZmQpOworICAgIGRlYnVnKEYxMTEsInB0eV9vcGVuX3Ns YXZlIGZkIGluaXQnZCIsc2xhdmUscHR5X3NsYXZlX2ZkKTsKKyAgICBpZiAocmV0dmFsKSB7Cisg ICAgICAgIGRlYnVnKEYxMTEsInB0eV9vcGVuX3NsYXZlKCkiLCJwdHlfaW5pdGlhbGl6ZV9zbGF2 ZSgpIGZhaWxlZCIscmV0dmFsKTsKKyAgICAgICAgcmV0dXJuKHJldHZhbCk7CisgICAgfQorICAg IC8qIChWT0lEKXB0eV9tYWtlX3JhdygqZmQpOyAqLworCisgICAgZGVidWcoRjEwMCwicHR5X29w ZW5fc2xhdmUgT0siLCIiLCpmZCk7CisgICAgcmV0dXJuKDBMKTsKK30KKworI2lmZGVmIFdBTlRf VVRNUAorCisjaWZuZGVmIFVUTVBfRklMRQorI2lmZGVmIF9QQVRIX1VUTVAKKyNkZWZpbmUgVVRN UF9GSUxFIF9QQVRIX1VUTVAKKyNlbmRpZiAvKiBfUEFUSF9VVE1QICovCisjZW5kaWYgLyogIFVU TVBfRklMRSAqLworCisvKiBJZiBpdCBpcyAqc3RpbGwqIG1pc3NpbmcsIGFzc3VtZSAvZXRjL3V0 bXAgKi8KKworI2lmbmRlZiBVVE1QX0ZJTEUKKyNkZWZpbmUJVVRNUF9GSUxFICIvZXRjL3V0bXAi CisjZW5kaWYgLyogVVRNUF9GSUxFICovCisKKyNpZm5kZWYgTk9fVVRfUElECisjZGVmaW5lIFdU TVBfUkVRVUlSRVNfVVNFUk5BTUUKKyNlbmRpZiAvKiBOT19VVF9QSUQgKi8KKworbG9uZworcHR5 X3VwZGF0ZV91dG1wKHByb2Nlc3NfdHlwZSwgcGlkLCB1c2VybmFtZSwgbGluZSwgaG9zdCwgZmxh Z3MpCisgICAgaW50IHByb2Nlc3NfdHlwZTsKKyAgICBpbnQgcGlkOworICAgIGNoYXIgKnVzZXJu YW1lLCAqbGluZSwgKmhvc3Q7CisgICAgaW50IGZsYWdzOworLyogcHR5X3VwZGF0ZV91dG1wICov IHsKKyAgICBzdHJ1Y3QgdXRtcCBlbnQsIHV0OworI2lmbmRlZiBIQVZFX1NFVFVURU5UCisgICAg c3RydWN0IHN0YXQgc3RhdGI7CisgICAgaW50IHR0eTsKKyNlbmRpZiAvKiBIQVZFX1NFVFVURU5U ICovCisjaWZkZWYgSEFWRV9TRVRVVFhFTlQKKyAgICBzdHJ1Y3QgdXRtcHggdXR4OworI2VuZGlm IC8qIEhBVkVfU0VUVVRYRU5UICovCisjaWZuZGVmIE5PX1VUX1BJRAorICAgIGNoYXIgKnRtcHg7 CisgICAgY2hhciB1dG1wX2lkWzVdOworI2VuZGlmIC8qIE5PX1VUX1BJRCAqLworICAgIGNoYXIg dXNlcmJ1ZlszMl07CisgICAgaW50IGZkOworCisgICAgZGVidWcoRjEwMCwicHR5X3VwZGF0ZV91 dG1wKCkiLCIiLDApOworICAgIHN0cm5jcHkoZW50LnV0X2xpbmUsIGxpbmUrc2l6ZW9mKCIvZGV2 LyIpLTEsIHNpemVvZihlbnQudXRfbGluZSkpOworICAgIGVudC51dF90aW1lID0gdGltZSgwKTsK KworI2lmZGVmIE5PX1VUX1BJRAorICAgIGlmIChwcm9jZXNzX3R5cGUgPT0gUFRZX0xPR0lOX1BS T0NFU1MpCisgICAgICByZXR1cm4oMEwpOworI2Vsc2UgLyogTk9fVVRfUElEICovCisKKyAgICBl bnQudXRfcGlkID0gcGlkOworCisgICAgc3dpdGNoIChwcm9jZXNzX3R5cGUpIHsKKyAgICAgIGNh c2UgUFRZX0xPR0lOX1BST0NFU1M6CisJZW50LnV0X3R5cGUgPSBMT0dJTl9QUk9DRVNTOworCWJy ZWFrOworICAgICAgY2FzZSBQVFlfVVNFUl9QUk9DRVNTOgorCWVudC51dF90eXBlID0gVVNFUl9Q Uk9DRVNTOworCWJyZWFrOworICAgICAgY2FzZSBQVFlfREVBRF9QUk9DRVNTOgorCWVudC51dF90 eXBlID0gREVBRF9QUk9DRVNTOworCWJyZWFrOworICAgICAgZGVmYXVsdDoKKwlyZXR1cm4oUFRZ X1VQREFURV9VVE1QX1BST0NUWVBFX0lOVkFMSUQpOworICAgIH0KKyNlbmRpZiAvKk5PX1VUX1BJ RCovCisKKyNpZm5kZWYgTk9fVVRfSE9TVAorICAgIGlmIChob3N0KQorICAgICAgc3RybmNweShl bnQudXRfaG9zdCwgaG9zdCwgc2l6ZW9mKGVudC51dF9ob3N0KSk7CisgICAgZWxzZQorICAgICAg ZW50LnV0X2hvc3RbMF0gPSAnXDAnOworI2VuZGlmIC8qIE5PX1VUX0hPU1QgKi8KKworI2lmbmRl ZiBOT19VVF9QSUQKKyAgICBpZiAoIXN0cmNtcCAobGluZSwgIi9kZXYvY29uc29sZSIpKSB7CisJ Y2hhciAqIHMgPSBOVUxMOworCisjaWZkZWYgc3VuCisjaWZkZWYgX19TVlI0CisJcyA9ICJjbyI7 CisjZWxzZQorCXMgPSAiY29ucyI7CisjZW5kaWYgLyogX19TVlI0ICovCisjZWxzZQorCXMgPSAi Y29ucyI7CisjZW5kaWYgLyogc3VuICovCisKKwlzdHJuY3B5KGVudC51dF9pZCwgcywgNCk7CisK KyAgICB9IGVsc2UgeworCisJdG1weCA9IGxpbmUgKyBzdHJsZW4obGluZSktMTsKKwlpZiAoKih0 bXB4LTEpICE9ICcvJykgdG1weC0tOwkvKiBsYXN0IDIgY2hhcnMgdW5sZXNzIGl0J3MgYSAnLycg Ki8KKyNpZmRlZiBfX2hwdXgKKwlja3N0cm5jcHkodXRtcF9pZCwgdG1weCwgNSk7CisjZWxzZQor CWNrbWFrbXNnKHV0bXBfaWQsNSwia2wiLHRtcHgsTlVMTCxOVUxMKTsKKyNlbmRpZiAvKiBfX2hw dXggKi8KKwlzdHJuY3B5KGVudC51dF9pZCwgdXRtcF9pZCwgc2l6ZW9mKGVudC51dF9pZCkpOwor ICAgIH0KKyAgICBzdHJuY3B5KGVudC51dF91c2VyLCB1c2VybmFtZSwgc2l6ZW9mKGVudC51dF91 c2VyKSk7CisKKyNlbHNlCisKKyAgICBzdHJuY3B5KGVudC51dF9uYW1lLCB1c2VybmFtZSwgc2l6 ZW9mKGVudC51dF9uYW1lKSk7CisKKyNlbmRpZiAvKiBOT19VVF9QSUQgKi8KKworICAgIGlmICh1 c2VybmFtZVswXSkKKyAgICAgIHN0cm5jcHkodXNlcmJ1ZiwgdXNlcm5hbWUsIHNpemVvZih1c2Vy YnVmKSk7CisgICAgZWxzZQorICAgICAgdXNlcmJ1ZlswXSA9ICdcMCc7CisKKyNpZmRlZiBIQVZF X1NFVFVURU5UCisKKyAgICB1dG1wbmFtZShVVE1QX0ZJTEUpOworICAgIHNldHV0ZW50KCk7Cisv KgorICBJZiB3ZSBuZWVkIHRvIHByZXNlcnZlIHRoZSB1c2VyIG5hbWUgaW4gdGhlIHd0bXAgc3Ry dWN0dXJlIGFuZCBPdXIgZmxhZ3MKKyAgdGVsbCB1cyB3ZSBjYW4gb2J0YWluIGl0IGZyb20gdGhl IHV0bXAgYW5kIHdlIHN1Y2NlZWQgaW4gb2J0YWluaW5nIGl0LCB3ZQorICB0aGVuIHNhdmUgdGhl IHV0bXAgc3RydWN0dXJlIHdlIG9idGFpbiwgd3JpdGUgb3V0IHRoZSB1dG1wIHN0cnVjdHVyZSBh bmQKKyAgY2hhbmdlIHRoZSB1c2VybmFtZSBwb2ludGVyIHNvIGl0IGlzIHVzZWQgYnkgdXBkYXRl X3d0bXAuCisqLworCisjaWZkZWYgV1RNUF9SRVFVSVJFU19VU0VSTkFNRQorICAgIGlmICgoIXVz ZXJuYW1lWzBdKSAmJiAoZmxhZ3MmUFRZX1VUTVBfVVNFUk5BTUVfVkFMSUQpICYmbGluZSkgewor CXN0cnVjdCB1dG1wICp1dHB0cjsKKwlzdHJuY3B5KHV0LnV0X2xpbmUsIGxpbmUsIHNpemVvZih1 dC51dF9saW5lKSk7CisJdXRwdHIgPSBnZXR1dGxpbmUoJnV0KTsKKwlpZiAodXRwdHIpCisJICBz dHJuY3B5KHVzZXJidWYsdXRwdHItPnV0X3VzZXIsc2l6ZW9mKHV0LnV0X3VzZXIpKTsKKyAgICB9 CisjZW5kaWYgLyogV1RNUF9SRVFVSVJFU19VU0VSTkFNRSAqLworCisgICAgcHV0dXRsaW5lKCZl bnQpOworICAgIGVuZHV0ZW50KCk7CisKKyNpZmRlZiBIQVZFX1NFVFVUWEVOVAorICAgIHNldHV0 eGVudCgpOworI2lmZGVmIEhBVkVfR0VUVVRNUFgKKyAgICBnZXR1dG1weCgmZW50LCAmdXR4KTsK KyNlbHNlIC8qIEhBVkVfR0VUVVRNUFggKi8KKyAgICAvKiBGb3IgcGxhdGZvcm1zIGxpa2UgSFBV WCBhbmQgRGVjIFVuaXggd2hpY2ggZG9uJ3QgaGF2ZSBnZXR1dG1weCAqLworICAgIHN0cm5jcHko dXR4LnV0X3VzZXIsIGVudC51dF91c2VyLCBzaXplb2YoZW50LnV0X3VzZXIpKTsKKyAgICBzdHJu Y3B5KHV0eC51dF9pZCwgZW50LnV0X2lkLCBzaXplb2YoZW50LnV0X2lkKSk7CisgICAgc3RybmNw eSh1dHgudXRfbGluZSwgZW50LnV0X2xpbmUsIHNpemVvZihlbnQudXRfbGluZSkpOworICAgIHV0 eC51dF9waWQgPSBwaWQ7CQkvKiBrbHVkZ2UgZm9yIElyaXgsIGV0Yy4gdG8gYXZvaWQgdHJ1bmMu ICovCisgICAgdXR4LnV0X3R5cGUgPSBlbnQudXRfdHlwZTsKKyNpZmRlZiBVVF9FWElUX1NUUlVD VFVSRV9ESUZGRVIKKyAgICB1dHgudXRfZXhpdC51dF9leGl0ID0gZW50LnV0X2V4aXQuZV9leGl0 OworI2Vsc2UgLyogVVRfRVhJVF9TVFJVQ1RVUkVfRElGRkVSICovCisvKiBLTFVER0UgZm9yIG5v dzsgZXZlbnR1YWxseSB0aGlzIHdpbGwgYmUgYSBmZWF0dXJlIHRlc3QuLi4gU2VlIFBSI1s0MF0g Ki8KKyNpZmRlZiBfX2hwdXgKKyAgICB1dHgudXRfZXhpdC5fX2VfdGVybWluYXRpb24gPSBlbnQu dXRfZXhpdC5lX3Rlcm1pbmF0aW9uOworICAgIHV0eC51dF9leGl0Ll9fZV9leGl0ID0gZW50LnV0 X2V4aXQuZV9leGl0OworI2Vsc2UgLyogX19ocHV4ICovCisgICAgLyogWFhYIGRvIG5vdGhpbmcg Zm9yIG5vdzsgd2UgZG9uJ3QgZXZlbiBrbm93IHRoZSBzdHJ1Y3QgbWVtYmVyIGV4aXN0cyAqLwor I2VuZGlmIC8qIF9faHB1eCAqLworI2VuZGlmIC8qIFVUX0VYSVRfU1RSVUNUVVJFX0RJRkZFUiAq LworICAgIHV0eC51dF90di50dl9zZWMgPSBlbnQudXRfdGltZTsKKyAgICB1dHgudXRfdHYudHZf dXNlYyA9IDA7CisjZW5kaWYgLyogSEFWRV9HRVRVVE1QWCAqLworICAgIGlmIChob3N0KQorICAg ICAgc3RybmNweSh1dHgudXRfaG9zdCwgaG9zdCwgc2l6ZW9mKHV0eC51dF9ob3N0KSk7CisgICAg ZWxzZQorICAgICAgdXR4LnV0X2hvc3RbMF0gPSAwOworICAgIHB1dHV0eGxpbmUoJnV0eCk7Cisg ICAgZW5kdXR4ZW50KCk7CisjZW5kaWYgLyogSEFWRV9TRVRVVFhFTlQgKi8KKworI2Vsc2UgLyog SEFWRV9TRVRVVEVOVCAqLworICAgIGlmIChmbGFncyZQVFlfVFRZU0xPVF9VU0FCTEUpIHsKKwl0 dHkgPSB0dHlzbG90KCk7CisgICAgfSBlbHNlIHsKKwlpbnQgbGM7CisJdHR5ID0gLTE7CisJaWYg KChmZCA9IG9wZW4oVVRNUF9GSUxFLCBPX1JEV1IpKSA8IDApCisJICByZXR1cm4oZXJybm8pOwor CWZvciAobGMgPSAwOworCSAgICAgbHNlZWsoZmQsIChvZmZfdCkobGMgKiBzaXplb2Yoc3RydWN0 IHV0bXApKSwgU0VFS19TRVQpICE9IC0xOworCSAgICAgbGMrKworCSAgICAgKSB7CisJICAgIGlm IChyZWFkKGZkLAorCQkgICAgIChjaGFyICopJnV0LAorCQkgICAgIHNpemVvZihzdHJ1Y3QgdXRt cCkKKwkJICAgICApICE9IHNpemVvZihzdHJ1Y3QgdXRtcCkKKwkJKQorCSAgICAgIGJyZWFrOwor CSAgICBpZiAoc3RybmNtcCh1dC51dF9saW5lLCBlbnQudXRfbGluZSwgc2l6ZW9mKHV0LnV0X2xp bmUpKSA9PSAwKSB7CisJCXR0eSA9IGxjOworI2lmZGVmIFdUTVBfUkVRVUlSRVNfVVNFUk5BTUUK KwkJaWYgKCF1c2VybmFtZSYmKGZsYWdzJlBUWV9VVE1QX1VTRVJOQU1FX1ZBTElEKSkKKwkJICBz dHJuY3B5KHVzZXJidWYsIHV0LnV0X3VzZXIsIHNpemVvZih1dC51dF91c2VyKSk7CisjZW5kaWYg LyogV1RNUF9SRVFVSVJFU19VU0VSTkFNRSAqLworCQlicmVhazsKKwkgICAgfQorCX0KKwljbG9z ZShmZCk7CisgICAgfQorICAgIGlmICh0dHkgPiAwICYmIChmZCA9IG9wZW4oVVRNUF9GSUxFLCBP X1dST05MWSwgMCkpID49IDApIHsKKwlsc2VlayhmZCwgKG9mZl90KSh0dHkgKiBzaXplb2Yoc3Ry dWN0IHV0bXApKSwgU0VFS19TRVQpOworCXdyaXRlKGZkLCAoY2hhciAqKSZlbnQsIHNpemVvZihz dHJ1Y3QgdXRtcCkpOworCWNsb3NlKGZkKTsKKyAgICB9CisjZW5kaWYgLyogSEFWRV9TRVRVVEVO VCAqLworCisgICAgLyogRG9uJ3QgcmVjb3JkIExPR0lOX1BST0NFU1MgZW50cmllcy4gKi8KKyAg ICBpZiAocHJvY2Vzc190eXBlID09IFBUWV9MT0dJTl9QUk9DRVNTKQorICAgICAgcmV0dXJuKDAp OworICAgIGVsc2UKKyAgICAgIHJldHVybihwdHlpbnRfdXBkYXRlX3d0bXAoJmVudCwgaG9zdCwg dXNlcmJ1ZikpOworfQorI2lmbmRlZiBXVE1QX0ZJTEUKKyNpZmRlZiBfUEFUSF9XVE1QCisjZGVm aW5lIFdUTVBfRklMRSBfUEFUSF9XVE1QCisjZW5kaWYgLyogX1BBVEhfV1RNUCAqLworI2VuZGlm IC8qIFdUTVBfRklMRSAqLworCisjaWZuZGVmIFdUTVBYX0ZJTEUKKyNpZmRlZiBfUEFUSF9XVE1Q WAorI2lmZGVmIEhBVkVfVVBEV1RNUFgKKyNkZWZpbmUgV1RNUFhfRklMRSBfUEFUSF9XVE1QWAor I2VuZGlmIC8qIEhBVkVfVVBEV1RNUFggKi8KKyNlbmRpZiAvKiBfUEFUSF9XVE1QWCAqLworI2Vu ZGlmIC8qIFdUTVBYX0ZJTEUgKi8KKworLyogSWYgaXQgaXMgKnN0aWxsKiBtaXNzaW5nLCBhc3N1 bWUgL3Vzci9hZG0vd3RtcCAqLworCisjaWZuZGVmIFdUTVBfRklMRQorI2RlZmluZQlXVE1QX0ZJ TEUgIi91c3IvYWRtL3d0bXAiCisjZW5kaWYgLyogV1RNUF9GSUxFICovCisKKyNpZmRlZiBDT01N RU5UCisvKiBUaGUgZm9sbG93aW5nIHRlc3QgY2FuIG5vdCBiZSBtYWRlIHBvcnRhYmx5ICovCisK Ky8qICNpZiBkZWZpbmVkKF9fR0xJQkNfXykgJiYgKF9fR0xJQkNfXyA+PSAyKSAmJiAoX19HTElC Q19NSU5PUl9fID49IDEpICovCisvKgorICBUaGlzIGlzIHVnbHksIGJ1dCB0aGUgbGFjayBvZiBz dGFuZGFyZGl6YXRpb24gaW4gdGhlIHV0bXAvdXRtcHggc3BhY2UsIGFuZAorICB3aGF0IGdsaWJj IGltcGxlbWVudHMgYW5kIGRvZXNuJ3QgbWFrZSBhdmFpbGFibGUsIGlzIGV2ZW4gd29yc2UuCisq LworLyogI3VuZGVmIEhBVkVfVVBEV1RNUFggKi8JLyogRG9uJ3QgdXNlIHVwZHd0bXB4IGZvciBn bGliYyAyLjEgKi8KKy8qICNlbmRpZiAqLyAvKiBfX0dMSUJDX18gZXRjICovCisKKyNlbHNlICAv KiBDT01NRU5UICovCisKKyNpZmRlZiBfX0dMSUJDX18KKyN1bmRlZiBIQVZFX1VQRFdUTVBYCQkv KiBEb24ndCB1c2UgdXBkd3RtcHggZm9yIGdsaWJjIHBlcmlvZCAqLworI2VuZGlmIC8qIF9fR0xJ QkNfXyAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKworbG9uZworcHR5aW50X3VwZGF0ZV93dG1w KGVudCxob3N0LHVzZXIpIHN0cnVjdCB1dG1wICplbnQ7IGNoYXIgKmhvc3Q7IGNoYXIgKnVzZXI7 IHsKKyAgICBzdHJ1Y3QgdXRtcCB1dDsKKyAgICBzdHJ1Y3Qgc3RhdCBzdGF0YjsKKyAgICBpbnQg ZmQ7CisgICAgdGltZV90IHV0dGltZTsKKyNpZmRlZiBIQVZFX1VQRFdUTVBYCisgICAgc3RydWN0 IHV0bXB4IHV0eDsKKworICAgIGdldHV0bXB4KGVudCwgJnV0eCk7CisgICAgaWYgKGhvc3QpCisg ICAgICBzdHJuY3B5KHV0eC51dF9ob3N0LCBob3N0LCBzaXplb2YodXR4LnV0X2hvc3QpICk7Cisg ICAgZWxzZQorICAgICAgdXR4LnV0X2hvc3RbMF0gPSAwOworICAgIGlmICh1c2VyKQorICAgICAg c3RybmNweSh1dHgudXRfdXNlciwgdXNlciwgc2l6ZW9mKHV0eC51dF91c2VyKSk7CisgICAgdXBk d3RtcHgoV1RNUFhfRklMRSwgJnV0eCk7CisjZW5kaWYgLyogSEFWRV9VUERXVE1QWCAqLworCisj aWZkZWYgSEFWRV9VUERXVE1QCisjaWZuZGVmIEhBVkVfVVBEV1RNUFgKKyAgICAvKiBUaGlzIGlz IGFscmVhZHkgcGVyZm9ybWVkIGJ5dXBkd3RtcHggaWYgcHJlc2VudC4qLworICAgIHVwZHd0bXAo V1RNUF9GSUxFLCBlbnQpOworI2VuZGlmIC8qIEhBVkVfVVBEV1RNUFgqLworI2Vsc2UgLyogSEFW RV9VUERXVE1QICovCisKKyAgICBpZiAoKGZkID0gb3BlbihXVE1QX0ZJTEUsIE9fV1JPTkxZfE9f QVBQRU5ELCAwKSkgPj0gMCkgeworCWlmICghZnN0YXQoZmQsICZzdGF0YikpIHsKKwkgICAgbWVt c2V0KChjaGFyICopJnV0LCAwLCBzaXplb2YodXQpKTsKKyNpZmRlZiBfX2hwdXgKKwkgICAgc3Ry bmNweSh1dC51dF9pZCwgZW50LT51dF9pZCwgc2l6ZW9mICh1dC51dF9pZCkpOworI2VuZGlmIC8q IF9faHB1eCAqLworCSAgICBzdHJuY3B5KHV0LnV0X2xpbmUsIGVudC0+dXRfbGluZSwgc2l6ZW9m KHV0LnV0X2xpbmUpKTsKKwkgICAgc3RybmNweSh1dC51dF9uYW1lLCBlbnQtPnV0X25hbWUsIHNp emVvZih1dC51dF9uYW1lKSk7CisjaWZuZGVmIE5PX1VUX0hPU1QKKwkgICAgc3RybmNweSh1dC51 dF9ob3N0LCBlbnQtPnV0X2hvc3QsIHNpemVvZih1dC51dF9ob3N0KSk7CisjZW5kaWYgLyogTk9f VVRfSE9TVCAqLworCisJICAgIHRpbWUoJnV0dGltZSk7CisJICAgIHV0LnV0X3RpbWUgPSB1dHRp bWU7CisKKyNpZmRlZiBIQVZFX0dFVFVURU5UCisjaWZkZWYgVVNFUl9QUk9DRVNTCisJICAgIGlm IChlbnQtPnV0X25hbWUpIHsKKwkJaWYgKCF1dC51dF9waWQpCisJCSAgdXQudXRfcGlkID0gZ2V0 cGlkKCk7CisjaWZuZGVmIF9faHB1eAorCQl1dC51dF90eXBlID0gVVNFUl9QUk9DRVNTOworI2Vs c2UgIC8qIF9faHB1eCAqLworCQl1dC51dF90eXBlID0gZW50LT51dF90eXBlOworI2VuZGlmIC8q IF9faHB1eCAqLworCisJICAgIH0gZWxzZSB7CisKKyNpZmRlZiBFTVBUWQorCQl1dC51dF90eXBl ID0gRU1QVFk7CisjZWxzZQorCQl1dC51dF90eXBlID0gREVBRF9QUk9DRVNTOyAvKiBGb3IgTGlu dXggYnJva2VubmVzcyovCisjZW5kaWYgLyogRU1QVFkgKi8KKworCSAgICB9CisjZW5kaWYgLyog VVNFUl9QUk9DRVNTICovCisjZW5kaWYgLyogSEFWRV9HRVRVVEVOVCAqLworCisJICAgIGlmICh3 cml0ZShmZCwgKGNoYXIgKikmdXQsIHNpemVvZihzdHJ1Y3QgdXRtcCkpICE9CisJCXNpemVvZihz dHJ1Y3QgdXRtcCkpCisjaWZuZGVmIENPSEVSRU5UCisJICAgICAgZnRydW5jYXRlKGZkLCBzdGF0 Yi5zdF9zaXplKTsKKyNlbHNlCisJICAgICAgY2hzaXplKGZkLCBzdGF0Yi5zdF9zaXplKTsKKyNl bmRpZiAvKiBDT0hFUkVOVCAqLworCX0KKwljbG9zZShmZCk7CisgICAgfQorI2VuZGlmIC8qIEhB VkVfVVBEV1RNUCAqLworICAgIHJldHVybigwKTsgLyogbm8gY3VycmVudCBmYWlsdXJlIGNhc2Vz OyBmaWxlIG5vdCBmb3VuZCBpcyBub3QgZmFpbHVyZSEgKi8KK30KKyNlbmRpZiAvKiBXQU5UX1VU TVAgKi8KKworLyogVGhpcyBpcyBmb3IgYW5jaWVudCBVbml4ZXMgdGhhdCBkb24ndCBoYXZlIHRo ZXNlIHR0eSBzeW1ib2xzIGRlZmluZWQuICovCisKKyNpZm5kZWYgUEVORElOCisjZGVmaW5lIFBF TkRJTiBJQ0FOT04KKyNlbmRpZiAvKiBQRU5ESU4gKi8KKyNpZm5kZWYgRkxVU0hPCisjZGVmaW5l IEZMVVNITyBJQ0FOT04KKyNlbmRpZiAvKiBGTFVTSE8gKi8KKyNpZm5kZWYgSU1BWEJFTAorI2Rl ZmluZSBJTUFYQkVMIElDQU5PTgorI2VuZGlmIC8qIElNQVhCRUwgKi8KKyNpZm5kZWYgRVhUUFJP QworI2RlZmluZSBFWFRQUk9DIElDQU5PTgorI2VuZGlmIC8qIEVYVFBST0MgKi8KKworc3RhdGlj IGNoYXIgWGxpbmVbMTddID0geyAwLCAwIH07CisvKgorICBnZXRwdHlzbGF2ZSgpCisgIE9wZW4g dGhlIHNsYXZlIHNpZGUgb2YgdGhlIHB0eSwgYW5kIGRvIGFueSBpbml0aWFsaXphdGlvbiB0aGF0 IGlzIG5lY2Vzc2FyeS4KKyAgVGhlIHJldHVybiB2YWx1ZSBmZCBpcyBhIGZpbGUgZGVzY3JpcHRv ciBmb3IgdGhlIHNsYXZlIHNpZGUuCisgIGZjID0gZnVuY3Rpb24gY29kZSBmcm9tIGRvX3B0eSgp IChxLnYuKQorKi8KK2ludAorZ2V0cHR5c2xhdmUoZmQsIGZjKSBpbnQgKiBmZCwgZmM7IHsKKyAg ICBpbnQgdHR5ZmQ7CisgICAgaW50IHQgPSAtMTsKKyAgICBsb25nIHJldHZhbDsKKyNpZmRlZiBU SU9DR1dJTlNaCisgICAgc3RydWN0IHdpbnNpemUgd3M7CisgICAgZXh0ZXJuIGludCBjbWRfcm93 cywgY21kX2NvbHM7CisjZW5kaWYgLyogVElPQ0dXSU5TWiAqLworCisgICAgdHR5ZmQgPSAqZmQ7 CisgICAgZGVidWcoRjExMSwiZ2V0cHR5c2xhdmUoKSIsInR0eWZkIix0dHlmZCk7CisgICAgLyoK KyAgICAgKiBPcGVuaW5nIHRoZSBzbGF2ZSBzaWRlIG1heSBjYXVzZSBpbml0aWxpemF0aW9uIG9m IHRoZQorICAgICAqIGtlcm5lbCB0dHkgc3RydWN0dXJlLiAgV2UgbmVlZCByZW1lbWJlciB0aGUg c3RhdGUgb2Y6CisgICAgICogICAgICBpZiBsaW5lbW9kZSB3YXMgdHVybmVkIG9uCisgICAgICog ICAgICB0ZXJtaW5hbCB3aW5kb3cgc2l6ZQorICAgICAqICAgICAgdGVybWluYWwgc3BlZWQKKyAg ICAgKiBzbyB0aGF0IHdlIGNhbiByZXNldCB0aGVtIGlmIHdlIG5lZWQgdG8uCisgICAgICovCisg ICAgaWYgKChyZXR2YWwgPSBwdHlfb3Blbl9zbGF2ZShYbGluZSwgJnQsIGZjKSkgIT0gMCkgewor CXBlcnJvcihYbGluZSk7CisJbXNnKys7CisgICAgICAgIGRlYnVnKEYxMTEsImdldHB0eXNsYXZl KCkiLCJVbmFibGUgdG8gb3BlbiBzbGF2ZSIscmV0dmFsKTsKKyAgICAgICAgcmV0dXJuKC0xKTsK KyAgICB9CisgICAgZGVidWcoRjExMSwiZ2V0cHR5c2xhdmUiLCJ0Iix0KTsKKyNpZmRlZiBJTklU X1NQVFkKKyAgICBzcHR5ID0gdDsKKyAgICBkZWJ1ZyhGMTExLCJnZXRwdHlzbGF2ZSIsInNwdHki LHNwdHkpOworI2VuZGlmIC8qIElOSVRfU1BUWSAqLworI2lmZGVmIFNUUkVBTVNQVFkKKyAgICBp ZiAoaW9jdGwodCxJX1BVU0gsInBja3QiKSA8IDApIHsKKyAgICAgICAgZGVidWcoRjExMSwiZ2V0 cHR5c2xhdmUoKSIsImlvY3RsKElfUFVTSCkgZmFpbGVkIixlcnJubyk7CisjaWZuZGVmIF9BSVgK KyAgICAgICAgZmF0YWwoIklfUFVTSCBwY2t0Iik7CisjZW5kaWYgLyogX0FJWCAqLworICAgIH0K KyNlbmRpZiAvKiBTVFJFQU1TUFRZICovCisKKyAgICAvKiBTZXQgdXAgdGhlIHR0eSBtb2RlcyBh cyB3ZSBsaWtlIHRoZW0gdG8gYmUuICovCisjaWZkZWYgQ09NTUVOVAorICAgIC8qIE9yaWdpbmFs bHkgbGlrZSB0aGlzLi4uIEJ1dCB0aGlzIGlzIHRoZSBtYXN0ZXIgLSB3ZSB3YW50IHRoZSBzbGF2 ZSAqLworICAgIC8qIEFueXdheSwgdGhpcyBmYWlscyBvbiBTb2xhcmlzIGFuZCBwcm9iYWJseSBv dGhlciBTeXN0ZW0gViBPUydzICovCisgICAgaW5pdF90ZXJtYnVmKHR0eWZkKTsKKyNlbHNlCisg ICAgaW5pdF90ZXJtYnVmKHQpOworI2VuZGlmCS8qIENPTU1FTlQgKi8KKyNpZmRlZiBUSU9DR1dJ TlNaCisgICAgaWYgKGNtZF9yb3dzIHx8IGNtZF9jb2xzKSB7CisgICAgICAgIG1lbXNldCgoY2hh ciAqKSZ3cywgMCwgc2l6ZW9mKHdzKSk7CisgICAgICAgIHdzLndzX2NvbCA9IGNtZF9jb2xzOwor ICAgICAgICB3cy53c19yb3cgPSBjbWRfcm93czsKKwlkZWJ1ZyhGMTAxLCJnZXRwdHlzbGF2ZSgp IGRvaW5nIFRJT0NTV0lOU1ouLi4iLCIiLHQpOworICAgICAgICBpb2N0bCh0LCBUSU9DU1dJTlNa LCAoY2hhciAqKSZ3cyk7CisgICAgfQorI2VuZGlmIC8qIFRJT0NHV0lOU1ogKi8KKworICAgIC8q IEZvciBleHRlcm5hbCBwcm90b2NvbHMsIHB1dCB0aGUgcHR5IGluIG5vLWVjaG8gbW9kZSAqLwor ICAgIGlmIChmYyA9PSAxKSB7CisJZGVidWcoRjEwMCwiZ2V0cHR5c2xhdmUoKSBzZXR0aW5nIHJh d21vZGUiLCIiLDApOworCS8qIGlmbGFncyAqLworCXRlcm1idWYuY19pZmxhZyAmPSB+KFBBUk1S S3xJU1RSSVB8QlJLSU5UfElOTENSfElHTkNSfElDUk5MKTsKKwl0ZXJtYnVmLmNfaWZsYWcgJj0g fihJTlBDS3xJR05QQVJ8SU1BWEJFTHxJWEFOWXxJWE9OfElYT0ZGKTsKKwl0ZXJtYnVmLmNfaWZs YWcgfD0gSUdOQlJLOworI2lmZGVmIElVQ0xDCisJdGVybWJ1Zi5jX2lmbGFnICY9IH5JVUNMQzsK KyNlbmRpZiAvKiBJVUNMQyAqLworCisJLyogb2ZsYWdzICovCisJdGVybWJ1Zi5jX29mbGFnICY9 IH5PUE9TVDsKKyNpZmRlZiBPWFRBQlMKKwl0ZXJtYnVmLmNfb2ZsYWcgJj0gfk9YVEFCUzsKKyNl bmRpZiAvKiBPWFRBQlMgKi8KKyNpZmRlZiBPTk9DUgorCXRlcm1idWYuY19vZmxhZyAmPSB+T05P Q1I7CisjZW5kaWYgLyogT05PQ1IgKi8KKyNpZmRlZiBPTkxSRVQKKwl0ZXJtYnVmLmNfb2ZsYWcg Jj0gfk9OTFJFVDsKKyNlbmRpZiAvKiBPTkxSRVQgKi8KKyNpZmRlZiBPTkxDUgorCXRlcm1idWYu Y19vZmxhZyAmPSB+T05MQ1I7CisjZW5kaWYgLyogT05MQ1IgKi8KKworCS8qIGxmbGFncyAqLwor CXRlcm1idWYuY19sZmxhZyAmPSB+RUNITzsKKyNpZmRlZiBFQ0hPRQorCXRlcm1idWYuY19sZmxh ZyAmPSB+RUNIT0U7CisjZW5kaWYgLyogRUNIT0UgKi8KKyNpZmRlZiBFQ0hPTkwKKwl0ZXJtYnVm LmNfbGZsYWcgJj0gfkVDSE9OTDsKKyNlbmRpZiAvKiBFQ0hPTkwgKi8KKyNpZmRlZiBFQ0hPUFJU CisJdGVybWJ1Zi5jX2xmbGFnICY9IH5FQ0hPUFJUOworI2VuZGlmIC8qIEVDSE9QUlQgKi8KKyNp ZmRlZiBFQ0hPS0UKKwl0ZXJtYnVmLmNfbGZsYWcgJj0gfkVDSE9LRTsKKyNlbmRpZiAvKiBFQ0hP S0UgKi8KKyNpZmRlZiBFQ0hPQ1RMCisJdGVybWJ1Zi5jX2xmbGFnICY9IH5FQ0hPQ1RMOworI2Vu ZGlmIC8qIEVDSE9DVEwgKi8KKyNpZmRlZiBBTFRXRVJBU0UKKwl0ZXJtYnVmLmNfbGZsYWcgJj0g fkFMVFdFUkFTRTsKKyNlbmRpZiAvKiBBTFRXRVJBU0UgKi8KKyNpZmRlZiBFWFRQUk9DCisJdGVy bWJ1Zi5jX2xmbGFnICY9IH5FWFRQUk9DOworI2VuZGlmIC8qIEVYVFBST0MgKi8KKwl0ZXJtYnVm LmNfbGZsYWcgJj0gfihJQ0FOT058SVNJR3xJRVhURU58VE9TVE9QfEZMVVNIT3xQRU5ESU4pOwor CisjaWZkZWYgTk9LRVJOSU5GTworCXRlcm1idWYuY19sZmxhZyB8PSBOT0tFUk5JTkZPOworI2Vu ZGlmCS8qIE5PS0VSTklORk8gKi8KKwkvKiB0ZXJtYnVmLmNfbGZsYWcgfD0gTk9GTFNIOyAqLwor CXRlcm1idWYuY19sZmxhZyAmPSB+Tk9GTFNIOworCisJLyogY2ZsYWdzICovCisJdGVybWJ1Zi5j X2NmbGFnICY9IH4oQ1NJWkV8UEFSRU5CfFBBUk9ERCk7CisJdGVybWJ1Zi5jX2NmbGFnIHw9IENT OHxDUkVBRDsKKyNpZmRlZiBWTUlOCisJdGVybWJ1Zi5jX2NjW1ZNSU5dID0gMTsKKyNlbmRpZgkv KiBWTUlOICovCisgICAgfSBlbHNlIHsJCQkJLyogUmVndWxhciBpbnRlcmFjdGl2ZSB1c2UgKi8K KwlkZWJ1ZyhGMTAwLCJnZXRwdHlzbGF2ZSgpIHNldHRpbmcgY29va2VkIG1vZGUiLCIiLDApOwor CisJLyogU2V0dGluZ3MgZm9yIHNndHR5IGJhc2VkIHN5c3RlbXMgKi8KKworI2lmbmRlZiBVU0Vf VEVSTUlPCisJdGVybWJ1Zi5zZy5zZ19mbGFncyB8PSBDUk1PRHxBTllQfEVDSE98WFRBQlM7Cisj ZW5kaWYgLyogVVNFX1RFUk1JTyAqLworCisjaWZuZGVmIE9YVEFCUworI2RlZmluZSBPWFRBQlMg MAorI2VuZGlmIC8qIE9YVEFCUyAqLworCisJLyogU2V0dGluZ3MgZm9yIFVOSUNPUyBhbmQgSFBV WCAqLworCisjaWZkZWYgQ1JBWQorCXRlcm1idWYuY19vZmxhZyA9IE9QT1NUfE9OTENSfFRBQjM7 CisJdGVybWJ1Zi5jX2lmbGFnID0gSUdOUEFSfElTVFJJUHxJQ1JOTHxJWE9OOworCXRlcm1idWYu Y19sZmxhZyA9IElTSUd8SUNBTk9OfEVDSE98RUNIT0V8RUNIT0s7CisJdGVybWJ1Zi5jX2NmbGFn ID0gRVhUQnxIVVBDTHxDUzg7CisjZWxzZSAvKiBDUkFZICovCisjaWZkZWYgSFBVWAorCXRlcm1i dWYuY19vZmxhZyA9IE9QT1NUfE9OTENSfFRBQjM7CisJdGVybWJ1Zi5jX2lmbGFnID0gSUdOUEFS fElTVFJJUHxJQ1JOTHxJWE9OOworCXRlcm1idWYuY19sZmxhZyA9IElTSUd8SUNBTk9OfEVDSE98 RUNIT0V8RUNIT0s7CisJdGVybWJ1Zi5jX2NmbGFnID0gRVhUQnxIVVBDTHxDUzg7CisjZWxzZSAv KiBIUFVYICovCisjaWZkZWYgVVNFX1RFUk1JTworCS8qCisJICBTZXR0aW5ncyBmb3IgYWxsIG90 aGVyIHRlcm1pb3MvdGVybWlvIGJhc2VkIHN5c3RlbXMsIG90aGVyIHRoYW4gCisJICA0LjRCU0Qu ICBJbiA0LjRCU0QgdGhlIGtlcm5lbCBkb2VzIHRoZSBpbml0aWFsIHRlcm1pbmFsIHNldHVwLgor CSovCisjaWZkZWYgQlNENDIKKyNpZm5kZWYgQlNENDQKKwl0ZXJtYnVmLmNfbGZsYWcgfD0gRUNI T3xJQ0FOT058SUVYVEVOfElTSUc7CisJdGVybWJ1Zi5jX29mbGFnIHw9IE9OTENSfE9YVEFCU3xP UE9TVDsKKwl0ZXJtYnVmLmNfaWZsYWcgfD0gSUNSTkx8SUdOUEFSOworCXRlcm1idWYuY19jZmxh ZyB8PSBIVVBDTDsKKwl0ZXJtYnVmLmNfaWZsYWcgJj0gfklYT0ZGOworI2VuZGlmIC8qIEJTRDQ0 ICovCisjZWxzZSAvKiBCU0Q0MiAqLworCXRlcm1idWYuY19sZmxhZyB8PSBFQ0hPfElDQU5PTnxJ RVhURU58SVNJRzsKKwl0ZXJtYnVmLmNfb2ZsYWcgfD0gT05MQ1J8T1hUQUJTfE9QT1NUOworCXRl cm1idWYuY19pZmxhZyB8PSBJQ1JOTHxJR05QQVI7CisJdGVybWJ1Zi5jX2NmbGFnIHw9IEhVUENM OworCXRlcm1idWYuY19pZmxhZyAmPSB+SVhPRkY7CisjZW5kaWYgLyogQlNENDIgKi8KKyNlbmRp ZiAvKiBVU0VfVEVSTUlPICovCisjZW5kaWYgLyogSFBVWCAqLworI2VuZGlmIC8qIENSQVkgKi8K KyAgICB9CisKKyAgICAvKiBTZXQgdGhlIHR0eSBtb2RlcywgYW5kIG1ha2UgdGhpcyBvdXIgY29u dHJvbGxpbmcgdHR5LiAqLworI2lmZGVmIENPTU1FTlQKKyAgICAvKiBCdXQgdGhpcyBpcyB0aGUg bWFzdGVyIC0gd2Ugd2FudCB0aGUgc2xhdmUgKi8KKyAgICBzZXRfdGVybWJ1Zih0dHlmZCk7Cisj ZWxzZQorICAgIHNldF90ZXJtYnVmKHQpOworI2VuZGlmCS8qIENPTU1FTlQgKi8KKworICAgIGlm ICh0ICE9IDApCisgICAgICBkdXAyKHQsIDApOworICAgIGlmICh0ICE9IDEpCisgICAgICBkdXAy KHQsIDEpOworICAgIGlmICh0ICE9IDIpIHsKKwlpZiAoZmMgPT0gMCkgeworCSAgICBkdXAyKHQs IDIpOworCX0gZWxzZSBpZiAoZmMgPT0gMSkgeworCSAgICAvKiBGb3IgZXh0ZXJuYWwgcHJvdG9j b2xzLCBzZW5kIHN0ZGVyciB0byAvZGV2L251bGwgKi8KKyNpZmRlZiBDT01NRU5UCisJICAgIGlu dCB4eDsKKyNpZm5kZWYgQ09NTUVOVAorCSAgICBjaGFyICogcyA9ICIvZGV2L251bGwiOworCSAg ICBlcnJubyA9IDA7CisJICAgIHh4ID0gb3BlbihzLCBPX1dST05MWSk7CisjZWxzZQorCSAgICBj aGFyICogcyA9ICJwdHkubG9nIjsKKwkgICAgZXJybm8gPSAwOworCSAgICB4eCA9IG9wZW4ocywg T19DUkVBVCwgMDY0NCk7CisjZW5kaWYgLyogQ09NTUVOVCAqLworCSAgICBkZWJ1ZyhGMTExLCJn ZXRwdHlzbGF2ZSByZWRpcmVjdCBzdGRlcnIiLHMsZXJybm8pOworCSAgICBkdXAyKHh4LDIpOwor I2VuZGlmCS8qIENPTU1FTlQgKi8KKwl9CisgICAgfQorICAgIGlmICh0ID4gMikKKyAgICAgIGNs b3NlKHQpOworCisgICAgaWYgKHR0eWZkID4gMikgeworCWNsb3NlKHR0eWZkKTsKKyAgICAgICAg dHR5ZmQgPSAtMTsKKwkqZmQgPSB0dHlmZDsKKyAgICB9CisgICAgcmV0dXJuKDApOworfQorCisj aWZkZWYgSEFWRV9QVFlUUkFQCisvKgorICBUbyBiZSBjYWxsZWQgdG8gZGV0ZXJtaW5lIGlmIGEg dHJhcCBpcyBwZW5kaW5nIG9uIGEgcHR5CisgIGlmIGFuZCBvbmx5IGlmIHNlbGVjdCgpIGNhbm5v dCBiZSB1c2VkLgorKi8KK2ludAorcHR5X3RyYXBfcGVuZGluZyhmZCkgaW50IGZkOyB7CisgICAg aW50IHBlbmRpbmc7CisgICAgaW50IHJjOworCisgICAgcmMgPSBpb2N0bChmZCwgVElPQ1RSQVBT VEFUVVMsIChjaGFyICopJnBlbmRpbmcsIHNpemVvZihwZW5kaW5nKSk7CisgICAgaWYgKHJjID09 IDApIHsKKyAgICAgICAgZGVidWcoRjEwMSwicHR5X3RyYXBfcGVuZGluZygpIiwiIixwZW5kaW5n KTsKKyAgICAgICAgcmV0dXJuKHBlbmRpbmcpOworICAgIH0gZWxzZSB7CisgICAgICAgIGRlYnVn KEYxMTEsInB0eV90cmFwX3BlbmRpbmcoKSIsImlvY3RsKCkgZmFpbGVkIixyYyk7CisgICAgICAg IHJldHVybigtMSk7CisgICAgfQorfQorCisvKgorICBUbyBiZSBjYWxsZWQgYWZ0ZXIgc2VsZWN0 KCkgaGFzIHJldHVybmVkIGluZGljYXRpbmcgdGhhdCBhbiBleGNlcHRpb24gaXMKKyAgd2FpdGlu ZyBvbiBhIHB0eS4gIEl0IHNob3VsZCBiZSBjYWxsZWQgd2l0aCB0aGUgZmlsZSBkZXNjcmlwdG9y IG9mIHRoZSBwdHkuCisgIFJldHVybnMgLTEgb24gZXJyb3I7IDAgaWYgcHR5IGlzIHN0aWxsIG9w ZW47IDEgaWYgcHR5IGhhcyBjbG9zZWQuCisqLworaW50CitwdHlfdHJhcF9oYW5kbGVyKGZkKSBp bnQgZmQ7IHsKKyAgICBzdHJ1Y3QgcmVxdWVzdF9pbmZvIHJpOworCisgICAgbWVtc2V0KCZyaSww LHNpemVvZihyaSkpOworICAgIGlmIChpb2N0bChmZCxUSU9DUkVRQ0hFQ0ssKGNoYXIgKikmcmks IHNpemVvZihyaSkpICE9IDApIHsKKyAgICAgICAgZGVidWcoRjExMSwicHR5X3RyYXBfaGFuZGxl cigpIiwiaW9jdGwoVElPQ1JFUUNIRUNLKSBmYWlsZWQiLGVycm5vKTsKKyAgICAgICAgcmV0dXJu KC0xKTsKKyAgICB9CisgICAgc3dpdGNoIChyaS5yZXF1ZXN0KSB7CisgICAgICBjYXNlIFRJT0NP UEVOOgorICAgICAgICBkZWJ1ZyhGMTEwLCJwdHlfdHJhcF9oYW5kbGVyKCkiLCJhbiBvcGVuKCkg Y2FsbCIsMCk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBUSU9DQ0xPU0U6CisgICAgICAg IGRlYnVnKEYxMTAsInB0eV90cmFwX2hhbmRsZXIoKSIsImEgY2xvc2UoKSBjYWxsIiwwKTsKKyAg ICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICBkZWJ1ZyhGMTEwLCJwdHlfdHJh cF9oYW5kbGVyKCkiLCJhbiBpb2N0bCgpIGNhbGwiLDApOworICAgICAgICByaS5lcnJub19lcnJv ciA9IEVJTlZBTDsKKyAgICB9CisgICAgaWYgKGlvY3RsKGZkLCBUSU9DUkVRU0VULCAoY2hhciAq KSZyaSxzaXplb2YocmkpKSAhPSAwKSB7CisgICAgICAgIGRlYnVnKEYxMTEsInB0eV90cmFwX2hh bmRsZXIoKSIsImlvY3RsKFRJT0NSRVFTRVQpIGZhaWxlZCIsZXJybm8pOworICAgICAgICByZXR1 cm4oLTEpOworICAgIH0KKyAgICBpZiAocmkucmVxdWVzdCA9PSBUSU9DQ0xPU0UpCisgICAgICBy ZXR1cm4oMSk7CisgICAgZWxzZQorICAgICAgcmV0dXJuKDApOworfQorI2VuZGlmIC8qIEhBVkVf UFRZVFJBUCAqLworCitWT0lECitleGVjX2NtZChzKSBjaGFyICogczsgeworICAgIHN0cnVjdCBz dHJpbmdhcnJheSAqIHE7CisgICAgY2hhciAqKiBhcmdzID0gTlVMTDsKKworICAgIGlmICghcykg cmV0dXJuOworICAgIGlmICghKnMpIHJldHVybjsKKworICAgIHEgPSBja3NwbGl0KDEsMCxzLE5V TEwsIlxcJVtdJiQrLS89Kl5fQCF7fS88PnwuI34nYDo7PyIsNywwLDApOworICAgIGlmICghcSkg cmV0dXJuOworCisgICAgYXJncyA9IHEtPmFfaGVhZCArIDE7CisKKyNpZmRlZiBERUJVRyAgICAK KyAgICB7CisJaW50IGksIG47CisJbiA9IHEtPmFfc2l6ZTsKKwlmb3IgKGkgPSAwOyBpIDw9IG47 IGkrKykgeworCSAgICBpZiAoIWFyZ3NbaV0pIHsKKwkJZGVidWcoRjExMSwiZXhlY19jbWQgYXJn IiwiTlVMTCIsaSk7CisJCWJyZWFrOworCSAgICB9IGVsc2UgeworCQlkZWJ1ZyhGMTExLCJleGVj X2NtZCBhcmciLGFyZ3NbaV0saSk7CisJCWlmIChpID09IG4gJiYgYXJnc1tpXSkgeworCQkgICAg ZGVidWcoRjEwMSwiZXhlY19jbWQgU1VCU1RJVFVUSU5HIE5VTEwiLCIiLGkpOworCQkgICAgaWYg KHN0cmxlbihhcmdzW2ldKSA9PSAwKQorCQkgICAgICBtYWtlc3RyKCYoYXJnc1tpXSksTlVMTCk7 CisJCX0KKworCSAgICB9CisJfQkgICAgCisgICAgfQorI2VuZGlmCS8qIERFQlVHICovCisKKyAg ICBleGVjdnAoYXJnc1swXSxhcmdzKTsKK30KKworLyogR2V0IGEgcHR5LCBzY2FuIGlucHV0IGxp bmVzLiAqLworLyogZmMgPSAwIGZvciBpbnRlcmFjdGl2ZSBhY2Nlc3M7IGZjID0gMSBmb3IgcnVu bmluZyBleHRlcm5hbCBwcm90b2NvbHMgKi8KKworc3RhdGljIGludCBwdHlfZmMgPSAtMTsJCQkv KiBHbG9iYWwgY29weSBvZiBmYyAqLworCitpbnQKK2RvX3B0eShmZCwgY21kLCBmYykgaW50ICog ZmQ7IGNoYXIgKiBjbWQ7IGludCBmYzsgeworICAgIGxvbmcgcmV0dmFsOworICAgIGludCBzeW5j cGlwZVsyXTsKKyAgICBpbnQgaSwgdHR5ZmQ7CisjaWZkZWYgSEFWRV9QVFlUUkFQCisgICAgaW50 IHg7CisjZW5kaWYgLyogSEFWRV9QVFlUUkFQICovCisKKyAgICBkZWJ1ZyhGMTAxLCJDS1VQVFku QyBkb19wdHkgZmMiLCIiLGZjKTsKKworICAgIHR0eWZkID0gKmZkOworCisgICAgcHR5X21hc3Rl cl9mZCA9IC0yOworICAgIHB0eV9zbGF2ZV9mZCA9IC0yOworICAgIHB0eV9mb3JrX3BpZCA9IC0y OworCisgICAgbXNnID0gMDsJCQkJLyogTWVzc2FnZSBjb3VudGVyICovCisgICAgcHR5X2luaXQo KTsJCQkJLyogRmluZCBhbiBhdmFpbGFibGUgcHR5IHRvIHVzZS4gKi8KKyAgICBlcnJubyA9IDA7 CisKKyAgICBpZiAoKHJldHZhbCA9IHB0eV9nZXRwdHkoJnR0eWZkLCBYbGluZSwgMjApKSAhPSAw KSB7CisJaWYgKG1zZysrID09IDApCisJICBwZXJyb3IoWGxpbmUpOworICAgICAgICBkZWJ1ZyhG MTExLCJkb19wdHkoKSIsInB0eV9nZXRwdHkoKSBmYWlscyIscmV0dmFsKTsKKwkqZmQgPSB0dHlm ZDsKKyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9CisgICAgKmZkID0gdHR5ZmQ7CisgICAgZGVi dWcoRjExMSwiZG9fcHR5KCkgWGxpbmUiLFhsaW5lLHR0eWZkKTsKKworI2lmZGVmIFNJR1RUT1UK Ky8qCisgIElnbm9yaW5nIFNJR1RUT1Uga2VlcHMgdGhlIGtlcm5lbCBmcm9tIGJsb2NraW5nIHVz LiAgd2UgdHdlYWsgdGhlIHR0eSB3aXRoCisgIGFuIGlvY3RsKCkgKGluIHR0aW9jdCgpIGluIC9z eXMvdHR5LmMgaW4gYSBCU0Qga2VybmVsKQorKi8KKyAgICAgc2lnbmFsKFNJR1RUT1UsIFNJR19J R04pOworI2VuZGlmIC8qIFNJR1RUT1UgKi8KKworLyogU3RhcnQgdXAgdGhlIGNvbW1hbmQgb24g dGhlIHNsYXZlIHNpZGUgb2YgdGhlIHRlcm1pbmFsICovCisKKyAgICBpZiAocGlwZShzeW5jcGlw ZSkgPCAwKSB7CisgICAgICAgIGRlYnVnKEYxMTAsImRvX3B0eSgpIiwicGlwZSgpIGZhaWxzIiww KTsKKwlwZXJyb3IoInBpcGUoKSBmYWlsZWQiKTsKKwltc2crKzsKKyAgICAgICAgZGVidWcoRjEx MSwiZG9fcHR5KCkiLCJwaXBlIGZhaWxzIixlcnJubyk7CisgICAgICAgIHJldHVybigtMSk7Cisg ICAgfQorICAgIGlmICgoaSA9IGZvcmsoKSkgPCAwKSB7CisgICAgICAgIC8qIFhYWCAtIG5lZWQg dG8gY2xlYW4gdXAgdGhlIGFsbG9jYXRlZCBwdHkgKi8KKyAgICAgICAgcGVycm9yKCJmb3JrKCkg ZmFpbGVkIik7CisJbXNnKys7CisgICAgICAgIGRlYnVnKEYxMTEsImRvX3B0eSgpIiwiZm9yayBm YWlscyIsZXJybm8pOworICAgICAgICByZXR1cm4oLTEpOworICAgIH0KKyAgICBpZiAoaSkgeyAg LyogV2FpdCBmb3IgY2hpbGQgYmVmb3JlIHdyaXRpbmcgdG8gcGFyZW50IHNpZGUgb2YgcHR5LiAq LworICAgICAgICBjaGFyIGM7CisjaWZkZWYgSEFWRV9QVFlUUkFQCisgICAgICAgIGludCBvbiA9 IDE7CisjZW5kaWYgLyogSEFWRV9QVFlUUkFQICovCisJY2xvc2Uoc3luY3BpcGVbMV0pOworCWVy cm5vID0gMDsKKyAgICAgICAgaWYgKHJlYWQoc3luY3BpcGVbMF0sICZjLCAxKSA9PSAwKSB7IC8q IFNsYXZlIHNpZGUgZGllZCAqLworCSAgICBwZXJyb3IoIlBpcGUgcmVhZCgpIGZhaWxlZCIpOwor CSAgICBtc2crKzsKKyAgICAgICAgICAgIGRlYnVnKEYxMTAsImRvX3B0eSgpIiwiU2xhdmUgZmFp bHMgdG8gaW5pdGlhbGl6ZSIsMCk7CisgICAgICAgICAgICBjbG9zZShzeW5jcGlwZVswXSk7Cisg ICAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICB9CisgICAgICAgIHB0eV9mb3JrX3BpZCA9 IGk7CQkvKiBTbyB3ZSBjYW4gY2xlYW4gaXQgdXAgbGF0ZXIgKi8KKwlwdHlfZm9ya19hY3RpdmUg PSAxOworCWRlYnVnKEYxMDEsImRvX3B0eSBwdHlfZm9ya19waWQiLCIiLHB0eV9mb3JrX3BpZCk7 CisjaWZkZWYgSEFWRV9QVFlUUkFQCisgICAgICAgIC8qIEhQVVggZG9lcyBub3QgYWxsb3cgdGhl IG1hc3RlciB0byByZWFkIGVuZCBvZiBmaWxlLiAgKi8KKyAgICAgICAgLyogVGhlcmVmb3JlLCB3 ZSBtdXN0IGRldGVybWluZSB0aGF0IHRoZSBzbGF2ZSBoYXMgYmVlbiAqLworICAgICAgICAvKiBj bG9zZWQgYnkgdHJhcHBpbmcgdGhlIGNhbGwgdG8gY2xvc2UoKS4gICAgICAgICAgICAgICovCisJ ZXJybm8gPSAwOworCXggPSBpb2N0bCh0dHlmZCwgVElPQ1RSQVAsIChjaGFyICopJm9uKTsKKwlk ZWJ1ZyhGMTExLCJkb19wdHkgaW9jdGwoVElPQ1RSQVApIixja2l0b2EoeCksZXJybm8pOworI2Vu ZGlmIC8qIEhBVkVfUFRZVFJBUCAqLworICAgICAgICBkZWJ1ZyhGMTExLCJkb19wdHkoKSIsInN5 bmNocm9uaXplZCAtIHB0eV9mb3JrX3BpZCIscHR5X2ZvcmtfcGlkKTsKKyAgICAgICAgY2xvc2Uo c3luY3BpcGVbMF0pOworICAgIH0gZWxzZSB7CisJaW50IHg7CisJZGVidWcoRjEwMSwiZG9fcHR5 IGdldHB0eXNsYXZlIHR0eWZkIEEiLCIiLHR0eWZkKTsKKyAgICAgICAgZGVidWcoRjExMCwiZG9f cHR5KCkiLCJTbGF2ZSBzdGFydHMiLDApOworCXggPSBnZXRwdHlzbGF2ZSgmdHR5ZmQsZmMpOwor CWRlYnVnKEYxMDEsImRvX3B0eSBnZXRwdHlzbGF2ZSIsIiIseCk7CisgICAgICAgIGlmICh4ID09 IDApIHsKKwkgICAgZGVidWcoRjEwMSwiZG9fcHR5IGdldHB0eXNsYXZlIHR0eWZkIEIiLCIiLHR0 eWZkKTsKKyNpZmRlZiBXQU5UX1VUTVAKKyAgICAgICAgICAgIHB0eV91cGRhdGVfdXRtcChQVFlf VVNFUl9QUk9DRVNTLAorCQkJICAgIGdldHBpZCgpLAorCQkJICAgICJLRVJNSVQiLAorCQkJICAg IFhsaW5lLAorCQkJICAgIGNtZCwKKwkJCSAgICBQVFlfVFRZU0xPVF9VU0FCTEUKKwkJCSAgICAp OworI2VuZGlmIC8qIFdBTlRfVVRNUCAqLworICAgICAgICAgICAgLyogTm90aWZ5IG91ciBwYXJl bnQgd2UncmUgcmVhZHkgdG8gY29udGludWUuKi8KKyAgICAgICAgICAgIGRlYnVnKEYxMTAsImRv X3B0eSgpIiwic2xhdmUgc3luY2hyb25pemluZyIsMCk7CisgICAgICAgICAgICB3cml0ZShzeW5j cGlwZVsxXSwieSIsMSk7CisgICAgICAgICAgICBjbG9zZShzeW5jcGlwZVswXSk7CisgICAgICAg ICAgICBjbG9zZShzeW5jcGlwZVsxXSk7CisKKwkgICAgZGVidWcoRjExMCwiZG9fcHR5IGNtZCIs Y21kLCIiKTsKKyAgICAgICAgICAgIGV4ZWNfY21kKGNtZCk7CisgICAgICAgICAgICBkZWJ1ZyhG MTExLCJkb19wdHkoKSIsImV4ZWNfY21kKCkgcmV0dXJucyAtIHdoeT8iLGVycm5vKTsKKyAgICAg ICAgfQorCSpmZCA9IHR0eWZkOworICAgICAgICBkZWJ1ZyhGMTEwLCJkb19wdHkoKSIsImdldHB0 eXNsYXZlKCkgZmFpbHMgLSBleGl0aW5nIiwwKTsKKyAgICAgICAgZXhpdCgxKTsKKyAgICB9Cisg ICAgKmZkID0gdHR5ZmQ7CisgICAgcHR5X2ZjID0gZmM7CisgICAgcmV0dXJuKGdldHBpZCgpKTsK K30gLyogZW5kIG9mIGRvX3B0eSgpICovCisKKworVk9JRAorZW5kX3B0eSgpIHsKKyAgICBtc2cg PSAwOwkJCQkvKiBNZXNzYWdlIGNvdW50ZXIgKi8KKyAgICBkZWJ1ZyhGMTAxLCJlbmRfcHR5IHB0 eV9mb3JrX3BpZCIsIiIscHR5X2ZvcmtfcGlkKTsKKyAgICBpZiAoWGxpbmVbMF0gJiYgcHR5X2Zv cmtfcGlkID49IDApIHsKKyAgICAgICAgcHR5X2NsZWFudXAoWGxpbmUscHR5X2ZvcmtfcGlkLDEp OworICAgICAgICBYbGluZVswXSA9ICdcMCc7CisgICAgICAgIHB0eV9mb3JrX3BpZCA9IC0xOwor CXB0eV9mb3JrX2FjdGl2ZSA9IDA7CisJZGVidWcoRjEwMSwiZW5kX3B0eSBwdHlfZm9ya19hY3Rp dmUiLCIiLHB0eV9mb3JrX2FjdGl2ZSk7CisgICAgfQorICAgIHB0eV9mYyA9IC0xOworfQorI2Vu ZGlmIC8qIE5FVFBUWSAqLwoKZGlmZiAtLWdpdCBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2Vy bWl0LTkuMC4zMDIvY2t1cHR5LmMuYzk5IGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQt OS4wLjMwMi9ja3VwdHkuYy5jOTkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u OTkwNjU1NQotLS0gL2Rldi9udWxsCisrKyBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0 LTkuMC4zMDIvY2t1cHR5LmMuYzk5CkBAIC0wLDAgKzEsMTk3OSBAQAorY2hhciAqY2twdHl2ID0g IlBzZXVkb3Rlcm1pbmFsIHN1cHBvcnQsIDkuMC4xMDEsIDEzIEp1biAyMDExIjsKKworLyogIEMg SyBVIFAgVCBZICAtLSAgQy1LZXJtaXQgcHNldWRvdGVybWluYWwgY29udHJvbCBmdW5jdGlvbnMg Zm9yIFVOSVggICovCisKKy8qIExhc3QgdXBkYXRlOiBNb24gSnVuIDEzIDExOjMyOjUyIDIwMTEg Ki8KKworLyoKKyAgQ29weXJpZ2h0IDE5OTUgYnkgdGhlIE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRl IG9mIFRlY2hub2xvZ3kuCisKKyAgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5k IGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzCisgIGRvY3VtZW50YXRpb24gZm9yIGFu eSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQKKyAg dGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQg dGhhdCBib3RoIHRoYXQKKyAgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5v dGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZworICBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUg bmFtZSBvZiBNLkkuVC4gbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IKKyAgcHVibGljaXR5 IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp ZmljLAorICB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uICBGdXJ0aGVybW9yZSBpZiB5b3UgbW9k aWZ5IHRoaXMgc29mdHdhcmUgeW91IG11c3QKKyAgbGFiZWwgeW91ciBzb2Z0d2FyZSBhcyBtb2Rp ZmllZCBzb2Z0d2FyZSBhbmQgbm90IGRpc3RyaWJ1dGUgaXQgaW4gc3VjaCBhCisgIGZhc2hpb24g dGhhdCBpdCBtaWdodCBiZSBjb25mdXNlZCB3aXRoIHRoZSBvcmlnaW5hbCBNLkkuVC4gc29mdHdh cmUuCisgIE0uSS5ULiBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmls aXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yCisgIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQg ImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKworICBNb2RpZmll ZCBmb3IgdXNlIGluIEMtS2VybWl0LCBhbmQgbmV3IG1hdGVyaWFsIGFkZGVkLCBieToKKworICBK ZWZmcmV5IEFsdG1hbiA8amFsdG1hbkBzZWN1cmUtZW5kcG9pbnRzLmNvbT4KKyAgU2VjdXJlIEVu ZHBvaW50cyBJbmMuLCBOZXcgWW9yayBDaXR5CisgIE5vdmVtYmVyIDE5OTkKKworICBQYXJhbWV0 ZXJpemVkIGZvciBwdHkgZmlsZSBkZXNjcmlwdG9yIGFuZCBmdW5jdGlvbiBjb2RlLAorICBGcmFu ayBkYSBDcnV6LCBDb2x1bWJpYSBVbml2ZXJzaXR5LCBOZXcgWW9yayBDaXR5CisgIERlYyAyMDA2 IC0gU2VwIDIwMDkKKyovCisKKy8qCisgIEJ1aWx0IGFuZCB0ZXN0ZWQgc3VjY2Vzc3VsbHkgb246 CisgICAuIDQuNEJTRCwgaW5jbHVkaW5nIEJTREkvT1MsIE5ldEJTRCwgRnJlZUJTRCwgT3BlbkJT RCwgTWFjIE9TIFgKKyAgIC4gQUlYIDQuMSBhbmQgbGF0ZXIKKyAgIC4gREcvVVggNS40UjQuMTEK KyAgIC4gRGlnaXRhbCBVTklYIDMuMiBhbmQgNC4wCisgICAuIEhQLVVYIDkuMDAgYW5kIGxhdGVy CisgICAuIElSSVggNi4wIGFuZCBsYXRlcgorICAgLiBMaW51eAorICAgLiBNYWMgT1MgWCAxMC40 CisgICAuIE5lWFRTVEVQIDMueAorICAgLiBPcGVuQlNECisgICAuIFFOWCA0LjI1IChleGNlcHQg UFRZIHByb2Nlc3MgdGVybWluYXRpb24gbm90IGRldGVjdGVkKQorICAgLiBTQ08gT1NSNS4wLjUK KyAgIC4gU0NPIFVuaXh3YXJlIDcKKyAgIC4gU0lOSVggNS40MgorICAgLiBTb2xhcmlzIDIueCBh bmQgNworICAgLiBTdW5PUyA0LjEuMworCisgIEZhaWx1cmVzIGluY2x1ZGU6CisgICAuIFNDTyBV TklYIDMuMnY0LjIgKGNvbXBpbGUgZmFpbHMgd2l0aCBzeW50YXggZXJyb3IgaW4gPG1lbW9yeS5o PikKKyAgIC4gSFAtVVggOC4wMCBhbmQgZWFybGllciAobm8gdmhhbmd1cCBvciBwdHNuYW1lIHJv dXRpbmVzKQorKi8KKworI2luY2x1ZGUgImNrY3N5bS5oIgorI2luY2x1ZGUgImNrY2RlYi5oIgkJ CS8qIFRvIHBpY2sgdXAgTkVUUFRZIGRlZmluaXRpb24gKi8KKworI2lmbmRlZiBORVRQVFkJCQkJ LyogU2VsZWN0b3IgZm9yIFBUWSBzdXBwb3J0ICovCisKK2NoYXIgKiBwdHl2ZXIgPSAiTm8gUFRZ IHN1cHBvcnQiOworCisjZWxzZSAgLyogKHJlc3Qgb2YgdGhpcyBtb2R1bGUuLi4pICovCisKK2No YXIgKiBwdHl2ZXIgPSAiUFRZIHN1cHBvcnQgOC4wLjAxNiwgMjIgQXVnIDIwMDciOworCisvKiBU aGVzZSB3aWxsIG5vIGRvdWJ0IG5lZWQgYWRqdXN0bWVudC4uLiAqLworCisjaWZuZGVmIE5FWFQK KyNkZWZpbmUgSEFWRV9TRVRTSUQKKyNlbmRpZiAvKiBORVhUICovCisjZGVmaW5lIEhBVkVfS0lM TFBHCisjZGVmaW5lIEhBVkVfVFRZTkFNRQorI2RlZmluZSBIQVZFX1dBSVRQSUQKKworI2lmZGVm IFNVTk9TNDEKKyNkZWZpbmUgQlNENDRPUlBPU0lYCisjZW5kaWYJLyogU1VOT1M0MSAqLworCisj aWZuZGVmIFVTRV9URVJNSU8KKyNpZmRlZiBMSU5VWAorI2RlZmluZSBVU0VfVEVSTUlPCisjZWxz ZQorI2lmZGVmIEFUVFNWCisjZGVmaW5lIFVTRV9URVJNSU8KKyNlbHNlCisjaWZkZWYgSFBVWAor I2RlZmluZSBVU0VfVEVSTUlPCisjZWxzZQorI2lmZGVmIEFJWAorI2RlZmluZSBVU0VfVEVSTUlP CisjZWxzZQorI2lmZGVmIEJTRDQ0T1JQT1NJWAorI2RlZmluZSBVU0VfVEVSTUlPCisjZWxzZQor I2lmZGVmIElSSVg2MAorI2RlZmluZSBVU0VfVEVSTUlPCisjZWxzZQorI2lmZGVmIFFOWAorI2Rl ZmluZSBVU0VfVEVSTUlPCisjZW5kaWYgLyogUU5YICovCisjZW5kaWYgLyogSVJJWDYwICovCisj ZW5kaWYgLyogQlNENDRPUlBPU0lYICovCisjZW5kaWYgLyogQUlYICovCisjZW5kaWYgLyogSFBV WCAqLworI2VuZGlmIC8qIEFUVFNWICovCisjZW5kaWYgLyogTElOVVggKi8KKyNlbmRpZiAvKiBV U0VfVEVSTUlPICovCisKKyNpZmRlZiBRTlgKKyNpbmNsdWRlIDxmY250bC5oPgorI2VuZGlmIC8q IFFOWCAqLworCisjaWZkZWYgVVNFX1RFUk1JTworI2RlZmluZSBQT1NJWF9URVJNSU9TCQkJLyog U2VlbXMgdG8gYmUgYSBtaXNub21lciAqLworI2VuZGlmIC8qIFVTRV9URVJNSU8gKi8KKworI2lm ZGVmIE5FWFQKKyNpZm5kZWYgR0VUUEdSUF9PTkVBUkcKKyNkZWZpbmUgR0VUUEdSUF9PTkVBUkcK KyNlbmRpZiAvKiBHRVRQR1JQX09ORUFSRyAqLworI2VuZGlmIC8qIE5FWFQgKi8KKworI2lmZGVm IFdBTlRfVVRNUAkJCS8qIFNlZSBja3VwdHkuaCAqLworLyoKKyAgV0FOVF9VVE1QIGlzIG5vdCBk ZWZpbmVkIGJlY2F1c2UgKGEpIHRoZSB1dG1wL3d0bXAganVuayBpcyB0aGUgbW9zdAorICBub25w b3J0YWJsZSBwYXJ0IG9mIHRoaXMgbW9kdWxlLCBhbmQgKGIpIHdlJ3JlIG5vdCBsb2dnaW5nIGFu eWJvZHkKKyAgaW4sIHdlJ3JlIGp1c3QgcnVubmluZyBhIHByb2Nlc3MsIGFuZCBkb24ndCBuZWVk IHRvIHdyaXRlIHV0bXAvd3RtcCByZWNvcmRzLgorKi8KKyNpZm5kZWYgSEFWRV9TRVRVVFhFTlQJ CQkvKiBXaG8gaGFzIDx1dG1weC5oPiAqLworI2lmZGVmIFNPTEFSSVMKKyNkZWZpbmUgSEFWRV9T RVRVVFhFTlQKKyNlbHNlCisjaWZkZWYgSVJJWDYwCisjZGVmaW5lIEhBVkVfU0VUVVRYRU5UCisj ZWxzZQorI2lmZGVmIENLX1NDT1Y1CisjZGVmaW5lIEhBVkVfU0VUVVRYRU5UCisjZWxzZQorI2lm ZGVmIEhQVVgxMAorI2RlZmluZSBIQVZFX1NFVFVUWEVOVAorI2Vsc2UKKyNpZmRlZiBVTklYV0FS RQorI2RlZmluZSBIQVZFX1NFVFVUWEVOVAorI2Vsc2UKKyNpZmRlZiBJUklYNjAKKyNkZWZpbmUg SEFWRV9TRVRVVFhFTlQKKyNlbmRpZiAvKiBJUklYNjAgKi8KKyNlbmRpZiAvKiBVTklYV0FSRSAq LworI2VuZGlmIC8qIEhQVVgxMCAqLworI2VuZGlmIC8qIENLX1NDT1Y1ICovCisjZW5kaWYgLyog SVJJWDYwICovCisjZW5kaWYgLyogU09MQVJJUyAqLworI2VuZGlmIC8qIEhBVkVfU0VUVVRYRU5U ICovCisKKyNpZm5kZWYgSEFWRV9VVEhPU1QJCQkvKiBEb2VzIHV0bXAgaW5jbHVkZSB1dF9ob3N0 W10/ICovCisjaWZkZWYgSEFWRV9TRVRVVFhFTlQJCQkvKiB1dG1weCBhbHdheXMgZG9lcyAqLwor I2RlZmluZSBIQVZFX1VUSE9TVAorI2Vsc2UKKyNpZmRlZiBMSU5VWAkJCQkvKiBMaW51eCBkb2Vz ICovCisjZGVmaW5lIEhBVkVfVVRIT1NUCisjZWxzZQorI2lmZGVmIFNVTk9TNAkJCQkvKiBTdW5P UyBkb2VzICovCisjZGVmaW5lIEhBVkVfVVRIT1NUCisjZWxzZQorI2lmZGVmIEFJWDQxCQkJCS8q IEFJWCA0LjEgYW5kIGxhdGVyIGRvICovCisjZGVmaW5lIEhBVkVfVVRIT1NUCisjZW5kaWYgLyog QUlYNDEgKi8KKyNlbmRpZiAvKiBTVU5PUzQgKi8KKyNlbmRpZiAvKiBMSU5VWCAqLworI2VuZGlm IC8qIEhBVkVfU0VUVVRYRU5UICovCisjZW5kaWYgLyogSEFWRV9VVEhPU1QgKi8KKworI2lmbmRl ZiBIQVZFX1VUX0hPU1QKKyNpZm5kZWYgTk9fVVRfSE9TVAorI2RlZmluZSBOT19VVF9IT1NUCisj ZW5kaWYgLyogTk9fVVRfSE9TVCAqLworI2VuZGlmIC8qIEhBVkVfVVRfSE9TVCAqLworCisjZW5k aWYgLyogV0FOVF9VVE1QICovCisKKyNpZmRlZiBMSU5VWAorI2RlZmluZSBDS19WSEFOR1VQCisj ZGVmaW5lIEhBVkVfU1lTX1NFTEVDVF9ICisjZGVmaW5lIEhBVkVfR0VUVVRFTlQKKyNkZWZpbmUg SEFWRV9TRVRVVEVOVAorI2RlZmluZSBIQVZFX1VQRFdUTVAKKyNlbmRpZiAvKiBMSU5VWCAqLwor CisjaWZkZWYgSFBVWDEwCisjZGVmaW5lIENLX1ZIQU5HVVAKKyNkZWZpbmUgVkhBTkdfRklSU1QK KyNkZWZpbmUgSEFWRV9QVFNOQU1FCisjaWZuZGVmIEhBVkVfUFRZVFJBUAorI2RlZmluZSBIQVZF X1BUWVRSQVAKKyNlbmRpZiAvKiBIQVZFX1BUWVRSQVAgKi8KKyNlbHNlCisjaWZkZWYgSFBVWDkK KyNkZWZpbmUgQ0tfVkhBTkdVUAorI2RlZmluZSBWSEFOR19GSVJTVAorI2RlZmluZSBIQVZFX1BU U05BTUUKKyNpZm5kZWYgSEFWRV9QVFlUUkFQCisjZGVmaW5lIEhBVkVfUFRZVFJBUAorI2VuZGlm IC8qIEhBVkVfUFRZVFJBUCAqLworI2VuZGlmIC8qIEhQVVg5ICovCisjZW5kaWYgLyogSFBVWDEw ICovCisKKyNpZmRlZiBTVU5PUzQKKyNkZWZpbmUgQ0tfVkhBTkdVUAorI2RlZmluZSBOT19VVF9Q SUQKKyNkZWZpbmUgVkhBTkdfRklSU1QKKyNlbmRpZiAvKiBTVU5PUzQgKi8KKworI2lmZGVmIElS SVg2MAorI2RlZmluZSBDS19WSEFOR1VQCisjZGVmaW5lIEhBVkVfX0dFVFBUWQorI2VuZGlmIC8q IElSSVg2MCAqLworCisjaWZkZWYgU0lOSVgKKyNkZWZpbmUgSEFWRV9TVFJFQU1TCisjZGVmaW5l IEhBVkVfR1JBTlRQVAorI2RlZmluZSBIQVZFX1BUU05BTUUKKyNkZWZpbmUgUFVTSF9QVEVNCisj ZGVmaW5lIFBVU0hfTERURVJNCisjZGVmaW5lIFBVU0hfVFRDT01QQVQKKyNlbmRpZiAvKiBTSU5J WCAqLworCisjaWZkZWYgdWx0cml4CisjZGVmaW5lIE1VU1RfU0VUUEdSUAorI2VuZGlmIC8qIHVs dHJpeCAqLworCisjaWZkZWYgUU5YCisjZGVmaW5lIE1VU1RfU0VUUEdSUAorI2RlZmluZSBOT19E RVZUVFkKKyNkZWZpbmUgSU5JVF9TUFRZCisjZW5kaWYgLyogUU5YICovCisKKyNpZmRlZiBMSU5V WAorI2lmZGVmIEhBVkVfUFRNWAorI2RlZmluZSBIQVZFX0dSQU5UUFQKKyNkZWZpbmUgSEFWRV9Q VFNOQU1FCisjZW5kaWYgLyogSEFWRV9QVE1YICovCisjZWxzZQorI2lmZGVmIEhBVkVfU1RSRUFN UworI2RlZmluZSBIQVZFX1BUTVgKKyNlbmRpZiAvKiBIQVZFX1NUUkVBTVMgKi8KKyNlbmRpZiAv KiBMSU5VWCAqLworCisjaW5jbHVkZSAiY2t1cHR5LmgiCisKKyNpZmRlZiBQVFlOT0JMT0NLCisj aWZuZGVmIE9fTkRFTEFZCisjaWZkZWYgT19OT05CTE9DSworI2RlZmluZSBPX05ERUxBWSBPX05P TkJMT0NLCisjZW5kaWYgLyogT19OT05CTE9DSyAqLworI2VuZGlmIC8qIE9fTkRFTEFZICovCisj ZWxzZSAvKiBQVFlOT0JMT0NLICovCisjaWZkZWYgT19OREVMQVkKKyN1bmRlZiBPX05ERUxBWQor I2VuZGlmIC8qIE9fTkRFTEFZICovCisjZGVmaW5lIE9fTkRFTEFZIDAKKyNlbmRpZiAvKiBQVFlO T0JMT0NLICovCisKKyNpZm5kZWYgT05MQ1IKKyNkZWZpbmUgT05MQ1IgMAorI2VuZGlmIC8qIE9O TENSICovCisKKyNpZmRlZiBDS19XQUlUX0gKKyNpbmNsdWRlIDxzeXMvd2FpdC5oPgorI2VuZGlm IC8qIENLX1dBSVRfSCAqLworCisjaWZkZWYgU1RSRUFNU1BUWQorI2lmbmRlZiBJTklUX1NQVFkK KyNkZWZpbmUgSU5JVF9TUFRZCisjZW5kaWYgLyogSU5JVF9TUFRZICovCisKKyNpbmNsdWRlIDxz eXMvc3RyZWFtLmg+CisjaW5jbHVkZSA8c3Ryb3B0cy5oPgorI2luY2x1ZGUgPHRlcm1pby5oPgor CisvKiBNYWtlIHN1cmUgd2UgZG9uJ3QgZ2V0IHRoZSBCU0QgdmVyc2lvbiAqLworCisjaWZkZWYg SEFWRV9TWVNfVFRZX0gKKyNpbmNsdWRlICIvdXNyL2luY2x1ZGUvc3lzL3R0eS5oIgorI2VuZGlm IC8qIEhBVkVfU1lTX1RUWV9IICovCisKKyNpZmRlZiBIQVNfUFRZVkFSCQkJLyogV2hlcmUgaXMg dGhpcyBzZXQ/ICovCisKKyNpbmNsdWRlIDxzeXMvcHR5dmFyLmg+CisKKyNlbHNlIC8qIEhBU19Q VFlWQVIgKi8KKworI2lmbmRlZiBUSU9DUEtUX0ZMVVNIV1JJVEUKKyNkZWZpbmUgVElPQ1BLVF9G TFVTSFdSSVRFIDB4MDIKKyNkZWZpbmUgVElPQ1BLVF9OT1NUT1AgICAgIDB4MTAKKyNkZWZpbmUg VElPQ1BLVF9ET1NUT1AgICAgIDB4MjAKKyNkZWZpbmUgVElPQ1BLVF9JT0NUTCAgICAgIDB4NDAK KyNlbmRpZiAvKiBUSU9DUEtUX0ZMVVNIV1JJVEUgKi8KKworI2VuZGlmIC8qIEhBU19QVFlWQVIg Ki8KKworI2lmZGVmIEhBVkVfVFRZX0gKKyNpbmNsdWRlIDx0dHkuaD4KKyNlbmRpZiAvKiBIQVZF X1RUWV9IICovCisKKy8qCisgIEJlY2F1c2Ugb2YgdGhlIHdheSBwdHlpYnVmIGlzIHVzZWQgd2l0 aCBzdHJlYW1zIG1lc3NhZ2VzLCB3ZSBuZWVkCisgIHB0eWlidWYrMSB0byBiZSBvbiBhIGZ1bGwt d29yZCBib3VuZGFyeS4gIFRoZSBmb2xsb3dpbmcgd2VpcmRuZXNzCisgIGlzIHNpbXBseSB0byBt YWtlIHRoYXQgaGFwcGVuLgorKi8KK2xvbmcgcHR5aWJ1ZmJ1ZltCVUZTSVovc2l6ZW9mKGxvbmcp KzFdOworY2hhciAqcHR5aWJ1ZiA9ICgoY2hhciAqKSZwdHlpYnVmYnVmWzFdKS0xOworY2hhciAq cHR5aXAgPSAoKGNoYXIgKikmcHR5aWJ1ZmJ1ZlsxXSktMTsKK2NoYXIgcHR5aWJ1ZjJbQlVGU0la XTsKK3Vuc2lnbmVkIGNoYXIgY3RsYnVmW0JVRlNJWl07CitzdHJ1Y3Qgc3RyYnVmIHN0cmJ1ZmMs IHN0cmJ1ZmQ7CisKK2ludCByZWFkc3RyZWFtKCk7CisKKyNlbHNlICAvKiAhIFNUUkVBTVNQVFkg Ki8KKworLyogSS9PIGRhdGEgYnVmZmVycywgcG9pbnRlcnMsIGFuZCBjb3VudGVycy4gKi8KKwor Y2hhciBwdHlpYnVmW0JVRlNJWl0sICpwdHlpcCA9IHB0eWlidWY7CitjaGFyIHB0eWlidWYyW0JV RlNJWl07CisKKyNlbmRpZiAvKiAhIFNUUkVBTVNQVFkgKi8KKworI2lmbmRlZiBVU0VfVEVSTUlP CitzdHJ1Y3QgdGVybWJ1ZiB7CisgICAgc3RydWN0IHNndHR5YiBzZzsKKyAgICBzdHJ1Y3QgdGNo YXJzIHRjOworICAgIHN0cnVjdCBsdGNoYXJzIGx0YzsKKyAgICBpbnQgc3RhdGU7CisgICAgaW50 IGxmbGFnczsKK30gdGVybWJ1ZiwgdGVybWJ1ZjI7CisKKyNkZWZpbmUgY2ZzZXRvc3BlZWQodHAs dmFsKSAodHApLT5zZy5zZ19vc3BlZWQgPSAodmFsKQorI2RlZmluZSBjZnNldGlzcGVlZCh0cCx2 YWwpICh0cCktPnNnLnNnX2lzcGVlZCA9ICh2YWwpCisjZGVmaW5lIGNmZ2V0b3NwZWVkKHRwKSAg ICAgKHRwKS0+c2cuc2dfb3NwZWVkCisjZGVmaW5lIGNmZ2V0aXNwZWVkKHRwKSAgICAgKHRwKS0+ c2cuc2dfaXNwZWVkCisKKyNlbHNlICAvKiBVU0VfVEVSTUlPICovCisKKyNpZmRlZiBTWVNWX1RF Uk1JTworI2RlZmluZSB0ZXJtaW9zIHRlcm1pbworI2VuZGlmIC8qIFNZU1ZfVEVSTUlPICovCisK KyNpZm5kZWYgVENTQU5PVworCisjaWZkZWYgVENTRVRTCisKKyNkZWZpbmUgVENTQU5PVyBUQ1NF VFMKKyNkZWZpbmUgVENTQURSQUlOIFRDU0VUU1cKKyNkZWZpbmUgdGNnZXRhdHRyKGYsIHQpIGlv Y3RsKGYsIFRDR0VUUywgKGNoYXIgKil0KQorCisjZWxzZSAvKiBUQ1NFVFMgKi8KKworI2lmZGVm IFRDU0VUQQorI2RlZmluZSBUQ1NBTk9XIFRDU0VUQQorI2RlZmluZSBUQ1NBRFJBSU4gVENTRVRB VworI2RlZmluZSB0Y2dldGF0dHIoZix0KSBpb2N0bChmLFRDR0VUQSwoY2hhciAqKXQpCisjZWxz ZSAvKiBUQ1NFVEEgKi8KKyNkZWZpbmUgVENTQU5PVyBUSU9DU0VUQQorI2RlZmluZSBUQ1NBRFJB SU4gVElPQ1NFVEFXCisjZGVmaW5lIHRjZ2V0YXR0cihmLHQpIGlvY3RsKGYsVElPQ0dFVEEsKGNo YXIgKil0KQorI2VuZGlmIC8qIFRDU0VUQSAqLworCisjZW5kaWYgLyogVENTRVRTICovCisKKyNk ZWZpbmUgdGNzZXRhdHRyKGYsYSx0KSBpb2N0bChmLGEsdCkKKyNkZWZpbmUgY2ZzZXRvc3BlZWQo dHAsdmFsKSAodHApLT5jX2NmbGFnICY9IH5DQkFVRDsodHApLT5jX2NmbGFnfD0odmFsKQorI2Rl ZmluZSBjZmdldG9zcGVlZCh0cCkgKCh0cCktPmNfY2ZsYWcgJiBDQkFVRCkKKworI2lmZGVmIENJ QkFVRAorI2RlZmluZSBjZnNldGlzcGVlZCh0cCx2YWwpIFwKKyAodHApLT5jX2NmbGFnICY9IH5D SUJBVUQ7ICh0cCktPmNfY2ZsYWcgfD0gKCh2YWwpPDxJQlNISUZUKQorI2RlZmluZSBjZmdldGlz cGVlZCh0cCkgKCgodHApLT5jX2NmbGFnICYgQ0lCQVVEKT4+SUJTSElGVCkKKyNlbHNlIC8qIENJ QkFVRCAqLworI2RlZmluZSBjZnNldGlzcGVlZCh0cCx2YWwpICh0cCktPmNfY2ZsYWcgJj0gfkNC QVVEOyAodHApLT5jX2NmbGFnfD0odmFsKQorI2RlZmluZSBjZmdldGlzcGVlZCh0cCkgKCh0cCkt PmNfY2ZsYWcgJiBDQkFVRCkKKyNlbmRpZiAvKiBDSUJBVUQgKi8KKworI2VuZGlmIC8qIFRDU0FO T1cgKi8KKworc3RydWN0IHRlcm1pb3MgdGVybWJ1ZiwgdGVybWJ1ZjI7ICAgICAgIC8qIHB0eSBj b250cm9sIHN0cnVjdHVyZSAqLworCisjaWZkZWYgSU5JVF9TUFRZCitzdGF0aWMgaW50IHNwdHkg PSAtMTsKKyNlbmRpZiAvKiBJTklUX1NQVFkgKi8KKworI2VuZGlmIC8qIFVTRV9URVJNSU8gKi8K KworI2lmZGVmIFFOWAkJCQkvKiAyOTkgKi8KKyNpZm5kZWYgSVhBTlkKKyNkZWZpbmUgSVhBTlkg MAorI2VuZGlmCS8qIElYQU5ZICovCisjZW5kaWYJLyogUU5YICovCisKK3N0YXRpYyBpbnQgbXNn ID0gMDsKKworLyogVmFyaWFibGVzIGF2YWlsYWJsZSB0byBvdGhlciBtb2R1bGVzICovCisKK2lu dCBwdHlfZm9ya19hY3RpdmUgPSAwOwkJLyogcHR5IGZvcmsgaXMgYWN0aXZlICovCitQSURfVCBw dHlfZm9ya19waWQgPSAtMTsJCS8qIHB0eSBmb3JrIHBpZCAqLworaW50IHB0eV9zbGF2ZV9mZCA9 IC0xOwkJCS8qIHB0eSBzbGF2ZSBmaWxlIGRlc2NyaXB0b3IgKi8KK2ludCBwdHlfbWFzdGVyX2Zk ID0gLTE7CQkJLyogcHR5IG1hc3RlciBmaWxlIGRlc2NyaXB0b3IgKi8KKworLyogdGVybWJ1ZiBy b3V0aW5lcyAoYmVnaW4pICovCisvKgorICBpbml0X3Rlcm1idWYoKQorICBjb3B5X3Rlcm1idWYo Y3ApCisgIHNldF90ZXJtYnVmKCkKKworICBUaGVzZSB0aHJlZSByb3V0aW5lcyBhcmUgdXNlZCB0 byBnZXQgYW5kIHNldCB0aGUgInRlcm1idWYiIHN0cnVjdHVyZQorICB0byBhbmQgZnJvbSB0aGUg a2VybmVsLiAgaW5pdF90ZXJtYnVmKCkgZ2V0cyB0aGUgY3VycmVudCBzZXR0aW5ncy4KKyAgY29w eV90ZXJtYnVmKCkgaGFuZHMgaW4gYSBuZXcgInRlcm1idWYiIHRvIHdyaXRlIHRvIHRoZSBrZXJu ZWwsIGFuZAorICBzZXRfdGVybWJ1ZigpIHdyaXRlcyB0aGUgc3RydWN0dXJlIGludG8gdGhlIGtl cm5lbC4KKyovCitWT0lECitpbml0X3Rlcm1idWYoZmQpIGludCBmZDsgeworICAgIGludCB0dHlm ZDsKKyAgICBpbnQgcmMgPSAwOworCisgICAgdHR5ZmQgPSBmZDsKKworI2lmZGVmIEhBVkVfU1RS RUFNUworICAgIGRlYnVnKEYxMDAsImluaXRfdGVybWJ1ZiBIQVZFX1NUUkVBTVMiLCIiLDApOwor I2Vsc2UKKyAgICBkZWJ1ZyhGMTAwLCJpbml0X3Rlcm1idWYgSEFWRV9TVFJFQU1TIE5PVCBERUZJ TkVEIiwiIiwwKTsKKyNlbmRpZgkvKiBIQVZFX1NUUkVBTVMgKi8KKyNpZmRlZiBTVFJFQU1TUFRZ CisgICAgZGVidWcoRjEwMCwiaW5pdF90ZXJtYnVmIFNUUkVBTVNQVFkiLCIiLDApOworI2Vsc2UK KyAgICBkZWJ1ZyhGMTAwLCJpbml0X3Rlcm1idWYgU1RSRUFNU1BUWSBOT1QgREVGSU5FRCIsIiIs MCk7CisjZW5kaWYJLyogU1RSRUFNU1BUWSAqLworI2lmZGVmIElOSVRfU1BUWQorICAgIGRlYnVn KEYxMDAsImluaXRfdGVybWJ1ZiBJTklUX1NQVFkiLCIiLDApOworI2Vsc2UKKyAgICBkZWJ1ZyhG MTAwLCJpbml0X3Rlcm1idWYgSU5JVF9TUFRZIE5PVCBERUZJTkVEIiwiIiwwKTsKKyNlbmRpZgkv KiBJTklUX1NQVFkgKi8KKworICAgIGRlYnVnKEYxMDEsImluaXRfdGVybWJ1ZiB0dHlmZCIsIiIs dHR5ZmQpOworI2lmZGVmIElOSVRfU1BUWQorICAgIGRlYnVnKEYxMDEsImluaXRfdGVybWJ1ZiBz cHR5IiwiIixzcHR5KTsKKyNlbmRpZgkvKiBJTklUX1NQVFkgKi8KKworICAgIG1lbXNldCgmdGVy bWJ1ZiwwLHNpemVvZih0ZXJtYnVmKSk7CisgICAgbWVtc2V0KCZ0ZXJtYnVmMiwwLHNpemVvZih0 ZXJtYnVmMikpOworI2lmbmRlZglVU0VfVEVSTUlPCisgICAgcmMgPSBpb2N0bCh0dHlmZCwgVElP Q0dFVFAsIChjaGFyICopJnRlcm1idWYuc2cpOworICAgIHJjIHw9IGlvY3RsKHR0eWZkLCBUSU9D R0VUQywgKGNoYXIgKikmdGVybWJ1Zi50Yyk7CisgICAgcmMgfD0gaW9jdGwodHR5ZmQsIFRJT0NH TFRDLCAoY2hhciAqKSZ0ZXJtYnVmLmx0Yyk7CisjaWZkZWYgVElPQ0dTVEFURQorICAgIHJjIHw9 IGlvY3RsKHR0eWZkLCBUSU9DR1NUQVRFLCAoY2hhciAqKSZ0ZXJtYnVmLnN0YXRlKTsKKyNlbmRp ZiAvKiBUSU9DR1NUQVRFICovCisjZWxzZSAvKiBVU0VfVEVSTUlPICovCisgICAgZXJybm8gPSAw OworI2lmZGVmIElOSVRfU1BUWQorICAgIHJjID0gdGNnZXRhdHRyKHNwdHksICZ0ZXJtYnVmKTsK KyAgICBkZWJ1ZyhGMTExLCJpbml0X3Rlcm1idWYoKSB0Y2dldGF0dHIoc3B0eSkiLGNraXRvYShy YyksZXJybm8pOworI2Vsc2UKKyAgICByYyA9IHRjZ2V0YXR0cih0dHlmZCwgJnRlcm1idWYpOwor ICAgIGRlYnVnKEYxMTEsImluaXRfdGVybWJ1ZigpIHRjZ2V0YXR0cih0dHlmZCkiLGNraXRvYShy YyksZXJybm8pOworI2VuZGlmIC8qIElOSVRfU1BUWSAqLworI2VuZGlmIC8qIFVTRV9URVJNSU8g Ki8KKyAgICBpZiAoIXJjKQorICAgICAgdGVybWJ1ZjIgPSB0ZXJtYnVmOworfQorCisjaWZkZWYg VElPQ1BLVF9JT0NUTAorVk9JRAorY29weV90ZXJtYnVmKGNwLCBsZW4pIGNoYXIgKmNwOyBpbnQg bGVuOyB7CisgICAgaWYgKGxlbiA+IHNpemVvZih0ZXJtYnVmKSkKKyAgICAgIGxlbiA9IHNpemVv Zih0ZXJtYnVmKTsKKyAgICBtZW1jcHkoKGNoYXIgKikmdGVybWJ1ZiwgY3AsIGxlbik7CisgICAg dGVybWJ1ZjIgPSB0ZXJtYnVmOworfQorI2VuZGlmIC8qIFRJT0NQS1RfSU9DVEwgKi8KKworVk9J RAorc2V0X3Rlcm1idWYoZmQpIGludCBmZDsgewkJLyogT25seSBtYWtlIHRoZSBuZWNlc3Nhcnkg Y2hhbmdlcy4gKi8KKyAgICBpbnQgeDsKKyAgICBpbnQgdHR5ZmQ7CisgICAgdHR5ZmQgPSBmZDsK KworICAgIGRlYnVnKEYxMDEsInNldF90ZXJtYnVmIHR0eWZkIiwiIix0dHlmZCk7CisjaWZkZWYg SU5JVF9TUFRZCisgICAgZGVidWcoRjEwMSwic2V0X3Rlcm1idWYgc3B0eSIsIiIsc3B0eSk7Cisj ZW5kaWYJLyogSU5JVF9TUFRZICovCisKKyNpZm5kZWYJVVNFX1RFUk1JTworICAgIGRlYnVnKEYx MDAsInNldF90ZXJtYnVmIFVTRV9URVJNSU8iLCIiLDApOworICAgIGlmIChtZW1jbXAoKGNoYXIg KikmdGVybWJ1Zi5zZywgKGNoYXIgKikmdGVybWJ1ZjIuc2csIHNpemVvZih0ZXJtYnVmLnNnKSkp CisgICAgICBpb2N0bCh0dHlmZCwgVElPQ1NFVE4sIChjaGFyICopJnRlcm1idWYuc2cpOworICAg IGlmIChtZW1jbXAoKGNoYXIgKikmdGVybWJ1Zi50YywgKGNoYXIgKikmdGVybWJ1ZjIudGMsIHNp emVvZih0ZXJtYnVmLnRjKSkpCisgICAgICBpb2N0bCh0dHlmZCwgVElPQ1NFVEMsIChjaGFyICop JnRlcm1idWYudGMpOworICAgIGlmIChtZW1jbXAoKGNoYXIgKikmdGVybWJ1Zi5sdGMsIChjaGFy ICopJnRlcm1idWYyLmx0YywKKwkgICAgICAgc2l6ZW9mKHRlcm1idWYubHRjKSkpCisgICAgICBp b2N0bCh0dHlmZCwgVElPQ1NMVEMsIChjaGFyICopJnRlcm1idWYubHRjKTsKKyAgICBpZiAodGVy bWJ1Zi5sZmxhZ3MgIT0gdGVybWJ1ZjIubGZsYWdzKQorICAgICAgaW9jdGwodHR5ZmQsIFRJT0NM U0VULCAoY2hhciAqKSZ0ZXJtYnVmLmxmbGFncyk7CisjZWxzZSAgLyogVVNFX1RFUk1JTyAqLwor ICAgIHggPSBtZW1jbXAoKGNoYXIgKikmdGVybWJ1ZiwgKGNoYXIgKikmdGVybWJ1ZjIsIHNpemVv Zih0ZXJtYnVmKSk7CisgICAgZGVidWcoRjEwMSwic2V0X3Rlcm1idWYgIVVTRV9URVJNSU8gbWVt Y21wIiwiIix4KTsKKyAgICB4ID0gMTsJCQkJLyogRm9yY2UgdGhpcyAqLworICAgIGlmICh4KSB7 CisJaW50IHg7CisJZXJybm8gPSAwOworI2lmZGVmIElOSVRfU1BUWQorCWRlYnVnKEYxMDAsInNl dF90ZXJtYnVmIElOSVRfU1BUWSIsIiIsMCk7CisJeCA9IHRjc2V0YXR0cihzcHR5LCBUQ1NBTk9X LCAmdGVybWJ1Zik7CisJZGVidWcoRjExMSwic2V0X3Rlcm1idWYgdGNzZXRhdHRyKHNwdHkpIixj a2l0b2EoeCksZXJybm8pOworI2Vsc2UKKwlkZWJ1ZyhGMTAwLCJzZXRfdGVybWJ1ZiAhSU5JVF9T UFRZIiwiIiwwKTsKKwl4ID0gdGNzZXRhdHRyKHR0eWZkLCBUQ1NBTk9XLCAmdGVybWJ1Zik7CisJ ZGVidWcoRjExMSwic2V0X3Rlcm1idWYgdGNzZXRhdHRyKHR0eWZkKSIsY2tpdG9hKHgpLGVycm5v KTsKKyNlbmRpZiAvKiBJTklUX1NQVFkgKi8KKyAgICB9CisjZW5kaWYgLyogVVNFX1RFUk1JTyAq LworfQorLyogdGVybWJ1ZiByb3V0aW5lcyAoZW5kKSAqLworCitWT0lECitwdHlpbnRfdmhhbmd1 cCgpIHsKKyNpZmRlZiBDS19WSEFOR1VQCisjaWZkZWYgQ0tfUE9TSVhfU0lHCisgICAgc3RydWN0 IHNpZ2FjdGlvbiBzYTsKKyAgICAvKiBJbml0aWFsaXplICJzYSIgc3RydWN0dXJlLiAqLworICAg IHNpZ2VtcHR5c2V0KCZzYS5zYV9tYXNrKTsKKyAgICBzYS5zYV9mbGFncyA9IDA7CisgICAgc2Eu c2FfaGFuZGxlciA9IFNJR19JR047CisgICAgc2lnYWN0aW9uKFNJR0hVUCwgJnNhLCAoc3RydWN0 IHNpZ2FjdGlvbiAqKTApOworICAgIHZoYW5ndXAoKTsKKyAgICBzYS5zYV9oYW5kbGVyID0gU0lH X0RGTDsKKyAgICBzaWdhY3Rpb24oU0lHSFVQLCAmc2EsIChzdHJ1Y3Qgc2lnYWN0aW9uICopMCk7 CisjZWxzZSAvKiBDS19QT1NJWF9TSUcgKi8KKyAgICBzaWduYWwoU0lHSFVQLFNJR19JR04pOwor ICAgIHZoYW5ndXAoKTsKKyAgICBzaWduYWwoU0lHSFVQLFNJR19ERkwpOworI2VuZGlmIC8qIENL X1BPU0lYX1NJRyAqLworI2VuZGlmIC8qIENLX1ZIQU5HVVAgKi8KK30KKworLyoKKyAgVGhpcyBy b3V0aW5lIGlzIGNhbGxlZCB0d2ljZS4gIEl0J3Mgbm90IHBhcnRpY3VsYXJseSBpbXBvcnRhbnQg dGhhdCB0aGUKKyAgc2V0c2lkKCkgb3IgVElPQ1NDVFRZIGlvY3RscyBzdWNjZWVkICh0aGV5IG1h eSBub3QgdGhlIHNlY29uZCB0aW1lKSwgYnV0CisgIHJhdGhlciB0aGF0IHdlIGhhdmUgYSBjb250 cm9sbGluZyB0ZXJtaW5hbCBhdCB0aGUgZW5kLiAgSXQgaXMgYXNzdW1lZCB0aGF0CisgIHZoYW5n dXAgZG9lc24ndCBleGlzdCBhbmQgY29uZnVzZSB0aGUgcHJvY2VzcydzIG5vdGlvbiBvZiBjb250 cm9sbGluZworICB0ZXJtaW5hbCBvbiBhbnkgc3lzdGVtIHdpdGhvdXQgVElPQ05PVFRZLiAgVGhh dCBpcywgZWl0aGVyIHZoYW5ndXAoKSBsZWF2ZXMKKyAgdGhlIGNvbnRyb2xsaW5nIHRlcm1pbmFs IGluIHRhY3QsIGJyZWFrcyB0aGUgYXNzb2NpYXRpb24gY29tcGxldGVseSwgb3IgdGhlCisgIHN5 c3RlbSBwcm92aWRlcyBUSU9DTk9UVFkgdG8gZ2V0IHRoaW5ncyBiYWNrIGludG8gYSByZWFzb25h YmxlIHN0YXRlLiAgSW4KKyAgcHJhY3RpY2UsIHZoYW5ndXAoKSBlaXRoZXIgYnJlYWtzIHRoZSBh c3NvY2lhdGlvbiBjb21wbGV0ZWx5IG9yIGRvZXNuJ3QKKyAgZWZmZWN0IGNvbnRyb2xsaW5nIHRl cm1pbmFscywgc28gdGhpcyBjb25kaXRpb24gaXMgbWV0LgorKi8KK2xvbmcKK3B0eWludF92b2lk X2Fzc29jaWF0aW9uKCkgeworICAgIGludCBjb25fZmQ7CisjaWZkZWYgSEFWRV9TRVRTSUQKKyAg ICBkZWJ1ZyhGMTEwLAorCSAgInB0eWludF92b2lkX2Fzc29jaWF0aW9uKCkiLAorCSAgInNldHNp ZCgpIiwKKwkgIDAKKwkgICk7CisgICAgc2V0c2lkKCk7CisjZW5kaWYgLyogSEFWRV9TRVRTSUQg Ki8KKworI2lmbmRlZiBOT19ERVZUVFkKKyAgICAvKiBWb2lkIHR0eSBhc3NvY2lhdGlvbiBmaXJz dCAqLworI2lmZGVmIFRJT0NOT1RUWQorICAgIGNvbl9mZCA9IG9wZW4oIi9kZXYvdHR5IiwgT19S RFdSKTsKKyAgICBkZWJ1ZyhGMTExLAorCSAgInB0eWludF92b2lkX2Fzc29jaWF0aW9uKCkgb3Bl bigvZGV2L3R0eSxPX1JEV1IpIiwKKwkgICIvZGV2L3R0eSIsCisJICBjb25fZmQpOworICAgIGlm IChjb25fZmQgPj0gMCkgeworICAgICAgICBpb2N0bChjb25fZmQsIFRJT0NOT1RUWSwgMCk7Cisg ICAgICAgIGNsb3NlKGNvbl9mZCk7CisgICAgfQorI2lmZGVmIERFQlVHCisgICAgZWxzZSBkZWJ1 ZyhGMTAxLCAicHR5aW50X3ZvaWRfYXNzb2NpYXRpb24oKSBvcGVuKCkgZXJybm8iLCIiLGVycm5v KTsKKyNlbmRpZiAvKiBERUJVRyAqLworI2VuZGlmIC8qIFRJT0NOT1RUWSAqLworI2VuZGlmIC8q IE5PX0RFVlRUWSAqLworICAgIHJldHVybigwKTsKK30KKworLyogUElEIG1heSBiZSB6ZXJvIGZv ciB1bmtub3duLiovCisKK2xvbmcKK3B0eV9jbGVhbnVwKHNsYXZlLCBwaWQsIHVwZGF0ZV91dG1w KSBjaGFyICpzbGF2ZTsgaW50IHBpZDsgaW50IHVwZGF0ZV91dG1wOyB7CisjaWZkZWYgVkhBTkdf TEFTVAorICAgIGludCByZXR2YWwsIGZkOworI2VuZGlmIC8qIFZIQU5HX0xBU1QgKi8KKworICAg IGRlYnVnKEYxMTEsInB0eV9jbGVhbnVwKCkiLHNsYXZlLHBpZCk7CisjaWZkZWYgV0FOVF9VVE1Q CisgICAgaWYgKHVwZGF0ZV91dG1wKQorICAgICAgcHR5X3VwZGF0ZV91dG1wKFBUWV9ERUFEX1BS T0NFU1MsCisJCSAgICAgIDAsCisJCSAgICAgICIiLAorCQkgICAgICBzbGF2ZSwKKwkJICAgICAg KGNoYXIgKikwLAorCQkgICAgICBQVFlfVVRNUF9VU0VSTkFNRV9WQUxJRAorCQkgICAgICApOwor I2VuZGlmIC8qIFdBTlRfVVRNUCAqLworCisjaWZkZWYgU0VUVUlECisgICAgY2htb2Qoc2xhdmUs IDA2NjYpOworICAgIGNob3duKHNsYXZlLCAwLCAwKTsKKyNlbmRpZiAvKiBTRVRVSUQgKi8KKwor I2lmZGVmIEhBVkVfUkVWT0tFCisgICAgcmV2b2tlKHNsYXZlKTsKKyAgICAvKgorICAgICAgIFJl dm9rZSBpc24ndCBndWFyYW50ZWVkIHRvIHNlbmQgYSBTSUdIVVAgdG8gdGhlIHByb2Nlc3NlcyBp dAorICAgICAgIGRpc3NvY2lhdGVzIGZyb20gdGhlIHRlcm1pbmFsLiAgVGhlIGJlc3Qgc29sdXRp b24gd2l0aG91dCBhIFBvc2l4CisgICAgICAgbWVjaGFuaXNtIGZvciBmb3JjaW5nIGEgaGFuZ3Vw IGlzIHRvIGtpbGxwZygpIHRoZSBwcm9jZXNzIGdyb3VwIG9mIHRoZQorICAgICAgIHB0eS4gIFRo aXMgd2lsbCBhdCBsZWFzdCBraWxsIHRoZSBzaGVsbCBhbmQgaG9wZWZ1bGx5LCB0aGUgY2hpbGQK KyAgICAgICBwcm9jZXNzZXMuICBUaGlzIGlzIG5vdCBhbHdheXMgdGhlIGNhc2UsIGhvd2V2ZXIu ICBJZiB0aGUgc2hlbGwgcHV0cworICAgICAgIGVhY2ggam9iIGluIGEgcHJvY2VzcyBncm91cCBh bmQgZG9lc24ndCBwYXNzIGFsb25nIFNJR0hVUCwgYWxsCisgICAgICAgcHJvY2Vzc2VzIG1heSBu b3QgZGllLgorICAgICovCisgICAgaWYgKHBpZCA+IDApIHsKKyNpZmRlZiBIQVZFX0tJTExQRwor CWtpbGxwZyhwaWQsIFNJR0hVUCk7CisjZWxzZQorCWtpbGwoLShwaWQpLCBTSUdIVVApOworI2Vu ZGlmIC8qSEFWRV9LSUxMUEcqLworICAgIH0KKyNlbHNlIC8qIEhBVkVfUkVWT0tFKi8KKyNpZmRl ZiBWSEFOR19MQVNUCisgICAgeworICAgICAgICBpbnQgc3RhdHVzOworI2lmZGVmIENLX1BPU0lY X1NJRworICAgICAgICBzaWdzZXRfdCBvbGQsIG5ldzsKKyAgICAgICAgc2lnZW1wdHlzZXQoJm5l dyk7CisgICAgICAgIHNpZ2FkZHNldCgmbmV3LCBTSUdDSExEKTsKKyAgICAgICAgc2lncHJvY21h c2soU0lHX0JMT0NLLCAmbmV3LCAmb2xkKTsKKyNlbHNlIC8qQ0tfUE9TSVhfU0lHKi8KKyAgICAg ICAgaW50IG1hc2sgPSBzaWdibG9jayhzaWdtYXNrKFNJR0NITEQpKTsKKyNlbmRpZiAvKkNLX1BP U0lYX1NJRyovCisgICAgICAgIHN3aXRjaCAocmV0dmFsID0gZm9yaygpKSB7CisJICBjYXNlIC0x OgorI2lmZGVmIENLX1BPU0lYX1NJRworICAgICAgICAgICAgc2lncHJvY21hc2soU0lHX1NFVE1B U0ssICZvbGQsIDApOworI2Vsc2UgLypDS19QT1NJWF9TSUcqLworICAgICAgICAgICAgc2lnc2V0 bWFzayhtYXNrKTsKKyNlbmRpZiAvKkNLX1BPU0lYX1NJRyovCisgICAgICAgICAgICByZXR1cm4g ZXJybm87CisJICBjYXNlIDA6CisgICAgICAgICAgICBwdHlpbnRfdm9pZF9hc3NvY2lhdGlvbigp OworICAgICAgICAgICAgaWYgKHJldHZhbCA9IChwdHlfb3Blbl9jdHR5KHNsYXZlLCAmZmQsIC0x KSkpCisJICAgICAgZXhpdChyZXR2YWwpOworICAgICAgICAgICAgcHR5aW50X3ZoYW5ndXAoKTsK KyAgICAgICAgICAgIGV4aXQoMCk7CisJICAgIGJyZWFrOworCSAgZGVmYXVsdDoKKyNpZmRlZiBI QVZFX1dBSVRQSUQKKyAgICAgICAgICAgIHdhaXRwaWQocmV0dmFsLCAmc3RhdHVzLCAwKTsKKyNl bHNlIC8qSEFWRV9XQUlUUElEKi8KKyAgICAgICAgICAgIHdhaXQoJnN0YXR1cyk7CisjZW5kaWYg LyogSEFWRV9XQUlUUElEICovCisjaWZkZWYgQ0tfUE9TSVhfU0lHCisgICAgICAgICAgICBzaWdw cm9jbWFzayhTSUdfU0VUTUFTSywgJm9sZCwgMCk7CisjZWxzZSAvKkNLX1BPU0lYX1NJRyovCisg ICAgICAgICAgICBzaWdzZXRtYXNrKG1hc2spOworI2VuZGlmIC8qQ0tfUE9TSVhfU0lHKi8KKyAg ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorI2VuZGlmIC8qVkhBTkdfTEFTVCov CisjZW5kaWYgLyogSEFWRV9SRVZPS0UqLworI2lmbmRlZiBIQVZFX1NUUkVBTVMKKyAgICBzbGF2 ZVtzdHJsZW4oIi9kZXYvIildID0gJ3AnOworI2lmZGVmIFNFVFVJRAorICAgIGNobW9kKHNsYXZl LCAwNjY2KTsKKyAgICBjaG93bihzbGF2ZSwgMCwgMCk7CisjZW5kaWYgLyogU0VUVUlEICovCisj ZW5kaWYgLyogSEFWRV9TVFJFQU1TICovCisgICAgcmV0dXJuKDApOworfQorCitsb25nCitwdHlf Z2V0cHR5KGZkLCBzbGF2ZSwgc2xhdmVsZW5ndGgpIGludCBzbGF2ZWxlbmd0aDsgaW50ICpmZDsg Y2hhciAqc2xhdmU7IHsKKyAgICBjaGFyICpjcDsKKyAgICBjaGFyICpwOworICAgIGludCBpLCBw dHludW07CisgICAgc3RydWN0IHN0YXQgc3RiOworI2lmbmRlZiBIQVZFX09QRU5QVFkKKyNpZm5k ZWYgSEFWRV9fR0VUUFRZCisgICAgY2hhciBzbGF2ZWJ1ZlsxMDI0XTsKKyNlbmRpZiAvKiBIQVZF X19HRVRQVFkgKi8KKyNlbmRpZiAvKiBIQVZFX09QRU5QVFkgKi8KKyNpZmRlZiBIQVZFX19HRVRQ VFkKKyAgICBjaGFyICpzbGF2ZXJldDsJCQkvKiBUZW1wIHRvIGhvbGQgcG9pbnRlciB0byBzbGF2 ZSAqLworI2VuZGlmIC8qSEFWRV9fR0VUUFRZKi8KKworI2lmZGVmIEhBVkVfT1BFTlBUWQorICAg IGludCBzbGF2ZWZkOworCisgICAgcHR5X21hc3Rlcl9mZCA9IC0xOworICAgIGRlYnVnKEYxMDAs IkhBVkVfT1BFTlBUWSIsIiIsMCk7CisgICAgaWYgKG9wZW5wdHkoZmQsCisJCSZzbGF2ZWZkLAor CQlzbGF2ZSwKKwkJKHN0cnVjdCB0ZXJtaW9zICopMCwKKwkJKHN0cnVjdCB3aW5zaXplICopMAor CQkpCisJKSB7CisJcHR5X21hc3Rlcl9mZCA9ICpmZDsKKwlyZXR1cm4oMSk7CisgICAgfQorICAg IGNsb3NlKHNsYXZlZmQpOworICAgIHJldHVybigwKTsKKworI2Vsc2UgLyogSEFWRV9PUEVOUFRZ ICovCisKKyNpZmRlZiBIQVZFX19HRVRQVFkKKy8qCisgIFRoaXMgY29kZSBpcyBpbmNsdWRlZCBm b3IgSXJpeDsgYXMgb2YgdmVyc2lvbiA1LjMsIElyaXggaGFzIC9kZXYvcHRteCwgYnV0CisgIGl0 IGZhaWxzIHRvIHdvcmsgcHJvcGVybHk7IGV2ZW4gYWZ0ZXIgY2FsbGluZyB1bmxvY2twdCwgcm9v dCBnZXRzIHBlcm1pc3Npb24KKyAgZGVuaWVkIG9wZW5pbmcgdGhlIHB0eS4gIFRoZSBjb2RlIHRv IHN1cHBvcnQgX2dldHB0eSBzaG91bGQgYmUgcmVtb3ZlZCBpZgorICBJcml4IGdldHMgd29ya2lu ZyBzdHJlYW1zIHB0eXMgaW4gZmF2b3Igb2YgbWFpbnRhaW5pbmcgdGhlIGxlYXN0IG5lZWRlZCBj b2RlCisgIHBhdGhzLgorKi8KKyAgICBkZWJ1ZyhGMTAwLCJIQVZFX19HRVRQVFkiLCIiLDApOwor ICAgIGlmICgoc2xhdmVyZXQgPSBfZ2V0cHR5KGZkLCBPX1JEV1IgfCBPX05ERUxBWSwgMDYwMCwg MCkpID09IDApIHsKKwkqZmQgPSAtMTsKKwlyZXR1cm4oUFRZX0dFVFBUWV9OT1BUWSk7CisgICAg fQorICAgIGlmIChzdHJsZW4oc2xhdmVyZXQpID4gc2xhdmVsZW5ndGggLSAxKSB7CisJY2xvc2Uo KmZkKTsKKwkqZmQgPSAtMTsKKwlyZXR1cm4oUFRZX0dFVFBUWV9TTEFWRV9UT09MT05HKTsKKyAg ICB9IGVsc2UgeworCWNrc3RybmNweShzbGF2ZSwgc2xhdmVyZXQsIHNsYXZlbGVuZ3RoKTsKKyAg ICB9CisgICAgcmV0dXJuKDApOworCisjZWxzZSAvKiBIQVZFX19HRVRQVFkgKi8KKworICAgICpm ZCA9IG9wZW4oIi9kZXYvcHR5bS9jbG9uZSIsIE9fUkRXUnxPX05ERUxBWSk7IC8qIEhQVVggKi8K KyAgICBpZiAoKmZkID49IDApIHsKKyAgICAgICAgZGVidWcoRjExMCwicHR5X2dldHB0eSgpIiwi b3BlbigvZGV2L3B0eW0vY2xvbmUpIHN1Y2Nlc3MiLDApOworICAgICAgICBnb3RvIGhhdmVfZmQ7 CisgICAgfQorCisjaWZkZWYgSEFWRV9QVE1YCisgICAgZGVidWcoRjEwMCwiSEFWRV9QVE1YIiwi IiwwKTsKKyAgICAqZmQgPSBvcGVuKCIvZGV2L3B0bXgiLE9fUkRXUnxPX05ERUxBWSk7CisgICAg aWYgKCpmZCA+PSAwKSB7CisgICAgICAgIGRlYnVnKEYxMTAsInB0eV9nZXRwdHkoKSIsIm9wZW4o L2Rldi9wdG14KSBzdWNjZXNzIiwwKTsKKyAgICAgICAgZ290byBoYXZlX2ZkOworICAgIH0KKyNl bmRpZiAvKiBIQVZFX1BUTVggKi8KKworICAgICpmZCA9IG9wZW4oIi9kZXYvcHRjIiwgT19SRFdS fE9fTkRFTEFZKTsgLyogQUlYICovCisgICAgaWYgKCpmZCA+PSAwKSB7CisgICAgICAgIGRlYnVn KEYxMTAsInB0eV9nZXRwdHkoKSIsIm9wZW4oL2Rldi9wdGMpIHN1Y2Nlc3MiLDApOworICAgICAg ICBnb3RvIGhhdmVfZmQ7CisgICAgfQorICAgICpmZCA9IG9wZW4oIi9kZXYvcHR5IiwgT19SRFdS fE9fTkRFTEFZKTsgLyogc3lzdmltcCAqLworICAgIGlmICgqZmQgPj0gMCkKKyAgICAgICAgZGVi dWcoRjExMCwicHR5X2dldHB0eSgpIiwib3BlbigvZGV2L3B0eSkgc3VjY2VzcyIsMCk7CisKKyAg aGF2ZV9mZDoKKyAgICAvKiBUaGlzIHdvdWxkIGJlIHRoZSBwdHkgbWFzdGVyICovCisgICAgZGVi dWcoRjEwMSwicHR5X2dldHB0eSBmZChBKSIsIiIsKmZkKTsKKyAgICBpZiAoKmZkID49IDApIHsK KwlwdHlfbWFzdGVyX2ZkID0gKmZkOworCisjaWZkZWYgSEFWRV9HUkFOVFBUCisjaWZkZWYgSEFW RV9QVE1YCisgICAgICAgIGRlYnVnKEYxMDAsIkhBVkVfR1JBTlRQVCIsIiIsMCk7CisJaWYgKGdy YW50cHQoKmZkKSB8fCB1bmxvY2twdCgqZmQpKQorCSAgcmV0dXJuKFBUWV9HRVRQVFlfU1RSRUFN Uyk7CisjZW5kaWYgLyogSEFWRV9QVE1YICovCisjZW5kaWYgLyogSEFWRV9HUkFOVFBUICovCisK KyNpZmRlZiBIQVZFX1BUU05BTUUKKyAgICAgICAgZGVidWcoRjEwMCwiSEFWRV9QVFNOQU1FIiwi IiwwKTsKKwlwID0gKGNoYXIgKilwdHNuYW1lKCpmZCk7CisgICAgICAgIGRlYnVnKEYxMTAsInB0 eV9nZXRwdHkoKSBwdHNuYW1lKCkiLHAsMCk7CisjZWxzZQorI2lmZGVmIEhBVkVfVFRZTkFNRQor ICAgICAgICBkZWJ1ZyhGMTAwLCJIQVZFX1RUWU5BTUUiLCIiLDApOworCXAgPSB0dHluYW1lKCpm ZCk7CisgICAgICAgIGRlYnVnKEYxMTAsInB0eV9nZXRwdHkoKSB0dHluYW1lKCkiLHAsMCk7Cisj ZWxzZQorCS8qIElmIHdlIGRvbid0IGhhdmUgZWl0aGVyIHdoYXQgZG8gd2UgZG8/ICovCisgIAly ZXR1cm4oUFRZX0dFVFBUWV9OT1BUWSk7CS8qIHB1bnQgKi8KKyNlbmRpZiAvKiBIQVZFX1RUWU5B TUUgKi8KKyNlbmRpZiAvKiBIQVZFX1BUU05BTUUgKi8KKwlpZiAocCkgeworCSAgICBpZiAoc3Ry bGVuKHApID4gc2xhdmVsZW5ndGggLSAxKSB7CisgICAgICAgICAgICAgICAgY2xvc2UgKCpmZCk7 CisgICAgICAgICAgICAgICAgKmZkID0gLTE7CisgICAgICAgICAgICAgICAgcmV0dXJuKFBUWV9H RVRQVFlfU0xBVkVfVE9PTE9ORyk7CisJICAgIH0KKwkgICAgY2tzdHJuY3B5KHNsYXZlLCBwLCBz bGF2ZWxlbmd0aCk7CisJICAgIHJldHVybigwKTsKKwl9CisJaWYgKGZzdGF0KCpmZCwgJnN0Yikg PCAwKSB7CisJICAgIGNsb3NlKCpmZCk7CisJICAgIHJldHVybihQVFlfR0VUUFRZX0ZTVEFUKTsK Kwl9CisJcHR5bnVtID0gKGludCkoc3RiLnN0X3JkZXYmMHhGRik7CisJc3ByaW50ZihzbGF2ZWJ1 ZiwgIi9kZXYvdHR5cCV4IiwgcHR5bnVtKTsgLyogc2FmZSAqLworCWlmIChzdHJsZW4oc2xhdmVi dWYpID4gc2xhdmVsZW5ndGggLSAxKSB7CisJICAgIGNsb3NlKCpmZCk7CisJICAgICpmZCA9IC0x OworCSAgICByZXR1cm4oUFRZX0dFVFBUWV9TTEFWRV9UT09MT05HKTsKKwl9CisgICAgICAgIGRl YnVnKEYxMTAsInB0eV9nZXRwdHkoKSBzbGF2ZWJ1ZiIsc2xhdmVidWYsMCk7CisJY2tzdHJuY3B5 KHNsYXZlLCBzbGF2ZWJ1Ziwgc2xhdmVsZW5ndGgpOworCXJldHVybigwKTsKKyAgICB9IGVsc2Ug eworICAgIAlmb3IgKGNwID0gInBxcnN0dXZ3eHl6UFFSU1QiOypjcDsgY3ArKykgeworCSAgICBz cHJpbnRmKHNsYXZlYnVmLCIvZGV2L3B0eVhYIik7IC8qIHNhZmUgKi8KKwkgICAgc2xhdmVidWZb c2l6ZW9mKCIvZGV2L3B0eSIpIC0gMV0gPSAqY3A7CisJICAgIHNsYXZlYnVmW3NpemVvZigiL2Rl di9wdHlwIikgLSAxXSA9ICcwJzsKKwkgICAgaWYgKHN0YXQoc2xhdmVidWYsICZzdGIpIDwgMCkK KwkgICAgICBicmVhazsKKwkgICAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKKwkJc2xhdmVi dWZbc2l6ZW9mKCIvZGV2L3B0eXAiKSAtIDFdID0gIjAxMjM0NTY3ODlhYmNkZWYiW2ldOworCQll cnJubyA9IDA7CisJCSpmZCA9IG9wZW4oc2xhdmVidWYsIE9fUkRXUnxPX05ERUxBWSk7CisJCWlm ICgqZmQgPCAwKSB7CisJCSAgICBkZWJ1ZyhGMTExLCJwdHlfZ2V0cHR5KCkgcHR5IG1hc3RlciBv cGVuIGVycm9yIiwKKwkJCSAgc2xhdmVidWYsZXJybm8pOworCQkgICAgY29udGludWU7CisJCX0K KyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJwdHlfZ2V0cHR5KCkgZm91bmQgcHR5IG1hc3Rl ciIsc2xhdmVidWYsKmZkKTsKKwkJc2xhdmVidWZbc2l6ZW9mKCIvZGV2LyIpIC0gMV0gPSAndCc7 IC8qIGdvdCBwdHkgKi8KKwkJaWYgKHN0cmxlbihzbGF2ZWJ1ZikgPiBzbGF2ZWxlbmd0aCAtMSkg eworCQkgICAgY2xvc2UoKmZkKTsKKwkJICAgICpmZCA9IC0xOworCQkgICAgcmV0dXJuKFBUWV9H RVRQVFlfU0xBVkVfVE9PTE9ORyk7CisJCX0KKwkJY2tzdHJuY3B5KHNsYXZlLCBzbGF2ZWJ1Ziwg c2xhdmVsZW5ndGgpOworICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsInB0eV9nZXRwdHkgc2xh dmUgbmFtZSIsc2xhdmUsMCk7CisJCXB0eV9tYXN0ZXJfZmQgPSAqZmQ7CisJCXJldHVybigwKTsK KwkgICAgfQorCX0KKwlyZXR1cm4oUFRZX0dFVFBUWV9OT1BUWSk7CisgICAgfQorI2VuZGlmIC8q SEFWRV9fR0VUUFRZKi8KKyNlbmRpZiAvKiBIQVZFX09QRU5QVFkgKi8KK30KKworbG9uZworcHR5 X2luaXQoKSB7CisjaWZkZWYgSEFWRV9QVFlNCisgICAgc3RhdGljIGNoYXIgZHVtbXk7CisgICAg ZGVidWcoRjEwMCwiSEFWRV9QVFlNIiwiIiwwKTsKKyAgICB0dHlfYmFuayA9ICAmbWFzdGVyX25h bWVbc3RybGVuKCIvZGV2L3B0eW0vcHR5IildOworICAgIHR0eV9udW0gID0gICZtYXN0ZXJfbmFt ZVtzdHJsZW4oIi9kZXYvcHR5bS9wdHlYIildOworICAgIHNsYXZlX2JhbmsgPSAmc2xhdmVfbmFt ZVtzdHJsZW4oIi9kZXYvcHR5L3R0eSIpXTsKKyAgICBzbGF2ZV9udW0gID0gJnNsYXZlX25hbWVb c3RybGVuKCIvZGV2L3B0eS90dHlYIildOworI2VuZGlmCisgICAgcmV0dXJuKDBMKTsKK30KKwor LyoKKyAgVGhlIGZvbGxvd2luZyBpcyBhbiBhcnJheSBvZiBtb2R1bGVzIHRoYXQgc2hvdWxkIGJl IHB1c2hlZCBvbiB0aGUgc3RyZWFtLgorICBTZWUgY29uZmlndXJlLmluIGZvciBjYXZpYXRzIGFu ZCBub3RlcyBhYm91dCB3aGVuIHRoaXMgYXJyYXkgaXMgdXNlZCBhbmQgbm90CisgIHVzZWQuCisq LworI2lmZGVmIEhBVkVfU1RSRUFNUworI2lmbmRlZiBIQVZFX0xJTkVfUFVTSAorc3RhdGljIGNo YXIgKnB1c2hfbGlzdFtdID0geworI2lmZGVmIFBVU0hfUFRFTQorICAgICJwdGVtIiwKKyNlbmRp ZgorI2lmZGVmIFBVU0hfTERURVJNCisgICAgImxkdGVybSIsCisjZW5kaWYKKyNpZmRlZiBQVVNI X1RUQ09NUEFUCisgICAgInR0Y29tcGF0IiwKKyNlbmRpZgorICAgIDAKK307CisjZW5kaWYgLyog SEFWRV9MSU5FX1BVU0ggKi8KKyNlbmRpZiAvKiBIQVZFX1NUUkVBTVMgKi8KKworbG9uZworcHR5 X2luaXRpYWxpemVfc2xhdmUgKGZkKSBpbnQgZmQ7IHsKKyNpZmRlZiBQT1NJWF9URVJNSU9TCisj aWZuZGVmIHVsdHJpeAorICAgIHN0cnVjdCB0ZXJtaW9zIG5ld190ZXJtaW87CisjZWxzZQorICAg IHN0cnVjdCBzZ3R0eWIgYjsKKyNlbmRpZiAvKiB1bHRyaXggKi8KKyNlbHNlCisgICAgc3RydWN0 IHNndHR5YiBiOworI2VuZGlmIC8qIFBPU0lYX1RFUk1JT1MgKi8KKyAgICBpbnQgcGlkOworI2lm ZGVmIFBPU0lYX1RFUk1JT1MKKyNpZm5kZWYgdWx0cml4CisgICAgaW50IHJjOworI2VuZGlmIC8q IHVsdHJpeCAqLworI2VuZGlmIC8qIFBPU0lYX1RFUk1JT1MgKi8KKworICAgIGRlYnVnKEYxMTEs InB0eV9pbml0aWFsaXplX3NsYXZlKCkiLCJmZCIsZmQpOworCisjaWZkZWYgSEFWRV9TVFJFQU1T CisjaWZkZWYgSEFWRV9MSU5FX1BVU0gKKyAgICB3aGlsZSAoaW9jdGwoZmQsSV9QT1AsMCkgPT0g MCkgOwkvKiBDbGVhciBvdXQgYW55IG9sZCBsaW5lZCdzICovCisKKyAgICBpZiAobGluZV9wdXNo KGZkKSA8IDApIHsKKyAgICAgICAgZGVidWcoRjExMCwicHR5X2luaXRpYWxpemVfc2xhdmUoKSIs ImxpbmVfcHVzaCgpIGZhaWxlZCIsMCk7CisJY2xvc2UoZmQpOworICAgICAgICBmZCA9IC0xOwor ICAgICAgICByZXR1cm4oUFRZX09QRU5fU0xBVkVfTElORV9QVVNIRkFJTCk7CisgICAgfQorI2Vs c2UgLypObyBsaW5lX3B1c2ggKi8KKyAgICB7CisgICAgICAgIGNoYXIgKiptb2R1bGUgPSAmcHVz aF9saXN0WzBdOworICAgICAgICB3aGlsZSAoKm1vZHVsZSkgeworCSAgICBpZiAoaW9jdGwoZmQs IElfUFVTSCwgKihtb2R1bGUrKykpIDwgMCkgeworICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAs InB0eV9pbml0aWFsaXplX3NsYXZlKCkiLCJpb2N0bChJX1BVU0gpIGZhaWxlZCIsMCk7CisJCXJl dHVybihQVFlfT1BFTl9TTEFWRV9QVVNIX0ZBSUwpOworCSAgICB9CisJfQorICAgIH0KKyNlbmRp ZiAvKkxJTkVfUFVTSCovCisjZW5kaWYgLypIQVZFX1NUUkVBTVMqLworLyoKKyAgVW5kZXIgVWx0 cml4IDMuMCwgdGhlIHBncnAgb2YgdGhlIHNsYXZlIHB0eSB0ZXJtaW5hbCBuZWVkcyB0byBiZSBz ZXQKKyAgZXhwbGljaXRseS4gIFdoeSBybG9naW5kIHdvcmtzIGF0IGFsbCB3aXRob3V0IHRoaXMg b24gNC4zQlNEIGlzIGEgbXlzdGVyeS4KKyovCisjaWZkZWYgR0VUUEdSUF9PTkVBUkcKKyAgICBw aWQgPSBnZXRwZ3JwKGdldHBpZCgpKTsKKyNlbHNlCisgICAgcGlkID0gZ2V0cGdycCgpOworI2Vu ZGlmIC8qIEdFVFBHUlBfT05FQVJHICovCisKKyAgICBkZWJ1ZyhGMTExLCJwdHlfaW5pdGlhbGl6 ZV9zbGF2ZSgpIiwicGlkIixwaWQpOworCisjaWZkZWYgVElPQ1NQR1JQCisgICAgaW9jdGwoZmQs IFRJT0NTUEdSUCwgJnBpZCk7CisjZW5kaWYgLyogVElPQ1NQR1JQICovCisKKyNpZmRlZiBQT1NJ WF9URVJNSU9TCisjaWZuZGVmIHVsdHJpeAorICAgIHRjc2V0cGdycChmZCwgcGlkKTsKKyAgICBl cnJubyA9IDA7CisgICAgcmMgPSB0Y2dldGF0dHIoZmQsJm5ld190ZXJtaW8pOworICAgIGRlYnVn KEYxMTEsInB0eV9pbml0aWFsaXplX3NsYXZlIHRjZ2V0YXR0cihmZCkiLGNraXRvYShyYyksZXJy bm8pOworICAgIGlmIChyYyA9PSAwKSB7CisJbmV3X3Rlcm1pby5jX2NjW1ZNSU5dID0gMTsKKwlu ZXdfdGVybWlvLmNfY2NbVlRJTUVdID0gMDsKKwlyYyA9IHRjc2V0YXR0cihmZCxUQ1NBTk9XLCZu ZXdfdGVybWlvKTsKKwlkZWJ1ZyhGMTExLCJwdHlfaW5pdGlhbGl6ZV9zbGF2ZSB0Y3NldGF0dHIo ZmQpIixja2l0b2EocmMpLGVycm5vKTsKKyAgICB9CisjZW5kaWYgLyogdWx0cml4ICovCisjZW5k aWYgLyogUE9TSVhfVEVSTUlPUyAqLworICAgIHJldHVybigwTCk7Cit9CisKKyNpZmRlZiBXQU5U X1VUTVAKK2xvbmcKK3B0eV9sb2d3dG1wICh0dHksIHVzZXIsIGhvc3QpIGNoYXIgKnVzZXIsICp0 dHksICpob3N0OyB7CisjaWZkZWYgSEFWRV9MT0dXVE1QCisgICAgbG9nd3RtcCh0dHksdXNlcixo b3N0KTsKKyAgICByZXR1cm4oMCk7CisjZWxzZQorICAgIHN0cnVjdCB1dG1wIHV0OworICAgIGNo YXIgKnRtcHg7CisgICAgY2hhciB1dG1wX2lkWzVdOworICAgIGludCBsb2dnaW5naW4gPSB1c2Vy WzBdOwkJLyogV2lsbCBiZSBlbXB0eSBmb3IgbG9nb3V0ICovCisKKyNpZm5kZWYgTk9fVVRfSE9T VAorICAgIHN0cm5jcHkodXQudXRfaG9zdCwgaG9zdCwgc2l6ZW9mKHV0LnV0X2hvc3QpKTsKKyNl bmRpZiAvKiBOT19VVF9IT1NUICovCisKKyAgICBzdHJuY3B5KHV0LnV0X2xpbmUsIHR0eSwgc2l6 ZW9mKHV0LnV0X2xpbmUpKTsKKyAgICB1dC51dF90aW1lID0gdGltZSgwKTsKKworI2lmbmRlZiBO T19VVF9QSUQKKyAgICB1dC51dF9waWQgPSBnZXRwaWQoKTsKKyAgICBzdHJuY3B5KHV0LnV0X3Vz ZXIsIHVzZXIsIHNpemVvZih1dC51dF91c2VyKSk7CisKKyAgICB0bXB4ID0gdHR5ICsgc3RybGVu KHR0eSkgLSAyOworICAgIGNrbWFrbXNnKHV0bXBfaWQsNSwia3IiLHRtcHgsTlVMTCxOVUxMKTsK KyAgICBzdHJuY3B5KHV0LnV0X2lkLCB1dG1wX2lkLCBzaXplb2YodXQudXRfaWQpKTsKKyAgICB1 dC51dF9waWQgPSAobG9nZ2luZ2luID8gZ2V0cGlkKCkgOiAwKTsKKyAgICB1dC51dF90eXBlID0g KGxvZ2dpbmdpbiA/IFVTRVJfUFJPQ0VTUyA6IERFQURfUFJPQ0VTUyk7CisjZWxzZQorICAgIHN0 cm5jcHkodXQudXRfbmFtZSwgdXNlciwgc2l6ZW9mKHV0LnV0X25hbWUpKTsKKyNlbmRpZiAvKiBO T19VVF9QSUQgKi8KKworICAgIHJldHVybihwdHlpbnRfdXBkYXRlX3d0bXAoJnV0LCBob3N0LCB1 c2VyKSk7CisKKyNlbmRpZiAvKiBIQVZFX0xPR1dUTVAgKi8KK30KKyNlbmRpZiAvKiBXQU5UX1VU TVAgKi8KKworLyoKKyAgVGhpcyByb3V0aW5lIGlzIGNhbGxlZCB0d2ljZS4gIEl0J3Mgbm90IHBh cnRpY3VsYXJseSBpbXBvcnRhbnQgdGhhdCB0aGUKKyAgc2V0c2lkKCkgb3IgVElPQ1NDVFRZIGlv Y3RscyBzdWNjZWVkICh0aGV5IG1heSBub3QgdGhlIHNlY29uZCB0aW1lKSwgYnV0CisgIHJhdGhl ciB0aGF0IHdlIGhhdmUgYSBjb250cm9sbGluZyB0ZXJtaW5hbCBhdCB0aGUgZW5kLiAgSXQgaXMg YXNzdW1lZCB0aGF0CisgIHZoYW5ndXAgZG9lc24ndCBleGlzdCBhbmQgY29uZnVzZSB0aGUgcHJv Y2VzcydzIG5vdGlvbiBvZiBjb250cm9sbGluZworICB0ZXJtaW5hbCBvbiBhbnkgc3lzdGVtIHdp dGhvdXQgVElPQ05PVFRZLiAgVGhhdCBpcywgZWl0aGVyIHZoYW5ndXAoKSBsZWF2ZXMKKyAgdGhl IGNvbnRyb2xsaW5nIHRlcm1pbmFsIGluIHRhY3QsIGJyZWFrcyB0aGUgYXNzb2NpYXRpb24gY29t cGxldGVseSwgb3IgdGhlCisgIHN5c3RlbSBwcm92aWRlcyBUSU9DTk9UVFkgdG8gZ2V0IHRoaW5n cyBiYWNrIGludG8gYSByZWFzb25hYmxlIHN0YXRlLiAgSW4KKyAgcHJhY3RpY2UsIHZoYW5ndXAo KSBlaXRoZXIgYnJlYWtzIHRoZSBhc3NvY2lhdGlvbiBjb21wbGV0ZWx5IG9yIGRvZXNuJ3QKKyAg ZWZmZWN0IGNvbnRyb2xsaW5nIHRlcm1pbmFscywgc28gdGhpcyBjb25kaXRpb24gaXMgbWV0Lgor Ki8KK2xvbmcKK3B0eV9vcGVuX2N0dHkoc2xhdmUsIGZkLCBmYykgY2hhciAqIHNsYXZlOyBpbnQg KmZkOyBpbnQgZmM7IHsKKyAgICBpbnQgcmV0dmFsOworCisgICAgZGVidWcoRjExMCwicHR5X29w ZW5fY3R0eSgpIHNsYXZlIixzbGF2ZSwwKTsKKworLyogRmlyc3QsIGRpc3NvY2lhdGUgZnJvbSBw cmV2aW91cyB0ZXJtaW5hbCAqLworCisgICAgaWYgKChyZXR2YWwgPSBwdHlpbnRfdm9pZF9hc3Nv Y2lhdGlvbigpKSAhPSAwKSB7CisgICAgICAgIGRlYnVnKEYxMTEsCisJICAgICAgInB0eV9vcGVu X2N0dHkoKSIsCisJICAgICAgInB0eWludF92b2lkX2Fzc29jaWF0aW9uKCkgZmFpbGVkIiwKKwkg ICAgICByZXR2YWwKKwkgICAgICApOworCXJldHVybihyZXR2YWwpOworICAgIH0KKyNpZmRlZiBN VVNUX1NFVFBHUlAKKy8qCisgIFRoZSBVbHRyaXggKGFuZCBvdGhlciBCU0QgdHR5IGRyaXZlcnMp IHJlcXVpcmUgdGhlIHByb2Nlc3MgZ3JvdXAKKyAgdG8gYmUgemVybyBpbiBvcmRlciB0byBhY3F1 aXJlIHRoZSBuZXcgdHR5IGFzIGEgY29udHJvbGxpbmcgdHR5LgorKi8KKyAgICBzZXRwZ3JwKDAs MCk7CisgICAgZGVidWcoRjEwMSwicHR5X29wZW5fY3R0eSBNVVNUX1NFVFBHUlAgc2V0cGdycCgw LDApIiwiIixlcnJubyk7CisjZW5kaWYgLyogTVVTVF9TRVRQR1JQICovCisKKyAgICBlcnJubyA9 IDA7CisgICAgKmZkID0gb3BlbihzbGF2ZSwgT19SRFdSKTsKKyAgICBkZWJ1ZyhGMTExLCJwdHlf b3Blbl9jdHR5IG9wZW4oc2xhdmUpIGZkIixzbGF2ZSwqZmQpOworICAgIGlmICgqZmQgPCAwKSB7 CisJZGVidWcoRjExMSwicHR5X29wZW5fY3R0eSgpIG9wZW4gZmFpbHVyZSIsIHNsYXZlLCBlcnJu byk7CisJcmV0dXJuKFBUWV9PUEVOX1NMQVZFX09QRU5GQUlMKTsKKyAgICB9CisjaWZkZWYgU09M QVJJUworICAgIC8qIFRoaXMgZm9yY2VzIHRoZSBqb2IgdG8gaGF2ZSBhIGNvbnRyb2xsaW5nIHRl cm1pbmFsLiAqLworICAgIGNsb3NlKCpmZCk7CisgICAgKmZkID0gb3BlbihzbGF2ZSwgT19SRFdS KTsKKyAgICBkZWJ1ZyhGMTExLCJwdHlfb3Blbl9jdHR5IGNsb3NlL29wZW4oc2xhdmUpIGZkIixz bGF2ZSwqZmQpOworI2lmZGVmIERFQlVHCisgICAgLyogVGhpcyBzaG93cyB0aGF0IC9kZXYvdHR5 IGV4aXN0cyAqLworaWYgKGRlYmxvZykgeworCWludCB4OworCXggPSBvcGVuKCIvZGV2L3R0eSIs IE9fUkRXUik7CisJZGVidWcoRjExMSwicHR5X29wZW5fY3R0eSBvcGVuKC9kZXYvdHR5KSBmZCIs c2xhdmUseCk7CisJaWYgKHggPCAwKSBkZWJ1ZyhGMTExLCJwdHlfb3Blbl9jdHR5IG9wZW4oL2Rl di90dHkpIGVycm5vIiwiIixlcnJubyk7CisJZGVidWcoRjExMCwicHR5X29wZW5fY3R0eSB0dHlu YW1lKC9kZXYvdHR5KSIsdHR5bmFtZSh4KSwwKTsKKwlpZiAoeCA+IC0xKSBjbG9zZSh4KTsKKyAg ICB9CisjZW5kaWYJLyogREVCVUcgKi8KKyNlbmRpZiAvKiBTT0xBUklTICovCisKKyNpZmRlZiBN VVNUX1NFVFBHUlAKKyAgICBzZXRwZ3JwKDAsIGdldHBpZCgpKTsKKyNlbmRpZiAvKiBNVVNUX1NF VFBHUlAgKi8KKworI2lmZGVmIFRJT0NTQ1RUWQorICAgIGlmICgKKyNpZmRlZiBDT01NRU5UCisJ ZmMgPT0gMAorI2Vsc2UKKwkxCisjZW5kaWYJLyogQ09NTUVOVCAqLworCSkgeworCS8qIFRJT0NT Q1RUWSA9IE1ha2UgdGhpcyB0aGUgam9iJ3MgY29udHJvbGxpbmcgdGVybWluYWwgKi8KKwllcnJu byA9IDA7CisJcmV0dmFsID0gaW9jdGwoKmZkLCBUSU9DU0NUVFksIDApOyAvKiBEb24ndCBjaGVj ayByZXR1cm4uKi8KKwlkZWJ1ZyhGMTExLCJwdHlfb3Blbl9jdHR5KCkgaW9jdGwgVElPQ1NDVFRZ Iixja2l0b2EocmV0dmFsKSxlcnJubyk7CisgICAgfQorI2VuZGlmIC8qIFRJT0NTQ1RUWSAqLwor ICAgIHJldHVybigwTCk7Cit9CisKK2xvbmcKK3B0eV9vcGVuX3NsYXZlKHNsYXZlLCBmZCwgZmMp IGNoYXIgKnNsYXZlOyBpbnQgKmZkOyBpbnQgZmM7IHsKKyAgICBpbnQgdmZkLCB0ZXN0ZmQ7Cisg ICAgbG9uZyByZXR2YWw7CisjaWZkZWYgQ0tfUE9TSVhfU0lHCisgICAgc3RydWN0IHNpZ2FjdGlv biBzYTsKKworICAgIHNpZ2VtcHR5c2V0KCZzYS5zYV9tYXNrKTsJCS8qIEluaXRpYWxpemUgInNh IiBzdHJ1Y3R1cmUuICovCisgICAgc2Euc2FfZmxhZ3MgPSAwOworI2VuZGlmIC8qIENLX1BPU0lY X1NJRyAqLworCisvKgorICBGaXJzdCwgY2htb2QgYW5kIGNob3duIHRoZSBzbGF2ZS4gIElmIHdl IGhhdmUgdmhhbmd1cCB0aGVuIHdlIHJlYWxseSBuZWVkCisgIHB0eV9vcGVuX2N0dHkgdG8gbWFr ZSBzdXJlIG91ciBjb250cm9sbGluZyB0ZXJtaW5hbCBpcyB0aGUgcHR5IHdlJ3JlCisgIG9wZW5p bmcuICBIb3dldmVyLCBpZiB3ZSBhcmUgdXNpbmcgcmV2b2tlIG9yIG5vdGhpbmcgdGhlbiB3ZSBq dXN0IG5lZWQgYQorICBmaWxlIGRlc2NyaWlwdG9yIGZvciB0aGUgcHR5LiAgQ29uc2lkZXJpbmcg c29tZSBPU2VzIGluIHRoaXMgY2F0ZWdvcnkgYnJlYWsKKyAgb24gdGhlIHNlY29uZCBjYWxsIHRv IG9wZW5fY3R0eSAoY3VycmVudGx5IE9TRiBidXQgb3RoZXJzIG1heSksIHdlIHNpbXBseQorICB1 c2UgYSBkZXNjcmlwdG9yIGlmIHdlIGNhbi4KKyovCisjaWZkZWYgVkhBTkdfRklSU1QKKyAgICBp ZiAoKHJldHZhbCA9IHB0eV9vcGVuX2N0dHkoc2xhdmUsICZ2ZmQsIGZjKSkgIT0gMCkgeworICAg ICAgICBkZWJ1ZyhGMTExLAorCSAgICAgICJwdHlfb3Blbl9zbGF2ZSgpIFZIQU5HX0ZJUlNUIiwK KwkgICAgICAicHR5X29wZW5fY3R0eSgpIGZhaWxlZCIsCisJICAgICAgcmV0dmFsCisJICAgICAg KTsKKyAgICAgICAgcmV0dXJuKHJldHZhbCk7CisgICAgfQorICAgIGlmICh2ZmQgPCAwKSB7Cisg ICAgICAgIGRlYnVnKEYxMTEsCisJICAgICAgInB0eV9vcGVuX3NsYXZlKCkgVkhBTkdfRklSU1Qi LAorCSAgICAgICJQVFlfT1BFTl9TTEFWRV9PUEVORkFJTCIsCisJICAgICAgdmZkCisJICAgICAg KTsKKwlyZXR1cm4oUFRZX09QRU5fU0xBVkVfT1BFTkZBSUwpOworICAgIH0KKyNlbmRpZiAvKiBW SEFOR19GSVJTVCAqLworCisgICAgaWYgKHNsYXZlID09IE5VTEwgfHwgKnNsYXZlID09ICdcMCcp IHsKKyAgICAgICAgZGVidWcoRjExMCwicHR5X29wZW5fc2xhdmUoKSIsIlBUWV9PUEVOX1NMQVZF X1RPT1NIT1JUIiwwKTsKKyAgICAgICAgcmV0dXJuKFBUWV9PUEVOX1NMQVZFX1RPT1NIT1JUKTsK KyAgICB9CisKKyNpZmRlZiBTRVRVSUQKKyAgICBpZiAoY2htb2Qoc2xhdmUsIDApKSB7CisgICAg ICAgIGRlYnVnKEYxMTAsInB0eV9vcGVuX3NsYXZlKCkiLCJQVFlfT1BFTl9TTEFWRV9DSE1PREZB SUwiLDApOworICAgICAgICByZXR1cm4oUFRZX09QRU5fU0xBVkVfQ0hNT0RGQUlMKTsKKyAgICB9 CisgICAgaWYgKGNob3duKHNsYXZlLCAwLCAwICkgPT0gLTEgKSB7CisgICAgICAgIGRlYnVnKEYx MTAsInB0eV9vcGVuX3NsYXZlKCkiLCJQVFlfT1BFTl9TTEFWRV9DSE9XTkZBSUwiLDApOworICAg ICAgICByZXR1cm4oUFRZX09QRU5fU0xBVkVfQ0hPV05GQUlMKTsKKyAgICB9CisjZW5kaWYgLyog U0VUVUlEICovCisjaWZkZWYgVkhBTkdfRklSU1QKKyAgICBwdHlpbnRfdmhhbmd1cCgpOworICAg IGNsb3NlKHZmZCk7CisjZW5kaWYgLyogVkhBTkdfRklSU1QgKi8KKworICAgIGlmICgocmV0dmFs ID0gcHR5aW50X3ZvaWRfYXNzb2NpYXRpb24oKSkgIT0gMCkgeworICAgICAgICBkZWJ1ZyhGMTEx LAorCSAgICAgICJwdHlfb3Blbl9zbGF2ZSgpIiwKKwkgICAgICAicHR5aW50X3ZvaWRfYXNzb2Np YXRpb24oKSBmYWlsZWQiLAorCSAgICAgIHJldHZhbAorCSAgICAgICk7CisgICAgICAgIHJldHVy bihyZXR2YWwpOworICAgIH0KKworI2lmZGVmIEhBVkVfUkVWT0tFCisgICAgaWYgKHJldm9rZSAo c2xhdmUpIDwgMCApIHsKKyAgICAgICAgZGVidWcoRjExMCwicHR5X29wZW5fc2xhdmUoKSIsIlBU WV9PUEVOX1NMQVZFX1JFVk9LRUZBSUwiLDApOworCXJldHVybihQVFlfT1BFTl9TTEFWRV9SRVZP S0VGQUlMKTsKKyAgICB9CisjZW5kaWYgLyogSEFWRV9SRVZPS0UgKi8KKworLyogT3BlbiB0aGUg cHR5IGZvciByZWFsLiAqLworCisgICAgcmV0dmFsID0gcHR5X29wZW5fY3R0eShzbGF2ZSwgZmQs IGZjKTsKKyAgICBkZWJ1ZyhGMTExLCJwdHlfb3Blbl9zbGF2ZSByZXR2YWwiLHNsYXZlLHJldHZh bCk7CisgICAgZGVidWcoRjExMSwicHR5X29wZW5fc2xhdmUgZmQiLHNsYXZlLCpmZCk7CisgICAg aWYgKHJldHZhbCAhPSAwKSB7CisgICAgICAgIGRlYnVnKEYxMTEsInB0eV9vcGVuX3NsYXZlKCki LCJwdHlfb3Blbl9jdHR5KCkgZmFpbGVkIixyZXR2YWwpOworCXJldHVybihQVFlfT1BFTl9TTEFW RV9PUEVORkFJTCk7CisgICAgfQorICAgIHB0eV9zbGF2ZV9mZCA9ICpmZDsJCSAgIC8qIFRoaXMg aXMgbm90IHZpc2libGUgdG8gdGhlIHVwcGVyIGZvcmsgKi8KKyAgICBkZWJ1ZyhGMTExLCJwdHlf b3Blbl9zbGF2ZSBmZCBjdHR5J2QiLHNsYXZlLHB0eV9zbGF2ZV9mZCk7CisgICAgcmV0dmFsID0g cHR5X2luaXRpYWxpemVfc2xhdmUoKmZkKTsKKyAgICBkZWJ1ZyhGMTExLCJwdHlfb3Blbl9zbGF2 ZSBmZCBpbml0J2QiLHNsYXZlLHB0eV9zbGF2ZV9mZCk7CisgICAgaWYgKHJldHZhbCkgeworICAg ICAgICBkZWJ1ZyhGMTExLCJwdHlfb3Blbl9zbGF2ZSgpIiwicHR5X2luaXRpYWxpemVfc2xhdmUo KSBmYWlsZWQiLHJldHZhbCk7CisgICAgICAgIHJldHVybihyZXR2YWwpOworICAgIH0KKyAgICAv KiAoVk9JRClwdHlfbWFrZV9yYXcoKmZkKTsgKi8KKworICAgIGRlYnVnKEYxMDAsInB0eV9vcGVu X3NsYXZlIE9LIiwiIiwqZmQpOworICAgIHJldHVybigwTCk7Cit9CisKKyNpZmRlZiBXQU5UX1VU TVAKKworI2lmbmRlZiBVVE1QX0ZJTEUKKyNpZmRlZiBfUEFUSF9VVE1QCisjZGVmaW5lIFVUTVBf RklMRSBfUEFUSF9VVE1QCisjZW5kaWYgLyogX1BBVEhfVVRNUCAqLworI2VuZGlmIC8qICBVVE1Q X0ZJTEUgKi8KKworLyogSWYgaXQgaXMgKnN0aWxsKiBtaXNzaW5nLCBhc3N1bWUgL2V0Yy91dG1w ICovCisKKyNpZm5kZWYgVVRNUF9GSUxFCisjZGVmaW5lCVVUTVBfRklMRSAiL2V0Yy91dG1wIgor I2VuZGlmIC8qIFVUTVBfRklMRSAqLworCisjaWZuZGVmIE5PX1VUX1BJRAorI2RlZmluZSBXVE1Q X1JFUVVJUkVTX1VTRVJOQU1FCisjZW5kaWYgLyogTk9fVVRfUElEICovCisKK2xvbmcKK3B0eV91 cGRhdGVfdXRtcChwcm9jZXNzX3R5cGUsIHBpZCwgdXNlcm5hbWUsIGxpbmUsIGhvc3QsIGZsYWdz KQorICAgIGludCBwcm9jZXNzX3R5cGU7CisgICAgaW50IHBpZDsKKyAgICBjaGFyICp1c2VybmFt ZSwgKmxpbmUsICpob3N0OworICAgIGludCBmbGFnczsKKy8qIHB0eV91cGRhdGVfdXRtcCAqLyB7 CisgICAgc3RydWN0IHV0bXAgZW50LCB1dDsKKyNpZm5kZWYgSEFWRV9TRVRVVEVOVAorICAgIHN0 cnVjdCBzdGF0IHN0YXRiOworICAgIGludCB0dHk7CisjZW5kaWYgLyogSEFWRV9TRVRVVEVOVCAq LworI2lmZGVmIEhBVkVfU0VUVVRYRU5UCisgICAgc3RydWN0IHV0bXB4IHV0eDsKKyNlbmRpZiAv KiBIQVZFX1NFVFVUWEVOVCAqLworI2lmbmRlZiBOT19VVF9QSUQKKyAgICBjaGFyICp0bXB4Owor ICAgIGNoYXIgdXRtcF9pZFs1XTsKKyNlbmRpZiAvKiBOT19VVF9QSUQgKi8KKyAgICBjaGFyIHVz ZXJidWZbMzJdOworICAgIGludCBmZDsKKworICAgIGRlYnVnKEYxMDAsInB0eV91cGRhdGVfdXRt cCgpIiwiIiwwKTsKKyAgICBzdHJuY3B5KGVudC51dF9saW5lLCBsaW5lK3NpemVvZigiL2Rldi8i KS0xLCBzaXplb2YoZW50LnV0X2xpbmUpKTsKKyAgICBlbnQudXRfdGltZSA9IHRpbWUoMCk7CisK KyNpZmRlZiBOT19VVF9QSUQKKyAgICBpZiAocHJvY2Vzc190eXBlID09IFBUWV9MT0dJTl9QUk9D RVNTKQorICAgICAgcmV0dXJuKDBMKTsKKyNlbHNlIC8qIE5PX1VUX1BJRCAqLworCisgICAgZW50 LnV0X3BpZCA9IHBpZDsKKworICAgIHN3aXRjaCAocHJvY2Vzc190eXBlKSB7CisgICAgICBjYXNl IFBUWV9MT0dJTl9QUk9DRVNTOgorCWVudC51dF90eXBlID0gTE9HSU5fUFJPQ0VTUzsKKwlicmVh azsKKyAgICAgIGNhc2UgUFRZX1VTRVJfUFJPQ0VTUzoKKwllbnQudXRfdHlwZSA9IFVTRVJfUFJP Q0VTUzsKKwlicmVhazsKKyAgICAgIGNhc2UgUFRZX0RFQURfUFJPQ0VTUzoKKwllbnQudXRfdHlw ZSA9IERFQURfUFJPQ0VTUzsKKwlicmVhazsKKyAgICAgIGRlZmF1bHQ6CisJcmV0dXJuKFBUWV9V UERBVEVfVVRNUF9QUk9DVFlQRV9JTlZBTElEKTsKKyAgICB9CisjZW5kaWYgLypOT19VVF9QSUQq LworCisjaWZuZGVmIE5PX1VUX0hPU1QKKyAgICBpZiAoaG9zdCkKKyAgICAgIHN0cm5jcHkoZW50 LnV0X2hvc3QsIGhvc3QsIHNpemVvZihlbnQudXRfaG9zdCkpOworICAgIGVsc2UKKyAgICAgIGVu dC51dF9ob3N0WzBdID0gJ1wwJzsKKyNlbmRpZiAvKiBOT19VVF9IT1NUICovCisKKyNpZm5kZWYg Tk9fVVRfUElECisgICAgaWYgKCFzdHJjbXAgKGxpbmUsICIvZGV2L2NvbnNvbGUiKSkgeworCWNo YXIgKiBzID0gTlVMTDsKKworI2lmZGVmIHN1bgorI2lmZGVmIF9fU1ZSNAorCXMgPSAiY28iOwor I2Vsc2UKKwlzID0gImNvbnMiOworI2VuZGlmIC8qIF9fU1ZSNCAqLworI2Vsc2UKKwlzID0gImNv bnMiOworI2VuZGlmIC8qIHN1biAqLworCisJc3RybmNweShlbnQudXRfaWQsIHMsIDQpOworCisg ICAgfSBlbHNlIHsKKworCXRtcHggPSBsaW5lICsgc3RybGVuKGxpbmUpLTE7CisJaWYgKCoodG1w eC0xKSAhPSAnLycpIHRtcHgtLTsJLyogbGFzdCAyIGNoYXJzIHVubGVzcyBpdCdzIGEgJy8nICov CisjaWZkZWYgX19ocHV4CisJY2tzdHJuY3B5KHV0bXBfaWQsIHRtcHgsIDUpOworI2Vsc2UKKwlj a21ha21zZyh1dG1wX2lkLDUsImtsIix0bXB4LE5VTEwsTlVMTCk7CisjZW5kaWYgLyogX19ocHV4 ICovCisJc3RybmNweShlbnQudXRfaWQsIHV0bXBfaWQsIHNpemVvZihlbnQudXRfaWQpKTsKKyAg ICB9CisgICAgc3RybmNweShlbnQudXRfdXNlciwgdXNlcm5hbWUsIHNpemVvZihlbnQudXRfdXNl cikpOworCisjZWxzZQorCisgICAgc3RybmNweShlbnQudXRfbmFtZSwgdXNlcm5hbWUsIHNpemVv ZihlbnQudXRfbmFtZSkpOworCisjZW5kaWYgLyogTk9fVVRfUElEICovCisKKyAgICBpZiAodXNl cm5hbWVbMF0pCisgICAgICBzdHJuY3B5KHVzZXJidWYsIHVzZXJuYW1lLCBzaXplb2YodXNlcmJ1 ZikpOworICAgIGVsc2UKKyAgICAgIHVzZXJidWZbMF0gPSAnXDAnOworCisjaWZkZWYgSEFWRV9T RVRVVEVOVAorCisgICAgdXRtcG5hbWUoVVRNUF9GSUxFKTsKKyAgICBzZXR1dGVudCgpOworLyoK KyAgSWYgd2UgbmVlZCB0byBwcmVzZXJ2ZSB0aGUgdXNlciBuYW1lIGluIHRoZSB3dG1wIHN0cnVj dHVyZSBhbmQgT3VyIGZsYWdzCisgIHRlbGwgdXMgd2UgY2FuIG9idGFpbiBpdCBmcm9tIHRoZSB1 dG1wIGFuZCB3ZSBzdWNjZWVkIGluIG9idGFpbmluZyBpdCwgd2UKKyAgdGhlbiBzYXZlIHRoZSB1 dG1wIHN0cnVjdHVyZSB3ZSBvYnRhaW4sIHdyaXRlIG91dCB0aGUgdXRtcCBzdHJ1Y3R1cmUgYW5k CisgIGNoYW5nZSB0aGUgdXNlcm5hbWUgcG9pbnRlciBzbyBpdCBpcyB1c2VkIGJ5IHVwZGF0ZV93 dG1wLgorKi8KKworI2lmZGVmIFdUTVBfUkVRVUlSRVNfVVNFUk5BTUUKKyAgICBpZiAoKCF1c2Vy bmFtZVswXSkgJiYgKGZsYWdzJlBUWV9VVE1QX1VTRVJOQU1FX1ZBTElEKSAmJmxpbmUpIHsKKwlz dHJ1Y3QgdXRtcCAqdXRwdHI7CisJc3RybmNweSh1dC51dF9saW5lLCBsaW5lLCBzaXplb2YodXQu dXRfbGluZSkpOworCXV0cHRyID0gZ2V0dXRsaW5lKCZ1dCk7CisJaWYgKHV0cHRyKQorCSAgc3Ry bmNweSh1c2VyYnVmLHV0cHRyLT51dF91c2VyLHNpemVvZih1dC51dF91c2VyKSk7CisgICAgfQor I2VuZGlmIC8qIFdUTVBfUkVRVUlSRVNfVVNFUk5BTUUgKi8KKworICAgIHB1dHV0bGluZSgmZW50 KTsKKyAgICBlbmR1dGVudCgpOworCisjaWZkZWYgSEFWRV9TRVRVVFhFTlQKKyAgICBzZXR1dHhl bnQoKTsKKyNpZmRlZiBIQVZFX0dFVFVUTVBYCisgICAgZ2V0dXRtcHgoJmVudCwgJnV0eCk7Cisj ZWxzZSAvKiBIQVZFX0dFVFVUTVBYICovCisgICAgLyogRm9yIHBsYXRmb3JtcyBsaWtlIEhQVVgg YW5kIERlYyBVbml4IHdoaWNoIGRvbid0IGhhdmUgZ2V0dXRtcHggKi8KKyAgICBzdHJuY3B5KHV0 eC51dF91c2VyLCBlbnQudXRfdXNlciwgc2l6ZW9mKGVudC51dF91c2VyKSk7CisgICAgc3RybmNw eSh1dHgudXRfaWQsIGVudC51dF9pZCwgc2l6ZW9mKGVudC51dF9pZCkpOworICAgIHN0cm5jcHko dXR4LnV0X2xpbmUsIGVudC51dF9saW5lLCBzaXplb2YoZW50LnV0X2xpbmUpKTsKKyAgICB1dHgu dXRfcGlkID0gcGlkOwkJLyoga2x1ZGdlIGZvciBJcml4LCBldGMuIHRvIGF2b2lkIHRydW5jLiAq LworICAgIHV0eC51dF90eXBlID0gZW50LnV0X3R5cGU7CisjaWZkZWYgVVRfRVhJVF9TVFJVQ1RV UkVfRElGRkVSCisgICAgdXR4LnV0X2V4aXQudXRfZXhpdCA9IGVudC51dF9leGl0LmVfZXhpdDsK KyNlbHNlIC8qIFVUX0VYSVRfU1RSVUNUVVJFX0RJRkZFUiAqLworLyogS0xVREdFIGZvciBub3c7 IGV2ZW50dWFsbHkgdGhpcyB3aWxsIGJlIGEgZmVhdHVyZSB0ZXN0Li4uIFNlZSBQUiNbNDBdICov CisjaWZkZWYgX19ocHV4CisgICAgdXR4LnV0X2V4aXQuX19lX3Rlcm1pbmF0aW9uID0gZW50LnV0 X2V4aXQuZV90ZXJtaW5hdGlvbjsKKyAgICB1dHgudXRfZXhpdC5fX2VfZXhpdCA9IGVudC51dF9l eGl0LmVfZXhpdDsKKyNlbHNlIC8qIF9faHB1eCAqLworICAgIC8qIFhYWCBkbyBub3RoaW5nIGZv ciBub3c7IHdlIGRvbid0IGV2ZW4ga25vdyB0aGUgc3RydWN0IG1lbWJlciBleGlzdHMgKi8KKyNl bmRpZiAvKiBfX2hwdXggKi8KKyNlbmRpZiAvKiBVVF9FWElUX1NUUlVDVFVSRV9ESUZGRVIgKi8K KyAgICB1dHgudXRfdHYudHZfc2VjID0gZW50LnV0X3RpbWU7CisgICAgdXR4LnV0X3R2LnR2X3Vz ZWMgPSAwOworI2VuZGlmIC8qIEhBVkVfR0VUVVRNUFggKi8KKyAgICBpZiAoaG9zdCkKKyAgICAg IHN0cm5jcHkodXR4LnV0X2hvc3QsIGhvc3QsIHNpemVvZih1dHgudXRfaG9zdCkpOworICAgIGVs c2UKKyAgICAgIHV0eC51dF9ob3N0WzBdID0gMDsKKyAgICBwdXR1dHhsaW5lKCZ1dHgpOworICAg IGVuZHV0eGVudCgpOworI2VuZGlmIC8qIEhBVkVfU0VUVVRYRU5UICovCisKKyNlbHNlIC8qIEhB VkVfU0VUVVRFTlQgKi8KKyAgICBpZiAoZmxhZ3MmUFRZX1RUWVNMT1RfVVNBQkxFKSB7CisJdHR5 ID0gdHR5c2xvdCgpOworICAgIH0gZWxzZSB7CisJaW50IGxjOworCXR0eSA9IC0xOworCWlmICgo ZmQgPSBvcGVuKFVUTVBfRklMRSwgT19SRFdSKSkgPCAwKQorCSAgcmV0dXJuKGVycm5vKTsKKwlm b3IgKGxjID0gMDsKKwkgICAgIGxzZWVrKGZkLCAob2ZmX3QpKGxjICogc2l6ZW9mKHN0cnVjdCB1 dG1wKSksIFNFRUtfU0VUKSAhPSAtMTsKKwkgICAgIGxjKysKKwkgICAgICkgeworCSAgICBpZiAo cmVhZChmZCwKKwkJICAgICAoY2hhciAqKSZ1dCwKKwkJICAgICBzaXplb2Yoc3RydWN0IHV0bXAp CisJCSAgICAgKSAhPSBzaXplb2Yoc3RydWN0IHV0bXApCisJCSkKKwkgICAgICBicmVhazsKKwkg ICAgaWYgKHN0cm5jbXAodXQudXRfbGluZSwgZW50LnV0X2xpbmUsIHNpemVvZih1dC51dF9saW5l KSkgPT0gMCkgeworCQl0dHkgPSBsYzsKKyNpZmRlZiBXVE1QX1JFUVVJUkVTX1VTRVJOQU1FCisJ CWlmICghdXNlcm5hbWUmJihmbGFncyZQVFlfVVRNUF9VU0VSTkFNRV9WQUxJRCkpCisJCSAgc3Ry bmNweSh1c2VyYnVmLCB1dC51dF91c2VyLCBzaXplb2YodXQudXRfdXNlcikpOworI2VuZGlmIC8q IFdUTVBfUkVRVUlSRVNfVVNFUk5BTUUgKi8KKwkJYnJlYWs7CisJICAgIH0KKwl9CisJY2xvc2Uo ZmQpOworICAgIH0KKyAgICBpZiAodHR5ID4gMCAmJiAoZmQgPSBvcGVuKFVUTVBfRklMRSwgT19X Uk9OTFksIDApKSA+PSAwKSB7CisJbHNlZWsoZmQsIChvZmZfdCkodHR5ICogc2l6ZW9mKHN0cnVj dCB1dG1wKSksIFNFRUtfU0VUKTsKKwl3cml0ZShmZCwgKGNoYXIgKikmZW50LCBzaXplb2Yoc3Ry dWN0IHV0bXApKTsKKwljbG9zZShmZCk7CisgICAgfQorI2VuZGlmIC8qIEhBVkVfU0VUVVRFTlQg Ki8KKworICAgIC8qIERvbid0IHJlY29yZCBMT0dJTl9QUk9DRVNTIGVudHJpZXMuICovCisgICAg aWYgKHByb2Nlc3NfdHlwZSA9PSBQVFlfTE9HSU5fUFJPQ0VTUykKKyAgICAgIHJldHVybigwKTsK KyAgICBlbHNlCisgICAgICByZXR1cm4ocHR5aW50X3VwZGF0ZV93dG1wKCZlbnQsIGhvc3QsIHVz ZXJidWYpKTsKK30KKyNpZm5kZWYgV1RNUF9GSUxFCisjaWZkZWYgX1BBVEhfV1RNUAorI2RlZmlu ZSBXVE1QX0ZJTEUgX1BBVEhfV1RNUAorI2VuZGlmIC8qIF9QQVRIX1dUTVAgKi8KKyNlbmRpZiAv KiBXVE1QX0ZJTEUgKi8KKworI2lmbmRlZiBXVE1QWF9GSUxFCisjaWZkZWYgX1BBVEhfV1RNUFgK KyNpZmRlZiBIQVZFX1VQRFdUTVBYCisjZGVmaW5lIFdUTVBYX0ZJTEUgX1BBVEhfV1RNUFgKKyNl bmRpZiAvKiBIQVZFX1VQRFdUTVBYICovCisjZW5kaWYgLyogX1BBVEhfV1RNUFggKi8KKyNlbmRp ZiAvKiBXVE1QWF9GSUxFICovCisKKy8qIElmIGl0IGlzICpzdGlsbCogbWlzc2luZywgYXNzdW1l IC91c3IvYWRtL3d0bXAgKi8KKworI2lmbmRlZiBXVE1QX0ZJTEUKKyNkZWZpbmUJV1RNUF9GSUxF ICIvdXNyL2FkbS93dG1wIgorI2VuZGlmIC8qIFdUTVBfRklMRSAqLworCisjaWZkZWYgQ09NTUVO VAorLyogVGhlIGZvbGxvd2luZyB0ZXN0IGNhbiBub3QgYmUgbWFkZSBwb3J0YWJseSAqLworCisv KiAjaWYgZGVmaW5lZChfX0dMSUJDX18pICYmIChfX0dMSUJDX18gPj0gMikgJiYgKF9fR0xJQkNf TUlOT1JfXyA+PSAxKSAqLworLyoKKyAgVGhpcyBpcyB1Z2x5LCBidXQgdGhlIGxhY2sgb2Ygc3Rh bmRhcmRpemF0aW9uIGluIHRoZSB1dG1wL3V0bXB4IHNwYWNlLCBhbmQKKyAgd2hhdCBnbGliYyBp bXBsZW1lbnRzIGFuZCBkb2Vzbid0IG1ha2UgYXZhaWxhYmxlLCBpcyBldmVuIHdvcnNlLgorKi8K Ky8qICN1bmRlZiBIQVZFX1VQRFdUTVBYICovCS8qIERvbid0IHVzZSB1cGR3dG1weCBmb3IgZ2xp YmMgMi4xICovCisvKiAjZW5kaWYgKi8gLyogX19HTElCQ19fIGV0YyAqLworCisjZWxzZSAgLyog Q09NTUVOVCAqLworCisjaWZkZWYgX19HTElCQ19fCisjdW5kZWYgSEFWRV9VUERXVE1QWAkJLyog RG9uJ3QgdXNlIHVwZHd0bXB4IGZvciBnbGliYyBwZXJpb2QgKi8KKyNlbmRpZiAvKiBfX0dMSUJD X18gKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisKK2xvbmcKK3B0eWludF91cGRhdGVfd3RtcChl bnQsaG9zdCx1c2VyKSBzdHJ1Y3QgdXRtcCAqZW50OyBjaGFyICpob3N0OyBjaGFyICp1c2VyOyB7 CisgICAgc3RydWN0IHV0bXAgdXQ7CisgICAgc3RydWN0IHN0YXQgc3RhdGI7CisgICAgaW50IGZk OworICAgIHRpbWVfdCB1dHRpbWU7CisjaWZkZWYgSEFWRV9VUERXVE1QWAorICAgIHN0cnVjdCB1 dG1weCB1dHg7CisKKyAgICBnZXR1dG1weChlbnQsICZ1dHgpOworICAgIGlmIChob3N0KQorICAg ICAgc3RybmNweSh1dHgudXRfaG9zdCwgaG9zdCwgc2l6ZW9mKHV0eC51dF9ob3N0KSApOworICAg IGVsc2UKKyAgICAgIHV0eC51dF9ob3N0WzBdID0gMDsKKyAgICBpZiAodXNlcikKKyAgICAgIHN0 cm5jcHkodXR4LnV0X3VzZXIsIHVzZXIsIHNpemVvZih1dHgudXRfdXNlcikpOworICAgIHVwZHd0 bXB4KFdUTVBYX0ZJTEUsICZ1dHgpOworI2VuZGlmIC8qIEhBVkVfVVBEV1RNUFggKi8KKworI2lm ZGVmIEhBVkVfVVBEV1RNUAorI2lmbmRlZiBIQVZFX1VQRFdUTVBYCisgICAgLyogVGhpcyBpcyBh bHJlYWR5IHBlcmZvcm1lZCBieXVwZHd0bXB4IGlmIHByZXNlbnQuKi8KKyAgICB1cGR3dG1wKFdU TVBfRklMRSwgZW50KTsKKyNlbmRpZiAvKiBIQVZFX1VQRFdUTVBYKi8KKyNlbHNlIC8qIEhBVkVf VVBEV1RNUCAqLworCisgICAgaWYgKChmZCA9IG9wZW4oV1RNUF9GSUxFLCBPX1dST05MWXxPX0FQ UEVORCwgMCkpID49IDApIHsKKwlpZiAoIWZzdGF0KGZkLCAmc3RhdGIpKSB7CisJICAgIG1lbXNl dCgoY2hhciAqKSZ1dCwgMCwgc2l6ZW9mKHV0KSk7CisjaWZkZWYgX19ocHV4CisJICAgIHN0cm5j cHkodXQudXRfaWQsIGVudC0+dXRfaWQsIHNpemVvZiAodXQudXRfaWQpKTsKKyNlbmRpZiAvKiBf X2hwdXggKi8KKwkgICAgc3RybmNweSh1dC51dF9saW5lLCBlbnQtPnV0X2xpbmUsIHNpemVvZih1 dC51dF9saW5lKSk7CisJICAgIHN0cm5jcHkodXQudXRfbmFtZSwgZW50LT51dF9uYW1lLCBzaXpl b2YodXQudXRfbmFtZSkpOworI2lmbmRlZiBOT19VVF9IT1NUCisJICAgIHN0cm5jcHkodXQudXRf aG9zdCwgZW50LT51dF9ob3N0LCBzaXplb2YodXQudXRfaG9zdCkpOworI2VuZGlmIC8qIE5PX1VU X0hPU1QgKi8KKworCSAgICB0aW1lKCZ1dHRpbWUpOworCSAgICB1dC51dF90aW1lID0gdXR0aW1l OworCisjaWZkZWYgSEFWRV9HRVRVVEVOVAorI2lmZGVmIFVTRVJfUFJPQ0VTUworCSAgICBpZiAo ZW50LT51dF9uYW1lKSB7CisJCWlmICghdXQudXRfcGlkKQorCQkgIHV0LnV0X3BpZCA9IGdldHBp ZCgpOworI2lmbmRlZiBfX2hwdXgKKwkJdXQudXRfdHlwZSA9IFVTRVJfUFJPQ0VTUzsKKyNlbHNl ICAvKiBfX2hwdXggKi8KKwkJdXQudXRfdHlwZSA9IGVudC0+dXRfdHlwZTsKKyNlbmRpZiAvKiBf X2hwdXggKi8KKworCSAgICB9IGVsc2UgeworCisjaWZkZWYgRU1QVFkKKwkJdXQudXRfdHlwZSA9 IEVNUFRZOworI2Vsc2UKKwkJdXQudXRfdHlwZSA9IERFQURfUFJPQ0VTUzsgLyogRm9yIExpbnV4 IGJyb2tlbm5lc3MqLworI2VuZGlmIC8qIEVNUFRZICovCisKKwkgICAgfQorI2VuZGlmIC8qIFVT RVJfUFJPQ0VTUyAqLworI2VuZGlmIC8qIEhBVkVfR0VUVVRFTlQgKi8KKworCSAgICBpZiAod3Jp dGUoZmQsIChjaGFyICopJnV0LCBzaXplb2Yoc3RydWN0IHV0bXApKSAhPQorCQlzaXplb2Yoc3Ry dWN0IHV0bXApKQorI2lmbmRlZiBDT0hFUkVOVAorCSAgICAgIGZ0cnVuY2F0ZShmZCwgc3RhdGIu c3Rfc2l6ZSk7CisjZWxzZQorCSAgICAgIGNoc2l6ZShmZCwgc3RhdGIuc3Rfc2l6ZSk7CisjZW5k aWYgLyogQ09IRVJFTlQgKi8KKwl9CisJY2xvc2UoZmQpOworICAgIH0KKyNlbmRpZiAvKiBIQVZF X1VQRFdUTVAgKi8KKyAgICByZXR1cm4oMCk7IC8qIG5vIGN1cnJlbnQgZmFpbHVyZSBjYXNlczsg ZmlsZSBub3QgZm91bmQgaXMgbm90IGZhaWx1cmUhICovCit9CisjZW5kaWYgLyogV0FOVF9VVE1Q ICovCisKKy8qIFRoaXMgaXMgZm9yIGFuY2llbnQgVW5peGVzIHRoYXQgZG9uJ3QgaGF2ZSB0aGVz ZSB0dHkgc3ltYm9scyBkZWZpbmVkLiAqLworCisjaWZuZGVmIFBFTkRJTgorI2RlZmluZSBQRU5E SU4gSUNBTk9OCisjZW5kaWYgLyogUEVORElOICovCisjaWZuZGVmIEZMVVNITworI2RlZmluZSBG TFVTSE8gSUNBTk9OCisjZW5kaWYgLyogRkxVU0hPICovCisjaWZuZGVmIElNQVhCRUwKKyNkZWZp bmUgSU1BWEJFTCBJQ0FOT04KKyNlbmRpZiAvKiBJTUFYQkVMICovCisjaWZuZGVmIEVYVFBST0MK KyNkZWZpbmUgRVhUUFJPQyBJQ0FOT04KKyNlbmRpZiAvKiBFWFRQUk9DICovCisKK3N0YXRpYyBj aGFyIFhsaW5lWzE3XSA9IHsgMCwgMCB9OworLyoKKyAgZ2V0cHR5c2xhdmUoKQorICBPcGVuIHRo ZSBzbGF2ZSBzaWRlIG9mIHRoZSBwdHksIGFuZCBkbyBhbnkgaW5pdGlhbGl6YXRpb24gdGhhdCBp cyBuZWNlc3NhcnkuCisgIFRoZSByZXR1cm4gdmFsdWUgZmQgaXMgYSBmaWxlIGRlc2NyaXB0b3Ig Zm9yIHRoZSBzbGF2ZSBzaWRlLgorICBmYyA9IGZ1bmN0aW9uIGNvZGUgZnJvbSBkb19wdHkoKSAo cS52LikKKyovCitpbnQKK2dldHB0eXNsYXZlKGZkLCBmYykgaW50ICogZmQsIGZjOyB7CisgICAg aW50IHR0eWZkOworICAgIGludCB0ID0gLTE7CisgICAgbG9uZyByZXR2YWw7CisjaWZkZWYgVElP Q0dXSU5TWgorICAgIHN0cnVjdCB3aW5zaXplIHdzOworICAgIGV4dGVybiBpbnQgY21kX3Jvd3Ms IGNtZF9jb2xzOworI2VuZGlmIC8qIFRJT0NHV0lOU1ogKi8KKworICAgIHR0eWZkID0gKmZkOwor ICAgIGRlYnVnKEYxMTEsImdldHB0eXNsYXZlKCkiLCJ0dHlmZCIsdHR5ZmQpOworICAgIC8qCisg ICAgICogT3BlbmluZyB0aGUgc2xhdmUgc2lkZSBtYXkgY2F1c2UgaW5pdGlsaXphdGlvbiBvZiB0 aGUKKyAgICAgKiBrZXJuZWwgdHR5IHN0cnVjdHVyZS4gIFdlIG5lZWQgcmVtZW1iZXIgdGhlIHN0 YXRlIG9mOgorICAgICAqICAgICAgaWYgbGluZW1vZGUgd2FzIHR1cm5lZCBvbgorICAgICAqICAg ICAgdGVybWluYWwgd2luZG93IHNpemUKKyAgICAgKiAgICAgIHRlcm1pbmFsIHNwZWVkCisgICAg ICogc28gdGhhdCB3ZSBjYW4gcmVzZXQgdGhlbSBpZiB3ZSBuZWVkIHRvLgorICAgICAqLworICAg IGlmICgocmV0dmFsID0gcHR5X29wZW5fc2xhdmUoWGxpbmUsICZ0LCBmYykpICE9IDApIHsKKwlw ZXJyb3IoWGxpbmUpOworCW1zZysrOworICAgICAgICBkZWJ1ZyhGMTExLCJnZXRwdHlzbGF2ZSgp IiwiVW5hYmxlIHRvIG9wZW4gc2xhdmUiLHJldHZhbCk7CisgICAgICAgIHJldHVybigtMSk7Cisg ICAgfQorICAgIGRlYnVnKEYxMTEsImdldHB0eXNsYXZlIiwidCIsdCk7CisjaWZkZWYgSU5JVF9T UFRZCisgICAgc3B0eSA9IHQ7CisgICAgZGVidWcoRjExMSwiZ2V0cHR5c2xhdmUiLCJzcHR5Iixz cHR5KTsKKyNlbmRpZiAvKiBJTklUX1NQVFkgKi8KKyNpZmRlZiBTVFJFQU1TUFRZCisgICAgaWYg KGlvY3RsKHQsSV9QVVNILCJwY2t0IikgPCAwKSB7CisgICAgICAgIGRlYnVnKEYxMTEsImdldHB0 eXNsYXZlKCkiLCJpb2N0bChJX1BVU0gpIGZhaWxlZCIsZXJybm8pOworI2lmbmRlZiBfQUlYCisg ICAgICAgIGZhdGFsKCJJX1BVU0ggcGNrdCIpOworI2VuZGlmIC8qIF9BSVggKi8KKyAgICB9Cisj ZW5kaWYgLyogU1RSRUFNU1BUWSAqLworCisgICAgLyogU2V0IHVwIHRoZSB0dHkgbW9kZXMgYXMg d2UgbGlrZSB0aGVtIHRvIGJlLiAqLworI2lmZGVmIENPTU1FTlQKKyAgICAvKiBPcmlnaW5hbGx5 IGxpa2UgdGhpcy4uLiBCdXQgdGhpcyBpcyB0aGUgbWFzdGVyIC0gd2Ugd2FudCB0aGUgc2xhdmUg Ki8KKyAgICAvKiBBbnl3YXksIHRoaXMgZmFpbHMgb24gU29sYXJpcyBhbmQgcHJvYmFibHkgb3Ro ZXIgU3lzdGVtIFYgT1MncyAqLworICAgIGluaXRfdGVybWJ1Zih0dHlmZCk7CisjZWxzZQorICAg IGluaXRfdGVybWJ1Zih0KTsKKyNlbmRpZgkvKiBDT01NRU5UICovCisjaWZkZWYgVElPQ0dXSU5T WgorICAgIGlmIChjbWRfcm93cyB8fCBjbWRfY29scykgeworICAgICAgICBtZW1zZXQoKGNoYXIg Kikmd3MsIDAsIHNpemVvZih3cykpOworICAgICAgICB3cy53c19jb2wgPSBjbWRfY29sczsKKyAg ICAgICAgd3Mud3Nfcm93ID0gY21kX3Jvd3M7CisJZGVidWcoRjEwMSwiZ2V0cHR5c2xhdmUoKSBk b2luZyBUSU9DU1dJTlNaLi4uIiwiIix0KTsKKyAgICAgICAgaW9jdGwodCwgVElPQ1NXSU5TWiwg KGNoYXIgKikmd3MpOworICAgIH0KKyNlbmRpZiAvKiBUSU9DR1dJTlNaICovCisKKyAgICAvKiBG b3IgZXh0ZXJuYWwgcHJvdG9jb2xzLCBwdXQgdGhlIHB0eSBpbiBuby1lY2hvIG1vZGUgKi8KKyAg ICBpZiAoZmMgPT0gMSkgeworCWRlYnVnKEYxMDAsImdldHB0eXNsYXZlKCkgc2V0dGluZyByYXdt b2RlIiwiIiwwKTsKKwkvKiBpZmxhZ3MgKi8KKwl0ZXJtYnVmLmNfaWZsYWcgJj0gfihQQVJNUkt8 SVNUUklQfEJSS0lOVHxJTkxDUnxJR05DUnxJQ1JOTCk7CisJdGVybWJ1Zi5jX2lmbGFnICY9IH4o SU5QQ0t8SUdOUEFSfElNQVhCRUx8SVhBTll8SVhPTnxJWE9GRik7CisJdGVybWJ1Zi5jX2lmbGFn IHw9IElHTkJSSzsKKyNpZmRlZiBJVUNMQworCXRlcm1idWYuY19pZmxhZyAmPSB+SVVDTEM7Cisj ZW5kaWYgLyogSVVDTEMgKi8KKworCS8qIG9mbGFncyAqLworCXRlcm1idWYuY19vZmxhZyAmPSB+ T1BPU1Q7CisjaWZkZWYgT1hUQUJTCisJdGVybWJ1Zi5jX29mbGFnICY9IH5PWFRBQlM7CisjZW5k aWYgLyogT1hUQUJTICovCisjaWZkZWYgT05PQ1IKKwl0ZXJtYnVmLmNfb2ZsYWcgJj0gfk9OT0NS OworI2VuZGlmIC8qIE9OT0NSICovCisjaWZkZWYgT05MUkVUCisJdGVybWJ1Zi5jX29mbGFnICY9 IH5PTkxSRVQ7CisjZW5kaWYgLyogT05MUkVUICovCisjaWZkZWYgT05MQ1IKKwl0ZXJtYnVmLmNf b2ZsYWcgJj0gfk9OTENSOworI2VuZGlmIC8qIE9OTENSICovCisKKwkvKiBsZmxhZ3MgKi8KKwl0 ZXJtYnVmLmNfbGZsYWcgJj0gfkVDSE87CisjaWZkZWYgRUNIT0UKKwl0ZXJtYnVmLmNfbGZsYWcg Jj0gfkVDSE9FOworI2VuZGlmIC8qIEVDSE9FICovCisjaWZkZWYgRUNIT05MCisJdGVybWJ1Zi5j X2xmbGFnICY9IH5FQ0hPTkw7CisjZW5kaWYgLyogRUNIT05MICovCisjaWZkZWYgRUNIT1BSVAor CXRlcm1idWYuY19sZmxhZyAmPSB+RUNIT1BSVDsKKyNlbmRpZiAvKiBFQ0hPUFJUICovCisjaWZk ZWYgRUNIT0tFCisJdGVybWJ1Zi5jX2xmbGFnICY9IH5FQ0hPS0U7CisjZW5kaWYgLyogRUNIT0tF ICovCisjaWZkZWYgRUNIT0NUTAorCXRlcm1idWYuY19sZmxhZyAmPSB+RUNIT0NUTDsKKyNlbmRp ZiAvKiBFQ0hPQ1RMICovCisjaWZkZWYgQUxUV0VSQVNFCisJdGVybWJ1Zi5jX2xmbGFnICY9IH5B TFRXRVJBU0U7CisjZW5kaWYgLyogQUxUV0VSQVNFICovCisjaWZkZWYgRVhUUFJPQworCXRlcm1i dWYuY19sZmxhZyAmPSB+RVhUUFJPQzsKKyNlbmRpZiAvKiBFWFRQUk9DICovCisJdGVybWJ1Zi5j X2xmbGFnICY9IH4oSUNBTk9OfElTSUd8SUVYVEVOfFRPU1RPUHxGTFVTSE98UEVORElOKTsKKwor I2lmZGVmIE5PS0VSTklORk8KKwl0ZXJtYnVmLmNfbGZsYWcgfD0gTk9LRVJOSU5GTzsKKyNlbmRp ZgkvKiBOT0tFUk5JTkZPICovCisJLyogdGVybWJ1Zi5jX2xmbGFnIHw9IE5PRkxTSDsgKi8KKwl0 ZXJtYnVmLmNfbGZsYWcgJj0gfk5PRkxTSDsKKworCS8qIGNmbGFncyAqLworCXRlcm1idWYuY19j ZmxhZyAmPSB+KENTSVpFfFBBUkVOQnxQQVJPREQpOworCXRlcm1idWYuY19jZmxhZyB8PSBDUzh8 Q1JFQUQ7CisjaWZkZWYgVk1JTgorCXRlcm1idWYuY19jY1tWTUlOXSA9IDE7CisjZW5kaWYJLyog Vk1JTiAqLworICAgIH0gZWxzZSB7CQkJCS8qIFJlZ3VsYXIgaW50ZXJhY3RpdmUgdXNlICovCisJ ZGVidWcoRjEwMCwiZ2V0cHR5c2xhdmUoKSBzZXR0aW5nIGNvb2tlZCBtb2RlIiwiIiwwKTsKKwor CS8qIFNldHRpbmdzIGZvciBzZ3R0eSBiYXNlZCBzeXN0ZW1zICovCisKKyNpZm5kZWYgVVNFX1RF Uk1JTworCXRlcm1idWYuc2cuc2dfZmxhZ3MgfD0gQ1JNT0R8QU5ZUHxFQ0hPfFhUQUJTOworI2Vu ZGlmIC8qIFVTRV9URVJNSU8gKi8KKworI2lmbmRlZiBPWFRBQlMKKyNkZWZpbmUgT1hUQUJTIDAK KyNlbmRpZiAvKiBPWFRBQlMgKi8KKworCS8qIFNldHRpbmdzIGZvciBVTklDT1MgYW5kIEhQVVgg Ki8KKworI2lmZGVmIENSQVkKKwl0ZXJtYnVmLmNfb2ZsYWcgPSBPUE9TVHxPTkxDUnxUQUIzOwor CXRlcm1idWYuY19pZmxhZyA9IElHTlBBUnxJU1RSSVB8SUNSTkx8SVhPTjsKKwl0ZXJtYnVmLmNf bGZsYWcgPSBJU0lHfElDQU5PTnxFQ0hPfEVDSE9FfEVDSE9LOworCXRlcm1idWYuY19jZmxhZyA9 IEVYVEJ8SFVQQ0x8Q1M4OworI2Vsc2UgLyogQ1JBWSAqLworI2lmZGVmIEhQVVgKKwl0ZXJtYnVm LmNfb2ZsYWcgPSBPUE9TVHxPTkxDUnxUQUIzOworCXRlcm1idWYuY19pZmxhZyA9IElHTlBBUnxJ U1RSSVB8SUNSTkx8SVhPTjsKKwl0ZXJtYnVmLmNfbGZsYWcgPSBJU0lHfElDQU5PTnxFQ0hPfEVD SE9FfEVDSE9LOworCXRlcm1idWYuY19jZmxhZyA9IEVYVEJ8SFVQQ0x8Q1M4OworI2Vsc2UgLyog SFBVWCAqLworI2lmZGVmIFVTRV9URVJNSU8KKwkvKgorCSAgU2V0dGluZ3MgZm9yIGFsbCBvdGhl ciB0ZXJtaW9zL3Rlcm1pbyBiYXNlZCBzeXN0ZW1zLCBvdGhlciB0aGFuIAorCSAgNC40QlNELiAg SW4gNC40QlNEIHRoZSBrZXJuZWwgZG9lcyB0aGUgaW5pdGlhbCB0ZXJtaW5hbCBzZXR1cC4KKwkq LworI2lmZGVmIEJTRDQyCisjaWZuZGVmIEJTRDQ0CisJdGVybWJ1Zi5jX2xmbGFnIHw9IEVDSE98 SUNBTk9OfElFWFRFTnxJU0lHOworCXRlcm1idWYuY19vZmxhZyB8PSBPTkxDUnxPWFRBQlN8T1BP U1Q7CisJdGVybWJ1Zi5jX2lmbGFnIHw9IElDUk5MfElHTlBBUjsKKwl0ZXJtYnVmLmNfY2ZsYWcg fD0gSFVQQ0w7CisJdGVybWJ1Zi5jX2lmbGFnICY9IH5JWE9GRjsKKyNlbmRpZiAvKiBCU0Q0NCAq LworI2Vsc2UgLyogQlNENDIgKi8KKwl0ZXJtYnVmLmNfbGZsYWcgfD0gRUNIT3xJQ0FOT058SUVY VEVOfElTSUc7CisJdGVybWJ1Zi5jX29mbGFnIHw9IE9OTENSfE9YVEFCU3xPUE9TVDsKKwl0ZXJt YnVmLmNfaWZsYWcgfD0gSUNSTkx8SUdOUEFSOworCXRlcm1idWYuY19jZmxhZyB8PSBIVVBDTDsK Kwl0ZXJtYnVmLmNfaWZsYWcgJj0gfklYT0ZGOworI2VuZGlmIC8qIEJTRDQyICovCisjZW5kaWYg LyogVVNFX1RFUk1JTyAqLworI2VuZGlmIC8qIEhQVVggKi8KKyNlbmRpZiAvKiBDUkFZICovCisg ICAgfQorCisgICAgLyogU2V0IHRoZSB0dHkgbW9kZXMsIGFuZCBtYWtlIHRoaXMgb3VyIGNvbnRy b2xsaW5nIHR0eS4gKi8KKyNpZmRlZiBDT01NRU5UCisgICAgLyogQnV0IHRoaXMgaXMgdGhlIG1h c3RlciAtIHdlIHdhbnQgdGhlIHNsYXZlICovCisgICAgc2V0X3Rlcm1idWYodHR5ZmQpOworI2Vs c2UKKyAgICBzZXRfdGVybWJ1Zih0KTsKKyNlbmRpZgkvKiBDT01NRU5UICovCisKKyAgICBpZiAo dCAhPSAwKQorICAgICAgZHVwMih0LCAwKTsKKyAgICBpZiAodCAhPSAxKQorICAgICAgZHVwMih0 LCAxKTsKKyAgICBpZiAodCAhPSAyKSB7CisJaWYgKGZjID09IDApIHsKKwkgICAgZHVwMih0LCAy KTsKKwl9IGVsc2UgaWYgKGZjID09IDEpIHsKKwkgICAgLyogRm9yIGV4dGVybmFsIHByb3RvY29s cywgc2VuZCBzdGRlcnIgdG8gL2Rldi9udWxsICovCisjaWZkZWYgQ09NTUVOVAorCSAgICBpbnQg eHg7CisjaWZuZGVmIENPTU1FTlQKKwkgICAgY2hhciAqIHMgPSAiL2Rldi9udWxsIjsKKwkgICAg ZXJybm8gPSAwOworCSAgICB4eCA9IG9wZW4ocywgT19XUk9OTFkpOworI2Vsc2UKKwkgICAgY2hh ciAqIHMgPSAicHR5LmxvZyI7CisJICAgIGVycm5vID0gMDsKKwkgICAgeHggPSBvcGVuKHMsIE9f Q1JFQVQsIDA2NDQpOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKwkgICAgZGVidWcoRjExMSwiZ2V0 cHR5c2xhdmUgcmVkaXJlY3Qgc3RkZXJyIixzLGVycm5vKTsKKwkgICAgZHVwMih4eCwyKTsKKyNl bmRpZgkvKiBDT01NRU5UICovCisJfQorICAgIH0KKyAgICBpZiAodCA+IDIpCisgICAgICBjbG9z ZSh0KTsKKworICAgIGlmICh0dHlmZCA+IDIpIHsKKwljbG9zZSh0dHlmZCk7CisgICAgICAgIHR0 eWZkID0gLTE7CisJKmZkID0gdHR5ZmQ7CisgICAgfQorICAgIHJldHVybigwKTsKK30KKworI2lm ZGVmIEhBVkVfUFRZVFJBUAorLyoKKyAgVG8gYmUgY2FsbGVkIHRvIGRldGVybWluZSBpZiBhIHRy YXAgaXMgcGVuZGluZyBvbiBhIHB0eQorICBpZiBhbmQgb25seSBpZiBzZWxlY3QoKSBjYW5ub3Qg YmUgdXNlZC4KKyovCitpbnQKK3B0eV90cmFwX3BlbmRpbmcoZmQpIGludCBmZDsgeworICAgIGlu dCBwZW5kaW5nOworICAgIGludCByYzsKKworICAgIHJjID0gaW9jdGwoZmQsIFRJT0NUUkFQU1RB VFVTLCAoY2hhciAqKSZwZW5kaW5nLCBzaXplb2YocGVuZGluZykpOworICAgIGlmIChyYyA9PSAw KSB7CisgICAgICAgIGRlYnVnKEYxMDEsInB0eV90cmFwX3BlbmRpbmcoKSIsIiIscGVuZGluZyk7 CisgICAgICAgIHJldHVybihwZW5kaW5nKTsKKyAgICB9IGVsc2UgeworICAgICAgICBkZWJ1ZyhG MTExLCJwdHlfdHJhcF9wZW5kaW5nKCkiLCJpb2N0bCgpIGZhaWxlZCIscmMpOworICAgICAgICBy ZXR1cm4oLTEpOworICAgIH0KK30KKworLyoKKyAgVG8gYmUgY2FsbGVkIGFmdGVyIHNlbGVjdCgp IGhhcyByZXR1cm5lZCBpbmRpY2F0aW5nIHRoYXQgYW4gZXhjZXB0aW9uIGlzCisgIHdhaXRpbmcg b24gYSBwdHkuICBJdCBzaG91bGQgYmUgY2FsbGVkIHdpdGggdGhlIGZpbGUgZGVzY3JpcHRvciBv ZiB0aGUgcHR5LgorICBSZXR1cm5zIC0xIG9uIGVycm9yOyAwIGlmIHB0eSBpcyBzdGlsbCBvcGVu OyAxIGlmIHB0eSBoYXMgY2xvc2VkLgorKi8KK2ludAorcHR5X3RyYXBfaGFuZGxlcihmZCkgaW50 IGZkOyB7CisgICAgc3RydWN0IHJlcXVlc3RfaW5mbyByaTsKKworICAgIG1lbXNldCgmcmksMCxz aXplb2YocmkpKTsKKyAgICBpZiAoaW9jdGwoZmQsVElPQ1JFUUNIRUNLLChjaGFyICopJnJpLCBz aXplb2YocmkpKSAhPSAwKSB7CisgICAgICAgIGRlYnVnKEYxMTEsInB0eV90cmFwX2hhbmRsZXIo KSIsImlvY3RsKFRJT0NSRVFDSEVDSykgZmFpbGVkIixlcnJubyk7CisgICAgICAgIHJldHVybigt MSk7CisgICAgfQorICAgIHN3aXRjaCAocmkucmVxdWVzdCkgeworICAgICAgY2FzZSBUSU9DT1BF TjoKKyAgICAgICAgZGVidWcoRjExMCwicHR5X3RyYXBfaGFuZGxlcigpIiwiYW4gb3BlbigpIGNh bGwiLDApOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgVElPQ0NMT1NFOgorICAgICAgICBk ZWJ1ZyhGMTEwLCJwdHlfdHJhcF9oYW5kbGVyKCkiLCJhIGNsb3NlKCkgY2FsbCIsMCk7CisgICAg ICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgZGVidWcoRjExMCwicHR5X3RyYXBf aGFuZGxlcigpIiwiYW4gaW9jdGwoKSBjYWxsIiwwKTsKKyAgICAgICAgcmkuZXJybm9fZXJyb3Ig PSBFSU5WQUw7CisgICAgfQorICAgIGlmIChpb2N0bChmZCwgVElPQ1JFUVNFVCwgKGNoYXIgKikm cmksc2l6ZW9mKHJpKSkgIT0gMCkgeworICAgICAgICBkZWJ1ZyhGMTExLCJwdHlfdHJhcF9oYW5k bGVyKCkiLCJpb2N0bChUSU9DUkVRU0VUKSBmYWlsZWQiLGVycm5vKTsKKyAgICAgICAgcmV0dXJu KC0xKTsKKyAgICB9CisgICAgaWYgKHJpLnJlcXVlc3QgPT0gVElPQ0NMT1NFKQorICAgICAgcmV0 dXJuKDEpOworICAgIGVsc2UKKyAgICAgIHJldHVybigwKTsKK30KKyNlbmRpZiAvKiBIQVZFX1BU WVRSQVAgKi8KKworVk9JRAorZXhlY19jbWQocykgY2hhciAqIHM7IHsKKyAgICBzdHJ1Y3Qgc3Ry aW5nYXJyYXkgKiBxOworICAgIGNoYXIgKiogYXJncyA9IE5VTEw7CisKKyAgICBpZiAoIXMpIHJl dHVybjsKKyAgICBpZiAoISpzKSByZXR1cm47CisKKyAgICBxID0gY2tzcGxpdCgxLDAscyxOVUxM LCJcXCVbXSYkKy0vPSpeX0Ahe30vPD58LiN+J2A6Oz8iLDcsMCwwKTsKKyAgICBpZiAoIXEpIHJl dHVybjsKKworICAgIGFyZ3MgPSBxLT5hX2hlYWQgKyAxOworCisjaWZkZWYgREVCVUcgICAgCisg ICAgeworCWludCBpLCBuOworCW4gPSBxLT5hX3NpemU7CisJZm9yIChpID0gMDsgaSA8PSBuOyBp KyspIHsKKwkgICAgaWYgKCFhcmdzW2ldKSB7CisJCWRlYnVnKEYxMTEsImV4ZWNfY21kIGFyZyIs Ik5VTEwiLGkpOworCQlicmVhazsKKwkgICAgfSBlbHNlIHsKKwkJZGVidWcoRjExMSwiZXhlY19j bWQgYXJnIixhcmdzW2ldLGkpOworCQlpZiAoaSA9PSBuICYmIGFyZ3NbaV0pIHsKKwkJICAgIGRl YnVnKEYxMDEsImV4ZWNfY21kIFNVQlNUSVRVVElORyBOVUxMIiwiIixpKTsKKwkJICAgIGlmIChz dHJsZW4oYXJnc1tpXSkgPT0gMCkKKwkJICAgICAgbWFrZXN0cigmKGFyZ3NbaV0pLE5VTEwpOwor CQl9CisKKwkgICAgfQorCX0JICAgIAorICAgIH0KKyNlbmRpZgkvKiBERUJVRyAqLworCisgICAg ZXhlY3ZwKGFyZ3NbMF0sYXJncyk7Cit9CisKKy8qIEdldCBhIHB0eSwgc2NhbiBpbnB1dCBsaW5l cy4gKi8KKy8qIGZjID0gMCBmb3IgaW50ZXJhY3RpdmUgYWNjZXNzOyBmYyA9IDEgZm9yIHJ1bm5p bmcgZXh0ZXJuYWwgcHJvdG9jb2xzICovCisKK3N0YXRpYyBpbnQgcHR5X2ZjID0gLTE7CQkJLyog R2xvYmFsIGNvcHkgb2YgZmMgKi8KKworaW50Citkb19wdHkoZmQsIGNtZCwgZmMpIGludCAqIGZk OyBjaGFyICogY21kOyBpbnQgZmM7IHsKKyAgICBsb25nIHJldHZhbDsKKyAgICBpbnQgc3luY3Bp cGVbMl07CisgICAgaW50IGksIHR0eWZkOworI2lmZGVmIEhBVkVfUFRZVFJBUAorICAgIGludCB4 OworI2VuZGlmIC8qIEhBVkVfUFRZVFJBUCAqLworCisgICAgZGVidWcoRjEwMSwiQ0tVUFRZLkMg ZG9fcHR5IGZjIiwiIixmYyk7CisKKyAgICB0dHlmZCA9ICpmZDsKKworICAgIHB0eV9tYXN0ZXJf ZmQgPSAtMjsKKyAgICBwdHlfc2xhdmVfZmQgPSAtMjsKKyAgICBwdHlfZm9ya19waWQgPSAtMjsK KworICAgIG1zZyA9IDA7CQkJCS8qIE1lc3NhZ2UgY291bnRlciAqLworICAgIHB0eV9pbml0KCk7 CQkJCS8qIEZpbmQgYW4gYXZhaWxhYmxlIHB0eSB0byB1c2UuICovCisgICAgZXJybm8gPSAwOwor CisgICAgaWYgKChyZXR2YWwgPSBwdHlfZ2V0cHR5KCZ0dHlmZCwgWGxpbmUsIDIwKSkgIT0gMCkg eworCWlmIChtc2crKyA9PSAwKQorCSAgcGVycm9yKFhsaW5lKTsKKyAgICAgICAgZGVidWcoRjEx MSwiZG9fcHR5KCkiLCJwdHlfZ2V0cHR5KCkgZmFpbHMiLHJldHZhbCk7CisJKmZkID0gdHR5ZmQ7 CisgICAgICAgIHJldHVybigtMSk7CisgICAgfQorICAgICpmZCA9IHR0eWZkOworICAgIGRlYnVn KEYxMTEsImRvX3B0eSgpIFhsaW5lIixYbGluZSx0dHlmZCk7CisKKyNpZmRlZiBTSUdUVE9VCisv KgorICBJZ25vcmluZyBTSUdUVE9VIGtlZXBzIHRoZSBrZXJuZWwgZnJvbSBibG9ja2luZyB1cy4g IHdlIHR3ZWFrIHRoZSB0dHkgd2l0aAorICBhbiBpb2N0bCgpIChpbiB0dGlvY3QoKSBpbiAvc3lz L3R0eS5jIGluIGEgQlNEIGtlcm5lbCkKKyovCisgICAgIHNpZ25hbChTSUdUVE9VLCBTSUdfSUdO KTsKKyNlbmRpZiAvKiBTSUdUVE9VICovCisKKy8qIFN0YXJ0IHVwIHRoZSBjb21tYW5kIG9uIHRo ZSBzbGF2ZSBzaWRlIG9mIHRoZSB0ZXJtaW5hbCAqLworCisgICAgaWYgKHBpcGUoc3luY3BpcGUp IDwgMCkgeworICAgICAgICBkZWJ1ZyhGMTEwLCJkb19wdHkoKSIsInBpcGUoKSBmYWlscyIsMCk7 CisJcGVycm9yKCJwaXBlKCkgZmFpbGVkIik7CisJbXNnKys7CisgICAgICAgIGRlYnVnKEYxMTEs ImRvX3B0eSgpIiwicGlwZSBmYWlscyIsZXJybm8pOworICAgICAgICByZXR1cm4oLTEpOworICAg IH0KKyAgICBpZiAoKGkgPSBmb3JrKCkpIDwgMCkgeworICAgICAgICAvKiBYWFggLSBuZWVkIHRv IGNsZWFuIHVwIHRoZSBhbGxvY2F0ZWQgcHR5ICovCisgICAgICAgIHBlcnJvcigiZm9yaygpIGZh aWxlZCIpOworCW1zZysrOworICAgICAgICBkZWJ1ZyhGMTExLCJkb19wdHkoKSIsImZvcmsgZmFp bHMiLGVycm5vKTsKKyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9CisgICAgaWYgKGkpIHsgIC8q IFdhaXQgZm9yIGNoaWxkIGJlZm9yZSB3cml0aW5nIHRvIHBhcmVudCBzaWRlIG9mIHB0eS4gKi8K KyAgICAgICAgY2hhciBjOworI2lmZGVmIEhBVkVfUFRZVFJBUAorICAgICAgICBpbnQgb24gPSAx OworI2VuZGlmIC8qIEhBVkVfUFRZVFJBUCAqLworCWNsb3NlKHN5bmNwaXBlWzFdKTsKKwllcnJu byA9IDA7CisgICAgICAgIGlmIChyZWFkKHN5bmNwaXBlWzBdLCAmYywgMSkgPT0gMCkgeyAvKiBT bGF2ZSBzaWRlIGRpZWQgKi8KKwkgICAgcGVycm9yKCJQaXBlIHJlYWQoKSBmYWlsZWQiKTsKKwkg ICAgbXNnKys7CisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJkb19wdHkoKSIsIlNsYXZlIGZhaWxz IHRvIGluaXRpYWxpemUiLDApOworICAgICAgICAgICAgY2xvc2Uoc3luY3BpcGVbMF0pOworICAg ICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgfQorICAgICAgICBwdHlfZm9ya19waWQgPSBp OwkJLyogU28gd2UgY2FuIGNsZWFuIGl0IHVwIGxhdGVyICovCisJcHR5X2ZvcmtfYWN0aXZlID0g MTsKKwlkZWJ1ZyhGMTAxLCJkb19wdHkgcHR5X2ZvcmtfcGlkIiwiIixwdHlfZm9ya19waWQpOwor I2lmZGVmIEhBVkVfUFRZVFJBUAorICAgICAgICAvKiBIUFVYIGRvZXMgbm90IGFsbG93IHRoZSBt YXN0ZXIgdG8gcmVhZCBlbmQgb2YgZmlsZS4gICovCisgICAgICAgIC8qIFRoZXJlZm9yZSwgd2Ug bXVzdCBkZXRlcm1pbmUgdGhhdCB0aGUgc2xhdmUgaGFzIGJlZW4gKi8KKyAgICAgICAgLyogY2xv c2VkIGJ5IHRyYXBwaW5nIHRoZSBjYWxsIHRvIGNsb3NlKCkuICAgICAgICAgICAgICAqLworCWVy cm5vID0gMDsKKwl4ID0gaW9jdGwodHR5ZmQsIFRJT0NUUkFQLCAoY2hhciAqKSZvbik7CisJZGVi dWcoRjExMSwiZG9fcHR5IGlvY3RsKFRJT0NUUkFQKSIsY2tpdG9hKHgpLGVycm5vKTsKKyNlbmRp ZiAvKiBIQVZFX1BUWVRSQVAgKi8KKyAgICAgICAgZGVidWcoRjExMSwiZG9fcHR5KCkiLCJzeW5j aHJvbml6ZWQgLSBwdHlfZm9ya19waWQiLHB0eV9mb3JrX3BpZCk7CisgICAgICAgIGNsb3NlKHN5 bmNwaXBlWzBdKTsKKyAgICB9IGVsc2UgeworCWludCB4OworCWRlYnVnKEYxMDEsImRvX3B0eSBn ZXRwdHlzbGF2ZSB0dHlmZCBBIiwiIix0dHlmZCk7CisgICAgICAgIGRlYnVnKEYxMTAsImRvX3B0 eSgpIiwiU2xhdmUgc3RhcnRzIiwwKTsKKwl4ID0gZ2V0cHR5c2xhdmUoJnR0eWZkLGZjKTsKKwlk ZWJ1ZyhGMTAxLCJkb19wdHkgZ2V0cHR5c2xhdmUiLCIiLHgpOworICAgICAgICBpZiAoeCA9PSAw KSB7CisJICAgIGRlYnVnKEYxMDEsImRvX3B0eSBnZXRwdHlzbGF2ZSB0dHlmZCBCIiwiIix0dHlm ZCk7CisjaWZkZWYgV0FOVF9VVE1QCisgICAgICAgICAgICBwdHlfdXBkYXRlX3V0bXAoUFRZX1VT RVJfUFJPQ0VTUywKKwkJCSAgICBnZXRwaWQoKSwKKwkJCSAgICAiS0VSTUlUIiwKKwkJCSAgICBY bGluZSwKKwkJCSAgICBjbWQsCisJCQkgICAgUFRZX1RUWVNMT1RfVVNBQkxFCisJCQkgICAgKTsK KyNlbmRpZiAvKiBXQU5UX1VUTVAgKi8KKyAgICAgICAgICAgIC8qIE5vdGlmeSBvdXIgcGFyZW50 IHdlJ3JlIHJlYWR5IHRvIGNvbnRpbnVlLiovCisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJkb19w dHkoKSIsInNsYXZlIHN5bmNocm9uaXppbmciLDApOworICAgICAgICAgICAgd3JpdGUoc3luY3Bp cGVbMV0sInkiLDEpOworICAgICAgICAgICAgY2xvc2Uoc3luY3BpcGVbMF0pOworICAgICAgICAg ICAgY2xvc2Uoc3luY3BpcGVbMV0pOworCisJICAgIGRlYnVnKEYxMTAsImRvX3B0eSBjbWQiLGNt ZCwiIik7CisgICAgICAgICAgICBleGVjX2NtZChjbWQpOworICAgICAgICAgICAgZGVidWcoRjEx MSwiZG9fcHR5KCkiLCJleGVjX2NtZCgpIHJldHVybnMgLSB3aHk/IixlcnJubyk7CisgICAgICAg IH0KKwkqZmQgPSB0dHlmZDsKKyAgICAgICAgZGVidWcoRjExMCwiZG9fcHR5KCkiLCJnZXRwdHlz bGF2ZSgpIGZhaWxzIC0gZXhpdGluZyIsMCk7CisgICAgICAgIGV4aXQoMSk7CisgICAgfQorICAg ICpmZCA9IHR0eWZkOworICAgIHB0eV9mYyA9IGZjOworICAgIHJldHVybihnZXRwaWQoKSk7Cit9 IC8qIGVuZCBvZiBkb19wdHkoKSAqLworCisKK1ZPSUQKK2VuZF9wdHkoKSB7CisgICAgbXNnID0g MDsJCQkJLyogTWVzc2FnZSBjb3VudGVyICovCisgICAgZGVidWcoRjEwMSwiZW5kX3B0eSBwdHlf Zm9ya19waWQiLCIiLHB0eV9mb3JrX3BpZCk7CisgICAgaWYgKFhsaW5lWzBdICYmIHB0eV9mb3Jr X3BpZCA+PSAwKSB7CisgICAgICAgIHB0eV9jbGVhbnVwKFhsaW5lLHB0eV9mb3JrX3BpZCwxKTsK KyAgICAgICAgWGxpbmVbMF0gPSAnXDAnOworICAgICAgICBwdHlfZm9ya19waWQgPSAtMTsKKwlw dHlfZm9ya19hY3RpdmUgPSAwOworCWRlYnVnKEYxMDEsImVuZF9wdHkgcHR5X2ZvcmtfYWN0aXZl IiwiIixwdHlfZm9ya19hY3RpdmUpOworICAgIH0KKyAgICBwdHlfZmMgPSAtMTsKK30KKyNlbmRp ZiAvKiBORVRQVFkgKi8KCmRpZmYgLS1naXQgYS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1p dC05LjAuMzAyL2NrdXB0eS5oIGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMw Mi9ja3VwdHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzRjNTA4Ci0t LSAvZGV2L251bGwKKysrIGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9j a3VwdHkuaApAQCAtMCwwICsxLDE5MyBAQAorLyogQyBLIFUgUCBUIFkgLiBIICAtLSAgSW5jbHVk ZXMgYW5kIGRlZmluaXRpb25zIGZvciBja3VwdHkuYyAgKi8KKworLyoKKyAgQ29weXJpZ2h0IDE5 OTUgYnkgdGhlIE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kuCisKKyAgTW9k aWZpZWQgZm9yIHVzZSBpbiBDLUtlcm1pdCBieToKKworICBKZWZmcmV5IEUgQWx0bWFuIDxqYWx0 bWFuQHNlY3VyZS1lbmRwb2ludHMuY29tPgorICAgIFNlY3VyZSBFbmRwb2ludHMgSW5jLiwgTmV3 IFlvcmsgQ2l0eQorICBOb3ZlbWJlciAxOTk5CisqLworI2lmbmRlZiBfX1BUWV9JTlRfSF9fCisj aW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKKy8qICNkZWZpbmUgV0FOVF9VVE1QICovCisvKiBXZSBk b24ndCB3YW50IGFsbCB0aGUgdXRtcC93dG1wIHN0dWZmICovCisKKyNpZmRlZiBXQU5UX1VUTVAK KyNpZmRlZiBIQVZFX1VUTVBfSAorI2luY2x1ZGUgPHV0bXAuaD4KKyNlbmRpZiAvKiBIQVZFX1VU TVBfSCAqLworI2lmZGVmIEhBVkVfVVRNUFhfSAorI2luY2x1ZGUgPHV0bXB4Lmg+CisjZW5kaWYg LyogSEFWRV9VVE1QWF9IICovCisjZW5kaWYgLyogV0FOVF9VVE1QICovCisKKyNpZmRlZiBIQVZF X1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYgLyogSEFWRV9VTklTVERfSCAq LworI2lmZGVmIF9fU0NPX18KKyNpbmNsdWRlIDxzeXMvdW5pc3RkLmg+CisjZW5kaWYgLyogX19T Q09fXyAqLworI2lmZGVmIEhBVkVfU1RETElCX0gKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNlbmRp ZiAvKiBIQVZFX1NURExJQl9IICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaW5jbHVkZSA8 c3lzL3N0YXQuaD4KKyNpZm5kZWYgU1VOT1M0MQorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2Vu ZGlmCS8qIFNVTk9TNDEgKi8KKyNpbmNsdWRlIDxzeXMvZmlsZS5oPgorI2luY2x1ZGUgPHN5cy90 aW1lLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUg PG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHB3ZC5oPgorCisj aWZkZWYgSEFWRV9TWVNfTEFCRUxfSAorLyogb25seSBTdW5PUyA0PyAqLworI2luY2x1ZGUgPHN5 cy9sYWJlbC5oPgorI2luY2x1ZGUgPHN5cy9hdWRpdC5oPgorI2luY2x1ZGUgPHB3ZGFkai5oPgor I2VuZGlmIC8qIEhBVkVfU1lTX0xBQkVMX0ggKi8KKworI2luY2x1ZGUgPHNpZ25hbC5oPgorCisj aWZkZWYgSFBVWAorI2luY2x1ZGUgPHN5cy9wdHlpby5oPgorI2VuZGlmIC8qIEhQVVggKi8KKyNp ZmRlZiBzeXN2aW1wCisjaW5jbHVkZSA8Y29tcGF0Lmg+CisjZW5kaWYgLyogc3lzdmltcCAqLwor CisjaWZkZWYgQ09NTUVOVAorLyogSSBkb24ndCB0aGluayB3ZSBhY3R1YWxseSB1c2UgdGhpcyBm b3IgYW55dGhpbmcgKi8KKy8qIGFuZCBpdCBraWxscyBTbGFja3dhcmUgYnVpbGRzLCB3aGVyZSB0 aGVyZSBpcyBubyBzZWxlY3QuaC4gKi8KKyNpZm5kZWYgTk9fU1lTX1NFTEVDVF9ICisjaWZkZWYg SEFWRV9TWVNfU0VMRUNUX0gKKyNpbmNsdWRlIDxzeXMvc2VsZWN0Lmg+CisjZW5kaWYgLyogSEFW RV9TWVNfU0VMRUNUX0ggKi8KKyNlbmRpZiAvKiBOT19TWVNfU0VMRUNUX0ggKi8KKyNlbmRpZiAv KiBDT01NRU5UICovCisKKyNpZmRlZiBIQVZFX1NUUkVBTVMKKyNpbmNsdWRlIDxzeXMvc3RyZWFt Lmg+CisjaW5jbHVkZSA8c3lzL3N0cm9wdHMuaD4KKyNlbmRpZiAvKiBIQVZFX1NUUkVBTVMgKi8K KworI2lmZGVmIFBPU0lYX1RFUk1JT1MKKyNpZm5kZWYgdWx0cml4CisjaW5jbHVkZSA8dGVybWlv cy5oPgorI2Vsc2UKKyNpbmNsdWRlIDxzZ3R0eS5oPgorI2VuZGlmIC8qIHVsdHJpeCAqLworI2Vs c2UgLyogUE9TSVhfVEVSTUlPUyAqLworI2luY2x1ZGUgPHNndHR5Lmg+CisjZW5kaWYgLyogUE9T SVhfVEVSTUlPUyAqLworCisjaW5jbHVkZSA8bmV0ZGIuaD4KKy8qICNpbmNsdWRlIDxzeXNsb2cu aD4gKi8KKyNpZm5kZWYgdWx0cml4CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjZW5kaWYgLyogdWx0 cml4ICovCisvKiAjaW5jbHVkZSA8c3lzL3BhcmFtLmg+ICovCQkvKiAobm93IGRvbmUgaW4gY2tj ZGViLmgpICovCisKKyNpZmRlZiBIQVZFX1NUUkVBTVMKKy8qIGtybG9naW4gZG9lc24ndCB0ZXN0 IHN5cy90dHkuLi4gKi8KKyNpZmRlZiBIQVZFX1NZU19UVFlfSAorI2luY2x1ZGUgPHN5cy90dHku aD4KKyNlbmRpZiAvKiBIQVZFX1NZU19UVFlfSCAqLworCisjaWZkZWYgSEFWRV9TWVNfUFRZVkFS X0gKKy8qIFNvbGFyaXMgYWN0dWFsbHkgdXNlcyBwYWNrZXQgbW9kZSwgc28gdGhlIHJlYWwgbWFj cm9zIGFyZSBuZWVkZWQgdG9vICovCisjaW5jbHVkZSA8c3lzL3B0eXZhci5oPgorI2VuZGlmIC8q IEhBVkVfU1lTX1BUWVZBUl9IICovCisjZW5kaWYgLyogSEFWRV9TVFJFQU1TICovCisKKyNpZmRl ZiBDT01NRU5UCisvKiBUaGlzIGJsb2NrIG1vdmVkIHRvIGNrY2RlYi5oICovCisjaWZuZGVmIE5P X09QRU5QVFkKKy8qIEZvciBOZXRCU0QsIHNlZSBtYWtlZmlsZSAqLworI2lmbmRlZiBIQVZFX09Q RU5QVFkKKyNpZmRlZiBfX0ZyZWVCU0RfXworI2RlZmluZSBIQVZFX09QRU5QVFkKKyNlbHNlCisj aWZkZWYgTUFDT1NYMTAKKyNkZWZpbmUgSEFWRV9PUEVOUFRZCisjZW5kaWYJLyogTUFDT1NYMTAg Ki8KKyNlbmRpZgkvKiBfX0ZyZWVCU0RfXyAqLworI2VuZGlmCS8qIEhBVkVfT1BFTlBUWSAqLwor I2VuZGlmCS8qIE5PX09QRU5QVFkgKi8KKyNlbmRpZgkvKiBDT01NRU5UICovCisKKyNpZmRlZiBI QVZFX1ZIQU5HVVAKKyNpZm5kZWYgT1BFTl9DVFRZX09OTFlfT05DRQorLyoKKyAgQnJlYWtzIHVu ZGVyIFVsdHJpeCBhbmQgb3RoZXJzIHdoZXJlIHlvdSBjYW5ub3QgZ2V0IGNvbnRyb2xsaW5nCisg IHRlcm1pbmFsIHR3aWNlLgorKi8KKyNkZWZpbmUgVkhBTkdfZmlyc3QKKyNkZWZpbmUgVkhBTkdf TEFTVAorI2VuZGlmIC8qIE9QRU5fQ1RUWV9PTkxZX09OQ0UgKi8KKyNlbmRpZiAvKiBIQVZFX1ZI QU5HVVAgKi8KKworLyogSW50ZXJuYWwgZnVuY3Rpb25zICovCitfUFJPVE9UWVAobG9uZyBwdHlp bnRfdm9pZF9hc3NvY2lhdGlvbiwodm9pZCkpOworX1BST1RPVFlQKGxvbmcgcHR5aW50X29wZW5f Y3R0eSAsKGNoYXIgKiwgaW50ICopKTsKK19QUk9UT1RZUChWT0lEIHB0eWludF92aGFuZ3VwLCAo dm9pZCkpOworCisjaWZkZWYgV0FOVF9VVE1QCitfUFJPVE9UWVAobG9uZyBwdHlpbnRfdXBkYXRl X3d0bXAsIChzdHJ1Y3QgdXRtcCAqLCBjaGFyICosIGNoYXIgKikpOworI2VuZGlmIC8qIFdBTlRf VVRNUCAqLworCisjZGVmaW5lIF9fUFRZX0lOVF9IX18KKyNlbmRpZiAvKiBfX1BUWV9JTlRfSF9f ICovCisKKyNpZm5kZWYgX19MSUJQVFlfSF9fCisKKyNpZmRlZiBXQU5UX1VUTVAKKy8qIENvbnN0 YW50cyBmb3IgcHR5X3VwZGF0ZV91dG1wICovCisjZGVmaW5lIFBUWV9MT0dJTl9QUk9DRVNTIDAK KyNkZWZpbmUgUFRZX1VTRVJfUFJPQ0VTUyAxCisjZGVmaW5lIFBUWV9ERUFEX1BST0NFU1MgMgor I2RlZmluZSBQVFlfVFRZU0xPVF9VU0FCTEUgKDB4MSkJLyogZmxhZ3MgdG8gdXBkYXRlX3V0bXAq LworI2RlZmluZSBQVFlfVVRNUF9VU0VSTkFNRV9WQUxJRCAoMHgyKQorI2VuZGlmIC8qIFdBTlRf VVRNUCAqLworCitfUFJPVE9UWVAobG9uZyBwdHlfaW5pdCwodm9pZCkpOworX1BST1RPVFlQKGxv bmcgcHR5X2dldHB0eSwgKCBpbnQgKiwgY2hhciAqLCBpbnQpKTsKK19QUk9UT1RZUChsb25nIHB0 eV9vcGVuX3NsYXZlLCAoY2hhciAqLCBpbnQgKiwgaW50KSk7CitfUFJPVE9UWVAobG9uZyBwdHlf b3Blbl9jdHR5LCAoY2hhciAqLCBpbnQgKiwgaW50KSk7CitfUFJPVE9UWVAobG9uZyBwdHlfaW5p dGlhbGl6ZV9zbGF2ZSwgKGludCkpOworI2lmZGVmIFdBTlRfVVRNUAorX1BST1RPVFlQKGxvbmcg cHR5X3VwZGF0ZV91dG1wLCAoaW50LCBpbnQsIGNoYXIgKiwgY2hhciAqLCBjaGFyICosIGludCkp OworX1BST1RPVFlQKGxvbmcgcHR5X2xvZ3d0bXAsIChjaGFyICosIGNoYXIgKiwgY2hhciAqKSk7 CisjZW5kaWYgLyogV0FOVF9VVE1QICovCitfUFJPVE9UWVAobG9uZyBwdHlfY2xlYW51cCwgKGNo YXIgKiwgaW50LCBpbnQpKTsKKworI2RlZmluZSBQVFlfR0VUUFRZX1NUUkVBTVMgICAgICAgICAg ICAgICAoNDQ4MDY5MTJMKQorI2RlZmluZSBQVFlfR0VUUFRZX0ZTVEFUICAgICAgICAgICAgICAg ICAoNDQ4MDY5MTNMKQorI2RlZmluZSBQVFlfR0VUUFRZX05PUFRZICAgICAgICAgICAgICAgICAo NDQ4MDY5MTRMKQorI2RlZmluZSBQVFlfR0VUUFRZX1NMQVZFX1RPT0xPTkcgICAgICAgICAoNDQ4 MDY5MTVMKQorI2RlZmluZSBQVFlfT1BFTl9TTEFWRV9PUEVORkFJTCAgICAgICAgICAoNDQ4MDY5 MTZMKQorI2RlZmluZSBQVFlfT1BFTl9TTEFWRV9DSE1PREZBSUwgICAgICAgICAoNDQ4MDY5MTdM KQorI2RlZmluZSBQVFlfT1BFTl9TTEFWRV9OT0NUVFkgICAgICAgICAgICAoNDQ4MDY5MThMKQor I2RlZmluZSBQVFlfT1BFTl9TTEFWRV9DSE9XTkZBSUwgICAgICAgICAoNDQ4MDY5MTlMKQorI2Rl ZmluZSBQVFlfT1BFTl9TTEFWRV9MSU5FX1BVU0hGQUlMICAgICAoNDQ4MDY5MjBMKQorI2RlZmlu ZSBQVFlfT1BFTl9TTEFWRV9QVVNIX0ZBSUwgICAgICAgICAoNDQ4MDY5MjFMKQorI2RlZmluZSBQ VFlfT1BFTl9TTEFWRV9SRVZPS0VGQUlMICAgICAgICAoNDQ4MDY5MjJMKQorI2lmZGVmIFdBTlRf VVRNUAorI2RlZmluZSBQVFlfVVBEQVRFX1VUTVBfUFJPQ1RZUEVfSU5WQUxJRCAoNDQ4MDY5MjNM KQorI2VuZGlmIC8qIFdBTlRfVVRNUCAqLworI2RlZmluZSBQVFlfT1BFTl9TTEFWRV9UT09TSE9S VCAgICAgICAgICAoNDQ4MDY5MjRMKQorI2RlZmluZSBFUlJPUl9UQUJMRV9CQVNFX3B0eSAgICAg ICAgICAgICAoNDQ4MDY5MTJMKQorCitleHRlcm4gc3RydWN0IGVycm9yX3RhYmxlIGV0X3B0eV9l cnJvcl90YWJsZTsKKworI2RlZmluZSBfX0xJQlBUWV9IX18KKyNlbmRpZiAvKiBfX0xJQlBUWV9I X18gKi8KKwoKZGlmZiAtLWdpdCBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4z MDIvY2t1c2NyLmMgYi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdXNj ci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhMmQ5YjcKLS0tIC9kZXYv bnVsbAorKysgYi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdXNjci5j CkBAIC0wLDAgKzEsNjg4IEBACisjaW5jbHVkZSAiY2tjc3ltLmgiCisKKyNpZm5kZWYgTk9JQ1AK KyNpZm5kZWYgTk9TQ1JJUFQKK2NoYXIgKmxvZ2ludiA9ICJTY3JpcHQgQ29tbWFuZCwgOS4wLjAz MiwgMTYgT2N0IDIwMDkiOworCisvKiAgQyBLIFUgUyBDIFIgIC0tICBleHBlY3Qtc2VuZCBzY3Jp cHQgaW1wbGVtZW50YXRpb24gICovCisKKy8qCisgIENvcHlyaWdodCAoQykgMTk4NSwgMjAwOSwK KyAgICBUcnVzdGVlcyBvZiBDb2x1bWJpYSBVbml2ZXJzaXR5IGluIHRoZSBDaXR5IG9mIE5ldyBZ b3JrLgorICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBTZWUgdGhlIEMtS2VybWl0IENPUFlJTkcu VFhUIGZpbGUgb3IgdGhlCisgICAgY29weXJpZ2h0IHRleHQgaW4gdGhlIGNrY21haS5jIG1vZHVs ZSBmb3IgZGlzY2xhaW1lciBhbmQgcGVybWlzc2lvbnMuCisKKyAgT3JpZ2luYWwgKHZlcnNpb24g MSwgMTk4NSkgYXV0aG9yOiBIZXJtIEZpc2NoZXIsIEVuY2lubywgQ0EuCisgIENvbnRyaWJ1dGVk IHRvIENvbHVtYmlhIFVuaXZlcnNpdHkgaW4gMTk4NSBmb3IgaW5jbHVzaW9uIGluIEMtS2VybWl0 IDQuMC4KKyAgTWFpbnRhaW5lZCBzaW5jZSAxOTg1IGJ5IEZyYW5rIGRhIENydXosIENvbHVtYmlh IFVuaXZlcnNpdHksCisgIGZkY0Bjb2x1bWJpYS5lZHUuCisKKyAgVGhlIG1vZHVsZSB0YWtlcyBh IFVVQ1Atc3R5bGUgc2NyaXB0IG9mIHRoZSAiZXhwZWN0IHNlbmQgW2V4cGVjdCBzZW5kXSAuLi4i CisgIGZvcm1hdC4gIEl0IGlzIGludGVuZGVkIHRvIG9wZXJhdGUgc2ltaWxhcmx5IHRvIHRoZSB3 YXkgdGhlIGNvbW1vbgorICBVVUNQIEwuc3lzIGxvZ2luIGVudHJpZXMgd29yay4gIENvbmRpdGlv bmFsIHJlc3BvbnNlcyBhcmUgc3VwcG9ydGVkOgorICBleHBlY3RbLXNlbmQtZXhwZWN0Wy4uLl1d LCBhcyB3aXRoIFVVQ1AuICBUaGUgc2VuZCBrZXl3b3JkIEVPVCBzZW5kcyBhCisgIENvbnRyb2wt ZCwgYW5kIHRoZSBrZXl3b3JkIEJSRUFLIHNlbmRzIGEgYnJlYWsuICBMZXR0ZXJzIHByZWZpeGVk CisgIGJ5ICd+JyBhcmUgJ35iJyBiYWNrc3BhY2UsICd+cycgc3BhY2UsICd+bicgbGluZWZlZWQs ICd+cicgcmV0dXJuLCAnfngnIHhvbiwKKyAgJ350JyB0YWIsICd+cScgPyAobm90IGFsbG93ZWQg b24ga2VybWl0IGNvbW1hbmQgbGluZXMpLCAnficgfiwgJ34nJywKKyAgJ34iJywgJ35jJyBkb24n dCBhcHBlbmQgcmV0dXJuLCAnfm9bb1tvXV0nIG9jdGFsIGNoYXJhY3Rlci4gIEFzIHdpdGgKKyAg c29tZSB1dWNwIHN5c3RlbXMsIHNlbnQgc3RyaW5ncyBhcmUgZm9sbG93ZWQgYnkgfnIgKG5vdCB+ bikgdW5sZXNzIHRoZXkKKyAgZW5kIHdpdGggfmMuIE51bGwgZXhwZWN0IHN0cmluZ3MgKGUuZy4s IH4wIG9yIC0tKSBjYXVzZSBhIHNob3J0CisgIGRlbGF5LCBhbmQgYXJlIHVzZWZ1bCBmb3Igc2Vu ZGluZyBzZXF1ZW5jZXMgcmVxdWlyaW5nIHNsaWdodCBwYXVzZXMuCisKKyAgVGhpcyBtb2R1bGUg Y2FsbHMgZXh0ZXJuYWxseSBkZWZpbmVkIHN5c3RlbS1kZXBlbmRlbnQgZnVuY3Rpb25zIGZvcgor ICBjb21tdW5pY2F0aW9ucyBpL28sIGFzIGRlZmluZWQgaW4gY2tjcGxtLnR4dCwgdGhlIEMtS2Vy bWl0IFByb2dyYW0gTG9naWMKKyAgTWFudWFsLCBhbmQgdGh1cyBzaG91bGQgYmUgcG9ydGFibGUg dG8gYWxsIHN5c3RlbXMgdGhhdCBpbXBsZW1lbnQgdGhvc2UKKyAgZnVuY3Rpb25zLCBhbmQgd2hl cmUgYWxhcm0oKSBhbmQgc2lnbmFsKCkgd29yayBhcyB0aGV5IGRvIGluIFVOSVguCisqLworI2lu Y2x1ZGUgImNrY2RlYi5oIgorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2lmZGVmIE5UCisjaW5jbHVk ZSA8c2V0am1wZXguaD4KKyNlbHNlIC8qIE5UICovCisjaW5jbHVkZSA8c2V0am1wLmg+CisjZW5k aWYgLyogTlQgKi8KKyNpbmNsdWRlICJja2Nhc2MuaCIKKyNpbmNsdWRlICJja2NrZXIuaCIKKyNp bmNsdWRlICJja3V1c3IuaCIKKyNpbmNsdWRlICJja2NuZXQuaCIKKyNpbmNsdWRlICJja2NzaWcu aCIKKworX1BST1RPVFlQKCBWT0lEIGZsdXNoaSwgKHZvaWQpICk7CitfUFJPVE9UWVAoIHN0YXRp YyBWT0lEIG15ZmxzaCwgKHZvaWQpICk7CitfUFJPVE9UWVAoIHN0YXRpYyBpbnQgc2VxdWVuYywg KHZvaWQpICk7CitfUFJPVE9UWVAoIHN0YXRpYyBWT0lEIHJlY3ZzZXEsICh2b2lkKSApOworX1BS T1RPVFlQKCBzdGF0aWMgaW50IG91dHNlcSwgKHZvaWQpICk7CisKKyNpZmRlZiBNQUMKKyNkZWZp bmUgc2lnbmFsIG1zaWduYWwKKyNkZWZpbmUgU0lHVFlQIGxvbmcKKyNkZWZpbmUgYWxhcm0gbWFs YXJtCisjZGVmaW5lIFNJR19JR04gMAorI2RlZmluZSBTSUdBTFJNIDEKKyNkZWZpbmUgU0lHSU5U ICAyCitTSUdUWVAgKCptc2lnbmFsKGludCB0eXBlLCBTSUdUWVAgKCpmdW5jKShpbnQpKSkoaW50 KTsKKyNlbmRpZiAvKiBNQUMgKi8KKworI2lmZGVmIEFNSUdBCisjZGVmaW5lIHNpZ25hbCBhc2ln bmFsCisjZGVmaW5lIGFsYXJtIGFhbGFybQorI2RlZmluZSBTSUdBTFJNIChfTlVNU0lHKzEpCisj ZGVmaW5lIFNJR1RZUCB2b2lkCitTSUdUWVAgKCphc2lnbmFsKGludCB0eXBlLCBTSUdUWVAgKCpm dW5jKShpbnQpKSkoaW50KTsKK3Vuc2lnbmVkIGFhbGFybSh1bnNpZ25lZCk7CisjZW5kaWYgLyog QU1JR0EgKi8KKworI2lmZGVmIFNUUkFUVVMKKy8qIFZPUyBkb2Vzbid0IGhhdmUgYWxhcm0oKSwg YnV0IGl0IGRvZXMgaGF2ZSBzb21lIHRoaW5ncyB3ZSBjYW4gd29yayB3aXRoLiAqLworLyogaG93 ZXZlciwgd2UgaGF2ZSB0byBjYXRjaCBhbGwgdGhlIHNpZ25hbHMgaW4gb25lIHBsYWNlIHRvIGRv IHRoaXMsIHNvICAgICovCisvKiB3ZSBpbnRlcmNlcHQgdGhlIHNpZ25hbCgpIHJvdXRpbmUgYW5k IGNhbGwgaXQgZnJvbSBvdXIgb3duIHJlcGxhY2VtZW50LiAgKi8KKyNkZWZpbmUgc2lnbmFsIHZz aWduYWwKKyNkZWZpbmUgYWxhcm0gdmFsYXJtCitTSUdUWVAgKCp2c2lnbmFsKGludCB0eXBlLCBT SUdUWVAgKCpmdW5jKShpbnQpKSkoaW50KTsKK2ludCB2YWxhcm0oaW50IGludGVydmFsKTsKKyNl bmRpZiAvKiBTVFJBVFVTICovCisKK2V4dGVybiBpbnQgc2Vzc2Z0OworZXh0ZXJuIGludCBsb2Nh bCwgZmxvdywgc2VzbG9nLCBtZG10eXAsIG1zZ2ZsZywgZHVwbGV4LCBiYWNrZ3JkLCBzZWNobywg cXVpZXQ7CitleHRlcm4gaW50IG5ldHdvcmssIG5ldHR5cGUsIHR0bnByb3RvOworZXh0ZXJuIGxv bmcgc3BlZWQ7CitleHRlcm4gY2hhciB0dG5hbWVbXTsKKworI2lmZGVmIE5UU0lHCitleHRlcm4g aW50IFRsc0luZGV4OworI2VuZGlmIC8qIE5UU0lHICovCisjaWZkZWYgSUtTRAorZXh0ZXJuIGlu dCBpbnNlcnZlcjsKKyNlbmRpZiAvKiBJS1NEICovCisKK3N0YXRpYyBpbnQgaXNfdG4gPSAwOwkJ CS8qIERvIFRlbG5ldCBuZWdvdGlhdGlvbnMgKi8KKworI2lmbmRlZiBOT1NQTAorI2lmZGVmIERD TURCVUYKK2V4dGVybiBzdHJ1Y3QgY21kcHRyICpjbWRzdGs7CisjZWxzZQorZXh0ZXJuIHN0cnVj dCBjbWRwdHIgY21kc3RrW107CisjZW5kaWYgLyogRENNREJVRiAqLworZXh0ZXJuIGludCB0ZWNo bywgY21kbHZsOworZXh0ZXJuIGludCBtZWNobzsKKyNlbmRpZiAvKiBOT1NQTCAqLworCitzdGF0 aWMgaW50IHNjcl9lY2hvOwkJCS8qIFdoZXRoZXIgdG8gZWNobyBzY3JpcHQgY29tbWFuZHMgKi8K Kworc3RhdGljIGludCBleHBfYWxybSA9IDE1OwkJLyogVGltZSB0byB3YWl0IGZvciBleHBlY3Qg c3RyaW5nICovCisjZGVmaW5lIFNORF9BTFJNIDE1CQkJLyogVGltZSB0byBhbGxvdyBmb3Igc2Vu ZGluZyBzdHJpbmcgKi8KKyNkZWZpbmUgTlVMTF9FWFAgMgkJCS8qIFRpbWUgdG8gcGF1c2Ugb24g bnVsbCBleHBlY3Qgc3RyZyovCisjZGVmaW5lIERFTF9NU0VDIDMwMAkJCS8qIE1pbGxpc2Vjb25k cyB0byBwYXVzZSBvbiB+ZCAqLworCisjZGVmaW5lIFNCVUZMIDUxMgorc3RhdGljIGNoYXIgc2Vx X2J1ZltTQlVGTCsyXSwgKnM7CS8qIGV4cGVjdC1zZW5kIHNlcXVlbmNlIGJ1ZmZlciAqLworc3Rh dGljIGludCBnb3RfaXQsIG5vX2NyOworCisvKiAgQ29ubmVjdCBzdGF0ZSBwYXJlbnQvY2hpbGQg Y29tbXVuaWNhdGlvbiBzaWduYWwgaGFuZGxlcnMgKi8KKworI2lmZGVmIENPTU1FTlQKKyNpZmRl ZiBDS19QT1NJWF9TSUcKK3N0YXRpYyBzaWdqbXBfYnVmIGFscm1ybmc7CisjZWxzZQorc3RhdGlj IGptcF9idWYgYWxybXJuZzsKKyNlbmRpZiAvKiBDS19QT1NJWF9TSUcgKi8KKyNlbHNlCitzdGF0 aWMgY2tqbXBidWYgYWxybXJuZzsKKyNlbmRpZiAvKiBDT01NRU5UICovCisKK3N0YXRpYyBTSUdU WVAKKyNpZmRlZiBDS19BTlNJQworc2NydGltZShpbnQgZm9vKQkJCS8qIG1vZGVtIHJlYWQgZmFp bHVyZSBoYW5kbGVyLCAqLworI2Vsc2UKK3NjcnRpbWUoZm9vKSBpbnQgZm9vOwkJCS8qIEFsYXJt IGhhbmRsZXIgKi8KKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogc2NydGltZSAqLyB7CisKKyNp ZmRlZiBCRUJPWAorI2lmZGVmIEJFX0RSXzcKKyAgICBhbGFybV9leHBpcmVkKCk7CisjZW5kaWYg LyogQkVfRFJfNyAqLworI2VuZGlmIC8qIEJFQk9YICovCisjaWZkZWYgTlRTSUcKKyAgICBpZiAo Zm9vID09IFNJR0FMUk0pCisgICAgICBQb3N0QWxhcm1TaWdTZW0oKTsKKyAgICBlbHNlCisgICAg ICBQb3N0Q3RybENTZW0oKTsKKyNlbHNlIC8qIE5UU0lHICovCisjaWZkZWYgTlQKKyAgICBja2xv bmdqbXAoY2tqYWRkcihhbHJtcm5nKSwxKTsKKyNlbHNlIC8qIE5UICovCisgICAgY2tsb25nam1w KGFscm1ybmcsMSk7CisjZW5kaWYgLyogTlQgKi8KKyNlbmRpZiAvKiBOVFNJRyAqLworICAgIFNJ R1JFVFVSTjsKK30KKworLyoKKyBTZXF1ZW5jZSBpbnRlcnByZXRlciAtLSBwaWNrIHVwIG5leHQg c2VxdWVuY2UgZnJvbSBjb21tYW5kIHN0cmluZywKKyBkZWNvZGUgZXNjYXBlcyBhbmQgcGxhY2Ug aW50byBzZXFfYnVmLgorCisgSWYgc3RyaW5nIGNvbnRhaW5zIGEgfmQgKGRlbGF5KSB0aGVuIHNl cXVlbmMoKSByZXR1cm5zIGEgMSBleHBlY3RpbmcKKyB0byBiZSBjYWxsZWQgYWdhaW4gYWZ0ZXIg dGhlIH5kIGV4ZWN1dGVzLgorKi8KK3N0YXRpYyBpbnQKK3NlcXVlbmMoKSB7CisgICAgaW50IGk7 CisgICAgY2hhciBjLCBvY3RfY2hhcjsKKworICAgIG5vX2NyID0gMDsJCQkJLyogb3V0cHV0IG5l ZWRzIGNyIGFwcGVuZGVkICovCisgICAgZm9yIChpID0gMDsgaSA8IFNCVUZMOyApIHsKKwlpZiAo KnMgPT0gJ1wwJyB8fCAqcyA9PSAnLScgfHwgaXNzcGFjZSgqcykgKSB7IC8qIGRvbmUgKi8KKwkg ICAgc2VxX2J1ZltpXSA9ICdcMCc7CisJICAgIHJldHVybigwKSA7CisJfQorCWlmICgqcyA9PSAn ficpIHsJCS8qIGVzY2FwZSBjaGFyYWN0ZXIgKi8KKwkgICAgcysrOworCSAgICBzd2l0Y2ggKGMg PSAqcykgeworCQljYXNlICduJzogIHNlcV9idWZbaSsrXSA9IExGOyBicmVhazsKKwkJY2FzZSAn cic6ICBzZXFfYnVmW2krK10gPSBDUjsgYnJlYWs7CisJCWNhc2UgJ3QnOiAgc2VxX2J1ZltpKytd ID0gJ1x0JzsgYnJlYWs7CisJCWNhc2UgJ2InOiAgc2VxX2J1ZltpKytdID0gJ1xiJzsgYnJlYWs7 CisJCWNhc2UgJ3EnOiAgc2VxX2J1ZltpKytdID0gJz8nOyAgYnJlYWs7CisjaWZkZWYgQ09NTUVO VAorLyogVGhlIGRlZmF1bHQgY2FzZSBzaG91bGQgY2F0Y2ggdGhlc2Ugbm93Li4uICovCisJCWNh c2UgJ34nOiAgc2VxX2J1ZltpKytdID0gJ34nOyAgYnJlYWs7CisJCWNhc2UgJy0nOiAgc2VxX2J1 ZltpKytdID0gJy0nOyAgYnJlYWs7CisjZW5kaWYgLyogQ09NTUVOVCAqLworCQljYXNlICdcJyc6 IHNlcV9idWZbaSsrXSA9ICdcJyc7IGJyZWFrOworCQljYXNlICdcIic6IHNlcV9idWZbaSsrXSA9 ICdcIic7IGJyZWFrOworCQljYXNlICdzJzogIHNlcV9idWZbaSsrXSA9ICcgJzsgIGJyZWFrOwor CQljYXNlICd4JzogIHNlcV9idWZbaSsrXSA9ICdcMDIxJzsgYnJlYWs7CisJCWNhc2UgJ2MnOiAg bm9fY3IgPSAxOyBicmVhazsKKwkJY2FzZSAnZCc6IHsJCQkvKiBzZW5kIHdoYXQgd2UgaGF2ZSAm IHRoZW4gKi8KKwkJICAgIHNlcV9idWZbaV0gPSAnXDAnOwkJLyogZXhwZWN0IHRvIHNlbmQgcmVz dCBhZnRlciAqLworCQkgICAgbm9fY3IgPSAxOwkJCS8qIHNlbmRlciBkZWxheXMgYSBsaXR0bGUg Ki8KKwkJICAgIHMrKzsKKwkJICAgIHJldHVybigxKTsKKwkJfQorCQljYXNlICd3JzogewkJCS8q IHdhaXQgY291bnQgKi8KKwkJICAgIGV4cF9hbHJtID0gMTU7CQkvKiBkZWZhdWx0IHRvIDE1IHNl YyAqLworCQkgICAgaWYgKGlzZGlnaXQoKihzKzEpKSkgeworCQkJcysrOworCQkJZXhwX2Fscm0g PSAqcyAmIDE1OworCQkJaWYgKGlzZGlnaXQoKihzKzEpKSApIHsKKwkJCSAgICBzKys7CisJCQkg ICAgZXhwX2Fscm0gPSBleHBfYWxybSAqIDEwICsgKCpzICYgMTUpOworCQkJfQorCQkgICAgfQor CQkgICAgYnJlYWs7CisJCX0KKwkJZGVmYXVsdDoKKwkJICAgIGlmICggaXNkaWdpdChjKSApIHsJ ICAgIAkvKiBvY3RhbCBjaGFyYWN0ZXIgKi8KKwkJICAgIAlvY3RfY2hhciA9IChjaGFyKSAoYyAm IDcpOyAvKiBtb3N0IHNpZ25pZmljYW50IGRpZ2l0ICovCisJCQlpZiAoaXNkaWdpdCggKihzKzEp ICkgKSB7CisJCQkgICAgcysrOworCQkJICAgIG9jdF9jaGFyID0gKGNoYXIpICgob2N0X2NoYXI8 PDMpIHwgKCAqcyAmIDcgKSk7CisJCQkgICAgaWYgKGlzZGlnaXQoICoocysxKSApICkgeworCQkJ CXMrKzsKKwkJCSAgICAJb2N0X2NoYXIgPSAoY2hhcikgKChvY3RfY2hhcjw8MykgfCAoICpzICYg NyApKTsKKwkJCSAgICB9CisJCQl9CisJCQlzZXFfYnVmW2krK10gPSBvY3RfY2hhcjsKKwkJCWJy ZWFrOworCQkgICAgfSBlbHNlIHNlcV9idWZbaSsrXSA9ICpzOyAvKiBUcmVhdCB+IGFzIHF1b3Rl ICovCisJICAgICAgfQorCX0gZWxzZSBzZXFfYnVmW2krK10gPSAqczsJLyogUGxhaW4gb2xkIGNo YXJhY3RlciAqLworCXMrKzsKKyAgICB9CisgICAgc2VxX2J1ZltpXSA9ICdcMCc7CisgICAgcmV0 dXJuKDApOwkJCQkvKiBlbmQgb2Ygc3BhY2UsIHJldHVybiBhbnl3YXkgKi8KK30KKworCisvKiBP dXRwdXQgYnVmZmVyaW5nIGZvciAicmVjdnNlcSIgYW5kICJmbHVzaGkiICovCisKKyNkZWZpbmUJ TUFYQlVSU1QgMjU2CQkvKiBtYXhpbXVtIHNpemUgb2YgaW5wdXQgYnVyc3QgKi8KK3N0YXRpYyBD SEFSIGNvbmJ1ZltNQVhCVVJTVF07CS8qIGJ1ZmZlciB0byBob2xkIG91dHB1dCBmb3IgY29uc29s ZSAqLworc3RhdGljIGludCBjb25jbnQgPSAwOwkJLyogbnVtYmVyIG9mIGNoYXJhY3RlcnMgYnVm ZmVyZWQgKi8KK3N0YXRpYyBDSEFSIHNlc2J1ZltNQVhCVVJTVF07CS8qIGJ1ZmZlciB0byBob2xk IG91dHB1dCBmb3Igc2Vzc2lvbiBsb2cgKi8KK3N0YXRpYyBpbnQgc2VzY250ID0gMDsJCS8qIG51 bWJlciBvZiBjaGFyYWN0ZXJzIGJ1ZmZlcmVkICovCisKK3N0YXRpYyBWT0lECitteWZsc2goKSB7 CisgICAgaWYgKGNvbmNudCA+IDApIHsKKwljb254byhjb25jbnQsIChjaGFyICopIGNvbmJ1Zik7 CisJY29uY250ID0gMDsKKyAgICB9CisgICAgaWYgKHNlc2NudCA+IDApIHsKKyAgICAgICAgbG9n c3RyKChjaGFyICopIHNlc2J1Ziwgc2VzY250KTsKKwlzZXNjbnQgPSAwOworICAgIH0KK30KKwor LyogdGhlc2UgdmFyaWFibGVzIGFyZSB1c2VkIHRvIHBhc3MgZGF0YSBiZXR3ZWVuIHRoZSByZWN2 c2VxKCkgKi8KKy8qIGFuZCB0aGUgZG9yc2VxKCkuICBUaGV5IGFyZSBuZWNlc3NhcnkgYmVjYXVz ZSBpbiBzb21lIHZlcnNpb25zICovCisvKiBkb3JzZXEoKSBpcyBleGVjdXRlZCBpbiBhIHNlcGFy YXRlIHRocmVhZCBhbmQgZGF0YSBjYW5ub3QgYmUgKi8KKy8qIHBhc3NlZCBieSBwYXJhbWV0ZXIu ICovCisKK3N0YXRpYyBjaGFyICpyc2VxZSwgKiByc2VxZ290LCAqIHJzZXF0cmFjZSA7CitzdGF0 aWMgaW50IHJzZXFsOworCitzdGF0aWMgU0lHVFlQCisjaWZkZWYgQ0tfQU5TSUMKK2RvcnNlcSh2 b2lkICogdGhyZWFkaW5mbykKKyNlbHNlIC8qIENLX0FOU0lDICovCitkb3JzZXEodGhyZWFkaW5m bykgVk9JRCAqIHRocmVhZGluZm87CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIGRvcnNlcSAq LyB7CisgICAgaW50IGksIHg7CisgICAgaW50IGJ1cnN0ID0gMDsJCQkvKiBjaGFycyByZW1haW5p bmcgaW4gaW5wdXQgYnVyc3QgKi8KKworI2lmZGVmIE5UU0lHCisgICAgc2V0aW50KCk7CisgICAg aWYgKHRocmVhZGluZm8pIHsJCQkvKiBUaHJlYWQgbG9jYWwgc3RvcmFnZS4uLiAqLworCVRsc1Nl dFZhbHVlKFRsc0luZGV4LHRocmVhZGluZm8pOworICAgIH0KKyNlbmRpZiAvKiBOVFNJRyAqLwor I2lmZGVmIENLX0xPR0lOCisjaWZkZWYgTlQKKyNpZmRlZiBJS1NECisgICAgaWYgKGluc2VydmVy KQorICAgICAgc2V0bnRjcmVkcygpOworI2VuZGlmIC8qIElLU0QgKi8KKyNlbmRpZiAvKiBOVCAq LworI2VuZGlmIC8qIENLX0xPR0lOICovCisKKyAgICB3aGlsZSAoIWdvdF9pdCkgeworCWZvciAo aSA9IDA7IGkgPCByc2VxbC0xOyBpKyspIHJzZXFnb3RbaV0gPSByc2VxZ290W2krMV07CisJeCA9 IHR0aW5jKDApOwkJCS8qIFJlYWQgYSBjaGFyYWN0ZXIgKi8KKwlkZWJ1ZyhGMTAxLCJyZWN2c2Vx IiwiIix4KTsKKwlpZiAoeCA8IDApIHsKKyNpZmRlZiBOVFNJRworCSAgICBja1RocmVhZEVuZCh0 aHJlYWRpbmZvKTsKKyNlbmRpZiAvKiBOVFNJRyAqLworCSAgICBTSUdSRVRVUk47CQkJLyogQ2hl Y2sgZm9yIGVycm9yICovCisJfQorI2lmZGVmIE5FVENPTk4KKyNpZmRlZiBUTkNPREUKKy8qIENo ZWNrIGZvciB0ZWxuZXQgcHJvdG9jb2wgbmVnb3RpYXRpb24gKi8KKwlpZiAoKCh4ICYgMHhmZikg PT0gSUFDKSAmJiBpc190bikgeyAvKiBUZWxuZXQgbmVnb3RpYXRpb24gKi8KKwkgICAgbXlmbHNo KCk7CisJICAgIGJ1cnN0ID0gMDsKKwkgICAgc3dpdGNoICh0bl9kb29wKChDSEFSKSh4ICYgMHhm ZiksZHVwbGV4LHR0aW5jKSkgeworCSAgICAgIGNhc2UgMjogZHVwbGV4ID0gMDsgY29udGludWU7 CisJICAgICAgY2FzZSAxOiBkdXBsZXggPSAxOworCSAgICAgIGRlZmF1bHQ6IGNvbnRpbnVlOwor CSAgICB9CisJfQorI2VuZGlmIC8qIFROQ09ERSAqLworI2VuZGlmIC8qIE5FVENPTk4gKi8KKwly c2VxZ290W3JzZXFsLTFdID0gKGNoYXIpICh4ICYgMHg3Zik7IC8qIEdvdCBhIGNoYXJhY3RlciAq LworCWJ1cnN0LS07CQkJLyogT25lIGxlc3Mgd2FpdGluZyAqLworCWlmIChzY3JfZWNobykgY29u YnVmW2NvbmNudCsrXSA9IHJzZXFnb3RbcnNlcWwtMV07IC8qIEJ1ZmZlciBpdCAqLworCWlmIChz ZXNsb2cpCQkJLyogTG9nIGl0IGluIHNlc3Npb24gbG9nICovCisjaWZkZWYgVU5JWAorCSAgaWYg KHNlc3NmdCAhPSAwIHx8IHJzZXFnb3RbcnNlcWwtMV0gIT0gJ1xyJykKKyNlbHNlCisjaWZkZWYg T1NLCisJICAgIGlmIChzZXNzZnQgIT0gMCB8fCByc2VxZ290W3JzZXFsLTFdICE9ICdcMDEyJykK KyNlbmRpZiAvKiBPU0sgKi8KKyNlbmRpZiAvKiBVTklYICovCisJICAgICAgaWYgKHJzZXFnb3Rb cnNlcWwtMV0pCS8qIEZpbHRlciBvdXQgTlVMcyAqLworCQlzZXNidWZbc2VzY250KytdID0gcnNl cWdvdFtyc2VxbC0xXTsKKwlpZiAoKGludClzdHJsZW4ocnNlcXRyYWNlKSA8IFNCVUZMLTIgKQor CSAgc3RyY2F0KHJzZXF0cmFjZSxkYmNocihyc2VxZ290W3JzZXFsLTFdKSk7CisJZ290X2l0ID0g KCFzdHJuY21wKHJzZXFlLCByc2VxZ290LCByc2VxbCkpOworCWlmIChidXJzdCA8PSAwKSB7CQkv KiBGbHVzaCBidWZmZXJlZCBvdXRwdXQgKi8KKwkgICAgbXlmbHNoKCk7CisJICAgIGlmICgoYnVy c3QgPSB0dGNoaygpKSA8IDApIHsgLyogR2V0IHNpemUgb2YgbmV4dCBpbnB1dCBidXJzdCAqLwor I2lmZGVmIE5UU0lHCisJCWNrVGhyZWFkRW5kKHRocmVhZGluZm8pOworI2VuZGlmIC8qIE5UU0lH ICovCisJCVNJR1JFVFVSTjsKKwkgICAgfQorCSAgICAvKiBwcmV2ZW50IG92ZXJmbG93IG9mICJj b25idWYiIGFuZCAic2VzYnVmIiAqLworCSAgICBpZiAoYnVyc3QgPiBNQVhCVVJTVCkKKwkgICAg ICBidXJzdCA9IE1BWEJVUlNUOworCX0KKyAgICB9CisjaWZkZWYgTlRTSUcKKyAgICBja1RocmVh ZEVuZCh0aHJlYWRpbmZvKTsKKyNlbmRpZiAvKiBOVFNJRyAqLworICAgIFNJR1JFVFVSTjsKK30K Kworc3RhdGljIFNJR1RZUAorI2lmZGVmIENLX0FOU0lDCitmYWlscnNlcSh2b2lkICogdGhyZWFk aW5mbykKKyNlbHNlIC8qIENLX0FOU0lDICovCitmYWlscnNlcSh0aHJlYWRpbmZvKSBWT0lEICog dGhyZWFkaW5mbzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogZmFpbHJzZXEgKi8geworICAg ICBnb3RfaXQgPSAwOwkJCS8qIFRpbWVkIG91dCBoZXJlICovCisgICAgIFNJR1JFVFVSTjsKK30K KworLyoKKyAgUmVjZWl2ZSBzZXF1ZW5jZSAtLSBzZWUgaWYgZXhwZWN0ZWQgcmVzcG9uc2UgY29t ZXMsCisgIHJldHVybiBzdWNjZXNzIChvciBmYWlsdXJlKSBpbiBnb3RfaXQuCisqLworc3RhdGlj IFZPSUQKK3JlY3ZzZXEoKSB7CisgICAgY2hhciAqZSwgZ290WzddLCB0cmFjZVtTQlVGTF07Cisg ICAgaW50IGksIGw7CisKKyAgICBzZXF1ZW5jKCk7CisgICAgbCA9IChpbnQpc3RybGVuKGU9c2Vx X2J1Zik7CQkvKiBubyBtb3JlIHRoYW4gNyBjaGFycyBhbGxvd2VkICovCisgICAgaWYgKGwgPiA3 KSB7CisJZSArPSBsLTc7CisJbCA9IDc7CisgICAgfQorICAgIHRsb2coRjExMSwiZXhwZWN0aW5n IHNlcXVlbmNlIixlLChsb25nKSBsKTsKKyAgICBpZiAobCA9PSAwKSB7CQkJLyogbnVsbCBzZXF1 ZW5jZSwgZGVsYXkgYSBsaXR0bGUgKi8KKwlzbGVlcCAoTlVMTF9FWFApOworCWdvdF9pdCA9IDE7 CisJdGxvZyhGMTAwLCJnb3QgaXQgKG51bGwgc2VxdWVuY2UpIiwiIiwwTCk7CisJcmV0dXJuOwor ICAgIH0KKyAgICAqdHJhY2UgPSAnXDAnOworICAgIGZvciAoaSA9IDA7IGkgPCA3OyBpKyspIGdv dFtpXT0nXDAnOworCisgICAgcnNlcXRyYWNlID0gdHJhY2U7CisgICAgcnNlcWUgPSBlOworICAg IHJzZXFnb3QgPSBnb3Q7CisgICAgcnNlcWwgPSBsOworCisgICAgYWxybV9leGVjdXRlKGNramFk ZHIoYWxybXJuZyksIGV4cF9hbHJtLCBzY3J0aW1lLCBkb3JzZXEsIGZhaWxyc2VxKTsKKworICAg IHRsb2coRjExMCwicmVjZWl2ZWQgc2VxdWVuY2U6ICIsdHJhY2UsMEwpOworICAgIHRsb2coRjEw MSwicmV0dXJuaW5nIHdpdGggZ290LWl0IGNvZGUiLCIiLChsb25nKSBnb3RfaXQpOworICAgIG15 ZmxzaCgpOwkJCQkvKiBGbHVzaCBidWZmZXJlZCBvdXRwdXQgKi8KKyAgICByZXR1cm47Cit9CisK Ky8qCisgT3V0cHV0IEEgU2VxdWVuY2Ugc3RhcnRpbmcgYXQgcG9pbnRlciBzLAorIHJldHVybiAw IGlmIG9rYXksCisgMSBpZiBmYWlsZWQgdG8gcmVhZCAobW9kZW0gaGFuZ3VwIG9yIHdoYXRldmVy KQorKi8KK3N0YXRpYyBpbnQgb3NlcXJldCA9IDA7CQkJLyogUmV0dXJuIGNvZGUgZm9yIG91dHNl cSAqLworCQkJCQkvKiBPdXQgaGVyZSB0byBwcmV2ZW50IGNsb2JiZXJpbmcgKi8KKwkJCQkJLyog YnkgbG9uZ2ptcC4gKi8KKworc3RhdGljIFNJR1RZUAorI2lmZGVmIENLX0FOU0lDCitkb29zZXEo dm9pZCAqIHRocmVhZGluZm8pCisjZWxzZSAvKiBDS19BTlNJQyAqLworZG9vc2VxKHRocmVhZGlu Zm8pIFZPSUQgKiB0aHJlYWRpbmZvOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgaW50 IGw7CisgICAgY2hhciAqc2I7CisjaWZkZWYgVENQU09DS0VUCisgICAgZXh0ZXJuIGludCB0bl9u bG0sIHRuX2JfbmxtOworI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLworCisjaWZkZWYgTlRTSUcKKyAg ICBzZXRpbnQoKTsKKyAgICBpZiAodGhyZWFkaW5mbykgewkJCS8qIFRocmVhZCBsb2NhbCBzdG9y YWdlLi4uICovCisJVGxzU2V0VmFsdWUoVGxzSW5kZXgsdGhyZWFkaW5mbyk7CisgICAgfQorI2Vu ZGlmIC8qIE5UU0lHICovCisjaWZkZWYgQ0tfTE9HSU4KKyNpZmRlZiBOVAorI2lmZGVmIElLU0QK KyAgICBpZiAoaW5zZXJ2ZXIpCisgICAgICBzZXRudGNyZWRzKCk7CisjZW5kaWYgLyogSUtTRCAq LworI2VuZGlmIC8qIE5UICovCisjZW5kaWYgLyogQ0tfTE9HSU4gKi8KKworICAgIGwgPSAoaW50 KXN0cmxlbihzZXFfYnVmKTsKKyAgICB0bG9nKEYxMTEsInNlbmRpbmcgc2VxdWVuY2UgIixzZXFf YnVmLChsb25nKSBsKTsKKworICAgIGlmICghc3RyY21wKHNlcV9idWYsIkVPVCIpKSB7CisJdHRv Yyhkb3BhcignXDAwNCcpKTsKKwlpZiAoc2NyX2VjaG8pIGNvbm9sKCI8RU9UPiIpOworCWlmIChz ZXNsb2cgJiYgZHVwbGV4KQorICAgICAgICAgICAgbG9nc3RyKCI8RU9UPiIsNSk7CisgICAgfSBl bHNlIGlmICghc3RyY21wKHNlcV9idWYsIkJSRUFLIikgfHwKKwkgICAgICAgIXN0cmNtcChzZXFf YnVmLCJcXGIiKSB8fAorCSAgICAgICAhc3RyY21wKHNlcV9idWYsIlxcQiIpKSB7CisJdHRzbmRi KCk7CisJaWYgKHNjcl9lY2hvKSBjb25vbCgiPEJSRUFLPiIpOworCWlmIChzZXNsb2cpCisJICBs b2dzdHIoIntCUkVBS30iLDcpOworICAgIH0gZWxzZSB7CisJaWYgKGwgPiAwKSB7CisJICAgIGZv ciAoIHNiID0gc2VxX2J1ZjsgKnNiOyBzYisrKQorCSAgICAgICpzYiA9IGRvcGFyKCpzYik7CS8q IGFkZCBwYXJpdHkgKi8KKwkgICAgdHRvbCgoQ0hBUiAqKXNlcV9idWYsbCk7IC8qIHNlbmQgaXQg Ki8KKwkgICAgaWYgKHNjcl9lY2hvICYmIGR1cGxleCkgeworI2lmbmRlZiBOT0xPQ0FMCisjaWZk ZWYgT1MyCisJCXsJCQkvKiBFY2hvIHRvIGVtdWxhdG9yICovCisJCSAgICBjaGFyICpzID0gc2Vx X2J1ZjsKKwkJICAgIHdoaWxlICgqcykgeworCQkJc2NyaXB0d3J0YnVmKChVU0hPUlQpKnMpOwor CQkgICAgfQorCQl9CisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogTk9MT0NBTCAqLworCQlj b254byhsLHNlcV9idWYpOworCSAgICB9CisJICAgIGlmIChzZXNsb2cgJiYgZHVwbGV4KSAvKiBs b2cgaXQgKi8KKwkgICAgICBsb2dzdHIoc2VxX2J1ZixzdHJsZW4oc2VxX2J1ZikpOworCX0KKwlp ZiAoIW5vX2NyKSB7CisJICAgIHR0b2MoIGRvcGFyKENSKSApOworI2lmZGVmIFRDUFNPQ0tFVAor CSAgICBpZiAoaXNfdG4pIHsKKwkJaWYgKCFURUxPUFRfTUUoVEVMT1BUX0JJTkFSWSkgJiYgdG5f bmxtICE9IFROTF9DUikKKwkJICB0dG9jKChjaGFyKSgodG5fbmxtID09IFROTF9DUkxGKSA/CisJ CQkgICAgICBkb3BhcihMRikgOiBkb3BhcihOVUwpKSk7CisJCWVsc2UgaWYgKFRFTE9QVF9NRShU RUxPUFRfQklOQVJZKSAmJgorCQkJICh0bl9iX25sbSA9PSBUTkxfQ1JMRiB8fCB0bl9iX25sbSA9 PSBUTkxfQ1JOVUwpKQorCQkgIHR0b2MoKGNoYXIpKCh0bl9iX25sbSA9PSBUTkxfQ1JMRikgPwor CQkJICAgICAgZG9wYXIoTEYpIDogZG9wYXIoTlVMKSkpOworCSAgICB9CisjZW5kaWYgLyogVENQ U09DS0VUICovCisJICAgIGlmIChzZXNsb2cgJiYgZHVwbGV4KQorCSAgICAgIGxvZ2NoYXIoZG9w YXIoQ1IpKTsKKwl9CisgICAgfQorI2lmZGVmIE5UU0lHCisgICAgY2tUaHJlYWRFbmQodGhyZWFk aW5mbyk7CisjZW5kaWYgLyogTlRTSUcgKi8KKyAgICBTSUdSRVRVUk47Cit9CisKK1NJR1RZUAor I2lmZGVmIENLX0FOU0lDCitmYWlsb3NlcSh2b2lkICogdGhyZWFkaW5mbykKKyNlbHNlIC8qIENL X0FOU0lDICovCitmYWlsb3NlcSh0aHJlYWRpbmZvKSBWT0lEICogdGhyZWFkaW5mbzsKKyNlbmRp ZiAvKiBDS19BTlNJQyAqLworLyogZmFpbG9zZXEgKi8geworICAgICBvc2VxcmV0ID0gLTE7CQkv KiBlbHNlIC0tIGFsYXJtIHJhbmcgKi8KKyAgICAgU0lHUkVUVVJOOworfQorCitzdGF0aWMgaW50 CitvdXRzZXEoKSB7CisgICAgaW50IGRlbGF5OworCisgICAgb3NlcXJldCA9IDA7CQkJLyogSW5p dGlhbGl6ZSByZXR1cm4gY29kZSAqLworICAgIHdoaWxlKDEpIHsKKwlkZWxheSA9IHNlcXVlbmMo KTsKKwlhbHJtX2V4ZWN1dGUoIGNramFkZHIoYWxybXJuZyksIFNORF9BTFJNLCBzY3J0aW1lLCBk b29zZXEsIGZhaWxvc2VxICkgOworCisJaWYgKCFkZWxheSkKKwkgIHJldHVybihvc2VxcmV0KTsK KyNpZm5kZWYgTUFDCisJbXNsZWVwKERFTF9NU0VDKTsJCS8qIGRlbGF5LCBsb29wIHRvIG5leHQg c2VuZCAqLworI2VuZGlmIC8qIE1BQyAqLworICAgIH0KK30KKworCisvKiAgTCBPIEcgSSBOICAt LSAgKGhpc3RvcmljYWwgbWlzbm9tZXIpIEV4ZWN1dGUgdGhlIFNDUklQVCBjb21tYW5kICovCisK K2ludAorZG9sb2dpbihjbWRzdHIpIGNoYXIgKmNtZHN0cjsgeworCisjaWZkZWYgT1MyCisjaWZk ZWYgTlQKKyAgICBTSUdUWVAgKCogc2F2ZWFsbSkoaW50KTsJCS8qIFNhdmUgaW5jb21pbmcgYWxh cm0gZnVuY3Rpb24gKi8KKyNlbHNlIC8qIE5UICovCisgICAgU0lHVFlQICgqIHZvbGF0aWxlIHNh dmVhbG0pKGludCk7CS8qIFNhdmUgaW5jb21pbmcgYWxhcm0gZnVuY3Rpb24gKi8KKyNlbmRpZiAv KiBOVCAqLworI2Vsc2UgLyogT1MyICovCisgICAgU0lHVFlQICgqc2F2ZWFsbSkoKTsJCS8qIFNh dmUgaW5jb21pbmcgYWxhcm0gZnVuY3Rpb24gKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyAgICBjaGFy ICplOworCisgICAgcyA9IGNtZHN0cjsJCQkJLyogTWFrZSBnbG9iYWwgdG8gdGhpcyBtb2R1bGUg Ki8KKworICAgIHRsb2coRjEwMCxsb2dpbnYsIiIsMEwpOworCisgICAgaWYgKHNwZWVkIDwgMEwp IHNwZWVkID0gdHRnc3BkKCk7CisgICAgaWYgKHR0b3Blbih0dG5hbWUsJmxvY2FsLG1kbXR5cCww KSA8IDApIHsKKwlja21ha21zZyhzZXFfYnVmLFNCVUZMLCJTb3JyeSwgY2FuJ3Qgb3BlbiAiLHR0 bmFtZSxOVUxMLE5VTEwpOworCXBlcnJvcihzZXFfYnVmKTsKKwlyZXR1cm4oMCk7CisgICAgfQor ICAgIC8qIFdoZXRoZXIgdG8gZWNobyBzY3JpcHQgY29tbWFuZHMgLi4uICovCisgICAgc2NyX2Vj aG8gPSAoIXF1aWV0ICYmICFiYWNrZ3JkICYmIHNlY2hvKTsKKyNpZm5kZWYgTk9TUEwKKyAgICBp ZiAoc2NyX2VjaG8gJiYgY21kbHZsID4gMSkgeworCWlmIChjbWRzdGtbY21kbHZsXS5zcmMgPT0g Q01EX1RGKQorCSAgc2NyX2VjaG8gPSB0ZWNobzsKKwlpZiAoY21kc3RrW2NtZGx2bF0uc3JjID09 IENNRF9NRCkKKwkgIHNjcl9lY2hvID0gbWVjaG87CisgICAgfQorI2VuZGlmIC8qIE5PU1BMICov CisgICAgaWYgKHNjcl9lY2hvKSB7CisjaWZkZWYgTkVUQ09OTgorCWlmIChuZXR3b3JrKQorCSAg cHJpbnRmKCJFeGVjdXRpbmcgU0NSSVBUIHRvIGhvc3QgJXMuXG4iLHR0bmFtZSk7CisJZWxzZQor I2VuZGlmIC8qIE5FVENPTk4gKi8KKwkgIHByaW50ZigiRXhlY3V0aW5nIFNDUklQVCB0aHJvdWdo ICVzLCBzcGVlZCAlbGQuXG4iLHR0bmFtZSxzcGVlZCk7CisgICAgfQorI2lmZGVmIFROQ09ERQor ICAgIC8qIFRFTE5FVCBpbnB1dCBtdXN0IGJlIHNjYW5uZWQgZm9yIElBQyAqLworICAgIGlzX3Ru ID0gKGxvY2FsICYmIG5ldHdvcmsgJiYgSVNfVEVMTkVUKCkpIHx8CisJICAgICghbG9jYWwgJiYg c3N0ZWxuZXQpOworI2VuZGlmIC8qIFROQ09ERSAqLworCisgICAgKnNlcV9idWYgPSAwOworICAg IGZvciAoZSA9IHM7ICplOyBlKyspIGNrc3RybmNhdChzZXFfYnVmLGRiY2hyKCplKSxTQlVGTCk7 CisjaWZkZWYgQ09NTUVOVAorLyogU2tpcCB0aGlzIGJlY2F1c2UgaXQgdGVuZHMgdG8gY29udGFp biBhIHBhc3N3b3JkLi4uICovCisgICAgaWYgKHNjcl9lY2hvKSBwcmludGYoIlNDUklQVCBzdHJp bmc6ICVzXG4iLHNlcV9idWYpOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICB0bG9nKEYxMTAs IlNDUklQVCBzdHJpbmc6ICIsc2VxX2J1ZiwgMEwpOworCisvKiBDb25kaXRpb24gY29uc29sZSB0 ZXJtaW5hbCBhbmQgY29tbXVuaWNhdGlvbiBsaW5lLi4uICovCisKKyAgICBpZiAodHR2dChzcGVl ZCxmbG93KSA8IDApIHsKKwlwcmludGYoIlNvcnJ5LCBDYW4ndCBjb25kaXRpb24gY29tbXVuaWNh dGlvbiBsaW5lXG4iKTsKKwlyZXR1cm4oMCk7CisgICAgfQorICAgIC8qIFNhdmUgaW5pdGlhbCB0 aW1lciBpbnRlcnJ1cHQgdmFsdWUgKi8KKyAgICBzYXZlYWxtID0gc2lnbmFsKFNJR0FMUk0sU0lH X0lHTik7CisKKyAgICBmbHVzaGkoKTsJCQkJLyogRmx1c2ggc3RhbGUgaW5wdXQgKi8KKworLyog c3RhcnQgZXhwZWN0IC0gc2VuZCBzZXF1ZW5jZSAqLworCisgICAgd2hpbGUgKCpzKSB7CQkJLyog V2hpbGUgbm90IGRvbmUgd2l0aCBidWZmZXIgKi8KKworCXdoaWxlICgqcyAmJiBpc3NwYWNlKCpz KSkgcysrOwkvKiBTa2lwIG92ZXIgc2VwYXJhdGluZyB3aGl0ZXNwYWNlcyAqLworCQkJCQkvKiBH YXRoZXIgdXAgZXhwZWN0IHNlcXVlbmNlICovCisJZ290X2l0ID0gMDsKKwlyZWN2c2VxKCk7CisK Kwl3aGlsZSAoIWdvdF9pdCkgewkJLyogSGF2ZSBpdCB5ZXQ/ICovCisJICAgIGlmICgqcysrICE9 ICctJykJCS8qIE5vLCBpcyB0aGVyZSBhIGNvbmRpdGlvbmFsIHNlbmQ/ICovCisJICAgICAgZ290 byBmYWlscmV0OwkJLyogTm8sIHJldHVybiBmYWlsdXJlICovCisJICAgIGZsdXNoaSgpOwkJCS8q IFllcywgZmx1c2ggb3V0IGlucHV0IGJ1ZmZlciAqLworCSAgICBpZiAob3V0c2VxKCkpCQkvKiBJ ZiB1bmFibGUgdG8gc2VuZCwgKi8KKwkgICAgICBnb3RvIGZhaWxyZXQ7CQkvKiByZXR1cm4gZmFp bHVyZS4gKi8KKwkgICAgaWYgKCpzKysgIT0gJy0nKQkJLyogSWYgbm8gY29uZGl0aW9uYWwgcmVz cG9uc2UgaGVyZSwgKi8KKwkgICAgICBnb3RvIGZhaWxyZXQ7CQkvKiByZXR1cm4gZmFpbHVyZS4g Ki8KKwkgICAgcmVjdnNlcSgpOwkJCS8qIEFsbCBPSywgcmVhZCByZXNwb25zZSBmcm9tIGhvc3Qu ICovCisJfQkJCQkvKiBMb29wIGJhY2sgYW5kIGNoZWNrIGdvdF9pdCAqLworCisJd2hpbGUgKCpz ICYmICFpc3NwYWNlKCpzKyspICkgOwkvKiBTa2lwIG92ZXIgY29uZGl0aW9uYWxzICovCisJd2hp bGUgKCpzICYmIGlzc3BhY2UoKnMpKSBzKys7CS8qIFNraXAgb3ZlciBzZXBhcmF0aW5nIHdoaXRl c3BhY2VzICovCisJZmx1c2hpKCk7CQkJLyogRmx1c2ggKi8KKwlpZiAoKnMpIGlmIChvdXRzZXEo KSkgZ290byBmYWlscmV0OyAvKiBJZiBhbnkgKi8KKyAgICB9CisgICAgc2lnbmFsKFNJR0FMUk0s c2F2ZWFsbSk7CisgICAgaWYgKHNjcl9lY2hvKSBwcmludGYoIlNjcmlwdCBzdWNjZXNzZnVsLlxu Iik7CisgICAgdGxvZyhGMTAwLCJTY3JpcHQgc3VjY2Vzc2Z1bC4iLCIiLDBMKTsKKyAgICByZXR1 cm4oMSk7CisKK2ZhaWxyZXQ6CisgICAgc2lnbmFsKFNJR0FMUk0sc2F2ZWFsbSk7CisgICAgaWYg KHNjcl9lY2hvKSBwcmludGYoIlNvcnJ5LCBzY3JpcHQgZmFpbGVkXG4iKTsKKyAgICB0bG9nKEYx MDAsIlNjcmlwdCBmYWlsZWQiLCIiLDBMKTsKKyAgICByZXR1cm4oMCk7Cit9CisKKy8qICBGIEwg VSBTIEggSSAgLS0gIEZsdXNoLCBidXQgbG9nLCBTQ1JJUFQgaW5wdXQgYnVmZmVyICAqLworCitW T0lECitmbHVzaGkoKSB7CisgICAgaW50IG4sIHg7CisgICAgaWYgKAorCXNlc2xvZwkJCQkvKiBM b2dnaW5nIHNlc3Npb24/ICovCisJfHwgc2NyX2VjaG8JCQkvKiBPciBjb25zb2xlIGVjaG9pbmc/ ICovCisjaWZkZWYgTkVUQ09OTgorI2lmZGVmIFROQ09ERQorCS8qIFRFTE5FVCBpbnB1dCBtdXN0 IGJlIHNjYW5uZWQgZm9yIElBQyAqLworCXx8IGlzX3RuCisjZW5kaWYgLyogVE5DT0RFICovCisj ZW5kaWYgLyogTkVUQ09OTiAqLworCSkgeworICAgICAgICBpZiAoKG4gPSB0dGNoaygpKSA8IDAp CQkvKiBZZXMsIGFueXRoaW5nIGluIGJ1ZmZlcj8gKi8KKwkgIHJldHVybjsKKwlpZiAobiA+IE1B WEJVUlNUKSBuID0gTUFYQlVSU1Q7CS8qIE1ha2Ugc3VyZSBub3QgdG9vIG11Y2gsICovCisJbXlm bHNoKCk7CQkJLyogYW5kIHRoYXQgYnVmZmVycyBhcmUgZW1wdHkuICovCisJd2hpbGUgKG4tLSA+ IDApIHsKKyAgCSAgICB4ID0gdHRpbmMoMCk7CQkvKiBDb2xsZWN0IGEgY2hhcmFjdGVyICovCisj aWZkZWYgTkVUQ09OTgorI2lmZGVmIFROQ09ERQorLyogQ2hlY2sgZm9yIHRlbG5ldCBwcm90b2Nv bCBuZWdvdGlhdGlvbiAqLworICAJICAgIGlmIChpc190biAmJiAoKHggJiAweGZmKSA9PSBJQUMp ICkgeworCQlteWZsc2goKTsJCS8qIFN5bmMgb3V0cHV0ICovCisgIAkJc3dpdGNoICh0bl9kb29w KChDSEFSKSh4ICYgMHhmZiksZHVwbGV4LHR0aW5jKSkgeworICAJCSAgY2FzZSAyOiBkdXBsZXgg PSAwOyBicmVhazsKKyAgCQkgIGNhc2UgMTogZHVwbGV4ID0gMTsKKwkJICBkZWZhdWx0OiBicmVh azsKKwkJfQorCisJCS8qIFJlY2FsY3VsYXRlIGZsdXNoIGNvdW50ICovCisJCWlmICgobiA9IHR0 Y2hrKCkpIDwgMCkKKwkJICByZXR1cm47CisJCWlmIChuID4gTUFYQlVSU1QpIG4gPSBNQVhCVVJT VDsKKyAgCQljb250aW51ZTsKKyAgCSAgICB9CisjZW5kaWYgLyogVE5DT0RFICovCisjZW5kaWYg LyogTkVUQ09OTiAqLworCSAgICBpZiAoc2NyX2VjaG8pIGNvbmJ1Zltjb25jbnQrK10gPSAoQ0hB UikgeDsgLyogYnVmZmVyIGZvciBjb25zb2xlICovCisJICAgIGlmIChzZXNsb2cpCisjaWZkZWYg VU5JWAorCSAgICAgIGlmIChzZXNzZnQgIT0gMCB8fCB4ICE9ICdccicpCisjZWxzZQorI2lmZGVm IE9TSworCSAgICAgIGlmIChzZXNzZnQgIT0gMCB8fCB4ICE9ICdcMDEyJykKKyNlbmRpZiAvKiBP U0sgKi8KKyNlbmRpZiAvKiBVTklYICovCisJCXNlc2J1ZltzZXNjbnQrK10gPSAoQ0hBUikgeDsg LyogYnVmZmVyIGZvciBzZXNzaW9uIGxvZyAqLworICAJfQorCW15ZmxzaCgpOworICAgIH0gZWxz ZSB0dGZsdWkoKTsJCQkvKiBPdGhlcndpc2UganVzdCBmbHVzaC4gKi8KK30KKworI2Vsc2UgLyog Tk9TQ1JJUFQgKi8KK2NoYXIgKmxvZ2ludiA9ICJTY3JpcHQgQ29tbWFuZCBEaXNhYmxlZCI7Cisj ZW5kaWYgLyogTk9TQ1JJUFQgKi8KKyNlbmRpZiAvKiBOT0lDUCAqLwoKZGlmZiAtLWdpdCBhL2Nr ZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1c2lnLmMgYi9ja2VybWl0LTku MC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdXNpZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAuLmU0NTU2ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9ja2VybWl0LTkuMC4z MDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdXNpZy5jCkBAIC0wLDAgKzEsMzU0IEBACitjaGFy ICpja3VzaWd2ID0gIlNpZ25hbCBzdXBwb3J0LCA5LjAuMTAwLCAxNiBPY3QgMjAwOSI7CisKKy8q IEMgSyBVIFMgSSBHICAtLSAgS2VybWl0IHNpZ25hbCBoYW5kbGluZyBmb3IgVW5peCBhbmQgT1Mv MiBzeXN0ZW1zICovCisKKy8qCisgIEF1dGhvcjogSmVmZnJleSBBbHRtYW4gKGphbHRtYW5Ac2Vj dXJlLWVuZHBvaW50cy5jb20pLAorICAgICAgICAgICAgU2VjdXJlIEVuZHBvaW50cyBJbmMuLCBO ZXcgWW9yayBDaXR5LgorCisgIENvcHlyaWdodCAoQykgMTk4NSwgMjAwOSwKKyAgICBUcnVzdGVl cyBvZiBDb2x1bWJpYSBVbml2ZXJzaXR5IGluIHRoZSBDaXR5IG9mIE5ldyBZb3JrLgorICAgIEFs bCByaWdodHMgcmVzZXJ2ZWQuICBTZWUgdGhlIEMtS2VybWl0IENPUFlJTkcuVFhUIGZpbGUgb3Ig dGhlCisgICAgY29weXJpZ2h0IHRleHQgaW4gdGhlIGNrY21haS5jIG1vZHVsZSBmb3IgZGlzY2xh aW1lciBhbmQgcGVybWlzc2lvbnMuCisqLworI2luY2x1ZGUgImNrY3N5bS5oIgorI2luY2x1ZGUg ImNrY2FzYy5oIgkJCS8qIEFTQ0lJIGNoYXJhY3RlciBzeW1ib2xzICovCisjaW5jbHVkZSAiY2tj ZGViLmgiCQkJLyogRGVidWcgJiBvdGhlciBzeW1ib2xzICovCisjaW5jbHVkZSAiY2tja2VyLmgi CQkJLyogS2VybWl0IHN5bWJvbHMgKi8KKyNpbmNsdWRlICJja2NuZXQuaCIJCQkvKiBOZXR3b3Jr IHN5bWJvbHMgKi8KKyNpZm5kZWYgTk9TUEwKKyNpbmNsdWRlICJja3V1c3IuaCIKKyNlbmRpZiAv KiBOT1NQTCAqLworCisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaWZkZWYgTlQKKyNpbmNsdWRlIDxz ZXRqbXBleC5oPgorI2luY2x1ZGUgPGV4Y3B0Lmg+CisjZWxzZSAvKiBOVCAqLworI2luY2x1ZGUg PHNldGptcC5oPgorI2VuZGlmIC8qIE5UICovCisjaW5jbHVkZSAiY2tjc2lnLmgiCisKKyNpZmRl ZiBOT0NDVFJBUAorZXh0ZXJuIGNram1wYnVmIGNtamJ1ZjsKKyNlbmRpZiAvKiBOT0NDVFJBUCAq LworCisjaWZkZWYgTUFDCisjZGVmaW5lIHNpZ25hbCBtc2lnbmFsCisjZGVmaW5lIFNJR1RZUCBs b25nCisjZGVmaW5lIGFsYXJtIG1hbGFybQorI2RlZmluZSBTSUdfSUdOIDAKKyNkZWZpbmUgU0lH QUxSTSAxCisjZGVmaW5lIFNJR0lOVCAgMgorU0lHVFlQICgqbXNpZ25hbChpbnQgdHlwZSwgU0lH VFlQICgqZnVuYykoaW50KSkpKGludCk7CisjZW5kaWYgLyogTUFDICovCisKKyNpZmRlZiBTVFJB VFVTCisvKiBXZSBrbm93IHRoZXNlIGFyZSBzZXQgaGVyZS4gIE1VU1QgdW5zZXQgdGhlbSBiZWZv cmUgdGhlIGRlZmluaXRpb25zLiAqLworI2RlZmluZSBzaWduYWwgdnNpZ25hbAorI2RlZmluZSBh bGFybSB2YWxhcm0KK1NJR1RZUCAoKnZzaWduYWwoaW50IHR5cGUsIFNJR1RZUCAoKmZ1bmMpKGlu dCkpKShpbnQpOworaW50IHZhbGFybShpbnQgaW50ZXJ2YWwpOworI2VuZGlmIC8qIFNUUkFUVVMg Ki8KKworI2lmZGVmIEFNSUdBCisjZGVmaW5lIHNpZ25hbCBhc2lnbmFsCisjZGVmaW5lIGFsYXJt IGFhbGFybQorI2RlZmluZSBTSUdBTFJNIChfTlVNU0lHKzEpCisjZGVmaW5lIFNJR1RZUCB2b2lk CitTSUdUWVAgKCphc2lnbmFsKGludCB0eXBlLCBTSUdUWVAgKCpmdW5jKShpbnQpKSkoaW50KTsK K3Vuc2lnbmVkIGFhbGFybSh1bnNpZ25lZCk7CisjZW5kaWYgLyogQU1JR0EgKi8KKworI2lmZGVm IE5UQVNNCitEV09SRAorY2tnZXRJUCh2b2lkKQoreworICAgX19hc20KKyAgIHsKKyAgICAgIG1v diBlYXgsIGR3b3JkIHB0ciBbZXNwKzB4MTBdCisgICAgICBqbXAgY2tnZXRJUCArIDB4MTgKKyAg IH0KKyAgIHJldHVybiAxOworCit9CisjZW5kaWYgLyogTlRBU00gKi8KKworI2lmZGVmIE5UCitE V09SRAorZXhjZXB0aW9uX2ZpbHRlciggdm9pZCApCit7CisgICBHZXRFeGNlcHRpb25JbmZvcm1h dGlvbiA7CisgICByZXR1cm4oIEVYQ0VQVElPTl9FWEVDVVRFX0hBTkRMRVIgKSA7Cit9Cit2b2lk CitjcmFzaCggdm9pZCApCit7CisgICBpbnQgeCA9IDAsIHkgPSAwIDsKKyAgICB4IC8geSA7Cit9 CisjZW5kaWYgLyogTlQgKi8KKworI2lmbmRlZiBOT0NDVFJBUAoraW50CisjaWZkZWYgQ0tfQU5T SUMKK2NjX2V4ZWN1dGUoIGNranB0cihzal9idWYpLCBja19zaWdmdW5jIGRvZnVuYywgY2tfc2ln ZnVuYyBmYWlsZnVuYyApCisjZWxzZQorY2NfZXhlY3V0ZSggc2pfYnVmLCBkb2Z1bmMsIGZhaWxm dW5jKQorICAgIGNranB0cihzal9idWYpOworICAgIGNrX3NpZ2Z1bmMgZG9mdW5jOworICAgIGNr X3NpZ2Z1bmMgZmFpbGZ1bmM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIGNjX2V4ZWN1dGUg Ki8geworICAgIGludCByYyA9IDAgOworI2lmZGVmIE5UQVNNCisgICBEV09SRCBFaXAsIEVzcCA7 CisgICAgaXNpbnRlcnJ1cHRlZCA9IDA7CisgICAgc2pfYnVmLT5yZXRjb2RlID0gMCA7CisgICAg c2pfYnVmLT5JZCA9IEdldEN1cnJlbnRUaHJlYWRJZCgpIDsKKyAgICBtZW1zZXQoICZzal9idWYt PmNvbnRleHQsIDAsIHNpemVvZihDT05URVhUKSApOworICAgIHNqX2J1Zi0+Y29udGV4dC5Db250 ZXh0RmxhZ3MgPSBDT05URVhUX0ZVTEwgOworI2lmbmRlZiBDT01NRU5UCisgICAgR2V0VGhyZWFk Q29udGV4dChHZXRDdXJyZW50VGhyZWFkKCksICYoc2pfYnVmLT5jb250ZXh0KSApIDsKKyAgICBf X2FzbQorICAgIHsKKyAgICAgICAgICBtb3YgICAgICAgZWN4LGR3b3JkIHB0ciBbc2pfYnVmXQor ICAgICAgICAgIG1vdiAgICAgICBkd29yZCBwdHIgW2VjeCsweGM0XSxlc3AKKyAgICB9CisgICBz al9idWYtPmNvbnRleHQuRUZsYWdzID0gNTMwIDsKKyAgIHNqX2J1Zi0+Y29udGV4dC5FaXAgPSBj a2dldElQKCkrMHgwQyA7CisjZWxzZSAvKiBDT01NRU5UICovCisgICBfX2FzbQorICAgeworICAg ICAgbW92IGVheCwgZHdvcmQgcHRyIFtzal9idWZdCisgICAgICBwdXNoIGVheAorICAgICAgbW92 IGVheCwgMHhmZmZmZmZmZQorICAgICAgcHVzaCBlYXgKKyAgICAgIG1vdiBlYXgsIDB4MDAwMDAw MzkKKyAgICAgIG1vdiBlZHgsZXNwCisgICAgICBpbnQgMHgyZQorICAgICAgcG9wIGVheAorICAg ICAgcG9wIGVheAorICAgfQorI2VuZGlmIC8qIENPTU1FTlQgKi8KKyNlbmRpZiAvKiBOVEFTTSAq LworICAgIGlmICgKKyNpZmRlZiBOVEFTTQorICAgICAgICAgaXNpbnRlcnJ1cHRlZAorI2Vsc2UK KwkJIGNrc2V0am1wKGNramRyZWYoc2pfYnVmKSkKKyNlbmRpZiAvKiBOVEFTTSAqLworCQkgKSB7 CisjaWZkZWYgTlRBU00KKyAgICAgICAgICBfX2FzbQorICAgICAgICAgICAgeworICAgICAgICAg ICAgICAgIG1vdiBlc3AsIEVTUFRvUmVzdG9yZQorICAgICAgICAgICAgfQorICAgICAgICAgICAg aXNpbnRlcnJ1cHRlZCA9IDAgOworI2VuZGlmIC8qIE5UQVNNICovCisgICAgICAgICAgICAoKmZh aWxmdW5jKShOVUxMKSA7CisjaWZkZWYgTlRBU00KKyAgICAgICAgICAgICByYyA9IHNqX2J1Zi0+ cmV0Y29kZSA7CisjZWxzZSAvKiBOVEFTTSAqLworICAgICAgICAgICAgIHJjID0gLTEgOworI2Vu ZGlmICAvKiBOVEFTTSAqLworICAgICAgICAgfSBlbHNlIHsKKyNpZmRlZiBOVAorICAgICAgICAg ICAgX190cnkgeworICAgICAgICAgICAgICAgKCpkb2Z1bmMpKE5VTEwpOworICAgICAgICAgICAg fQorICAgICAgICAgICAgX19leGNlcHQoZXhjZXB0aW9uX2ZpbHRlcigpKQorICAgICAgICAgICAg eworICAgICAgICAgICAgICAgZGVidWcoRjEwMCwiY2NfZXhlY3V0ZSBfX2V4Y2VwdCIsIiIsMCk7 CisgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLAorCQkgICAgICJleGNlcHRpb25fZmlsdGVyIiwK KwkJICAgICAiX2V4Y2VwdGlvbl9jb2RlIiwKKwkJICAgICBldEV4Y2VwdGlvbkNvZGUoKQorCQkg ICAgICk7CisgICAgICAgICAgICAgICBsb25nam1wKGNramRyZWYoc2pfYnVmKSxTSUdJTlQpOwor ICAgICAgICAgICAgfQorI2Vsc2UgLyogTlQgKi8KKyAgICAgICAgICAgICgqZG9mdW5jKShOVUxM KTsKKyNlbmRpZiAvKiBOVCAqLworICAgICAgICAgfQorICAgcmV0dXJuIHJjIDsKK30KKyNlbmRp ZiAvKiBOT0NDVFJBUCAqLworCitpbnQKKyNpZmRlZiBDS19BTlNJQwkJCQkvKiBBTlNJQyBDIGRl Y2xhcmF0aW9uLi4uICovCithbHJtX2V4ZWN1dGUoY2tqcHRyKHNqX2J1ZiksCisJICAgICBpbnQg dGltbywKKwkgICAgIGNrX3NpZ2hhbmQgaGFuZGxlciwKKwkgICAgIGNrX3NpZ2Z1bmMgZG9mdW5j LAorCSAgICAgY2tfc2lnZnVuYyBmYWlsZnVuYworCSAgICAgKQorCisjZWxzZSAvKiBOb3QgQU5T SUMgQyAuLi4gKi8KKworYWxybV9leGVjdXRlKHNqX2J1ZiwKKwkgICAgIHRpbW8sCisJICAgICBo YW5kbGVyLAorCSAgICAgZG9mdW5jLAorCSAgICAgZmFpbGZ1bmMKKwkgICAgICkKKyAgICBja2pw dHIoc2pfYnVmKTsKKyAgICBpbnQgdGltbzsKKyAgICBja19zaWdoYW5kIGhhbmRsZXI7CisgICAg Y2tfc2lnZnVuYyBkb2Z1bmM7CisgICAgY2tfc2lnZnVuYyBmYWlsZnVuYzsKKyNlbmRpZiAvKiBD S19BTlNJQyAqLworCisvKiBhbHJtX2V4ZWN1dGUgKi8geworCisgICAgaW50IHJjID0gMDsKKyAg ICBpbnQgc2F2YWxybSA9IDA7CitfUFJPVE9UWVAoU0lHVFlQICgqc2F2aGFuZGxlciksIChpbnQp KTsKKworICAgIHNhdmFscm0gPSBhbGFybSh0aW1vKTsKKyAgICBzYXZoYW5kbGVyID0gc2lnbmFs KFNJR0FMUk0sIGhhbmRsZXIpOworCisjaWZkZWYgTlRBU00KKyAgICBzal9idWYtPnJldGNvZGUg PSAwIDsKKyAgICBzal9idWYtPklkID0gR2V0Q3VycmVudFRocmVhZElkKCk7CisgICAgbWVtc2V0 KCZzal9idWYtPmNvbnRleHQsIDAsIHNpemVvZihDT05URVhUKSk7CisgICAgc2pfYnVmLT5jb250 ZXh0LkNvbnRleHRGbGFncyA9IENPTlRFWFRfRlVMTDsKKyNpZm5kZWYgQ09NTUVOVAorICAgIEdl dFRocmVhZENvbnRleHQoR2V0Q3VycmVudFRocmVhZCgpLCAmKHNqX2J1Zi0+Y29udGV4dCkpOwor I2Vsc2UKKyAgIF9fYXNtCisgICB7CisgICAgICBtb3YgZWF4LCBkd29yZCBwdHIgW3NqX2J1Zl0K KyAgICAgIHB1c2ggZWF4CisgICAgICBtb3YgZWF4LCAweGZmZmZmZmZlCisgICAgICBwdXNoIGVh eAorICAgICAgbW92IGVheCwgMHgwMDAwMDAzOQorICAgICAgbW92IGVkeCxlc3AKKyAgICAgIGlu dCAweDJlCisgICAgICBwb3AgZWF4CisgICAgICBwb3AgZWF4CisgICB9CisjZW5kaWYKKyAgICBp c2ludGVycnVwdGVkID0gMDsKKyNlbmRpZiAvKiBOVEFTTSAqLworICAgIGlmICgKKyNpZmRlZiBO VEFTTQorCQkgc2pfYnVmLT5yZXRjb2RlCisjZWxzZQorCQkgY2tzZXRqbXAoY2tqZHJlZihzal9i dWYpKQorI2VuZGlmIC8qIE5UQVNNICovCisJCSkgeworCSgqZmFpbGZ1bmMpKE5VTEwpIDsKKwly YyA9IC0xIDsKKyAgICB9IGVsc2UgeworI2lmZGVmIE5UCisgICAgICAgX190cnkgeworICAgICAg ICAgICgqZG9mdW5jKShOVUxMKSA7CisgICAgICAgfQorICAgICAgIF9fZXhjZXB0KCBleGNlcHRp b25fZmlsdGVyKCkgKQorICAgICAgIHsKKyAgICAgICAgICBkZWJ1ZyhGMTAwLCJhbHJtX2V4ZWN1 dGUgX19leGNlcHQiLCIiLDApOworICAgICAgICAgIGRlYnVnKEYxMTEsImV4Y2VwdGlvbl9maWx0 ZXIiLAorCQkiX2V4Y2VwdGlvbl9jb2RlIiwKKwkJR2V0RXhjZXB0aW9uQ29kZSgpCisJCSk7Cisg ICAgICAgICAgbG9uZ2ptcChja2pkcmVmKHNqX2J1ZiksU0lHSU5UKTsKKyAgICAgICB9CisjZWxz ZSAvKiBOVCAqLworICAgICAgICgqZG9mdW5jKShOVUxMKSA7CisjZW5kaWYgLyogTlQgKi8KKyAg ICB9CisgICAgYWxhcm0oc2F2YWxybSkgOworICAgIGlmICggc2F2aGFuZGxlciApCisgICAgICAg IHNpZ25hbCggU0lHQUxSTSwgc2F2aGFuZGxlciApIDsKKyAgICByZXR1cm4gcmMgOworfQorCitp bnQKKyNpZmRlZiBDS19BTlNJQwkJCQkvKiBBTlNJQyBDIGRlY2xhcmF0aW9uLi4uICovCitjY19h bHJtX2V4ZWN1dGUoY2tqcHRyKHNqX2J1ZiksCisJCWludCB0aW1vLAorCQlja19zaWdoYW5kIGhh bmRsZXIsCisJCWNrX3NpZ2Z1bmMgZG9mdW5jLAorCQlja19zaWdmdW5jIGZhaWxmdW5jCisJCSkK KworI2Vsc2UgLyogTm90IEFOU0lDIEMgLi4uICovCisKK2NjX2Fscm1fZXhlY3V0ZShzal9idWYs CisJICAgICB0aW1vLAorCSAgICAgaGFuZGxlciwKKwkgICAgIGRvZnVuYywKKwkgICAgIGZhaWxm dW5jCisJICAgICApCisgICAgY2tqcHRyKHNqX2J1Zik7CisgICAgaW50IHRpbW87CisgICAgY2tf c2lnaGFuZCBoYW5kbGVyOworICAgIGNrX3NpZ2Z1bmMgZG9mdW5jOworICAgIGNrX3NpZ2Z1bmMg ZmFpbGZ1bmM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKworLyogY2NfYWxybV9leGVjdXRlICov IHsKKworICAgIGludCByYyA9IDA7CisgICAgaW50IHNhdmFscm0gPSAwOworX1BST1RPVFlQKFNJ R1RZUCAoKnNhdmhhbmRsZXIpLCAoaW50KSk7CisgICAgc2F2YWxybSA9IGFsYXJtKHRpbW8pOwor ICAgIHNhdmhhbmRsZXIgPSBzaWduYWwoIFNJR0FMUk0sIGhhbmRsZXIgKTsKKworI2lmZGVmIE5U QVNNCisgICAgc2pfYnVmLT5yZXRjb2RlID0gMCA7CisgICAgc2pfYnVmLT5JZCA9IEdldEN1cnJl bnRUaHJlYWRJZCgpIDsKKyAgICBtZW1zZXQoICZzal9idWYtPmNvbnRleHQsIDAsIHNpemVvZihD T05URVhUKSApOworICAgIHNqX2J1Zi0+Y29udGV4dC5Db250ZXh0RmxhZ3MgPSBDT05URVhUX0ZV TEwgOworI2lmbmRlZiBDT01NRU5UCisgICAgR2V0VGhyZWFkQ29udGV4dCggR2V0Q3VycmVudFRo cmVhZCgpLCAmKHNqX2J1Zi0+Y29udGV4dCkgKSA7CisjZWxzZQorICAgX19hc20KKyAgIHsKKyAg ICAgIG1vdiBlYXgsIGR3b3JkIHB0ciBbc2pfYnVmXQorICAgICAgcHVzaCBlYXgKKyAgICAgIG1v diBlYXgsIDB4ZmZmZmZmZmUKKyAgICAgIHB1c2ggZWF4CisgICAgICBtb3YgZWF4LCAweDAwMDAw MDM5CisgICAgICBtb3YgZWR4LGVzcAorICAgICAgaW50IDB4MmUKKyAgICAgIHBvcCBlYXgKKyAg ICAgIHBvcCBlYXgKKyAgIH0KKyNlbmRpZgorICAgIGlzaW50ZXJydXB0ZWQgPSAwOworI2VuZGlm IC8qIE5UQVNNICovCisgICAgaWYgKAorI2lmZGVmIE5UQVNNCisJCSBzal9idWYtPnJldGNvZGUK KyNlbHNlCisJCSBja3NldGptcChja2pkcmVmKHNqX2J1ZikpCisjZW5kaWYgLyogTlRBU00gKi8K KwkJKSB7CisJKCpmYWlsZnVuYykoTlVMTCkgOworCXJjID0gLTEgOworICAgIH0gZWxzZSB7Cisj aWZkZWYgTlQKKyAgICAgICBfX3RyeSB7CisgICAgICAgICAgKCpkb2Z1bmMpKE5VTEwpIDsKKyAg ICAgICB9CisgICAgICAgX19leGNlcHQoIGV4Y2VwdGlvbl9maWx0ZXIoKSApCisgICAgICAgewor CSAgIGRlYnVnKEYxMDAsImNjX2Fscm1fZXhlY3V0ZSBfX2V4Y2VwdCIsIiIsMCk7CisJICAgZGVi dWcoRjExMSwKKwkJICJleGNlcHRpb25fZmlsdGVyIiwKKwkJICJfZXhjZXB0aW9uX2NvZGUiLAor CQkgR2V0RXhjZXB0aW9uQ29kZSgpCisJCSApOworCSAgIGxvbmdqbXAoY2tqZHJlZihzal9idWYp LFNJR0lOVCkgOworICAgICAgIH0KKyNlbHNlIC8qIE5UICovCisgICAgICAgKCpkb2Z1bmMpKE5V TEwpIDsKKyNlbmRpZiAvKiBOVCAqLworICAgIH0KKyAgICBhbGFybShzYXZhbHJtKTsKKyAgICBp ZiAoc2F2aGFuZGxlcikKKyAgICAgIHNpZ25hbChTSUdBTFJNLHNhdmhhbmRsZXIpOworICAgIHJl dHVybihyYyk7Cit9CgpkaWZmIC0tZ2l0IGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQt OS4wLjMwMi9ja3VzaWcuaCBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIv Y2t1c2lnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQ4MjkwMAotLS0g L2Rldi9udWxsCisrKyBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1 c2lnLmgKQEAgLTAsMCArMSw3OSBAQAorLyogIEMgSyBVIFMgSSBHIC4gSCAgKi8KKworLyogIERl ZmluaXRpb25zIGFuZCBwcm90b3R5cGVzIGZvciBzaWduYWwgaGFuZGxpbmcgICovCisKKy8qCisg IEF1dGhvcjogSmVmZnJleSBFIEFsdG1hbiAoamFsdG1hbkBzZWN1cmUtZW5kcG9pbnRzLmNvbSks CisgICAgICAgICAgICBTZWN1cmUgRW5kcG9pbnRzIEluYy4sIE5ldyBZb3JrIENpdHkuCisKKyAg Q29weXJpZ2h0IChDKSAxOTg1LCAyMDA5LAorICAgIFRydXN0ZWVzIG9mIENvbHVtYmlhIFVuaXZl cnNpdHkgaW4gdGhlIENpdHkgb2YgTmV3IFlvcmsuCisgICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4g IFNlZSB0aGUgQy1LZXJtaXQgQ09QWUlORy5UWFQgZmlsZSBvciB0aGUKKyAgICBjb3B5cmlnaHQg dGV4dCBpbiB0aGUgY2tjbWFpLmMgbW9kdWxlIGZvciBkaXNjbGFpbWVyIGFuZCBwZXJtaXNzaW9u cy4KKyovCisKKyNpZmRlZiBDS19BTlNJQwordHlwZWRlZiB2b2lkICgqY2tfc2lnZnVuYykodm9p ZCAqKTsKK3R5cGVkZWYgdm9pZCAoKmNrX3NpZ2hhbmQpKGludCk7CisjZWxzZQordHlwZWRlZiBW T0lEICgqY2tfc2lnZnVuYykoKTsKK3R5cGVkZWYgVk9JRCAoKmNrX3NpZ2hhbmQpKCk7CisjZW5k aWYgLyogQ0tfQU5TSUMgKi8KKworLyogTWFjcm9zIGZvciBQT1NJWCB2cyBvbGQtc3R5bGUgc2ln bmFsIGhhbmRsaW5nLiAqLworCisjaWZkZWYgQ0tfUE9TSVhfU0lHCit0eXBlZGVmIHNpZ2ptcF9i dWYgY2tqbXBidWY7CisjZWxzZQordHlwZWRlZiBqbXBfYnVmIGNram1wYnVmOworI2VuZGlmIC8q IENLX1BPU0lYX1NJRyAqLworLyoKKyAgU3VwcG9zZSB5b3Ugd2FudCB0byBwYXNzIHRoZSBhZGRy ZXNzIG9mIGEgam1wX2J1ZiBiYXIgdG8gYSBmdW5jdGlvbiBmb28uCisgIFNpbmNlIGptcF9idWYg aXMgbm9ybWFsbHkgZGVmaW5lZCAodHlwZWRlZidkKSBhcyBhbiBhcnJheSwgeW91IHdvdWxkIGRv CisgIGl0IGxpa2UgdGhpczogIGZvbyhiYXIpLCB3aGVyZSBmb28gPSBmb28oam1wX2J1ZiBiYXIp LiAgQnV0IHN1cHBvc2UgYQorICBqbXBfYnVmIGlzIChzYXkpIGEgc3RydWN0IHJhdGhlciB0aGFu IGFuIGFycmF5LiAgVGhlbiB5b3UgbXVzdCBkbworICBmb28oJmJhcikgd2hlcmUgZm9vIGlzIGZv byhqbXBfYnVmICogYmFyKS4gIFRoaXMgaXMgY29udHJvbGxlZCBoZXJlIGluCisgIHRoZSB0cmFk aXRpb25hbCBmYXNoaW9uLCBieSBpZmRlZnMuICBCeSBkZWZhdWx0LCB3ZSBhc3N1bWUgdGhhdCBq bXBfYnVmCisgIGlzIGFuIGFycmF5LiAgRGVmaW5lIHRoZSBzeW1ib2wgSkJOT1RBUlJBWSBpZiBq bXBfYnVmIGlzIG5vdCBhbiBhcnJheS4KKyovCisjaWZuZGVmIEpCTk9UQVJSQVkKKyNpZmRlZiBO VAorI2RlZmluZSBKQk5PVEFSUkFZCisjZW5kaWYgLyogTlQgKi8KKyNlbmRpZiAvKiBKQk5PVEFS UkFZICovCisKKyNpZmRlZiBKQk5PVEFSUkFZCit0eXBlZGVmIGNram1wYnVmICogY2tqcHRyOwor I2RlZmluZSBja2phZGRyKHgpICYgeAorI2RlZmluZSBja2pkcmVmKHgpICogeAorI2lmZGVmIENL X1BPU0lYX1NJRworI2RlZmluZSBja3NldGptcCh4KSBzaWdzZXRqbXAoeCwxKQorI2Vsc2UKKyNk ZWZpbmUgY2tzZXRqbXAoeCkgc2V0am1wKHgsMSkKKyNlbmRpZiAvKiBDS19QT1NJWF9TSUcgKi8K KyNlbHNlICAvKiBqbXBfYnVmIGlzIGFuIGFycmF5ICovCit0eXBlZGVmIGNram1wYnVmIGNranB0 cjsKKyNkZWZpbmUgY2tqYWRkcih4KSB4CisjZGVmaW5lIGNramRyZWYoeCkgeAorI2lmZGVmIENL X1BPU0lYX1NJRworI2RlZmluZSBja3NldGptcCBzaWdzZXRqbXAKKyNlbHNlCisjZGVmaW5lIGNr c2V0am1wIHNldGptcAorI2VuZGlmIC8qIENLX1BPU0lYX1NJRyAqLworI2VuZGlmIC8qIEpCTk9U QVJSQVkgKi8KKworX1BST1RPVFlQKCBpbnQgY2NfZXhlY3V0ZSwgKGNranB0ciwgY2tfc2lnZnVu YywgY2tfc2lnZnVuYykgKTsKK19QUk9UT1RZUCggaW50IGFscm1fZXhlY3V0ZSwKKwkgIChja2pw dHIsCisJICAgaW50IHRpbW8sCisJICAgY2tfc2lnaGFuZCBoYW5kbGVyLAorCSAgIGNrX3NpZ2Z1 bmMsIGNrX3NpZ2Z1bmMpICk7CitfUFJPVE9UWVAoIGludCBjY19hbHJtX2V4ZWN1dGUsCisJICAo Y2tqcHRyLAorCSAgIGludCB0aW1vLAorCSAgIGNrX3NpZ2hhbmQgaGFuZGxlciwKKwkgICBja19z aWdmdW5jLAorCSAgIGNrX3NpZ2Z1bmMpICk7CisKKy8qIEVuZCBvZiBja3VzaWcuaCAqLworCgpk aWZmIC0tZ2l0IGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3V0aW8u YyBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1dGlvLmMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ3OWUwYwotLS0gL2Rldi9udWxsCisrKyBi L2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1dGlvLmMKQEAgLTAsMCAr MSwxNjA1NCBAQAorI2RlZmluZSBDS1VUSU9fQworCisjaWZkZWYgYWVnaXMKK2NoYXIgKmNreHYg PSAiQWVnaXMgQ29tbXVuaWNhdGlvbnMgc3VwcG9ydCwgOS4wLjMyNiwgMjAgQXVndXN0IDIwMTEi OworI2Vsc2UKKyNpZmRlZiBQbGFuOQorY2hhciAqY2t4diA9ICJQbGFuIDkgQ29tbXVuaWNhdGlv bnMgc3VwcG9ydCwgOS4wLjMyNiwgMjAgQXVndXN0IDIwMTEiOworI2Vsc2UKK2NoYXIgKmNreHYg PSAiVU5JWCBDb21tdW5pY2F0aW9ucyBzdXBwb3J0LCA5LjAuMzI2LCAyMCBBdWd1c3QgMjAxMSI7 CisjZW5kaWYgLyogUGxhbjkgKi8KKyNlbmRpZiAvKiBhZWdpcyAqLworCisvKiAgQyBLIFUgVCBJ IE8gICovCisKKy8qIEMtS2VybWl0IGludGVycnVwdCwgY29tbXVuaWNhdGlvbnMgY29udHJvbCBh bmQgSS9PIGZ1bmN0aW9ucyBmb3IgVU5JWCAqLworCisvKgorICBBdXRob3I6IEZyYW5rIGRhIENy dXogKGZkY0Bjb2x1bWJpYS5lZHUpLAorICBDb2x1bWJpYSBVbml2ZXJzaXR5IEFjYWRlbWljIElu Zm9ybWF0aW9uIFN5c3RlbXMsIE5ldyBZb3JrIENpdHkuCisKKyAgQ29weXJpZ2h0IChDKSAxOTg1 LCAyMDExLAorICAgIFRydXN0ZWVzIG9mIENvbHVtYmlhIFVuaXZlcnNpdHkgaW4gdGhlIENpdHkg b2YgTmV3IFlvcmsuCisgICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFNlZSB0aGUgQy1LZXJtaXQg Q09QWUlORy5UWFQgZmlsZSBvciB0aGUKKyAgICBjb3B5cmlnaHQgdGV4dCBpbiB0aGUgY2tjbWFp LmMgbW9kdWxlIGZvciBkaXNjbGFpbWVyIGFuZCBwZXJtaXNzaW9ucy4KKyovCisKKy8qCisgIE5P VEUgVE8gQ09OVFJJQlVUT1JTOiBUaGlzIGZpbGUsIGFuZCBhbGwgdGhlIG90aGVyIEMtS2VybWl0 IGZpbGVzLCBtdXN0IGJlCisgIGNvbXBhdGlibGUgd2l0aCBDIHByZXByb2Nlc3NvcnMgdGhhdCBz dXBwb3J0IG9ubHkgI2lmZGVmLCAjZWxzZSwgI2VuZGlmLAorICAjZGVmaW5lLCBhbmQgI3VuZGVm LiAgUGxlYXNlIGRvIG5vdCB1c2UgI2lmLCBsb2dpY2FsIG9wZXJhdG9ycywgb3Igb3RoZXIKKyAg cHJlcHJvY2Vzc29yIGZlYXR1cmVzIGluIGFueSBvZiB0aGUgcG9ydGFibGUgQy1LZXJtaXQgbW9k dWxlcy4gIFlvdSBjYW4sCisgIG9mIGNvdXJzZSwgdXNlIHRoZXNlIGNvbnN0cnVjdGlvbnMgaW4g cGxhdGZvcm0tc3BlY2lmaWMgbW9kdWxlcyB3aGVuIHRoZXkKKyAgYXJlIHN1cHBvcnRlZCBieSBh bGwgY29tcGlsZXJzL3ByZXByb2Nlc3NvcnMgdGhhdCBjb3VsZCBiZSB1c2VkIG9uIHRoYXQKKyAg cGxhdGZvcm0uCisqLworCitleHRlcm4gaW50IG5ldHR5cGU7CQkJLyogRGVmaW5lZCBpbiBja2Nt YWkuYyAqLworZXh0ZXJuIGludCBkdXBsZXg7CisKKy8qIEluY2x1ZGVzICovCisKKyNpbmNsdWRl ICJja2NzeW0uaCIJCQkvKiBUaGlzIG11c3QgZ28gZmlyc3QgICAqLworI2luY2x1ZGUgImNrY2Rl Yi5oIgkJCS8qIFRoaXMgbXVzdCBnbyBzZWNvbmQgICovCisKKyNpZmRlZiBPU0YxMworI2lmZGVm IENLX0FOU0lDCisjaWZkZWYgX05PX1BST1RPCisjdW5kZWYgX05PX1BST1RPCisjZW5kaWYgLyog X05PX1BST1RPICovCisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKyNlbmRpZiAvKiBPU0YxMyAqLwor CisjaWZuZGVmIEhQVVhQUkU2NQorI2luY2x1ZGUgPGVycm5vLmg+CQkJLyogRXJyb3IgbnVtYmVy IHN5bWJvbHMgKi8KKyNlbHNlCisjaWZuZGVmIEVSUk5PX0lOQ0xVREVECisjaW5jbHVkZSA8ZXJy bm8uaD4JCQkvKiBFcnJvciBudW1iZXIgc3ltYm9scyAqLworI2VuZGlmCS8qIEVSUk5PX0lOQ0xV REVEICovCisjZW5kaWYJLyogSFBVWFBSRTY1ICovCisKKyNpZmRlZiBfXzM4NkJTRF9fCisjZGVm aW5lIEVOT1RDT05OIDU3CisjZWxzZQorI2lmZGVmIF9fYnNkaV9fCisjZGVmaW5lIEVOT1RDT05O IDU3CisjZWxzZQorI2lmZGVmIF9fRnJlZUJTRF9fCisjZGVmaW5lIEVOT1RDT05OIDU3CisjZW5k aWYgLyogX19GcmVlQlNEX18gKi8KKyNlbmRpZiAvKiBfX2JzZGlfXyAqLworI2VuZGlmIC8qIF9f Mzg2QlNEX18gKi8KKworI2lmZGVmIFNDT19PU1I1MDQKKyNkZWZpbmUgTkJCWSA4CisjZW5kaWYg LyogU0NPX09TUjUwNCAqLworCisjaWZkZWYgUGxhbjkKKyNkZWZpbmUgU0VMRUNUCisjaW5jbHVk ZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDxzZWxlY3QuaD4KKyNkZWZpbmUgRkRfU0VUU0laRSAo MyAqIHNpemVvZihsb25nKSAqIDgpCitzdGF0aWMgc3RydWN0IHRpbWV2YWwgdHY7CisjZW5kaWYg LyogUGxhbjkgKi8KKworI2lmZGVmIENMSVgKKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2VuZGlm IC8qIENMSVggKi8KKworI2luY2x1ZGUgImNrY25ldC5oIgkJCS8qIFN5bWJvbHMgZm9yIG5ldHdv cmsgdHlwZXMuICovCisjaWZkZWYgQ0tfU1NMCisjaW5jbHVkZSAiY2tfc3NsLmgiCisjZW5kaWYg LyogQ0tfU1NMICovCisKKy8qCisgIFRoZSBkaXJlY3RvcnktcmVsYXRlZCBpbmNsdWRlcyBhcmUg aGVyZSBiZWNhdXNlIHdlIG5lZWQgdG8gdGVzdCBzb21lCisgIGZpbGUtc3lzdGVtLXJlbGF0ZWQg c3ltYm9scyB0byBmaW5kIG91dCB3aGljaCBzeXN0ZW0gd2UncmUgYmVpbmcgY29tcGlsZWQKKyAg dW5kZXIuICBGb3IgZXhhbXBsZSwgTUFYTkFNTEVOIGlzIGRlZmluZWQgaW4gQlNENC4yIGJ1dCBu b3QgNC4xLgorKi8KKyNpZmRlZiBTRElSRU5UCQkJCS8qIERpcmVjdG9yeSBiaXRzLi4uICovCisj ZGVmaW5lIERJUkVOVAorI2VuZGlmIC8qIFNESVJFTlQgKi8KKworI2lmZGVmIFhORElSCisjaW5j bHVkZSA8c3lzL25kaXIuaD4KKyNlbHNlIC8qICFYTkRJUiAqLworI2lmZGVmIE5ESVIKKyNpbmNs dWRlIDxuZGlyLmg+CisjZWxzZSAvKiAhTkRJUiwgIVhORElSICovCisjaWZkZWYgUlRVCisjaW5j bHVkZSAiL3Vzci9saWIvbmRpci5oIgorI2Vsc2UgLyogIVJUVSwgIU5ESVIsICFYTkRJUiAqLwor I2lmZGVmIERJUkVOVAorI2lmZGVmIFNESVJFTlQKKyNpbmNsdWRlIDxzeXMvZGlyZW50Lmg+Cisj ZWxzZQorI2luY2x1ZGUgPGRpcmVudC5oPgorI2VuZGlmIC8qIFNESVJFTlQgKi8KKyNlbHNlIC8q ICFSVFUsICFORElSLCAhWE5ESVIsICFESVJFTlQsIGkuZS4gYWxsIG90aGVycyAqLworI2luY2x1 ZGUgPHN5cy9kaXIuaD4KKyNlbmRpZiAvKiBESVJFTlQgKi8KKyNlbmRpZiAvKiBSVFUgKi8KKyNl bmRpZiAvKiBORElSICovCisjZW5kaWYgLyogWE5ESVIgKi8KKworI2lmZGVmIFFOWAorI2luY2x1 ZGUgPHN5cy9kZXYuaD4KKyNlbmRpZiAvKiBRTlggKi8KKworI2lmZGVmIEhQVVg1CisjaWZuZGVm IFRDUFNPQ0tFVAorLyogSSBkb24ndCBrbm93IHdoeSB0aGlzIGlzIG5lZWRlZCBoZXJlIHNpbmNl IHdlIG5ldmVyIHJlZmVyZW5jZSBiemVybygpLiAqLworLyogQnV0IHdpdGhvdXQgaXQgQy1LZXJt aXQgd29uJ3QgbGluayBpbiBhbiBIUC1VWCA1Lnh4IG5vbi1UQ1AgYnVpbGQuICovCit2b2lkCiti emVybyhzLG4pIGNoYXIgKnM7IGludCBuOyB7CisgICAgZXh0ZXJuIGNoYXIgKiBtZW1zZXQoKTsK KyAgICBtZW1zZXQocywwLG4pOworfQorI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLworI2VuZGlmIC8q IEhQVVg1ICovCisKKy8qIERlZmluaXRpb24gb2YgSFosIHVzZWQgaW4gbXNsZWVwKCkgKi8KKwor I2lmZGVmIE1JUFMKKyNkZWZpbmUgSFogKCAxMDAwIC8gQ0xPQ0tfVElDSyApCisjZWxzZSAgLyog TUlQUyAqLworI2lmZGVmIEFUVFNWCisjaWZuZGVmIE5BUAorI2lmZGVmIFRSUzE2CisjZGVmaW5l IEhaICggMTAwMCAvIENMT0NLX1RJQ0sgKQorI2VuZGlmIC8qIFRSUzE2ICovCisjaWZkZWYgTkFQ SEFDSworI2RlZmluZSBuYXAoeCkgKHZvaWQpc3lzY2FsbCgzMTEyLCAoeCkpCisjZGVmaW5lIE5B UAorI2VuZGlmIC8qIE5BUEhBQ0sgKi8KKyNlbmRpZiAvKiBOQVAgKi8KKyNlbmRpZiAvKiBBVFRT ViAqLworI2VuZGlmIC8qIE1JUFMgKi8KKworI2lmZGVmIE1fVU5JWAorI3VuZGVmIE5HUk9VUFNf TUFYCQkvKiBQcmV2ZW50IG11bHRpcGxlIGRlZmluaXRpb24gd2FybmluZ3MgKi8KKyNlbmRpZiAv KiBNX1VOSVggKi8KKworLyoKKyAgTk9URTogSFAtVVggOC4wIGhhcyBhIDxzeXMvcG9sbC5oPiwg YnV0IHRoZXJlIGlzIG5vIGNvcnJlc3BvbmRpbmcKKyAgbGlicmFyeSByb3V0aW5lLCBzbyBfcG9s bCBjb21lcyB1cCB1bmRlZmluZWQgYXQgbGluayB0aW1lLgorKi8KKyNpZmRlZiBDS19QT0xMCisj aWZuZGVmIEFJWFJTCQkJLyogSUJNIEFJWCBuZWVkcyBzcGVjaWFsIGhhbmRsaW5nICovCisjaW5j bHVkZSA8cG9sbC5oPgkJLyogInN0YW5kYXJkIiAoU1ZJRCkgaS9vIG11bHRpcGxleGluZywgZXRj ICovCisjZWxzZSAvKiBBSVhSUyAqLworI2lmZGVmIFNWUjQJCQkvKiBBSVggMy4yIGlzIGxpa2Ug U1ZJRC4uLiAqLworI2luY2x1ZGUgPHBvbGwuaD4KKyNlbHNlCQkJCS8qIEJ1dCBBSVggMy4xIGlz IG5vdCAuLi4gKi8KKyNpbmNsdWRlIDxzeXMvcG9sbC5oPgkJLyogVGhlIGluY2x1ZGUgZmlsZSBp cyBpbiBpbmNsdWRlL3N5cyAqLworI2RlZmluZSBldmVudHMgcmVxZXZlbnRzCS8qIEFuZCBpdCBk b2VzIG5vdCBtYXAgSUJNLXNwZWNpZmljIG1lbWJlciAqLworI2RlZmluZSByZXZlbnRzIHJ0bmV2 ZW50cwkvKiBuYW1lcyB0byB0aGUgU3lzdGVtIFYgZXF1aXZhbGVudHMgKi8KKyNlbmRpZiAvKiBT VlI0ICovCisjZW5kaWYgLyogQUlYUlMgKi8KKyNlbmRpZiAvKiBDS19QT0xMICovCisKKyNpbmNs dWRlIDxzaWduYWwuaD4gICAgICAgICAgICAgICAgICAgICAvKiBTaWduYWxzICovCisKKy8qIEZv ciBzZXRqbXAgYW5kIGxvbmdqbXAgKi8KKworI2lmbmRlZiBaSUxPRworI2luY2x1ZGUgPHNldGpt cC5oPgorI2Vsc2UKKyNpbmNsdWRlIDxzZXRyZXQuaD4KKyNlbmRpZiAvKiBaSUxPRyAqLworCisv KgorICBUaGUgZm9sbG93aW5nIHRlc3QgZGlmZmVyZW50aWF0ZXMgYmV0d2VlbiA0LjEgQlNEIGFu ZCA0LjIgJiBsYXRlci4KKyAgSWYgeW91IGhhdmUgYSA0LjFCU0Qgc3lzdGVtIHdpdGggdGhlIERJ UkVOVCBsaWJyYXJ5LCB0aGlzIHRlc3QgY291bGQKKyAgbWlzdGFrZW5seSBkaWFnbm9zZSA0LjJC U0QgYW5kIHRoZW4gbGF0ZXIgZW5hYmxlIHRoZSB1c2Ugb2Ygc3lzdGVtIGNhbGxzCisgIHRoYXQg YXJlbid0IGRlZmluZWQuICBJZiBpbmRlZWQgdGhlcmUgYXJlIHN1Y2ggc3lzdGVtcywgd2UgY2Fu IHVzZSBzb21lCisgIG90aGVyIHdheSBvZiB0ZXN0aW5nIGZvciA0LjFCU0QsIG9yIGFkZCB5ZXQg YW5vdGhlciBjb21waWxlLXRpbWUgc3dpdGNoLgorKi8KKyNpZmRlZiBCU0Q0CisjaWZkZWYgTUFY TkFNTEVOCisjaWZuZGVmIEZUMjEJCQkJLyogRXhjZXB0IGZvciBGb3J0dW5lLiAqLworI2lmbmRl ZiBGVDE4CisjaWZuZGVmIEJFTExWMTAJCQkJLyogQW5kIEJlbGwgTGFicyBSZXNlYXJjaCBVTklY IFYxMCAqLworI2RlZmluZSBCU0Q0MgorI2VuZGlmIC8qIEJFTExWMTAgKi8KKyNlbmRpZiAvKiBG VDE4ICovCisjZW5kaWYgLyogRlQyMSAqLworI2VuZGlmIC8qIE1BWE5BTUxFTiAqLworI2VuZGlm IC8qIEJTRDQgKi8KKworI2lmZGVmIFNVTk9TNDEJCQkJLyogRnJvbSBDaHJpc3RpYW4gQ29ydGkg Ki8KKyNkZWZpbmUgQlNENDRPUlBPU0lYCQkJLyogVW5pIFN0dXR0Z2FydCAqLworI2RlZmluZSBT Vk9SUE9TSVgJCQkvKiBGZWJydWFyeSAyMDEwICovCisjaW5jbHVkZSA8dGVybWlvcy5oPgorI2lu Y2x1ZGUgPHN5cy9pb2N0bC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbWl0 cy5oPgorI2VuZGlmCS8qIFNVTk9TNDEgKi8KKworI2lmZGVmIFNOSTU0MgorI2luY2x1ZGUgPHN5 cy9maWxpby5oPgkJCS8qIDI5OSBmb3IgRklPTlJFQUQgKi8KKyNlbmRpZgkvKiBTTkk1NDIgKi8K KworLyoKKyAgTWluaXggMi4wIHN1cHBvcnQgYWRkZWQgYnkgVGVycnkgTWNDb25uZWxsLAorICBT eXJhY3VzZSBVbml2ZXJzaXR5IDx0bWNAYmFybnlhcmQuc3lyLmVkdT4KKyAgTm8gbW9yZSBzZ3R0 eSBpbnRlcmZhY2UsIHBvc2l4IGNvbXBsaWFudC4KKyovCisjaWZkZWYgTUlOSVgyCisjZGVmaW5l IF9NSU5JWCAgIC8qIE5lZWRlZCBmb3Igc29tZSBNaW5peCBoZWFkZXIgZmlsZXMgKi8KKyNkZWZp bmUgQlNENDRPUlBPU0lYCisjZGVmaW5lIFNWT1JQT1NJWAorI2lmbmRlZiBNSU5JWDMKKyNkZWZp bmUgRENMVElNRVZBTAorI2VuZGlmCS8qIE1JTklYMyAqLworI2RlZmluZSBOT0ZJTEVICisjaW5j bHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaW5jbHVkZSA8dGVy bWlvcy5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI3VuZGVmIFRJT0NHRVRDICAgIC8qIGRlZmlu ZWQgaW4gc3lzL2lvY3RsLmgsIGJ1dCBub3QgcmVhbGx5IHN1cHBvcnRlZCAqLworI2RlZmluZSBU QU5ERU0gMAorI2VuZGlmIC8qIE1JTklYMiAqLworCisvKgorIE1JTklYIDEuMCBzdXBwb3J0IGFk ZGVkIGJ5IENoYXJsZXMgSGVkcmljaywKKyBSdXRnZXJzIFVuaXZlcnNpdHkgPGhlZHJpY2tAYXJh bWlzLnJ1dGdlcnMuZWR1Pi4KKyBNSU5JWCBhbHNvIGhhcyBWNyBlbmFibGVkLgorKi8KKyNpZmRl ZiBNSU5JWAorI2RlZmluZSBUQU5ERU0gMAorI2RlZmluZSBNWVJFQUQKKyNkZWZpbmUgTk9TWVNJ T0NUTEgKKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbmRpZiAvKiBNSU5JWCAqLworCisjaWZkZWYg Q0tfUkVESVIJCS8qIDxzeXMvd2FpdC5oPiBuZWVkZWQgb25seSBmb3IgUkVESVJFQ1QgY29tbWFu ZC4gKi8KKy8qCisgIElmIGFueWJvZHkgY2FuIGZpZ3VyZSBvdXQgaG93IHRvIG1ha2UgdGhpcyB3 b3JrIHdpdGggTmVYVFNURVAsIGJlCisgIG15IGd1ZXN0ISAgKE5lWFRCbGFoL05lWFRCbGFoL2Jz ZC9zeXMvd2FpdC5oIGRvZXMgbm90IGRlZmluZSBXRVhJVFNUQVRVUykKKyovCisjaWZuZGVmIENL X1dBSVRfSAkJCS8qIElmIHdhaXQuaCBub3QgYWxyZWFkeSBpbmNsdWRlZC4uLiAqLworI2lmZGVm IE9TRgkJCQkvKiBmb3JjZSBPU0YgdG8gc2VsZWN0IFBPU0lYIHdhaXQgKi8KKyNpZmRlZiBfQlNE CQkJCS8qIGluc3RlYWQgb2YgQlNEIChzZWUgY2tjZGViLmgpICovCisjZGVmaW5lIENLX09TRl9C U0QKKyN1bmRlZiBfQlNECisjZW5kaWYgLyogX0JTRCAqLworI2VuZGlmIC8qIE9TRiAqLworI2lu Y2x1ZGUgPHN5cy93YWl0Lmg+CQkJLyogSW5jbHVkZSBpdCAqLworI2lmZGVmIE9TRgorI2lmZGVm IENLX09TRl9CU0QKKyNkZWZpbmUgX0JTRAkJCQkvKiBSZXN0b3JlIGl0ICovCisjdW5kZWYgQ0tf T1NGX0JTRAorI2VuZGlmIC8qIENLX09TRl9CU0QgKi8KKyNlbmRpZiAvKiBPU0YgKi8KKyNlbmRp ZiAvKiBDS19XQUlUX0ggKi8KKyNlbmRpZiAvKiBDS19SRURJUiAqLworCisjaW5jbHVkZSAiY2t1 dmVyLmgiCQkJLyogVmVyc2lvbiBoZXJhbGQgKi8KK2NoYXIgKmNreHN5cyA9IEhFUkFMRDsKKwor I2lmZGVmIENLX1VUU05BTUUKKyNpbmNsdWRlIDxzeXMvdXRzbmFtZS5oPgorCisjaWZkZWYgVFJV NjQJCQkJLyogVHJ1NjQgVU5JWCA0LjAgYW5kIGxhdGVyICovCisvKiBWZXJpZmllZCBvbiBUcnU2 NCA0LjBGIC0gbWlnaHQgYnJlYWsgb24gNC4wRSBvciBlYXJsaWVyICovCisjaW5jbHVkZSA8c3lz L3N5c2luZm8uaD4JCS8qIChkb24ndCBrbm93IGFib3V0IE9TRi8xIG9yIERVKSAqLworI2luY2x1 ZGUgPG1hY2hpbmUvaGFsX3N5c2luZm8uaD4KKyNlbmRpZiAvKiBUUlU2NCAqLworCisjaWZkZWYg U09MQVJJUzI1CQkJLyogU29sYXJpcyAyLjUgYW5kIGxhdGVyICovCisjaW5jbHVkZSA8c3lzL3N5 c3RlbWluZm8uaD4JCS8qIChkb24ndCBrbm93IGFib3V0IGVhcmxpZXIgb25lcykgKi8KKyNlbmRp ZiAvKiBTT0xBUklTMjUgKi8KKworI2lmZGVmIFVXNworI2lmbmRlZiBTWVNfTk1MTgorI2RlZmlu ZSBTWVNfTk1MTiAyNTcKKyNlbmRpZiAvKiBOTUxOICovCisjZW5kaWYgLyogVVc3ICovCisjaWZk ZWYgSFBVWDlQTFVTCitzdGF0aWMgaW50IGhwaXM4MDAgPSAwOworI2VuZGlmIC8qIEhQVVg5UExV UyAqLworI2lmZGVmIFNZU19OTUxOCisjZGVmaW5lIENLX1NZU05NTE4gU1lTX05NTE4KKyNlbHNl CisjaWZkZWYgX1NZU19OTUxOCisjZGVmaW5lIENLX1NZU05NTE4gX1NZU19OTUxOCisjZWxzZQor I2lmZGVmIFVUU0xFTgorI2RlZmluZSBDS19TWVNOTUxOIFVUU0xFTgorI2Vsc2UKKyNkZWZpbmUg Q0tfU1lTTk1MTiAzMQorI2VuZGlmIC8qIFVUU0xFTiAqLworI2VuZGlmIC8qIF9TWVNfTk1MTiAq LworI2VuZGlmIC8qIFNZU19OTUxOICovCitjaGFyIHVubV9tY2hbQ0tfU1lTTk1MTisxXSA9IHsg J1wwJywgJ1wwJyB9OworY2hhciB1bm1fbW9kW0NLX1NZU05NTE4rMV0gPSB7ICdcMCcsICdcMCcg fTsKK2NoYXIgdW5tX25hbVtDS19TWVNOTUxOKzFdID0geyAnXDAnLCAnXDAnIH07CitjaGFyIHVu bV9yZWxbQ0tfU1lTTk1MTisxXSA9IHsgJ1wwJywgJ1wwJyB9OworY2hhciB1bm1fdmVyW0NLX1NZ U05NTE4rMV0gPSB7ICdcMCcsICdcMCcgfTsKKyNlbmRpZiAvKiBDS19VVFNOQU1FICovCisKKyNp ZmRlZiBDSUUKKyNpbmNsdWRlIDxzdGF0Lmg+CQkJLyogRm9yIGNoYXNpbmcgc3ltbGlua3MsIGV0 Yy4gKi8KKyNlbHNlCisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNlbmRpZiAvKiBDSUUgKi8KKwor I2lmZGVmIFFOWAkJCQkvKiAyOTkgKi8KKyNpZm5kZWYgSVhBTlkKKyNkZWZpbmUgSVhBTlkgMAor I2VuZGlmCS8qIElYQU5ZICovCisjZW5kaWYJLyogUU5YICovCisKKy8qIFVVQ1AgbG9ja2ZpbGUg bWF0ZXJpYWwuLi4gKi8KKworI2lmbmRlZiBOT1VVQ1AKKyNpZmRlZiBVU0VUVFlMT0NLCisjaWZk ZWYgSEFWRV9MT0NLREVWCQkJLyogUmVkIEhhdCBiYXVkYm95L2xvY2tkZXYgKi8KKy8qCisgIFdh dGNoIG91dDogYmF1ZGJveS5oIHJlZmVyZW5jZXMgb3BlbigpIHdpdGhvdXQgbWFraW5nIHN1cmUg aXQgaGFzIGJlZW4KKyAgZGVjbGFyZWQsIHJlc3VsdGluZyBpbiB3YXJuaW5ncyBvbiBhdCBsZWFz dCBSZWQgSGF0IDcuMy4gIEl0J3MgZGVjbGFyZWQgaW4KKyAgZmNudGwuaCwgYnV0IHdlIGRvbid0 IGluY2x1ZGUgdGhhdCB1bnRpbCBsYXRlci4gIEluIHRoaXMgY2FzZSBvbmx5LCB3ZQorICBpbmNs dWRlIGl0IGhlcmUsIGFuZCB0aGVuIHRoZSBzZWNvbmQgaW5jbHVkZSBpcyBoYXJtbGVzcyBiZWNh dXNlIGluIFJlZCBIYXQKKyAgTGludXggKHRoZSBvbmx5IHBsYWNlIHdoZXJlIHlvdSBmaW5kIGJh dWRib3kuaCkgZmNudGwuaCBpcyBwcm90ZWN0ZWQgZnJvbQorICBtdWx0aXBsZSBpbmNsdXNpb24g YnkgX0ZDTlRMX0guICAgLSBmZGMsIDEwIE1heSAyMDA0LgorCisgIE5PVEU6IEFsdGhvdWdoIExp bnV4IC91c3Ivc2Jpbi9sb2NrZGV2IG9idmlhdGVzIHRoZSBuZWVkIGZvciBzZXR1aWQgb3IKKyAg c2V0Z2lkIGJpdHMgdG8gYWNjZXNzIHRoZSBsb2NrZmlsZSwgQy1LZXJtaXQgd2lsbCBzdGlsbCBu ZWVkIHRoZW0gdG8gYWNjZXNzCisgIHRoZSBzZXJpYWwgcG9ydCBpdHNlbGYgdW5sZXNzIHRoZSBw b3J0IGlzIG9wZW4gZm9yIHdvcmxkIHJlYWQvd3JpdGUuCisgIE5vcm1hbGx5IHNldGdpZCB1dWNw IGRvZXMgdGhlIHRyaWNrLgorCisgIEV4dHJhOiBIQVZFX0xPQ0tERVYgaGFzIGJlZW4gYWRkZWQg YWxzIG9wZW5TdVNFID49IDExLjMgZG9lc24ndCB1c2UgYmF1ZGJveQorICBidXQgdHR5bG9jay4g IC0gamIsIDI2IEp1bCAyMDEwCisqLworI2luY2x1ZGUgPGZjbnRsLmg+CQkJLyogVGhpcyBoYXMg dG8gY29tZSBiZWZvcmUgYmF1ZGJveSAqLworI2lmZGVmIEhBVkVfQkFVREJPWQkJCS8qIFJlZCBI YXQgYmF1ZGJveS9sb2NrZGV2ICovCisjaW5jbHVkZSA8YmF1ZGJveS5oPgorI2Vsc2UgIC8qICFI QVZFX0JBVURCT1kgKi8JCS8qIG9wZW5TdVNFIGxvY2sgdmlhIHR0eWxvY2sgKi8KKyNpbmNsdWRl IDx0dHlsb2NrLmg+CisjZW5kaWYgIC8qIEhBVkVfQkFVREJPWSAqLworI2RlZmluZSBMT0NLX0RJ UiAiL3Zhci9sb2NrIgkJLyogKGV2ZW4gdGhvdWdoIHdlIGRvbid0IGNhcmUpICovCisKKyNlbHNl ICAvKiAhSEFWRV9MT0NLREVWICovCisKKyNpZmRlZiBVU0VfVVVfTE9DSworI2lmZGVmIF9fRnJl ZUJTRF9fCisjaW5jbHVkZSA8bGlidXRpbC5oPgkJCS8qIEZyZWVCU0QgKi8KKyNlbHNlCisjaW5j bHVkZSA8dXRpbC5oPgkJCS8qIE9wZW5CU0QgKi8KKyNlbmRpZiAvKiBIQVZFX0xPQ0tERVYgKi8K KyNlbmRpZiAvKiBfX0ZyZWVCU0QgKi8KKyNlbmRpZiAvKiBVU0VfVVVfTE9DSyAqLworI2Vsc2Ug IC8qIFVTRVRUWUxPQ0sgKi8KKworLyogTmFtZSBvZiBVVUNQIHR0eSBkZXZpY2UgbG9ja2ZpbGUg Ki8KKworI2lmZGVmIExJTlVYRlNTVE5ECisjaWZuZGVmIEhEQlVVQ1AKKyNkZWZpbmUgSERCVVVD UAorI2VuZGlmIC8qIEhEQlVVQ1AgKi8KKyNlbmRpZiAvKiBMSU5VWEZTU1RORCAqLworCisjaWZk ZWYgQUNVQ05UUkwKKyNkZWZpbmUgTENLRElSCisjZW5kaWYgLyogQUNVQ05UUkwgKi8KKworLyoK KyAgUElEU1RSSU5HIG1lYW5zIHVzZSBBU0NJSSBzdHJpbmcgdG8gcmVwcmVzZW50IHBpZCBpbiBs b2NrZmlsZS4KKyovCisjaWZuZGVmIFBJRFNUUklORworI2lmZGVmIEhEQlVVQ1AKKyNkZWZpbmUg UElEU1RSSU5HCisjZWxzZQorI2lmZGVmIEJTRDQ0CisjZGVmaW5lIFBJRFNUUklORworI2Vsc2UK KyNpZmRlZiBSVEFJWAorI2RlZmluZSBQSURTVFJJTkcKKyNlbHNlCisjaWZkZWYgQUlYUlMKKyNk ZWZpbmUgUElEU1RSSU5HCisjZWxzZQorI2lmZGVmIENPSEVSRU5UCisjZGVmaW5lIFBJRFNUUklO RworI2VuZGlmIC8qIENPSEVSRU5UICovCisjZW5kaWYgLyogQUlYUlMgKi8KKyNlbmRpZiAvKiBS VEFJWCAqLworI2VuZGlmIC8qIEJTRDQ0ICovCisjZW5kaWYgLyogSERCVVVDUCAqLworI2VuZGlm IC8qIFBJRFNUUklORyAqLworCisvKiBOb3cgdGhlIFBJRFNUUklORyBleGNlcHRpb25zLi4uICov CisKKyNpZmRlZiBQSURTVFJJTkcKKyNpZmRlZiBIUFVYCisjdW5kZWYgUElEU1RSSU5HCisjZW5k aWYgLyogSFBVWCAqLworI2VuZGlmIC8qIFBJRFNUUklORyAqLworCisjaWZkZWYgX19ic2RpX18J CQkJLyogQlNESSAoYXQgbGVhc3QgdGhydSAxLjEpICovCisjaWZkZWYgUElEU1RSSU5HCisjdW5k ZWYgUElEU1RSSU5HCisjZW5kaWYgLyogUElEU1RSSU5HICovCisjZW5kaWYgLyogX19ic2RpX18g Ki8KKworI2lmZGVmIE9TRjMyCQkJCS8qIERpZ2l0YWwgVU5JWCAoT1NGLzEpIDMuMiAqLworI2lm ZGVmIFBJRFNUUklORworI3VuZGVmIFBJRFNUUklORworI2VuZGlmIC8qIFBJRFNUUklORyAqLwor I2VuZGlmIC8qIE9TRjMyICovCisKKy8qCisgIExPQ0tfRElSIGlzIHRoZSBuYW1lIG9mIHRoZSBs b2NrZmlsZSBkaXJlY3RvcnkuCisgIElmIExPQ0tfRElSIGlzIGFscmVhZHkgZGVmaW5lZCAoZS5n LiBvbiBjb21tYW5kIGxpbmUpLCB3ZSBkb24ndCBjaGFuZ2UgaXQuCisqLworCisjaWZuZGVmIExP Q0tfRElSCisjaWZkZWYgTUFDT1NYCisjZGVmaW5lIExPQ0tfRElSICIvdmFyL3Nwb29sL2xvY2si CisjZW5kaWYgLyogTUFDT1NYICovCisjZW5kaWYvKiBMT0NLX0RJUiAqLworCisjaWZuZGVmIExP Q0tfRElSCisjaWZkZWYgQlNENDQKKyNpZmRlZiBfXzM4NkJTRF9fCisjZGVmaW5lIExPQ0tfRElS ICIvdmFyL3Nwb29sL2xvY2siCisjZWxzZQorI2lmZGVmIF9fRnJlZUJTRF9fCisjZGVmaW5lIExP Q0tfRElSICIvdmFyL3Nwb29sL2xvY2siCisjZWxzZQorI2lmZGVmIF9fTmV0QlNEX18KKyNkZWZp bmUgTE9DS19ESVIgIi92YXIvc3Bvb2wvbG9jayIKKyNlbHNlCisjaWZkZWYgX19PcGVuQlNEX18K KyNkZWZpbmUgTE9DS19ESVIgIi92YXIvc3Bvb2wvbG9jayIKKyNlbHNlCisvKiBTbyB3aGljaCBv bmVzIGlzIHRoaXMgZm9yPyAqLworLyogUHJvYmFibHkgb3JpZ2luYWwgNC40QlNEIG9uIFZhbmdv Z2ggKi8KKy8qIFBsdXMgd2hvIGtub3dzIGFib3V0IE1hYyBPUyBYLi4uIEl0IGRvZXNuJ3QgZXZl biBoYXZlIGEgY3UgcHJvZ3JhbSAqLworI2RlZmluZSBMT0NLX0RJUiAiL3Zhci9zcG9vbC91dWNw IgorI2VuZGlmIC8qIF9fT3BlbkJTRF9fICovCisjZW5kaWYgLyogX19OZXRCU0RfXyAqLworI2Vu ZGlmIC8qIF9fRnJlZUJTRF9fICovCisjZW5kaWYgLyogX18zODZCU0RfXyAqLworI2Vsc2UKKyNp ZmRlZiBER1VYNDMwCisjZGVmaW5lIExPQ0tfRElSICIvdmFyL3Nwb29sL2xvY2tzIgorI2Vsc2UK KyNpZmRlZiBIUFVYMTAKKyNkZWZpbmUgTE9DS19ESVIgIi92YXIvc3Bvb2wvbG9ja3MiCisjZWxz ZQorI2lmZGVmIFJUQUlYCQkJCS8qIElCTSBSVCBQQyBBSVggMi4yLjEgKi8KKyNkZWZpbmUgTE9D S19ESVIgIi9ldGMvbG9ja3MiCisjZWxzZQorI2lmZGVmIEFJWFJTCisjZGVmaW5lIExPQ0tfRElS ICIvZXRjL2xvY2tzIgorI2Vsc2UKKyNpZmRlZiBJU0lJSQorI2RlZmluZSBMT0NLX0RJUiAiL2V0 Yy9sb2NrcyIKKyNlbHNlCisjaWZkZWYgSERCVVVDUAorI2lmZGVmIE1fU1lTNQorI2RlZmluZSBM T0NLX0RJUiAiL3Vzci9zcG9vbC91dWNwIgorI2Vsc2UKKyNpZmRlZiBNX1VOSVgKKyNkZWZpbmUg TE9DS19ESVIgIi91c3Ivc3Bvb2wvdXVjcCIKKyNlbHNlCisjaWZkZWYgU1ZSNAorI2RlZmluZSBM T0NLX0RJUiAiL3Zhci9zcG9vbC9sb2NrcyIKKyNlbHNlCisjaWZkZWYgU1VOT1M0CisjZGVmaW5l IExPQ0tfRElSICIvdmFyL3Nwb29sL2xvY2tzIgorI2Vsc2UKKyNpZmRlZiBMSU5VWEZTU1RORAor I2RlZmluZSBMT0NLX0RJUiAiL3Zhci9sb2NrIjsKKyNlbHNlCisjZGVmaW5lIExPQ0tfRElSICIv dXNyL3Nwb29sL2xvY2tzIgorI2VuZGlmIC8qIExJTlVYRlNTVE5EICovCisjZW5kaWYgLyogU1VO T1M0ICovCisjZW5kaWYgLyogU1ZSNCAqLworI2VuZGlmIC8qIE1fVU5JWCAqLworI2VuZGlmIC8q IE1fU1lTNSAqLworI2Vsc2UKKyNpZmRlZiBMQ0tESVIKKyNkZWZpbmUgTE9DS19ESVIgIi91c3Iv c3Bvb2wvdXVjcC9MQ0siCisjZWxzZQorI2lmZGVmIENPSEVSRU5UCisjZGVmaW5lIExPQ0tfRElS ICIvdXNyL3Nwb29sL3V1Y3AiCisjZWxzZQorI2RlZmluZSBMT0NLX0RJUiAiL3Vzci9zcG9vbC91 dWNwIgorI2VuZGlmIC8qIENPSEVSRU5UICovCisjZW5kaWYgLyogTENLRElSICovCisjZW5kaWYg LyogSERCVVVDUCAqLworI2VuZGlmIC8qIElTSUlJICovCisjZW5kaWYgLyogQUlYUlMgKi8KKyNl bmRpZiAvKiBSVEFJWCAqLworI2VuZGlmIC8qIEhQVVgxMCAqLworI2VuZGlmIC8qIERHVVg0MzAg Ki8KKyNlbmRpZiAvKiBCU0Q0NCAqLworI2VuZGlmIC8qICFMT0NLX0RJUiAob3V0c2lkZSBpZm5k ZWYpICovCisKKyNpZmRlZiBPU0YyCQkJCS8qIE9TRi8xIDIuMCBvciBsYXRlciAqLworI2lmZGVm IExPQ0tfRElSCQkJCS8qIChtYXliZSAxLnggdG9vLCB3aG8ga25vd3MuLi4pICovCisjdW5kZWYg TE9DS19ESVIKKyNkZWZpbmUgTE9DS19ESVIgIi92YXIvc3Bvb2wvbG9ja3MiCisjZW5kaWYgLyog TE9DS19ESVIgKi8KKyNlbmRpZiAvKiBPU0YyICovCisKKyNpZmRlZiBDT01NRU5UCisvKiBTb3Jy eSBubyBtb3JlIGxvY2tmKCkgLS0gd2UgbG9jayBmaXJzdCBhbmQgVEhFTiBvcGVuIHRoZSBkZXZp Y2UuICovCisjaWZkZWYgU1ZSNAorI2lmbmRlZiBCU0Q0NAorI2lmbmRlZiBMT0NLRgorI2RlZmlu ZSBMT0NLRgkJCQkvKiBVc2UgbG9ja2YoKSBvbiB0dHkgZGV2aWNlIGluIFNWUjQgKi8KKyNlbmRp ZiAvKiBMT0NLRiAqLworI2VuZGlmIC8qIEJTRDQ0ICovCisjZW5kaWYgLyogU1ZSNCAqLworI2Vu ZGlmIC8qIENPTU1FTlQgKi8KKworI2lmZGVmIE5PTE9DS0YJCQkJLyogQnV0IE5PTE9DS0YgY2Fu Y2VscyBMT0NLRiAqLworI2lmZGVmIExPQ0tGCisjdW5kZWYgTE9DS0YKKyNlbmRpZiAvKiBMT0NL RiAqLworI2VuZGlmIC8qIE5PTE9DS0YgKi8KKworLyogTW9yZSBhYm91dCB0aGlzIGJlbG93Li4u ICovCisKKyNlbmRpZiAvKiBVU0VUVFlMT0NLICovCisjZW5kaWYgLyogTk9VVUNQICovCisKKy8q CisgIE1ZUkVBRCBtZWFucyB1c2Ugb3VyIGludGVybmFsbHkgZGVmaW5lZCBub25ibG9ja2luZyBi dWZmZXJlZCByZWFkIHJvdXRpbmUuCisqLworI2lmZGVmIEFUVFNWCisjZGVmaW5lIE1ZUkVBRAor I2VuZGlmIC8qIEFUVFNWICovCisKKyNpZmRlZiBBVFQ3MzAwCisjaWZuZGVmIE1ZUkVBRAorI2Rl ZmluZSBNWVJFQUQKKyNlbmRpZiAvKiBNWVJFQUQgKi8KKy8qIGJpdHMgZm9yIGF0dG1vZGVtOiBp bnRlcm5hbCBtb2RlbSBpbiB1c2UsIHJlc3RhcnQgZ2V0dHkgKi8KKyNkZWZpbmUgSVNNT0RFTSAx CisjZGVmaW5lIERPR0VUWSA1MTIKKyNlbmRpZiAgLyogQVRUNzMwMCAqLworCisjaWZkZWYgQlNE NDIKKyNkZWZpbmUgTVlSRUFECisjZW5kaWYgLyogQlNENDIgKi8KKworI2lmZGVmIFBPU0lYCisj ZGVmaW5lIE1ZUkVBRAorI2VuZGlmIC8qIFBPU0lYICovCisjaWZkZWYgX19ic2RpX18KKyNpZm5k ZWYgT19OREVMQVkKKyNkZWZpbmUgT19OREVMQVkgT19OT05CTE9DSworI2VuZGlmIC8qIE9fTkRF TEFZICovCisjZW5kaWYgLyogX19ic2RpX18gKi8KKworLyoKKyBWYXJpYWJsZXMgYXZhaWxhYmxl IHRvIG91dHNpZGUgd29ybGQ6CisKKyAgIGRmdHR5ICAtLSBQb2ludGVyIHRvIGRlZmF1bHQgdHR5 IG5hbWUgc3RyaW5nLCBsaWtlICIvZGV2L3R0eSIuCisgICBkZmxvYyAgLS0gMCBpZiBkZnR0eSBp cyBjb25zb2xlLCAxIGlmIGV4dGVybmFsIGxpbmUuCisgICBkZnBydHkgLS0gRGVmYXVsdCBwYXJp dHkKKyAgIGRmZmxvdyAtLSBEZWZhdWx0IGZsb3cgY29udHJvbAorICAgY2t4ZWNoIC0tIEZsYWcg Zm9yIHdobyBlY2hvZXMgY29uc29sZSB0eXBlaW46CisgICAgIDEgLSBUaGUgcHJvZ3JhbSAoc3lz dGVtIGVjaG8gaXMgdHVybmVkIG9mZikKKyAgICAgMCAtIFRoZSBzeXN0ZW0gKG9yIGZyb250IGVu ZCwgb3IgdGVybWluYWwpLgorICAgZnVuY3Rpb25zIHRoYXQgd2FudCB0byBkbyB0aGVpciBvd24g ZWNob2luZyBzaG91bGQgY2hlY2sgdGhpcyBmbGFnCisgICBiZWZvcmUgZG9pbmcgc28uCisKKyAg IGZsZm5hbSAgLS0gTmFtZSBvZiBsb2NrIGZpbGUsIGluY2x1ZGluZyBpdHMgcGF0aCwgZS5nLiwK KyAgICAgICAgICAgICAgICAiL3Vzci9zcG9vbC91dWNwL0xDSy4uY3VsMCIgb3IgIi9ldGMvbG9j a3MvdHR5NzciCisgICBsa2ZsZm4gIC0tIE5hbWUgb2YgbGluayB0byBsb2NrIGZpbGUsIGluY2x1 ZGluZyBpdHMgcGF0aHMKKyAgIGhhc2xvY2sgLS0gRmxhZyBzZXQgaWYgdGhpcyBrZXJtaXQgZXN0 YWJsaXNoZWQgYSB1dWNwIGxvY2suCisgICBsb2NrcGlkIC0tIFBJRCBvZiBvdGhlciBwcm9jZXNz IHRoYXQgaGFzIGRlc2lyZWQgbGluZSBvcGVuLCBhcyBzdHJpbmcuCisgICBiYWNrZ3JkIC0tIEZs YWcgaW5kaWNhdGluZyBwcm9ncmFtIGV4ZWN1dGluZyBpbiBiYWNrZ3JvdW5kICggJiBvbgorICAg ICAgICAgICAgICAgIGVuZCBvZiBzaGVsbCBjb21tYW5kKS4gVXNlZCB0byBpZ25vcmUgSU5UIGFu ZCBRVUlUIHNpZ25hbHMuCisgICBydHVfYnVnIC0tIFNldCBieSBzdHB0cmFwKCkuICBSVFUgdHJl YXRzIF5aIGFzIEVPRiAoYnV0IG9ubHkgd2hlbiB3ZSBoYW5kbGUKKyAgICAgICAgICAgICAgICBT SUdUU1RQKQorCisgRnVuY3Rpb25zIGZvciBhc3NpZ25lZCBjb21tdW5pY2F0aW9uIGxpbmUgKGVp dGhlciBleHRlcm5hbCBvciBjb25zb2xlIHR0eSk6CisKKyAgIHN5c2luaXQoKSAgICAgICAgICAg ICAgIC0tIFN5c3RlbSBkZXBlbmRlbnQgcHJvZ3JhbSBpbml0aWFsaXphdGlvbgorICAgc3lzY2xl YW51cCgpICAgICAgICAgICAgLS0gU3lzdGVtIGRlcGVuZGVudCBwcm9ncmFtIHNodXRkb3duCisg ICB0dG9wZW4odHRuYW1lLGxvY2FsLG1kbXR5cCx0aW1vKSAtLSBPcGVuIHRoZSBuYW1lZCB0dHkg Zm9yIGV4Y2x1c2l2ZSBhY2Nlc3MuCisgICB0dGNsb3MoKSAgICAgICAgICAgICAgICAtLSBDbG9z ZSAmIHJlc2V0IHRoZSB0dHksIHJlbGVhc2luZyBhbnkgYWNjZXNzIGxvY2suCisgICB0dHNzcGQo Y3BzKSAgICAgICAgICAgICAtLSBTZXQgdGhlIHRyYW5zbWlzc2lvbiBzcGVlZCBvZiB0aGUgdHR5 LgorICAgdHRnc3BkKCkgICAgICAgICAgICAgICAgLS0gR2V0IChyZWFkKSB0aGUgdGhlIHRyYW5z bWlzc2lvbiBzcGVlZCBvZiB0aGUgdHR5LgorICAgdHRwa3Qoc3BlZWQsZmxvdyxwYXJpdHkpIC0t IFB1dCB0aGUgdHR5IGluIHBhY2tldCBtb2RlIGFuZCBzZXQgdGhlIHNwZWVkLgorICAgdHR2dChz cGVlZCxmbG93KSAgICAgICAgLS0gUHV0IHRoZSB0dHkgaW4gdmlydHVhbCB0ZXJtaW5hbCBtb2Rl LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciBpbiBESUFMSU5HIG9yIENPTk5F Q1RFRCBtb2RlbSBjb250cm9sIHN0YXRlLgorICAgdHRyZXMoKSAgICAgICAgICAgICAgICAgLS0g UmVzdG9yZSBvcmlnaW5hbCB0dHkgbW9kZXMuCisgICB0dHNjYXJyKGNhcnJpZXIpICAgICAgICAt LSBTZXQgY2FycmllciBjb250cm9sIG1vZGUsIG9uL29mZi9hdXRvLgorICAgdHRpbmwoZGVzdCxt YXgsdGltbykgICAgLS0gVGltZWQgcmVhZCBsaW5lIGZyb20gdGhlIHR0eS4KKyAgIHR0aW5jKHRp bW8pICAgICAgICAgICAgIC0tIFRpbWVkIHJlYWQgY2hhcmFjdGVyIGZyb20gdHR5LgorICAgbXly ZWFkKCkgICAgICAgICAgICAgICAgLS0gUmF3IG1vZGUgYnVsayBidWZmZXIgcmVhZCwgZ2l2ZXMg c3Vic2VxdWVudAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFycyBvbmUgYXQg YSB0aW1lIGFuZCBzaW11bGF0ZXMgRklPTlJFQUQuCisgICBteXVucmQoYykgICAgICAgICAgICAg ICAtLSBQbGFjZXMgYyBiYWNrIGluIGJ1ZmZlciB0byBiZSByZWFkIChvbmUgb25seSkKKyAgIHR0 Y2hrKCkgICAgICAgICAgICAgICAgIC0tIFNlZSBob3cgbWFueSBjaGFyYWN0ZXJzIGluIHR0eSBp bnB1dCBidWZmZXIuCisgICB0dHhpbihuLGJ1ZikgICAgICAgICAgICAtLSBSZWFkIG4gY2hhcmFj dGVycyBmcm9tIHR0eSAodW50aW1lZCkuCisgICB0dG9sKHN0cmluZyxsZW5ndGgpICAgICAtLSBX cml0ZSBhIHN0cmluZyB0byB0aGUgdHR5LgorICAgdHRvYyhjKSAgICAgICAgICAgICAgICAgLS0g V3JpdGUgYSBjaGFyYWN0ZXIgdG8gdGhlIHR0eS4KKyAgIHR0Zmx1aSgpICAgICAgICAgICAgICAg IC0tIEZsdXNoIHR0eSBpbnB1dCBidWZmZXIuCisgICB0dHNuZGIoKSAgICAgICAgICAgICAgICAt LSBTZW5kIEJSRUFLIHNpZ25hbC4KKyAgIHR0c25kbGIoKSAgICAgICAgICAgICAgIC0tIFNlbmQg TG9uZyBCUkVBSyBzaWduYWwuCisKKyAgIHR0bG9jayh0dG5hbWUpICAgICAgICAgIC0tICJMb2Nr IiB0dHkgZGV2aWNlIGFnYWluc3QgdXVjcCBjb2xsaXNpb25zLgorICAgdHR1bmxjaygpICAgICAg ICAgICAgICAgLS0gVW5sb2NrIHR0eSBkZXZpY2UuCisKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEZvciBBVFQ3MzAwL1VuaXggUEMsIFN5c3RlbSBWOgorICAgYXR0ZGlhbCh0dG5hbWUs c3BlZWQsdGVsbmJyKSAtLSBkaWFscyBBVFQ3MzAwL1VuaXggUEMgaW50ZXJuYWwgbW9kZW0KKyAg IG9mZmdldHR5KHR0bmFtZSkgICAgICAgIC0tIFR1cm5zIG9mZiBnZXR0eSgxbSkgZm9yIGNvbW1z IGxpbmUKKyAgIG9uZ2V0dHkodHRuYW1lKSAgICAgICAgIC0tIFJlc3RvcmVzIGdldHR5KCkgdG8g Y29tbXMgbGluZQorKi8KKworLyoKK0Z1bmN0aW9ucyBmb3IgY29uc29sZSB0ZXJtaW5hbDoKKwor ICAgY29uZ20oKSAgIC0tIEdldCBjb25zb2xlIHRlcm1pbmFsIG1vZGVzLgorICAgY29uY2IoZXNj KSAtLSBQdXQgdGhlIGNvbnNvbGUgaW4gc2luZ2xlLWNoYXJhY3RlciB3YWtldXAgbW9kZSB3aXRo IG5vIGVjaG8uCisgICBjb25iaW4oZXNjKSAtLSBQdXQgdGhlIGNvbnNvbGUgaW4gYmluYXJ5IChy YXcpIG1vZGUuCisgICBjb25yZXMoKSAgLS0gUmVzdG9yZSB0aGUgY29uc29sZSB0byBtb2RlIG9i dGFpbmVkIGJ5IGNvbmdtKCkuCisgICBjb25vYyhjKSAgLS0gVW5idWZmZXJlZCBvdXRwdXQsIG9u ZSBjaGFyYWN0ZXIgdG8gY29uc29sZS4KKyAgIGNvbm9sKHMpICAtLSBVbmJ1ZmZlcmVkIG91dHB1 dCwgbnVsbC10ZXJtaW5hdGVkIHN0cmluZyB0byB0aGUgY29uc29sZS4KKyAgIGNvbm9sYShzKSAt LSBVbmJ1ZmZlcmVkIG91dHB1dCwgYXJyYXkgb2Ygc3RyaW5ncyB0byB0aGUgY29uc29sZS4KKyAg IGNvbnhvKG4scykgLS0gVW5idWZmZXJlZCBvdXRwdXQsIG4gY2hhcmFjdGVycyB0byB0aGUgY29u c29sZS4KKyAgIGNvbmNoaygpICAtLSBDaGVjayBpZiBjaGFyYWN0ZXJzIGF2YWlsYWJsZSBhdCBj b25zb2xlIChic2QgNC4yKS4KKyAgICAgICAgICAgICAgICBDaGVjayBpZiBlc2NhcGUgY2hhciAo XlwpIHR5cGVkIGF0IGNvbnNvbGUgKFN5c3RlbSBJSUkvVikuCisgICBjb25pbmModGltbykgIC0t IFRpbWVkIGdldCBhIGNoYXJhY3RlciBmcm9tIHRoZSBjb25zb2xlLgorICAgY29uZ2tzKHRpbW8p ICAtLSBUaW1lZCBnZXQga2V5Ym9hcmQgc2NhbiBjb2RlLgorICAgY29uaW50KCkgIC0tIEVuYWJs ZSB0ZXJtaW5hbCBpbnRlcnJ1cHRzIG9uIHRoZSBjb25zb2xlIGlmIG5vdCBiYWNrZ3JvdW5kLgor ICAgY29ubm9pKCkgIC0tIERpc2FibGUgdGVybWluYWwgaW50ZXJydXB0cyBvbiB0aGUgY29uc29s ZSBpZiBub3QgYmFja2dyb3VuZC4KKworVGltZSBmdW5jdGlvbnMKKworICAgbXNsZWVwKG0pIC0t IE1pbGxpc2Vjb25kIHNsZWVwCisgICB6dGltZSgmcykgLS0gUmV0dXJuIHBvaW50ZXIgdG8gZGF0 ZS90aW1lIHN0cmluZworICAgcnRpbWVyKCkgLS0gIFJlc2V0IHRpbWVyCisgICBndGltZXIoKSAg LS0gR2V0IGVsYXBzZWQgdGltZSBzaW5jZSBsYXN0IGNhbGwgdG8gcnRpbWVyKCkKKyovCisKKy8q IENvbmRpdGlvbmFsIEluY2x1ZGVzICovCisKKy8qIFdoZXRoZXIgdG8gaW5jbHVkZSA8c3lzL2Zp bGUuaD4gKi8KKworI2lmZGVmIFJUVQkJCQkvKiBSVFUgZG9lc24ndCAqLworI2RlZmluZSBOT0ZJ TEVICisjZW5kaWYgLyogUlRVICovCisKKyNpZmRlZiBDSUUJCQkJLyogQ0lFIGRvZXMuICovCisj dW5kZWYgTk9GSUxFSAorI2VuZGlmIC8qIENJRSAqLworCisjaWZkZWYgQlNENDEJCQkJLyogNC4x IEJTRCBkb2Vzbid0ICovCisjZGVmaW5lIE5PRklMRUgKKyNlbmRpZiAvKiBCU0Q0MSAqLworCisj aWZkZWYgaXM2OGsJCQkJLyogSW50ZWdyYXRlZCBTb2x1dGlvbnMgNjgwMDAgVU5JWCAgKi8KKyNk ZWZpbmUgTk9GSUxFSAkJCQkvKiBlLmcuIG9uIFBsZXh1eCBQNjAgYW5kIFN1bi0xICovCisjZW5k aWYgLyogaXM2OGsgKi8KKworI2lmZGVmIE1JTklYCQkJCS8qIE1JTklYICovCisjZGVmaW5lIE5P RklMRUgKKyNlbmRpZiAvKiBNSU5JWCAqLworCisjaWZkZWYgQ09IRVJFTlQJCQkJLyogQ29oZXJl bnQgKi8KKyNkZWZpbmUgTk9GSUxFSAorI2VuZGlmIC8qIENPSEVSRU5UICovCisKKyNpZm5kZWYg Tk9GSUxFSAkJCQkvKiBOb3cgaW5jbHVkZSBpZiBzZWxlY3RlZC4gKi8KKyNpbmNsdWRlIDxzeXMv ZmlsZS5oPgorI2VuZGlmIC8qIE5PRklMRUggKi8KKworLyogUE9TSVggKi8KKworI2lmZGVmIEJT RDQ0T1JQT1NJWAkJCS8qIFBPU0lYIHVzZXMgdGVybWlvcy5oICovCisjZGVmaW5lIFRFUk1JT1MK KyNpZmRlZiBfX2JzZGlfXworI2lmZGVmIFBPU0lYCisjdW5kZWYgX1BPU0lYX1NPVVJDRQkJCS8q IEdldCBleHRyYSBzdHVmZiBmcm9tIHRlcm1pb3MuaCAqLworI2VuZGlmIC8qIFBPU0lYICovCisj ZW5kaWYgLyogX19ic2RpX18gKi8KKyNpbmNsdWRlIDx0ZXJtaW9zLmg+CisjaWZkZWYgTElOVVgK KyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNlbmRpZiAvKiBMSU5VWCAqLworI2lmZGVmIFFOWDE2 CisjaW5jbHVkZSA8aW9jdGwuaD4KKyNlbHNlCisjaWZkZWYgUU5YNgorI2luY2x1ZGUgPGlvY3Rs Lmg+CisjZW5kaWYgLyogUU5YNiAqLworI2VuZGlmIC8qIFFOWDE2ICovCisjaWZkZWYgX19ic2Rp X18KKyNpZmRlZiBQT1NJWAorI2RlZmluZSBfUE9TSVhfU09VUkNFCisjZW5kaWYgLyogUE9TSVgg Ki8KKyNlbmRpZiAvKiBfX2JzZGlfXyAqLworI2lmbmRlZiBCU0Q0NAkJCQkvKiBSZWFsbHkgUE9T SVggKi8KKyNpZm5kZWYgQ0tfUU5YMzIJCQkvKiB3YXMgQ0tfUU5YMzIgKi8KKyNkZWZpbmUgTk9T WVNJT0NUTEgJCQkvKiBObyBpb2N0bCdzIGFsbG93ZWQuICovCisjdW5kZWYgdWx0cml4CQkJCS8q IFR1cm4gb2ZmIGFueSB1bHRyaXggZmVhdHVyZXMuICovCisjZW5kaWYgLyogQ0tfUU5YMzIgKi8K KyNlbmRpZiAvKiBCU0Q0NCAqLworI2VuZGlmIC8qIFBPU0lYICovCisKKy8qIFN5c3RlbSBJSUks IFN5c3RlbSBWICovCisKKyNpZmRlZiBBVFRTVgorI2lmbmRlZiBCU0Q0NAorI2lmbmRlZiBQT1NJ WAorI2luY2x1ZGUgPHRlcm1pby5oPgorI2VuZGlmIC8qIFBPU0lYICovCisjZW5kaWYgLyogQlNE NDQgKi8KKyNpZmRlZiBURVJNSU9YCisvKiBOZWVkIHRoaXMgZm9yIHRlcm1pb3ggc3RydWN0dXJl LCBSVFMvQ1RTIGFuZCBEVFIvQ0QgZmxvdyBjb250cm9sICovCisjaW5jbHVkZSA8dGVybWlveC5o PgorICBzdHJ1Y3QgdGVybWlveCByY3RzeDsKKyNlbHNlCisjaWZkZWYgU1RFUk1JT1gKKyNpZmRl ZiBTQ09fT1NSNTA0CisvKiBTb3JyeSwgdGhpcyBpcyB0cnVseSBkaXNndXN0aW5nIGJ1dCBpdCdz IFNDTydzIGZhdWx0LiAqLworI2lmbmRlZiBfU1ZJRDMKKyNkZWZpbmUgX0NLX1NWSUQzX1gKKyNk ZWZpbmUgX1NWSUQzCisjZW5kaWYgLyogX1NWSUQzICovCisjZW5kaWYgLyogU0NPX09TUjUwNCAq LworI2luY2x1ZGUgPHN5cy90ZXJtaW94Lmg+CisgIHN0cnVjdCB0ZXJtaW94IHJjdHN4OworI2lm ZGVmIENLX1NWSUQzX1gKKyN1bmRlZiBfU1ZJRDMKKyN1bmRlZiBDS19TVklEM19YCisjZW5kaWYg LyogQ0tfU1ZJRDNfWCAqLworI2VuZGlmIC8qIFNURVJNSU9YICovCisjZW5kaWYgLyogVEVSTUlP WCAqLworI2VuZGlmIC8qIEFUVFNWICovCisKKyNpZmRlZiBDT0hFUkVOVAkJCS8qIFVzZSB0ZXJt aW8uaCwgbm90IHNndHR5LmggZm9yIENvaGVyZW50ICovCisjaW5jbHVkZSA8dGVybWlvLmg+Cisj ZW5kaWYgLyogQ09IRVJFTlQgKi8KKworI2lmZGVmIE1JTklYCQkJCS8qIE1JTklYIHVzZXMgaW9j dGwncyAqLworI2RlZmluZSBOT1NZU0lPQ1RMSAkJCS8qIGJ1dCBoYXMgbm8gPHN5cy9pb2N0bC5o PiAqLworI2VuZGlmIC8qIE1JTklYICovCisKKy8qIE90aGVycyAqLworCisjaWZuZGVmIE5PU1lT SU9DVExICQkJLyogT3RoZXJzIHVzZSBpb2N0bCgpICovCisjaWZkZWYgU1VONFM1CisvKgorICBU aGlzIGlzIHRvIGdldCByaWQgb2YgY3BwIHdhcm5pbmcgbWVzc2FnZXMgdGhhdCBvY2N1ciBiZWNh dXNlIGFsbCBvZgorICB0aGVzZSBzeW1ib2xzIGFyZSBkZWZpbmVkIGJ5IGJvdGggdGVybWlvcy5o IGFuZCBpb2N0bC5oIG9uIHRoZSBTVU4uCisqLworI3VuZGVmIEVDSE8KKyN1bmRlZiBOTDAKKyN1 bmRlZiBOTDEKKyN1bmRlZiBUQUIwCisjdW5kZWYgVEFCMQorI3VuZGVmIFRBQjIKKyN1bmRlZiBY VEFCUworI3VuZGVmIENSMAorI3VuZGVmIENSMQorI3VuZGVmIENSMgorI3VuZGVmIENSMworI3Vu ZGVmIEZGMAorI3VuZGVmIEZGMQorI3VuZGVmIEJTMAorI3VuZGVmIEJTMQorI3VuZGVmIFRPU1RP UAorI3VuZGVmIEZMVVNITworI3VuZGVmIFBFTkRJTgorI3VuZGVmIE5PRkxTSAorI2VuZGlmIC8q IFNVTjRTNSAqLworI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2VuZGlmIC8qIE5PU1lTSU9DVExI ICovCisvKgorICBXZSByZWFsbHksIHJlYWxseSwgUkVBTExZIHdhbnQgRklPTlJFQUQsIGJlY2F1 c2UgaXQgaXMgdGhlIG9ubHkgd2F5IHRvIGZpbmQKKyAgb3V0IG5vdCBqdXN0ICppZiogc3R1ZmYg aXMgd2FpdGluZyB0byBiZSByZWFkLCBidXQgaG93IG11Y2gsIHdoaWNoIGlzCisgIGNyaXRpY2Fs IHRvIG91ciBzbGlkaW5nLXdpbmRvdyBhbmQgc3RyZWFtaW5nIHByb2NlZHVyZXMsIG5vdCB0byBt ZW50aW9uCisgIGVmZmljaWVuY3kgb2YgQ09OTkVDVCwgZXRjLgorKi8KKyNpZmRlZiBCRUxMVjEw CisjaW5jbHVkZSA8c3lzL2ZpbGlvLmg+CQkJLyogRm9yIEZJT05SRUFEICovCisjaWZkZWYgRklP TlJFQUQKKyNkZWZpbmUgTVlSRUFECisjZW5kaWYgLyogTVlSRUFEICovCisjZW5kaWYgLyogQkVM TFYxMCAqLworCisjaWZuZGVmIEZJT05SRUFECisvKiBJdCB3YXNuJ3QgZm91bmQgaW4gaW9jdGwu aCBvciB0ZXJtKi5oIC0gdHJ5IHRoZXNlIHBsYWNlczogKi8KKyNpZmRlZiBVTklYV0FSRQorI2lu Y2x1ZGUgPHN5cy9maWxpby5oPgorI2Vsc2UKKyNpZmRlZiBTT0xBUklTCisjaW5jbHVkZSA8c3lz L2ZpbGlvLmg+CisjZW5kaWYgLyogU09MQVJJUyAqLworI2VuZGlmIC8qIFVOSVhXQVJFICovCisj ZW5kaWYgLyogRklPTlJFQUQgKi8KKworI2lmZGVmIFhFTklYIC8qIFdhcyBNX1VOSVggYnV0IFhF TklYIGltcGxpZXMgTV9VTklYIGFuZCBhcHBsaWVzIHRvIFhFTklYIHRvbyAqLworLyoKKyAgPHN5 cy9zb2NrZXQuaD4gaW5jbHVkZWQgYWJvdmUgdmlhICJja2NuZXQuaCIgZGVmaW5lcyBGSU9OUkVB RCBhcworICBzb21ldGhpbmcuICBEdWUgdG8gdGhpcywgaW5fY2hrKCkgdXNlcyB0aGUgRklPTlJF QUQgaW5zdGVhZCBvZiBSRENISworICBhbmQgdGhlIGhvdCBrZXlzIGR1cmluZyBmaWxlIHRyYW5z ZmVyIChYIHRvIGNhbmNlbCBmaWxlIGV0YykgZG8gbm90CisgIHdvcmsgYmVjYXVzZSBGSU9OUkVB RCBkb2Vzbid0IHdvcmsgZXZlbiB0aG91Z2ggaXQgaXMgZGVmaW5lZC4KKworICBOT1RFOiBUaGlz IG1pZ2h0IGFsc28gYmUgdHJ1ZSBlbHNld2hlcmUuCisqLworI2lmZGVmIEZJT05SRUFECisjdW5k ZWYgRklPTlJFQUQKKyNlbmRpZiAvKiBGSU9OUkVBRCAqLworI2VuZGlmIC8qIFhFTklYICovCisK KyNpZmRlZiBDS19TQ09WNQkJCQkvKiBEaXR0byBmb3IgU0NPIE9wZW5TZXJ2ZXIgNS4wICovCisj aWZuZGVmIFNDT19PU1I1MDcJCQkvKiAyOTkgKi8KKyNpZmRlZiBGSU9OUkVBRAorI3VuZGVmIEZJ T05SRUFECisjZW5kaWYgLyogRklPTlJFQUQgKi8KKyNlbmRpZgkvKiBTQ09fT1NSNTA3ICovCisj ZW5kaWYgLyogQ0tfU0NPVjUgKi8KKworI2lmZGVmIFNDT19PU1I1MDcJCQkvKiAyOTkgKi8KKyNp ZmRlZiBSRENISworI3VuZGVmIFJEQ0hLCisjZW5kaWYJLyogUkRDSEsgKi8KKyNlbmRpZgkvKiBT Q09fT1NSNTA3ICovCisKKy8qIFdoZXRoZXIgdG8gaW5jbHVkZSA8ZmNudGwuaD4gKi8KKworI2lm bmRlZiBpczY4awkJCQkvKiBPbmx5IGEgZmV3IGRvbid0IGhhdmUgdGhpcyBvbmUuICovCisjaWZu ZGVmIEJTRDQxCisjaWZuZGVmIEZUMjEKKyNpZm5kZWYgRlQxOAorI2lmbmRlZiBDT0hFUkVOVAor I2luY2x1ZGUgPGZjbnRsLmg+CisjZW5kaWYgLyogQ09IRVJFTlQgKi8KKyNlbmRpZiAvKiBGVDE4 ICovCisjZW5kaWYgLyogRlQyMSAqLworI2VuZGlmIC8qIEJTRDQxICovCisjZW5kaWYgLyogbm90 IGlzNjhrICovCisKKyNpZmRlZiBDT0hFUkVOVAorI2lmZGVmIF9JMzg2CisjaW5jbHVkZSA8ZmNu dGwuaD4KKyNlbHNlCisjaW5jbHVkZSA8c3lzL2ZjbnRsLmg+CisjZW5kaWYgLyogX0kzODYgKi8K KyNlbmRpZiAvKiBDT0hFUkVOVCAqLworCisjaWZkZWYgQVRUNzMwMAkJCQkvKiBVbml4IFBDLCBp bnRlcm5hbCBtb2RlbSBkaWFsZXIgKi8KKyNpbmNsdWRlIDxzeXMvcGhvbmUuaD4KKyNlbmRpZiAv KiBBVFQ3MzAwICovCisKKyNpZmRlZiBIUFVYCQkJCS8qIEhQLVVYIHZhcmlhdGlvbnMuICovCisj ZGVmaW5lIEhQVVhKT0JDVEwKKyNpbmNsdWRlIDxzeXMvbW9kZW0uaD4JCQkvKiBIUC1VWCBtb2Rl bSBzaWduYWxzICovCisjaWZkZWYgaHA5MDAwczUwMAkJCS8qIE1vZGVsIDUwMCAqLworI3VuZGVm IEhQVVhKT0JDVEwKKyNlbmRpZiAvKiBocDkwMDBzNTAwICovCisjaWZkZWYgSFBVWFBSRTY1Cisj dW5kZWYgSFBVWEpPQkNUTAordHlwZWRlZiBsb25nIG1mbGFnOworI2VuZGlmIC8qIEhQVVhQUkU2 NSAqLworI2lmZGVmIEhQVVhKT0JDVEwKKyNpbmNsdWRlIDxzeXMvYnNkdHR5Lmg+CQkJLyogSFAt VVggQmVya2VsZXkgdHR5IHN1cHBvcnQgKi8KKyNlbmRpZiAvKiBIUFVYSk9CQ1RMICovCisjZW5k aWYgLyogSFBVWCAqLworCisvKgorICBXaGljaCB0aW1lLmggZmlsZXMgdG8gaW5jbHVkZS4uLiBT ZWUgY2tjZGViLmggZm9yIGRlZmF1bHRzLgorICBOb3RlIHRoYXQgMCwgMSwgMiwgb3IgYWxsIDMg b2YgdGhlc2UgY2FuIGJlIGluY2x1ZGVkIGFjY29yZGluZyB0bworICB0aGUgc3ltYm9sIGRlZmlu aXRpb25zLgorKi8KKyNpZm5kZWYgTk9USU1FSAorI2lmZGVmIFRJTUVICisjaW5jbHVkZSA8dGlt ZS5oPgorI2VuZGlmIC8qIFRJTUVIICovCisjZW5kaWYgLyogTk9USU1FSCAqLworCisjaWZuZGVm IE5PU1lTVElNRUgKKyNpZmRlZiBTWVNUSU1FSAorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjZW5k aWYgLyogU1lTVElNRUggKi8KKyNlbmRpZiAvKiBOT1NZU1RJTUVIICovCisKKyNpZm5kZWYgTk9T WVNUSU1FQkgKKyNpZmRlZiBTWVNUSU1FQkgKKyNpbmNsdWRlIDxzeXMvdGltZWIuaD4KKyNlbmRp ZiAvKiBTWVNUSU1FQkggKi8KKyNlbmRpZiAvKiBOT1NZU1RJTUVCSCAqLworCisjaWZuZGVmIE5P RENMVElNRVZBTAorI2lmZGVmIERDTFRJTUVWQUwKKy8qCisgIEluIGNlcnRhaW4gUE9TSVggYnVp bGRzIChsaWtlIFVuaXh3YXJlIDcpLCA8W3N5cy9ddGltZS5oPiByZWZ1c2VzIHRvCisgIGRlZmlu ZSB0aGUgc3RydWN0cyB3ZSBuZWVkIHRvIGFjY2VzcyB0aGUgaGlnaGVyIHNwZWVkcywgc28gd2Ug aGF2ZSB0bworICBkbyBpdCBvdXJzZWx2ZXMuCisqLworc3RydWN0IHRpbWV2YWwgeworICAgIGxv bmcgdHZfc2VjOworICAgIGxvbmcgdHZfdXNlYzsKK307CitzdHJ1Y3QgdGltZXpvbmUgeworICAg IGludCB0el9taW51dGVzd2VzdDsKKyAgICBpbnQgdHpfZHN0dGltZTsKK307CisjZW5kaWYgLyog RENMVElNRVZBTCAqLworI2VuZGlmIC8qIE5PRENMVElNRVZBTCAqLworCisjaWZkZWYgX19saW51 eF9fCisvKiBUSElTIElTIE9CU09MRVRFIHNpbmNlIGFib3V0IExpbnV4IDAuOTIgKi8KKyNpZmRl ZiBPTElOVVhISVNQRUVECisjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CisjZW5kaWYgLyogT0xJ TlVYSElTUEVFRCAqLworI2lmZGVmIF9fYWxwaGFfXwkJCS8qIExpbnV4IG9uIERFQyBBbHBoYSAq LworI2lmbmRlZiBfX0dMSUJDX18JCQkvKiBCdXQgbm90IHdpdGggZ2xpYmMgKi8KKyNpbmNsdWRl IDxhc20vdGVybWlvcy5oPgorI2VuZGlmIC8qIF9fR0xJQkNfXyAqLworI2VuZGlmIC8qIF9fYWxw aGFfXyAqLworI2VuZGlmIC8qIF9fbGludXhfXyAqLworCisjaWZkZWYgTk9JRVhURU4JCQkJLyog VGhpcyBpcyBicm9rZW4gb24gc29tZSBzeXN0ZW1zICovCisjdW5kZWYgSUVYVEVOCQkJCS8qIGxp a2UgQ29udmV4L09TIDkuMSAqLworI2VuZGlmIC8qIE5PSUVYVEVOICovCisjaWZuZGVmIElFWFRF TgkJCQkvKiBUdXJuIG9mZiBeTy9eViBwcm9jZXNzaW5nLiAqLworI2RlZmluZSBJRVhURU4gMAkJ CS8qIE5lZWRlZCwgYXQgbGVhc3QsIG9uIEJTREkuICovCisjZW5kaWYgLyogSUVYVEVOICovCisv KgorICBQaWNrIHVwIGRlZmluaXRpb25zIG5lZWRlZCBmb3Igc2VsZWN0KCkgaWYgd2UgZG9uJ3Qg aGF2ZSB0aGVtIGFscmVhZHkuCisgIE5vcm1hbGx5IHRoZXkgY29tZSBmcm9tIDxzeXMvdHlwZXMu aD4gYnV0IHNvbWUgc3lzdGVtcyBnZXQgdGhlbSBmcm9tCisgIDxzeXMvc2VsZWN0Lmg+Li4uICBS YXRoZXIgdGhhbiBoYXJkd2lyZSBhbGwgb2YgdGhlbSBpbnRvIHRoZSBzb3VyY2UsIHdlCisgIGlu Y2x1ZGUgaXQgaWYgU0VMRUNUX0ggaXMgZGVmaW5lZCBpbiBjb21waWxlLXRpbWUgQ0ZMQUdTLgor Ki8KKyNpZm5kZWYgU0NPX09TUjUwNAorI2lmZGVmIFNFTEVDVF9ICisjaW5jbHVkZSA8c3lzL3Nl bGVjdC5oPgorI2VuZGlmIC8qIFNFTEVDVF9IICovCisjZW5kaWYgLyogU0NPX09TUjUwNCAqLwor CisjaWZkZWYgYWVnaXMKKyNpbmNsdWRlICIvc3lzL2lucy9iYXNlLmlucy5jIgorI2luY2x1ZGUg Ii9zeXMvaW5zL2Vycm9yLmlucy5jIgorI2luY2x1ZGUgIi9zeXMvaW5zL2lvcy5pbnMuYyIKKyNp bmNsdWRlICIvc3lzL2lucy9zaW8uaW5zLmMiCisjaW5jbHVkZSAiL3N5cy9pbnMvcGFkLmlucy5j IgorI2luY2x1ZGUgIi9zeXMvaW5zL3RpbWUuaW5zLmMiCisjaW5jbHVkZSAiL3N5cy9pbnMvcGZt Lmlucy5jIgorI2luY2x1ZGUgIi9zeXMvaW5zL3BnbS5pbnMuYyIKKyNpbmNsdWRlICIvc3lzL2lu cy9lYzIuaW5zLmMiCisjaW5jbHVkZSAiL3N5cy9pbnMvdHlwZV91aWRzLmlucy5jIgorI2luY2x1 ZGUgPGRlZmF1bHRfYWNsLmg+CisjdW5kZWYgVElPQ0VYQ0wKKyN1bmRlZiBGSU9OUkVBRAorI2Vu ZGlmIC8qIGFlZ2lzICovCisKKyNpZmRlZiBzeGFFNTAJCQkJLyogUEZVIENvbXBhY3QgQSBTWC9B IFRJU1AgVjEwL0w1MCAqLworI3VuZGVmIEZJT05SRUFECisjZW5kaWYgLyogc3hhRTUwICovCisK Ky8qIFRoZSBmb2xsb3dpbmcgI2RlZmluZXMgYXJlIGNhdGNoLWFsbHMgZm9yIHRob3NlIHN5c3Rl bXMgKi8KKy8qIHRoYXQgZGlkbid0IGhhdmUgb3IgY291bGRuJ3QgZmluZCA8ZmlsZS5oPi4uLiAq LworCisjaWZuZGVmIEZSRUFECisjZGVmaW5lIEZSRUFEIDB4MDEKKyNlbmRpZiAvKiBGUkVBRCAq LworCisjaWZuZGVmIEZXUklURQorI2RlZmluZSBGV1JJVEUgMHgxMAorI2VuZGlmIC8qIEZXUklU RSAqLworCisjaWZuZGVmIE9fUkRPTkxZCisjZGVmaW5lIE9fUkRPTkxZIDAwMAorI2VuZGlmIC8q IE9fUkRPTkxZICovCisKKy8qIFRoaXMgaXMgZm9yIGFuY2llbnQgVW5peGVzIHRoYXQgZG9uJ3Qg aGF2ZSB0aGVzZSB0dHkgc3ltYm9scyBkZWZpbmVkLiAqLworCisjaWZuZGVmIFBFTkRJTgorI2Rl ZmluZSBQRU5ESU4gSUNBTk9OCisjZW5kaWYgLyogUEVORElOICovCisjaWZuZGVmIEZMVVNITwor I2RlZmluZSBGTFVTSE8gSUNBTk9OCisjZW5kaWYgLyogRkxVU0hPICovCisjaWZuZGVmIEVYVFBS T0MKKyNkZWZpbmUgRVhUUFJPQyBJQ0FOT04KKyNlbmRpZiAvKiBFWFRQUk9DICovCisKKyNpZmRl ZiBTVk9SUE9TSVgKKy8qCisgIE1vZGVtIHNpZ25hbHMgYXJlIGFsc28gZm9yYmlkZGVuIGluIHRo ZSBQT1NJWCB3b3JsZC4gIEJ1dCBzb21lIFBPU0lYLWJhc2VkCisgIHBsYXRmb3JtcyBsZXQgdXMg YXQgdGhlbSBhbnl3YXkgaWYgd2Uga25vdyB3aGVyZSB0byBsb29rLgorKi8KKyNpZm5kZWYgTkVF RE1ETURFRlMKKy8qIERvZXNuJ3Qgd29yayBmb3IgTGludXggKi8KKyNpZmRlZiBVTklYV0FSRTcK KyNkZWZpbmUgTkVFRE1ETURFRlMKKyNlbmRpZiAvKiBVTklYV0FSRTcgKi8KKyNlbmRpZiAvKiBO RUVETURNREVGUyAqLworCisjaWZkZWYgTkVFRE1ETURFRlMKKyNpZm5kZWYgVElPQ01HRVQKKyNk ZWZpbmUgVElPQ01HRVQgKCgndCc8PDgpfDI5KQorI2VuZGlmIC8qIFRJT0NNR0VUICovCisKKyNp Zm5kZWYgVElPQ01fRFRSCisjZGVmaW5lIFRJT0NNX0RUUiAweDAwMDIKKyNlbmRpZiAvKiBUSU9D TV9EVFIgKi8KKyNpZm5kZWYgVElPQ01fUlRTCisjZGVmaW5lIFRJT0NNX1JUUyAweDAwMDQKKyNl bmRpZiAvKiBUSU9DTV9SVFMgKi8KKyNpZm5kZWYgVElPQ01fQ1RTCisjZGVmaW5lIFRJT0NNX0NU UyAweDAwMjAKKyNlbmRpZiAvKiBUSU9DTV9DVFMgKi8KKyNpZm5kZWYgVElPQ01fQ0FSCisjZGVm aW5lIFRJT0NNX0NBUiAweDAwNDAKKyNlbmRpZiAvKiBUSU9DTV9DQVIgKi8KKyNpZm5kZWYgVElP Q01fUk5HCisjZGVmaW5lIFRJT0NNX1JORyAweDAwODAKKyNlbmRpZiAvKiBUSU9DTV9STkcgKi8K KyNpZm5kZWYgVElPQ01fRFNSCisjZGVmaW5lIFRJT0NNX0RTUiAweDAxMDAKKyNlbmRpZiAvKiBU SU9DTV9EU1IgKi8KKyNlbmRpZiAvKiBORUVETURNREVGUyAqLworI2VuZGlmIC8qIFNWT1JQT1NJ WCAqLworCisvKiBEZWNsYXJhdGlvbnMgKi8KKworI2lmZGVmIE9YT1MKKyN1bmRlZiBUQ0dFVEEK KyN1bmRlZiBUQ1NFVEEKKyN1bmRlZiBUQ1NFVEFXCisjdW5kZWYgVENTRVRBRgorI2RlZmluZSBU Q0dFVEEgVENHRVRTCisjZGVmaW5lIFRDU0VUQSBUQ1NFVFMKKyNkZWZpbmUgVENTRVRBVyBUQ1NF VFNXCisjZGVmaW5lIFRDU0VUQUYgVENTRVRTRgorI2RlZmluZSB0ZXJtaW8gdGVybWlvcworI2Vu ZGlmIC8qIE9YT1MgKi8KKworI2lmZGVmIFNWT1JQT1NJWAkJCS8qIEFUJlQgU3lzIFYgb3IgUE9T SVggKi8KKyNpZmRlZiBVTklYV0FSRVBPU0lYCQkJLyogVW5peFdhcmUgNyBQT1NJWCBidWlsZCAq LworLyoKKyAgSW4gVW5peHdhcmUgUE9TSVggYnVpbGRzLCA8W3N5cy9ddGltZS5oPiByZWZ1c2Vz IHRvIGRlZmluZSB0aGUKKyAgc3RydWN0cyB3ZSBuZWVkIHRvIGFjY2VzcyB0aGUgaGlnaGVyIHNw ZWVkcywgc28gd2UgaGF2ZSB0byBkbyBpdAorICBvdXJzZWx2ZXMuCisqLworc3RydWN0IHRpbWV2 YWwgeworICAgIGxvbmcgdHZfc2VjOworICAgIGxvbmcgdHZfdXNlYzsKK307CitzdHJ1Y3QgdGlt ZXpvbmUgeworICAgIGludCB0el9taW51dGVzd2VzdDsKKyAgICBpbnQgdHpfZHN0dGltZTsKK307 CisjZW5kaWYgLyogVU5JWFdBUkVQT1NJWCAqLworI2VuZGlmIC8qIFNWT1JQT1NJWCAqLworCisj aWZkZWYgX19HTlVDX18KKyNpZmRlZiBYRU5JWAorLyoKKyAgQmVjYXVzZSBYZW5peCA8dGltZS5o PiBkb2Vzbid0IGRlY2xhcmUgdGltZSgpIGlmIHdlJ3JlIHVzaW5nIGdjYy4KKyovCit0aW1lX3Qg dGltZSgpOworI2VuZGlmIC8qIFhFTklYICovCisjZW5kaWYgLyogX19HTlVDX18gKi8KKworLyog U3BlY2lhbCBzdHVmZiBmb3IgVjcgaW5wdXQgYnVmZmVyIHBlZWtpbmcgKi8KKworI2lmZGVmICBW NworaW50IGttZW1bMl0gPSB7IC0xLCAtMX07CitjaGFyICppbml0cmF3cSgpLCAqcWFkZHJbMl09 ezAsMH07CisjZGVmaW5lIENPTiAwCisjZGVmaW5lIFRUWSAxCisjZW5kaWYgLyogVjcgKi8KKwor LyogZGZ0dHkgaXMgdGhlIGRldmljZSBuYW1lIG9mIHRoZSBkZWZhdWx0IGRldmljZSBmb3IgZmls ZSB0cmFuc2ZlciAqLworLyogZGZsb2MgaXMgMCBpZiBkZnR0eSBpcyB0aGUgdXNlcidzIGNvbnNv bGUgdGVybWluYWwsIDEgaWYgYW4gZXh0ZXJuYWwgbGluZSAqLworCisjaWZkZWYgQkVPUworICAg IGNoYXIgKiBkZnR0eSA9IE5VTEw7CisgICAgY2hhciAqIGRmbWRtID0gIm5vbmUiOworICAgIGlu dCBkZmxvYyA9IDA7ICAgICAgICAgICAgICAgICAgLyogdGhhdCBnb2VzIGluIGxvY2FsIG1vZGUg YnkgZGVmYXVsdCAqLworI2Vsc2UKKyNpZm5kZWYgREZUVFkKKyNpZmRlZiBQUk9WWDEKKyAgICBj aGFyICpkZnR0eSA9ICIvZGV2L2NvbTEuZG91dCI7IC8qIE9ubHkgZXhhbXBsZSBzbyBmYXIgb2Yg YSBzeXN0ZW0gKi8KKyAgICBjaGFyICpkZm1kbSA9ICJub25lIjsKKyAgICBpbnQgZGZsb2MgPSAx OyAgICAgICAgICAgICAgICAgIC8qIHRoYXQgZ29lcyBpbiBsb2NhbCBtb2RlIGJ5IGRlZmF1bHQg Ki8KKyNlbHNlCisgICAgY2hhciAqZGZ0dHkgPSBDVFROQU07ICAgICAgICAgICAgICAgLyogUmVt b3RlIGJ5IGRlZmF1bHQsIHVzZSBub3JtYWwgKi8KKyAgICBjaGFyICpkZm1kbSA9ICJub25lIjsK KyAgICBpbnQgZGZsb2MgPSAwOyAgICAgICAgICAgICAgICAgICAgICAvKiBjb250cm9sbGluZyB0 ZXJtaW5hbCBuYW1lLiAqLworI2VuZGlmIC8qIFBST1ZYMSAqLworI2Vsc2UKKyAgICBjaGFyICpk ZnR0eSA9IERGVFRZOwkJLyogRGVmYXVsdCBsb2NhdGlvbiBzcGVjaWZpZWQgb24gKi8KKyAgICBj aGFyICpkZm1kbSA9ICJub25lIjsJCS8qIGNvbW1hbmQgbGluZS4gKi8KKyAgICBpbnQgZGZsb2Mg PSAxOyAgICAgICAgICAgICAgICAgICAgICAvKiBjb250cm9sbGluZyB0ZXJtaW5hbCBuYW1lLiAq LworI2VuZGlmIC8qIERGVFRZICovCisjZW5kaWYgLyogQkVPUyAqLworCisjZGVmaW5lIENPTl9S RVMgMAkJCS8qIENvbnNvbGUgc3RhdGUgaXMgInJlc2V0IiAqLworI2RlZmluZSBDT05fQ0IgIDEJ CQkvKiBDb25zb2xlIHN0YXRlIGlzIENCUkVBSyAqLworI2RlZmluZSBDT05fQklOIDIJCQkvKiBD b25zb2xlIHN0YXRlIGlzIGJpbmFyeSAqLworICAgIHN0YXRpYyBpbnQgY29uc3RhdGUgPSBDT05f UkVTOworCisjZGVmaW5lIENPTklfUkVTIDAJCQkvKiBDb25zb2xlIGludGVycnVwdHMgYXJlICJy ZXNldCIgKi8KKyNkZWZpbmUgQ09OSV9JTlQgMQkJCS8qIENvbnNvbGUgaW50dGVydXB0cyBhcmUg c2V0ICovCisjZGVmaW5lIENPTklfTk9JIDIJCQkvKiBDb25zb2xlIGludHRlcnVwdHMgYXJlIGRp c2FibGVkICovCisgICAgc3RhdGljIGludCBjb25pc3RhdGUgPSBDT05JX1JFUzsKKworI2lmZGVm IENLX1NNQUxMCisjZGVmaW5lIENPTkJVRlNJWiAxNQorI2Vsc2UKKyNkZWZpbmUgQ09OQlVGU0la IDI1NQorI2VuZGlmIC8qIENLX1NNQUxMICovCisgICAgc3RhdGljIGNoYXIgY29uYnVmW0NPTkJV RlNJWl07CS8qIENvbnNvbGUgcmVhZGFoZWFkIGJ1ZmZlciAqLworICAgIHN0YXRpYyBpbnQgIGNv bmJ1Zm4gPSAwOwkJLyogQ2hhcnMgaW4gcmVhZGFoZWFkIGJ1ZmZlciAqLworICAgIHN0YXRpYyBj aGFyICpjb25idWZwID0gY29uYnVmOwkvKiBOZXh0IGNoYXIgaW4gcmVhZGFoZWFkIGJ1ZmZlciAq LworCisgICAgY2hhciBjdHRuYW1bREVWTkFNTEVOKzFdID0geyAnXDAnLCAnXDAnIH07IC8qIERl dGVybWluZWQgYXQgcnVudGltZSAqLworCisjaWZkZWYgUlRVCisgICAgaW50IHJ0dV9idWcgPSAw OwkJICAgIC8qIHNldCB0byAxIHdoZW4gcmV0dXJuaW5nIGZyb20gU0lHVFNUUCAqLworI2VuZGlm IC8qIFJUVSAqLworCisgICAgaW50IGRmcHJ0eSA9IERFRlBBUjsgICAgICAgICAgICAgICAgLyog RGVmYXVsdCBwYXJpdHkgKDAgPSBub25lKSAqLworICAgIGludCB0dHBydHkgPSAwOyAgICAgICAg ICAgICAgICAgICAgIC8qIFRoZSBwYXJpdHkgdGhhdCBpcyBpbiB1c2UuICovCisgICAgc3RhdGlj IGludCB0dHBtc2sgPSAweGZmOwkJLyogUGFyaXR5IHN0cmlwcGluZyBtYXNrLiAqLworICAgIGlu dCB0dG1kbSA9IDA7ICAgICAgICAgICAgICAgICAgICAgIC8qIE1vZGVtIGluIHVzZS4gKi8KKyAg ICBpbnQgdHRjYXJyID0gQ0FSX0FVVDsJCS8qIENhcnJpZXIgaGFuZGxpbmcgbW9kZS4gKi8KKyAg ICBpbnQgZGZmbG93ID0gRkxPX05PTkU7CQkvKiBEZWZhdWx0IGZsb3cgY29udHJvbCBpcyBOT05F ICovCisgICAgaW50IGJhY2tncmQgPSAwOyAgICAgICAgICAgICAgICAgICAgLyogQXNzdW1lIGlu IGZvcmVncm91bmQgKG5vICcmJyApICovCisjaWZkZWYgRl9TRVRGTAorICAgIGludCBpbmlmbGFn cyA9IC0xOwkJCS8qIGZjbnRsIGZsYWdzIGZvciB0dHlmZCAqLworI2VuZGlmIC8qIEZfU0VURkwg Ki8KKyAgICBpbnQgZmRmbGFnID0gMDsJCQkvKiBGbGFnIGZvciByZWRpcmVjdGVkIHN0ZGlvICov CisgICAgaW50IHR0ZmRmbGcgPSAwOwkJCS8qIE9wZW4gRmlsZSBkZXNjcmlwdG9yIHdhcyBnaXZl biAqLworICAgIGludCB0dnRmbGcgPSAwOwkJCS8qIEZsYWcgdGhhdCB0dHZ0IGhhcyBiZWVuIGNh bGxlZCAqLworICAgIGxvbmcgdHRzcGVlZCA9IC0xTDsJCQkvKiBGb3Igc2F2aW5nIHNwZWVkICov CisgICAgaW50IHR0ZmxvdyA9IC05OwkJCS8qIEZvciBzYXZpbmcgZmxvdyAqLworICAgIGludCB0 dGxkID0gLTE7CQkJLyogTGluZSBkaXNjaXBsaW5lICovCisKKyNpZmRlZiBzb255X25ld3MKKyAg ICBzdGF0aWMgaW50IGttX2NvbiA9IC0xOwkJLyogS2FuamkgbW9kZSBmb3IgY29uc29sZSB0dHkg Ki8KKyAgICBzdGF0aWMgaW50IGttX2V4dCA9IC0xOwkJLyogS2FuamkgbW9kZSBmb3IgZXh0ZXJu YWwgZGV2aWNlICovCisjZW5kaWYgLyogc29ueV9uZXdzICovCisKKyNpZmRlZiBQQVJTRU5TRQor ICAgIHN0YXRpYyBpbnQgbmVlZHBjaGsgPSAxOwkJLyogTmVlZCBwYXJpdHkgY2hlY2sgKi8KKyNl bHNlCisgICAgc3RhdGljIGludCBuZWVkcGNoayA9IDA7CisjZW5kaWYgLyogUEFSU0VOU0UgKi8K KworICAgIGV4dGVybiBpbnQgc3RvcGJpdHM7CQkvKiBTdG9wIGJpdHMgKi8KKyNpZmRlZiBIV1BB UklUWQorLyoKKyAgVW5mb3J0dW5hdGVseSB3ZSBtdXN0IGRvIHRoaXMgd2l0aCBnbG9iYWwgdmFy aWFibGVzIHJhdGhlciB0aGFuIHRocm91Z2ggdGhlCisgIHR0Li4uKCkgQVBJcyB0byBhdm9pZCBj aGFuZ2luZyB0aGUgQVBJcyBhbmQgdGhlIG1hbnkgbW9kdWxlcyB0aGF0IHVzZSB0aGVtLgorICBJ ZiBod3Bhcml0eSAhPSAwLCB0aGlzIGluZGljYXRlcyA4IGRhdGEgYml0cyArIHBhcml0eSwgcmF0 aGVyIHRoYW4gNyBkYXRhCisgIGJpdHMgKyBwYXJpdHkgb3IgOCBkYXRhIGJpdHMgYW5kIG5vIHBh cml0eSwgYW5kIG92ZXJyaWRlcyB0aGUgcmVndWxhciBwYXJpdHkKKyAgdmFyaWFibGUsIHdoaWNo IGlzIGNvbW11bmljYXRlZCB0byB0aGlzIG1vZHVsZSB0aHJ1IHR0cGt0KCksIGFuZCByZXByZXNl bnRlZAorICBsb2NhbGx5IGJ5IHRoZSB0dHBydHkgdmFyaWFibGUuCisqLworICAgIGV4dGVybiBp bnQgaHdwYXJpdHk7CQkvKiBIYXJkd2FyZSBwYXJpdHkgKi8KKyNlbmRpZiAvKiBIV1BBUklUWSAq LworCisjaWZkZWYgVENQU09DS0VUCisjaWZkZWYgVENQX05PREVMQVkKK3N0YXRpYyBpbnQgbm9k ZWxheV9zYXYgPSAtMTsKKyNlbmRpZiAvKiBUQ1BfTk9ERUxBWSAqLworI2VuZGlmIC8qIFRDUFNP Q0tFVCAqLworCitzdGF0aWMgaW50IHNpZ2ludF9pZ24gPSAwOwkJLyogU0lHSU5UIGlzIGlnbm9y ZWQgKi8KKworLyoKKyAgSGF2aW5nIHRoaXMgbW9kdWxlIHJlbHkgb24gZXh0ZXJuYWwgZ2xvYmFs cyBpcyBiYWQsIGJ1dCBmaXhpbmcgdGhpcworICByZXF1aXJlcyBvdmVyaGF1bCBvZiB0aGUgY2sq dGlvLmMgbW9kdWxlcyBmb3IgYWxsIHRoZSBkaWZmZXJlbnQgb3BlcmF0aW5nCisgIHN5c3RlbXMg c3VwcG9ydGVkIGJ5IEMtS2VybWl0LiAgTGVmdCBmb3IgYSBmdXR1cmUgcmVsZWFzZS4KKyovCitl eHRlcm4gaW50IHR0bnByb3RvOwkJCS8qIERlZmluZWQgaW4gY2tjbmV0LmMgKi8KK2V4dGVybiBp bnQgdHRuZXQ7CQkJLyogRGVmaW5lZCBpbiBja2NuZXQuYyAqLworZXh0ZXJuIGludCBub3B1c2gs IHhmcmNhbiwgeGZyY2hyLCB4ZnJudW07IC8qIERlZmluZWQgaW4gY2tjbWFpLmMgKi8KK2V4dGVy biBpbnQgeHN1c3BlbmQsIHdhc2Nsb3NlZDsKK2V4dGVybiBpbnQgaW5zZXJ2ZXIsIGxvY2FsOwor CitpbnQgY2t4ZWNoID0gMDsgLyogMCBpZiBzeXN0ZW0gbm9ybWFsbHkgZWNob2VzIGNvbnNvbGUg Y2hhcmFjdGVycywgZWxzZSAxICovCisKK2ludCBja21heGZpbGVzID0gMDsJCQkvKiBNYXggbnVt YmVyIG9mIG9wZW4gZmlsZXMgKi8KKworI2lmZGVmIENLX0VOQ1JZUFRJT04JCQkvKiBLZXJiZXJv cyAqLworI2luY2x1ZGUgImNrdWF0aC5oIgorZXh0ZXJuIGludCBtZV9lbmNyeXB0LCB1X2VuY3J5 cHQ7CisjZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLworCisvKiBEZWNsYXJhdGlvbnMgb2YgdmFy aWFibGVzIGdsb2JhbCB3aXRoaW4gdGhpcyBtb2R1bGUgKi8KKworI2lmZGVmIFRUTEVCVUYJCQkJ LyogU2VlIGNrY25ldC5oICovCitpbnQgdHRwdXNoID0gLTE7CisjZGVmaW5lIExFQlVGU0laIDQw OTYKK3N0YXRpYyBDSEFSIGxlX2J1ZltMRUJVRlNJWl07CitzdGF0aWMgaW50IGxlX3N0YXJ0ID0g MCwgbGVfZW5kID0gMCwgbGVfZGF0YSA9IDA7CisjZW5kaWYgLyogVFRMRUJVRiAqLworCisjZGVm aW5lIE1TR0JVRl9TSVpFIDEwMjQJCS8qIEZvciBkZWJ1Z2dpbmcgKi8KK3N0YXRpYyBjaGFyIG1z Z2J1ZltNU0dCVUZfU0laRV07CisKK3N0YXRpYyBpbnQgZ290c2lncyA9IDA7CisKK3N0YXRpYyB0 aW1lX3QgdGNvdW50ID0gKHRpbWVfdCkwOwkvKiBFbGFwc2VkIHRpbWUgY291bnRlciAqLworCitz dGF0aWMgU0lHVFlQICgqc2F2YWwpKCkgICAgID0gTlVMTDsJLyogRm9yIHNhdmluZyBhbGFybSgp IGhhbmRsZXIgKi8KK3N0YXRpYyBTSUdUWVAgKCpzYXZxdWl0KSgpICAgPSBOVUxMOwkvKiBhbmQg b3RoZXIgc2lnbmFsIGhhbmRsZXJzICovCisjaWZkZWYgU0lHVVNSMQorc3RhdGljIFNJR1RZUCAo KnNhdnVzcjEpKCkgICA9IE5VTEw7CisjZW5kaWYgLyogU0lHVVNSMSAqLworI2lmZGVmIFNJR1VT UjIKK3N0YXRpYyBTSUdUWVAgKCpzYXZ1c3IyKSgpICAgPSBOVUxMOworI2VuZGlmIC8qIFNJR1VT UjIgKi8KKyNpZmRlZiBTSUdQSVBFCitzdGF0aWMgU0lHVFlQICgqc2F2cGlwZSkoKSAgID0gTlVM TDsKKyNlbmRpZiAvKiBTSUdQSVBFICovCisjaWZkZWYgU0lHREFOR0VSCitzdGF0aWMgU0lHVFlQ ICgqc2F2ZGFuZ2VyKSgpID0gTlVMTDsKKyNlbmRpZiAvKiBTSUdEQU5HRVIgKi8KKworI2lmbmRl ZiBOT0pDCitzdGF0aWMgU0lHVFlQICgqamNoZGxyKSgpICAgID0gTlVMTDsJLyogRm9yIGNoZWNr aW5nIHN1c3BlbmQgaGFuZGxlciAqLworI2VuZGlmIC8qIE5PSkMgKi8KK3N0YXRpYyBpbnQgamNz aGVsbCA9IC0xOwkJLyogQW5kIGZsYWcgZm9yIHJlc3VsdCAqLworCisvKgorICBCUkVBS05VTFMg aXMgZGVmaW5lZCBmb3Igc3lzdGVtcyB0aGF0IHNpbXVsYXRlIHNlbmRpbmcgYSBCUkVBSyBzaWdu YWwKKyAgYnkgc2VuZGluZyBhIGJ1bmNoIG9mIE5VTCBjaGFyYWN0ZXJzIGF0IGxvdyBzcGVlZC4K KyovCisjaWZkZWYgUFJPVlgxCisjaWZuZGVmIEJSRUFLTlVMUworI2RlZmluZSBCUkVBS05VTFMK KyNlbmRpZiAvKiBCUkVBS05VTFMgKi8KKyNlbmRpZiAvKiBQUk9WWDEgKi8KKworI2lmZGVmIFY3 CisjaWZuZGVmIEJSRUFLTlVMUworI2RlZmluZSBCUkVBS05VTFMKKyNlbmRpZiAvKiBCUkVBS05V TFMgKi8KKyNlbmRpZiAvKiBWNyAqLworCisjaWZkZWYgQlJFQUtOVUxTCitzdGF0aWMgY2hhcgkJ CQkvKiBBIHN0cmluZyBvZiBudWxscyAqLworKmJybnVscyA9ICJcMFwwXDBcMFwwXDBcMFwwXDBc MFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIjsKKyNlbmRpZiAvKiBCUkVBS05VTFMg Ki8KKworI2lmZGVmIENLX1BPU0lYX1NJRwkJCS8qIExvbmdqdW1wIGJ1ZmZlcnMgKi8KK3N0YXRp YyBzaWdqbXBfYnVmIHNqYnVmOwkJLyogUE9TSVggc2lnbmFsIGhhbmRsaW5nICovCisjZWxzZQor c3RhdGljIGptcF9idWYgc2pidWY7CisjZW5kaWYgLyogQ0tfUE9TSVhfU0lHICovCisKKyNpZmRl ZiBWNworc3RhdGljIGptcF9idWYgampidWY7CisjZW5kaWYgLyogVjcgKi8KKworLyogc3RhdGlj ICovCQkJCS8qIChOb3Qgc3RhdGljIGFueSBtb3JlKSAqLworaW50IHR0eWZkID0gLTE7CQkJCS8q IFRUWSBmaWxlIGRlc2NyaXB0b3IgKi8KKworaW50IHR0cGlwZSA9IDA7CQkJCS8qIE5FVENNRDog VXNlIHBpcGUgaW5zdGVhZCBvZiB0dHlmZCAqLworaW50IHR0cHR5ICA9IDA7ICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIE5FVFBUWTogVXNlIHB0eSBpbnN0ZWFkIG9mIHR0ZnlkICovCisKKyNp ZmRlZiBORVRQVFkJCQkJLyogVGhlc2UgYXJlIGluIGNrdXB0eS5jICovCitleHRlcm4gUElEX1Qg cHR5X2ZvcmtfcGlkOworZXh0ZXJuIGludCBwdHlfbWFzdGVyX2ZkLCBwdHlfc2xhdmVfZmQ7Cisj ZW5kaWYJLyogTkVUUFRZICovCisKKyNpZmRlZiBORVRDTUQKKyNpZmRlZiBORVRDT05OCitzdGF0 aWMgaW50IHBpcGUwWzJdLCBwaXBlMVsyXTsJCS8qIFBpcGVzIGZvciBuZXQgaS9vICovCisjZW5k aWYgLyogTkVUQ09OTiAqLworc3RhdGljIFBJRF9UIHR0cGlkID0gMDsJCQkvKiBQcm9jZXNzIElE IGZvciBmb3JrICovCitzdGF0aWMgaW50IGZkaW4sIGZkb3V0OwkJCS8qIEZpbGUgZGVzY3JpcHRv cnMgZm9yIHBpcGUgKi8KK3N0YXRpYyBGSUxFICogdHRvdXQgPSBOVUxMOwkJLyogRmlsZSBwb2lu dGVyIGZvciBvdXRwdXQgcGlwZSAqLworI2lmZGVmIERDTEZET1BFTgorLyogZmRvcGVuKCkgbmVl ZHMgZGVjbGFyaW5nIGJlY2F1c2UgaXQncyBub3QgZGVjbGFyZWQgaW4gPHN0ZGlvLmg+ICovCitf UFJPVE9UWVAoIEZJTEUgKiBmZG9wZW4sIChpbnQsIGNoYXIgKikgKTsKKyNlbmRpZiAvKiBEQ0xG RE9QRU4gKi8KKyNlbmRpZiAvKiBORVRDTUQgKi8KKworZXh0ZXJuIGludCBwZXhpdHN0YXQsIHF1 aWV0OworCisjaWZkZWYgUGxhbjkKK2ludCB0dHljdGxmZCAgPSAtMTsgICAvKiBUVFkgY29udHJv bCBjaGFubmVsIC0gV2hhdD8gVU5JWCBkb2Vzbid0IGhhdmUgb25lPyAqLworaW50IGNvbnNjdGxm ZCA9IC0xOwkJCS8qIENvbnNvbGUgY29udHJvbCBjaGFubmVsICovCitpbnQgbm9pc2VmZCA9IC0x OwkJCS8qIHRvbmUgY2hhbm5lbCAqLworc3RhdGljIGludCB0dHlsYXN0c3BlZWQgPSAtMTsJCS8q IFNvIHdlIGNhbiBsaWUgYWJvdXQgdGhlIHNwZWVkICovCisjZW5kaWYgLyogUGxhbjkgKi8KKwor aW50IHRlbG5ldGZkID0gMDsJCQkvKiBGaWxlIGRlc2NyaXB0b3IgaXMgZm9yIHRlbG5ldCAqLwor I2lmZGVmIE5FVENPTk4KK2ludCB4MjVmZCA9IDA7CQkJCS8qIEZpbGUgZGVzY3JpcHRvciBpcyBm b3IgWC4yNSAqLworI2VuZGlmIC8qIE5FVENPTk4gKi8KKworY2hhciBsb2NrcGlkWzE2XSA9IHsg J1wwJywgJ1wwJyB9OwkvKiBQSUQgc3RvcmVkIGluIGxvY2tmaWxlLCBhcyBzdHJpbmcgKi8KKwor c3RhdGljIGludCBsa2YgPSAwLCAgICAgICAgICAgICAgICAgICAgIC8qIExpbmUgbG9jayBmbGFn ICovCisgICAgY2dtZiA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRmxhZyB0aGF0 IGNvbnNvbGUgbW9kZXMgc2F2ZWQgKi8KKyAgICB4bG9jYWwgPSAwLCAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBGbGFnIGZvciB0dHkgbG9jYWwgb3IgcmVtb3RlICovCisgICAgY3VyY2FyciA9 IDA7CQkJLyogQ2FycmllciBtb2RlOiByZXF1aXJlL2lnbm9yZS4gKi8KKworc3RhdGljIGludCBu ZXRjb25uID0gMDsJCQkvKiAxIGlmIG5ldHdvcmsgY29ubmVjdGlvbiBhY3RpdmUgKi8KKworc3Rh dGljIGNoYXIgZXNjY2hyOyAgICAgICAgICAgICAgICAgICAgIC8qIEVzY2FwZSBvciBhdHRuIGNo YXJhY3RlciAqLworCisjaWZkZWYgQ0tfU0NPMzJWNAorI2luY2x1ZGUgPHN5cy90aW1lLmg+Cisj ZW5kaWYgLyogQ0tfU0NPMzJWNCAqLworCisjaWZkZWYgSEFWRV9UVgorICAgIHN0YXRpYyBzdHJ1 Y3QgdGltZXZhbCB0djsJCS8qIEZvciBnZXR0aW5nIHRpbWUsIGZyb20gc3lzL3RpbWUuaCAqLwor I2VuZGlmIC8qIEhBVkVfVFYgKi8KKyNpZmRlZiBIQVZFX1RaCisgICAgc3RhdGljIHN0cnVjdCB0 aW1lem9uZSB0ejsKKyNlbmRpZiAvKiBIQVZFX1RaICovCisKKyNpZmRlZiBPU0YKKyAgICBzdGF0 aWMgc3RydWN0IHRpbWViIGZ0cDsgICAgICAgICAgICAvKiBBbmQgZnJvbSBzeXMvdGltZWIuaCAq LworI2VuZGlmIC8qIE9TRiAqLworCisjaWZkZWYgQlNEMjkKKyAgICBzdGF0aWMgbG9uZyB4Y2xv Y2s7CQkJLyogRm9yIGdldHRpbmcgdGltZSBmcm9tIHN5cy90aW1lLmggKi8KKyAgICBzdGF0aWMg c3RydWN0IHRpbWViIGZ0cDsgICAgICAgICAgICAvKiBBbmQgZnJvbSBzeXMvdGltZWIuaCAqLwor I2VuZGlmIC8qIEJTRDI5ICovCisKKyNpZmRlZiBCU0Q0MQorICAgIHN0YXRpYyBsb25nIHhjbG9j azsJCQkvKiBGb3IgZ2V0dGluZyB0aW1lIGZyb20gc3lzL3RpbWUuaCAqLworICAgIHN0YXRpYyBz dHJ1Y3QgdGltZWIgZnRwOyAgICAgICAgICAgIC8qIEFuZCBmcm9tIHN5cy90aW1lYi5oICovCisj ZW5kaWYgLyogQlNENDEgKi8KKworI2lmZGVmIEJFTExWMTAKKyAgICBzdGF0aWMgbG9uZyB4Y2xv Y2s7CQkJLyogRm9yIGdldHRpbmcgdGltZSBmcm9tIHN5cy90aW1lLmggKi8KKyAgICBzdGF0aWMg c3RydWN0IHRpbWViIGZ0cDsgICAgICAgICAgICAvKiBBbmQgZnJvbSBzeXMvdGltZWIuaCAqLwor I2VuZGlmIC8qIEJFTExWMTAgKi8KKworI2lmZGVmIEZUMjEKKyAgICBzdGF0aWMgbG9uZyB4Y2xv Y2s7CQkJLyogRm9yIGdldHRpbmcgdGltZSBmcm9tIHN5cy90aW1lLmggKi8KKyAgICBzdGF0aWMg c3RydWN0IHRpbWViIGZ0cDsgICAgICAgICAgICAvKiBBbmQgZnJvbSBzeXMvdGltZWIuaCAqLwor I2VuZGlmIC8qIEZUMjEgKi8KKworI2lmZGVmIFRPV0VSMQorICAgIHN0YXRpYyBsb25nIHhjbG9j azsJCQkvKiBGb3IgZ2V0dGluZyB0aW1lIGZyb20gc3lzL3RpbWUuaCAqLworICAgIHN0YXRpYyBz dHJ1Y3QgdGltZWIgZnRwOwkJLyogQW5kIGZyb20gc3lzL3RpbWViLmggKi8KKyNlbmRpZiAvKiBU T1dFUjEgKi8KKworI2lmZGVmIENPSEVSRU5UCisgICAgc3RhdGljIGxvbmcgeGNsb2NrOwkJCS8q IEZvciBnZXR0aW5nIHRpbWUgZnJvbSBzeXMvdGltZS5oICovCisgICAgc3RhdGljIHN0cnVjdCB0 aW1lYiBmdHA7CQkvKiBBbmQgZnJvbSBzeXMvdGltZWIuaCAqLworI2VuZGlmIC8qIENPSEVSRU5U ICovCisKKyNpZmRlZiBWNworICAgIHN0YXRpYyBsb25nIHhjbG9jazsKKyNlbmRpZiAvKiBWNyAq LworCisvKiBzZ3R0eS90ZXJtaW8gaW5mb3JtYXRpb24uLi4gKi8KKworI2lmZGVmIEJTRDQ0T1JQ T1NJWAkJCS8qIFBPU0lYIG9yIEJTRDQ0ICovCisgIHN0YXRpYyBzdHJ1Y3QgdGVybWlvcworICAg IHR0b2xkLCB0dHJhdywgdHR0dnQsIHR0Y3VyLAorICAgIGNjb2xkLCBjY3JhdywgY2NjYnJrOwor I2Vsc2UJCQkJCS8qIEJTRCwgVjcsIGV0YyAqLworCisjaWZkZWYgQ09IRVJFTlQJCQkJLyogSGFj ayBhbGVydC4uLiAqLworI2RlZmluZSBBVFRTVgorI2VuZGlmIC8qIENPSEVSRU5UICovCisKKyNp ZmRlZiBBVFRTVgorICBzdGF0aWMgc3RydWN0IHRlcm1pbyB0dG9sZCA9IHswfTsJLyogSW5pdCdk IGZvciB3b3JkIGFsaWdubWVudCwgKi8KKyAgc3RhdGljIHN0cnVjdCB0ZXJtaW8gdHRyYXcgPSB7 MH07CS8qIHdoaWNoIGlzIGltcG9ydGFudCBmb3Igc29tZSAqLworICBzdGF0aWMgc3RydWN0IHRl cm1pbyB0dHR2dCA9IHswfTsJLyogc3lzdGVtcywgbGlrZSBaaWxvZy4uLiAqLworICBzdGF0aWMg c3RydWN0IHRlcm1pbyB0dGN1ciA9IHswfTsKKyAgc3RhdGljIHN0cnVjdCB0ZXJtaW8gY2NvbGQg PSB7MH07CisgIHN0YXRpYyBzdHJ1Y3QgdGVybWlvIGNjcmF3ID0gezB9OworICBzdGF0aWMgc3Ry dWN0IHRlcm1pbyBjY2NicmsgPSB7MH07CisjZWxzZQorICBzdGF0aWMgc3RydWN0IHNndHR5YiAg ICAgICAgICAgICAgICAgIC8qIHNndHR5IGluZm8uLi4gKi8KKyAgICB0dG9sZCwgdHRyYXcsIHR0 dHZ0LCB0dGN1ciwgCS8qIGZvciBjb21tdW5pY2F0aW9uIGxpbmUgKi8KKyAgICBjY29sZCwgY2Ny YXcsIGNjY2JyazsJCS8qIGFuZCBmb3IgY29uc29sZSAqLworI2lmZGVmIEJFTExWMTAKKyAgc3Rh dGljIHN0cnVjdCB0dHlkZXZiCQkJLyogRGV2aWNlIGluZm8uLi4gKi8KKyAgICB0ZG9sZCwgdGRj dXI7CQkJLyogZm9yIGNvbW11bmljYXRpb24gZGV2aWNlICovCisjZW5kaWYgLyogQkVMTFYxMCAq LworI2lmZGVmIFRJT0NHRVRDCisgIHN0YXRpYyBzdHJ1Y3QgdGNoYXJzIHRjaG9sZCwgdGNobm9p OworCisgIHN0YXRpYyBpbnQgdGNoYXJmOworI2VuZGlmIC8qIFRJT0NHRVRDICovCisjaWZkZWYg VElPQ0dMVEMKKyAgc3RhdGljIHN0cnVjdCBsdGNoYXJzIGx0Y2hvbGQsIGx0Y2hub2k7CisgIHN0 YXRpYyBpbnQgbHRjaGFyZjsKKyNlbmRpZiAvKiBUSU9DR0xUQyAqLworICBpbnQgbG1vZGVmID0g MDsJCQkvKiBMb2NhbCBtb2RlcyAqLworICBpbnQgbG1vZGUgPSAwOworI2VuZGlmIC8qIEFUVFNW ICovCisjZW5kaWYgLyogQlNENDRPUlBPU0lYICovCisKKyNpZmRlZiBDT01NRU5UCisvKiBJdCBw aWNrcyB1cCB0aGUgc3BlZWRzIGJ1dCB0aGV5IGRvbid0IHdvcmsgKi8KKyNpZmRlZiBVTklYV0FS RQkJCQkvKiBGb3IgaGlnaGVyIHNlcmlhbCBzcGVlZHMgKi8KKyNpZmRlZiBVVzcJCQkJLyogaW4g VW5peHdhcmUgNy4wICovCisjaW5jbHVkZSA8c3lzL2FzeWMuaD4JCQkvKiBUaGlzIHBpY2tzIHVw IDU3NjAwIGFuZCAxMTUyMDAgKi8KKyNlbmRpZiAvKiBVVzcgKi8KKyNlbmRpZiAvKiBVTklYV0FS RSAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKworI2lmZGVmIFBST1ZYMQorICBzdGF0aWMgc3Ry dWN0IHNndHR5YiB0dGJ1ZjsKKyNlbmRpZiAvKiBQUk9WWDEgKi8KKworI2lmZGVmIHVsdHJpeAor LyogZG8gd2UgcmVhbGx5IG5lZWQgdGhpcz8gKi8KKyAgc3RhdGljIHN0cnVjdCBzZ3R0eWIgdmFu aWxsYTsKKyNlbmRpZiAvKiB1bHRyaXggKi8KKworI2lmZGVmIEFUVDczMDAKK3N0YXRpYyBpbnQg YXR0bW9kZW0gPSAwOyAgICAgICAgICAgICAgICAvKiBBVFQ3MzAwIGludGVybmFsLW1vZGVtIHN0 YXR1cyAqLworc3RydWN0IHVwZGF0YSBkaWFsZXIgPSB7MH07CQkvKiBDb25kaXRpb24gZGlhbGVy IGZvciBkYXRhIGNhbGwgKi8KKyNlbmRpZiAvKiBBVFQ3MzAwICovCisKKyNpZm5kZWYgTk9VVUNQ CisjZGVmaW5lIEZMRk5BTUwgMTI4CisjaWZuZGVmIFVTRVRUWUxPQ0sKKyNpZmRlZiBSVEFJWAor Y2hhciBsa2ZsZm5bRkxGTkFNTF0gPSB7ICdcMCcsICdcMCcgfTsJLyogYW5kIHBvc3NpYmxlIGxp bmsgdG8gaXQgKi8KKyNlbmRpZiAvKiBSVEFJWCAqLworY2hhciBsb2NrMltGTEZOQU1MXSA9ICB7 ICdcMCcsICdcMCcgfTsJLyogTmFtZSBvZiBzZWNvbmQgbG9ja2ZpbGUgKi8KKyNlbmRpZiAvKiBV U0VUVFlMT0NLICovCisjZWxzZQorI2RlZmluZSBGTEZOQU1MIDcKKyNlbmRpZiAvKiBOT1VVQ1Ag Ki8KK2NoYXIgZmxmbmFtW0ZMRk5BTUwrMV0gPSB7ICdcMCcsICdcMCcgfTsgLyogVVVDUCBsb2Nr IGZpbGUgcGF0aCBuYW1lICovCisKK2ludCBoYXNsb2NrID0gMDsJCQkvKiA9MSBpZiB0aGlzIGtl cm1pdCBsb2NrZWQgdXVjcCAqLworCisjaWZuZGVmIE9YT1MKKyNpZmRlZiBTVk9SUE9TSVgKK3N0 YXRpYyBpbnQgY29uZXNjID0gMDsgICAgICAgICAgICAgICAgICAvKiBzZXQgdG8gMSBpZiBlc2Mg Y2hhciAoXlwpIHR5cGVkICovCisjZWxzZQorI2lmZGVmIFY3CitzdGF0aWMgaW50IGNvbmVzYyA9 IDA7CisjZWxzZQorI2lmZGVmIEM3MAorc3RhdGljIGludCBjb25lc2MgPSAwOworI2VuZGlmIC8q IEM3MCAqLworI2VuZGlmIC8qIFY3ICovCisjZW5kaWYgLyogU1ZPUlBPU0lYICovCisjZW5kaWYg LyogT1hPUyAqLworCisvKiBMb2NhbCBjb3B5IG9mIGNvbW0gZGV2aWNlIG5hbWUgb3IgbmV0d29y ayBob3N0ICovCitzdGF0aWMgY2hhciB0dG5tc3ZbREVWTkFNTEVOKzFdID0geyAnXDAnLCAnXDAn IH07CisjaWZkZWYgVVNFVFRZTE9DSworc3RhdGljIGNoYXIgbG9ja25hbWVbREVWTkFNTEVOKzFd OwkvKiBEaXR0bywgdGhlIHBhcnQgYWZ0ZXIgIi9kZXYvIi4gKi8KKyNlbmRpZiAvKiBVU0VUVFlM T0NLICovCisKKyNpZmRlZiBhZWdpcworc3RhdGljIHN0YXR1c18kdCBzdDsgICAgICAgICAgICAg ICAgICAgIC8qIGVycm9yIHN0YXR1cyByZXR1cm4gdmFsdWUgKi8KK3N0YXRpYyBzaG9ydCBjb25j cnAgPSAwOyAgICAgICAgICAgICAgICAvKiB0cnVlIGlmIGNvbnNvbGUgaXMgQ1JQIHBhZCAqLwor c3RhdGljIHVpZF8kdCB0dHl1aWQ7ICAgICAgICAgICAgICAgICAgIC8qIHR0eSB0eXBlIHVpZCAq Lworc3RhdGljIHVpZF8kdCBjb251aWQ7ICAgICAgICAgICAgICAgICAgIC8qIHN0ZG91dCB0eXBl IHVpZCAqLworCisvKiBBUE9MTE8gQWVnaXMgbWFpbigpCisgKiBlc3RhYmxpc2ggYWNsIHVzYWdl IGFuZCBjbGVhbnVwIGhhbmRsaW5nCisgKiAgICB0aGlzIG1ha2VzIHN1cmUgdGhhdCBDUlAgcGFk cworICogICAgZ2V0IHJlc3RvcmVkIHRvIGEgdXNhYmxlIG1vZGUKKyAqLworbWFpbihhcmdjLGFy Z3YpIGludCBhcmdjOyBjaGFyICoqYXJndjsgeworICAgICAgICBzdGF0dXNfJHQgc3RhdHVzOwor ICAgICAgICBwZm1fJGNsZWFudXBfcmVjIGRpcnR5OworCisgICAgICAgIFBJRF9UIHBpZCA9IGdl dHBpZCgpOworCisgICAgICAgIC8qIGFjbCB1c2FnZSBhY2NvcmRpbmcgdG8gaW52b2tpbmcgZW52 aXJvbm1lbnQgKi8KKyAgICAgICAgZGVmYXVsdF9hY2woVVNFX0RFRkVOVik7CisKKyAgICAgICAg LyogZXN0YWJsaXNoIGEgY2xlYW51cCBjb250aW51YXRpb24gKi8KKyAgICAgICAgc3RhdHVzID0g cGZtXyRjbGVhbnVwKGRpcnR5KTsKKyAgICAgICAgaWYgKHN0YXR1cy5hbGwgIT0gcGZtXyRjbGVh bnVwX3NldCkgeworICAgICAgICAgICAgICAgIC8qIG9ubHkgaGFuZGxlIGZhdWx0cyBmb3IgdGhl IG9yaWdpbmFsIHByb2Nlc3MgKi8KKyAgICAgICAgICAgICAgICBpZiAocGlkID09IGdldHBpZCgp ICYmIHN0YXR1cy5hbGwgPiBwZ21fJG1heF9zZXZlcml0eSkgeworCQkgICAgLyogYmxldyB1cCBp biBtYWluIHByb2Nlc3MgKi8KKwkJICAgIHN0YXR1c18kdCBxdW87CisJCSAgICBwZm1fJGNsZWFu dXBfcmVjIGNsZWFuOworCisJCSAgICAvKiByZXN0b3JlIHRoZSBjb25zb2xlIGluIGFueSBjYXNl ICovCisJCSAgICBjb25yZXMoKTsKKworCQkgICAgLyogYXR0ZW1wdCBhIGNsZWFuIGV4aXQgKi8K KwkJICAgIGRlYnVnKEYxMDEsICJjbGVhbnVwIGZhdWx0IHN0YXR1cyIsICIiLCBzdGF0dXMuYWxs KTsKKworCQkgICAgLyogZG9leGl0KCksIHRoZW4gc2VuZCBzdGF0dXMgdG8gY29udGludWF0aW9u ICovCisJCSAgICBxdW8gPSBwZm1fJGNsZWFudXAoY2xlYW4pOworCQkgICAgaWYgKHF1by5hbGwg PT0gcGZtXyRjbGVhbnVwX3NldCkKKwkJICAgICAgZG9leGl0KHBnbV8kcHJvZ3JhbV9mYXVsdGVk LC0xKTsKKwkJICAgIGVsc2UgaWYgKHF1by5hbGwgPiBwZ21fJG1heF9zZXZlcml0eSkKKwkJICAg ICAgcGZtXyRzaWduYWwocXVvKTsgLyogYmxldyB1cCBpbiBkb2V4aXQoKSAqLworICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgICAvKiBzZW5kIHRvIHRoZSBvcmlnaW5hbCBjb250aW51 YXRpb24gKi8KKyAgICAgICAgICAgICAgICBwZm1fJHNpZ25hbChzdGF0dXMpOworICAgICAgICAg ICAgICAgIC8qTk9UUkVBQ0hFRCovCisJICAgIH0KKyAgICAgICAgcmV0dXJuKGNrY21haShhcmdj LCBhcmd2KSk7Cit9CisjZW5kaWYgLyogYWVnaXMgKi8KKworLyogQU5TSS1zdHlsZSBwcm90b3R5 cGVzIGZvciBpbnRlcm5hbCBmdW5jdGlvbnMuICovCisvKiBGdW5jdGlvbnMgdXNlZCBvdXRzaWRl IHRoaXMgbW9kdWxlIGFyZSBwcm90b3R5cGVkIGluIGNrY2tlci5oLiAqLworCisjaWZkZWYgYXBv bGxvCitfUFJPVE9UWVAoIFNJR1RZUCB0aW1lcmgsICgpICk7CitfUFJPVE9UWVAoIFNJR1RZUCBj Y3RyYXAsICgpICk7CitfUFJPVE9UWVAoIFNJR1RZUCBlc2N0cnAsICgpICk7CitfUFJPVE9UWVAo IFNJR1RZUCBzaWdfaWduLCAoKSApOworI2Vsc2UKK19QUk9UT1RZUCggU0lHVFlQIHRpbWVyaCwg KGludCkgKTsKK19QUk9UT1RZUCggU0lHVFlQIGNjdHJhcCwgKGludCkgKTsKK19QUk9UT1RZUCgg U0lHVFlQIGVzY3RycCwgKGludCkgKTsKKyNlbmRpZiAvKiBhcG9sbG8gKi8KK19QUk9UT1RZUCgg aW50IGRvX29wZW4sIChjaGFyICopICk7CitfUFJPVE9UWVAoIHN0YXRpYyBpbnQgaW5fY2hrLCAo aW50LCBpbnQpICk7CitfUFJPVE9UWVAoIHN0YXRpYyBpbnQgdHRycGlkLCAoY2hhciAqKSApOwor X1BST1RPVFlQKCBzdGF0aWMgaW50IHR0Y2hrcGlkLCAoY2hhciAqKSApOworX1BST1RPVFlQKCBz dGF0aWMgaW50IHR0bG9jaywgKGNoYXIgKikgKTsKK19QUk9UT1RZUCggc3RhdGljIGludCB0dHVu bGNrLCAodm9pZCkgKTsKK19QUk9UT1RZUCggc3RhdGljIFZPSUQgc2lnY2hsZF9oYW5kbGVyLCAo aW50KSApOworX1BST1RPVFlQKCBpbnQgbXlnZXRidWYsICh2b2lkKSApOworX1BST1RPVFlQKCBp bnQgbXlmaWxsYnVmLCAodm9pZCkgKTsKK19QUk9UT1RZUCggVk9JRCBjb25iZ3QsIChpbnQpICk7 CisjaWZkZWYgQUNVQ05UUkwKK19QUk9UT1RZUCggVk9JRCBhY3VjbnRybCwgKGNoYXIgKiwgY2hh ciAqKSApOworI2VuZGlmIC8qIEFDVUNOVFJMICovCisKKyNpZmRlZiBCU0Q0NE9SUE9TSVgKK19Q Uk9UT1RZUCggaW50IGNhcnJjdGwsIChzdHJ1Y3QgdGVybWlvcyAqLCBpbnQpICk7CisjZWxzZQor I2lmZGVmIEFUVFNWCitfUFJPVE9UWVAoIGludCBjYXJyY3RsLCAoc3RydWN0IHRlcm1pbyAqLCBp bnQpICk7CisjZWxzZQorX1BST1RPVFlQKCBpbnQgY2FycmN0bCwgKHN0cnVjdCBzZ3R0eWIgKiwg aW50KSApOworI2VuZGlmIC8qIEFUVFNWICovCisjZW5kaWYgLyogQlNENDRPUlBPU0lYICovCisK KyNpZmRlZiBBVFQ3MzAwCitfUFJPVE9UWVAoIGludCBhdHRkaWFsLCAoY2hhciAqLCBsb25nLCBj aGFyICopICk7CitfUFJPVE9UWVAoIGludCBvZmZnZXR0eSwgKGNoYXIgKikgKTsKK19QUk9UT1RZ UCggaW50IG9uZ2V0dHksIChjaGFyICopICk7CisjZW5kaWYgLyogQVRUNzMwMCAqLworCisjaWZk ZWYgQkVPU09SQkVCT1gKKyNpZmRlZiBTRUxFQ1QKKyAgICAvKiBCZU9TIGlzIG5vdCBjYXBhYmxl IG9mIHVzaW5nIFNFTEVDVCBvbiBhbnl0aGluZyBidXQgc29ja2V0cyAqLworI3VuZGVmIFNFTEVD VAorI2VuZGlmIC8qIFNFTEVDVCAqLworI2luY2x1ZGUgPGtlcm5lbC9PUy5oPgorLyogI2lmZGVm IEJFX0RSXzcgKi8KK3N0YXRpYyBkb3VibGUgdGltZV9zdGFydGVkID0gMC4wOworc3RydWN0IEFM QVJNX1NUUlVDVCB7CisgICAgdGhyZWFkX2lkIHRocmVhZDsKKyAgICBpbnQgdGltZTsKK307Citz dGF0aWMgdGhyZWFkX2lkIGFsYXJtX3RocmVhZCA9IC0xOworc3RhdGljIHN0cnVjdCBBTEFSTV9T VFJVQ1QgYWxhcm1fc3RydWN0OworX1BST1RPVFlQKCBsb25nIGRvX2FsYXJtLCAodm9pZCAqKSAp OworX1BST1RPVFlQKCB1bnNpZ25lZCBpbnQgYWxhcm0sICh1bnNpZ25lZCBpbnQpICk7CitfUFJP VE9UWVAoIHZvaWQgYWxhcm1fZXhwaXJlZCwgKHZvaWQpICk7CisvKiAjZW5kaWYgKi8gLyogQkVf RFJfNyAqLworI2VuZGlmIC8qIEJFT1NPUkJFQk9YICovCisKKyNpZm5kZWYgeHVuY2hhcgorI2Rl ZmluZSB4dW5jaGFyKGNoKSAoKChjaCkgLSAzMiApICYgMHhGRiApCS8qIENoYXJhY3RlciB0byBu dW1iZXIgKi8KKyNlbmRpZiAvKiB4dW5jaGFyICovCisKKyNpZmRlZiBDS19BTlNJQworc3RhdGlj IGNoYXIgKgoreHhsYXN0KGNoYXIgKnMsIGNoYXIgYykKKyNlbHNlCitzdGF0aWMgY2hhciAqCit4 eGxhc3QocyxjKSBjaGFyICpzOyBjaGFyIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIHh4 bGFzdCAqLyB7CQkvKiAgTGFzdCBvY2N1cnJlbmNlIG9mIGNoYXJhY3RlciBjIGluIHN0cmluZyBz LiAqLworICAgIGludCBpOworICAgIGZvciAoaSA9IChpbnQpc3RybGVuKHMpOyBpID4gMDsgaS0t KQorICAgICAgaWYgKHNbaS0xXSA9PSBjICkgcmV0dXJuKHMgKyAoaSAtIDEpKTsKKyAgICByZXR1 cm4oTlVMTCk7Cit9CisKKy8qIFRpbWVvdXQgaGFuZGxlciBmb3IgY29tbXVuaWNhdGlvbiBsaW5l IGlucHV0IGZ1bmN0aW9ucyAqLworCisvKkFSR1NVU0VEKi8KK1NJR1RZUAordGltZXJoKGZvbykg aW50IGZvbzsgeworICAgIHR0aW1vZmYoKTsKKyNpZmRlZiBCRU9TT1JCRUJPWAorLyogI2lmZGVm IEJFX0RSXzcgKi8KKyAgICBhbGFybV9leHBpcmVkKCk7CisvKiAjZW5kaWYgKi8gLyogQkVfRFJf NyAqLworI2VuZGlmIC8qIEJFT1NPUkJFQk9YICovCisjaWZkZWYgQ0tfUE9TSVhfU0lHCisgICAg c2lnbG9uZ2ptcChzamJ1ZiwxKTsKKyNlbHNlCisgICAgbG9uZ2ptcChzamJ1ZiwxKTsKKyNlbmRp ZiAvKiBDS19QT1NJWF9TSUcgKi8KK30KKworLypBUkdTVVNFRCovCitTSUdUWVAKK3h0aW1lcmgo Zm9vKSBpbnQgZm9vOyB7CQkJLyogTGlrZSB0aW1lcmgoKSBidXQgZG9lcyAqLworI2lmZGVmIEJF T1NPUkJFQk9YCQkJLyogbm90IHJlc2V0IHRoZSB0aW1lciBpdHNlbGYgKi8KKy8qICNpZmRlZiBC RV9EUl83ICovCisgICAgYWxhcm1fZXhwaXJlZCgpOworLyogI2VuZGlmICovIC8qIEJFX0RSXzcg Ki8KKyNlbmRpZiAvKiBCRU9TT1JCRUJPWCAqLworI2lmZGVmIENLX1BPU0lYX1NJRworICAgIHNp Z2xvbmdqbXAoc2pidWYsMSk7CisjZWxzZQorICAgIGxvbmdqbXAoc2pidWYsMSk7CisjZW5kaWYg LyogQ0tfUE9TSVhfU0lHICovCit9CisKKworLyogQ29udHJvbC1DIHRyYXAgZm9yIGNvbW11bmlj YXRpb24gbGluZSBpbnB1dCBmdW5jdGlvbnMgKi8KKworaW50IGNjX2ludDsJCQkJLyogRmxhZyAq LworU0lHVFlQICgqIG9jY3QpKCk7CQkJLyogRm9yIHNhdmluZyBvbGQgU0lHSU5UIGhhbmRsZXIg Ki8KKworLypBUkdTVVNFRCovCitTSUdUWVAKK2NjdHJhcChmb28pIGludCBmb287IHsJCQkvKiBO ZWVkcyBhcmcgZm9yIEFOU0kgQyAqLworICBjY19pbnQgPSAxOwkJCQkvKiBzaWduYWwoKSBwcm90 b3R5cGUuICovCisgIHJldHVybjsKK30KKworLyogIFMgWSBTIEkgTiBJIFQgIC0tICBTeXN0ZW0t ZGVwZW5kZW50IHByb2dyYW0gaW5pdGlhbGl6YXRpb24uICAqLworCisvKgorICogdHRnd3Npeigp IHJldHVybnM6CisgKgkxICAgIHR0X3Jvd3MgYW5kIHR0X2NvbHMgYXJlIGtub3duLCBib3RoIGFs dGVyZWQsIGJvdGggPiAwCisgKgkwICAgIHR0X3Jvd3MgYW5kL29yIHR0X2NvbHMgYXJlIGtub3du LCBib3RoIGFsdGVyZWQsIG9uZSBvciBib3RoIDw9IDAKKyAqCS0xICAgdHRfcm93cyBhbmQgdHRf Y29scyBhcmUgdW5rbm93biBhbmQgdW5hbHRlcmVkCisgKi8KKworZXh0ZXJuIGludCB0dF9yb3dz LCB0dF9jb2xzOworCitzdGF0aWMgaW50Cit4dHRnd3NpeigpIHsKKyAgICBjaGFyICpwOworICAg IGludCByb3dzID0gMCwgY29scyA9IDA7CisgICAgcCA9IGdldGVudigiTElORVMiKTsKKyAgICBk ZWJ1ZyhGMTEwLCJ4dHRnd3NpeiBMSU5FUyIscCwwKTsKKyAgICBpZiAocCkgeworCXJvd3MgPSBh dG9sKHApOworCWlmIChyb3dzID4gMCkgeworCSAgICBwID0gZ2V0ZW52KCJDT0xVTU5TIik7CisJ ICAgIGRlYnVnKEYxMTAsInh0dGd3c2l6IENPTFVNTlMiLHAsMCk7CisJICAgIGlmIChwKSB7CisJ CWNvbHMgPSBhdG9sKHApOworCQlpZiAoY29scyA+IDApIHsKKwkJICAgIHR0X3Jvd3MgPSByb3dz OworCQkgICAgdHRfY29scyA9IGNvbHM7CisJCSAgICByZXR1cm4oMSk7CisJCX0KKwkJcmV0dXJu KDApOworCSAgICB9CisJfQorICAgIH0KKyAgICByZXR1cm4oLTEpOworfQorCisjaWZkZWYgVFRM RUJVRgorVk9JRAorbGVfaW5pdCgpIHsJCQkJLyogTG9jYWxFY2hvSW5pdCgpICovCisgICAgaW50 IGk7CisgICAgZm9yIChpID0gMDsgaSA8IExFQlVGU0laOyBpKyspCisgICAgICBsZV9idWZbaV0g PSAnXDAnOworICAgIGxlX3N0YXJ0ID0gMDsKKyAgICBsZV9lbmQgPSAwOworICAgIGxlX2RhdGEg PSAwOworfQorCitWT0lECitsZV9jbGVhbigpIHsJCQkJLyogTG9jYWxFY2hvQ2xlYW51cCgpICov CisgICAgbGVfaW5pdCgpOworICAgIHJldHVybjsKK30KKworaW50CitsZV9pbmJ1ZigpIHsKKyAg ICBpbnQgcmMgPSAwOworICAgIGlmIChsZV9zdGFydCAhPSBsZV9lbmQpIHsKKwlyYyA9IChsZV9l bmQgLQorCSAgICAgIGxlX3N0YXJ0ICsKKwkgICAgICBMRUJVRlNJWikgJSBMRUJVRlNJWjsKKyAg ICB9CisgICAgZGVidWcoRjExMSwibGVfaW5idWYiLCJjaGFycyB3YWl0aW5nIixyYyk7CisgICAg cmV0dXJuKHJjKTsKK30KKworaW50CisjaWZkZWYgQ0tfQU5TSUMKK2xlX3B1dGNoYXIoQ0hBUiBj aCkKKyNlbHNlCitsZV9wdXRjaGFyKGNoKSBDSEFSIGNoOworI2VuZGlmIC8qIENLX0FOU0lDICov CisvKiBsZV9wdXRjaGFyICovIHsKKyNpZmRlZiBDT01NRU5UCisgICAgLyogSW4gVU5JWCB3ZSBk byBub3QgaGF2ZSBhbm90aGVyIHRocmVhZCB0YWtpbmcgY2hhcnMgb3V0IG9mIHRoZSBidWZmZXIg Ki8KKyAgICB3aGlsZSAoKGxlX3N0YXJ0IC0gbGVfZW5kID09IDEpIHx8CisgICAgICAgICAgICAo bGVfc3RhcnQgPT0gMCAmJiBsZV9lbmQgPT0gTEVCVUZTSVogLSAxKSkgeworCS8qIEJ1ZmZlciBp cyBmdWxsICovCisgICAgICAgIGRlYnVnKEYxMTEsImxlX3B1dGNoYXIiLCJCdWZmZXIgaXMgRnVs bCIsY2gpOworICAgICAgICBSZWxlYXNlTG9jYWxFY2hvTXV0ZXgoKSA7CisgICAgICAgIG1zbGVl cCgyNTApOworICAgICAgICBSZXF1ZXN0TG9jYWxFY2hvTXV0ZXgoIFNFTV9JTkRFRklOSVRFX1dB SVQgKSA7CisgICAgfQorI2Vsc2UKKyAgICBpZiAoKGxlX3N0YXJ0IC0gbGVfZW5kICsgTEVCVUZT SVopJUxFQlVGU0laID09IDEpIHsKKyAgICAgICAgZGVidWcoRjExMCwibGVfcHV0Y2hhciIsImJ1 ZmZlciBpcyBmdWxsIiwwKTsKKyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9CisjZW5kaWYgLyog Q09NTUVOVCAqLworICAgIGxlX2J1ZltsZV9lbmQrK10gPSBjaDsKKyAgICBpZiAobGVfZW5kID09 IExFQlVGU0laKQorICAgICAgbGVfZW5kID0gMDsKKyAgICBsZV9kYXRhID0gMTsKKyAgICByZXR1 cm4oMCk7Cit9CisKK2ludAorI2lmZGVmIENLX0FOU0lDCitsZV9wdXRzKENIQVIgKiBzLCBpbnQg bikKKyNlbHNlCitsZV9wdXRzKHMsbikgQ0hBUiAqIHM7IGludCBuOworI2VuZGlmIC8qIENLX0FO U0lDICovCisvKiBsZV9wdXRzICovIHsKKyAgICBpbnQgcmMgPSAwOworICAgIGludCBpID0gMDsK KyAgICBDSEFSICogcCA9IChDSEFSICopImxlX3B1dHMiOworICAgIGNraGV4ZHVtcChwLHMsbik7 CisgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykKKyAgICAgIHJjID0gbGVfcHV0Y2hhcigoY2hh cilzW2ldKTsKKyAgICBkZWJ1ZyhGMTAxLCJsZV9wdXRzIiwiIixyYyk7CisgICAgcmV0dXJuKHJj KTsKK30KKworaW50CisjaWZkZWYgQ0tfQU5TSUMKK2xlX3B1dHN0cihDSEFSICogcykKKyNlbHNl CitsZV9wdXRzdHIocykgQ0hBUiAqIHM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIGxlX3B1 dHMgKi8geworICAgIENIQVIgKiBwOworICAgIGludCByYyA9IDA7CisgICAgcCA9IChDSEFSICop ImxlX3B1dHN0ciI7CisgICAgY2toZXhkdW1wKHAscywoaW50KXN0cmxlbigoY2hhciAqKXMpKTsK KyAgICBmb3IgKHAgPSBzOyAqcCAmJiAhcmM7IHArKykKKyAgICAgIHJjID0gbGVfcHV0Y2hhcigq cCk7CisgICAgcmV0dXJuKHJjKTsKK30KKworaW50CisjaWZkZWYgQ0tfQU5TSUMKK2xlX2dldGNo YXIoQ0hBUiAqIHBjaCkKKyNlbHNlIC8qIENLX0FOU0lDICovCitsZV9nZXRjaGFyKHBjaCkgQ0hB UiAqIHBjaDsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogbGVfZ2F0Y2hhciAqLyB7CisgICAg aW50IHJjID0gMDsKKyAgICBpZiAobGVfc3RhcnQgIT0gbGVfZW5kKSB7CisgICAgICAgICpwY2gg PSBsZV9idWZbbGVfc3RhcnRdOworICAgICAgICBsZV9idWZbbGVfc3RhcnRdID0gMDsKKyAgICAg ICAgbGVfc3RhcnQrKzsKKworICAgICAgICBpZiAobGVfc3RhcnQgPT0gTEVCVUZTSVopCisgICAg ICAgICAgbGVfc3RhcnQgPSAwOworCisgICAgICAgIGlmIChsZV9zdGFydCA9PSBsZV9lbmQpIHsK KyAgICAgICAgICAgIGxlX2RhdGEgPSAwOworICAgICAgICB9CisgICAgICAgIHJjKys7CisgICAg fSBlbHNlIHsKKyAgICAgICAgKnBjaCA9IDA7CisgICAgfQorICAgIHJldHVybihyYyk7Cit9Cisj ZW5kaWYgLyogVFRMRUJVRiAqLworCisjaWZkZWYgQ09NTUVOVAorLyoKKyAgU29tZSBzeXN0ZW1z IGxpa2UgT1NGLzEgdXNlIFRJT0NHU0laRSBpbnN0ZWFkIG9mIFRJT0NHV0lOU1ouCisgIEJ1dCBh cyBmYXIgYXMgSSBrbm93LCB3aGVuZXZlciBUSU9DR1NJWkUgaXMgZGVmaW5lZCwgaXQgaXMKKyAg ZXF1YXRlZCB0byBUSU9DR1dJTlNaLiAgRm9yIGNhc2VzIHdoZXJlIHRoaXMgaXMgbm90IGRvbmUs IHRyeSB0aGlzOgorKi8KKyNpZm5kZWYgVElPQ0dXSU5TWgorI2lmZGVmIFRJT0NHU0laRQorI2Rl ZmluZSBUSU9DR1dJTlNaIFRJT0NHU0laRQorI2VuZGlmIC8qIFRJT0NHU0laRSAqLworI2VuZGlm IC8qIFRJT0NHV0lOU1ogKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisKK3N0YXRpYyBpbnQgdHRf eHBpeGVsID0gMCwgdHRfeXBpeGVsID0gMDsKKworaW50Cit0dGd3c2l6KCkgeworICAgIGludCB4 ID0gMDsKKyNpZm5kZWYgTk9OQVdTCisjaWZkZWYgUU5YCisvKgorICBOT1RFOiBUSU9DR1dTSVog d29ya3MgaGVyZSB0b28sIGJ1dCBvbmx5IGluIHRoZSAzMi1iaXQgdmVyc2lvbi4KKyAgVGhpcyBj b2RlIHdvcmtzIGZvciBib3RoIHRoZSAxNi0gYW5kIDMyLWJpdCB2ZXJzaW9ucy4KKyovCisgICAg ZXh0ZXJuIGludCBkZXZfc2l6ZShpbnQsIGludCwgaW50LCBpbnQgKiwgaW50ICopOworICAgIGlu dCByLCBjOworCisgICAgaWYgKGRldl9zaXplKDAsIC0xLCAtMSwgJnIsICZjKSA9PSAwKSB7CisJ ZGVidWcoRjEwMSwidHRnd3NpeiBRTlggciIsIiIscik7CisJZGVidWcoRjEwMSwidHRnd3NpeiBR TlggYyIsIiIsYyk7CisJdHRfcm93cyA9IHI7CisJdHRfY29scyA9IGM7CisJcmV0dXJuICgociA+ IDAgJiYgYyA+IDApID8gMSA6IDApOworICAgIH0gZWxzZSByZXR1cm4oeHR0Z3dzaXooKSk7Cisj ZWxzZSAvKiBRTlggKi8KKyNpZmRlZiBUSU9DR1dJTlNaCisKKy8qIE5vdGUsIHRoaXMgd2FzIE1f VU5JWCwgY2hhbmdlZCB0byBYRU5JWCB0byBhbGxvdyBjcm9zcyBjb21waWxhdGlvbi4uLiAqLwor I2lmZGVmIFhFTklYCQkJCS8qIFNDTyBVTklYIDMuMnY0LjAgKi8KKyNpbmNsdWRlIDxzeXMvc3Ry ZWFtLmg+CQkJLyogdHlwZWRlZiBtYmxrX3QgbmVlZGVkIGJ5IHB0ZW0uaCAqLworI2luY2x1ZGUg PHN5cy9wdGVtLmg+CQkJLyogZm9yIHR0Z3dzaXooKSAqLworI2VuZGlmIC8qIFhFTklYICovCisK KyNpZmRlZiBJMzg2SVgJCQkJLyogRGl0dG8gZm9yIEludGVyYWN0aXZlICovCisjaW5jbHVkZSA8 c3lzL3N0cmVhbS5oPgorI2luY2x1ZGUgPHN5cy9wdGVtLmg+CisjZW5kaWYgLyogSTM4NklYICov CisKKy8qIE5vdGUsIHRoZSBhYm92ZSBtaWdodCBiZSBuZWVkZWQgZm9yIHNvbWUgb3RoZXIgb2xk ZXIgU1ZSMyBJbnRlbCBtYWtlcy4uLiAqLworCisgICAgc3RydWN0IHdpbnNpemUgdzsKKyAgICB0 dF94cGl4ZWwgPSAwOworICAgIHR0X3lwaXhlbCA9IDA7CisKKyNpZmRlZiBJS1NECisgICAgaWYg KGluc2VydmVyKQorICAgICAgcmV0dXJuKHh0dGd3c2l6KCkpOworI2VuZGlmIC8qIElLU0QgKi8K KyAgICB4ID0gaW9jdGwoMCwgKGludClUSU9DR1dJTlNaLCAoY2hhciAqKSZ3KTsKKyAgICBkZWJ1 ZyhGMTAxLCJ0dGd3c2l6IFRJT0NHV0lOU1oiLCIiLHgpOworICAgIGlmICh4IDwgMCkgeworCXJl dHVybih4dHRnd3NpeigpKTsKKyAgICB9IGVsc2UgaWYgKHcud3Nfcm93ID4gMCAmJiB3LndzX2Nv bCA+IDApIHsKKwl0dF9yb3dzID0gdy53c19yb3c7CisJdHRfY29scyA9IHcud3NfY29sOworCXR0 X3hwaXhlbCA9IHcud3NfeHBpeGVsOworCXR0X3lwaXhlbCA9IHcud3NfeXBpeGVsOworCWRlYnVn KEYxMDEsInR0Z3dzaXogdHRfcm93cyIsIiIsdHRfcm93cyk7CisJZGVidWcoRjEwMSwidHRnd3Np eiB0dF9jb2xzIiwiIix0dF9jb2xzKTsKKwlyZXR1cm4oMSk7CisgICAgfSBlbHNlIHsKKwlkZWJ1 ZyhGMTAwLCJ0dGd3c2l6IFRJT0NHV0lOU1ogMDAiLCIiLDApOworCXJldHVybih4dHRnd3Npeigp KTsKKyAgICB9CisjZWxzZQorICAgIHJldHVybih4dHRnd3NpeigpKTsKKyNlbmRpZiAvKiBUSU9D R1dJTlNaICovCisjZW5kaWYgLyogUU5YICovCisjZW5kaWYgLyogTk9OQVdTICovCit9CisKKwor I2lmZGVmIFJMT0dDT0RFCitfUFJPVE9UWVAoIGludCBybG9nX25hd3MsICh2b2lkKSApOworI2Vu ZGlmCS8qIFJMT0dDT0RFICovCisKKyNpZm5kZWYgTk9TSUdXSU5DSAorI2lmZGVmIFNJR1dJTkNI CitTSUdUWVAKK3dpbmNoaChmb28pIGludCBmb287IHsJCQkvKiBTSUdXSU5DSCBoYW5kbGVyICov CisgICAgaW50IHggPSAwOworI2lmZGVmIENLX1RUWUZECisjaWZuZGVmIFZNUworICAgIGV4dGVy biBpbnQgdHR5ZmQ7CisjZW5kaWYgLyogVk1TICovCisjZW5kaWYgLyogQ0tfVFRZRkQgKi8KKyAg ICBleHRlcm4gaW50IHR0X3Jvd3MsIHR0X2NvbHMsIGNtZF9yb3dzLCBjbWRfY29sczsKKyNpZmRl ZiBERUJVRworICAgIGlmIChkZWJsb2cpIHsKKwlkZWJ1ZyhGMTAwLCIqKioqKioqKioqKioqKioi LCIiLDApOworCWRlYnVnKEYxMDAsIlNJR1dJTkNIIGNhdWdodCIsIiIsMCk7CisJZGVidWcoRjEw MCwiKioqKioqKioqKioqKioqIiwiIiwwKTsKKyNpZmRlZiBORVRQVFkKKwlkZWJ1ZyhGMTAxLCJT SUdXSU5DSCBwdHlfZm9ya19waWQiLCIiLHB0eV9mb3JrX3BpZCk7CisjZW5kaWYgLyogTkVUUFRZ ICovCisgICAgfQorI2VuZGlmIC8qIERFVUIgKi8KKyAgICBzaWduYWwoU0lHV0lOQ0gsd2luY2ho KTsgICAgICAgICAgICAvKiBSZS1hcm0gdGhlIHNpZ25hbCAqLworICAgIHggPSB0dGd3c2l6KCk7 ICAgICAgICAgICAgICAgICAgICAgIC8qIEdldCBuZXcgd2luZG93IHNpemUgKi8KKyAgICBjbWRf cm93cyA9IHR0X3Jvd3M7CQkJLyogQWRqdXN0IGNvbW1hbmQgc2NyZWVuIHRvbyAqLworICAgIGNt ZF9jb2xzID0gdHRfY29sczsKKworI2lmZGVmIENLX1RUWUZECisgICAgaWYJCQkJCS8qIElmIHdl IGRvbid0IGhhdmUgYSBjb25uZWN0aW9uICovCisjaWZkZWYgVk1TCQkJCS8qIHdlJ3JlIGRvbmUu ICovCisgICAgICAodm1zdHR5ZmQoKSA9PSAtMSkKKyNlbHNlCisgICAgICAodHR5ZmQgPT0gLTEp CisjZW5kaWYgLyogVk1TICovCisjZWxzZQorICAgICAgKCFsb2NhbCkKKyNlbmRpZiAvKiBDS19U VFlGRCAqLworICAgICAgICByZXR1cm47CisKKyNpZmRlZiBORVRQVFkKKyAgICBpZiAocHR5X2Zv cmtfcGlkID4gLTEpIHsJCS8qICJzZXQgaG9zdCIgdG8gYSBQVFk/ICovCisJaW50IHg7CisKKyNp ZmRlZiBUSU9DU1dJTlNaCisJc3RydWN0IHdpbnNpemUgdzsJCS8qIFJlc2l6ZSB0aGUgUFRZICov CisJZXJybm8gPSAwOworCXcud3NfY29sID0gdHRfY29sczsKKwl3LndzX3JvdyA9IHR0X3Jvd3M7 CisJdy53c194cGl4ZWwgPSB0dF94cGl4ZWw7CisJdy53c195cGl4ZWwgPSB0dF95cGl4ZWw7CisJ eCA9IGlvY3RsKHR0eWZkLFRJT0NTV0lOU1osJncpOworCWRlYnVnKEYxMDEsIndpbmNoaCBUSU9D U1dJTlNaIiwiIix4KTsKKwlkZWJ1ZyhGMTAxLCJ3aW5jaGggVElPQ1NXSU5TWiBlcnJubyIsIiIs ZXJybm8pOworI2VuZGlmIC8qIFRJT0NTV0lOU1ogKi8KKworCWVycm5vID0gMDsKKwl4ID0ga2ls bChwdHlfZm9ya19waWQsU0lHV0lOQ0gpOworCWRlYnVnKEYxMDEsIndpbmNoaCBraWxsIiwiIix4 KTsKKwlkZWJ1ZyhGMTAxLCJ3aW5jaGgga2lsbCBlcnJubyIsIiIsZXJybm8pOworICAgIH0KKyNl bmRpZiAvKiBORVRQVFkgKi8KKworLyoKKyAgVGhpcyBzaG91bGQgYmUgT0suICBJdCBtaWdodCBz ZWVtIHRoYXQgc2VuZGluZyB0aGlzIGZyb20KKyAgaW50ZXJydXB0IGxldmVsIGNvdWxkIGludGVy ZmVyZSB3aXRoIGFub3RoZXIgVEVMTkVUIElBQyBzdHJpbmcKKyAgdGhhdCB3YXMgaW4gdGhlIHBy b2Nlc3Mgb2YgYmVpbmcgc2VudC4gIEJ1dCB3ZSBhbHdheXMgc2VuZAorICBURUxORVQgc3RyaW5n cyB3aXRoIGEgc2luZ2xlIHdyaXRlKCksIHdoaWNoIHNob3VsZCBwcmV2ZW50IG1peHVwcy4KKyAg YmxhaF9zbmF3cygpIHNob3VsZCBwcm90ZWN0IHRoZW1zZWx2ZXMgZnJvbSBiZWluZyBjYWxsZWQg b24gdGhlCisgIHdyb25nIGtpbmQgb2YgY29ubmVjdGlvbi4KKyovCisjaWZkZWYgVENQU09DS0VU CisjaWZuZGVmIE5PVFRHV1NJWgorICAgIGlmICh4ID4gMCAmJiB0dF9yb3dzID4gMCAmJiB0dF9j b2xzID4gMCkgeworICAgICAgICB0bl9zbmF3cygpOworI2lmZGVmIFJMT0dDT0RFCisgICAgICAg IHJsb2dfbmF3cygpOworI2VuZGlmIC8qIFJMT0dDT0RFICovCisgICAgfQorI2VuZGlmIC8qIE5P VFRHV1NJWiAqLworI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLworICAgIFNJR1JFVFVSTjsKK30KKyNl bmRpZiAvKiBTSUdXSU5DSCAqLworI2VuZGlmIC8qIE5PU0lHV0lOQ0ggKi8KKworU0lHVFlQCitz aWdodXAoZm9vKSBpbnQgZm9vOyB7CQkJLyogU0lHSFVQIGhhbmRsZXIgKi8KKyAgICBiYWNrZ3Jk ID0gMTsKKyAgICBkZWJ1ZyhGMTAwLCIqKioqKioqKioqKioqKioiLCIiLDApOworICAgIGRlYnVn KEYxMDAsIlNJR0hVUCByZWNlaXZlZCIsIiIsMCk7CisgICAgZGVidWcoRjEwMCwiKioqKioqKioq KioqKioqIiwiIiwwKTsKKyAgICBkb2V4aXQoQkFEX0VYSVQsLTEpOworICAgIC8qTk9UUkVBQ0hF RCovCisgICAgU0lHUkVUVVJOOwkJCQkvKiBTaHV0IHBpY2t5IGNvbXBpbGVycyB1cC4uLiAqLwor fQorCisjaWZkZWYgQ0tfU0NPMzJWNAorLyogRXhpc3RzIGJ1dCB0aGVyZSBpcyBubyBwcm90b3R5 cGUgaW4gdGhlIGhlYWRlciBmaWxlcyAqLworX1BST1RPVFlQKCBjaGFyICogdHR5bmFtZSwgKGlu dCkgKTsKKyNlbHNlCisjaWZkZWYgU1Y2OFIzVjYKK19QUk9UT1RZUCggY2hhciAqIHR0eW5hbWUs IChpbnQpICk7CisjZWxzZQorI2lmZGVmIHVsdHJpeAorX1BST1RPVFlQKCBjaGFyICogdHR5bmFt ZSwgKGludCkgKTsKKyNlbHNlCisjaWZkZWYgSFBVWDYKK19QUk9UT1RZUCggY2hhciAqIHR0eW5h bWUsIChpbnQpICk7CisjZWxzZQorI2lmZGVmIEhQVVg1CitfUFJPVE9UWVAoIGNoYXIgKiB0dHlu YW1lLCAoaW50KSApOworI2Vsc2UKKyNpZmRlZiBQUzJBSVgxMAorX1BST1RPVFlQKCBjaGFyICog dHR5bmFtZSwgKGludCkgKTsKKyNlbHNlCisjaWZkZWYgQlNENDIKK19QUk9UT1RZUCggY2hhciAq IHR0eW5hbWUsIChpbnQpICk7CisjZW5kaWYgLyogQlNENDIgKi8KKyNlbmRpZiAvKiBQUzJBSVgx MCAqLworI2VuZGlmIC8qIEhQVVg1ICovCisjZW5kaWYgLyogSFBVWDYgKi8KKyNlbmRpZiAvKiB1 bHRyaXggKi8KKyNlbmRpZiAvKiBTVjY4UjNWNiAqLworI2VuZGlmIC8qIENLX1NDTzMyVjQgKi8K KworI2lmbmRlZiBTSUdVU1IxCQkJCS8qIFVzZXItZGVmaW5lZCBzaWduYWxzICovCisjZGVmaW5l IFNJR1VTUjEgMzAKKyNlbmRpZiAvKiBTSUdVU1IxICovCisKKyNpZm5kZWYgU0lHVVNSMgorI2Rl ZmluZSBTSUdVU1IyIDMxCisjZW5kaWYgLyogU0lHVVNSMiAqLworCisvKgorICBpZ25vcnNpZ3Mo KSBzZXRzIGNlcnRhaW4gc2lnbmFscyB0byBTSUdfSUdOLiAgQnV0IHdoZW4gYSBzaWduYWwgaXMK KyAgaWdub3JlZCwgaXQgcmVtYWlucyBpZ25vcmVkIGFjcm9zcyBleGVjKCksIHNvIHdlIGhhdmUg dG8gcmVzdG9yZSB0aGVzZQorICBzaWduYWxzIGJlZm9yZSBleGVjKCksIHdoaWNoIGlzIHRoZSBw dXJwb3NlIG9mIHJlc3RvcnNpZ3MoKS4KKyovCitzdGF0aWMgVk9JRAoraWdub3JzaWdzKCkgewkJ CQkvKiBJZ25vcmUgdGhlc2Ugc2lnbmFscyAqLworICAgIHNhdnF1aXQgPSBzaWduYWwoU0lHUVVJ VCxTSUdfSUdOKTsJLyogSWdub3JlIFF1aXQgc2lnbmFsICovCisKKyNpZmRlZiBTSUdEQU5HRVIJ CQkvKiBJZ25vcmUgZGFuZ2VyIHNpZ25hbHMgKi8KKy8qCisgIFRoaXMgc2lnbmFsIGlzIHNlbnQg d2hlbiB0aGUgc3lzdGVtIGlzIGxvdyBvbiBzd2FwIHNwYWNlLiAgUHJvY2Vzc2VzCisgIHRoYXQg ZG9uJ3QgaGFuZGxlIGl0IGFyZSBjYW5kaWRhdGVzIGZvciB0ZXJtaW5hdGlvbi4gIElmIHN3YXAg c3BhY2UgZG9lc24ndAorICBjbGVhciBvdXQgZW5vdWdoLCB3ZSBzdGlsbCBtaWdodCBiZSB0ZXJt aW5hdGVkIHZpYSBraWxsKCkgLS0gbm90aGluZyB3ZSBjYW4KKyAgZG8gYWJvdXQgdGhhdCEgIENv bmNlaXZhYmx5LCB0aGlzIGNvdWxkIGJlIGltcHJvdmVkIGJ5IGluc3RhbGxpbmcgYSByZWFsCisg IHNpZ25hbCBoYW5kbGVyIHRoYXQgd2FybnMgdGhlIHVzZXIsIGJ1dCB0aGF0IHdvdWxkIGJlIHBy ZXR0eSBjb21wbGljYXRlZCwKKyAgc2luY2Ugd2UgYXJlIG5vdCBhbHdheXMgaW4gY29udHJvbCBv ZiB0aGUgc2NyZWVuIC0tIGUuZy4gZHVyaW5nIHJlbW90ZS1tb2RlCisgIGZpbGUgdHJhbnNmZXIu CisqLworICAgIHNhdmRhbmdlciA9IHNpZ25hbChTSUdEQU5HRVIsU0lHX0lHTik7IC8qIGUuZy4g aW4gQUlYICovCisjZW5kaWYgLyogU0lHREFOR0VSICovCisjaWZkZWYgU0lHUElQRQorLyoKKyAg VGhpcyBvbmUgY29tZXMgd2hlbiBhIFRDUC9JUCBjb25uZWN0aW9uIGlzIGJyb2tlbiBieSB0aGUg cmVtb3RlLgorICBXZSBwcmVmZXIgdG8gY2F0Y2ggdGhpcyBzaXR1YXRpb24gYnkgZXhhbWluaW5n IGVycm9yIGNvZGVzIGZyb20gd3JpdGUoKS4KKyovCisgICAgc2F2cGlwZSA9IHNpZ25hbChTSUdQ SVBFLFNJR19JR04pOworI2VuZGlmIC8qIFNJR1BJUEUgKi8KKyAgICBzYXZ1c3IxID0gc2lnbmFs KFNJR1VTUjEsU0lHX0lHTik7CS8qIElnbm9yZSB1c2VyLWRlZmluZWQgc2lnbmFscyAqLworICAg IHNhdnVzcjIgPSBzaWduYWwoU0lHVVNSMixTSUdfSUdOKTsKK30KKworVk9JRAorcmVzdG9yc2ln cygpIHsJCQkJLyogUmVzdG9yZSB0aGVzZSBzaWduYWxzICovCisgICAgKFZPSUQpIHNpZ25hbChT SUdRVUlULHNhdnF1aXQpOwkvKiAodXNlZCBpbiBja3VmaW8uYykgKi8KKyNpZmRlZiBTSUdEQU5H RVIKKyAgICAoVk9JRCkgc2lnbmFsKFNJR0RBTkdFUixzYXZkYW5nZXIpOworI2VuZGlmIC8qIFNJ R0RBTkdFUiAqLworI2lmZGVmIFNJR1BJUEUKKyAgICAoVk9JRCkgc2lnbmFsKFNJR1BJUEUsc2F2 cGlwZSk7CisjZW5kaWYgLyogU0lHUElQRSAqLworICAgIChWT0lEKSBzaWduYWwoU0lHVVNSMSxz YXZ1c3IxKTsKKyAgICAoVk9JRCkgc2lnbmFsKFNJR1VTUjIsc2F2dXNyMik7Cit9CisKK2ludAor c3lzaW5pdCgpIHsKKyAgICBpbnQgeDsKKyAgICBjaGFyICogczsKKyNpZmRlZiBDS19VVFNOQU1F CisgICAgc3RydWN0IHV0c25hbWUgbmFtZTsKKyNlbmRpZiAvKiBDS19VVFNOQU1FICovCisKKyAg ICBleHRlcm4gY2hhciBzdGFydHVwZGlyW107CisvKgorICBCRUZPUkUgQU5ZVEhJTkcgRUxTRTog SW5pdGlhbGl6ZSB0aGUgc2V0dWlkIHBhY2thZ2UuCisgIENoYW5nZSB0byB0aGUgdXNlcidzIHJl YWwgdXNlciBhbmQgZ3JvdXAgSUQuCisgIElmIHRoaXMgY2FuJ3QgYmUgZG9uZSwgZG9uJ3QgcnVu IGF0IGFsbC4KKyovCisgICAgeCA9IHByaXZfaW5pKCk7CisjaWZkZWYgU1VJRERFQlVHCisgICAg ZnByaW50ZihzdGRlcnIsIlBSSVZfSU5JPSVkXG4iLHgpOworI2VuZGlmIC8qIFNVSURERUJVRyAq LworICAgIGlmICh4KSB7CisJaWYgKHggJiAxKSBmcHJpbnRmKHN0ZGVyciwiRmF0YWw6IHNldHVp ZCBmYWlsdXJlLlxuIik7CisJaWYgKHggJiAyKSBmcHJpbnRmKHN0ZGVyciwiRmF0YWw6IHNldGdp ZCBmYWlsdXJlLlxuIik7CisJaWYgKHggJiA0KSBmcHJpbnRmKHN0ZGVyciwiRmF0YWw6IEMtS2Vy bWl0IHNldHVpZCB0byByb290IVxuIik7CisJZXhpdCgxKTsKKyAgICB9CisgICAgc2lnbmFsKFNJ R0lOVCxTSUdfSUdOKTsJCS8qIElnbm9yZSBpbnRlcnJ1cHRzIGF0IGZpcnN0ICovCisgICAgc2ln bmFsKFNJR0ZQRSxTSUdfSUdOKTsJCS8qIElnbm9yZSBmbG9hdGluZy1wb2ludCBleGNlcHRpb25z ICovCisgICAgc2lnbmFsKFNJR0hVUCxzaWdodXApOwkJLyogQ2F0Y2ggU0lHSFVQICovCisjaWZu ZGVmIE5PU0lHV0lOQ0gKKyNpZmRlZiBTSUdXSU5DSAorICAgIHNpZ25hbChTSUdXSU5DSCx3aW5j aGgpOwkJLyogQ2F0Y2ggd2luZG93LXNpemUgY2hhbmdlICovCisjZW5kaWYgLyogU0lHV0lOQ0gg Ki8KKyNlbmRpZiAvKiBOT1NJR1dJTkNIICovCisKKyNpZmRlZiBTSUdYRlNaCisgICAgc2lnbmFs KFNJR1hGU1osU0lHX0lHTik7CQkvKiBJZ25vcmUgd3JpdGluZyBwYXN0IGZpbGUgbGltaXQgKi8g CisjZW5kaWYJLyogU0lHWEZTWiAqLworCisjaWZuZGVmIE5PSkMKKy8qCisgIEdldCB0aGUgaW5p dGlhbCBqb2IgY29udHJvbCBzdGF0ZS4KKyAgSWYgaXQgaXMgU0lHX0lHTiwgdGhhdCBtZWFucyB0 aGUgc2hlbGwgZG9lcyBub3Qgc3VwcG9ydCBqb2IgY29udHJvbCwKKyAgYW5kIHNvIHdlJ2QgYmV0 dGVyIG5vdCBzdXNwZW5kIG91cnNlbHZlcy4KKyovCisjaWZkZWYgU0lHVFNUUAorICAgIGpjaGRs ciA9IHNpZ25hbChTSUdUU1RQLFNJR19JR04pOworICAgIGlmIChqY2hkbHIgPT0gU0lHX0lHTikg eworCWpjc2hlbGwgPSAwOworCWRlYnVnKEYxMDAsInN5c2luaXQgamNoZGxyOiBTSUdfSUdOIiwi IiwwKTsKKyAgICB9IGVsc2UgaWYgKGpjaGRsciA9PSBTSUdfREZMKSB7CisJZGVidWcoRjEwMCwi c3lzaW5pdCBqY2hkbHI6IFNJR19ERkwiLCIiLDApOworCWpjc2hlbGwgPSAxOworICAgIH0gZWxz ZSB7CisJZGVidWcoRjEwMCwic3lzaW5pdCBqY2hkbHI6IG90aGVyIiwiIiwwKTsKKwlqY3NoZWxs ID0gMzsKKyAgICB9CisgICAgKFZPSUQpIHNpZ25hbChTSUdUU1RQLGpjaGRscik7CS8qIFB1dCBp dCBiYWNrLi4uICovCisjZW5kaWYgLyogU0lHVFNUUCAqLworI2VuZGlmIC8qIE5PSkMgKi8KKwor ICAgIGNvbmJndCgwKTsJCQkJLyogU2VlIGlmIHdlJ3JlIGluIHRoZSBiYWNrZ3JvdW5kICovCisg ICAgY29uZ20oKTsJCQkJLyogR2V0IGNvbnNvbGUgbW9kZXMgKi8KKworICAgIChWT0lEKSBzaWdu YWwoU0lHQUxSTSxTSUdfSUdOKTsJLyogSWdub3JlIGFsYXJtcyAqLworCisgICAgaWdub3JzaWdz KCk7CQkJLyogSWdub3JlIHNvbWUgb3RoZXIgc2lnbmFscyAqLworCisjaWZkZWYgRl9TRVRGTAor ICAgIGluaWZsYWdzID0gZmNudGwoMCxGX0dFVEZMLDApOwkvKiBHZXQgc3RkaW4gZmxhZ3MgKi8K KyNlbmRpZiAvKiBGX1NFVEZMICovCisKKyNpZmRlZiB1bHRyaXgKKyAgICBndHR5KDAsJnZhbmls bGEpOwkJCS8qIEdldCBzZ3R0eSBpbmZvICovCisjZWxzZQorI2lmZGVmIEFVWAorICAgIHNldDQy c2lnKCk7CQkJCS8qIERvbid0IGFzayEgKGhha2Fuc29uQGNzLm9yc3QuZWR1KSAqLworI2VuZGlm IC8qIEFVWCAqLworI2VuZGlmIC8qIHVsdHJpeCAqLworLyoKKyAgV2FybmluZzogb24gc29tZSBV TklYIHN5c3RlbXMgKFNWUjQ/KSwgdHR5bmFtZSgpIHJlcG9ydGVkbHkgb3BlbnMgL2RldiBidXQK KyAgbmV2ZXIgY2xvc2VzIGl0LiAgSWYgaXQgaXMgY2FsbGVkIG9mdGVuIGVub3VnaCwgd2UgcnVu IG91dCBvZiBmaWxlCisgIGRlc2NyaXB0b3JzIGFuZCBzdWJzZXF1ZW50IG9wZW4oKSdzIG9mIG90 aGVyIGRldmljZXMgb3IgZmlsZXMgY2FuIGZhaWwuCisqLworICAgIHMgPSBOVUxMOworI2lmbmRl ZiBNSU5JWAorICAgIGlmIChpc2F0dHkoMCkpCQkJLyogTmFtZSBvZiBjb250cm9sbGluZyB0ZXJt aW5hbCAqLworICAgICAgcyA9IHR0eW5hbWUoMCk7CisgICAgZWxzZSBpZiAoaXNhdHR5KDEpKQor ICAgICAgcyA9IHR0eW5hbWUoMSk7CisgICAgZWxzZSBpZiAoaXNhdHR5KDIpKQorICAgICAgcyA9 IHR0eW5hbWUoMik7CisgICAgZGVidWcoRjExMCwic3lzaW5pdCB0dHluYW1lKDApIixzLDApOwor I2VuZGlmIC8qIE1JTklYICovCisKKyNpZmRlZiBCRU9TCisgICAgaWYgKCFkZnR0eSkKKyAgICAg IG1ha2VzdHIoJmRmdHR5LHMpOworI2VuZGlmIC8qIEJFT1MgKi8KKworICAgIGlmIChzKQorICAg ICAgY2tzdHJuY3B5KChjaGFyICopY3R0bmFtLHMsREVWTkFNTEVOKzEpOworI2lmZGVmIFNWT1JQ T1NJWAorICAgIGlmICghY3R0bmFtWzBdKQorICAgICAgY3Rlcm1pZChjdHRuYW0pOworI2VuZGlm IC8qIFNWT1JQT1NJWCAqLworICAgIGlmICghY3R0bmFtWzBdKQorICAgICAgY2tzdHJuY3B5KChj aGFyICopY3R0bmFtLGRmdHR5LERFVk5BTUxFTisxKTsKKyAgICBkZWJ1ZyhGMTEwLCJzeXNpbml0 IENUVE5BTSIsQ1RUTkFNLDApOworICAgIGRlYnVnKEYxMTAsInN5c2luaXQgY3R0bmFtIixjdHRu YW0sMCk7CisKKyAgICB0dGd3c2l6KCk7CQkJCS8qIEdldCB3aW5kb3cgKHNjcmVlbikgZGltZW5z aW9ucy4gKi8KKworI2lmbmRlZiBOT1NZU0NPTkYKKyNpZmRlZiBfU0NfT1BFTl9NQVgKKyAgICBj a21heGZpbGVzID0gc3lzY29uZihfU0NfT1BFTl9NQVgpOworI2VuZGlmIC8qIF9TQ19PUEVOX01B WCAqLworI2VuZGlmIC8qIE5PU1lTQ09ORiAqLworCisjaWZkZWYgUGxhbjkKKyAgICBpZiAoIWJh Y2tncmQpIHsKKyAgICAJY29uc2N0bGZkID0gb3BlbigiL2Rldi9jb25zY3RsIiwgT19XUk9OTFkp OworICAgIAkvKm5vaXNlZmQgPSBvcGVuKCIvZGV2L25vaXNlIiwgT19XUk9OTFkpKi8KKyAgICB9 CisgICAgY2t4ZWNoID0gMTsKKyNlbmRpZiAvKiBQbGFuOSAqLworCisjaWZkZWYgQ0tfVVRTTkFN RQorICAgIGlmICh1bmFtZSgmbmFtZSkgPiAtMSkgeworCWNrc3RybmNweSh1bm1fbWNoLG5hbWUu bWFjaGluZSxDS19TWVNOTUxOKTsKKwlja3N0cm5jcHkodW5tX25hbSxuYW1lLnN5c25hbWUsQ0tf U1lTTk1MTik7CisJY2tzdHJuY3B5KHVubV9yZWwsbmFtZS5yZWxlYXNlLENLX1NZU05NTE4pOwor CWNrc3RybmNweSh1bm1fdmVyLG5hbWUudmVyc2lvbixDS19TWVNOTUxOKTsKKyNpZmRlZiBERUJV RworCWlmIChkZWJsb2cpIHsKKwkgICAgZGVidWcoRjExMCwic3lzaW5pdCB1bmFtZSBtYWNoaW5l Iix1bm1fbWNoLDApOworCSAgICBkZWJ1ZyhGMTEwLCJzeXNpbml0IHVuYW1lIHN5c25hbWUiLHVu bV9uYW0sMCk7CisJICAgIGRlYnVnKEYxMTAsInN5c2luaXQgdW5hbWUgcmVsZWFzZSIsdW5tX3Jl bCwwKTsKKwkgICAgZGVidWcoRjExMCwic3lzaW5pdCB1bmFtZSB2ZXJzaW9uIix1bm1fdmVyLDAp OworCX0KKyNlbmRpZiAvKiBERUJVRyAqLworCisjaWZkZWYgSFBVWDlQTFVTCisJaWYgKG5hbWUu bWFjaGluZVs1XSA9PSAnOCcpCisJICBocGlzODAwID0gMTsKKwllbHNlCisJICBocGlzODAwID0g MDsKKwlkZWJ1ZyhGMTAxLCJzeXNpbml0IGhwaXM4MDAiLCIiLGhwaXM4MDApOworI2VuZGlmIC8q IEhQVVg5UExVUyAqLworI2lmZGVmIFRSVTY0CisgICAgICAgIGdldHN5c2luZm8oR1NJX1BMQVRG T1JNX05BTUUsIHVubV9tb2QsIENLX1NZU05NTE4sIDAsIDApOworICAgICAgICBkZWJ1ZyhGMTEw LCJzeXNpbml0IGdldHN5c2luZm8gbW9kZWwiLHVubV9tb2QsMCk7CisjZW5kaWYgLyogVFJVNjQg Ki8KKyNpZmRlZiBTT0xBUklTMjUKKyAgICAgICAgc3lzaW5mbyhTSV9QTEFURk9STSwgdW5tX21v ZCwgQ0tfU1lTTk1MTik7CisgICAgICAgIGRlYnVnKEYxMTAsInN5c2luaXQgc3lzaW5mbyBtb2Rl bCIsdW5tX21vZCwwKTsKKyNlbmRpZiAvKiBTT0xBUklTMjUgKi8KKyAgICB9CisjZW5kaWYgLyog Q0tfVVRTTkFNRSAqLworCisjaWZkZWYgQ0tfRU5WSVJPTk1FTlQKKyAgICB7CisjaWZkZWYgVE5D T0RFCisJZXh0ZXJuIGNoYXIgdG5fZW52X2FjY3RbXSwgdG5fZW52X2Rpc3BbXSwgdG5fZW52X2pv YltdLAorCXRuX2Vudl9wcm50W10sIHRuX2Vudl9zeXNbXTsKKyNlbmRpZiAvKiBUTkNPREUgKi8K KwlleHRlcm4gY2hhciB1aWRidWZbXTsKKyAgICAgICAgZXh0ZXJuIGNoYXIgKiB3aG9hbWkoKTsK KwljaGFyICpwOworI2lmZGVmIENLU0VORFVJRAorICAgICAgICB1aWRidWZbMF0gPSAnXDAnOwor I2lmZGVmIElLU0QKKyAgICAgICAgaWYgKCFpbnNlcnZlcikgeworI2VuZGlmIC8qIElLU0QgKi8K KyAgICAgICAgICAgIHAgPSBnZXRlbnYoIlVTRVIiKTsKKyAgICAgICAgICAgIGRlYnVnKEYxMTAs InN5c2luaXQgdWlkYnVmIGZyb20gVVNFUiIsdWlkYnVmLDApOworCSAgICBpZiAoIXApIHAgPSAi IjsKKyAgICAgICAgICAgIGlmICghKnApIHsKKyAgICAgICAgICAgICAgICBwID0gZ2V0ZW52KCJM T0dOQU1FIik7CisgICAgICAgICAgICAgICAgZGVidWcoRjExMCwic3lzaW5pdCB1aWRidWYgZnJv bSBMT0dOQU1FIix1aWRidWYsMCk7CisgICAgICAgICAgICB9CisJICAgIGlmICghcCkgcCA9ICIi OworICAgICAgICAgICAgaWYgKCEqcCkgeworICAgICAgICAgICAgICAgIHAgPSB3aG9hbWkoKTsK KyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJzeXNpbml0IHVpZGJ1ZiBmcm9tIHdob2FtaSgp Iix1aWRidWYsMCk7CisgICAgICAgICAgICB9CisJICAgIGlmICghcCkgcCA9ICIiOworCSAgICBj a3N0cm5jcHkodWlkYnVmLCAqcCA/IHAgOiAiVU5LTk9XTiIsIFVJREJVRkxFTik7CisjaWZkZWYg SUtTRAorICAgICAgICB9CisjZW5kaWYgLyogSUtTRCAqLworCWRlYnVnKEYxMTAsInN5c2luaXQg ZmluYWwgdWlkYnVmIix1aWRidWYsMCk7CisjZW5kaWYgLyogQ0tTRU5EVUlEICovCisKKyNpZmRl ZiBUTkNPREUKKwlpZiAoKHAgPSBnZXRlbnYoIkpPQiIpKSkgY2tzdHJuY3B5KHRuX2Vudl9qb2Is cCw2Myk7CisJaWYgKChwID0gZ2V0ZW52KCJBQ0NUIikpKSBja3N0cm5jcHkodG5fZW52X2FjY3Qs cCw2Myk7CisJaWYgKChwID0gZ2V0ZW52KCJQUklOVEVSIikpKSBja3N0cm5jcHkodG5fZW52X3By bnQscCw2Myk7CisJaWYgKChwID0gZ2V0ZW52KCJESVNQTEFZIikpKSBja3N0cm5jcHkodG5fZW52 X2Rpc3AscCw2Myk7CisjaWZkZWYgYWVnaXMKKwlja3N0cm5jcHkodG5fZW52X3N5cywiQWVnaXMi LDY0KTsKKyNlbHNlCisjaWZkZWYgUGxhbjkKKwlja3N0cm5jcHkodG5fZW52X3N5cywiUGxhbjki LDY0KTsKKyNlbHNlCisJY2tzdHJuY3B5KHRuX2Vudl9zeXMsIlVOSVgiLDY0KTsKKyNlbmRpZiAv KiBQbGFuOSAqLworI2VuZGlmIC8qIGFlZ2lzICovCisjZW5kaWYgLyogVE5DT0RFICovCisgICAg fQorI2VuZGlmIC8qIENLX0VOVklST05NRU5UICovCisjaWZkZWYgQ0tfU05ETE9DCisgICAgewor CWV4dGVybiBjaGFyICogdG5fbG9jOworCWNoYXIgKnA7CisJaWYgKHAgPSBnZXRlbnYoIkxPQ0FU SU9OIikpCisJICBpZiAodG5fbG9jID0gKGNoYXIgKiltYWxsb2MoKGludClzdHJsZW4ocCkrMSkp CisJICAgIHN0cmNweSh0bl9sb2MscCk7CQkvKiBzYWZlICovCisgICAgfQorI2VuZGlmIC8qIENL X1NORExPQyAqLworCisgICAgY2tzdHJuY3B5KHN0YXJ0dXBkaXIsIHpndGRpcigpLCBDS01BWFBB VEgpOworICAgIHN0YXJ0dXBkaXJbQ0tNQVhQQVRIXSA9ICdcMCc7CisgICAgeCA9IHN0cmxlbihz dGFydHVwZGlyKTsKKyAgICBpZiAoeCA8PSAwKSB7CisJc3RhcnR1cGRpclswXSA9ICcvJzsKKwlz dGFydHVwZGlyWzFdID0gJ1wwJzsKKyAgICB9IGVsc2UgaWYgKHN0YXJ0dXBkaXJbeC0xXSAhPSAn LycpIHsKKwlzdGFydHVwZGlyW3hdID0gJy8nOworCXN0YXJ0dXBkaXJbeCsxXSA9ICdcMCc7Cisg ICAgfQorICAgIGRlYnVnKEYxMTAsInN5c2luaXQgc3RhcnR1cGRpciIsc3RhcnR1cGRpciwwKTsK KyNpZmRlZiBUVExFQlVGCisgICAgbGVfaW5pdCgpOworI2VuZGlmIC8qIFRUTEVCVUYgKi8KKyNp ZmRlZiBCU0Q0NE9SUE9TSVgKKyAgICAvKiBUaGlzIHNob3VsZCBjYXRjaCB0aGUgbmN1cnNlcyBw bGF0Zm9ybXMgKi8KKyAgICAvKiBTb21lIHBsYXRmb3JtcyBkb24ndCBoYXZlIHB1dGVudigpLCBs aWtlIE5lWFRTVEVQICovCisgICAgcHV0ZW52KCJOQ1VSU0VTX05PX1NFVEJVRj0xIik7CisjZW5k aWYgLyogQlNENDRPUlBPU0lYICovCisgICAgcmV0dXJuKDApOworfQorCisvKiAgUyBZIFMgQyBM IEUgQSBOIFUgUCAgLS0gIFN5c3RlbS1kZXBlbmRlbnQgcHJvZ3JhbSBjbGVhbnVwLiAgKi8KKwor aW50CitzeXNjbGVhbnVwKCkgeworI2lmZGVmIEZfU0VURkwKKyAgICBpZiAoaW5pZmxhZ3MgPiAt MSkKKyAgICAgIGZjbnRsKDAsRl9TRVRGTCxpbmlmbGFncyk7CS8qIFJlc3RvcmUgc3RkaW4gZmxh Z3MgKi8KKyNlbmRpZiAvKiBGX1NFVEZMICovCisjaWZkZWYgdWx0cml4CisgICAgc3R0eSgwLCZ2 YW5pbGxhKTsgICAgICAgICAgICAgICAgICAgLyogR2V0IHNndHR5IGluZm8gKi8KKyNlbmRpZiAv KiB1bHRyaXggKi8KKyNpZmRlZiBORVRDTUQKKyAgICBpZiAodHRwaWQpIGtpbGwodHRwaWQsOSk7 CisjZW5kaWYgLyogTkVUQ01EICovCisgICAgcmV0dXJuKDApOworfQorCisvKiAgVCBUIE8gUCBF IE4gIC0tICBPcGVuIGEgdHR5IGZvciBleGNsdXNpdmUgYWNjZXNzLiAgKi8KKworLyoKKyAgQ2Fs bCB3aXRoOgorICAgIHR0bmFtZTogY2hhcmFjdGVyIHN0cmluZyAtIGRldmljZSBuYW1lIG9yIG5l dHdvcmsgaG9zdCBuYW1lLgorICAgIGxjbDoKKyAgSWYgY2FsbGVkIHdpdGggbGNsIDwgMCwgc2V0 cyB2YWx1ZSBvZiBsY2wgYXMgZm9sbG93czoKKyAgMDogdGhlIHRlcm1pbmFsIG5hbWVkIGJ5IHR0 bmFtZSBpcyB0aGUgam9iJ3MgY29udHJvbGxpbmcgdGVybWluYWwuCisgIDE6IHRoZSB0ZXJtaW5h bCBuYW1lZCBieSB0dG5hbWUgaXMgbm90IHRoZSBqb2IncyBjb250cm9sbGluZyB0ZXJtaW5hbC4K KyAgQnV0IHdhdGNoIG91dDogaWYgYSBsaW5lIGlzIGFscmVhZHkgb3Blbiwgb3IgaWYgcmVxdWVz dGVkIGxpbmUgY2FuJ3QKKyAgYmUgb3BlbmVkLCB0aGVuIGxjbCByZW1haW5zIChhbmQgaXMgcmV0 dXJuZWQgYXMpIC0xLgorICAgIG1vZGVtOgorICBMZXNzIHRoYW4gemVybzogdHRuYW1lIGlzIGEg bmV0d29yayBob3N0IG5hbWUuCisgIFplcm8gb3IgZ3JlYXRlcjogdHRuYW1lIGlzIGEgdGVybWlu YWwgZGV2aWNlIG5hbWUuCisgIFplcm8gbWVhbnMgYSBsb2NhbCBjb25uZWN0aW9uIChkb24ndCB1 c2UgbW9kZW0gc2lnbmFscykuCisgIFBvc2l0aXZlIG1lYW5zIHVzZSBtb2RlbSBzaWduYWxzLgor ICAgdGltbzoKKyAgMCA9IG5vIHRpbWVyLgorICBub256ZXJvID0gbnVtYmVyIG9mIHNlY29uZHMg dG8gd2FpdCBmb3Igb3BlbigpIHRvIHJldHVybiBiZWZvcmUgdGltaW5nIG91dC4KKworICBSZXR1 cm5zOgorICAgIDAgb24gc3VjY2VzcworICAgLTUgaWYgZGV2aWNlIGlzIGluIHVzZQorICAgLTQg aWYgYWNjZXNzIHRvIGRldmljZSBpcyBkZW5pZWQKKyAgIC0zIGlmIGFjY2VzcyB0byBsb2NrIGRp cmVjdG9yeSBkZW5pZWQKKyAgIC0yIHVwb24gdGltZW91dCB3YWl0aW5nIGZvciBkZXZpY2UgdG8g b3BlbgorICAgLTEgb24gb3RoZXIgZXJyb3IKKyovCitzdGF0aWMgaW50IHR0b3RtbyA9IDA7CQkJ LyogVGltZW91dCBmbGFnICovCisvKiBGbGFnIGtlcHQgaGVyZSB0byBhdm9pZCBiZWluZyBjbG9i YmVyZWQgYnkgbG9uZ2ptcC4gICovCisKK2ludAordHRvcGVuKHR0bmFtZSxsY2wsbW9kZW0sdGlt bykgY2hhciAqdHRuYW1lOyBpbnQgKmxjbCwgbW9kZW0sIHRpbW87IHsKKworI2lmZGVmIEJTRDQ0 CisjZGVmaW5lIGN0ZXJtaWQoeCkgc3RyY3B5KHgsIiIpCisjZWxzZQorI2lmZGVmIFNWT1JQT1NJ WAorI2lmbmRlZiBDSUUKKyAgICBleHRlcm4gY2hhciAqY3Rlcm1pZCgpOwkJLyogV2lzaCB0aGV5 IGFsbCBoYWQgdGhpcyEgKi8KKyNlbHNlCQkJCQkvKiBDSUUgUmVndWx1cyAqLworI2RlZmluZSBj dGVybWlkKHgpIHN0cmNweSh4LCIiKQorI2VuZGlmIC8qIENJRSAqLworI2VuZGlmIC8qIFNWT1JQ T1NJWCAqLworI2VuZGlmIC8qIEJTRDQ0ICovCisKKyNpZmRlZiB1bHRyaXgKKyAgICBpbnQgdGVt cCA9IDA7CisjZW5kaWYgLyogdWx0cml4ICovCisKKyNpZm5kZWYgT1BFTkZJUlNUCisgICAgY2hh ciBmdWxsbmFtZVtERVZOQU1MRU4rMV07CisjZW5kaWYgLyogT1BFTkZJUlNUICovCisKKyAgICBj aGFyICogZm5hbTsJCQkvKiBGdWxsIG5hbWUgYWZ0ZXIgZXhwYW5zaW9uICovCisKKyAgICBpbnQg eTsKKworI2lmbmRlZiBwZHAxMQorI2RlZmluZSBOQU1FRkQJIC8qIEZlYXR1cmUgdG8gYWxsb3cg bmFtZSB0byBiZSBhbiBvcGVuIGZpbGUgZGVzY3JpcHRvciAqLworI2VuZGlmIC8qIHBkcDExICov CisKKyNpZmRlZiBOQU1FRkQKKyAgICBjaGFyICpwOworICAgIGRlYnVnKEYxMDEsInR0b3BlbiB0 ZWxuZXRmZCIsIiIsdGVsbmV0ZmQpOworI2VuZGlmIC8qIE5BTUVGRCAqLworCisgICAgZGVidWco RjExMCwidHRvcGVuIHR0bmFtZSIsdHRuYW1lLDApOworICAgIGRlYnVnKEYxMTAsInR0b3BlbiB0 dG5tc3YiLHR0bm1zdiwwKTsKKyAgICBkZWJ1ZyhGMTAxLCJ0dG9wZW4gbW9kZW0iLCIiLG1vZGVt KTsKKyAgICBkZWJ1ZyhGMTAxLCJ0dG9wZW4gbmV0Y29ubiIsIiIsbmV0Y29ubik7CisgICAgZGVi dWcoRjEwMSwidHRvcGVuIHR0eWZkIiwiIix0dHlmZCk7CisgICAgZGVidWcoRjEwMSwidHRvcGVu ICpsY2wiLCIiLCpsY2wpOworICAgIGRlYnVnKEYxMDEsInR0b3BlbiB0dG1kbSIsIiIsdHRtZG0p OworICAgIGRlYnVnKEYxMDEsInR0b3BlbiB0dG5ldCIsIiIsdHRuZXQpOworCisgICAgdHRwbXNr ID0gMHhmZjsKKyAgICBsb2NrcGlkWzBdID0gJ1wwJzsKKworICAgIGlmICh0dHlmZCA+IC0xKSB7 CQkJLyogSWYgZGV2aWNlIGFscmVhZHkgb3BlbmVkICovCisgICAgICAgIGlmICghc3RybmNtcCh0 dG5hbWUsdHRubXN2LERFVk5BTUxFTikpIC8qIGFyZSBuZXcgJiBvbGQgbmFtZXMgZXF1YWw/ICov CisJICByZXR1cm4oMCk7CQkJLyogWWVzLCBub3RoaW5nIHRvIGRvIC0ganVzdCByZXR1cm4gKi8K Kwl0dG5tc3ZbMF0gPSAnXDAnOwkJLyogTm8sIGNsZWFyIG91dCBvbGQgbmFtZSAqLworCXR0Y2xv cyh0dHlmZCk7CQkJLyogY2xvc2Ugb2xkIGNvbm5lY3Rpb24uICAqLworICAgIH0KKyAgICB3YXNj bG9zZWQgPSAwOwkJCS8qIE5ldyBjb25uZWN0aW9uLCBub3QgY2xvc2VkIHlldC4gKi8KKyAgICB0 dHBpcGUgPSAwOwkJCQkvKiBBc3N1bWUgaXQncyBub3QgYSBwaXBlICovCisgICAgdHRwdHkgPSAw OwkJCQkvKiBvciBhIHB0eS4uLiAqLworCisjaWZkZWYgTkVUQ09OTgorLyoKKyAgVGhpcyBpcyBh IGJpdCB0cmlja3kuLi4gIFN1cHBvc2UgdGhhdCBwcmV2aW91c2x5IEtlcm1pdCBoYWQgZGlhbGVk IGEgdGVsbmV0CisgIG1vZGVtIHNlcnZlciAoInNldCBob3N0IHh4eDoyMDAxLCBzZXQgbW9kZW0g dHlwZSB1c3IsIGRpYWwgLi4uIikuICBUaGVuIHRoZQorICBjb25uZWN0aW9uIHdhcyBjbG9zZWQg KHR0eWZkID0gLTEpLCBhbmQgdGhlbiBhIFJFRElBTCBjb21tYW5kIHdhcyBnaXZlbi4gIEF0Cisg IHRoaXMgcG9pbnQgd2UndmUgb2JsaXRlcmF0ZWQgdGhlIG5lZ2F0aXZlIG1vZGVtIHR5cGUgaGFj aywgYW5kIHNvIHdvdWxkCisgIHRyZWF0IHRoZSBJUCBob3N0bmFtZSBhcyBhIGRldmljZSBuYW1l LCBhbmQgd291bGQgdGhlbiBmYWlsIGJlY2F1c2Ugb2YgIk5vCisgIHN1Y2ggZGV2aWNlIG9yIGRp cmVjdG9yeSIuICBCdXQgdGhlIHByZXZpb3VzIGNvbm5lY3Rpb24gaGFzIGxlZnQgYmVoaW5kIHNv bWUKKyAgY2x1ZXMsIHNvIGxldCdzIHVzZSB0aGVtLi4uCisqLworICAgIGlmICh0dHlmZCA8IDAp IHsJCQkvKiBDb25uZWN0aW9uIGlzIG5vdCBvcGVuICovCisJaWYgKCFzdHJjbXAodHRuYW1lLHR0 bm1zdikpIHsJLyogT2xkIGFuZCBuZXcgbmFtZXMgdGhlIHNhbWU/ICovCisJICAgIGlmICgoKG5l dGNvbm4gPiAwKSAmJiAodHRtZG0gPCAwKSkgfHwKKwkJKCh0dG5ldCA+IDApICYmCisJCSAoIWNr c3RyY2hyKHR0bmFtZSwnLycpKSAmJiAoY2tzdHJjaHIodHRuYW1lLCc6JykpKQorCQkpIHsKKwkJ aW50IHgsIHJjOworCQl4ID0gKHR0bWRtIDwgMCkgPyAtdHRtZG0gOiB0dG5ldDsKKwkJcmMgPSBu ZXRvcGVuKHR0bmFtZSwgbGNsLCB4KTsKKwkJZGVidWcoRjExMSwidHRvcGVuIFJFT1BFTiBuZXRv cGVuIix0dG5hbWUscmMpOworCQlpZiAocmMgPiAtMSkgeworCQkgICAgbmV0Y29ubiA9IDE7CisJ CSAgICB4bG9jYWwgPSAqbGNsID0gMTsKKwkJfSBlbHNlIHsKKwkJICAgIG5ldGNvbm4gPSAwOwor CQl9CisJCWdvdHNpZ3MgPSAwOworCQlyZXR1cm4ocmMpOworCSAgICB9CisJfQorICAgIH0KKyNl bmRpZiAvKiBORVRDT05OICovCisKKyNpZmRlZiBNQVhOQU1MRU4KKyAgICBkZWJ1ZyhGMTAwLCJ0 dG9wZW4gTUFYTkFNTEVOIGRlZmluZWQiLCIiLDApOworI2Vsc2UKKyAgICBkZWJ1ZyhGMTAwLCJ0 dG9wZW4gTUFYTkFNTEVOICpOT1QqIGRlZmluZWQiLCIiLDApOworI2VuZGlmCisKKyNpZmRlZiBC U0Q0CisgICAgZGVidWcoRjEwMCwidHRvcGVuIEJTRDQgZGVmaW5lZCIsIiIsMCk7CisjZWxzZQor ICAgIGRlYnVnKEYxMDAsInR0b3BlbiBCU0Q0ICpOT1QqIGRlZmluZWQiLCIiLDApOworI2VuZGlm IC8qIEJTRDQgKi8KKworI2lmZGVmIEJTRDQyCisgICAgZGVidWcoRjEwMCwidHRvcGVuIEJTRDQy IGRlZmluZWQiLCIiLDApOworI2Vsc2UKKyAgICBkZWJ1ZyhGMTAwLCJ0dG9wZW4gQlNENDIgKk5P VCogZGVmaW5lZCIsIiIsMCk7CisjZW5kaWYgLyogQlNENDIgKi8KKworI2lmZGVmIE1ZUkVBRAor ICAgIGRlYnVnKEYxMDAsInR0b3BlbiBNWVJFQUQgZGVmaW5lZCIsIiIsMCk7CisjZWxzZQorICAg IGRlYnVnKEYxMDAsInR0b3BlbiBNWVJFQUQgKk5PVCogZGVmaW5lZCIsIiIsMCk7CisjZW5kaWYg LyogTVlSRUFEICovCisKKyNpZmRlZglORVRDT05OCisgICAgaWYgKG1vZGVtIDwgMCkgewkJCS8q IG1vZGVtIDwgMCA9IGNvZGUgZm9yIG5ldHdvcmsgKi8KKwlpbnQgeDsKKwl0dG1kbSA9IG1vZGVt OworCW1vZGVtID0gLW1vZGVtOwkJCS8qIFBvc2l0aXZlIG5ldHdvcmsgdHlwZSBudW1iZXIgKi8K KwlmZGZsYWcgPSAwOwkJCS8qIFN0ZGlvIG5vdCByZWRpcmVjdGVkLiAqLworCW5ldGNvbm4gPSAx OwkJCS8qIEFuZCBpdCdzIGEgbmV0d29yayBjb25uZWN0aW9uICovCisJZGVidWcoRjExMSwidHRv cGVuIG5ldCIsdHRuYW1lLG1vZGVtKTsKKyNpZmRlZiBOQU1FRkQKKwlmb3IgKHAgPSB0dG5hbWU7 IGlzZGlnaXQoKnApOyBwKyspIDsgLyogQ2hlY2sgZm9yIGFsbCBkaWdpdHMgKi8KKyAJaWYgKCpw ID09ICdcMCcgJiYgKHRlbG5ldGZkIHx8IHgyNWZkKSkgeyAvKiBBdm9pZCBYLjEyMSBhZGRyZXNz ZXMgKi8KKwkgICAgdHR5ZmQgPSBhdG9pKHR0bmFtZSk7CS8qIElzIHRoZXJlIGEgd2F5IHRvIHRl c3QgaXQncyBvcGVuPyAqLworCSAgICB0dGZkZmxnID0gMTsJCS8qIFdlIGdvdCBhbiBvcGVuIGZp bGUgZGVzY3JpcHRvciAqLworCSAgICBkZWJ1ZyhGMTExLCJ0dG9wZW4gbmV0IHR0ZmRmbGciLHR0 bmFtZSx0dGZkZmxnKTsKKwkgICAgZGVidWcoRjEwMSwidHRvcGVuIG5ldCB0dHlmZCIsIiIsdHR5 ZmQpOworCSAgICBja3N0cm5jcHkodHRubXN2LHR0bmFtZSxERVZOQU1MRU4pOyAvKiBSZW1lbWJl ciB0aGUgIm5hbWUiLiAqLworCSAgICB4ID0gMTsJCQkvKiBSZXR1cm4gY29kZSBpcyAiZ29vZCIu ICovCisJICAgIGlmICh0ZWxuZXRmZCkgeworCQl0dG5ldCA9IE5FVF9UQ1BCOworCQlpZiAodHRu cHJvdG8gIT0gTlBfVENQUkFXKQorCQkgIHR0bnByb3RvID0gTlBfVEVMTkVUOworI2lmZGVmIFNV TlgyNQorCSAgICB9IGVsc2UgaWYgKHgyNWZkKSB7CisJCXR0bmV0ID0gTkVUX1NYMjU7CisJCXR0 bnByb3RvID0gTlBfTk9ORTsKKyNlbmRpZiAvKiBTVU5YMjUgKi8KKwkgICAgfQorCX0gZWxzZSB7 CQkJLyogSG9zdCBuYW1lIG9yIGFkZHJlc3MgZ2l2ZW4gKi8KKyNpZmRlZiBORVRQVFkKKwkgICAg aWYgKG1vZGVtID09IE5FVF9QVFkpIHsKKwkJaW50IHg7CisJCWlmIChub3B1c2gpIHsKKwkJICAg IGRlYnVnKEYxMDAsInR0b3BlbiBQVFk6IG5vcHVzaCIsIiIsMCk7CisJCSAgICByZXR1cm4oLTEp OworCQl9CisgICAgICAgICAgICAgICAgdHRuZXQgPSBORVRfUFRZOworCQl0dG5wcm90byA9IE5Q X05PTkU7CisgICAgICAgICAgICAgICAgbmV0Y29ubiA9IDE7ICAgICAgICAgICAgLyogYnV0IHdl IGRvbid0IHVzZSBuZXR3b3JrIGkvbyAqLworICAgICAgICAgICAgICAgIHR0cHR5ID0gMTsKKyAg ICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJ0dG9wZW4gUFRZIix0dG5hbWUsMCk7CisJCXggPSBk b19wdHkoJnR0eWZkLHR0bmFtZSwwKTsKKwkJaWYgKHggPiAtMSkgeworCQkgICAgY2tzdHJuY3B5 KHR0bm1zdix0dG5hbWUsREVWTkFNTEVOKTsKKwkJICAgIHhsb2NhbCA9ICpsY2wgPSAxOwkvKiBJ dCdzIGxvY2FsICovCisJCX0gZWxzZSB7CisJCSAgICB0dHB0eSA9IDA7CisJCSAgICBuZXRjb25u ID0gMDsKKwkJfQorCQlnb3RzaWdzID0gMDsKKwkJcmV0dXJuKHgpOworCSAgICB9CisjZW5kaWYg LyogTkVUUFRZICovCisjaWZkZWYgTkVUQ01ECisvKgorICBkdXAyKCkgaXMgbm90IGF2YWlsYWJs ZSBvbiBvbGRlciBTeXN0ZW0gViBwbGF0Zm9ybXMgbGlrZSBBVCZUIDNCeC4gIEZvcgorICB0aG9z ZSBzeXN0ZW1zIHdlIHB1bnQgYnkgbm90IGRlZmluaW5nIE5FVENNRCwgYnV0IHdlIG1pZ2h0IGJl IGFibGUgdG8gZG8KKyAgYmV0dGVyIC0tIHNlZSB3b3JrYXJvdW5kcyBmb3IgdGhpcyBwcm9ibGVt IGluIGNrdWZpby5jIChzZWFyY2ggZm9yIGR1cDIpLgorKi8KKwkgICAgaWYgKG1vZGVtID09IE5F VF9DTUQpIHsKKwkJaWYgKG5vcHVzaCkgeworCQkgICAgZGVidWcoRjEwMCwidHRvcGVuIHBpcGU6 IG5vcHVzaCIsIiIsMCk7CisJCSAgICByZXR1cm4oLTEpOworCQl9CisJCWlmIChwaXBlKHBpcGUw KSB8fCBwaXBlKHBpcGUxKSkgeworCQkgICAgcGVycm9yKCJQaXBlIGVycm9yIik7CisJCSAgICBy ZXR1cm4oLTEpOworCQl9CisJCXR0cGlkID0gZm9yaygpOwkJLyogTWFrZSBhIGZvcmsgKi8KKwor CQlzd2l0Y2ggKHR0cGlkKSB7CisJCSAgY2FzZSAtMToJCS8qIEVycm9yIG1ha2luZyBmb3JrICov CisJCSAgICBjbG9zZShwaXBlMFswXSk7CisJCSAgICBjbG9zZShwaXBlMFsxXSk7CisJCSAgICBj bG9zZShwaXBlMVswXSk7CisJCSAgICBjbG9zZShwaXBlMVsxXSk7CisJCSAgICBwZXJyb3IoIkZv cmsgZXJyb3IiKTsKKwkJICAgIHJldHVybigtMSk7CisJCSAgY2FzZSAwOgkJLyogQ2hpbGQuICov CisJCSAgICBjbG9zZShwaXBlMFswXSk7CisJCSAgICBjbG9zZShwaXBlMVsxXSk7CisJCSAgICBk dXAyKHBpcGUwWzFdLCAxKTsKKwkJICAgIGNsb3NlKHBpcGUwWzFdKTsKKwkJICAgIGR1cDIocGlw ZTFbMF0sIDApOworCQkgICAgY2xvc2UocGlwZTFbMF0pOworCQkgICAgc3lzdGVtKHR0bmFtZSk7 CisJCSAgICBfZXhpdCgwKTsKKwkJICBkZWZhdWx0OgkJLyogUGFyZW50ICovCisJCSAgICBjbG9z ZShwaXBlMFsxXSk7CisJCSAgICBjbG9zZShwaXBlMVswXSk7CisJCSAgICBmZGluID0gcGlwZTBb MF07CS8qIFJlYWQgZnJvbSBwaXBlICovCisJCSAgICBmZG91dCA9IHBpcGUxWzFdOwkvKiBXcml0 ZSB0byBwaXBlICovCisJCSAgICB0dG91dCA9IGZkb3BlbihmZG91dCwidyIpOyAvKiBHZXQgc3Ry ZWFtIHNvIHdlIGNhbiAqLworCQkgICAgaWYgKCF0dG91dCkgewkvKiBtYWtlIGl0IHVuYnVmZmVy ZWQuICovCisJCQlwZXJyb3IoImZkb3BlbiBmYWlsdXJlIik7CisJCQlyZXR1cm4oLTEpOworCQkg ICAgfQorCQkgICAgc2V0YnVmKHR0b3V0LE5VTEwpOworCQkgICAgY2tzdHJuY3B5KHR0bm1zdix0 dG5hbWUsREVWTkFNTEVOKTsKKwkJICAgIHhsb2NhbCA9ICpsY2wgPSAxOwkvKiBJdCdzIGxvY2Fs ICovCisJCSAgICBuZXRjb25uID0gMTsJLyogQ2FsbCBpdCBhIG5ldHdvcmsgY29ubmVjdGlvbiAq LworCQkgICAgdHRtZG0gPSBtb2RlbTsJLyogUmVtZW1iZXIgbmV0d29yayB0eXBlICovCisJCSAg ICB0dHlmZCA9IGZkaW47CisJCSAgICB0dHBpcGUgPSAxOworCQkgICAgZ290c2lncyA9IDA7CisJ CSAgICByZXR1cm4oMCk7CisJCX0KKwkgICAgfQorI2VuZGlmIC8qIE5FVENNRCAqLworI2VuZGlm IC8qIE5BTUVGRCAqLworCSAgICB4ID0gbmV0b3Blbih0dG5hbWUsIGxjbCwgbW9kZW0pOyAvKiAo c2VlIGNrY25ldC5oKSAqLworCSAgICBpZiAoeCA+IC0xKSB7CisJCWNrc3RybmNweSh0dG5tc3Ys dHRuYW1lLERFVk5BTUxFTik7CisJICAgIH0gZWxzZSBuZXRjb25uID0gMDsKKyNpZmRlZiBOQU1F RkQKKwl9CisjZW5kaWYgLyogTkFNRUZEICovCisKKyNpZmRlZiBzb255X25ld3MJCQkvKiBTb255 IE5FV1MgKi8KKwlpZiAoaW9jdGwodHR5ZmQsVElPQ0tHRVQsJmttX2V4dCkgPCAwKSB7IC8qIEdl dCBLYW5qaSBtb2RlICovCisJICAgIHBlcnJvcigidHRvcGVuIGVycm9yIGdldHRpbmcgS2Fuamkg bW9kZSAobmV0d29yaykiKTsKKwkgICAgZGVidWcoRjExMSwidHRvcGVuIGVycm9yIGdldHRpbmcg S2FuamkgbW9kZSIsIm5ldHdvcmsiLDApOworCSAgICBrbV9leHQgPSAtMTsJCS8qIE1ha2Ugc3Vy ZSB0aGlzIHN0YXlzIHVuZGVmaW5lZC4gKi8KKwl9CisjZW5kaWYgLyogc29ueV9uZXdzICovCisK Kwl4bG9jYWwgPSAqbGNsID0gMTsJCS8qIE5ldHdvcmsgY29ubmVjdGlvbnMgYXJlIGxvY2FsLiAq LworCWRlYnVnKEYxMDEsInR0b3BlbiBuZXQgeCIsIiIseCk7CisjaWZkZWYgQ09NTUVOVAorLyog TGV0IG5ldG9wZW4oKSBkbyB0aGlzICovCisJaWYgKHggPiAtMSAmJiAheDI1ZmQpCisJICB4ID0g dG5faW5pKCk7CQkJLyogSW5pdGlhbGl6ZSBURUxORVQgcHJvdG9jb2wgKi8KKyNlbmRpZiAvKiBD T01NRU5UICovCisJZ290c2lncyA9IDA7CisJcmV0dXJuKHgpOworICAgIH0gZWxzZSB7CQkJCS8q IFRlcm1pbmFsIGRldmljZSAqLworI2VuZGlmCS8qIE5FVENPTk4gKi8KKworI2lmZGVmIE5BTUVG RAorLyoKKyAgVGhpcyBjb2RlIGxldHMgeW91IGdpdmUgS2VybWl0IGFuIG9wZW4gZmlsZSBkZXNj cmlwdG9yIGZvciBhIHNlcmlhbAorICBjb21tdW5pY2F0aW9uIGRldmljZSwgcmF0aGVyIHRoYW4g YSBkZXZpY2UgbmFtZS4gIEtlcm1pdCBhc3N1bWVzIHRoYXQgdGhlCisgIGxpbmUgaXMgYWxyZWFk eSBvcGVuLCBsb2NrZWQsIGNvbmRpdGlvbmVkIHdpdGggdGhlIHJpZ2h0IHBhcmFtZXRlcnMsIGV0 Yy4KKyovCisJZm9yIChwID0gdHRuYW1lOyBpc2RpZ2l0KCpwKTsgcCsrKSA7IC8qIENoZWNrIGZv ciBhbGwtZGlnaXRzICovCisJaWYgKCpwID09ICdcMCcpIHsKKwkgICAgdHR5ZmQgPSBhdG9pKHR0 bmFtZSk7CS8qIElzIHRoZXJlIGEgd2F5IHRvIHRlc3QgaXQncyBvcGVuPyAqLworCSAgICBkZWJ1 ZyhGMTExLCJ0dG9wZW4gZ290IG9wZW4gZmQiLHR0bmFtZSx0dHlmZCk7CisJICAgIGNrc3RybmNw eSh0dG5tc3YsdHRuYW1lLERFVk5BTUxFTik7IC8qIFJlbWVtYmVyIHRoZSAibmFtZSIuICovCisJ ICAgIGlmICh0dHlmZCA+PSAwICYmIHR0eWZkIDwgMykgLyogSWYgaXQncyBzdGRpby4uLiAqLwor CSAgICAgIHhsb2NhbCA9ICpsY2wgPSAwOwkvKiB3ZSdyZSBpbiByZW1vdGUgbW9kZSAqLworCSAg ICBlbHNlCQkJLyogb3RoZXJ3aXNlICovCisJICAgICAgeGxvY2FsID0gKmxjbCA9IDE7CS8qIGxv Y2FsIG1vZGUuICovCisJICAgIG5ldGNvbm4gPSAwOwkJLyogQXNzdW1lIGl0J3Mgbm90IGEgbmV0 d29yay4gKi8KKwkgICAgdHZ0ZmxnID0gMDsJCQkvKiBNaWdodCBuZWVkIHRvIGluaXRpYWxpemUg bW9kZXMuICovCisJICAgIHR0bWRtID0gbW9kZW07CQkvKiBSZW1lbWJlciBtb2RlbSB0eXBlLiAq LworCSAgICBmZGZsYWcgPSAwOwkJCS8qIFN0ZGlvIG5vdCByZWRpcmVjdGVkLiAqLworCSAgICB0 dGZkZmxnID0gMTsJCS8qIEZsYWcgd2Ugd2VyZSBvcGVuZWQgdGhpcyB3YXkuICovCisJICAgIGRl YnVnKEYxMTEsInR0b3BlbiBub24tbmV0IHR0ZmRmbGciLHR0bmFtZSx0dGZkZmxnKTsKKwkgICAg ZGVidWcoRjEwMSwidHRvcGVuIG5vbi1uZXQgdHR5ZmQiLCIiLHR0eWZkKTsKKworI2lmZGVmIHNv bnlfbmV3cwkJCS8qIFNvbnkgTkVXUyAqLworCSAgICAvKiBHZXQgZGV2aWNlIEthbmppIG1vZGUg Ki8KKwkgICAgaWYgKGlvY3RsKHR0eWZkLFRJT0NLR0VULCZrbV9leHQpIDwgMCkgeworCQlwZXJy b3IoInR0b3BlbiBlcnJvciBnZXR0aW5nIEthbmppIG1vZGUiKTsKKwkJZGVidWcoRjEwMSwidHRv cGVuIGVycm9yIGdldHRpbmcgS2FuamkgbW9kZSIsIiIsMCk7CisJCWttX2V4dCA9IC0xOwkJLyog TWFrZSBzdXJlIHRoaXMgc3RheXMgdW5kZWZpbmVkLiAqLworCSAgICB9CisjZW5kaWYgLyogc29u eV9uZXdzICovCisJICAgIGdvdHNpZ3MgPSAwOworCSAgICByZXR1cm4oMCk7CQkJLyogUmV0dXJu IHN1Y2Nlc3MgKi8KKwl9CisjZW5kaWYgLyogTkFNRUZEICovCisjaWZkZWYgTkVUQ09OTgorICAg IH0KKyNlbmRpZiAvKiBORVRDT05OICovCisKKy8qIEhlcmUgd2UgaGF2ZSB0byBvcGVuIGEgc2Vy aWFsIGRldmljZSBvZiB0aGUgZ2l2ZW4gbmFtZS4gKi8KKworICAgIG5ldGNvbm4gPSAwOwkJCS8q IFNvIGl0J3Mgbm90IGEgbmV0d29yayBjb25uZWN0aW9uICovCisgICAgb2NjdCA9IHNpZ25hbChT SUdJTlQsIGNjdHJhcCk7CS8qIFNldCBDb250cm9sLUMgdHJhcCwgc2F2ZSBvbGQgb25lICovCisg ICAgc2lnaW50X2lnbiA9IDA7CisKKyAgICB0dnRmbGcgPSAwOwkJCS8qIEZsYWcgZm9yIHVzZSBi eSB0dHZ0KCkuICovCisJCQkJLyogMCA9IHR0dnQgbm90IGNhbGxlZCB5ZXQgZm9yIHRoaXMgZGV2 aWNlICovCisKKyAgICBmZGZsYWcgPSAoIWlzYXR0eSgwKSB8fCAhaXNhdHR5KDEpKTsgLyogRmxh ZyBmb3Igc3RkaW8gcmVkaXJlY3RlZCAqLworICAgIGRlYnVnKEYxMDEsInR0b3BlbiBmZGZsYWci LCIiLGZkZmxhZyk7CisKKyAgICB0dG1kbSA9IG1vZGVtOyAgICAgICAgICAgICAgICAgICAgICAv KiBNYWtlIHRoaXMgYXZhaWxhYmxlIHRvIG90aGVyIGZucyAqLworICAgIHhsb2NhbCA9ICpsY2w7 ICAgICAgICAgICAgICAgICAgICAgIC8qIE1ha2UgdGhpcyBhdmFpbGFibGUgdG8gb3RoZXIgZm5z ICovCisKKy8qIENvZGUgZm9yIGhhbmRsaW5nIGJpZGlyZWN0aW9uYWwgdHR5IGxpbmVzIGdvZXMg aGVyZS4gKi8KKy8qIFVzZSBzcGVjaWZpZWQgbWV0aG9kIGZvciB0dXJuaW5nIG9mZiBsb2dpbnMg YW5kIHN1cHByZXNzaW5nIGdldHR5LiAqLworCisjaWZkZWYgQUNVQ05UUkwKKyAgICAvKiBTaG91 bGQgcHV0IGNhbGwgdG8gcHJpdl9vbigpIGhlcmUsIGJ1dCB0aGF0IHdvdWxkIGJlIHZlcnkgcmlz a3khICovCisgICAgYWN1Y250cmwoImRpc2FibGUiLHR0bmFtZSk7ICAgICAgICAgLyogYWN1Y250 cmwoKSBwcm9ncmFtLiAqLworICAgIC8qIGFuZCBwcml2X29mZigpIGhlcmUuLi4gKi8KKyNlbHNl CisjaWZkZWYgQVRUNzMwMAorICAgIGlmICgoYXR0bW9kZW0gJiBET0dFVFkpID09IDApICAgICAg IC8qIG9mZmdldHR5KCkgcHJvZ3JhbS4gKi8KKyAgICAgIGF0dG1vZGVtIHw9IG9mZmdldHR5KHR0 bmFtZSk7CS8qIFJlbWVtYmVyIHJlc3BvbnNlLiAgKi8KKyNlbmRpZiAvKiBBVFQ3MzAwICovCisj ZW5kaWYgLyogQUNVQ05UUkwgKi8KKworI2lmZGVmIE9QRU5GSVJTVAorLyoKKyAxOTg1LTIwMDE6 IG9wZW5zIGRldmljZSBmaXJzdCB0aGVuIGdldHMgbG9jazsgcmVhc29uOgorIEtlcm1pdCB1c3Vh bGx5IGhhcyB0byBydW4gc2V0dWlkIG9yIHNldGdpZCBpbiBvcmRlciB0byBjcmVhdGUgYSBsb2Nr ZmlsZS4KKyBJZiB5b3UgZ2l2ZSBhIFNFVCBMSU5FIGNvbW1hbmQgZm9yIGEgZGV2aWNlIHRoYXQg aGFwcGVucyB0byBiZSB5b3VyIGpvYidzCisgY29udHJvbGxpbmcgdGVybWluYWwsIEtlcm1pdCBk b2Vzbid0IGhhdmUgdG8gY3JlYXRlIGEgbG9ja2ZpbGUsIGFuZCBpbiBmYWN0Cisgc2hvdWxkIG5v dCBjcmVhdGUgb25lLCBhbmQgd291bGQgZmFpbCBpZiBpdCB0cmllZCB0byBpZiBpdCBkaWQgbm90 IGhhdmUgdGhlCisgcmVxdWlyZWQgcHJpdmlsZWdlcy4gIEJ1dCB5b3UgY2FuJ3QgZmluZCBvdXQg aWYgdHdvIHR0eSBkZXZpY2UgbmFtZXMgYXJlCisgZXF1aXZhbGVudCB1bnRpbCB5b3UgaGF2ZSBh IGZpbGUgZGVzY3JpcHRvciB0aGF0IHlvdSBjYW4gZ2l2ZSB0byB0dHluYW1lKCkuCisgQnV0IHRo aXMgY2FuIGNhdXNlIGEgcmFjZSBjb25kaXRpb24gYmV0d2VlbiBLZXJtaXQgYW5kIFttXWdldHR5 LiAgU28gc2VlCisgdGhlIFsjXWVsc2UgcGFydC4uLgorKi8gCisKKy8qCisgSW4gdGhlIGZvbGxv d2luZyBzZWN0aW9uLCB3ZSBvcGVuIHRoZSB0dHkgZGV2aWNlIGZvciByZWFkL3dyaXRlLgorIElm IGEgbW9kZW0gaGFzIGJlZW4gc3BlY2lmaWVkIHZpYSAic2V0IG1vZGVtIiBwcmlvciB0byAic2V0 IGxpbmUiCisgdGhlbiB0aGUgT19OREVMQVkgcGFyYW1ldGVyIGlzIHVzZWQgaW4gdGhlIG9wZW4s IHByb3ZpZGVkIHRoaXMgc3ltYm9sCisgaXMgZGVmaW5lZCAoZS5nLiBpbiBmY250bC5oKSwgc28g dGhhdCB0aGUgcHJvZ3JhbSBkb2VzIG5vdCBoYW5nIHdhaXRpbmcKKyBmb3IgY2FycmllciAod2hp Y2ggaW4gbW9zdCBjYXNlcyB3b24ndCBiZSBwcmVzZW50IGJlY2F1c2UgYSBjb25uZWN0aW9uCisg aGFzIG5vdCBiZWVuIGRpYWxlZCB5ZXQpLiAgT19OREVMQVkgaXMgcmVtb3ZlZCBsYXRlciBvbiBp biB0dG9wZW4oKS4gIEl0Cisgd291bGQgbWFrZSBtb3JlIHNlbnNlIHRvIGZpcnN0IGRldGVybWlu ZSBpZiB0aGUgbGluZSBpcyBsb2NhbCBiZWZvcmUKKyBkb2luZyB0aGlzLCBidXQgYmVjYXVzZSB0 dHluYW1lKCkgcmVxdWlyZXMgYSBmaWxlIGRlc2NyaXB0b3IsIHdlIGhhdmUKKyB0byBvcGVuIGl0 IGZpcnN0LiAgU2VlIGRvX29wZW4oKS4KKworIE5vdyBvcGVuIHRoZSBkZXZpY2UgdXNpbmcgdGhl IGRlc2lyZWQgdHJlYXRtZW50IG9mIGNhcnJpZXIuCisgSWYgY2FycmllciBpcyBSRVFVSVJFRCwg dGhlbiBvcGVuIGNvdWxkIGhhbmcgZm9yZXZlciwgc28gYW4gb3B0aW9uYWwKKyB0aW1lciBpcyBw cm92aWRlZC4gIElmIGNhcnJpZXIgaXMgbm90IHJlcXVpcmVkLCB0aGUgdGltZXIgc2hvdWxkIG5l dmVyCisgZ28gb2ZmLCBhbmQgc2hvdWxkIGRvIG5vIGhhcm0uLi4KKyovCisgICAgdHRvdG1vID0g MDsJCQkJLyogRmxhZyBubyB0aW1lb3V0ICovCisgICAgZGVidWcoRjEwMSwidHRvcGVuIHRpbW8i LCIiLHRpbW8pOworICAgIGRlYnVnKEYxMDEsInR0b3BlbiB4bG9jYWwiLCIiLHhsb2NhbCk7Cisg ICAgaWYgKHRpbW8gPiAwKSB7CisJaW50IHh4OworCXNhdmFsID0gc2lnbmFsKFNJR0FMUk0sdGlt ZXJoKTsJLyogVGltZWQsIHNldCB1cCB0aW1lci4gKi8KKwl4eCA9IGFsYXJtKHRpbW8pOwkJLyog VGltZWQgb3BlbigpICovCisJZGVidWcoRjEwMSwidHRvcGVuIGFsYXJtIiwiIix4eCk7CisJaWYg KAorI2lmZGVmIENLX1BPU0lYX1NJRworCSAgICBzaWdzZXRqbXAoc2pidWYsMSkKKyNlbHNlCisJ ICAgIHNldGptcChzamJ1ZikKKyNlbmRpZiAvKiBDS19QT1NJWF9TSUcgKi8KKwkgICAgKSB7CisJ ICAgIHR0b3RtbyA9IDE7CQkJLyogRmxhZyB0aW1lb3V0LiAqLworCX0gZWxzZSB0dHlmZCA9IGRv X29wZW4odHRuYW1lKTsKKwl0dGltb2ZmKCk7CisJZGVidWcoRjExMSwidHRvcGVuIiwibW9kZW0i LG1vZGVtKTsKKwlkZWJ1ZyhGMTAxLCJ0dG9wZW4gdHR5ZmQiLCIiLHR0eWZkKTsKKwlkZWJ1ZyhG MTAxLCJ0dG9wZW4gYWxhcm0gcmV0dXJuIiwiIix0dG90bW8pOworICAgIH0gZWxzZSB7CisJZXJy bm8gPSAwOworCXR0eWZkID0gZG9fb3Blbih0dG5hbWUpOworICAgIH0KKyAgICBkZWJ1ZyhGMTEx LCJ0dG9wZW4gdHR5ZmQiLHR0bmFtZSx0dHlmZCk7CisgICAgaWYgKHR0eWZkIDwgMCkgewkJCS8q IElmIGNvdWxkbid0IG9wZW4sIGZhaWwuICovCisJZGVidWcoRjEwMSwidHRvcGVuIGVycm5vIiwi IixlcnJubyk7CisJaWYgKGVycm5vID4gMCAmJiAhcXVpZXQpCisJICBwZXJyb3IodHRuYW1lKTsJ CS8qIFByaW50IG1lc3NhZ2UgKi8KKworI2lmZGVmIEFUVDczMDAKKwlpZiAoYXR0bW9kZW0gJiBE T0dFVFkpCQkvKiB3YXMgZ2V0dHkoMW0pIHJ1bm5pbmcgYmVmb3JlIHVzPyAqLworCSAgb25nZXR0 eSh0dG5tc3YpOwkJLyogeWVzLCByZXN0YXJ0IG9uIHR0eSBsaW5lICovCisJYXR0bW9kZW0gJj0g fkRPR0VUWTsJCS8qIG5vIHBob25lIGluIHVzZSwgZ2V0dHkgcmVzdG9yZWQgKi8KKyNlbHNlCisj aWZkZWYgQUNVQ05UUkwKKyAgICAgICAgLyogU2hvdWxkIHB1dCBjYWxsIHRvIHByaXZfb24oKSBo ZXJlLCBidXQgdGhhdCB3b3VsZCBiZSByaXNreSEgKi8KKwlhY3VjbnRybCgiZW5hYmxlIix0dG5h bWUpOwkvKiBhY3VjbnRybCgpIHByb2dyYW0uICovCisJLyogYW5kIHByaXZfb2ZmKCkgaGVyZS4u LiAqLworI2VuZGlmIC8qIEFDVU5UUkwgKi8KKyNlbmRpZiAvKiBBVFQ3MzAwICovCisKKwlzaWdu YWwoU0lHSU5ULG9jY3QpOwkJLyogUHV0IG9sZCBDdHJsLUMgdHJhcCBiYWNrLiAqLworCWlmIChl cnJubyA9PSBFQUNDRVMpIHsJCS8qIERldmljZSBpcyBwcm90ZWN0ZWQgYWdhaW5zdCB1c2VyICov CisJICAgIGRlYnVnKEYxMTAsInR0b3BlbiBFQUNDRVNTIix0dG5hbWUsMCk7IC8qIFJldHVybiAt NCAqLworCSAgICByZXR1cm4oLTQpOworCX0gZWxzZSByZXR1cm4odHRvdG1vID8gLTIgOiAtMSk7 IC8qIE90aGVyd2lzZSAtMiBpZiB0aW1lb3V0LCBvciAtMSAqLworICAgIH0KKworI2lmZGVmIFFO WAorICAgIHsKKwlleHRlcm4gaW50IHFueHBvcnRsb2NrOworCXggPSBxbnhvcGVuY291bnQoKTsK KwlkZWJ1ZyhGMTAxLCJ0dG9wZW4gcW54b3BlbmNvdW50IiwiIix4KTsKKwlkZWJ1ZyhGMTAxLCJ0 dG9wZW4gcW54cG9ydGxvY2siLCIiLHFueHBvcnRsb2NrKTsKKwlpZiAoeCA8IDAgJiYgcW54cG9y dGxvY2spIHsKKwkgICAgdHRjbG9zKDApOworCSAgICBwcmludGYoIj9DYW4ndCBnZXQgcG9ydCBv cGVuIGNvdW50XG4iKTsKKwkgICAgcHJpbnRmKCIoVHJ5IGFnYWluIHdpdGggU0VUIFFOWC1QT1JU LUxPQ0sgT0ZGKVxuIik7CisJICAgIHJldHVybigtMSk7CQkJLyogSW5kaWNhdGUgZGV2aWNlIGlz IGluIHVzZSAqLworCX0KKwlpZiAoeCA+IDEpIHsJCQkvKiAxID09IG1lICovCisJICAgIGlmIChx bnhwb3J0bG9jaykKKwkgICAgICB0dGNsb3MoMCk7CisJICAgICAgcmV0dXJuKC0yKTsJCS8qIElu ZGljYXRlIGRldmljZSBpcyBpbiB1c2UgKi8KKwkgICAgZWxzZSBpZiAoIXF1aWV0KQorCSAgICAg IHByaW50ZigiV0FSTklORzogXCIlc1wiIGxvb2tzIGJ1c3kuLi5cbiIsdHRkZXYpOworCX0KKyAg ICB9CisjZW5kaWYgLyogUU5YICovCisKKyNpZmRlZiBQbGFuOQorICAgIC8qIHRha2UgdGhpcyBv cHBvcnR1bml0eSB0byBvcGVuIHRoZSBjb250cm9sIGNoYW5uZWwgKi8KKyAgICBpZiAocDlvcGVu dHR5Y3RsKHR0bmFtZSkgPCAwKQorI2Vsc2UKKyAgICAvKiBNYWtlIHN1cmUgaXQncyBhIHJlYWwg dHR5LiAqLworICAgIGlmICghdHRmZGZsZyAmJiAhaXNhdHR5KHR0eWZkKSAmJiBzdHJjbXAodHRu YW1lLCIvZGV2L251bGwiKSkKKyNlbmRpZiAvKiBQbGFuOSAqLworICAgICAgeworCWZwcmludGYo c3RkZXJyLCIlcyBpcyBub3QgYSB0ZXJtaW5hbCBkZXZpY2VcbiIsdHRuYW1lKTsKKwlkZWJ1ZyhG MTExLCJ0dG9wZW4gbm90IGEgdHR5Iix0dG5hbWUsZXJybm8pOworCWNsb3NlKHR0eWZkKTsKKwl0 dHlmZCA9IC0xOworCXdhc2Nsb3NlZCA9IDE7CisJc2lnbmFsKFNJR0lOVCxvY2N0KTsKKwlyZXR1 cm4oLTEpOworICAgIH0KKworI2lmZGVmIGFlZ2lzCisJLyogQXBvbGxvIEMgcnVudGltZSBjbGFp bXMgdGhhdCBjb25zb2xlIHBhZHMgYXJlIHR0eSBkZXZpY2VzLCB3aGljaAorCSAqIGlzIHJlYXNv bmFibGUsIGJ1dCB0aGV5IGFyZW4ndCBhbnkgZ29vZCBmb3IgcGFja2V0IHRyYW5zZmVyLiAqLwor CWlvc18kaW5xX3R5cGVfdWlkKChzaG9ydCl0dHlmZCwgdHR5dWlkLCBzdCk7CisJaWYgKHN0LmFs bCAhPSBzdGF0dXNfJG9rKSB7CisJICAgIGZwcmludGYoc3RkZXJyLCAicHJvYmxlbSBnZXR0aW5n IHR0eSBvYmplY3QgdHlwZTogIik7CisJICAgIGVycm9yXyRwcmludChzdCk7CisJfSBlbHNlIGlm ICh0dHl1aWQgIT0gc2lvXyR1aWQpIHsgLyogcmVqZWN0IG5vbi1TSU8gbGluZXMgKi8KKwkgICAg Y2xvc2UodHR5ZmQpOyB0dHlmZCA9IC0xOworCSAgICB3YXNjbG9zZWQgPSAxOworCSAgICBlcnJu byA9IEVOT1RUWTsgcGVycm9yKHR0bmFtZSk7CisJICAgIHNpZ25hbChTSUdJTlQsb2NjdCk7CisJ ICAgIHJldHVybigtMSk7CisJfQorI2VuZGlmIC8qIGFlZ2lzICovCisKKyAgICBzaWdpbnRfaWdu ID0gKG9jY3QgPT0gU0lHX0lHTikgPyAxIDogMDsKKworICAgIGNrc3RybmNweSh0dG5tc3YsdHRu YW1lLERFVk5BTUxFTik7CS8qIEtlZXAgY29weSBvZiBuYW1lIGxvY2FsbHkuICovCisKKy8qIENh bGxlciB3YW50cyB1cyB0byBmaWd1cmUgb3V0IGlmIGxpbmUgaXMgY29udHJvbGxpbmcgdHR5ICov CisKKyAgICBpZiAoKmxjbCA8IDApIHsKKyAgICAgICAgaWYgKHN0cmNtcCh0dG5hbWUsQ1RUTkFN KSA9PSAwKSB7IC8qICIvZGV2L3R0eSIgYWx3YXlzIHJlbW90ZSAqLworICAgICAgICAgICAgeGxv Y2FsID0gMDsKKwkgICAgZGVidWcoRjExMSwidHRvcGVuIHR0bmFtZT1DVFROQU0iLHR0bmFtZSx4 bG9jYWwpOworICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcCh0dG5hbWUsY3R0bmFtKSA9PSAwKSB7 CisgICAgICAgICAgICB4bG9jYWwgPSAwOworCSAgICBkZWJ1ZyhGMTExLCJ0dG9wZW4gdHRuYW1l PWN0dG5hbSIsdHRuYW1lLHhsb2NhbCk7CisJfSBlbHNlIGlmIChjdHRuYW1bMF0pIHsKKyNpZmRl ZiBCRUJPWF9EUjcKKyAgICAgICAgICAgIHggPSB0dG5tc3Y7CQkJLyogdHR5bmFtZSgpIGlzIGJy b2tlbiAqLworI2Vsc2UKKyAgICAgICAgICAgIHggPSB0dHluYW1lKHR0eWZkKTsgICAgICAgICAv KiBHZXQgcmVhbCBuYW1lIG9mIHR0bmFtZS4gKi8KKyNlbmRpZiAvKiBCRUJPWF9EUjcgKi8KKwkg ICAgaWYgKCF4KSB4ID0gIiI7CisJICAgIGlmICgqeCkKKwkgICAgICB4bG9jYWwgPSAoKHN0cm5j bXAoeCxjdHRuYW0sREVWTkFNTEVOKSA9PSAwKSA/IDAgOiAxKTsKKwkgICAgZWxzZQorCSAgICAg IHhsb2NhbCA9IDE7CisgICAgICAgICAgICBkZWJ1ZyhGMTExLCJ0dG9wZW4gdHR5bmFtZSh0dHlm ZCkgeGxvY2FsIix4LHhsb2NhbCk7CisgICAgICAgIH0KKyAgICB9CisKKyNpZm5kZWYgTk9GRFpF Uk8KKy8qIE5vdGUsIHRoZSBmb2xsb3dpbmcgY29kZSB3YXMgYWRkZWQgc28gdGhhdCBVbml4ICJp ZGxlLWxpbmUiIHNub29wZXJzICovCisvKiB3b3VsZCBub3QgdGhpbmsgS2VybWl0IHdhcyBpZGxl IHdoZW4gaXQgd2FzIHRyYW5zZmVycmluZyBmaWxlcywgYW5kICovCisvKiBtYXliZSBsb2cgcGVv cGxlIG91dC4gKi8KKyAgICBpZiAoeGxvY2FsID09IDApIHsJCQkvKiBSZW1vdGUgbW9kZSAqLwor CWlmIChmZGZsYWcgPT0gMCkgewkJLyogU3RhbmRhcmQgaS9vIGlzIG5vdCByZWRpcmVjdGVkICov CisJICAgIGRlYnVnKEYxMDAsInR0b3BlbiBzZXR0aW5nIHR0eWZkID0gMCIsIiIsMCk7CisjaWZk ZWYgTFlOWE9TCisJICAgIC8qIE9uIEx5bnggT1MsIGZkIDAgaXMgb3BlbiBmb3IgcmVhZCBvbmx5 LiAqLworCSAgICBkdXAyKHR0eWZkLDApOworI2VuZGlmIC8qIExZTlhPUyAqLworCSAgICBjbG9z ZSh0dHlmZCk7CQkvKiBVc2UgZmlsZSBkZXNjcmlwdG9yIDAgKi8KKwkgICAgdHR5ZmQgPSAwOwor CX0gZWxzZSB7CQkJLyogU3RhbmRhcmQgaS9vIGlzIHJlZGlyZWN0ZWQgKi8KKwkgICAgZGVidWco RjEwMSwidHRvcGVuIHN0ZGlvIHJlZGlyZWN0ZWQiLCIiLHR0eWZkKTsKKwl9CisgICAgfQorI2Vu ZGlmIC8qIE5PRkRaRVJPICovCisKKy8qIE5vdyBjaGVjayBpZiBsaW5lIGlzIGxvY2tlZCAtLSBp ZiBzbyBmYWlsLCBlbHNlIGxvY2sgZm9yIG91cnNlbHZlcyAqLworLyogTm90ZTogQWZ0ZXIgaGF2 aW5nIGRvbmUgdGhpcywgZG9uJ3QgZm9yZ2V0IHRvIGRlbGV0ZSB0aGUgbG9jayBpZiB5b3UgKi8K Ky8qIGxlYXZlIHR0b3BlbigpIHdpdGggYW4gZXJyb3IgY29uZGl0aW9uLiAqLworCisgICAgbGtm ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2hlY2sgbG9jayAqLworICAgIGlm ICh4bG9jYWwgPiAwKSB7CisJaW50IHh4OyBpbnQgeHBpZDsKKyAgICAgICAgaWYgKCh4eCA9IHR0 bG9jayh0dG5hbWUpKSA8IDApIHsgLyogQ2FuJ3QgbG9jayBpdC4gKi8KKyAgICAgICAgICAgIGRl YnVnKEYxMTEsInR0b3BlbiB0dGxvY2sgZmFpbHMiLHR0bmFtZSx4eCk7CisJICAgIC8qIFdBUk5J TkcgLSBUaGlzIGNsb3NlKCkgY2FuIGhhbmcgaWYgdHR5IGlzIGFuIGVtcHR5IHNvY2tldC4uLiAq LworICAgICAgICAgICAgY2xvc2UodHR5ZmQpOwkJLyogQ2xvc2UgdGhlIGRldmljZS4gKi8KKwkg ICAgdHR5ZmQgPSAtMTsJCQkvKiBFcmFzZSBpdHMgZmlsZSBkZXNjcmlwdG9yLiAqLworCSAgICB3 YXNjbG9zZWQgPSAxOworCSAgICBzaWduYWwoU0lHSU5ULG9jY3QpOwkvKiBQdXQgb2xkIFNJR0lO VCBiYWNrLiAqLworCSAgICBzaWdpbnRfaWduID0gKG9jY3QgPT0gU0lHX0lHTikgPyAxIDogMDsK KwkgICAgaWYgKHh4ID09IC0yKSB7CQkvKiBJZiBsb2NrZmlsZSBzYXlzIGRldmljZSBpbiB1c2Us ICovCisjaWZuZGVmIE5PVVVDUAorCQlkZWJ1ZyhGMTExLCJ0dG9wZW4gcmVhZGluZyBsb2NrZmls ZSBwaWQiLGZsZm5hbSx4eCk7CisJCXhwaWQgPSB0dHJwaWQoZmxmbmFtKTsJLyogVHJ5IHRvIHJl YWQgcGlkIGZyb20gbG9ja2ZpbGUgKi8KKwkJaWYgKHhwaWQgPiAtMSkgewkvKiBJZiB3ZSBnb3Qg YSBwaWQgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKCFxdWlldCkKKwkJICAgICAgcHJpbnRm KCJMb2NrZWQgYnkgcHJvY2VzcyAlZFxuIix4cGlkKTsgLyogdGVsbCB0aGVtLiAqLworCQkgICAg c3ByaW50Zihsb2NrcGlkLCIlZCIseHBpZCk7CS8qIFJlY29yZCBpdCB0b28gKi8KKwkJICAgIGRl YnVnKEYxMTAsInR0b3BlbiBsb2NrcGlkIixsb2NrcGlkLDApOworCQl9IGVsc2UgaWYgKCpmbGZu YW0pIHsKKwkJICAgIGV4dGVybiBjaGFyICpESVJDTUQ7CisJCSAgICBjaGFyICpwID0gTlVMTDsK KwkJICAgIGludCB4OworCQkgICAgeCA9IChpbnQpc3RybGVuKGZsZm5hbSkgKyAoaW50KXN0cmxl bihESVJDTUQpICsgMjsKKwkJICAgIHAgPSBtYWxsb2MoeCk7CS8qIFByaW50IGEgZGlyZWN0b3J5 IGxpc3RpbmcuICovCisvKgorICBOb3RlOiBwcml2X29uKCkgd29uJ3QgaGVscCBoZXJlLCBiZWNh dXNlIHdlIGRvIG5vdCBwYXNzIHByaXZzIGFsb25nIHRvCisgIHRvIGluZmVyaW9yIHByb2Nlc3Nl cywgaW4gdGhpcyBjYXNlIGxzLiAgU28gaWYgdGhlIHJlYWwgdXNlciBkb2VzIG5vdCBoYXZlCisg IGRpcmVjdG9yeS1saXN0aW5nIGFjY2VzcyB0byB0aGUgbG9ja2ZpbGUgZGlyZWN0b3J5LCB0aGlz IHdpbGwgcmVzdWx0IGluCisgIHNvbWV0aGluZyBsaWtlICJub3QgZm91bmQiLiAgVGhhdCdzIHdo eSB3ZSB0cnkgdGhpcyBvbmx5IGFzIGEgbGFzdCByZXNvcnQuCisqLworCQkgICAgaWYgKHApIHsJ CS8qIElmIHdlIGdvdCB0aGUgc3BhY2UuLi4gKi8KKwkJCWNrbWFrbXNnKHAseCxESVJDTUQsIiAi LGZsZm5hbSxOVUxMKTsKKwkJCXpzeXNjbWQocCk7CS8qIEdldCBsaXN0aW5nLiAqLworCQkJaWYg KHApIHsJLyogZnJlZSB0aGUgc3BhY2UgKi8KKwkJCSAgICBmcmVlKHApOworCQkJICAgIHAgPSBO VUxMOworCQkJfQorCQkgICAgfQorCQl9CisjZW5kaWYgLyogTk9VVUNQICovCisJCXJldHVybigt NSk7CQkvKiBDb2RlIGZvciBkZXZpY2UgaW4gdXNlICovCisJICAgIH0gZWxzZSByZXR1cm4oLTMp OwkJLyogQWNjZXNzIGRlbmllZCAqLworICAgICAgICB9IGVsc2UgbGtmID0gMTsKKyAgICB9Cisj ZWxzZSAgLyogT1BFTkZJUlNUICovCisKKy8qCisgIDI3IE9jdCAyMDAxOiBOZXcgc2ltcGxlciBj b2RlIHRoYXQgZ2V0cyB0aGUgbG9jayBmaXJzdCBhbmQgdGhlbiBvcGVucyB0aGUKKyAgZGV2aWNl LCB3aGljaCBlbGltaW5hdGVzIHRoZSByYWNlIGNvbmRpdGlvbi4gIFRoZSBkb3duc2lkZSBpcyB5 b3UgY2FuIG5vCisgIGxvbmdlciBzYXkgInNldCBsaW5lIC9kZXYvdHR5cDAiIG9yIHdoYXRldmVy LCB3aGVyZSAvZGV2L3R0eXAwIGlzIHlvdXIgbG9naW4KKyAgdGVybWluYWwsIHdpdGhvdXQgdHJ5 aW5nIHRvIGNyZWF0ZSBhIGxvY2tmaWxlLCB3aGljaCBmYWlscyBpZiBDLUtlcm1pdCBsYWNrcwor ICBwcml2cywgYW5kIGlmIGl0IHN1Y2NlZWRzLCBpdCBoYXMgY3JlYXRlZCBhIGxvY2tmaWxlIHdo ZXJlIGl0IGRpZG4ndCBjcmVhdGUKKyAgb25lIGJlZm9yZS4KKyovCisgICAgeGxvY2FsID0gKmxj bDsJCQkvKiBJcyB0aGUgZGV2aWNlIG15IGxvZ2luIHRlcm1pbmFsPyAqLworICAgIGRlYnVnKEYx MTEsInR0b3BlbiB4bG9jYWwiLCJBIix4bG9jYWwpOworICAgIGZuYW0gPSB0dG5hbWU7CisgICAg aWYgKHN0cmNtcCh0dG5hbWUsQ1RUTkFNKSAmJiBuZXRjb25uID09IDApIHsKKwlpZiAoemZucWZw KHR0bmFtZSxERVZOQU1MRU4rMSxmdWxsbmFtZSkpIHsKKwkgICAgaWYgKChpbnQpc3RybGVuKGZ1 bGxuYW1lKSA+IDApCisJICAgICAgZm5hbSA9IGZ1bGxuYW1lOworCX0KKyAgICB9CisgICAgZGVi dWcoRjExMCwidHRvcGVuIGZuYW0iLGZuYW0sMCk7CisgICAgaWYgKHhsb2NhbCA8IDApIHsKKwl4 bG9jYWwgPSAoc3RyY21wKGZuYW0sQ1RUTkFNKSAhPSAwKTsKKyAgICB9CisgICAgZGVidWcoRjEx MSwidHRvcGVuIHhsb2NhbCIsIkIiLHhsb2NhbCk7CisKKyAgICBsa2YgPSAwOyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBObyBsb2NrIHlldCAqLworICAgIGlmICh4bG9jYWwgPiAwKSB7 CQkJLyogSWYgbm90Li4uICovCisJaW50IHh4OyBpbnQgeHBpZDsKKwl4eCA9IHR0bG9jayhmbmFt KTsJCS8qIFRyeSB0byBsb2NrIGl0LiAqLworCWRlYnVnKEYxMDEsInR0b3BlbiB0dGxvY2siLCIi LHh4KTsKKyAgICAgICAgaWYgKHh4IDwgMCkgewkJCS8qIENhbid0IGxvY2sgaXQuICovCisgICAg ICAgICAgICBkZWJ1ZyhGMTExLCJ0dG9wZW4gdHRsb2NrIGZhaWxzIixmbmFtLHh4KTsKKwkgICAg aWYgKHh4ID09IC0yKSB7CQkvKiBJZiBsb2NrZmlsZSBzYXlzIGRldmljZSBpbiB1c2UsICovCisj aWZuZGVmIE5PVVVDUAorCQlkZWJ1ZyhGMTExLCJ0dG9wZW4gcmVhZGluZyBsb2NrZmlsZSBwaWQi LGZsZm5hbSx4eCk7CisJCXhwaWQgPSB0dHJwaWQoZmxmbmFtKTsJLyogVHJ5IHRvIHJlYWQgcGlk IGZyb20gbG9ja2ZpbGUgKi8KKwkJaWYgKHhwaWQgPiAtMSkgewkvKiBJZiB3ZSBnb3QgYSBwaWQg Ki8KKyAgICAgICAgICAgICAgICAgICAgaWYgKCFxdWlldCkKKwkJICAgICAgcHJpbnRmKCJMb2Nr ZWQgYnkgcHJvY2VzcyAlZFxuIix4cGlkKTsgLyogdGVsbCB0aGVtLiAqLworCQkgICAgY2tzdHJu Y3B5KGxvY2twaWQsY2tpdG9hKHhwaWQpLDE2KTsKKwkJICAgIGRlYnVnKEYxMTAsInR0b3BlbiBs b2NrcGlkIixsb2NrcGlkLDApOworI2lmbmRlZiBOT1BVU0gKKwkJfSBlbHNlIGlmIChmbGZuYW1b MF0gJiYgIW5vcHVzaCkgeworCQkgICAgZXh0ZXJuIGNoYXIgKkRJUkNNRDsKKwkJICAgIGNoYXIg KnAgPSBOVUxMOworCQkgICAgaW50IHg7CisJCSAgICB4ID0gKGludClzdHJsZW4oZmxmbmFtKSAr IChpbnQpc3RybGVuKERJUkNNRCkgKyAyOworCQkgICAgcCA9IG1hbGxvYyh4KTsJLyogUHJpbnQg YSBkaXJlY3RvcnkgbGlzdGluZy4gKi8KKy8qCisgIE5vdGU6IHByaXZfb24oKSB3b24ndCBoZWxw IGhlcmUsIGJlY2F1c2Ugd2UgZG8gbm90IHBhc3MgcHJpdnMgYWxvbmcgdG8KKyAgdG8gaW5mZXJp b3IgcHJvY2Vzc2VzLCBpbiB0aGlzIGNhc2UgbHMuICBTbyBpZiB0aGUgcmVhbCB1c2VyIGRvZXMg bm90IGhhdmUKKyAgZGlyZWN0b3J5LWxpc3RpbmcgYWNjZXNzIHRvIHRoZSBsb2NrZmlsZSBkaXJl Y3RvcnksIHRoaXMgd2lsbCByZXN1bHQgaW4KKyAgc29tZXRoaW5nIGxpa2UgIm5vdCBmb3VuZCIu ICBUaGF0J3Mgd2h5IHdlIHRyeSB0aGlzIG9ubHkgYXMgYSBsYXN0IHJlc29ydC4KKyovCisJCSAg ICBpZiAocCkgewkJLyogSWYgd2UgZ290IHRoZSBzcGFjZS4uLiAqLworCQkJY2ttYWttc2cocCx4 LERJUkNNRCwiICIsZmxmbmFtLE5VTEwpOworCQkJenN5c2NtZChwKTsJLyogR2V0IGxpc3Rpbmcu ICovCisJCQlpZiAocCkgewkvKiBmcmVlIHRoZSBzcGFjZSAqLworCQkJICAgIGZyZWUocCk7CisJ CQkgICAgcCA9IE5VTEw7CisJCQl9CisJCSAgICB9CisjZW5kaWYgLyogTk9QVVNIICovCisJCX0K KyNlbmRpZiAvKiBOT1VVQ1AgKi8KKwkJcmV0dXJuKC01KTsJCS8qIENvZGUgZm9yIGRldmljZSBp biB1c2UgKi8KKwkgICAgfSBlbHNlIHJldHVybigtMyk7CQkvKiBBY2Nlc3MgZGVuaWVkICovCisg ICAgICAgIH0gZWxzZSBsa2YgPSAxOworICAgIH0KKyAgICAvKiBIYXZlIGxvY2sgLS0gbm93IGl0 J3Mgc2FmZSB0byBvcGVuIHRoZSBkZXZpY2UgKi8KKworICAgIGRlYnVnKEYxMDEsInR0b3BlbiBs a2YiLCIiLGxrZik7CisgICAgZGVidWcoRjEwMSwidHRvcGVuIHRpbW8iLCIiLHRpbW8pOworCisg ICAgdHRvdG1vID0gMDsJCQkJLyogRmxhZyBubyB0aW1lb3V0ICovCisgICAgaWYgKHRpbW8gPiAw KSB7CisJaW50IHh4OworCXNhdmFsID0gc2lnbmFsKFNJR0FMUk0sdGltZXJoKTsJLyogVGltZWQs IHNldCB1cCB0aW1lci4gKi8KKwl4eCA9IGFsYXJtKHRpbW8pOwkJLyogVGltZWQgb3BlbigpICov CisJZGVidWcoRjEwMSwidHRvcGVuIGFsYXJtIiwiIix4eCk7CisJaWYgKAorI2lmZGVmIENLX1BP U0lYX1NJRworCSAgICBzaWdzZXRqbXAoc2pidWYsMSkKKyNlbHNlCisJICAgIHNldGptcChzamJ1 ZikKKyNlbmRpZiAvKiBDS19QT1NJWF9TSUcgKi8KKwkgICAgKSB7CisJICAgIHR0b3RtbyA9IDE7 CQkJLyogRmxhZyB0aW1lb3V0LiAqLworCX0gZWxzZSB7CisJICAgIHR0eWZkID0gZG9fb3Blbihm bmFtKTsKKwl9CisJdHRpbW9mZigpOworCWRlYnVnKEYxMTEsInR0b3BlbiB0aW1lZCB0dHlmZCIs Zm5hbSx0dHlmZCk7CisgICAgfSBlbHNlIHsKKwllcnJubyA9IDA7CisJdHR5ZmQgPSBkb19vcGVu KGZuYW0pOworCWRlYnVnKEYxMTEsInR0b3BlbiB1bnRpbWVkIHR0eWZkIixmbmFtLHR0eWZkKTsK KyAgICB9CisgICAgaWYgKHR0eWZkIDwgMCkgewkJCS8qIElmIGNvdWxkbid0IG9wZW4sIGZhaWwu ICovCisJZGVidWcoRjExMSwidHRvcGVuIGVycm5vIixmbmFtLGVycm5vKTsKKwlkZWJ1ZyhGMTEx LCJ0dG9wZW4geGxvY2FsIiwiQyIseGxvY2FsKTsKKwlpZiAoeGxvY2FsID09IDApIHsKKwkgICAg ZGVidWcoRjEwMCwidHRvcGVuIHN1YnN0aXR1dGluZyAwIiwiIiwwKTsKKwkgICAgdHR5ZmQgPSAw OworCX0gZWxzZSB7CisJICAgIGlmIChlcnJubyA+IDAgJiYgIXF1aWV0KSB7CisJICAgICAgICBk ZWJ1ZyhGMTExLCJ0dG9wZW4gcGVycm9yIixmbmFtLGVycm5vKTsKKwkJcGVycm9yKGZuYW0pOwkJ LyogUHJpbnQgbWVzc2FnZSAqLworCSAgICB9CisJICAgIGlmICh0dHVubGNrKCkpICAgICAgICAg ICAgICAgICAgLyogUmVsZWFzZSB0aGUgbG9jayBmaWxlICovCisJICAgICAgZnByaW50ZihzdGRl cnIsIldhcm5pbmcsIHByb2JsZW0gcmVsZWFzaW5nIGxvY2tcclxuIik7CisJfQorICAgIH0KKwor ICAgIGlmICh0dHlmZCA8IDApIHsJCQkvKiB0dHlmZCBpcyBzdGlsbCA8IDA/ICovCisjaWZkZWYg QVRUNzMwMAorCWlmIChhdHRtb2RlbSAmIERPR0VUWSkJCS8qIHdhcyBnZXR0eSgxbSkgcnVubmlu ZyBiZWZvcmUgdXM/ICovCisJICBvbmdldHR5KHR0bm1zdik7CQkvKiB5ZXMsIHJlc3RhcnQgb24g dHR5IGxpbmUgKi8KKwlhdHRtb2RlbSAmPSB+RE9HRVRZOwkJLyogbm8gcGhvbmUgaW4gdXNlLCBn ZXR0eSByZXN0b3JlZCAqLworI2Vsc2UKKyNpZmRlZiBBQ1VDTlRSTAorICAgICAgICAvKiBTaG91 bGQgcHV0IGNhbGwgdG8gcHJpdl9vbigpIGhlcmUsIGJ1dCB0aGF0IHdvdWxkIGJlIHJpc2t5ISAq LworCWFjdWNudHJsKCJlbmFibGUiLGZuYW0pOwkvKiBhY3VjbnRybCgpIHByb2dyYW0uICovCisJ LyogYW5kIHByaXZfb2ZmKCkgaGVyZS4uLiAqLworI2VuZGlmIC8qIEFDVU5UUkwgKi8KKyNlbmRp ZiAvKiBBVFQ3MzAwICovCisKKwlzaWduYWwoU0lHSU5ULG9jY3QpOwkJLyogUHV0IG9sZCBDdHJs LUMgdHJhcCBiYWNrLiAqLworCWlmIChlcnJubyA9PSBFQUNDRVMpIHsJCS8qIERldmljZSBpcyBw cm90ZWN0ZWQgYWdhaW5zdCB1c2VyICovCisJICAgIGRlYnVnKEYxMTAsInR0b3BlbiBFQUNDRVNT IixmbmFtLDApOyAvKiBSZXR1cm4gLTQgKi8KKwkgICAgcmV0dXJuKC00KTsKKwl9IGVsc2UgcmV0 dXJuKHR0b3RtbyA/IC0yIDogLTEpOyAvKiBPdGhlcndpc2UgLTIgaWYgdGltZW91dCwgb3IgLTEg Ki8KKyAgICB9CisKKy8qIE1ha2Ugc3VyZSBpdCdzIGEgcmVhbCB0dHkuICovCisKKyNpZmRlZiBQ bGFuOQorICAgIC8qIHRha2UgdGhpcyBvcHBvcnR1bml0eSB0byBvcGVuIHRoZSBjb250cm9sIGNo YW5uZWwgKi8KKyAgICBpZiAocDlvcGVudHR5Y3RsKGZuYW0pIDwgMCkgICAgICAgCisjZWxzZQor ICAgICAgaWYgKCF0dGZkZmxnICYmICFpc2F0dHkodHR5ZmQpICYmIHN0cmNtcChmbmFtLCIvZGV2 L251bGwiKSkKKyNlbmRpZiAvKiBQbGFuOSAqLworCXsKKwkgICAgZnByaW50ZihzdGRlcnIsIiVz IGlzIG5vdCBhIHRlcm1pbmFsIGRldmljZVxuIixmbmFtKTsKKwkgICAgZGVidWcoRjExMSwidHRv cGVuIG5vdCBhIHR0eSIsZm5hbSxlcnJubyk7CisJICAgIGlmICh0dHVubGNrKCkpCQkvKiBSZWxl YXNlIHRoZSBsb2NrIGZpbGUgKi8KKwkgICAgICBmcHJpbnRmKHN0ZGVyciwiV2FybmluZywgcHJv YmxlbSByZWxlYXNpbmcgbG9ja1xyXG4iKTsKKwkgICAgY2xvc2UodHR5ZmQpOworCSAgICB0dHlm ZCA9IC0xOworCSAgICB3YXNjbG9zZWQgPSAxOworCSAgICBzaWduYWwoU0lHSU5ULG9jY3QpOwor CSAgICByZXR1cm4oLTEpOworCX0KKworI2lmZGVmIGFlZ2lzCisgICAgLyoKKyAgICAgIEFwb2xs byBDIHJ1bnRpbWUgY2xhaW1zIHRoYXQgY29uc29sZSBwYWRzIGFyZSB0dHkgZGV2aWNlcywgd2hp Y2gKKyAgICAgIGlzIHJlYXNvbmFibGUsIGJ1dCB0aGV5IGFyZW4ndCBhbnkgZ29vZCBmb3IgcGFj a2V0IHRyYW5zZmVyLgorICAgICovCisgICAgaW9zXyRpbnFfdHlwZV91aWQoKHNob3J0KXR0eWZk LCB0dHl1aWQsIHN0KTsKKyAgICBpZiAoc3QuYWxsICE9IHN0YXR1c18kb2spIHsKKwlmcHJpbnRm KHN0ZGVyciwgInByb2JsZW0gZ2V0dGluZyB0dHkgb2JqZWN0IHR5cGU6ICIpOworCWVycm9yXyRw cmludChzdCk7CisgICAgfSBlbHNlIGlmICh0dHl1aWQgIT0gc2lvXyR1aWQpIHsJLyogUmVqZWN0 IG5vbi1TSU8gbGluZXMgKi8KKwljbG9zZSh0dHlmZCk7IHR0eWZkID0gLTE7CisJd2FzY2xvc2Vk ID0gMTsKKwllcnJubyA9IEVOT1RUWTsgcGVycm9yKGZuYW0pOworCXNpZ25hbChTSUdJTlQsb2Nj dCk7CisJcmV0dXJuKC0xKTsKKyAgICB9CisjZW5kaWYgLyogYWVnaXMgKi8KKworICAgIHNpZ2lu dF9pZ24gPSAob2NjdCA9PSBTSUdfSUdOKSA/IDEgOiAwOworCisgICAgY2tzdHJuY3B5KHR0bm1z dix0dG5hbWUsREVWTkFNTEVOKTsJLyogS2VlcCBjb3B5IG9mIG5hbWUgbG9jYWxseS4gKi8KKwor LyogQ2FsbGVyIHdhbnRzIHVzIHRvIGZpZ3VyZSBvdXQgaWYgbGluZSBpcyBjb250cm9sbGluZyB0 dHkgKi8KKworICAgIGlmICgqbGNsIDwgMCkgeworCWNoYXIgKiBzOworICAgICAgICBpZiAoc3Ry Y21wKGZuYW0sQ1RUTkFNKSA9PSAwKSB7IC8qICIvZGV2L3R0eSIgYWx3YXlzIHJlbW90ZSAqLwor ICAgICAgICAgICAgeGxvY2FsID0gMDsKKwkgICAgZGVidWcoRjExMSwidHRvcGVuIGZuYW09Q1RU TkFNIixmbmFtLHhsb2NhbCk7CisgICAgICAgIH0gZWxzZSBpZiAoc3RyY21wKGZuYW0sY3R0bmFt KSA9PSAwKSB7CisgICAgICAgICAgICB4bG9jYWwgPSAwOworCSAgICBkZWJ1ZyhGMTExLCJ0dG9w ZW4gZm5hbT1jdHRuYW0iLGZuYW0seGxvY2FsKTsKKwl9IGVsc2UgaWYgKGN0dG5hbVswXSkgewor I2lmZGVmIEJFQk9YX0RSNworICAgICAgICAgICAgcyA9IHR0bm1zdjsJCQkvKiB0dHluYW1lKCkg aXMgYnJva2VuICovCisjZWxzZQorICAgICAgICAgICAgcyA9IHR0eW5hbWUodHR5ZmQpOyAgICAg ICAgIC8qIEdldCByZWFsIG5hbWUgb2YgdHRuYW1lLiAqLworI2VuZGlmIC8qIEJFQk9YX0RSNyAq LworCSAgICBpZiAoIXMpIHMgPSAiIjsKKwkgICAgaWYgKCpzKQorCSAgICAgIHhsb2NhbCA9ICgo c3RybmNtcChzLGN0dG5hbSxERVZOQU1MRU4pID09IDApID8gMCA6IDEpOworCSAgICBlbHNlCisJ ICAgICAgeGxvY2FsID0gMTsKKyAgICAgICAgICAgIGRlYnVnKEYxMTEsInR0b3BlbiB0dHluYW1l KHR0eWZkKSB4bG9jYWwiLHMseGxvY2FsKTsKKyAgICAgICAgfQorICAgIH0KKworI2lmbmRlZiBO T0ZEWkVSTworLyogTm90ZSwgdGhlIGZvbGxvd2luZyBjb2RlIHdhcyBhZGRlZCBzbyB0aGF0IFVu aXggImlkbGUtbGluZSIgc25vb3BlcnMgKi8KKy8qIHdvdWxkIG5vdCB0aGluayBLZXJtaXQgd2Fz IGlkbGUgd2hlbiBpdCB3YXMgdHJhbnNmZXJyaW5nIGZpbGVzLCBhbmQgKi8KKy8qIG1heWJlIGxv ZyBwZW9wbGUgb3V0LiAqLworICAgIGlmICh4bG9jYWwgPT0gMCkgewkJCS8qIFJlbW90ZSBtb2Rl ICovCisJaWYgKGZkZmxhZyA9PSAwKSB7CQkvKiBTdGFuZGFyZCBpL28gaXMgbm90IHJlZGlyZWN0 ZWQgKi8KKwkgICAgZGVidWcoRjEwMCwidHRvcGVuIHNldHRpbmcgdHR5ZmQgPSAwIiwiIiwwKTsK KyNpZmRlZiBMWU5YT1MKKwkgICAgLyogT24gTHlueCBPUywgZmQgMCBpcyBvcGVuIGZvciByZWFk IG9ubHkuICovCisJICAgIGR1cDIodHR5ZmQsMCk7CisjZW5kaWYgLyogTFlOWE9TICovCisJICAg IGNsb3NlKHR0eWZkKTsJCS8qIFVzZSBmaWxlIGRlc2NyaXB0b3IgMCAqLworCSAgICB0dHlmZCA9 IDA7CisJfSBlbHNlIHsJCQkvKiBTdGFuZGFyZCBpL28gaXMgcmVkaXJlY3RlZCAqLworCSAgICBk ZWJ1ZyhGMTAxLCJ0dG9wZW4gc3RkaW8gcmVkaXJlY3RlZCIsIiIsdHR5ZmQpOworCX0KKyAgICB9 CisjZW5kaWYgLyogTk9GRFpFUk8gKi8KKyNlbmRpZiAvKiBPUEVORklSU1QgKi8KKworLyogR290 IHRoZSBsaW5lLCBub3cgc2V0IHRoZSBkZXNpcmVkIHZhbHVlIGZvciBsb2NhbC4gKi8KKworICAg IGlmICgqbGNsICE9IDApICpsY2wgPSB4bG9jYWw7CisKKy8qIFNvbWUgc3BlY2lhbCBzdHVmZiBm b3IgdjcuLi4gKi8KKworI2lmZGVmICBWNworI2lmbmRlZiBNSU5JWAorICAgIGlmIChrbWVtW1RU WV0gPCAwKSB7CQkvKiAgSWYgb3BlbiwgdGhlbiBza2lwIHRoaXMuICAqLworCXFhZGRyW1RUWV0g PSBpbml0cmF3cSh0dHlmZCk7ICAgLyogSW5pdCB0aGUgcXVldWUuICovCisJaWYgKChrbWVtW1RU WV0gPSBvcGVuKCIvZGV2L2ttZW0iLCAwKSkgPCAwKSB7CisJICAgIGZwcmludGYoc3RkZXJyLCAi Q2FuJ3QgcmVhZCAvZGV2L2ttZW0gaW4gdHRvcGVuLlxuIik7CisJICAgIHBlcnJvcigiL2Rldi9r bWVtIik7CisJICAgIGV4aXQoMSk7CisJfQorICAgIH0KKyNlbmRpZiAvKiAhTUlOSVggKi8KKyNl bmRpZiAvKiBWNyAqLworCisvKiBObyBmYWlsdXJlIHJldHVybnMgYWZ0ZXIgdGhpcyBwb2ludCAq LworCisjaWZkZWYgdWx0cml4CisgICAgaW9jdGwodHR5ZmQsIFRJT0NNT0RFTSwgJnRlbXApOwor I2lmZGVmIFRJT0NTSU5VU0UKKyAgICBpZiAoeGxvY2FsICYmIGlvY3RsKHR0eWZkLCBUSU9DU0lO VVNFLCBOVUxMKSA8IDApIHsKKwlpZiAoIXF1aWV0KQorCSAgcGVycm9yKGZuYW0pOworICAgIH0K KyNlbmRpZiAvKiBUSU9DU0lOVVNFICovCisjZW5kaWYgLyogdWx0cml4ICovCisKKy8qIEdldCB0 dHkgZGV2aWNlIHNldHRpbmdzICAqLworCisjaWZkZWYgQlNENDRPUlBPU0lYCQkJLyogUE9TSVgg Ki8KKyAgICB0Y2dldGF0dHIodHR5ZmQsJnR0b2xkKTsKKyAgICBkZWJ1ZyhGMTAxLCJ0dG9wZW4g dGNnZXRhdHRyIHR0b2xkLmNfbGZsYWciLCIiLHR0b2xkLmNfbGZsYWcpOworICAgIHRjZ2V0YXR0 cih0dHlmZCwmdHRyYXcpOworICAgIGRlYnVnKEYxMDEsInR0b3BlbiB0Y2dldGF0dHIgdHRyYXcu Y19sZmxhZyIsIiIsdHRyYXcuY19sZmxhZyk7CisgICAgdGNnZXRhdHRyKHR0eWZkLCZ0dHR2dCk7 CisgICAgZGVidWcoRjEwMSwidHRvcGVuIHRjZ2V0YXR0ciB0dHR2dC5jX2xmbGFnIiwiIix0dHR2 dC5jX2xmbGFnKTsKKyNlbHNlCQkJCQkvKiBCU0QsIFY3LCBhbmQgYWxsIG90aGVycyAqLworI2lm ZGVmIEFUVFNWCQkJCS8qIEFUJlQgVU5JWCAqLworICAgIGlvY3RsKHR0eWZkLFRDR0VUQSwmdHRv bGQpOworICAgIGRlYnVnKEYxMDEsInR0b3BlbiBpb2N0bCBUQ0dFVEEgdHRvbGQuY19sZmxhZyIs IiIsdHRvbGQuY19sZmxhZyk7CisgICAgaW9jdGwodHR5ZmQsVENHRVRBLCZ0dHJhdyk7CisgICAg aW9jdGwodHR5ZmQsVENHRVRBLCZ0dHR2dCk7CisjZWxzZQorI2lmZGVmIEJFTExWMTAKKyAgICBp b2N0bCh0dHlmZCxUSU9DR0VUUCwmdHRvbGQpOworICAgIGRlYnVnKEYxMDEsInR0b3BlbiBCRUxM VjEwIHR0b2xkLnNnX2ZsYWdzIiwiIix0dG9sZC5zZ19mbGFncyk7CisgICAgaW9jdGwodHR5ZmQs VElPQ0dERVYsJnRkb2xkKTsKKyAgICBkZWJ1ZyhGMTAxLCJ0dG9wZW4gQkVMTFYxMCB0ZG9sZC5m bGFncyIsIiIsdGRvbGQuZmxhZ3MpOworI2Vsc2UKKyAgICBndHR5KHR0eWZkLCZ0dG9sZCk7Cisg ICAgZGVidWcoRjEwMSwidHRvcGVuIGd0dHkgdHRvbGQuc2dfZmxhZ3MiLCIiLHR0b2xkLnNnX2Zs YWdzKTsKKyNlbmRpZiAvKiBCRUxMVjEwICovCisKKyNpZmRlZiBzb255X25ld3MJCQkvKiBTb255 IE5FV1MgKi8KKyAgICBpZiAoaW9jdGwodHR5ZmQsVElPQ0tHRVQsJmttX2V4dCkgPCAwKSB7IC8q IEdldCBjb25zb2xlIEthbmppIG1vZGUgKi8KKwlwZXJyb3IoInR0b3BlbiBlcnJvciBnZXR0aW5n IEthbmppIG1vZGUiKTsKKwlkZWJ1ZyhGMTAxLCJ0dG9wZW4gZXJyb3IgZ2V0dGluZyBLYW5qaSBt b2RlIiwiIiwwKTsKKwlrbV9leHQgPSAtMTsJCQkvKiBNYWtlIHN1cmUgdGhpcyBzdGF5cyB1bmRl ZmluZWQuICovCisgICAgfQorI2VuZGlmIC8qIHNvbnlfbmV3cyAqLworCisjaWZkZWYgVElPQ0dF VEMKKyAgICBkZWJ1ZyhGMTAwLCJ0dG9wZW4gVElPQ0dFVEMiLCIiLDApOworICAgIHRjaGFyZiA9 IDA7CQkJCS8qIEluIHJlbW90ZSBtb2RlLCBhbHNvIGdldCAqLworICAgIGlmICh4bG9jYWwgPT0g MCkgewkJCS8qIHNwZWNpYWwgY2hhcmFjdGVycyAqLworCWlmIChpb2N0bCh0dHlmZCxUSU9DR0VU QywmdGNob2xkKSA8IDApIHsKKwkgICAgZGVidWcoRjEwMCwidHRvcGVuIFRJT0NHRVRDIGZhaWxl ZCIsIiIsMCk7CisJfSBlbHNlIHsKKwkgICAgdGNoYXJmID0gMTsJCQkvKiBJdCB3b3JrZWQuICov CisJICAgIGlvY3RsKHR0eWZkLFRJT0NHRVRDLCZ0Y2hub2kpOyAvKiBHZXQgYW5vdGhlciBjb3B5 ICovCisJICAgIGRlYnVnKEYxMDAsInR0b3BlbiBUSU9DR0VUQyBvayIsIiIsMCk7CisJfQorICAg IH0KKyNlbHNlCisgICAgZGVidWcoRjEwMCwidHRvcGVuIFRJT0NHRVRDIG5vdCBkZWZpbmVkIiwi IiwwKTsKKyNlbmRpZiAvKiBUSU9DR0VUQyAqLworCisjaWZkZWYgVElPQ0dMVEMKKyAgICBkZWJ1 ZyhGMTAwLCJ0dG9wZW4gVElPQ0dMVEMiLCIiLDApOworICAgIGx0Y2hhcmYgPSAwOwkJCS8qIElu IHJlbW90ZSBtb2RlLCBhbHNvIGdldCAqLworICAgIGlmICh4bG9jYWwgPT0gMCkgewkJCS8qIGxv Y2FsIHNwZWNpYWwgY2hhcmFjdGVycyAqLworCWlmIChpb2N0bCh0dHlmZCxUSU9DR0xUQywmbHRj aG9sZCkgPCAwKSB7CisJICAgIGRlYnVnKEYxMDAsInR0b3BlbiBUSU9DR0xUQyBmYWlsZWQiLCIi LDApOworCX0gZWxzZSB7CisJICAgIGx0Y2hhcmYgPSAxOwkJLyogSXQgd29ya2VkLiAqLworCSAg ICBpb2N0bCh0dHlmZCxUSU9DR0xUQywmbHRjaG5vaSk7IC8qIEdldCBhbm90aGVyIGNvcHkgKi8K KwkgICAgZGVidWcoRjEwMCwidHRvcGVuIFRJT0NHTFRDIG9rIiwiIiwwKTsKKwl9CisgICAgfQor I2Vsc2UKKyAgICBkZWJ1ZyhGMTAwLCJ0dG9wZW4gVElPQ0dMVEMgbm90IGRlZmluZWQiLCIiLDAp OworI2VuZGlmIC8qIFRJT0NHTFRDICovCisKKyNpZmRlZiBUSU9DTEdFVAorICAgIGRlYnVnKEYx MDAsInR0b3BlbiBUSU9DTEdFVCIsIiIsMCk7CisgICAgbG1vZGVmID0gMDsKKyAgICBpZiAoaW9j dGwodHR5ZmQsVElPQ0xHRVQsJmxtb2RlKSA8IDApIHsKKwlkZWJ1ZyhGMTAwLCJ0dG9wZW4gVElP Q0xHRVQgZmFpbGVkIiwiIiwwKTsKKyAgICB9IGVsc2UgeworCWxtb2RlZiA9IDE7CisJZGVidWco RjEwMCwidHRvcGVuIFRJT0NMR0VUIG9rIiwiIiwwKTsKKyAgICB9CisjZW5kaWYgLyogVElPQ0xH RVQgKi8KKworI2lmZGVmIEJFTExWMTAKKyAgICBpb2N0bCh0dHlmZCxUSU9DR0VUUCwmdHRyYXcp OworICAgIGlvY3RsKHR0eWZkLFRJT0NHRVRQLCZ0dHR2dCk7CisjZWxzZQorICAgIGd0dHkodHR5 ZmQsJnR0cmF3KTsgICAgICAgICAgICAgICAgIC8qIEFuZCBhIGNvcHkgb2YgaXQgZm9yIHBhY2tl dHMqLworICAgIGd0dHkodHR5ZmQsJnR0dHZ0KTsgICAgICAgICAgICAgICAgIC8qIEFuZCBvbmUg Zm9yIHZpcnR1YWwgdHR5IHNlcnZpY2UgKi8KKyNlbmRpZiAvKiBCRUxMVjEwICovCisKKyNlbmRp ZiAvKiBBVFRTViAqLworI2VuZGlmIC8qIEJTRDQ0T1JQT1NJWCAqLworCisvKiBTZWN0aW9uIGZv ciBjaGFuZ2luZyBsaW5lIGRpc2NpcGxpbmUuICBJdCdzIHJlc3RvcmVkIGluIHR0cmVzKCkuICov CisKKyNpZmRlZiBBSVhSUworI2lmbmRlZiBBSVg0MQorICAgIHsgdW5pb24gdHhuYW1lIGxkX25h bWU7IGludCBsZF9pZHggPSAwOworICAgICAgdHRsZCA9IDA7CisgICAgICAgIGRvIHsKKyAgCSAg bGRfbmFtZS50eF93aGljaCA9IGxkX2lkeCsrOworICAJICBpb2N0bCh0dHlmZCwgVFhHRVRDRCwg JmxkX25hbWUpOworCSAgaWYgKCFzdHJuY21wKGxkX25hbWUudHhfbmFtZSwgInJ0cyIsIDMpKQor ICAJICAgIHR0bGQgfD0gMTsKKyAgICAgICAgfSB3aGlsZSAoKmxkX25hbWUudHhfbmFtZSk7Cisg ICAgICAgIGRlYnVnKEYxMDEsIkFJWCBsaW5lIGRpc2NpcGxpbmUiLCIiLHR0bGQpOworICAgICAg fQorI2VuZGlmIC8qIEFJWDQxICovCisjZW5kaWYgLyogQUlYUlMgKi8KKworI2lmZGVmIEJTRDQx CisvKiBGb3IgNC4xQlNEIG9ubHksIGZvcmNlICJvbGQiIHR0eSBkcml2ZXIsIG5ldyBvbmUgYm90 Y2hlcyBUQU5ERU0uICovCisgICAgeyBpbnQgazsKKyAgICAgIGlvY3RsKHR0eWZkLCBUSU9DR0VU RCwgJnR0bGQpOwkvKiBHZXQgYW5kIHNhdmUgbGluZSBkaXNjaXBsaW5lICovCisgICAgICBkZWJ1 ZyhGMTAxLCI0LjFic2QgbGluZSBkaXNjaXBsaW5lIiwiIix0dGxkKTsKKyAgICAgIGsgPSBPVFRZ RElTQzsJCQkvKiBTd2l0Y2ggdG8gIm9sZCIgZGlzY2lwbGluZSAqLworICAgICAgayA9IGlvY3Rs KHR0eWZkLCBUSU9DU0VURCwgJmspOworICAgICAgZGVidWcoRjEwMSwiNC4xYnNkIHRpb2NzZXRk IiwiIixrKTsKKyAgICB9CisjZW5kaWYgLyogQlNENDEgKi8KKworI2lmZGVmIGFlZ2lzCisgICAg LyogVGhpcyB3YXMgcHJldmlvdXNseSBkb25lIGJlZm9yZSB0aGUgbGFzdCB0d28gVENHRVRBIG9y IGd0dHkgYWJvdmUsCisgICAgICogaW4gYm90aCB0aGUgQVRUU1YgYW5kIG5vdC1BVFRTViBjYXNl LiAgSWYgaXQgaXMgbm90IG9rYXkgdG8gaGF2ZSBvbmx5CisgICAgICogb25lIGNvcHkgaWYgaXQg aGVyZSBpbnN0ZWFkLCBnaXZlIHVzIGEgc2hvdXQhCisgICAgICovCisgICAgc2lvXyRjb250cm9s KChzaG9ydCl0dHlmZCwgc2lvXyRyYXdfbmwsIGZhbHNlLCBzdCk7CisgICAgaWYgKHhsb2NhbCkg eyAgICAgICAvKiBpZ25vcmUgYnJlYWtzIGZyb20gbG9jYWwgbGluZSAqLworICAgICAgICBzaW9f JGNvbnRyb2woKHNob3J0KXR0eWZkLCBzaW9fJGludF9lbmFibGUsIGZhbHNlLCBzdCk7CisgICAg ICAgIHNpb18kY29udHJvbCgoc2hvcnQpdHR5ZmQsIHNpb18kcXVpdF9lbmFibGUsIGZhbHNlLCBz dCk7CisgICAgfQorI2VuZGlmIC8qIGFlZ2lzICovCisKKyNpZmRlZiBWWFZFCisgICAgdHRyYXcu Y19saW5lID0gMDsgICAgICAgICAgICAgICAgICAgLyogU1RUWSBsaW5lIDAgZm9yIFZYL1ZFICov CisgICAgdHR0dnQuY19saW5lID0gMDsgICAgICAgICAgICAgICAgICAgLyogU1RUWSBsaW5lIDAg Zm9yIFZYL1ZFICovCisgICAgaW9jdGwodHR5ZmQsVENTRVRBLCZ0dHJhdyk7CisjZW5kaWYgLyog dnh2ZSAqLworCisvKiBJZiBPX05ERUxBWSB3YXMgdXNlZCBkdXJpbmcgb3BlbigpLCB0aGVuIHJl bW92ZSBpdCBub3cuICovCisKKyNpZmRlZiBPX05ERUxBWQorICAgIGRlYnVnKEYxMDAsInR0b3Bl biBPX05ERUxBWSIsIiIsMCk7CisgICAgaWYgKHhsb2NhbCA+IDApIHsKKyAgICAgIGlmIChmY250 bCh0dHlmZCwgRl9HRVRGTCwgMCkgJiBPX05ERUxBWSkgeworCWRlYnVnKEYxMDAsInR0b3BlbiBm Y250bCBPX05ERUxBWSIsIiIsMCk7CisjaWZuZGVmIGFlZ2lzCisJaWYgKGZjbnRsKHR0eWZkLEZf U0VURkwsIGZjbnRsKHR0eWZkLCBGX0dFVEZMLCAwKSAmIH5PX05ERUxBWSkgPCAwKSB7CisJICAg IGRlYnVnKEYxMDAsInR0b3BlbiBmY250bCBmYWlsdXJlIHRvIHVuc2V0IE9fTkRFTEFZIiwiIiww KTsKKwkgICAgcGVycm9yKCJDYW4ndCB1bnNldCBPX05ERUxBWSIpOworCX0KKyNlbmRpZiAvKiBh ZWdpcyAqLworCS8qIFNvbWUgc3lzdGVtcywgbm90YWJseSBYZW5peCAoZG9uJ3Qga25vdyBob3cg Y29tbW9uIHRoaXMgaXMgaW4KKwkgKiBvdGhlciBzeXN0ZW1zKSwgbmVlZCBzcGVjaWFsIHRyZWF0 bWVudCB0byBnZXQgcmlkIG9mIHRoZSBPX05ERUxBWQorCSAqIGJlaGF2aW91ciBvbiByZWFkKCkg d2l0aCByZXNwZWN0IHRvIGNhcnJpZXIgcHJlc2VuY2UgKGkuZS4gcmVhZCgpCisJICogcmV0dXJu aW5nIDAgd2hlbiBjYXJyaWVyIGFic2VudCksIGV2ZW4gdGhvdWdoIHRoZSBhYm92ZSBmY250bCgp CisJICogaXMgZW5vdWdoIHRvIG1ha2UgcmVhZCgpIHdhaXQgZm9yIGlucHV0IHdoZW4gY2Fycmll ciBpcyBwcmVzZW50LgorCSAqIFRoaXMgbWFnaWMsIGluIHR1cm4sIHJlcXVpcmVzIENMT0NBTCBm b3Igd29ya2luZyB3aGVuIHRoZSBjYXJyaWVyCisJICogaXMgYWJzZW50LiBCdXQgaWYgeGxvY2Fs ID09IDAsIHByZXN1bWFibHkgeW91IGFscmVhZHkgaGF2ZSBDTE9DQUwKKwkgKiBvciB5b3UgaGF2 ZSBhIGNhcnJpZXIsIG90aGVyd2lzZSB5b3Ugd291bGRuJ3QgYmUgcnVubmluZyB0aGlzLgorCSAq LworCWRlYnVnKEYxMDEsInR0b3BlbiB4bG9jYWwiLCIiLHhsb2NhbCk7CisjaWZkZWYgQVRUU1YK KyNpZmRlZiBCU0Q0NE9SUE9TSVgKKyNpZmRlZiBDT01NRU5UCQkJCS8qIDEyIEF1ZyAxOTk3ICov CisjaWZkZWYgX19ic2RpX18KKwlpZiAoeGxvY2FsKQorCSAgdHRyYXcuY19jZmxhZyB8PSBDTE9D QUw7CisjZWxzZQorI2lmZGVmIF9fRnJlZUJTRF9fCisJaWYgKHhsb2NhbCkKKwkgIHR0cmF3LmNf Y2ZsYWcgfD0gQ0xPQ0FMOworI2VuZGlmIC8qIF9fRnJlZUJTRF9fICovCisjZW5kaWYgLyogX19i c2RpX18gKi8KKyNlbHNlIC8qIE5vdCBDT01NRU5UICovCisjaWZkZWYgQ0xPQ0FMCisJaWYgKHhs b2NhbCkJCQkvKiBVbnNldCB0aGlzIGlmIGl0J3MgZGVmaW5lZC4gKi8KKwkgIHR0cmF3LmNfY2Zs YWcgfD0gQ0xPQ0FMOworI2VuZGlmIC8qIENMT0NBTCAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8K KwlkZWJ1ZyhGMTAxLCJ0dG9wZW4gQlNENDRPUlBPU0lYIGNhbGxpbmcgdGNzZXRhdHRyIiwiIixU Q1NBRFJBSU4pOworCWlmICh0Y3NldGF0dHIodHR5ZmQsIFRDU0FEUkFJTiwgJnR0cmF3KSA8IDAp IHsKKwkgICAgZGVidWcoRjEwMCwidHRvcGVuIFBPU0lYIHRjc2VhdHRyIGZhaWxzIiwiIiwwKTsK KwkgICAgcGVycm9yKCJ0Y3NldGF0dHIiKTsKKwl9CisjZWxzZSAvKiAhQlNENDRPUlBPU0lYICov CisJaWYgKHhsb2NhbCkgeworCSAgICB0dHJhdy5jX2NmbGFnIHw9IENMT0NBTDsKKwkgICAgZGVi dWcoRjEwMCwidHRvcGVuIGNhbGxpbmcgaW9jdGwoVENTRVRBKSIsIiIsMCk7CisJICAgIGVycm5v ID0gMDsKKwkgICAgaWYgKGlvY3RsKHR0eWZkLCBUQ1NFVEEsICZ0dHJhdykgPCAwKSB7CisgICAg ICAgICAgICAgICAgZGVidWcoRjEwMSwidHRvcGVuIGlvY3RsKFRDU0VUQSkgZmFpbHMiLCIiLGVy cm5vKTsKKyAgICAgICAgICAgICAgICBwZXJyb3IoImlvY3RsKFRDU0VUQSkiKTsKKyAgICAgICAg ICAgIH0KKwl9CisjZW5kaWYgLyogQlNENDRPUlBPU0lYICovCisjZW5kaWYgLyogQVRUU1YgKi8K KyNpZm5kZWYgTk9DT1RGTUMgLyogPSBOTyBDbG9zZShPcGVuKCkpIFRvIEZvcmNlIE1vZGUgQ2hh bmdlICovCisvKiBSZXBvcnRlZGx5IGxldHMgdXVnZXR0eSBncmFiIHRoZSBkZXZpY2UgaW4gU0NP IFVOSVggMy4yIC8gWEVOSVggMi4zICovCisJZGVidWcoRjEwMCwidHRvcGVuIGV4ZWN1dGluZyBj bG9zZS9vcGVuIiwiIiwwKTsKKwljbG9zZSggcHJpdl9vcG4oZm5hbSwgT19SRFdSKSApOyAvKiBN YWdpYyB0byBmb3JjZSBjaGFuZ2UuICovCisjZW5kaWYgLyogTk9DT1RGTUMgKi8KKyAgICAgIH0K KyAgICB9CisjZW5kaWYgLyogT19OREVMQVkgKi8KKworLyogSW5zdHJ1Y3QgdGhlIHN5c3RlbSBo b3cgdG8gdHJlYXQgdGhlIGNhcnJpZXIsIGFuZCBzZXQgYSBmZXcgb3RoZXIgdHR5CisgKiBwYXJh bWV0ZXJzLgorICoKKyAqIFRoaXMgYWxzbyB1bmRvZXMgdGhlIHRlbXBvcmFyeSBzZXR0aW5nIG9m IENMT0NBTCB0aGF0IG1heSBoYXZlIGJlZW4gZG9uZQorICogZm9yIHRoZSBjbG9zZShvcGVuKCkp IGFib3ZlIChleGNlcHQgaW4gWGVuaXgpLiAgQWxzbyB0aHJvdyBpbiB+RUNITywgdG8KKyAqIHBy ZXZlbnQgdGhlIG90aGVyIGVuZCBvZiB0aGUgbGluZSBmcm9tIHNpdHRpbmcgdGhlcmUgdGFsa2lu ZyB0byBpdHNlbGYsCisgKiBwcm9kdWNpbmcgZ2FyYmFnZSB3aGVuIHRoZSB1c2VyIHBlcmZvcm1z IGEgY29ubmVjdC4KKyAqCisgKiBTQ08gWGVuaXggdW5mb3J0dW5hdGVseSBzZWVtcyB0byBpZ25v cmUgdGhlIGFjdHVhbCBzdGF0ZSBvZiBDTE9DQUwuCisgKiBOb3cgaXQgdGhpbmtzIENMT0NBTCBp cyBhbHdheXMgb24uIEl0IHNlZW1zIHRoZSBvbmx5IHJlYWwgc29sdXRpb24gZm9yCisgKiBYZW5p eCBpcyB0byBzd2l0Y2ggYmV0d2VlbiB0aGUgbG93ZXIgYW5kIHVwcGVyIGNhc2UgZGV2aWNlIG5h bWVzLgorICoKKyAqIFRoaXMgc2VjdGlvbiBtYXkgYXQgc29tZSBmdXR1cmUgdGltZSBleHBhbmQg aW50byBzZXR0aW5nIGEgY29tcGxldGUKKyAqIGNvbGxlY3Rpb24gb2YgdHR5IHBhcmFtZXRlcnMs IG9yIGNhbGwgYSBmdW5jdGlvbiBzaGFyZWQgd2l0aCB0dHBrdCgpLworICogdHR2dCgpIHRoYXQg ZG9lcyBzby4gIE9uIHRoZSBvdGhlciBoYW5kLCB0aGUgaW5pdGlhbCBwYXJhbWV0ZXJzIGFyZSBu b3QKKyAqIHRoYXQgaW1wb3J0YW50LCBzaW5jZSB0dHBrdCgpIG9yIHR0dnQoKSBzaG91bGQgYWx3 YXlzIGZpeCB0aGF0IGJlZm9yZQorICogYW55IGNvbW11bmljYXRpb24gaXMgZG9uZS4gIFdlbGws IHdlJ2xsIHNlZS4uLgorICovCisgICAgaWYgKHhsb2NhbCkgeworICAgIAljdXJjYXJyID0gLTI7 CisJZGVidWcoRjEwMCwidHRvcGVuIGNhbGxpbmcgY2FycmN0bCIsIiIsMCk7CisJY2FycmN0bCgm dHRyYXcsIHR0Y2FyciA9PSBDQVJfT04pOworCWRlYnVnKEYxMDAsInR0b3BlbiBjYXJyY3RsIG9r IiwiIiwwKTsKKworI2lmZGVmIENPSEVSRU5UCisjZGVmaW5lIFNWT1JQT1NJWAorI2VuZGlmIC8q IENPSEVSRU5UICovCisKKyNpZmRlZiBTVk9SUE9TSVgKKwl0dHJhdy5jX2xmbGFnICY9IH5FQ0hP OworCXR0b2xkLmNfbGZsYWcgJj0gfkVDSE87CisjaWZkZWYgQlNENDRPUlBPU0lYCisJeSA9IHRj c2V0YXR0cih0dHlmZCwgVENTQURSQUlOLCAmdHRyYXcpOworCWRlYnVnKEYxMDEsInR0b3BlbiB0 Y3NldGF0dHIiLCIiLHkpOworI2Vsc2UKKwl5ID0gaW9jdGwodHR5ZmQsIFRDU0VUQSwgJnR0cmF3 KTsKKwlkZWJ1ZyhGMTAwLCJ0dG9wZW4gaW9jdGwiLCIiLHkpOworI2VuZGlmIC8qIEJTRDQ0T1JQ T1NJWCAqLworCisjZWxzZSAvKiBCU0QsIGV0YyAqLworCXR0cmF3LnNnX2ZsYWdzICY9IH5FQ0hP OworCXR0b2xkLnNnX2ZsYWdzICY9IH5FQ0hPOworI2lmZGVmIEJFTExWMTAKKwl5ID0gaW9jdGwo dHR5ZmQsVElPQ1NFVFAsJnR0cmF3KTsKKwlkZWJ1ZyhGMTAwLCJ0dG9wZW4gaW9jdGwiLCIiLHkp OworI2Vsc2UKKwl5ID0gc3R0eSh0dHlmZCwmdHRyYXcpOworCWRlYnVnKEYxMDAsInR0b3BlbiBz dHR5IiwiIix5KTsKKyNlbmRpZiAvKiBCRUxMVjEwICovCisjZW5kaWYgLyogU1ZPUlBPU0lYICov CisKKyNpZmRlZiBDT0hFUkVOVAorI3VuZGVmIFNWT1JQT1NJWAorI2VuZGlmIC8qIENPSEVSRU5U ICovCisKKwkvKiB0dGZsdWkoKTsgKi8gIC8qICBUaGlzIGZhaWxzIGZvciBzb21lIHJlYXNvbi4g ICovCisgICAgfQorCisgICAgLyogR2V0IGN1cnJlbnQgc3BlZWQgKi8KKworI2lmbmRlZiBCRUJP WAorICAgIHR0c3BlZWQgPSB0dGdzcGQoKTsKKyNlbHNlCisgICAgdHRzcGVlZCA9IDE5MjAwOwor I2VuZGlmIC8qICFCRUJPWCAqLworICAgIGRlYnVnKEYxMDEsInR0b3BlbiB0dHNwZWVkIiwiIix0 dHNwZWVkKTsKKworICAgIC8qIERvbmUsIG1ha2UgZW50cmllcyBpbiBkZWJ1ZyBsb2csIHJlc3Rv cmUgQ3RybC1DIHRyYXAsIGFuZCByZXR1cm4uICovCisKKyAgICBkZWJ1ZyhGMTAxLCJ0dG9wZW4g dHR5ZmQiLCIiLHR0eWZkKTsKKyAgICBkZWJ1ZyhGMTAxLCJ0dG9wZW4gKmxjbCIsIiIsKmxjbCk7 CisgICAgZGVidWcoRjExMSwidHRvcGVuIGxvY2sgZmlsZSIsZmxmbmFtLGxrZik7CisgICAgc2ln bmFsKFNJR0lOVCxvY2N0KTsKKyAgICBzaWdpbnRfaWduID0gKG9jY3QgPT0gU0lHX0lHTikgPyAx IDogMDsKKyAgICBnb3RzaWdzID0gMDsKKyAgICByZXR1cm4oMCk7Cit9CisKKworLyogIEQgTyBf IE8gUCBFIE4gIC0tICBEbyB0aGUgcmlnaHQga2luZCBvZiBvcGVuKCkgY2FsbCBmb3IgdGhlIHR0 eS4gKi8KKworaW50Citkb19vcGVuKHR0bmFtZSkgY2hhciAqdHRuYW1lOyB7CisgICAgaW50IGZs YWdzOworCisjaWZkZWYgUU5YNgorICAgIC8qIE9fTk9OQkxPQ0sgb24gL2Rldi90dHkgbWFrZXMg b3BlbigpIGZhaWwgKi8KKyAgICByZXR1cm4ocHJpdl9vcG4odHRuYW1lLCBPX1JEV1IgfAorCQkg ICAgKAorCQkgICAgICgoaW50KXN0cmNtcCh0dG5hbWUsIi9kZXYvdHR5IikgPT0gMCkgPworCQkg ICAgIDAgOgorCQkgICAgICh0dGNhcnIgIT0gQ0FSX09OKSA/IE9fTk9OQkxPQ0sgOiAwKQorCQkg ICAgKQorCSAgICk7IAorI2Vsc2UgIC8qICFRTlg2ICovCisKKyNpZm5kZWYJT19OREVMQVkJCQkv KiBPX05ERUxBWSBub3QgZGVmaW5lZCAqLworICAgIHJldHVybihwcml2X29wbih0dG5hbWUsMikp OworI2Vsc2UJCQkJCS8qIE9fTkRFTEFZIGRlZmluZWQgKi8KKworI2lmZGVmIEFUVDczMDAKKy8q CisgT3BlbiBjb21tcyBsaW5lIHdpdGhvdXQgd2FpdGluZyBmb3IgY2FycmllciBzbyBpbml0aWFs IGNhbGwgZG9lcyBub3QgaGFuZworIGJlY2F1c2Ugc3RhdGUgb2YgIm1vZGVtIiBpcyBsaWtlbHkg dW5rbm93biBhdCB0aGUgaW5pdGlhbCBjYWxsICAtanJkLgorIElmIHRoaXMgaXMgbmVlZGVkIGZv ciB0aGUgZ2V0dHkgc3R1ZmYgdG8gd29yaywgYW5kIHRoZSBvcGVuIHdvdWxkIG5vdCB3b3JrCisg d2l0aG91dCBPX05ERUxBWSB3aGVuIGdldHR5IGlzIHN0aWxsIG9uLCB0aGVuIHRoaXMgc3BlY2lh bCBjYXNlIGlzIG9rLgorIE90aGVyd2lzZSwgZ2V0IHJpZCBvZiBpdC4gLXNrZQorKi8KKyAgICBy ZXR1cm4ocHJpdl9vcG4odHRuYW1lLCBPX1JEV1IgfCBPX05ERUxBWSkpOworCisjZWxzZQkvKiAh QVRUNzMwMCAqLworCisgICAgLyogTm9ybWFsIGNhc2UuIFVzZSBPX05ERUxBWSBhY2NvcmRpbmcg dG8gU0VUIENBUlJJRVIuIFNlZSB0dHNjYXJyKCkuICovCisgICAgZmxhZ3MgPSBPX1JEV1I7Cisg ICAgZGVidWcoRjEwMSwiZG9fb3BlbiB4bG9jYWwiLCIiLHhsb2NhbCk7CisgICAgZGVidWcoRjEx MSwiZG9fb3BlbiBmbGFncyBBIix0dG5hbWUsZmxhZ3MpOworICAgIGlmICh4bG9jYWwgJiYgKHR0 Y2FyciAhPSBDQVJfT04pKQorICAgICAgZmxhZ3MgfD0gT19OREVMQVk7CisgICAgZGVidWcoRjEx MSwiZG9fb3BlbiBmbGFncyBCIix0dG5hbWUsZmxhZ3MpOworICAgIHJldHVybihwcml2X29wbih0 dG5hbWUsIGZsYWdzKSk7CisjZW5kaWYgLyogIUFUVDczMDAgKi8KKyNlbmRpZiAvKiBPX05ERUxB WSAqLworI2VuZGlmIC8qIFFOWDYgKi8KK30KKworLyogIFQgVCBDIEwgTyBTICAtLSAgQ2xvc2Ug dGhlIFRUWSwgcmVsZWFzaW5nIGFueSBsb2NrLiAgKi8KKworc3RhdGljIGludCB0dGNfc3RhdGUg PSAwOwkJLyogdHRjbG9zZSgpIHN0YXRlICovCitzdGF0aWMgY2hhciAqIHR0Y19uYW1bXSA9IHsg InNldHVwIiwgImhhbmd1cCIsICJyZXNldCIsICJjbG9zZSIgfTsKKworaW50Cit0dGNsb3MoZm9v KSBpbnQgZm9vOyB7CQkJLyogQXJnIHJlcSdkIGZvciBzaWduYWwoKSBwcm90b3R5cGUgKi8KKyAg ICBpbnQgeHgsIHggPSAwOworICAgIGV4dGVybiBpbnQgZXhpdGhhbmd1cDsKKworICAgIGRlYnVn KEYxMDEsInR0Y2xvcyB0dHlmZCIsIiIsdHR5ZmQpOworICAgIGRlYnVnKEYxMDEsInR0Y2xvcyBu ZXRjb25uIiwiIixuZXRjb25uKTsKKyAgICBkZWJ1ZyhGMTAxLCJ0dGNsb3MgeGxvY2FsIiwiIix4 bG9jYWwpOworI2lmZGVmIE5PRkRaRVJPCisgICAgZGVidWcoRjEwMCwidHRjbG9zIE5PRkRaRVJP IiwiIiwwKTsKKyNlbmRpZiAvKiBOT0ZEWkVSTyAqLworCisjaWZkZWYgQ09NTUVOVAorI2lmZGVm IFRUTEVCVUYKKyAgICBsZV9pbml0KCk7CQkJCS8qIE5vIG5lZWQgZm9yIGFueSBvZiB0aGlzICov CisjZW5kaWYgLyogVFRMRUJVRiAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKworICAgIGlmICh0 dHlmZCA8IDApCQkJLyogV2Fzbid0IG9wZW4uICovCisgICAgICByZXR1cm4oMCk7CisKKyAgICBp ZiAodHRmZGZsZykJCQkvKiBJZiB3ZSBpbmhlcml0ZWQgdHR5ZmQgZnJvbSAqLworICAgICAgcmV0 dXJuKDApOwkJCS8qIGFub3RoZXIgcHJvY2VzcywgZG9uJ3QgY2xvc2UgaXQuICovCisKKyAgICB0 dnRmbGcgPSAwOwkJCQkvKiAoc29tZSBkYXkgZ2V0IHJpZCBvZiB0aGlzLi4uKSAqLworICAgIGdv dHNpZ3MgPSAwOworCisjaWZkZWYgSUtTRAorICAgIGlmIChpbnNlcnZlcikgeworI2lmZGVmIFRO Q09ERQorICAgICAgICAgIHRuX3B1c2goKTsgICAgICAgICAgICAgICAgICAgIC8qIFBsYWNlIGFu eSB3YWl0aW5nIGRhdGEgaW50byBpbnB1dCovCisgICAgICAgICAgdG5fc29wdChETyxURUxPUFRf TE9HT1VUKTsgICAgLyogU2VuZCBMT0dPVVQgb3B0aW9uIGJlZm9yZSBjbG9zZSAqLworICAgICAg ICAgIFRFTE9QVF9VTkFOU1dFUkVEX0RPKFRFTE9QVF9MT0dPVVQpID0gMTsKKyAgICAgICAgICB0 bl9yZXNldCgpOyAgICAgICAgICAgICAgICAgICAvKiBUaGUgUmVzZXQgVGVsbmV0IE9wdGlvbiB0 YWJsZS4gICovCisjZW5kaWYgLyogVE5DT0RFICovCisjaWZkZWYgQ0tfU1NMCisJICBpZiAoc3Ns X2FjdGl2ZV9mbGFnKSB7CisJICAgICAgaWYgKHNzbF9kZWJ1Z19mbGFnKQorCQlCSU9fcHJpbnRm KGJpb19lcnIsImNhbGxpbmcgU1NMX3NodXRkb3duKHNzbClcbiIpOworCSAgICAgIFNTTF9zaHV0 ZG93bihzc2xfY29uKTsKKwkgICAgICBTU0xfZnJlZShzc2xfY29uKTsKKwkgICAgICBzc2xfY29u ID0gTlVMTDsKKwkgICAgICBzc2xfYWN0aXZlX2ZsYWcgPSAwOworCSAgfQorCSAgaWYgKHRsc19h Y3RpdmVfZmxhZykgeworCSAgICAgIGlmIChzc2xfZGVidWdfZmxhZykKKwkJQklPX3ByaW50Zihi aW9fZXJyLCJjYWxsaW5nIFNTTF9zaHV0ZG93bih0bHMpXG4iKTsKKwkgICAgICBTU0xfc2h1dGRv d24odGxzX2Nvbik7CisJICAgICAgU1NMX2ZyZWUodGxzX2Nvbik7CisJICAgICAgdGxzX2NvbiA9 IE5VTEw7CisJICAgICAgdGxzX2FjdGl2ZV9mbGFnID0gMDsKKwkgIH0KKyNlbmRpZiAvKiBDS19T U0wgKi8KKyAgICB9CisjZW5kaWYgLyogSUtTRCAqLworI2lmZGVmIE5FVENNRAorICAgIGlmICh0 dHBpcGUpIHsJCQkvKiBXZSd2ZSBiZWVuIHVzaW5nIGEgcGlwZSAqLworCS8qIHR0cGlwZSA9IDA7 ICovCisJaWYgKHR0cGlkID4gMCkgeworCSAgICBpbnQgd3N0YXQ7CisJICAgIGludCBzdGF0dXNw OworCSAgICBjbG9zZShmZGluKTsJCS8qIENsb3NlIHRoZXNlLiAqLworCSAgICBjbG9zZShmZG91 dCk7CisJICAgIGZkaW4gPSBmZG91dCA9IC0xOworCSAgICBraWxsKHR0cGlkLDEpOwkJLyogS2ls bCBmb3JrIHdpdGggU0lHSFVQICovCisJICAgIHdoaWxlICgxKSB7CisJCXdzdGF0ID0gd2FpdCgm c3RhdHVzcCk7CisJCWlmICh3c3RhdCA9PSB0dHBpZCB8fCB3c3RhdCA9PSAtMSkKKwkJICBicmVh azsKKwkJcGV4aXRzdGF0ID0gKHN0YXR1c3AgJiAweGZmKSA/IHN0YXR1c3AgOiBzdGF0dXNwID4+ IDg7CisJICAgIH0KKwkgICAgdHRwaWQgPSAwOworCX0KKwluZXRjb25uID0gMDsKKwl3YXNjbG9z ZWQgPSAxOworCXR0eWZkID0gLTE7CisJcmV0dXJuKDApOworICAgIH0KKyNlbmRpZiAvKiBORVRD TUQgKi8KKyNpZmRlZiBORVRQVFkKKyAgICBpZiAodHRwdHkpIHsKKyNpZm5kZWYgTk9ET1BUWQor ICAgICAgICBlbmRfcHR5KCk7CisjZW5kaWYgLyogTk9ET1BUWSAqLworICAgICAgICBjbG9zZSh0 dHlmZCk7CisJbmV0Y29ubiA9IDA7CisJd2FzY2xvc2VkID0gMTsKKyAgICAgICAgdHRwdHkgPSAw OworICAgICAgICB0dHlmZCA9IC0xOworICAgICAgICByZXR1cm4oMCk7CisgICAgfQorI2VuZGlm IC8qIE5FVFBUWSAqLworCisjaWZkZWYJTkVUQ09OTgorICAgIGlmIChuZXRjb25uKSB7CQkJLyog SWYgaXQncyBhIG5ldHdvcmsgY29ubmVjdGlvbi4gKi8KKwlkZWJ1ZyhGMTAwLCJ0dGNsb3MgY2xv c2luZyBuZXQiLCIiLDApOworCW5ldGNsb3MoKTsJCQkvKiBMZXQgdGhlIG5ldHdvcmsgbW9kdWxl IGNsb3NlIGl0LiAqLworCW5ldGNvbm4gPSAwOwkJCS8qIE5vIG1vcmUgbmV0d29yayBjb25uZWN0 aW9uLiAqLworCWRlYnVnKEYxMDEsInR0Y2xvcyB0dHlmZCBhZnRlciBuZXRjbG9zIiwiIix0dHlm ZCk7IC8qIFNob3VsZCBiZSAtMSAqLworCXJldHVybigwKTsKKyAgICB9CisjZW5kaWYJLyogTkVU Q09OTiAqLworCisgICAgaWYgKHhsb2NhbCkgewkJCS8qIFdlJ3JlIGNsb3NpbmcgYSBTRVQgTElO RSBkZXZpY2UgKi8KKyNpZmRlZiBGVDIxCQkJCS8qIEZvcnR1bmUgMi4xLXNwZWNpZmljIGl0ZW1z IC4uLiAqLworCWlvY3RsKHR0eWZkLFRJT0NIUENMLCBOVUxMKTsKKyNlbmRpZiAvKiBGVDIxICov CisjaWZkZWYgdWx0cml4CQkJCS8qIFVsdHJpeC1zcGVjaWZpYyBpdGVtcyAuLi4gKi8KKyNpZmRl ZiBUSU9DU0lOVVNFCisJLyogVW5zZXQgdGhlIElOVVNFIGZsYWcgdGhhdCB3ZSBzZXQgaW4gdHRv cGVuKCkgKi8KKwlpb2N0bCh0dHlmZCwgVElPQ1NJTlVTRSwgTlVMTCk7CisjZW5kaWYgLyogVElP Q1NJTlVTRSAqLworCWlvY3RsKHR0eWZkLCBUSU9DTk1PREVNLCAmeCk7CisjaWZkZWYgQ09NTUVO VAorCS8qIFdoYXQgd2FzIHRoaXM/ICovCisJaW9jdGwodHR5ZmQsIFRJT0NOQ0FSLCBOVUxMKTsK KyNlbmRpZiAvKiBDT01NRU5UICovCisjZW5kaWYgLyogdWx0cml4ICovCisgICAgfQorCisgICAg LyogVGhpcyBpcyB0byBwcmV2ZW50IHVzIGZyb20gc3RpY2tpbmcgaW4gdHRoYW5nKCkgb3IgY2xv c2UoKS4gKi8KKworI2lmZGVmIE9fTkRFTEFZCisjaWZuZGVmIGFlZ2lzCisgICAgaWYgKHR0eWZk ID4gMCkgewkJCS8qIEJ1dCBza2lwIGl0IG9uIHN0ZGluLiAqLworCWRlYnVnKEYxMDAsInR0Y2xv cyBzZXR0aW5nIE9fTkRFTEFZIiwiIiwwKTsKKwl4ID0gZmNudGwodHR5ZmQsRl9TRVRGTCxmY250 bCh0dHlmZCxGX0dFVEZMLCAwKXxPX05ERUxBWSk7CisjaWZkZWYgREVCVUcKKwlpZiAoZGVibG9n ICYmIHggPT0gLTEpIHsKKwkgICAgcGVycm9yKCJXYXJuaW5nIC0gQ2FuJ3Qgc2V0IE9fTkRFTEFZ Iik7CisJICAgIGRlYnVnKEYxMDEsInR0Y2xvcyBmY250bCBmYWlsdXJlIHRvIHNldCBPX05ERUxB WSIsIiIseCk7CisJfQorI2VuZGlmIC8qIERFQlVHICovCisgICAgfQorI2VuZGlmIC8qIGFlZ2lz ICovCisjZW5kaWYgLyogT19OREVMQVkgKi8KKworICAgIHggPSAwOworICAgIHR0Y19zdGF0ZSA9 IDA7CisgICAgaWYgKHhsb2NhbAorI2lmZGVmIE5PRkRaRVJPCisJfHwgdHR5ZmQgPiAwCisjZW5k aWYgLyogTk9GRFpFUk8gKi8KKwkpIHsKKwlzYXZhbCA9IHNpZ25hbChTSUdBTFJNLHh0aW1lcmgp OyAvKiBFbmFibGUgdGltZXIgaW50ZXJydXB0LiAqLworCXh4ID0gYWxhcm0oOCk7CQkJLyogQWxs b3cgOCBzZWNvbmRzLiAqLworCWRlYnVnKEYxMDEsInR0Y2xvcyBhbGFybSIsIiIseHgpOworCWlm ICgKKyNpZmRlZiBDS19QT1NJWF9TSUcKKwkgICAgc2lnc2V0am1wKHNqYnVmLDEpCisjZWxzZQor CSAgICBzZXRqbXAoc2pidWYpCisjZW5kaWYgLyogQ0tfUE9TSVhfU0lHICovCisJICAgICkgewkJ CQkvKiBUaW1lciB3ZW50IG9mZj8gKi8KKwkgICAgeCA9IC0xOworI2lmZGVmIERFQlVHCisJICAg IGRlYnVnKEYxMTEsInR0Y2xvcyBBTEFSTSBUUkFQIGVycm5vIixja2l0b2EodHRjX3N0YXRlKSxl cnJubyk7CisJICAgIHByaW50ZigidHRjbG9zKCkgdGltZW91dDogJXNcbiIsIHR0Y19uYW1bdHRj X3N0YXRlXSk7CisjZW5kaWYgLyogREVCVUcgKi8KKwl9CisJLyogSGFuZyB1cCB0aGUgZGV2aWNl IChkcm9wIERUUikgKi8KKworCWVycm5vID0gMDsKKwlkZWJ1ZyhGMTExLCJ0dGNsb3MgQSIsY2tp dG9hKHgpLHR0Y19zdGF0ZSk7CisJaWYgKHR0Y19zdGF0ZSA8IDEpIHsKKwkgICAgdHRjX3N0YXRl ID0gMTsKKwkgICAgZGVidWcoRjEwMSwidHRjbG9zIGV4aXRoYW5ndXAiLCIiLGV4aXRoYW5ndXAp OworCSAgICBpZiAoZXhpdGhhbmd1cCkgeworCQlhbGFybSg4KTsJCS8qIFJlLWFybSB0aGUgdGlt ZXIgKi8KKwkJZGVidWcoRjEwMSwidHRjbG9zIGNhbGxpbmcgdHRoYW5nKCkiLCIiLHgpOworCQl4 ID0gdHRoYW5nKCk7CQkvKiBIYW5nIHVwIGZpcnN0LCB0aGVuLi4uICovCisJCWRlYnVnKEYxMDEs InR0Y2xvcyB0dGhhbmcoKSIsIiIseCk7CisJICAgIH0KKyNpZm5kZWYgQ0tfTk9IVVBDTAorLyoK KyAgT2N0IDIwMDYgLSBMZWF2ZSBEVFIgb24gaWYgU0VUIEVYSVQgSEFOR1VQIE9GRi4KKyAgU3Vn Z2VzdGVkIGJ5IFNvZXdvbm8gRWZmZW5kaS4KKyovCisjaWZkZWYgSFVQQ0wKKwkgICAgZWxzZSB7 CisJCXR0b2xkLmNfY2ZsYWcgJj0gfkhVUENMOyAvKiBMZXQncyBzZWUgaG93IHRoaXMgdHJhdmVs cyAqLworI2lmZGVmIEJTRDQ0T1JQT1NJWAorCQl0Y3NldGF0dHIodHR5ZmQsVENTQU5PVywmdHRv bGQpOworI2Vsc2UgLyogIUJTRDQ0T1JQT1NJWCAqLworI2lmZGVmIEFUVFNWCisJCWlvY3RsKHR0 eWZkLFRDU0VUQVcsJnR0b2xkKTsJCQorI2Vsc2UgIC8qICFBVFRTViAqLworCQlzdHR5KHR0eWZk LCZ0dG9sZCk7CisjZW5kaWYJLyogQVRUU1YgKi8KKyNlbmRpZgkvKiBCU0Q0NE9SUE9TSVggKi8K KwkgICAgfQorI2VuZGlmCS8qIEhVUENMICovCisjZW5kaWYJLyogQ0tfTk9IVVBDTCAqLworCX0K KwkvKiBQdXQgYmFjayBkZXZpY2UgbW9kZXMgYXMgd2UgZm91bmQgdGhlbSAqLworCisJZXJybm8g PSAwOworCWRlYnVnKEYxMTEsInR0Y2xvcyBCIixja2l0b2EoeCksdHRjX3N0YXRlKTsKKwlpZiAo dHRjX3N0YXRlIDwgMikgeworCSAgICB0dGNfc3RhdGUgPSAyOworCSAgICAvKiBEb24ndCB0cnkg dG8gbWVzcyB3aXRoIHR0eSBtb2RlcyBpZiB0dGhhbmcgZmFpbGVkKCkgKi8KKwkgICAgLyogc2lu Y2UgaXQgcHJvYmFibHkgd29uJ3Qgd29yay4gKi8KKwkgICAgaWYgKHggPiAtMSkgeworCQlkZWJ1 ZyhGMTAxLCJ0dGNsb3MgY2FsbGluZyB0dHJlcygpIiwiIix4KTsKKwkJc2lnbmFsKFNJR0FMUk0s eHRpbWVyaCk7IC8qIFJlLWVuYWJsZSB0aGUgYWxhcm0uICovCisJCWFsYXJtKDgpOwkJLyogUmUt YXJtIHRoZSB0aW1lciAqLworCQl4ID0gdHRyZXMoKTsJCS8qIFJlc2V0IGRldmljZSBtb2Rlcy4g Ki8KKwkJZGVidWcoRjEwMSwidHRjbG9zIHR0cmVzKCkiLCIiLHgpOworCQlhbGFybSgwKTsKKwkg ICAgfQorCX0KKwkvKiBDbG9zZSB0aGUgZGV2aWNlICovCisKKwllcnJubyA9IDA7CisJZGVidWco RjEwMSwidHRjbG9zIEMiLCIiLHR0Y19zdGF0ZSk7CisJaWYgKHR0Y19zdGF0ZSA8IDMpIHsKKwkg ICAgdHRjX3N0YXRlID0gMzsKKwkgICAgZXJybm8gPSAwOworCSAgICBkZWJ1ZyhGMTAxLCJ0dGNs b3MgY2FsbGluZyBjbG9zZSIsIiIseCk7CisJICAgIHNpZ25hbChTSUdBTFJNLHh0aW1lcmgpOwkv KiBSZS1lbmFibGUgYWxhcm0uICovCisJICAgIGFsYXJtKDgpOwkJCS8qIFJlLWFybSB0aGUgdGlt ZXIgKi8KKwkgICAgeCA9IGNsb3NlKHR0eWZkKTsJCS8qIENsb3NlIHRoZSBkZXZpY2UuICovCisJ ICAgIGRlYnVnKEYxMDEsInR0Y2xvcyBjbG9zZSgpIiwiIix4KTsKKwkgICAgaWYgKHggPiAtMSkK KwkgICAgICB0dGNfc3RhdGUgPSAzOworCX0KKwlkZWJ1ZyhGMTAxLCJ0dGNsb3MgRCIsIiIsdHRj X3N0YXRlKTsKKwl0dGltb2ZmKCk7CQkJLyogVHVybiBvZmYgdGltZXIuICovCisJaWYgKHggPCAw KSB7CisJICAgIHByaW50ZigiP1dBUk5JTkcgLSBjbG9zZSBmYWlsZWQ6ICVzXG4iLHR0bm1zdik7 CisjaWZkZWYgREVCVUcKKwkgICAgaWYgKGRlYmxvZykgeworCQlwcmludGYoImVycm5vID0gJWRc biIsIGVycm5vKTsKKwkJZGVidWcoRjEwMSwidHRjbG9zIGZhaWxlZCIsIiIsZXJybm8pOworCSAg ICB9CisjZW5kaWYgLyogREVCVUcgKi8KKwl9CisJLyogVW5sb2NrIGFmdGVyIGNsb3NpbmcgYnV0 IGJlZm9yZSBhbnkgZ2V0dHkgbXVtYm8ganVtYm8gKi8KKworCWRlYnVnKEYxMDAsInR0Y2xvcyBh Ym91dCB0byBjYWxsIHR0dW5sY2siLCIiLDApOworICAgICAgICBpZiAodHR1bmxjaygpKSAgICAg ICAgICAgICAgICAgIC8qIFJlbGVhc2UgdXVjcC1zdHlsZSBsb2NrICovCisJICBmcHJpbnRmKHN0 ZGVyciwiV2FybmluZywgcHJvYmxlbSByZWxlYXNpbmcgbG9ja1xyXG4iKTsKKyAgICB9CisKKy8q IEZvciBiaWRpcmVjdGlvbmFsIGxpbmVzLCByZXN0b3JlIGdldHR5IGlmIGl0IHdhcyB0aGVyZSBi ZWZvcmUuICovCisKKyNpZmRlZiBBQ1VDTlRSTAkJCQkvKiA0LjNCU0QgYWN1Y250cmwoKSBtZXRo b2QuICovCisgICAgaWYgKHhsb2NhbCkgeworCWRlYnVnKEYxMDAsInR0Y2xvcyBBQ1VDTlRSTCIs IiIsMCk7CisJYWN1Y250cmwoImVuYWJsZSIsdHRubXN2KTsJLyogRW5hYmxlIGdldHR5IG9uIHRo ZSBkZXZpY2UuICovCisgICAgfQorI2Vsc2UKKyNpZmRlZiBBVFQ3MzAwCQkJCS8qIEFUVCBVTklY IFBDICgzQjEsIDczMDApIG1ldGhvZC4gKi8KKyAgICBpZiAoeGxvY2FsKSB7CisJZGVidWcoRjEw MCwidHRjbG9zIEFUVDczMDAgb25nZXR0eSIsIiIsMCk7CisJaWYgKGF0dG1vZGVtICYgRE9HRVRZ KQkJLyogV2FzIGdldHR5KDFtKSBydW5uaW5nIGJlZm9yZSB1cz8gKi8KKwkgIG9uZ2V0dHkodHRu bXN2KTsJCS8qIFllcywgcmVzdGFydCBnZXR0eSBvbiB0dHkgbGluZSAqLworCWF0dG1vZGVtICY9 IH5ET0dFVFk7CQkvKiBObyBwaG9uZSBpbiB1c2UsIGdldHR5IHJlc3RvcmVkICovCisgICAgfQor I2VuZGlmIC8qIEFUVDczMDAgKi8KKyNlbmRpZiAvKiBTeXN0ZW0tZGVwZW5kZW50IGdldHR5LXJl c3RvcmluZyBtZXRob2RzICovCisKKyNpZmRlZiBzb255X25ld3MKKyAgICBrbV9leHQgPSAtMTsJ CQkvKiBJbnZhbGlkYXRlIGRldmljZSdzIEthbmppLW1vZGUgKi8KKyNlbmRpZiAvKiBzb255X25l d3MgKi8KKworICAgIHR0eWZkID0gLTE7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEludmFs aWRhdGUgdGhlIGZpbGUgZGVzY3JpcHRvci4gKi8KKyAgICB3YXNjbG9zZWQgPSAxOworICAgIGRl YnVnKEYxMDAsInR0Y2xvcyBkb25lIiwiIiwwKTsKKyAgICByZXR1cm4oMCk7Cit9CisKKy8qICBU IFQgSCBBIE4gRyAgLS0gIEhhbmd1cCBwaG9uZSBsaW5lIG9yIG5ldHdvcmsgY29ubmVjdGlvbi4g ICovCisvKgorICBSZXR1cm5zOgorICAwIGlmIGl0IGRvZXMgbm90aGluZy4KKyAgMSBpZiBpdCBi ZWxpZXZlcyB0aGF0IGl0IGh1bmcgdXAgc3VjY2Vzc2Z1bGx5LgorIC0xIGlmIGl0IGJlbGlldmVz IHRoYXQgdGhlIGhhbmd1cCBhdHRlbXB0IGZhaWxlZC4KKyovCisKKyNkZWZpbmUgSFVQVElNRSA1 MDAJCQkvKiBNaWxsaXNlY29uZHMgZm9yIGhhbmd1cCAqLworCisjaWZkZWYgQ09NTUVOVAorLyog VGhlIGZvbGxvd2luZyBkaWRuJ3Qgd29yayBidXQgVElPQ1NEVFIgZG9lcyB3b3JrICovCisjaWZk ZWYgVU5JWFdBUkUKKy8qIERlZmluZSBIVVBfUE9TSVggdG8gZm9yY2Ugbm9uLVBPU0lYIGJ1aWxk cyB0byB1c2UgdGhlIFBPU0lYIGhhbmd1cCBtZXRob2QgKi8KKyNpZm5kZWYgUE9TSVgJCQkJLyog U3VjaCBhcyBVbml4d2FyZSAxLngsIDIueCAqLworI2lmbmRlZiBIVVBfUE9TSVgKKyNkZWZpbmUg SFVQX1BPU0lYCisjZW5kaWYgLyogSFVQX1BPU0lYICovCisjZW5kaWYgLyogUE9TSVggKi8KKyNl bmRpZiAvKiBVTklYV0FSRSAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKworI2lmbmRlZiBVU0Vf VElPQ1NEVFIKKyNpZmRlZiBfX05ldEJTRF9fCisvKiBCZWNhdXNlIHRoZSBQT1NJWCBtZXRob2Qg KHNldCBvdXRwdXQgc3BlZWQgdG8gMCkgZG9lc24ndCB3b3JrIGluIE5ldEJTRCAqLworI2lmZGVm IFRJT0NTRFRSCisjaWZkZWYgVElPQ0NEVFIKKyNkZWZpbmUgVVNFX1RJT0NTRFRSCisjZW5kaWYg LyogVElPQ0NEVFIgKi8KKyNlbmRpZiAvKiBUSU9DU0RUUiAqLworI2VuZGlmIC8qIF9fTmV0QlNE X18gKi8KKyNlbmRpZiAvKiBVU0VfVElPQ1NEVFIgKi8KKworI2lmbmRlZiBIVVBfQ0xPU0VfUE9T SVgKKyNpZmRlZiBPVTgKKyNkZWZpbmUgSFVQX0NMT1NFX1BPU0lYCisjZWxzZQorI2lmZGVmIENL X1NDT1Y1CisjZGVmaW5lIEhVUF9DTE9TRV9QT1NJWAorI2VuZGlmIC8qIENLX1NDT1Y1ICovCisj ZW5kaWYgLyogT1U4ICovCisjZW5kaWYgLyogSFVQX0NMT1NFX1BPU0lYICovCisKKyNpZmRlZiBO T19IVVBfQ0xPU0VfUE9TSVgKKyNpZmRlZiBIVVBfQ0xPU0VfUE9TSVgKKyN1bmRlZiBIVVBfQ0xP U0VfUE9TSVgKKyNlbmRpZiAvKiBIVVBfQ0xPU0VfUE9TSVggKi8KKyNlbmRpZiAvKiBOT19IVVBf Q0xPU0VfUE9TSVggKi8KKworaW50Cit0dGhhbmcoKSB7CisjaWZkZWYgTk9MT0NBTAorICAgIHJl dHVybigwKTsKKyNlbHNlCisgICAgaW50IHggPSAwOwkJCQkvKiBTb21ldGltZXMgdXNlZCBhcyBy ZXR1cm4gY29kZS4gKi8KKyNpZm5kZWYgUE9TSVgKKyAgICBpbnQgejsJCQkJLyogd29ya2VyICov CisjZW5kaWYgLyogUE9TSVggKi8KKworI2lmZGVmIENPSEVSRU5UCisjZGVmaW5lIFNWT1JQT1NJ WAorI2VuZGlmIC8qIENPSEVSRU5UICovCisKKyNpZmRlZiBTVk9SUE9TSVgJCQkvKiBBVCZULCBQ T1NJWCwgSFBVWCBkZWNsYXJhdGlvbnMuICovCisgICAgaW50IHNwZHNhdjsJCQkJLyogZm9yIHNh dmluZyBzcGVlZCAqLworI2lmZGVmIEhVUF9QT1NJWAorICAgIGludCBzcGRzYXZpOworI2Vsc2UK KyNpZmRlZiBCU0Q0NE9SUE9TSVgKKyAgICBpbnQgc3Bkc2F2aTsKKyNlbmRpZiAvKiBCU0Q0NE9S UE9TSVggKi8KKyNlbmRpZiAvKiBIVVBfUE9TSVggKi8KKyNpZmRlZiBIUFVYCisvKgorICBFYXJs eSB2ZXJzaW9ucyBvZiBIUC1VWCBvbWl0dGVkIHRoZSBtZmxhZyB0eXBlZGVmLiAgSWYgeW91IGdl dCBjb21wbGFpbnRzCisgIGFib3V0IGl0LCBqdXN0IGNoYW5nZSBpdCB0byBsb25nIChvciBiZXR0 ZXIgc3RpbGwsIHVuc2lnbmVkIGxvbmcpLgorKi8KKyAgICBtZmxhZworICAgICAgZHRyX2Rvd24g PSAwMDAwMDAwMDAwMCwKKyAgICAgIG1vZGVtX3J0biwKKyAgICAgIG1vZGVtX3NhdjsKKyAgICBj aGFyIG1vZGVtX3N0YXRlWzY0XTsKKyNlbmRpZiAvKiBIUFVYICovCisgICAgaW50IGZsYWdzOwkJ CQkvKiBmY250bCBmbGFncyAqLworICAgIHVuc2lnbmVkIHNob3J0IHR0Y19zYXZlOworI2VuZGlm IC8qIFNWT1JQT1NJWCAqLworCisgICAgaWYgKHR0eWZkIDwgMCkgcmV0dXJuKDApOyAgICAgICAg ICAgLyogRG9uJ3QgZG8gdGhpcyBpZiBub3Qgb3BlbiAgKi8KKyAgICBpZiAoeGxvY2FsIDwgMSkg cmV0dXJuKDApOwkJLyogRG9uJ3QgZG8gdGhpcyBpZiBub3QgbG9jYWwgKi8KKworI2lmZGVmIE5F VENNRAorICAgIGlmICh0dHBpcGUpCisgICAgICByZXR1cm4oKHR0Y2xvcygwKSA8IDApID8gLTEg OiAxKTsKKyNlbmRpZiAvKiBORVRDTUQgKi8KKyNpZmRlZiBORVRQVFkKKyAgICBpZiAodHRwdHkp CisgICAgICByZXR1cm4oKHR0Y2xvcygwKSA8IDApID8gLTEgOiAxKTsKKyNlbmRpZiAvKiBORVRQ VFkgKi8KKyNpZmRlZiBORVRDT05OCisgICAgaWYgKG5ldGNvbm4pIHsJCQkvKiBOZXR3b3JrIGNv bm5lY3Rpb24uICovCisjaWZkZWYgVE5fQ09NUE9SVAorICAgICAgICBpZiAoaXN0bmNvbXBvcnQo KSkgeworICAgICAgICAgICAgaW50IHJjID0gdG5jX3NldF9kdHJfc3RhdGUoMCk7CisgICAgICAg ICAgICBpZiAocmMgPj0gMCkgeworICAgICAgICAgICAgICAgIG1zbGVlcChIVVBUSU1FKTsKKyAg ICAgICAgICAgICAgICByYyA9IHRuY19zZXRfZHRyX3N0YXRlKDEpOworICAgICAgICAgICAgfQor ICAgICAgICAgICAgcmV0dXJuKHJjID49IDAgPyAxIDogLTEpOworICAgICAgICB9IGVsc2UKKyNl bmRpZiAvKiBUTl9DT01QT1JUICovCisJICByZXR1cm4oKG5ldGNsb3MoKSA8IDApID8gLTEgOiAx KTsgLyogSnVzdCBjbG9zZSBpdC4gKi8KKyAgfQorI2VuZGlmIC8qIE5FVENPTk4gKi8KKworLyog RnJvbSBoZXJlIGRvd24sIHdlIGhhbmRsZSByZWFsIHR0eSBkZXZpY2VzLiAqLworI2lmZGVmIEhV UF9QT1NJWAorLyoKKyAgZS5nLiBmb3IgVW5peHdhcmUgMiwgd2hlcmUgd2UgZG9uJ3QgaGF2ZSBh IGZ1bGwgUE9TSVggYnVpbGQsIHdlCisgIHN0aWxsIGhhdmUgdG8gdXNlIFBPU0lYLXN0eWxlIGhh bmd1cC4gIFRodXMgdGhlIGR1cGxpY2F0aW9uIG9mIHRoaXMKKyAgYW5kIHRoZSBuZXh0IGNhc2Us IHRoZSBvbmx5IGRpZmZlcmVuY2UgYmVpbmcgd2UgdXNlIGEgbG9jYWwgdGVybWlvcworICBzdHJ1 Y3QgaGVyZSwgc2luY2UgYSBkaWZmZXJlbnQgbW9kZWwgaXMgdXNlZCBlbHNld2hlcmUuCisKKyAg Tk8gTE9OR0VSIFVTRUQgYXMgb2YgQy1LZXJtaXQgOC4wIC0tIGl0IHR1cm5zIG91dCB0aGF0IHRo aXMgbWV0aG9kLAorICBldmVuIHRob3VnaCBpdCBjb21waWxlcyBhbmQgZXhlY3V0ZXMgd2l0aG91 dCBlcnJvciwgZG9lc24ndCBhY3R1YWxseQorICB3b3JrIChpLmUuIERUUiBkb2VzIG5vdCBkcm9w KSwgd2hlcmVhcyB0aGUgVElPQ1NEVFIgbWV0aG9kIHdvcmtzIGp1c3QgZmluZSwKKyovCisgICAg eworCXN0cnVjdCB0ZXJtaW9zIHR0Y3VyOworCWludCB4OworCWRlYnVnKEYxMDAsInR0aGFuZyBI VVBfUE9TSVggc3R5bGUiLCIiLDApOworCXggPSB0Y2dldGF0dHIodHR5ZmQsICZ0dGN1cik7CS8q IEdldCBjdXJyZW50IGF0dHJpYnV0ZXMgKi8KKwlkZWJ1ZyhGMTExLCJ0dGhhbmcgdGNnZXRhdHRy Iixja2l0b2EoZXJybm8pLHgpOworCWlmICh4IDwgMCkgcmV0dXJuKC0xKTsKKwlzcGRzYXYgPSBj ZmdldG9zcGVlZCgmdHRjdXIpOwkvKiBHZXQgY3VycmVudCBzcGVlZCAqLworCWRlYnVnKEYxMTEs InR0aGFuZyBjZmdldG9zcGVlZCIsY2tpdG9hKGVycm5vKSxzcGRzYXYpOworCXNwZHNhdmkgPSBj ZmdldGlzcGVlZCgmdHRjdXIpOwkvKiBHZXQgY3VycmVudCBzcGVlZCAqLworCWRlYnVnKEYxMTEs InR0aGFuZyBjZmdldGlzcGVlZCIsY2tpdG9hKGVycm5vKSxzcGRzYXZpKTsKKwl4ID0gY2ZzZXRv c3BlZWQoJnR0Y3VyLEIwKTsJLyogUmVwbGFjZSBieSAwICovCisJZGVidWcoRjExMSwidHRoYW5n IGNmc2V0b3NwZWVkIixja2l0b2EoZXJybm8pLHgpOworCWlmICh4IDwgMCkgcmV0dXJuKC0xKTsK Kwl4ID0gY2ZzZXRpc3BlZWQoJnR0Y3VyLEIwKTsKKwlkZWJ1ZyhGMTExLCJ0dGhhbmcgY2ZzZXRp c3BlZWQiLGNraXRvYShlcnJubykseCk7CisJaWYgKHggPCAwKSByZXR1cm4oLTEpOworCXggPSB0 Y3NldGF0dHIodHR5ZmQsVENTQURSQUlOLCZ0dGN1cik7CisJZGVidWcoRjExMSwidHRoYW5nIHRj c2V0YXR0ciBCMCIsY2tpdG9hKGVycm5vKSx4KTsKKwlpZiAoeCA8IDApIHJldHVybigtMSk7CisJ bXNsZWVwKEhVUFRJTUUpOwkJLyogU2xlZXAgMC41IHNlYyAqLworCXggPSBjZnNldG9zcGVlZCgm dHRjdXIsc3Bkc2F2KTsgLyogUmVzdG9yZSBwcmV2IHNwZWVkICovCisJaWYgKHggPCAwKSByZXR1 cm4oLTEpOworCWRlYnVnKEYxMTEsInR0aGFuZyBjZnNldG9zcGVlZCBwcmV2Iixja2l0b2EoZXJy bm8pLHgpOworCXggPSBjZnNldGlzcGVlZCgmdHRjdXIsc3Bkc2F2aSk7CisJZGVidWcoRjExMSwi dHRoYW5nIGNmc2V0aXNwZWVkIHByZXYiLGNraXRvYShlcnJubykseCk7CisJaWYgKHggPCAwKSBy ZXR1cm4oLTEpOworCXggPSB0Y3NldGF0dHIodHR5ZmQsVENTQURSQUlOLCZ0dGN1cik7CisJZGVi dWcoRjExMSwidHRoYW5nIHRjc2V0YXR0ciByZXN0b3JlIixja2l0b2EoZXJybm8pLHgpOworCWlm ICh4IDwgMCkgcmV0dXJuKC0xKTsKKwlyZXR1cm4oMSk7CisgICAgfQorI2Vsc2UKKyNpZmRlZiBC U0Q0NE9SUE9TSVgKKyNpZmRlZiBRTlgKKyAgICB7CisJaW50IHg7CisJeCA9IHRjZHJvcGxpbmUo dHR5ZmQsNTAwKTsKKwlkZWJ1ZyhGMTAxLCJ0dGhhbmcgUU5YIHRjZHJvcGxpbmUiLCIiLHgpOwor CXR0Y3VyLmNfY2ZsYWcgfD0gQ0xPQ0FMOworCXggPSB0Y3NldGF0dHIodHR5ZmQsVENTQURSQUlO LCZ0dGN1cik7CisJZGVidWcoRjEwMSwidHRoYW5nIFFOWCB0Y3NldGF0dHIgcmVzdG9yZSIsIiIs eCk7CisJaWYgKHggPCAwKSB7CisJICAgIGRlYnVnKEYxMDEsInR0aGFuZyBRTlggdGNzZXRhdHRy IHJlc3RvcmUgZXJybm8iLCIiLGVycm5vKTsKKwkgICAgcmV0dXJuKC0xKTsKKwl9CisJLyogRml4 IGZsYWdzIC0gZW5zdXJlIE9fTk9OQkxPQ0sgaXMgb2ZmICovCisKKwllcnJubyA9IDA7CisJZGVi dWcoRjEwMSwidHRoYW5nIFFOWCBpbmlmbGFncyIsIiIsaW5pZmxhZ3MpOworCWlmIChmY250bCh0 dHlmZCwgRl9TRVRGTCwgaW5pZmxhZ3MpID09IC0xKSB7CisJICAgIGRlYnVnKEYxMDEsInR0aGFu ZyBRTlggRl9TRVRGTCBlcnJubyIsIiIsZXJybm8pOworCSAgICByZXR1cm4oLTEpOworCX0KKwly ZXR1cm4oeCk7CisgICAgfQorI2Vsc2UgIC8qIFFOWCAqLworICAgIHsKKwlpbnQgeDsKKyNpZmRl ZiBVU0VfVElPQ1NEVFIKKwlkZWJ1ZyhGMTAwLCJ0dGhhbmcgQlNENDRPUlBPU0lYIFVTRV9USU9D U0RUUiIsIiIsMCk7CisJZXJybm8gPSAwOworCXggPSBpb2N0bCh0dHlmZCwgVElPQ0NEVFIsIE5V TEwpOworCWRlYnVnKEYxMTEsInR0aGFuZyBCU0Q0NE9SUE9TSVggaW9jdGwgVElPQ0NEVFIiLGNr aXRvYShlcnJubykseCk7CisJaWYgKHggPCAwKSByZXR1cm4oLTEpOworCW1zbGVlcChIVVBUSU1F KTsJCS8qIFNsZWVwIDAuNSBzZWMgKi8KKwllcnJubyA9IDA7CisJeCA9IGlvY3RsKHR0eWZkLCBU SU9DU0RUUiwgTlVMTCk7CisJZGVidWcoRjExMSwidHRoYW5nIEJTRDQ0T1JQT1NJWCBpb2N0bCBU SU9DU0RUUiIsY2tpdG9hKGVycm5vKSx4KTsKKwlpZiAoeCA8IDApIHJldHVybigtMSk7CisjZWxz ZSAgLyogVVNFX1RJT0NTRFRSICovCisKKyNpZmRlZiBIVVBfQ0xPU0VfUE9TSVgKKy8qCisgIElu IE9TUjUgdmVyc2lvbnMgd2hlcmUgVElPQ1NEVFIgaXMgbm90IGRlZmluZWQgKHVwIHRvIGFuZCBp bmNsdWRpbmcgYXQKKyAgbGVhc3QgNS4wLjZhKSB0aGUgUE9TSVggQVBJcyBpbiB0aGUgIiNlbHNl IiBwYXJ0IGJlbG93IGFyZSBhdmFpbGFibGUgYnV0CisgIGRvbid0IHdvcmssIGFuZCBubyBvdGhl ciBBUElzIGFyZSBhdmFpbGFibGUgdGhhdCBkbyB3b3JrLiAgSW4gdGhpcyBjYXNlCisgIHdlIGhh dmUgdG8gZHJvcCBEVFIgYnkgYnJ1dGUgZm9yY2U6IGNsb3NlIGFuZCByZW9wZW4gdGhlIHBvcnQu ICBUaGlzCisgIGNvZGUgYWN0dWFsbHkgd29ya3MsIGJ1dCBhbGwgdGhlIHN0ZXBzIGFyZSBjcnVj aWFsOiBzZXR0aW5nIENMT0NBTCwgdGhlCisgIE9fTkRFTEFZIG1hbmlwdWxhdGlvbnMsIGV0Yy4K KyovCisJZGVidWcoRjEwMCwidHRoYW5nIEhVUF9DTE9TRV9QT1NJWCBjbG9zZS9vcGVuIiwiIiww KTsKKwlkZWJ1ZyhGMTAxLCJ0dGhhbmcgSFVQX0NMT1NFX1BPU0lYIE9fTk9OQkxPQ0siLCIiLE9f Tk9OQkxPQ0spOworCWRlYnVnKEYxMDEsInR0aGFuZyBIVVBfQ0xPU0VfUE9TSVggT19OREVMQVki LCIiLE9fTkRFTEFZKTsKKwllcnJubyA9IDA7CisJeCA9IHRjZ2V0YXR0cih0dHlmZCwgJnR0Y3Vy KTsJLyogR2V0IGN1cnJlbnQgYXR0cmlidXRlcyAqLworCWRlYnVnKEYxMDEsInR0aGFuZyBIVVBf Q0xPU0VfUE9TSVggdGNnZXRhdHRyIiwiIix4KTsKKwlpZiAoeCA8IDApIHsKKwkgICAgZGVidWco RjEwMSwidHRoYW5nIEhVUF9DTE9TRV9QT1NJWCB0Y2dldGF0dHIgZXJybm8iLCIiLGVycm5vKTsK KwkgICAgcmV0dXJuKC0xKTsKKwl9CisJZXJybm8gPSAwOworCisJeCA9IGNsb3NlKHR0eWZkKTsJ CS8qIENsb3NlIHdpdGhvdXQgcmVsZWFzaW5nIGxvY2sgKi8KKwlpZiAoeCA8IDApIHsKKwkgICAg ZGVidWcoRjEwMSwidHRoYW5nIEhVUF9DTE9TRV9QT1NJWCBjbG9zZSBlcnJubyIsIiIsZXJybm8p OworCSAgICByZXR1cm4oLTEpOworCX0KKwllcnJubyA9IDA7CisJeCA9IG1zbGVlcCg1MDApOwkJ LyogUGF1c2UgaGFsZiBhIHNlY29uZCAqLworCWlmICh4IDwgMCkgewkJCS8qIE9yIGlmIHRoYXQg ZG9lc24ndCB3b3JrLCAxIHNlYyAqLworCSAgICBkZWJ1ZyhGMTAxLCJ0dGhhbmcgSFVQX0NMT1NF X1BPU0lYIG1zbGVlcCBlcnJubyIsIiIsZXJybm8pOworCSAgICBzbGVlcCgxKTsKKwl9CisJZXJy bm8gPSAwOworCXR0eWZkID0gcHJpdl9vcG4odHRubXN2LCAoT19SRFdSfE9fTkRFTEFZKSk7IC8q IFJlb3BlbiB0aGUgZGV2aWNlICovCisJZGVidWcoRjExMSwidHRoYW5nIEhVUF9DTE9TRV9QT1NJ WCByZW9wZW4iLHR0bm1zdix0dHlmZCk7CisJaWYgKHR0eWZkIDwgMCkgeworCSAgICBkZWJ1ZyhG MTAxLCJ0dGhhbmcgSFVQX0NMT1NFX1BPU0lYIHJlb3BlbiBlcnJubyIsIiIsZXJybm8pOworCSAg ICByZXR1cm4oLTEpOworCX0KKwlkZWJ1ZyhGMTAxLCJ0dGhhbmcgSFVQX0NMT1NFX1BPU0lYIHJl LXR0b3BlbiB0dHlmZCIsIiIsdHR5ZmQpOworCisJLyogUmVzdG9yZSBwcmV2aW91cyBhdHRyaWJ1 dGVzICovCisKKwllcnJubyA9IDA7CisJdHZ0ZmxnID0gMDsKKwl0dGN1ci5jX2NmbGFnIHw9IENM T0NBTDsKKwl4ID0gdGNzZXRhdHRyKHR0eWZkLFRDU0FEUkFJTiwmdHRjdXIpOworCWRlYnVnKEYx MDEsInR0aGFuZyBIVVBfQ0xPU0VfUE9TSVggdGNzZXRhdHRyIHJlc3RvcmUiLCIiLHgpOworCWlm ICh4IDwgMCkgeworCSAgICBkZWJ1ZyhGMTAxLCJ0dGhhbmcgSFVQX0NMT1NFX1BPU0lYIHRjc2V0 YXR0ciByZXN0b3JlIGVycm5vIiwKKwkJICAiIixlcnJubyk7CisJICAgIHJldHVybigtMSk7CisJ fQorCS8qIEZpeCBmbGFncyAtIGVuc3VyZSBPX05ERUxBWSBhbmQgT19OT05CTE9DSyBhcmUgb2Zm ICovCisKKwllcnJubyA9IDA7CisgICAgICAgIGlmICgoeCA9IGZjbnRsKHR0eWZkLCBGX0dFVEZM LCAwKSkgPT0gLTEpIHsKKwkgICAgZGVidWcoRjEwMSwidHRoYW5nIEhVUF9DTE9TRV9QT1NJWCBG X0dFVEZMIGVycm5vIiwiIixlcnJubyk7CisJICAgIHJldHVybigtMSk7CisJfQorCWRlYnVnKEYx MDEsInR0aGFuZyBIVVBfQ0xPU0VfUE9TSVggZmxhZ3MiLCIiLHgpOworCWVycm5vID0gMDsKKyAg ICAgICAgeCAmPSB+KE9fTk9OQkxPQ0t8T19OREVMQVkpOworCWRlYnVnKEYxMDEsInR0aGFuZyBI VVBfQ0xPU0VfUE9TSVggZmxhZ3MgdG8gc2V0IiwiIix4KTsKKwlkZWJ1ZyhGMTAxLCJ0dGhhbmcg SFVQX0NMT1NFX1BPU0lYIGluaWZsYWdzIiwiIixpbmlmbGFncyk7CisJaWYgKGZjbnRsKHR0eWZk LCBGX1NFVEZMLCB4KSA9PSAtMSkgeworCSAgICBkZWJ1ZyhGMTAxLCJ0dGhhbmcgSFVQX0NMT1NF X1BPU0lYIEZfU0VURkwgZXJybm8iLCIiLGVycm5vKTsKKwkgICAgcmV0dXJuKC0xKTsKKwl9Cisj aWZkZWYgREVCVUcKKwlpZiAoZGVibG9nKSB7CisJICAgIGlmICgoeCA9IGZjbnRsKHR0eWZkLCBG X0dFVEZMLCAwKSkgPiAtMSkgeworCQlkZWJ1ZyhGMTAxLCJ0dGhhbmcgSFVQX0NMT1NFX1BPU0lY IGZsYWdzIiwiIix4KTsKKwkJZGVidWcoRjEwMSwidHRoYW5nIEhVUF9DTE9TRV9QT1NJWCBmbGFn cyAmIE9fTk9OQkxPQ0siLAorCQkgICAgICAiIix4Jk9fTk9OQkxPQ0spOworCQlkZWJ1ZyhGMTAx LCJ0dGhhbmcgSFVQX0NMT1NFX1BPU0lYIGZsYWdzICYgT19OREVMQVkiLAorCQkgICAgICAiIix4 Jk9fTkRFTEFZKTsKKwkgICAgfQorCX0KKyNlbmRpZiAvKiBERUJVRyAqLworCisjZWxzZSAgLyog SFVQX0NMT1NFX1BPU0lYICovCisJCisJLyogR2VuZXJhbCBCU0Q0NE9SUE9TSVggY2FzZSAoTGlu dXgsIEJTREksIEZyZWVCU0QsIGV0YykgKi8KKworCWRlYnVnKEYxMDAsInR0aGFuZyBCU0Q0NE9S UE9TSVggQjAiLCIiLDApOworCXggPSB0Y2dldGF0dHIodHR5ZmQsICZ0dGN1cik7CS8qIEdldCBj dXJyZW50IGF0dHJpYnV0ZXMgKi8KKwlkZWJ1ZyhGMTExLCJ0dGhhbmcgQlNENDRPUlBPU0lYIHRj Z2V0YXR0ciIsY2tpdG9hKGVycm5vKSx4KTsKKwlpZiAoeCA8IDApIHJldHVybigtMSk7CisJc3Bk c2F2ID0gY2ZnZXRvc3BlZWQoJnR0Y3VyKTsJLyogR2V0IGN1cnJlbnQgc3BlZWQgKi8KKwlkZWJ1 ZyhGMTExLCJ0dGhhbmcgQlNENDRPUlBPU0lYIGNmZ2V0b3NwZWVkIixja2l0b2EoZXJybm8pLHNw ZHNhdik7CisJc3Bkc2F2aSA9IGNmZ2V0aXNwZWVkKCZ0dGN1cik7CS8qIEdldCBjdXJyZW50IHNw ZWVkICovCisJZGVidWcoRjExMSwidHRoYW5nIEJTRDQ0T1JQT1NJWCBjZmdldGlzcGVlZCIsY2tp dG9hKGVycm5vKSxzcGRzYXZpKTsKKwl4ID0gY2ZzZXRvc3BlZWQoJnR0Y3VyLEIwKTsJLyogUmVw bGFjZSBieSAwICovCisJZGVidWcoRjExMSwidHRoYW5nIEJTRDQ0T1JQT1NJWCBjZnNldG9zcGVl ZCIsY2tpdG9hKGVycm5vKSx4KTsKKwlpZiAoeCA8IDApIHJldHVybigtMSk7CisJeCA9IGNmc2V0 aXNwZWVkKCZ0dGN1cixCMCk7CisJZGVidWcoRjExMSwidHRoYW5nIEJTRDQ0T1JQT1NJWCBjZnNl dGlzcGVlZCIsY2tpdG9hKGVycm5vKSx4KTsKKwlpZiAoeCA8IDApIHJldHVybigtMSk7CisJLyog VGhpcyBnZXRzIEVJTlZBTCBvbiBOZXRCU0QgMS40LjEgYmVjYXVzZSBvZiBCMC4uLiAqLworCXgg PSB0Y3NldGF0dHIodHR5ZmQsVENTQURSQUlOLCZ0dGN1cik7CisJZGVidWcoRjExMSwidHRoYW5n IEJTRDQ0T1JQT1NJWCB0Y3NldGF0dHIgQjAiLGNraXRvYShlcnJubykseCk7CisJaWYgKHggPCAw KSByZXR1cm4oLTEpOworCW1zbGVlcChIVVBUSU1FKTsJCS8qIFNsZWVwIDAuNSBzZWMgKi8KKwlk ZWJ1ZyhGMTAxLCJ0dGhhbmcgQlNENDRPUlBPU0lYIHJlc3RvcmUgb3V0cHV0IHNwZWVkIiwiIixz cGRzYXYpOworCXggPSBjZnNldG9zcGVlZCgmdHRjdXIsc3Bkc2F2KTsgLyogUmVzdG9yZSBwcmV2 IHNwZWVkICovCisJZGVidWcoRjExMSwidHRoYW5nIEJTRDQ0T1JQT1NJWCBjZnNldG9zcGVlZCBw cmV2Iixja2l0b2EoZXJybm8pLHgpOworCWlmICh4IDwgMCkgcmV0dXJuKC0xKTsKKwlkZWJ1ZyhG MTAxLCJ0dGhhbmcgQlNENDRPUlBPU0lYIHJlc3RvcmUgaW5wdXQgc3BlZWQiLCIiLHNwZHNhdmkp OworCXggPSBjZnNldGlzcGVlZCgmdHRjdXIsc3Bkc2F2aSk7CisJZGVidWcoRjExMSwidHRoYW5n IEJTRDQ0T1JQT1NJWCBjZnNldGlzcGVlZCBwcmV2Iixja2l0b2EoZXJybm8pLHgpOworCWlmICh4 IDwgMCkgcmV0dXJuKC0xKTsKKwl0dGN1ci5jX2NmbGFnIHw9IENMT0NBTDsJLyogRG9uJ3QgZXhw ZWN0IENEIGFmdGVyIGhhbmd1cCAqLworCXggPSB0Y3NldGF0dHIodHR5ZmQsVENTQURSQUlOLCZ0 dGN1cik7CisJZGVidWcoRjExMSwidHRoYW5nIEJTRDQ0T1JQT1NJWCB0Y3NldGF0dHIgcmVzdG9y ZSIsY2tpdG9hKGVycm5vKSx4KTsKKwlpZiAoeCA8IDApIHJldHVybigtMSk7CisKKyNlbmRpZiAv KiBIVVBfQ0xPU0VfUE9TSVggKi8KKyNlbmRpZiAvKiBVU0VfVElPQ1NEVFIgKi8KKworCXJldHVy bigxKTsKKyAgICB9CisKKyNlbmRpZiAvKiBRTlggKi8KKyNlbHNlIC8qIEJTRDQ0T1JQT1NJWCAq LworCisjaWZkZWYgYWVnaXMJCQkJLyogQXBvbGxvIEFlZ2lzICovCisgICAgc2lvXyRjb250cm9s KChzaG9ydCl0dHlmZCwgc2lvXyRkdHIsIGZhbHNlLCBzdCk7ICAgIC8qIERUUiBkb3duICovCisg ICAgbXNsZWVwKEhVUFRJTUUpOwkJCQkJLyogcGF1c2UgKi8KKyAgICBzaW9fJGNvbnRyb2woKHNo b3J0KXR0eWZkLCBzaW9fJGR0ciwgdHJ1ZSwgIHN0KTsgICAgLyogRFRSIHVwICovCisgICAgcmV0 dXJuKDEpOworI2VuZGlmIC8qIGFlZ2lzICovCisKKyNpZmRlZiBBTllCU0QJCQkJLyogQW55IEJT RCB2ZXJzaW9uLiAqLworI2lmZGVmIFRJT0NDRFRSCQkJCS8qIEV4Y2VwdCB0aG9zZSB0aGF0IGRv bid0IGhhdmUgdGhpcyAqLworICAgIGRlYnVnKEYxMDAsInR0aGFuZyBCU0Qgc3R5bGUiLCIiLDAp OworICAgIGlmIChpb2N0bCh0dHlmZCxUSU9DQ0RUUiwwKSA8IDApIHsJLyogQ2xlYXIgRFRSLiAq LworCWRlYnVnKEYxMDEsInR0aGFuZyBUSU9DQ0RUUiBmYWlscyIsIiIsZXJybm8pOworCXJldHVy bigtMSk7CisgICAgfQorICAgIG1zbGVlcChIVVBUSU1FKTsJCQkvKiBGb3IgYWJvdXQgMS8yIHNl YyAqLworICAgIGVycm5vID0gMDsKKyAgICB4ID0gaW9jdGwodHR5ZmQsVElPQ1NEVFIsMCk7CS8q IFJlc3RvcmUgRFRSICovCisgICAgaWYgKHggPCAwKSB7CisJLyoKKwkgIEZvciBzb21lIHJlYXNv biwgdGhpcyB0ZW5kcyB0byBmYWlsIHdpdGggIm5vIHN1Y2ggZGV2aWNlIG9yIGFkZHJlc3MiCisJ ICBidXQgdGhlIG9wZXJhdGlvbiBzdGlsbCB3b3JrcywgcHJvYmFibHkgYmVjYXVzZSBvZiB0aGUg Y2xvc2Uvb3BlbgorCSAgbGF0ZXIgb24uICBTbyBsZXQncyBub3Qgc2NhcmUgdGhlIHVzZXIgdW5u ZWNlc3NhcmlseSBoZXJlLgorCSovCisJZGVidWcoRjEwMSwidHRoYW5nIFRJT0NTRFRSIGVycm5v IiwiIixlcnJubyk7IC8qIExvZyB0aGUgZXJyb3IgKi8KKwl4ID0gMTsJCQkJLyogUHJldGVuZCB3 ZSBzdWNjZWVkZWQgKi8KKyAgICB9IGVsc2UgaWYgKHggPT0gMCkgeCA9IDE7CQkvKiBTdWNjZXNz ICovCisjaWZkZWYgQ09NTUVOVAorI2lmZGVmIEZUMjEKKyAgICBpb2N0bCh0dHlmZCwgVElPQ1NB VkVNT0RFUywgMCk7CisgICAgaW9jdGwodHR5ZmQsIFRJT0NIUENMLCAwKTsKKyAgICBjbG9zZSh0 dHlmZCk7CQkJLyogWWVzLCBtdXN0IGRvIHRoaXMgdHdpY2UgKi8KKyAgICBpZiAoKHR0eWZkID0g b3Blbih0dG5tc3YsMikpIDwgMCkJLyogb24gRm9ydHVuZSBjb21wdXRlcnMuLi4gKi8KKyAgICAg IHJldHVybigtMSk7CQkJLyogKGJ1dCB3aHk/KSAqLworICAgIGVsc2UgeCA9IDE7CisjZW5kaWYg LyogRlQyMSAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyNlbmRpZiAvKiBUSU9DQ0RUUiAqLwor ICAgIGNsb3NlKGRvX29wZW4odHRubXN2KSk7CQkvKiBDbGVhciBpL28gZXJyb3IgY29uZGl0aW9u ICovCisgICAgZXJybm8gPSAwOworI2lmZGVmIENPTU1FTlQKKy8qIFRoaXMgaXMgZGVmaW5pdGVs eSBkYW5nZXJvdXMuICBXaHkgd2FzIGl0IGhlcmU/ICovCisgICAgeiA9IHR0dnQodHRzcGVlZCx0 dGZsb3cpOwkJLyogUmVzdG9yZSBtb2Rlcy4gKi8KKyAgICBkZWJ1ZyhGMTAxLCJ0dGhhbmcgdHR2 dCByZXR1cm5zIiwiIix6KTsKKyAgICByZXR1cm4oeiA8IDAgPyAtMSA6IDEpOworI2Vsc2UKKyAg ICByZXR1cm4oeCk7CisjZW5kaWYgLyogQ09NTUVOVCAqLworI2VuZGlmIC8qIEFOWUJTRCAqLwor CisjaWZkZWYgQVRUU1YKKy8qIEFUJlQgVU5JWCBzZWN0aW9uLCBpbmNsdWRlcyBIUC1VWCBhbmQg Z2VuZXJpYyBBVCZUIFN5c3RlbSBJSUkvVi4uLiAqLworCisjaWZkZWYgSFBVWAorLyogSGV3bGV0 dCBQYWNrYXJkIGFsbG93cyBleHBsaWNpdCBtYW5pcHVsYXRpb24gb2YgbW9kZW0gc2lnbmFscy4g Ki8KKworI2lmZGVmIENPTU1FTlQKKy8qIE9sZCB3YXkuLi4gKi8KKyAgICBkZWJ1ZyhGMTAwLCJ0 dGhhbmcgSFAtVVggc3R5bGUiLCIiLDApOworICAgIGlmIChpb2N0bCh0dHlmZCxNQ1NFVEFGLCZk dHJfZG93bikgPCAwKSAgICAgICAgLyogbG93ZXIgRFRSICovCisgICAgICByZXR1cm4oLTEpOwkJ ICAgIAkgICAgICAgICAgIC8qIG9vcHMsIGNhbid0LiAqLworICAgIG1zbGVlcChIVVBUSU1FKTsJ CQkgICAgICAgICAgIC8qIFBhdXNlIGhhbGYgYSBzZWNvbmQuICovCisgICAgeCA9IDE7CQkJCSAg ICAgICAgICAgLyogU2V0IHJldHVybiBjb2RlICovCisgICAgaWYgKGlvY3RsKHR0eWZkLE1DR0VU QSwmbW9kZW1fcnRuKSA+IC0xKSB7ICAgICAvKiBHZXQgbGluZSBzdGF0dXMuICovCisJaWYgKCht b2RlbV9ydG4gJiBNRENEKSAhPSAwKSAgICAgIAkgICAvKiBDaGVjayBpZiBDRCBpcyBsb3cuICov CisJICB4ID0gLTE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENEIGRpZG4n dCBkcm9wLCBmYWlsLiAqLworICAgIH0gZWxzZSB4ID0gLTE7CisKKyAgICAvKiBFdmVuIGlmIGFi b3ZlIGNhbGxzIGZhaWwsIFJUUyAmIERUUiBzaG91bGQgYmUgdHVybmVkIGJhY2sgb24uICovCisg ICAgbW9kZW1fcnRuID0gTVJUUyB8IE1EVFI7CisgICAgaWYgKGlvY3RsKHR0eWZkLE1DU0VUQUYs Jm1vZGVtX3J0bikgPCAwKSB4ID0gLTE7CisgICAgcmV0dXJuKHgpOworI2Vsc2UKKy8qIE5ldyB3 YXksIGZyb20gSGVsbG11dGggTWljaGFlbGlzICovCisgICAgZGVidWcoRjEwMCwidHRoYW5nIEhQ LVVYIHN0eWxlLCBIUFVYREVCVUciLCIiLDApOworICAgIGlmIChpb2N0bCh0dHlmZCxNQ0dFVEEs Jm1vZGVtX3J0bikgPT0gLTEpIHsgLyogR2V0IGN1cnJlbnQgc3RhdHVzLiAqLworCWRlYnVnKEYx MDAsInR0aGFuZyBIUC1VWDogY2FuJ3QgZ2V0IG1vZGVtIGxpbmVzLCBOTyBIQU5HVVAhIiwiIiww KTsKKwlyZXR1cm4oLTEpOworICAgIH0KKyAgICBzcHJpbnRmKG1vZGVtX3N0YXRlLCIlI2x4Iixt b2RlbV9ydG4pOworICAgIGRlYnVnKEYxMTAsInR0aGFuZyBIUC1VWDogbW9kZW0gbGluZXMgPSAi LG1vZGVtX3N0YXRlLDApOworICAgIG1vZGVtX3NhdiA9IG1vZGVtX3J0bjsJCS8qIFNhdmUgY3Vy cmVudCBtb2RlbSBzaWduYWxzICovCisgICAgbW9kZW1fcnRuICY9IH5NRFRSOwkJCS8qIFR1cm4g RFRSIGJpdCBvZmYgKi8KKyAgICBzcHJpbnRmKG1vZGVtX3N0YXRlLCIlI2x4Iixtb2RlbV9ydG4p OworICAgIGRlYnVnKEYxMTAsInR0aGFuZyBIUC1VWDogRFRSIGRvd24gPSAiLG1vZGVtX3N0YXRl LDApOworICAgIGlmIChpb2N0bCh0dHlmZCxNQ1NFVEFGLCZtb2RlbV9ydG4pIDwgMCkgeyAvKiBs b3dlciBEVFIgKi8KKwlkZWJ1ZyhGMTAwLCJ0dGhhbmcgSFAtVVg6IGNhbid0IGxvd2VyIERUUiEi LCIiLDApOworCXJldHVybigtMSk7CQkJLyogb29wcywgY2FuJ3QuICovCisgICAgfQorICAgIG1z bGVlcChIVVBUSU1FKTsJCQkvKiBQYXVzZSBoYWxmIGEgc2Vjb25kLiAqLworICAgIHggPSAxOwkJ CQkvKiBTZXQgcmV0dXJuIGNvZGUgKi8KKyAgICBpZiAoaW9jdGwodHR5ZmQsTUNHRVRBLCZtb2Rl bV9ydG4pID4gLTEpIHsgLyogR2V0IGxpbmUgc3RhdHVzLiAqLworCXNwcmludGYobW9kZW1fc3Rh dGUsIiUjbHgiLG1vZGVtX3J0bik7CisJZGVidWcoRjExMCwidHRoYW5nIEhQLVVYOiBtb2RlbSBs aW5lcyBnb3QgPSAiLG1vZGVtX3N0YXRlLDApOworCWlmICgobW9kZW1fcnRuICYgTURDRCkgIT0g MCkgewkvKiBDaGVjayBpZiBDRCBpcyBsb3cuICovCisJICAgIGRlYnVnKEYxMDAsInR0aGFuZyBI UC1VWDogRENEIG5vdCBkb3duIiwiIiwwKTsKKwkgICAgeCA9IC0xOwkJCS8qIENEIGRpZG4ndCBk cm9wLCBmYWlsLiAqLworCX0gZWxzZSB7CisJICAgIGRlYnVnKEYxMDAsInR0aGFuZyBIUC1VWDog RENEIGRvd24iLCIiLDApOworCX0KKyAgICB9IGVsc2UgeworCXggPSAtMTsKKwlkZWJ1ZyhGMTAw LCJ0dGhhbmcgSFAtVVg6IGNhbid0IGdldCBEQ0Qgc3RhdHVzICEiLCIiLDApOworICAgIH0KKwor ICAgIC8qIEV2ZW4gaWYgYWJvdmUgY2FsbHMgZmFpbCwgRFRSIHNob3VsZCBiZSB0dXJuZWQgYmFj ayBvbi4gKi8KKworICAgIG1vZGVtX3NhdiB8PSBNRFRSOworICAgIGlmIChpb2N0bCh0dHlmZCxN Q1NFVEFGLCZtb2RlbV9zYXYpIDwgMCkgeworCXggPSAtMTsKKwlkZWJ1ZyhGMTAwLCJ0dGhhbmcg SFAtVVg6IGNhbid0IHNldCBzYXZlZCBzdGF0ZSIsIiIsMCk7CisgICAgfSBlbHNlIHsKKwlzcHJp bnRmKG1vZGVtX3N0YXRlLCIlI2x4Iixtb2RlbV9zYXYpOworCWRlYnVnKEYxMTAsInR0aGFuZyBI UC1VWDogZmluYWwgbW9kZW0gbGluZXMgPSAiLG1vZGVtX3N0YXRlLDApOworICAgIH0KKyAgICBy ZXR1cm4oeCk7CisjZW5kaWYgLyogQ09NTUVOVCAqLworCisjZWxzZSAvKiBBVCZUIGJ1dCBub3Qg SFAtVVggKi8KKworLyogU1ZJRCBmb3IgQVQmVCBTeXN0ZW0gViBSMyBkZWZpbmVzIGlvY3RsJ3Mg Zm9yIGhhbmRsaW5nIG1vZGVtIHNpZ25hbHMuICovCisvKiBJdCBpcyBub3Qga25vd24gaG93IG1h bnksIGlmIGFueSwgc3lzdGVtcyBhY3R1YWxseSBpbXBsZW1lbnQgdGhlbSwgKi8KKy8qIHNvIHdl IGluY2x1ZGUgdGhlbSBoZXJlIGluIGlmZGVmJ3MuICovCisKKy8qCisgIFVuaXh3YXJlIGhhcyB0 aGUgVElPQ014eHggc3ltYm9scyBkZWZpbmVkLCBidXQgY2FsbGluZyBpb2N0bCgpIHdpdGggdGhl bQorICBnaXZlcyBlcnJvciAyMiAoaW52YWxpZCBhcmd1bWVudCkuCisqLworI2lmbmRlZiBfSUJN UjIKKy8qCisgIE5vIG1vZGVtLXNpZ25hbCB0d2lkZGxpbmcgZm9yIElCTSBSVCBQQyBvciBSUy82 MDAwLgorICBJbiBBSVggMy4xIGFuZCBlYXJsaWVyLCB0aGUgaW9jdGwoKSBjYWxsIGlzIGJyb2tl bi4KKyAgVGhpcyBjb2RlIGNvdWxkIGJlIGFjdGl2YXRlZCBmb3IgQUlYIDMuMSB3aXRoIFBURiAy MDA2IG9yIGxhdGVyCisgIChlLmcuIEFJWCAzLjIpLCBidXQgY2xvc2Uvb3BlbiBkb2VzIHRoZSBq b2IgdG9vLCBzbyB3aHkgYm90aGVyLgorKi8KKyNpZmRlZiBUSU9DTUJJUwkJCQkvKiBCaXQgU2V0 ICovCisjaWZkZWYgVElPQ01CSUMJCQkJLyogQml0IENsZWFyICovCisjaWZkZWYgVElPQ01fRFRS CQkJLyogRFRSICovCisKKy8qIENsZWFyIERUUiwgc2xlZXAgMzAwIG1zZWMsIHR1cm4gaXQgYmFj ayBvbi4gKi8KKy8qIElmIGFueSBvZiB0aGUgaW9jdGwncyByZXR1cm4gZmFpbHVyZSwgZ28gb24g dG8gdGhlIG5leHQgc2VjdGlvbi4gKi8KKworICAgIHogPSBUSU9DTV9EVFI7CQkJLyogQ29kZSBm b3IgRFRSLiAqLworI2lmZGVmIENPTU1FTlQKKy8qCisgIFRoaXMgd2FzIHRoZSBjYXVzZSBvZiB0 aGUgdHJvdWJsZXMgd2l0aCB0aGUgU29sYXJpcyBQb3J0IE1vbml0b3IuCisgIFRoZSBwcm9ibGVt IGlzOiBSVFMgbmV2ZXIgY29tZXMgYmFjayBvbi4gIE1vcmFsOiBEb24ndCBkbyBpdCEKKyAgKEJ1 dCB3aHkgZG9lc24ndCBpdCBjb21lIGJhY2sgb24/ICBTZWUgdGhlIFRJT0NNQklTIGNhbGwuLi4p CisqLworI2lmZGVmIFRJT0NNX1JUUwkJCS8qIExvd2VyIFJUUyB0b28gaWYgc3ltYm9sIGlzIGtu b3duLiAqLworICAgIHogfD0gVElPQ01fUlRTOworI2VuZGlmIC8qIFRJT0NNX1JUUyAqLworI2Vu ZGlmIC8qIENPTU1FTlQgKi8KKworICAgIGRlYnVnKEYxMDEsInR0aGFuZyBUSU9DTSBzaWduYWwg bWFzayIsIiIseik7CisgICAgaWYgKGlvY3RsKHR0eWZkLFRJT0NNQklDLCZ6KSA+IC0xKSB7ICAg LyogVHJ5IHRvIGxvd2VyIERUUi4gKi8KKwlkZWJ1ZyhGMTAwLCJ0dGhhbmcgVElPQ01CSUMgb2si LCIiLDApOworCW1zbGVlcChIVVBUSU1FKTsJCSAgIC8qIFBhdXNlIGhhbGYgYSBzZWNvbmQuICov CisJaWYgKGlvY3RsKHR0eWZkLFRJT0NNQklTLCZ6KSA+IC0xKSB7IC8qIFRyeSB0byB0dXJuIGl0 IGJhY2sgb24uICovCisJICAgIGRlYnVnKEYxMDAsInR0aGFuZyBUSU9DTUJJUyBvayIsIiIsMCk7 CisjaWZuZGVmIENMU09QTgorCSAgICByZXR1cm4oMSk7CQkJLyogU3VjY2VzcywgZG9uZS4gKi8K KyNlbmRpZiAvKiBDTFNPUE4gKi8KKwl9IGVsc2UgewkJCS8qIENvdWxkbid0IHJhaXNlLCBjb250 aW51ZS4gKi8KKwkgICAgZGVidWcoRjEwMSwidHRoYW5nIFRJT0NNQklTIGVycm5vIiwiIixlcnJu byk7CisJfQorICAgIH0gZWxzZSB7CQkJCS8qIENvdWxkbid0IGxvd2VyLCBjb250aW51ZS4gKi8K KyAJZGVidWcoRjEwMSwidHRoYW5nIFRJT0NNQklDIGVycm5vIiwiIixlcnJubyk7CisgICAgfQor I2VuZGlmIC8qIFRJT0NNX0RUUiAqLworI2VuZGlmIC8qIFRJT0NNQklDICovCisjZW5kaWYgLyog VElPQ01CSVMgKi8KKyNlbmRpZiAvKiBfSUJNUjIgKi8KKworLyoKKyAgR2VuZXJhbCBBVCZUIFVO SVggY2FzZSwgbm90IEhQVVguICBUaGUgZm9sbG93aW5nIGNvZGUgaXMgaGlnaGx5IHN1c3BlY3Qu ICBObworICB0d28gQVQmVC1iYXNlZCBzeXN0ZW1zIHNlZW0gdG8gZG8gdGhpcyB0aGUgc2FtZSB3 YXkuICBUaGUgb2JqZWN0IGlzIHNpbXBseQorICB0byB0dXJuIG9mZiBEVFIgYW5kIHRoZW4gdHVy biBpdCBiYWNrIG9uLiAgU1ZJRCBzYXlzIHRoZSB1bml2ZXJzYWwgbWV0aG9kCisgIGZvciB0dXJu aW5nIG9mZiBEVFIgaXMgdG8gc2V0IHRoZSBzcGVlZCB0byB6ZXJvLCBhbmQgdGhpcyBkb2VzIHNl ZW0gdG8gZG8KKyAgdGhlIHRyaWNrIGluIGFsbCBjYXNlcy4gIEJ1dCBuZWl0aGVyIFNWSUQgbm9y IGFueSBrbm93biBtYW4gcGFnZXMgc2F5IGhvdyB0bworICB0dXJuIERUUiBiYWNrIG9uIGFnYWlu LiAgU29tZSB2YXJpYW50cywgbGlrZSBtb3N0IFhlbml4IGltcGxlbWVudGF0aW9ucywKKyAgcmFp c2UgRFRSIGFnYWluIHdoZW4gdGhlIHNwZWVkIGlzIHJlc3RvcmVkIHRvIGEgbm9uemVybyB2YWx1 ZS4gIE90aGVycworICByZXF1aXJlIHRoZSBkZXZpY2UgdG8gYmUgY2xvc2VkIGFuZCBvcGVuZWQg YWdhaW4sIGJ1dCB0aGlzIGlzIHJpc2t5IGJlY2F1c2UKKyAgZ2V0dHkgY291bGQgc2VpemUgdGhl IGRldmljZSBkdXJpbmcgdGhlIGluc3RhbnQgaXQgaXMgY2xvc2VkLgorKi8KKworLyogUmV0dXJu IGNvZGUgZm9yIGlvY3RsIGZhaWx1cmVzLi4uICovCisjaWZkZWYgQVRUNjMwMAorICAgIHggPSAx OwkJCQkvKiBBVFQ2MzAwIGRvZXNuJ3Qgd2FudCB0byBmYWlsLi4uICovCisjZWxzZQorICAgIHgg PSAtMTsKKyNlbmRpZiAvKiBBVFQ2MzAwICovCisKKyAgICBkZWJ1ZyhGMTAwLCJ0dGhhbmcgZ2V0 IHNldHRpbmdzIiwiIiwwKTsKKyAgICBpZiAoaW9jdGwodHR5ZmQsVENHRVRBLCZ0dGN1cikgPCAw KSAvKiBHZXQgY3VycmVudCBzZXR0aW5ncy4gKi8KKyAgICAgIHJldHVybih4KTsJCQkvKiBGYWls IGlmIHRoaXMgZG9lc24ndCB3b3JrLiAqLworICAgIGlmICgoZmxhZ3MgPSBmY250bCh0dHlmZCxG X0dFVEZMLDApKSA8IDApIC8qIEdldCBkZXZpY2UgZmxhZ3MuICovCisgICAgICByZXR1cm4oeCk7 CisgICAgdHRjX3NhdmUgPSB0dGN1ci5jX2NmbGFnOwkJLyogUmVtZW1iZXIgY3VycmVudCBzcGVl ZC4gKi8KKyAgICBzcGRzYXYgPSB0dGNfc2F2ZSAmIENCQVVEOworICAgIGRlYnVnKEYxMDEsInR0 aGFuZyBzcGVlZCIsIiIsc3Bkc2F2KTsKKworI2lmZGVmIE9fTkRFTEFZCisgICAgZGVidWcoRjEw MCwidHRoYW5nIHR1cm5pbmcgT19OREVMQVkgb24iLCIiLDApOworICAgIGZjbnRsKHR0eWZkLCBG X1NFVEZMLCBmbGFncyB8IE9fTkRFTEFZKTsgLyogQWN0aXZhdGUgT19OREVMQVkgKi8KKyNlbmRp ZiAvKiBPX05ERUxBWSAqLworCisjaWZkZWYgQVRUNzMwMCAvKiBUaGlzIGlzIHRoZSB3YXkgaXQg aXMgU1VQUE9TRUQgdG8gd29yayAqLworICAgIHR0Y3VyLmNfY2ZsYWcgJj0gfkNCQVVEOwkJLyog Q2hhbmdlIHRoZSBzcGVlZCB0byB6ZXJvLiAgKi8KKyNlbHNlCisjaWZkZWYgUlRBSVgKKyAgICB0 dGN1ci5jX2NmbGFnICY9IH5DQkFVRDsJCS8qIENoYW5nZSB0aGUgc3BlZWQgdG8gemVyby4gICov CisjZWxzZSAgICAgICAgICAvKiBUaGlzIHdheSByZWFsbHkgd29ya3MgYnV0IG1heSBiZSBkYW5n ZXJvdXMgKi8KKyNpZmRlZiB1M2IyCisgICAgdHRjdXIuY19jZmxhZyA9IH4oQ0JBVUR8Q0xPQ0FM KTsJLyogU3BlY2lhbCBmb3IgQVQmVCAzQjJzICovCisJCQkJCS8qIChDTE9DQUwgbXVzdCBiZSBP RkYpICovCisjZWxzZQorI2lmZGVmIFNDTzNSMgkJCQkvKiBTQ08gVU5JWCAzLjIgKi8KKy8qCisg IFRoaXMgaXMgY29tcGxldGUgbm9uc2Vuc2UsIGJ1dCBhbiBTQ08gdXNlciBjbGFpbWVkIHRoaXMg Y2hhbmdlIG1hZGUKKyAgaGFuZ2luZyB1cCB3b3JrLiAgQ29tbWVudHMgZnJvbSBvdGhlciBTQ08g VU5JWCAzLjIgdXNlcnMgd291bGQgYmUKKyAgYXBwcmVjaWF0ZWQuCisqLworICAgIHR0Y3VyLmNf Y2ZsYWcgPSBDQkFVRHxCMDsKKyNlbHNlCisjaWZkZWYgQUlYUlMJCQkJLyogQUlYIG9uIFJTLzYw MDAgKi8KKy8qCisgIENhbid0IHNldCBzcGVlZCB0byB6ZXJvIG9uIEFJWCAzLjEgb24gUlMvNjAw MCA2NC1wb3J0IGFkYXB0ZXIsCisgIGV2ZW4gdGhvdWdoIHlvdSBjYW4gZG8gaXQgb24gdGhlIGJ1 aWx0LWluIHBvcnQgYW5kIHRoZSA4LSBhbmQgMTYtcG9ydAorICBhZGFwdGVycy4gIChVbnRlc3Rl ZCBvbiAxMjgtcG9ydCBhZGFwdGVyLikKKyovCisgICAgdHRjdXIuY19jZmxhZyA9IENMT0NBTHxI VVBDTHxzcGRzYXY7IC8qIFNwZWVkIDAgY2F1c2VzIEVJTlZBTCAqLworI2Vsc2UJCQkJCS8qIE5v bmUgb2YgdGhlIGFib3ZlICovCisvKgorICBTZXQgZXZlcnl0aGluZywgaW5jbHVkaW5nIHRoZSBz cGVlZCwgdG8gemVybywgZXhjZXB0IGZvciB0aGUgQ0xPQ0FMCisgIGFuZCBIVVBDTCBiaXRzLgor Ki8KKyAgICB0dGN1ci5jX2NmbGFnID0gQ0xPQ0FMfEhVUENMOworI2VuZGlmIC8qIEFJWFJTICov CisjZW5kaWYgLyogU0NPM1IyICovCisjZW5kaWYgLyogdTNiMiAqLworI2VuZGlmIC8qIFJUQUlY ICovCisjZW5kaWYgLyogQVRUNzMwMCAqLworCisjaWZkZWYgQ09NTUVOVAorICAgIC8qIGFuZCBp ZiBub25lIG9mIHRob3NlIHdvcmssIHRyeSBvbmUgb2YgdGhlc2UuLi4gKi8KKyAgICB0dGN1ci5j X2NmbGFnID0gMDsKKyAgICB0dGN1ci5jX2NmbGFnID0gQ0xPQ0FMOworICAgIHR0Y3VyLmNfY2Zs YWcgJj0gfihDQkFVRHxIVVBDTCk7CisgICAgdHRjdXIuY19jZmxhZyAmPSB+KENCQVVEfENSRUFE KTsKKyAgICB0dGN1ci5jX2NmbGFnICY9IH4oQ0JBVUR8Q1JFQUR8SFVQQ0wpOworICAgIC8qIG9y IG90aGVyIGNvbWJpbmF0aW9ucyAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKworI2lmZGVmIFRD WE9OQworICAgIGRlYnVnKEYxMDAsInR0aGFuZyBUQ1hPTkMiLCIiLDApOworICAgIGlmIChpb2N0 bCh0dHlmZCwgVENYT05DLCAxKSA8IDApIHsKKwlkZWJ1ZyhGMTAxLCJ0dGhhbmcgVENYT05DIGZh aWxlZCIsIiIsZXJybm8pOworICAgIH0KKyNlbmRpZiAvKiBUQ1hPTkMgKi8KKworI2lmZGVmIFRJ T0NTVEFSVAorICAgIGRlYnVnKEYxMDAsInR0aGFuZyBUSU9DU1RBUlQiLCIiLDApOworICAgIGlm IChpb2N0bCh0dHlmZCwgVElPQ1NUQVJULCAwKSA8IDApIHsKKwlkZWJ1ZyhGMTAxLCJ0dGhhbmcg VElPQ1NUQVJUIGZhaWxlZCIsIiIsZXJybm8pOworICAgIH0KKyNlbmRpZiAvKiBUSU9DU1RBUlQg Ki8KKworICAgIGlmIChpb2N0bCh0dHlmZCxUQ1NFVEFGLCZ0dGN1cikgPCAwKSB7IC8qIEZhaWwg aWYgd2UgY2FuJ3QuICovCisJZGVidWcoRjEwMSwidHRoYW5nIFRDU0VUQUYgZmFpbGVkIiwiIixl cnJubyk7CisJZmNudGwodHR5ZmQsIEZfU0VURkwsIGZsYWdzKTsJLyogUmVzdG9yZSBmbGFncyAq LworCXJldHVybigtMSk7CQkJLyogYmVmb3JlIHJldHVybmluZy4gKi8KKyAgICB9CisgICAgbXNs ZWVwKDMwMCk7CQkJLyogR2l2ZSBtb2RlbSB0aW1lIHRvIG5vdGljZS4gKi8KKworI2lmbmRlZiBO T0NPVEZNQworCisvKiBOb3csIGV2ZW4gdGhvdWdoIGl0IGRvZXNuJ3Qgc2F5IHRoaXMgaW4gU1ZJ RCBvciBhbnkgbWFuIHBhZ2UsIHdlIGhhdmUgKi8KKy8qIHRvIGNsb3NlIGFuZCByZW9wZW4gdGhl IGRldmljZS4gIFRoaXMgaXMgbm90IG5lY2Vzc2FyeSBmb3IgYWxsIHN5c3RlbXMsICovCisvKiBi dXQgaXQncyBpbXBvc3NpYmxlIHRvIHByZWRpY3Qgd2hpY2ggb25lcyBuZWVkIGl0IGFuZCB3aGlj aCBvbmVzIGRvbid0LiAqLworCisjaWZkZWYgQVRUNzMwMAorLyoKKyAgU3BlY2lhbCBoYW5kbGlu ZyBmb3IgQVRUIDczMDAgVU5JWCBQQyBhbmQgM0IxLCB3aGljaCBoYXZlICJwaG9uZSIKKyAgcmVs YXRlZCBpb2N0bCdzIGZvciB0aGVpciBpbnRlcm5hbCBtb2RlbXMuICBhdHRtb2RlbSBoYXMgZ2V0 dHkgc3RhdHVzIGFuZAorICBtb2RlbS1pbi11c2UgYml0LiAgUmVwb3J0ZWRseSB0aGUgQVRUNzMw MC8zQjEgUElPQ0RJU0MgY2FsbCBpcyBuZWNlc3NhcnksCisgIGJ1dCBhbHNvIHJ1aW5zIHRoZSBm aWxlIGRlc2NyaXB0b3IsIGFuZCBubyBvdGhlciBwaG9uZSg3KSBpb2N0bCBjYWxsIGNhbiBmaXgK KyAgaXQuICBXaGF0ZXZlciBpdCBkb2VzLCBpdCBzZWVtcyB0byBlc2NhcGUgZGV0ZWN0aW9uIHdp dGggUElPQ0dFVEEgYW5kIFRDR0VUQS4KKyAgVGhlIG9ubHkgd2F5IHRvIHVuZG8gdGhlIGRhbWFn ZSBpcyB0byBjbG9zZSB0aGUgZmQgYW5kIHRoZW4gcmVvcGVuIGl0LgorKi8KKyAgICBpZiAoYXR0 bW9kZW0gJiBJU01PREVNKSB7CisJZGVidWcoRjEwMCwidHRoYW5nIGF0dG1vZGVtIGNsb3NlL29w ZW4iLCIiLDApOworCWlvY3RsKHR0eWZkLFBJT0NVTkhPTEQsJmRpYWxlcik7IC8qIFJldHVybiBj YWxsIHRvIGhhbmRzZXQuICovCisJaW9jdGwodHR5ZmQsUElPQ0RJU0MsJmRpYWxlcik7CS8qIERp c2Nvbm5lY3QgcGhvbmUuICovCisJY2xvc2UodHR5ZmQpOwkJCS8qIENsb3NlIGFuZCByZW9wZW4g dGhlIGZkLiAqLworCXR0eWZkID0gcHJpdl9vcG4odHRubXN2LCBPX1JEV1IgfCBPX05ERUxBWSk7 CisJYXR0bW9kZW0gJj0gfklTTU9ERU07CQkvKiBQaG9uZSBubyBsb25nZXIgaW4gdXNlLiAqLwor ICAgIH0KKyNlbHNlIC8qICFBVFQ3MzAwICovCisvKiBJdCBzZWVtcyB3ZSBoYXZlIHRvIGNsb3Nl IGFuZCBvcGVuIHRoZSBkZXZpY2UgZm9yIG90aGVyIEFUJlQgc3lzdGVtcyAqLworLyogdG9vLCBh bmQgdGhpcyBpcyB0aGUgcGxhY2UgdG8gZG8gaXQuICBUaGUgZm9sbG93aW5nIGNvZGUgZG9lcyB0 aGUgKi8KKy8qIGZhbW91cyBjbG9zZShvcGVuKC4uLikpIG1hZ2ljIGJ5IGRlZmF1bHQuICBJZiB0 aGF0IGRvZXNuJ3Qgd29yayBmb3IgeW91LCAqLworLyogdGhlbiB0cnkgdW5jb21tZW50aW5nIHRo ZSBmb2xsb3dpbmcgc3RhdGVtZW50IG9yIHB1dHRpbmcgLURDTFNPUE4gaW4gKi8KKy8qIHRoZSBt YWtlZmlsZSBDRkxBR1MuICovCisKKy8qICNkZWZpbmUgQ0xTT1BOICovCisKKyNpZm5kZWYgU0NP MzIgLyogTm90IG5lZWRlZCBieSwgYW5kIGhhcm1mdWwgdG8sIFNDTyBVTklYIDMuMiAvIFhlbml4 IDIuMyAqLworCisjaWZkZWYgT19OREVMQVkKKyNkZWZpbmUgT1BFTkZMR1MgT19SRFdSIHwgT19O REVMQVkKKyNlbHNlCisjZGVmaW5lIE9QRU5GTEdTIE9fUkRXUgorI2VuZGlmCisKKyNpZm5kZWYg Q0xTT1BOCisvKiBUaGlzIG1ldGhvZCBpcyB1c2VkIGJ5IGRlZmF1bHQsIGkuZS4gdW5sZXNzIENM U09QTiBpcyBkZWZpbmVkLiAqLworLyogSXQgaXMgdGhvdWdodCB0byBiZSBzYWZlciBiZWNhdXNl IHRoZXJlIGlzIG5vIHdpbmRvdyB3aGVyZSBnZXR0eSAqLworLyogY2FuIHNlaXplIGNvbnRyb2wg b2YgdGhlIGRldmljZS4gIFRoZSBkcmF3YmFjayBpcyB0aGF0IGl0IG1pZ2h0IG5vdCB3b3JrLiAq LworCisgICAgZGVidWcoRjEwMSwidHRoYW5nIGNsb3NlKG9wZW4oKSksIE9QRU5GTEdTIiwiIixP UEVORkxHUyk7CisgICAgY2xvc2UocHJpdl9vcG4odHRubXN2LCBPUEVORkxHUykpOworCisjZWxz ZQorLyogVGhpcyBtZXRob2QgaXMgdXNlZCBpZiB5b3UgI2RlZmluZSBDTFNPUE4uICBJdCBpcyBt b3JlIGxpa2VseSB0byB3b3JrICovCisvKiB0aGFuIHRoZSBwcmV2aW91cyBtZXRob2QsIGJ1dCBp dCdzIGFsc28gbW9yZSBkYW5nZXJvdXMuICovCisKKyAgICBkZWJ1ZyhGMTAxLCJ0dGhhbmcgY2xv c2Uvb3BlbiwgT1BFTkZMR1MiLCIiLE9QRU5GTEdTKTsKKyAgICBjbG9zZSh0dHlmZCk7CisgICAg bXNsZWVwKDEwKTsKKyAgICB0dHlmZCA9IHByaXZfb3BuKHR0bm1zdiwgT1BFTkZMR1MpOwkvKiBP cGVuIGl0IGFnYWluICovCisjZW5kaWYgLyogQ0xTT1BOICovCisjdW5kZWYgT1BFTkZMR1MKKwor I2VuZGlmIC8qIFNDTzMyICovCisjZW5kaWYgLyogQVRUNzMwMCAqLworCisjZW5kaWYgLyogTk9D T1RGTUMgKi8KKworLyogTm93IHB1dCBhbGwgZmxhZ3MgJiBtb2RlcyBiYWNrIHRoZSB3YXkgd2Ug Zm91bmQgdGhlbS4gKi8KKy8qIChEb2VzIHRoZSBvcmRlciBvZiBpb2N0bCAmIGZjbnRsIG1hdHRl ciA/ICkgKi8KKworICAgIGRlYnVnKEYxMDAsInR0aGFuZyByZXN0b3JlIHNldHRpbmdzIiwiIiww KTsKKyAgICB0dGN1ci5jX2NmbGFnID0gdHRjX3NhdmU7CQkvKiBHZXQgb2xkIHNwZWVkIGJhY2su ICovCisgICAgaWYgKGlvY3RsKHR0eWZkLFRDU0VUQUYsJnR0Y3VyKSA8IDApIC8qIGlvY3RsIHBh cmFtZXRlcnMuICovCisgICAgICByZXR1cm4oLTEpOworI2lmZGVmIE9fTkRFTEFZCisvKgorICBU aGlzIGlzIHJlcXVpcmVkIGZvciBJQk0gUlQgYW5kIFJTLzYwMDAsIHByb2JhYmx5IGhlbHBzIGVs c2V3aGVyZSB0b28gKD8pLgorICBBZnRlciBjbG9zaW5nIGEgbW9kZW0gbGluZSwgdGhlIG1vZGVt IHdpbGwgcHJvYmFibHkgbm90IGJlIGFzc2VydGluZworICBjYXJyaWVyIGFueSBtb3JlLCBzbyB3 ZSBzaG91bGQgbm90IHJlcXVpcmUgY2FycmllciBhbnkgbW9yZS4gIElmIHRoaXMKKyAgY2F1c2Vz IHRyb3VibGUgb24gbm9uLUlCTSBVTklYZXMsIGNoYW5nZSB0aGUgI2lmZGVmIHRvIHVzZSBfSUJN UjIgcmF0aGVyCisgIHRoYW4gT19OREVMQVkuCisqLworICAgIGZsYWdzICY9IH5PX05ERUxBWTsJ CQkvKiBEb24ndCByZXF1aXJlIGNhcnJpZXIgb24gcmVvcGVuICovCisjZW5kaWYgLyogT19OREVM QVkgKi8KKyAgICBpZiAoZmNudGwodHR5ZmQsRl9TRVRGTCxmbGFncykgPCAwKQkvKiBmY250bCBw YXJhbWV0ZXJzICovCisgICAgICByZXR1cm4oLTEpOworCisgICAgcmV0dXJuKDEpOworI2VuZGlm IC8qIG5vdCBIUFVYICovCisjZW5kaWYgLyogQVRUU1YgKi8KKyNlbmRpZiAvKiBCU0Q0NE9SUE9T SVggKi8KKyNlbmRpZiAvKiBIVVBfUE9TSVggKi8KKyNlbmRpZiAvKiBOT0xPQ0FMICovCit9CisK Ky8qCisgIE1ham9yIGNoYW5nZSBpbiA1QSgxNzQpLiAgV2UgdXNlZCB0byB1c2UgTFBBU1M4LCBp ZiBpdCB3YXMgZGVmaW5lZCwgdG8KKyAgYWxsb3cgOC1iaXQgZGF0YSBhbmQgWG9uL1hvZmYgZmxv dyBjb250cm9sIGF0IHRoZSBzYW1lIHRpbWUuICBCdXQgdGhpcworICBMUEFTUzggYnVzaW5lc3Mg c2VlbXMgdG8gaGF2ZSBiZWVuIGNhdXNpbmcgdHJvdWJsZSBmb3IgZXZlcnlib2R5IGJ1dCBtZSEK KyAgRm9yIGV4YW1wbGUsIEFubmV4IHRlcm1pbmFsIHNlcnZlcnMsIGNvbW1vbmx5IHVzZWQgd2l0 aCBFbmNvcmUgY29tcHV0ZXJzLAorICBkbyBub3Qgc3VwcG9ydCBMUEFTUzggZXZlbiB0aG91Z2gg dGhlIEVuY29yZSBpdHNlbGYgZG9lcy4gIERpdHRvIGZvciBtYW55CisgIG90aGVyIHRlcm1pbmFs IHNlcnZlcnMsIFRFTE5FVCBjb25uZWN0aW9ucywgcmxvZ2luIGNvbm5lY3Rpb25zLCBldGMgZXRj LgorICBOb3csIHJlcG9ydGVkbHksIGV2ZW4gdmFuaWxsYSA0LjMgQlNEIHN5c3RlbXMgY2FuJ3Qg ZG8gdGhpcyByaWdodCBvbiB0aGVpcgorICBzZXJpYWwgbGluZXMsIGV2ZW4gdGhvdWdoIExQQVNT OCBpcyBhIGZlYXR1cmUgb2YgNC4zQlNELiAgU28gbGV0J3MgdHVybiBpdAorICBvZmYgZm9yIGV2 ZXJ5Ym9keS4gIFRoYXQgbWVhbnMgd2UgZ29lcyBiYWNrIHRvIHVzaW5nIHJhdyBtb2RlLCB3aXRo IG5vCisgIGZsb3cgY29udHJvbC4gIFBob29leS4KKworICBOT1RFOiBUaGlzIG11c3QgYmUgZG9u ZSBiZWZvcmUgdGhlIGZpcnN0IHJlZmVyZW5jZSB0byBMUEFTUzggaW4gdGhpcyBmaWxlLAorICBh bmQgYWZ0ZXIgdGhlIGxhc3QgI2luY2x1ZGUgc3RhdG1lbnQuCisqLworI2lmZGVmIExQQVNTOAor I3VuZGVmIExQQVNTOAorI2VuZGlmIC8qIExQQVNTOCAqLworCisvKiAgVCBUIFIgRSBTICAtLSAg UmVzdG9yZSB0ZXJtaW5hbCB0byAibm9ybWFsIiBtb2RlLiAgKi8KKworLyogc2tlQHBrbWFiLnNl OiBUaGVyZSBhcmUgdHdvIGNob2ljZXMgZm9yIHdoYXQgdGhpcyBmdW5jdGlvbiBzaG91bGQgZG8u CisgKiAoMSkgUmVzdG9yZSB0aGUgdHR5IHRvIGN1cnJlbnQgIm5vcm1hbCIgbW9kZSwgd2l0aCBj YXJyaWVyIHRyZWF0bWVudAorICogYWNjb3JkaW5nIHRvIHR0Y2FyciwgdG8gYmUgdXNlZCBhZnRl ciBldmVyeSBrZXJtaXQgY29tbWFuZC4gKDIpIFJlc3RvcmUKKyAqIHRoZSB0dHkgdG8gdGhlIHN0 YXRlIGl0IHdhcyBpbiBiZWZvcmUga2VybWl0IG9wZW5lZCBpdC4gVGhlc2UgY2hvaWNlcworICog Y29uZmxpY3QsIHNpbmNlIHR0b2xkIGNhbid0IGhvbGQgYm90aCBjaG9pY2VzIG9mIHR0eSBwYXJh bWV0ZXJzLiAgdHRyZXMoKQorICogaXMgY3VycmVudGx5IGJlaW5nIGNhbGxlZCBhcyBpbiBjaG9p Y2UgKDEpLCBidXQgdHRvbGQgYmFzaWNhbGx5IGhvbGRzCisgKiB0aGUgaW5pdGlhbCBwYXJhbWV0 ZXJzLCBhcyBpbiAoMiksIGFuZCB0aGUgZGVzY3JpcHRpb24gYXQgdGhlIGJlZ2lubmluZworICog b2YgdGhpcyBmaWxlIHNheXMgKDIpLgorICoKKyAqIEkgZG9uJ3QgdGhpbmsgcmVzdG9yaW5nIHR0 eSBwYXJhbWV0ZXJzIGFmdGVyIGFsbCBrZXJtaXQgY29tbWFuZHMgbWFrZXMKKyAqIG11Y2ggb2Yg YSBkaWZmZXJlbmNlLiAgUmVzdG9yaW5nIHRoZW0gdXBvbiBleGl0IGZyb20ga2VybWl0IG1heSBi ZSBvZgorICogc29tZSB1c2UgaW4gc29tZSBjYXNlcyAod2hlbiB0aGUgbGluZSBpcyBub3QgcmVz dG9yZWQgYXV0b21hdGljYWxseSBvbgorICogY2xvc2UsIGJ5IHRoZSBvcGVyYXRpbmcgc3lzdGVt KS4KKyAqCisgKiBJIGNhbid0IGNob29zZSB3aGljaCBvbmUgaXQgc2hvdWxkIGJlLCBzbyBJIGhh dmVuJ3QgY2hhbmdlZCBpdC4gSXQKKyAqIHByb2JhYmx5IHdvcmtzIGFzIGl0IGlzLCB0b28uIEl0 IHdvdWxkIHByb2JhYmx5IGV2ZW4gd29yayBldmVuIHdpdGgKKyAqIHR0cmVzKCkgZW50aXJlbHkg ZGVsZXRlZC4uLgorICoKKyAqIChmcm9tIGZkYzogQWN0dWFsbHksIHRoaXMgZnVuY3Rpb24gb3Bl cmF0ZXMgaW4gcmVtb3RlIG1vZGUgdG9vLCBzbworICogaXQgcmVzdG9yZXMgdGhlIGNvbnNvbGUg KGNvbW1hbmQpIHRlcm1pbmFsIHRvIHdoYXRldmVyIG1vZGUgaXQgd2FzCisgKiBpbiBiZWZvcmUg cGFja2V0IG9wZXJhdGlvbnMgYmVnYW4sIHNvIHRoYXQgY29tbWFuZHMgd29yayByaWdodCBhZ2Fp bi4pCisgKi8KK2ludAordHRyZXMoKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IFJlc3RvcmUgdGhlIHR0eSB0byBub3JtYWwuICovCisgICAgaW50IHg7CisKKyAgICBpZiAodHR5 ZmQgPCAwKSByZXR1cm4oLTEpOyAgICAgICAgICAvKiBOb3Qgb3Blbi4gKi8KKworICAgIGlmICh0 dGZkZmxnKSByZXR1cm4oMCk7CQkvKiBEb24ndCBtZXNzIHdpdGggdGVybWluYWwgbW9kZXMgaWYg Ki8KKwkJCQkJLyogd2UgZ290IHR0eWZkIGZyb20gYW5vdGhlciBwcm9jZXNzICovCisjaWZkZWYJ TkVUQ09OTgorICAgIGlmIChuZXRjb25uKSB7CQkJLyogTmV0d29yayBjb25uZWN0aW9uICovCisg ICAgICAgIHR2dGZsZyA9IDA7CisjaWZkZWYgVENQU09DS0VUCisjaWZkZWYgVENQX05PREVMQVkK KyAgICAgICAgeworCSAgICBleHRlcm4gaW50IHRjcF9ub2RlbGF5OwkvKiBKdXN0IHB1dCB0aGlz IGJhY2sgaWYgbmVjZXNzYXJ5ICovCisJICAgIGlmICh0dG5ldCA9PSBORVRfVENQQikgeworCQlp ZiAobm9kZWxheV9zYXYgPiAtMSkgeworCQkgICAgbm9fZGVsYXkodHR5ZmQsbm9kZWxheV9zYXYp OworCQkgICAgbm9kZWxheV9zYXYgPSAtMTsKKwkJfQorCSAgICB9CisgICAgICAgIH0KKyNlbmRp ZiAvKiBUQ1BfTk9ERUxBWSAqLworI2lmZGVmIFROX0NPTVBPUlQKKyAgICAgICAgaWYgKGlzdG5j b21wb3J0KCkpIHsKKyAgICAgICAgICAgIGludCByYyA9IC0xOworICAgICAgICAgICAgaWYgKChy YyA9IHRuc2V0Zmxvdyh0dGZsb3cpKSA8IDApCisJICAgICAgcmV0dXJuKHJjKTsKKyAgICAgICAg ICAgIGlmICh0dHNwZWVkIDw9IDApIAorCSAgICAgIHR0c3BlZWQgPSB0bmNfZ2V0X2JhdWQoKTsK KyAgICAgICAgICAgIGVsc2UgaWYgKChyYyA9IHRuY19zZXRfYmF1ZCh0dHNwZWVkKSkgPCAwKQor CSAgICAgIHJldHVybihyYyk7CisgICAgICAgICAgICB0bmNfc2V0X2RhdGFzaXplKDgpOworCSAg ICB0bmNfc2V0X3N0b3BzaXplKHN0b3BiaXRzKTsKKworI2lmZGVmIEhXUEFSSVRZCisgICAgICAg ICAgICBpZiAoaHdwYXJpdHkpIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGh3cGFyaXR5KSB7 CisJCSAgY2FzZSAnZSc6CQkJLyogRXZlbiAqLworICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhG MTAwLCJ0dHJlcyA4IGJpdHMgKyBldmVuIHBhcml0eSIsIiIsMCk7CisgICAgICAgICAgICAgICAg ICAgIHRuY19zZXRfcGFyaXR5KDMpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKwkJICBj YXNlICdvJzoJCQkvKiBPZGQgKi8KKyAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEwMCwidHRy ZXMgOCBiaXRzICsgb2RkIHBhcml0eSIsIiIsMCk7CisgICAgICAgICAgICAgICAgICAgIHRuY19z ZXRfcGFyaXR5KDIpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKwkJICBjYXNlICdtJzoJ CQkvKiBNYXJrICovCisgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDAsInR0cmVzIDggYml0 cyArIGludmFsaWQgcGFyaXR5OiBtYXJrIiwiIiwwKTsKKyAgICAgICAgICAgICAgICAgICAgdG5j X3NldF9wYXJpdHkoNCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCQkgIGNhc2UgJ3Mn OgkJCS8qIFNwYWNlICovCisgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDAsInR0cmVzIDgg Yml0cyArIGludmFsaWQgcGFyaXR5OiBzcGFjZSIsIiIsMCk7CisgICAgICAgICAgICAgICAgICAg IHRuY19zZXRfcGFyaXR5KDUpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UKKyNlbmRpZiAvKiBIV1BBUklUWSAqLworCSAg ICB7CisgICAgICAgICAgICAgICAgdG5jX3NldF9wYXJpdHkoMSk7ICAgICAgICAgICAgICAvKiBO b25lICovCisgICAgICAgICAgICB9CisgICAgICAgICAgICB0dnRmbGcgPSAwOworICAgICAgICAg ICAgcmV0dXJuKDApOworICAgICAgICB9CisjZW5kaWYgLyogVE5fQ09NUE9SVCAqLworI2VuZGlm IC8qIFRDUFNPQ0tFVCAqLworCXJldHVybigwKTsKKyAgICB9CisjZW5kaWYJLyogTkVUQ09OTiAq LworI2lmZGVmIE5FVENNRAorICAgIGlmICh0dHBpcGUpIHJldHVybigwKTsKKyNlbmRpZiAvKiBO RVRDTUQgKi8KKyNpZmRlZiBORVRQVFkKKyAgICBpZiAodHRwdHkpIHJldHVybigwKTsKKyNlbmRp ZiAvKiBORVRQVFkgKi8KKworLyogUmVhbCB0ZXJtaW5hbCBkZXZpY2UsIHNvIHJlc3RvcmUgaXRz IG9yaWdpbmFsIG1vZGVzICovCisKKyNpZmRlZiBCU0Q0NE9SUE9TSVgJCQkvKiBGb3IgUE9TSVgg bGlrZSB0aGlzICovCisgICAgZGVidWcoRjEwMCwidHRyZXMgQlNENDRPUlBPU0lYIiwiIiwwKTsK KyAgICB4ID0gdGNzZXRhdHRyKHR0eWZkLFRDU0FEUkFJTiwmdHRvbGQpOworI2Vsc2UJCQkJCS8q IEZvciBhbGwgb3RoZXJzLi4uICovCisjaWZkZWYgQVRUU1YgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogRm9yIEFUJlQgdmVyc2lvbnMuLi4gKi8KKyAgICBkZWJ1ZyhGMTAwLCJ0dHJlcyBB VFRTViIsIiIsMCk7CisgICAgeCA9IGlvY3RsKHR0eWZkLFRDU0VUQVcsJnR0b2xkKTsJLyogUmVz dG9yZSB0dHkgbW9kZXMgdGhpcyB3YXkuICovCisjZWxzZQorLyogSGVyZSB3ZSByZXN0b3JlIHRo ZSBtb2RlcyBmb3IgQlNEICovCisKKyNpZmRlZiBMUEFTUzgJCQkJLyogVW5kbyAicGFzczgiIGlm IGl0IHdlcmUgZG9uZSAqLworICAgIGlmIChsbW9kZWYpIHsKKwlpZiAoaW9jdGwodHR5ZmQsVElP Q0xTRVQsJmxtb2RlKSA8IDApCisJICBkZWJ1ZyhGMTAwLCJ0dHJlcyBUSU9DTFNFVCBmYWlsZWQi LCIiLDApOworCWVsc2UKKwkgIGRlYnVnKEYxMDAsInR0cmVzIFRJT0NMU0VUIG9rIiwiIiwwKTsK KyAgICB9CisjZW5kaWYgLyogTFBBU1M4ICovCisKKyNpZmRlZiBDS19EVFJDVFMJCSAgIC8qIFVu ZG8gaGFyZHdhcmUgZmxvdyBpZiBpdCB3ZXJlIGRvbmUgKi8KKyAgICBpZiAobG1vZGVmKSB7Cisg CWlmIChpb2N0bCh0dHlmZCxUSU9DTFNFVCwmbG1vZGUpIDwgMCkKKyAJICBkZWJ1ZyhGMTAwLCJ0 dHJlcyBUSU9DTFNFVCBmYWlsZWQiLCIiLDApOworIAllbHNlCisgCSAgZGVidWcoRjEwMCwidHRy ZXMgVElPQ0xTRVQgb2siLCIiLDApOworICAgIH0KKyNlbmRpZiAvKiBDS19EVFJDVFMgKi8KKwor I2lmZGVmIFRJT0NHRVRDCQkJCS8qIFB1dCBiYWNrIHNwZWNpYWwgY2hhcmFjdGVycyAqLworICAg IGlmICh0Y2hhcmYgJiYgKHhsb2NhbCA9PSAwKSkgeworCWlmIChpb2N0bCh0dHlmZCxUSU9DU0VU QywmdGNob2xkKSA8IDApCisJICBkZWJ1ZyhGMTAwLCJ0dHJlcyBUSU9DU0VUQyBmYWlsZWQiLCIi LDApOworCWVsc2UKKwkgIGRlYnVnKEYxMDAsInR0cmVzIFRJT0NTRVRDIG9rIiwiIiwwKTsKKyAg ICB9CisjZW5kaWYgLyogVElPQ0dFVEMgKi8KKworI2lmZGVmIFRJT0NHTFRDCQkJCS8qIFB1dCBi YWNrIGxvY2FsIHNwZWNpYWwgY2hhcmFjdGVycyAqLworICAgIGlmIChsdGNoYXJmICYmICh4bG9j YWwgPT0gMCkpIHsKKwlpZiAoaW9jdGwodHR5ZmQsVElPQ1NMVEMsJmx0Y2hvbGQpIDwgMCkKKwkg IGRlYnVnKEYxMDAsInR0cmVzIFRJT0NTTFRDIGZhaWxlZCIsIiIsMCk7CisJZWxzZQorCSAgZGVi dWcoRjEwMCwidHRyZXMgVElPQ1NMVEMgb2siLCIiLDApOworICAgIH0KKyNlbmRpZiAvKiBUSU9D R0xUQyAqLworCisjaWZkZWYgQkVMTFYxMAorICAgIGRlYnVnKEYxMDAsInR0cmVzIEJFTExWMTAi LCIiLDApOworICAgIHggPSBpb2N0bCh0dHlmZCxUSU9DU0VUUCwmdHRvbGQpOwkvKiBSZXN0b3Jl IGJvdGggc3RydWN0cyAqLworICAgIHggPSBpb2N0bCh0dHlmZCxUSU9DU0RFViwmdGRvbGQpOwor I2Vsc2UKKyAgICBkZWJ1ZyhGMTAwLCJ0dHJlcyBzdHR5IiwiIiwwKTsKKyAgICB4ID0gc3R0eSh0 dHlmZCwmdHRvbGQpOyAgICAgICAgICAgICAvKiBSZXN0b3JlIHR0eSBtb2RlcyB0aGUgb2xkIHdh eS4gKi8KKyNlbmRpZiAvKiBCRUxMVjEwICovCisKKyAgICBpZiAoIXhsb2NhbCkKKyAgICAgIG1z bGVlcCgxMDApOwkJCS8qIFRoaXMgcmVwbGFjZXMgc2xlZXAoMSkuLi4gKi8KKwkJCQkJLyogUHV0 IGJhY2sgc2xlZXAoMSkgaWYgdHR5IGlzICovCisJCQkJCS8qIG1lc3NlZCB1cCBhZnRlciBjbG9z ZS4gKi8KKyNlbmRpZiAvKiBBVFRTViAqLworI2VuZGlmIC8qIEJTRDQ0T1JQT1NJWCAqLworCisg ICAgZGVidWcoRjEwMSwidHRyZXMgcmVzdWx0IiwiIix4KTsKKyNpZm5kZWYgUU5YCisgICAgaWYg KHggPCAwKSBkZWJ1ZyhGMTAxLCJ0dHJlcyBlcnJubyIsIiIsZXJybm8pOworI2VuZGlmIC8qIFFO WCAqLworCisjaWZkZWYgQUlYUlMKKyNpZm5kZWYgQUlYNDEKKyAgICB4ID0gaW9jdGwodHR5ZmQs IHR0bGQgJiAxID8gVFhBRERDRCA6IFRYREVMQ0QsICJydHMiKTsKKyAgICBkZWJ1ZyhGMTAxLCJ0 dHJlcyBBSVggbGluZSBkaXNjaXBsaW5lIHJ0cyByZXN0b3JlIiwiIix4KTsKKyNlbmRpZiAvKiBB SVg0MSAqLworI2VuZGlmIC8qIEFJWFJTICovCisKKyNpZmRlZiBCU0Q0MQorICAgIGlmICh0dGxk ID4gLTEpIHsJCQkvKiBQdXQgYmFjayBsaW5lIGRpc2NpcGxpbmUgKi8KKwl4ID0gaW9jdGwodHR5 ZmQsIFRJT0NTRVRELCAmdHRsZCk7CisJZGVidWcoRjEwMSwidHRyZXMgQlNENDEgbGluZSBkaXNj aXBsaW5lIHJlc3RvcmUiLCIiLHgpOworCWlmICh4IDwgMCkgZGVidWcoRjEwMSwiLi4uaW9jdGwg ZXJybm8iLCIiLGVycm5vKTsKKwl0dGxkID0gLTE7CisgICAgfQorI2VuZGlmIC8qIEJTRDQxICov CisKKyNpZmRlZiBzb255X25ld3MKKyAgICB4ID0geGxvY2FsID8ga21fZXh0IDoga21fY29uOwkv KiBSZXN0b3JlIEthbmppIG1vZGUuICovCisgICAgaWYgKHggIT0gLTEpIHsJCQkvKiBNYWtlIHN1 cmUgd2Uga25vdyBvcmlnaW5hbCBtb2Rlcy4gKi8KKwlpZiAoaW9jdGwodHR5ZmQsVElPQ0tTRVQs ICZ4KSA8IDApIHsKKwkgICAgcGVycm9yKCJ0dHJlcyBjYW4ndCBzZXQgS2FuamkgbW9kZSIpOwor CSAgICBkZWJ1ZyhGMTAxLCJ0dHJlcyBlcnJvciBzZXR0aW5nIEthbmppIG1vZGUiLCIiLHgpOwor CSAgICByZXR1cm4oLTEpOworCX0KKyAgICB9CisgICAgZGVidWcoRjEwMCwidHRyZXMgc2V0IEth bmppIG1vZGUgb2siLCIiLDApOworI2VuZGlmIC8qIHNvbnlfbmV3cyAqLworCisgICAgdHZ0Zmxn ID0gMDsJCQkJLyogSW52YWxpZGF0ZSB0ZXJtaW5hbCBtb2RlIHNldHRpbmdzICovCisgICAgZGVi dWcoRjEwMSwidHRyZXMgcmV0dXJuIGNvZGUiLCIiLHgpOworICAgIHJldHVybih4KTsKK30KKwor I2lmbmRlZiBOT1VVQ1AKKworLyogIFQgVCBDIEggSyBQIEkgRCAgLS0gIENoZWNrIGxvY2tmaWxl IHBpZCAgKi8KKy8qCisgIFJlYWQgcGlkIGZyb20gbG9ja2ZpbGUgbmFtZWQgZiwgY2hlY2sgdGhh dCBpdCdzIHN0aWxsIHZhbGlkLgorICBJZiBzbywgcmV0dXJuIDEuCisgIE9uIGZhaWx1cmUgdG8g cmVhZCBwaWQsIHJldHVybiAxLgorICBPdGhlcndpc2UsIHRyeSB0byBkZWxldGUgbG9ja2ZpbGUg ZiBhbmQgcmV0dXJuIDAgaWYgc3VjY2Vzc2Z1bCwgZWxzZSAxLgorKi8KK3N0YXRpYyBpbnQKK3R0 Y2hrcGlkKGYpIGNoYXIgKmY7IHsKKyAgICBpbnQgcGlkLCBteXBpZCwgeDsKKyAgICBwaWQgPSB0 dHJwaWQoZik7CQkJLyogUmVhZCBwaWQgZnJvbSBmaWxlLiAqLworICAgIGlmIChwaWQgPiAtMSkg ewkJCS8qIElmIHdlIHdlcmUgYWJsZSB0byByZWFkIHRoZSBwaWQuLiAqLworCWRlYnVnKEYxMDEs InR0Y2hrcGlkIGxvY2sgcGlkIiwiIixwaWQpOworCWVycm5vID0gMDsJCQkvKiBTZWUgaWYgcHJv Y2VzcyBzdGlsbCBleGlzdHMuICovCisJbXlwaWQgPSAoaW50KWdldHBpZCgpOwkJLyogR2V0IG15 IG93biBwaWQuICovCisJZGVidWcoRjEwMSwidHRjaGtwaWQgbXkgcGlkIiwiIixteXBpZCk7CisJ aWYgKHBpZCA9PSBteXBpZCkgewkJLyogSXQncyBtZSEgKi8KKwkgICAgeCA9IC0xOwkJCS8qIFNv IEkgY2FuIGRlbGV0ZSBpdCAqLworCSAgICBlcnJubyA9IEVTUkNIOwkJLyogcHJldGVuZCBpdCdz IGludmFsaWQgKi8KKwl9IGVsc2UgewkJCS8qIEl0J3Mgbm90IG1lICovCisJICAgIHggPSBraWxs KChQSURfVClwaWQsIDApOwkvKiBTZWUgaWYgaXQncyBhIGxpdmUgcHJvY2VzcyAqLworCSAgICBk ZWJ1ZyhGMTAxLCJ0dGNoa3BpZCBraWxsIGVycm5vIiwiIixlcnJubyk7CisJfQorCWRlYnVnKEYx MDEsInR0Y2hrcGlkIHBpZCB0ZXN0IiwiIix4KTsKKwlpZiAoeCA8IDAgJiYgZXJybm8gPT0gRVNS Q0gpIHsgLyogcGlkIGlzIGludmFsaWQgKi8KKwkgICAgZGVidWcoRjExMSwicmVtb3Zpbmcgc3Rh bGUgbG9jayIsZixwaWQpOworCSAgICBpZiAoIWJhY2tncmQpCisJICAgICAgcHJpbnRmKCJSZW1v dmluZyBzdGFsZSBsb2NrICVzIChwaWQgJWQgdGVybWluYXRlZClcbiIsIGYsIHBpZCk7CisJICAg IHByaXZfb24oKTsKKwkgICAgeCA9IHVubGluayhmKTsJCS8qIFJlbW92ZSB0aGUgbG9ja2ZpbGUu ICovCisJICAgIHByaXZfb2ZmKCk7CisJICAgIGRlYnVnKEYxMTEsInR0Y2hrcGlkIHVubGluayIs Zix4KTsKKwkgICAgaWYgKHggPiAtMSkKKwkgICAgICByZXR1cm4oMCk7CQkvKiBEZXZpY2UgaXMg bm90IGxvY2tlZCBhZnRlciBhbGwgKi8KKwkgICAgZWxzZSBpZiAoIWJhY2tncmQpCisJICAgICAg cGVycm9yKGYpOworCX0KKwlyZXR1cm4oMSk7CisgICAgfQorICAgIHJldHVybigxKTsJCQkJLyog RmFpbHVyZSB0byByZWFkIHBpZCAqLworfQorCisjaWZkZWYgSFBVWAorCisvKiBBbGlhc2VzIChk aWZmZXJlbnQgZHJpdmVycykgZm9yIEhQLVVYIGRpYWxvdXQgZGV2aWNlczogKi8KKworc3RhdGlj IGNoYXIgKmRldnByZWZpeFtdID0geyAidHR5IiwgInR0eWQiLCAiY3VsIiwgImN1YSIsICJjdWFk IiwgImN1bGQiLCAiIiB9Oworc3RhdGljIGludCB0dHlkZXhpc3RzID0gMDsKKworI2VuZGlmIC8q IEhQVVggKi8KKworLyogIFQgVCBSIFAgSSBEICAtLSAgUmVhZCBwaWQgZnJvbSBsb2NrZmlsZSAi bmFtZSIgKi8KKworc3RhdGljIGludAordHRycGlkKG5hbWUpIGNoYXIgKm5hbWU7IHsKKyAgICBs b25nIGxlbjsKKyAgICBpbnQgeCwgZmQsIHBpZDsKKyAgICBzaG9ydCBzcGlkOworICAgIGNoYXIg YnVmWzMyXTsKKworICAgIGRlYnVnKEYxMTAsInR0cnBpZCIsbmFtZSwwKTsKKyAgICBpZiAoIW5h bWUpIHJldHVybigtMSk7CisgICAgaWYgKCEqbmFtZSkgcmV0dXJuKC0xKTsKKyAgICBwcml2X29u KCk7CisgICAgbGVuID0gemNoa2kobmFtZSk7CQkJLyogR2V0IGZpbGUgbGVuZ3RoICovCisgICAg cHJpdl9vZmYoKTsKKyAgICBkZWJ1ZyhGMTAxLCJ0dHJwaWQgemNoa2kiLCIiLGxlbik7CisgICAg aWYgKGxlbiA8IDApCisgICAgICByZXR1cm4oLTEpOworICAgIGlmIChsZW4gPiAzMSkKKyAgICAg IHJldHVybigtMSk7CisgICAgcHJpdl9vbigpOworICAgIGZkID0gb3BlbihuYW1lLE9fUkRPTkxZ KTsJCS8qIFRyeSB0byBvcGVuIGxvY2tmaWxlLiAqLworICAgIHByaXZfb2ZmKCk7CisgICAgZGVi dWcoRjEwMSwidHRycGlkIGZkIiwiIixmZCk7CisgICAgaWYgKGZkIDw9IDApCisgICAgICByZXR1 cm4oLTEpOworLyoKKyAgSGVyZSB3ZSB0cnkgdG8gYmUgZmxleGlibGUgYW5kIGFsbG93IGZvciBh bGwgZGlmZmVyZW50IGJpbmFyeSBhbmQgc3RyaW5nCisgIGZvcm1hdHMgYXQgcnVudGltZSwgcmF0 aGVyIHRoYW4gYSBzcGVjaWZpYyBmb3JtYXQgZm9yIGVhY2ggY29uZmlndXJhdGlvbgorICBoYXJk d2lyZWQgYXQgY29tcGlsZSB0aW1lLgorKi8KKyAgICBwaWQgPSAtMTsKKyNpZm5kZWYgQ09IRVJF TlQKKy8qCisgIENPSEVSRU5UIHVzZXMgYSBzdHJpbmcgUElEIGJ1dCB3aXRob3V0IGxlYWRpbmcg c3BhY2VzIG9yIDAncywgc28gdGhlcmUgaXMKKyAgbm8gd2F5IHRvIHRlbGwgZnJvbSB0aGUgZmls ZSdzIGxlbmd0aCB3aGV0aGVyIGl0IGNvbnRhaW5zIGEgc3RyaW5nIG9yIGJpbmFyeQorICBwaWQu ICBTbyBmb3IgQ09IRVJFTlQgb25seSwgd2Ugb25seSBhbGxvdyBzdHJpbmcgcGlkcy4gIEZvciBh bGwgb3RoZXJzLCB3ZQorICBkZWNpZGUgYmFzZWQgb24gdGhlIHNpemUgb2YgdGhlIGxvY2tmaWxl LgorKi8KKyAgICBpZiAobGVuID4gNCkgewkJCS8qIElmIGZpbGUgPiA0IGJ5dGVzIGl0J3MgYSBz dHJpbmcgKi8KKyNlbmRpZiAvKiBDT0hFUkVOVCAqLworCXggPSByZWFkKGZkLGJ1ZiwoaW50KWxl bik7CisJZGVidWcoRjExMSwidHRycGlkIHN0cmluZyByZWFkIixidWYseCk7CisJaWYgKHggPCAw KSB7CisJICAgIHBpZCA9IC0xOworCX0gZWxzZSB7CisJICAgIGJ1ZlszMV0gPSAnXDAnOworCSAg ICB4ID0gc3NjYW5mKGJ1ZiwiJWQiLCZwaWQpOwkvKiBHZXQgdGhlIGludGVnZXIgcGlkIGZyb20g aXQuICovCisJfQorI2lmbmRlZiBDT0hFUkVOVAorICAgIH0gZWxzZSBpZiAobGVuID09IDQpIHsJ CS8qIDQgYnl0ZXMgc28gYmluYXJ5ICovCisJeCA9IHJlYWQoZmQsIChjaGFyICopJnBpZCwgNCk7 CS8qIFJlYWQgdGhlIGJ5dGVzIGludG8gYW4gaW50ICovCisJZGVidWcoRjEwMSwidHRycGlkIGlu dGVnZXIgcmVhZCIsIiIseCk7CisJaWYgKHggPCA0KQorCSAgcGlkID0gLTE7CisgICAgfSBlbHNl IGlmIChsZW4gPT0gMikgewkJLyogMiBieXRlcyBiaW5hcnkgKi8KKwl4ID0gcmVhZChmZCwgKGNo YXIgKikmc3BpZCwgMik7CS8qIFJlYWQgdGhlIGJ5dGVzIGludG8gYSBzaG9ydCAqLworCWRlYnVn KEYxMDEsInR0cnBpZCBzaG9ydCByZWFkIiwiIix4KTsKKwlpZiAoeCA8IDIpCisJICBwaWQgPSAt MTsKKwllbHNlCisJICBwaWQgPSBzcGlkOworICAgIH0gZWxzZQorICAgICAgcGlkID0gLTE7Cisj ZW5kaWYgLyogQ09IRVJFTlQgKi8KKyAgICBjbG9zZShmZCk7CQkJCS8qIENsb3NlIHRoZSBsb2Nr ZmlsZSAqLworICAgIGRlYnVnKEYxMDEsInR0cnBpZCBwaWQiLCIiLHBpZCk7CisgICAgcmV0dXJu KHBpZCk7Cit9CisjZW5kaWYgLyogTk9VVUNQICovCisKKy8qICBUIFQgTCBPIEMgSyAgKi8KKwor LyoKKyAgVGhpcyBmdW5jdGlvbiBhdHRlbXB0cyB0byBjb29yZGluYXRlIHVzZSBvZiB0aGUgY29t bXVuaWNhdGlvbiBkZXZpY2Ugd2l0aAorICBvdGhlciBjb3BpZXMgb2YgS2VybWl0IGFuZCBhbnkg b3RoZXIgcHJvZ3JhbSB0aGF0IGZvbGxvd3MgdGhlIFVVQ1AKKyAgZGV2aWNlLWxvY2tpbmcgY29u dmVudGlvbnMsIHdoaWNoLCB1bmZvcnR1bmF0ZWx5LCB2YXJ5IGFtb25nIGRpZmZlcmVudCBVTklY CisgIGltcGxlbWVudGF0aW9ucy4gIFRoZSBpZGVhIGlzIHRvIGxvb2sgZm9yIGEgZmlsZSBvZiBh IGNlcnRhaW4gbmFtZSwgdGhlCisgICJsb2NrZmlsZSIsIGluIGEgY2VydGFpbiBkaXJlY3Rvcnku ICBJZiBzdWNoIGEgZmlsZSBpcyBmb3VuZCwgdGhlbiB0aGUgbGluZQorICBpcyBwcmVzdW1lZCB0 byBiZSBpbiB1c2UsIGFuZCBLZXJtaXQgc2hvdWxkIG5vdCB1c2UgaXQuICBJZiBubyBzdWNoIGZp bGUgaXMKKyAgZm91bmQsIEtlcm1pdCBhdHRlbXB0cyB0byBjcmVhdGUgb25lIHNvIHRoYXQgb3Ro ZXIgcHJvZ3JhbXMgd2lsbCBub3QgdXNlIHRoZQorICBzYW1lIGxpbmUgYXQgdGhlIHNhbWUgdGlt ZS4gIEJlY2F1c2UgdGhlIGxvY2tmaWxlIGFuZC9vciB0aGUgZGlyZWN0b3J5IGl0J3MKKyAgaW4g bWlnaHQgbGFjayB3cml0ZSBwZXJtaXNzaW9uIGZvciB0aGUgcGVyc29uIHJ1bm5pbmcgS2VybWl0 LCBLZXJtaXQgY291bGQKKyAgZmluZCBpdHNlbGYgcnVubmluZyBzZXR1aWQgdG8gdXVjcCBvciBv dGhlciB1c2VyIHRoYXQgZG9lcyBoYXZlIHRoZQorICBuZWNlc3NhcnkgcGVybWlzc2lvbnMuICBB dCBzdGFydHVwLCBLZXJtaXQgaGFzIGNoYW5nZWQgaXRzIGVmZmVjdGl2ZSB1aWQgdG8KKyAgdGhl IHVzZXIncyByZWFsIHVpZCwgYW5kIHNvIHR0bG9jaygpIG11c3Qgc3dpdGNoIGJhY2sgdG8gdGhl IG9yaWdpbmFsCisgIGVmZmVjdGl2ZSB1aWQgaW4gb3JkZXIgdG8gY3JlYXRlIHRoZSBsb2NrZmls ZSwgYW5kIHRoZW4gYmFjayBhZ2FpbiB0byB0aGUKKyAgcmVhbCB1aWQgdG8gcHJldmVudCB1bmF1 dGhvcml6ZWQgYWNjZXNzIHRvIG90aGVyIGRpcmVjdG9yaWVzIG9yIGZpbGVzIG93bmVkCisgIGJ5 IHRoZSB1c2VyIHRoZSBwcm9ncmFtIGlzIHNldHVpZCB0by4KKworICBUb3RhbGx5IHJld3JpdHRl biBmb3IgQy1LZXJtaXQgNUEgdG8gZWxpbWluYXRlIHdpbmRvd3Mgb2YgdnVsbmVyYWJpbGl0eSwK KyAgYmFzZWQgb24gc3VnZ2VzdGlvbnMgZnJvbSBXYXJyZW4gVHVja2VyLiAgQ2FsbCB3aXRoIHBv aW50ZXIgdG8gbmFtZSBvZgorICB0dHkgZGV2aWNlLiAgUmV0dXJuczoKKworICAgMCBvbiBzdWNj ZXNzCisgIC0xIG9uIGZhaWx1cmUKKworICBOb3RlOiBPbmNlIHByaXZpbGVnZXMgYXJlIHR1cm5l ZCBvbiB1c2luZyBwcml2X29uKCksIGl0IGlzIGVzc2VudGlhbCB0aGF0CisgIHRoZXkgYXJlIHR1 cm5lZCBvZmYgYWdhaW4gYmVmb3JlIHRoaXMgZnVuY3Rpb24gcmV0dXJucy4KKyovCisjaWZkZWYg U1ZSNAkJCQkvKiBMb2NrZmlsZSB1c2VzIGRldmljZSBudW1iZXJzLiAqLworLyoKKyAgQWx0aG91 Z2ggSSBjYW4ndCBmaW5kIHRoaXMgaW4gd3JpdGluZyBhbnl3aGVyZSAoZS5nLiBpbiBTVklEIGZv ciBTVlI0KSwKKyAgaXQgaXMgdGhlIGJlaGF2aW9yIG9mIHRoZSAicmVmZXJlbmNlIHZlcnNpb24i IG9mIFNWUjQsIGkuZS4gdGhlIEludGVsCisgIHBvcnQgZnJvbSBVTklYIFN5c3RlbXMgTGFib3Jh dG9yaWVzLCB0aGVuIGNhbGxlZCBVbml2ZWwgVW5peFdhcmUsCisgIHRoZW4gY2FsbGVkIE5vdmVs bCBVbml4V2FyZSwgdGhlbiBjYWxsZWQgU0NPIFVuaXh3YXJlLCB0aGVuIGNhbGxlZCBDYWxkZXJh CisgIE9wZW4gVU5JWC4uLiAgSXQgYWxzbyBtYWtlcyBtdWNoIG1vcmUgc2Vuc2UgdGhhbiBkZXZp Y2UtbmFtZS1iYXNlZCBsb2NrZmlsZXMKKyAgc2luY2UgdGhlcmUgY2FuIGJlIG11bHRpcGxlIG5h bWVzIGZvciB0aGUgc2FtZSBkZXZpY2UsIHN5bWxpbmtzLCBldGMuCisqLworI2lmbmRlZiBOT0xG REVWTk8KKyNpZm5kZWYgTEZERVZOTwkJCQkvKiBEZWZpbmUgdGhpcyBmb3IgU1ZSNCAqLworI2lm bmRlZiBBSVhSUwkJCQkvKiBCdXQgbm90IGZvciBSUy82MDAwIEFJWCAzLjIsIGV0Yy4gKi8KKyNp Zm5kZWYgQlNENDQJCQkJLyogSWYgYW55Ym9keSBlbHNlIG5lZWRzIGl0Li4uICovCisjaWZuZGVm IF9fMzg2QlNEX18KKyNpZm5kZWYgX19GcmVlQlNEX18KKyNpZm5kZWYgSFBVWDEwCisjaWZuZGVm IElSSVg1MQkJCQkvKiBTR0kgSVJJWCA1LjEgb3IgbGF0ZXIgKi8KKyNpZm5kZWYgQ0tfU0NPVjUJ CQkvKiBTQ08gT3BlbiBTZXJ2ZXIgNS4wICovCisjZGVmaW5lIExGREVWTk8KKyNlbmRpZiAvKiBD S19TQ09WNSAqLworI2VuZGlmIC8qIElSSVg1MSAqLworI2VuZGlmIC8qIEhQVVgxMCAqLworI2Vu ZGlmIC8qIF9fRnJlZUJTRF9fICovCisjZW5kaWYgLyogX18zODZCU0RfXyAqLworI2VuZGlmIC8q IEJTRDQ0ICovCisjZW5kaWYgLyogQUlYUlMgKi8KKyNlbmRpZiAvKiBMRkRFVk5PICovCQkJLyog Li4uIGRlZmluZSBpdCBoZXJlIG9yIG9uIENDICovCisjZW5kaWYgLyogTk9MRkRFVk5PICovCisj ZW5kaWYgLyogU1ZSNCAqLwkJCS8qIGNvbW1hbmQgbGluZS4gKi8KKworI2lmZGVmIENPSEVSRU5U CisjZGVmaW5lIExGREVWTk8KKyNlbmRpZiAvKiBDT0hFUkVOVCAqLworCisvKgorICBGb3IgcGxh dGZvcm1zIHdoZXJlIHRoZSBsb2NrZmlsZSBuYW1lIGlzIG1hZGUgZnJvbSBkZXZpY2UvbWFqb3Iv bWlub3IKKyAgZGV2aWNlIG51bWJlciwgYXMgaW4gU1ZSNC4gIFdoaWNoLCBpZiB3ZSBtdXN0IGhh dmUgbG9ja2ZpbGVzIGF0IGFsbCwgaXMKKyAgYnkgZmFyIHRoZSBiZXN0IGZvcm1hdCwgc2luY2Ug aXQgZWxpbWluYXRlcyBhbGwgdGhlIGNvbmZ1c2lvbiB0aGF0IHN0ZW1zCisgIGZyb20gbXVsdGlw bGUgbmFtZXMgKG9yIGRyaXZlcnMpIGZvciB0aGUgc2FtZSBwb3J0LCBub3QgdG8gbWVudGlvbgor ICBzeW1saW5rcy4gIEl0IG1pZ2h0IGV2ZW4gYmUgYSBnb29kIGlkZWEgdG8gc3RhcnQgdXNpbmcg dGhpcyBmb3JtIGV2ZW4KKyAgb24gcGxhdGZvcm1zIHdoZXJlIGl0J3Mgbm90IHN1cHBvcnRlZCwg YWxvbmdzaWRlIHRoZSBub3JtYWwgZm9ybXMgZm9yIHRob3NlCisgIHBsYXRmb3JtcywgaW4gb3Jk ZXIgdG8gZ2V0IHBlb3BsZSB1c2VkIHRvIGl0Li4uCisqLworI2lmZGVmIExGREVWTk8KKyNpZm5k ZWYgbWFqb3IJCQkJLyogSWYgd2UgZGlkbid0IGZpbmQgaXQgKi8KKyNpZmRlZiBTVlI0CQkJCS8q IHRoZW4gZm9yIFN5cyBWIFI0ICovCisjaW5jbHVkZSA8c3lzL21rZGV2Lmg+CQkJLyogbG9vayBo ZXJlICovCisjZWxzZQkJCQkJLyogb3IgZm9yIFN1bk9TIHZlcnNpb25zICovCisjaWZkZWYgU1VO T1M0CQkJCS8qIC4uLiAqLworI2luY2x1ZGUgPHN5cy9zeXNtYWNyb3MuaD4JCS8qIGxvb2sgaGVy ZSAqLworI2Vsc2UJCQkJCS8qIE90aGVyd2lzZSB0YWtlIGEgY2hhbmNlOiAqLworI2RlZmluZQlt YWpvcihkZXYpICggKGludCkgKCAoKHVuc2lnbmVkKShkZXYpID4+IDgpICYgMHhmZikpCisjZGVm aW5lCW1pbm9yKGRldikgKCAoaW50KSAoIChkZXYpICYgMHhmZikpCisjZW5kaWYgLyogU1VOT1M0 ICovCisjZW5kaWYgLyogU1ZSNCAqLworI2VuZGlmIC8qIG1ham9yICovCisjZW5kaWYgLyogTEZE RVZOTyAqLworCisvKiBObyBhZHZpc29yeSBsb2NrcyBpZiBGX1RMT0NLIGFuZCBGX1VMT0NLIGFy ZSBub3QgZGVmaW5lZCBhdCB0aGlzIHBvaW50ICovCisKKyNpZmRlZiBMT0NLRgorI2lmbmRlZiBG X1RMT0NLCisjdW5kZWYgTE9DS0YKKyNpZm5kZWYgTk9MT0NLRgorI2RlZmluZSBOT0xPQ0tGCisj ZW5kaWYgLyogTk9MT0NLRiAqLworI2VuZGlmIC8qIEZfVExPQ0sgKi8KKyNlbmRpZiAvKiBMT0NL RiAqLworCisjaWZkZWYgTE9DS0YKKyNpZm5kZWYgRl9VTE9DSworI3VuZGVmIExPQ0tGCisjaWZu ZGVmIE5PTE9DS0YKKyNkZWZpbmUgTk9MT0NLRgorI2VuZGlmIC8qIE5PTE9DS0YgKi8KKyNlbmRp ZiAvKiBGX1VMT0NLICovCisjZW5kaWYgLyogTE9DS0YgKi8KKworc3RhdGljIGNoYXIgbGlua3Rv W0RFVk5BTUxFTisxXTsKK3N0YXRpYyBjaGFyICogbGlua2RldiA9IE5VTEw7CisKKyNpZm5kZWYg Tk9VVUNQCisjaWZkZWYgVVNFVFRZTE9DSworI2lmZGVmIExPQ0tfRElSCitjaGFyICogdXVjcGxv Y2tkaXIgPSBMT0NLX0RJUjsKKyNlbHNlCitjaGFyICogdXVjcGxvY2tkaXIgPSAiIjsKKyNlbmRp ZiAvKiBMT0NLX0RJUiAqLworI2Vsc2UKKyNpZmRlZiBMT0NLX0RJUgorY2hhciAqIHV1Y3Bsb2Nr ZGlyID0gTE9DS19ESVI7CisjZWxzZQorY2hhciAqIHV1Y3Bsb2NrZGlyID0gIiI7CisjZW5kaWYg LyogTE9DS19ESVIgKi8KKyNlbmRpZiAvKiBVU0VUVFlMT0NLICovCisjZWxzZQorY2hhciAqIHV1 Y3Bsb2NrZGlyID0gIiI7CisjZW5kaWYgLyogTk9VVUNQICovCisKKyNpZmRlZiBRTlgJCQkJLyog T25seSBmb3IgUU5YNCAqLworaW50CQkJCQkvKiBWaXNpYmxlIHRvIG91dHNpZGUgd29ybGQgKi8K K3FueG9wZW5jb3VudCgpIHsJCQkvKiBHZXQgUU5YIGRldmljZSBvcGVuIGNvdW50ICovCisgICAg c3RydWN0IF9kZXZfaW5mb19lbnRyeSBpbmZvOworICAgIGludCB4OworCisgICAgeCA9IC0xOwkJ CQkvKiBVbmtub3duICovCisgICAgaWYgKHR0eWZkID4gLTEpIHsKKwlpZiAoIWRldl9pbmZvKHR0 eWZkLCAmaW5mbykpIHsKKwkgICAgZGVidWcoRjEwMSwidHRsb2NrIFFOWCBvcGVuX2NvdW50Iiwi IixpbmZvLm9wZW5fY291bnQpOworCSAgICB4ID0gaW5mby5vcGVuX2NvdW50OworCX0KKyAgICB9 CisgICAgcmV0dXJuKHgpOworfQorI2VuZGlmIC8qIFFOWCAqLworCitjaGFyICoKK3R0Z2xja2Rp cigpIHsJCQkJLyogR2V0IExvY2tmaWxlIGRpcmVjdG9yeSBuYW1lICovCisjaWZkZWYgX19PcGVu QlNEX18KKyAgICByZXR1cm4oIi92YXIvc3Bvb2wvbG9jayIpOworI2Vsc2UgLyogX19PcGVuQlNE X18gKi8KKyNpZmRlZiBfX0ZyZWVCU0RfXworICAgIHJldHVybigiL3Zhci9zcG9vbC9sb2NrIik7 CisjZWxzZSAgLyogX19GcmVlQlNEX18gKi8KKyNpZmRlZiBMT0NLX0RJUgorICAgIGNoYXIgKiBz ID0gTE9DS19ESVI7CisjZW5kaWYgLyogTE9DS19ESVIgKi8KKyNpZmRlZiBOT1VVQ1AKKyAgICBy ZXR1cm4oIiIpOworI2Vsc2UgIC8qIE5PVVVDUCAqLworI2lmZGVmIExPQ0tfRElSCisgICAgcmV0 dXJuKHMpOworI2Vsc2UgIC8qIExPQ0tfRElSICovCisgICAgcmV0dXJuKCIiKTsKKyNlbmRpZiAv KiBMT0NLX0RJUiAqLworI2VuZGlmIC8qIE5PVVVDUCAqLworI2VuZGlmIC8qIF9fRnJlZUJTRF9f ICovCisjZW5kaWYgLyogX19PcGVuQlNEX18gKi8KK30KKworc3RhdGljIGludAordHRsb2NrKHR0 ZGV2KSBjaGFyICp0dGRldjsgeworCisgICAgaW50IHgsIG47CisgICAgaW50IGlzbGluayA9IDA7 CisjaWZkZWYgX19GcmVlQlNEX18KKyAgICBjaGFyICpkZXZuYW1lOworI2VuZGlmCS8qIF9fRnJl ZUJTRF9fICovCisKKyNpZmRlZiBOT1VVQ1AKKyAgICBkZWJ1ZyhGMTAwLCJ0dGxvY2sgTk9VVUNQ IiwiIiwwKTsKKyAgICBja3N0cm5jcHkoZmxmbmFtLCJOT0xPQ0siLEZMRk5BTUwpOworICAgIGhh c2xvY2sgPSAxOworICAgIHJldHVybigwKTsKKyNlbHNlIC8qICFOT1VVQ1AgKi8KKworI2lmZGVm IFVTRVRUWUxPQ0sKKyAgICBoYXNsb2NrID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBO b3QgbG9ja2VkIHlldC4gKi8KKyAgICAqZmxmbmFtID0gJ1wwJzsJCQkvKiBMb2NrZmlsZSBuYW1l IGlzIGVtcHR5LiAqLworI2lmZGVmIF9fRnJlZUJTRF9fCisgICAgaWYgKChkZXZuYW1lID0geHhs YXN0KHR0ZGV2LCcvJykpICE9IE5VTEwpCisjaWZkZWYgRlJFRUJTRDgKKyAgICAgIGNrc3RybmNh dChsb2NrbmFtZSxkZXZuYW1lKzEsREVWTkFNTEVOLWNrc3RybmNweShsb2NrbmFtZSwicHRzIiw0 KSk7CisjZWxzZQorICAgICAgY2tzdHJuY3B5KGxvY2tuYW1lLGRldm5hbWUrMSxERVZOQU1MRU4p OworI2VuZGlmCS8qIEZSRUVCU0Q4ICovCisjZWxzZQorICAgIGlmICghc3RybmNtcCh0dGRldiwi L2Rldi8iLDUpICYmIHR0ZGV2WzVdKQorICAgICAgY2tzdHJuY3B5KGxvY2tuYW1lLHR0ZGV2KzUs REVWTkFNTEVOKTsKKyNlbmRpZgkvKiBfX0ZyZWVCU0RfXyAqLworICAgIGVsc2UKKyAgICAgIGNr c3RybmNweShsb2NrbmFtZSx0dGRldixERVZOQU1MRU4pOworLyoKKyAgVGhpcyBtaWdodCBiZSBv dmVya2lsbCwgYnV0IGl0J3Mgbm90IGNsZWFyIGZyb20gdGhlIG1hbiBwYWdlcyB3aGV0aGVyCisg IHR0eWxvY2soKSBjYW4gYmUgY2FsbGVkIHdpdGhvdXQgY2FsbGluZyB0dHlsb2NrZWQoKSBmaXJz dCwgc2luY2UgdGhlIGRvYworICBzYXlzIHRoYXQgdHR5bG9ja2VkKCkgcmVtb3ZlcyBhbnkgc3Rh bGUgbG9ja2ZpbGVzLCBidXQgaXQgZG9lcyBub3Qgc2F5IHRoaXMKKyAgYWJvdXQgdHR5bG9jaygp LiAgQWxzbyB0aGUgZG9jcyBkb24ndCBzYXkgd2hhdCB0dHlsb2NrZWQoKSByZXR1cm5zIGluIHRo ZQorICBjYXNlIHdoZW4gaXQgZmluZHMgYW5kIHJlbW92ZXMgYSBzdGFsZSBsb2NrZmlsZS4gIFNv IG9uZSBvciBib3RoIGNhbGxzIHRvCisgIHRvIHR0eWxvY2tlZCgpIG1pZ2h0IGJlIHN1cGVyZmx1 b3VzLCBidXQgdGhleSBzaG91bGQgZG8gbm8gaGFybS4gIEFsc28gSSdtCisgIGFzc3VtaW5nIHRo YXQgd2UgaGF2ZSB0byBkbyBhbGwgdGhlIHNhbWUgSUQgc3dhcHBpbmcsIGV0Yywgd2l0aCB0aGVz ZQorICByb3V0aW5lcyBhcyB3ZSBkbyB3aXRob3V0IHRoZW0uICBUaHVzIHRoZSBwcml2X29uL29m ZigpIHNhbmR3aWNoLgorKi8KKyNpZmRlZiBVU0VfVVVfTE9DSworICAgIHByaXZfb24oKTsJCQkJ LyogVHVybiBvbiBwcml2cyAqLworICAgIHggPSB1dV9sb2NrKGxvY2tuYW1lKTsJCS8qIFRyeSB0 byBzZXQgdGhlIGxvY2sgKi8KKyAgICBwcml2X29mZigpOwkJCQkvKiBUdXJuIHByaXZzIG9mZiAq LworICAgIGRlYnVnKEYxMTEsInR0bG9jayB1dV9sb2NrIixsb2NrbmFtZSx4KTsKKyAgICBzd2l0 Y2ggKHgpIHsKKyAgICAgIGNhc2UgVVVfTE9DS19JTlVTRToKKwlyZXR1cm4oLTIpOworICAgICAg Y2FzZSBVVV9MT0NLX09LOgorI2lmZGVmIEJTRDQ0CisJY2ttYWttc2coZmxmbmFtLEZMRk5BTUws Ii92YXIvc3Bvb2wvbG9jay9MQ0suLiIsbG9ja25hbWUsTlVMTCxOVUxMKTsKKyNlbmRpZiAvKiBC U0Q0NCAqLworCWhhc2xvY2sgPSAxOworCXJldHVybigwKTsKKyAgICAgIGRlZmF1bHQ6CisJcmV0 dXJuKC0xKTsKKyAgICB9CisjZWxzZSAgLyogVVNFX1VVX0xPQ0sgKi8KKyAgICBwcml2X29uKCk7 CQkJCS8qIFR1cm4gb24gcHJpdnMgKi8KKyAgICBpZiAodHR5bG9ja2VkKGxvY2tuYW1lKSkgewkJ LyogVGhpcyBzaG91bGQgcmVtb3ZlIGFueSBzdGFsZSBsb2NrICovCisJaWYgKHR0eWxvY2tlZChs b2NrbmFtZSkpIHsJLyogc28gY2hlY2sgYWdhaW4uICovCisJICAgIHByaXZfb2ZmKCk7CisJICAg IHJldHVybigtNSk7CQkJLyogU3RpbGwgbG9ja2VkLCBmYWlsLiAqLworCX0KKyAgICB9CisgICAg eCA9IHR0eWxvY2sobG9ja25hbWUpOwkJLyogTG9jayBpdC4gKi8KKyAgICBwcml2X29mZigpOwkJ CQkvKiBUdXJuIG9mZiBwcml2cyAqLworCisgICAgZGVidWcoRjExMSwidHRsb2NrIGxvY2tuYW1l Iixsb2NrbmFtZSx4KTsKKyAgICBpZiAoeCA+IC0xKSB7CisJLyoKKwkgIFdlIGRvbid0IHJlYWxs eSBrbm93IHRoZSBuYW1lIG9mIHRoZSBsb2NrZmlsZSwgYnV0CisJICB0aGlzIGlzIHdoYXQgdGhl IG1hbiBwYWdlIHNheXMgaXQgaXMuICBJbiBVU0VUVFlMT0NLCisgICAgICAgICAgYnVpbGRzLCBp dCBpcyB1c2VkIG9ubHkgZm9yIGRpc3BsYXkgYnkgU0hPVyBDT01NLgorCSovCisJY2ttYWttc2co ZmxmbmFtLEZMRk5BTUwsIi9ldGMvbG9ja3MvTENLLi4iLGxvY2tuYW1lLE5VTEwsTlVMTCk7CisJ aGFzbG9jayA9IDE7CisgICAgfQorICAgIHJldHVybih4KTsKKyNlbmRpZiAvKiBVU0VfVVVfTE9D SyAqLworI2Vsc2UgIC8qIFN5c3RlbXMgdGhhdCBkb24ndCBoYXZlIHR0eWxvY2soKS4uLiAqLwor CisjaWZuZGVmIEhQVVgKKworICAgIGludCBsb2NrZmQ7CQkJCS8qIEZpbGUgZGVzY3JpcHRvciBm b3IgbG9jayBmaWxlLiAqLworICAgIFBJRF9UIHBpZDsJCQkJLyogUHJvY2VzcyBpZCBvZiB0aGlz IHByb2Nlc3MuICovCisgICAgaW50IHRyaWVzOwkJCQkvKiBIb3cgbWFueSB0aW1lcyB3ZSd2ZSB0 cmllZC4uLiAqLworICAgIHN0cnVjdCBzdGF0IGRldmJ1ZjsJCQkvKiBGb3IgZGV2aWNlIG51bWJl cnMgKFNWUjQpLiAqLworCisjaWZkZWYgUElEU1RSSU5HCisgICAgY2hhciBwaWRfc3RyWzMyXTsJ CQkvKiBNeSBwaWQgaW4gc3RyaW5nIGZvcm1hdC4gKi8KKyNlbmRpZiAvKiBQSURTVFJJTkcgKi8K KworICAgIGNoYXIgKmRldmljZSwgKmRldm5hbWU7CisKKyNkZWZpbmUgTEZOQU1MIDI1NgkJCS8q IE1heCBsZW5ndGggZm9yIGxvY2sgZmlsZSBuYW1lLiAqLworICAgIGNoYXIgbG9ja2ZpbFtMRk5B TUxdOwkJLyogTG9jayBmaWxlIG5hbWUgKi8KKyNpZmRlZiBSVEFJWAorICAgIGNoYXIgbGtsb2Nr ZltMRk5BTUxdOwkJLyogTmFtZSBmb3IgbGluayB0byBsb2NrIGZpbGUgICovCisjZW5kaWYgLyog UlRBSVggKi8KKyNpZmRlZiBDS1NZTUxJTksKKyAgICBjaGFyIHN5bWxvY2tbTEZOQU1MXTsJCS8q IE5hbWUgZm9yIHN5bWxpbmsgbG9ja2ZpbGUgbmFtZSAqLworI2VuZGlmIC8qIENLU1lNTElOSyAq LworICAgIGNoYXIgdG1wbmFtW0xGTkFNTCszMF07CQkvKiBUZW1wb3JhcnkgbG9ja2ZpbGUgbmFt ZS4gKi8KKyAgICBjaGFyICpsb2NrZGlyID0gTE9DS19ESVI7CQkvKiBEZWZpbmVkIG5lYXIgdG9w IG9mIHRoaXMgZmlsZSwgKi8KKwkJCQkJLyogb3Igb24gY2MgY29tbWFuZCBsaW5lLiAqLworICAg IGhhc2xvY2sgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vdCBsb2NrZWQgeWV0LiAq LworICAgICpmbGZuYW0gPSAnXDAnOwkJCS8qIExvY2tmaWxlIG5hbWUgaXMgZW1wdHkuICovCisg ICAgbG9jazJbMF0gPSAnXDAnOwkJCS8qIENsZWFyIHNlY29uZGFyeSBsb2NrZmlsZSBuYW1lLiAq LworICAgIHBpZCA9IGdldHBpZCgpOwkJCS8qIEdldCBpZCBvZiB0aGlzIHByb2Nlc3MuICovCisK Ky8qICBDb25zdHJ1Y3QgbmFtZSBvZiBsb2NrZmlsZSBhbmQgdGVtcG9yYXJ5IGZpbGUgKi8KKwor LyogIGRldmljZSAgPSBuYW1lIG9mIHR0eSBkZXZpY2Ugd2l0aG91dCB0aGUgcGF0aCwgZS5nLiAi dHR5aDgiICovCisvKiAgbG9ja2ZpbCA9IG5hbWUgb2YgbG9jayBmaWxlLCB3aXRob3V0IHBhdGgs IGUuZy4gIkxDSy4udHR5aDgiICovCisKKyAgICBkZXZpY2UgPSAoKGRldm5hbWUgPSB4eGxhc3Qo dHRkZXYsJy8nKSkgIT0gTlVMTCA/IGRldm5hbWUrMSA6IHR0ZGV2KTsKKworICAgIGlmIChzdGF0 KHR0ZGV2LCZkZXZidWYpIDwgMCkKKyAgICAgIHJldHVybigtMSk7CisKKyNpZmRlZiBDS1NZTUxJ TksKKyAgICBpc2xpbmsgPSAxOwkJCQkvKiBBc3N1bWUgaXQncyBhIHN5bWxpbmsgKi8KKyAgICBs aW5rdG9bMF0gPSAnXDAnOwkJCS8qIEJ1dCB3ZSBkb24ndCBrbm93IHRvIHdoYXQgKi8KKyNpZmRl ZiBDT01NRU5UCisvKgorICBUaGlzIGlzIHVuZGVwZW5kYWJsZS4gIElmIGl0IHdvcmtlZCBpdCB3 b3VsZCBzYXZlIHRoZSByZWFkbGluayBjYWxsIGlmCisgIHdlIGtuZXcgdGhlIGRldmljZSBuYW1l IHdhcyBub3QgYSBsaW5rLgorKi8KKyNpZmRlZiBTX0lTTE5LCisgICAgaXNsaW5rID0gU19JU0xO SyhkZXZidWYuc3RfbW9kZSk7CisgICAgZGVidWcoRjEwMSwidHRsb2NrIHN0YXQgU19JU0xOSyIs IiIsaXNsaW5rKTsKKyNlbmRpZiAvKiBTX0lTTE5LICovCisjZW5kaWYgLyogQ09NTUVOVCAqLwor ICAgIGlmIChpc2xpbmspIHsKKwluID0gcmVhZGxpbmsodHRkZXYsbGlua3RvLERFVk5BTUxFTik7 IC8qIFNlZSBpZiBpdCdzIGEgbGluayAqLworCWRlYnVnKEYxMTEsInR0bG9jayByZWFkbGluayIs dHRkZXYsbik7CisJaWYgKG4gPiAtMSkJCQkvKiBJdCBpcyAqLworCSAgbGlua3RvW25dID0gJ1ww JzsKKwllbHNlCQkJCS8qIEl0J3Mgbm90ICovCisJICBpc2xpbmsgPSAwOworCWRlYnVnKEYxMTEs InR0bG9jayBsaW5rIixsaW5rdG8saXNsaW5rKTsKKyAgICB9CisgICAgaWYgKGlzbGluaykgewor CWxpbmtkZXYgPSAoZGV2bmFtZSA9IHh4bGFzdChsaW5rdG8sJy8nKSkgPyBkZXZuYW1lICsgMSA6 IGxpbmt0bzsKKwlkZWJ1ZyhGMTEwLCJ0dGxvY2sgbGlua2RldiIsbGlua2RldiwwKTsKKyAgICB9 CisjZW5kaWYgLyogQ0tTWU1MSU5LICovCisKKy8qCisgIE9uIFNDTyBwbGF0Zm9ybXMsIGlmIHdl IGRvbid0IGhhdmUgYSBzeW1saW5rLCB0aGVuIGxldCdzIHByZXRlbmQgdGhlCisgIG5hbWUgZ2l2 ZW4gZm9yIHRoZSBkZXZpY2UgaXMgYSBzeW1saW5rLCBiZWNhdXNlIGxhdGVyIHdlIHdpbGwgY2hh bmdlCisgIHRoZSBuYW1lIGlmIGl0IGNvbnRhaW5zIGFueSB1cHBlcmNhc2UgY2hhcmFjdGVycy4K KyovCisjaWZkZWYgQ0tfU0NPVjUJCQkJLyogU0NPIE9wZW4gU2VydmVyIDUuMCAqLworICAgIGlm ICghaXNsaW5rKSB7CisJaXNsaW5rID0gMTsKKwlja3N0cm5jcHkobGlua3RvLHR0ZGV2LERFVk5B TUxFTik7CisJbGlua2RldiA9IChkZXZuYW1lID0geHhsYXN0KGxpbmt0bywnLycpKSA/IGRldm5h bWUgKyAxIDogbGlua3RvOworCWRlYnVnKEYxMTAsInR0bG9jayBsaW5rZGV2IixsaW5rZGV2LDAp OworICAgIH0KKyNlbHNlCisjaWZkZWYgTV9YRU5JWAkJCQkvKiBTQ08gWGVuaXggb3IgVU5JWCAq LworICAgIGlmICghaXNsaW5rKSB7CisJaXNsaW5rID0gMTsKKwlja3N0cm5jcHkobGlua3RvLHR0 ZGV2LERFVk5BTUxFTik7CisJbGlua2RldiA9IChkZXZuYW1lID0geHhsYXN0KGxpbmt0bywnLycp KSA/IGRldm5hbWUgKyAxIDogbGlua3RvOworCWRlYnVnKEYxMTAsInR0bG9jayBsaW5rZGV2Iixs aW5rZGV2LDApOworICAgIH0KKyNlbmRpZiAvKiBNX1hFTklYICovCisjZW5kaWYgLyogQ0tfU0NP VjUgKi8KKworI2lmZGVmIElTSUlJCQkJCS8qIEludGVyYWN0aXZlIFN5c3RlbSBJSUksIFBDL0lY ICovCisgICAgY2tzdHJuY3B5KGxvY2tmaWwsIGRldmljZSwgREVWTkFNTEVOKTsKKyNlbHNlICAv KiBub3QgSVNJSUkgKi8KKyNpZmRlZiBMRkRFVk5PCQkJCS8qIExvY2tmaWxlbmFtZSBoYXMgZGV2 aWNlIG51bWJlcnMuICovCisjaWZkZWYgQ09IRVJFTlQKKyAgICBzcHJpbnRmKGxvY2tmaWwsIkxD Sy4uJWQuJWQiLAkvKiBTQUZFICovCisJICAgIG1ham9yKGRldmJ1Zi5zdF9yZGV2KSwJICAgLyog bWFqb3IgZGV2aWNlIG51bWJlciAqLworCSAgICAweDFmICYgbWlub3IoZGV2YnVmLnN0X3JkZXYp KTsgLyogbWlub3IgZGV2aWNlIG51bWJlciAqLworI2Vsc2UKKyAgICAvKiBOb3RlOiAlZCBjaGFu Z2VkIHRvICV1IGluIDguMCAtLSAldSBpcyBwYXJ0IG9mIFNWSUQgZm9yIFNWUjQgKi8KKyAgICAv KiBMb2NrZmlsZSBuYW1lIGZvcm1hdCB2ZXJpZmllZCB0byBhZ3JlZSB3aXRoIFNvbGFyaXMgY3Us IERlYyAyMDAxICovCisgICAgc3ByaW50Zihsb2NrZmlsLCJMSy4lMDN1LiUwM3UuJTAzdSIsIC8q IFNBRkUgKi8KKwkgICAgbWFqb3IoZGV2YnVmLnN0X2RldiksCS8qIGRldmljZSAqLworCSAgICBt YWpvcihkZXZidWYuc3RfcmRldiksCS8qIG1ham9yIGRldmljZSBudW1iZXIgKi8KKwkgICAgbWlu b3IoZGV2YnVmLnN0X3JkZXYpKTsJLyogbWlub3IgZGV2aWNlIG51bWJlciAqLworI2VuZGlmIC8q IENPSEVSRU5UICovCisjZWxzZSAgLyogTm90IExGREVWTk8gKi8KKyNpZmRlZiBQVFgJCQkJLyog RHluaXggUFRYICovCisgICAgaWYgKChkZXZpY2UgIT0gJnR0ZGV2WzVdKSAmJiAoc3RybmNtcCh0 dGRldiwiL2Rldi8iLDUpID09IDApKSB7CisJaWYgKChpbnQpc3RybGVuKGRldmljZSkgKyA4IDwg TEZOQU1MKQorCSAgc3ByaW50Zihsb2NrZmlsLCJMQ0suLiUuM3MlcyIsICZ0dGRldls1XSwgZGV2 aWNlKTsKKwllbHNlCisJICBja3N0cm5jcHkobG9ja2ZpbCwiTE9DS0ZJTEVfTkFNRV9UT09fTE9O RyIsTEZOQU1MKTsKKyAgICB9IGVsc2UKKyNlbmRpZiAvKiBQVFggKi8KKyAgICAgIGlmICgoaW50 KXN0cmxlbihkZXZpY2UpICsgNSA8IExGTkFNTCkKKwlzcHJpbnRmKGxvY2tmaWwsIkxDSy4uJXMi LCBkZXZpY2UpOworICAgICAgZWxzZQorCWNrc3RybmNweShsb2NrZmlsLCJMT0NLRklMRV9OQU1F X1RPT19MT05HIixMRk5BTUwpOworI2lmZGVmIFJUQUlYCisgICAgY2tzdHJuY3B5KGxrbG9ja2Ys ZGV2aWNlLERFVk5BTUxFTik7CisjZW5kaWYgLyogUlRBSVggKi8KKyNpZmRlZiBDS1NZTUxJTksK KyAgICBzeW1sb2NrWzBdID0gJ1wwJzsKKyAgICBpZiAoaXNsaW5rKQorICAgICAgY2ttYWttc2co c3ltbG9jayxMRk5BTUwsICJMQ0suLiIsIGxpbmtkZXYsIE5VTEwsIE5VTEwpOworI2VuZGlmIC8q IENLU1lNTElOSyAqLworI2VuZGlmIC8qIExGREVWTk8gKi8KKyNlbmRpZiAvKiBJU0lJSSAqLwor CisjaWZkZWYgQ0tfU0NPVjUJCQkJLyogU0NPIE9wZW4gU2VydmVyIDUuMCAqLworICAgIHsKKwkv KiBMb3dlcmNhc2UgdGhlIGVudGlyZSBmaWxlbmFtZS4gKi8KKyAgICAgICAgLyogU0NPIHNheXMg d2UgbXVzdCBkbyB0aGlzIGluIFY1LjAgYW5kIGxhdGVyLiAqLworCS8qIEJVVC4uLiB3YXRjaCBv dXQgZm9yIGRldmljZXMgLS0gbGlrZSBEaWdpYm9hcmQgUG9ydHNlcnZlciAqLworCS8qIFRoYXQg Y2FuIGhhdmUgaHVuZHJlZHMgb2YgcG9ydHMuLi4gKi8KKwljaGFyICpwID0gKGNoYXIgKikobG9j a2ZpbCArIDUpOworCXdoaWxlICgqcCkgeyBpZiAoaXN1cHBlcigqcCkpICpwID0gKGNoYXIpIHRv bG93ZXIoKnApOyBwKys7IH0KKyAgICB9CisjaWZkZWYgQ0tTWU1MSU5LCisgICAgaWYgKGlzbGlu aykgewkJCS8qIElmIG5vIGNoYW5nZSAqLworCWlmICghc3RyY21wKGxvY2tmaWwsc3ltbG9jaykp IHsJLyogdGhlbiBubyBzZWNvbmQgbG9ja2ZpbGUgbmVlZGVkICovCisJICAgIGlzbGluayA9IDA7 CisJICAgIHN5bWxvY2tbMF0gPSAnXDAnOworCX0KKyAgICB9CisjZW5kaWYgLyogQ0tTWU1MSU5L ICovCisjZWxzZQorI2lmZGVmIE1fWEVOSVgJCQkJLyogU0NPIFhlbml4IG9yIFVOSVggKi8KKyAg ICB7CisJaW50IHg7IGNoYXIgYzsKKwl4ID0gKGludClzdHJsZW4obG9ja2ZpbCkgLSAxOwkvKiBH ZXQgbGFzdCBsZXR0ZXIgb2YgZGV2aWNlIG5hbWUuICovCisJaWYgKHggPiAwKSB7CQkJLyogSWYg aXQncyB1cHBlcmNhc2UsIGxvd2VyIGl0LiAqLworCSAgICBjID0gbG9ja2ZpbFt4XTsKKwkgICAg aWYgKGMgPj0gJ0EnICYmIGMgPD0gJ1onKSBsb2NrZmlsW3hdICs9ICgnYScgLSAnQScpOworCX0K KyAgICB9CisjaWZkZWYgQ0tTWU1MSU5LCisgICAgaWYgKGlzbGluaykgeworCWlmICghc3RyY21w KGxvY2tmaWwsc3ltbG9jaykpIHsJLyogTm8gY2hhbmdlICovCisJICAgIGlzbGluayA9IDA7CQkJ Lyogc28gbm8gc2Vjb25kIGxvY2tmaWxlICovCisJICAgIHN5bWxvY2tbMF0gPSAnXDAnOworCX0K KyAgICB9CisjZW5kaWYgLyogQ0tTWU1MSU5LICovCisjZW5kaWYgLyogTV9YRU5JWCAqLworI2Vu ZGlmIC8qIENLX1NDT1Y1ICovCisKKy8qICBmbGZuYW0gPSBmdWxsIGxvY2tmaWxlIHBhdGhuYW1l LCBlLmcuICIvdXNyL3Nwb29sL3V1Y3AvTENLLi50dHloOCIgKi8KKy8qICB0bXBuYW0gPSB0ZW1w b3JhcnkgdW5pcXVlLCBlLmcuICIvdXNyL3Nwb29sL3V1Y3AvTFRNUC4ucGlkIiAqLworCisgICAg Y2ttYWttc2coZmxmbmFtLExGTkFNTCxsb2NrZGlyLCIvIixsb2NrZmlsLE5VTEwpOworCisjaWZk ZWYgUlRBSVgKKyAgICBja21ha21zZyhsa2ZsZm4sRkxGTkFNTCxsb2NrZGlyLCIvIixsa2xvY2tm LE5VTEwpOworI2VuZGlmIC8qIFJUQUlYICovCisKKyNpZm5kZWYgTEZERVZOTworI2lmZGVmIENL U1lNTElOSworICAgIC8qIElmIGl0J3MgYSBsaW5rIHRoZW4gYWxzbyBtYWtlIGEgbG9ja2ZpbGUg Zm9yIHRoZSByZWFsIG5hbWUgKi8KKyAgICBkZWJ1ZyhGMTExLCJ0dGxvY2sgbGluayBzeW1sb2Nr IixzeW1sb2NrLGlzbGluayk7CisgICAgaWYgKGlzbGluayAmJiBzeW1sb2NrWzBdKSB7CisJLyog QnV0IG9ubHkgaWYgdGhlIGxvY2tmaWxlIG5hbWVzIHdvdWxkIGJlIGRpZmZlcmVudC4gKi8KKwkv KiBXQVJOSU5HOiBUaGV5IHdvbid0IGJlLCBlLmcuIGZvciAvZGV2L3R0eWQyID0+IC9ody90dHlz L3R0eWQyICovCisJY2ttYWttc2cobG9jazIsRkxGTkFNTCxsb2NrZGlyLCIvIixzeW1sb2NrLE5V TEwpOworCWRlYnVnKEYxMTAsInR0bG9jayBsb2NrMiIsbG9jazIsMCk7CisJaWYgKCFzdHJjbXAo bG9jazIsZmxmbmFtKSkgewkvKiBBcmUgbG9ja2ZpbGUgbmFtZXMgdGhlIHNhbWU/ICovCisJICAg IGRlYnVnKEYxMDAsInR0bG9jayBsb2NrMiBjbGVhcmVkIiwiIiwwKTsKKwkgICAgbG9jazJbMF0g PSAnXDAnOwkJLyogQ2xlYXIgc2Vjb25kYXJ5IGxvY2tmaWxlIG5hbWUuICovCisJfQorICAgIH0K KyNlbmRpZiAvKiBDS1NZTUxJTksgKi8KKyNlbmRpZiAvKiBMRkRFVk5PICovCisKKyAgICBzcHJp bnRmKHRtcG5hbSwiJXMvTFRNUC4lMDVkIixsb2NrZGlyLChpbnQpIHBpZCk7IC8qIHNhZmUgKi8K KyAgICBkZWJ1ZyhGMTEwLCJ0dGxvY2sgZmxmbmFtIixmbGZuYW0sMCk7CisgICAgZGVidWcoRjEx MCwidHRsb2NrIHRtcG5hbSIsdG1wbmFtLDApOworCisgICAgcHJpdl9vbigpOwkJCQkvKiBUdXJu IG9uIHByaXZpbGVnZXMgaWYgcG9zc2libGUuICovCisgICAgbG9ja2ZkID0gY3JlYXQodG1wbmFt LCAwNDQ0KTsJLyogVHJ5IHRvIGNyZWF0ZSB0ZW1wIGxvY2sgZmlsZS4gKi8KKyAgICBpZiAobG9j a2ZkIDwgMCkgewkJCS8qIENyZWF0ZSBmYWlsZWQuICovCisJZGVidWcoRjExMSwidHRsb2NrIGNy ZWF0IGZhaWxlZCIsdG1wbmFtLGVycm5vKTsKKwlpZiAoZXJybm8gPT0gRU5PRU5UKSB7CisJICAg IHBlcnJvcihsb2NrZGlyKTsKKwkgICAgcHJpbnRmKCJVVUNQIG5vdCBpbnN0YWxsZWQgb3IgS2Vy bWl0IG1pc2NvbmZpZ3VyZWRcbiIpOworCX0gZWxzZSB7CisJICAgIGlmICghcXVpZXQpCisJICAg ICAgcGVycm9yKGxvY2tkaXIpOworCSAgICB1bmxpbmsodG1wbmFtKTsJCS8qIEdldCByaWQgb2Yg dGhlIHRlbXBvcmFyeSBmaWxlLiAqLworCX0KKwlwcml2X29mZigpOwkJCS8qIFR1cm4gb2ZmIHBy aXZpbGVnZXMhISEgKi8KKwlyZXR1cm4oLTEpOwkJCS8qIFJldHVybiBmYWlsdXJlIGNvZGUuICov CisgICAgfQorLyogTm93IHdyaXRlIHRoZSBwaWQgaW50byB0aGUgdGVtcCBsb2NrZmlsZSBpbiB0 aGUgYXBwcm9wcmlhdGUgZm9ybWF0ICovCisKKyNpZmRlZiBQSURTVFJJTkcJCQkvKiBGb3IgSG9u ZXkgRGFuQmVyIFVVQ1AsICovCisgICAgc3ByaW50ZigJCQkJLyogd3JpdGUgUElEIGFzIGRlY2lt YWwgc3RyaW5nICovCisJICAgIHBpZF9zdHIsCisjaWZkZWYgTElOVVhGU1NUTkQJCQkvKiBUaGUg IkxpbnV4IEZpbGUgU3lzdGVtIFN0YW5kYXJkIiAqLworI2lmZGVmIEZTU1RORDEwCQkJCS8qIFZl cnNpb24gMS4wIGNhbGxzIGZvciAqLworCSAgICAiJTAxMGRcbiIsCQkJLyogbGVhZGluZyB6ZXJv cyAqLworI2Vsc2UJCQkJCS8qIHdoaWxlIHZlcnNpb24gMS4yIGNhbGxzIGZvciAqLworCSAgICAi JTEwZFxuIiwJCQkvKiBsZWFkaW5nIHNwYWNlcyAqLworI2VuZGlmIC8qIEZTU1RORDEwICovCisj ZWxzZQorI2lmZGVmIENPSEVSRU5UCisJICAgICIlZFxuIiwJCQkvKiB3aXRoIGxlYWRpbmcgbm90 aGluZyAqLworI2Vsc2UKKwkgICAgIiUxMGRcbiIsCQkJLyogd2l0aCBsZWFkaW5nIGJsYW5rcyAq LworI2VuZGlmIC8qIENPSEVSRU5UICovCisjZW5kaWYgLyogTElOVVhGU1NUTkQgKi8KKwkgICAg KGludCkgcGlkCisJICAgICk7CQkJCS8qIHNhZmUgKi8KKyAgICB3cml0ZShsb2NrZmQsIHBpZF9z dHIsIDExKTsKKyAgICBkZWJ1ZyhGMTExLCJ0dGxvY2sgaGRiIHBpZCBzdHJpbmciLHBpZF9zdHIs KGludCkgcGlkKTsKKworI2Vsc2UgLyogTm90IFBJRFNUUklORywgdXNlIGludGVnZXIgUElEICov CisKKyAgICB3cml0ZShsb2NrZmQsIChjaGFyICopJnBpZCwgc2l6ZW9mKHBpZCkgKTsKKyAgICBk ZWJ1ZyhGMTAxLCJ0dGxvY2sgcGlkIiwiIiwoaW50KSBwaWQpOworCisjZW5kaWYgLyogUElEU1RS SU5HICovCisKKy8qIE5vdyB0cnkgdG8gcmVuYW1lIHRoZSB0ZW1wIGZpbGUgdG8gdGhlIHJlYWwg bG9jayBmaWxlIG5hbWUuICovCisvKiBUaGlzIHdpbGwgZmFpbCBpZiBhIGxvY2sgZmlsZSBvZiB0 aGF0IG5hbWUgYWxyZWFkeSBleGlzdHMuICAqLworCisgICAgY2xvc2UobG9ja2ZkKTsJCQkvKiBD bG9zZSB0aGUgdGVtcCBsb2NrZmlsZS4gKi8KKyAgICBjaG1vZCh0bXBuYW0sMDQ0NCk7CQkJLyog UGVybWlzc2lvbiBmb3IgYSB2YWxpZCBsb2NrLiAqLworICAgIHRyaWVzID0gMDsKKyAgICB3aGls ZSAoIWhhc2xvY2sgJiYgdHJpZXMrKyA8IDIpIHsKKwloYXNsb2NrID0gKGxpbmsodG1wbmFtLGZs Zm5hbSkgPT0gMCk7IC8qIENyZWF0ZSBhIGxpbmsgdG8gaXQuICovCisJaWYgKGhhc2xvY2spIHsJ CQkgICAgICAvKiBJZiB3ZSBnb3QgdGhlIGxvY2tmaWxlICovCisjaWZkZWYgUlRBSVgKKwkgICAg bGluayhmbGZuYW0sbGtmbGZuKTsKKyNlbmRpZiAvKiBSVEFJWCAqLworI2lmZGVmIENLU1lNTElO SworI2lmbmRlZiBMRkRFVk5PCisJICAgIGlmIChpc2xpbmsgJiYgbG9jazJbMF0pCisJICAgICAg bGluayhmbGZuYW0sbG9jazIpOworI2VuZGlmIC8qIExGREVWTk8gKi8KKyNlbmRpZiAvKiBDS1NZ TUxJTksgKi8KKworI2lmZGVmIENPTU1FTlQKKy8qIENhbid0IGRvIHRoaXMgYW55IG1vcmUgYmVj YXVzZSBkZXZpY2UgaXMgbm90IG9wZW4geWV0IHNvIG5vIHR0eWZkLiAqLworI2lmZGVmIExPQ0tG CisvKgorICBBZHZpc29yeSBmaWxlIGxvY2tpbmcgd29ya3Mgb24gU1ZSNCwgc28gd2UgdXNlIGl0 LiAgSW4gZmFjdCwgaXQgaXMKKyAgbmVjZXNzYXJ5IGluIHNvbWUgY2FzZXMsIGUuZy4gd2hlbiBT TElQIGlzIGludm9sdmVkLiAgQnV0IGl0IHN0aWxsIGRvZXNuJ3QKKyAgc2VlbSB0byBwcmV2ZW50 IG11bHRpcGxlIHVzZXJzIGFjY2Vzc2luZyB0aGUgc2FtZSBkZXZpY2UgYnkgZGlmZmVyZW50IG5h bWVzLgorKi8KKyAgICAgICAgICAgIHdoaWxlIChsb2NrZih0dHlmZCwgRl9UTE9DSywgMEwpICE9 IDApIHsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCAidHRsb2NrIGxvY2tmIHJldHVybnMg ZXJybm8iLCAiIiwgZXJybm8pOworICAgICAgICAgICAgICAgIGlmICgoKyt0cmllcyA+PSAzKSB8 fCAoZXJybm8gIT0gRUFHQUlOKSkgeworICAgICAgICAgICAgICAgICAgICB4ID0gdW5saW5rKGZs Zm5hbSk7IC8qIHJlbW92ZSB0aGUgbG9ja2ZpbGUgKi8KKyNpZmRlZiBSVEFJWAorCQkgICAgdW5s aW5rKGxrZmxmbik7CS8qIEFuZCBhbnkgbGlua3MgdG8gaXQuLi4gKi8KKyNlbmRpZiAvKiBSVEFJ WCAqLworI2lmZGVmIENLU1lNTElOSworI2lmbmRlZiBMRkRFVk5PCisJCSAgICBpZiAoaXNsaW5r ICYmIGxvY2syWzBdKQorCQkgICAgICB1bmxpbmsobG9jazIpOwkvKiBkaXR0by4uLiAqLworI2Vu ZGlmIC8qIExGREVWTk8gKi8KKyNlbmRpZiAvKiBDS1NZTUxJTksgKi8KKyAgICAgICAgICAgICAg ICAgICAgZGVidWcoRjExMSwidHRsb2NrIHVubGluayIsZmxmbmFtLHgpOworICAgICAgICAgICAg ICAgICAgICBoYXNsb2NrID0gMDsKKwkJICAgIGJyZWFrOworCQl9CisgICAgICAgICAgICAgICAg c2xlZXAoMik7CisJICAgIH0KKwkgICAgaWYgKGhhc2xvY2spCQkvKiBJZiB3ZSBnb3QgYW4gYWR2 aXNvcnkgbG9jayAqLworI2VuZGlmIC8qIExPQ0tGICovCisjZW5kaWYgLyogQ09NTUVOVCAqLwor CSAgICAgIGJyZWFrOwkJCS8qIFdlJ3JlIGRvbmUuICovCisKKwl9IGVsc2UgewkJCS8qIFdlIGRp ZG4ndCBjcmVhdGUgYSBuZXcgbG9ja2ZpbGUuICovCisJICAgIHByaXZfb2ZmKCk7CisJICAgIGlm ICh0dGNoa3BpZChmbGZuYW0pKSB7CS8qIENoZWNrIGV4aXN0aW5nIGxvY2tmaWxlICovCisJCXBy aXZfb24oKTsJCS8qIGNhdXNlIHR0Y2hrcGlkIHR1cm5zIHByaXZfb2ZmLi4uICovCisJCXVubGlu ayh0bXBuYW0pOwkJLyogRGVsZXRlIHRoZSB0ZW1wZmlsZSAqLworCQlkZWJ1ZyhGMTAwLCJ0dGxv Y2sgZm91bmQgdHR5IGxvY2tlZCIsIiIsMCk7CisJCXByaXZfb2ZmKCk7CQkvKiBUdXJuIG9mZiBw cml2cyAqLworCQlyZXR1cm4oLTIpOwkJLyogQ29kZSBmb3IgZGV2aWNlIGlzIGluIHVzZS4gKi8K KwkgICAgfQorCSAgICBwcml2X29uKCk7CisJfQorICAgIH0KKyAgICB1bmxpbmsodG1wbmFtKTsJ CQkvKiBVbmxpbmsgKHJlbW92ZSkgdGhlIHRlbXAgZmlsZS4gKi8KKyAgICBwcml2X29mZigpOwkJ CQkvKiBUdXJuIG9mZiBwcml2cyAqLworICAgIHJldHVybihoYXNsb2NrID8gMCA6IC0xKTsJCS8q IFJldHVybiBsaW5rJ3MgcmV0dXJuIGNvZGUuICovCisKKyNlbHNlIC8qIEhQVVggKi8KKworLyoK KyAgSFAtVVggZ2V0cyBpdHMgb3duIGNvcHkgb2YgdGhpcyByb3V0aW5lLCBtb2RlbGVkIGFmdGVy IHRoZSBvYnNlcnZlZCBiZWhhdmlvcgorICBvZiB0aGUgSFAtVVggJ2N1JyBwcm9ncmFtLiAgSFAt VVggc2VyaWFsIGRldmljZSBuYW1lcyBjb25zaXN0IG9mIGEgYmFzZSBuYW1lCisgIHN1Y2ggYXMg InR0eSIsICJ0dHlkIiwgImN1YSIsICJjdWwiLCAiY3VhZCIsIG9yICJjdWxkIiwgZm9sbG93ZWQg YnkgYSB1bml0CisgIGRlc2lnbmF0b3Igd2hpY2ggaXMgYSBzdHJpbmcgb2YgZGlnaXRzLCBwb3Nz aWJseSBjb250YWluaW5nIGFuIGltYmVkZGVkCisgIGxldHRlciAicCIuICBFeGFtcGxlcyAoZm9y IGJhc2UgbmFtZSAidHR5Iik6CisKKyAgICAgL2Rldi90dHkwLCAvZGV2L3R0eTAwLCBkZXYvdHR5 ZDAwLCAvZGV2L3R0eTBwMAorCisgIEFjY29yZGluZyB0byB0aGUgSFAtVVggVVVDUCBtYW51YWwg b2YgMTk4OCwgdGhlICIwcDAiIG5vdGF0aW9uIGhhcyBiZWVuCisgIHVzZWQgb24gU2VyaWVzIDgw MCBzaW5jZSBIUC1VWCAyLjAwLCBhbmQgdGhlICJub24tcCIgbm90YXRpb24gd2FzIHVzZWQKKyAg b24gb3RoZXIgbW9kZWxzLiAgSW4gSFAtVVggMTAuMDAsICIwcDAiIG5vdGF0aW9uIHdhcyBhZG9w dGVkIGZvciBhbGwgbW9kZWxzLgorICBIb3dldmVyLCB3ZSBtYWtlIGFuZCBlbmZvcmNlIG5vIHN1 Y2ggZGlzdGluY3Rpb25zOyBlaXRoZXIgbm90YXRpb24gaXMKKyAgYWNjZXB0ZWQgb24gYW55IG1v ZGVsIG9yIEhQLVVYIHZlcnNpb24gYXMgYSB2YWxpZCB1bml0IGRlc2lnbmF0b3IuCisKKyAgSWYg YSB2YWxpZCB1bml0IGlzIHNwZWNpZmllZCAoYXMgb3Bwb3NlZCB0byBhIGRlc2lnbmVyIG5hbWUg b3Igc3ltbGluayksIHdlCisgIGNoZWNrIGZvciBhbGwgYWxpYXNlcyBvZiB0aGUgZ2l2ZW4gdW5p dCBhY2NvcmRpbmcgdG8gdGhlIGRldnByZWZpeFtdIGFycmF5LgorICBJZiBubyBsb2NrZmlsZXMg YXJlIGZvdW5kIGZvciB0aGUgZ2l2ZW4gdW5pdCwgd2UgY2FuIGhhdmUgdGhlIGRldmljZTsgd2UK KyAgY3JlYXRlIGEgbG9ja2ZpbGUgTENLLi5uYW1lIGluIHRoZSBsb2NrZmlsZSBkaXJlY3Rvcnkg YXBwcm9wcmlhdGUgZm9yIHRoZQorICBIUC1VWCB2ZXJzaW9uICgvdmFyL3Nwb29sL2xvY2tzIGZv ciAxMC4wMCBhbmQgbGF0ZXIsIC91c3Ivc3Bvb2wvdXVjcCBmb3IKKyAgOS54eCBhbmQgZWFybGll cikuICBJZiBpdCBpcyBhICJjdWEiIG9yICJjdWwiIGRldmljZSwgYSBzZWNvbmQgbG9ja2ZpbGUg aXMKKyAgY3JlYXRlZCB3aXRoIHRoZSAidHR5ZCIgcHJlZml4LiAgVGhpcyBpcyBleGFjdGx5IHdo YXQgY3UgZG9lcy4KKworICBJZiB0aGUgInNldCBsaW5lIiBkZXZpY2UgZG9lcyBub3QgaGF2ZSBh IHZhbGlkIHVuaXQgZGVzaWduYXRvciwgdGhlbiBpdCBpcworICB1c2VkIGxpdGVyYWxseSBhbmQg bm8gc3lub215bXMgYXJlIHNlYXJjaGVkIGZvciBhbmQgb25seSBvbmUgbG9ja2ZpbGUgaXMKKyAg Y3JlYXRlZC4KKworICAtZmRjLCBNYXJjaCAxOTk4LgorKi8KKyNkZWZpbmUgTEZOQU1MIDgwCQkJ LyogTWF4IGxlbmd0aCBmb3IgbG9jayBmaWxlIG5hbWUuICovCisKKyAgICBpbnQgbG9ja2ZkOwkJ CQkvKiBGaWxlIGRlc2NyaXB0b3IgZm9yIGxvY2sgZmlsZS4gKi8KKyAgICBQSURfVCBwaWQ7CQkJ CS8qIFByb2Nlc3MgSUQgb2YgdGhpcyBwcm9jZXNzLiAqLworICAgIGludCBmcGlkOwkJCQkvKiBw aWQgZm91bmQgaW4gZXhpc3RpbmcgbG9ja2ZpbGUuICovCisgICAgaW50IHRyaWVzOwkJCQkvKiBI b3cgbWFueSB0aW1lcyB3ZSd2ZSB0cmllZC4uLiAqLworICAgIGludCBpLCBrOwkJCQkvKiBXb3Jr ZXJzICovCisKKyAgICBjaGFyICpkZXZpY2UsICpkZXZuYW1lOwkJLyogIi9kZXYveHh4IiwgInh4 eCIgKi8KKyAgICBjaGFyICp1bml0LCAqcDsJCQkvKiA8aW5zdGFuY2U+cDxwb3J0PiBwYXJ0IG9m IHh4eCAqLworCisgICAgY2hhciBsb2NrZmlsW0xGTkFNTF07CQkvKiBMb2NrZmlsZSBuYW1lIChu byBwYXRoKSAqLworICAgIGNoYXIgdG1wbmFtW0xGTkFNTF07CQkvKiBUZW1wb3JhcnkgbG9ja2Zp bGUgbmFtZS4gKi8KKworI2lmZGVmIEhQVVgxMAkJCQkvKiBMb2NrZmlsZSBkaXJlY3RvcnkgKi8K KyAgICBjaGFyICpsb2NrZGlyID0gIi92YXIvc3Bvb2wvbG9ja3MiOwkvKiBBbHdheXMgdGhpcyBm b3IgMTAuMDAgYW5kIGhpZ2hlciAqLworI2Vsc2UgIC8qIEhQLVVYIDkueHggYW5kIGJlbG93ICov CisjaWZkZWYgTE9DS19ESVIKKyAgICBjaGFyICpsb2NrZGlyID0gTE9DS19ESVI7CQkvKiBEZWZp bmVkIG5lYXIgdG9wIG9mIHRoaXMgZmlsZSAqLworI2Vsc2UKKyAgICBjaGFyICpsb2NrZGlyID0g Ii91c3Ivc3Bvb2wvdXVjcCI7CS8qIG9yIG5vdC4uLiAqLworI2VuZGlmIC8qIExPQ0tfRElSICov CisjZW5kaWYgLyogSFBVWDEwICovCisKKyAgICBoYXNsb2NrID0gMDsgICAgICAgICAgICAgICAg ICAgICAgICAvKiBOb3QgbG9ja2VkIHlldC4gKi8KKyAgICAqZmxmbmFtID0gJ1wwJzsJCQkvKiBM b2NrZmlsZSBuYW1lIGlzIGVtcHR5LiAqLworICAgIGxvY2syWzBdID0gJ1wwJzsJCQkvKiBTZWNv bmQgb25lIHRvby4gKi8KKyAgICBwaWQgPSBnZXRwaWQoKTsJCQkvKiBHZXQgbXkgcHJvY2VzcyBJ RCAqLworLyoKKyAgQ29uc3RydWN0IG5hbWUgb2YgbG9ja2ZpbGUgYW5kIHRlbXBvcmFyeSBmaWxl Li4uCisgIGRldmljZSAgPSBuYW1lIG9mIHR0eSBkZXZpY2Ugd2l0aG91dCB0aGUgcGF0aCwgZS5n LiAidHR5MHAwIgorICBsb2NrZmlsID0gbmFtZSBvZiBsb2NrIGZpbGUsIHdpdGhvdXQgcGF0aCwg ZS5nLiAiTENLLi50dHkwcDAiCisqLworICAgIGRldmljZSA9ICgoZGV2bmFtZSA9IHh4bGFzdCh0 dGRldiwnLycpKSAhPSBOVUxMID8gZGV2bmFtZSsxIDogdHRkZXYpOworICAgIGRlYnVnKEYxMTAs IlRUTE9DSyBkZXZpY2UiLGRldmljZSwwKTsKKyAgICBja21ha21zZyhsb2NrZmlsLExGTkFNTCwi TENLLi4iLGRldmljZSxOVUxMLE5VTEwpOworCisgICAgayA9IDA7CQkJCS8qIEFzc3VtZSBkZXZp Y2UgaXMgbm90IGxvY2tlZCAqLworICAgIG4gPSAwOwkJCQkvKiBEaWdpdCBjb3VudGVyICovCisg ICAgdW5pdCA9IGRldmljZTsJCQkvKiBVbml0ID0gPGluc3RhbmNlPnA8cG9ydD4gKi8KKyAgICB3 aGlsZSAoKnVuaXQgJiYgIWlzZGlnaXQoKnVuaXQpKQkvKiBTZWFyY2ggZm9yIGRpZ2l0Li4uICov CisgICAgICB1bml0Kys7CisgICAgcCA9IHVuaXQ7CQkJCS8qIFZlcmlmeSA8bnVtPnA8bnVtPiBm b3JtYXQuLi4gKi8KKyAgICBkZWJ1ZyhGMTEwLCJUVExPQ0sgdW5pdCAxIix1bml0LDApOworLyoK KyAgVGhlIHVuaXQgbnVtYmVyIGlzIHJlY29nbml6ZWQgYXM6CisgIChhKSBhbnkgc2VxdWVuY2Ug b2YgZGlnaXRzIHRoYXQgcnVucyB0byB0aGUgZW5kIG9mIHRoZSBzdHJpbmcuCisgIChiKSBhbnkg KGEpIHRoYXQgaW5jbHVkZXMgb25lIGFuZCBvbmx5IG9uZSBsZXR0ZXIgInAiLCB3aXRoIGF0IGxl YXN0CisgICAgICBvbmUgZGlnaXQgYmVmb3JlIGFuZCBhZnRlciBpdC4KKyovCisgICAgd2hpbGUg KGlzZGlnaXQoKnApKSBwKyssIG4rKzsJLyogR2V0IGEgcnVuIG9mIGRpZ2l0cyAqLworICAgIGlm ICgqcCAmJiBuID4gMCkgewkJCS8qIEhhdmUgYSAicCI/ICovCisJaWYgKCpwID09ICdwJyAmJiBp c2RpZ2l0KCoocCsxKSkpIHsKKwkgICAgcCsrOworCSAgICBuID0gMDsKKwkgICAgd2hpbGUgKGlz ZGlnaXQoKnApKSBwKyssIG4rKzsKKwl9CisgICAgfQorICAgIGlmIChuID09IDAgfHwgKnApIHVu aXQgPSAiIjsKKyAgICBkZWJ1ZyhGMTEwLCJUVExPQ0sgdW5pdCAyIix1bml0LDApOworCisgICAg aWYgKCp1bml0KSB7CQkJLyogRGV2aWNlIG5hbWUgaGFzIHVuaXQgbnVtYmVyLiAqLworCS8qIFRo ZSBmb2xsb3dpbmcgbG9vcCBub3Qgb25seSBzZWFyY2hlcyBmb3IgdGhlIHZhcmlvdXMgbG9ja2Zp bGUgICAgKi8KKwkvKiBzeW5vbnltcywgYnV0IGFsc28gcmVtb3ZlcyBhbGwgLS0gbm90IGp1c3Qg b25lIC0tIHN0YWxlIGxvY2tmaWxlICovCisJLyogZm9yIHRoZSBkZXZpY2UsIHNob3VsZCB0aGVy ZSBiZSBtb3JlIHRoYW4gb25lLiAgU2VlIHR0Y2hrcGlkKCkuICAqLworCXR0eWRleGlzdHMgPSAw OworCWZvciAoaSA9IDA7ICpkZXZwcmVmaXhbaV07IGkrKykgeyAvKiBGb3IgZWFjaCBkcml2ZXIu Li4gKi8KKwkgICAgLyogTWFrZSBkZXZpY2UgbmFtZSAqLworCSAgICBja21ha21zZyhsb2NrMixG TEZOQU1MLCIvZGV2LyIsZGV2cHJlZml4W2ldLHVuaXQsTlVMTCk7CisJICAgIHByaXZfb24oKTsJ CQkvKiBQcml2cyBvbiAqLworCSAgICBrID0gemNoa2kobG9jazIpICE9IC0xOwkvKiBTZWUgaWYg ZGV2aWNlIGV4aXN0cyAqLworCSAgICBwcml2X29mZigpOwkJCS8qIFByaXZzIG9mZiAqLworCSAg ICBkZWJ1ZyhGMTExLCJUVExPQ0sgZXhpc3QiLGxvY2syLGspOworICAgICAgICAgICAgaWYgKGsp IHsKKwkJaWYgKCFzdHJjbXAoZGV2cHJlZml4W2ldLCJ0dHlkIikpIC8qIHR0eWQgZGV2aWNlIGV4 aXN0cyAqLworCQkgIHR0eWRleGlzdHMgPSAxOworCQkvKiBNYWtlIGxvY2tmaWxlIG5hbWUgKi8K KwkJY2ttYWttc2cobG9jazIsRkxGTkFNTCxsb2NrZGlyLCIvTENLLi4iLGRldnByZWZpeFtpXSx1 bml0KTsKKwkJZGVidWcoRjExMCwiVFRMT0NLIGNoZWNraW5nIixsb2NrMiwwKTsKKwkJcHJpdl9v bigpOwkJLyogUHJpdnMgb24gKi8KKwkJayA9IHpjaGtpKGxvY2syKSAhPSAtMTsJLyogU2VlIGlm IGxvY2tmaWxlIGV4aXN0cyAqLworCQlwcml2X29mZigpOwkJLyogUHJpdnMgb2ZmICovCisJCWRl YnVnKEYxMTEsIlRUTE9DSyBjaGVjayBmb3IgbG9jayBBIixsb2NrMixrKTsKKwkJaWYgKGspIGlm ICh0dGNoa3BpZChsb2NrMikpIHsgLyogSWYgcGlkIHN0aWxsIGFjdGl2ZSwgZmFpbC4gKi8KKwkJ ICAgIGNrc3RybmNweShmbGZuYW0sbG9jazIsRkxGTkFNTCk7CisJCSAgICByZXR1cm4oLTIpOwor CQl9CisJICAgIH0KKwl9CisgICAgfSBlbHNlIHsJCQkJLyogU29tZSBvdGhlciBkZXZpY2UtbmFt ZSBmb3JtYXQgKi8KKwkvKiBUaGlzIHRha2VzIGNhcmUgb2Ygc3ltYm9saWMgbGlua3MsIGV0Yy4u LiAqLworCS8qIEJ1dCBkb2VzIG5vdCBjaGFzZSB0aGVtIGRvd24hICovCisJY2ttYWttc2cobG9j azIsRkxGTkFNTCxsb2NrZGlyLCIvTENLLi4iLGRldmljZSxOVUxMKTsKKwlwcml2X29uKCk7CisJ ayA9IHpjaGtpKGxvY2syKSAhPSAtMTsJCS8qIENoZWNrIGZvciBleGlzdGluZyBsb2NrZmlsZSAq LworCXByaXZfb2ZmKCk7CisJZGVidWcoRjExMSwiVFRMT0NLIGNoZWNrIGZvciBsb2NrIEIiLGxv Y2syLGspOworCWlmIChrKSBpZiAodHRjaGtwaWQobG9jazIpKSB7CS8qIENoZWNrIHBpZCBmcm9t IGxvY2tmaWxlICovCisJICAgIGNrc3RybmNweShmbGZuYW0sbG9jazIsRkxGTkFNTCk7CisJICAg IGRlYnVnKEYxMTAsIlRUTE9DSyBpbiB1c2UiLGRldmljZSwwKTsKKwkgICAgZGVidWcoRjEwMSwi VFRMT0NLIHJldHVybnMiLCIiLC0yKTsKKwkgICAgcmV0dXJuKC0yKTsKKwl9CisgICAgfQorLyoK KyAgR2V0IGhlcmUgb25seSBpZiB0aGVyZSBpcyBubyAobW9yZSkgbG9ja2ZpbGUsIHNvIG5vdyB3 ZSBtYWtlIG9uZSAob3IgdHdvKS4uLgorICBmbGZuYW0gPSBmdWxsIGxvY2tmaWxlIHBhdGhuYW1l LCBlLmcuICIvdXNyL3Nwb29sL3V1Y3AvTENLLi5jdWwwcDAiLgorICB0bXBuYW0gPSB1bmlxdWUg dGVtcG9yYXJ5IGZpbG5hbWUsIGUuZy4gIi91c3Ivc3Bvb2wvdXVjcC9MVE1QLi5waWQiLgorKi8K KyAgICBja21ha21zZyhmbGZuYW0sRkxGTkFNTCxsb2NrZGlyLCIvIixsb2NrZmlsLE5VTEwpOyAv KiBTRVQgTElORSBkZXZpY2UgKi8KKworICAgIC8qIElmIGRpYWxvdXQgZGV2aWNlLCBhbHNvIG1h a2Ugb25lIGZvciBjb3JyZXNwb25kaW5nIGRpYWxpbiBkZXZpY2UgKi8KKyAgICBsb2NrMlswXSA9 ICdcMCc7CisgICAgaWYgKCFzdHJuY21wKGRldmljZSwiY3UiLDIpICYmICp1bml0ICYmIHR0eWRl eGlzdHMpCisgICAgICBja21ha21zZyhsb2NrMixGTEZOQU1MLGxvY2tkaXIsIi9MQ0suLnR0eWQi LHVuaXQsTlVMTCk7CisKKyAgICBpZiAoKGludClzdHJsZW4obG9ja2RpcikrMTIgPCBMRk5BTUwp CisgICAgICBzcHJpbnRmKHRtcG5hbSwiJXMvTFRNUC4lMDVkIixsb2NrZGlyLChpbnQpIHBpZCk7 IC8qIE1ha2UgdGVtcCBuYW1lICovCisjaWZkZWYgREVCVUcKKyAgICBpZiAoZGVibG9nKSB7CisJ ZGVidWcoRjExMCwiVFRMT0NLIGZsZm5hbSIsZmxmbmFtLDApOworCWRlYnVnKEYxMTAsIlRUTE9D SyBsb2NrMiIsbG9jazIsMCk7CisJZGVidWcoRjExMCwiVFRMT0NLIHRtcG5hbSIsdG1wbmFtLDAp OworICAgIH0KKyNlbmRpZiAvKiBERUJVRyAqLworLyoKKyAgIExvY2tmaWxlIHBlcm1pc3Npb25z Li4uCisgICA0NDQgaXMgc3RhbmRhcmQsIEhQLVVYIDEwLjAwIHVzZXMgNjY0LiAgSXQgZG9lc24n dCBtYXR0ZXIuCisgICBLZXJtaXQgdXNlcyA0NDQ7IHRoZSBkaWZmZXJlbmNlIGxldHMgdXMgdGVs bCB3aGV0aGVyIEtlcm1pdCBjcmVhdGVkCisgICB0aGUgbG9jayBmaWxlLgorKi8KKyAgICBwcml2 X29uKCk7CQkJCS8qIFR1cm4gb24gcHJpdmlsZWdlcy4gKi8KKyAgICBsb2NrZmQgPSBjcmVhdCh0 bXBuYW0sIDA0NDQpOwkvKiBUcnkgdG8gY3JlYXRlIHRlbXBvcmFyeSBmaWxlLiAqLworICAgIGlm IChsb2NrZmQgPCAwKSB7CQkJLyogQ3JlYXRlIGZhaWxlZC4gKi8KKwlkZWJ1ZyhGMTExLCJUVExP Q0sgY3JlYXQgZmFpbGVkIix0bXBuYW0sZXJybm8pOworCWlmIChlcnJubyA9PSBFTk9FTlQpIHsK KwkgICAgcGVycm9yKGxvY2tkaXIpOworCSAgICBwcmludGYoIlVVQ1Agbm90IGluc3RhbGxlZCBv ciBLZXJtaXQgbWlzY29uZmlndXJlZFxuIik7CisJfSBlbHNlIHsKKwkgICAgaWYgKCFxdWlldCkK KwkgICAgICBwZXJyb3IobG9ja2Rpcik7CisJICAgIHVubGluayh0bXBuYW0pOwkJLyogR2V0IHJp ZCBvZiB0aGUgdGVtcG9yYXJ5IGZpbGUuICovCisJfQorCXByaXZfb2ZmKCk7CQkJLyogVHVybiBv ZmYgcHJpdmlsZWdlcyEhISAqLworCWRlYnVnKEYxMDEsIlRUTE9DSyByZXR1cm5zIiwiIiwtMSk7 CisJcmV0dXJuKC0xKTsJCQkvKiBSZXR1cm4gZmFpbHVyZSBjb2RlLiAqLworICAgIH0KKyAgICBk ZWJ1ZyhGMTEwLCJUVExPQ0sgdGVtcCBvayIsdG1wbmFtLDApOworCisvKiBOb3cgd3JpdGUgb3Vy IHBpZCBpbnRvIHRoZSB0ZW1wIGxvY2tmaWxlIGluIGludGVnZXIgZm9ybWF0LiAqLworCisgICAg aSA9IHdyaXRlKGxvY2tmZCwgKGNoYXIgKikmcGlkLCBzaXplb2YocGlkKSk7CisKKyNpZmRlZiBE RUJVRworICAgIGlmIChkZWJsb2cpIHsKKwlkZWJ1ZyhGMTAxLCJUVExPQ0sgcGlkIiwiIixwaWQp OworCWRlYnVnKEYxMDEsIlRUTE9DSyBzaXplb2YgcGlkIiwiIixzaXplb2YocGlkKSk7CisJZGVi dWcoRjEwMSwiVFRMT0NLIHdyaXRlIHBpZCByZXR1cm5zIiwiIixpKTsKKyAgICB9CisjZW5kaWYg LyogREVCVUcgKi8KKworLyoKKyAgTm93IHRyeSB0byByZW5hbWUgdGhlIHRlbXBvcmFyeSBmaWxl IHRvIHRoZSByZWFsIGxvY2tmaWxlIG5hbWUuCisgIFRoaXMgd2lsbCBmYWlsIGlmIGEgbG9jayBm aWxlIG9mIHRoYXQgbmFtZSBhbHJlYWR5IGV4aXN0cywgd2hpY2gKKyAgd2lsbCBjYXRjaCByYWNl IGNvbmRpdGlvbnMgd2l0aCBvdGhlciB1c2Vycy4KKyovCisgICAgY2xvc2UobG9ja2ZkKTsJCQkv KiBDbG9zZSB0aGUgdGVtcCBsb2NrZmlsZS4gKi8KKyAgICBjaG1vZCh0bXBuYW0sMDQ0NCk7CisK KyAgICB0cmllcyA9IDA7CisgICAgd2hpbGUgKCFoYXNsb2NrICYmIHRyaWVzKysgPCAyKSB7CisJ aGFzbG9jayA9IChsaW5rKHRtcG5hbSxmbGZuYW0pID09IDApOyAvKiBDcmVhdGUgYSBsaW5rIHRv IGl0LiAqLworCWRlYnVnKEYxMDEsIlRUTE9DSyBsaW5rIiwiIixoYXNsb2NrKTsKKwlpZiAoaGFz bG9jaykgewkJCS8qIElmIHdlIG1hZGUgdGhlIGxvY2tmaWxlLi4uICovCisKKyNpZmRlZiBDT01N RU5UCisvKiBXZSBjYW4ndCBkbyB0aGlzIGFueSBtb3JlIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSBh IGZpbGUgZGVzY3JpcHRvciB5ZXQuICovCisjaWZkZWYgTE9DS0YJCQkJLyogQ2FuIGJlIGNhbmNl bGVkIHdpdGggLUROT0xPQ0tGICovCisvKgorICBDcmVhdGUgYW4gYWR2aXNvcnkgbG9jayBvbiB0 aGUgZGV2aWNlIHRocm91Z2ggaXRzIGZpbGUgZGVzY3JpcHRvci4KKyAgVGhpcyBjb2RlIGFjdHVh bGx5IHNlZW1zIHRvIHdvcmsuICBJZiBpdCBpcyBleGVjdXRlZCwgYW5kIHRoZW4gYW5vdGhlcgor ICBwcm9jZXNzIHRyaWVzIHRvIG9wZW4gdGhlIHNhbWUgZGV2aWNlIHVuZGVyIGEgZGlmZmVyZW50 IG5hbWUgdG8gY2lyY3VtdmVudAorICB0aGUgbG9ja2ZpbGUsIHRoZXkgZ2V0IGEgImRldmljZSBi dXN5IiBlcnJvci4KKyovCisJICAgIGRlYnVnKEYxMDAsIlRUTE9DSyBMT0NLRiBjb2RlLi4uIiwi IiwwKTsKKyAgICAgICAgICAgIHdoaWxlICggbG9ja2YodHR5ZmQsIEZfVExPQ0ssIDBMKSAhPSAw ICkgeworICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsICJUVExPQ0sgbG9ja2YgZXJyb3IiLCAi IiwgZXJybm8pOworICAgICAgICAgICAgICAgIGlmICgoKyt0cmllcyA+PSAzKSB8fCAoZXJybm8g IT0gRUFHQUlOKSkgeworICAgICAgICAgICAgICAgICAgICB4ID0gdW5saW5rKGZsZm5hbSk7IC8q IFJlbW92ZSB0aGUgbG9ja2ZpbGUgKi8KKwkJICAgIGlmIChlcnJubyA9PSBFQUNDRVMgJiYgIXF1 aWV0KQorCQkgICAgICBwcmludGYoIkRldmljZSBhbHJlYWR5IGxvY2tlZCBieSBhbm90aGVyIHBy b2Nlc3NcbiIpOworICAgICAgICAgICAgICAgICAgICBoYXNsb2NrID0gMDsKKwkJICAgIGJyZWFr OworCQl9CisgICAgICAgICAgICAgICAgc2xlZXAoMik7CisJICAgIH0KKyNlbmRpZiAvKiBMT0NL RiAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKworCSAgICBpZiAoaGFzbG9jaykgewkJLyogSWYg d2UgbWFkZSB0aGUgbG9ja2ZpbGUgLi4uICovCisJCWlmIChsb2NrMlswXSkgewkJLyogaWYgdGhl cmUgaXMgdG8gYmUgYSAybmQgbG9ja2ZpbGUgKi8KKwkJICAgIGxvY2tmZCA9IGNyZWF0KGxvY2sy LCAwNDQ0KTsgLyogQ3JlYXRlIGl0ICovCisJCSAgICBkZWJ1ZyhGMTExLCJUVExPQ0sgbG9jazIg Y3JlYXQiLCBsb2NrMiwgbG9ja2ZkKTsKKwkJICAgIGlmIChsb2NrZmQgPiAtMSkgewkvKiBDcmVh dGVkIE9LLCB3cml0ZSBwaWQuICovCisJCQl3cml0ZShsb2NrZmQsIChjaGFyICopJnBpZCwgc2l6 ZW9mKHBpZCkgKTsKKwkJCWNsb3NlKGxvY2tmZCk7CS8qIENsb3NlIGFuZCAqLworCQkJY2htb2Qo bG9jazIsIDA0NDQpOyAvKiBzZXQgcGVybWlzc2lvbnMuICovCisJCSAgICB9IGVsc2UgewkJIC8q IE5vdCBPSywgYnV0IGRvbid0IGZhaWwuICovCisJCQlsb2NrMlswXSA9ICdcMCc7IC8qIEp1c3Qg cmVtZW1iZXIgaXQncyBub3QgdGhlcmUuICovCisJCSAgICB9CisJCX0KKwkJYnJlYWs7CQkJLyog YW5kIHdlJ3JlIGRvbmUuICovCisJICAgIH0KKwl9CisgICAgfQorICAgIHVubGluayh0bXBuYW0p OwkJCS8qIFVubGluayAocmVtb3ZlKSB0aGUgdGVtcCBmaWxlLiAqLworICAgIHByaXZfb2ZmKCk7 CQkJCS8qIFR1cm4gb2ZmIHByaXZzICovCisgICAgaSA9IGhhc2xvY2sgPyAwIDogLTE7CQkvKiBP dXIgcmV0dXJuIHZhbHVlICovCisgICAgZGVidWcoRjEwMSwiVFRMT0NLIHJldHVybnMiLCIiLGkp OworICAgIHJldHVybihpKTsKKyNlbmRpZiAvKiBIUFVYICovCisjZW5kaWYgLyogVVNFVFRZTE9D SyAqLworI2VuZGlmIC8qICFOT1VVQ1AgKi8KK30KKworLyogIFQgVCBVIE4gTCBPIEMgSyAgKi8K Kworc3RhdGljIGludAordHR1bmxjaygpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IFJlbW92ZSBVVUNQIGxvY2tmaWxlKHMpLiAqLworI2lmbmRlZiBOT1VVQ1AKKyAgICBpbnQgeDsK KworICAgIGRlYnVnKEYxMTEsInR0dW5sY2siLGZsZm5hbSxoYXNsb2NrKTsKKworI2lmZGVmIFVT RVRUWUxPQ0sKKworICAgIGlmIChoYXNsb2NrICYmICpmbGZuYW0pIHsKKwlpbnQgeDsKKwlwcml2 X29uKCk7CQkJLyogVHVybiBvbiBwcml2cyAqLworI2lmZGVmIFVTRV9VVV9MT0NLCisJeCA9IHV1 X3VubG9jayhsb2NrbmFtZSk7CisjZWxzZSAgLyogVVNFX1VVX0xPQ0sgKi8KKwl4ID0gdHR5dW5s b2NrKGxvY2tuYW1lKTsJLyogVHJ5IHRvIHVubG9jayAqLworI2VuZGlmIC8qIFVTRV9VVV9MT0NL ICovCisJcHJpdl9vZmYoKTsJCQkvKiBUdXJuIG9mZiBwcml2cyAqLworCWlmICh4IDwgMCAmJiAh cXVpZXQpCisJICBwcmludGYoIldhcm5pbmcgLSBDYW4ndCByZW1vdmUgbG9ja2ZpbGU6ICVzXG4i LCBmbGZuYW0pOworCisJKmZsZm5hbSA9ICdcMCc7CQkJLyogRXJhc2UgdGhlIG5hbWUuICovCisJ aGFzbG9jayA9IDA7CisJcmV0dXJuKDApOworICAgIH0KKworI2Vsc2UgIC8qIE5vIHR0eWxvY2so KS4uLiAqLworCisgICAgaWYgKGhhc2xvY2sgJiYgKmZsZm5hbSkgeworCS8qIERvbid0IHJlbW92 ZSBsb2NrZmlsZSBpZiB3ZSBkaWRuJ3QgbWFrZSBpdCBvdXJzZWx2ZXMgKi8KKwlpZiAoKHggPSB0 dHJwaWQoZmxmbmFtKSkgIT0gKGludClnZXRwaWQoKSkgeworCSAgICBkZWJ1ZyhGMTExLCJ0dHVu bGNrIGxvY2tmaWxlIHNlaXplZCIsZmxmbmFtLHgpOworCSAgICBwcmludGYoIldhcm5pbmcgLSBM b2NrZmlsZSAlcyBzZWl6ZWQgYnkgcGlkICVkXG4iLAorCQkgICBmbGZuYW0sCisJCSAgIHgKKwkJ ICAgKTsKKwkgICAgcmV0dXJuKDApOworCX0KKwlwcml2X29uKCk7CQkJLyogVHVybiBwcml2aWxl Z2VzIG9uLiAgKi8KKwllcnJubyA9IDA7CisJeCA9IHVubGluayhmbGZuYW0pOwkJLyogUmVtb3Zl IHRoZSBsb2NrZmlsZS4gKi8KKwlkZWJ1ZyhGMTExLCJ0dHVubGNrIHVubGluayIsZmxmbmFtLHgp OworCWlmICh4IDwgMCkgeworCSAgICBpZiAoZXJybm8gJiYgIXF1aWV0KQorCSAgICAgIHBlcnJv cih0dG5tc3YpOworCSAgICBwcmludGYoIldhcm5pbmcgLSBDYW4ndCByZW1vdmUgbG9ja2ZpbGU6 ICVzXG4iLCBmbGZuYW0pOworCX0KKwloYXNsb2NrID0gMDsKKwkqZmxmbmFtID0gJ1wwJzsJCQkv KiBFcmFzZSB0aGUgbmFtZS4gKi8KKworI2lmZGVmIFJUQUlYCisJZXJybm8gPSAwOworCXggPSB1 bmxpbmsobGtmbGZuKTsJCS8qIFJlbW92ZSBsaW5rIHRvIGxvY2tmaWxlICovCisJZGVidWcoRjEx MSwidHR1bmxjayBBSVggbGluayB1bmxpbmsiLGxrZmxmbix4KTsKKwlpZiAoeCA8IDApIHsKKwkg ICAgaWYgKGVycm5vICYmICFxdWlldCkKKwkgICAgICBwZXJyb3IodHRubXN2KTsKKwkgICAgcHJp bnRmKCJXYXJuaW5nIC0gQ2FuJ3QgcmVtb3ZlIGxpbmsgdG8gbG9ja2ZpbGU6ICVzXG4iLCBsa2Zs Zm4pOworCX0KKwkqbGtmbGZuID0gJ1wwJzsKKyNlbHNlCisJaWYgKGxvY2syWzBdKSB7CQkJLyog SWYgdGhlcmUgaXMgYSBzZWNvbmQgbG9ja2ZpbGUsICovCisJICAgIGVycm5vID0gMDsKKwkgICAg eCA9IHVubGluayhsb2NrMik7CQkvKiAgcmVtb3ZlIGl0IHRvby4gKi8KKwkgICAgZGVidWcoRjEx MSwidHR1bmxjayBsb2NrMiB1bmxpbmsiLGxvY2syLHgpOworCSAgICBpZiAoeCA8IDApIHsKKwkJ aWYgKGVycm5vICYmICFxdWlldCkKKwkJICBwZXJyb3IodHRubXN2KTsKKwkJcHJpbnRmKCJXYXJu aW5nIC0gQ2FuJ3QgcmVtb3ZlIHNlY29uZGFyeSBsb2NrZmlsZTogJXNcbiIsCisJCSAgICAgICBs b2NrMgorCQkgICAgICAgKTsKKwkgICAgfQorCSAgICBsb2NrMlswXSA9ICdcMCc7CQkvKiBGb3Jn ZXQgaXRzIG5hbWUuICovCisJfQorI2VuZGlmIC8qIFJUQUlYICovCisKKyNpZmRlZiBDT01NRU5U CisjaWZkZWYgTE9DS0YKKyAgICAgICAgKFZPSUQpIGxvY2tmKHR0eWZkLCBGX1VMT0NLLCAwTCk7 IC8qIFJlbW92ZSBhZHZpc29yeSBsb2NrICovCisjZW5kaWYgLyogTE9DS0YgKi8KKyNlbmRpZiAv KiBDT01NRU5UICovCisKKwlwcml2X29mZigpOwkJCS8qIFR1cm4gcHJpdmlsZWdlcyBvZmYuICov CisgICAgfQorI2VuZGlmIC8qIFVTRVRUWUxPQ0sgKi8KKyNlbmRpZiAvKiAhTk9VVUNQICovCisg ICAgcmV0dXJuKDApOworfQorCisvKgorICA0LjNCU0Qtc3R5bGUgVVVDUCBsaW5lIGRpcmVjdGlv biBjb250cm9sLgorICAoU3RhbiBCYXJiZXIsIFJpY2UgVSwgMTk4MC1zb21ldGhpbmcuLi4pCisq LworI2lmbmRlZiBOT1VVQ1AKKyNpZmRlZiBBQ1VDTlRSTAorVk9JRAorYWN1Y250cmwoZmxhZyx0 dG5hbWUpIGNoYXIgKmZsYWcsICp0dG5hbWU7IHsKKyAgICBjaGFyIHhbREVWTkFNTEVOKzMyXSwg KmRldmljZSwgKmRldm5hbWU7CisKKyAgICBpZiAoc3RyY21wKHR0bmFtZSxDVFROQU0pID09IDAg fHwgeGxvY2FsID09IDApIC8qIElmIG5vdCBsb2NhbCwgKi8KKyAgICAgIHJldHVybjsJCQkJLyog anVzdCByZXR1cm4uICovCisgICAgZGV2aWNlID0gKChkZXZuYW1lID0geHhsYXN0KHR0bmFtZSwn LycpKSAhPSBOVUxMID8gZGV2bmFtZSsxIDogdHRuYW1lKTsKKyAgICBpZiAoc3RybmNtcChkZXZp Y2UsIkxDSy4uIiw0KSA9PSAwKSBkZXZpY2UgKz0gNTsKKyAgICBja21ha21zZyh4LERFVk5BTUxF TiszMiwiL3Vzci9saWIvdXVjcC9hY3VjbnRybCAiLGZsYWcsIiAiLGRldmljZSk7CisgICAgZGVi dWcoRjExMCwiY2FsbGVkICIseCwwKTsKKyAgICB6c3lzY21kKHgpOworfQorI2VuZGlmIC8qIEFD VUNOVFJMICovCisjZW5kaWYgLyogTk9VVUNQICovCisKKy8qCisgIFQgVCBIIEYgTCBPIFcgIC0t ICBTZXQgb3IgUmVzZXQgaGFyZHdhcmUgZmxvdyBjb250cm9sLgorCisgIFRoaXMgaXMgYW4gYXR0 ZW1wdCB0byBjb2xsZWN0IGFsbCBoYXJkd2FyZS1mbG93LWNvbnRyb2wgcmVsYXRlZCBjb2RlCisg IGludG8gYSBzaW5nbGUgbW9kdWxlLiAgVGhhbmtzIHRvIFJpY2sgU2xhZGtleSBhbmQgSm9obiBL b2hsIGZvciBsb3RzIG9mCisgIGhlbHAgaGVyZS4gIE92ZXJ2aWV3OgorCisgIEhhcmR3YXJlIGZs b3cgY29udHJvbCBpcyBub3Qgc3VwcG9ydGVkIGluIG1hbnkgVU5JWCBpbXBsZW1lbnRpb25zLiAg RXZlbgorICB3aGVuIGl0IGlzIHN1cHBvcnRlZCwgdGhlcmUgaXMgbm8gKGhhIGhhKSAic3RhbmRh cmQiIGZvciB0aGUgcHJvZ3JhbW1pbmcKKyAgaW50ZXJmYWNlLiAgSW4gZ2VuZXJhbCwgNC4zQlNE IGFuZCBlYXJsaWVyIChzb21ldGltZXMpLCA0LjRCU0QsIFN5c3RlbSBWLAorICBTdW5PUywgQUlY LCBldGMsIGhhdmUgdG90YWxseSBkaWZmZXJlbnQgbWV0aG9kcy4gIChBbmQsIG5vdCBzdHJpY3Rs eQorICByZWxldmFudCBoZXJlLCB0aGUgcHJvZ3JhbW1pbmcgaW50ZXJmYWNlIG9mdGVuIGJyaW5n cyBvbmUgb25seSB0byBhIG5vLW9wCisgIGluIHRoZSBkZXZpY2UgZHJpdmVyISkKKworICBBbW9u ZyBhbGwgdGhlc2UsIHdlIGhhdmUgdHdvIG1ham9yIHR5cGVzIG9mIEFQSXM6IHRob3NlIGluIHdo aWNoIGhhcmR3YXJlCisgIGZsb3cgY29udHJvbCBpcyBkZXRlcm1pbmVkIGJ5IGJpdHMgaW4gdGhl IHNhbWUgdGVybWlvL3Rlcm1pb3Mvc2d0dHkgbW9kZQorICB3b3JkKHMpIHRoYXQgYXJlIHVzZWQg Zm9yIGNvbnRyb2xsaW5nIHN1Y2ggaXRlbXMgYXMgQ0JSRUFLIHZzIFJBVyBtb2RlLCBhbmQKKyAg d2hpY2ggYXJlIGFsc28gdXNlZCBieSB0aGUgdHR2dCgpLCB0dHBrdCgpLCBjb25iaW4oKSwgYW5k IGNvbmNiKCkgcm91dGluZXMKKyAgZm9yIGNoYW5naW5nIHRlcm1pbmFsIG1vZGVzLiAgQW5kIHRo b3NlIHRoYXQgdXNlIGVudGlyZWx5IGRpZmZlcmVudAorICBtZWNoYW5pc21zLgorCisgIEluIHRo ZSBmaXJzdCBjYXRlZ29yeSwgaXQgaXMgaW1wb3J0YW50IHRoYXQgYW55IGNoYW5nZSBpbiB0aGUg bW9kZSBiaXRzIGJlCisgIHJlZmxlY3RlZCBpbiB0aGUgcmVsZXZhbnQgdGVybWlvKHMpL3NndHR5 IHN0cnVjdHVyZSwgc28gdGhhdCBzdWJzZXF1ZW50CisgIGNoYW5nZXMgdG8gdGhhdCBzdHJ1Y3R1 cmUgZG8gbm90IHdpcGUgb3V0IHRoZSBlZmZlY3RzIG9mIHRoaXMgcm91dGluZS4gIFRoYXQKKyAg aXMgd2h5IGEgcG9pbnRlciwgYXR0cnMsIHRvIHRoZSBhcHByb3ByaWF0ZSBzdHJ1Y3R1cmUgaXMg cGFzc2VkIGFzIGEKKyAgcGFyYW1ldGVyIHRvIHRoaXMgcm91dGluZS4KKworICBUaGUgc2Vjb25k IGNhdGVnb3J5IHNob3VsZCBnaXZlIHVzIG5vIHdvcnJpZXMsIHNpbmNlIGFueSBjaGFuZ2VzIHRv IGhhcmR3YXJlCisgIGZsb3cgY29udHJvbCBhY2NvbXBsaXNoZWQgYnkgdGhpcyByb3V0aW5lIHNo b3VsZCBub3QgYWZmZWN0IHRoZSB0ZXJtaW8ocykvCisgIHNndHR5IHN0cnVjdHVyZXMsIGFuZCB0 aGVyZWZvcmUgd2lsbCBub3QgYmUgdW5kb25lIGJ5IGxhdGVyIGNoYW5nZXMgdG8gdGhlbS4KKwor ICBUaGUgc2Vjb25kIGFyZ3VtZW50LCBzdGF0dXMsIG1lYW5zIHRvIHR1cm4gb24gaGFyZHdhcmUg ZmxvdyBjb250cm9sIGlmCisgIG5vbnplcm8sIGFuZCB0byB0dXJuIGl0IG9mZiBpZiB6ZXJvLgor CisgIFJldHVybnM6IDAgb24gYXBwYXJlbnQgc3VjY2VzcywgLTEgb24gcHJvYmFibGUgZmFpbHVy ZS4KKyovCisKKy8qCisgIFRoZSBmb2xsb3dpbmcgYnVzaW5lc3MgaXMgZm9yIEJTREksIHdoZXJl IGl0IHdhcyBkaXNjb3ZlcmVkIHRoYXQgdHdvCisgIHNlcGFyYXRlIGJpdHMsIENDVFNfT0ZMT1cg YW5kIENSVFNfSUZMT1csIGFyZSB1c2VkIGluIGhhcmR3YXJlIGZsb3cgY29udHJvbCwKKyAgYnV0 IENUUlNDVFMgaXMgZGVmaW5lZCAoaW4gPHRlcm1pb3MuaD4pIHRvIGJlIGp1c3QgQ0NUU19PRkxP VyByYXRoZXIgYm90aAorICBiaXRzLCBzbyBod2ZjIG9ubHkgd29ya3MgaW4gb25lIGRpcmVjdGlv biBpZiB5b3UgdXNlIENSVFNDVFMgdG8gY29udHJvbCBpdC4KKyAgT3RoZXIgNC40QlNELWJhc2Vk IFVuaXhlcyBzdWNoIGFzIEZyZWVCU0QgNC4xLCB3aGljaCB1c2UgdGhlc2UgdHdvIGJpdHMsCisg IGRlZmluZSBDUlRTQ1RTIGNvcnJlY3RseS4KKyovCisjaWZkZWYgRklYQ1JUU0NUUworI2lmZGVm IENSVFNDVFMKKyNpZmRlZiBDQ1RTX09GTE9XCisjaWZkZWYgQ1JUU19JRkxPVworI3VuZGVmIENS VFNDVFMKKyNkZWZpbmUgQ1JUU0NUUyAoQ1JUU19JRkxPV3xDQ1RTX09GTE9XKQorI2VuZGlmIC8q IENSVFNfSUZMT1cgKi8KKyNlbmRpZiAvKiBDQ1RTX09GTE9XICovCisjZW5kaWYgLyogQ1JUU0NU UyAqLworI2VuZGlmIC8qIEZJWENSVFNDVFMgKi8KKworc3RhdGljIGludAordHRoZmxvdyhmbG93 LCBzdGF0dXMsIGF0dHJzKQorICAgIGludCBmbG93LAkJCQkvKiBUeXBlIG9mIGZsb3cgY29udHJv bCAoY2tjZGViLmgpICovCisgICAgc3RhdHVzOwkJCQkvKiBOb256ZXJvID0gdHVybiBpdCBvbiAq LworCQkJCQkvKiBaZXJvID0gdHVybiBpdCBvZmYgKi8KKyNpZmRlZiBCU0Q0NE9SUE9TSVgJCQkv KiBQT1NJWCBvciBCU0Q0NCAqLworICAgIHN0cnVjdCB0ZXJtaW9zICphdHRyczsKKyNlbHNlCQkJ CQkvKiBTeXN0ZW0gViAqLworI2lmZGVmIEFUVFNWCisjaWZkZWYgQVRUNzMwMAorI2lmZGVmIFVO SVgzNTFNCisvKiBBVCZUIFVOSVggMy41MW0gY2FuIHNldCBidXQgbm90IHRlc3QgZm9yIGhhcmR3 YXJlIGZsb3cgY29udHJvbCAqLworI2RlZmluZSBSVFNGTE9XIENUU0NECisjZGVmaW5lIENUU0ZM T1cgQ1RTQ0QKKyNlbmRpZiAvKiBBVFQ3MzAwICovCisjZW5kaWYgLyogVU5JWDM1MU0gKi8KKyAg ICBzdHJ1Y3QgdGVybWlvICphdHRyczsKKyNlbHNlCQkJCQkvKiBCU0QsIFY3LCBldGMgKi8KKyAg ICBzdHJ1Y3Qgc2d0dHliICphdHRyczsJCS8qIHNndHR5IGluZm8uLi4gKi8KKyNlbmRpZiAvKiBB VFRTViAqLworI2VuZGlmIC8qIEJTRDQ0T1JQT1NJWCAqLworLyogdHRoZmxvdyAqLyB7CisKKyAg ICBpbnQgeCA9IDA7CQkJCS8qIHR0aGZsb3coKSByZXR1cm4gY29kZSAqLworCisjaWZkZWYgUGxh bjkKKyAgICByZXR1cm4gcDl0dGhmbG93KGZsb3csIHN0YXR1cyk7CisjZWxzZQorCisjaWZuZGVm IE9YT1MJCQkJLyogTk9UIE9saXZldHRpIFgvT1MuLi4gKi8KKy8qCisgIEZvciBTdW5PUyA0LjAg YW5kIGxhdGVyIGluIHRoZSBCU0QgZW52aXJvbm1lbnQgLi4uCisKKyAgVGhlIGRlY2xhcmF0aW9u cyBhcmUgY29waWVkIGFuZCBpbnRlcnByZXRlZCBmcm9tIHRoZSBTeXN0ZW0gViBoZWFkZXIgZmls ZXMsCisgIHNvIHdlIGRvbid0IGFjdHVhbGx5IGhhdmUgdG8gcHVsbCBpbiBhbGwgdGhlIFN5c3Rl bSBWIGp1bmsgd2hlbiBidWlsZGluZworICBDLUtlcm1pdCBmb3IgU3VuT1MgaW4gdGhlIEJTRCBl bnZpcm9ubWVudCwgd2hpY2ggd291bGQgYmUgZGFuZ2Vyb3VzIGJlY2F1c2UKKyAgaGF2aW5nIHRo b3NlIHN5bWJvbHMgZGVmaW5lZCB3b3VsZCBjYXVzZSB1cyB0byB0YWtlIHRoZSB3cm9uZyBwYXRo cyB0aHJvdWdoCisgIHRoZSBjb2RlLiAgVGhlIGNvZGUgaW4gdGhpcyBzZWN0aW9uIGlzIHVzZWQg aW4gYm90aCB0aGUgQlNEIGFuZCBTeXMgViBTdW5PUworICB2ZXJzaW9ucy4KKyovCisjaWZkZWYg U1VOT1M0MQorLyoKKyAgSW4gU3VuT1MgNC4xIGFuZCBsYXRlciwgd2UgdXNlIHRoZSBQT1NJWCBj YWxscyByYXRoZXIgdGhhbiBpb2N0bCBjYWxscworICBiZWNhdXNlIEdOVSBDQyB1c2VzIGRpZmZl cmVudCBmb3JtYXRzIGZvciB0aGUgX0lPeHh4IG1hY3JvcyB0aGFuIHJlZ3VsYXIgQ0M7CisgIHRo ZSBQT1NJWCBmb3JtcyB3b3JrIGZvciBib3RoLiAgQnV0IHRoZSBQT1NJWCBjYWxscyBhcmUgbm90 IGF2YWlsYWJsZSBpbgorICBTdW5PUyA0LjAuCisqLworI2RlZmluZSBDUlRTQ1RTIDB4ODAwMDAw MDAJCS8qIFJUUy9DVFMgZmxvdyBjb250cm9sICovCisjZGVmaW5lIFRDU0FOT1cgMAkJCS8qIERv IGl0IG5vdyAqLworCisgICAgc3RydWN0IHRlcm1pb3MgeworCXVuc2lnbmVkIGxvbmcgY19pZmxh ZzsJCS8qIElucHV0IG1vZGVzICovCisJdW5zaWduZWQgbG9uZyBjX29mbGFnOwkJLyogT3V0cHV0 IG1vZGVzICovCisJdW5zaWduZWQgbG9uZyBjX2NmbGFnOwkJLyogQ29udHJvbCBtb2RlcyAqLwor CXVuc2lnbmVkIGxvbmcgY19sZmxhZzsJCS8qIExpbmUgZGlzY2lwbGluZSBtb2RlcyAqLworCWNo YXIgY19saW5lOworCUNIQVIgY19jY1sxN107CisgICAgfTsKKyAgICBzdHJ1Y3QgdGVybWlvcyB0 ZW1wOworCitfUFJPVE9UWVAoIGludCB0Y2dldGF0dHIsIChpbnQsIHN0cnVjdCB0ZXJtaW9zICop ICk7CitfUFJPVE9UWVAoIGludCB0Y3NldGF0dHIsIChpbnQsIGludCwgc3RydWN0IHRlcm1pb3Mg KikgKTsKKy8qCisgIFdoZW4gQ1JUU0NUUyBpcyBzZXQsIFN1bk9TIHdvbid0IGRvIG91dHB1dCB1 bmxlc3MgYm90aCBDVFMgYW5kIENEIGFyZQorICBhc3NlcnRlZC4gIFNvIHdlIGRvbid0IHNldCBD UlRTQ1RTIHVubGVzcyBDRCBpcyB1cC4gIFRoaXMgc2hvdWxkIGJlIE9LLAorICBzaW5jZSB3ZSBk b24ndCBuZWVkIFJUUy9DVFMgZHVyaW5nIGRpYWxpbmcsIGFuZCBhZnRlciBkaWFsaW5nIGlzIGNv bXBsZXRlLAorICB3ZSBzaG91bGQgaGF2ZSBDRC4gIElmIG5vdCwgd2Ugc3RpbGwgY29tbXVuaWNh dGUsIGJ1dCB3aXRob3V0IFJUUy9DVFMuCisqLworICAgIGludCBtZmxhZ3M7CQkJCS8qIE1vZGVt IHNpZ25hbCBmbGFncyAqLworCisjaWZkZWYgTkVUQ01ECisgICAgaWYgKHR0cGlwZSkgcmV0dXJu KDApOworI2VuZGlmIC8qIE5FVENNRCAqLworI2lmZGVmIE5FVFBUWQorICAgIGlmICh0dHB0eSkg cmV0dXJuKDApOworI2VuZGlmIC8qIE5FVFBUWSAqLworCisgICAgZGVidWcoRjEwMSwidHRoZmxv dyBTVU5PUzQxIGVudHJ5IHN0YXR1cyIsIiIsc3RhdHVzKTsKKyAgICBpZiAoIXN0YXR1cykgewkJ CS8qIFR1cm4gaGFyZCBmbG93IG9mZiAqLworCWlmICh0Y2dldGF0dHIodHR5ZmQsICZ0ZW1wKSA+ IC0xICYmIC8qIEdldCBkZXZpY2UgYXR0cmlidXRlcyAqLworCSAgICAodGVtcC5jX2NmbGFnICYg Q1JUU0NUUykpIHsgLyogQ2hlY2sgZm9yIFJUUy9DVFMgKi8KKwkgICAgdGVtcC5jX2NmbGFnICY9 IH5DUlRTQ1RTOwkvKiBJdCdzIHRoZXJlLCByZW1vdmUgaXQgKi8KKwkgICAgeCA9IHRjc2V0YXR0 cih0dHlmZCxUQ1NBTk9XLCZ0ZW1wKTsKKwl9CisgICAgfSBlbHNlIHsJCQkJLyogVHVybiBoYXJk IGZsb3cgb24gKi8KKwlpZiAoaW9jdGwodHR5ZmQsVElPQ01HRVQsJm1mbGFncykgPiAtMSAmJiAv KiBHZXQgbW9kZW0gc2lnbmFscyAqLworCSAgICAobWZsYWdzICYgVElPQ01fQ0FSKSkgewkJLyog Q2hlY2sgZm9yIENEICovCisJICAgIGRlYnVnKEYxMDAsInR0aGZsb3cgU3VuT1MgaGFzIENEIiwi IiwwKTsKKwkgICAgaWYgKHRjZ2V0YXR0cih0dHlmZCwgJnRlbXApID4gLTEgJiYgLyogR2V0IGRl dmljZSBhdHRyaWJ1dGVzICovCisJCSEodGVtcC5jX2NmbGFnICYgQ1JUU0NUUykpIHsgLyogQ2hl Y2sgZm9yIFJUUy9DVFMgKi8KKwkJdGVtcC5jX2NmbGFnIHw9IENSVFNDVFM7CS8qIE5vdCB0aGVy ZSwgYWRkIGl0ICovCisJCXggPSB0Y3NldGF0dHIodHR5ZmQsVENTQU5PVywmdGVtcCk7CisJICAg IH0KKwl9IGVsc2UgeworCSAgICB4ID0gLTE7CisJICAgIGRlYnVnKEYxMDAsInR0aGZsb3cgU3Vu T1Mgbm8gQ0QiLCIiLDApOworCX0KKyAgICB9CisjZWxzZQorI2lmZGVmIFFOWAorICAgIHN0cnVj dCB0ZXJtaW9zIHRlbXA7CisjaWZkZWYgTkVUQ01ECisgICAgaWYgKHR0cGlwZSkgcmV0dXJuKDAp OworI2VuZGlmIC8qIE5FVENNRCAqLworI2lmZGVmIE5FVFBUWQorICAgIGlmICh0dHB0eSkgcmV0 dXJuKDApOworI2VuZGlmIC8qIE5FVFBUWSAqLworICAgIGRlYnVnKEYxMDEsInR0aGZsb3cgUU5Y IGVudHJ5IHN0YXR1cyIsIiIsc3RhdHVzKTsKKyAgICBpZiAodGNnZXRhdHRyKHR0eWZkLCAmdGVt cCkgPiAtMSkgewkvKiBHZXQgZGV2aWNlIGF0dHJpYnV0ZXMgKi8KKwlpZiAoIXN0YXR1cykgewkJ CS8qIFR1cm4gaGFyZCBmbG93IG9mZiAqLworCSAgICBpZiAoKHRlbXAuY19jZmxhZyAmIChJSEZM T1d8T0hGTE9XKSkgPT0gKElIRkxPV3xPSEZMT1cpKSB7CisJCXRlbXAuY19jZmxhZyAmPSB+KElI RkxPV3xPSEZMT1cpOyAvKiBJdCdzIHRoZXJlLCByZW1vdmUgaXQgKi8KKwkJYXR0cnMtPmNfY2Zs YWcgJj0gfihJSEZMT1d8T0hGTE9XKTsKKwkJeCA9IHRjc2V0YXR0cih0dHlmZCxUQ1NBTk9XLCZ0 ZW1wKTsKKwkgICAgfQorCX0gZWxzZSB7CQkJLyogVHVybiBoYXJkIGZsb3cgb24gKi8KKwkgICAg aWYgKCh0ZW1wLmNfY2ZsYWcgJiAoSUhGTE9XfE9IRkxPVykpICE9IChJSEZMT1d8T0hGTE9XKSkg eworCQl0ZW1wLmNfY2ZsYWcgfD0gKElIRkxPV3xPSEZMT1cpOyAvKiBOb3QgdGhlcmUsIGFkZCBp dCAqLworCQl0ZW1wLmNfaWZsYWcgJj0gfihJWE9OfElYT0ZGKTsgICAvKiBCeWUgdG8gSVhPTi9J WE9GRiAqLworCQl0dHJhdy5jX2xmbGFnIHw9IElFWFRFTjsgICAgICAgICAvKiBNdXN0IGJlIG9u ICovCisJCXggPSB0Y3NldGF0dHIodHR5ZmQsVENTQU5PVywmdGVtcCk7CisJCWF0dHJzLT5jX2Nm bGFnIHw9IChJSEZMT1d8T0hGTE9XKTsKKwkJYXR0cnMtPmNfaWZsYWcgJj0gfihJWE9OfElYT0ZG KTsKKwkgICAgfQorCX0KKyAgICB9IGVsc2UgeworCXggPSAtMTsKKwlkZWJ1ZyhGMTAwLCAidHRo ZmxvdyBRTlggZ2V0YXR0ciBmYWlscyIsICIiLCAwKTsKKyAgICB9CisjZWxzZQorI2lmZGVmIFBP U0lYX0NSVFNDVFMKKy8qCisgIFBPU0lYX0NSVFNDVFMgaXMgZGVmaW5lZCBpbiBja2NkZWIuaCBv ciBvbiBDQyBjb21tYW5kIGxpbmUuCisgIE5vdGU6IERvIG5vdCBhc3N1bWUgQ1JUU0NUUyBpcyBh IG9uZS1iaXQgZmllbGQhCisqLworICAgIHN0cnVjdCB0ZXJtaW9zIHRlbXA7CisjaWZkZWYgTkVU Q01ECisgICAgaWYgKHR0cGlwZSkgcmV0dXJuKDApOworI2VuZGlmIC8qIE5FVENNRCAqLworI2lm ZGVmIE5FVFBUWQorICAgIGlmICh0dHB0eSkgcmV0dXJuKDApOworI2VuZGlmIC8qIE5FVFBUWSAq LworICAgIGRlYnVnKEYxMDEsInR0aGZsb3cgUE9TSVhfQ1JUU0NUUyBlbnRyeSBzdGF0dXMiLCIi LHN0YXR1cyk7CisgICAgZXJybm8gPSAwOworICAgIHggPSB0Y2dldGF0dHIodHR5ZmQsICZ0ZW1w KTsKKyAgICBkZWJ1ZyhGMTExLCJ0dGhmbG93IFBPU0lYX0NSVFNDVFMgdGNnZXRhdHRyIixja2l0 b2EoeCksZXJybm8pOworICAgIGVycm5vID0gMDsKKyAgICBpZiAoeCA8IDApIHsKKwl4ID0gLTE7 CisgICAgfSBlbHNlIHsKKwlpZiAoIXN0YXR1cykgewkJCS8qIFR1cm4gaGFyZCBmbG93IG9mZiAq LworCSAgICBpZiAoCisjaWZkZWYgQ09NTUVOVAorCQkvKiBUaGlzIGNhbiBmYWlsIGJlY2F1c2Ug b2Ygc2lnbiBleHRlbnNpb24gKi8KKwkJLyogZS5nLiBpbiBMaW51eCB3aGVyZSBpdCdzIEJpdCAz MSAqLworCQkodGVtcC5jX2NmbGFnICYgQ1JUU0NUUykgPT0gQ1JUU0NUUworI2Vsc2UKKwkJKHRl bXAuY19jZmxhZyAmIENSVFNDVFMpICE9IDAKKyNlbmRpZiAvKiBDT01NRU5UICovCisJCSkgewor CQl0ZW1wLmNfY2ZsYWcgJj0gfkNSVFNDVFM7IC8qIEl0J3MgdGhlcmUsIHJlbW92ZSBpdCAqLwor CQlhdHRycy0+Y19jZmxhZyAmPSB+Q1JUU0NUUzsKKwkJeCA9IHRjc2V0YXR0cih0dHlmZCxUQ1NB Tk9XLCZ0ZW1wKTsKKwkJZGVidWcoRjExMSwidHRoZmxvdyBQT1NJWF9DUlRTQ1RTIE9GRiB0Y3Nl dGF0dHIiLAorCQkgICAgICBja2l0b2EoeCksZXJybm8pOworCSAgICB9IGVsc2UgewkJCS8qIEpv aG4gRHVubGFwIDIwMTAtMDEtMjYgKi8KKwkJZGVidWcoRjAwMSwKKwkJICAgICAgInR0aGZsb3cg YmVmb3JlIGZvcmNpbmcgb2ZmIGF0dHJzIENSVFNDVFMiLAorCQkgICAgICAiIiwKKwkJICAgICAg YXR0cnMtPmNfY2ZsYWcmQ1JUU0NUUworCQkgICAgICApOworCQlhdHRycy0+Y19jZmxhZyAmPSB+ Q1JUU0NUUzsgLyogZm9yY2UgaXQgb2ZmIGlmICFzdGF0dXMgKi8KKwkJZGVidWcoRjAwMSwKKwkJ ICAgICAgInR0aGZsb3cgYWZ0ZXIgZm9yY2luZyBvZmYgYXR0cnMgQ1JUU0NUUyIsCisJCSAgICAg ICIiLAorCQkgICAgICBhdHRycy0+Y19jZmxhZyZDUlRTQ1RTCisJCSAgICAgICk7CisJCX0KKwl9 IGVsc2UgewkJCS8qIFR1cm4gaGFyZCBmbG93IG9uICovCisJICAgIGlmICgKKyNpZmRlZiBDT01N RU5UCisJCS8qIFRoaXMgY2FuIGZhaWwgYmVjYXVzZSBvZiBzaWduIGV4dGVuc2lvbiAqLworCQko dGVtcC5jX2NmbGFnICYgQ1JUU0NUUykgIT0gQ1JUU0NUUworI2Vsc2UKKwkJKHRlbXAuY19jZmxh ZyAmIENSVFNDVFMpID09IDAKKyNlbmRpZiAvKiBDT01NRU5UICovCisJCSkgeworCQl0ZW1wLmNf Y2ZsYWcgfD0gQ1JUU0NUUzsgLyogTm90IHRoZXJlLCBhZGQgaXQgKi8KKwkJdGVtcC5jX2lmbGFn ICY9IH4oSVhPTnxJWE9GRnxJWEFOWSk7IC8qIEJ5ZSB0byBJWE9OL0lYT0ZGICovCisJCXggPSB0 Y3NldGF0dHIodHR5ZmQsVENTQU5PVywmdGVtcCk7CisJCWRlYnVnKEYxMTEsInR0aGZsb3cgUE9T SVhfQ1JUU0NUUyBPTiB0Y3NldGF0dHIiLAorCQkgICAgICBja2l0b2EoeCksZXJybm8pOworCQlh dHRycy0+Y19jZmxhZyB8PSBDUlRTQ1RTOworCQlhdHRycy0+Y19pZmxhZyAmPSB+KElYT058SVhP RkZ8SVhBTlkpOworCSAgICB9CisJfQorICAgIH0KKyNlbHNlCisjaWZkZWYgU1VOT1M0CisvKgor ICBTdW5PUyA0LjAgKGFuZCBtYXliZSBlYXJsaWVyPykuICBUaGlzIGNvZGUgaXMgZGFuZ2Vyb3Vz IGJlY2F1c2UgaXQKKyAgcHJldmVudHMgY29tcGlsYXRpb24gd2l0aCBHTlUgZ2NjLCB3aGljaCB1 c2VzIGRpZmZlcmVudCBmb3JtYXRzIGZvciB0aGUKKyAgX0lPUnh4eCBtYWNyb3MgdGhhbiByZWd1 bGFyIGNjLiAgU3VuT1MgNC4xIGFuZCBsYXRlciBjYW4gdXNlIHRoZSBQT1NJWAorICByb3V0aW5l cyBhYm92ZSwgd2hpY2ggd29yayBmb3IgYm90aCBjYyBhbmQgZ2NjLgorKi8KKyNkZWZpbmUgVENH RVRTIF9JT1IoVCwgOCwgc3RydWN0IHRlcm1pb3MpIC8qIEdldCBtb2RlcyBpbnRvIHRlcm1pb3Mg c3RydWN0ICovCisjZGVmaW5lIFRDU0VUUyBfSU9XKFQsIDksIHN0cnVjdCB0ZXJtaW9zKSAvKiBT ZXQgbW9kZXMgZnJvbSB0ZXJtaW9zIHN0cnVjdCAqLworI2RlZmluZSBDUlRTQ1RTIDB4ODAwMDAw MDAJCSAgLyogUlRTL0NUUyBmbG93IGNvbnRyb2wgKi8KKworICAgIHN0cnVjdCB0ZXJtaW9zIHsK Kwl1bnNpZ25lZCBsb25nIGNfaWZsYWc7CQkvKiBJbnB1dCBtb2RlcyAqLworCXVuc2lnbmVkIGxv bmcgY19vZmxhZzsJCS8qIE91dHB1dCBtb2RlcyAqLworCXVuc2lnbmVkIGxvbmcgY19jZmxhZzsJ CS8qIENvbnRyb2wgbW9kZXMgKi8KKwl1bnNpZ25lZCBsb25nIGNfbGZsYWc7CQkvKiBMaW5lIGRp c2NpcGxpbmUgbW9kZXMgKi8KKwljaGFyIGNfbGluZTsKKwlDSEFSIGNfY2NbMTddOworICAgIH07 CisgICAgc3RydWN0IHRlcm1pb3MgdGVtcDsKKyNpZmRlZiBORVRDTUQKKyAgICBpZiAodHRwaXBl KSByZXR1cm4oMCk7CisjZW5kaWYgLyogTkVUQ01EICovCisjaWZkZWYgTkVUUFRZCisgICAgaWYg KHR0cHR5KSByZXR1cm4oMCk7CisjZW5kaWYgLyogTkVUUFRZICovCisgICAgZGVidWcoRjEwMSwi dHRoZmxvdyBlbnRyeSBzdGF0dXMiLCIiLHN0YXR1cyk7CisgICAgaWYgKGlvY3RsKHR0eWZkLFRD R0VUUywmdGVtcCkgPiAtMSkgeyAvKiBHZXQgdGVybWluYWwgbW9kZXMuICovCisJaWYgKHN0YXR1 cykgewkJCS8qIFR1cm4gaGFyZCBmbG93IG9uICovCisJICAgIHRlbXAuY19jZmxhZyB8PSBDUlRT Q1RTOwkvKiBBZGQgUlRTL0NUUyB0byB0aGVtLiAqLworCSAgICB4ID0gaW9jdGwodHR5ZmQsVENT RVRTLCZ0ZW1wKTsgLyogU2V0IHRoZW0gYWdhaW4uICovCisJICAgIGF0dHJzLT5jX2NmbGFnIHw9 IENSVFNDVFM7CS8qIEFkZCB0byBnbG9iYWwgaW5mby4gKi8KKwl9IGVsc2UgewkJCS8qIFR1cm4g aGFyZCBmbG93IG9mZiAqLworCSAgICB0ZW1wLmNfY2ZsYWcgJj0gfkNSVFNDVFM7CisJICAgIHgg PSBpb2N0bCh0dHlmZCxUQ1NFVFMsJnRlbXApOworCSAgICBhdHRycy0+Y19jZmxhZyAmPSB+Q1JU U0NUUzsKKwl9CisgICAgfQorI2Vsc2UJCQkJCS8qIE5vdCBTdW5PUyA0LjAgb3IgbGF0ZXIgKi8K KyNpZmRlZiBBSVhSUwkJCQkvKiBJQk0gQUlYIFJTLzYwMDAgKi8KKyNpZm5kZWYgQUlYNDEJCQkJ LyogQnV0IG9ubHkgcHJlLTQueCA9PSBTVlI0ICovCisjaWZkZWYgTkVUQ01ECisgICAgaWYgKHR0 cGlwZSkgcmV0dXJuKDApOworI2VuZGlmIC8qIE5FVENNRCAqLworI2lmZGVmIE5FVFBUWQorICAg IGlmICh0dHB0eSkgcmV0dXJuKDApOworI2VuZGlmIC8qIE5FVFBUWSAqLworICAgIGlmIChzdGF0 dXMpIHsKKwlpZiAoKHggPSBpb2N0bCh0dHlmZCwgVFhBRERDRCwgInJ0cyIpKSA8IDAgJiYgZXJy bm8gIT0gRUJVU1kpCisJICBkZWJ1ZyhGMTAwLCJoYXJkZmxvdyBUWEFERENEIChydHMpIGVycm9y IiwgIiIsIDApOworICAgIH0gZWxzZSB7CisJaWYgKCh4ID0gaW9jdGwodHR5ZmQsIFRYREVMQ0Qs ICJydHMiKSkgPCAwICYmIGVycm5vICE9IEVJTlZBTCkKKwkgIGRlYnVnKEYxMDAsImhhcmRmbG93 IFRYREVMQ0QgKHJ0cykgZXJyb3IiLCAiIiwgMCk7CisgICAgfQorI2VuZGlmIC8qIEFJWDQxICov CisjZWxzZQkJCQkJLyogTm90IEFJWCBSUy82MDAwICovCisKKyNpZmRlZiBBVFRTVgkJCQkvKiBT eXN0ZW0gVi4uLiAqLworCisjaWZkZWYgQ0tfU0NPVjUJCQkJLyogU0NPIE9wZW4gU2VydmVyIDUu MCAqLworI2RlZmluZSBDS19TQ09VTklYCisjZWxzZQorI2lmZGVmIE1fVU5JWAkJCQkvKiBTQ08g VU5JWCAzLjJ2NC54IG9yIGVhcmxpZXIgKi8KKyNkZWZpbmUgQ0tfU0NPVU5JWAorI2VuZGlmIC8q IE1fVU5JWCAqLworI2VuZGlmIC8qIENLX1NDT1Y1ICovCisKKyNpZmRlZiBTQ09fRk9SQ0VfUlRT WE9GRgorI2lmZGVmIENLX1NDT1VOSVgJCQkvKiBCdXQgbm90IFNDTyBPcGVuU2VydmVyIDUuMC40 ICovCisjaWZkZWYgU0NPX09TUjUwNAkJCS8qIG9yIGxhdGVyLi4uICovCisjdW5kZWYgQ0tfU0NP VU5JWAorI2VuZGlmIC8qIFNDT19PU1I1MDQgKi8KKyNlbmRpZiAvKiBDS19TQ09VTklYICovCisj ZW5kaWYgLyogU0NPX0ZPUkNFX1JUU1hPRkYgKi8KKworI2lmZGVmIENLX1NDT1VOSVgKKyNpZmRl ZiBQT1NJWAorICAgIHN0cnVjdCB0ZXJtaW9zIHRlbXA7CisjaWZkZWYgTkVUQ01ECisgICAgaWYg KHR0cGlwZSkgcmV0dXJuKDApOworI2VuZGlmIC8qIE5FVENNRCAqLworI2lmZGVmIE5FVFBUWQor ICAgIGlmICh0dHB0eSkgcmV0dXJuKDApOworI2VuZGlmIC8qIE5FVFBUWSAqLworICAgIGRlYnVn KEYxMDEsInR0aGZsb3cgU0NPVU5JWCBQT1NJWCBlbnRyeSBzdGF0dXMiLCIiLHN0YXR1cyk7Cisg ICAgZXJybm8gPSAwOworICAgIHggPSB0Y2dldGF0dHIodHR5ZmQsICZ0ZW1wKTsKKyAgICBkZWJ1 ZyhGMTExLCJ0dGhmbG93IFNDTyBVTklYIFBPU0lYIHRjZ2V0YXR0ciIsY2tpdG9hKHgpLGVycm5v KTsKKyNlbHNlIC8qIFBPU0lYICovCisgICAgc3RydWN0IHRlcm1pbyB0ZW1wOworI2lmZGVmIE5F VENNRAorICAgIGlmICh0dHBpcGUpIHJldHVybigwKTsKKyNlbmRpZiAvKiBORVRDTUQgKi8KKyNp ZmRlZiBORVRQVFkKKyAgICBpZiAodHRwdHkpIHJldHVybigwKTsKKyNlbmRpZiAvKiBORVRQVFkg Ki8KKyAgICBkZWJ1ZyhGMTAxLCJ0dGhmbG93IFNDT1VOSVggbm9uLVBPU0lYIGVudHJ5IHN0YXR1 cyIsIiIsc3RhdHVzKTsKKyAgICB4ID0gaW9jdGwodHR5ZmQsIFRDR0VUQSwgJnRlbXApOworICAg IGRlYnVnKEYxMTEsInR0aGZsb3cgU0NPIFVOSVggbm9uLVBPU0lYIFRDR0VUQSIsY2tpdG9hKHgp LGVycm5vKTsKKyNlbmRpZiAvKiBQT1NJWCAqLworLyoKKyAgVGhpcyBpcyBub3QgcmVhbGx5IFBP U0lYLCBzaW5jZSBQT1NJWCBkb2VzIG5vdCBkZWFsIHdpdGggaGFyZHdhcmUgZmxvdworICBjb250 cm9sLCBidXQgd2UgYXJlIHVzaW5nIHRoZSBQT1NJWCBBUElzLiAgSW4gZmFjdCwgUlRTRkxPVyBh bmQgQ1RTRkxPVworICBhcmUgZGVmaW5lZCBpbiB0ZXJtaW8uaCwgYnV0IHdpdGhpbiAjaWZuZGVm IF9QT1NJWF9TT1VSQ0UuLiNlbmRpZi4gIFNvCisgIGxldCdzIHRyeSBmb3JjaW5nIHRoZWlyIGRl ZmluaXRpb25zIGhlcmUuCisqLworI2lmbmRlZiBDVFNGTE9XCisjZGVmaW5lIENUU0ZMT1cgMDAy MDAwMAorICAgIGRlYnVnKEYxMDEsInR0aGZsb3cgU0NPIGRlZmluaW5nIENUU0ZMT1ciLCIiLENU U0ZMT1cpOworI2Vsc2UKKyAgICBkZWJ1ZyhGMTAxLCJ0dGhmbG93IFNDTyBDVFNGTE9XIiwiIixD VFNGTE9XKTsKKyNlbmRpZiAvKiBDVFNGTE9XICovCisjaWZuZGVmIFJUU0ZMT1cKKyNkZWZpbmUg UlRTRkxPVyAwMDQwMDAwCisgICAgZGVidWcoRjEwMSwidHRoZmxvdyBTQ08gZGVmaW5pbmcgUlRT RkxPVyIsIiIsUlRTRkxPVyk7CisjZWxzZQorICAgIGRlYnVnKEYxMDEsInR0aGZsb3cgU0NPIFJU U0ZMT1ciLCIiLFJUU0ZMT1cpOworI2VuZGlmIC8qIFJUU0ZMT1cgKi8KKyNpZm5kZWYgT1JUU0ZM CisjZGVmaW5lIE9SVFNGTCAwMTAwMDAwCisgICAgZGVidWcoRjEwMSwidHRoZmxvdyBTQ08gZGVm aW5pbmcgT1JUU0ZMIiwiIixPUlRTRkwpOworI2Vsc2UKKyAgICBkZWJ1ZyhGMTAxLCJ0dGhmbG93 IFNDTyBPUlRTRkwiLCIiLE9SVFNGTCk7CisjZW5kaWYgLyogT1JUU0ZMICovCisKKyAgICBpZiAo eCAhPSAtMSkgeworCWlmIChzdGF0dXMpIHsJCQkvKiBUdXJuIGl0IE9OICovCisJICAgIHRlbXAu Y19jZmxhZyB8PSBSVFNGTE9XfENUU0ZMT1c7CisJICAgIGF0dHJzLT5jX2NmbGFnIHw9IFJUU0ZM T1d8Q1RTRkxPVzsKKyNpZmRlZiBPUlRTRkwKKwkgICAgdGVtcC5jX2NmbGFnICY9IH5PUlRTRkw7 CisJICAgIGF0dHJzLT5jX2NmbGFnICY9IH5PUlRTRkw7CisjZW5kaWYgLyogT1JUU0ZMICovCisJ ICAgIHRlbXAuY19pZmxhZyAmPSB+KElYT058SVhPRkZ8SVhBTlkpOworCSAgICBhdHRycy0+Y19p ZmxhZyAmPSB+KElYT058SVhPRkZ8SVhBTlkpOworCX0gZWxzZSB7CQkJLyogVHVybiBpdCBPRkYg Ki8KKyNpZmRlZiBPUlRTRkwKKwkgICAgdGVtcC5jX2NmbGFnICY9IH4oUlRTRkxPV3xDVFNGTE9X fE9SVFNGTCk7CisJICAgIGF0dHJzLT5jX2NmbGFnICY9IH4oUlRTRkxPV3xDVFNGTE9XfE9SVFNG TCk7CisjZWxzZSAgLyogT1JUU0ZMICovCisJICAgIHRlbXAuY19jZmxhZyAmPSB+KFJUU0ZMT1d8 Q1RTRkxPVyk7CisJICAgIGF0dHJzLT5jX2NmbGFnICY9IH4oUlRTRkxPV3xDVFNGTE9XKTsKKyNl bmRpZiAvKiBPUlRTRkwgKi8KKwl9CisjaWZkZWYgUE9TSVgKKwl4ID0gdGNzZXRhdHRyKHR0eWZk LCBUQ1NBRFJBSU4sICZ0ZW1wKTsKKyNlbHNlCisJeCA9IGlvY3RsKHR0eWZkLCBUQ1NFVEEsICZ0 ZW1wKTsKKyNlbmRpZiAvKiBQT1NJWCAqLworCWRlYnVnKEYxMDEsInR0aGZsb3cgU0NPIHNldCBt b2RlcyIsIiIseCk7CisgICAgfQorI2Vsc2UgLyogTm90IFNDTyBVTklYICovCisjaWZkZWYgTkVU Q01ECisgICAgaWYgKHR0cGlwZSkgcmV0dXJuKDApOworI2VuZGlmIC8qIE5FVENNRCAqLworI2lm ZGVmIE5FVFBUWQorICAgIGlmICh0dHB0eSkgcmV0dXJuKDApOworI2VuZGlmIC8qIE5FVFBUWSAq LworICAgIGlmICghc3RhdHVzKSB7CQkJLyogVHVybiBpdCBPRkYgKi8KKyNpZmRlZiBSVFNYT0ZG CisJZGVidWcoRjEwMCwidHRoZmxvdyBBVFRTViBSVFMvQ1RTIE9GRiIsIiIsMCk7CisJcmN0c3gu eF9oZmxhZyAmPSB+KFJUU1hPRkZ8Q1RTWE9OKTsKKyNpZmRlZiBUQ1NFVFgKKwl4ID0gaW9jdGwo dHR5ZmQsVENTRVRYLCZyY3RzeCk7CisJZGVidWcoRjEwMSwidHRoZmxvdyBBVFRTViBUQ1NFVFgg T0ZGIiwiIix4KTsKKyNlbHNlCisJeCA9IC0xCisJZGVidWcoRjEwMCwidHRoZmxvdyBUQ1NFVFgg bm90IGRlZmluZWQiLCIiLDApOworI2VuZGlmIC8qIFRDU0VUWCAqLworI2Vsc2UKKwlkZWJ1ZyhG MTAwLCJ0dGhmbG93IEFUVFNWIFJUU1hPRkYgbm90IGRlZmluZWQiLCIiLDApOworI2VuZGlmIC8q IFJUU1hPRkYgKi8KKyNpZmRlZiBEVFJYT0ZGCisJZGVidWcoRjEwMCwidHRoZmxvdyBBVFRTViBE VFIvQ0QgT0ZGIiwiIiwwKTsKKwlyY3RzeC54X2hmbGFnICY9IH4oRFRSWE9GRnxDRFhPTik7CisJ eCA9IGlvY3RsKHR0eWZkLFRDU0VUWCwmcmN0c3gpOworCWRlYnVnKEYxMDEsInR0aGZsb3cgQVRU U1YgRFRSWE9GRiBPRkYiLCIiLHgpOworI2Vsc2UKKwlkZWJ1ZyhGMTAwLCJ0dGhmbG93IEFUVFNW IERUUlhPRkYgbm90IGRlZmluZWQiLCIiLDApOworI2VuZGlmIC8qIERUUlhPRkYgKi8KKyAgICB9 IGVsc2UgewkJCQkvKiBUdXJuIGl0IE9OLiAqLworCWlmIChmbG93ID09IEZMT19SVFNDKSB7CS8q IFJUUy9DVFMgRmxvdyBjb250cm9sLi4uICovCisJICAgIGRlYnVnKEYxMDAsInR0aGZsb3cgQVRU U1YgUlRTL0NUUyBPTiIsIiIsMCk7CisjaWZkZWYgUlRTWE9GRgorCSAgICAvKiBUaGlzIGlzIHRo ZSBwcmVmZXJyZWQgd2F5LCBhY2NvcmRpbmcgdG8gU1ZJRDMgKi8KKyNpZmRlZiBUQ0dFVFgKKwkg ICAgeCA9IGlvY3RsKHR0eWZkLFRDR0VUWCwmcmN0c3gpOworCSAgICBkZWJ1ZyhGMTAxLCJ0dGhm bG93IFRDR0VUWCIsIiIseCk7CisJICAgIGlmICh4ID4gLTEpIHsKKwkJcmN0c3gueF9oZmxhZyB8 PSBSVFNYT0ZGIHwgQ1RTWE9OOworCQl4ID0gaW9jdGwodHR5ZmQsVENTRVRYLCZyY3RzeCk7CisJ CWRlYnVnKEYxMDAsInR0aGZsb3cgQVRUU1YgaW9jdGwiLCIiLHgpOworCSAgICB9CisjZWxzZQor CSAgICBkZWJ1ZyhGMTAwLCJ0dGhmbG93IFRDR0VUWCBub3QgZGVmaW5lZCIsIiIsMCk7CisJICAg IHggPSAtMQorI2VuZGlmIC8qIFRDR0VUWCAqLworI2Vsc2UKKwkgICAgZGVidWcoRjEwMCwidHRo ZmxvdyBSVFNYT0ZGIG5vdCBkZWZpbmVkIiwiIiwwKTsKKwkgICAgeCA9IC0xOworI2VuZGlmIC8q IFJUU1hPRkYgKi8KKwl9IGVsc2UgaWYgKGZsb3cgPT0gRkxPX0RUUkMpIHsJLyogRFRSL0NEIEZs b3cgY29udHJvbC4uLiAqLworCSAgICBkZWJ1ZyhGMTAwLCJ0dGhmbG93IEFUVFNWIERUUi9DRCBP TiIsIiIsMCk7CisjaWZkZWYgRFRSWE9GRgorCSAgICAvKiBUaGlzIGlzIHN0cmFpZ2h0IG91dCBv ZiBTVklEIFI0ICovCisJICAgIGlmIChpb2N0bCh0dHlmZCxUQ0dFVFgsJnJjdHN4KSA+IC0xKSB7 CisJCXJjdHN4LnhfaGZsYWcgJj0gfihEVFJYT0ZGfENEWE9OKTsKKwkJeCA9IGlvY3RsKHR0eWZk LFRDU0VUWCwmcmN0c3gpOworCSAgICB9CisjZWxzZQorCSAgICBkZWJ1ZyhGMTAwLCJ0dGhmbG93 IEFUVFNWIERUUlhPRkYgbm90IGRlZmluZWQiLCIiLDApOworCSAgICB4ID0gLTE7CisjZW5kaWYg LyogRFRSWE9GRiAqLworCX0KKyAgICB9CisjZW5kaWYgLyogQ0tfU0NPVU5JWCAqLworCisjZWxz ZSAvKiBub3QgU3lzdGVtIFYuLi4gKi8KKworI2lmZGVmIENLX0RUUkNUUworI2lmZGVmIExET0RU UgorI2lmZGVmIExET0NUUworI2lmZGVmIE5FVENNRAorICAgIGlmICh0dHBpcGUpIHJldHVybigw KTsKKyNlbmRpZiAvKiBORVRDTUQgKi8KKyNpZmRlZiBORVRQVFkKKyAgICBpZiAodHRwdHkpIHJl dHVybigwKTsKKyNlbmRpZiAvKiBORVRQVFkgKi8KKyAgICB4ID0gTERPRFRSIHwgTERPQ1RTOwkJ LyogRm91bmQgb25seSBvbiBVVEVLPyAqLworICAgIGlmIChmbG93ID09IEZMT19EVFJUICYmIHN0 YXR1cykgewkvKiBVc2UgaGFyZHdhcmUgZmxvdyBjb250cm9sICovCisJaWYgKGxtb2RlZikgewor CSAgICB4ID0gaW9jdGwodHR5ZmQsVElPQ0xCSVMsJngpOworCSAgICBpZiAoeCA8IDApIHsKKwkg ICAgICAgIGRlYnVnKEYxMDAsImhhcmRmbG93IFRJT0NMQklTIGVycm9yIiwiIiwwKTsKKwkgICAg fSBlbHNlIHsKKwkJbG1vZGVmKys7CisJCWRlYnVnKEYxMDAsImhhcmRmbG93IFRJT0NMQklTIG9r IiwiIiwwKTsKKwkgICAgfQorCX0KKyAgICB9IGVsc2UgeworCWlmIChsbW9kZWYpIHsKKwkgICAg eCA9IGlvY3RsKHR0eWZkLFRJT0NMQklDLCZ4KTsKKwkgICAgaWYgKHggPCAwKSB7CisJICAgICAg ICBkZWJ1ZyhGMTAwLCJoYXJkZmxvdyBUSU9DTEJJQyBlcnJvciIsIiIsMCk7CisJICAgIH0gZWxz ZSB7CisJCWxtb2RlZisrOworCQlkZWJ1ZyhGMTAwLCJoYXJkZmxvdyBUSU9DTEJJQyBvayIsIiIs MCk7CisJICAgIH0KKwl9CisgICAgfQorI2VuZGlmIC8qIExET0RUUiAqLworI2VuZGlmIC8qIExE T0NUUyAqLworI2VuZGlmIC8qIENLX0RUUkNUUyAqLworI2VuZGlmIC8qIEFUVFNWICovCisjZW5k aWYgLyogQUlYUlMgKi8KKyNlbmRpZiAvKiBTVU5PUzQgKi8KKyNlbmRpZiAvKiBRTlggKi8KKyNl bmRpZiAvKiBQT1NJWF9DUlRTQ1RTICovCisjZW5kaWYgLyogU1VOT1M0MSAqLworCisjZWxzZSAv KiBPWE9TICovCisKKyAgICBzdHJ1Y3QgdGVybWlvcyB0ZW1wOwkJLyogT2xpdmV0dGkgWC9PUyAu Li4gKi8KKworI2lmZGVmIE5FVENNRAorICAgIGlmICh0dHBpcGUpIHJldHVybigwKTsKKyNlbmRp ZiAvKiBORVRDTUQgKi8KKyNpZmRlZiBORVRQVFkKKyAgICBpZiAodHRwdHkpIHJldHVybigwKTsK KyNlbmRpZiAvKiBORVRQVFkgKi8KKyAgICB4ID0gaW9jdGwodHR5ZmQsVENHRVRTLCZ0ZW1wKTsK KyAgICBpZiAoeCA9PSAwKSB7CisJdGVtcC5jX2NmbGFnICY9IH4oQ1JUU0NUU3xDRFRSQ1RTfENC UktGTE9XfENEVFJEU1J8Q1JUU0RTUik7CisJaWYgKHN0YXR1cykgeworCSAgICBzd2l0Y2ggKGZs b3cpIHsKKwkgICAgICBjYXNlIEZMT19SVFNDOiB0ZW1wLmNfY2ZsYWcgfD0gQ1JUU0NUUzsgLyog UlRTL0NUUyAoaGFyZCkgKi8KKwkJYnJlYWs7CisJICAgICAgY2FzZSBGTE9fRFRSVDogdGVtcC5j X2NmbGFnIHw9IENEVFJDVFM7IC8qIERUUi9DVFMgKGhhcmQpICovCisJCWJyZWFrOworCSAgICB9 CisJfQorCXggPSBpb2N0bCh0dHlmZCxUQ1NFVFMsJnRlbXApOworICAgIH0KKyNlbmRpZiAvKiBP WE9TICovCisgICAgcmV0dXJuKHgpOworCisjZW5kaWYgLyogUGxhbjkgKi8KK30KKworLyogIFQg VCBQIEsgVCAgLS0gIENvbmRpdGlvbiB0aGUgY29tbXVuaWNhdGlvbiBsaW5lIGZvciBwYWNrZXRz ICovCisvKiAgICAgICAgICAgICAgICAgb3IgZm9yIG1vZGVtIGRpYWxpbmcgKi8KKworLyoKKyAg SWYgY2FsbGVkIHdpdGggc3BlZWQgPiAtMSwgYWxzbyBzZXQgdGhlIHNwZWVkLgorICBSZXR1cm5z IDAgb24gc3VjY2VzcywgLTEgb24gZmFpbHVyZS4KKworICBOT1RFOiB0aGUgInhmbG93IiBwYXJh bWV0ZXIgaXMgc3VwcG9zZWQgdG8gYmUgdGhlIGN1cnJlbnRseSBzZWxlY3RlZAorICB0eXBlIG9m IGZsb3cgY29udHJvbCwgYnV0IGZvciBoaXN0b3JpY2FsIHJlYXNvbnMsIHRoaXMgcGFyYW1ldGVy IGlzIGFsc28KKyAgdXNlZCB0byBpbmRpY2F0ZSB0aGF0IHdlIGFyZSBkaWFsaW5nLiAgVGhlcmVm b3JlLCB3aGVuIHRoZSB0cnVlIGZsb3cKKyAgY29udHJvbCBzZXR0aW5nIGlzIG5lZWRlZCwgd2Ug YWNjZXNzIHRoZSBleHRlcm5hbCB2YXJpYWJsZSAiZmxvdyIsIHJhdGhlcgorICB0aGFuIHRydXN0 aW5nIG91ciAieGZsb3ciIGFyZ3VtZW50LgorKi8KK2ludAorI2lmZGVmIENLX0FOU0lDCit0dHBr dChsb25nIHNwZWVkLCBpbnQgeGZsb3csIGludCBwYXJpdHkpCisjZWxzZQordHRwa3Qoc3BlZWQs eGZsb3cscGFyaXR5KSBsb25nIHNwZWVkOyBpbnQgeGZsb3csIHBhcml0eTsKKyNlbmRpZiAvKiBD S19BTlNJQyAqLworLyogdHRwa3QgKi8geworI2lmbmRlZiBOT0xPQ0FMCisgICAgaW50IHMyOwor ICAgIGludCBzID0gLTE7CisjZW5kaWYgLyogTk9MT0NBTCAqLworICAgIGludCB4OworICAgIGV4 dGVybiBpbnQgZmxvdzsJCQkvKiBSRUFMIGZsb3ctY29udHJvbCBzZXR0aW5nICovCisKKyAgICBp ZiAodHR5ZmQgPCAwKSByZXR1cm4oLTEpOyAgICAgICAgICAvKiBOb3Qgb3Blbi4gKi8KKworICAg IGRlYnVnKEYxMDEsInR0cGt0IHBhcml0eSIsIiIscGFyaXR5KTsKKyAgICBkZWJ1ZyhGMTAxLCJ0 dHBrdCB4ZmxvdyIsIiIseGZsb3cpOworICAgIGRlYnVnKEYxMDEsInR0cGt0IHNwZWVkIiwiIiwo aW50KSBzcGVlZCk7CisKKyAgICB0dHBydHkgPSBwYXJpdHk7ICAgICAgICAgICAgICAgICAgICAv KiBMZXQgb3RoZXIgdHQgZnVuY3Rpb25zIHNlZSB0aGVzZS4gKi8KKyAgICB0dHNwZWVkID0gc3Bl ZWQ7CQkJLyogTWFrZSBnbG9iYWwgY29weSBmb3IgdGhpcyBtb2R1bGUgKi8KKyAgICB0dHBtc2sg PSB0dHBydHkgPyAwMTc3IDogMDM3NzsJLyogUGFyaXR5IHN0cmlwcGluZyBtYXNrICovCisjaWZk ZWYgUEFSU0VOU0UKKyAgICBuZWVkcGNoayA9IHR0cHJ0eSA/IDAgOiAxOwkJLyogUGFyaXR5IGNo ZWNrIG5lZWRlZD8gKi8KKyNlbHNlCisgICAgbmVlZHBjaGsgPSAwOworI2VuZGlmIC8qIFBBUlNF TlNFICovCisKKyAgICBkZWJ1ZyhGMTAxLCJ0dHBrdCB0dHBtc2siLCIiLHR0cG1zayk7CisgICAg ZGVidWcoRjEwMSwidHRwa3QgbmV0Y29ubiIsIiIsbmV0Y29ubik7CisKKyNpZmRlZiBORVRDT05O CQkJCS8qIE5vIG1vZGUtY2hhbmdpbmcgZm9yIHRlbG5ldCAqLworICAgIGlmIChuZXRjb25uKSB7 CisjaWZkZWYgVENQU09DS0VUCisjaWZkZWYgVENQX05PREVMQVkKKyAgICAgICAgaWYgKHR0bmV0 ID09IE5FVF9UQ1BCKSB7CS8qIEJ1dCB0dXJuIG9mZiBOYWdsZSAqLworICAgICAgICAgICAgZXh0 ZXJuIGludCB0Y3Bfbm9kZWxheTsKKyAgICAgICAgICAgIG5vZGVsYXlfc2F2ID0gdGNwX25vZGVs YXk7CisgICAgICAgICAgICBub19kZWxheSh0dHlmZCwxKTsKKyAgICAgICAgfQorI2VuZGlmIC8q IFRDUF9OT0RFTEFZICovCisjaWZkZWYgVE5fQ09NUE9SVAorICAgICAgICBpZiAoaXN0bmNvbXBv cnQoKSkgeworICAgICAgICAgICAgaW50IHJjID0gLTE7CisgICAgICAgICAgICBpZiAodHZ0Zmxn ID09IDAgJiYgc3BlZWQgPT0gdHRzcGVlZCAmJiBmbG93ID09IHR0ZmxvdworICAgICAgICAgICAg ICAgICAvKiAmJiB0dGNhcnIgPT0gY3VyY2FyciAqLyApIHsKKyAgICAgICAgICAgICAgICBkZWJ1 ZyhGMTAwLCJ0dHBrdCBtb2RlcyBhbHJlYWR5IHNldCwgc2tpcHBpbmcuLi4iLCIiLDApOworICAg ICAgICAgICAgICAgIHJldHVybigwKTsJCS8qIEFscmVhZHkgYmVlbiBjYWxsZWQuICovCisgICAg ICAgICAgICB9CisgICAgICAgICAgICBpZiAoZmxvdyAhPSB0dGZsb3cpIHsKKyAgICAgICAgICAg ICAgICBpZiAoKHJjID0gdG5zZXRmbG93KGZsb3cpKSA8IDApCisJCSAgcmV0dXJuKHJjKTsKKyAg ICAgICAgICAgICAgICB0dGZsb3cgPSBmbG93OworICAgICAgICAgICAgfQorICAgICAgICAgICAg aWYgKHNwZWVkICE9IHR0c3BlZWQpIHsKKyAgICAgICAgICAgICAgICBpZiAoc3BlZWQgPD0gMCkg CisJCSAgc3BlZWQgPSB0bmNfZ2V0X2JhdWQoKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmICgo cmMgPSB0bmNfc2V0X2JhdWQoc3BlZWQpKSA8IDApCisJCSAgcmV0dXJuKHJjKTsKKyAgICAgICAg ICAgICAgICB0dHNwZWVkID0gc3BlZWQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0bmNf c2V0X2RhdGFzaXplKDgpOworCSAgICB0bmNfc2V0X3N0b3BzaXplKHN0b3BiaXRzKTsKKworI2lm ZGVmIEhXUEFSSVRZCisgICAgICAgICAgICBpZiAoaHdwYXJpdHkpIHsKKyAgICAgICAgICAgICAg ICBzd2l0Y2ggKGh3cGFyaXR5KSB7CisJCSAgY2FzZSAnZSc6CQkJLyogRXZlbiAqLworICAgICAg ICAgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJ0dHJlcyA4IGJpdHMgKyBldmVuIHBhcml0eSIsIiIs MCk7CisgICAgICAgICAgICAgICAgICAgIHRuY19zZXRfcGFyaXR5KDMpOworICAgICAgICAgICAg ICAgICAgICBicmVhazsKKwkJICBjYXNlICdvJzoJCQkvKiBPZGQgKi8KKyAgICAgICAgICAgICAg ICAgICAgZGVidWcoRjEwMCwidHRyZXMgOCBiaXRzICsgb2RkIHBhcml0eSIsIiIsMCk7CisgICAg ICAgICAgICAgICAgICAgIHRuY19zZXRfcGFyaXR5KDIpOworICAgICAgICAgICAgICAgICAgICBi cmVhazsKKwkJICBjYXNlICdtJzoJCQkvKiBNYXJrICovCisgICAgICAgICAgICAgICAgICAgIGRl YnVnKEYxMDAsInR0cmVzIDggYml0cyArIGludmFsaWQgcGFyaXR5OiBtYXJrIiwiIiwwKTsKKyAg ICAgICAgICAgICAgICAgICAgdG5jX3NldF9wYXJpdHkoNCk7CisgICAgICAgICAgICAgICAgICAg IGJyZWFrOworCQkgIGNhc2UgJ3MnOgkJCS8qIFNwYWNlICovCisgICAgICAgICAgICAgICAgICAg IGRlYnVnKEYxMDAsInR0cmVzIDggYml0cyArIGludmFsaWQgcGFyaXR5OiBzcGFjZSIsIiIsMCk7 CisgICAgICAgICAgICAgICAgICAgIHRuY19zZXRfcGFyaXR5KDUpOworICAgICAgICAgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgCisjZW5k aWYgLyogSFdQQVJJVFkgKi8KKwkgICAgeworICAgICAgICAgICAgICAgIHRuY19zZXRfcGFyaXR5 KDEpOyAgICAgICAgICAgICAgLyogTm9uZSAqLworICAgICAgICAgICAgfQorICAgICAgICAgICAg dHZ0ZmxnID0gMDsKKyAgICAgICAgICAgIHJldHVybigwKTsKKyAgICAgICAgfQorI2VuZGlmIC8q IFROX0NPTVBPUlQgKi8KKyNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KKyAgICAgICAgdHZ0ZmxnID0g MDsKKyAgICAgICAgcmV0dXJuKDApOworICAgIH0KKyNlbmRpZiAvKiBORVRDT05OICovCisjaWZk ZWYgTkVUQ01ECisgICAgaWYgKHR0cGlwZSkgcmV0dXJuKDApOworI2VuZGlmIC8qIE5FVENNRCAq LworI2lmZGVmIE5FVFBUWQorICAgIGlmICh0dHB0eSkgcmV0dXJuKDApOworI2VuZGlmIC8qIE5F VFBUWSAqLworCisjaWZuZGVmIFBsYW45CisgICAgaWYgKHR0ZmRmbGcgJiYgIWlzYXR0eSh0dHlm ZCkpIHJldHVybigwKTsKKyNlbmRpZiAvKiBQbGFuOSAqLworCisjaWZkZWYgQ09IRVJFTlQKKyNk ZWZpbmUgU1ZPUlBPU0lYCisjZW5kaWYgLyogQ09IRVJFTlQgKi8KKworI2lmbmRlZiBTVk9SUE9T SVgJCQkvKiBCZXJrZWxleSwgVjcsIGV0Yy4gKi8KKyNpZmRlZiBMUEFTUzgKKy8qCisgRm9yIHNv bWUgcmVhc29uLCB3aXRoIEJTRCB0ZXJtaW5hbCBkcml2ZXJzLCB5b3UgY2FuJ3Qgc2V0IEZMT1cg dG8gWE9OL1hPRkYKKyBhZnRlciBoYXZpbmcgcHJldmlvdXNseSBzZXQgaXQgdG8gTk9ORSB3aXRo b3V0IGNsb3NpbmcgYW5kIHJlb3BlbmluZyB0aGUKKyBkZXZpY2UuICBVbmxlc3MgdGhlcmUncyBz b21ldGhpbmcgSSBvdmVybG9va2VkIGJlbG93Li4uCisqLworICAgIGlmICh0dGZsb3cgPT0gRkxP X05PTkUgJiYgZmxvdyA9PSBGTE9fWE9OWCAmJiB4bG9jYWwgPT0gMCkgeworCWRlYnVnKEYxMDEs InR0cGt0IGV4ZWN1dGluZyBob3JyaWJsZSBmbG93IGtsdWRnZSIsIiIsMCk7CisJdHRjbG9zKDAp OwkJCS8qIENsb3NlIGl0ICovCisJeCA9IDA7CisJdHRvcGVuKHR0bm1zdiwmeCx0dG1kbSwwKTsJ LyogT3BlbiBpdCBhZ2FpbiAqLworICAgIH0KKyNlbmRpZiAvKiBMUEFTUzggKi8KKyNlbmRpZiAv KiBTVk9SUE9TSVggKi8KKworI2lmZGVmIENPSEVSRU5UCQkJCS8qIFRoaXMgbXVzdCBiZSB2ZXN0 aWdpYWwgc2luY2Ugd2UgKi8KKyN1bmRlZiBTVk9SUE9TSVgJCQkvKiByZXZlcnNlIGl0IGEgZmV3 IGxpbmVzIGJlbG93Li4uICovCisjZW5kaWYgLyogQ09IRVJFTlQgKi8KKworICAgIGlmICh4Zmxv dyAhPSBGTE9fRElBTCAmJiB4ZmxvdyAhPSBGTE9fRElBWCkKKyAgICAgIHR0ZmxvdyA9IHhmbG93 OwkJCS8qIE5vdyBtYWtlIHRoaXMgYXZhaWxhYmxlIHRvby4gKi8KKworI2lmbmRlZiBOT0xPQ0FM CisgICAgaWYgKHhsb2NhbCkgeworCXMyID0gKGludCkgKHNwZWVkIC8gMTBMKTsJLyogQ29udmVy dCBicHMgdG8gY3BzICovCisJZGVidWcoRjEwMSwidHRwa3QgY2FsbGluZyB0dHNzcGQiLCIiLHMy KTsKKwlzID0gdHRzc3BkKHMyKTsJCQkvKiBDaGVjayBhbmQgc2V0IHRoZSBzcGVlZCAqLworCWRl YnVnKEYxMDEsInR0cGt0IHR0c3NwZCByZXN1bHQiLCIiLHMpOworIAljYXJyY3RsKCZ0dHJhdywg eGZsb3cgIT0gRkxPX0RJQUwgLyogQ2FycmllciBjb250cm9sICovCisJCSYmICh0dGNhcnIgPT0g Q0FSX09OIHx8ICh0dGNhcnIgPT0gQ0FSX0FVVCAmJiB0dG1kbSAhPSAwKSkpOworCXR2dGZsZyA9 IDA7CQkJLyogU28gdHR2dCgpIHdpbGwgd29yayBuZXh0IHRpbWUgKi8KKyAgICB9CisjZW5kaWYg LyogTk9MT0NBTCAqLworCisjaWZkZWYgQ09IRVJFTlQKKyNkZWZpbmUgU1ZPUlBPU0lYCisjZW5k aWYgLyogQ09IRVJFTlQgKi8KKworI2lmbmRlZiBTVk9SUE9TSVgJCQkvKiBCU0Qgc2VjdGlvbiAq LworICAgIGlmIChmbG93ID09IEZMT19SVFNDIHx8CQkvKiBIYXJkd2FyZSBmbG93IGNvbnRyb2wg Ki8KKwlmbG93ID09IEZMT19EVFJDIHx8CisJZmxvdyA9PSBGTE9fRFRSVCkgeworCXR0aGZsb3co ZmxvdywgMSwgJnR0cmF3KTsKKwlkZWJ1ZyhGMTAwLCJ0dHBrdCBoYXJkIGZsb3csIFRBTkRFTSBv ZmYsIFJBVyBvbiIsIiIsMCk7CisJdHRyYXcuc2dfZmxhZ3MgJj0gflRBTkRFTTsJLyogVHVybiBv ZmYgc29mdHdhcmUgZmxvdyBjb250cm9sICovCisJdHRyYXcuc2dfZmxhZ3MgfD0gUkFXOwkJLyog RW50ZXIgcmF3IG1vZGUgKi8KKyAgICB9IGVsc2UgaWYgKGZsb3cgPT0gRkxPX05PTkUpIHsJLyog Tm8gZmxvdyBjb250cm9sICovCisJZGVidWcoRjEwMCwidHRwa3Qgbm8gZmxvdywgVEFOREVNIG9m ZiwgUkFXIG9uIiwiIiwwKTsKKwl0dHJhdy5zZ19mbGFncyAmPSB+VEFOREVNOwkvKiBUdXJuIG9m ZiBzb2Z0d2FyZSBmbG93IGNvbnRyb2wgKi8KKwl0dGhmbG93KGZsb3csIDAsICZ0dHJhdyk7CS8q IFR1cm4gb2ZmIGFueSBoYXJkd2FyZSBmL2MgdG9vICovCisJdHRyYXcuc2dfZmxhZ3MgfD0gUkFX OwkJLyogRW50ZXIgcmF3IG1vZGUgKi8KKyAgICB9IGVsc2UgaWYgKGZsb3cgPT0gRkxPX0tFRVAp IHsJLyogS2VlcCBkZXZpY2UncyBvcmlnaW5hbCBzZXR0aW5nICovCisJZGVidWcoRjEwMCwidHRw a3Qga2VlcGluZyBvcmlnaW5hbCBUQU5ERU0iLCIiLDApOworCXR0cmF3LnNnX2ZsYWdzICY9IH5U QU5ERU07CisJdHRyYXcuc2dfZmxhZ3MgfD0gKHR0b2xkLnNnX2ZsYWdzICYgVEFOREVNKTsKKwkv KiBOT1RFOiBXZSBzaG91bGQgYWxzbyBoYW5kbGUgaGFyZHdhcmUgZmxvdyBjb250cm9sIGhlcmUh ICovCisgICAgfQorCisvKiBTRVQgRkxPVyBYT04vWE9GRiBpcyBpbiBlZmZlY3QsIG9yIFNFVCBG TE9XIEtFRVAgcmVzdWx0ZWQgaW4gWG9uL1hvZmYgKi8KKworICAgIGlmICgoZmxvdyA9PSBGTE9f WE9OWCkgfHwgKHR0cmF3LnNnX2ZsYWdzICYgVEFOREVNKSkgeworCWRlYnVnKEYxMDAsInR0cGt0 IHR1cm5pbmcgb24gVEFOREVNIiwiIiwwKTsKKwl0dHJhdy5zZ19mbGFncyB8PSBUQU5ERU07CS8q IFNvIGFzayBmb3IgaXQuICovCisKKyNpZmRlZiBMUEFTUzgJCQkJLyogQ2FuIHBhc3MgOC1iaXQg ZGF0YSB0aHJvdWdoPyAqLworLyogSWYgdGhlIExQQVNTOCBsb2NhbCBtb2RlIGlzIGF2YWlsYWJs ZSwgdGhlbiBmbG93IGNvbnRyb2wgY2FuIGFsd2F5cyAgKi8KKy8qIGJlIHVzZWQsIGV2ZW4gaWYg cGFyaXR5IGlzIG5vbmUgYW5kIHdlIGFyZSB0cmFuc2ZlcnJpbmcgOC1iaXQgZGF0YS4gICovCisv KiBCdXQgd2Ugb25seSBuZWVkIHRvIGRvIGFsbCB0aGlzIGlmIFhvbi9Yb2ZmIGlzIHJlcXVlc3Rl ZC4gKi8KKy8qIEJVVC4uLiB0aGlzIHRlbmRzIG5vdCB0byB3b3JrIHRocm91Z2ggSVAgb3IgTEFU IGNvbm5lY3Rpb25zLCB0ZXJtaW5hbCAqLworLyogc2VydmVycywgdGVsbmV0LCBybG9naW4sIGV0 Yywgc28gaXQgaXMgY3VycmVudGx5IGRpc2FibGVkLiAqLworCXggPSBMUEFTUzg7CQkJLyogSWYg TFBBU1M4IGRlZmluZWQsIHRoZW4gKi8KKwlkZWJ1ZyhGMTAwLCJ0dHBrdCBleGVjdXRpbmcgTFBB U1M4IGNvZGUiLCIiLDApOworCWlmIChsbW9kZWYpIHsJCQkvKiBUSU9DTEJJUyBtdXN0IGJlIHRv by4gKi8KKwkgICAgeCA9IGlvY3RsKHR0eWZkLFRJT0NMQklTLCZ4KTsgLyogVHJ5IHRvIHNldCBM UEFTUzguICovCisJICAgIGlmICh4IDwgMCkgeworCQlkZWJ1ZyhGMTAwLCJ0dHBrdCBUSU9DTEJJ UyBlcnJvciIsIiIsMCk7CisJICAgIH0gZWxzZSB7CisJCWxtb2RlZisrOworCQlkZWJ1ZyhGMTAw LCJ0dHBrdCBUSU9DTEJJUyBvayIsIiIsMCk7CisJICAgIH0KKwl9CisvKgorIEJ1dCBpZiB3ZSB1 c2UgTFBBU1M4IG1vZGUsIHdlIG11c3QgZXhwbGljaXRseSB0dXJuIG9mZgorIHRlcm1pbmFsIGlu dGVycnVwdHMgb2YgYWxsIGtpbmRzLgorKi8KKyNpZmRlZiBUSU9DR0VUQwkJCQkvKiBOb3QgcmF3 bW9kZSwgKi8KKwlpZiAodGNoYXJmICYmICh4bG9jYWwgPT0gMCkpIHsJLyogbXVzdCB0dXJuIG9m ZiAqLworCSAgICB0Y2hub2kudF9pbnRyYyA9IC0xOwkvKiBpbnRlcnJ1cHQgY2hhcmFjdGVyICov CisJICAgIHRjaG5vaS50X3F1aXRjID0gLTE7CS8qIGFuZCBxdWl0IGNoYXJhY3Rlci4gKi8KKwkg ICAgdGNobm9pLnRfc3RhcnRjID0gMTc7CS8qIE1ha2Ugc3VyZSB4b24gKi8KKwkgICAgdGNobm9p LnRfc3RvcGMgPSAxOTsJLyogYW5kIHhvZmYgbm90IGlnbm9yZWQuICovCisjaWZuZGVmIE5PQlJL QworCSAgICB0Y2hub2kudF9lb2ZjID0gLTE7CQkvKiBlb2YgY2hhcmFjdGVyLiAqLworCSAgICB0 Y2hub2kudF9icmtjID0gLTE7CQkvKiBicmsgY2hhcmFjdGVyLiAqLworI2VuZGlmIC8qIE5PQlJL QyAqLworCSAgICBpZiAoaW9jdGwodHR5ZmQsVElPQ1NFVEMsJnRjaG5vaSkgPCAwKSB7CisJCWRl YnVnKEYxMDAsInR0cGt0IFRJT0NTRVRDIGZhaWxlZCIsIiIsMCk7CisJICAgIH0gZWxzZSB7CisJ CXRjaGFyZiA9IDE7CisJCWRlYnVnKEYxMDAsInR0cGt0IFRJT0NTRVRDIG9rIiwiIiwwKTsKKwkg ICAgfQorI2lmZGVmIENPTU1FTlQKKy8qIG9ubHkgZm9yIHBhcmFub2lkIGRlYnVnZ2luZyAqLwor CSAgICBpZiAodGNoYXJmKSB7CisJCXN0cnVjdCB0Y2hhcnMgZm9vOworCQljaGFyIHRjaGJ1Zlsx MDBdOworCQlpb2N0bCgwLFRJT0NHRVRDLCZmb28pOworCQlzcHJpbnRmKHRjaGJ1ZiwKKwkJICAg ICJpbnRyPSVkLHF1aXQ9JWQsIHN0YXJ0PSVkLCBzdG9wPSVkLCBlb2Y9JWQsIGJyaz0lZCIsCisJ CSAgICBmb28udF9pbnRyYywgZm9vLnRfcXVpdGMsIGZvby50X3N0YXJ0YywKKwkJICAgIGZvby50 X3N0b3BjLCBmb28udF9lb2ZjLCAgZm9vLnRfYnJrYyk7CisJCWRlYnVnKEYxMTAsInR0cGt0IGNo YXJzIix0Y2hidWYsMCk7CisJICAgIH0KKyNlbmRpZiAvKiBDT01NRU5UICovCisJfQorCXR0cmF3 LnNnX2ZsYWdzIHw9IENCUkVBSzsJLyogTmVlZGVkIGZvciB1bmtub3duIHJlYXNvbiAqLworI2Vu ZGlmIC8qIFRJT0NHRVRDICovCisKKy8qIFByZXZlbnQgc3VzcGVuZCBkdXJpbmcgcGFja2V0IG1v ZGUgKi8KKyNpZmRlZiBUSU9DR0xUQwkJCQkvKiBOb3QgcmF3bW9kZSwgKi8KKwlpZiAobHRjaGFy ZiAmJiAoeGxvY2FsID09IDApKSB7CS8qIG11c3QgdHVybiBvZmYgKi8KKwkgICAgbHRjaG5vaS50 X3N1c3BjID0gLTE7CS8qIHN1c3BlbmQgY2hhcmFjdGVyICovCisJICAgIGx0Y2hub2kudF9kc3Vz cGMgPSAtMTsJLyogYW5kIGRlbGF5ZWQgc3VzcGVuZCBjaGFyYWN0ZXIgKi8KKwkgICAgaWYgKGlv Y3RsKHR0eWZkLFRJT0NTTFRDLCZ0Y2hub2kpIDwgMCkgeworCQlkZWJ1ZyhGMTAwLCJ0dHBrdCBU SU9DU0xUQyBmYWlsZWQiLCIiLDApOworCSAgICB9IGVsc2UgeworCQlsdGNoYXJmID0gMTsKKwkJ ZGVidWcoRjEwMCwidHRwa3QgVElPQ1NMVEMgb2siLCIiLDApOworCSAgICB9CisJfQorI2VuZGlm IC8qIFRJT0NHTFRDICovCisKKyNlbHNlIC8qIExQQVNTOCBub3QgZGVmaW5lZCAqLworCisvKiBQ cmV2aW91c2x5LCBCU0QtYmFzZWQgaW1wbGVtZW50YXRpb25zIGFsd2F5cyAqLworLyogdXNlZCBy YXdtb2RlIGZvciBwYWNrZXRzLiAgTm93LCB3ZSB1c2UgcmF3bW9kZSBvbmx5IGlmIHBhcml0eSBp cyBOT05FLiAqLworLyogVGhpcyBhbGxvd3MgdGhlIGZsb3cgY29udHJvbCByZXF1ZXN0ZWQgYWJv dmUgdG8gYWN0dWFsbHkgd29yaywgYnV0IG9ubHkgKi8KKy8qIGlmIHRoZSB1c2VyIGFza3MgZm9y IHBhcml0eSAod2hpY2ggYWxzbyBtZWFucyB0aGV5IGdldCA4dGgtYml0IHF1b3RpbmcpLiAqLwor CisJaWYgKHBhcml0eSkgewkJCS8qIElmIHBhcml0eSwgKi8KKwkgICAgdHRyYXcuc2dfZmxhZ3Mg Jj0gflJBVzsJLyogdXNlIGNvb2tlZCBtb2RlICovCisjaWZkZWYgQ09NTUVOVAorLyogV0hZPz8/ ICovCisJICAgIGlmICh4bG9jYWwpCisjZW5kaWYgLyogQ09NTUVOVCAqLworCSAgICAgIHR0cmF3 LnNnX2ZsYWdzIHw9IENCUkVBSzsKKwkgICAgZGVidWcoRjEwMSwidHRwa3QgY29va2VkLCBjYnJl YWssIHBhcml0eSIsIiIscGFyaXR5KTsKKyNpZmRlZiBUSU9DR0VUQwkJCQkvKiBOb3QgcmF3bW9k ZSwgKi8KKwkgICAgaWYgKHRjaGFyZiAmJiAoeGxvY2FsID09IDApKSB7IC8qIG11c3QgdHVybiBv ZmYgKi8KKwkJdGNobm9pLnRfaW50cmMgPSAtMTsJLyogaW50ZXJydXB0IGNoYXJhY3RlciAqLwor CQl0Y2hub2kudF9xdWl0YyA9IC0xOwkvKiBhbmQgcXVpdCBjaGFyYWN0ZXIuICovCisJCXRjaG5v aS50X3N0YXJ0YyA9IDE3OwkvKiBNYWtlIHN1cmUgeG9uICovCisJCXRjaG5vaS50X3N0b3BjID0g MTk7CS8qIGFuZCB4b2ZmIG5vdCBpZ25vcmVkLiAqLworI2lmbmRlZiBOT0JSS0MKKwkJdGNobm9p LnRfZW9mYyA9IC0xOwkvKiBlb2YgY2hhcmFjdGVyLiAqLworCQl0Y2hub2kudF9icmtjID0gLTE7 CS8qIGJyayBjaGFyYWN0ZXIuICovCisjZW5kaWYgLyogTk9CUktDICovCisJCWlmIChpb2N0bCh0 dHlmZCxUSU9DU0VUQywmdGNobm9pKSA8IDApIHsKKwkJICAgIGRlYnVnKEYxMDAsInR0cGt0IFRJ T0NTRVRDIGZhaWxlZCIsIiIsMCk7CisJCX0gZWxzZSB7CisJCSAgICB0Y2hhcmYgPSAxOworCQkg ICAgZGVidWcoRjEwMCwidHRwa3QgVElPQ1NFVEMgb2siLCIiLDApOworCQl9CisJICAgIH0KKyNl bmRpZiAvKiBUSU9DR0VUQyAqLworI2lmZGVmIFRJT0NHTFRDCQkJCS8qIE5vdCByYXdtb2RlLCAq LworLyogUHJldmVudCBzdXNwZW5kIGR1cmluZyBwYWNrZXQgbW9kZSAqLworCSAgICBpZiAobHRj aGFyZiAmJiAoeGxvY2FsID09IDApKSB7IC8qIG11c3QgdHVybiBvZmYgKi8KKwkJbHRjaG5vaS50 X3N1c3BjID0gLTE7CS8qIHN1c3BlbmQgY2hhcmFjdGVyICovCisJCWx0Y2hub2kudF9kc3VzcGMg PSAtMTsJLyogYW5kIGRlbGF5ZWQgc3VzcGVuZCBjaGFyYWN0ZXIgKi8KKwkJaWYgKGlvY3RsKHR0 eWZkLFRJT0NTTFRDLCZ0Y2hub2kpIDwgMCkgeworCQkgICAgZGVidWcoRjEwMCwidHRwa3QgVElP Q1NMVEMgZmFpbGVkIiwiIiwwKTsKKwkJfSBlbHNlIHsKKwkJICAgIGx0Y2hhcmYgPSAxOworCQkg ICAgZGVidWcoRjEwMCwidHRwa3QgVElPQ1NMVEMgb2siLCIiLDApOworCQl9CisJICAgIH0KKyNl bmRpZiAvKiBUSU9DR0xUQyAqLworCX0gZWxzZSB7CQkJLyogSWYgbm8gcGFyaXR5LCAqLworCSAg ICB0dHJhdy5zZ19mbGFncyB8PSBSQVc7CS8qIG11c3QgdXNlIDgtYml0IHJhdyBtb2RlLiAqLwor CSAgICBkZWJ1ZyhGMTAxLCJ0dHBrdCBzZXR0aW5nIHJhd21vZGUsIHBhcml0eSIsIiIscGFyaXR5 KTsKKwl9CisjZW5kaWYgLyogTFBBU1M4ICovCisgICAgfSAvKiBFbmQgb2YgWG9uL1hvZmYgc2Vj dGlvbiAqLworCisgICAgLyogRG9uJ3QgZWNobywgZG9uJ3QgbWFwIENSIHRvIENSTEYgb24gb3V0 cHV0LCBkb24ndCBmb29sIHdpdGggY2FzZSAqLworI2lmZGVmIExDQVNFCisgICAgdHRyYXcuc2df ZmxhZ3MgJj0gfihFQ0hPfENSTU9EfExDQVNFKTsKKyNlbHNlCisgICAgdHRyYXcuc2dfZmxhZ3Mg Jj0gfihFQ0hPfENSTU9EKTsKKyNlbmRpZiAvKiBMQ0FTRSAqLworCisjaWZkZWYgVE9XRVIxCisg ICAgdHRyYXcuc2dfZmxhZ3MgJj0gfkFOWVA7ICAgICAgICAgICAgLyogTXVzdCBzZXQgdGhpcyBv biBvbGQgVG93ZXJzICovCisjZW5kaWYgLyogVE9XRVIxICovCisKKyNpZmRlZiBCRUxMVjEwCisg ICAgaWYgKGlvY3RsKHR0eWZkLFRJT0NTRVRQLCZ0dHJhdykgPCAwKSAvKiBTZXQgdGhlIG5ldyBt b2Rlcy4gKi8KKyAgICAgIHJldHVybigtMSk7CisjZWxzZQorICAgIGVycm5vID0gMDsKKyAgICBp ZiAoc3R0eSh0dHlmZCwmdHRyYXcpIDwgMCkgeyAgICAgICAvKiBTZXQgdGhlIG5ldyBtb2Rlcy4g Ki8KKyAgICAgICAgZGVidWcoRjEwMSwidHRwa3Qgc3R0eSBmYWlsZWQiLCIiLGVycm5vKTsKKyAg ICAgICAgcmV0dXJuKC0xKTsKKyAgICB9CisjZW5kaWYgLyogQkVMTFYxMCAqLworICAgIGRlYnVn KEYxMDAsInR0cGt0IHN0dHkgb2siLCIiLDApOworCisjaWZkZWYgc29ueV9uZXdzCisgICAgeCA9 IHhsb2NhbCA/IGttX2V4dCA6IGttX2NvbjsJLyogUHV0IGxpbmUgaW4gQVNDSUkgbW9kZS4gKi8K KyAgICBpZiAoeCAhPSAtMSkgewkJCS8qIE1ha2Ugc3VyZSB3ZSBrbm93IG9yaWdpbmFsIG1vZGVz LiAqLworCXggJj0gfktNX1RUWVBFOworCXggfD0gS01fQVNDSUk7CisJaWYgKGlvY3RsKHR0eWZk LFRJT0NLU0VULCAmeCkgPCAwKSB7CisJICAgIHBlcnJvcigidHRwa3QgY2FuJ3Qgc2V0IEFTQ0lJ IG1vZGUiKTsKKwkgICAgZGVidWcoRjEwMSwidHRwa3QgZXJyb3Igc2V0dGluZyBBU0NJSSBtb2Rl IiwiIix4KTsKKwkgICAgcmV0dXJuKC0xKTsKKwl9CisgICAgfQorICAgIGRlYnVnKEYxMDAsInR0 cGt0IHNldCBBU0NJSSBtb2RlIG9rIiwiIiwwKTsKKyNlbmRpZiAvKiBzb255X25ld3MgKi8KKwor ICAgIGlmICh4bG9jYWwgPT0gMCkgewkJCS8qIFR1cm4gdGhpcyBvZmYgc28gd2UgY2FuIHJlYWQg Ki8KKwlzaWduYWwoU0lHSU5ULFNJR19JR04pOwkJLyogQ3RybC1DIGNoYXJzIHR5cGVkIGF0IGNv bnNvbGUgKi8KKwlzaWdpbnRfaWduID0gMTsKKyAgICB9CisgICAgdHZ0ZmxnID0gMDsJCQkJLyog U28gdHR2dCgpIHdpbGwgd29yayBuZXh0IHRpbWUgKi8KKyAgICBkZWJ1ZyhGMTAwLCJ0dHBrdCBz dWNjZXNzIiwiIiwwKTsKKyAgICByZXR1cm4oMCk7CisKKyNlbmRpZiAvKiBOb3QgQVRUU1Ygb3Ig UE9TSVggKi8KKworLyogQVQmVCBVTklYIGFuZCBQT1NJWCAqLworCisjaWZkZWYgQ09IRVJFTlQK KyNkZWZpbmUgU1ZPUlBPU0lYCisjZW5kaWYgLyogQ09IRVJFTlQgKi8KKworI2lmZGVmIFNWT1JQ T1NJWAorICAgIGlmIChmbG93ID09IEZMT19YT05YKSB7CQkvKiBYb24vWG9mZiAqLworCXR0cmF3 LmNfaWZsYWcgfD0gKElYT058SVhPRkYpOworCXR0aGZsb3coZmxvdywgMCwgJnR0cmF3KTsKKyAg ICB9IGVsc2UgaWYgKGZsb3cgPT0gRkxPX05PTkUpIHsJLyogTm9uZSAqLworCS8qIE5PVEU6IFdl IHNob3VsZCBhbHNvIHR1cm4gb2ZmIGhhcmR3YXJlIGZsb3cgY29udHJvbCBoZXJlISAqLworCXR0 cmF3LmNfaWZsYWcgJj0gfihJWE9OfElYT0ZGKTsKKwl0dGhmbG93KGZsb3csIDAsICZ0dHJhdyk7 CisgICAgfSBlbHNlIGlmIChmbG93ID09IEZMT19LRUVQKSB7CS8qIEtlZXAgKi8KKwl0dHJhdy5j X2lmbGFnICY9IH4oSVhPTnxJWE9GRik7CS8qIFR1cm4gb2ZmIFhvbi9Yb2ZmIGZsYWdzICovCisJ dHRyYXcuY19pZmxhZyB8PSAodHRvbGQuY19pZmxhZyAmIChJWE9OfElYT0ZGKSk7IC8qIE9SIGlu IG9sZCBvbmVzICovCisJLyogTk9URTogV2Ugc2hvdWxkIGFsc28gaGFuZGxlIGhhcmR3YXJlIGZs b3cgY29udHJvbCBoZXJlISAqLworI2lmZGVmIFBPU0lYX0NSVFNDVFMKKy8qIEluIExpbnV4IGNh c2UsIHdlIGRvIHRoaXMsIHdoaWNoIGlzIHVubGlrZWx5IHRvIGJlIHBvcnRhYmxlICovCisgICAg ICAgIHR0cmF3LmNfY2ZsYWcgJj0gfkNSVFNDVFM7CS8qIFR1cm4gb2ZmIFJUUy9DVFMgZmxhZyAq LworICAgICAgICB0dHJhdy5jX2NmbGFnIHw9ICh0dG9sZC5jX2NmbGFnICYgQ1JUU0NUUyk7IC8q IE9SIGluIG9sZCBvbmUgKi8KKyNlbmRpZiAvKiBQT1NJWF9DUlRTQ1RTICovCisgICAgfSBlbHNl IGlmIChmbG93ID09IEZMT19SVFNDIHx8CS8qIEhhcmR3YXJlICovCisJICAgICAgIGZsb3cgPT0g RkxPX0RUUkMgfHwKKwkgICAgICAgZmxvdyA9PSBGTE9fRFRSVCkgeworCXR0cmF3LmNfaWZsYWcg Jj0gfihJWE9OfElYT0ZGKTsJLyogKDE5MCkgKi8KKwl0dGhmbG93KGZsb3csIDEsICZ0dHJhdyk7 CisgICAgfQorICAgIHR0cmF3LmNfbGZsYWcgJj0gfihJQ0FOT058RUNITyk7CisgICAgdHRyYXcu Y19sZmxhZyAmPSB+SVNJRzsJCS8qIERvIE5PVCBjaGVjayBmb3IgaW50ZXJydXB0IGNoYXJzICov CisKKyNpZm5kZWYgT1hPUworI2lmZGVmIFFOWAorICAgIGlmIChmbG93ICE9IEZMT19SVFNDICYm IGZsb3cgIT0gRkxPX0RUUkMgJiYgZmxvdyAhPSBGTE9fRFRSVCkKKyNlbmRpZiAvKiBRTlggKi8K KyNpZm5kZWYgQ09IRVJFTlQKKyAgICAgIHR0cmF3LmNfbGZsYWcgJj0gfklFWFRFTjsJCS8qIFR1 cm4gb2ZmIF5PL15WIHByb2Nlc3NpbmcgKi8KKyNlbmRpZiAvKiBDT0hFUkVOVCAqLworI2Vsc2Ug LyogT1hPUyAqLworICAgIHR0cmF3LmNfY2NbVkRJU0NBUkRdID0gdHRyYXcuY19jY1tWTE5FWFRd ID0gQ0RJU0FCTEU7CisjZW5kaWYgLyogT1hPUyAqLworICAgIHR0cmF3LmNfbGZsYWcgfD0gTk9G TFNIOwkJLyogRG9uJ3QgZmx1c2ggKi8KKyAgICB0dHJhdy5jX2lmbGFnIHw9IElHTlBBUjsJCS8q IElnbm9yZSBwYXJpdHkgZXJyb3JzICovCisjaWZkZWYgQVRUU1YKKyNpZmRlZiBCU0Q0NAorICAg IHR0cmF3LmNfaWZsYWcgJj0gfihJR05CUkt8SU5MQ1J8SUdOQ1J8SUNSTkx8SU5QQ0t8SVNUUklQ fElYQU5ZKTsKKyNlbHNlCisgICAgdHRyYXcuY19pZmxhZyAmPSB+KElHTkJSS3xJTkxDUnxJR05D UnxJQ1JOTHxJVUNMQ3xJTlBDS3xJU1RSSVB8SVhBTlkpOworI2VuZGlmIC8qIEJTRDQ0ICovCisj ZWxzZSAvKiBQT1NJWCAqLworICAgIHR0cmF3LmNfaWZsYWcgJj0gfihJR05CUkt8SU5MQ1J8SUdO Q1J8SUNSTkx8SU5QQ0t8SVNUUklQKTsKKyNlbmRpZiAvKiBBVFRTViAqLworICAgIHR0cmF3LmNf b2ZsYWcgJj0gfk9QT1NUOworICAgIHR0cmF3LmNfY2ZsYWcgJj0gfihDU0laRSk7CisgICAgdHRy YXcuY19jZmxhZyB8PSAoQ1M4fENSRUFEfEhVUENMKTsKKworI2lmZGVmIENTVE9QQgorICAgIGlm ICh4bG9jYWwpIHsKKwlpZiAoc3RvcGJpdHMgPT0gMikgeworCSAgICB0dHJhdy5jX2NmbGFnIHw9 IENTVE9QQjsJLyogMiBzdG9wIGJpdHMgKi8KKwkgICAgZGVidWcoRjEwMCwidHRwa3QgMiBzdG9w Yml0cyIsIiIsMCk7CisJfSBlbHNlIGlmIChzdG9wYml0cyA9PSAxKSB7CisJICAgIHR0cmF3LmNf Y2ZsYWcgJj0gfihDU1RPUEIpOwkvKiAxIHN0b3AgYml0ICovCisJICAgIGRlYnVnKEYxMDAsInR0 cGt0IDEgc3RvcGJpdCIsIiIsMCk7CisJfQorICAgIH0KKyNlbmRpZiAvKiBDU1RPUEIgKi8KKwor I2lmZGVmIEhXUEFSSVRZCisgICAgaWYgKGh3cGFyaXR5ICYmIHhsb2NhbCkgewkJLyogSGFyZHdh cmUgcGFyaXR5ICovCisJdHRyYXcuY19jZmxhZyB8PSBQQVJFTkI7CS8qIEVuYWJsZSBwYXJpdHkg Ki8KKyNpZmRlZiBDT01NRU5UCisvKiBVbmNvbW1lbnQgdGhpcyBvbmx5IGlmIG5lZWRlZCAtLSBJ IGRvbid0IHRoaW5rIGl0IGlzICovCisJdHRyYXcuY19jZmxhZyAmPSB+KENTSVpFKTsJLyogQ2xl YXIgb3V0IGNoYXJhY3Rlci1zaXplIG1hc2sgKi8KKwl0dHJhdy5jX2NmbGFnIHw9IENTODsJCS8q IEFuZCBzZXQgaXQgdG8gOCAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyNpZmRlZiBJR05QQVIK Kwl0dHJhdy5jX2lmbGFnIHw9IElHTlBBUjsJLyogRG9uJ3QgZGlzY2FyZCBpbmNvbWluZyBieXRl cyAqLworCWRlYnVnKEYxMDAsInR0cGt0IElHTlBBUiIsIiIsMCk7IC8qIHRoYXQgaGF2ZSBwYXJp dHkgZXJyb3JzICovCisjZW5kaWYgLyogSUdOUEFSICovCisJc3dpdGNoIChod3Bhcml0eSkgewor CSAgY2FzZSAnZSc6CQkJLyogRXZlbiAqLworCSAgICB0dHJhdy5jX2NmbGFnICY9IH4oUEFST0RE KTsKKwkgICAgZGVidWcoRjEwMCwidHRwa3QgOCBiaXRzICsgZXZlbiBwYXJpdHkiLCIiLDApOwor CSAgICBicmVhazsKKwkgIGNhc2UgJ28nOgkJCS8qIE9kZCAqLworCSAgICB0dHJhdy5jX2NmbGFn IHw9IFBBUk9ERDsKKwkgICAgZGVidWcoRjEwMCwidHRwa3QgOCBiaXRzICsgb2RkIHBhcml0eSIs IiIsMCk7CisJICAgIGJyZWFrOworCSAgY2FzZSAnbSc6CQkJLyogTWFyayAqLworCSAgY2FzZSAn cyc6CQkJLyogU3BhY2UgKi8KKwkgICAgLyogUEFSRVhUIGlzIG1lbnRpb25lZCBpbiBTVklEIGJ1 dCB0aGUgZGV0YWlscyBhcmUgbm90IGdpdmVuLiAqLworCSAgICAvKiBQQVJFWFQgaXMgbm90IGlu Y2x1ZGVkIGluIFBPU0lYIElTTy9JRUMgOTk0NS0xLiAqLworCSAgICBkZWJ1ZyhGMTAwLCJ0dHBr dCA4IGJpdHMgKyBpbnZhbGlkIHBhcml0eSIsIiIsMCk7CisJICAgIGJyZWFrOworCX0KKyAgICB9 IGVsc2UgewkJCQkvKiBXZSBoYW5kbGUgcGFyaXR5IG91cnNlbHZlcyAqLworI2VuZGlmIC8qIEhX UEFSSVRZICovCisJdHRyYXcuY19jZmxhZyAmPSB+KFBBUkVOQik7CS8qIERvbid0IGVuYWJsZSBw YXJpdHkgKi8KKyNpZmRlZiBIV1BBUklUWQorICAgIH0KKyNlbmRpZiAvKiBIV1BBUklUWSAqLwor CisjaWZkZWYgSVgzNzAKKyAgICB0dHJhdy5jX2NjWzRdID0gNDg7ICAvKiBTbyBTZXJpZXMvMSBk b2Vzbid0IGludGVycnVwdCBvbiBldmVyeSBjaGFyICovCisgICAgdHRyYXcuY19jY1s1XSA9IDE7 CisjZWxzZQorI2lmbmRlZiBWRU9GCQkJCS8qIGZvciBER1VYIHRoaXMgaXMgVkVPRiwgbm90IFZN SU4gKi8KKyAgICB0dHJhdy5jX2NjWzRdID0gMTsgICAvKiBbVk1JTl0gIHJldHVybiBtYXggb2Yg dGhpcyBtYW55IGNoYXJhY3RlcnMgb3IgKi8KKyNlbHNlCisjaWZuZGVmIE9YT1MKKyNpZmRlZiBW TUlOCisgICAgdHRyYXcuY19jY1tWTUlOXSA9IDE7CisjZW5kaWYgLyogVk1JTiAqLworI2Vsc2Ug LyogT1hPUyAqLworICAgIHR0cmF3LmNfbWluID0gMTsKKyNlbmRpZiAvKiBPWE9TICovCisjZW5k aWYgLyogVkVPRiAqLworI2lmbmRlZiBWRU9MCQkJCS8qIGZvciBER1VYIHRoaXMgaXMgVkVPTCwg bm90IFZUSU1FICovCisgICAgdHRyYXcuY19jY1s1XSA9IDA7CSAvKiBbVlRJTUVdIHdoZW4gdGhp cyBtYW55IHNlY3MvMTAgZXhwaXJlIHcvbm8gaW5wdXQgKi8KKyNlbHNlCisjaWZuZGVmIE9YT1MK KyNpZmRlZiBWVElNRQorICAgIHR0cmF3LmNfY2NbVlRJTUVdID0gMDsKKyNlbmRpZiAvKiBWVElN RSAqLworI2Vsc2UgLyogT1hPUyAqLworICAgIHR0cmF3LmNfdGltZSA9IDA7CisjZW5kaWYgLyog T1hPUyAqLworI2VuZGlmIC8qIFZFT0wgKi8KKyNlbmRpZiAvKiBJWDM3MCAqLworCisjaWZkZWYg VklOVFIJCQkJLyogVHVybiBvZmYgaW50ZXJydXB0IGNoYXJhY3RlciAqLworICAgIGlmICh4bG9j YWwgPT0gMCkJCQkvKiBzbyBeQ15DIGNhbiBicmVhayB1cyBvdXQgb2YgKi8KKyAgICAgIHR0cmF3 LmNfY2NbVklOVFJdID0gMDsJCS8qIHBhY2tldCBtb2RlLiAqLworI2VuZGlmIC8qIFZJTlRSICov CisKKyNpZmRlZiBQbGFuOQorICAgIGlmIChwOXR0eXBhcml0eSgnbicpIDwgMCkKKwlyZXR1cm4g LTE7CisjZWxzZQorI2lmZGVmIEJTRDQ0T1JQT1NJWAorICAgIGVycm5vID0gMDsKKyNpZmRlZiBC RU9TT1JCRUJPWAorICAgIHR0cmF3LmNfY2NbVk1JTl0gPSAwOwkJLyogRFI3IGNhbiBvbmx5IHBv bGwuICovCisjZW5kaWYgLyogQkVPU09SQkVCT1ggKi8KKworI2RlZmluZSBURVNUSU5HMjM0Cisj aWZkZWYgVEVTVElORzIzNAorICAgIGlmICgxKSB7CisJZGVidWcoRjEwMCwidHRwa3QgVEVTVElO RzIzNCByYXdtb2RlIiwiIiwwKTsKKworCS8qIGlmbGFncyAqLworCXR0cmF3LmNfaWZsYWcgJj0g fihQQVJNUkt8SVNUUklQfEJSS0lOVHxJTkxDUnxJR05DUnxJQ1JOTCk7CisJdHRyYXcuY19pZmxh ZyAmPSB+KElOUENLfElHTlBBUnxJWE9OfElYT0ZGKTsKKwl0dHJhdy5jX2lmbGFnIHw9IElHTkJS SzsKKyNpZmRlZiBJTUFYQkVMCisJdHRyYXcuY19pZmxhZyAmPSB+SU1BWEJFTDsKKyNlbmRpZgkv KiBJTUFYQkVMICovCisjaWZkZWYgSVhBTlkKKwl0dHJhdy5jX2lmbGFnICY9IH5JWEFOWTsKKyNl bmRpZgkvKiBJWEFOWSAqLworI2lmZGVmIElVQ0xDCisJdHRyYXcuY19pZmxhZyAmPSB+SVVDTEM7 CisjZW5kaWYgLyogSVVDTEMgKi8KKworCS8qIG9mbGFncyAqLworCXR0cmF3LmNfb2ZsYWcgJj0g fk9QT1NUOworI2lmZGVmIE9YVEFCUworCXR0cmF3LmNfb2ZsYWcgJj0gfk9YVEFCUzsKKyNlbmRp ZiAvKiBPWFRBQlMgKi8KKyNpZmRlZiBPTk9DUgorCXR0cmF3LmNfb2ZsYWcgJj0gfk9OT0NSOwor I2VuZGlmIC8qIE9OT0NSICovCisjaWZkZWYgT05MUkVUCisJdHRyYXcuY19vZmxhZyAmPSB+T05M UkVUOworI2VuZGlmIC8qIE9OTFJFVCAqLworI2lmZGVmIE9OTENSCisJdHRyYXcuY19vZmxhZyAm PSB+T05MQ1I7CisjZW5kaWYgLyogT05MQ1IgKi8KKworCS8qIGxmbGFncyAqLworCXR0cmF3LmNf bGZsYWcgJj0gfkVDSE87CisjaWZkZWYgRUNIT0UKKwl0dHJhdy5jX2xmbGFnICY9IH5FQ0hPRTsK KyNlbmRpZiAvKiBFQ0hPRSAqLworI2lmZGVmIEVDSE9OTAorCXR0cmF3LmNfbGZsYWcgJj0gfkVD SE9OTDsKKyNlbmRpZiAvKiBFQ0hPTkwgKi8KKyNpZmRlZiBFQ0hPUFJUCisJdHRyYXcuY19sZmxh ZyAmPSB+RUNIT1BSVDsKKyNlbmRpZiAvKiBFQ0hPUFJUICovCisjaWZkZWYgRUNIT0tFCisJdHRy YXcuY19sZmxhZyAmPSB+RUNIT0tFOworI2VuZGlmIC8qIEVDSE9LRSAqLworI2lmZGVmIEVDSE9D VEwKKwl0dHJhdy5jX2xmbGFnICY9IH5FQ0hPQ1RMOworI2VuZGlmIC8qIEVDSE9DVEwgKi8KKyNp ZmRlZiBBTFRXRVJBU0UKKwl0dHJhdy5jX2xmbGFnICY9IH5BTFRXRVJBU0U7CisjZW5kaWYgLyog QUxUV0VSQVNFICovCisjaWZkZWYgRVhUUFJPQworCXR0cmF3LmNfbGZsYWcgJj0gfkVYVFBST0M7 CisjZW5kaWYgLyogRVhUUFJPQyAqLworCXR0cmF3LmNfbGZsYWcgJj0gfihJQ0FOT058SVNJR3xJ RVhURU58VE9TVE9QfEZMVVNIT3xQRU5ESU4pOworI2lmZGVmIE5PS0VSTklORk8KKwl0dHJhdy5j X2xmbGFnIHw9IE5PS0VSTklORk87CisjZW5kaWYJLyogTk9LRVJOSU5GTyAqLworCS8qIHR0cmF3 LmNfbGZsYWcgfD0gTk9GTFNIOyAqLworCXR0cmF3LmNfbGZsYWcgJj0gfk5PRkxTSDsKKworCS8q IGNmbGFncyAqLworCXR0cmF3LmNfY2ZsYWcgJj0gfihDU0laRXxQQVJFTkJ8UEFST0REKTsKKwl0 dHJhdy5jX2NmbGFnIHw9IENTOHxDUkVBRDsKKyNpZmRlZiBWTUlOCisJdHRyYXcuY19jY1tWTUlO XSA9IDE7CQkvKiBTdXBwb3NlZGx5IG5lZWRlZCBmb3IgQUlYICovCisjZW5kaWYJLyogVk1JTiAq LworCisgICAgfQorI2VuZGlmIC8qIFRFU1RJTkcyMzQgKi8KKworICAgIGRlYnVnKEYxMDAsInR0 cGt0IGNhbGxpbmcgdGNzZXRhdHRyKFRDU0VUQVcpIiwiIiwwKTsKKyAgICB4ID0gdGNzZXRhdHRy KHR0eWZkLFRDU0FEUkFJTiwmdHRyYXcpOworICAgIGRlYnVnKEYxMDEsInR0cGt0IEJTRDQ0T1JQ T1NJWCB0Y3NldGF0dHIiLCIiLHgpOworICAgIGlmICh4IDwgMCkgeworCWRlYnVnKEYxMDEsInR0 cGt0IEJTRDQ0T1JQT1NJWCB0Y3NldGF0dHIgZXJybm8iLCIiLGVycm5vKTsKKyAgICAgICAgcmV0 dXJuKC0xKTsKKyAgICB9CisjZWxzZSAvKiBCU0Q0NE9SUE9TSVggKi8KKyAgICB4ID0gaW9jdGwo dHR5ZmQsVENTRVRBVywmdHRyYXcpOworICAgIGRlYnVnKEYxMDEsInR0cGt0IEFUVFNWIGlvY3Rs IFRDU0VUQVciLCIiLHgpOworICAgIGlmICh4IDwgMCkgeyAgLyogc2V0IG5ldyBtb2RlcyAuICov CisJZGVidWcoRjEwMSwidHRwa3QgQVRUU1YgaW9jdGwgVENTRVRBVyBlcnJubyIsIiIsZXJybm8p OworICAgICAgICByZXR1cm4oLTEpOworICAgIH0KKyNlbmRpZiAvKiBCU0Q0NE9SUE9TSVggKi8K KyNlbmRpZiAvKiBQbGFuOSAqLworICAgIHR2dGZsZyA9IDA7CisgICAgZGVidWcoRjEwMCwidHRw a3Qgb2siLCIiLDApOworICAgIHJldHVybigwKTsKKyNlbmRpZiAvKiBBVFRTViAqLworCisjaWZk ZWYgQ09IRVJFTlQKKyN1bmRlZiBTVk9SUE9TSVgKKyNlbmRpZiAvKiBDT0hFUkVOVCAqLworCit9 CisKKy8qICBUIFQgUyBFIFQgRiBMIE8gVyAgLS0gIFNldCBmbG93IGNvbnRyb2wgaW1tZWRpYXRl bHkuICAqLworCisjaWZkZWYgQ09IRVJFTlQKKyNkZWZpbmUgU1ZPUlBPU0lYCisjZW5kaWYgLyog Q09IRVJFTlQgKi8KKworaW50Cit0dHNldGZsb3coZmxvdykgaW50IGZsb3c7IHsKKyAgICBpZiAo dHR5ZmQgPCAwKQkJCS8qIEEgY2hhbm5lbCBtdXN0IGJlIG9wZW4gKi8KKyAgICAgIHJldHVybigt MSk7CisKKyAgICBkZWJ1ZyhGMTAxLCJ0dHNldGZsb3cgZmxvdyIsIiIsZmxvdyk7CisKKyNpZmRl ZiBUTl9DT01QT1JUCisgICAgaWYgKG5ldGNvbm4gJiYgaXN0bmNvbXBvcnQoKSkgeworCWRlYnVn KEYxMDEsInR0c2V0ZmxvdyBuZXQgbW9kZW0iLCIiLHR0bWRtKTsKKwlyZXR1cm4odG5zZXRmbG93 KGZsb3cpKTsKKyAgICB9CisjZW5kaWYgLyogVE5fQ09NUE9SVCAqLworI2lmZGVmIE5FVENNRAor ICAgIGlmICh0dHBpcGUpIHJldHVybigwKTsKKyNlbmRpZiAvKiBORVRDTUQgKi8KKyNpZmRlZiBO RVRQVFkKKyAgICBpZiAodHRwdHkpIHJldHVybigwKTsKKyNlbmRpZiAvKiBORVRQVFkgKi8KKwor I2lmZGVmIENPTU1FTlQKKyAgICAvKiBUaGlzIHNlZW1zIHRvIGh1cnQuLi4gKi8KKyAgICBpZiAo ZmxvdyA9PSBGTE9fS0VFUCkKKyAgICAgIHJldHVybigwKTsKKyNlbmRpZiAvKiBDT01NRU5UICov CisKKyAgICBpZiAoZmxvdyA9PSBGTE9fUlRTQyB8fAkJLyogSGFyZHdhcmUgZmxvdyBjb250cm9s Li4uICovCisJZmxvdyA9PSBGTE9fRFRSQyB8fAorCWZsb3cgPT0gRkxPX0RUUlQpIHsKKwl0dGhm bG93KGZsb3csIDEsICZ0dHJhdyk7CisjaWZuZGVmIFNWT1JQT1NJWAorCXR0cmF3LnNnX2ZsYWdz ICY9IH5UQU5ERU07CS8qIFR1cm4gb2ZmIHNvZnR3YXJlIGZsb3cgY29udHJvbCAqLworI2Vsc2UK Kwl0dHJhdy5jX2lmbGFnICY9IH4oSVhPTnxJWE9GRik7CisjZW5kaWYgLyogU1ZPUlBPU0lYICov CisKKyAgICB9IGVsc2UgaWYgKGZsb3cgPT0gRkxPX1hPTlgpIHsJLyogWG9uL1hvZmYuLi4gKi8K KworI2lmbmRlZiBTVk9SUE9TSVgKKwl0dHJhdy5zZ19mbGFncyB8PSBUQU5ERU07CisjZWxzZQor CXR0cmF3LmNfaWZsYWcgfD0gKElYT058SVhPRkYpOworI2VuZGlmIC8qIFNWT1JQT1NJWCAqLwor CXR0aGZsb3coRkxPX1JUU0MsIDAsICZ0dHJhdyk7CS8qIFR1cm4gb2ZmIGhhcmR3YXJlIGZsb3cg Y29udHJvbCAqLworCisgICAgfSBlbHNlIGlmIChmbG93ID09IEZMT19OT05FKSB7CS8qIE5vIGZs b3cgY29udHJvbCAqLworCisjaWZuZGVmIFNWT1JQT1NJWAorCXR0cmF3LnNnX2ZsYWdzICY9IH5U QU5ERU07CS8qIFR1cm4gb2ZmIHNvZnR3YXJlIGZsb3cgY29udHJvbCAqLworI2Vsc2UKKwl0dHJh dy5jX2lmbGFnICY9IH4oSVhPTnxJWE9GRik7CisjZW5kaWYgLyogU1ZPUlBPU0lYICovCisJdHRo ZmxvdyhGTE9fUlRTQywgMCwgJnR0cmF3KTsJLyogVHVybiBvZmYgYW55IGhhcmR3YXJlIGYvYyB0 b28gKi8KKyAgICB9CisKKy8qIFNldCB0aGUgbmV3IG1vZGVzLi4uICovCisKKyNpZm5kZWYgU1ZP UlBPU0lYCQkJLyogQlNEIGFuZCBmcmllbmRzICovCisjaWZkZWYgQkVMTFYxMAorICAgIGlmIChp b2N0bCh0dHlmZCxUSU9DU0VUUCwmdHRyYXcpIDwgMCkKKyAgICAgIHJldHVybigtMSk7CisjZWxz ZQorI2lmbmRlZiBNSU5JWDIKKyAgICBpZiAoc3R0eSh0dHlmZCwmdHRyYXcpIDwgMCkKKyAgICAg IHJldHVybigtMSk7CisjZW5kaWYgLyogTUlOSVgyICovCisjZW5kaWYgLyogQkVMTFYxMCAqLwor I2Vsc2UKKyNpZmRlZiBCU0Q0NE9SUE9TSVgJCQkvKiBQT1NJWCAqLworICAgIGlmICh0Y3NldGF0 dHIodHR5ZmQsVENTQURSQUlOLCZ0dHJhdykgPCAwKQorICAgICAgcmV0dXJuKC0xKTsKKyNlbHNl CQkJCQkvKiBTeXN0ZW0gViAqLworICAgIGlmIChpb2N0bCh0dHlmZCxUQ1NFVEFXLCZ0dHJhdykg PCAwKQorICAgICAgcmV0dXJuKC0xKTsKKyNlbmRpZiAvKiBCU0Q0NE9SUE9TSVggKi8KKyNlbmRp ZiAvKiBTVk9SUE9TSVggKi8KKyAgICByZXR1cm4oMCk7Cit9CisjaWZkZWYgQ09IRVJFTlQKKyN1 bmRlZiBTVk9SUE9TSVgKKyNlbmRpZiAvKiBDT0hFUkVOVCAqLworCisvKiAgVCBUIFYgVCAtLSBD b25kaXRpb24gY29tbXVuaWNhdGlvbiBkZXZpY2UgZm9yIHVzZSBhcyB2aXJ0dWFsIHRlcm1pbmFs LiAqLworCitpbnQKKyNpZmRlZiBDS19BTlNJQwordHR2dChsb25nIHNwZWVkLCBpbnQgZmxvdykK KyNlbHNlCit0dHZ0KHNwZWVkLGZsb3cpIGxvbmcgc3BlZWQ7IGludCBmbG93OworI2VuZGlmIC8q IENLX0FOU0lDICovCisvKiB0dHZ0ICovIHsKKyAgICBpbnQgcywgczIsIHg7CisKKyAgICBkZWJ1 ZyhGMTAxLCJ0dHZ0IHR0eWZkIiwiIix0dHlmZCk7CisgICAgZGVidWcoRjEwMSwidHR2dCB0dnRm bGciLCIiLHR2dGZsZyk7CisgICAgZGVidWcoRjExMSwidHR2dCBzcGVlZCIsY2tpdG9hKHR0c3Bl ZWQpLHNwZWVkKTsKKyAgICBkZWJ1ZyhGMTExLCJ0dHZ0IGZsb3ciLGNraXRvYSh0dGZsb3cpLGZs b3cpOworICAgIGRlYnVnKEYxMTEsInR0dnQgY3VyY2FyciIsY2tpdG9hKHR0Y2FyciksY3VyY2Fy cik7CisKKy8qIE5vdGU6IE5ldEJTRCBhbmQgbWF5YmUgb3RoZXIgQlNENDRzIGhhdmUgY2ZtYWtl cmF3KCkgKi8KKy8qIE1heWJlIGl0IHdvdWxkIGJlIHNpbXBsZXIgdG8gdXNlIGl0Li4uICovCisK KyAgICB0dHBtc2sgPSAweGZmOworI2lmZGVmIE5PTE9DQUwKKyAgICByZXR1cm4oY29uYmluKChj aGFyKWVzY2NocikpOworI2Vsc2UKKyAgICBpZiAodHR5ZmQgPCAwKSB7CQkJLyogTm90IG9wZW4u ICovCisJaWYgKHR0Y2hrKCkgPCAwKQorCSAgcmV0dXJuKC0xKTsKKwllbHNlCQkJCS8qIEJ1dCBt YXliZSBzb21ldGhpbmcgYnVmZmVyZWQuICovCisJICByZXR1cm4oMCk7CisgICAgfQorI2lmZGVm IE5FVENNRAorICAgIGlmICh0dHBpcGUpIHJldHVybigwKTsKKyNlbmRpZiAvKiBORVRDTUQgKi8K KyNpZmRlZiBORVRQVFkKKyAgICBpZiAodHRwdHkpIHJldHVybigwKTsKKyNlbmRpZiAvKiBORVRQ VFkgKi8KKyNpZmRlZiBORVRDT05OCisgICAgaWYgKG5ldGNvbm4pIHsKKyNpZmRlZiBUQ1BTT0NL RVQKKyNpZmRlZiBUQ1BfTk9ERUxBWQorICAgICAgICB7CisJICAgIGV4dGVybiBpbnQgdGNwX25v ZGVsYXk7CisJICAgIGlmICh0dG5ldCA9PSBORVRfVENQQikgeworCQlpZiAobm9kZWxheV9zYXYg PiAtMSkgeworCQkgICAgbm9fZGVsYXkodHR5ZmQsbm9kZWxheV9zYXYpOworCQkgICAgbm9kZWxh eV9zYXYgPSAtMTsKKwkJfQorCSAgICB9CisgICAgICAgIH0KKyNlbmRpZiAvKiBUQ1BfTk9ERUxB WSAqLworI2lmZGVmIFROX0NPTVBPUlQKKyAgICAgICAgaWYgKGlzdG5jb21wb3J0KCkpIHsKKyAg ICAgICAgICAgIGludCByYyA9IC0xOworICAgICAgICAgICAgaWYgKHR2dGZsZyAhPSAwICYmIHNw ZWVkID09IHR0c3BlZWQgJiYgZmxvdyA9PSB0dGZsb3cKKyAgICAgICAgICAgICAgICAgLyogJiYg dHRjYXJyID09IGN1cmNhcnIgKi8gKSB7CisgICAgICAgICAgICAgICAgZGVidWcoRjEwMCwidHR2 dCBtb2RlcyBhbHJlYWR5IHNldCwgc2tpcHBpbmcuLi4iLCIiLDApOworICAgICAgICAgICAgICAg IHJldHVybigwKTsJCQkvKiBBbHJlYWR5IGJlZW4gY2FsbGVkLiAqLworICAgICAgICAgICAgfQor ICAgICAgICAgICAgaWYgKGZsb3cgIT0gdHRmbG93KSB7CisgICAgICAgICAgICAgICAgaWYgKChy YyA9IHRuc2V0ZmxvdyhmbG93KSkgPCAwKQorCQkgIHJldHVybihyYyk7CisgICAgICAgICAgICAg ICAgdHRmbG93ID0gZmxvdzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzcGVlZCAh PSB0dHNwZWVkKSB7CisgICAgICAgICAgICAgICAgaWYgKHNwZWVkIDw9IDApIAorCQkgIHNwZWVk ID0gdG5jX2dldF9iYXVkKCk7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoKHJjID0gdG5jX3Nl dF9iYXVkKHNwZWVkKSkgPCAwKQorCQkgIHJldHVybihyYyk7CisgICAgICAgICAgICAgICAgdHRz cGVlZCA9IHNwZWVkOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdG5jX3NldF9kYXRhc2l6 ZSg4KTsKKwkgICAgdG5jX3NldF9zdG9wc2l6ZShzdG9wYml0cyk7CisKKyNpZmRlZiBIV1BBUklU WQorICAgICAgICAgICAgaWYgKGh3cGFyaXR5KSB7CisgICAgICAgICAgICAgICAgc3dpdGNoICho d3Bhcml0eSkgeworCQkgIGNhc2UgJ2UnOgkJLyogRXZlbiAqLworICAgICAgICAgICAgICAgICAg ICBkZWJ1ZyhGMTAwLCJ0dHJlcyA4IGJpdHMgKyBldmVuIHBhcml0eSIsIiIsMCk7CisgICAgICAg ICAgICAgICAgICAgIHRuY19zZXRfcGFyaXR5KDMpOworICAgICAgICAgICAgICAgICAgICBicmVh azsKKwkJICBjYXNlICdvJzoJCS8qIE9kZCAqLworICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhG MTAwLCJ0dHJlcyA4IGJpdHMgKyBvZGQgcGFyaXR5IiwiIiwwKTsKKyAgICAgICAgICAgICAgICAg ICAgdG5jX3NldF9wYXJpdHkoMik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCQkgIGNh c2UgJ20nOgkJLyogTWFyayAqLworICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJ0dHJl cyA4IGJpdHMgKyBpbnZhbGlkIHBhcml0eTogbWFyayIsIiIsMCk7CisgICAgICAgICAgICAgICAg ICAgIHRuY19zZXRfcGFyaXR5KDQpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKwkJICBj YXNlICdzJzoJCS8qIFNwYWNlICovCisgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDAsInR0 cmVzIDggYml0cyArIGludmFsaWQgcGFyaXR5OiBzcGFjZSIsIiIsMCk7CisgICAgICAgICAgICAg ICAgICAgIHRuY19zZXRfcGFyaXR5KDUpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UKKyNlbmRpZiAvKiBIV1BBUklUWSAq LworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRuY19zZXRfcGFyaXR5KDEpOwkvKiBO b25lICovCisgICAgICAgICAgICB9CisgICAgICAgICAgICB0dnRmbGcgPSAxOworICAgICAgICAg ICAgcmV0dXJuKDApOworICAgICAgICB9CisjZW5kaWYgLyogVE5fQ09NUE9SVCAqLworI2VuZGlm IC8qIFRDUFNPQ0tFVCAqLworCXR2dGZsZyA9IDE7CQkJLyogTmV0d29yayBjb25uZWN0aW9ucy4u LiAqLworCWRlYnVnKEYxMDAsInR0dnQgbmV0d29yayBjb25uZWN0aW9uLCBza2lwcGluZy4uLiIs IiIsMCk7CisJcmV0dXJuKDApOwkJCS8qIC4uLiByZXF1aXJlIG5vIHNwZWNpYWwgc2V0dXAgKi8K KyAgICB9CisjZW5kaWYgLyogTkVUQ09OTiAqLworCisgICAgaWYgKHR2dGZsZyAhPSAwICYmIHNw ZWVkID09IHR0c3BlZWQgJiYgZmxvdyA9PSB0dGZsb3cKKwkvKiAmJiB0dGNhcnIgPT0gY3VyY2Fy ciAqLyApCisgICAgICB7CisJICBkZWJ1ZyhGMTAwLCJ0dHZ0IG1vZGVzIGFscmVhZHkgc2V0LCBz a2lwcGluZy4uLiIsIiIsMCk7CisJICByZXR1cm4oMCk7CQkJLyogQWxyZWFkeSBiZWVuIGNhbGxl ZC4gKi8KKyAgICAgIH0KKworICAgIGlmICh0dGZkZmxnCisjaWZuZGVmIFBsYW45CisJJiYgIWlz YXR0eSh0dHlmZCkKKyNlbmRpZiAvKiBQbGFuOSAqLworCSkgeworCWRlYnVnKEYxMDAsInR0dnQg dXNpbmcgZXh0ZXJuYWwgZmQsIHNraXBwaW5nLi4uIiwiIiwwKTsKKwlyZXR1cm4oMCk7CisgICAg fQorCisgICAgZGVidWcoRjEwMCwidHR2dCBzZXR0aW5nIG1vZGVzLi4uIiwiIiwwKTsKKworICAg IGlmICh4bG9jYWwpIHsJCQkvKiBGb3IgZXh0ZXJuYWwgbGluZXMuLi4gKi8KKwlzMiA9IChpbnQp IChzcGVlZCAvIDEwTCk7CisJcyA9IHR0c3NwZChzMik7CQkJLyogQ2hlY2svc2V0IHRoZSBzcGVl ZCAqLworCWNhcnJjdGwoJnR0dHZ0LCBmbG93ICE9IEZMT19ESUFMIC8qIERvIGNhcnJpZXIgY29u dHJvbCAqLworCQkmJiAodHRjYXJyID09IENBUl9PTiB8fCAodHRjYXJyID09IENBUl9BVVQgJiYg dHRtZG0gIT0gMCkpKTsKKyAgICB9IGVsc2UKKyAgICAgIHMgPSBzMiA9IC0xOworCisjaWZkZWYg Q09IRVJFTlQKKyNkZWZpbmUgU1ZPUlBPU0lYCisjZW5kaWYgLyogQ09IRVJFTlQgKi8KKworI2lm bmRlZiBTVk9SUE9TSVgKKyAgICAvKiBCZXJrZWxleSwgVjcsIGV0YyAqLworICAgIGlmIChmbG93 ID09IEZMT19SVFNDIHx8CQkvKiBIYXJkd2FyZSBmbG93IGNvbnRyb2wgKi8KKwlmbG93ID09IEZM T19EVFJDIHx8CisJZmxvdyA9PSBGTE9fRFRSVCkgeworCXR0aGZsb3coZmxvdywgMSwgJnR0dHZ0 KTsKKwlkZWJ1ZyhGMTAwLCJ0dHZ0IGhhcmQgZmxvdywgVEFOREVNIG9mZiIsIiIsMCk7CisJdHR0 dnQuc2dfZmxhZ3MgJj0gflRBTkRFTTsJLyogVHVybiBvZmYgc29mdHdhcmUgZmxvdyBjb250cm9s ICovCisgICAgfSBlbHNlIGlmIChmbG93ID09IEZMT19YT05YKSB7CS8qIFhvbi9Yb2ZmIGZsb3cg Y29udHJvbCAqLworCWRlYnVnKEYxMDAsInR0dnQgVEFOREVNIG9uIiwiIiwwKTsKKwl0dHR2dC5z Z19mbGFncyB8PSBUQU5ERU07CS8qIEFzayBmb3IgaXQuICovCisJdHRoZmxvdyhmbG93LCAwLCAm dHR0dnQpOwkvKiBUdXJuIG9mZiBoYXJkd2FyZSBmL2MgKi8KKyAgICB9IGVsc2UgaWYgKGZsb3cg PT0gRkxPX05PTkUpIHsKKwlkZWJ1ZyhGMTAwLCJ0dHZ0IG5vIGZsb3csIFRBTkRFTSBvZmYsIFJB VyBvbiIsIiIsMCk7CisJdHR0dnQuc2dfZmxhZ3MgJj0gflRBTkRFTTsJLyogVHVybiBvZmYgc29m dHdhcmUgZmxvdyBjb250cm9sICovCisJdHRoZmxvdyhmbG93LCAwLCAmdHR0dnQpOwkvKiBUdXJu IG9mZiBhbnkgaGFyZHdhcmUgZi9jIHRvbyAqLworCXR0dHZ0LnNnX2ZsYWdzIHw9IFJBVzsJCS8q IEVudGVyIHJhdyBtb2RlICovCisgICAgfSBlbHNlIGlmIChmbG93ID09IEZMT19LRUVQKSB7CS8q IEtlZXAgZGV2aWNlJ3Mgb3JpZ2luYWwgc2V0dGluZyAqLworCWRlYnVnKEYxMDAsInR0dnQga2Vl cGluZyBvcmlnaW5hbCBUQU5ERU0iLCIiLDApOworCXR0dHZ0LnNnX2ZsYWdzICY9IH5UQU5ERU07 CisJdHR0dnQuc2dfZmxhZ3MgfD0gKHR0b2xkLnNnX2ZsYWdzICYgVEFOREVNKTsKKwkvKiBOT1RF OiBXZSBzaG91bGQgYWxzbyBoYW5kbGUgaGFyZHdhcmUgZmxvdyBjb250cm9sIGhlcmUhICovCisg ICAgfQorICAgIHR0dHZ0LnNnX2ZsYWdzIHw9IFJBVzsgICAgICAgICAgICAgIC8qIFJhdyBtb2Rl IGluIGFsbCBjYXNlcyAqLworI2lmZGVmIFRPV0VSMQorICAgIHR0dHZ0LnNnX2ZsYWdzICY9IH4o RUNIT3xBTllQKTsgICAgIC8qIE5vIGVjaG8gb3IgcGFyaXR5ICovCisjZWxzZQorICAgIHR0dHZ0 LnNnX2ZsYWdzICY9IH5FQ0hPOyAgICAgICAgICAgIC8qIE5vIGVjaG8gKi8KKyNlbmRpZiAvKiBU T1dFUjEgKi8KKworI2lmZGVmIEJFTExWMTAKKyAgICBpZiAoaW9jdGwodHR5ZmQsVElPQ1NFVFAs JnR0dHZ0KSA8IDApIC8qIFNldCB0aGUgbmV3IG1vZGVzICovCisgICAgICByZXR1cm4oLTEpOwor I2Vsc2UKKyAgICBpZiAoc3R0eSh0dHlmZCwmdHR0dnQpIDwgMCkJCS8qIFNldCB0aGUgbmV3IG1v ZGVzICovCisgICAgICByZXR1cm4oLTEpOworI2VuZGlmIC8qIEJFTExWMTAgKi8KKworI2Vsc2Ug LyogSXQgaXMgQVRUU1Ygb3IgUE9TSVggKi8KKworICAgIGlmIChmbG93ID09IEZMT19YT05YKSB7 CQkvKiBTb2Z0d2FyZSBmbG93IGNvbnRyb2wgKi8KKwl0dHR2dC5jX2lmbGFnIHw9IChJWE9OfElY T0ZGKTsJLyogT24gaWYgcmVxdWVzdGVkLiAqLworCXR0aGZsb3coZmxvdywgMCwgJnR0dHZ0KTsJ LyogVHVybiBvZmYgaGFyZHdhcmUgZi9jICovCisJZGVidWcoRjEwMCwidHR2dCBTVk9SUE9TSVgg ZmxvdyBYT04vWE9GRiIsIiIsMCk7CisgICAgfSBlbHNlIGlmIChmbG93ID09IEZMT19OT05FKSB7 CS8qIE5PTkUgKi8KKwl0dHR2dC5jX2lmbGFnICY9IH4oSVhPTnxJWE9GRik7CS8qIFR1cm4gb2Zm IFhvbi9Yb2ZmICovCisJdHRoZmxvdyhmbG93LCAwLCAmdHR0dnQpOwkvKiBUdXJuIG9mZiBoYXJk d2FyZSBmL2MgKi8KKwlkZWJ1ZyhGMTAwLCJ0dHZ0IFNWT1JQT1NJWCBmbG93IE5PTkUiLCIiLDAp OworICAgIH0gZWxzZSBpZiAoZmxvdyA9PSBGTE9fS0VFUCkgeworCXR0dHZ0LmNfaWZsYWcgJj0g fihJWE9OfElYT0ZGKTsJLyogVHVybiBvZmYgWG9uL1hvZmYgZmxhZ3MgKi8KKwl0dHR2dC5jX2lm bGFnIHw9ICh0dG9sZC5jX2lmbGFnICYgKElYT058SVhPRkYpKTsgLyogT1IgaW4gb2xkIG9uZXMg Ki8KKyNpZmRlZiBQT1NJWF9DUlRTQ1RTCisgICAgICAgIHR0dHZ0LmNfY2ZsYWcgJj0gfkNSVFND VFM7CS8qIFR1cm4gb2ZmIFJUUy9DVFMgZmxhZyAqLworICAgICAgICB0dHR2dC5jX2NmbGFnIHw9 ICh0dG9sZC5jX2NmbGFnICYgQ1JUU0NUUyk7IC8qIE9SIGluIG9sZCBvbmUgKi8KKyNlbmRpZiAv KiBQT1NJWF9DUlRTQ1RTICovCisJZGVidWcoRjEwMCwidHR2dCBTVk9SUE9TSVggZmxvdyBLRUVQ IiwiIiwwKTsKKyAgICB9IGVsc2UgaWYgKGZsb3cgPT0gRkxPX1JUU0MgfHwJLyogSGFyZHdhcmUg ZmxvdyBjb250cm9sICovCisJICAgICAgIGZsb3cgPT0gRkxPX0RUUkMgfHwKKwkgICAgICAgZmxv dyA9PSBGTE9fRFRSVCkgeworCXR0dHZ0LmNfaWZsYWcgJj0gfihJWE9OfElYT0ZGKTsJLyogKDE5 NikgKi8KKwl0dGhmbG93KGZsb3csIDEsICZ0dHR2dCk7CisJZGVidWcoRjEwMCwidHR2dCBTVk9S UE9TSVggZmxvdyBIQVJEIiwiIiwwKTsKKyAgICB9CisjaWZuZGVmIE9YT1MKKyNpZmRlZiBDT0hF UkVOVAorICAgIHR0dHZ0LmNfbGZsYWcgJj0gfihJU0lHfElDQU5PTnxFQ0hPKTsKKyNlbHNlCisg ICAgdHR0dnQuY19sZmxhZyAmPSB+KElTSUd8SUNBTk9OfEVDSE98SUVYVEVOKTsKKyNlbmRpZiAv KiBDT0hFUkVOVCAqLworI2lmZGVmIFFOWAorICAgIC8qIE5lZWRlZCBmb3IgaHdmYyAqLworICAg IGlmIChmbG93ID09IEZMT19SVFNDIHx8IGZsb3cgPT0gRkxPX0RUUkMgfHwgZmxvdyA9PSBGTE9f RFRSVCkKKyAgICAgIHR0dHZ0LmNfbGZsYWcgfD0gSUVYVEVOOworI2VuZGlmIC8qIFFOWCAqLwor I2Vsc2UgLyogT1hPUyAqLworICAgIHR0dHZ0LmNfbGZsYWcgJj0gfihJU0lHfElDQU5PTnxFQ0hP KTsKKyAgICB0dHR2dC5jX2NjW1ZESVNDQVJEXSA9IHR0dHZ0LmNfY2NbVkxORVhUXSA9IENESVNB QkxFOworI2VuZGlmIC8qIE9YT1MgKi8KKworICAgIHR0dHZ0LmNfaWZsYWcgfD0gKElHTkJSS3xJ R05QQVIpOworCisvKiBTdG9wIGJpdHMgKi8KKworI2lmZGVmIENTVE9QQgorICAgIGlmICh4bG9j YWwpIHsKKwlpZiAoc3RvcGJpdHMgPT0gMikgeworCSAgICB0dHR2dC5jX2NmbGFnIHw9IENTVE9Q QjsJLyogMiBzdG9wIGJpdHMgKi8KKwkgICAgZGVidWcoRjEwMCwidHR2dCAyIHN0b3BiaXRzIiwi IiwwKTsKKwl9IGVsc2UgaWYgKHN0b3BiaXRzID09IDEpIHsKKwkgICAgdHR0dnQuY19jZmxhZyAm PSB+KENTVE9QQik7CS8qIDEgc3RvcCBiaXQgKi8KKwkgICAgZGVidWcoRjEwMCwidHR2dCAxIHN0 b3BiaXQiLCIiLDApOworCX0KKyAgICB9CisjZW5kaWYgLyogQ1NUT1BCICovCisKKy8qIFBhcml0 eSAqLworCisjaWZkZWYgSFdQQVJJVFkKKyAgICBpZiAoaHdwYXJpdHkgJiYgeGxvY2FsKSB7CQkv KiBIYXJkd2FyZSBwYXJpdHkgKi8KKyNpZmRlZiBDT01NRU5UCisvKiBVbmNvbW1lbnQgdGhpcyBv bmx5IGlmIG5lZWRlZCAtLSBJIGRvbid0IHRoaW5rIGl0IGlzICovCisJdHRyYXcuY19jZmxhZyAm PSB+KENTSVpFKTsJLyogQ2xlYXIgb3V0IGNoYXJhY3Rlci1zaXplIG1hc2sgKi8KKwl0dHJhdy5j X2NmbGFnIHw9IENTODsJCS8qIEFuZCBzZXQgaXQgdG8gOCAqLworI2VuZGlmIC8qIENPTU1FTlQg Ki8KKyNpZmRlZiBJR05QQVIKKwlkZWJ1ZyhGMTAxLCJ0dHZ0IGh3cGFyaXR5IElHTlBBUiIsIiIs SUdOUEFSKTsKKwl0dHR2dC5jX2lmbGFnIHw9IElHTlBBUjsJLyogRG9uJ3QgZGlzY2FyZCBpbmNv bWluZyBieXRlcyAqLworI2VuZGlmIC8qIElHTlBBUiAqLworCXR0dHZ0LmNfY2ZsYWcgfD0gUEFS RU5COwkvKiBFbmFibGUgcGFyaXR5ICovCisKKwlzd2l0Y2ggKGh3cGFyaXR5KSB7CisJICBjYXNl ICdlJzoJCQkvKiBFdmVuICovCisJICAgIHR0dHZ0LmNfY2ZsYWcgJj0gfihQQVJPREQpOworCSAg ICBkZWJ1ZyhGMTAwLCJ0dHZ0IDggYml0cyArIGV2ZW4gcGFyaXR5IiwiIiwwKTsKKwkgICAgYnJl YWs7CisJICBjYXNlICdvJzoJCQkvKiBPZGQgKi8KKwkgICAgdHR0dnQuY19jZmxhZyB8PSBQQVJP REQ7CisJICAgIGRlYnVnKEYxMDAsInR0dnQgOCBiaXRzICsgb2RkIHBhcml0eSIsIiIsMCk7CisJ ICAgIGJyZWFrOworCSAgY2FzZSAnbSc6CQkJLyogTWFyayAqLworCSAgY2FzZSAncyc6CQkJLyog U3BhY2UgKi8KKwkgICAgLyogUEFSRVhUIGlzIG1lbnRpb25lZCBpbiBTVklEIGJ1dCB0aGUgZGV0 YWlscyBhcmUgbm90IGdpdmVuLiAqLworCSAgICAvKiBQQVJFWFQgaXMgbm90IGluY2x1ZGVkIGlu IFBPU0lYIElTTy9JRUMgOTk0NS0xLiAqLworCSAgICBkZWJ1ZyhGMTAwLCJ0dHZ0IDggYml0cyAr IGludmFsaWQgcGFyaXR5IiwiIiwwKTsKKwkgICAgYnJlYWs7CisJfQorICAgIH0gZWxzZSB7CQkJ CS8qIFdlIGhhbmRsZSBwYXJpdHkgb3Vyc2VsdmVzICovCisjZW5kaWYgLyogSFdQQVJJVFkgKi8K Kwl0dHR2dC5jX2NmbGFnICY9IH4oUEFSRU5CKTsJLyogRG9uJ3QgZW5hYmxlIHBhcml0eSAqLwor I2lmZGVmIEhXUEFSSVRZCisgICAgfQorI2VuZGlmIC8qIEhXUEFSSVRZICovCisKKyNpZmRlZiBB VFRTVgorI2lmZGVmIEJTRDQ0CisgICAgLyogVGhpbmdzIG5vdCB0byBkby4uLiAqLworICAgIHR0 dHZ0LmNfaWZsYWcgJj0gfihJTkxDUnxJR05DUnxJQ1JOTHxJTlBDS3xJU1RSSVB8SVhBTlkpOwor I2Vsc2UKKyAgICB0dHR2dC5jX2lmbGFnICY9IH4oSU5MQ1J8SUdOQ1J8SUNSTkx8SVVDTEN8SU5Q Q0t8SVNUUklQfElYQU5ZKTsKKyNlbmRpZiAvKiBCU0Q0NCAqLworI2Vsc2UgLyogUE9TSVggKi8K KyAgICB0dHR2dC5jX2lmbGFnICY9IH4oSU5MQ1J8SUdOQ1J8SUNSTkx8SU5QQ0t8SVNUUklQKTsK KyNlbmRpZiAvKiBBVFRTViAqLworICAgIHR0dHZ0LmNfY2ZsYWcgJj0gfihDU0laRSk7CQkvKiBa ZXJvIG91dCB0aGUgY2hhciBzaXplIGZpZWxkICovCisgICAgdHR0dnQuY19jZmxhZyB8PSAoQ1M4 fENSRUFEfEhVUENMKTsJLyogQ2hhciBzaXplIDgsIGVuYWJsZSByZWNlaXZlciwgaHVwICovCisg ICAgdHR0dnQuY19vZmxhZyAmPSB+T1BPU1Q7CQkvKiBEb24ndCBwb3N0cHJvY2VzcyBvdXRwdXQg Ki8KKyNpZm5kZWYgVkVPRiAvKiBER1VYIHRlcm1pbyBoYXMgVkVPRiBhdCBlbnRyeSA0LCBzZWUg Y29tbWVudCBhYm92ZSAqLworICAgIHR0dHZ0LmNfY2NbNF0gPSAxOworI2Vsc2UKKyNpZm5kZWYg T1hPUworI2lmZGVmIFZNSU4KKyAgICB0dHR2dC5jX2NjW1ZNSU5dID0gMTsKKyNlbmRpZiAvKiBW TUlOICovCisjZWxzZSAvKiBPWE9TICovCisgICAgdHR0dnQuY19taW4gPSAxOworI2VuZGlmIC8q IE9YT1MgKi8KKyNlbmRpZiAvKiBWRU9GICovCisjaWZuZGVmIFZFT0wJLyogREdVWCB0ZXJtaW8g aGFzIFZFT0wgYXQgZW50cnkgNSwgc2VlIGNvbW1lbnQgYWJvdmUgKi8KKyAgICB0dHR2dC5jX2Nj WzVdID0gMDsKKyNlbHNlCisjaWZuZGVmIE9YT1MKKyNpZmRlZiBWVElNRQorICAgIHR0dHZ0LmNf Y2NbVlRJTUVdID0gMDsKKyNlbmRpZiAvKiBWVElNRSAqLworI2Vsc2UgLyogT1hPUyAqLworICAg IHR0dHZ0LmNfdGltZSA9IDA7CisjZW5kaWYgLyogT1hPUyAqLworI2VuZGlmIC8qIFZFT0wgKi8K KworI2lmZGVmIFBsYW45CisgICAgaWYgKHA5dHR5cGFyaXR5KCduJykgPCAwKQorICAgICAgcmV0 dXJuIC0xOworI2Vsc2UKKyNpZmRlZiBCU0Q0NE9SUE9TSVgKKyAgICBlcnJubyA9IDA7CisjaWZk ZWYgQkVPU09SQkVCT1gKKyAgICB0dHR2dC5jX2NjW1ZNSU5dID0gMDsJCS8qIERSNyBjYW4gb25s eSBwb2xsLiAqLworI2VuZGlmIC8qIEJFT1NPUkJFQk9YICovCisKKyAgICB4ID0gdGNzZXRhdHRy KHR0eWZkLFRDU0FEUkFJTiwmdHR0dnQpOworICAgIGRlYnVnKEYxMDEsInR0dnQgQlNENDRPUlBP U0lYIHRjc2V0YXR0ciIsIiIseCk7CisgICAgaWYgKHggPCAwKSB7CisJZGVidWcoRjEwMSwidHR2 dCBCU0Q0NE9SUE9TSVggdGNzZXRhdHRyIGVycm5vIiwiIixlcnJubyk7CisJcmV0dXJuKC0xKTsK KyAgICB9CisjZWxzZSAvKiBBVFRTViAqLworICAgIHggPSBpb2N0bCh0dHlmZCxUQ1NFVEFXLCZ0 dHR2dCk7CisgICAgZGVidWcoRjEwMSwidHR2dCBBVFRTViBpb2N0bCBUQ1NFVEFXIiwiIix4KTsK KyAgICBpZiAoeCA8IDApIHsJCQkvKiBzZXQgbmV3IG1vZGVzIC4gKi8KKwlkZWJ1ZyhGMTAxLCJ0 dHZ0IEFUVFNWIGlvY3RsIFRDU0VUQVcgZXJybm8iLCIiLGVycm5vKTsKKwlyZXR1cm4oLTEpOwkK KyAgICB9CisjZW5kaWYgLyogQlNENDRPUlBPU0lYICovCisjZW5kaWYgLyogUGxhbjkgKi8KKyNl bmRpZiAvKiBBVFRTViAqLworCisgICAgdHRzcGVlZCA9IHNwZWVkOwkJCS8qIERvbmUsIHJlbWVt YmVyIGhvdyB3ZSB3ZXJlICovCisgICAgdHRmbG93ID0gZmxvdzsJCQkvKiBjYWxsZWQsIHNvIHdl IGNhbiBkZWNpZGUgaG93IHRvICovCisgICAgdHZ0ZmxnID0gMTsJCQkJLyogcmVzcG9uZCBuZXh0 IHRpbWUuICovCisgICAgZGVidWcoRjEwMCwidHR2dCBvayIsIiIsMCk7CisgICAgcmV0dXJuKDAp OworCisjaWZkZWYgQ09IRVJFTlQKKyN1bmRlZiBTVk9SUE9TSVgKKyNlbmRpZiAvKiBDT0hFUkVO VCAqLworCisjZW5kaWYgLyogTk9MT0NBTCAqLworfQorCisjaWZuZGVmIE5PTE9DQUwKKworLyog U2VyaWFsIHNwZWVkIGRlcGFydG1lbnQgLiAuIC4gKi8KKworLyoKKyAgU0NPIE9TUjUuMC54IG1p Z2h0IG9yIG1pZ2h0IG5vdCBzdXBwb3J0IGhpZ2ggc3BlZWRzLiAgU29tZXRpbWVzIHRoZXkgYXJl IG5vdAorICBkZWZpbmVkIGluIHRoZSBoZWFkZXIgZmlsZXMgYnV0IHRoZXkgYXJlIHN1cHBvcnRl ZCAoZS5nLiB3aGVuIGJ1aWxkaW5nIHdpdGgKKyAgVURLIGNvbXBpbGVyIHJhdGhlciB0aGFuIC9i aW4vY2MpLCBzb21ldGltZXMgdmljZSB2ZXJzYS4gIEV2ZW4gdGhvdWdoIDUuMC40CisgIHdhcyB0 aGUgZmlyc3QgcmVsZWFzZSB0aGF0IGNhbWUgd2l0aCBoaWdoIHNlcmlhbCBzcGVlZHMgc3RhbmRh cmQsIHJlbGVhc2VzCisgIGJhY2sgdG8gNS4wLjAgY291bGQgdXNlIHRoZW0gaWYgY2VydGFpbiBw YXRjaGVzIChvciAic3VwcGxlbWVudHMiKSB3ZXJlCisgIGFwcGxpZWQgdG8gdGhlIFNJTyBkcml2 ZXIuICBQbHVzIGEgbG90IG9mIFNDTyBpbnN0YWxsYXRpb25zIHJ1biB0aGlyZC1wYXJ0eQorICBk cml2ZXJzLgorKi8KKyNpZmRlZiBDS19TQ09WNQorI2lmbmRlZiBCMzg0MDAKKyNkZWZpbmUJQjM4 NDAwCTAwMDAwMTcKKyNlbmRpZiAvKiBCMzg0MDAgKi8KKyNpZm5kZWYgQjU3NjAwCisjZGVmaW5l CUI1NzYwMAkwMDAwMDIxCisjZW5kaWYgLyogQjU3NjAwICovCisjaWZuZGVmIEI3NjgwMAorI2Rl ZmluZQlCNzY4MDAJMDAwMDAyMgorI2VuZGlmIC8qIEI3NjgwMCAqLworI2lmbmRlZiBCMTE1MjAw CisjZGVmaW5lCUIxMTUyMDAJMDAwMDAyMworI2VuZGlmIC8qIEIxMTUyMDAgKi8KKyNpZm5kZWYg QjIzMDQwMAorI2RlZmluZQlCMjMwNDAwCTAwMDAwMjQKKyNlbmRpZiAvKiBCMjMwNDAwICovCisj aWZuZGVmIEI0NjA4MDAKKyNkZWZpbmUJQjQ2MDgwMAkwMDAwMDI1CisjZW5kaWYgLyogQjQ2MDgw MCAqLworI2lmbmRlZiBCOTIxNjAwCisjZGVmaW5lCUI5MjE2MDAJMDAwMDAyNgorI2VuZGlmIC8q IEI5MjE2MDAgKi8KKyNlbmRpZiAvKiBDS19TQ09WNSAqLworLyoKKyAgUGxhbiA5J3MgbmF0aXZl IHNwZWVkIHNldHRpbmcgaW50ZXJmYWNlIGxldHMgeW91IHNldCBhbnl0aGluZyB5b3UgbGlrZSwK KyAgYnV0IHdpbGwgZmFpbCBpZiB0aGUgaGFyZHdhcmUgZG9lc24ndCBsaWtlIGl0LCBzbyB3ZSBh bGxvdyBhbGwgdGhlIGNvbW1vbgorICBzcGVlZHMuCisqLworI2lmZGVmIFBsYW45CisjaWZuZGVm IEI1MAorI2RlZmluZSBCNTAgNTAKKyNlbmRpZiAvKiBCNTAgKi8KKyNpZm5kZWYgQjc1CisjZGVm aW5lIEI3NSA3NQorI2VuZGlmIC8qIEI3NSAqLworI2lmbmRlZiBCMTEwCisjZGVmaW5lIEIxMTAg MTEwCisjZW5kaWYgLyogQjExMCAqLworI2lmbmRlZiBCMTM0CisjZGVmaW5lIEIxMzQgMTM0Cisj ZW5kaWYgLyogQjEzNCAqLworI2lmbmRlZiBCMjAwCisjZGVmaW5lIEIyMDAgMjAwCisjZW5kaWYg LyogQjIwMCAqLworI2lmbmRlZiBCMzAwCisjZGVmaW5lIEIzMDAgMzAwCisjZW5kaWYgLyogQjMw MCAqLworI2lmbmRlZiBCMTIwMAorI2RlZmluZSBCMTIwMCAxMjAwCisjZW5kaWYgLyogQjEyMDAg Ki8KKyNpZm5kZWYgQjE4MDAKKyNkZWZpbmUgQjE4MDAgMTgwMAorI2VuZGlmIC8qIEIxODAwICov CisjaWZuZGVmIEIyNDAwCisjZGVmaW5lIEIyNDAwIDI0MDAKKyNlbmRpZiAvKiBCMjQwMCAqLwor I2lmbmRlZiBCNDgwMAorI2RlZmluZSBCNDgwMCA0ODAwCisjZW5kaWYgLyogQjQ4MDAgKi8KKyNp Zm5kZWYgQjk2MDAKKyNkZWZpbmUgQjk2MDAgOTYwMAorI2VuZGlmIC8qIEI5NjAwICovCisjaWZu ZGVmIEIxNDQwMAorI2RlZmluZSBCMTQ0MDAgMTQ0MDAKKyNlbmRpZiAvKiBCMTQ0MDAgKi8KKyNp Zm5kZWYgQjE5MjAwCisjZGVmaW5lIEIxOTIwMCAxOTIwMAorI2VuZGlmIC8qIEIxOTIwMCAqLwor I2lmbmRlZiBCMjg4MDAKKyNkZWZpbmUgQjI4ODAwIDI4ODAwCisjZW5kaWYgLyogQjI4ODAwICov CisjaWZuZGVmIEIzODQwMAorI2RlZmluZSBCMzg0MDAgMzg0MDAKKyNlbmRpZiAvKiBCMzg0MDAg Ki8KKyNpZm5kZWYgQjU3NjAwCisjZGVmaW5lIEI1NzYwMCA1NzYwMAorI2VuZGlmIC8qIEI1NzYw MCAqLworI2lmbmRlZiBCNzY4MDAKKyNkZWZpbmUgQjc2ODAwIDc2ODAwCisjZW5kaWYgLyogQjc2 ODAwICovCisjaWZuZGVmIEIxMTUyMDAKKyNkZWZpbmUgQjExNTIwMCAxMTUyMDAKKyNlbmRpZiAv KiBCMTE1MjAwICovCisjaWZuZGVmIEIyMzA0MDAKKyNkZWZpbmUgQjIzMDQwMCAyMzA0MDAKKyNl bmRpZiAvKiBCMjMwNDAwICovCisjaWZuZGVmIEI0NjA4MDAKKyNkZWZpbmUgQjQ2MDgwMCA0NjA4 MDAKKyNlbmRpZiAvKiBCNDYwODAwICovCisjaWZuZGVmIEI5MjE2MDAKKyNkZWZpbmUgQjkyMTYw MCA5MjE2MDAKKyNlbmRpZiAvKiBCOTIxNjAwICovCisjZW5kaWYgLyogUGxhbjkgKi8KKworLyog IFQgVCBTIFMgUCBEICAtLSAgQ2hlY2tzIGFuZCBzZXRzIHRyYW5zbWlzc2lvbiByYXRlLiAgKi8K KworLyogIENhbGwgd2l0aCBzcGVlZCBpbiBjaGFyYWN0ZXJzIChub3QgYml0cyEpIHBlciBzZWNv bmQuICovCisvKiAgUmV0dXJucyAtMSBvbiBmYWlsdXJlLCAwIGlmIGl0IGRpZCBub3RoaW5nLCAx IGlmIGl0IGNoYW5nZWQgdGhlIHNwZWVkLiAqLworCisjaWZkZWYgVVNFVENTRVRTUEVFRAorLyoK KyAgVGhlIHRjc2V0c3BlZWQoKSAvIHRjZ2V0c3BlZWQoKSBpbnRlcmZhY2UgbGV0cyB5b3UgcGFz cyBhbnkgbnVtYmVyIGF0IGFsbAorICB0byBiZSB1c2VkIGFzIGEgc3BlZWQgdG8gYmUgc2V0LCBy YXRoZXIgdGhhbiBmb3JjaW5nIGEgY2hvaWNlIGZyb20gYQorICBwcmVkZWZpbmVkIGxpc3QuICBJ dCBzZWVtcyB0byBiZSBwZWN1bGlhciB0byBVbml4V2FyZSA3LgorCisgIFRoZXNlIGFyZSB0aGUg ZnVuY3Rpb24gY29kZXMgdG8gYmUgcGFzc2VkIHRvIHRjW2dzXWV0c3BlZWQoKSwKKyAgYnV0IGZv ciBzb21lIHJlYXNvbiB0aGV5IGRvbid0IHNlZW0gdG8gYmUgcGlja2VkIHVwIGZyb20gdGVybWlv cy5oLgorKi8KKyNpZm5kZWYgVENTX0FMTAorI2RlZmluZSBUQ1NfQUxMIDAKKyNlbmRpZiAvKiBU Q1NfQUxMICovCisjaWZuZGVmIFRDU19JTgorI2RlZmluZSBUQ1NfSU4gMQorI2VuZGlmIC8qIFRD U19JTiAqLworI2lmbmRlZiBUQ1NfT1VUCisjZGVmaW5lIFRDU19PVVQgMgorI2VuZGlmIC8qIFRD U19PVVQgKi8KKyNlbmRpZiAvKiBVU0VUQ1NFVFNQRUVEICovCisKK2ludAordHRzc3BkKGNwcykg aW50IGNwczsgeworICAgIGludCB4OworI2lmZGVmIFBPU0lYCisvKiBXYXRjaCBvdXQsIHNwZWVk X3Qgc2hvdWxkIGJlIHVuc2lnbmVkLCBzbyBkb24ndCBjb21wYXJlIHdpdGggLTEsIGV0Yy4uLiAq LworICAgIHNwZWVkX3QKKyNlbHNlCisgICAgaW50CisjZW5kaWYgLyogUE9TSVggKi8KKyAgICAg IHMsIHMyOworICAgIGludCBvayA9IDE7CQkJCS8qIFNwZWVkIGNoZWNrIHJlc3VsdCwgYXNzdW1l IG9rICovCisKKyNpZmRlZiBPTElOVVhISVNQRUVECisgICAgdW5zaWduZWQgaW50IHNwZF9mbGFn cyA9IDA7CisgICAgc3RydWN0IHNlcmlhbF9zdHJ1Y3Qgc2VyaW5mbzsKKyNlbmRpZiAvKiBPTElO VVhISVNQRUVEICovCisKKyAgICBkZWJ1ZyhGMTAxLCJ0dHNzcGQgY3BzIiwiIixjcHMpOworICAg IGRlYnVnKEYxMDEsInR0c3NwZCB0dHlmZCIsIiIsdHR5ZmQpOworICAgIGRlYnVnKEYxMDEsInR0 c3NwZCB4bG9jYWwiLCIiLHhsb2NhbCk7CisKKyAgICBpZiAodHR5ZmQgPCAwIHx8IHhsb2NhbCA9 PSAwKQkvKiBEb24ndCBzZXQgc3BlZWQgb24gY29uc29sZSAqLworICAgICAgcmV0dXJuKDApOwor CisjaWZkZWYJTkVUQ09OTgorICAgIGlmIChuZXRjb25uKSB7CisjaWZkZWYgVE5fQ09NUE9SVAor ICAgICAgICBpZiAoaXN0bmNvbXBvcnQoKSkKKwkgIHJldHVybih0bmNfc2V0X2JhdWQoY3BzICog MTApKTsKKyAgICAgICAgZWxzZQorI2VuZGlmIC8qIFROX0NPTVBPUlQgKi8KKwlyZXR1cm4oMCk7 CisgIH0KKyNlbmRpZgkvKiBORVRDT05OICovCisjaWZkZWYgTkVUQ01ECisgICAgaWYgKHR0cGlw ZSkgcmV0dXJuKDApOworI2VuZGlmIC8qIE5FVENNRCAqLworI2lmZGVmIE5FVFBUWQorICAgIGlm ICh0dHB0eSkgcmV0dXJuKDApOworI2VuZGlmIC8qIE5FVFBUWSAqLworCisgICAgaWYgKGNwcyA8 IDApIHJldHVybigtMSk7CisgICAgcyA9IHMyID0gMDsJCQkJLyogTkI6IHMgYW5kIHMyIG1pZ2h0 IGJlIHVuc2lnbmVkICovCisKKyNpZmRlZiBVU0VUQ1NFVFNQRUVECisKKyAgICBzID0gY3BzICog MTBMOworCisgICAgeCA9IHRjZ2V0YXR0cih0dHlmZCwmdHRjdXIpOwkvKiBHZXQgY3VycmVudCBz cGVlZCAqLworICAgIGRlYnVnKEYxMDEsInR0c3NwZCB0Y2dldGF0dHIiLCIiLHgpOworICAgIGlm ICh4IDwgMCkKKyAgICAgIHJldHVybigtMSk7CisgICAgZGVidWcoRjEwMSwidHRzc3BkIFRDU0VU U1BFRUQgc3BlZWQiLCIiLHMpOworCisgICAgZXJybm8gPSAwOworICAgIGlmIChzID09IDg4ODBM KSB7CQkJLyogNzUvMTIwMCBzcGxpdCBzcGVlZCByZXF1ZXN0ZWQgKi8KKwl0Y3NldHNwZWVkKFRD U19JTiwgJnR0Y3VyLCAxMjAwTCk7CisJdGNzZXRzcGVlZChUQ1NfT1VULCAmdHRjdXIsIDc1TCk7 CisgICAgfSBlbHNlCisgICAgICB0Y3NldHNwZWVkKFRDU19BTEwsICZ0dGN1ciwgcyk7CS8qIFB1 dCBuZXcgc3BlZWQgaW4gc3RydWN0cyAqLworI2lmZGVmIERFQlVHCisgICAgaWYgKGVycm5vICYg ZGVibG9nKSB7CisJZGVidWcoRjEwMSwidHRzc3BkIFRDU0VUU1BFRUQgZXJybm8iLCIiLGVycm5v KTsKKyAgICB9CisjZW5kaWYgLyogREVCVUcgKi8KKworI2lmZGVmIENPTU1FTlQKKyAgICB0Y3Nl dHNwZWVkKFRDU19BTEwsICZ0dHJhdywgcyk7CisgICAgdGNzZXRzcGVlZChUQ1NfQUxMLCAmdHR0 dnQsIHMpOworICAgIHRjc2V0c3BlZWQoVENTX0FMTCwgJnR0b2xkLCBzKTsKKyNlbHNlCisgICAg aWYgKHMgPT0gODg4MEwpIHsJCQkvKiA3NS8xMjAwIHNwbGl0IHNwZWVkIHJlcXVlc3RlZCAqLwor CXRjc2V0c3BlZWQoVENTX0lOLCAmdHRyYXcsIDEyMDBMKTsKKwl0Y3NldHNwZWVkKFRDU19PVVQs ICZ0dHJhdywgNzVMKTsKKwl0Y3NldHNwZWVkKFRDU19JTiwgJnR0dHZ0LCAxMjAwTCk7CisJdGNz ZXRzcGVlZChUQ1NfT1VULCAmdHR0dnQsIDc1TCk7CisJdGNzZXRzcGVlZChUQ1NfSU4sICZ0dG9s ZCwgMTIwMEwpOworCXRjc2V0c3BlZWQoVENTX09VVCwgJnR0b2xkLCA3NUwpOworICAgIH0gZWxz ZSB7CisJdGNzZXRzcGVlZChUQ1NfQUxMLCAmdHRyYXcsIHMpOworCXRjc2V0c3BlZWQoVENTX0FM TCwgJnR0dHZ0LCBzKTsKKwl0Y3NldHNwZWVkKFRDU19BTEwsICZ0dG9sZCwgcyk7CisgICAgfQor I2VuZGlmIC8qIENPTU1FTlQgKi8KKworICAgIHggPSB0Y3NldGF0dHIodHR5ZmQsVENTQURSQUlO LCZ0dGN1cik7IC8qIFNldCB0aGUgc3BlZWQgKi8KKyAgICBkZWJ1ZyhGMTAxLCJ0dHNzcGQgdGNz ZXRhdHRyIiwiIix4KTsKKyAgICBpZiAoeCA8IDApCisgICAgICByZXR1cm4oLTEpOworCisjZWxz ZSAgLyogTm90IFVTRVRDU0VUU1BFRUQgKi8KKworICAgIC8qIEZpcnN0IGNoZWNrIHRoYXQgdGhl IGdpdmVuIHNwZWVkIGlzIHZhbGlkLiAqLworCisgICAgc3dpdGNoIChjcHMpIHsKKyNpZm5kZWYg TUlOSVgKKyAgICAgIGNhc2UgMDogICBzID0gQjA7ICAgIGJyZWFrOworICAgICAgY2FzZSA1OiAg IHMgPSBCNTA7ICAgYnJlYWs7CisgICAgICBjYXNlIDc6ICAgcyA9IEI3NTsgICBicmVhazsKKyNl bmRpZiAvKiBNSU5JWCAqLworICAgICAgY2FzZSAxMTogIHMgPSBCMTEwOyAgYnJlYWs7CisjaWZu ZGVmIE1JTklYCisgICAgICBjYXNlIDEzOiAgcyA9IEIxMzQ7ICBicmVhazsKKyAgICAgIGNhc2Ug MTU6ICBzID0gQjE1MDsgIGJyZWFrOworICAgICAgY2FzZSAyMDogIHMgPSBCMjAwOyAgYnJlYWs7 CisjZW5kaWYgLyogTUlOSVggKi8KKyAgICAgIGNhc2UgMzA6ICBzID0gQjMwMDsgIGJyZWFrOwor I2lmbmRlZiBNSU5JWAorICAgICAgY2FzZSA2MDogIHMgPSBCNjAwOyAgYnJlYWs7CisjZW5kaWYg LyogTUlOSVggKi8KKyAgICAgIGNhc2UgMTIwOiBzID0gQjEyMDA7IGJyZWFrOworI2lmbmRlZiBN SU5JWAorICAgICAgY2FzZSAxODA6IHMgPSBCMTgwMDsgYnJlYWs7CisjZW5kaWYgLyogTUlOSVgg Ki8KKyAgICAgIGNhc2UgMjQwOiBzID0gQjI0MDA7IGJyZWFrOworICAgICAgY2FzZSA0ODA6IHMg PSBCNDgwMDsgYnJlYWs7CisjaWZuZGVmIE1JTklYCisgICAgICBjYXNlIDg4ODogcyA9IEI3NTsg czIgPSBCMTIwMDsgYnJlYWs7IC8qIDg4OCA9IDc1LzEyMDAgc3BsaXQgc3BlZWQgKi8KKyNlbmRp ZiAvKiBNSU5JWCAqLworI2lmZGVmIEI3MjAwCisgICAgICBjYXNlIDcyMDogcyA9IEI3MjAwOyBi cmVhazsKKyNlbmRpZiAvKiBCNzIwMCAqLworICAgICAgY2FzZSA5NjA6IHMgPSBCOTYwMDsgYnJl YWs7CisjaWZkZWYgQjE0NDAwCisgICAgICBjYXNlIDE0NDA6IHMgPSBCMTQ0MDA7IGJyZWFrOwor I2VuZGlmIC8qIEIxNDQwMCAqLworI2lmZGVmIEIxOTIwMAorICAgICAgY2FzZSAxOTIwOiBzID0g QjE5MjAwOyBicmVhazsKKyNlbHNlCisjaWZkZWYgRVhUQQorICAgICAgY2FzZSAxOTIwOiBzID0g RVhUQTsgYnJlYWs7CisjZW5kaWYgLyogRVhUQSAqLworI2VuZGlmIC8qIEIxOTIwMCAqLworI2lm ZGVmIEIyODgwMAorICAgICAgY2FzZSAyODgwOiBzID0gQjI4ODAwOyBicmVhazsKKyNlbmRpZiAv KiBCMjg4MDAgKi8KKyNpZmRlZiBCMzg0MDAKKyAgICAgIGNhc2UgMzg0MDogcyA9IEIzODQwMDsK KyNpZmRlZiBPTElOVVhISVNQRUVECisgICAgICAgIHNwZF9mbGFncyA9IH5BU1lOQ19TUERfTUFT SzsJLyogTm9uemVybywgYnV0IHplcm8gZmxhZ3MgKi8KKyNlbmRpZiAvKiBPTElOVVhISVNQRUVE ICovCisJYnJlYWs7CisjZWxzZSAvKiBCMzg0MDAgbm90IGRlZmluZWQuLi4gKi8KKyNpZmRlZiBF WFRCCisgICAgICBjYXNlIDM4NDA6IHMgPSBFWFRCOyBicmVhazsKKyNlbmRpZiAvKiBFWFRCICov CisjZW5kaWYgLyogQjM4NDAwICovCisKKyNpZmRlZiBIUFVYCisjaWZkZWYgX0I1NzYwMAorICAg ICAgY2FzZSA1NzYwOiBzID0gX0I1NzYwMDsgYnJlYWs7CisjZW5kaWYgLyogX0I1NzYwMCAqLwor I2lmZGVmIF9CMTE1MjAwCisgICAgICBjYXNlIDExNTIwOiBzID0gX0IxMTUyMDA7IGJyZWFrOwor I2VuZGlmIC8qIF9CMTE1MjAwICovCisjZWxzZQorI2lmZGVmIE9MSU5VWEhJU1BFRUQKKy8qCisg IFRoaXMgYml0IGZyb20gPGNhcmxvQHNnLnRuLnR1ZGVsZnQubmw+OgorICAiT25seSBub3RlIHRv IG1ha2UgaXMgbWF5YmUgdGhpczogV2hlbiB0aGUgQVNZTkNfU1BEX0NVU1QgZmxhZ3MgYXJlIHNl dCB0aGVuCisgIHNldHRpbmcgdGhlIHNwZWVkIHRvIDM4NDAwIHdpbGwgc2V0IHRoZSBjdXN0b20g c3BlZWQgKGFuZCB0dGdzcGQgcmV0dXJucworICAzODQwMCksIGJ1dCBzcGVlZHMgNTc2MDAgYW5k IDExNTIwMCB3b24ndCB3b3JrIGFueSBtb3JlIGJlY2F1c2UgSSBkaWRuJ3QKKyAgd2FudCB0byBt ZXNzIHVwIHRoZSBzcGVlZCBmbGFncyB3aGVuIHNvbWVvbmUgaXMgZG9pbmcgc29waGlzdGljYXRl ZCBzdHVmZgorICBsaWtlIGN1c3RvbSBzcGVlZHMuLi4iCisqLworICAgICAgY2FzZSA1NzYwOiBz ID0gQjM4NDAwOyBzcGRfZmxhZ3MgPSBBU1lOQ19TUERfSEk7IGJyZWFrOworICAgICAgY2FzZSAx MTUyMDogcyA9IEIzODQwMDsgc3BkX2ZsYWdzID0gQVNZTkNfU1BEX1ZISTsgYnJlYWs7CisjZWxz ZQorI2lmZGVmIEI1NzYwMAorICAgICAgY2FzZSA1NzYwOiBzID0gQjU3NjAwOyBicmVhazsKKyNl bmRpZiAvKiBCNTc2MDAgKi8KKyNpZmRlZiBCNzY4MDAKKyAgICAgIGNhc2UgNzY4MDogcyA9IEI3 NjgwMDsgYnJlYWs7CisjZW5kaWYgLyogQjc2ODAwICovCisjaWZkZWYgQjExNTIwMAorICAgICAg Y2FzZSAxMTUyMDogcyA9IEIxMTUyMDA7IGJyZWFrOworI2VuZGlmIC8qIEIxMTUyMDAgKi8KKyNl bmRpZiAvKiBPTElOVVhISVNQRUVEICovCisjaWZkZWYgQjE1MzYwMAorICAgICAgY2FzZSAxNTM2 MDogcyA9IEIxNTM2MDA7IGJyZWFrOworI2VuZGlmIC8qIEIxNTM2MDAgKi8KKyNpZmRlZiBCMjMw NDAwCisgICAgICBjYXNlIDIzMDQwOiBzID0gQjIzMDQwMDsgYnJlYWs7CisjZW5kaWYgLyogQjIz MDQwMCAqLworI2lmZGVmIEIzMDcyMDAKKyAgICAgIGNhc2UgMzA3MjA6IHMgPSBCMzA3MjAwOyBi cmVhazsKKyNlbmRpZiAvKiBCMzA3MjAwICovCisjaWZkZWYgQjQ2MDgwMAorICAgICAgY2FzZSA0 NjA4MDogcyA9IEI0NjA4MDA7IGJyZWFrOworI2VuZGlmIC8qIDQ2MDgwMCAqLworI2lmZGVmIEI5 MjE2MDAKKyAgICAgIGNhc2UgOTIxNjA6IHMgPSBCOTIxNjAwOyBicmVhazsKKyNlbmRpZiAvKiBC OTIxNjAwICovCisjZW5kaWYgLyogSFBVWCAqLworICAgICAgZGVmYXVsdDoKKwlvayA9IDA7CQkJ CS8qIEdvb2Qgc3BlZWQgbm90IGZvdW5kLCBzbyBub3Qgb2sgKi8KKwlicmVhazsKKyAgICB9Cisg ICAgZGVidWcoRjEwMSwidHRzc3BkIG9rIiwiIixvayk7CisgICAgZGVidWcoRjEwMSwidHRzc3Bk IHMiLCIiLHMpOworCisgICAgaWYgKCFvaykgeworCWRlYnVnKEYxMDAsInR0c3NwZCBmYWlscyIs IiIsMCk7CisJcmV0dXJuKC0xKTsKKyAgICB9IGVsc2UgeworCWlmICghczIpIHMyID0gczsJCS8q IFNldCBpbnB1dCBzcGVlZCAqLworI2lmZGVmIFBsYW45CisJaWYgKHA5dHRzc3BkKGNwcykgPCAw KQorCSAgcmV0dXJuKC0xKTsKKyNlbHNlCisjaWZkZWYgQlNENDRPUlBPU0lYCisJeCA9IHRjZ2V0 YXR0cih0dHlmZCwmdHRjdXIpOwkvKiBHZXQgY3VycmVudCBzcGVlZCAqLworCWRlYnVnKEYxMDEs InR0c3NwZCB0Y2dldGF0dHIiLCIiLHgpOworCWlmICh4IDwgMCkKKwkgIHJldHVybigtMSk7Cisj aWZkZWYgT0xJTlVYSElTUEVFRAorCWRlYnVnKEYxMDEsInR0c3NwZCBzcGRfZmxhZ3MiLCIiLHNw ZF9mbGFncyk7CisJaWYgKHNwZF9mbGFncyAmJiBzcGRfZmxhZ3MgIT0gQVNZTkNfU1BEX0NVU1Qp IHsKKwkgICAgaWYgKGlvY3RsKHR0eWZkLCBUSU9DR1NFUklBTCwgJnNlcmluZm8pIDwgMCkgewor CQlkZWJ1ZyhGMTAwLCJ0dHNzcGQ6IFRJT0NHU0VSSUFMIGZhaWxlZCIsIiIsMCk7CisJCXJldHVy bigtMSk7CisJICAgIH0gZWxzZSBkZWJ1ZyhGMTAwLCJ0dHNzcGQ6IFRJT0NHU0VSSUFMIG9rIiwi IiwwKTsKKwkgICAgc2VyaW5mby5mbGFncyAmPSB+QVNZTkNfU1BEX01BU0s7CisJICAgIHNlcmlu Zm8uZmxhZ3MgfD0gKHNwZF9mbGFncyAmIEFTWU5DX1NQRF9NQVNLKTsKKwkgICAgaWYgKGlvY3Rs KHR0eWZkLCBUSU9DU1NFUklBTCwgJnNlcmluZm8pIDwgMCkKKwkgICAgICByZXR1cm4oLTEpOwor CX0KKyNlbmRpZiAvKiBPTElOVVhISVNQRUVEICovCisJY2ZzZXRvc3BlZWQoJnR0Y3VyLHMpOwor CWNmc2V0aXNwZWVkKCZ0dGN1cixzMik7CisJY2ZzZXRvc3BlZWQoJnR0cmF3LHMpOworCWNmc2V0 aXNwZWVkKCZ0dHJhdyxzMik7CisJY2ZzZXRvc3BlZWQoJnR0dHZ0LHMpOworCWNmc2V0aXNwZWVk KCZ0dHR2dCxzMik7CisJY2ZzZXRvc3BlZWQoJnR0b2xkLHMpOworCWNmc2V0aXNwZWVkKCZ0dG9s ZCxzMik7CisJeCA9IHRjc2V0YXR0cih0dHlmZCxUQ1NBRFJBSU4sJnR0Y3VyKTsKKwlkZWJ1ZyhG MTAxLCJ0dHNzcGQgdGNzZXRhdHRyIiwiIix4KTsKKwlpZiAoeCA8IDApIHJldHVybigtMSk7Cisj ZWxzZQorI2lmZGVmIEFUVFNWCisJaWYgKGNwcyA9PSA4ODgpIHJldHVybigtMSk7CS8qIE5vIHNw bGl0IHNwZWVkcywgc29ycnkuICovCisJeCA9IGlvY3RsKHR0eWZkLFRDR0VUQSwmdHRjdXIpOwor CWRlYnVnKEYxMDEsInR0c3NwZCBUQ0dFVEEgaW9jdGwiLCIiLHgpOworCWlmICh4IDwgMCkgcmV0 dXJuKC0xKTsKKwl0dGN1ci5jX2NmbGFnICY9IH5DQkFVRDsKKwl0dGN1ci5jX2NmbGFnIHw9IHM7 CisJdHR0dnQuY19jZmxhZyAmPSB+Q0JBVUQ7CisJdHR0dnQuY19jZmxhZyB8PSBzOworCXR0cmF3 LmNfY2ZsYWcgJj0gfkNCQVVEOworCXR0cmF3LmNfY2ZsYWcgfD0gczsKKwl0dG9sZC5jX2NmbGFn ICY9IH5DQkFVRDsKKwl0dG9sZC5jX2NmbGFnIHw9IHM7CisJeCA9IGlvY3RsKHR0eWZkLFRDU0VU QVcsJnR0Y3VyKTsKKwlkZWJ1ZyhGMTAxLCJ0dHNzcGQgVENTRVRBVyBpb2N0bCIsIiIseCk7CisJ aWYgKHggPCAwKSByZXR1cm4oLTEpOworI2Vsc2UKKyNpZmRlZiBCRUxMVjEwCisJeCA9IGlvY3Rs KHR0eWZkLFRJT0NHREVWLCZ0ZGN1cik7CisJZGVidWcoRjEwMSwidHRzc3BkIFRJT0NHREVWIGlv Y3RsIiwiIix4KTsKKwlpZiAoeCA8IDApIHJldHVybigtMSk7CisJdGRjdXIuaXNwZWVkID0gczI7 CisJdGRjdXIub3NwZWVkID0gczsKKwllcnJubyA9IDA7CisJb2sgPSBpb2N0bCh0dHlmZCxUSU9D U0RFViwmdGRjdXIpOworCWRlYnVnKEYxMDEsInR0c3NwZCBCRUxMVjEwIGlvY3RsIiwiIixvayk7 CisJaWYgKG9rIDwgMCkgeworCSAgICBwZXJyb3IodHRubXN2KTsKKwkgICAgZGVidWcoRjEwMSwi dHRzc3BkIEJFTExWMTAgZXJybm8iLCIiLG9rKTsKKwkgICAgcmV0dXJuKC0xKTsKKwl9CisjZWxz ZQorCXggPSBndHR5KHR0eWZkLCZ0dGN1cik7CisJZGVidWcoRjEwMSwidHRzc3BkIGd0dHkiLCIi LHgpOworCWlmICh4IDwgMCkgcmV0dXJuKC0xKTsKKwl0dGN1ci5zZ19vc3BlZWQgPSBzOyB0dGN1 ci5zZ19pc3BlZWQgPSBzMjsKKwl0dHR2dC5zZ19vc3BlZWQgPSBzOyB0dHR2dC5zZ19pc3BlZWQg PSBzMjsKKwl0dHJhdy5zZ19vc3BlZWQgPSBzOyB0dHJhdy5zZ19pc3BlZWQgPSBzMjsKKwl0dG9s ZC5zZ19vc3BlZWQgPSBzOyB0dG9sZC5zZ19pc3BlZWQgPSBzMjsKKwl4ID0gc3R0eSh0dHlmZCwm dHRjdXIpOworCWRlYnVnKEYxMDEsInR0c3NwZCBzdHR5IiwiIix4KTsKKwlpZiAoeCA8IDApIHJl dHVybigtMSk7CisjZW5kaWYgLyogQkVMTFYxMCAqLworI2VuZGlmIC8qIEFUVFNWICovCisjZW5k aWYgLyogQlNENDRPUlBPU0lYICovCisjZW5kaWYgLyogUGxhbjkgKi8KKyAgICB9CisgICAgcmV0 dXJuKDEpOwkJCQkvKiBSZXR1cm4gMSA9IHN1Y2Nlc3MuICovCisjZW5kaWYgLyogVVNFVENTRVRT UEVFRCAqLworfQorCisjZW5kaWYgLyogTk9MT0NBTCAqLworCisvKiBDIE8gTiBHIFMgUCBEICAt ICBHZXQgc3BlZWQgb2YgY29uc29sZSB0ZXJtaW5hbCAgKi8KKworbG9uZworY29uZ3NwZCgpIHsK Ky8qCisgIFRoaXMgaXMgYSBkaXNndXN0aW5nIGhhY2suICBUaGUgcmlnaHQgd2F5IHRvIGRvIHRo aXMgd291bGQgYmUgdG8gcGFzcyBhbgorICBhcmd1bWVudCB0byB0dGdzcGQoKSwgYnV0IHRoZW4g d2UnZCBuZWVkIHRvIGNoYW5nZSB0aGUgS2VybWl0IEFQSSBhbmQKKyAgYWxsIG9mIHRoZSBjaz90 aW8uYyBtb2R1bGVzLiAgKEN1cnJlbnRseSB1c2VkIG9ubHkgZm9yIHJsb2dpbi4pCisqLworICAg IGludCB0MTsKKyAgICBsb25nIHNwZDsKKyNpZmRlZiBORVRDT05OCisgICAgaW50IHQyID0gbmV0 Y29ubjsKKyAgICBuZXRjb25uID0gMDsKKyNlbmRpZiAvKiBORVRDT05OICovCisgICAgdDEgPSB0 dHlmZDsKKyAgICB0dHlmZCA9IC0xOworICAgIHNwZCA9IHR0Z3NwZCgpOworICAgIGRlYnVnKEYx MDEsImNvbmdzcGQiLCIiLHNwZCk7CisjaWZkZWYgTkVUQ09OTgorICAgIG5ldGNvbm4gPSB0MjsK KyNlbmRpZiAvKiBORVRDT05OICovCisgICAgdHR5ZmQgPSB0MTsKKyAgICByZXR1cm4oc3BkKTsK K30KKworLyogIFQgVCBTIFAgRCBMIEkgUyBUICAtLSBHZXQgbGlzdCBvZiBzZXJpYWwgc3BlZWRz IGFsbG93ZWQgb24gdGhpcyBwbGF0Zm9ybSAqLworCisjZGVmaW5lIE5TUERMSVNUIDY0CitzdGF0 aWMgbG9uZyBzcGRsaXN0W05TUERMSVNUXTsKKy8qCisgIEFzIHdyaXR0ZW4sIHRoaXMgcGlja3Mg dXAgdGhlIHNwZWVkcyBrbm93biBhdCBjb21waWxlIHRpbWUsIGFuZCB0aHVzCisgIGFwcGx5IHRv IHRoZSBzeXN0ZW0gd2hlcmUgQy1LZXJtaXQgd2FzIGJ1aWx0LCByYXRoZXIgdGhhbiB0byB0aGUg b25lIHdoZXJlCisgIGl0IGlzIHJ1bm5pbmcuICBTdWdnZXN0aW9ucyBmb3IgaW1wcm92ZW1lbnQg YXJlIGFsd2F5cyB3ZWxjb21lLgorKi8KK2xvbmcgKgordHRzcGRsaXN0KCkgeworICAgIGludCBp OworICAgIGZvciAoaSA9IDA7IGkgPCBOU1BETElTVDsgaSsrKQkvKiBJbml0aWFsaXplIHRoZSBs aXN0ICovCisgICAgICBzcGRsaXN0W2ldID0gLTFMOworICAgIGkgPSAxOworCisjaWZkZWYgVVNF VENTRVRTUEVFRAkJCS8qIE5vIHdheSB0byBmaW5kIG91dCB3aGF0J3MgbGVnYWwgKi8KKyAgICBk ZWJ1ZyhGMTAwLCJ0dHNwZGxpc3QgVVNFVENTRVRTUEVFRCIsIiIsMCk7CisgICAgc3BkbGlzdFtp KytdID0gNTBMOworI2lmbmRlZiBVVzcKKyAgICBzcGRsaXN0W2krK10gPSA3NUw7CisjZW5kaWYg LyogVVc3ICovCisgICAgc3BkbGlzdFtpKytdID0gMTEwTDsKKyNpZm5kZWYgVVc3CisgICAgc3Bk bGlzdFtpKytdID0gMTM0TDsKKyNlbmRpZiAvKiBVVzcgKi8KKyAgICBzcGRsaXN0W2krK10gPSAx NTBMOworICAgIHNwZGxpc3RbaSsrXSA9IDIwMEw7CisgICAgc3BkbGlzdFtpKytdID0gMzAwTDsK KyAgICBzcGRsaXN0W2krK10gPSA2MDBMOworICAgIHNwZGxpc3RbaSsrXSA9IDEyMDBMOworICAg IHNwZGxpc3RbaSsrXSA9IDE4MDBMOworICAgIHNwZGxpc3RbaSsrXSA9IDI0MDBMOworICAgIHNw ZGxpc3RbaSsrXSA9IDQ4MDBMOworICAgIHNwZGxpc3RbaSsrXSA9IDg4ODBMOworICAgIHNwZGxp c3RbaSsrXSA9IDk2MDBMOworICAgIHNwZGxpc3RbaSsrXSA9IDE0NDAwTDsKKyAgICBzcGRsaXN0 W2krK10gPSAxOTIwMEw7CisgICAgc3BkbGlzdFtpKytdID0gMjg4MDBMOworI2lmbmRlZiBVVzcK KyAgICBzcGRsaXN0W2krK10gPSAzMzYwMEw7CisjZW5kaWYgLyogVVc3ICovCisgICAgc3BkbGlz dFtpKytdID0gMzg0MDBMOworICAgIHNwZGxpc3RbaSsrXSA9IDU3NjAwTDsKKyAgICBzcGRsaXN0 W2krK10gPSA3NjgwMEw7CisgICAgc3BkbGlzdFtpKytdID0gMTE1MjAwTDsKKyNpZm5kZWYgVVc3 CisgICAgc3BkbGlzdFtpKytdID0gMTUzNjAwTDsKKyAgICBzcGRsaXN0W2krK10gPSAyMzA0MDBM OworICAgIHNwZGxpc3RbaSsrXSA9IDMwNzIwMEw7CisgICAgc3BkbGlzdFtpKytdID0gNDYwODAw TDsKKyAgICBzcGRsaXN0W2krK10gPSA5MjE2MDBMOworI2VuZGlmIC8qIFVXNyAqLworCisjZWxz ZSAgLyogVVNFVENTRVRTUEVFRCAqLworCisgICAgZGVidWcoRjEwMCwidHRzcGRsaXN0IG5vIFVT RVRDU0VUU1BFRUQiLCIiLDApOworCisjaWZkZWYgQjUwCisgICAgZGVidWcoRjEwMSwidHRzcGRs aXN0IEI1MCIsIiIsQjUwKTsKKyAgICBzcGRsaXN0W2krK10gPSA1MEw7CisjZW5kaWYgLyogQjUw ICovCisjaWZkZWYgQjc1CisgICAgZGVidWcoRjEwMSwidHRzcGRsaXN0IEI3NSIsIiIsQjc1KTsK KyAgICBzcGRsaXN0W2krK10gPSA3NUw7CisjZW5kaWYgLyogQjc1ICovCisjaWZkZWYgQjExMAor ICAgIGRlYnVnKEYxMDEsInR0c3BkbGlzdCBCMTEwIiwiIixCMTEwKTsKKyAgICBzcGRsaXN0W2kr K10gPSAxMTBMOworI2VuZGlmIC8qIEIxMTAgKi8KKyNpZmRlZiBCMTM0CisgICAgZGVidWcoRjEw MSwidHRzcGRsaXN0IEIxMzQiLCIiLEIxMzQpOworICAgIHNwZGxpc3RbaSsrXSA9IDEzNEw7Cisj ZW5kaWYgLyogQjEzNCAqLworI2lmZGVmIEIxNTAKKyAgICBkZWJ1ZyhGMTAxLCJ0dHNwZGxpc3Qg QjE1MCIsIiIsQjE1MCk7CisgICAgc3BkbGlzdFtpKytdID0gMTUwTDsKKyNlbmRpZiAvKiBCMTUw ICovCisjaWZkZWYgQjIwMAorICAgIGRlYnVnKEYxMDEsInR0c3BkbGlzdCBCMjAwIiwiIixCMjAw KTsKKyAgICBzcGRsaXN0W2krK10gPSAyMDBMOworI2VuZGlmIC8qIEIyMDAgKi8KKyNpZmRlZiBC MzAwCisgICAgZGVidWcoRjEwMSwidHRzcGRsaXN0IEIzMDAiLCIiLEIzMDApOworICAgIHNwZGxp c3RbaSsrXSA9IDMwMEw7CisjZW5kaWYgLyogQjMwMCAqLworI2lmZGVmIEI2MDAKKyAgICBkZWJ1 ZyhGMTAxLCJ0dHNwZGxpc3QgQjYwMCIsIiIsQjYwMCk7CisgICAgc3BkbGlzdFtpKytdID0gNjAw TDsKKyNlbmRpZiAvKiBCNjAwICovCisjaWZkZWYgQjEyMDAKKyAgICBkZWJ1ZyhGMTAxLCJ0dHNw ZGxpc3QgQjEyMDAiLCIiLEIxMjAwKTsKKyAgICBzcGRsaXN0W2krK10gPSAxMjAwTDsKKyNlbmRp ZiAvKiBCMTIwMCAqLworI2lmZGVmIEIxODAwCisgICAgZGVidWcoRjEwMSwidHRzcGRsaXN0IEIx ODAwIiwiIixCMTgwMCk7CisgICAgc3BkbGlzdFtpKytdID0gMTgwMEw7CisjZW5kaWYgLyogQjE4 MDAgKi8KKyNpZmRlZiBCMjQwMAorICAgIGRlYnVnKEYxMDEsInR0c3BkbGlzdCBCMjQwMCIsIiIs QjI0MDApOworICAgIHNwZGxpc3RbaSsrXSA9IDI0MDBMOworI2VuZGlmIC8qIEIyNDAwICovCisj aWZkZWYgQjQ4MDAKKyAgICBkZWJ1ZyhGMTAxLCJ0dHNwZGxpc3QgQjQ4MDAiLCIiLEI0ODAwKTsK KyAgICBzcGRsaXN0W2krK10gPSA0ODAwTDsKKyNlbmRpZiAvKiBCNDgwMCAqLworI2lmZGVmIEI5 NjAwCisgICAgZGVidWcoRjEwMSwidHRzcGRsaXN0IEI5NjAwIiwiIixCOTYwMCk7CisgICAgc3Bk bGlzdFtpKytdID0gOTYwMEw7CisjZW5kaWYgLyogQjk2MDAgKi8KKyNpZmRlZiBCMTQ0MDAKKyAg ICBkZWJ1ZyhGMTAxLCJ0dHNwZGxpc3QgQjE0NDAwIiwiIixCMTQ0MDApOworICAgIHNwZGxpc3Rb aSsrXSA9IDE0NDAwTDsKKyNlbmRpZiAvKiBCMTQ0MDAgKi8KKyNpZmRlZiBCMTkyMDAKKyAgICBk ZWJ1ZyhGMTAxLCJ0dHNwZGxpc3QgQjE5MjAwIiwiIixCMTkyMDApOworICAgIHNwZGxpc3RbaSsr XSA9IDE5MjAwTDsKKyNlbHNlCisjaWZkZWYgRVhUQQorICAgIGRlYnVnKEYxMDEsInR0c3BkbGlz dCBFWFRBIiwiIixFWFRBKTsKKyAgICBzcGRsaXN0W2krK10gPSAxOTIwMEw7CisjZW5kaWYgLyog RVhUQSAqLworI2VuZGlmIC8qIEIxOTIwMCAqLworI2lmZGVmIEIyODgwMAorICAgIGRlYnVnKEYx MDEsInR0c3BkbGlzdCBCMjg4MDAiLCIiLEIyODgwMCk7CisgICAgc3BkbGlzdFtpKytdID0gMjg4 MDBMOworI2VuZGlmIC8qIEIyODgwMCAqLworI2lmZGVmIEIzMzYwMAorICAgIGRlYnVnKEYxMDEs InR0c3BkbGlzdCBCMzM2MDAiLCIiLEIzMzYwMCk7CisgICAgc3BkbGlzdFtpKytdID0gMzM2MDBM OworI2VuZGlmIC8qIEIzMzYwMCAqLworI2lmZGVmIEIzODQwMAorICAgIGRlYnVnKEYxMDEsInR0 c3BkbGlzdCBCMzg0MDAiLCIiLEIzODQwMCk7CisgICAgc3BkbGlzdFtpKytdID0gMzg0MDBMOwor I2Vsc2UKKyNpZmRlZiBFWFRCCisgICAgZGVidWcoRjEwMSwidHRzcGRsaXN0IEVYVEIiLCIiLEVY VEIpOworICAgIHNwZGxpc3RbaSsrXSA9IDM4NDAwTDsKKyNlbmRpZiAvKiBFWFRCICovCisjZW5k aWYgLyogQjM4NDAwICovCisjaWZkZWYgX0I1NzYwMAorICAgIGRlYnVnKEYxMDEsInR0c3BkbGlz dCBfQjU3NjAwIiwiIixfQjU3NjAwKTsKKyAgICBzcGRsaXN0W2krK10gPSA1NzYwMEw7CisjZWxz ZQorI2lmZGVmIEI1NzYwMAorICAgIGRlYnVnKEYxMDEsInR0c3BkbGlzdCBCNTc2MDAiLCIiLEI1 NzYwMCk7CisgICAgc3BkbGlzdFtpKytdID0gNTc2MDBMOworI2VuZGlmIC8qIEI1NzYwMCAqLwor I2VuZGlmIC8qIF9CNTc2MDAgKi8KKyNpZmRlZiBCNzY4MDAKKyAgICBkZWJ1ZyhGMTAxLCJ0dHNw ZGxpc3QgQjc2ODAwIiwiIixCNzY4MDApOworICAgIHNwZGxpc3RbaSsrXSA9IDc2ODAwTDsKKyNl bmRpZiAvKiBCNzY4MDAgKi8KKyNpZmRlZiBfQjExNTIwMAorICAgIGRlYnVnKEYxMDEsInR0c3Bk bGlzdCBfQjExNTIwMCIsIiIsX0IxMTUyMDApOworICAgIHNwZGxpc3RbaSsrXSA9IDExNTIwMEw7 CisjZWxzZQorI2lmZGVmIEIxMTUyMDAKKyAgICBkZWJ1ZyhGMTAxLCJ0dHNwZGxpc3QgQjExNTIw MCIsIiIsQjExNTIwMCk7CisgICAgc3BkbGlzdFtpKytdID0gMTE1MjAwTDsKKyNlbmRpZiAvKiBC MTE1MjAwICovCisjZW5kaWYgLyogX0IxMTUyMDAgKi8KKyNpZmRlZiBCMTUzNjAwCisgICAgZGVi dWcoRjEwMSwidHRzcGRsaXN0IEIxNTM2MDAiLCIiLEIxNTM2MDApOworICAgIHNwZGxpc3RbaSsr XSA9IDE1MzYwMEw7CisjZW5kaWYgLyogQjE1MzYwMCAqLworI2lmZGVmIEIyMzA0MDAKKyAgICBk ZWJ1ZyhGMTAxLCJ0dHNwZGxpc3QgQjIzMDQwMCIsIiIsQjIzMDQwMCk7CisgICAgc3BkbGlzdFtp KytdID0gMjMwNDAwTDsKKyNlbmRpZiAvKiBCMjMwNDAwICovCisjaWZkZWYgQjMwNzIwMAorICAg IGRlYnVnKEYxMDEsInR0c3BkbGlzdCBCMzA3MjAwIiwiIixCMzA3MjAwKTsKKyAgICBzcGRsaXN0 W2krK10gPSAzMDcyMDBMOworI2VuZGlmIC8qIEIzMDcyMDAgKi8KKyNpZmRlZiBCNDYwODAwCisg ICAgZGVidWcoRjEwMSwidHRzcGRsaXN0IEI0NjA4MDAiLCIiLEI0NjA4MDApOworICAgIHNwZGxp c3RbaSsrXSA9IDQ2MDgwMEw7CisjZW5kaWYgLyogQjQ2MDgwMCAqLworI2lmZGVmIEI5MjE2MDAK KyAgICBkZWJ1ZyhGMTAxLCJ0dHNwZGxpc3QgQjkyMTYwMCIsIiIsQjkyMTYwMCk7CisgICAgc3Bk bGlzdFtpKytdID0gOTIxNjAwTDsKKyNlbmRpZiAvKiBCOTIxNjAwICovCisjZW5kaWYgLyogVVNF VENTRVRTUEVFRCAqLworICAgIHNwZGxpc3RbMF0gPSBpIC0gMTsJCQkvKiBSZXR1cm4gY291bnQg aW4gMHRoIGVsZW1lbnQgKi8KKyAgICBkZWJ1ZyhGMTExLCJ0dHNwZGxpc3Qgc3BkbGlzdCIsIjAi LHNwZGxpc3RbMF0pOworICAgIHJldHVybigobG9uZyAqKXNwZGxpc3QpOworfQorCisvKiBUIFQg RyBTIFAgRCAgLSAgR2V0IHNwZWVkIG9mIGN1cnJlbnRseSBzZWxlY3RlZCB0dHkgbGluZSAgKi8K KworLyoKKyAgVW5yZWxpYWJsZS4gIEFmdGVyIFNFVCBMSU5FLCBpdCByZXR1cm5zIGFuIGFjdHVh bCBzcGVlZCwgYnV0IG5vdCBuZWNlc3NhcmlseQorICB0aGUgcmVhbCBzcGVlZC4gIE9uIHNvbWUg c3lzdGVtcywgaXQgcmV0dXJucyB0aGUgbGluZSdzIG5vbWluYWwgc3BlZWQsIGZyb20KKyAgL2V0 Yy90dHl0YWIuICBFdmVuIGlmIHlvdSBTRVQgU1BFRUQgdG8gc29tZXRoaW5nIGVsc2UsIHRoaXMg ZnVuY3Rpb24gbWlnaHQKKyAgbm90IG5vdGljZS4KKyovCitsb25nCit0dGdzcGQoKSB7CQkJCS8q IEdldCBjdXJyZW50IHNlcmlhbCBkZXZpY2Ugc3BlZWQgKi8KKyNpZmRlZiBOT0xPQ0FMCisgICAg cmV0dXJuKC0xTCk7CisjZWxzZQorI2lmZGVmIFBPU0lYCisgICAgc3BlZWRfdAkJCQkvKiBTaG91 bGQgYmUgdW5zaWduZWQgKi8KKyNlbHNlCisgICAgaW50CQkJCQkvKiBJc24ndCB1bnNpZ25lZCAq LworI2VuZGlmIC8qIFBPU0lYICovCisgICAgICBzOworICAgIGludCB4OworICAgIGxvbmcgc3M7 CisjaWZkZWYgT0xJTlVYSElTUEVFRAorICAgIHVuc2lnbmVkIGludCBzcGRfZmxhZ3MgPSAwOwor ICAgIHN0cnVjdCBzZXJpYWxfc3RydWN0IHNlcmluZm87CisjZW5kaWYgLyogT0xJTlVYSElTUEVF RCAqLworCisjaWZkZWYgTkVUQ09OTgorICAgIGlmIChuZXRjb25uKSB7CisjaWZkZWYgVE5fQ09N UE9SVAorCWlmIChpc3RuY29tcG9ydCgpKQorCSAgcmV0dXJuKHRuY19nZXRfYmF1ZCgpKTsKKwll bHNlCisjZW5kaWYgLyogVE5fQ09NUE9SVCAqLworCSAgcmV0dXJuKC0xKTsJCQkvKiAtMSBpZiBu ZXR3b3JrIGNvbm5lY3Rpb24gKi8KKyAgICB9CisjZW5kaWYgLyogTkVUQ09OTiAqLworI2lmZGVm IE5FVENNRAorICAgIGlmICh0dHBpcGUpIHJldHVybigtMSk7CisjZW5kaWYgLyogTkVUQ01EICov CisjaWZkZWYgTkVUUFRZCisgICAgaWYgKHR0cHR5KSByZXR1cm4oLTEpOworI2VuZGlmIC8qIE5F VFBUWSAqLworCisgICAgZGVidWcoRjEwMSwidHRnc3BkIHR0eWZkIiwiIix0dHlmZCk7CisKKyNp ZmRlZiBVU0VUQ1NFVFNQRUVECisKKyAgICB4ID0gdGNnZXRhdHRyKHR0eWZkLCZ0dGN1cik7CS8q IEdldCBjdXJyZW50IHNwZWVkICovCisgICAgZGVidWcoRjEwMSwidHRnc3BkIHRjZ2V0YXR0ciIs IiIseCk7CisgICAgaWYgKHggPCAwKQorICAgICAgcmV0dXJuKC0xKTsKKyAgICBlcnJubyA9IDA7 CisgICAgcyA9IHRjZ2V0c3BlZWQoVENTX0FMTCwgJnR0Y3VyKTsKKyAgICBkZWJ1ZyhGMTAxLCJ0 dHNzcGQgVENHRVRTUEVFRCBzcGVlZCIsIiIscyk7CisgICAgaWYgKHMgPT0gMCkgeworCWxvbmcg czEsIHMyOworCXMxID0gdGNnZXRzcGVlZChUQ1NfSU4sICZ0dGN1cik7CisJczIgPSB0Y2dldHNw ZWVkKFRDU19PVVQsICZ0dGN1cik7CisJaWYgKHMxID09IDEyMDBMICYmIHMyID09IDc1TCkKKwkg IHJldHVybig4ODgwTCk7CisgICAgfQorI2lmZGVmIERFQlVHCisgICAgaWYgKGVycm5vICYgZGVi bG9nKSB7CisJZGVidWcoRjEwMSwidHRzc3BkIFRDR0VUU1BFRUQgZXJybm8iLCIiLGVycm5vKTsK KyAgICB9CisjZW5kaWYgLyogREVCVUcgKi8KKyAgICByZXR1cm4ocyk7CisKKyNlbHNlICAvKiBO b3QgVVNFVENTRVRTUEVFRCAqLworCisjaWZkZWYgUGxhbjkKKyAgICBpZiAodHR5ZmQgPCAwKQor ICAgICAgc3MgPSAtMTsKKyAgICBlbHNlCisgICAgICBzcyA9IHR0eWxhc3RzcGVlZDsKKyNlbHNl CisjaWZkZWYgT0xJTlVYSElTUEVFRAorICAgIGRlYnVnKEYxMDAsInR0Z3NwZCBMaW51eCBPTElO VVhISVNQRUVEIiwiIiwwKTsKKyNlbmRpZiAvKiBPTElOVVhISVNQRUVEICovCisKKyAgICBpZiAo dHR5ZmQgPCAwKSB7CisjaWZkZWYgQlNENDRPUlBPU0lYCisJcyA9IGNmZ2V0b3NwZWVkKCZjY29s ZCk7CisJZGVidWcoRjEwMSwidHRnc3BkIGNmZ2V0b3NwZWVkIDEgUE9TSVgiLCIiLHMpOworI2Vs c2UKKyNpZmRlZiBBVFRTVgorCXMgPSBjY29sZC5jX2NmbGFnICYgQ0JBVUQ7CisJZGVidWcoRjEw MSwidHRnc3BkIGNfY2ZsYWcgQ0JBVUQgMSBBVFRTViIsIiIscyk7CisjZWxzZQorCXMgPSBjY29s ZC5zZ19vc3BlZWQ7CQkvKiAob2J0YWluZWQgYnkgY29uZ20oKSkgKi8KKwlkZWJ1ZyhGMTAxLCJ0 dGdzcGQgc2dfb3NwZWVkIDEiLCIiLHMpOworI2VuZGlmIC8qIEFUVFNWICovCisjZW5kaWYgLyog QlNENDRQT1NJWCAqLworCisgICAgfSBlbHNlIHsKKyNpZmRlZiBCU0Q0NE9SUE9TSVgKKwlpZiAo dGNnZXRhdHRyKHR0eWZkLCZ0dGN1cikgPCAwKSByZXR1cm4oLTEpOworCXMgPSBjZmdldG9zcGVl ZCgmdHRjdXIpOworCWRlYnVnKEYxMDEsInR0Z3NwZCBjZmdldG9zcGVlZCAyIEJTRE9SUE9TSVgi LCIiLHMpOworI2lmZGVmIE9MSU5VWEhJU1BFRUQKKwlpZiAoaW9jdGwodHR5ZmQsVElPQ0dTRVJJ QUwsJnNlcmluZm8pID4gLTEpCisJICBzcGRfZmxhZ3MgPSBzZXJpbmZvLmZsYWdzICYgQVNZTkNf U1BEX01BU0s7CisJZGVidWcoRjEwMSwidHRnc3BkIHNwZF9mbGFncyIsIiIsc3BkX2ZsYWdzKTsK KyNlbmRpZiAvKiBPTElOVVhISVNQRUVEICovCisjZWxzZQorI2lmZGVmIEFUVFNWCisJeCA9IGlv Y3RsKHR0eWZkLFRDR0VUQSwmdHRjdXIpOworCWRlYnVnKEYxMDEsInR0Z3NwZCBpb2N0bCAyIEFU VFNWIHgiLCIiLHgpOworCWRlYnVnKEYxMDEsInR0Z3NwZCBpb2N0bCAyIEFUVFNWIGVycm5vIiwi IixlcnJubyk7CisJaWYgKHggPCAwKSByZXR1cm4oLTEpOworCXMgPSB0dGN1ci5jX2NmbGFnICYg Q0JBVUQ7CisJZGVidWcoRjEwMSwidHRnc3BkIGlvY3RsIDIgQVRUU1Ygc3BlZWQiLCIiLHMpOwor I2Vsc2UKKyNpZmRlZiBCRUxMVjEwCisJeCA9IGlvY3RsKHR0eWZkLFRJT0NHREVWLCZ0ZGN1cik7 CisJZGVidWcoRjEwMSwidHRnc3BkIGlvY3RsIDIgQkVMTFYxMCB4IiwiIix4KTsKKwlpZiAoeCA8 IDApIHJldHVybigtMSk7CisJcyA9IHRkY3VyLm9zcGVlZDsKKwlkZWJ1ZyhGMTAxLCJ0dGdzcGQg aW9jdGwgMiBCRUxMVjEwIHNwZWVkIiwiIixzKTsKKyNlbHNlCisJeCA9IGd0dHkodHR5ZmQsJnR0 Y3VyKTsKKwlkZWJ1ZyhGMTAxLCJ0dGdzcGQgZ3R0eSAyIHgiLCIiLHgpOworCWRlYnVnKEYxMDEs InR0Z3NwZCBndHR5IDIgZXJybm8iLCIiLGVycm5vKTsKKwlpZiAoeCA8IDApIHJldHVybigtMSk7 CisJcyA9IHR0Y3VyLnNnX29zcGVlZDsKKwlkZWJ1ZyhGMTAxLCJ0dGdzcGQgZ3R0eSAyIHNwZWVk IiwiIixzKTsKKyNlbmRpZiAvKiBCRUxMVjEwICovCisjZW5kaWYgLyogQVRUU1YgKi8KKyNlbmRp ZiAvKiBCU0Q0NE9SUE9TSVggKi8KKyAgICB9CisgICAgZGVidWcoRjEwMSwidHRnc3BkIGNvZGUi LCIiLHMpOworI2lmZGVmIE9MSU5VWEhJU1BFRUQKKyAgICBkZWJ1ZyhGMTAxLCJ0dGdzcGQgc3Bk X2ZsYWdzIiwiIixzcGRfZmxhZ3MpOworI2VuZGlmIC8qIE9MSU5VWEhJU1BFRUQgKi8KKyAgICBz d2l0Y2ggKHMpIHsKKyNpZmRlZiBCMAorICAgICAgY2FzZSBCMDogICAgc3MgPSAwTDsgYnJlYWs7 CisjZW5kaWYgLyogQjAgKi8KKworI2lmbmRlZiBNSU5JWAorLyoKKyBNSU5JWCBkZWZpbmVzIHRo ZSBCeHggc3ltYm9scyB0byBiZSBicHMvMTAwLCBzbyBCNTA9PUI3NSwgQjExMD09QjEzND09QjE1 MCwKKyBldGMsIG1ha2luZyBmb3IgbWFueSAiZHVwbGljYXRlIGNhc2UgaW4gc3dpdGNoIiBlcnJv cnMsIHdoaWNoIGFyZSBmYXRhbC4KKyovCisjaWZkZWYgQjUwCisgICAgICBjYXNlIEI1MDogICBz cyA9IDUwTDsgYnJlYWs7CisjZW5kaWYgLyogQjUwICovCisjaWZkZWYgQjc1CisgICAgICBjYXNl IEI3NTogICBzcyA9IDc1TDsgYnJlYWs7CisjZW5kaWYgLyogQjc1ICovCisjZW5kaWYgLyogTUlO SVggKi8KKworI2lmZGVmIEIxMTAKKyAgICAgIGNhc2UgQjExMDogIHNzID0gMTEwTDsgYnJlYWs7 CisjZW5kaWYgLyogQjExMCAqLworCisjaWZuZGVmIE1JTklYCisjaWZkZWYgQjEzNAorICAgICAg Y2FzZSBCMTM0OiAgc3MgPSAxMzRMOyBicmVhazsKKyNlbmRpZiAvKiBCMTM0ICovCisjaWZkZWYg QjE1MAorICAgICAgY2FzZSBCMTUwOiAgc3MgPSAxNTBMOyBicmVhazsKKyNlbmRpZiAvKiBCMTUw ICovCisjZW5kaWYgLyogTUlOSVggKi8KKworI2lmZGVmIEIyMDAKKyAgICAgIGNhc2UgQjIwMDog IHNzID0gMjAwTDsgYnJlYWs7CisjZW5kaWYgLyogQjIwMCAqLworCisjaWZkZWYgQjMwMAorICAg ICAgY2FzZSBCMzAwOiAgc3MgPSAzMDBMOyBicmVhazsKKyNlbmRpZiAvKiBCMzAwICovCisKKyNp ZmRlZiBCNjAwCisgICAgICBjYXNlIEI2MDA6ICBzcyA9IDYwMEw7IGJyZWFrOworI2VuZGlmIC8q IEI2MDAgKi8KKworI2lmZGVmIEIxMjAwCisgICAgICBjYXNlIEIxMjAwOiBzcyA9IDEyMDBMOyBi cmVhazsKKyNlbmRpZiAvKiBCMTIwMCAqLworCisjaWZkZWYgQjE4MDAKKyAgICAgIGNhc2UgQjE4 MDA6IHNzID0gMTgwMEw7IGJyZWFrOworI2VuZGlmIC8qIEIxODAwICovCisKKyNpZmRlZiBCMjQw MAorICAgICAgY2FzZSBCMjQwMDogc3MgPSAyNDAwTDsgYnJlYWs7CisjZW5kaWYgLyogQjI0MDAg Ki8KKworI2lmZGVmIEI0ODAwCisgICAgICBjYXNlIEI0ODAwOiBzcyA9IDQ4MDBMOyBicmVhazsK KyNlbmRpZiAvKiBCNDgwMCAqLworCisjaWZkZWYgQjcyMDAKKyAgICAgIGNhc2UgQjcyMDA6IHNz ID0gNzIwMEw7IGJyZWFrOworI2VuZGlmIC8qIEI3MjAwICovCisKKyNpZmRlZiBCOTYwMAorICAg ICAgY2FzZSBCOTYwMDogc3MgPSA5NjAwTDsgYnJlYWs7CisjZW5kaWYgLyogQjk2MDAgKi8KKwor I2lmZGVmIEIxOTIwMAorICAgICAgY2FzZSBCMTkyMDA6IHNzID0gMTkyMDBMOyBicmVhazsKKyNl bHNlCisjaWZkZWYgRVhUQQorICAgICAgY2FzZSBFWFRBOiBzcyA9IDE5MjAwTDsgYnJlYWs7Cisj ZW5kaWYgLyogRVhUQSAqLworI2VuZGlmIC8qIEIxOTIwMCAqLworCisjaWZuZGVmIE1JTklYCisj aWZkZWYgQjM4NDAwCisgICAgICBjYXNlIEIzODQwMDoKKyAgICAgICAgc3MgPSAzODQwMEw7Cisj aWZkZWYgT0xJTlVYSElTUEVFRAorICAgICAgICBzd2l0Y2goc3BkX2ZsYWdzKSB7CisgICAgICAg ICAgY2FzZSBBU1lOQ19TUERfSEk6ICBzcyA9ICA1NzYwMEw7IGJyZWFrOworICAgICAgICAgIGNh c2UgQVNZTkNfU1BEX1ZISTogc3MgPSAxMTUyMDBMOyBicmVhazsKKwl9CisjZW5kaWYgLyogT0xJ TlVYSElTUEVFRCAqLworICAgICAgICBicmVhazsKKyNlbHNlCisjaWZkZWYgRVhUQgorICAgICAg Y2FzZSBFWFRCOiBzcyA9IDM4NDAwTDsgYnJlYWs7CisjZW5kaWYgLyogRVhUQiAqLworI2VuZGlm IC8qIEIzODQwMCAqLworI2VuZGlmIC8qIE1JTklYICovCisKKyNpZmRlZiBIUFVYCisjaWZkZWYg X0I1NzYwMAorICAgICAgY2FzZSBfQjU3NjAwOiBzcyA9IDU3NjAwTDsgYnJlYWs7CisjZW5kaWYg LyogX0I1NzYwMCAqLworI2lmZGVmIF9CMTE1MjAwCisgICAgICBjYXNlIF9CMTE1MjAwOiBzcyA9 IDExNTIwMEw7IGJyZWFrOworI2VuZGlmIC8qIF9CMTE1MjAwICovCisjZWxzZQorI2lmZGVmIEI1 NzYwMAorICAgICAgY2FzZSBCNTc2MDA6IHNzID0gNTc2MDBMOyBicmVhazsKKyNlbmRpZiAvKiBC NTc2MDAgKi8KKyNpZmRlZiBCNzY4MDAKKyAgICAgIGNhc2UgQjc2ODAwOiBzcyA9IDc2ODAwTDsg YnJlYWs7CisjZW5kaWYgLyogQjc2ODAwICovCisjaWZkZWYgQjExNTIwMAorICAgICAgY2FzZSBC MTE1MjAwOiBzcyA9IDExNTIwMEw7IGJyZWFrOworI2VuZGlmIC8qIEIxMTUyMDAgKi8KKyNpZmRl ZiBCMTUzNjAwCisgICAgICBjYXNlIEIxNTM2MDA6IHNzID0gMTUzNjAwTDsgYnJlYWs7CisjZW5k aWYgLyogQjE1MzYwMCAqLworI2lmZGVmIEIyMzA0MDAKKyAgICAgIGNhc2UgQjIzMDQwMDogc3Mg PSAyMzA0MDBMOyBicmVhazsKKyNlbmRpZiAvKiBCMjMwNDAwICovCisjaWZkZWYgQjMwNzIwMAor ICAgICAgY2FzZSBCMzA3MjAwOiBzcyA9IDMwNzIwMEw7IGJyZWFrOworI2VuZGlmIC8qIEIzMDcy MDAgKi8KKyNpZmRlZiBCNDYwODAwCisgICAgICBjYXNlIEI0NjA4MDA6IHNzID0gNDYwODAwTDsg YnJlYWs7CisjZW5kaWYgLyogQjQ2MDgwMCAqLworI2VuZGlmIC8qIEhQVVggKi8KKyNpZmRlZiBC OTIxNjAwCisgICAgICBjYXNlIEI5MjE2MDA6IHNzID0gOTIxNjAwTDsgYnJlYWs7CisjZW5kaWYg LyogQjkyMTYwMCAqLworICAgICAgZGVmYXVsdDoKKwlzcyA9IC0xOyBicmVhazsKKyAgICB9Cisj ZW5kaWYgLyogUGxhbjkgKi8KKyAgICBkZWJ1ZyhGMTAxLCJ0dGdzcGQgc3BlZWQiLCIiLHNzKTsK KyAgICByZXR1cm4oc3MpOworCisjZW5kaWYgLyogVVNFVENTRVRTUEVFRCAqLworI2VuZGlmIC8q IE5PTE9DQUwgKi8KK30KKyNpZmRlZiBNSU5JWDIJCQkJLyogQW5vdGhlciBoYWNrIGFsZXJ0ICov CisjZGVmaW5lIE1JTklYCisjZW5kaWYgLyogTUlOSVgyICovCisKKy8qCisgIEZJT05SRUFEIGRh dGEgdHlwZS4uLiAgVGhpcyBoYXMgYmVlbiBkZWZpbmVkIGFzICJsb25nIiBmb3IgbWFueSwgbWFu eQorICB5ZWFycywgYW5kIGl0IHdvcmtlZCBPSyB1bnRpbCA2NC1iaXQgcGxhdGZvcm1zIGFwcGVh cmVkLiAgVGh1cyB3ZSB1c2UKKyAgaW50IGZvciA2NC1iaXQgcGxhdGZvcm1zLCBidXQga2VlcCBs b25nIGZvciB0aGUgb3RoZXJzLiAgSWYgd2UgY2hhbmdlZAorICB0aGUgZGVmYXVsdCBQRUVLVFlQ RSB0byBpbnQsIHRoaXMgd291bGQgcHJvYmFibHkgYnJlYWsgMTYtYml0IGJ1aWxkcworICAobm90 ZSB0aGF0IHNpemVvZihsb25nKSA9PSBzaXplb2YoaW50KSBvbiBtb3N0IDMyLWJpdCBwbGF0Zm9y bXMpLCBtYW55CisgIG9mIHdoaWNoIHdlIGhhdmUgbm8gd2F5IG9mIHRlc3RpbmcgYW55IG1vcmUu ICBUaGVyZWZvcmUsIGRvIG5vdCBjaGFuZ2UKKyAgdGhlIGRlZmF1bHQgZGVmaW5pdGlvbiBvZiBQ RUVLVFlQRSAtLSBvbmx5IGFkZCBleGNlcHRpb25zIHRvIGl0IGFzIG5lZWRlZC4KKyovCisjaWZk ZWYgQ09IRVJFTlQKKyNpZmRlZiBGSU9OUkVBRAorI3VuZGVmIEZJT05SRUFECisjZW5kaWYgLyog RklPTlJFQUQgKi8KKy8qICNkZWZpbmUgRklPTlJFQUQgVElPQ1FVRVJZICovCisvKiAjZGVmaW5l IFBFRUtUWVBFIGludCAqLworI2Vsc2UgIC8qIE5vdCBDT0hFUkVOVC4uLiAqLworCisjaWZkZWYg T1NGMzIJCQkJLyogRGlnaXRhbCBVTklYIDMuMiBvciBoaWdoZXIgKi8KKyNkZWZpbmUgUEVFS1RZ UEUgaW50CisjZWxzZQorI2RlZmluZSBQRUVLVFlQRSBsb25nCQkJLyogRWxzZXdoZXJlIChzZWUg bm90ZXMgYWJvdmUpICovCisjZW5kaWYgLyogT1NGMzIgKi8KKyNlbmRpZiAvKiBDT0hFUkVOVCAq LworCisvKiBja3VteXIuYyBieSBLcmlzdG9mZmVyIEVyaWtzc29uLCBza2VAcGttYWIuc2UsIDE1 IE1hciAxOTkwLiAqLworCisjaWZkZWYgTVlSRUFECisKKy8qIFByaXZhdGUgYnVmZmVyIGZvciBt eXJlYWQoKSBhbmQgaXRzIGNvbXBhbmlvbnMuICBOb3QgZm9yIHVzZSBieSBhbnl0aGluZworICog ZWxzZS4gIHR0Zmx1aSgpIGlzIGFsbG93ZWQgdG8gcmVzZXQgdGhlbSB0byBpbml0aWFsIHZhbHVl cy4gIHR0Y2hrKCkgaXMKKyAqIGFsbG93ZWQgdG8gcmVhZCBteV9jb3VudC4KKyAqCisgKiBteV9p dGVtIGlzIGFuIGluZGV4IGludG8gbXlidWZbXS4gIEluY3JlbWVudCBpdCAqYmVmb3JlKiByZWFk aW5nIG15YnVmW10uCisgKgorICogQSBnbG9iYWwgcGFyaXR5IG1hc2sgdmFyaWFibGUgY291bGQg YmUgdXNlZnVsIHRvby4gIFdlIGNvdWxkIHVzZSBpdCB0bworICogbGV0IG15cmVhZCgpIHN0cmlw IHRoZSBwYXJpdHkgb24gaXRzIG93biwgaW5zdGVhZCBvZiBzdHJpcHBpbmcgc2lnbgorICogYml0 cyBhcyBpdCBkb2VzIG5vdy4KKyAqLworI2lmZGVmIEJJR0JVRk9LCisjZGVmaW5lIE1ZQlVGTEVO IDMyNzY4CisjZWxzZQorI2lmZGVmIHBkcDExCisjZGVmaW5lIE1ZQlVGTEVOIDI1NgorI2Vsc2UK KyNkZWZpbmUgTVlCVUZMRU4gMTAyNAorI2VuZGlmIC8qIHBkcDExICovCisjZW5kaWYgLyogQklH QlVGT0sgKi8KKworI2lmZGVmIEFOWVgyNQorI3VuZGVmIE1ZQlVGTEVOCisjZGVmaW5lIE1ZQlVG TEVOIDI1NgorLyoKKyAgT24gWC4yNSBjb25uZWN0aW9ucywgdGhlcmUgaXMgYW4gZXh0cmEgY29u dHJvbCBieXRlIGF0IHRoZSBiZWdpbm5pbmcuCisqLworc3RhdGljIENIQVIgeDI1YnVmW01ZQlVG TEVOKzFdOwkJLyogQ29tbXVuaWNhdGlvbiBkZXZpY2UgaW5wdXQgYnVmZmVyICovCitzdGF0aWMg Q0hBUiAgKm15YnVmID0geDI1YnVmKzE7CisjZWxzZQorc3RhdGljIENIQVIgbXlidWZbTVlCVUZM RU5dOworI2VuZGlmIC8qIEFOWVgyNSAqLworCitzdGF0aWMgaW50IG15X2NvdW50ID0gMDsJCS8q IE51bWJlciBvZiBjaGFycyBzdGlsbCBpbiBteWJ1ZiAqLworc3RhdGljIGludCBteV9pdGVtID0g LTE7CQkvKiBMYXN0IGluZGV4IHJlYWQgZnJvbSBteWJ1ZltdICAgKi8KKworLyogIFQgVCBQIEUg RSBLICAtLSAgUGVlayBpbnRvIG91ciBpbnRlcm5hbCBjb21tdW5pY2F0aW9ucyBpbnB1dCBidWZm ZXJzLiAqLworCisvKgorICBOT1RFOiBUaGlzIHJvdXRpbmUgaXMgcGVjdWxpYXIgdG8gVU5JWCwg YW5kIGlzIHVzZWQgb25seSBieSB0aGUKKyAgc2VsZWN0KCktYmFzZWQgQ09OTkVDVCBtb2R1bGUs IGNrdWNucy5jLiAgSXQgbmVlZCBub3QgYmUgcmVwbGljYXRlZCBpbgorICB0aGUgY2s/dGlvLmMg b2Ygb3RoZXIgcGxhdGZvcm1zLgorKi8KK2ludAordHRwZWVrKCkgeworI2lmZGVmIFRUTEVCVUYK KyAgICBpbnQgcmMgPSAwOworICAgIGlmICh0dHB1c2ggPj0gMCkKKyAgICAgIHJjKys7CisgICAg cmMgKz0gbGVfaW5idWYoKTsKKyAgICBpZiAocmMgPiAwKQorICAgICAgcmV0dXJuKHJjKTsKKyAg ICBlbHNlCisjZW5kaWYgLyogVFRMRUJVRiAqLworCisjaWZkZWYgTVlSRUFECisgICAgcmV0dXJu KG15X2NvdW50KTsKKyNlbHNlCisgICAgcmV0dXJuKDApOworI2VuZGlmIC8qIE1ZUkVBRCAqLwor fQorCisvKiBteXJlYWQoKSAtLSBFZmZpY2llbnQgcmVhZCBvZiBvbmUgY2hhcmFjdGVyIGZyb20g Y29tbXVuaWNhdGlvbnMgbGluZS4KKyAqCisgKiBOT1RFOiBteXJlYWQoKSBhbmQgaXRzIGhlbHBl cnMgbXlnZXRidWYoKSBhbmQgbXlmaWxsYnVmKCkgcmV0dXJuIHJhdworICogYnl0ZXMgZnJvbSBj b25uZWN0aW9uLCBzbyB3aGVuIHRoZSBjb25uZWN0aW9uIGlzIGVuY3J5cHRlZCwgdGhlc2UgYnl0 ZXMKKyAqIG11c3QgYmUgZGVjcnlwdGVkLgorICoKKyAqIFVzZXMgYSBwcml2YXRlIGJ1ZmZlciB0 byBtaW5pbWl6ZSB0aGUgbnVtYmVyIG9mIGV4cGVuc2l2ZSByZWFkKCkgc3lzdGVtCisgKiBjYWxs cy4gIEVzc2VudGlhbGx5IHBlcmZvcm1zIHRoZSBlcXVpdmFsZW50IG9mIHJlYWQoKSBvZiAxIGNo YXJhY3Rlciwgd2hpY2gKKyAqIGlzIHRoZW4gcmV0dXJuZWQuICBCeSByZWFkaW5nIGFsbCBhdmFp bGFibGUgaW5wdXQgZnJvbSB0aGUgc3lzdGVtIGJ1ZmZlcnMKKyAqIHRvIHRoZSBwcml2YXRlIGJ1 ZmZlciBpbiBvbmUgY2h1bmssIGFuZCB0aGVuIHdvcmtpbmcgZnJvbSB0aGlzIGJ1ZmZlciwgdGhl CisgKiBudW1iZXIgb2Ygc3lzdGVtIGNhbGxzIGlzIHJlZHVjZWQgaW4gYW55IGNhc2Ugd2hlcmUg bW9yZSB0aGFuIG9uZSBjaGFyYWN0ZXIKKyAqIGFycml2ZXMgZHVyaW5nIHRoZSBwcm9jZXNzaW5n IG9mIHRoZSBwcmV2aW91cyBjaHVuaywgZm9yIGluc3RhbmNlIGhpZ2gKKyAqIGJhdWQgcmF0ZXMg b3IgbmV0d29yayB0eXBlIGNvbm5lY3Rpb25zIHdoZXJlIGlucHV0IGFycml2ZXMgaW4gcGFja2V0 cy4KKyAqIElmIHRoZSB0aW1lIG5lZWRlZCBmb3IgYSByZWFkKCkgc3lzdGVtIGNhbGwgYXBwcm9h Y2hlcyB0aGUgdGltZSBmb3IgbW9yZQorICogdGhhbiBvbmUgY2hhcmFjdGVyIHRvIGFycml2ZSwg dGhlbiB0aGlzIG1lY2hhbmlzbSBhdXRvbWF0aWNhbGx5IGNvbXBlbnNhdGVzCisgKiBmb3IgdGhh dCBieSBwZXJmb3JtaW5nIGJpZ2dlciByZWFkKClzIGxlc3MgZnJlcXVlbnRseS4gIElmIHRoZSBz eXN0ZW0gbG9hZAorICogaXMgaGlnaCwgdGhlIHNhbWUgbWVjaGFuaXNtIGNvbXBlbnNhdGVzIGZv ciB0aGF0IHRvby4KKyAqCisgKiBteXJlYWQoKSBpcyBhIG1hY3JvIHRoYXQgcmV0dXJucyB0aGUg bmV4dCBjaGFyYWN0ZXIgZnJvbSB0aGUgYnVmZmVyLiAgSWYgdGhlCisgKiBidWZmZXIgaXMgZW1w dHksIG15Z2V0YnVmKCkgaXMgY2FsbGVkLiAgU2VlIG15Z2V0YnVmKCkgZm9yIHBvc3NpYmxlIGVy cm9yCisgKiByZXR1cm5zLgorICoKKyAqIFRoaXMgc2hvdWxkIGJlIGVmZmljaWVudCBlbm91Z2gg Zm9yIGFueSBvbmUtY2hhcmFjdGVyLWF0LWEtdGltZSBsb29wcy4KKyAqIEZvciBldmVuIGJldHRl ciBlZmZpY2llbmN5IHlvdSBtaWdodCB1c2UgbWVtY3B5KCkvYmNvcHkoKSBvciBzdWNoIGJldHdl ZW4KKyAqIGJ1ZmZlcnMgKHNpbmNlIHRoZXkgYXJlIG9mdGVuIGJldHRlciBvcHRpbWl6ZWQgZm9y IGNvcHlpbmcpLCBidXQgaXQgbWF5IG5vdAorICogYmUgd29ydGggaXQgaWYgeW91IGhhdmUgdG8g dGFrZSBhbiBleHRyYSBwYXNzIG92ZXIgdGhlIGJ1ZmZlciB0byBzdHJpcAorICogcGFyaXR5IGFu ZCBjaGVjayBmb3IgQ1RSTC1DIGFueXdheS4KKyAqCisgKiBOb3RlIHRoYXQgaWYgeW91IGhhdmUg YmVlbiB1c2luZyBteXJlYWQoKSBmcm9tIGFub3RoZXIgcHJvZ3JhbSBtb2R1bGUsIHlvdQorICog bWF5IGhhdmUgc29tZSB0cm91YmxlIGFjY2Vzc2luZyB0aGlzIG1hY3JvIHZlcnNpb24gYW5kIHRo ZSBwcml2YXRlIHZhcmlhYmxlcworICogaXQgdXNlcy4gIEluIHRoYXQgY2FzZSwganVzdCBhZGQg YSBmdW5jdGlvbiBpbiB0aGlzIG1vZHVsZSwgdGhhdCBpbnZva2VzIHRoZQorICogbWFjcm8uCisg Ki8KKyNkZWZpbmUgbXlyZWFkKCkgKC0tbXlfY291bnQgPCAwID8gbXlnZXRidWYoKSA6IDI1NSAm IChpbnQpbXlidWZbKytteV9pdGVtXSkKKworLyogU3BlY2lmaWNhdGlvbjogUHVzaCBiYWNrIHVw IHRvIG9uZSBjaGFyYWN0ZXIgb250byBteXJlYWQoKSdzIHF1ZXVlLgorICoKKyAqIFRoaXMgaW1w bGVtZW50YXRpb246IFB1c2ggYmFjayBjaGFyYWN0ZXJzIGludG8gbXlidWYuIEF0IGxlYXN0IG9u ZSBjaGFyYWN0ZXIKKyAqIG11c3QgaGF2ZSBiZWVuIHJlYWQgdGhyb3VnaCBteXJlYWQoKSBiZWZv cmUgbXl1bnJkKCkgbWF5IGJlIHVzZWQuICBBZnRlcgorICogRU9GIG9yIHJlYWQgZXJyb3IsIGFn YWluLCBteXVucmQoKSBjYW4gbm90IGJlIHVzZWQuICBTb21ldGltZXMgbW9yZSB0aGFuCisgKiBv bmUgY2hhcmFjdGVyIGNhbiBiZSBwdXNoZWQgYmFjaywgYnV0IG9ubHkgb25lIGNoYXJhY3RlciBp cyBndWFyYW50ZWVkLgorICogU2luY2UgYSBwcmV2aW91cyBteXJlYWQoKSBtdXN0IGhhdmUgcmVh ZCBpdHMgY2hhcmFjdGVyIG91dCBvZiBteWJ1ZltdLAorICogdGhhdCBndWFyYW50ZWVzIHRoYXQg dGhlcmUgaXMgc3BhY2UgZm9yIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIuICBJZiBwdXNoCisgKiBi YWNrIHdhcyByZWFsbHkgbmVlZGVkIGFmdGVyIEVPRiwgYSBzbWFsbCBhZGRpdGlvbiBjb3VsZCBw cm92aWRlIHRoYXQuCisgKgorICogQXMgb2YgMDIvMjAwNyBteXVucmQoKSBpcyB1c2VkIGJ5IHR0 aW5sKCkuCisgKi8KK1ZPSUQKKyNpZmRlZiBDS19BTlNJQworbXl1bnJkKENIQVIgY2gpCisjZWxz ZQorbXl1bnJkKGNoKSBDSEFSIGNoOworI2VuZGlmCS8qIENLX0FOU0lDICovCit7CisgICAgaWYg KG15X2l0ZW0gPj0gMCkgeworCW15YnVmW215X2l0ZW0tLV0gPSBjaDsKKwkrK215X2NvdW50Owor ICAgIH0KK30KKworLyogIFQgVCBQIFUgUyBIIEIgQSBDIEsgIC0tICBQdXQgbiBieXRlcyBiYWNr IGludG8gdGhlIG15cmVhZCBidWZmZXIgKi8KKworc3RhdGljIENIQVIgKiBwdXNoYnVmID0gTlVM TDsKKy8qIHN0YXRpYyBpbnQgcHVzaGVkID0gMDsgKi8KKworaW50Cit0dHB1c2hiYWNrKHMsbikg Q0hBUiAqIHM7IGludCBuOyB7CisgICAgZGVidWcoRjEwMSwidHRwdXNoYmFjayBuIiwiIixuKTsK KyAgICBpZiAocHVzaGJ1ZiB8fCBuID4gTVlCVUZMRU4gfHwgbiA8IDEpCisgICAgICByZXR1cm4o LTEpOworICAgIGRlYnVnKEYxMDEsInR0cHVzaGJhY2sgbXlfY291bnQiLCIiLG15X2NvdW50KTsK KyAgICBpZiAobXlfY291bnQgPiAwKSB7CisJaWYgKCEocHVzaGJ1ZiA9IChDSEFSICopbWFsbG9j KG4rMSkpKQorCSAgcmV0dXJuKC0xKTsKKwltZW1jcHkocHVzaGJ1ZixteWJ1ZixteV9jb3VudCk7 CisJLyogcHVzaGVkID0gbXlfY291bnQ7ICovIC8qIChzZXQgYnV0IG5ldmVyIHVzZWQpICovCisg ICAgfQorICAgIG1lbWNweShteWJ1ZixzLG4pOworICAgIG15X2NvdW50ID0gbjsKKyAgICBteV9p dGVtID0gLTE7CisgICAgcmV0dXJuKDApOworfQorCisvKiBteWdldGJ1ZigpIC0tIEZpbGwgYnVm ZmVyIGZvciBteXJlYWQoKSBhbmQgcmV0dXJuIGZpcnN0IGNoYXJhY3Rlci4KKyAqCisgKiBUaGlz IGZ1bmN0aW9uIGlzIHdoYXQgbXlyZWFkKCkgdXNlcyB3aGVuIGl0IGNhbid0IGdldCB0aGUgbmV4 dCBjaGFyYWN0ZXIKKyAqIGRpcmVjdGx5IGZyb20gaXRzIGJ1ZmZlci4gIEZpcnN0LCBpdCBjYWxs cyBhIHN5c3RlbSBkZXBlbmRlbnQgbXlmaWxsYnVmKCkKKyAqIHRvIHJlYWQgYXQgbGVhc3Qgb25l IG5ldyBjaGFyYWN0ZXIgaW50byB0aGUgYnVmZmVyLCBhbmQgdGhlbiBpdCByZXR1cm5zCisgKiB0 aGUgZmlyc3QgY2hhcmFjdGVyIGp1c3QgYXMgbXlyZWFkKCkgd291bGQgaGF2ZSBkb25lLiAgVGhp cyBmdW5jdGlvbiBhbHNvCisgKiBpcyByZXNwb25zaWJsZSBmb3IgYWxsIGVycm9yIGNvbmRpdGlv bnMgdGhhdCBteXJlYWQoKSBjYW4gaW5kaWNhdGUuCisgKgorICogUmV0dXJuczogV2hlbiBPSwk9 PiBhIHBvc2l0aXZlIGNoYXJhY3RlciwgMCBvciBncmVhdGVyLgorICoJICAgIFdoZW4gRU9GCT0+ IC0yLgorICoJICAgIFdoZW4gZXJyb3IJPT4gLTMsIGVycm9yIGNvZGUgaW4gZXJybm8uCisgKgor ICogT2xkZXIgbXlyZWFkKClzIGFkZGl0aW9uYWxseSByZXR1cm5lZCAtMSB0byBpbmRpY2F0ZSB0 aGF0IHRoZXJlIHdhcyBub3RoaW5nCisgKiB0byByZWFkLCB1cG9uIHdoaWNoIHRoZSBjYWxsZXIg d291bGQgY2FsbCBteXJlYWQoKSBhZ2FpbiB1bnRpbCBpdCBnb3QKKyAqIHNvbWV0aGluZy4gIFRo ZSBuZXcgbXlyZWFkKCkvbXlnZXRidWYoKSBhbHdheXMgZ2V0cyBzb21ldGhpbmcuICBJZiBpdAor ICogZG9lc24ndCwgdGhlbiBtYWtlIGl0IGRvIHNvISAgQW55IHByb2dyYW0gdGhhdCBhY3R1YWxs eSBkZXBlbmRzIG9uIHRoZSBvbGQKKyAqIGJlaGF2aW91ciB3aWxsIGJyZWFrLgorICoKKyAqIFRo ZSBvbGRlciB2ZXJzaW9uIGFsc28gdXNlZCB0byByZXR1cm4gLTIgYm90aCBmb3IgRU9GIGFuZCBv dGhlciBlcnJvcnMsCisgKiBhbmQgdXNlZCB0byBzZXQgZXJybm8gdG8gOTk5OSBvbiBFT0YuICBU aGUgZXJybm8gc3R1ZmYgaXMgZ29uZSwgRU9GIGFuZAorICogb3RoZXIgZXJyb3JzIG5vdyByZXR1 cm4gZGlmZmVyZW50IHJlc3VsdHMsIGFsdGhvdWdoIEtlcm1pdCBjdXJyZW50bHkgbmV2ZXIKKyAq IGNoZWNrcyB0byBzZWUgd2hpY2ggaXQgd2FzLiAgSXQganVzdCBkaXNjb25uZWN0cyBpbiBib3Ro IGNhc2VzLgorICoKKyAqIEtlcm1pdCBsZXRzIHRoZSB1c2VyIHVzZSB0aGUgcXVpdCBrZXkgdG8g cGVyZm9ybSBzb21lIHNwZWNpYWwgY29tbWFuZHMKKyAqIGR1cmluZyBmaWxlIHRyYW5zZmVyLiAg VGhpcyBjYXVzZXMgcmVhZCgpLCBhbmQgdGh1cyBhbHNvIG15Z2V0YnVmKCksIHRvCisgKiBmaW5p c2ggd2l0aG91dCByZWFkaW5nIGFueXRoaW5nIGFuZCByZXR1cm4gdGhlIEVJTlRSIGVycm9yLiAg VGhpcyBzaG91bGQKKyAqIGJlIGNoZWNrZWQgYnkgdGhlIGNhbGxlci4gIE15Z2V0YnVmKCkgY291 bGQgcmV0cnkgdGhlIHJlYWQoKSBvbiBFSU5UUiwKKyAqIGJ1dCBpZiB0aGVyZSBpcyBub3RoaW5n IHRvIHJlYWQsIHRoaXMgY291bGQgZGVsYXkgS2VybWl0J3MgcmVhY3Rpb24gdG8KKyAqIHRoZSBj b21tYW5kLCBhbmQgbWFrZSBLZXJtaXQgYXBwZWFyIHVucmVzcG9uc2l2ZS4KKyAqCisgKiBUaGUg ZGVidWcoKSBjYWxsIHNob3VsZCBiZSByZW1vdmVkIGZvciBvcHRpbXVtIHBlcmZvcm1hbmNlLgor ICovCitpbnQKK215Z2V0YnVmKCkgeworICAgIGludCB4OworICAgIGVycm5vID0gMDsKKyNpZmRl ZiBERUJVRworICAgIGlmIChkZWJsb2cgJiYgbXlfY291bnQgPiAwKQorICAgICAgZGVidWcoRjEw MSwibXlnZXRidWYgSU1QUk9QRVJMWSBDQUxMRUQgd2l0aCBteV9jb3VudCIsIiIsbXlfY291bnQp OworI2VuZGlmIC8qIERFQlVHICovCisgICAgaWYgKG15X2NvdW50IDw9IDApCisgICAgICBteV9j b3VudCA9IG15ZmlsbGJ1ZigpOworCisjaWZkZWYgREVCVUcKKyNpZmRlZiBDT01NRU5UCisgICAg aWYgKGRlYmxvZykgZGVidWcoRjEwMSwgIm15Z2V0YnVmIHJlYWQiLCAiIiwgbXlfY291bnQpOwor I2Vsc2UgLyogQ09NTUVOVCAqLworICAgIGNraGV4ZHVtcCgibXlnZXRidWYgcmVhZCIsIG15YnVm LCBteV9jb3VudCk7CisjZW5kaWYgLyogQ09NTUVOVCAqLworI2VuZGlmIC8qIERFQlVHICovCisg ICAgeCA9IG15X2NvdW50OworICAgIGlmIChteV9jb3VudCA8PSAwKSB7CisJbXlfY291bnQgPSAw OworCW15X2l0ZW0gPSAtMTsKKwlkZWJ1ZyhGMTAxLCJteWdldGJ1ZiBlcnJubyIsIiIsZXJybm8p OworI2lmZGVmIFRDUFNPQ0tFVAorCWlmIChuZXRjb25uICYmIHR0bmV0ID09IE5FVF9UQ1BCICYm IGVycm5vICE9IDApIHsKKwkgICAgaWYgKGVycm5vICE9IEVJTlRSKSB7CisJCWRlYnVnKEYxMDEs Im15Z2V0YnVmIFRDUCBlcnJvciIsIiIsZXJybm8pOworCQl0dGNsb3MoMCk7CQkvKiBDbG9zZSB0 aGUgY29ubmVjdGlvbi4gKi8KKwkgICAgfQorCSAgICByZXR1cm4oLTMpOworCX0KKyNlbmRpZiAv KiBUQ1BTT0NLRVQgKi8KKwlpZiAoIW5ldGNvbm4gJiYgeGxvY2FsICYmIGVycm5vKSB7CisJICAg IGlmIChlcnJubyAhPSBFSU5UUikgeworCQlkZWJ1ZyhGMTAxLCJteWdldGJ1ZiBTRVJJQUwgZXJy b3IiLCIiLGVycm5vKTsKKwkJeCA9IC0zOworCQl0dGNsb3MoMCk7CQkvKiBDbG9zZSB0aGUgY29u bmVjdGlvbi4gKi8KKwkgICAgfQorCX0KKwlyZXR1cm4oKHggPCAwKSA/IC0zIDogLTIpOworICAg IH0KKyAgICAtLW15X2NvdW50OworICAgIHJldHVybigodW5zaWduZWQpKDB4ZmYgJiBteWJ1Zltt eV9pdGVtID0gMF0pKTsKK30KKworLyogbXlmaWxsYnVmKCk6CisgKiBTeXN0ZW0tZGVwZW5kZW50 IHJlYWQoKSBpbnRvIG15YnVmW10sIGFzIG1hbnkgY2hhcmFjdGVycyBhcyBwb3NzaWJsZS4KKyAq CisgKiBSZXR1cm5zOiBPSyA9PiBudW1iZXIgb2YgY2hhcmFjdGVycyByZWFkLCBhbHdheXMgbW9y ZSB0aGFuIHplcm8uCisgKiAgICAgICAgICBFT0YgPT4gMAorICogICAgICAgICAgRXJyb3IgPT4g LTEsIGVycm9yIGNvZGUgaW4gZXJybm8uCisgKgorICogSWYgdGhlcmUgaXMgaW5wdXQgYXZhaWxh YmxlIGluIHRoZSBzeXN0ZW0ncyBidWZmZXJzLCBhbGwgb2YgaXQgc2hvdWxkIGJlCisgKiByZWFk IGludG8gbXlidWZbXSBhbmQgdGhlIGZ1bmN0aW9uIHJldHVybiBpbW1lZGlhdGVseS4gIElmIG5v IGlucHV0IGlzCisgKiBhdmFpbGFibGUsIGl0IHNob3VsZCB3YWl0IGZvciBhIGNoYXJhY3RlciB0 byBhcnJpdmUsIGFuZCByZXR1cm4gd2l0aCB0aGF0CisgKiBvbmUgaW4gbXlidWZbXSBhcyBzb29u IGFzIHBvc3NpYmxlLiAgSXQgbWF5IHdhaXQgc29tZXdoYXQgcGFzdCB0aGUgZmlyc3QKKyAqIGNo YXJhY3RlciwgYnV0IGJlIGF3YXJlIHRoYXQgYW55IHN1Y2ggZGVsYXkgbGVuZ3RoZW5zIHRoZSBw YWNrZXQgdHVybmFyb3VuZAorICogdGltZSBkdXJpbmcga2VybWl0IGZpbGUgdHJhbnNmZXJzLiAg U2hvdWxkIG5ldmVyIHJldHVybiB3aXRoIHplcm8gY2hhcmFjdGVycworICogdW5sZXNzIEVPRiBv ciBpcnJlY292ZXJhYmxlIHJlYWQgZXJyb3IuCisgKgorICogQ29ycmVjdCBmdW5jdGlvbmluZyBk ZXBlbmRzIG9uIHRoZSBjb3JyZWN0IHR0eSBwYXJhbWV0ZXJzIGJlaW5nIHVzZWQuCisgKiBCZXR0 ZXIgY29udHJvbCBvZiBjdXJyZW50IHBhcmFtZXRlcnMgaXMgcmVxdWlyZWQgdGhhbiBtYXkgaGF2 ZSBiZWVuIHRoZQorICogY2FzZSBpbiBvbGRlciBLZXJtaXQgcmVsZWFzZXMuICBGb3IgaW5zdGFu Y2UsIE9fTkRFTEFZIChvciBlcXVpdmFsZW50KSBjYW4KKyAqIG5vIGxvbmdlciBiZSBzb21ldGlt ZXMgb2ZmIGFuZCBzb21ldGltZXMgb24gbGlrZSBpdCB1c2VkIHRvLCB1bmxlc3MgYQorICogc3Bl Y2lhbCBteWZpbGxidWYoKSBpcyB3cml0dGVuIHRvIGhhbmRsZSB0aGF0LiAgT3RoZXJ3aXNlIHRo ZSBvcmRpbmFyeQorICogbXlmaWxsYnVmKClzIG1heSB0aGluayB0aGV5IGhhdmUgY29tZSB0byBF T0YuCisgKgorICogSWYgeW91ciBzeXN0ZW0gaGFzIGEgZmFjaWxpdHkgdG8gZGlyZWN0bHkgcGVy Zm9ybSB0aGUgZnVuY3Rpb25pbmcgb2YKKyAqIG15ZmlsbGJ1ZigpLCB0aGVuIHVzZSBpdC4gIElm IHRoZSBzeXN0ZW0gY2FuIHRlbGwgeW91IGhvdyBtYW55IGNoYXJhY3RlcnMKKyAqIGFyZSBhdmFp bGFibGUgaW4gaXRzIGJ1ZmZlcnMsIHRoZW4gcmVhZCB0aGF0IGFtb3VudCAoYnV0IG5vdCBsZXNz IHRoYW4gMSkuCisgKiBJZiB0aGUgc3lzdGVtIGNhbiByZXR1cm4gYSBzcGVjaWFsIGluZGljYXRp b24gd2hlbiB5b3UgdHJ5IHRvIHJlYWQgd2l0aG91dAorICogYW55dGhpbmcgdG8gcmVhZCwgd2hp bGUgYWxsb3dpbmcgeW91IHRvIHJlYWQgYWxsIHRoZXJlIGlzIHdoZW4gdGhlcmUgaXMKKyAqIHNv bWV0aGluZywgeW91IG1heSBsb29wIHVudGlsIHRoZXJlIGlzIHNvbWV0aGluZyB0byByZWFkLCBi dXQgcHJvYmFibHkgdGhhdAorICogaXMgbm90IGdvb2QgZm9yIHRoZSBzeXN0ZW0gbG9hZC4KKyAq LworCisjaWZkZWYgU1ZPUlBPU0lYCisJLyogVGhpcyBpcyBmb3IgU3lzdGVtIElJSS9WIHdpdGgg Vk1JTj4wLCBWVElNRT0wIGFuZCBPX05ERUxBWSBvZmYsCisJICogYW5kIENMT0NBTCBzZXQgYW55 IHdheSB5b3UgbGlrZS4gIFRoaXMgd2F5LCByZWFkKCkgd2lsbCBkbyBleGFjdGx5CisJICogd2hh dCBpcyByZXF1aXJlZCBieSBteWZpbGxidWYoKTogSWYgdGhlcmUgaXMgZGF0YSBpbiB0aGUgYnVm ZmVycworCSAqIG9mIHRoZSBPLlMuLCBhbGwgYXZhaWxhYmxlIGRhdGEgaXMgcmVhZCBpbnRvIG15 YnVmLCB1cCB0byB0aGUgc2l6ZQorCSAqIG9mIG15YnVmLiAgSWYgdGhlcmUgaXMgbm9uZSwgdGhl IGZpcnN0IGNoYXJhY3RlciB0byBhcnJpdmUgaXMKKwkgKiBhd2FpdGVkIGFuZCByZXR1cm5lZC4K KwkgKi8KK2ludAorbXlmaWxsYnVmKCkgeworICAgIGludCBmZCwgbjsKKyNpZmRlZiBORVRDTUQK KyAgICBpZiAodHRwaXBlKQorICAgICAgZmQgPSBmZGluOworICAgIGVsc2UKKyNlbmRpZiAvKiBO RVRDTUQgKi8KKyAgICAgIGZkID0gdHR5ZmQ7CisKKyNpZmRlZiBzeGFFNTAKKyAgICAvKiBGcm9t IFMuIERlemF3YSBhdCBGdWppZmlsbSBpbiBKYXBhbi4gIEkgZG9uJ3Qga25vdyB3aHkgdGhpcyBp cyAqLworICAgIC8qIG5lY2Vzc2FyeSBmb3IgdGhlIHN4YSBFNTAsIGJ1dCBpdCBpcy4gKi8KKyAg ICByZXR1cm4gcmVhZChmZCwgbXlidWYsIDI1NSk7CisjZWxzZQorI2lmZGVmIEJFT1NPUkJFQk9Y CisgICAgd2hpbGUgKDEpIHsKKyNpZmRlZiBORVRDT05OCisgICAgICAgIGlmIChuZXRjb25uKSB7 CisgICAgICAgICAgICBuID0gbmV0eGluKHNpemVvZihteWJ1ZiksIChjaGFyICopbXlidWYpOwor ICAgICAgICAgICAgZGVidWcoRjEwMSwiQkVCT1ggU1ZPUlBPU0lYIG5ldHdvcmsgbXlmaWxsYnVm IiwiIixuKTsKKwl9CisgICAgICAgIGVsc2UKKyNlbmRpZiAvKiBORVRDT05OICovCisJICBuID0g cmVhZChmZCwgbXlidWYsIHNpemVvZihteWJ1ZikpOworCWRlYnVnKEYxMDEsIkJFQk9YIFNWT1JQ T1NJWCBub3RuZXQgbXlmaWxsYnVmIiwiIixuKTsKKyAgICAgICAgaWYgKG4gPiAwKQorCSAgcmV0 dXJuKG4pOworICAgICAgICBzbm9vemUoMTAwMC4wKTsKKyAgICB9CisjZWxzZSAvKiBCRU9TT1JC RUJPWCAqLworICAgIGVycm5vID0gMDsKKyAgICAvKiBkZWJ1ZyhGMTAxLCJTVk9SUE9TSVggbXlm aWxsYnVmIGNhbGxpbmcgcmVhZCgpIGZkIiwiIixmZCk7ICovCisjaWZkZWYgSUJNWDI1CisgICAg aWYgKG5ldGNvbm4gJiYgKG5ldHR5cGUgPT0gTkVUX0lYMjUpKSB7CisJLyogY2FuJ3QgdXNlIHNp emVvZiBiZWNhdXNlIG15YnVmIGlzIGEgcG9pbnRlciwgYW5kIG5vdCBhbiBhcnJheSEgKi8KKwlu ID0geDI1eGluKCBNWUJVRkxFTiwgbXlidWYgKTsKKyAgICB9IGVsc2UKKyNlbmRpZiAvKiBJQk1Y MjUgKi8KKworI2lmZGVmIENLX1NTTAorICAgICAgaWYgKHNzbF9hY3RpdmVfZmxhZyB8fCB0bHNf YWN0aXZlX2ZsYWcpIHsKKwkgIGludCBlcnJvciwgbiA9IDA7CisJICBkZWJ1ZyhGMTAwLCJteWZp bGxidWYgY2FsbGluZyBTU0xfcmVhZCgpIGZkIiwiIiwwKTsKKwkgIHdoaWxlIChuID09IDApIHsK KwkgICAgICBpZiAoc3NsX2FjdGl2ZV9mbGFnKQorICAgICAgICAgICAgICAgIG4gPSBTU0xfcmVh ZChzc2xfY29uLCAoY2hhciAqKW15YnVmLCBzaXplb2YobXlidWYpKTsKKwkgICAgICBlbHNlIGlm ICh0bHNfYWN0aXZlX2ZsYWcpCisgICAgICAgICAgICAgICAgbiA9IFNTTF9yZWFkKHRsc19jb24s IChjaGFyICopbXlidWYsIHNpemVvZihteWJ1ZikpOworICAgICAgICAgICAgICBlbHNlCisJCWJy ZWFrOworCSAgICAgIHN3aXRjaCAoU1NMX2dldF9lcnJvcihzc2xfYWN0aXZlX2ZsYWc/c3NsX2Nv bjp0bHNfY29uLG4pKSB7CisJCWNhc2UgU1NMX0VSUk9SX05PTkU6CisJCSAgaWYgKG4gPiAwKQor ICAgICAgICAgICAgICAgICAgICByZXR1cm4obik7CisJCSAgaWYgKG4gPCAwKQorICAgICAgICAg ICAgICAgICAgICByZXR1cm4oLTIpOworCQkgIG1zbGVlcCg1MCk7CisJCSAgYnJlYWs7CisJCWNh c2UgU1NMX0VSUk9SX1dBTlRfV1JJVEU6CisJCWNhc2UgU1NMX0VSUk9SX1dBTlRfUkVBRDoKKwkJ ICByZXR1cm4oLTEpOworCQljYXNlIFNTTF9FUlJPUl9TWVNDQUxMOgorCQkgIGlmIChuICE9IDAp CisJCSAgICByZXR1cm4oLTEpOworCQljYXNlIFNTTF9FUlJPUl9XQU5UX1g1MDlfTE9PS1VQOgor CQljYXNlIFNTTF9FUlJPUl9TU0w6CisJCWNhc2UgU1NMX0VSUk9SX1pFUk9fUkVUVVJOOgorCQlk ZWZhdWx0OgorCQkgIHR0Y2xvcygwKTsKKwkJICByZXR1cm4oLTMpOworICAgICAgICAgICAgfQor ICAgICAgICB9CisgICAgfQorI2VuZGlmIC8qIENLX1NTTCAqLworI2lmZGVmIENLX0tFUkJFUk9T CisjaWZkZWYgS1JCNAorI2lmZGVmIFJMT0dDT0RFCisgICAgaWYgKHR0bnByb3RvID09IE5QX0VL NExPR0lOKSB7CisJZGVidWcoRjEwMSwibXlmaWxsYnVmIGNhbGxpbmcga3JiNF9kZXNfcmVhZCgp IGZkIiwiIix0dHlmZCk7CisgICAgICAgIGlmICgobiA9IGtyYjRfZGVzX3JlYWQodHR5ZmQsKGNo YXIgKilteWJ1ZixzaXplb2YobXlidWYpKSkgPCAwKQorCSAgcmV0dXJuKC0zKTsKKyAgICAgICAg ZWxzZQorCSAgcmV0dXJuKG4pOworICAgIH0KKyNlbmRpZiAvKiBSTE9HQ09ERSAqLworI2VuZGlm IC8qIEtSQjQgKi8KKyNpZmRlZiBLUkI1CisjaWZkZWYgUkxPR0NPREUKKyAgICBpZiAodHRucHJv dG8gPT0gTlBfRUs1TE9HSU4pIHsKKwlkZWJ1ZyhGMTAxLCJteWZpbGxidWYgY2FsbGluZyBrcmI1 X2Rlc19yZWFkKCkgZmQiLCIiLHR0eWZkKTsKKyAgICAgICAgaWYgKChuID0ga3JiNV9kZXNfcmVh ZCh0dHlmZCwoY2hhciAqKW15YnVmLHNpemVvZihteWJ1ZiksMCkpIDwgMCkKKwkgIHJldHVybigt Myk7CisgICAgICAgIGVsc2UKKwkgIHJldHVybihuKTsKKyAgICB9CisjZW5kaWYgLyogUkxPR0NP REUgKi8KKyNpZmRlZiBLUkI1X1UyVQorICAgIGlmICh0dG5wcm90byA9PSBOUF9LNVUyVSkgewor CWRlYnVnKEYxMDEsIm15ZmlsbGJ1ZiBjYWxsaW5nIGtyYjVfdTJ1X3JlYWQoKSBmZCIsIiIsdHR5 ZmQpOworICAgICAgICBpZiAoKG4gPSBrcmI1X3UydV9yZWFkKHR0eWZkLChjaGFyICopbXlidWYs c2l6ZW9mKG15YnVmKSkpIDwgMCkKKwkgIHJldHVybigtMyk7CisgICAgICAgIGVsc2UKKwkgIHJl dHVybihuKTsKKyAgICB9CisjZW5kaWYgLyogS1JCNV9VMlUgKi8KKyNlbmRpZiAvKiBLUkI1ICov CisjZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KKworI2lmZGVmIE5FVFBUWQorI2lmZGVmIEhBVkVf UFRZVFJBUAorICAgIC8qIFNwZWNpYWwgaGFuZGxpbmcgZm9yIEhQLVVYIHB0eSBpL28gKi8KKyAg cHR5cmVhZDoKKyAgICBpZiAodHRwdHkgJiYgcHR5X3RyYXBfcGVuZGluZyh0dHlmZCkgPiAwKSB7 CisJZGVidWcoRjEwMSwibXlmaWxsYnVmIGNhbGxpbmcgcHR5X3RyYXBfaGFuZGxlcigpIGZkIiwi Iix0dHlmZCk7CisgICAgICAgIGlmIChwdHlfdHJhcF9oYW5kbGVyKHR0eWZkKSA+IDApIHsKKyAg ICAgICAgICAgIHR0Y2xvcygwKTsKKyAgICAgICAgICAgIHJldHVybigtMyk7CisgICAgICAgIH0K KyAgICB9CisjZW5kaWYgLyogSEFWRV9QVFlUUkFQICovCisjZW5kaWYgLyogTkVUUFRZICovCisg ICAgZGVidWcoRjEwMSwibXlmaWxsYnVmIGNhbGxpbmcgcmVhZCgpIGZkIiwiIix0dHlmZCk7Cisg ICAgbiA9IHJlYWQoZmQsIG15YnVmLCBzaXplb2YobXlidWYpKTsKKyAgICBkZWJ1ZyhGMTAxLCJT Vk9SUE9TSVggbXlmaWxsYnVmIHJlYWQiLCIiLG4pOworICAgIGRlYnVnKEYxMDEsIlNWT1JQT1NJ WCBteWZpbGxidWYgZXJybm8iLCIiLGVycm5vKTsKKyAgICBkZWJ1ZyhGMTAxLCJTVk9SUE9TSVgg bXlmaWxsYnVmIHR0Y2FyciIsIiIsdHRjYXJyKTsKKyAgICBpZiAobiA8IDEpIHsKKyNpZmRlZiBO RVRQVFkKKyNpZmRlZiBIQVZFX1BUWVRSQVAKKyAgICAgICAgLyogV2hlbiB3ZSBoYXZlIGEgUFRZ IHRyYXAgaW4gcGxhY2UgdGhlIGNvbm5lY3Rpb24gY2Fubm90ICovCisgICAgICAgIC8qIGJlIGNs b3NlZCB1bnRpbCB0aGUgdHJhcCByZWNlaXZlcyBhIGNsb3NlIGluZGljYXRpb24uICAqLworICAg ICAgICBpZiAobiA9PSAwICYmIHR0cHR5KQorICAgICAgICAgICAgZ290byBwdHlyZWFkOworI2Vu ZGlmIC8qIEhBVkVfUFRZVFJBUCAqLworI2VuZGlmIC8qIE5FVFBUWSAqLworICAgICAgICByZXR1 cm4oLTMpOworICAgIH0KKyAgICByZXR1cm4obik7CisjZW5kaWYgLyogQkVPU09SQkVCT1ggKi8K KyNlbmRpZiAvKiBzeGFFNTAgKi8KK30KKworI2Vsc2UgLyogbm90IEFUJlQgb3IgUE9TSVggKi8K KworI2lmZGVmIGFlZ2lzCisJLyogVGhpcyBpcyBxdW90ZWQgZnJvbSB0aGUgb2xkIG15cmVhZCgp LiAgVGhlIHNlbWFudGljcyBzZWVtIHRvIGJlCisJICogYWxyaWdodCwgYnV0IG1heWJlIGVycm5v IHdvdWxkIG5vdCBuZWVkIHRvIGJlIHNldCBldmVuIHdoZW4KKwkgKiB0aGVyZSBpcyBubyBlcnJv cj8gIEkgZG9uJ3Qga25vdyBhZWdpcy4KKwkgKi8KK2ludAorbXlmaWxsYnVmKCkgeworICAgIGlu dCBjb3VudDsKKyNpZmRlZiBORVRDTUQKKyAgICBpZiAodHRwaXBlKQorICAgICAgZmQgPSBmZGlu OworICAgIGVsc2UKKyNlbmRpZiAvKiBORVRDTUQgKi8KKyAgICAgIGZkID0gdHR5ZmQ7CisKKyAg ICBjb3VudCA9IGlvc18kZ2V0KChzaG9ydClmZCwgaW9zXyRjb25kX29wdCwgbXlidWYsIDI1Nkws IHN0KTsKKyAgICBlcnJubyA9IEVJTzsKKyAgICBpZiAoc3QuYWxsID09IGlvc18kZ2V0X2NvbmRp dGlvbmFsX2ZhaWxlZCkgLyogZ2V0IGF0IGxlYXN0IG9uZSAqLworICAgICAgY291bnQgPSBpb3Nf JGdldCgoc2hvcnQpZmQsIDAsIG15YnVmLCAxTCwgc3QpOworICAgIGlmIChzdC5hbGwgPT0gaW9z XyRlbmRfb2ZfZmlsZSkKKyAgICAgIHJldHVybigtMyk7CisgICAgZWxzZSBpZiAoc3QuYWxsICE9 IHN0YXR1c18kb2spIHsKKwllcnJubyA9IEVJTzsKKwlyZXR1cm4oLTEpOworICAgIH0KKyAgICBy ZXR1cm4oY291bnQgPiAwID8gY291bnQgOiAtMyk7Cit9CisjZWxzZSAvKiAhYWVnaXMgKi8KKwor I2lmZGVmIEZJT05SRUFECisJLyogVGhpcyBpcyBmb3Igc3lzdGVtcyB3aXRoIEZJT05SRUFELiAg RklPTlJFQUQgcmV0dXJucyB0aGUgbnVtYmVyCisJICogb2YgY2hhcmFjdGVycyBhdmFpbGFibGUg Zm9yIHJlYWRpbmcuIElmIG5vbmUgYXJlIGF2YWlsYWJsZSwgd2FpdAorCSAqIHVudGlsIHNvbWV0 aGluZyBhcnJpdmVzLCBvdGhlcndpc2UgcmV0dXJuIGFsbCB0aGVyZSBpcy4KKwkgKi8KK2ludAor bXlmaWxsYnVmKCkgeworICAgIFBFRUtUWVBFIGF2YWlsID0gMDsKKyAgICBpbnQgeCwgZmQ7Cisj aWZkZWYgTkVUQ01ECisgICAgaWYgKHR0cGlwZSkKKyAgICAgIGZkID0gZmRpbjsKKyAgICBlbHNl CisjZW5kaWYgLyogTkVUQ01EICovCisgICAgICBmZCA9IHR0eWZkOworCisjaWZkZWYgU1VOWDI1 CisvKgorICBTdW5MaW5rIFguMjUgc3VwcG9ydCBpbiB0aGlzIHJvdXRpbmUgZnJvbSBTdGVmYWFu IEEuIEVlY2tlbHMsIEV1cm9zdGF0IChDRUMpLgorICBEZXBlbmRzIG9uIFN1bk9TIGhhdmluZyBG SU9OUkVBRCwgbm90IGJlY2F1c2Ugd2UgdXNlIGl0LCBidXQganVzdCBzbyB0aGlzCisgIGNvZGUg aXMgZ3JvdXBlZCBjb3JyZWN0bHkgd2l0aGluIHRoZSAjaWZkZWZzLiAgTGV0J3MgaG9wZSBTb2xh cmlzIGtlZXBzIGl0LgorCisgIFdlIGNhbGwgeDI1eGluKCkgaW5zdGVhZCBvZiByZWFkKCkgc28g dGhhdCBRLUJpdCBwYWNrZXRzLCB3aGljaCBjb250YWluCisgIFguMjUgc2VydmljZS1sZXZlbCBp bmZvcm1hdGlvbiAoZS5nLiBQQUQgcGFyYW1ldGVyIGNoYW5nZXMpLCBjYW4gYmUgcHJvY2Vzc2Vk CisgIHRyYW5zcGFyZW50bHkgdG8gdGhlIHVwcGVyLWxldmVsIGNvZGUuICBUaGlzIGlzIGEgYmxv Y2tpbmcgcmVhZCwgYW5kIHNvCisgIHdlIGRlcGVuZCBvbiBoaWdoZXItbGV2ZWwgY29kZSAoc3Vj aCBhcyB0dGluYygpKSB0byBzZXQgYW55IG5lY2Vzc2FyeSBhbGFybXMuCisqLworICAgIGV4dGVy biBpbnQgbmV0dHlwZTsKKyAgICBpZiAobmV0Y29ubiAmJiBuZXR0eXBlID09IE5FVF9TWDI1KSB7 CisJd2hpbGUgKCh4ID0geDI1eGluKHNpemVvZih4MjVidWYpLCB4MjVidWYpKSA8IDEpIDsKKwly ZXR1cm4oeCAtIDEpOwkgICAgICAgIC8qICItMSIgY29tcGVuc2F0ZXMgZm9yIGV4dHJhIHN0YXR1 cyBieXRlICovCisgICAgfQorI2VuZGlmIC8qIFNVTlgyNSAqLworCisjaWZkZWYgQ0tfU1NMCisg ICAgaWYgKHNzbF9hY3RpdmVfZmxhZyB8fCB0bHNfYWN0aXZlX2ZsYWcpIHsKKyAgICAgICAgaW50 IGVycm9yLCBuID0gMDsKKyAgICAgICAgd2hpbGUgKG4gPT0gMCkgeworICAgICAgICAgICAgaWYg KHNzbF9hY3RpdmVfZmxhZykKKwkgICAgICBuID0gU1NMX3JlYWQoc3NsX2NvbiwgKGNoYXIgKilt eWJ1Ziwgc2l6ZW9mKG15YnVmKSk7CisgICAgICAgICAgICBlbHNlCisJICAgICAgbiA9IFNTTF9y ZWFkKHRsc19jb24sIChjaGFyICopbXlidWYsIHNpemVvZihteWJ1ZikpOworICAgICAgICAgICAg c3dpdGNoIChTU0xfZ2V0X2Vycm9yKHNzbF9hY3RpdmVfZmxhZz9zc2xfY29uOnRsc19jb24sbikp IHsKKwkgICAgICBjYXNlIFNTTF9FUlJPUl9OT05FOgorICAgICAgICAgICAgICAgIGlmIChuID4g MCkKKwkJICByZXR1cm4obik7CisgICAgICAgICAgICAgICAgaWYgKG4gPCAwKQorCQkgIHJldHVy bigtMik7CisgICAgICAgICAgICAgICAgbXNsZWVwKDUwKTsKKyAgICAgICAgICAgICAgICBicmVh azsKKwkgICAgICBjYXNlIFNTTF9FUlJPUl9XQU5UX1dSSVRFOgorCSAgICAgIGNhc2UgU1NMX0VS Uk9SX1dBTlRfUkVBRDoKKyAgICAgICAgICAgICAgICByZXR1cm4oLTEpOworCSAgICAgIGNhc2Ug U1NMX0VSUk9SX1NZU0NBTEw6CisJCWlmIChuICE9IDApCisJCSAgcmV0dXJuKC0xKTsKKwkgICAg ICBjYXNlIFNTTF9FUlJPUl9XQU5UX1g1MDlfTE9PS1VQOgorCSAgICAgIGNhc2UgU1NMX0VSUk9S X1NTTDoKKwkgICAgICBjYXNlIFNTTF9FUlJPUl9aRVJPX1JFVFVSTjoKKwkgICAgICBkZWZhdWx0 OgorICAgICAgICAgICAgICAgIHR0Y2xvcygwKTsKKyAgICAgICAgICAgICAgICByZXR1cm4oLTIp OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorI2VuZGlmIC8qIENLX1NTTCAqLwor I2lmZGVmIENLX0tFUkJFUk9TCisjaWZkZWYgS1JCNAorI2lmZGVmIFJMT0dDT0RFCisgICAgaWYg KHR0bnByb3RvID09IE5QX0VLNExPR0lOKSB7CisgICAgICAgIGlmICgoeCA9IGtyYjRfZGVzX3Jl YWQodHR5ZmQsbXlidWYsc2l6ZW9mKG15YnVmKSkpIDwgMCkKKwkgIHJldHVybigtMSk7CisgICAg ICAgIGVsc2UKKwkgIHJldHVybih4KTsKKyAgICB9CisjZW5kaWYgLyogUkxPR0NPREUgKi8KKyNl bmRpZiAvKiBLUkI0ICovCisjaWZkZWYgS1JCNQorI2lmZGVmIFJMT0dDT0RFCisgICAgaWYgKHR0 bnByb3RvID09IE5QX0VLNUxPR0lOKSB7CisgICAgICAgIGlmICgoeCA9IGtyYjVfZGVzX3JlYWQo dHR5ZmQsbXlidWYsc2l6ZW9mKG15YnVmKSwwKSkgPCAwKQorCSAgcmV0dXJuKC0xKTsKKyAgICAg ICAgZWxzZQorCSAgcmV0dXJuKHgpOworICAgIH0KKyNlbmRpZiAvKiBSTE9HQ09ERSAqLworI2lm ZGVmIEtSQjVfVTJVCisgICAgaWYgKHR0bnByb3RvID09IE5QX0s1VTJVKSB7CisgICAgICAgIGlm ICgoeCA9IGtyYjVfdTJ1X3JlYWQodHR5ZmQsbXlidWYsc2l6ZW9mKG15YnVmKSkpIDwgMCkKKwkg IHJldHVybigtMSk7CisgICAgICAgIGVsc2UKKwkgIHJldHVybih4KTsKKyAgICB9CisjZW5kaWYg LyogS1JCNV9VMlUgKi8KKyNlbmRpZiAvKiBLUkI1ICovCisjZW5kaWYgLyogQ0tfS0VSQkVST1Mg Ki8KKworICAgIGVycm5vID0gMDsKKyAgICBkZWJ1ZyhGMTAxLCJteWZpbGxidWYgY2FsbGluZyBG SU9OUkVBRCBpb2N0bCIsIiIseGxvY2FsKTsKKyAgICB4ID0gaW9jdGwoZmQsIEZJT05SRUFELCAm YXZhaWwpOworI2lmZGVmIERFQlVHCisgICAgaWYgKGRlYmxvZykgeworCWRlYnVnKEYxMDEsIm15 ZmlsbGJ1ZiBGSU9OUkVBRCIsIiIseCk7CisJZGVidWcoRjEwMSwibXlmaWxsYnVmIEZJT05SRUFE IGF2YWlsIiwiIixhdmFpbCk7CisJZGVidWcoRjEwMSwibXlmaWxsYnVmIEZJT05SRUFEIGVycm5v IiwiIixlcnJubyk7CisgICAgfQorI2VuZGlmIC8qIERFQlVHICovCisgICAgaWYgKHggPCAwIHx8 IGF2YWlsID09IDApCisgICAgICBhdmFpbCA9IDE7CisKKyAgICBpZiAoYXZhaWwgPiBNWUJVRkxF TikKKyAgICAgIGF2YWlsID0gTVlCVUZMRU47CisKKyAgICBlcnJubyA9IDA7CisKKyAgICB4ID0g cmVhZChmZCwgbXlidWYsIChpbnQpIGF2YWlsKTsKKyNpZmRlZiBERUJVRworICAgIGlmIChkZWJs b2cpIHsKKwlkZWJ1ZyhGMTAxLCJteWZpbGxidWYgYXZhaWwiLCIiLGF2YWlsKTsKKwlkZWJ1ZyhG MTAxLCJteWZpbGxidWYgcmVhZCIsIiIseCk7CisJZGVidWcoRjEwMSwibXlmaWxsYnVmIHJlYWQg ZXJybm8iLCIiLGVycm5vKTsKKyAgICAgICAgaWYgKHggPiAwKQorCSAgY2toZXhkdW1wKCJteWZp bGxidWYgbXlidWYiLG15YnVmLHgpOworICAgIH0KKyNlbmRpZiAvKiBERUJVRyAqLworICAgIGlm ICh4IDwgMSkgeCA9IC0zOwkJCS8qIHJlYWQgMCA9PSBjb25uZWN0aW9uIGxvc3MgKi8KKyAgICBy ZXR1cm4oeCk7Cit9CisKKyNlbHNlIC8qICFGSU9OUkVBRCAqLworLyogQWRkIG90aGVyIHN5c3Rl bXMgaGVyZSwgYmV0d2VlbiAjaWZkZWYgYW5kICNlbHNlLCBlLmcuIE5FVENPTk4uICovCisvKiBX aGVuIHRoZXJlIGlzIG5vIG90aGVyIHBvc3NpYmlsaXR5LCByZWFkIDEgY2hhcmFjdGVyIGF0IGEg dGltZS4gKi8KK2ludAorbXlmaWxsYnVmKCkgeworICAgIGludCB4OworCisjaWZkZWYgQ0tfU1NM CisgICAgaWYgKHNzbF9hY3RpdmVfZmxhZyB8fCB0bHNfYWN0aXZlX2ZsYWcpIHsKKyAgICAgICAg aW50IGVycm9yLCBuID0gMDsKKyAgICAgICAgd2hpbGUgKG4gPT0gMCkgeworICAgICAgICAgICAg aWYgKHNzbF9hY3RpdmVfZmxhZykKKwkgICAgICBuID0gU1NMX3JlYWQoc3NsX2NvbiwgKGNoYXIg KilteWJ1Ziwgc2l6ZW9mKG15YnVmKSk7CisgICAgICAgICAgICBlbHNlCisJICAgICAgY291bnQg PSBTU0xfcmVhZCh0bHNfY29uLCAoY2hhciAqKW15YnVmLCBzaXplb2YobXlidWYpKTsKKyAgICAg ICAgICAgIHN3aXRjaCAoU1NMX2dldF9lcnJvcihzc2xfYWN0aXZlX2ZsYWc/c3NsX2Nvbjp0bHNf Y29uLG4pKSB7CisJICAgICAgY2FzZSBTU0xfRVJST1JfTk9ORToKKyAgICAgICAgICAgICAgICBp ZiAobiA+IDApCisJCSAgcmV0dXJuKG4pOworICAgICAgICAgICAgICAgIGlmIChuIDwgMCkKKwkJ ICByZXR1cm4oLTIpOworICAgICAgICAgICAgICAgIG1zbGVlcCg1MCk7CisgICAgICAgICAgICAg ICAgYnJlYWs7CisJICAgICAgY2FzZSBTU0xfRVJST1JfV0FOVF9XUklURToKKwkgICAgICBjYXNl IFNTTF9FUlJPUl9XQU5UX1JFQUQ6CisgICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKKwkgICAg ICBjYXNlIFNTTF9FUlJPUl9TWVNDQUxMOgorCQlpZiAobiAhPSAwKQorCQkgIHJldHVybigtMSk7 CisJICAgICAgY2FzZSBTU0xfRVJST1JfV0FOVF9YNTA5X0xPT0tVUDoKKwkgICAgICBjYXNlIFNT TF9FUlJPUl9TU0w6CisJICAgICAgY2FzZSBTU0xfRVJST1JfWkVST19SRVRVUk46CisJICAgICAg ZGVmYXVsdDoKKyAgICAgICAgICAgICAgICB0dGNsb3MoMCk7CisgICAgICAgICAgICAgICAgcmV0 dXJuKC0yKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBDS19T U0wgKi8KKyNpZmRlZiBDS19LRVJCRVJPUworI2lmZGVmIEtSQjQKKyNpZmRlZiBSTE9HQ09ERQor ICAgIGlmICh0dG5wcm90byA9PSBOUF9FSzRMT0dJTikgeworICAgICAgICBpZiAoKGxlbiA9IGty YjRfZGVzX3JlYWQodHR5ZmQsbXlidWYsc2l6ZW9mKG15YnVmKSkpIDwgMCkKKwkgIHJldHVybigt MSk7CisgICAgICAgIGVsc2UKKwkgIHJldHVybihsZW4pOworICAgIH0KKyNlbmRpZiAvKiBSTE9H Q09ERSAqLworI2VuZGlmIC8qIEtSQjQgKi8KKyNpZmRlZiBLUkI1CisjaWZkZWYgUkxPR0NPREUK KyAgICBpZiAodHRucHJvdG8gPT0gTlBfRUs1TE9HSU4pIHsKKyAgICAgICAgaWYgKChsZW4gPSBr cmI1X2Rlc19yZWFkKHR0eWZkLG15YnVmLHNpemVvZihteWJ1ZiksMCkpIDwgMCkKKwkgIHJldHVy bigtMSk7CisgICAgICAgIGVsc2UKKwkgIHJldHVybihsZW4pOworICAgIH0KKyNlbmRpZiAvKiBS TE9HQ09ERSAqLworI2lmZGVmIEtSQjVfVTJVCisgICAgaWYgKHR0bnByb3RvID09IE5QX0s1VTJV KSB7CisgICAgICAgIGlmICgobGVuID0ga3JiNV91MnVfcmVhZCh0dHlmZCxteWJ1ZixzaXplb2Yo bXlidWYpKSkgPCAwKQorCSAgcmV0dXJuKC0xKTsKKyAgICAgICAgZWxzZQorCSAgcmV0dXJuKGxl bik7CisgICAgfQorI2VuZGlmIC8qIEtSQjVfVTJVICovCisjZW5kaWYgLyogS1JCNSAqLworI2Vu ZGlmIC8qIENLX0tFUkJFUk9TICovCisKKyNpZmRlZiBORVRDTUQKKyAgICBpZiAodHRwaXBlKQor ICAgICAgZmQgPSBmZGluOworICAgIGVsc2UKKyNlbmRpZiAvKiBORVRDTUQgKi8KKyAgICAgIGZk ID0gdHR5ZmQ7CisgICAgeCA9IHJlYWQoZmQsIG15YnVmLCAxKTsKKyAgICByZXR1cm4oeCA+IDAg PyB4IDogLTMpOworfQorCisjZW5kaWYgLyogIUZJT05SRUFEICovCisjZW5kaWYgLyogIWFlZ2lz ICovCisjZW5kaWYgLyogIUFUVFNWICovCisKKyNlbmRpZiAvKiBNWVJFQUQgKi8KKworLyogIFQg VCBfIFQgTiBPIFAgVCAgLS0gIEhhbmRsZSBUZWxuZXQgbmVnb3Rpb25zIGluIGluY29taW5nIGRh dGEgKi8KKy8qCisgIENhbGwgd2l0aCB0aGUgSUFDIHRoYXQgd2FzIGVuY291bnRlcmVkLgorICBS ZXR1cm5zOgorICAgLTM6IElmIGNvbm5lY3Rpb24gaGFzIGRyb3BwZWQgb3IgZ29uZSBiYWQuCisg ICAtMjogT24gVGVsbmV0IHByb3RvY29sIGVycm9yIHJlc3VsdGluZyBpbiBpbmNvbnNpc3RlbnQg c3RhdGVzLgorICAgIDA6IElmIG5lZ290aWF0aW9uIE9LIGFuZCBjYWxsZXIgaGFzIG5vdGhpbmcg dG8gZG8uCisgICAgMTogSWYgcGFja2V0IHN0YXJ0IGNoYXJhY3RlciBoYXMgY2hhbmdlZCAobmV3 IHZhbHVlIGlzIGluIGdsb2JhbCBzdGNocikuCisgIDI1NTogSWYgdGhlcmUgd2FzIGEgcXVvdGVk IElBQyBhcyBkYXRhLgorICAgb3I6IE5vdCBhdCBhbGwgaWYgd2UgZ290IGEgbGVnaXRpbWF0ZSBU ZWxuZXQgTG9nb3V0IHJlcXVlc3QuCisqLworI2lmZGVmIFRDUFNPQ0tFVAorc3RhdGljIGludAor dHRfdG5vcHQobikgaW50IG47IHsJCQkvKiBIYW5kbGUgVGVsbmV0IG9wdGlvbnMgKi8KKyAgICAv KiBJbiBjYXNlIGNhbGxlciBkaWQgbm90IGFscmVhZHkgY2hlY2sgdGhlc2UgY29uZGl0aW9ucy4u LiAgKi8KKyAgICBpZiAobiA9PSBJQUMgJiYKKwkoKHhsb2NhbCAmJiBuZXRjb25uICYmIElTX1RF TE5FVCgpKSB8fAorCSAoIXhsb2NhbCAmJiBzc3RlbG5ldCkpKSB7CisJZXh0ZXJuIGludCBzZXJ2 ZXI7CisJaW50IHR4ID0gMDsKKwlkZWJ1ZyhGMTAwLCJ0dGlubCBjYWxsaW5nIHRuX2Rvb3AoKSIs IiIsMCk7CisJdHggPSB0bl9kb29wKChDSEFSKShuICYgMHhmZiksZHVwbGV4LHR0aW5jKTsKKwlk ZWJ1ZyhGMTExLCJ0dGlubCB0bl9kb29wKCkgcmV0dXJuZWQiLCJ0eCIsdHgpOworCXN3aXRjaCAo dHgpIHsKKwkgIGNhc2UgMDoKKwkgICAgcmV0dXJuKDApOworCSAgY2FzZSAtMToJCQkvKiBJL08g ZXJyb3IgKi8KKwkgICAgdHRpbW9mZigpOwkJCS8qIFR1cm4gb2ZmIHRpbWVyICovCisJICAgIHJl dHVybigtMyk7CisgICAgICAgICAgY2FzZSAtMjoJCQkvKiBDb25uZWN0aW9uIGZhaWxlZC4gKi8K KyAgICAgICAgICBjYXNlIC0zOgorCSAgICB0dGltb2ZmKCk7CQkJLyogVHVybiBvZmYgdGltZXIg Ki8KKwkgICAgdHRjbG9zKDApOworCSAgICByZXR1cm4oLTMpOworCSAgY2FzZSAxOgkJCS8qIEVD SE8gY2hhbmdlICovCisJICAgIGR1cGxleCA9IDE7CisJICAgIHJldHVybigwKTsKKwkgIGNhc2Ug MjoJCQkvKiBFQ0hPIGNoYW5nZSAqLworCSAgICBkdXBsZXggPSAwOworCSAgICByZXR1cm4oMCk7 CisJICBjYXNlIDM6CQkJLyogUXVvdGVkIElBQyAqLworCSAgICBuID0gMjU1OworCSAgICByZXR1 cm4oKHVuc2lnbmVkKTI1NSk7CisjaWZkZWYgSUtTX09QVElPTgorCSAgY2FzZSA0OiB7CisJICAg ICAgaWYgKFRFTE9QVF9TQihURUxPUFRfS0VSTUlUKS5rZXJtaXQudV9zdGFydCAmJiBzZXJ2ZXIK KyNpZmRlZiBJS1NECisJCSAgJiYgIWluc2VydmVyCisjZW5kaWYgLyogSUtTRCAqLworCQkgICkg ewkJCS8qIFJlbW90ZSBpbiBTZXJ2ZXIgbW9kZSAqLworCQkgIHR0aW1vZmYoKTsJCS8qIFR1cm4g b2ZmIHRpbWVyICovCisJCSAgZGVidWcoRjEwMCwidV9zdGFydCBhbmQgIWluc2VydmVyIiwiIiww KTsKKwkJICByZXR1cm4oLTIpOwkJLyogRW5kIHNlcnZlciBtb2RlICovCisJICAgICAgfSBlbHNl IGlmICghVEVMT1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1pdC5tZV9zdGFydCAmJgorCQkJIHNl cnZlcgorCQkJICkgewkJLyogSSdtIG5vIGxvbmdlciBpbiBTZXJ2ZXIgTW9kZSAqLworCQkgIGRl YnVnKEYxMDAsIm1lX3N0YXJ0IGFuZCBzZXJ2ZXIiLCIiLDApOworCQkgIHR0aW1vZmYoKTsKKwkJ ICByZXR1cm4oLTIpOworCSAgICAgIH0KKwkgICAgICByZXR1cm4oMCk7CisJICB9CisJICBjYXNl IDU6IHsJCQkvKiBTdGFydCBjaGFyYWN0ZXIgY2hhbmdlICovCisJICAgICAgLyogZXh0ZXJuIENI QVIgc3RjaHI7ICovCisJICAgICAgLyogc3RhcnQgPSBzdGNocjsgKi8KKwkgICAgICByZXR1cm4o MSk7CisJICB9CisjZW5kaWYgLyogSUtTX09QVElPTiAqLworCSAgY2FzZSA2OgkJCS8qIFJlbW90 ZSBMb2dvdXQgKi8KKwkgICAgdHRpbW9mZigpOworCSAgICB0dGNsb3MoMCk7CisjaWZkZWYgSUtT RAorCSAgICBpZiAoaW5zZXJ2ZXIgJiYgIWxvY2FsKQorCSAgICAgIGRvZXhpdChHT09EX0VYSVQs MCk7CisJICAgIGVsc2UKKyNlbmRpZiAvKiBJS1NEICovCisJICAgICAgcmV0dXJuKC0yKTsKKwkg IGRlZmF1bHQ6CisJICAgIHJldHVybigwKTsKKwl9CisgICAgfSBlbHNlCisgICAgICByZXR1cm4o MCk7Cit9CisjZW5kaWYgLyogVENQU09DS0VUICovCisKKy8qICBUIFQgRiBMIFUgSSAgLS0gIEZs dXNoIHR0eSBpbnB1dCBidWZmZXIgKi8KKwordm9pZAordHRmbHV4KCkgewkJCQkvKiBCdXQgZmly c3QuLi4gKi8KKyNpZmRlZiBNWVJFQUQKKy8qCisgIEZsdXNoIGludGVybmFsIE1ZUkVBRCBidWZm ZXIuCisqLworI2lmZGVmIFRDUFNPQ0tFVAorICAgIGludCBkb3Rub3B0cywgeDsKKyAgICBkb3Ru b3B0cyA9ICgoKHhsb2NhbCAmJiBuZXRjb25uICYmIElTX1RFTE5FVCgpKSB8fAorCQkgKCF4bG9j YWwgJiYgc3N0ZWxuZXQpKSk7CisjZW5kaWYgLyogVENQU09DS0VUICovCisgICAgZGVidWcoRjEw MSwidHRmbHV4IG15X2NvdW50IiwiIixteV9jb3VudCk7CisjaWZkZWYgVENQU09DS0VUCisgICAg aWYgKGRvdG5vcHRzKSB7CisJQ0hBUiBjaCA9ICdcMCc7CisgICAgICAgIHdoaWxlIChteV9jb3Vu dCA+IDApIHsKKwkgICAgY2ggPSBteXJlYWQoKTsKKyNpZmRlZiBDS19FTkNSWVBUSU9OCisgICAg ICAgICAgICBpZiAoVEVMT1BUX1UoVEVMT1BUX0VOQ1JZUFRJT04pKQorCSAgICAgIGNrX3RuX2Rl Y3J5cHQoKGNoYXIgKikmY2gsMSk7CisjZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLworICAgICAg ICAgICAgaWYgKGNoID09IElBQykKKwkgICAgICB4ID0gdHRfdG5vcHQoY2gpOworICAgICAgICB9 CisgICAgfSBlbHNlCisjZW5kaWYgLyogVENQU09DS0VUICovCisjaWZkZWYgQ09NTUVOVAorI2lm ZGVmIENLX0VOQ1JZUFRJT04KKyAgICBpZiAoVEVMT1BUX1UoVEVMT1BUX0VOQ1JZUFRJT04pICYm IG15X2NvdW50ID4gMCkKKyAgICAgIGNrX3RuX2RlY3J5cHQoJm15YnVmW215X2l0ZW0rMV0sbXlf Y291bnQpOworI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KKyNlbmRpZiAvKiBDT01NRU5UICov CisgICAgbXlfY291bnQgPSAwOwkJCS8qIFJlc2V0IGNvdW50IHRvIHplcm8gKi8KKyAgICBteV9p dGVtID0gLTE7CQkJLyogQW5kIGJ1ZmZlciBpbmRleCB0byAtMSAqLworI2VuZGlmIC8qIE1ZUkVB RCAqLworfQorCitpbnQKK3R0Zmx1aSgpIHsKKyAgICBpbnQgbiwgZmQ7CisjaWZkZWYgVENQU09D S0VUCisgICAgaW50IGRvdG5vcHRzOworICAgIGRvdG5vcHRzID0gKCgoeGxvY2FsICYmIG5ldGNv bm4gJiYgSVNfVEVMTkVUKCkpIHx8CisJCSAoIXhsb2NhbCAmJiBzc3RlbG5ldCkpKTsKKyNlbmRp ZiAvKiBUQ1BTT0NLRVQgKi8KKworI2lmZGVmIE5FVENNRAorICAgIGlmICh0dHBpcGUpCisgICAg ICBmZCA9IGZkaW47CisgICAgZWxzZQorI2VuZGlmIC8qIE5FVENNRCAqLworICAgICAgZmQgPSB0 dHlmZDsKKworI2lmZGVmIFRUTEVCVUYKKyAgICB0dHB1c2ggPSAtMTsJCQkvKiBDbGVhciB0aGUg cGVlay1haGVhZCBjaGFyICovCisgICAgd2hpbGUgKGxlX2RhdGEgJiYgKGxlX2luYnVmKCkgPiAw KSkgeworICAgICAgICBDSEFSIGNoID0gJ1wwJzsKKyAgICAgICAgaWYgKGxlX2dldGNoYXIoJmNo KSA+IDApIHsJLyogQ2xlYXIgYW55IG1vcmUuLi4gKi8KKyAgICAgICAgICAgIGRlYnVnKEYxMDEs InR0Zmx1aSBsZV9pbmJ1ZiBjaCIsIiIsY2gpOworICAgICAgICB9CisgICAgfQorI2VuZGlmIC8q IFRUTEVCVUYgKi8KKyAgICBkZWJ1ZyhGMTAxLCJ0dGZsdWkgdHRwaXBlIiwiIix0dHBpcGUpOwor CisjaWZkZWYgTVlSRUFECisvKgorICBGbHVzaCBpbnRlcm5hbCBNWVJFQUQgYnVmZmVyICpORVhU KiwgaW4gYWxsIGNhc2VzLgorKi8KKyAgICB0dGZsdXgoKTsKKyNlbmRpZiAvKiBNWVJFQUQgKi8K KworI2lmZGVmIE5FVENPTk4KKy8qIE5ldHdvcmsgZmx1c2ggaXMgZG9uZSBzcGVjaWFsbHksIGlu IHRoZSBuZXR3b3JrIHN1cHBvcnQgbW9kdWxlLiAqLworICAgIGlmICgobmV0Y29ubiB8fCBzc3Rl bG5ldCkgJiYgIXR0cGlwZSAmJiAhdHRwdHkpIHsKKwlkZWJ1ZyhGMTAwLCJ0dGZsdWkgbmV0Zmx1 aSIsIiIsMCk7CisjaWZkZWYgQ09NTUVOVAorI2lmZGVmIFROX0NPTVBPUlQKKwlpZiAoaXN0bmNv bXBvcnQoKSkKKyAgICAgICAgICAgIHRuY19zZW5kX3B1cmdlX2RhdGEoVE5DX1BVUkdFX1JFQ0VJ VkUpOworI2VuZGlmIC8qIFROX0NPTVBPUlQgKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisJcmV0 dXJuKG5ldGZsdWkoKSk7CisgICAgfQorI2VuZGlmIC8qIE5FVENPTk4gKi8KKworICAgIGRlYnVn KEYxMDEsInR0Zmx1aSB0dHlmZCIsIiIsdHR5ZmQpOyAvKiBOb3QgbmV0d29yayAqLworICAgIGlm ICh0dHlmZCA8IDApCisgICAgICByZXR1cm4oLTEpOworCisjaWZkZWYgYWVnaXMKKyAgICBzaW9f JGNvbnRyb2woKHNob3J0KXlmZCwgc2lvXyRmbHVzaF9pbiwgdHJ1ZSwgc3QpOworICAgIGlmIChz dC5hbGwgIT0gc3RhdHVzXyRvaykgeworCWZwcmludGYoc3RkZXJyLCAiZmx1c2ggZmFpbGVkOiAi KTsgZXJyb3JfJHByaW50KHN0KTsKKyAgICB9IGVsc2UgeyAgICAgIC8qIHNvbWV0aW1lcyB0aGUg Zmx1c2ggZG9lc24ndCB3b3JrICovCisgICAgICAgIGZvciAoOzspIHsKKwkgICAgY2hhciBidWZb MjU2XTsKKyAgICAgICAgICAgIC8qIGVhdCBhbGwgdGhlIGNoYXJhY3RlcnMgdGhhdCBzaG91bGRu J3QgYmUgYXZhaWxhYmxlICovCisgICAgICAgICAgICBpb3NfJGdldCgoc2hvcnQpZmQsIGlvc18k Y29uZF9vcHQsIGJ1ZiwgMjU2TCwgc3QpOyAvKiAodm9pZCkgKi8KKyAgICAgICAgICAgIGlmIChz dC5hbGwgPT0gaW9zXyRnZXRfY29uZGl0aW9uYWxfZmFpbGVkKSBicmVhazsKKyAgICAgICAgICAg IGZwcmludGYoc3RkZXJyLCAiZmx1c2ggZmFpbGVkKDIpOiAiKTsgZXJyb3JfJHByaW50KHN0KTsK KyAgICAgICAgfQorICAgIH0KKyNlbHNlCisjaWZkZWYgQlNENDQJCQkJLyogNC40IEJTRCAqLwor ICAgIG4gPSBGUkVBRDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNwZWNpZnkgcmVhZCBx dWV1ZSAqLworICAgIGRlYnVnKEYxMDAsInR0Zmx1aSBCU0Q0NCIsIiIsMCk7CisgICAgaW9jdGwo ZmQsVElPQ0ZMVVNILCZuKTsKKyNlbHNlCisjaWZkZWYgUGxhbjkKKyN1bmRlZiBQT1NJWAkJCQkv KiBVaCBvaC4uLiAqLworI2VuZGlmIC8qIFBsYW45ICovCisjaWZkZWYgUE9TSVgJCQkJLyogUE9T SVggKi8KKyAgICBkZWJ1ZyhGMTAwLCJ0dGZsdWkgUE9TSVgiLCIiLDApOworICAgIHRjZmx1c2go ZmQsVENJRkxVU0gpOworI2Vsc2UKKyNpZmRlZiBBVFRTVgkJCQkvKiBTeXN0ZW0gViAqLworI2lm bmRlZiBWWFZFCisgICAgZGVidWcoRjEwMCwidHRmbHVpIEFUVFNWIiwiIiwwKTsKKyAgICBpb2N0 bChmZCxUQ0ZMU0gsMCk7CisjZW5kaWYgLyogVlhWRSAqLworI2Vsc2UJCQkJCS8qIE5vdCBCU0Q0 NCwgUE9TSVgsIG9yIFN5cyBWICovCisjaWZkZWYgVElPQ0ZMVVNICQkJLyogVGhvc2Ugd2l0aCBU SU9DRkxVU0ggZGVmaW5lZCAqLworI2lmZGVmIEFOWUJTRAkJCQkvKiBCZXJrZWxleSAqLworICAg IG4gPSBGUkVBRDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNwZWNpZnkgcmVhZCBxdWV1 ZSAqLworICAgIGRlYnVnKEYxMDAsInR0Zmx1aSBUSU9DRkxVU0ggQU5ZQlNEIiwiIiwwKTsKKyAg ICBpb2N0bChmZCxUSU9DRkxVU0gsJm4pOworI2Vsc2UJCQkJCS8qIE90aGVycyAoVjcsIGV0Yykg Ki8KKyAgICBkZWJ1ZyhGMTAwLCJ0dGZsdWkgVElPQ0ZMVVNIIiwiIiwwKTsKKyAgICBpb2N0bChm ZCxUSU9DRkxVU0gsMCk7CisjZW5kaWYgLyogQU5ZQlNEICovCisjZWxzZQkJCQkJLyogQWxsIG90 aGVycy4uLiAqLworLyoKKyAgTm8gc3lzdGVtIGNhbGwgKHRoYXQgd2Uga25vdyBhYm91dCkgZm9y IGlucHV0IGJ1ZmZlciBmbHVzaGluZy4KKyAgU28gc2VlIGhvdyBtYW55IHRoZXJlIGFyZSBhbmQg cmVhZCB0aGVtIGluIGEgbG9vcCwgdXNpbmcgdHRpbmMoKS4KKyAgdHRpbmMoKSBpcyBidWZmZXJl ZCwgc28gd2UncmUgbm90IGdldHRpbmcgY2hhcmdlZCB3aXRoIGEgc3lzdGVtIGNhbGwKKyAgcGVy IGNoYXJhY3RlciwganVzdCBhIGZ1bmN0aW9uIGNhbGwuCisqLworICAgIGlmICgobiA9IHR0Y2hr KCkpID4gMCkgeworCWRlYnVnKEYxMDEsInR0Zmx1aSByZWFkIGxvb3AiLCIiLG4pOworCXdoaWxl ICgobi0tKSAmJiB0dGluYygwKSA+IDApIDsKKyAgICB9CisjZW5kaWYgLyogVElPQ0ZMVVNIICov CisjZW5kaWYgLyogQVRUU1YgKi8KKyNlbmRpZiAvKiBQT1NJWCAqLworI2lmZGVmIFBsYW45Cisj ZGVmaW5lIFBPU0lYCisjZW5kaWYgLyogUGxhbjkgKi8KKyNlbmRpZiAvKiBCU0Q0NCAqLworI2Vu ZGlmIC8qIGFlZ2lzICovCisgICAgcmV0dXJuKDApOworfQorCitpbnQKK3R0Zmx1bygpIHsJCQkJ LyogRmx1c2ggb3V0cHV0IGJ1ZmZlciAqLworICAgIGludCBmZDsKKyNpZmRlZiBORVRDTUQKKyAg ICBpZiAodHRwaXBlKQorICAgICAgZmQgPSBmZG91dDsKKyAgICBlbHNlCisjZW5kaWYgLyogTkVU Q01EICovCisgICAgICBmZCA9IHR0eWZkOworCisjaWZkZWYgUGxhbjkKKyAgICByZXR1cm4gMDsK KyNlbHNlCisjaWZkZWYgUE9TSVgKKyAgICByZXR1cm4odGNmbHVzaChmZCxUQ09GTFVTSCkpOwor I2Vsc2UKKyNpZmRlZiBPWE9TCisgICAgcmV0dXJuKGlvY3RsKGZkLFRDRkxTSCwxKSk7CisjZWxz ZQorICAgIHJldHVybigwKTsJCQkJLyogQWxsIG90aGVycywgbm90aGluZyAqLworI2VuZGlmIC8q IE9YT1MgKi8KKyNlbmRpZiAvKiBQT1NJWCAqLworI2VuZGlmIC8qIFBsYW45ICovCit9CisKKy8q IEludGVycnVwdCBGdW5jdGlvbnMgKi8KKworLyogU2V0IHVwIHRlcm1pbmFsIGludGVycnVwdHMg b24gY29uc29sZSB0ZXJtaW5hbCAqLworCisjaWZuZGVmIEZJT05SRUFECQkJLyogV2UgZG9uJ3Qg bmVlZCBlc2N0cnAoKSAqLworI2lmbmRlZiBTRUxFQ1QJCQkJLyogaWYgd2UgaGF2ZSBhbnkgb2Yg dGhlc2UuLi4gKi8KKyNpZm5kZWYgQ0tfUE9MTAorI2lmbmRlZiBSRENISworCisjaWZuZGVmIE9Y T1MKKyNpZmRlZiBTVk9SUE9TSVgKK1NJR1RZUAorZXNjdHJwKGZvbykgaW50IGZvbzsgewkJCS8q IHRyYXAgY29uc29sZSBlc2NhcGVzICheXCkgKi8KKyAgICBzaWduYWwoU0lHUVVJVCxTSUdfSUdO KTsgICAgICAgICAgICAvKiBpZ25vcmUgdW50aWwgdHJhcHBlZCAqLworICAgIGNvbmVzYyA9IDE7 CisgICAgZGVidWcoRjEwMSwiZXNjdHJwIGNhdWdodCBTSUdRVUlUIiwiIixjb25lc2MpOworfQor I2VuZGlmIC8qIFNWT1JQT1NJWCAqLworI2VuZGlmIC8qIE9YT1MgKi8KKworI2lmZGVmIFY3Cisj aWZuZGVmIE1JTklYMgorU0lHVFlQCitlc2N0cnAoZm9vKSBpbnQgZm9vOyB7CQkJLyogdHJhcCBj b25zb2xlIGVzY2FwZXMgKF5cKSAqLworICAgIHNpZ25hbChTSUdRVUlULFNJR19JR04pOyAgICAg ICAgICAgIC8qIGlnbm9yZSB1bnRpbCB0cmFwcGVkICovCisgICAgY29uZXNjID0gMTsKKyAgICBk ZWJ1ZyhGMTAxLCJlc2N0cnAgY2F1Z2h0IFNJR1FVSVQiLCIiLGNvbmVzYyk7Cit9CisjZW5kaWYg LyogTUlOSVgyICovCisjZW5kaWYgLyogVjcgKi8KKworI2lmZGVmIEM3MAorU0lHVFlQCitlc2N0 cnAoZm9vKSBpbnQgZm9vOyB7CQkJLyogdHJhcCBjb25zb2xlIGVzY2FwZXMgKF5cKSAqLworICAg IGNvbmVzYyA9IDE7CisgICAgc2lnbmFsKFNJR1FVSVQsU0lHX0lHTik7ICAgICAgICAgICAgLyog aWdub3JlIHVudGlsIHRyYXBwZWQgKi8KK30KKyNlbmRpZiAvKiBDNzAgKi8KKworI2VuZGlmIC8q IFJEQ0hLICovCisjZW5kaWYgLyogQ0tfUE9MTCAqLworI2VuZGlmIC8qIFNFTEVDVCAqLworI2Vu ZGlmIC8qIEZJT05SRUFEICovCisKKy8qICBDIE8gTiBCIEcgVCAgLS0gIEJhY2tncm91bmQgVGVz dCAgKi8KKworc3RhdGljIGludCBqYyA9IDA7CQkJLyogMCA9IG5vIGpvYiBjb250cm9sICovCisK Ky8qCisgIENhbGwgd2l0aCBmbGFnID09IDEgdG8gcHJldmVudCBzaWduYWwgdGVzdCwgd2hpY2gg Y2FuIG5vdCBiZSBleHBlY3RlZAorICB0byB3b3JrIGR1cmluZyBmaWxlIHRyYW5zZmVyLCB3aGVu IFNJR0lOVCBwcm9iYWJseSAqaXMqIHNldCB0byBTSUdfSUdOLgorCisgIENhbGwgd2l0aCBmbGFn ID09IDAgdG8gdXNlIHRoZSBzaWduYWwgdGVzdCwgYnV0IG9ubHkgaWYgdGhlIHByb2Nlc3MtZ3Jv dXAKKyAgdGVzdCBmYWlscywgYXMgaXQgZG9lcyBvbiBzb21lIFVOSVggc3lzdGVtcywgd2hlcmUg Z2V0cGdycCgpIGlzIGJ1Z2d5LAorICByZXF1aXJlcyBhbiBhcmd1bWVudCB3aGVuIHRoZSBtYW4g cGFnZSBzYXlzIGl0IGRvZXNuJ3QsIG9yIHZpY2UgdmVyc2EuCisKKyAgSWYgZmxhZyA9PSAwIGFu ZCB0aGUgcHJvY2Vzcy1ncm91cCB0ZXN0IGZhaWxzLCB0aGVuIHdlIGRldGVybWluZSBiYWNrZ3Jv dW5kCisgIHN0YXR1cyBzaW1wbHkgKGJ1dCBub3QgbmVjZXNzYXJpbHkgcmVsaWFibHkpIGZyb20g aXNhdHR5KCkuCisKKyAgY29uYmd0KCkgc2V0cyB0aGUgZ2xvYmFsIGJhY2tncmQgPSAxIGlmIHdl IGFwcGVhciB0byBiZSBpbiB0aGUgYmFja2dyb3VuZCwKKyAgYW5kIHRvIDAgaWYgd2Ugc2VlbSB0 byBiZSBpbiB0aGUgZm9yZWdyb3VuZC4gIGNvbmJndCgpIGlzIGhpZ2hseSBwcm9uZSB0bworICBt aXNiZWhhdmlvci4KKyovCitWT0lECitjb25iZ3QoZmxhZykgaW50IGZsYWc7IHsKKyAgICBpbnQg eCA9IC0xLAkJCQkvKiBwcm9jZXNzIGdyb3VwIG9yIFNJR0lOVCB0ZXN0ICovCisgICAgICAgIHkg PSAwOwkJCQkvKiBpc2F0dHkoKSB0ZXN0ICovCisvKgorICBDaGVjayBmb3IgYmFja2dyb3VuZCBv cGVyYXRpb24sIGV2ZW4gaWYgbm90IHJ1bm5pbmcgb24gcmVhbCB0dHksIHNvIHRoYXQKKyAgYmFj a2dyb3VuZCBmbGFnIGNhbiBiZSBzZXQgY29ycmVjdGx5LiAgSWYgYmFja2dyb3VuZCBzdGF0dXMg aXMgZGV0ZWN0ZWQsCisgIHRoZW4gS2VybWl0IHdpbGwgbm90IGlzc3VlIGl0cyBpbnRlcmFjdGl2 ZSBwcm9tcHQgb3IgbW9zdCBtZXNzYWdlcy4KKyAgSWYgeW91ciBwcm9tcHQgZ29lcyBhd2F5LCB5 b3UgY2FuIGJsYW1lIChhbmQgZml4PykgdGhpcyBmdW5jdGlvbi4KKyovCisKKy8qIFVzZSBwcm9j ZXNzLWdyb3VwIHRlc3QgaWYgcG9zc2libGUuICovCisKKyNpZmRlZiBQT1NJWAkJCQkvKiBXZSBj YW4gZG8gaXQgaW4gUE9TSVggKi8KKyNkZWZpbmUgUEdST1VQX1QKKyNlbHNlCisjaWZkZWYgQlNE NAkJCQkvKiBhbmQgaW4gQlNEIDQueC4gKi8KKyNkZWZpbmUgUEdST1VQX1QKKyNlbHNlCisjaWZk ZWYgSFBVWEpPQkNUTAkJCS8qIGFuZCBpbiBtb3N0IEhQLVVYJ3MgKi8KKyNkZWZpbmUgUEdST1VQ X1QKKyNlbHNlCisjaWZkZWYgVElPQ0dQR1JQCQkJLyogYW5kIGFueXBsYWNlIHRoYXQgaGFzIHRo aXMgaW9jdGwuICovCisjZGVmaW5lIFBHUk9VUF9UCisjZW5kaWYgLyogVElPQ0dQR1JQICovCisj ZW5kaWYgLyogSFBVWEpPQkNUTCAqLworI2VuZGlmIC8qIEJTRDQgKi8KKyNlbmRpZiAvKiBQT1NJ WCAqLworCisjaWZkZWYgTUlQUwkJCQkvKiBFeGNlcHQgaWYgaXQgZG9lc24ndCB3b3JrLi4uICov CisjdW5kZWYgUEdST1VQX1QKKyNlbmRpZiAvKiBNSVBTICovCisKKyNpZmRlZiBNSU5JWAorI3Vu ZGVmIFBHUk9VUF9UCisjZW5kaWYJLyogTUlOSVggKi8KKworI2lmZGVmIFBHUk9VUF9UCisvKgor ICBTZW1pLXJlbGlhYmxlIHByb2Nlc3MtZ3JvdXAgdGVzdC4gIENoZWNrIHdoZXRoZXIgdGhpcyBw cm9jZXNzJ3MgZ3JvdXAgaXMKKyAgdGhlIHNhbWUgYXMgdGhlIGNvbnRyb2xsaW5nIHRlcm1pbmFs J3MgcHJvY2VzcyBncm91cC4gIFRoaXMgd29ya3MgaWYgdGhlCisgIGdldHBncnAoKSBjYWxsIGRv ZXNuJ3QgbGllIChhcyBpdCBkb2VzIGluIHRoZSBTVU5PUyBTeXN0ZW0gViBlbnZpcm9ubWVudCku CisqLworICAgIFBJRF9UIG15cGdycCA9IChQSURfVCkwOwkJLyogS2VybWl0J3MgcHJvY2VzcyBn cm91cCAqLworICAgIFBJRF9UIGN0cGdycCA9IChQSURfVCkwOwkJLyogVGhlIHRlcm1pbmFsJ3Mg cHJvY2VzcyBncm91cCAqLworI2lmbmRlZiBfUE9TSVhfU09VUkNFCisvKgorICBUaGUgZ2V0cGdy cCgpIHByb3RvdHlwZSBpcyBvYnRhaW5lZCBmcm9tIHN5c3RlbSBoZWFkZXIgZmlsZXMgZm9yIFBP U0lYCisgIGFuZCBTeXMgViBSNCBjb21waWxhdGlvbnMuICBPdGhlciBzeXN0ZW1zLCB3aG8ga25v d3MuICBTb21lIGNvbXBsYWluIGFib3V0CisgIGEgZHVwbGljYXRlIGRlY2xhcmF0aW9uIGhlcmUs IG90aGVycyBkb24ndCwgc28gaXQncyBzYWZlciB0byBsZWF2ZSBpdCBpbgorICBpZiB3ZSBkb24n dCBrbm93IGZvciBjZXJ0YWluLgorKi8KKyNpZm5kZWYgU1ZSNAorI2lmbmRlZiBQUzJBSVgxMAor I2lmbmRlZiBIUFVYOQorICAgIGV4dGVybiBQSURfVCBnZXRwZ3JwKCk7CisjZW5kaWYgLyogSFBV WDkgKi8KKyNlbmRpZiAvKiBQUzJBSVgxMCAqLworI2VuZGlmIC8qIFNWUjQgKi8KKyNlbmRpZiAv KiBfUE9TSVhfU09VUkNFICovCisKKy8qIEdldCBteSBwcm9jZXNzIGdyb3VwLiAqLworCisjaWZk ZWYgU1ZSMyAvKiBNYXliZSB0aGlzIHNob3VsZCBiZSBBVFRTVj8gKi8KKy8qIFRoaXMgZnVuY3Rp b24gaXMgbm90IGRlc2NyaWJlZCBpbiBTVklEIFIyICovCisgICAgbXlwZ3JwID0gZ2V0cGdycCgp OworICAgIC8qIGRlYnVnKEYxMDEsIkFUVFNWIGNvbmJndCBwcm9jZXNzIGdyb3VwIiwiIiwoaW50 KSBteXBncnApOyAqLworI2Vsc2UKKyNpZmRlZiBQT1NJWAorICAgIG15cGdycCA9IGdldHBncnAo KTsKKyAgICAvKiBkZWJ1ZyhGMTAxLCJQT1NJWCBjb25iZ3QgcHJvY2VzcyBncm91cCIsIiIsKGlu dCkgbXlwZ3JwKTsgKi8KKyNlbHNlCisjaWZkZWYgT1NGUEMKKyAgICBteXBncnAgPSBnZXRwZ3Jw KCk7CisgICAgLyogZGVidWcoRjEwMSwiT1NGIGNvbmJndCBwcm9jZXNzIGdyb3VwIiwiIiwoaW50 KSBteXBncnApOyAqLworI2Vsc2UKKyNpZmRlZiBRTlgKKyAgICBteXBncnAgPSBnZXRwZ3JwKCk7 CisgICAgLyogZGVidWcoRjEwMSwiUU5YIGNvbmJndCBwcm9jZXNzIGdyb3VwIiwiIiwoaW50KSBt eXBncnApOyAqLworI2Vsc2UKKyNpZmRlZiBPU0YzMgkJCQkvKiAod2FzIE9TRjQwKSAqLworICAg IG15cGdycCA9IGdldHBncnAoKTsKKyAgICAvKiBkZWJ1ZyhGMTAxLCJEaWdpdGFsIFVOSVggY29u Ymd0IHByb2Nlc3MgZ3JvdXAiLCIiLChpbnQpIG15cGdycCk7ICovCisjZWxzZSAvKiBCU0QsIFY3 LCBldGMgKi8KKyNpZmRlZiBNSU5JWDIKKyAgICBteXBncnAgPSBnZXRwZ3JwKCk7CisjZWxzZQor ICAgIG15cGdycCA9IGdldHBncnAoMCk7CisjZW5kaWYgLyogTUlOSVgyICovCisgICAgLyogZGVi dWcoRjEwMSwiQlNEIGNvbmJndCBwcm9jZXNzIGdyb3VwIiwiIiwoaW50KSBteXBncnApOyAqLwor I2VuZGlmIC8qIE9TRjMyICovCisjZW5kaWYgLyogUU5YICovCisjZW5kaWYgLyogT1NGUEMgKi8K KyNlbmRpZiAvKiBQT1NJWCAqLworI2VuZGlmIC8qIFNWUjMgKi8KKworI2lmZGVmIE1JTklYCisg ICAgLyogTUlOSVggZG9lcyBub3Qgc3VwcG9ydCBqb2IgY29udHJvbCBzbyBLZXJtaXQgaXMgYWx3 YXlzIGluIGZvcmVncm91bmQgKi8KKyAgICB4ID0gMDsKKworI2Vsc2UgIC8qIE5vdCBNSU5JWCAq LworCisvKiBOb3cgZ2V0IGNvbnRyb2xsaW5nIHR0eSdzIHByb2Nlc3MgZ3JvdXAgKi8KKyNpZmRl ZiBCU0Q0NE9SUE9TSVgKKyAgICBjdHBncnAgPSB0Y2dldHBncnAoMSk7CQkvKiBUaGUgUE9TSVgg d2F5ICovCisgICAgLyogZGVidWcoRjEwMSwiUE9TSVggY29uYmd0IHRlcm1pbmFsIHByb2Nlc3Mg Z3JvdXAiLCIiLChpbnQpIGN0cGdycCk7ICovCisjZWxzZQorICAgIGlvY3RsKDEsIFRJT0NHUEdS UCwgJmN0cGdycCk7CS8qIE9yIHRoZSBCU0Qgd2F5ICovCisgICAvKiBkZWJ1ZyhGMTAxLCJub24t UE9TSVggY29uYmd0IHRlcm1pbmFsIHByb2Nlc3MgZ3JvdXAiLCIiLChpbnQpIGN0cGdycCk7ICov CisjZW5kaWYgLyogQlNENDRPUlBPU0lYICovCisKKyAgICBpZiAoKG15cGdycCA+IChQSURfVCkg MCkgJiYgKGN0cGdycCA+IChQSURfVCkgMCkpCisgICAgICB4ID0gKG15cGdycCA9PSBjdHBncnAp ID8gMCA6IDE7CS8qIElmIHRoZXkgZGlmZmVyLCB0aGVuIGJhY2tncm91bmQuICovCisgICAgZWxz ZSB4ID0gLTE7CQkJLyogSWYgZXJyb3IsIHJlbWVtYmVyLiAqLworICAgIGRlYnVnKEYxMDEsImNv bmJndCBwcm9jZXNzIGdyb3VwIHRlc3QiLCIiLHgpOworI2VuZGlmIC8qIFBHUk9VUF9UICovCisj ZW5kaWYJLyogTUlOSVggKi8KKworLyogVHJ5IHRvIHNlZSBpZiBqb2IgY29udHJvbCBpcyBhdmFp bGFibGUgKi8KKworI2lmZGVmIE5PSkMJCQkJLyogVXNlciBvdmVycmlkZSAqLworICAgIGpjID0g MDsJCQkJLyogTm8gam9iIGNvbnRyb2wgYWxsb3dlZCAqLworICAgIGRlYnVnKEYxMTEsIk5PSkMi LCJqYyIsamMpOworI2Vsc2UKKyNpZmRlZiBCU0Q0NAorICAgIGpjID0gMTsKKyNlbHNlCisjaWZk ZWYgU1ZSNE9SUE9TSVgJCQkvKiBQT1NJWCBhY3R1YWxseSB0ZWxscyB1cyAqLworICAgIGRlYnVn KEYxMDAsIlNWUjRPUlBPU0lYIGpjIHRlc3QuLi4iLCIiLDApOworI2lmZGVmIF9TQ19KT0JfQ09O VFJPTAorI2lmZGVmIF9fYnNkaV9fCisgICAgamMgPSAxOworI2Vsc2UKKyNpZmRlZiBfXzM4NkJT RF9fCisgICAgamMgPSAxOworI2Vsc2UKKyAgICBqYyA9IHN5c2NvbmYoX1NDX0pPQl9DT05UUk9M KTsJLyogV2hhdGV2ZXIgc3lzdGVtIHNheXMgKi8KKyAgICBpZiAoamMgPCAwKSB7CisJZGVidWco RjEwMSwic3lzY29uZiBmYWlscywgamNzaGVsbCIsIiIsamNzaGVsbCk7CisJamMgPSAoamNoZGxy ID09IFNJR19ERkwpID8gMSA6IDA7CisgICAgfSBlbHNlCisgICAgICBkZWJ1ZyhGMTExLCJzeXNj b25mKF9TQ19KT0JfQ09OVFJPTCkiLCJqYyIsamMpOworI2VuZGlmIC8qIF9fMzg2QlNEX18gKi8K KyNlbmRpZiAvKiBfX2JzZGlfXyAqLworI2Vsc2UKKyNpZmRlZiBfUE9TSVhfSk9CX0NPTlRST0wK KyAgICBqYyA9IDE7CQkJCS8qIEJ5IGRlZmluaXRpb24gKi8KKyAgICBkZWJ1ZyhGMTExLCJfUE9T SVhfSk9CX0NPTlRST0wgaXMgZGVmaW5lZCIsImpjIixqYyk7CisjZWxzZQorICAgIGpjID0gMDsJ CQkJLyogQXNzdW1lIGpvYiBjb250cm9sIG5vdCBhbGxvd2VkICovCisgICAgZGVidWcoRjExMSwi U1ZSNE9SUE9TSVggX1NDL1BPU0lYX0pPQl9DT05UUk9MIG5vdCBkZWZpbmVkIiwiamMiLGpjKTsK KyNlbmRpZiAvKiBfUE9TSVhfSk9CX0NPTlRST0wgKi8KKyNlbmRpZiAvKiBfU0NfSk9CX0NPTlRS T0wgKi8KKyNlbHNlCisjaWZkZWYgQlNENAorICAgIGpjID0gMTsJCQkJLyogSm9iIGNvbnRyb2wg YWxsb3dlZCAqLworICAgIGRlYnVnKEYxMTEsIkJTRCBqb2IgY29udHJvbCIsImpjIixqYyk7Cisj ZWxzZQorI2lmZGVmIFNWUjNKQworICAgIGpjID0gMTsJCQkJLyogSkMgYWxsb3dlZCAqLworICAg IGRlYnVnKEYxMTEsIlNWUjMgam9iIGNvbnRyb2wiLCJqYyIsamMpOworI2Vsc2UKKyNpZmRlZiBP WE9TCisgICAgamMgPSAxOwkJCQkvKiBKQyBhbGxvd2VkICovCisgICAgZGVidWcoRjExMSwiWC9P UyBqb2IgY29udHJvbCIsImpjIixqYyk7CisjZWxzZQorI2lmZGVmIEhQVVg5CisgICAgamMgPSAx OwkJCQkvKiBKQyBhbGxvd2VkICovCisgICAgZGVidWcoRjExMSwiSFAtVVggOS4wIGpvYiBjb250 cm9sIiwiamMiLGpjKTsKKyNlbHNlCisjaWZkZWYgSFBVWDEwCisgICAgamMgPSAxOwkJCQkvKiBK QyBhbGxvd2VkICovCisgICAgZGVidWcoRjExMSwiSFAtVVggMTAuMCBqb2IgY29udHJvbCIsImpj IixqYyk7CisjZWxzZQorICAgIGpjID0gMDsJCQkJLyogSkMgbm90IGFsbG93ZWQgKi8KKyAgICBk ZWJ1ZyhGMTExLCJqb2IgY29udHJvbCBjYXRjaC1hbGwiLCJqYyIsamMpOworI2VuZGlmIC8qIEhQ VVgxMCAqLworI2VuZGlmIC8qIEhQVVg5ICovCisjZW5kaWYgLyogT1hPUyAqLworI2VuZGlmIC8q IFNWUjNKQyAqLworI2VuZGlmIC8qIEJTRDQgKi8KKyNlbmRpZiAvKiBTVlI0T1JQT1NJWCAqLwor I2VuZGlmIC8qIEJTRDQ0ICovCisjZW5kaWYgLyogTk9KQyAqLworICAgIGRlYnVnKEYxMDEsImNv bmJndCBqYyIsIiIsamMpOworI2lmbmRlZiBOT0pDCisgICAgZGVidWcoRjEwMSwiY29uYmd0IGpj c2hlbGwiLCIiLGpjc2hlbGwpOworLyoKKyAgQXQgdGhpcyBwb2ludCwgaWYgamMgPT0gMSBidXQg amNzaGVsbCA9PSAwLCBpdCBtZWFucyB0aGF0IHRoZSBPUyBzdXBwb3J0cworICBqb2IgY29udHJv bCwgYnV0IHRoZSBzaGVsbCBvciBvdGhlciBwcm9jZXNzIHdlIGFyZSBydW5uaW5nIHVuZGVyIGRv ZXMgbm90CisgIChqY3NoZWxsIGlzIHNldCBpbiBzeXNpbml0KCkpIGFuZCBzbyBpZiB3ZSBzdXNw ZW5kIG91cnNlbHZlcywgbm90aGluZyBnb29kCisgIHdpbGwgY29tZSBvZiBpdC4gIFNvLi4uCisq LworICAgIGlmIChqYyA8IDApIGpjID0gMDsKKyAgICBpZiAoamMgPiAwICYmIGpjc2hlbGwgPT0g MCkgamMgPSAwOworI2VuZGlmIC8qIE5PSkMgKi8KKworLyoKKyAgQW5vdGhlciBiYWNrZ3JvdW5k IHRlc3QuCisgIFRlc3QgaWYgU0lHSU5UICh0ZXJtaW5hbCBpbnRlcnJ1cHQpIGlzIHNldCB0byBT SUdfSUdOIChpZ25vcmUpLAorICB3aGljaCBpcyBkb25lIGJ5IHRoZSBzaGVsbCAoc2gpIGlmIHRo ZSBwcm9ncmFtIGlzIHN0YXJ0ZWQgd2l0aCAnJicuCisgIFVuZm9ydHVuYXRlbHksIHRoaXMgaXMg Tk9UIGRvbmUgYnkgY3NoIG9yIGtzaCBzbyB3YXRjaCBvdXQhCisgIE5vdGUsIGl0J3Mgc2FmZSB0 byBzZXQgU0lHSU5UIHRvIFNJR19JR04gaGVyZSwgYmVjYXVzZSBmdXJ0aGVyIGRvd24KKyAgd2Ug YWx3YXlzIHNldCBpdCB0byBzb21ldGhpbmcgZWxzZS4KKyAgTm90ZTogYXMgb2YgMTYgSnVsIDE5 OTksIHdlIGFsc28gc2tpcCB0aGlzIHRlc3QgaWYgd2Ugc2V0IFNJR0lOVCB0bworICBTSUdfSUdO IG91cnNlbHZlcy4KKyovCisgICAgaWYgKHggPCAwICYmICFmbGFnICYmICFzaWdpbnRfaWduKSB7 IC8qIERpZG4ndCBnZXQgZ29vZCByZXN1bHRzIGFib3ZlLi4uICovCisKKwlTSUdUWVAgKCpvc2ln aW50KSgpOworCisJb3NpZ2ludCA9IHNpZ25hbChTSUdJTlQsU0lHX0lHTik7CS8qIFdoYXQgaXMg U0lHSU5UIHNldCB0bz8gKi8KKwlzaWdpbnRfaWduID0gMTsKKwl4ID0gKG9zaWdpbnQgPT0gU0lH X0lHTikgPyAxIDogMDsJLyogU0lHX0lHTj8gKi8KKwkvKiBkZWJ1ZyhGMTAxLCJjb25iZ3Qgb3Np Z2ludCIsIiIsb3NpZ2ludCk7ICovCisJLyogZGVidWcoRjEwMSwiY29uYmd0IHNpZ25hbCB0ZXN0 IiwiIix4KTsgKi8KKyAgICB9CisKKy8qIEFsc28gY2hlY2sgdG8gc2VlIGlmIHdlJ3JlIHJ1bm5p bmcgd2l0aCByZWRpcmVjdGVkIHN0ZGlvLiAqLworLyogVGhpcyBpcyBub3QgcmVhbGx5IGJhY2tn cm91bmQgb3BlcmF0aW9uLCBidXQgd2Ugd2FudCB0byBhY3QgYXMgdGhvdWdoICovCisvKiBpdCB3 ZXJlLiAqLworCisjaWZkZWYgSUtTRAorICAgIGlmIChpbnNlcnZlcikgewkJCS8qIEludGVybmV0 IEtlcm1pdCBTZXJ2ZXIgKi8KKwliYWNrZ3JkID0gMDsJCQkvKiBpcyBub3QgaW4gdGhlIGJhY2tn cm91bmQgKi8KKwlyZXR1cm47CisgICAgfQorI2VuZGlmIC8qIElLU0QgKi8KKworICAgIHkgPSAo aXNhdHR5KDApICYmIGlzYXR0eSgxKSkgPyAxIDogMDsKKyAgICBkZWJ1ZyhGMTAxLCJjb25iZ3Qg aXNhdHR5IHRlc3QiLCIiLHkpOworCisjaWZkZWYgQlNEMjkKKy8qIFRoZSBwcm9jZXNzIGdyb3Vw IGFuZC9vciBzaWduYWwgdGVzdCBkb2Vzbid0IHdvcmsgdW5kZXIgdGhlc2UuLi4gKi8KKyAgICBi YWNrZ3JkID0gIXk7CisjZWxzZQorI2lmZGVmIHN4YUU1MAorICAgIGJhY2tncmQgPSAheTsKKyNl bHNlCisjaWZkZWYgTUlOSVgKKyAgICBiYWNrZ3JkID0gIXk7CisjZWxzZQorI2lmZGVmIE1JTklY MgorICAgIGJhY2tncmQgPSAheTsKKyNlbHNlCisgICAgaWYgKHggPiAtMSkKKyAgICAgIGJhY2tn cmQgPSAoeCB8fCAheSkgPyAxIDogMDsKKyAgICBlbHNlIGJhY2tncmQgPSAheTsKKyNlbmRpZiAv KiBCU0QyOSAqLworI2VuZGlmIC8qIHN4YUU1MCAqLworI2VuZGlmIC8qIE1JTklYICovCisjZW5k aWYgLyogTUlOSVgyICovCisgICAgZGVidWcoRjEwMSwiY29uYmd0IGJhY2tncmQiLCIiLGJhY2tn cmQpOworfQorCisvKiAgQyBPIE4gSSBOIFQgIC0tICBDb25zb2xlIEludGVycnVwdCBzZXR0ZXIg ICovCisKKy8qCisgIEZpcnN0IGFyZyBpcyBwb2ludGVyIHRvIGZ1bmN0aW9uIHRvIGhhbmRsZSBT SUdURVJNICYgU0lHSU5UIChsaWtlIEN0cmwtQykuCisgIFNlY29uZCBhcmcgaXMgcG9pbnRlciB0 byBmdW5jdGlvbiB0byBoYW5kbGUgU0lHVFNUUCAoc3VzcGVuZCkuCisqLworCitWT0lECQkJCQkv KiBTZXQgdGVybWluYWwgaW50ZXJydXB0IHRyYXBzLiAqLworI2lmZGVmIENLX0FOU0lDCisjaWZk ZWYgYXBvbGxvCitjb25pbnQoZixzKSBTSUdUWVAgKCpmKSgpLCAoKnMpKCk7CisjZWxzZQorY29u aW50KFNJR1RZUCAoKmYpKGludCksIFNJR1RZUCAoKnMpKGludCkpCisjZW5kaWYgLyogYXBvbGxv ICovCisjZWxzZQorY29uaW50KGYscykgU0lHVFlQICgqZikoKSwgKCpzKSgpOworI2VuZGlmIC8q IENLX0FOU0lDICovCisvKiBjb25pbnQgKi8geworCisgICAgZGVidWcoRjEwMSwiY29uaW50IGNv bmlzdGF0ZSIsIiIsY29uaXN0YXRlKTsKKworICAgIGNvbmJndCgwKTsJCQkJLyogRG8gYmFja2dy b3VuZCB0ZXN0LiAqLworCisvKiBTZXQgdGhlIGRlc2lyZWQgaGFuZGxlcnMgZm9yIGhhbmd1cCBh bmQgc29mdHdhcmUgdGVybWluYXRpb24uICovCisKKyNpZmRlZiBTSUdURVJNCisgICAgc2lnbmFs KFNJR1RFUk0sZik7ICAgICAgICAgICAgICAgICAgLyogU29mdHdhcmUgdGVybWluYXRpb24gKi8K KyNlbmRpZiAvKiBTSUdURVJNICovCisKKy8qCisgIFByaW9yIHRvIEp1bHkgMTk5OSB3ZSB1c2Vk IHRvIGNhbGwgc2lnaHVwKCkgaGVyZSBidXQgbm93IGl0J3MgY2FsbGVkIGluCisgIHN5c2luaXQo KSBzbyBTSUdIVVAgY2FuIGJlIGNhdWdodCBkdXJpbmcgZXhlY3V0aW9uIG9mIHRoZSBpbml0IGZp bGUgb3IKKyAgYSBrZXJiYW5nIHNjcmlwdC4KKyovCisKKy8qIE5vdyBoYW5kbGUga2V5Ym9hcmQg c3RvcCwgcXVpdCwgYW5kIGludGVycnVwdCBzaWduYWxzLiAqLworLyogQ2hlY2sgaWYgaW52b2tl ZCBpbiBiYWNrZ3JvdW5kIC0tIGlmIHNvIHNpZ25hbHMgc2V0IHRvIGJlIGlnbm9yZWQuICovCisv KiBIb3dldmVyLCBpZiBydW5uaW5nIHVuZGVyIGEgam9iIGNvbnRyb2wgc2hlbGwsIGRvbid0IGln bm9yZSB0aGVtLiAqLworLyogV2Ugd29uJ3QgYmUgZ2V0dGluZyBhbnksIGFzIHdlIGFyZW4ndCBp biB0aGUgdGVybWluYWwncyBwcm9jZXNzIGdyb3VwLiAqLworCisgICAgZGVidWcoRjEwMSwiY29u aW50IGJhY2tncmQiLCIiLGJhY2tncmQpOworICAgIGRlYnVnKEYxMDEsImNvbmludCBqYyIsIiIs amMpOworCisgICAgaWYgKGJhY2tncmQgJiYgIWpjKSB7CQkvKiBJbiBiYWNrZ3JvdW5kLCBpZ25v cmUgc2lnbmFscyAqLworCWRlYnVnKEYxMDEsImNvbmludCBiYWNrZ3JvdW5kIGlnbm9yaW5nIHNp Z25hbHMsIGpjIiwiIixqYyk7CisjaWZkZWYgU0lHVFNUUAorICAgICAgICBzaWduYWwoU0lHVFNU UCxTSUdfSUdOKTsgICAgICAgIC8qIEtleWJvYXJkIHN0b3AgKi8KKyNlbmRpZiAvKiBTSUdUU1RQ ICovCisgICAgICAgIHNpZ25hbChTSUdRVUlULFNJR19JR04pOyAgICAgICAgLyogS2V5Ym9hcmQg cXVpdCAqLworICAgICAgICBzaWduYWwoU0lHSU5ULFNJR19JR04pOyAgICAgICAgIC8qIEtleWJv YXJkIGludGVycnVwdCAqLworCXNpZ2ludF9pZ24gPSAxOworCWNvbmlzdGF0ZSA9IENPTklfTk9J OworICAgIH0gZWxzZSB7CQkJCS8qIEVsc2UgaW4gZm9yZWdyb3VuZCBvciBzdXNwZW5kZWQgKi8K KwlkZWJ1ZyhGMTAxLCJjb25pbnQgZm9yZWdyb3VuZCBjYXRjaGluZyBzaWduYWxzLCBqYyIsIiIs amMpOworICAgICAgICBzaWduYWwoU0lHSU5ULGYpOyAgICAgICAgICAgICAgIC8qIENhdGNoIHRl cm1pbmFsIGludGVycnVwdCAqLworCXNpZ2ludF9pZ24gPSAoZiA9PSBTSUdfSUdOKSA/IDEgOiAw OworCisjaWZkZWYgU0lHVFNUUAkJCQkvKiBLZXlib2FyZCBzdG9wIChzdXNwZW5kKSAqLworCS8q IGRlYnVnKEYxMDEsImNvbmludCBTSUdTVFNUUCIsIiIscyk7ICovCisJaWYgKHMgPT0gTlVMTCkg cyA9IFNJR19ERkw7CisjaWZkZWYgTk9KQwkJCQkvKiBObyBqb2IgY29udHJvbCBhbGxvd2VkLiAq LworCXNpZ25hbChTSUdUU1RQLFNJR19JR04pOworI2Vsc2UJCQkJCS8qIEpvYiBjb250cm9sIGFs bG93ZWQgKi8KKwlpZiAoamMpCQkJCS8qIGlmIGF2YWlsYWJsZS4gKi8KKwkgIHNpZ25hbChTSUdU U1RQLHMpOworCWVsc2UKKwkgIHNpZ25hbChTSUdUU1RQLFNJR19JR04pOworI2VuZGlmIC8qIE5P SkMgKi8KKyNlbmRpZiAvKiBTSUdUU1RQICovCisKKyNpZm5kZWYgT1hPUworI2lmZGVmIFNWT1JQ T1NJWAorI2lmbmRlZiBGSU9OUkVBRAkJCS8qIFdhdGNoIG91dCwgd2UgZG9uJ3Qga25vdyB0aGlz Li4uICovCisjaWZuZGVmIFNFTEVDVAorI2lmbmRlZiBDS19QT0xMCisjaWZuZGVmIFJEQ0hLCisg ICAgICAgIHNpZ25hbChTSUdRVUlULGVzY3RycCk7ICAgICAgICAgLyogUXVpdCBzaWduYWwsIFN5 cyBJSUkvVi4gKi8KKyNlbmRpZiAvKiBSRENISyAqLworI2VuZGlmIC8qIENLX1BPTEwgKi8KKyNl bmRpZiAvKiBTRUxFQ1QgKi8KKyNlbmRpZiAvKiBGSU9OUkVBRCAqLworICAgICAgICBpZiAoY29u ZXNjKSBjb25lc2MgPSAwOyAgICAgICAgIC8qIENsZWFyIG91dCBwZW5kaW5nIGVzY2FwZXMgKi8K KyNlbHNlCisjaWZkZWYgVjcKKyAgICAgICAgc2lnbmFsKFNJR1FVSVQsZXNjdHJwKTsgICAgICAg ICAvKiBWNyBsaWtlIFN5cyBJSUkvViAqLworICAgICAgICBpZiAoY29uZXNjKSBjb25lc2MgPSAw OworI2Vsc2UKKyNpZmRlZiBhZWdpcworICAgICAgICBzaWduYWwoU0lHUVVJVCxmKTsgICAgICAg ICAgICAgIC8qIEFwb2xsbywgY2F0Y2ggaXQgbGlrZSBvdGhlcnMuICovCisjZWxzZQorICAgICAg ICBzaWduYWwoU0lHUVVJVCxTSUdfSUdOKTsgICAgICAgIC8qIE90aGVycywgaWdub3JlIGxpa2Ug NEQgJiBlYXJsaWVyLiAqLworI2VuZGlmIC8qIGFlZ2lzICovCisjZW5kaWYgLyogVjcgKi8KKyNl bmRpZiAvKiBTVk9SUE9TSVggKi8KKyNlbmRpZiAvKiBPWE9TICovCisJY29uaXN0YXRlID0gQ09O SV9JTlQ7CisgICAgfQorfQorCisKKy8qICBDIE8gTiBOIE8gSSAgLS0gIFJlc2V0IGNvbnNvbGUg dGVybWluYWwgaW50ZXJydXB0cyAqLworCitWT0lECitjb25ub2koKSB7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogQ29uc29sZS1uby1pbnRlcnJ1cHRzICovCisKKyAgICBkZWJ1ZyhG MTAxLCJjb25ub2kgY29uaXN0YXRlIiwiIixjb25pc3RhdGUpOworI2lmZGVmIFNJR1RTVFAKKyAg ICBzaWduYWwoU0lHVFNUUCxTSUdfSUdOKTsJCS8qIFN1c3BlbmQgKi8KKyNlbmRpZiAvKiBTSUdU U1RQICovCisgICAgY29uaW50KFNJR19JR04sU0lHX0lHTik7CQkvKiBJbnRlcnJ1cHQgKi8KKyAg ICBzaWdpbnRfaWduID0gMTsJCQkvKiBSZW1lbWJlciB3ZSBkaWQgdGhpcyBvdXJzZWx2ZXMgKi8K KyNpZmRlZiBTSUdRVUlUCisgICAgc2lnbmFsKFNJR1FVSVQsU0lHX0lHTik7CQkvKiBRdWl0ICov CisjZW5kaWYgLyogU0lHUVVJVCAqLworI2lmZGVmIFNJR1RFUk0KKyAgICBzaWduYWwoU0lHVEVS TSxTSUdfSUdOKTsJCS8qIFRlcm0gKi8KKyNlbmRpZiAvKiBTSUdURVJNICovCisgICAgY29uaXN0 YXRlID0gQ09OSV9OT0k7Cit9CisKKy8qICBJIE4gSSBUIFIgQSBXIFEgIC0tICBTZXQgdXAgdG8g cmVhZCAvZGV2L2ttZW0gZm9yIGNoYXJhY3RlciBjb3VudC4gICovCisKKyNpZmRlZiAgVjcKKy8q CisgVXNlZCBpbiBWZXJzaW9uIDcgdG8gc2ltdWxhdGUgQmVya2VsZXkncyBGSU9OUkVBRCBpb2N0 bCBjYWxsLiAgVGhpcworIGVsaW1pbmF0ZXMgYmxvY2tpbmcgb24gYSByZWFkLCBiZWNhdXNlIHdl IGNhbiByZWFkIC9kZXYva21lbSB0byBnZXQgdGhlCisgbnVtYmVyIG9mIGNoYXJhY3RlcnMgYXZh aWxhYmxlIGZvciByYXcgaW5wdXQuICBJZiB5b3VyIHN5c3RlbSBjYW4ndAorIG9yIHlvdSB3b24n dCBsZXQgdGhlIHdvcmxkIHJlYWQgL2Rldi9rbWVtIHRoZW4geW91IG11c3QgZmlndXJlIG91dCBh CisgZGlmZmVyZW50IHdheSB0byBkbyB0aGUgY291bnRpbmcgb2YgY2hhcmFjdGVycyBhdmFpbGFi bGUsIG9yIGVsc2UgcmVwbGFjZQorIHRoaXMgYnkgYSBkdW1teSBmdW5jdGlvbiB0aGF0IGFsd2F5 cyByZXR1cm5zIDAuCisqLworLyoKKyAqIENhbGwgdGhpcyByb3V0aW5lIGFzOiBpbml0cmF3cSh0 dHkpCisgKiB3aGVyZSB0dHkgaXMgdGhlIGZpbGUgZGVzY3JpcHRvciBvZiBhIHRlcm1pbmFsLiAg SXQgd2lsbCByZXR1cm4KKyAqIChhcyBhIGNoYXIgKikgdGhlIGtlcm5lbC1tb2RlIG1lbW9yeSBh ZGRyZXNzIG9mIHRoZSByYXdxIGNoYXJhY3RlcgorICogY291bnQsIHdoaWNoIG1heSB0aGVuIGJl IHJlYWQuICBJdCBoYXMgdGhlIHNpZGUtZWZmZWN0IG9mIGZsdXNoaW5nCisgKiBpbnB1dCBvbiB0 aGUgdGVybWluYWwuCisgKi8KKy8qCisgKiBKb2huIE1hY2tpbiwgUGh5c2lvbG9neSBEZXB0Liwg VW5pdmVyc2l0eSBvZiBTeWRuZXkgKEF1c3RyYWxpYSkKKyAqIC4uLiFkZWN2YXghbXVsZ2EhcGh5 c2lvbC5zdS5veiFqb2huCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBk byBhbnl0aGluZyB3aXRoIHRoaXMgY29kZSwgYXMKKyAqIGxvbmcgYXMgdGhpcyBjb21tZW50IGlz IHJldGFpbmVkIHVubW9kaWZpZWQgYW5kIG5vIGNvbW1lcmNpYWwKKyAqIGFkdmFudGFnZSBpcyBn YWluZWQuCisgKi8KKyNpZm5kZWYgTUlOSVgKKyNpZm5kZWYgTUlOSVgyCisjaWZuZGVmIENPSEVS RU5UCisjaW5jbHVkZSA8YS5vdXQuaD4KKyNpbmNsdWRlIDxzeXMvcHJvYy5oPgorI2VuZGlmIC8q IENPSEVSRU5UICovCisjZW5kaWYgLyogTUlOSVgyICovCisjZW5kaWYgLyogTUlOSVggKi8KKwor I2lmZGVmIENPSEVSRU5UCisjaW5jbHVkZSA8bC5vdXQuaD4KKyNpbmNsdWRlIDxzeXMvcHJvYy5o PgorI2VuZGlmIC8qIENPSEVSRU5UICovCisKK2NoYXIgKgoraW5pdHJhd3EodHR5KSBpbnQgdHR5 OyB7CisjaWZkZWYgTUlOSVgKKyAgICByZXR1cm4oMCk7CisjZWxzZQorI2lmZGVmIE1JTklYMgor ICAgIHJldHVybigwKTsKKyNlbHNlCisjaWZkZWYgVVRTMjQKKyAgICByZXR1cm4oMCk7CisjZWxz ZQorI2lmZGVmIEJTRDI5CisgICAgcmV0dXJuKDApOworI2Vsc2UKKyAgICBsb25nIGxzZWVrKCk7 CisgICAgc3RhdGljIHN0cnVjdCBubGlzdCBubFtdID0geworICAgICAgICB7UFJPQ05BTUV9LAor ICAgICAgICB7TlBST0NOQU1FfSwKKyAgICAgICAgeyIifQorICAgIH07CisgICAgc3RhdGljIHN0 cnVjdCBwcm9jICpwcDsKKyAgICBjaGFyICpxYWRkciwgKnAsIGM7CisgICAgaW50IG07CisgICAg UElEX1QgcGlkLCBtZTsKKyAgICBOUFRZUEUgeHByb2M7ICAgICAgICAgICAgICAgICAgICAgICAv KiBJdHMgdHlwZSBpcyBkZWZpbmVkIGluIG1ha2VmaWxlLiAqLworICAgIGludCBjYXRjaCgpOwor CisgICAgbWUgPSBnZXRwaWQoKTsKKyAgICBpZiAoKG0gPSBvcGVuKCIvZGV2L2ttZW0iLCAwKSkg PCAwKSBlcnIoImttZW0iKTsKKyAgICBubGlzdChCT09UTkFNRSwgbmwpOworICAgIGlmIChubFsw XS5uX3R5cGUgPT0gMCkgZXJyKCJwcm9jIGFycmF5Iik7CisKKyAgICBpZiAobmxbMV0ubl90eXBl ID09IDApIGVycigibnByb2MiKTsKKworICAgIGxzZWVrKG0sIChsb25nKShubFsxXS5uX3ZhbHVl KSwgMCk7CisgICAgcmVhZCAobSwgJnhwcm9jLCBzaXplb2YoeHByb2MpKTsKKyAgICBzYXZhbCA9 IHNpZ25hbChTSUdBTFJNLCBjYXRjaCk7CisgICAgaWYgKChwaWQgPSBmb3JrKCkpID09IDApIHsK KyAgICAgICAgd2hpbGUoMSkKKyAgICAgICAgICAgIHJlYWQodHR5LCAmYywgMSk7CisgICAgfQor ICAgIGFsYXJtKDIpOworCisgICAgaWYoc2V0am1wKGpqYnVmKSA9PSAwKSB7CisgICAgICAgIHdo aWxlKDEpCisJICByZWFkKHR0eSwgJmMsIDEpOworICAgIH0KKyAgICBzaWduYWwoU0lHQUxSTSwg U0lHX0RGTCk7CisKKyNpZmRlZiBESVJFQ1QKKyAgICBwcCA9IChzdHJ1Y3QgcHJvYyAqKSBubFsw XS5uX3ZhbHVlOworI2Vsc2UKKyAgICBpZiAobHNlZWsobSwgKGxvbmcpKG5sWzBdLm5fdmFsdWUp LCAwKSA8IDBMKSBlcnIoInNlZWsiKTsKKyAgICBpZiAocmVhZChtLCAmcHAsIHNpemVvZihwcCkp ICE9IHNpemVvZihwcCkpICBlcnIoIm5vIHJlYWQgb2YgcHJvYyBwdHIiKTsKKyNlbmRpZgorICAg IGxzZWVrKG0sIChsb25nKShubFsxXS5uX3ZhbHVlKSwgMCk7CisgICAgcmVhZChtLCAmeHByb2Ms IHNpemVvZih4cHJvYykpOworCisgICAgaWYgKGxzZWVrKG0sIChsb25nKXBwLCAwKSA8IDBMKSBl cnIoIkNhbid0IHNlZWsgdG8gcHJvYyIpOworICAgIGlmICgocCA9IG1hbGxvYyh4cHJvYyAqIHNp emVvZihzdHJ1Y3QgcHJvYykpKSA9PSBOVUxMKSBlcnIoIm1hbGxvYyIpOworICAgIGlmIChyZWFk KG0scCx4cHJvYyAqIHNpemVvZihzdHJ1Y3QgcHJvYykpICE9IHhwcm9jKnNpemVvZihzdHJ1Y3Qg cHJvYykpCisgICAgICAgIGVycigicmVhZCBwcm9jIHRhYmxlIik7CisgICAgZm9yIChwcCA9IChz dHJ1Y3QgcHJvYyAqKXA7IHhwcm9jID4gMDsgLS14cHJvYywgKytwcCkgeworICAgICAgICBpZiAo cHAgLT4gcF9waWQgPT0gKHNob3J0KSBwaWQpIGdvdG8gaW91dDsKKyAgICB9CisgICAgZXJyKCJu byBzdWNoIHByb2MiKTsKKworaW91dDoKKyAgICBjbG9zZShtKTsKKyAgICBxYWRkciA9IChjaGFy ICopKHBwIC0+IHBfd2NoYW4pOworICAgIGZyZWUgKHApOworICAgIGtpbGwocGlkLCBTSUdLSUxM KTsKKyAgICB3YWl0KChXQUlUX1QgKikwKTsKKyAgICByZXR1cm4gKHFhZGRyKTsKKyNlbmRpZgor I2VuZGlmCisjZW5kaWYKKyNlbmRpZgorfQorCisvKiAgTW9yZSBWNy1zdXBwb3J0IGZ1bmN0aW9u cy4uLiAgKi8KKworc3RhdGljIFZPSUQKK2VycihzKSBjaGFyICpzOyB7CisgICAgY2hhciBidWZb MjAwXTsKKworICAgIGNrbWFrbXNnKGJ1ZiwyMDAsImZhdGFsIGVycm9yIGluIGluaXRyYXdxOiAi LCBzLCBOVUxMLCBOVUxMKTsKKyAgICBwZXJyb3IoYnVmKTsKKyAgICBkb2V4aXQoMSwtMSk7Cit9 CisKK3N0YXRpYyBWT0lECitjYXRjaChmb28pIGludCBmb287IHsKKyAgICBsb25nam1wKGpqYnVm LCAtMSk7Cit9CisKKworLyogIEcgRSBOIEIgUiBLICAtLSAgU2ltdWxhdGUgYSBtb2RlbSBicmVh ay4gICovCisKKyNpZmRlZiBNSU5JWAorI2RlZmluZSBCU1BFRUQgQjExMAorI2Vsc2UKKyNpZmRl ZiBNSU5JWDIKKyNkZWZpbmUgQlNQRUVEIEIxMTAKKyNlbHNlCisjZGVmaW5lIEJTUEVFRCBCMTUw CisjZW5kaWYgLyogTUlOSVgyICovCisjZW5kaWYgLyogTUlOSVggKi8KKworI2lmbmRlZiBNSU5J WDIKK1ZPSUQKK2dlbmJyayhmbixtc2VjKSBpbnQgZm4sIG1zZWM7IHsKKyAgICBzdHJ1Y3Qgc2d0 dHliIHR0YnVmOworICAgIGludCByZXQsIHNvc3BlZWQsIHgsIHk7CisKKyAgICByZXQgPSBpb2N0 bChmbiwgVElPQ0dFVFAsICZ0dGJ1Zik7CisgICAgc29zcGVlZCA9IHR0YnVmLnNnX29zcGVlZDsK KyAgICB0dGJ1Zi5zZ19vc3BlZWQgPSBCU1BFRUQ7CisgICAgcmV0ID0gaW9jdGwoZm4sIFRJT0NT RVRQLCAmdHRidWYpOworICAgIHkgPSAoaW50KXN0cmxlbihicm51bHMpOworICAgIHggPSAoIEJT UEVFRCAqIDEwMCApIC8gbXNlYzsKKyAgICBpZiAoeCA+IHkpIHggPSB5OworICAgIHJldCA9IHdy aXRlKGZuLCBicm51bHMsICgoIEJTUEVFRCAqIDEwMCApIC8gbXNlYyApKTsKKyAgICB0dGJ1Zi5z Z19vc3BlZWQgPSBzb3NwZWVkOworICAgIHJldCA9IGlvY3RsKGZuLCBUSU9DU0VUUCwgJnR0YnVm KTsKKyAgICByZXQgPSB3cml0ZShmbiwgIkAiLCAxKTsKKyAgICByZXR1cm47Cit9CisjZW5kaWYg LyogTUlOSVgyICovCisKKyNpZmRlZiBNSU5JWDIKK2ludAorZ2VuYnJrKGZuLG1zZWMpIGludCBm biwgbXNlYzsgeworICAgIHN0cnVjdCB0ZXJtaW9zIHR0YnVmOworICAgIGludCByZXQsIHgsIHk7 CisgICAgc3BlZWRfdCBzb3NwZWVkOworCisgICAgcmV0ID0gdGNnZXRhdHRyKGZuLCAmdHRidWYp OworICAgIHNvc3BlZWQgPSB0dGJ1Zi5jX29zcGVlZDsKKyAgICB0dGJ1Zi5jX29zcGVlZCA9IEJT UEVFRDsKKyAgICByZXQgPSB0Y3NldGF0dHIoZm4sVENTQURSQUlOLCAmdHRidWYpOworICAgIHkg PSAoaW50KXN0cmxlbihicm51bHMpOworICAgIHggPSAoIEJTUEVFRCAqIDEwMCApIC8gbXNlYzsK KyAgICBpZiAoeCA+IHkpIHggPSB5OworICAgIHJldCA9IHdyaXRlKGZuLCBicm51bHMsICgoIEJT UEVFRCAqIDEwMCApIC8gbXNlYyApKTsKKyAgICB0dGJ1Zi5jX29zcGVlZCA9IHNvc3BlZWQ7Cisg ICAgcmV0ID0gdGNzZXRhdHRyKGZuLCBUQ1NBRFJBSU4sICZ0dGJ1Zik7CisgICAgcmV0ID0gd3Jp dGUoZm4sICJAIiwgMSk7CisgICAgcmV0dXJuIHJldDsKK30KKyNlbmRpZiAvKiBNSU5JWDIgKi8K KyNlbmRpZiAvKiBWNyAqLworCisvKgorICBJIE4gQyBIIEsgIC0tICBDaGVjayBpZiBjaGFycyB3 YWl0aW5nIHRvIGJlIHJlYWQgb24gZ2l2ZW4gZmlsZSBkZXNjcmlwdG9yLgorCisgIFRoaXMgcm91 dGluZSBpcyBhIG1lcmdlciBvZiB0dGNoaygpIGFuZCBjb25jaGsoKS4KKyAgQ2FsbCB3aXRoOgor ICAgIGNoYW5uZWwgPT0gMCB0byBjaGVjayBjb25zb2xlLgorICAgIGNoYW5uZWwgPT0gMSB0byBj aGVjayBjb21tdW5pY2F0aW9ucyBjb25uZWN0aW9uLgorICBhbmQ6CisgICAgZmQgPSBmaWxlIGRl c2NyaXB0b3IuCisgIFJldHVybnM6CisgICA+PSAwOiBudW1iZXIgb2YgY2hhcmFjdGVycyB3YWl0 aW5nLCAwIG9yIGdyZWF0ZXIsCisgICAgIC0xOiBvbiBhbnkga2luZCBvZiBlcnJvciwKKyAgICAg LTI6IGlmIHRoZXJlIGlzIChkZWZpbml0ZWx5KSBubyBjb25uZWN0aW9uLgorICBOb3RlOiBJbiBV TklYIHdlIGRvbid0IGhhdmUgdG8gY2FsbCBuZXR0Y2hrKCkgYmVjYXVzZSBhIHNvY2tldAorICBm aWxlIGRlc2NyaXB0b3Igd29ya3MganVzdCBsaWtlIGluIHNlcmlhbCBpL28sIGlvY3RscyBhbmQg YWxsLgorICAoQnV0IHRoaXMgd2lsbCBjaGFuZ2UgaWYgd2UgYWRkIG5vbi1maWxlLWRlc2NyaXB0 b3IgY2hhbm5lbHMsCisgIHN1Y2ggYXMgSUJNIFguMjUgZm9yIEFJWC4uLikKKyovCitzdGF0aWMg aW50Citpbl9jaGsoY2hhbm5lbCwgZmQpIGludCBjaGFubmVsLCBmZDsgeworICAgIGludCB4LCBu ID0gMDsJCQkvKiBXb3JrZXJzLCBuID0gcmV0dXJuIHZhbHVlICovCisgICAgZXh0ZXJuIGludCBj bHNvbmRpc2M7CQkvKiBDbG9zZSBvbiBkaXNjb25uZWN0ICovCisvKgorICBUaGUgZmlyc3Qgc2Vj dGlvbiBjaGVja3MgdG8gbWFrZSBzdXJlIHdlIGhhdmUgYSBjb25uZWN0aW9uLAorICBidXQgb25s eSBpZiB3ZSdyZSBpbiBsb2NhbCBtb2RlLgorKi8KKyNpZmRlZiBERUJVRworICAgIGlmIChkZWJs b2cpIHsKKwlkZWJ1ZyhGMTExLCJpbl9jaGsgZW50cnkiLGNraXRvYShmZCksY2hhbm5lbCk7CisJ ZGVidWcoRjEwMSwiaW5fY2hrIHR0eWZkIiwiIix0dHlmZCk7CisJZGVidWcoRjEwMSwiaW5fY2hr IHR0cHR5IiwiIix0dHB0eSk7CisgICAgfQorI2VuZGlmIC8qIERFQlVHICovCisvKgorICBCdXQg ZG9uJ3Qgc2F5IGNvbm5lY3Rpb24gaXMgZ29uZSBpZiB3ZSBoYXZlIGFueSBidWZmZXJlZC1zdHVm Zi4KKyovCisjaWZkZWYgVFRMRUJVRgorICAgIGRlYnVnKEYxMDEsImluX2NoayB0dHB1c2giLCIi LHR0cHVzaCk7CisgICAgaWYgKGNoYW5uZWwgPT0gMSkgeworCWlmICh0dHB1c2ggPj0gMCkKKwkg IG4rKzsKKwluICs9IGxlX2luYnVmKCk7CisJaWYgKG4gPiAwKQorCSAgcmV0dXJuKG4pOworICAg IH0KKyNlbmRpZiAvKiBUVExFQlVGICovCisKKyNpZmRlZiBORVRQVFkKKyNpZmRlZiBIQVZFX1BU WVRSQVAKKyAgICAvKiBTcGVjaWFsIGhhbmRsaW5nIGZvciBIUC1VWCBwdHkgaS9vICovCisgICAg aWYgKHR0cHR5ICYmIHB0eV90cmFwX3BlbmRpbmcodHR5ZmQpID4gMCkgeworICAgICAgICBpZiAo cHR5X3RyYXBfaGFuZGxlcih0dHlmZCkgPiAwKSB7CisgICAgICAgICAgICB0dGNsb3MoMCk7Cisg ICAgICAgICAgICByZXR1cm4oLTIpOworICAgICAgICB9CisgICAgfQorI2VuZGlmIC8qIEhBVkVf UFRZVFJBUCAqLworI2VuZGlmIC8qIE5FVFBUWSAqLworCisgICAgaWYgKGNoYW5uZWwpIHsJCQkv KiBDaGVja2luZyBjb21tdW5pY2F0aW9ucyBjaGFubmVsICovCisJaWYgKHR0eWZkIDwgMCkgewkJ LyogTm8gY29ubmVjdGlvbiAqLworCSAgcmV0dXJuKC0yKTsJCQkvKiBUaGF0J3Mgd2hhdCB0aGlz IG1lYW5zICovCisJfSBlbHNlIGlmICh4bG9jYWwgJiYJCS8qIEluIGxvY2FsIG1vZGUgKi8KKwkJ ICAgKCFuZXRjb25uCQkvKiBTZXJpYWwgY29ubmVjdGlvbiBvciAqLworI2lmZGVmIFROX0NPTVBP UlQKKwkJICAgIHx8IGlzdG5jb21wb3J0KCkgICAgLyogVGVsbmV0IENvbSBQb3J0ICovCisjZW5k aWYgLyogVE5fQ09NUE9SVCAqLworCQkgICApICYmIHR0Y2FyciAhPSBDQVJfT0ZGIC8qIHdpdGgg Q0FSUklFUiBXQVRDSCBPTiAob3IgQVVUTykgKi8KKyNpZmRlZiBDT01NRU5UCisjaWZkZWYgTVlS RUFECisvKgorICBTZWVtcyBsaWtlIHRoaXMgd291bGQgYmUgYSBnb29kIGlkZWEgYnV0IGl0IHBy ZXZlbnRzIEMtS2VybWl0IGZyb20KKyAgcG9wcGluZyBiYWNrIHRvIHRoZSBwcm9tcHQgYXV0b21h dGljYWxseSB3aGVuIGNhcnJpZXIgZHJvcHMuICBIb3dldmVyLAorICBjb21tZW50aW5nIHRoaXMg b3V0IHByZXZlbnRzIHVzIGZyb20gc2VlaW5nIHRoZSBOTyBDQVJSSUVSIG1lc3NhZ2UuCisgIE5l ZWRzIG1vcmUgd29yay4uLgorKi8KKwkJICAgJiYgbXlfY291bnQgPCAxCS8qIE5vdGhpbmcgaW4g b3VyIGludGVybmFsIGJ1ZmZlciAqLworI2VuZGlmIC8qIE1ZUkVBRCAqLworI2VuZGlmIC8qIENP TU1FTlQgKi8KKwkJICAgKSB7CisJICAgIGludCB4OworCSAgICB4ID0gdHRnbWRtKCk7CQkvKiBT byBnZXQgbW9kZW0gc2lnbmFscyAqLworCSAgICBkZWJ1ZyhGMTAxLCJpbl9jaGsgY2xvc2Utb24t ZGlzY29ubmVjdCIsIiIsY2xzb25kaXNjKTsKKwkgICAgaWYgKHggPiAtMSkgewkJLyogQ2hlY2sg Zm9yIGNhcnJpZXIgKi8KKwkJaWYgKCEoeCAmIEJNX0RDRCkpIHsJLyogTm8gY2FycmllciAqLwor CQkgICAgZGVidWcoRjEwMSwiaW5fY2hrIGNhcnJpZXIgbG9zdCIsIiIseCk7CisJCSAgICBpZiAo Y2xzb25kaXNjKQkvKiBJZiAiY2xvc2Utb24tZGlzY29ubmVjdCIgKi8KKwkJICAgICAgdHRjbG9z KDApOwkvKiBjbG9zZSBkZXZpY2UgJiByZWxlYXNlIGxvY2suICovCisJCSAgICByZXR1cm4oLTIp OwkJLyogVGhpcyBtZWFucyAiZGlzY29ubmVjdGVkIiAqLworCQl9CisJICAgIC8qIEluIGNhc2Ug SS9PIHRvIGRldmljZSBhZnRlciBDRCBkcm9wcGVkIGFsd2F5cyBmYWlscyAqLworCSAgICAvKiBh cyBpbiBEZWJpYW4gTGludXggMi4xIGFuZCBVbml4d2FyZSAyLjEuLi4gKi8KKwkgICAgfSBlbHNl IHsKKwkgICAgICAgIGRlYnVnKEYxMDEsImluX2NoayB0dGdtZG0gSS9PIGVycm9yIiwiIixlcnJu byk7CisJICAgICAgICBkZWJ1ZyhGMTAxLCJpbl9jaGsgdHRnbWRtIGdvdHNpZ3MiLCIiLGdvdHNp Z3MpOworCSAgICAgICAgaWYgKGdvdHNpZ3MpIHsJCS8qIElmIHdlIGdvdCBzaWduYWxzIGJlZm9y ZS4uLiAqLworCQkgICAgaWYgKGVycm5vID09IDUgfHwgZXJybm8gPT0gNikgeyAvKiBJL08gZXJy b3IgZXRjICovCisJCSAgICAgICAgaWYgKGNsc29uZGlzYykJLyogbGlrZSB3aGVuIG1vZGVtIGhh bmdzIHVwICovCisJCQkgIHR0Y2xvcygwKTsKKwkJCXJldHVybigtMik7CisJCSAgICB9CisJCX0K KwkJLyogSWYgd2UgbmV2ZXIgZ290IG1vZGVtIHNpZ25hbHMgc3VjY2Vzc2Z1bGx5IG9uIHRoaXMg Ki8KKwkJLyogY29ubmVjdGlvbiBiZWZvcmUsIHdlIGNhbid0IGNvbmNsdWRlIHRoYXQgVEhJUyBm YWlsdXJlICovCisJCS8qIG1lYW5zIHRoZSBjb25uZWN0aW9uIHdhcyBsb3N0LiAqLworCQlyZXR1 cm4oMCk7CisJICAgIH0KKwl9CisgICAgfQorCisvKiBXZSBzZWVtIHRvIGhhdmUgYSBjb25uZWN0 aW9uIHNvIG5vdyBzZWUgaWYgYW55IGJ5dGVzIGFyZSB3YWl0aW5nIG9uIGl0ICovCisKKyNpZmRl ZiBDS19TU0wKKyAgICBpZiAoc3NsX2FjdGl2ZV9mbGFnIHx8IHRsc19hY3RpdmVfZmxhZykgewor ICAgICAgICBuICs9IFNTTF9wZW5kaW5nKHNzbF9hY3RpdmVfZmxhZz9zc2xfY29uOnRsc19jb24p OworICAgICAgICBkZWJ1ZyhGMTAxLCJpbl9jaGsgU1NMX3BlbmRpbmciLCIiLG4pOworICAgICAg ICBpZiAobiA8IDApIHsKKyAgICAgICAgICAgIHR0Y2xvcygwKTsKKyAgICAgICAgICAgIHJldHVy bigtMSk7CisgICAgICAgIH0gZWxzZSBpZiAobiA+IDApIHsKKyAgICAgICAgICAgIHJldHVybihu KTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBDS19TU0wgKi8KKyNpZmRlZiBSTE9HQ09E RQorI2lmZGVmIENLX0tFUkJFUk9TCisgICAgLyogSXQgaXMgbm90IHNhZmUgdG8gcmVhZCBhbnkg ZGF0YSB3aGVuIHVzaW5nIGVuY3J5cHRlZCBLbG9naW4gKi8KKyAgICBpZiAodHRucHJvdG8gPT0g TlBfRUs0TE9HSU4gfHwgdHRucHJvdG8gPT0gTlBfRUs1TE9HSU4pIHsKKyNpZmRlZiBLUkI0Cisg ICAgICAgIGlmICh0dG5wcm90byA9PSBOUF9FSzRMT0dJTikgeworICAgICAgICAgICAgbiArPSBr cmI0X2Rlc19hdmFpbCh0dHlmZCk7CisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJpbl9jaGsga3Ji NF9kZXNfYXZhaWwiLCIiLG4pOworICAgICAgICB9CisjZW5kaWYgLyogS1JCNCAqLworI2lmZGVm IEtSQjUKKyAgICAgICAgaWYgKHR0bnByb3RvID09IE5QX0VLNUxPR0lOKSB7CisgICAgICAgICAg ICBuICs9IGtyYjVfZGVzX2F2YWlsKHR0eWZkKTsKKyAgICAgICAgICAgIGRlYnVnKEYxMDEsImlu X2NoayBrcmI1X2Rlc19hdmFpbCIsIiIsbik7CisgICAgICAgIH0KKyNpZmRlZiBLUkI1X1UyVQor ICAgICAgICBpZiAodHRucHJvdG8gPT0gTlBfSzVVMlUpIHsKKyAgICAgICAgICAgIG4gKz0ga3Ji NV91MnVfYXZhaWwodHR5ZmQpOworICAgICAgICAgICAgZGVidWcoRjEwMSwiaW5fY2hrIGtyYjVf ZGVzX2F2YWlsIiwiIixuKTsKKyAgICAgICAgfQorI2VuZGlmIC8qIEtSQjVfVTJVICovCisjZW5k aWYgLyogS1JCNSAqLworICAgICAgICBpZiAobiA8IDApCQkJLyogSXMgdGhpcyByaWdodD8gKi8K KwkgIHJldHVybigtMSk7CisgICAgICAgIGVsc2UKKwkgIHJldHVybihuKTsKKyAgICB9CisjZW5k aWYgLyogQ0tfS0VSQkVST1MgKi8KKyNlbmRpZiAvKiBSTE9HQ09ERSAqLworCisgICAgZXJybm8g PSAwOwkJCQkvKiBSZXNldCB0aGlzIHNvIHdlIGxvZyBnb29kIGluZm8gKi8KKyNpZmRlZiBGSU9O UkVBRAorICAgIHggPSBpb2N0bChmZCwgRklPTlJFQUQsICZuKTsJLyogQlNEIGFuZCBsb3RzIG9m IG90aGVycyAqLworI2lmZGVmIERFQlVHCQkJCS8qICh0aGUgbW9yZSB0aGUgYmV0dGVyKSAqLwor ICAgIGlmIChkZWJsb2cpIHsKKwlkZWJ1ZyhGMTAxLCJpbl9jaGsgRklPTlJFQUQgcmV0dXJuIGNv ZGUiLCIiLHgpOworCWRlYnVnKEYxMDEsImluX2NoayBGSU9OUkVBRCBjb3VudCIsIiIsbik7CisJ ZGVidWcoRjEwMSwiaW5fY2hrIEZJT05SRUFEIGVycm5vIiwiIixlcnJubyk7CisgICAgfQorI2Vu ZGlmIC8qIERFQlVHICovCisjZWxzZSAvKiBGSU9OUkVBRCBub3QgZGVmaW5lZCAqLworLyoKKyAg SGVyZSwgaWYgKG5ldGNvbm4gJiYgdHRuZXQgPT0gTkVUX1RDUEIpLCB3ZSBtaWdodCB0cnkgY2Fs bGluZyByZWN2bXNnKCkKKyAgd2l0aCBmbGFncyBNU0dfUEVFS3xNU0dfRE9OVFdBSVQgb24gdGhl IHNvY2tldCAodHR5ZmQpLCBleGNlcHQgdGhpcyBpcyBub3QKKyAgcG9ydGFibGUgKE1TR19ET05U V0FJVCBpc24ndCBkZWZpbmVkIGluIGFueSBvZiB0aGUgPHN5cy9zb2NrZXQuaD4gZmlsZXMKKyAg dGhhdCBJIGxvb2tlZCBhdCwgYnV0IGl0IGlzIG5lZWRlZCB0byBwcmV2ZW50IHRoZSBjYWxsIGZy b20gYmxvY2tpbmcpLCBhbmQKKyAgdGhlIG1zZ2hkciBzdHJ1Y3QgZGlmZmVycyBmcm9tIHBsYWNl IHRvIHBsYWNlLCBzbyB3ZSB3b3VsZCBuZWVkIGFub3RoZXIKKyAgYXZhbGFuY2hlIG9mIGlmZGVm cy4gIFN0aWxsLCB3aGVuIEZJT05SRUFEIGlzIG5vdCBhdmFpbGFibGUsIHRoaXMgaXMgdGhlCisg IG9ubHkgb3RoZXIga25vd24gbWV0aG9kIG9mIGFza2luZyB0aGUgT1MgZm9yIHRoZSAqbnVtYmVy KiBvZiBjaGFyYWN0ZXJzCisgIGF2YWlsYWJsZSBmb3IgcmVhZGluZy4KKyovCisjaWZkZWYgVjcJ CQkJLyogVU5JWCBWNzogbG9vayBpbiBrZXJuZWwgbWVtb3J5ICovCisjaWZkZWYgTUlOSVgKKyAg ICBuID0gMDsJCQkJLyogQnV0IG5vdCBpbiBNSU5JWCAqLworI2Vsc2UKKyNpZmRlZiBNSU5JWDIK KyAgICBuID0gMDsKKyNlbHNlCisgICAgbHNlZWsoa21lbVtUVFldLCAobG9uZykgcWFkZHJbVFRZ XSwgMCk7IC8qIDd0aCBFZGl0aW9uIFVuaXggKi8KKyAgICB4ID0gcmVhZChrbWVtW1RUWV0sICZu LCBzaXplb2YoaW50KSk7CisgICAgaWYgKHggIT0gc2l6ZW9mKGludCkpCisgICAgICBuID0gMDsK KyNlbmRpZiAvKiBNSU5JWDIgKi8KKyNlbmRpZiAvKiBNSU5JWCAqLworI2Vsc2UgLyogTm90IFY3 ICovCisjaWZkZWYgUFJPVlgxCisgICAgeCA9IGlvY3RsKGZkLCBUSU9DUUNOVCwgJnR0YnVmKTsJ LyogREVDIFByby8zeHggVmVuaXggVi4xICovCisgICAgbiA9IHR0YnVmLnNnX2lzcGVlZCAmIDAz Nzc7CQkvKiBDaXJjYSAxOTg0ICovCisgICAgaWYgKHggPCAwKSBuID0gMDsKKyNlbHNlCisjaWZk ZWYgTVlSRUFECisvKgorICBIZXJlIHdlIHNraXAgYWxsIHRoZSB1bmRlcGVuZGFibGUgYW5kIGV4 cGVuc2l2ZSBjYWxscyBiZWxvdyBpZiB3ZQorICBhbHJlYWR5IGhhdmUgc29tZXRoaW5nIGluIG91 ciBpbnRlcm5hbCBidWZmZXIuICBUaGlzIHRlbmRzIHRvIHdvcmsgcXVpdGUKKyAgbmljZWx5LCBz byB0aGUgb25seSByZWFsbHkgYmFkIGNhc2UgcmVtYWluaW5nIGlzIHRoZSBvbmUgaW4gd2hpY2gg bmVpdGhlcgorICBGSU9OUkVBRCBvciBNWVJFQUQgYXJlIGRlZmluZWQsIHdoaWNoIGlzIGluY3Jl YXNpbmdseSByYXJlIHRoZXNlIGRheXMuCisqLworICAgIGlmIChjaGFubmVsICE9IDAgJiYgbXlf Y291bnQgPiAwKSB7CisJZGVidWcoRjEwMSwiaW5fY2hrIGJ1ZiBteV9jb3VudCIsIiIsbXlfY291 bnQpOworCW4gPSBteV9jb3VudDsJCQkvKiBuIHdhcyAwIGJlZm9yZSB3ZSBnb3QgaGVyZSAqLwor CXJldHVybihuKTsKKyAgICB9CisjZW5kaWYgLyogTVlSRUFEICovCisvKgorICByZGNoaygpLCBz ZWxlY3QoKSwgYW5kIHBvbGwoKSB0ZWxsIHVzICppZiogZGF0YSBpcyBhdmFpbGFibGUgdG8gYmUg cmVhZCwgYnV0CisgIG5vdCBob3cgbXVjaCwgc28gdGhlc2Ugc2hvdWxkIGJlIHVzZWQgb25seSBh cyBhIGZpbmFsIHJlc29ydC4gIEVzcGVjaWFsbHkKKyAgc2luY2UgdGhlc2UgY2FsbHMgdGVuZCB0 byBhZGQgYSBsb3Qgb3ZlcmhlYWQuCisqLworI2lmZGVmIFJEQ0hLCQkJCS8qIFRoaXMgbW9zdGx5 IFNDTy1zcGVjaWZpYyAqLworICAgIG4gPSByZGNoayhmZCk7CisgICAgZGVidWcoRjEwMSwiaW5f Y2hrIHJkY2hrIiwiIixuKTsKKyNlbHNlIC8qIE5vIFJEQ0hLICovCisjaWZkZWYgU0VMRUNUCisj aWZkZWYgUGxhbjkKKyAgICAvKiBPbmx5IGFsbG93cyBzZWxlY3Qgb24gdGhlIGNvbnNvbGUgLi4u IGRvbid0IGFzayAqLworICAgIGlmIChjaGFubmVsID09IDApCisjZW5kaWYgLyogUGxhbjkgKi8K KyAgICAgIHsKKwlmZF9zZXQgcmZkczsJCQkvKiBSZWFkIGZpbGUgZGVzY3JpcHRvcnMgKi8KKyNp ZmRlZiBCRUxMVjEwCisJRkRfWkVSTyhyZmRzKTsJCQkvKiBJbml0aWFsaXplIHRoZW0gKi8KKwlG RF9TRVQoZmQscmZkcyk7CQkvKiBXZSB3YW50IHRvIGxvb2sgYXQgdGhpcyBmZCAqLworI2Vsc2UK KwlGRF9aRVJPKCZyZmRzKTsJCQkvKiBJbml0aWFsaXplIHRoZW0gKi8KKwlGRF9TRVQoZmQsJnJm ZHMpOwkJLyogV2Ugd2FudCB0byBsb29rIGF0IHRoaXMgZmQgKi8KKwl0di50dl9zZWMgPSB0di50 dl91c2VjID0gMEw7CS8qIEEgMC12YWx1ZWQgdGltZXZhbCBzdHJ1Y3R1cmUgKi8KKyNlbmRpZiAv KiBCRUxMVjEwICovCisjaWZkZWYgUGxhbjkKKwluID0gc2VsZWN0KCBGRF9TRVRTSVpFLCAmcmZk cywgKGZkX3NldCAqKTAsIChmZF9zZXQgKikwLCAmdHYgKTsKKwlkZWJ1ZyhGMTAxLCJpbl9jaGsg UGxhbiA5IHNlbGVjdCIsIiIsbik7CisjZWxzZQorI2lmZGVmIEJFTExWMTAKKwluID0gc2VsZWN0 KCAxMjgsIHJmZHMsIChmZF9zZXQgKikwLCAoZmRfc2V0ICopMCwgMCApOworCWRlYnVnKEYxMDEs ImluX2NoayBCRUxMVjEwIHNlbGVjdCIsIiIsbik7CisjZWxzZQorI2lmZGVmIEJTRDQ0CisJbiA9 IHNlbGVjdCggRkRfU0VUU0laRSwgJnJmZHMsIChmZF9zZXQgKikwLCAoZmRfc2V0ICopMCwgJnR2 ICk7CisJZGVidWcoRjEwMSwiaW5fY2hrIEJTRDQ0IHNlbGVjdCIsIiIsbik7CisjZWxzZQorI2lm ZGVmIEJTRDQzCisJbiA9IHNlbGVjdCggRkRfU0VUU0laRSwgJnJmZHMsIChmZF9zZXQgKikwLCAo ZmRfc2V0ICopMCwgJnR2ICk7CisJZGVidWcoRjEwMSwiaW5fY2hrIEJTRDQzIHNlbGVjdCIsIiIs bik7CisjZWxzZQorI2lmZGVmIFNPTEFSSVMKKwluID0gc2VsZWN0KCBGRF9TRVRTSVpFLCAmcmZk cywgKGZkX3NldCAqKTAsIChmZF9zZXQgKikwLCAmdHYgKTsKKwlkZWJ1ZyhGMTAxLCJpbl9jaGsg U09MQVJJUyBzZWxlY3QiLCIiLG4pOworI2Vsc2UKKyNpZmRlZiBRTlg2CisJbiA9IHNlbGVjdCgg RkRfU0VUU0laRSwgJnJmZHMsIChmZF9zZXQgKikwLCAoZmRfc2V0ICopMCwgJnR2ICk7CisJZGVi dWcoRjEwMSwiaW5fY2hrIFFOWDYgc2VsZWN0IiwiIixuKTsKKyNlbHNlCisjaWZkZWYgUU5YCisJ biA9IHNlbGVjdCggRkRfU0VUU0laRSwgJnJmZHMsIChmZF9zZXQgKikwLCAoZmRfc2V0ICopMCwg JnR2ICk7CisJZGVidWcoRjEwMSwiaW5fY2hrIFFOWCBzZWxlY3QiLCIiLG4pOworI2Vsc2UKKyNp ZmRlZiBDT0hFUkVOVAorCW4gPSBzZWxlY3QoIEZEX1NFVFNJWkUsICZyZmRzLCAoZmRfc2V0ICop MCwgKGZkX3NldCAqKTAsICZ0diApOworCWRlYnVnKEYxMDEsImluX2NoayBDT0hFUkVOVCBzZWxl Y3QiLCIiLG4pOworI2Vsc2UKKyNpZmRlZiBTVlI0CisJbiA9IHNlbGVjdCggRkRfU0VUU0laRSwg JnJmZHMsIChmZF9zZXQgKikwLCAoZmRfc2V0ICopMCwgJnR2ICk7CisJZGVidWcoRjEwMSwiaW5f Y2hrIFNWUjQgc2VsZWN0IiwiIixuKTsKKyNlbHNlCisjaWZkZWYgX19saW51eF9fCisJbiA9IHNl bGVjdCggRkRfU0VUU0laRSwgJnJmZHMsIChmZF9zZXQgKikwLCAoZmRfc2V0ICopMCwgJnR2ICk7 CisJZGVidWcoRjEwMSwiaW5fY2hrIExJTlVYIHNlbGVjdCIsIiIsbik7CisjaWZkZWYgT1NGCisJ biA9IHNlbGVjdCggRkRfU0VUU0laRSwgJnJmZHMsIChmZF9zZXQgKikwLCAoZmRfc2V0ICopMCwg JnR2ICk7CisJZGVidWcoRjEwMSwiaW5fY2hrIE9TRiBzZWxlY3QiLCIiLG4pOworI2Vsc2UKKwlu ID0gc2VsZWN0KCBGRF9TRVRTSVpFLCAmcmZkcywgKGludCAqKTAsIChpbnQgKikwLCAmdHYgKTsK KwlkZWJ1ZyhGMTAxLCJpbl9jaGsgY2F0Y2hhbGwgc2VsZWN0IiwiIixuKTsKKyNlbmRpZiAvKiBP U0YgKi8KKyNlbmRpZiAvKiBfX2xpbnV4X18gKi8KKyNlbmRpZiAvKiBTVlI0ICovCisjZW5kaWYg LyogQ09IRVJFTlQgKi8KKyNlbmRpZiAvKiBRTlggKi8KKyNlbmRpZiAvKiBRTlg2ICovCisjZW5k aWYgLyogU09MQVJJUyAqLworI2VuZGlmIC8qIEJTRDQzICovCisjZW5kaWYgLyogQlNENDQgKi8K KyNlbmRpZiAvKiBCRUxMVjEwICovCisjZW5kaWYgLyogUGxhbjkgKi8KKyAgICB9CisjZWxzZSAg LyogTm90IFNFTEVDVCAqLworI2lmZGVmIENLX1BPTEwKKyAgICB7CisgICAgICBzdHJ1Y3QgcG9s bGZkIHBmZDsKKworICAgICAgcGZkLmZkID0gZmQ7CisgICAgICBwZmQuZXZlbnRzID0gUE9MTElO OworICAgICAgcGZkLnJldmVudHMgPSAwOworICAgICAgbiA9IHBvbGwoJnBmZCwgMSwgMCk7Cisg ICAgICBkZWJ1ZyhGMTAxLCJpbl9jaGsgcG9sbCIsIiIsbik7CisgICAgICBpZiAoKG4gPiAwKSAm JiAocGZkLnJldmVudHMgJiBQT0xMSU4pKQorCW4gPSAxOworICAgIH0KKyNlbmRpZiAvKiBDS19Q T0xMICovCisjZW5kaWYgLyogU0VMRUNUICovCisjZW5kaWYgLyogUkRDSEsgKi8KKyNlbmRpZiAv KiBQUk9WWDEgKi8KKyNlbmRpZiAvKiBWNyAqLworI2VuZGlmIC8qIEZJT05SRUFEICovCisKKy8q IEZyb20gaGVyZSBkb3duLCB0cmVhdCBjb25zb2xlIGFuZCBjb21tdW5pY2F0aW9uIGRldmljZSBk aWZmZXJlbnRseS4uLiAqLworCisgICAgaWYgKGNoYW5uZWwgPT0gMCkgewkJCS8qIENvbnNvbGUg Ki8KKworI2lmZGVmIFNWT1JQT1NJWAorI2lmbmRlZiBGSU9OUkVBRAorI2lmbmRlZiBTRUxFQ1QK KyNpZm5kZWYgQ0tfUE9MTAorI2lmbmRlZiBSRENISworLyoKKyAgVGhpcyBpcyB0aGUgaGlkZW91 cyBoYWNrIHVzZWQgaW4gU3lzdGVtIFYgYW5kIFBPU0lYIHN5c3RlbXMgdGhhdCBkb24ndAorICBz dXBwb3J0IEZJT05SRUFELCByZGNoaygpLCBzZWxlY3QoKSwgcG9sbCgpLCBldGMsIGluIHdoaWNo IHRoZSB1c2VyJ3MKKyAgQ09OTkVDVC1tb2RlIGVzY2FwZSBjaGFyYWN0ZXIgaXMgYXR0YWNoZWQg dG8gU0lHUVVJVC4gIFVzZWQsIG9idmlvdXNseSwKKyAgb25seSBvbiB0aGUgY29uc29sZS4KKyov CisJaWYgKGNvbmVzYykgewkJCS8qIEVzY2FwZSBjaGFyYWN0ZXIgdHlwZWQgPT0gU0lHUVVJVCAq LworCSAgICBkZWJ1ZyhGMTAwLCJpbl9jaGsgY29uZXNjIiwiIixjb25lc2MpOworCSAgICBjb25l c2MgPSAwOworCSAgICBzaWduYWwoU0lHUVVJVCxlc2N0cnApOwkvKiBSZXN0b3JlIHNpZ25hbCAq LworCSAgICBuICs9IDE7CisJfQorI2VuZGlmIC8qIFJEQ0hLICovCisjZW5kaWYgLyogQ0tfUE9M TCAqLworI2VuZGlmIC8qIFNFTEVDVCAqLworI2VuZGlmIC8qIEZJT05SRUFEICovCisjZW5kaWYg LyogU1ZPUlBPU0lYICovCisKKwlyZXR1cm4obik7CQkJLyogRG9uZSB3aXRoIGNvbnNvbGUgKi8K KyAgICB9CisKKyAgICBpZiAoY2hhbm5lbCAhPSAwKSB7CQkJLyogQ29tbXVuaWNhdGlvbnMgY29u bmVjdGlvbiAqLworCisjaWZkZWYgTVlSRUFECisjaWZuZGVmIEZJT05SRUFECisvKgorICBzZWxl Y3QoKSBvciByZGNoaygpLCBldGMsIGhhcyB0b2xkIHVzIHRoYXQgc29tZXRoaW5nIGlzIHdhaXRp bmcsIGJ1dCB3ZQorICBkb24ndCBrbm93IGhvdyBtdWNoLiAgU28gd2UgZG8gYSByZWFkIHRvIGdl dCBpdCBhbmQgdGhlbiB3ZSBrbm93LiAgTm90ZToKKyAgVGhpcyByZWFkIGlzIE5PVCBub25ibG9j a2luZyBpZiBub3RoaW5nIGlzIHRoZXJlIChiZWNhdXNlIG9mIFZNSU49MSksIGJ1dAorICBpdCBz aG91bGQgYmUgc2FmZSBpbiB0aGlzIGNhc2Ugc2luY2UgdGhlIE9TIHRlbGxzIHVzIGF0IGxlYXN0 IG9uZSBieXRlIGlzCisgIHdhaXRpbmcgdG8gYmUgcmVhZCwgYW5kIE1ZUkVBRCByZWFkcyByZXR1 cm4gYXMgbXVjaCBhcyBpcyB0aGVyZSB3aXRob3V0CisgIHdhaXRpbmcgZm9yIGFueSBtb3JlLiAg Q29udHJvbGxlZCB0ZXN0cyBvbiBTb2xhcmlzIGFuZCBVbml4d2FyZSAod2l0aAorICBGSU9OUkVB RCBkZWxpYmVyYXRlbHkgdW5kZWZpbmVkKSBzaG93IHRoaXMgdG8gYmUgdHJ1ZS4KKyovCisJZGVi dWcoRjEwMSwiaW5fY2hrIHJlYWQgbXlfY291bnQiLCIiLG15X2NvdW50KTsKKwlkZWJ1ZyhGMTAx LCJpbl9jaGsgcmVhZCBuIiwiIixuKTsKKwlpZiAobiA+IDAgJiYgbXlfY291bnQgPT0gMCkgewor CSAgICAvKiBUaGlzIGFsc28gY2F0Y2hlcyBkaXNjb25uZWN0cyBldGMgKi8KKwkgICAgLyogRG8g d2hhdCBteWdldGJ1ZiBkb2VzIGV4Y2VwdCBkb24ndCBncmFiIGEgY2hhcmFjdGVyICovCisJICAg IG15X2NvdW50ID0gbXlmaWxsYnVmKCk7CisJICAgIG15X2l0ZW0gPSAtMTsJCS8qIF5eXiAqLwor CSAgICBkZWJ1ZyhGMTAxLCJpbl9jaGsgbXlmaWxsYnVmIG15X2NvdW50IiwiIixteV9jb3VudCk7 CisJICAgIGlmIChteV9jb3VudCA8IDApCisJICAgICAgcmV0dXJuKC0xKTsKKwkgICAgZWxzZQor CSAgICAgIG4gPSAwOwkJCS8qIE5COiBuIGlzIHJlcGxhY2VkIGJ5IG15X2NvdW50ICovCisJfQor I2VuZGlmIC8qIEZJT05SRUFEICovCisvKgorICBIZXJlIHdlIGFkZCB3aGF0ZXZlciB3ZSB0aGlu ayBpcyB1bnJlYWQgdG8gd2hhdCBpcyBzdGlsbCBpbiBvdXIKKyAgb3VyIGludGVybmFsIGJ1ZmZl ci4gIFRodXMgdGhlIGltcG9ydGFuY2Ugb2Ygc2V0dGluZyBuIHRvIDAganVzdCBhYm92ZS4KKyov CisJZGVidWcoRjEwMSwiaW5fY2hrIG15X2NvdW50IiwiIixteV9jb3VudCk7CisJZGVidWcoRjEw MSwiaW5fY2hrIG4iLCIiLG4pOworCWlmIChteV9jb3VudCA+IDApCisJICBuICs9IG15X2NvdW50 OworI2VuZGlmIC8qIE1ZUkVBRCAqLworICAgIH0KKyAgICBkZWJ1ZyhGMTAxLCJpbl9jaGsgcmVz dWx0IiwiIixuKTsKKworICAgIC8qIEVycm9ycyBoZXJlIGRvbid0IHByb3ZlIHRoZSBjb25uZWN0 aW9uIGhhcyBkcm9wcGVkIHNvIGp1c3Qgc2F5IDAgKi8KKworICAgIHJldHVybihuIDwgMCA/IDAg OiBuKTsKK30KKworCisvKiAgVCBUIEMgSCBLICAtLSAgVGVsbCBob3cgbWFueSBjaGFyYWN0ZXJz IGFyZSB3YWl0aW5nIGluIHR0eSBpbnB1dCBidWZmZXIgICovCisKK2ludAordHRjaGsoKSB7Cisg ICAgaW50IGZkOworI2lmZGVmIE5FVENNRAorICAgIGlmICh0dHBpcGUpCisgICAgICBmZCA9IGZk aW47CisgICAgZWxzZQorI2VuZGlmIC8qIE5FVENNRCAqLworICAgICAgZmQgPSB0dHlmZDsKKyAg ICByZXR1cm4oaW5fY2hrKDEsZmQpKTsKK30KKworLyogIFQgVCBYIEkgTiAgLS0gIEdldCBuIGNo YXJhY3RlcnMgZnJvbSB0dHkgaW5wdXQgYnVmZmVyICAqLworCisvKiAgUmV0dXJucyBudW1iZXIg b2YgY2hhcmFjdGVycyBhY3R1YWxseSBnb3R0ZW4sIG9yIC0xIG9uIGZhaWx1cmUgICovCisKKy8q ICBJbnRlbmRlZCBmb3IgdXNlIG9ubHkgd2hlbiBpdCBpcyBrbm93biB0aGF0IG4gY2hhcmFjdGVy cyBhcmUgYWN0dWFsbHkgKi8KKy8qICBBdmFpbGFibGUgaW4gdGhlIGlucHV0IGJ1ZmZlci4gICov CisKK2ludAordHR4aW4obixidWYpIGludCBuOyBDSEFSICpidWY7IHsKKyAgICByZWdpc3RlciBp bnQgeCA9IDAsIGMgPSAtMjsKKyNpZmRlZiBUVExFQlVGCisgICAgcmVnaXN0ZXIgaW50IGkgPSAw OworI2VuZGlmIC8qIFRUTEVCVUYgKi8KKyAgICBpbnQgZmQ7CisKKyAgICBpZiAobiA8IDEpCQkJ CS8qIE5vdGhpbmcgdG8gZG8gKi8KKyAgICAgIHJldHVybigwKTsKKworI2lmZGVmIFRUTEVCVUYK KyAgICBpZiAodHRwdXNoID49IDApIHsKKyAgICAgICAgYnVmWzBdID0gdHRwdXNoOwkJLyogUHV0 IHB1c2hlZCBjaGFyIGluIGJ1ZmZlciovCisgICAgICAgIHR0cHVzaCA9IC0xOwkJCS8qIENsZWFy IHRoZSBwdXNoIGJ1ZmZlciAqLworICAgICAgICBpZiAodHRjaGsoKSA+IDApCisJICByZXR1cm4o dHR4aW4obi0xLCAmYnVmWzFdKSArIDEpOworICAgICAgICBlbHNlCisJICByZXR1cm4oMSk7Cisg ICAgfQorICAgIGlmIChsZV9kYXRhKSB7CisgICAgICAgIHdoaWxlIChsZV9pbmJ1ZigpID4gMCkg eworCSAgICBpZiAobGVfZ2V0Y2hhcigmYnVmW2ldKSkgeworICAgICAgICAgICAgICAgIGkrKzsK KyAgICAgICAgICAgICAgICBuLS07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg aWYgKHR0Y2hrKCkgPiAwKQorCSAgcmV0dXJuKHR0eGluKG4sJmJ1ZltpXSkraSk7CisgICAgICAg IGVsc2UKKwkgIHJldHVybihpKTsKKyAgICB9CisjZW5kaWYgLyogVFRMRUJVRiAqLworCisjaWZk ZWYgTkVUQ01ECisgICAgaWYgKHR0cGlwZSkKKyAgICAgIGZkID0gZmRpbjsKKyAgICBlbHNlCisj ZW5kaWYgLyogTkVUQ01EICovCisgICAgICBmZCA9IHR0eWZkOworCisjaWZkZWYgU1VOWDI1Cisg ICAgaWYgKG5ldGNvbm4gJiYgKHR0bmV0ID09IE5FVF9TWDI1KSkJLyogWC4yNSBjb25uZWN0aW9u ICovCisgICAgICByZXR1cm4oeDI1eGluKG4sYnVmKSk7CisjZW5kaWYgLyogU1VOWDI1ICovCisK KyNpZmRlZiBJQk1YMjUKKyAgICAvKiByaWVobTogcG9zc2libHkgbm90IG5lZWRlZC4gVGVzdCB3 b3JrZWQgd2l0aCBub3JtYWwgcmVhZHMgYW5kIHdyaXRlcyAqLworICAgIGlmIChuZXRjb25uICYm ICh0dG5ldCA9PSBORVRfSVgyNSkpCXsgLyogWC4yNSBjb25uZWN0aW9uICovCisJeCA9IHgyNXhp bihuLGJ1Zik7CisJaWYgKHggPiAwKSBidWZbeF0gPSAnXDAnOworCXJldHVybih4KTsKKyAgICB9 CisjZW5kaWYgLyogSUJNWDI1ICovCisKKyNpZmRlZiBNWVJFQUQKKyAgICBkZWJ1ZyhGMTAxLCJ0 dHhpbiBNWVJFQUQiLCIiLG4pOworICAgIHdoaWxlICh4IDwgbikgeworCWMgPSBteXJlYWQoKTsK KwlpZiAoYyA8IDApIHsKKwkgICAgZGVidWcoRjEwMSwidHR4aW4gbXlyZWFkIHJldHVybnMiLCIi LGMpOworCSAgICBpZiAoYyA9PSAtMykgeCA9IC0xOworCSAgICBicmVhazsKKyAgICAgICAgfQor CWJ1Zlt4KytdID0gYyAmIHR0cG1zazsKKyNpZmRlZiBSTE9HQ09ERQorI2lmZGVmIENLX0tFUkJF Uk9TCisgICAgICAgIC8qIEl0IGlzIGltcG9zc2libGUgdG8ga25vdyBob3cgbWFueSBjaGFyYWN0 ZXJzIGFyZSB3YWl0aW5nICovCisgICAgICAgIC8qIHRvIGJlIHJlYWQgd2hlbiB5b3UgYXJlIHVz aW5nIEVuY3J5cHRlZCBSbG9naW4gb3IgU1NMICAgICovCisgICAgICAgIC8qIGFzIHRoZSB0cmFu c3BvcnQgc2luY2UgdGhlIG51bWJlciBvZiByZWFsIGRhdGEgYnl0ZXMgICAgICovCisgICAgICAg IC8qIGNhbiBiZSBncmVhdGVyIG9yIGxlc3MgdGhhbiB0aGUgbnVtYmVyIG9mIGJ5dGVzIG9uIHRo ZSAgICovCisgICAgICAgIC8qIHdpcmUgd2hpY2ggaXMgd2hhdCB0dGNoaygpIHJldHVybnMuICAg ICAgICAgICAgICAgICAgICAgICovCisgICAgICAgIGlmIChuZXRjb25uICYmICh0dG5wcm90byA9 PSBOUF9FSzRMT0dJTiB8fCB0dG5wcm90byA9PSBOUF9FSzVMT0dJTikpCisJICBpZiAodHRjaGso KSA8PSAwKQorCSAgICBicmVhazsKKyNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLworI2VuZGlmIC8q IFJMT0dDT0RFICovCisjaWZkZWYgQ0tfU1NMCisgICAgICAgIGlmIChzc2xfYWN0aXZlX2ZsYWcg fHwgdGxzX2FjdGl2ZV9mbGFnKQorCSAgaWYgKHR0Y2hrKCkgPD0gMCkKKwkgICAgYnJlYWs7Cisj ZW5kaWYgLyogQ0tfU1NMICovCisgICAgfQorI2Vsc2UKKyAgICBkZWJ1ZyhGMTAxLCJ0dHhpbiBS RUFEIiwiIixuKTsKKyAgICB4ID0gcmVhZChmZCxidWYsbik7CisgICAgZm9yIChjID0gMDsgYyA8 IG47IGMrKykJCS8qIFN0cmlwIGFueSBwYXJpdHkgKi8KKyAgICAgIGJ1ZltjXSAmPSB0dHBtc2s7 CisjZW5kaWYgLyogTVlSRUFEICovCisKKyAgICBkZWJ1ZyhGMTAxLCJ0dHhpbiB4IiwiIix4KTsJ CS8qIERvbmUgKi8KKyAgICBpZiAoeCA+IDApIGJ1Zlt4XSA9ICdcMCc7CisgICAgaWYgKHggPCAw KSB4ID0gLTE7CisgICAgcmV0dXJuKHgpOworfQorCisvKiAgVCBUIE8gTCAgLS0gIFdyaXRlIHN0 cmluZyBzLCBsZW5ndGggbiwgdG8gY29tbXVuaWNhdGlvbiBkZXZpY2UuICAqLworLyoKKyAgUmV0 dXJuczoKKyAgID49IDAgb24gc3VjY2VzcywgbnVtYmVyIG9mIGNoYXJhY3RlcnMgYWN0dWFsbHkg d3JpdHRlbi4KKyAgIC0xIG9uIGZhaWx1cmUuCisqLworI2lmZGVmIENLX0VOQ1JZUFRJT04KK0NI QVIgKiB4cGFja2V0ID0gTlVMTDsKK2ludCBueHBhY2tldCA9IDA7CisjZW5kaWYgLyogQ0tfRU5D UllQVElPTiAqLworCisjZGVmaW5lIFRUT0xNQVhUIDUKK2ludAordHRvbChzLG4pIGludCBuOyBD SEFSICpzOyB7CisgICAgaW50IHgsIGxlbiwgdHJpZXMsIGZkOworI2lmZGVmIENLWFhDSEFSCisg ICAgZXh0ZXJuIGludCBkYmxmbGFnOwkJCS8qIEZvciBTRVQgU0VORCBET1VCTEUtQ0hBUkFDVEVS ICovCisgICAgZXh0ZXJuIHNob3J0IGRibHRbXTsKKyAgICBDSEFSICpwID0gTlVMTCwgKnAyLCAq czIsIGM7CisgICAgaW50IG4yID0gMDsKKyNlbmRpZiAvKiBDS1hYQ0hBUiAqLworCisgICAgaWYg KHR0eWZkIDwgMCkJCQkvKiBOb3Qgb3Blbj8gKi8KKyAgICAgIHJldHVybigtMyk7CisjaWZkZWYg REVCVUcKKyAgICBpZiAoZGVibG9nKSB7CisJLyogZGVidWcoRjEwMSwidHRvbCB0dHlmZCIsIiIs dHR5ZmQpOyAqLworCWNraGV4ZHVtcCgidHRvbCBzIixzLG4pOworICAgIH0KKyNlbmRpZiAvKiBE RUJVRyAqLworCisjaWZkZWYgTkVUQ01ECisgICAgaWYgKHR0cGlwZSkKKyAgICAgIGZkID0gZmRv dXQ7CisgICAgZWxzZQorI2VuZGlmIC8qIE5FVENNRCAqLworICAgICAgZmQgPSB0dHlmZDsKKwor I2lmZGVmIENLWFhDSEFSCisvKiAgRG91YmxlIGFueSBjaGFyYWN0ZXJzIHRoYXQgbXVzdCBiZSBk b3VibGVkLiAgKi8KKyAgICBkZWJ1ZyhGMTAxLCJ0dG9sIGRibGZsYWciLCIiLGRibGZsYWcpOwor ICAgIGlmIChkYmxmbGFnKSB7CisJcCA9IChDSEFSICopIG1hbGxvYyhuICsgbiArIDEpOworCWlm IChwKSB7CisJICAgIHMyID0gczsKKwkgICAgcDIgPSBwOworCSAgICBuMiA9IDA7CisJICAgIHdo aWxlICgqczIpIHsKKwkJYyA9ICpzMisrOworCQkqcDIrKyA9IGM7CisJCW4yKys7CisJCWlmIChk Ymx0Wyh1bnNpZ25lZCkgY10gJiAyKSB7CisJCSAgICAqcDIrKyA9IGM7CisJCSAgICBuMisrOwor CQl9CisJICAgIH0KKwkgICAgcyA9IHA7CisJICAgIG4gPSBuMjsKKwkgICAgc1tuXSA9ICdcMCc7 CisJfQorI2lmZGVmIERFQlVHCisgICAgICAgIGNraGV4ZHVtcCgidHRvbCBkb3VibGVkIHMiLHMs bik7CisjZW5kaWYgLyogREVCVUcgKi8KKyAgICB9CisjZW5kaWYgLyogQ0tYWENIQVIgKi8KKwor ICAgIHRyaWVzID0gVFRPTE1BWFQ7CQkJLyogQWxsb3cgdXAgdG8gdGhpcyBtYW55IHRyaWVzICov CisgICAgbGVuID0gbjsJCQkJLyogUmVtZW1iZXIgb3JpZ2luYWwgbGVuZ3RoICovCisKKyNpZmRl ZiBDS19FTkNSWVBUSU9OCisvKgorICBUaGlzIGlzIHRvIGF2b2lkIGVuY3J5cHRpbmcgYSBwYWNr ZXQgdGhhdCBpcyBhbHJlYWR5IGVuY3J5cHRlZCwgZS5nLgorICB3aGVuIHdlIHJlc2VuZCBhIHBh Y2tldCBkaXJlY3RseSBvdXQgb2YgdGhlIHBhY2tldCBidWZmZXIsIGFuZCBhbHNvIHRvCisgIGF2 b2lkIGVuY3J5cHRpbmcgYSBjb25zdGFudCAobGl0ZXJhbCkgc3RyaW5nLCB3aGljaCBjYW4gY2F1 c2UgYSBtZW1vcnkKKyAgZmF1bHQuCisqLworICAgIGlmIChURUxPUFRfTUUoVEVMT1BUX0VOQ1JZ UFRJT04pKSB7CisJaW50IHg7CisJaWYgKG54cGFja2V0IDwgbikgeworCSAgICBpZiAoeHBhY2tl dCkgeworCQlmcmVlKHhwYWNrZXQpOworCQl4cGFja2V0ID0gTlVMTDsKKwkJbnhwYWNrZXQgPSAw OworCSAgICB9CisJICAgIHggPSBuID4gMTAyNDAgPyBuIDogMTAyNDA7CisJICAgIHhwYWNrZXQg PSAoQ0hBUiAqKW1hbGxvYyh4KTsKKwkgICAgaWYgKCF4cGFja2V0KSB7CisJCWZwcmludGYoc3Rk ZXJyLCJ0dG9sIG1hbGxvYyBmYWlsdXJlXG4iKTsKKwkJcmV0dXJuKC0xKTsKKwkgICAgfSBlbHNl CisJICAgICAgbnhwYWNrZXQgPSB4OworCX0KKwltZW1jcHkoKGNoYXIgKil4cGFja2V0LChjaGFy ICopcyxuKTsKKwlzID0geHBhY2tldDsKKwlja190bl9lbmNyeXB0KChjaGFyICopcyxuKTsKKyAg ICB9CisjZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLworCisgICAgd2hpbGUgKG4gPiAwICYmCisJ ICAgKHRyaWVzLS0gPiAwCisjaWZkZWYgQ0tfRU5DUllQVElPTgorCSAgICAvKiBrZWVwIHRyeWlu ZyBpZiB3ZSBhcmUgZW5jcnlwdGluZyAqLworCSAgICB8fCBURUxPUFRfTUUoVEVMT1BUX0VOQ1JZ UFRJT04pCisjZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLworICAgICAgICAgICAgKSkgewkJCS8q IEJlIHBlcnNpc3RlbnQgKi8KKwlkZWJ1ZyhGMTAxLCJ0dG9sIHRyeSIsIiIsVFRPTE1BWFQgLSB0 cmllcyk7CisjaWZkZWYgQkVPU09SQkVCT1gKKyAgICAgICAgaWYgKG5ldGNvbm4gJiYgIXR0cGlw ZSAmJiAhdHRwdHkpCisJICB4ID0gbmV0dG9sKChjaGFyICopcyxuKTsJLyogV3JpdGUgc3RyaW5n IHRvIGRldmljZSAqLworICAgICAgICBlbHNlCisjZW5kaWYgLyogQkVPU09SQkVCT1ggKi8KKyNp ZmRlZiBJQk1YMjUKKwkgIGlmICh0dG5ldCA9PSBORVRfSVgyNSkKKwkgICAgLyoKKwkgICAgICog dGhpcyBpcyBhIG1vcmUgY29udHJvbGxlZCB3YXkgb2Ygd3JpdGluZyB0byBYMjUKKwkgICAgICog U1RSRUFNUywgaG93ZXZlciB3cml0ZSBzaG91bGQgYWxzbyB3b3JrIQorCSAgICAgKi8KKwkgICAg eCA9IHgyNXdyaXRlKHR0eWZkLCBzLCBuKTsKKwkgIGVsc2UKKyNlbmRpZiAvKiBJQk1YMjUgKi8K KyNpZmRlZiBDS19TU0wKKwkgICAgaWYgKHNzbF9hY3RpdmVfZmxhZyB8fCB0bHNfYWN0aXZlX2Zs YWcpIHsKKwkJaW50IGVycm9yOworCQkvKiBXcml0ZSB1c2luZyBTU0wgKi8KKyAgICAgICAgICAg ICAgICBzc2xfcmV0cnk6CisJCWlmIChzc2xfYWN0aXZlX2ZsYWcpCisgICAgICAgICAgICAgICAg ICB4ID0gU1NMX3dyaXRlKHNzbF9jb24sIHMsIG4pOworCQllbHNlCisgICAgICAgICAgICAgICAg ICB4ID0gU1NMX3dyaXRlKHRsc19jb24sIHMsIG4pOworCQlzd2l0Y2ggKFNTTF9nZXRfZXJyb3Io c3NsX2FjdGl2ZV9mbGFnP3NzbF9jb246dGxzX2Nvbix4KSkgeworICAgICAgICAgICAgICAgIGNh c2UgU1NMX0VSUk9SX05PTkU6CisgICAgICAgICAgICAgICAgICAgIGlmICh4ID09IG4pCisJCSAg ICAgIHJldHVybihsZW4pOworICAgICAgICAgICAgICAgICAgICBzICs9IHg7CisgICAgICAgICAg ICAgICAgICAgIG4gLT0geDsKKyAgICAgICAgICAgICAgICAgICAgZ290byBzc2xfcmV0cnk7CisJ CSAgY2FzZSBTU0xfRVJST1JfV0FOVF9XUklURToKKwkJICBjYXNlIFNTTF9FUlJPUl9XQU5UX1JF QUQ6CisJCSAgICB4ID0gMDsKKwkJICAgIGJyZWFrOworCQkgIGNhc2UgU1NMX0VSUk9SX1NZU0NB TEw6CisgICAgICAgICAgICAgICAgICAgIGlmICh4ICE9IDApCisJCSAgICAgIHJldHVybigtMSk7 CisJCSAgY2FzZSBTU0xfRVJST1JfV0FOVF9YNTA5X0xPT0tVUDoKKwkJICBjYXNlIFNTTF9FUlJP Ul9TU0w6CisJCSAgY2FzZSBTU0xfRVJST1JfWkVST19SRVRVUk46CisJCSAgZGVmYXVsdDoKKwkJ ICAgIHR0Y2xvcygwKTsKKwkJICAgIHJldHVybigtMyk7CisJCX0KKwkgICAgfSBlbHNlCisjZW5k aWYgLyogQ0tfU1NMICovCisjaWZkZWYgQ0tfS0VSQkVST1MKKyNpZmRlZiBLUkI0CisjaWZkZWYg UkxPR0NPREUKKwkgICAgaWYgKHR0bnByb3RvID09IE5QX0VLNExPR0lOKSB7CisJCXJldHVybihr cmI0X2Rlc193cml0ZSh0dHlmZCxzLG4pKTsKKwkgICAgfSBlbHNlCisjZW5kaWYgLyogUkxPR0NP REUgKi8KKyNlbmRpZiAvKiBLUkI0ICovCisjaWZkZWYgS1JCNQorI2lmZGVmIFJMT0dDT0RFCisg ICAgICAgICAgICBpZiAodHRucHJvdG8gPT0gTlBfRUs1TE9HSU4pIHsKKyAgICAgICAgICAgICAg ICByZXR1cm4oa3JiNV9kZXNfd3JpdGUodHR5ZmQsKGNoYXIgKilzLG4sMCkpOworICAgICAgICAg ICAgfSBlbHNlCisjZW5kaWYgLyogUkxPR0NPREUgKi8KKyNpZmRlZiBLUkI1X1UyVQorICAgICAg ICAgICAgaWYgKHR0bnByb3RvID09IE5QX0s1VTJVKSB7CisgICAgICAgICAgICAgICAgcmV0dXJu KGtyYjVfdTJ1X3dyaXRlKHR0eWZkLChjaGFyICopcyxuKSk7CisgICAgICAgICAgICB9IGVsc2UK KyNlbmRpZiAvKiBLUkI1X1UyVSAqLworI2VuZGlmIC8qIEtSQjUgKi8KKyNlbmRpZiAvKiBDS19L RVJCRVJPUyAqLworCSAgICAgIHggPSB3cml0ZShmZCxzLG4pOwkvKiBXcml0ZSBzdHJpbmcgdG8g ZGV2aWNlICovCisKKwlpZiAoeCA9PSBuKSB7CQkJLyogV29ya2VkPyAqLworCSAgICBkZWJ1ZyhG MTAxLCJ0dG9sIG9rIiwiIix4KTsJLyogT0sgKi8KKyNpZmRlZiBDS1hYQ0hBUgorCSAgICBpZiAo cCkgZnJlZShwKTsKKyNlbmRpZiAvKiBDS1hYQ0hBUiAqLworCSAgICByZXR1cm4obGVuKTsJCS8q IERvbmUgKi8KKwl9IGVsc2UgaWYgKHggPCAwKSB7CQkvKiBObywgZ290IGVycm9yPyAqLworCSAg ICBkZWJ1ZyhGMTAxLCJ0dG9sIHdyaXRlIGVycm9yIiwiIixlcnJubyk7CisjaWZkZWYgRVdPVUxE QkxPQ0sKKwkgICAgaWYgKGVycm5vID09IEVXT1VMREJMT0NLKSB7CisJCW1zbGVlcCgxMCk7CisJ CWNvbnRpbnVlOworCSAgICB9IGVsc2UKKyNlbmRpZiAvKiBFV09VTERCTE9DSyAqLworI2lmZGVm IFRDUFNPQ0tFVAorCSAgICBpZiAobmV0Y29ubiAmJiB0dG5ldCA9PSBORVRfVENQQikgeworCQlk ZWJ1ZyhGMTAxLCJ0dG9sIFRDUCBlcnJvciIsIiIsZXJybm8pOworCQl0dGNsb3MoMCk7CQkvKiBD bG9zZSB0aGUgY29ubmVjdGlvbi4gKi8KKwkJeCA9IC0zOworCSAgICB9CisjZW5kaWYgLyogVENQ U09DS0VUICovCisjaWZkZWYgQ0tYWENIQVIKKwkgICAgaWYgKHApIGZyZWUocCk7CisjZW5kaWYg LyogQ0tYWENIQVIgKi8KKwkgICAgcmV0dXJuKHgpOworCX0gZWxzZSB7CQkJLyogTm8gZXJyb3Is IHNvIHBhcnRpYWwgc3VjY2VzcyAqLworCSAgICBkZWJ1ZyhGMTAxLCJ0dG9sIHBhcnRpYWwiLCIi LHgpOyAvKiBUaGlzIG5ldmVyIGhhcHBlbnMgKi8KKwkgICAgcyArPSB4OwkJCS8qIFBvaW50IHRv IHBhcnQgbm90IHdyaXR0ZW4geWV0ICovCisJICAgIG4gLT0geDsJCQkvKiBBZGp1c3QgbGVuZ3Ro ICovCisJICAgIGlmICh4ID4gMCkgbXNsZWVwKDEwKTsJLyogV2FpdCAxMCBtc2VjICovCisJfQkJ CQkvKiBHbyBiYWNrIGFuZCB0cnkgYWdhaW4gKi8KKyAgICB9CisjaWZkZWYgQ0tYWENIQVIKKyAg ICBpZiAocCkgZnJlZShwKTsKKyNlbmRpZiAvKiBDS1hYQ0hBUiAqLworICAgIHJldHVybihuIDwg MSA/IGxlbiA6IC0xKTsJCS8qIFJldHVybiB0aGUgcmVzdWx0cyAqLworfQorCisvKiAgVCBUIE8g QyAgLS0gIE91dHB1dCBhIGNoYXJhY3RlciB0byB0aGUgY29tbXVuaWNhdGlvbiBsaW5lICAqLwor CisvKgorIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgaW50ZXJhY3RpdmUs IGNoYXJhY3Rlci1tb2RlIG9wZXJhdGlvbnMsCisgbGlrZSB0ZXJtaW5hbCBjb25uZWN0aW9uLCBz Y3JpcHQgZXhlY3V0aW9uLCBkaWFsZXIgaS9vLCB3aGVyZSB0aGUgb3ZlcmhlYWQKKyBvZiB0aGUg c2lnbmFscyBhbmQgYWxhcm1zIGRvZXMgbm90IGNyZWF0ZSBhIGJvdHRsZW5lY2suCisqLworaW50 CisjaWZkZWYgQ0tfQU5TSUMKK3R0b2MoY2hhciBjKQorI2Vsc2UKK3R0b2MoYykgY2hhciBjOwor I2VuZGlmIC8qIENLX0FOU0lDICovCisvKiB0dG9jICovIHsKKyNkZWZpbmUgVFRPQ19UTU8gMTUJ CQkvKiBUaW1lb3V0IGluIGNhc2Ugd2UgZ2V0IHN0dWNrICovCisgICAgaW50IHh4LCBmZDsKKwor ICAgIGlmICh0dHlmZCA8IDApCQkJLyogQ2hlY2sgZm9yIG5vdCBvcGVuLiAqLworICAgICAgcmV0 dXJuKC0xKTsKKworI2lmZGVmIE5FVENNRAorICAgIGlmICh0dHBpcGUpCisgICAgICBmZCA9IGZk b3V0OworICAgIGVsc2UKKyNlbmRpZiAvKiBORVRDTUQgKi8KKyAgICAgIGZkID0gdHR5ZmQ7CisK KyAgICBjICY9IDB4ZmY7CisgICAgLyogZGVidWcoRjEwMSwidHRvYyIsIiIsKENIQVIpIGMpOyAq LworICAgIHNhdmFsID0gc2lnbmFsKFNJR0FMUk0sdGltZXJoKTsJLyogRW5hYmxlIHRpbWVyIGlu dGVycnVwdCAqLworICAgIHh4ID0gYWxhcm0oVFRPQ19UTU8pOwkJLyogZm9yIHRoaXMgbWFueSBz ZWNvbmRzLiAqLworICAgIGlmICh4eCA8IDApIHh4ID0gMDsJCQkvKiBTYXZlIG9sZCBhbGFybSB2 YWx1ZS4gKi8KKyAgICAvKiBkZWJ1ZyhGMTAxLCJ0dG9jIGFsYXJtIiwiIix4eCk7ICovCisgICAg aWYgKAorI2lmZGVmIENLX1BPU0lYX1NJRworCXNpZ3NldGptcChzamJ1ZiwxKQorI2Vsc2UKKwlz ZXRqbXAoc2pidWYpCisjZW5kaWYgLyogQ0tfUE9TSVhfU0lHICovCisJKSB7CQkvKiBUaW1lciB3 ZW50IG9mZj8gKi8KKwl0dGltb2ZmKCk7CQkJLyogWWVzLCBjYW5jZWwgdGhpcyBhbGFybS4gKi8K KwlpZiAoeHggLSBUVE9DX1RNTyA+IDApIGFsYXJtKHh4IC0gVFRPQ19UTU8pOyAvKiBSZXN0b3Jl IHByZXZpb3VzIG9uZSAqLworICAgICAgICAvKiBkZWJ1ZyhGMTAwLCJ0dG9jIHRpbWVvdXQiLCIi LDApOyAqLworI2lmZGVmIE5FVENPTk4KKwlpZiAoIW5ldGNvbm4pIHsKKyNlbmRpZiAvKiBORVRD T05OICovCisJICAgIGRlYnVnKEYxMDEsInR0b2MgdGltZW91dCIsIiIsYyk7CisJICAgIGlmICh0 dGZsb3cgPT0gRkxPX1hPTlgpIHsKKwkJZGVidWcoRjEwMSwidHRvYyBmbG93IiwiIix0dGZsb3cp OyAvKiBNYXliZSB3ZSdyZSB4b2ZmJ2QgKi8KKyNpZm5kZWYgUGxhbjkKKyNpZmRlZiBQT1NJWAor CQkvKiBQT1NJWCB3YXkgdG8gdW5zdGljay4gKi8KKwkJZGVidWcoRjEwMCwidHRvYyB0Y2Zsb3ci LCIiLHRjZmxvdyh0dHlmZCxUQ09PTikpOworI2Vsc2UKKyNpZmRlZiBCU0Q0CQkJCS8qIEJlcmtl bGV5IHdheSB0byBkbyBpdC4gKi8KKyNpZmRlZiBUSU9DU1RBUlQKKy8qIC4uLi4gVXNlZCB0byBi ZSAiaW9jdGwodHR5ZmQsIFRJT0NTVEFSVCwgMCk7Ii4gIFdobyBrbm93cz8gKi8KKwkJeworCQkg IGludCB4ID0gMDsKKwkJICBkZWJ1ZyhGMTAxLCJ0dG9jIFRJT0NTVEFSVCIsIiIsaW9jdGwodHR5 ZmQsIFRJT0NTVEFSVCwgJngpKTsKKwkJfQorI2VuZGlmIC8qIFRJT0NTVEFSVCAqLworI2VuZGlm IC8qIEJTRDQgKi8KKwkJCQkJLyogSXMgdGhlcmUgYSBTeXMgViB3YXkgdG8gZG8gdGhpcz8gKi8K KyNlbmRpZiAvKiBQT1NJWCAqLworI2VuZGlmIC8qIFBsYW45ICovCisJICAgIH0KKyNpZmRlZiBO RVRDT05OCisgICAgICAgIH0KKyNlbmRpZiAvKiBORVRDT05OICovCisJcmV0dXJuKC0xKTsJCQkv KiBSZXR1cm4gZmFpbHVyZSBjb2RlLiAqLworICAgIH0gZWxzZSB7CisgICAgICAgIGludCByYzsK KyNpZmRlZiBCRU9TT1JCRUJPWAorI2lmZGVmIE5FVENPTk4KKyAgICAgICAgaWYgKG5ldGNvbm4g JiYgIXR0cGlwZSAmJiAhdHRwdHkpCisJICByYyA9IG5ldHRvYyhjKTsKKyAgICAgICAgZWxzZQor I2VuZGlmIC8qICBCRU9TT1JCRUJPWCAqLworI2VuZGlmIC8qIE5FVENPTk4gKi8KKyNpZmRlZiBD S19FTkNSWVBUSU9OCisJICBpZiAoVEVMT1BUX01FKFRFTE9QVF9FTkNSWVBUSU9OKSkKKwkgICAg Y2tfdG5fZW5jcnlwdCgmYywxKTsKKyNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCisjaWZkZWYg SUJNWDI1CisJLyogcmllaG06IG1heWJlIHRoaXMgaXNuJ3QgbmVjZXNzYXJ5IGFmdGVyIGFsbC4g VGVzdCBwcm9ncmFtCisJICogd29ya2VkIGZpbmUgd2l0aCBkYXRhIGJlaW5nIHNlbnQgYW5kIHJl dHJpZXZlZCB3aXRoIG5vcm1hbAorCSAqIHJlYWQncyBhbmQgd3JpdGVzIQorCSAqLworCWlmICh0 dG5ldCA9PSBORVRfSVgyNSkKKwkgIHJjID0geDI1d3JpdGUodHR5ZmQsJmMsMSk7IC8qIGFzIGFi b3ZlIGZvciBYMjUgc3RyZWFtcyAqLworCWVsc2UKKyNlbmRpZiAvKiBJQk1YMjUgKi8KKyNpZmRl ZiBDS19TU0wKKwkgIGlmIChzc2xfYWN0aXZlX2ZsYWcgfHwgdGxzX2FjdGl2ZV9mbGFnKSB7CisJ ICAgICAgaW50IGVycm9yOworCSAgICAgIC8qIFdyaXRlIHVzaW5nIFNTTCAqLworCSAgICAgIGlm IChzc2xfYWN0aXZlX2ZsYWcpCisgICAgICAgICAgICAgICAgcmMgPSBTU0xfd3JpdGUoc3NsX2Nv biwgJmMsIDEpOworCSAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByYyA9IFNTTF93cml0ZSh0 bHNfY29uLCAmYywgMSk7CisJICAgICAgc3dpdGNoIChTU0xfZ2V0X2Vycm9yKHNzbF9hY3RpdmVf ZmxhZz9zc2xfY29uOnRsc19jb24scmMpKXsKKwkJY2FzZSBTU0xfRVJST1JfTk9ORToKKwkJICBi cmVhazsKKwkJY2FzZSBTU0xfRVJST1JfV0FOVF9XUklURToKKwkJY2FzZSBTU0xfRVJST1JfV0FO VF9SRUFEOgorCQkgIHJjID0gMDsKKwkJICBicmVhazsKKwkJY2FzZSBTU0xfRVJST1JfU1lTQ0FM TDoKKwkJICBpZiAocmMgIT0gMCkKKwkJICAgIHJldHVybigtMSk7CisJCWNhc2UgU1NMX0VSUk9S X1dBTlRfWDUwOV9MT09LVVA6CisJCWNhc2UgU1NMX0VSUk9SX1NTTDoKKwkJY2FzZSBTU0xfRVJS T1JfWkVST19SRVRVUk46CisJCWRlZmF1bHQ6CisJCSAgdHRjbG9zKDApOworCQkgIHJldHVybigt MSk7CisJICAgICAgfQorCSAgfSBlbHNlCisjZW5kaWYgLyogQ0tfU1NMICovCisjaWZkZWYgQ0tf S0VSQkVST1MKKyNpZmRlZiBLUkI0CisjaWZkZWYgUkxPR0NPREUKKwkgIGlmICh0dG5wcm90byA9 PSBOUF9FSzRMT0dJTikgeworCSAgICAgIHJjID0gKGtyYjRfZGVzX3dyaXRlKHR0eWZkLChjaGFy ICopJmMsMSkgPT0gMSk7CisJICB9IGVsc2UKKyNlbmRpZiAvKiBSTE9HQ09ERSAqLworI2VuZGlm IC8qIEtSQjQgKi8KKyNpZmRlZiBLUkI1CisjaWZkZWYgUkxPR0NPREUKKyAgICAgICAgICBpZiAo dHRucHJvdG8gPT0gTlBfRUs1TE9HSU4pIHsKKyAgICAgICAgICAgICAgcmMgPSAoa3JiNV9kZXNf d3JpdGUodHR5ZmQsJmMsMSwwKSA9PSAxKTsKKyAgICAgICAgICB9IGVsc2UKKyNlbmRpZiAvKiBS TE9HQ09ERSAqLworI2lmZGVmIEtSQjVfVTJVCisgICAgICAgICAgaWYgKHR0bnByb3RvID09IE5Q X0s1VTJVKSB7CisgICAgICAgICAgICAgIHJjID0gKGtyYjVfdTJ1X3dyaXRlKHR0eWZkLCZjLDEp ID09IDEpOworICAgICAgICAgIH0gZWxzZQorI2VuZGlmIC8qIEtSQjVfVTJVICovCisjZW5kaWYg LyogS1JCNSAqLworI2VuZGlmIC8qIENLX0tFUkJFUk9TICovCisJICAgIHJjID0gd3JpdGUoZmQs JmMsMSk7CS8qIFRyeSB0byB3cml0ZSB0aGUgY2hhcmFjdGVyLiAqLworCWlmIChyYyA8IDEpIHsJ CQkvKiBGYWlsZWQgKi8KKwkgICAgdHRpbW9mZigpOwkJCS8qIFR1cm4gb2ZmIHRoZSBhbGFybS4g Ki8KKwkgICAgYWxhcm0oeHgpOwkJCS8qIFJlc3RvcmUgcHJldmlvdXMgYWxhcm0uICovCisJICAg IGRlYnVnKEYxMDEsInR0b2MgZXJybm8iLCIiLGVycm5vKTsgLyogTG9nIHRoZSBlcnJvciwgKi8K KwkgICAgcmV0dXJuKC0xKTsJCQkvKiBhbmQgcmV0dXJuIHRoZSBlcnJvciBjb2RlLiAqLworCX0K KyAgICB9CisgICAgdHRpbW9mZigpOwkJCQkvKiBTdWNjZXNzLCB0dXJuIG9mZiB0aGUgYWxhcm0u ICovCisgICAgYWxhcm0oeHgpOwkJCQkvKiBSZXN0b3JlIHByZXZpb3VzIGFsYXJtLiAqLworICAg IHJldHVybigwKTsJCQkJLyogUmV0dXJuIGdvb2QgY29kZS4gKi8KK30KKworLyogIFQgVCBJIE4g TCAgLS0gIFJlYWQgYSByZWNvcmQgKHVwIHRvIGJyZWFrIGNoYXJhY3RlcikgZnJvbSBjb21tIGxp bmUuICAqLworLyoKKyAgUmVhZHMgdXAgdG8gIm1heCIgY2hhcmFjdGVycyBmcm9tIHRoZSBjb25u ZWN0aW9uLCB0ZXJtaW5hdGluZyBvbjoKKyAgICAoYSkgdGhlIHBhY2tldCBsZW5ndGggZmllbGQg aWYgdGhlICJ0dXJuIiBhcmd1bWVudCBpcyB6ZXJvLCBvcgorICAgIChiKSBvbiB0aGUgcGFja2V0 LWVuZCBjaGFyYWN0ZXIgKGVvbCkgaWYgdGhlICJ0dXJuIiBhcmd1bWVudCBpcyBub256ZXJvCisg ICAgKGMpIGEgY2VydGFpbiBudW1iZXIgb2YgQ3RybC1DJ3MgaW4gYSByb3cKKworICBSZXR1cm5z OgorICAgID49IDAsIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyByZWFkIHVwb24gc3VjY2VzczsK KyAgICAtMSBpZiAibWF4IiBleGNlZWRlZCwgdGltZW91dCwgb3Igb3RoZXIgY29ycmVjdGFibGUg ZXJyb3I7CisgICAgLTIgb24gdXNlciBpbnRlcnJ1cHRpb24gKGMpOworICAgIC0zIG9uIGZhdGFs IGVycm9yIGxpa2UgY29ubmVjdGlvbiBsb3N0LgorCisgIFRoZSBuYW1lIG9mIHRoaXMgcm91dGlu ZSBkYXRlcyBmcm9tIHRoZSBlYXJseSBkYXlzIHdoZW4gS2VybWl0IHBhY2tldHMKKyAgd2VyZSwg aW5kZWVkLCBhbHdheXMgbGluZXMgb2YgdGV4dC4gIFRoYXQgd2FzIGJlZm9yZSBjb250cm9sLWNo YXJhY3RlcgorICB1bnByZWZpeGluZyBhbmQgbGVuZ3RoLWRyaXZlbiBwYWNrZXQgZnJhbWluZyB3 ZXJlIGludHJvZHVjZWQsIHdoaWNoIHRoaXMKKyAgdmVyc2lvbiBoYW5kbGUuICBOQjogdGhpcyBy b3V0aW5lIGlzIE9OTFkgZm9yIHJlYWRpbmcgaW5jb21pbmcgS2VybWl0CisgIHBhY2tldHMsIG5v dGhpbmcgZWxzZS4gIFRvIHJlYWQgb3RoZXIga2luZHMgb2YgaW5jb21pbmcgbWF0ZXJpYWwsIHVz ZQorICB0dGluYygpIG9yIHR0eGluKCkuCisKKyAgVGhlIGJ5dGVzIHRoYXQgd2VyZSBpbnB1dCBh cmUgY29waWVkIGludG8gImRlc3QiIHdpdGggdGhlaXIgcGFyaXR5IGJpdHMKKyAgc3RyaXBwZWQg aWYgcGFyaXR5IHdhcyBzZWxlY3RlZC4gIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyByZWFk LgorICBCeXRlcyBhZnRlciB0aGUgZW9sIGFyZSBhdmFpbGFibGUgdXBvbiB0aGUgbmV4dCBjYWxs IHRvIHRoaXMgZnVuY3Rpb24uCisKKyAgVGhlIGlkZWEgaXMgdG8gbWluaW1pemUgdGhlIG51bWJl ciBvZiBzeXN0ZW0gY2FsbHMgcGVyIHBhY2tldCwgYW5kIGFsc28gdG8KKyAgbWluaW1pemUgdGlt ZW91dHMuICBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBpbm5lciBsb29wIG9mIHRoZSBwcm90b2NvbCBh bmQgbXVzdAorICBiZSBhcyBlZmZpY2llbnQgYXMgcG9zc2libGUuICBUaGUgY3VycmVudCBzdHJh dGVneSBpcyB0byB1c2UgbXlyZWFkKCksIGEKKyAgbWFjcm8gdG8gbWFuYWdlIGJ1ZmZlcmVkIChh bmQgZ2VuZXJhbGx5IG5vbmJsb2NraW5nKSByZWFkcy4KKworICBXQVJOSU5HOiBUaGlzIGZ1bmN0 aW9uIGNhbGxzIHBhcmNoaygpLCB3aGljaCBpcyBkZWZpbmVkIGluIGFub3RoZXIgbW9kdWxlLgor ICBOb3JtYWxseSwgY2t1dGlvLmMgZG9lcyBub3QgZGVwZW5kIG9uIGNvZGUgZnJvbSBhbnkgb3Ro ZXIgbW9kdWxlLCBidXQgdGhlcmUKKyAgaXMgYW4gZXhjZXB0aW9uIGluIHRoaXMgY2FzZSBiZWNh dXNlIGFsbCB0aGUgb3RoZXIgY2s/dGlvLmMgbW9kdWxlcyBhbHNvCisgIG5lZWQgdG8gY2FsbCBw YXJjaGsoKSwgc28gaXQncyBiZXR0ZXIgdG8gaGF2ZSBpdCBkZWZpbmVkIGluIGEgY29tbW9uIHBs YWNlLgorKi8KKyNpZmRlZiBDVFJMQworI3VuZGVmIENUUkxDCisjZW5kaWYgLyogQ1RSTEMgKi8K KyNkZWZpbmUgQ1RSTEMgJ1wwMycKKy8qCisgIFdlIGhhdmUgZm91ciBkaWZmZXJlbnQgZGVjbGFy YXRpb25zIGhlcmUgYmVjYXVzZToKKyAgKGEpIHRvIGFsbG93IEtlcm1pdCB0byBiZSBidWlsdCB3 aXRob3V0IHRoZSBhdXRvbWF0aWMgcGFyaXR5IHNlbnNpbmcgZmVhdHVyZQorICAoYikgb25lIG9m IGVhY2ggdHlwZSBmb3IgQU5TSSBDLCBvbmUgZm9yIG5vbi1BTlNJLgorKi8KKyNpZm5kZWYgTk9Y RkVSCisKK3N0YXRpYyBpbnQgcHVzaGVkYmFjayA9IDA7CisKK2ludAorI2lmZGVmIFBBUlNFTlNF CisjaWZkZWYgQ0tfQU5TSUMKK3R0aW5sKENIQVIgKmRlc3QsIGludCBtYXgsaW50IHRpbW8sIENI QVIgZW9sLCBDSEFSIHN0YXJ0LCBpbnQgdHVybikKKyNlbHNlCit0dGlubChkZXN0LG1heCx0aW1v LGVvbCxzdGFydCx0dXJuKSBpbnQgbWF4LHRpbW8sdHVybjsgQ0hBUiAqZGVzdCwgZW9sLCBzdGFy dDsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworI2Vsc2UgLyogbm90IFBBUlNFTlNFICovCisjaWZk ZWYgQ0tfQU5TSUMKK3R0aW5sKENIQVIgKmRlc3QsIGludCBtYXgsaW50IHRpbW8sIENIQVIgZW9s KQorI2Vsc2UKK3R0aW5sKGRlc3QsbWF4LHRpbW8sZW9sKSBpbnQgbWF4LHRpbW87IENIQVIgKmRl c3QsIGVvbDsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworI2VuZGlmIC8qIFBBUlNFTlNFICovCisv KiB0dGlubCAqLyB7CisKKyNpZm5kZWYgTVlSRUFECisgICAgQ0hBUiBjaCwgZHVtOworI2VuZGlm IC8qIE1ZUkVBRCAqLworI2lmZGVmIFBBUlNFTlNFCisgICAgaW50IHBrdGxlbiA9IC0xOworICAg IGludCBscGxlbiA9IDA7CisgICAgaW50IGhhdmVsZW4gPSAwOworI2VuZGlmIC8qIFBBUlNFTlNF ICovCisgICAgaW50IGZkOworICAgIGludCBzb3BtYXNrID0gMHhmZjsJCQkvKiBTdGFydC1PZi1Q YWNrZXQgbWFzayAqLworI2lmZGVmIENLWFhDSEFSCisgICAgZXh0ZXJuIHNob3J0IGRibHRbXTsJ CS8qIElnbm9yZS1jaGFyYWN0ZXIgdGFibGUgKi8KKyAgICBleHRlcm4gaW50IGlnbmZsYWc7Cisj ZW5kaWYgLyogQ0tYWENIQVIgKi8KKyNpZmRlZiBUQ1BTT0NLRVQKKyAgICBleHRlcm4gQ0hBUiBz dGNocjsKKyNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KKyAgICBpbnQgeDsKKyNpZmRlZiBTVFJFQU1J TkcKKyAgICBleHRlcm4gaW50IHN0cmVhbWluZzsKKyAgICBleHRlcm4gaW50IHNuZHR5cDsKKyNl bmRpZiAvKiBTVFJFQU1JTkcgKi8KKworICAgIGlmICh0dHlmZCA8IDApIHJldHVybigtMyk7ICAg ICAgICAgIC8qIE5vdCBvcGVuLiAqLworLyoKKyAgSW4gRmVicnVhcnkgMjAwNyBJIGZpeGVkIHR0 aW5sKCkgdG8gd29yayBiZXR0ZXIgdW5kZXIgdGhlIHRydWx5IGF3ZnVsCisgIGNvbmRpdGlvbnMg ZW5jb3VudGVyZWQgYnkgdGhlIEFNLUFQRVggb2NlYW5vZ3JhcGhpYyBmbG9hdHMgdGhhdCBnYXRo ZXIKKyAgaHVycmljYW5lIGRhdGEgYW5kIHBob25lIGhvbWUgdXNpbmcgSXJpZGl1bSBzYXRlbGxp dGUgbW9kZW1zLCB3aGljaCB1bmRlcgorICBjZXJ0YWluIGNvbmRpdGlvbnMsIGNhbiBzZW5kIHR3 byBwYWNrZXRzIGJhY2sgdG8gYmFjayBhZnRlciBhIGxvbmcgcGF1c2UuCisgIEluIHRoaXMgY2Fz ZSB0aGUgc2Vjb25kIHBhY2tldCB3b3VsZCBiZSBpZ25vcmVkIGJlY2F1c2UgdGhlIFNPSCB3YXMg c2tpcHBlZAorICBkdWUgdG8gdGhlIHR0Zmx1aSgpIGNhbGwuICBCdXQgdGhlIHJld29ya2VkIGxv b2thaGVhZC9wdXNoYmFjayBsb2dpYyBicm9rZQorICBLZXJtaXQgdHJhbnNmZXJzIG9uIGVuY3J5 cHRlZCBjb25uZWN0aW9ucy4gIFRoaXMgd2FzIGZpeGVkIDEyLTEzIEF1Z3VzdAorICAyMDA3LiAg QWxsIG9mIHRoaXMgaGFwcGVuZWQgYWZ0ZXIgOC4wLjIxMiBEZXYuMjcgd2FzIHJlbGVhc2VkIGFu ZCBiZWZvcmUKKyAgRGV2LjI4LCBzbyBubyBoYXJtIGRvbmUgb3RoZXIgdGhhbiB0aGUgZGVsYXku CisqLworICAgIGRlYnVnKEYxMDEsInR0aW5sIG1heCIsIiIsbWF4KTsKKyAgICBkZWJ1ZyhGMTAx LCJ0dGlubCB0aW1vIiwiIix0aW1vKTsKKworI2lmZGVmIE5FVENNRAorICAgIGlmICh0dHBpcGUp CisgICAgICBmZCA9IGZkaW47CisgICAgZWxzZQorI2VuZGlmIC8qIE5FVENNRCAqLworICAgICAg ZmQgPSB0dHlmZDsKKworI2lmZGVmIENPTU1FTlQKKyAgICBpZiAoeGxvY2FsICYmIGNvbmNoaygp ID4gMCkJCS8qIEFsbG93IGZvciBjb25zb2xlIGludGVycnVwdGlvbnMgKi8KKyAgICAgIHJldHVy bigtMSk7CisjZW5kaWYgLyogQ09NTUVOVCAqLworCisgICAgKmRlc3QgPSAnXDAnOyAgICAgICAg ICAgICAgICAgICAgICAgLyogQ2xlYXIgZGVzdGluYXRpb24gYnVmZmVyICovCisgICAgaWYgKHRp bW8gPCAwKSB0aW1vID0gMDsJCS8qIFNhZmV0eSAqLworICAgIGlmICh0aW1vKSB7CQkJCS8qIERv bid0IHRpbWUgb3V0IGlmIHRpbW8gPT0gMCAqLworCWludCB4eDsKKwlzYXZhbCA9IHNpZ25hbChT SUdBTFJNLHRpbWVyaCk7CS8qIEVuYWJsZSB0aW1lciBpbnRlcnJ1cHQgKi8KKwl4eCA9IGFsYXJt KHRpbW8pOwkJLyogU2V0IGl0LiAqLworCWRlYnVnKEYxMDEsInR0aW5sIGFsYXJtIiwiIix4eCk7 CisgICAgfQorICAgIGlmICgKKyNpZmRlZiBDS19QT1NJWF9TSUcKKwlzaWdzZXRqbXAoc2pidWYs MSkKKyNlbHNlCisJc2V0am1wKHNqYnVmKQorI2VuZGlmIC8qIENLX1BPU0lYX1NJRyAqLworCSkg ewkJCQkvKiBUaW1lciB3ZW50IG9mZj8gKi8KKwlkZWJ1ZyhGMTAwLCJ0dGlubCB0aW1vdXQiLCIi LDApOyAvKiBHZXQgaGVyZSBvbiB0aW1lb3V0LiAqLworCS8qIGRlYnVnKEYxMTAsIiB3aXRoIiwo Y2hhciAqKSBkZXN0LDApOyAqLworCXR0aW1vZmYoKTsJCQkvKiBUdXJuIG9mZiB0aW1lciAqLwor CXJldHVybigtMSk7CQkJLyogYW5kIHJldHVybiBlcnJvciBjb2RlLiAqLworICAgIH0gZWxzZSB7 CisJcmVnaXN0ZXIgaW50IGksIG4gPSAtMTsJCS8qIGxvY2FsIHZhcmlhYmxlcyAqLworCWludCBj Y24gPSAwOworI2lmZGVmIFBBUlNFTlNFCisJcmVnaXN0ZXIgaW50IGZsYWcgPSAwOworCWRlYnVn KEYwMDAsInR0aW5sIHN0YXJ0IiwiIixzdGFydCk7CisjZW5kaWYgLyogUEFSU0VOU0UgKi8KKwor CXR0cG1zayA9IHR0cHJ0eSA/IDAxNzcgOiAwMzc3OwkvKiBTZXQgcGFyaXR5IHN0cmlwcGluZyBt YXNrLiAqLworCXNvcG1hc2sgPSBuZWVkcGNoayA/IDAxNzcgOiB0dHBtc2s7IC8qIEFuZCBTT1Ag bWF0Y2hpbmcgbWFzay4gKi8KKworLyogTm93IHJlYWQgaW50byBkZXN0aW5hdGlvbiwgc3RyaXBw aW5nIHBhcml0eSBhbmQgbG9va2luZyBmb3IgdGhlICovCisvKiB0aGUgcGFja2V0IHRlcm1pbmF0 b3IsIGFuZCBhbHNvIGZvciBzZXZlcmFsIEN0cmwtQydzIHR5cGVkIGluIGEgcm93LiAqLworCisJ aSA9IDA7CQkJCS8qIERlc3RpbmF0aW9uIGluZGV4ICovCisJZGVidWcoRjEwMSwidHRpbmwgZW9s IiwiIixlb2wpOworCisJd2hpbGUgKGkgPCBtYXgtMSkgeworI2lmZGVmIE1ZUkVBRAorCSAgICBl cnJubyA9IDA7CisJICAgIC8qIE9uIGVuY3J5cHRlZCBjb25uZWN0aW9ucyBteXJlYWQgcmV0dXJu cyBlbmNyeXB0ZWQgYnl0ZXMgKi8KKwkgICAgbiA9IG15cmVhZCgpOworCSAgICBkZWJ1ZyhGMDAw LCJUVElOTCBteXJlYWQgY2hhciIsIiIsbik7CisJICAgIGlmIChuIDwgMCkgewkvKiBUaW1lb3V0 IG9yIGkvbyBlcnJvcj8gKi8KKyNpZmRlZiBERUJVRworCQlpZiAoZGVibG9nKSB7CisJCSAgICBk ZWJ1ZyhGMTAxLCJ0dGlubCBteXJlYWQgZmFpbHVyZSwgbiIsIiIsbik7CisJCSAgICBkZWJ1ZyhG MTAxLCJ0dGlubCBteXJlYWQgZXJybm8iLCIiLGVycm5vKTsKKwkJfQorI2VuZGlmIC8qIERFQlVH ICovCisJCS8qIERvbid0IGxldCBFSU5UUiBicmVhayBwYWNrZXRzLiAqLworCQlpZiAobiA9PSAt MykgeworCQkgICAgaWYgKGVycm5vID09IEVJTlRSICYmIGkgPiAwKSB7CisJCQlkZWJ1ZyhGMTEx LCJ0dGlubCBFSU5UUiBteXJlYWQgaSIsImNvbnRpbnVpbmciLGkpOworCQkJY29udGludWU7CisJ CSAgICB9IGVsc2UgeworCQkJZGVidWcoRjExMCwidHRpbmwgbm9uLUVJTlRSIC0zIiwiY2xvc2lu ZyIsMCk7CisJCQl3YXNjbG9zZWQgPSAxOworCQkJdHRpbW9mZigpOwkvKiBUdXJuIG9mZiB0aW1l ciAqLworCQkJdHRjbG9zKDApOworCQkJcmV0dXJuKG4pOworCQkgICAgfQorCQl9IGVsc2UgaWYg KG4gPT0gLTIgJiYgbmV0Y29ubiAvKiAmJiB0aW1vID09IDAgKi8gKSB7CisJCSAgICAvKiBIZXJl IHdlIHRyeSB0byBjYXRjaCBicm9rZW4gbmV0d29yayBjb25uZWN0aW9ucyAqLworCQkgICAgLyog ZXZlbiB3aGVuIGlvY3RsKCkgYW5kIHJlYWQoKSBkbyBub3QgY2F0Y2ggdGhlbSAqLworCQkgICAg ZGVidWcoRjExMSwidHRpbmwgbmV0d29yayBteXJlYWQgZmFpbHVyZSIsImNsb3NpbmciLG4pOwor CQkgICAgd2FzY2xvc2VkID0gMTsKKwkJICAgIHR0aW1vZmYoKTsKKwkJICAgIHR0Y2xvcygwKTsK KwkJICAgIHJldHVybigtMyk7CisJCX0KKyNpZmRlZiBTVFJFQU1JTkcKKwkJLyogU3RyZWFtaW5n IGFuZCBubyBkYXRhIHRvIHJlYWQgKi8KKwkJZWxzZSBpZiAobiA9PSAwICYmIHN0cmVhbWluZyAm JiBzbmR0eXAgPT0gJ0QnKQorCQkgIHJldHVybigwKTsKKyNlbmRpZiAvKiBTVFJFQU1JTkcgKi8K KwkJYnJlYWs7CQkJLyogQnJlYWsgb3V0IG9mIHdoaWxlIGxvb3AgKi8KKwkgICAgfQorCisjZWxz ZSAvKiBub3QgTVlSRUFEIChpcyB0aGlzIGNvZGUgdXNlZCBhbnl3aGVyZSBhbnkgbW9yZT8pICov CisvKgorICBUaGUgbm9uLU1ZUkVBRCBjb2RlIGRhdGVzIGZyb20gdGhlIDE5ODBzIGFuZCB3YXMg bmVlZGVkIG9uIGNlcnRhaW4gcGxhdGZvcm1zCisgIHdoZXJlIHRoZXJlIHdlcmUgbm8gbm9uYmxv Y2tpbmcgcmVhZHMuICAtZmRjLCAyMDA3LzAyLzIyLgorKi8KKwkgICAgaWYgKChuID0gcmVhZChm ZCwgJm4sIDEpKSA8IDEpCisJICAgICAgYnJlYWs7CQkJLyogRXJyb3IgLSBicmVhayBvdXQgb2Yg d2hpbGUgbG9vcCAqLworCisjZW5kaWYgLyogTVlSRUFEICovCisKKwkgICAgLyogR2V0IGhlcmUg d2l0aCBjaGFyIGluIG4gKi8KKworI2lmZGVmIENLX0VOQ1JZUFRJT04KKwkgICAgaWYgKFRFTE9Q VF9VKFRFTE9QVF9FTkNSWVBUSU9OKSAmJiAhcHVzaGVkYmFjaykgeworCQlDSEFSIGNoID0gbjsK KwkJY2tfdG5fZGVjcnlwdCgoY2hhciAqKSZjaCwxKTsKKwkJbiA9IGNoOworCQlkZWJ1ZyhGMDAw LCJUVElOTCBkZWNyeXAgY2hhciIsIiIsbik7CisJICAgIH0KKwkgICAgcHVzaGVkYmFjayA9IDA7 CisjZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLworCisjaWZkZWYgVENQU09DS0VUCisJICAgIGlm IChuID09IElBQyAmJgkJLyogSGFuZGxlIFRlbG5ldCBvcHRpb25zICovCisJCSgoeGxvY2FsICYm IG5ldGNvbm4gJiYgSVNfVEVMTkVUKCkpIHx8CisJCSgheGxvY2FsICYmIHNzdGVsbmV0KSkpIHsK KwkJbiA9IHR0X3Rub3B0KG4pOworCQlpZiAobiA8IDApCisJCSAgcmV0dXJuKG4pOworI2lmbmRl ZiBOT1BBUlNFTgorCQllbHNlIGlmIChuID09IDEpCisJCSAgc3RhcnQgPSBzdGNocjsKKyNlbmRp ZiAvKiBOT1BBUlNFTiAqLworCQlpZiAobiAhPSAyNTUpCQkvKiBObyBkYXRhIC0gZ28gYmFjayBm b3IgbmV4dCBjaGFyICovCisJCSAgY29udGludWU7CisJICAgIH0JCQkJLyogUXVvdGVkIElBQyAt IGtlZXAgZ29pbmcgKi8KKyNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KKworI2lmZGVmIENLWFhDSEFS CisJICAgIGlmIChpZ25mbGFnKQorCSAgICAgIGlmIChkYmx0Wyh1bnNpZ25lZCkgbl0gJiAxKSAv KiBDaGFyYWN0ZXIgdG8gaWdub3JlPyAqLworCQljb250aW51ZTsKKyNlbmRpZiAvKiBDS1hYQ0hB UiAqLworLyoKKyAgVXNlIHBhcml0eSBtYXNrLCByYXRoZXIgdGhhbiBhbHdheXMgc3RyaXBwaW5n IHBhcml0eSwgdG8gY2hlY2sgZm9yCisgIGNhbmNlbGxhdGlvbi4gIE90aGVyd2lzZSwgcnVucyBs aWtlIFx4MDNceDgzXHgwMyBpbiBhIHBhY2tldCBjb3VsZCBjYW5jZWwKKyAgdGhlIHRyYW5zZmVy IHdoZW4gcGFyaXR5IGlzIE5PTkUuICAoTm90ZSB0aGF0IFx4MDNceDAzXHgwMyBpcyBleHRyZW1l bHkKKyAgdW5saWtlbHkgZHVlIHRvIHJ1bi1sZW5ndGggZW5jb2RpbmcuKQorKi8KKwkgICAgLyog Q2hlY2sgY2FuY2VsbGF0aW9uICovCisJICAgIGlmICgheGxvY2FsICYmIHhmcmNhbiAmJiAoKG4g JiB0dHBtc2spID09IHhmcmNocikpIHsKKwkJaWYgKCsrY2NuID49IHhmcm51bSkgewkvKiBJZiB4 ZnJudW0gaW4gYSByb3csIGJhaWwgb3V0LiAqLworCQkgICAgaWYgKHRpbW8pIHsJCS8qIENsZWFy IHRpbWVyLiAqLworCQkJdHRpbW9mZigpOworCQkgICAgfQorCQkgICAgaWYgKHhmcmNociA8IDMy KQorCQkgICAgICBwcmludGYoIl4lYy4uLlxyXG4iLChjaGFyKSh4ZnJjaHIrNjQpKTsKKwkJICAg IGVsc2UKKwkJICAgICAgcHJpbnRmKCJDYW5jZWxlZC4uLlxyXG4iKTsKKwkJICAgIHJldHVybigt Mik7CisJCX0KKwkgICAgfSBlbHNlIGNjbiA9IDA7CQkvKiBObyBjYW5jZWxsYXRpb24sIHJlc2V0 IGNvdW50ZXIsICovCisKKyNpZmRlZiBQQVJTRU5TRQorLyoKKyAgUmVzdHJ1Y3R1cmVkIGNvZGUg YWxsb3dzIGZvciBhIG5ldyBwYWNrZXQgdG8gYXBwZWFyIHNvbWV3aGVyZSBpbiB0aGUKKyAgbWlk ZGxlIG9mIGEgcHJldmlvdXMgb25lLiAgLWZkYywgMjQgRmViIDIwMDcuCisqLworCSAgICBpZiAo KG4gJiBzb3BtYXNrKSA9PSBzdGFydCkgeyAvKiBTdGFydCBvZiBQYWNrZXQgKi8KKwkJZGVidWco RjEwMSwidHRpbmwgU09QIGkiLCIiLGkpOworCQlmbGFnID0gMTsJCS8qIEZsYWcgdGhhdCB3ZSBh cmUgaW4gYSBwYWNrZXQgKi8KKwkJaGF2ZWxlbiA9IDA7CQkvKiBJbnZhbGlkYXRlIHByZXZpb3Vz IGxlbmd0aCAqLworCQlwa3RsZW4gPSAtMTsJCS8qIChpZiBhbnkpIGluIGNhc2Ugd2Ugd2VyZSAq LworCQlscGxlbiA9IDA7CQkvKiBhbHJlYWQgcHJvY2Vzc2FuZCBhIHBhY2tldCAqLworCQlpID0g MDsJCQkvKiBhbmQgcmVzZXQgdGhlIGRlc3QgYnVmZmVyIHBvaW50ZXIgKi8KKwkgICAgfQorCSAg ICBpZiAoZmxhZyA9PSAwKSB7CQkvKiBObyBTT1AgeWV0Li4uICovCisJCWRlYnVnKEYwMDAsInR0 aW5sIHNraXBwaW5nIiwiIixuKTsKKwkJY29udGludWU7CisJICAgIH0KKwkgICAgZGVzdFtpKytd ID0gbiAmIHR0cG1zazsKKy8qCisgIElmIHdlIGhhdmUgbm90IGJlZW4gaW5zdHJ1Y3RlZCB0byB3 YWl0IGZvciBhIHR1cm5hcm91bmQgY2hhcmFjdGVyLCB3ZSBjYW4gZ28KKyAgYnkgdGhlIHBhY2tl dCBsZW5ndGggZmllbGQuICBJZiB0dXJuICE9IDAsIHdlIG11c3Qgd2FpdCBmb3IgdGhlIGVuZCBv ZiBsaW5lCisgIChlb2wpIGNoYXJhY3RlciBiZWZvcmUgcmV0dXJuaW5nLiAgVGhpcyBpcyBhbiBl Z3JlZ2lvdXMgdmlvbGF0aW9uIG9mIGFsbAorICBwcmluY2lwbGVzIG9mIGxheWVyaW5nLi4uICAo TGVzcyBlZ3JlZ2lvdXMgaW4gQy1LZXJtaXQgOS4wLCBpbiB3aGljaCB3ZSBnbworICBieSB0aGUg bGVuZ3RoIGZpZWxkIGJ1dCBhbHNvIGxvb2sgZm9yIHRoZSBlb2wgaW4gY2FzZSBpdCBhcnJpdmVz IGVhcmx5LAorICBlLmcuIGlmIHRoZSBsZW5ndGggZmllbGQgd2FzIGNvcnJ1cHRlZCB1cHdhcmRz LikKKyovCisJICAgIGlmICghaGF2ZWxlbikgeworCQlpZiAoaSA9PSAyKSB7CisJCSAgICBpZiAo KGRlc3RbMV0gJiAweDdmKSA8IDMyKSAvKiBHYXJiYWdlIGluIGxlbmd0aCBmaWVsZCAqLworCQkg ICAgICByZXR1cm4oLTEpOwkvKiBmZGMgLSAxMyBBcHIgMjAxMCAqLworCQkgICAgcGt0bGVuID0g eHVuY2hhcihkZXN0WzFdICYgMHg3Zik7CisgICAgICAgICAgICAgICAgICAgIGlmIChwa3RsZW4g PiA5NCkJLyogUnVib3V0IGluIGxlbmd0aCBmaWVsZCAqLworCQkgICAgICByZXR1cm4oLTEpOwkv KiBmZGMgLSAxMyBBcHIgMjAxMCAqLworCQkgICAgaWYgKHBrdGxlbiA+IDEpIHsKKwkJCWhhdmVs ZW4gPSAxOworCQkJZGVidWcoRjEwMSwidHRpbmwgcGt0bGVuIHZhbHVlIiwiIixwa3RsZW4pOwor CQkgICAgfQorCQl9IGVsc2UgaWYgKGkgPT0gNSAmJiBwa3RsZW4gPT0gMCkgeworCQkgICAgbHBs ZW4gPSB4dW5jaGFyKGRlc3RbNF0gJiAweDdmKTsKKwkJfSBlbHNlIGlmIChpID09IDYgJiYgcGt0 bGVuID09IDApIHsKKwkJICAgIHBrdGxlbiA9IGxwbGVuICogOTUgKyB4dW5jaGFyKGRlc3RbNV0g JiAweDdmKSArIDU7CisJCSAgICBoYXZlbGVuID0gMTsKKwkJICAgIGRlYnVnKEYxMDEsInR0aW5s IGV4dGVuZGVkIGxlbmd0aCIsIiIscGt0bGVuKTsKKwkJfQorCSAgICB9CisKKy8qCisgIFN1cHBv c2Ugd2UgbG9va2VkIGF0IHRoZSBzZXF1ZW5jZSBudW1iZXIgaGVyZSBhbmQgZm91bmQgaXQgd2Fz IG91dCBvZgorICByYW5nZT8gIFRoaXMgd291bGQgbWVhbiBlaXRoZXIgKGEpIGluY29taW5nIHBh Y2tldHMgaGFkIFNPUCB1bnByZWZpeGVkCisgIGFuZCB3ZSBhcmUgb3V0IG9mIHN5bmMsIG9yIChi KSB0aGUgcGFja2V0IGlzIGRhbWFnZWQuICBTaW5jZSAoYSkgaXMgYmFkCisgIHByYWN0aWNlLCBs ZXQncyBpZ25vcmUgaXQuICBTbyB3aGF0IHNob3VsZCB3ZSBkbyBoZXJlIGlmIHdlIGtub3cgdGhl CisgIHBhY2tldCBpcyBkYW1hZ2VkPworCisgICAxLiBOb3RoaW5nIC0tIGtlZXAgdHJ5aW5nIHRv IHJlYWQgdGhlIHBhY2tldCB0aWxsIHdlIGZpbmQgd2hhdCB3ZSB0aGluaworICAgICAgaXMgdGhl IGVuZCwgb3Igd2UgdGltZSBvdXQsIGFuZCBsZXQgdGhlIHVwcGVyIGxheWVyIGRlY2lkZSB3aGF0 IHRvCisgICAgICBkby4gIEJ1dCBzaW5jZSBlaXRoZXIgdGhlIHBhY2tldCBpcyBjb3JydXB0IG9y IHdlIGFyZSBvdXQgb2Ygc3luYywKKyAgICAgIG91ciBjcml0ZXJpb24gZm9yIGZpbmRpbmcgdGhl IGVuZCBkb2VzIG5vdCBhcHBseSBhbmQgd2UgYXJlIGxpa2VseQorICAgICAgdG8gdGltZSBvdXQg KG9yIHN3YWxsb3cgYSBwaWVjZSBvZiB0aGUgbmV4dCBwYWNrZXQpIGlmIG91ciBhc3N1bWVkCisg ICAgICBsZW5ndGggaXMgdG9vIGxvbmcuICAoVGhpcyB3YXMgdGhlIGJlaGF2aW9yIHByaW9yIHRv IHZlcnNpb24gNy4wLikKKworICAgMi4gc2V0IGZsYWcgPSAwIGFuZCBjb250aW51ZT8gIFRoaXMg d291bGQgZm9yY2UgdXMgdG8gd2FpdCBmb3IgdGhlCisgICAgICBuZXh0IHBhY2tldCB0byBjb21l IGluLCBhbmQgdGhlcmVmb3JlIChpbiB0aGUgbm9ud2luZG93aW5nIGNhc2UpLAorICAgICAgd291 bGQgZm9yY2UgYSB0aW1lb3V0IGluIHRoZSBvdGhlciBLZXJtaXQuCisKKyAgIDMuIHNldCBmbGFn ID0gMCBhbmQgY29udGludWUsIGJ1dCBvbmx5IGlmIHRoZSB3aW5kb3cgc2l6ZSBpcyA+IDEgYW5k CisgICAgICB0aGUgd2luZG93IGlzIG5vdCBibG9ja2VkPyAgVGFsayBhYm91dCBjaGVhdGluZyEK KworICAgNC4gUmV0dXJuIGEgZmFpbHVyZSBjb2RlIGFuZCBsZXQgdGhlIHVwcGVyIGxheWVyIGRl Y2lkZSB3aGF0IHRvIGRvLgorICAgICAgVGhpcyBzaG91bGQgYmUgZXF1aXZhbGVudCB0byAzLCBi dXQgd2l0aG91dCB0aGUgY2hlYXRpbmcuICBTbyBsZXQncworICAgICAgZG8gaXQgdGhhdCB3YXku Li4gIEJ1dCBub3RlIHRoYXQgd2UgbXVzdCBpZ25vcmUgdGhlIHBhcml0eSBiaXQKKyAgICAgIGlu IGNhc2UgdGhpcyBpcyB0aGUgZmlyc3QgcGFja2V0IGFuZCB3ZSBoYXZlIG5vdCB5ZXQgcnVuIHBh cmNoaygpLgorKi8KKwkgICAgaWYgKGkgPT0gMykgewkJLyogUGVlayBhdCBzZXF1ZW5jZSBudW1i ZXIgKi8KKwkJeCA9IHh1bmNoYXIoKGRlc3RbaS0xXSAmIDB4N2YpKTsgLyogSWYgaXQncyBub3Qg aW4gcmFuZ2UuLi4gKi8KKwkJaWYgKHggPCAwIHx8IHggPiA2MykgeworCQkgICAgZGVidWcoRjEx MSwidHRpbmwgYmFkIHNlcSIsZGVzdCx4KTsKKwkJICAgIGlmICh0aW1vKSB0dGltb2ZmKCk7CisJ CSAgICByZXR1cm4oLTEpOwkJLyogcmV0dXJuIGEgbm9uZmF0YWwgZXJyb3IgKi8KKwkJfQorCSAg ICB9CisKKyNlbHNlIC8qIFBBUlNFTlNFICovCisJICAgIGRlc3RbaSsrXSA9IG4gJiB0dHBtc2s7 CisjZW5kaWYgLyogUEFSU0VOU0UgKi8KKworICAgIC8qIENoZWNrIGZvciBlbmQgb2YgcGFja2V0 ICovCisKKwkgICAgaWYgKAorCQkoKG4gJiB0dHBtc2spID09IGVvbCkJLyogQWx3YXlzIGJyZWFr IG9uIHRoZSBlb2wgY2hhciAqLworI2lmZGVmIFBBUlNFTlNFCisJCSB8fAkJCS8qIGZkYyAtIHNl ZSBub3RlcyBvZiAxMyBBcHIgMjAxMCAqLworLyoKKyAgUHVyZWx5IGxlbmd0aC1kcml2ZW4gaWYg U0VUIEhBTkRTSEFLRSBOT05FIChpLmUuIHR1cm4gPT0gMCkuCisgIFRoaXMgYWxsb3dzIHBhY2tl dCB0ZXJtaW5hdG9ycyBhbmQgaGFuZHNoYWtlIGNoYXJhY3RlcnMgdG8gYXBwZWFyCisgIGxpdGVy YWxseSBpbnNpZGUgYSBwYWNrZXQgZGF0YSBmaWVsZC4KKyovCisJCShoYXZlbGVuICYmIChpID4g cGt0bGVuKzEpICYmCisJCSAoIXR1cm4gfHwgKHR1cm4gJiYgKG4gJiAweDdmKSA9PSB0dXJuKSkp IC8qICh0dXJuLCBub3QgZW9sKSAqLworCisjZW5kaWYgLyogUEFSU0VOU0UgKi8KKwkJKSB7Cisv KgorICBIZXJlIHdlIGhhdmUgZWl0aGVyIHJlYWQgdGhlIGxhc3QgYnl0ZSBvZiB0aGUgcGFja2V0 IGJhc2VkIG9uIGl0cyBsZW5ndGgKKyAgZmllbGQsIG9yIGVsc2Ugd2UgaGF2ZSByZWFkIHRoZSBw YWNrZXQgdGVybWluYXRvciAoZW9sKSBvciB0aGUgaGFsZi1kdXBsZXgKKyAgbGluZS10dXJuYXJv dW5kIGNoYXIgKHR1cm4pLgorKi8KKyNpZm5kZWYgUEFSU0VOU0UKKwkJZGVidWcoRjEwMSwidHRp bmwgZ290IGVvbCIsIiIsZW9sKTsgLyogKG9yIHR1cm4pICovCisJCWRlc3RbaV0gPSAnXDAnOwkJ LyogWWVzLCB0ZXJtaW5hdGUgdGhlIHN0cmluZywgKi8KKwkJLyogZGVidWcoRjEwMSwidHRpbmwg aSIsIiIsaSk7ICovCisKKyNlbHNlICAvKiBQQVJTRU5TRSAqLworCisjaWZkZWYgREVCVUcKKwkJ aWYgKGRlYmxvZykgeworCQkgICAgaWYgKChuICYgdHRwbXNrKSAhPSBlb2wpIHsKKwkJCWRlYnVn KEYxMDEsInR0aW5sIEVPUCBsZW5ndGgiLCIiLHBrdGxlbik7CisJCQlkZWJ1ZyhGMDAwLCJ0dGlu bCBFT1AgY3VycmVudCBjaGFyIiwiIixuKTsKKwkJCWRlYnVnKEYxMDEsInR0aW5sIEVPUCBwYWNr ZXQgYnVmIGluZGV4IiwiIixpKTsKKwkJICAgIH0gZWxzZSBkZWJ1ZyhGMTAxLCJ0dGlubCBnb3Qg ZW9sIiwiIixlb2wpOworCQl9CisjZW5kaWYgLyogREVCVUcgKi8KKworI2lmZGVmIE1ZUkVBRAor LyoKKyAgVGhlIHBhY2tldCB3YXMgcmVhZCBiYXNlZCBvbiBpdHMgbGVuZ3RoLiAgVGhpcyBsZWF2 ZXMgdGhlIHBhY2tldCB0ZXJtaW5hdG9yCisgIHVucmVhZCwgYW5kIHNvIHR0Y2hrKCkgd2lsbCBh bHdheXMgcmV0dXJuIGF0IGxlYXN0IDEgYmVjYXVzZSBvZiB0aGlzLAorICBwb3NzaWJseSBnaXZp bmcgYSBmYWxzZSBwb3NpdGl2ZSB0byB0aGUgImlzIHRoZXJlIGFub3RoZXIgcGFja2V0IHdhaXRp bmc/IgorICB0ZXN0LiAgQnV0IGlmIHdlIGtub3cgdGhlIHRlcm1pbmF0b3IgKG9yIGFueSBvdGhl ciBpbnRlcnBhY2tldCBqdW5rKSBpcworICB0aGVyZSwgd2UgY2FuIHNhZmVseSBnZXQgcmlkIG9m IGl0LgorCisgIE5PVEU6IFRoaXMgY29kZSByZXdvcmtlZCB0byAoYSkgZXhlY3V0ZSBldmVuIGlm IHRoZSBkZWJ1ZyBsb2cgaXNuJ3QgYWN0aXZlOworICBhbmQgKGIpIGFjdHVhbGx5IHdvcmsuICAt ZmRjLCAyMDA3LzAyLzIyLiAgQW5kIGFnYWluIDIwMDcvMDgvMTItMTMgdG8gYWxzbworICB3b3Jr IG9uIGVuY3J5cHRlZCBjb25uZWN0aW9ucy4KKyovCQorCQlkZWJ1ZyhGMTAxLCJUVElOTCBteV9j b3VudCIsIiIsbXlfY291bnQpOworCQlpZiAoKG4gJiB0dHBtc2spICE9IGVvbCkgeyAvKiBOb3Qg dGhlIHBhY2tldCB0ZXJtaW5hdG9yICovCisJCSAgICBpbnQgeDsKKwkJICAgIHdoaWxlIChteV9j b3VudCA+IDApIHsKKwkJCXggPSBteXJlYWQoKTsJICAgLyogKHdhcyB0dGluYygwKSAqLworCQkJ ZGVidWcoRjAwMCwiVFRJTkwgbGtyZWFkIGNoYXIiLCIiLHgpOworI2lmZGVmIENLX0VOQ1JZUFRJ T04KKwkJCWlmIChURUxPUFRfVShURUxPUFRfRU5DUllQVElPTikpIHsKKwkJCSAgICBDSEFSIGNo ID0geDsKKwkJCSAgICBja190bl9kZWNyeXB0KChjaGFyICopJmNoLDEpOworCQkJICAgIHggPSBj aDsKKwkJCSAgICBkZWJ1ZyhGMDAwLCJUVElOTCBsa2RlY3IgY2hhciIsIiIseCk7IAorCQkJfQor I2VuZGlmCS8qIENLX0VOQ1JZUFRJT04gKi8KKwkJCS8qCisJCQkgIE5vdGU6IHdoaWxlIGl0IG1p Z2h0IHNlZW0gbW9yZSBlbGVnYW50IHRvIHNpbXBseQorCQkJICBwdXNoIGJhY2sgdGhlIGVuY3J5 cHRlZCBieXRlLCB0aGF0IGRlc3luY2hyb25pemVzCisJCQkgIHRoZSBkZWNyeXB0aW9uIHN0cmVh bTsgdGhlIGZsYWcgaXMgbmVjZXNzYXJ5IHNvIHdlCisJCQkgIGRvbid0IHRyeSB0byBkZWNyeXB0 IHRoZSBzYW1lIGJ5dGUgdHdpY2UuCisJCQkqLworCQkJaWYgKCh4ICYgdHRwbXNrKSA9PSBzdGFy dCkgeyAvKiBTdGFydCBvZiBuZXh0IHBhY2tldCAqLworCQkJICAgIG15dW5yZCh4KTsJLyogUHVz aCBiYWNrIHRoZSBkZWNyeXB0ZWQgYnl0ZSAqLworCQkJICAgIHB1c2hlZGJhY2sgPSAxOyAvKiBB bmQgc2V0IGZsYWcgKi8KKwkJCSAgICBkZWJ1ZyhGMDAwLCJUVElOTCBsa3B1c2ggY2hhciIsIiIs eCk7CisJCQkgICAgYnJlYWs7CisJCQl9CisJCSAgICB9CisJCX0KKyNlbmRpZiAvKiBNWVJFQUQg Ki8KKworCQlkZXN0W2ldID0gJ1wwJzsJCS8qIFRlcm1pbmF0ZSB0aGUgc3RyaW5nLCAqLworCSAg ICAgICAgaWYgKG5lZWRwY2hrKSB7CQkvKiBQYXJpdHkgY2hlY2tlZCB5ZXQ/ICovCisJCSAgICBp ZiAodHRwcnR5ID09IDApIHsJLyogTm8sIGNoZWNrLiAqLworCQkJaWYgKCh0dHBydHkgPSBwYXJj aGsoZGVzdCxzdGFydCxpKSkgPiAwKSB7CisJCQkgICAgaW50IGo7CisJCQkgICAgZGVidWcoRjEw MSwidHRpbmwgc2Vuc2VzIHBhcml0eSIsIiIsdHRwcnR5KTsKKwkJCSAgICBkZWJ1ZyhGMTEwLCJ0 dGlubCBwYWNrZXQgYmVmb3JlIixkZXN0LDApOworCQkJICAgIHR0cG1zayA9IDB4N2Y7CisJCQkg ICAgZm9yIChqID0gMDsgaiA8IGk7IGorKykKKwkJCSAgICAgIGRlc3Rbal0gJj0gMHg3ZjsJLyog U3RyaXAgcGFyaXR5IGZyb20gcGFja2V0ICovCisJCQkgICAgZGVidWcoRjExMCwidHRpbmwgcGFj a2V0IGFmdGVyICIsZGVzdCwwKTsKKwkJCX0gZWxzZSB0dHBydHkgPSAwOyAvKiBSZXN0b3JlIGlm IHBhcmNoayBlcnJvciAqLworCQkgICAgfQorCQkgICAgc29wbWFzayA9IHR0cG1zazsKKwkJICAg IG5lZWRwY2hrID0gMDsKKwkJfQorI2VuZGlmIC8qIFBBUlNFTlNFICovCisKKwkJaWYgKHRpbW8p CQkvKiBUdXJuIG9mZiB0aW1lciBpZiBpdCB3YXMgb24gKi8KKwkJICB0dGltb2ZmKCk7CisgICAg ICAgICAgICAgICAgY2toZXhkdW1wKCJ0dGlubCBnb3QiLGRlc3QsaSk7CisKKyNpZmRlZiBTVFJF QU1JTkcKKwkJLyogdHRpbmwoKSB3YXMgY2FsbGVkIGJlY2F1c2UgdGhlcmUgd2FzIG5vbi1wYWNr ZXQgKi8KKwkJLyogZGF0YSBzaXR0aW5nIGluIHRoZSBiYWNrIGNoYW5uZWwuICBJZ25vcmUgaXQu ICAgKi8KKwkJaWYgKHN0cmVhbWluZyAmJiBzbmR0eXAgPT0gJ0QnKQorCQkgIHJldHVybigtMSk7 CisjZW5kaWYgLyogU1RSRUFNSU5HICovCisJCXJldHVybihpKTsKKwkgICAgfQorCX0gLyogRW5k IG9mIHdoaWxlKCkgKi8KKwl0dGltb2ZmKCk7CisJcmV0dXJuKG4pOworICAgIH0KK30KKyNlbmRp ZiAvKiBOT1hGRVIgKi8KKworLyogIFQgVCBJIE4gQyAtLSAgUmVhZCBhIGNoYXJhY3RlciBmcm9t IHRoZSBjb21tdW5pY2F0aW9uIGxpbmUgICovCisvKgorIE9uIHN1Y2Nlc3MsIHJldHVybnMgdGhl IGNoYXJhY3RlciB0aGF0IHdhcyByZWFkLCA+PSAwLgorIE9uIGZhaWx1cmUsIHJldHVybnMgLTEg b3Igb3RoZXIgbmVnYXRpdmUgbXlyZWFkIGVycm9yIGNvZGUsCisgICBvciAtMiBpZiBjb25uZWN0 aW9uIGlzIGJyb2tlbiBvciB0dHlmZCA8IDAuCisgICBvciAtMyBpZiBzZXNzaW9uIGxpbWl0IGhh cyBleHBpcmVkLAorICAgb3IgLTQgaWYgc29tZXRoaW5nIG9yIG90aGVyLi4uCisgTk9URTogVGhl IEFQSSBkb2VzIG5vdCBwcm92aWRlIGZvciB0dGluYygpIHJldHVybmluZyBhIHNwZWNpYWwgY29k ZQorIHVwb24gdGltZW91dCwgYnV0IHdlIG5lZWQgaXQuICBTbyBmb3IgdGhpcyB3ZSBoYXZlIGEg Z2xvYmFsIHZhcmlhYmxlLAorIHR0aW5jdGltby4KKyovCitzdGF0aWMgaW50IHR0aW5jdGltbyA9 IDA7CQkvKiBZdWsgKi8KKworaW50Cit0dGluYyh0aW1vKSBpbnQgdGltbzsgeworCisgICAgaW50 IG4gPSAwLCBmZDsKKyAgICBpbnQgaXNfdG4gPSAwOworICAgIENIQVIgY2ggPSAwOworCisgICAg dHRpbmN0aW1vID0gMDsKKworICAgIGlmICh0dHlmZCA8IDApIHJldHVybigtMik7ICAgICAgICAg IC8qIE5vdCBvcGVuLiAqLworCisgICAgaXNfdG4gPSAoeGxvY2FsICYmIG5ldGNvbm4gJiYgSVNf VEVMTkVUKCkpIHx8CisJICAgICgheGxvY2FsICYmIHNzdGVsbmV0KTsKKworI2lmZGVmIFRUTEVC VUYKKyAgICBpZiAodHRwdXNoID49IDApIHsKKyAgICAgICAgZGVidWcoRjExMSwidHRpbmMiLCJ0 dHB1c2giLHR0cHVzaCk7CisgICAgICAgIGNoID0gdHRwdXNoOworICAgICAgICB0dHB1c2ggPSAt MTsKKyAgICAgICAgcmV0dXJuKGNoKTsKKyAgICB9CisgICAgaWYgKGxlX2RhdGEpIHsKKyAgICAg ICAgaWYgKGxlX2dldGNoYXIoJmNoKSA+IDApIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMTEsInR0 aW5jIGxlX2dldGNoYXIiLCJjaCIsY2gpOworICAgICAgICAgICAgcmV0dXJuKGNoKTsKKyAgICAg ICAgfQorICAgIH0KKyNlbmRpZiAvKiBUVExFQlVGICovCisKKyNpZmRlZiBORVRDTUQKKyAgICBp ZiAodHRwaXBlKQorICAgICAgZmQgPSBmZGluOworICAgIGVsc2UKKyNlbmRpZiAvKiBORVRDTUQg Ki8KKyAgICAgIGZkID0gdHR5ZmQ7CisKKyAgICBpZiAoKHRpbW8gPD0gMCkJCQkvKiBVbnRpbWVk LiAqLworI2lmZGVmIE1ZUkVBRAorCXx8IChteV9jb3VudCA+IDApCQkvKiBCdWZmZXJlZCBjaGFy IGFscmVhZHkgd2FpdGluZy4gKi8KKyNlbmRpZiAvKiBNWVJFQUQgKi8KKwkpIHsKKyNpZmRlZiBN WVJFQUQKKyAgICAgICAgLyogQ29tbSBsaW5lIGZhaWx1cmUgcmV0dXJucyAtMSB0aHJ1IG15cmVh ZCwgc28gbm8gJj0gMDM3NyAqLworCW4gPSBteXJlYWQoKTsJCQkvKiBXYWl0IGZvciBhIGNoYXJh Y3Rlci4uLiAqLworCS8qIGRlYnVnKEYwMDAsInR0aW5jIE1ZUkVBRCBuIiwiIixuKTsgKi8KKyNp ZmRlZiBDS19FTkNSWVBUSU9OCisJLyogZGVidWcoRjEwMSwidHRpbmMgdV9lbmNyeXB0IiwiIixU RUxPUFRfVShURUxPUFRfRU5DUllQVElPTikpOyAqLworCWlmIChURUxPUFRfVShURUxPUFRfRU5D UllQVElPTikgJiYgbiA+PSAwKSB7CisJICAgIGNoID0gbjsKKwkgICAgY2tfdG5fZGVjcnlwdCgo Y2hhciAqKSZjaCwxKTsKKwkgICAgbiA9IGNoOworCX0KKyNlbmRpZiAvKiBDS19FTkNSWVBUSU9O ICovCisKKyNpZmRlZiBORVRQVFkKKwlpZiAodHRwdHkgJiYgbiA8IDApIHsKKwkgICAgZGVidWco RjEwMSwidHRpbmMgZXJyb3Igb24gcHR5IiwiIixuKTsKKwkgICAgdHRjbG9zKDApOworCSAgICBy ZXR1cm4obik7CisJfQorI2VuZGlmIC8qIE5FVFBUWSAqLworCisjaWZkZWYgVE5DT0RFCisJaWYg KChuID4gLTEpICYmIGlzX3RuKQorCSAgcmV0dXJuKCh1bnNpZ25lZCkobiAmIDB4ZmYpKTsKKwll bHNlCisjZW5kaWYgLyogVE5DT0RFICovCisJICByZXR1cm4obiA8IDAgPyBuIDogKHVuc2lnbmVk KShuICYgdHRwbXNrKSk7CisKKyNlbHNlICAvKiBNWVJFQUQgKi8KKworICAgICAgICB3aGlsZSAo KG4gPSByZWFkKGZkLCZjaCwxKSkgPT0gMCkgLyogV2FpdCBmb3IgYSBjaGFyYWN0ZXIuICovCisg ICAgICAgIC8qIFNob3VsZG4ndCBoYXZlIHRvIGxvb3AgaW4gdmVyIDVBLiAqLworI2lmZGVmIE5F VENPTk4KKwkgIGlmIChuZXRjb25uKSB7CQkvKiBTcGVjaWFsIGhhbmRsaW5nIGZvciBuZXQgKi8K KwkgICAgICBuZXRjbG9zKCk7CQkvKiBJZiByZWFkKCkgcmV0dXJucyAwIGl0IG1lYW5zICovCisJ ICAgICAgbmV0Y29ubiA9IDA7CQkvKiB0aGUgY29ubmVjdGlvbiBoYXMgZHJvcHBlZC4gKi8KKwkg ICAgICBlcnJubyA9IEVOT1RDT05OOworCSAgICAgIHJldHVybigtMik7CisJICB9CisjZW5kaWYg LyogTkVUQ09OTiAqLworCSAgOworCS8qIGRlYnVnKEYxMDEsInR0aW5jIiwiIixjaCk7ICovCisj aWZkZWYgVE5DT0RFCisJaWYgKChuID4gMCkgJiYgaXNfdG4pIHsKKyNpZmRlZiBDS19FTkNSWVBU SU9OCisJICAgIGlmIChURUxPUFRfVShURUxPUFRfRU5DUllQVElPTikpIHsKKwkJY2tfdG5fZGVj cnlwdCgmY2gsMSk7CisJCW4gPSBjaDsKKwkgICAgfQorI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04g Ki8KKwkgICAgcmV0dXJuKCh1bnNpZ25lZCkoY2ggJiAweGZmKSk7CisJfSBlbHNlCisjZW5kaWYg LyogVE5DT0RFICovCisgICAgICAgIHJldHVybigobiA8IDApID8gLTQgOiAoKG4gPT0gMCkgPyAt MSA6ICh1bnNpZ25lZCkoY2ggJiB0dHBtc2spKSk7CisjZW5kaWYgLyogTVlSRUFEICovCisKKyAg ICB9IGVsc2UgewkJCQkvKiBUaW1lZCByZWFkICovCisKKwlpbnQgb2xkYWxhcm07CisJc2F2YWwg PSBzaWduYWwoU0lHQUxSTSx0aW1lcmgpOwkvKiBTZXQgdXAgaGFuZGxlciwgc2F2ZSBvbGQgb25l LiAqLworCW9sZGFsYXJtID0gYWxhcm0odGltbyk7CQkvKiBTZXQgYWxhcm0sIHNhdmUgb2xkIG9u ZS4gKi8KKwlpZiAoCisjaWZkZWYgQ0tfUE9TSVhfU0lHCisJICAgIHNpZ3NldGptcChzamJ1Ziwx KQorI2Vsc2UKKwkgICAgc2V0am1wKHNqYnVmKQorI2VuZGlmIC8qIENLX1BPU0lYX1NJRyAqLwor CSAgICApIHsJCQkJLyogVGltZXIgZXhwaXJlZCAqLworCSAgICB0dGluY3RpbW8gPSAxOworCSAg ICBuID0gLTE7CQkJLyogc2V0IGZsYWcgKi8KKwl9IGVsc2UgeworI2lmZGVmIE1ZUkVBRAorCSAg ICBuID0gbXlyZWFkKCk7CQkvKiBJZiBtYW5hZ2luZyBvd24gYnVmZmVyLi4uICovCisJICAgIGRl YnVnKEYxMDEsInR0aW5jIG15cmVhZCIsIiIsbik7CisJICAgIGNoID0gbjsKKyNlbHNlCisJICAg IG4gPSByZWFkKGZkLCZjaCwxKTsJCS8qIE90aGVyd2lzZSBjYWxsIHRoZSBzeXN0ZW0uICovCisJ ICAgIGlmIChuID09IDApIG4gPSAtMTsKKwkgICAgZGVidWcoRjEwMSwidHRpbmMgcmVhZCIsIiIs bik7CisjZW5kaWYgLyogTVlSRUFEICovCisKKyNpZmRlZiBDS19FTkNSWVBUSU9OCisJICAgIGlm IChURUxPUFRfVShURUxPUFRfRU5DUllQVElPTikgJiYgbiA+PSAwKSB7CisJCWNrX3RuX2RlY3J5 cHQoKGNoYXIgKikmY2gsMSk7CisJICAgIH0KKyNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCisJ ICAgIGlmIChuID49IDApCisJICAgICAgbiA9ICh1bnNpZ25lZCkgKGNoICYgMHhmZik7CisJICAg IGVsc2UKKwkgICAgICBuID0gKG4gPCAwKSA/IC00IDogLTI7CS8qIFNwZWNpYWwgcmV0dXJuIGNv ZGVzLiAqLworCX0KKwl0dGltb2ZmKCk7CQkJLyogVHVybiBvZmYgdGhlIHRpbWVyICovCisJaWYg KG9sZGFsYXJtID4gMCkgeworCSAgICBpZiAobiA9PSAtMSkJCS8qIGFuZCByZXN0b3JlIGFueSBw cmV2aW91cyBhbGFybSAqLworCSAgICAgIG9sZGFsYXJtIC09IHRpbW87CisJICAgIGlmIChvbGRh bGFybSA8IDApCQkvKiBhZGp1c3RlZCBieSBvdXIgdGltZW91dCBpbnRlcnZhbCAqLworCSAgICAg IG9sZGFsYXJtID0gMDsKKwkgICAgaWYgKG9sZGFsYXJtKSB7CisJICAgICAgICBkZWJ1ZyhGMTAx LCJ0dGluYyByZXN0b3Jpbmcgb2xkYWxhcm0iLCIiLG9sZGFsYXJtKTsKKwkJYWxhcm0ob2xkYWxh cm0pOworCSAgICB9CisJfQorI2lmZGVmIE5FVENPTk4KKwlpZiAobmV0Y29ubikgeworCSAgICBp ZiAobiA9PSAtMikgewkJLyogcmVhZCgpIHJldHVybnMgMCAqLworCQluZXRjbG9zKCk7CQkvKiBv biBuZXR3b3JrIHJlYWQgZmFpbHVyZSAqLworCQluZXRjb25uID0gMDsKKwkJZXJybm8gPSBFTk9U Q09OTjsKKwkgICAgfQorCX0KKyNlbmRpZgkvKiBORVRDT05OICovCisjaWZkZWYgVE5DT0RFCisJ aWYgKChuID4gLTEpICYmIGlzX3RuKQorCSAgcmV0dXJuKCh1bnNpZ25lZCkobiAmIDB4ZmYpKTsK KwllbHNlCisjZW5kaWYgLyogVE5DT0RFICovCisJICAvKiBSZXR1cm4gbWFza2VkIGNoYXIgb3Ig bmVnLiAqLworCSAgcmV0dXJuKCAobiA8IDApID8gbiA6ICh1bnNpZ25lZCkobiAmIHR0cG1zaykg KTsKKyAgICB9Cit9CisKKy8qICBTIE4gRCBCIFIgSyAgLS0gIFNlbmQgYSBCUkVBSyBzaWduYWwg b2YgdGhlIGdpdmVuIGR1cmF0aW9uICAqLworCitzdGF0aWMgaW50CisjaWZkZWYgQ0tfQU5TSUMK K3NuZGJyayhpbnQgbXNlYykgewkJCS8qIEFyZ3VtZW50IGlzIG1pbGxpc2Vjb25kcyAqLworI2Vs c2UKK3NuZGJyayhtc2VjKSBpbnQgbXNlYzsgeworI2VuZGlmIC8qIENLX0FOU0lDICovCisjaWZu ZGVmIFBPU0lYCisgICAgaW50IHgsIG47CisjZW5kaWYgLyogUE9TSVggKi8KKworI2lmZGVmIE9Y T1MKKyNkZWZpbmUgQlNEQlJFQUsKKyNlbmRpZiAvKiBPWE9TICovCisKKyNpZmRlZiBBTllCU0QK KyNkZWZpbmUgQlNEQlJFQUsKKyNlbmRpZiAvKiBBTllCU0QgKi8KKworI2lmZGVmIEJTRDQ0Cisj ZGVmaW5lIEJTREJSRUFLCisjZW5kaWYgLyogQlNENDQgKi8KKworI2lmZGVmIENPSEVSRU5UCisj aWZkZWYgQlNEQlJFQUsKKyN1bmRlZiBCU0RCUkVBSworI2VuZGlmIC8qIEJTREJSRUFLICovCisj ZW5kaWYgLyogQ09IRVJFTlQgKi8KKworI2lmZGVmIEJFTExWMTAKKyNpZmRlZiBCU0RCUkVBSwor I3VuZGVmIEJTREJSRUFLCisjZW5kaWYgLyogQlNEQlJFQUsgKi8KKyNlbmRpZiAvKiBCRUxMVjEw ICovCisKKyNpZmRlZiBQUk9WWDEKKyAgICBjaGFyIHNwZDsKKyNlbmRpZiAvKiBQUk9WWDEgKi8K KworICAgIGRlYnVnKEYxMDEsInR0c25kYiB0dHlmZCIsIiIsdHR5ZmQpOworICAgIGlmICh0dHlm ZCA8IDApIHJldHVybigtMSk7ICAgICAgICAgIC8qIE5vdCBvcGVuLiAqLworCisjaWZkZWYgUGxh bjkKKyAgICByZXR1cm4gcDlzbmRicmsobXNlYyk7CisjZWxzZQorI2lmZGVmIE5FVENPTk4KKyNp ZmRlZiBORVRDTUQKKyAgICBpZiAodHRwaXBlKQkJCQkvKiBQaXBlICovCisgICAgICByZXR1cm4o dHRvYygnXDAnKSk7CisjZW5kaWYgLyogTkVUQ01EICovCisjaWZkZWYgTkVUUFRZCisgICAgaWYg KHR0cHR5KQorICAgICAgcmV0dXJuKHR0b2MoJ1wwJykpOworI2VuZGlmIC8qIE5FVFBUWSAqLwor ICAgIGlmIChuZXRjb25uKSAJCQkvKiBTZW5kIG5ldHdvcmsgQlJFQUsgKi8KKyAgICAgIHJldHVy bihuZXRicmVhaygpKTsKKyNlbmRpZiAvKiBORVRDT05OICovCisKKyAgICBpZiAobXNlYyA8IDEg fHwgbXNlYyA+IDUwMDApIHJldHVybigtMSk7IC8qIEJhZCBhcmd1bWVudCAqLworCisjaWZkZWYg UE9TSVgJCQkJLyogRWFzeSBpbiBQT1NJWCAqLworICAgIHsKKwlpbnQgeDsKKwlkZWJ1ZyhGMTEx LCJzbmRicmsgUE9TSVgiLGNraXRvYShtc2VjKSwobXNlYy8zNzUpKTsKKwllcnJubyA9IDA7CisJ eCA9IHRjc2VuZGJyZWFrKHR0eWZkLG1zZWMgLyAzNzUpOworCWRlYnVnKEYxMTEsInNuZGJyayB0 Y3NlbmRicmVhayIsY2tpdG9hKGVycm5vKSx4KTsKKwlyZXR1cm4oeCk7CisgICAgfQorI2Vsc2UK KyNpZmRlZiBQUk9WWDEKKyAgICBndHR5KHR0eWZkLCZ0dGJ1Zik7ICAgICAgICAgICAgICAgICAv KiBHZXQgY3VycmVudCB0dHkgZmxhZ3MgKi8KKyAgICBzcGQgPSB0dGJ1Zi5zZ19vc3BlZWQ7ICAg ICAgICAgICAgICAvKiBTYXZlIHNwZWVkICovCisgICAgdHRidWYuc2dfb3NwZWVkID0gQjUwOyAg ICAgICAgICAgICAgLyogQ2hhbmdlIHRvIDUwIGJhdWQgKi8KKyAgICBzdHR5KHR0eWZkLCZ0dGJ1 Zik7ICAgICAgICAgICAgICAgICAvKiAgLi4uICovCisgICAgbiA9IChpbnQpc3RybGVuKGJybnVs cyk7CQkvKiBTZW5kIHRoZSByaWdodCBudW1iZXIgb2YgbnVsbHMgKi8KKyAgICB4ID0gbXNlYyAv IDkxOworICAgIGlmICh4ID4gbikgeCA9IG47CisgICAgd3JpdGUodHR5ZmQsYnJudWxzLG4pOwor ICAgIHR0YnVmLnNnX29zcGVlZCA9IHNwZDsgICAgICAgICAgICAgIC8qIFJlc3RvcmUgc3BlZWQg Ki8KKyAgICBzdHR5KHR0eWZkLCZ0dGJ1Zik7ICAgICAgICAgICAgICAgICAvKiAgLi4uICovCisg ICAgcmV0dXJuKDApOworI2Vsc2UKKyNpZmRlZiBhZWdpcworICAgIHNpb18kY29udHJvbCgoc2hv cnQpdHR5ZmQsIHNpb18kc2VuZF9icmVhaywgbXNlYywgc3QpOworICAgIHJldHVybigwKTsKKyNl bHNlCisjaWZkZWYgQlNEQlJFQUsKKyAgICBuID0gRldSSVRFOyAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBGbHVzaCBvdXRwdXQgcXVldWUuICovCisvKiBXYXRjaCBvdXQgZm9yIGludCB2cyBs b25nIHByb2JsZW1zIGluICZuIGFyZyEgKi8KKyAgICBkZWJ1ZyhGMTAxLCJzbmRicmsgQlNEQlJF QUsiLCIiLG1zZWMpOworICAgIGlvY3RsKHR0eWZkLFRJT0NGTFVTSCwmbik7ICAgICAgICAgIC8q IElnbm9yZSBhbnkgZXJyb3JzLi4gKi8KKyAgICBpZiAoaW9jdGwodHR5ZmQsVElPQ1NCUkssKGNo YXIgKikwKSA8IDApIHsgIC8qIFR1cm4gb24gQlJFQUsgKi8KKyAgICAgICAgcGVycm9yKCJDYW4n dCBzZW5kIEJSRUFLIik7CisgICAgICAgIHJldHVybigtMSk7CisgICAgfQorICAgIHggPSBtc2xl ZXAobXNlYyk7ICAgICAgICAgICAgICAgICAgICAvKiBTbGVlcCBmb3Igc28gbWFueSBtaWxsaXNl Y29uZHMgKi8KKyAgICBpZiAoaW9jdGwodHR5ZmQsVElPQ0NCUkssKGNoYXIgKikwKSA8IDApIHsg IC8qIFR1cm4gb2ZmIEJSRUFLICovCisgICAgICAgIHBlcnJvcigiQlJFQUsgc3R1Y2shISEiKTsK KyAgICAgICAgZG9leGl0KEJBRF9FWElULC0xKTsJCS8qIEdldCBvdXQsIGNsb3NpbmcgdGhlIGxp bmUuICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogICB3aXRo IGJhZCBleGl0IHN0YXR1cyAqLworICAgIH0KKyAgICByZXR1cm4oeCk7CisjZWxzZQorI2lmZGVm IEFUVFNWCisvKgorICBObyB3YXkgdG8gc2VuZCBhIGxvbmcgQlJFQUsgaW4gU3lzIFYsIHNvIHNl bmQgYSBidW5jaCBvZiByZWd1bGFyIG9uZXMuCisgIChBY3R1YWxseSwgU3lzIFYgUjQgaXMgKnN1 cHBvc2VkKiB0byBoYXZlIHRoZSBQT1NJWCB0Y3NlbmRicmVhaygpIGZ1bmN0aW9uLAorICBidXQg dGhlcmUncyBubyB3YXkgZm9yIHRoaXMgY29kZSB0byBrbm93IGZvciBzdXJlLikKKyovCisgICAg ZGVidWcoRjEwMSwic25kYnJrIEFUVFNWIiwiIixtc2VjKTsKKyAgICB4ID0gbXNlYyAvIDI3NTsK KyAgICBmb3IgKG4gPSAwOyBuIDwgeDsgbisrKSB7CisJLyogUmVwb3J0ZWRseSB0aGUgY2FzdCBi cmVha3MgdGhpcyBmdW5jdGlvbiBvbiBzb21lIHN5c3RlbXMgKi8KKwkvKiBCdXQgdGhlbiB3aHkg d2FzIGl0IGhlcmUgaW4gdGhlIGZpcnN0IHBsYWNlPyAqLworCWlmIChpb2N0bCh0dHlmZCxUQ1NC UkssIC8qIChjaGFyICopICovIDApIDwgMCkgeworCSAgICBwZXJyb3IoIkNhbid0IHNlbmQgQlJF QUsiKTsKKwkgICAgcmV0dXJuKC0xKTsKKwl9CisgICAgfQorICAgIHJldHVybigwKTsKKyNlbHNl CisjaWZkZWYgIFY3CisgICAgZGVidWcoRjEwMSwic25kYnJrIFY3IiwiIixtc2VjKTsKKyAgICBy ZXR1cm4oZ2VuYnJrKHR0eWZkLDI1MCkpOwkJLyogU2ltdWxhdGUgYSBCUkVBSyAqLworI2Vsc2UK KyAgICBkZWJ1ZyhGMTAxLCJzbmRicmsgY2F0Y2hhbGwiLCIiLG1zZWMpOworICAgIHR0b2MoMCk7 dHRvYygwKTt0dG9jKDApO3R0b2MoMCk7CisgICAgcmV0dXJuKDApOworI2VuZGlmIC8qIFY3ICov CisjZW5kaWYgLyogQlNEQlJFQUsgKi8KKyNlbmRpZiAvKiBBVFRTViAqLworI2VuZGlmIC8qIGFl Z2lzICovCisjZW5kaWYgLyogUFJPVlgxICovCisjZW5kaWYgLyogUE9TSVggKi8KKyNlbmRpZiAv KiBQbGFuOSAqLworfQorCisvKiAgVCBUIFMgTiBEIEIgIC0tICBTZW5kIGEgQlJFQUsgc2lnbmFs ICAqLworCitpbnQKK3R0c25kYigpIHsKKyNpZmRlZiBUTl9DT01QT1JUCisgICAgaWYgKG5ldGNv bm4gJiYgaXN0bmNvbXBvcnQoKSkKKyAgICAgIHJldHVybigodG5zbmRiKDI3NUwpID49IDApID8g MCA6IC0xKTsKKyAgICBlbHNlCisjZW5kaWYgLyogVE5fQ09NUE9SVCAqLworICAgICAgcmV0dXJu KHNuZGJyaygyNzUpKTsKK30KKworLyogIFQgVCBTIE4gRCBMIEIgIC0tICBTZW5kIGEgTG9uZyBC UkVBSyBzaWduYWwgICovCisKK2ludAordHRzbmRsYigpIHsKKyNpZmRlZiBUTl9DT01QT1JUCisg ICAgaWYgKG5ldGNvbm4gJiYgaXN0bmNvbXBvcnQoKSkKKyAgICAgIHJldHVybigodG5zbmRiKDE4 MDBMKSA+PSAwKSA/IDAgOiAtMSk7CisgICAgZWxzZQorI2VuZGlmIC8qIFROX0NPTVBPUlQgKi8K KyAgICByZXR1cm4oc25kYnJrKDE1MDApKTsKK30KKworLyogIE0gUyBMIEUgRSBQICAtLSAgTWls bGlzZWNvbmQgdmVyc2lvbiBvZiBzbGVlcCgpLiAgKi8KKworLyoKKyAgQ2FsbCB3aXRoIG51bWJl ciBvZiBtaWxsaXNlY29uZHMgKHRob3VzYW5kdGhzIG9mIHNlY29uZHMpIHRvIHNsZWVwLgorICBJ bnRlbmRlZCBvbmx5IGZvciBzbWFsbCBpbnRlcnZhbHMuICBGb3IgYmlnIG9uZXMsIGp1c3QgdXNl IHNsZWVwKCkuCisgIEhpZ2hseSBzeXN0ZW0tZGVwZW5kZW50LgorICBSZXR1cm5zIDAgYWx3YXlz LCBldmVuIGlmIGl0IGRpZG4ndCB3b3JrLgorKi8KKworLyogRGVmaW5lIE1TTEZUSU1FIGZvciBz eXN0ZW1zIHRoYXQgbXVzdCB1c2UgYW4gZnRpbWUoKSBsb29wLiAqLworI2lmZGVmIEFOWUJTRAkJ CQkvKiBGb3IgcHJlLTQuMiBCU0QgdmVyc2lvbnMgKi8KKyNpZm5kZWYgQlNENAorI2RlZmluZSBN U0xGVElNRQorI2VuZGlmIC8qIEJTRDQgKi8KKyNlbmRpZiAvKiBBTllCU0QgKi8KKworI2lmZGVm IFRPV0VSMQkJCQkvKiBOQ1IgVG93ZXIgT1MgMS4wICovCisjZGVmaW5lIE1TTEZUSU1FCisjZW5k aWYgLyogVE9XRVIxICovCisKKyNpZmRlZiBDT0hFUkVOVCAgICAgICAgIC8qIENvaGVyZW50Li4u ICovCisjaWZuZGVmIF9JMzg2ICAgICAgICAgICAvKiBNYXliZSBDb2hlcmVudC8zODYgc2hvdWxk IGdldCB0aGlzLCB0b28gKi8KKyNkZWZpbmUgTVNMRlRJTUUgICAgICAgIC8qIE9waW5pb25zIGFy ZSBkaXZpZGVkICovCisjZW5kaWYgLyogX0kzODYgKi8KKyNlbmRpZiAvKiBDT0hFUkVOVCAqLwor CisjaWZkZWYgQ09NTUVOVAorI2lmZGVmIEdFVE1TRUMKKworLyogTWlsbGlzZWNvbmQgdGltZXIg Ki8KKworc3RhdGljIGxvbmcgbXNlY2Jhc2UgPSAwTDsJCS8qIFVuc2lnbmVkIGxvbmcgbm90IHBv cnRhYmxlICovCisKK2xvbmcKK2dldG1zZWMoKSB7CQkJCS8qIE1pbGxpc2Vjb25kcyBzaW5jZSBi YXNlIHRpbWUgKi8KKyAgICBzdHJ1Y3QgdGltZXZhbCB4djsKKyAgICBzdHJ1Y3QgdGltZXpvbmUg eHo7CisgICAgbG9uZyBzZWNzLCBtc2VjczsKKyAgICBpZiAoCisjaWZkZWYgR1RPRE9ORUFSRwor CWdldHRpbWVvZmRheSgmdHYpCisjZWxzZQorI2lmZGVmIFBUWAorCWdldHRpbWVvZmRheSgmdHYs IE5VTEwpCisjZWxzZQorCWdldHRpbWVvZmRheSgmdHYsICZ0eikKKyNlbmRpZiAvKiBQVFggKi8K KyNlbmRpZiAvKiBHVE9ET05FQVJHICovCisJPCAwKQorICAgICAgcmV0dXJuKC0xKTsKKyAgICBp ZiAobXNlY2Jhc2UgPT0gMEwpIHsJCS8qIEZpcnN0IGNhbGwsIHNldCBiYXNlIHRpbWUuICovCisJ bXNlY2Jhc2UgPSB0di50dl9zZWM7CisJZGVidWcoRjEwMSwiZ2V0bXNlYyBiYXNlIiwiIixtc2Vj YmFzZSk7CisgICAgfQorICAgIHJldHVybigoKHR2LnR2X3NlYyAtIG1zZWNiYXNlKSAqIDEwMDBM KSArICh0di50dl91c2VjIC8gMTAwMEwpKTsKK30KKyNlbmRpZiAvKiBHRVRNU0VDICovCisjZW5k aWYgLyogQ09NTUVOVCAqLworCisjaWZkZWYgU0VMRUNUCitpbnQKK3R0d2FpdChmZCwgc2Vjcykg aW50IGZkLCBzZWNzOyB7CisgICAgaW50IHg7CisgICAgZmRfc2V0IHJmZHM7CisgICAgRkRfWkVS TygmcmZkcyk7CisgICAgRkRfU0VUKGZkLCZyZmRzKTsKKyAgICB0di50dl9zZWMgPSBzZWNzOwor ICAgIHR2LnR2X3VzZWMgPSAwTDsKKyAgICBlcnJubyA9IDA7CisgICAgaWYgKCh4ID0gc2VsZWN0 KEZEX1NFVFNJWkUsCisjaWZkZWYgSFBVWDkKKwkJICAgIChpbnQgKikKKyNlbHNlCisjaWZkZWYg SFBVWDEwMDAKKwkJICAgIChpbnQgKikKKyNlbmRpZiAvKiBIUFVYMTAwMCAqLworI2VuZGlmIC8q IEhQVVg5ICovCisJCSAgICAmcmZkcywKKwkJICAgIDAsIDAsICZ0dikpIDwgMCkgeworCWRlYnVn KEYxMDEsInR0d2FpdCBzZWxlY3QgZXJybm8iLCIiLGVycm5vKTsKKwlyZXR1cm4oMCk7CisgICAg fSBlbHNlIHsKKwlkZWJ1ZyhGMTAxLCJ0dHdhaXQgT0siLCIiLGVycm5vKTsKKwl4ID0gRkRfSVNT RVQoZmQsICZyZmRzKTsKKwlkZWJ1ZyhGMTAxLCJ0dHdhaXQgc2VsZWN0IHgiLCIiLHgpOworCXJl dHVybih4ID8gMSA6IDApOworICAgIH0KK30KKyNlbmRpZiAvKiBTRUxFQ1QgKi8KKworaW50Citt c2xlZXAobSkgaW50IG07IHsKKy8qCisgIE90aGVyIHBvc3NpYmlsaXRpZXMgaGVyZSBhcmU6Cisg ICBuYW5vc2xlZXAoKSwgcmVwb3J0ZWRseSBkZWZpbmVkIGluIFBPU0lYLjQuCisgICBzZ2luYXAo KSwgSVJJWCBvbmx5IChiYWNrIHRvIHdoYXQgSVJJWCB2ZXJzaW9uIEkgZG9uJ3Qga25vdykuCisq LworI2lmZGVmIFBsYW45CisgICAgcmV0dXJuIF9TTEVFUChtKTsKKyNlbHNlCisjaWZkZWYgQkVP U09SQkVCT1gKKyAgICBzbm9vemUobSoxMDAwKTsKKyNlbHNlIC8qIEJFT1NPUkJFQk9YICovCisj aWZkZWYgU0VMRUNUCisgICAgaW50IHQxLCB4OworICAgIGRlYnVnKEYxMDEsIm1zbGVlcCBTRUxF Q1QgMSIsIiIsbSk7CisgICAgaWYgKG0gPD0gMCkgcmV0dXJuKDApOworICAgIGlmIChtID49IDEw MDApIHsJCQkvKiBDYXRjaCBiaWcgYXJndW1lbnRzLiAqLworCXNsZWVwKG0vMTAwMCk7CisJbSA9 IG0gJSAxMDAwOworCWlmIChtIDwgMTApIHJldHVybigwKTsKKyAgICB9CisgICAgZGVidWcoRjEw MSwibXNsZWVwIFNFTEVDVCAyIiwiIixtKTsKKyNpZmRlZiBCRUxMVjEwCisgICAgeCA9IHNlbGVj dCggMCwgKGZkX3NldCAqKTAsIChmZF9zZXQgKikwLCAoZmRfc2V0ICopMCwgbSApOworICAgIGRl YnVnKEYxMDEsIm1zbGVlcCBCRUxMVjEwIHNlbGVjdCIsIiIseCk7CisjZWxzZSAvKiBCRUxMVjEw ICovCisjaWZkZWYgSFBVWDkKKyAgICBnZXR0aW1lb2ZkYXkoJnR2LCAmdHopOworI2Vsc2UKKwor I2lmbmRlZiBDT0hFUkVOVAorI2lmZGVmIEdUT0RPTkVBUkcKKyAgICBpZiAoZ2V0dGltZW9mZGF5 KCZ0dikgPCAwKQorI2Vsc2UKKyNpZmRlZiBQVFgKKyAgICBpZiAoZ2V0dGltZW9mZGF5KCZ0dixO VUxMKSA8IDApCisjZWxzZQorI2lmZGVmIE5PVElNRVpPTkUKKyAgICBpZiAoZ2V0dGltZW9mZGF5 KCZ0diwgTlVMTCkgPCAwKQkvKiB3b25kZXIgd2hhdCB0aGlzIGRvZXMuLi4gKi8KKyNlbHNlCisg ICAgaWYgKGdldHRpbWVvZmRheSgmdHYsICZ0eikgPCAwKQorI2VuZGlmIC8qIE5PVElNRVpPTkUg Ki8KKyNlbmRpZiAvKiBQVFggKi8KKyNlbmRpZiAvKiBHVE9ET05FQVJHICovCisgICAgICByZXR1 cm4oLTEpOworICAgIHQxID0gdHYudHZfc2VjOyAgICAgICAgICAgICAgICAgICAgIC8qIFNlY29u ZHMgKi8KKyNlbmRpZiAvKiBDT0hFUkVOVCAqLworI2VuZGlmIC8qIEhQVVg5ICovCisgICAgdHYu dHZfc2VjID0gMDsgICAgICAgICAgICAgICAgICAgICAgLyogVXNlIHNlbGVjdCgpICovCisgICAg dHYudHZfdXNlYyA9IG0gKiAxMDAwTDsKKyNpZmRlZiBCU0Q0NAorICAgIHggPSBzZWxlY3QoIDAs IChmZF9zZXQgKikwLCAoZmRfc2V0ICopMCwgKGZkX3NldCAqKTAsICZ0diApOworICAgIGRlYnVn KEYxMDEsIm1zbGVlcCBCU0Q0NCBzZWxlY3QiLCIiLHgpOworI2Vsc2UgLyogQlNENDQgKi8KKyNp ZmRlZiBfX2xpbnV4X18KKyAgICB4ID0gc2VsZWN0KCAwLCAoZmRfc2V0ICopMCwgKGZkX3NldCAq KTAsIChmZF9zZXQgKikwLCAmdHYgKTsKKyAgICBkZWJ1ZyhGMTAxLCJtc2xlZXAgX19saW51eF9f IHNlbGVjdCIsIiIseCk7CisjZWxzZSAvKiBfX2xpbnV4X18gKi8KKyNpZmRlZiBCU0Q0MworICAg IHggPSBzZWxlY3QoIDAsIChmZF9zZXQgKikwLCAoZmRfc2V0ICopMCwgKGZkX3NldCAqKTAsICZ0 diApOworICAgIGRlYnVnKEYxMDEsIm1zbGVlcCBCU0Q0MyBzZWxlY3QiLCIiLHgpOworI2Vsc2Ug LyogQlNENDMgKi8KKyNpZmRlZiBRTlg2CisgICAgeCA9IHNlbGVjdCggMCwgKGZkX3NldCAqKTAs IChmZF9zZXQgKikwLCAoZmRfc2V0ICopMCwgJnR2ICk7CisgICAgZGVidWcoRjEwMSwibXNsZWVw IFFOWDYgc2VsZWN0IiwiIix4KTsKKyNlbHNlIC8qIFFOWDYgKi8KKyNpZmRlZiBRTlgKKyAgICB4 ID0gc2VsZWN0KCAwLCAoZmRfc2V0ICopMCwgKGZkX3NldCAqKTAsIChmZF9zZXQgKikwLCAmdHYg KTsKKyAgICBkZWJ1ZyhGMTAxLCJtc2xlZXAgUU5YIHNlbGVjdCIsIiIseCk7CisjZWxzZSAvKiBR TlggKi8KKyNpZmRlZiBDT0hFUkVOVAorICAgIHggPSBzZWxlY3QoIDAsIChmZF9zZXQgKikwLCAo ZmRfc2V0ICopMCwgKGZkX3NldCAqKTAsICZ0diApOworICAgIGRlYnVnKEYxMDEsIm1zbGVlcCBD T0hFUkVOVCBzZWxlY3QiLCIiLHgpOworI2Vsc2UgLyogQ09IRVJFTlQgKi8KKyNpZmRlZiBIUFVY MTAwMAkJCQkvKiAxMC4wMCBvbmx5LCBub3QgMTAuMTAgb3IgbGF0ZXIgKi8KKyAgICB4ID0gc2Vs ZWN0KCAwLCAoaW50ICopMCwgKGludCAqKTAsIChpbnQgKikwLCAmdHYgKTsKKyAgICBkZWJ1ZyhG MTAxLCJtc2xlZXAgSFAtVVggMTAuMDAgc2VsZWN0IiwiIix4KTsKKyNlbHNlIC8qIEhQVVgxMDAw ICovCisjaWZkZWYgU1ZSNAorICAgIHggPSBzZWxlY3QoIDAsIChmZF9zZXQgKikwLCAoZmRfc2V0 ICopMCwgKGZkX3NldCAqKTAsICZ0diApOworICAgIGRlYnVnKEYxMDEsIm1zbGVlcCBTVlI0IHNl bGVjdCIsIiIseCk7CisjZWxzZSAvKiBTVlI0ICovCisjaWZkZWYgT1NGNDAKKyAgICB4ID0gc2Vs ZWN0KCAwLCAoZmRfc2V0ICopMCwgKGZkX3NldCAqKTAsIChmZF9zZXQgKikwLCAmdHYgKTsKKyAg ICBkZWJ1ZyhGMTAxLCJtc2xlZXAgT1NGNDAgc2VsZWN0IiwiIix4KTsKKyNlbHNlIC8qIE9TRjQw ICovCisjaWZkZWYgUFRYCisgICAgeCA9IHNlbGVjdCggMCwgKGZkX3NldCAqKTAsIChmZF9zZXQg KikwLCAoZmRfc2V0ICopMCwgJnR2ICk7CisgICAgZGVidWcoRjEwMSwibXNsZWVwIE9TRjQwIHNl bGVjdCIsIiIseCk7CisjZWxzZQorICAgIHggPSBzZWxlY3QoIDAsIChpbnQgKikwLCAoaW50ICop MCwgKGludCAqKTAsICZ0diApOworICAgIGRlYnVnKEYxMDEsIm1zbGVlcCBjYXRjaC1hbGwgc2Vs ZWN0IiwiIix4KTsKKyNlbmRpZiAvKiBQVFggKi8KKyNlbmRpZiAvKiBPU0Y0MCAqLworI2VuZGlm IC8qIEhQMTAwMCAqLworI2VuZGlmIC8qIFNWUjQgKi8KKyNlbmRpZiAvKiBDT0hFUkVOVCAqLwor I2VuZGlmIC8qIFFOWCAqLworI2VuZGlmIC8qIFFOWDYgKi8KKyNlbmRpZiAvKiBCU0Q0MyAqLwor I2VuZGlmIC8qIF9fbGludXhfXyAqLworI2VuZGlmIC8qIEJTRDQ0ICovCisjZW5kaWYgLyogQkVM TFYxMCAqLworICAgIHJldHVybigwKTsKKworI2Vsc2UJCQkJCS8qIE5vdCBTRUxFQ1QgKi8KKyNp ZmRlZiBDS19QT0xMCQkJCS8qIFdlIGhhdmUgcG9sbCgpICovCisgICAgc3RydWN0IHBvbGxmZCBw ZmQ7CQkJLyogU3VwcGx5IGEgdmFsaWQgYWRkcmVzcyBmb3IgcG9sbCgpICovCisKKyNpZmRlZiBP RFQzMAkJCQkvKiBCdXQgaW4gU0NPIE9EVCAzLjAgKi8KKyNpZmRlZiBOQVAJCQkJLyogd2Ugc2hv dWxkIHVzZSBuYXAoKSBpbnN0ZWFkICovCisgICAgZGVidWcoRjEwMSwibXNsZWVwIE9EVCAzLjAg TkFQIiwiIixtKTsgLyogYmVjYXVzZSB1c2luZyBwb2xsKCkgaGVyZSAqLworICAgIG5hcCgobG9u ZyltKTsJCQkgICAvKiBzZWVtcyB0byBicmVhayBkaWFsaW5nLiAqLworICAgIHJldHVybigwKTsK KyNlbHNlCisgICAgZGVidWcoRjEwMSwibXNsZWVwIE9EVCAzLjAgUE9MTCIsIiIsbSk7CisgICAg cG9sbCgmcGZkLCAwLCBtKTsKKyAgICByZXR1cm4oMCk7CisjZW5kaWYgLyogTkFQICovCisjZWxz ZQorICAgIGRlYnVnKEYxMDEsIm1zbGVlcCBQT0xMIiwiIixtKTsKKyAgICBwb2xsKCZwZmQsIDAs IG0pOworICAgIHJldHVybigwKTsKKyNlbmRpZiAvKiBPRFQzMCAqLworCisvKgorICBXZSBjb3Vs ZCBoYW5kbGUgdGhlIGFib3ZlIG1vcmUgY2xlYW5seSBieSBqdXN0IGxldHRpbmcgbmFwKCkgYWx3 YXlzCisgIHRha2UgcHJlY2VkZW5jZSBvdmVyIHBvbGwoKSBpbiB0aGlzIHJvdXRpbmUsIGJ1dCB0 aGVyZSBpcyBubyB3YXkgdG8ga25vdworICB3aGV0aGVyIHRoYXQgd291bGQgYnJlYWsgc29tZXRo aW5nIGVsc2UuCisqLworCisjZWxzZQkJCQkJLyogTm90IFBPTEwgKi8KKyNpZmRlZiBVU0xFRVAK Ky8qCisgICJUaGlzIHJvdXRpbmUgaXMgaW1wbGVtZW50ZWQgdXNpbmcgc2V0aXRpbWVyKDIpOyBp dCByZXF1aXJlcyBlaWdodAorICBzeXN0ZW0gY2FsbHMuLi4iLiAgSW4gb3RoZXIgd29yZHMsIGl0 IG1pZ2h0IHRha2UgNSBtaW51dGVzIHRvIHNsZWVwCisgIDEwIG1pbGxpc2Vjb25kcy4uLgorKi8K KyAgICBkZWJ1ZyhGMTAxLCJtc2xlZXAgVVNMRUVQIiwiIixtKTsKKyAgICBpZiAobSA+PSAxMDAw KSB7CQkJLyogQ2F0Y2ggYmlnIGFyZ3VtZW50cy4gKi8KKwlzbGVlcChtLzEwMDApOworCW0gPSBt ICUgMTAwMDsKKwlpZiAobSA8IDEwKSByZXR1cm4oMCk7CisgICAgfQorICAgIHVzbGVlcCgodW5z aWduZWQgaW50KShtICogMTAwMCkpOworICAgIHJldHVybigwKTsKKyNlbHNlCisjaWZkZWYgYWVn aXMKKyAgICB0aW1lXyRjbG9ja190IGR1cjsKKyAgICBkZWJ1ZyhGMTAxLCJtc2xlZXAgYWVnaXMi LCIiLG0pOworICAgIGR1ci5jMi5oaWdoMTYgPSAwOworICAgIGR1ci5jMi5sb3czMiAgPSAyNTAg KiBtOyAvKiBvbmUgbWlsbGlzZWNvbmQgPSAyNTAgZm91ciBtaWNyb3NlY29uZCB0aWNrcyAqLwor ICAgIHRpbWVfJHdhaXQodGltZV8kcmVsYXRpdmUsIGR1ciwgc3QpOworICAgIHJldHVybigwKTsK KyNlbHNlCisjaWZkZWYgUFJPVlgxCisgICAgZGVidWcoRjEwMSwibXNsZWVwIFZlbml4IiwiIixt KTsKKyAgICBpZiAobSA8PSAwKSByZXR1cm4oMCk7CisgICAgc2xlZXAoLSgobSAqIDYwICsgNTAw KSAvIDEwMDApKTsKKyAgICByZXR1cm4oMCk7CisjZWxzZQorI2lmZGVmIE5BUAorICAgIGRlYnVn KEYxMDEsIm1zbGVlcCBOQVAiLCIiLG0pOworICAgIG5hcCgobG9uZyltKTsKKyAgICByZXR1cm4o MCk7CisjZWxzZQorI2lmZGVmIEFUVFNWCisjaWZuZGVmIEJTRDQ0CisgICAgZXh0ZXJuIGxvbmcg dGltZXMoKTsJCS8qIE9yICNpbmNsdWRlIDx0aW1lcy5oPiA/ICovCisjZW5kaWYgLyogQlNENDQg Ki8KKyAgICBsb25nIHQxLCB0MiwgdGFycmF5WzRdOworICAgIGludCB0MzsKKyAgICBjaGFyICpj cCA9IGdldGVudigiSFoiKTsKKyAgICBpbnQgQ0xPQ0tfVElDSzsKKyAgICBpbnQgaGVydHo7CisK KyAgICBpZiAoY3AgJiYgKGhlcnR6ID0gYXRvaShjcCkpKSB7CisgICAgICAgIENMT0NLX1RJQ0sg ID0gMTAwMCAvIGhlcnR6OworICAgIH0gZWxzZSB7CQkJCS8qIHByb2JhYmx5IHNpbmdsZSB1c2Vy IG1vZGUgKi8KKyNpZmRlZiBIWgorICAgICAgICBDTE9DS19USUNLICA9IDEwMDAgLyBIWjsKKyNl bHNlCisJc3RhdGljIHdhcm5lZCA9IDA7CisJLyogSFogYWx3YXlzIGV4aXN0cyBpbiwgZm9yIGlu c3RhbmNlLCBTQ08gWGVuaXgsIHNvIHlvdSBkb24ndCBoYXZlIHRvCisJICogbWFrZSBzcGVjaWFs ICNpZmRlZnMgZm9yIFhFTklYIGhlcmUsIGxpa2UgaW4gdmVyIDRGLiBBbHNvLCBpZiB5b3UKKwkg KiBoYXZlIFhlbml4LCB5b3UgaGF2ZSBzaG91bGQgaGF2ZSBuYXAoKSwgc28gdGhlIGJlc3QgaXMg dG8gdXNlIC1ETkFQCisJICogaW4gdGhlIG1ha2VmaWxlLiBNb3N0IHN5c3RlbXMgaGF2ZSBIWi4K KwkgKi8KKwlDTE9DS19USUNLID0gMTc7CQkvKiAxLzYwIHNlYyAqLworCWlmICghd2FybmVkKSB7 CisgICAgICAgICAgcHJpbnRmKCJ3YXJuaW5nOiBlbnZpcm9ubWVudCB2YXJpYWJsZSBIWiBiYWQu Li4gdXNpbmcgSFo9JWRcclxuIiwKKwkJIDEwMDAgLyBDTE9DS19USUNLKTsKKyAgICAgICAgICB3 YXJuZWQgPSAxOworCX0KKyNlbmRpZiAvKiAhSFogKi8KKyAgICB9CisgICAgZGVidWcoRjEwMSwi bXNsZWVwIEFUVFNWIiwiIixtKTsKKyAgICBpZiAobSA8PSAwKSByZXR1cm4oMCk7CisgICAgaWYg KG0gPj0gMTAwMCkgewkJCS8qIENhdGNoIGJpZyBhcmd1bWVudHMuICovCisJc2xlZXAobS8xMDAw KTsKKwltID0gbSAlIDEwMDA7CisJaWYgKG0gPCAxMCkgcmV0dXJuKDApOworICAgIH0KKyAgICBp ZiAoKHQxID0gdGltZXModGFycmF5KSkgPCAwKSByZXR1cm4oLTEpOworICAgIHdoaWxlICgxKSB7 CisgICAgICAgIGlmICgodDIgPSB0aW1lcyh0YXJyYXkpKSA8IDApIHJldHVybigtMSk7CisgICAg ICAgIHQzID0gKChpbnQpKHQyIC0gdDEpKSAqIENMT0NLX1RJQ0s7CisgICAgICAgIGlmICh0MyA+ IG0pIHJldHVybih0Myk7CisgICAgfQorI2Vsc2UgLyogTm90IEFUVFNWICovCisjaWZkZWYgTVNM RlRJTUUJCQkJLyogVXNlIGZ0aW1lKCkgbG9vcC4uLiAqLworICAgIGludCB0MSwgdDMgPSAwOwor ICAgIGRlYnVnKEYxMDEsIm1zbGVlcCBNU0xGVElNRSIsIiIsbSk7CisgICAgaWYgKG0gPD0gMCkg cmV0dXJuKDApOworICAgIGlmIChtID49IDEwMDApIHsJCQkvKiBDYXRjaCBiaWcgYXJndW1lbnRz LiAqLworCXNsZWVwKG0vMTAwMCk7CisJbSA9IG0gJSAxMDAwOworCWlmIChtIDwgMTApIHJldHVy bigwKTsKKyAgICB9CisjaWZkZWYgUU5YCisgICAgZnRpbWUoJmZ0cCk7CQkJLyogdm9pZCBmdGlt ZSgpIGluIFFOWCAqLworI2Vsc2UKKyAgICBpZiAoZnRpbWUoJmZ0cCkgPCAwKSByZXR1cm4oLTEp OwkvKiBHZXQgYmFzZSB0aW1lLiAqLworI2VuZGlmIC8qIFFOWCAqLworICAgIHQxID0gKChmdHAu dGltZSAmIDB4ZmYpICogMTAwMCkgKyBmdHAubWlsbGl0bTsKKyAgICB3aGlsZSAoMSkgeworICAg ICAgICBmdGltZSgmZnRwKTsJCQkvKiBHZXQgY3VycmVudCB0aW1lIGFuZCBjb21wYXJlLiAqLwor ICAgICAgICB0MyA9ICgoKGZ0cC50aW1lICYgMHhmZikgKiAxMDAwKSArIGZ0cC5taWxsaXRtKSAt IHQxOworICAgICAgICBpZiAodDMgPiBtKSByZXR1cm4oMCk7CisgICAgfQorI2Vsc2UKKy8qIFRo aXMgaW5jbHVkZXMgdHJ1ZSBQT1NJWCwgd2hpY2ggaGFzIG5vIHdheSB0byBkbyB0aGlzLiAqLwor ICAgIGRlYnVnKEYxMDEsIm1zbGVlcCBidXN5IGxvb3AiLCIiLG0pOworICAgIGlmIChtID49IDEw MDApIHsJCQkvKiBDYXRjaCBiaWcgYXJndW1lbnRzLiAqLworCXNsZWVwKG0vMTAwMCk7CisJbSA9 IG0gJSAxMDAwOworCWlmIChtIDwgMTApIHJldHVybigwKTsKKyAgICB9CisgICAgaWYgKG0gPiAw KSB3aGlsZSAobSA+IDApIG0tLTsJLyogSnVzdCBhIGR1bWIgYnVzeSBsb29wICovCisgICAgcmV0 dXJuKDApOworI2VuZGlmIC8qIE1TTEZUSU1FICovCisjZW5kaWYgLyogQVRUU1YgKi8KKyNlbmRp ZiAvKiBOQVAgKi8KKyNlbmRpZiAvKiBQUk9WWDEgKi8KKyNlbmRpZiAvKiBhZWdpcyAqLworI2Vu ZGlmIC8qIENLX1BPTEwgKi8KKyNlbmRpZiAvKiBTRUxFQ1QgKi8KKyNlbmRpZiAvKiBCRU9TT1JC RUJPWCAqLworI2VuZGlmIC8qIFVTTEVFUCAqLworI2VuZGlmIC8qIFBsYW45ICovCit9CisKKy8q ICBSIFQgSSBNIEUgUiAtLSAgUmVzZXQgZWxhcHNlZCB0aW1lIGNvdW50ZXIgICovCisKK1ZPSUQK K3J0aW1lcigpIHsKKyAgICB0Y291bnQgPSB0aW1lKCAodGltZV90ICopIDAgKTsKK30KKworCisv KiAgRyBUIEkgTSBFIFIgLS0gIEdldCBjdXJyZW50IHZhbHVlIG9mIGVsYXBzZWQgdGltZSBjb3Vu dGVyIGluIHNlY29uZHMgICovCisKK2ludAorZ3RpbWVyKCkgeworICAgIGludCB4OworICAgIHgg PSAoaW50KSAodGltZSggKHRpbWVfdCAqKSAwICkgLSB0Y291bnQpOworICAgIGRlYnVnKEYxMDEs Imd0aW1lciIsIiIseCk7CisgICAgcmV0dXJuKCAoeCA8IDApID8gMCA6IHggKTsKK30KKworI2lm ZGVmIEdGVElNRVIKKy8qCisgIEZsb2F0aW5nLXBvaW50IHRpbWVycy4gIFJlcXVpcmUgbm90IG9u bHkgZmxvYXRpbmcgcG9pbnQgc3VwcG9ydCwgYnV0CisgIGFsc28gZ2V0dGltZW9mZGF5KCkuCisq Lworc3RhdGljIHN0cnVjdCB0aW1ldmFsIHR6ZXJvOworCitWT0lECityZnRpbWVyKCkgeworI2lm ZGVmIEdUT0RPTkVBUkcJCQkvKiBBY2NvdW50IGZvciBNb3QncyBkZWZpbml0aW9uICovCisgICAg KFZPSUQpIGdldHRpbWVvZmRheSgmdHplcm8pOworI2Vsc2UKKyAgICAoVk9JRCkgZ2V0dGltZW9m ZGF5KCZ0emVybywgKHN0cnVjdCB0aW1lem9uZSAqKTApOworI2VuZGlmIC8qIEdUT0RPTkVBUkcg Ki8KK30KKworQ0tGTE9BVAorZ2Z0aW1lcigpIHsKKyAgICBzdHJ1Y3QgdGltZXZhbCB0bm93LCB0 ZGVsdGE7CisgICAgQ0tGTE9BVCBzOworI2lmZGVmIERFQlVHCisgICAgY2hhciBmcGJ1Zls2NF07 CisjZW5kaWYgLyogREVCVUcgKi8KKyNpZmRlZiBHVE9ET05FQVJHCQkJLyogQWNjb3VudCBmb3Ig TW90J3MgZGVmaW5pdGlvbiAqLworICAgIChWT0lEKSBnZXR0aW1lb2ZkYXkoJnRub3cpOworI2Vs c2UKKyAgICAoVk9JRCkgZ2V0dGltZW9mZGF5KCZ0bm93LCAoc3RydWN0IHRpbWV6b25lICopMCk7 CisjZW5kaWYgLyogR1RPRE9ORUFSRyAqLworCisgICAgdGRlbHRhLnR2X3NlYyA9IHRub3cudHZf c2VjIC0gdHplcm8udHZfc2VjOworICAgIHRkZWx0YS50dl91c2VjID0gdG5vdy50dl91c2VjIC0g dHplcm8udHZfdXNlYzsKKworICAgIGlmICh0ZGVsdGEudHZfdXNlYyA8IDApIHsKKwl0ZGVsdGEu dHZfc2VjLS07CisJdGRlbHRhLnR2X3VzZWMgKz0gMTAwMDAwMDsKKyAgICB9CisgICAgcyA9IChD S0ZMT0FUKSB0ZGVsdGEudHZfc2VjICsgKChDS0ZMT0FUKSB0ZGVsdGEudHZfdXNlYyAvIDEwMDAw MDAuMCk7CisgICAgaWYgKHMgPCBHRk1JTlRJTUUpCisgICAgICBzID0gR0ZNSU5USU1FOworI2lm ZGVmIERFQlVHCisgICAgaWYgKGRlYmxvZykgeworCXNwcmludGYoZnBidWYsIiVmIixzKTsKKwlk ZWJ1ZyhGMTEwLCJnZnRpbWVyIixmcGJ1ZiwwKTsKKyAgICB9CisjZW5kaWYgLyogREVCVUcgKi8K KyAgICByZXR1cm4ocyk7Cit9CisjZW5kaWYgLyogR0ZUSU1FUiAqLworCisvKiAgWiBUIEkgTSBF ICAtLSAgUmV0dXJuIGFzY3RpbWUoKS1mb3JtYXQgZGF0ZS90aW1lIHN0cmluZyAgKi8KKy8qCisg IE5PVEU6IGFzIGEgc2lkZSBlZmZlY3Qgb2YgY2FsbGluZyB0aGlzIHJvdXRpbmUsIHdlIGNhbiBh bHNvIHNldCB0aGUKKyAgZm9sbG93aW5nIHR3byB2YXJpYWJsZXMsIGdpdmluZyB0aGUgbWljcm8t IGFuZCBtaWxsaXNlY29uZHMgKGZyYWN0aW9ucyBvZgorICBzZWNvbmRzKSBvZiB0aGUgY2xvY2sg dGltZS4gIEN1cnJlbnRseSB0aGlzIGlzIGRvbmUgb25seSBpbiBCU0QtYmFzZWQgYnVpbGRzCisg IHRoYXQgdXNlIGdldHRpbWVvZmRheSgpLiAgV2hlbiB0aGVzZSB2YXJpYWJsZXMgYXJlIG5vdCBm aWxsZWQgaW4sIHRoZXkgYXJlCisgIGxlZnQgd2l0aCBhIHZhbHVlIG9mIC0xTC4KKyovCitzdGF0 aWMgY2hhciBhc2N0bWJ1Zls2NF07CisKK1ZPSUQKK3p0aW1lKHMpIGNoYXIgKipzOyB7CisKKyNp ZmRlZiBHRlRJTUVSCisvKgorICBUaGUgZ2V0dGltZW9mZGF5KCkgbWV0aG9kLCB3aGljaCBhbHNv IHNldHMgenRtc2VjIGFuZCB6dHVzZWMsIHdvcmtzIGZvcgorICBhbGwgR0ZUSU1FUiBidWlsZHMu ICBOT1RFOiB6dG1zZWMgYW5kIHp0dXNlYyBhcmUgZGVmaW5lZCBpbiBja2NtYWkuYywKKyAgYW5k IGV4dGVybiBkZWNsYXJhdGlvbnMgZm9yIHRoZW0gYXJlIGluIGNrY2RlYi5oOyB0aHVzIHRoZXkg YXJlCisgIGRlY2xhcmVkIGluIHRoaXMgZmlsZSBieSBpbmNsdXNpb24gb2YgY2tjZGViLmguCisq LworICAgIGNoYXIgKmFzY3RpbWUoKTsKKyAgICBzdHJ1Y3QgdG0gKmxvY2FsdGltZSgpOworICAg IHN0cnVjdCB0bSAqdHA7CisgICAgenRtc2VjID0gLTFMOworICAgIHp0dXNlYyA9IC0xTDsKKwor ICAgIGlmICghcykKKyAgICAgIGRlYnVnKEYxMDAsInp0aW1lIHM9PU5VTEwiLCIiLDApOworCisj aWZkZWYgR1RPRE9ORUFSRworICAgIC8qIE5vIDJuZCBhcmcgaW4gTW90b3JvbGEgU1Y4OCBhbmQg c29tZSBvdGhlcnMgKi8KKyAgICBpZiAoZ2V0dGltZW9mZGF5KCZ0dikgPiAtMSkKKyNlbHNlCisj aWZuZGVmIENPSEVSRU5UCisjaWZkZWYgUFRYCisgICAgaWYgKGdldHRpbWVvZmRheSgmdHYsTlVM TCkgPiAtMSkKKyNlbHNlCisjaWZkZWYgTk9USU1FWk9ORQorICAgIGlmIChnZXR0aW1lb2ZkYXko JnR2LCBOVUxMKSA+IC0xKQkvKiB3b25kZXIgd2hhdCB0aGlzIGRvZXMuLi4gKi8KKyNlbHNlCisg ICAgaWYgKGdldHRpbWVvZmRheSgmdHYsICZ0eikgPiAtMSkKKyNlbmRpZiAvKiBOT1RJTUVaT05F ICovCisjZW5kaWYgLyogUFRYICovCisjZW5kaWYgLyogQ09IRVJFTlQgKi8KKyNlbmRpZiAvKiBH VE9ET05FQVJHICovCisgICAgICB7CQkJCQkvKiBGaWxsIGluIHRtIHN0cnVjdCAqLworCXp0dXNl YyA9IHR2LnR2X3VzZWM7CQkvKiBNaWNyb3NlY29uZHMgKi8KKwl6dG1zZWMgPSB6dHVzZWMgLyAx MDAwTDsJLyogTWlsbGlzZWNvbmRzICovCisjaWZkZWYgSFBVWDkKKwl7CisJICAgIHRpbWVfdCB6 ejsKKwkgICAgenogPSB0di50dl9zZWM7CisJICAgIHRwID0gbG9jYWx0aW1lKCZ6eik7CS8qIENv bnZlcnQgdG8gbG9jYWwgdGltZSAqLworCX0KKyNlbHNlCisjaWZkZWYgSFBVWDEwMDAKKwl7CisJ ICAgIHRpbWVfdCB6ejsKKwkgICAgenogPSB0di50dl9zZWM7CisJICAgIHRwID0gbG9jYWx0aW1l KCZ6eik7CisJfQorI2Vsc2UKKyNpZmRlZiBMSU5VWAorCXsgICAvKiBhdm9pZCB1bmFsaWduZWQg YWNjZXNzIHRyYXAgb24gNjQtYml0IHBsYXRmb3JtcyAqLworCSAgICB0aW1lX3Qgeno7CisJICAg IHp6ID0gdHYudHZfc2VjOworCSAgICB0cCA9IGxvY2FsdGltZSgmenopOworCX0KKyNlbHNlCisj aWZkZWYgTUFDT1NYCisJdHAgPSBsb2NhbHRpbWUoKHRpbWVfdCAqKSZ0di50dl9zZWMpOyAvKiBD b252ZXJ0IHRvIGxvY2FsIHRpbWUgKi8KKyNlbHNlCisJdHAgPSBsb2NhbHRpbWUoJnR2LnR2X3Nl Yyk7CisjZW5kaWYgLyogTUFDT1NYICovCisjZW5kaWYgLyogTElOVVggKi8KKyNlbmRpZiAvKiBI UFVYMTAwMCAqLworI2VuZGlmIC8qIEhQVVg5ICovCisJaWYgKHMpIHsKKwkgICAgY2hhciAqIHMy OworCSAgICBzMiA9IGFzY3RpbWUodHApOwkJLyogQ29udmVydCByZXN1bHQgdG8gQVNDSUkgc3Ry aW5nICovCisJICAgIGFzY3RtYnVmWzBdID0gJ1wwJzsKKwkgICAgaWYgKHMyKSBja3N0cm5jcHko YXNjdG1idWYsczIsNjQpOworCSAgICAqcyA9IGFzY3RtYnVmOworCSAgICBkZWJ1ZyhGMTExLCJ6 dGltZSBHRlRJTUVSIGdldHRpbWVvZmRheSIsKnMsenR1c2VjKTsKKwl9CisgICAgfQorI2Vsc2Ug IC8qIE5vdCBHRlRJTUVSICovCisKKyN1bmRlZiBaVElNRVY3CQkJCS8qIFdoaWNoIHN5c3RlbXMg bmVlZCB0byB1c2UgKi8KKyNpZmRlZiBDT0hFUkVOVAkJCQkvKiBvbGQgVU5JWCBWZXJzaW9uIDcg d2F5Li4uICovCisjZGVmaW5lIFpUSU1FVjcKKyNlbmRpZiAvKiBDT0hFUkVOVCAqLworI2lmZGVm IFRPV0VSMQorI2RlZmluZSBaVElNRVY3CisjZW5kaWYgLyogVE9XRVIxICovCisjaWZkZWYgQU5Z QlNECisjaWZuZGVmIEJTRDQyCisjZGVmaW5lIFpUSU1FVjcKKyNlbmRpZiAvKiBCU0Q0MiAqLwor I2VuZGlmIC8qIEFOWUJTRCAqLworI2lmZGVmIFY3CisjaWZuZGVmIE1JTklYCisjZGVmaW5lIFpU SU1FVjcKKyNlbmRpZiAvKiBNSU5JWCAqLworI2VuZGlmIC8qIFY3ICovCisjaWZkZWYgUE9TSVgK KyNkZWZpbmUgWlRJTUVWNworI2VuZGlmIC8qIFBPU0lYICovCisKKyNpZmRlZiBIUFVYMTAyMAor LyoKKyAgUHJvdG90eXBlcyBhcmUgaW4gPHRpbWUuaD4sIGluY2x1ZGVkIGFib3ZlLgorKi8KKyAg ICB0aW1lX3QgY2xvY2tfc3RvcmFnZTsKKyAgICBjbG9ja19zdG9yYWdlID0gdGltZSgodm9pZCAq KSAwKTsKKyAgICBpZiAocykgeworCSpzID0gY3RpbWUoJmNsb2NrX3N0b3JhZ2UpOworCWRlYnVn KEYxMTAsInp0aW1lOiBIUFVYIDEwLjIwIiwqcywwKTsKKyAgICB9CisjZWxzZQorI2lmZGVmIEFU VFNWCQkJCS8qIEFUJlQgd2F5ICovCisvKiAgZXh0ZXJuIGxvbmcgdGltZSgpOyAqLwkJLyogVGhl b3JldGljYWxseSB0aGVzZSBzaG91bGQgKi8KKyAgICBjaGFyICpjdGltZSgpOwkJCS8qIGFscmVh ZHkgYmVlbiBkY2wnZCBpbiA8dGltZS5oPiAqLworICAgIHRpbWVfdCBjbG9ja19zdG9yYWdlOwor ICAgIGNsb2NrX3N0b3JhZ2UgPSB0aW1lKAorI2lmZGVmIElSSVg2MAorCQkJICh0aW1lX3QgKikK KyNlbHNlCisjaWZkZWYgQlNENDQKKwkJCSAodGltZV90ICopCisjZWxzZQorCQkJIChsb25nICop CisjZW5kaWYgLyogQlNENDQgKi8KKyNlbmRpZiAvKiBJUklYNjAgKi8KKwkJCSAwICk7CisgICAg aWYgKHMpIHsKKwkqcyA9IGN0aW1lKCAmY2xvY2tfc3RvcmFnZSApOworCWRlYnVnKEYxMTAsInp0 aW1lOiBBVFRTViIsKnMsMCk7CisgICAgfQorI2Vsc2UKKyNpZmRlZiBQUk9WWDEJCQkJLyogVmVu aXggMS4wIHdheSAqLworICAgIGludCB1dGltZVsyXTsKKyAgICB0aW1lKHV0aW1lKTsKKyAgICBp ZiAocykgeworCSpzID0gY3RpbWUodXRpbWUpOworCWRlYnVnKEYxMTAsInp0aW1lOiBQUk9WWDEi LCpzLDApOworICAgIH0KKyNlbHNlCisjaWZkZWYgQlNENDIJCQkJLyogNC4yQlNEIHdheSAqLwor ICAgIGNoYXIgKmFzY3RpbWUoKTsKKyAgICBzdHJ1Y3QgdG0gKmxvY2FsdGltZSgpOworICAgIHN0 cnVjdCB0bSAqdHA7CisgICAgZ2V0dGltZW9mZGF5KCZ0diwgJnR6KTsKKyAgICB6dHVzZWMgPSB0 di50dl91c2VjOworICAgIHp0bXNlYyA9IHR2LnR2X3VzZWMgLyAxMDAwTDsKKyAgICB0cCA9IGxv Y2FsdGltZSgmdHYudHZfc2VjKTsKKyAgICBpZiAocykgeworCSpzID0gYXNjdGltZSh0cCk7CisJ ZGVidWcoRjExMSwienRpbWU6IEJTRDQyIiwqcyx6dHVzZWMpOworICAgIH0KKyNlbHNlCisjaWZk ZWYgTUlOSVgJCQkJLyogTUlOSVggd2F5ICovCisjaWZkZWYgQ09NTUVOVAorICAgIGV4dGVybiBs b25nIHRpbWUoKTsJCQkvKiBBbHJlYWR5IGdvdCB0aGVzZSBmcm9tIDx0aW1lLmg+ICovCisgICAg ZXh0ZXJuIGNoYXIgKmN0aW1lKCk7CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgIHRpbWVfdCB1 dGltZVsyXTsKKyAgICB0aW1lKHV0aW1lKTsKKyAgICBpZiAocykgeworCSpzID0gY3RpbWUodXRp bWUpOworCWRlYnVnKEYxMTAsInp0aW1lOiBNSU5JWCIsKnMsMCk7CisgICAgfQorI2Vsc2UKKyNp ZmRlZiBaVElNRVY3CQkJCS8qIFRoZSByZWd1bGFyIHdheSAqLworICAgIGNoYXIgKmFzY3RpbWUo KTsKKyAgICBzdHJ1Y3QgdG0gKmxvY2FsdGltZSgpOworICAgIHN0cnVjdCB0bSAqdHA7CisgICAg bG9uZyB4Y2xvY2s7CQkJLyogb3IgdW5zaWduZWQgbG9uZyBmb3IgQmVCb3g/ICovCisgICAgdGlt ZSgmeGNsb2NrKTsKKyAgICB0cCA9IGxvY2FsdGltZSgmeGNsb2NrKTsKKyAgICBpZiAocykgewor CSpzID0gYXNjdGltZSh0cCk7CisJZGVidWcoRjExMCwienRpbWU6IFpUSU1FVjciLCpzLDApOwor ICAgIH0KKyNlbHNlCQkJCQkvKiBDYXRjaC1hbGwgZm9yIG90aGVycy4uLiAqLworICAgIGlmIChz KSB7CisJKnMgPSAiRGF5IE1vbiAwMCAwMDowMDowMCAwMDAwXG4iOyAvKiBEdW1teSBpbiBhc2N0 aW1lKCkgZm9ybWF0ICovCisJZGVidWcoRjExMCwienRpbWU6IGNhdGNoLWFsbCIsKnMsMCk7Cisg ICAgfQorI2VuZGlmIC8qIFpUSU1FVjcgKi8KKyNlbmRpZiAvKiBNSU5JWCAqLworI2VuZGlmIC8q IEJTRDQyICovCisjZW5kaWYgLyogUFJPVlgxICovCisjZW5kaWYgLyogQVRUU1YgKi8KKyNlbmRp ZiAvKiBIUFVYMTAyMCAqLworI2VuZGlmIC8qIEdGVElNRVIgKi8KK30KKworLyogIEMgTyBOIEcg TSAgLS0gIEdldCBjb25zb2xlIHRlcm1pbmFsIG1vZGVzLiAgKi8KKworLyoKKyAgU2F2ZXMgaW5p dGlhbCBjb25zb2xlIG1vZGUsIGFuZCBlc3RhYmxpc2hlcyB2YXJpYWJsZXMgZm9yIHN3aXRjaGlu ZworICBiZXR3ZWVuIGN1cnJlbnQgKHByZXN1bWFibHkgbm9ybWFsKSBtb2RlIGFuZCBvdGhlciBt b2Rlcy4KKyAgU2hvdWxkIGJlIGNhbGxlZCB3aGVuIHByb2dyYW0gc3RhcnRzLCBidXQgb25seSBh ZnRlciBlc3RhYmxpc2hpbmcKKyAgd2hldGhlciBwcm9ncmFtIGlzIGluIHRoZSBmb3JlZ3JvdW5k IG9yIGJhY2tncm91bmQuCisgIFJldHVybnMgMSBpZiBpdCBnb3QgdGhlIG1vZGVzIE9LLCAwIGlm IGl0IGRpZCBub3RoaW5nLCAtMSBvbiBlcnJvci4KKyovCitpbnQKK2NvbmdtKCkgeworICAgIGlu dCBmZDsKKyAgICBpZiAoYmFja2dyZCB8fCAhaXNhdHR5KDApKSB7CS8qIElmIGluIGJhY2tncm91 bmQuICovCisJY2dtZiA9IC0xOwkJCS8qIERvbid0IGJvdGhlciwgbW9kZXMgYXJlIGdhcmJhZ2Uu ICovCisJcmV0dXJuKC0xKTsKKyAgICB9CisgICAgaWYgKGNnbWYgPiAwKSByZXR1cm4oMCk7CQkv KiBBbHJlYWR5IGRpZCB0aGlzLiAqLworICAgIGRlYnVnKEYxMDAsImNvbmdtIGdldHRpbmcgbW9k ZXMiLCIiLDApOyAvKiBOZWVkIHRvIGRvIGl0LiAqLworI2lmZGVmIGFlZ2lzCisgICAgaW9zXyRp bnFfdHlwZV91aWQoaW9zXyRzdGRpbiwgY29udWlkLCBzdCk7CisgICAgaWYgKHN0LmFsbCAhPSBz dGF0dXNfJG9rKSB7CisJZnByaW50ZihzdGRlcnIsICJwcm9ibGVtIGdldHRpbmcgc3RkaW4gb2Jq dHlwZTogIik7CisJZXJyb3JfJHByaW50KHN0KTsKKyAgICB9CisgICAgY29uY3JwID0gKGNvbnVp ZCA9PSBtYnhfJHVpZCk7CisgICAgY29uYnVmbiA9IDA7CisjZW5kaWYgLyogYWVnaXMgKi8KKwor I2lmbmRlZiBCRUJPWAorICAgIGlmICgoZmQgPSBvcGVuKENUVE5BTSwyKSkgPCAwKSB7CS8qIE9w ZW4gY29udHJvbGxpbmcgdGVybWluYWwgKi8KKyNpZmRlZiBDT01NRU5UCisJZnByaW50ZihzdGRl cnIsIkVycm9yIG9wZW5pbmcgJXNcbiIsIENUVE5BTSk7CisJcGVycm9yKCJjb25nbSIpOworCXJl dHVybigtMSk7CisjZWxzZQorCWZkID0gMDsKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgfQor I2Vsc2UKKyAgICBmZCA9IDA7CisjZW5kaWYgLyogIUJFQk9YICovCisjaWZkZWYgQlNENDRPUlBP U0lYCisgICAgaWYgKHRjZ2V0YXR0cihmZCwmY2NvbGQpIDwgMCkgcmV0dXJuKC0xKTsKKyAgICBp ZiAodGNnZXRhdHRyKGZkLCZjY2NicmspIDwgMCkgcmV0dXJuKC0xKTsKKyAgICBpZiAodGNnZXRh dHRyKGZkLCZjY3JhdykgPCAwKSByZXR1cm4oLTEpOworI2Vsc2UKKyNpZmRlZiBBVFRTVgorICAg IGlmIChpb2N0bChmZCxUQ0dFVEEsJmNjb2xkKSAgPCAwKSByZXR1cm4oLTEpOworICAgIGlmIChp b2N0bChmZCxUQ0dFVEEsJmNjY2JyaykgPCAwKSByZXR1cm4oLTEpOworICAgIGlmIChpb2N0bChm ZCxUQ0dFVEEsJmNjcmF3KSAgPCAwKSByZXR1cm4oLTEpOworI2lmZGVmIFZYVkUKKyAgICBjY2Ni cmsuY19saW5lID0gMDsJCQkvKiBTVFRZIGxpbmUgMCBmb3IgQ0RDIFZYL1ZFICovCisgICAgaWYg KGlvY3RsKGZkLFRDU0VUQSwmY2NjYnJrKSA8IDApIHJldHVybigtMSk7CisgICAgY2NyYXcuY19s aW5lID0gMDsJCQkvKiBTVFRZIGxpbmUgMCBmb3IgQ0RDIFZYL1ZFICovCisgICAgaWYgKGlvY3Rs KGZkLFRDU0VUQSwmY2NyYXcpIDwgMCkgcmV0dXJuKC0xKTsKKyNlbmRpZiAvKiBWWFZFICovCisj ZWxzZQorI2lmZGVmIEJFTExWMTAKKyAgICBpZiAoaW9jdGwoZmQsVElPQ0dFVFAsJmNjb2xkKSA8 IDApIHJldHVybigtMSk7CisgICAgaWYgKGlvY3RsKGZkLFRJT0NHRVRQLCZjY2NicmspIDwgMCkg cmV0dXJuKC0xKTsKKyAgICBpZiAoaW9jdGwoZmQsVElPQ0dFVFAsJmNjcmF3KSA8IDApIHJldHVy bigtMSk7CisgICAgZGVidWcoRjEwMSwiY2NjYnJrLnNnX2ZsYWdzIG9yaWciLCIiLCBjY2Nicmsu c2dfZmxhZ3MpOworI2Vsc2UKKyAgICBpZiAoZ3R0eShmZCwmY2NvbGQpIDwgMCkgcmV0dXJuKC0x KTsKKyAgICBpZiAoZ3R0eShmZCwmY2NjYnJrKSA8IDApIHJldHVybigtMSk7CisgICAgaWYgKGd0 dHkoZmQsJmNjcmF3KSA8IDApIHJldHVybigtMSk7CisjZW5kaWYgLyogQkVMTFYxMCAqLworI2Vu ZGlmIC8qIEFUVFNWICovCisjZW5kaWYgLyogQlNENDRPUlBPU0lYICovCisjaWZkZWYgc29ueV9u ZXdzCQkJLyogU29ueSBORVdTICovCisgICAgaWYgKGlvY3RsKGZkLFRJT0NLR0VULCZrbV9jb24p IDwgMCkgeyAvKiBHZXQgY29uc29sZSBLYW5qaSBtb2RlICovCisJcGVycm9yKCJjb25nbSBlcnJv ciBnZXR0aW5nIEthbmppIG1vZGUiKTsKKwlkZWJ1ZyhGMTAxLCJjb25nbSBlcnJvciBnZXR0aW5n IEthbmppIG1vZGUiLCIiLDApOworCWttX2NvbiA9IC0xOwkJCS8qIE1ha2Ugc3VyZSB0aGlzIHN0 YXlzIHVuZGVmaW5lZC4gKi8KKwlyZXR1cm4oLTEpOworICAgIH0KKyNlbmRpZiAvKiBzb255X25l d3MgKi8KKyAgICBpZiAoZmQgPiAwKQorICAgICAgY2xvc2UoZmQpOworICAgIGNnbWYgPSAxOwkJ CQkvKiBGbGFnIHRoYXQgd2UgZ290IHRoZW0uICovCisgICAgcmV0dXJuKDEpOworfQorCisKK3N0 YXRpYyBWT0lECitjb25nZXRidWYoeCkgaW50IHg7IHsKKyAgICBpbnQgbjsKKyAgICBuID0gQ09O QlVGU0laIC0gKGNvbmJ1ZnAgLSBjb25idWYpOwkvKiBIb3cgbXVjaCByb29tIGxlZnQgaW4gYnVm ZmVyPyAqLworICAgIGlmICh4ID4gbikgeworCWRlYnVnKEYxMDEsImNvbmdldGJ1ZiBjaGFyIGxv c3MiLCIiLHgtbik7CisJeCA9IG47CisgICAgfQorICAgIHggPSByZWFkKDAsY29uYnVmcCx4KTsK KyAgICBjb25idWZuICs9IHg7CisgICAgZGVidWcoRjExMSwiY29uZ2V0YnVmIHJlYWRhaGVhZCIs Y29uYnVmLHgpOworfQorCisKKy8qICBDIE8gTiBDIEIgLS0gIFB1dCBjb25zb2xlIGluIGNicmVh ayBtb2RlLiAgKi8KKworLyogIFJldHVybnMgMCBpZiBvaywgLTEgaWYgbm90ICAqLworCitpbnQK KyNpZmRlZiBDS19BTlNJQworY29uY2IoY2hhciBlc2MpCisjZWxzZQorY29uY2IoZXNjKSBjaGFy IGVzYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogY29uY2IgKi8geworICAgIGludCB4LCB5 ID0gMDsKKyAgICBkZWJ1ZyhGMTAxLCJjb25jYiBjb25zdGF0ZSIsIiIsY29uc3RhdGUpOworICAg IGRlYnVnKEYxMDEsImNvbmNiIGNnbWYiLCIiLGNnbWYpOworICAgIGRlYnVnKEYxMDEsImNvbmNi IGJhY2tncmQiLCIiLGJhY2tncmQpOworCisgICAgaWYgKGNvbnN0YXRlID09IENPTl9DQikKKyAg ICAgIHJldHVybigwKTsKKworICAgIGlmIChjZ21mIDwgMSkJCQkvKiBEaWQgd2UgZ2V0IGNvbnNv bGUgbW9kZXMgeWV0PyAqLworICAgICAgaWYgKCFiYWNrZ3JkKQkJCS8qIE5vLCBpbiBiYWNrZ3Jv dW5kPyAqLworCWNvbmdtKCk7CQkJLyogTm8sIHRyeSB0byBnZXQgdGhlbSBub3cuICovCisgICAg aWYgKGNnbWYgPCAxKQkJCS8qIFN0aWxsIGRvbid0IGhhdmUgdGhlbT8gKi8KKyAgICAgIHJldHVy bigwKTsJCQkvKiBHaXZlIHVwLiAqLworICAgIGRlYnVnKEYxMDEsImNvbmNiIHR0eWZkIiwiIix0 dHlmZCk7CisgICAgZGVidWcoRjEwMSwiY29uY2IgdHRmZGZsZyIsIiIsdHRmZGZsZyk7CisjaWZk ZWYgQ09NTUVOVAorICAgIC8qIFRoaXMgYnJlYWtzIHJldHVybmluZyB0byBwcm9tcHQgYWZ0ZXIg cHJvdG9jb2wgd2l0aCAiLWwgMCIgKi8KKyAgICAvKiBDb21tZW50ZWQgb3V0IEp1bHkgMTk5OCAq LworICAgIGlmICh0dGZkZmxnICYmIHR0eWZkID49IDAgJiYgdHR5ZmQgPCAzKQorICAgICAgcmV0 dXJuKDApOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICB4ID0gaXNhdHR5KDApOworICAgIGRl YnVnKEYxMDEsImNvbmNiIGlzYXR0eSIsIiIseCk7CisgICAgaWYgKCF4KSByZXR1cm4oMCk7CQkJ LyogT25seSB3aGVuIHJ1bm5pbmcgb24gcmVhbCB0dHlzICovCisgICAgZGVidWcoRjEwMSwiY29u Y2IgeHN1c3BlbmQiLCIiLHhzdXNwZW5kKTsKKyAgICBpZiAoYmFja2dyZCkJCQkvKiBEbyBub3Ro aW5nIGlmIGluIGJhY2tncm91bmQuICovCisgICAgICByZXR1cm4oMCk7CisgICAgZXNjY2hyID0g ZXNjOyAgICAgICAgICAgICAgICAgICAgICAgLyogTWFrZSB0aGlzIGF2YWlsYWJsZSB0byBvdGhl ciBmbnMgKi8KKyAgICBja3hlY2ggPSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQcm9n cmFtIGNhbiBlY2hvIGNoYXJhY3RlcnMgKi8KKyNpZmRlZiBhZWdpcworICAgIGNvbmJ1Zm4gPSAw OworICAgIGlmIChjb25jcnApIHJldHVybih3cml0ZSgxLCAiXDAzNVwwMDIiLCAyKSk7CisgICAg aWYgKGNvbnVpZCA9PSBpbnB1dF9wYWRfJHVpZCkge3BhZF8kcmF3KGlvc18kc3RkaW4sIHN0KTsg cmV0dXJuKDApO30KKyNlbmRpZiAvKiBhZWdpcyAqLworCisjaWZkZWYgQ09IRVJFTlQKKyNkZWZp bmUgU1ZPUlBPU0lYCisjZW5kaWYgLyogQ09IRVJFTlQgKi8KKworI2lmZGVmIFBsYW45CisgICAg eCA9IHA5Y29uY2IoKTsKKyNlbHNlCisjaWZuZGVmIFNWT1JQT1NJWAkJCS8qIEJTRCwgVjcsIGV0 YyAqLworICAgIGRlYnVnKEYxMDEsImNjY2Jyay5zZ19mbGFncyBjb25jYiAxIiwiIiwgY2NjYnJr LnNnX2ZsYWdzKTsKKyAgICBkZWJ1ZyhGMTAxLCJjb25jYiBzdHR5IENCUkVBSyIsIiIsMCk7Cisg ICAgY2NjYnJrLnNnX2ZsYWdzIHw9IChDQlJFQUt8Q1JNT0QpOwkvKiBTZXQgdG8gY2hhcmFjdGVy IHdha2V1cCwgKi8KKyAgICBjY2Nicmsuc2dfZmxhZ3MgJj0gfkVDSE87ICAgICAgICAgICAvKiBu byBlY2hvLiAqLworICAgIGRlYnVnKEYxMDEsImNjY2Jyay5zZ19mbGFncyBjb25jYiAyIiwiIiwg Y2NjYnJrLnNnX2ZsYWdzKTsKKyAgICBlcnJubyA9IDA7CisvKgorICBCU0Qgc3R0eSgpIGNsZWFy cyB0aGUgY29uc29sZSBidWZmZXIuICBTbyBpZiBhbnl0aGluZyBpcyB3YWl0aW5nIGluIGl0LAor ICB3ZSBoYXZlIHRvIHJlYWQgaXQgbm93IHRvIGF2b2lkIGxvc2luZyBpdC4KKyovCisgICAgeCA9 IGNvbmNoaygpOworICAgIGlmICh4ID4gMCkKKyAgICAgIGNvbmdldGJ1Zih4KTsKKworI2lmZGVm IEJFTExWMTAKKyAgICB4ID0gaW9jdGwoMCxUSU9DU0VUUCwmY2NjYnJrKTsKKyNlbHNlCisgICAg eCA9IHN0dHkoMCwmY2NjYnJrKTsKKyAgICBkZWJ1ZyhGMTAxLCJjY2Nicmsuc2dfZmxhZ3MgY29u Y2IgeCIsIiIsIHgpOworI2VuZGlmIC8qIEJFTExWMTAgKi8KKyNlbHNlCQkJCQkvKiBTeXMgViBh bmQgUE9TSVggKi8KKyNpZm5kZWYgT1hPUworICAgIGRlYnVnKEYxMDEsImNvbmNiIGNjY2Jyay5j X2ZsYWciLCIiLGNjY2Jyay5jX2xmbGFnKTsKKyNpZmRlZiBRTlgKKyAgICAvKiBEb24ndCBtZXNz IHdpdGggSUVYVEVOICovCisgICAgY2NjYnJrLmNfbGZsYWcgJj0gfihJQ0FOT058RUNITyk7Cisj ZWxzZQorI2lmZGVmIENPSEVSRU5UCisgICAgY2NjYnJrLmNfbGZsYWcgJj0gfihJQ0FOT058RUNI Tyk7CisjZWxzZQorICAgIGNjY2Jyay5jX2xmbGFnICY9IH4oSUNBTk9OfEVDSE98SUVYVEVOKTsK KyNlbmRpZiAvKiBDT0hFUkVOVCAqLworI2VuZGlmIC8qIFFOWCAqLworICAgIGNjY2Jyay5jX2xm bGFnIHw9IElTSUc7CQkvKiBBbGxvdyBzaWduYWxzIGluIGNvbW1hbmQgbW9kZS4gKi8KKyAgICBj Y2NicmsuY19pZmxhZyB8PSBJR05CUks7CQkvKiBCdXQgaWdub3JlIEJSRUFLIHNpZ25hbCAqLwor ICAgIGNjY2Jyay5jX2lmbGFnICY9IH5CUktJTlQ7CisKKyNlbHNlIC8qIE9YT1MgKi8KKyAgICBk ZWJ1ZyhGMTAwLCJjb25jYiBPWE9TIGlzIGRlZmluZWQiLCIiLDApOworICAgIGNjY2Jyay5jX2xm bGFnICY9IH4oSUNBTk9OfEVDSE8pOworICAgIGNjY2Jyay5jX2NjW1ZESVNDQVJEXSA9IGNjY2Jy ay5jX2NjW1ZMTkVYVF0gPSBDRElTQUJMRTsKKyNlbmRpZiAvKiBPWE9TICovCisjaWZkZWYgQ09N TUVOVAorLyoKKyAgQmVsaWV2ZSBpdCBvciBub3QsIGluIFNDTyBVTklYLCBWU1VTUCBpcyBncmVh dGVyIHRoYW4gTkNDLCBhbmQgc28gdGhpcworICBhcnJheSByZWZlcmVuY2UgaXMgb3V0IG9mIGJv dW5kcy4gIEl0J3Mgb25seSBhIGRlYnVnKCkgY2FsbCBzbyB3aG8gbmVlZHMgaXQuCisqLworI2lm ZGVmIFZTVVNQCisgICAgZGVidWcoRjEwMSwiY29uY2IgY19jY1tWU1VTUF0iLCIiLGNjY2Jyay5j X2NjW1ZTVVNQXSk7CisjZW5kaWYgLyogVlNVU1AgKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisj aWZuZGVmIFZJTlRSCisgICAgZGVidWcoRjEwMSwiY29uY2IgY19jY1swXSIsIiIsY2NjYnJrLmNf Y2NbMF0pOworICAgIGNjY2Jyay5jX2NjWzBdID0gMDAzOyAgICAgICAgICAgICAgIC8qIEludGVy cnVwdCBjaGFyIGlzIENvbnRyb2wtQyAqLworI2Vsc2UKKyAgICBkZWJ1ZyhGMTAxLCJjb25jYiBj X2NjW1ZJTlRSXSIsIiIsY2NjYnJrLmNfY2NbMF0pOworICAgIGNjY2Jyay5jX2NjW1ZJTlRSXSA9 IDAwMzsKKyNlbmRpZiAvKiBWSU5UUiAqLworI2lmbmRlZiBWUVVJVAorICAgIGNjY2Jyay5jX2Nj WzFdID0gZXNjY2hyOyAgICAgICAgICAgIC8qIGVzY2FwZSBkdXJpbmcgcGFja2V0IG1vZGVzICov CisjZWxzZQorICAgIGNjY2Jyay5jX2NjW1ZRVUlUXSA9IGVzY2NocjsKKyNlbmRpZiAvKiBWUVVJ VCAqLworI2lmbmRlZiBWRU9GCisgICAgY2NjYnJrLmNfY2NbNF0gPSAxOworI2Vsc2UKKyNpZm5k ZWYgT1hPUworI2lmZGVmIFZNSU4KKyAgICBjY2NicmsuY19jY1tWTUlOXSA9IDE7CisjZW5kaWYg LyogVk1JTiAqLworI2Vsc2UgLyogT1hPUyAqLworICAgIGNjY2Jyay5jX21pbiA9IDE7CisjZW5k aWYgLyogT1hPUyAqLworI2VuZGlmIC8qIFZFT0YgKi8KKyNpZmRlZiBaSUxPRworICAgIGNjY2Jy ay5jX2NjWzVdID0gMDsKKyNlbHNlCisjaWZuZGVmIFZFT0wKKyAgICBjY2NicmsuY19jY1s1XSA9 IDE7CisjZWxzZQorI2lmbmRlZiBPWE9TCisjaWZkZWYgVlRJTUUKKyAgICBjY2NicmsuY19jY1tW VElNRV0gPSAxOworI2VuZGlmIC8qIFZUSU1FICovCisjZWxzZSAvKiBPWE9TICovCisgICAgY2Nj YnJrLmNfdGltZSA9IDE7CisjZW5kaWYgLyogT1hPUyAqLworI2VuZGlmIC8qIFZFT0wgKi8KKyNl bmRpZiAvKiBaSUxPRyAqLworICAgIGVycm5vID0gMDsKKyNpZmRlZiBCU0Q0NE9SUE9TSVgJCQkv KiBTZXQgbmV3IG1vZGVzICovCisgICAgeCA9IHRjc2V0YXR0cigwLFRDU0FEUkFJTiwmY2NjYnJr KTsKKyNlbHNlIC8qIEFUVFNWICovICAgICAgCQkJLyogb3IgdGhlIFBPU0lYIHdheSAqLworICAg IHggPSBpb2N0bCgwLFRDU0VUQVcsJmNjY2Jyayk7CS8qIHRoZSBTeXMgViB3YXkgKi8KKyNlbmRp ZiAvKiBCU0Q0NE9SUE9TSVggKi8KKyNlbmRpZiAvKiBTVk9SUE9TSVggKi8KKworI2lmZGVmIENP SEVSRU5UCisjdW5kZWYgU1ZPUlBPU0lYCisjZW5kaWYgLyogQ09IRVJFTlQgKi8KKworICAgIGRl YnVnKEYxMDEsImNvbmNiIHgiLCIiLHgpOworICAgIGRlYnVnKEYxMDEsImNvbmNiIGVycm5vIiwi IixlcnJubyk7CisKKyNpZmRlZiAgVjcKKyNpZm5kZWYgTUlOSVgKKyAgICBpZiAoa21lbVtDT05d IDwgMCkgeworICAgICAgICBxYWRkcltDT05dID0gaW5pdHJhd3EoMCk7CisgICAgICAgIGlmKChr bWVtW0NPTl0gPSBvcGVuKCIvZGV2L2ttZW0iLCAwKSkgPCAwKSB7CisgICAgICAgICAgICBmcHJp bnRmKHN0ZGVyciwgIkNhbid0IHJlYWQgL2Rldi9rbWVtIGluIGNvbmNiLlxuIik7CisgICAgICAg ICAgICBwZXJyb3IoIi9kZXYva21lbSIpOworICAgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAg fQorICAgIH0KKyNlbmRpZiAvKiBNSU5JWCAqLworI2VuZGlmIC8qIFY3ICovCisjZW5kaWYgLyog UGxhbjkgKi8KKworICAgIGlmICh4ID4gLTEpCisgICAgICBjb25zdGF0ZSA9IENPTl9DQjsKKwor ICAgIGRlYnVnKEYxMDEsImNvbmNiIHJldHVybnMiLCIiLHgpOworICAgIHJldHVybih4KTsKK30K KworLyogIEMgTyBOIEIgSSBOICAtLSAgUHV0IGNvbnNvbGUgaW4gYmluYXJ5IG1vZGUgICovCisK Ky8qICBSZXR1cm5zIDAgaWYgb2ssIC0xIGlmIG5vdCAgKi8KKworaW50CisjaWZkZWYgQ0tfQU5T SUMKK2NvbmJpbihjaGFyIGVzYykKKyNlbHNlCitjb25iaW4oZXNjKSBjaGFyIGVzYzsKKyNlbmRp ZiAvKiBDS19BTlNJQyAqLworLyogY29uYmluICovICB7CisKKyAgICBpbnQgeDsKKworICAgIGRl YnVnKEYxMDEsImNvbmJpbiBjb25zdGF0ZSIsIiIsY29uc3RhdGUpOworCisgICAgaWYgKGNvbnN0 YXRlID09IENPTl9CSU4pCisgICAgICByZXR1cm4oMCk7CisKKyAgICBpZiAoIWlzYXR0eSgwKSkg cmV0dXJuKDApOyAgICAgICAgICAvKiBvbmx5IGZvciByZWFsIHR0eXMgKi8KKyAgICBjb25nbSgp OwkJCQkvKiBHZXQgbW9kZXMgaWYgbmVjZXNzYXJ5LiAqLworICAgIGRlYnVnKEYxMDAsImNvbmJp biIsIiIsMCk7CisgICAgZXNjY2hyID0gZXNjOyAgICAgICAgICAgICAgICAgICAgICAgLyogTWFr ZSB0aGlzIGF2YWlsYWJsZSB0byBvdGhlciBmbnMgKi8KKyAgICBja3hlY2ggPSAxOyAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBQcm9ncmFtIGNhbiBlY2hvIGNoYXJhY3RlcnMgKi8KKyNpZmRl ZiBhZWdpcworICAgIGNvbmJ1Zm4gPSAwOworICAgIGlmIChjb25jcnApIHJldHVybih3cml0ZSgx LCAiXDAzNVwwMDIiLCAyKSk7CisgICAgaWYgKGNvbnVpZCA9PSBpbnB1dF9wYWRfJHVpZCkgewor CXBhZF8kcmF3KGlvc18kc3RkaW4sIHN0KTsKKwlyZXR1cm4oMCk7CisgICAgICB9CisjZW5kaWYg LyogYWVnaXMgKi8KKworI2lmZGVmIENPSEVSRU5UCisjZGVmaW5lIFNWT1JQT1NJWAorI2VuZGlm IC8qIENPSEVSRU5UICovCisKKyNpZmRlZiBQbGFuOQorICAgIHJldHVybiBwOWNvbmJpbigpOwor I2Vsc2UKKyNpZmRlZiBTVk9SUE9TSVgKKyNpZm5kZWYgT1hPUworI2lmZGVmIFFOWAorICAgIGNj cmF3LmNfbGZsYWcgJj0gfihJU0lHfElDQU5PTnxFQ0hPKTsKKyNlbHNlCisjaWZkZWYgQ09IRVJF TlQKKyAgICBjY3Jhdy5jX2xmbGFnICY9IH4oSVNJR3xJQ0FOT058RUNITyk7CisjZWxzZQorICAg IGNjcmF3LmNfbGZsYWcgJj0gfihJU0lHfElDQU5PTnxFQ0hPfElFWFRFTik7CisjZW5kaWYgLyog Q09IRVJFTlQgKi8KKyNlbmRpZiAvKiBRTlggKi8KKyNlbHNlIC8qIE9YT1MgKi8KKyAgICBjY3Jh dy5jX2xmbGFnICY9IH4oSVNJR3xJQ0FOT058RUNITyk7CisgICAgY2NyYXcuY19jY1tWRElTQ0FS RF0gPSBjY3Jhdy5jX2NjW1ZMTkVYVF0gPSBDRElTQUJMRTsKKyNlbmRpZiAvKiBPWE9TICovCisg ICAgY2NyYXcuY19pZmxhZyB8PSBJR05QQVI7CisvKgorICBOb3RlIHRoYXQgZm9yIHRlcm1pbmFs IHNlc3Npb25zIHdlIGRpc2FibGUgWG9uL1hvZmYgZmxvdyBjb250cm9sIHRvIGFsbG93CisgIHRo ZSBwYXNzYWdlIF5RIGFuZCBeUyBhcyBkYXRhIGNoYXJhY3RlcnMgZm9yIEVNQUNTLCBhbmQgdG8g YWxsb3cgWE1PREVNCisgIHRyYW5zZmVycyB0byB3b3JrIHdoZW4gQy1LZXJtaXQgaXMgaW4gdGhl IG1pZGRsZSwgZXRjLiAgSGFyZHdhcmUgZmxvdworICBjb250cm9sLCBpZiBpbiB1c2UsIGlzIG5v dCBhZmZlY3RlZC4KKyovCisjaWZkZWYgQVRUU1YKKyNpZmRlZiBCU0Q0NAorICAgIGNjcmF3LmNf aWZsYWcgJj0gfihJR05CUkt8SU5MQ1J8SUdOQ1J8SUNSTkx8SVhPTnxJWEFOWXxJWE9GRgorICAg ICAgICAgICAgICAgICAgICAgICAgfElOUENLfElTVFJJUCk7CisjZWxzZQorICAgIGNjcmF3LmNf aWZsYWcgJj0gfihJR05CUkt8SU5MQ1J8SUdOQ1J8SUNSTkx8SVVDTEN8SVhPTnxJWEFOWXxJWE9G RgorICAgICAgICAgICAgICAgICAgICAgICAgfElOUENLfElTVFJJUCk7CisjZW5kaWYgLyogQlNE NDQgKi8KKyNlbHNlIC8qIFBPU0lYICovCisgICAgY2NyYXcuY19pZmxhZyAmPSB+KElHTkJSS3xJ TkxDUnxJR05DUnxJQ1JOTHxJWE9OfElYT0ZGfElOUENLfElTVFJJUCk7CisjZW5kaWYgLyogQVRU U1YgKi8KKyAgICBjY3Jhdy5jX29mbGFnICY9IH5PUE9TVDsKKyNpZmRlZiBDT01NRU5UCisvKgor ICBXSEFUIFRIRSBIRUNLIFdBUyBUSElTIEZPUj8KKyAgVGhlIEI5NjAwIHNldHRpbmcgKG9idmlv dXNseSkgcHJldmVudHMgQ09OTkVDVCBmcm9tIHdvcmtpbmcgYXQgYW55CisgIHNwZWVkIG90aGVy IHRoYW4gOTYwMCB3aGVuIHlvdSBhcmUgbG9nZ2VkIGluIHRvIHRoZSA3MzAwIG9uIGEgc2VyaWFs CisgIGxpbmUuICBNYXliZSBzb21lIG9mIHRoZSBvdGhlciBmbGFncyBhcmUgbmVjZXNzYXJ5IC0t IGlmIHNvLCBwdXQgYmFjaworICB0aGUgb25lcyB0aGF0IGFyZSBuZWVkZWQuICBUaGlzIGNvZGUg aXMgc3VwcG9zZWQgdG8gd29yayB0aGUgc2FtZSwgbm8KKyAgbWF0dGVyIHdoZXRoZXIgeW91IGFy ZSBsb2dnZWQgaW4gdG8gdGhlIDczMDAgb24gdGhlIHJlYWwgY29uc29sZSBkZXZpY2UsCisgIG9y IHRocm91Z2ggYSBzZXJpYWwgcG9ydC4KKyovCisjaWZkZWYgQVRUNzMwMAorICAgIGNjcmF3LmNf Y2ZsYWcgPSBDTE9DQUwgfCBCOTYwMCB8IENTOCB8IENSRUFEIHwgSFVQQ0w7CisjZW5kaWYgLyog QVRUNzMwMCAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKworLyoqKiBLZXJtaXQgdXNlZCB0byBw dXQgdGhlIGNvbnNvbGUgaW4gOC1iaXQgcmF3IG1vZGUsIGJ1dCBzb21lIHVzZXJzIGhhdmUKKyAq KiogcG9pbnRlZCBvdXQgdGhhdCB0aGlzIHNob3VsZCBub3QgYmUgZG9uZSwgc2luY2Ugc29tZSBz aXRlcyBhY3R1YWxseQorICoqKiB1c2UgdGVybWluYWxzIHdpdGggcGFyaXR5IHNldHRpbmdzIG9u IHRoZWlyIFVuaXggc3lzdGVtcywgYW5kIGlmIHdlCisgKioqIG92ZXJyaWRlIHRoZSBjdXJyZW50 IHNldHRpbmdzIGFuZCBzdG9wIGRvaW5nIHBhcml0eSwgdGhlbiB0aGVpciB0ZXJtaW5hbHMKKyAq Kiogd2lsbCBkaXNwbGF5IGJsb3RjaGVzIGZvciBjaGFyYWN0ZXJzIHdob3NlIHBhcml0eSBpcyB3 cm9uZy4gIFRoZXJlZm9yZSwKKyAqKiogdGhlIGZvbGxvd2luZyB0d28gbGluZXMgYXJlIGNvbW1l bnRlZCBvdXQgKExhcnJ5IEFmcmluLCBDbGVtc29uIFUpOgorICoqKgorICoqKiAgIGNjcmF3LmNf Y2ZsYWcgJj0gfihQQVJFTkJ8Q1NJWkUpOworICoqKiAgIGNjcmF3LmNfY2ZsYWcgfD0gKENTOHxD UkVBRCk7CisgKioqCisgKioqIFN5cyBJSUkvViBzaXRlcyB0aGF0IGhhdmUgdHJvdWJsZSB3aXRo IHRoaXMgY2FuIHJlc3RvcmUgdGhlc2UgbGluZXMuCisgKioqLworI2lmbmRlZiBWSU5UUgorICAg IGNjcmF3LmNfY2NbMF0gPSAwMDM7CQkvKiBJbnRlcnJ1cHQgY2hhciBpcyBDdHJsLUMgKi8KKyNl bHNlCisgICAgY2NyYXcuY19jY1tWSU5UUl0gPSAwMDM7CisjZW5kaWYgLyogVklOVFIgKi8KKyNp Zm5kZWYgVlFVSVQKKyAgICBjY3Jhdy5jX2NjWzFdID0gZXNjY2hyOwkJLyogRXNjYXBlIGR1cmlu ZyBwYWNrZXQgbW9kZSAqLworI2Vsc2UKKyAgICBjY3Jhdy5jX2NjW1ZRVUlUXSA9IGVzY2NocjsK KyNlbmRpZiAvKiBWUVVJVCAqLworI2lmbmRlZiBWRU9GCisgICAgY2NyYXcuY19jY1s0XSA9IDE7 CisjZWxzZQorI2lmbmRlZiBPWE9TCisjaWZkZWYgVk1JTgorICAgIGNjcmF3LmNfY2NbVk1JTl0g PSAxOworI2VuZGlmIC8qIFZNSU4gKi8KKyNlbHNlIC8qIE9YT1MgKi8KKyAgICBjY3Jhdy5jX21p biA9IDE7CisjZW5kaWYgLyogT1hPUyAqLworI2VuZGlmIC8qIFZFT0YgKi8KKworI2lmZGVmIFpJ TE9HCisgICAgY2NyYXcuY19jY1s1XSA9IDA7CisjZWxzZQorI2lmbmRlZiBWRU9MCisgICAgY2Ny YXcuY19jY1s1XSA9IDE7CisjZWxzZQorI2lmbmRlZiBPWE9TCisjaWZkZWYgVlRJTUUKKyAgICBj Y3Jhdy5jX2NjW1ZUSU1FXSA9IDE7CisjZW5kaWYgLyogVlRJTUUgKi8KKyNlbHNlIC8qIE9YT1Mg Ki8KKyAgICBjY3Jhdy5jX3RpbWUgPSAxOworI2VuZGlmIC8qIE9YT1MgKi8KKyNlbmRpZiAvKiBW RU9MICovCisjZW5kaWYgLyogWklMT0cgKi8KKworI2lmZGVmIEJTRDQ0T1JQT1NJWAorICAgIHgg PSB0Y3NldGF0dHIoMCxUQ1NBRFJBSU4sJmNjcmF3KTsJLyogU2V0IG5ldyBtb2Rlcy4gKi8KKyNl bHNlCisgICAgeCA9IGlvY3RsKDAsVENTRVRBVywmY2NyYXcpOworI2VuZGlmIC8qIEJTRDQ0T1JQ T1NJWCAqLworI2Vsc2UgLyogQmVya2VsZXksIGV0Yy4gKi8KKyAgICB4ID0gY29uY2hrKCk7CQkJ LyogQmVjYXVzZSBzdHR5KCkgaXMgZGVzdHJ1Y3RpdmUgKi8KKyAgICBpZiAoeCA+IDApCisgICAg ICBjb25nZXRidWYoeCk7CisgICAgY2NyYXcuc2dfZmxhZ3MgfD0gKFJBV3xUQU5ERU0pOyAgICAg LyogU2V0IHJhd21vZGUsIFhPTi9YT0ZGIChoYSkgKi8KKyAgICBjY3Jhdy5zZ19mbGFncyAmPSB+ KEVDSE98Q1JNT0QpOyAgICAvKiBTZXQgY2hhciB3YWtldXAsIG5vIGVjaG8gKi8KKyNpZmRlZiBC RUxMVjEwCisgICAgeCA9IGlvY3RsKDAsVElPQ1NFVFAsJmNjcmF3KTsKKyNlbHNlCisgICAgeCA9 IHN0dHkoMCwmY2NyYXcpOworI2VuZGlmIC8qIEJFTExWMTAgKi8KKyNlbmRpZiAvKiBTVk9SUE9T SVggKi8KKyNlbmRpZiAvKiBQbGFuOSAqLworCisgICAgaWYgKHggPiAtMSkKKyAgICAgIGNvbnN0 YXRlID0gQ09OX0JJTjsKKworICAgIGRlYnVnKEYxMDEsImNvbmJpbiByZXR1cm5zIiwiIix4KTsK KyAgICByZXR1cm4oeCk7CisKKyNpZmRlZiBDT0hFUkVOVAorI3VuZGVmIFNWT1JQT1NJWAorI2Vu ZGlmIC8qIENPSEVSRU5UICovCisKK30KKworCisvKiAgQyBPIE4gUiBFIFMgIC0tICBSZXN0b3Jl IHRoZSBjb25zb2xlIHRlcm1pbmFsICAqLworCitpbnQKK2NvbnJlcygpIHsKKyAgICBpbnQgeDsK KyAgICBkZWJ1ZyhGMTAxLCJjb25yZXMgY2dtZiIsIiIsY2dtZik7CisgICAgZGVidWcoRjEwMSwi Y29ucmVzIGNvbnN0YXRlIiwiIixjb25zdGF0ZSk7CisKKyAgICBpZiAoY2dtZiA8IDEpCQkJLyog RG8gbm90aGluZyBpZiBtb2RlcyB1bmNoYW5nZWQgKi8KKyAgICAgIHJldHVybigwKTsKKyAgICBp ZiAoY29uc3RhdGUgPT0gQ09OX1JFUykKKyAgICAgIHJldHVybigwKTsKKworICAgIGlmICghaXNh dHR5KDApKSByZXR1cm4oMCk7ICAgICAgICAgIC8qIG9ubHkgZm9yIHJlYWwgdHR5cyAqLworICAg IGRlYnVnKEYxMDAsImNvbnJlcyBpc2F0dHkgb2siLCIiLDApOworICAgIGNreGVjaCA9IDA7ICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIFN5c3RlbSBzaG91bGQgZWNobyBjaGFycyAqLworCisj aWZkZWYgYWVnaXMKKyAgICBjb25idWZuID0gMDsKKyAgICBpZiAoY29uY3JwKSByZXR1cm4od3Jp dGUoMSwgIlwwMzVcMDAxIiwgMikpOworICAgIGlmIChjb251aWQgPT0gaW5wdXRfcGFkXyR1aWQp IHsKKwlwYWRfJGNvb2tlZChpb3NfJHN0ZGluLCBzdCk7CisJY29uc3RhdGUgPSBDT05fUkVTOwor CXJldHVybigwKTsKKyAgICB9CisjZW5kaWYgLyogYWVnaXMgKi8KKworI2lmZGVmIFBsYW45Cisg ICAgcDljb25yZXMoKTsKKyNlbHNlCisjaWZkZWYgQlNENDRPUlBPU0lYCisgICAgZGVidWcoRjEw MCwiY29ucmVzIHJlc3RvcmluZyB0Y3NldGF0dHIiLCIiLDApOworICAgIHggPSB0Y3NldGF0dHIo MCxUQ1NBRFJBSU4sJmNjb2xkKTsKKyNlbHNlCisjaWZkZWYgQVRUU1YKKyAgICBkZWJ1ZyhGMTAw LCJjb25yZXMgcmVzdG9yaW5nIGlvY3RsIiwiIiwwKTsKKyAgICB4ID0gaW9jdGwoMCxUQ1NFVEFX LCZjY29sZCk7CisjZWxzZSAvKiBCU0QsIFY3LCBhbmQgZnJpZW5kcyAqLworI2lmZGVmIHNvbnlf bmV3cwkJCS8qIFNvbnkgTkVXUyAqLworICAgIGlmIChrbV9jb24gIT0gLTEpCisgICAgICBpb2N0 bCgwLFRJT0NLU0VULCZrbV9jb24pOwkvKiBSZXN0b3JlIGNvbnNvbGUgS2FuamkgbW9kZSAqLwor I2VuZGlmIC8qIHNvbnlfbmV3cyAqLworICAgIG1zbGVlcCgxMDApOworICAgIGRlYnVnKEYxMDAs ImNvbnJlcyByZXN0b3Jpbmcgc3R0eSIsIiIsMCk7CisgICAgeCA9IGNvbmNoaygpOwkJCS8qIEJl Y2F1c2Ugc3R0eSgpIGlzIGRlc3RydWN0aXZlICovCisgICAgaWYgKHggPiAwKQorICAgICAgY29u Z2V0YnVmKHgpOworI2lmZGVmIEJFTExWMTAKKyAgICB4ID0gaW9jdGwoMCxUSU9DU0VUUCwmY2Nv bGQpOworI2Vsc2UKKyAgICB4ID0gc3R0eSgwLCZjY29sZCk7CisjZW5kaWYgLyogQkVMTFYxMCAq LworI2VuZGlmIC8qIEFUVFNWICovCisjZW5kaWYgLyogQlNENDRPUlBPU0lYICovCisjZW5kaWYg LyogUGxhbjkgKi8KKyAgICBpZiAoeCA+IC0xKQorICAgICAgY29uc3RhdGUgPSBDT05fUkVTOwor CisgICAgZGVidWcoRjEwMSwiY29ucmVzIHJldHVybnMiLCIiLHgpOworICAgIHJldHVybih4KTsK K30KKworLyogIEMgTyBOIE8gQyAgLS0gIE91dHB1dCBhIGNoYXJhY3RlciB0byB0aGUgY29uc29s ZSB0ZXJtaW5hbCAgKi8KKworaW50CisjaWZkZWYgQ0tfQU5TSUMKK2Nvbm9jKGNoYXIgYykKKyNl bHNlCitjb25vYyhjKSBjaGFyIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIGNvbm9jICov IHsKKworI2lmZGVmIElLU0QKKyAgICBpZiAoaW5zZXJ2ZXIgJiYgIWxvY2FsKQorICAgICAgcmV0 dXJuKHR0b2MoYykpOworCisjaWZkZWYgQ0tfRU5DUllQVElPTgorICAgIGlmIChpbnNlcnZlciAm JiBURUxPUFRfTUUoVEVMT1BUX0VOQ1JZUFRJT04pKQorICAgICAgICBja190bl9lbmNyeXB0KCZj LDEpOworI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KKyNlbmRpZiAvKiBJS1NEICovCisKKyNp ZmRlZiBQbGFuOQorICAgIHJldHVybiBjb253cml0ZSgmYywxKTsKKyNlbHNlCisgICAgcmV0dXJu KHdyaXRlKDEsJmMsMSkpOworI2VuZGlmIC8qIFBsYW45ICovCit9CisKKy8qICBDIE8gTiBYIE8g IC0tICBXcml0ZSB4IGNoYXJhY3RlcnMgdG8gdGhlIGNvbnNvbGUgdGVybWluYWwgICovCisKK2lu dAorY29ueG8oeCxzKSBpbnQgeDsgY2hhciAqczsgeworCisjaWZkZWYgSUtTRAorICAgIGlmIChp bnNlcnZlciAmJiAhbG9jYWwpCisgICAgICByZXR1cm4odHRvbCgoQ0hBUiAqKXMseCkpOworCisj aWZkZWYgQ0tfRU5DUllQVElPTgorICAgIGlmIChpbnNlcnZlciAmJiBURUxPUFRfTUUoVEVMT1BU X0VOQ1JZUFRJT04pKQorICAgICAgICBja190bl9lbmNyeXB0KHMseCk7CisjZW5kaWYgLyogQ0tf RU5DUllQVElPTiAqLworI2VuZGlmIC8qIElLU0QgKi8KKworI2lmZGVmIFBsYW45CisgICAgcmV0 dXJuKGNvbndyaXRlKHMseCkpOworI2Vsc2UKKyAgICByZXR1cm4od3JpdGUoMSxzLHgpKTsKKyNl bmRpZiAvKiBQbGFuOSAqLworfQorCisvKiAgQyBPIE4gTyBMICAtLSAgV3JpdGUgYSBsaW5lIHRv IHRoZSBjb25zb2xlIHRlcm1pbmFsICAqLworCitpbnQKK2Nvbm9sKHMpIGNoYXIgKnM7IHsKKyAg ICBpbnQgbGVuOworICAgIGlmICghcykgcyA9ICIiOwkJCS8qIEFsd2F5cyBkbyB0aGlzISAqLwor ICAgIGxlbiA9IHN0cmxlbihzKTsKKyAgICBpZiAobGVuID09IDApCisgICAgICByZXR1cm4oMCk7 CisKKyNpZmRlZiBJS1NECisgICAgaWYgKGluc2VydmVyICYmICFsb2NhbCkKKyAgICAgIHJldHVy bih0dG9sKChDSEFSICopcyxsZW4pKTsKKworI2lmZGVmIENLX0VOQ1JZUFRJT04KKyAgICBpZiAo aW5zZXJ2ZXIgJiYgVEVMT1BUX01FKFRFTE9QVF9FTkNSWVBUSU9OKSkgeworCWlmIChueHBhY2tl dCA8IGxlbikgeworCSAgICBpZiAoeHBhY2tldCkgeworCQlmcmVlKHhwYWNrZXQpOworCQl4cGFj a2V0ID0gTlVMTDsKKwkJbnhwYWNrZXQgPSAwOworCSAgICB9CisJICAgIGxlbiA9IGxlbiA+IDEw MjQwID8gbGVuIDogMTAyNDA7CisJICAgIHhwYWNrZXQgPSAoQ0hBUiAqKW1hbGxvYyhsZW4pOwor CSAgICBpZiAoIXhwYWNrZXQpIHsKKwkJZnByaW50ZihzdGRlcnIsInR0b2wgbWFsbG9jIGZhaWx1 cmVcbiIpOworCQlyZXR1cm4oLTEpOworCSAgICB9IGVsc2UKKwkgICAgICBueHBhY2tldCA9IGxl bjsKKwl9CisJbWVtY3B5KHhwYWNrZXQscyxsZW4pOworCXMgPSAoY2hhciAqKXhwYWNrZXQ7CisJ Y2tfdG5fZW5jcnlwdChzLGxlbik7CisgICAgfQorI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8K KyNlbmRpZiAvKiBJS1NEICovCisKKyNpZmRlZiBQbGFuOQorICAgIHJldHVybihjb253cml0ZShz LGxlbikpOworI2Vsc2UKKyAgICByZXR1cm4od3JpdGUoMSxzLGxlbikpOworI2VuZGlmIC8qIFBs YW45ICovCit9CisKKy8qICBDIE8gTiBPIEwgQSAgLS0gIFdyaXRlIGFuIGFycmF5IG9mIGxpbmVz IHRvIHRoZSBjb25zb2xlIHRlcm1pbmFsICovCisKK2ludAorY29ub2xhKHMpIGNoYXIgKnNbXTsg eworICAgIGNoYXIgKiBwOworICAgIGludCBpLCB4OworCisKKyAgICBpZiAoIXMpIHJldHVybigw KTsKKyAgICBmb3IgKGkgPSAwOyA7IGkrKykgeworCXAgPSBzW2ldOworCWlmICghcCkgcCA9ICIi OwkJCS8qIExldCdzIG5vdCBkdW1wIGNvcmUgc2hhbGwgd2U/ICovCisJaWYgKCEqcCkKKwkgIGJy ZWFrOworI2lmZGVmIElLU0QKKwlpZiAoaW5zZXJ2ZXIgJiYgIWxvY2FsKQorCSAgeCA9IHR0b2wo KENIQVIgKilwLChpbnQpc3RybGVuKHApKTsKKwllbHNlCisjZW5kaWYgLyogSUtTRCAqLworCSAg eCA9IGNvbm9sKHApOworCWlmICh4IDwgMCkKKwkgIHJldHVybigtMSk7CisgICAgfQorICAgIHJl dHVybigwKTsKK30KKworLyogIEMgTyBOIE8gTCBMICAtLSAgT3V0cHV0IGEgc3RyaW5nIGZvbGxv d2VkIGJ5IENSTEYgICovCisKK2ludAorY29ub2xsKHMpIGNoYXIgKnM7IHsKKyAgICBDSEFSIGJ1 ZlszXTsKKyAgICBidWZbMF0gPSAnXHInOworICAgIGJ1ZlsxXSA9ICdcbic7CisgICAgYnVmWzJd ID0gJ1wwJzsKKyAgICBpZiAoIXMpIHMgPSAiIjsKKworI2lmZGVmIElLU0QKKyAgICBpZiAoaW5z ZXJ2ZXIgJiYgIWxvY2FsKSB7CisJaWYgKCpzKSB0dG9sKChDSEFSICopcywoaW50KXN0cmxlbihz KSk7CisJcmV0dXJuKHR0b2woYnVmLDIpKTsKKyAgICB9CisjZW5kaWYgLyogSUtTRCAqLworCisg ICAgaWYgKCpzKSBjb25vbChzKTsKKyNpZmRlZiBJS1NECisjaWZkZWYgQ0tfRU5DUllQVElPTgor ICAgIGlmIChpbnNlcnZlciAmJiBURUxPUFRfTUUoVEVMT1BUX0VOQ1JZUFRJT04pKQorICAgICAg Y2tfdG5fZW5jcnlwdCgoY2hhciAqKWJ1ZiwyKTsKKyNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICov CisjZW5kaWYgLyogSUtTRCAqLworCisjaWZkZWYgUGxhbjkKKyAgICByZXR1cm4oY29ud3JpdGUo YnVmLCAyKSk7CisjZWxzZQorICAgIHJldHVybih3cml0ZSgxLGJ1ZiwyKSk7CisjZW5kaWYgLyog UGxhbjkgKi8KK30KKworLyogIEMgTyBOIEMgSCBLICAtLSAgUmV0dXJuIGhvdyBtYW55IGNoYXJh Y3RlcnMgYXZhaWxhYmxlIGF0IGNvbnNvbGUgICovCisvKgorICBXZSBjb3VsZCBhbHNvIHVzZSBz ZWxlY3QoKSBoZXJlIHRvIGNvdmVyIGEgZmV3IG1vcmUgc3lzdGVtcyB0aGF0IGFyZSBub3QKKyAg Y292ZXJlZCBieSBhbnkgb2YgdGhlIGZvbGxvd2luZywgZS5nLiBIUC1VWCA5LjB4IG9uIHRoZSBt b2RlbCA4MDAuCisqLworaW50Citjb25jaGsoKSB7CisgICAgc3RhdGljIGludCBjb250eXAgPSAw OwkJLyogKzEgZm9yIGlzYXR0eSwgLTEgb3RoZXJ3aXNlICovCisKKyAgICBpZiAoY29udHlwID09 IDApCQkJLyogVGhpcyBwcmV2ZW50cyB1bm5lY2Vzc2FyeSAqLworICAgICAgY29udHlwID0gKGlz YXR0eSgwKSA/IDEgOiAtMSk7CS8qIGR1cGxpY2F0ZWQgY2FsbHMgdG8gaXNhdHR5KCkgKi8KKyAg ICBkZWJ1ZyhGMTAxLCJjb25jaGsgY29udHlwIiwiIixjb250eXApOworICAgIGlmIChiYWNrZ3Jk IHx8IChjb250eXAgPCAwKSkKKyAgICAgIHJldHVybigwKTsKKworI2lmZGVmIGFlZ2lzCisgICAg aWYgKGNvbmJ1Zm4gPiAwKSByZXR1cm4oY29uYnVmbik7ICAgLyogdXNlIG9sZCBjb3VudCBpZiBu b256ZXJvICovCisKKyAgICAvKiByZWFkIGluIG1vcmUgY2hhcmFjdGVycyAqLworICAgIGNvbmJ1 Zm4gPSBpb3NfJGdldChpb3NfJHN0ZGluLAorICAgICAgICAgICAgICBpb3NfJGNvbmRfb3B0LCBj b25idWYsIChsb25nKXNpemVvZihjb25idWYpLCBzdCk7CisgICAgaWYgKHN0LmFsbCAhPSBzdGF0 dXNfJG9rKSBjb25idWZuID0gMDsKKyAgICBjb25idWZwID0gY29uYnVmOworICAgIHJldHVybihj b25idWZuKTsKKyNlbHNlCisjaWZkZWYgSUtTRAorICAgIGlmIChpbnNlcnZlciAmJiAhbG9jYWwp CisgICAgICByZXR1cm4oaW5fY2hrKDEsdHR5ZmQpKTsKKyAgICBlbHNlCisjZW5kaWYgLyogSUtT RCAqLworICAgICAgcmV0dXJuKGluX2NoaygwLDApKTsKKyNlbmRpZiAvKiBhZWdpcyAqLworfQor CisvKiAgQyBPIE4gSSBOIEMgIC0tICBHZXQgYSBjaGFyYWN0ZXIgZnJvbSB0aGUgY29uc29sZSAg Ki8KKy8qCisgIENhbGwgd2l0aCB0aW1vID4gMCB0byBkbyBhIHRpbWVkIHJlYWQsIHRpbW8gPT0g MCB0byBkbyBhbiB1bnRpbWVkIGJsb2NraW5nCisgIHJlYWQuICBVcG9uIHN1Y2Nlc3MsIHJldHVy bnMgdGhlIGNoYXJhY3Rlci4gIFVwb24gZmFpbHVyZSwgcmV0dXJucyAtMS4KKyAgQSB0aW1lZCBy ZWFkIHRoYXQgZG9lcyBub3QgY29tcGxldGUgd2l0aGluIHRoZSB0aW1lb3V0IHBlcmlvZCByZXR1 cm5zIC0yLgorKi8KK2ludAorY29uaW5jKHRpbW8pIGludCB0aW1vOyB7CisgICAgaW50IG4gPSAw OyBDSEFSIGNoOworICAgIGludCB4eDsKKworICAgIGlmIChjb25idWZuID4gMCkgewkJCS8qIElm IHNvbWV0aGluZyBhbHJlYWR5IGJ1ZmZlcmVkICovCisJLS1jb25idWZuOworCXJldHVybigodW5z aWduZWQpKCpjb25idWZwKysgJiAweGZmKSk7CisgICAgfQorCisgICAgZXJybm8gPSAwOwkJCQkv KiBDbGVhciB0aGlzICovCisjaWZkZWYgSUtTRAorICAgIGlmIChpbnNlcnZlciAmJiAhbG9jYWwp IHsKKwl4eCA9IHR0aW5jKHRpbW8pOworCWlmICh4eCA8IDApCisJICByZXR1cm4odHRpbmN0aW1v ID8gLTIgOiAtMSk7CisJZWxzZQorCSAgcmV0dXJuKHh4KTsKKyAgICB9CisjZW5kaWYgLyogSUtT RCAqLworCisjaWZkZWYgYWVnaXMJCQkJLyogQXBvbGxvIEFlZ2lzIG9ubHkuLi4gKi8KKyAgICBk ZWJ1ZyhGMTAxLCJjb25pbmMgdGltbyIsIiIsdGltbyk7CisgICAgZmZsdXNoKHN0ZG91dCk7Cisg ICAgaWYgKGNvbmNoaygpID4gMCkgeworCS0tY29uYnVmbjsKKwlyZXR1cm4oKHVuc2lnbmVkKSgq Y29uYnVmcCsrICYgMHhmZikpOworICAgIH0KKyNlbmRpZiAvKiBhZWdpcyAqLworCisjaWZkZWYg VFRMRUJVRgorICAgIGlmICgKKyNpZmRlZiBJS1NECisJaW5zZXJ2ZXIgJiYKKyNlbmRpZiAvKiBJ S1NEICovCisJIXhsb2NhbAorCSkgeworCWlmICh0dHB1c2ggPj0gMCkgeworCSAgICBkZWJ1ZyhG MTExLCJ0dGluYyIsInR0cHVzaCIsdHRwdXNoKTsKKwkgICAgY2ggPSB0dHB1c2g7CisJICAgIHR0 cHVzaCA9IC0xOworCSAgICByZXR1cm4oY2gpOworCX0KKwlpZiAobGVfZGF0YSkgeworCSAgICBp ZiAobGVfZ2V0Y2hhcigmY2gpID4gMCkgeworCQlkZWJ1ZyhGMTExLCJ0dGluYyBMb2NhbEVjaG9J bkJ1ZiIsImNoIixjaCk7CisJCXJldHVybihjaCk7CisJICAgIH0KKwl9CisgICAgfQorI2VuZGlm IC8qIFRUTEVCVUYgKi8KKworICAgIGlmICh0aW1vIDw9IDApIHsJCQkvKiBVbnRpbWVkLCBibG9j a2luZyByZWFkLiAqLworCXdoaWxlICgxKSB7CQkJLyogS2VlcCB0cnlpbmcgdGlsbCB3ZSBnZXQg b25lLiAqLworCSAgICBuID0gcmVhZCgwLCAmY2gsIDEpOwkvKiBSZWFkIGEgY2hhcmFjdGVyLiAq LworCSAgICBpZiAobiA9PSAwKSBjb250aW51ZTsJLyogU2hvdWxkbid0IGhhcHBlbi4gKi8KKwkg ICAgaWYgKG4gPiAwKSB7CQkvKiBJZiByZWFkIHdhcyBzdWNjZXNzZnVsLCAqLworI2lmZGVmIElL U0QKKyNpZmRlZiBDS19FTkNSWVBUSU9OCisgICAgICAgICAgICAgICAgZGVidWcoRjEwMCwiY29u aW5jIGRlY3J5cHQgMSIsIiIsMCk7CisgICAgICAgICAgICAgICAgaWYgKGluc2VydmVyICYmICFs b2NhbCAmJiBURUxPUFRfVShURUxPUFRfRU5DUllQVElPTikpCisJCSAgY2tfdG5fZGVjcnlwdCgo Y2hhciAqKSZjaCwxKTsKKyNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCisjZW5kaWYgLyogSUtT RCAqLworCQlyZXR1cm4oKHVuc2lnbmVkKShjaCAmIDB4ZmYpKTsgLyogcmV0dXJuIHRoZSBjaGFy YWN0ZXIuICovCisgICAgICAgICAgICB9CisKKy8qIENvbWUgaGVyZSBpZiByZWFkKCkgcmV0dXJu ZWQgYW4gZXJyb3IuICovCisKKwkgICAgZGVidWcoRjEwMSwgImNvbmluYygwKSBlcnJubyIsIiIs ZXJybm8pOyAvKiBMb2cgdGhlIGVycm9yLiAqLworI2lmbmRlZiBPWE9TCisjaWZkZWYgU1ZPUlBP U0lYCisjaWZkZWYgQ0lFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDSUUgUmVndWx1 cyBoYXMgbm8gRUlOVFIgc3ltYm9sPyAqLworI2lmbmRlZiBFSU5UUgorI2RlZmluZSBFSU5UUiA0 CisjZW5kaWYgLyogRUlOVFIgKi8KKyNlbmRpZiAvKiBDSUUgKi8KKy8qCisgIFRoaXMgcm91dGlu ZSBpcyB1c2VkIGZvciBzZXZlcmFsIGRpZmZlcmVudCBwdXJwb3Nlcy4gIEluIENPTk5FQ1QgbW9k ZSwgaXQgaXMKKyAgdXNlZCB0byBkbyBhbiB1bnRpbWVkLCBibG9ja2luZyByZWFkIGZyb20gdGhl IGtleWJvYXJkIGluIHRoZSBsb3dlciBDT05ORUNUCisgIGZvcmsuICBEdXJpbmcgbG9jYWwtbW9k ZSBmaWxlIHRyYW5zZmVyLCBpdCByZWFkcyBhIGNoYXJhY3RlciBmcm9tIHRoZQorICBjb25zb2xl IHRvIGludGVycnVwdCB0aGUgZmlsZSB0cmFuc2ZlciAobGlrZSBBIGZvciBhIHN0YXR1cyByZXBv cnQsIFggdG8KKyAgY2FuY2VsIGEgZmlsZSwgZXRjKS4gIE9idmlvdXNseSwgd2UgZG9uJ3Qgd2Fu dCB0aGUgcmVhZHMgaW4gdGhlIGxhdHRlciBjYXNlCisgIHRvIGJlIGJsb2NraW5nLCBvciB0aGUg ZmlsZSB0cmFuc2ZlciB3b3VsZCBzdG9wIHVudGlsIHRoZSB1c2VyIHR5cGVkCisgIHNvbWV0aGlu Zy4gIFVuZm9ydHVuYXRlbHksIFN5c3RlbSBWIGRvZXMgbm90IGFsbG93IHRoZSBjb25zb2xlIGRl dmljZSBpbnB1dAorICBidWZmZXIgdG8gYmUgc2FtcGxlZCBub25kZXN0cnVjdGl2ZWx5IChlLmcu IGJ5IGNvbmNoaygpKSwgc28gYSBrbHVkZ2UgaXMKKyAgdXNlZCBpbnN0ZWFkLiAgRHVyaW5nIGxv Y2FsLW1vZGUgZmlsZSB0cmFuc2ZlciwgdGhlIFNJR1FVSVQgc2lnbmFsIGlzIGFybWVkCisgIGFu ZCB0cmFwcGVkIGJ5IGVzY3RycCgpLCBhbmQgdGhpcyByb3V0aW5lIHByZXRlbmRzIHRvIGhhdmUg cmVhZCB0aGUgcXVpdAorICBjaGFyYWN0ZXIgZnJvbSB0aGUga2V5Ym9hcmQgbm9ybWFsbHkuICBC dXQsIGtsdWRnZSBvciBubyBrbHVkZ2UsIHRoZSByZWFkKCkKKyAgaXNzdWVkIGJ5IHRoaXMgY29t bWFuZCwgdW5kZXIgU3lzdGVtIFYgb25seSwgY2FuIGZhaWwgaWYgYSBzaWduYWwgLS0gQU5ZCisg IHNpZ25hbCAtLSBpcyBjYXVnaHQgd2hpbGUgdGhlIHJlYWQgaXMgcGVuZGluZy4gIFRoaXMgY2Fu IG9jY3VyIG5vdCBvbmx5IHdoZW4KKyAgdGhlIHVzZXIgdHlwZXMgdGhlIHF1aXQgY2hhcmFjdGVy LCBidXQgYWxzbyBkdXJpbmcgdGVsbmV0IG5lZ290aWF0aW9ucywgd2hlbgorICB0aGUgbG93ZXIg Q09OTkVDVCBmb3JrIHNpZ25hbHMgdGhlIHVwcGVyIG9uZSBhYm91dCBhbiBlY2hvaW5nIG1vZGUg Y2hhbmdlLgorICBXaGVuIHRoaXMgaGFwcGVucywgd2UgaGF2ZSB0byBwb3N0IHRoZSByZWFkKCkg YWdhaW4uICBUaGlzIGlzIGFwcGFyZW50bHkgbm90CisgIGEgcHJvYmxlbSBpbiBCU0QtYmFzZWQg VU5JWCB2ZXJzaW9ucy4KKyovCisJICAgIGlmIChlcnJubyA9PSBFSU5UUikJCS8qIFJlYWQgaW50 ZXJydXB0ZWQuICovCisJICAgICAgaWYgKGNvbmVzYykgIHsJCS8qIElmIGJ5IFNJR1FVSVQsICov CisgCQkgY29uZXNjID0gMDsJCS8qIHRoZSBjb25lc2MgdmFyaWFibGUgaXMgc2V0LCAqLworIAkJ IHJldHVybihlc2NjaHIpOwkvKiBzbyByZXR1cm4gdGhlIGVzY2FwZSBjaGFyYWN0ZXIuICovCisJ ICAgICB9IGVsc2UgY29udGludWU7CQkvKiBCeSBvdGhlciBzaWduYWwsIHRyeSBhZ2Fpbi4gKi8K KyNlbHNlCisvKgorICBUaGlzIG1pZ2h0IGJlIGRhbmdlcm91cywgYnV0IGxldCdzIGRvIHRoaXMg b24gbm9uLVN5c3RlbSBWIHZlcnNpb25zIHRvbywKKyAgc2luY2UgYXQgbGVhc3Qgb25lIFN1bk9T IDQuMS4yIHVzZXIgY29tcGxhaW5zIG9mIGltbWVkaWF0ZSBkaXNjb25uZWN0aW9ucworICB1cG9u IGZpcnN0IG1ha2luZyBhIFRFTE5FVCBjb25uZWN0aW9uLgorKi8KKwkgICAgaWYgKGVycm5vID09 IEVJTlRSKQkJLyogUmVhZCBpbnRlcnJ1cHRlZC4gKi8KKwkgICAgICBjb250aW51ZTsKKyNlbmRp ZiAvKiBTVk9SUE9TSVggKi8KKyNlbHNlIC8qIE9YT1MgKi8KKwkgICAgaWYgKGVycm5vID09IEVJ TlRSKQkJLyogUmVhZCBpbnRlcnJ1cHRlZC4gKi8KKwkgICAgICBjb250aW51ZTsKKyNlbmRpZiAv KiBPWE9TICovCisJICAgIHJldHVybigtMSk7CQkJLyogRXJyb3IgKi8KKwl9CisgICAgfQorI2lm ZGVmIERFQlVHCisgICAgaWYgKGRlYmxvZyAmJiB0aW1vIDw9IDApIHsKKwlkZWJ1ZyhGMTAwLCJj b25pbmMgdGltZW91dCBsb2dpYyBlcnJvciIsIiIsMCk7CisJdGltbyA9IDE7CisgICAgfQorI2Vu ZGlmIC8qIERFQlVHICovCisKKy8qIFRpbWVkIHJlYWQuLi4gKi8KKworICAgIHNhdmFsID0gc2ln bmFsKFNJR0FMUk0sdGltZXJoKTsJLyogU2V0IHVwIHRpbWVvdXQgaGFuZGxlci4gKi8KKyAgICB4 eCA9IGFsYXJtKHRpbW8pOwkJCS8qIFNldCB0aGUgYWxhcm0uICovCisgICAgZGVidWcoRjEwMSwi Y29uaW5jIGFsYXJtIHNldCIsIiIsdGltbyk7CisgICAgaWYgKAorI2lmZGVmIENLX1BPU0lYX1NJ RworCXNpZ3NldGptcChzamJ1ZiwxKQorI2Vsc2UKKwlzZXRqbXAoc2pidWYpCisjZW5kaWYgLyog Q0tfUE9TSVhfU0lHICovCisJKQkJCQkvKiBUaGUgcmVhZCgpIHRpbWVkIG91dC4gKi8KKyAgICAg IG4gPSAtMjsJCQkJLyogQ29kZSBmb3IgdGltZW91dC4gKi8KKyAgICBlbHNlCisgICAgICBuID0g cmVhZCgwLCAmY2gsIDEpOworICAgIHR0aW1vZmYoKTsJCQkJLyogVHVybiBvZmYgdGltZXIgKi8K KyAgICBpZiAobiA+IDApIHsJCQkvKiBHb3QgY2hhcmFjdGVyIE9LLiAqLworI2lmZGVmIElLU0QK KyNpZmRlZiBDS19FTkNSWVBUSU9OCisgICAgICAgIGRlYnVnKEYxMDAsImNvbmluYyBkZWNyeXB0 IDIiLCIiLDApOworICAgICAgICBpZiAoaW5zZXJ2ZXIgJiYgIWxvY2FsICYmIFRFTE9QVF9VKFRF TE9QVF9FTkNSWVBUSU9OKSkKKwkgIGNrX3RuX2RlY3J5cHQoKGNoYXIgKikmY2gsMSk7CisjZW5k aWYgLyogQ0tfRU5DUllQVElPTiAqLworI2VuZGlmIC8qIElLU0QgKi8KKwlyZXR1cm4oKHVuc2ln bmVkKShjaCAmIDB4ZmYpKTsJLyogUmV0dXJuIGl0LiAqLworICAgIH0KKy8qCisgIHJlYWQoKSBy ZXR1cm5lZCBhbiBlcnJvci4gIFNhbWUgZGVhbCBhcyBhYm92ZSwgYnV0IHdpdGhvdXQgdGhlIGxv b3AuCisqLworICAgIGRlYnVnKEYxMDEsICJjb25pbmModGltbykgbiIsIiIsbik7CisgICAgZGVi dWcoRjEwMSwgImNvbmluYyh0aW1vKSBlcnJubyIsIiIsZXJybm8pOworI2lmbmRlZiBPWE9TCisj aWZkZWYgU1ZPUlBPU0lYCisgICAgaWYgKG4gPT0gLTEgJiYgZXJybm8gPT0gRUlOVFIgJiYgY29u ZXNjICE9IDApIHsKKwljb25lc2MgPSAwOworCXJldHVybihlc2NjaHIpOwkJCS8qIFVzZXIgZW50 ZXJlZCBlc2NhcGUgY2hhcmFjdGVyLiAqLworICAgIH0KKyNlbmRpZiAvKiBTVk9SUE9TSVggKi8K KyAgICBpZiAobiA9PSAwICYmIGVycm5vID4gMCkgewkJLyogSXQncyBhbiBlcnJvciAqLworCXJl dHVybigtMSk7CisgICAgfQorI2VuZGlmIC8qICEgT1hPUyAqLworICAgIHJldHVybihuKTsKK30K KworLyogIEMgTyBOIEcgSyBTICAtLSAgQ29uc29sZSBHZXQgS2V5Ym9hcmQgU2NhbmNvZGUgICov CisKKyNpZm5kZWYgY29uZ2tzCisvKgorICBUaGlzIGZ1bmN0aW9uIG5lZWRzIHRvIGJlIGZpbGxl ZCBpbiB3aXRoIHRoZSB2YXJpb3VzIHN5c3RlbS1kZXBlbmRlbnQKKyAgc3lzdGVtIGNhbGxzIHVz ZWQgYnkgU1VOT1MsIE5lWFQgT1MsIFhlbml4LCBBdmlpb24sIGV0YywgdG8gcmVhZCBhIGZ1bGwK KyAga2V5Ym9hcmQgc2NhbiBjb2RlLiAgVW5mb3J0dW5hdGVseSB0aGVyZSBhcmVuJ3QgYW55Lgor Ki8KK2ludAorY29uZ2tzKHRpbW8pIGludCB0aW1vOyB7CisKKyNpZmRlZiBJS1NECisgICAgaWYg KGluc2VydmVyICYmICFsb2NhbCkKKyAgICAgIHJldHVybih0dGluYyh0aW1vKSk7CisjZW5kaWYg LyogSUtTRCAqLworCisgICAgcmV0dXJuKGNvbmluYyh0aW1vKSk7Cit9CisjZW5kaWYgLyogY29u Z2tzICovCisKKyNpZmRlZiBBVFQ3MzAwCisKKy8qICBBIFQgVCBEIEkgQSBMICAtLSAgRGlhbCB1 cCB0aGUgcmVtb3RlIHN5c3RlbSB1c2luZyBpbnRlcm5hbCBtb2RlbQorICogUHVycG9zZTogdG8g b3BlbiBhbmQgZGlhbCBhIG51bWJlciBvbiB0aGUgaW50ZXJuYWwgbW9kZW0gYXZhaWxhYmxlIG9u IHRoZQorICogQVRUNzMwMCBVTklYIFBDLiAgV3JpdHRlbiBieSBKb2UgRG91cG5pay4gU3VwZXJj ZWVkcyB2ZXJzaW9uIHdyaXR0ZW4gYnkKKyAqIFJpY2hhcmQgRS4gSGlsbCwgRGlja2luc29uLCBU WC4gd2hpY2ggZW1wbG95ZWQgZGlhbCgzYykuCisgKiBVc2VzIGluZm9ybWF0aW9uIGluIDxzeXMv cGhvbmUuaD4gYW5kIG91ciBzdGF0dXMgaW50IGF0dG1vZGVtLgorICovCithdHRkaWFsKHR0bmFt ZSxzcGVlZCx0ZWxuYnIpIGNoYXIgKnR0bmFtZSwqdGVsbmJyOyBsb25nIHNwZWVkOyB7CisgICAg Y2hhciAqdGVsbnVtOworCisgICAgYXR0bW9kZW0gJj0gfklTTU9ERU07ICAgICAgICAgICAgICAg ICAgICAgICAvKiBtb2RlbSBub3QgaW4gdXNlIHlldCAqLworICAgICAgICAgICAgICAgICAgICAv KiBFbnN1cmUgT19OREVMQVkgaXMgc2V0LCBlbHNlIGkvbyB0cmFmZmljIGhhbmdzICovCisgICAg ICAgICAgICAgICAgICAgIC8qIFdlIHR1cm4gdGhpcyBmbGFnIG9mZiBvbmNlIHRoZSBkaWFsIGlz IGNvbXBsZXRlICovCisgICAgZmNudGwodHR5ZmQsIEZfU0VURkwsIGZjbnRsKHR0eWZkLCBGX0dF VEZMLCAwKSB8IE9fTkRFTEFZKTsKKworICAgIC8qIENvbmRpdGlvbiBsaW5lLCBjaGVjayBhdmFp bGFiaWxpdHkgJiBEQVRBIG1vZGUsIHR1cm4gb24gc3BlYWtlciAqLworICAgIGlmIChpb2N0bCh0 dHlmZCxQSU9DT0ZGSE9PSywgJmRpYWxlcikgPT0gLTEpIHsKKyAgICAgICAgcHJpbnRmKCJjYW5u b3QgYWNjZXNzIHBob25lXG4iKTsKKyAgICAgICAgdHRjbG9zKDApOworICAgICAgICByZXR1cm4g KC0yKTsKKyAgICB9CisgICAgaW9jdGwodHR5ZmQsUElPQ0dFVFAsJmRpYWxlcik7ICAgICAgLyog Z2V0IHBob25lIGRpYWxlciBwYXJhbWV0ZXJzICovCisKKyAgICBpZiAoZGlhbGVyLmNfbGluZXBh cmFtICYgVk9JQ0UpIHsJLyogcGhvbmUgbXVzdCBiZSBpbiBEQVRBIG1vZGUgKi8KKyAgICAgICAg cHJpbnRmKCIgU2hvdWxkIG5vdCBkaWFsIHdpdGggbW9kZW0gaW4gVk9JQ0UgbW9kZS5cbiIpOwor ICAgICAgICBwcmludGYoIiBFeGl0IEtlcm1pdCwgc3dpdGNoIHRvIERBVEEgYW5kIHJldHJ5IGNh bGwuXG4iKTsKKyAgICAgICAgdHRjbG9zKDApOworICAgICAgICByZXR1cm4gKC0yKTsKKyAgICB9 CisjaWZkZWYgQVRUVE9ORUQJCQkJLyogT2xkIHdheSwgdG9uZSBkaWFsaW5nIG9ubHkuICovCisg ICAgZGlhbGVyLmNfbGluZXBhcmFtID0gREFUQSB8IERUTUY7CS8qIERpYWwgd2l0aCB0b25lcywg Ki8KKyAgICBkaWFsZXIuY19saW5lcGFyYW0gJj0gflBVTFNFOwkvKiBub3Qgd2l0aCBwdWxzZXMu ICovCisjZWxzZQorICAgIC8qIExlYXZlIGN1cnJlbnQgcHVsc2UvdG9uZSBzdGF0ZSBhbG9uZS4g Ki8KKyAgICAvKiBCdXQgd2hhdCBhYm91dCBEQVRBPyAgQWRkIGl0IGJhY2sgaWYgeW91IGhhdmUg dHJvdWJsZS4gKi8KKyAgICAvKiBzeXMvcGhvbmUgc2F5cyB5b3UgZ2V0IERBVEEgYXV0b21hdGlj YWxseSBieSBvcGVuaW5nIGRldmljZSBSRFdSICovCisjZW5kaWYKKyAgICBkaWFsZXIuY193YWl0 ZGlhbHRvbmUgPSA1OyAgICAgICAgICAgICAgICAgIC8qIHdhaXQgNSBzZWMgZm9yIGRpYWx0b25l ICovCisjaWZkZWYgQ09NTUVOVAorICAgIGRpYWxlci5jX2ZlZWRiYWNrID0gU1BFQUtFUk9OfE5P Uk1TUEt8UklOR09OOyAgLyogY29udHJvbCBzcGVha2VyICovCisjZWxzZQorICAgIC8qIHN5cy9w aG9uZSBzYXlzIFJJTkdPTiB1c2VkIG9ubHkgZm9yIGluY29taW5nIHZvaWNlIGNhbGxzICovCisg ICAgZGlhbGVyLmNfZmVlZGJhY2sgJj0gfihTT0ZUU1BLfExPVURTUEspOworICAgIGRpYWxlci5j X2ZlZWRiYWNrIHw9IFNQRUFLRVJPTnxOT1JNU1BLOworI2VuZGlmCisgICAgZGlhbGVyLmNfd2Fp dGZsYXNoID0gNTAwOyAgICAgICAgICAgICAgICAgICAvKiAwLjUgc2VjIGZsYXNoIGhvb2sgKi8K KyAgICBpZihpb2N0bCh0dHlmZCxQSU9DU0VUUCwmZGlhbGVyKSA9PSAtMSkgeyAgIC8qIHNldCBw aG9uZSBwYXJhbWV0ZXJzICovCisgICAgICAgIHByaW50ZigiQ2Fubm90IHNldCBtb2RlbSBjaGFy YWN0ZXJpc3RpY3NcbiIpOworICAgICAgICB0dGNsb3MoMCk7CisgICAgICAgIHJldHVybiAoLTIp OworICAgIH0KKyAgICBpb2N0bCh0dHlmZCxQSU9DUkVDT05OLDApOwkJLyogVHVybnMgb24gc3Bl YWtlciBmb3IgcHVsc2UgKi8KKworI2lmZGVmIENPTU1FTlQKKyAgICBmcHJpbnRmKHN0ZGVyciwi UGhvbmUgbGluZSBzdGF0dXMuIGxpbmVfcGFyOiVvIGRpYWx0b25lX3dhaXQ6JW8gXAorbGluZV9z dGF0dXM6JW8gZmVlZGJhY2s6JW9cbiIsCisgICAgZGlhbGVyLmNfbGluZXBhcmFtLCBkaWFsZXIu Y193YWl0ZGlhbHRvbmUsCisgICAgZGlhbGVyLmNfbGluZXN0YXR1cywgZGlhbGVyLmNfZmVlZGJh Y2spOworI2VuZGlmCisKKyAgICBhdHRtb2RlbSB8PSBJU01PREVNOyAgICAgICAgICAgICAgICAg ICAgICAgIC8qIG1vZGVtIGlzIG5vdyBpbi11c2UgKi8KKyAgICBzbGVlcCgxKTsKKyAgICBmb3Ig KHRlbG51bSA9IHRlbG5icjsgKnRlbG51bSAhPSAnXDAnOyB0ZWxudW0rKykgICAgLyogZGlhbCBu dW1iZXIgKi8KKyNpZmRlZiBBVFRUT05FRAorICAgICAgLyogVG9uZSBkaWFsaW5nIG9ubHkgKi8K KyAgICAgIGlmIChpb2N0bCh0dHlmZCxQSU9DRElBTCx0ZWxudW0pICE9IDApIHsKKwkgIHBlcnJv cigiRXJyb3IgaW4gZGlhbGluZyIpOworCSAgdHRjbG9zKDApOworCSAgcmV0dXJuKC0yKTsKKyAg ICAgIH0KKyNlbHNlIC8qIEFsbG93IFB1bHNlIG9yIFRvbmUgZGlhbGluZyAqLworICAgIHN3aXRj aCAoKnRlbG51bSkgeworICAgICAgY2FzZSAndCc6IGNhc2UgJ1QnOiBjYXNlICclJzoJLyogVG9u ZSBkaWFsaW5nIHJlcXVlc3RlZCAqLworCWRpYWxlci5jX2xpbmVwYXJhbSB8PSBEVE1GOworCWRp YWxlci5jX2xpbmVwYXJhbSAmPSB+UFVMU0U7CisJaWYgKGlvY3RsKHR0eWZkLFBJT0NTRVRQLCZk aWFsZXIpID09IC0xKSB7CisJICAgIHByaW50ZigiQ2Fubm90IHNldCBtb2RlbSB0byB0b25lIGRp YWxpbmdcbiIpOworCSAgICB0dGNsb3MoMCk7CisJICAgIHJldHVybigtMik7CisJfQorCWJyZWFr OworICAgICAgY2FzZSAnZCc6IGNhc2UgJ0QnOiBjYXNlICdwJzogY2FzZSAnUCc6IGNhc2UgJ14n OgorCWRpYWxlci5jX2xpbmVwYXJhbSB8PSBQVUxTRTsKKwlkaWFsZXIuY19saW5lcGFyYW0gJj0g fkRUTUY7CisJaWYgKGlvY3RsKHR0eWZkLFBJT0NTRVRQLCZkaWFsZXIpID09IC0xKSB7CisJICAg IHByaW50ZigiQ2Fubm90IHNldCBtb2RlbSB0byBwdWxzZSBkaWFsaW5nXG4iKTsKKwkgICAgdHRj bG9zKDApOworCSAgICByZXR1cm4oLTIpOworCX0KKwlicmVhazsKKyAgICAgIGRlZmF1bHQ6Cisg ICAgICAgIGlmIChpb2N0bCh0dHlmZCxQSU9DRElBTCx0ZWxudW0pICE9IDApIHsKKwkgICAgcGVy cm9yKCJEaWFsaW5nIGVycm9yIik7CisJICAgIHR0Y2xvcygwKTsKKwkgICAgcmV0dXJuKC0yKTsK Kwl9CisJYnJlYWs7CisgICAgfQorI2VuZGlmCisKKyAgICBpb2N0bCh0dHlmZCxQSU9DRElBTCwi QCIpOwkJLyogdGVybWluYXRvciBmb3IgZGF0YSBjYWxsICovCisgICAgZG8gewkJCQkvKiB3YWl0 IGZvciBtb2RlbXMgdG8gQ29ubmVjdCAqLworICAgICAgICBpZiAoaW9jdGwodHR5ZmQsUElPQ0dF VFAsJmRpYWxlcikgIT0gMCkJeyAvKiBnZXQgcGFyYW1zICovCisJICAgIHBlcnJvcigiQ2Fubm90 IGdldCBtb2RlbXMgdG8gY29ubmVjdCIpOworCSAgICB0dGNsb3MoMCk7CisJICAgIHJldHVybigt Mik7CisJfQorICAgIH0gd2hpbGUgKChkaWFsZXIuY19saW5lc3RhdHVzICYgTU9ERU1DT05ORUNU RUQpID09IDApOworICAgIC8qIFR1cm4gb2ZmIE9fTkRFTEFZIGZsYWcgbm93LiAqLworICAgIGZj bnRsKHR0eWZkLCBGX1NFVEZMLCBmY250bCh0dHlmZCwgRl9HRVRGTCwgMCkgJiB+T19OREVMQVkp OworICAgIHNpZ25hbChTSUdIVVAsIHNpZ2h1cCk7ICAgICAgICAgICAgIC8qIGhhbmd1cCBvbiBs b3NzIG9mIGNhcnJpZXIgKi8KKyAgICByZXR1cm4oMCk7ICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiByZXR1cm4gc3VjY2VzcyAqLworfQorCisvKgorICBPZmZnZXR0eSwgb25nZXR0eSBmdW5j dGlvbnMuIFRoZXNlIGZ1bmN0aW9uIGdldCB0aGUgJ2dldHR5KDFtKScgb2ZmCisgIGFuZCByZXN0 b3JlIGl0IHRvIHRoZSBpbmRpY2F0ZWQgbGluZS4gIFNoZWxsJ3MgcmV0dXJuIGNvZGVzIGFyZToK KyAgICAwOiBDYW4ndCBkbyBpdC4gIFByb2JhYmx5IGEgdXNlciBsb2dnZWQgb24uCisgICAgMTog Tm8gbmVlZC4gIE5vIGdldHR5IG9uIHRoYXQgbGluZS4KKyAgICAyOiBEb25lLCB5b3Ugc2hvdWxk IHJlc3RvcmUgdGhlIGdldHR5IHdoZW4geW91J3JlIGRvbmUuCisgIERPR0VUWSBTeXN0ZW0oMyks IGhvd2V2ZXIsIHJldHVybnMgdGhlbSBhcyAwLCAyNTYsIDUxMiwgcmVzcGVjdGl2ZWx5LgorICBU aGFua3MgdG8gS2V2aW4gTydHb3JtYW4sIEFuYXJtIFNvZnR3YXJlIFN5c3RlbXMuCisKKyAgIGdl dG9mZi5zaCBsb29rcyBsaWtlOiAgIGdldG9uLnNoIGxvb2tzIGxpa2U6CisgICAgIHNldGdldHR5 ICQxIDAgICAgICAgICAgIHNldGdldHR5ICQxIDEKKyAgICAgZXJyPSQ/ICAgICAgICAgICAgICAg ICAgZXhpdCAkPworICAgICBzbGVlcCAyCisgICAgIGV4aXQgJGVycgorKi8KKworLyogIE8gRiBG IEcgRSBUIFQgWSAgLS0gIFR1cm4gb2ZmIGdldHR5KDFtKSBmb3IgdGhlIGNvbW11bmljYXRpb25z IHR0eSBsaW5lCisgKiBhbmQgZ2V0IHN0YXR1cyBzbyBpdCBjYW4gYmUgcmVzdGFydGVkIGFmdGVy IHRoZSBsaW5lIGlzIGh1bmcgdXAuCisgKi8KK2ludAorb2ZmZ2V0dHkodHRuYW1lKSBjaGFyICp0 dG5hbWU7IHsKKyAgICBjaGFyIHRlbXBbMzBdOworICAgIHdoaWxlICgqdHRuYW1lICE9ICdcMCcp IHR0bmFtZSsrOyAgICAgICAvKiBzZWVrIHRlcm1pbmF0b3Igb2YgcGF0aCAqLworICAgIHR0bmFt ZSAtPSAzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBnZXQgbGFzdCAzIGNoYXJzIG9m IG5hbWUgKi8KKyAgICBzcHJpbnRmKHRlbXAsIi91c3IvYmluL2dldG9mZi5zaCAlcyIsdHRuYW1l KTsKKyAgICByZXR1cm4oenN5c2NtZCh0ZW1wKSk7Cit9CisKKy8qICBPIE4gRyBFIFQgVCBZICAt LSAgVHVybiBvbiBnZXR0eSgxbSkgZm9yIHRoZSBjb21tdW5pY2F0aW9ucyB0dHkgbGluZSAqLwor CitpbnQKK29uZ2V0dHkodHRuYW1lKSBjaGFyICp0dG5hbWU7IHsKKyAgICBjaGFyIHRlbXBbMzBd OworICAgIHdoaWxlICgqdHRuYW1lICE9ICdcMCcpIHR0bmFtZSsrOyAgICAgICAvKiBjb21tcyB0 dHkgcGF0aCBuYW1lICovCisgICAgdHRuYW1lIC09IDM7CisgICAgc3ByaW50Zih0ZW1wLCIvdXNy L2Jpbi9nZXRvbi5zaCAlcyIsdHRuYW1lKTsKKyAgICByZXR1cm4oenN5c2NtZCh0ZW1wKSk7Cit9 CisjZW5kaWYgLyogQVRUNzMwMCAqLworCisvKiAgVCBUIFMgQyBBIFIgUiAgLS0gIFNldCB0dGNh cnIgdmFyaWFibGUsIGNvbnRyb2xsaW5nIGNhcnJpZXIgaGFuZGxpbmcuCisgKgorICogIDAgPSBP ZmY6IEFsd2F5cyBpZ25vcmUgY2Fycmllci4gRS5nLiB5b3UgY2FuIGNvbm5lY3Qgd2l0aG91dCBj YXJyaWVyLgorICogIDEgPSBPbjogSGVlZCBjYXJyaWVyLCBleGNlcHQgZHVyaW5nIGRpYWxpbmcu IENhcnJpZXIgbG9zcyBnaXZlcyBkaXNjb25uZWN0LgorICogIDIgPSBBdXRvOiBGb3IgIm1vZGVt IGRpcmVjdCI6IFRoZSBzYW1lIGFzICJPZmYiLgorICogICAgICAgICAgICBGb3IgcmVhbCBtb2Rl bSB0eXBlczogSGVlZCBjYXJyaWVyIGR1cmluZyBjb25uZWN0LCBidXQgaWdub3JlCisgKiAgICAg ICAgICAgICAgICBpdCBhbnl0aW1lIGVsc2UuICBDb21wYXRpYmxlIHdpdGggcHJlLTVBIEMtS2Vy bWl0IHZlcnNpb25zLgorICoKKyAqIEFzIHlvdSBjYW4gc2VlLCB0aGlzIHNldHRpbmcgZG9lcyBu b3QgYWZmZWN0IGRpYWxpbmcsIHdoaWNoIGFsd2F5cyBpZ25vcmVzCisgKiBjYXJyaWVyICh1bmxl c3MgdGhlcmUgaXMgc29tZSBzcGVjaWFsIGV4Y2VwdGlvbiBmb3Igc29tZSBtb2RlbSB0eXBlKS4g IEl0CisgKiBkb2VzIGFmZmVjdCB0dG9wZW4oKSBpZiBpdCBpcyBzZXQgYmVmb3JlIHR0b3Blbigp IGlzIHVzZWQuICBUaGlzIHNldHRpbmcKKyAqIHRha2VzIGVmZmVjdCBvbiB0aGUgbmV4dCBjYWxs IHRvIHR0b3BlbigpL3R0cGt0KCkvdHR2dCgpLiAgQW5kIHRoZXkgYXJlCisgKiAob3Igc2hvdWxk IGJlKSBhbHdheXMgY2FsbGVkIGJlZm9yZSBhbnkgY29tbXVuaWNhdGlvbnMgaXMgdHJpZWQsIHdo aWNoCisgKiBtZWFucyB0aGF0LCBwcmFjdGljYWxseSBzcGVha2luZywgdGhlIGVmZmVjdCBpcyBp bW1lZGlhdGUuCisgKgorICogT2YgY291cnNlLCBub3RoaW5nIG9mIHRoaXMgYXBwbGllcyB0byBy ZW1vdGUgbW9kZSAoeGxvY2FsID0gMCkuCisgKgorICogU29tZW9uZSBoYXMgeWV0IHRvIHVuY292 ZXIgaG93IHRvIG1hbmlwdWxhdGUgdGhlIGNhcnJpZXIgaW4gdGhlIEJTRAorICogZW52aXJvbm1l bnQgKG9yIGFueSBub24tdGVybWlvIHVzaW5nIGVudmlyb25tZW50KS4gIFVudGlsIHRoYXQgdGlt ZSwgdGhpcworICogd2lsbCBzaW1wbHkgYmUgYSBuby1vcCBmb3IgQlNELgorICoKKyAqIE5vdGUg dGhhdCBpbiBwcmV2aW91cyB2ZXJzaW9ucywgdGhlIGNhcnJpZXIgd2FzIG1vc3Qgb2Z0ZW4gbGVm dCB1bmNoYW5nZWQKKyAqIGluIHR0cGt0KCkvdHR2dCgpIHVubGVzcyB0aGV5IHdlcmUgY2FsbGVk IHdpdGggRkxPX0RJQUwgb3IgRkxPX0RJQVguICBUaGlzCisgKiBoYXMgY2hhbmdlZC4gIE5vdyBp dCBpcyBjb250cm9sbGVkIGJ5IHR0Y2FyciBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZXNlCisgKiBt b2Rlcy4KKyAqLworaW50Cit0dHNjYXJyKGNhcnJpZXIpIGludCBjYXJyaWVyOyB7CisgICAgdHRj YXJyID0gY2FycmllcjsKKyAgICBkZWJ1ZyhGMTAxLCAidHRzY2FyciIsIiIsdHRjYXJyKTsKKyAg ICByZXR1cm4odHRjYXJyKTsKK30KKworLyogQyBBIFIgUiBDIFQgTCAgLS0gIFNldCB0dHkgbW9k ZXMgZm9yIGNhcnJpZXIgdHJlYXRtZW50LgorICoKKyAqIFNldHMgdGhlIGFwcHJvcHJpYXRlIGJp dHMgaW4gYSB0ZXJtaW8gb3Igc2d0dHliIHN0cnVjdCBmb3IgY2FycmllciBjb250cm9sCisgKiAo YWN0dWFsbHksIHRoZXJlIGFyZSBubyBiaXRzIGluIHNndHR5YiBmb3IgdGhhdCksIG9yIHBlcmZv cm1zIGFueSBvdGhlcgorICogb3BlcmF0aW9ucyBuZWVkZWQgdG8gY29udHJvbCB0aGlzIG9uIHRo ZSBjdXJyZW50IHN5c3RlbS4gIFRoZSBmdW5jdGlvbiBkb2VzCisgKiBub3QgZG8gdGhlIGFjdHVh bCBUQ1NFVEEgb3Igc3R0eSwgc2luY2Ugb2Z0ZW4gd2Ugd2FudCB0byBzZXQgb3RoZXIgYml0cyB0 b28KKyAqIGZpcnN0LiAgRG9uJ3QgY2FsbCB0aGlzIGZ1bmN0aW9uIHdoZW4geGxvY2FsIGlzIDAs IG9yIHRoZSB0dHkgaXMgbm90IG9wZW5lZC4KKyAqCisgKiBXZSBkb24ndCBrbm93IGhvdyB0byBk byBhbnl0aGluZyBsaWtlIGNhcnJpZXIgY29udHJvbCBvbiBub24tQVRUU1Ygc3lzdGVtcywKKyAq IGV4Y2VwdCwgYXBwYXJlbnRseSwgdWx0cml4LiAgU2VlIGFib3ZlLiAgSXQgaXMgYWxzbyBrbm93 biB0aGF0IHRoaXMgZG9lc24ndAorICogaGF2ZSBtdWNoIGVmZmVjdCBvbiBhIFhlbml4IHN5c3Rl bS4gIEZvciBYZW5peCwgb25lIHNob3VsZCBzd2l0Y2ggYmFjayBhbmQKKyAqIGZvcnRoIGJldHdl ZW4gdGhlIHVwcGVyIGFuZCBsb3dlciBjYXNlIGRldmljZSBmaWxlcy4gIE1heWJlIGxhdGVyLgor ICogUHJlc2VudGx5LCBYZW5peCB3aWxsIHN0aWNrIHRvIHRoZSBtb2RlIGl0IHdhcyBvcGVuZWQg d2l0aC4KKyAqCisgKiBjYXJyaWVyOiAwID0gaWdub3JlIGNhcnJpZXIsIDEgPSByZXF1aXJlIGNh cnJpZXIuCisgKiBUaGUgY3VycmVudCBzdGF0ZSBpcyBzYXZlZCBpbiBjdXJjYXJyLCBhbmQgY2hl Y2tlZCB0byBzYXZlIGxhYm91ci4KKyAqLworI2lmZGVmIFNWT1JQT1NJWAoraW50CisjaWZkZWYg QlNENDRPUlBPU0lYCitjYXJyY3RsKHR0cGFyLCBjYXJyaWVyKQlzdHJ1Y3QgdGVybWlvcyAqdHRw YXI7IGludCBjYXJyaWVyOworI2Vsc2UgLyogQVRUU1YgKi8KK2NhcnJjdGwodHRwYXIsIGNhcnJp ZXIpCXN0cnVjdCB0ZXJtaW8gKnR0cGFyOyBpbnQgY2FycmllcjsKKyNlbmRpZiAvKiBCU0Q0NE9S UE9TSVggKi8KKy8qIGNhcnJjdGwgKi8geworICAgIGRlYnVnKEYxMDEsICJjYXJyY3RsIiwiIixj YXJyaWVyKTsKKyAgICBpZiAoY2FycmllcikKKyAgICAgIHR0cGFyLT5jX2NmbGFnICY9IH5DTE9D QUw7CisgICAgZWxzZQorICAgICAgdHRwYXItPmNfY2ZsYWcgfD0gQ0xPQ0FMOworICAgIHJldHVy bigwKTsKK30KKyNlbHNlIC8qIEJlcmtlbGV5LCBWNywgZXQgYWwuLi4gKi8KK2ludAorY2FycmN0 bCh0dHBhciwgY2Fycmllcikgc3RydWN0IHNndHR5YiAqdHRwYXI7IGludCBjYXJyaWVyOyB7Cisg ICAgZGVidWcoRjEwMSwgImNhcnJjdGwiLCIiLGNhcnJpZXIpOworICAgIGlmIChjYXJyaWVyID09 IGN1cmNhcnIpCisgICAgICByZXR1cm4oMCk7CisgICAgY3VyY2FyciA9IGNhcnJpZXI7CisjaWZk ZWYgdWx0cml4CisjaWZkZWYgQ09NTUVOVAorLyoKKyAgT2xkIGNvZGUgZnJvbSBzb21lYm9keSBh dCBERUMgdGhhdCB0ZW5kcyB0byBnZXQgc3R1Y2ssIHRpbWUgb3V0LCBldGMuCisqLworICAgIGlm IChjYXJyaWVyKSB7CisJaW9jdGwodHR5ZmQsIFRJT0NNT0RFTSwgJnRlbXApOworCWlvY3RsKHR0 eWZkLCBUSU9DSFBDTCwgMCk7CisgICAgfSBlbHNlIHsKKwkvKiAoQWNjb3JkaW5nIHRvIHRoZSBt YW51YWxzLCBUSU9DTkNBUiBzaG91bGQgYmUgcHJlZmVycmVkICovCisJLyogb3ZlciBUSU9DTk1P REVNLi4uKSAqLworCWlvY3RsKHR0eWZkLCBUSU9DTk1PREVNLCAmdGVtcCk7CisgICAgfQorI2Vs c2UKKy8qCisgIE5ldyBjb2RlIGZyb20gSmFtaWUgV2F0c29uIHRoYXQsIGhlIHNheXMsIGVsaW1p bmF0ZXMgdGhlIHByb2JsZW1zLgorKi8KKyAgICBpZiAoY2FycmllcikgeworCWlvY3RsKHR0eWZk LCBUSU9DQ0FSKTsKKwlpb2N0bCh0dHlmZCwgVElPQ0hQQ0wpOworICAgIH0gZWxzZSB7CisJaW9j dGwodHR5ZmQsIFRJT0NOQ0FSKTsKKyAgICB9CisjZW5kaWYgLyogQ09NTUVOVCAqLworI2VuZGlm IC8qIHVsdHJpeCAqLworICAgIHJldHVybigwKTsKK30KKyNlbmRpZiAvKiBTVk9SUE9TSVggKi8K KworCisvKiAgVCBUIEcgTSBEIE0gIC0tICBHZXQgbW9kZW0gc2lnbmFscyAgKi8KKy8qCisgTG9v a3MgZm9yIFJTLTIzMiBtb2RlbSBzaWduYWxzLCBhbmQgcmV0dXJucyB0aG9zZSB0aGF0IGFyZSBv biBpbiBhcyBpdHMKKyByZXR1cm4gdmFsdWUsIGluIGEgYml0IG1hc2sgY29tcG9zZWQgb2YgdGhl IEJNX3h4eCB2YWx1ZXMgZGVmaW5lZCBpbiBja2NkZWIuaC4KKyBSZXR1cm5zOgorIC0zIE5vdCBp bXBsZW1lbnRlZAorIC0yIGlmIHRoZSBjb21tdW5pY2F0aW9uIGRldmljZSBkb2VzIG5vdCBoYXZl IG1vZGVtIGNvbnRyb2wgKGUuZy4gdGVsbmV0KQorIC0xIG9uIGVycm9yLgorID49IDAgb24gc3Vj Y2Vzcywgd2l0aCBhIGJpdCBtYXNrIGNvbnRhaW5pbmcgdGhlIG1vZGVtIHNpZ25hbHMgdGhhdCBh cmUgb24uCisqLworCisvKgorICBEZWZpbmUgdGhlIHN5bWJvbCBLX01ETUNUTCBpZiB3ZSBoYXZl IFN5cyBWIFIzIC8gNC4zIEJTRCBzdHlsZQorICBtb2RlbSBjb250cm9sLCBuYW1lbHkgdGhlIFRJ T0NNR0VUIGlvY3RsLgorKi8KKworI2lmZGVmIEJTRDQzCisjZGVmaW5lIEtfTURNQ1RMCisjZW5k aWYgLyogQlNENDMgKi8KKworI2lmZGVmIFNVTk9TNAorI2RlZmluZSBLX01ETUNUTAorI2VuZGlm IC8qIFNVTk9TNCAqLworCisvKgorICBTQ08gT3BlblNlcnZlciBSNS4wLjQuICBUaGUgVElPQ01H RVQgZGVmaW5pdGlvbiBpcyBoYXJkd2lyZWQgaW4gYmVjYXVzZSBpdAorICBpcyBza2lwcGVkIGlu IHRlcm1pby5oIHdoZW4gX1BPU0lYX1NPVVJDRSBpcyBkZWZpbmVkLiAgQnV0IF9QT1NJWF9TT1VS Q0UKKyAgbXVzdCBiZSBkZWZpbmVkIGluIG9yZGVyIHRvIGdldCB0aGUgaGlnaCBzZXJpYWwgc3Bl ZWRzIHRoYXQgYXJlIG5ldyB0bworICA1LjAuNC4gIEhvd2V2ZXIsIHRoZSByZWd1bGFyIFNDTyBk cml2ZXJzIGRvIG5vdCBpbXBsZW1lbnQgVElPQ01HRVQsIHNvIHRoZQorICBpb2N0bCgpIHJldHVy bnMgLTEgd2l0aCBlcnJubyAyMiAoaW52YWxpZCBmdW5jdGlvbikuICBCdXQgdGhpcmQtcGFydHkK KyAgZHJpdmVycywgZS5nLiBmb3IgRGlnaWJvYXJkLCBkbyBpbXBsZW1lbnQgaXQsIGFuZCBzbyBp dCBzaG91bGQgd29yayBvbiBwb3J0cworICBkcml2ZW4gYnkgdGhvc2UgZHJpdmVycy4KKyovCisj aWZkZWYgU0NPX09TUjUwNAorI2lmbmRlZiBUSU9DTUdFVAorI2RlZmluZSBUSU9DTUdFVCAoKCd0 Jzw8OCl8MjkpCisjZW5kaWYgLyogVElPQ01HRVQgKi8KKyNlbmRpZiAvKiBTQ09fT1NSNTA0ICov CisKKyNpZmRlZiBDS19TQ09WNQorLyogQmVjYXVzZSBQT1NJWCBzdHJpY3RuZXNzIGluIDxzeXMv dGVybWlvLmg+IHdvbid0IGxldCB1cyBzZWUgdGhlc2UuICovCisjaWZuZGVmIFRJT0NNX0RUUgor I2RlZmluZSBUSU9DTV9EVFIJMHgwMDAyCQkvKiBkYXRhIHRlcm1pbmFsIHJlYWR5ICovCisjZGVm aW5lIFRJT0NNX1JUUwkweDAwMDQJCS8qIHJlcXVlc3QgdG8gc2VuZCAqLworI2RlZmluZSBUSU9D TV9DVFMJMHgwMDIwCQkvKiBjbGVhciB0byBzZW5kICovCisjZGVmaW5lIFRJT0NNX0NBUgkweDAw NDAJCS8qIGNhcnJpZXIgZGV0ZWN0ICovCisjZGVmaW5lIFRJT0NNX1JORwkweDAwODAJCS8qIHJp bmcgKi8KKyNkZWZpbmUgVElPQ01fRFNSCTB4MDEwMAkJLyogZGF0YSBzZXQgcmVhZHkgKi8KKyNk ZWZpbmUgVElPQ01fQ0QJVElPQ01fQ0FSCisjZGVmaW5lIFRJT0NNX1JJCVRJT0NNX1JORworI2Vu ZGlmIC8qIFRJT0NNX0RUUiAqLworI2VuZGlmIC8qIENLX1NDT1Y1ICovCisKKyNpZmRlZiBRTlgK KyNkZWZpbmUgS19NRE1DVEwKKyNlbHNlCisjaWZkZWYgVElPQ01HRVQKKyNkZWZpbmUgS19NRE1D VEwKKyNlbmRpZiAvKiBUSU9DTUdFVCAqLworI2VuZGlmIC8qIFFOWCAqLworLyoKKyAgIkEgc2Vy aWFsIGNvbW11bmljYXRpb24gcHJvZ3JhbSB0aGF0IGNhbid0IHJlYWQgbW9kZW0gc2lnbmFscwor ICAgaXMgbGlrZSBhIGNhciB3aXRob3V0IHdpbmRvd3MuIgorKi8KK2ludAordHRnbWRtKCkgewor CisjaWZkZWYgUU5YCisjaW5jbHVkZSA8c3lzL3Fpb2N0bC5oPgorCisgICAgdW5zaWduZWQgbG9u ZyB5LCBtZG1iaXRzWzJdOworICAgIGludCB4LCB6ID0gMDsKKworICAgIGlmICh4bG9jYWwgJiYg dHR5ZmQgPCAwKQorICAgICAgcmV0dXJuKC0xKTsKKworI2lmZGVmIE5FVENPTk4KKyAgICBpZiAo bmV0Y29ubikgewkJCS8qIE5ldHdvcmsgY29ubmVjdGlvbiAqLworI2lmZGVmIFROX0NPTVBPUlQK KyAgICAgICAgaWYgKGlzdG5jb21wb3J0KCkpIHsKKwkgICAgZ290c2lncyA9IDE7CisJICAgIHJl dHVybih0bmdtZG0oKSk7CisJfSBlbHNlCisjZW5kaWYgLyogVE5fQ09NUE9SVCAqLworCSAgcmV0 dXJuKC0yKTsJCQkvKiBObyBtb2RlbSBzaWduYWxzICovCisgICAgfQorI2VuZGlmIC8qIE5FVENP Tk4gKi8KKworI2lmZGVmIE5FVENNRAorICAgIGlmICh0dHBpcGUpIHJldHVybigtMik7CisjZW5k aWYgLyogTkVUQ01EICovCisjaWZkZWYgTkVUUFRZCisgICAgaWYgKHR0cHR5KSByZXR1cm4oLTIp OworI2VuZGlmIC8qIE5FVFBUWSAqLworCisgICAgbWRtYml0c1swXSA9IDBMOworICAgIG1kbWJp dHNbMV0gPSAwTDsKKy8qCisgKiBGcm9tIDxzeXMvcWlvY3RsLmg+OgorICoKKyAqIFNFUklBTCBk ZXZpY2VzICAgKGFsbCBEZXYuc2VyIHZlcnNpb25zKQorICogMCA6IERUUiAgICAgICAgICAgOCA9 IERhdGEgQml0cyAwICAxNiAtIHJlc2VydmVkICAgICAyNCAtIHJlc2VydmVkCisgKiAxIDogUlRT ICAgICAgICAgICA5ID0gRGF0YSBCaXRzIDEgIDE3IC0gcmVzZXJ2ZWQgICAgIDI1IC0gcmVzZXJ2 ZWQKKyAqIDIgPSBPdXQgMSAgICAgICAgMTAgPSBTdG9wIEJpdHMgICAgMTggLSByZXNlcnZlZCAg ICAgMjYgLSByZXNlcnZlZAorICogMyA9IEludCBFbmFibGUgICAxMSA9IFBhciBFbmFibGUgICAx OSAtIHJlc2VydmVkICAgICAyNyAtIHJlc2VydmVkCisgKiA0ID0gTG9vcCAgICAgICAgIDEyID0g UGFyIEV2ZW4gICAgIDIwID0gQ1RTICAgICAgICAgIDI4IC0gcmVzZXJ2ZWQKKyAqIDUgLSByZXNl cnZlZCAgICAgMTMgPSBQYXIgU3RpY2sgICAgMjEgPSBEU1IgICAgICAgICAgMjkgLSByZXNlcnZl ZAorICogNiAtIHJlc2VydmVkICAgICAxNCA6IEJyZWFrICAgICAgICAyMiA9IFJJICAgICAgICAg ICAzMCAtIHJlc2VydmVkCisgKiA3IC0gcmVzZXJ2ZWQgICAgIDE1ID0gMCAgICAgICAgICAgIDIz ID0gQ0QgICAgICAgICAgIDMxIC0gcmVzZXJ2ZWQKKyAqLworICAgIGVycm5vID0gMDsKKyAgICB4 ID0gcW54X2lvY3RsKHR0eWZkLCBRQ1RMX0RFVl9DVEwsICZtZG1iaXRzWzBdLCA4LCAmbWRtYml0 c1swXSwgNCk7CisgICAgZGVidWcoRjEwMSwidHRnbWRtIHFueF9pb2N0bCIsIiIseCk7CisgICAg ZGVidWcoRjEwMSwidHRnbWRtIHFueF9pb2N0bCBlcnJubyIsIiIsZXJybm8pOworICAgIGlmICgh eCkgeworCWRlYnVnKEYxMDEsInR0Z21kbSBxbnhfaW9jdGwgbWRtYml0c1swXSIsIiIsbWRtYml0 c1swXSk7CisJZGVidWcoRjEwMSwidHRnbWRtIHFueF9pb2N0bCBtZG1iaXRzWzFdIiwiIixtZG1i aXRzWzFdKTsKKwl5ID0gbWRtYml0c1swXTsKKwlpZiAoeSAmIDB4MDAwMDAxTCkgeiB8PSBCTV9E VFI7CS8qIEJpdCAgMCAqLworCWlmICh5ICYgMHgwMDAwMDJMKSB6IHw9IEJNX1JUUzsJLyogQml0 ICAxICovCisJaWYgKHkgJiAweDEwMDAwMEwpIHogfD0gQk1fQ1RTOwkvKiBCaXQgMjAgKi8KKwlp ZiAoeSAmIDB4MjAwMDAwTCkgeiB8PSBCTV9EU1I7CS8qIEJpdCAyMSAqLworCWlmICh5ICYgMHg0 MDAwMDBMKSB6IHw9IEJNX1JORzsJLyogQml0IDIyICovCisJaWYgKHkgJiAweDgwMDAwMEwpIHog fD0gQk1fRENEOwkvKiBCaXQgMjMgKi8KKwlkZWJ1ZyhGMTAxLCJ0dGdtZG0gcW54IHJlc3VsdCIs IiIseik7CisJZGVidWcoRjExMCwidHRnbWRtIHFueCBDRCA9ICIsKHogJiBCTV9EQ0QpID8gIk9u IiA6ICJPZmYiLCAwKTsKKwlnb3RzaWdzID0gMTsKKwlyZXR1cm4oeik7CisgICAgfSBlbHNlIHJl dHVybigtMSk7CisjZWxzZSAvKiBRTlggKi8KKyNpZmRlZiBIUFVYCQkJCS8qIEhQVVggaGFzIGl0 cyBvd24gd2F5ICovCisgICAgaW50IHgsIHo7CisKKyNpZmRlZiBIUFVYMTAJCQkJLyogTW9kZW0g ZmxhZyB3b3JkICovCisgICAgbWZsYWcgeTsJCQkJLyogbWZsYWcgdHlwZWRlZidkIGluIDxzeXMv bW9kZW0uaD4gKi8KKyNlbHNlCisjaWZkZWYgSFBVWDkKKyAgICBtZmxhZyB5OworI2Vsc2UKKyNp ZmRlZiBIUFVYOAorICAgIG1mbGFnIHk7CisjZWxzZQorICAgIHVuc2lnbmVkIGxvbmcgeTsJCQkv KiBOb3Qgc3VyZSBhYm91dCBwcmUtOC4wLi4uICovCisjZW5kaWYgLyogSFBVWDggKi8KKyNlbmRp ZiAvKiBIUFVYOSAqLworI2VuZGlmIC8qIEhQVVgxMCAqLworCisgICAgaWYgKHhsb2NhbCAmJiB0 dHlmZCA8IDApCisgICAgICByZXR1cm4oLTEpOworCisjaWZkZWYgTkVUQ09OTgorICAgIGlmIChu ZXRjb25uKSB7CQkJLyogTmV0d29yayBjb25uZWN0aW9uICovCisjaWZkZWYgVE5fQ09NUE9SVAor ICAgICAgICBpZiAoaXN0bmNvbXBvcnQoKSkgeworCSAgICBnb3RzaWdzID0gMTsKKwkgICAgcmV0 dXJuKHRuZ21kbSgpKTsKKwl9IGVsc2UKKyNlbmRpZiAvKiBUTl9DT01QT1JUICovCisJICByZXR1 cm4oLTIpOwkJCS8qIE5vIG1vZGVtIHNpZ25hbHMgKi8KKyAgICB9CisjZW5kaWYgLyogTkVUQ09O TiAqLworCisjaWZkZWYgTkVUQ01ECisgICAgaWYgKHR0cGlwZSkgcmV0dXJuKC0yKTsKKyNlbmRp ZiAvKiBORVRDTUQgKi8KKyNpZmRlZiBORVRQVFkKKyAgICBpZiAodHRwdHkpIHJldHVybigtMik7 CisjZW5kaWYgLyogTkVUUFRZICovCisKKyAgICBpZiAoeGxvY2FsKQkJCQkvKiBHZXQgbW9kZW0g c2lnbmFscyAqLworICAgICAgeCA9IGlvY3RsKHR0eWZkLE1DR0VUQSwmeSk7CisgICAgZWxzZQor ICAgICAgeCA9IGlvY3RsKDAsTUNHRVRBLCZ5KTsKKyAgICBpZiAoeCA8IDApIHJldHVybigtMSk7 CisgICAgZGVidWcoRjEwMSwidHRnbWRtIiwiIix5KTsKKworICAgIHogPSAwOwkJCQkvKiBJbml0 aWFsaXplIHJldHVybiB2YWx1ZSAqLworCisvKiBOb3cgc2V0IGJpdHMgZm9yIGVhY2ggbW9kZW0g c2lnbmFsIHRoYXQgaXMgcmVwb3J0ZWQgdG8gYmUgb24uICovCisKKyNpZmRlZiBNQ1RTCisgICAg LyogQ2xlYXIgVG8gU2VuZCAqLworICAgIGRlYnVnKEYxMDEsInR0Z21kbSBIUFVYIENUUyIsIiIs eSAmIE1DVFMpOworICAgIGlmICh5ICYgTUNUUykgeiB8PSBCTV9DVFM7CisjZW5kaWYKKyNpZmRl ZiBNRFNSCisgICAgLyogRGF0YSBTZXQgUmVhZHkgKi8KKyAgICBkZWJ1ZyhGMTAxLCJ0dGdtZG0g SFBVWCBEU1IiLCIiLHkgJiBNRFNSKTsKKyAgICBpZiAoeSAmIE1EU1IpIHogfD0gQk1fRFNSOwor I2VuZGlmCisjaWZkZWYgTURDRAorICAgIC8qIENhcnJpZXIgKi8KKyAgICBkZWJ1ZyhGMTAxLCJ0 dGdtZG0gSFBVWCBEQ0QiLCIiLHkgJiBNRENEKTsKKyAgICBpZiAoeSAmIE1EQ0QpIHogfD0gQk1f RENEOworI2VuZGlmCisjaWZkZWYgTVJJCisgICAgLyogUmluZyBJbmRpY2F0ZSAqLworICAgIGRl YnVnKEYxMDEsInR0Z21kbSBIUFVYIFJJIiwiIix5ICYgTVJJKTsKKyAgICBpZiAoeSAmIE1SSSkg eiB8PSBCTV9STkc7CisjZW5kaWYKKyNpZmRlZiBNRFRSCisgICAgLyogRGF0YSBUZXJtaW5hbCBS ZWFkeSAqLworICAgIGRlYnVnKEYxMDEsInR0Z21kbSBIUFVYIERUUiIsIiIseSAmIE1EVFIpOwor ICAgIGlmICh5ICYgTURUUikgeiB8PSBCTV9EVFI7CisjZW5kaWYKKyNpZmRlZiBNUlRTCisgICAg LyogUmVxdWVzdCBUbyBTZW5kICovCisgICAgZGVidWcoRjEwMSwidHRnbWRtIEhQVVggUlRTIiwi Iix5ICYgTVJUUyk7CisgICAgaWYgKHkgJiBNUlRTKSB6IHw9IEJNX1JUUzsKKyNlbmRpZgorICAg IGdvdHNpZ3MgPSAxOworICAgIHJldHVybih6KTsKKworI2Vsc2UgLyogISBIUFVYICovCisKKyNp ZmRlZiBLX01ETUNUTAorLyoKKyAgTm90ZSwgVElPQ01HRVQgbWlnaHQgYWxyZWFkeSBoYXZlIGJl ZW4gZGVmaW5lZCBpbiA8c3lzL2lvY3RsLmg+IG9yIGVsc2V3aGVyZS4KKyAgSWYgbm90LCB3ZSB0 cnkgaW5jbHVkaW5nIDxzeXMvdHR5Y29tLmg+IC0tIGlmIHRoaXMgYmxvd3MgdXAgdGhlbiBtb3Jl IGlmZGVmcworICBhcmUgbmVlZGVkLgorKi8KKyNpZm5kZWYgVElPQ01HRVQKKyNpbmNsdWRlIDxz eXMvdHR5Y29tLmg+CisjZW5kaWYgLyogVElPQ01HRVQgKi8KKworICAgIGludCB4LCB5LCB6Owor CisgICAgZGVidWcoRjEwMCwidHRnbWRtIEtfTURNQ1RMIGRlZmluZWQiLCIiLDApOworCisjaWZk ZWYgTkVUQ09OTgorICAgIGlmIChuZXRjb25uKSB7CQkJLyogTmV0d29yayBjb25uZWN0aW9uICov CisjaWZkZWYgVE5fQ09NUE9SVAorICAgICAgICBpZiAoaXN0bmNvbXBvcnQoKSkgeworCSAgICBn b3RzaWdzID0gMTsKKwkgICAgcmV0dXJuKHRuZ21kbSgpKTsKKwl9IGVsc2UKKyNlbmRpZiAvKiBU Tl9DT01QT1JUICovCisJICByZXR1cm4oLTIpOwkJCS8qIE5vIG1vZGVtIHNpZ25hbHMgKi8KKyAg ICB9CisjZW5kaWYgLyogTkVUQ09OTiAqLworCisjaWZkZWYgTkVUQ01ECisgICAgaWYgKHR0cGlw ZSkgcmV0dXJuKC0yKTsKKyNlbmRpZiAvKiBORVRDTUQgKi8KKyNpZmRlZiBORVRQVFkKKyAgICBp ZiAodHRwdHkpIHJldHVybigtMik7CisjZW5kaWYgLyogTkVUUFRZICovCisKKyAgICBpZiAoeGxv Y2FsICYmIHR0eWZkIDwgMCkKKyAgICAgIHJldHVybigtMSk7CisKKyAgICBpZiAoeGxvY2FsKQor ICAgICAgeCA9IGlvY3RsKHR0eWZkLFRJT0NNR0VULCZ5KTsJLyogR2V0IG1vZGVtIHNpZ25hbHMu ICovCisgICAgZWxzZQorICAgICAgeCA9IGlvY3RsKDAsVElPQ01HRVQsJnkpOworICAgIGRlYnVn KEYxMDEsInR0Z21kbSBUSU9DTUdFVCBpb2N0bCIsIiIseCk7CisgICAgaWYgKHggPCAwKSB7CisJ ZGVidWcoRjEwMSwidHRnbWRtIGVycm5vIiwiIixlcnJubyk7CisJcmV0dXJuKC0xKTsKKyAgICB9 CisgICAgZGVidWcoRjEwMSwidHRnbWRtIGJpdHMiLCIiLHkpOworCisgICAgeiA9IDA7CQkJCS8q IEluaXRpYWxpemUgcmV0dXJuIHZhbHVlLiAqLworI2lmZGVmIFRJT0NNX0NUUworICAgIC8qIENs ZWFyIFRvIFNlbmQgKi8KKyAgICBpZiAoeSAmIFRJT0NNX0NUUykgeiB8PSBCTV9DVFM7CisgICAg ZGVidWcoRjEwMSwidHRnbWRtIFRJT0NNX0NUUyBkZWZpbmVkIiwiIixUSU9DTV9DVFMpOyAKKyNl bHNlCisgICAgZGVidWcoRjEwMCwidHRnbWRtIFRJT0NNX0NUUyBub3QgZGVmaW5lZCIsIiIsMCk7 CisjZW5kaWYKKyNpZmRlZiBUSU9DTV9EU1IKKyAgICAvKiBEYXRhIFNldCBSZWFkeSAqLworICAg IGlmICh5ICYgVElPQ01fRFNSKSB6IHw9IEJNX0RTUjsKKyAgICBkZWJ1ZyhGMTAxLCJ0dGdtZG0g VElPQ01fRFNSIGRlZmluZWQiLCIiLFRJT0NNX0RTUik7IAorI2Vsc2UKKyAgICBkZWJ1ZyhGMTAw LCJ0dGdtZG0gVElPQ01fRFNSIG5vdCBkZWZpbmVkIiwiIiwwKTsKKyNlbmRpZgorI2lmZGVmIFRJ T0NNX0NBUgorICAgIC8qIENhcnJpZXIgKi8KKyAgICBpZiAoeSAmIFRJT0NNX0NBUikgeiB8PSBC TV9EQ0Q7CisgICAgZGVidWcoRjEwMSwidHRnbWRtIFRJT0NNX0NBUiBkZWZpbmVkIiwiIixUSU9D TV9DQVIpOyAKKyNlbHNlCisgICAgZGVidWcoRjEwMCwidHRnbWRtIFRJT0NNX0NBUiBub3QgZGVm aW5lZCIsIiIsMCk7CisjZW5kaWYKKyNpZmRlZiBUSU9DTV9STkcKKyAgICAvKiBSaW5nIEluZGlj YXRlICovCisgICAgaWYgKHkgJiBUSU9DTV9STkcpIHogfD0gQk1fUk5HOworICAgIGRlYnVnKEYx MDEsInR0Z21kbSBUSU9DTV9STkcgZGVmaW5lZCIsIiIsVElPQ01fUk5HKTsgCisjZWxzZQorICAg IGRlYnVnKEYxMDAsInR0Z21kbSBUSU9DTV9STkcgbm90IGRlZmluZWQiLCIiLDApOworI2VuZGlm CisjaWZkZWYgVElPQ01fRFRSCisgICAgLyogRGF0YSBUZXJtaW5hbCBSZWFkeSAqLworICAgIGlm ICh5ICYgVElPQ01fRFRSKSB6IHw9IEJNX0RUUjsKKyAgICBkZWJ1ZyhGMTAxLCJ0dGdtZG0gVElP Q01fRFRSIGRlZmluZWQiLCIiLFRJT0NNX0RUUik7IAorI2Vsc2UKKyAgICBkZWJ1ZyhGMTAwLCJ0 dGdtZG0gVElPQ01fRFRSIG5vdCBkZWZpbmVkIiwiIiwwKTsKKyNlbmRpZgorI2lmZGVmIFRJT0NN X1JUUworICAgIC8qIFJlcXVlc3QgVG8gU2VuZCAqLworICAgIGlmICh5ICYgVElPQ01fUlRTKSB6 IHw9IEJNX1JUUzsKKyAgICBkZWJ1ZyhGMTAxLCJ0dGdtZG0gVElPQ01fUlRTIGRlZmluZWQiLCIi LFRJT0NNX1JUUyk7IAorI2Vsc2UKKyAgICBkZWJ1ZyhGMTAwLCJ0dGdtZG0gVElPQ01fUlRTIG5v dCBkZWZpbmVkIiwiIiwwKTsKKyNlbmRpZgorICAgIGdvdHNpZ3MgPSAxOworICAgIHJldHVybih6 KTsKKworI2Vsc2UgLyogIUtfTURNQ1RMIGNhdGNoLUFsbCAqLworCisgICAgZGVidWcoRjEwMCwi dHRnbWRtIEtfTURNQ1RMIG5vdCBkZWZpbmVkIiwiIiwwKTsKKyNpZmRlZiBUSU9DTUdFVAorICAg IGRlYnVnKEYxMDAsInR0Z21kbSBUSU9DTUdFVCBkZWZpbmVkIiwiIiwwKTsKKyNlbHNlCisgICAg ZGVidWcoRjEwMCwidHRnbWRtIFRJT0NNR0VUIG5vdCBkZWZpbmVkIiwiIiwwKTsKKyNlbmRpZiAv KiBUSU9DTUdFVCAqLworI2lmZGVmIF9TVklEMworICAgIGRlYnVnKEYxMDAsInR0Z21kbSBfU1ZJ RDMgZGVmaW5lZCIsIiIsMCk7CisjZWxzZQorICAgIGRlYnVnKEYxMDAsInR0Z21kbSBfU1ZJRDMg bm90IGRlZmluZWQiLCIiLDApOworI2VuZGlmIC8qIF9TVklEMyAqLworCisjaWZkZWYgTkVUQ09O TgorICAgIGlmIChuZXRjb25uKSB7CQkJLyogTmV0d29yayBjb25uZWN0aW9uICovCisjaWZkZWYg VE5fQ09NUE9SVAorICAgICAgICBpZiAoaXN0bmNvbXBvcnQoKSkgeworCSAgICBnb3RzaWdzID0g MTsKKwkgICAgcmV0dXJuKHRuZ21kbSgpKTsKKwl9IGVsc2UKKyNlbmRpZiAvKiBUTl9DT01QT1JU ICovCisJICByZXR1cm4oLTIpOwkJCS8qIE5vIG1vZGVtIHNpZ25hbHMgKi8KKyAgICB9CisjZW5k aWYgLyogTkVUQ09OTiAqLworCisjaWZkZWYgTkVUQ01ECisgICAgaWYgKHR0cGlwZSkgcmV0dXJu KC0yKTsKKyNlbmRpZiAvKiBORVRDTUQgKi8KKyNpZmRlZiBORVRQVFkKKyAgICBpZiAodHRwdHkp IHJldHVybigtMik7CisjZW5kaWYgLyogTkVUUFRZICovCisKKyAgICByZXR1cm4oLTMpOwkJCQkv KiBTb3JyeSwgSSBkb24ndCBrbm93IGhvdy4uLiAqLworCisjZW5kaWYgLyogS19NRE1DVEwgKi8K KyNlbmRpZiAvKiBIUFVYICovCisjZW5kaWYgLyogUU5YICovCit9CisKKy8qICBQIFMgVSBTIFAg RSBOIEQgIC0tICBQdXQgdGhpcyBwcm9jZXNzIGluIHRoZSBiYWNrZ3JvdW5kLiAgKi8KKworLyoK KyAgQ2FsbCB3aXRoIGZsYWcgbm9uemVybyBpZiBzdXNwZW5kaW5nIGlzIGFsbG93ZWQsIHplcm8g aWYgbm90IGFsbG93ZWQuCisgIFJldHVybnMgMCBvbiBhcHBhcmVudCBzdWNjZXNzLCAtMSBvbiBm YWlsdXJlIChmbGFnIHdhcyB6ZXJvLCBvcgorICBraWxsKCkgcmV0dXJuZWQgYW4gZXJyb3IgY29k ZS4KKyovCitpbnQKK3BzdXNwZW5kKGZsYWcpIGludCBmbGFnOyB7CisKKyNpZmRlZiBSVFUKKyAg ICBleHRlcm4gaW50IHJ0dV9idWc7CisjZW5kaWYgLyogUlRVICovCisKKyAgICBpZiAoZmxhZyA9 PSAwKSByZXR1cm4oLTEpOworCisjaWZkZWYgTk9KQworICAgIHJldHVybigtMSk7CisjZWxzZQor I2lmZGVmIFNJR1RTVFAKKy8qCisgIFRoZSBiaWcgcXVlc3Rpb24gaGVyZSBpcyB3aGV0aGVyIGpv YiBjb250cm9sIGlzICpyZWFsbHkqIHN1cHBvcnRlZC4KKyAgVGhlcmUncyBubyB3YXkgS2VybWl0 IGNhbiBrbm93IGZvciBzdXJlLiAgVGhlIGZhY3QgdGhhdCBTSUdUU1RQIGlzCisgIGRlZmluZWQg ZG9lcyBub3QgZ3VhcmFudGVlIHRoZSBVbml4IGtlcm5lbCBzdXBwb3J0cyBpdCwgYW5kIHRoZSBm YWN0CisgIHRoYXQgdGhlIFVuaXgga2VybmVsIHN1cHBvcnRzIGl0IGRvZXNuJ3QgZ3VhcmFudGVl IHRoYXQgdGhlIHVzZXIncworICBzaGVsbCAob3Igb3RoZXIgcHJvY2VzcyB0aGF0IGludm9rZWQg S2VybWl0KSBzdXBwb3J0cyBpdC4KKyovCisjaWZkZWYgUlRVCisgICAgcnR1X2J1ZyA9IDE7Cisj ZW5kaWYgLyogUlRVICovCisgICAgaWYgKGtpbGwoMCxTSUdTVE9QKSA8IDAKKyNpZmRlZiBNSVBT CisvKiBMZXQncyB0cnkgdGhpcyBmb3IgTUlQUyB0b28uICovCisJJiYga2lsbChnZXRwaWQoKSxT SUdTVE9QKSA8IDAKKyNlbmRpZiAvKiBNSVBTICovCisJKSB7CQkJCS8qIElmIGpvYiBjb250cm9s LCBzdXNwZW5kIHRoZSBqb2IgKi8KKwlwZXJyb3IoInN1c3BlbmQiKTsKKwlkZWJ1ZyhGMTAxLCJw c3VzcGVuZCBlcnJvciIsIiIsZXJybm8pOworCXJldHVybigtMSk7CisgICAgfQorICAgIGRlYnVn KEYxMDAsInBzdXNwZW5kIG9rIiwiIiwwKTsKKyAgICByZXR1cm4oMCk7CisjZWxzZQorICAgIHJl dHVybigtMSk7CisjZW5kaWYgLyogU0lHVFNUUCAqLworI2VuZGlmIC8qIE5PSkMgKi8KK30KKwor LyoKKyAgc2V0dWlkIHBhY2thZ2UsIGJ5IEtyaXN0b2ZmZXIgRXJpa3Nzb24sIHdpdGggY29udHJp YnV0aW9ucyBmcm9tIERlYW4KKyAgTG9uZyBhbmQgZmRjLgorKi8KKworLyogVGhlIGZvbGxvd2lu ZyBpcyBmb3IgU0NPIHdoZW4gQ0tfQU5TSUxJQlMgaXMgZGVmaW5lZC4uLiAqLworI2lmZGVmIE1f VU5JWAorI2lmZGVmIENLX0FOU0lMSUJTCisjaWZuZGVmIE5PR0VUSURfUFJPVE9TCisjZGVmaW5l IE5PR0VUSURfUFJPVE9TCisjZW5kaWYgLyogTk9HRVRJRF9QUk9UT1MgKi8KKyNlbmRpZiAvKiBD S19BTlNJTElCUyAqLworI2VuZGlmIC8qIE1fVU5JWCAqLworCisjaWZuZGVmIF9QT1NJWF9TT1VS Q0UKKyNpZm5kZWYgU1VOT1M0CisjaWZuZGVmIE5FWFQKKyNpZm5kZWYgUFMyQUlYMTAKKyNpZm5k ZWYgc2VxdWVudAorI2lmbmRlZiBIUFVYOQorI2lmbmRlZiBIUFVYMTAKKyNpZm5kZWYgQ09IRVJF TlQKKyNpZm5kZWYgTk9HRVRJRF9QUk9UT1MKK19QUk9UT1RZUCggVUlEX1QgZ2V0dWlkLCAodm9p ZCkgKTsKK19QUk9UT1RZUCggVUlEX1QgZ2V0ZXVpZCwgKHZvaWQpICk7CitfUFJPVE9UWVAoIFVJ RF9UIGdldHJldWlkLCAodm9pZCkgKTsKK19QUk9UT1RZUCggVUlEX1QgZ2V0Z2lkLCAodm9pZCkg KTsKK19QUk9UT1RZUCggVUlEX1QgZ2V0ZWdpZCwgKHZvaWQpICk7CitfUFJPVE9UWVAoIFVJRF9U IGdldHJlZ2lkLCAodm9pZCkgKTsKKyNlbmRpZiAvKiBOT0dFVElEX1BST1RPUyAqLworI2Vsc2UK K19QUk9UT1RZUCggVUlEX1QgZ2V0cmV1aWQsICh2b2lkKSApOworX1BST1RPVFlQKCBVSURfVCBn ZXRyZWdpZCwgKHZvaWQpICk7CisjZW5kaWYgLyogQ09IRVJFTlQgKi8KKyNlbmRpZiAvKiBIUFVY MTAgKi8KKyNlbmRpZiAvKiBIUFVYOSAqLworI2VuZGlmIC8qIHNlcXVlbnQgKi8KKyNlbmRpZiAv KiBQUzJBSVgxMCAqLworI2VuZGlmIC8qIE5FWFQgKi8KKyNlbmRpZiAvKiBTVU5PUzQgKi8KKyNl bmRpZiAvKiBfUE9TSVhfU09VUkNFICovCisKKy8qCitTdWJqZWN0OiBTZXQtdXNlci1pZAorVG86 IGZkY0B3YXRzdW4uY2MuY29sdW1iaWEuZWR1IChGcmFuayBkYSBDcnV6KQorRGF0ZTogU2F0LCAy MSBBcHIgOTAgNDo0ODoyNSBNRVMKK0Zyb206IEtyaXN0b2ZmZXIgRXJpa3Nzb24gPHNrZUBwa21h Yi5zZT4KKworVGhpcyBpcyBhIHNldCBvZiBmdW5jdGlvbnMgdG8gYmUgdXNlZCBpbiBwcm9ncmFt cyB0aGF0IG1heSBiZSBydW4gc2V0LXVzZXItaWQKK2FuZC9vciBzZXQtZ3JvdXAtaWQuIFRoZXkg aGFuZGxlIGJvdGggdGhlIGNhc2Ugd2hlcmUgdGhlIHByb2dyYW0gaXMgbm90IHJ1bgord2l0aCBz dWNoIHByaXZpbGVnZXMgKG5vdGhpbmcgc3BlY2lhbCBoYXBwZW5zIHRoZW4pLCBhbmQgdGhlIGNh c2Ugd2hlcmUgb25lCitvciBib3RoIG9mIHRoZXNlIHNldC1pZCBtb2RlcyBhcmUgdXNlZC4gIFRo ZSBwcm9ncmFtIGlzIG1hZGUgdG8gcnVuIHdpdGggdGhlCit1c2VyJ3MgcmVhbCB1c2VyIGFuZCBn cm91cCBpZHMgbW9zdCBvZiB0aGUgdGltZSwgZXhjZXB0IGZvciB3aGVuIG1vcmUKK3ByaXZpbGVn ZXMgYXJlIG5lZWRlZC4gIERvbid0IHNldC11c2VyLWlkIHRvICJyb290Ii4KKworVGhpcyB3b3Jr cyBvbiBTeXN0ZW0gViBhbmQgUE9TSVguICBJbiBCU0QsIGl0IGRlcGVuZHMgb24gdGhlCisic2F2 ZWQtc2V0LXVzZXItaWQiIGZlYXR1cmUuCisqLworCisjZGVmaW5lIFVJRF9ST09UIDAJCQkvKiBS b290IHVzZXIgYW5kIGdyb3VwIGlkcyAqLworI2RlZmluZSBHSURfUk9PVCAwCisKKy8qCisgIFRo ZSBmb2xsb3dpbmcgY29kZSBkZWZpbmVzIHRoZSBzeW1ib2wgU0VURVVJRCBmb3IgVU5JWCBzeXN0 ZW1zIGJhc2VkCisgIG9uIEJTRDQuNCAoZWl0aGVyIC1FbmN1bWJlcmVkIG9yIC1MaXRlKS4gIFRo aXMgcHJvZ3JhbSB3aWxsIHRoZW4gdXNlCisgIHNldGV1aWQoKSBhbmQgc2V0ZWdpZCgpIGluc3Rl YWQgb2Ygc2V0dWlkKCkgYW5kIHNldGdpZCgpLCB3aGljaCBzdGlsbAorICBkb24ndCBhbGxvdyBh cmJpdHJhcnkgc3dpdGNoaW5nLiAgSXQgYWxzbyBhdm9pZHMgc2V0cmV1aWQoKSBhbmQKKyAgc2V0 cmVnaWQoKSwgd2hpY2ggYXJlIGluY2x1ZGVkIGluIEJTRDQuNCBmb3IgY29tcGF0aWJpbGl0eSBv bmx5LCBhcmUKKyAgaW5zZWN1cmUsIGFuZCBwcmludCB3YXJuaW5ncyB0byBzdGRlcnIgdW5kZXIg YXQgbGVhc3Qgb25lIHN5c3RlbSAoTmV0QlNECisgIDEuMCkuICBOb3RlIHRoYXQgUE9TSVggc3lz dGVtcyBzaG91bGQgc3RpbGwgdXNlIHNldHVpZCgpIGFuZCBzZXRnaWQoKTsKKyAgdGhlIHNldGV1 aWQoKSBhbmQgc2V0ZWdpZCgpIGZ1bmN0aW9ucyBhcmUgQlNENC40IGV4dGVuc2lvbnMgdG8gdGhl CisgIFBPU0lYIG1vZGVsLiAgTWlrZSBMb25nIDxtaWtlLmxvbmdAYW5hbG9nLmNvbT4sIDgvOTQu CisqLworI2lmZGVmIEJTRDQ0CisjZGVmaW5lIFNFVEVVSUQKKyNlbmRpZiAvKiBCU0Q0NCAqLwor CisvKgorICBUaGUgZm9sbG93aW5nIGNvbnN0cnVjdGlvbiBhdXRvbWF0aWNhbGx5IGRlZmluZXMg dGhlIHN5bWJvbCBTRVRSRVVJRCBmb3IKKyAgVU5JWCB2ZXJzaW9ucyBiYXNlZCBvbiBCZXJrZWxl eSBVbml4IDQuMiBhbmQgNC4zLiAgSWYgdGhpcyBzeW1ib2wgaXMKKyAgZGVmaW5lZCwgdGhlbiB0 aGlzIHByb2dyYW0gd2lsbCB1c2UgZ2V0cmV1aWQoKSBhbmQgZ2V0cmVnaWQoKSBjYWxscyBpbgor ICBwcmVmZXJlbmNlIHRvIGdldHVpZCgpIGFuZCBnZXRnaWQoKSwgd2hpY2ggaW4gQmVya2VsZXkt YmFzZWQgVW5peGVzIGRvCisgIG5vdCBhbGxvdyBhcmJpdHJhcnkgc3dpdGNoaW5nIGJhY2sgYW5k IGZvcnRoIG9mIHJlYWwgJiBlZmZlY3RpdmUgdWlkLgorICBUaGlzIGNvbnN0cnVjdGlvbiBhbHNv IGFsbG93cyAtRFNFVFJFVUlEIHRvIGJlIHB1dCBvbiB0aGUgY2MgY29tbWFuZCBsaW5lCisgIGZv ciBhbnkgc3lzdGVtIHRoYXQgaGFzIGFuZCB3YW50cyB0byB1c2Ugc2V0cmVbdWddaWQoKS4gIEl0 IGFsc28gcHJldmVudHMKKyAgYXV0b21hdGljIGRlZmluaXRpb24gb2YgU0VUUkVVSUQgaWYgLURO T1NFVFJFVSBpcyBpbmNsdWRlZCBvbiB0aGUgY2MKKyAgY29tbWFuZCBsaW5lIChvciBvdGhlcndp c2UgZGVmaW5lZCkuCisqLworI2lmZGVmIEZUMTgJCQkJLyogTm9uZSBvZiB0aGlzIGZvciBGb3J0 dW5lLiAqLworI2RlZmluZSBOT1NFVFJFVQorI2VuZGlmIC8qIEZUMTggKi8KKworI2lmZGVmIEFO WUJTRAorI2lmbmRlZiBCU0QyOQorI2lmbmRlZiBCU0Q0MQorI2lmbmRlZiBTRVRSRVVJRAorI2lm bmRlZiBOT1NFVFJFVQorI2lmbmRlZiBTRVRFVUlECisjZGVmaW5lIFNFVFJFVUlECisjZW5kaWYg LyogU0VURVVJRCAqLworI2VuZGlmIC8qIE5PU0VUUkVVICovCisjZW5kaWYgLyogU0VUUkVVSUQg Ki8KKyNlbmRpZiAvKiAhQlNENDEgKi8KKyNlbmRpZiAvKiAhQlNEMjkgKi8KKyNlbmRpZiAvKiBB TllCU0QgKi8KKworLyogVmFyaWFibGVzIGZvciB1c2VyIGFuZCBncm91cCBJRHMuICovCisKK3N0 YXRpYyBVSURfVCByZWFsdWlkID0gKFVJRF9UKSAtMSwgcHJpdnVpZCA9IChVSURfVCkgLTE7Citz dGF0aWMgR0lEX1QgcmVhbGdpZCA9IChHSURfVCkgLTEsIHByaXZnaWQgPSAoR0lEX1QpIC0xOwor CisKKy8qIFAgUiBJIFYgXyBJIE4gSSAgLS0gIEluaXRpYWxpemUgcHJpdmlsZWdlcyBwYWNrYWdl ICAqLworCisvKiBDYWxsZWQgYXMgZWFybHkgYXMgcG9zc2libGUgaW4gYSBzZXQtdWlkIG9yIHNl dC1naWQgcHJvZ3JhbSB0byBzdG9yZSB0aGUKKyAqIHNldC10byB1aWQgYW5kL29yIGdpZCBhbmQg c3RlcCBkb3duIHRvIHRoZSB1c2VycyByZWFsIHVpZCBhbmQgZ2lkLiBUaGUKKyAqIHN0b3JlZCBp ZCdzIGNhbiBiZSB0ZW1wb3JhcmlseSByZXN0b3JlZCAoYWxsb3dlZCBpbiBTeXN0ZW0gVikgZHVy aW5nCisgKiBvcGVyYXRpb25zIHRoYXQgcmVxdWlyZSB0aGUgcHJpdmlsZWdlLiAgTW9zdCBvZiB0 aGUgdGltZSwgdGhlIHByb2dyYW0KKyAqIHNob3VsZCBleGVjdXRlIGluIHVucHJpdmlsaWdlZCBz dGF0ZSwgdG8gbm90IGltcG9zZSBhbnkgc2VjdXJpdHkgdGhyZWF0LgorICoKKyAqIE5vdGU6IERv bid0IGZvcmdldCB0aGF0IGFjY2VzcygpIGFsd2F5cyB1c2VzIHRoZSByZWFsIGlkOnMgdG8gZGV0 ZXJtaW5lCisgKiBmaWxlIGFjY2VzcywgZXZlbiB3aXRoIHByaXZpbGVnZXMgcmVzdG9yZWQuCisg KgorICogUmV0dXJucyBhbiBlcnJvciBtYXNrLCB3aXRoIGVycm9yIHZhbHVlcyBvcjplZCB0b2dl dGhlcjoKKyAqICAgMSBpZiBzZXR1aWQoKSBmYWlscywKKyAqICAgMiBpZiBzZXRnaWQoKSBmYWls cywgYW5kCisgKiAgIDQgaWYgdGhlIHByb2dyYW0gaXMgc2V0LXVzZXItaWQgdG8gInJvb3QiLCB3 aGljaCBjYW4ndCBiZSBoYW5kbGVkLgorICoKKyAqIE9ubHkgdGhlIHJldHVybiB2YWx1ZSAwIGlu ZGljYXRlcyByZWFsIHN1Y2Nlc3MuIEluIGNhc2Ugb2YgZmFpbHVyZSwKKyAqIHRob3NlIHByaXZp bGVnZXMgdGhhdCBjb3VsZCBiZSByZWR1Y2VkIGhhdmUgYmVlbiwgYXQgbGVhc3QsIGJ1dCB0aGUK KyAqIHByb2dyYW0gc2hvdWxkIGJlIGFib3J0ZWQgbm9uZS10aGUtbGVzcy4KKyAqCisgKiBBbHNv IG5vdGUgdGhhdCB0aGVzZSBmdW5jdGlvbnMgZG8gbm90IGV4cGVjdCB0aGUgdWlkIG9yIGdpZCB0 byBjaGFuZ2UKKyAqIHdpdGhvdXQgdGhlaXIga25vd2luZy4gSXQgbWF5IHdvcmsgaWYgaXQgaXMg b25seSBkb25lIHRlbXBvcmFyaWx5LCBidXQKKyAqIHlvdSdyZSBvbiB5b3VyIG93bi4KKyAqLwor aW50Citwcml2X2luaSgpIHsKKyAgICBpbnQgZXJyID0gMDsKKworI2lmbmRlZiBIQVZFX0xPQ0tE RVYKKworICAgIC8qIFNhdmUgcmVhbCBJRDpzLiAqLworICAgIHJlYWx1aWQgPSBnZXR1aWQoKTsK KyAgICByZWFsZ2lkID0gZ2V0Z2lkKCk7CisKKyAgICAvKiBTYXZlIGN1cnJlbnQgZWZmZWN0aXZl IElEOnMsIHRob3NlIHNldCB0byBhdCBwcm9ncmFtIGV4ZWMuICovCisgICAgcHJpdnVpZCA9IGdl dGV1aWQoKTsKKyAgICBwcml2Z2lkID0gZ2V0ZWdpZCgpOworCisgICAgLyogSWYgcnVubmluZyBz ZXQtdWlkLCBnbyBkb3duIHRvIHJlYWwgdWlkLCBvdGhlcndpc2UgcmVtZW1iZXIgdGhhdAorICAg ICAqIG5vIHByaXZpbGVnZWQgdWlkIGlzIGF2YWlsYWJsZS4KKyAgICAgKgorICAgICAqIEV4Y2Vw dGlvbnM6CisgICAgICoKKyAgICAgKiAxKSBJZiB0aGUgcmVhbCB1aWQgaXMgYWxyZWFkeSAicm9v dCIgYW5kIHRoZSBzZXQtdWlkIHVpZCAodGhlCisgICAgICogaW5pdGlhbCBlZmZlY3RpdmUgdWlk KSBpcyBub3QgInJvb3QiLCB0aGVuIHdlIHdvdWxkIGhhdmUgdHJvdWJsZQorICAgICAqIGlmIHdl IHdlbnQgImRvd24iIHRvICJyb290IiBoZXJlLCBhbmQgdGhlbiB0ZW1wb3JhcmlseSBiYWNrIHRv IHRoZQorICAgICAqIHNldC11aWQgdWlkIChub3QgInJvb3QiKSBhbmQgdGhlbiBhZ2FpbiB0cmll ZCB0byBiZWNvbWUgInJvb3QiLiBJCisgICAgICogdGhpbmsgdGhlICJzYXZlZCBzZXQtdWlkIiBp cyBsb3N0IHdoZW4gY2hhbmdpbmcgdWlkIGZyb20gZWZmZWN0aXZlCisgICAgICogdWlkICJyb290 Iiwgd2hpY2ggY2hhbmdlcyBhbGwgdWlkLCBub3Qgb25seSB0aGUgZWZmZWN0aXZlIHVpZC4gQnV0 CisgICAgICogaW4gdGhpcyBzaXR1YXRpb24sIHdlIGNhbiBzaW1wbHkgZ28gdG8gInJvb3QiIGFu ZCBzdGF5IHRoZXJlIGFsbAorICAgICAqIHRoZSB0aW1lLiBUaGF0IHNob3VsZCBnaXZlIHN1ZmZp Y2llbnQgcHJpdmlsZWdlICh1bmRlcnN0YXRlbWVudCEpLAorICAgICAqIGFuZCBnaXZlIHRoZSBy aWdodCB1aWRzIGZvciBzdWJwcm9jZXNzZXMuCisgICAgICoKKyAgICAgKiAyKSBJZiB0aGUgc2V0 LXVpZCAodGhlIGluaXRpYWwgZWZmZWN0aXZlIHVpZCkgaXMgInJvb3QiLCBhbmQgd2UKKyAgICAg KiBjaGFuZ2UgdWlkIHRvIHRoZSByZWFsIHVpZCwgd2UgY2FuJ3QgY2hhbmdlIGl0IGJhY2sgdG8g InJvb3QiIHdoZW4KKyAgICAgKiB3ZSBuZWVkIHRoZSBwcml2aWxlZ2UsIGZvciB0aGUgc2FtZSBy ZWFzb24gYXMgaW4gMSkuIFRodXMsIHdlIGNhbid0CisgICAgICogaGFuZGxlIHByb2dyYW1zIHRo YXQgYXJlIHNldC11c2VyLWlkIHRvICJyb290IiBhdCBhbGwuIFRoZSBwcm9ncmFtCisgICAgICog c2hvdWxkIGJlIHN0b3BwZWQuICBVc2Ugc29tZSBvdGhlciB1aWQuICAicm9vdCIgaXMgcHJvYmFi bHkgdG9vCisgICAgICogcHJpdmlsZWdlZCBmb3Igc3VjaCB0aGluZ3MsIGFueXdheS4gKFRoZSB1 aWQgaXMgcmV2ZXJ0ZWQgdG8gdGhlCisgICAgICogcmVhbCB1aWQgdW50aWwgdGVybWluYXRpb24u KQorICAgICAqCisgICAgICogVGhlc2UgdHdvIGV4Y2VwdGlvbnMgaGF2ZSB0aGUgZWZmZWN0IHRo YXQgdGhlICJyb290IiB1aWQgd2lsbCBuZXZlcgorICAgICAqIGJlIG9uZSBvZiB0aGUgdHdvIHVp ZHMgdGhhdCBhcmUgYmVpbmcgc3dpdGNoZWQgYmV0d2Vlbiwgd2hpY2ggYWxzbworICAgICAqIG1l YW5zIHdlIGRvbid0IGhhdmUgdG8gY2hlY2sgZm9yIHN1Y2ggY2FzZXMgaW4gdGhlIHN3aXRjaGlu ZworICAgICAqIGZ1bmN0aW9ucy4KKyAgICAgKgorICAgICAqIE5vdGUgdGhhdCBleGNlcHRpb24g MSkgaXMgaGFuZGxlZCBieSB0aGVzZSByb3V0aW5lcyAoYnkgY29uc3RhbnRseQorICAgICAqIHJ1 bm5pbmcgd2l0aCB1aWQgInJvb3QiLCB3aGlsZSBleGNlcHRpb24gMikgaXMgYSBzZXJpb3VzIGVy cm9yLCBhbmQKKyAgICAgKiBpcyBub3QgcHJvdmlkZWQgZm9yIGF0IGFsbCBpbiB0aGUgc3dpdGNo aW5nIGZ1bmN0aW9ucy4KKyAgICAgKi8KKyAgICBpZiAocmVhbHVpZCA9PSBwcml2dWlkKQorCXBy aXZ1aWQgPSAoVUlEX1QpIC0xOwkJLyogTm90IHJ1bm5pbmcgc2V0LXVzZXItaWQuICovCisKKyAg ICAvKiBJZiBydW5uaW5nIHNldC1naWQsIGdvIGRvd24gdG8gcmVhbCBnaWQsIG90aGVyd2lzZSBy ZW1lbWJlciB0aGF0CisgICAgICogbm8gcHJpdmlsZWdlZCBnaWQgaXMgYXZhaWxhYmxlLgorICAg ICAqCisgICAgICogVGhlcmUgYXJlIG5vIGV4Y2VwdGlvbiBsaWtlIHRoZXJlIGlzIGZvciB0aGUg dXNlciBpZCwgc2luY2UgdGhlcmUKKyAgICAgKiBpcyBubyBncm91cCBpZCB0aGF0IGlzIHByaXZp bGVnZWQgaW4gdGhlIG1hbm5lciBvZiB1aWQgInJvb3QiLgorICAgICAqIFRoZXJlIGNvdWxkIGJl IGVxdWl2YWxlbnQgcHJvYmxlbXMgZm9yIGdyb3VwIGNoYW5naW5nIGlmIHRoZQorICAgICAqIHBy b2dyYW0gc29tZXRpbWVzIHJhbiB3aXRoIHVpZCAicm9vdCIgYW5kIHNvbWV0aW1lcyBub3QsIGJ1 dAorICAgICAqIHRoYXQgaXMgYWxyZWFkeSBhdm9pZGVkIGFzIGV4cGxhaW5lZCBhYm92ZS4KKyAg ICAgKgorICAgICAqIFRodXMgd2UgY2FuIGV4cGVjdCBhbHdheXMgdG8gYmUgYWJsZSB0byBzd2l0 Y2ggdG8gdGhlICJzYXZlZCBzZXQtCisgICAgICogZ2lkIiB3aGVuIHdlIHdhbnQsIGFuZCBiYWNr IHRvIHRoZSByZWFsIGdpZCBhZ2Fpbi4gWW91IG1heSBhbHNvCisgICAgICogZHJhdyB0aGUgY29u Y2x1c2lvbiB0aGF0IHNldC1naWQgcHJvdmlkZXMgZm9yIGZld2VyIGhhc3NsZXMgdGhhbgorICAg ICAqIHNldC11aWQuCisgICAgICovCisKKyNpZmRlZiBTVUlEREVCVUcKKyAgICBmcHJpbnRmKHN0 ZGVyciwiVUlEX1JPT1Q9JWRcbiIsVUlEX1JPT1QpOworICAgIGZwcmludGYoc3RkZXJyLCJyZWFs dWlkPSVkXG4iLHJlYWx1aWQpOworICAgIGZwcmludGYoc3RkZXJyLCJwcml2dWlkPSVkXG4iLHBy aXZ1aWQpOworI2VuZGlmIC8qIFNVSURERUJVRyAqLworCisgICAgaWYgKHJlYWxnaWQgPT0gcHJp dmdpZCkJCS8qIElmIG5vdCBydW5uaW5nIHNldC11c2VyLWlkLCAqLworICAgICAgcHJpdmdpZCA9 IChHSURfVCkgLTE7CQkvKiAgcmVtZW1iZXIgaXQgdGhpcyB3YXkuICovCisKKyAgICBlcnIgPSBw cml2X29mZigpOwkJCS8qIFR1cm4gb2ZmIHNldHVpZCBwcml2aWxlZ2UuICovCisKKyAgICBpZiAo cHJpdnVpZCA9PSBVSURfUk9PVCkJCS8qIElmIHNldHVpZCB0byByb290LCAqLworICAgICAgZXJy IHw9IDQ7CQkJCS8qIHJldHVybiB0aGlzIGVycm9yLiAqLworCisgICAgaWYgKHJlYWx1aWQgPT0g VUlEX1JPT1QpIHsJCS8qIElmIHJlYWwgaWQgaXMgcm9vdCwgKi8KKwlwcml2dWlkID0gKFVJRF9U KSAtMTsJCS8qIHN0YXkgcm9vdCBhdCBhbGwgdGltZXMuICovCisjaWZkZWYgQVRUNzMwMAorCS8q IElmIEtlcm1pdCBpbnN0YWxsZWQgU1VJRCB1dWNwIGFuZCB1c2VyIGlzIHJ1bm5pbmcgYXMgcm9v dCAqLworCWVyciAmPSB+MTsJCQkvKiBTeXN0ZW0gViBSMCBkb2VzIG5vdCBzYXZlIFVJRCAqLwor I2VuZGlmIC8qIEFUVDczMDAgKi8KKyAgICB9CisjZW5kaWYgLyogSEFWRV9MT0NLREVWICovCisg ICAgcmV0dXJuKGVycik7Cit9CisKKworLyogTWFjcm9zIGZvciBoaWRpbmcgdGhlIGRpZmZlcmVu Y2VzIGluIFVJRC9HSUQgc2V0dGluZyBiZXR3ZWVuIHZhcmlvdXMgVW5peAorICogc3lzdGVtcy4g VGhlc2UgbWFjcm9zIHNob3VsZCBhbHdheXMgYmUgY2FsbGVkIHdpdGggYm90aCB0aGUgcHJpdmls ZWdlZCBJRAorICogYW5kIHRoZSBub24tcHJpdmlsZWdlZCBJRC4gVGhlIG9uZSBpbiB0aGUgc2Vj b25kIGFyZ3VtZW50LCB3aWxsIGJlY29tZSB0aGUKKyAqIGVmZmVjdGl2ZSBJRC4gVGhlIG9uZSBp biB0aGUgZmlyc3QgYXJndW1lbnQgd2lsbCBiZSByZXRhaW5lZCBmb3IgbGF0ZXIKKyAqIHJldHJp ZXZhbC4KKyAqLworI2lmZGVmIFNFVFJFVUlECisjaWZkZWYgU0FWRURVSUQKKy8qIE9uIEJTRCBz eXN0ZW1zIHdpdGggdGhlIHNhdmVkLVVJRCBmZWF0dXJlLCB3ZSBqdXN0IGp1Z2dsZSB0aGUgZWZm ZWN0aXZlCisgKiBVSUQgYmFjayBhbmQgZm9ydGgsIGFuZCBsZWF2ZSB0aGUgcmVhbCBVSUQgYXQg aXRzIHRydWUgdmFsdWUuICBUaGUga2VybmVsCisgKiBhbGxvd3Mgc3dpdGNoaW5nIHRvIGJvdGgg dGhlIGN1cnJlbnQgcmVhbCBVSUQsIHRoZSBlZmZlY3RpdmUgVUlELCBhbmQgdGhlCisgKiBVSUQg d2hpY2ggdGhlIHByb2dyYW0gaXMgc2V0LVVJRCB0by4gIFRoZSBzYXZlZCBzZXQtVUlEIGFsd2F5 cyBob2xkcyB0aGUKKyAqIHByaXZpbGVnZWQgVUlEIGZvciB1cywgYW5kIHRoZSByZWFsIFVJRCB3 aWxsIGFsd2F5cyBiZSB0aGUgbm9uLXByaXZpbGVnZWQsCisgKiBhbmQgd2UgY2FuIGZyZWVseSBj aG9vc2Ugb25lIG9mIHRoZW0gZm9yIHRoZSBlZmZlY3RpdmUgVUlEIGF0IGFueSB0aW1lLgorICov CisjZGVmaW5lIHN3aXRjaHVpZChoaWRkZW4sYWN0aXZlKSBzZXRyZXVpZCggKFVJRF9UKSAtMSwg YWN0aXZlKQorI2RlZmluZSBzd2l0Y2hnaWQoaGlkZGVuLGFjdGl2ZSkgc2V0cmVnaWQoIChHSURf VCkgLTEsIGFjdGl2ZSkKKworI2Vsc2UgICAvKiBTRVRSRVVJRCwhU0FWRURVSUQgKi8KKworLyog T24gc3lzdGVtcyB3aXRoIHNldHJlWGlkKCkgYnV0IHdpdGhvdXQgdGhlIHNhdmVkLVVJRCBmZWF0 dXJlLCBub3RhYmx5CisgKiBCU0QgNC4yLCB3ZSBzd2FwIHRoZSByZWFsIGFuZCBlZmZlY3RpdmUg VUlEcyBlYWNoIHRpbWUuICBJdCdzCisgKiB0aGUgZWZmZWN0aXZlIFVJRCB0aGF0IHdlIGFyZSBp bnRlcmVzdGVkIGluLCBidXQgd2UgaGF2ZSB0byByZXRhaW4gdGhlCisgKiB1bnVzZWQgVUlEIHNv bWV3aGVyZSB0byBlbmFibGUgdXMgdG8gcmVzdG9yZSBpdCBsYXRlciwgYW5kIHdlIGRvIHRoaXMK KyAqIGluIHRoZSByZWFsIFVJRC4gIFRoZSBrZXJuZWwgb25seSBhbGxvd3Mgc3dpdGNoaW5nIHRv IGVpdGhlciB0aGUgY3VycmVudAorICogcmVhbCBvciB0aGUgZWZmZWN0aXZlIFVJRCwgdW5sZXNz IHlvdSdyZSAicm9vdCIuCisgKi8KKyNkZWZpbmUgc3dpdGNodWlkKGhpZGRlbixhY3RpdmUpCXNl dHJldWlkKGhpZGRlbixhY3RpdmUpCisjZGVmaW5lIHN3aXRjaGdpZChoaWRkZW4sYWN0aXZlKQlz ZXRyZWdpZChoaWRkZW4sYWN0aXZlKQorI2VuZGlmCisKKyNlbHNlIC8qICFTRVRSRVVJRCwgIVNB VkVEVUlEICovCisKKyNpZmRlZiBTRVRFVUlECisvKgorICBCU0QgNC40IHdvcmtzIHNpbWlsYXJs eSB0byBTeXN0ZW0gViBhbmQgUE9TSVggKHNlZSBiZWxvdyksIGJ1dCB1c2VzCisgIHNldGVYaWQo KSBpbnN0ZWFkIG9mIHNldFhpZCgpIHRvIGNoYW5nZSBlZmZlY3RpdmUgSURzLiAgSW4gYWRkaXRp b24sIHRoZQorICBzZXRlWGlkKCkgZnVuY3Rpb25zIHdvcmsgdGhlIHNhbWUgZm9yICJyb290IiBh cyBmb3Igb3RoZXIgdXNlcnMuCisqLworI2RlZmluZSBzd2l0Y2h1aWQoaGlkZGVuLGFjdGl2ZSkJ c2V0ZXVpZChhY3RpdmUpCisjZGVmaW5lIHN3aXRjaGdpZChoaWRkZW4sYWN0aXZlKQlzZXRlZ2lk KGFjdGl2ZSkKKworI2Vsc2UgLyogIVNFVEVVSUQgKi8KKworLyogT24gU3lzdGVtIFYgYW5kIFBP U0lYLCB0aGUgb25seSB0aGluZyB3ZSBjYW4gY2hhbmdlIGlzIHRoZSBlZmZlY3RpdmUgVUlECisg KiAodW5sZXNzIHRoZSBjdXJyZW50IGVmZmVjdGl2ZSBVSUQgaXMgInJvb3QiLCBidXQgaW5pdHN1 aWQoKSBhdm9pZHMgdGhhdCBmb3IKKyAqIHVzKS4gIFRoZSBrZXJuZWwgYWxsb3dzIHN3aXRjaGlu ZyB0byB0aGUgY3VycmVudCByZWFsIFVJRCBvciB0byB0aGUgc2F2ZWQKKyAqIHNldC1VSUQuICBU aGVzZSBhcmUgYWx3YXlzIHNldCB0byB0aGUgbm9uLXByaXZpbGVnZWQgVUlEIGFuZCB0aGUgcHJp dmlsZWdlZAorICogVUlELCByZXNwZWN0aXZlbHksIGFuZCB3ZSBvbmx5IGNoYW5nZSB0aGUgZWZm ZWN0aXZlIFVJRC4gIFRoaXMgYnJlYWtzIGlmCisgKiB0aGUgY3VycmVudCBlZmZlY3RpdmUgVUlE IGlzICJyb290IiwgdGhvdWdoLCBiZWNhdXNlIGZvciAicm9vdCIgc2V0dWlkL2dpZAorICogYmVj b21lcyBtb3JlIHBvd2VyZnVsLCB3aGljaCBpcyB3aHkgaW5pdHN1aWQoKSB0cmVhdHMgInJvb3Qi IHNwZWNpYWxseS4KKyAqIE5vdGU6IFRoYXQgc3BlY2lhbCB0cmVhdG1lbnQgbWF5YmUgY291bGQg YmUgaWdub3JlZCBmb3IgQlNEPyAgTm90ZTogRm9yCisgKiBzeXN0ZW1zIHRoYXQgZG9uJ3QgZml0 IGFueSBvZiB0aGVzZSBmb3VyIGNhc2VzLCB3ZSBzaW1wbHkgY2FuJ3Qgc3VwcG9ydAorICogc2V0 LVVJRC4KKyAqLworI2RlZmluZSBzd2l0Y2h1aWQoaGlkZGVuLGFjdGl2ZSkJc2V0dWlkKGFjdGl2 ZSkKKyNkZWZpbmUgc3dpdGNoZ2lkKGhpZGRlbixhY3RpdmUpCXNldGdpZChhY3RpdmUpCisKKyNl bmRpZiAvKiBTRVRFVUlEICovCisjZW5kaWYgLyogU0VUUkVVSUQgKi8KKworCisvKiBQIFIgSSBW IF8gTyBOICAtLSAgVHVybiBvbiB0aGUgc2V0dWlkIGFuZC9vciBzZXRnaWQgKi8KKworLyogR28g dG8gdGhlIHByaXZpbGVnZWQgdWlkIChnaWQpIHRoYXQgdGhlIHByb2dyYW0gaXMgc2V0LXVzZXIt aWQKKyAqIChzZXQtZ3JvdXAtaWQpIHRvLCB1bmxlc3MgdGhlIHByb2dyYW0gaXMgcnVubmluZyB1 bnByaXZpbGVnZWQuCisgKiBJZiBzZXR1aWQoKSBmYWlscywgcmV0dXJuIHZhbHVlIHdpbGwgYmUg MS4gSWYgZ2V0dWlkKCkgZmFpbHMgaXQKKyAqIHdpbGwgYmUgMi4gIFJldHVybiBpbW1lZGlhdGVs eSBhZnRlciBmaXJzdCBmYWlsdXJlLCBhbmQgdGhlIGZ1bmN0aW9uCisgKiB0cmllcyB0byByZXN0 b3JlIGFueSBwYXJ0aWFsIHdvcmsgZG9uZS4gIFJldHVybnMgMCBvbiBzdWNjZXNzLgorICogR3Jv dXAgaWQgaXMgY2hhbmdlZCBmaXJzdCwgc2luY2UgaXQgaXMgbGVzcyBzZXJpb3VzIHRoYW4gdXNl ciBpZC4KKyAqLworaW50Citwcml2X29uKCkgeworI2lmbmRlZiBIQVZFX0xPQ0tERVYKKyAgICBp ZiAocHJpdmdpZCAhPSAoR0lEX1QpIC0xKQorICAgICAgaWYgKHN3aXRjaGdpZChyZWFsZ2lkLHBy aXZnaWQpKQorICAgICAgICByZXR1cm4oMik7CisKKyAgICBpZiAocHJpdnVpZCAhPSAoVUlEX1Qp IC0xKQorICAgICAgaWYgKHN3aXRjaHVpZChyZWFsdWlkLHByaXZ1aWQpKSB7CisJICBpZiAocHJp dmdpZCAhPSAoR0lEX1QpIC0xKQorCSAgICBzd2l0Y2hnaWQocHJpdmdpZCxyZWFsZ2lkKTsKKwkg IHJldHVybigxKTsKKyAgICAgIH0KKyNlbmRpZiAvKiBIQVZFX0xPQ0tERVYgKi8KKyAgICByZXR1 cm4oMCk7Cit9CisKKy8qIFAgUiBJIFYgXyBPIEYgRiAgLS0gIFR1cm4gb24gdGhlIHJlYWwgdWlk IGFuZCBnaWQgKi8KKworLyogUmV0dXJuIHRvIHRoZSB1bnByaXZpbGVnZWQgdWlkIChnaWQpIGFm dGVyIGFuIHRlbXBvcmFyeSB2aXNpdCB0bworICogcHJpdmlsZWdlZCBzdGF0dXMsIHVubGVzcyB0 aGUgcHJvZ3JhbSBpcyBydW5uaW5nIHdpdGhvdXQgc2V0LXVzZXItaWQKKyAqIChzZXQtZ3JvdXAt aWQpLiBSZXR1cm5zIDEgZm9yIGZhaWx1cmUgaW4gc2V0dWlkKCkgYW5kIDIgZm9yIGZhaWx1cmUK KyAqIGluIHNldGdpZCgpIG9yOmVkIHRvZ2V0aGVyLiBUaGUgZnVuY3Rpb25zIHRyaWVzIHRvIHJl dHVybiBib3RoIHVpZAorICogYW5kIGdpZCB0byB1bnByaXZpbGVnZWQgc3RhdGUsIHJlZ2FyZGxl c3Mgb2YgZXJyb3JzLiBSZXR1cm5zIDAgb24KKyAqIHN1Y2Nlc3MuCisgKi8KK2ludAorcHJpdl9v ZmYoKSB7CisgICAgaW50IGVyciA9IDA7CisjaWZuZGVmIEhBVkVfTE9DS0RFVgorICAgIGlmIChw cml2dWlkICE9IChVSURfVCkgLTEpCisgICAgICAgaWYgKHN3aXRjaHVpZChwcml2dWlkLHJlYWx1 aWQpKQorCSAgZXJyIHw9IDE7CisKKyAgICBpZiAocHJpdmdpZCAhPSAoR0lEX1QpIC0xKQorICAg ICAgIGlmIChzd2l0Y2hnaWQocHJpdmdpZCxyZWFsZ2lkKSkKKwllcnIgfD0gMjsKKyNlbmRpZiAv KiBIQVZFX0xPQ0tERVYgKi8KKyAgICByZXR1cm4oZXJyKTsKK30KKworLyogVHVybiBvZmYgcHJp dmlsZWdlIHBlcm1hbmVudGx5LiAgTm8gZ29pbmcgYmFjay4gIFRoaXMgaXMgbmVjZXNzYXJ5IGJl Zm9yZQorICogYSBmb3JrKCkgb24gQlNENDMgbWFjaGluZXMgdGhhdCBkb24ndCBzYXZlIHRoZSBz ZXRVSUQgb3Igc2V0R0lELCBiZWNhdXNlCisgKiB3ZSBzd2FwIHRoZSByZWFsIGFuZCBlZmZlY3Rp dmUgaWRzLCBhbmQgd2UgZG9uJ3Qgd2FudCB0byBsZXQgdGhlIGZvcmtlZAorICogcHJvY2VzcyBz d2FwIHRoZW0gYWdhaW4gYW5kIGdldCB0aGUgcHJpdmlsZWdlIGJhY2suIEl0IHdpbGwgd29yayBv biBvdGhlcgorICogbWFjaGluZXMgdG9vLCBzdWNoIHRoYXQgeW91IGNhbiByZWx5IG9uIGl0cyBl ZmZlY3QgYWx3YXlzIGJlaW5nIHRoZSBzYW1lLAorICogZm9yIGluc3RhbmNlLCBldmVuIHdoZW4g eW91J3JlIGluIHByaXZfb24oKSBzdGF0ZSB3aGVuIHRoaXMgaXMgY2FsbGVkLgorICogKFdlbGws IHRoYXQgcGFydCBhYm91dCAicGVybWFuZW50IiBpcyBvbiBTeXN0ZW0gViBvbmx5IHRydWUgaWYg eW91IGZvbGxvdworICogdGhpcyB3aXRoIGEgY2FsbCB0byBleGVjKCksIGJ1dCB0aGF0J3Mgd2hh dCB3ZSB3YW50IGl0IGZvciBhbnl3YXkuKQorICogQWRkZWQgYnkgRGVhbiBMb25nIC0tIGRsb25n QG1pZGdhcmQudWNzYy5lZHUKKyAqLworaW50Citwcml2X2NhbigpIHsKKyNpZm5kZWYgSEFWRV9M T0NLREVWCisjaWZkZWYgU0VUUkVVSUQKKyAgICBpbnQgZXJyID0gMDsKKyAgICBpZiAocHJpdnVp ZCAhPSAoVUlEX1QpIC0xKQorICAgICAgIGlmIChzZXRyZXVpZChyZWFsdWlkLHJlYWx1aWQpKQor CSAgZXJyIHw9IDE7CisKKyAgICBpZiAocHJpdmdpZCAhPSAoR0lEX1QpIC0xKQorICAgICAgICBp ZiAoc2V0cmVnaWQocmVhbGdpZCxyZWFsZ2lkKSkKKyAJICBlcnIgfD0gMjsKKworICAgIHJldHVy bihlcnIpOworCisjZWxzZQorI2lmZGVmIFNFVEVVSUQKKyAgICBpbnQgZXJyID0gMDsKKyAgICBp ZiAocHJpdnVpZCAhPSAoVUlEX1QpIC0xKQorCWlmIChzZXR1aWQocmVhbHVpZCkpIHsKKwkgICAg ZGVidWcoRjEwMSwic2V0dWlkIGZhaWxlZCIsIiIsZXJybm8pOworCSAgICBlcnIgfD0gMTsKKwkg ICAgZGVidWcoRjEwMSwicnVpZCIsIiIsZ2V0dWlkKCkpOworCSAgICBkZWJ1ZyhGMTAxLCJldWlk IiwiIixnZXRldWlkKCkpOworCX0KKyAgICBkZWJ1ZyhGMTAxLCJzZXR1aWQiLCIiLHJlYWx1aWQp OworICAgIGlmIChwcml2Z2lkICE9IChHSURfVCkgLTEpCisgICAgICAgIGlmIChzZXRnaWQocmVh bGdpZCkpIHsKKwkgICAgZGVidWcoRjEwMSwic2V0Z2lkIGZhaWxlZCIsIiIsZXJybm8pOworCSAg ICBlcnIgfD0gMjsKKwkgICAgZGVidWcoRjEwMSwicmdpZCIsIiIsZ2V0Z2lkKCkpOworCSAgICBk ZWJ1ZyhGMTAxLCJlZ2lkIiwiIixnZXRlZ2lkKCkpOworCX0KKyAgICBkZWJ1ZyhGMTAxLCJzZXRn aWQiLCIiLHJlYWxnaWQpOworICAgIHJldHVybihlcnIpOworI2Vsc2UKKyAgICAvKiBFYXN5IHdh eSBvZiB1c2luZyBzZXR1aWQoKS9zZXRnaWQoKSBpbnN0ZWFkIG9mIHNldHJldWlkKCkvc2V0cmVn aWQoKS4qLworICAgIHJldHVybihwcml2X29mZigpKTsKKyNlbmRpZiAvKiBTRVRFVUlEICovCisj ZW5kaWYgLyogU0VUUkVVSUQgKi8KKyNlbHNlCisgICAgcmV0dXJuKDApOworI2VuZGlmIC8qIEhB VkVfTE9DS0RFViAqLworfQorCisvKiBQIFIgSSBWIF8gTyBQIE4gIC0tICBGb3Igb3BlbmluZyBw cm90ZWN0ZWQgZmlsZXMgb3IgZGV2aWNlcy4gKi8KKworaW50Citwcml2X29wbihuYW1lLCBtb2Rl cykgY2hhciAqbmFtZTsgaW50IG1vZGVzOyB7CisgICAgaW50IHg7CisgICAgcHJpdl9vbigpOwkJ CQkvKiBUdXJuIHByaXZpbGVnZXMgb24gKi8KKyAgICBkZWJ1ZyhGMTExLCJwcml2X29wbiIsbmFt ZSxtb2Rlcyk7CisgICAgZXJybm8gPSAwOworICAgIHggPSBvcGVuKG5hbWUsIG1vZGVzKTsJCS8q IFRyeSB0byBvcGVuIHRoZSBkZXZpY2UgKi8KKyAgICBkZWJ1ZyhGMTAxLCJwcml2X29wbiByZXN1 bHQiLCIiLHgpOworICAgIGRlYnVnKEYxMDEsInByaXZfb3BuIGVycm5vIiwiIixlcnJubyk7Cisg ICAgcHJpdl9vZmYoKTsJCQkJLyogVHVybiBwcml2aWxlZ2VzIG9mZiAqLworICAgIHJldHVybih4 KTsJCQkJLyogUmV0dXJuIG9wZW4ncyByZXR1cm4gY29kZSAqLworfQorCisvKiAgUCBSIEkgViBf IEMgSCBLICAtLSAgQ2hlY2sgcHJpdmlsZWdlcy4gICovCisKKy8qICBUcnkgdG8gdHVybiB0aGVt IG9mZi4gIElmIHR1cm5pbmcgdGhlbSBvZmYgZGlkIG5vdCBzdWNjZWVkLCBjYW5jZWwgdGhlbSAq LworCitpbnQKK3ByaXZfY2hrKCkgeworICAgIGludCB4LCB5ID0gMDsKKyAgICB4ID0gcHJpdl9v ZmYoKTsJCQkvKiBUdXJuIG9mZiBwcml2cy4gKi8KKyAgICBpZiAoeCAhPSAwIHx8IGdldHVpZCgp ID09IHByaXZ1aWQgfHwgZ2V0ZXVpZCgpID09IHByaXZ1aWQpCisgICAgICB5ID0gcHJpdl9jYW4o KTsKKyAgICBpZiAoeCAhPSAwIHx8IGdldGdpZCgpID09IHByaXZnaWQgfHwgZ2V0ZWdpZCgpID09 IHByaXZnaWQpCisgICAgICB5ID0geSB8IHByaXZfY2FuKCk7CisgICAgcmV0dXJuKHkpOworfQor CitVSURfVAorcmVhbF91aWQoKSB7CisgICAgcmV0dXJuKHJlYWx1aWQpOworfQorCitWT0lECit0 dGltb2ZmKCkgewkJCQkvKiBUdXJuIG9mZiBhbnkgdGltZXIgaW50ZXJydXB0cyAqLworICAgIC8q IGludCB4eDsgKi8KKy8qCisgIEFzIG9mIDVBKDE4MyksIHdlIHNldCBTSUdBTFJNIHRvIFNJR19J R04gKHRvIGlnbm9yZSBhbGFybXMpIHJhdGhlciB0aGFuIHRvCisgIFNJR19ERkwgKHRvIGNhdGNo IGFsYXJtcywgb3IgaWYgdGhlcmUgaXMgbm8gaGFuZGxlciwgdG8gZXhpdCkuICBUaGlzIGlzIHRv CisgIGN1cmUgKG1hc2ssIHJlYWxseSkgYSBkZWVwZXIgcHJvYmxlbSB3aXRoIHN0cmF5IGFsYXJt cyB0aGF0IG9jY3VycyBvbiBzb21lCisgIHN5c3RlbXMsIHBvc3NpYmx5IGhhdmluZyB0byBkbyB3 aXRoIHNsZWVwKCksIHRoYXQgY2F1c2VkIGNvcmUgZHVtcHMuICBJdAorICBzaG91bGQgYmUgT0sg dG8gZG8gdGhpcywgYmVjYXVzZSBubyBjb2RlIGluIHRoaXMgbW9kdWxlIHVzZXMgbmVzdGVkIGFs YXJtcy4KKyAgKEJ1dCB3ZSBzdGlsbCBoYXZlIHRvIHdhdGNoIG91dCBmb3IgU0NSSVBUIGFuZCBE SUFMLi4uKQorKi8KKyAgICAvKiB4eCA9ICovIGFsYXJtKDApOworICAgIC8qIGRlYnVnKEYxMDEs InR0aW1vZmYgYWxhcm0iLCIiLHh4KTsgKi8KKyAgICBpZiAoc2F2YWwpIHsJCQkvKiBSZXN0b3Jl IGFueSBwcmV2aW91cyAqLworCXNpZ25hbChTSUdBTFJNLHNhdmFsKTsJCS8qIGFsYXJtIGhhbmRs ZXIuICovCisJLyogZGVidWcoRjEwMSwidHRpbW9mZiBhbGFybSByZXN0b3Jpbmcgc2F2YWwiLCIi LHNhdmFsKTsgKi8KKwlzYXZhbCA9IE5VTEw7CisgICAgfSBlbHNlIHsKKwlzaWduYWwoU0lHQUxS TSxTSUdfSUdOKTsJLyogVXNlZCB0byBiZSBTSUdfREZMICovCisJLyogZGVidWcoRjEwMCwidHRp bW9mZiBhbGFybSBTSUdfSUdOIiwiIiwwKTsgKi8KKyAgICB9Cit9CisKKworaW50Cit0dF9pc19z ZWN1cmUoKSB7CSAgLyogVGVsbHMgd2hldGhlciB0aGUgY3VycmVudCBjb25uZWN0aW9uIGlzIHNl Y3VyZSAqLworCisgICAgaWYgKHR0eWZkID09IC0xKQorICAgICAgcmV0dXJuKDApOworCisgICAg aWYgKDAKKyNpZmRlZiBTU0hCVUlMVElOCisJfHwgSVNfU1NIKCkKKyNlbmRpZiAvKiBTU0hCVUlM VElOICovCisjaWZkZWYgQ0tfRU5DUllQVElPTgorCXx8IGNrX3RuX2VuY3J5cHRpbmcoKSAmJiBj a190bl9kZWNyeXB0aW5nKCkKKyNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCisjaWZkZWYgQ0tf U1NMCisJfHwgdGxzX2FjdGl2ZV9mbGFnIHx8IHNzbF9hY3RpdmVfZmxhZworI2VuZGlmIC8qIENL X1NTTCAqLworI2lmZGVmIFJMT0dDT0RFCisjaWZkZWYgQ0tfS0VSQkVST1MKKyNpZmRlZiBDS19F TkNSWVBUSU9OCisJfHwgdHRucHJvdG8gPT0gTlBfRUs0TE9HSU4gfHwgdHRucHJvdG8gPT0gTlBf RUs1TE9HSU4KKyNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCisjZW5kaWYgLyogQ0tfS0VSQkVS T1MgKi8KKyNlbmRpZiAvKiBSTE9HQ09ERSAqLworCSkKKyAgICAgIHJldHVybigxKTsKKyAgICBy ZXR1cm4oMCk7Cit9CisKKyNpZmRlZiBDS19SRURJUgorICAKKy8qIEV4dGVybmFsIHByb3RvY29s IGhhbmRsZXIgcGFyYW1ldGVycyBmcm9tIGNrdXVzMy5jICovCitleHRlcm4gaW50IGV4cF9oYW5k bGVyLCBleHBfc3RkZXJyLCBleHBfdGltbzsKKworI2lmZGVmIFNFTEVDVAorI2lmZGVmIE5FVFBU WQorCisvKiBUaGUgcmlnaHQgc2l6ZSBpcyAyNDU3NiAqLworCisjaWZuZGVmIFBUWV9QQlVGX1NJ WkUJCQkvKiBTaXplIG9mIGJ1ZmZlciB0byByZWFkIGZyb20gcHR5ICovCisjZGVmaW5lIFBUWV9Q QlVGX1NJWkUgMjQ1NzYJCS8qIGFuZCB3cml0ZSB0byBuZXQuICovCisjZW5kaWYJLyogUFRZX1BC VUZfU0laRSAqLworCisjaWZuZGVmIFBUWV9UQlVGX1NJWkUJCQkvKiBTaXplIG9mIGJ1ZmZlciB0 byByZWFkIGZyb20gbmV0ICovCisjZGVmaW5lIFBUWV9UQlVGX1NJWkUgMjQ1NzYJCS8qIGFuZCB3 cml0ZSB0byBwdHkuICovCisjZW5kaWYJLyogUFRZX1RCVUZfU0laRSAqLworCisjaWZkZWYgT19O REVMQVkJCQkJLyogV2hldGhlciB0byB1c2Ugbm9uYmxvY2tpbmcgKi8KKyNpZm5kZWYgUFRZX05P X05ERUxBWQkJCS8qIHJlYWRzIG9uIHRoZSBwc2V1ZG90ZXJtaW5hbCAqLworI2lmbmRlZiBQVFlf VVNFX05ERUxBWQorI2RlZmluZSBQVFlfVVNFX05ERUxBWQorI2VuZGlmCS8qIFBUWV9VU0VfTkRF TEFZICovCisjZW5kaWYJLyogUFRZX05PX05ERUxBWSAqLworI2VuZGlmCS8qIE9fTkRFTEFZICov CisKKyNpZm5kZWYgSEFWRV9PUEVOUFRZCisjaWZuZGVmIFVTRV9DS1VQVFlfQworI2RlZmluZSBV U0VfQ0tVUFRZX0MKKyNlbmRpZiAvKiBVU0VfQ0tVUFRZX0MgKi8KKyNlbmRpZiAvKiBIQVZFX09Q RU5QVFkgKi8KKworI2lmZGVmIEhBVkVfT1BFTlBUWQorI2luY2x1ZGUgPHB0eS5oPgorI2VuZGlm CisKK1ZPSUQKK3B0eV9tYWtlX3JhdyhmZCkgaW50IGZkOyB7CisgICAgaW50IHggPSAtMjMsIGk7 CisKKyNpZmRlZiBCU0Q0NE9SUE9TSVgJCQkvKiBQT1NJWCAqLworICAgIHN0cnVjdCB0ZXJtaW9z IHRwOworI2Vsc2UKKyNpZmRlZiBBVFRTVgkJCQkvKiBBVCZUIFVOSVggKi8KKyNpZmRlZiBDS19B TlNJQworICAgIHN0cnVjdCB0ZXJtaW8gdHAgPSB7MH07CisjZWxzZQorICAgIHN0cnVjdCB0ZXJt aW8gdHA7CisjZW5kaWYJLyogQ0tfQU5TSUMgKi8KKyNlbHNlCisgICAgc3RydWN0IHNndHR5YiB0 cDsJCQkvKiBUcmFkaXRpb25hbCAqLworI2VuZGlmIC8qIEFUVFNWICovCisjZW5kaWYgLyogQlNE NDRPUlBPU0lYICovCisKKyAgICBkZWJ1ZyhGMTAxLCJwdHlfbWFrZV9yYXcgZmQiLCIiLGZkKTsK KyAgICBlcnJubyA9IDA7CisKKyNpZmRlZiBCU0Q0NE9SUE9TSVgJCQkvKiBQT1NJWCAqLworICAg IHggPSB0Y2dldGF0dHIoZmQsJnRwKTsKKyAgICBkZWJ1ZyhGMTAxLCJwdHlfbWFrZV9yYXcgdGNn ZXRhdHRyIiwiIix4KTsKKyNlbHNlCisjaWZkZWYgQVRUU1YJCQkJLyogQVQmVCBVTklYICovCisg ICAgeCA9IGlvY3RsKGZkLFRDR0VUQSwmdHApOworICAgIGRlYnVnKEYxMDEsInB0eV9tYWtlX3Jh dyBUQ0dFVEEgaW9jdGwiLCIiLHgpOworI2Vsc2UKKyAgICB4ID0gZ3R0eShmZCwmdHApOworICAg IGRlYnVnKEYxMDEsInB0eV9tYWtlX3JhdyB0dHR5IiwiIix4KTsKKyNlbmRpZiAvKiBBVFRTViAq LworI2VuZGlmIC8qIEJTRDQ0T1JQT1NJWCAqLworICAgIGRlYnVnKEYxMDEsInB0eV9tYWtlX3Jh dyBHRVQgZXJybm8iLCIiLGVycm5vKTsKKworI2lmZGVmIFVTRV9DRk1BS0VSQVcKKyAgICBlcnJu byA9IDA7CisgICAgY2ZtYWtlcmF3KCZ0cCk7CisgICAgZGVidWcoRjEwMSwicHR5X21ha2VfcmF3 IGNmbWFrZXJhdyBlcnJubyIsIiIsZXJybm8pOworI2Vsc2UgIC8qIFVTRV9DRk1BS0VSQVcgKi8K KworI2lmZGVmIENPTU1FTlQKKworLyogVGhpcyB2ZXJ5IHNpbXBsZSB2ZXJzaW9uIHJlY29tbWVu ZGVkIGJ5IFNlcmcgSWFrb2xldiBkb2Vzbid0IHdvcmsgKi8KKworICAgIHRwLmNfbGZsYWcgJj0g fihFQ0hPfElDQU5PTnxJRVhURU58SVNJRyk7CisgICAgdHAuY19pZmxhZyAmPSB+KEJSS0lOVHxJ Q1JOTHxJTlBDS3xJU1RSSVB8SVhPTik7CisgICAgdHAuY19jZmxhZyAmPSB+KENTSVpFfFBBUkVO Qik7CisgICAgdHAuY19jZmxhZyB8PSBDUzg7CisgICAgdHAuY19vZmxhZyAmPSB+KE9QT1NUKTsK KyAgICB0cC5jX2NjW1ZNSU5dID0gMTsKKyAgICB0cC5jX2NjW1ZUSU1FXSA9IDA7CisKKyAgICBk ZWJ1ZyhGMTAxLCJwdHlfbWFrZV9yYXcgMSBjX2NjW10gTkNDUyIsIiIsTkNDUyk7CisgICAgZGVi dWcoRjEwMSwicHR5X21ha2VfcmF3IDEgaWZsYWdzIiwiIix0cC5jX2lmbGFnKTsKKyAgICBkZWJ1 ZyhGMTAxLCJwdHlfbWFrZV9yYXcgMSBvZmxhZ3MiLCIiLHRwLmNfb2ZsYWcpOworICAgIGRlYnVn KEYxMDEsInB0eV9tYWtlX3JhdyAxIGxmbGFncyIsIiIsdHAuY19sZmxhZyk7CisgICAgZGVidWco RjEwMSwicHR5X21ha2VfcmF3IDEgY2ZsYWdzIiwiIix0cC5jX2NmbGFnKTsKKworI2Vsc2UKKyNp ZmRlZiBDT01NRU5UCisvKgorICBJbiB0aGlzIHZlcnNpb24gd2UgdW5zZXQgZXZlcnl0aGluZyBh bmQgdGhlbiBzZXQgb25seSB0aGUKKyAgYml0cyB3ZSBrbm93IHdlIG5lZWQuCisqLworICAgIC8q IGlmbGFncyAqLworICAgIHRwLmNfaWZsYWcgPSAwTDsKKyAgICB0cC5jX2lmbGFnIHw9IElHTkJS SzsKKyNpZmRlZiBJTUFYQkVMCisgICAgdHAuY19pZmxhZyB8PSBJTUFYQkVMOworI2VuZGlmIC8q IElNQVhCRUwgKi8KKworICAgIC8qIG9mbGFncyAqLworICAgIHRwLmNfb2ZsYWcgPSAwTDsKKwor ICAgIC8qIGxmbGFncyAqLworICAgIHRwLmNfbGZsYWcgPSAwTDsKKyNpZmRlZiBOT0tFUk5JTkZP CisgICAgdHAuY19sZmxhZyB8PSBOT0tFUk5JTkZPOworI2VuZGlmCS8qIE5PS0VSTklORk8gKi8K KworICAgIC8qIGNmbGFncyAqLworICAgIHRwLmNfY2ZsYWcgPSAwTDsKKyAgICB0cC5jX2NmbGFn IHw9IENTOHxDUkVBRDsKKworICAgIGZvciAoaSA9IDA7IGkgPCBOQ0NTOyBpKyspIHsJLyogTm8g c3BlY2lhbCBjaGFyYWN0ZXJzICovCisJdHAuY19jY1tpXSA9IDA7CisgICAgfQorI2lmZGVmIFZN SU4KKyAgICB0cC5jX2NjW1ZNSU5dID0gMTsJCQkvKiBCdXQgYWx3YXlzIHdhaXQgZm9yIGlucHV0 ICovCisjZW5kaWYJLyogVk1JTiAqLworICAgIGRlYnVnKEYxMDEsInB0eV9tYWtlX3JhdyAyIGNf Y2NbXSBOQ0NTIiwiIixOQ0NTKTsKKyAgICBkZWJ1ZyhGMTAxLCJwdHlfbWFrZV9yYXcgMiBpZmxh Z3MiLCIiLHRwLmNfaWZsYWcpOworICAgIGRlYnVnKEYxMDEsInB0eV9tYWtlX3JhdyAyIG9mbGFn cyIsIiIsdHAuY19vZmxhZyk7CisgICAgZGVidWcoRjEwMSwicHR5X21ha2VfcmF3IDIgbGZsYWdz IiwiIix0cC5jX2xmbGFnKTsKKyAgICBkZWJ1ZyhGMTAxLCJwdHlfbWFrZV9yYXcgMiBjZmxhZ3Mi LCIiLHRwLmNfY2ZsYWcpOworCisjZWxzZSAgLyogQ09NTUVOVCAqLworLyoKKyAgSW4gdGhpcyB2 ZXJzaW9uIHdlIHNldCBvciB1bnNldCBldmVyeSBzaW5nbGUgZmxhZyBleHBsaWNpdGx5LiAgSXQg d29ya3MgYQorICBiaXQgYmV0dGVyIHRoYW4gdGhlIHNpbXBsZSB2ZXJzaW9uIGp1c3QgYWJvdmUs IGJ1dCBpdCdzIHN0aWxsIGZhciBmcm9tCisgIGFkZXF1YXRlLgorKi8KKyAgICAvKiBpZmxhZ3Mg Ki8KKyAgICB0cC5jX2lmbGFnICY9IH4oUEFSTVJLfElTVFJJUHxCUktJTlR8SU5MQ1J8SUdOQ1J8 SUNSTkwpOworICAgIHRwLmNfaWZsYWcgJj0gfihJTlBDS3xJR05QQVJ8SVhBTll8SVhPTnxJWE9G Rik7CisgICAgdHAuY19pZmxhZyB8PSBJR05CUks7CisjaWZkZWYgSU1BWEJFTAorI2lmZGVmIENP TU1FTlQKKyAgICB0cC5jX2lmbGFnIHw9IElNQVhCRUw7CisjZWxzZQorICAgIHRwLmNfaWZsYWcg Jj0gfklNQVhCRUw7CisjZW5kaWYgLyogQ09NTUVOVCAqLworI2VuZGlmIC8qIElNQVhCRUwgKi8K KyNpZmRlZiBJVUNMQworICAgIHRwLmNfaWZsYWcgJj0gfklVQ0xDOworI2VuZGlmIC8qIElVQ0xD ICovCisKKyAgICAvKiBvZmxhZ3MgKi8KKyNpZmRlZiBCU0RMWQorICAgIHRwLmNfb2ZsYWcgJj0g fkJTRExZOworI2VuZGlmIC8qIEJTRExZICovCisjaWZkZWYgQ1JETFkKKyAgICB0cC5jX29mbGFn ICY9IH5DUkRMWTsKKyNlbmRpZiAvKiBDUkRMWSAqLworI2lmZGVmIEZGRExZCisgICAgdHAuY19v ZmxhZyAmPSB+RkZETFk7CisjZW5kaWYgLyogRkZETFkgKi8KKyNpZmRlZiBOTERMWQorICAgIHRw LmNfb2ZsYWcgJj0gfk5MRExZOworI2VuZGlmIC8qIE5MRExZICovCisjaWZkZWYgVEFCRExZCisg ICAgdHAuY19vZmxhZyAmPSB+VEFCRExZOworI2VuZGlmIC8qIFRBQkRMWSAqLworI2lmZGVmIFZU RExZCisgICAgdHAuY19vZmxhZyAmPSB+VlRETFk7CisjZW5kaWYgLyogVlRETFkgKi8KKyNpZmRl ZiBPRkRFTAorICAgIHRwLmNfb2ZsYWcgJj0gfk9GREVMOworI2VuZGlmIC8qIE9GREVMICovCisj aWZkZWYgT0ZJTEwKKyAgICB0cC5jX29mbGFnICY9IH5PRklMTDsKKyNlbmRpZiAvKiBPRklMTCAq LworI2lmZGVmIE9MQ1VDCisgICAgdHAuY19vZmxhZyAmPSB+T0xDVUM7CisjZW5kaWYgLyogT0xD VUMgKi8KKyNpZmRlZiBDTVNQQVIKKyAgICB0cC5jX29mbGFnICY9IH5DTVNQQVI7CisjZW5kaWYg LyogQ01TUEFSICovCisgICAgdHAuY19vZmxhZyAmPSB+T1BPU1Q7CisjaWZkZWYgT1hUQUJTCisg ICAgdHAuY19vZmxhZyAmPSB+T1hUQUJTOworI2VuZGlmIC8qIE9YVEFCUyAqLworI2lmZGVmIENP TU1FTlQKKyNpZmRlZiBPTk9DUgorICAgIHRwLmNfb2ZsYWcgJj0gfk9OT0NSOwkJLyogTWF5YmUg c2hvdWxkIGJlIHw9PyAqLworICAgIHRwLmNfb2ZsYWcgfD0gT05PQ1I7CQkvKiBtYWtlcyBubyBk aWZmZXJlbmNlIGVpdGhlciB3YXkgKi8KKyNlbmRpZiAvKiBPTk9DUiAqLworI2VuZGlmIC8qIENP TU1FTlQgKi8KKyNpZmRlZiBPTk9FT1QKKyAgICB0cC5jX29mbGFnICY9IH5PTk9FT1Q7CisjZW5k aWYgLyogT05PRU9UICovCisjaWZkZWYgT05MUkVUCisgICAgdHAuY19vZmxhZyAmPSB+T05MUkVU OworI2VuZGlmIC8qIE9OTFJFVCAqLworI2lmZGVmIE9OTENSCisgICAgdHAuY19vZmxhZyAmPSB+ T05MQ1I7CisjZW5kaWYgLyogT05MQ1IgKi8KKyNpZmRlZiBPQ1JOTAorICAgIHRwLmNfb2ZsYWcg Jj0gfk9DUk5MOworI2VuZGlmIC8qIE9DUk5MICovCisKKyAgICAvKiBsZmxhZ3MgKi8KKyAgICB0 cC5jX2xmbGFnICY9IH5FQ0hPOworI2lmZGVmIEVDSE9FCisgICAgdHAuY19sZmxhZyAmPSB+RUNI T0U7CisjZW5kaWYgLyogRUNIT0UgKi8KKyNpZmRlZiBFQ0hPTkwKKyAgICB0cC5jX2xmbGFnICY9 IH5FQ0hPTkw7CisjZW5kaWYgLyogRUNIT05MICovCisjaWZkZWYgRUNIT1BSVAorICAgIHRwLmNf bGZsYWcgJj0gfkVDSE9QUlQ7CisjZW5kaWYgLyogRUNIT1BSVCAqLworI2lmZGVmIEVDSE9LRQor ICAgIHRwLmNfbGZsYWcgJj0gfkVDSE9LRTsKKyNlbmRpZiAvKiBFQ0hPS0UgKi8KKyNpZmRlZiBF Q0hPQ1RMCisgICAgdHAuY19sZmxhZyAmPSB+RUNIT0NUTDsKKyNlbmRpZiAvKiBFQ0hPQ1RMICov CisjaWZkZWYgWENBU0UKKyAgICB0cC5jX2xmbGFnICY9IH5YQ0FTRTsKKyNlbmRpZiAvKiBYQ0FT RSAqLworI2lmZGVmIEFMVFdFUkFTRQorICAgIHRwLmNfbGZsYWcgJj0gfkFMVFdFUkFTRTsKKyNl bmRpZiAvKiBBTFRXRVJBU0UgKi8KKyNpZmRlZiBFWFRQUk9DCisgICAgdHAuY19sZmxhZyAmPSB+ KElDQU5PTnxJU0lHfElFWFRFTnxUT1NUT1B8RkxVU0hPfFBFTkRJTnxFWFRQUk9DKTsKKyNlbHNl CisgICAgdHAuY19sZmxhZyAmPSB+KElDQU5PTnxJU0lHfElFWFRFTnxUT1NUT1B8RkxVU0hPfFBF TkRJTik7CisjZW5kaWYJLyogRVhUUFJPQyAqLworI2lmZGVmIE5PS0VSTklORk8KKyAgICB0cC5j X2xmbGFnIHw9IE5PS0VSTklORk87CisjZW5kaWYJLyogTk9LRVJOSU5GTyAqLworI2lmbmRlZiBD T01NRU5UCisgICAgdHAuY19sZmxhZyAmPSB+Tk9GTFNIOwkJLyogVFJZIElUIFRIRSBPVEhFUiBX QVk/ICovCisjZWxzZQorICAgIHRwLmNfbGZsYWcgfD0gTk9GTFNIOwkJLyogTm8sIHRoaXMgd2F5 IGlzIHdvcnNlICovCisjZW5kaWYgLyogQ09NTUVOVCAqLworCisgICAgLyogY2ZsYWdzICovCisg ICAgdHAuY19jZmxhZyAmPSB+KENTSVpFfFBBUkVOQnxQQVJPREQpOworICAgIHRwLmNfY2ZsYWcg fD0gQ1M4fENSRUFEOworCisjaWZkZWYgTURNQlVGCisgICAgdHAuY19jZmxhZyAmPSB+KE1ETUJV Rik7CisjZWxzZQorI2lmZGVmIENDQVJfT0ZMT1cKKyAgICB0cC5jX2NmbGFnICY9IH4oQ0NBUl9P RkxPVyk7CS8qIHR3byBuYW1lcyBmb3IgdGhlIHNhbWUgdGhpbmcgKi8KKyNlbmRpZiAvKiBDQ0FS X09GTE9XICovCisjZW5kaWYgLyogTURNQlVGICovCisKKyNpZmRlZiBDQ1RTX09GTE9XCisgICAg dHAuY19jZmxhZyAmPSB+KENDVFNfT0ZMT1cpOworI2VuZGlmIC8qIENDVFNfT0ZMT1cgKi8KKyNp ZmRlZiBDRFNSX09GTE9XCisgICAgdHAuY19jZmxhZyAmPSB+KENEU1JfT0ZMT1cpOworI2VuZGlm IC8qIENEU1JfT0ZMT1cgKi8KKyNpZmRlZiBDRFRSX0lGTE9XCisgICAgdHAuY19jZmxhZyAmPSB+ KENEVFJfSUZMT1cpOworI2VuZGlmIC8qIENEVFJfSUZMT1cgKi8KKyNpZmRlZiBDUlRTX0lGTE9X CisgICAgdHAuY19jZmxhZyAmPSB+KENSVFNfSUZMT1cpOworI2VuZGlmIC8qIENSVFNfSUZMT1cg Ki8KKyNpZmRlZiBDUlRTWE9GRgorICAgIHRwLmNfY2ZsYWcgJj0gfihDUlRTWE9GRik7CisjZW5k aWYgLyogQ1JUU1hPRkYgKi8KKyNpZmRlZiBDUlRTQ1RTCisgICAgdHAuY19jZmxhZyAmPSB+KENS VFNDVFMpOworI2VuZGlmIC8qIENSVFNDVFMgKi8KKyNpZmRlZiBDTE9DQUwKKyAgICB0cC5jX2Nm bGFnICY9IH4oQ0xPQ0FMKTsKKyNlbmRpZiAvKiBDTE9DQUwgKi8KKyNpZmRlZiBDU1RPUEIKKyAg ICB0cC5jX2NmbGFnICY9IH4oQ1NUT1BCKTsKKyNlbmRpZiAvKiBDU1RPUEIgKi8KKyNpZmRlZiBI VVBDTAorICAgIHRwLmNfY2ZsYWcgJj0gfihIVVBDTCk7CisjZW5kaWYgLyogSFVQQ0wgKi8KKwor ICAgIGZvciAoaSA9IDA7IGkgPCBOQ0NTOyBpKyspIHsJLyogTm8gc3BlY2lhbCBjaGFyYWN0ZXJz ICovCisJdHAuY19jY1tpXSA9IDA7CisgICAgfQorI2lmZGVmIFZNSU4KKyAgICB0cC5jX2NjW1ZN SU5dID0gMTsJCQkvKiBCdXQgYWx3YXlzIHdhaXQgZm9yIGlucHV0ICovCisjZW5kaWYJLyogVk1J TiAqLworICAgIGRlYnVnKEYxMDEsInB0eV9tYWtlX3JhdyAzIGNfY2NbXSBOQ0NTIiwiIixOQ0NT KTsKKyAgICBkZWJ1ZyhGMTAxLCJwdHlfbWFrZV9yYXcgMyBpZmxhZ3MiLCIiLHRwLmNfaWZsYWcp OworICAgIGRlYnVnKEYxMDEsInB0eV9tYWtlX3JhdyAzIG9mbGFncyIsIiIsdHAuY19vZmxhZyk7 CisgICAgZGVidWcoRjEwMSwicHR5X21ha2VfcmF3IDMgbGZsYWdzIiwiIix0cC5jX2xmbGFnKTsK KyAgICBkZWJ1ZyhGMTAxLCJwdHlfbWFrZV9yYXcgMyBjZmxhZ3MiLCIiLHRwLmNfY2ZsYWcpOwor I2VuZGlmIC8qIENPTU1FTlQgKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisKKyAgICBlcnJubyA9 IDA7CisjaWZkZWYgQlNENDRPUlBPU0lYCQkJLyogUE9TSVggKi8KKyAgICB4ID0gdGNzZXRhdHRy KGZkLFRDU0FOT1csJnRwKTsKKyAgICBkZWJ1ZyhGMTAxLCJwdHlfbWFrZV9yYXcgdGNzZXRhdHRy IiwiIix4KTsKKyNlbHNlCisjaWZkZWYgQVRUU1YJCQkJLyogQVQmVCBVTklYICovCisgICAgeCA9 IGlvY3RsKGZkLFRDU0VUQSwmdHApOworICAgIGRlYnVnKEYxMDEsInB0eV9tYWtlX3JhdyBpb2N0 bCIsIiIseCk7CisjZWxzZQorICAgIHggPSBzdHR5KGZkLCZ0cCk7CQkJLyogVHJhZGl0aW9uYWwg Ki8KKyAgICBkZWJ1ZyhGMTAxLCJwdHlfbWFrZV9yYXcgc3R0eSIsIiIseCk7CisjZW5kaWYgLyog QVRUU1YgKi8KKyNlbmRpZiAvKiBCU0Q0NE9SUE9TSVggKi8KKyAgICBkZWJ1ZyhGMTAxLCJwdHlf bWFrZV9yYXcgZXJybm8iLCIiLGVycm5vKTsKKworI2VuZGlmIC8qIF9fTmV0QlNEX18gKi8KK30K Kworc3RhdGljIGludAorcHR5X2NoayhmZCkgaW50IGZkOyB7CisgICAgaW50IHgsIG4gPSAwOwor ICAgIGVycm5vID0gMDsKKyNpZmRlZiBGSU9OUkVBRAorICAgIHggPSBpb2N0bChmZCwgRklPTlJF QUQsICZuKTsJLyogQlNEIGFuZCBtb3N0IG90aGVycyAqLworICAgIGNrbWFrbXNnKG1zZ2J1Ziw1 MDAsCisJICAgICAicHR5X2NoayBpb2N0bCBGSU9OUkVBRCBlcnJubz0iLAorCSAgICAgY2tpdG9h KGVycm5vKSwKKwkgICAgICIgY291bnQ9IiwKKwkgICAgIGNraXRvYShuKSk7CisgICAgZGVidWco RjEwMCxtc2didWYsIiIsMCk7CisjZWxzZQorI2lmZGVmIFJEQ0hLCisgICAgbiA9IHJkY2hrKGZk KTsKKyAgICBkZWJ1ZyhGMTAxLCJwdHlfY2hrIHJkY2hrIiwiIixuKTsKKyNlbHNlCisgICAgbiA9 IDE7CisjZW5kaWYJLyogUkRDSEsgKi8KKyNlbmRpZgkvKiBGSU9OUkVBRCAqLworICAgIHJldHVy bigobiA+IC0xKSA/IG4gOiAwKTsKK30KKworc3RhdGljIGludAorcHR5X2dldF9zdGF0dXMoZmQs cGlkKSBpbnQgZmQ7IFBJRF9UIHBpZDsgeworICAgIGludCB4LCBzdGF0dXMgPSAtMTsKKyAgICBQ SURfVCB3OworCisgICAgZGVidWcoRjEwMSwicHR5X2dldF9zdGF0dXMgZmQiLCIiLGZkKTsKKyAg ICBkZWJ1ZyhGMTAxLCJwdHlfZ2V0X3N0YXR1cyBwaWQiLCIiLHBpZCk7CisKKyAgICBpZiAocGV4 aXRzdGF0ID4gLTEpCisgICAgICByZXR1cm4ocGV4aXRzdGF0KTsKKworI2lmZGVmIENPTU1FTlQK KyAgICAvKiBOb3Qgb25seSB1bm5lY2Vzc2FyeSBidXQgaGFybWZ1bCAqLworICAgIGVycm5vID0g MDsKKyAgICB4ID0ga2lsbChwdHlfZm9ya19waWQsMCk7CisgICAgZGVidWcoRjEwMSwicHR5X2dl dF9zdGF0dXMga2lsbCB2YWx1ZSIsIiIseCk7CisgICAgZGVidWcoRjEwMSwicHR5X2dldF9zdGF0 dXMga2lsbCBlcnJubyIsIiIsZXJybm8pOworICAgIGlmICh4ID4gLTEgJiYgZXJybm8gIT0gRVNS Q0gpCisgICAgICByZXR1cm4oLTEpOwkJCS8qIEZvcmsgc3RpbGwgdGhlcmUgKi8KKyAgICAvKiBG b3JrIHNlZW1zIHRvIGJlIGdvbmUgKi8KKyNlbmRpZgkvKiBDT01NRU5UICovCisKKyAgICBlcnJu byA9IDA7CisgICAgeCA9IHdhaXRwaWQocHR5X2ZvcmtfcGlkLCZzdGF0dXMsV05PSEFORyk7Cisg ICAgZGVidWcoRjExMSwicHR5X2dldF9zdGF0dXMgd2FpdHBpZCIsY2tpdG9hKGVycm5vKSx4KTsK KyAgICBpZiAoeCA8PSAwICYmIGVycm5vID09IDApIHsKKwlkZWJ1ZyhGMTAxLCJwdHlfZ2V0X3N0 YXR1cyB3YWl0cGlkIHJldHVybiIsIiIsLTEpOworCXJldHVybigtMSk7CisgICAgfQorICAgIGlm ICh4ID4gMCkgeworCWlmICh4ICE9IHB0eV9mb3JrX3BpZCkKKwkgIGRlYnVnKEYxMDEsCisJCSJw dHlfZ2V0X3N0YXR1cyB3YWl0cGlkIHBpZCBkb2Vzbid0IG1hdGNoIiwiIixwdHlfZm9ya19waWQp OyAKKwlkZWJ1ZyhGMTAxLCJwdHlfZ2V0X3N0YXR1cyB3YWl0cGlkIHN0YXR1cyIsIiIsc3RhdHVz KTsKKwlkZWJ1ZyhGMTAxLCJwdHlfZ2V0X3N0YXR1cyB3YWl0cGlkIGVycm5vIiwiIixlcnJubyk7 CisJaWYgKFdJRkVYSVRFRChzdGF0dXMpKSB7CisJICAgIGRlYnVnKEYxMDAsInB0eV9nZXRfc3Rh dHVzIFdJRkVYSVRFRCIsIiIsMCk7CisJICAgIHN0YXR1cyA9IFdFWElUU1RBVFVTKHN0YXR1cyk7 CisJICAgIGRlYnVnKEYxMDEsInB0eV9nZXRfc3RhdHVzIGZvcmsgZXhpdCBzdGF0dXMiLCIiLHN0 YXR1cyk7CisjaWZkZWYgQ09NTUVOVAorCSAgICBlbmRfcHR5KCk7CisjZW5kaWYJLyogQ09NTUVO VCAqLworCSAgICBjbG9zZShmZCk7CisJICAgIHBleGl0c3RhdCA9IHN0YXR1czsKKwl9IGVsc2Ug eworCSAgICBkZWJ1ZyhGMTAwLCJwdHlfZ2V0X3N0YXR1cyB3YWl0cGlkIHVuZXhwZWN0ZWQgc3Rh dHVzIiwiIiwwKTsKKwl9CisgICAgfQorICAgIGRlYnVnKEYxMDEsInB0eV9nZXRfc3RhdHVzIHJl dHVybiBzdGF0dXMiLCIiLHN0YXR1cyk7CisgICAgcmV0dXJuKHN0YXR1cyk7Cit9CisKKy8qIHQg dCBwIHQgeSBjIG0gZCAgLS0gIFJ1biBjb21tYW5kIG9uIHB0eSBhbmQgZm9yd2FyZCB0byBuZXQg Ki8KKworLyoKKyAgTmVlZGVkIGZvciBydW5uaW5nIGV4dGVybmFsIHByb3RvY29scyBvbiBzZWN1 cmUgY29ubmVjdGlvbnMuCisgIEZvciBleGFtcGxlLCBpZiBDLUtlcm1pdCBoYXMgbWFkZSBhbiBT U0wvVExTIG9yIEtlcmJlcm9zIFRlbG5ldAorICBjb25uZWN0aW9uLCBhbmQgdGhlbiBuZWVkcyB0 byB0cmFuc2ZlciBhIGZpbGUgd2l0aCBabW9kZW0sIHdoaWNoIGlzCisgIGFuIGV4dGVybmFsIHBy b2dyYW0sIHRoaXMgcm91dGluZSByZWFkcyBabW9kZW0ncyBvdXRwdXQsIGVuY3J5cHRzIGl0LAor ICBhbmQgdGhlbiBmb3J3YXJkcyBpdCBvdXQgdGhlIGNvbm5lY3Rpb24sIGFuZCByZWFkcyB0aGUg ZW5jcnlwdGVkIGRhdGEKKyAgc3RyZWFtIGNvbWluZyBpbiBmcm9tIHRoZSBjb25uZWN0aW9uLCBk ZWNyeXB0cyBpdCwgYW5kIGZvcndhcmRzIGl0IHRvCisgIFptb2RlbS4KKworICBXb3JrcyBsaWtl IGEgVENQL0lQIHBvcnQgZm9yd2FyZGVyIGV4Y2VwdCBvbmUgZW5kIGlzIGEgcHR5IHJhdGhlcgor ICB0aGFuIGEgc29ja2V0LCB3aGljaCBpbnRyb2R1Y2VzIHNvbWUgY29tcGxpY2F0aW9uczoKKwor ICAgLiBPbiBtb3N0IHBsYXRmb3Jtcywgc2VsZWN0KCkgYWx3YXlzIGluZGljYXRlcyB0aGUgb3V0 cHV0IHNpZGUgb2YKKyAgICAgdGhlIHB0eSBoYXMgY2hhcmFjdGVycyB3YWl0aW5nIHRvIGJlIHJl YWQsIGV2ZW4gd2hlbiBpdCBkb2Vzbid0LAorICAgICBldmVuIHdoZW4gdGhlIHB0eSBwcm9jZXNz IGhhcyBhbHJlYWR5IGV4aXRlZC4KKworICAgLiBOb25ibG9ja2luZyByZWFkcyBtdXN0IGJlIHVz ZWQgb24gdGhlIHB0eSwgYmVjYXVzZSB0aGVyZSBpcyBubworICAgICB3YXkgb24gY2VydGFpbiBw bGF0Zm9ybXMgKGUuZy4gTmV0QlNEKSB0byBmaW5kIG91dCBob3cgbWFueSBjaGFyYWN0ZXJzCisg ICAgIGFyZSBhdmFpbGFibGUgdG8gYmUgcmVhZCAodGhlIEZJT05SRUFEIGlvY3RsIGFsd2F5cyBz YXlzIDApLiAgVGhlIGNvZGUKKyAgICAgYWxzbyBhbGxvd3MgZm9yIGJsb2NraW5nIHJlYWRzIChp ZiBPX05ERUxBWSBhbmQgT19OT05CTE9DSyBhcmUgbm90CisgICAgIGRlZmluZWQsIG9yIGlmIFBU WV9OT19OREVMQVkgaXMgZGVmaW5lZCksIGJ1dCBvbiBzb21lIHBsYXRmb3JtcyB0aGlzIGNhbgor ICAgICByZXN1bHQgaW4gc2luZ2xlLWJ5dGUgcmVhZHMgYW5kIHdyaXRlcyAoTmV0QlNEIGFnYWlu KS4KKworICAgLiBUZXN0aW5nIGZvciAiRU9GIiBvbiB0aGUgcHR5IGlzIHByb2JsZW1hdGljLiAg c2VsZWN0KCkgbmV2ZXIgZ2l2ZXMKKyAgICAgYW55IGluZGljYXRpb24uICBBZnRlciB0aGUgcHR5 IHByb2Nlc3MgaGFzIGV4aXRlZCBhbmQgdGhlIGZvcmsgaGFzCisgICAgIGRpc2FwcGVhcmVkLCBy ZWFkKCkgY2FuIHN0aWxsIHJldHVybiB3aXRoIDAgYnl0ZXMgcmVhZCBidXQgd2l0aG91dCBhbgor ICAgICBlcnJvciAoTmV0QlNEKTsgbm8ga25vd24gdGVzdCBvbiB0aGUgcHR5IGZpbGUgZGVzY3Jp cHRvciB3aWxsIGluZGljYXRlCisgICAgIHRoYXQgaXQgaXMgbm8gbG9uZ2VyIHZhbGlkLiAgVGhl IHByb2Nlc3MgSUQgb2YgdGhlIHB0eSBmb3JrIGNhbiBiZQorICAgICB0ZXN0ZWQgb24gc29tZSBw bGF0Zm9ybXMgKE5ldEJTRCwgbHVja2lseSkgYnV0IG5vdCBvdGhlcnMgKFNvbGFyaXMsCisgICAg IExpbnV4KS4KKworICBPbiB0aGUgbmV0d29yayBzaWRlLCB3ZSB1c2UgdHRpbmMoKSBhbmQgdHRv YygpLCB3aGljaCwgZm9yIG5ldHdvcmsgCisgIGNvbm5lY3Rpb25zLCBoYW5kbGUgYW55IGFjdGl2 ZSBzZWN1cml0eSBtZXRob2RzLgorCisgIENhbGwgd2l0aCBzID0gY29tbWFuZC4KKyAgUmV0dXJu cyAwIG9uIGZhaWx1cmUsIDEgb24gc3VjY2Vzcy4KKyAgZmRjIC0gRGVjZW1iZXIgMjAwNiAtIEF1 Z3VzdCAyMDA3LgorCisgIE5PVEU6IFRoaXMgY29kZSBkZWZhdWx0cyB0byBub25ibG9ja2luZyBy ZWFkcyBpZiBPX05ERUxBWSBvciBPX05PTkJMT0NLIGFyZQorICBkZWZpbmVkIGluIHRoZSBoZWFk ZXIgZmlsZXMsIHdoaWNoIHNob3VsZCBiZSB0cnVlIG9mIGV2ZXJ5IHJlY2VudCBVbml4CisgIHBs YXRmb3JtLiAgSWYgdGhpcyBjYXVzZXMgdHJvdWJsZSBzb21ld2hlcmUsIGRlZmluZSBQVFlfTk9f TkRFTEFZLCBlLmcuIHdoZW4KKyAgYnVpbGRpbmcgQy1LZXJtaXQ6CisKKyAgICB0b3VjaCBja3V0 aW8uYworICAgIG1ha2UgcGxhdGZvcm1uYW1lIEtGTEFHUz0tRFBUWV9OT19OT0RFTEFZCisqLwor c3RhdGljIGludCBoYXZlX3B0eSA9IDA7CQkvKiBEbyB3ZSBoYXZlIGEgcHR5PyAqLworCitzdGF0 aWMgU0lHVFlQICgqc2F2ZV9zaWdjaGxkKSgpID0gTlVMTDsJLyogRm9yIGNhdGNoaW5nIFNJR0NI TEQgKi8KKworc3RhdGljIFZPSUQKK3NpZ2NobGRfaGFuZGxlcihzaWcpIGludCBzaWc7IHsKKyAg ICBoYXZlX3B0eSA9IDA7CQkJLyogV2UgZG9uJ3QgaGF2ZSBhIHB0eSAqLworI2lmZGVmIERFQlVH CisgICAgaWYgKHNhdmVfc2lnY2hsZCkgeworCShWT0lEKSBzaWduYWwoU0lHQ0hMRCxzYXZlX3Np Z2NobGQpOworCXNhdmVfc2lnY2hsZCA9IE5VTEw7CisgICAgfQorICAgIGlmIChkZWJsb2cpIHsK KwlkZWJ1ZyhGMTAwLCIqKioqKioqKioqKioqKiIsIiIsMCk7CisJZGVidWcoRjEwMCwiU0lHQ0hM RCBjYXVnaHQiLCIiLDApOworCWRlYnVnKEYxMDAsIioqKioqKioqKioqKioqIiwiIiwwKTsKKyAg ICB9CisjZW5kaWYJLyogREVCVUcgKi8KK30KKyNkZWZpbmUgSEFWRV9JQUMgMQorI2RlZmluZSBI QVZFX0NSICAyCisKK2ludAordHRwdHljbWQocykgY2hhciAqczsgeworICAgIENIQVIgdGJ1ZltQ VFlfVEJVRl9TSVpFXTsJCS8qIFJlYWQgZnJvbSBuZXQsIHdyaXRlIHRvIHB0eSAqLworICAgIGlu dCB0YnVmX2F2YWlsID0gMDsJCQkvKiBQb2ludGVycyBmb3IgdGJ1ZiAqLworICAgIGludCB0YnVm X3dyaXR0ZW4gPSAwOworICAgIHN0YXRpYyBpbnQgaW5fc3RhdGUgPSAwOwkJLyogRm9yIFRFTE5F VCBJQUMgYW5kIE5WVCBpbiAqLworICAgIHN0YXRpYyBpbnQgb3V0X3ByZXYgPSAwOwkJLyogU2lt cGxlciBzY2hlbWUgZm9yIG91dCAqLworCisgICAgQ0hBUiBwYnVmW1BUWV9QQlVGX1NJWkVdOwkJ LyogUmVhZCBmcm9tIHB0eSwgd3JpdGUgdG8gbmV0ICovCisgICAgQ0hBUiBkYnVmW1BUWV9QQlVG X1NJWkUgKyBQVFlfUEJVRl9TSVpFICsgMV07IC8qIERvdWJsZS1zaXplIGJ1ZmZlciAqLworICAg IGludCBwYnVmX2F2YWlsID0gMDsJCQkvKiBQb2ludGVycyBmb3IgcGJ1ZiAqLworICAgIGludCBw YnVmX3dyaXR0ZW4gPSAwOworCisgICAgaW50IHB0eWZkID0gLTE7CQkJLyogUHR5IGZpbGUgZGVz Y3JpcHRvciAqLworICAgIGludCBoYXZlX25ldCA9IDA7CQkJLyogV2UgaGF2ZSBhIG5ldHdvcmsg Y29ubmVjdGlvbiAqLworICAgIGludCBwdHlfZXJyID0gMDsJCQkvKiBHb3QgZXJyb3Igb24gcHR5 ICovCisgICAgaW50IG5ldF9lcnIgPSAwOwkJCS8qIEdvdCBlcnJvciBvbiBuZXQgKi8KKyAgICBp bnQgc3RhdHVzID0gLTE7CQkJLyogUHR5IHByb2Nlc3MgZXhpdCBzdGF0dXMgKi8KKyAgICBpbnQg cmMgPSAwOwkJCQkvKiBPdXIgcmV0dXJuIGNvZGUgKi8KKworICAgIGludCB4MSA9IDAsIHgyID0g MDsJCQkvKiBXb3JrZXJzLi4uICovCisgICAgaW50IGMsIG4sIG0sIHQsIHg7CQkJLyogV29ya2Vy cyAqLworCisgICAgbG9uZyBzZWNvbmRzX3RvX3dhaXQgPSAwTDsJCS8qIHNlbGVjdCgpIHRpbWVv dXQgKi8KKyAgICBzdHJ1Y3QgdGltZXZhbCB0diwgKnR2MjsJCS8qIEZvciBzZWxlY3QoKSAqLwor I2lmZGVmIElOVFNFTEVDVAorICAgIGludCBpbiwgb3V0LCBlcnI7CQkJLyogRm9yIHNlbGVjdCgp ICovCisjZWxzZQorICAgIGZkX3NldCBpbiwgb3V0LCBlcnI7CisjZW5kaWYgLyogSU5UU0VMRUNU ICovCisgICAgaW50IG5mZHMgPSAwOwkJCS8qIEZvciBzZWxlY3QoKSAqLworCisgICAgaW50IHBz ZXQgPSAwLCB0c2V0ID0gMCwgcG5vdHNldCA9IDAsIHRub3RzZXQgPSAwOyAvKiBzdGF0cy9kZWJ1 Z2dpbiBvbmx5ICovCisgICAgaW50IHJlYWRfbmV0X2J5dGVzID0gMDsJCS8qIFN0YXRzICovCisg ICAgaW50IHdyaXRlX25ldF9ieXRlcyA9IDA7CQkvKiBTdGF0cyAqLworICAgIGludCByZWFkX3B0 eV9ieXRlcyA9IDA7CQkvKiBTdGF0cyAqLworICAgIGludCB3cml0ZV9wdHlfYnl0ZXMgPSAwOwkJ LyogU3RhdHMgKi8KKyAgICBpbnQgaXNfdG4gPSAwOwkJCS8qIFRFTE5FVCBwcm90b2NvbCBpcyBh Y3RpdmUgKi8KKworICAgIGludCBtYXN0ZXJmZCA9IC0xOworICAgIGludCBzbGF2ZWZkID0gLTE7 CisjaWZuZGVmIFVTRV9DS1VQVFlfQworICAgIHN0cnVjdCB0ZXJtaW9zIHRlcm07CisgICAgc3Ry dWN0IHdpbnNpemUgdHdpbjsKKyAgICBzdHJ1Y3Qgc3RyaW5nYXJyYXkgKiBxOworICAgIGNoYXIg KiogYXJncyA9IE5VTEw7CisjZW5kaWYgLyogVVNFX0NLVVBUWV9DICovCisKKyAgICBpbl9zdGF0 ZSA9IDA7CQkJLyogTm8gcHJldmlvdXMgY2hhcmFjdGVyIHlldCAqLworCisgICAgaWYgKHR0eWZk ID09IC0xKSB7CisJcHJpbnRmKCI/U29ycnksIGNvbW11bmljYXRpb24gY2hhbm5lbCBpcyBub3Qg b3BlblxuIik7CisJcmV0dXJuKDApOworICAgIH0gZWxzZSB7CisJaGF2ZV9uZXQgPSAxOworICAg IH0KKyAgICBpZiAobm9wdXNoKSB7CisJZGVidWcoRjEwMCwidHRwdHljbWQgZmFpbDogbm9wdXNo IiwiIiwwKTsKKwlyZXR1cm4oMCk7CisgICAgfQorICAgIGlmICghcykgcyA9ICIiOwkJCS8qIERl ZmVuc2UgZGUgYm9ndXMgYXJndW1lbnRzICovCisgICAgaWYgKCEqcykgcmV0dXJuKDApOworICAg IHBleGl0c3RhdCA9IC0xOwkJCS8qIEZvcmsgcHJvY2VzcyBleGl0IHN0YXR1cyAqLworCisjaWZk ZWYgVE5DT0RFCisgICAgaXNfdG4gPSAoeGxvY2FsICYmIG5ldGNvbm4gJiYgSVNfVEVMTkVUKCkp IHx8IC8qIFRlbG5ldCBwcm90b2NvbCBhY3RpdmUgKi8KKwkgICAgKCF4bG9jYWwgJiYgc3N0ZWxu ZXQpOworI2VuZGlmIC8qIFROQ09ERSAqLworCisgICAgZGVidWcoRjExMCwidHRwdHljbWQgY29t bWFuZCIscywwKTsKKyAgICBkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCB0dHlmZCIsIiIsdHR5ZmQpOwor ICAgIGRlYnVnKEYxMDEsInR0cHR5Y21kIGlzX3RuIiwiIixpc190bik7CisgICAgZGVidWcoRjEw MSwidHRwdHljbWQgY2tlcm1pdCBwaWQiLCIiLGdldHBpZCgpKTsKKworI2lmZGVmIFVTRV9DS1VQ VFlfQworICAgIC8qIENhbGwgY2t1cHR5LmMgbW9kdWxlIHRvIGdldCBhbmQgc2V0IHVwIHRoZSBw dHkgZm9yayAqLworICAgIC8qIGZjIDEgPT0gInJ1biBhbiBleHRlcm5hbCBwcm90b2NvbCIgKi8K KyAgICBkZWJ1ZyhGMTAwLCJ0dHB0eWNtZCB1c2luZyBja3VwdHkuYyIsIiIsMCk7CisgICAgaWYg KGRvX3B0eSgmcHR5ZmQscywxKSA8IDApIHsJLyogU3RhcnQgdGhlIGNvbW1hbmQgb24gYSBwdHkg Ki8KKwlkZWJ1ZyhGMTAwLCJ0dHB0eWNtZCBkb19wdHkgZmFpbHMiLCIiLDApOworCXJldHVybigw KTsKKyAgICB9CisgICAgbWFzdGVyZmQgPSBwdHlmZDsKKyAgICBwdHlfbWFzdGVyX2ZkID0gcHR5 ZmQ7CisjaWZkZWYgQ09NTUVOVAorICAgIHNsYXZlZmQgPSBwdHlfc2xhdmVfZmQ7CQkvKiBUaGlz IGlzIG5vdCB2aXNpYmxlIHRvIHVzICovCisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgIGRlYnVn KEYxMTEsInR0cHR5Y21kIHB0eWZkIiwiVVNFX0NLVVBUWV9DIixwdHlmZCk7CisgICAgZGVidWco RjExMSwidHRwdHljbWQgbWFzdGVyZmQiLCJVU0VfQ0tVUFRZX0MiLG1hc3RlcmZkKTsKKyAgICBk ZWJ1ZyhGMTExLCJ0dHB0eWNtZCBmb3JrIHBpZCIsIlVTRV9DS1VQVFlfQyIscHR5X2ZvcmtfcGlk KTsKKyNpZm5kZWYgU09MQVJJUworICAgIC8qICJpb2N0bCBpbmFwcHJvcHJpYXRlIG9uIGRldmlj ZSIgZm9yIHB0eSBtYXN0ZXIgKi8KKyAgICBwdHlfbWFrZV9yYXcobWFzdGVyZmQpOworI2VuZGlm IC8qIFNPTEFSSVMgKi8KKworI2Vsc2UgLyogVVNFX0NLVVBUWV9DICovCisKKyAgICBkZWJ1ZyhG MTAwLCJ0dHB0eWNtZCBPUEVOUFRZIiwiIiwwKTsKKyAgICBpZiAodGNnZXRhdHRyKDAsICZ0ZXJt KSA9PSAtMSkgewkvKiBHZXQgY29udHJvbGxpbmcgdGVybWluYWwncyBtb2RlcyAqLworCXBlcnJv cigidGNnZXRhdHRyIik7CisJcmV0dXJuKDApOworICAgIH0KKyAgICBpZiAoaW9jdGwoMCwgVElP Q0dXSU5TWiwgKGNoYXIgKikgJnR3aW4pID09IC0xKSB7IC8qIGFuZCB3aW5kb3cgc2l6ZSAqLwor CXBlcnJvcigiaW9jdGwgVElPQ0dXSU5TWiIpOworCXJldHVybigwKTsKKyAgICB9CisgICAgaWYg KG9wZW5wdHkoJm1hc3RlcmZkLCAmc2xhdmVmZCwgTlVMTCwgTlVMTCwgTlVMTCkgPT0gLTEpIHsK KwlkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCBvcGVucHR5IGZhaWxlZCBlcnJubyIsIiIsZXJybm8pOwor CXBlcnJvcigib3BlbnRweSIpOworCXJldHVybigwKTsKKyAgICB9CisgICAgZGVidWcoRjEwMSwi dHRwdHljbWQgb3BlbnB0eSBtYXN0ZXJmZCIsIiIsbWFzdGVyZmQpOworICAgIGRlYnVnKEYxMDEs InR0cHR5Y21kIG9wZW5wdHkgc2xhdmVmZCIsIiIsc2xhdmVmZCk7CisgICAgcHR5X21hc3Rlcl9m ZCA9IG1hc3RlcmZkOworICAgIHB0eV9zbGF2ZV9mZCA9IHNsYXZlZmQ7CisgICAgZGVidWcoRjEw MSwidHRwdHljbWQgb3BlbnB0eSBwdHlfbWFzdGVyX2ZkIiwiIixwdHlfbWFzdGVyX2ZkKTsKKwor ICAgIC8qIFB1dCBwdHkgbWFzdGVyIGluIHJhdyBtb2RlIGJ1dCBsZXQgZm9ya2VkIGFwcCBjb250 cm9sIHRoZSBzbGF2ZSAqLworICAgIHB0eV9tYWtlX3JhdyhtYXN0ZXJmZCk7CisKKyNpZmRlZiBD T01NRU5UCisjaWZkZWYgVElPQ1JFTU9URQorICAgIC8qIFRJT0NSRU1PVEUsMCA9IGRpc2FibGUg YWxsIHRlcm1pbyBwcm9jZXNzaW5nICovCisgICAgeCA9IGlvY3RsKG1hc3RlcmZkLCBUSU9DUkVN T1RFLCAxKTsKKyAgICBkZWJ1ZyhGMTExLCJ0dHB0eWNtZCBpb2N0bCBUSU9DUkVNT1RFIixja2l0 b2EoeCksZXJybm8pOworI2VuZGlmCS8qIFRJT0NSRU1PVEUgKi8KKyNpZmRlZiBUSU9DVFRZCisg ICAgLyogVElPQ1RUWSwwID0gZGlzYWJsZSBhbGwgdGVybWlvIHByb2Nlc3NpbmcgKi8KKyAgICB4 ID0gaW9jdGwobWFzdGVyZmQsIFRJT0NUVFksIDApOworICAgIGRlYnVnKEYxMTEsInR0cHR5Y21k IGlvY3RsIFRJT0NUVFkiLGNraXRvYSh4KSxlcnJubyk7CisjZW5kaWYJLyogVElPQ1RUWSAqLwor I2VuZGlmIC8qIENPTU1FTlQgKi8KKworICAgIGhhdmVfcHR5ID0gMTsJCQkvKiBXZSBoYXZlIGFu IG9wZW4gcHR5ICovCisgICAgc2F2ZV9zaWdjaGxkID0gc2lnbmFsKFNJR0NITEQsIHNpZ2NobGRf aGFuZGxlcik7IC8qIENhdGNoIGZvcmsgcXVpdCAqLworCisgICAgcHR5X2ZvcmtfcGlkID0gZm9y aygpOwkJLyogTWFrZSBmb3JrIGZvciBleHRlcm5hbCBwcm90b2NvbCAqLworICAgIGRlYnVnKEYx MDEsInR0cHR5Y21kIHB0eV9mb3JrX3BpZCIsIiIscHR5X2ZvcmtfcGlkKTsKKyAgICBpZiAocHR5 X2ZvcmtfcGlkID09IC0xKSB7CisJcGVycm9yKCJmb3JrIik7CisJcmV0dXJuKDApOworICAgIH0g ZWxzZSBpZiAocHR5X2ZvcmtfcGlkID09IDApIHsJLyogSW4gbmV3IGZvcmsgKi8KKwlpbnQgeDsK KwlkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCBuZXcgZm9yayBwaWQiLCIiLGdldHBpZCgpKTsKKwljbG9z ZShtYXN0ZXJmZCk7CQkvKiBTbGF2ZSBxdWFydGVycyBubyBtYXN0ZXJzIGFsbG93ZWQgKi8KKwl4 ID0gc2V0c2lkKCk7CisJZGVidWcoRjEwMSwidHRwdHljbWQgbmV3IGZvcmsgc2V0c2lkIiwiIix4 KTsKKwlpZiAoeCA9PSAtMSkgeworCSAgICBwZXJyb3IoInR0cHR5Y21kIHNldHNpZCIpOworCSAg ICBleGl0KDEpOworCX0KKwlzaWduYWwoU0lHSU5ULFNJR19JR04pOwkJLyogTGV0IHVwcGVyIGZv cmsgY2F0Y2ggdGhpcyAqLworCQorI2lmZGVmIENPTU1FTlQKKyNpZmRlZiBUSU9DU0NUVFkKKwkv KiBNYWtlIHB0eSB0aGUgY29udHJvbGxpbmcgdGVybWluYWwgZm9yIHRoZSBwcm9jZXNzICovCisJ LyogVEhJUyBDQVVTRVMgQU4gSU5GSU5JVEUgU0lHV0lOQ0ggSU5URVJSVVBUIExPT1AgKi8KKwl4 ID0gaW9jdGwoc2xhdmVmZCwgVElPQ1NDVFRZLCBOVUxMKTsKKwlkZWJ1ZyhGMTAxLCJ0dHB0eWNt ZCBUSU9DU0NUVFkiLCIiLHgpOworI2VuZGlmCS8qIFRJT0NTQ1RUWSAqLworI2VuZGlmCS8qIENP TU1FTlQgKi8KKworCS8qIEluaXRpYWxpemUgc2xhdmUgcHR5IG1vZGVzIGFuZCBzaXplIHRvIHRo b3NlIG9mIG91ciB0ZXJtaW5hbCAqLworCWlmICh0Y3NldGF0dHIoc2xhdmVmZCwgVENTQU5PVywg JnRlcm0pID09IC0xKSB7CisJICAgIHBlcnJvcigidHRwdHljbWQgdGNzZXRhdHRyIik7CisJICAg IGV4aXQoMSk7CisJfQorCWlmIChpb2N0bChzbGF2ZWZkLCBUSU9DU1dJTlNaLCAmdHdpbikgPT0g LTEpIHsKKwkgICAgcGVycm9yKCJ0dHB0eWNtZCBpb2N0bCIpOworCSAgICBleGl0KDEpOworCX0K KyNpZmRlZiBDT01NRU5UCisjaWZkZWYgVElPQ05PVFRZCisJLyogRGlzYXNzb2NpYXRlIHRoaXMg cHJvY2VzcyBmcm9tIGl0cyB0ZXJtaW5hbCAqLworCS8qIFRISVMgSEFTIE5PIEVGRkVDVCAqLwor CXggPSBpb2N0bChzbGF2ZWZkLCBUSU9DTk9UVFksIE5VTEwpOworCWRlYnVnKEYxMDEsInR0cHR5 Y21kIFRJT0NOT1RUWSIsIiIseCk7CisjZW5kaWYJLyogVElPQ05PVFRZICovCisjZW5kaWYJLyog Q09NTUVOVCAqLworCisjaWZkZWYgQ09NTUVOVAorI2lmZGVmIFNJR1RUT1UJCisJLyogSWdub3Jl IHRlcm1pbmFsIG91dHB1dCBpbnRlcnJ1cHRzICovCisJLyogVEhJUyBIQVMgTk8gRUZGRUNUICov CisJZGVidWcoRjEwMCwidHRwdHljbWQgaWdub3JpbmcgU0lHVFRPVSIsIiIsMCk7CisJc2lnbmFs KFNJR1RUT1UsIFNJR19JR04pOworI2VuZGlmCS8qIFNJR1RUT1UgKi8KKyNpZmRlZiBTSUdUU1RQ CQorCS8qIElnbm9yZSB0ZXJtaW5hbCBvdXRwdXQgaW50ZXJydXB0cyAqLworCS8qIFRISVMgSEFT IE5PIEVGRkVDVCAqLworCWRlYnVnKEYxMDAsInR0cHR5Y21kIGlnbm9yaW5nIFNJR1RTVFAiLCIi LDApOworCXNpZ25hbChTSUdUU1RQLCBTSUdfSUdOKTsKKyNlbmRpZgkvKiBTSUdUU1RQICovCisj ZW5kaWYJLyogQ09NTUVOVCAqLworCisJcHR5X21ha2VfcmF3KHNsYXZlZmQpOwkJLyogUHV0IGl0 IGluIHJhd21vZGUgKi8KKworCWVycm5vID0gMDsKKwlpZiAoZHVwMihzbGF2ZWZkLCBTVERJTl9G SUxFTk8pICE9IFNURElOX0ZJTEVOTyB8fAorCSAgICBkdXAyKHNsYXZlZmQsIFNURE9VVF9GSUxF Tk8pICE9IFNURE9VVF9GSUxFTk8pIHsKKwkgICAgZGVidWcoRjEwMSwidHRwdHljbWQgbmV3IGZv cmsgZHVwMiBlcnJvciIsIiIsZXJybm8pOworCSAgICBwZXJyb3IoInR0cHR5Y21kIGR1cDIiKTsK KwkgICAgZXhpdCgxKTsKKwl9CisJZGVidWcoRjEwMCwidHRwdHljbWQgbmV3IGZvcmsgZHVwMiBv ayIsIiIsMCk7CisKKwkvKiBQYXJzZSBleHRlcm5hbCBwcm90b2NvbCBjb21tYW5kIGxpbmUgKi8K KwlxID0gY2tzcGxpdCgxLDAscyxOVUxMLCJcXCVbXSYkKy0vPSpeX0Ahe30vPD58LiN+J2A6Oz8i LDcsMCwwKTsKKwlpZiAoIXEpIHsKKwkgICAgZGVidWcoRjEwMCwidHRwdHljbWQgY2tzcGxpdCBm YWlsZWQiLCIiLDApOworCSAgICBleGl0KDEpOworCX0gZWxzZSB7CisJICAgIGludCBpLCBuOwor CSAgICBkZWJ1ZyhGMTAwLCJ0dHB0eWNtZCBja3NwbGl0IG9rIiwiIiwwKTsKKwkgICAgbiA9IHEt PmFfc2l6ZTsKKwkgICAgYXJncyA9IHEtPmFfaGVhZCArIDE7CisJICAgIGZvciAoaSA9IDA7IGkg PD0gbjsgaSsrKSB7CisJCWlmICghYXJnc1tpXSkgeworCQkgICAgYnJlYWs7CisJCX0gZWxzZSB7 CisJCSAgICAvKiBzb21ldGltZXMgY2tzcGxpdCgpIGRvZXNuJ3QgdGVybWluYXRlIHRoZSBsaXN0 ICovCisJCSAgICBpZiAoKGkgPT0gbikgJiYgYXJnc1tpXSkgeworCQkJaWYgKChpbnQpc3RybGVu KGFyZ3NbaV0pID09IDApCisJCQkgIG1ha2VzdHIoJihhcmdzW2ldKSxOVUxMKTsKKwkJICAgIH0K KwkJfQorCSAgICB9CSAgICAKKwl9CisjaWZkZWYgQ09NTUVOVAorLyoKKyAgUHV0dGluZyB0aGUg c2xhdmUgcHR5IGluIHJhd21vZGUgc2hvdWxkIG5vdCBiZSBuZWNlc3NhcnkgYmVjYXVzZSB0aGUK KyAgZXh0ZXJuYWwgcHJvdG9jb2wgcHJvZ3JhbSBpcyBzdXBwb3NlZCB0byBkbyB0aGF0IGl0c2Vs Zi4gIFlldCBkb2luZyB0aGlzCisgIGhlcmUgY3V0cyBkb3duIG9uIFptb2RlbSBiaW5hcnktZmls ZSB0cmFuc21pc3Npb24gZXJyb3JzIGJ5IDMwLTUwJSBidXQKKyAgc3RpbGwgZG9lc24ndCBlbGlt aW5hdGUgdGhlbS4KKyovCisJcHR5X21ha2VfcmF3KFNURElOX0ZJTEVOTyk7CisJcHR5X21ha2Vf cmF3KFNURE9VVF9GSUxFTk8pOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKworCWRlYnVnKEYxMDAs InR0cHR5Y21kIGV4ZWN2cCdpbmcgZXh0ZXJuYWwgcHJvdG9jb2wiLCIiLDApOworCWV4ZWN2cChh cmdzWzBdLGFyZ3MpOworCXBlcnJvcigiZXhlY3ZwIGZhaWxlZCIpOworCWRlYnVnKEYxMDEsInR0 cHR5Y21kIGV4ZWN2cCBmYWlsZWQiLCIiLGVycm5vKTsKKwljbG9zZShzbGF2ZWZkKTsKKwlleGl0 KDEpOworICAgIH0gCisgICAgLyogKHRoZXJlIGFyZSBiZXR0ZXIgd2F5cyB0byBkbyB0aGlzLi4u KSAqLworICAgIG1zbGVlcCgxMDAwKTsJCSAgLyogTWFrZSBwYXJlbnQgd2FpdCBmb3IgY2hpbGQg dG8gYmUgcmVhZHkgKi8KKyAgICBwdHlmZCA9IG1hc3RlcmZkOwkJCS8qIFdlIHRhbGsgdG8gdGhl IG1hc3RlciAqLworCisjZW5kaWYgLyogVVNFX0NLVVBUWV9DICovCisKKyAgICBkZWJ1ZyhGMTAx LCJ0dHB0eWNtZCBwdHlmZCIsIiIscHR5ZmQpOworICAgIGlmIChwdHlmZCA8IDApIHsKKwlwcmlu dGYoIj9GYWlsdXJlIHRvIGdldCBwdHlcbiIpOworCXJldHVybigtOSk7CisgICAgfQorICAgIGhh dmVfcHR5ID0gMTsJICAgICAgLyogV2UgaGF2ZSBhbiBvcGVuIHB0eSBvciB3ZSB3b3VsZG4ndCBo ZSBoZXJlICovCisKKyAgICBkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCBQVFlfUEJVRl9TSVpFIiwiIixQ VFlfUEJVRl9TSVpFKTsKKyAgICBkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCBQVFlfVEJVRl9TSVpFIiwi IixQVFlfVEJVRl9TSVpFKTsKKworI2lmZGVmIFBUWV9VU0VfTkRFTEFZCisgICAgLyogCisgICAg ICAgTk9URTogSWYgc2VsZWN0KCkgYW5kIGlvY3RsKHB0eWZkLEZJT05SRUFELCZuKSByZXR1cm4g dHJ1ZSBpbmRpY2F0aW9ucworICAgICAgIG9uIHRoZSBwdHksIHdlIGRvbid0IG5lZWQgbm9uYmxv Y2tpbmcgcmVhZHMuICBQZXJmb3JtYW5jZSBvZiBlaXRoZXIKKyAgICAgICBtZXRob2Qgc2VlbXMg dG8gYmUgYWJvdXQgdGhlIHNhbWUsIHNvIHVzZSB3aGF0ZXZlciB3b3Jrcy4KKyAgICAqLworICAg IGVycm5vID0gMDsKKyAgICB4ID0gZmNudGwocHR5ZmQsRl9TRVRGTCxmY250bChwdHlmZCxGX0dF VEZMLCAwKXxPX05ERUxBWSk7CisgICAgY2ttYWttc2cobXNnYnVmLDUwMCwKKwkgICAgICJ0dHB0 eWNtZCBzZXQgT19OREVMQVkgZXJybm89IiwKKwkgICAgIGNraXRvYShlcnJubyksCisJICAgICAi IGZjbnRsPSIsCisJICAgICBja2l0b2EoeCkpOworICAgIGRlYnVnKEYxMDAsbXNnYnVmLCIiLDAp OworI2VuZGlmIC8qIFBUWV9VU0VfTkRFTEFZICovCisKKyNpZmRlZiBDT01NRU5UCisvKiBOb3Qg bmVjZXNzYXJ5LCB0aGUgcHJvdG9jb2wgbW9kdWxlIGFscmVhZHkgZGlkIHRoaXMgKi8KKworI2lm ZGVmIFVTRV9DRk1BS0VSQVcKKyAgICBpZiAodGNnZXRhdHRyKHR0eWZkLCAmdGVybSkgPiAtMSkg eworCWNmbWFrZXJhdygmdGVybSk7CisJZGVidWcoRjEwMSwidHRwdHljbWQgbmV0IGNmbWFrZXJh dyBlcnJubyIsIiIsZXJybm8pOworCXggdGNzZXRhdHRyKHR0eWZkLCBUQ1NBTk9XLCAmdGVybSk7 CisJZGVidWcoRjEwMSwidHRwdHljbWQgbmV0IHRjc2V0YXR0ciIsIiIseCk7CisJZGVidWcoRjEw MSwidHRwdHljbWQgbmV0IHRjc2V0YXR0ciIsIiIsZXJybm8pOworICAgIH0KKyNlbHNlCisgICAg aWYgKGxvY2FsKQkJCQkvKiBQdXQgbmV0d29yayBjb25uZWN0aW9uIGluICovCisgICAgICB0dHBr dCh0dHNwZWVkLHR0Zmxvdyx0dHBydHkpOwkvKiAicGFja2V0IG1vZGUiLiAqLworICAgIGVsc2UK KyAgICAgIGNvbmJpbigoY2hhcillc2NjaHIpOwkJLyogT1IuLi4gcHR5X21ha2VfcmF3KDApICov CisjZW5kaWYgLyogVVNFX0NGTUFLRVJBVyAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKworI2lm ZGVmIFROQ09ERQorICAgIGlmIChpc190bikgeworICAgICAgZGVidWcoRjEwMSwiPDw8IHR0cHR5 Y21kIFRFTE9QVF9NRV9CSU5BUlkiLCIiLFRFTE9QVF9NRShURUxPUFRfQklOQVJZKSk7CisgICAg ICBkZWJ1ZyhGMTAxLCI8PDwgdHRwdHljbWQgVEVMT1BUX1VfQklOQVJZIiwiIixURUxPUFRfVShU RUxPUFRfQklOQVJZKSk7CisgICAgfQorI2VuZGlmIC8qIFROQ09ERSAqLworCisgICAgZGVidWco RjEwMSwidHRwdHljbWQgZW50ZXJpbmcgbG9vcCAtIHNlY29uZHNfdG9fd2FpdCIsIiIsc2Vjb25k c190b193YWl0KTsKKworICAgIHdoaWxlIChoYXZlX3B0eSB8fCBoYXZlX25ldCkgeworCUZEX1pF Uk8oJmluKTsJCQkvKiBJbml0aWFsaXplIHNlbGVjdCgpIHN0cnVjdHMgKi8KKwlGRF9aRVJPKCZv dXQpOworCUZEX1pFUk8oJmVycik7CQkJLyogKG5vdCB1c2VkIGJlY2F1c2UgdXNlbGVzcykgKi8K KwluZmRzID0gLTE7CisKKwlkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCBsb29wIHRvcCBoYXZlX3B0eSIs IiIsaGF2ZV9wdHkpOworCWRlYnVnKEYxMDEsInR0cHR5Y21kIGxvb3AgdG9wIGhhdmVfbmV0Iiwi IixoYXZlX25ldCk7CisKKwkvKiBQdHkgaXMgb3BlbiBhbmQgd2UgaGF2ZSByb29tIHRvIHJlYWQg ZnJvbSBpdD8gKi8KKwlpZiAoaGF2ZV9wdHkgJiYgcGJ1Zl9hdmFpbCA8IFBUWV9QQlVGX1NJWkUp IHsKKwkgICAgZGVidWcoRjEwMCwidHRwdHljbWQgRkRfU0VUIHB0eWZkIGluIiwiIiwwKTsKKyAg ICAgICAgICAgIEZEX1NFVChwdHlmZCwgJmluKTsKKwkgICAgbmZkcyA9IHB0eWZkOworICAgICAg ICB9CisJLyogTmV0d29yayBpcyBvcGVuIGFuZCB3ZSBoYXZlIHJvb20gdG8gcmVhZCBmcm9tIGl0 PyAqLworICAgICAgICBpZiAoaGF2ZV9uZXQgJiYgaGF2ZV9wdHkgJiYgdGJ1Zl9hdmFpbCA8IFBU WV9UQlVGX1NJWkUpIHsKKwkgICAgZGVidWcoRjEwMCwidHRwdHljbWQgRkRfU0VUIHR0eWZkIGlu IiwiIiwwKTsKKyAgICAgICAgICAgIEZEX1NFVCh0dHlmZCwgJmluKTsKKwkgICAgaWYgKHR0eWZk ID4gbmZkcykgbmZkcyA9IHR0eWZkOworICAgICAgICB9CisJLyogUHR5IGlzIG9wZW4gYW5kIHdl IGhhdmUgc3R1ZmYgdG8gd3JpdGUgdG8gaXQ/ICovCisgICAgICAgIGlmIChoYXZlX3B0eSAmJiB0 YnVmX2F2YWlsIC0gdGJ1Zl93cml0dGVuID4gMCkgeworCSAgICBkZWJ1ZyhGMTAwLCJ0dHB0eWNt ZCBGRF9TRVQgcHR5ZmQgb3V0IiwiIiwwKTsKKyAgICAgICAgICAgIEZEX1NFVCAocHR5ZmQsICZv dXQpOworCSAgICBpZiAocHR5ZmQgPiBuZmRzKSBuZmRzID0gcHR5ZmQ7CisgICAgICAgIH0KKwkv KiBOZXQgaXMgb3BlbiBhbmQgd2UgaGF2ZSBzdHVmZiB0byB3cml0ZSB0byBpdD8gKi8KKwlkZWJ1 ZyhGMTAxLCJ0dHB0eWNtZCBwYnVmX2F2YWlsLXBidWZfd3JpdHRlbiIsIiIsCisJICAgICAgcGJ1 Zl9hdmFpbCAtIHBidWZfd3JpdHRlbik7CisgICAgICAgIGlmIChoYXZlX25ldCAmJiBwYnVmX2F2 YWlsIC0gcGJ1Zl93cml0dGVuID4gMCkgeworCSAgICBkZWJ1ZyhGMTAwLCJ0dHB0eWNtZCBGRF9T RVQgdHR5ZmQgb3V0IiwiIiwwKTsKKyAgICAgICAgICAgIEZEX1NFVCAodHR5ZmQsICZvdXQpOwor CSAgICBpZiAodHR5ZmQgPiBuZmRzKSBuZmRzID0gdHR5ZmQ7CisgICAgICAgIH0KKwkvKiBXZSBk b24ndCB1c2UgZXJyIGJlY2F1c2UgaXQncyBub3QgcmVhbGx5IGZvciBlcnJvcnMsICovCisJLyog YnV0IGZvciBvdXQgb2YgYmFuZCBkYXRhIG9uIHRoZSBUQ1Agc29ja2V0LCB3aGljaCwgaWYgaXQg aXMgKi8KKwkvKiB0byBiZSBoYW5kbGVkIGF0IGFsbCwgaXMgaGFuZGxlZCBpbiB0aGUgdHQqKCkg cm91dGluZXMgKi8KKworCW5mZHMrKzsJCQkJLyogMC1iYXNlZCB0byAxLWJhc2VkICovCisJZGVi dWcoRjEwMSwidHRwdHljbWQgbmZkcyIsIiIsbmZkcyk7CisJaWYgKCFuZmRzKSB7CisJICAgIGRl YnVnKEYxMDAsInR0cHR5Y21kIE5PIEZEcyBzZXQgZm9yIHNlbGVjdCIsIiIsMCk7CisJICAgIGlm IChoYXZlX3B0eSkgeworCQkvKiBUaGlzIGlzIG5vdCByaWdodCAtLSBzbGVlcGluZyB3b24ndCBh Y2NvbXBsaXNoIGFueXRoaW5nICovCisJCWRlYnVnKEYxMDEsInR0cHR5Y21kIG1zbGVlcCIsIiIs MTAwKTsKKwkJbXNsZWVwKDEwMCk7CSAgICAKKwkgICAgfSBlbHNlIHsKKwkJZGVidWcoRjEwMCwi dHRwdHljbWQgbm8gcHR5IC0gcXVpdHRpbmcgbG9vcCIsIiIsMCk7CisJCWJyZWFrOworCSAgICB9 CisJfQorCWVycm5vID0gMDsKKworCWlmIChzZWNvbmRzX3RvX3dhaXQgPiAwTCkgewkvKiBUaW1l b3V0IGluIGNhc2Ugbm90aGluZyBoYXBwZW5zICovCisJICAgIHR2LnR2X3NlYyA9IHNlY29uZHNf dG9fd2FpdDsgLyogZm9yIGEgbG9uZyB0aW1lICovCisJICAgIHR2LnR2X3VzZWMgPSAwTDsJCQor CSAgICB0djIgPSAmdHY7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0djIgPSBOVUxM OworCX0KKwl4ID0gc2VsZWN0KG5mZHMsICZpbiwgJm91dCwgTlVMTCwgdHYyKTsKKwlkZWJ1ZyhG MTAxLCJ0dHB0eWNtZCBzZWxlY3QiLCIiLHgpOworCWlmICh4IDwgMCkgeworCSAgICBpZiAoZXJy bm8gPT0gRUlOVFIpCisJICAgICAgY29udGludWU7CisJICAgIGRlYnVnKEYxMDEsInR0cHR5Y21k IHNlbGVjdCBlcnJvciIsIiIsZXJybm8pOworCSAgICBicmVhazsKKwl9CisJaWYgKHggPT0gMCkg eworCSAgICBkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCArKysgc2VsZWN0IHRpbWVvdXQiLCIiLHNlY29u ZHNfdG9fd2FpdCk7IAorCSAgICBpZiAoaGF2ZV9wdHkpIHsKKwkJc3RhdHVzID0gcHR5X2dldF9z dGF0dXMocHR5ZmQscHR5X2ZvcmtfcGlkKTsKKwkJZGVidWcoRjEwMSwidHRwdHljbWQgcHR5X2dl dF9zdGF0dXMgQSIsIiIsc3RhdHVzKTsKKwkJaWYgKHN0YXR1cyA+IC0xKSBwZXhpdHN0YXQgPSBz dGF0dXM7CisJCWhhdmVfcHR5ID0gMDsKKwkgICAgfQorCSAgICBicmVhazsKKwl9CisJLyogV2Ug d2FudCB0byBoYW5kbGUgYW55IHBlbmRpbmcgd3JpdGVzIGZpcnN0IHRvIG1ha2Ugcm9vbSAqLwor CS8qIGZvciBuZXcgaW5jb21pbmcuICovCisKKwlpZiAoRkRfSVNTRVQodHR5ZmQsICZvdXQpKSB7 CS8qIENhbiB3cml0ZSB0byBuZXQ/ICovCisJICAgIENIQVIgKiBzOworCSAgICBzID0gcGJ1ZiAr IHBidWZfd3JpdHRlbjsJLyogQ3VycmVudCBzcG90IGZvciBzZW5kaW5nICovCisjaWZkZWYgVE5D T0RFCisJICAgIGlmIChpc190bikgewkJLyogdHRvbCgpIGRvZXNuJ3QgZG91YmxlIElBQ3MgKi8K KwkJQ0hBUiBjOwkJCS8qIFJld3JpdGUgc3RyaW5nIHdpdGggSUFDcyBkb3VibGVkICovCisJCWlu dCBpOworCQlzID0gcGJ1ZiArIHBidWZfd3JpdHRlbjsgLyogU291cmNlICovCisJCXggPSAwOwkJ IAkgLyogQ291bnQgKi8KKwkJZm9yIChpID0gMDsgaSA8IHBidWZfYXZhaWwgLSBwYnVmX3dyaXR0 ZW47IGkrKykgeworCQkgICAgYyA9IHNbaV07CQkvKiBOZXh0IGNoYXJhY3RlciAqLworCQkgICAg aWYgKGMgPT0gSUFDKSB7CS8qIElmIGl0J3MgSUFDICovCisJCQlkYnVmW3grK10gPSBjOwkvKiBw dXQgYW5vdGhlciBvbmUgKi8KKwkJCWRlYnVnKEYwMDAsIj4+PiBRVU9URUQgSUFDIiwiIixjKTsK KwkJICAgIH0gZWxzZSBpZiAoYyAhPSAweDBhICYmIG91dF9wcmV2ID09IDB4MGQpIHsJLyogQmFy ZSBDUiAqLworCQkJaWYgKCFURUxPUFRfTUUoVEVMT1BUX0JJTkFSWSkpIHsgLyogTlZUIHJ1bGUg Ki8KKwkJCSAgICBjID0gMHgwMDsKKwkJCSAgICBkYnVmW3grK10gPSBjOworCQkJICAgIGRlYnVn KEYwMDAsIj4+PiBDUi1OVUwiLCIiLGMpOworCQkJfQkJCQorCQkgICAgfQorCQkgICAgZGJ1Zlt4 KytdID0gYzsJLyogQ29weSBhbmQgY291bnQgaXQgKi8KKwkJICAgIGRlYnVnKEYwMDAsIj4+PiBj aGFyIixja2l0b2EoaW5fc3RhdGUpLGMpOworCQkgICAgb3V0X3ByZXYgPSBjOworCQl9CisJCXMg PSBkYnVmOwkJLyogTmV3IHNvdXJjZSAqLworCSAgICB9IGVsc2UKKyNlbmRpZiAvKiBUTkNPREUg Ki8KKwkgICAgICB4ID0gcGJ1Zl9hdmFpbCAtIHBidWZfd3JpdHRlbjsgLyogSG93IG11Y2ggdG8g c2VuZCAqLworCisJICAgIGRlYnVnKEYxMDEsInR0cHR5Y21kIGJ5dGVzIHRvIHNlbmQiLCIiLHgp OworCSAgICB4ID0gdHRvbChzLCB4KTsKKwkgICAgZGVidWcoRjEwMSwiPj4+IHR0b2wiLCIiLHgp OworCSAgICBpZiAoeCA8IDApIHsKKwkJbmV0X2VycisrOworCQlkZWJ1ZyhGMTExLCJ0dHB0eWNt ZCB0dG9sIGVycm9yIixja2l0b2EoeCksZXJybm8pOworCQl4ID0gMDsKKwkgICAgfQorCSAgICB3 cml0ZV9uZXRfYnl0ZXMgKz0geDsKKwkgICAgcGJ1Zl93cml0dGVuICs9IHg7CisJfQorCWlmIChG RF9JU1NFVChwdHlmZCwgJm91dCkpIHsJLyogQ2FuIHdyaXRlIHRvIHB0eT8gKi8KKwkgICAgZGVi dWcoRjEwMCwidHRwdHljbWQgRkRfSVNTRVQgcHR5ZmQgb3V0IiwiIiwwKTsKKwkgICAgZXJybm8g PSAwOworI2lmbmRlZiBDT01NRU5UCisJICAgIHggPSB3cml0ZShwdHlmZCx0YnVmICsgdGJ1Zl93 cml0dGVuLHRidWZfYXZhaWwgLSB0YnVmX3dyaXR0ZW4pOworI2Vsc2UKKwkgICAgLyogQnl0ZSBs b29wIHRvIHJ1bGUgb3V0IGRhdGEgb3ZlcnJ1bnMgaW4gdGhlIHB0eSAqLworCSAgICAvKiAoaXQg bWFrZXMgbm8gZGlmZmVyZW5jZSkgKi8KKwkgICAgeworCQljaGFyICpwID0gdGJ1Zit0YnVmX3dy aXR0ZW47CisJCWludCBuID0gdGJ1Zl9hdmFpbCAtIHRidWZfd3JpdHRlbjsKKwkJZm9yICh4ID0g MDsgeCA8IG47IHgrKykgeworCQkgICAgbXNsZWVwKDEwKTsKKwkJICAgIGlmICh3cml0ZShwdHlm ZCwmKHBbeF0pLDEpIDwgMCkKKwkJICAgICAgYnJlYWs7CisJCX0KKwkgICAgfQorI2VuZGlmIC8q IENPTU1FTlQgKi8KKwkgICAgZGVidWcoRjExMSwidHRwdHljbWQgcHR5ZmQgd3JpdGUiLGNraXRv YShlcnJubykseCk7CisJICAgIGlmICh4ID4gMCkgeworCQl0YnVmX3dyaXR0ZW4gKz0geDsKKwkJ d3JpdGVfcHR5X2J5dGVzICs9IHg7CisJICAgIH0gZWxzZSB7CisJCXggPSAwOworCQlwdHlfZXJy Kys7CisJCWlmIChwZXhpdHN0YXQgPCAwKSB7CisJCSAgICBzdGF0dXMgPSBwdHlfZ2V0X3N0YXR1 cyhwdHlmZCxwdHlfZm9ya19waWQpOworCQkgICAgZGVidWcoRjEwMSwidHRwdHljbWQgcHR5X2dl dF9zdGF0dXMgQiIsIiIsc3RhdHVzKTsKKwkJICAgIGlmIChzdGF0dXMgPiAtMSkgcGV4aXRzdGF0 ID0gc3RhdHVzOworCQkgICAgaGF2ZV9wdHkgPSAwOworCQl9CisJCWRlYnVnKEYxMDAsInR0cHR5 Y21kICsrKyBwdHlmZCB3cml0ZSBlcnJvciIsIiIsMCk7CisJICAgIH0KKwl9CisJaWYgKEZEX0lT U0VUKHR0eWZkLCAmaW4pKSB7CS8qIENhbiByZWFkIGZyb20gbmV0PyAqLworCSAgICB0c2V0Kys7 CisJICAgIGRlYnVnKEYxMDAsInR0cHR5Y21kIEZEX0lTU0VUIHR0eWZkIGluIiwiIiwwKTsKKwkg ICAgbiA9IGluX2NoaygxLHR0eWZkKTsKKwkgICAgZGVidWcoRjEwMSwidHRwdHljbWQgaW5fY2hr KHR0eWZkKSIsIiIsbik7IAorCSAgICBpZiAobiA8IDAgfHwgdHR5ZmQgPT0gLTEpIHsKKwkJZGVi dWcoRjEwMSwidHRwdHljbWQgKysrIHR0eWZkIGVycm5vIiwiIixlcnJubyk7CisJCW5ldF9lcnIr KzsKKwkgICAgfSBlbHNlIGlmIChuID4gMCkgeworCQlpZiAobiA+IFBUWV9UQlVGX1NJWkUgLSB0 YnVmX2F2YWlsKQorCQkgIG4gPSBQVFlfVEJVRl9TSVpFIC0gdGJ1Zl9hdmFpbDsKKwkJZGVidWco RjEwMSwidHRwdHljbWQgbmV0IHJlYWQgc2l6ZSBhZGp1c3RlZCIsIiIsbik7IAorCQlpZiAoeGxv Y2FsICYmIG5ldGNvbm4pIHsKKwkJICAgIC8qCisJCSAgICAgIFdlIGhhdmUgdG8gdXNlIGEgYnl0 ZSBsb29wIGhlcmUgYmVjYXVzZSB0dHhpbigpCisJCSAgICAgIGRvZXMgbm90IGRlY3J5cHQgb3Is IGZvciB0aGF0IG1hdHRlciwgaGFuZGxlIFRlbG5ldC4KKwkJICAgICovCisJCSAgICBpbnQgYzsK KwkJICAgIENIQVIgKiBwOworCQkgICAgcCA9IHRidWYgKyB0YnVmX2F2YWlsOworCQkgICAgZm9y ICh4ID0gMDsgeCA8IG47IHgrKykgeworCQkJaWYgKChjID0gdHRpbmMoMCkpIDwgMCkKKwkJCSAg YnJlYWs7CisJCQlpZiAoIWlzX3RuKSB7CS8qIE5vdCBUZWxuZXQgLSBrZWVwIGFsbCBieXRlcyAq LworCQkJICAgICpwKysgPSAoQ0hBUiljOworCQkJICAgIGRlYnVnKEYwMDAsIjw8PCBjaGFyIiwi IixjKTsKKyNpZmRlZiBUTkNPREUKKwkJCX0gZWxzZSB7CS8qIFRlbG5ldCAtIG11c3QgaGFuZGxl IElBQyBhbmQgTlZUICovCisJCQkgICAgZGVidWcoRjAwMCwiPDw8IGNoYXIiLGNraXRvYShpbl9z dGF0ZSksYyk7CisJCQkgICAgc3dpdGNoIChjKSB7CisJCQkgICAgICBjYXNlIDB4MDA6IC8qIE5V TCAqLworCQkJCWlmIChpbl9zdGF0ZSA9PSBIQVZFX0NSKSB7CisJCQkJICAgIGRlYnVnKEYwMDAs Ijw8PCBTS0lQIiwiIixjKTsKKwkJCQl9IGVsc2UgeworCQkJCSAgICAqcCsrID0gYzsKKwkJCQkg ICAgZGVidWcoRjAwMCwiPDw8IEtlZXAiLCIiLGMpOworCQkJCX0KKwkJCQlpbl9zdGF0ZSA9IDA7 CisJCQkJYnJlYWs7CisJCQkgICAgICBjYXNlIDB4MGQ6IC8qIENSICovCisJCQkJaWYgKCFURUxP UFRfVShURUxPUFRfQklOQVJZKSkKKwkJCQkgIGluX3N0YXRlID0gSEFWRV9DUjsKKwkJCQkqcCsr ID0gYzsKKwkJCQlkZWJ1ZyhGMDAwLCI8PDwgS2VlcCIsIiIsYyk7CisJCQkJYnJlYWs7CisjaWZk ZWYgQ09NTUVOVAorCQkJICAgICAgY2FzZSAweDBmOiAvKiBDdHJsLU8gKi8KKwkJCSAgICAgIGNh c2UgMHgxNjogLyogQ3RybC1WICovCisJCQkJKnArKyA9IDB4MTY7CisJCQkJKnArKyA9IGM7CisJ CQkJZGVidWcoRjAwMCwiPDw8IFFVT1QiLCIiLGMpOworCQkJCWJyZWFrOworI2VuZGlmIC8qIENP TU1FTlQgKi8KKwkJCSAgICAgIGNhc2UgMHhmZjogLyogSUFDICovCisJCQkJaWYgKGluX3N0YXRl ID09IEhBVkVfSUFDKSB7CisJCQkJICAgIGRlYnVnKEYwMDAsIjw8PCBLRUVQIiwiIixjKTsKKwkJ CQkgICAgKnArKyA9IGM7CisJCQkJICAgIGluX3N0YXRlID0gMDsKKwkJCQl9IGVsc2UgeworCQkJ CSAgICBkZWJ1ZyhGMDAwLCI8PDwgU0tJUCIsIiIsYyk7CisJCQkJICAgIGluX3N0YXRlID0gSEFW RV9JQUM7CisJCQkJfQorCQkJCWJyZWFrOworCQkJICAgICAgZGVmYXVsdDoJLyogQWxsIG90aGVy cyAqLworCQkJCWlmIChpbl9zdGF0ZSA9PSBIQVZFX0lBQykgeworI2lmZGVmIENPTU1FTlQKKy8q CisgIHRuX2Rvb3AoKSB3aWxsIGNvbnN1bWUgYW4gdW5rbm93biBudW1iZXIgb2YgYnl0ZXMgYW5k IHdlJ2xsIG92ZXJzaG9vdAorICB0aGUgZm9yLWxvb3AuICBUaGUgb25seSBUZWxuZXQgY29tbWFu ZCBJJ3ZlIGV2ZXIgc2VlbiBhcnJpdmUgaGVyZSBpcworICBhIERhdGEgTWFyaywgd2hpY2ggY29t ZXMgd2hlbiB0aGUgcmVtb3RlIHByb3RvY29sIGV4aXRzIGFuZCB0aGUgcmVtb3RlCisgIGpvYiBy ZXR1cm5zIHRvIGl0cyBzaGVsbCBwcm9tcHQuICBPbiB0aGUgYXNzdW1wdGlvbiBpdCdzIGEgMS1i eXRlIGNvbW1hbmQsCisgIHdlIGRvbid0IHdyaXRlIG91dCB0aGUgSUFDIG9yIHRoZSBjb21tYW5k LCBhbmQgd2UgY2xlYXIgdGhlIHN0YXRlLiAgSWYKKyAgd2UgY2FsbGVkIHRuX2Rvb3AoKSB3ZSdk IGhhdmUgbm8gd2F5IG9mIGtub3dpbmcgaG93IG1hbnkgYnl0ZXMgaXQgdG9vaworICBmcm9tIHRo ZSBpbnB1dCBzdHJlYW0uCisqLworCQkJCSAgICBpbnQgeHg7CisJCQkJICAgIHh4ID0gdG5fZG9v cCgoQ0hBUiljLGR1cGxleCx0dGluYyk7CisJCQkJICAgIGRlYnVnKEYxMTEsIjw8PCBET09QIixj a2N0b2EoYykseHgpOworI2Vsc2UKKwkJCQkgICAgZGVidWcoRjEwMSwiPDw8IERPT1AiLCIiLGMp OworI2VuZGlmCS8qIENPTU1FTlQgKi8KKwkJCQkgICAgaW5fc3RhdGUgPSAwOworCQkJCX0gZWxz ZSB7CisJCQkJICAgICpwKysgPSBjOworCQkJCSAgICBkZWJ1ZyhGMDAwLCI8PDwga2VlcCIsIiIs Yyk7CisJCQkJICAgIGluX3N0YXRlID0gMDsKKwkJCQl9CisJCQkgICAgfQorI2VuZGlmCS8qIFRO Q09ERSAqLworCQkJfQorCQkgICAgfQorCQkgICAgY2ttYWttc2cobXNnYnVmLDUwMCwKKwkJCSAg ICAgInR0cHR5Y21kIHJlYWQgbmV0IFt0dGluYyBsb29wXSBlcnJubz0iLAorCQkJICAgICBja2l0 b2EoZXJybm8pLAorCQkJICAgICAiIGNvdW50PSIsCisJCQkgICAgIGNraXRvYSh4KSk7CisJCSAg ICBkZWJ1ZyhGMTAwLG1zZ2J1ZiwiIiwwKTsKKwkJfSBlbHNlIHsKKwkJICAgIHggPSB0dHhpbihu LHRidWYrdGJ1Zl9hdmFpbCk7CisJCSAgICBkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCB0dHhpbiB4Iiwi Iix4KTsgCisJCX0KKworCQlpZiAoeCA8IDApIHsKKwkJICAgIGRlYnVnKEYxMDEsInR0cHR5Y21k IHJlYWQgbmV0IGVycm9yIiwiIix4KTsKKwkJICAgIG5ldF9lcnIrKzsKKwkJfQorCQl0YnVmX2F2 YWlsICs9IHg7CisJCXJlYWRfbmV0X2J5dGVzICs9IHg7CisJICAgIH0KKworCX0gZWxzZQorCSAg dG5vdHNldCsrOworCisJaWYgKEZEX0lTU0VUKHB0eWZkLCAmaW4pKSB7CS8qIFJlYWQgZnJvbSBw dHk/ICovCisJICAgIHBzZXQrKzsKKwkgICAgZGVidWcoRjEwMCwidHRwdHljbWQgRkRfSVNTRVQg cHR5ZmQgaW4iLCIiLDApOworI2lmZGVmIFBUWV9VU0VfTkRFTEFZCisJICAgIG4gPSBQVFlfUEJV Rl9TSVpFOworI2Vsc2UKKwkgICAgLyoKKwkgICAgICBUaGlzIGRvZXMgbm90IHdvcmsgb24gbm9u YmxvY2tpbmcgY2hhbm5lbHMKKwkgICAgICBvbiBjZXJ0YWluIHBsYXRmb3JtcyBzdWNoIGFzIE5l dEJTRC4KKwkgICAgKi8KKwkgICAgbiA9IHB0eV9jaGsocHR5ZmQpOworI2VuZGlmIC8qIFBUWV9V U0VfTkRFTEFZICovCisJICAgIGRlYnVnKEYxMDEsInR0cHR5Y21kIHB0eV9jaGsoKSBuIiwiIixu KTsgCisKKwkgICAgaWYgKG4gPCAwKQorCSAgICAgIG4gPSAwOworCSAgICBpZiAobiA+IDApIHsK KwkJaWYgKG4gPiBQVFlfUEJVRl9TSVpFIC0gcGJ1Zl9hdmFpbCkKKwkJICBuID0gUFRZX1BCVUZf U0laRSAtIHBidWZfYXZhaWw7CisJCWRlYnVnKEYxMDEsInR0cHR5Y21kIHB0eSByZWFkIHNpemUg YWRqdXN0ZWQiLCIiLG4pOyAKKwkJZXJybm8gPSAwOworCQl4ID0gcmVhZChwdHlmZCxwYnVmK3Bi dWZfYXZhaWwsbik7CisjaWZkZWYgREVCVUcKKwkJaWYgKGRlYmxvZykgeworCQkgICAgY2ttYWtt c2cobXNnYnVmLDUwMCwKKwkJCSAgICAgInR0cHR5Y21kIHJlYWQgcHR5IGVycm5vPSIsCisJCQkg ICAgIGNraXRvYShlcnJubyksCisJCQkgICAgICIgY291bnQ9IiwKKwkJCSAgICAgY2tpdG9hKHgp KTsKKwkJICAgIGRlYnVnKEYxMDAsbXNnYnVmLCIiLDApOworCQl9CisjZW5kaWYJLyogREVCVUcg Ki8KKworCQlpZiAoeCA8IDAgJiYgZXJybm8gPT0gRUFHQUlOKQorCQkgIHggPSAwOworCisJCWlm ICh4IDwgMCkgewkJLyogVGhpcyB3b3JrcyBvbiBTb2xhcmlzIGFuZCBMaW51eCAqLworCQkgICAg cHR5X2VycisrOwkJLyogYnV0IG5vdCBOZXRCU0QgKi8KKwkJICAgIGRlYnVnKEYxMDAsIlRFUk1J TkFUSU9OIFRFU1QgQSIsIiIsMCk7CisjaWZkZWYgQ09NTUVOVAorCQkgICAgaWYgKGVycm5vID09 IEVJTykKKwkJICAgICAgcmMgPSAxOworI2VuZGlmCS8qIENPTU1FTlQgKi8KKwkJICAgIGlmIChw ZXhpdHN0YXQgPCAwKSB7CisJCQlzdGF0dXMgPSBwdHlfZ2V0X3N0YXR1cyhwdHlmZCxwdHlfZm9y a19waWQpOworCQkJZGVidWcoRjEwMSwidHRwdHljbWQgcHR5X2dldF9zdGF0dXMgQyIsIiIsc3Rh dHVzKTsKKwkJCWlmIChzdGF0dXMgPiAtMSkgcGV4aXRzdGF0ID0gc3RhdHVzOworCQkgICAgfQor CQkgICAgaGF2ZV9wdHkgPSAwOworCQkgICAgeCA9IDA7CisJCX0KKwkJaWYgKHggPT0gMCAmJiAh cHR5X2VycikgeyAvKiBUaGlzIHdvcmtzIG9uIE5ldEJTRCBidXQgKi8KKwkJICAgIGRlYnVnKEYx MDAsIlRFUk1JTkFUSU9OIFRFU1QgQiIsIiIsMCk7CisJCSAgICBzdGF0dXMgPSBwZXhpdHN0YXQg PiAtMSA/IHBleGl0c3RhdCA6CisJCQlwdHlfZ2V0X3N0YXR1cyhwdHlmZCxwdHlfZm9ya19waWQp OworCQkgICAgZGVidWcoRjEwMSwidHRwdHljbWQgcHR5X2dldF9zdGF0dXMgRCIsIiIsc3RhdHVz KTsKKwkJICAgIGlmIChzdGF0dXMgPiAtMSkgeworCQkJcGV4aXRzdGF0ID0gc3RhdHVzOworCQkJ cHR5X2VycisrOworCQkJaGF2ZV9wdHkgPSAwOworCQkgICAgfSBlbHNlIHsJCS8qIFNlbGVjdCgp IGxpZWQgKi8KKwkJCXB0eV9lcnIgPSAwOwkvKiBwdHkgc3RpbGwgdGhlcmUgYnV0IGhhcyBub3Ro aW5nICovCisJCQltc2xlZXAoMTAwKTsJLyogc2xlZXAgYSBiaXQgKi8KKwkJICAgIH0KKwkJICAg IHggPSAwOworCQl9IAorCQkvKiBIb3BlZnVsbHkgdGhlIG5leHQgdHdvIGFyZSBubyBsb25nZXIg bmVlZGVkLi4uICovCisJCWlmICghcHR5X2VyciAmJiAoCisjaWZuZGVmIFBUWV9VU0VfTkRFTEFZ CisJCSAgICB4IDwgMSB8fCBlcnJubworI2Vsc2UKKwkJICAgIGVycm5vICE9IDAgJiYgZXJybm8g IT0gRUFHQUlOCisjZW5kaWYgLyogUFRZX1VTRV9OREVMQVkgKi8KKwkJICAgICkpIHsKKwkJICAg IGRlYnVnKEYxMDAsIlRFUk1JTkFUSU9OIFRFU1QgQyIsIiIsMCk7CisJCSAgICBwdHlfZXJyKys7 CisJCSAgICBkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCBTRVQgcHR5X2VyciIsIiIscHR5X2Vycik7CisJ CSAgICBpZiAoZXJybm8gPT0gRUlPKQkvKiBlcnJubyA9PSBFSU8gaXMgbGlrZSBFT0YgKi8KKwkJ ICAgICAgcmMgPSAxOworCQkgICAgaWYgKHggPCAwKQorCQkgICAgICB4ID0gMDsKKwkJfQorI2lm ZGVmIENPTU1FTlQKKyNpZmRlZiBERUJVRworCQlpZiAoZGVibG9nKSB7CisJCSAgICBwYnVmW3Bi dWZfYXZhaWwgKyB4XSA9ICdcMCc7CisJCSAgICBkZWJ1ZyhGMTExLCJ0dHB0eWNtZCBhZGRlZCB0 byBwdHkgYnVmZmVyIiwKKwkJCSAgcGJ1ZitwYnVmX2F2YWlsLHgpOworCQl9CisjZW5kaWYJLyog REVCVUcgKi8KKyNlbmRpZgkvKiBDT01NRU5UICovCisJCXBidWZfYXZhaWwgKz0geDsKKwkJcmVh ZF9wdHlfYnl0ZXMgKz0geDsKKwkgICAgfSBlbHNlIHsJCQkvKiBuID09IDAgd2l0aCBibG9ja2lu ZyByZWFkcyAqLworCQlkZWJ1ZyhGMTAwLAorCQkgICAgICAiUFRZIFJFQUQgUkVUVVJORUQgWkVS TyBCWVRFUyAtIFNIT1VMRCBOT1QgSEFQUEVOIiwKKwkJICAgICAgIiIsMCk7CisJICAgIH0KKwl9 IGVsc2UKKwkgIHBub3RzZXQrKzsKKworCS8qIElmIHdyaXRlcyBoYXZlIGNhdWdodCB1cCB0byBy ZWFkcywgcmVzZXQgdGhlIGJ1ZmZlcnMgKi8KKworCWlmIChwYnVmX3dyaXR0ZW4gPT0gcGJ1Zl9h dmFpbCkKKwkgIHBidWZfd3JpdHRlbiA9IHBidWZfYXZhaWwgPSAwOworCWlmICh0YnVmX3dyaXR0 ZW4gPT0gdGJ1Zl9hdmFpbCkKKwkgIHRidWZfd3JpdHRlbiA9IHRidWZfYXZhaWwgPSAwOworCisJ LyogU2VlIGlmIHdlIGNhbiBleGl0ICovCisKKwl4MSA9IHBidWZfYXZhaWwgLSBwYnVmX3dyaXR0 ZW47IAorCXgyID0gdGJ1Zl9hdmFpbCAtIHRidWZfd3JpdHRlbjsKKworCWRlYnVnKEYxMDEsInR0 cHR5Y21kIHB0eV9lcnIgTE9PUCBFWElUIFRFU1QgcHR5X2VyciIsIiIscHR5X2Vycik7CisJZGVi dWcoRjEwMSwidHRwdHljbWQgcHR5X2VyciBMT09QIEVYSVQgVEVTVCB4MSBbd3JpdGUgdG8gbmV0 XSIsIiIseDEpOworCWRlYnVnKEYxMDEsInR0cHR5Y21kIHB0eV9lcnIgTE9PUCBFWElUIFRFU1Qg eDIgW3dyaXRlIHRvIHB0eV0iLCIiLHgyKTsKKwlkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCBwdHlfZXJy IExPT1AgRVhJVCBURVNUIHJjIiwiIixyYyk7CisJZGVidWcoRjEwMSwidHRwdHljbWQgcHR5X2Vy ciBMT09QIEVYSVQgVEVTVCBzdGF0dXMiLCIiLHN0YXR1cyk7CisJZGVidWcoRjEwMSwidHRwdHlj bWQgcHR5X2VyciBMT09QIEVYSVQgVEVTVCBwZXhpdHN0YXQiLCIiLHBleGl0c3RhdCk7CisKKwlp ZiAobmV0X2VycikgewkJCS8qIE5ldCBlcnJvcj8gKi8KKwkgICAgZGVidWcoRjEwMSwidHRwdHlj bWQgbmV0X2VyciBMT09QIEVYSVQgVEVTVCBuZXRfZXJyIiwiIixuZXRfZXJyKTsKKwkgICAgaWYg KGhhdmVfbmV0KSB7CisJCWlmIChsb2NhbCkgeworCQkgICAgdHRjbG9zKDApOworCQkgICAgcHJp bnRmKCI/Q29ubmVjdGlvbiBjbG9zZWRcbiIpOworCQl9CisJCWhhdmVfbmV0ID0gMDsKKwkgICAg fQorCSAgICBkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCBuZXRfZXJyIExPT1AgRVhJVCBURVNUIHgxIiwi Iix4MSk7CisJICAgIGlmICh4MSA9PSAwKQorCSAgICAgIGJyZWFrOworCX0KKwlpZiAocHR5X2Vy cikgewkJCS8qIFB0eSBlcnJvcj8gKi8KKwkgICAgaWYgKGhhdmVfcHR5KSB7CisJCWlmIChwZXhp dHN0YXQgPCAwKSB7CQkKKwkJICAgIHN0YXR1cyA9IHB0eV9nZXRfc3RhdHVzKHB0eWZkLHB0eV9m b3JrX3BpZCk7CisJCSAgICBkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCBwdHlfZ2V0X3N0YXR1cyBFIiwi IixzdGF0dXMpOworCQkgICAgaWYgKHN0YXR1cyA+IC0xKSBwZXhpdHN0YXQgPSBzdGF0dXM7CisJ CX0KKwkJaGF2ZV9wdHkgPSAwOworCSAgICB9CisJICAgIGlmICh4MSA9PSAwICYmIHgyID09IDAp IHsJLyogSWYgYnVmZmVycyBhcmUgY2F1Z2h0IHVwICovCisJCXJjID0gMTsJCQkvKiBzZXQgcHJl bGltaW5hcnkgcmV0dXJuIHRvIHN1Y2Nlc3MgKi8KKwkJZGVidWcoRjEwMSwidHRwdHljbWQgcHR5 X2VyciBMT09QIEVYSVQgVEVTVCByYyAyIiwiIixyYyk7CisJCWJyZWFrOwkJCS8qIGFuZCBleGl0 IHRoZSBsb29wICovCisJICAgIH0KKwl9CisgICAgfQorICAgIGRlYnVnKEYxMDEsInR0cHR5Y21k ICsrKyBoYXZlX3B0eSIsIiIsaGF2ZV9wdHkpOworICAgIGlmIChoYXZlX3B0eSkgewkJCS8qIElu IGNhc2Ugc2VsZWN0KCkgZmFpbGVkICovCisjaWZkZWYgVVNFX0NLVVBUWV9DCisJZW5kX3B0eSgp OworCWNsb3NlKHB0eWZkKTsKKyNlbHNlCisJY2xvc2Uoc2xhdmVmZCk7CisJY2xvc2UobWFzdGVy ZmQpOworI2VuZGlmIC8qIFVTRV9DS1VQVFlfQyAqLworICAgIH0KKyAgICBwdHlfbWFzdGVyX2Zk ID0gLTE7CisgICAgZGVidWcoRjEwMSwidHRwdHljbWQgKysrIHBleGl0c3RhdCIsIiIscGV4aXRz dGF0KTsKKyAgICBpZiAocGV4aXRzdGF0IDwgMCkgewkJLyogVHJ5IG9uZSBsYXN0IHRpbWUgdG8g Z2V0IHN0YXR1cyAqLworCXN0YXR1cyA9IHB0eV9nZXRfc3RhdHVzKHB0eWZkLHB0eV9mb3JrX3Bp ZCk7CisJZGVidWcoRjEwMSwidHRwdHljbWQgcHR5X2dldF9zdGF0dXMgRiIsIiIsc3RhdHVzKTsK KwlpZiAoc3RhdHVzID4gLTEpIHBleGl0c3RhdCA9IHN0YXR1czsKKyAgICB9CisgICAgZGVidWco RjEwMSwidHRwdHljbWQgKysrIGZpbmFsIHBleGl0c3RhdCIsIiIscGV4aXRzdGF0KTsKKyAgICBp ZiAoZGVibG9nKSB7CQkJLyogU3RhdHMgZm9yIGRlYnVnIGxvZyAqLworCWRlYnVnKEYxMDEsInR0 cHR5Y21kICsrKyBwc2V0CSIsIiIscHNldCk7CisJZGVidWcoRjEwMSwidHRwdHljbWQgKysrIHBu b3RzZXQiLCIiLHBub3RzZXQpOworCWRlYnVnKEYxMDEsInR0cHR5Y21kICsrKyB0c2V0CSIsIiIs dHNldCk7CisJZGVidWcoRjEwMSwidHRwdHljbWQgKysrIHRub3RzZXQiLCIiLHRub3RzZXQpOwor CisJZGVidWcoRjEwMSwidHRwdHljbWQgKysrICByZWFkX3B0eV9ieXRlcyIsIiIscmVhZF9wdHlf Ynl0ZXMpOworCWRlYnVnKEYxMDEsInR0cHR5Y21kICsrKyB3cml0ZV9uZXRfYnl0ZXMiLCIiLHdy aXRlX25ldF9ieXRlcyk7CisJZGVidWcoRjEwMSwidHRwdHljbWQgKysrICByZWFkX25ldF9ieXRl cyIsIiIscmVhZF9uZXRfYnl0ZXMpOworCWRlYnVnKEYxMDEsInR0cHR5Y21kICsrKyB3cml0ZV9w dHlfYnl0ZXMiLCIiLHdyaXRlX3B0eV9ieXRlcyk7CisgICAgfQorLyoKKyAgSWYgd2UgZ290IHRo ZSBleHRlcm5hbCBwcm90b2NvbCdzIGV4aXQgc3RhdHVzIGZyb20gd2FpdHBpZCgpLCB3ZSB1c2Ug dGhhdAorICB0byBzZXQgb3VyIHJldHVybiBjb2RlLiAgSWYgbm90LCB3ZSBmYWxsIGJhY2sgb24g d2hhdGV2ZXIgcmMgd2FzIHByZXZpb3VzbHkKKyAgc2V0IHRvLCBuYW1lbHkgMSAoc3VjY2Vzcykg aWYgdGhlIHB0eSBmb3JrIHNlZW1lZCB0byB0ZXJtaW5hdGUsIDAgb3RoZXJ3aXNlLgorKi8KKyAg ICBpZiAoc2F2ZV9zaWdjaGxkKSB7CQkJLyogUmVzdG9yZSB0aGlzIGlmIHdlIGNoYW5nZWQgaXQg Ki8KKwkoVk9JRCkgc2lnbmFsKFNJR0NITEQsc2F2ZV9zaWdjaGxkKTsKKwlzYXZlX3NpZ2NobGQg PSBOVUxMOworICAgIH0KKyAgICBtc2xlZXAoNTAwKTsKKyAgICB4ID0ga2lsbChwdHlfZm9ya19w aWQsU0lHSFVQKTsJLyogSW4gY2FzZSBpdCdzIHN0aWxsIHRoZXJlICovCisgICAgcHR5X2Zvcmtf cGlkID0gLTE7CisgICAgZGVidWcoRjEwMSwidHRwdHljbWQgZm9yayBraWxsIFNJR0hVUCIsIiIs eCk7CisgICAgaWYgKHBleGl0c3RhdCA+IC0xKQorICAgICAgcmMgPSAocGV4aXRzdGF0ID09IDAg PyAxIDogMCk7CisgICAgZGVidWcoRjEwMSwidHRwdHljbWQgKysrIHJjIiwiIixyYyk7CisgICAg aWYgKCFsb2NhbCkgewkJCS8qIElmIGluIHJlbW90ZSBtb2RlICovCisJY29ucmVzKCk7CQkJLyog cmVzdG9yZSBjb25zb2xlIHRvIENCUkVBSyBtb2RlICovCisJY29uY2IoKGNoYXIpZXNjY2hyKTsK KyAgICB9CisgICAgcmV0dXJuKHJjKTsKK30KKyNlbmRpZgkvKiBORVRQVFkgKi8KKyNlbmRpZgkv KiBTRUxFQ1QgKi8KKworLyogVCBUIFIgVSBOIEMgTSBEICAtLSAgUmVkaXJlY3QgYW4gZXh0ZXJu YWwgY29tbWFuZCBvdmVyIHRoZSBjb25uZWN0aW9uLiAqLworCisvKgorICBUVFJVTkNNRCBpcyB0 aGUgcm91dGluZSB0aGF0IHdhcyBvcmlnaW5hbGx5IHVzZWQgZm9yIHJ1bm5pbmcgZXh0ZXJuYWwK KyAgcHJvdG9jb2xzLiAgSXQgaXMgdmVyeSBzaW1wbGUgYW5kIHdvcmtzIGZpbmUgcHJvdmlkZWQg KGEpIHRoZSBjb25uZWN0aW9uCisgIGlzIG5vdCBlbmNyeXB0ZWQsIGFuZCAoYikgdGhlIGV4dGVy bmFsIHByb3RvY29sIHVzZXMgc3RhbmRhcmQgaS9vCisgIChmaWxlIGRlc2NyaXB0b3JzIDAgYW5k IDEpIGZvciBmaWxlIHRyYW5zZmVyLgorKi8KKworaW50Cit0dHJ1bmNtZChzKSBjaGFyICpzOyB7 CisgICAgUElEX1QgcGlkOwkJCQkvKiBwaWQgb2YgbG93ZXIgZm9yayAqLworICAgIGludCB3c3Rh dDsJCQkJLyogZm9yIHdhaXQoKSAqLworICAgIGludCB4OworICAgIGludCBzdGF0dXNwOworCisg ICAgaWYgKHR0eWZkID09IC0xKSB7CisJcHJpbnRmKCI/U29ycnksIGRldmljZSBpcyBub3Qgb3Bl blxuIik7CisJcmV0dXJuKDApOworICAgIH0KKyAgICBpZiAobm9wdXNoKSB7CisJZGVidWcoRjEw MCwidHRydW5jbWQgZmFpbDogbm9wdXNoIiwiIiwwKTsKKwlyZXR1cm4oMCk7CisgICAgfQorCisj aWZkZWYgTkVUUFRZCisvKioqKioqKioqKioqKioqCisgIEl0IG1pZ2h0IGFsc28gYmUgbmVjZXNz YXJ5IHRvIHVzZSB0aGUgcHR5IHJvdXRpbmUgZm9yIG90aGVyIHJlYXNvbnMsCisgIGUuZy4gYmVj YXVzZSB0aGUgZXh0ZXJuYWwgcHJvZ3JhbSBkb2VzIG5vdCB1c2Ugc3RkaW8uCisqLworI2lmZGVm IE5FVENPTk4KKy8qCisgIElmIHdlIGhhdmUgYSBuZXR3b3JrIGNvbm5lY3Rpb24gd2UgdXNlIGEg ZGlmZmVyZW50IHJvdXRpbmUgYmVjYXVzZQorICAoYSkgaWYgdGhlIGNvbm5lY3Rpb24gaXMgZW5j cnlwdGVkLCB0aGUgbWVjaGFuaXNtIHVzZWQgaGVyZSBjYW4ndCBkZWFsCisgIHdpdGggaXQ7IGFu ZCAoYikgaXQgd29uJ3QgaGFuZGxlIGFueSBuZXR3b3JrIHByb3RvY29scyBlaXRoZXIsIGUuZy4K KyAgVGVsbmV0LCBSbG9naW4sIEs1IFUtdG8tVSwgZXRjLiAgSG93ZXZlciwgdGhpcyByb3V0aW5l IHdvcmtzIG11Y2gKKyAgYmV0dGVyIChmYXN0ZXIsIG1vcmUgdHJhbnNwYXJlbnQpIG9uIHNlcmlh bCBjb25uZWN0aW9ucyBhbmQgd2hlbgorICBDLUtlcm1pdCBpcyBpbiByZW1vdGUgbW9kZSAoaS5l LiBpcyBvbiB0aGUgZmFyIGVuZCkuCisqLworICAgIC8qIEZvciB0ZXN0aW5nIGFsd2F5cyB1c2Ug dGhpcyAqLworICAgIGlmIChuZXRjb25uKQorICAgICAgcmV0dXJuKHR0cHR5Y21kKHMpKTsKKyNl bmRpZiAvKiBORVRDT05OICovCisKKy8qKioqKioqKioqKioqKiovCisjZWxzZSAgLyogTkVUUFRZ ICovCisgICAgaWYgKHR0X2lzX3NlY3VyZSgpKSB7CisJcHJpbnRmKCI/U29ycnksIFwKK2V4dGVy bmFsIHByb3RvY29scyBvdmVyIHNlY3VyZSBjb25uZWN0aW9ucyBub3Qgc3VwcG9ydGVkIGluIHRo aXMgT1MuXG4iCisgICAgICAgICAgICAgICk7CisgICAgICAgIHJldHVybigwKTsKKyAgICB9Cisj ZW5kaWYJLyogTkVUUFRZICovCisKKyAgICBjb25yZXMoKTsJCQkJLyogTWFrZSBjb25zb2xlIG5v cm1hbCAgKi8KKyAgICBwZXhpdHN0YXQgPSAtNDsKKyAgICBpZiAoKHBpZCA9IGZvcmsoKSkgPT0g MCkgewkJLyogTWFrZSBhIGNoaWxkIGZvcmsgKi8KKwlpZiAocHJpdl9jYW4oKSkJCQkvKiBDaGls ZDogdHVybiBvZmYgcHJpdnMuICovCisJICBleGl0KDEpOworCWR1cDIodHR5ZmQsIDApOwkJCS8q IEdpdmUgc3RkaW4vb3V0IHRvIHRoZSBsaW5lICovCisJZHVwMih0dHlmZCwgMSk7CisJeCA9IHN5 c3RlbShzKTsKKwlkZWJ1ZyhGMTAxLCJ0dHJ1bmNtZCBzeXN0ZW0iLHMseCk7CisJX2V4aXQoeCA/ IEJBRF9FWElUIDogMCk7CisgICAgfSBlbHNlIHsKKwlTSUdUWVAgKCppc3RhdCkoKSwgKCpxc3Rh dCkoKTsKKwlpZiAocGlkID09IChQSURfVCkgLTEpCQkvKiBmb3JrKCkgZmFpbGVkPyAqLworCSAg cmV0dXJuKDApOworCWlzdGF0ID0gc2lnbmFsKFNJR0lOVCxTSUdfSUdOKTsgLyogTGV0IHRoZSBm b3JrIGhhbmRsZSBrZXlib2FyZCAqLworCXFzdGF0ID0gc2lnbmFsKFNJR1FVSVQsU0lHX0lHTik7 IC8qIGludGVycnVwdHMgaXRzZWxmLi4uICovCisKKyNpZmRlZiBDT01NRU5UCisgICAgCXdoaWxl ICgoKHdzdGF0ID0gd2FpdCgmc3RhdHVzcCkpICE9IHBpZCkgJiYgKHdzdGF0ICE9IC0xKSkgOwor I2Vsc2UgIC8qIE5vdCBDT01NRU5UICovCisgICAgCXdoaWxlICgxKSB7CisJICAgIHdzdGF0ID0g d2FpdCgmc3RhdHVzcCk7CisJICAgIGRlYnVnKEYxMDEsInR0cnVuY21kIHdhaXQiLCIiLHdzdGF0 KTsKKwkgICAgaWYgKHdzdGF0ID09IHBpZCB8fCB3c3RhdCA9PSAtMSkKKwkgICAgICBicmVhazsK Kwl9CisjZW5kaWYgLyogQ09NTUVOVCAqLworCisJcGV4aXRzdGF0ID0gKHN0YXR1c3AgJiAweGZm KSA/IHN0YXR1c3AgOiBzdGF0dXNwID4+IDg7CisJZGVidWcoRjEwMSwidHRydW5jbWQgd2FpdCBz dGF0dXNwIiwiIixzdGF0dXNwKTsKKwlkZWJ1ZyhGMTAxLCJ0dHJ1bmNtZCB3YWl0IHBleGl0c3Rh dCIsIiIscGV4aXRzdGF0KTsKKwlzaWduYWwoU0lHSU5ULGlzdGF0KTsJCS8qIFJlc3RvcmUgaW50 ZXJydXB0cyAqLworCXNpZ25hbChTSUdRVUlULHFzdGF0KTsKKyAgICB9CisgICAgY29uY2IoKGNo YXIpZXNjY2hyKTsJCS8qIFJlc3RvcmUgY29uc29sZSB0byBDQlJFQUsgbW9kZSAqLworICAgIHJl dHVybihzdGF0dXNwID09IDAgPyAxIDogMCk7Cit9CisjZW5kaWYJLyogQ0tfUkVESVIgKi8KKwor c3RydWN0IHRtICoKKyNpZmRlZiBDS19BTlNJQworY21kYXRlMnRtKGNoYXIgKiBkYXRlLCBpbnQg Z210KSAgICAgICAgIC8qIGRhdGUgYXMgInl5eXltbWRkIGhoOm1tOnNzIiAqLworI2Vsc2UKK2Nt ZGF0ZTJ0bShkYXRlLGdtdCkgY2hhciAqIGRhdGU7IGludCBnbXQ7CisjZW5kaWYKK3sKKyAgICAv KiBkYXRlIGFzICJ5eXl5bW1kZCBoaDptbTpzcyIgKi8KKyAgICBzdGF0aWMgc3RydWN0IHRtIF90 bTsKKyAgICB0aW1lX3Qgbm93OworCisgICAgaWYgKHN0cmxlbihkYXRlKSAhPSAxNyB8fAorCWRh dGVbOF0gIT0gJyAnIHx8CisJZGF0ZVsxMV0gIT0gJzonIHx8CisJZGF0ZVsxNF0gIT0gJzonKQor ICAgICAgcmV0dXJuKE5VTEwpOworCisgICAgdGltZSgmbm93KTsKKyAgICBpZiAoZ210KQorICAg ICAgX3RtID0gKmdtdGltZSgmbm93KTsKKyAgICBlbHNlCisgICAgICBfdG0gPSAqbG9jYWx0aW1l KCZub3cpOworICAgIF90bS50bV95ZWFyID0gKGRhdGVbMF0tJzAnKSoxMDAwICsgKGRhdGVbMV0t JzAnKSoxMDAgKworICAgICAgICAgICAgICAgICAgKGRhdGVbMl0tJzAnKSoxMCAgICsgKGRhdGVb M10tJzAnKS0xOTAwOworICAgIF90bS50bV9tb24gID0gKGRhdGVbNF0tJzAnKSoxMCAgICsgKGRh dGVbNV0tJzAnKS0xOworICAgIF90bS50bV9tZGF5ID0gKGRhdGVbNl0tJzAnKSoxMCAgICsgKGRh dGVbN10tJzAnKTsKKyAgICBfdG0udG1faG91ciA9IChkYXRlWzldLScwJykqMTAgICArIChkYXRl WzEwXS0nMCcpOworICAgIF90bS50bV9taW4gID0gKGRhdGVbMTJdLScwJykqMTAgICsgKGRhdGVb MTNdLScwJyk7CisgICAgX3RtLnRtX3NlYyAgPSAoZGF0ZVsxNV0tJzAnKSoxMCAgKyAoZGF0ZVsx Nl0tJzAnKTsKKworICAgIC8qIFNob3VsZCB3ZSBzZXQgX3RtLnRtX2lzZHN0IHRvIC0xIGhlcmU/ ICovCisKKyAgICBfdG0udG1fd2RheSA9IDA7CisgICAgX3RtLnRtX3lkYXkgPSAwOworCisgICAg cmV0dXJuKCZfdG0pOworfQorCisjaWZkZWYgT1hPUworI3VuZGVmIGtpbGwKKyNlbmRpZiAvKiBP WE9TICovCisKKyNpZmRlZiBPWE9TCitpbnQKK3ByaXZfa2lsbChwaWQsIHNpZykgaW50IHBpZCwg c2lnOyB7CisgICAgaW50CWk7CisKKyAgICBpZiAocHJpdl9vbigpKQorCWRlYnVnKEYxMDAsInBy aXZfa2lsbCBwcml2X29uIGZhaWxlZCIsIiIsMCk7CisgICAgaSA9IGtpbGwocGlkLCBzaWcpOwor ICAgIGlmIChwcml2X29mZigpKQorCWRlYnVnKEYxMDAsInByaXZfa2lsbCBwcml2X29mZiBmYWls ZWQiLCIiLDApOworICAgIHJldHVybihpKTsKK30KKyNlbmRpZiAvKiBPWE9TICovCisKKyNpZmRl ZiBCRU9TT1JCRUJPWAorLyogI2lmZGVmIEJFX0RSXzcgKi8KKy8qCisgIGFsYXJtKCkgZnVuY3Rp b24gbm90IHN1cHBsaWVkIHdpdGggQmUgT1MgRFI3IC0gdGhpcyBvbmUgY29udHJpYnV0ZWQgYnkK KyAgTmVhbCBQLiBNdXJwaHkuCisqLworCisvKgorICBUaGlzIHNob3VsZCBtaW1pYyB0aGUgVU5J WC9QT1NJWCBhbGFybSgpIGZ1bmN0aW9uIHdlbGwgZW5vdWdoLCB3aXRoIHRoZQorICBjYXZlYXQg dGhhdCBvbmUncyBTSUdBTFJNIGhhbmRsZXIgbXVzdCBjYWxsIGFsYXJtX2V4cGlyZWQoKSB0byBj bGVhbiB1cCB2YXJzCisgIGFuZCB3YWl0IGZvciB0aGUgYWxhcm0gdGhyZWFkIHRvIGZpbmlzaC4K KyovCit1bnNpZ25lZCBpbnQKK2FsYXJtKHVuc2lnbmVkIGludCBzZWNvbmRzKSB7CisgICAgbG9u ZyB0aW1lX2xlZnQgPSAwOworCisvKiBJZiBhbiBhbGFybSBpcyBhY3RpdmUsIHR1cm4gaXQgb2Zm LCBzYXZpbmcgdGhlIHVudXNlZCB0aW1lICovCisgICAgaWYgKGFsYXJtX3RocmVhZCAhPSAtMSkg eworICAgICAgICAvKiBXZSdsbCBiZSBnZW5lcm91cyBhbmQgY291bnQgcGFydGlhbCBzZWNvbmRz IGFzIHdob2xlIHNlY29uZHMuICovCisgICAgICAgIHRpbWVfbGVmdCA9IGFsYXJtX3N0cnVjdC50 aW1lIC0KKwkgICgoc3lzdGVtX3RpbWUoKSAtIHRpbWVfc3RhcnRlZCkgLyAxMDAwMDAwLjApOwor CisgICAgICAgIC8qIEtpbGwgdGhlIGFsYXJtIHRocmVhZCAqLworICAgICAgICBraWxsX3RocmVh ZCAoYWxhcm1fdGhyZWFkKTsKKworICAgICAgICAvKiBXZSBuZWVkIHRvIGNsZWFuIHVwIGFzIHRo b3VnaCB0aGUgYWxhcm0gb2NjdXJlZC4gKi8KKyAgICAgICAgdGltZV9zdGFydGVkID0gMDsKKyAg ICAgICAgYWxhcm1fc3RydWN0LnRocmVhZCA9IC0xOworICAgICAgICBhbGFybV9zdHJ1Y3QudGlt ZSA9IDA7CisgICAgICAgIGFsYXJtX2V4cGlyZWQoKTsKKyAgICB9CisKKy8qIFNldCBhIG5ldyBh bGFybSBjbG9jaywgaWYgcmVxdWVzdGVkLiAqLworICAgIGlmIChzZWNvbmRzID4gMCkgeworICAg ICAgICBhbGFybV9zdHJ1Y3QudGhyZWFkID0gZmluZF90aHJlYWQoTlVMTCk7CisgICAgICAgIGFs YXJtX3N0cnVjdC50aW1lID0gc2Vjb25kczsKKyAgICAgICAgdGltZV9zdGFydGVkID0gc3lzdGVt X3RpbWUoKTsKKyAgICAgICAgYWxhcm1fdGhyZWFkID0gc3Bhd25fdGhyZWFkIChkb19hbGFybSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWxhcm1fdGhyZWFkIiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCX05PUk1BTF9QUklPUklUWSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKSAmYWxhcm1fc3RydWN0 CisJCQkJICAgICApOworICAgICAgICByZXN1bWVfdGhyZWFkIChhbGFybV90aHJlYWQpOworICAg IH0KKworLyogTm93IHJldHVybiBbdW51c2VkIHRpbWUgfCAwXSAqLworICAgIHJldHVybiAoKHVu c2lnbmVkIGludCkgdGltZV9sZWZ0KTsKK30KKworLyoKKyAgVGhpcyBmdW5jdGlvbiBpcyB0aGUg ZGVwYXJ0dXJlIGZyb20gVU5JWC9QT1NJWCBhbGFybSBoYW5kbGluZy4gSW4gdGhlIGNhc2UKKyAg b2YgQmUncyBtaXNzaW5nIGFsYXJtKCkgZnVuY3Rpb24sIHRoaXMgc3R1ZmYgbmVlZHMgdG8gYmUg ZG9uZSBpbiB0aGUgU0lHQUxSTQorICBoYW5kbGVyLiBXaGVuIEJlIGltcGxlbWVudHMgYWxhcm0o KSwgdGhpcyBmdW5jdGlvbiBjYWxsIGNhbiBiZSBlbGltaW5hdGVkCisgIGZyb20gdXNlcidzIFNJ R0FMUk0gc2lnbmFsIGhhbmRsZXJzLgorKi8KKwordm9pZAorYWxhcm1fZXhwaXJlZCh2b2lkKSB7 CisgICAgbG9uZyByZXRfdmFsOworCisgICAgaWYgKGFsYXJtX3RocmVhZCAhPSAtMSkgeworICAg ICAgICB3YWl0X2Zvcl90aHJlYWQgKGFsYXJtX3RocmVhZCwgJnJldF92YWwpOworICAgICAgICBh bGFybV90aHJlYWQgPSAtMTsKKyAgICB9Cit9CisKKy8qCisgIFRoaXMgaXMgdGhlIGZ1bmN0aW9u IHRoYXQgc25vb3plcyB0aGUgcmVxdWlzaXRlIG51bWJlciBvZiBzZWNvbmRzIGFuZCB0aGVuCisg IFNJR0FMUk1zIHRoZSBjYWxsaW5nIHRocmVhZC4gTm90ZSB0aGF0IGtpbGwoKSB3YW50cyBhIHBp ZF90IGFyZywgd2hpbHN0IEJlCisgIHVzZXMgdGhyZWFkX2lkOyBjdXJyZW50bHkgdGhleSBhcmUg Ym90aCB0eXBkZWYnZWQgYXMgbG9uZywgYnV0IEknbGwgZG8gdGhlCisgIGNhc3QgYW55d2F5LiBU aGlzIGZ1bmN0aW9uIGlzIHJ1biBpbiBhIHNlcGFyYXRlIHRocmVhZC4KKyovCisKK2xvbmcKK2Rv X2FsYXJtICh2b2lkICphbGFybV9zdHJ1Y3QpIHsKKyAgICBzbm9vemUgKChkb3VibGUpICgoc3Ry dWN0IEFMQVJNX1NUUlVDVCAqKSBhbGFybV9zdHJ1Y3QpLT50aW1lICogMTAwMDAwMC4wKTsKKyAg ICBraWxsICgocGlkX3QpKChzdHJ1Y3QgQUxBUk1fU1RSVUNUICopIGFsYXJtX3N0cnVjdCktPnRo cmVhZCwgU0lHQUxSTSk7CisgICAgdGltZV9zdGFydGVkID0gMDsKKyAgICAoKHN0cnVjdCBBTEFS TV9TVFJVQ1QgKikgYWxhcm1fc3RydWN0KS0+dGhyZWFkID0gLTE7CisgICAgKChzdHJ1Y3QgQUxB Uk1fU1RSVUNUICopIGFsYXJtX3N0cnVjdCktPnRpbWUgPSAwOworfQorLyogI2VuZGlmICovIC8q IEJFX0RSXzcgKi8KKyNlbmRpZiAvKiBCRU9TT1JCRUJPWCAqLworCisjaWZkZWYgUGxhbjkKKwor aW50CitwOXR0eWN0bChjaGFyIGxldHRlciwgaW50IG51bSwgaW50IHBhcmFtKSB7CisgICAgY2hh ciBjbWRbMjBdOworICAgIGludCBsZW47CisKKyAgICBpZiAodHR5Y3RsZmQgPCAwKQorICAgICAg cmV0dXJuIC0xOworCisgICAgY21kWzBdID0gbGV0dGVyOworICAgIGlmIChudW0pCisgICAgICBs ZW4gPSBzcHJpbnRmKGNtZCArIDEsICIlZCIsIHBhcmFtKSArIDE7CisgICAgZWxzZSB7CisJY21k WzFdID0gcGFyYW07CisJbGVuID0gMjsKKyAgICB9CisgICAgaWYgKHdyaXRlKHR0eWN0bGZkLCBj bWQsIGxlbikgPT0gbGVuKSB7CisJY21kW2xlbl0gPSAwOworCS8qIGZwcmludGYoc3Rkb3V0LCAi d3JvdGUgJyVzJ1xuIiwgY21kKTsgKi8KKwlyZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIC0x OworfQorCitpbnQKK3A5dHR5cGFyaXR5KGNoYXIgbCkgeworICAgIHJldHVybiBwOXR0eWN0bCgn cCcsIDAsIGwpOworfQorCitpbnQKK3A5dHRoZmxvdyhpbnQgZmxvdywgaW50IHN0YXR1cykgewor ICAgIHJldHVybiBwOXR0eWN0bCgnbScsIDEsIHN0YXR1cyk7Cit9CisKK2ludAorcDl0dHNzcGQo aW50IGNwcykgeworICAgIGlmIChwOXR0eWN0bCgnYicsIDEsIGNwcyAqIDEwKSA8IDApCisgICAg ICByZXR1cm4gLTE7CisgICAgdHR5bGFzdHNwZWVkID0gY3BzICogMTA7CisgICAgcmV0dXJuIDA7 Cit9CisKK2ludAorcDlvcGVudHR5Y3RsKGNoYXIgKnR0bmFtZSkgeworICAgIGNoYXIgbmFtZVsx MDBdOworCisgICAgaWYgKHR0eWN0bGZkID49IDApIHsKKwljbG9zZSh0dHljdGxmZCk7CisJdHR5 Y3RsZmQgPSAtMTsKKwl0dHlsYXN0c3BlZWQgPSAtMTsKKyAgICB9CisgICAgc3ByaW50ZihuYW1l LCAiJXNjdGwiLCB0dG5hbWUpOworICAgIHR0eWN0bGZkID0gb3BlbihuYW1lLCAxKTsKKyAgICBy ZXR1cm4gdHR5Y3RsZmQ7Cit9CisKK2ludAorcDljb25jYigpIHsKKyAgICBpZiAoY29uc2N0bGZk ID49IDApIHsKKwlpZiAod3JpdGUoY29uc2N0bGZkLCAicmF3b24iLCA1KSA9PSA1KQorCSAgcmV0 dXJuIDA7CisgICAgfQorICAgIHJldHVybiAtMTsKK30KKworaW50CitwOWNvbmJpbigpIHsKKyAg ICByZXR1cm4gcDljb25jYigpOworfQorCitpbnQKK3A5Y29ucmVzKCkgeworICAgIGlmIChjb25z Y3RsZmQgPj0gMCkgeworCWlmICh3cml0ZShjb25zY3RsZmQsICJyYXdvZmYiLCA2KSA9PSA2KQor CSAgcmV0dXJuIDA7CisgICAgfQorICAgIHJldHVybiAtMTsKK30KKworaW50CitwOXNuZGJyayhp bnQgbXNlYykgeworICAgIGlmICh0dHljdGxmZCA+PSAwKSB7CisJY2hhciBjbWRbMjBdOworCWlu dCBpID0gc3ByaW50ZihjbWQsICJrJWQiLCBtc2VjKTsKKwlpZiAod3JpdGUodHR5Y3RsZmQsIGNt ZCwgaSkgPT0gaSkKKwkgIHJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4gLTE7Cit9CisKK2lu dAorY29ud3JpdGUoY2hhciAqYnVmLCBpbnQgbikgeworICAgIGludCB4OworICAgIHN0YXRpYyBp bnQgbGVuZ3RoID0gMDsKKyAgICBzdGF0aWMgaW50IGhvbGRpbmdjciA9IDA7CisgICAgaW50IG5v cm1hbCA9IDA7CisgICAgZm9yICh4ID0gMDsgeCA8IG47IHgrKykgeworCWNoYXIgYyA9IGJ1Zlt4 XTsKKwlpZiAoYyA9PSAwMDcpIHsKKwkgICAgaWYgKG5vcm1hbCkgeworCQl3cml0ZSgxLCBidWYg KyAoeCAtIG5vcm1hbCksIG5vcm1hbCk7CisJCWxlbmd0aCArPSBub3JtYWw7CisJCW5vcm1hbCA9 IDA7CisJICAgIH0KKwkgICAgLyogd3JpdGUobm9pc2VmZCwgIjEwMDAgMzAwIiwgOCk7ICovCisJ ICAgIGhvbGRpbmdjciA9IDA7CisJfSBlbHNlIGlmIChjID09ICdccicpIHsKKwkgICAgaWYgKG5v cm1hbCkgeworCQl3cml0ZSgxLCBidWYgKyAoeCAtIG5vcm1hbCksIG5vcm1hbCk7CisJCWxlbmd0 aCArPSBub3JtYWw7CisJCW5vcm1hbCA9IDA7CisJICAgIH0KKwkgICAgaG9sZGluZ2NyID0gMTsK Kwl9IGVsc2UgaWYgKGMgPT0gJ1xuJykgeworCSAgICB3cml0ZSgxLCBidWYgKyAoeCAtIG5vcm1h bCksIG5vcm1hbCArIDEpOworCSAgICBub3JtYWwgPSAwOworCSAgICBsZW5ndGggPSAwOworCSAg ICBob2xkaW5nY3IgPSAwOworCX0gZWxzZSBpZiAoYyA9PSAnXGInKSB7CisJICAgIGlmIChub3Jt YWwpIHsKKwkJd3JpdGUoMSwgYnVmICsgKHggLSBub3JtYWwpLCBub3JtYWwpOworCQlsZW5ndGgg Kz0gbm9ybWFsOworCQlub3JtYWwgPSAwOworCSAgICB9CisJICAgIGlmIChsZW5ndGgpIHsKKwkJ d3JpdGUoMSwgJmMsIDEpOworCQlsZW5ndGgtLTsKKwkgICAgfQorCSAgICBob2xkaW5nY3IgPSAw OworCX0gZWxzZSB7CisJICAgIGlmIChob2xkaW5nY3IpIHsKKwkJY2hhciBiID0gJ1xiJzsKKwkJ d2hpbGUgKGxlbmd0aC0tID4gMCkKKwkJICB3cml0ZSgxLCAmYiwgMSk7CisJCWxlbmd0aCA9IDA7 CS8qIGNvbXBpbGVyIGJ1ZyAqLworCSAgICB9CisJICAgIGhvbGRpbmdjciA9IDA7CisJICAgIG5v cm1hbCsrOworCX0KKyAgICB9CisgICAgaWYgKG5vcm1hbCkgeworCXdyaXRlKDEsIGJ1ZiArICh4 IC0gbm9ybWFsKSwgbm9ybWFsKTsKKwlsZW5ndGggKz0gbm9ybWFsOworICAgIH0KKyAgICByZXR1 cm4gbjsKK30KKwordm9pZAorY29ucHJpbnQoY2hhciAqZm10LCAuLi4pIHsKKyAgICBzdGF0aWMg Y2hhciBidWZbMTAwMF07CQkvKiBub3Qgc2FmZSBpZiBvbiB0aGUgc3RhY2sgKi8KKworICAgIHZh X2xpc3QgYXA7CisgICAgaW50IGk7CisKKyAgICB2YV9zdGFydChhcCwgZm10KTsKKyAgICBpID0g dnNwcmludGYoYnVmLCBmbXQsIGFwKTsKKyAgICBjb253cml0ZShidWYsIGkpOworfQorI2VuZGlm IC8qIFBsYW45ICovCisKKy8qIGZwcmludGYsIHByaW50ZiwgcGVycm9yIHJlcGxhY2VtZW50cy4u LiAqLworCisvKiBmIHAgciBpIG4gdCBmICovCisKKyNpZmRlZiBVTklYCisjaWZkZWYgQ0tfQU5T SUMKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNlbHNlIC8qIENLX0FOU0lDICovCisjaWZkZWYgX19H TlVDX18KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNlbHNlCisjaW5jbHVkZSA8dmFyYXJncy5oPgor I2VuZGlmCS8qIF9fR05VQ19fICovCisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKyNpZmRlZiBmcHJp bnRmCisjdW5kZWYgZnByaW50Zgorc3RhdGljIGNoYXIgc3RyMVs0MDk2XTsKK3N0YXRpYyBjaGFy IHN0cjJbNDA5Nl07CitpbnQKKyNpZmRlZiBDS19BTlNJQworY2t4ZnByaW50ZihGSUxFICogZmls ZSwgY29uc3QgY2hhciAqIGZvcm1hdCwgLi4uKQorI2Vsc2UgLyogQ0tfQU5TSUMgKi8KK2NreGZw cmludGYodmFfYWxpc3QpIHZhX2RjbAorI2VuZGlmIC8qIENLX0FOU0lDICovCisvKiBja3hmcHJp bnRmICovIHsKKyAgICBpbnQgaSwgaiwgbGVuLCBnb3RfY3I7CisgICAgdmFfbGlzdCBhcmdzOwor ICAgIGludCByYyA9IDA7CisKKyNpZmRlZiBDS19BTlNJQworICAgIHZhX3N0YXJ0KGFyZ3MsIGZv cm1hdCk7CisjZWxzZSAvKiBDS19BTlNJQyAqLworICAgIGNoYXIgKiBmb3JtYXQ7CisgICAgRklM RSAqIGZpbGU7CisgICAgdmFfc3RhcnQoYXJncyk7CisgICAgZmlsZSA9IHZhX2FyZyhhcmdzLEZJ TEUgKik7CisgICAgZm9ybWF0ID0gdmFfYXJnKGFyZ3MsY2hhciAqKTsKKyNlbmRpZiAvKiBDS19B TlNJQyAqLworCisgICAgaWYgKCFpbnNlcnZlciB8fCAoZmlsZSAhPSBzdGRvdXQgJiYgZmlsZSAh PSBzdGRlcnIgJiYgZmlsZSAhPSBzdGRpbikpIHsKKwlyYyA9IHZmcHJpbnRmKGZpbGUsZm9ybWF0 LGFyZ3MpOworICAgIH0gZWxzZSB7CisJdW5zaWduZWQgaW50IGM7CisgICAgICAgIHJjID0gdnNw cmludGYoc3RyMSwgZm9ybWF0LCBhcmdzKTsKKyAgICAgICAgbGVuID0gc3RybGVuKHN0cjEpOwor ICAgICAgICBpZiAobGVuID49IHNpemVvZihzdHIxKSkgeworICAgICAgICAgICAgZGVidWcoRjEw MSwiY2t4ZnByaW50ZigpIGJ1ZmZlciBvdmVyZmxvdyIsIiIsbGVuKTsKKyAgICAgICAgICAgIGRv ZXhpdChCQURfRVhJVCwxKTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKGkgPSAwLCBqID0gMCwg Z290X2NyID0gMDsKKwkgICAgIGkgPCBsZW4gJiYgaiA8IHNpemVvZihzdHIxKS0yOworCSAgICAg aSsrLCBqKysgKSB7CisJICAgIC8qIFdlIGNhbid0IHVzZSAyNTUgYXMgYSBjYXNlIGxhYmVsIGJl Y2F1c2Ugb2Ygc2lnbmVkIGNoYXJzICovCisJICAgIGMgPSAodW5zaWduZWQpKHN0cjFbaV0gJiAw eGZmKTsKKyNpZmRlZiBUTkNPREUKKwkgICAgaWYgKGMgPT0gMjU1KSB7CisJCWlmIChnb3RfY3Ig JiYgIVRFTE9QVF9NRShURUxPUFRfQklOQVJZKSkKKwkJICBzdHIyW2orK10gPSAnXDAnOworCQlz dHIyW2orK10gPSBJQUM7CisJCXN0cjJbal0gPSBJQUM7CisJCWdvdF9jciA9IDA7CisJICAgIH0g ZWxzZQorI2VuZGlmIC8qIFROQ09ERSAqLworCSAgICBzd2l0Y2ggKGMpIHsKKwkgICAgICBjYXNl ICdccic6CisgICAgICAgICAgICAgICAgaWYgKGdvdF9jcgorI2lmZGVmIFROQ09ERQorCQkgICAg JiYgIVRFTE9QVF9NRShURUxPUFRfQklOQVJZKQorI2VuZGlmIC8qIFROQ09ERSAqLworCQkgICAg KQorCQkgIHN0cjJbaisrXSA9ICdcMCc7CisgICAgICAgICAgICAgICAgc3RyMltqXSA9IHN0cjFb aV07CisgICAgICAgICAgICAgICAgZ290X2NyID0gMTsKKyAgICAgICAgICAgICAgICBicmVhazsK KwkgICAgICBjYXNlICdcbic6CisgICAgICAgICAgICAgICAgaWYgKCFnb3RfY3IpCisJCSAgc3Ry MltqKytdID0gJ1xyJzsKKyAgICAgICAgICAgICAgICBzdHIyW2pdID0gc3RyMVtpXTsKKyAgICAg ICAgICAgICAgICBnb3RfY3IgPSAwOworICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICAgIGRl ZmF1bHQ6CisgICAgICAgICAgICAgICAgaWYgKGdvdF9jcgorI2lmZGVmIFROQ09ERQorCQkgICAg JiYgIVRFTE9QVF9NRShURUxPUFRfQklOQVJZKQorI2VuZGlmIC8qIFROQ09ERSAqLworCQkgICAg KQorCQkgIHN0cjJbaisrXSA9ICdcMCc7CisgICAgICAgICAgICAgICAgc3RyMltqXSA9IHN0cjFb aV07CisgICAgICAgICAgICAgICAgZ290X2NyID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAg fQorICAgICAgICBpZiAoZ290X2NyCisjaWZkZWYgVE5DT0RFCisgICAgICAgICAgICAgJiYgIVRF TE9QVF9NRShURUxPUFRfQklOQVJZKQorI2VuZGlmIC8qIFROQ09ERSAqLworICAgICAgICAgICAg ICkKKyAgICAgICAgICAgIHN0cjJbaisrXSA9ICdcMCc7CisjaWZkZWYgQ0tfRU5DUllQVElPTgor I2lmZGVmIFROQ09ERQorICAgICAgICBpZiAoVEVMT1BUX01FKFRFTE9QVF9FTkNSWVBUSU9OKSkK KwkgIGNrX3RuX2VuY3J5cHQoc3RyMixqKTsKKyNlbmRpZiAvKiBUTkNPREUgKi8KKyNlbmRpZiAv KiBDS19FTkNSWVBUSU9OICovCisjaWZkZWYgQ0tfU1NMCisJaWYgKGluc2VydmVyICYmIChzc2xf YWN0aXZlX2ZsYWcgfHwgdGxzX2FjdGl2ZV9mbGFnKSkgeworCSAgICAvKiBXcml0ZSB1c2luZyBT U0wgKi8KKyAgICAgICAgICAgIGNoYXIgKiBwID0gc3RyMjsKKyAgICAgICAgICBzc2xfcmV0cnk6 CisgICAgICAgICAgICBpZiAoc3NsX2FjdGl2ZV9mbGFnKQorCSAgICAgIHJjID0gU1NMX3dyaXRl KHNzbF9jb24sIHAsIGopOworICAgICAgICAgICAgZWxzZQorCSAgICAgIHJjID0gU1NMX3dyaXRl KHRsc19jb24sIHAsIGopOworCSAgICBkZWJ1ZyhGMTExLCJja3hmcHJpbnRmIiwiU1NMX3dyaXRl IixyYyk7CisgICAgICAgICAgICBzd2l0Y2ggKFNTTF9nZXRfZXJyb3Ioc3NsX2FjdGl2ZV9mbGFn P3NzbF9jb246dGxzX2NvbixyYykpIHsKKwkgICAgICBjYXNlIFNTTF9FUlJPUl9OT05FOgorICAg ICAgICAgICAgICAgIGlmIChyYyA9PSBqKQorCQkgIGJyZWFrOworICAgICAgICAgICAgICAgIHAg Kz0gcmM7CisgICAgICAgICAgICAgICAgaiAtPSByYzsKKyAgICAgICAgICAgICAgICBnb3RvIHNz bF9yZXRyeTsKKwkgICAgICBjYXNlIFNTTF9FUlJPUl9XQU5UX1dSSVRFOgorCSAgICAgIGNhc2Ug U1NMX0VSUk9SX1dBTlRfUkVBRDoKKwkgICAgICBjYXNlIFNTTF9FUlJPUl9TWVNDQUxMOgorICAg ICAgICAgICAgICAgIGlmIChyYyAhPSAwKQorCQkgIHJldHVybigtMSk7CisJICAgICAgY2FzZSBT U0xfRVJST1JfV0FOVF9YNTA5X0xPT0tVUDoKKwkgICAgICBjYXNlIFNTTF9FUlJPUl9TU0w6CisJ ICAgICAgY2FzZSBTU0xfRVJST1JfWkVST19SRVRVUk46CisJICAgICAgZGVmYXVsdDoKKyAgICAg ICAgICAgICAgICByYyA9IDA7CisgICAgICAgICAgICB9CisJfSBlbHNlCisjZW5kaWYgLyogQ0tf U1NMICovCisgICAgICAgIGZ3cml0ZShzdHIyLHNpemVvZihjaGFyKSxqLHN0ZG91dCk7CisgICAg fQorICAgIHZhX2VuZChhcmdzKTsKKyAgICByZXR1cm4ocmMpOworfQorI2VuZGlmIC8qIGZwcmlu dGYgKi8KKworLyogcCByIGkgbiB0IGYgKi8KKworI2lmZGVmIHByaW50ZgorI3VuZGVmIHByaW50 ZgoraW50CisjaWZkZWYgQ0tfQU5TSUMKK2NreHByaW50Zihjb25zdCBjaGFyICogZm9ybWF0LCAu Li4pCisjZWxzZSAvKiBDS19BTlNJQyAqLworY2t4cHJpbnRmKHZhX2FsaXN0KSB2YV9kY2wKKyNl bmRpZiAvKiBDS19BTlNJQyAqLworLyogY2t4cHJpbnRmICovIHsKKyAgICBpbnQgaSwgaiwgbGVu LCBnb3RfY3I7CisgICAgdmFfbGlzdCBhcmdzOworICAgIGludCByYyA9IDA7CisKKyNpZmRlZiBD S19BTlNJQworICAgIHZhX3N0YXJ0KGFyZ3MsIGZvcm1hdCk7CisjZWxzZSAvKiBDS19BTlNJQyAq LworICAgIGNoYXIgKiBmb3JtYXQ7CisgICAgdmFfc3RhcnQoYXJncyk7CisgICAgZm9ybWF0ID0g dmFfYXJnKGFyZ3MsY2hhciAqKTsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworCisgICAgaWYgKCFp bnNlcnZlcikgeworCXJjID0gdnByaW50Zihmb3JtYXQsIGFyZ3MpOworICAgIH0gZWxzZSB7CisJ dW5zaWduZWQgaW50IGM7CisgICAgICAgIHJjID0gdnNwcmludGYoc3RyMSwgZm9ybWF0LCBhcmdz KTsKKyAgICAgICAgbGVuID0gc3RybGVuKHN0cjEpOworICAgICAgICBpZiAobGVuID49IHNpemVv ZihzdHIxKSkgeworICAgICAgICAgICAgZGVidWcoRjEwMSwiY2t4cHJpbnRmKCkgYnVmZmVyIG92 ZXJmbG93IiwiIixsZW4pOworICAgICAgICAgICAgZG9leGl0KEJBRF9FWElULDEpOworICAgICAg ICB9CisgICAgICAgIGZvciAoaSA9IDAsIGogPSAwLCBnb3RfY3I9MDsKKwkgICAgIGkgPCBsZW4g JiYgaiA8IHNpemVvZihzdHIxKS0yOworCSAgICAgaSsrLCBqKysgKSB7CisJICAgIGMgPSAodW5z aWduZWQpKHN0cjFbaV0gJiAweGZmKTsKKyNpZmRlZiBUTkNPREUKKwkgICAgaWYgKGMgPT0gMjU1 KSB7CisJCWlmIChnb3RfY3IgJiYgIVRFTE9QVF9NRShURUxPUFRfQklOQVJZKSkKKwkJICBzdHIy W2orK10gPSAnXDAnOworCQlzdHIyW2orK10gPSBJQUM7CisJCXN0cjJbal0gPSBJQUM7CisJCWdv dF9jciA9IDA7CisJICAgIH0gZWxzZQorI2VuZGlmIC8qIFROQ09ERSAqLworCSAgICBzd2l0Y2gg KGMpIHsKKwkgICAgICBjYXNlICdccic6CisgICAgICAgICAgICAgICAgaWYgKGdvdF9jcgorI2lm ZGVmIFROQ09ERQorCQkgICAgJiYgIVRFTE9QVF9NRShURUxPUFRfQklOQVJZKQorI2VuZGlmIC8q IFROQ09ERSAqLworCQkgICAgKQorCQkgIHN0cjJbaisrXSA9ICdcMCc7CisgICAgICAgICAgICAg ICAgc3RyMltqXSA9IHN0cjFbaV07CisgICAgICAgICAgICAgICAgZ290X2NyID0gMTsKKyAgICAg ICAgICAgICAgICBicmVhazsKKwkgICAgICBjYXNlICdcbic6CisgICAgICAgICAgICAgICAgaWYg KCFnb3RfY3IpCisJCSAgc3RyMltqKytdID0gJ1xyJzsKKyAgICAgICAgICAgICAgICBzdHIyW2pd ID0gc3RyMVtpXTsKKyAgICAgICAgICAgICAgICBnb3RfY3IgPSAwOworICAgICAgICAgICAgICAg IGJyZWFrOworCSAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgaWYgKGdvdF9jcgorI2lm ZGVmIFROQ09ERQorCQkgICAgJiYgIVRFTE9QVF9NRShURUxPUFRfQklOQVJZKQorI2VuZGlmIC8q IFROQ09ERSAqLworCQkgICAgKQorCQkgIHN0cjJbaisrXSA9ICdcMCc7CisgICAgICAgICAgICAg ICAgc3RyMltqXSA9IHN0cjFbaV07CisgICAgICAgICAgICAgICAgZ290X2NyID0gMDsKKyAgICAg ICAgICAgICAgICBicmVhazsKKwkgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChnb3RfY3IK KyNpZmRlZiBUTkNPREUKKyAgICAgICAgICAgICAmJiAhVEVMT1BUX01FKFRFTE9QVF9CSU5BUlkp CisjZW5kaWYgLyogVE5DT0RFICovCisgICAgICAgICAgICAgKQorICAgICAgICAgICAgc3RyMltq KytdID0gJ1wwJzsKKyNpZmRlZiBDS19FTkNSWVBUSU9OCisjaWZkZWYgVE5DT0RFCisgICAgICAg IGlmIChURUxPUFRfTUUoVEVMT1BUX0VOQ1JZUFRJT04pKQorCSAgY2tfdG5fZW5jcnlwdChzdHIy LGopOworI2VuZGlmIC8qIFROQ09ERSAqLworI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KKyNp ZmRlZiBDS19TU0wKKwlpZiAoaW5zZXJ2ZXIgJiYgKHNzbF9hY3RpdmVfZmxhZyB8fCB0bHNfYWN0 aXZlX2ZsYWcpKSB7CisgICAgICAgICAgICBjaGFyICogcCA9IHN0cjI7CisJICAgIC8qIFdyaXRl IHVzaW5nIFNTTCAqLworICAgICAgICAgIHNzbF9yZXRyeToKKyAgICAgICAgICAgIGlmIChzc2xf YWN0aXZlX2ZsYWcpCisJICAgICAgcmMgPSBTU0xfd3JpdGUoc3NsX2NvbiwgcCwgaik7CisgICAg ICAgICAgICBlbHNlCisJICAgICAgcmMgPSBTU0xfd3JpdGUodGxzX2NvbiwgcCwgaik7CisJICAg IGRlYnVnKEYxMTEsImNreHByaW50ZiIsIlNTTF93cml0ZSIscmMpOworICAgICAgICAgICAgc3dp dGNoIChTU0xfZ2V0X2Vycm9yKHNzbF9hY3RpdmVfZmxhZz9zc2xfY29uOnRsc19jb24scmMpKSB7 CisJICAgICAgY2FzZSBTU0xfRVJST1JfTk9ORToKKyAgICAgICAgICAgICAgICBpZiAocmMgPT0g aikKKwkJICBicmVhazsKKyAgICAgICAgICAgICAgICBwICs9IHJjOworICAgICAgICAgICAgICAg IGogLT0gcmM7CisgICAgICAgICAgICAgICAgZ290byBzc2xfcmV0cnk7CisJICAgICAgY2FzZSBT U0xfRVJST1JfV0FOVF9XUklURToKKwkgICAgICBjYXNlIFNTTF9FUlJPUl9XQU5UX1JFQUQ6CisJ ICAgICAgY2FzZSBTU0xfRVJST1JfU1lTQ0FMTDoKKyAgICAgICAgICAgICAgICBpZiAocmMgIT0g MCkKKwkJICByZXR1cm4oLTEpOworCSAgICAgIGNhc2UgU1NMX0VSUk9SX1dBTlRfWDUwOV9MT09L VVA6CisJICAgICAgY2FzZSBTU0xfRVJST1JfU1NMOgorCSAgICAgIGNhc2UgU1NMX0VSUk9SX1pF Uk9fUkVUVVJOOgorCSAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmMgPSAwOworICAg ICAgICAgICAgfQorCX0gZWxzZQorI2VuZGlmIC8qIENLX1NTTCAqLworCSAgcmMgPSBmd3JpdGUo c3RyMixzaXplb2YoY2hhciksaixzdGRvdXQpOworICAgIH0KKyAgICB2YV9lbmQoYXJncyk7Cisg ICAgcmV0dXJuKHJjKTsKK30KKyNlbmRpZiAvKiBwcmludGYgKi8KKworLyogIHAgZSByIHIgbyBy ICAqLworCisjaWZkZWYgcGVycm9yCisjdW5kZWYgcGVycm9yCitfUFJPVE9UWVAoY2hhciAqIGNr X2VycnN0ciwoVk9JRCkpOworI2lmZGVmIE5FWFQKK3ZvaWQKKyNlbHNlCisjaWZkZWYgQ0tfU0NP VjUKK3ZvaWQKKyNlbHNlCitpbnQKKyNlbmRpZiAvKiBDS19TQ09WNSAqLworI2VuZGlmIC8qIE5F WFQgKi8KKyNpZmRlZiBDS19BTlNJQworY2t4cGVycm9yKGNvbnN0IGNoYXIgKiBzdHIpCisjZWxz ZSAvKiBDS19BTlNJQyAqLworY2t4cGVycm9yKHN0cikgY2hhciAqIHN0cjsKKyNlbmRpZiAvKiBD S19BTlNJQyAqLworLyogY2t4cGVycm9yICovIHsKKyAgICBjaGFyICogZXJyc3RyID0gY2tfZXJy c3RyKCk7CisjaWZuZGVmIE5FWFQKKyNpZm5kZWYgQ0tfU0NPVjUKKyAgICByZXR1cm4KKyNlbmRp ZiAvKiBDS19TQ09WNSAqLworI2VuZGlmIC8qIE5FWFQgKi8KKyAgICAgIGNreHByaW50ZigiJXMl cyAlc1xuIixzdHIsKmVycnN0cj8iOiI6IiIsZXJyc3RyKTsKK30KKyNlbmRpZiAvKiBwZXJyb3Ig Ki8KKyNlbmRpZiAvKiBVTklYICovCisKKyNpZmRlZiBNSU5JWDIKKworLyogTWluaXggZG9lc24n dCBoYXZlIGEgZ2V0dGltZW9mZGF5IGNhbGwgKGJ1dCBNSU5JWDMgZG9lcykuCisgKiBXZSBmYWtl IG9uZSBoZXJlIHVzaW5nIHRpbWUoMikKKyAqLworCisjaWZuZGVmIE1JTklYMworaW50CitnZXR0 aW1lb2ZkYXkoc3RydWN0IHRpbWV2YWwgKnRwLCBzdHJ1Y3QgdGltZXpvbmUgKnR6cCkgeworICAg IHRwLT50dl91c2VjID0gMEw7CQkJLyogQ2xvc2UgZW5vdWdoIGZvciBob3JzZXNob2VzICovCisg ICAgaWYodGltZSgmKHRwLT50dl9zZWMpKT09LTEpCisgICAgICByZXR1cm4oLTEpOworICAgIHJl dHVybigwKTsKK30KKyNlbmRpZgkvKiBNSU5JWDMgKi8KKworI2lmbmRlZiBNSU5JWDMKK2ludAor cmVhZGxpbmsoY29uc3QgY2hhciAqcGF0aCwgdm9pZCAqYnVmLCBzaXplX3QgYnVmc2l6KSB7Cisg ICAgZXJybm8gPSBFTk9TWVM7CisgICAgcmV0dXJuKC0xKTsKK30KKyNlbmRpZgkvKiBNSU5JWDMg Ki8KKworI2VuZGlmIC8qIE1JTklYMiAqLwoKZGlmZiAtLWdpdCBhL2NrZXJtaXQtOS4wLjMwMi1i dWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1dGlvLmMuYzk5IGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxk L2NrZXJtaXQtOS4wLjMwMi9ja3V0aW8uYy5jOTkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMC4uMDU1NjRkZQotLS0gL2Rldi9udWxsCisrKyBiL2NrZXJtaXQtOS4wLjMwMi1idWls ZC9ja2VybWl0LTkuMC4zMDIvY2t1dGlvLmMuYzk5CkBAIC0wLDAgKzEsMTYwNTAgQEAKKyNkZWZp bmUgQ0tVVElPX0MKKworI2lmZGVmIGFlZ2lzCitjaGFyICpja3h2ID0gIkFlZ2lzIENvbW11bmlj YXRpb25zIHN1cHBvcnQsIDkuMC4zMjYsIDIwIEF1Z3VzdCAyMDExIjsKKyNlbHNlCisjaWZkZWYg UGxhbjkKK2NoYXIgKmNreHYgPSAiUGxhbiA5IENvbW11bmljYXRpb25zIHN1cHBvcnQsIDkuMC4z MjYsIDIwIEF1Z3VzdCAyMDExIjsKKyNlbHNlCitjaGFyICpja3h2ID0gIlVOSVggQ29tbXVuaWNh dGlvbnMgc3VwcG9ydCwgOS4wLjMyNiwgMjAgQXVndXN0IDIwMTEiOworI2VuZGlmIC8qIFBsYW45 ICovCisjZW5kaWYgLyogYWVnaXMgKi8KKworLyogIEMgSyBVIFQgSSBPICAqLworCisvKiBDLUtl cm1pdCBpbnRlcnJ1cHQsIGNvbW11bmljYXRpb25zIGNvbnRyb2wgYW5kIEkvTyBmdW5jdGlvbnMg Zm9yIFVOSVggKi8KKworLyoKKyAgQXV0aG9yOiBGcmFuayBkYSBDcnV6IChmZGNAY29sdW1iaWEu ZWR1KSwKKyAgQ29sdW1iaWEgVW5pdmVyc2l0eSBBY2FkZW1pYyBJbmZvcm1hdGlvbiBTeXN0ZW1z LCBOZXcgWW9yayBDaXR5LgorCisgIENvcHlyaWdodCAoQykgMTk4NSwgMjAxMSwKKyAgICBUcnVz dGVlcyBvZiBDb2x1bWJpYSBVbml2ZXJzaXR5IGluIHRoZSBDaXR5IG9mIE5ldyBZb3JrLgorICAg IEFsbCByaWdodHMgcmVzZXJ2ZWQuICBTZWUgdGhlIEMtS2VybWl0IENPUFlJTkcuVFhUIGZpbGUg b3IgdGhlCisgICAgY29weXJpZ2h0IHRleHQgaW4gdGhlIGNrY21haS5jIG1vZHVsZSBmb3IgZGlz Y2xhaW1lciBhbmQgcGVybWlzc2lvbnMuCisqLworCisvKgorICBOT1RFIFRPIENPTlRSSUJVVE9S UzogVGhpcyBmaWxlLCBhbmQgYWxsIHRoZSBvdGhlciBDLUtlcm1pdCBmaWxlcywgbXVzdCBiZQor ICBjb21wYXRpYmxlIHdpdGggQyBwcmVwcm9jZXNzb3JzIHRoYXQgc3VwcG9ydCBvbmx5ICNpZmRl ZiwgI2Vsc2UsICNlbmRpZiwKKyAgI2RlZmluZSwgYW5kICN1bmRlZi4gIFBsZWFzZSBkbyBub3Qg dXNlICNpZiwgbG9naWNhbCBvcGVyYXRvcnMsIG9yIG90aGVyCisgIHByZXByb2Nlc3NvciBmZWF0 dXJlcyBpbiBhbnkgb2YgdGhlIHBvcnRhYmxlIEMtS2VybWl0IG1vZHVsZXMuICBZb3UgY2FuLAor ICBvZiBjb3Vyc2UsIHVzZSB0aGVzZSBjb25zdHJ1Y3Rpb25zIGluIHBsYXRmb3JtLXNwZWNpZmlj IG1vZHVsZXMgd2hlbiB0aGV5CisgIGFyZSBzdXBwb3J0ZWQgYnkgYWxsIGNvbXBpbGVycy9wcmVw cm9jZXNzb3JzIHRoYXQgY291bGQgYmUgdXNlZCBvbiB0aGF0CisgIHBsYXRmb3JtLgorKi8KKwor ZXh0ZXJuIGludCBuZXR0eXBlOwkJCS8qIERlZmluZWQgaW4gY2tjbWFpLmMgKi8KK2V4dGVybiBp bnQgZHVwbGV4OworCisvKiBJbmNsdWRlcyAqLworCisjaW5jbHVkZSAiY2tjc3ltLmgiCQkJLyog VGhpcyBtdXN0IGdvIGZpcnN0ICAgKi8KKyNpbmNsdWRlICJja2NkZWIuaCIJCQkvKiBUaGlzIG11 c3QgZ28gc2Vjb25kICAqLworCisjaWZkZWYgT1NGMTMKKyNpZmRlZiBDS19BTlNJQworI2lmZGVm IF9OT19QUk9UTworI3VuZGVmIF9OT19QUk9UTworI2VuZGlmIC8qIF9OT19QUk9UTyAqLworI2Vu ZGlmIC8qIENLX0FOU0lDICovCisjZW5kaWYgLyogT1NGMTMgKi8KKworI2lmbmRlZiBIUFVYUFJF NjUKKyNpbmNsdWRlIDxlcnJuby5oPgkJCS8qIEVycm9yIG51bWJlciBzeW1ib2xzICovCisjZWxz ZQorI2lmbmRlZiBFUlJOT19JTkNMVURFRAorI2luY2x1ZGUgPGVycm5vLmg+CQkJLyogRXJyb3Ig bnVtYmVyIHN5bWJvbHMgKi8KKyNlbmRpZgkvKiBFUlJOT19JTkNMVURFRCAqLworI2VuZGlmCS8q IEhQVVhQUkU2NSAqLworCisjaWZkZWYgX18zODZCU0RfXworI2RlZmluZSBFTk9UQ09OTiA1Nwor I2Vsc2UKKyNpZmRlZiBfX2JzZGlfXworI2RlZmluZSBFTk9UQ09OTiA1NworI2Vsc2UKKyNpZmRl ZiBfX0ZyZWVCU0RfXworI2RlZmluZSBFTk9UQ09OTiA1NworI2VuZGlmIC8qIF9fRnJlZUJTRF9f ICovCisjZW5kaWYgLyogX19ic2RpX18gKi8KKyNlbmRpZiAvKiBfXzM4NkJTRF9fICovCisKKyNp ZmRlZiBTQ09fT1NSNTA0CisjZGVmaW5lIE5CQlkgOAorI2VuZGlmIC8qIFNDT19PU1I1MDQgKi8K KworI2lmZGVmIFBsYW45CisjZGVmaW5lIFNFTEVDVAorI2luY2x1ZGUgPHN5cy90aW1lLmg+Cisj aW5jbHVkZSA8c2VsZWN0Lmg+CisjZGVmaW5lIEZEX1NFVFNJWkUgKDMgKiBzaXplb2YobG9uZykg KiA4KQorc3RhdGljIHN0cnVjdCB0aW1ldmFsIHR2OworI2VuZGlmIC8qIFBsYW45ICovCisKKyNp ZmRlZiBDTElYCisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNlbmRpZiAvKiBDTElYICovCisKKyNp bmNsdWRlICJja2NuZXQuaCIJCQkvKiBTeW1ib2xzIGZvciBuZXR3b3JrIHR5cGVzLiAqLworI2lm ZGVmIENLX1NTTAorI2luY2x1ZGUgImNrX3NzbC5oIgorI2VuZGlmIC8qIENLX1NTTCAqLworCisv KgorICBUaGUgZGlyZWN0b3J5LXJlbGF0ZWQgaW5jbHVkZXMgYXJlIGhlcmUgYmVjYXVzZSB3ZSBu ZWVkIHRvIHRlc3Qgc29tZQorICBmaWxlLXN5c3RlbS1yZWxhdGVkIHN5bWJvbHMgdG8gZmluZCBv dXQgd2hpY2ggc3lzdGVtIHdlJ3JlIGJlaW5nIGNvbXBpbGVkCisgIHVuZGVyLiAgRm9yIGV4YW1w bGUsIE1BWE5BTUxFTiBpcyBkZWZpbmVkIGluIEJTRDQuMiBidXQgbm90IDQuMS4KKyovCisjaWZk ZWYgU0RJUkVOVAkJCQkvKiBEaXJlY3RvcnkgYml0cy4uLiAqLworI2RlZmluZSBESVJFTlQKKyNl bmRpZiAvKiBTRElSRU5UICovCisKKyNpZmRlZiBYTkRJUgorI2luY2x1ZGUgPHN5cy9uZGlyLmg+ CisjZWxzZSAvKiAhWE5ESVIgKi8KKyNpZmRlZiBORElSCisjaW5jbHVkZSA8bmRpci5oPgorI2Vs c2UgLyogIU5ESVIsICFYTkRJUiAqLworI2lmZGVmIFJUVQorI2luY2x1ZGUgIi91c3IvbGliL25k aXIuaCIKKyNlbHNlIC8qICFSVFUsICFORElSLCAhWE5ESVIgKi8KKyNpZmRlZiBESVJFTlQKKyNp ZmRlZiBTRElSRU5UCisjaW5jbHVkZSA8c3lzL2RpcmVudC5oPgorI2Vsc2UKKyNpbmNsdWRlIDxk aXJlbnQuaD4KKyNlbmRpZiAvKiBTRElSRU5UICovCisjZWxzZSAvKiAhUlRVLCAhTkRJUiwgIVhO RElSLCAhRElSRU5ULCBpLmUuIGFsbCBvdGhlcnMgKi8KKyNpbmNsdWRlIDxzeXMvZGlyLmg+Cisj ZW5kaWYgLyogRElSRU5UICovCisjZW5kaWYgLyogUlRVICovCisjZW5kaWYgLyogTkRJUiAqLwor I2VuZGlmIC8qIFhORElSICovCisKKyNpZmRlZiBRTlgKKyNpbmNsdWRlIDxzeXMvZGV2Lmg+Cisj ZW5kaWYgLyogUU5YICovCisKKyNpZmRlZiBIUFVYNQorI2lmbmRlZiBUQ1BTT0NLRVQKKy8qIEkg ZG9uJ3Qga25vdyB3aHkgdGhpcyBpcyBuZWVkZWQgaGVyZSBzaW5jZSB3ZSBuZXZlciByZWZlcmVu Y2UgYnplcm8oKS4gKi8KKy8qIEJ1dCB3aXRob3V0IGl0IEMtS2VybWl0IHdvbid0IGxpbmsgaW4g YW4gSFAtVVggNS54eCBub24tVENQIGJ1aWxkLiAqLwordm9pZAorYnplcm8ocyxuKSBjaGFyICpz OyBpbnQgbjsgeworICAgIGV4dGVybiBjaGFyICogbWVtc2V0KCk7CisgICAgbWVtc2V0KHMsMCxu KTsKK30KKyNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KKyNlbmRpZiAvKiBIUFVYNSAqLworCisvKiBE ZWZpbml0aW9uIG9mIEhaLCB1c2VkIGluIG1zbGVlcCgpICovCisKKyNpZmRlZiBNSVBTCisjZGVm aW5lIEhaICggMTAwMCAvIENMT0NLX1RJQ0sgKQorI2Vsc2UgIC8qIE1JUFMgKi8KKyNpZmRlZiBB VFRTVgorI2lmbmRlZiBOQVAKKyNpZmRlZiBUUlMxNgorI2RlZmluZSBIWiAoIDEwMDAgLyBDTE9D S19USUNLICkKKyNlbmRpZiAvKiBUUlMxNiAqLworI2lmZGVmIE5BUEhBQ0sKKyNkZWZpbmUgbmFw KHgpICh2b2lkKXN5c2NhbGwoMzExMiwgKHgpKQorI2RlZmluZSBOQVAKKyNlbmRpZiAvKiBOQVBI QUNLICovCisjZW5kaWYgLyogTkFQICovCisjZW5kaWYgLyogQVRUU1YgKi8KKyNlbmRpZiAvKiBN SVBTICovCisKKyNpZmRlZiBNX1VOSVgKKyN1bmRlZiBOR1JPVVBTX01BWAkJLyogUHJldmVudCBt dWx0aXBsZSBkZWZpbml0aW9uIHdhcm5pbmdzICovCisjZW5kaWYgLyogTV9VTklYICovCisKKy8q CisgIE5PVEU6IEhQLVVYIDguMCBoYXMgYSA8c3lzL3BvbGwuaD4sIGJ1dCB0aGVyZSBpcyBubyBj b3JyZXNwb25kaW5nCisgIGxpYnJhcnkgcm91dGluZSwgc28gX3BvbGwgY29tZXMgdXAgdW5kZWZp bmVkIGF0IGxpbmsgdGltZS4KKyovCisjaWZkZWYgQ0tfUE9MTAorI2lmbmRlZiBBSVhSUwkJCS8q IElCTSBBSVggbmVlZHMgc3BlY2lhbCBoYW5kbGluZyAqLworI2luY2x1ZGUgPHBvbGwuaD4JCS8q ICJzdGFuZGFyZCIgKFNWSUQpIGkvbyBtdWx0aXBsZXhpbmcsIGV0YyAqLworI2Vsc2UgLyogQUlY UlMgKi8KKyNpZmRlZiBTVlI0CQkJLyogQUlYIDMuMiBpcyBsaWtlIFNWSUQuLi4gKi8KKyNpbmNs dWRlIDxwb2xsLmg+CisjZWxzZQkJCQkvKiBCdXQgQUlYIDMuMSBpcyBub3QgLi4uICovCisjaW5j bHVkZSA8c3lzL3BvbGwuaD4JCS8qIFRoZSBpbmNsdWRlIGZpbGUgaXMgaW4gaW5jbHVkZS9zeXMg Ki8KKyNkZWZpbmUgZXZlbnRzIHJlcWV2ZW50cwkvKiBBbmQgaXQgZG9lcyBub3QgbWFwIElCTS1z cGVjaWZpYyBtZW1iZXIgKi8KKyNkZWZpbmUgcmV2ZW50cyBydG5ldmVudHMJLyogbmFtZXMgdG8g dGhlIFN5c3RlbSBWIGVxdWl2YWxlbnRzICovCisjZW5kaWYgLyogU1ZSNCAqLworI2VuZGlmIC8q IEFJWFJTICovCisjZW5kaWYgLyogQ0tfUE9MTCAqLworCisjaW5jbHVkZSA8c2lnbmFsLmg+ICAg ICAgICAgICAgICAgICAgICAgLyogU2lnbmFscyAqLworCisvKiBGb3Igc2V0am1wIGFuZCBsb25n am1wICovCisKKyNpZm5kZWYgWklMT0cKKyNpbmNsdWRlIDxzZXRqbXAuaD4KKyNlbHNlCisjaW5j bHVkZSA8c2V0cmV0Lmg+CisjZW5kaWYgLyogWklMT0cgKi8KKworLyoKKyAgVGhlIGZvbGxvd2lu ZyB0ZXN0IGRpZmZlcmVudGlhdGVzIGJldHdlZW4gNC4xIEJTRCBhbmQgNC4yICYgbGF0ZXIuCisg IElmIHlvdSBoYXZlIGEgNC4xQlNEIHN5c3RlbSB3aXRoIHRoZSBESVJFTlQgbGlicmFyeSwgdGhp cyB0ZXN0IGNvdWxkCisgIG1pc3Rha2VubHkgZGlhZ25vc2UgNC4yQlNEIGFuZCB0aGVuIGxhdGVy IGVuYWJsZSB0aGUgdXNlIG9mIHN5c3RlbSBjYWxscworICB0aGF0IGFyZW4ndCBkZWZpbmVkLiAg SWYgaW5kZWVkIHRoZXJlIGFyZSBzdWNoIHN5c3RlbXMsIHdlIGNhbiB1c2Ugc29tZQorICBvdGhl ciB3YXkgb2YgdGVzdGluZyBmb3IgNC4xQlNELCBvciBhZGQgeWV0IGFub3RoZXIgY29tcGlsZS10 aW1lIHN3aXRjaC4KKyovCisjaWZkZWYgQlNENAorI2lmZGVmIE1BWE5BTUxFTgorI2lmbmRlZiBG VDIxCQkJCS8qIEV4Y2VwdCBmb3IgRm9ydHVuZS4gKi8KKyNpZm5kZWYgRlQxOAorI2lmbmRlZiBC RUxMVjEwCQkJCS8qIEFuZCBCZWxsIExhYnMgUmVzZWFyY2ggVU5JWCBWMTAgKi8KKyNkZWZpbmUg QlNENDIKKyNlbmRpZiAvKiBCRUxMVjEwICovCisjZW5kaWYgLyogRlQxOCAqLworI2VuZGlmIC8q IEZUMjEgKi8KKyNlbmRpZiAvKiBNQVhOQU1MRU4gKi8KKyNlbmRpZiAvKiBCU0Q0ICovCisKKyNp ZmRlZiBTVU5PUzQxCQkJCS8qIEZyb20gQ2hyaXN0aWFuIENvcnRpICovCisjZGVmaW5lIEJTRDQ0 T1JQT1NJWAkJCS8qIFVuaSBTdHV0dGdhcnQgKi8KKyNkZWZpbmUgU1ZPUlBPU0lYCQkJLyogRmVi cnVhcnkgMjAxMCAqLworI2luY2x1ZGUgPHRlcm1pb3MuaD4KKyNpbmNsdWRlIDxzeXMvaW9jdGwu aD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbmRpZgkvKiBT VU5PUzQxICovCisKKyNpZmRlZiBTTkk1NDIKKyNpbmNsdWRlIDxzeXMvZmlsaW8uaD4JCQkvKiAy OTkgZm9yIEZJT05SRUFEICovCisjZW5kaWYJLyogU05JNTQyICovCisKKy8qCisgIE1pbml4IDIu MCBzdXBwb3J0IGFkZGVkIGJ5IFRlcnJ5IE1jQ29ubmVsbCwKKyAgU3lyYWN1c2UgVW5pdmVyc2l0 eSA8dG1jQGJhcm55YXJkLnN5ci5lZHU+CisgIE5vIG1vcmUgc2d0dHkgaW50ZXJmYWNlLCBwb3Np eCBjb21wbGlhbnQuCisqLworI2lmZGVmIE1JTklYMgorI2RlZmluZSBfTUlOSVggICAvKiBOZWVk ZWQgZm9yIHNvbWUgTWluaXggaGVhZGVyIGZpbGVzICovCisjZGVmaW5lIEJTRDQ0T1JQT1NJWAor I2RlZmluZSBTVk9SUE9TSVgKKyNpZm5kZWYgTUlOSVgzCisjZGVmaW5lIERDTFRJTUVWQUwKKyNl bmRpZgkvKiBNSU5JWDMgKi8KKyNkZWZpbmUgTk9GSUxFSAorI2luY2x1ZGUgPHN5cy90eXBlcy5o PgorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2luY2x1ZGUgPHRlcm1pb3MuaD4KKyNpbmNsdWRl IDxsaW1pdHMuaD4KKyN1bmRlZiBUSU9DR0VUQyAgICAvKiBkZWZpbmVkIGluIHN5cy9pb2N0bC5o LCBidXQgbm90IHJlYWxseSBzdXBwb3J0ZWQgKi8KKyNkZWZpbmUgVEFOREVNIDAKKyNlbmRpZiAv KiBNSU5JWDIgKi8KKworLyoKKyBNSU5JWCAxLjAgc3VwcG9ydCBhZGRlZCBieSBDaGFybGVzIEhl ZHJpY2ssCisgUnV0Z2VycyBVbml2ZXJzaXR5IDxoZWRyaWNrQGFyYW1pcy5ydXRnZXJzLmVkdT4u CisgTUlOSVggYWxzbyBoYXMgVjcgZW5hYmxlZC4KKyovCisjaWZkZWYgTUlOSVgKKyNkZWZpbmUg VEFOREVNIDAKKyNkZWZpbmUgTVlSRUFECisjZGVmaW5lIE5PU1lTSU9DVExICisjaW5jbHVkZSA8 bGltaXRzLmg+CisjZW5kaWYgLyogTUlOSVggKi8KKworI2lmZGVmIENLX1JFRElSCQkvKiA8c3lz L3dhaXQuaD4gbmVlZGVkIG9ubHkgZm9yIFJFRElSRUNUIGNvbW1hbmQuICovCisvKgorICBJZiBh bnlib2R5IGNhbiBmaWd1cmUgb3V0IGhvdyB0byBtYWtlIHRoaXMgd29yayB3aXRoIE5lWFRTVEVQ LCBiZQorICBteSBndWVzdCEgIChOZVhUQmxhaC9OZVhUQmxhaC9ic2Qvc3lzL3dhaXQuaCBkb2Vz IG5vdCBkZWZpbmUgV0VYSVRTVEFUVVMpCisqLworI2lmbmRlZiBDS19XQUlUX0gJCQkvKiBJZiB3 YWl0Lmggbm90IGFscmVhZHkgaW5jbHVkZWQuLi4gKi8KKyNpZmRlZiBPU0YJCQkJLyogZm9yY2Ug T1NGIHRvIHNlbGVjdCBQT1NJWCB3YWl0ICovCisjaWZkZWYgX0JTRAkJCQkvKiBpbnN0ZWFkIG9m IEJTRCAoc2VlIGNrY2RlYi5oKSAqLworI2RlZmluZSBDS19PU0ZfQlNECisjdW5kZWYgX0JTRAor I2VuZGlmIC8qIF9CU0QgKi8KKyNlbmRpZiAvKiBPU0YgKi8KKyNpbmNsdWRlIDxzeXMvd2FpdC5o PgkJCS8qIEluY2x1ZGUgaXQgKi8KKyNpZmRlZiBPU0YKKyNpZmRlZiBDS19PU0ZfQlNECisjZGVm aW5lIF9CU0QJCQkJLyogUmVzdG9yZSBpdCAqLworI3VuZGVmIENLX09TRl9CU0QKKyNlbmRpZiAv KiBDS19PU0ZfQlNEICovCisjZW5kaWYgLyogT1NGICovCisjZW5kaWYgLyogQ0tfV0FJVF9IICov CisjZW5kaWYgLyogQ0tfUkVESVIgKi8KKworI2luY2x1ZGUgImNrdXZlci5oIgkJCS8qIFZlcnNp b24gaGVyYWxkICovCitjaGFyICpja3hzeXMgPSBIRVJBTEQ7CisKKyNpZmRlZiBDS19VVFNOQU1F CisjaW5jbHVkZSA8c3lzL3V0c25hbWUuaD4KKworI2lmZGVmIFRSVTY0CQkJCS8qIFRydTY0IFVO SVggNC4wIGFuZCBsYXRlciAqLworLyogVmVyaWZpZWQgb24gVHJ1NjQgNC4wRiAtIG1pZ2h0IGJy ZWFrIG9uIDQuMEUgb3IgZWFybGllciAqLworI2luY2x1ZGUgPHN5cy9zeXNpbmZvLmg+CQkvKiAo ZG9uJ3Qga25vdyBhYm91dCBPU0YvMSBvciBEVSkgKi8KKyNpbmNsdWRlIDxtYWNoaW5lL2hhbF9z eXNpbmZvLmg+CisjZW5kaWYgLyogVFJVNjQgKi8KKworI2lmZGVmIFNPTEFSSVMyNQkJCS8qIFNv bGFyaXMgMi41IGFuZCBsYXRlciAqLworI2luY2x1ZGUgPHN5cy9zeXN0ZW1pbmZvLmg+CQkvKiAo ZG9uJ3Qga25vdyBhYm91dCBlYXJsaWVyIG9uZXMpICovCisjZW5kaWYgLyogU09MQVJJUzI1ICov CisKKyNpZmRlZiBVVzcKKyNpZm5kZWYgU1lTX05NTE4KKyNkZWZpbmUgU1lTX05NTE4gMjU3Cisj ZW5kaWYgLyogTk1MTiAqLworI2VuZGlmIC8qIFVXNyAqLworI2lmZGVmIEhQVVg5UExVUworc3Rh dGljIGludCBocGlzODAwID0gMDsKKyNlbmRpZiAvKiBIUFVYOVBMVVMgKi8KKyNpZmRlZiBTWVNf Tk1MTgorI2RlZmluZSBDS19TWVNOTUxOIFNZU19OTUxOCisjZWxzZQorI2lmZGVmIF9TWVNfTk1M TgorI2RlZmluZSBDS19TWVNOTUxOIF9TWVNfTk1MTgorI2Vsc2UKKyNpZmRlZiBVVFNMRU4KKyNk ZWZpbmUgQ0tfU1lTTk1MTiBVVFNMRU4KKyNlbHNlCisjZGVmaW5lIENLX1NZU05NTE4gMzEKKyNl bmRpZiAvKiBVVFNMRU4gKi8KKyNlbmRpZiAvKiBfU1lTX05NTE4gKi8KKyNlbmRpZiAvKiBTWVNf Tk1MTiAqLworY2hhciB1bm1fbWNoW0NLX1NZU05NTE4rMV0gPSB7ICdcMCcsICdcMCcgfTsKK2No YXIgdW5tX21vZFtDS19TWVNOTUxOKzFdID0geyAnXDAnLCAnXDAnIH07CitjaGFyIHVubV9uYW1b Q0tfU1lTTk1MTisxXSA9IHsgJ1wwJywgJ1wwJyB9OworY2hhciB1bm1fcmVsW0NLX1NZU05NTE4r MV0gPSB7ICdcMCcsICdcMCcgfTsKK2NoYXIgdW5tX3ZlcltDS19TWVNOTUxOKzFdID0geyAnXDAn LCAnXDAnIH07CisjZW5kaWYgLyogQ0tfVVRTTkFNRSAqLworCisjaWZkZWYgQ0lFCisjaW5jbHVk ZSA8c3RhdC5oPgkJCS8qIEZvciBjaGFzaW5nIHN5bWxpbmtzLCBldGMuICovCisjZWxzZQorI2lu Y2x1ZGUgPHN5cy9zdGF0Lmg+CisjZW5kaWYgLyogQ0lFICovCisKKyNpZmRlZiBRTlgJCQkJLyog Mjk5ICovCisjaWZuZGVmIElYQU5ZCisjZGVmaW5lIElYQU5ZIDAKKyNlbmRpZgkvKiBJWEFOWSAq LworI2VuZGlmCS8qIFFOWCAqLworCisvKiBVVUNQIGxvY2tmaWxlIG1hdGVyaWFsLi4uICovCisK KyNpZm5kZWYgTk9VVUNQCisjaWZkZWYgVVNFVFRZTE9DSworI2lmZGVmIEhBVkVfTE9DS0RFVgkJ CS8qIFJlZCBIYXQgYmF1ZGJveS9sb2NrZGV2ICovCisvKgorICBXYXRjaCBvdXQ6IGJhdWRib3ku aCByZWZlcmVuY2VzIG9wZW4oKSB3aXRob3V0IG1ha2luZyBzdXJlIGl0IGhhcyBiZWVuCisgIGRl Y2xhcmVkLCByZXN1bHRpbmcgaW4gd2FybmluZ3Mgb24gYXQgbGVhc3QgUmVkIEhhdCA3LjMuICBJ dCdzIGRlY2xhcmVkIGluCisgIGZjbnRsLmgsIGJ1dCB3ZSBkb24ndCBpbmNsdWRlIHRoYXQgdW50 aWwgbGF0ZXIuICBJbiB0aGlzIGNhc2Ugb25seSwgd2UKKyAgaW5jbHVkZSBpdCBoZXJlLCBhbmQg dGhlbiB0aGUgc2Vjb25kIGluY2x1ZGUgaXMgaGFybWxlc3MgYmVjYXVzZSBpbiBSZWQgSGF0Cisg IExpbnV4ICh0aGUgb25seSBwbGFjZSB3aGVyZSB5b3UgZmluZCBiYXVkYm95LmgpIGZjbnRsLmgg aXMgcHJvdGVjdGVkIGZyb20KKyAgbXVsdGlwbGUgaW5jbHVzaW9uIGJ5IF9GQ05UTF9ILiAgIC0g ZmRjLCAxMCBNYXkgMjAwNC4KKworICBOT1RFOiBBbHRob3VnaCBMaW51eCAvdXNyL3NiaW4vbG9j a2RldiBvYnZpYXRlcyB0aGUgbmVlZCBmb3Igc2V0dWlkIG9yCisgIHNldGdpZCBiaXRzIHRvIGFj Y2VzcyB0aGUgbG9ja2ZpbGUsIEMtS2VybWl0IHdpbGwgc3RpbGwgbmVlZCB0aGVtIHRvIGFjY2Vz cworICB0aGUgc2VyaWFsIHBvcnQgaXRzZWxmIHVubGVzcyB0aGUgcG9ydCBpcyBvcGVuIGZvciB3 b3JsZCByZWFkL3dyaXRlLgorICBOb3JtYWxseSBzZXRnaWQgdXVjcCBkb2VzIHRoZSB0cmljay4K KworICBFeHRyYTogSEFWRV9MT0NLREVWIGhhcyBiZWVuIGFkZGVkIGFscyBvcGVuU3VTRSA+PSAx MS4zIGRvZXNuJ3QgdXNlIGJhdWRib3kKKyAgYnV0IHR0eWxvY2suICAtIGpiLCAyNiBKdWwgMjAx MAorKi8KKyNpbmNsdWRlIDxmY250bC5oPgkJCS8qIFRoaXMgaGFzIHRvIGNvbWUgYmVmb3JlIGJh dWRib3kgKi8KKyNpZmRlZiBIQVZFX0JBVURCT1kJCQkvKiBSZWQgSGF0IGJhdWRib3kvbG9ja2Rl diAqLworI2luY2x1ZGUgPGJhdWRib3kuaD4KKyNlbHNlICAvKiAhSEFWRV9CQVVEQk9ZICovCQkv KiBvcGVuU3VTRSBsb2NrIHZpYSB0dHlsb2NrICovCisjaW5jbHVkZSA8dHR5bG9jay5oPgorI2Vu ZGlmICAvKiBIQVZFX0JBVURCT1kgKi8KKyNkZWZpbmUgTE9DS19ESVIgIi92YXIvbG9jayIJCS8q IChldmVuIHRob3VnaCB3ZSBkb24ndCBjYXJlKSAqLworCisjZWxzZSAgLyogIUhBVkVfTE9DS0RF ViAqLworCisjaWZkZWYgVVNFX1VVX0xPQ0sKKyNpZmRlZiBfX0ZyZWVCU0RfXworI2luY2x1ZGUg PGxpYnV0aWwuaD4JCQkvKiBGcmVlQlNEICovCisjZWxzZQorI2luY2x1ZGUgPHV0aWwuaD4JCQkv KiBPcGVuQlNEICovCisjZW5kaWYgLyogSEFWRV9MT0NLREVWICovCisjZW5kaWYgLyogX19GcmVl QlNEICovCisjZW5kaWYgLyogVVNFX1VVX0xPQ0sgKi8KKyNlbHNlICAvKiBVU0VUVFlMT0NLICov CisKKy8qIE5hbWUgb2YgVVVDUCB0dHkgZGV2aWNlIGxvY2tmaWxlICovCisKKyNpZmRlZiBMSU5V WEZTU1RORAorI2lmbmRlZiBIREJVVUNQCisjZGVmaW5lIEhEQlVVQ1AKKyNlbmRpZiAvKiBIREJV VUNQICovCisjZW5kaWYgLyogTElOVVhGU1NUTkQgKi8KKworI2lmZGVmIEFDVUNOVFJMCisjZGVm aW5lIExDS0RJUgorI2VuZGlmIC8qIEFDVUNOVFJMICovCisKKy8qCisgIFBJRFNUUklORyBtZWFu cyB1c2UgQVNDSUkgc3RyaW5nIHRvIHJlcHJlc2VudCBwaWQgaW4gbG9ja2ZpbGUuCisqLworI2lm bmRlZiBQSURTVFJJTkcKKyNpZmRlZiBIREJVVUNQCisjZGVmaW5lIFBJRFNUUklORworI2Vsc2UK KyNpZmRlZiBCU0Q0NAorI2RlZmluZSBQSURTVFJJTkcKKyNlbHNlCisjaWZkZWYgUlRBSVgKKyNk ZWZpbmUgUElEU1RSSU5HCisjZWxzZQorI2lmZGVmIEFJWFJTCisjZGVmaW5lIFBJRFNUUklORwor I2Vsc2UKKyNpZmRlZiBDT0hFUkVOVAorI2RlZmluZSBQSURTVFJJTkcKKyNlbmRpZiAvKiBDT0hF UkVOVCAqLworI2VuZGlmIC8qIEFJWFJTICovCisjZW5kaWYgLyogUlRBSVggKi8KKyNlbmRpZiAv KiBCU0Q0NCAqLworI2VuZGlmIC8qIEhEQlVVQ1AgKi8KKyNlbmRpZiAvKiBQSURTVFJJTkcgKi8K KworLyogTm93IHRoZSBQSURTVFJJTkcgZXhjZXB0aW9ucy4uLiAqLworCisjaWZkZWYgUElEU1RS SU5HCisjaWZkZWYgSFBVWAorI3VuZGVmIFBJRFNUUklORworI2VuZGlmIC8qIEhQVVggKi8KKyNl bmRpZiAvKiBQSURTVFJJTkcgKi8KKworI2lmZGVmIF9fYnNkaV9fCQkJCS8qIEJTREkgKGF0IGxl YXN0IHRocnUgMS4xKSAqLworI2lmZGVmIFBJRFNUUklORworI3VuZGVmIFBJRFNUUklORworI2Vu ZGlmIC8qIFBJRFNUUklORyAqLworI2VuZGlmIC8qIF9fYnNkaV9fICovCisKKyNpZmRlZiBPU0Yz MgkJCQkvKiBEaWdpdGFsIFVOSVggKE9TRi8xKSAzLjIgKi8KKyNpZmRlZiBQSURTVFJJTkcKKyN1 bmRlZiBQSURTVFJJTkcKKyNlbmRpZiAvKiBQSURTVFJJTkcgKi8KKyNlbmRpZiAvKiBPU0YzMiAq LworCisvKgorICBMT0NLX0RJUiBpcyB0aGUgbmFtZSBvZiB0aGUgbG9ja2ZpbGUgZGlyZWN0b3J5 LgorICBJZiBMT0NLX0RJUiBpcyBhbHJlYWR5IGRlZmluZWQgKGUuZy4gb24gY29tbWFuZCBsaW5l KSwgd2UgZG9uJ3QgY2hhbmdlIGl0LgorKi8KKworI2lmbmRlZiBMT0NLX0RJUgorI2lmZGVmIE1B Q09TWAorI2RlZmluZSBMT0NLX0RJUiAiL3Zhci9zcG9vbC9sb2NrIgorI2VuZGlmIC8qIE1BQ09T WCAqLworI2VuZGlmLyogTE9DS19ESVIgKi8KKworI2lmbmRlZiBMT0NLX0RJUgorI2lmZGVmIEJT RDQ0CisjaWZkZWYgX18zODZCU0RfXworI2RlZmluZSBMT0NLX0RJUiAiL3Zhci9zcG9vbC9sb2Nr IgorI2Vsc2UKKyNpZmRlZiBfX0ZyZWVCU0RfXworI2RlZmluZSBMT0NLX0RJUiAiL3Zhci9zcG9v bC9sb2NrIgorI2Vsc2UKKyNpZmRlZiBfX05ldEJTRF9fCisjZGVmaW5lIExPQ0tfRElSICIvdmFy L3Nwb29sL2xvY2siCisjZWxzZQorI2lmZGVmIF9fT3BlbkJTRF9fCisjZGVmaW5lIExPQ0tfRElS ICIvdmFyL3Nwb29sL2xvY2siCisjZWxzZQorLyogU28gd2hpY2ggb25lcyBpcyB0aGlzIGZvcj8g Ki8KKy8qIFByb2JhYmx5IG9yaWdpbmFsIDQuNEJTRCBvbiBWYW5nb2doICovCisvKiBQbHVzIHdo byBrbm93cyBhYm91dCBNYWMgT1MgWC4uLiBJdCBkb2Vzbid0IGV2ZW4gaGF2ZSBhIGN1IHByb2dy YW0gKi8KKyNkZWZpbmUgTE9DS19ESVIgIi92YXIvc3Bvb2wvdXVjcCIKKyNlbmRpZiAvKiBfX09w ZW5CU0RfXyAqLworI2VuZGlmIC8qIF9fTmV0QlNEX18gKi8KKyNlbmRpZiAvKiBfX0ZyZWVCU0Rf XyAqLworI2VuZGlmIC8qIF9fMzg2QlNEX18gKi8KKyNlbHNlCisjaWZkZWYgREdVWDQzMAorI2Rl ZmluZSBMT0NLX0RJUiAiL3Zhci9zcG9vbC9sb2NrcyIKKyNlbHNlCisjaWZkZWYgSFBVWDEwCisj ZGVmaW5lIExPQ0tfRElSICIvdmFyL3Nwb29sL2xvY2tzIgorI2Vsc2UKKyNpZmRlZiBSVEFJWAkJ CQkvKiBJQk0gUlQgUEMgQUlYIDIuMi4xICovCisjZGVmaW5lIExPQ0tfRElSICIvZXRjL2xvY2tz IgorI2Vsc2UKKyNpZmRlZiBBSVhSUworI2RlZmluZSBMT0NLX0RJUiAiL2V0Yy9sb2NrcyIKKyNl bHNlCisjaWZkZWYgSVNJSUkKKyNkZWZpbmUgTE9DS19ESVIgIi9ldGMvbG9ja3MiCisjZWxzZQor I2lmZGVmIEhEQlVVQ1AKKyNpZmRlZiBNX1NZUzUKKyNkZWZpbmUgTE9DS19ESVIgIi91c3Ivc3Bv b2wvdXVjcCIKKyNlbHNlCisjaWZkZWYgTV9VTklYCisjZGVmaW5lIExPQ0tfRElSICIvdXNyL3Nw b29sL3V1Y3AiCisjZWxzZQorI2lmZGVmIFNWUjQKKyNkZWZpbmUgTE9DS19ESVIgIi92YXIvc3Bv b2wvbG9ja3MiCisjZWxzZQorI2lmZGVmIFNVTk9TNAorI2RlZmluZSBMT0NLX0RJUiAiL3Zhci9z cG9vbC9sb2NrcyIKKyNlbHNlCisjaWZkZWYgTElOVVhGU1NUTkQKKyNkZWZpbmUgTE9DS19ESVIg Ii92YXIvbG9jayI7CisjZWxzZQorI2RlZmluZSBMT0NLX0RJUiAiL3Vzci9zcG9vbC9sb2NrcyIK KyNlbmRpZiAvKiBMSU5VWEZTU1RORCAqLworI2VuZGlmIC8qIFNVTk9TNCAqLworI2VuZGlmIC8q IFNWUjQgKi8KKyNlbmRpZiAvKiBNX1VOSVggKi8KKyNlbmRpZiAvKiBNX1NZUzUgKi8KKyNlbHNl CisjaWZkZWYgTENLRElSCisjZGVmaW5lIExPQ0tfRElSICIvdXNyL3Nwb29sL3V1Y3AvTENLIgor I2Vsc2UKKyNpZmRlZiBDT0hFUkVOVAorI2RlZmluZSBMT0NLX0RJUiAiL3Vzci9zcG9vbC91dWNw IgorI2Vsc2UKKyNkZWZpbmUgTE9DS19ESVIgIi91c3Ivc3Bvb2wvdXVjcCIKKyNlbmRpZiAvKiBD T0hFUkVOVCAqLworI2VuZGlmIC8qIExDS0RJUiAqLworI2VuZGlmIC8qIEhEQlVVQ1AgKi8KKyNl bmRpZiAvKiBJU0lJSSAqLworI2VuZGlmIC8qIEFJWFJTICovCisjZW5kaWYgLyogUlRBSVggKi8K KyNlbmRpZiAvKiBIUFVYMTAgKi8KKyNlbmRpZiAvKiBER1VYNDMwICovCisjZW5kaWYgLyogQlNE NDQgKi8KKyNlbmRpZiAvKiAhTE9DS19ESVIgKG91dHNpZGUgaWZuZGVmKSAqLworCisjaWZkZWYg T1NGMgkJCQkvKiBPU0YvMSAyLjAgb3IgbGF0ZXIgKi8KKyNpZmRlZiBMT0NLX0RJUgkJCQkvKiAo bWF5YmUgMS54IHRvbywgd2hvIGtub3dzLi4uKSAqLworI3VuZGVmIExPQ0tfRElSCisjZGVmaW5l IExPQ0tfRElSICIvdmFyL3Nwb29sL2xvY2tzIgorI2VuZGlmIC8qIExPQ0tfRElSICovCisjZW5k aWYgLyogT1NGMiAqLworCisjaWZkZWYgQ09NTUVOVAorLyogU29ycnkgbm8gbW9yZSBsb2NrZigp IC0tIHdlIGxvY2sgZmlyc3QgYW5kIFRIRU4gb3BlbiB0aGUgZGV2aWNlLiAqLworI2lmZGVmIFNW UjQKKyNpZm5kZWYgQlNENDQKKyNpZm5kZWYgTE9DS0YKKyNkZWZpbmUgTE9DS0YJCQkJLyogVXNl IGxvY2tmKCkgb24gdHR5IGRldmljZSBpbiBTVlI0ICovCisjZW5kaWYgLyogTE9DS0YgKi8KKyNl bmRpZiAvKiBCU0Q0NCAqLworI2VuZGlmIC8qIFNWUjQgKi8KKyNlbmRpZiAvKiBDT01NRU5UICov CisKKyNpZmRlZiBOT0xPQ0tGCQkJCS8qIEJ1dCBOT0xPQ0tGIGNhbmNlbHMgTE9DS0YgKi8KKyNp ZmRlZiBMT0NLRgorI3VuZGVmIExPQ0tGCisjZW5kaWYgLyogTE9DS0YgKi8KKyNlbmRpZiAvKiBO T0xPQ0tGICovCisKKy8qIE1vcmUgYWJvdXQgdGhpcyBiZWxvdy4uLiAqLworCisjZW5kaWYgLyog VVNFVFRZTE9DSyAqLworI2VuZGlmIC8qIE5PVVVDUCAqLworCisvKgorICBNWVJFQUQgbWVhbnMg dXNlIG91ciBpbnRlcm5hbGx5IGRlZmluZWQgbm9uYmxvY2tpbmcgYnVmZmVyZWQgcmVhZCByb3V0 aW5lLgorKi8KKyNpZmRlZiBBVFRTVgorI2RlZmluZSBNWVJFQUQKKyNlbmRpZiAvKiBBVFRTViAq LworCisjaWZkZWYgQVRUNzMwMAorI2lmbmRlZiBNWVJFQUQKKyNkZWZpbmUgTVlSRUFECisjZW5k aWYgLyogTVlSRUFEICovCisvKiBiaXRzIGZvciBhdHRtb2RlbTogaW50ZXJuYWwgbW9kZW0gaW4g dXNlLCByZXN0YXJ0IGdldHR5ICovCisjZGVmaW5lIElTTU9ERU0gMQorI2RlZmluZSBET0dFVFkg NTEyCisjZW5kaWYgIC8qIEFUVDczMDAgKi8KKworI2lmZGVmIEJTRDQyCisjZGVmaW5lIE1ZUkVB RAorI2VuZGlmIC8qIEJTRDQyICovCisKKyNpZmRlZiBQT1NJWAorI2RlZmluZSBNWVJFQUQKKyNl bmRpZiAvKiBQT1NJWCAqLworI2lmZGVmIF9fYnNkaV9fCisjaWZuZGVmIE9fTkRFTEFZCisjZGVm aW5lIE9fTkRFTEFZIE9fTk9OQkxPQ0sKKyNlbmRpZiAvKiBPX05ERUxBWSAqLworI2VuZGlmIC8q IF9fYnNkaV9fICovCisKKy8qCisgVmFyaWFibGVzIGF2YWlsYWJsZSB0byBvdXRzaWRlIHdvcmxk OgorCisgICBkZnR0eSAgLS0gUG9pbnRlciB0byBkZWZhdWx0IHR0eSBuYW1lIHN0cmluZywgbGlr ZSAiL2Rldi90dHkiLgorICAgZGZsb2MgIC0tIDAgaWYgZGZ0dHkgaXMgY29uc29sZSwgMSBpZiBl eHRlcm5hbCBsaW5lLgorICAgZGZwcnR5IC0tIERlZmF1bHQgcGFyaXR5CisgICBkZmZsb3cgLS0g RGVmYXVsdCBmbG93IGNvbnRyb2wKKyAgIGNreGVjaCAtLSBGbGFnIGZvciB3aG8gZWNob2VzIGNv bnNvbGUgdHlwZWluOgorICAgICAxIC0gVGhlIHByb2dyYW0gKHN5c3RlbSBlY2hvIGlzIHR1cm5l ZCBvZmYpCisgICAgIDAgLSBUaGUgc3lzdGVtIChvciBmcm9udCBlbmQsIG9yIHRlcm1pbmFsKS4K KyAgIGZ1bmN0aW9ucyB0aGF0IHdhbnQgdG8gZG8gdGhlaXIgb3duIGVjaG9pbmcgc2hvdWxkIGNo ZWNrIHRoaXMgZmxhZworICAgYmVmb3JlIGRvaW5nIHNvLgorCisgICBmbGZuYW0gIC0tIE5hbWUg b2YgbG9jayBmaWxlLCBpbmNsdWRpbmcgaXRzIHBhdGgsIGUuZy4sCisgICAgICAgICAgICAgICAg Ii91c3Ivc3Bvb2wvdXVjcC9MQ0suLmN1bDAiIG9yICIvZXRjL2xvY2tzL3R0eTc3IgorICAgbGtm bGZuICAtLSBOYW1lIG9mIGxpbmsgdG8gbG9jayBmaWxlLCBpbmNsdWRpbmcgaXRzIHBhdGhzCisg ICBoYXNsb2NrIC0tIEZsYWcgc2V0IGlmIHRoaXMga2VybWl0IGVzdGFibGlzaGVkIGEgdXVjcCBs b2NrLgorICAgbG9ja3BpZCAtLSBQSUQgb2Ygb3RoZXIgcHJvY2VzcyB0aGF0IGhhcyBkZXNpcmVk IGxpbmUgb3BlbiwgYXMgc3RyaW5nLgorICAgYmFja2dyZCAtLSBGbGFnIGluZGljYXRpbmcgcHJv Z3JhbSBleGVjdXRpbmcgaW4gYmFja2dyb3VuZCAoICYgb24KKyAgICAgICAgICAgICAgICBlbmQg b2Ygc2hlbGwgY29tbWFuZCkuIFVzZWQgdG8gaWdub3JlIElOVCBhbmQgUVVJVCBzaWduYWxzLgor ICAgcnR1X2J1ZyAtLSBTZXQgYnkgc3RwdHJhcCgpLiAgUlRVIHRyZWF0cyBeWiBhcyBFT0YgKGJ1 dCBvbmx5IHdoZW4gd2UgaGFuZGxlCisgICAgICAgICAgICAgICAgU0lHVFNUUCkKKworIEZ1bmN0 aW9ucyBmb3IgYXNzaWduZWQgY29tbXVuaWNhdGlvbiBsaW5lIChlaXRoZXIgZXh0ZXJuYWwgb3Ig Y29uc29sZSB0dHkpOgorCisgICBzeXNpbml0KCkgICAgICAgICAgICAgICAtLSBTeXN0ZW0gZGVw ZW5kZW50IHByb2dyYW0gaW5pdGlhbGl6YXRpb24KKyAgIHN5c2NsZWFudXAoKSAgICAgICAgICAg IC0tIFN5c3RlbSBkZXBlbmRlbnQgcHJvZ3JhbSBzaHV0ZG93bgorICAgdHRvcGVuKHR0bmFtZSxs b2NhbCxtZG10eXAsdGltbykgLS0gT3BlbiB0aGUgbmFtZWQgdHR5IGZvciBleGNsdXNpdmUgYWNj ZXNzLgorICAgdHRjbG9zKCkgICAgICAgICAgICAgICAgLS0gQ2xvc2UgJiByZXNldCB0aGUgdHR5 LCByZWxlYXNpbmcgYW55IGFjY2VzcyBsb2NrLgorICAgdHRzc3BkKGNwcykgICAgICAgICAgICAg LS0gU2V0IHRoZSB0cmFuc21pc3Npb24gc3BlZWQgb2YgdGhlIHR0eS4KKyAgIHR0Z3NwZCgpICAg ICAgICAgICAgICAgIC0tIEdldCAocmVhZCkgdGhlIHRoZSB0cmFuc21pc3Npb24gc3BlZWQgb2Yg dGhlIHR0eS4KKyAgIHR0cGt0KHNwZWVkLGZsb3cscGFyaXR5KSAtLSBQdXQgdGhlIHR0eSBpbiBw YWNrZXQgbW9kZSBhbmQgc2V0IHRoZSBzcGVlZC4KKyAgIHR0dnQoc3BlZWQsZmxvdykgICAgICAg IC0tIFB1dCB0aGUgdHR5IGluIHZpcnR1YWwgdGVybWluYWwgbW9kZS4KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgb3IgaW4gRElBTElORyBvciBDT05ORUNURUQgbW9kZW0gY29udHJv bCBzdGF0ZS4KKyAgIHR0cmVzKCkgICAgICAgICAgICAgICAgIC0tIFJlc3RvcmUgb3JpZ2luYWwg dHR5IG1vZGVzLgorICAgdHRzY2FycihjYXJyaWVyKSAgICAgICAgLS0gU2V0IGNhcnJpZXIgY29u dHJvbCBtb2RlLCBvbi9vZmYvYXV0by4KKyAgIHR0aW5sKGRlc3QsbWF4LHRpbW8pICAgIC0tIFRp bWVkIHJlYWQgbGluZSBmcm9tIHRoZSB0dHkuCisgICB0dGluYyh0aW1vKSAgICAgICAgICAgICAt LSBUaW1lZCByZWFkIGNoYXJhY3RlciBmcm9tIHR0eS4KKyAgIG15cmVhZCgpICAgICAgICAgICAg ICAgIC0tIFJhdyBtb2RlIGJ1bGsgYnVmZmVyIHJlYWQsIGdpdmVzIHN1YnNlcXVlbnQKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnMgb25lIGF0IGEgdGltZSBhbmQgc2ltdWxh dGVzIEZJT05SRUFELgorICAgbXl1bnJkKGMpICAgICAgICAgICAgICAgLS0gUGxhY2VzIGMgYmFj ayBpbiBidWZmZXIgdG8gYmUgcmVhZCAob25lIG9ubHkpCisgICB0dGNoaygpICAgICAgICAgICAg ICAgICAtLSBTZWUgaG93IG1hbnkgY2hhcmFjdGVycyBpbiB0dHkgaW5wdXQgYnVmZmVyLgorICAg dHR4aW4obixidWYpICAgICAgICAgICAgLS0gUmVhZCBuIGNoYXJhY3RlcnMgZnJvbSB0dHkgKHVu dGltZWQpLgorICAgdHRvbChzdHJpbmcsbGVuZ3RoKSAgICAgLS0gV3JpdGUgYSBzdHJpbmcgdG8g dGhlIHR0eS4KKyAgIHR0b2MoYykgICAgICAgICAgICAgICAgIC0tIFdyaXRlIGEgY2hhcmFjdGVy IHRvIHRoZSB0dHkuCisgICB0dGZsdWkoKSAgICAgICAgICAgICAgICAtLSBGbHVzaCB0dHkgaW5w dXQgYnVmZmVyLgorICAgdHRzbmRiKCkgICAgICAgICAgICAgICAgLS0gU2VuZCBCUkVBSyBzaWdu YWwuCisgICB0dHNuZGxiKCkgICAgICAgICAgICAgICAtLSBTZW5kIExvbmcgQlJFQUsgc2lnbmFs LgorCisgICB0dGxvY2sodHRuYW1lKSAgICAgICAgICAtLSAiTG9jayIgdHR5IGRldmljZSBhZ2Fp bnN0IHV1Y3AgY29sbGlzaW9ucy4KKyAgIHR0dW5sY2soKSAgICAgICAgICAgICAgIC0tIFVubG9j ayB0dHkgZGV2aWNlLgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgQVRUNzMw MC9Vbml4IFBDLCBTeXN0ZW0gVjoKKyAgIGF0dGRpYWwodHRuYW1lLHNwZWVkLHRlbG5icikgLS0g ZGlhbHMgQVRUNzMwMC9Vbml4IFBDIGludGVybmFsIG1vZGVtCisgICBvZmZnZXR0eSh0dG5hbWUp ICAgICAgICAtLSBUdXJucyBvZmYgZ2V0dHkoMW0pIGZvciBjb21tcyBsaW5lCisgICBvbmdldHR5 KHR0bmFtZSkgICAgICAgICAtLSBSZXN0b3JlcyBnZXR0eSgpIHRvIGNvbW1zIGxpbmUKKyovCisK Ky8qCitGdW5jdGlvbnMgZm9yIGNvbnNvbGUgdGVybWluYWw6CisKKyAgIGNvbmdtKCkgICAtLSBH ZXQgY29uc29sZSB0ZXJtaW5hbCBtb2Rlcy4KKyAgIGNvbmNiKGVzYykgLS0gUHV0IHRoZSBjb25z b2xlIGluIHNpbmdsZS1jaGFyYWN0ZXIgd2FrZXVwIG1vZGUgd2l0aCBubyBlY2hvLgorICAgY29u YmluKGVzYykgLS0gUHV0IHRoZSBjb25zb2xlIGluIGJpbmFyeSAocmF3KSBtb2RlLgorICAgY29u cmVzKCkgIC0tIFJlc3RvcmUgdGhlIGNvbnNvbGUgdG8gbW9kZSBvYnRhaW5lZCBieSBjb25nbSgp LgorICAgY29ub2MoYykgIC0tIFVuYnVmZmVyZWQgb3V0cHV0LCBvbmUgY2hhcmFjdGVyIHRvIGNv bnNvbGUuCisgICBjb25vbChzKSAgLS0gVW5idWZmZXJlZCBvdXRwdXQsIG51bGwtdGVybWluYXRl ZCBzdHJpbmcgdG8gdGhlIGNvbnNvbGUuCisgICBjb25vbGEocykgLS0gVW5idWZmZXJlZCBvdXRw dXQsIGFycmF5IG9mIHN0cmluZ3MgdG8gdGhlIGNvbnNvbGUuCisgICBjb254byhuLHMpIC0tIFVu YnVmZmVyZWQgb3V0cHV0LCBuIGNoYXJhY3RlcnMgdG8gdGhlIGNvbnNvbGUuCisgICBjb25jaGso KSAgLS0gQ2hlY2sgaWYgY2hhcmFjdGVycyBhdmFpbGFibGUgYXQgY29uc29sZSAoYnNkIDQuMiku CisgICAgICAgICAgICAgICAgQ2hlY2sgaWYgZXNjYXBlIGNoYXIgKF5cKSB0eXBlZCBhdCBjb25z b2xlIChTeXN0ZW0gSUlJL1YpLgorICAgY29uaW5jKHRpbW8pICAtLSBUaW1lZCBnZXQgYSBjaGFy YWN0ZXIgZnJvbSB0aGUgY29uc29sZS4KKyAgIGNvbmdrcyh0aW1vKSAgLS0gVGltZWQgZ2V0IGtl eWJvYXJkIHNjYW4gY29kZS4KKyAgIGNvbmludCgpICAtLSBFbmFibGUgdGVybWluYWwgaW50ZXJy dXB0cyBvbiB0aGUgY29uc29sZSBpZiBub3QgYmFja2dyb3VuZC4KKyAgIGNvbm5vaSgpICAtLSBE aXNhYmxlIHRlcm1pbmFsIGludGVycnVwdHMgb24gdGhlIGNvbnNvbGUgaWYgbm90IGJhY2tncm91 bmQuCisKK1RpbWUgZnVuY3Rpb25zCisKKyAgIG1zbGVlcChtKSAtLSBNaWxsaXNlY29uZCBzbGVl cAorICAgenRpbWUoJnMpIC0tIFJldHVybiBwb2ludGVyIHRvIGRhdGUvdGltZSBzdHJpbmcKKyAg IHJ0aW1lcigpIC0tICBSZXNldCB0aW1lcgorICAgZ3RpbWVyKCkgIC0tIEdldCBlbGFwc2VkIHRp bWUgc2luY2UgbGFzdCBjYWxsIHRvIHJ0aW1lcigpCisqLworCisvKiBDb25kaXRpb25hbCBJbmNs dWRlcyAqLworCisvKiBXaGV0aGVyIHRvIGluY2x1ZGUgPHN5cy9maWxlLmg+ICovCisKKyNpZmRl ZiBSVFUJCQkJLyogUlRVIGRvZXNuJ3QgKi8KKyNkZWZpbmUgTk9GSUxFSAorI2VuZGlmIC8qIFJU VSAqLworCisjaWZkZWYgQ0lFCQkJCS8qIENJRSBkb2VzLiAqLworI3VuZGVmIE5PRklMRUgKKyNl bmRpZiAvKiBDSUUgKi8KKworI2lmZGVmIEJTRDQxCQkJCS8qIDQuMSBCU0QgZG9lc24ndCAqLwor I2RlZmluZSBOT0ZJTEVICisjZW5kaWYgLyogQlNENDEgKi8KKworI2lmZGVmIGlzNjhrCQkJCS8q IEludGVncmF0ZWQgU29sdXRpb25zIDY4MDAwIFVOSVggICovCisjZGVmaW5lIE5PRklMRUgJCQkJ LyogZS5nLiBvbiBQbGV4dXggUDYwIGFuZCBTdW4tMSAqLworI2VuZGlmIC8qIGlzNjhrICovCisK KyNpZmRlZiBNSU5JWAkJCQkvKiBNSU5JWCAqLworI2RlZmluZSBOT0ZJTEVICisjZW5kaWYgLyog TUlOSVggKi8KKworI2lmZGVmIENPSEVSRU5UCQkJCS8qIENvaGVyZW50ICovCisjZGVmaW5lIE5P RklMRUgKKyNlbmRpZiAvKiBDT0hFUkVOVCAqLworCisjaWZuZGVmIE5PRklMRUgJCQkJLyogTm93 IGluY2x1ZGUgaWYgc2VsZWN0ZWQuICovCisjaW5jbHVkZSA8c3lzL2ZpbGUuaD4KKyNlbmRpZiAv KiBOT0ZJTEVIICovCisKKy8qIFBPU0lYICovCisKKyNpZmRlZiBCU0Q0NE9SUE9TSVgJCQkvKiBQ T1NJWCB1c2VzIHRlcm1pb3MuaCAqLworI2RlZmluZSBURVJNSU9TCisjaWZkZWYgX19ic2RpX18K KyNpZmRlZiBQT1NJWAorI3VuZGVmIF9QT1NJWF9TT1VSQ0UJCQkvKiBHZXQgZXh0cmEgc3R1ZmYg ZnJvbSB0ZXJtaW9zLmggKi8KKyNlbmRpZiAvKiBQT1NJWCAqLworI2VuZGlmIC8qIF9fYnNkaV9f ICovCisjaW5jbHVkZSA8dGVybWlvcy5oPgorI2lmZGVmIExJTlVYCisjaW5jbHVkZSA8c3lzL2lv Y3RsLmg+CisjZW5kaWYgLyogTElOVVggKi8KKyNpZmRlZiBRTlgxNgorI2luY2x1ZGUgPGlvY3Rs Lmg+CisjZWxzZQorI2lmZGVmIFFOWDYKKyNpbmNsdWRlIDxpb2N0bC5oPgorI2VuZGlmIC8qIFFO WDYgKi8KKyNlbmRpZiAvKiBRTlgxNiAqLworI2lmZGVmIF9fYnNkaV9fCisjaWZkZWYgUE9TSVgK KyNkZWZpbmUgX1BPU0lYX1NPVVJDRQorI2VuZGlmIC8qIFBPU0lYICovCisjZW5kaWYgLyogX19i c2RpX18gKi8KKyNpZm5kZWYgQlNENDQJCQkJLyogUmVhbGx5IFBPU0lYICovCisjaWZuZGVmIENL X1FOWDMyCQkJLyogd2FzIENLX1FOWDMyICovCisjZGVmaW5lIE5PU1lTSU9DVExICQkJLyogTm8g aW9jdGwncyBhbGxvd2VkLiAqLworI3VuZGVmIHVsdHJpeAkJCQkvKiBUdXJuIG9mZiBhbnkgdWx0 cml4IGZlYXR1cmVzLiAqLworI2VuZGlmIC8qIENLX1FOWDMyICovCisjZW5kaWYgLyogQlNENDQg Ki8KKyNlbmRpZiAvKiBQT1NJWCAqLworCisvKiBTeXN0ZW0gSUlJLCBTeXN0ZW0gViAqLworCisj aWZkZWYgQVRUU1YKKyNpZm5kZWYgQlNENDQKKyNpZm5kZWYgUE9TSVgKKyNpbmNsdWRlIDx0ZXJt aW8uaD4KKyNlbmRpZiAvKiBQT1NJWCAqLworI2VuZGlmIC8qIEJTRDQ0ICovCisjaWZkZWYgVEVS TUlPWAorLyogTmVlZCB0aGlzIGZvciB0ZXJtaW94IHN0cnVjdHVyZSwgUlRTL0NUUyBhbmQgRFRS L0NEIGZsb3cgY29udHJvbCAqLworI2luY2x1ZGUgPHRlcm1pb3guaD4KKyAgc3RydWN0IHRlcm1p b3ggcmN0c3g7CisjZWxzZQorI2lmZGVmIFNURVJNSU9YCisjaWZkZWYgU0NPX09TUjUwNAorLyog U29ycnksIHRoaXMgaXMgdHJ1bHkgZGlzZ3VzdGluZyBidXQgaXQncyBTQ08ncyBmYXVsdC4gKi8K KyNpZm5kZWYgX1NWSUQzCisjZGVmaW5lIF9DS19TVklEM19YCisjZGVmaW5lIF9TVklEMworI2Vu ZGlmIC8qIF9TVklEMyAqLworI2VuZGlmIC8qIFNDT19PU1I1MDQgKi8KKyNpbmNsdWRlIDxzeXMv dGVybWlveC5oPgorICBzdHJ1Y3QgdGVybWlveCByY3RzeDsKKyNpZmRlZiBDS19TVklEM19YCisj dW5kZWYgX1NWSUQzCisjdW5kZWYgQ0tfU1ZJRDNfWAorI2VuZGlmIC8qIENLX1NWSUQzX1ggKi8K KyNlbmRpZiAvKiBTVEVSTUlPWCAqLworI2VuZGlmIC8qIFRFUk1JT1ggKi8KKyNlbmRpZiAvKiBB VFRTViAqLworCisjaWZkZWYgQ09IRVJFTlQJCQkvKiBVc2UgdGVybWlvLmgsIG5vdCBzZ3R0eS5o IGZvciBDb2hlcmVudCAqLworI2luY2x1ZGUgPHRlcm1pby5oPgorI2VuZGlmIC8qIENPSEVSRU5U ICovCisKKyNpZmRlZiBNSU5JWAkJCQkvKiBNSU5JWCB1c2VzIGlvY3RsJ3MgKi8KKyNkZWZpbmUg Tk9TWVNJT0NUTEgJCQkvKiBidXQgaGFzIG5vIDxzeXMvaW9jdGwuaD4gKi8KKyNlbmRpZiAvKiBN SU5JWCAqLworCisvKiBPdGhlcnMgKi8KKworI2lmbmRlZiBOT1NZU0lPQ1RMSAkJCS8qIE90aGVy cyB1c2UgaW9jdGwoKSAqLworI2lmZGVmIFNVTjRTNQorLyoKKyAgVGhpcyBpcyB0byBnZXQgcmlk IG9mIGNwcCB3YXJuaW5nIG1lc3NhZ2VzIHRoYXQgb2NjdXIgYmVjYXVzZSBhbGwgb2YKKyAgdGhl c2Ugc3ltYm9scyBhcmUgZGVmaW5lZCBieSBib3RoIHRlcm1pb3MuaCBhbmQgaW9jdGwuaCBvbiB0 aGUgU1VOLgorKi8KKyN1bmRlZiBFQ0hPCisjdW5kZWYgTkwwCisjdW5kZWYgTkwxCisjdW5kZWYg VEFCMAorI3VuZGVmIFRBQjEKKyN1bmRlZiBUQUIyCisjdW5kZWYgWFRBQlMKKyN1bmRlZiBDUjAK KyN1bmRlZiBDUjEKKyN1bmRlZiBDUjIKKyN1bmRlZiBDUjMKKyN1bmRlZiBGRjAKKyN1bmRlZiBG RjEKKyN1bmRlZiBCUzAKKyN1bmRlZiBCUzEKKyN1bmRlZiBUT1NUT1AKKyN1bmRlZiBGTFVTSE8K KyN1bmRlZiBQRU5ESU4KKyN1bmRlZiBOT0ZMU0gKKyNlbmRpZiAvKiBTVU40UzUgKi8KKyNpbmNs dWRlIDxzeXMvaW9jdGwuaD4KKyNlbmRpZiAvKiBOT1NZU0lPQ1RMSCAqLworLyoKKyAgV2UgcmVh bGx5LCByZWFsbHksIFJFQUxMWSB3YW50IEZJT05SRUFELCBiZWNhdXNlIGl0IGlzIHRoZSBvbmx5 IHdheSB0byBmaW5kCisgIG91dCBub3QganVzdCAqaWYqIHN0dWZmIGlzIHdhaXRpbmcgdG8gYmUg cmVhZCwgYnV0IGhvdyBtdWNoLCB3aGljaCBpcworICBjcml0aWNhbCB0byBvdXIgc2xpZGluZy13 aW5kb3cgYW5kIHN0cmVhbWluZyBwcm9jZWR1cmVzLCBub3QgdG8gbWVudGlvbgorICBlZmZpY2ll bmN5IG9mIENPTk5FQ1QsIGV0Yy4KKyovCisjaWZkZWYgQkVMTFYxMAorI2luY2x1ZGUgPHN5cy9m aWxpby5oPgkJCS8qIEZvciBGSU9OUkVBRCAqLworI2lmZGVmIEZJT05SRUFECisjZGVmaW5lIE1Z UkVBRAorI2VuZGlmIC8qIE1ZUkVBRCAqLworI2VuZGlmIC8qIEJFTExWMTAgKi8KKworI2lmbmRl ZiBGSU9OUkVBRAorLyogSXQgd2Fzbid0IGZvdW5kIGluIGlvY3RsLmggb3IgdGVybSouaCAtIHRy eSB0aGVzZSBwbGFjZXM6ICovCisjaWZkZWYgVU5JWFdBUkUKKyNpbmNsdWRlIDxzeXMvZmlsaW8u aD4KKyNlbHNlCisjaWZkZWYgU09MQVJJUworI2luY2x1ZGUgPHN5cy9maWxpby5oPgorI2VuZGlm IC8qIFNPTEFSSVMgKi8KKyNlbmRpZiAvKiBVTklYV0FSRSAqLworI2VuZGlmIC8qIEZJT05SRUFE ICovCisKKyNpZmRlZiBYRU5JWCAvKiBXYXMgTV9VTklYIGJ1dCBYRU5JWCBpbXBsaWVzIE1fVU5J WCBhbmQgYXBwbGllcyB0byBYRU5JWCB0b28gKi8KKy8qCisgIDxzeXMvc29ja2V0Lmg+IGluY2x1 ZGVkIGFib3ZlIHZpYSAiY2tjbmV0LmgiIGRlZmluZXMgRklPTlJFQUQgYXMKKyAgc29tZXRoaW5n LiAgRHVlIHRvIHRoaXMsIGluX2NoaygpIHVzZXMgdGhlIEZJT05SRUFEIGluc3RlYWQgb2YgUkRD SEsKKyAgYW5kIHRoZSBob3Qga2V5cyBkdXJpbmcgZmlsZSB0cmFuc2ZlciAoWCB0byBjYW5jZWwg ZmlsZSBldGMpIGRvIG5vdAorICB3b3JrIGJlY2F1c2UgRklPTlJFQUQgZG9lc24ndCB3b3JrIGV2 ZW4gdGhvdWdoIGl0IGlzIGRlZmluZWQuCisKKyAgTk9URTogVGhpcyBtaWdodCBhbHNvIGJlIHRy dWUgZWxzZXdoZXJlLgorKi8KKyNpZmRlZiBGSU9OUkVBRAorI3VuZGVmIEZJT05SRUFECisjZW5k aWYgLyogRklPTlJFQUQgKi8KKyNlbmRpZiAvKiBYRU5JWCAqLworCisjaWZkZWYgQ0tfU0NPVjUJ CQkJLyogRGl0dG8gZm9yIFNDTyBPcGVuU2VydmVyIDUuMCAqLworI2lmbmRlZiBTQ09fT1NSNTA3 CQkJLyogMjk5ICovCisjaWZkZWYgRklPTlJFQUQKKyN1bmRlZiBGSU9OUkVBRAorI2VuZGlmIC8q IEZJT05SRUFEICovCisjZW5kaWYJLyogU0NPX09TUjUwNyAqLworI2VuZGlmIC8qIENLX1NDT1Y1 ICovCisKKyNpZmRlZiBTQ09fT1NSNTA3CQkJLyogMjk5ICovCisjaWZkZWYgUkRDSEsKKyN1bmRl ZiBSRENISworI2VuZGlmCS8qIFJEQ0hLICovCisjZW5kaWYJLyogU0NPX09TUjUwNyAqLworCisv KiBXaGV0aGVyIHRvIGluY2x1ZGUgPGZjbnRsLmg+ICovCisKKyNpZm5kZWYgaXM2OGsJCQkJLyog T25seSBhIGZldyBkb24ndCBoYXZlIHRoaXMgb25lLiAqLworI2lmbmRlZiBCU0Q0MQorI2lmbmRl ZiBGVDIxCisjaWZuZGVmIEZUMTgKKyNpZm5kZWYgQ09IRVJFTlQKKyNpbmNsdWRlIDxmY250bC5o PgorI2VuZGlmIC8qIENPSEVSRU5UICovCisjZW5kaWYgLyogRlQxOCAqLworI2VuZGlmIC8qIEZU MjEgKi8KKyNlbmRpZiAvKiBCU0Q0MSAqLworI2VuZGlmIC8qIG5vdCBpczY4ayAqLworCisjaWZk ZWYgQ09IRVJFTlQKKyNpZmRlZiBfSTM4NgorI2luY2x1ZGUgPGZjbnRsLmg+CisjZWxzZQorI2lu Y2x1ZGUgPHN5cy9mY250bC5oPgorI2VuZGlmIC8qIF9JMzg2ICovCisjZW5kaWYgLyogQ09IRVJF TlQgKi8KKworI2lmZGVmIEFUVDczMDAJCQkJLyogVW5peCBQQywgaW50ZXJuYWwgbW9kZW0gZGlh bGVyICovCisjaW5jbHVkZSA8c3lzL3Bob25lLmg+CisjZW5kaWYgLyogQVRUNzMwMCAqLworCisj aWZkZWYgSFBVWAkJCQkvKiBIUC1VWCB2YXJpYXRpb25zLiAqLworI2RlZmluZSBIUFVYSk9CQ1RM CisjaW5jbHVkZSA8c3lzL21vZGVtLmg+CQkJLyogSFAtVVggbW9kZW0gc2lnbmFscyAqLworI2lm ZGVmIGhwOTAwMHM1MDAJCQkvKiBNb2RlbCA1MDAgKi8KKyN1bmRlZiBIUFVYSk9CQ1RMCisjZW5k aWYgLyogaHA5MDAwczUwMCAqLworI2lmZGVmIEhQVVhQUkU2NQorI3VuZGVmIEhQVVhKT0JDVEwK K3R5cGVkZWYgbG9uZyBtZmxhZzsKKyNlbmRpZiAvKiBIUFVYUFJFNjUgKi8KKyNpZmRlZiBIUFVY Sk9CQ1RMCisjaW5jbHVkZSA8c3lzL2JzZHR0eS5oPgkJCS8qIEhQLVVYIEJlcmtlbGV5IHR0eSBz dXBwb3J0ICovCisjZW5kaWYgLyogSFBVWEpPQkNUTCAqLworI2VuZGlmIC8qIEhQVVggKi8KKwor LyoKKyAgV2hpY2ggdGltZS5oIGZpbGVzIHRvIGluY2x1ZGUuLi4gU2VlIGNrY2RlYi5oIGZvciBk ZWZhdWx0cy4KKyAgTm90ZSB0aGF0IDAsIDEsIDIsIG9yIGFsbCAzIG9mIHRoZXNlIGNhbiBiZSBp bmNsdWRlZCBhY2NvcmRpbmcgdG8KKyAgdGhlIHN5bWJvbCBkZWZpbml0aW9ucy4KKyovCisjaWZu ZGVmIE5PVElNRUgKKyNpZmRlZiBUSU1FSAorI2luY2x1ZGUgPHRpbWUuaD4KKyNlbmRpZiAvKiBU SU1FSCAqLworI2VuZGlmIC8qIE5PVElNRUggKi8KKworI2lmbmRlZiBOT1NZU1RJTUVICisjaWZk ZWYgU1lTVElNRUgKKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2VuZGlmIC8qIFNZU1RJTUVIICov CisjZW5kaWYgLyogTk9TWVNUSU1FSCAqLworCisjaWZuZGVmIE5PU1lTVElNRUJICisjaWZkZWYg U1lTVElNRUJICisjaW5jbHVkZSA8c3lzL3RpbWViLmg+CisjZW5kaWYgLyogU1lTVElNRUJIICov CisjZW5kaWYgLyogTk9TWVNUSU1FQkggKi8KKworI2lmbmRlZiBOT0RDTFRJTUVWQUwKKyNpZmRl ZiBEQ0xUSU1FVkFMCisvKgorICBJbiBjZXJ0YWluIFBPU0lYIGJ1aWxkcyAobGlrZSBVbml4d2Fy ZSA3KSwgPFtzeXMvXXRpbWUuaD4gcmVmdXNlcyB0bworICBkZWZpbmUgdGhlIHN0cnVjdHMgd2Ug bmVlZCB0byBhY2Nlc3MgdGhlIGhpZ2hlciBzcGVlZHMsIHNvIHdlIGhhdmUgdG8KKyAgZG8gaXQg b3Vyc2VsdmVzLgorKi8KK3N0cnVjdCB0aW1ldmFsIHsKKyAgICBsb25nIHR2X3NlYzsKKyAgICBs b25nIHR2X3VzZWM7Cit9Oworc3RydWN0IHRpbWV6b25lIHsKKyAgICBpbnQgdHpfbWludXRlc3dl c3Q7CisgICAgaW50IHR6X2RzdHRpbWU7Cit9OworI2VuZGlmIC8qIERDTFRJTUVWQUwgKi8KKyNl bmRpZiAvKiBOT0RDTFRJTUVWQUwgKi8KKworI2lmZGVmIF9fbGludXhfXworLyogVEhJUyBJUyBP QlNPTEVURSBzaW5jZSBhYm91dCBMaW51eCAwLjkyICovCisjaWZkZWYgT0xJTlVYSElTUEVFRAor I2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgorI2VuZGlmIC8qIE9MSU5VWEhJU1BFRUQgKi8KKyNp ZmRlZiBfX2FscGhhX18JCQkvKiBMaW51eCBvbiBERUMgQWxwaGEgKi8KKyNpZm5kZWYgX19HTElC Q19fCQkJLyogQnV0IG5vdCB3aXRoIGdsaWJjICovCisjaW5jbHVkZSA8YXNtL3Rlcm1pb3MuaD4K KyNlbmRpZiAvKiBfX0dMSUJDX18gKi8KKyNlbmRpZiAvKiBfX2FscGhhX18gKi8KKyNlbmRpZiAv KiBfX2xpbnV4X18gKi8KKworI2lmZGVmIE5PSUVYVEVOCQkJCS8qIFRoaXMgaXMgYnJva2VuIG9u IHNvbWUgc3lzdGVtcyAqLworI3VuZGVmIElFWFRFTgkJCQkvKiBsaWtlIENvbnZleC9PUyA5LjEg Ki8KKyNlbmRpZiAvKiBOT0lFWFRFTiAqLworI2lmbmRlZiBJRVhURU4JCQkJLyogVHVybiBvZmYg Xk8vXlYgcHJvY2Vzc2luZy4gKi8KKyNkZWZpbmUgSUVYVEVOIDAJCQkvKiBOZWVkZWQsIGF0IGxl YXN0LCBvbiBCU0RJLiAqLworI2VuZGlmIC8qIElFWFRFTiAqLworLyoKKyAgUGljayB1cCBkZWZp bml0aW9ucyBuZWVkZWQgZm9yIHNlbGVjdCgpIGlmIHdlIGRvbid0IGhhdmUgdGhlbSBhbHJlYWR5 LgorICBOb3JtYWxseSB0aGV5IGNvbWUgZnJvbSA8c3lzL3R5cGVzLmg+IGJ1dCBzb21lIHN5c3Rl bXMgZ2V0IHRoZW0gZnJvbQorICA8c3lzL3NlbGVjdC5oPi4uLiAgUmF0aGVyIHRoYW4gaGFyZHdp cmUgYWxsIG9mIHRoZW0gaW50byB0aGUgc291cmNlLCB3ZQorICBpbmNsdWRlIGl0IGlmIFNFTEVD VF9IIGlzIGRlZmluZWQgaW4gY29tcGlsZS10aW1lIENGTEFHUy4KKyovCisjaWZuZGVmIFNDT19P U1I1MDQKKyNpZmRlZiBTRUxFQ1RfSAorI2luY2x1ZGUgPHN5cy9zZWxlY3QuaD4KKyNlbmRpZiAv KiBTRUxFQ1RfSCAqLworI2VuZGlmIC8qIFNDT19PU1I1MDQgKi8KKworI2lmZGVmIGFlZ2lzCisj aW5jbHVkZSAiL3N5cy9pbnMvYmFzZS5pbnMuYyIKKyNpbmNsdWRlICIvc3lzL2lucy9lcnJvci5p bnMuYyIKKyNpbmNsdWRlICIvc3lzL2lucy9pb3MuaW5zLmMiCisjaW5jbHVkZSAiL3N5cy9pbnMv c2lvLmlucy5jIgorI2luY2x1ZGUgIi9zeXMvaW5zL3BhZC5pbnMuYyIKKyNpbmNsdWRlICIvc3lz L2lucy90aW1lLmlucy5jIgorI2luY2x1ZGUgIi9zeXMvaW5zL3BmbS5pbnMuYyIKKyNpbmNsdWRl ICIvc3lzL2lucy9wZ20uaW5zLmMiCisjaW5jbHVkZSAiL3N5cy9pbnMvZWMyLmlucy5jIgorI2lu Y2x1ZGUgIi9zeXMvaW5zL3R5cGVfdWlkcy5pbnMuYyIKKyNpbmNsdWRlIDxkZWZhdWx0X2FjbC5o PgorI3VuZGVmIFRJT0NFWENMCisjdW5kZWYgRklPTlJFQUQKKyNlbmRpZiAvKiBhZWdpcyAqLwor CisjaWZkZWYgc3hhRTUwCQkJCS8qIFBGVSBDb21wYWN0IEEgU1gvQSBUSVNQIFYxMC9MNTAgKi8K KyN1bmRlZiBGSU9OUkVBRAorI2VuZGlmIC8qIHN4YUU1MCAqLworCisvKiBUaGUgZm9sbG93aW5n ICNkZWZpbmVzIGFyZSBjYXRjaC1hbGxzIGZvciB0aG9zZSBzeXN0ZW1zICovCisvKiB0aGF0IGRp ZG4ndCBoYXZlIG9yIGNvdWxkbid0IGZpbmQgPGZpbGUuaD4uLi4gKi8KKworI2lmbmRlZiBGUkVB RAorI2RlZmluZSBGUkVBRCAweDAxCisjZW5kaWYgLyogRlJFQUQgKi8KKworI2lmbmRlZiBGV1JJ VEUKKyNkZWZpbmUgRldSSVRFIDB4MTAKKyNlbmRpZiAvKiBGV1JJVEUgKi8KKworI2lmbmRlZiBP X1JET05MWQorI2RlZmluZSBPX1JET05MWSAwMDAKKyNlbmRpZiAvKiBPX1JET05MWSAqLworCisv KiBUaGlzIGlzIGZvciBhbmNpZW50IFVuaXhlcyB0aGF0IGRvbid0IGhhdmUgdGhlc2UgdHR5IHN5 bWJvbHMgZGVmaW5lZC4gKi8KKworI2lmbmRlZiBQRU5ESU4KKyNkZWZpbmUgUEVORElOIElDQU5P TgorI2VuZGlmIC8qIFBFTkRJTiAqLworI2lmbmRlZiBGTFVTSE8KKyNkZWZpbmUgRkxVU0hPIElD QU5PTgorI2VuZGlmIC8qIEZMVVNITyAqLworI2lmbmRlZiBFWFRQUk9DCisjZGVmaW5lIEVYVFBS T0MgSUNBTk9OCisjZW5kaWYgLyogRVhUUFJPQyAqLworCisjaWZkZWYgU1ZPUlBPU0lYCisvKgor ICBNb2RlbSBzaWduYWxzIGFyZSBhbHNvIGZvcmJpZGRlbiBpbiB0aGUgUE9TSVggd29ybGQuICBC dXQgc29tZSBQT1NJWC1iYXNlZAorICBwbGF0Zm9ybXMgbGV0IHVzIGF0IHRoZW0gYW55d2F5IGlm IHdlIGtub3cgd2hlcmUgdG8gbG9vay4KKyovCisjaWZuZGVmIE5FRURNRE1ERUZTCisvKiBEb2Vz bid0IHdvcmsgZm9yIExpbnV4ICovCisjaWZkZWYgVU5JWFdBUkU3CisjZGVmaW5lIE5FRURNRE1E RUZTCisjZW5kaWYgLyogVU5JWFdBUkU3ICovCisjZW5kaWYgLyogTkVFRE1ETURFRlMgKi8KKwor I2lmZGVmIE5FRURNRE1ERUZTCisjaWZuZGVmIFRJT0NNR0VUCisjZGVmaW5lIFRJT0NNR0VUICgo J3QnPDw4KXwyOSkKKyNlbmRpZiAvKiBUSU9DTUdFVCAqLworCisjaWZuZGVmIFRJT0NNX0RUUgor I2RlZmluZSBUSU9DTV9EVFIgMHgwMDAyCisjZW5kaWYgLyogVElPQ01fRFRSICovCisjaWZuZGVm IFRJT0NNX1JUUworI2RlZmluZSBUSU9DTV9SVFMgMHgwMDA0CisjZW5kaWYgLyogVElPQ01fUlRT ICovCisjaWZuZGVmIFRJT0NNX0NUUworI2RlZmluZSBUSU9DTV9DVFMgMHgwMDIwCisjZW5kaWYg LyogVElPQ01fQ1RTICovCisjaWZuZGVmIFRJT0NNX0NBUgorI2RlZmluZSBUSU9DTV9DQVIgMHgw MDQwCisjZW5kaWYgLyogVElPQ01fQ0FSICovCisjaWZuZGVmIFRJT0NNX1JORworI2RlZmluZSBU SU9DTV9STkcgMHgwMDgwCisjZW5kaWYgLyogVElPQ01fUk5HICovCisjaWZuZGVmIFRJT0NNX0RT UgorI2RlZmluZSBUSU9DTV9EU1IgMHgwMTAwCisjZW5kaWYgLyogVElPQ01fRFNSICovCisjZW5k aWYgLyogTkVFRE1ETURFRlMgKi8KKyNlbmRpZiAvKiBTVk9SUE9TSVggKi8KKworLyogRGVjbGFy YXRpb25zICovCisKKyNpZmRlZiBPWE9TCisjdW5kZWYgVENHRVRBCisjdW5kZWYgVENTRVRBCisj dW5kZWYgVENTRVRBVworI3VuZGVmIFRDU0VUQUYKKyNkZWZpbmUgVENHRVRBIFRDR0VUUworI2Rl ZmluZSBUQ1NFVEEgVENTRVRTCisjZGVmaW5lIFRDU0VUQVcgVENTRVRTVworI2RlZmluZSBUQ1NF VEFGIFRDU0VUU0YKKyNkZWZpbmUgdGVybWlvIHRlcm1pb3MKKyNlbmRpZiAvKiBPWE9TICovCisK KyNpZmRlZiBTVk9SUE9TSVgJCQkvKiBBVCZUIFN5cyBWIG9yIFBPU0lYICovCisjaWZkZWYgVU5J WFdBUkVQT1NJWAkJCS8qIFVuaXhXYXJlIDcgUE9TSVggYnVpbGQgKi8KKy8qCisgIEluIFVuaXh3 YXJlIFBPU0lYIGJ1aWxkcywgPFtzeXMvXXRpbWUuaD4gcmVmdXNlcyB0byBkZWZpbmUgdGhlCisg IHN0cnVjdHMgd2UgbmVlZCB0byBhY2Nlc3MgdGhlIGhpZ2hlciBzcGVlZHMsIHNvIHdlIGhhdmUg dG8gZG8gaXQKKyAgb3Vyc2VsdmVzLgorKi8KK3N0cnVjdCB0aW1ldmFsIHsKKyAgICBsb25nIHR2 X3NlYzsKKyAgICBsb25nIHR2X3VzZWM7Cit9Oworc3RydWN0IHRpbWV6b25lIHsKKyAgICBpbnQg dHpfbWludXRlc3dlc3Q7CisgICAgaW50IHR6X2RzdHRpbWU7Cit9OworI2VuZGlmIC8qIFVOSVhX QVJFUE9TSVggKi8KKyNlbmRpZiAvKiBTVk9SUE9TSVggKi8KKworI2lmZGVmIF9fR05VQ19fCisj aWZkZWYgWEVOSVgKKy8qCisgIEJlY2F1c2UgWGVuaXggPHRpbWUuaD4gZG9lc24ndCBkZWNsYXJl IHRpbWUoKSBpZiB3ZSdyZSB1c2luZyBnY2MuCisqLwordGltZV90IHRpbWUoKTsKKyNlbmRpZiAv KiBYRU5JWCAqLworI2VuZGlmIC8qIF9fR05VQ19fICovCisKKy8qIFNwZWNpYWwgc3R1ZmYgZm9y IFY3IGlucHV0IGJ1ZmZlciBwZWVraW5nICovCisKKyNpZmRlZiAgVjcKK2ludCBrbWVtWzJdID0g eyAtMSwgLTF9OworY2hhciAqaW5pdHJhd3EoKSwgKnFhZGRyWzJdPXswLDB9OworI2RlZmluZSBD T04gMAorI2RlZmluZSBUVFkgMQorI2VuZGlmIC8qIFY3ICovCisKKy8qIGRmdHR5IGlzIHRoZSBk ZXZpY2UgbmFtZSBvZiB0aGUgZGVmYXVsdCBkZXZpY2UgZm9yIGZpbGUgdHJhbnNmZXIgKi8KKy8q IGRmbG9jIGlzIDAgaWYgZGZ0dHkgaXMgdGhlIHVzZXIncyBjb25zb2xlIHRlcm1pbmFsLCAxIGlm IGFuIGV4dGVybmFsIGxpbmUgKi8KKworI2lmZGVmIEJFT1MKKyAgICBjaGFyICogZGZ0dHkgPSBO VUxMOworICAgIGNoYXIgKiBkZm1kbSA9ICJub25lIjsKKyAgICBpbnQgZGZsb2MgPSAwOyAgICAg ICAgICAgICAgICAgIC8qIHRoYXQgZ29lcyBpbiBsb2NhbCBtb2RlIGJ5IGRlZmF1bHQgKi8KKyNl bHNlCisjaWZuZGVmIERGVFRZCisjaWZkZWYgUFJPVlgxCisgICAgY2hhciAqZGZ0dHkgPSAiL2Rl di9jb20xLmRvdXQiOyAvKiBPbmx5IGV4YW1wbGUgc28gZmFyIG9mIGEgc3lzdGVtICovCisgICAg Y2hhciAqZGZtZG0gPSAibm9uZSI7CisgICAgaW50IGRmbG9jID0gMTsgICAgICAgICAgICAgICAg ICAvKiB0aGF0IGdvZXMgaW4gbG9jYWwgbW9kZSBieSBkZWZhdWx0ICovCisjZWxzZQorICAgIGNo YXIgKmRmdHR5ID0gQ1RUTkFNOyAgICAgICAgICAgICAgIC8qIFJlbW90ZSBieSBkZWZhdWx0LCB1 c2Ugbm9ybWFsICovCisgICAgY2hhciAqZGZtZG0gPSAibm9uZSI7CisgICAgaW50IGRmbG9jID0g MDsgICAgICAgICAgICAgICAgICAgICAgLyogY29udHJvbGxpbmcgdGVybWluYWwgbmFtZS4gKi8K KyNlbmRpZiAvKiBQUk9WWDEgKi8KKyNlbHNlCisgICAgY2hhciAqZGZ0dHkgPSBERlRUWTsJCS8q IERlZmF1bHQgbG9jYXRpb24gc3BlY2lmaWVkIG9uICovCisgICAgY2hhciAqZGZtZG0gPSAibm9u ZSI7CQkvKiBjb21tYW5kIGxpbmUuICovCisgICAgaW50IGRmbG9jID0gMTsgICAgICAgICAgICAg ICAgICAgICAgLyogY29udHJvbGxpbmcgdGVybWluYWwgbmFtZS4gKi8KKyNlbmRpZiAvKiBERlRU WSAqLworI2VuZGlmIC8qIEJFT1MgKi8KKworI2RlZmluZSBDT05fUkVTIDAJCQkvKiBDb25zb2xl IHN0YXRlIGlzICJyZXNldCIgKi8KKyNkZWZpbmUgQ09OX0NCICAxCQkJLyogQ29uc29sZSBzdGF0 ZSBpcyBDQlJFQUsgKi8KKyNkZWZpbmUgQ09OX0JJTiAyCQkJLyogQ29uc29sZSBzdGF0ZSBpcyBi aW5hcnkgKi8KKyAgICBzdGF0aWMgaW50IGNvbnN0YXRlID0gQ09OX1JFUzsKKworI2RlZmluZSBD T05JX1JFUyAwCQkJLyogQ29uc29sZSBpbnRlcnJ1cHRzIGFyZSAicmVzZXQiICovCisjZGVmaW5l IENPTklfSU5UIDEJCQkvKiBDb25zb2xlIGludHRlcnVwdHMgYXJlIHNldCAqLworI2RlZmluZSBD T05JX05PSSAyCQkJLyogQ29uc29sZSBpbnR0ZXJ1cHRzIGFyZSBkaXNhYmxlZCAqLworICAgIHN0 YXRpYyBpbnQgY29uaXN0YXRlID0gQ09OSV9SRVM7CisKKyNpZmRlZiBDS19TTUFMTAorI2RlZmlu ZSBDT05CVUZTSVogMTUKKyNlbHNlCisjZGVmaW5lIENPTkJVRlNJWiAyNTUKKyNlbmRpZiAvKiBD S19TTUFMTCAqLworICAgIHN0YXRpYyBjaGFyIGNvbmJ1ZltDT05CVUZTSVpdOwkvKiBDb25zb2xl IHJlYWRhaGVhZCBidWZmZXIgKi8KKyAgICBzdGF0aWMgaW50ICBjb25idWZuID0gMDsJCS8qIENo YXJzIGluIHJlYWRhaGVhZCBidWZmZXIgKi8KKyAgICBzdGF0aWMgY2hhciAqY29uYnVmcCA9IGNv bmJ1ZjsJLyogTmV4dCBjaGFyIGluIHJlYWRhaGVhZCBidWZmZXIgKi8KKworICAgIGNoYXIgY3R0 bmFtW0RFVk5BTUxFTisxXSA9IHsgJ1wwJywgJ1wwJyB9OyAvKiBEZXRlcm1pbmVkIGF0IHJ1bnRp bWUgKi8KKworI2lmZGVmIFJUVQorICAgIGludCBydHVfYnVnID0gMDsJCSAgICAvKiBzZXQgdG8g MSB3aGVuIHJldHVybmluZyBmcm9tIFNJR1RTVFAgKi8KKyNlbmRpZiAvKiBSVFUgKi8KKworICAg IGludCBkZnBydHkgPSBERUZQQVI7ICAgICAgICAgICAgICAgIC8qIERlZmF1bHQgcGFyaXR5ICgw ID0gbm9uZSkgKi8KKyAgICBpbnQgdHRwcnR5ID0gMDsgICAgICAgICAgICAgICAgICAgICAvKiBU aGUgcGFyaXR5IHRoYXQgaXMgaW4gdXNlLiAqLworICAgIHN0YXRpYyBpbnQgdHRwbXNrID0gMHhm ZjsJCS8qIFBhcml0eSBzdHJpcHBpbmcgbWFzay4gKi8KKyAgICBpbnQgdHRtZG0gPSAwOyAgICAg ICAgICAgICAgICAgICAgICAvKiBNb2RlbSBpbiB1c2UuICovCisgICAgaW50IHR0Y2FyciA9IENB Ul9BVVQ7CQkvKiBDYXJyaWVyIGhhbmRsaW5nIG1vZGUuICovCisgICAgaW50IGRmZmxvdyA9IEZM T19OT05FOwkJLyogRGVmYXVsdCBmbG93IGNvbnRyb2wgaXMgTk9ORSAqLworICAgIGludCBiYWNr Z3JkID0gMDsgICAgICAgICAgICAgICAgICAgIC8qIEFzc3VtZSBpbiBmb3JlZ3JvdW5kIChubyAn JicgKSAqLworI2lmZGVmIEZfU0VURkwKKyAgICBpbnQgaW5pZmxhZ3MgPSAtMTsJCQkvKiBmY250 bCBmbGFncyBmb3IgdHR5ZmQgKi8KKyNlbmRpZiAvKiBGX1NFVEZMICovCisgICAgaW50IGZkZmxh ZyA9IDA7CQkJLyogRmxhZyBmb3IgcmVkaXJlY3RlZCBzdGRpbyAqLworICAgIGludCB0dGZkZmxn ID0gMDsJCQkvKiBPcGVuIEZpbGUgZGVzY3JpcHRvciB3YXMgZ2l2ZW4gKi8KKyAgICBpbnQgdHZ0 ZmxnID0gMDsJCQkvKiBGbGFnIHRoYXQgdHR2dCBoYXMgYmVlbiBjYWxsZWQgKi8KKyAgICBsb25n IHR0c3BlZWQgPSAtMUw7CQkJLyogRm9yIHNhdmluZyBzcGVlZCAqLworICAgIGludCB0dGZsb3cg PSAtOTsJCQkvKiBGb3Igc2F2aW5nIGZsb3cgKi8KKyAgICBpbnQgdHRsZCA9IC0xOwkJCS8qIExp bmUgZGlzY2lwbGluZSAqLworCisjaWZkZWYgc29ueV9uZXdzCisgICAgc3RhdGljIGludCBrbV9j b24gPSAtMTsJCS8qIEthbmppIG1vZGUgZm9yIGNvbnNvbGUgdHR5ICovCisgICAgc3RhdGljIGlu dCBrbV9leHQgPSAtMTsJCS8qIEthbmppIG1vZGUgZm9yIGV4dGVybmFsIGRldmljZSAqLworI2Vu ZGlmIC8qIHNvbnlfbmV3cyAqLworCisjaWZkZWYgUEFSU0VOU0UKKyAgICBzdGF0aWMgaW50IG5l ZWRwY2hrID0gMTsJCS8qIE5lZWQgcGFyaXR5IGNoZWNrICovCisjZWxzZQorICAgIHN0YXRpYyBp bnQgbmVlZHBjaGsgPSAwOworI2VuZGlmIC8qIFBBUlNFTlNFICovCisKKyAgICBleHRlcm4gaW50 IHN0b3BiaXRzOwkJLyogU3RvcCBiaXRzICovCisjaWZkZWYgSFdQQVJJVFkKKy8qCisgIFVuZm9y dHVuYXRlbHkgd2UgbXVzdCBkbyB0aGlzIHdpdGggZ2xvYmFsIHZhcmlhYmxlcyByYXRoZXIgdGhh biB0aHJvdWdoIHRoZQorICB0dC4uLigpIEFQSXMgdG8gYXZvaWQgY2hhbmdpbmcgdGhlIEFQSXMg YW5kIHRoZSBtYW55IG1vZHVsZXMgdGhhdCB1c2UgdGhlbS4KKyAgSWYgaHdwYXJpdHkgIT0gMCwg dGhpcyBpbmRpY2F0ZXMgOCBkYXRhIGJpdHMgKyBwYXJpdHksIHJhdGhlciB0aGFuIDcgZGF0YQor ICBiaXRzICsgcGFyaXR5IG9yIDggZGF0YSBiaXRzIGFuZCBubyBwYXJpdHksIGFuZCBvdmVycmlk ZXMgdGhlIHJlZ3VsYXIgcGFyaXR5CisgIHZhcmlhYmxlLCB3aGljaCBpcyBjb21tdW5pY2F0ZWQg dG8gdGhpcyBtb2R1bGUgdGhydSB0dHBrdCgpLCBhbmQgcmVwcmVzZW50ZWQKKyAgbG9jYWxseSBi eSB0aGUgdHRwcnR5IHZhcmlhYmxlLgorKi8KKyAgICBleHRlcm4gaW50IGh3cGFyaXR5OwkJLyog SGFyZHdhcmUgcGFyaXR5ICovCisjZW5kaWYgLyogSFdQQVJJVFkgKi8KKworI2lmZGVmIFRDUFNP Q0tFVAorI2lmZGVmIFRDUF9OT0RFTEFZCitzdGF0aWMgaW50IG5vZGVsYXlfc2F2ID0gLTE7Cisj ZW5kaWYgLyogVENQX05PREVMQVkgKi8KKyNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KKworc3RhdGlj IGludCBzaWdpbnRfaWduID0gMDsJCS8qIFNJR0lOVCBpcyBpZ25vcmVkICovCisKKy8qCisgIEhh dmluZyB0aGlzIG1vZHVsZSByZWx5IG9uIGV4dGVybmFsIGdsb2JhbHMgaXMgYmFkLCBidXQgZml4 aW5nIHRoaXMKKyAgcmVxdWlyZXMgb3ZlcmhhdWwgb2YgdGhlIGNrKnRpby5jIG1vZHVsZXMgZm9y IGFsbCB0aGUgZGlmZmVyZW50IG9wZXJhdGluZworICBzeXN0ZW1zIHN1cHBvcnRlZCBieSBDLUtl cm1pdC4gIExlZnQgZm9yIGEgZnV0dXJlIHJlbGVhc2UuCisqLworZXh0ZXJuIGludCB0dG5wcm90 bzsJCQkvKiBEZWZpbmVkIGluIGNrY25ldC5jICovCitleHRlcm4gaW50IHR0bmV0OwkJCS8qIERl ZmluZWQgaW4gY2tjbmV0LmMgKi8KK2V4dGVybiBpbnQgbm9wdXNoLCB4ZnJjYW4sIHhmcmNociwg eGZybnVtOyAvKiBEZWZpbmVkIGluIGNrY21haS5jICovCitleHRlcm4gaW50IHhzdXNwZW5kLCB3 YXNjbG9zZWQ7CitleHRlcm4gaW50IGluc2VydmVyLCBsb2NhbDsKKworaW50IGNreGVjaCA9IDA7 IC8qIDAgaWYgc3lzdGVtIG5vcm1hbGx5IGVjaG9lcyBjb25zb2xlIGNoYXJhY3RlcnMsIGVsc2Ug MSAqLworCitpbnQgY2ttYXhmaWxlcyA9IDA7CQkJLyogTWF4IG51bWJlciBvZiBvcGVuIGZpbGVz ICovCisKKyNpZmRlZiBDS19FTkNSWVBUSU9OCQkJLyogS2VyYmVyb3MgKi8KKyNpbmNsdWRlICJj a3VhdGguaCIKK2V4dGVybiBpbnQgbWVfZW5jcnlwdCwgdV9lbmNyeXB0OworI2VuZGlmIC8qIENL X0VOQ1JZUFRJT04gKi8KKworLyogRGVjbGFyYXRpb25zIG9mIHZhcmlhYmxlcyBnbG9iYWwgd2l0 aGluIHRoaXMgbW9kdWxlICovCisKKyNpZmRlZiBUVExFQlVGCQkJCS8qIFNlZSBja2NuZXQuaCAq LworaW50IHR0cHVzaCA9IC0xOworI2RlZmluZSBMRUJVRlNJWiA0MDk2CitzdGF0aWMgQ0hBUiBs ZV9idWZbTEVCVUZTSVpdOworc3RhdGljIGludCBsZV9zdGFydCA9IDAsIGxlX2VuZCA9IDAsIGxl X2RhdGEgPSAwOworI2VuZGlmIC8qIFRUTEVCVUYgKi8KKworI2RlZmluZSBNU0dCVUZfU0laRSAx MDI0CQkvKiBGb3IgZGVidWdnaW5nICovCitzdGF0aWMgY2hhciBtc2didWZbTVNHQlVGX1NJWkVd OworCitzdGF0aWMgaW50IGdvdHNpZ3MgPSAwOworCitzdGF0aWMgdGltZV90IHRjb3VudCA9ICh0 aW1lX3QpMDsJLyogRWxhcHNlZCB0aW1lIGNvdW50ZXIgKi8KKworc3RhdGljIFNJR1RZUCAoKnNh dmFsKSgpICAgICA9IE5VTEw7CS8qIEZvciBzYXZpbmcgYWxhcm0oKSBoYW5kbGVyICovCitzdGF0 aWMgU0lHVFlQICgqc2F2cXVpdCkoKSAgID0gTlVMTDsJLyogYW5kIG90aGVyIHNpZ25hbCBoYW5k bGVycyAqLworI2lmZGVmIFNJR1VTUjEKK3N0YXRpYyBTSUdUWVAgKCpzYXZ1c3IxKSgpICAgPSBO VUxMOworI2VuZGlmIC8qIFNJR1VTUjEgKi8KKyNpZmRlZiBTSUdVU1IyCitzdGF0aWMgU0lHVFlQ ICgqc2F2dXNyMikoKSAgID0gTlVMTDsKKyNlbmRpZiAvKiBTSUdVU1IyICovCisjaWZkZWYgU0lH UElQRQorc3RhdGljIFNJR1RZUCAoKnNhdnBpcGUpKCkgICA9IE5VTEw7CisjZW5kaWYgLyogU0lH UElQRSAqLworI2lmZGVmIFNJR0RBTkdFUgorc3RhdGljIFNJR1RZUCAoKnNhdmRhbmdlcikoKSA9 IE5VTEw7CisjZW5kaWYgLyogU0lHREFOR0VSICovCisKKyNpZm5kZWYgTk9KQworc3RhdGljIFNJ R1RZUCAoKmpjaGRscikoKSAgICA9IE5VTEw7CS8qIEZvciBjaGVja2luZyBzdXNwZW5kIGhhbmRs ZXIgKi8KKyNlbmRpZiAvKiBOT0pDICovCitzdGF0aWMgaW50IGpjc2hlbGwgPSAtMTsJCS8qIEFu ZCBmbGFnIGZvciByZXN1bHQgKi8KKworLyoKKyAgQlJFQUtOVUxTIGlzIGRlZmluZWQgZm9yIHN5 c3RlbXMgdGhhdCBzaW11bGF0ZSBzZW5kaW5nIGEgQlJFQUsgc2lnbmFsCisgIGJ5IHNlbmRpbmcg YSBidW5jaCBvZiBOVUwgY2hhcmFjdGVycyBhdCBsb3cgc3BlZWQuCisqLworI2lmZGVmIFBST1ZY MQorI2lmbmRlZiBCUkVBS05VTFMKKyNkZWZpbmUgQlJFQUtOVUxTCisjZW5kaWYgLyogQlJFQUtO VUxTICovCisjZW5kaWYgLyogUFJPVlgxICovCisKKyNpZmRlZiBWNworI2lmbmRlZiBCUkVBS05V TFMKKyNkZWZpbmUgQlJFQUtOVUxTCisjZW5kaWYgLyogQlJFQUtOVUxTICovCisjZW5kaWYgLyog VjcgKi8KKworI2lmZGVmIEJSRUFLTlVMUworc3RhdGljIGNoYXIJCQkJLyogQSBzdHJpbmcgb2Yg bnVsbHMgKi8KKypicm51bHMgPSAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFww XDBcMFwwXDBcMFwwXDBcMCI7CisjZW5kaWYgLyogQlJFQUtOVUxTICovCisKKyNpZmRlZiBDS19Q T1NJWF9TSUcJCQkvKiBMb25nanVtcCBidWZmZXJzICovCitzdGF0aWMgc2lnam1wX2J1ZiBzamJ1 ZjsJCS8qIFBPU0lYIHNpZ25hbCBoYW5kbGluZyAqLworI2Vsc2UKK3N0YXRpYyBqbXBfYnVmIHNq YnVmOworI2VuZGlmIC8qIENLX1BPU0lYX1NJRyAqLworCisjaWZkZWYgVjcKK3N0YXRpYyBqbXBf YnVmIGpqYnVmOworI2VuZGlmIC8qIFY3ICovCisKKy8qIHN0YXRpYyAqLwkJCQkvKiAoTm90IHN0 YXRpYyBhbnkgbW9yZSkgKi8KK2ludCB0dHlmZCA9IC0xOwkJCQkvKiBUVFkgZmlsZSBkZXNjcmlw dG9yICovCisKK2ludCB0dHBpcGUgPSAwOwkJCQkvKiBORVRDTUQ6IFVzZSBwaXBlIGluc3RlYWQg b2YgdHR5ZmQgKi8KK2ludCB0dHB0eSAgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBO RVRQVFk6IFVzZSBwdHkgaW5zdGVhZCBvZiB0dGZ5ZCAqLworCisjaWZkZWYgTkVUUFRZCQkJCS8q IFRoZXNlIGFyZSBpbiBja3VwdHkuYyAqLworZXh0ZXJuIFBJRF9UIHB0eV9mb3JrX3BpZDsKK2V4 dGVybiBpbnQgcHR5X21hc3Rlcl9mZCwgcHR5X3NsYXZlX2ZkOworI2VuZGlmCS8qIE5FVFBUWSAq LworCisjaWZkZWYgTkVUQ01ECisjaWZkZWYgTkVUQ09OTgorc3RhdGljIGludCBwaXBlMFsyXSwg cGlwZTFbMl07CQkvKiBQaXBlcyBmb3IgbmV0IGkvbyAqLworI2VuZGlmIC8qIE5FVENPTk4gKi8K K3N0YXRpYyBQSURfVCB0dHBpZCA9IDA7CQkJLyogUHJvY2VzcyBJRCBmb3IgZm9yayAqLworc3Rh dGljIGludCBmZGluLCBmZG91dDsJCQkvKiBGaWxlIGRlc2NyaXB0b3JzIGZvciBwaXBlICovCitz dGF0aWMgRklMRSAqIHR0b3V0ID0gTlVMTDsJCS8qIEZpbGUgcG9pbnRlciBmb3Igb3V0cHV0IHBp cGUgKi8KKyNpZmRlZiBEQ0xGRE9QRU4KKy8qIGZkb3BlbigpIG5lZWRzIGRlY2xhcmluZyBiZWNh dXNlIGl0J3Mgbm90IGRlY2xhcmVkIGluIDxzdGRpby5oPiAqLworX1BST1RPVFlQKCBGSUxFICog ZmRvcGVuLCAoaW50LCBjaGFyICopICk7CisjZW5kaWYgLyogRENMRkRPUEVOICovCisjZW5kaWYg LyogTkVUQ01EICovCisKK2V4dGVybiBpbnQgcGV4aXRzdGF0LCBxdWlldDsKKworI2lmZGVmIFBs YW45CitpbnQgdHR5Y3RsZmQgID0gLTE7ICAgLyogVFRZIGNvbnRyb2wgY2hhbm5lbCAtIFdoYXQ/ IFVOSVggZG9lc24ndCBoYXZlIG9uZT8gKi8KK2ludCBjb25zY3RsZmQgPSAtMTsJCQkvKiBDb25z b2xlIGNvbnRyb2wgY2hhbm5lbCAqLworaW50IG5vaXNlZmQgPSAtMTsJCQkvKiB0b25lIGNoYW5u ZWwgKi8KK3N0YXRpYyBpbnQgdHR5bGFzdHNwZWVkID0gLTE7CQkvKiBTbyB3ZSBjYW4gbGllIGFi b3V0IHRoZSBzcGVlZCAqLworI2VuZGlmIC8qIFBsYW45ICovCisKK2ludCB0ZWxuZXRmZCA9IDA7 CQkJLyogRmlsZSBkZXNjcmlwdG9yIGlzIGZvciB0ZWxuZXQgKi8KKyNpZmRlZiBORVRDT05OCitp bnQgeDI1ZmQgPSAwOwkJCQkvKiBGaWxlIGRlc2NyaXB0b3IgaXMgZm9yIFguMjUgKi8KKyNlbmRp ZiAvKiBORVRDT05OICovCisKK2NoYXIgbG9ja3BpZFsxNl0gPSB7ICdcMCcsICdcMCcgfTsJLyog UElEIHN0b3JlZCBpbiBsb2NrZmlsZSwgYXMgc3RyaW5nICovCisKK3N0YXRpYyBpbnQgbGtmID0g MCwgICAgICAgICAgICAgICAgICAgICAvKiBMaW5lIGxvY2sgZmxhZyAqLworICAgIGNnbWYgPSAw LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZsYWcgdGhhdCBjb25zb2xlIG1vZGVzIHNh dmVkICovCisgICAgeGxvY2FsID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogRmxhZyBm b3IgdHR5IGxvY2FsIG9yIHJlbW90ZSAqLworICAgIGN1cmNhcnIgPSAwOwkJCS8qIENhcnJpZXIg bW9kZTogcmVxdWlyZS9pZ25vcmUuICovCisKK3N0YXRpYyBpbnQgbmV0Y29ubiA9IDA7CQkJLyog MSBpZiBuZXR3b3JrIGNvbm5lY3Rpb24gYWN0aXZlICovCisKK3N0YXRpYyBjaGFyIGVzY2Nocjsg ICAgICAgICAgICAgICAgICAgICAvKiBFc2NhcGUgb3IgYXR0biBjaGFyYWN0ZXIgKi8KKworI2lm ZGVmIENLX1NDTzMyVjQKKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2VuZGlmIC8qIENLX1NDTzMy VjQgKi8KKworI2lmZGVmIEhBVkVfVFYKKyAgICBzdGF0aWMgc3RydWN0IHRpbWV2YWwgdHY7CQkv KiBGb3IgZ2V0dGluZyB0aW1lLCBmcm9tIHN5cy90aW1lLmggKi8KKyNlbmRpZiAvKiBIQVZFX1RW ICovCisjaWZkZWYgSEFWRV9UWgorICAgIHN0YXRpYyBzdHJ1Y3QgdGltZXpvbmUgdHo7CisjZW5k aWYgLyogSEFWRV9UWiAqLworCisjaWZkZWYgT1NGCisgICAgc3RhdGljIHN0cnVjdCB0aW1lYiBm dHA7ICAgICAgICAgICAgLyogQW5kIGZyb20gc3lzL3RpbWViLmggKi8KKyNlbmRpZiAvKiBPU0Yg Ki8KKworI2lmZGVmIEJTRDI5CisgICAgc3RhdGljIGxvbmcgeGNsb2NrOwkJCS8qIEZvciBnZXR0 aW5nIHRpbWUgZnJvbSBzeXMvdGltZS5oICovCisgICAgc3RhdGljIHN0cnVjdCB0aW1lYiBmdHA7 ICAgICAgICAgICAgLyogQW5kIGZyb20gc3lzL3RpbWViLmggKi8KKyNlbmRpZiAvKiBCU0QyOSAq LworCisjaWZkZWYgQlNENDEKKyAgICBzdGF0aWMgbG9uZyB4Y2xvY2s7CQkJLyogRm9yIGdldHRp bmcgdGltZSBmcm9tIHN5cy90aW1lLmggKi8KKyAgICBzdGF0aWMgc3RydWN0IHRpbWViIGZ0cDsg ICAgICAgICAgICAvKiBBbmQgZnJvbSBzeXMvdGltZWIuaCAqLworI2VuZGlmIC8qIEJTRDQxICov CisKKyNpZmRlZiBCRUxMVjEwCisgICAgc3RhdGljIGxvbmcgeGNsb2NrOwkJCS8qIEZvciBnZXR0 aW5nIHRpbWUgZnJvbSBzeXMvdGltZS5oICovCisgICAgc3RhdGljIHN0cnVjdCB0aW1lYiBmdHA7 ICAgICAgICAgICAgLyogQW5kIGZyb20gc3lzL3RpbWViLmggKi8KKyNlbmRpZiAvKiBCRUxMVjEw ICovCisKKyNpZmRlZiBGVDIxCisgICAgc3RhdGljIGxvbmcgeGNsb2NrOwkJCS8qIEZvciBnZXR0 aW5nIHRpbWUgZnJvbSBzeXMvdGltZS5oICovCisgICAgc3RhdGljIHN0cnVjdCB0aW1lYiBmdHA7 ICAgICAgICAgICAgLyogQW5kIGZyb20gc3lzL3RpbWViLmggKi8KKyNlbmRpZiAvKiBGVDIxICov CisKKyNpZmRlZiBUT1dFUjEKKyAgICBzdGF0aWMgbG9uZyB4Y2xvY2s7CQkJLyogRm9yIGdldHRp bmcgdGltZSBmcm9tIHN5cy90aW1lLmggKi8KKyAgICBzdGF0aWMgc3RydWN0IHRpbWViIGZ0cDsJ CS8qIEFuZCBmcm9tIHN5cy90aW1lYi5oICovCisjZW5kaWYgLyogVE9XRVIxICovCisKKyNpZmRl ZiBDT0hFUkVOVAorICAgIHN0YXRpYyBsb25nIHhjbG9jazsJCQkvKiBGb3IgZ2V0dGluZyB0aW1l IGZyb20gc3lzL3RpbWUuaCAqLworICAgIHN0YXRpYyBzdHJ1Y3QgdGltZWIgZnRwOwkJLyogQW5k IGZyb20gc3lzL3RpbWViLmggKi8KKyNlbmRpZiAvKiBDT0hFUkVOVCAqLworCisjaWZkZWYgVjcK KyAgICBzdGF0aWMgbG9uZyB4Y2xvY2s7CisjZW5kaWYgLyogVjcgKi8KKworLyogc2d0dHkvdGVy bWlvIGluZm9ybWF0aW9uLi4uICovCisKKyNpZmRlZiBCU0Q0NE9SUE9TSVgJCQkvKiBQT1NJWCBv ciBCU0Q0NCAqLworICBzdGF0aWMgc3RydWN0IHRlcm1pb3MKKyAgICB0dG9sZCwgdHRyYXcsIHR0 dHZ0LCB0dGN1ciwKKyAgICBjY29sZCwgY2NyYXcsIGNjY2JyazsKKyNlbHNlCQkJCQkvKiBCU0Qs IFY3LCBldGMgKi8KKworI2lmZGVmIENPSEVSRU5UCQkJCS8qIEhhY2sgYWxlcnQuLi4gKi8KKyNk ZWZpbmUgQVRUU1YKKyNlbmRpZiAvKiBDT0hFUkVOVCAqLworCisjaWZkZWYgQVRUU1YKKyAgc3Rh dGljIHN0cnVjdCB0ZXJtaW8gdHRvbGQgPSB7MH07CS8qIEluaXQnZCBmb3Igd29yZCBhbGlnbm1l bnQsICovCisgIHN0YXRpYyBzdHJ1Y3QgdGVybWlvIHR0cmF3ID0gezB9OwkvKiB3aGljaCBpcyBp bXBvcnRhbnQgZm9yIHNvbWUgKi8KKyAgc3RhdGljIHN0cnVjdCB0ZXJtaW8gdHR0dnQgPSB7MH07 CS8qIHN5c3RlbXMsIGxpa2UgWmlsb2cuLi4gKi8KKyAgc3RhdGljIHN0cnVjdCB0ZXJtaW8gdHRj dXIgPSB7MH07CisgIHN0YXRpYyBzdHJ1Y3QgdGVybWlvIGNjb2xkID0gezB9OworICBzdGF0aWMg c3RydWN0IHRlcm1pbyBjY3JhdyA9IHswfTsKKyAgc3RhdGljIHN0cnVjdCB0ZXJtaW8gY2NjYnJr ID0gezB9OworI2Vsc2UKKyAgc3RhdGljIHN0cnVjdCBzZ3R0eWIgICAgICAgICAgICAgICAgICAv KiBzZ3R0eSBpbmZvLi4uICovCisgICAgdHRvbGQsIHR0cmF3LCB0dHR2dCwgdHRjdXIsIAkvKiBm b3IgY29tbXVuaWNhdGlvbiBsaW5lICovCisgICAgY2NvbGQsIGNjcmF3LCBjY2Nicms7CQkvKiBh bmQgZm9yIGNvbnNvbGUgKi8KKyNpZmRlZiBCRUxMVjEwCisgIHN0YXRpYyBzdHJ1Y3QgdHR5ZGV2 YgkJCS8qIERldmljZSBpbmZvLi4uICovCisgICAgdGRvbGQsIHRkY3VyOwkJCS8qIGZvciBjb21t dW5pY2F0aW9uIGRldmljZSAqLworI2VuZGlmIC8qIEJFTExWMTAgKi8KKyNpZmRlZiBUSU9DR0VU QworICBzdGF0aWMgc3RydWN0IHRjaGFycyB0Y2hvbGQsIHRjaG5vaTsKKworICBzdGF0aWMgaW50 IHRjaGFyZjsKKyNlbmRpZiAvKiBUSU9DR0VUQyAqLworI2lmZGVmIFRJT0NHTFRDCisgIHN0YXRp YyBzdHJ1Y3QgbHRjaGFycyBsdGNob2xkLCBsdGNobm9pOworICBzdGF0aWMgaW50IGx0Y2hhcmY7 CisjZW5kaWYgLyogVElPQ0dMVEMgKi8KKyAgaW50IGxtb2RlZiA9IDA7CQkJLyogTG9jYWwgbW9k ZXMgKi8KKyAgaW50IGxtb2RlID0gMDsKKyNlbmRpZiAvKiBBVFRTViAqLworI2VuZGlmIC8qIEJT RDQ0T1JQT1NJWCAqLworCisjaWZkZWYgQ09NTUVOVAorLyogSXQgcGlja3MgdXAgdGhlIHNwZWVk cyBidXQgdGhleSBkb24ndCB3b3JrICovCisjaWZkZWYgVU5JWFdBUkUJCQkJLyogRm9yIGhpZ2hl ciBzZXJpYWwgc3BlZWRzICovCisjaWZkZWYgVVc3CQkJCS8qIGluIFVuaXh3YXJlIDcuMCAqLwor I2luY2x1ZGUgPHN5cy9hc3ljLmg+CQkJLyogVGhpcyBwaWNrcyB1cCA1NzYwMCBhbmQgMTE1MjAw ICovCisjZW5kaWYgLyogVVc3ICovCisjZW5kaWYgLyogVU5JWFdBUkUgKi8KKyNlbmRpZiAvKiBD T01NRU5UICovCisKKyNpZmRlZiBQUk9WWDEKKyAgc3RhdGljIHN0cnVjdCBzZ3R0eWIgdHRidWY7 CisjZW5kaWYgLyogUFJPVlgxICovCisKKyNpZmRlZiB1bHRyaXgKKy8qIGRvIHdlIHJlYWxseSBu ZWVkIHRoaXM/ICovCisgIHN0YXRpYyBzdHJ1Y3Qgc2d0dHliIHZhbmlsbGE7CisjZW5kaWYgLyog dWx0cml4ICovCisKKyNpZmRlZiBBVFQ3MzAwCitzdGF0aWMgaW50IGF0dG1vZGVtID0gMDsgICAg ICAgICAgICAgICAgLyogQVRUNzMwMCBpbnRlcm5hbC1tb2RlbSBzdGF0dXMgKi8KK3N0cnVjdCB1 cGRhdGEgZGlhbGVyID0gezB9OwkJLyogQ29uZGl0aW9uIGRpYWxlciBmb3IgZGF0YSBjYWxsICov CisjZW5kaWYgLyogQVRUNzMwMCAqLworCisjaWZuZGVmIE5PVVVDUAorI2RlZmluZSBGTEZOQU1M IDEyOAorI2lmbmRlZiBVU0VUVFlMT0NLCisjaWZkZWYgUlRBSVgKK2NoYXIgbGtmbGZuW0ZMRk5B TUxdID0geyAnXDAnLCAnXDAnIH07CS8qIGFuZCBwb3NzaWJsZSBsaW5rIHRvIGl0ICovCisjZW5k aWYgLyogUlRBSVggKi8KK2NoYXIgbG9jazJbRkxGTkFNTF0gPSAgeyAnXDAnLCAnXDAnIH07CS8q IE5hbWUgb2Ygc2Vjb25kIGxvY2tmaWxlICovCisjZW5kaWYgLyogVVNFVFRZTE9DSyAqLworI2Vs c2UKKyNkZWZpbmUgRkxGTkFNTCA3CisjZW5kaWYgLyogTk9VVUNQICovCitjaGFyIGZsZm5hbVtG TEZOQU1MKzFdID0geyAnXDAnLCAnXDAnIH07IC8qIFVVQ1AgbG9jayBmaWxlIHBhdGggbmFtZSAq LworCitpbnQgaGFzbG9jayA9IDA7CQkJLyogPTEgaWYgdGhpcyBrZXJtaXQgbG9ja2VkIHV1Y3Ag Ki8KKworI2lmbmRlZiBPWE9TCisjaWZkZWYgU1ZPUlBPU0lYCitzdGF0aWMgaW50IGNvbmVzYyA9 IDA7ICAgICAgICAgICAgICAgICAgLyogc2V0IHRvIDEgaWYgZXNjIGNoYXIgKF5cKSB0eXBlZCAq LworI2Vsc2UKKyNpZmRlZiBWNworc3RhdGljIGludCBjb25lc2MgPSAwOworI2Vsc2UKKyNpZmRl ZiBDNzAKK3N0YXRpYyBpbnQgY29uZXNjID0gMDsKKyNlbmRpZiAvKiBDNzAgKi8KKyNlbmRpZiAv KiBWNyAqLworI2VuZGlmIC8qIFNWT1JQT1NJWCAqLworI2VuZGlmIC8qIE9YT1MgKi8KKworLyog TG9jYWwgY29weSBvZiBjb21tIGRldmljZSBuYW1lIG9yIG5ldHdvcmsgaG9zdCAqLworc3RhdGlj IGNoYXIgdHRubXN2W0RFVk5BTUxFTisxXSA9IHsgJ1wwJywgJ1wwJyB9OworI2lmZGVmIFVTRVRU WUxPQ0sKK3N0YXRpYyBjaGFyIGxvY2tuYW1lW0RFVk5BTUxFTisxXTsJLyogRGl0dG8sIHRoZSBw YXJ0IGFmdGVyICIvZGV2LyIuICovCisjZW5kaWYgLyogVVNFVFRZTE9DSyAqLworCisjaWZkZWYg YWVnaXMKK3N0YXRpYyBzdGF0dXNfJHQgc3Q7ICAgICAgICAgICAgICAgICAgICAvKiBlcnJvciBz dGF0dXMgcmV0dXJuIHZhbHVlICovCitzdGF0aWMgc2hvcnQgY29uY3JwID0gMDsgICAgICAgICAg ICAgICAgLyogdHJ1ZSBpZiBjb25zb2xlIGlzIENSUCBwYWQgKi8KK3N0YXRpYyB1aWRfJHQgdHR5 dWlkOyAgICAgICAgICAgICAgICAgICAvKiB0dHkgdHlwZSB1aWQgKi8KK3N0YXRpYyB1aWRfJHQg Y29udWlkOyAgICAgICAgICAgICAgICAgICAvKiBzdGRvdXQgdHlwZSB1aWQgKi8KKworLyogQVBP TExPIEFlZ2lzIG1haW4oKQorICogZXN0YWJsaXNoIGFjbCB1c2FnZSBhbmQgY2xlYW51cCBoYW5k bGluZworICogICAgdGhpcyBtYWtlcyBzdXJlIHRoYXQgQ1JQIHBhZHMKKyAqICAgIGdldCByZXN0 b3JlZCB0byBhIHVzYWJsZSBtb2RlCisgKi8KK21haW4oYXJnYyxhcmd2KSBpbnQgYXJnYzsgY2hh ciAqKmFyZ3Y7IHsKKyAgICAgICAgc3RhdHVzXyR0IHN0YXR1czsKKyAgICAgICAgcGZtXyRjbGVh bnVwX3JlYyBkaXJ0eTsKKworICAgICAgICBQSURfVCBwaWQgPSBnZXRwaWQoKTsKKworICAgICAg ICAvKiBhY2wgdXNhZ2UgYWNjb3JkaW5nIHRvIGludm9raW5nIGVudmlyb25tZW50ICovCisgICAg ICAgIGRlZmF1bHRfYWNsKFVTRV9ERUZFTlYpOworCisgICAgICAgIC8qIGVzdGFibGlzaCBhIGNs ZWFudXAgY29udGludWF0aW9uICovCisgICAgICAgIHN0YXR1cyA9IHBmbV8kY2xlYW51cChkaXJ0 eSk7CisgICAgICAgIGlmIChzdGF0dXMuYWxsICE9IHBmbV8kY2xlYW51cF9zZXQpIHsKKyAgICAg ICAgICAgICAgICAvKiBvbmx5IGhhbmRsZSBmYXVsdHMgZm9yIHRoZSBvcmlnaW5hbCBwcm9jZXNz ICovCisgICAgICAgICAgICAgICAgaWYgKHBpZCA9PSBnZXRwaWQoKSAmJiBzdGF0dXMuYWxsID4g cGdtXyRtYXhfc2V2ZXJpdHkpIHsKKwkJICAgIC8qIGJsZXcgdXAgaW4gbWFpbiBwcm9jZXNzICov CisJCSAgICBzdGF0dXNfJHQgcXVvOworCQkgICAgcGZtXyRjbGVhbnVwX3JlYyBjbGVhbjsKKwor CQkgICAgLyogcmVzdG9yZSB0aGUgY29uc29sZSBpbiBhbnkgY2FzZSAqLworCQkgICAgY29ucmVz KCk7CisKKwkJICAgIC8qIGF0dGVtcHQgYSBjbGVhbiBleGl0ICovCisJCSAgICBkZWJ1ZyhGMTAx LCAiY2xlYW51cCBmYXVsdCBzdGF0dXMiLCAiIiwgc3RhdHVzLmFsbCk7CisKKwkJICAgIC8qIGRv ZXhpdCgpLCB0aGVuIHNlbmQgc3RhdHVzIHRvIGNvbnRpbnVhdGlvbiAqLworCQkgICAgcXVvID0g cGZtXyRjbGVhbnVwKGNsZWFuKTsKKwkJICAgIGlmIChxdW8uYWxsID09IHBmbV8kY2xlYW51cF9z ZXQpCisJCSAgICAgIGRvZXhpdChwZ21fJHByb2dyYW1fZmF1bHRlZCwtMSk7CisJCSAgICBlbHNl IGlmIChxdW8uYWxsID4gcGdtXyRtYXhfc2V2ZXJpdHkpCisJCSAgICAgIHBmbV8kc2lnbmFsKHF1 byk7IC8qIGJsZXcgdXAgaW4gZG9leGl0KCkgKi8KKyAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgICAgLyogc2VuZCB0byB0aGUgb3JpZ2luYWwgY29udGludWF0aW9uICovCisgICAgICAg ICAgICAgICAgcGZtXyRzaWduYWwoc3RhdHVzKTsKKyAgICAgICAgICAgICAgICAvKk5PVFJFQUNI RUQqLworCSAgICB9CisgICAgICAgIHJldHVybihja2NtYWkoYXJnYywgYXJndikpOworfQorI2Vu ZGlmIC8qIGFlZ2lzICovCisKKy8qIEFOU0ktc3R5bGUgcHJvdG90eXBlcyBmb3IgaW50ZXJuYWwg ZnVuY3Rpb25zLiAqLworLyogRnVuY3Rpb25zIHVzZWQgb3V0c2lkZSB0aGlzIG1vZHVsZSBhcmUg cHJvdG90eXBlZCBpbiBja2NrZXIuaC4gKi8KKworI2lmZGVmIGFwb2xsbworX1BST1RPVFlQKCBT SUdUWVAgdGltZXJoLCAoKSApOworX1BST1RPVFlQKCBTSUdUWVAgY2N0cmFwLCAoKSApOworX1BS T1RPVFlQKCBTSUdUWVAgZXNjdHJwLCAoKSApOworX1BST1RPVFlQKCBTSUdUWVAgc2lnX2lnbiwg KCkgKTsKKyNlbHNlCitfUFJPVE9UWVAoIFNJR1RZUCB0aW1lcmgsIChpbnQpICk7CitfUFJPVE9U WVAoIFNJR1RZUCBjY3RyYXAsIChpbnQpICk7CitfUFJPVE9UWVAoIFNJR1RZUCBlc2N0cnAsIChp bnQpICk7CisjZW5kaWYgLyogYXBvbGxvICovCitfUFJPVE9UWVAoIGludCBkb19vcGVuLCAoY2hh ciAqKSApOworX1BST1RPVFlQKCBzdGF0aWMgaW50IGluX2NoaywgKGludCwgaW50KSApOworX1BS T1RPVFlQKCBzdGF0aWMgaW50IHR0cnBpZCwgKGNoYXIgKikgKTsKK19QUk9UT1RZUCggc3RhdGlj IGludCB0dGNoa3BpZCwgKGNoYXIgKikgKTsKK19QUk9UT1RZUCggc3RhdGljIGludCB0dGxvY2ss IChjaGFyICopICk7CitfUFJPVE9UWVAoIHN0YXRpYyBpbnQgdHR1bmxjaywgKHZvaWQpICk7Citf UFJPVE9UWVAoIHN0YXRpYyBWT0lEIHNpZ2NobGRfaGFuZGxlciwgKGludCkgKTsKK19QUk9UT1RZ UCggaW50IG15Z2V0YnVmLCAodm9pZCkgKTsKK19QUk9UT1RZUCggaW50IG15ZmlsbGJ1ZiwgKHZv aWQpICk7CitfUFJPVE9UWVAoIFZPSUQgY29uYmd0LCAoaW50KSApOworI2lmZGVmIEFDVUNOVFJM CitfUFJPVE9UWVAoIFZPSUQgYWN1Y250cmwsIChjaGFyICosIGNoYXIgKikgKTsKKyNlbmRpZiAv KiBBQ1VDTlRSTCAqLworCisjaWZkZWYgQlNENDRPUlBPU0lYCitfUFJPVE9UWVAoIGludCBjYXJy Y3RsLCAoc3RydWN0IHRlcm1pb3MgKiwgaW50KSApOworI2Vsc2UKKyNpZmRlZiBBVFRTVgorX1BS T1RPVFlQKCBpbnQgY2FycmN0bCwgKHN0cnVjdCB0ZXJtaW8gKiwgaW50KSApOworI2Vsc2UKK19Q Uk9UT1RZUCggaW50IGNhcnJjdGwsIChzdHJ1Y3Qgc2d0dHliICosIGludCkgKTsKKyNlbmRpZiAv KiBBVFRTViAqLworI2VuZGlmIC8qIEJTRDQ0T1JQT1NJWCAqLworCisjaWZkZWYgQVRUNzMwMAor X1BST1RPVFlQKCBpbnQgYXR0ZGlhbCwgKGNoYXIgKiwgbG9uZywgY2hhciAqKSApOworX1BST1RP VFlQKCBpbnQgb2ZmZ2V0dHksIChjaGFyICopICk7CitfUFJPVE9UWVAoIGludCBvbmdldHR5LCAo Y2hhciAqKSApOworI2VuZGlmIC8qIEFUVDczMDAgKi8KKworI2lmZGVmIEJFT1NPUkJFQk9YCisj aWZkZWYgU0VMRUNUCisgICAgLyogQmVPUyBpcyBub3QgY2FwYWJsZSBvZiB1c2luZyBTRUxFQ1Qg b24gYW55dGhpbmcgYnV0IHNvY2tldHMgKi8KKyN1bmRlZiBTRUxFQ1QKKyNlbmRpZiAvKiBTRUxF Q1QgKi8KKyNpbmNsdWRlIDxrZXJuZWwvT1MuaD4KKy8qICNpZmRlZiBCRV9EUl83ICovCitzdGF0 aWMgZG91YmxlIHRpbWVfc3RhcnRlZCA9IDAuMDsKK3N0cnVjdCBBTEFSTV9TVFJVQ1QgeworICAg IHRocmVhZF9pZCB0aHJlYWQ7CisgICAgaW50IHRpbWU7Cit9Oworc3RhdGljIHRocmVhZF9pZCBh bGFybV90aHJlYWQgPSAtMTsKK3N0YXRpYyBzdHJ1Y3QgQUxBUk1fU1RSVUNUIGFsYXJtX3N0cnVj dDsKK19QUk9UT1RZUCggbG9uZyBkb19hbGFybSwgKHZvaWQgKikgKTsKK19QUk9UT1RZUCggdW5z aWduZWQgaW50IGFsYXJtLCAodW5zaWduZWQgaW50KSApOworX1BST1RPVFlQKCB2b2lkIGFsYXJt X2V4cGlyZWQsICh2b2lkKSApOworLyogI2VuZGlmICovIC8qIEJFX0RSXzcgKi8KKyNlbmRpZiAv KiBCRU9TT1JCRUJPWCAqLworCisjaWZuZGVmIHh1bmNoYXIKKyNkZWZpbmUgeHVuY2hhcihjaCkg KCgoY2gpIC0gMzIgKSAmIDB4RkYgKQkvKiBDaGFyYWN0ZXIgdG8gbnVtYmVyICovCisjZW5kaWYg LyogeHVuY2hhciAqLworCisjaWZkZWYgQ0tfQU5TSUMKK3N0YXRpYyBjaGFyICoKK3h4bGFzdChj aGFyICpzLCBjaGFyIGMpCisjZWxzZQorc3RhdGljIGNoYXIgKgoreHhsYXN0KHMsYykgY2hhciAq czsgY2hhciBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCisvKiB4eGxhc3QgKi8gewkJLyogIExh c3Qgb2NjdXJyZW5jZSBvZiBjaGFyYWN0ZXIgYyBpbiBzdHJpbmcgcy4gKi8KKyAgICBpbnQgaTsK KyAgICBmb3IgKGkgPSAoaW50KXN0cmxlbihzKTsgaSA+IDA7IGktLSkKKyAgICAgIGlmIChzW2kt MV0gPT0gYyApIHJldHVybihzICsgKGkgLSAxKSk7CisgICAgcmV0dXJuKE5VTEwpOworfQorCisv KiBUaW1lb3V0IGhhbmRsZXIgZm9yIGNvbW11bmljYXRpb24gbGluZSBpbnB1dCBmdW5jdGlvbnMg Ki8KKworLypBUkdTVVNFRCovCitTSUdUWVAKK3RpbWVyaChmb28pIGludCBmb287IHsKKyAgICB0 dGltb2ZmKCk7CisjaWZkZWYgQkVPU09SQkVCT1gKKy8qICNpZmRlZiBCRV9EUl83ICovCisgICAg YWxhcm1fZXhwaXJlZCgpOworLyogI2VuZGlmICovIC8qIEJFX0RSXzcgKi8KKyNlbmRpZiAvKiBC RU9TT1JCRUJPWCAqLworI2lmZGVmIENLX1BPU0lYX1NJRworICAgIHNpZ2xvbmdqbXAoc2pidWYs MSk7CisjZWxzZQorICAgIGxvbmdqbXAoc2pidWYsMSk7CisjZW5kaWYgLyogQ0tfUE9TSVhfU0lH ICovCit9CisKKy8qQVJHU1VTRUQqLworU0lHVFlQCit4dGltZXJoKGZvbykgaW50IGZvbzsgewkJ CS8qIExpa2UgdGltZXJoKCkgYnV0IGRvZXMgKi8KKyNpZmRlZiBCRU9TT1JCRUJPWAkJCS8qIG5v dCByZXNldCB0aGUgdGltZXIgaXRzZWxmICovCisvKiAjaWZkZWYgQkVfRFJfNyAqLworICAgIGFs YXJtX2V4cGlyZWQoKTsKKy8qICNlbmRpZiAqLyAvKiBCRV9EUl83ICovCisjZW5kaWYgLyogQkVP U09SQkVCT1ggKi8KKyNpZmRlZiBDS19QT1NJWF9TSUcKKyAgICBzaWdsb25nam1wKHNqYnVmLDEp OworI2Vsc2UKKyAgICBsb25nam1wKHNqYnVmLDEpOworI2VuZGlmIC8qIENLX1BPU0lYX1NJRyAq LworfQorCisKKy8qIENvbnRyb2wtQyB0cmFwIGZvciBjb21tdW5pY2F0aW9uIGxpbmUgaW5wdXQg ZnVuY3Rpb25zICovCisKK2ludCBjY19pbnQ7CQkJCS8qIEZsYWcgKi8KK1NJR1RZUCAoKiBvY2N0 KSgpOwkJCS8qIEZvciBzYXZpbmcgb2xkIFNJR0lOVCBoYW5kbGVyICovCisKKy8qQVJHU1VTRUQq LworU0lHVFlQCitjY3RyYXAoZm9vKSBpbnQgZm9vOyB7CQkJLyogTmVlZHMgYXJnIGZvciBBTlNJ IEMgKi8KKyAgY2NfaW50ID0gMTsJCQkJLyogc2lnbmFsKCkgcHJvdG90eXBlLiAqLworICByZXR1 cm47Cit9CisKKy8qICBTIFkgUyBJIE4gSSBUICAtLSAgU3lzdGVtLWRlcGVuZGVudCBwcm9ncmFt IGluaXRpYWxpemF0aW9uLiAgKi8KKworLyoKKyAqIHR0Z3dzaXooKSByZXR1cm5zOgorICoJMSAg ICB0dF9yb3dzIGFuZCB0dF9jb2xzIGFyZSBrbm93biwgYm90aCBhbHRlcmVkLCBib3RoID4gMAor ICoJMCAgICB0dF9yb3dzIGFuZC9vciB0dF9jb2xzIGFyZSBrbm93biwgYm90aCBhbHRlcmVkLCBv bmUgb3IgYm90aCA8PSAwCisgKgktMSAgIHR0X3Jvd3MgYW5kIHR0X2NvbHMgYXJlIHVua25vd24g YW5kIHVuYWx0ZXJlZAorICovCisKK2V4dGVybiBpbnQgdHRfcm93cywgdHRfY29sczsKKworc3Rh dGljIGludAoreHR0Z3dzaXooKSB7CisgICAgY2hhciAqcDsKKyAgICBpbnQgcm93cyA9IDAsIGNv bHMgPSAwOworICAgIHAgPSBnZXRlbnYoIkxJTkVTIik7CisgICAgZGVidWcoRjExMCwieHR0Z3dz aXogTElORVMiLHAsMCk7CisgICAgaWYgKHApIHsKKwlyb3dzID0gYXRvbChwKTsKKwlpZiAocm93 cyA+IDApIHsKKwkgICAgcCA9IGdldGVudigiQ09MVU1OUyIpOworCSAgICBkZWJ1ZyhGMTEwLCJ4 dHRnd3NpeiBDT0xVTU5TIixwLDApOworCSAgICBpZiAocCkgeworCQljb2xzID0gYXRvbChwKTsK KwkJaWYgKGNvbHMgPiAwKSB7CisJCSAgICB0dF9yb3dzID0gcm93czsKKwkJICAgIHR0X2NvbHMg PSBjb2xzOworCQkgICAgcmV0dXJuKDEpOworCQl9CisJCXJldHVybigwKTsKKwkgICAgfQorCX0K KyAgICB9CisgICAgcmV0dXJuKC0xKTsKK30KKworI2lmZGVmIFRUTEVCVUYKK1ZPSUQKK2xlX2lu aXQoKSB7CQkJCS8qIExvY2FsRWNob0luaXQoKSAqLworICAgIGludCBpOworICAgIGZvciAoaSA9 IDA7IGkgPCBMRUJVRlNJWjsgaSsrKQorICAgICAgbGVfYnVmW2ldID0gJ1wwJzsKKyAgICBsZV9z dGFydCA9IDA7CisgICAgbGVfZW5kID0gMDsKKyAgICBsZV9kYXRhID0gMDsKK30KKworVk9JRAor bGVfY2xlYW4oKSB7CQkJCS8qIExvY2FsRWNob0NsZWFudXAoKSAqLworICAgIGxlX2luaXQoKTsK KyAgICByZXR1cm47Cit9CisKK2ludAorbGVfaW5idWYoKSB7CisgICAgaW50IHJjID0gMDsKKyAg ICBpZiAobGVfc3RhcnQgIT0gbGVfZW5kKSB7CisJcmMgPSAobGVfZW5kIC0KKwkgICAgICBsZV9z dGFydCArCisJICAgICAgTEVCVUZTSVopICUgTEVCVUZTSVo7CisgICAgfQorICAgIGRlYnVnKEYx MTEsImxlX2luYnVmIiwiY2hhcnMgd2FpdGluZyIscmMpOworICAgIHJldHVybihyYyk7Cit9CisK K2ludAorI2lmZGVmIENLX0FOU0lDCitsZV9wdXRjaGFyKENIQVIgY2gpCisjZWxzZQorbGVfcHV0 Y2hhcihjaCkgQ0hBUiBjaDsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogbGVfcHV0Y2hhciAq LyB7CisjaWZkZWYgQ09NTUVOVAorICAgIC8qIEluIFVOSVggd2UgZG8gbm90IGhhdmUgYW5vdGhl ciB0aHJlYWQgdGFraW5nIGNoYXJzIG91dCBvZiB0aGUgYnVmZmVyICovCisgICAgd2hpbGUgKChs ZV9zdGFydCAtIGxlX2VuZCA9PSAxKSB8fAorICAgICAgICAgICAgKGxlX3N0YXJ0ID09IDAgJiYg bGVfZW5kID09IExFQlVGU0laIC0gMSkpIHsKKwkvKiBCdWZmZXIgaXMgZnVsbCAqLworICAgICAg ICBkZWJ1ZyhGMTExLCJsZV9wdXRjaGFyIiwiQnVmZmVyIGlzIEZ1bGwiLGNoKTsKKyAgICAgICAg UmVsZWFzZUxvY2FsRWNob011dGV4KCkgOworICAgICAgICBtc2xlZXAoMjUwKTsKKyAgICAgICAg UmVxdWVzdExvY2FsRWNob011dGV4KCBTRU1fSU5ERUZJTklURV9XQUlUICkgOworICAgIH0KKyNl bHNlCisgICAgaWYgKChsZV9zdGFydCAtIGxlX2VuZCArIExFQlVGU0laKSVMRUJVRlNJWiA9PSAx KSB7CisgICAgICAgIGRlYnVnKEYxMTAsImxlX3B1dGNoYXIiLCJidWZmZXIgaXMgZnVsbCIsMCk7 CisgICAgICAgIHJldHVybigtMSk7CisgICAgfQorI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICBs ZV9idWZbbGVfZW5kKytdID0gY2g7CisgICAgaWYgKGxlX2VuZCA9PSBMRUJVRlNJWikKKyAgICAg IGxlX2VuZCA9IDA7CisgICAgbGVfZGF0YSA9IDE7CisgICAgcmV0dXJuKDApOworfQorCitpbnQK KyNpZmRlZiBDS19BTlNJQworbGVfcHV0cyhDSEFSICogcywgaW50IG4pCisjZWxzZQorbGVfcHV0 cyhzLG4pIENIQVIgKiBzOyBpbnQgbjsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogbGVfcHV0 cyAqLyB7CisgICAgaW50IHJjID0gMDsKKyAgICBpbnQgaSA9IDA7CisgICAgQ0hBUiAqIHAgPSAo Q0hBUiAqKSJsZV9wdXRzIjsKKyAgICBja2hleGR1bXAocCxzLG4pOworICAgIGZvciAoaSA9IDA7 IGkgPCBuOyBpKyspCisgICAgICByYyA9IGxlX3B1dGNoYXIoKGNoYXIpc1tpXSk7CisgICAgZGVi dWcoRjEwMSwibGVfcHV0cyIsIiIscmMpOworICAgIHJldHVybihyYyk7Cit9CisKK2ludAorI2lm ZGVmIENLX0FOU0lDCitsZV9wdXRzdHIoQ0hBUiAqIHMpCisjZWxzZQorbGVfcHV0c3RyKHMpIENI QVIgKiBzOworI2VuZGlmIC8qIENLX0FOU0lDICovCisvKiBsZV9wdXRzICovIHsKKyAgICBDSEFS ICogcDsKKyAgICBpbnQgcmMgPSAwOworICAgIHAgPSAoQ0hBUiAqKSJsZV9wdXRzdHIiOworICAg IGNraGV4ZHVtcChwLHMsKGludClzdHJsZW4oKGNoYXIgKilzKSk7CisgICAgZm9yIChwID0gczsg KnAgJiYgIXJjOyBwKyspCisgICAgICByYyA9IGxlX3B1dGNoYXIoKnApOworICAgIHJldHVybihy Yyk7Cit9CisKK2ludAorI2lmZGVmIENLX0FOU0lDCitsZV9nZXRjaGFyKENIQVIgKiBwY2gpCisj ZWxzZSAvKiBDS19BTlNJQyAqLworbGVfZ2V0Y2hhcihwY2gpIENIQVIgKiBwY2g7CisjZW5kaWYg LyogQ0tfQU5TSUMgKi8KKy8qIGxlX2dhdGNoYXIgKi8geworICAgIGludCByYyA9IDA7CisgICAg aWYgKGxlX3N0YXJ0ICE9IGxlX2VuZCkgeworICAgICAgICAqcGNoID0gbGVfYnVmW2xlX3N0YXJ0 XTsKKyAgICAgICAgbGVfYnVmW2xlX3N0YXJ0XSA9IDA7CisgICAgICAgIGxlX3N0YXJ0Kys7CisK KyAgICAgICAgaWYgKGxlX3N0YXJ0ID09IExFQlVGU0laKQorICAgICAgICAgIGxlX3N0YXJ0ID0g MDsKKworICAgICAgICBpZiAobGVfc3RhcnQgPT0gbGVfZW5kKSB7CisgICAgICAgICAgICBsZV9k YXRhID0gMDsKKyAgICAgICAgfQorICAgICAgICByYysrOworICAgIH0gZWxzZSB7CisgICAgICAg ICpwY2ggPSAwOworICAgIH0KKyAgICByZXR1cm4ocmMpOworfQorI2VuZGlmIC8qIFRUTEVCVUYg Ki8KKworI2lmZGVmIENPTU1FTlQKKy8qCisgIFNvbWUgc3lzdGVtcyBsaWtlIE9TRi8xIHVzZSBU SU9DR1NJWkUgaW5zdGVhZCBvZiBUSU9DR1dJTlNaLgorICBCdXQgYXMgZmFyIGFzIEkga25vdywg d2hlbmV2ZXIgVElPQ0dTSVpFIGlzIGRlZmluZWQsIGl0IGlzCisgIGVxdWF0ZWQgdG8gVElPQ0dX SU5TWi4gIEZvciBjYXNlcyB3aGVyZSB0aGlzIGlzIG5vdCBkb25lLCB0cnkgdGhpczoKKyovCisj aWZuZGVmIFRJT0NHV0lOU1oKKyNpZmRlZiBUSU9DR1NJWkUKKyNkZWZpbmUgVElPQ0dXSU5TWiBU SU9DR1NJWkUKKyNlbmRpZiAvKiBUSU9DR1NJWkUgKi8KKyNlbmRpZiAvKiBUSU9DR1dJTlNaICov CisjZW5kaWYgLyogQ09NTUVOVCAqLworCitzdGF0aWMgaW50IHR0X3hwaXhlbCA9IDAsIHR0X3lw aXhlbCA9IDA7CisKK2ludAordHRnd3NpeigpIHsKKyAgICBpbnQgeCA9IDA7CisjaWZuZGVmIE5P TkFXUworI2lmZGVmIFFOWAorLyoKKyAgTk9URTogVElPQ0dXU0laIHdvcmtzIGhlcmUgdG9vLCBi dXQgb25seSBpbiB0aGUgMzItYml0IHZlcnNpb24uCisgIFRoaXMgY29kZSB3b3JrcyBmb3IgYm90 aCB0aGUgMTYtIGFuZCAzMi1iaXQgdmVyc2lvbnMuCisqLworICAgIGV4dGVybiBpbnQgZGV2X3Np emUoaW50LCBpbnQsIGludCwgaW50ICosIGludCAqKTsKKyAgICBpbnQgciwgYzsKKworICAgIGlm IChkZXZfc2l6ZSgwLCAtMSwgLTEsICZyLCAmYykgPT0gMCkgeworCWRlYnVnKEYxMDEsInR0Z3dz aXogUU5YIHIiLCIiLHIpOworCWRlYnVnKEYxMDEsInR0Z3dzaXogUU5YIGMiLCIiLGMpOworCXR0 X3Jvd3MgPSByOworCXR0X2NvbHMgPSBjOworCXJldHVybiAoKHIgPiAwICYmIGMgPiAwKSA/IDEg OiAwKTsKKyAgICB9IGVsc2UgcmV0dXJuKHh0dGd3c2l6KCkpOworI2Vsc2UgLyogUU5YICovCisj aWZkZWYgVElPQ0dXSU5TWgorCisvKiBOb3RlLCB0aGlzIHdhcyBNX1VOSVgsIGNoYW5nZWQgdG8g WEVOSVggdG8gYWxsb3cgY3Jvc3MgY29tcGlsYXRpb24uLi4gKi8KKyNpZmRlZiBYRU5JWAkJCQkv KiBTQ08gVU5JWCAzLjJ2NC4wICovCisjaW5jbHVkZSA8c3lzL3N0cmVhbS5oPgkJCS8qIHR5cGVk ZWYgbWJsa190IG5lZWRlZCBieSBwdGVtLmggKi8KKyNpbmNsdWRlIDxzeXMvcHRlbS5oPgkJCS8q IGZvciB0dGd3c2l6KCkgKi8KKyNlbmRpZiAvKiBYRU5JWCAqLworCisjaWZkZWYgSTM4NklYCQkJ CS8qIERpdHRvIGZvciBJbnRlcmFjdGl2ZSAqLworI2luY2x1ZGUgPHN5cy9zdHJlYW0uaD4KKyNp bmNsdWRlIDxzeXMvcHRlbS5oPgorI2VuZGlmIC8qIEkzODZJWCAqLworCisvKiBOb3RlLCB0aGUg YWJvdmUgbWlnaHQgYmUgbmVlZGVkIGZvciBzb21lIG90aGVyIG9sZGVyIFNWUjMgSW50ZWwgbWFr ZXMuLi4gKi8KKworICAgIHN0cnVjdCB3aW5zaXplIHc7CisgICAgdHRfeHBpeGVsID0gMDsKKyAg ICB0dF95cGl4ZWwgPSAwOworCisjaWZkZWYgSUtTRAorICAgIGlmIChpbnNlcnZlcikKKyAgICAg IHJldHVybih4dHRnd3NpeigpKTsKKyNlbmRpZiAvKiBJS1NEICovCisgICAgeCA9IGlvY3RsKDAs IChpbnQpVElPQ0dXSU5TWiwgKGNoYXIgKikmdyk7CisgICAgZGVidWcoRjEwMSwidHRnd3NpeiBU SU9DR1dJTlNaIiwiIix4KTsKKyAgICBpZiAoeCA8IDApIHsKKwlyZXR1cm4oeHR0Z3dzaXooKSk7 CisgICAgfSBlbHNlIGlmICh3LndzX3JvdyA+IDAgJiYgdy53c19jb2wgPiAwKSB7CisJdHRfcm93 cyA9IHcud3Nfcm93OworCXR0X2NvbHMgPSB3LndzX2NvbDsKKwl0dF94cGl4ZWwgPSB3LndzX3hw aXhlbDsKKwl0dF95cGl4ZWwgPSB3LndzX3lwaXhlbDsKKwlkZWJ1ZyhGMTAxLCJ0dGd3c2l6IHR0 X3Jvd3MiLCIiLHR0X3Jvd3MpOworCWRlYnVnKEYxMDEsInR0Z3dzaXogdHRfY29scyIsIiIsdHRf Y29scyk7CisJcmV0dXJuKDEpOworICAgIH0gZWxzZSB7CisJZGVidWcoRjEwMCwidHRnd3NpeiBU SU9DR1dJTlNaIDAwIiwiIiwwKTsKKwlyZXR1cm4oeHR0Z3dzaXooKSk7CisgICAgfQorI2Vsc2UK KyAgICByZXR1cm4oeHR0Z3dzaXooKSk7CisjZW5kaWYgLyogVElPQ0dXSU5TWiAqLworI2VuZGlm IC8qIFFOWCAqLworI2VuZGlmIC8qIE5PTkFXUyAqLworfQorCisKKyNpZmRlZiBSTE9HQ09ERQor X1BST1RPVFlQKCBpbnQgcmxvZ19uYXdzLCAodm9pZCkgKTsKKyNlbmRpZgkvKiBSTE9HQ09ERSAq LworCisjaWZuZGVmIE5PU0lHV0lOQ0gKKyNpZmRlZiBTSUdXSU5DSAorU0lHVFlQCit3aW5jaGgo Zm9vKSBpbnQgZm9vOyB7CQkJLyogU0lHV0lOQ0ggaGFuZGxlciAqLworICAgIGludCB4ID0gMDsK KyNpZmRlZiBDS19UVFlGRAorI2lmbmRlZiBWTVMKKyAgICBleHRlcm4gaW50IHR0eWZkOworI2Vu ZGlmIC8qIFZNUyAqLworI2VuZGlmIC8qIENLX1RUWUZEICovCisgICAgZXh0ZXJuIGludCB0dF9y b3dzLCB0dF9jb2xzLCBjbWRfcm93cywgY21kX2NvbHM7CisjaWZkZWYgREVCVUcKKyAgICBpZiAo ZGVibG9nKSB7CisJZGVidWcoRjEwMCwiKioqKioqKioqKioqKioqIiwiIiwwKTsKKwlkZWJ1ZyhG MTAwLCJTSUdXSU5DSCBjYXVnaHQiLCIiLDApOworCWRlYnVnKEYxMDAsIioqKioqKioqKioqKioq KiIsIiIsMCk7CisjaWZkZWYgTkVUUFRZCisJZGVidWcoRjEwMSwiU0lHV0lOQ0ggcHR5X2Zvcmtf cGlkIiwiIixwdHlfZm9ya19waWQpOworI2VuZGlmIC8qIE5FVFBUWSAqLworICAgIH0KKyNlbmRp ZiAvKiBERVVCICovCisgICAgc2lnbmFsKFNJR1dJTkNILHdpbmNoaCk7ICAgICAgICAgICAgLyog UmUtYXJtIHRoZSBzaWduYWwgKi8KKyAgICB4ID0gdHRnd3NpeigpOyAgICAgICAgICAgICAgICAg ICAgICAvKiBHZXQgbmV3IHdpbmRvdyBzaXplICovCisgICAgY21kX3Jvd3MgPSB0dF9yb3dzOwkJ CS8qIEFkanVzdCBjb21tYW5kIHNjcmVlbiB0b28gKi8KKyAgICBjbWRfY29scyA9IHR0X2NvbHM7 CisKKyNpZmRlZiBDS19UVFlGRAorICAgIGlmCQkJCQkvKiBJZiB3ZSBkb24ndCBoYXZlIGEgY29u bmVjdGlvbiAqLworI2lmZGVmIFZNUwkJCQkvKiB3ZSdyZSBkb25lLiAqLworICAgICAgKHZtc3R0 eWZkKCkgPT0gLTEpCisjZWxzZQorICAgICAgKHR0eWZkID09IC0xKQorI2VuZGlmIC8qIFZNUyAq LworI2Vsc2UKKyAgICAgICghbG9jYWwpCisjZW5kaWYgLyogQ0tfVFRZRkQgKi8KKyAgICAgICAg cmV0dXJuOworCisjaWZkZWYgTkVUUFRZCisgICAgaWYgKHB0eV9mb3JrX3BpZCA+IC0xKSB7CQkv KiAic2V0IGhvc3QiIHRvIGEgUFRZPyAqLworCWludCB4OworCisjaWZkZWYgVElPQ1NXSU5TWgor CXN0cnVjdCB3aW5zaXplIHc7CQkvKiBSZXNpemUgdGhlIFBUWSAqLworCWVycm5vID0gMDsKKwl3 LndzX2NvbCA9IHR0X2NvbHM7CisJdy53c19yb3cgPSB0dF9yb3dzOworCXcud3NfeHBpeGVsID0g dHRfeHBpeGVsOworCXcud3NfeXBpeGVsID0gdHRfeXBpeGVsOworCXggPSBpb2N0bCh0dHlmZCxU SU9DU1dJTlNaLCZ3KTsKKwlkZWJ1ZyhGMTAxLCJ3aW5jaGggVElPQ1NXSU5TWiIsIiIseCk7CisJ ZGVidWcoRjEwMSwid2luY2hoIFRJT0NTV0lOU1ogZXJybm8iLCIiLGVycm5vKTsKKyNlbmRpZiAv KiBUSU9DU1dJTlNaICovCisKKwllcnJubyA9IDA7CisJeCA9IGtpbGwocHR5X2ZvcmtfcGlkLFNJ R1dJTkNIKTsKKwlkZWJ1ZyhGMTAxLCJ3aW5jaGgga2lsbCIsIiIseCk7CisJZGVidWcoRjEwMSwi d2luY2hoIGtpbGwgZXJybm8iLCIiLGVycm5vKTsKKyAgICB9CisjZW5kaWYgLyogTkVUUFRZICov CisKKy8qCisgIFRoaXMgc2hvdWxkIGJlIE9LLiAgSXQgbWlnaHQgc2VlbSB0aGF0IHNlbmRpbmcg dGhpcyBmcm9tCisgIGludGVycnVwdCBsZXZlbCBjb3VsZCBpbnRlcmZlcmUgd2l0aCBhbm90aGVy IFRFTE5FVCBJQUMgc3RyaW5nCisgIHRoYXQgd2FzIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIHNl bnQuICBCdXQgd2UgYWx3YXlzIHNlbmQKKyAgVEVMTkVUIHN0cmluZ3Mgd2l0aCBhIHNpbmdsZSB3 cml0ZSgpLCB3aGljaCBzaG91bGQgcHJldmVudCBtaXh1cHMuCisgIGJsYWhfc25hd3MoKSBzaG91 bGQgcHJvdGVjdCB0aGVtc2VsdmVzIGZyb20gYmVpbmcgY2FsbGVkIG9uIHRoZQorICB3cm9uZyBr aW5kIG9mIGNvbm5lY3Rpb24uCisqLworI2lmZGVmIFRDUFNPQ0tFVAorI2lmbmRlZiBOT1RUR1dT SVoKKyAgICBpZiAoeCA+IDAgJiYgdHRfcm93cyA+IDAgJiYgdHRfY29scyA+IDApIHsKKyAgICAg ICAgdG5fc25hd3MoKTsKKyNpZmRlZiBSTE9HQ09ERQorICAgICAgICBybG9nX25hd3MoKTsKKyNl bmRpZiAvKiBSTE9HQ09ERSAqLworICAgIH0KKyNlbmRpZiAvKiBOT1RUR1dTSVogKi8KKyNlbmRp ZiAvKiBUQ1BTT0NLRVQgKi8KKyAgICBTSUdSRVRVUk47Cit9CisjZW5kaWYgLyogU0lHV0lOQ0gg Ki8KKyNlbmRpZiAvKiBOT1NJR1dJTkNIICovCisKK1NJR1RZUAorc2lnaHVwKGZvbykgaW50IGZv bzsgewkJCS8qIFNJR0hVUCBoYW5kbGVyICovCisgICAgYmFja2dyZCA9IDE7CisgICAgZGVidWco RjEwMCwiKioqKioqKioqKioqKioqIiwiIiwwKTsKKyAgICBkZWJ1ZyhGMTAwLCJTSUdIVVAgcmVj ZWl2ZWQiLCIiLDApOworICAgIGRlYnVnKEYxMDAsIioqKioqKioqKioqKioqKiIsIiIsMCk7Cisg ICAgZG9leGl0KEJBRF9FWElULC0xKTsKKyAgICAvKk5PVFJFQUNIRUQqLworICAgIFNJR1JFVFVS TjsJCQkJLyogU2h1dCBwaWNreSBjb21waWxlcnMgdXAuLi4gKi8KK30KKworI2lmZGVmIENLX1ND TzMyVjQKKy8qIEV4aXN0cyBidXQgdGhlcmUgaXMgbm8gcHJvdG90eXBlIGluIHRoZSBoZWFkZXIg ZmlsZXMgKi8KK19QUk9UT1RZUCggY2hhciAqIHR0eW5hbWUsIChpbnQpICk7CisjZWxzZQorI2lm ZGVmIFNWNjhSM1Y2CitfUFJPVE9UWVAoIGNoYXIgKiB0dHluYW1lLCAoaW50KSApOworI2Vsc2UK KyNpZmRlZiB1bHRyaXgKK19QUk9UT1RZUCggY2hhciAqIHR0eW5hbWUsIChpbnQpICk7CisjZWxz ZQorI2lmZGVmIEhQVVg2CitfUFJPVE9UWVAoIGNoYXIgKiB0dHluYW1lLCAoaW50KSApOworI2Vs c2UKKyNpZmRlZiBIUFVYNQorX1BST1RPVFlQKCBjaGFyICogdHR5bmFtZSwgKGludCkgKTsKKyNl bHNlCisjaWZkZWYgUFMyQUlYMTAKK19QUk9UT1RZUCggY2hhciAqIHR0eW5hbWUsIChpbnQpICk7 CisjZWxzZQorI2lmZGVmIEJTRDQyCitfUFJPVE9UWVAoIGNoYXIgKiB0dHluYW1lLCAoaW50KSAp OworI2VuZGlmIC8qIEJTRDQyICovCisjZW5kaWYgLyogUFMyQUlYMTAgKi8KKyNlbmRpZiAvKiBI UFVYNSAqLworI2VuZGlmIC8qIEhQVVg2ICovCisjZW5kaWYgLyogdWx0cml4ICovCisjZW5kaWYg LyogU1Y2OFIzVjYgKi8KKyNlbmRpZiAvKiBDS19TQ08zMlY0ICovCisKKyNpZm5kZWYgU0lHVVNS MQkJCQkvKiBVc2VyLWRlZmluZWQgc2lnbmFscyAqLworI2RlZmluZSBTSUdVU1IxIDMwCisjZW5k aWYgLyogU0lHVVNSMSAqLworCisjaWZuZGVmIFNJR1VTUjIKKyNkZWZpbmUgU0lHVVNSMiAzMQor I2VuZGlmIC8qIFNJR1VTUjIgKi8KKworLyoKKyAgaWdub3JzaWdzKCkgc2V0cyBjZXJ0YWluIHNp Z25hbHMgdG8gU0lHX0lHTi4gIEJ1dCB3aGVuIGEgc2lnbmFsIGlzCisgIGlnbm9yZWQsIGl0IHJl bWFpbnMgaWdub3JlZCBhY3Jvc3MgZXhlYygpLCBzbyB3ZSBoYXZlIHRvIHJlc3RvcmUgdGhlc2UK KyAgc2lnbmFscyBiZWZvcmUgZXhlYygpLCB3aGljaCBpcyB0aGUgcHVycG9zZSBvZiByZXN0b3Jz aWdzKCkuCisqLworc3RhdGljIFZPSUQKK2lnbm9yc2lncygpIHsJCQkJLyogSWdub3JlIHRoZXNl IHNpZ25hbHMgKi8KKyAgICBzYXZxdWl0ID0gc2lnbmFsKFNJR1FVSVQsU0lHX0lHTik7CS8qIEln bm9yZSBRdWl0IHNpZ25hbCAqLworCisjaWZkZWYgU0lHREFOR0VSCQkJLyogSWdub3JlIGRhbmdl ciBzaWduYWxzICovCisvKgorICBUaGlzIHNpZ25hbCBpcyBzZW50IHdoZW4gdGhlIHN5c3RlbSBp cyBsb3cgb24gc3dhcCBzcGFjZS4gIFByb2Nlc3NlcworICB0aGF0IGRvbid0IGhhbmRsZSBpdCBh cmUgY2FuZGlkYXRlcyBmb3IgdGVybWluYXRpb24uICBJZiBzd2FwIHNwYWNlIGRvZXNuJ3QKKyAg Y2xlYXIgb3V0IGVub3VnaCwgd2Ugc3RpbGwgbWlnaHQgYmUgdGVybWluYXRlZCB2aWEga2lsbCgp IC0tIG5vdGhpbmcgd2UgY2FuCisgIGRvIGFib3V0IHRoYXQhICBDb25jZWl2YWJseSwgdGhpcyBj b3VsZCBiZSBpbXByb3ZlZCBieSBpbnN0YWxsaW5nIGEgcmVhbAorICBzaWduYWwgaGFuZGxlciB0 aGF0IHdhcm5zIHRoZSB1c2VyLCBidXQgdGhhdCB3b3VsZCBiZSBwcmV0dHkgY29tcGxpY2F0ZWQs CisgIHNpbmNlIHdlIGFyZSBub3QgYWx3YXlzIGluIGNvbnRyb2wgb2YgdGhlIHNjcmVlbiAtLSBl LmcuIGR1cmluZyByZW1vdGUtbW9kZQorICBmaWxlIHRyYW5zZmVyLgorKi8KKyAgICBzYXZkYW5n ZXIgPSBzaWduYWwoU0lHREFOR0VSLFNJR19JR04pOyAvKiBlLmcuIGluIEFJWCAqLworI2VuZGlm IC8qIFNJR0RBTkdFUiAqLworI2lmZGVmIFNJR1BJUEUKKy8qCisgIFRoaXMgb25lIGNvbWVzIHdo ZW4gYSBUQ1AvSVAgY29ubmVjdGlvbiBpcyBicm9rZW4gYnkgdGhlIHJlbW90ZS4KKyAgV2UgcHJl ZmVyIHRvIGNhdGNoIHRoaXMgc2l0dWF0aW9uIGJ5IGV4YW1pbmluZyBlcnJvciBjb2RlcyBmcm9t IHdyaXRlKCkuCisqLworICAgIHNhdnBpcGUgPSBzaWduYWwoU0lHUElQRSxTSUdfSUdOKTsKKyNl bmRpZiAvKiBTSUdQSVBFICovCisgICAgc2F2dXNyMSA9IHNpZ25hbChTSUdVU1IxLFNJR19JR04p OwkvKiBJZ25vcmUgdXNlci1kZWZpbmVkIHNpZ25hbHMgKi8KKyAgICBzYXZ1c3IyID0gc2lnbmFs KFNJR1VTUjIsU0lHX0lHTik7Cit9CisKK1ZPSUQKK3Jlc3RvcnNpZ3MoKSB7CQkJCS8qIFJlc3Rv cmUgdGhlc2Ugc2lnbmFscyAqLworICAgIChWT0lEKSBzaWduYWwoU0lHUVVJVCxzYXZxdWl0KTsJ LyogKHVzZWQgaW4gY2t1ZmlvLmMpICovCisjaWZkZWYgU0lHREFOR0VSCisgICAgKFZPSUQpIHNp Z25hbChTSUdEQU5HRVIsc2F2ZGFuZ2VyKTsKKyNlbmRpZiAvKiBTSUdEQU5HRVIgKi8KKyNpZmRl ZiBTSUdQSVBFCisgICAgKFZPSUQpIHNpZ25hbChTSUdQSVBFLHNhdnBpcGUpOworI2VuZGlmIC8q IFNJR1BJUEUgKi8KKyAgICAoVk9JRCkgc2lnbmFsKFNJR1VTUjEsc2F2dXNyMSk7CisgICAgKFZP SUQpIHNpZ25hbChTSUdVU1IyLHNhdnVzcjIpOworfQorCitpbnQKK3N5c2luaXQoKSB7CisgICAg aW50IHg7CisgICAgY2hhciAqIHM7CisjaWZkZWYgQ0tfVVRTTkFNRQorICAgIHN0cnVjdCB1dHNu YW1lIG5hbWU7CisjZW5kaWYgLyogQ0tfVVRTTkFNRSAqLworCisgICAgZXh0ZXJuIGNoYXIgc3Rh cnR1cGRpcltdOworLyoKKyAgQkVGT1JFIEFOWVRISU5HIEVMU0U6IEluaXRpYWxpemUgdGhlIHNl dHVpZCBwYWNrYWdlLgorICBDaGFuZ2UgdG8gdGhlIHVzZXIncyByZWFsIHVzZXIgYW5kIGdyb3Vw IElELgorICBJZiB0aGlzIGNhbid0IGJlIGRvbmUsIGRvbid0IHJ1biBhdCBhbGwuCisqLworICAg IHggPSBwcml2X2luaSgpOworI2lmZGVmIFNVSURERUJVRworICAgIGZwcmludGYoc3RkZXJyLCJQ UklWX0lOST0lZFxuIix4KTsKKyNlbmRpZiAvKiBTVUlEREVCVUcgKi8KKyAgICBpZiAoeCkgewor CWlmICh4ICYgMSkgZnByaW50ZihzdGRlcnIsIkZhdGFsOiBzZXR1aWQgZmFpbHVyZS5cbiIpOwor CWlmICh4ICYgMikgZnByaW50ZihzdGRlcnIsIkZhdGFsOiBzZXRnaWQgZmFpbHVyZS5cbiIpOwor CWlmICh4ICYgNCkgZnByaW50ZihzdGRlcnIsIkZhdGFsOiBDLUtlcm1pdCBzZXR1aWQgdG8gcm9v dCFcbiIpOworCWV4aXQoMSk7CisgICAgfQorICAgIHNpZ25hbChTSUdJTlQsU0lHX0lHTik7CQkv KiBJZ25vcmUgaW50ZXJydXB0cyBhdCBmaXJzdCAqLworICAgIHNpZ25hbChTSUdGUEUsU0lHX0lH Tik7CQkvKiBJZ25vcmUgZmxvYXRpbmctcG9pbnQgZXhjZXB0aW9ucyAqLworICAgIHNpZ25hbChT SUdIVVAsc2lnaHVwKTsJCS8qIENhdGNoIFNJR0hVUCAqLworI2lmbmRlZiBOT1NJR1dJTkNICisj aWZkZWYgU0lHV0lOQ0gKKyAgICBzaWduYWwoU0lHV0lOQ0gsd2luY2hoKTsJCS8qIENhdGNoIHdp bmRvdy1zaXplIGNoYW5nZSAqLworI2VuZGlmIC8qIFNJR1dJTkNIICovCisjZW5kaWYgLyogTk9T SUdXSU5DSCAqLworCisjaWZkZWYgU0lHWEZTWgorICAgIHNpZ25hbChTSUdYRlNaLFNJR19JR04p OwkJLyogSWdub3JlIHdyaXRpbmcgcGFzdCBmaWxlIGxpbWl0ICovIAorI2VuZGlmCS8qIFNJR1hG U1ogKi8KKworI2lmbmRlZiBOT0pDCisvKgorICBHZXQgdGhlIGluaXRpYWwgam9iIGNvbnRyb2wg c3RhdGUuCisgIElmIGl0IGlzIFNJR19JR04sIHRoYXQgbWVhbnMgdGhlIHNoZWxsIGRvZXMgbm90 IHN1cHBvcnQgam9iIGNvbnRyb2wsCisgIGFuZCBzbyB3ZSdkIGJldHRlciBub3Qgc3VzcGVuZCBv dXJzZWx2ZXMuCisqLworI2lmZGVmIFNJR1RTVFAKKyAgICBqY2hkbHIgPSBzaWduYWwoU0lHVFNU UCxTSUdfSUdOKTsKKyAgICBpZiAoamNoZGxyID09IFNJR19JR04pIHsKKwlqY3NoZWxsID0gMDsK KwlkZWJ1ZyhGMTAwLCJzeXNpbml0IGpjaGRscjogU0lHX0lHTiIsIiIsMCk7CisgICAgfSBlbHNl IGlmIChqY2hkbHIgPT0gU0lHX0RGTCkgeworCWRlYnVnKEYxMDAsInN5c2luaXQgamNoZGxyOiBT SUdfREZMIiwiIiwwKTsKKwlqY3NoZWxsID0gMTsKKyAgICB9IGVsc2UgeworCWRlYnVnKEYxMDAs InN5c2luaXQgamNoZGxyOiBvdGhlciIsIiIsMCk7CisJamNzaGVsbCA9IDM7CisgICAgfQorICAg IChWT0lEKSBzaWduYWwoU0lHVFNUUCxqY2hkbHIpOwkvKiBQdXQgaXQgYmFjay4uLiAqLworI2Vu ZGlmIC8qIFNJR1RTVFAgKi8KKyNlbmRpZiAvKiBOT0pDICovCisKKyAgICBjb25iZ3QoMCk7CQkJ CS8qIFNlZSBpZiB3ZSdyZSBpbiB0aGUgYmFja2dyb3VuZCAqLworICAgIGNvbmdtKCk7CQkJCS8q IEdldCBjb25zb2xlIG1vZGVzICovCisKKyAgICAoVk9JRCkgc2lnbmFsKFNJR0FMUk0sU0lHX0lH Tik7CS8qIElnbm9yZSBhbGFybXMgKi8KKworICAgIGlnbm9yc2lncygpOwkJCS8qIElnbm9yZSBz b21lIG90aGVyIHNpZ25hbHMgKi8KKworI2lmZGVmIEZfU0VURkwKKyAgICBpbmlmbGFncyA9IGZj bnRsKDAsRl9HRVRGTCwwKTsJLyogR2V0IHN0ZGluIGZsYWdzICovCisjZW5kaWYgLyogRl9TRVRG TCAqLworCisjaWZkZWYgdWx0cml4CisgICAgZ3R0eSgwLCZ2YW5pbGxhKTsJCQkvKiBHZXQgc2d0 dHkgaW5mbyAqLworI2Vsc2UKKyNpZmRlZiBBVVgKKyAgICBzZXQ0MnNpZygpOwkJCQkvKiBEb24n dCBhc2shIChoYWthbnNvbkBjcy5vcnN0LmVkdSkgKi8KKyNlbmRpZiAvKiBBVVggKi8KKyNlbmRp ZiAvKiB1bHRyaXggKi8KKy8qCisgIFdhcm5pbmc6IG9uIHNvbWUgVU5JWCBzeXN0ZW1zIChTVlI0 PyksIHR0eW5hbWUoKSByZXBvcnRlZGx5IG9wZW5zIC9kZXYgYnV0CisgIG5ldmVyIGNsb3NlcyBp dC4gIElmIGl0IGlzIGNhbGxlZCBvZnRlbiBlbm91Z2gsIHdlIHJ1biBvdXQgb2YgZmlsZQorICBk ZXNjcmlwdG9ycyBhbmQgc3Vic2VxdWVudCBvcGVuKCkncyBvZiBvdGhlciBkZXZpY2VzIG9yIGZp bGVzIGNhbiBmYWlsLgorKi8KKyAgICBzID0gTlVMTDsKKyNpZm5kZWYgTUlOSVgKKyAgICBpZiAo aXNhdHR5KDApKQkJCS8qIE5hbWUgb2YgY29udHJvbGxpbmcgdGVybWluYWwgKi8KKyAgICAgIHMg PSB0dHluYW1lKDApOworICAgIGVsc2UgaWYgKGlzYXR0eSgxKSkKKyAgICAgIHMgPSB0dHluYW1l KDEpOworICAgIGVsc2UgaWYgKGlzYXR0eSgyKSkKKyAgICAgIHMgPSB0dHluYW1lKDIpOworICAg IGRlYnVnKEYxMTAsInN5c2luaXQgdHR5bmFtZSgwKSIscywwKTsKKyNlbmRpZiAvKiBNSU5JWCAq LworCisjaWZkZWYgQkVPUworICAgIGlmICghZGZ0dHkpCisgICAgICBtYWtlc3RyKCZkZnR0eSxz KTsKKyNlbmRpZiAvKiBCRU9TICovCisKKyAgICBpZiAocykKKyAgICAgIGNrc3RybmNweSgoY2hh ciAqKWN0dG5hbSxzLERFVk5BTUxFTisxKTsKKyNpZmRlZiBTVk9SUE9TSVgKKyAgICBpZiAoIWN0 dG5hbVswXSkKKyAgICAgIGN0ZXJtaWQoY3R0bmFtKTsKKyNlbmRpZiAvKiBTVk9SUE9TSVggKi8K KyAgICBpZiAoIWN0dG5hbVswXSkKKyAgICAgIGNrc3RybmNweSgoY2hhciAqKWN0dG5hbSxkZnR0 eSxERVZOQU1MRU4rMSk7CisgICAgZGVidWcoRjExMCwic3lzaW5pdCBDVFROQU0iLENUVE5BTSww KTsKKyAgICBkZWJ1ZyhGMTEwLCJzeXNpbml0IGN0dG5hbSIsY3R0bmFtLDApOworCisgICAgdHRn d3NpeigpOwkJCQkvKiBHZXQgd2luZG93IChzY3JlZW4pIGRpbWVuc2lvbnMuICovCisKKyNpZm5k ZWYgTk9TWVNDT05GCisjaWZkZWYgX1NDX09QRU5fTUFYCisgICAgY2ttYXhmaWxlcyA9IHN5c2Nv bmYoX1NDX09QRU5fTUFYKTsKKyNlbmRpZiAvKiBfU0NfT1BFTl9NQVggKi8KKyNlbmRpZiAvKiBO T1NZU0NPTkYgKi8KKworI2lmZGVmIFBsYW45CisgICAgaWYgKCFiYWNrZ3JkKSB7CisgICAgCWNv bnNjdGxmZCA9IG9wZW4oIi9kZXYvY29uc2N0bCIsIE9fV1JPTkxZKTsKKyAgICAJLypub2lzZWZk ID0gb3BlbigiL2Rldi9ub2lzZSIsIE9fV1JPTkxZKSovCisgICAgfQorICAgIGNreGVjaCA9IDE7 CisjZW5kaWYgLyogUGxhbjkgKi8KKworI2lmZGVmIENLX1VUU05BTUUKKyAgICBpZiAodW5hbWUo Jm5hbWUpID4gLTEpIHsKKwlja3N0cm5jcHkodW5tX21jaCxuYW1lLm1hY2hpbmUsQ0tfU1lTTk1M Tik7CisJY2tzdHJuY3B5KHVubV9uYW0sbmFtZS5zeXNuYW1lLENLX1NZU05NTE4pOworCWNrc3Ry bmNweSh1bm1fcmVsLG5hbWUucmVsZWFzZSxDS19TWVNOTUxOKTsKKwlja3N0cm5jcHkodW5tX3Zl cixuYW1lLnZlcnNpb24sQ0tfU1lTTk1MTik7CisjaWZkZWYgREVCVUcKKwlpZiAoZGVibG9nKSB7 CisJICAgIGRlYnVnKEYxMTAsInN5c2luaXQgdW5hbWUgbWFjaGluZSIsdW5tX21jaCwwKTsKKwkg ICAgZGVidWcoRjExMCwic3lzaW5pdCB1bmFtZSBzeXNuYW1lIix1bm1fbmFtLDApOworCSAgICBk ZWJ1ZyhGMTEwLCJzeXNpbml0IHVuYW1lIHJlbGVhc2UiLHVubV9yZWwsMCk7CisJICAgIGRlYnVn KEYxMTAsInN5c2luaXQgdW5hbWUgdmVyc2lvbiIsdW5tX3ZlciwwKTsKKwl9CisjZW5kaWYgLyog REVCVUcgKi8KKworI2lmZGVmIEhQVVg5UExVUworCWlmIChuYW1lLm1hY2hpbmVbNV0gPT0gJzgn KQorCSAgaHBpczgwMCA9IDE7CisJZWxzZQorCSAgaHBpczgwMCA9IDA7CisJZGVidWcoRjEwMSwi c3lzaW5pdCBocGlzODAwIiwiIixocGlzODAwKTsKKyNlbmRpZiAvKiBIUFVYOVBMVVMgKi8KKyNp ZmRlZiBUUlU2NAorICAgICAgICBnZXRzeXNpbmZvKEdTSV9QTEFURk9STV9OQU1FLCB1bm1fbW9k LCBDS19TWVNOTUxOLCAwLCAwKTsKKyAgICAgICAgZGVidWcoRjExMCwic3lzaW5pdCBnZXRzeXNp bmZvIG1vZGVsIix1bm1fbW9kLDApOworI2VuZGlmIC8qIFRSVTY0ICovCisjaWZkZWYgU09MQVJJ UzI1CisgICAgICAgIHN5c2luZm8oU0lfUExBVEZPUk0sIHVubV9tb2QsIENLX1NZU05NTE4pOwor ICAgICAgICBkZWJ1ZyhGMTEwLCJzeXNpbml0IHN5c2luZm8gbW9kZWwiLHVubV9tb2QsMCk7Cisj ZW5kaWYgLyogU09MQVJJUzI1ICovCisgICAgfQorI2VuZGlmIC8qIENLX1VUU05BTUUgKi8KKwor I2lmZGVmIENLX0VOVklST05NRU5UCisgICAgeworI2lmZGVmIFROQ09ERQorCWV4dGVybiBjaGFy IHRuX2Vudl9hY2N0W10sIHRuX2Vudl9kaXNwW10sIHRuX2Vudl9qb2JbXSwKKwl0bl9lbnZfcHJu dFtdLCB0bl9lbnZfc3lzW107CisjZW5kaWYgLyogVE5DT0RFICovCisJZXh0ZXJuIGNoYXIgdWlk YnVmW107CisgICAgICAgIGV4dGVybiBjaGFyICogd2hvYW1pKCk7CisJY2hhciAqcDsKKyNpZmRl ZiBDS1NFTkRVSUQKKyAgICAgICAgdWlkYnVmWzBdID0gJ1wwJzsKKyNpZmRlZiBJS1NECisgICAg ICAgIGlmICghaW5zZXJ2ZXIpIHsKKyNlbmRpZiAvKiBJS1NEICovCisgICAgICAgICAgICBwID0g Z2V0ZW52KCJVU0VSIik7CisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJzeXNpbml0IHVpZGJ1ZiBm cm9tIFVTRVIiLHVpZGJ1ZiwwKTsKKwkgICAgaWYgKCFwKSBwID0gIiI7CisgICAgICAgICAgICBp ZiAoISpwKSB7CisgICAgICAgICAgICAgICAgcCA9IGdldGVudigiTE9HTkFNRSIpOworICAgICAg ICAgICAgICAgIGRlYnVnKEYxMTAsInN5c2luaXQgdWlkYnVmIGZyb20gTE9HTkFNRSIsdWlkYnVm LDApOworICAgICAgICAgICAgfQorCSAgICBpZiAoIXApIHAgPSAiIjsKKyAgICAgICAgICAgIGlm ICghKnApIHsKKyAgICAgICAgICAgICAgICBwID0gd2hvYW1pKCk7CisgICAgICAgICAgICAgICAg ZGVidWcoRjExMCwic3lzaW5pdCB1aWRidWYgZnJvbSB3aG9hbWkoKSIsdWlkYnVmLDApOworICAg ICAgICAgICAgfQorCSAgICBpZiAoIXApIHAgPSAiIjsKKwkgICAgY2tzdHJuY3B5KHVpZGJ1Ziwg KnAgPyBwIDogIlVOS05PV04iLCBVSURCVUZMRU4pOworI2lmZGVmIElLU0QKKyAgICAgICAgfQor I2VuZGlmIC8qIElLU0QgKi8KKwlkZWJ1ZyhGMTEwLCJzeXNpbml0IGZpbmFsIHVpZGJ1ZiIsdWlk YnVmLDApOworI2VuZGlmIC8qIENLU0VORFVJRCAqLworCisjaWZkZWYgVE5DT0RFCisJaWYgKChw ID0gZ2V0ZW52KCJKT0IiKSkpIGNrc3RybmNweSh0bl9lbnZfam9iLHAsNjMpOworCWlmICgocCA9 IGdldGVudigiQUNDVCIpKSkgY2tzdHJuY3B5KHRuX2Vudl9hY2N0LHAsNjMpOworCWlmICgocCA9 IGdldGVudigiUFJJTlRFUiIpKSkgY2tzdHJuY3B5KHRuX2Vudl9wcm50LHAsNjMpOworCWlmICgo cCA9IGdldGVudigiRElTUExBWSIpKSkgY2tzdHJuY3B5KHRuX2Vudl9kaXNwLHAsNjMpOworI2lm ZGVmIGFlZ2lzCisJY2tzdHJuY3B5KHRuX2Vudl9zeXMsIkFlZ2lzIiw2NCk7CisjZWxzZQorI2lm ZGVmIFBsYW45CisJY2tzdHJuY3B5KHRuX2Vudl9zeXMsIlBsYW45Iiw2NCk7CisjZWxzZQorCWNr c3RybmNweSh0bl9lbnZfc3lzLCJVTklYIiw2NCk7CisjZW5kaWYgLyogUGxhbjkgKi8KKyNlbmRp ZiAvKiBhZWdpcyAqLworI2VuZGlmIC8qIFROQ09ERSAqLworICAgIH0KKyNlbmRpZiAvKiBDS19F TlZJUk9OTUVOVCAqLworI2lmZGVmIENLX1NORExPQworICAgIHsKKwlleHRlcm4gY2hhciAqIHRu X2xvYzsKKwljaGFyICpwOworCWlmIChwID0gZ2V0ZW52KCJMT0NBVElPTiIpKQorCSAgaWYgKHRu X2xvYyA9IChjaGFyICopbWFsbG9jKChpbnQpc3RybGVuKHApKzEpKQorCSAgICBzdHJjcHkodG5f bG9jLHApOwkJLyogc2FmZSAqLworICAgIH0KKyNlbmRpZiAvKiBDS19TTkRMT0MgKi8KKworICAg IGNrc3RybmNweShzdGFydHVwZGlyLCB6Z3RkaXIoKSwgQ0tNQVhQQVRIKTsKKyAgICBzdGFydHVw ZGlyW0NLTUFYUEFUSF0gPSAnXDAnOworICAgIHggPSBzdHJsZW4oc3RhcnR1cGRpcik7CisgICAg aWYgKHggPD0gMCkgeworCXN0YXJ0dXBkaXJbMF0gPSAnLyc7CisJc3RhcnR1cGRpclsxXSA9ICdc MCc7CisgICAgfSBlbHNlIGlmIChzdGFydHVwZGlyW3gtMV0gIT0gJy8nKSB7CisJc3RhcnR1cGRp clt4XSA9ICcvJzsKKwlzdGFydHVwZGlyW3grMV0gPSAnXDAnOworICAgIH0KKyAgICBkZWJ1ZyhG MTEwLCJzeXNpbml0IHN0YXJ0dXBkaXIiLHN0YXJ0dXBkaXIsMCk7CisjaWZkZWYgVFRMRUJVRgor ICAgIGxlX2luaXQoKTsKKyNlbmRpZiAvKiBUVExFQlVGICovCisjaWZkZWYgQlNENDRPUlBPU0lY CisgICAgLyogVGhpcyBzaG91bGQgY2F0Y2ggdGhlIG5jdXJzZXMgcGxhdGZvcm1zICovCisgICAg LyogU29tZSBwbGF0Zm9ybXMgZG9uJ3QgaGF2ZSBwdXRlbnYoKSwgbGlrZSBOZVhUU1RFUCAqLwor ICAgIHB1dGVudigiTkNVUlNFU19OT19TRVRCVUY9MSIpOworI2VuZGlmIC8qIEJTRDQ0T1JQT1NJ WCAqLworICAgIHJldHVybigwKTsKK30KKworLyogIFMgWSBTIEMgTCBFIEEgTiBVIFAgIC0tICBT eXN0ZW0tZGVwZW5kZW50IHByb2dyYW0gY2xlYW51cC4gICovCisKK2ludAorc3lzY2xlYW51cCgp IHsKKyNpZmRlZiBGX1NFVEZMCisgICAgaWYgKGluaWZsYWdzID4gLTEpCisgICAgICBmY250bCgw LEZfU0VURkwsaW5pZmxhZ3MpOwkvKiBSZXN0b3JlIHN0ZGluIGZsYWdzICovCisjZW5kaWYgLyog Rl9TRVRGTCAqLworI2lmZGVmIHVsdHJpeAorICAgIHN0dHkoMCwmdmFuaWxsYSk7ICAgICAgICAg ICAgICAgICAgIC8qIEdldCBzZ3R0eSBpbmZvICovCisjZW5kaWYgLyogdWx0cml4ICovCisjaWZk ZWYgTkVUQ01ECisgICAgaWYgKHR0cGlkKSBraWxsKHR0cGlkLDkpOworI2VuZGlmIC8qIE5FVENN RCAqLworICAgIHJldHVybigwKTsKK30KKworLyogIFQgVCBPIFAgRSBOICAtLSAgT3BlbiBhIHR0 eSBmb3IgZXhjbHVzaXZlIGFjY2Vzcy4gICovCisKKy8qCisgIENhbGwgd2l0aDoKKyAgICB0dG5h bWU6IGNoYXJhY3RlciBzdHJpbmcgLSBkZXZpY2UgbmFtZSBvciBuZXR3b3JrIGhvc3QgbmFtZS4K KyAgICBsY2w6CisgIElmIGNhbGxlZCB3aXRoIGxjbCA8IDAsIHNldHMgdmFsdWUgb2YgbGNsIGFz IGZvbGxvd3M6CisgIDA6IHRoZSB0ZXJtaW5hbCBuYW1lZCBieSB0dG5hbWUgaXMgdGhlIGpvYidz IGNvbnRyb2xsaW5nIHRlcm1pbmFsLgorICAxOiB0aGUgdGVybWluYWwgbmFtZWQgYnkgdHRuYW1l IGlzIG5vdCB0aGUgam9iJ3MgY29udHJvbGxpbmcgdGVybWluYWwuCisgIEJ1dCB3YXRjaCBvdXQ6 IGlmIGEgbGluZSBpcyBhbHJlYWR5IG9wZW4sIG9yIGlmIHJlcXVlc3RlZCBsaW5lIGNhbid0Cisg IGJlIG9wZW5lZCwgdGhlbiBsY2wgcmVtYWlucyAoYW5kIGlzIHJldHVybmVkIGFzKSAtMS4KKyAg ICBtb2RlbToKKyAgTGVzcyB0aGFuIHplcm86IHR0bmFtZSBpcyBhIG5ldHdvcmsgaG9zdCBuYW1l LgorICBaZXJvIG9yIGdyZWF0ZXI6IHR0bmFtZSBpcyBhIHRlcm1pbmFsIGRldmljZSBuYW1lLgor ICBaZXJvIG1lYW5zIGEgbG9jYWwgY29ubmVjdGlvbiAoZG9uJ3QgdXNlIG1vZGVtIHNpZ25hbHMp LgorICBQb3NpdGl2ZSBtZWFucyB1c2UgbW9kZW0gc2lnbmFscy4KKyAgIHRpbW86CisgIDAgPSBu byB0aW1lci4KKyAgbm9uemVybyA9IG51bWJlciBvZiBzZWNvbmRzIHRvIHdhaXQgZm9yIG9wZW4o KSB0byByZXR1cm4gYmVmb3JlIHRpbWluZyBvdXQuCisKKyAgUmV0dXJuczoKKyAgICAwIG9uIHN1 Y2Nlc3MKKyAgIC01IGlmIGRldmljZSBpcyBpbiB1c2UKKyAgIC00IGlmIGFjY2VzcyB0byBkZXZp Y2UgaXMgZGVuaWVkCisgICAtMyBpZiBhY2Nlc3MgdG8gbG9jayBkaXJlY3RvcnkgZGVuaWVkCisg ICAtMiB1cG9uIHRpbWVvdXQgd2FpdGluZyBmb3IgZGV2aWNlIHRvIG9wZW4KKyAgIC0xIG9uIG90 aGVyIGVycm9yCisqLworc3RhdGljIGludCB0dG90bW8gPSAwOwkJCS8qIFRpbWVvdXQgZmxhZyAq LworLyogRmxhZyBrZXB0IGhlcmUgdG8gYXZvaWQgYmVpbmcgY2xvYmJlcmVkIGJ5IGxvbmdqbXAu ICAqLworCitpbnQKK3R0b3Blbih0dG5hbWUsbGNsLG1vZGVtLHRpbW8pIGNoYXIgKnR0bmFtZTsg aW50ICpsY2wsIG1vZGVtLCB0aW1vOyB7CisKKyNpZmRlZiBCU0Q0NAorI2RlZmluZSBjdGVybWlk KHgpIHN0cmNweSh4LCIiKQorI2Vsc2UKKyNpZmRlZiBTVk9SUE9TSVgKKyNpZm5kZWYgQ0lFCisg ICAgZXh0ZXJuIGNoYXIgKmN0ZXJtaWQoKTsJCS8qIFdpc2ggdGhleSBhbGwgaGFkIHRoaXMhICov CisjZWxzZQkJCQkJLyogQ0lFIFJlZ3VsdXMgKi8KKyNkZWZpbmUgY3Rlcm1pZCh4KSBzdHJjcHko eCwiIikKKyNlbmRpZiAvKiBDSUUgKi8KKyNlbmRpZiAvKiBTVk9SUE9TSVggKi8KKyNlbmRpZiAv KiBCU0Q0NCAqLworCisjaWZkZWYgdWx0cml4CisgICAgaW50IHRlbXAgPSAwOworI2VuZGlmIC8q IHVsdHJpeCAqLworCisjaWZuZGVmIE9QRU5GSVJTVAorICAgIGNoYXIgZnVsbG5hbWVbREVWTkFN TEVOKzFdOworI2VuZGlmIC8qIE9QRU5GSVJTVCAqLworCisgICAgY2hhciAqIGZuYW07CQkJLyog RnVsbCBuYW1lIGFmdGVyIGV4cGFuc2lvbiAqLworCisgICAgaW50IHk7CisKKyNpZm5kZWYgcGRw MTEKKyNkZWZpbmUgTkFNRUZECSAvKiBGZWF0dXJlIHRvIGFsbG93IG5hbWUgdG8gYmUgYW4gb3Bl biBmaWxlIGRlc2NyaXB0b3IgKi8KKyNlbmRpZiAvKiBwZHAxMSAqLworCisjaWZkZWYgTkFNRUZE CisgICAgY2hhciAqcDsKKyAgICBkZWJ1ZyhGMTAxLCJ0dG9wZW4gdGVsbmV0ZmQiLCIiLHRlbG5l dGZkKTsKKyNlbmRpZiAvKiBOQU1FRkQgKi8KKworICAgIGRlYnVnKEYxMTAsInR0b3BlbiB0dG5h bWUiLHR0bmFtZSwwKTsKKyAgICBkZWJ1ZyhGMTEwLCJ0dG9wZW4gdHRubXN2Iix0dG5tc3YsMCk7 CisgICAgZGVidWcoRjEwMSwidHRvcGVuIG1vZGVtIiwiIixtb2RlbSk7CisgICAgZGVidWcoRjEw MSwidHRvcGVuIG5ldGNvbm4iLCIiLG5ldGNvbm4pOworICAgIGRlYnVnKEYxMDEsInR0b3BlbiB0 dHlmZCIsIiIsdHR5ZmQpOworICAgIGRlYnVnKEYxMDEsInR0b3BlbiAqbGNsIiwiIiwqbGNsKTsK KyAgICBkZWJ1ZyhGMTAxLCJ0dG9wZW4gdHRtZG0iLCIiLHR0bWRtKTsKKyAgICBkZWJ1ZyhGMTAx LCJ0dG9wZW4gdHRuZXQiLCIiLHR0bmV0KTsKKworICAgIHR0cG1zayA9IDB4ZmY7CisgICAgbG9j a3BpZFswXSA9ICdcMCc7CisKKyAgICBpZiAodHR5ZmQgPiAtMSkgewkJCS8qIElmIGRldmljZSBh bHJlYWR5IG9wZW5lZCAqLworICAgICAgICBpZiAoIXN0cm5jbXAodHRuYW1lLHR0bm1zdixERVZO QU1MRU4pKSAvKiBhcmUgbmV3ICYgb2xkIG5hbWVzIGVxdWFsPyAqLworCSAgcmV0dXJuKDApOwkJ CS8qIFllcywgbm90aGluZyB0byBkbyAtIGp1c3QgcmV0dXJuICovCisJdHRubXN2WzBdID0gJ1ww JzsJCS8qIE5vLCBjbGVhciBvdXQgb2xkIG5hbWUgKi8KKwl0dGNsb3ModHR5ZmQpOwkJCS8qIGNs b3NlIG9sZCBjb25uZWN0aW9uLiAgKi8KKyAgICB9CisgICAgd2FzY2xvc2VkID0gMDsJCQkvKiBO ZXcgY29ubmVjdGlvbiwgbm90IGNsb3NlZCB5ZXQuICovCisgICAgdHRwaXBlID0gMDsJCQkJLyog QXNzdW1lIGl0J3Mgbm90IGEgcGlwZSAqLworICAgIHR0cHR5ID0gMDsJCQkJLyogb3IgYSBwdHku Li4gKi8KKworI2lmZGVmIE5FVENPTk4KKy8qCisgIFRoaXMgaXMgYSBiaXQgdHJpY2t5Li4uICBT dXBwb3NlIHRoYXQgcHJldmlvdXNseSBLZXJtaXQgaGFkIGRpYWxlZCBhIHRlbG5ldAorICBtb2Rl bSBzZXJ2ZXIgKCJzZXQgaG9zdCB4eHg6MjAwMSwgc2V0IG1vZGVtIHR5cGUgdXNyLCBkaWFsIC4u LiIpLiAgVGhlbiB0aGUKKyAgY29ubmVjdGlvbiB3YXMgY2xvc2VkICh0dHlmZCA9IC0xKSwgYW5k IHRoZW4gYSBSRURJQUwgY29tbWFuZCB3YXMgZ2l2ZW4uICBBdAorICB0aGlzIHBvaW50IHdlJ3Zl IG9ibGl0ZXJhdGVkIHRoZSBuZWdhdGl2ZSBtb2RlbSB0eXBlIGhhY2ssIGFuZCBzbyB3b3VsZAor ICB0cmVhdCB0aGUgSVAgaG9zdG5hbWUgYXMgYSBkZXZpY2UgbmFtZSwgYW5kIHdvdWxkIHRoZW4g ZmFpbCBiZWNhdXNlIG9mICJObworICBzdWNoIGRldmljZSBvciBkaXJlY3RvcnkiLiAgQnV0IHRo ZSBwcmV2aW91cyBjb25uZWN0aW9uIGhhcyBsZWZ0IGJlaGluZCBzb21lCisgIGNsdWVzLCBzbyBs ZXQncyB1c2UgdGhlbS4uLgorKi8KKyAgICBpZiAodHR5ZmQgPCAwKSB7CQkJLyogQ29ubmVjdGlv biBpcyBub3Qgb3BlbiAqLworCWlmICghc3RyY21wKHR0bmFtZSx0dG5tc3YpKSB7CS8qIE9sZCBh bmQgbmV3IG5hbWVzIHRoZSBzYW1lPyAqLworCSAgICBpZiAoKChuZXRjb25uID4gMCkgJiYgKHR0 bWRtIDwgMCkpIHx8CisJCSgodHRuZXQgPiAwKSAmJgorCQkgKCFja3N0cmNocih0dG5hbWUsJy8n KSkgJiYgKGNrc3RyY2hyKHR0bmFtZSwnOicpKSkKKwkJKSB7CisJCWludCB4LCByYzsKKwkJeCA9 ICh0dG1kbSA8IDApID8gLXR0bWRtIDogdHRuZXQ7CisJCXJjID0gbmV0b3Blbih0dG5hbWUsIGxj bCwgeCk7CisJCWRlYnVnKEYxMTEsInR0b3BlbiBSRU9QRU4gbmV0b3BlbiIsdHRuYW1lLHJjKTsK KwkJaWYgKHJjID4gLTEpIHsKKwkJICAgIG5ldGNvbm4gPSAxOworCQkgICAgeGxvY2FsID0gKmxj bCA9IDE7CisJCX0gZWxzZSB7CisJCSAgICBuZXRjb25uID0gMDsKKwkJfQorCQlnb3RzaWdzID0g MDsKKwkJcmV0dXJuKHJjKTsKKwkgICAgfQorCX0KKyAgICB9CisjZW5kaWYgLyogTkVUQ09OTiAq LworCisjaWZkZWYgTUFYTkFNTEVOCisgICAgZGVidWcoRjEwMCwidHRvcGVuIE1BWE5BTUxFTiBk ZWZpbmVkIiwiIiwwKTsKKyNlbHNlCisgICAgZGVidWcoRjEwMCwidHRvcGVuIE1BWE5BTUxFTiAq Tk9UKiBkZWZpbmVkIiwiIiwwKTsKKyNlbmRpZgorCisjaWZkZWYgQlNENAorICAgIGRlYnVnKEYx MDAsInR0b3BlbiBCU0Q0IGRlZmluZWQiLCIiLDApOworI2Vsc2UKKyAgICBkZWJ1ZyhGMTAwLCJ0 dG9wZW4gQlNENCAqTk9UKiBkZWZpbmVkIiwiIiwwKTsKKyNlbmRpZiAvKiBCU0Q0ICovCisKKyNp ZmRlZiBCU0Q0MgorICAgIGRlYnVnKEYxMDAsInR0b3BlbiBCU0Q0MiBkZWZpbmVkIiwiIiwwKTsK KyNlbHNlCisgICAgZGVidWcoRjEwMCwidHRvcGVuIEJTRDQyICpOT1QqIGRlZmluZWQiLCIiLDAp OworI2VuZGlmIC8qIEJTRDQyICovCisKKyNpZmRlZiBNWVJFQUQKKyAgICBkZWJ1ZyhGMTAwLCJ0 dG9wZW4gTVlSRUFEIGRlZmluZWQiLCIiLDApOworI2Vsc2UKKyAgICBkZWJ1ZyhGMTAwLCJ0dG9w ZW4gTVlSRUFEICpOT1QqIGRlZmluZWQiLCIiLDApOworI2VuZGlmIC8qIE1ZUkVBRCAqLworCisj aWZkZWYJTkVUQ09OTgorICAgIGlmIChtb2RlbSA8IDApIHsJCQkvKiBtb2RlbSA8IDAgPSBjb2Rl IGZvciBuZXR3b3JrICovCisJaW50IHg7CisJdHRtZG0gPSBtb2RlbTsKKwltb2RlbSA9IC1tb2Rl bTsJCQkvKiBQb3NpdGl2ZSBuZXR3b3JrIHR5cGUgbnVtYmVyICovCisJZmRmbGFnID0gMDsJCQkv KiBTdGRpbyBub3QgcmVkaXJlY3RlZC4gKi8KKwluZXRjb25uID0gMTsJCQkvKiBBbmQgaXQncyBh IG5ldHdvcmsgY29ubmVjdGlvbiAqLworCWRlYnVnKEYxMTEsInR0b3BlbiBuZXQiLHR0bmFtZSxt b2RlbSk7CisjaWZkZWYgTkFNRUZECisJZm9yIChwID0gdHRuYW1lOyBpc2RpZ2l0KCpwKTsgcCsr KSA7IC8qIENoZWNrIGZvciBhbGwgZGlnaXRzICovCisgCWlmICgqcCA9PSAnXDAnICYmICh0ZWxu ZXRmZCB8fCB4MjVmZCkpIHsgLyogQXZvaWQgWC4xMjEgYWRkcmVzc2VzICovCisJICAgIHR0eWZk ID0gYXRvaSh0dG5hbWUpOwkvKiBJcyB0aGVyZSBhIHdheSB0byB0ZXN0IGl0J3Mgb3Blbj8gKi8K KwkgICAgdHRmZGZsZyA9IDE7CQkvKiBXZSBnb3QgYW4gb3BlbiBmaWxlIGRlc2NyaXB0b3IgKi8K KwkgICAgZGVidWcoRjExMSwidHRvcGVuIG5ldCB0dGZkZmxnIix0dG5hbWUsdHRmZGZsZyk7CisJ ICAgIGRlYnVnKEYxMDEsInR0b3BlbiBuZXQgdHR5ZmQiLCIiLHR0eWZkKTsKKwkgICAgY2tzdHJu Y3B5KHR0bm1zdix0dG5hbWUsREVWTkFNTEVOKTsgLyogUmVtZW1iZXIgdGhlICJuYW1lIi4gKi8K KwkgICAgeCA9IDE7CQkJLyogUmV0dXJuIGNvZGUgaXMgImdvb2QiLiAqLworCSAgICBpZiAodGVs bmV0ZmQpIHsKKwkJdHRuZXQgPSBORVRfVENQQjsKKwkJaWYgKHR0bnByb3RvICE9IE5QX1RDUFJB VykKKwkJICB0dG5wcm90byA9IE5QX1RFTE5FVDsKKyNpZmRlZiBTVU5YMjUKKwkgICAgfSBlbHNl IGlmICh4MjVmZCkgeworCQl0dG5ldCA9IE5FVF9TWDI1OworCQl0dG5wcm90byA9IE5QX05PTkU7 CisjZW5kaWYgLyogU1VOWDI1ICovCisJICAgIH0KKwl9IGVsc2UgewkJCS8qIEhvc3QgbmFtZSBv ciBhZGRyZXNzIGdpdmVuICovCisjaWZkZWYgTkVUUFRZCisJICAgIGlmIChtb2RlbSA9PSBORVRf UFRZKSB7CisJCWludCB4OworCQlpZiAobm9wdXNoKSB7CisJCSAgICBkZWJ1ZyhGMTAwLCJ0dG9w ZW4gUFRZOiBub3B1c2giLCIiLDApOworCQkgICAgcmV0dXJuKC0xKTsKKwkJfQorICAgICAgICAg ICAgICAgIHR0bmV0ID0gTkVUX1BUWTsKKwkJdHRucHJvdG8gPSBOUF9OT05FOworICAgICAgICAg ICAgICAgIG5ldGNvbm4gPSAxOyAgICAgICAgICAgIC8qIGJ1dCB3ZSBkb24ndCB1c2UgbmV0d29y ayBpL28gKi8KKyAgICAgICAgICAgICAgICB0dHB0eSA9IDE7CisgICAgICAgICAgICAgICAgZGVi dWcoRjExMCwidHRvcGVuIFBUWSIsdHRuYW1lLDApOworCQl4ID0gZG9fcHR5KCZ0dHlmZCx0dG5h bWUsMCk7CisJCWlmICh4ID4gLTEpIHsKKwkJICAgIGNrc3RybmNweSh0dG5tc3YsdHRuYW1lLERF Vk5BTUxFTik7CisJCSAgICB4bG9jYWwgPSAqbGNsID0gMTsJLyogSXQncyBsb2NhbCAqLworCQl9 IGVsc2UgeworCQkgICAgdHRwdHkgPSAwOworCQkgICAgbmV0Y29ubiA9IDA7CisJCX0KKwkJZ290 c2lncyA9IDA7CisJCXJldHVybih4KTsKKwkgICAgfQorI2VuZGlmIC8qIE5FVFBUWSAqLworI2lm ZGVmIE5FVENNRAorLyoKKyAgZHVwMigpIGlzIG5vdCBhdmFpbGFibGUgb24gb2xkZXIgU3lzdGVt IFYgcGxhdGZvcm1zIGxpa2UgQVQmVCAzQnguICBGb3IKKyAgdGhvc2Ugc3lzdGVtcyB3ZSBwdW50 IGJ5IG5vdCBkZWZpbmluZyBORVRDTUQsIGJ1dCB3ZSBtaWdodCBiZSBhYmxlIHRvIGRvCisgIGJl dHRlciAtLSBzZWUgd29ya2Fyb3VuZHMgZm9yIHRoaXMgcHJvYmxlbSBpbiBja3VmaW8uYyAoc2Vh cmNoIGZvciBkdXAyKS4KKyovCisJICAgIGlmIChtb2RlbSA9PSBORVRfQ01EKSB7CisJCWlmIChu b3B1c2gpIHsKKwkJICAgIGRlYnVnKEYxMDAsInR0b3BlbiBwaXBlOiBub3B1c2giLCIiLDApOwor CQkgICAgcmV0dXJuKC0xKTsKKwkJfQorCQlpZiAocGlwZShwaXBlMCkgfHwgcGlwZShwaXBlMSkp IHsKKwkJICAgIHBlcnJvcigiUGlwZSBlcnJvciIpOworCQkgICAgcmV0dXJuKC0xKTsKKwkJfQor CQl0dHBpZCA9IGZvcmsoKTsJCS8qIE1ha2UgYSBmb3JrICovCisKKwkJc3dpdGNoICh0dHBpZCkg eworCQkgIGNhc2UgLTE6CQkvKiBFcnJvciBtYWtpbmcgZm9yayAqLworCQkgICAgY2xvc2UocGlw ZTBbMF0pOworCQkgICAgY2xvc2UocGlwZTBbMV0pOworCQkgICAgY2xvc2UocGlwZTFbMF0pOwor CQkgICAgY2xvc2UocGlwZTFbMV0pOworCQkgICAgcGVycm9yKCJGb3JrIGVycm9yIik7CisJCSAg ICByZXR1cm4oLTEpOworCQkgIGNhc2UgMDoJCS8qIENoaWxkLiAqLworCQkgICAgY2xvc2UocGlw ZTBbMF0pOworCQkgICAgY2xvc2UocGlwZTFbMV0pOworCQkgICAgZHVwMihwaXBlMFsxXSwgMSk7 CisJCSAgICBjbG9zZShwaXBlMFsxXSk7CisJCSAgICBkdXAyKHBpcGUxWzBdLCAwKTsKKwkJICAg IGNsb3NlKHBpcGUxWzBdKTsKKwkJICAgIHN5c3RlbSh0dG5hbWUpOworCQkgICAgX2V4aXQoMCk7 CisJCSAgZGVmYXVsdDoJCS8qIFBhcmVudCAqLworCQkgICAgY2xvc2UocGlwZTBbMV0pOworCQkg ICAgY2xvc2UocGlwZTFbMF0pOworCQkgICAgZmRpbiA9IHBpcGUwWzBdOwkvKiBSZWFkIGZyb20g cGlwZSAqLworCQkgICAgZmRvdXQgPSBwaXBlMVsxXTsJLyogV3JpdGUgdG8gcGlwZSAqLworCQkg ICAgdHRvdXQgPSBmZG9wZW4oZmRvdXQsInciKTsgLyogR2V0IHN0cmVhbSBzbyB3ZSBjYW4gKi8K KwkJICAgIGlmICghdHRvdXQpIHsJLyogbWFrZSBpdCB1bmJ1ZmZlcmVkLiAqLworCQkJcGVycm9y KCJmZG9wZW4gZmFpbHVyZSIpOworCQkJcmV0dXJuKC0xKTsKKwkJICAgIH0KKwkJICAgIHNldGJ1 Zih0dG91dCxOVUxMKTsKKwkJICAgIGNrc3RybmNweSh0dG5tc3YsdHRuYW1lLERFVk5BTUxFTik7 CisJCSAgICB4bG9jYWwgPSAqbGNsID0gMTsJLyogSXQncyBsb2NhbCAqLworCQkgICAgbmV0Y29u biA9IDE7CS8qIENhbGwgaXQgYSBuZXR3b3JrIGNvbm5lY3Rpb24gKi8KKwkJICAgIHR0bWRtID0g bW9kZW07CS8qIFJlbWVtYmVyIG5ldHdvcmsgdHlwZSAqLworCQkgICAgdHR5ZmQgPSBmZGluOwor CQkgICAgdHRwaXBlID0gMTsKKwkJICAgIGdvdHNpZ3MgPSAwOworCQkgICAgcmV0dXJuKDApOwor CQl9CisJICAgIH0KKyNlbmRpZiAvKiBORVRDTUQgKi8KKyNlbmRpZiAvKiBOQU1FRkQgKi8KKwkg ICAgeCA9IG5ldG9wZW4odHRuYW1lLCBsY2wsIG1vZGVtKTsgLyogKHNlZSBja2NuZXQuaCkgKi8K KwkgICAgaWYgKHggPiAtMSkgeworCQlja3N0cm5jcHkodHRubXN2LHR0bmFtZSxERVZOQU1MRU4p OworCSAgICB9IGVsc2UgbmV0Y29ubiA9IDA7CisjaWZkZWYgTkFNRUZECisJfQorI2VuZGlmIC8q IE5BTUVGRCAqLworCisjaWZkZWYgc29ueV9uZXdzCQkJLyogU29ueSBORVdTICovCisJaWYgKGlv Y3RsKHR0eWZkLFRJT0NLR0VULCZrbV9leHQpIDwgMCkgeyAvKiBHZXQgS2FuamkgbW9kZSAqLwor CSAgICBwZXJyb3IoInR0b3BlbiBlcnJvciBnZXR0aW5nIEthbmppIG1vZGUgKG5ldHdvcmspIik7 CisJICAgIGRlYnVnKEYxMTEsInR0b3BlbiBlcnJvciBnZXR0aW5nIEthbmppIG1vZGUiLCJuZXR3 b3JrIiwwKTsKKwkgICAga21fZXh0ID0gLTE7CQkvKiBNYWtlIHN1cmUgdGhpcyBzdGF5cyB1bmRl ZmluZWQuICovCisJfQorI2VuZGlmIC8qIHNvbnlfbmV3cyAqLworCisJeGxvY2FsID0gKmxjbCA9 IDE7CQkvKiBOZXR3b3JrIGNvbm5lY3Rpb25zIGFyZSBsb2NhbC4gKi8KKwlkZWJ1ZyhGMTAxLCJ0 dG9wZW4gbmV0IHgiLCIiLHgpOworI2lmZGVmIENPTU1FTlQKKy8qIExldCBuZXRvcGVuKCkgZG8g dGhpcyAqLworCWlmICh4ID4gLTEgJiYgIXgyNWZkKQorCSAgeCA9IHRuX2luaSgpOwkJCS8qIElu aXRpYWxpemUgVEVMTkVUIHByb3RvY29sICovCisjZW5kaWYgLyogQ09NTUVOVCAqLworCWdvdHNp Z3MgPSAwOworCXJldHVybih4KTsKKyAgICB9IGVsc2UgewkJCQkvKiBUZXJtaW5hbCBkZXZpY2Ug Ki8KKyNlbmRpZgkvKiBORVRDT05OICovCisKKyNpZmRlZiBOQU1FRkQKKy8qCisgIFRoaXMgY29k ZSBsZXRzIHlvdSBnaXZlIEtlcm1pdCBhbiBvcGVuIGZpbGUgZGVzY3JpcHRvciBmb3IgYSBzZXJp YWwKKyAgY29tbXVuaWNhdGlvbiBkZXZpY2UsIHJhdGhlciB0aGFuIGEgZGV2aWNlIG5hbWUuICBL ZXJtaXQgYXNzdW1lcyB0aGF0IHRoZQorICBsaW5lIGlzIGFscmVhZHkgb3BlbiwgbG9ja2VkLCBj b25kaXRpb25lZCB3aXRoIHRoZSByaWdodCBwYXJhbWV0ZXJzLCBldGMuCisqLworCWZvciAocCA9 IHR0bmFtZTsgaXNkaWdpdCgqcCk7IHArKykgOyAvKiBDaGVjayBmb3IgYWxsLWRpZ2l0cyAqLwor CWlmICgqcCA9PSAnXDAnKSB7CisJICAgIHR0eWZkID0gYXRvaSh0dG5hbWUpOwkvKiBJcyB0aGVy ZSBhIHdheSB0byB0ZXN0IGl0J3Mgb3Blbj8gKi8KKwkgICAgZGVidWcoRjExMSwidHRvcGVuIGdv dCBvcGVuIGZkIix0dG5hbWUsdHR5ZmQpOworCSAgICBja3N0cm5jcHkodHRubXN2LHR0bmFtZSxE RVZOQU1MRU4pOyAvKiBSZW1lbWJlciB0aGUgIm5hbWUiLiAqLworCSAgICBpZiAodHR5ZmQgPj0g MCAmJiB0dHlmZCA8IDMpIC8qIElmIGl0J3Mgc3RkaW8uLi4gKi8KKwkgICAgICB4bG9jYWwgPSAq bGNsID0gMDsJLyogd2UncmUgaW4gcmVtb3RlIG1vZGUgKi8KKwkgICAgZWxzZQkJCS8qIG90aGVy d2lzZSAqLworCSAgICAgIHhsb2NhbCA9ICpsY2wgPSAxOwkvKiBsb2NhbCBtb2RlLiAqLworCSAg ICBuZXRjb25uID0gMDsJCS8qIEFzc3VtZSBpdCdzIG5vdCBhIG5ldHdvcmsuICovCisJICAgIHR2 dGZsZyA9IDA7CQkJLyogTWlnaHQgbmVlZCB0byBpbml0aWFsaXplIG1vZGVzLiAqLworCSAgICB0 dG1kbSA9IG1vZGVtOwkJLyogUmVtZW1iZXIgbW9kZW0gdHlwZS4gKi8KKwkgICAgZmRmbGFnID0g MDsJCQkvKiBTdGRpbyBub3QgcmVkaXJlY3RlZC4gKi8KKwkgICAgdHRmZGZsZyA9IDE7CQkvKiBG bGFnIHdlIHdlcmUgb3BlbmVkIHRoaXMgd2F5LiAqLworCSAgICBkZWJ1ZyhGMTExLCJ0dG9wZW4g bm9uLW5ldCB0dGZkZmxnIix0dG5hbWUsdHRmZGZsZyk7CisJICAgIGRlYnVnKEYxMDEsInR0b3Bl biBub24tbmV0IHR0eWZkIiwiIix0dHlmZCk7CisKKyNpZmRlZiBzb255X25ld3MJCQkvKiBTb255 IE5FV1MgKi8KKwkgICAgLyogR2V0IGRldmljZSBLYW5qaSBtb2RlICovCisJICAgIGlmIChpb2N0 bCh0dHlmZCxUSU9DS0dFVCwma21fZXh0KSA8IDApIHsKKwkJcGVycm9yKCJ0dG9wZW4gZXJyb3Ig Z2V0dGluZyBLYW5qaSBtb2RlIik7CisJCWRlYnVnKEYxMDEsInR0b3BlbiBlcnJvciBnZXR0aW5n IEthbmppIG1vZGUiLCIiLDApOworCQlrbV9leHQgPSAtMTsJCS8qIE1ha2Ugc3VyZSB0aGlzIHN0 YXlzIHVuZGVmaW5lZC4gKi8KKwkgICAgfQorI2VuZGlmIC8qIHNvbnlfbmV3cyAqLworCSAgICBn b3RzaWdzID0gMDsKKwkgICAgcmV0dXJuKDApOwkJCS8qIFJldHVybiBzdWNjZXNzICovCisJfQor I2VuZGlmIC8qIE5BTUVGRCAqLworI2lmZGVmIE5FVENPTk4KKyAgICB9CisjZW5kaWYgLyogTkVU Q09OTiAqLworCisvKiBIZXJlIHdlIGhhdmUgdG8gb3BlbiBhIHNlcmlhbCBkZXZpY2Ugb2YgdGhl IGdpdmVuIG5hbWUuICovCisKKyAgICBuZXRjb25uID0gMDsJCQkvKiBTbyBpdCdzIG5vdCBhIG5l dHdvcmsgY29ubmVjdGlvbiAqLworICAgIG9jY3QgPSBzaWduYWwoU0lHSU5ULCBjY3RyYXApOwkv KiBTZXQgQ29udHJvbC1DIHRyYXAsIHNhdmUgb2xkIG9uZSAqLworICAgIHNpZ2ludF9pZ24gPSAw OworCisgICAgdHZ0ZmxnID0gMDsJCQkvKiBGbGFnIGZvciB1c2UgYnkgdHR2dCgpLiAqLworCQkJ CS8qIDAgPSB0dHZ0IG5vdCBjYWxsZWQgeWV0IGZvciB0aGlzIGRldmljZSAqLworCisgICAgZmRm bGFnID0gKCFpc2F0dHkoMCkgfHwgIWlzYXR0eSgxKSk7IC8qIEZsYWcgZm9yIHN0ZGlvIHJlZGly ZWN0ZWQgKi8KKyAgICBkZWJ1ZyhGMTAxLCJ0dG9wZW4gZmRmbGFnIiwiIixmZGZsYWcpOworCisg ICAgdHRtZG0gPSBtb2RlbTsgICAgICAgICAgICAgICAgICAgICAgLyogTWFrZSB0aGlzIGF2YWls YWJsZSB0byBvdGhlciBmbnMgKi8KKyAgICB4bG9jYWwgPSAqbGNsOyAgICAgICAgICAgICAgICAg ICAgICAvKiBNYWtlIHRoaXMgYXZhaWxhYmxlIHRvIG90aGVyIGZucyAqLworCisvKiBDb2RlIGZv ciBoYW5kbGluZyBiaWRpcmVjdGlvbmFsIHR0eSBsaW5lcyBnb2VzIGhlcmUuICovCisvKiBVc2Ug c3BlY2lmaWVkIG1ldGhvZCBmb3IgdHVybmluZyBvZmYgbG9naW5zIGFuZCBzdXBwcmVzc2luZyBn ZXR0eS4gKi8KKworI2lmZGVmIEFDVUNOVFJMCisgICAgLyogU2hvdWxkIHB1dCBjYWxsIHRvIHBy aXZfb24oKSBoZXJlLCBidXQgdGhhdCB3b3VsZCBiZSB2ZXJ5IHJpc2t5ISAqLworICAgIGFjdWNu dHJsKCJkaXNhYmxlIix0dG5hbWUpOyAgICAgICAgIC8qIGFjdWNudHJsKCkgcHJvZ3JhbS4gKi8K KyAgICAvKiBhbmQgcHJpdl9vZmYoKSBoZXJlLi4uICovCisjZWxzZQorI2lmZGVmIEFUVDczMDAK KyAgICBpZiAoKGF0dG1vZGVtICYgRE9HRVRZKSA9PSAwKSAgICAgICAvKiBvZmZnZXR0eSgpIHBy b2dyYW0uICovCisgICAgICBhdHRtb2RlbSB8PSBvZmZnZXR0eSh0dG5hbWUpOwkvKiBSZW1lbWJl ciByZXNwb25zZS4gICovCisjZW5kaWYgLyogQVRUNzMwMCAqLworI2VuZGlmIC8qIEFDVUNOVFJM ICovCisKKyNpZmRlZiBPUEVORklSU1QKKy8qCisgMTk4NS0yMDAxOiBvcGVucyBkZXZpY2UgZmly c3QgdGhlbiBnZXRzIGxvY2s7IHJlYXNvbjoKKyBLZXJtaXQgdXN1YWxseSBoYXMgdG8gcnVuIHNl dHVpZCBvciBzZXRnaWQgaW4gb3JkZXIgdG8gY3JlYXRlIGEgbG9ja2ZpbGUuCisgSWYgeW91IGdp dmUgYSBTRVQgTElORSBjb21tYW5kIGZvciBhIGRldmljZSB0aGF0IGhhcHBlbnMgdG8gYmUgeW91 ciBqb2IncworIGNvbnRyb2xsaW5nIHRlcm1pbmFsLCBLZXJtaXQgZG9lc24ndCBoYXZlIHRvIGNy ZWF0ZSBhIGxvY2tmaWxlLCBhbmQgaW4gZmFjdAorIHNob3VsZCBub3QgY3JlYXRlIG9uZSwgYW5k IHdvdWxkIGZhaWwgaWYgaXQgdHJpZWQgdG8gaWYgaXQgZGlkIG5vdCBoYXZlIHRoZQorIHJlcXVp cmVkIHByaXZpbGVnZXMuICBCdXQgeW91IGNhbid0IGZpbmQgb3V0IGlmIHR3byB0dHkgZGV2aWNl IG5hbWVzIGFyZQorIGVxdWl2YWxlbnQgdW50aWwgeW91IGhhdmUgYSBmaWxlIGRlc2NyaXB0b3Ig dGhhdCB5b3UgY2FuIGdpdmUgdG8gdHR5bmFtZSgpLgorIEJ1dCB0aGlzIGNhbiBjYXVzZSBhIHJh Y2UgY29uZGl0aW9uIGJldHdlZW4gS2VybWl0IGFuZCBbbV1nZXR0eS4gIFNvIHNlZQorIHRoZSBb I11lbHNlIHBhcnQuLi4KKyovIAorCisvKgorIEluIHRoZSBmb2xsb3dpbmcgc2VjdGlvbiwgd2Ug b3BlbiB0aGUgdHR5IGRldmljZSBmb3IgcmVhZC93cml0ZS4KKyBJZiBhIG1vZGVtIGhhcyBiZWVu IHNwZWNpZmllZCB2aWEgInNldCBtb2RlbSIgcHJpb3IgdG8gInNldCBsaW5lIgorIHRoZW4gdGhl IE9fTkRFTEFZIHBhcmFtZXRlciBpcyB1c2VkIGluIHRoZSBvcGVuLCBwcm92aWRlZCB0aGlzIHN5 bWJvbAorIGlzIGRlZmluZWQgKGUuZy4gaW4gZmNudGwuaCksIHNvIHRoYXQgdGhlIHByb2dyYW0g ZG9lcyBub3QgaGFuZyB3YWl0aW5nCisgZm9yIGNhcnJpZXIgKHdoaWNoIGluIG1vc3QgY2FzZXMg d29uJ3QgYmUgcHJlc2VudCBiZWNhdXNlIGEgY29ubmVjdGlvbgorIGhhcyBub3QgYmVlbiBkaWFs ZWQgeWV0KS4gIE9fTkRFTEFZIGlzIHJlbW92ZWQgbGF0ZXIgb24gaW4gdHRvcGVuKCkuICBJdAor IHdvdWxkIG1ha2UgbW9yZSBzZW5zZSB0byBmaXJzdCBkZXRlcm1pbmUgaWYgdGhlIGxpbmUgaXMg bG9jYWwgYmVmb3JlCisgZG9pbmcgdGhpcywgYnV0IGJlY2F1c2UgdHR5bmFtZSgpIHJlcXVpcmVz IGEgZmlsZSBkZXNjcmlwdG9yLCB3ZSBoYXZlCisgdG8gb3BlbiBpdCBmaXJzdC4gIFNlZSBkb19v cGVuKCkuCisKKyBOb3cgb3BlbiB0aGUgZGV2aWNlIHVzaW5nIHRoZSBkZXNpcmVkIHRyZWF0bWVu dCBvZiBjYXJyaWVyLgorIElmIGNhcnJpZXIgaXMgUkVRVUlSRUQsIHRoZW4gb3BlbiBjb3VsZCBo YW5nIGZvcmV2ZXIsIHNvIGFuIG9wdGlvbmFsCisgdGltZXIgaXMgcHJvdmlkZWQuICBJZiBjYXJy aWVyIGlzIG5vdCByZXF1aXJlZCwgdGhlIHRpbWVyIHNob3VsZCBuZXZlcgorIGdvIG9mZiwgYW5k IHNob3VsZCBkbyBubyBoYXJtLi4uCisqLworICAgIHR0b3RtbyA9IDA7CQkJCS8qIEZsYWcgbm8g dGltZW91dCAqLworICAgIGRlYnVnKEYxMDEsInR0b3BlbiB0aW1vIiwiIix0aW1vKTsKKyAgICBk ZWJ1ZyhGMTAxLCJ0dG9wZW4geGxvY2FsIiwiIix4bG9jYWwpOworICAgIGlmICh0aW1vID4gMCkg eworCWludCB4eDsKKwlzYXZhbCA9IHNpZ25hbChTSUdBTFJNLHRpbWVyaCk7CS8qIFRpbWVkLCBz ZXQgdXAgdGltZXIuICovCisJeHggPSBhbGFybSh0aW1vKTsJCS8qIFRpbWVkIG9wZW4oKSAqLwor CWRlYnVnKEYxMDEsInR0b3BlbiBhbGFybSIsIiIseHgpOworCWlmICgKKyNpZmRlZiBDS19QT1NJ WF9TSUcKKwkgICAgc2lnc2V0am1wKHNqYnVmLDEpCisjZWxzZQorCSAgICBzZXRqbXAoc2pidWYp CisjZW5kaWYgLyogQ0tfUE9TSVhfU0lHICovCisJICAgICkgeworCSAgICB0dG90bW8gPSAxOwkJ CS8qIEZsYWcgdGltZW91dC4gKi8KKwl9IGVsc2UgdHR5ZmQgPSBkb19vcGVuKHR0bmFtZSk7CisJ dHRpbW9mZigpOworCWRlYnVnKEYxMTEsInR0b3BlbiIsIm1vZGVtIixtb2RlbSk7CisJZGVidWco RjEwMSwidHRvcGVuIHR0eWZkIiwiIix0dHlmZCk7CisJZGVidWcoRjEwMSwidHRvcGVuIGFsYXJt IHJldHVybiIsIiIsdHRvdG1vKTsKKyAgICB9IGVsc2UgeworCWVycm5vID0gMDsKKwl0dHlmZCA9 IGRvX29wZW4odHRuYW1lKTsKKyAgICB9CisgICAgZGVidWcoRjExMSwidHRvcGVuIHR0eWZkIix0 dG5hbWUsdHR5ZmQpOworICAgIGlmICh0dHlmZCA8IDApIHsJCQkvKiBJZiBjb3VsZG4ndCBvcGVu LCBmYWlsLiAqLworCWRlYnVnKEYxMDEsInR0b3BlbiBlcnJubyIsIiIsZXJybm8pOworCWlmIChl cnJubyA+IDAgJiYgIXF1aWV0KQorCSAgcGVycm9yKHR0bmFtZSk7CQkvKiBQcmludCBtZXNzYWdl ICovCisKKyNpZmRlZiBBVFQ3MzAwCisJaWYgKGF0dG1vZGVtICYgRE9HRVRZKQkJLyogd2FzIGdl dHR5KDFtKSBydW5uaW5nIGJlZm9yZSB1cz8gKi8KKwkgIG9uZ2V0dHkodHRubXN2KTsJCS8qIHll cywgcmVzdGFydCBvbiB0dHkgbGluZSAqLworCWF0dG1vZGVtICY9IH5ET0dFVFk7CQkvKiBubyBw aG9uZSBpbiB1c2UsIGdldHR5IHJlc3RvcmVkICovCisjZWxzZQorI2lmZGVmIEFDVUNOVFJMCisg ICAgICAgIC8qIFNob3VsZCBwdXQgY2FsbCB0byBwcml2X29uKCkgaGVyZSwgYnV0IHRoYXQgd291 bGQgYmUgcmlza3khICovCisJYWN1Y250cmwoImVuYWJsZSIsdHRuYW1lKTsJLyogYWN1Y250cmwo KSBwcm9ncmFtLiAqLworCS8qIGFuZCBwcml2X29mZigpIGhlcmUuLi4gKi8KKyNlbmRpZiAvKiBB Q1VOVFJMICovCisjZW5kaWYgLyogQVRUNzMwMCAqLworCisJc2lnbmFsKFNJR0lOVCxvY2N0KTsJ CS8qIFB1dCBvbGQgQ3RybC1DIHRyYXAgYmFjay4gKi8KKwlpZiAoZXJybm8gPT0gRUFDQ0VTKSB7 CQkvKiBEZXZpY2UgaXMgcHJvdGVjdGVkIGFnYWluc3QgdXNlciAqLworCSAgICBkZWJ1ZyhGMTEw LCJ0dG9wZW4gRUFDQ0VTUyIsdHRuYW1lLDApOyAvKiBSZXR1cm4gLTQgKi8KKwkgICAgcmV0dXJu KC00KTsKKwl9IGVsc2UgcmV0dXJuKHR0b3RtbyA/IC0yIDogLTEpOyAvKiBPdGhlcndpc2UgLTIg aWYgdGltZW91dCwgb3IgLTEgKi8KKyAgICB9CisKKyNpZmRlZiBRTlgKKyAgICB7CisJZXh0ZXJu IGludCBxbnhwb3J0bG9jazsKKwl4ID0gcW54b3BlbmNvdW50KCk7CisJZGVidWcoRjEwMSwidHRv cGVuIHFueG9wZW5jb3VudCIsIiIseCk7CisJZGVidWcoRjEwMSwidHRvcGVuIHFueHBvcnRsb2Nr IiwiIixxbnhwb3J0bG9jayk7CisJaWYgKHggPCAwICYmIHFueHBvcnRsb2NrKSB7CisJICAgIHR0 Y2xvcygwKTsKKwkgICAgcHJpbnRmKCI/Q2FuJ3QgZ2V0IHBvcnQgb3BlbiBjb3VudFxuIik7CisJ ICAgIHByaW50ZigiKFRyeSBhZ2FpbiB3aXRoIFNFVCBRTlgtUE9SVC1MT0NLIE9GRilcbiIpOwor CSAgICByZXR1cm4oLTEpOwkJCS8qIEluZGljYXRlIGRldmljZSBpcyBpbiB1c2UgKi8KKwl9CisJ aWYgKHggPiAxKSB7CQkJLyogMSA9PSBtZSAqLworCSAgICBpZiAocW54cG9ydGxvY2spCisJICAg ICAgdHRjbG9zKDApOworCSAgICAgIHJldHVybigtMik7CQkvKiBJbmRpY2F0ZSBkZXZpY2UgaXMg aW4gdXNlICovCisJICAgIGVsc2UgaWYgKCFxdWlldCkKKwkgICAgICBwcmludGYoIldBUk5JTkc6 IFwiJXNcIiBsb29rcyBidXN5Li4uXG4iLHR0ZGV2KTsKKwl9CisgICAgfQorI2VuZGlmIC8qIFFO WCAqLworCisjaWZkZWYgUGxhbjkKKyAgICAvKiB0YWtlIHRoaXMgb3Bwb3J0dW5pdHkgdG8gb3Bl biB0aGUgY29udHJvbCBjaGFubmVsICovCisgICAgaWYgKHA5b3BlbnR0eWN0bCh0dG5hbWUpIDwg MCkKKyNlbHNlCisgICAgLyogTWFrZSBzdXJlIGl0J3MgYSByZWFsIHR0eS4gKi8KKyAgICBpZiAo IXR0ZmRmbGcgJiYgIWlzYXR0eSh0dHlmZCkgJiYgc3RyY21wKHR0bmFtZSwiL2Rldi9udWxsIikp CisjZW5kaWYgLyogUGxhbjkgKi8KKyAgICAgIHsKKwlmcHJpbnRmKHN0ZGVyciwiJXMgaXMgbm90 IGEgdGVybWluYWwgZGV2aWNlXG4iLHR0bmFtZSk7CisJZGVidWcoRjExMSwidHRvcGVuIG5vdCBh IHR0eSIsdHRuYW1lLGVycm5vKTsKKwljbG9zZSh0dHlmZCk7CisJdHR5ZmQgPSAtMTsKKwl3YXNj bG9zZWQgPSAxOworCXNpZ25hbChTSUdJTlQsb2NjdCk7CisJcmV0dXJuKC0xKTsKKyAgICB9CisK KyNpZmRlZiBhZWdpcworCS8qIEFwb2xsbyBDIHJ1bnRpbWUgY2xhaW1zIHRoYXQgY29uc29sZSBw YWRzIGFyZSB0dHkgZGV2aWNlcywgd2hpY2gKKwkgKiBpcyByZWFzb25hYmxlLCBidXQgdGhleSBh cmVuJ3QgYW55IGdvb2QgZm9yIHBhY2tldCB0cmFuc2Zlci4gKi8KKwlpb3NfJGlucV90eXBlX3Vp ZCgoc2hvcnQpdHR5ZmQsIHR0eXVpZCwgc3QpOworCWlmIChzdC5hbGwgIT0gc3RhdHVzXyRvaykg eworCSAgICBmcHJpbnRmKHN0ZGVyciwgInByb2JsZW0gZ2V0dGluZyB0dHkgb2JqZWN0IHR5cGU6 ICIpOworCSAgICBlcnJvcl8kcHJpbnQoc3QpOworCX0gZWxzZSBpZiAodHR5dWlkICE9IHNpb18k dWlkKSB7IC8qIHJlamVjdCBub24tU0lPIGxpbmVzICovCisJICAgIGNsb3NlKHR0eWZkKTsgdHR5 ZmQgPSAtMTsKKwkgICAgd2FzY2xvc2VkID0gMTsKKwkgICAgZXJybm8gPSBFTk9UVFk7IHBlcnJv cih0dG5hbWUpOworCSAgICBzaWduYWwoU0lHSU5ULG9jY3QpOworCSAgICByZXR1cm4oLTEpOwor CX0KKyNlbmRpZiAvKiBhZWdpcyAqLworCisgICAgc2lnaW50X2lnbiA9IChvY2N0ID09IFNJR19J R04pID8gMSA6IDA7CisKKyAgICBja3N0cm5jcHkodHRubXN2LHR0bmFtZSxERVZOQU1MRU4pOwkv KiBLZWVwIGNvcHkgb2YgbmFtZSBsb2NhbGx5LiAqLworCisvKiBDYWxsZXIgd2FudHMgdXMgdG8g ZmlndXJlIG91dCBpZiBsaW5lIGlzIGNvbnRyb2xsaW5nIHR0eSAqLworCisgICAgaWYgKCpsY2wg PCAwKSB7CisgICAgICAgIGlmIChzdHJjbXAodHRuYW1lLENUVE5BTSkgPT0gMCkgeyAvKiAiL2Rl di90dHkiIGFsd2F5cyByZW1vdGUgKi8KKyAgICAgICAgICAgIHhsb2NhbCA9IDA7CisJICAgIGRl YnVnKEYxMTEsInR0b3BlbiB0dG5hbWU9Q1RUTkFNIix0dG5hbWUseGxvY2FsKTsKKyAgICAgICAg fSBlbHNlIGlmIChzdHJjbXAodHRuYW1lLGN0dG5hbSkgPT0gMCkgeworICAgICAgICAgICAgeGxv Y2FsID0gMDsKKwkgICAgZGVidWcoRjExMSwidHRvcGVuIHR0bmFtZT1jdHRuYW0iLHR0bmFtZSx4 bG9jYWwpOworCX0gZWxzZSBpZiAoY3R0bmFtWzBdKSB7CisjaWZkZWYgQkVCT1hfRFI3CisgICAg ICAgICAgICB4ID0gdHRubXN2OwkJCS8qIHR0eW5hbWUoKSBpcyBicm9rZW4gKi8KKyNlbHNlCisg ICAgICAgICAgICB4ID0gdHR5bmFtZSh0dHlmZCk7ICAgICAgICAgLyogR2V0IHJlYWwgbmFtZSBv ZiB0dG5hbWUuICovCisjZW5kaWYgLyogQkVCT1hfRFI3ICovCisJICAgIGlmICgheCkgeCA9ICIi OworCSAgICBpZiAoKngpCisJICAgICAgeGxvY2FsID0gKChzdHJuY21wKHgsY3R0bmFtLERFVk5B TUxFTikgPT0gMCkgPyAwIDogMSk7CisJICAgIGVsc2UKKwkgICAgICB4bG9jYWwgPSAxOworICAg ICAgICAgICAgZGVidWcoRjExMSwidHRvcGVuIHR0eW5hbWUodHR5ZmQpIHhsb2NhbCIseCx4bG9j YWwpOworICAgICAgICB9CisgICAgfQorCisjaWZuZGVmIE5PRkRaRVJPCisvKiBOb3RlLCB0aGUg Zm9sbG93aW5nIGNvZGUgd2FzIGFkZGVkIHNvIHRoYXQgVW5peCAiaWRsZS1saW5lIiBzbm9vcGVy cyAqLworLyogd291bGQgbm90IHRoaW5rIEtlcm1pdCB3YXMgaWRsZSB3aGVuIGl0IHdhcyB0cmFu c2ZlcnJpbmcgZmlsZXMsIGFuZCAqLworLyogbWF5YmUgbG9nIHBlb3BsZSBvdXQuICovCisgICAg aWYgKHhsb2NhbCA9PSAwKSB7CQkJLyogUmVtb3RlIG1vZGUgKi8KKwlpZiAoZmRmbGFnID09IDAp IHsJCS8qIFN0YW5kYXJkIGkvbyBpcyBub3QgcmVkaXJlY3RlZCAqLworCSAgICBkZWJ1ZyhGMTAw LCJ0dG9wZW4gc2V0dGluZyB0dHlmZCA9IDAiLCIiLDApOworI2lmZGVmIExZTlhPUworCSAgICAv KiBPbiBMeW54IE9TLCBmZCAwIGlzIG9wZW4gZm9yIHJlYWQgb25seS4gKi8KKwkgICAgZHVwMih0 dHlmZCwwKTsKKyNlbmRpZiAvKiBMWU5YT1MgKi8KKwkgICAgY2xvc2UodHR5ZmQpOwkJLyogVXNl IGZpbGUgZGVzY3JpcHRvciAwICovCisJICAgIHR0eWZkID0gMDsKKwl9IGVsc2UgewkJCS8qIFN0 YW5kYXJkIGkvbyBpcyByZWRpcmVjdGVkICovCisJICAgIGRlYnVnKEYxMDEsInR0b3BlbiBzdGRp byByZWRpcmVjdGVkIiwiIix0dHlmZCk7CisJfQorICAgIH0KKyNlbmRpZiAvKiBOT0ZEWkVSTyAq LworCisvKiBOb3cgY2hlY2sgaWYgbGluZSBpcyBsb2NrZWQgLS0gaWYgc28gZmFpbCwgZWxzZSBs b2NrIGZvciBvdXJzZWx2ZXMgKi8KKy8qIE5vdGU6IEFmdGVyIGhhdmluZyBkb25lIHRoaXMsIGRv bid0IGZvcmdldCB0byBkZWxldGUgdGhlIGxvY2sgaWYgeW91ICovCisvKiBsZWF2ZSB0dG9wZW4o KSB3aXRoIGFuIGVycm9yIGNvbmRpdGlvbi4gKi8KKworICAgIGxrZiA9IDA7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIENoZWNrIGxvY2sgKi8KKyAgICBpZiAoeGxvY2FsID4gMCkgewor CWludCB4eDsgaW50IHhwaWQ7CisgICAgICAgIGlmICgoeHggPSB0dGxvY2sodHRuYW1lKSkgPCAw KSB7IC8qIENhbid0IGxvY2sgaXQuICovCisgICAgICAgICAgICBkZWJ1ZyhGMTExLCJ0dG9wZW4g dHRsb2NrIGZhaWxzIix0dG5hbWUseHgpOworCSAgICAvKiBXQVJOSU5HIC0gVGhpcyBjbG9zZSgp IGNhbiBoYW5nIGlmIHR0eSBpcyBhbiBlbXB0eSBzb2NrZXQuLi4gKi8KKyAgICAgICAgICAgIGNs b3NlKHR0eWZkKTsJCS8qIENsb3NlIHRoZSBkZXZpY2UuICovCisJICAgIHR0eWZkID0gLTE7CQkJ LyogRXJhc2UgaXRzIGZpbGUgZGVzY3JpcHRvci4gKi8KKwkgICAgd2FzY2xvc2VkID0gMTsKKwkg ICAgc2lnbmFsKFNJR0lOVCxvY2N0KTsJLyogUHV0IG9sZCBTSUdJTlQgYmFjay4gKi8KKwkgICAg c2lnaW50X2lnbiA9IChvY2N0ID09IFNJR19JR04pID8gMSA6IDA7CisJICAgIGlmICh4eCA9PSAt MikgewkJLyogSWYgbG9ja2ZpbGUgc2F5cyBkZXZpY2UgaW4gdXNlLCAqLworI2lmbmRlZiBOT1VV Q1AKKwkJZGVidWcoRjExMSwidHRvcGVuIHJlYWRpbmcgbG9ja2ZpbGUgcGlkIixmbGZuYW0seHgp OworCQl4cGlkID0gdHRycGlkKGZsZm5hbSk7CS8qIFRyeSB0byByZWFkIHBpZCBmcm9tIGxvY2tm aWxlICovCisJCWlmICh4cGlkID4gLTEpIHsJLyogSWYgd2UgZ290IGEgcGlkICovCisgICAgICAg ICAgICAgICAgICAgIGlmICghcXVpZXQpCisJCSAgICAgIHByaW50ZigiTG9ja2VkIGJ5IHByb2Nl c3MgJWRcbiIseHBpZCk7IC8qIHRlbGwgdGhlbS4gKi8KKwkJICAgIHNwcmludGYobG9ja3BpZCwi JWQiLHhwaWQpOwkvKiBSZWNvcmQgaXQgdG9vICovCisJCSAgICBkZWJ1ZyhGMTEwLCJ0dG9wZW4g bG9ja3BpZCIsbG9ja3BpZCwwKTsKKwkJfSBlbHNlIGlmICgqZmxmbmFtKSB7CisJCSAgICBleHRl cm4gY2hhciAqRElSQ01EOworCQkgICAgY2hhciAqcCA9IE5VTEw7CisJCSAgICBpbnQgeDsKKwkJ ICAgIHggPSAoaW50KXN0cmxlbihmbGZuYW0pICsgKGludClzdHJsZW4oRElSQ01EKSArIDI7CisJ CSAgICBwID0gbWFsbG9jKHgpOwkvKiBQcmludCBhIGRpcmVjdG9yeSBsaXN0aW5nLiAqLworLyoK KyAgTm90ZTogcHJpdl9vbigpIHdvbid0IGhlbHAgaGVyZSwgYmVjYXVzZSB3ZSBkbyBub3QgcGFz cyBwcml2cyBhbG9uZyB0bworICB0byBpbmZlcmlvciBwcm9jZXNzZXMsIGluIHRoaXMgY2FzZSBs cy4gIFNvIGlmIHRoZSByZWFsIHVzZXIgZG9lcyBub3QgaGF2ZQorICBkaXJlY3RvcnktbGlzdGlu ZyBhY2Nlc3MgdG8gdGhlIGxvY2tmaWxlIGRpcmVjdG9yeSwgdGhpcyB3aWxsIHJlc3VsdCBpbgor ICBzb21ldGhpbmcgbGlrZSAibm90IGZvdW5kIi4gIFRoYXQncyB3aHkgd2UgdHJ5IHRoaXMgb25s eSBhcyBhIGxhc3QgcmVzb3J0LgorKi8KKwkJICAgIGlmIChwKSB7CQkvKiBJZiB3ZSBnb3QgdGhl IHNwYWNlLi4uICovCisJCQlja21ha21zZyhwLHgsRElSQ01ELCIgIixmbGZuYW0sTlVMTCk7CisJ CQl6c3lzY21kKHApOwkvKiBHZXQgbGlzdGluZy4gKi8KKwkJCWlmIChwKSB7CS8qIGZyZWUgdGhl IHNwYWNlICovCisJCQkgICAgZnJlZShwKTsKKwkJCSAgICBwID0gTlVMTDsKKwkJCX0KKwkJICAg IH0KKwkJfQorI2VuZGlmIC8qIE5PVVVDUCAqLworCQlyZXR1cm4oLTUpOwkJLyogQ29kZSBmb3Ig ZGV2aWNlIGluIHVzZSAqLworCSAgICB9IGVsc2UgcmV0dXJuKC0zKTsJCS8qIEFjY2VzcyBkZW5p ZWQgKi8KKyAgICAgICAgfSBlbHNlIGxrZiA9IDE7CisgICAgfQorI2Vsc2UgIC8qIE9QRU5GSVJT VCAqLworCisvKgorICAyNyBPY3QgMjAwMTogTmV3IHNpbXBsZXIgY29kZSB0aGF0IGdldHMgdGhl IGxvY2sgZmlyc3QgYW5kIHRoZW4gb3BlbnMgdGhlCisgIGRldmljZSwgd2hpY2ggZWxpbWluYXRl cyB0aGUgcmFjZSBjb25kaXRpb24uICBUaGUgZG93bnNpZGUgaXMgeW91IGNhbiBubworICBsb25n ZXIgc2F5ICJzZXQgbGluZSAvZGV2L3R0eXAwIiBvciB3aGF0ZXZlciwgd2hlcmUgL2Rldi90dHlw MCBpcyB5b3VyIGxvZ2luCisgIHRlcm1pbmFsLCB3aXRob3V0IHRyeWluZyB0byBjcmVhdGUgYSBs b2NrZmlsZSwgd2hpY2ggZmFpbHMgaWYgQy1LZXJtaXQgbGFja3MKKyAgcHJpdnMsIGFuZCBpZiBp dCBzdWNjZWVkcywgaXQgaGFzIGNyZWF0ZWQgYSBsb2NrZmlsZSB3aGVyZSBpdCBkaWRuJ3QgY3Jl YXRlCisgIG9uZSBiZWZvcmUuCisqLworICAgIHhsb2NhbCA9ICpsY2w7CQkJLyogSXMgdGhlIGRl dmljZSBteSBsb2dpbiB0ZXJtaW5hbD8gKi8KKyAgICBkZWJ1ZyhGMTExLCJ0dG9wZW4geGxvY2Fs IiwiQSIseGxvY2FsKTsKKyAgICBmbmFtID0gdHRuYW1lOworICAgIGlmIChzdHJjbXAodHRuYW1l LENUVE5BTSkgJiYgbmV0Y29ubiA9PSAwKSB7CisJaWYgKHpmbnFmcCh0dG5hbWUsREVWTkFNTEVO KzEsZnVsbG5hbWUpKSB7CisJICAgIGlmICgoaW50KXN0cmxlbihmdWxsbmFtZSkgPiAwKQorCSAg ICAgIGZuYW0gPSBmdWxsbmFtZTsKKwl9CisgICAgfQorICAgIGRlYnVnKEYxMTAsInR0b3BlbiBm bmFtIixmbmFtLDApOworICAgIGlmICh4bG9jYWwgPCAwKSB7CisJeGxvY2FsID0gKHN0cmNtcChm bmFtLENUVE5BTSkgIT0gMCk7CisgICAgfQorICAgIGRlYnVnKEYxMTEsInR0b3BlbiB4bG9jYWwi LCJCIix4bG9jYWwpOworCisgICAgbGtmID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogTm8gbG9jayB5ZXQgKi8KKyAgICBpZiAoeGxvY2FsID4gMCkgewkJCS8qIElmIG5vdC4uLiAq LworCWludCB4eDsgaW50IHhwaWQ7CisJeHggPSB0dGxvY2soZm5hbSk7CQkvKiBUcnkgdG8gbG9j ayBpdC4gKi8KKwlkZWJ1ZyhGMTAxLCJ0dG9wZW4gdHRsb2NrIiwiIix4eCk7CisgICAgICAgIGlm ICh4eCA8IDApIHsJCQkvKiBDYW4ndCBsb2NrIGl0LiAqLworICAgICAgICAgICAgZGVidWcoRjEx MSwidHRvcGVuIHR0bG9jayBmYWlscyIsZm5hbSx4eCk7CisJICAgIGlmICh4eCA9PSAtMikgewkJ LyogSWYgbG9ja2ZpbGUgc2F5cyBkZXZpY2UgaW4gdXNlLCAqLworI2lmbmRlZiBOT1VVQ1AKKwkJ ZGVidWcoRjExMSwidHRvcGVuIHJlYWRpbmcgbG9ja2ZpbGUgcGlkIixmbGZuYW0seHgpOworCQl4 cGlkID0gdHRycGlkKGZsZm5hbSk7CS8qIFRyeSB0byByZWFkIHBpZCBmcm9tIGxvY2tmaWxlICov CisJCWlmICh4cGlkID4gLTEpIHsJLyogSWYgd2UgZ290IGEgcGlkICovCisgICAgICAgICAgICAg ICAgICAgIGlmICghcXVpZXQpCisJCSAgICAgIHByaW50ZigiTG9ja2VkIGJ5IHByb2Nlc3MgJWRc biIseHBpZCk7IC8qIHRlbGwgdGhlbS4gKi8KKwkJICAgIGNrc3RybmNweShsb2NrcGlkLGNraXRv YSh4cGlkKSwxNik7CisJCSAgICBkZWJ1ZyhGMTEwLCJ0dG9wZW4gbG9ja3BpZCIsbG9ja3BpZCww KTsKKyNpZm5kZWYgTk9QVVNICisJCX0gZWxzZSBpZiAoZmxmbmFtWzBdICYmICFub3B1c2gpIHsK KwkJICAgIGV4dGVybiBjaGFyICpESVJDTUQ7CisJCSAgICBjaGFyICpwID0gTlVMTDsKKwkJICAg IGludCB4OworCQkgICAgeCA9IChpbnQpc3RybGVuKGZsZm5hbSkgKyAoaW50KXN0cmxlbihESVJD TUQpICsgMjsKKwkJICAgIHAgPSBtYWxsb2MoeCk7CS8qIFByaW50IGEgZGlyZWN0b3J5IGxpc3Rp bmcuICovCisvKgorICBOb3RlOiBwcml2X29uKCkgd29uJ3QgaGVscCBoZXJlLCBiZWNhdXNlIHdl IGRvIG5vdCBwYXNzIHByaXZzIGFsb25nIHRvCisgIHRvIGluZmVyaW9yIHByb2Nlc3NlcywgaW4g dGhpcyBjYXNlIGxzLiAgU28gaWYgdGhlIHJlYWwgdXNlciBkb2VzIG5vdCBoYXZlCisgIGRpcmVj dG9yeS1saXN0aW5nIGFjY2VzcyB0byB0aGUgbG9ja2ZpbGUgZGlyZWN0b3J5LCB0aGlzIHdpbGwg cmVzdWx0IGluCisgIHNvbWV0aGluZyBsaWtlICJub3QgZm91bmQiLiAgVGhhdCdzIHdoeSB3ZSB0 cnkgdGhpcyBvbmx5IGFzIGEgbGFzdCByZXNvcnQuCisqLworCQkgICAgaWYgKHApIHsJCS8qIElm IHdlIGdvdCB0aGUgc3BhY2UuLi4gKi8KKwkJCWNrbWFrbXNnKHAseCxESVJDTUQsIiAiLGZsZm5h bSxOVUxMKTsKKwkJCXpzeXNjbWQocCk7CS8qIEdldCBsaXN0aW5nLiAqLworCQkJaWYgKHApIHsJ LyogZnJlZSB0aGUgc3BhY2UgKi8KKwkJCSAgICBmcmVlKHApOworCQkJICAgIHAgPSBOVUxMOwor CQkJfQorCQkgICAgfQorI2VuZGlmIC8qIE5PUFVTSCAqLworCQl9CisjZW5kaWYgLyogTk9VVUNQ ICovCisJCXJldHVybigtNSk7CQkvKiBDb2RlIGZvciBkZXZpY2UgaW4gdXNlICovCisJICAgIH0g ZWxzZSByZXR1cm4oLTMpOwkJLyogQWNjZXNzIGRlbmllZCAqLworICAgICAgICB9IGVsc2UgbGtm ID0gMTsKKyAgICB9CisgICAgLyogSGF2ZSBsb2NrIC0tIG5vdyBpdCdzIHNhZmUgdG8gb3BlbiB0 aGUgZGV2aWNlICovCisKKyAgICBkZWJ1ZyhGMTAxLCJ0dG9wZW4gbGtmIiwiIixsa2YpOworICAg IGRlYnVnKEYxMDEsInR0b3BlbiB0aW1vIiwiIix0aW1vKTsKKworICAgIHR0b3RtbyA9IDA7CQkJ CS8qIEZsYWcgbm8gdGltZW91dCAqLworICAgIGlmICh0aW1vID4gMCkgeworCWludCB4eDsKKwlz YXZhbCA9IHNpZ25hbChTSUdBTFJNLHRpbWVyaCk7CS8qIFRpbWVkLCBzZXQgdXAgdGltZXIuICov CisJeHggPSBhbGFybSh0aW1vKTsJCS8qIFRpbWVkIG9wZW4oKSAqLworCWRlYnVnKEYxMDEsInR0 b3BlbiBhbGFybSIsIiIseHgpOworCWlmICgKKyNpZmRlZiBDS19QT1NJWF9TSUcKKwkgICAgc2ln c2V0am1wKHNqYnVmLDEpCisjZWxzZQorCSAgICBzZXRqbXAoc2pidWYpCisjZW5kaWYgLyogQ0tf UE9TSVhfU0lHICovCisJICAgICkgeworCSAgICB0dG90bW8gPSAxOwkJCS8qIEZsYWcgdGltZW91 dC4gKi8KKwl9IGVsc2UgeworCSAgICB0dHlmZCA9IGRvX29wZW4oZm5hbSk7CisJfQorCXR0aW1v ZmYoKTsKKwlkZWJ1ZyhGMTExLCJ0dG9wZW4gdGltZWQgdHR5ZmQiLGZuYW0sdHR5ZmQpOworICAg IH0gZWxzZSB7CisJZXJybm8gPSAwOworCXR0eWZkID0gZG9fb3BlbihmbmFtKTsKKwlkZWJ1ZyhG MTExLCJ0dG9wZW4gdW50aW1lZCB0dHlmZCIsZm5hbSx0dHlmZCk7CisgICAgfQorICAgIGlmICh0 dHlmZCA8IDApIHsJCQkvKiBJZiBjb3VsZG4ndCBvcGVuLCBmYWlsLiAqLworCWRlYnVnKEYxMTEs InR0b3BlbiBlcnJubyIsZm5hbSxlcnJubyk7CisJZGVidWcoRjExMSwidHRvcGVuIHhsb2NhbCIs IkMiLHhsb2NhbCk7CisJaWYgKHhsb2NhbCA9PSAwKSB7CisJICAgIGRlYnVnKEYxMDAsInR0b3Bl biBzdWJzdGl0dXRpbmcgMCIsIiIsMCk7CisJICAgIHR0eWZkID0gMDsKKwl9IGVsc2UgeworCSAg ICBpZiAoZXJybm8gPiAwICYmICFxdWlldCkgeworCSAgICAgICAgZGVidWcoRjExMSwidHRvcGVu IHBlcnJvciIsZm5hbSxlcnJubyk7CisJCXBlcnJvcihmbmFtKTsJCS8qIFByaW50IG1lc3NhZ2Ug Ki8KKwkgICAgfQorCSAgICBpZiAodHR1bmxjaygpKSAgICAgICAgICAgICAgICAgIC8qIFJlbGVh c2UgdGhlIGxvY2sgZmlsZSAqLworCSAgICAgIGZwcmludGYoc3RkZXJyLCJXYXJuaW5nLCBwcm9i bGVtIHJlbGVhc2luZyBsb2NrXHJcbiIpOworCX0KKyAgICB9CisKKyAgICBpZiAodHR5ZmQgPCAw KSB7CQkJLyogdHR5ZmQgaXMgc3RpbGwgPCAwPyAqLworI2lmZGVmIEFUVDczMDAKKwlpZiAoYXR0 bW9kZW0gJiBET0dFVFkpCQkvKiB3YXMgZ2V0dHkoMW0pIHJ1bm5pbmcgYmVmb3JlIHVzPyAqLwor CSAgb25nZXR0eSh0dG5tc3YpOwkJLyogeWVzLCByZXN0YXJ0IG9uIHR0eSBsaW5lICovCisJYXR0 bW9kZW0gJj0gfkRPR0VUWTsJCS8qIG5vIHBob25lIGluIHVzZSwgZ2V0dHkgcmVzdG9yZWQgKi8K KyNlbHNlCisjaWZkZWYgQUNVQ05UUkwKKyAgICAgICAgLyogU2hvdWxkIHB1dCBjYWxsIHRvIHBy aXZfb24oKSBoZXJlLCBidXQgdGhhdCB3b3VsZCBiZSByaXNreSEgKi8KKwlhY3VjbnRybCgiZW5h YmxlIixmbmFtKTsJLyogYWN1Y250cmwoKSBwcm9ncmFtLiAqLworCS8qIGFuZCBwcml2X29mZigp IGhlcmUuLi4gKi8KKyNlbmRpZiAvKiBBQ1VOVFJMICovCisjZW5kaWYgLyogQVRUNzMwMCAqLwor CisJc2lnbmFsKFNJR0lOVCxvY2N0KTsJCS8qIFB1dCBvbGQgQ3RybC1DIHRyYXAgYmFjay4gKi8K KwlpZiAoZXJybm8gPT0gRUFDQ0VTKSB7CQkvKiBEZXZpY2UgaXMgcHJvdGVjdGVkIGFnYWluc3Qg dXNlciAqLworCSAgICBkZWJ1ZyhGMTEwLCJ0dG9wZW4gRUFDQ0VTUyIsZm5hbSwwKTsgLyogUmV0 dXJuIC00ICovCisJICAgIHJldHVybigtNCk7CisJfSBlbHNlIHJldHVybih0dG90bW8gPyAtMiA6 IC0xKTsgLyogT3RoZXJ3aXNlIC0yIGlmIHRpbWVvdXQsIG9yIC0xICovCisgICAgfQorCisvKiBN YWtlIHN1cmUgaXQncyBhIHJlYWwgdHR5LiAqLworCisjaWZkZWYgUGxhbjkKKyAgICAvKiB0YWtl IHRoaXMgb3Bwb3J0dW5pdHkgdG8gb3BlbiB0aGUgY29udHJvbCBjaGFubmVsICovCisgICAgaWYg KHA5b3BlbnR0eWN0bChmbmFtKSA8IDApICAgICAgIAorI2Vsc2UKKyAgICAgIGlmICghdHRmZGZs ZyAmJiAhaXNhdHR5KHR0eWZkKSAmJiBzdHJjbXAoZm5hbSwiL2Rldi9udWxsIikpCisjZW5kaWYg LyogUGxhbjkgKi8KKwl7CisJICAgIGZwcmludGYoc3RkZXJyLCIlcyBpcyBub3QgYSB0ZXJtaW5h bCBkZXZpY2VcbiIsZm5hbSk7CisJICAgIGRlYnVnKEYxMTEsInR0b3BlbiBub3QgYSB0dHkiLGZu YW0sZXJybm8pOworCSAgICBpZiAodHR1bmxjaygpKQkJLyogUmVsZWFzZSB0aGUgbG9jayBmaWxl ICovCisJICAgICAgZnByaW50ZihzdGRlcnIsIldhcm5pbmcsIHByb2JsZW0gcmVsZWFzaW5nIGxv Y2tcclxuIik7CisJICAgIGNsb3NlKHR0eWZkKTsKKwkgICAgdHR5ZmQgPSAtMTsKKwkgICAgd2Fz Y2xvc2VkID0gMTsKKwkgICAgc2lnbmFsKFNJR0lOVCxvY2N0KTsKKwkgICAgcmV0dXJuKC0xKTsK Kwl9CisKKyNpZmRlZiBhZWdpcworICAgIC8qCisgICAgICBBcG9sbG8gQyBydW50aW1lIGNsYWlt cyB0aGF0IGNvbnNvbGUgcGFkcyBhcmUgdHR5IGRldmljZXMsIHdoaWNoCisgICAgICBpcyByZWFz b25hYmxlLCBidXQgdGhleSBhcmVuJ3QgYW55IGdvb2QgZm9yIHBhY2tldCB0cmFuc2Zlci4KKyAg ICAqLworICAgIGlvc18kaW5xX3R5cGVfdWlkKChzaG9ydCl0dHlmZCwgdHR5dWlkLCBzdCk7Cisg ICAgaWYgKHN0LmFsbCAhPSBzdGF0dXNfJG9rKSB7CisJZnByaW50ZihzdGRlcnIsICJwcm9ibGVt IGdldHRpbmcgdHR5IG9iamVjdCB0eXBlOiAiKTsKKwllcnJvcl8kcHJpbnQoc3QpOworICAgIH0g ZWxzZSBpZiAodHR5dWlkICE9IHNpb18kdWlkKSB7CS8qIFJlamVjdCBub24tU0lPIGxpbmVzICov CisJY2xvc2UodHR5ZmQpOyB0dHlmZCA9IC0xOworCXdhc2Nsb3NlZCA9IDE7CisJZXJybm8gPSBF Tk9UVFk7IHBlcnJvcihmbmFtKTsKKwlzaWduYWwoU0lHSU5ULG9jY3QpOworCXJldHVybigtMSk7 CisgICAgfQorI2VuZGlmIC8qIGFlZ2lzICovCisKKyAgICBzaWdpbnRfaWduID0gKG9jY3QgPT0g U0lHX0lHTikgPyAxIDogMDsKKworICAgIGNrc3RybmNweSh0dG5tc3YsdHRuYW1lLERFVk5BTUxF Tik7CS8qIEtlZXAgY29weSBvZiBuYW1lIGxvY2FsbHkuICovCisKKy8qIENhbGxlciB3YW50cyB1 cyB0byBmaWd1cmUgb3V0IGlmIGxpbmUgaXMgY29udHJvbGxpbmcgdHR5ICovCisKKyAgICBpZiAo KmxjbCA8IDApIHsKKwljaGFyICogczsKKyAgICAgICAgaWYgKHN0cmNtcChmbmFtLENUVE5BTSkg PT0gMCkgeyAvKiAiL2Rldi90dHkiIGFsd2F5cyByZW1vdGUgKi8KKyAgICAgICAgICAgIHhsb2Nh bCA9IDA7CisJICAgIGRlYnVnKEYxMTEsInR0b3BlbiBmbmFtPUNUVE5BTSIsZm5hbSx4bG9jYWwp OworICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcChmbmFtLGN0dG5hbSkgPT0gMCkgeworICAgICAg ICAgICAgeGxvY2FsID0gMDsKKwkgICAgZGVidWcoRjExMSwidHRvcGVuIGZuYW09Y3R0bmFtIixm bmFtLHhsb2NhbCk7CisJfSBlbHNlIGlmIChjdHRuYW1bMF0pIHsKKyNpZmRlZiBCRUJPWF9EUjcK KyAgICAgICAgICAgIHMgPSB0dG5tc3Y7CQkJLyogdHR5bmFtZSgpIGlzIGJyb2tlbiAqLworI2Vs c2UKKyAgICAgICAgICAgIHMgPSB0dHluYW1lKHR0eWZkKTsgICAgICAgICAvKiBHZXQgcmVhbCBu YW1lIG9mIHR0bmFtZS4gKi8KKyNlbmRpZiAvKiBCRUJPWF9EUjcgKi8KKwkgICAgaWYgKCFzKSBz ID0gIiI7CisJICAgIGlmICgqcykKKwkgICAgICB4bG9jYWwgPSAoKHN0cm5jbXAocyxjdHRuYW0s REVWTkFNTEVOKSA9PSAwKSA/IDAgOiAxKTsKKwkgICAgZWxzZQorCSAgICAgIHhsb2NhbCA9IDE7 CisgICAgICAgICAgICBkZWJ1ZyhGMTExLCJ0dG9wZW4gdHR5bmFtZSh0dHlmZCkgeGxvY2FsIixz LHhsb2NhbCk7CisgICAgICAgIH0KKyAgICB9CisKKyNpZm5kZWYgTk9GRFpFUk8KKy8qIE5vdGUs IHRoZSBmb2xsb3dpbmcgY29kZSB3YXMgYWRkZWQgc28gdGhhdCBVbml4ICJpZGxlLWxpbmUiIHNu b29wZXJzICovCisvKiB3b3VsZCBub3QgdGhpbmsgS2VybWl0IHdhcyBpZGxlIHdoZW4gaXQgd2Fz IHRyYW5zZmVycmluZyBmaWxlcywgYW5kICovCisvKiBtYXliZSBsb2cgcGVvcGxlIG91dC4gKi8K KyAgICBpZiAoeGxvY2FsID09IDApIHsJCQkvKiBSZW1vdGUgbW9kZSAqLworCWlmIChmZGZsYWcg PT0gMCkgewkJLyogU3RhbmRhcmQgaS9vIGlzIG5vdCByZWRpcmVjdGVkICovCisJICAgIGRlYnVn KEYxMDAsInR0b3BlbiBzZXR0aW5nIHR0eWZkID0gMCIsIiIsMCk7CisjaWZkZWYgTFlOWE9TCisJ ICAgIC8qIE9uIEx5bnggT1MsIGZkIDAgaXMgb3BlbiBmb3IgcmVhZCBvbmx5LiAqLworCSAgICBk dXAyKHR0eWZkLDApOworI2VuZGlmIC8qIExZTlhPUyAqLworCSAgICBjbG9zZSh0dHlmZCk7CQkv KiBVc2UgZmlsZSBkZXNjcmlwdG9yIDAgKi8KKwkgICAgdHR5ZmQgPSAwOworCX0gZWxzZSB7CQkJ LyogU3RhbmRhcmQgaS9vIGlzIHJlZGlyZWN0ZWQgKi8KKwkgICAgZGVidWcoRjEwMSwidHRvcGVu IHN0ZGlvIHJlZGlyZWN0ZWQiLCIiLHR0eWZkKTsKKwl9CisgICAgfQorI2VuZGlmIC8qIE5PRkRa RVJPICovCisjZW5kaWYgLyogT1BFTkZJUlNUICovCisKKy8qIEdvdCB0aGUgbGluZSwgbm93IHNl dCB0aGUgZGVzaXJlZCB2YWx1ZSBmb3IgbG9jYWwuICovCisKKyAgICBpZiAoKmxjbCAhPSAwKSAq bGNsID0geGxvY2FsOworCisvKiBTb21lIHNwZWNpYWwgc3R1ZmYgZm9yIHY3Li4uICovCisKKyNp ZmRlZiAgVjcKKyNpZm5kZWYgTUlOSVgKKyAgICBpZiAoa21lbVtUVFldIDwgMCkgewkJLyogIElm IG9wZW4sIHRoZW4gc2tpcCB0aGlzLiAgKi8KKwlxYWRkcltUVFldID0gaW5pdHJhd3EodHR5ZmQp OyAgIC8qIEluaXQgdGhlIHF1ZXVlLiAqLworCWlmICgoa21lbVtUVFldID0gb3BlbigiL2Rldi9r bWVtIiwgMCkpIDwgMCkgeworCSAgICBmcHJpbnRmKHN0ZGVyciwgIkNhbid0IHJlYWQgL2Rldi9r bWVtIGluIHR0b3Blbi5cbiIpOworCSAgICBwZXJyb3IoIi9kZXYva21lbSIpOworCSAgICBleGl0 KDEpOworCX0KKyAgICB9CisjZW5kaWYgLyogIU1JTklYICovCisjZW5kaWYgLyogVjcgKi8KKwor LyogTm8gZmFpbHVyZSByZXR1cm5zIGFmdGVyIHRoaXMgcG9pbnQgKi8KKworI2lmZGVmIHVsdHJp eAorICAgIGlvY3RsKHR0eWZkLCBUSU9DTU9ERU0sICZ0ZW1wKTsKKyNpZmRlZiBUSU9DU0lOVVNF CisgICAgaWYgKHhsb2NhbCAmJiBpb2N0bCh0dHlmZCwgVElPQ1NJTlVTRSwgTlVMTCkgPCAwKSB7 CisJaWYgKCFxdWlldCkKKwkgIHBlcnJvcihmbmFtKTsKKyAgICB9CisjZW5kaWYgLyogVElPQ1NJ TlVTRSAqLworI2VuZGlmIC8qIHVsdHJpeCAqLworCisvKiBHZXQgdHR5IGRldmljZSBzZXR0aW5n cyAgKi8KKworI2lmZGVmIEJTRDQ0T1JQT1NJWAkJCS8qIFBPU0lYICovCisgICAgdGNnZXRhdHRy KHR0eWZkLCZ0dG9sZCk7CisgICAgZGVidWcoRjEwMSwidHRvcGVuIHRjZ2V0YXR0ciB0dG9sZC5j X2xmbGFnIiwiIix0dG9sZC5jX2xmbGFnKTsKKyAgICB0Y2dldGF0dHIodHR5ZmQsJnR0cmF3KTsK KyAgICBkZWJ1ZyhGMTAxLCJ0dG9wZW4gdGNnZXRhdHRyIHR0cmF3LmNfbGZsYWciLCIiLHR0cmF3 LmNfbGZsYWcpOworICAgIHRjZ2V0YXR0cih0dHlmZCwmdHR0dnQpOworICAgIGRlYnVnKEYxMDEs InR0b3BlbiB0Y2dldGF0dHIgdHR0dnQuY19sZmxhZyIsIiIsdHR0dnQuY19sZmxhZyk7CisjZWxz ZQkJCQkJLyogQlNELCBWNywgYW5kIGFsbCBvdGhlcnMgKi8KKyNpZmRlZiBBVFRTVgkJCQkvKiBB VCZUIFVOSVggKi8KKyAgICBpb2N0bCh0dHlmZCxUQ0dFVEEsJnR0b2xkKTsKKyAgICBkZWJ1ZyhG MTAxLCJ0dG9wZW4gaW9jdGwgVENHRVRBIHR0b2xkLmNfbGZsYWciLCIiLHR0b2xkLmNfbGZsYWcp OworICAgIGlvY3RsKHR0eWZkLFRDR0VUQSwmdHRyYXcpOworICAgIGlvY3RsKHR0eWZkLFRDR0VU QSwmdHR0dnQpOworI2Vsc2UKKyNpZmRlZiBCRUxMVjEwCisgICAgaW9jdGwodHR5ZmQsVElPQ0dF VFAsJnR0b2xkKTsKKyAgICBkZWJ1ZyhGMTAxLCJ0dG9wZW4gQkVMTFYxMCB0dG9sZC5zZ19mbGFn cyIsIiIsdHRvbGQuc2dfZmxhZ3MpOworICAgIGlvY3RsKHR0eWZkLFRJT0NHREVWLCZ0ZG9sZCk7 CisgICAgZGVidWcoRjEwMSwidHRvcGVuIEJFTExWMTAgdGRvbGQuZmxhZ3MiLCIiLHRkb2xkLmZs YWdzKTsKKyNlbHNlCisgICAgZ3R0eSh0dHlmZCwmdHRvbGQpOworICAgIGRlYnVnKEYxMDEsInR0 b3BlbiBndHR5IHR0b2xkLnNnX2ZsYWdzIiwiIix0dG9sZC5zZ19mbGFncyk7CisjZW5kaWYgLyog QkVMTFYxMCAqLworCisjaWZkZWYgc29ueV9uZXdzCQkJLyogU29ueSBORVdTICovCisgICAgaWYg KGlvY3RsKHR0eWZkLFRJT0NLR0VULCZrbV9leHQpIDwgMCkgeyAvKiBHZXQgY29uc29sZSBLYW5q aSBtb2RlICovCisJcGVycm9yKCJ0dG9wZW4gZXJyb3IgZ2V0dGluZyBLYW5qaSBtb2RlIik7CisJ ZGVidWcoRjEwMSwidHRvcGVuIGVycm9yIGdldHRpbmcgS2FuamkgbW9kZSIsIiIsMCk7CisJa21f ZXh0ID0gLTE7CQkJLyogTWFrZSBzdXJlIHRoaXMgc3RheXMgdW5kZWZpbmVkLiAqLworICAgIH0K KyNlbmRpZiAvKiBzb255X25ld3MgKi8KKworI2lmZGVmIFRJT0NHRVRDCisgICAgZGVidWcoRjEw MCwidHRvcGVuIFRJT0NHRVRDIiwiIiwwKTsKKyAgICB0Y2hhcmYgPSAwOwkJCQkvKiBJbiByZW1v dGUgbW9kZSwgYWxzbyBnZXQgKi8KKyAgICBpZiAoeGxvY2FsID09IDApIHsJCQkvKiBzcGVjaWFs IGNoYXJhY3RlcnMgKi8KKwlpZiAoaW9jdGwodHR5ZmQsVElPQ0dFVEMsJnRjaG9sZCkgPCAwKSB7 CisJICAgIGRlYnVnKEYxMDAsInR0b3BlbiBUSU9DR0VUQyBmYWlsZWQiLCIiLDApOworCX0gZWxz ZSB7CisJICAgIHRjaGFyZiA9IDE7CQkJLyogSXQgd29ya2VkLiAqLworCSAgICBpb2N0bCh0dHlm ZCxUSU9DR0VUQywmdGNobm9pKTsgLyogR2V0IGFub3RoZXIgY29weSAqLworCSAgICBkZWJ1ZyhG MTAwLCJ0dG9wZW4gVElPQ0dFVEMgb2siLCIiLDApOworCX0KKyAgICB9CisjZWxzZQorICAgIGRl YnVnKEYxMDAsInR0b3BlbiBUSU9DR0VUQyBub3QgZGVmaW5lZCIsIiIsMCk7CisjZW5kaWYgLyog VElPQ0dFVEMgKi8KKworI2lmZGVmIFRJT0NHTFRDCisgICAgZGVidWcoRjEwMCwidHRvcGVuIFRJ T0NHTFRDIiwiIiwwKTsKKyAgICBsdGNoYXJmID0gMDsJCQkvKiBJbiByZW1vdGUgbW9kZSwgYWxz byBnZXQgKi8KKyAgICBpZiAoeGxvY2FsID09IDApIHsJCQkvKiBsb2NhbCBzcGVjaWFsIGNoYXJh Y3RlcnMgKi8KKwlpZiAoaW9jdGwodHR5ZmQsVElPQ0dMVEMsJmx0Y2hvbGQpIDwgMCkgeworCSAg ICBkZWJ1ZyhGMTAwLCJ0dG9wZW4gVElPQ0dMVEMgZmFpbGVkIiwiIiwwKTsKKwl9IGVsc2Ugewor CSAgICBsdGNoYXJmID0gMTsJCS8qIEl0IHdvcmtlZC4gKi8KKwkgICAgaW9jdGwodHR5ZmQsVElP Q0dMVEMsJmx0Y2hub2kpOyAvKiBHZXQgYW5vdGhlciBjb3B5ICovCisJICAgIGRlYnVnKEYxMDAs InR0b3BlbiBUSU9DR0xUQyBvayIsIiIsMCk7CisJfQorICAgIH0KKyNlbHNlCisgICAgZGVidWco RjEwMCwidHRvcGVuIFRJT0NHTFRDIG5vdCBkZWZpbmVkIiwiIiwwKTsKKyNlbmRpZiAvKiBUSU9D R0xUQyAqLworCisjaWZkZWYgVElPQ0xHRVQKKyAgICBkZWJ1ZyhGMTAwLCJ0dG9wZW4gVElPQ0xH RVQiLCIiLDApOworICAgIGxtb2RlZiA9IDA7CisgICAgaWYgKGlvY3RsKHR0eWZkLFRJT0NMR0VU LCZsbW9kZSkgPCAwKSB7CisJZGVidWcoRjEwMCwidHRvcGVuIFRJT0NMR0VUIGZhaWxlZCIsIiIs MCk7CisgICAgfSBlbHNlIHsKKwlsbW9kZWYgPSAxOworCWRlYnVnKEYxMDAsInR0b3BlbiBUSU9D TEdFVCBvayIsIiIsMCk7CisgICAgfQorI2VuZGlmIC8qIFRJT0NMR0VUICovCisKKyNpZmRlZiBC RUxMVjEwCisgICAgaW9jdGwodHR5ZmQsVElPQ0dFVFAsJnR0cmF3KTsKKyAgICBpb2N0bCh0dHlm ZCxUSU9DR0VUUCwmdHR0dnQpOworI2Vsc2UKKyAgICBndHR5KHR0eWZkLCZ0dHJhdyk7ICAgICAg ICAgICAgICAgICAvKiBBbmQgYSBjb3B5IG9mIGl0IGZvciBwYWNrZXRzKi8KKyAgICBndHR5KHR0 eWZkLCZ0dHR2dCk7ICAgICAgICAgICAgICAgICAvKiBBbmQgb25lIGZvciB2aXJ0dWFsIHR0eSBz ZXJ2aWNlICovCisjZW5kaWYgLyogQkVMTFYxMCAqLworCisjZW5kaWYgLyogQVRUU1YgKi8KKyNl bmRpZiAvKiBCU0Q0NE9SUE9TSVggKi8KKworLyogU2VjdGlvbiBmb3IgY2hhbmdpbmcgbGluZSBk aXNjaXBsaW5lLiAgSXQncyByZXN0b3JlZCBpbiB0dHJlcygpLiAqLworCisjaWZkZWYgQUlYUlMK KyNpZm5kZWYgQUlYNDEKKyAgICB7IHVuaW9uIHR4bmFtZSBsZF9uYW1lOyBpbnQgbGRfaWR4ID0g MDsKKyAgICAgIHR0bGQgPSAwOworICAgICAgICBkbyB7CisgIAkgIGxkX25hbWUudHhfd2hpY2gg PSBsZF9pZHgrKzsKKyAgCSAgaW9jdGwodHR5ZmQsIFRYR0VUQ0QsICZsZF9uYW1lKTsKKwkgIGlm ICghc3RybmNtcChsZF9uYW1lLnR4X25hbWUsICJydHMiLCAzKSkKKyAgCSAgICB0dGxkIHw9IDE7 CisgICAgICAgIH0gd2hpbGUgKCpsZF9uYW1lLnR4X25hbWUpOworICAgICAgICBkZWJ1ZyhGMTAx LCJBSVggbGluZSBkaXNjaXBsaW5lIiwiIix0dGxkKTsKKyAgICAgIH0KKyNlbmRpZiAvKiBBSVg0 MSAqLworI2VuZGlmIC8qIEFJWFJTICovCisKKyNpZmRlZiBCU0Q0MQorLyogRm9yIDQuMUJTRCBv bmx5LCBmb3JjZSAib2xkIiB0dHkgZHJpdmVyLCBuZXcgb25lIGJvdGNoZXMgVEFOREVNLiAqLwor ICAgIHsgaW50IGs7CisgICAgICBpb2N0bCh0dHlmZCwgVElPQ0dFVEQsICZ0dGxkKTsJLyogR2V0 IGFuZCBzYXZlIGxpbmUgZGlzY2lwbGluZSAqLworICAgICAgZGVidWcoRjEwMSwiNC4xYnNkIGxp bmUgZGlzY2lwbGluZSIsIiIsdHRsZCk7CisgICAgICBrID0gT1RUWURJU0M7CQkJLyogU3dpdGNo IHRvICJvbGQiIGRpc2NpcGxpbmUgKi8KKyAgICAgIGsgPSBpb2N0bCh0dHlmZCwgVElPQ1NFVEQs ICZrKTsKKyAgICAgIGRlYnVnKEYxMDEsIjQuMWJzZCB0aW9jc2V0ZCIsIiIsayk7CisgICAgfQor I2VuZGlmIC8qIEJTRDQxICovCisKKyNpZmRlZiBhZWdpcworICAgIC8qIFRoaXMgd2FzIHByZXZp b3VzbHkgZG9uZSBiZWZvcmUgdGhlIGxhc3QgdHdvIFRDR0VUQSBvciBndHR5IGFib3ZlLAorICAg ICAqIGluIGJvdGggdGhlIEFUVFNWIGFuZCBub3QtQVRUU1YgY2FzZS4gIElmIGl0IGlzIG5vdCBv a2F5IHRvIGhhdmUgb25seQorICAgICAqIG9uZSBjb3B5IGlmIGl0IGhlcmUgaW5zdGVhZCwgZ2l2 ZSB1cyBhIHNob3V0IQorICAgICAqLworICAgIHNpb18kY29udHJvbCgoc2hvcnQpdHR5ZmQsIHNp b18kcmF3X25sLCBmYWxzZSwgc3QpOworICAgIGlmICh4bG9jYWwpIHsgICAgICAgLyogaWdub3Jl IGJyZWFrcyBmcm9tIGxvY2FsIGxpbmUgKi8KKyAgICAgICAgc2lvXyRjb250cm9sKChzaG9ydCl0 dHlmZCwgc2lvXyRpbnRfZW5hYmxlLCBmYWxzZSwgc3QpOworICAgICAgICBzaW9fJGNvbnRyb2wo KHNob3J0KXR0eWZkLCBzaW9fJHF1aXRfZW5hYmxlLCBmYWxzZSwgc3QpOworICAgIH0KKyNlbmRp ZiAvKiBhZWdpcyAqLworCisjaWZkZWYgVlhWRQorICAgIHR0cmF3LmNfbGluZSA9IDA7ICAgICAg ICAgICAgICAgICAgIC8qIFNUVFkgbGluZSAwIGZvciBWWC9WRSAqLworICAgIHR0dHZ0LmNfbGlu ZSA9IDA7ICAgICAgICAgICAgICAgICAgIC8qIFNUVFkgbGluZSAwIGZvciBWWC9WRSAqLworICAg IGlvY3RsKHR0eWZkLFRDU0VUQSwmdHRyYXcpOworI2VuZGlmIC8qIHZ4dmUgKi8KKworLyogSWYg T19OREVMQVkgd2FzIHVzZWQgZHVyaW5nIG9wZW4oKSwgdGhlbiByZW1vdmUgaXQgbm93LiAqLwor CisjaWZkZWYgT19OREVMQVkKKyAgICBkZWJ1ZyhGMTAwLCJ0dG9wZW4gT19OREVMQVkiLCIiLDAp OworICAgIGlmICh4bG9jYWwgPiAwKSB7CisgICAgICBpZiAoZmNudGwodHR5ZmQsIEZfR0VURkws IDApICYgT19OREVMQVkpIHsKKwlkZWJ1ZyhGMTAwLCJ0dG9wZW4gZmNudGwgT19OREVMQVkiLCIi LDApOworI2lmbmRlZiBhZWdpcworCWlmIChmY250bCh0dHlmZCxGX1NFVEZMLCBmY250bCh0dHlm ZCwgRl9HRVRGTCwgMCkgJiB+T19OREVMQVkpIDwgMCkgeworCSAgICBkZWJ1ZyhGMTAwLCJ0dG9w ZW4gZmNudGwgZmFpbHVyZSB0byB1bnNldCBPX05ERUxBWSIsIiIsMCk7CisJICAgIHBlcnJvcigi Q2FuJ3QgdW5zZXQgT19OREVMQVkiKTsKKwl9CisjZW5kaWYgLyogYWVnaXMgKi8KKwkvKiBTb21l IHN5c3RlbXMsIG5vdGFibHkgWGVuaXggKGRvbid0IGtub3cgaG93IGNvbW1vbiB0aGlzIGlzIGlu CisJICogb3RoZXIgc3lzdGVtcyksIG5lZWQgc3BlY2lhbCB0cmVhdG1lbnQgdG8gZ2V0IHJpZCBv ZiB0aGUgT19OREVMQVkKKwkgKiBiZWhhdmlvdXIgb24gcmVhZCgpIHdpdGggcmVzcGVjdCB0byBj YXJyaWVyIHByZXNlbmNlIChpLmUuIHJlYWQoKQorCSAqIHJldHVybmluZyAwIHdoZW4gY2Fycmll ciBhYnNlbnQpLCBldmVuIHRob3VnaCB0aGUgYWJvdmUgZmNudGwoKQorCSAqIGlzIGVub3VnaCB0 byBtYWtlIHJlYWQoKSB3YWl0IGZvciBpbnB1dCB3aGVuIGNhcnJpZXIgaXMgcHJlc2VudC4KKwkg KiBUaGlzIG1hZ2ljLCBpbiB0dXJuLCByZXF1aXJlcyBDTE9DQUwgZm9yIHdvcmtpbmcgd2hlbiB0 aGUgY2FycmllcgorCSAqIGlzIGFic2VudC4gQnV0IGlmIHhsb2NhbCA9PSAwLCBwcmVzdW1hYmx5 IHlvdSBhbHJlYWR5IGhhdmUgQ0xPQ0FMCisJICogb3IgeW91IGhhdmUgYSBjYXJyaWVyLCBvdGhl cndpc2UgeW91IHdvdWxkbid0IGJlIHJ1bm5pbmcgdGhpcy4KKwkgKi8KKwlkZWJ1ZyhGMTAxLCJ0 dG9wZW4geGxvY2FsIiwiIix4bG9jYWwpOworI2lmZGVmIEFUVFNWCisjaWZkZWYgQlNENDRPUlBP U0lYCisjaWZkZWYgQ09NTUVOVAkJCQkvKiAxMiBBdWcgMTk5NyAqLworI2lmZGVmIF9fYnNkaV9f CisJaWYgKHhsb2NhbCkKKwkgIHR0cmF3LmNfY2ZsYWcgfD0gQ0xPQ0FMOworI2Vsc2UKKyNpZmRl ZiBfX0ZyZWVCU0RfXworCWlmICh4bG9jYWwpCisJICB0dHJhdy5jX2NmbGFnIHw9IENMT0NBTDsK KyNlbmRpZiAvKiBfX0ZyZWVCU0RfXyAqLworI2VuZGlmIC8qIF9fYnNkaV9fICovCisjZWxzZSAv KiBOb3QgQ09NTUVOVCAqLworI2lmZGVmIENMT0NBTAorCWlmICh4bG9jYWwpCQkJLyogVW5zZXQg dGhpcyBpZiBpdCdzIGRlZmluZWQuICovCisJICB0dHJhdy5jX2NmbGFnIHw9IENMT0NBTDsKKyNl bmRpZiAvKiBDTE9DQUwgKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisJZGVidWcoRjEwMSwidHRv cGVuIEJTRDQ0T1JQT1NJWCBjYWxsaW5nIHRjc2V0YXR0ciIsIiIsVENTQURSQUlOKTsKKwlpZiAo dGNzZXRhdHRyKHR0eWZkLCBUQ1NBRFJBSU4sICZ0dHJhdykgPCAwKSB7CisJICAgIGRlYnVnKEYx MDAsInR0b3BlbiBQT1NJWCB0Y3NlYXR0ciBmYWlscyIsIiIsMCk7CisJICAgIHBlcnJvcigidGNz ZXRhdHRyIik7CisJfQorI2Vsc2UgLyogIUJTRDQ0T1JQT1NJWCAqLworCWlmICh4bG9jYWwpIHsK KwkgICAgdHRyYXcuY19jZmxhZyB8PSBDTE9DQUw7CisJICAgIGRlYnVnKEYxMDAsInR0b3BlbiBj YWxsaW5nIGlvY3RsKFRDU0VUQSkiLCIiLDApOworCSAgICBlcnJubyA9IDA7CisJICAgIGlmIChp b2N0bCh0dHlmZCwgVENTRVRBLCAmdHRyYXcpIDwgMCkgeworICAgICAgICAgICAgICAgIGRlYnVn KEYxMDEsInR0b3BlbiBpb2N0bChUQ1NFVEEpIGZhaWxzIiwiIixlcnJubyk7CisgICAgICAgICAg ICAgICAgcGVycm9yKCJpb2N0bChUQ1NFVEEpIik7CisgICAgICAgICAgICB9CisJfQorI2VuZGlm IC8qIEJTRDQ0T1JQT1NJWCAqLworI2VuZGlmIC8qIEFUVFNWICovCisjaWZuZGVmIE5PQ09URk1D IC8qID0gTk8gQ2xvc2UoT3BlbigpKSBUbyBGb3JjZSBNb2RlIENoYW5nZSAqLworLyogUmVwb3J0 ZWRseSBsZXRzIHV1Z2V0dHkgZ3JhYiB0aGUgZGV2aWNlIGluIFNDTyBVTklYIDMuMiAvIFhFTklY IDIuMyAqLworCWRlYnVnKEYxMDAsInR0b3BlbiBleGVjdXRpbmcgY2xvc2Uvb3BlbiIsIiIsMCk7 CisJY2xvc2UoIHByaXZfb3BuKGZuYW0sIE9fUkRXUikgKTsgLyogTWFnaWMgdG8gZm9yY2UgY2hh bmdlLiAqLworI2VuZGlmIC8qIE5PQ09URk1DICovCisgICAgICB9CisgICAgfQorI2VuZGlmIC8q IE9fTkRFTEFZICovCisKKy8qIEluc3RydWN0IHRoZSBzeXN0ZW0gaG93IHRvIHRyZWF0IHRoZSBj YXJyaWVyLCBhbmQgc2V0IGEgZmV3IG90aGVyIHR0eQorICogcGFyYW1ldGVycy4KKyAqCisgKiBU aGlzIGFsc28gdW5kb2VzIHRoZSB0ZW1wb3Jhcnkgc2V0dGluZyBvZiBDTE9DQUwgdGhhdCBtYXkg aGF2ZSBiZWVuIGRvbmUKKyAqIGZvciB0aGUgY2xvc2Uob3BlbigpKSBhYm92ZSAoZXhjZXB0IGlu IFhlbml4KS4gIEFsc28gdGhyb3cgaW4gfkVDSE8sIHRvCisgKiBwcmV2ZW50IHRoZSBvdGhlciBl bmQgb2YgdGhlIGxpbmUgZnJvbSBzaXR0aW5nIHRoZXJlIHRhbGtpbmcgdG8gaXRzZWxmLAorICog cHJvZHVjaW5nIGdhcmJhZ2Ugd2hlbiB0aGUgdXNlciBwZXJmb3JtcyBhIGNvbm5lY3QuCisgKgor ICogU0NPIFhlbml4IHVuZm9ydHVuYXRlbHkgc2VlbXMgdG8gaWdub3JlIHRoZSBhY3R1YWwgc3Rh dGUgb2YgQ0xPQ0FMLgorICogTm93IGl0IHRoaW5rcyBDTE9DQUwgaXMgYWx3YXlzIG9uLiBJdCBz ZWVtcyB0aGUgb25seSByZWFsIHNvbHV0aW9uIGZvcgorICogWGVuaXggaXMgdG8gc3dpdGNoIGJl dHdlZW4gdGhlIGxvd2VyIGFuZCB1cHBlciBjYXNlIGRldmljZSBuYW1lcy4KKyAqCisgKiBUaGlz IHNlY3Rpb24gbWF5IGF0IHNvbWUgZnV0dXJlIHRpbWUgZXhwYW5kIGludG8gc2V0dGluZyBhIGNv bXBsZXRlCisgKiBjb2xsZWN0aW9uIG9mIHR0eSBwYXJhbWV0ZXJzLCBvciBjYWxsIGEgZnVuY3Rp b24gc2hhcmVkIHdpdGggdHRwa3QoKS8KKyAqIHR0dnQoKSB0aGF0IGRvZXMgc28uICBPbiB0aGUg b3RoZXIgaGFuZCwgdGhlIGluaXRpYWwgcGFyYW1ldGVycyBhcmUgbm90CisgKiB0aGF0IGltcG9y dGFudCwgc2luY2UgdHRwa3QoKSBvciB0dHZ0KCkgc2hvdWxkIGFsd2F5cyBmaXggdGhhdCBiZWZv cmUKKyAqIGFueSBjb21tdW5pY2F0aW9uIGlzIGRvbmUuICBXZWxsLCB3ZSdsbCBzZWUuLi4KKyAq LworICAgIGlmICh4bG9jYWwpIHsKKyAgICAJY3VyY2FyciA9IC0yOworCWRlYnVnKEYxMDAsInR0 b3BlbiBjYWxsaW5nIGNhcnJjdGwiLCIiLDApOworCWNhcnJjdGwoJnR0cmF3LCB0dGNhcnIgPT0g Q0FSX09OKTsKKwlkZWJ1ZyhGMTAwLCJ0dG9wZW4gY2FycmN0bCBvayIsIiIsMCk7CisKKyNpZmRl ZiBDT0hFUkVOVAorI2RlZmluZSBTVk9SUE9TSVgKKyNlbmRpZiAvKiBDT0hFUkVOVCAqLworCisj aWZkZWYgU1ZPUlBPU0lYCisJdHRyYXcuY19sZmxhZyAmPSB+RUNITzsKKwl0dG9sZC5jX2xmbGFn ICY9IH5FQ0hPOworI2lmZGVmIEJTRDQ0T1JQT1NJWAorCXkgPSB0Y3NldGF0dHIodHR5ZmQsIFRD U0FEUkFJTiwgJnR0cmF3KTsKKwlkZWJ1ZyhGMTAxLCJ0dG9wZW4gdGNzZXRhdHRyIiwiIix5KTsK KyNlbHNlCisJeSA9IGlvY3RsKHR0eWZkLCBUQ1NFVEEsICZ0dHJhdyk7CisJZGVidWcoRjEwMCwi dHRvcGVuIGlvY3RsIiwiIix5KTsKKyNlbmRpZiAvKiBCU0Q0NE9SUE9TSVggKi8KKworI2Vsc2Ug LyogQlNELCBldGMgKi8KKwl0dHJhdy5zZ19mbGFncyAmPSB+RUNITzsKKwl0dG9sZC5zZ19mbGFn cyAmPSB+RUNITzsKKyNpZmRlZiBCRUxMVjEwCisJeSA9IGlvY3RsKHR0eWZkLFRJT0NTRVRQLCZ0 dHJhdyk7CisJZGVidWcoRjEwMCwidHRvcGVuIGlvY3RsIiwiIix5KTsKKyNlbHNlCisJeSA9IHN0 dHkodHR5ZmQsJnR0cmF3KTsKKwlkZWJ1ZyhGMTAwLCJ0dG9wZW4gc3R0eSIsIiIseSk7CisjZW5k aWYgLyogQkVMTFYxMCAqLworI2VuZGlmIC8qIFNWT1JQT1NJWCAqLworCisjaWZkZWYgQ09IRVJF TlQKKyN1bmRlZiBTVk9SUE9TSVgKKyNlbmRpZiAvKiBDT0hFUkVOVCAqLworCisJLyogdHRmbHVp KCk7ICovICAvKiAgVGhpcyBmYWlscyBmb3Igc29tZSByZWFzb24uICAqLworICAgIH0KKworICAg IC8qIEdldCBjdXJyZW50IHNwZWVkICovCisKKyNpZm5kZWYgQkVCT1gKKyAgICB0dHNwZWVkID0g dHRnc3BkKCk7CisjZWxzZQorICAgIHR0c3BlZWQgPSAxOTIwMDsKKyNlbmRpZiAvKiAhQkVCT1gg Ki8KKyAgICBkZWJ1ZyhGMTAxLCJ0dG9wZW4gdHRzcGVlZCIsIiIsdHRzcGVlZCk7CisKKyAgICAv KiBEb25lLCBtYWtlIGVudHJpZXMgaW4gZGVidWcgbG9nLCByZXN0b3JlIEN0cmwtQyB0cmFwLCBh bmQgcmV0dXJuLiAqLworCisgICAgZGVidWcoRjEwMSwidHRvcGVuIHR0eWZkIiwiIix0dHlmZCk7 CisgICAgZGVidWcoRjEwMSwidHRvcGVuICpsY2wiLCIiLCpsY2wpOworICAgIGRlYnVnKEYxMTEs InR0b3BlbiBsb2NrIGZpbGUiLGZsZm5hbSxsa2YpOworICAgIHNpZ25hbChTSUdJTlQsb2NjdCk7 CisgICAgc2lnaW50X2lnbiA9IChvY2N0ID09IFNJR19JR04pID8gMSA6IDA7CisgICAgZ290c2ln cyA9IDA7CisgICAgcmV0dXJuKDApOworfQorCisKKy8qICBEIE8gXyBPIFAgRSBOICAtLSAgRG8g dGhlIHJpZ2h0IGtpbmQgb2Ygb3BlbigpIGNhbGwgZm9yIHRoZSB0dHkuICovCisKK2ludAorZG9f b3Blbih0dG5hbWUpIGNoYXIgKnR0bmFtZTsgeworICAgIGludCBmbGFnczsKKworI2lmZGVmIFFO WDYKKyAgICAvKiBPX05PTkJMT0NLIG9uIC9kZXYvdHR5IG1ha2VzIG9wZW4oKSBmYWlsICovCisg ICAgcmV0dXJuKHByaXZfb3BuKHR0bmFtZSwgT19SRFdSIHwKKwkJICAgICgKKwkJICAgICAoKGlu dClzdHJjbXAodHRuYW1lLCIvZGV2L3R0eSIpID09IDApID8KKwkJICAgICAwIDoKKwkJICAgICAo dHRjYXJyICE9IENBUl9PTikgPyBPX05PTkJMT0NLIDogMCkKKwkJICAgICkKKwkgICApOyAKKyNl bHNlICAvKiAhUU5YNiAqLworCisjaWZuZGVmCU9fTkRFTEFZCQkJLyogT19OREVMQVkgbm90IGRl ZmluZWQgKi8KKyAgICByZXR1cm4ocHJpdl9vcG4odHRuYW1lLDIpKTsKKyNlbHNlCQkJCQkvKiBP X05ERUxBWSBkZWZpbmVkICovCisKKyNpZmRlZiBBVFQ3MzAwCisvKgorIE9wZW4gY29tbXMgbGlu ZSB3aXRob3V0IHdhaXRpbmcgZm9yIGNhcnJpZXIgc28gaW5pdGlhbCBjYWxsIGRvZXMgbm90IGhh bmcKKyBiZWNhdXNlIHN0YXRlIG9mICJtb2RlbSIgaXMgbGlrZWx5IHVua25vd24gYXQgdGhlIGlu aXRpYWwgY2FsbCAgLWpyZC4KKyBJZiB0aGlzIGlzIG5lZWRlZCBmb3IgdGhlIGdldHR5IHN0dWZm IHRvIHdvcmssIGFuZCB0aGUgb3BlbiB3b3VsZCBub3Qgd29yaworIHdpdGhvdXQgT19OREVMQVkg d2hlbiBnZXR0eSBpcyBzdGlsbCBvbiwgdGhlbiB0aGlzIHNwZWNpYWwgY2FzZSBpcyBvay4KKyBP dGhlcndpc2UsIGdldCByaWQgb2YgaXQuIC1za2UKKyovCisgICAgcmV0dXJuKHByaXZfb3BuKHR0 bmFtZSwgT19SRFdSIHwgT19OREVMQVkpKTsKKworI2Vsc2UJLyogIUFUVDczMDAgKi8KKworICAg IC8qIE5vcm1hbCBjYXNlLiBVc2UgT19OREVMQVkgYWNjb3JkaW5nIHRvIFNFVCBDQVJSSUVSLiBT ZWUgdHRzY2FycigpLiAqLworICAgIGZsYWdzID0gT19SRFdSOworICAgIGRlYnVnKEYxMDEsImRv X29wZW4geGxvY2FsIiwiIix4bG9jYWwpOworICAgIGRlYnVnKEYxMTEsImRvX29wZW4gZmxhZ3Mg QSIsdHRuYW1lLGZsYWdzKTsKKyAgICBpZiAoeGxvY2FsICYmICh0dGNhcnIgIT0gQ0FSX09OKSkK KyAgICAgIGZsYWdzIHw9IE9fTkRFTEFZOworICAgIGRlYnVnKEYxMTEsImRvX29wZW4gZmxhZ3Mg QiIsdHRuYW1lLGZsYWdzKTsKKyAgICByZXR1cm4ocHJpdl9vcG4odHRuYW1lLCBmbGFncykpOwor I2VuZGlmIC8qICFBVFQ3MzAwICovCisjZW5kaWYgLyogT19OREVMQVkgKi8KKyNlbmRpZiAvKiBR Tlg2ICovCit9CisKKy8qICBUIFQgQyBMIE8gUyAgLS0gIENsb3NlIHRoZSBUVFksIHJlbGVhc2lu ZyBhbnkgbG9jay4gICovCisKK3N0YXRpYyBpbnQgdHRjX3N0YXRlID0gMDsJCS8qIHR0Y2xvc2Uo KSBzdGF0ZSAqLworc3RhdGljIGNoYXIgKiB0dGNfbmFtW10gPSB7ICJzZXR1cCIsICJoYW5ndXAi LCAicmVzZXQiLCAiY2xvc2UiIH07CisKK2ludAordHRjbG9zKGZvbykgaW50IGZvbzsgewkJCS8q IEFyZyByZXEnZCBmb3Igc2lnbmFsKCkgcHJvdG90eXBlICovCisgICAgaW50IHh4LCB4ID0gMDsK KyAgICBleHRlcm4gaW50IGV4aXRoYW5ndXA7CisKKyAgICBkZWJ1ZyhGMTAxLCJ0dGNsb3MgdHR5 ZmQiLCIiLHR0eWZkKTsKKyAgICBkZWJ1ZyhGMTAxLCJ0dGNsb3MgbmV0Y29ubiIsIiIsbmV0Y29u bik7CisgICAgZGVidWcoRjEwMSwidHRjbG9zIHhsb2NhbCIsIiIseGxvY2FsKTsKKyNpZmRlZiBO T0ZEWkVSTworICAgIGRlYnVnKEYxMDAsInR0Y2xvcyBOT0ZEWkVSTyIsIiIsMCk7CisjZW5kaWYg LyogTk9GRFpFUk8gKi8KKworI2lmZGVmIENPTU1FTlQKKyNpZmRlZiBUVExFQlVGCisgICAgbGVf aW5pdCgpOwkJCQkvKiBObyBuZWVkIGZvciBhbnkgb2YgdGhpcyAqLworI2VuZGlmIC8qIFRUTEVC VUYgKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisKKyAgICBpZiAodHR5ZmQgPCAwKQkJCS8qIFdh c24ndCBvcGVuLiAqLworICAgICAgcmV0dXJuKDApOworCisgICAgaWYgKHR0ZmRmbGcpCQkJLyog SWYgd2UgaW5oZXJpdGVkIHR0eWZkIGZyb20gKi8KKyAgICAgIHJldHVybigwKTsJCQkvKiBhbm90 aGVyIHByb2Nlc3MsIGRvbid0IGNsb3NlIGl0LiAqLworCisgICAgdHZ0ZmxnID0gMDsJCQkJLyog KHNvbWUgZGF5IGdldCByaWQgb2YgdGhpcy4uLikgKi8KKyAgICBnb3RzaWdzID0gMDsKKworI2lm ZGVmIElLU0QKKyAgICBpZiAoaW5zZXJ2ZXIpIHsKKyNpZmRlZiBUTkNPREUKKyAgICAgICAgICB0 bl9wdXNoKCk7ICAgICAgICAgICAgICAgICAgICAvKiBQbGFjZSBhbnkgd2FpdGluZyBkYXRhIGlu dG8gaW5wdXQqLworICAgICAgICAgIHRuX3NvcHQoRE8sVEVMT1BUX0xPR09VVCk7ICAgIC8qIFNl bmQgTE9HT1VUIG9wdGlvbiBiZWZvcmUgY2xvc2UgKi8KKyAgICAgICAgICBURUxPUFRfVU5BTlNX RVJFRF9ETyhURUxPUFRfTE9HT1VUKSA9IDE7CisgICAgICAgICAgdG5fcmVzZXQoKTsgICAgICAg ICAgICAgICAgICAgLyogVGhlIFJlc2V0IFRlbG5ldCBPcHRpb24gdGFibGUuICAqLworI2VuZGlm IC8qIFROQ09ERSAqLworI2lmZGVmIENLX1NTTAorCSAgaWYgKHNzbF9hY3RpdmVfZmxhZykgewor CSAgICAgIGlmIChzc2xfZGVidWdfZmxhZykKKwkJQklPX3ByaW50ZihiaW9fZXJyLCJjYWxsaW5n IFNTTF9zaHV0ZG93bihzc2wpXG4iKTsKKwkgICAgICBTU0xfc2h1dGRvd24oc3NsX2Nvbik7CisJ ICAgICAgU1NMX2ZyZWUoc3NsX2Nvbik7CisJICAgICAgc3NsX2NvbiA9IE5VTEw7CisJICAgICAg c3NsX2FjdGl2ZV9mbGFnID0gMDsKKwkgIH0KKwkgIGlmICh0bHNfYWN0aXZlX2ZsYWcpIHsKKwkg ICAgICBpZiAoc3NsX2RlYnVnX2ZsYWcpCisJCUJJT19wcmludGYoYmlvX2VyciwiY2FsbGluZyBT U0xfc2h1dGRvd24odGxzKVxuIik7CisJICAgICAgU1NMX3NodXRkb3duKHRsc19jb24pOworCSAg ICAgIFNTTF9mcmVlKHRsc19jb24pOworCSAgICAgIHRsc19jb24gPSBOVUxMOworCSAgICAgIHRs c19hY3RpdmVfZmxhZyA9IDA7CisJICB9CisjZW5kaWYgLyogQ0tfU1NMICovCisgICAgfQorI2Vu ZGlmIC8qIElLU0QgKi8KKyNpZmRlZiBORVRDTUQKKyAgICBpZiAodHRwaXBlKSB7CQkJLyogV2Un dmUgYmVlbiB1c2luZyBhIHBpcGUgKi8KKwkvKiB0dHBpcGUgPSAwOyAqLworCWlmICh0dHBpZCA+ IDApIHsKKwkgICAgaW50IHdzdGF0OworCSAgICBpbnQgc3RhdHVzcDsKKwkgICAgY2xvc2UoZmRp bik7CQkvKiBDbG9zZSB0aGVzZS4gKi8KKwkgICAgY2xvc2UoZmRvdXQpOworCSAgICBmZGluID0g ZmRvdXQgPSAtMTsKKwkgICAga2lsbCh0dHBpZCwxKTsJCS8qIEtpbGwgZm9yayB3aXRoIFNJR0hV UCAqLworCSAgICB3aGlsZSAoMSkgeworCQl3c3RhdCA9IHdhaXQoJnN0YXR1c3ApOworCQlpZiAo d3N0YXQgPT0gdHRwaWQgfHwgd3N0YXQgPT0gLTEpCisJCSAgYnJlYWs7CisJCXBleGl0c3RhdCA9 IChzdGF0dXNwICYgMHhmZikgPyBzdGF0dXNwIDogc3RhdHVzcCA+PiA4OworCSAgICB9CisJICAg IHR0cGlkID0gMDsKKwl9CisJbmV0Y29ubiA9IDA7CisJd2FzY2xvc2VkID0gMTsKKwl0dHlmZCA9 IC0xOworCXJldHVybigwKTsKKyAgICB9CisjZW5kaWYgLyogTkVUQ01EICovCisjaWZkZWYgTkVU UFRZCisgICAgaWYgKHR0cHR5KSB7CisjaWZuZGVmIE5PRE9QVFkKKyAgICAgICAgZW5kX3B0eSgp OworI2VuZGlmIC8qIE5PRE9QVFkgKi8KKyAgICAgICAgY2xvc2UodHR5ZmQpOworCW5ldGNvbm4g PSAwOworCXdhc2Nsb3NlZCA9IDE7CisgICAgICAgIHR0cHR5ID0gMDsKKyAgICAgICAgdHR5ZmQg PSAtMTsKKyAgICAgICAgcmV0dXJuKDApOworICAgIH0KKyNlbmRpZiAvKiBORVRQVFkgKi8KKwor I2lmZGVmCU5FVENPTk4KKyAgICBpZiAobmV0Y29ubikgewkJCS8qIElmIGl0J3MgYSBuZXR3b3Jr IGNvbm5lY3Rpb24uICovCisJZGVidWcoRjEwMCwidHRjbG9zIGNsb3NpbmcgbmV0IiwiIiwwKTsK KwluZXRjbG9zKCk7CQkJLyogTGV0IHRoZSBuZXR3b3JrIG1vZHVsZSBjbG9zZSBpdC4gKi8KKwlu ZXRjb25uID0gMDsJCQkvKiBObyBtb3JlIG5ldHdvcmsgY29ubmVjdGlvbi4gKi8KKwlkZWJ1ZyhG MTAxLCJ0dGNsb3MgdHR5ZmQgYWZ0ZXIgbmV0Y2xvcyIsIiIsdHR5ZmQpOyAvKiBTaG91bGQgYmUg LTEgKi8KKwlyZXR1cm4oMCk7CisgICAgfQorI2VuZGlmCS8qIE5FVENPTk4gKi8KKworICAgIGlm ICh4bG9jYWwpIHsJCQkvKiBXZSdyZSBjbG9zaW5nIGEgU0VUIExJTkUgZGV2aWNlICovCisjaWZk ZWYgRlQyMQkJCQkvKiBGb3J0dW5lIDIuMS1zcGVjaWZpYyBpdGVtcyAuLi4gKi8KKwlpb2N0bCh0 dHlmZCxUSU9DSFBDTCwgTlVMTCk7CisjZW5kaWYgLyogRlQyMSAqLworI2lmZGVmIHVsdHJpeAkJ CQkvKiBVbHRyaXgtc3BlY2lmaWMgaXRlbXMgLi4uICovCisjaWZkZWYgVElPQ1NJTlVTRQorCS8q IFVuc2V0IHRoZSBJTlVTRSBmbGFnIHRoYXQgd2Ugc2V0IGluIHR0b3BlbigpICovCisJaW9jdGwo dHR5ZmQsIFRJT0NTSU5VU0UsIE5VTEwpOworI2VuZGlmIC8qIFRJT0NTSU5VU0UgKi8KKwlpb2N0 bCh0dHlmZCwgVElPQ05NT0RFTSwgJngpOworI2lmZGVmIENPTU1FTlQKKwkvKiBXaGF0IHdhcyB0 aGlzPyAqLworCWlvY3RsKHR0eWZkLCBUSU9DTkNBUiwgTlVMTCk7CisjZW5kaWYgLyogQ09NTUVO VCAqLworI2VuZGlmIC8qIHVsdHJpeCAqLworICAgIH0KKworICAgIC8qIFRoaXMgaXMgdG8gcHJl dmVudCB1cyBmcm9tIHN0aWNraW5nIGluIHR0aGFuZygpIG9yIGNsb3NlKCkuICovCisKKyNpZmRl ZiBPX05ERUxBWQorI2lmbmRlZiBhZWdpcworICAgIGlmICh0dHlmZCA+IDApIHsJCQkvKiBCdXQg c2tpcCBpdCBvbiBzdGRpbi4gKi8KKwlkZWJ1ZyhGMTAwLCJ0dGNsb3Mgc2V0dGluZyBPX05ERUxB WSIsIiIsMCk7CisJeCA9IGZjbnRsKHR0eWZkLEZfU0VURkwsZmNudGwodHR5ZmQsRl9HRVRGTCwg MCl8T19OREVMQVkpOworI2lmZGVmIERFQlVHCisJaWYgKGRlYmxvZyAmJiB4ID09IC0xKSB7CisJ ICAgIHBlcnJvcigiV2FybmluZyAtIENhbid0IHNldCBPX05ERUxBWSIpOworCSAgICBkZWJ1ZyhG MTAxLCJ0dGNsb3MgZmNudGwgZmFpbHVyZSB0byBzZXQgT19OREVMQVkiLCIiLHgpOworCX0KKyNl bmRpZiAvKiBERUJVRyAqLworICAgIH0KKyNlbmRpZiAvKiBhZWdpcyAqLworI2VuZGlmIC8qIE9f TkRFTEFZICovCisKKyAgICB4ID0gMDsKKyAgICB0dGNfc3RhdGUgPSAwOworICAgIGlmICh4bG9j YWwKKyNpZmRlZiBOT0ZEWkVSTworCXx8IHR0eWZkID4gMAorI2VuZGlmIC8qIE5PRkRaRVJPICov CisJKSB7CisJc2F2YWwgPSBzaWduYWwoU0lHQUxSTSx4dGltZXJoKTsgLyogRW5hYmxlIHRpbWVy IGludGVycnVwdC4gKi8KKwl4eCA9IGFsYXJtKDgpOwkJCS8qIEFsbG93IDggc2Vjb25kcy4gKi8K KwlkZWJ1ZyhGMTAxLCJ0dGNsb3MgYWxhcm0iLCIiLHh4KTsKKwlpZiAoCisjaWZkZWYgQ0tfUE9T SVhfU0lHCisJICAgIHNpZ3NldGptcChzamJ1ZiwxKQorI2Vsc2UKKwkgICAgc2V0am1wKHNqYnVm KQorI2VuZGlmIC8qIENLX1BPU0lYX1NJRyAqLworCSAgICApIHsJCQkJLyogVGltZXIgd2VudCBv ZmY/ICovCisJICAgIHggPSAtMTsKKyNpZmRlZiBERUJVRworCSAgICBkZWJ1ZyhGMTExLCJ0dGNs b3MgQUxBUk0gVFJBUCBlcnJubyIsY2tpdG9hKHR0Y19zdGF0ZSksZXJybm8pOworCSAgICBwcmlu dGYoInR0Y2xvcygpIHRpbWVvdXQ6ICVzXG4iLCB0dGNfbmFtW3R0Y19zdGF0ZV0pOworI2VuZGlm IC8qIERFQlVHICovCisJfQorCS8qIEhhbmcgdXAgdGhlIGRldmljZSAoZHJvcCBEVFIpICovCisK KwllcnJubyA9IDA7CisJZGVidWcoRjExMSwidHRjbG9zIEEiLGNraXRvYSh4KSx0dGNfc3RhdGUp OworCWlmICh0dGNfc3RhdGUgPCAxKSB7CisJICAgIHR0Y19zdGF0ZSA9IDE7CisJICAgIGRlYnVn KEYxMDEsInR0Y2xvcyBleGl0aGFuZ3VwIiwiIixleGl0aGFuZ3VwKTsKKwkgICAgaWYgKGV4aXRo YW5ndXApIHsKKwkJYWxhcm0oOCk7CQkvKiBSZS1hcm0gdGhlIHRpbWVyICovCisJCWRlYnVnKEYx MDEsInR0Y2xvcyBjYWxsaW5nIHR0aGFuZygpIiwiIix4KTsKKwkJeCA9IHR0aGFuZygpOwkJLyog SGFuZyB1cCBmaXJzdCwgdGhlbi4uLiAqLworCQlkZWJ1ZyhGMTAxLCJ0dGNsb3MgdHRoYW5nKCki LCIiLHgpOworCSAgICB9CisjaWZuZGVmIENLX05PSFVQQ0wKKy8qCisgIE9jdCAyMDA2IC0gTGVh dmUgRFRSIG9uIGlmIFNFVCBFWElUIEhBTkdVUCBPRkYuCisgIFN1Z2dlc3RlZCBieSBTb2V3b25v IEVmZmVuZGkuCisqLworI2lmZGVmIEhVUENMCisJICAgIGVsc2UgeworCQl0dG9sZC5jX2NmbGFn ICY9IH5IVVBDTDsgLyogTGV0J3Mgc2VlIGhvdyB0aGlzIHRyYXZlbHMgKi8KKyNpZmRlZiBCU0Q0 NE9SUE9TSVgKKwkJdGNzZXRhdHRyKHR0eWZkLFRDU0FOT1csJnR0b2xkKTsKKyNlbHNlIC8qICFC U0Q0NE9SUE9TSVggKi8KKyNpZmRlZiBBVFRTVgorCQlpb2N0bCh0dHlmZCxUQ1NFVEFXLCZ0dG9s ZCk7CQkKKyNlbHNlICAvKiAhQVRUU1YgKi8KKwkJc3R0eSh0dHlmZCwmdHRvbGQpOworI2VuZGlm CS8qIEFUVFNWICovCisjZW5kaWYJLyogQlNENDRPUlBPU0lYICovCisJICAgIH0KKyNlbmRpZgkv KiBIVVBDTCAqLworI2VuZGlmCS8qIENLX05PSFVQQ0wgKi8KKwl9CisJLyogUHV0IGJhY2sgZGV2 aWNlIG1vZGVzIGFzIHdlIGZvdW5kIHRoZW0gKi8KKworCWVycm5vID0gMDsKKwlkZWJ1ZyhGMTEx LCJ0dGNsb3MgQiIsY2tpdG9hKHgpLHR0Y19zdGF0ZSk7CisJaWYgKHR0Y19zdGF0ZSA8IDIpIHsK KwkgICAgdHRjX3N0YXRlID0gMjsKKwkgICAgLyogRG9uJ3QgdHJ5IHRvIG1lc3Mgd2l0aCB0dHkg bW9kZXMgaWYgdHRoYW5nIGZhaWxlZCgpICovCisJICAgIC8qIHNpbmNlIGl0IHByb2JhYmx5IHdv bid0IHdvcmsuICovCisJICAgIGlmICh4ID4gLTEpIHsKKwkJZGVidWcoRjEwMSwidHRjbG9zIGNh bGxpbmcgdHRyZXMoKSIsIiIseCk7CisJCXNpZ25hbChTSUdBTFJNLHh0aW1lcmgpOyAvKiBSZS1l bmFibGUgdGhlIGFsYXJtLiAqLworCQlhbGFybSg4KTsJCS8qIFJlLWFybSB0aGUgdGltZXIgKi8K KwkJeCA9IHR0cmVzKCk7CQkvKiBSZXNldCBkZXZpY2UgbW9kZXMuICovCisJCWRlYnVnKEYxMDEs InR0Y2xvcyB0dHJlcygpIiwiIix4KTsKKwkJYWxhcm0oMCk7CisJICAgIH0KKwl9CisJLyogQ2xv c2UgdGhlIGRldmljZSAqLworCisJZXJybm8gPSAwOworCWRlYnVnKEYxMDEsInR0Y2xvcyBDIiwi Iix0dGNfc3RhdGUpOworCWlmICh0dGNfc3RhdGUgPCAzKSB7CisJICAgIHR0Y19zdGF0ZSA9IDM7 CisJICAgIGVycm5vID0gMDsKKwkgICAgZGVidWcoRjEwMSwidHRjbG9zIGNhbGxpbmcgY2xvc2Ui LCIiLHgpOworCSAgICBzaWduYWwoU0lHQUxSTSx4dGltZXJoKTsJLyogUmUtZW5hYmxlIGFsYXJt LiAqLworCSAgICBhbGFybSg4KTsJCQkvKiBSZS1hcm0gdGhlIHRpbWVyICovCisJICAgIHggPSBj bG9zZSh0dHlmZCk7CQkvKiBDbG9zZSB0aGUgZGV2aWNlLiAqLworCSAgICBkZWJ1ZyhGMTAxLCJ0 dGNsb3MgY2xvc2UoKSIsIiIseCk7CisJICAgIGlmICh4ID4gLTEpCisJICAgICAgdHRjX3N0YXRl ID0gMzsKKwl9CisJZGVidWcoRjEwMSwidHRjbG9zIEQiLCIiLHR0Y19zdGF0ZSk7CisJdHRpbW9m ZigpOwkJCS8qIFR1cm4gb2ZmIHRpbWVyLiAqLworCWlmICh4IDwgMCkgeworCSAgICBwcmludGYo Ij9XQVJOSU5HIC0gY2xvc2UgZmFpbGVkOiAlc1xuIix0dG5tc3YpOworI2lmZGVmIERFQlVHCisJ ICAgIGlmIChkZWJsb2cpIHsKKwkJcHJpbnRmKCJlcnJubyA9ICVkXG4iLCBlcnJubyk7CisJCWRl YnVnKEYxMDEsInR0Y2xvcyBmYWlsZWQiLCIiLGVycm5vKTsKKwkgICAgfQorI2VuZGlmIC8qIERF QlVHICovCisJfQorCS8qIFVubG9jayBhZnRlciBjbG9zaW5nIGJ1dCBiZWZvcmUgYW55IGdldHR5 IG11bWJvIGp1bWJvICovCisKKwlkZWJ1ZyhGMTAwLCJ0dGNsb3MgYWJvdXQgdG8gY2FsbCB0dHVu bGNrIiwiIiwwKTsKKyAgICAgICAgaWYgKHR0dW5sY2soKSkgICAgICAgICAgICAgICAgICAvKiBS ZWxlYXNlIHV1Y3Atc3R5bGUgbG9jayAqLworCSAgZnByaW50ZihzdGRlcnIsIldhcm5pbmcsIHBy b2JsZW0gcmVsZWFzaW5nIGxvY2tcclxuIik7CisgICAgfQorCisvKiBGb3IgYmlkaXJlY3Rpb25h bCBsaW5lcywgcmVzdG9yZSBnZXR0eSBpZiBpdCB3YXMgdGhlcmUgYmVmb3JlLiAqLworCisjaWZk ZWYgQUNVQ05UUkwJCQkJLyogNC4zQlNEIGFjdWNudHJsKCkgbWV0aG9kLiAqLworICAgIGlmICh4 bG9jYWwpIHsKKwlkZWJ1ZyhGMTAwLCJ0dGNsb3MgQUNVQ05UUkwiLCIiLDApOworCWFjdWNudHJs KCJlbmFibGUiLHR0bm1zdik7CS8qIEVuYWJsZSBnZXR0eSBvbiB0aGUgZGV2aWNlLiAqLworICAg IH0KKyNlbHNlCisjaWZkZWYgQVRUNzMwMAkJCQkvKiBBVFQgVU5JWCBQQyAoM0IxLCA3MzAwKSBt ZXRob2QuICovCisgICAgaWYgKHhsb2NhbCkgeworCWRlYnVnKEYxMDAsInR0Y2xvcyBBVFQ3MzAw IG9uZ2V0dHkiLCIiLDApOworCWlmIChhdHRtb2RlbSAmIERPR0VUWSkJCS8qIFdhcyBnZXR0eSgx bSkgcnVubmluZyBiZWZvcmUgdXM/ICovCisJICBvbmdldHR5KHR0bm1zdik7CQkvKiBZZXMsIHJl c3RhcnQgZ2V0dHkgb24gdHR5IGxpbmUgKi8KKwlhdHRtb2RlbSAmPSB+RE9HRVRZOwkJLyogTm8g cGhvbmUgaW4gdXNlLCBnZXR0eSByZXN0b3JlZCAqLworICAgIH0KKyNlbmRpZiAvKiBBVFQ3MzAw ICovCisjZW5kaWYgLyogU3lzdGVtLWRlcGVuZGVudCBnZXR0eS1yZXN0b3JpbmcgbWV0aG9kcyAq LworCisjaWZkZWYgc29ueV9uZXdzCisgICAga21fZXh0ID0gLTE7CQkJLyogSW52YWxpZGF0ZSBk ZXZpY2UncyBLYW5qaS1tb2RlICovCisjZW5kaWYgLyogc29ueV9uZXdzICovCisKKyAgICB0dHlm ZCA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJbnZhbGlkYXRlIHRoZSBmaWxlIGRl c2NyaXB0b3IuICovCisgICAgd2FzY2xvc2VkID0gMTsKKyAgICBkZWJ1ZyhGMTAwLCJ0dGNsb3Mg ZG9uZSIsIiIsMCk7CisgICAgcmV0dXJuKDApOworfQorCisvKiAgVCBUIEggQSBOIEcgIC0tICBI YW5ndXAgcGhvbmUgbGluZSBvciBuZXR3b3JrIGNvbm5lY3Rpb24uICAqLworLyoKKyAgUmV0dXJu czoKKyAgMCBpZiBpdCBkb2VzIG5vdGhpbmcuCisgIDEgaWYgaXQgYmVsaWV2ZXMgdGhhdCBpdCBo dW5nIHVwIHN1Y2Nlc3NmdWxseS4KKyAtMSBpZiBpdCBiZWxpZXZlcyB0aGF0IHRoZSBoYW5ndXAg YXR0ZW1wdCBmYWlsZWQuCisqLworCisjZGVmaW5lIEhVUFRJTUUgNTAwCQkJLyogTWlsbGlzZWNv bmRzIGZvciBoYW5ndXAgKi8KKworI2lmZGVmIENPTU1FTlQKKy8qIFRoZSBmb2xsb3dpbmcgZGlk bid0IHdvcmsgYnV0IFRJT0NTRFRSIGRvZXMgd29yayAqLworI2lmZGVmIFVOSVhXQVJFCisvKiBE ZWZpbmUgSFVQX1BPU0lYIHRvIGZvcmNlIG5vbi1QT1NJWCBidWlsZHMgdG8gdXNlIHRoZSBQT1NJ WCBoYW5ndXAgbWV0aG9kICovCisjaWZuZGVmIFBPU0lYCQkJCS8qIFN1Y2ggYXMgVW5peHdhcmUg MS54LCAyLnggKi8KKyNpZm5kZWYgSFVQX1BPU0lYCisjZGVmaW5lIEhVUF9QT1NJWAorI2VuZGlm IC8qIEhVUF9QT1NJWCAqLworI2VuZGlmIC8qIFBPU0lYICovCisjZW5kaWYgLyogVU5JWFdBUkUg Ki8KKyNlbmRpZiAvKiBDT01NRU5UICovCisKKyNpZm5kZWYgVVNFX1RJT0NTRFRSCisjaWZkZWYg X19OZXRCU0RfXworLyogQmVjYXVzZSB0aGUgUE9TSVggbWV0aG9kIChzZXQgb3V0cHV0IHNwZWVk IHRvIDApIGRvZXNuJ3Qgd29yayBpbiBOZXRCU0QgKi8KKyNpZmRlZiBUSU9DU0RUUgorI2lmZGVm IFRJT0NDRFRSCisjZGVmaW5lIFVTRV9USU9DU0RUUgorI2VuZGlmIC8qIFRJT0NDRFRSICovCisj ZW5kaWYgLyogVElPQ1NEVFIgKi8KKyNlbmRpZiAvKiBfX05ldEJTRF9fICovCisjZW5kaWYgLyog VVNFX1RJT0NTRFRSICovCisKKyNpZm5kZWYgSFVQX0NMT1NFX1BPU0lYCisjaWZkZWYgT1U4Cisj ZGVmaW5lIEhVUF9DTE9TRV9QT1NJWAorI2Vsc2UKKyNpZmRlZiBDS19TQ09WNQorI2RlZmluZSBI VVBfQ0xPU0VfUE9TSVgKKyNlbmRpZiAvKiBDS19TQ09WNSAqLworI2VuZGlmIC8qIE9VOCAqLwor I2VuZGlmIC8qIEhVUF9DTE9TRV9QT1NJWCAqLworCisjaWZkZWYgTk9fSFVQX0NMT1NFX1BPU0lY CisjaWZkZWYgSFVQX0NMT1NFX1BPU0lYCisjdW5kZWYgSFVQX0NMT1NFX1BPU0lYCisjZW5kaWYg LyogSFVQX0NMT1NFX1BPU0lYICovCisjZW5kaWYgLyogTk9fSFVQX0NMT1NFX1BPU0lYICovCisK K2ludAordHRoYW5nKCkgeworI2lmZGVmIE5PTE9DQUwKKyAgICByZXR1cm4oMCk7CisjZWxzZQor ICAgIGludCB4ID0gMDsJCQkJLyogU29tZXRpbWVzIHVzZWQgYXMgcmV0dXJuIGNvZGUuICovCisj aWZuZGVmIFBPU0lYCisgICAgaW50IHo7CQkJCS8qIHdvcmtlciAqLworI2VuZGlmIC8qIFBPU0lY ICovCisKKyNpZmRlZiBDT0hFUkVOVAorI2RlZmluZSBTVk9SUE9TSVgKKyNlbmRpZiAvKiBDT0hF UkVOVCAqLworCisjaWZkZWYgU1ZPUlBPU0lYCQkJLyogQVQmVCwgUE9TSVgsIEhQVVggZGVjbGFy YXRpb25zLiAqLworICAgIGludCBzcGRzYXY7CQkJCS8qIGZvciBzYXZpbmcgc3BlZWQgKi8KKyNp ZmRlZiBIVVBfUE9TSVgKKyAgICBpbnQgc3Bkc2F2aTsKKyNlbHNlCisjaWZkZWYgQlNENDRPUlBP U0lYCisgICAgaW50IHNwZHNhdmk7CisjZW5kaWYgLyogQlNENDRPUlBPU0lYICovCisjZW5kaWYg LyogSFVQX1BPU0lYICovCisjaWZkZWYgSFBVWAorLyoKKyAgRWFybHkgdmVyc2lvbnMgb2YgSFAt VVggb21pdHRlZCB0aGUgbWZsYWcgdHlwZWRlZi4gIElmIHlvdSBnZXQgY29tcGxhaW50cworICBh Ym91dCBpdCwganVzdCBjaGFuZ2UgaXQgdG8gbG9uZyAob3IgYmV0dGVyIHN0aWxsLCB1bnNpZ25l ZCBsb25nKS4KKyovCisgICAgbWZsYWcKKyAgICAgIGR0cl9kb3duID0gMDAwMDAwMDAwMDAsCisg ICAgICBtb2RlbV9ydG4sCisgICAgICBtb2RlbV9zYXY7CisgICAgY2hhciBtb2RlbV9zdGF0ZVs2 NF07CisjZW5kaWYgLyogSFBVWCAqLworICAgIGludCBmbGFnczsJCQkJLyogZmNudGwgZmxhZ3Mg Ki8KKyAgICB1bnNpZ25lZCBzaG9ydCB0dGNfc2F2ZTsKKyNlbmRpZiAvKiBTVk9SUE9TSVggKi8K KworICAgIGlmICh0dHlmZCA8IDApIHJldHVybigwKTsgICAgICAgICAgIC8qIERvbid0IGRvIHRo aXMgaWYgbm90IG9wZW4gICovCisgICAgaWYgKHhsb2NhbCA8IDEpIHJldHVybigwKTsJCS8qIERv bid0IGRvIHRoaXMgaWYgbm90IGxvY2FsICovCisKKyNpZmRlZiBORVRDTUQKKyAgICBpZiAodHRw aXBlKQorICAgICAgcmV0dXJuKCh0dGNsb3MoMCkgPCAwKSA/IC0xIDogMSk7CisjZW5kaWYgLyog TkVUQ01EICovCisjaWZkZWYgTkVUUFRZCisgICAgaWYgKHR0cHR5KQorICAgICAgcmV0dXJuKCh0 dGNsb3MoMCkgPCAwKSA/IC0xIDogMSk7CisjZW5kaWYgLyogTkVUUFRZICovCisjaWZkZWYgTkVU Q09OTgorICAgIGlmIChuZXRjb25uKSB7CQkJLyogTmV0d29yayBjb25uZWN0aW9uLiAqLworI2lm ZGVmIFROX0NPTVBPUlQKKyAgICAgICAgaWYgKGlzdG5jb21wb3J0KCkpIHsKKyAgICAgICAgICAg IGludCByYyA9IHRuY19zZXRfZHRyX3N0YXRlKDApOworICAgICAgICAgICAgaWYgKHJjID49IDAp IHsKKyAgICAgICAgICAgICAgICBtc2xlZXAoSFVQVElNRSk7CisgICAgICAgICAgICAgICAgcmMg PSB0bmNfc2V0X2R0cl9zdGF0ZSgxKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVy bihyYyA+PSAwID8gMSA6IC0xKTsKKyAgICAgICAgfSBlbHNlCisjZW5kaWYgLyogVE5fQ09NUE9S VCAqLworCSAgcmV0dXJuKChuZXRjbG9zKCkgPCAwKSA/IC0xIDogMSk7IC8qIEp1c3QgY2xvc2Ug aXQuICovCisgIH0KKyNlbmRpZiAvKiBORVRDT05OICovCisKKy8qIEZyb20gaGVyZSBkb3duLCB3 ZSBoYW5kbGUgcmVhbCB0dHkgZGV2aWNlcy4gKi8KKyNpZmRlZiBIVVBfUE9TSVgKKy8qCisgIGUu Zy4gZm9yIFVuaXh3YXJlIDIsIHdoZXJlIHdlIGRvbid0IGhhdmUgYSBmdWxsIFBPU0lYIGJ1aWxk LCB3ZQorICBzdGlsbCBoYXZlIHRvIHVzZSBQT1NJWC1zdHlsZSBoYW5ndXAuICBUaHVzIHRoZSBk dXBsaWNhdGlvbiBvZiB0aGlzCisgIGFuZCB0aGUgbmV4dCBjYXNlLCB0aGUgb25seSBkaWZmZXJl bmNlIGJlaW5nIHdlIHVzZSBhIGxvY2FsIHRlcm1pb3MKKyAgc3RydWN0IGhlcmUsIHNpbmNlIGEg ZGlmZmVyZW50IG1vZGVsIGlzIHVzZWQgZWxzZXdoZXJlLgorCisgIE5PIExPTkdFUiBVU0VEIGFz IG9mIEMtS2VybWl0IDguMCAtLSBpdCB0dXJucyBvdXQgdGhhdCB0aGlzIG1ldGhvZCwKKyAgZXZl biB0aG91Z2ggaXQgY29tcGlsZXMgYW5kIGV4ZWN1dGVzIHdpdGhvdXQgZXJyb3IsIGRvZXNuJ3Qg YWN0dWFsbHkKKyAgd29yayAoaS5lLiBEVFIgZG9lcyBub3QgZHJvcCksIHdoZXJlYXMgdGhlIFRJ T0NTRFRSIG1ldGhvZCB3b3JrcyBqdXN0IGZpbmUsCisqLworICAgIHsKKwlzdHJ1Y3QgdGVybWlv cyB0dGN1cjsKKwlpbnQgeDsKKwlkZWJ1ZyhGMTAwLCJ0dGhhbmcgSFVQX1BPU0lYIHN0eWxlIiwi IiwwKTsKKwl4ID0gdGNnZXRhdHRyKHR0eWZkLCAmdHRjdXIpOwkvKiBHZXQgY3VycmVudCBhdHRy aWJ1dGVzICovCisJZGVidWcoRjExMSwidHRoYW5nIHRjZ2V0YXR0ciIsY2tpdG9hKGVycm5vKSx4 KTsKKwlpZiAoeCA8IDApIHJldHVybigtMSk7CisJc3Bkc2F2ID0gY2ZnZXRvc3BlZWQoJnR0Y3Vy KTsJLyogR2V0IGN1cnJlbnQgc3BlZWQgKi8KKwlkZWJ1ZyhGMTExLCJ0dGhhbmcgY2ZnZXRvc3Bl ZWQiLGNraXRvYShlcnJubyksc3Bkc2F2KTsKKwlzcGRzYXZpID0gY2ZnZXRpc3BlZWQoJnR0Y3Vy KTsJLyogR2V0IGN1cnJlbnQgc3BlZWQgKi8KKwlkZWJ1ZyhGMTExLCJ0dGhhbmcgY2ZnZXRpc3Bl ZWQiLGNraXRvYShlcnJubyksc3Bkc2F2aSk7CisJeCA9IGNmc2V0b3NwZWVkKCZ0dGN1cixCMCk7 CS8qIFJlcGxhY2UgYnkgMCAqLworCWRlYnVnKEYxMTEsInR0aGFuZyBjZnNldG9zcGVlZCIsY2tp dG9hKGVycm5vKSx4KTsKKwlpZiAoeCA8IDApIHJldHVybigtMSk7CisJeCA9IGNmc2V0aXNwZWVk KCZ0dGN1cixCMCk7CisJZGVidWcoRjExMSwidHRoYW5nIGNmc2V0aXNwZWVkIixja2l0b2EoZXJy bm8pLHgpOworCWlmICh4IDwgMCkgcmV0dXJuKC0xKTsKKwl4ID0gdGNzZXRhdHRyKHR0eWZkLFRD U0FEUkFJTiwmdHRjdXIpOworCWRlYnVnKEYxMTEsInR0aGFuZyB0Y3NldGF0dHIgQjAiLGNraXRv YShlcnJubykseCk7CisJaWYgKHggPCAwKSByZXR1cm4oLTEpOworCW1zbGVlcChIVVBUSU1FKTsJ CS8qIFNsZWVwIDAuNSBzZWMgKi8KKwl4ID0gY2ZzZXRvc3BlZWQoJnR0Y3VyLHNwZHNhdik7IC8q IFJlc3RvcmUgcHJldiBzcGVlZCAqLworCWlmICh4IDwgMCkgcmV0dXJuKC0xKTsKKwlkZWJ1ZyhG MTExLCJ0dGhhbmcgY2ZzZXRvc3BlZWQgcHJldiIsY2tpdG9hKGVycm5vKSx4KTsKKwl4ID0gY2Zz ZXRpc3BlZWQoJnR0Y3VyLHNwZHNhdmkpOworCWRlYnVnKEYxMTEsInR0aGFuZyBjZnNldGlzcGVl ZCBwcmV2Iixja2l0b2EoZXJybm8pLHgpOworCWlmICh4IDwgMCkgcmV0dXJuKC0xKTsKKwl4ID0g dGNzZXRhdHRyKHR0eWZkLFRDU0FEUkFJTiwmdHRjdXIpOworCWRlYnVnKEYxMTEsInR0aGFuZyB0 Y3NldGF0dHIgcmVzdG9yZSIsY2tpdG9hKGVycm5vKSx4KTsKKwlpZiAoeCA8IDApIHJldHVybigt MSk7CisJcmV0dXJuKDEpOworICAgIH0KKyNlbHNlCisjaWZkZWYgQlNENDRPUlBPU0lYCisjaWZk ZWYgUU5YCisgICAgeworCWludCB4OworCXggPSB0Y2Ryb3BsaW5lKHR0eWZkLDUwMCk7CisJZGVi dWcoRjEwMSwidHRoYW5nIFFOWCB0Y2Ryb3BsaW5lIiwiIix4KTsKKwl0dGN1ci5jX2NmbGFnIHw9 IENMT0NBTDsKKwl4ID0gdGNzZXRhdHRyKHR0eWZkLFRDU0FEUkFJTiwmdHRjdXIpOworCWRlYnVn KEYxMDEsInR0aGFuZyBRTlggdGNzZXRhdHRyIHJlc3RvcmUiLCIiLHgpOworCWlmICh4IDwgMCkg eworCSAgICBkZWJ1ZyhGMTAxLCJ0dGhhbmcgUU5YIHRjc2V0YXR0ciByZXN0b3JlIGVycm5vIiwi IixlcnJubyk7CisJICAgIHJldHVybigtMSk7CisJfQorCS8qIEZpeCBmbGFncyAtIGVuc3VyZSBP X05PTkJMT0NLIGlzIG9mZiAqLworCisJZXJybm8gPSAwOworCWRlYnVnKEYxMDEsInR0aGFuZyBR TlggaW5pZmxhZ3MiLCIiLGluaWZsYWdzKTsKKwlpZiAoZmNudGwodHR5ZmQsIEZfU0VURkwsIGlu aWZsYWdzKSA9PSAtMSkgeworCSAgICBkZWJ1ZyhGMTAxLCJ0dGhhbmcgUU5YIEZfU0VURkwgZXJy bm8iLCIiLGVycm5vKTsKKwkgICAgcmV0dXJuKC0xKTsKKwl9CisJcmV0dXJuKHgpOworICAgIH0K KyNlbHNlICAvKiBRTlggKi8KKyAgICB7CisJaW50IHg7CisjaWZkZWYgVVNFX1RJT0NTRFRSCisJ ZGVidWcoRjEwMCwidHRoYW5nIEJTRDQ0T1JQT1NJWCBVU0VfVElPQ1NEVFIiLCIiLDApOworCWVy cm5vID0gMDsKKwl4ID0gaW9jdGwodHR5ZmQsIFRJT0NDRFRSLCBOVUxMKTsKKwlkZWJ1ZyhGMTEx LCJ0dGhhbmcgQlNENDRPUlBPU0lYIGlvY3RsIFRJT0NDRFRSIixja2l0b2EoZXJybm8pLHgpOwor CWlmICh4IDwgMCkgcmV0dXJuKC0xKTsKKwltc2xlZXAoSFVQVElNRSk7CQkvKiBTbGVlcCAwLjUg c2VjICovCisJZXJybm8gPSAwOworCXggPSBpb2N0bCh0dHlmZCwgVElPQ1NEVFIsIE5VTEwpOwor CWRlYnVnKEYxMTEsInR0aGFuZyBCU0Q0NE9SUE9TSVggaW9jdGwgVElPQ1NEVFIiLGNraXRvYShl cnJubykseCk7CisJaWYgKHggPCAwKSByZXR1cm4oLTEpOworI2Vsc2UgIC8qIFVTRV9USU9DU0RU UiAqLworCisjaWZkZWYgSFVQX0NMT1NFX1BPU0lYCisvKgorICBJbiBPU1I1IHZlcnNpb25zIHdo ZXJlIFRJT0NTRFRSIGlzIG5vdCBkZWZpbmVkICh1cCB0byBhbmQgaW5jbHVkaW5nIGF0CisgIGxl YXN0IDUuMC42YSkgdGhlIFBPU0lYIEFQSXMgaW4gdGhlICIjZWxzZSIgcGFydCBiZWxvdyBhcmUg YXZhaWxhYmxlIGJ1dAorICBkb24ndCB3b3JrLCBhbmQgbm8gb3RoZXIgQVBJcyBhcmUgYXZhaWxh YmxlIHRoYXQgZG8gd29yay4gIEluIHRoaXMgY2FzZQorICB3ZSBoYXZlIHRvIGRyb3AgRFRSIGJ5 IGJydXRlIGZvcmNlOiBjbG9zZSBhbmQgcmVvcGVuIHRoZSBwb3J0LiAgVGhpcworICBjb2RlIGFj dHVhbGx5IHdvcmtzLCBidXQgYWxsIHRoZSBzdGVwcyBhcmUgY3J1Y2lhbDogc2V0dGluZyBDTE9D QUwsIHRoZQorICBPX05ERUxBWSBtYW5pcHVsYXRpb25zLCBldGMuCisqLworCWRlYnVnKEYxMDAs InR0aGFuZyBIVVBfQ0xPU0VfUE9TSVggY2xvc2Uvb3BlbiIsIiIsMCk7CisJZGVidWcoRjEwMSwi dHRoYW5nIEhVUF9DTE9TRV9QT1NJWCBPX05PTkJMT0NLIiwiIixPX05PTkJMT0NLKTsKKwlkZWJ1 ZyhGMTAxLCJ0dGhhbmcgSFVQX0NMT1NFX1BPU0lYIE9fTkRFTEFZIiwiIixPX05ERUxBWSk7CisJ ZXJybm8gPSAwOworCXggPSB0Y2dldGF0dHIodHR5ZmQsICZ0dGN1cik7CS8qIEdldCBjdXJyZW50 IGF0dHJpYnV0ZXMgKi8KKwlkZWJ1ZyhGMTAxLCJ0dGhhbmcgSFVQX0NMT1NFX1BPU0lYIHRjZ2V0 YXR0ciIsIiIseCk7CisJaWYgKHggPCAwKSB7CisJICAgIGRlYnVnKEYxMDEsInR0aGFuZyBIVVBf Q0xPU0VfUE9TSVggdGNnZXRhdHRyIGVycm5vIiwiIixlcnJubyk7CisJICAgIHJldHVybigtMSk7 CisJfQorCWVycm5vID0gMDsKKworCXggPSBjbG9zZSh0dHlmZCk7CQkvKiBDbG9zZSB3aXRob3V0 IHJlbGVhc2luZyBsb2NrICovCisJaWYgKHggPCAwKSB7CisJICAgIGRlYnVnKEYxMDEsInR0aGFu ZyBIVVBfQ0xPU0VfUE9TSVggY2xvc2UgZXJybm8iLCIiLGVycm5vKTsKKwkgICAgcmV0dXJuKC0x KTsKKwl9CisJZXJybm8gPSAwOworCXggPSBtc2xlZXAoNTAwKTsJCS8qIFBhdXNlIGhhbGYgYSBz ZWNvbmQgKi8KKwlpZiAoeCA8IDApIHsJCQkvKiBPciBpZiB0aGF0IGRvZXNuJ3Qgd29yaywgMSBz ZWMgKi8KKwkgICAgZGVidWcoRjEwMSwidHRoYW5nIEhVUF9DTE9TRV9QT1NJWCBtc2xlZXAgZXJy bm8iLCIiLGVycm5vKTsKKwkgICAgc2xlZXAoMSk7CisJfQorCWVycm5vID0gMDsKKwl0dHlmZCA9 IHByaXZfb3BuKHR0bm1zdiwgKE9fUkRXUnxPX05ERUxBWSkpOyAvKiBSZW9wZW4gdGhlIGRldmlj ZSAqLworCWRlYnVnKEYxMTEsInR0aGFuZyBIVVBfQ0xPU0VfUE9TSVggcmVvcGVuIix0dG5tc3Ys dHR5ZmQpOworCWlmICh0dHlmZCA8IDApIHsKKwkgICAgZGVidWcoRjEwMSwidHRoYW5nIEhVUF9D TE9TRV9QT1NJWCByZW9wZW4gZXJybm8iLCIiLGVycm5vKTsKKwkgICAgcmV0dXJuKC0xKTsKKwl9 CisJZGVidWcoRjEwMSwidHRoYW5nIEhVUF9DTE9TRV9QT1NJWCByZS10dG9wZW4gdHR5ZmQiLCIi LHR0eWZkKTsKKworCS8qIFJlc3RvcmUgcHJldmlvdXMgYXR0cmlidXRlcyAqLworCisJZXJybm8g PSAwOworCXR2dGZsZyA9IDA7CisJdHRjdXIuY19jZmxhZyB8PSBDTE9DQUw7CisJeCA9IHRjc2V0 YXR0cih0dHlmZCxUQ1NBRFJBSU4sJnR0Y3VyKTsKKwlkZWJ1ZyhGMTAxLCJ0dGhhbmcgSFVQX0NM T1NFX1BPU0lYIHRjc2V0YXR0ciByZXN0b3JlIiwiIix4KTsKKwlpZiAoeCA8IDApIHsKKwkgICAg ZGVidWcoRjEwMSwidHRoYW5nIEhVUF9DTE9TRV9QT1NJWCB0Y3NldGF0dHIgcmVzdG9yZSBlcnJu byIsCisJCSAgIiIsZXJybm8pOworCSAgICByZXR1cm4oLTEpOworCX0KKwkvKiBGaXggZmxhZ3Mg LSBlbnN1cmUgT19OREVMQVkgYW5kIE9fTk9OQkxPQ0sgYXJlIG9mZiAqLworCisJZXJybm8gPSAw OworICAgICAgICBpZiAoKHggPSBmY250bCh0dHlmZCwgRl9HRVRGTCwgMCkpID09IC0xKSB7CisJ ICAgIGRlYnVnKEYxMDEsInR0aGFuZyBIVVBfQ0xPU0VfUE9TSVggRl9HRVRGTCBlcnJubyIsIiIs ZXJybm8pOworCSAgICByZXR1cm4oLTEpOworCX0KKwlkZWJ1ZyhGMTAxLCJ0dGhhbmcgSFVQX0NM T1NFX1BPU0lYIGZsYWdzIiwiIix4KTsKKwllcnJubyA9IDA7CisgICAgICAgIHggJj0gfihPX05P TkJMT0NLfE9fTkRFTEFZKTsKKwlkZWJ1ZyhGMTAxLCJ0dGhhbmcgSFVQX0NMT1NFX1BPU0lYIGZs YWdzIHRvIHNldCIsIiIseCk7CisJZGVidWcoRjEwMSwidHRoYW5nIEhVUF9DTE9TRV9QT1NJWCBp bmlmbGFncyIsIiIsaW5pZmxhZ3MpOworCWlmIChmY250bCh0dHlmZCwgRl9TRVRGTCwgeCkgPT0g LTEpIHsKKwkgICAgZGVidWcoRjEwMSwidHRoYW5nIEhVUF9DTE9TRV9QT1NJWCBGX1NFVEZMIGVy cm5vIiwiIixlcnJubyk7CisJICAgIHJldHVybigtMSk7CisJfQorI2lmZGVmIERFQlVHCisJaWYg KGRlYmxvZykgeworCSAgICBpZiAoKHggPSBmY250bCh0dHlmZCwgRl9HRVRGTCwgMCkpID4gLTEp IHsKKwkJZGVidWcoRjEwMSwidHRoYW5nIEhVUF9DTE9TRV9QT1NJWCBmbGFncyIsIiIseCk7CisJ CWRlYnVnKEYxMDEsInR0aGFuZyBIVVBfQ0xPU0VfUE9TSVggZmxhZ3MgJiBPX05PTkJMT0NLIiwK KwkJICAgICAgIiIseCZPX05PTkJMT0NLKTsKKwkJZGVidWcoRjEwMSwidHRoYW5nIEhVUF9DTE9T RV9QT1NJWCBmbGFncyAmIE9fTkRFTEFZIiwKKwkJICAgICAgIiIseCZPX05ERUxBWSk7CisJICAg IH0KKwl9CisjZW5kaWYgLyogREVCVUcgKi8KKworI2Vsc2UgIC8qIEhVUF9DTE9TRV9QT1NJWCAq LworCQorCS8qIEdlbmVyYWwgQlNENDRPUlBPU0lYIGNhc2UgKExpbnV4LCBCU0RJLCBGcmVlQlNE LCBldGMpICovCisKKwlkZWJ1ZyhGMTAwLCJ0dGhhbmcgQlNENDRPUlBPU0lYIEIwIiwiIiwwKTsK Kwl4ID0gdGNnZXRhdHRyKHR0eWZkLCAmdHRjdXIpOwkvKiBHZXQgY3VycmVudCBhdHRyaWJ1dGVz ICovCisJZGVidWcoRjExMSwidHRoYW5nIEJTRDQ0T1JQT1NJWCB0Y2dldGF0dHIiLGNraXRvYShl cnJubykseCk7CisJaWYgKHggPCAwKSByZXR1cm4oLTEpOworCXNwZHNhdiA9IGNmZ2V0b3NwZWVk KCZ0dGN1cik7CS8qIEdldCBjdXJyZW50IHNwZWVkICovCisJZGVidWcoRjExMSwidHRoYW5nIEJT RDQ0T1JQT1NJWCBjZmdldG9zcGVlZCIsY2tpdG9hKGVycm5vKSxzcGRzYXYpOworCXNwZHNhdmkg PSBjZmdldGlzcGVlZCgmdHRjdXIpOwkvKiBHZXQgY3VycmVudCBzcGVlZCAqLworCWRlYnVnKEYx MTEsInR0aGFuZyBCU0Q0NE9SUE9TSVggY2ZnZXRpc3BlZWQiLGNraXRvYShlcnJubyksc3Bkc2F2 aSk7CisJeCA9IGNmc2V0b3NwZWVkKCZ0dGN1cixCMCk7CS8qIFJlcGxhY2UgYnkgMCAqLworCWRl YnVnKEYxMTEsInR0aGFuZyBCU0Q0NE9SUE9TSVggY2ZzZXRvc3BlZWQiLGNraXRvYShlcnJubyks eCk7CisJaWYgKHggPCAwKSByZXR1cm4oLTEpOworCXggPSBjZnNldGlzcGVlZCgmdHRjdXIsQjAp OworCWRlYnVnKEYxMTEsInR0aGFuZyBCU0Q0NE9SUE9TSVggY2ZzZXRpc3BlZWQiLGNraXRvYShl cnJubykseCk7CisJaWYgKHggPCAwKSByZXR1cm4oLTEpOworCS8qIFRoaXMgZ2V0cyBFSU5WQUwg b24gTmV0QlNEIDEuNC4xIGJlY2F1c2Ugb2YgQjAuLi4gKi8KKwl4ID0gdGNzZXRhdHRyKHR0eWZk LFRDU0FEUkFJTiwmdHRjdXIpOworCWRlYnVnKEYxMTEsInR0aGFuZyBCU0Q0NE9SUE9TSVggdGNz ZXRhdHRyIEIwIixja2l0b2EoZXJybm8pLHgpOworCWlmICh4IDwgMCkgcmV0dXJuKC0xKTsKKwlt c2xlZXAoSFVQVElNRSk7CQkvKiBTbGVlcCAwLjUgc2VjICovCisJZGVidWcoRjEwMSwidHRoYW5n IEJTRDQ0T1JQT1NJWCByZXN0b3JlIG91dHB1dCBzcGVlZCIsIiIsc3Bkc2F2KTsKKwl4ID0gY2Zz ZXRvc3BlZWQoJnR0Y3VyLHNwZHNhdik7IC8qIFJlc3RvcmUgcHJldiBzcGVlZCAqLworCWRlYnVn KEYxMTEsInR0aGFuZyBCU0Q0NE9SUE9TSVggY2ZzZXRvc3BlZWQgcHJldiIsY2tpdG9hKGVycm5v KSx4KTsKKwlpZiAoeCA8IDApIHJldHVybigtMSk7CisJZGVidWcoRjEwMSwidHRoYW5nIEJTRDQ0 T1JQT1NJWCByZXN0b3JlIGlucHV0IHNwZWVkIiwiIixzcGRzYXZpKTsKKwl4ID0gY2ZzZXRpc3Bl ZWQoJnR0Y3VyLHNwZHNhdmkpOworCWRlYnVnKEYxMTEsInR0aGFuZyBCU0Q0NE9SUE9TSVggY2Zz ZXRpc3BlZWQgcHJldiIsY2tpdG9hKGVycm5vKSx4KTsKKwlpZiAoeCA8IDApIHJldHVybigtMSk7 CisJdHRjdXIuY19jZmxhZyB8PSBDTE9DQUw7CS8qIERvbid0IGV4cGVjdCBDRCBhZnRlciBoYW5n dXAgKi8KKwl4ID0gdGNzZXRhdHRyKHR0eWZkLFRDU0FEUkFJTiwmdHRjdXIpOworCWRlYnVnKEYx MTEsInR0aGFuZyBCU0Q0NE9SUE9TSVggdGNzZXRhdHRyIHJlc3RvcmUiLGNraXRvYShlcnJubyks eCk7CisJaWYgKHggPCAwKSByZXR1cm4oLTEpOworCisjZW5kaWYgLyogSFVQX0NMT1NFX1BPU0lY ICovCisjZW5kaWYgLyogVVNFX1RJT0NTRFRSICovCisKKwlyZXR1cm4oMSk7CisgICAgfQorCisj ZW5kaWYgLyogUU5YICovCisjZWxzZSAvKiBCU0Q0NE9SUE9TSVggKi8KKworI2lmZGVmIGFlZ2lz CQkJCS8qIEFwb2xsbyBBZWdpcyAqLworICAgIHNpb18kY29udHJvbCgoc2hvcnQpdHR5ZmQsIHNp b18kZHRyLCBmYWxzZSwgc3QpOyAgICAvKiBEVFIgZG93biAqLworICAgIG1zbGVlcChIVVBUSU1F KTsJCQkJCS8qIHBhdXNlICovCisgICAgc2lvXyRjb250cm9sKChzaG9ydCl0dHlmZCwgc2lvXyRk dHIsIHRydWUsICBzdCk7ICAgIC8qIERUUiB1cCAqLworICAgIHJldHVybigxKTsKKyNlbmRpZiAv KiBhZWdpcyAqLworCisjaWZkZWYgQU5ZQlNECQkJCS8qIEFueSBCU0QgdmVyc2lvbi4gKi8KKyNp ZmRlZiBUSU9DQ0RUUgkJCQkvKiBFeGNlcHQgdGhvc2UgdGhhdCBkb24ndCBoYXZlIHRoaXMgKi8K KyAgICBkZWJ1ZyhGMTAwLCJ0dGhhbmcgQlNEIHN0eWxlIiwiIiwwKTsKKyAgICBpZiAoaW9jdGwo dHR5ZmQsVElPQ0NEVFIsMCkgPCAwKSB7CS8qIENsZWFyIERUUi4gKi8KKwlkZWJ1ZyhGMTAxLCJ0 dGhhbmcgVElPQ0NEVFIgZmFpbHMiLCIiLGVycm5vKTsKKwlyZXR1cm4oLTEpOworICAgIH0KKyAg ICBtc2xlZXAoSFVQVElNRSk7CQkJLyogRm9yIGFib3V0IDEvMiBzZWMgKi8KKyAgICBlcnJubyA9 IDA7CisgICAgeCA9IGlvY3RsKHR0eWZkLFRJT0NTRFRSLDApOwkvKiBSZXN0b3JlIERUUiAqLwor ICAgIGlmICh4IDwgMCkgeworCS8qCisJICBGb3Igc29tZSByZWFzb24sIHRoaXMgdGVuZHMgdG8g ZmFpbCB3aXRoICJubyBzdWNoIGRldmljZSBvciBhZGRyZXNzIgorCSAgYnV0IHRoZSBvcGVyYXRp b24gc3RpbGwgd29ya3MsIHByb2JhYmx5IGJlY2F1c2Ugb2YgdGhlIGNsb3NlL29wZW4KKwkgIGxh dGVyIG9uLiAgU28gbGV0J3Mgbm90IHNjYXJlIHRoZSB1c2VyIHVubmVjZXNzYXJpbHkgaGVyZS4K KwkqLworCWRlYnVnKEYxMDEsInR0aGFuZyBUSU9DU0RUUiBlcnJubyIsIiIsZXJybm8pOyAvKiBM b2cgdGhlIGVycm9yICovCisJeCA9IDE7CQkJCS8qIFByZXRlbmQgd2Ugc3VjY2VlZGVkICovCisg ICAgfSBlbHNlIGlmICh4ID09IDApIHggPSAxOwkJLyogU3VjY2VzcyAqLworI2lmZGVmIENPTU1F TlQKKyNpZmRlZiBGVDIxCisgICAgaW9jdGwodHR5ZmQsIFRJT0NTQVZFTU9ERVMsIDApOworICAg IGlvY3RsKHR0eWZkLCBUSU9DSFBDTCwgMCk7CisgICAgY2xvc2UodHR5ZmQpOwkJCS8qIFllcywg bXVzdCBkbyB0aGlzIHR3aWNlICovCisgICAgaWYgKCh0dHlmZCA9IG9wZW4odHRubXN2LDIpKSA8 IDApCS8qIG9uIEZvcnR1bmUgY29tcHV0ZXJzLi4uICovCisgICAgICByZXR1cm4oLTEpOwkJCS8q IChidXQgd2h5PykgKi8KKyAgICBlbHNlIHggPSAxOworI2VuZGlmIC8qIEZUMjEgKi8KKyNlbmRp ZiAvKiBDT01NRU5UICovCisjZW5kaWYgLyogVElPQ0NEVFIgKi8KKyAgICBjbG9zZShkb19vcGVu KHR0bm1zdikpOwkJLyogQ2xlYXIgaS9vIGVycm9yIGNvbmRpdGlvbiAqLworICAgIGVycm5vID0g MDsKKyNpZmRlZiBDT01NRU5UCisvKiBUaGlzIGlzIGRlZmluaXRlbHkgZGFuZ2Vyb3VzLiAgV2h5 IHdhcyBpdCBoZXJlPyAqLworICAgIHogPSB0dHZ0KHR0c3BlZWQsdHRmbG93KTsJCS8qIFJlc3Rv cmUgbW9kZXMuICovCisgICAgZGVidWcoRjEwMSwidHRoYW5nIHR0dnQgcmV0dXJucyIsIiIseik7 CisgICAgcmV0dXJuKHogPCAwID8gLTEgOiAxKTsKKyNlbHNlCisgICAgcmV0dXJuKHgpOworI2Vu ZGlmIC8qIENPTU1FTlQgKi8KKyNlbmRpZiAvKiBBTllCU0QgKi8KKworI2lmZGVmIEFUVFNWCisv KiBBVCZUIFVOSVggc2VjdGlvbiwgaW5jbHVkZXMgSFAtVVggYW5kIGdlbmVyaWMgQVQmVCBTeXN0 ZW0gSUlJL1YuLi4gKi8KKworI2lmZGVmIEhQVVgKKy8qIEhld2xldHQgUGFja2FyZCBhbGxvd3Mg ZXhwbGljaXQgbWFuaXB1bGF0aW9uIG9mIG1vZGVtIHNpZ25hbHMuICovCisKKyNpZmRlZiBDT01N RU5UCisvKiBPbGQgd2F5Li4uICovCisgICAgZGVidWcoRjEwMCwidHRoYW5nIEhQLVVYIHN0eWxl IiwiIiwwKTsKKyAgICBpZiAoaW9jdGwodHR5ZmQsTUNTRVRBRiwmZHRyX2Rvd24pIDwgMCkgICAg ICAgIC8qIGxvd2VyIERUUiAqLworICAgICAgcmV0dXJuKC0xKTsJCSAgICAJICAgICAgICAgICAv KiBvb3BzLCBjYW4ndC4gKi8KKyAgICBtc2xlZXAoSFVQVElNRSk7CQkJICAgICAgICAgICAvKiBQ YXVzZSBoYWxmIGEgc2Vjb25kLiAqLworICAgIHggPSAxOwkJCQkgICAgICAgICAgIC8qIFNldCBy ZXR1cm4gY29kZSAqLworICAgIGlmIChpb2N0bCh0dHlmZCxNQ0dFVEEsJm1vZGVtX3J0bikgPiAt MSkgeyAgICAgLyogR2V0IGxpbmUgc3RhdHVzLiAqLworCWlmICgobW9kZW1fcnRuICYgTURDRCkg IT0gMCkgICAgICAJICAgLyogQ2hlY2sgaWYgQ0QgaXMgbG93LiAqLworCSAgeCA9IC0xOyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDRCBkaWRuJ3QgZHJvcCwgZmFpbC4gKi8K KyAgICB9IGVsc2UgeCA9IC0xOworCisgICAgLyogRXZlbiBpZiBhYm92ZSBjYWxscyBmYWlsLCBS VFMgJiBEVFIgc2hvdWxkIGJlIHR1cm5lZCBiYWNrIG9uLiAqLworICAgIG1vZGVtX3J0biA9IE1S VFMgfCBNRFRSOworICAgIGlmIChpb2N0bCh0dHlmZCxNQ1NFVEFGLCZtb2RlbV9ydG4pIDwgMCkg eCA9IC0xOworICAgIHJldHVybih4KTsKKyNlbHNlCisvKiBOZXcgd2F5LCBmcm9tIEhlbGxtdXRo IE1pY2hhZWxpcyAqLworICAgIGRlYnVnKEYxMDAsInR0aGFuZyBIUC1VWCBzdHlsZSwgSFBVWERF QlVHIiwiIiwwKTsKKyAgICBpZiAoaW9jdGwodHR5ZmQsTUNHRVRBLCZtb2RlbV9ydG4pID09IC0x KSB7IC8qIEdldCBjdXJyZW50IHN0YXR1cy4gKi8KKwlkZWJ1ZyhGMTAwLCJ0dGhhbmcgSFAtVVg6 IGNhbid0IGdldCBtb2RlbSBsaW5lcywgTk8gSEFOR1VQISIsIiIsMCk7CisJcmV0dXJuKC0xKTsK KyAgICB9CisgICAgc3ByaW50Zihtb2RlbV9zdGF0ZSwiJSNseCIsbW9kZW1fcnRuKTsKKyAgICBk ZWJ1ZyhGMTEwLCJ0dGhhbmcgSFAtVVg6IG1vZGVtIGxpbmVzID0gIixtb2RlbV9zdGF0ZSwwKTsK KyAgICBtb2RlbV9zYXYgPSBtb2RlbV9ydG47CQkvKiBTYXZlIGN1cnJlbnQgbW9kZW0gc2lnbmFs cyAqLworICAgIG1vZGVtX3J0biAmPSB+TURUUjsJCQkvKiBUdXJuIERUUiBiaXQgb2ZmICovCisg ICAgc3ByaW50Zihtb2RlbV9zdGF0ZSwiJSNseCIsbW9kZW1fcnRuKTsKKyAgICBkZWJ1ZyhGMTEw LCJ0dGhhbmcgSFAtVVg6IERUUiBkb3duID0gIixtb2RlbV9zdGF0ZSwwKTsKKyAgICBpZiAoaW9j dGwodHR5ZmQsTUNTRVRBRiwmbW9kZW1fcnRuKSA8IDApIHsgLyogbG93ZXIgRFRSICovCisJZGVi dWcoRjEwMCwidHRoYW5nIEhQLVVYOiBjYW4ndCBsb3dlciBEVFIhIiwiIiwwKTsKKwlyZXR1cm4o LTEpOwkJCS8qIG9vcHMsIGNhbid0LiAqLworICAgIH0KKyAgICBtc2xlZXAoSFVQVElNRSk7CQkJ LyogUGF1c2UgaGFsZiBhIHNlY29uZC4gKi8KKyAgICB4ID0gMTsJCQkJLyogU2V0IHJldHVybiBj b2RlICovCisgICAgaWYgKGlvY3RsKHR0eWZkLE1DR0VUQSwmbW9kZW1fcnRuKSA+IC0xKSB7IC8q IEdldCBsaW5lIHN0YXR1cy4gKi8KKwlzcHJpbnRmKG1vZGVtX3N0YXRlLCIlI2x4Iixtb2RlbV9y dG4pOworCWRlYnVnKEYxMTAsInR0aGFuZyBIUC1VWDogbW9kZW0gbGluZXMgZ290ID0gIixtb2Rl bV9zdGF0ZSwwKTsKKwlpZiAoKG1vZGVtX3J0biAmIE1EQ0QpICE9IDApIHsJLyogQ2hlY2sgaWYg Q0QgaXMgbG93LiAqLworCSAgICBkZWJ1ZyhGMTAwLCJ0dGhhbmcgSFAtVVg6IERDRCBub3QgZG93 biIsIiIsMCk7CisJICAgIHggPSAtMTsJCQkvKiBDRCBkaWRuJ3QgZHJvcCwgZmFpbC4gKi8KKwl9 IGVsc2UgeworCSAgICBkZWJ1ZyhGMTAwLCJ0dGhhbmcgSFAtVVg6IERDRCBkb3duIiwiIiwwKTsK Kwl9CisgICAgfSBlbHNlIHsKKwl4ID0gLTE7CisJZGVidWcoRjEwMCwidHRoYW5nIEhQLVVYOiBj YW4ndCBnZXQgRENEIHN0YXR1cyAhIiwiIiwwKTsKKyAgICB9CisKKyAgICAvKiBFdmVuIGlmIGFi b3ZlIGNhbGxzIGZhaWwsIERUUiBzaG91bGQgYmUgdHVybmVkIGJhY2sgb24uICovCisKKyAgICBt b2RlbV9zYXYgfD0gTURUUjsKKyAgICBpZiAoaW9jdGwodHR5ZmQsTUNTRVRBRiwmbW9kZW1fc2F2 KSA8IDApIHsKKwl4ID0gLTE7CisJZGVidWcoRjEwMCwidHRoYW5nIEhQLVVYOiBjYW4ndCBzZXQg c2F2ZWQgc3RhdGUiLCIiLDApOworICAgIH0gZWxzZSB7CisJc3ByaW50Zihtb2RlbV9zdGF0ZSwi JSNseCIsbW9kZW1fc2F2KTsKKwlkZWJ1ZyhGMTEwLCJ0dGhhbmcgSFAtVVg6IGZpbmFsIG1vZGVt IGxpbmVzID0gIixtb2RlbV9zdGF0ZSwwKTsKKyAgICB9CisgICAgcmV0dXJuKHgpOworI2VuZGlm IC8qIENPTU1FTlQgKi8KKworI2Vsc2UgLyogQVQmVCBidXQgbm90IEhQLVVYICovCisKKy8qIFNW SUQgZm9yIEFUJlQgU3lzdGVtIFYgUjMgZGVmaW5lcyBpb2N0bCdzIGZvciBoYW5kbGluZyBtb2Rl bSBzaWduYWxzLiAqLworLyogSXQgaXMgbm90IGtub3duIGhvdyBtYW55LCBpZiBhbnksIHN5c3Rl bXMgYWN0dWFsbHkgaW1wbGVtZW50IHRoZW0sICovCisvKiBzbyB3ZSBpbmNsdWRlIHRoZW0gaGVy ZSBpbiBpZmRlZidzLiAqLworCisvKgorICBVbml4d2FyZSBoYXMgdGhlIFRJT0NNeHh4IHN5bWJv bHMgZGVmaW5lZCwgYnV0IGNhbGxpbmcgaW9jdGwoKSB3aXRoIHRoZW0KKyAgZ2l2ZXMgZXJyb3Ig MjIgKGludmFsaWQgYXJndW1lbnQpLgorKi8KKyNpZm5kZWYgX0lCTVIyCisvKgorICBObyBtb2Rl bS1zaWduYWwgdHdpZGRsaW5nIGZvciBJQk0gUlQgUEMgb3IgUlMvNjAwMC4KKyAgSW4gQUlYIDMu MSBhbmQgZWFybGllciwgdGhlIGlvY3RsKCkgY2FsbCBpcyBicm9rZW4uCisgIFRoaXMgY29kZSBj b3VsZCBiZSBhY3RpdmF0ZWQgZm9yIEFJWCAzLjEgd2l0aCBQVEYgMjAwNiBvciBsYXRlcgorICAo ZS5nLiBBSVggMy4yKSwgYnV0IGNsb3NlL29wZW4gZG9lcyB0aGUgam9iIHRvbywgc28gd2h5IGJv dGhlci4KKyovCisjaWZkZWYgVElPQ01CSVMJCQkJLyogQml0IFNldCAqLworI2lmZGVmIFRJT0NN QklDCQkJCS8qIEJpdCBDbGVhciAqLworI2lmZGVmIFRJT0NNX0RUUgkJCS8qIERUUiAqLworCisv KiBDbGVhciBEVFIsIHNsZWVwIDMwMCBtc2VjLCB0dXJuIGl0IGJhY2sgb24uICovCisvKiBJZiBh bnkgb2YgdGhlIGlvY3RsJ3MgcmV0dXJuIGZhaWx1cmUsIGdvIG9uIHRvIHRoZSBuZXh0IHNlY3Rp b24uICovCisKKyAgICB6ID0gVElPQ01fRFRSOwkJCS8qIENvZGUgZm9yIERUUi4gKi8KKyNpZmRl ZiBDT01NRU5UCisvKgorICBUaGlzIHdhcyB0aGUgY2F1c2Ugb2YgdGhlIHRyb3VibGVzIHdpdGgg dGhlIFNvbGFyaXMgUG9ydCBNb25pdG9yLgorICBUaGUgcHJvYmxlbSBpczogUlRTIG5ldmVyIGNv bWVzIGJhY2sgb24uICBNb3JhbDogRG9uJ3QgZG8gaXQhCisgIChCdXQgd2h5IGRvZXNuJ3QgaXQg Y29tZSBiYWNrIG9uPyAgU2VlIHRoZSBUSU9DTUJJUyBjYWxsLi4uKQorKi8KKyNpZmRlZiBUSU9D TV9SVFMJCQkvKiBMb3dlciBSVFMgdG9vIGlmIHN5bWJvbCBpcyBrbm93bi4gKi8KKyAgICB6IHw9 IFRJT0NNX1JUUzsKKyNlbmRpZiAvKiBUSU9DTV9SVFMgKi8KKyNlbmRpZiAvKiBDT01NRU5UICov CisKKyAgICBkZWJ1ZyhGMTAxLCJ0dGhhbmcgVElPQ00gc2lnbmFsIG1hc2siLCIiLHopOworICAg IGlmIChpb2N0bCh0dHlmZCxUSU9DTUJJQywmeikgPiAtMSkgeyAgIC8qIFRyeSB0byBsb3dlciBE VFIuICovCisJZGVidWcoRjEwMCwidHRoYW5nIFRJT0NNQklDIG9rIiwiIiwwKTsKKwltc2xlZXAo SFVQVElNRSk7CQkgICAvKiBQYXVzZSBoYWxmIGEgc2Vjb25kLiAqLworCWlmIChpb2N0bCh0dHlm ZCxUSU9DTUJJUywmeikgPiAtMSkgeyAvKiBUcnkgdG8gdHVybiBpdCBiYWNrIG9uLiAqLworCSAg ICBkZWJ1ZyhGMTAwLCJ0dGhhbmcgVElPQ01CSVMgb2siLCIiLDApOworI2lmbmRlZiBDTFNPUE4K KwkgICAgcmV0dXJuKDEpOwkJCS8qIFN1Y2Nlc3MsIGRvbmUuICovCisjZW5kaWYgLyogQ0xTT1BO ICovCisJfSBlbHNlIHsJCQkvKiBDb3VsZG4ndCByYWlzZSwgY29udGludWUuICovCisJICAgIGRl YnVnKEYxMDEsInR0aGFuZyBUSU9DTUJJUyBlcnJubyIsIiIsZXJybm8pOworCX0KKyAgICB9IGVs c2UgewkJCQkvKiBDb3VsZG4ndCBsb3dlciwgY29udGludWUuICovCisgCWRlYnVnKEYxMDEsInR0 aGFuZyBUSU9DTUJJQyBlcnJubyIsIiIsZXJybm8pOworICAgIH0KKyNlbmRpZiAvKiBUSU9DTV9E VFIgKi8KKyNlbmRpZiAvKiBUSU9DTUJJQyAqLworI2VuZGlmIC8qIFRJT0NNQklTICovCisjZW5k aWYgLyogX0lCTVIyICovCisKKy8qCisgIEdlbmVyYWwgQVQmVCBVTklYIGNhc2UsIG5vdCBIUFVY LiAgVGhlIGZvbGxvd2luZyBjb2RlIGlzIGhpZ2hseSBzdXNwZWN0LiAgTm8KKyAgdHdvIEFUJlQt YmFzZWQgc3lzdGVtcyBzZWVtIHRvIGRvIHRoaXMgdGhlIHNhbWUgd2F5LiAgVGhlIG9iamVjdCBp cyBzaW1wbHkKKyAgdG8gdHVybiBvZmYgRFRSIGFuZCB0aGVuIHR1cm4gaXQgYmFjayBvbi4gIFNW SUQgc2F5cyB0aGUgdW5pdmVyc2FsIG1ldGhvZAorICBmb3IgdHVybmluZyBvZmYgRFRSIGlzIHRv IHNldCB0aGUgc3BlZWQgdG8gemVybywgYW5kIHRoaXMgZG9lcyBzZWVtIHRvIGRvCisgIHRoZSB0 cmljayBpbiBhbGwgY2FzZXMuICBCdXQgbmVpdGhlciBTVklEIG5vciBhbnkga25vd24gbWFuIHBh Z2VzIHNheSBob3cgdG8KKyAgdHVybiBEVFIgYmFjayBvbiBhZ2Fpbi4gIFNvbWUgdmFyaWFudHMs IGxpa2UgbW9zdCBYZW5peCBpbXBsZW1lbnRhdGlvbnMsCisgIHJhaXNlIERUUiBhZ2FpbiB3aGVu IHRoZSBzcGVlZCBpcyByZXN0b3JlZCB0byBhIG5vbnplcm8gdmFsdWUuICBPdGhlcnMKKyAgcmVx dWlyZSB0aGUgZGV2aWNlIHRvIGJlIGNsb3NlZCBhbmQgb3BlbmVkIGFnYWluLCBidXQgdGhpcyBp cyByaXNreSBiZWNhdXNlCisgIGdldHR5IGNvdWxkIHNlaXplIHRoZSBkZXZpY2UgZHVyaW5nIHRo ZSBpbnN0YW50IGl0IGlzIGNsb3NlZC4KKyovCisKKy8qIFJldHVybiBjb2RlIGZvciBpb2N0bCBm YWlsdXJlcy4uLiAqLworI2lmZGVmIEFUVDYzMDAKKyAgICB4ID0gMTsJCQkJLyogQVRUNjMwMCBk b2Vzbid0IHdhbnQgdG8gZmFpbC4uLiAqLworI2Vsc2UKKyAgICB4ID0gLTE7CisjZW5kaWYgLyog QVRUNjMwMCAqLworCisgICAgZGVidWcoRjEwMCwidHRoYW5nIGdldCBzZXR0aW5ncyIsIiIsMCk7 CisgICAgaWYgKGlvY3RsKHR0eWZkLFRDR0VUQSwmdHRjdXIpIDwgMCkgLyogR2V0IGN1cnJlbnQg c2V0dGluZ3MuICovCisgICAgICByZXR1cm4oeCk7CQkJLyogRmFpbCBpZiB0aGlzIGRvZXNuJ3Qg d29yay4gKi8KKyAgICBpZiAoKGZsYWdzID0gZmNudGwodHR5ZmQsRl9HRVRGTCwwKSkgPCAwKSAv KiBHZXQgZGV2aWNlIGZsYWdzLiAqLworICAgICAgcmV0dXJuKHgpOworICAgIHR0Y19zYXZlID0g dHRjdXIuY19jZmxhZzsJCS8qIFJlbWVtYmVyIGN1cnJlbnQgc3BlZWQuICovCisgICAgc3Bkc2F2 ID0gdHRjX3NhdmUgJiBDQkFVRDsKKyAgICBkZWJ1ZyhGMTAxLCJ0dGhhbmcgc3BlZWQiLCIiLHNw ZHNhdik7CisKKyNpZmRlZiBPX05ERUxBWQorICAgIGRlYnVnKEYxMDAsInR0aGFuZyB0dXJuaW5n IE9fTkRFTEFZIG9uIiwiIiwwKTsKKyAgICBmY250bCh0dHlmZCwgRl9TRVRGTCwgZmxhZ3MgfCBP X05ERUxBWSk7IC8qIEFjdGl2YXRlIE9fTkRFTEFZICovCisjZW5kaWYgLyogT19OREVMQVkgKi8K KworI2lmZGVmIEFUVDczMDAgLyogVGhpcyBpcyB0aGUgd2F5IGl0IGlzIFNVUFBPU0VEIHRvIHdv cmsgKi8KKyAgICB0dGN1ci5jX2NmbGFnICY9IH5DQkFVRDsJCS8qIENoYW5nZSB0aGUgc3BlZWQg dG8gemVyby4gICovCisjZWxzZQorI2lmZGVmIFJUQUlYCisgICAgdHRjdXIuY19jZmxhZyAmPSB+ Q0JBVUQ7CQkvKiBDaGFuZ2UgdGhlIHNwZWVkIHRvIHplcm8uICAqLworI2Vsc2UgICAgICAgICAg LyogVGhpcyB3YXkgcmVhbGx5IHdvcmtzIGJ1dCBtYXkgYmUgZGFuZ2Vyb3VzICovCisjaWZkZWYg dTNiMgorICAgIHR0Y3VyLmNfY2ZsYWcgPSB+KENCQVVEfENMT0NBTCk7CS8qIFNwZWNpYWwgZm9y IEFUJlQgM0IycyAqLworCQkJCQkvKiAoQ0xPQ0FMIG11c3QgYmUgT0ZGKSAqLworI2Vsc2UKKyNp ZmRlZiBTQ08zUjIJCQkJLyogU0NPIFVOSVggMy4yICovCisvKgorICBUaGlzIGlzIGNvbXBsZXRl IG5vbnNlbnNlLCBidXQgYW4gU0NPIHVzZXIgY2xhaW1lZCB0aGlzIGNoYW5nZSBtYWRlCisgIGhh bmdpbmcgdXAgd29yay4gIENvbW1lbnRzIGZyb20gb3RoZXIgU0NPIFVOSVggMy4yIHVzZXJzIHdv dWxkIGJlCisgIGFwcHJlY2lhdGVkLgorKi8KKyAgICB0dGN1ci5jX2NmbGFnID0gQ0JBVUR8QjA7 CisjZWxzZQorI2lmZGVmIEFJWFJTCQkJCS8qIEFJWCBvbiBSUy82MDAwICovCisvKgorICBDYW4n dCBzZXQgc3BlZWQgdG8gemVybyBvbiBBSVggMy4xIG9uIFJTLzYwMDAgNjQtcG9ydCBhZGFwdGVy LAorICBldmVuIHRob3VnaCB5b3UgY2FuIGRvIGl0IG9uIHRoZSBidWlsdC1pbiBwb3J0IGFuZCB0 aGUgOC0gYW5kIDE2LXBvcnQKKyAgYWRhcHRlcnMuICAoVW50ZXN0ZWQgb24gMTI4LXBvcnQgYWRh cHRlci4pCisqLworICAgIHR0Y3VyLmNfY2ZsYWcgPSBDTE9DQUx8SFVQQ0x8c3Bkc2F2OyAvKiBT cGVlZCAwIGNhdXNlcyBFSU5WQUwgKi8KKyNlbHNlCQkJCQkvKiBOb25lIG9mIHRoZSBhYm92ZSAq LworLyoKKyAgU2V0IGV2ZXJ5dGhpbmcsIGluY2x1ZGluZyB0aGUgc3BlZWQsIHRvIHplcm8sIGV4 Y2VwdCBmb3IgdGhlIENMT0NBTAorICBhbmQgSFVQQ0wgYml0cy4KKyovCisgICAgdHRjdXIuY19j ZmxhZyA9IENMT0NBTHxIVVBDTDsKKyNlbmRpZiAvKiBBSVhSUyAqLworI2VuZGlmIC8qIFNDTzNS MiAqLworI2VuZGlmIC8qIHUzYjIgKi8KKyNlbmRpZiAvKiBSVEFJWCAqLworI2VuZGlmIC8qIEFU VDczMDAgKi8KKworI2lmZGVmIENPTU1FTlQKKyAgICAvKiBhbmQgaWYgbm9uZSBvZiB0aG9zZSB3 b3JrLCB0cnkgb25lIG9mIHRoZXNlLi4uICovCisgICAgdHRjdXIuY19jZmxhZyA9IDA7CisgICAg dHRjdXIuY19jZmxhZyA9IENMT0NBTDsKKyAgICB0dGN1ci5jX2NmbGFnICY9IH4oQ0JBVUR8SFVQ Q0wpOworICAgIHR0Y3VyLmNfY2ZsYWcgJj0gfihDQkFVRHxDUkVBRCk7CisgICAgdHRjdXIuY19j ZmxhZyAmPSB+KENCQVVEfENSRUFEfEhVUENMKTsKKyAgICAvKiBvciBvdGhlciBjb21iaW5hdGlv bnMgKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisKKyNpZmRlZiBUQ1hPTkMKKyAgICBkZWJ1ZyhG MTAwLCJ0dGhhbmcgVENYT05DIiwiIiwwKTsKKyAgICBpZiAoaW9jdGwodHR5ZmQsIFRDWE9OQywg MSkgPCAwKSB7CisJZGVidWcoRjEwMSwidHRoYW5nIFRDWE9OQyBmYWlsZWQiLCIiLGVycm5vKTsK KyAgICB9CisjZW5kaWYgLyogVENYT05DICovCisKKyNpZmRlZiBUSU9DU1RBUlQKKyAgICBkZWJ1 ZyhGMTAwLCJ0dGhhbmcgVElPQ1NUQVJUIiwiIiwwKTsKKyAgICBpZiAoaW9jdGwodHR5ZmQsIFRJ T0NTVEFSVCwgMCkgPCAwKSB7CisJZGVidWcoRjEwMSwidHRoYW5nIFRJT0NTVEFSVCBmYWlsZWQi LCIiLGVycm5vKTsKKyAgICB9CisjZW5kaWYgLyogVElPQ1NUQVJUICovCisKKyAgICBpZiAoaW9j dGwodHR5ZmQsVENTRVRBRiwmdHRjdXIpIDwgMCkgeyAvKiBGYWlsIGlmIHdlIGNhbid0LiAqLwor CWRlYnVnKEYxMDEsInR0aGFuZyBUQ1NFVEFGIGZhaWxlZCIsIiIsZXJybm8pOworCWZjbnRsKHR0 eWZkLCBGX1NFVEZMLCBmbGFncyk7CS8qIFJlc3RvcmUgZmxhZ3MgKi8KKwlyZXR1cm4oLTEpOwkJ CS8qIGJlZm9yZSByZXR1cm5pbmcuICovCisgICAgfQorICAgIG1zbGVlcCgzMDApOwkJCS8qIEdp dmUgbW9kZW0gdGltZSB0byBub3RpY2UuICovCisKKyNpZm5kZWYgTk9DT1RGTUMKKworLyogTm93 LCBldmVuIHRob3VnaCBpdCBkb2Vzbid0IHNheSB0aGlzIGluIFNWSUQgb3IgYW55IG1hbiBwYWdl LCB3ZSBoYXZlICovCisvKiB0byBjbG9zZSBhbmQgcmVvcGVuIHRoZSBkZXZpY2UuICBUaGlzIGlz IG5vdCBuZWNlc3NhcnkgZm9yIGFsbCBzeXN0ZW1zLCAqLworLyogYnV0IGl0J3MgaW1wb3NzaWJs ZSB0byBwcmVkaWN0IHdoaWNoIG9uZXMgbmVlZCBpdCBhbmQgd2hpY2ggb25lcyBkb24ndC4gKi8K KworI2lmZGVmIEFUVDczMDAKKy8qCisgIFNwZWNpYWwgaGFuZGxpbmcgZm9yIEFUVCA3MzAwIFVO SVggUEMgYW5kIDNCMSwgd2hpY2ggaGF2ZSAicGhvbmUiCisgIHJlbGF0ZWQgaW9jdGwncyBmb3Ig dGhlaXIgaW50ZXJuYWwgbW9kZW1zLiAgYXR0bW9kZW0gaGFzIGdldHR5IHN0YXR1cyBhbmQKKyAg bW9kZW0taW4tdXNlIGJpdC4gIFJlcG9ydGVkbHkgdGhlIEFUVDczMDAvM0IxIFBJT0NESVNDIGNh bGwgaXMgbmVjZXNzYXJ5LAorICBidXQgYWxzbyBydWlucyB0aGUgZmlsZSBkZXNjcmlwdG9yLCBh bmQgbm8gb3RoZXIgcGhvbmUoNykgaW9jdGwgY2FsbCBjYW4gZml4CisgIGl0LiAgV2hhdGV2ZXIg aXQgZG9lcywgaXQgc2VlbXMgdG8gZXNjYXBlIGRldGVjdGlvbiB3aXRoIFBJT0NHRVRBIGFuZCBU Q0dFVEEuCisgIFRoZSBvbmx5IHdheSB0byB1bmRvIHRoZSBkYW1hZ2UgaXMgdG8gY2xvc2UgdGhl IGZkIGFuZCB0aGVuIHJlb3BlbiBpdC4KKyovCisgICAgaWYgKGF0dG1vZGVtICYgSVNNT0RFTSkg eworCWRlYnVnKEYxMDAsInR0aGFuZyBhdHRtb2RlbSBjbG9zZS9vcGVuIiwiIiwwKTsKKwlpb2N0 bCh0dHlmZCxQSU9DVU5IT0xELCZkaWFsZXIpOyAvKiBSZXR1cm4gY2FsbCB0byBoYW5kc2V0LiAq LworCWlvY3RsKHR0eWZkLFBJT0NESVNDLCZkaWFsZXIpOwkvKiBEaXNjb25uZWN0IHBob25lLiAq LworCWNsb3NlKHR0eWZkKTsJCQkvKiBDbG9zZSBhbmQgcmVvcGVuIHRoZSBmZC4gKi8KKwl0dHlm ZCA9IHByaXZfb3BuKHR0bm1zdiwgT19SRFdSIHwgT19OREVMQVkpOworCWF0dG1vZGVtICY9IH5J U01PREVNOwkJLyogUGhvbmUgbm8gbG9uZ2VyIGluIHVzZS4gKi8KKyAgICB9CisjZWxzZSAvKiAh QVRUNzMwMCAqLworLyogSXQgc2VlbXMgd2UgaGF2ZSB0byBjbG9zZSBhbmQgb3BlbiB0aGUgZGV2 aWNlIGZvciBvdGhlciBBVCZUIHN5c3RlbXMgKi8KKy8qIHRvbywgYW5kIHRoaXMgaXMgdGhlIHBs YWNlIHRvIGRvIGl0LiAgVGhlIGZvbGxvd2luZyBjb2RlIGRvZXMgdGhlICovCisvKiBmYW1vdXMg Y2xvc2Uob3BlbiguLi4pKSBtYWdpYyBieSBkZWZhdWx0LiAgSWYgdGhhdCBkb2Vzbid0IHdvcmsg Zm9yIHlvdSwgKi8KKy8qIHRoZW4gdHJ5IHVuY29tbWVudGluZyB0aGUgZm9sbG93aW5nIHN0YXRl bWVudCBvciBwdXR0aW5nIC1EQ0xTT1BOIGluICovCisvKiB0aGUgbWFrZWZpbGUgQ0ZMQUdTLiAq LworCisvKiAjZGVmaW5lIENMU09QTiAqLworCisjaWZuZGVmIFNDTzMyIC8qIE5vdCBuZWVkZWQg YnksIGFuZCBoYXJtZnVsIHRvLCBTQ08gVU5JWCAzLjIgLyBYZW5peCAyLjMgKi8KKworI2lmZGVm IE9fTkRFTEFZCisjZGVmaW5lIE9QRU5GTEdTIE9fUkRXUiB8IE9fTkRFTEFZCisjZWxzZQorI2Rl ZmluZSBPUEVORkxHUyBPX1JEV1IKKyNlbmRpZgorCisjaWZuZGVmIENMU09QTgorLyogVGhpcyBt ZXRob2QgaXMgdXNlZCBieSBkZWZhdWx0LCBpLmUuIHVubGVzcyBDTFNPUE4gaXMgZGVmaW5lZC4g Ki8KKy8qIEl0IGlzIHRob3VnaHQgdG8gYmUgc2FmZXIgYmVjYXVzZSB0aGVyZSBpcyBubyB3aW5k b3cgd2hlcmUgZ2V0dHkgKi8KKy8qIGNhbiBzZWl6ZSBjb250cm9sIG9mIHRoZSBkZXZpY2UuICBU aGUgZHJhd2JhY2sgaXMgdGhhdCBpdCBtaWdodCBub3Qgd29yay4gKi8KKworICAgIGRlYnVnKEYx MDEsInR0aGFuZyBjbG9zZShvcGVuKCkpLCBPUEVORkxHUyIsIiIsT1BFTkZMR1MpOworICAgIGNs b3NlKHByaXZfb3BuKHR0bm1zdiwgT1BFTkZMR1MpKTsKKworI2Vsc2UKKy8qIFRoaXMgbWV0aG9k IGlzIHVzZWQgaWYgeW91ICNkZWZpbmUgQ0xTT1BOLiAgSXQgaXMgbW9yZSBsaWtlbHkgdG8gd29y ayAqLworLyogdGhhbiB0aGUgcHJldmlvdXMgbWV0aG9kLCBidXQgaXQncyBhbHNvIG1vcmUgZGFu Z2Vyb3VzLiAqLworCisgICAgZGVidWcoRjEwMSwidHRoYW5nIGNsb3NlL29wZW4sIE9QRU5GTEdT IiwiIixPUEVORkxHUyk7CisgICAgY2xvc2UodHR5ZmQpOworICAgIG1zbGVlcCgxMCk7CisgICAg dHR5ZmQgPSBwcml2X29wbih0dG5tc3YsIE9QRU5GTEdTKTsJLyogT3BlbiBpdCBhZ2FpbiAqLwor I2VuZGlmIC8qIENMU09QTiAqLworI3VuZGVmIE9QRU5GTEdTCisKKyNlbmRpZiAvKiBTQ08zMiAq LworI2VuZGlmIC8qIEFUVDczMDAgKi8KKworI2VuZGlmIC8qIE5PQ09URk1DICovCisKKy8qIE5v dyBwdXQgYWxsIGZsYWdzICYgbW9kZXMgYmFjayB0aGUgd2F5IHdlIGZvdW5kIHRoZW0uICovCisv KiAoRG9lcyB0aGUgb3JkZXIgb2YgaW9jdGwgJiBmY250bCBtYXR0ZXIgPyApICovCisKKyAgICBk ZWJ1ZyhGMTAwLCJ0dGhhbmcgcmVzdG9yZSBzZXR0aW5ncyIsIiIsMCk7CisgICAgdHRjdXIuY19j ZmxhZyA9IHR0Y19zYXZlOwkJLyogR2V0IG9sZCBzcGVlZCBiYWNrLiAqLworICAgIGlmIChpb2N0 bCh0dHlmZCxUQ1NFVEFGLCZ0dGN1cikgPCAwKSAvKiBpb2N0bCBwYXJhbWV0ZXJzLiAqLworICAg ICAgcmV0dXJuKC0xKTsKKyNpZmRlZiBPX05ERUxBWQorLyoKKyAgVGhpcyBpcyByZXF1aXJlZCBm b3IgSUJNIFJUIGFuZCBSUy82MDAwLCBwcm9iYWJseSBoZWxwcyBlbHNld2hlcmUgdG9vICg/KS4K KyAgQWZ0ZXIgY2xvc2luZyBhIG1vZGVtIGxpbmUsIHRoZSBtb2RlbSB3aWxsIHByb2JhYmx5IG5v dCBiZSBhc3NlcnRpbmcKKyAgY2FycmllciBhbnkgbW9yZSwgc28gd2Ugc2hvdWxkIG5vdCByZXF1 aXJlIGNhcnJpZXIgYW55IG1vcmUuICBJZiB0aGlzCisgIGNhdXNlcyB0cm91YmxlIG9uIG5vbi1J Qk0gVU5JWGVzLCBjaGFuZ2UgdGhlICNpZmRlZiB0byB1c2UgX0lCTVIyIHJhdGhlcgorICB0aGFu IE9fTkRFTEFZLgorKi8KKyAgICBmbGFncyAmPSB+T19OREVMQVk7CQkJLyogRG9uJ3QgcmVxdWly ZSBjYXJyaWVyIG9uIHJlb3BlbiAqLworI2VuZGlmIC8qIE9fTkRFTEFZICovCisgICAgaWYgKGZj bnRsKHR0eWZkLEZfU0VURkwsZmxhZ3MpIDwgMCkJLyogZmNudGwgcGFyYW1ldGVycyAqLworICAg ICAgcmV0dXJuKC0xKTsKKworICAgIHJldHVybigxKTsKKyNlbmRpZiAvKiBub3QgSFBVWCAqLwor I2VuZGlmIC8qIEFUVFNWICovCisjZW5kaWYgLyogQlNENDRPUlBPU0lYICovCisjZW5kaWYgLyog SFVQX1BPU0lYICovCisjZW5kaWYgLyogTk9MT0NBTCAqLworfQorCisvKgorICBNYWpvciBjaGFu Z2UgaW4gNUEoMTc0KS4gIFdlIHVzZWQgdG8gdXNlIExQQVNTOCwgaWYgaXQgd2FzIGRlZmluZWQs IHRvCisgIGFsbG93IDgtYml0IGRhdGEgYW5kIFhvbi9Yb2ZmIGZsb3cgY29udHJvbCBhdCB0aGUg c2FtZSB0aW1lLiAgQnV0IHRoaXMKKyAgTFBBU1M4IGJ1c2luZXNzIHNlZW1zIHRvIGhhdmUgYmVl biBjYXVzaW5nIHRyb3VibGUgZm9yIGV2ZXJ5Ym9keSBidXQgbWUhCisgIEZvciBleGFtcGxlLCBB bm5leCB0ZXJtaW5hbCBzZXJ2ZXJzLCBjb21tb25seSB1c2VkIHdpdGggRW5jb3JlIGNvbXB1dGVy cywKKyAgZG8gbm90IHN1cHBvcnQgTFBBU1M4IGV2ZW4gdGhvdWdoIHRoZSBFbmNvcmUgaXRzZWxm IGRvZXMuICBEaXR0byBmb3IgbWFueQorICBvdGhlciB0ZXJtaW5hbCBzZXJ2ZXJzLCBURUxORVQg Y29ubmVjdGlvbnMsIHJsb2dpbiBjb25uZWN0aW9ucywgZXRjIGV0Yy4KKyAgTm93LCByZXBvcnRl ZGx5LCBldmVuIHZhbmlsbGEgNC4zIEJTRCBzeXN0ZW1zIGNhbid0IGRvIHRoaXMgcmlnaHQgb24g dGhlaXIKKyAgc2VyaWFsIGxpbmVzLCBldmVuIHRob3VnaCBMUEFTUzggaXMgYSBmZWF0dXJlIG9m IDQuM0JTRC4gIFNvIGxldCdzIHR1cm4gaXQKKyAgb2ZmIGZvciBldmVyeWJvZHkuICBUaGF0IG1l YW5zIHdlIGdvZXMgYmFjayB0byB1c2luZyByYXcgbW9kZSwgd2l0aCBubworICBmbG93IGNvbnRy b2wuICBQaG9vZXkuCisKKyAgTk9URTogVGhpcyBtdXN0IGJlIGRvbmUgYmVmb3JlIHRoZSBmaXJz dCByZWZlcmVuY2UgdG8gTFBBU1M4IGluIHRoaXMgZmlsZSwKKyAgYW5kIGFmdGVyIHRoZSBsYXN0 ICNpbmNsdWRlIHN0YXRtZW50LgorKi8KKyNpZmRlZiBMUEFTUzgKKyN1bmRlZiBMUEFTUzgKKyNl bmRpZiAvKiBMUEFTUzggKi8KKworLyogIFQgVCBSIEUgUyAgLS0gIFJlc3RvcmUgdGVybWluYWwg dG8gIm5vcm1hbCIgbW9kZS4gICovCisKKy8qIHNrZUBwa21hYi5zZTogVGhlcmUgYXJlIHR3byBj aG9pY2VzIGZvciB3aGF0IHRoaXMgZnVuY3Rpb24gc2hvdWxkIGRvLgorICogKDEpIFJlc3RvcmUg dGhlIHR0eSB0byBjdXJyZW50ICJub3JtYWwiIG1vZGUsIHdpdGggY2FycmllciB0cmVhdG1lbnQK KyAqIGFjY29yZGluZyB0byB0dGNhcnIsIHRvIGJlIHVzZWQgYWZ0ZXIgZXZlcnkga2VybWl0IGNv bW1hbmQuICgyKSBSZXN0b3JlCisgKiB0aGUgdHR5IHRvIHRoZSBzdGF0ZSBpdCB3YXMgaW4gYmVm b3JlIGtlcm1pdCBvcGVuZWQgaXQuIFRoZXNlIGNob2ljZXMKKyAqIGNvbmZsaWN0LCBzaW5jZSB0 dG9sZCBjYW4ndCBob2xkIGJvdGggY2hvaWNlcyBvZiB0dHkgcGFyYW1ldGVycy4gIHR0cmVzKCkK KyAqIGlzIGN1cnJlbnRseSBiZWluZyBjYWxsZWQgYXMgaW4gY2hvaWNlICgxKSwgYnV0IHR0b2xk IGJhc2ljYWxseSBob2xkcworICogdGhlIGluaXRpYWwgcGFyYW1ldGVycywgYXMgaW4gKDIpLCBh bmQgdGhlIGRlc2NyaXB0aW9uIGF0IHRoZSBiZWdpbm5pbmcKKyAqIG9mIHRoaXMgZmlsZSBzYXlz ICgyKS4KKyAqCisgKiBJIGRvbid0IHRoaW5rIHJlc3RvcmluZyB0dHkgcGFyYW1ldGVycyBhZnRl ciBhbGwga2VybWl0IGNvbW1hbmRzIG1ha2VzCisgKiBtdWNoIG9mIGEgZGlmZmVyZW5jZS4gIFJl c3RvcmluZyB0aGVtIHVwb24gZXhpdCBmcm9tIGtlcm1pdCBtYXkgYmUgb2YKKyAqIHNvbWUgdXNl IGluIHNvbWUgY2FzZXMgKHdoZW4gdGhlIGxpbmUgaXMgbm90IHJlc3RvcmVkIGF1dG9tYXRpY2Fs bHkgb24KKyAqIGNsb3NlLCBieSB0aGUgb3BlcmF0aW5nIHN5c3RlbSkuCisgKgorICogSSBjYW4n dCBjaG9vc2Ugd2hpY2ggb25lIGl0IHNob3VsZCBiZSwgc28gSSBoYXZlbid0IGNoYW5nZWQgaXQu IEl0CisgKiBwcm9iYWJseSB3b3JrcyBhcyBpdCBpcywgdG9vLiBJdCB3b3VsZCBwcm9iYWJseSBl dmVuIHdvcmsgZXZlbiB3aXRoCisgKiB0dHJlcygpIGVudGlyZWx5IGRlbGV0ZWQuLi4KKyAqCisg KiAoZnJvbSBmZGM6IEFjdHVhbGx5LCB0aGlzIGZ1bmN0aW9uIG9wZXJhdGVzIGluIHJlbW90ZSBt b2RlIHRvbywgc28KKyAqIGl0IHJlc3RvcmVzIHRoZSBjb25zb2xlIChjb21tYW5kKSB0ZXJtaW5h bCB0byB3aGF0ZXZlciBtb2RlIGl0IHdhcworICogaW4gYmVmb3JlIHBhY2tldCBvcGVyYXRpb25z IGJlZ2FuLCBzbyB0aGF0IGNvbW1hbmRzIHdvcmsgcmlnaHQgYWdhaW4uKQorICovCitpbnQKK3R0 cmVzKCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXN0b3JlIHRoZSB0dHkg dG8gbm9ybWFsLiAqLworICAgIGludCB4OworCisgICAgaWYgKHR0eWZkIDwgMCkgcmV0dXJuKC0x KTsgICAgICAgICAgLyogTm90IG9wZW4uICovCisKKyAgICBpZiAodHRmZGZsZykgcmV0dXJuKDAp OwkJLyogRG9uJ3QgbWVzcyB3aXRoIHRlcm1pbmFsIG1vZGVzIGlmICovCisJCQkJCS8qIHdlIGdv dCB0dHlmZCBmcm9tIGFub3RoZXIgcHJvY2VzcyAqLworI2lmZGVmCU5FVENPTk4KKyAgICBpZiAo bmV0Y29ubikgewkJCS8qIE5ldHdvcmsgY29ubmVjdGlvbiAqLworICAgICAgICB0dnRmbGcgPSAw OworI2lmZGVmIFRDUFNPQ0tFVAorI2lmZGVmIFRDUF9OT0RFTEFZCisgICAgICAgIHsKKwkgICAg ZXh0ZXJuIGludCB0Y3Bfbm9kZWxheTsJLyogSnVzdCBwdXQgdGhpcyBiYWNrIGlmIG5lY2Vzc2Fy eSAqLworCSAgICBpZiAodHRuZXQgPT0gTkVUX1RDUEIpIHsKKwkJaWYgKG5vZGVsYXlfc2F2ID4g LTEpIHsKKwkJICAgIG5vX2RlbGF5KHR0eWZkLG5vZGVsYXlfc2F2KTsKKwkJICAgIG5vZGVsYXlf c2F2ID0gLTE7CisJCX0KKwkgICAgfQorICAgICAgICB9CisjZW5kaWYgLyogVENQX05PREVMQVkg Ki8KKyNpZmRlZiBUTl9DT01QT1JUCisgICAgICAgIGlmIChpc3RuY29tcG9ydCgpKSB7CisgICAg ICAgICAgICBpbnQgcmMgPSAtMTsKKyAgICAgICAgICAgIGlmICgocmMgPSB0bnNldGZsb3codHRm bG93KSkgPCAwKQorCSAgICAgIHJldHVybihyYyk7CisgICAgICAgICAgICBpZiAodHRzcGVlZCA8 PSAwKSAKKwkgICAgICB0dHNwZWVkID0gdG5jX2dldF9iYXVkKCk7CisgICAgICAgICAgICBlbHNl IGlmICgocmMgPSB0bmNfc2V0X2JhdWQodHRzcGVlZCkpIDwgMCkKKwkgICAgICByZXR1cm4ocmMp OworICAgICAgICAgICAgdG5jX3NldF9kYXRhc2l6ZSg4KTsKKwkgICAgdG5jX3NldF9zdG9wc2l6 ZShzdG9wYml0cyk7CisKKyNpZmRlZiBIV1BBUklUWQorICAgICAgICAgICAgaWYgKGh3cGFyaXR5 KSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChod3Bhcml0eSkgeworCQkgIGNhc2UgJ2UnOgkJ CS8qIEV2ZW4gKi8KKyAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEwMCwidHRyZXMgOCBiaXRz ICsgZXZlbiBwYXJpdHkiLCIiLDApOworICAgICAgICAgICAgICAgICAgICB0bmNfc2V0X3Bhcml0 eSgzKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisJCSAgY2FzZSAnbyc6CQkJLyogT2Rk ICovCisgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDAsInR0cmVzIDggYml0cyArIG9kZCBw YXJpdHkiLCIiLDApOworICAgICAgICAgICAgICAgICAgICB0bmNfc2V0X3Bhcml0eSgyKTsKKyAg ICAgICAgICAgICAgICAgICAgYnJlYWs7CisJCSAgY2FzZSAnbSc6CQkJLyogTWFyayAqLworICAg ICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJ0dHJlcyA4IGJpdHMgKyBpbnZhbGlkIHBhcml0 eTogbWFyayIsIiIsMCk7CisgICAgICAgICAgICAgICAgICAgIHRuY19zZXRfcGFyaXR5KDQpOwor ICAgICAgICAgICAgICAgICAgICBicmVhazsKKwkJICBjYXNlICdzJzoJCQkvKiBTcGFjZSAqLwor ICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJ0dHJlcyA4IGJpdHMgKyBpbnZhbGlkIHBh cml0eTogc3BhY2UiLCIiLDApOworICAgICAgICAgICAgICAgICAgICB0bmNfc2V0X3Bhcml0eSg1 KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgfSBlbHNlCisjZW5kaWYgLyogSFdQQVJJVFkgKi8KKwkgICAgeworICAgICAgICAgICAg ICAgIHRuY19zZXRfcGFyaXR5KDEpOyAgICAgICAgICAgICAgLyogTm9uZSAqLworICAgICAgICAg ICAgfQorICAgICAgICAgICAgdHZ0ZmxnID0gMDsKKyAgICAgICAgICAgIHJldHVybigwKTsKKyAg ICAgICAgfQorI2VuZGlmIC8qIFROX0NPTVBPUlQgKi8KKyNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8K KwlyZXR1cm4oMCk7CisgICAgfQorI2VuZGlmCS8qIE5FVENPTk4gKi8KKyNpZmRlZiBORVRDTUQK KyAgICBpZiAodHRwaXBlKSByZXR1cm4oMCk7CisjZW5kaWYgLyogTkVUQ01EICovCisjaWZkZWYg TkVUUFRZCisgICAgaWYgKHR0cHR5KSByZXR1cm4oMCk7CisjZW5kaWYgLyogTkVUUFRZICovCisK Ky8qIFJlYWwgdGVybWluYWwgZGV2aWNlLCBzbyByZXN0b3JlIGl0cyBvcmlnaW5hbCBtb2RlcyAq LworCisjaWZkZWYgQlNENDRPUlBPU0lYCQkJLyogRm9yIFBPU0lYIGxpa2UgdGhpcyAqLworICAg IGRlYnVnKEYxMDAsInR0cmVzIEJTRDQ0T1JQT1NJWCIsIiIsMCk7CisgICAgeCA9IHRjc2V0YXR0 cih0dHlmZCxUQ1NBRFJBSU4sJnR0b2xkKTsKKyNlbHNlCQkJCQkvKiBGb3IgYWxsIG90aGVycy4u LiAqLworI2lmZGVmIEFUVFNWICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZvciBBVCZU IHZlcnNpb25zLi4uICovCisgICAgZGVidWcoRjEwMCwidHRyZXMgQVRUU1YiLCIiLDApOworICAg IHggPSBpb2N0bCh0dHlmZCxUQ1NFVEFXLCZ0dG9sZCk7CS8qIFJlc3RvcmUgdHR5IG1vZGVzIHRo aXMgd2F5LiAqLworI2Vsc2UKKy8qIEhlcmUgd2UgcmVzdG9yZSB0aGUgbW9kZXMgZm9yIEJTRCAq LworCisjaWZkZWYgTFBBU1M4CQkJCS8qIFVuZG8gInBhc3M4IiBpZiBpdCB3ZXJlIGRvbmUgKi8K KyAgICBpZiAobG1vZGVmKSB7CisJaWYgKGlvY3RsKHR0eWZkLFRJT0NMU0VULCZsbW9kZSkgPCAw KQorCSAgZGVidWcoRjEwMCwidHRyZXMgVElPQ0xTRVQgZmFpbGVkIiwiIiwwKTsKKwllbHNlCisJ ICBkZWJ1ZyhGMTAwLCJ0dHJlcyBUSU9DTFNFVCBvayIsIiIsMCk7CisgICAgfQorI2VuZGlmIC8q IExQQVNTOCAqLworCisjaWZkZWYgQ0tfRFRSQ1RTCQkgICAvKiBVbmRvIGhhcmR3YXJlIGZsb3cg aWYgaXQgd2VyZSBkb25lICovCisgICAgaWYgKGxtb2RlZikgeworIAlpZiAoaW9jdGwodHR5ZmQs VElPQ0xTRVQsJmxtb2RlKSA8IDApCisgCSAgZGVidWcoRjEwMCwidHRyZXMgVElPQ0xTRVQgZmFp bGVkIiwiIiwwKTsKKyAJZWxzZQorIAkgIGRlYnVnKEYxMDAsInR0cmVzIFRJT0NMU0VUIG9rIiwi IiwwKTsKKyAgICB9CisjZW5kaWYgLyogQ0tfRFRSQ1RTICovCisKKyNpZmRlZiBUSU9DR0VUQwkJ CQkvKiBQdXQgYmFjayBzcGVjaWFsIGNoYXJhY3RlcnMgKi8KKyAgICBpZiAodGNoYXJmICYmICh4 bG9jYWwgPT0gMCkpIHsKKwlpZiAoaW9jdGwodHR5ZmQsVElPQ1NFVEMsJnRjaG9sZCkgPCAwKQor CSAgZGVidWcoRjEwMCwidHRyZXMgVElPQ1NFVEMgZmFpbGVkIiwiIiwwKTsKKwllbHNlCisJICBk ZWJ1ZyhGMTAwLCJ0dHJlcyBUSU9DU0VUQyBvayIsIiIsMCk7CisgICAgfQorI2VuZGlmIC8qIFRJ T0NHRVRDICovCisKKyNpZmRlZiBUSU9DR0xUQwkJCQkvKiBQdXQgYmFjayBsb2NhbCBzcGVjaWFs IGNoYXJhY3RlcnMgKi8KKyAgICBpZiAobHRjaGFyZiAmJiAoeGxvY2FsID09IDApKSB7CisJaWYg KGlvY3RsKHR0eWZkLFRJT0NTTFRDLCZsdGNob2xkKSA8IDApCisJICBkZWJ1ZyhGMTAwLCJ0dHJl cyBUSU9DU0xUQyBmYWlsZWQiLCIiLDApOworCWVsc2UKKwkgIGRlYnVnKEYxMDAsInR0cmVzIFRJ T0NTTFRDIG9rIiwiIiwwKTsKKyAgICB9CisjZW5kaWYgLyogVElPQ0dMVEMgKi8KKworI2lmZGVm IEJFTExWMTAKKyAgICBkZWJ1ZyhGMTAwLCJ0dHJlcyBCRUxMVjEwIiwiIiwwKTsKKyAgICB4ID0g aW9jdGwodHR5ZmQsVElPQ1NFVFAsJnR0b2xkKTsJLyogUmVzdG9yZSBib3RoIHN0cnVjdHMgKi8K KyAgICB4ID0gaW9jdGwodHR5ZmQsVElPQ1NERVYsJnRkb2xkKTsKKyNlbHNlCisgICAgZGVidWco RjEwMCwidHRyZXMgc3R0eSIsIiIsMCk7CisgICAgeCA9IHN0dHkodHR5ZmQsJnR0b2xkKTsgICAg ICAgICAgICAgLyogUmVzdG9yZSB0dHkgbW9kZXMgdGhlIG9sZCB3YXkuICovCisjZW5kaWYgLyog QkVMTFYxMCAqLworCisgICAgaWYgKCF4bG9jYWwpCisgICAgICBtc2xlZXAoMTAwKTsJCQkvKiBU aGlzIHJlcGxhY2VzIHNsZWVwKDEpLi4uICovCisJCQkJCS8qIFB1dCBiYWNrIHNsZWVwKDEpIGlm IHR0eSBpcyAqLworCQkJCQkvKiBtZXNzZWQgdXAgYWZ0ZXIgY2xvc2UuICovCisjZW5kaWYgLyog QVRUU1YgKi8KKyNlbmRpZiAvKiBCU0Q0NE9SUE9TSVggKi8KKworICAgIGRlYnVnKEYxMDEsInR0 cmVzIHJlc3VsdCIsIiIseCk7CisjaWZuZGVmIFFOWAorICAgIGlmICh4IDwgMCkgZGVidWcoRjEw MSwidHRyZXMgZXJybm8iLCIiLGVycm5vKTsKKyNlbmRpZiAvKiBRTlggKi8KKworI2lmZGVmIEFJ WFJTCisjaWZuZGVmIEFJWDQxCisgICAgeCA9IGlvY3RsKHR0eWZkLCB0dGxkICYgMSA/IFRYQURE Q0QgOiBUWERFTENELCAicnRzIik7CisgICAgZGVidWcoRjEwMSwidHRyZXMgQUlYIGxpbmUgZGlz Y2lwbGluZSBydHMgcmVzdG9yZSIsIiIseCk7CisjZW5kaWYgLyogQUlYNDEgKi8KKyNlbmRpZiAv KiBBSVhSUyAqLworCisjaWZkZWYgQlNENDEKKyAgICBpZiAodHRsZCA+IC0xKSB7CQkJLyogUHV0 IGJhY2sgbGluZSBkaXNjaXBsaW5lICovCisJeCA9IGlvY3RsKHR0eWZkLCBUSU9DU0VURCwgJnR0 bGQpOworCWRlYnVnKEYxMDEsInR0cmVzIEJTRDQxIGxpbmUgZGlzY2lwbGluZSByZXN0b3JlIiwi Iix4KTsKKwlpZiAoeCA8IDApIGRlYnVnKEYxMDEsIi4uLmlvY3RsIGVycm5vIiwiIixlcnJubyk7 CisJdHRsZCA9IC0xOworICAgIH0KKyNlbmRpZiAvKiBCU0Q0MSAqLworCisjaWZkZWYgc29ueV9u ZXdzCisgICAgeCA9IHhsb2NhbCA/IGttX2V4dCA6IGttX2NvbjsJLyogUmVzdG9yZSBLYW5qaSBt b2RlLiAqLworICAgIGlmICh4ICE9IC0xKSB7CQkJLyogTWFrZSBzdXJlIHdlIGtub3cgb3JpZ2lu YWwgbW9kZXMuICovCisJaWYgKGlvY3RsKHR0eWZkLFRJT0NLU0VULCAmeCkgPCAwKSB7CisJICAg IHBlcnJvcigidHRyZXMgY2FuJ3Qgc2V0IEthbmppIG1vZGUiKTsKKwkgICAgZGVidWcoRjEwMSwi dHRyZXMgZXJyb3Igc2V0dGluZyBLYW5qaSBtb2RlIiwiIix4KTsKKwkgICAgcmV0dXJuKC0xKTsK Kwl9CisgICAgfQorICAgIGRlYnVnKEYxMDAsInR0cmVzIHNldCBLYW5qaSBtb2RlIG9rIiwiIiww KTsKKyNlbmRpZiAvKiBzb255X25ld3MgKi8KKworICAgIHR2dGZsZyA9IDA7CQkJCS8qIEludmFs aWRhdGUgdGVybWluYWwgbW9kZSBzZXR0aW5ncyAqLworICAgIGRlYnVnKEYxMDEsInR0cmVzIHJl dHVybiBjb2RlIiwiIix4KTsKKyAgICByZXR1cm4oeCk7Cit9CisKKyNpZm5kZWYgTk9VVUNQCisK Ky8qICBUIFQgQyBIIEsgUCBJIEQgIC0tICBDaGVjayBsb2NrZmlsZSBwaWQgICovCisvKgorICBS ZWFkIHBpZCBmcm9tIGxvY2tmaWxlIG5hbWVkIGYsIGNoZWNrIHRoYXQgaXQncyBzdGlsbCB2YWxp ZC4KKyAgSWYgc28sIHJldHVybiAxLgorICBPbiBmYWlsdXJlIHRvIHJlYWQgcGlkLCByZXR1cm4g MS4KKyAgT3RoZXJ3aXNlLCB0cnkgdG8gZGVsZXRlIGxvY2tmaWxlIGYgYW5kIHJldHVybiAwIGlm IHN1Y2Nlc3NmdWwsIGVsc2UgMS4KKyovCitzdGF0aWMgaW50Cit0dGNoa3BpZChmKSBjaGFyICpm OyB7CisgICAgaW50IHBpZCwgbXlwaWQsIHg7CisgICAgcGlkID0gdHRycGlkKGYpOwkJCS8qIFJl YWQgcGlkIGZyb20gZmlsZS4gKi8KKyAgICBpZiAocGlkID4gLTEpIHsJCQkvKiBJZiB3ZSB3ZXJl IGFibGUgdG8gcmVhZCB0aGUgcGlkLi4gKi8KKwlkZWJ1ZyhGMTAxLCJ0dGNoa3BpZCBsb2NrIHBp ZCIsIiIscGlkKTsKKwllcnJubyA9IDA7CQkJLyogU2VlIGlmIHByb2Nlc3Mgc3RpbGwgZXhpc3Rz LiAqLworCW15cGlkID0gKGludClnZXRwaWQoKTsJCS8qIEdldCBteSBvd24gcGlkLiAqLworCWRl YnVnKEYxMDEsInR0Y2hrcGlkIG15IHBpZCIsIiIsbXlwaWQpOworCWlmIChwaWQgPT0gbXlwaWQp IHsJCS8qIEl0J3MgbWUhICovCisJICAgIHggPSAtMTsJCQkvKiBTbyBJIGNhbiBkZWxldGUgaXQg Ki8KKwkgICAgZXJybm8gPSBFU1JDSDsJCS8qIHByZXRlbmQgaXQncyBpbnZhbGlkICovCisJfSBl bHNlIHsJCQkvKiBJdCdzIG5vdCBtZSAqLworCSAgICB4ID0ga2lsbCgoUElEX1QpcGlkLCAwKTsJ LyogU2VlIGlmIGl0J3MgYSBsaXZlIHByb2Nlc3MgKi8KKwkgICAgZGVidWcoRjEwMSwidHRjaGtw aWQga2lsbCBlcnJubyIsIiIsZXJybm8pOworCX0KKwlkZWJ1ZyhGMTAxLCJ0dGNoa3BpZCBwaWQg dGVzdCIsIiIseCk7CisJaWYgKHggPCAwICYmIGVycm5vID09IEVTUkNIKSB7IC8qIHBpZCBpcyBp bnZhbGlkICovCisJICAgIGRlYnVnKEYxMTEsInJlbW92aW5nIHN0YWxlIGxvY2siLGYscGlkKTsK KwkgICAgaWYgKCFiYWNrZ3JkKQorCSAgICAgIHByaW50ZigiUmVtb3Zpbmcgc3RhbGUgbG9jayAl cyAocGlkICVkIHRlcm1pbmF0ZWQpXG4iLCBmLCBwaWQpOworCSAgICBwcml2X29uKCk7CisJICAg IHggPSB1bmxpbmsoZik7CQkvKiBSZW1vdmUgdGhlIGxvY2tmaWxlLiAqLworCSAgICBwcml2X29m ZigpOworCSAgICBkZWJ1ZyhGMTExLCJ0dGNoa3BpZCB1bmxpbmsiLGYseCk7CisJICAgIGlmICh4 ID4gLTEpCisJICAgICAgcmV0dXJuKDApOwkJLyogRGV2aWNlIGlzIG5vdCBsb2NrZWQgYWZ0ZXIg YWxsICovCisJICAgIGVsc2UgaWYgKCFiYWNrZ3JkKQorCSAgICAgIHBlcnJvcihmKTsKKwl9CisJ cmV0dXJuKDEpOworICAgIH0KKyAgICByZXR1cm4oMSk7CQkJCS8qIEZhaWx1cmUgdG8gcmVhZCBw aWQgKi8KK30KKworI2lmZGVmIEhQVVgKKworLyogQWxpYXNlcyAoZGlmZmVyZW50IGRyaXZlcnMp IGZvciBIUC1VWCBkaWFsb3V0IGRldmljZXM6ICovCisKK3N0YXRpYyBjaGFyICpkZXZwcmVmaXhb XSA9IHsgInR0eSIsICJ0dHlkIiwgImN1bCIsICJjdWEiLCAiY3VhZCIsICJjdWxkIiwgIiIgfTsK K3N0YXRpYyBpbnQgdHR5ZGV4aXN0cyA9IDA7CisKKyNlbmRpZiAvKiBIUFVYICovCisKKy8qICBU IFQgUiBQIEkgRCAgLS0gIFJlYWQgcGlkIGZyb20gbG9ja2ZpbGUgIm5hbWUiICovCisKK3N0YXRp YyBpbnQKK3R0cnBpZChuYW1lKSBjaGFyICpuYW1lOyB7CisgICAgbG9uZyBsZW47CisgICAgaW50 IHgsIGZkLCBwaWQ7CisgICAgc2hvcnQgc3BpZDsKKyAgICBjaGFyIGJ1ZlszMl07CisKKyAgICBk ZWJ1ZyhGMTEwLCJ0dHJwaWQiLG5hbWUsMCk7CisgICAgaWYgKCFuYW1lKSByZXR1cm4oLTEpOwor ICAgIGlmICghKm5hbWUpIHJldHVybigtMSk7CisgICAgcHJpdl9vbigpOworICAgIGxlbiA9IHpj aGtpKG5hbWUpOwkJCS8qIEdldCBmaWxlIGxlbmd0aCAqLworICAgIHByaXZfb2ZmKCk7CisgICAg ZGVidWcoRjEwMSwidHRycGlkIHpjaGtpIiwiIixsZW4pOworICAgIGlmIChsZW4gPCAwKQorICAg ICAgcmV0dXJuKC0xKTsKKyAgICBpZiAobGVuID4gMzEpCisgICAgICByZXR1cm4oLTEpOworICAg IHByaXZfb24oKTsKKyAgICBmZCA9IG9wZW4obmFtZSxPX1JET05MWSk7CQkvKiBUcnkgdG8gb3Bl biBsb2NrZmlsZS4gKi8KKyAgICBwcml2X29mZigpOworICAgIGRlYnVnKEYxMDEsInR0cnBpZCBm ZCIsIiIsZmQpOworICAgIGlmIChmZCA8PSAwKQorICAgICAgcmV0dXJuKC0xKTsKKy8qCisgIEhl cmUgd2UgdHJ5IHRvIGJlIGZsZXhpYmxlIGFuZCBhbGxvdyBmb3IgYWxsIGRpZmZlcmVudCBiaW5h cnkgYW5kIHN0cmluZworICBmb3JtYXRzIGF0IHJ1bnRpbWUsIHJhdGhlciB0aGFuIGEgc3BlY2lm aWMgZm9ybWF0IGZvciBlYWNoIGNvbmZpZ3VyYXRpb24KKyAgaGFyZHdpcmVkIGF0IGNvbXBpbGUg dGltZS4KKyovCisgICAgcGlkID0gLTE7CisjaWZuZGVmIENPSEVSRU5UCisvKgorICBDT0hFUkVO VCB1c2VzIGEgc3RyaW5nIFBJRCBidXQgd2l0aG91dCBsZWFkaW5nIHNwYWNlcyBvciAwJ3MsIHNv IHRoZXJlIGlzCisgIG5vIHdheSB0byB0ZWxsIGZyb20gdGhlIGZpbGUncyBsZW5ndGggd2hldGhl ciBpdCBjb250YWlucyBhIHN0cmluZyBvciBiaW5hcnkKKyAgcGlkLiAgU28gZm9yIENPSEVSRU5U IG9ubHksIHdlIG9ubHkgYWxsb3cgc3RyaW5nIHBpZHMuICBGb3IgYWxsIG90aGVycywgd2UKKyAg ZGVjaWRlIGJhc2VkIG9uIHRoZSBzaXplIG9mIHRoZSBsb2NrZmlsZS4KKyovCisgICAgaWYgKGxl biA+IDQpIHsJCQkvKiBJZiBmaWxlID4gNCBieXRlcyBpdCdzIGEgc3RyaW5nICovCisjZW5kaWYg LyogQ09IRVJFTlQgKi8KKwl4ID0gcmVhZChmZCxidWYsKGludClsZW4pOworCWRlYnVnKEYxMTEs InR0cnBpZCBzdHJpbmcgcmVhZCIsYnVmLHgpOworCWlmICh4IDwgMCkgeworCSAgICBwaWQgPSAt MTsKKwl9IGVsc2UgeworCSAgICBidWZbMzFdID0gJ1wwJzsKKwkgICAgeCA9IHNzY2FuZihidWYs IiVkIiwmcGlkKTsJLyogR2V0IHRoZSBpbnRlZ2VyIHBpZCBmcm9tIGl0LiAqLworCX0KKyNpZm5k ZWYgQ09IRVJFTlQKKyAgICB9IGVsc2UgaWYgKGxlbiA9PSA0KSB7CQkvKiA0IGJ5dGVzIHNvIGJp bmFyeSAqLworCXggPSByZWFkKGZkLCAoY2hhciAqKSZwaWQsIDQpOwkvKiBSZWFkIHRoZSBieXRl cyBpbnRvIGFuIGludCAqLworCWRlYnVnKEYxMDEsInR0cnBpZCBpbnRlZ2VyIHJlYWQiLCIiLHgp OworCWlmICh4IDwgNCkKKwkgIHBpZCA9IC0xOworICAgIH0gZWxzZSBpZiAobGVuID09IDIpIHsJ CS8qIDIgYnl0ZXMgYmluYXJ5ICovCisJeCA9IHJlYWQoZmQsIChjaGFyICopJnNwaWQsIDIpOwkv KiBSZWFkIHRoZSBieXRlcyBpbnRvIGEgc2hvcnQgKi8KKwlkZWJ1ZyhGMTAxLCJ0dHJwaWQgc2hv cnQgcmVhZCIsIiIseCk7CisJaWYgKHggPCAyKQorCSAgcGlkID0gLTE7CisJZWxzZQorCSAgcGlk ID0gc3BpZDsKKyAgICB9IGVsc2UKKyAgICAgIHBpZCA9IC0xOworI2VuZGlmIC8qIENPSEVSRU5U ICovCisgICAgY2xvc2UoZmQpOwkJCQkvKiBDbG9zZSB0aGUgbG9ja2ZpbGUgKi8KKyAgICBkZWJ1 ZyhGMTAxLCJ0dHJwaWQgcGlkIiwiIixwaWQpOworICAgIHJldHVybihwaWQpOworfQorI2VuZGlm IC8qIE5PVVVDUCAqLworCisvKiAgVCBUIEwgTyBDIEsgICovCisKKy8qCisgIFRoaXMgZnVuY3Rp b24gYXR0ZW1wdHMgdG8gY29vcmRpbmF0ZSB1c2Ugb2YgdGhlIGNvbW11bmljYXRpb24gZGV2aWNl IHdpdGgKKyAgb3RoZXIgY29waWVzIG9mIEtlcm1pdCBhbmQgYW55IG90aGVyIHByb2dyYW0gdGhh dCBmb2xsb3dzIHRoZSBVVUNQCisgIGRldmljZS1sb2NraW5nIGNvbnZlbnRpb25zLCB3aGljaCwg dW5mb3J0dW5hdGVseSwgdmFyeSBhbW9uZyBkaWZmZXJlbnQgVU5JWAorICBpbXBsZW1lbnRhdGlv bnMuICBUaGUgaWRlYSBpcyB0byBsb29rIGZvciBhIGZpbGUgb2YgYSBjZXJ0YWluIG5hbWUsIHRo ZQorICAibG9ja2ZpbGUiLCBpbiBhIGNlcnRhaW4gZGlyZWN0b3J5LiAgSWYgc3VjaCBhIGZpbGUg aXMgZm91bmQsIHRoZW4gdGhlIGxpbmUKKyAgaXMgcHJlc3VtZWQgdG8gYmUgaW4gdXNlLCBhbmQg S2VybWl0IHNob3VsZCBub3QgdXNlIGl0LiAgSWYgbm8gc3VjaCBmaWxlIGlzCisgIGZvdW5kLCBL ZXJtaXQgYXR0ZW1wdHMgdG8gY3JlYXRlIG9uZSBzbyB0aGF0IG90aGVyIHByb2dyYW1zIHdpbGwg bm90IHVzZSB0aGUKKyAgc2FtZSBsaW5lIGF0IHRoZSBzYW1lIHRpbWUuICBCZWNhdXNlIHRoZSBs b2NrZmlsZSBhbmQvb3IgdGhlIGRpcmVjdG9yeSBpdCdzCisgIGluIG1pZ2h0IGxhY2sgd3JpdGUg cGVybWlzc2lvbiBmb3IgdGhlIHBlcnNvbiBydW5uaW5nIEtlcm1pdCwgS2VybWl0IGNvdWxkCisg IGZpbmQgaXRzZWxmIHJ1bm5pbmcgc2V0dWlkIHRvIHV1Y3Agb3Igb3RoZXIgdXNlciB0aGF0IGRv ZXMgaGF2ZSB0aGUKKyAgbmVjZXNzYXJ5IHBlcm1pc3Npb25zLiAgQXQgc3RhcnR1cCwgS2VybWl0 IGhhcyBjaGFuZ2VkIGl0cyBlZmZlY3RpdmUgdWlkIHRvCisgIHRoZSB1c2VyJ3MgcmVhbCB1aWQs IGFuZCBzbyB0dGxvY2soKSBtdXN0IHN3aXRjaCBiYWNrIHRvIHRoZSBvcmlnaW5hbAorICBlZmZl Y3RpdmUgdWlkIGluIG9yZGVyIHRvIGNyZWF0ZSB0aGUgbG9ja2ZpbGUsIGFuZCB0aGVuIGJhY2sg YWdhaW4gdG8gdGhlCisgIHJlYWwgdWlkIHRvIHByZXZlbnQgdW5hdXRob3JpemVkIGFjY2VzcyB0 byBvdGhlciBkaXJlY3RvcmllcyBvciBmaWxlcyBvd25lZAorICBieSB0aGUgdXNlciB0aGUgcHJv Z3JhbSBpcyBzZXR1aWQgdG8uCisKKyAgVG90YWxseSByZXdyaXR0ZW4gZm9yIEMtS2VybWl0IDVB IHRvIGVsaW1pbmF0ZSB3aW5kb3dzIG9mIHZ1bG5lcmFiaWxpdHksCisgIGJhc2VkIG9uIHN1Z2dl c3Rpb25zIGZyb20gV2FycmVuIFR1Y2tlci4gIENhbGwgd2l0aCBwb2ludGVyIHRvIG5hbWUgb2YK KyAgdHR5IGRldmljZS4gIFJldHVybnM6CisKKyAgIDAgb24gc3VjY2VzcworICAtMSBvbiBmYWls dXJlCisKKyAgTm90ZTogT25jZSBwcml2aWxlZ2VzIGFyZSB0dXJuZWQgb24gdXNpbmcgcHJpdl9v bigpLCBpdCBpcyBlc3NlbnRpYWwgdGhhdAorICB0aGV5IGFyZSB0dXJuZWQgb2ZmIGFnYWluIGJl Zm9yZSB0aGlzIGZ1bmN0aW9uIHJldHVybnMuCisqLworI2lmZGVmIFNWUjQJCQkJLyogTG9ja2Zp bGUgdXNlcyBkZXZpY2UgbnVtYmVycy4gKi8KKy8qCisgIEFsdGhvdWdoIEkgY2FuJ3QgZmluZCB0 aGlzIGluIHdyaXRpbmcgYW55d2hlcmUgKGUuZy4gaW4gU1ZJRCBmb3IgU1ZSNCksCisgIGl0IGlz IHRoZSBiZWhhdmlvciBvZiB0aGUgInJlZmVyZW5jZSB2ZXJzaW9uIiBvZiBTVlI0LCBpLmUuIHRo ZSBJbnRlbAorICBwb3J0IGZyb20gVU5JWCBTeXN0ZW1zIExhYm9yYXRvcmllcywgdGhlbiBjYWxs ZWQgVW5pdmVsIFVuaXhXYXJlLAorICB0aGVuIGNhbGxlZCBOb3ZlbGwgVW5peFdhcmUsIHRoZW4g Y2FsbGVkIFNDTyBVbml4d2FyZSwgdGhlbiBjYWxsZWQgQ2FsZGVyYQorICBPcGVuIFVOSVguLi4g IEl0IGFsc28gbWFrZXMgbXVjaCBtb3JlIHNlbnNlIHRoYW4gZGV2aWNlLW5hbWUtYmFzZWQgbG9j a2ZpbGVzCisgIHNpbmNlIHRoZXJlIGNhbiBiZSBtdWx0aXBsZSBuYW1lcyBmb3IgdGhlIHNhbWUg ZGV2aWNlLCBzeW1saW5rcywgZXRjLgorKi8KKyNpZm5kZWYgTk9MRkRFVk5PCisjaWZuZGVmIExG REVWTk8JCQkJLyogRGVmaW5lIHRoaXMgZm9yIFNWUjQgKi8KKyNpZm5kZWYgQUlYUlMJCQkJLyog QnV0IG5vdCBmb3IgUlMvNjAwMCBBSVggMy4yLCBldGMuICovCisjaWZuZGVmIEJTRDQ0CQkJCS8q IElmIGFueWJvZHkgZWxzZSBuZWVkcyBpdC4uLiAqLworI2lmbmRlZiBfXzM4NkJTRF9fCisjaWZu ZGVmIF9fRnJlZUJTRF9fCisjaWZuZGVmIEhQVVgxMAorI2lmbmRlZiBJUklYNTEJCQkJLyogU0dJ IElSSVggNS4xIG9yIGxhdGVyICovCisjaWZuZGVmIENLX1NDT1Y1CQkJLyogU0NPIE9wZW4gU2Vy dmVyIDUuMCAqLworI2RlZmluZSBMRkRFVk5PCisjZW5kaWYgLyogQ0tfU0NPVjUgKi8KKyNlbmRp ZiAvKiBJUklYNTEgKi8KKyNlbmRpZiAvKiBIUFVYMTAgKi8KKyNlbmRpZiAvKiBfX0ZyZWVCU0Rf XyAqLworI2VuZGlmIC8qIF9fMzg2QlNEX18gKi8KKyNlbmRpZiAvKiBCU0Q0NCAqLworI2VuZGlm IC8qIEFJWFJTICovCisjZW5kaWYgLyogTEZERVZOTyAqLwkJCS8qIC4uLiBkZWZpbmUgaXQgaGVy ZSBvciBvbiBDQyAqLworI2VuZGlmIC8qIE5PTEZERVZOTyAqLworI2VuZGlmIC8qIFNWUjQgKi8J CQkvKiBjb21tYW5kIGxpbmUuICovCisKKyNpZmRlZiBDT0hFUkVOVAorI2RlZmluZSBMRkRFVk5P CisjZW5kaWYgLyogQ09IRVJFTlQgKi8KKworLyoKKyAgRm9yIHBsYXRmb3JtcyB3aGVyZSB0aGUg bG9ja2ZpbGUgbmFtZSBpcyBtYWRlIGZyb20gZGV2aWNlL21ham9yL21pbm9yCisgIGRldmljZSBu dW1iZXIsIGFzIGluIFNWUjQuICBXaGljaCwgaWYgd2UgbXVzdCBoYXZlIGxvY2tmaWxlcyBhdCBh bGwsIGlzCisgIGJ5IGZhciB0aGUgYmVzdCBmb3JtYXQsIHNpbmNlIGl0IGVsaW1pbmF0ZXMgYWxs IHRoZSBjb25mdXNpb24gdGhhdCBzdGVtcworICBmcm9tIG11bHRpcGxlIG5hbWVzIChvciBkcml2 ZXJzKSBmb3IgdGhlIHNhbWUgcG9ydCwgbm90IHRvIG1lbnRpb24KKyAgc3ltbGlua3MuICBJdCBt aWdodCBldmVuIGJlIGEgZ29vZCBpZGVhIHRvIHN0YXJ0IHVzaW5nIHRoaXMgZm9ybSBldmVuCisg IG9uIHBsYXRmb3JtcyB3aGVyZSBpdCdzIG5vdCBzdXBwb3J0ZWQsIGFsb25nc2lkZSB0aGUgbm9y bWFsIGZvcm1zIGZvciB0aG9zZQorICBwbGF0Zm9ybXMsIGluIG9yZGVyIHRvIGdldCBwZW9wbGUg dXNlZCB0byBpdC4uLgorKi8KKyNpZmRlZiBMRkRFVk5PCisjaWZuZGVmIG1ham9yCQkJCS8qIElm IHdlIGRpZG4ndCBmaW5kIGl0ICovCisjaWZkZWYgU1ZSNAkJCQkvKiB0aGVuIGZvciBTeXMgViBS NCAqLworI2luY2x1ZGUgPHN5cy9ta2Rldi5oPgkJCS8qIGxvb2sgaGVyZSAqLworI2Vsc2UJCQkJ CS8qIG9yIGZvciBTdW5PUyB2ZXJzaW9ucyAqLworI2lmZGVmIFNVTk9TNAkJCQkvKiAuLi4gKi8K KyNpbmNsdWRlIDxzeXMvc3lzbWFjcm9zLmg+CQkvKiBsb29rIGhlcmUgKi8KKyNlbHNlCQkJCQkv KiBPdGhlcndpc2UgdGFrZSBhIGNoYW5jZTogKi8KKyNkZWZpbmUJbWFqb3IoZGV2KSAoIChpbnQp ICggKCh1bnNpZ25lZCkoZGV2KSA+PiA4KSAmIDB4ZmYpKQorI2RlZmluZQltaW5vcihkZXYpICgg KGludCkgKCAoZGV2KSAmIDB4ZmYpKQorI2VuZGlmIC8qIFNVTk9TNCAqLworI2VuZGlmIC8qIFNW UjQgKi8KKyNlbmRpZiAvKiBtYWpvciAqLworI2VuZGlmIC8qIExGREVWTk8gKi8KKworLyogTm8g YWR2aXNvcnkgbG9ja3MgaWYgRl9UTE9DSyBhbmQgRl9VTE9DSyBhcmUgbm90IGRlZmluZWQgYXQg dGhpcyBwb2ludCAqLworCisjaWZkZWYgTE9DS0YKKyNpZm5kZWYgRl9UTE9DSworI3VuZGVmIExP Q0tGCisjaWZuZGVmIE5PTE9DS0YKKyNkZWZpbmUgTk9MT0NLRgorI2VuZGlmIC8qIE5PTE9DS0Yg Ki8KKyNlbmRpZiAvKiBGX1RMT0NLICovCisjZW5kaWYgLyogTE9DS0YgKi8KKworI2lmZGVmIExP Q0tGCisjaWZuZGVmIEZfVUxPQ0sKKyN1bmRlZiBMT0NLRgorI2lmbmRlZiBOT0xPQ0tGCisjZGVm aW5lIE5PTE9DS0YKKyNlbmRpZiAvKiBOT0xPQ0tGICovCisjZW5kaWYgLyogRl9VTE9DSyAqLwor I2VuZGlmIC8qIExPQ0tGICovCisKK3N0YXRpYyBjaGFyIGxpbmt0b1tERVZOQU1MRU4rMV07Citz dGF0aWMgY2hhciAqIGxpbmtkZXYgPSBOVUxMOworCisjaWZuZGVmIE5PVVVDUAorI2lmZGVmIFVT RVRUWUxPQ0sKKyNpZmRlZiBMT0NLX0RJUgorY2hhciAqIHV1Y3Bsb2NrZGlyID0gTE9DS19ESVI7 CisjZWxzZQorY2hhciAqIHV1Y3Bsb2NrZGlyID0gIiI7CisjZW5kaWYgLyogTE9DS19ESVIgKi8K KyNlbHNlCisjaWZkZWYgTE9DS19ESVIKK2NoYXIgKiB1dWNwbG9ja2RpciA9IExPQ0tfRElSOwor I2Vsc2UKK2NoYXIgKiB1dWNwbG9ja2RpciA9ICIiOworI2VuZGlmIC8qIExPQ0tfRElSICovCisj ZW5kaWYgLyogVVNFVFRZTE9DSyAqLworI2Vsc2UKK2NoYXIgKiB1dWNwbG9ja2RpciA9ICIiOwor I2VuZGlmIC8qIE5PVVVDUCAqLworCisjaWZkZWYgUU5YCQkJCS8qIE9ubHkgZm9yIFFOWDQgKi8K K2ludAkJCQkJLyogVmlzaWJsZSB0byBvdXRzaWRlIHdvcmxkICovCitxbnhvcGVuY291bnQoKSB7 CQkJLyogR2V0IFFOWCBkZXZpY2Ugb3BlbiBjb3VudCAqLworICAgIHN0cnVjdCBfZGV2X2luZm9f ZW50cnkgaW5mbzsKKyAgICBpbnQgeDsKKworICAgIHggPSAtMTsJCQkJLyogVW5rbm93biAqLwor ICAgIGlmICh0dHlmZCA+IC0xKSB7CisJaWYgKCFkZXZfaW5mbyh0dHlmZCwgJmluZm8pKSB7CisJ ICAgIGRlYnVnKEYxMDEsInR0bG9jayBRTlggb3Blbl9jb3VudCIsIiIsaW5mby5vcGVuX2NvdW50 KTsKKwkgICAgeCA9IGluZm8ub3Blbl9jb3VudDsKKwl9CisgICAgfQorICAgIHJldHVybih4KTsK K30KKyNlbmRpZiAvKiBRTlggKi8KKworY2hhciAqCit0dGdsY2tkaXIoKSB7CQkJCS8qIEdldCBM b2NrZmlsZSBkaXJlY3RvcnkgbmFtZSAqLworI2lmZGVmIF9fT3BlbkJTRF9fCisgICAgcmV0dXJu KCIvdmFyL3Nwb29sL2xvY2siKTsKKyNlbHNlIC8qIF9fT3BlbkJTRF9fICovCisjaWZkZWYgX19G cmVlQlNEX18KKyAgICByZXR1cm4oIi92YXIvc3Bvb2wvbG9jayIpOworI2Vsc2UgIC8qIF9fRnJl ZUJTRF9fICovCisjaWZkZWYgTE9DS19ESVIKKyAgICBjaGFyICogcyA9IExPQ0tfRElSOworI2Vu ZGlmIC8qIExPQ0tfRElSICovCisjaWZkZWYgTk9VVUNQCisgICAgcmV0dXJuKCIiKTsKKyNlbHNl ICAvKiBOT1VVQ1AgKi8KKyNpZmRlZiBMT0NLX0RJUgorICAgIHJldHVybihzKTsKKyNlbHNlICAv KiBMT0NLX0RJUiAqLworICAgIHJldHVybigiIik7CisjZW5kaWYgLyogTE9DS19ESVIgKi8KKyNl bmRpZiAvKiBOT1VVQ1AgKi8KKyNlbmRpZiAvKiBfX0ZyZWVCU0RfXyAqLworI2VuZGlmIC8qIF9f T3BlbkJTRF9fICovCit9CisKK3N0YXRpYyBpbnQKK3R0bG9jayh0dGRldikgY2hhciAqdHRkZXY7 IHsKKworICAgIGludCB4LCBuOworICAgIGludCBpc2xpbmsgPSAwOworI2lmZGVmIF9fRnJlZUJT RF9fCisgICAgY2hhciAqZGV2bmFtZTsKKyNlbmRpZgkvKiBfX0ZyZWVCU0RfXyAqLworCisjaWZk ZWYgTk9VVUNQCisgICAgZGVidWcoRjEwMCwidHRsb2NrIE5PVVVDUCIsIiIsMCk7CisgICAgY2tz dHJuY3B5KGZsZm5hbSwiTk9MT0NLIixGTEZOQU1MKTsKKyAgICBoYXNsb2NrID0gMTsKKyAgICBy ZXR1cm4oMCk7CisjZWxzZSAvKiAhTk9VVUNQICovCisKKyNpZmRlZiBVU0VUVFlMT0NLCisgICAg aGFzbG9jayA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgLyogTm90IGxvY2tlZCB5ZXQuICov CisgICAgKmZsZm5hbSA9ICdcMCc7CQkJLyogTG9ja2ZpbGUgbmFtZSBpcyBlbXB0eS4gKi8KKyNp ZmRlZiBfX0ZyZWVCU0RfXworICAgIGlmICgoZGV2bmFtZSA9IHh4bGFzdCh0dGRldiwnLycpKSAh PSBOVUxMKQorI2lmZGVmIEZSRUVCU0Q4CisgICAgICBja3N0cm5jYXQobG9ja25hbWUsZGV2bmFt ZSsxLERFVk5BTUxFTi1ja3N0cm5jcHkobG9ja25hbWUsInB0cyIsNCkpOworI2Vsc2UKKyAgICAg IGNrc3RybmNweShsb2NrbmFtZSxkZXZuYW1lKzEsREVWTkFNTEVOKTsKKyNlbmRpZgkvKiBGUkVF QlNEOCAqLworI2Vsc2UKKyAgICBpZiAoIXN0cm5jbXAodHRkZXYsIi9kZXYvIiw1KSAmJiB0dGRl dls1XSkKKyAgICAgIGNrc3RybmNweShsb2NrbmFtZSx0dGRldis1LERFVk5BTUxFTik7CisjZW5k aWYJLyogX19GcmVlQlNEX18gKi8KKyAgICBlbHNlCisgICAgICBja3N0cm5jcHkobG9ja25hbWUs dHRkZXYsREVWTkFNTEVOKTsKKy8qCisgIFRoaXMgbWlnaHQgYmUgb3ZlcmtpbGwsIGJ1dCBpdCdz IG5vdCBjbGVhciBmcm9tIHRoZSBtYW4gcGFnZXMgd2hldGhlcgorICB0dHlsb2NrKCkgY2FuIGJl IGNhbGxlZCB3aXRob3V0IGNhbGxpbmcgdHR5bG9ja2VkKCkgZmlyc3QsIHNpbmNlIHRoZSBkb2MK KyAgc2F5cyB0aGF0IHR0eWxvY2tlZCgpIHJlbW92ZXMgYW55IHN0YWxlIGxvY2tmaWxlcywgYnV0 IGl0IGRvZXMgbm90IHNheSB0aGlzCisgIGFib3V0IHR0eWxvY2soKS4gIEFsc28gdGhlIGRvY3Mg ZG9uJ3Qgc2F5IHdoYXQgdHR5bG9ja2VkKCkgcmV0dXJucyBpbiB0aGUKKyAgY2FzZSB3aGVuIGl0 IGZpbmRzIGFuZCByZW1vdmVzIGEgc3RhbGUgbG9ja2ZpbGUuICBTbyBvbmUgb3IgYm90aCBjYWxs cyB0bworICB0byB0dHlsb2NrZWQoKSBtaWdodCBiZSBzdXBlcmZsdW91cywgYnV0IHRoZXkgc2hv dWxkIGRvIG5vIGhhcm0uICBBbHNvIEknbQorICBhc3N1bWluZyB0aGF0IHdlIGhhdmUgdG8gZG8g YWxsIHRoZSBzYW1lIElEIHN3YXBwaW5nLCBldGMsIHdpdGggdGhlc2UKKyAgcm91dGluZXMgYXMg d2UgZG8gd2l0aG91dCB0aGVtLiAgVGh1cyB0aGUgcHJpdl9vbi9vZmYoKSBzYW5kd2ljaC4KKyov CisjaWZkZWYgVVNFX1VVX0xPQ0sKKyAgICBwcml2X29uKCk7CQkJCS8qIFR1cm4gb24gcHJpdnMg Ki8KKyAgICB4ID0gdXVfbG9jayhsb2NrbmFtZSk7CQkvKiBUcnkgdG8gc2V0IHRoZSBsb2NrICov CisgICAgcHJpdl9vZmYoKTsJCQkJLyogVHVybiBwcml2cyBvZmYgKi8KKyAgICBkZWJ1ZyhGMTEx LCJ0dGxvY2sgdXVfbG9jayIsbG9ja25hbWUseCk7CisgICAgc3dpdGNoICh4KSB7CisgICAgICBj YXNlIFVVX0xPQ0tfSU5VU0U6CisJcmV0dXJuKC0yKTsKKyAgICAgIGNhc2UgVVVfTE9DS19PSzoK KyNpZmRlZiBCU0Q0NAorCWNrbWFrbXNnKGZsZm5hbSxGTEZOQU1MLCIvdmFyL3Nwb29sL2xvY2sv TENLLi4iLGxvY2tuYW1lLE5VTEwsTlVMTCk7CisjZW5kaWYgLyogQlNENDQgKi8KKwloYXNsb2Nr ID0gMTsKKwlyZXR1cm4oMCk7CisgICAgICBkZWZhdWx0OgorCXJldHVybigtMSk7CisgICAgfQor I2Vsc2UgIC8qIFVTRV9VVV9MT0NLICovCisgICAgcHJpdl9vbigpOwkJCQkvKiBUdXJuIG9uIHBy aXZzICovCisgICAgaWYgKHR0eWxvY2tlZChsb2NrbmFtZSkpIHsJCS8qIFRoaXMgc2hvdWxkIHJl bW92ZSBhbnkgc3RhbGUgbG9jayAqLworCWlmICh0dHlsb2NrZWQobG9ja25hbWUpKSB7CS8qIHNv IGNoZWNrIGFnYWluLiAqLworCSAgICBwcml2X29mZigpOworCSAgICByZXR1cm4oLTUpOwkJCS8q IFN0aWxsIGxvY2tlZCwgZmFpbC4gKi8KKwl9CisgICAgfQorICAgIHggPSB0dHlsb2NrKGxvY2tu YW1lKTsJCS8qIExvY2sgaXQuICovCisgICAgcHJpdl9vZmYoKTsJCQkJLyogVHVybiBvZmYgcHJp dnMgKi8KKworICAgIGRlYnVnKEYxMTEsInR0bG9jayBsb2NrbmFtZSIsbG9ja25hbWUseCk7Cisg ICAgaWYgKHggPiAtMSkgeworCS8qCisJICBXZSBkb24ndCByZWFsbHkga25vdyB0aGUgbmFtZSBv ZiB0aGUgbG9ja2ZpbGUsIGJ1dAorCSAgdGhpcyBpcyB3aGF0IHRoZSBtYW4gcGFnZSBzYXlzIGl0 IGlzLiAgSW4gVVNFVFRZTE9DSworICAgICAgICAgIGJ1aWxkcywgaXQgaXMgdXNlZCBvbmx5IGZv ciBkaXNwbGF5IGJ5IFNIT1cgQ09NTS4KKwkqLworCWNrbWFrbXNnKGZsZm5hbSxGTEZOQU1MLCIv ZXRjL2xvY2tzL0xDSy4uIixsb2NrbmFtZSxOVUxMLE5VTEwpOworCWhhc2xvY2sgPSAxOworICAg IH0KKyAgICByZXR1cm4oeCk7CisjZW5kaWYgLyogVVNFX1VVX0xPQ0sgKi8KKyNlbHNlICAvKiBT eXN0ZW1zIHRoYXQgZG9uJ3QgaGF2ZSB0dHlsb2NrKCkuLi4gKi8KKworI2lmbmRlZiBIUFVYCisK KyAgICBpbnQgbG9ja2ZkOwkJCQkvKiBGaWxlIGRlc2NyaXB0b3IgZm9yIGxvY2sgZmlsZS4gKi8K KyAgICBQSURfVCBwaWQ7CQkJCS8qIFByb2Nlc3MgaWQgb2YgdGhpcyBwcm9jZXNzLiAqLworICAg IGludCB0cmllczsJCQkJLyogSG93IG1hbnkgdGltZXMgd2UndmUgdHJpZWQuLi4gKi8KKyAgICBz dHJ1Y3Qgc3RhdCBkZXZidWY7CQkJLyogRm9yIGRldmljZSBudW1iZXJzIChTVlI0KS4gKi8KKwor I2lmZGVmIFBJRFNUUklORworICAgIGNoYXIgcGlkX3N0clszMl07CQkJLyogTXkgcGlkIGluIHN0 cmluZyBmb3JtYXQuICovCisjZW5kaWYgLyogUElEU1RSSU5HICovCisKKyAgICBjaGFyICpkZXZp Y2UsICpkZXZuYW1lOworCisjZGVmaW5lIExGTkFNTCAyNTYJCQkvKiBNYXggbGVuZ3RoIGZvciBs b2NrIGZpbGUgbmFtZS4gKi8KKyAgICBjaGFyIGxvY2tmaWxbTEZOQU1MXTsJCS8qIExvY2sgZmls ZSBuYW1lICovCisjaWZkZWYgUlRBSVgKKyAgICBjaGFyIGxrbG9ja2ZbTEZOQU1MXTsJCS8qIE5h bWUgZm9yIGxpbmsgdG8gbG9jayBmaWxlICAqLworI2VuZGlmIC8qIFJUQUlYICovCisjaWZkZWYg Q0tTWU1MSU5LCisgICAgY2hhciBzeW1sb2NrW0xGTkFNTF07CQkvKiBOYW1lIGZvciBzeW1saW5r IGxvY2tmaWxlIG5hbWUgKi8KKyNlbmRpZiAvKiBDS1NZTUxJTksgKi8KKyAgICBjaGFyIHRtcG5h bVtMRk5BTUwrMzBdOwkJLyogVGVtcG9yYXJ5IGxvY2tmaWxlIG5hbWUuICovCisgICAgY2hhciAq bG9ja2RpciA9IExPQ0tfRElSOwkJLyogRGVmaW5lZCBuZWFyIHRvcCBvZiB0aGlzIGZpbGUsICov CisJCQkJCS8qIG9yIG9uIGNjIGNvbW1hbmQgbGluZS4gKi8KKyAgICBoYXNsb2NrID0gMDsgICAg ICAgICAgICAgICAgICAgICAgICAvKiBOb3QgbG9ja2VkIHlldC4gKi8KKyAgICAqZmxmbmFtID0g J1wwJzsJCQkvKiBMb2NrZmlsZSBuYW1lIGlzIGVtcHR5LiAqLworICAgIGxvY2syWzBdID0gJ1ww JzsJCQkvKiBDbGVhciBzZWNvbmRhcnkgbG9ja2ZpbGUgbmFtZS4gKi8KKyAgICBwaWQgPSBnZXRw aWQoKTsJCQkvKiBHZXQgaWQgb2YgdGhpcyBwcm9jZXNzLiAqLworCisvKiAgQ29uc3RydWN0IG5h bWUgb2YgbG9ja2ZpbGUgYW5kIHRlbXBvcmFyeSBmaWxlICovCisKKy8qICBkZXZpY2UgID0gbmFt ZSBvZiB0dHkgZGV2aWNlIHdpdGhvdXQgdGhlIHBhdGgsIGUuZy4gInR0eWg4IiAqLworLyogIGxv Y2tmaWwgPSBuYW1lIG9mIGxvY2sgZmlsZSwgd2l0aG91dCBwYXRoLCBlLmcuICJMQ0suLnR0eWg4 IiAqLworCisgICAgZGV2aWNlID0gKChkZXZuYW1lID0geHhsYXN0KHR0ZGV2LCcvJykpICE9IE5V TEwgPyBkZXZuYW1lKzEgOiB0dGRldik7CisKKyAgICBpZiAoc3RhdCh0dGRldiwmZGV2YnVmKSA8 IDApCisgICAgICByZXR1cm4oLTEpOworCisjaWZkZWYgQ0tTWU1MSU5LCisgICAgaXNsaW5rID0g MTsJCQkJLyogQXNzdW1lIGl0J3MgYSBzeW1saW5rICovCisgICAgbGlua3RvWzBdID0gJ1wwJzsJ CQkvKiBCdXQgd2UgZG9uJ3Qga25vdyB0byB3aGF0ICovCisjaWZkZWYgQ09NTUVOVAorLyoKKyAg VGhpcyBpcyB1bmRlcGVuZGFibGUuICBJZiBpdCB3b3JrZWQgaXQgd291bGQgc2F2ZSB0aGUgcmVh ZGxpbmsgY2FsbCBpZgorICB3ZSBrbmV3IHRoZSBkZXZpY2UgbmFtZSB3YXMgbm90IGEgbGluay4K KyovCisjaWZkZWYgU19JU0xOSworICAgIGlzbGluayA9IFNfSVNMTksoZGV2YnVmLnN0X21vZGUp OworICAgIGRlYnVnKEYxMDEsInR0bG9jayBzdGF0IFNfSVNMTksiLCIiLGlzbGluayk7CisjZW5k aWYgLyogU19JU0xOSyAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICBpZiAoaXNsaW5rKSB7 CisJbiA9IHJlYWRsaW5rKHR0ZGV2LGxpbmt0byxERVZOQU1MRU4pOyAvKiBTZWUgaWYgaXQncyBh IGxpbmsgKi8KKwlkZWJ1ZyhGMTExLCJ0dGxvY2sgcmVhZGxpbmsiLHR0ZGV2LG4pOworCWlmIChu ID4gLTEpCQkJLyogSXQgaXMgKi8KKwkgIGxpbmt0b1tuXSA9ICdcMCc7CisJZWxzZQkJCQkvKiBJ dCdzIG5vdCAqLworCSAgaXNsaW5rID0gMDsKKwlkZWJ1ZyhGMTExLCJ0dGxvY2sgbGluayIsbGlu a3RvLGlzbGluayk7CisgICAgfQorICAgIGlmIChpc2xpbmspIHsKKwlsaW5rZGV2ID0gKGRldm5h bWUgPSB4eGxhc3QobGlua3RvLCcvJykpID8gZGV2bmFtZSArIDEgOiBsaW5rdG87CisJZGVidWco RjExMCwidHRsb2NrIGxpbmtkZXYiLGxpbmtkZXYsMCk7CisgICAgfQorI2VuZGlmIC8qIENLU1lN TElOSyAqLworCisvKgorICBPbiBTQ08gcGxhdGZvcm1zLCBpZiB3ZSBkb24ndCBoYXZlIGEgc3lt bGluaywgdGhlbiBsZXQncyBwcmV0ZW5kIHRoZQorICBuYW1lIGdpdmVuIGZvciB0aGUgZGV2aWNl IGlzIGEgc3ltbGluaywgYmVjYXVzZSBsYXRlciB3ZSB3aWxsIGNoYW5nZQorICB0aGUgbmFtZSBp ZiBpdCBjb250YWlucyBhbnkgdXBwZXJjYXNlIGNoYXJhY3RlcnMuCisqLworI2lmZGVmIENLX1ND T1Y1CQkJCS8qIFNDTyBPcGVuIFNlcnZlciA1LjAgKi8KKyAgICBpZiAoIWlzbGluaykgeworCWlz bGluayA9IDE7CisJY2tzdHJuY3B5KGxpbmt0byx0dGRldixERVZOQU1MRU4pOworCWxpbmtkZXYg PSAoZGV2bmFtZSA9IHh4bGFzdChsaW5rdG8sJy8nKSkgPyBkZXZuYW1lICsgMSA6IGxpbmt0bzsK KwlkZWJ1ZyhGMTEwLCJ0dGxvY2sgbGlua2RldiIsbGlua2RldiwwKTsKKyAgICB9CisjZWxzZQor I2lmZGVmIE1fWEVOSVgJCQkJLyogU0NPIFhlbml4IG9yIFVOSVggKi8KKyAgICBpZiAoIWlzbGlu aykgeworCWlzbGluayA9IDE7CisJY2tzdHJuY3B5KGxpbmt0byx0dGRldixERVZOQU1MRU4pOwor CWxpbmtkZXYgPSAoZGV2bmFtZSA9IHh4bGFzdChsaW5rdG8sJy8nKSkgPyBkZXZuYW1lICsgMSA6 IGxpbmt0bzsKKwlkZWJ1ZyhGMTEwLCJ0dGxvY2sgbGlua2RldiIsbGlua2RldiwwKTsKKyAgICB9 CisjZW5kaWYgLyogTV9YRU5JWCAqLworI2VuZGlmIC8qIENLX1NDT1Y1ICovCisKKyNpZmRlZiBJ U0lJSQkJCQkvKiBJbnRlcmFjdGl2ZSBTeXN0ZW0gSUlJLCBQQy9JWCAqLworICAgIGNrc3RybmNw eShsb2NrZmlsLCBkZXZpY2UsIERFVk5BTUxFTik7CisjZWxzZSAgLyogbm90IElTSUlJICovCisj aWZkZWYgTEZERVZOTwkJCQkvKiBMb2NrZmlsZW5hbWUgaGFzIGRldmljZSBudW1iZXJzLiAqLwor I2lmZGVmIENPSEVSRU5UCisgICAgc3ByaW50Zihsb2NrZmlsLCJMQ0suLiVkLiVkIiwJLyogU0FG RSAqLworCSAgICBtYWpvcihkZXZidWYuc3RfcmRldiksCSAgIC8qIG1ham9yIGRldmljZSBudW1i ZXIgKi8KKwkgICAgMHgxZiAmIG1pbm9yKGRldmJ1Zi5zdF9yZGV2KSk7IC8qIG1pbm9yIGRldmlj ZSBudW1iZXIgKi8KKyNlbHNlCisgICAgLyogTm90ZTogJWQgY2hhbmdlZCB0byAldSBpbiA4LjAg LS0gJXUgaXMgcGFydCBvZiBTVklEIGZvciBTVlI0ICovCisgICAgLyogTG9ja2ZpbGUgbmFtZSBm b3JtYXQgdmVyaWZpZWQgdG8gYWdyZWUgd2l0aCBTb2xhcmlzIGN1LCBEZWMgMjAwMSAqLworICAg IHNwcmludGYobG9ja2ZpbCwiTEsuJTAzdS4lMDN1LiUwM3UiLCAvKiBTQUZFICovCisJICAgIG1h am9yKGRldmJ1Zi5zdF9kZXYpLAkvKiBkZXZpY2UgKi8KKwkgICAgbWFqb3IoZGV2YnVmLnN0X3Jk ZXYpLAkvKiBtYWpvciBkZXZpY2UgbnVtYmVyICovCisJICAgIG1pbm9yKGRldmJ1Zi5zdF9yZGV2 KSk7CS8qIG1pbm9yIGRldmljZSBudW1iZXIgKi8KKyNlbmRpZiAvKiBDT0hFUkVOVCAqLworI2Vs c2UgIC8qIE5vdCBMRkRFVk5PICovCisjaWZkZWYgUFRYCQkJCS8qIER5bml4IFBUWCAqLworICAg IGlmICgoZGV2aWNlICE9ICZ0dGRldls1XSkgJiYgKHN0cm5jbXAodHRkZXYsIi9kZXYvIiw1KSA9 PSAwKSkgeworCWlmICgoaW50KXN0cmxlbihkZXZpY2UpICsgOCA8IExGTkFNTCkKKwkgIHNwcmlu dGYobG9ja2ZpbCwiTENLLi4lLjNzJXMiLCAmdHRkZXZbNV0sIGRldmljZSk7CisJZWxzZQorCSAg Y2tzdHJuY3B5KGxvY2tmaWwsIkxPQ0tGSUxFX05BTUVfVE9PX0xPTkciLExGTkFNTCk7CisgICAg fSBlbHNlCisjZW5kaWYgLyogUFRYICovCisgICAgICBpZiAoKGludClzdHJsZW4oZGV2aWNlKSAr IDUgPCBMRk5BTUwpCisJc3ByaW50Zihsb2NrZmlsLCJMQ0suLiVzIiwgZGV2aWNlKTsKKyAgICAg IGVsc2UKKwlja3N0cm5jcHkobG9ja2ZpbCwiTE9DS0ZJTEVfTkFNRV9UT09fTE9ORyIsTEZOQU1M KTsKKyNpZmRlZiBSVEFJWAorICAgIGNrc3RybmNweShsa2xvY2tmLGRldmljZSxERVZOQU1MRU4p OworI2VuZGlmIC8qIFJUQUlYICovCisjaWZkZWYgQ0tTWU1MSU5LCisgICAgc3ltbG9ja1swXSA9 ICdcMCc7CisgICAgaWYgKGlzbGluaykKKyAgICAgIGNrbWFrbXNnKHN5bWxvY2ssTEZOQU1MLCAi TENLLi4iLCBsaW5rZGV2LCBOVUxMLCBOVUxMKTsKKyNlbmRpZiAvKiBDS1NZTUxJTksgKi8KKyNl bmRpZiAvKiBMRkRFVk5PICovCisjZW5kaWYgLyogSVNJSUkgKi8KKworI2lmZGVmIENLX1NDT1Y1 CQkJCS8qIFNDTyBPcGVuIFNlcnZlciA1LjAgKi8KKyAgICB7CisJLyogTG93ZXJjYXNlIHRoZSBl bnRpcmUgZmlsZW5hbWUuICovCisgICAgICAgIC8qIFNDTyBzYXlzIHdlIG11c3QgZG8gdGhpcyBp biBWNS4wIGFuZCBsYXRlci4gKi8KKwkvKiBCVVQuLi4gd2F0Y2ggb3V0IGZvciBkZXZpY2VzIC0t IGxpa2UgRGlnaWJvYXJkIFBvcnRzZXJ2ZXIgKi8KKwkvKiBUaGF0IGNhbiBoYXZlIGh1bmRyZWRz IG9mIHBvcnRzLi4uICovCisJY2hhciAqcCA9IChjaGFyICopKGxvY2tmaWwgKyA1KTsKKwl3aGls ZSAoKnApIHsgaWYgKGlzdXBwZXIoKnApKSAqcCA9IChjaGFyKSB0b2xvd2VyKCpwKTsgcCsrOyB9 CisgICAgfQorI2lmZGVmIENLU1lNTElOSworICAgIGlmIChpc2xpbmspIHsJCQkvKiBJZiBubyBj aGFuZ2UgKi8KKwlpZiAoIXN0cmNtcChsb2NrZmlsLHN5bWxvY2spKSB7CS8qIHRoZW4gbm8gc2Vj b25kIGxvY2tmaWxlIG5lZWRlZCAqLworCSAgICBpc2xpbmsgPSAwOworCSAgICBzeW1sb2NrWzBd ID0gJ1wwJzsKKwl9CisgICAgfQorI2VuZGlmIC8qIENLU1lNTElOSyAqLworI2Vsc2UKKyNpZmRl ZiBNX1hFTklYCQkJCS8qIFNDTyBYZW5peCBvciBVTklYICovCisgICAgeworCWludCB4OyBjaGFy IGM7CisJeCA9IChpbnQpc3RybGVuKGxvY2tmaWwpIC0gMTsJLyogR2V0IGxhc3QgbGV0dGVyIG9m IGRldmljZSBuYW1lLiAqLworCWlmICh4ID4gMCkgewkJCS8qIElmIGl0J3MgdXBwZXJjYXNlLCBs b3dlciBpdC4gKi8KKwkgICAgYyA9IGxvY2tmaWxbeF07CisJICAgIGlmIChjID49ICdBJyAmJiBj IDw9ICdaJykgbG9ja2ZpbFt4XSArPSAoJ2EnIC0gJ0EnKTsKKwl9CisgICAgfQorI2lmZGVmIENL U1lNTElOSworICAgIGlmIChpc2xpbmspIHsKKwlpZiAoIXN0cmNtcChsb2NrZmlsLHN5bWxvY2sp KSB7CS8qIE5vIGNoYW5nZSAqLworCSAgICBpc2xpbmsgPSAwOwkJCS8qIHNvIG5vIHNlY29uZCBs b2NrZmlsZSAqLworCSAgICBzeW1sb2NrWzBdID0gJ1wwJzsKKwl9CisgICAgfQorI2VuZGlmIC8q IENLU1lNTElOSyAqLworI2VuZGlmIC8qIE1fWEVOSVggKi8KKyNlbmRpZiAvKiBDS19TQ09WNSAq LworCisvKiAgZmxmbmFtID0gZnVsbCBsb2NrZmlsZSBwYXRobmFtZSwgZS5nLiAiL3Vzci9zcG9v bC91dWNwL0xDSy4udHR5aDgiICovCisvKiAgdG1wbmFtID0gdGVtcG9yYXJ5IHVuaXF1ZSwgZS5n LiAiL3Vzci9zcG9vbC91dWNwL0xUTVAuLnBpZCIgKi8KKworICAgIGNrbWFrbXNnKGZsZm5hbSxM Rk5BTUwsbG9ja2RpciwiLyIsbG9ja2ZpbCxOVUxMKTsKKworI2lmZGVmIFJUQUlYCisgICAgY2tt YWttc2cobGtmbGZuLEZMRk5BTUwsbG9ja2RpciwiLyIsbGtsb2NrZixOVUxMKTsKKyNlbmRpZiAv KiBSVEFJWCAqLworCisjaWZuZGVmIExGREVWTk8KKyNpZmRlZiBDS1NZTUxJTksKKyAgICAvKiBJ ZiBpdCdzIGEgbGluayB0aGVuIGFsc28gbWFrZSBhIGxvY2tmaWxlIGZvciB0aGUgcmVhbCBuYW1l ICovCisgICAgZGVidWcoRjExMSwidHRsb2NrIGxpbmsgc3ltbG9jayIsc3ltbG9jayxpc2xpbmsp OworICAgIGlmIChpc2xpbmsgJiYgc3ltbG9ja1swXSkgeworCS8qIEJ1dCBvbmx5IGlmIHRoZSBs b2NrZmlsZSBuYW1lcyB3b3VsZCBiZSBkaWZmZXJlbnQuICovCisJLyogV0FSTklORzogVGhleSB3 b24ndCBiZSwgZS5nLiBmb3IgL2Rldi90dHlkMiA9PiAvaHcvdHR5cy90dHlkMiAqLworCWNrbWFr bXNnKGxvY2syLEZMRk5BTUwsbG9ja2RpciwiLyIsc3ltbG9jayxOVUxMKTsKKwlkZWJ1ZyhGMTEw LCJ0dGxvY2sgbG9jazIiLGxvY2syLDApOworCWlmICghc3RyY21wKGxvY2syLGZsZm5hbSkpIHsJ LyogQXJlIGxvY2tmaWxlIG5hbWVzIHRoZSBzYW1lPyAqLworCSAgICBkZWJ1ZyhGMTAwLCJ0dGxv Y2sgbG9jazIgY2xlYXJlZCIsIiIsMCk7CisJICAgIGxvY2syWzBdID0gJ1wwJzsJCS8qIENsZWFy IHNlY29uZGFyeSBsb2NrZmlsZSBuYW1lLiAqLworCX0KKyAgICB9CisjZW5kaWYgLyogQ0tTWU1M SU5LICovCisjZW5kaWYgLyogTEZERVZOTyAqLworCisgICAgc3ByaW50Zih0bXBuYW0sIiVzL0xU TVAuJTA1ZCIsbG9ja2RpciwoaW50KSBwaWQpOyAvKiBzYWZlICovCisgICAgZGVidWcoRjExMCwi dHRsb2NrIGZsZm5hbSIsZmxmbmFtLDApOworICAgIGRlYnVnKEYxMTAsInR0bG9jayB0bXBuYW0i LHRtcG5hbSwwKTsKKworICAgIHByaXZfb24oKTsJCQkJLyogVHVybiBvbiBwcml2aWxlZ2VzIGlm IHBvc3NpYmxlLiAqLworICAgIGxvY2tmZCA9IGNyZWF0KHRtcG5hbSwgMDQ0NCk7CS8qIFRyeSB0 byBjcmVhdGUgdGVtcCBsb2NrIGZpbGUuICovCisgICAgaWYgKGxvY2tmZCA8IDApIHsJCQkvKiBD cmVhdGUgZmFpbGVkLiAqLworCWRlYnVnKEYxMTEsInR0bG9jayBjcmVhdCBmYWlsZWQiLHRtcG5h bSxlcnJubyk7CisJaWYgKGVycm5vID09IEVOT0VOVCkgeworCSAgICBwZXJyb3IobG9ja2Rpcik7 CisJICAgIHByaW50ZigiVVVDUCBub3QgaW5zdGFsbGVkIG9yIEtlcm1pdCBtaXNjb25maWd1cmVk XG4iKTsKKwl9IGVsc2UgeworCSAgICBpZiAoIXF1aWV0KQorCSAgICAgIHBlcnJvcihsb2NrZGly KTsKKwkgICAgdW5saW5rKHRtcG5hbSk7CQkvKiBHZXQgcmlkIG9mIHRoZSB0ZW1wb3JhcnkgZmls ZS4gKi8KKwl9CisJcHJpdl9vZmYoKTsJCQkvKiBUdXJuIG9mZiBwcml2aWxlZ2VzISEhICovCisJ cmV0dXJuKC0xKTsJCQkvKiBSZXR1cm4gZmFpbHVyZSBjb2RlLiAqLworICAgIH0KKy8qIE5vdyB3 cml0ZSB0aGUgcGlkIGludG8gdGhlIHRlbXAgbG9ja2ZpbGUgaW4gdGhlIGFwcHJvcHJpYXRlIGZv cm1hdCAqLworCisjaWZkZWYgUElEU1RSSU5HCQkJLyogRm9yIEhvbmV5IERhbkJlciBVVUNQLCAq LworICAgIHNwcmludGYoCQkJCS8qIHdyaXRlIFBJRCBhcyBkZWNpbWFsIHN0cmluZyAqLworCSAg ICBwaWRfc3RyLAorI2lmZGVmIExJTlVYRlNTVE5ECQkJLyogVGhlICJMaW51eCBGaWxlIFN5c3Rl bSBTdGFuZGFyZCIgKi8KKyNpZmRlZiBGU1NUTkQxMAkJCQkvKiBWZXJzaW9uIDEuMCBjYWxscyBm b3IgKi8KKwkgICAgIiUwMTBkXG4iLAkJCS8qIGxlYWRpbmcgemVyb3MgKi8KKyNlbHNlCQkJCQkv KiB3aGlsZSB2ZXJzaW9uIDEuMiBjYWxscyBmb3IgKi8KKwkgICAgIiUxMGRcbiIsCQkJLyogbGVh ZGluZyBzcGFjZXMgKi8KKyNlbmRpZiAvKiBGU1NUTkQxMCAqLworI2Vsc2UKKyNpZmRlZiBDT0hF UkVOVAorCSAgICAiJWRcbiIsCQkJLyogd2l0aCBsZWFkaW5nIG5vdGhpbmcgKi8KKyNlbHNlCisJ ICAgICIlMTBkXG4iLAkJCS8qIHdpdGggbGVhZGluZyBibGFua3MgKi8KKyNlbmRpZiAvKiBDT0hF UkVOVCAqLworI2VuZGlmIC8qIExJTlVYRlNTVE5EICovCisJICAgIChpbnQpIHBpZAorCSAgICAp OwkJCQkvKiBzYWZlICovCisgICAgd3JpdGUobG9ja2ZkLCBwaWRfc3RyLCAxMSk7CisgICAgZGVi dWcoRjExMSwidHRsb2NrIGhkYiBwaWQgc3RyaW5nIixwaWRfc3RyLChpbnQpIHBpZCk7CisKKyNl bHNlIC8qIE5vdCBQSURTVFJJTkcsIHVzZSBpbnRlZ2VyIFBJRCAqLworCisgICAgd3JpdGUobG9j a2ZkLCAoY2hhciAqKSZwaWQsIHNpemVvZihwaWQpICk7CisgICAgZGVidWcoRjEwMSwidHRsb2Nr IHBpZCIsIiIsKGludCkgcGlkKTsKKworI2VuZGlmIC8qIFBJRFNUUklORyAqLworCisvKiBOb3cg dHJ5IHRvIHJlbmFtZSB0aGUgdGVtcCBmaWxlIHRvIHRoZSByZWFsIGxvY2sgZmlsZSBuYW1lLiAq LworLyogVGhpcyB3aWxsIGZhaWwgaWYgYSBsb2NrIGZpbGUgb2YgdGhhdCBuYW1lIGFscmVhZHkg ZXhpc3RzLiAgKi8KKworICAgIGNsb3NlKGxvY2tmZCk7CQkJLyogQ2xvc2UgdGhlIHRlbXAgbG9j a2ZpbGUuICovCisgICAgY2htb2QodG1wbmFtLDA0NDQpOwkJCS8qIFBlcm1pc3Npb24gZm9yIGEg dmFsaWQgbG9jay4gKi8KKyAgICB0cmllcyA9IDA7CisgICAgd2hpbGUgKCFoYXNsb2NrICYmIHRy aWVzKysgPCAyKSB7CisJaGFzbG9jayA9IChsaW5rKHRtcG5hbSxmbGZuYW0pID09IDApOyAvKiBD cmVhdGUgYSBsaW5rIHRvIGl0LiAqLworCWlmIChoYXNsb2NrKSB7CQkJICAgICAgLyogSWYgd2Ug Z290IHRoZSBsb2NrZmlsZSAqLworI2lmZGVmIFJUQUlYCisJICAgIGxpbmsoZmxmbmFtLGxrZmxm bik7CisjZW5kaWYgLyogUlRBSVggKi8KKyNpZmRlZiBDS1NZTUxJTksKKyNpZm5kZWYgTEZERVZO TworCSAgICBpZiAoaXNsaW5rICYmIGxvY2syWzBdKQorCSAgICAgIGxpbmsoZmxmbmFtLGxvY2sy KTsKKyNlbmRpZiAvKiBMRkRFVk5PICovCisjZW5kaWYgLyogQ0tTWU1MSU5LICovCisKKyNpZmRl ZiBDT01NRU5UCisvKiBDYW4ndCBkbyB0aGlzIGFueSBtb3JlIGJlY2F1c2UgZGV2aWNlIGlzIG5v dCBvcGVuIHlldCBzbyBubyB0dHlmZC4gKi8KKyNpZmRlZiBMT0NLRgorLyoKKyAgQWR2aXNvcnkg ZmlsZSBsb2NraW5nIHdvcmtzIG9uIFNWUjQsIHNvIHdlIHVzZSBpdC4gIEluIGZhY3QsIGl0IGlz CisgIG5lY2Vzc2FyeSBpbiBzb21lIGNhc2VzLCBlLmcuIHdoZW4gU0xJUCBpcyBpbnZvbHZlZC4g IEJ1dCBpdCBzdGlsbCBkb2Vzbid0CisgIHNlZW0gdG8gcHJldmVudCBtdWx0aXBsZSB1c2VycyBh Y2Nlc3NpbmcgdGhlIHNhbWUgZGV2aWNlIGJ5IGRpZmZlcmVudCBuYW1lcy4KKyovCisgICAgICAg ICAgICB3aGlsZSAobG9ja2YodHR5ZmQsIEZfVExPQ0ssIDBMKSAhPSAwKSB7CisgICAgICAgICAg ICAgICAgZGVidWcoRjExMSwgInR0bG9jayBsb2NrZiByZXR1cm5zIGVycm5vIiwgIiIsIGVycm5v KTsKKyAgICAgICAgICAgICAgICBpZiAoKCsrdHJpZXMgPj0gMykgfHwgKGVycm5vICE9IEVBR0FJ TikpIHsKKyAgICAgICAgICAgICAgICAgICAgeCA9IHVubGluayhmbGZuYW0pOyAvKiByZW1vdmUg dGhlIGxvY2tmaWxlICovCisjaWZkZWYgUlRBSVgKKwkJICAgIHVubGluayhsa2ZsZm4pOwkvKiBB bmQgYW55IGxpbmtzIHRvIGl0Li4uICovCisjZW5kaWYgLyogUlRBSVggKi8KKyNpZmRlZiBDS1NZ TUxJTksKKyNpZm5kZWYgTEZERVZOTworCQkgICAgaWYgKGlzbGluayAmJiBsb2NrMlswXSkKKwkJ ICAgICAgdW5saW5rKGxvY2syKTsJLyogZGl0dG8uLi4gKi8KKyNlbmRpZiAvKiBMRkRFVk5PICov CisjZW5kaWYgLyogQ0tTWU1MSU5LICovCisgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEs InR0bG9jayB1bmxpbmsiLGZsZm5hbSx4KTsKKyAgICAgICAgICAgICAgICAgICAgaGFzbG9jayA9 IDA7CisJCSAgICBicmVhazsKKwkJfQorICAgICAgICAgICAgICAgIHNsZWVwKDIpOworCSAgICB9 CisJICAgIGlmIChoYXNsb2NrKQkJLyogSWYgd2UgZ290IGFuIGFkdmlzb3J5IGxvY2sgKi8KKyNl bmRpZiAvKiBMT0NLRiAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKwkgICAgICBicmVhazsJCQkv KiBXZSdyZSBkb25lLiAqLworCisJfSBlbHNlIHsJCQkvKiBXZSBkaWRuJ3QgY3JlYXRlIGEgbmV3 IGxvY2tmaWxlLiAqLworCSAgICBwcml2X29mZigpOworCSAgICBpZiAodHRjaGtwaWQoZmxmbmFt KSkgewkvKiBDaGVjayBleGlzdGluZyBsb2NrZmlsZSAqLworCQlwcml2X29uKCk7CQkvKiBjYXVz ZSB0dGNoa3BpZCB0dXJucyBwcml2X29mZi4uLiAqLworCQl1bmxpbmsodG1wbmFtKTsJCS8qIERl bGV0ZSB0aGUgdGVtcGZpbGUgKi8KKwkJZGVidWcoRjEwMCwidHRsb2NrIGZvdW5kIHR0eSBsb2Nr ZWQiLCIiLDApOworCQlwcml2X29mZigpOwkJLyogVHVybiBvZmYgcHJpdnMgKi8KKwkJcmV0dXJu KC0yKTsJCS8qIENvZGUgZm9yIGRldmljZSBpcyBpbiB1c2UuICovCisJICAgIH0KKwkgICAgcHJp dl9vbigpOworCX0KKyAgICB9CisgICAgdW5saW5rKHRtcG5hbSk7CQkJLyogVW5saW5rIChyZW1v dmUpIHRoZSB0ZW1wIGZpbGUuICovCisgICAgcHJpdl9vZmYoKTsJCQkJLyogVHVybiBvZmYgcHJp dnMgKi8KKyAgICByZXR1cm4oaGFzbG9jayA/IDAgOiAtMSk7CQkvKiBSZXR1cm4gbGluaydzIHJl dHVybiBjb2RlLiAqLworCisjZWxzZSAvKiBIUFVYICovCisKKy8qCisgIEhQLVVYIGdldHMgaXRz IG93biBjb3B5IG9mIHRoaXMgcm91dGluZSwgbW9kZWxlZCBhZnRlciB0aGUgb2JzZXJ2ZWQgYmVo YXZpb3IKKyAgb2YgdGhlIEhQLVVYICdjdScgcHJvZ3JhbS4gIEhQLVVYIHNlcmlhbCBkZXZpY2Ug bmFtZXMgY29uc2lzdCBvZiBhIGJhc2UgbmFtZQorICBzdWNoIGFzICJ0dHkiLCAidHR5ZCIsICJj dWEiLCAiY3VsIiwgImN1YWQiLCBvciAiY3VsZCIsIGZvbGxvd2VkIGJ5IGEgdW5pdAorICBkZXNp Z25hdG9yIHdoaWNoIGlzIGEgc3RyaW5nIG9mIGRpZ2l0cywgcG9zc2libHkgY29udGFpbmluZyBh biBpbWJlZGRlZAorICBsZXR0ZXIgInAiLiAgRXhhbXBsZXMgKGZvciBiYXNlIG5hbWUgInR0eSIp OgorCisgICAgIC9kZXYvdHR5MCwgL2Rldi90dHkwMCwgZGV2L3R0eWQwMCwgL2Rldi90dHkwcDAK KworICBBY2NvcmRpbmcgdG8gdGhlIEhQLVVYIFVVQ1AgbWFudWFsIG9mIDE5ODgsIHRoZSAiMHAw IiBub3RhdGlvbiBoYXMgYmVlbgorICB1c2VkIG9uIFNlcmllcyA4MDAgc2luY2UgSFAtVVggMi4w MCwgYW5kIHRoZSAibm9uLXAiIG5vdGF0aW9uIHdhcyB1c2VkCisgIG9uIG90aGVyIG1vZGVscy4g IEluIEhQLVVYIDEwLjAwLCAiMHAwIiBub3RhdGlvbiB3YXMgYWRvcHRlZCBmb3IgYWxsIG1vZGVs cy4KKyAgSG93ZXZlciwgd2UgbWFrZSBhbmQgZW5mb3JjZSBubyBzdWNoIGRpc3RpbmN0aW9uczsg ZWl0aGVyIG5vdGF0aW9uIGlzCisgIGFjY2VwdGVkIG9uIGFueSBtb2RlbCBvciBIUC1VWCB2ZXJz aW9uIGFzIGEgdmFsaWQgdW5pdCBkZXNpZ25hdG9yLgorCisgIElmIGEgdmFsaWQgdW5pdCBpcyBz cGVjaWZpZWQgKGFzIG9wcG9zZWQgdG8gYSBkZXNpZ25lciBuYW1lIG9yIHN5bWxpbmspLCB3ZQor ICBjaGVjayBmb3IgYWxsIGFsaWFzZXMgb2YgdGhlIGdpdmVuIHVuaXQgYWNjb3JkaW5nIHRvIHRo ZSBkZXZwcmVmaXhbXSBhcnJheS4KKyAgSWYgbm8gbG9ja2ZpbGVzIGFyZSBmb3VuZCBmb3IgdGhl IGdpdmVuIHVuaXQsIHdlIGNhbiBoYXZlIHRoZSBkZXZpY2U7IHdlCisgIGNyZWF0ZSBhIGxvY2tm aWxlIExDSy4ubmFtZSBpbiB0aGUgbG9ja2ZpbGUgZGlyZWN0b3J5IGFwcHJvcHJpYXRlIGZvciB0 aGUKKyAgSFAtVVggdmVyc2lvbiAoL3Zhci9zcG9vbC9sb2NrcyBmb3IgMTAuMDAgYW5kIGxhdGVy LCAvdXNyL3Nwb29sL3V1Y3AgZm9yCisgIDkueHggYW5kIGVhcmxpZXIpLiAgSWYgaXQgaXMgYSAi Y3VhIiBvciAiY3VsIiBkZXZpY2UsIGEgc2Vjb25kIGxvY2tmaWxlIGlzCisgIGNyZWF0ZWQgd2l0 aCB0aGUgInR0eWQiIHByZWZpeC4gIFRoaXMgaXMgZXhhY3RseSB3aGF0IGN1IGRvZXMuCisKKyAg SWYgdGhlICJzZXQgbGluZSIgZGV2aWNlIGRvZXMgbm90IGhhdmUgYSB2YWxpZCB1bml0IGRlc2ln bmF0b3IsIHRoZW4gaXQgaXMKKyAgdXNlZCBsaXRlcmFsbHkgYW5kIG5vIHN5bm9teW1zIGFyZSBz ZWFyY2hlZCBmb3IgYW5kIG9ubHkgb25lIGxvY2tmaWxlIGlzCisgIGNyZWF0ZWQuCisKKyAgLWZk YywgTWFyY2ggMTk5OC4KKyovCisjZGVmaW5lIExGTkFNTCA4MAkJCS8qIE1heCBsZW5ndGggZm9y IGxvY2sgZmlsZSBuYW1lLiAqLworCisgICAgaW50IGxvY2tmZDsJCQkJLyogRmlsZSBkZXNjcmlw dG9yIGZvciBsb2NrIGZpbGUuICovCisgICAgUElEX1QgcGlkOwkJCQkvKiBQcm9jZXNzIElEIG9m IHRoaXMgcHJvY2Vzcy4gKi8KKyAgICBpbnQgZnBpZDsJCQkJLyogcGlkIGZvdW5kIGluIGV4aXN0 aW5nIGxvY2tmaWxlLiAqLworICAgIGludCB0cmllczsJCQkJLyogSG93IG1hbnkgdGltZXMgd2Un dmUgdHJpZWQuLi4gKi8KKyAgICBpbnQgaSwgazsJCQkJLyogV29ya2VycyAqLworCisgICAgY2hh ciAqZGV2aWNlLCAqZGV2bmFtZTsJCS8qICIvZGV2L3h4eCIsICJ4eHgiICovCisgICAgY2hhciAq dW5pdCwgKnA7CQkJLyogPGluc3RhbmNlPnA8cG9ydD4gcGFydCBvZiB4eHggKi8KKworICAgIGNo YXIgbG9ja2ZpbFtMRk5BTUxdOwkJLyogTG9ja2ZpbGUgbmFtZSAobm8gcGF0aCkgKi8KKyAgICBj aGFyIHRtcG5hbVtMRk5BTUxdOwkJLyogVGVtcG9yYXJ5IGxvY2tmaWxlIG5hbWUuICovCisKKyNp ZmRlZiBIUFVYMTAJCQkJLyogTG9ja2ZpbGUgZGlyZWN0b3J5ICovCisgICAgY2hhciAqbG9ja2Rp ciA9ICIvdmFyL3Nwb29sL2xvY2tzIjsJLyogQWx3YXlzIHRoaXMgZm9yIDEwLjAwIGFuZCBoaWdo ZXIgKi8KKyNlbHNlICAvKiBIUC1VWCA5Lnh4IGFuZCBiZWxvdyAqLworI2lmZGVmIExPQ0tfRElS CisgICAgY2hhciAqbG9ja2RpciA9IExPQ0tfRElSOwkJLyogRGVmaW5lZCBuZWFyIHRvcCBvZiB0 aGlzIGZpbGUgKi8KKyNlbHNlCisgICAgY2hhciAqbG9ja2RpciA9ICIvdXNyL3Nwb29sL3V1Y3Ai OwkvKiBvciBub3QuLi4gKi8KKyNlbmRpZiAvKiBMT0NLX0RJUiAqLworI2VuZGlmIC8qIEhQVVgx MCAqLworCisgICAgaGFzbG9jayA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgLyogTm90IGxv Y2tlZCB5ZXQuICovCisgICAgKmZsZm5hbSA9ICdcMCc7CQkJLyogTG9ja2ZpbGUgbmFtZSBpcyBl bXB0eS4gKi8KKyAgICBsb2NrMlswXSA9ICdcMCc7CQkJLyogU2Vjb25kIG9uZSB0b28uICovCisg ICAgcGlkID0gZ2V0cGlkKCk7CQkJLyogR2V0IG15IHByb2Nlc3MgSUQgKi8KKy8qCisgIENvbnN0 cnVjdCBuYW1lIG9mIGxvY2tmaWxlIGFuZCB0ZW1wb3JhcnkgZmlsZS4uLgorICBkZXZpY2UgID0g bmFtZSBvZiB0dHkgZGV2aWNlIHdpdGhvdXQgdGhlIHBhdGgsIGUuZy4gInR0eTBwMCIKKyAgbG9j a2ZpbCA9IG5hbWUgb2YgbG9jayBmaWxlLCB3aXRob3V0IHBhdGgsIGUuZy4gIkxDSy4udHR5MHAw IgorKi8KKyAgICBkZXZpY2UgPSAoKGRldm5hbWUgPSB4eGxhc3QodHRkZXYsJy8nKSkgIT0gTlVM TCA/IGRldm5hbWUrMSA6IHR0ZGV2KTsKKyAgICBkZWJ1ZyhGMTEwLCJUVExPQ0sgZGV2aWNlIixk ZXZpY2UsMCk7CisgICAgY2ttYWttc2cobG9ja2ZpbCxMRk5BTUwsIkxDSy4uIixkZXZpY2UsTlVM TCxOVUxMKTsKKworICAgIGsgPSAwOwkJCQkvKiBBc3N1bWUgZGV2aWNlIGlzIG5vdCBsb2NrZWQg Ki8KKyAgICBuID0gMDsJCQkJLyogRGlnaXQgY291bnRlciAqLworICAgIHVuaXQgPSBkZXZpY2U7 CQkJLyogVW5pdCA9IDxpbnN0YW5jZT5wPHBvcnQ+ICovCisgICAgd2hpbGUgKCp1bml0ICYmICFp c2RpZ2l0KCp1bml0KSkJLyogU2VhcmNoIGZvciBkaWdpdC4uLiAqLworICAgICAgdW5pdCsrOwor ICAgIHAgPSB1bml0OwkJCQkvKiBWZXJpZnkgPG51bT5wPG51bT4gZm9ybWF0Li4uICovCisgICAg ZGVidWcoRjExMCwiVFRMT0NLIHVuaXQgMSIsdW5pdCwwKTsKKy8qCisgIFRoZSB1bml0IG51bWJl ciBpcyByZWNvZ25pemVkIGFzOgorICAoYSkgYW55IHNlcXVlbmNlIG9mIGRpZ2l0cyB0aGF0IHJ1 bnMgdG8gdGhlIGVuZCBvZiB0aGUgc3RyaW5nLgorICAoYikgYW55IChhKSB0aGF0IGluY2x1ZGVz IG9uZSBhbmQgb25seSBvbmUgbGV0dGVyICJwIiwgd2l0aCBhdCBsZWFzdAorICAgICAgb25lIGRp Z2l0IGJlZm9yZSBhbmQgYWZ0ZXIgaXQuCisqLworICAgIHdoaWxlIChpc2RpZ2l0KCpwKSkgcCsr LCBuKys7CS8qIEdldCBhIHJ1biBvZiBkaWdpdHMgKi8KKyAgICBpZiAoKnAgJiYgbiA+IDApIHsJ CQkvKiBIYXZlIGEgInAiPyAqLworCWlmICgqcCA9PSAncCcgJiYgaXNkaWdpdCgqKHArMSkpKSB7 CisJICAgIHArKzsKKwkgICAgbiA9IDA7CisJICAgIHdoaWxlIChpc2RpZ2l0KCpwKSkgcCsrLCBu Kys7CisJfQorICAgIH0KKyAgICBpZiAobiA9PSAwIHx8ICpwKSB1bml0ID0gIiI7CisgICAgZGVi dWcoRjExMCwiVFRMT0NLIHVuaXQgMiIsdW5pdCwwKTsKKworICAgIGlmICgqdW5pdCkgewkJCS8q IERldmljZSBuYW1lIGhhcyB1bml0IG51bWJlci4gKi8KKwkvKiBUaGUgZm9sbG93aW5nIGxvb3Ag bm90IG9ubHkgc2VhcmNoZXMgZm9yIHRoZSB2YXJpb3VzIGxvY2tmaWxlICAgICovCisJLyogc3lu b255bXMsIGJ1dCBhbHNvIHJlbW92ZXMgYWxsIC0tIG5vdCBqdXN0IG9uZSAtLSBzdGFsZSBsb2Nr ZmlsZSAqLworCS8qIGZvciB0aGUgZGV2aWNlLCBzaG91bGQgdGhlcmUgYmUgbW9yZSB0aGFuIG9u ZS4gIFNlZSB0dGNoa3BpZCgpLiAgKi8KKwl0dHlkZXhpc3RzID0gMDsKKwlmb3IgKGkgPSAwOyAq ZGV2cHJlZml4W2ldOyBpKyspIHsgLyogRm9yIGVhY2ggZHJpdmVyLi4uICovCisJICAgIC8qIE1h a2UgZGV2aWNlIG5hbWUgKi8KKwkgICAgY2ttYWttc2cobG9jazIsRkxGTkFNTCwiL2Rldi8iLGRl dnByZWZpeFtpXSx1bml0LE5VTEwpOworCSAgICBwcml2X29uKCk7CQkJLyogUHJpdnMgb24gKi8K KwkgICAgayA9IHpjaGtpKGxvY2syKSAhPSAtMTsJLyogU2VlIGlmIGRldmljZSBleGlzdHMgKi8K KwkgICAgcHJpdl9vZmYoKTsJCQkvKiBQcml2cyBvZmYgKi8KKwkgICAgZGVidWcoRjExMSwiVFRM T0NLIGV4aXN0Iixsb2NrMixrKTsKKyAgICAgICAgICAgIGlmIChrKSB7CisJCWlmICghc3RyY21w KGRldnByZWZpeFtpXSwidHR5ZCIpKSAvKiB0dHlkIGRldmljZSBleGlzdHMgKi8KKwkJICB0dHlk ZXhpc3RzID0gMTsKKwkJLyogTWFrZSBsb2NrZmlsZSBuYW1lICovCisJCWNrbWFrbXNnKGxvY2sy LEZMRk5BTUwsbG9ja2RpciwiL0xDSy4uIixkZXZwcmVmaXhbaV0sdW5pdCk7CisJCWRlYnVnKEYx MTAsIlRUTE9DSyBjaGVja2luZyIsbG9jazIsMCk7CisJCXByaXZfb24oKTsJCS8qIFByaXZzIG9u ICovCisJCWsgPSB6Y2hraShsb2NrMikgIT0gLTE7CS8qIFNlZSBpZiBsb2NrZmlsZSBleGlzdHMg Ki8KKwkJcHJpdl9vZmYoKTsJCS8qIFByaXZzIG9mZiAqLworCQlkZWJ1ZyhGMTExLCJUVExPQ0sg Y2hlY2sgZm9yIGxvY2sgQSIsbG9jazIsayk7CisJCWlmIChrKSBpZiAodHRjaGtwaWQobG9jazIp KSB7IC8qIElmIHBpZCBzdGlsbCBhY3RpdmUsIGZhaWwuICovCisJCSAgICBja3N0cm5jcHkoZmxm bmFtLGxvY2syLEZMRk5BTUwpOworCQkgICAgcmV0dXJuKC0yKTsKKwkJfQorCSAgICB9CisJfQor ICAgIH0gZWxzZSB7CQkJCS8qIFNvbWUgb3RoZXIgZGV2aWNlLW5hbWUgZm9ybWF0ICovCisJLyog VGhpcyB0YWtlcyBjYXJlIG9mIHN5bWJvbGljIGxpbmtzLCBldGMuLi4gKi8KKwkvKiBCdXQgZG9l cyBub3QgY2hhc2UgdGhlbSBkb3duISAqLworCWNrbWFrbXNnKGxvY2syLEZMRk5BTUwsbG9ja2Rp ciwiL0xDSy4uIixkZXZpY2UsTlVMTCk7CisJcHJpdl9vbigpOworCWsgPSB6Y2hraShsb2NrMikg IT0gLTE7CQkvKiBDaGVjayBmb3IgZXhpc3RpbmcgbG9ja2ZpbGUgKi8KKwlwcml2X29mZigpOwor CWRlYnVnKEYxMTEsIlRUTE9DSyBjaGVjayBmb3IgbG9jayBCIixsb2NrMixrKTsKKwlpZiAoaykg aWYgKHR0Y2hrcGlkKGxvY2syKSkgewkvKiBDaGVjayBwaWQgZnJvbSBsb2NrZmlsZSAqLworCSAg ICBja3N0cm5jcHkoZmxmbmFtLGxvY2syLEZMRk5BTUwpOworCSAgICBkZWJ1ZyhGMTEwLCJUVExP Q0sgaW4gdXNlIixkZXZpY2UsMCk7CisJICAgIGRlYnVnKEYxMDEsIlRUTE9DSyByZXR1cm5zIiwi IiwtMik7CisJICAgIHJldHVybigtMik7CisJfQorICAgIH0KKy8qCisgIEdldCBoZXJlIG9ubHkg aWYgdGhlcmUgaXMgbm8gKG1vcmUpIGxvY2tmaWxlLCBzbyBub3cgd2UgbWFrZSBvbmUgKG9yIHR3 bykuLi4KKyAgZmxmbmFtID0gZnVsbCBsb2NrZmlsZSBwYXRobmFtZSwgZS5nLiAiL3Vzci9zcG9v bC91dWNwL0xDSy4uY3VsMHAwIi4KKyAgdG1wbmFtID0gdW5pcXVlIHRlbXBvcmFyeSBmaWxuYW1l LCBlLmcuICIvdXNyL3Nwb29sL3V1Y3AvTFRNUC4ucGlkIi4KKyovCisgICAgY2ttYWttc2coZmxm bmFtLEZMRk5BTUwsbG9ja2RpciwiLyIsbG9ja2ZpbCxOVUxMKTsgLyogU0VUIExJTkUgZGV2aWNl ICovCisKKyAgICAvKiBJZiBkaWFsb3V0IGRldmljZSwgYWxzbyBtYWtlIG9uZSBmb3IgY29ycmVz cG9uZGluZyBkaWFsaW4gZGV2aWNlICovCisgICAgbG9jazJbMF0gPSAnXDAnOworICAgIGlmICgh c3RybmNtcChkZXZpY2UsImN1IiwyKSAmJiAqdW5pdCAmJiB0dHlkZXhpc3RzKQorICAgICAgY2tt YWttc2cobG9jazIsRkxGTkFNTCxsb2NrZGlyLCIvTENLLi50dHlkIix1bml0LE5VTEwpOworCisg ICAgaWYgKChpbnQpc3RybGVuKGxvY2tkaXIpKzEyIDwgTEZOQU1MKQorICAgICAgc3ByaW50Zih0 bXBuYW0sIiVzL0xUTVAuJTA1ZCIsbG9ja2RpciwoaW50KSBwaWQpOyAvKiBNYWtlIHRlbXAgbmFt ZSAqLworI2lmZGVmIERFQlVHCisgICAgaWYgKGRlYmxvZykgeworCWRlYnVnKEYxMTAsIlRUTE9D SyBmbGZuYW0iLGZsZm5hbSwwKTsKKwlkZWJ1ZyhGMTEwLCJUVExPQ0sgbG9jazIiLGxvY2syLDAp OworCWRlYnVnKEYxMTAsIlRUTE9DSyB0bXBuYW0iLHRtcG5hbSwwKTsKKyAgICB9CisjZW5kaWYg LyogREVCVUcgKi8KKy8qCisgICBMb2NrZmlsZSBwZXJtaXNzaW9ucy4uLgorICAgNDQ0IGlzIHN0 YW5kYXJkLCBIUC1VWCAxMC4wMCB1c2VzIDY2NC4gIEl0IGRvZXNuJ3QgbWF0dGVyLgorICAgS2Vy bWl0IHVzZXMgNDQ0OyB0aGUgZGlmZmVyZW5jZSBsZXRzIHVzIHRlbGwgd2hldGhlciBLZXJtaXQg Y3JlYXRlZAorICAgdGhlIGxvY2sgZmlsZS4KKyovCisgICAgcHJpdl9vbigpOwkJCQkvKiBUdXJu IG9uIHByaXZpbGVnZXMuICovCisgICAgbG9ja2ZkID0gY3JlYXQodG1wbmFtLCAwNDQ0KTsJLyog VHJ5IHRvIGNyZWF0ZSB0ZW1wb3JhcnkgZmlsZS4gKi8KKyAgICBpZiAobG9ja2ZkIDwgMCkgewkJ CS8qIENyZWF0ZSBmYWlsZWQuICovCisJZGVidWcoRjExMSwiVFRMT0NLIGNyZWF0IGZhaWxlZCIs dG1wbmFtLGVycm5vKTsKKwlpZiAoZXJybm8gPT0gRU5PRU5UKSB7CisJICAgIHBlcnJvcihsb2Nr ZGlyKTsKKwkgICAgcHJpbnRmKCJVVUNQIG5vdCBpbnN0YWxsZWQgb3IgS2VybWl0IG1pc2NvbmZp Z3VyZWRcbiIpOworCX0gZWxzZSB7CisJICAgIGlmICghcXVpZXQpCisJICAgICAgcGVycm9yKGxv Y2tkaXIpOworCSAgICB1bmxpbmsodG1wbmFtKTsJCS8qIEdldCByaWQgb2YgdGhlIHRlbXBvcmFy eSBmaWxlLiAqLworCX0KKwlwcml2X29mZigpOwkJCS8qIFR1cm4gb2ZmIHByaXZpbGVnZXMhISEg Ki8KKwlkZWJ1ZyhGMTAxLCJUVExPQ0sgcmV0dXJucyIsIiIsLTEpOworCXJldHVybigtMSk7CQkJ LyogUmV0dXJuIGZhaWx1cmUgY29kZS4gKi8KKyAgICB9CisgICAgZGVidWcoRjExMCwiVFRMT0NL IHRlbXAgb2siLHRtcG5hbSwwKTsKKworLyogTm93IHdyaXRlIG91ciBwaWQgaW50byB0aGUgdGVt cCBsb2NrZmlsZSBpbiBpbnRlZ2VyIGZvcm1hdC4gKi8KKworICAgIGkgPSB3cml0ZShsb2NrZmQs IChjaGFyICopJnBpZCwgc2l6ZW9mKHBpZCkpOworCisjaWZkZWYgREVCVUcKKyAgICBpZiAoZGVi bG9nKSB7CisJZGVidWcoRjEwMSwiVFRMT0NLIHBpZCIsIiIscGlkKTsKKwlkZWJ1ZyhGMTAxLCJU VExPQ0sgc2l6ZW9mIHBpZCIsIiIsc2l6ZW9mKHBpZCkpOworCWRlYnVnKEYxMDEsIlRUTE9DSyB3 cml0ZSBwaWQgcmV0dXJucyIsIiIsaSk7CisgICAgfQorI2VuZGlmIC8qIERFQlVHICovCisKKy8q CisgIE5vdyB0cnkgdG8gcmVuYW1lIHRoZSB0ZW1wb3JhcnkgZmlsZSB0byB0aGUgcmVhbCBsb2Nr ZmlsZSBuYW1lLgorICBUaGlzIHdpbGwgZmFpbCBpZiBhIGxvY2sgZmlsZSBvZiB0aGF0IG5hbWUg YWxyZWFkeSBleGlzdHMsIHdoaWNoCisgIHdpbGwgY2F0Y2ggcmFjZSBjb25kaXRpb25zIHdpdGgg b3RoZXIgdXNlcnMuCisqLworICAgIGNsb3NlKGxvY2tmZCk7CQkJLyogQ2xvc2UgdGhlIHRlbXAg bG9ja2ZpbGUuICovCisgICAgY2htb2QodG1wbmFtLDA0NDQpOworCisgICAgdHJpZXMgPSAwOwor ICAgIHdoaWxlICghaGFzbG9jayAmJiB0cmllcysrIDwgMikgeworCWhhc2xvY2sgPSAobGluayh0 bXBuYW0sZmxmbmFtKSA9PSAwKTsgLyogQ3JlYXRlIGEgbGluayB0byBpdC4gKi8KKwlkZWJ1ZyhG MTAxLCJUVExPQ0sgbGluayIsIiIsaGFzbG9jayk7CisJaWYgKGhhc2xvY2spIHsJCQkvKiBJZiB3 ZSBtYWRlIHRoZSBsb2NrZmlsZS4uLiAqLworCisjaWZkZWYgQ09NTUVOVAorLyogV2UgY2FuJ3Qg ZG8gdGhpcyBhbnkgbW9yZSBiZWNhdXNlIHdlIGRvbid0IGhhdmUgYSBmaWxlIGRlc2NyaXB0b3Ig eWV0LiAqLworI2lmZGVmIExPQ0tGCQkJCS8qIENhbiBiZSBjYW5jZWxlZCB3aXRoIC1ETk9MT0NL RiAqLworLyoKKyAgQ3JlYXRlIGFuIGFkdmlzb3J5IGxvY2sgb24gdGhlIGRldmljZSB0aHJvdWdo IGl0cyBmaWxlIGRlc2NyaXB0b3IuCisgIFRoaXMgY29kZSBhY3R1YWxseSBzZWVtcyB0byB3b3Jr LiAgSWYgaXQgaXMgZXhlY3V0ZWQsIGFuZCB0aGVuIGFub3RoZXIKKyAgcHJvY2VzcyB0cmllcyB0 byBvcGVuIHRoZSBzYW1lIGRldmljZSB1bmRlciBhIGRpZmZlcmVudCBuYW1lIHRvIGNpcmN1bXZl bnQKKyAgdGhlIGxvY2tmaWxlLCB0aGV5IGdldCBhICJkZXZpY2UgYnVzeSIgZXJyb3IuCisqLwor CSAgICBkZWJ1ZyhGMTAwLCJUVExPQ0sgTE9DS0YgY29kZS4uLiIsIiIsMCk7CisgICAgICAgICAg ICB3aGlsZSAoIGxvY2tmKHR0eWZkLCBGX1RMT0NLLCAwTCkgIT0gMCApIHsKKyAgICAgICAgICAg ICAgICBkZWJ1ZyhGMTExLCAiVFRMT0NLIGxvY2tmIGVycm9yIiwgIiIsIGVycm5vKTsKKyAgICAg ICAgICAgICAgICBpZiAoKCsrdHJpZXMgPj0gMykgfHwgKGVycm5vICE9IEVBR0FJTikpIHsKKyAg ICAgICAgICAgICAgICAgICAgeCA9IHVubGluayhmbGZuYW0pOyAvKiBSZW1vdmUgdGhlIGxvY2tm aWxlICovCisJCSAgICBpZiAoZXJybm8gPT0gRUFDQ0VTICYmICFxdWlldCkKKwkJICAgICAgcHJp bnRmKCJEZXZpY2UgYWxyZWFkeSBsb2NrZWQgYnkgYW5vdGhlciBwcm9jZXNzXG4iKTsKKyAgICAg ICAgICAgICAgICAgICAgaGFzbG9jayA9IDA7CisJCSAgICBicmVhazsKKwkJfQorICAgICAgICAg ICAgICAgIHNsZWVwKDIpOworCSAgICB9CisjZW5kaWYgLyogTE9DS0YgKi8KKyNlbmRpZiAvKiBD T01NRU5UICovCisKKwkgICAgaWYgKGhhc2xvY2spIHsJCS8qIElmIHdlIG1hZGUgdGhlIGxvY2tm aWxlIC4uLiAqLworCQlpZiAobG9jazJbMF0pIHsJCS8qIGlmIHRoZXJlIGlzIHRvIGJlIGEgMm5k IGxvY2tmaWxlICovCisJCSAgICBsb2NrZmQgPSBjcmVhdChsb2NrMiwgMDQ0NCk7IC8qIENyZWF0 ZSBpdCAqLworCQkgICAgZGVidWcoRjExMSwiVFRMT0NLIGxvY2syIGNyZWF0IiwgbG9jazIsIGxv Y2tmZCk7CisJCSAgICBpZiAobG9ja2ZkID4gLTEpIHsJLyogQ3JlYXRlZCBPSywgd3JpdGUgcGlk LiAqLworCQkJd3JpdGUobG9ja2ZkLCAoY2hhciAqKSZwaWQsIHNpemVvZihwaWQpICk7CisJCQlj bG9zZShsb2NrZmQpOwkvKiBDbG9zZSBhbmQgKi8KKwkJCWNobW9kKGxvY2syLCAwNDQ0KTsgLyog c2V0IHBlcm1pc3Npb25zLiAqLworCQkgICAgfSBlbHNlIHsJCSAvKiBOb3QgT0ssIGJ1dCBkb24n dCBmYWlsLiAqLworCQkJbG9jazJbMF0gPSAnXDAnOyAvKiBKdXN0IHJlbWVtYmVyIGl0J3Mgbm90 IHRoZXJlLiAqLworCQkgICAgfQorCQl9CisJCWJyZWFrOwkJCS8qIGFuZCB3ZSdyZSBkb25lLiAq LworCSAgICB9CisJfQorICAgIH0KKyAgICB1bmxpbmsodG1wbmFtKTsJCQkvKiBVbmxpbmsgKHJl bW92ZSkgdGhlIHRlbXAgZmlsZS4gKi8KKyAgICBwcml2X29mZigpOwkJCQkvKiBUdXJuIG9mZiBw cml2cyAqLworICAgIGkgPSBoYXNsb2NrID8gMCA6IC0xOwkJLyogT3VyIHJldHVybiB2YWx1ZSAq LworICAgIGRlYnVnKEYxMDEsIlRUTE9DSyByZXR1cm5zIiwiIixpKTsKKyAgICByZXR1cm4oaSk7 CisjZW5kaWYgLyogSFBVWCAqLworI2VuZGlmIC8qIFVTRVRUWUxPQ0sgKi8KKyNlbmRpZiAvKiAh Tk9VVUNQICovCit9CisKKy8qICBUIFQgVSBOIEwgTyBDIEsgICovCisKK3N0YXRpYyBpbnQKK3R0 dW5sY2soKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZW1vdmUgVVVDUCBsb2Nr ZmlsZShzKS4gKi8KKyNpZm5kZWYgTk9VVUNQCisgICAgaW50IHg7CisKKyAgICBkZWJ1ZyhGMTEx LCJ0dHVubGNrIixmbGZuYW0saGFzbG9jayk7CisKKyNpZmRlZiBVU0VUVFlMT0NLCisKKyAgICBp ZiAoaGFzbG9jayAmJiAqZmxmbmFtKSB7CisJaW50IHg7CisJcHJpdl9vbigpOwkJCS8qIFR1cm4g b24gcHJpdnMgKi8KKyNpZmRlZiBVU0VfVVVfTE9DSworCXggPSB1dV91bmxvY2sobG9ja25hbWUp OworI2Vsc2UgIC8qIFVTRV9VVV9MT0NLICovCisJeCA9IHR0eXVubG9jayhsb2NrbmFtZSk7CS8q IFRyeSB0byB1bmxvY2sgKi8KKyNlbmRpZiAvKiBVU0VfVVVfTE9DSyAqLworCXByaXZfb2ZmKCk7 CQkJLyogVHVybiBvZmYgcHJpdnMgKi8KKwlpZiAoeCA8IDAgJiYgIXF1aWV0KQorCSAgcHJpbnRm KCJXYXJuaW5nIC0gQ2FuJ3QgcmVtb3ZlIGxvY2tmaWxlOiAlc1xuIiwgZmxmbmFtKTsKKworCSpm bGZuYW0gPSAnXDAnOwkJCS8qIEVyYXNlIHRoZSBuYW1lLiAqLworCWhhc2xvY2sgPSAwOworCXJl dHVybigwKTsKKyAgICB9CisKKyNlbHNlICAvKiBObyB0dHlsb2NrKCkuLi4gKi8KKworICAgIGlm IChoYXNsb2NrICYmICpmbGZuYW0pIHsKKwkvKiBEb24ndCByZW1vdmUgbG9ja2ZpbGUgaWYgd2Ug ZGlkbid0IG1ha2UgaXQgb3Vyc2VsdmVzICovCisJaWYgKCh4ID0gdHRycGlkKGZsZm5hbSkpICE9 IChpbnQpZ2V0cGlkKCkpIHsKKwkgICAgZGVidWcoRjExMSwidHR1bmxjayBsb2NrZmlsZSBzZWl6 ZWQiLGZsZm5hbSx4KTsKKwkgICAgcHJpbnRmKCJXYXJuaW5nIC0gTG9ja2ZpbGUgJXMgc2VpemVk IGJ5IHBpZCAlZFxuIiwKKwkJICAgZmxmbmFtLAorCQkgICB4CisJCSAgICk7CisJICAgIHJldHVy bigwKTsKKwl9CisJcHJpdl9vbigpOwkJCS8qIFR1cm4gcHJpdmlsZWdlcyBvbi4gICovCisJZXJy bm8gPSAwOworCXggPSB1bmxpbmsoZmxmbmFtKTsJCS8qIFJlbW92ZSB0aGUgbG9ja2ZpbGUuICov CisJZGVidWcoRjExMSwidHR1bmxjayB1bmxpbmsiLGZsZm5hbSx4KTsKKwlpZiAoeCA8IDApIHsK KwkgICAgaWYgKGVycm5vICYmICFxdWlldCkKKwkgICAgICBwZXJyb3IodHRubXN2KTsKKwkgICAg cHJpbnRmKCJXYXJuaW5nIC0gQ2FuJ3QgcmVtb3ZlIGxvY2tmaWxlOiAlc1xuIiwgZmxmbmFtKTsK Kwl9CisJaGFzbG9jayA9IDA7CisJKmZsZm5hbSA9ICdcMCc7CQkJLyogRXJhc2UgdGhlIG5hbWUu ICovCisKKyNpZmRlZiBSVEFJWAorCWVycm5vID0gMDsKKwl4ID0gdW5saW5rKGxrZmxmbik7CQkv KiBSZW1vdmUgbGluayB0byBsb2NrZmlsZSAqLworCWRlYnVnKEYxMTEsInR0dW5sY2sgQUlYIGxp bmsgdW5saW5rIixsa2ZsZm4seCk7CisJaWYgKHggPCAwKSB7CisJICAgIGlmIChlcnJubyAmJiAh cXVpZXQpCisJICAgICAgcGVycm9yKHR0bm1zdik7CisJICAgIHByaW50ZigiV2FybmluZyAtIENh bid0IHJlbW92ZSBsaW5rIHRvIGxvY2tmaWxlOiAlc1xuIiwgbGtmbGZuKTsKKwl9CisJKmxrZmxm biA9ICdcMCc7CisjZWxzZQorCWlmIChsb2NrMlswXSkgewkJCS8qIElmIHRoZXJlIGlzIGEgc2Vj b25kIGxvY2tmaWxlLCAqLworCSAgICBlcnJubyA9IDA7CisJICAgIHggPSB1bmxpbmsobG9jazIp OwkJLyogIHJlbW92ZSBpdCB0b28uICovCisJICAgIGRlYnVnKEYxMTEsInR0dW5sY2sgbG9jazIg dW5saW5rIixsb2NrMix4KTsKKwkgICAgaWYgKHggPCAwKSB7CisJCWlmIChlcnJubyAmJiAhcXVp ZXQpCisJCSAgcGVycm9yKHR0bm1zdik7CisJCXByaW50ZigiV2FybmluZyAtIENhbid0IHJlbW92 ZSBzZWNvbmRhcnkgbG9ja2ZpbGU6ICVzXG4iLAorCQkgICAgICAgbG9jazIKKwkJICAgICAgICk7 CisJICAgIH0KKwkgICAgbG9jazJbMF0gPSAnXDAnOwkJLyogRm9yZ2V0IGl0cyBuYW1lLiAqLwor CX0KKyNlbmRpZiAvKiBSVEFJWCAqLworCisjaWZkZWYgQ09NTUVOVAorI2lmZGVmIExPQ0tGCisg ICAgICAgIChWT0lEKSBsb2NrZih0dHlmZCwgRl9VTE9DSywgMEwpOyAvKiBSZW1vdmUgYWR2aXNv cnkgbG9jayAqLworI2VuZGlmIC8qIExPQ0tGICovCisjZW5kaWYgLyogQ09NTUVOVCAqLworCisJ cHJpdl9vZmYoKTsJCQkvKiBUdXJuIHByaXZpbGVnZXMgb2ZmLiAqLworICAgIH0KKyNlbmRpZiAv KiBVU0VUVFlMT0NLICovCisjZW5kaWYgLyogIU5PVVVDUCAqLworICAgIHJldHVybigwKTsKK30K KworLyoKKyAgNC4zQlNELXN0eWxlIFVVQ1AgbGluZSBkaXJlY3Rpb24gY29udHJvbC4KKyAgKFN0 YW4gQmFyYmVyLCBSaWNlIFUsIDE5ODAtc29tZXRoaW5nLi4uKQorKi8KKyNpZm5kZWYgTk9VVUNQ CisjaWZkZWYgQUNVQ05UUkwKK1ZPSUQKK2FjdWNudHJsKGZsYWcsdHRuYW1lKSBjaGFyICpmbGFn LCAqdHRuYW1lOyB7CisgICAgY2hhciB4W0RFVk5BTUxFTiszMl0sICpkZXZpY2UsICpkZXZuYW1l OworCisgICAgaWYgKHN0cmNtcCh0dG5hbWUsQ1RUTkFNKSA9PSAwIHx8IHhsb2NhbCA9PSAwKSAv KiBJZiBub3QgbG9jYWwsICovCisgICAgICByZXR1cm47CQkJCS8qIGp1c3QgcmV0dXJuLiAqLwor ICAgIGRldmljZSA9ICgoZGV2bmFtZSA9IHh4bGFzdCh0dG5hbWUsJy8nKSkgIT0gTlVMTCA/IGRl dm5hbWUrMSA6IHR0bmFtZSk7CisgICAgaWYgKHN0cm5jbXAoZGV2aWNlLCJMQ0suLiIsNCkgPT0g MCkgZGV2aWNlICs9IDU7CisgICAgY2ttYWttc2coeCxERVZOQU1MRU4rMzIsIi91c3IvbGliL3V1 Y3AvYWN1Y250cmwgIixmbGFnLCIgIixkZXZpY2UpOworICAgIGRlYnVnKEYxMTAsImNhbGxlZCAi LHgsMCk7CisgICAgenN5c2NtZCh4KTsKK30KKyNlbmRpZiAvKiBBQ1VDTlRSTCAqLworI2VuZGlm IC8qIE5PVVVDUCAqLworCisvKgorICBUIFQgSCBGIEwgTyBXICAtLSAgU2V0IG9yIFJlc2V0IGhh cmR3YXJlIGZsb3cgY29udHJvbC4KKworICBUaGlzIGlzIGFuIGF0dGVtcHQgdG8gY29sbGVjdCBh bGwgaGFyZHdhcmUtZmxvdy1jb250cm9sIHJlbGF0ZWQgY29kZQorICBpbnRvIGEgc2luZ2xlIG1v ZHVsZS4gIFRoYW5rcyB0byBSaWNrIFNsYWRrZXkgYW5kIEpvaG4gS29obCBmb3IgbG90cyBvZgor ICBoZWxwIGhlcmUuICBPdmVydmlldzoKKworICBIYXJkd2FyZSBmbG93IGNvbnRyb2wgaXMgbm90 IHN1cHBvcnRlZCBpbiBtYW55IFVOSVggaW1wbGVtZW50aW9ucy4gIEV2ZW4KKyAgd2hlbiBpdCBp cyBzdXBwb3J0ZWQsIHRoZXJlIGlzIG5vIChoYSBoYSkgInN0YW5kYXJkIiBmb3IgdGhlIHByb2dy YW1taW5nCisgIGludGVyZmFjZS4gIEluIGdlbmVyYWwsIDQuM0JTRCBhbmQgZWFybGllciAoc29t ZXRpbWVzKSwgNC40QlNELCBTeXN0ZW0gViwKKyAgU3VuT1MsIEFJWCwgZXRjLCBoYXZlIHRvdGFs bHkgZGlmZmVyZW50IG1ldGhvZHMuICAoQW5kLCBub3Qgc3RyaWN0bHkKKyAgcmVsZXZhbnQgaGVy ZSwgdGhlIHByb2dyYW1taW5nIGludGVyZmFjZSBvZnRlbiBicmluZ3Mgb25lIG9ubHkgdG8gYSBu by1vcAorICBpbiB0aGUgZGV2aWNlIGRyaXZlciEpCisKKyAgQW1vbmcgYWxsIHRoZXNlLCB3ZSBo YXZlIHR3byBtYWpvciB0eXBlcyBvZiBBUElzOiB0aG9zZSBpbiB3aGljaCBoYXJkd2FyZQorICBm bG93IGNvbnRyb2wgaXMgZGV0ZXJtaW5lZCBieSBiaXRzIGluIHRoZSBzYW1lIHRlcm1pby90ZXJt aW9zL3NndHR5IG1vZGUKKyAgd29yZChzKSB0aGF0IGFyZSB1c2VkIGZvciBjb250cm9sbGluZyBz dWNoIGl0ZW1zIGFzIENCUkVBSyB2cyBSQVcgbW9kZSwgYW5kCisgIHdoaWNoIGFyZSBhbHNvIHVz ZWQgYnkgdGhlIHR0dnQoKSwgdHRwa3QoKSwgY29uYmluKCksIGFuZCBjb25jYigpIHJvdXRpbmVz CisgIGZvciBjaGFuZ2luZyB0ZXJtaW5hbCBtb2Rlcy4gIEFuZCB0aG9zZSB0aGF0IHVzZSBlbnRp cmVseSBkaWZmZXJlbnQKKyAgbWVjaGFuaXNtcy4KKworICBJbiB0aGUgZmlyc3QgY2F0ZWdvcnks IGl0IGlzIGltcG9ydGFudCB0aGF0IGFueSBjaGFuZ2UgaW4gdGhlIG1vZGUgYml0cyBiZQorICBy ZWZsZWN0ZWQgaW4gdGhlIHJlbGV2YW50IHRlcm1pbyhzKS9zZ3R0eSBzdHJ1Y3R1cmUsIHNvIHRo YXQgc3Vic2VxdWVudAorICBjaGFuZ2VzIHRvIHRoYXQgc3RydWN0dXJlIGRvIG5vdCB3aXBlIG91 dCB0aGUgZWZmZWN0cyBvZiB0aGlzIHJvdXRpbmUuICBUaGF0CisgIGlzIHdoeSBhIHBvaW50ZXIs IGF0dHJzLCB0byB0aGUgYXBwcm9wcmlhdGUgc3RydWN0dXJlIGlzIHBhc3NlZCBhcyBhCisgIHBh cmFtZXRlciB0byB0aGlzIHJvdXRpbmUuCisKKyAgVGhlIHNlY29uZCBjYXRlZ29yeSBzaG91bGQg Z2l2ZSB1cyBubyB3b3JyaWVzLCBzaW5jZSBhbnkgY2hhbmdlcyB0byBoYXJkd2FyZQorICBmbG93 IGNvbnRyb2wgYWNjb21wbGlzaGVkIGJ5IHRoaXMgcm91dGluZSBzaG91bGQgbm90IGFmZmVjdCB0 aGUgdGVybWlvKHMpLworICBzZ3R0eSBzdHJ1Y3R1cmVzLCBhbmQgdGhlcmVmb3JlIHdpbGwgbm90 IGJlIHVuZG9uZSBieSBsYXRlciBjaGFuZ2VzIHRvIHRoZW0uCisKKyAgVGhlIHNlY29uZCBhcmd1 bWVudCwgc3RhdHVzLCBtZWFucyB0byB0dXJuIG9uIGhhcmR3YXJlIGZsb3cgY29udHJvbCBpZgor ICBub256ZXJvLCBhbmQgdG8gdHVybiBpdCBvZmYgaWYgemVyby4KKworICBSZXR1cm5zOiAwIG9u IGFwcGFyZW50IHN1Y2Nlc3MsIC0xIG9uIHByb2JhYmxlIGZhaWx1cmUuCisqLworCisvKgorICBU aGUgZm9sbG93aW5nIGJ1c2luZXNzIGlzIGZvciBCU0RJLCB3aGVyZSBpdCB3YXMgZGlzY292ZXJl ZCB0aGF0IHR3bworICBzZXBhcmF0ZSBiaXRzLCBDQ1RTX09GTE9XIGFuZCBDUlRTX0lGTE9XLCBh cmUgdXNlZCBpbiBoYXJkd2FyZSBmbG93IGNvbnRyb2wsCisgIGJ1dCBDVFJTQ1RTIGlzIGRlZmlu ZWQgKGluIDx0ZXJtaW9zLmg+KSB0byBiZSBqdXN0IENDVFNfT0ZMT1cgcmF0aGVyIGJvdGgKKyAg Yml0cywgc28gaHdmYyBvbmx5IHdvcmtzIGluIG9uZSBkaXJlY3Rpb24gaWYgeW91IHVzZSBDUlRT Q1RTIHRvIGNvbnRyb2wgaXQuCisgIE90aGVyIDQuNEJTRC1iYXNlZCBVbml4ZXMgc3VjaCBhcyBG cmVlQlNEIDQuMSwgd2hpY2ggdXNlIHRoZXNlIHR3byBiaXRzLAorICBkZWZpbmUgQ1JUU0NUUyBj b3JyZWN0bHkuCisqLworI2lmZGVmIEZJWENSVFNDVFMKKyNpZmRlZiBDUlRTQ1RTCisjaWZkZWYg Q0NUU19PRkxPVworI2lmZGVmIENSVFNfSUZMT1cKKyN1bmRlZiBDUlRTQ1RTCisjZGVmaW5lIENS VFNDVFMgKENSVFNfSUZMT1d8Q0NUU19PRkxPVykKKyNlbmRpZiAvKiBDUlRTX0lGTE9XICovCisj ZW5kaWYgLyogQ0NUU19PRkxPVyAqLworI2VuZGlmIC8qIENSVFNDVFMgKi8KKyNlbmRpZiAvKiBG SVhDUlRTQ1RTICovCisKK3N0YXRpYyBpbnQKK3R0aGZsb3coZmxvdywgc3RhdHVzLCBhdHRycykK KyAgICBpbnQgZmxvdywJCQkJLyogVHlwZSBvZiBmbG93IGNvbnRyb2wgKGNrY2RlYi5oKSAqLwor ICAgIHN0YXR1czsJCQkJLyogTm9uemVybyA9IHR1cm4gaXQgb24gKi8KKwkJCQkJLyogWmVybyA9 IHR1cm4gaXQgb2ZmICovCisjaWZkZWYgQlNENDRPUlBPU0lYCQkJLyogUE9TSVggb3IgQlNENDQg Ki8KKyAgICBzdHJ1Y3QgdGVybWlvcyAqYXR0cnM7CisjZWxzZQkJCQkJLyogU3lzdGVtIFYgKi8K KyNpZmRlZiBBVFRTVgorI2lmZGVmIEFUVDczMDAKKyNpZmRlZiBVTklYMzUxTQorLyogQVQmVCBV TklYIDMuNTFtIGNhbiBzZXQgYnV0IG5vdCB0ZXN0IGZvciBoYXJkd2FyZSBmbG93IGNvbnRyb2wg Ki8KKyNkZWZpbmUgUlRTRkxPVyBDVFNDRAorI2RlZmluZSBDVFNGTE9XIENUU0NECisjZW5kaWYg LyogQVRUNzMwMCAqLworI2VuZGlmIC8qIFVOSVgzNTFNICovCisgICAgc3RydWN0IHRlcm1pbyAq YXR0cnM7CisjZWxzZQkJCQkJLyogQlNELCBWNywgZXRjICovCisgICAgc3RydWN0IHNndHR5YiAq YXR0cnM7CQkvKiBzZ3R0eSBpbmZvLi4uICovCisjZW5kaWYgLyogQVRUU1YgKi8KKyNlbmRpZiAv KiBCU0Q0NE9SUE9TSVggKi8KKy8qIHR0aGZsb3cgKi8geworCisgICAgaW50IHggPSAwOwkJCQkv KiB0dGhmbG93KCkgcmV0dXJuIGNvZGUgKi8KKworI2lmZGVmIFBsYW45CisgICAgcmV0dXJuIHA5 dHRoZmxvdyhmbG93LCBzdGF0dXMpOworI2Vsc2UKKworI2lmbmRlZiBPWE9TCQkJCS8qIE5PVCBP bGl2ZXR0aSBYL09TLi4uICovCisvKgorICBGb3IgU3VuT1MgNC4wIGFuZCBsYXRlciBpbiB0aGUg QlNEIGVudmlyb25tZW50IC4uLgorCisgIFRoZSBkZWNsYXJhdGlvbnMgYXJlIGNvcGllZCBhbmQg aW50ZXJwcmV0ZWQgZnJvbSB0aGUgU3lzdGVtIFYgaGVhZGVyIGZpbGVzLAorICBzbyB3ZSBkb24n dCBhY3R1YWxseSBoYXZlIHRvIHB1bGwgaW4gYWxsIHRoZSBTeXN0ZW0gViBqdW5rIHdoZW4gYnVp bGRpbmcKKyAgQy1LZXJtaXQgZm9yIFN1bk9TIGluIHRoZSBCU0QgZW52aXJvbm1lbnQsIHdoaWNo IHdvdWxkIGJlIGRhbmdlcm91cyBiZWNhdXNlCisgIGhhdmluZyB0aG9zZSBzeW1ib2xzIGRlZmlu ZWQgd291bGQgY2F1c2UgdXMgdG8gdGFrZSB0aGUgd3JvbmcgcGF0aHMgdGhyb3VnaAorICB0aGUg Y29kZS4gIFRoZSBjb2RlIGluIHRoaXMgc2VjdGlvbiBpcyB1c2VkIGluIGJvdGggdGhlIEJTRCBh bmQgU3lzIFYgU3VuT1MKKyAgdmVyc2lvbnMuCisqLworI2lmZGVmIFNVTk9TNDEKKy8qCisgIElu IFN1bk9TIDQuMSBhbmQgbGF0ZXIsIHdlIHVzZSB0aGUgUE9TSVggY2FsbHMgcmF0aGVyIHRoYW4g aW9jdGwgY2FsbHMKKyAgYmVjYXVzZSBHTlUgQ0MgdXNlcyBkaWZmZXJlbnQgZm9ybWF0cyBmb3Ig dGhlIF9JT3h4eCBtYWNyb3MgdGhhbiByZWd1bGFyIENDOworICB0aGUgUE9TSVggZm9ybXMgd29y ayBmb3IgYm90aC4gIEJ1dCB0aGUgUE9TSVggY2FsbHMgYXJlIG5vdCBhdmFpbGFibGUgaW4KKyAg U3VuT1MgNC4wLgorKi8KKyNkZWZpbmUgQ1JUU0NUUyAweDgwMDAwMDAwCQkvKiBSVFMvQ1RTIGZs b3cgY29udHJvbCAqLworI2RlZmluZSBUQ1NBTk9XIDAJCQkvKiBEbyBpdCBub3cgKi8KKworICAg IHN0cnVjdCB0ZXJtaW9zIHsKKwl1bnNpZ25lZCBsb25nIGNfaWZsYWc7CQkvKiBJbnB1dCBtb2Rl cyAqLworCXVuc2lnbmVkIGxvbmcgY19vZmxhZzsJCS8qIE91dHB1dCBtb2RlcyAqLworCXVuc2ln bmVkIGxvbmcgY19jZmxhZzsJCS8qIENvbnRyb2wgbW9kZXMgKi8KKwl1bnNpZ25lZCBsb25nIGNf bGZsYWc7CQkvKiBMaW5lIGRpc2NpcGxpbmUgbW9kZXMgKi8KKwljaGFyIGNfbGluZTsKKwlDSEFS IGNfY2NbMTddOworICAgIH07CisgICAgc3RydWN0IHRlcm1pb3MgdGVtcDsKKworX1BST1RPVFlQ KCBpbnQgdGNnZXRhdHRyLCAoaW50LCBzdHJ1Y3QgdGVybWlvcyAqKSApOworX1BST1RPVFlQKCBp bnQgdGNzZXRhdHRyLCAoaW50LCBpbnQsIHN0cnVjdCB0ZXJtaW9zICopICk7CisvKgorICBXaGVu IENSVFNDVFMgaXMgc2V0LCBTdW5PUyB3b24ndCBkbyBvdXRwdXQgdW5sZXNzIGJvdGggQ1RTIGFu ZCBDRCBhcmUKKyAgYXNzZXJ0ZWQuICBTbyB3ZSBkb24ndCBzZXQgQ1JUU0NUUyB1bmxlc3MgQ0Qg aXMgdXAuICBUaGlzIHNob3VsZCBiZSBPSywKKyAgc2luY2Ugd2UgZG9uJ3QgbmVlZCBSVFMvQ1RT IGR1cmluZyBkaWFsaW5nLCBhbmQgYWZ0ZXIgZGlhbGluZyBpcyBjb21wbGV0ZSwKKyAgd2Ugc2hv dWxkIGhhdmUgQ0QuICBJZiBub3QsIHdlIHN0aWxsIGNvbW11bmljYXRlLCBidXQgd2l0aG91dCBS VFMvQ1RTLgorKi8KKyAgICBpbnQgbWZsYWdzOwkJCQkvKiBNb2RlbSBzaWduYWwgZmxhZ3MgKi8K KworI2lmZGVmIE5FVENNRAorICAgIGlmICh0dHBpcGUpIHJldHVybigwKTsKKyNlbmRpZiAvKiBO RVRDTUQgKi8KKyNpZmRlZiBORVRQVFkKKyAgICBpZiAodHRwdHkpIHJldHVybigwKTsKKyNlbmRp ZiAvKiBORVRQVFkgKi8KKworICAgIGRlYnVnKEYxMDEsInR0aGZsb3cgU1VOT1M0MSBlbnRyeSBz dGF0dXMiLCIiLHN0YXR1cyk7CisgICAgaWYgKCFzdGF0dXMpIHsJCQkvKiBUdXJuIGhhcmQgZmxv dyBvZmYgKi8KKwlpZiAodGNnZXRhdHRyKHR0eWZkLCAmdGVtcCkgPiAtMSAmJiAvKiBHZXQgZGV2 aWNlIGF0dHJpYnV0ZXMgKi8KKwkgICAgKHRlbXAuY19jZmxhZyAmIENSVFNDVFMpKSB7IC8qIENo ZWNrIGZvciBSVFMvQ1RTICovCisJICAgIHRlbXAuY19jZmxhZyAmPSB+Q1JUU0NUUzsJLyogSXQn cyB0aGVyZSwgcmVtb3ZlIGl0ICovCisJICAgIHggPSB0Y3NldGF0dHIodHR5ZmQsVENTQU5PVywm dGVtcCk7CisJfQorICAgIH0gZWxzZSB7CQkJCS8qIFR1cm4gaGFyZCBmbG93IG9uICovCisJaWYg KGlvY3RsKHR0eWZkLFRJT0NNR0VULCZtZmxhZ3MpID4gLTEgJiYgLyogR2V0IG1vZGVtIHNpZ25h bHMgKi8KKwkgICAgKG1mbGFncyAmIFRJT0NNX0NBUikpIHsJCS8qIENoZWNrIGZvciBDRCAqLwor CSAgICBkZWJ1ZyhGMTAwLCJ0dGhmbG93IFN1bk9TIGhhcyBDRCIsIiIsMCk7CisJICAgIGlmICh0 Y2dldGF0dHIodHR5ZmQsICZ0ZW1wKSA+IC0xICYmIC8qIEdldCBkZXZpY2UgYXR0cmlidXRlcyAq LworCQkhKHRlbXAuY19jZmxhZyAmIENSVFNDVFMpKSB7IC8qIENoZWNrIGZvciBSVFMvQ1RTICov CisJCXRlbXAuY19jZmxhZyB8PSBDUlRTQ1RTOwkvKiBOb3QgdGhlcmUsIGFkZCBpdCAqLworCQl4 ID0gdGNzZXRhdHRyKHR0eWZkLFRDU0FOT1csJnRlbXApOworCSAgICB9CisJfSBlbHNlIHsKKwkg ICAgeCA9IC0xOworCSAgICBkZWJ1ZyhGMTAwLCJ0dGhmbG93IFN1bk9TIG5vIENEIiwiIiwwKTsK Kwl9CisgICAgfQorI2Vsc2UKKyNpZmRlZiBRTlgKKyAgICBzdHJ1Y3QgdGVybWlvcyB0ZW1wOwor I2lmZGVmIE5FVENNRAorICAgIGlmICh0dHBpcGUpIHJldHVybigwKTsKKyNlbmRpZiAvKiBORVRD TUQgKi8KKyNpZmRlZiBORVRQVFkKKyAgICBpZiAodHRwdHkpIHJldHVybigwKTsKKyNlbmRpZiAv KiBORVRQVFkgKi8KKyAgICBkZWJ1ZyhGMTAxLCJ0dGhmbG93IFFOWCBlbnRyeSBzdGF0dXMiLCIi LHN0YXR1cyk7CisgICAgaWYgKHRjZ2V0YXR0cih0dHlmZCwgJnRlbXApID4gLTEpIHsJLyogR2V0 IGRldmljZSBhdHRyaWJ1dGVzICovCisJaWYgKCFzdGF0dXMpIHsJCQkvKiBUdXJuIGhhcmQgZmxv dyBvZmYgKi8KKwkgICAgaWYgKCh0ZW1wLmNfY2ZsYWcgJiAoSUhGTE9XfE9IRkxPVykpID09IChJ SEZMT1d8T0hGTE9XKSkgeworCQl0ZW1wLmNfY2ZsYWcgJj0gfihJSEZMT1d8T0hGTE9XKTsgLyog SXQncyB0aGVyZSwgcmVtb3ZlIGl0ICovCisJCWF0dHJzLT5jX2NmbGFnICY9IH4oSUhGTE9XfE9I RkxPVyk7CisJCXggPSB0Y3NldGF0dHIodHR5ZmQsVENTQU5PVywmdGVtcCk7CisJICAgIH0KKwl9 IGVsc2UgewkJCS8qIFR1cm4gaGFyZCBmbG93IG9uICovCisJICAgIGlmICgodGVtcC5jX2NmbGFn ICYgKElIRkxPV3xPSEZMT1cpKSAhPSAoSUhGTE9XfE9IRkxPVykpIHsKKwkJdGVtcC5jX2NmbGFn IHw9IChJSEZMT1d8T0hGTE9XKTsgLyogTm90IHRoZXJlLCBhZGQgaXQgKi8KKwkJdGVtcC5jX2lm bGFnICY9IH4oSVhPTnxJWE9GRik7ICAgLyogQnllIHRvIElYT04vSVhPRkYgKi8KKwkJdHRyYXcu Y19sZmxhZyB8PSBJRVhURU47ICAgICAgICAgLyogTXVzdCBiZSBvbiAqLworCQl4ID0gdGNzZXRh dHRyKHR0eWZkLFRDU0FOT1csJnRlbXApOworCQlhdHRycy0+Y19jZmxhZyB8PSAoSUhGTE9XfE9I RkxPVyk7CisJCWF0dHJzLT5jX2lmbGFnICY9IH4oSVhPTnxJWE9GRik7CisJICAgIH0KKwl9Cisg ICAgfSBlbHNlIHsKKwl4ID0gLTE7CisJZGVidWcoRjEwMCwgInR0aGZsb3cgUU5YIGdldGF0dHIg ZmFpbHMiLCAiIiwgMCk7CisgICAgfQorI2Vsc2UKKyNpZmRlZiBQT1NJWF9DUlRTQ1RTCisvKgor ICBQT1NJWF9DUlRTQ1RTIGlzIGRlZmluZWQgaW4gY2tjZGViLmggb3Igb24gQ0MgY29tbWFuZCBs aW5lLgorICBOb3RlOiBEbyBub3QgYXNzdW1lIENSVFNDVFMgaXMgYSBvbmUtYml0IGZpZWxkIQor Ki8KKyAgICBzdHJ1Y3QgdGVybWlvcyB0ZW1wOworI2lmZGVmIE5FVENNRAorICAgIGlmICh0dHBp cGUpIHJldHVybigwKTsKKyNlbmRpZiAvKiBORVRDTUQgKi8KKyNpZmRlZiBORVRQVFkKKyAgICBp ZiAodHRwdHkpIHJldHVybigwKTsKKyNlbmRpZiAvKiBORVRQVFkgKi8KKyAgICBkZWJ1ZyhGMTAx LCJ0dGhmbG93IFBPU0lYX0NSVFNDVFMgZW50cnkgc3RhdHVzIiwiIixzdGF0dXMpOworICAgIGVy cm5vID0gMDsKKyAgICB4ID0gdGNnZXRhdHRyKHR0eWZkLCAmdGVtcCk7CisgICAgZGVidWcoRjEx MSwidHRoZmxvdyBQT1NJWF9DUlRTQ1RTIHRjZ2V0YXR0ciIsY2tpdG9hKHgpLGVycm5vKTsKKyAg ICBlcnJubyA9IDA7CisgICAgaWYgKHggPCAwKSB7CisJeCA9IC0xOworICAgIH0gZWxzZSB7CisJ aWYgKCFzdGF0dXMpIHsJCQkvKiBUdXJuIGhhcmQgZmxvdyBvZmYgKi8KKwkgICAgaWYgKAorI2lm ZGVmIENPTU1FTlQKKwkJLyogVGhpcyBjYW4gZmFpbCBiZWNhdXNlIG9mIHNpZ24gZXh0ZW5zaW9u ICovCisJCS8qIGUuZy4gaW4gTGludXggd2hlcmUgaXQncyBCaXQgMzEgKi8KKwkJKHRlbXAuY19j ZmxhZyAmIENSVFNDVFMpID09IENSVFNDVFMKKyNlbHNlCisJCSh0ZW1wLmNfY2ZsYWcgJiBDUlRT Q1RTKSAhPSAwCisjZW5kaWYgLyogQ09NTUVOVCAqLworCQkpIHsKKwkJdGVtcC5jX2NmbGFnICY9 IH5DUlRTQ1RTOyAvKiBJdCdzIHRoZXJlLCByZW1vdmUgaXQgKi8KKwkJYXR0cnMtPmNfY2ZsYWcg Jj0gfkNSVFNDVFM7CisJCXggPSB0Y3NldGF0dHIodHR5ZmQsVENTQU5PVywmdGVtcCk7CisJCWRl YnVnKEYxMTEsInR0aGZsb3cgUE9TSVhfQ1JUU0NUUyBPRkYgdGNzZXRhdHRyIiwKKwkJICAgICAg Y2tpdG9hKHgpLGVycm5vKTsKKwkgICAgfSBlbHNlIHsJCQkvKiBKb2huIER1bmxhcCAyMDEwLTAx LTI2ICovCisJCWRlYnVnKEYwMDEsCisJCSAgICAgICJ0dGhmbG93IGJlZm9yZSBmb3JjaW5nIG9m ZiBhdHRycyBDUlRTQ1RTIiwKKwkJICAgICAgIiIsCisJCSAgICAgIGF0dHJzLT5jX2NmbGFnJkNS VFNDVFMKKwkJICAgICAgKTsKKwkJYXR0cnMtPmNfY2ZsYWcgJj0gfkNSVFNDVFM7IC8qIGZvcmNl IGl0IG9mZiBpZiAhc3RhdHVzICovCisJCWRlYnVnKEYwMDEsCisJCSAgICAgICJ0dGhmbG93IGFm dGVyIGZvcmNpbmcgb2ZmIGF0dHJzIENSVFNDVFMiLAorCQkgICAgICAiIiwKKwkJICAgICAgYXR0 cnMtPmNfY2ZsYWcmQ1JUU0NUUworCQkgICAgICApOworCQl9CisJfSBlbHNlIHsJCQkvKiBUdXJu IGhhcmQgZmxvdyBvbiAqLworCSAgICBpZiAoCisjaWZkZWYgQ09NTUVOVAorCQkvKiBUaGlzIGNh biBmYWlsIGJlY2F1c2Ugb2Ygc2lnbiBleHRlbnNpb24gKi8KKwkJKHRlbXAuY19jZmxhZyAmIENS VFNDVFMpICE9IENSVFNDVFMKKyNlbHNlCisJCSh0ZW1wLmNfY2ZsYWcgJiBDUlRTQ1RTKSA9PSAw CisjZW5kaWYgLyogQ09NTUVOVCAqLworCQkpIHsKKwkJdGVtcC5jX2NmbGFnIHw9IENSVFNDVFM7 IC8qIE5vdCB0aGVyZSwgYWRkIGl0ICovCisJCXRlbXAuY19pZmxhZyAmPSB+KElYT058SVhPRkZ8 SVhBTlkpOyAvKiBCeWUgdG8gSVhPTi9JWE9GRiAqLworCQl4ID0gdGNzZXRhdHRyKHR0eWZkLFRD U0FOT1csJnRlbXApOworCQlkZWJ1ZyhGMTExLCJ0dGhmbG93IFBPU0lYX0NSVFNDVFMgT04gdGNz ZXRhdHRyIiwKKwkJICAgICAgY2tpdG9hKHgpLGVycm5vKTsKKwkJYXR0cnMtPmNfY2ZsYWcgfD0g Q1JUU0NUUzsKKwkJYXR0cnMtPmNfaWZsYWcgJj0gfihJWE9OfElYT0ZGfElYQU5ZKTsKKwkgICAg fQorCX0KKyAgICB9CisjZWxzZQorI2lmZGVmIFNVTk9TNAorLyoKKyAgU3VuT1MgNC4wIChhbmQg bWF5YmUgZWFybGllcj8pLiAgVGhpcyBjb2RlIGlzIGRhbmdlcm91cyBiZWNhdXNlIGl0CisgIHBy ZXZlbnRzIGNvbXBpbGF0aW9uIHdpdGggR05VIGdjYywgd2hpY2ggdXNlcyBkaWZmZXJlbnQgZm9y bWF0cyBmb3IgdGhlCisgIF9JT1J4eHggbWFjcm9zIHRoYW4gcmVndWxhciBjYy4gIFN1bk9TIDQu MSBhbmQgbGF0ZXIgY2FuIHVzZSB0aGUgUE9TSVgKKyAgcm91dGluZXMgYWJvdmUsIHdoaWNoIHdv cmsgZm9yIGJvdGggY2MgYW5kIGdjYy4KKyovCisjZGVmaW5lIFRDR0VUUyBfSU9SKFQsIDgsIHN0 cnVjdCB0ZXJtaW9zKSAvKiBHZXQgbW9kZXMgaW50byB0ZXJtaW9zIHN0cnVjdCAqLworI2RlZmlu ZSBUQ1NFVFMgX0lPVyhULCA5LCBzdHJ1Y3QgdGVybWlvcykgLyogU2V0IG1vZGVzIGZyb20gdGVy bWlvcyBzdHJ1Y3QgKi8KKyNkZWZpbmUgQ1JUU0NUUyAweDgwMDAwMDAwCQkgIC8qIFJUUy9DVFMg ZmxvdyBjb250cm9sICovCisKKyAgICBzdHJ1Y3QgdGVybWlvcyB7CisJdW5zaWduZWQgbG9uZyBj X2lmbGFnOwkJLyogSW5wdXQgbW9kZXMgKi8KKwl1bnNpZ25lZCBsb25nIGNfb2ZsYWc7CQkvKiBP dXRwdXQgbW9kZXMgKi8KKwl1bnNpZ25lZCBsb25nIGNfY2ZsYWc7CQkvKiBDb250cm9sIG1vZGVz ICovCisJdW5zaWduZWQgbG9uZyBjX2xmbGFnOwkJLyogTGluZSBkaXNjaXBsaW5lIG1vZGVzICov CisJY2hhciBjX2xpbmU7CisJQ0hBUiBjX2NjWzE3XTsKKyAgICB9OworICAgIHN0cnVjdCB0ZXJt aW9zIHRlbXA7CisjaWZkZWYgTkVUQ01ECisgICAgaWYgKHR0cGlwZSkgcmV0dXJuKDApOworI2Vu ZGlmIC8qIE5FVENNRCAqLworI2lmZGVmIE5FVFBUWQorICAgIGlmICh0dHB0eSkgcmV0dXJuKDAp OworI2VuZGlmIC8qIE5FVFBUWSAqLworICAgIGRlYnVnKEYxMDEsInR0aGZsb3cgZW50cnkgc3Rh dHVzIiwiIixzdGF0dXMpOworICAgIGlmIChpb2N0bCh0dHlmZCxUQ0dFVFMsJnRlbXApID4gLTEp IHsgLyogR2V0IHRlcm1pbmFsIG1vZGVzLiAqLworCWlmIChzdGF0dXMpIHsJCQkvKiBUdXJuIGhh cmQgZmxvdyBvbiAqLworCSAgICB0ZW1wLmNfY2ZsYWcgfD0gQ1JUU0NUUzsJLyogQWRkIFJUUy9D VFMgdG8gdGhlbS4gKi8KKwkgICAgeCA9IGlvY3RsKHR0eWZkLFRDU0VUUywmdGVtcCk7IC8qIFNl dCB0aGVtIGFnYWluLiAqLworCSAgICBhdHRycy0+Y19jZmxhZyB8PSBDUlRTQ1RTOwkvKiBBZGQg dG8gZ2xvYmFsIGluZm8uICovCisJfSBlbHNlIHsJCQkvKiBUdXJuIGhhcmQgZmxvdyBvZmYgKi8K KwkgICAgdGVtcC5jX2NmbGFnICY9IH5DUlRTQ1RTOworCSAgICB4ID0gaW9jdGwodHR5ZmQsVENT RVRTLCZ0ZW1wKTsKKwkgICAgYXR0cnMtPmNfY2ZsYWcgJj0gfkNSVFNDVFM7CisJfQorICAgIH0K KyNlbHNlCQkJCQkvKiBOb3QgU3VuT1MgNC4wIG9yIGxhdGVyICovCisjaWZkZWYgQUlYUlMJCQkJ LyogSUJNIEFJWCBSUy82MDAwICovCisjaWZuZGVmIEFJWDQxCQkJCS8qIEJ1dCBvbmx5IHByZS00 LnggPT0gU1ZSNCAqLworI2lmZGVmIE5FVENNRAorICAgIGlmICh0dHBpcGUpIHJldHVybigwKTsK KyNlbmRpZiAvKiBORVRDTUQgKi8KKyNpZmRlZiBORVRQVFkKKyAgICBpZiAodHRwdHkpIHJldHVy bigwKTsKKyNlbmRpZiAvKiBORVRQVFkgKi8KKyAgICBpZiAoc3RhdHVzKSB7CisJaWYgKCh4ID0g aW9jdGwodHR5ZmQsIFRYQUREQ0QsICJydHMiKSkgPCAwICYmIGVycm5vICE9IEVCVVNZKQorCSAg ZGVidWcoRjEwMCwiaGFyZGZsb3cgVFhBRERDRCAocnRzKSBlcnJvciIsICIiLCAwKTsKKyAgICB9 IGVsc2UgeworCWlmICgoeCA9IGlvY3RsKHR0eWZkLCBUWERFTENELCAicnRzIikpIDwgMCAmJiBl cnJubyAhPSBFSU5WQUwpCisJICBkZWJ1ZyhGMTAwLCJoYXJkZmxvdyBUWERFTENEIChydHMpIGVy cm9yIiwgIiIsIDApOworICAgIH0KKyNlbmRpZiAvKiBBSVg0MSAqLworI2Vsc2UJCQkJCS8qIE5v dCBBSVggUlMvNjAwMCAqLworCisjaWZkZWYgQVRUU1YJCQkJLyogU3lzdGVtIFYuLi4gKi8KKwor I2lmZGVmIENLX1NDT1Y1CQkJCS8qIFNDTyBPcGVuIFNlcnZlciA1LjAgKi8KKyNkZWZpbmUgQ0tf U0NPVU5JWAorI2Vsc2UKKyNpZmRlZiBNX1VOSVgJCQkJLyogU0NPIFVOSVggMy4ydjQueCBvciBl YXJsaWVyICovCisjZGVmaW5lIENLX1NDT1VOSVgKKyNlbmRpZiAvKiBNX1VOSVggKi8KKyNlbmRp ZiAvKiBDS19TQ09WNSAqLworCisjaWZkZWYgU0NPX0ZPUkNFX1JUU1hPRkYKKyNpZmRlZiBDS19T Q09VTklYCQkJLyogQnV0IG5vdCBTQ08gT3BlblNlcnZlciA1LjAuNCAqLworI2lmZGVmIFNDT19P U1I1MDQJCQkvKiBvciBsYXRlci4uLiAqLworI3VuZGVmIENLX1NDT1VOSVgKKyNlbmRpZiAvKiBT Q09fT1NSNTA0ICovCisjZW5kaWYgLyogQ0tfU0NPVU5JWCAqLworI2VuZGlmIC8qIFNDT19GT1JD RV9SVFNYT0ZGICovCisKKyNpZmRlZiBDS19TQ09VTklYCisjaWZkZWYgUE9TSVgKKyAgICBzdHJ1 Y3QgdGVybWlvcyB0ZW1wOworI2lmZGVmIE5FVENNRAorICAgIGlmICh0dHBpcGUpIHJldHVybigw KTsKKyNlbmRpZiAvKiBORVRDTUQgKi8KKyNpZmRlZiBORVRQVFkKKyAgICBpZiAodHRwdHkpIHJl dHVybigwKTsKKyNlbmRpZiAvKiBORVRQVFkgKi8KKyAgICBkZWJ1ZyhGMTAxLCJ0dGhmbG93IFND T1VOSVggUE9TSVggZW50cnkgc3RhdHVzIiwiIixzdGF0dXMpOworICAgIGVycm5vID0gMDsKKyAg ICB4ID0gdGNnZXRhdHRyKHR0eWZkLCAmdGVtcCk7CisgICAgZGVidWcoRjExMSwidHRoZmxvdyBT Q08gVU5JWCBQT1NJWCB0Y2dldGF0dHIiLGNraXRvYSh4KSxlcnJubyk7CisjZWxzZSAvKiBQT1NJ WCAqLworICAgIHN0cnVjdCB0ZXJtaW8gdGVtcDsKKyNpZmRlZiBORVRDTUQKKyAgICBpZiAodHRw aXBlKSByZXR1cm4oMCk7CisjZW5kaWYgLyogTkVUQ01EICovCisjaWZkZWYgTkVUUFRZCisgICAg aWYgKHR0cHR5KSByZXR1cm4oMCk7CisjZW5kaWYgLyogTkVUUFRZICovCisgICAgZGVidWcoRjEw MSwidHRoZmxvdyBTQ09VTklYIG5vbi1QT1NJWCBlbnRyeSBzdGF0dXMiLCIiLHN0YXR1cyk7Cisg ICAgeCA9IGlvY3RsKHR0eWZkLCBUQ0dFVEEsICZ0ZW1wKTsKKyAgICBkZWJ1ZyhGMTExLCJ0dGhm bG93IFNDTyBVTklYIG5vbi1QT1NJWCBUQ0dFVEEiLGNraXRvYSh4KSxlcnJubyk7CisjZW5kaWYg LyogUE9TSVggKi8KKy8qCisgIFRoaXMgaXMgbm90IHJlYWxseSBQT1NJWCwgc2luY2UgUE9TSVgg ZG9lcyBub3QgZGVhbCB3aXRoIGhhcmR3YXJlIGZsb3cKKyAgY29udHJvbCwgYnV0IHdlIGFyZSB1 c2luZyB0aGUgUE9TSVggQVBJcy4gIEluIGZhY3QsIFJUU0ZMT1cgYW5kIENUU0ZMT1cKKyAgYXJl IGRlZmluZWQgaW4gdGVybWlvLmgsIGJ1dCB3aXRoaW4gI2lmbmRlZiBfUE9TSVhfU09VUkNFLi4j ZW5kaWYuICBTbworICBsZXQncyB0cnkgZm9yY2luZyB0aGVpciBkZWZpbml0aW9ucyBoZXJlLgor Ki8KKyNpZm5kZWYgQ1RTRkxPVworI2RlZmluZSBDVFNGTE9XIDAwMjAwMDAKKyAgICBkZWJ1ZyhG MTAxLCJ0dGhmbG93IFNDTyBkZWZpbmluZyBDVFNGTE9XIiwiIixDVFNGTE9XKTsKKyNlbHNlCisg ICAgZGVidWcoRjEwMSwidHRoZmxvdyBTQ08gQ1RTRkxPVyIsIiIsQ1RTRkxPVyk7CisjZW5kaWYg LyogQ1RTRkxPVyAqLworI2lmbmRlZiBSVFNGTE9XCisjZGVmaW5lIFJUU0ZMT1cgMDA0MDAwMAor ICAgIGRlYnVnKEYxMDEsInR0aGZsb3cgU0NPIGRlZmluaW5nIFJUU0ZMT1ciLCIiLFJUU0ZMT1cp OworI2Vsc2UKKyAgICBkZWJ1ZyhGMTAxLCJ0dGhmbG93IFNDTyBSVFNGTE9XIiwiIixSVFNGTE9X KTsKKyNlbmRpZiAvKiBSVFNGTE9XICovCisjaWZuZGVmIE9SVFNGTAorI2RlZmluZSBPUlRTRkwg MDEwMDAwMAorICAgIGRlYnVnKEYxMDEsInR0aGZsb3cgU0NPIGRlZmluaW5nIE9SVFNGTCIsIiIs T1JUU0ZMKTsKKyNlbHNlCisgICAgZGVidWcoRjEwMSwidHRoZmxvdyBTQ08gT1JUU0ZMIiwiIixP UlRTRkwpOworI2VuZGlmIC8qIE9SVFNGTCAqLworCisgICAgaWYgKHggIT0gLTEpIHsKKwlpZiAo c3RhdHVzKSB7CQkJLyogVHVybiBpdCBPTiAqLworCSAgICB0ZW1wLmNfY2ZsYWcgfD0gUlRTRkxP V3xDVFNGTE9XOworCSAgICBhdHRycy0+Y19jZmxhZyB8PSBSVFNGTE9XfENUU0ZMT1c7CisjaWZk ZWYgT1JUU0ZMCisJICAgIHRlbXAuY19jZmxhZyAmPSB+T1JUU0ZMOworCSAgICBhdHRycy0+Y19j ZmxhZyAmPSB+T1JUU0ZMOworI2VuZGlmIC8qIE9SVFNGTCAqLworCSAgICB0ZW1wLmNfaWZsYWcg Jj0gfihJWE9OfElYT0ZGfElYQU5ZKTsKKwkgICAgYXR0cnMtPmNfaWZsYWcgJj0gfihJWE9OfElY T0ZGfElYQU5ZKTsKKwl9IGVsc2UgewkJCS8qIFR1cm4gaXQgT0ZGICovCisjaWZkZWYgT1JUU0ZM CisJICAgIHRlbXAuY19jZmxhZyAmPSB+KFJUU0ZMT1d8Q1RTRkxPV3xPUlRTRkwpOworCSAgICBh dHRycy0+Y19jZmxhZyAmPSB+KFJUU0ZMT1d8Q1RTRkxPV3xPUlRTRkwpOworI2Vsc2UgIC8qIE9S VFNGTCAqLworCSAgICB0ZW1wLmNfY2ZsYWcgJj0gfihSVFNGTE9XfENUU0ZMT1cpOworCSAgICBh dHRycy0+Y19jZmxhZyAmPSB+KFJUU0ZMT1d8Q1RTRkxPVyk7CisjZW5kaWYgLyogT1JUU0ZMICov CisJfQorI2lmZGVmIFBPU0lYCisJeCA9IHRjc2V0YXR0cih0dHlmZCwgVENTQURSQUlOLCAmdGVt cCk7CisjZWxzZQorCXggPSBpb2N0bCh0dHlmZCwgVENTRVRBLCAmdGVtcCk7CisjZW5kaWYgLyog UE9TSVggKi8KKwlkZWJ1ZyhGMTAxLCJ0dGhmbG93IFNDTyBzZXQgbW9kZXMiLCIiLHgpOworICAg IH0KKyNlbHNlIC8qIE5vdCBTQ08gVU5JWCAqLworI2lmZGVmIE5FVENNRAorICAgIGlmICh0dHBp cGUpIHJldHVybigwKTsKKyNlbmRpZiAvKiBORVRDTUQgKi8KKyNpZmRlZiBORVRQVFkKKyAgICBp ZiAodHRwdHkpIHJldHVybigwKTsKKyNlbmRpZiAvKiBORVRQVFkgKi8KKyAgICBpZiAoIXN0YXR1 cykgewkJCS8qIFR1cm4gaXQgT0ZGICovCisjaWZkZWYgUlRTWE9GRgorCWRlYnVnKEYxMDAsInR0 aGZsb3cgQVRUU1YgUlRTL0NUUyBPRkYiLCIiLDApOworCXJjdHN4LnhfaGZsYWcgJj0gfihSVFNY T0ZGfENUU1hPTik7CisjaWZkZWYgVENTRVRYCisJeCA9IGlvY3RsKHR0eWZkLFRDU0VUWCwmcmN0 c3gpOworCWRlYnVnKEYxMDEsInR0aGZsb3cgQVRUU1YgVENTRVRYIE9GRiIsIiIseCk7CisjZWxz ZQorCXggPSAtMQorCWRlYnVnKEYxMDAsInR0aGZsb3cgVENTRVRYIG5vdCBkZWZpbmVkIiwiIiww KTsKKyNlbmRpZiAvKiBUQ1NFVFggKi8KKyNlbHNlCisJZGVidWcoRjEwMCwidHRoZmxvdyBBVFRT ViBSVFNYT0ZGIG5vdCBkZWZpbmVkIiwiIiwwKTsKKyNlbmRpZiAvKiBSVFNYT0ZGICovCisjaWZk ZWYgRFRSWE9GRgorCWRlYnVnKEYxMDAsInR0aGZsb3cgQVRUU1YgRFRSL0NEIE9GRiIsIiIsMCk7 CisJcmN0c3gueF9oZmxhZyAmPSB+KERUUlhPRkZ8Q0RYT04pOworCXggPSBpb2N0bCh0dHlmZCxU Q1NFVFgsJnJjdHN4KTsKKwlkZWJ1ZyhGMTAxLCJ0dGhmbG93IEFUVFNWIERUUlhPRkYgT0ZGIiwi Iix4KTsKKyNlbHNlCisJZGVidWcoRjEwMCwidHRoZmxvdyBBVFRTViBEVFJYT0ZGIG5vdCBkZWZp bmVkIiwiIiwwKTsKKyNlbmRpZiAvKiBEVFJYT0ZGICovCisgICAgfSBlbHNlIHsJCQkJLyogVHVy biBpdCBPTi4gKi8KKwlpZiAoZmxvdyA9PSBGTE9fUlRTQykgewkvKiBSVFMvQ1RTIEZsb3cgY29u dHJvbC4uLiAqLworCSAgICBkZWJ1ZyhGMTAwLCJ0dGhmbG93IEFUVFNWIFJUUy9DVFMgT04iLCIi LDApOworI2lmZGVmIFJUU1hPRkYKKwkgICAgLyogVGhpcyBpcyB0aGUgcHJlZmVycmVkIHdheSwg YWNjb3JkaW5nIHRvIFNWSUQzICovCisjaWZkZWYgVENHRVRYCisJICAgIHggPSBpb2N0bCh0dHlm ZCxUQ0dFVFgsJnJjdHN4KTsKKwkgICAgZGVidWcoRjEwMSwidHRoZmxvdyBUQ0dFVFgiLCIiLHgp OworCSAgICBpZiAoeCA+IC0xKSB7CisJCXJjdHN4LnhfaGZsYWcgfD0gUlRTWE9GRiB8IENUU1hP TjsKKwkJeCA9IGlvY3RsKHR0eWZkLFRDU0VUWCwmcmN0c3gpOworCQlkZWJ1ZyhGMTAwLCJ0dGhm bG93IEFUVFNWIGlvY3RsIiwiIix4KTsKKwkgICAgfQorI2Vsc2UKKwkgICAgZGVidWcoRjEwMCwi dHRoZmxvdyBUQ0dFVFggbm90IGRlZmluZWQiLCIiLDApOworCSAgICB4ID0gLTEKKyNlbmRpZiAv KiBUQ0dFVFggKi8KKyNlbHNlCisJICAgIGRlYnVnKEYxMDAsInR0aGZsb3cgUlRTWE9GRiBub3Qg ZGVmaW5lZCIsIiIsMCk7CisJICAgIHggPSAtMTsKKyNlbmRpZiAvKiBSVFNYT0ZGICovCisJfSBl bHNlIGlmIChmbG93ID09IEZMT19EVFJDKSB7CS8qIERUUi9DRCBGbG93IGNvbnRyb2wuLi4gKi8K KwkgICAgZGVidWcoRjEwMCwidHRoZmxvdyBBVFRTViBEVFIvQ0QgT04iLCIiLDApOworI2lmZGVm IERUUlhPRkYKKwkgICAgLyogVGhpcyBpcyBzdHJhaWdodCBvdXQgb2YgU1ZJRCBSNCAqLworCSAg ICBpZiAoaW9jdGwodHR5ZmQsVENHRVRYLCZyY3RzeCkgPiAtMSkgeworCQlyY3RzeC54X2hmbGFn ICY9IH4oRFRSWE9GRnxDRFhPTik7CisJCXggPSBpb2N0bCh0dHlmZCxUQ1NFVFgsJnJjdHN4KTsK KwkgICAgfQorI2Vsc2UKKwkgICAgZGVidWcoRjEwMCwidHRoZmxvdyBBVFRTViBEVFJYT0ZGIG5v dCBkZWZpbmVkIiwiIiwwKTsKKwkgICAgeCA9IC0xOworI2VuZGlmIC8qIERUUlhPRkYgKi8KKwl9 CisgICAgfQorI2VuZGlmIC8qIENLX1NDT1VOSVggKi8KKworI2Vsc2UgLyogbm90IFN5c3RlbSBW Li4uICovCisKKyNpZmRlZiBDS19EVFJDVFMKKyNpZmRlZiBMRE9EVFIKKyNpZmRlZiBMRE9DVFMK KyNpZmRlZiBORVRDTUQKKyAgICBpZiAodHRwaXBlKSByZXR1cm4oMCk7CisjZW5kaWYgLyogTkVU Q01EICovCisjaWZkZWYgTkVUUFRZCisgICAgaWYgKHR0cHR5KSByZXR1cm4oMCk7CisjZW5kaWYg LyogTkVUUFRZICovCisgICAgeCA9IExET0RUUiB8IExET0NUUzsJCS8qIEZvdW5kIG9ubHkgb24g VVRFSz8gKi8KKyAgICBpZiAoZmxvdyA9PSBGTE9fRFRSVCAmJiBzdGF0dXMpIHsJLyogVXNlIGhh cmR3YXJlIGZsb3cgY29udHJvbCAqLworCWlmIChsbW9kZWYpIHsKKwkgICAgeCA9IGlvY3RsKHR0 eWZkLFRJT0NMQklTLCZ4KTsKKwkgICAgaWYgKHggPCAwKSB7CisJICAgICAgICBkZWJ1ZyhGMTAw LCJoYXJkZmxvdyBUSU9DTEJJUyBlcnJvciIsIiIsMCk7CisJICAgIH0gZWxzZSB7CisJCWxtb2Rl ZisrOworCQlkZWJ1ZyhGMTAwLCJoYXJkZmxvdyBUSU9DTEJJUyBvayIsIiIsMCk7CisJICAgIH0K Kwl9CisgICAgfSBlbHNlIHsKKwlpZiAobG1vZGVmKSB7CisJICAgIHggPSBpb2N0bCh0dHlmZCxU SU9DTEJJQywmeCk7CisJICAgIGlmICh4IDwgMCkgeworCSAgICAgICAgZGVidWcoRjEwMCwiaGFy ZGZsb3cgVElPQ0xCSUMgZXJyb3IiLCIiLDApOworCSAgICB9IGVsc2UgeworCQlsbW9kZWYrKzsK KwkJZGVidWcoRjEwMCwiaGFyZGZsb3cgVElPQ0xCSUMgb2siLCIiLDApOworCSAgICB9CisJfQor ICAgIH0KKyNlbmRpZiAvKiBMRE9EVFIgKi8KKyNlbmRpZiAvKiBMRE9DVFMgKi8KKyNlbmRpZiAv KiBDS19EVFJDVFMgKi8KKyNlbmRpZiAvKiBBVFRTViAqLworI2VuZGlmIC8qIEFJWFJTICovCisj ZW5kaWYgLyogU1VOT1M0ICovCisjZW5kaWYgLyogUU5YICovCisjZW5kaWYgLyogUE9TSVhfQ1JU U0NUUyAqLworI2VuZGlmIC8qIFNVTk9TNDEgKi8KKworI2Vsc2UgLyogT1hPUyAqLworCisgICAg c3RydWN0IHRlcm1pb3MgdGVtcDsJCS8qIE9saXZldHRpIFgvT1MgLi4uICovCisKKyNpZmRlZiBO RVRDTUQKKyAgICBpZiAodHRwaXBlKSByZXR1cm4oMCk7CisjZW5kaWYgLyogTkVUQ01EICovCisj aWZkZWYgTkVUUFRZCisgICAgaWYgKHR0cHR5KSByZXR1cm4oMCk7CisjZW5kaWYgLyogTkVUUFRZ ICovCisgICAgeCA9IGlvY3RsKHR0eWZkLFRDR0VUUywmdGVtcCk7CisgICAgaWYgKHggPT0gMCkg eworCXRlbXAuY19jZmxhZyAmPSB+KENSVFNDVFN8Q0RUUkNUU3xDQlJLRkxPV3xDRFRSRFNSfENS VFNEU1IpOworCWlmIChzdGF0dXMpIHsKKwkgICAgc3dpdGNoIChmbG93KSB7CisJICAgICAgY2Fz ZSBGTE9fUlRTQzogdGVtcC5jX2NmbGFnIHw9IENSVFNDVFM7IC8qIFJUUy9DVFMgKGhhcmQpICov CisJCWJyZWFrOworCSAgICAgIGNhc2UgRkxPX0RUUlQ6IHRlbXAuY19jZmxhZyB8PSBDRFRSQ1RT OyAvKiBEVFIvQ1RTIChoYXJkKSAqLworCQlicmVhazsKKwkgICAgfQorCX0KKwl4ID0gaW9jdGwo dHR5ZmQsVENTRVRTLCZ0ZW1wKTsKKyAgICB9CisjZW5kaWYgLyogT1hPUyAqLworICAgIHJldHVy bih4KTsKKworI2VuZGlmIC8qIFBsYW45ICovCit9CisKKy8qICBUIFQgUCBLIFQgIC0tICBDb25k aXRpb24gdGhlIGNvbW11bmljYXRpb24gbGluZSBmb3IgcGFja2V0cyAqLworLyogICAgICAgICAg ICAgICAgIG9yIGZvciBtb2RlbSBkaWFsaW5nICovCisKKy8qCisgIElmIGNhbGxlZCB3aXRoIHNw ZWVkID4gLTEsIGFsc28gc2V0IHRoZSBzcGVlZC4KKyAgUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC0x IG9uIGZhaWx1cmUuCisKKyAgTk9URTogdGhlICJ4ZmxvdyIgcGFyYW1ldGVyIGlzIHN1cHBvc2Vk IHRvIGJlIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQKKyAgdHlwZSBvZiBmbG93IGNvbnRyb2wsIGJ1 dCBmb3IgaGlzdG9yaWNhbCByZWFzb25zLCB0aGlzIHBhcmFtZXRlciBpcyBhbHNvCisgIHVzZWQg dG8gaW5kaWNhdGUgdGhhdCB3ZSBhcmUgZGlhbGluZy4gIFRoZXJlZm9yZSwgd2hlbiB0aGUgdHJ1 ZSBmbG93CisgIGNvbnRyb2wgc2V0dGluZyBpcyBuZWVkZWQsIHdlIGFjY2VzcyB0aGUgZXh0ZXJu YWwgdmFyaWFibGUgImZsb3ciLCByYXRoZXIKKyAgdGhhbiB0cnVzdGluZyBvdXIgInhmbG93IiBh cmd1bWVudC4KKyovCitpbnQKKyNpZmRlZiBDS19BTlNJQwordHRwa3QobG9uZyBzcGVlZCwgaW50 IHhmbG93LCBpbnQgcGFyaXR5KQorI2Vsc2UKK3R0cGt0KHNwZWVkLHhmbG93LHBhcml0eSkgbG9u ZyBzcGVlZDsgaW50IHhmbG93LCBwYXJpdHk7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIHR0 cGt0ICovIHsKKyNpZm5kZWYgTk9MT0NBTAorICAgIGludCBzMjsKKyAgICBpbnQgcyA9IC0xOwor I2VuZGlmIC8qIE5PTE9DQUwgKi8KKyAgICBpbnQgeDsKKyAgICBleHRlcm4gaW50IGZsb3c7CQkJ LyogUkVBTCBmbG93LWNvbnRyb2wgc2V0dGluZyAqLworCisgICAgaWYgKHR0eWZkIDwgMCkgcmV0 dXJuKC0xKTsgICAgICAgICAgLyogTm90IG9wZW4uICovCisKKyAgICBkZWJ1ZyhGMTAxLCJ0dHBr dCBwYXJpdHkiLCIiLHBhcml0eSk7CisgICAgZGVidWcoRjEwMSwidHRwa3QgeGZsb3ciLCIiLHhm bG93KTsKKyAgICBkZWJ1ZyhGMTAxLCJ0dHBrdCBzcGVlZCIsIiIsKGludCkgc3BlZWQpOworCisg ICAgdHRwcnR5ID0gcGFyaXR5OyAgICAgICAgICAgICAgICAgICAgLyogTGV0IG90aGVyIHR0IGZ1 bmN0aW9ucyBzZWUgdGhlc2UuICovCisgICAgdHRzcGVlZCA9IHNwZWVkOwkJCS8qIE1ha2UgZ2xv YmFsIGNvcHkgZm9yIHRoaXMgbW9kdWxlICovCisgICAgdHRwbXNrID0gdHRwcnR5ID8gMDE3NyA6 IDAzNzc7CS8qIFBhcml0eSBzdHJpcHBpbmcgbWFzayAqLworI2lmZGVmIFBBUlNFTlNFCisgICAg bmVlZHBjaGsgPSB0dHBydHkgPyAwIDogMTsJCS8qIFBhcml0eSBjaGVjayBuZWVkZWQ/ICovCisj ZWxzZQorICAgIG5lZWRwY2hrID0gMDsKKyNlbmRpZiAvKiBQQVJTRU5TRSAqLworCisgICAgZGVi dWcoRjEwMSwidHRwa3QgdHRwbXNrIiwiIix0dHBtc2spOworICAgIGRlYnVnKEYxMDEsInR0cGt0 IG5ldGNvbm4iLCIiLG5ldGNvbm4pOworCisjaWZkZWYgTkVUQ09OTgkJCQkvKiBObyBtb2RlLWNo YW5naW5nIGZvciB0ZWxuZXQgKi8KKyAgICBpZiAobmV0Y29ubikgeworI2lmZGVmIFRDUFNPQ0tF VAorI2lmZGVmIFRDUF9OT0RFTEFZCisgICAgICAgIGlmICh0dG5ldCA9PSBORVRfVENQQikgewkv KiBCdXQgdHVybiBvZmYgTmFnbGUgKi8KKyAgICAgICAgICAgIGV4dGVybiBpbnQgdGNwX25vZGVs YXk7CisgICAgICAgICAgICBub2RlbGF5X3NhdiA9IHRjcF9ub2RlbGF5OworICAgICAgICAgICAg bm9fZGVsYXkodHR5ZmQsMSk7CisgICAgICAgIH0KKyNlbmRpZiAvKiBUQ1BfTk9ERUxBWSAqLwor I2lmZGVmIFROX0NPTVBPUlQKKyAgICAgICAgaWYgKGlzdG5jb21wb3J0KCkpIHsKKyAgICAgICAg ICAgIGludCByYyA9IC0xOworICAgICAgICAgICAgaWYgKHR2dGZsZyA9PSAwICYmIHNwZWVkID09 IHR0c3BlZWQgJiYgZmxvdyA9PSB0dGZsb3cKKyAgICAgICAgICAgICAgICAgLyogJiYgdHRjYXJy ID09IGN1cmNhcnIgKi8gKSB7CisgICAgICAgICAgICAgICAgZGVidWcoRjEwMCwidHRwa3QgbW9k ZXMgYWxyZWFkeSBzZXQsIHNraXBwaW5nLi4uIiwiIiwwKTsKKyAgICAgICAgICAgICAgICByZXR1 cm4oMCk7CQkvKiBBbHJlYWR5IGJlZW4gY2FsbGVkLiAqLworICAgICAgICAgICAgfQorICAgICAg ICAgICAgaWYgKGZsb3cgIT0gdHRmbG93KSB7CisgICAgICAgICAgICAgICAgaWYgKChyYyA9IHRu c2V0ZmxvdyhmbG93KSkgPCAwKQorCQkgIHJldHVybihyYyk7CisgICAgICAgICAgICAgICAgdHRm bG93ID0gZmxvdzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzcGVlZCAhPSB0dHNw ZWVkKSB7CisgICAgICAgICAgICAgICAgaWYgKHNwZWVkIDw9IDApIAorCQkgIHNwZWVkID0gdG5j X2dldF9iYXVkKCk7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoKHJjID0gdG5jX3NldF9iYXVk KHNwZWVkKSkgPCAwKQorCQkgIHJldHVybihyYyk7CisgICAgICAgICAgICAgICAgdHRzcGVlZCA9 IHNwZWVkOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdG5jX3NldF9kYXRhc2l6ZSg4KTsK KwkgICAgdG5jX3NldF9zdG9wc2l6ZShzdG9wYml0cyk7CisKKyNpZmRlZiBIV1BBUklUWQorICAg ICAgICAgICAgaWYgKGh3cGFyaXR5KSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChod3Bhcml0 eSkgeworCQkgIGNhc2UgJ2UnOgkJCS8qIEV2ZW4gKi8KKyAgICAgICAgICAgICAgICAgICAgZGVi dWcoRjEwMCwidHRyZXMgOCBiaXRzICsgZXZlbiBwYXJpdHkiLCIiLDApOworICAgICAgICAgICAg ICAgICAgICB0bmNfc2V0X3Bhcml0eSgzKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisJ CSAgY2FzZSAnbyc6CQkJLyogT2RkICovCisgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDAs InR0cmVzIDggYml0cyArIG9kZCBwYXJpdHkiLCIiLDApOworICAgICAgICAgICAgICAgICAgICB0 bmNfc2V0X3Bhcml0eSgyKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisJCSAgY2FzZSAn bSc6CQkJLyogTWFyayAqLworICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJ0dHJlcyA4 IGJpdHMgKyBpbnZhbGlkIHBhcml0eTogbWFyayIsIiIsMCk7CisgICAgICAgICAgICAgICAgICAg IHRuY19zZXRfcGFyaXR5KDQpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKwkJICBjYXNl ICdzJzoJCQkvKiBTcGFjZSAqLworICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJ0dHJl cyA4IGJpdHMgKyBpbnZhbGlkIHBhcml0eTogc3BhY2UiLCIiLDApOworICAgICAgICAgICAgICAg ICAgICB0bmNfc2V0X3Bhcml0eSg1KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIAorI2VuZGlmIC8qIEhXUEFSSVRZICov CisJICAgIHsKKyAgICAgICAgICAgICAgICB0bmNfc2V0X3Bhcml0eSgxKTsgICAgICAgICAgICAg IC8qIE5vbmUgKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHR2dGZsZyA9IDA7CisgICAg ICAgICAgICByZXR1cm4oMCk7CisgICAgICAgIH0KKyNlbmRpZiAvKiBUTl9DT01QT1JUICovCisj ZW5kaWYgLyogVENQU09DS0VUICovCisgICAgICAgIHR2dGZsZyA9IDA7CisgICAgICAgIHJldHVy bigwKTsKKyAgICB9CisjZW5kaWYgLyogTkVUQ09OTiAqLworI2lmZGVmIE5FVENNRAorICAgIGlm ICh0dHBpcGUpIHJldHVybigwKTsKKyNlbmRpZiAvKiBORVRDTUQgKi8KKyNpZmRlZiBORVRQVFkK KyAgICBpZiAodHRwdHkpIHJldHVybigwKTsKKyNlbmRpZiAvKiBORVRQVFkgKi8KKworI2lmbmRl ZiBQbGFuOQorICAgIGlmICh0dGZkZmxnICYmICFpc2F0dHkodHR5ZmQpKSByZXR1cm4oMCk7Cisj ZW5kaWYgLyogUGxhbjkgKi8KKworI2lmZGVmIENPSEVSRU5UCisjZGVmaW5lIFNWT1JQT1NJWAor I2VuZGlmIC8qIENPSEVSRU5UICovCisKKyNpZm5kZWYgU1ZPUlBPU0lYCQkJLyogQmVya2VsZXks IFY3LCBldGMuICovCisjaWZkZWYgTFBBU1M4CisvKgorIEZvciBzb21lIHJlYXNvbiwgd2l0aCBC U0QgdGVybWluYWwgZHJpdmVycywgeW91IGNhbid0IHNldCBGTE9XIHRvIFhPTi9YT0ZGCisgYWZ0 ZXIgaGF2aW5nIHByZXZpb3VzbHkgc2V0IGl0IHRvIE5PTkUgd2l0aG91dCBjbG9zaW5nIGFuZCBy ZW9wZW5pbmcgdGhlCisgZGV2aWNlLiAgVW5sZXNzIHRoZXJlJ3Mgc29tZXRoaW5nIEkgb3Zlcmxv b2tlZCBiZWxvdy4uLgorKi8KKyAgICBpZiAodHRmbG93ID09IEZMT19OT05FICYmIGZsb3cgPT0g RkxPX1hPTlggJiYgeGxvY2FsID09IDApIHsKKwlkZWJ1ZyhGMTAxLCJ0dHBrdCBleGVjdXRpbmcg aG9ycmlibGUgZmxvdyBrbHVkZ2UiLCIiLDApOworCXR0Y2xvcygwKTsJCQkvKiBDbG9zZSBpdCAq LworCXggPSAwOworCXR0b3Blbih0dG5tc3YsJngsdHRtZG0sMCk7CS8qIE9wZW4gaXQgYWdhaW4g Ki8KKyAgICB9CisjZW5kaWYgLyogTFBBU1M4ICovCisjZW5kaWYgLyogU1ZPUlBPU0lYICovCisK KyNpZmRlZiBDT0hFUkVOVAkJCQkvKiBUaGlzIG11c3QgYmUgdmVzdGlnaWFsIHNpbmNlIHdlICov CisjdW5kZWYgU1ZPUlBPU0lYCQkJLyogcmV2ZXJzZSBpdCBhIGZldyBsaW5lcyBiZWxvdy4uLiAq LworI2VuZGlmIC8qIENPSEVSRU5UICovCisKKyAgICBpZiAoeGZsb3cgIT0gRkxPX0RJQUwgJiYg eGZsb3cgIT0gRkxPX0RJQVgpCisgICAgICB0dGZsb3cgPSB4ZmxvdzsJCQkvKiBOb3cgbWFrZSB0 aGlzIGF2YWlsYWJsZSB0b28uICovCisKKyNpZm5kZWYgTk9MT0NBTAorICAgIGlmICh4bG9jYWwp IHsKKwlzMiA9IChpbnQpIChzcGVlZCAvIDEwTCk7CS8qIENvbnZlcnQgYnBzIHRvIGNwcyAqLwor CWRlYnVnKEYxMDEsInR0cGt0IGNhbGxpbmcgdHRzc3BkIiwiIixzMik7CisJcyA9IHR0c3NwZChz Mik7CQkJLyogQ2hlY2sgYW5kIHNldCB0aGUgc3BlZWQgKi8KKwlkZWJ1ZyhGMTAxLCJ0dHBrdCB0 dHNzcGQgcmVzdWx0IiwiIixzKTsKKyAJY2FycmN0bCgmdHRyYXcsIHhmbG93ICE9IEZMT19ESUFM IC8qIENhcnJpZXIgY29udHJvbCAqLworCQkmJiAodHRjYXJyID09IENBUl9PTiB8fCAodHRjYXJy ID09IENBUl9BVVQgJiYgdHRtZG0gIT0gMCkpKTsKKwl0dnRmbGcgPSAwOwkJCS8qIFNvIHR0dnQo KSB3aWxsIHdvcmsgbmV4dCB0aW1lICovCisgICAgfQorI2VuZGlmIC8qIE5PTE9DQUwgKi8KKwor I2lmZGVmIENPSEVSRU5UCisjZGVmaW5lIFNWT1JQT1NJWAorI2VuZGlmIC8qIENPSEVSRU5UICov CisKKyNpZm5kZWYgU1ZPUlBPU0lYCQkJLyogQlNEIHNlY3Rpb24gKi8KKyAgICBpZiAoZmxvdyA9 PSBGTE9fUlRTQyB8fAkJLyogSGFyZHdhcmUgZmxvdyBjb250cm9sICovCisJZmxvdyA9PSBGTE9f RFRSQyB8fAorCWZsb3cgPT0gRkxPX0RUUlQpIHsKKwl0dGhmbG93KGZsb3csIDEsICZ0dHJhdyk7 CisJZGVidWcoRjEwMCwidHRwa3QgaGFyZCBmbG93LCBUQU5ERU0gb2ZmLCBSQVcgb24iLCIiLDAp OworCXR0cmF3LnNnX2ZsYWdzICY9IH5UQU5ERU07CS8qIFR1cm4gb2ZmIHNvZnR3YXJlIGZsb3cg Y29udHJvbCAqLworCXR0cmF3LnNnX2ZsYWdzIHw9IFJBVzsJCS8qIEVudGVyIHJhdyBtb2RlICov CisgICAgfSBlbHNlIGlmIChmbG93ID09IEZMT19OT05FKSB7CS8qIE5vIGZsb3cgY29udHJvbCAq LworCWRlYnVnKEYxMDAsInR0cGt0IG5vIGZsb3csIFRBTkRFTSBvZmYsIFJBVyBvbiIsIiIsMCk7 CisJdHRyYXcuc2dfZmxhZ3MgJj0gflRBTkRFTTsJLyogVHVybiBvZmYgc29mdHdhcmUgZmxvdyBj b250cm9sICovCisJdHRoZmxvdyhmbG93LCAwLCAmdHRyYXcpOwkvKiBUdXJuIG9mZiBhbnkgaGFy ZHdhcmUgZi9jIHRvbyAqLworCXR0cmF3LnNnX2ZsYWdzIHw9IFJBVzsJCS8qIEVudGVyIHJhdyBt b2RlICovCisgICAgfSBlbHNlIGlmIChmbG93ID09IEZMT19LRUVQKSB7CS8qIEtlZXAgZGV2aWNl J3Mgb3JpZ2luYWwgc2V0dGluZyAqLworCWRlYnVnKEYxMDAsInR0cGt0IGtlZXBpbmcgb3JpZ2lu YWwgVEFOREVNIiwiIiwwKTsKKwl0dHJhdy5zZ19mbGFncyAmPSB+VEFOREVNOworCXR0cmF3LnNn X2ZsYWdzIHw9ICh0dG9sZC5zZ19mbGFncyAmIFRBTkRFTSk7CisJLyogTk9URTogV2Ugc2hvdWxk IGFsc28gaGFuZGxlIGhhcmR3YXJlIGZsb3cgY29udHJvbCBoZXJlISAqLworICAgIH0KKworLyog U0VUIEZMT1cgWE9OL1hPRkYgaXMgaW4gZWZmZWN0LCBvciBTRVQgRkxPVyBLRUVQIHJlc3VsdGVk IGluIFhvbi9Yb2ZmICovCisKKyAgICBpZiAoKGZsb3cgPT0gRkxPX1hPTlgpIHx8ICh0dHJhdy5z Z19mbGFncyAmIFRBTkRFTSkpIHsKKwlkZWJ1ZyhGMTAwLCJ0dHBrdCB0dXJuaW5nIG9uIFRBTkRF TSIsIiIsMCk7CisJdHRyYXcuc2dfZmxhZ3MgfD0gVEFOREVNOwkvKiBTbyBhc2sgZm9yIGl0LiAq LworCisjaWZkZWYgTFBBU1M4CQkJCS8qIENhbiBwYXNzIDgtYml0IGRhdGEgdGhyb3VnaD8gKi8K Ky8qIElmIHRoZSBMUEFTUzggbG9jYWwgbW9kZSBpcyBhdmFpbGFibGUsIHRoZW4gZmxvdyBjb250 cm9sIGNhbiBhbHdheXMgICovCisvKiBiZSB1c2VkLCBldmVuIGlmIHBhcml0eSBpcyBub25lIGFu ZCB3ZSBhcmUgdHJhbnNmZXJyaW5nIDgtYml0IGRhdGEuICAqLworLyogQnV0IHdlIG9ubHkgbmVl ZCB0byBkbyBhbGwgdGhpcyBpZiBYb24vWG9mZiBpcyByZXF1ZXN0ZWQuICovCisvKiBCVVQuLi4g dGhpcyB0ZW5kcyBub3QgdG8gd29yayB0aHJvdWdoIElQIG9yIExBVCBjb25uZWN0aW9ucywgdGVy bWluYWwgKi8KKy8qIHNlcnZlcnMsIHRlbG5ldCwgcmxvZ2luLCBldGMsIHNvIGl0IGlzIGN1cnJl bnRseSBkaXNhYmxlZC4gKi8KKwl4ID0gTFBBU1M4OwkJCS8qIElmIExQQVNTOCBkZWZpbmVkLCB0 aGVuICovCisJZGVidWcoRjEwMCwidHRwa3QgZXhlY3V0aW5nIExQQVNTOCBjb2RlIiwiIiwwKTsK KwlpZiAobG1vZGVmKSB7CQkJLyogVElPQ0xCSVMgbXVzdCBiZSB0b28uICovCisJICAgIHggPSBp b2N0bCh0dHlmZCxUSU9DTEJJUywmeCk7IC8qIFRyeSB0byBzZXQgTFBBU1M4LiAqLworCSAgICBp ZiAoeCA8IDApIHsKKwkJZGVidWcoRjEwMCwidHRwa3QgVElPQ0xCSVMgZXJyb3IiLCIiLDApOwor CSAgICB9IGVsc2UgeworCQlsbW9kZWYrKzsKKwkJZGVidWcoRjEwMCwidHRwa3QgVElPQ0xCSVMg b2siLCIiLDApOworCSAgICB9CisJfQorLyoKKyBCdXQgaWYgd2UgdXNlIExQQVNTOCBtb2RlLCB3 ZSBtdXN0IGV4cGxpY2l0bHkgdHVybiBvZmYKKyB0ZXJtaW5hbCBpbnRlcnJ1cHRzIG9mIGFsbCBr aW5kcy4KKyovCisjaWZkZWYgVElPQ0dFVEMJCQkJLyogTm90IHJhd21vZGUsICovCisJaWYgKHRj aGFyZiAmJiAoeGxvY2FsID09IDApKSB7CS8qIG11c3QgdHVybiBvZmYgKi8KKwkgICAgdGNobm9p LnRfaW50cmMgPSAtMTsJLyogaW50ZXJydXB0IGNoYXJhY3RlciAqLworCSAgICB0Y2hub2kudF9x dWl0YyA9IC0xOwkvKiBhbmQgcXVpdCBjaGFyYWN0ZXIuICovCisJICAgIHRjaG5vaS50X3N0YXJ0 YyA9IDE3OwkvKiBNYWtlIHN1cmUgeG9uICovCisJICAgIHRjaG5vaS50X3N0b3BjID0gMTk7CS8q IGFuZCB4b2ZmIG5vdCBpZ25vcmVkLiAqLworI2lmbmRlZiBOT0JSS0MKKwkgICAgdGNobm9pLnRf ZW9mYyA9IC0xOwkJLyogZW9mIGNoYXJhY3Rlci4gKi8KKwkgICAgdGNobm9pLnRfYnJrYyA9IC0x OwkJLyogYnJrIGNoYXJhY3Rlci4gKi8KKyNlbmRpZiAvKiBOT0JSS0MgKi8KKwkgICAgaWYgKGlv Y3RsKHR0eWZkLFRJT0NTRVRDLCZ0Y2hub2kpIDwgMCkgeworCQlkZWJ1ZyhGMTAwLCJ0dHBrdCBU SU9DU0VUQyBmYWlsZWQiLCIiLDApOworCSAgICB9IGVsc2UgeworCQl0Y2hhcmYgPSAxOworCQlk ZWJ1ZyhGMTAwLCJ0dHBrdCBUSU9DU0VUQyBvayIsIiIsMCk7CisJICAgIH0KKyNpZmRlZiBDT01N RU5UCisvKiBvbmx5IGZvciBwYXJhbm9pZCBkZWJ1Z2dpbmcgKi8KKwkgICAgaWYgKHRjaGFyZikg eworCQlzdHJ1Y3QgdGNoYXJzIGZvbzsKKwkJY2hhciB0Y2hidWZbMTAwXTsKKwkJaW9jdGwoMCxU SU9DR0VUQywmZm9vKTsKKwkJc3ByaW50Zih0Y2hidWYsCisJCSAgICAiaW50cj0lZCxxdWl0PSVk LCBzdGFydD0lZCwgc3RvcD0lZCwgZW9mPSVkLCBicms9JWQiLAorCQkgICAgZm9vLnRfaW50cmMs IGZvby50X3F1aXRjLCBmb28udF9zdGFydGMsCisJCSAgICBmb28udF9zdG9wYywgZm9vLnRfZW9m YywgIGZvby50X2Jya2MpOworCQlkZWJ1ZyhGMTEwLCJ0dHBrdCBjaGFycyIsdGNoYnVmLDApOwor CSAgICB9CisjZW5kaWYgLyogQ09NTUVOVCAqLworCX0KKwl0dHJhdy5zZ19mbGFncyB8PSBDQlJF QUs7CS8qIE5lZWRlZCBmb3IgdW5rbm93biByZWFzb24gKi8KKyNlbmRpZiAvKiBUSU9DR0VUQyAq LworCisvKiBQcmV2ZW50IHN1c3BlbmQgZHVyaW5nIHBhY2tldCBtb2RlICovCisjaWZkZWYgVElP Q0dMVEMJCQkJLyogTm90IHJhd21vZGUsICovCisJaWYgKGx0Y2hhcmYgJiYgKHhsb2NhbCA9PSAw KSkgewkvKiBtdXN0IHR1cm4gb2ZmICovCisJICAgIGx0Y2hub2kudF9zdXNwYyA9IC0xOwkvKiBz dXNwZW5kIGNoYXJhY3RlciAqLworCSAgICBsdGNobm9pLnRfZHN1c3BjID0gLTE7CS8qIGFuZCBk ZWxheWVkIHN1c3BlbmQgY2hhcmFjdGVyICovCisJICAgIGlmIChpb2N0bCh0dHlmZCxUSU9DU0xU QywmdGNobm9pKSA8IDApIHsKKwkJZGVidWcoRjEwMCwidHRwa3QgVElPQ1NMVEMgZmFpbGVkIiwi IiwwKTsKKwkgICAgfSBlbHNlIHsKKwkJbHRjaGFyZiA9IDE7CisJCWRlYnVnKEYxMDAsInR0cGt0 IFRJT0NTTFRDIG9rIiwiIiwwKTsKKwkgICAgfQorCX0KKyNlbmRpZiAvKiBUSU9DR0xUQyAqLwor CisjZWxzZSAvKiBMUEFTUzggbm90IGRlZmluZWQgKi8KKworLyogUHJldmlvdXNseSwgQlNELWJh c2VkIGltcGxlbWVudGF0aW9ucyBhbHdheXMgKi8KKy8qIHVzZWQgcmF3bW9kZSBmb3IgcGFja2V0 cy4gIE5vdywgd2UgdXNlIHJhd21vZGUgb25seSBpZiBwYXJpdHkgaXMgTk9ORS4gKi8KKy8qIFRo aXMgYWxsb3dzIHRoZSBmbG93IGNvbnRyb2wgcmVxdWVzdGVkIGFib3ZlIHRvIGFjdHVhbGx5IHdv cmssIGJ1dCBvbmx5ICovCisvKiBpZiB0aGUgdXNlciBhc2tzIGZvciBwYXJpdHkgKHdoaWNoIGFs c28gbWVhbnMgdGhleSBnZXQgOHRoLWJpdCBxdW90aW5nKS4gKi8KKworCWlmIChwYXJpdHkpIHsJ CQkvKiBJZiBwYXJpdHksICovCisJICAgIHR0cmF3LnNnX2ZsYWdzICY9IH5SQVc7CS8qIHVzZSBj b29rZWQgbW9kZSAqLworI2lmZGVmIENPTU1FTlQKKy8qIFdIWT8/PyAqLworCSAgICBpZiAoeGxv Y2FsKQorI2VuZGlmIC8qIENPTU1FTlQgKi8KKwkgICAgICB0dHJhdy5zZ19mbGFncyB8PSBDQlJF QUs7CisJICAgIGRlYnVnKEYxMDEsInR0cGt0IGNvb2tlZCwgY2JyZWFrLCBwYXJpdHkiLCIiLHBh cml0eSk7CisjaWZkZWYgVElPQ0dFVEMJCQkJLyogTm90IHJhd21vZGUsICovCisJICAgIGlmICh0 Y2hhcmYgJiYgKHhsb2NhbCA9PSAwKSkgeyAvKiBtdXN0IHR1cm4gb2ZmICovCisJCXRjaG5vaS50 X2ludHJjID0gLTE7CS8qIGludGVycnVwdCBjaGFyYWN0ZXIgKi8KKwkJdGNobm9pLnRfcXVpdGMg PSAtMTsJLyogYW5kIHF1aXQgY2hhcmFjdGVyLiAqLworCQl0Y2hub2kudF9zdGFydGMgPSAxNzsJ LyogTWFrZSBzdXJlIHhvbiAqLworCQl0Y2hub2kudF9zdG9wYyA9IDE5OwkvKiBhbmQgeG9mZiBu b3QgaWdub3JlZC4gKi8KKyNpZm5kZWYgTk9CUktDCisJCXRjaG5vaS50X2VvZmMgPSAtMTsJLyog ZW9mIGNoYXJhY3Rlci4gKi8KKwkJdGNobm9pLnRfYnJrYyA9IC0xOwkvKiBicmsgY2hhcmFjdGVy LiAqLworI2VuZGlmIC8qIE5PQlJLQyAqLworCQlpZiAoaW9jdGwodHR5ZmQsVElPQ1NFVEMsJnRj aG5vaSkgPCAwKSB7CisJCSAgICBkZWJ1ZyhGMTAwLCJ0dHBrdCBUSU9DU0VUQyBmYWlsZWQiLCIi LDApOworCQl9IGVsc2UgeworCQkgICAgdGNoYXJmID0gMTsKKwkJICAgIGRlYnVnKEYxMDAsInR0 cGt0IFRJT0NTRVRDIG9rIiwiIiwwKTsKKwkJfQorCSAgICB9CisjZW5kaWYgLyogVElPQ0dFVEMg Ki8KKyNpZmRlZiBUSU9DR0xUQwkJCQkvKiBOb3QgcmF3bW9kZSwgKi8KKy8qIFByZXZlbnQgc3Vz cGVuZCBkdXJpbmcgcGFja2V0IG1vZGUgKi8KKwkgICAgaWYgKGx0Y2hhcmYgJiYgKHhsb2NhbCA9 PSAwKSkgeyAvKiBtdXN0IHR1cm4gb2ZmICovCisJCWx0Y2hub2kudF9zdXNwYyA9IC0xOwkvKiBz dXNwZW5kIGNoYXJhY3RlciAqLworCQlsdGNobm9pLnRfZHN1c3BjID0gLTE7CS8qIGFuZCBkZWxh eWVkIHN1c3BlbmQgY2hhcmFjdGVyICovCisJCWlmIChpb2N0bCh0dHlmZCxUSU9DU0xUQywmdGNo bm9pKSA8IDApIHsKKwkJICAgIGRlYnVnKEYxMDAsInR0cGt0IFRJT0NTTFRDIGZhaWxlZCIsIiIs MCk7CisJCX0gZWxzZSB7CisJCSAgICBsdGNoYXJmID0gMTsKKwkJICAgIGRlYnVnKEYxMDAsInR0 cGt0IFRJT0NTTFRDIG9rIiwiIiwwKTsKKwkJfQorCSAgICB9CisjZW5kaWYgLyogVElPQ0dMVEMg Ki8KKwl9IGVsc2UgewkJCS8qIElmIG5vIHBhcml0eSwgKi8KKwkgICAgdHRyYXcuc2dfZmxhZ3Mg fD0gUkFXOwkvKiBtdXN0IHVzZSA4LWJpdCByYXcgbW9kZS4gKi8KKwkgICAgZGVidWcoRjEwMSwi dHRwa3Qgc2V0dGluZyByYXdtb2RlLCBwYXJpdHkiLCIiLHBhcml0eSk7CisJfQorI2VuZGlmIC8q IExQQVNTOCAqLworICAgIH0gLyogRW5kIG9mIFhvbi9Yb2ZmIHNlY3Rpb24gKi8KKworICAgIC8q IERvbid0IGVjaG8sIGRvbid0IG1hcCBDUiB0byBDUkxGIG9uIG91dHB1dCwgZG9uJ3QgZm9vbCB3 aXRoIGNhc2UgKi8KKyNpZmRlZiBMQ0FTRQorICAgIHR0cmF3LnNnX2ZsYWdzICY9IH4oRUNIT3xD Uk1PRHxMQ0FTRSk7CisjZWxzZQorICAgIHR0cmF3LnNnX2ZsYWdzICY9IH4oRUNIT3xDUk1PRCk7 CisjZW5kaWYgLyogTENBU0UgKi8KKworI2lmZGVmIFRPV0VSMQorICAgIHR0cmF3LnNnX2ZsYWdz ICY9IH5BTllQOyAgICAgICAgICAgIC8qIE11c3Qgc2V0IHRoaXMgb24gb2xkIFRvd2VycyAqLwor I2VuZGlmIC8qIFRPV0VSMSAqLworCisjaWZkZWYgQkVMTFYxMAorICAgIGlmIChpb2N0bCh0dHlm ZCxUSU9DU0VUUCwmdHRyYXcpIDwgMCkgLyogU2V0IHRoZSBuZXcgbW9kZXMuICovCisgICAgICBy ZXR1cm4oLTEpOworI2Vsc2UKKyAgICBlcnJubyA9IDA7CisgICAgaWYgKHN0dHkodHR5ZmQsJnR0 cmF3KSA8IDApIHsgICAgICAgLyogU2V0IHRoZSBuZXcgbW9kZXMuICovCisgICAgICAgIGRlYnVn KEYxMDEsInR0cGt0IHN0dHkgZmFpbGVkIiwiIixlcnJubyk7CisgICAgICAgIHJldHVybigtMSk7 CisgICAgfQorI2VuZGlmIC8qIEJFTExWMTAgKi8KKyAgICBkZWJ1ZyhGMTAwLCJ0dHBrdCBzdHR5 IG9rIiwiIiwwKTsKKworI2lmZGVmIHNvbnlfbmV3cworICAgIHggPSB4bG9jYWwgPyBrbV9leHQg OiBrbV9jb247CS8qIFB1dCBsaW5lIGluIEFTQ0lJIG1vZGUuICovCisgICAgaWYgKHggIT0gLTEp IHsJCQkvKiBNYWtlIHN1cmUgd2Uga25vdyBvcmlnaW5hbCBtb2Rlcy4gKi8KKwl4ICY9IH5LTV9U VFlQRTsKKwl4IHw9IEtNX0FTQ0lJOworCWlmIChpb2N0bCh0dHlmZCxUSU9DS1NFVCwgJngpIDwg MCkgeworCSAgICBwZXJyb3IoInR0cGt0IGNhbid0IHNldCBBU0NJSSBtb2RlIik7CisJICAgIGRl YnVnKEYxMDEsInR0cGt0IGVycm9yIHNldHRpbmcgQVNDSUkgbW9kZSIsIiIseCk7CisJICAgIHJl dHVybigtMSk7CisJfQorICAgIH0KKyAgICBkZWJ1ZyhGMTAwLCJ0dHBrdCBzZXQgQVNDSUkgbW9k ZSBvayIsIiIsMCk7CisjZW5kaWYgLyogc29ueV9uZXdzICovCisKKyAgICBpZiAoeGxvY2FsID09 IDApIHsJCQkvKiBUdXJuIHRoaXMgb2ZmIHNvIHdlIGNhbiByZWFkICovCisJc2lnbmFsKFNJR0lO VCxTSUdfSUdOKTsJCS8qIEN0cmwtQyBjaGFycyB0eXBlZCBhdCBjb25zb2xlICovCisJc2lnaW50 X2lnbiA9IDE7CisgICAgfQorICAgIHR2dGZsZyA9IDA7CQkJCS8qIFNvIHR0dnQoKSB3aWxsIHdv cmsgbmV4dCB0aW1lICovCisgICAgZGVidWcoRjEwMCwidHRwa3Qgc3VjY2VzcyIsIiIsMCk7Cisg ICAgcmV0dXJuKDApOworCisjZW5kaWYgLyogTm90IEFUVFNWIG9yIFBPU0lYICovCisKKy8qIEFU JlQgVU5JWCBhbmQgUE9TSVggKi8KKworI2lmZGVmIENPSEVSRU5UCisjZGVmaW5lIFNWT1JQT1NJ WAorI2VuZGlmIC8qIENPSEVSRU5UICovCisKKyNpZmRlZiBTVk9SUE9TSVgKKyAgICBpZiAoZmxv dyA9PSBGTE9fWE9OWCkgewkJLyogWG9uL1hvZmYgKi8KKwl0dHJhdy5jX2lmbGFnIHw9IChJWE9O fElYT0ZGKTsKKwl0dGhmbG93KGZsb3csIDAsICZ0dHJhdyk7CisgICAgfSBlbHNlIGlmIChmbG93 ID09IEZMT19OT05FKSB7CS8qIE5vbmUgKi8KKwkvKiBOT1RFOiBXZSBzaG91bGQgYWxzbyB0dXJu IG9mZiBoYXJkd2FyZSBmbG93IGNvbnRyb2wgaGVyZSEgKi8KKwl0dHJhdy5jX2lmbGFnICY9IH4o SVhPTnxJWE9GRik7CisJdHRoZmxvdyhmbG93LCAwLCAmdHRyYXcpOworICAgIH0gZWxzZSBpZiAo ZmxvdyA9PSBGTE9fS0VFUCkgewkvKiBLZWVwICovCisJdHRyYXcuY19pZmxhZyAmPSB+KElYT058 SVhPRkYpOwkvKiBUdXJuIG9mZiBYb24vWG9mZiBmbGFncyAqLworCXR0cmF3LmNfaWZsYWcgfD0g KHR0b2xkLmNfaWZsYWcgJiAoSVhPTnxJWE9GRikpOyAvKiBPUiBpbiBvbGQgb25lcyAqLworCS8q IE5PVEU6IFdlIHNob3VsZCBhbHNvIGhhbmRsZSBoYXJkd2FyZSBmbG93IGNvbnRyb2wgaGVyZSEg Ki8KKyNpZmRlZiBQT1NJWF9DUlRTQ1RTCisvKiBJbiBMaW51eCBjYXNlLCB3ZSBkbyB0aGlzLCB3 aGljaCBpcyB1bmxpa2VseSB0byBiZSBwb3J0YWJsZSAqLworICAgICAgICB0dHJhdy5jX2NmbGFn ICY9IH5DUlRTQ1RTOwkvKiBUdXJuIG9mZiBSVFMvQ1RTIGZsYWcgKi8KKyAgICAgICAgdHRyYXcu Y19jZmxhZyB8PSAodHRvbGQuY19jZmxhZyAmIENSVFNDVFMpOyAvKiBPUiBpbiBvbGQgb25lICov CisjZW5kaWYgLyogUE9TSVhfQ1JUU0NUUyAqLworICAgIH0gZWxzZSBpZiAoZmxvdyA9PSBGTE9f UlRTQyB8fAkvKiBIYXJkd2FyZSAqLworCSAgICAgICBmbG93ID09IEZMT19EVFJDIHx8CisJICAg ICAgIGZsb3cgPT0gRkxPX0RUUlQpIHsKKwl0dHJhdy5jX2lmbGFnICY9IH4oSVhPTnxJWE9GRik7 CS8qICgxOTApICovCisJdHRoZmxvdyhmbG93LCAxLCAmdHRyYXcpOworICAgIH0KKyAgICB0dHJh dy5jX2xmbGFnICY9IH4oSUNBTk9OfEVDSE8pOworICAgIHR0cmF3LmNfbGZsYWcgJj0gfklTSUc7 CQkvKiBEbyBOT1QgY2hlY2sgZm9yIGludGVycnVwdCBjaGFycyAqLworCisjaWZuZGVmIE9YT1MK KyNpZmRlZiBRTlgKKyAgICBpZiAoZmxvdyAhPSBGTE9fUlRTQyAmJiBmbG93ICE9IEZMT19EVFJD ICYmIGZsb3cgIT0gRkxPX0RUUlQpCisjZW5kaWYgLyogUU5YICovCisjaWZuZGVmIENPSEVSRU5U CisgICAgICB0dHJhdy5jX2xmbGFnICY9IH5JRVhURU47CQkvKiBUdXJuIG9mZiBeTy9eViBwcm9j ZXNzaW5nICovCisjZW5kaWYgLyogQ09IRVJFTlQgKi8KKyNlbHNlIC8qIE9YT1MgKi8KKyAgICB0 dHJhdy5jX2NjW1ZESVNDQVJEXSA9IHR0cmF3LmNfY2NbVkxORVhUXSA9IENESVNBQkxFOworI2Vu ZGlmIC8qIE9YT1MgKi8KKyAgICB0dHJhdy5jX2xmbGFnIHw9IE5PRkxTSDsJCS8qIERvbid0IGZs dXNoICovCisgICAgdHRyYXcuY19pZmxhZyB8PSBJR05QQVI7CQkvKiBJZ25vcmUgcGFyaXR5IGVy cm9ycyAqLworI2lmZGVmIEFUVFNWCisjaWZkZWYgQlNENDQKKyAgICB0dHJhdy5jX2lmbGFnICY9 IH4oSUdOQlJLfElOTENSfElHTkNSfElDUk5MfElOUENLfElTVFJJUHxJWEFOWSk7CisjZWxzZQor ICAgIHR0cmF3LmNfaWZsYWcgJj0gfihJR05CUkt8SU5MQ1J8SUdOQ1J8SUNSTkx8SVVDTEN8SU5Q Q0t8SVNUUklQfElYQU5ZKTsKKyNlbmRpZiAvKiBCU0Q0NCAqLworI2Vsc2UgLyogUE9TSVggKi8K KyAgICB0dHJhdy5jX2lmbGFnICY9IH4oSUdOQlJLfElOTENSfElHTkNSfElDUk5MfElOUENLfElT VFJJUCk7CisjZW5kaWYgLyogQVRUU1YgKi8KKyAgICB0dHJhdy5jX29mbGFnICY9IH5PUE9TVDsK KyAgICB0dHJhdy5jX2NmbGFnICY9IH4oQ1NJWkUpOworICAgIHR0cmF3LmNfY2ZsYWcgfD0gKENT OHxDUkVBRHxIVVBDTCk7CisKKyNpZmRlZiBDU1RPUEIKKyAgICBpZiAoeGxvY2FsKSB7CisJaWYg KHN0b3BiaXRzID09IDIpIHsKKwkgICAgdHRyYXcuY19jZmxhZyB8PSBDU1RPUEI7CS8qIDIgc3Rv cCBiaXRzICovCisJICAgIGRlYnVnKEYxMDAsInR0cGt0IDIgc3RvcGJpdHMiLCIiLDApOworCX0g ZWxzZSBpZiAoc3RvcGJpdHMgPT0gMSkgeworCSAgICB0dHJhdy5jX2NmbGFnICY9IH4oQ1NUT1BC KTsJLyogMSBzdG9wIGJpdCAqLworCSAgICBkZWJ1ZyhGMTAwLCJ0dHBrdCAxIHN0b3BiaXQiLCIi LDApOworCX0KKyAgICB9CisjZW5kaWYgLyogQ1NUT1BCICovCisKKyNpZmRlZiBIV1BBUklUWQor ICAgIGlmIChod3Bhcml0eSAmJiB4bG9jYWwpIHsJCS8qIEhhcmR3YXJlIHBhcml0eSAqLworCXR0 cmF3LmNfY2ZsYWcgfD0gUEFSRU5COwkvKiBFbmFibGUgcGFyaXR5ICovCisjaWZkZWYgQ09NTUVO VAorLyogVW5jb21tZW50IHRoaXMgb25seSBpZiBuZWVkZWQgLS0gSSBkb24ndCB0aGluayBpdCBp cyAqLworCXR0cmF3LmNfY2ZsYWcgJj0gfihDU0laRSk7CS8qIENsZWFyIG91dCBjaGFyYWN0ZXIt c2l6ZSBtYXNrICovCisJdHRyYXcuY19jZmxhZyB8PSBDUzg7CQkvKiBBbmQgc2V0IGl0IHRvIDgg Ki8KKyNlbmRpZiAvKiBDT01NRU5UICovCisjaWZkZWYgSUdOUEFSCisJdHRyYXcuY19pZmxhZyB8 PSBJR05QQVI7CS8qIERvbid0IGRpc2NhcmQgaW5jb21pbmcgYnl0ZXMgKi8KKwlkZWJ1ZyhGMTAw LCJ0dHBrdCBJR05QQVIiLCIiLDApOyAvKiB0aGF0IGhhdmUgcGFyaXR5IGVycm9ycyAqLworI2Vu ZGlmIC8qIElHTlBBUiAqLworCXN3aXRjaCAoaHdwYXJpdHkpIHsKKwkgIGNhc2UgJ2UnOgkJCS8q IEV2ZW4gKi8KKwkgICAgdHRyYXcuY19jZmxhZyAmPSB+KFBBUk9ERCk7CisJICAgIGRlYnVnKEYx MDAsInR0cGt0IDggYml0cyArIGV2ZW4gcGFyaXR5IiwiIiwwKTsKKwkgICAgYnJlYWs7CisJICBj YXNlICdvJzoJCQkvKiBPZGQgKi8KKwkgICAgdHRyYXcuY19jZmxhZyB8PSBQQVJPREQ7CisJICAg IGRlYnVnKEYxMDAsInR0cGt0IDggYml0cyArIG9kZCBwYXJpdHkiLCIiLDApOworCSAgICBicmVh azsKKwkgIGNhc2UgJ20nOgkJCS8qIE1hcmsgKi8KKwkgIGNhc2UgJ3MnOgkJCS8qIFNwYWNlICov CisJICAgIC8qIFBBUkVYVCBpcyBtZW50aW9uZWQgaW4gU1ZJRCBidXQgdGhlIGRldGFpbHMgYXJl IG5vdCBnaXZlbi4gKi8KKwkgICAgLyogUEFSRVhUIGlzIG5vdCBpbmNsdWRlZCBpbiBQT1NJWCBJ U08vSUVDIDk5NDUtMS4gKi8KKwkgICAgZGVidWcoRjEwMCwidHRwa3QgOCBiaXRzICsgaW52YWxp ZCBwYXJpdHkiLCIiLDApOworCSAgICBicmVhazsKKwl9CisgICAgfSBlbHNlIHsJCQkJLyogV2Ug aGFuZGxlIHBhcml0eSBvdXJzZWx2ZXMgKi8KKyNlbmRpZiAvKiBIV1BBUklUWSAqLworCXR0cmF3 LmNfY2ZsYWcgJj0gfihQQVJFTkIpOwkvKiBEb24ndCBlbmFibGUgcGFyaXR5ICovCisjaWZkZWYg SFdQQVJJVFkKKyAgICB9CisjZW5kaWYgLyogSFdQQVJJVFkgKi8KKworI2lmZGVmIElYMzcwCisg ICAgdHRyYXcuY19jY1s0XSA9IDQ4OyAgLyogU28gU2VyaWVzLzEgZG9lc24ndCBpbnRlcnJ1cHQg b24gZXZlcnkgY2hhciAqLworICAgIHR0cmF3LmNfY2NbNV0gPSAxOworI2Vsc2UKKyNpZm5kZWYg VkVPRgkJCQkvKiBmb3IgREdVWCB0aGlzIGlzIFZFT0YsIG5vdCBWTUlOICovCisgICAgdHRyYXcu Y19jY1s0XSA9IDE7ICAgLyogW1ZNSU5dICByZXR1cm4gbWF4IG9mIHRoaXMgbWFueSBjaGFyYWN0 ZXJzIG9yICovCisjZWxzZQorI2lmbmRlZiBPWE9TCisjaWZkZWYgVk1JTgorICAgIHR0cmF3LmNf Y2NbVk1JTl0gPSAxOworI2VuZGlmIC8qIFZNSU4gKi8KKyNlbHNlIC8qIE9YT1MgKi8KKyAgICB0 dHJhdy5jX21pbiA9IDE7CisjZW5kaWYgLyogT1hPUyAqLworI2VuZGlmIC8qIFZFT0YgKi8KKyNp Zm5kZWYgVkVPTAkJCQkvKiBmb3IgREdVWCB0aGlzIGlzIFZFT0wsIG5vdCBWVElNRSAqLworICAg IHR0cmF3LmNfY2NbNV0gPSAwOwkgLyogW1ZUSU1FXSB3aGVuIHRoaXMgbWFueSBzZWNzLzEwIGV4 cGlyZSB3L25vIGlucHV0ICovCisjZWxzZQorI2lmbmRlZiBPWE9TCisjaWZkZWYgVlRJTUUKKyAg ICB0dHJhdy5jX2NjW1ZUSU1FXSA9IDA7CisjZW5kaWYgLyogVlRJTUUgKi8KKyNlbHNlIC8qIE9Y T1MgKi8KKyAgICB0dHJhdy5jX3RpbWUgPSAwOworI2VuZGlmIC8qIE9YT1MgKi8KKyNlbmRpZiAv KiBWRU9MICovCisjZW5kaWYgLyogSVgzNzAgKi8KKworI2lmZGVmIFZJTlRSCQkJCS8qIFR1cm4g b2ZmIGludGVycnVwdCBjaGFyYWN0ZXIgKi8KKyAgICBpZiAoeGxvY2FsID09IDApCQkJLyogc28g XkNeQyBjYW4gYnJlYWsgdXMgb3V0IG9mICovCisgICAgICB0dHJhdy5jX2NjW1ZJTlRSXSA9IDA7 CQkvKiBwYWNrZXQgbW9kZS4gKi8KKyNlbmRpZiAvKiBWSU5UUiAqLworCisjaWZkZWYgUGxhbjkK KyAgICBpZiAocDl0dHlwYXJpdHkoJ24nKSA8IDApCisJcmV0dXJuIC0xOworI2Vsc2UKKyNpZmRl ZiBCU0Q0NE9SUE9TSVgKKyAgICBlcnJubyA9IDA7CisjaWZkZWYgQkVPU09SQkVCT1gKKyAgICB0 dHJhdy5jX2NjW1ZNSU5dID0gMDsJCS8qIERSNyBjYW4gb25seSBwb2xsLiAqLworI2VuZGlmIC8q IEJFT1NPUkJFQk9YICovCisKKyNkZWZpbmUgVEVTVElORzIzNAorI2lmZGVmIFRFU1RJTkcyMzQK KyAgICBpZiAoMSkgeworCWRlYnVnKEYxMDAsInR0cGt0IFRFU1RJTkcyMzQgcmF3bW9kZSIsIiIs MCk7CisKKwkvKiBpZmxhZ3MgKi8KKwl0dHJhdy5jX2lmbGFnICY9IH4oUEFSTVJLfElTVFJJUHxC UktJTlR8SU5MQ1J8SUdOQ1J8SUNSTkwpOworCXR0cmF3LmNfaWZsYWcgJj0gfihJTlBDS3xJR05Q QVJ8SVhPTnxJWE9GRik7CisJdHRyYXcuY19pZmxhZyB8PSBJR05CUks7CisjaWZkZWYgSU1BWEJF TAorCXR0cmF3LmNfaWZsYWcgJj0gfklNQVhCRUw7CisjZW5kaWYJLyogSU1BWEJFTCAqLworI2lm ZGVmIElYQU5ZCisJdHRyYXcuY19pZmxhZyAmPSB+SVhBTlk7CisjZW5kaWYJLyogSVhBTlkgKi8K KyNpZmRlZiBJVUNMQworCXR0cmF3LmNfaWZsYWcgJj0gfklVQ0xDOworI2VuZGlmIC8qIElVQ0xD ICovCisKKwkvKiBvZmxhZ3MgKi8KKwl0dHJhdy5jX29mbGFnICY9IH5PUE9TVDsKKyNpZmRlZiBP WFRBQlMKKwl0dHJhdy5jX29mbGFnICY9IH5PWFRBQlM7CisjZW5kaWYgLyogT1hUQUJTICovCisj aWZkZWYgT05PQ1IKKwl0dHJhdy5jX29mbGFnICY9IH5PTk9DUjsKKyNlbmRpZiAvKiBPTk9DUiAq LworI2lmZGVmIE9OTFJFVAorCXR0cmF3LmNfb2ZsYWcgJj0gfk9OTFJFVDsKKyNlbmRpZiAvKiBP TkxSRVQgKi8KKyNpZmRlZiBPTkxDUgorCXR0cmF3LmNfb2ZsYWcgJj0gfk9OTENSOworI2VuZGlm IC8qIE9OTENSICovCisKKwkvKiBsZmxhZ3MgKi8KKwl0dHJhdy5jX2xmbGFnICY9IH5FQ0hPOwor I2lmZGVmIEVDSE9FCisJdHRyYXcuY19sZmxhZyAmPSB+RUNIT0U7CisjZW5kaWYgLyogRUNIT0Ug Ki8KKyNpZmRlZiBFQ0hPTkwKKwl0dHJhdy5jX2xmbGFnICY9IH5FQ0hPTkw7CisjZW5kaWYgLyog RUNIT05MICovCisjaWZkZWYgRUNIT1BSVAorCXR0cmF3LmNfbGZsYWcgJj0gfkVDSE9QUlQ7Cisj ZW5kaWYgLyogRUNIT1BSVCAqLworI2lmZGVmIEVDSE9LRQorCXR0cmF3LmNfbGZsYWcgJj0gfkVD SE9LRTsKKyNlbmRpZiAvKiBFQ0hPS0UgKi8KKyNpZmRlZiBFQ0hPQ1RMCisJdHRyYXcuY19sZmxh ZyAmPSB+RUNIT0NUTDsKKyNlbmRpZiAvKiBFQ0hPQ1RMICovCisjaWZkZWYgQUxUV0VSQVNFCisJ dHRyYXcuY19sZmxhZyAmPSB+QUxUV0VSQVNFOworI2VuZGlmIC8qIEFMVFdFUkFTRSAqLworI2lm ZGVmIEVYVFBST0MKKwl0dHJhdy5jX2xmbGFnICY9IH5FWFRQUk9DOworI2VuZGlmIC8qIEVYVFBS T0MgKi8KKwl0dHJhdy5jX2xmbGFnICY9IH4oSUNBTk9OfElTSUd8SUVYVEVOfFRPU1RPUHxGTFVT SE98UEVORElOKTsKKyNpZmRlZiBOT0tFUk5JTkZPCisJdHRyYXcuY19sZmxhZyB8PSBOT0tFUk5J TkZPOworI2VuZGlmCS8qIE5PS0VSTklORk8gKi8KKwkvKiB0dHJhdy5jX2xmbGFnIHw9IE5PRkxT SDsgKi8KKwl0dHJhdy5jX2xmbGFnICY9IH5OT0ZMU0g7CisKKwkvKiBjZmxhZ3MgKi8KKwl0dHJh dy5jX2NmbGFnICY9IH4oQ1NJWkV8UEFSRU5CfFBBUk9ERCk7CisJdHRyYXcuY19jZmxhZyB8PSBD Uzh8Q1JFQUQ7CisjaWZkZWYgVk1JTgorCXR0cmF3LmNfY2NbVk1JTl0gPSAxOwkJLyogU3VwcG9z ZWRseSBuZWVkZWQgZm9yIEFJWCAqLworI2VuZGlmCS8qIFZNSU4gKi8KKworICAgIH0KKyNlbmRp ZiAvKiBURVNUSU5HMjM0ICovCisKKyAgICBkZWJ1ZyhGMTAwLCJ0dHBrdCBjYWxsaW5nIHRjc2V0 YXR0cihUQ1NFVEFXKSIsIiIsMCk7CisgICAgeCA9IHRjc2V0YXR0cih0dHlmZCxUQ1NBRFJBSU4s JnR0cmF3KTsKKyAgICBkZWJ1ZyhGMTAxLCJ0dHBrdCBCU0Q0NE9SUE9TSVggdGNzZXRhdHRyIiwi Iix4KTsKKyAgICBpZiAoeCA8IDApIHsKKwlkZWJ1ZyhGMTAxLCJ0dHBrdCBCU0Q0NE9SUE9TSVgg dGNzZXRhdHRyIGVycm5vIiwiIixlcnJubyk7CisgICAgICAgIHJldHVybigtMSk7CisgICAgfQor I2Vsc2UgLyogQlNENDRPUlBPU0lYICovCisgICAgeCA9IGlvY3RsKHR0eWZkLFRDU0VUQVcsJnR0 cmF3KTsKKyAgICBkZWJ1ZyhGMTAxLCJ0dHBrdCBBVFRTViBpb2N0bCBUQ1NFVEFXIiwiIix4KTsK KyAgICBpZiAoeCA8IDApIHsgIC8qIHNldCBuZXcgbW9kZXMgLiAqLworCWRlYnVnKEYxMDEsInR0 cGt0IEFUVFNWIGlvY3RsIFRDU0VUQVcgZXJybm8iLCIiLGVycm5vKTsKKyAgICAgICAgcmV0dXJu KC0xKTsKKyAgICB9CisjZW5kaWYgLyogQlNENDRPUlBPU0lYICovCisjZW5kaWYgLyogUGxhbjkg Ki8KKyAgICB0dnRmbGcgPSAwOworICAgIGRlYnVnKEYxMDAsInR0cGt0IG9rIiwiIiwwKTsKKyAg ICByZXR1cm4oMCk7CisjZW5kaWYgLyogQVRUU1YgKi8KKworI2lmZGVmIENPSEVSRU5UCisjdW5k ZWYgU1ZPUlBPU0lYCisjZW5kaWYgLyogQ09IRVJFTlQgKi8KKworfQorCisvKiAgVCBUIFMgRSBU IEYgTCBPIFcgIC0tICBTZXQgZmxvdyBjb250cm9sIGltbWVkaWF0ZWx5LiAgKi8KKworI2lmZGVm IENPSEVSRU5UCisjZGVmaW5lIFNWT1JQT1NJWAorI2VuZGlmIC8qIENPSEVSRU5UICovCisKK2lu dAordHRzZXRmbG93KGZsb3cpIGludCBmbG93OyB7CisgICAgaWYgKHR0eWZkIDwgMCkJCQkvKiBB IGNoYW5uZWwgbXVzdCBiZSBvcGVuICovCisgICAgICByZXR1cm4oLTEpOworCisgICAgZGVidWco RjEwMSwidHRzZXRmbG93IGZsb3ciLCIiLGZsb3cpOworCisjaWZkZWYgVE5fQ09NUE9SVAorICAg IGlmIChuZXRjb25uICYmIGlzdG5jb21wb3J0KCkpIHsKKwlkZWJ1ZyhGMTAxLCJ0dHNldGZsb3cg bmV0IG1vZGVtIiwiIix0dG1kbSk7CisJcmV0dXJuKHRuc2V0ZmxvdyhmbG93KSk7CisgICAgfQor I2VuZGlmIC8qIFROX0NPTVBPUlQgKi8KKyNpZmRlZiBORVRDTUQKKyAgICBpZiAodHRwaXBlKSBy ZXR1cm4oMCk7CisjZW5kaWYgLyogTkVUQ01EICovCisjaWZkZWYgTkVUUFRZCisgICAgaWYgKHR0 cHR5KSByZXR1cm4oMCk7CisjZW5kaWYgLyogTkVUUFRZICovCisKKyNpZmRlZiBDT01NRU5UCisg ICAgLyogVGhpcyBzZWVtcyB0byBodXJ0Li4uICovCisgICAgaWYgKGZsb3cgPT0gRkxPX0tFRVAp CisgICAgICByZXR1cm4oMCk7CisjZW5kaWYgLyogQ09NTUVOVCAqLworCisgICAgaWYgKGZsb3cg PT0gRkxPX1JUU0MgfHwJCS8qIEhhcmR3YXJlIGZsb3cgY29udHJvbC4uLiAqLworCWZsb3cgPT0g RkxPX0RUUkMgfHwKKwlmbG93ID09IEZMT19EVFJUKSB7CisJdHRoZmxvdyhmbG93LCAxLCAmdHRy YXcpOworI2lmbmRlZiBTVk9SUE9TSVgKKwl0dHJhdy5zZ19mbGFncyAmPSB+VEFOREVNOwkvKiBU dXJuIG9mZiBzb2Z0d2FyZSBmbG93IGNvbnRyb2wgKi8KKyNlbHNlCisJdHRyYXcuY19pZmxhZyAm PSB+KElYT058SVhPRkYpOworI2VuZGlmIC8qIFNWT1JQT1NJWCAqLworCisgICAgfSBlbHNlIGlm IChmbG93ID09IEZMT19YT05YKSB7CS8qIFhvbi9Yb2ZmLi4uICovCisKKyNpZm5kZWYgU1ZPUlBP U0lYCisJdHRyYXcuc2dfZmxhZ3MgfD0gVEFOREVNOworI2Vsc2UKKwl0dHJhdy5jX2lmbGFnIHw9 IChJWE9OfElYT0ZGKTsKKyNlbmRpZiAvKiBTVk9SUE9TSVggKi8KKwl0dGhmbG93KEZMT19SVFND LCAwLCAmdHRyYXcpOwkvKiBUdXJuIG9mZiBoYXJkd2FyZSBmbG93IGNvbnRyb2wgKi8KKworICAg IH0gZWxzZSBpZiAoZmxvdyA9PSBGTE9fTk9ORSkgewkvKiBObyBmbG93IGNvbnRyb2wgKi8KKwor I2lmbmRlZiBTVk9SUE9TSVgKKwl0dHJhdy5zZ19mbGFncyAmPSB+VEFOREVNOwkvKiBUdXJuIG9m ZiBzb2Z0d2FyZSBmbG93IGNvbnRyb2wgKi8KKyNlbHNlCisJdHRyYXcuY19pZmxhZyAmPSB+KElY T058SVhPRkYpOworI2VuZGlmIC8qIFNWT1JQT1NJWCAqLworCXR0aGZsb3coRkxPX1JUU0MsIDAs ICZ0dHJhdyk7CS8qIFR1cm4gb2ZmIGFueSBoYXJkd2FyZSBmL2MgdG9vICovCisgICAgfQorCisv KiBTZXQgdGhlIG5ldyBtb2Rlcy4uLiAqLworCisjaWZuZGVmIFNWT1JQT1NJWAkJCS8qIEJTRCBh bmQgZnJpZW5kcyAqLworI2lmZGVmIEJFTExWMTAKKyAgICBpZiAoaW9jdGwodHR5ZmQsVElPQ1NF VFAsJnR0cmF3KSA8IDApCisgICAgICByZXR1cm4oLTEpOworI2Vsc2UKKyNpZm5kZWYgTUlOSVgy CisgICAgaWYgKHN0dHkodHR5ZmQsJnR0cmF3KSA8IDApCisgICAgICByZXR1cm4oLTEpOworI2Vu ZGlmIC8qIE1JTklYMiAqLworI2VuZGlmIC8qIEJFTExWMTAgKi8KKyNlbHNlCisjaWZkZWYgQlNE NDRPUlBPU0lYCQkJLyogUE9TSVggKi8KKyAgICBpZiAodGNzZXRhdHRyKHR0eWZkLFRDU0FEUkFJ TiwmdHRyYXcpIDwgMCkKKyAgICAgIHJldHVybigtMSk7CisjZWxzZQkJCQkJLyogU3lzdGVtIFYg Ki8KKyAgICBpZiAoaW9jdGwodHR5ZmQsVENTRVRBVywmdHRyYXcpIDwgMCkKKyAgICAgIHJldHVy bigtMSk7CisjZW5kaWYgLyogQlNENDRPUlBPU0lYICovCisjZW5kaWYgLyogU1ZPUlBPU0lYICov CisgICAgcmV0dXJuKDApOworfQorI2lmZGVmIENPSEVSRU5UCisjdW5kZWYgU1ZPUlBPU0lYCisj ZW5kaWYgLyogQ09IRVJFTlQgKi8KKworLyogIFQgVCBWIFQgLS0gQ29uZGl0aW9uIGNvbW11bmlj YXRpb24gZGV2aWNlIGZvciB1c2UgYXMgdmlydHVhbCB0ZXJtaW5hbC4gKi8KKworaW50CisjaWZk ZWYgQ0tfQU5TSUMKK3R0dnQobG9uZyBzcGVlZCwgaW50IGZsb3cpCisjZWxzZQordHR2dChzcGVl ZCxmbG93KSBsb25nIHNwZWVkOyBpbnQgZmxvdzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyog dHR2dCAqLyB7CisgICAgaW50IHMsIHMyLCB4OworCisgICAgZGVidWcoRjEwMSwidHR2dCB0dHlm ZCIsIiIsdHR5ZmQpOworICAgIGRlYnVnKEYxMDEsInR0dnQgdHZ0ZmxnIiwiIix0dnRmbGcpOwor ICAgIGRlYnVnKEYxMTEsInR0dnQgc3BlZWQiLGNraXRvYSh0dHNwZWVkKSxzcGVlZCk7CisgICAg ZGVidWcoRjExMSwidHR2dCBmbG93Iixja2l0b2EodHRmbG93KSxmbG93KTsKKyAgICBkZWJ1ZyhG MTExLCJ0dHZ0IGN1cmNhcnIiLGNraXRvYSh0dGNhcnIpLGN1cmNhcnIpOworCisvKiBOb3RlOiBO ZXRCU0QgYW5kIG1heWJlIG90aGVyIEJTRDQ0cyBoYXZlIGNmbWFrZXJhdygpICovCisvKiBNYXli ZSBpdCB3b3VsZCBiZSBzaW1wbGVyIHRvIHVzZSBpdC4uLiAqLworCisgICAgdHRwbXNrID0gMHhm ZjsKKyNpZmRlZiBOT0xPQ0FMCisgICAgcmV0dXJuKGNvbmJpbigoY2hhcillc2NjaHIpKTsKKyNl bHNlCisgICAgaWYgKHR0eWZkIDwgMCkgewkJCS8qIE5vdCBvcGVuLiAqLworCWlmICh0dGNoaygp IDwgMCkKKwkgIHJldHVybigtMSk7CisJZWxzZQkJCQkvKiBCdXQgbWF5YmUgc29tZXRoaW5nIGJ1 ZmZlcmVkLiAqLworCSAgcmV0dXJuKDApOworICAgIH0KKyNpZmRlZiBORVRDTUQKKyAgICBpZiAo dHRwaXBlKSByZXR1cm4oMCk7CisjZW5kaWYgLyogTkVUQ01EICovCisjaWZkZWYgTkVUUFRZCisg ICAgaWYgKHR0cHR5KSByZXR1cm4oMCk7CisjZW5kaWYgLyogTkVUUFRZICovCisjaWZkZWYgTkVU Q09OTgorICAgIGlmIChuZXRjb25uKSB7CisjaWZkZWYgVENQU09DS0VUCisjaWZkZWYgVENQX05P REVMQVkKKyAgICAgICAgeworCSAgICBleHRlcm4gaW50IHRjcF9ub2RlbGF5OworCSAgICBpZiAo dHRuZXQgPT0gTkVUX1RDUEIpIHsKKwkJaWYgKG5vZGVsYXlfc2F2ID4gLTEpIHsKKwkJICAgIG5v X2RlbGF5KHR0eWZkLG5vZGVsYXlfc2F2KTsKKwkJICAgIG5vZGVsYXlfc2F2ID0gLTE7CisJCX0K KwkgICAgfQorICAgICAgICB9CisjZW5kaWYgLyogVENQX05PREVMQVkgKi8KKyNpZmRlZiBUTl9D T01QT1JUCisgICAgICAgIGlmIChpc3RuY29tcG9ydCgpKSB7CisgICAgICAgICAgICBpbnQgcmMg PSAtMTsKKyAgICAgICAgICAgIGlmICh0dnRmbGcgIT0gMCAmJiBzcGVlZCA9PSB0dHNwZWVkICYm IGZsb3cgPT0gdHRmbG93CisgICAgICAgICAgICAgICAgIC8qICYmIHR0Y2FyciA9PSBjdXJjYXJy ICovICkgeworICAgICAgICAgICAgICAgIGRlYnVnKEYxMDAsInR0dnQgbW9kZXMgYWxyZWFkeSBz ZXQsIHNraXBwaW5nLi4uIiwiIiwwKTsKKyAgICAgICAgICAgICAgICByZXR1cm4oMCk7CQkJLyog QWxyZWFkeSBiZWVuIGNhbGxlZC4gKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChm bG93ICE9IHR0ZmxvdykgeworICAgICAgICAgICAgICAgIGlmICgocmMgPSB0bnNldGZsb3coZmxv dykpIDwgMCkKKwkJICByZXR1cm4ocmMpOworICAgICAgICAgICAgICAgIHR0ZmxvdyA9IGZsb3c7 CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc3BlZWQgIT0gdHRzcGVlZCkgeworICAg ICAgICAgICAgICAgIGlmIChzcGVlZCA8PSAwKSAKKwkJICBzcGVlZCA9IHRuY19nZXRfYmF1ZCgp OworICAgICAgICAgICAgICAgIGVsc2UgaWYgKChyYyA9IHRuY19zZXRfYmF1ZChzcGVlZCkpIDwg MCkKKwkJICByZXR1cm4ocmMpOworICAgICAgICAgICAgICAgIHR0c3BlZWQgPSBzcGVlZDsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIHRuY19zZXRfZGF0YXNpemUoOCk7CisJICAgIHRuY19z ZXRfc3RvcHNpemUoc3RvcGJpdHMpOworCisjaWZkZWYgSFdQQVJJVFkKKyAgICAgICAgICAgIGlm IChod3Bhcml0eSkgeworICAgICAgICAgICAgICAgIHN3aXRjaCAoaHdwYXJpdHkpIHsKKwkJICBj YXNlICdlJzoJCS8qIEV2ZW4gKi8KKyAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEwMCwidHRy ZXMgOCBiaXRzICsgZXZlbiBwYXJpdHkiLCIiLDApOworICAgICAgICAgICAgICAgICAgICB0bmNf c2V0X3Bhcml0eSgzKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisJCSAgY2FzZSAnbyc6 CQkvKiBPZGQgKi8KKyAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEwMCwidHRyZXMgOCBiaXRz ICsgb2RkIHBhcml0eSIsIiIsMCk7CisgICAgICAgICAgICAgICAgICAgIHRuY19zZXRfcGFyaXR5 KDIpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKwkJICBjYXNlICdtJzoJCS8qIE1hcmsg Ki8KKyAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEwMCwidHRyZXMgOCBiaXRzICsgaW52YWxp ZCBwYXJpdHk6IG1hcmsiLCIiLDApOworICAgICAgICAgICAgICAgICAgICB0bmNfc2V0X3Bhcml0 eSg0KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisJCSAgY2FzZSAncyc6CQkvKiBTcGFj ZSAqLworICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJ0dHJlcyA4IGJpdHMgKyBpbnZh bGlkIHBhcml0eTogc3BhY2UiLCIiLDApOworICAgICAgICAgICAgICAgICAgICB0bmNfc2V0X3Bh cml0eSg1KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgfSBlbHNlCisjZW5kaWYgLyogSFdQQVJJVFkgKi8KKyAgICAgICAgICAgIHsK KyAgICAgICAgICAgICAgICB0bmNfc2V0X3Bhcml0eSgxKTsJLyogTm9uZSAqLworICAgICAgICAg ICAgfQorICAgICAgICAgICAgdHZ0ZmxnID0gMTsKKyAgICAgICAgICAgIHJldHVybigwKTsKKyAg ICAgICAgfQorI2VuZGlmIC8qIFROX0NPTVBPUlQgKi8KKyNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8K Kwl0dnRmbGcgPSAxOwkJCS8qIE5ldHdvcmsgY29ubmVjdGlvbnMuLi4gKi8KKwlkZWJ1ZyhGMTAw LCJ0dHZ0IG5ldHdvcmsgY29ubmVjdGlvbiwgc2tpcHBpbmcuLi4iLCIiLDApOworCXJldHVybigw KTsJCQkvKiAuLi4gcmVxdWlyZSBubyBzcGVjaWFsIHNldHVwICovCisgICAgfQorI2VuZGlmIC8q IE5FVENPTk4gKi8KKworICAgIGlmICh0dnRmbGcgIT0gMCAmJiBzcGVlZCA9PSB0dHNwZWVkICYm IGZsb3cgPT0gdHRmbG93CisJLyogJiYgdHRjYXJyID09IGN1cmNhcnIgKi8gKQorICAgICAgewor CSAgZGVidWcoRjEwMCwidHR2dCBtb2RlcyBhbHJlYWR5IHNldCwgc2tpcHBpbmcuLi4iLCIiLDAp OworCSAgcmV0dXJuKDApOwkJCS8qIEFscmVhZHkgYmVlbiBjYWxsZWQuICovCisgICAgICB9CisK KyAgICBpZiAodHRmZGZsZworI2lmbmRlZiBQbGFuOQorCSYmICFpc2F0dHkodHR5ZmQpCisjZW5k aWYgLyogUGxhbjkgKi8KKwkpIHsKKwlkZWJ1ZyhGMTAwLCJ0dHZ0IHVzaW5nIGV4dGVybmFsIGZk LCBza2lwcGluZy4uLiIsIiIsMCk7CisJcmV0dXJuKDApOworICAgIH0KKworICAgIGRlYnVnKEYx MDAsInR0dnQgc2V0dGluZyBtb2Rlcy4uLiIsIiIsMCk7CisKKyAgICBpZiAoeGxvY2FsKSB7CQkJ LyogRm9yIGV4dGVybmFsIGxpbmVzLi4uICovCisJczIgPSAoaW50KSAoc3BlZWQgLyAxMEwpOwor CXMgPSB0dHNzcGQoczIpOwkJCS8qIENoZWNrL3NldCB0aGUgc3BlZWQgKi8KKwljYXJyY3RsKCZ0 dHR2dCwgZmxvdyAhPSBGTE9fRElBTCAvKiBEbyBjYXJyaWVyIGNvbnRyb2wgKi8KKwkJJiYgKHR0 Y2FyciA9PSBDQVJfT04gfHwgKHR0Y2FyciA9PSBDQVJfQVVUICYmIHR0bWRtICE9IDApKSk7Cisg ICAgfSBlbHNlCisgICAgICBzID0gczIgPSAtMTsKKworI2lmZGVmIENPSEVSRU5UCisjZGVmaW5l IFNWT1JQT1NJWAorI2VuZGlmIC8qIENPSEVSRU5UICovCisKKyNpZm5kZWYgU1ZPUlBPU0lYCisg ICAgLyogQmVya2VsZXksIFY3LCBldGMgKi8KKyAgICBpZiAoZmxvdyA9PSBGTE9fUlRTQyB8fAkJ LyogSGFyZHdhcmUgZmxvdyBjb250cm9sICovCisJZmxvdyA9PSBGTE9fRFRSQyB8fAorCWZsb3cg PT0gRkxPX0RUUlQpIHsKKwl0dGhmbG93KGZsb3csIDEsICZ0dHR2dCk7CisJZGVidWcoRjEwMCwi dHR2dCBoYXJkIGZsb3csIFRBTkRFTSBvZmYiLCIiLDApOworCXR0dHZ0LnNnX2ZsYWdzICY9IH5U QU5ERU07CS8qIFR1cm4gb2ZmIHNvZnR3YXJlIGZsb3cgY29udHJvbCAqLworICAgIH0gZWxzZSBp ZiAoZmxvdyA9PSBGTE9fWE9OWCkgewkvKiBYb24vWG9mZiBmbG93IGNvbnRyb2wgKi8KKwlkZWJ1 ZyhGMTAwLCJ0dHZ0IFRBTkRFTSBvbiIsIiIsMCk7CisJdHR0dnQuc2dfZmxhZ3MgfD0gVEFOREVN OwkvKiBBc2sgZm9yIGl0LiAqLworCXR0aGZsb3coZmxvdywgMCwgJnR0dHZ0KTsJLyogVHVybiBv ZmYgaGFyZHdhcmUgZi9jICovCisgICAgfSBlbHNlIGlmIChmbG93ID09IEZMT19OT05FKSB7CisJ ZGVidWcoRjEwMCwidHR2dCBubyBmbG93LCBUQU5ERU0gb2ZmLCBSQVcgb24iLCIiLDApOworCXR0 dHZ0LnNnX2ZsYWdzICY9IH5UQU5ERU07CS8qIFR1cm4gb2ZmIHNvZnR3YXJlIGZsb3cgY29udHJv bCAqLworCXR0aGZsb3coZmxvdywgMCwgJnR0dHZ0KTsJLyogVHVybiBvZmYgYW55IGhhcmR3YXJl IGYvYyB0b28gKi8KKwl0dHR2dC5zZ19mbGFncyB8PSBSQVc7CQkvKiBFbnRlciByYXcgbW9kZSAq LworICAgIH0gZWxzZSBpZiAoZmxvdyA9PSBGTE9fS0VFUCkgewkvKiBLZWVwIGRldmljZSdzIG9y aWdpbmFsIHNldHRpbmcgKi8KKwlkZWJ1ZyhGMTAwLCJ0dHZ0IGtlZXBpbmcgb3JpZ2luYWwgVEFO REVNIiwiIiwwKTsKKwl0dHR2dC5zZ19mbGFncyAmPSB+VEFOREVNOworCXR0dHZ0LnNnX2ZsYWdz IHw9ICh0dG9sZC5zZ19mbGFncyAmIFRBTkRFTSk7CisJLyogTk9URTogV2Ugc2hvdWxkIGFsc28g aGFuZGxlIGhhcmR3YXJlIGZsb3cgY29udHJvbCBoZXJlISAqLworICAgIH0KKyAgICB0dHR2dC5z Z19mbGFncyB8PSBSQVc7ICAgICAgICAgICAgICAvKiBSYXcgbW9kZSBpbiBhbGwgY2FzZXMgKi8K KyNpZmRlZiBUT1dFUjEKKyAgICB0dHR2dC5zZ19mbGFncyAmPSB+KEVDSE98QU5ZUCk7ICAgICAv KiBObyBlY2hvIG9yIHBhcml0eSAqLworI2Vsc2UKKyAgICB0dHR2dC5zZ19mbGFncyAmPSB+RUNI TzsgICAgICAgICAgICAvKiBObyBlY2hvICovCisjZW5kaWYgLyogVE9XRVIxICovCisKKyNpZmRl ZiBCRUxMVjEwCisgICAgaWYgKGlvY3RsKHR0eWZkLFRJT0NTRVRQLCZ0dHR2dCkgPCAwKSAvKiBT ZXQgdGhlIG5ldyBtb2RlcyAqLworICAgICAgcmV0dXJuKC0xKTsKKyNlbHNlCisgICAgaWYgKHN0 dHkodHR5ZmQsJnR0dHZ0KSA8IDApCQkvKiBTZXQgdGhlIG5ldyBtb2RlcyAqLworICAgICAgcmV0 dXJuKC0xKTsKKyNlbmRpZiAvKiBCRUxMVjEwICovCisKKyNlbHNlIC8qIEl0IGlzIEFUVFNWIG9y IFBPU0lYICovCisKKyAgICBpZiAoZmxvdyA9PSBGTE9fWE9OWCkgewkJLyogU29mdHdhcmUgZmxv dyBjb250cm9sICovCisJdHR0dnQuY19pZmxhZyB8PSAoSVhPTnxJWE9GRik7CS8qIE9uIGlmIHJl cXVlc3RlZC4gKi8KKwl0dGhmbG93KGZsb3csIDAsICZ0dHR2dCk7CS8qIFR1cm4gb2ZmIGhhcmR3 YXJlIGYvYyAqLworCWRlYnVnKEYxMDAsInR0dnQgU1ZPUlBPU0lYIGZsb3cgWE9OL1hPRkYiLCIi LDApOworICAgIH0gZWxzZSBpZiAoZmxvdyA9PSBGTE9fTk9ORSkgewkvKiBOT05FICovCisJdHR0 dnQuY19pZmxhZyAmPSB+KElYT058SVhPRkYpOwkvKiBUdXJuIG9mZiBYb24vWG9mZiAqLworCXR0 aGZsb3coZmxvdywgMCwgJnR0dHZ0KTsJLyogVHVybiBvZmYgaGFyZHdhcmUgZi9jICovCisJZGVi dWcoRjEwMCwidHR2dCBTVk9SUE9TSVggZmxvdyBOT05FIiwiIiwwKTsKKyAgICB9IGVsc2UgaWYg KGZsb3cgPT0gRkxPX0tFRVApIHsKKwl0dHR2dC5jX2lmbGFnICY9IH4oSVhPTnxJWE9GRik7CS8q IFR1cm4gb2ZmIFhvbi9Yb2ZmIGZsYWdzICovCisJdHR0dnQuY19pZmxhZyB8PSAodHRvbGQuY19p ZmxhZyAmIChJWE9OfElYT0ZGKSk7IC8qIE9SIGluIG9sZCBvbmVzICovCisjaWZkZWYgUE9TSVhf Q1JUU0NUUworICAgICAgICB0dHR2dC5jX2NmbGFnICY9IH5DUlRTQ1RTOwkvKiBUdXJuIG9mZiBS VFMvQ1RTIGZsYWcgKi8KKyAgICAgICAgdHR0dnQuY19jZmxhZyB8PSAodHRvbGQuY19jZmxhZyAm IENSVFNDVFMpOyAvKiBPUiBpbiBvbGQgb25lICovCisjZW5kaWYgLyogUE9TSVhfQ1JUU0NUUyAq LworCWRlYnVnKEYxMDAsInR0dnQgU1ZPUlBPU0lYIGZsb3cgS0VFUCIsIiIsMCk7CisgICAgfSBl bHNlIGlmIChmbG93ID09IEZMT19SVFNDIHx8CS8qIEhhcmR3YXJlIGZsb3cgY29udHJvbCAqLwor CSAgICAgICBmbG93ID09IEZMT19EVFJDIHx8CisJICAgICAgIGZsb3cgPT0gRkxPX0RUUlQpIHsK Kwl0dHR2dC5jX2lmbGFnICY9IH4oSVhPTnxJWE9GRik7CS8qICgxOTYpICovCisJdHRoZmxvdyhm bG93LCAxLCAmdHR0dnQpOworCWRlYnVnKEYxMDAsInR0dnQgU1ZPUlBPU0lYIGZsb3cgSEFSRCIs IiIsMCk7CisgICAgfQorI2lmbmRlZiBPWE9TCisjaWZkZWYgQ09IRVJFTlQKKyAgICB0dHR2dC5j X2xmbGFnICY9IH4oSVNJR3xJQ0FOT058RUNITyk7CisjZWxzZQorICAgIHR0dHZ0LmNfbGZsYWcg Jj0gfihJU0lHfElDQU5PTnxFQ0hPfElFWFRFTik7CisjZW5kaWYgLyogQ09IRVJFTlQgKi8KKyNp ZmRlZiBRTlgKKyAgICAvKiBOZWVkZWQgZm9yIGh3ZmMgKi8KKyAgICBpZiAoZmxvdyA9PSBGTE9f UlRTQyB8fCBmbG93ID09IEZMT19EVFJDIHx8IGZsb3cgPT0gRkxPX0RUUlQpCisgICAgICB0dHR2 dC5jX2xmbGFnIHw9IElFWFRFTjsKKyNlbmRpZiAvKiBRTlggKi8KKyNlbHNlIC8qIE9YT1MgKi8K KyAgICB0dHR2dC5jX2xmbGFnICY9IH4oSVNJR3xJQ0FOT058RUNITyk7CisgICAgdHR0dnQuY19j Y1tWRElTQ0FSRF0gPSB0dHR2dC5jX2NjW1ZMTkVYVF0gPSBDRElTQUJMRTsKKyNlbmRpZiAvKiBP WE9TICovCisKKyAgICB0dHR2dC5jX2lmbGFnIHw9IChJR05CUkt8SUdOUEFSKTsKKworLyogU3Rv cCBiaXRzICovCisKKyNpZmRlZiBDU1RPUEIKKyAgICBpZiAoeGxvY2FsKSB7CisJaWYgKHN0b3Bi aXRzID09IDIpIHsKKwkgICAgdHR0dnQuY19jZmxhZyB8PSBDU1RPUEI7CS8qIDIgc3RvcCBiaXRz ICovCisJICAgIGRlYnVnKEYxMDAsInR0dnQgMiBzdG9wYml0cyIsIiIsMCk7CisJfSBlbHNlIGlm IChzdG9wYml0cyA9PSAxKSB7CisJICAgIHR0dHZ0LmNfY2ZsYWcgJj0gfihDU1RPUEIpOwkvKiAx IHN0b3AgYml0ICovCisJICAgIGRlYnVnKEYxMDAsInR0dnQgMSBzdG9wYml0IiwiIiwwKTsKKwl9 CisgICAgfQorI2VuZGlmIC8qIENTVE9QQiAqLworCisvKiBQYXJpdHkgKi8KKworI2lmZGVmIEhX UEFSSVRZCisgICAgaWYgKGh3cGFyaXR5ICYmIHhsb2NhbCkgewkJLyogSGFyZHdhcmUgcGFyaXR5 ICovCisjaWZkZWYgQ09NTUVOVAorLyogVW5jb21tZW50IHRoaXMgb25seSBpZiBuZWVkZWQgLS0g SSBkb24ndCB0aGluayBpdCBpcyAqLworCXR0cmF3LmNfY2ZsYWcgJj0gfihDU0laRSk7CS8qIENs ZWFyIG91dCBjaGFyYWN0ZXItc2l6ZSBtYXNrICovCisJdHRyYXcuY19jZmxhZyB8PSBDUzg7CQkv KiBBbmQgc2V0IGl0IHRvIDggKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisjaWZkZWYgSUdOUEFS CisJZGVidWcoRjEwMSwidHR2dCBod3Bhcml0eSBJR05QQVIiLCIiLElHTlBBUik7CisJdHR0dnQu Y19pZmxhZyB8PSBJR05QQVI7CS8qIERvbid0IGRpc2NhcmQgaW5jb21pbmcgYnl0ZXMgKi8KKyNl bmRpZiAvKiBJR05QQVIgKi8KKwl0dHR2dC5jX2NmbGFnIHw9IFBBUkVOQjsJLyogRW5hYmxlIHBh cml0eSAqLworCisJc3dpdGNoIChod3Bhcml0eSkgeworCSAgY2FzZSAnZSc6CQkJLyogRXZlbiAq LworCSAgICB0dHR2dC5jX2NmbGFnICY9IH4oUEFST0REKTsKKwkgICAgZGVidWcoRjEwMCwidHR2 dCA4IGJpdHMgKyBldmVuIHBhcml0eSIsIiIsMCk7CisJICAgIGJyZWFrOworCSAgY2FzZSAnbyc6 CQkJLyogT2RkICovCisJICAgIHR0dHZ0LmNfY2ZsYWcgfD0gUEFST0REOworCSAgICBkZWJ1ZyhG MTAwLCJ0dHZ0IDggYml0cyArIG9kZCBwYXJpdHkiLCIiLDApOworCSAgICBicmVhazsKKwkgIGNh c2UgJ20nOgkJCS8qIE1hcmsgKi8KKwkgIGNhc2UgJ3MnOgkJCS8qIFNwYWNlICovCisJICAgIC8q IFBBUkVYVCBpcyBtZW50aW9uZWQgaW4gU1ZJRCBidXQgdGhlIGRldGFpbHMgYXJlIG5vdCBnaXZl bi4gKi8KKwkgICAgLyogUEFSRVhUIGlzIG5vdCBpbmNsdWRlZCBpbiBQT1NJWCBJU08vSUVDIDk5 NDUtMS4gKi8KKwkgICAgZGVidWcoRjEwMCwidHR2dCA4IGJpdHMgKyBpbnZhbGlkIHBhcml0eSIs IiIsMCk7CisJICAgIGJyZWFrOworCX0KKyAgICB9IGVsc2UgewkJCQkvKiBXZSBoYW5kbGUgcGFy aXR5IG91cnNlbHZlcyAqLworI2VuZGlmIC8qIEhXUEFSSVRZICovCisJdHR0dnQuY19jZmxhZyAm PSB+KFBBUkVOQik7CS8qIERvbid0IGVuYWJsZSBwYXJpdHkgKi8KKyNpZmRlZiBIV1BBUklUWQor ICAgIH0KKyNlbmRpZiAvKiBIV1BBUklUWSAqLworCisjaWZkZWYgQVRUU1YKKyNpZmRlZiBCU0Q0 NAorICAgIC8qIFRoaW5ncyBub3QgdG8gZG8uLi4gKi8KKyAgICB0dHR2dC5jX2lmbGFnICY9IH4o SU5MQ1J8SUdOQ1J8SUNSTkx8SU5QQ0t8SVNUUklQfElYQU5ZKTsKKyNlbHNlCisgICAgdHR0dnQu Y19pZmxhZyAmPSB+KElOTENSfElHTkNSfElDUk5MfElVQ0xDfElOUENLfElTVFJJUHxJWEFOWSk7 CisjZW5kaWYgLyogQlNENDQgKi8KKyNlbHNlIC8qIFBPU0lYICovCisgICAgdHR0dnQuY19pZmxh ZyAmPSB+KElOTENSfElHTkNSfElDUk5MfElOUENLfElTVFJJUCk7CisjZW5kaWYgLyogQVRUU1Yg Ki8KKyAgICB0dHR2dC5jX2NmbGFnICY9IH4oQ1NJWkUpOwkJLyogWmVybyBvdXQgdGhlIGNoYXIg c2l6ZSBmaWVsZCAqLworICAgIHR0dHZ0LmNfY2ZsYWcgfD0gKENTOHxDUkVBRHxIVVBDTCk7CS8q IENoYXIgc2l6ZSA4LCBlbmFibGUgcmVjZWl2ZXIsIGh1cCAqLworICAgIHR0dHZ0LmNfb2ZsYWcg Jj0gfk9QT1NUOwkJLyogRG9uJ3QgcG9zdHByb2Nlc3Mgb3V0cHV0ICovCisjaWZuZGVmIFZFT0Yg LyogREdVWCB0ZXJtaW8gaGFzIFZFT0YgYXQgZW50cnkgNCwgc2VlIGNvbW1lbnQgYWJvdmUgKi8K KyAgICB0dHR2dC5jX2NjWzRdID0gMTsKKyNlbHNlCisjaWZuZGVmIE9YT1MKKyNpZmRlZiBWTUlO CisgICAgdHR0dnQuY19jY1tWTUlOXSA9IDE7CisjZW5kaWYgLyogVk1JTiAqLworI2Vsc2UgLyog T1hPUyAqLworICAgIHR0dHZ0LmNfbWluID0gMTsKKyNlbmRpZiAvKiBPWE9TICovCisjZW5kaWYg LyogVkVPRiAqLworI2lmbmRlZiBWRU9MCS8qIERHVVggdGVybWlvIGhhcyBWRU9MIGF0IGVudHJ5 IDUsIHNlZSBjb21tZW50IGFib3ZlICovCisgICAgdHR0dnQuY19jY1s1XSA9IDA7CisjZWxzZQor I2lmbmRlZiBPWE9TCisjaWZkZWYgVlRJTUUKKyAgICB0dHR2dC5jX2NjW1ZUSU1FXSA9IDA7Cisj ZW5kaWYgLyogVlRJTUUgKi8KKyNlbHNlIC8qIE9YT1MgKi8KKyAgICB0dHR2dC5jX3RpbWUgPSAw OworI2VuZGlmIC8qIE9YT1MgKi8KKyNlbmRpZiAvKiBWRU9MICovCisKKyNpZmRlZiBQbGFuOQor ICAgIGlmIChwOXR0eXBhcml0eSgnbicpIDwgMCkKKyAgICAgIHJldHVybiAtMTsKKyNlbHNlCisj aWZkZWYgQlNENDRPUlBPU0lYCisgICAgZXJybm8gPSAwOworI2lmZGVmIEJFT1NPUkJFQk9YCisg ICAgdHR0dnQuY19jY1tWTUlOXSA9IDA7CQkvKiBEUjcgY2FuIG9ubHkgcG9sbC4gKi8KKyNlbmRp ZiAvKiBCRU9TT1JCRUJPWCAqLworCisgICAgeCA9IHRjc2V0YXR0cih0dHlmZCxUQ1NBRFJBSU4s JnR0dHZ0KTsKKyAgICBkZWJ1ZyhGMTAxLCJ0dHZ0IEJTRDQ0T1JQT1NJWCB0Y3NldGF0dHIiLCIi LHgpOworICAgIGlmICh4IDwgMCkgeworCWRlYnVnKEYxMDEsInR0dnQgQlNENDRPUlBPU0lYIHRj c2V0YXR0ciBlcnJubyIsIiIsZXJybm8pOworCXJldHVybigtMSk7CisgICAgfQorI2Vsc2UgLyog QVRUU1YgKi8KKyAgICB4ID0gaW9jdGwodHR5ZmQsVENTRVRBVywmdHR0dnQpOworICAgIGRlYnVn KEYxMDEsInR0dnQgQVRUU1YgaW9jdGwgVENTRVRBVyIsIiIseCk7CisgICAgaWYgKHggPCAwKSB7 CQkJLyogc2V0IG5ldyBtb2RlcyAuICovCisJZGVidWcoRjEwMSwidHR2dCBBVFRTViBpb2N0bCBU Q1NFVEFXIGVycm5vIiwiIixlcnJubyk7CisJcmV0dXJuKC0xKTsJCisgICAgfQorI2VuZGlmIC8q IEJTRDQ0T1JQT1NJWCAqLworI2VuZGlmIC8qIFBsYW45ICovCisjZW5kaWYgLyogQVRUU1YgKi8K KworICAgIHR0c3BlZWQgPSBzcGVlZDsJCQkvKiBEb25lLCByZW1lbWJlciBob3cgd2Ugd2VyZSAq LworICAgIHR0ZmxvdyA9IGZsb3c7CQkJLyogY2FsbGVkLCBzbyB3ZSBjYW4gZGVjaWRlIGhvdyB0 byAqLworICAgIHR2dGZsZyA9IDE7CQkJCS8qIHJlc3BvbmQgbmV4dCB0aW1lLiAqLworICAgIGRl YnVnKEYxMDAsInR0dnQgb2siLCIiLDApOworICAgIHJldHVybigwKTsKKworI2lmZGVmIENPSEVS RU5UCisjdW5kZWYgU1ZPUlBPU0lYCisjZW5kaWYgLyogQ09IRVJFTlQgKi8KKworI2VuZGlmIC8q IE5PTE9DQUwgKi8KK30KKworI2lmbmRlZiBOT0xPQ0FMCisKKy8qIFNlcmlhbCBzcGVlZCBkZXBh cnRtZW50IC4gLiAuICovCisKKy8qCisgIFNDTyBPU1I1LjAueCBtaWdodCBvciBtaWdodCBub3Qg c3VwcG9ydCBoaWdoIHNwZWVkcy4gIFNvbWV0aW1lcyB0aGV5IGFyZSBub3QKKyAgZGVmaW5lZCBp biB0aGUgaGVhZGVyIGZpbGVzIGJ1dCB0aGV5IGFyZSBzdXBwb3J0ZWQgKGUuZy4gd2hlbiBidWls ZGluZyB3aXRoCisgIFVESyBjb21waWxlciByYXRoZXIgdGhhbiAvYmluL2NjKSwgc29tZXRpbWVz IHZpY2UgdmVyc2EuICBFdmVuIHRob3VnaCA1LjAuNAorICB3YXMgdGhlIGZpcnN0IHJlbGVhc2Ug dGhhdCBjYW1lIHdpdGggaGlnaCBzZXJpYWwgc3BlZWRzIHN0YW5kYXJkLCByZWxlYXNlcworICBi YWNrIHRvIDUuMC4wIGNvdWxkIHVzZSB0aGVtIGlmIGNlcnRhaW4gcGF0Y2hlcyAob3IgInN1cHBs ZW1lbnRzIikgd2VyZQorICBhcHBsaWVkIHRvIHRoZSBTSU8gZHJpdmVyLiAgUGx1cyBhIGxvdCBv ZiBTQ08gaW5zdGFsbGF0aW9ucyBydW4gdGhpcmQtcGFydHkKKyAgZHJpdmVycy4KKyovCisjaWZk ZWYgQ0tfU0NPVjUKKyNpZm5kZWYgQjM4NDAwCisjZGVmaW5lCUIzODQwMAkwMDAwMDE3CisjZW5k aWYgLyogQjM4NDAwICovCisjaWZuZGVmIEI1NzYwMAorI2RlZmluZQlCNTc2MDAJMDAwMDAyMQor I2VuZGlmIC8qIEI1NzYwMCAqLworI2lmbmRlZiBCNzY4MDAKKyNkZWZpbmUJQjc2ODAwCTAwMDAw MjIKKyNlbmRpZiAvKiBCNzY4MDAgKi8KKyNpZm5kZWYgQjExNTIwMAorI2RlZmluZQlCMTE1MjAw CTAwMDAwMjMKKyNlbmRpZiAvKiBCMTE1MjAwICovCisjaWZuZGVmIEIyMzA0MDAKKyNkZWZpbmUJ QjIzMDQwMAkwMDAwMDI0CisjZW5kaWYgLyogQjIzMDQwMCAqLworI2lmbmRlZiBCNDYwODAwCisj ZGVmaW5lCUI0NjA4MDAJMDAwMDAyNQorI2VuZGlmIC8qIEI0NjA4MDAgKi8KKyNpZm5kZWYgQjky MTYwMAorI2RlZmluZQlCOTIxNjAwCTAwMDAwMjYKKyNlbmRpZiAvKiBCOTIxNjAwICovCisjZW5k aWYgLyogQ0tfU0NPVjUgKi8KKy8qCisgIFBsYW4gOSdzIG5hdGl2ZSBzcGVlZCBzZXR0aW5nIGlu dGVyZmFjZSBsZXRzIHlvdSBzZXQgYW55dGhpbmcgeW91IGxpa2UsCisgIGJ1dCB3aWxsIGZhaWwg aWYgdGhlIGhhcmR3YXJlIGRvZXNuJ3QgbGlrZSBpdCwgc28gd2UgYWxsb3cgYWxsIHRoZSBjb21t b24KKyAgc3BlZWRzLgorKi8KKyNpZmRlZiBQbGFuOQorI2lmbmRlZiBCNTAKKyNkZWZpbmUgQjUw IDUwCisjZW5kaWYgLyogQjUwICovCisjaWZuZGVmIEI3NQorI2RlZmluZSBCNzUgNzUKKyNlbmRp ZiAvKiBCNzUgKi8KKyNpZm5kZWYgQjExMAorI2RlZmluZSBCMTEwIDExMAorI2VuZGlmIC8qIEIx MTAgKi8KKyNpZm5kZWYgQjEzNAorI2RlZmluZSBCMTM0IDEzNAorI2VuZGlmIC8qIEIxMzQgKi8K KyNpZm5kZWYgQjIwMAorI2RlZmluZSBCMjAwIDIwMAorI2VuZGlmIC8qIEIyMDAgKi8KKyNpZm5k ZWYgQjMwMAorI2RlZmluZSBCMzAwIDMwMAorI2VuZGlmIC8qIEIzMDAgKi8KKyNpZm5kZWYgQjEy MDAKKyNkZWZpbmUgQjEyMDAgMTIwMAorI2VuZGlmIC8qIEIxMjAwICovCisjaWZuZGVmIEIxODAw CisjZGVmaW5lIEIxODAwIDE4MDAKKyNlbmRpZiAvKiBCMTgwMCAqLworI2lmbmRlZiBCMjQwMAor I2RlZmluZSBCMjQwMCAyNDAwCisjZW5kaWYgLyogQjI0MDAgKi8KKyNpZm5kZWYgQjQ4MDAKKyNk ZWZpbmUgQjQ4MDAgNDgwMAorI2VuZGlmIC8qIEI0ODAwICovCisjaWZuZGVmIEI5NjAwCisjZGVm aW5lIEI5NjAwIDk2MDAKKyNlbmRpZiAvKiBCOTYwMCAqLworI2lmbmRlZiBCMTQ0MDAKKyNkZWZp bmUgQjE0NDAwIDE0NDAwCisjZW5kaWYgLyogQjE0NDAwICovCisjaWZuZGVmIEIxOTIwMAorI2Rl ZmluZSBCMTkyMDAgMTkyMDAKKyNlbmRpZiAvKiBCMTkyMDAgKi8KKyNpZm5kZWYgQjI4ODAwCisj ZGVmaW5lIEIyODgwMCAyODgwMAorI2VuZGlmIC8qIEIyODgwMCAqLworI2lmbmRlZiBCMzg0MDAK KyNkZWZpbmUgQjM4NDAwIDM4NDAwCisjZW5kaWYgLyogQjM4NDAwICovCisjaWZuZGVmIEI1NzYw MAorI2RlZmluZSBCNTc2MDAgNTc2MDAKKyNlbmRpZiAvKiBCNTc2MDAgKi8KKyNpZm5kZWYgQjc2 ODAwCisjZGVmaW5lIEI3NjgwMCA3NjgwMAorI2VuZGlmIC8qIEI3NjgwMCAqLworI2lmbmRlZiBC MTE1MjAwCisjZGVmaW5lIEIxMTUyMDAgMTE1MjAwCisjZW5kaWYgLyogQjExNTIwMCAqLworI2lm bmRlZiBCMjMwNDAwCisjZGVmaW5lIEIyMzA0MDAgMjMwNDAwCisjZW5kaWYgLyogQjIzMDQwMCAq LworI2lmbmRlZiBCNDYwODAwCisjZGVmaW5lIEI0NjA4MDAgNDYwODAwCisjZW5kaWYgLyogQjQ2 MDgwMCAqLworI2lmbmRlZiBCOTIxNjAwCisjZGVmaW5lIEI5MjE2MDAgOTIxNjAwCisjZW5kaWYg LyogQjkyMTYwMCAqLworI2VuZGlmIC8qIFBsYW45ICovCisKKy8qICBUIFQgUyBTIFAgRCAgLS0g IENoZWNrcyBhbmQgc2V0cyB0cmFuc21pc3Npb24gcmF0ZS4gICovCisKKy8qICBDYWxsIHdpdGgg c3BlZWQgaW4gY2hhcmFjdGVycyAobm90IGJpdHMhKSBwZXIgc2Vjb25kLiAqLworLyogIFJldHVy bnMgLTEgb24gZmFpbHVyZSwgMCBpZiBpdCBkaWQgbm90aGluZywgMSBpZiBpdCBjaGFuZ2VkIHRo ZSBzcGVlZC4gKi8KKworI2lmZGVmIFVTRVRDU0VUU1BFRUQKKy8qCisgIFRoZSB0Y3NldHNwZWVk KCkgLyB0Y2dldHNwZWVkKCkgaW50ZXJmYWNlIGxldHMgeW91IHBhc3MgYW55IG51bWJlciBhdCBh bGwKKyAgdG8gYmUgdXNlZCBhcyBhIHNwZWVkIHRvIGJlIHNldCwgcmF0aGVyIHRoYW4gZm9yY2lu ZyBhIGNob2ljZSBmcm9tIGEKKyAgcHJlZGVmaW5lZCBsaXN0LiAgSXQgc2VlbXMgdG8gYmUgcGVj dWxpYXIgdG8gVW5peFdhcmUgNy4KKworICBUaGVzZSBhcmUgdGhlIGZ1bmN0aW9uIGNvZGVzIHRv IGJlIHBhc3NlZCB0byB0Y1tnc11ldHNwZWVkKCksCisgIGJ1dCBmb3Igc29tZSByZWFzb24gdGhl eSBkb24ndCBzZWVtIHRvIGJlIHBpY2tlZCB1cCBmcm9tIHRlcm1pb3MuaC4KKyovCisjaWZuZGVm IFRDU19BTEwKKyNkZWZpbmUgVENTX0FMTCAwCisjZW5kaWYgLyogVENTX0FMTCAqLworI2lmbmRl ZiBUQ1NfSU4KKyNkZWZpbmUgVENTX0lOIDEKKyNlbmRpZiAvKiBUQ1NfSU4gKi8KKyNpZm5kZWYg VENTX09VVAorI2RlZmluZSBUQ1NfT1VUIDIKKyNlbmRpZiAvKiBUQ1NfT1VUICovCisjZW5kaWYg LyogVVNFVENTRVRTUEVFRCAqLworCitpbnQKK3R0c3NwZChjcHMpIGludCBjcHM7IHsKKyAgICBp bnQgeDsKKyNpZmRlZiBQT1NJWAorLyogV2F0Y2ggb3V0LCBzcGVlZF90IHNob3VsZCBiZSB1bnNp Z25lZCwgc28gZG9uJ3QgY29tcGFyZSB3aXRoIC0xLCBldGMuLi4gKi8KKyAgICBzcGVlZF90Cisj ZWxzZQorICAgIGludAorI2VuZGlmIC8qIFBPU0lYICovCisgICAgICBzLCBzMjsKKyAgICBpbnQg b2sgPSAxOwkJCQkvKiBTcGVlZCBjaGVjayByZXN1bHQsIGFzc3VtZSBvayAqLworCisjaWZkZWYg T0xJTlVYSElTUEVFRAorICAgIHVuc2lnbmVkIGludCBzcGRfZmxhZ3MgPSAwOworICAgIHN0cnVj dCBzZXJpYWxfc3RydWN0IHNlcmluZm87CisjZW5kaWYgLyogT0xJTlVYSElTUEVFRCAqLworCisg ICAgZGVidWcoRjEwMSwidHRzc3BkIGNwcyIsIiIsY3BzKTsKKyAgICBkZWJ1ZyhGMTAxLCJ0dHNz cGQgdHR5ZmQiLCIiLHR0eWZkKTsKKyAgICBkZWJ1ZyhGMTAxLCJ0dHNzcGQgeGxvY2FsIiwiIix4 bG9jYWwpOworCisgICAgaWYgKHR0eWZkIDwgMCB8fCB4bG9jYWwgPT0gMCkJLyogRG9uJ3Qgc2V0 IHNwZWVkIG9uIGNvbnNvbGUgKi8KKyAgICAgIHJldHVybigwKTsKKworI2lmZGVmCU5FVENPTk4K KyAgICBpZiAobmV0Y29ubikgeworI2lmZGVmIFROX0NPTVBPUlQKKyAgICAgICAgaWYgKGlzdG5j b21wb3J0KCkpCisJICByZXR1cm4odG5jX3NldF9iYXVkKGNwcyAqIDEwKSk7CisgICAgICAgIGVs c2UKKyNlbmRpZiAvKiBUTl9DT01QT1JUICovCisJcmV0dXJuKDApOworICB9CisjZW5kaWYJLyog TkVUQ09OTiAqLworI2lmZGVmIE5FVENNRAorICAgIGlmICh0dHBpcGUpIHJldHVybigwKTsKKyNl bmRpZiAvKiBORVRDTUQgKi8KKyNpZmRlZiBORVRQVFkKKyAgICBpZiAodHRwdHkpIHJldHVybigw KTsKKyNlbmRpZiAvKiBORVRQVFkgKi8KKworICAgIGlmIChjcHMgPCAwKSByZXR1cm4oLTEpOwor ICAgIHMgPSBzMiA9IDA7CQkJCS8qIE5COiBzIGFuZCBzMiBtaWdodCBiZSB1bnNpZ25lZCAqLwor CisjaWZkZWYgVVNFVENTRVRTUEVFRAorCisgICAgcyA9IGNwcyAqIDEwTDsKKworICAgIHggPSB0 Y2dldGF0dHIodHR5ZmQsJnR0Y3VyKTsJLyogR2V0IGN1cnJlbnQgc3BlZWQgKi8KKyAgICBkZWJ1 ZyhGMTAxLCJ0dHNzcGQgdGNnZXRhdHRyIiwiIix4KTsKKyAgICBpZiAoeCA8IDApCisgICAgICBy ZXR1cm4oLTEpOworICAgIGRlYnVnKEYxMDEsInR0c3NwZCBUQ1NFVFNQRUVEIHNwZWVkIiwiIixz KTsKKworICAgIGVycm5vID0gMDsKKyAgICBpZiAocyA9PSA4ODgwTCkgewkJCS8qIDc1LzEyMDAg c3BsaXQgc3BlZWQgcmVxdWVzdGVkICovCisJdGNzZXRzcGVlZChUQ1NfSU4sICZ0dGN1ciwgMTIw MEwpOworCXRjc2V0c3BlZWQoVENTX09VVCwgJnR0Y3VyLCA3NUwpOworICAgIH0gZWxzZQorICAg ICAgdGNzZXRzcGVlZChUQ1NfQUxMLCAmdHRjdXIsIHMpOwkvKiBQdXQgbmV3IHNwZWVkIGluIHN0 cnVjdHMgKi8KKyNpZmRlZiBERUJVRworICAgIGlmIChlcnJubyAmIGRlYmxvZykgeworCWRlYnVn KEYxMDEsInR0c3NwZCBUQ1NFVFNQRUVEIGVycm5vIiwiIixlcnJubyk7CisgICAgfQorI2VuZGlm IC8qIERFQlVHICovCisKKyNpZmRlZiBDT01NRU5UCisgICAgdGNzZXRzcGVlZChUQ1NfQUxMLCAm dHRyYXcsIHMpOworICAgIHRjc2V0c3BlZWQoVENTX0FMTCwgJnR0dHZ0LCBzKTsKKyAgICB0Y3Nl dHNwZWVkKFRDU19BTEwsICZ0dG9sZCwgcyk7CisjZWxzZQorICAgIGlmIChzID09IDg4ODBMKSB7 CQkJLyogNzUvMTIwMCBzcGxpdCBzcGVlZCByZXF1ZXN0ZWQgKi8KKwl0Y3NldHNwZWVkKFRDU19J TiwgJnR0cmF3LCAxMjAwTCk7CisJdGNzZXRzcGVlZChUQ1NfT1VULCAmdHRyYXcsIDc1TCk7CisJ dGNzZXRzcGVlZChUQ1NfSU4sICZ0dHR2dCwgMTIwMEwpOworCXRjc2V0c3BlZWQoVENTX09VVCwg JnR0dHZ0LCA3NUwpOworCXRjc2V0c3BlZWQoVENTX0lOLCAmdHRvbGQsIDEyMDBMKTsKKwl0Y3Nl dHNwZWVkKFRDU19PVVQsICZ0dG9sZCwgNzVMKTsKKyAgICB9IGVsc2UgeworCXRjc2V0c3BlZWQo VENTX0FMTCwgJnR0cmF3LCBzKTsKKwl0Y3NldHNwZWVkKFRDU19BTEwsICZ0dHR2dCwgcyk7CisJ dGNzZXRzcGVlZChUQ1NfQUxMLCAmdHRvbGQsIHMpOworICAgIH0KKyNlbmRpZiAvKiBDT01NRU5U ICovCisKKyAgICB4ID0gdGNzZXRhdHRyKHR0eWZkLFRDU0FEUkFJTiwmdHRjdXIpOyAvKiBTZXQg dGhlIHNwZWVkICovCisgICAgZGVidWcoRjEwMSwidHRzc3BkIHRjc2V0YXR0ciIsIiIseCk7Cisg ICAgaWYgKHggPCAwKQorICAgICAgcmV0dXJuKC0xKTsKKworI2Vsc2UgIC8qIE5vdCBVU0VUQ1NF VFNQRUVEICovCisKKyAgICAvKiBGaXJzdCBjaGVjayB0aGF0IHRoZSBnaXZlbiBzcGVlZCBpcyB2 YWxpZC4gKi8KKworICAgIHN3aXRjaCAoY3BzKSB7CisjaWZuZGVmIE1JTklYCisgICAgICBjYXNl IDA6ICAgcyA9IEIwOyAgICBicmVhazsKKyAgICAgIGNhc2UgNTogICBzID0gQjUwOyAgIGJyZWFr OworICAgICAgY2FzZSA3OiAgIHMgPSBCNzU7ICAgYnJlYWs7CisjZW5kaWYgLyogTUlOSVggKi8K KyAgICAgIGNhc2UgMTE6ICBzID0gQjExMDsgIGJyZWFrOworI2lmbmRlZiBNSU5JWAorICAgICAg Y2FzZSAxMzogIHMgPSBCMTM0OyAgYnJlYWs7CisgICAgICBjYXNlIDE1OiAgcyA9IEIxNTA7ICBi cmVhazsKKyAgICAgIGNhc2UgMjA6ICBzID0gQjIwMDsgIGJyZWFrOworI2VuZGlmIC8qIE1JTklY ICovCisgICAgICBjYXNlIDMwOiAgcyA9IEIzMDA7ICBicmVhazsKKyNpZm5kZWYgTUlOSVgKKyAg ICAgIGNhc2UgNjA6ICBzID0gQjYwMDsgIGJyZWFrOworI2VuZGlmIC8qIE1JTklYICovCisgICAg ICBjYXNlIDEyMDogcyA9IEIxMjAwOyBicmVhazsKKyNpZm5kZWYgTUlOSVgKKyAgICAgIGNhc2Ug MTgwOiBzID0gQjE4MDA7IGJyZWFrOworI2VuZGlmIC8qIE1JTklYICovCisgICAgICBjYXNlIDI0 MDogcyA9IEIyNDAwOyBicmVhazsKKyAgICAgIGNhc2UgNDgwOiBzID0gQjQ4MDA7IGJyZWFrOwor I2lmbmRlZiBNSU5JWAorICAgICAgY2FzZSA4ODg6IHMgPSBCNzU7IHMyID0gQjEyMDA7IGJyZWFr OyAvKiA4ODggPSA3NS8xMjAwIHNwbGl0IHNwZWVkICovCisjZW5kaWYgLyogTUlOSVggKi8KKyNp ZmRlZiBCNzIwMAorICAgICAgY2FzZSA3MjA6IHMgPSBCNzIwMDsgYnJlYWs7CisjZW5kaWYgLyog QjcyMDAgKi8KKyAgICAgIGNhc2UgOTYwOiBzID0gQjk2MDA7IGJyZWFrOworI2lmZGVmIEIxNDQw MAorICAgICAgY2FzZSAxNDQwOiBzID0gQjE0NDAwOyBicmVhazsKKyNlbmRpZiAvKiBCMTQ0MDAg Ki8KKyNpZmRlZiBCMTkyMDAKKyAgICAgIGNhc2UgMTkyMDogcyA9IEIxOTIwMDsgYnJlYWs7Cisj ZWxzZQorI2lmZGVmIEVYVEEKKyAgICAgIGNhc2UgMTkyMDogcyA9IEVYVEE7IGJyZWFrOworI2Vu ZGlmIC8qIEVYVEEgKi8KKyNlbmRpZiAvKiBCMTkyMDAgKi8KKyNpZmRlZiBCMjg4MDAKKyAgICAg IGNhc2UgMjg4MDogcyA9IEIyODgwMDsgYnJlYWs7CisjZW5kaWYgLyogQjI4ODAwICovCisjaWZk ZWYgQjM4NDAwCisgICAgICBjYXNlIDM4NDA6IHMgPSBCMzg0MDA7CisjaWZkZWYgT0xJTlVYSElT UEVFRAorICAgICAgICBzcGRfZmxhZ3MgPSB+QVNZTkNfU1BEX01BU0s7CS8qIE5vbnplcm8sIGJ1 dCB6ZXJvIGZsYWdzICovCisjZW5kaWYgLyogT0xJTlVYSElTUEVFRCAqLworCWJyZWFrOworI2Vs c2UgLyogQjM4NDAwIG5vdCBkZWZpbmVkLi4uICovCisjaWZkZWYgRVhUQgorICAgICAgY2FzZSAz ODQwOiBzID0gRVhUQjsgYnJlYWs7CisjZW5kaWYgLyogRVhUQiAqLworI2VuZGlmIC8qIEIzODQw MCAqLworCisjaWZkZWYgSFBVWAorI2lmZGVmIF9CNTc2MDAKKyAgICAgIGNhc2UgNTc2MDogcyA9 IF9CNTc2MDA7IGJyZWFrOworI2VuZGlmIC8qIF9CNTc2MDAgKi8KKyNpZmRlZiBfQjExNTIwMAor ICAgICAgY2FzZSAxMTUyMDogcyA9IF9CMTE1MjAwOyBicmVhazsKKyNlbmRpZiAvKiBfQjExNTIw MCAqLworI2Vsc2UKKyNpZmRlZiBPTElOVVhISVNQRUVECisvKgorICBUaGlzIGJpdCBmcm9tIDxj YXJsb0BzZy50bi50dWRlbGZ0Lm5sPjoKKyAgIk9ubHkgbm90ZSB0byBtYWtlIGlzIG1heWJlIHRo aXM6IFdoZW4gdGhlIEFTWU5DX1NQRF9DVVNUIGZsYWdzIGFyZSBzZXQgdGhlbgorICBzZXR0aW5n IHRoZSBzcGVlZCB0byAzODQwMCB3aWxsIHNldCB0aGUgY3VzdG9tIHNwZWVkIChhbmQgdHRnc3Bk IHJldHVybnMKKyAgMzg0MDApLCBidXQgc3BlZWRzIDU3NjAwIGFuZCAxMTUyMDAgd29uJ3Qgd29y ayBhbnkgbW9yZSBiZWNhdXNlIEkgZGlkbid0CisgIHdhbnQgdG8gbWVzcyB1cCB0aGUgc3BlZWQg ZmxhZ3Mgd2hlbiBzb21lb25lIGlzIGRvaW5nIHNvcGhpc3RpY2F0ZWQgc3R1ZmYKKyAgbGlrZSBj dXN0b20gc3BlZWRzLi4uIgorKi8KKyAgICAgIGNhc2UgNTc2MDogcyA9IEIzODQwMDsgc3BkX2Zs YWdzID0gQVNZTkNfU1BEX0hJOyBicmVhazsKKyAgICAgIGNhc2UgMTE1MjA6IHMgPSBCMzg0MDA7 IHNwZF9mbGFncyA9IEFTWU5DX1NQRF9WSEk7IGJyZWFrOworI2Vsc2UKKyNpZmRlZiBCNTc2MDAK KyAgICAgIGNhc2UgNTc2MDogcyA9IEI1NzYwMDsgYnJlYWs7CisjZW5kaWYgLyogQjU3NjAwICov CisjaWZkZWYgQjc2ODAwCisgICAgICBjYXNlIDc2ODA6IHMgPSBCNzY4MDA7IGJyZWFrOworI2Vu ZGlmIC8qIEI3NjgwMCAqLworI2lmZGVmIEIxMTUyMDAKKyAgICAgIGNhc2UgMTE1MjA6IHMgPSBC MTE1MjAwOyBicmVhazsKKyNlbmRpZiAvKiBCMTE1MjAwICovCisjZW5kaWYgLyogT0xJTlVYSElT UEVFRCAqLworI2lmZGVmIEIxNTM2MDAKKyAgICAgIGNhc2UgMTUzNjA6IHMgPSBCMTUzNjAwOyBi cmVhazsKKyNlbmRpZiAvKiBCMTUzNjAwICovCisjaWZkZWYgQjIzMDQwMAorICAgICAgY2FzZSAy MzA0MDogcyA9IEIyMzA0MDA7IGJyZWFrOworI2VuZGlmIC8qIEIyMzA0MDAgKi8KKyNpZmRlZiBC MzA3MjAwCisgICAgICBjYXNlIDMwNzIwOiBzID0gQjMwNzIwMDsgYnJlYWs7CisjZW5kaWYgLyog QjMwNzIwMCAqLworI2lmZGVmIEI0NjA4MDAKKyAgICAgIGNhc2UgNDYwODA6IHMgPSBCNDYwODAw OyBicmVhazsKKyNlbmRpZiAvKiA0NjA4MDAgKi8KKyNpZmRlZiBCOTIxNjAwCisgICAgICBjYXNl IDkyMTYwOiBzID0gQjkyMTYwMDsgYnJlYWs7CisjZW5kaWYgLyogQjkyMTYwMCAqLworI2VuZGlm IC8qIEhQVVggKi8KKyAgICAgIGRlZmF1bHQ6CisJb2sgPSAwOwkJCQkvKiBHb29kIHNwZWVkIG5v dCBmb3VuZCwgc28gbm90IG9rICovCisJYnJlYWs7CisgICAgfQorICAgIGRlYnVnKEYxMDEsInR0 c3NwZCBvayIsIiIsb2spOworICAgIGRlYnVnKEYxMDEsInR0c3NwZCBzIiwiIixzKTsKKworICAg IGlmICghb2spIHsKKwlkZWJ1ZyhGMTAwLCJ0dHNzcGQgZmFpbHMiLCIiLDApOworCXJldHVybigt MSk7CisgICAgfSBlbHNlIHsKKwlpZiAoIXMyKSBzMiA9IHM7CQkvKiBTZXQgaW5wdXQgc3BlZWQg Ki8KKyNpZmRlZiBQbGFuOQorCWlmIChwOXR0c3NwZChjcHMpIDwgMCkKKwkgIHJldHVybigtMSk7 CisjZWxzZQorI2lmZGVmIEJTRDQ0T1JQT1NJWAorCXggPSB0Y2dldGF0dHIodHR5ZmQsJnR0Y3Vy KTsJLyogR2V0IGN1cnJlbnQgc3BlZWQgKi8KKwlkZWJ1ZyhGMTAxLCJ0dHNzcGQgdGNnZXRhdHRy IiwiIix4KTsKKwlpZiAoeCA8IDApCisJICByZXR1cm4oLTEpOworI2lmZGVmIE9MSU5VWEhJU1BF RUQKKwlkZWJ1ZyhGMTAxLCJ0dHNzcGQgc3BkX2ZsYWdzIiwiIixzcGRfZmxhZ3MpOworCWlmIChz cGRfZmxhZ3MgJiYgc3BkX2ZsYWdzICE9IEFTWU5DX1NQRF9DVVNUKSB7CisJICAgIGlmIChpb2N0 bCh0dHlmZCwgVElPQ0dTRVJJQUwsICZzZXJpbmZvKSA8IDApIHsKKwkJZGVidWcoRjEwMCwidHRz c3BkOiBUSU9DR1NFUklBTCBmYWlsZWQiLCIiLDApOworCQlyZXR1cm4oLTEpOworCSAgICB9IGVs c2UgZGVidWcoRjEwMCwidHRzc3BkOiBUSU9DR1NFUklBTCBvayIsIiIsMCk7CisJICAgIHNlcmlu Zm8uZmxhZ3MgJj0gfkFTWU5DX1NQRF9NQVNLOworCSAgICBzZXJpbmZvLmZsYWdzIHw9IChzcGRf ZmxhZ3MgJiBBU1lOQ19TUERfTUFTSyk7CisJICAgIGlmIChpb2N0bCh0dHlmZCwgVElPQ1NTRVJJ QUwsICZzZXJpbmZvKSA8IDApCisJICAgICAgcmV0dXJuKC0xKTsKKwl9CisjZW5kaWYgLyogT0xJ TlVYSElTUEVFRCAqLworCWNmc2V0b3NwZWVkKCZ0dGN1cixzKTsKKwljZnNldGlzcGVlZCgmdHRj dXIsczIpOworCWNmc2V0b3NwZWVkKCZ0dHJhdyxzKTsKKwljZnNldGlzcGVlZCgmdHRyYXcsczIp OworCWNmc2V0b3NwZWVkKCZ0dHR2dCxzKTsKKwljZnNldGlzcGVlZCgmdHR0dnQsczIpOworCWNm c2V0b3NwZWVkKCZ0dG9sZCxzKTsKKwljZnNldGlzcGVlZCgmdHRvbGQsczIpOworCXggPSB0Y3Nl dGF0dHIodHR5ZmQsVENTQURSQUlOLCZ0dGN1cik7CisJZGVidWcoRjEwMSwidHRzc3BkIHRjc2V0 YXR0ciIsIiIseCk7CisJaWYgKHggPCAwKSByZXR1cm4oLTEpOworI2Vsc2UKKyNpZmRlZiBBVFRT VgorCWlmIChjcHMgPT0gODg4KSByZXR1cm4oLTEpOwkvKiBObyBzcGxpdCBzcGVlZHMsIHNvcnJ5 LiAqLworCXggPSBpb2N0bCh0dHlmZCxUQ0dFVEEsJnR0Y3VyKTsKKwlkZWJ1ZyhGMTAxLCJ0dHNz cGQgVENHRVRBIGlvY3RsIiwiIix4KTsKKwlpZiAoeCA8IDApIHJldHVybigtMSk7CisJdHRjdXIu Y19jZmxhZyAmPSB+Q0JBVUQ7CisJdHRjdXIuY19jZmxhZyB8PSBzOworCXR0dHZ0LmNfY2ZsYWcg Jj0gfkNCQVVEOworCXR0dHZ0LmNfY2ZsYWcgfD0gczsKKwl0dHJhdy5jX2NmbGFnICY9IH5DQkFV RDsKKwl0dHJhdy5jX2NmbGFnIHw9IHM7CisJdHRvbGQuY19jZmxhZyAmPSB+Q0JBVUQ7CisJdHRv bGQuY19jZmxhZyB8PSBzOworCXggPSBpb2N0bCh0dHlmZCxUQ1NFVEFXLCZ0dGN1cik7CisJZGVi dWcoRjEwMSwidHRzc3BkIFRDU0VUQVcgaW9jdGwiLCIiLHgpOworCWlmICh4IDwgMCkgcmV0dXJu KC0xKTsKKyNlbHNlCisjaWZkZWYgQkVMTFYxMAorCXggPSBpb2N0bCh0dHlmZCxUSU9DR0RFViwm dGRjdXIpOworCWRlYnVnKEYxMDEsInR0c3NwZCBUSU9DR0RFViBpb2N0bCIsIiIseCk7CisJaWYg KHggPCAwKSByZXR1cm4oLTEpOworCXRkY3VyLmlzcGVlZCA9IHMyOworCXRkY3VyLm9zcGVlZCA9 IHM7CisJZXJybm8gPSAwOworCW9rID0gaW9jdGwodHR5ZmQsVElPQ1NERVYsJnRkY3VyKTsKKwlk ZWJ1ZyhGMTAxLCJ0dHNzcGQgQkVMTFYxMCBpb2N0bCIsIiIsb2spOworCWlmIChvayA8IDApIHsK KwkgICAgcGVycm9yKHR0bm1zdik7CisJICAgIGRlYnVnKEYxMDEsInR0c3NwZCBCRUxMVjEwIGVy cm5vIiwiIixvayk7CisJICAgIHJldHVybigtMSk7CisJfQorI2Vsc2UKKwl4ID0gZ3R0eSh0dHlm ZCwmdHRjdXIpOworCWRlYnVnKEYxMDEsInR0c3NwZCBndHR5IiwiIix4KTsKKwlpZiAoeCA8IDAp IHJldHVybigtMSk7CisJdHRjdXIuc2dfb3NwZWVkID0gczsgdHRjdXIuc2dfaXNwZWVkID0gczI7 CisJdHR0dnQuc2dfb3NwZWVkID0gczsgdHR0dnQuc2dfaXNwZWVkID0gczI7CisJdHRyYXcuc2df b3NwZWVkID0gczsgdHRyYXcuc2dfaXNwZWVkID0gczI7CisJdHRvbGQuc2dfb3NwZWVkID0gczsg dHRvbGQuc2dfaXNwZWVkID0gczI7CisJeCA9IHN0dHkodHR5ZmQsJnR0Y3VyKTsKKwlkZWJ1ZyhG MTAxLCJ0dHNzcGQgc3R0eSIsIiIseCk7CisJaWYgKHggPCAwKSByZXR1cm4oLTEpOworI2VuZGlm IC8qIEJFTExWMTAgKi8KKyNlbmRpZiAvKiBBVFRTViAqLworI2VuZGlmIC8qIEJTRDQ0T1JQT1NJ WCAqLworI2VuZGlmIC8qIFBsYW45ICovCisgICAgfQorICAgIHJldHVybigxKTsJCQkJLyogUmV0 dXJuIDEgPSBzdWNjZXNzLiAqLworI2VuZGlmIC8qIFVTRVRDU0VUU1BFRUQgKi8KK30KKworI2Vu ZGlmIC8qIE5PTE9DQUwgKi8KKworLyogQyBPIE4gRyBTIFAgRCAgLSAgR2V0IHNwZWVkIG9mIGNv bnNvbGUgdGVybWluYWwgICovCisKK2xvbmcKK2NvbmdzcGQoKSB7CisvKgorICBUaGlzIGlzIGEg ZGlzZ3VzdGluZyBoYWNrLiAgVGhlIHJpZ2h0IHdheSB0byBkbyB0aGlzIHdvdWxkIGJlIHRvIHBh c3MgYW4KKyAgYXJndW1lbnQgdG8gdHRnc3BkKCksIGJ1dCB0aGVuIHdlJ2QgbmVlZCB0byBjaGFu Z2UgdGhlIEtlcm1pdCBBUEkgYW5kCisgIGFsbCBvZiB0aGUgY2s/dGlvLmMgbW9kdWxlcy4gIChD dXJyZW50bHkgdXNlZCBvbmx5IGZvciBybG9naW4uKQorKi8KKyAgICBpbnQgdDE7CisgICAgbG9u ZyBzcGQ7CisjaWZkZWYgTkVUQ09OTgorICAgIGludCB0MiA9IG5ldGNvbm47CisgICAgbmV0Y29u biA9IDA7CisjZW5kaWYgLyogTkVUQ09OTiAqLworICAgIHQxID0gdHR5ZmQ7CisgICAgdHR5ZmQg PSAtMTsKKyAgICBzcGQgPSB0dGdzcGQoKTsKKyAgICBkZWJ1ZyhGMTAxLCJjb25nc3BkIiwiIixz cGQpOworI2lmZGVmIE5FVENPTk4KKyAgICBuZXRjb25uID0gdDI7CisjZW5kaWYgLyogTkVUQ09O TiAqLworICAgIHR0eWZkID0gdDE7CisgICAgcmV0dXJuKHNwZCk7Cit9CisKKy8qICBUIFQgUyBQ IEQgTCBJIFMgVCAgLS0gR2V0IGxpc3Qgb2Ygc2VyaWFsIHNwZWVkcyBhbGxvd2VkIG9uIHRoaXMg cGxhdGZvcm0gKi8KKworI2RlZmluZSBOU1BETElTVCA2NAorc3RhdGljIGxvbmcgc3BkbGlzdFtO U1BETElTVF07CisvKgorICBBcyB3cml0dGVuLCB0aGlzIHBpY2tzIHVwIHRoZSBzcGVlZHMga25v d24gYXQgY29tcGlsZSB0aW1lLCBhbmQgdGh1cworICBhcHBseSB0byB0aGUgc3lzdGVtIHdoZXJl IEMtS2VybWl0IHdhcyBidWlsdCwgcmF0aGVyIHRoYW4gdG8gdGhlIG9uZSB3aGVyZQorICBpdCBp cyBydW5uaW5nLiAgU3VnZ2VzdGlvbnMgZm9yIGltcHJvdmVtZW50IGFyZSBhbHdheXMgd2VsY29t ZS4KKyovCitsb25nICoKK3R0c3BkbGlzdCgpIHsKKyAgICBpbnQgaTsKKyAgICBmb3IgKGkgPSAw OyBpIDwgTlNQRExJU1Q7IGkrKykJLyogSW5pdGlhbGl6ZSB0aGUgbGlzdCAqLworICAgICAgc3Bk bGlzdFtpXSA9IC0xTDsKKyAgICBpID0gMTsKKworI2lmZGVmIFVTRVRDU0VUU1BFRUQJCQkvKiBO byB3YXkgdG8gZmluZCBvdXQgd2hhdCdzIGxlZ2FsICovCisgICAgZGVidWcoRjEwMCwidHRzcGRs aXN0IFVTRVRDU0VUU1BFRUQiLCIiLDApOworICAgIHNwZGxpc3RbaSsrXSA9IDUwTDsKKyNpZm5k ZWYgVVc3CisgICAgc3BkbGlzdFtpKytdID0gNzVMOworI2VuZGlmIC8qIFVXNyAqLworICAgIHNw ZGxpc3RbaSsrXSA9IDExMEw7CisjaWZuZGVmIFVXNworICAgIHNwZGxpc3RbaSsrXSA9IDEzNEw7 CisjZW5kaWYgLyogVVc3ICovCisgICAgc3BkbGlzdFtpKytdID0gMTUwTDsKKyAgICBzcGRsaXN0 W2krK10gPSAyMDBMOworICAgIHNwZGxpc3RbaSsrXSA9IDMwMEw7CisgICAgc3BkbGlzdFtpKytd ID0gNjAwTDsKKyAgICBzcGRsaXN0W2krK10gPSAxMjAwTDsKKyAgICBzcGRsaXN0W2krK10gPSAx ODAwTDsKKyAgICBzcGRsaXN0W2krK10gPSAyNDAwTDsKKyAgICBzcGRsaXN0W2krK10gPSA0ODAw TDsKKyAgICBzcGRsaXN0W2krK10gPSA4ODgwTDsKKyAgICBzcGRsaXN0W2krK10gPSA5NjAwTDsK KyAgICBzcGRsaXN0W2krK10gPSAxNDQwMEw7CisgICAgc3BkbGlzdFtpKytdID0gMTkyMDBMOwor ICAgIHNwZGxpc3RbaSsrXSA9IDI4ODAwTDsKKyNpZm5kZWYgVVc3CisgICAgc3BkbGlzdFtpKytd ID0gMzM2MDBMOworI2VuZGlmIC8qIFVXNyAqLworICAgIHNwZGxpc3RbaSsrXSA9IDM4NDAwTDsK KyAgICBzcGRsaXN0W2krK10gPSA1NzYwMEw7CisgICAgc3BkbGlzdFtpKytdID0gNzY4MDBMOwor ICAgIHNwZGxpc3RbaSsrXSA9IDExNTIwMEw7CisjaWZuZGVmIFVXNworICAgIHNwZGxpc3RbaSsr XSA9IDE1MzYwMEw7CisgICAgc3BkbGlzdFtpKytdID0gMjMwNDAwTDsKKyAgICBzcGRsaXN0W2kr K10gPSAzMDcyMDBMOworICAgIHNwZGxpc3RbaSsrXSA9IDQ2MDgwMEw7CisgICAgc3BkbGlzdFtp KytdID0gOTIxNjAwTDsKKyNlbmRpZiAvKiBVVzcgKi8KKworI2Vsc2UgIC8qIFVTRVRDU0VUU1BF RUQgKi8KKworICAgIGRlYnVnKEYxMDAsInR0c3BkbGlzdCBubyBVU0VUQ1NFVFNQRUVEIiwiIiww KTsKKworI2lmZGVmIEI1MAorICAgIGRlYnVnKEYxMDEsInR0c3BkbGlzdCBCNTAiLCIiLEI1MCk7 CisgICAgc3BkbGlzdFtpKytdID0gNTBMOworI2VuZGlmIC8qIEI1MCAqLworI2lmZGVmIEI3NQor ICAgIGRlYnVnKEYxMDEsInR0c3BkbGlzdCBCNzUiLCIiLEI3NSk7CisgICAgc3BkbGlzdFtpKytd ID0gNzVMOworI2VuZGlmIC8qIEI3NSAqLworI2lmZGVmIEIxMTAKKyAgICBkZWJ1ZyhGMTAxLCJ0 dHNwZGxpc3QgQjExMCIsIiIsQjExMCk7CisgICAgc3BkbGlzdFtpKytdID0gMTEwTDsKKyNlbmRp ZiAvKiBCMTEwICovCisjaWZkZWYgQjEzNAorICAgIGRlYnVnKEYxMDEsInR0c3BkbGlzdCBCMTM0 IiwiIixCMTM0KTsKKyAgICBzcGRsaXN0W2krK10gPSAxMzRMOworI2VuZGlmIC8qIEIxMzQgKi8K KyNpZmRlZiBCMTUwCisgICAgZGVidWcoRjEwMSwidHRzcGRsaXN0IEIxNTAiLCIiLEIxNTApOwor ICAgIHNwZGxpc3RbaSsrXSA9IDE1MEw7CisjZW5kaWYgLyogQjE1MCAqLworI2lmZGVmIEIyMDAK KyAgICBkZWJ1ZyhGMTAxLCJ0dHNwZGxpc3QgQjIwMCIsIiIsQjIwMCk7CisgICAgc3BkbGlzdFtp KytdID0gMjAwTDsKKyNlbmRpZiAvKiBCMjAwICovCisjaWZkZWYgQjMwMAorICAgIGRlYnVnKEYx MDEsInR0c3BkbGlzdCBCMzAwIiwiIixCMzAwKTsKKyAgICBzcGRsaXN0W2krK10gPSAzMDBMOwor I2VuZGlmIC8qIEIzMDAgKi8KKyNpZmRlZiBCNjAwCisgICAgZGVidWcoRjEwMSwidHRzcGRsaXN0 IEI2MDAiLCIiLEI2MDApOworICAgIHNwZGxpc3RbaSsrXSA9IDYwMEw7CisjZW5kaWYgLyogQjYw MCAqLworI2lmZGVmIEIxMjAwCisgICAgZGVidWcoRjEwMSwidHRzcGRsaXN0IEIxMjAwIiwiIixC MTIwMCk7CisgICAgc3BkbGlzdFtpKytdID0gMTIwMEw7CisjZW5kaWYgLyogQjEyMDAgKi8KKyNp ZmRlZiBCMTgwMAorICAgIGRlYnVnKEYxMDEsInR0c3BkbGlzdCBCMTgwMCIsIiIsQjE4MDApOwor ICAgIHNwZGxpc3RbaSsrXSA9IDE4MDBMOworI2VuZGlmIC8qIEIxODAwICovCisjaWZkZWYgQjI0 MDAKKyAgICBkZWJ1ZyhGMTAxLCJ0dHNwZGxpc3QgQjI0MDAiLCIiLEIyNDAwKTsKKyAgICBzcGRs aXN0W2krK10gPSAyNDAwTDsKKyNlbmRpZiAvKiBCMjQwMCAqLworI2lmZGVmIEI0ODAwCisgICAg ZGVidWcoRjEwMSwidHRzcGRsaXN0IEI0ODAwIiwiIixCNDgwMCk7CisgICAgc3BkbGlzdFtpKytd ID0gNDgwMEw7CisjZW5kaWYgLyogQjQ4MDAgKi8KKyNpZmRlZiBCOTYwMAorICAgIGRlYnVnKEYx MDEsInR0c3BkbGlzdCBCOTYwMCIsIiIsQjk2MDApOworICAgIHNwZGxpc3RbaSsrXSA9IDk2MDBM OworI2VuZGlmIC8qIEI5NjAwICovCisjaWZkZWYgQjE0NDAwCisgICAgZGVidWcoRjEwMSwidHRz cGRsaXN0IEIxNDQwMCIsIiIsQjE0NDAwKTsKKyAgICBzcGRsaXN0W2krK10gPSAxNDQwMEw7Cisj ZW5kaWYgLyogQjE0NDAwICovCisjaWZkZWYgQjE5MjAwCisgICAgZGVidWcoRjEwMSwidHRzcGRs aXN0IEIxOTIwMCIsIiIsQjE5MjAwKTsKKyAgICBzcGRsaXN0W2krK10gPSAxOTIwMEw7CisjZWxz ZQorI2lmZGVmIEVYVEEKKyAgICBkZWJ1ZyhGMTAxLCJ0dHNwZGxpc3QgRVhUQSIsIiIsRVhUQSk7 CisgICAgc3BkbGlzdFtpKytdID0gMTkyMDBMOworI2VuZGlmIC8qIEVYVEEgKi8KKyNlbmRpZiAv KiBCMTkyMDAgKi8KKyNpZmRlZiBCMjg4MDAKKyAgICBkZWJ1ZyhGMTAxLCJ0dHNwZGxpc3QgQjI4 ODAwIiwiIixCMjg4MDApOworICAgIHNwZGxpc3RbaSsrXSA9IDI4ODAwTDsKKyNlbmRpZiAvKiBC Mjg4MDAgKi8KKyNpZmRlZiBCMzM2MDAKKyAgICBkZWJ1ZyhGMTAxLCJ0dHNwZGxpc3QgQjMzNjAw IiwiIixCMzM2MDApOworICAgIHNwZGxpc3RbaSsrXSA9IDMzNjAwTDsKKyNlbmRpZiAvKiBCMzM2 MDAgKi8KKyNpZmRlZiBCMzg0MDAKKyAgICBkZWJ1ZyhGMTAxLCJ0dHNwZGxpc3QgQjM4NDAwIiwi IixCMzg0MDApOworICAgIHNwZGxpc3RbaSsrXSA9IDM4NDAwTDsKKyNlbHNlCisjaWZkZWYgRVhU QgorICAgIGRlYnVnKEYxMDEsInR0c3BkbGlzdCBFWFRCIiwiIixFWFRCKTsKKyAgICBzcGRsaXN0 W2krK10gPSAzODQwMEw7CisjZW5kaWYgLyogRVhUQiAqLworI2VuZGlmIC8qIEIzODQwMCAqLwor I2lmZGVmIF9CNTc2MDAKKyAgICBkZWJ1ZyhGMTAxLCJ0dHNwZGxpc3QgX0I1NzYwMCIsIiIsX0I1 NzYwMCk7CisgICAgc3BkbGlzdFtpKytdID0gNTc2MDBMOworI2Vsc2UKKyNpZmRlZiBCNTc2MDAK KyAgICBkZWJ1ZyhGMTAxLCJ0dHNwZGxpc3QgQjU3NjAwIiwiIixCNTc2MDApOworICAgIHNwZGxp c3RbaSsrXSA9IDU3NjAwTDsKKyNlbmRpZiAvKiBCNTc2MDAgKi8KKyNlbmRpZiAvKiBfQjU3NjAw ICovCisjaWZkZWYgQjc2ODAwCisgICAgZGVidWcoRjEwMSwidHRzcGRsaXN0IEI3NjgwMCIsIiIs Qjc2ODAwKTsKKyAgICBzcGRsaXN0W2krK10gPSA3NjgwMEw7CisjZW5kaWYgLyogQjc2ODAwICov CisjaWZkZWYgX0IxMTUyMDAKKyAgICBkZWJ1ZyhGMTAxLCJ0dHNwZGxpc3QgX0IxMTUyMDAiLCIi LF9CMTE1MjAwKTsKKyAgICBzcGRsaXN0W2krK10gPSAxMTUyMDBMOworI2Vsc2UKKyNpZmRlZiBC MTE1MjAwCisgICAgZGVidWcoRjEwMSwidHRzcGRsaXN0IEIxMTUyMDAiLCIiLEIxMTUyMDApOwor ICAgIHNwZGxpc3RbaSsrXSA9IDExNTIwMEw7CisjZW5kaWYgLyogQjExNTIwMCAqLworI2VuZGlm IC8qIF9CMTE1MjAwICovCisjaWZkZWYgQjE1MzYwMAorICAgIGRlYnVnKEYxMDEsInR0c3BkbGlz dCBCMTUzNjAwIiwiIixCMTUzNjAwKTsKKyAgICBzcGRsaXN0W2krK10gPSAxNTM2MDBMOworI2Vu ZGlmIC8qIEIxNTM2MDAgKi8KKyNpZmRlZiBCMjMwNDAwCisgICAgZGVidWcoRjEwMSwidHRzcGRs aXN0IEIyMzA0MDAiLCIiLEIyMzA0MDApOworICAgIHNwZGxpc3RbaSsrXSA9IDIzMDQwMEw7Cisj ZW5kaWYgLyogQjIzMDQwMCAqLworI2lmZGVmIEIzMDcyMDAKKyAgICBkZWJ1ZyhGMTAxLCJ0dHNw ZGxpc3QgQjMwNzIwMCIsIiIsQjMwNzIwMCk7CisgICAgc3BkbGlzdFtpKytdID0gMzA3MjAwTDsK KyNlbmRpZiAvKiBCMzA3MjAwICovCisjaWZkZWYgQjQ2MDgwMAorICAgIGRlYnVnKEYxMDEsInR0 c3BkbGlzdCBCNDYwODAwIiwiIixCNDYwODAwKTsKKyAgICBzcGRsaXN0W2krK10gPSA0NjA4MDBM OworI2VuZGlmIC8qIEI0NjA4MDAgKi8KKyNpZmRlZiBCOTIxNjAwCisgICAgZGVidWcoRjEwMSwi dHRzcGRsaXN0IEI5MjE2MDAiLCIiLEI5MjE2MDApOworICAgIHNwZGxpc3RbaSsrXSA9IDkyMTYw MEw7CisjZW5kaWYgLyogQjkyMTYwMCAqLworI2VuZGlmIC8qIFVTRVRDU0VUU1BFRUQgKi8KKyAg ICBzcGRsaXN0WzBdID0gaSAtIDE7CQkJLyogUmV0dXJuIGNvdW50IGluIDB0aCBlbGVtZW50ICov CisgICAgZGVidWcoRjExMSwidHRzcGRsaXN0IHNwZGxpc3QiLCIwIixzcGRsaXN0WzBdKTsKKyAg ICByZXR1cm4oKGxvbmcgKilzcGRsaXN0KTsKK30KKworLyogVCBUIEcgUyBQIEQgIC0gIEdldCBz cGVlZCBvZiBjdXJyZW50bHkgc2VsZWN0ZWQgdHR5IGxpbmUgICovCisKKy8qCisgIFVucmVsaWFi bGUuICBBZnRlciBTRVQgTElORSwgaXQgcmV0dXJucyBhbiBhY3R1YWwgc3BlZWQsIGJ1dCBub3Qg bmVjZXNzYXJpbHkKKyAgdGhlIHJlYWwgc3BlZWQuICBPbiBzb21lIHN5c3RlbXMsIGl0IHJldHVy bnMgdGhlIGxpbmUncyBub21pbmFsIHNwZWVkLCBmcm9tCisgIC9ldGMvdHR5dGFiLiAgRXZlbiBp ZiB5b3UgU0VUIFNQRUVEIHRvIHNvbWV0aGluZyBlbHNlLCB0aGlzIGZ1bmN0aW9uIG1pZ2h0Cisg IG5vdCBub3RpY2UuCisqLworbG9uZwordHRnc3BkKCkgewkJCQkvKiBHZXQgY3VycmVudCBzZXJp YWwgZGV2aWNlIHNwZWVkICovCisjaWZkZWYgTk9MT0NBTAorICAgIHJldHVybigtMUwpOworI2Vs c2UKKyNpZmRlZiBQT1NJWAorICAgIHNwZWVkX3QJCQkJLyogU2hvdWxkIGJlIHVuc2lnbmVkICov CisjZWxzZQorICAgIGludAkJCQkJLyogSXNuJ3QgdW5zaWduZWQgKi8KKyNlbmRpZiAvKiBQT1NJ WCAqLworICAgICAgczsKKyAgICBpbnQgeDsKKyAgICBsb25nIHNzOworI2lmZGVmIE9MSU5VWEhJ U1BFRUQKKyAgICB1bnNpZ25lZCBpbnQgc3BkX2ZsYWdzID0gMDsKKyAgICBzdHJ1Y3Qgc2VyaWFs X3N0cnVjdCBzZXJpbmZvOworI2VuZGlmIC8qIE9MSU5VWEhJU1BFRUQgKi8KKworI2lmZGVmIE5F VENPTk4KKyAgICBpZiAobmV0Y29ubikgeworI2lmZGVmIFROX0NPTVBPUlQKKwlpZiAoaXN0bmNv bXBvcnQoKSkKKwkgIHJldHVybih0bmNfZ2V0X2JhdWQoKSk7CisJZWxzZQorI2VuZGlmIC8qIFRO X0NPTVBPUlQgKi8KKwkgIHJldHVybigtMSk7CQkJLyogLTEgaWYgbmV0d29yayBjb25uZWN0aW9u ICovCisgICAgfQorI2VuZGlmIC8qIE5FVENPTk4gKi8KKyNpZmRlZiBORVRDTUQKKyAgICBpZiAo dHRwaXBlKSByZXR1cm4oLTEpOworI2VuZGlmIC8qIE5FVENNRCAqLworI2lmZGVmIE5FVFBUWQor ICAgIGlmICh0dHB0eSkgcmV0dXJuKC0xKTsKKyNlbmRpZiAvKiBORVRQVFkgKi8KKworICAgIGRl YnVnKEYxMDEsInR0Z3NwZCB0dHlmZCIsIiIsdHR5ZmQpOworCisjaWZkZWYgVVNFVENTRVRTUEVF RAorCisgICAgeCA9IHRjZ2V0YXR0cih0dHlmZCwmdHRjdXIpOwkvKiBHZXQgY3VycmVudCBzcGVl ZCAqLworICAgIGRlYnVnKEYxMDEsInR0Z3NwZCB0Y2dldGF0dHIiLCIiLHgpOworICAgIGlmICh4 IDwgMCkKKyAgICAgIHJldHVybigtMSk7CisgICAgZXJybm8gPSAwOworICAgIHMgPSB0Y2dldHNw ZWVkKFRDU19BTEwsICZ0dGN1cik7CisgICAgZGVidWcoRjEwMSwidHRzc3BkIFRDR0VUU1BFRUQg c3BlZWQiLCIiLHMpOworICAgIGlmIChzID09IDApIHsKKwlsb25nIHMxLCBzMjsKKwlzMSA9IHRj Z2V0c3BlZWQoVENTX0lOLCAmdHRjdXIpOworCXMyID0gdGNnZXRzcGVlZChUQ1NfT1VULCAmdHRj dXIpOworCWlmIChzMSA9PSAxMjAwTCAmJiBzMiA9PSA3NUwpCisJICByZXR1cm4oODg4MEwpOwor ICAgIH0KKyNpZmRlZiBERUJVRworICAgIGlmIChlcnJubyAmIGRlYmxvZykgeworCWRlYnVnKEYx MDEsInR0c3NwZCBUQ0dFVFNQRUVEIGVycm5vIiwiIixlcnJubyk7CisgICAgfQorI2VuZGlmIC8q IERFQlVHICovCisgICAgcmV0dXJuKHMpOworCisjZWxzZSAgLyogTm90IFVTRVRDU0VUU1BFRUQg Ki8KKworI2lmZGVmIFBsYW45CisgICAgaWYgKHR0eWZkIDwgMCkKKyAgICAgIHNzID0gLTE7Cisg ICAgZWxzZQorICAgICAgc3MgPSB0dHlsYXN0c3BlZWQ7CisjZWxzZQorI2lmZGVmIE9MSU5VWEhJ U1BFRUQKKyAgICBkZWJ1ZyhGMTAwLCJ0dGdzcGQgTGludXggT0xJTlVYSElTUEVFRCIsIiIsMCk7 CisjZW5kaWYgLyogT0xJTlVYSElTUEVFRCAqLworCisgICAgaWYgKHR0eWZkIDwgMCkgeworI2lm ZGVmIEJTRDQ0T1JQT1NJWAorCXMgPSBjZmdldG9zcGVlZCgmY2NvbGQpOworCWRlYnVnKEYxMDEs InR0Z3NwZCBjZmdldG9zcGVlZCAxIFBPU0lYIiwiIixzKTsKKyNlbHNlCisjaWZkZWYgQVRUU1YK KwlzID0gY2NvbGQuY19jZmxhZyAmIENCQVVEOworCWRlYnVnKEYxMDEsInR0Z3NwZCBjX2NmbGFn IENCQVVEIDEgQVRUU1YiLCIiLHMpOworI2Vsc2UKKwlzID0gY2NvbGQuc2dfb3NwZWVkOwkJLyog KG9idGFpbmVkIGJ5IGNvbmdtKCkpICovCisJZGVidWcoRjEwMSwidHRnc3BkIHNnX29zcGVlZCAx IiwiIixzKTsKKyNlbmRpZiAvKiBBVFRTViAqLworI2VuZGlmIC8qIEJTRDQ0UE9TSVggKi8KKwor ICAgIH0gZWxzZSB7CisjaWZkZWYgQlNENDRPUlBPU0lYCisJaWYgKHRjZ2V0YXR0cih0dHlmZCwm dHRjdXIpIDwgMCkgcmV0dXJuKC0xKTsKKwlzID0gY2ZnZXRvc3BlZWQoJnR0Y3VyKTsKKwlkZWJ1 ZyhGMTAxLCJ0dGdzcGQgY2ZnZXRvc3BlZWQgMiBCU0RPUlBPU0lYIiwiIixzKTsKKyNpZmRlZiBP TElOVVhISVNQRUVECisJaWYgKGlvY3RsKHR0eWZkLFRJT0NHU0VSSUFMLCZzZXJpbmZvKSA+IC0x KQorCSAgc3BkX2ZsYWdzID0gc2VyaW5mby5mbGFncyAmIEFTWU5DX1NQRF9NQVNLOworCWRlYnVn KEYxMDEsInR0Z3NwZCBzcGRfZmxhZ3MiLCIiLHNwZF9mbGFncyk7CisjZW5kaWYgLyogT0xJTlVY SElTUEVFRCAqLworI2Vsc2UKKyNpZmRlZiBBVFRTVgorCXggPSBpb2N0bCh0dHlmZCxUQ0dFVEEs JnR0Y3VyKTsKKwlkZWJ1ZyhGMTAxLCJ0dGdzcGQgaW9jdGwgMiBBVFRTViB4IiwiIix4KTsKKwlk ZWJ1ZyhGMTAxLCJ0dGdzcGQgaW9jdGwgMiBBVFRTViBlcnJubyIsIiIsZXJybm8pOworCWlmICh4 IDwgMCkgcmV0dXJuKC0xKTsKKwlzID0gdHRjdXIuY19jZmxhZyAmIENCQVVEOworCWRlYnVnKEYx MDEsInR0Z3NwZCBpb2N0bCAyIEFUVFNWIHNwZWVkIiwiIixzKTsKKyNlbHNlCisjaWZkZWYgQkVM TFYxMAorCXggPSBpb2N0bCh0dHlmZCxUSU9DR0RFViwmdGRjdXIpOworCWRlYnVnKEYxMDEsInR0 Z3NwZCBpb2N0bCAyIEJFTExWMTAgeCIsIiIseCk7CisJaWYgKHggPCAwKSByZXR1cm4oLTEpOwor CXMgPSB0ZGN1ci5vc3BlZWQ7CisJZGVidWcoRjEwMSwidHRnc3BkIGlvY3RsIDIgQkVMTFYxMCBz cGVlZCIsIiIscyk7CisjZWxzZQorCXggPSBndHR5KHR0eWZkLCZ0dGN1cik7CisJZGVidWcoRjEw MSwidHRnc3BkIGd0dHkgMiB4IiwiIix4KTsKKwlkZWJ1ZyhGMTAxLCJ0dGdzcGQgZ3R0eSAyIGVy cm5vIiwiIixlcnJubyk7CisJaWYgKHggPCAwKSByZXR1cm4oLTEpOworCXMgPSB0dGN1ci5zZ19v c3BlZWQ7CisJZGVidWcoRjEwMSwidHRnc3BkIGd0dHkgMiBzcGVlZCIsIiIscyk7CisjZW5kaWYg LyogQkVMTFYxMCAqLworI2VuZGlmIC8qIEFUVFNWICovCisjZW5kaWYgLyogQlNENDRPUlBPU0lY ICovCisgICAgfQorICAgIGRlYnVnKEYxMDEsInR0Z3NwZCBjb2RlIiwiIixzKTsKKyNpZmRlZiBP TElOVVhISVNQRUVECisgICAgZGVidWcoRjEwMSwidHRnc3BkIHNwZF9mbGFncyIsIiIsc3BkX2Zs YWdzKTsKKyNlbmRpZiAvKiBPTElOVVhISVNQRUVEICovCisgICAgc3dpdGNoIChzKSB7CisjaWZk ZWYgQjAKKyAgICAgIGNhc2UgQjA6ICAgIHNzID0gMEw7IGJyZWFrOworI2VuZGlmIC8qIEIwICov CisKKyNpZm5kZWYgTUlOSVgKKy8qCisgTUlOSVggZGVmaW5lcyB0aGUgQnh4IHN5bWJvbHMgdG8g YmUgYnBzLzEwMCwgc28gQjUwPT1CNzUsIEIxMTA9PUIxMzQ9PUIxNTAsCisgZXRjLCBtYWtpbmcg Zm9yIG1hbnkgImR1cGxpY2F0ZSBjYXNlIGluIHN3aXRjaCIgZXJyb3JzLCB3aGljaCBhcmUgZmF0 YWwuCisqLworI2lmZGVmIEI1MAorICAgICAgY2FzZSBCNTA6ICAgc3MgPSA1MEw7IGJyZWFrOwor I2VuZGlmIC8qIEI1MCAqLworI2lmZGVmIEI3NQorICAgICAgY2FzZSBCNzU6ICAgc3MgPSA3NUw7 IGJyZWFrOworI2VuZGlmIC8qIEI3NSAqLworI2VuZGlmIC8qIE1JTklYICovCisKKyNpZmRlZiBC MTEwCisgICAgICBjYXNlIEIxMTA6ICBzcyA9IDExMEw7IGJyZWFrOworI2VuZGlmIC8qIEIxMTAg Ki8KKworI2lmbmRlZiBNSU5JWAorI2lmZGVmIEIxMzQKKyAgICAgIGNhc2UgQjEzNDogIHNzID0g MTM0TDsgYnJlYWs7CisjZW5kaWYgLyogQjEzNCAqLworI2lmZGVmIEIxNTAKKyAgICAgIGNhc2Ug QjE1MDogIHNzID0gMTUwTDsgYnJlYWs7CisjZW5kaWYgLyogQjE1MCAqLworI2VuZGlmIC8qIE1J TklYICovCisKKyNpZmRlZiBCMjAwCisgICAgICBjYXNlIEIyMDA6ICBzcyA9IDIwMEw7IGJyZWFr OworI2VuZGlmIC8qIEIyMDAgKi8KKworI2lmZGVmIEIzMDAKKyAgICAgIGNhc2UgQjMwMDogIHNz ID0gMzAwTDsgYnJlYWs7CisjZW5kaWYgLyogQjMwMCAqLworCisjaWZkZWYgQjYwMAorICAgICAg Y2FzZSBCNjAwOiAgc3MgPSA2MDBMOyBicmVhazsKKyNlbmRpZiAvKiBCNjAwICovCisKKyNpZmRl ZiBCMTIwMAorICAgICAgY2FzZSBCMTIwMDogc3MgPSAxMjAwTDsgYnJlYWs7CisjZW5kaWYgLyog QjEyMDAgKi8KKworI2lmZGVmIEIxODAwCisgICAgICBjYXNlIEIxODAwOiBzcyA9IDE4MDBMOyBi cmVhazsKKyNlbmRpZiAvKiBCMTgwMCAqLworCisjaWZkZWYgQjI0MDAKKyAgICAgIGNhc2UgQjI0 MDA6IHNzID0gMjQwMEw7IGJyZWFrOworI2VuZGlmIC8qIEIyNDAwICovCisKKyNpZmRlZiBCNDgw MAorICAgICAgY2FzZSBCNDgwMDogc3MgPSA0ODAwTDsgYnJlYWs7CisjZW5kaWYgLyogQjQ4MDAg Ki8KKworI2lmZGVmIEI3MjAwCisgICAgICBjYXNlIEI3MjAwOiBzcyA9IDcyMDBMOyBicmVhazsK KyNlbmRpZiAvKiBCNzIwMCAqLworCisjaWZkZWYgQjk2MDAKKyAgICAgIGNhc2UgQjk2MDA6IHNz ID0gOTYwMEw7IGJyZWFrOworI2VuZGlmIC8qIEI5NjAwICovCisKKyNpZmRlZiBCMTkyMDAKKyAg ICAgIGNhc2UgQjE5MjAwOiBzcyA9IDE5MjAwTDsgYnJlYWs7CisjZWxzZQorI2lmZGVmIEVYVEEK KyAgICAgIGNhc2UgRVhUQTogc3MgPSAxOTIwMEw7IGJyZWFrOworI2VuZGlmIC8qIEVYVEEgKi8K KyNlbmRpZiAvKiBCMTkyMDAgKi8KKworI2lmbmRlZiBNSU5JWAorI2lmZGVmIEIzODQwMAorICAg ICAgY2FzZSBCMzg0MDA6CisgICAgICAgIHNzID0gMzg0MDBMOworI2lmZGVmIE9MSU5VWEhJU1BF RUQKKyAgICAgICAgc3dpdGNoKHNwZF9mbGFncykgeworICAgICAgICAgIGNhc2UgQVNZTkNfU1BE X0hJOiAgc3MgPSAgNTc2MDBMOyBicmVhazsKKyAgICAgICAgICBjYXNlIEFTWU5DX1NQRF9WSEk6 IHNzID0gMTE1MjAwTDsgYnJlYWs7CisJfQorI2VuZGlmIC8qIE9MSU5VWEhJU1BFRUQgKi8KKyAg ICAgICAgYnJlYWs7CisjZWxzZQorI2lmZGVmIEVYVEIKKyAgICAgIGNhc2UgRVhUQjogc3MgPSAz ODQwMEw7IGJyZWFrOworI2VuZGlmIC8qIEVYVEIgKi8KKyNlbmRpZiAvKiBCMzg0MDAgKi8KKyNl bmRpZiAvKiBNSU5JWCAqLworCisjaWZkZWYgSFBVWAorI2lmZGVmIF9CNTc2MDAKKyAgICAgIGNh c2UgX0I1NzYwMDogc3MgPSA1NzYwMEw7IGJyZWFrOworI2VuZGlmIC8qIF9CNTc2MDAgKi8KKyNp ZmRlZiBfQjExNTIwMAorICAgICAgY2FzZSBfQjExNTIwMDogc3MgPSAxMTUyMDBMOyBicmVhazsK KyNlbmRpZiAvKiBfQjExNTIwMCAqLworI2Vsc2UKKyNpZmRlZiBCNTc2MDAKKyAgICAgIGNhc2Ug QjU3NjAwOiBzcyA9IDU3NjAwTDsgYnJlYWs7CisjZW5kaWYgLyogQjU3NjAwICovCisjaWZkZWYg Qjc2ODAwCisgICAgICBjYXNlIEI3NjgwMDogc3MgPSA3NjgwMEw7IGJyZWFrOworI2VuZGlmIC8q IEI3NjgwMCAqLworI2lmZGVmIEIxMTUyMDAKKyAgICAgIGNhc2UgQjExNTIwMDogc3MgPSAxMTUy MDBMOyBicmVhazsKKyNlbmRpZiAvKiBCMTE1MjAwICovCisjaWZkZWYgQjE1MzYwMAorICAgICAg Y2FzZSBCMTUzNjAwOiBzcyA9IDE1MzYwMEw7IGJyZWFrOworI2VuZGlmIC8qIEIxNTM2MDAgKi8K KyNpZmRlZiBCMjMwNDAwCisgICAgICBjYXNlIEIyMzA0MDA6IHNzID0gMjMwNDAwTDsgYnJlYWs7 CisjZW5kaWYgLyogQjIzMDQwMCAqLworI2lmZGVmIEIzMDcyMDAKKyAgICAgIGNhc2UgQjMwNzIw MDogc3MgPSAzMDcyMDBMOyBicmVhazsKKyNlbmRpZiAvKiBCMzA3MjAwICovCisjaWZkZWYgQjQ2 MDgwMAorICAgICAgY2FzZSBCNDYwODAwOiBzcyA9IDQ2MDgwMEw7IGJyZWFrOworI2VuZGlmIC8q IEI0NjA4MDAgKi8KKyNlbmRpZiAvKiBIUFVYICovCisjaWZkZWYgQjkyMTYwMAorICAgICAgY2Fz ZSBCOTIxNjAwOiBzcyA9IDkyMTYwMEw7IGJyZWFrOworI2VuZGlmIC8qIEI5MjE2MDAgKi8KKyAg ICAgIGRlZmF1bHQ6CisJc3MgPSAtMTsgYnJlYWs7CisgICAgfQorI2VuZGlmIC8qIFBsYW45ICov CisgICAgZGVidWcoRjEwMSwidHRnc3BkIHNwZWVkIiwiIixzcyk7CisgICAgcmV0dXJuKHNzKTsK KworI2VuZGlmIC8qIFVTRVRDU0VUU1BFRUQgKi8KKyNlbmRpZiAvKiBOT0xPQ0FMICovCit9Cisj aWZkZWYgTUlOSVgyCQkJCS8qIEFub3RoZXIgaGFjayBhbGVydCAqLworI2RlZmluZSBNSU5JWAor I2VuZGlmIC8qIE1JTklYMiAqLworCisvKgorICBGSU9OUkVBRCBkYXRhIHR5cGUuLi4gIFRoaXMg aGFzIGJlZW4gZGVmaW5lZCBhcyAibG9uZyIgZm9yIG1hbnksIG1hbnkKKyAgeWVhcnMsIGFuZCBp dCB3b3JrZWQgT0sgdW50aWwgNjQtYml0IHBsYXRmb3JtcyBhcHBlYXJlZC4gIFRodXMgd2UgdXNl CisgIGludCBmb3IgNjQtYml0IHBsYXRmb3JtcywgYnV0IGtlZXAgbG9uZyBmb3IgdGhlIG90aGVy cy4gIElmIHdlIGNoYW5nZWQKKyAgdGhlIGRlZmF1bHQgUEVFS1RZUEUgdG8gaW50LCB0aGlzIHdv dWxkIHByb2JhYmx5IGJyZWFrIDE2LWJpdCBidWlsZHMKKyAgKG5vdGUgdGhhdCBzaXplb2YobG9u ZykgPT0gc2l6ZW9mKGludCkgb24gbW9zdCAzMi1iaXQgcGxhdGZvcm1zKSwgbWFueQorICBvZiB3 aGljaCB3ZSBoYXZlIG5vIHdheSBvZiB0ZXN0aW5nIGFueSBtb3JlLiAgVGhlcmVmb3JlLCBkbyBu b3QgY2hhbmdlCisgIHRoZSBkZWZhdWx0IGRlZmluaXRpb24gb2YgUEVFS1RZUEUgLS0gb25seSBh ZGQgZXhjZXB0aW9ucyB0byBpdCBhcyBuZWVkZWQuCisqLworI2lmZGVmIENPSEVSRU5UCisjaWZk ZWYgRklPTlJFQUQKKyN1bmRlZiBGSU9OUkVBRAorI2VuZGlmIC8qIEZJT05SRUFEICovCisvKiAj ZGVmaW5lIEZJT05SRUFEIFRJT0NRVUVSWSAqLworLyogI2RlZmluZSBQRUVLVFlQRSBpbnQgKi8K KyNlbHNlICAvKiBOb3QgQ09IRVJFTlQuLi4gKi8KKworI2lmZGVmIE9TRjMyCQkJCS8qIERpZ2l0 YWwgVU5JWCAzLjIgb3IgaGlnaGVyICovCisjZGVmaW5lIFBFRUtUWVBFIGludAorI2Vsc2UKKyNk ZWZpbmUgUEVFS1RZUEUgbG9uZwkJCS8qIEVsc2V3aGVyZSAoc2VlIG5vdGVzIGFib3ZlKSAqLwor I2VuZGlmIC8qIE9TRjMyICovCisjZW5kaWYgLyogQ09IRVJFTlQgKi8KKworLyogY2t1bXlyLmMg YnkgS3Jpc3RvZmZlciBFcmlrc3Nvbiwgc2tlQHBrbWFiLnNlLCAxNSBNYXIgMTk5MC4gKi8KKwor I2lmZGVmIE1ZUkVBRAorCisvKiBQcml2YXRlIGJ1ZmZlciBmb3IgbXlyZWFkKCkgYW5kIGl0cyBj b21wYW5pb25zLiAgTm90IGZvciB1c2UgYnkgYW55dGhpbmcKKyAqIGVsc2UuICB0dGZsdWkoKSBp cyBhbGxvd2VkIHRvIHJlc2V0IHRoZW0gdG8gaW5pdGlhbCB2YWx1ZXMuICB0dGNoaygpIGlzCisg KiBhbGxvd2VkIHRvIHJlYWQgbXlfY291bnQuCisgKgorICogbXlfaXRlbSBpcyBhbiBpbmRleCBp bnRvIG15YnVmW10uICBJbmNyZW1lbnQgaXQgKmJlZm9yZSogcmVhZGluZyBteWJ1ZltdLgorICoK KyAqIEEgZ2xvYmFsIHBhcml0eSBtYXNrIHZhcmlhYmxlIGNvdWxkIGJlIHVzZWZ1bCB0b28uICBX ZSBjb3VsZCB1c2UgaXQgdG8KKyAqIGxldCBteXJlYWQoKSBzdHJpcCB0aGUgcGFyaXR5IG9uIGl0 cyBvd24sIGluc3RlYWQgb2Ygc3RyaXBwaW5nIHNpZ24KKyAqIGJpdHMgYXMgaXQgZG9lcyBub3cu CisgKi8KKyNpZmRlZiBCSUdCVUZPSworI2RlZmluZSBNWUJVRkxFTiAzMjc2OAorI2Vsc2UKKyNp ZmRlZiBwZHAxMQorI2RlZmluZSBNWUJVRkxFTiAyNTYKKyNlbHNlCisjZGVmaW5lIE1ZQlVGTEVO IDEwMjQKKyNlbmRpZiAvKiBwZHAxMSAqLworI2VuZGlmIC8qIEJJR0JVRk9LICovCisKKyNpZmRl ZiBBTllYMjUKKyN1bmRlZiBNWUJVRkxFTgorI2RlZmluZSBNWUJVRkxFTiAyNTYKKy8qCisgIE9u IFguMjUgY29ubmVjdGlvbnMsIHRoZXJlIGlzIGFuIGV4dHJhIGNvbnRyb2wgYnl0ZSBhdCB0aGUg YmVnaW5uaW5nLgorKi8KK3N0YXRpYyBDSEFSIHgyNWJ1ZltNWUJVRkxFTisxXTsJCS8qIENvbW11 bmljYXRpb24gZGV2aWNlIGlucHV0IGJ1ZmZlciAqLworc3RhdGljIENIQVIgICpteWJ1ZiA9IHgy NWJ1ZisxOworI2Vsc2UKK3N0YXRpYyBDSEFSIG15YnVmW01ZQlVGTEVOXTsKKyNlbmRpZiAvKiBB TllYMjUgKi8KKworc3RhdGljIGludCBteV9jb3VudCA9IDA7CQkvKiBOdW1iZXIgb2YgY2hhcnMg c3RpbGwgaW4gbXlidWYgKi8KK3N0YXRpYyBpbnQgbXlfaXRlbSA9IC0xOwkJLyogTGFzdCBpbmRl eCByZWFkIGZyb20gbXlidWZbXSAgICovCisKKy8qICBUIFQgUCBFIEUgSyAgLS0gIFBlZWsgaW50 byBvdXIgaW50ZXJuYWwgY29tbXVuaWNhdGlvbnMgaW5wdXQgYnVmZmVycy4gKi8KKworLyoKKyAg Tk9URTogVGhpcyByb3V0aW5lIGlzIHBlY3VsaWFyIHRvIFVOSVgsIGFuZCBpcyB1c2VkIG9ubHkg YnkgdGhlCisgIHNlbGVjdCgpLWJhc2VkIENPTk5FQ1QgbW9kdWxlLCBja3VjbnMuYy4gIEl0IG5l ZWQgbm90IGJlIHJlcGxpY2F0ZWQgaW4KKyAgdGhlIGNrP3Rpby5jIG9mIG90aGVyIHBsYXRmb3Jt cy4KKyovCitpbnQKK3R0cGVlaygpIHsKKyNpZmRlZiBUVExFQlVGCisgICAgaW50IHJjID0gMDsK KyAgICBpZiAodHRwdXNoID49IDApCisgICAgICByYysrOworICAgIHJjICs9IGxlX2luYnVmKCk7 CisgICAgaWYgKHJjID4gMCkKKyAgICAgIHJldHVybihyYyk7CisgICAgZWxzZQorI2VuZGlmIC8q IFRUTEVCVUYgKi8KKworI2lmZGVmIE1ZUkVBRAorICAgIHJldHVybihteV9jb3VudCk7CisjZWxz ZQorICAgIHJldHVybigwKTsKKyNlbmRpZiAvKiBNWVJFQUQgKi8KK30KKworLyogbXlyZWFkKCkg LS0gRWZmaWNpZW50IHJlYWQgb2Ygb25lIGNoYXJhY3RlciBmcm9tIGNvbW11bmljYXRpb25zIGxp bmUuCisgKgorICogTk9URTogbXlyZWFkKCkgYW5kIGl0cyBoZWxwZXJzIG15Z2V0YnVmKCkgYW5k IG15ZmlsbGJ1ZigpIHJldHVybiByYXcKKyAqIGJ5dGVzIGZyb20gY29ubmVjdGlvbiwgc28gd2hl biB0aGUgY29ubmVjdGlvbiBpcyBlbmNyeXB0ZWQsIHRoZXNlIGJ5dGVzCisgKiBtdXN0IGJlIGRl Y3J5cHRlZC4KKyAqCisgKiBVc2VzIGEgcHJpdmF0ZSBidWZmZXIgdG8gbWluaW1pemUgdGhlIG51 bWJlciBvZiBleHBlbnNpdmUgcmVhZCgpIHN5c3RlbQorICogY2FsbHMuICBFc3NlbnRpYWxseSBw ZXJmb3JtcyB0aGUgZXF1aXZhbGVudCBvZiByZWFkKCkgb2YgMSBjaGFyYWN0ZXIsIHdoaWNoCisg KiBpcyB0aGVuIHJldHVybmVkLiAgQnkgcmVhZGluZyBhbGwgYXZhaWxhYmxlIGlucHV0IGZyb20g dGhlIHN5c3RlbSBidWZmZXJzCisgKiB0byB0aGUgcHJpdmF0ZSBidWZmZXIgaW4gb25lIGNodW5r LCBhbmQgdGhlbiB3b3JraW5nIGZyb20gdGhpcyBidWZmZXIsIHRoZQorICogbnVtYmVyIG9mIHN5 c3RlbSBjYWxscyBpcyByZWR1Y2VkIGluIGFueSBjYXNlIHdoZXJlIG1vcmUgdGhhbiBvbmUgY2hh cmFjdGVyCisgKiBhcnJpdmVzIGR1cmluZyB0aGUgcHJvY2Vzc2luZyBvZiB0aGUgcHJldmlvdXMg Y2h1bmssIGZvciBpbnN0YW5jZSBoaWdoCisgKiBiYXVkIHJhdGVzIG9yIG5ldHdvcmsgdHlwZSBj b25uZWN0aW9ucyB3aGVyZSBpbnB1dCBhcnJpdmVzIGluIHBhY2tldHMuCisgKiBJZiB0aGUgdGlt ZSBuZWVkZWQgZm9yIGEgcmVhZCgpIHN5c3RlbSBjYWxsIGFwcHJvYWNoZXMgdGhlIHRpbWUgZm9y IG1vcmUKKyAqIHRoYW4gb25lIGNoYXJhY3RlciB0byBhcnJpdmUsIHRoZW4gdGhpcyBtZWNoYW5p c20gYXV0b21hdGljYWxseSBjb21wZW5zYXRlcworICogZm9yIHRoYXQgYnkgcGVyZm9ybWluZyBi aWdnZXIgcmVhZCgpcyBsZXNzIGZyZXF1ZW50bHkuICBJZiB0aGUgc3lzdGVtIGxvYWQKKyAqIGlz IGhpZ2gsIHRoZSBzYW1lIG1lY2hhbmlzbSBjb21wZW5zYXRlcyBmb3IgdGhhdCB0b28uCisgKgor ICogbXlyZWFkKCkgaXMgYSBtYWNybyB0aGF0IHJldHVybnMgdGhlIG5leHQgY2hhcmFjdGVyIGZy b20gdGhlIGJ1ZmZlci4gIElmIHRoZQorICogYnVmZmVyIGlzIGVtcHR5LCBteWdldGJ1ZigpIGlz IGNhbGxlZC4gIFNlZSBteWdldGJ1ZigpIGZvciBwb3NzaWJsZSBlcnJvcgorICogcmV0dXJucy4K KyAqCisgKiBUaGlzIHNob3VsZCBiZSBlZmZpY2llbnQgZW5vdWdoIGZvciBhbnkgb25lLWNoYXJh Y3Rlci1hdC1hLXRpbWUgbG9vcHMuCisgKiBGb3IgZXZlbiBiZXR0ZXIgZWZmaWNpZW5jeSB5b3Ug bWlnaHQgdXNlIG1lbWNweSgpL2Jjb3B5KCkgb3Igc3VjaCBiZXR3ZWVuCisgKiBidWZmZXJzIChz aW5jZSB0aGV5IGFyZSBvZnRlbiBiZXR0ZXIgb3B0aW1pemVkIGZvciBjb3B5aW5nKSwgYnV0IGl0 IG1heSBub3QKKyAqIGJlIHdvcnRoIGl0IGlmIHlvdSBoYXZlIHRvIHRha2UgYW4gZXh0cmEgcGFz cyBvdmVyIHRoZSBidWZmZXIgdG8gc3RyaXAKKyAqIHBhcml0eSBhbmQgY2hlY2sgZm9yIENUUkwt QyBhbnl3YXkuCisgKgorICogTm90ZSB0aGF0IGlmIHlvdSBoYXZlIGJlZW4gdXNpbmcgbXlyZWFk KCkgZnJvbSBhbm90aGVyIHByb2dyYW0gbW9kdWxlLCB5b3UKKyAqIG1heSBoYXZlIHNvbWUgdHJv dWJsZSBhY2Nlc3NpbmcgdGhpcyBtYWNybyB2ZXJzaW9uIGFuZCB0aGUgcHJpdmF0ZSB2YXJpYWJs ZXMKKyAqIGl0IHVzZXMuICBJbiB0aGF0IGNhc2UsIGp1c3QgYWRkIGEgZnVuY3Rpb24gaW4gdGhp cyBtb2R1bGUsIHRoYXQgaW52b2tlcyB0aGUKKyAqIG1hY3JvLgorICovCisjZGVmaW5lIG15cmVh ZCgpICgtLW15X2NvdW50IDwgMCA/IG15Z2V0YnVmKCkgOiAyNTUgJiAoaW50KW15YnVmWysrbXlf aXRlbV0pCisKKy8qIFNwZWNpZmljYXRpb246IFB1c2ggYmFjayB1cCB0byBvbmUgY2hhcmFjdGVy IG9udG8gbXlyZWFkKCkncyBxdWV1ZS4KKyAqCisgKiBUaGlzIGltcGxlbWVudGF0aW9uOiBQdXNo IGJhY2sgY2hhcmFjdGVycyBpbnRvIG15YnVmLiBBdCBsZWFzdCBvbmUgY2hhcmFjdGVyCisgKiBt dXN0IGhhdmUgYmVlbiByZWFkIHRocm91Z2ggbXlyZWFkKCkgYmVmb3JlIG15dW5yZCgpIG1heSBi ZSB1c2VkLiAgQWZ0ZXIKKyAqIEVPRiBvciByZWFkIGVycm9yLCBhZ2FpbiwgbXl1bnJkKCkgY2Fu IG5vdCBiZSB1c2VkLiAgU29tZXRpbWVzIG1vcmUgdGhhbgorICogb25lIGNoYXJhY3RlciBjYW4g YmUgcHVzaGVkIGJhY2ssIGJ1dCBvbmx5IG9uZSBjaGFyYWN0ZXIgaXMgZ3VhcmFudGVlZC4KKyAq IFNpbmNlIGEgcHJldmlvdXMgbXlyZWFkKCkgbXVzdCBoYXZlIHJlYWQgaXRzIGNoYXJhY3RlciBv dXQgb2YgbXlidWZbXSwKKyAqIHRoYXQgZ3VhcmFudGVlcyB0aGF0IHRoZXJlIGlzIHNwYWNlIGZv ciBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyLiAgSWYgcHVzaAorICogYmFjayB3YXMgcmVhbGx5IG5l ZWRlZCBhZnRlciBFT0YsIGEgc21hbGwgYWRkaXRpb24gY291bGQgcHJvdmlkZSB0aGF0LgorICoK KyAqIEFzIG9mIDAyLzIwMDcgbXl1bnJkKCkgaXMgdXNlZCBieSB0dGlubCgpLgorICovCitWT0lE CisjaWZkZWYgQ0tfQU5TSUMKK215dW5yZChDSEFSIGNoKQorI2Vsc2UKK215dW5yZChjaCkgQ0hB UiBjaDsKKyNlbmRpZgkvKiBDS19BTlNJQyAqLworeworICAgIGlmIChteV9pdGVtID49IDApIHsK KwlteWJ1ZltteV9pdGVtLS1dID0gY2g7CisJKytteV9jb3VudDsKKyAgICB9Cit9CisKKy8qICBU IFQgUCBVIFMgSCBCIEEgQyBLICAtLSAgUHV0IG4gYnl0ZXMgYmFjayBpbnRvIHRoZSBteXJlYWQg YnVmZmVyICovCisKK3N0YXRpYyBDSEFSICogcHVzaGJ1ZiA9IE5VTEw7CisvKiBzdGF0aWMgaW50 IHB1c2hlZCA9IDA7ICovCisKK2ludAordHRwdXNoYmFjayhzLG4pIENIQVIgKiBzOyBpbnQgbjsg eworICAgIGRlYnVnKEYxMDEsInR0cHVzaGJhY2sgbiIsIiIsbik7CisgICAgaWYgKHB1c2hidWYg fHwgbiA+IE1ZQlVGTEVOIHx8IG4gPCAxKQorICAgICAgcmV0dXJuKC0xKTsKKyAgICBkZWJ1ZyhG MTAxLCJ0dHB1c2hiYWNrIG15X2NvdW50IiwiIixteV9jb3VudCk7CisgICAgaWYgKG15X2NvdW50 ID4gMCkgeworCWlmICghKHB1c2hidWYgPSAoQ0hBUiAqKW1hbGxvYyhuKzEpKSkKKwkgIHJldHVy bigtMSk7CisJbWVtY3B5KHB1c2hidWYsbXlidWYsbXlfY291bnQpOworCS8qIHB1c2hlZCA9IG15 X2NvdW50OyAqLyAvKiAoc2V0IGJ1dCBuZXZlciB1c2VkKSAqLworICAgIH0KKyAgICBtZW1jcHko bXlidWYscyxuKTsKKyAgICBteV9jb3VudCA9IG47CisgICAgbXlfaXRlbSA9IC0xOworICAgIHJl dHVybigwKTsKK30KKworLyogbXlnZXRidWYoKSAtLSBGaWxsIGJ1ZmZlciBmb3IgbXlyZWFkKCkg YW5kIHJldHVybiBmaXJzdCBjaGFyYWN0ZXIuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyB3aGF0 IG15cmVhZCgpIHVzZXMgd2hlbiBpdCBjYW4ndCBnZXQgdGhlIG5leHQgY2hhcmFjdGVyCisgKiBk aXJlY3RseSBmcm9tIGl0cyBidWZmZXIuICBGaXJzdCwgaXQgY2FsbHMgYSBzeXN0ZW0gZGVwZW5k ZW50IG15ZmlsbGJ1ZigpCisgKiB0byByZWFkIGF0IGxlYXN0IG9uZSBuZXcgY2hhcmFjdGVyIGlu dG8gdGhlIGJ1ZmZlciwgYW5kIHRoZW4gaXQgcmV0dXJucworICogdGhlIGZpcnN0IGNoYXJhY3Rl ciBqdXN0IGFzIG15cmVhZCgpIHdvdWxkIGhhdmUgZG9uZS4gIFRoaXMgZnVuY3Rpb24gYWxzbwor ICogaXMgcmVzcG9uc2libGUgZm9yIGFsbCBlcnJvciBjb25kaXRpb25zIHRoYXQgbXlyZWFkKCkg Y2FuIGluZGljYXRlLgorICoKKyAqIFJldHVybnM6IFdoZW4gT0sJPT4gYSBwb3NpdGl2ZSBjaGFy YWN0ZXIsIDAgb3IgZ3JlYXRlci4KKyAqCSAgICBXaGVuIEVPRgk9PiAtMi4KKyAqCSAgICBXaGVu IGVycm9yCT0+IC0zLCBlcnJvciBjb2RlIGluIGVycm5vLgorICoKKyAqIE9sZGVyIG15cmVhZCgp cyBhZGRpdGlvbmFsbHkgcmV0dXJuZWQgLTEgdG8gaW5kaWNhdGUgdGhhdCB0aGVyZSB3YXMgbm90 aGluZworICogdG8gcmVhZCwgdXBvbiB3aGljaCB0aGUgY2FsbGVyIHdvdWxkIGNhbGwgbXlyZWFk KCkgYWdhaW4gdW50aWwgaXQgZ290CisgKiBzb21ldGhpbmcuICBUaGUgbmV3IG15cmVhZCgpL215 Z2V0YnVmKCkgYWx3YXlzIGdldHMgc29tZXRoaW5nLiAgSWYgaXQKKyAqIGRvZXNuJ3QsIHRoZW4g bWFrZSBpdCBkbyBzbyEgIEFueSBwcm9ncmFtIHRoYXQgYWN0dWFsbHkgZGVwZW5kcyBvbiB0aGUg b2xkCisgKiBiZWhhdmlvdXIgd2lsbCBicmVhay4KKyAqCisgKiBUaGUgb2xkZXIgdmVyc2lvbiBh bHNvIHVzZWQgdG8gcmV0dXJuIC0yIGJvdGggZm9yIEVPRiBhbmQgb3RoZXIgZXJyb3JzLAorICog YW5kIHVzZWQgdG8gc2V0IGVycm5vIHRvIDk5OTkgb24gRU9GLiAgVGhlIGVycm5vIHN0dWZmIGlz IGdvbmUsIEVPRiBhbmQKKyAqIG90aGVyIGVycm9ycyBub3cgcmV0dXJuIGRpZmZlcmVudCByZXN1 bHRzLCBhbHRob3VnaCBLZXJtaXQgY3VycmVudGx5IG5ldmVyCisgKiBjaGVja3MgdG8gc2VlIHdo aWNoIGl0IHdhcy4gIEl0IGp1c3QgZGlzY29ubmVjdHMgaW4gYm90aCBjYXNlcy4KKyAqCisgKiBL ZXJtaXQgbGV0cyB0aGUgdXNlciB1c2UgdGhlIHF1aXQga2V5IHRvIHBlcmZvcm0gc29tZSBzcGVj aWFsIGNvbW1hbmRzCisgKiBkdXJpbmcgZmlsZSB0cmFuc2Zlci4gIFRoaXMgY2F1c2VzIHJlYWQo KSwgYW5kIHRodXMgYWxzbyBteWdldGJ1ZigpLCB0bworICogZmluaXNoIHdpdGhvdXQgcmVhZGlu ZyBhbnl0aGluZyBhbmQgcmV0dXJuIHRoZSBFSU5UUiBlcnJvci4gIFRoaXMgc2hvdWxkCisgKiBi ZSBjaGVja2VkIGJ5IHRoZSBjYWxsZXIuICBNeWdldGJ1ZigpIGNvdWxkIHJldHJ5IHRoZSByZWFk KCkgb24gRUlOVFIsCisgKiBidXQgaWYgdGhlcmUgaXMgbm90aGluZyB0byByZWFkLCB0aGlzIGNv dWxkIGRlbGF5IEtlcm1pdCdzIHJlYWN0aW9uIHRvCisgKiB0aGUgY29tbWFuZCwgYW5kIG1ha2Ug S2VybWl0IGFwcGVhciB1bnJlc3BvbnNpdmUuCisgKgorICogVGhlIGRlYnVnKCkgY2FsbCBzaG91 bGQgYmUgcmVtb3ZlZCBmb3Igb3B0aW11bSBwZXJmb3JtYW5jZS4KKyAqLworaW50CitteWdldGJ1 ZigpIHsKKyAgICBpbnQgeDsKKyAgICBlcnJubyA9IDA7CisjaWZkZWYgREVCVUcKKyAgICBpZiAo ZGVibG9nICYmIG15X2NvdW50ID4gMCkKKyAgICAgIGRlYnVnKEYxMDEsIm15Z2V0YnVmIElNUFJP UEVSTFkgQ0FMTEVEIHdpdGggbXlfY291bnQiLCIiLG15X2NvdW50KTsKKyNlbmRpZiAvKiBERUJV RyAqLworICAgIGlmIChteV9jb3VudCA8PSAwKQorICAgICAgbXlfY291bnQgPSBteWZpbGxidWYo KTsKKworI2lmZGVmIERFQlVHCisjaWZkZWYgQ09NTUVOVAorICAgIGlmIChkZWJsb2cpIGRlYnVn KEYxMDEsICJteWdldGJ1ZiByZWFkIiwgIiIsIG15X2NvdW50KTsKKyNlbHNlIC8qIENPTU1FTlQg Ki8KKyAgICBja2hleGR1bXAoIm15Z2V0YnVmIHJlYWQiLCBteWJ1ZiwgbXlfY291bnQpOworI2Vu ZGlmIC8qIENPTU1FTlQgKi8KKyNlbmRpZiAvKiBERUJVRyAqLworICAgIHggPSBteV9jb3VudDsK KyAgICBpZiAobXlfY291bnQgPD0gMCkgeworCW15X2NvdW50ID0gMDsKKwlteV9pdGVtID0gLTE7 CisJZGVidWcoRjEwMSwibXlnZXRidWYgZXJybm8iLCIiLGVycm5vKTsKKyNpZmRlZiBUQ1BTT0NL RVQKKwlpZiAobmV0Y29ubiAmJiB0dG5ldCA9PSBORVRfVENQQiAmJiBlcnJubyAhPSAwKSB7CisJ ICAgIGlmIChlcnJubyAhPSBFSU5UUikgeworCQlkZWJ1ZyhGMTAxLCJteWdldGJ1ZiBUQ1AgZXJy b3IiLCIiLGVycm5vKTsKKwkJdHRjbG9zKDApOwkJLyogQ2xvc2UgdGhlIGNvbm5lY3Rpb24uICov CisJICAgIH0KKwkgICAgcmV0dXJuKC0zKTsKKwl9CisjZW5kaWYgLyogVENQU09DS0VUICovCisJ aWYgKCFuZXRjb25uICYmIHhsb2NhbCAmJiBlcnJubykgeworCSAgICBpZiAoZXJybm8gIT0gRUlO VFIpIHsKKwkJZGVidWcoRjEwMSwibXlnZXRidWYgU0VSSUFMIGVycm9yIiwiIixlcnJubyk7CisJ CXggPSAtMzsKKwkJdHRjbG9zKDApOwkJLyogQ2xvc2UgdGhlIGNvbm5lY3Rpb24uICovCisJICAg IH0KKwl9CisJcmV0dXJuKCh4IDwgMCkgPyAtMyA6IC0yKTsKKyAgICB9CisgICAgLS1teV9jb3Vu dDsKKyAgICByZXR1cm4oKHVuc2lnbmVkKSgweGZmICYgbXlidWZbbXlfaXRlbSA9IDBdKSk7Cit9 CisKKy8qIG15ZmlsbGJ1ZigpOgorICogU3lzdGVtLWRlcGVuZGVudCByZWFkKCkgaW50byBteWJ1 ZltdLCBhcyBtYW55IGNoYXJhY3RlcnMgYXMgcG9zc2libGUuCisgKgorICogUmV0dXJuczogT0sg PT4gbnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVhZCwgYWx3YXlzIG1vcmUgdGhhbiB6ZXJvLgorICog ICAgICAgICAgRU9GID0+IDAKKyAqICAgICAgICAgIEVycm9yID0+IC0xLCBlcnJvciBjb2RlIGlu IGVycm5vLgorICoKKyAqIElmIHRoZXJlIGlzIGlucHV0IGF2YWlsYWJsZSBpbiB0aGUgc3lzdGVt J3MgYnVmZmVycywgYWxsIG9mIGl0IHNob3VsZCBiZQorICogcmVhZCBpbnRvIG15YnVmW10gYW5k IHRoZSBmdW5jdGlvbiByZXR1cm4gaW1tZWRpYXRlbHkuICBJZiBubyBpbnB1dCBpcworICogYXZh aWxhYmxlLCBpdCBzaG91bGQgd2FpdCBmb3IgYSBjaGFyYWN0ZXIgdG8gYXJyaXZlLCBhbmQgcmV0 dXJuIHdpdGggdGhhdAorICogb25lIGluIG15YnVmW10gYXMgc29vbiBhcyBwb3NzaWJsZS4gIEl0 IG1heSB3YWl0IHNvbWV3aGF0IHBhc3QgdGhlIGZpcnN0CisgKiBjaGFyYWN0ZXIsIGJ1dCBiZSBh d2FyZSB0aGF0IGFueSBzdWNoIGRlbGF5IGxlbmd0aGVucyB0aGUgcGFja2V0IHR1cm5hcm91bmQK KyAqIHRpbWUgZHVyaW5nIGtlcm1pdCBmaWxlIHRyYW5zZmVycy4gIFNob3VsZCBuZXZlciByZXR1 cm4gd2l0aCB6ZXJvIGNoYXJhY3RlcnMKKyAqIHVubGVzcyBFT0Ygb3IgaXJyZWNvdmVyYWJsZSBy ZWFkIGVycm9yLgorICoKKyAqIENvcnJlY3QgZnVuY3Rpb25pbmcgZGVwZW5kcyBvbiB0aGUgY29y cmVjdCB0dHkgcGFyYW1ldGVycyBiZWluZyB1c2VkLgorICogQmV0dGVyIGNvbnRyb2wgb2YgY3Vy cmVudCBwYXJhbWV0ZXJzIGlzIHJlcXVpcmVkIHRoYW4gbWF5IGhhdmUgYmVlbiB0aGUKKyAqIGNh c2UgaW4gb2xkZXIgS2VybWl0IHJlbGVhc2VzLiAgRm9yIGluc3RhbmNlLCBPX05ERUxBWSAob3Ig ZXF1aXZhbGVudCkgY2FuCisgKiBubyBsb25nZXIgYmUgc29tZXRpbWVzIG9mZiBhbmQgc29tZXRp bWVzIG9uIGxpa2UgaXQgdXNlZCB0bywgdW5sZXNzIGEKKyAqIHNwZWNpYWwgbXlmaWxsYnVmKCkg aXMgd3JpdHRlbiB0byBoYW5kbGUgdGhhdC4gIE90aGVyd2lzZSB0aGUgb3JkaW5hcnkKKyAqIG15 ZmlsbGJ1ZigpcyBtYXkgdGhpbmsgdGhleSBoYXZlIGNvbWUgdG8gRU9GLgorICoKKyAqIElmIHlv dXIgc3lzdGVtIGhhcyBhIGZhY2lsaXR5IHRvIGRpcmVjdGx5IHBlcmZvcm0gdGhlIGZ1bmN0aW9u aW5nIG9mCisgKiBteWZpbGxidWYoKSwgdGhlbiB1c2UgaXQuICBJZiB0aGUgc3lzdGVtIGNhbiB0 ZWxsIHlvdSBob3cgbWFueSBjaGFyYWN0ZXJzCisgKiBhcmUgYXZhaWxhYmxlIGluIGl0cyBidWZm ZXJzLCB0aGVuIHJlYWQgdGhhdCBhbW91bnQgKGJ1dCBub3QgbGVzcyB0aGFuIDEpLgorICogSWYg dGhlIHN5c3RlbSBjYW4gcmV0dXJuIGEgc3BlY2lhbCBpbmRpY2F0aW9uIHdoZW4geW91IHRyeSB0 byByZWFkIHdpdGhvdXQKKyAqIGFueXRoaW5nIHRvIHJlYWQsIHdoaWxlIGFsbG93aW5nIHlvdSB0 byByZWFkIGFsbCB0aGVyZSBpcyB3aGVuIHRoZXJlIGlzCisgKiBzb21ldGhpbmcsIHlvdSBtYXkg bG9vcCB1bnRpbCB0aGVyZSBpcyBzb21ldGhpbmcgdG8gcmVhZCwgYnV0IHByb2JhYmx5IHRoYXQK KyAqIGlzIG5vdCBnb29kIGZvciB0aGUgc3lzdGVtIGxvYWQuCisgKi8KKworI2lmZGVmIFNWT1JQ T1NJWAorCS8qIFRoaXMgaXMgZm9yIFN5c3RlbSBJSUkvViB3aXRoIFZNSU4+MCwgVlRJTUU9MCBh bmQgT19OREVMQVkgb2ZmLAorCSAqIGFuZCBDTE9DQUwgc2V0IGFueSB3YXkgeW91IGxpa2UuICBU aGlzIHdheSwgcmVhZCgpIHdpbGwgZG8gZXhhY3RseQorCSAqIHdoYXQgaXMgcmVxdWlyZWQgYnkg bXlmaWxsYnVmKCk6IElmIHRoZXJlIGlzIGRhdGEgaW4gdGhlIGJ1ZmZlcnMKKwkgKiBvZiB0aGUg Ty5TLiwgYWxsIGF2YWlsYWJsZSBkYXRhIGlzIHJlYWQgaW50byBteWJ1ZiwgdXAgdG8gdGhlIHNp emUKKwkgKiBvZiBteWJ1Zi4gIElmIHRoZXJlIGlzIG5vbmUsIHRoZSBmaXJzdCBjaGFyYWN0ZXIg dG8gYXJyaXZlIGlzCisJICogYXdhaXRlZCBhbmQgcmV0dXJuZWQuCisJICovCitpbnQKK215Zmls bGJ1ZigpIHsKKyAgICBpbnQgZmQsIG47CisjaWZkZWYgTkVUQ01ECisgICAgaWYgKHR0cGlwZSkK KyAgICAgIGZkID0gZmRpbjsKKyAgICBlbHNlCisjZW5kaWYgLyogTkVUQ01EICovCisgICAgICBm ZCA9IHR0eWZkOworCisjaWZkZWYgc3hhRTUwCisgICAgLyogRnJvbSBTLiBEZXphd2EgYXQgRnVq aWZpbG0gaW4gSmFwYW4uICBJIGRvbid0IGtub3cgd2h5IHRoaXMgaXMgKi8KKyAgICAvKiBuZWNl c3NhcnkgZm9yIHRoZSBzeGEgRTUwLCBidXQgaXQgaXMuICovCisgICAgcmV0dXJuIHJlYWQoZmQs IG15YnVmLCAyNTUpOworI2Vsc2UKKyNpZmRlZiBCRU9TT1JCRUJPWAorICAgIHdoaWxlICgxKSB7 CisjaWZkZWYgTkVUQ09OTgorICAgICAgICBpZiAobmV0Y29ubikgeworICAgICAgICAgICAgbiA9 IG5ldHhpbihzaXplb2YobXlidWYpLCAoY2hhciAqKW15YnVmKTsKKyAgICAgICAgICAgIGRlYnVn KEYxMDEsIkJFQk9YIFNWT1JQT1NJWCBuZXR3b3JrIG15ZmlsbGJ1ZiIsIiIsbik7CisJfQorICAg ICAgICBlbHNlCisjZW5kaWYgLyogTkVUQ09OTiAqLworCSAgbiA9IHJlYWQoZmQsIG15YnVmLCBz aXplb2YobXlidWYpKTsKKwlkZWJ1ZyhGMTAxLCJCRUJPWCBTVk9SUE9TSVggbm90bmV0IG15Zmls bGJ1ZiIsIiIsbik7CisgICAgICAgIGlmIChuID4gMCkKKwkgIHJldHVybihuKTsKKyAgICAgICAg c25vb3plKDEwMDAuMCk7CisgICAgfQorI2Vsc2UgLyogQkVPU09SQkVCT1ggKi8KKyAgICBlcnJu byA9IDA7CisgICAgLyogZGVidWcoRjEwMSwiU1ZPUlBPU0lYIG15ZmlsbGJ1ZiBjYWxsaW5nIHJl YWQoKSBmZCIsIiIsZmQpOyAqLworI2lmZGVmIElCTVgyNQorICAgIGlmIChuZXRjb25uICYmIChu ZXR0eXBlID09IE5FVF9JWDI1KSkgeworCS8qIGNhbid0IHVzZSBzaXplb2YgYmVjYXVzZSBteWJ1 ZiBpcyBhIHBvaW50ZXIsIGFuZCBub3QgYW4gYXJyYXkhICovCisJbiA9IHgyNXhpbiggTVlCVUZM RU4sIG15YnVmICk7CisgICAgfSBlbHNlCisjZW5kaWYgLyogSUJNWDI1ICovCisKKyNpZmRlZiBD S19TU0wKKyAgICAgIGlmIChzc2xfYWN0aXZlX2ZsYWcgfHwgdGxzX2FjdGl2ZV9mbGFnKSB7CisJ ICBpbnQgZXJyb3IsIG4gPSAwOworCSAgZGVidWcoRjEwMCwibXlmaWxsYnVmIGNhbGxpbmcgU1NM X3JlYWQoKSBmZCIsIiIsMCk7CisJICB3aGlsZSAobiA9PSAwKSB7CisJICAgICAgaWYgKHNzbF9h Y3RpdmVfZmxhZykKKyAgICAgICAgICAgICAgICBuID0gU1NMX3JlYWQoc3NsX2NvbiwgKGNoYXIg KilteWJ1Ziwgc2l6ZW9mKG15YnVmKSk7CisJICAgICAgZWxzZSBpZiAodGxzX2FjdGl2ZV9mbGFn KQorICAgICAgICAgICAgICAgIG4gPSBTU0xfcmVhZCh0bHNfY29uLCAoY2hhciAqKW15YnVmLCBz aXplb2YobXlidWYpKTsKKyAgICAgICAgICAgICAgZWxzZQorCQlicmVhazsKKwkgICAgICBzd2l0 Y2ggKFNTTF9nZXRfZXJyb3Ioc3NsX2FjdGl2ZV9mbGFnP3NzbF9jb246dGxzX2NvbixuKSkgewor CQljYXNlIFNTTF9FUlJPUl9OT05FOgorCQkgIGlmIChuID4gMCkKKyAgICAgICAgICAgICAgICAg ICAgcmV0dXJuKG4pOworCQkgIGlmIChuIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu KC0yKTsKKwkJICBtc2xlZXAoNTApOworCQkgIGJyZWFrOworCQljYXNlIFNTTF9FUlJPUl9XQU5U X1dSSVRFOgorCQljYXNlIFNTTF9FUlJPUl9XQU5UX1JFQUQ6CisJCSAgcmV0dXJuKC0xKTsKKwkJ Y2FzZSBTU0xfRVJST1JfU1lTQ0FMTDoKKwkJICBpZiAobiAhPSAwKQorCQkgICAgcmV0dXJuKC0x KTsKKwkJY2FzZSBTU0xfRVJST1JfV0FOVF9YNTA5X0xPT0tVUDoKKwkJY2FzZSBTU0xfRVJST1Jf U1NMOgorCQljYXNlIFNTTF9FUlJPUl9aRVJPX1JFVFVSTjoKKwkJZGVmYXVsdDoKKwkJICB0dGNs b3MoMCk7CisJCSAgcmV0dXJuKC0zKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K KyNlbmRpZiAvKiBDS19TU0wgKi8KKyNpZmRlZiBDS19LRVJCRVJPUworI2lmZGVmIEtSQjQKKyNp ZmRlZiBSTE9HQ09ERQorICAgIGlmICh0dG5wcm90byA9PSBOUF9FSzRMT0dJTikgeworCWRlYnVn KEYxMDEsIm15ZmlsbGJ1ZiBjYWxsaW5nIGtyYjRfZGVzX3JlYWQoKSBmZCIsIiIsdHR5ZmQpOwor ICAgICAgICBpZiAoKG4gPSBrcmI0X2Rlc19yZWFkKHR0eWZkLChjaGFyICopbXlidWYsc2l6ZW9m KG15YnVmKSkpIDwgMCkKKwkgIHJldHVybigtMyk7CisgICAgICAgIGVsc2UKKwkgIHJldHVybihu KTsKKyAgICB9CisjZW5kaWYgLyogUkxPR0NPREUgKi8KKyNlbmRpZiAvKiBLUkI0ICovCisjaWZk ZWYgS1JCNQorI2lmZGVmIFJMT0dDT0RFCisgICAgaWYgKHR0bnByb3RvID09IE5QX0VLNUxPR0lO KSB7CisJZGVidWcoRjEwMSwibXlmaWxsYnVmIGNhbGxpbmcga3JiNV9kZXNfcmVhZCgpIGZkIiwi Iix0dHlmZCk7CisgICAgICAgIGlmICgobiA9IGtyYjVfZGVzX3JlYWQodHR5ZmQsKGNoYXIgKilt eWJ1ZixzaXplb2YobXlidWYpLDApKSA8IDApCisJICByZXR1cm4oLTMpOworICAgICAgICBlbHNl CisJICByZXR1cm4obik7CisgICAgfQorI2VuZGlmIC8qIFJMT0dDT0RFICovCisjaWZkZWYgS1JC NV9VMlUKKyAgICBpZiAodHRucHJvdG8gPT0gTlBfSzVVMlUpIHsKKwlkZWJ1ZyhGMTAxLCJteWZp bGxidWYgY2FsbGluZyBrcmI1X3UydV9yZWFkKCkgZmQiLCIiLHR0eWZkKTsKKyAgICAgICAgaWYg KChuID0ga3JiNV91MnVfcmVhZCh0dHlmZCwoY2hhciAqKW15YnVmLHNpemVvZihteWJ1ZikpKSA8 IDApCisJICByZXR1cm4oLTMpOworICAgICAgICBlbHNlCisJICByZXR1cm4obik7CisgICAgfQor I2VuZGlmIC8qIEtSQjVfVTJVICovCisjZW5kaWYgLyogS1JCNSAqLworI2VuZGlmIC8qIENLX0tF UkJFUk9TICovCisKKyNpZmRlZiBORVRQVFkKKyNpZmRlZiBIQVZFX1BUWVRSQVAKKyAgICAvKiBT cGVjaWFsIGhhbmRsaW5nIGZvciBIUC1VWCBwdHkgaS9vICovCisgIHB0eXJlYWQ6CisgICAgaWYg KHR0cHR5ICYmIHB0eV90cmFwX3BlbmRpbmcodHR5ZmQpID4gMCkgeworCWRlYnVnKEYxMDEsIm15 ZmlsbGJ1ZiBjYWxsaW5nIHB0eV90cmFwX2hhbmRsZXIoKSBmZCIsIiIsdHR5ZmQpOworICAgICAg ICBpZiAocHR5X3RyYXBfaGFuZGxlcih0dHlmZCkgPiAwKSB7CisgICAgICAgICAgICB0dGNsb3Mo MCk7CisgICAgICAgICAgICByZXR1cm4oLTMpOworICAgICAgICB9CisgICAgfQorI2VuZGlmIC8q IEhBVkVfUFRZVFJBUCAqLworI2VuZGlmIC8qIE5FVFBUWSAqLworICAgIGRlYnVnKEYxMDEsIm15 ZmlsbGJ1ZiBjYWxsaW5nIHJlYWQoKSBmZCIsIiIsdHR5ZmQpOworICAgIG4gPSByZWFkKGZkLCBt eWJ1Ziwgc2l6ZW9mKG15YnVmKSk7CisgICAgZGVidWcoRjEwMSwiU1ZPUlBPU0lYIG15ZmlsbGJ1 ZiByZWFkIiwiIixuKTsKKyAgICBkZWJ1ZyhGMTAxLCJTVk9SUE9TSVggbXlmaWxsYnVmIGVycm5v IiwiIixlcnJubyk7CisgICAgZGVidWcoRjEwMSwiU1ZPUlBPU0lYIG15ZmlsbGJ1ZiB0dGNhcnIi LCIiLHR0Y2Fycik7CisgICAgaWYgKG4gPCAxKSB7CisjaWZkZWYgTkVUUFRZCisjaWZkZWYgSEFW RV9QVFlUUkFQCisgICAgICAgIC8qIFdoZW4gd2UgaGF2ZSBhIFBUWSB0cmFwIGluIHBsYWNlIHRo ZSBjb25uZWN0aW9uIGNhbm5vdCAqLworICAgICAgICAvKiBiZSBjbG9zZWQgdW50aWwgdGhlIHRy YXAgcmVjZWl2ZXMgYSBjbG9zZSBpbmRpY2F0aW9uLiAgKi8KKyAgICAgICAgaWYgKG4gPT0gMCAm JiB0dHB0eSkKKyAgICAgICAgICAgIGdvdG8gcHR5cmVhZDsKKyNlbmRpZiAvKiBIQVZFX1BUWVRS QVAgKi8KKyNlbmRpZiAvKiBORVRQVFkgKi8KKyAgICAgICAgcmV0dXJuKC0zKTsKKyAgICB9Cisg ICAgcmV0dXJuKG4pOworI2VuZGlmIC8qIEJFT1NPUkJFQk9YICovCisjZW5kaWYgLyogc3hhRTUw ICovCit9CisKKyNlbHNlIC8qIG5vdCBBVCZUIG9yIFBPU0lYICovCisKKyNpZmRlZiBhZWdpcwor CS8qIFRoaXMgaXMgcXVvdGVkIGZyb20gdGhlIG9sZCBteXJlYWQoKS4gIFRoZSBzZW1hbnRpY3Mg c2VlbSB0byBiZQorCSAqIGFscmlnaHQsIGJ1dCBtYXliZSBlcnJubyB3b3VsZCBub3QgbmVlZCB0 byBiZSBzZXQgZXZlbiB3aGVuCisJICogdGhlcmUgaXMgbm8gZXJyb3I/ICBJIGRvbid0IGtub3cg YWVnaXMuCisJICovCitpbnQKK215ZmlsbGJ1ZigpIHsKKyAgICBpbnQgY291bnQ7CisjaWZkZWYg TkVUQ01ECisgICAgaWYgKHR0cGlwZSkKKyAgICAgIGZkID0gZmRpbjsKKyAgICBlbHNlCisjZW5k aWYgLyogTkVUQ01EICovCisgICAgICBmZCA9IHR0eWZkOworCisgICAgY291bnQgPSBpb3NfJGdl dCgoc2hvcnQpZmQsIGlvc18kY29uZF9vcHQsIG15YnVmLCAyNTZMLCBzdCk7CisgICAgZXJybm8g PSBFSU87CisgICAgaWYgKHN0LmFsbCA9PSBpb3NfJGdldF9jb25kaXRpb25hbF9mYWlsZWQpIC8q IGdldCBhdCBsZWFzdCBvbmUgKi8KKyAgICAgIGNvdW50ID0gaW9zXyRnZXQoKHNob3J0KWZkLCAw LCBteWJ1ZiwgMUwsIHN0KTsKKyAgICBpZiAoc3QuYWxsID09IGlvc18kZW5kX29mX2ZpbGUpCisg ICAgICByZXR1cm4oLTMpOworICAgIGVsc2UgaWYgKHN0LmFsbCAhPSBzdGF0dXNfJG9rKSB7CisJ ZXJybm8gPSBFSU87CisJcmV0dXJuKC0xKTsKKyAgICB9CisgICAgcmV0dXJuKGNvdW50ID4gMCA/ IGNvdW50IDogLTMpOworfQorI2Vsc2UgLyogIWFlZ2lzICovCisKKyNpZmRlZiBGSU9OUkVBRAor CS8qIFRoaXMgaXMgZm9yIHN5c3RlbXMgd2l0aCBGSU9OUkVBRC4gIEZJT05SRUFEIHJldHVybnMg dGhlIG51bWJlcgorCSAqIG9mIGNoYXJhY3RlcnMgYXZhaWxhYmxlIGZvciByZWFkaW5nLiBJZiBu b25lIGFyZSBhdmFpbGFibGUsIHdhaXQKKwkgKiB1bnRpbCBzb21ldGhpbmcgYXJyaXZlcywgb3Ro ZXJ3aXNlIHJldHVybiBhbGwgdGhlcmUgaXMuCisJICovCitpbnQKK215ZmlsbGJ1ZigpIHsKKyAg ICBQRUVLVFlQRSBhdmFpbCA9IDA7CisgICAgaW50IHgsIGZkOworI2lmZGVmIE5FVENNRAorICAg IGlmICh0dHBpcGUpCisgICAgICBmZCA9IGZkaW47CisgICAgZWxzZQorI2VuZGlmIC8qIE5FVENN RCAqLworICAgICAgZmQgPSB0dHlmZDsKKworI2lmZGVmIFNVTlgyNQorLyoKKyAgU3VuTGluayBY LjI1IHN1cHBvcnQgaW4gdGhpcyByb3V0aW5lIGZyb20gU3RlZmFhbiBBLiBFZWNrZWxzLCBFdXJv c3RhdCAoQ0VDKS4KKyAgRGVwZW5kcyBvbiBTdW5PUyBoYXZpbmcgRklPTlJFQUQsIG5vdCBiZWNh dXNlIHdlIHVzZSBpdCwgYnV0IGp1c3Qgc28gdGhpcworICBjb2RlIGlzIGdyb3VwZWQgY29ycmVj dGx5IHdpdGhpbiB0aGUgI2lmZGVmcy4gIExldCdzIGhvcGUgU29sYXJpcyBrZWVwcyBpdC4KKwor ICBXZSBjYWxsIHgyNXhpbigpIGluc3RlYWQgb2YgcmVhZCgpIHNvIHRoYXQgUS1CaXQgcGFja2V0 cywgd2hpY2ggY29udGFpbgorICBYLjI1IHNlcnZpY2UtbGV2ZWwgaW5mb3JtYXRpb24gKGUuZy4g UEFEIHBhcmFtZXRlciBjaGFuZ2VzKSwgY2FuIGJlIHByb2Nlc3NlZAorICB0cmFuc3BhcmVudGx5 IHRvIHRoZSB1cHBlci1sZXZlbCBjb2RlLiAgVGhpcyBpcyBhIGJsb2NraW5nIHJlYWQsIGFuZCBz bworICB3ZSBkZXBlbmQgb24gaGlnaGVyLWxldmVsIGNvZGUgKHN1Y2ggYXMgdHRpbmMoKSkgdG8g c2V0IGFueSBuZWNlc3NhcnkgYWxhcm1zLgorKi8KKyAgICBleHRlcm4gaW50IG5ldHR5cGU7Cisg ICAgaWYgKG5ldGNvbm4gJiYgbmV0dHlwZSA9PSBORVRfU1gyNSkgeworCXdoaWxlICgoeCA9IHgy NXhpbihzaXplb2YoeDI1YnVmKSwgeDI1YnVmKSkgPCAxKSA7CisJcmV0dXJuKHggLSAxKTsJICAg ICAgICAvKiAiLTEiIGNvbXBlbnNhdGVzIGZvciBleHRyYSBzdGF0dXMgYnl0ZSAqLworICAgIH0K KyNlbmRpZiAvKiBTVU5YMjUgKi8KKworI2lmZGVmIENLX1NTTAorICAgIGlmIChzc2xfYWN0aXZl X2ZsYWcgfHwgdGxzX2FjdGl2ZV9mbGFnKSB7CisgICAgICAgIGludCBlcnJvciwgbiA9IDA7Cisg ICAgICAgIHdoaWxlIChuID09IDApIHsKKyAgICAgICAgICAgIGlmIChzc2xfYWN0aXZlX2ZsYWcp CisJICAgICAgbiA9IFNTTF9yZWFkKHNzbF9jb24sIChjaGFyICopbXlidWYsIHNpemVvZihteWJ1 ZikpOworICAgICAgICAgICAgZWxzZQorCSAgICAgIG4gPSBTU0xfcmVhZCh0bHNfY29uLCAoY2hh ciAqKW15YnVmLCBzaXplb2YobXlidWYpKTsKKyAgICAgICAgICAgIHN3aXRjaCAoU1NMX2dldF9l cnJvcihzc2xfYWN0aXZlX2ZsYWc/c3NsX2Nvbjp0bHNfY29uLG4pKSB7CisJICAgICAgY2FzZSBT U0xfRVJST1JfTk9ORToKKyAgICAgICAgICAgICAgICBpZiAobiA+IDApCisJCSAgcmV0dXJuKG4p OworICAgICAgICAgICAgICAgIGlmIChuIDwgMCkKKwkJICByZXR1cm4oLTIpOworICAgICAgICAg ICAgICAgIG1zbGVlcCg1MCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisJICAgICAgY2FzZSBT U0xfRVJST1JfV0FOVF9XUklURToKKwkgICAgICBjYXNlIFNTTF9FUlJPUl9XQU5UX1JFQUQ6Cisg ICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKKwkgICAgICBjYXNlIFNTTF9FUlJPUl9TWVNDQUxM OgorCQlpZiAobiAhPSAwKQorCQkgIHJldHVybigtMSk7CisJICAgICAgY2FzZSBTU0xfRVJST1Jf V0FOVF9YNTA5X0xPT0tVUDoKKwkgICAgICBjYXNlIFNTTF9FUlJPUl9TU0w6CisJICAgICAgY2Fz ZSBTU0xfRVJST1JfWkVST19SRVRVUk46CisJICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg ICB0dGNsb3MoMCk7CisgICAgICAgICAgICAgICAgcmV0dXJuKC0yKTsKKyAgICAgICAgICAgIH0K KyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBDS19TU0wgKi8KKyNpZmRlZiBDS19LRVJCRVJP UworI2lmZGVmIEtSQjQKKyNpZmRlZiBSTE9HQ09ERQorICAgIGlmICh0dG5wcm90byA9PSBOUF9F SzRMT0dJTikgeworICAgICAgICBpZiAoKHggPSBrcmI0X2Rlc19yZWFkKHR0eWZkLG15YnVmLHNp emVvZihteWJ1ZikpKSA8IDApCisJICByZXR1cm4oLTEpOworICAgICAgICBlbHNlCisJICByZXR1 cm4oeCk7CisgICAgfQorI2VuZGlmIC8qIFJMT0dDT0RFICovCisjZW5kaWYgLyogS1JCNCAqLwor I2lmZGVmIEtSQjUKKyNpZmRlZiBSTE9HQ09ERQorICAgIGlmICh0dG5wcm90byA9PSBOUF9FSzVM T0dJTikgeworICAgICAgICBpZiAoKHggPSBrcmI1X2Rlc19yZWFkKHR0eWZkLG15YnVmLHNpemVv ZihteWJ1ZiksMCkpIDwgMCkKKwkgIHJldHVybigtMSk7CisgICAgICAgIGVsc2UKKwkgIHJldHVy bih4KTsKKyAgICB9CisjZW5kaWYgLyogUkxPR0NPREUgKi8KKyNpZmRlZiBLUkI1X1UyVQorICAg IGlmICh0dG5wcm90byA9PSBOUF9LNVUyVSkgeworICAgICAgICBpZiAoKHggPSBrcmI1X3UydV9y ZWFkKHR0eWZkLG15YnVmLHNpemVvZihteWJ1ZikpKSA8IDApCisJICByZXR1cm4oLTEpOworICAg ICAgICBlbHNlCisJICByZXR1cm4oeCk7CisgICAgfQorI2VuZGlmIC8qIEtSQjVfVTJVICovCisj ZW5kaWYgLyogS1JCNSAqLworI2VuZGlmIC8qIENLX0tFUkJFUk9TICovCisKKyAgICBlcnJubyA9 IDA7CisgICAgZGVidWcoRjEwMSwibXlmaWxsYnVmIGNhbGxpbmcgRklPTlJFQUQgaW9jdGwiLCIi LHhsb2NhbCk7CisgICAgeCA9IGlvY3RsKGZkLCBGSU9OUkVBRCwgJmF2YWlsKTsKKyNpZmRlZiBE RUJVRworICAgIGlmIChkZWJsb2cpIHsKKwlkZWJ1ZyhGMTAxLCJteWZpbGxidWYgRklPTlJFQUQi LCIiLHgpOworCWRlYnVnKEYxMDEsIm15ZmlsbGJ1ZiBGSU9OUkVBRCBhdmFpbCIsIiIsYXZhaWwp OworCWRlYnVnKEYxMDEsIm15ZmlsbGJ1ZiBGSU9OUkVBRCBlcnJubyIsIiIsZXJybm8pOworICAg IH0KKyNlbmRpZiAvKiBERUJVRyAqLworICAgIGlmICh4IDwgMCB8fCBhdmFpbCA9PSAwKQorICAg ICAgYXZhaWwgPSAxOworCisgICAgaWYgKGF2YWlsID4gTVlCVUZMRU4pCisgICAgICBhdmFpbCA9 IE1ZQlVGTEVOOworCisgICAgZXJybm8gPSAwOworCisgICAgeCA9IHJlYWQoZmQsIG15YnVmLCAo aW50KSBhdmFpbCk7CisjaWZkZWYgREVCVUcKKyAgICBpZiAoZGVibG9nKSB7CisJZGVidWcoRjEw MSwibXlmaWxsYnVmIGF2YWlsIiwiIixhdmFpbCk7CisJZGVidWcoRjEwMSwibXlmaWxsYnVmIHJl YWQiLCIiLHgpOworCWRlYnVnKEYxMDEsIm15ZmlsbGJ1ZiByZWFkIGVycm5vIiwiIixlcnJubyk7 CisgICAgICAgIGlmICh4ID4gMCkKKwkgIGNraGV4ZHVtcCgibXlmaWxsYnVmIG15YnVmIixteWJ1 Zix4KTsKKyAgICB9CisjZW5kaWYgLyogREVCVUcgKi8KKyAgICBpZiAoeCA8IDEpIHggPSAtMzsJ CQkvKiByZWFkIDAgPT0gY29ubmVjdGlvbiBsb3NzICovCisgICAgcmV0dXJuKHgpOworfQorCisj ZWxzZSAvKiAhRklPTlJFQUQgKi8KKy8qIEFkZCBvdGhlciBzeXN0ZW1zIGhlcmUsIGJldHdlZW4g I2lmZGVmIGFuZCAjZWxzZSwgZS5nLiBORVRDT05OLiAqLworLyogV2hlbiB0aGVyZSBpcyBubyBv dGhlciBwb3NzaWJpbGl0eSwgcmVhZCAxIGNoYXJhY3RlciBhdCBhIHRpbWUuICovCitpbnQKK215 ZmlsbGJ1ZigpIHsKKyAgICBpbnQgeDsKKworI2lmZGVmIENLX1NTTAorICAgIGlmIChzc2xfYWN0 aXZlX2ZsYWcgfHwgdGxzX2FjdGl2ZV9mbGFnKSB7CisgICAgICAgIGludCBlcnJvciwgbiA9IDA7 CisgICAgICAgIHdoaWxlIChuID09IDApIHsKKyAgICAgICAgICAgIGlmIChzc2xfYWN0aXZlX2Zs YWcpCisJICAgICAgbiA9IFNTTF9yZWFkKHNzbF9jb24sIChjaGFyICopbXlidWYsIHNpemVvZiht eWJ1ZikpOworICAgICAgICAgICAgZWxzZQorCSAgICAgIGNvdW50ID0gU1NMX3JlYWQodGxzX2Nv biwgKGNoYXIgKilteWJ1Ziwgc2l6ZW9mKG15YnVmKSk7CisgICAgICAgICAgICBzd2l0Y2ggKFNT TF9nZXRfZXJyb3Ioc3NsX2FjdGl2ZV9mbGFnP3NzbF9jb246dGxzX2NvbixuKSkgeworCSAgICAg IGNhc2UgU1NMX0VSUk9SX05PTkU6CisgICAgICAgICAgICAgICAgaWYgKG4gPiAwKQorCQkgIHJl dHVybihuKTsKKyAgICAgICAgICAgICAgICBpZiAobiA8IDApCisJCSAgcmV0dXJuKC0yKTsKKyAg ICAgICAgICAgICAgICBtc2xlZXAoNTApOworICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICAg IGNhc2UgU1NMX0VSUk9SX1dBTlRfV1JJVEU6CisJICAgICAgY2FzZSBTU0xfRVJST1JfV0FOVF9S RUFEOgorICAgICAgICAgICAgICAgIHJldHVybigtMSk7CisJICAgICAgY2FzZSBTU0xfRVJST1Jf U1lTQ0FMTDoKKwkJaWYgKG4gIT0gMCkKKwkJICByZXR1cm4oLTEpOworCSAgICAgIGNhc2UgU1NM X0VSUk9SX1dBTlRfWDUwOV9MT09LVVA6CisJICAgICAgY2FzZSBTU0xfRVJST1JfU1NMOgorCSAg ICAgIGNhc2UgU1NMX0VSUk9SX1pFUk9fUkVUVVJOOgorCSAgICAgIGRlZmF1bHQ6CisgICAgICAg ICAgICAgICAgdHRjbG9zKDApOworICAgICAgICAgICAgICAgIHJldHVybigtMik7CisgICAgICAg ICAgICB9CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgLyogQ0tfU1NMICovCisjaWZkZWYgQ0tf S0VSQkVST1MKKyNpZmRlZiBLUkI0CisjaWZkZWYgUkxPR0NPREUKKyAgICBpZiAodHRucHJvdG8g PT0gTlBfRUs0TE9HSU4pIHsKKyAgICAgICAgaWYgKChsZW4gPSBrcmI0X2Rlc19yZWFkKHR0eWZk LG15YnVmLHNpemVvZihteWJ1ZikpKSA8IDApCisJICByZXR1cm4oLTEpOworICAgICAgICBlbHNl CisJICByZXR1cm4obGVuKTsKKyAgICB9CisjZW5kaWYgLyogUkxPR0NPREUgKi8KKyNlbmRpZiAv KiBLUkI0ICovCisjaWZkZWYgS1JCNQorI2lmZGVmIFJMT0dDT0RFCisgICAgaWYgKHR0bnByb3Rv ID09IE5QX0VLNUxPR0lOKSB7CisgICAgICAgIGlmICgobGVuID0ga3JiNV9kZXNfcmVhZCh0dHlm ZCxteWJ1ZixzaXplb2YobXlidWYpLDApKSA8IDApCisJICByZXR1cm4oLTEpOworICAgICAgICBl bHNlCisJICByZXR1cm4obGVuKTsKKyAgICB9CisjZW5kaWYgLyogUkxPR0NPREUgKi8KKyNpZmRl ZiBLUkI1X1UyVQorICAgIGlmICh0dG5wcm90byA9PSBOUF9LNVUyVSkgeworICAgICAgICBpZiAo KGxlbiA9IGtyYjVfdTJ1X3JlYWQodHR5ZmQsbXlidWYsc2l6ZW9mKG15YnVmKSkpIDwgMCkKKwkg IHJldHVybigtMSk7CisgICAgICAgIGVsc2UKKwkgIHJldHVybihsZW4pOworICAgIH0KKyNlbmRp ZiAvKiBLUkI1X1UyVSAqLworI2VuZGlmIC8qIEtSQjUgKi8KKyNlbmRpZiAvKiBDS19LRVJCRVJP UyAqLworCisjaWZkZWYgTkVUQ01ECisgICAgaWYgKHR0cGlwZSkKKyAgICAgIGZkID0gZmRpbjsK KyAgICBlbHNlCisjZW5kaWYgLyogTkVUQ01EICovCisgICAgICBmZCA9IHR0eWZkOworICAgIHgg PSByZWFkKGZkLCBteWJ1ZiwgMSk7CisgICAgcmV0dXJuKHggPiAwID8geCA6IC0zKTsKK30KKwor I2VuZGlmIC8qICFGSU9OUkVBRCAqLworI2VuZGlmIC8qICFhZWdpcyAqLworI2VuZGlmIC8qICFB VFRTViAqLworCisjZW5kaWYgLyogTVlSRUFEICovCisKKy8qICBUIFQgXyBUIE4gTyBQIFQgIC0t ICBIYW5kbGUgVGVsbmV0IG5lZ290aW9ucyBpbiBpbmNvbWluZyBkYXRhICovCisvKgorICBDYWxs IHdpdGggdGhlIElBQyB0aGF0IHdhcyBlbmNvdW50ZXJlZC4KKyAgUmV0dXJuczoKKyAgIC0zOiBJ ZiBjb25uZWN0aW9uIGhhcyBkcm9wcGVkIG9yIGdvbmUgYmFkLgorICAgLTI6IE9uIFRlbG5ldCBw cm90b2NvbCBlcnJvciByZXN1bHRpbmcgaW4gaW5jb25zaXN0ZW50IHN0YXRlcy4KKyAgICAwOiBJ ZiBuZWdvdGlhdGlvbiBPSyBhbmQgY2FsbGVyIGhhcyBub3RoaW5nIHRvIGRvLgorICAgIDE6IElm IHBhY2tldCBzdGFydCBjaGFyYWN0ZXIgaGFzIGNoYW5nZWQgKG5ldyB2YWx1ZSBpcyBpbiBnbG9i YWwgc3RjaHIpLgorICAyNTU6IElmIHRoZXJlIHdhcyBhIHF1b3RlZCBJQUMgYXMgZGF0YS4KKyAg IG9yOiBOb3QgYXQgYWxsIGlmIHdlIGdvdCBhIGxlZ2l0aW1hdGUgVGVsbmV0IExvZ291dCByZXF1 ZXN0LgorKi8KKyNpZmRlZiBUQ1BTT0NLRVQKK3N0YXRpYyBpbnQKK3R0X3Rub3B0KG4pIGludCBu OyB7CQkJLyogSGFuZGxlIFRlbG5ldCBvcHRpb25zICovCisgICAgLyogSW4gY2FzZSBjYWxsZXIg ZGlkIG5vdCBhbHJlYWR5IGNoZWNrIHRoZXNlIGNvbmRpdGlvbnMuLi4gICovCisgICAgaWYgKG4g PT0gSUFDICYmCisJKCh4bG9jYWwgJiYgbmV0Y29ubiAmJiBJU19URUxORVQoKSkgfHwKKwkgKCF4 bG9jYWwgJiYgc3N0ZWxuZXQpKSkgeworCWV4dGVybiBpbnQgc2VydmVyOworCWludCB0eCA9IDA7 CisJZGVidWcoRjEwMCwidHRpbmwgY2FsbGluZyB0bl9kb29wKCkiLCIiLDApOworCXR4ID0gdG5f ZG9vcCgoQ0hBUikobiAmIDB4ZmYpLGR1cGxleCx0dGluYyk7CisJZGVidWcoRjExMSwidHRpbmwg dG5fZG9vcCgpIHJldHVybmVkIiwidHgiLHR4KTsKKwlzd2l0Y2ggKHR4KSB7CisJICBjYXNlIDA6 CisJICAgIHJldHVybigwKTsKKwkgIGNhc2UgLTE6CQkJLyogSS9PIGVycm9yICovCisJICAgIHR0 aW1vZmYoKTsJCQkvKiBUdXJuIG9mZiB0aW1lciAqLworCSAgICByZXR1cm4oLTMpOworICAgICAg ICAgIGNhc2UgLTI6CQkJLyogQ29ubmVjdGlvbiBmYWlsZWQuICovCisgICAgICAgICAgY2FzZSAt MzoKKwkgICAgdHRpbW9mZigpOwkJCS8qIFR1cm4gb2ZmIHRpbWVyICovCisJICAgIHR0Y2xvcygw KTsKKwkgICAgcmV0dXJuKC0zKTsKKwkgIGNhc2UgMToJCQkvKiBFQ0hPIGNoYW5nZSAqLworCSAg ICBkdXBsZXggPSAxOworCSAgICByZXR1cm4oMCk7CisJICBjYXNlIDI6CQkJLyogRUNITyBjaGFu Z2UgKi8KKwkgICAgZHVwbGV4ID0gMDsKKwkgICAgcmV0dXJuKDApOworCSAgY2FzZSAzOgkJCS8q IFF1b3RlZCBJQUMgKi8KKwkgICAgbiA9IDI1NTsKKwkgICAgcmV0dXJuKCh1bnNpZ25lZCkyNTUp OworI2lmZGVmIElLU19PUFRJT04KKwkgIGNhc2UgNDogeworCSAgICAgIGlmIChURUxPUFRfU0Io VEVMT1BUX0tFUk1JVCkua2VybWl0LnVfc3RhcnQgJiYgc2VydmVyCisjaWZkZWYgSUtTRAorCQkg ICYmICFpbnNlcnZlcgorI2VuZGlmIC8qIElLU0QgKi8KKwkJICApIHsJCQkvKiBSZW1vdGUgaW4g U2VydmVyIG1vZGUgKi8KKwkJICB0dGltb2ZmKCk7CQkvKiBUdXJuIG9mZiB0aW1lciAqLworCQkg IGRlYnVnKEYxMDAsInVfc3RhcnQgYW5kICFpbnNlcnZlciIsIiIsMCk7CisJCSAgcmV0dXJuKC0y KTsJCS8qIEVuZCBzZXJ2ZXIgbW9kZSAqLworCSAgICAgIH0gZWxzZSBpZiAoIVRFTE9QVF9TQihU RUxPUFRfS0VSTUlUKS5rZXJtaXQubWVfc3RhcnQgJiYKKwkJCSBzZXJ2ZXIKKwkJCSApIHsJCS8q IEknbSBubyBsb25nZXIgaW4gU2VydmVyIE1vZGUgKi8KKwkJICBkZWJ1ZyhGMTAwLCJtZV9zdGFy dCBhbmQgc2VydmVyIiwiIiwwKTsKKwkJICB0dGltb2ZmKCk7CisJCSAgcmV0dXJuKC0yKTsKKwkg ICAgICB9CisJICAgICAgcmV0dXJuKDApOworCSAgfQorCSAgY2FzZSA1OiB7CQkJLyogU3RhcnQg Y2hhcmFjdGVyIGNoYW5nZSAqLworCSAgICAgIC8qIGV4dGVybiBDSEFSIHN0Y2hyOyAqLworCSAg ICAgIC8qIHN0YXJ0ID0gc3RjaHI7ICovCisJICAgICAgcmV0dXJuKDEpOworCSAgfQorI2VuZGlm IC8qIElLU19PUFRJT04gKi8KKwkgIGNhc2UgNjoJCQkvKiBSZW1vdGUgTG9nb3V0ICovCisJICAg IHR0aW1vZmYoKTsKKwkgICAgdHRjbG9zKDApOworI2lmZGVmIElLU0QKKwkgICAgaWYgKGluc2Vy dmVyICYmICFsb2NhbCkKKwkgICAgICBkb2V4aXQoR09PRF9FWElULDApOworCSAgICBlbHNlCisj ZW5kaWYgLyogSUtTRCAqLworCSAgICAgIHJldHVybigtMik7CisJICBkZWZhdWx0OgorCSAgICBy ZXR1cm4oMCk7CisJfQorICAgIH0gZWxzZQorICAgICAgcmV0dXJuKDApOworfQorI2VuZGlmIC8q IFRDUFNPQ0tFVCAqLworCisvKiAgVCBUIEYgTCBVIEkgIC0tICBGbHVzaCB0dHkgaW5wdXQgYnVm ZmVyICovCisKK3ZvaWQKK3R0Zmx1eCgpIHsJCQkJLyogQnV0IGZpcnN0Li4uICovCisjaWZkZWYg TVlSRUFECisvKgorICBGbHVzaCBpbnRlcm5hbCBNWVJFQUQgYnVmZmVyLgorKi8KKyNpZmRlZiBU Q1BTT0NLRVQKKyAgICBpbnQgZG90bm9wdHMsIHg7CisgICAgZG90bm9wdHMgPSAoKCh4bG9jYWwg JiYgbmV0Y29ubiAmJiBJU19URUxORVQoKSkgfHwKKwkJICgheGxvY2FsICYmIHNzdGVsbmV0KSkp OworI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLworICAgIGRlYnVnKEYxMDEsInR0Zmx1eCBteV9jb3Vu dCIsIiIsbXlfY291bnQpOworI2lmZGVmIFRDUFNPQ0tFVAorICAgIGlmIChkb3Rub3B0cykgewor CUNIQVIgY2ggPSAnXDAnOworICAgICAgICB3aGlsZSAobXlfY291bnQgPiAwKSB7CisJICAgIGNo ID0gbXlyZWFkKCk7CisjaWZkZWYgQ0tfRU5DUllQVElPTgorICAgICAgICAgICAgaWYgKFRFTE9Q VF9VKFRFTE9QVF9FTkNSWVBUSU9OKSkKKwkgICAgICBja190bl9kZWNyeXB0KChjaGFyICopJmNo LDEpOworI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KKyAgICAgICAgICAgIGlmIChjaCA9PSBJ QUMpCisJICAgICAgeCA9IHR0X3Rub3B0KGNoKTsKKyAgICAgICAgfQorICAgIH0gZWxzZQorI2Vu ZGlmIC8qIFRDUFNPQ0tFVCAqLworI2lmZGVmIENPTU1FTlQKKyNpZmRlZiBDS19FTkNSWVBUSU9O CisgICAgaWYgKFRFTE9QVF9VKFRFTE9QVF9FTkNSWVBUSU9OKSAmJiBteV9jb3VudCA+IDApCisg ICAgICBja190bl9kZWNyeXB0KCZteWJ1ZltteV9pdGVtKzFdLG15X2NvdW50KTsKKyNlbmRpZiAv KiBDS19FTkNSWVBUSU9OICovCisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgIG15X2NvdW50ID0g MDsJCQkvKiBSZXNldCBjb3VudCB0byB6ZXJvICovCisgICAgbXlfaXRlbSA9IC0xOwkJCS8qIEFu ZCBidWZmZXIgaW5kZXggdG8gLTEgKi8KKyNlbmRpZiAvKiBNWVJFQUQgKi8KK30KKworaW50Cit0 dGZsdWkoKSB7CisgICAgaW50IG4sIGZkOworI2lmZGVmIFRDUFNPQ0tFVAorICAgIGludCBkb3Ru b3B0czsKKyAgICBkb3Rub3B0cyA9ICgoKHhsb2NhbCAmJiBuZXRjb25uICYmIElTX1RFTE5FVCgp KSB8fAorCQkgKCF4bG9jYWwgJiYgc3N0ZWxuZXQpKSk7CisjZW5kaWYgLyogVENQU09DS0VUICov CisKKyNpZmRlZiBORVRDTUQKKyAgICBpZiAodHRwaXBlKQorICAgICAgZmQgPSBmZGluOworICAg IGVsc2UKKyNlbmRpZiAvKiBORVRDTUQgKi8KKyAgICAgIGZkID0gdHR5ZmQ7CisKKyNpZmRlZiBU VExFQlVGCisgICAgdHRwdXNoID0gLTE7CQkJLyogQ2xlYXIgdGhlIHBlZWstYWhlYWQgY2hhciAq LworICAgIHdoaWxlIChsZV9kYXRhICYmIChsZV9pbmJ1ZigpID4gMCkpIHsKKyAgICAgICAgQ0hB UiBjaCA9ICdcMCc7CisgICAgICAgIGlmIChsZV9nZXRjaGFyKCZjaCkgPiAwKSB7CS8qIENsZWFy IGFueSBtb3JlLi4uICovCisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJ0dGZsdWkgbGVfaW5idWYg Y2giLCIiLGNoKTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBUVExFQlVGICovCisgICAg ZGVidWcoRjEwMSwidHRmbHVpIHR0cGlwZSIsIiIsdHRwaXBlKTsKKworI2lmZGVmIE1ZUkVBRAor LyoKKyAgRmx1c2ggaW50ZXJuYWwgTVlSRUFEIGJ1ZmZlciAqTkVYVCosIGluIGFsbCBjYXNlcy4K KyovCisgICAgdHRmbHV4KCk7CisjZW5kaWYgLyogTVlSRUFEICovCisKKyNpZmRlZiBORVRDT05O CisvKiBOZXR3b3JrIGZsdXNoIGlzIGRvbmUgc3BlY2lhbGx5LCBpbiB0aGUgbmV0d29yayBzdXBw b3J0IG1vZHVsZS4gKi8KKyAgICBpZiAoKG5ldGNvbm4gfHwgc3N0ZWxuZXQpICYmICF0dHBpcGUg JiYgIXR0cHR5KSB7CisJZGVidWcoRjEwMCwidHRmbHVpIG5ldGZsdWkiLCIiLDApOworI2lmZGVm IENPTU1FTlQKKyNpZmRlZiBUTl9DT01QT1JUCisJaWYgKGlzdG5jb21wb3J0KCkpCisgICAgICAg ICAgICB0bmNfc2VuZF9wdXJnZV9kYXRhKFROQ19QVVJHRV9SRUNFSVZFKTsKKyNlbmRpZiAvKiBU Tl9DT01QT1JUICovCisjZW5kaWYgLyogQ09NTUVOVCAqLworCXJldHVybihuZXRmbHVpKCkpOwor ICAgIH0KKyNlbmRpZiAvKiBORVRDT05OICovCisKKyAgICBkZWJ1ZyhGMTAxLCJ0dGZsdWkgdHR5 ZmQiLCIiLHR0eWZkKTsgLyogTm90IG5ldHdvcmsgKi8KKyAgICBpZiAodHR5ZmQgPCAwKQorICAg ICAgcmV0dXJuKC0xKTsKKworI2lmZGVmIGFlZ2lzCisgICAgc2lvXyRjb250cm9sKChzaG9ydCl5 ZmQsIHNpb18kZmx1c2hfaW4sIHRydWUsIHN0KTsKKyAgICBpZiAoc3QuYWxsICE9IHN0YXR1c18k b2spIHsKKwlmcHJpbnRmKHN0ZGVyciwgImZsdXNoIGZhaWxlZDogIik7IGVycm9yXyRwcmludChz dCk7CisgICAgfSBlbHNlIHsgICAgICAvKiBzb21ldGltZXMgdGhlIGZsdXNoIGRvZXNuJ3Qgd29y ayAqLworICAgICAgICBmb3IgKDs7KSB7CisJICAgIGNoYXIgYnVmWzI1Nl07CisgICAgICAgICAg ICAvKiBlYXQgYWxsIHRoZSBjaGFyYWN0ZXJzIHRoYXQgc2hvdWxkbid0IGJlIGF2YWlsYWJsZSAq LworICAgICAgICAgICAgaW9zXyRnZXQoKHNob3J0KWZkLCBpb3NfJGNvbmRfb3B0LCBidWYsIDI1 NkwsIHN0KTsgLyogKHZvaWQpICovCisgICAgICAgICAgICBpZiAoc3QuYWxsID09IGlvc18kZ2V0 X2NvbmRpdGlvbmFsX2ZhaWxlZCkgYnJlYWs7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwg ImZsdXNoIGZhaWxlZCgyKTogIik7IGVycm9yXyRwcmludChzdCk7CisgICAgICAgIH0KKyAgICB9 CisjZWxzZQorI2lmZGVmIEJTRDQ0CQkJCS8qIDQuNCBCU0QgKi8KKyAgICBuID0gRlJFQUQ7ICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBTcGVjaWZ5IHJlYWQgcXVldWUgKi8KKyAgICBkZWJ1 ZyhGMTAwLCJ0dGZsdWkgQlNENDQiLCIiLDApOworICAgIGlvY3RsKGZkLFRJT0NGTFVTSCwmbik7 CisjZWxzZQorI2lmZGVmIFBsYW45CisjdW5kZWYgUE9TSVgJCQkJLyogVWggb2guLi4gKi8KKyNl bmRpZiAvKiBQbGFuOSAqLworI2lmZGVmIFBPU0lYCQkJCS8qIFBPU0lYICovCisgICAgZGVidWco RjEwMCwidHRmbHVpIFBPU0lYIiwiIiwwKTsKKyAgICB0Y2ZsdXNoKGZkLFRDSUZMVVNIKTsKKyNl bHNlCisjaWZkZWYgQVRUU1YJCQkJLyogU3lzdGVtIFYgKi8KKyNpZm5kZWYgVlhWRQorICAgIGRl YnVnKEYxMDAsInR0Zmx1aSBBVFRTViIsIiIsMCk7CisgICAgaW9jdGwoZmQsVENGTFNILDApOwor I2VuZGlmIC8qIFZYVkUgKi8KKyNlbHNlCQkJCQkvKiBOb3QgQlNENDQsIFBPU0lYLCBvciBTeXMg ViAqLworI2lmZGVmIFRJT0NGTFVTSAkJCS8qIFRob3NlIHdpdGggVElPQ0ZMVVNIIGRlZmluZWQg Ki8KKyNpZmRlZiBBTllCU0QJCQkJLyogQmVya2VsZXkgKi8KKyAgICBuID0gRlJFQUQ7ICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBTcGVjaWZ5IHJlYWQgcXVldWUgKi8KKyAgICBkZWJ1ZyhG MTAwLCJ0dGZsdWkgVElPQ0ZMVVNIIEFOWUJTRCIsIiIsMCk7CisgICAgaW9jdGwoZmQsVElPQ0ZM VVNILCZuKTsKKyNlbHNlCQkJCQkvKiBPdGhlcnMgKFY3LCBldGMpICovCisgICAgZGVidWcoRjEw MCwidHRmbHVpIFRJT0NGTFVTSCIsIiIsMCk7CisgICAgaW9jdGwoZmQsVElPQ0ZMVVNILDApOwor I2VuZGlmIC8qIEFOWUJTRCAqLworI2Vsc2UJCQkJCS8qIEFsbCBvdGhlcnMuLi4gKi8KKy8qCisg IE5vIHN5c3RlbSBjYWxsICh0aGF0IHdlIGtub3cgYWJvdXQpIGZvciBpbnB1dCBidWZmZXIgZmx1 c2hpbmcuCisgIFNvIHNlZSBob3cgbWFueSB0aGVyZSBhcmUgYW5kIHJlYWQgdGhlbSBpbiBhIGxv b3AsIHVzaW5nIHR0aW5jKCkuCisgIHR0aW5jKCkgaXMgYnVmZmVyZWQsIHNvIHdlJ3JlIG5vdCBn ZXR0aW5nIGNoYXJnZWQgd2l0aCBhIHN5c3RlbSBjYWxsCisgIHBlciBjaGFyYWN0ZXIsIGp1c3Qg YSBmdW5jdGlvbiBjYWxsLgorKi8KKyAgICBpZiAoKG4gPSB0dGNoaygpKSA+IDApIHsKKwlkZWJ1 ZyhGMTAxLCJ0dGZsdWkgcmVhZCBsb29wIiwiIixuKTsKKwl3aGlsZSAoKG4tLSkgJiYgdHRpbmMo MCkgPiAwKSA7CisgICAgfQorI2VuZGlmIC8qIFRJT0NGTFVTSCAqLworI2VuZGlmIC8qIEFUVFNW ICovCisjZW5kaWYgLyogUE9TSVggKi8KKyNpZmRlZiBQbGFuOQorI2RlZmluZSBQT1NJWAorI2Vu ZGlmIC8qIFBsYW45ICovCisjZW5kaWYgLyogQlNENDQgKi8KKyNlbmRpZiAvKiBhZWdpcyAqLwor ICAgIHJldHVybigwKTsKK30KKworaW50Cit0dGZsdW8oKSB7CQkJCS8qIEZsdXNoIG91dHB1dCBi dWZmZXIgKi8KKyAgICBpbnQgZmQ7CisjaWZkZWYgTkVUQ01ECisgICAgaWYgKHR0cGlwZSkKKyAg ICAgIGZkID0gZmRvdXQ7CisgICAgZWxzZQorI2VuZGlmIC8qIE5FVENNRCAqLworICAgICAgZmQg PSB0dHlmZDsKKworI2lmZGVmIFBsYW45CisgICAgcmV0dXJuIDA7CisjZWxzZQorI2lmZGVmIFBP U0lYCisgICAgcmV0dXJuKHRjZmx1c2goZmQsVENPRkxVU0gpKTsKKyNlbHNlCisjaWZkZWYgT1hP UworICAgIHJldHVybihpb2N0bChmZCxUQ0ZMU0gsMSkpOworI2Vsc2UKKyAgICByZXR1cm4oMCk7 CQkJCS8qIEFsbCBvdGhlcnMsIG5vdGhpbmcgKi8KKyNlbmRpZiAvKiBPWE9TICovCisjZW5kaWYg LyogUE9TSVggKi8KKyNlbmRpZiAvKiBQbGFuOSAqLworfQorCisvKiBJbnRlcnJ1cHQgRnVuY3Rp b25zICovCisKKy8qIFNldCB1cCB0ZXJtaW5hbCBpbnRlcnJ1cHRzIG9uIGNvbnNvbGUgdGVybWlu YWwgKi8KKworI2lmbmRlZiBGSU9OUkVBRAkJCS8qIFdlIGRvbid0IG5lZWQgZXNjdHJwKCkgKi8K KyNpZm5kZWYgU0VMRUNUCQkJCS8qIGlmIHdlIGhhdmUgYW55IG9mIHRoZXNlLi4uICovCisjaWZu ZGVmIENLX1BPTEwKKyNpZm5kZWYgUkRDSEsKKworI2lmbmRlZiBPWE9TCisjaWZkZWYgU1ZPUlBP U0lYCitTSUdUWVAKK2VzY3RycChmb28pIGludCBmb287IHsJCQkvKiB0cmFwIGNvbnNvbGUgZXNj YXBlcyAoXlwpICovCisgICAgc2lnbmFsKFNJR1FVSVQsU0lHX0lHTik7ICAgICAgICAgICAgLyog aWdub3JlIHVudGlsIHRyYXBwZWQgKi8KKyAgICBjb25lc2MgPSAxOworICAgIGRlYnVnKEYxMDEs ImVzY3RycCBjYXVnaHQgU0lHUVVJVCIsIiIsY29uZXNjKTsKK30KKyNlbmRpZiAvKiBTVk9SUE9T SVggKi8KKyNlbmRpZiAvKiBPWE9TICovCisKKyNpZmRlZiBWNworI2lmbmRlZiBNSU5JWDIKK1NJ R1RZUAorZXNjdHJwKGZvbykgaW50IGZvbzsgewkJCS8qIHRyYXAgY29uc29sZSBlc2NhcGVzIChe XCkgKi8KKyAgICBzaWduYWwoU0lHUVVJVCxTSUdfSUdOKTsgICAgICAgICAgICAvKiBpZ25vcmUg dW50aWwgdHJhcHBlZCAqLworICAgIGNvbmVzYyA9IDE7CisgICAgZGVidWcoRjEwMSwiZXNjdHJw IGNhdWdodCBTSUdRVUlUIiwiIixjb25lc2MpOworfQorI2VuZGlmIC8qIE1JTklYMiAqLworI2Vu ZGlmIC8qIFY3ICovCisKKyNpZmRlZiBDNzAKK1NJR1RZUAorZXNjdHJwKGZvbykgaW50IGZvbzsg ewkJCS8qIHRyYXAgY29uc29sZSBlc2NhcGVzICheXCkgKi8KKyAgICBjb25lc2MgPSAxOworICAg IHNpZ25hbChTSUdRVUlULFNJR19JR04pOyAgICAgICAgICAgIC8qIGlnbm9yZSB1bnRpbCB0cmFw cGVkICovCit9CisjZW5kaWYgLyogQzcwICovCisKKyNlbmRpZiAvKiBSRENISyAqLworI2VuZGlm IC8qIENLX1BPTEwgKi8KKyNlbmRpZiAvKiBTRUxFQ1QgKi8KKyNlbmRpZiAvKiBGSU9OUkVBRCAq LworCisvKiAgQyBPIE4gQiBHIFQgIC0tICBCYWNrZ3JvdW5kIFRlc3QgICovCisKK3N0YXRpYyBp bnQgamMgPSAwOwkJCS8qIDAgPSBubyBqb2IgY29udHJvbCAqLworCisvKgorICBDYWxsIHdpdGgg ZmxhZyA9PSAxIHRvIHByZXZlbnQgc2lnbmFsIHRlc3QsIHdoaWNoIGNhbiBub3QgYmUgZXhwZWN0 ZWQKKyAgdG8gd29yayBkdXJpbmcgZmlsZSB0cmFuc2Zlciwgd2hlbiBTSUdJTlQgcHJvYmFibHkg KmlzKiBzZXQgdG8gU0lHX0lHTi4KKworICBDYWxsIHdpdGggZmxhZyA9PSAwIHRvIHVzZSB0aGUg c2lnbmFsIHRlc3QsIGJ1dCBvbmx5IGlmIHRoZSBwcm9jZXNzLWdyb3VwCisgIHRlc3QgZmFpbHMs IGFzIGl0IGRvZXMgb24gc29tZSBVTklYIHN5c3RlbXMsIHdoZXJlIGdldHBncnAoKSBpcyBidWdn eSwKKyAgcmVxdWlyZXMgYW4gYXJndW1lbnQgd2hlbiB0aGUgbWFuIHBhZ2Ugc2F5cyBpdCBkb2Vz bid0LCBvciB2aWNlIHZlcnNhLgorCisgIElmIGZsYWcgPT0gMCBhbmQgdGhlIHByb2Nlc3MtZ3Jv dXAgdGVzdCBmYWlscywgdGhlbiB3ZSBkZXRlcm1pbmUgYmFja2dyb3VuZAorICBzdGF0dXMgc2lt cGx5IChidXQgbm90IG5lY2Vzc2FyaWx5IHJlbGlhYmx5KSBmcm9tIGlzYXR0eSgpLgorCisgIGNv bmJndCgpIHNldHMgdGhlIGdsb2JhbCBiYWNrZ3JkID0gMSBpZiB3ZSBhcHBlYXIgdG8gYmUgaW4g dGhlIGJhY2tncm91bmQsCisgIGFuZCB0byAwIGlmIHdlIHNlZW0gdG8gYmUgaW4gdGhlIGZvcmVn cm91bmQuICBjb25iZ3QoKSBpcyBoaWdobHkgcHJvbmUgdG8KKyAgbWlzYmVoYXZpb3IuCisqLwor Vk9JRAorY29uYmd0KGZsYWcpIGludCBmbGFnOyB7CisgICAgaW50IHggPSAtMSwJCQkJLyogcHJv Y2VzcyBncm91cCBvciBTSUdJTlQgdGVzdCAqLworICAgICAgICB5ID0gMDsJCQkJLyogaXNhdHR5 KCkgdGVzdCAqLworLyoKKyAgQ2hlY2sgZm9yIGJhY2tncm91bmQgb3BlcmF0aW9uLCBldmVuIGlm IG5vdCBydW5uaW5nIG9uIHJlYWwgdHR5LCBzbyB0aGF0CisgIGJhY2tncm91bmQgZmxhZyBjYW4g YmUgc2V0IGNvcnJlY3RseS4gIElmIGJhY2tncm91bmQgc3RhdHVzIGlzIGRldGVjdGVkLAorICB0 aGVuIEtlcm1pdCB3aWxsIG5vdCBpc3N1ZSBpdHMgaW50ZXJhY3RpdmUgcHJvbXB0IG9yIG1vc3Qg bWVzc2FnZXMuCisgIElmIHlvdXIgcHJvbXB0IGdvZXMgYXdheSwgeW91IGNhbiBibGFtZSAoYW5k IGZpeD8pIHRoaXMgZnVuY3Rpb24uCisqLworCisvKiBVc2UgcHJvY2Vzcy1ncm91cCB0ZXN0IGlm IHBvc3NpYmxlLiAqLworCisjaWZkZWYgUE9TSVgJCQkJLyogV2UgY2FuIGRvIGl0IGluIFBPU0lY ICovCisjZGVmaW5lIFBHUk9VUF9UCisjZWxzZQorI2lmZGVmIEJTRDQJCQkJLyogYW5kIGluIEJT RCA0LnguICovCisjZGVmaW5lIFBHUk9VUF9UCisjZWxzZQorI2lmZGVmIEhQVVhKT0JDVEwJCQkv KiBhbmQgaW4gbW9zdCBIUC1VWCdzICovCisjZGVmaW5lIFBHUk9VUF9UCisjZWxzZQorI2lmZGVm IFRJT0NHUEdSUAkJCS8qIGFuZCBhbnlwbGFjZSB0aGF0IGhhcyB0aGlzIGlvY3RsLiAqLworI2Rl ZmluZSBQR1JPVVBfVAorI2VuZGlmIC8qIFRJT0NHUEdSUCAqLworI2VuZGlmIC8qIEhQVVhKT0JD VEwgKi8KKyNlbmRpZiAvKiBCU0Q0ICovCisjZW5kaWYgLyogUE9TSVggKi8KKworI2lmZGVmIE1J UFMJCQkJLyogRXhjZXB0IGlmIGl0IGRvZXNuJ3Qgd29yay4uLiAqLworI3VuZGVmIFBHUk9VUF9U CisjZW5kaWYgLyogTUlQUyAqLworCisjaWZkZWYgTUlOSVgKKyN1bmRlZiBQR1JPVVBfVAorI2Vu ZGlmCS8qIE1JTklYICovCisKKyNpZmRlZiBQR1JPVVBfVAorLyoKKyAgU2VtaS1yZWxpYWJsZSBw cm9jZXNzLWdyb3VwIHRlc3QuICBDaGVjayB3aGV0aGVyIHRoaXMgcHJvY2VzcydzIGdyb3VwIGlz CisgIHRoZSBzYW1lIGFzIHRoZSBjb250cm9sbGluZyB0ZXJtaW5hbCdzIHByb2Nlc3MgZ3JvdXAu ICBUaGlzIHdvcmtzIGlmIHRoZQorICBnZXRwZ3JwKCkgY2FsbCBkb2Vzbid0IGxpZSAoYXMgaXQg ZG9lcyBpbiB0aGUgU1VOT1MgU3lzdGVtIFYgZW52aXJvbm1lbnQpLgorKi8KKyAgICBQSURfVCBt eXBncnAgPSAoUElEX1QpMDsJCS8qIEtlcm1pdCdzIHByb2Nlc3MgZ3JvdXAgKi8KKyAgICBQSURf VCBjdHBncnAgPSAoUElEX1QpMDsJCS8qIFRoZSB0ZXJtaW5hbCdzIHByb2Nlc3MgZ3JvdXAgKi8K KyNpZm5kZWYgX1BPU0lYX1NPVVJDRQorLyoKKyAgVGhlIGdldHBncnAoKSBwcm90b3R5cGUgaXMg b2J0YWluZWQgZnJvbSBzeXN0ZW0gaGVhZGVyIGZpbGVzIGZvciBQT1NJWAorICBhbmQgU3lzIFYg UjQgY29tcGlsYXRpb25zLiAgT3RoZXIgc3lzdGVtcywgd2hvIGtub3dzLiAgU29tZSBjb21wbGFp biBhYm91dAorICBhIGR1cGxpY2F0ZSBkZWNsYXJhdGlvbiBoZXJlLCBvdGhlcnMgZG9uJ3QsIHNv IGl0J3Mgc2FmZXIgdG8gbGVhdmUgaXQgaW4KKyAgaWYgd2UgZG9uJ3Qga25vdyBmb3IgY2VydGFp bi4KKyovCisjaWZuZGVmIFNWUjQKKyNpZm5kZWYgUFMyQUlYMTAKKyNpZm5kZWYgSFBVWDkKKyAg ICBleHRlcm4gUElEX1QgZ2V0cGdycCgpOworI2VuZGlmIC8qIEhQVVg5ICovCisjZW5kaWYgLyog UFMyQUlYMTAgKi8KKyNlbmRpZiAvKiBTVlI0ICovCisjZW5kaWYgLyogX1BPU0lYX1NPVVJDRSAq LworCisvKiBHZXQgbXkgcHJvY2VzcyBncm91cC4gKi8KKworI2lmZGVmIFNWUjMgLyogTWF5YmUg dGhpcyBzaG91bGQgYmUgQVRUU1Y/ICovCisvKiBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBkZXNjcmli ZWQgaW4gU1ZJRCBSMiAqLworICAgIG15cGdycCA9IGdldHBncnAoKTsKKyAgICAvKiBkZWJ1ZyhG MTAxLCJBVFRTViBjb25iZ3QgcHJvY2VzcyBncm91cCIsIiIsKGludCkgbXlwZ3JwKTsgKi8KKyNl bHNlCisjaWZkZWYgUE9TSVgKKyAgICBteXBncnAgPSBnZXRwZ3JwKCk7CisgICAgLyogZGVidWco RjEwMSwiUE9TSVggY29uYmd0IHByb2Nlc3MgZ3JvdXAiLCIiLChpbnQpIG15cGdycCk7ICovCisj ZWxzZQorI2lmZGVmIE9TRlBDCisgICAgbXlwZ3JwID0gZ2V0cGdycCgpOworICAgIC8qIGRlYnVn KEYxMDEsIk9TRiBjb25iZ3QgcHJvY2VzcyBncm91cCIsIiIsKGludCkgbXlwZ3JwKTsgKi8KKyNl bHNlCisjaWZkZWYgUU5YCisgICAgbXlwZ3JwID0gZ2V0cGdycCgpOworICAgIC8qIGRlYnVnKEYx MDEsIlFOWCBjb25iZ3QgcHJvY2VzcyBncm91cCIsIiIsKGludCkgbXlwZ3JwKTsgKi8KKyNlbHNl CisjaWZkZWYgT1NGMzIJCQkJLyogKHdhcyBPU0Y0MCkgKi8KKyAgICBteXBncnAgPSBnZXRwZ3Jw KCk7CisgICAgLyogZGVidWcoRjEwMSwiRGlnaXRhbCBVTklYIGNvbmJndCBwcm9jZXNzIGdyb3Vw IiwiIiwoaW50KSBteXBncnApOyAqLworI2Vsc2UgLyogQlNELCBWNywgZXRjICovCisjaWZkZWYg TUlOSVgyCisgICAgbXlwZ3JwID0gZ2V0cGdycCgpOworI2Vsc2UKKyAgICBteXBncnAgPSBnZXRw Z3JwKDApOworI2VuZGlmIC8qIE1JTklYMiAqLworICAgIC8qIGRlYnVnKEYxMDEsIkJTRCBjb25i Z3QgcHJvY2VzcyBncm91cCIsIiIsKGludCkgbXlwZ3JwKTsgKi8KKyNlbmRpZiAvKiBPU0YzMiAq LworI2VuZGlmIC8qIFFOWCAqLworI2VuZGlmIC8qIE9TRlBDICovCisjZW5kaWYgLyogUE9TSVgg Ki8KKyNlbmRpZiAvKiBTVlIzICovCisKKyNpZmRlZiBNSU5JWAorICAgIC8qIE1JTklYIGRvZXMg bm90IHN1cHBvcnQgam9iIGNvbnRyb2wgc28gS2VybWl0IGlzIGFsd2F5cyBpbiBmb3JlZ3JvdW5k ICovCisgICAgeCA9IDA7CisKKyNlbHNlICAvKiBOb3QgTUlOSVggKi8KKworLyogTm93IGdldCBj b250cm9sbGluZyB0dHkncyBwcm9jZXNzIGdyb3VwICovCisjaWZkZWYgQlNENDRPUlBPU0lYCisg ICAgY3RwZ3JwID0gdGNnZXRwZ3JwKDEpOwkJLyogVGhlIFBPU0lYIHdheSAqLworICAgIC8qIGRl YnVnKEYxMDEsIlBPU0lYIGNvbmJndCB0ZXJtaW5hbCBwcm9jZXNzIGdyb3VwIiwiIiwoaW50KSBj dHBncnApOyAqLworI2Vsc2UKKyAgICBpb2N0bCgxLCBUSU9DR1BHUlAsICZjdHBncnApOwkvKiBP ciB0aGUgQlNEIHdheSAqLworICAgLyogZGVidWcoRjEwMSwibm9uLVBPU0lYIGNvbmJndCB0ZXJt aW5hbCBwcm9jZXNzIGdyb3VwIiwiIiwoaW50KSBjdHBncnApOyAqLworI2VuZGlmIC8qIEJTRDQ0 T1JQT1NJWCAqLworCisgICAgaWYgKChteXBncnAgPiAoUElEX1QpIDApICYmIChjdHBncnAgPiAo UElEX1QpIDApKQorICAgICAgeCA9IChteXBncnAgPT0gY3RwZ3JwKSA/IDAgOiAxOwkvKiBJZiB0 aGV5IGRpZmZlciwgdGhlbiBiYWNrZ3JvdW5kLiAqLworICAgIGVsc2UgeCA9IC0xOwkJCS8qIElm IGVycm9yLCByZW1lbWJlci4gKi8KKyAgICBkZWJ1ZyhGMTAxLCJjb25iZ3QgcHJvY2VzcyBncm91 cCB0ZXN0IiwiIix4KTsKKyNlbmRpZiAvKiBQR1JPVVBfVCAqLworI2VuZGlmCS8qIE1JTklYICov CisKKy8qIFRyeSB0byBzZWUgaWYgam9iIGNvbnRyb2wgaXMgYXZhaWxhYmxlICovCisKKyNpZmRl ZiBOT0pDCQkJCS8qIFVzZXIgb3ZlcnJpZGUgKi8KKyAgICBqYyA9IDA7CQkJCS8qIE5vIGpvYiBj b250cm9sIGFsbG93ZWQgKi8KKyAgICBkZWJ1ZyhGMTExLCJOT0pDIiwiamMiLGpjKTsKKyNlbHNl CisjaWZkZWYgQlNENDQKKyAgICBqYyA9IDE7CisjZWxzZQorI2lmZGVmIFNWUjRPUlBPU0lYCQkJ LyogUE9TSVggYWN0dWFsbHkgdGVsbHMgdXMgKi8KKyAgICBkZWJ1ZyhGMTAwLCJTVlI0T1JQT1NJ WCBqYyB0ZXN0Li4uIiwiIiwwKTsKKyNpZmRlZiBfU0NfSk9CX0NPTlRST0wKKyNpZmRlZiBfX2Jz ZGlfXworICAgIGpjID0gMTsKKyNlbHNlCisjaWZkZWYgX18zODZCU0RfXworICAgIGpjID0gMTsK KyNlbHNlCisgICAgamMgPSBzeXNjb25mKF9TQ19KT0JfQ09OVFJPTCk7CS8qIFdoYXRldmVyIHN5 c3RlbSBzYXlzICovCisgICAgaWYgKGpjIDwgMCkgeworCWRlYnVnKEYxMDEsInN5c2NvbmYgZmFp bHMsIGpjc2hlbGwiLCIiLGpjc2hlbGwpOworCWpjID0gKGpjaGRsciA9PSBTSUdfREZMKSA/IDEg OiAwOworICAgIH0gZWxzZQorICAgICAgZGVidWcoRjExMSwic3lzY29uZihfU0NfSk9CX0NPTlRS T0wpIiwiamMiLGpjKTsKKyNlbmRpZiAvKiBfXzM4NkJTRF9fICovCisjZW5kaWYgLyogX19ic2Rp X18gKi8KKyNlbHNlCisjaWZkZWYgX1BPU0lYX0pPQl9DT05UUk9MCisgICAgamMgPSAxOwkJCQkv KiBCeSBkZWZpbml0aW9uICovCisgICAgZGVidWcoRjExMSwiX1BPU0lYX0pPQl9DT05UUk9MIGlz IGRlZmluZWQiLCJqYyIsamMpOworI2Vsc2UKKyAgICBqYyA9IDA7CQkJCS8qIEFzc3VtZSBqb2Ig Y29udHJvbCBub3QgYWxsb3dlZCAqLworICAgIGRlYnVnKEYxMTEsIlNWUjRPUlBPU0lYIF9TQy9Q T1NJWF9KT0JfQ09OVFJPTCBub3QgZGVmaW5lZCIsImpjIixqYyk7CisjZW5kaWYgLyogX1BPU0lY X0pPQl9DT05UUk9MICovCisjZW5kaWYgLyogX1NDX0pPQl9DT05UUk9MICovCisjZWxzZQorI2lm ZGVmIEJTRDQKKyAgICBqYyA9IDE7CQkJCS8qIEpvYiBjb250cm9sIGFsbG93ZWQgKi8KKyAgICBk ZWJ1ZyhGMTExLCJCU0Qgam9iIGNvbnRyb2wiLCJqYyIsamMpOworI2Vsc2UKKyNpZmRlZiBTVlIz SkMKKyAgICBqYyA9IDE7CQkJCS8qIEpDIGFsbG93ZWQgKi8KKyAgICBkZWJ1ZyhGMTExLCJTVlIz IGpvYiBjb250cm9sIiwiamMiLGpjKTsKKyNlbHNlCisjaWZkZWYgT1hPUworICAgIGpjID0gMTsJ CQkJLyogSkMgYWxsb3dlZCAqLworICAgIGRlYnVnKEYxMTEsIlgvT1Mgam9iIGNvbnRyb2wiLCJq YyIsamMpOworI2Vsc2UKKyNpZmRlZiBIUFVYOQorICAgIGpjID0gMTsJCQkJLyogSkMgYWxsb3dl ZCAqLworICAgIGRlYnVnKEYxMTEsIkhQLVVYIDkuMCBqb2IgY29udHJvbCIsImpjIixqYyk7Cisj ZWxzZQorI2lmZGVmIEhQVVgxMAorICAgIGpjID0gMTsJCQkJLyogSkMgYWxsb3dlZCAqLworICAg IGRlYnVnKEYxMTEsIkhQLVVYIDEwLjAgam9iIGNvbnRyb2wiLCJqYyIsamMpOworI2Vsc2UKKyAg ICBqYyA9IDA7CQkJCS8qIEpDIG5vdCBhbGxvd2VkICovCisgICAgZGVidWcoRjExMSwiam9iIGNv bnRyb2wgY2F0Y2gtYWxsIiwiamMiLGpjKTsKKyNlbmRpZiAvKiBIUFVYMTAgKi8KKyNlbmRpZiAv KiBIUFVYOSAqLworI2VuZGlmIC8qIE9YT1MgKi8KKyNlbmRpZiAvKiBTVlIzSkMgKi8KKyNlbmRp ZiAvKiBCU0Q0ICovCisjZW5kaWYgLyogU1ZSNE9SUE9TSVggKi8KKyNlbmRpZiAvKiBCU0Q0NCAq LworI2VuZGlmIC8qIE5PSkMgKi8KKyAgICBkZWJ1ZyhGMTAxLCJjb25iZ3QgamMiLCIiLGpjKTsK KyNpZm5kZWYgTk9KQworICAgIGRlYnVnKEYxMDEsImNvbmJndCBqY3NoZWxsIiwiIixqY3NoZWxs KTsKKy8qCisgIEF0IHRoaXMgcG9pbnQsIGlmIGpjID09IDEgYnV0IGpjc2hlbGwgPT0gMCwgaXQg bWVhbnMgdGhhdCB0aGUgT1Mgc3VwcG9ydHMKKyAgam9iIGNvbnRyb2wsIGJ1dCB0aGUgc2hlbGwg b3Igb3RoZXIgcHJvY2VzcyB3ZSBhcmUgcnVubmluZyB1bmRlciBkb2VzIG5vdAorICAoamNzaGVs bCBpcyBzZXQgaW4gc3lzaW5pdCgpKSBhbmQgc28gaWYgd2Ugc3VzcGVuZCBvdXJzZWx2ZXMsIG5v dGhpbmcgZ29vZAorICB3aWxsIGNvbWUgb2YgaXQuICBTby4uLgorKi8KKyAgICBpZiAoamMgPCAw KSBqYyA9IDA7CisgICAgaWYgKGpjID4gMCAmJiBqY3NoZWxsID09IDApIGpjID0gMDsKKyNlbmRp ZiAvKiBOT0pDICovCisKKy8qCisgIEFub3RoZXIgYmFja2dyb3VuZCB0ZXN0LgorICBUZXN0IGlm IFNJR0lOVCAodGVybWluYWwgaW50ZXJydXB0KSBpcyBzZXQgdG8gU0lHX0lHTiAoaWdub3JlKSwK KyAgd2hpY2ggaXMgZG9uZSBieSB0aGUgc2hlbGwgKHNoKSBpZiB0aGUgcHJvZ3JhbSBpcyBzdGFy dGVkIHdpdGggJyYnLgorICBVbmZvcnR1bmF0ZWx5LCB0aGlzIGlzIE5PVCBkb25lIGJ5IGNzaCBv ciBrc2ggc28gd2F0Y2ggb3V0IQorICBOb3RlLCBpdCdzIHNhZmUgdG8gc2V0IFNJR0lOVCB0byBT SUdfSUdOIGhlcmUsIGJlY2F1c2UgZnVydGhlciBkb3duCisgIHdlIGFsd2F5cyBzZXQgaXQgdG8g c29tZXRoaW5nIGVsc2UuCisgIE5vdGU6IGFzIG9mIDE2IEp1bCAxOTk5LCB3ZSBhbHNvIHNraXAg dGhpcyB0ZXN0IGlmIHdlIHNldCBTSUdJTlQgdG8KKyAgU0lHX0lHTiBvdXJzZWx2ZXMuCisqLwor ICAgIGlmICh4IDwgMCAmJiAhZmxhZyAmJiAhc2lnaW50X2lnbikgeyAvKiBEaWRuJ3QgZ2V0IGdv b2QgcmVzdWx0cyBhYm92ZS4uLiAqLworCisJU0lHVFlQICgqb3NpZ2ludCkoKTsKKworCW9zaWdp bnQgPSBzaWduYWwoU0lHSU5ULFNJR19JR04pOwkvKiBXaGF0IGlzIFNJR0lOVCBzZXQgdG8/ICov CisJc2lnaW50X2lnbiA9IDE7CisJeCA9IChvc2lnaW50ID09IFNJR19JR04pID8gMSA6IDA7CS8q IFNJR19JR04/ICovCisJLyogZGVidWcoRjEwMSwiY29uYmd0IG9zaWdpbnQiLCIiLG9zaWdpbnQp OyAqLworCS8qIGRlYnVnKEYxMDEsImNvbmJndCBzaWduYWwgdGVzdCIsIiIseCk7ICovCisgICAg fQorCisvKiBBbHNvIGNoZWNrIHRvIHNlZSBpZiB3ZSdyZSBydW5uaW5nIHdpdGggcmVkaXJlY3Rl ZCBzdGRpby4gKi8KKy8qIFRoaXMgaXMgbm90IHJlYWxseSBiYWNrZ3JvdW5kIG9wZXJhdGlvbiwg YnV0IHdlIHdhbnQgdG8gYWN0IGFzIHRob3VnaCAqLworLyogaXQgd2VyZS4gKi8KKworI2lmZGVm IElLU0QKKyAgICBpZiAoaW5zZXJ2ZXIpIHsJCQkvKiBJbnRlcm5ldCBLZXJtaXQgU2VydmVyICov CisJYmFja2dyZCA9IDA7CQkJLyogaXMgbm90IGluIHRoZSBiYWNrZ3JvdW5kICovCisJcmV0dXJu OworICAgIH0KKyNlbmRpZiAvKiBJS1NEICovCisKKyAgICB5ID0gKGlzYXR0eSgwKSAmJiBpc2F0 dHkoMSkpID8gMSA6IDA7CisgICAgZGVidWcoRjEwMSwiY29uYmd0IGlzYXR0eSB0ZXN0IiwiIix5 KTsKKworI2lmZGVmIEJTRDI5CisvKiBUaGUgcHJvY2VzcyBncm91cCBhbmQvb3Igc2lnbmFsIHRl c3QgZG9lc24ndCB3b3JrIHVuZGVyIHRoZXNlLi4uICovCisgICAgYmFja2dyZCA9ICF5OworI2Vs c2UKKyNpZmRlZiBzeGFFNTAKKyAgICBiYWNrZ3JkID0gIXk7CisjZWxzZQorI2lmZGVmIE1JTklY CisgICAgYmFja2dyZCA9ICF5OworI2Vsc2UKKyNpZmRlZiBNSU5JWDIKKyAgICBiYWNrZ3JkID0g IXk7CisjZWxzZQorICAgIGlmICh4ID4gLTEpCisgICAgICBiYWNrZ3JkID0gKHggfHwgIXkpID8g MSA6IDA7CisgICAgZWxzZSBiYWNrZ3JkID0gIXk7CisjZW5kaWYgLyogQlNEMjkgKi8KKyNlbmRp ZiAvKiBzeGFFNTAgKi8KKyNlbmRpZiAvKiBNSU5JWCAqLworI2VuZGlmIC8qIE1JTklYMiAqLwor ICAgIGRlYnVnKEYxMDEsImNvbmJndCBiYWNrZ3JkIiwiIixiYWNrZ3JkKTsKK30KKworLyogIEMg TyBOIEkgTiBUICAtLSAgQ29uc29sZSBJbnRlcnJ1cHQgc2V0dGVyICAqLworCisvKgorICBGaXJz dCBhcmcgaXMgcG9pbnRlciB0byBmdW5jdGlvbiB0byBoYW5kbGUgU0lHVEVSTSAmIFNJR0lOVCAo bGlrZSBDdHJsLUMpLgorICBTZWNvbmQgYXJnIGlzIHBvaW50ZXIgdG8gZnVuY3Rpb24gdG8gaGFu ZGxlIFNJR1RTVFAgKHN1c3BlbmQpLgorKi8KKworVk9JRAkJCQkJLyogU2V0IHRlcm1pbmFsIGlu dGVycnVwdCB0cmFwcy4gKi8KKyNpZmRlZiBDS19BTlNJQworI2lmZGVmIGFwb2xsbworY29uaW50 KGYscykgU0lHVFlQICgqZikoKSwgKCpzKSgpOworI2Vsc2UKK2NvbmludChTSUdUWVAgKCpmKShp bnQpLCBTSUdUWVAgKCpzKShpbnQpKQorI2VuZGlmIC8qIGFwb2xsbyAqLworI2Vsc2UKK2Nvbmlu dChmLHMpIFNJR1RZUCAoKmYpKCksICgqcykoKTsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyog Y29uaW50ICovIHsKKworICAgIGRlYnVnKEYxMDEsImNvbmludCBjb25pc3RhdGUiLCIiLGNvbmlz dGF0ZSk7CisKKyAgICBjb25iZ3QoMCk7CQkJCS8qIERvIGJhY2tncm91bmQgdGVzdC4gKi8KKwor LyogU2V0IHRoZSBkZXNpcmVkIGhhbmRsZXJzIGZvciBoYW5ndXAgYW5kIHNvZnR3YXJlIHRlcm1p bmF0aW9uLiAqLworCisjaWZkZWYgU0lHVEVSTQorICAgIHNpZ25hbChTSUdURVJNLGYpOyAgICAg ICAgICAgICAgICAgIC8qIFNvZnR3YXJlIHRlcm1pbmF0aW9uICovCisjZW5kaWYgLyogU0lHVEVS TSAqLworCisvKgorICBQcmlvciB0byBKdWx5IDE5OTkgd2UgdXNlZCB0byBjYWxsIHNpZ2h1cCgp IGhlcmUgYnV0IG5vdyBpdCdzIGNhbGxlZCBpbgorICBzeXNpbml0KCkgc28gU0lHSFVQIGNhbiBi ZSBjYXVnaHQgZHVyaW5nIGV4ZWN1dGlvbiBvZiB0aGUgaW5pdCBmaWxlIG9yCisgIGEga2VyYmFu ZyBzY3JpcHQuCisqLworCisvKiBOb3cgaGFuZGxlIGtleWJvYXJkIHN0b3AsIHF1aXQsIGFuZCBp bnRlcnJ1cHQgc2lnbmFscy4gKi8KKy8qIENoZWNrIGlmIGludm9rZWQgaW4gYmFja2dyb3VuZCAt LSBpZiBzbyBzaWduYWxzIHNldCB0byBiZSBpZ25vcmVkLiAqLworLyogSG93ZXZlciwgaWYgcnVu bmluZyB1bmRlciBhIGpvYiBjb250cm9sIHNoZWxsLCBkb24ndCBpZ25vcmUgdGhlbS4gKi8KKy8q IFdlIHdvbid0IGJlIGdldHRpbmcgYW55LCBhcyB3ZSBhcmVuJ3QgaW4gdGhlIHRlcm1pbmFsJ3Mg cHJvY2VzcyBncm91cC4gKi8KKworICAgIGRlYnVnKEYxMDEsImNvbmludCBiYWNrZ3JkIiwiIixi YWNrZ3JkKTsKKyAgICBkZWJ1ZyhGMTAxLCJjb25pbnQgamMiLCIiLGpjKTsKKworICAgIGlmIChi YWNrZ3JkICYmICFqYykgewkJLyogSW4gYmFja2dyb3VuZCwgaWdub3JlIHNpZ25hbHMgKi8KKwlk ZWJ1ZyhGMTAxLCJjb25pbnQgYmFja2dyb3VuZCBpZ25vcmluZyBzaWduYWxzLCBqYyIsIiIsamMp OworI2lmZGVmIFNJR1RTVFAKKyAgICAgICAgc2lnbmFsKFNJR1RTVFAsU0lHX0lHTik7ICAgICAg ICAvKiBLZXlib2FyZCBzdG9wICovCisjZW5kaWYgLyogU0lHVFNUUCAqLworICAgICAgICBzaWdu YWwoU0lHUVVJVCxTSUdfSUdOKTsgICAgICAgIC8qIEtleWJvYXJkIHF1aXQgKi8KKyAgICAgICAg c2lnbmFsKFNJR0lOVCxTSUdfSUdOKTsgICAgICAgICAvKiBLZXlib2FyZCBpbnRlcnJ1cHQgKi8K KwlzaWdpbnRfaWduID0gMTsKKwljb25pc3RhdGUgPSBDT05JX05PSTsKKyAgICB9IGVsc2UgewkJ CQkvKiBFbHNlIGluIGZvcmVncm91bmQgb3Igc3VzcGVuZGVkICovCisJZGVidWcoRjEwMSwiY29u aW50IGZvcmVncm91bmQgY2F0Y2hpbmcgc2lnbmFscywgamMiLCIiLGpjKTsKKyAgICAgICAgc2ln bmFsKFNJR0lOVCxmKTsgICAgICAgICAgICAgICAvKiBDYXRjaCB0ZXJtaW5hbCBpbnRlcnJ1cHQg Ki8KKwlzaWdpbnRfaWduID0gKGYgPT0gU0lHX0lHTikgPyAxIDogMDsKKworI2lmZGVmIFNJR1RT VFAJCQkJLyogS2V5Ym9hcmQgc3RvcCAoc3VzcGVuZCkgKi8KKwkvKiBkZWJ1ZyhGMTAxLCJjb25p bnQgU0lHU1RTVFAiLCIiLHMpOyAqLworCWlmIChzID09IE5VTEwpIHMgPSBTSUdfREZMOworI2lm ZGVmIE5PSkMJCQkJLyogTm8gam9iIGNvbnRyb2wgYWxsb3dlZC4gKi8KKwlzaWduYWwoU0lHVFNU UCxTSUdfSUdOKTsKKyNlbHNlCQkJCQkvKiBKb2IgY29udHJvbCBhbGxvd2VkICovCisJaWYgKGpj KQkJCQkvKiBpZiBhdmFpbGFibGUuICovCisJICBzaWduYWwoU0lHVFNUUCxzKTsKKwllbHNlCisJ ICBzaWduYWwoU0lHVFNUUCxTSUdfSUdOKTsKKyNlbmRpZiAvKiBOT0pDICovCisjZW5kaWYgLyog U0lHVFNUUCAqLworCisjaWZuZGVmIE9YT1MKKyNpZmRlZiBTVk9SUE9TSVgKKyNpZm5kZWYgRklP TlJFQUQJCQkvKiBXYXRjaCBvdXQsIHdlIGRvbid0IGtub3cgdGhpcy4uLiAqLworI2lmbmRlZiBT RUxFQ1QKKyNpZm5kZWYgQ0tfUE9MTAorI2lmbmRlZiBSRENISworICAgICAgICBzaWduYWwoU0lH UVVJVCxlc2N0cnApOyAgICAgICAgIC8qIFF1aXQgc2lnbmFsLCBTeXMgSUlJL1YuICovCisjZW5k aWYgLyogUkRDSEsgKi8KKyNlbmRpZiAvKiBDS19QT0xMICovCisjZW5kaWYgLyogU0VMRUNUICov CisjZW5kaWYgLyogRklPTlJFQUQgKi8KKyAgICAgICAgaWYgKGNvbmVzYykgY29uZXNjID0gMDsg ICAgICAgICAvKiBDbGVhciBvdXQgcGVuZGluZyBlc2NhcGVzICovCisjZWxzZQorI2lmZGVmIFY3 CisgICAgICAgIHNpZ25hbChTSUdRVUlULGVzY3RycCk7ICAgICAgICAgLyogVjcgbGlrZSBTeXMg SUlJL1YgKi8KKyAgICAgICAgaWYgKGNvbmVzYykgY29uZXNjID0gMDsKKyNlbHNlCisjaWZkZWYg YWVnaXMKKyAgICAgICAgc2lnbmFsKFNJR1FVSVQsZik7ICAgICAgICAgICAgICAvKiBBcG9sbG8s IGNhdGNoIGl0IGxpa2Ugb3RoZXJzLiAqLworI2Vsc2UKKyAgICAgICAgc2lnbmFsKFNJR1FVSVQs U0lHX0lHTik7ICAgICAgICAvKiBPdGhlcnMsIGlnbm9yZSBsaWtlIDREICYgZWFybGllci4gKi8K KyNlbmRpZiAvKiBhZWdpcyAqLworI2VuZGlmIC8qIFY3ICovCisjZW5kaWYgLyogU1ZPUlBPU0lY ICovCisjZW5kaWYgLyogT1hPUyAqLworCWNvbmlzdGF0ZSA9IENPTklfSU5UOworICAgIH0KK30K KworCisvKiAgQyBPIE4gTiBPIEkgIC0tICBSZXNldCBjb25zb2xlIHRlcm1pbmFsIGludGVycnVw dHMgKi8KKworVk9JRAorY29ubm9pKCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IENvbnNvbGUtbm8taW50ZXJydXB0cyAqLworCisgICAgZGVidWcoRjEwMSwiY29ubm9pIGNvbmlz dGF0ZSIsIiIsY29uaXN0YXRlKTsKKyNpZmRlZiBTSUdUU1RQCisgICAgc2lnbmFsKFNJR1RTVFAs U0lHX0lHTik7CQkvKiBTdXNwZW5kICovCisjZW5kaWYgLyogU0lHVFNUUCAqLworICAgIGNvbmlu dChTSUdfSUdOLFNJR19JR04pOwkJLyogSW50ZXJydXB0ICovCisgICAgc2lnaW50X2lnbiA9IDE7 CQkJLyogUmVtZW1iZXIgd2UgZGlkIHRoaXMgb3Vyc2VsdmVzICovCisjaWZkZWYgU0lHUVVJVAor ICAgIHNpZ25hbChTSUdRVUlULFNJR19JR04pOwkJLyogUXVpdCAqLworI2VuZGlmIC8qIFNJR1FV SVQgKi8KKyNpZmRlZiBTSUdURVJNCisgICAgc2lnbmFsKFNJR1RFUk0sU0lHX0lHTik7CQkvKiBU ZXJtICovCisjZW5kaWYgLyogU0lHVEVSTSAqLworICAgIGNvbmlzdGF0ZSA9IENPTklfTk9JOwor fQorCisvKiAgSSBOIEkgVCBSIEEgVyBRICAtLSAgU2V0IHVwIHRvIHJlYWQgL2Rldi9rbWVtIGZv ciBjaGFyYWN0ZXIgY291bnQuICAqLworCisjaWZkZWYgIFY3CisvKgorIFVzZWQgaW4gVmVyc2lv biA3IHRvIHNpbXVsYXRlIEJlcmtlbGV5J3MgRklPTlJFQUQgaW9jdGwgY2FsbC4gIFRoaXMKKyBl bGltaW5hdGVzIGJsb2NraW5nIG9uIGEgcmVhZCwgYmVjYXVzZSB3ZSBjYW4gcmVhZCAvZGV2L2tt ZW0gdG8gZ2V0IHRoZQorIG51bWJlciBvZiBjaGFyYWN0ZXJzIGF2YWlsYWJsZSBmb3IgcmF3IGlu cHV0LiAgSWYgeW91ciBzeXN0ZW0gY2FuJ3QKKyBvciB5b3Ugd29uJ3QgbGV0IHRoZSB3b3JsZCBy ZWFkIC9kZXYva21lbSB0aGVuIHlvdSBtdXN0IGZpZ3VyZSBvdXQgYQorIGRpZmZlcmVudCB3YXkg dG8gZG8gdGhlIGNvdW50aW5nIG9mIGNoYXJhY3RlcnMgYXZhaWxhYmxlLCBvciBlbHNlIHJlcGxh Y2UKKyB0aGlzIGJ5IGEgZHVtbXkgZnVuY3Rpb24gdGhhdCBhbHdheXMgcmV0dXJucyAwLgorKi8K Ky8qCisgKiBDYWxsIHRoaXMgcm91dGluZSBhczogaW5pdHJhd3EodHR5KQorICogd2hlcmUgdHR5 IGlzIHRoZSBmaWxlIGRlc2NyaXB0b3Igb2YgYSB0ZXJtaW5hbC4gIEl0IHdpbGwgcmV0dXJuCisg KiAoYXMgYSBjaGFyICopIHRoZSBrZXJuZWwtbW9kZSBtZW1vcnkgYWRkcmVzcyBvZiB0aGUgcmF3 cSBjaGFyYWN0ZXIKKyAqIGNvdW50LCB3aGljaCBtYXkgdGhlbiBiZSByZWFkLiAgSXQgaGFzIHRo ZSBzaWRlLWVmZmVjdCBvZiBmbHVzaGluZworICogaW5wdXQgb24gdGhlIHRlcm1pbmFsLgorICov CisvKgorICogSm9obiBNYWNraW4sIFBoeXNpb2xvZ3kgRGVwdC4sIFVuaXZlcnNpdHkgb2YgU3lk bmV5IChBdXN0cmFsaWEpCisgKiAuLi4hZGVjdmF4IW11bGdhIXBoeXNpb2wuc3Uub3oham9obgor ICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gZG8gYW55dGhpbmcgd2l0aCB0 aGlzIGNvZGUsIGFzCisgKiBsb25nIGFzIHRoaXMgY29tbWVudCBpcyByZXRhaW5lZCB1bm1vZGlm aWVkIGFuZCBubyBjb21tZXJjaWFsCisgKiBhZHZhbnRhZ2UgaXMgZ2FpbmVkLgorICovCisjaWZu ZGVmIE1JTklYCisjaWZuZGVmIE1JTklYMgorI2lmbmRlZiBDT0hFUkVOVAorI2luY2x1ZGUgPGEu b3V0Lmg+CisjaW5jbHVkZSA8c3lzL3Byb2MuaD4KKyNlbmRpZiAvKiBDT0hFUkVOVCAqLworI2Vu ZGlmIC8qIE1JTklYMiAqLworI2VuZGlmIC8qIE1JTklYICovCisKKyNpZmRlZiBDT0hFUkVOVAor I2luY2x1ZGUgPGwub3V0Lmg+CisjaW5jbHVkZSA8c3lzL3Byb2MuaD4KKyNlbmRpZiAvKiBDT0hF UkVOVCAqLworCitjaGFyICoKK2luaXRyYXdxKHR0eSkgaW50IHR0eTsgeworI2lmZGVmIE1JTklY CisgICAgcmV0dXJuKDApOworI2Vsc2UKKyNpZmRlZiBNSU5JWDIKKyAgICByZXR1cm4oMCk7Cisj ZWxzZQorI2lmZGVmIFVUUzI0CisgICAgcmV0dXJuKDApOworI2Vsc2UKKyNpZmRlZiBCU0QyOQor ICAgIHJldHVybigwKTsKKyNlbHNlCisgICAgbG9uZyBsc2VlaygpOworICAgIHN0YXRpYyBzdHJ1 Y3Qgbmxpc3QgbmxbXSA9IHsKKyAgICAgICAge1BST0NOQU1FfSwKKyAgICAgICAge05QUk9DTkFN RX0sCisgICAgICAgIHsiIn0KKyAgICB9OworICAgIHN0YXRpYyBzdHJ1Y3QgcHJvYyAqcHA7Cisg ICAgY2hhciAqcWFkZHIsICpwLCBjOworICAgIGludCBtOworICAgIFBJRF9UIHBpZCwgbWU7Cisg ICAgTlBUWVBFIHhwcm9jOyAgICAgICAgICAgICAgICAgICAgICAgLyogSXRzIHR5cGUgaXMgZGVm aW5lZCBpbiBtYWtlZmlsZS4gKi8KKyAgICBpbnQgY2F0Y2goKTsKKworICAgIG1lID0gZ2V0cGlk KCk7CisgICAgaWYgKChtID0gb3BlbigiL2Rldi9rbWVtIiwgMCkpIDwgMCkgZXJyKCJrbWVtIik7 CisgICAgbmxpc3QoQk9PVE5BTUUsIG5sKTsKKyAgICBpZiAobmxbMF0ubl90eXBlID09IDApIGVy cigicHJvYyBhcnJheSIpOworCisgICAgaWYgKG5sWzFdLm5fdHlwZSA9PSAwKSBlcnIoIm5wcm9j Iik7CisKKyAgICBsc2VlayhtLCAobG9uZykobmxbMV0ubl92YWx1ZSksIDApOworICAgIHJlYWQg KG0sICZ4cHJvYywgc2l6ZW9mKHhwcm9jKSk7CisgICAgc2F2YWwgPSBzaWduYWwoU0lHQUxSTSwg Y2F0Y2gpOworICAgIGlmICgocGlkID0gZm9yaygpKSA9PSAwKSB7CisgICAgICAgIHdoaWxlKDEp CisgICAgICAgICAgICByZWFkKHR0eSwgJmMsIDEpOworICAgIH0KKyAgICBhbGFybSgyKTsKKwor ICAgIGlmKHNldGptcChqamJ1ZikgPT0gMCkgeworICAgICAgICB3aGlsZSgxKQorCSAgcmVhZCh0 dHksICZjLCAxKTsKKyAgICB9CisgICAgc2lnbmFsKFNJR0FMUk0sIFNJR19ERkwpOworCisjaWZk ZWYgRElSRUNUCisgICAgcHAgPSAoc3RydWN0IHByb2MgKikgbmxbMF0ubl92YWx1ZTsKKyNlbHNl CisgICAgaWYgKGxzZWVrKG0sIChsb25nKShubFswXS5uX3ZhbHVlKSwgMCkgPCAwTCkgZXJyKCJz ZWVrIik7CisgICAgaWYgKHJlYWQobSwgJnBwLCBzaXplb2YocHApKSAhPSBzaXplb2YocHApKSAg ZXJyKCJubyByZWFkIG9mIHByb2MgcHRyIik7CisjZW5kaWYKKyAgICBsc2VlayhtLCAobG9uZyko bmxbMV0ubl92YWx1ZSksIDApOworICAgIHJlYWQobSwgJnhwcm9jLCBzaXplb2YoeHByb2MpKTsK KworICAgIGlmIChsc2VlayhtLCAobG9uZylwcCwgMCkgPCAwTCkgZXJyKCJDYW4ndCBzZWVrIHRv IHByb2MiKTsKKyAgICBpZiAoKHAgPSBtYWxsb2MoeHByb2MgKiBzaXplb2Yoc3RydWN0IHByb2Mp KSkgPT0gTlVMTCkgZXJyKCJtYWxsb2MiKTsKKyAgICBpZiAocmVhZChtLHAseHByb2MgKiBzaXpl b2Yoc3RydWN0IHByb2MpKSAhPSB4cHJvYypzaXplb2Yoc3RydWN0IHByb2MpKQorICAgICAgICBl cnIoInJlYWQgcHJvYyB0YWJsZSIpOworICAgIGZvciAocHAgPSAoc3RydWN0IHByb2MgKilwOyB4 cHJvYyA+IDA7IC0teHByb2MsICsrcHApIHsKKyAgICAgICAgaWYgKHBwIC0+IHBfcGlkID09IChz aG9ydCkgcGlkKSBnb3RvIGlvdXQ7CisgICAgfQorICAgIGVycigibm8gc3VjaCBwcm9jIik7CisK K2lvdXQ6CisgICAgY2xvc2UobSk7CisgICAgcWFkZHIgPSAoY2hhciAqKShwcCAtPiBwX3djaGFu KTsKKyAgICBmcmVlIChwKTsKKyAgICBraWxsKHBpZCwgU0lHS0lMTCk7CisgICAgd2FpdCgoV0FJ VF9UICopMCk7CisgICAgcmV0dXJuIChxYWRkcik7CisjZW5kaWYKKyNlbmRpZgorI2VuZGlmCisj ZW5kaWYKK30KKworLyogIE1vcmUgVjctc3VwcG9ydCBmdW5jdGlvbnMuLi4gICovCisKK3N0YXRp YyBWT0lECitlcnIocykgY2hhciAqczsgeworICAgIGNoYXIgYnVmWzIwMF07CisKKyAgICBja21h a21zZyhidWYsMjAwLCJmYXRhbCBlcnJvciBpbiBpbml0cmF3cTogIiwgcywgTlVMTCwgTlVMTCk7 CisgICAgcGVycm9yKGJ1Zik7CisgICAgZG9leGl0KDEsLTEpOworfQorCitzdGF0aWMgVk9JRAor Y2F0Y2goZm9vKSBpbnQgZm9vOyB7CisgICAgbG9uZ2ptcChqamJ1ZiwgLTEpOworfQorCisKKy8q ICBHIEUgTiBCIFIgSyAgLS0gIFNpbXVsYXRlIGEgbW9kZW0gYnJlYWsuICAqLworCisjaWZkZWYg TUlOSVgKKyNkZWZpbmUgQlNQRUVEIEIxMTAKKyNlbHNlCisjaWZkZWYgTUlOSVgyCisjZGVmaW5l IEJTUEVFRCBCMTEwCisjZWxzZQorI2RlZmluZSBCU1BFRUQgQjE1MAorI2VuZGlmIC8qIE1JTklY MiAqLworI2VuZGlmIC8qIE1JTklYICovCisKKyNpZm5kZWYgTUlOSVgyCitWT0lECitnZW5icmso Zm4sbXNlYykgaW50IGZuLCBtc2VjOyB7CisgICAgc3RydWN0IHNndHR5YiB0dGJ1ZjsKKyAgICBp bnQgcmV0LCBzb3NwZWVkLCB4LCB5OworCisgICAgcmV0ID0gaW9jdGwoZm4sIFRJT0NHRVRQLCAm dHRidWYpOworICAgIHNvc3BlZWQgPSB0dGJ1Zi5zZ19vc3BlZWQ7CisgICAgdHRidWYuc2dfb3Nw ZWVkID0gQlNQRUVEOworICAgIHJldCA9IGlvY3RsKGZuLCBUSU9DU0VUUCwgJnR0YnVmKTsKKyAg ICB5ID0gKGludClzdHJsZW4oYnJudWxzKTsKKyAgICB4ID0gKCBCU1BFRUQgKiAxMDAgKSAvIG1z ZWM7CisgICAgaWYgKHggPiB5KSB4ID0geTsKKyAgICByZXQgPSB3cml0ZShmbiwgYnJudWxzLCAo KCBCU1BFRUQgKiAxMDAgKSAvIG1zZWMgKSk7CisgICAgdHRidWYuc2dfb3NwZWVkID0gc29zcGVl ZDsKKyAgICByZXQgPSBpb2N0bChmbiwgVElPQ1NFVFAsICZ0dGJ1Zik7CisgICAgcmV0ID0gd3Jp dGUoZm4sICJAIiwgMSk7CisgICAgcmV0dXJuOworfQorI2VuZGlmIC8qIE1JTklYMiAqLworCisj aWZkZWYgTUlOSVgyCitpbnQKK2dlbmJyayhmbixtc2VjKSBpbnQgZm4sIG1zZWM7IHsKKyAgICBz dHJ1Y3QgdGVybWlvcyB0dGJ1ZjsKKyAgICBpbnQgcmV0LCB4LCB5OworICAgIHNwZWVkX3Qgc29z cGVlZDsKKworICAgIHJldCA9IHRjZ2V0YXR0cihmbiwgJnR0YnVmKTsKKyAgICBzb3NwZWVkID0g dHRidWYuY19vc3BlZWQ7CisgICAgdHRidWYuY19vc3BlZWQgPSBCU1BFRUQ7CisgICAgcmV0ID0g dGNzZXRhdHRyKGZuLFRDU0FEUkFJTiwgJnR0YnVmKTsKKyAgICB5ID0gKGludClzdHJsZW4oYnJu dWxzKTsKKyAgICB4ID0gKCBCU1BFRUQgKiAxMDAgKSAvIG1zZWM7CisgICAgaWYgKHggPiB5KSB4 ID0geTsKKyAgICByZXQgPSB3cml0ZShmbiwgYnJudWxzLCAoKCBCU1BFRUQgKiAxMDAgKSAvIG1z ZWMgKSk7CisgICAgdHRidWYuY19vc3BlZWQgPSBzb3NwZWVkOworICAgIHJldCA9IHRjc2V0YXR0 cihmbiwgVENTQURSQUlOLCAmdHRidWYpOworICAgIHJldCA9IHdyaXRlKGZuLCAiQCIsIDEpOwor ICAgIHJldHVybiByZXQ7Cit9CisjZW5kaWYgLyogTUlOSVgyICovCisjZW5kaWYgLyogVjcgKi8K KworLyoKKyAgSSBOIEMgSCBLICAtLSAgQ2hlY2sgaWYgY2hhcnMgd2FpdGluZyB0byBiZSByZWFk IG9uIGdpdmVuIGZpbGUgZGVzY3JpcHRvci4KKworICBUaGlzIHJvdXRpbmUgaXMgYSBtZXJnZXIg b2YgdHRjaGsoKSBhbmQgY29uY2hrKCkuCisgIENhbGwgd2l0aDoKKyAgICBjaGFubmVsID09IDAg dG8gY2hlY2sgY29uc29sZS4KKyAgICBjaGFubmVsID09IDEgdG8gY2hlY2sgY29tbXVuaWNhdGlv bnMgY29ubmVjdGlvbi4KKyAgYW5kOgorICAgIGZkID0gZmlsZSBkZXNjcmlwdG9yLgorICBSZXR1 cm5zOgorICAgPj0gMDogbnVtYmVyIG9mIGNoYXJhY3RlcnMgd2FpdGluZywgMCBvciBncmVhdGVy LAorICAgICAtMTogb24gYW55IGtpbmQgb2YgZXJyb3IsCisgICAgIC0yOiBpZiB0aGVyZSBpcyAo ZGVmaW5pdGVseSkgbm8gY29ubmVjdGlvbi4KKyAgTm90ZTogSW4gVU5JWCB3ZSBkb24ndCBoYXZl IHRvIGNhbGwgbmV0dGNoaygpIGJlY2F1c2UgYSBzb2NrZXQKKyAgZmlsZSBkZXNjcmlwdG9yIHdv cmtzIGp1c3QgbGlrZSBpbiBzZXJpYWwgaS9vLCBpb2N0bHMgYW5kIGFsbC4KKyAgKEJ1dCB0aGlz IHdpbGwgY2hhbmdlIGlmIHdlIGFkZCBub24tZmlsZS1kZXNjcmlwdG9yIGNoYW5uZWxzLAorICBz dWNoIGFzIElCTSBYLjI1IGZvciBBSVguLi4pCisqLworc3RhdGljIGludAoraW5fY2hrKGNoYW5u ZWwsIGZkKSBpbnQgY2hhbm5lbCwgZmQ7IHsKKyAgICBpbnQgeCwgbiA9IDA7CQkJLyogV29ya2Vy cywgbiA9IHJldHVybiB2YWx1ZSAqLworICAgIGV4dGVybiBpbnQgY2xzb25kaXNjOwkJLyogQ2xv c2Ugb24gZGlzY29ubmVjdCAqLworLyoKKyAgVGhlIGZpcnN0IHNlY3Rpb24gY2hlY2tzIHRvIG1h a2Ugc3VyZSB3ZSBoYXZlIGEgY29ubmVjdGlvbiwKKyAgYnV0IG9ubHkgaWYgd2UncmUgaW4gbG9j YWwgbW9kZS4KKyovCisjaWZkZWYgREVCVUcKKyAgICBpZiAoZGVibG9nKSB7CisJZGVidWcoRjEx MSwiaW5fY2hrIGVudHJ5Iixja2l0b2EoZmQpLGNoYW5uZWwpOworCWRlYnVnKEYxMDEsImluX2No ayB0dHlmZCIsIiIsdHR5ZmQpOworCWRlYnVnKEYxMDEsImluX2NoayB0dHB0eSIsIiIsdHRwdHkp OworICAgIH0KKyNlbmRpZiAvKiBERUJVRyAqLworLyoKKyAgQnV0IGRvbid0IHNheSBjb25uZWN0 aW9uIGlzIGdvbmUgaWYgd2UgaGF2ZSBhbnkgYnVmZmVyZWQtc3R1ZmYuCisqLworI2lmZGVmIFRU TEVCVUYKKyAgICBkZWJ1ZyhGMTAxLCJpbl9jaGsgdHRwdXNoIiwiIix0dHB1c2gpOworICAgIGlm IChjaGFubmVsID09IDEpIHsKKwlpZiAodHRwdXNoID49IDApCisJICBuKys7CisJbiArPSBsZV9p bmJ1ZigpOworCWlmIChuID4gMCkKKwkgIHJldHVybihuKTsKKyAgICB9CisjZW5kaWYgLyogVFRM RUJVRiAqLworCisjaWZkZWYgTkVUUFRZCisjaWZkZWYgSEFWRV9QVFlUUkFQCisgICAgLyogU3Bl Y2lhbCBoYW5kbGluZyBmb3IgSFAtVVggcHR5IGkvbyAqLworICAgIGlmICh0dHB0eSAmJiBwdHlf dHJhcF9wZW5kaW5nKHR0eWZkKSA+IDApIHsKKyAgICAgICAgaWYgKHB0eV90cmFwX2hhbmRsZXIo dHR5ZmQpID4gMCkgeworICAgICAgICAgICAgdHRjbG9zKDApOworICAgICAgICAgICAgcmV0dXJu KC0yKTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBIQVZFX1BUWVRSQVAgKi8KKyNlbmRp ZiAvKiBORVRQVFkgKi8KKworICAgIGlmIChjaGFubmVsKSB7CQkJLyogQ2hlY2tpbmcgY29tbXVu aWNhdGlvbnMgY2hhbm5lbCAqLworCWlmICh0dHlmZCA8IDApIHsJCS8qIE5vIGNvbm5lY3Rpb24g Ki8KKwkgIHJldHVybigtMik7CQkJLyogVGhhdCdzIHdoYXQgdGhpcyBtZWFucyAqLworCX0gZWxz ZSBpZiAoeGxvY2FsICYmCQkvKiBJbiBsb2NhbCBtb2RlICovCisJCSAgICghbmV0Y29ubgkJLyog U2VyaWFsIGNvbm5lY3Rpb24gb3IgKi8KKyNpZmRlZiBUTl9DT01QT1JUCisJCSAgICB8fCBpc3Ru Y29tcG9ydCgpICAgIC8qIFRlbG5ldCBDb20gUG9ydCAqLworI2VuZGlmIC8qIFROX0NPTVBPUlQg Ki8KKwkJICAgKSAmJiB0dGNhcnIgIT0gQ0FSX09GRiAvKiB3aXRoIENBUlJJRVIgV0FUQ0ggT04g KG9yIEFVVE8pICovCisjaWZkZWYgQ09NTUVOVAorI2lmZGVmIE1ZUkVBRAorLyoKKyAgU2VlbXMg bGlrZSB0aGlzIHdvdWxkIGJlIGEgZ29vZCBpZGVhIGJ1dCBpdCBwcmV2ZW50cyBDLUtlcm1pdCBm cm9tCisgIHBvcHBpbmcgYmFjayB0byB0aGUgcHJvbXB0IGF1dG9tYXRpY2FsbHkgd2hlbiBjYXJy aWVyIGRyb3BzLiAgSG93ZXZlciwKKyAgY29tbWVudGluZyB0aGlzIG91dCBwcmV2ZW50cyB1cyBm cm9tIHNlZWluZyB0aGUgTk8gQ0FSUklFUiBtZXNzYWdlLgorICBOZWVkcyBtb3JlIHdvcmsuLi4K KyovCisJCSAgICYmIG15X2NvdW50IDwgMQkvKiBOb3RoaW5nIGluIG91ciBpbnRlcm5hbCBidWZm ZXIgKi8KKyNlbmRpZiAvKiBNWVJFQUQgKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisJCSAgICkg eworCSAgICBpbnQgeDsKKwkgICAgeCA9IHR0Z21kbSgpOwkJLyogU28gZ2V0IG1vZGVtIHNpZ25h bHMgKi8KKwkgICAgZGVidWcoRjEwMSwiaW5fY2hrIGNsb3NlLW9uLWRpc2Nvbm5lY3QiLCIiLGNs c29uZGlzYyk7CisJICAgIGlmICh4ID4gLTEpIHsJCS8qIENoZWNrIGZvciBjYXJyaWVyICovCisJ CWlmICghKHggJiBCTV9EQ0QpKSB7CS8qIE5vIGNhcnJpZXIgKi8KKwkJICAgIGRlYnVnKEYxMDEs ImluX2NoayBjYXJyaWVyIGxvc3QiLCIiLHgpOworCQkgICAgaWYgKGNsc29uZGlzYykJLyogSWYg ImNsb3NlLW9uLWRpc2Nvbm5lY3QiICovCisJCSAgICAgIHR0Y2xvcygwKTsJLyogY2xvc2UgZGV2 aWNlICYgcmVsZWFzZSBsb2NrLiAqLworCQkgICAgcmV0dXJuKC0yKTsJCS8qIFRoaXMgbWVhbnMg ImRpc2Nvbm5lY3RlZCIgKi8KKwkJfQorCSAgICAvKiBJbiBjYXNlIEkvTyB0byBkZXZpY2UgYWZ0 ZXIgQ0QgZHJvcHBlZCBhbHdheXMgZmFpbHMgKi8KKwkgICAgLyogYXMgaW4gRGViaWFuIExpbnV4 IDIuMSBhbmQgVW5peHdhcmUgMi4xLi4uICovCisJICAgIH0gZWxzZSB7CisJICAgICAgICBkZWJ1 ZyhGMTAxLCJpbl9jaGsgdHRnbWRtIEkvTyBlcnJvciIsIiIsZXJybm8pOworCSAgICAgICAgZGVi dWcoRjEwMSwiaW5fY2hrIHR0Z21kbSBnb3RzaWdzIiwiIixnb3RzaWdzKTsKKwkgICAgICAgIGlm IChnb3RzaWdzKSB7CQkvKiBJZiB3ZSBnb3Qgc2lnbmFscyBiZWZvcmUuLi4gKi8KKwkJICAgIGlm IChlcnJubyA9PSA1IHx8IGVycm5vID09IDYpIHsgLyogSS9PIGVycm9yIGV0YyAqLworCQkgICAg ICAgIGlmIChjbHNvbmRpc2MpCS8qIGxpa2Ugd2hlbiBtb2RlbSBoYW5ncyB1cCAqLworCQkJICB0 dGNsb3MoMCk7CisJCQlyZXR1cm4oLTIpOworCQkgICAgfQorCQl9CisJCS8qIElmIHdlIG5ldmVy IGdvdCBtb2RlbSBzaWduYWxzIHN1Y2Nlc3NmdWxseSBvbiB0aGlzICovCisJCS8qIGNvbm5lY3Rp b24gYmVmb3JlLCB3ZSBjYW4ndCBjb25jbHVkZSB0aGF0IFRISVMgZmFpbHVyZSAqLworCQkvKiBt ZWFucyB0aGUgY29ubmVjdGlvbiB3YXMgbG9zdC4gKi8KKwkJcmV0dXJuKDApOworCSAgICB9CisJ fQorICAgIH0KKworLyogV2Ugc2VlbSB0byBoYXZlIGEgY29ubmVjdGlvbiBzbyBub3cgc2VlIGlm IGFueSBieXRlcyBhcmUgd2FpdGluZyBvbiBpdCAqLworCisjaWZkZWYgQ0tfU1NMCisgICAgaWYg KHNzbF9hY3RpdmVfZmxhZyB8fCB0bHNfYWN0aXZlX2ZsYWcpIHsKKyAgICAgICAgbiArPSBTU0xf cGVuZGluZyhzc2xfYWN0aXZlX2ZsYWc/c3NsX2Nvbjp0bHNfY29uKTsKKyAgICAgICAgZGVidWco RjEwMSwiaW5fY2hrIFNTTF9wZW5kaW5nIiwiIixuKTsKKyAgICAgICAgaWYgKG4gPCAwKSB7Cisg ICAgICAgICAgICB0dGNsb3MoMCk7CisgICAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICB9 IGVsc2UgaWYgKG4gPiAwKSB7CisgICAgICAgICAgICByZXR1cm4obik7CisgICAgICAgIH0KKyAg ICB9CisjZW5kaWYgLyogQ0tfU1NMICovCisjaWZkZWYgUkxPR0NPREUKKyNpZmRlZiBDS19LRVJC RVJPUworICAgIC8qIEl0IGlzIG5vdCBzYWZlIHRvIHJlYWQgYW55IGRhdGEgd2hlbiB1c2luZyBl bmNyeXB0ZWQgS2xvZ2luICovCisgICAgaWYgKHR0bnByb3RvID09IE5QX0VLNExPR0lOIHx8IHR0 bnByb3RvID09IE5QX0VLNUxPR0lOKSB7CisjaWZkZWYgS1JCNAorICAgICAgICBpZiAodHRucHJv dG8gPT0gTlBfRUs0TE9HSU4pIHsKKyAgICAgICAgICAgIG4gKz0ga3JiNF9kZXNfYXZhaWwodHR5 ZmQpOworICAgICAgICAgICAgZGVidWcoRjEwMSwiaW5fY2hrIGtyYjRfZGVzX2F2YWlsIiwiIixu KTsKKyAgICAgICAgfQorI2VuZGlmIC8qIEtSQjQgKi8KKyNpZmRlZiBLUkI1CisgICAgICAgIGlm ICh0dG5wcm90byA9PSBOUF9FSzVMT0dJTikgeworICAgICAgICAgICAgbiArPSBrcmI1X2Rlc19h dmFpbCh0dHlmZCk7CisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJpbl9jaGsga3JiNV9kZXNfYXZh aWwiLCIiLG4pOworICAgICAgICB9CisjaWZkZWYgS1JCNV9VMlUKKyAgICAgICAgaWYgKHR0bnBy b3RvID09IE5QX0s1VTJVKSB7CisgICAgICAgICAgICBuICs9IGtyYjVfdTJ1X2F2YWlsKHR0eWZk KTsKKyAgICAgICAgICAgIGRlYnVnKEYxMDEsImluX2NoayBrcmI1X2Rlc19hdmFpbCIsIiIsbik7 CisgICAgICAgIH0KKyNlbmRpZiAvKiBLUkI1X1UyVSAqLworI2VuZGlmIC8qIEtSQjUgKi8KKyAg ICAgICAgaWYgKG4gPCAwKQkJCS8qIElzIHRoaXMgcmlnaHQ/ICovCisJICByZXR1cm4oLTEpOwor ICAgICAgICBlbHNlCisJICByZXR1cm4obik7CisgICAgfQorI2VuZGlmIC8qIENLX0tFUkJFUk9T ICovCisjZW5kaWYgLyogUkxPR0NPREUgKi8KKworICAgIGVycm5vID0gMDsJCQkJLyogUmVzZXQg dGhpcyBzbyB3ZSBsb2cgZ29vZCBpbmZvICovCisjaWZkZWYgRklPTlJFQUQKKyAgICB4ID0gaW9j dGwoZmQsIEZJT05SRUFELCAmbik7CS8qIEJTRCBhbmQgbG90cyBvZiBvdGhlcnMgKi8KKyNpZmRl ZiBERUJVRwkJCQkvKiAodGhlIG1vcmUgdGhlIGJldHRlcikgKi8KKyAgICBpZiAoZGVibG9nKSB7 CisJZGVidWcoRjEwMSwiaW5fY2hrIEZJT05SRUFEIHJldHVybiBjb2RlIiwiIix4KTsKKwlkZWJ1 ZyhGMTAxLCJpbl9jaGsgRklPTlJFQUQgY291bnQiLCIiLG4pOworCWRlYnVnKEYxMDEsImluX2No ayBGSU9OUkVBRCBlcnJubyIsIiIsZXJybm8pOworICAgIH0KKyNlbmRpZiAvKiBERUJVRyAqLwor I2Vsc2UgLyogRklPTlJFQUQgbm90IGRlZmluZWQgKi8KKy8qCisgIEhlcmUsIGlmIChuZXRjb25u ICYmIHR0bmV0ID09IE5FVF9UQ1BCKSwgd2UgbWlnaHQgdHJ5IGNhbGxpbmcgcmVjdm1zZygpCisg IHdpdGggZmxhZ3MgTVNHX1BFRUt8TVNHX0RPTlRXQUlUIG9uIHRoZSBzb2NrZXQgKHR0eWZkKSwg ZXhjZXB0IHRoaXMgaXMgbm90CisgIHBvcnRhYmxlIChNU0dfRE9OVFdBSVQgaXNuJ3QgZGVmaW5l ZCBpbiBhbnkgb2YgdGhlIDxzeXMvc29ja2V0Lmg+IGZpbGVzCisgIHRoYXQgSSBsb29rZWQgYXQs IGJ1dCBpdCBpcyBuZWVkZWQgdG8gcHJldmVudCB0aGUgY2FsbCBmcm9tIGJsb2NraW5nKSwgYW5k CisgIHRoZSBtc2doZHIgc3RydWN0IGRpZmZlcnMgZnJvbSBwbGFjZSB0byBwbGFjZSwgc28gd2Ug d291bGQgbmVlZCBhbm90aGVyCisgIGF2YWxhbmNoZSBvZiBpZmRlZnMuICBTdGlsbCwgd2hlbiBG SU9OUkVBRCBpcyBub3QgYXZhaWxhYmxlLCB0aGlzIGlzIHRoZQorICBvbmx5IG90aGVyIGtub3du IG1ldGhvZCBvZiBhc2tpbmcgdGhlIE9TIGZvciB0aGUgKm51bWJlciogb2YgY2hhcmFjdGVycwor ICBhdmFpbGFibGUgZm9yIHJlYWRpbmcuCisqLworI2lmZGVmIFY3CQkJCS8qIFVOSVggVjc6IGxv b2sgaW4ga2VybmVsIG1lbW9yeSAqLworI2lmZGVmIE1JTklYCisgICAgbiA9IDA7CQkJCS8qIEJ1 dCBub3QgaW4gTUlOSVggKi8KKyNlbHNlCisjaWZkZWYgTUlOSVgyCisgICAgbiA9IDA7CisjZWxz ZQorICAgIGxzZWVrKGttZW1bVFRZXSwgKGxvbmcpIHFhZGRyW1RUWV0sIDApOyAvKiA3dGggRWRp dGlvbiBVbml4ICovCisgICAgeCA9IHJlYWQoa21lbVtUVFldLCAmbiwgc2l6ZW9mKGludCkpOwor ICAgIGlmICh4ICE9IHNpemVvZihpbnQpKQorICAgICAgbiA9IDA7CisjZW5kaWYgLyogTUlOSVgy ICovCisjZW5kaWYgLyogTUlOSVggKi8KKyNlbHNlIC8qIE5vdCBWNyAqLworI2lmZGVmIFBST1ZY MQorICAgIHggPSBpb2N0bChmZCwgVElPQ1FDTlQsICZ0dGJ1Zik7CS8qIERFQyBQcm8vM3h4IFZl bml4IFYuMSAqLworICAgIG4gPSB0dGJ1Zi5zZ19pc3BlZWQgJiAwMzc3OwkJLyogQ2lyY2EgMTk4 NCAqLworICAgIGlmICh4IDwgMCkgbiA9IDA7CisjZWxzZQorI2lmZGVmIE1ZUkVBRAorLyoKKyAg SGVyZSB3ZSBza2lwIGFsbCB0aGUgdW5kZXBlbmRhYmxlIGFuZCBleHBlbnNpdmUgY2FsbHMgYmVs b3cgaWYgd2UKKyAgYWxyZWFkeSBoYXZlIHNvbWV0aGluZyBpbiBvdXIgaW50ZXJuYWwgYnVmZmVy LiAgVGhpcyB0ZW5kcyB0byB3b3JrIHF1aXRlCisgIG5pY2VseSwgc28gdGhlIG9ubHkgcmVhbGx5 IGJhZCBjYXNlIHJlbWFpbmluZyBpcyB0aGUgb25lIGluIHdoaWNoIG5laXRoZXIKKyAgRklPTlJF QUQgb3IgTVlSRUFEIGFyZSBkZWZpbmVkLCB3aGljaCBpcyBpbmNyZWFzaW5nbHkgcmFyZSB0aGVz ZSBkYXlzLgorKi8KKyAgICBpZiAoY2hhbm5lbCAhPSAwICYmIG15X2NvdW50ID4gMCkgeworCWRl YnVnKEYxMDEsImluX2NoayBidWYgbXlfY291bnQiLCIiLG15X2NvdW50KTsKKwluID0gbXlfY291 bnQ7CQkJLyogbiB3YXMgMCBiZWZvcmUgd2UgZ290IGhlcmUgKi8KKwlyZXR1cm4obik7CisgICAg fQorI2VuZGlmIC8qIE1ZUkVBRCAqLworLyoKKyAgcmRjaGsoKSwgc2VsZWN0KCksIGFuZCBwb2xs KCkgdGVsbCB1cyAqaWYqIGRhdGEgaXMgYXZhaWxhYmxlIHRvIGJlIHJlYWQsIGJ1dAorICBub3Qg aG93IG11Y2gsIHNvIHRoZXNlIHNob3VsZCBiZSB1c2VkIG9ubHkgYXMgYSBmaW5hbCByZXNvcnQu ICBFc3BlY2lhbGx5CisgIHNpbmNlIHRoZXNlIGNhbGxzIHRlbmQgdG8gYWRkIGEgbG90IG92ZXJo ZWFkLgorKi8KKyNpZmRlZiBSRENISwkJCQkvKiBUaGlzIG1vc3RseSBTQ08tc3BlY2lmaWMgKi8K KyAgICBuID0gcmRjaGsoZmQpOworICAgIGRlYnVnKEYxMDEsImluX2NoayByZGNoayIsIiIsbik7 CisjZWxzZSAvKiBObyBSRENISyAqLworI2lmZGVmIFNFTEVDVAorI2lmZGVmIFBsYW45CisgICAg LyogT25seSBhbGxvd3Mgc2VsZWN0IG9uIHRoZSBjb25zb2xlIC4uLiBkb24ndCBhc2sgKi8KKyAg ICBpZiAoY2hhbm5lbCA9PSAwKQorI2VuZGlmIC8qIFBsYW45ICovCisgICAgICB7CisJZmRfc2V0 IHJmZHM7CQkJLyogUmVhZCBmaWxlIGRlc2NyaXB0b3JzICovCisjaWZkZWYgQkVMTFYxMAorCUZE X1pFUk8ocmZkcyk7CQkJLyogSW5pdGlhbGl6ZSB0aGVtICovCisJRkRfU0VUKGZkLHJmZHMpOwkJ LyogV2Ugd2FudCB0byBsb29rIGF0IHRoaXMgZmQgKi8KKyNlbHNlCisJRkRfWkVSTygmcmZkcyk7 CQkJLyogSW5pdGlhbGl6ZSB0aGVtICovCisJRkRfU0VUKGZkLCZyZmRzKTsJCS8qIFdlIHdhbnQg dG8gbG9vayBhdCB0aGlzIGZkICovCisJdHYudHZfc2VjID0gdHYudHZfdXNlYyA9IDBMOwkvKiBB IDAtdmFsdWVkIHRpbWV2YWwgc3RydWN0dXJlICovCisjZW5kaWYgLyogQkVMTFYxMCAqLworI2lm ZGVmIFBsYW45CisJbiA9IHNlbGVjdCggRkRfU0VUU0laRSwgJnJmZHMsIChmZF9zZXQgKikwLCAo ZmRfc2V0ICopMCwgJnR2ICk7CisJZGVidWcoRjEwMSwiaW5fY2hrIFBsYW4gOSBzZWxlY3QiLCIi LG4pOworI2Vsc2UKKyNpZmRlZiBCRUxMVjEwCisJbiA9IHNlbGVjdCggMTI4LCByZmRzLCAoZmRf c2V0ICopMCwgKGZkX3NldCAqKTAsIDAgKTsKKwlkZWJ1ZyhGMTAxLCJpbl9jaGsgQkVMTFYxMCBz ZWxlY3QiLCIiLG4pOworI2Vsc2UKKyNpZmRlZiBCU0Q0NAorCW4gPSBzZWxlY3QoIEZEX1NFVFNJ WkUsICZyZmRzLCAoZmRfc2V0ICopMCwgKGZkX3NldCAqKTAsICZ0diApOworCWRlYnVnKEYxMDEs ImluX2NoayBCU0Q0NCBzZWxlY3QiLCIiLG4pOworI2Vsc2UKKyNpZmRlZiBCU0Q0MworCW4gPSBz ZWxlY3QoIEZEX1NFVFNJWkUsICZyZmRzLCAoZmRfc2V0ICopMCwgKGZkX3NldCAqKTAsICZ0diAp OworCWRlYnVnKEYxMDEsImluX2NoayBCU0Q0MyBzZWxlY3QiLCIiLG4pOworI2Vsc2UKKyNpZmRl ZiBTT0xBUklTCisJbiA9IHNlbGVjdCggRkRfU0VUU0laRSwgJnJmZHMsIChmZF9zZXQgKikwLCAo ZmRfc2V0ICopMCwgJnR2ICk7CisJZGVidWcoRjEwMSwiaW5fY2hrIFNPTEFSSVMgc2VsZWN0Iiwi IixuKTsKKyNlbHNlCisjaWZkZWYgUU5YNgorCW4gPSBzZWxlY3QoIEZEX1NFVFNJWkUsICZyZmRz LCAoZmRfc2V0ICopMCwgKGZkX3NldCAqKTAsICZ0diApOworCWRlYnVnKEYxMDEsImluX2NoayBR Tlg2IHNlbGVjdCIsIiIsbik7CisjZWxzZQorI2lmZGVmIFFOWAorCW4gPSBzZWxlY3QoIEZEX1NF VFNJWkUsICZyZmRzLCAoZmRfc2V0ICopMCwgKGZkX3NldCAqKTAsICZ0diApOworCWRlYnVnKEYx MDEsImluX2NoayBRTlggc2VsZWN0IiwiIixuKTsKKyNlbHNlCisjaWZkZWYgQ09IRVJFTlQKKwlu ID0gc2VsZWN0KCBGRF9TRVRTSVpFLCAmcmZkcywgKGZkX3NldCAqKTAsIChmZF9zZXQgKikwLCAm dHYgKTsKKwlkZWJ1ZyhGMTAxLCJpbl9jaGsgQ09IRVJFTlQgc2VsZWN0IiwiIixuKTsKKyNlbHNl CisjaWZkZWYgU1ZSNAorCW4gPSBzZWxlY3QoIEZEX1NFVFNJWkUsICZyZmRzLCAoZmRfc2V0ICop MCwgKGZkX3NldCAqKTAsICZ0diApOworCWRlYnVnKEYxMDEsImluX2NoayBTVlI0IHNlbGVjdCIs IiIsbik7CisjZWxzZQorI2lmZGVmIF9fbGludXhfXworCW4gPSBzZWxlY3QoIEZEX1NFVFNJWkUs ICZyZmRzLCAoZmRfc2V0ICopMCwgKGZkX3NldCAqKTAsICZ0diApOworCWRlYnVnKEYxMDEsImlu X2NoayBMSU5VWCBzZWxlY3QiLCIiLG4pOworI2lmZGVmIE9TRgorCW4gPSBzZWxlY3QoIEZEX1NF VFNJWkUsICZyZmRzLCAoZmRfc2V0ICopMCwgKGZkX3NldCAqKTAsICZ0diApOworCWRlYnVnKEYx MDEsImluX2NoayBPU0Ygc2VsZWN0IiwiIixuKTsKKyNlbHNlCisJbiA9IHNlbGVjdCggRkRfU0VU U0laRSwgJnJmZHMsIChpbnQgKikwLCAoaW50ICopMCwgJnR2ICk7CisJZGVidWcoRjEwMSwiaW5f Y2hrIGNhdGNoYWxsIHNlbGVjdCIsIiIsbik7CisjZW5kaWYgLyogT1NGICovCisjZW5kaWYgLyog X19saW51eF9fICovCisjZW5kaWYgLyogU1ZSNCAqLworI2VuZGlmIC8qIENPSEVSRU5UICovCisj ZW5kaWYgLyogUU5YICovCisjZW5kaWYgLyogUU5YNiAqLworI2VuZGlmIC8qIFNPTEFSSVMgKi8K KyNlbmRpZiAvKiBCU0Q0MyAqLworI2VuZGlmIC8qIEJTRDQ0ICovCisjZW5kaWYgLyogQkVMTFYx MCAqLworI2VuZGlmIC8qIFBsYW45ICovCisgICAgfQorI2Vsc2UgIC8qIE5vdCBTRUxFQ1QgKi8K KyNpZmRlZiBDS19QT0xMCisgICAgeworICAgICAgc3RydWN0IHBvbGxmZCBwZmQ7CisKKyAgICAg IHBmZC5mZCA9IGZkOworICAgICAgcGZkLmV2ZW50cyA9IFBPTExJTjsKKyAgICAgIHBmZC5yZXZl bnRzID0gMDsKKyAgICAgIG4gPSBwb2xsKCZwZmQsIDEsIDApOworICAgICAgZGVidWcoRjEwMSwi aW5fY2hrIHBvbGwiLCIiLG4pOworICAgICAgaWYgKChuID4gMCkgJiYgKHBmZC5yZXZlbnRzICYg UE9MTElOKSkKKwluID0gMTsKKyAgICB9CisjZW5kaWYgLyogQ0tfUE9MTCAqLworI2VuZGlmIC8q IFNFTEVDVCAqLworI2VuZGlmIC8qIFJEQ0hLICovCisjZW5kaWYgLyogUFJPVlgxICovCisjZW5k aWYgLyogVjcgKi8KKyNlbmRpZiAvKiBGSU9OUkVBRCAqLworCisvKiBGcm9tIGhlcmUgZG93biwg dHJlYXQgY29uc29sZSBhbmQgY29tbXVuaWNhdGlvbiBkZXZpY2UgZGlmZmVyZW50bHkuLi4gKi8K KworICAgIGlmIChjaGFubmVsID09IDApIHsJCQkvKiBDb25zb2xlICovCisKKyNpZmRlZiBTVk9S UE9TSVgKKyNpZm5kZWYgRklPTlJFQUQKKyNpZm5kZWYgU0VMRUNUCisjaWZuZGVmIENLX1BPTEwK KyNpZm5kZWYgUkRDSEsKKy8qCisgIFRoaXMgaXMgdGhlIGhpZGVvdXMgaGFjayB1c2VkIGluIFN5 c3RlbSBWIGFuZCBQT1NJWCBzeXN0ZW1zIHRoYXQgZG9uJ3QKKyAgc3VwcG9ydCBGSU9OUkVBRCwg cmRjaGsoKSwgc2VsZWN0KCksIHBvbGwoKSwgZXRjLCBpbiB3aGljaCB0aGUgdXNlcidzCisgIENP Tk5FQ1QtbW9kZSBlc2NhcGUgY2hhcmFjdGVyIGlzIGF0dGFjaGVkIHRvIFNJR1FVSVQuICBVc2Vk LCBvYnZpb3VzbHksCisgIG9ubHkgb24gdGhlIGNvbnNvbGUuCisqLworCWlmIChjb25lc2MpIHsJ CQkvKiBFc2NhcGUgY2hhcmFjdGVyIHR5cGVkID09IFNJR1FVSVQgKi8KKwkgICAgZGVidWcoRjEw MCwiaW5fY2hrIGNvbmVzYyIsIiIsY29uZXNjKTsKKwkgICAgY29uZXNjID0gMDsKKwkgICAgc2ln bmFsKFNJR1FVSVQsZXNjdHJwKTsJLyogUmVzdG9yZSBzaWduYWwgKi8KKwkgICAgbiArPSAxOwor CX0KKyNlbmRpZiAvKiBSRENISyAqLworI2VuZGlmIC8qIENLX1BPTEwgKi8KKyNlbmRpZiAvKiBT RUxFQ1QgKi8KKyNlbmRpZiAvKiBGSU9OUkVBRCAqLworI2VuZGlmIC8qIFNWT1JQT1NJWCAqLwor CisJcmV0dXJuKG4pOwkJCS8qIERvbmUgd2l0aCBjb25zb2xlICovCisgICAgfQorCisgICAgaWYg KGNoYW5uZWwgIT0gMCkgewkJCS8qIENvbW11bmljYXRpb25zIGNvbm5lY3Rpb24gKi8KKworI2lm ZGVmIE1ZUkVBRAorI2lmbmRlZiBGSU9OUkVBRAorLyoKKyAgc2VsZWN0KCkgb3IgcmRjaGsoKSwg ZXRjLCBoYXMgdG9sZCB1cyB0aGF0IHNvbWV0aGluZyBpcyB3YWl0aW5nLCBidXQgd2UKKyAgZG9u J3Qga25vdyBob3cgbXVjaC4gIFNvIHdlIGRvIGEgcmVhZCB0byBnZXQgaXQgYW5kIHRoZW4gd2Ug a25vdy4gIE5vdGU6CisgIFRoaXMgcmVhZCBpcyBOT1Qgbm9uYmxvY2tpbmcgaWYgbm90aGluZyBp cyB0aGVyZSAoYmVjYXVzZSBvZiBWTUlOPTEpLCBidXQKKyAgaXQgc2hvdWxkIGJlIHNhZmUgaW4g dGhpcyBjYXNlIHNpbmNlIHRoZSBPUyB0ZWxscyB1cyBhdCBsZWFzdCBvbmUgYnl0ZSBpcworICB3 YWl0aW5nIHRvIGJlIHJlYWQsIGFuZCBNWVJFQUQgcmVhZHMgcmV0dXJuIGFzIG11Y2ggYXMgaXMg dGhlcmUgd2l0aG91dAorICB3YWl0aW5nIGZvciBhbnkgbW9yZS4gIENvbnRyb2xsZWQgdGVzdHMg b24gU29sYXJpcyBhbmQgVW5peHdhcmUgKHdpdGgKKyAgRklPTlJFQUQgZGVsaWJlcmF0ZWx5IHVu ZGVmaW5lZCkgc2hvdyB0aGlzIHRvIGJlIHRydWUuCisqLworCWRlYnVnKEYxMDEsImluX2NoayBy ZWFkIG15X2NvdW50IiwiIixteV9jb3VudCk7CisJZGVidWcoRjEwMSwiaW5fY2hrIHJlYWQgbiIs IiIsbik7CisJaWYgKG4gPiAwICYmIG15X2NvdW50ID09IDApIHsKKwkgICAgLyogVGhpcyBhbHNv IGNhdGNoZXMgZGlzY29ubmVjdHMgZXRjICovCisJICAgIC8qIERvIHdoYXQgbXlnZXRidWYgZG9l cyBleGNlcHQgZG9uJ3QgZ3JhYiBhIGNoYXJhY3RlciAqLworCSAgICBteV9jb3VudCA9IG15Zmls bGJ1ZigpOworCSAgICBteV9pdGVtID0gLTE7CQkvKiBeXl4gKi8KKwkgICAgZGVidWcoRjEwMSwi aW5fY2hrIG15ZmlsbGJ1ZiBteV9jb3VudCIsIiIsbXlfY291bnQpOworCSAgICBpZiAobXlfY291 bnQgPCAwKQorCSAgICAgIHJldHVybigtMSk7CisJICAgIGVsc2UKKwkgICAgICBuID0gMDsJCQkv KiBOQjogbiBpcyByZXBsYWNlZCBieSBteV9jb3VudCAqLworCX0KKyNlbmRpZiAvKiBGSU9OUkVB RCAqLworLyoKKyAgSGVyZSB3ZSBhZGQgd2hhdGV2ZXIgd2UgdGhpbmsgaXMgdW5yZWFkIHRvIHdo YXQgaXMgc3RpbGwgaW4gb3VyCisgIG91ciBpbnRlcm5hbCBidWZmZXIuICBUaHVzIHRoZSBpbXBv cnRhbmNlIG9mIHNldHRpbmcgbiB0byAwIGp1c3QgYWJvdmUuCisqLworCWRlYnVnKEYxMDEsImlu X2NoayBteV9jb3VudCIsIiIsbXlfY291bnQpOworCWRlYnVnKEYxMDEsImluX2NoayBuIiwiIixu KTsKKwlpZiAobXlfY291bnQgPiAwKQorCSAgbiArPSBteV9jb3VudDsKKyNlbmRpZiAvKiBNWVJF QUQgKi8KKyAgICB9CisgICAgZGVidWcoRjEwMSwiaW5fY2hrIHJlc3VsdCIsIiIsbik7CisKKyAg ICAvKiBFcnJvcnMgaGVyZSBkb24ndCBwcm92ZSB0aGUgY29ubmVjdGlvbiBoYXMgZHJvcHBlZCBz byBqdXN0IHNheSAwICovCisKKyAgICByZXR1cm4obiA8IDAgPyAwIDogbik7Cit9CisKKworLyog IFQgVCBDIEggSyAgLS0gIFRlbGwgaG93IG1hbnkgY2hhcmFjdGVycyBhcmUgd2FpdGluZyBpbiB0 dHkgaW5wdXQgYnVmZmVyICAqLworCitpbnQKK3R0Y2hrKCkgeworICAgIGludCBmZDsKKyNpZmRl ZiBORVRDTUQKKyAgICBpZiAodHRwaXBlKQorICAgICAgZmQgPSBmZGluOworICAgIGVsc2UKKyNl bmRpZiAvKiBORVRDTUQgKi8KKyAgICAgIGZkID0gdHR5ZmQ7CisgICAgcmV0dXJuKGluX2Noaygx LGZkKSk7Cit9CisKKy8qICBUIFQgWCBJIE4gIC0tICBHZXQgbiBjaGFyYWN0ZXJzIGZyb20gdHR5 IGlucHV0IGJ1ZmZlciAgKi8KKworLyogIFJldHVybnMgbnVtYmVyIG9mIGNoYXJhY3RlcnMgYWN0 dWFsbHkgZ290dGVuLCBvciAtMSBvbiBmYWlsdXJlICAqLworCisvKiAgSW50ZW5kZWQgZm9yIHVz ZSBvbmx5IHdoZW4gaXQgaXMga25vd24gdGhhdCBuIGNoYXJhY3RlcnMgYXJlIGFjdHVhbGx5ICov CisvKiAgQXZhaWxhYmxlIGluIHRoZSBpbnB1dCBidWZmZXIuICAqLworCitpbnQKK3R0eGluKG4s YnVmKSBpbnQgbjsgQ0hBUiAqYnVmOyB7CisgICAgcmVnaXN0ZXIgaW50IHggPSAwLCBjID0gLTI7 CisjaWZkZWYgVFRMRUJVRgorICAgIHJlZ2lzdGVyIGludCBpID0gMDsKKyNlbmRpZiAvKiBUVExF QlVGICovCisgICAgaW50IGZkOworCisgICAgaWYgKG4gPCAxKQkJCQkvKiBOb3RoaW5nIHRvIGRv ICovCisgICAgICByZXR1cm4oMCk7CisKKyNpZmRlZiBUVExFQlVGCisgICAgaWYgKHR0cHVzaCA+ PSAwKSB7CisgICAgICAgIGJ1ZlswXSA9IHR0cHVzaDsJCS8qIFB1dCBwdXNoZWQgY2hhciBpbiBi dWZmZXIqLworICAgICAgICB0dHB1c2ggPSAtMTsJCQkvKiBDbGVhciB0aGUgcHVzaCBidWZmZXIg Ki8KKyAgICAgICAgaWYgKHR0Y2hrKCkgPiAwKQorCSAgcmV0dXJuKHR0eGluKG4tMSwgJmJ1Zlsx XSkgKyAxKTsKKyAgICAgICAgZWxzZQorCSAgcmV0dXJuKDEpOworICAgIH0KKyAgICBpZiAobGVf ZGF0YSkgeworICAgICAgICB3aGlsZSAobGVfaW5idWYoKSA+IDApIHsKKwkgICAgaWYgKGxlX2dl dGNoYXIoJmJ1ZltpXSkpIHsKKyAgICAgICAgICAgICAgICBpKys7CisgICAgICAgICAgICAgICAg bi0tOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICh0dGNoaygpID4gMCkK KwkgIHJldHVybih0dHhpbihuLCZidWZbaV0pK2kpOworICAgICAgICBlbHNlCisJICByZXR1cm4o aSk7CisgICAgfQorI2VuZGlmIC8qIFRUTEVCVUYgKi8KKworI2lmZGVmIE5FVENNRAorICAgIGlm ICh0dHBpcGUpCisgICAgICBmZCA9IGZkaW47CisgICAgZWxzZQorI2VuZGlmIC8qIE5FVENNRCAq LworICAgICAgZmQgPSB0dHlmZDsKKworI2lmZGVmIFNVTlgyNQorICAgIGlmIChuZXRjb25uICYm ICh0dG5ldCA9PSBORVRfU1gyNSkpCS8qIFguMjUgY29ubmVjdGlvbiAqLworICAgICAgcmV0dXJu KHgyNXhpbihuLGJ1ZikpOworI2VuZGlmIC8qIFNVTlgyNSAqLworCisjaWZkZWYgSUJNWDI1Cisg ICAgLyogcmllaG06IHBvc3NpYmx5IG5vdCBuZWVkZWQuIFRlc3Qgd29ya2VkIHdpdGggbm9ybWFs IHJlYWRzIGFuZCB3cml0ZXMgKi8KKyAgICBpZiAobmV0Y29ubiAmJiAodHRuZXQgPT0gTkVUX0lY MjUpKQl7IC8qIFguMjUgY29ubmVjdGlvbiAqLworCXggPSB4MjV4aW4obixidWYpOworCWlmICh4 ID4gMCkgYnVmW3hdID0gJ1wwJzsKKwlyZXR1cm4oeCk7CisgICAgfQorI2VuZGlmIC8qIElCTVgy NSAqLworCisjaWZkZWYgTVlSRUFECisgICAgZGVidWcoRjEwMSwidHR4aW4gTVlSRUFEIiwiIixu KTsKKyAgICB3aGlsZSAoeCA8IG4pIHsKKwljID0gbXlyZWFkKCk7CisJaWYgKGMgPCAwKSB7CisJ ICAgIGRlYnVnKEYxMDEsInR0eGluIG15cmVhZCByZXR1cm5zIiwiIixjKTsKKwkgICAgaWYgKGMg PT0gLTMpIHggPSAtMTsKKwkgICAgYnJlYWs7CisgICAgICAgIH0KKwlidWZbeCsrXSA9IGMgJiB0 dHBtc2s7CisjaWZkZWYgUkxPR0NPREUKKyNpZmRlZiBDS19LRVJCRVJPUworICAgICAgICAvKiBJ dCBpcyBpbXBvc3NpYmxlIHRvIGtub3cgaG93IG1hbnkgY2hhcmFjdGVycyBhcmUgd2FpdGluZyAq LworICAgICAgICAvKiB0byBiZSByZWFkIHdoZW4geW91IGFyZSB1c2luZyBFbmNyeXB0ZWQgUmxv Z2luIG9yIFNTTCAgICAqLworICAgICAgICAvKiBhcyB0aGUgdHJhbnNwb3J0IHNpbmNlIHRoZSBu dW1iZXIgb2YgcmVhbCBkYXRhIGJ5dGVzICAgICAqLworICAgICAgICAvKiBjYW4gYmUgZ3JlYXRl ciBvciBsZXNzIHRoYW4gdGhlIG51bWJlciBvZiBieXRlcyBvbiB0aGUgICAqLworICAgICAgICAv KiB3aXJlIHdoaWNoIGlzIHdoYXQgdHRjaGsoKSByZXR1cm5zLiAgICAgICAgICAgICAgICAgICAg ICAqLworICAgICAgICBpZiAobmV0Y29ubiAmJiAodHRucHJvdG8gPT0gTlBfRUs0TE9HSU4gfHwg dHRucHJvdG8gPT0gTlBfRUs1TE9HSU4pKQorCSAgaWYgKHR0Y2hrKCkgPD0gMCkKKwkgICAgYnJl YWs7CisjZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KKyNlbmRpZiAvKiBSTE9HQ09ERSAqLworI2lm ZGVmIENLX1NTTAorICAgICAgICBpZiAoc3NsX2FjdGl2ZV9mbGFnIHx8IHRsc19hY3RpdmVfZmxh ZykKKwkgIGlmICh0dGNoaygpIDw9IDApCisJICAgIGJyZWFrOworI2VuZGlmIC8qIENLX1NTTCAq LworICAgIH0KKyNlbHNlCisgICAgZGVidWcoRjEwMSwidHR4aW4gUkVBRCIsIiIsbik7CisgICAg eCA9IHJlYWQoZmQsYnVmLG4pOworICAgIGZvciAoYyA9IDA7IGMgPCBuOyBjKyspCQkvKiBTdHJp cCBhbnkgcGFyaXR5ICovCisgICAgICBidWZbY10gJj0gdHRwbXNrOworI2VuZGlmIC8qIE1ZUkVB RCAqLworCisgICAgZGVidWcoRjEwMSwidHR4aW4geCIsIiIseCk7CQkvKiBEb25lICovCisgICAg aWYgKHggPiAwKSBidWZbeF0gPSAnXDAnOworICAgIGlmICh4IDwgMCkgeCA9IC0xOworICAgIHJl dHVybih4KTsKK30KKworLyogIFQgVCBPIEwgIC0tICBXcml0ZSBzdHJpbmcgcywgbGVuZ3RoIG4s IHRvIGNvbW11bmljYXRpb24gZGV2aWNlLiAgKi8KKy8qCisgIFJldHVybnM6CisgICA+PSAwIG9u IHN1Y2Nlc3MsIG51bWJlciBvZiBjaGFyYWN0ZXJzIGFjdHVhbGx5IHdyaXR0ZW4uCisgICAtMSBv biBmYWlsdXJlLgorKi8KKyNpZmRlZiBDS19FTkNSWVBUSU9OCitDSEFSICogeHBhY2tldCA9IE5V TEw7CitpbnQgbnhwYWNrZXQgPSAwOworI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KKworI2Rl ZmluZSBUVE9MTUFYVCA1CitpbnQKK3R0b2wocyxuKSBpbnQgbjsgQ0hBUiAqczsgeworICAgIGlu dCB4LCBsZW4sIHRyaWVzLCBmZDsKKyNpZmRlZiBDS1hYQ0hBUgorICAgIGV4dGVybiBpbnQgZGJs ZmxhZzsJCQkvKiBGb3IgU0VUIFNFTkQgRE9VQkxFLUNIQVJBQ1RFUiAqLworICAgIGV4dGVybiBz aG9ydCBkYmx0W107CisgICAgQ0hBUiAqcCA9IE5VTEwsICpwMiwgKnMyLCBjOworICAgIGludCBu MiA9IDA7CisjZW5kaWYgLyogQ0tYWENIQVIgKi8KKworICAgIGlmICh0dHlmZCA8IDApCQkJLyog Tm90IG9wZW4/ICovCisgICAgICByZXR1cm4oLTMpOworI2lmZGVmIERFQlVHCisgICAgaWYgKGRl YmxvZykgeworCS8qIGRlYnVnKEYxMDEsInR0b2wgdHR5ZmQiLCIiLHR0eWZkKTsgKi8KKwlja2hl eGR1bXAoInR0b2wgcyIscyxuKTsKKyAgICB9CisjZW5kaWYgLyogREVCVUcgKi8KKworI2lmZGVm IE5FVENNRAorICAgIGlmICh0dHBpcGUpCisgICAgICBmZCA9IGZkb3V0OworICAgIGVsc2UKKyNl bmRpZiAvKiBORVRDTUQgKi8KKyAgICAgIGZkID0gdHR5ZmQ7CisKKyNpZmRlZiBDS1hYQ0hBUgor LyogIERvdWJsZSBhbnkgY2hhcmFjdGVycyB0aGF0IG11c3QgYmUgZG91YmxlZC4gICovCisgICAg ZGVidWcoRjEwMSwidHRvbCBkYmxmbGFnIiwiIixkYmxmbGFnKTsKKyAgICBpZiAoZGJsZmxhZykg eworCXAgPSAoQ0hBUiAqKSBtYWxsb2MobiArIG4gKyAxKTsKKwlpZiAocCkgeworCSAgICBzMiA9 IHM7CisJICAgIHAyID0gcDsKKwkgICAgbjIgPSAwOworCSAgICB3aGlsZSAoKnMyKSB7CisJCWMg PSAqczIrKzsKKwkJKnAyKysgPSBjOworCQluMisrOworCQlpZiAoZGJsdFsodW5zaWduZWQpIGNd ICYgMikgeworCQkgICAgKnAyKysgPSBjOworCQkgICAgbjIrKzsKKwkJfQorCSAgICB9CisJICAg IHMgPSBwOworCSAgICBuID0gbjI7CisJICAgIHNbbl0gPSAnXDAnOworCX0KKyNpZmRlZiBERUJV RworICAgICAgICBja2hleGR1bXAoInR0b2wgZG91YmxlZCBzIixzLG4pOworI2VuZGlmIC8qIERF QlVHICovCisgICAgfQorI2VuZGlmIC8qIENLWFhDSEFSICovCisKKyAgICB0cmllcyA9IFRUT0xN QVhUOwkJCS8qIEFsbG93IHVwIHRvIHRoaXMgbWFueSB0cmllcyAqLworICAgIGxlbiA9IG47CQkJ CS8qIFJlbWVtYmVyIG9yaWdpbmFsIGxlbmd0aCAqLworCisjaWZkZWYgQ0tfRU5DUllQVElPTgor LyoKKyAgVGhpcyBpcyB0byBhdm9pZCBlbmNyeXB0aW5nIGEgcGFja2V0IHRoYXQgaXMgYWxyZWFk eSBlbmNyeXB0ZWQsIGUuZy4KKyAgd2hlbiB3ZSByZXNlbmQgYSBwYWNrZXQgZGlyZWN0bHkgb3V0 IG9mIHRoZSBwYWNrZXQgYnVmZmVyLCBhbmQgYWxzbyB0bworICBhdm9pZCBlbmNyeXB0aW5nIGEg Y29uc3RhbnQgKGxpdGVyYWwpIHN0cmluZywgd2hpY2ggY2FuIGNhdXNlIGEgbWVtb3J5CisgIGZh dWx0LgorKi8KKyAgICBpZiAoVEVMT1BUX01FKFRFTE9QVF9FTkNSWVBUSU9OKSkgeworCWludCB4 OworCWlmIChueHBhY2tldCA8IG4pIHsKKwkgICAgaWYgKHhwYWNrZXQpIHsKKwkJZnJlZSh4cGFj a2V0KTsKKwkJeHBhY2tldCA9IE5VTEw7CisJCW54cGFja2V0ID0gMDsKKwkgICAgfQorCSAgICB4 ID0gbiA+IDEwMjQwID8gbiA6IDEwMjQwOworCSAgICB4cGFja2V0ID0gKENIQVIgKiltYWxsb2Mo eCk7CisJICAgIGlmICgheHBhY2tldCkgeworCQlmcHJpbnRmKHN0ZGVyciwidHRvbCBtYWxsb2Mg ZmFpbHVyZVxuIik7CisJCXJldHVybigtMSk7CisJICAgIH0gZWxzZQorCSAgICAgIG54cGFja2V0 ID0geDsKKwl9CisJbWVtY3B5KChjaGFyICopeHBhY2tldCwoY2hhciAqKXMsbik7CisJcyA9IHhw YWNrZXQ7CisJY2tfdG5fZW5jcnlwdCgoY2hhciAqKXMsbik7CisgICAgfQorI2VuZGlmIC8qIENL X0VOQ1JZUFRJT04gKi8KKworICAgIHdoaWxlIChuID4gMCAmJgorCSAgICh0cmllcy0tID4gMAor I2lmZGVmIENLX0VOQ1JZUFRJT04KKwkgICAgLyoga2VlcCB0cnlpbmcgaWYgd2UgYXJlIGVuY3J5 cHRpbmcgKi8KKwkgICAgfHwgVEVMT1BUX01FKFRFTE9QVF9FTkNSWVBUSU9OKQorI2VuZGlmIC8q IENLX0VOQ1JZUFRJT04gKi8KKyAgICAgICAgICAgICkpIHsJCQkvKiBCZSBwZXJzaXN0ZW50ICov CisJZGVidWcoRjEwMSwidHRvbCB0cnkiLCIiLFRUT0xNQVhUIC0gdHJpZXMpOworI2lmZGVmIEJF T1NPUkJFQk9YCisgICAgICAgIGlmIChuZXRjb25uICYmICF0dHBpcGUgJiYgIXR0cHR5KQorCSAg eCA9IG5ldHRvbCgoY2hhciAqKXMsbik7CS8qIFdyaXRlIHN0cmluZyB0byBkZXZpY2UgKi8KKyAg ICAgICAgZWxzZQorI2VuZGlmIC8qIEJFT1NPUkJFQk9YICovCisjaWZkZWYgSUJNWDI1CisJICBp ZiAodHRuZXQgPT0gTkVUX0lYMjUpCisJICAgIC8qCisJICAgICAqIHRoaXMgaXMgYSBtb3JlIGNv bnRyb2xsZWQgd2F5IG9mIHdyaXRpbmcgdG8gWDI1CisJICAgICAqIFNUUkVBTVMsIGhvd2V2ZXIg d3JpdGUgc2hvdWxkIGFsc28gd29yayEKKwkgICAgICovCisJICAgIHggPSB4MjV3cml0ZSh0dHlm ZCwgcywgbik7CisJICBlbHNlCisjZW5kaWYgLyogSUJNWDI1ICovCisjaWZkZWYgQ0tfU1NMCisJ ICAgIGlmIChzc2xfYWN0aXZlX2ZsYWcgfHwgdGxzX2FjdGl2ZV9mbGFnKSB7CisJCWludCBlcnJv cjsKKwkJLyogV3JpdGUgdXNpbmcgU1NMICovCisgICAgICAgICAgICAgICAgc3NsX3JldHJ5Ogor CQlpZiAoc3NsX2FjdGl2ZV9mbGFnKQorICAgICAgICAgICAgICAgICAgeCA9IFNTTF93cml0ZShz c2xfY29uLCBzLCBuKTsKKwkJZWxzZQorICAgICAgICAgICAgICAgICAgeCA9IFNTTF93cml0ZSh0 bHNfY29uLCBzLCBuKTsKKwkJc3dpdGNoIChTU0xfZ2V0X2Vycm9yKHNzbF9hY3RpdmVfZmxhZz9z c2xfY29uOnRsc19jb24seCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFNTTF9FUlJPUl9OT05F OgorICAgICAgICAgICAgICAgICAgICBpZiAoeCA9PSBuKQorCQkgICAgICByZXR1cm4obGVuKTsK KyAgICAgICAgICAgICAgICAgICAgcyArPSB4OworICAgICAgICAgICAgICAgICAgICBuIC09IHg7 CisgICAgICAgICAgICAgICAgICAgIGdvdG8gc3NsX3JldHJ5OworCQkgIGNhc2UgU1NMX0VSUk9S X1dBTlRfV1JJVEU6CisJCSAgY2FzZSBTU0xfRVJST1JfV0FOVF9SRUFEOgorCQkgICAgeCA9IDA7 CisJCSAgICBicmVhazsKKwkJICBjYXNlIFNTTF9FUlJPUl9TWVNDQUxMOgorICAgICAgICAgICAg ICAgICAgICBpZiAoeCAhPSAwKQorCQkgICAgICByZXR1cm4oLTEpOworCQkgIGNhc2UgU1NMX0VS Uk9SX1dBTlRfWDUwOV9MT09LVVA6CisJCSAgY2FzZSBTU0xfRVJST1JfU1NMOgorCQkgIGNhc2Ug U1NMX0VSUk9SX1pFUk9fUkVUVVJOOgorCQkgIGRlZmF1bHQ6CisJCSAgICB0dGNsb3MoMCk7CisJ CSAgICByZXR1cm4oLTMpOworCQl9CisJICAgIH0gZWxzZQorI2VuZGlmIC8qIENLX1NTTCAqLwor I2lmZGVmIENLX0tFUkJFUk9TCisjaWZkZWYgS1JCNAorI2lmZGVmIFJMT0dDT0RFCisJICAgIGlm ICh0dG5wcm90byA9PSBOUF9FSzRMT0dJTikgeworCQlyZXR1cm4oa3JiNF9kZXNfd3JpdGUodHR5 ZmQscyxuKSk7CisJICAgIH0gZWxzZQorI2VuZGlmIC8qIFJMT0dDT0RFICovCisjZW5kaWYgLyog S1JCNCAqLworI2lmZGVmIEtSQjUKKyNpZmRlZiBSTE9HQ09ERQorICAgICAgICAgICAgaWYgKHR0 bnByb3RvID09IE5QX0VLNUxPR0lOKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuKGtyYjVfZGVz X3dyaXRlKHR0eWZkLChjaGFyICopcyxuLDApKTsKKyAgICAgICAgICAgIH0gZWxzZQorI2VuZGlm IC8qIFJMT0dDT0RFICovCisjaWZkZWYgS1JCNV9VMlUKKyAgICAgICAgICAgIGlmICh0dG5wcm90 byA9PSBOUF9LNVUyVSkgeworICAgICAgICAgICAgICAgIHJldHVybihrcmI1X3UydV93cml0ZSh0 dHlmZCwoY2hhciAqKXMsbikpOworICAgICAgICAgICAgfSBlbHNlCisjZW5kaWYgLyogS1JCNV9V MlUgKi8KKyNlbmRpZiAvKiBLUkI1ICovCisjZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KKwkgICAg ICB4ID0gd3JpdGUoZmQscyxuKTsJLyogV3JpdGUgc3RyaW5nIHRvIGRldmljZSAqLworCisJaWYg KHggPT0gbikgewkJCS8qIFdvcmtlZD8gKi8KKwkgICAgZGVidWcoRjEwMSwidHRvbCBvayIsIiIs eCk7CS8qIE9LICovCisjaWZkZWYgQ0tYWENIQVIKKwkgICAgaWYgKHApIGZyZWUocCk7CisjZW5k aWYgLyogQ0tYWENIQVIgKi8KKwkgICAgcmV0dXJuKGxlbik7CQkvKiBEb25lICovCisJfSBlbHNl IGlmICh4IDwgMCkgewkJLyogTm8sIGdvdCBlcnJvcj8gKi8KKwkgICAgZGVidWcoRjEwMSwidHRv bCB3cml0ZSBlcnJvciIsIiIsZXJybm8pOworI2lmZGVmIEVXT1VMREJMT0NLCisJICAgIGlmIChl cnJubyA9PSBFV09VTERCTE9DSykgeworCQltc2xlZXAoMTApOworCQljb250aW51ZTsKKwkgICAg fSBlbHNlCisjZW5kaWYgLyogRVdPVUxEQkxPQ0sgKi8KKyNpZmRlZiBUQ1BTT0NLRVQKKwkgICAg aWYgKG5ldGNvbm4gJiYgdHRuZXQgPT0gTkVUX1RDUEIpIHsKKwkJZGVidWcoRjEwMSwidHRvbCBU Q1AgZXJyb3IiLCIiLGVycm5vKTsKKwkJdHRjbG9zKDApOwkJLyogQ2xvc2UgdGhlIGNvbm5lY3Rp b24uICovCisJCXggPSAtMzsKKwkgICAgfQorI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLworI2lmZGVm IENLWFhDSEFSCisJICAgIGlmIChwKSBmcmVlKHApOworI2VuZGlmIC8qIENLWFhDSEFSICovCisJ ICAgIHJldHVybih4KTsKKwl9IGVsc2UgewkJCS8qIE5vIGVycm9yLCBzbyBwYXJ0aWFsIHN1Y2Nl c3MgKi8KKwkgICAgZGVidWcoRjEwMSwidHRvbCBwYXJ0aWFsIiwiIix4KTsgLyogVGhpcyBuZXZl ciBoYXBwZW5zICovCisJICAgIHMgKz0geDsJCQkvKiBQb2ludCB0byBwYXJ0IG5vdCB3cml0dGVu IHlldCAqLworCSAgICBuIC09IHg7CQkJLyogQWRqdXN0IGxlbmd0aCAqLworCSAgICBpZiAoeCA+ IDApIG1zbGVlcCgxMCk7CS8qIFdhaXQgMTAgbXNlYyAqLworCX0JCQkJLyogR28gYmFjayBhbmQg dHJ5IGFnYWluICovCisgICAgfQorI2lmZGVmIENLWFhDSEFSCisgICAgaWYgKHApIGZyZWUocCk7 CisjZW5kaWYgLyogQ0tYWENIQVIgKi8KKyAgICByZXR1cm4obiA8IDEgPyBsZW4gOiAtMSk7CQkv KiBSZXR1cm4gdGhlIHJlc3VsdHMgKi8KK30KKworLyogIFQgVCBPIEMgIC0tICBPdXRwdXQgYSBj aGFyYWN0ZXIgdG8gdGhlIGNvbW11bmljYXRpb24gbGluZSAgKi8KKworLyoKKyBUaGlzIGZ1bmN0 aW9uIHNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIGludGVyYWN0aXZlLCBjaGFyYWN0ZXItbW9kZSBv cGVyYXRpb25zLAorIGxpa2UgdGVybWluYWwgY29ubmVjdGlvbiwgc2NyaXB0IGV4ZWN1dGlvbiwg ZGlhbGVyIGkvbywgd2hlcmUgdGhlIG92ZXJoZWFkCisgb2YgdGhlIHNpZ25hbHMgYW5kIGFsYXJt cyBkb2VzIG5vdCBjcmVhdGUgYSBib3R0bGVuZWNrLgorKi8KK2ludAorI2lmZGVmIENLX0FOU0lD Cit0dG9jKGNoYXIgYykKKyNlbHNlCit0dG9jKGMpIGNoYXIgYzsKKyNlbmRpZiAvKiBDS19BTlNJ QyAqLworLyogdHRvYyAqLyB7CisjZGVmaW5lIFRUT0NfVE1PIDE1CQkJLyogVGltZW91dCBpbiBj YXNlIHdlIGdldCBzdHVjayAqLworICAgIGludCB4eCwgZmQ7CisKKyAgICBpZiAodHR5ZmQgPCAw KQkJCS8qIENoZWNrIGZvciBub3Qgb3Blbi4gKi8KKyAgICAgIHJldHVybigtMSk7CisKKyNpZmRl ZiBORVRDTUQKKyAgICBpZiAodHRwaXBlKQorICAgICAgZmQgPSBmZG91dDsKKyAgICBlbHNlCisj ZW5kaWYgLyogTkVUQ01EICovCisgICAgICBmZCA9IHR0eWZkOworCisgICAgYyAmPSAweGZmOwor ICAgIC8qIGRlYnVnKEYxMDEsInR0b2MiLCIiLChDSEFSKSBjKTsgKi8KKyAgICBzYXZhbCA9IHNp Z25hbChTSUdBTFJNLHRpbWVyaCk7CS8qIEVuYWJsZSB0aW1lciBpbnRlcnJ1cHQgKi8KKyAgICB4 eCA9IGFsYXJtKFRUT0NfVE1PKTsJCS8qIGZvciB0aGlzIG1hbnkgc2Vjb25kcy4gKi8KKyAgICBp ZiAoeHggPCAwKSB4eCA9IDA7CQkJLyogU2F2ZSBvbGQgYWxhcm0gdmFsdWUuICovCisgICAgLyog ZGVidWcoRjEwMSwidHRvYyBhbGFybSIsIiIseHgpOyAqLworICAgIGlmICgKKyNpZmRlZiBDS19Q T1NJWF9TSUcKKwlzaWdzZXRqbXAoc2pidWYsMSkKKyNlbHNlCisJc2V0am1wKHNqYnVmKQorI2Vu ZGlmIC8qIENLX1BPU0lYX1NJRyAqLworCSkgewkJLyogVGltZXIgd2VudCBvZmY/ICovCisJdHRp bW9mZigpOwkJCS8qIFllcywgY2FuY2VsIHRoaXMgYWxhcm0uICovCisJaWYgKHh4IC0gVFRPQ19U TU8gPiAwKSBhbGFybSh4eCAtIFRUT0NfVE1PKTsgLyogUmVzdG9yZSBwcmV2aW91cyBvbmUgKi8K KyAgICAgICAgLyogZGVidWcoRjEwMCwidHRvYyB0aW1lb3V0IiwiIiwwKTsgKi8KKyNpZmRlZiBO RVRDT05OCisJaWYgKCFuZXRjb25uKSB7CisjZW5kaWYgLyogTkVUQ09OTiAqLworCSAgICBkZWJ1 ZyhGMTAxLCJ0dG9jIHRpbWVvdXQiLCIiLGMpOworCSAgICBpZiAodHRmbG93ID09IEZMT19YT05Y KSB7CisJCWRlYnVnKEYxMDEsInR0b2MgZmxvdyIsIiIsdHRmbG93KTsgLyogTWF5YmUgd2UncmUg eG9mZidkICovCisjaWZuZGVmIFBsYW45CisjaWZkZWYgUE9TSVgKKwkJLyogUE9TSVggd2F5IHRv IHVuc3RpY2suICovCisJCWRlYnVnKEYxMDAsInR0b2MgdGNmbG93IiwiIix0Y2Zsb3codHR5ZmQs VENPT04pKTsKKyNlbHNlCisjaWZkZWYgQlNENAkJCQkvKiBCZXJrZWxleSB3YXkgdG8gZG8gaXQu ICovCisjaWZkZWYgVElPQ1NUQVJUCisvKiAuLi4uIFVzZWQgdG8gYmUgImlvY3RsKHR0eWZkLCBU SU9DU1RBUlQsIDApOyIuICBXaG8ga25vd3M/ICovCisJCXsKKwkJICBpbnQgeCA9IDA7CisJCSAg ZGVidWcoRjEwMSwidHRvYyBUSU9DU1RBUlQiLCIiLGlvY3RsKHR0eWZkLCBUSU9DU1RBUlQsICZ4 KSk7CisJCX0KKyNlbmRpZiAvKiBUSU9DU1RBUlQgKi8KKyNlbmRpZiAvKiBCU0Q0ICovCisJCQkJ CS8qIElzIHRoZXJlIGEgU3lzIFYgd2F5IHRvIGRvIHRoaXM/ICovCisjZW5kaWYgLyogUE9TSVgg Ki8KKyNlbmRpZiAvKiBQbGFuOSAqLworCSAgICB9CisjaWZkZWYgTkVUQ09OTgorICAgICAgICB9 CisjZW5kaWYgLyogTkVUQ09OTiAqLworCXJldHVybigtMSk7CQkJLyogUmV0dXJuIGZhaWx1cmUg Y29kZS4gKi8KKyAgICB9IGVsc2UgeworICAgICAgICBpbnQgcmM7CisjaWZkZWYgQkVPU09SQkVC T1gKKyNpZmRlZiBORVRDT05OCisgICAgICAgIGlmIChuZXRjb25uICYmICF0dHBpcGUgJiYgIXR0 cHR5KQorCSAgcmMgPSBuZXR0b2MoYyk7CisgICAgICAgIGVsc2UKKyNlbmRpZiAvKiAgQkVPU09S QkVCT1ggKi8KKyNlbmRpZiAvKiBORVRDT05OICovCisjaWZkZWYgQ0tfRU5DUllQVElPTgorCSAg aWYgKFRFTE9QVF9NRShURUxPUFRfRU5DUllQVElPTikpCisJICAgIGNrX3RuX2VuY3J5cHQoJmMs MSk7CisjZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLworI2lmZGVmIElCTVgyNQorCS8qIHJpZWht OiBtYXliZSB0aGlzIGlzbid0IG5lY2Vzc2FyeSBhZnRlciBhbGwuIFRlc3QgcHJvZ3JhbQorCSAq IHdvcmtlZCBmaW5lIHdpdGggZGF0YSBiZWluZyBzZW50IGFuZCByZXRyaWV2ZWQgd2l0aCBub3Jt YWwKKwkgKiByZWFkJ3MgYW5kIHdyaXRlcyEKKwkgKi8KKwlpZiAodHRuZXQgPT0gTkVUX0lYMjUp CisJICByYyA9IHgyNXdyaXRlKHR0eWZkLCZjLDEpOyAvKiBhcyBhYm92ZSBmb3IgWDI1IHN0cmVh bXMgKi8KKwllbHNlCisjZW5kaWYgLyogSUJNWDI1ICovCisjaWZkZWYgQ0tfU1NMCisJICBpZiAo c3NsX2FjdGl2ZV9mbGFnIHx8IHRsc19hY3RpdmVfZmxhZykgeworCSAgICAgIGludCBlcnJvcjsK KwkgICAgICAvKiBXcml0ZSB1c2luZyBTU0wgKi8KKwkgICAgICBpZiAoc3NsX2FjdGl2ZV9mbGFn KQorICAgICAgICAgICAgICAgIHJjID0gU1NMX3dyaXRlKHNzbF9jb24sICZjLCAxKTsKKwkgICAg ICBlbHNlCisgICAgICAgICAgICAgICAgcmMgPSBTU0xfd3JpdGUodGxzX2NvbiwgJmMsIDEpOwor CSAgICAgIHN3aXRjaCAoU1NMX2dldF9lcnJvcihzc2xfYWN0aXZlX2ZsYWc/c3NsX2Nvbjp0bHNf Y29uLHJjKSl7CisJCWNhc2UgU1NMX0VSUk9SX05PTkU6CisJCSAgYnJlYWs7CisJCWNhc2UgU1NM X0VSUk9SX1dBTlRfV1JJVEU6CisJCWNhc2UgU1NMX0VSUk9SX1dBTlRfUkVBRDoKKwkJICByYyA9 IDA7CisJCSAgYnJlYWs7CisJCWNhc2UgU1NMX0VSUk9SX1NZU0NBTEw6CisJCSAgaWYgKHJjICE9 IDApCisJCSAgICByZXR1cm4oLTEpOworCQljYXNlIFNTTF9FUlJPUl9XQU5UX1g1MDlfTE9PS1VQ OgorCQljYXNlIFNTTF9FUlJPUl9TU0w6CisJCWNhc2UgU1NMX0VSUk9SX1pFUk9fUkVUVVJOOgor CQlkZWZhdWx0OgorCQkgIHR0Y2xvcygwKTsKKwkJICByZXR1cm4oLTEpOworCSAgICAgIH0KKwkg IH0gZWxzZQorI2VuZGlmIC8qIENLX1NTTCAqLworI2lmZGVmIENLX0tFUkJFUk9TCisjaWZkZWYg S1JCNAorI2lmZGVmIFJMT0dDT0RFCisJICBpZiAodHRucHJvdG8gPT0gTlBfRUs0TE9HSU4pIHsK KwkgICAgICByYyA9IChrcmI0X2Rlc193cml0ZSh0dHlmZCwoY2hhciAqKSZjLDEpID09IDEpOwor CSAgfSBlbHNlCisjZW5kaWYgLyogUkxPR0NPREUgKi8KKyNlbmRpZiAvKiBLUkI0ICovCisjaWZk ZWYgS1JCNQorI2lmZGVmIFJMT0dDT0RFCisgICAgICAgICAgaWYgKHR0bnByb3RvID09IE5QX0VL NUxPR0lOKSB7CisgICAgICAgICAgICAgIHJjID0gKGtyYjVfZGVzX3dyaXRlKHR0eWZkLCZjLDEs MCkgPT0gMSk7CisgICAgICAgICAgfSBlbHNlCisjZW5kaWYgLyogUkxPR0NPREUgKi8KKyNpZmRl ZiBLUkI1X1UyVQorICAgICAgICAgIGlmICh0dG5wcm90byA9PSBOUF9LNVUyVSkgeworICAgICAg ICAgICAgICByYyA9IChrcmI1X3UydV93cml0ZSh0dHlmZCwmYywxKSA9PSAxKTsKKyAgICAgICAg ICB9IGVsc2UKKyNlbmRpZiAvKiBLUkI1X1UyVSAqLworI2VuZGlmIC8qIEtSQjUgKi8KKyNlbmRp ZiAvKiBDS19LRVJCRVJPUyAqLworCSAgICByYyA9IHdyaXRlKGZkLCZjLDEpOwkvKiBUcnkgdG8g d3JpdGUgdGhlIGNoYXJhY3Rlci4gKi8KKwlpZiAocmMgPCAxKSB7CQkJLyogRmFpbGVkICovCisJ ICAgIHR0aW1vZmYoKTsJCQkvKiBUdXJuIG9mZiB0aGUgYWxhcm0uICovCisJICAgIGFsYXJtKHh4 KTsJCQkvKiBSZXN0b3JlIHByZXZpb3VzIGFsYXJtLiAqLworCSAgICBkZWJ1ZyhGMTAxLCJ0dG9j IGVycm5vIiwiIixlcnJubyk7IC8qIExvZyB0aGUgZXJyb3IsICovCisJICAgIHJldHVybigtMSk7 CQkJLyogYW5kIHJldHVybiB0aGUgZXJyb3IgY29kZS4gKi8KKwl9CisgICAgfQorICAgIHR0aW1v ZmYoKTsJCQkJLyogU3VjY2VzcywgdHVybiBvZmYgdGhlIGFsYXJtLiAqLworICAgIGFsYXJtKHh4 KTsJCQkJLyogUmVzdG9yZSBwcmV2aW91cyBhbGFybS4gKi8KKyAgICByZXR1cm4oMCk7CQkJCS8q IFJldHVybiBnb29kIGNvZGUuICovCit9CisKKy8qICBUIFQgSSBOIEwgIC0tICBSZWFkIGEgcmVj b3JkICh1cCB0byBicmVhayBjaGFyYWN0ZXIpIGZyb20gY29tbSBsaW5lLiAgKi8KKy8qCisgIFJl YWRzIHVwIHRvICJtYXgiIGNoYXJhY3RlcnMgZnJvbSB0aGUgY29ubmVjdGlvbiwgdGVybWluYXRp bmcgb246CisgICAgKGEpIHRoZSBwYWNrZXQgbGVuZ3RoIGZpZWxkIGlmIHRoZSAidHVybiIgYXJn dW1lbnQgaXMgemVybywgb3IKKyAgICAoYikgb24gdGhlIHBhY2tldC1lbmQgY2hhcmFjdGVyIChl b2wpIGlmIHRoZSAidHVybiIgYXJndW1lbnQgaXMgbm9uemVybworICAgIChjKSBhIGNlcnRhaW4g bnVtYmVyIG9mIEN0cmwtQydzIGluIGEgcm93CisKKyAgUmV0dXJuczoKKyAgICA+PSAwLCB0aGUg bnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVhZCB1cG9uIHN1Y2Nlc3M7CisgICAgLTEgaWYgIm1heCIg ZXhjZWVkZWQsIHRpbWVvdXQsIG9yIG90aGVyIGNvcnJlY3RhYmxlIGVycm9yOworICAgIC0yIG9u IHVzZXIgaW50ZXJydXB0aW9uIChjKTsKKyAgICAtMyBvbiBmYXRhbCBlcnJvciBsaWtlIGNvbm5l Y3Rpb24gbG9zdC4KKworICBUaGUgbmFtZSBvZiB0aGlzIHJvdXRpbmUgZGF0ZXMgZnJvbSB0aGUg ZWFybHkgZGF5cyB3aGVuIEtlcm1pdCBwYWNrZXRzCisgIHdlcmUsIGluZGVlZCwgYWx3YXlzIGxp bmVzIG9mIHRleHQuICBUaGF0IHdhcyBiZWZvcmUgY29udHJvbC1jaGFyYWN0ZXIKKyAgdW5wcmVm aXhpbmcgYW5kIGxlbmd0aC1kcml2ZW4gcGFja2V0IGZyYW1pbmcgd2VyZSBpbnRyb2R1Y2VkLCB3 aGljaCB0aGlzCisgIHZlcnNpb24gaGFuZGxlLiAgTkI6IHRoaXMgcm91dGluZSBpcyBPTkxZIGZv ciByZWFkaW5nIGluY29taW5nIEtlcm1pdAorICBwYWNrZXRzLCBub3RoaW5nIGVsc2UuICBUbyBy ZWFkIG90aGVyIGtpbmRzIG9mIGluY29taW5nIG1hdGVyaWFsLCB1c2UKKyAgdHRpbmMoKSBvciB0 dHhpbigpLgorCisgIFRoZSBieXRlcyB0aGF0IHdlcmUgaW5wdXQgYXJlIGNvcGllZCBpbnRvICJk ZXN0IiB3aXRoIHRoZWlyIHBhcml0eSBiaXRzCisgIHN0cmlwcGVkIGlmIHBhcml0eSB3YXMgc2Vs ZWN0ZWQuICBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVhZC4KKyAgQnl0ZXMgYWZ0ZXIg dGhlIGVvbCBhcmUgYXZhaWxhYmxlIHVwb24gdGhlIG5leHQgY2FsbCB0byB0aGlzIGZ1bmN0aW9u LgorCisgIFRoZSBpZGVhIGlzIHRvIG1pbmltaXplIHRoZSBudW1iZXIgb2Ygc3lzdGVtIGNhbGxz IHBlciBwYWNrZXQsIGFuZCBhbHNvIHRvCisgIG1pbmltaXplIHRpbWVvdXRzLiAgVGhpcyBmdW5j dGlvbiBpcyB0aGUgaW5uZXIgbG9vcCBvZiB0aGUgcHJvdG9jb2wgYW5kIG11c3QKKyAgYmUgYXMg ZWZmaWNpZW50IGFzIHBvc3NpYmxlLiAgVGhlIGN1cnJlbnQgc3RyYXRlZ3kgaXMgdG8gdXNlIG15 cmVhZCgpLCBhCisgIG1hY3JvIHRvIG1hbmFnZSBidWZmZXJlZCAoYW5kIGdlbmVyYWxseSBub25i bG9ja2luZykgcmVhZHMuCisKKyAgV0FSTklORzogVGhpcyBmdW5jdGlvbiBjYWxscyBwYXJjaGso KSwgd2hpY2ggaXMgZGVmaW5lZCBpbiBhbm90aGVyIG1vZHVsZS4KKyAgTm9ybWFsbHksIGNrdXRp by5jIGRvZXMgbm90IGRlcGVuZCBvbiBjb2RlIGZyb20gYW55IG90aGVyIG1vZHVsZSwgYnV0IHRo ZXJlCisgIGlzIGFuIGV4Y2VwdGlvbiBpbiB0aGlzIGNhc2UgYmVjYXVzZSBhbGwgdGhlIG90aGVy IGNrP3Rpby5jIG1vZHVsZXMgYWxzbworICBuZWVkIHRvIGNhbGwgcGFyY2hrKCksIHNvIGl0J3Mg YmV0dGVyIHRvIGhhdmUgaXQgZGVmaW5lZCBpbiBhIGNvbW1vbiBwbGFjZS4KKyovCisjaWZkZWYg Q1RSTEMKKyN1bmRlZiBDVFJMQworI2VuZGlmIC8qIENUUkxDICovCisjZGVmaW5lIENUUkxDICdc MDMnCisvKgorICBXZSBoYXZlIGZvdXIgZGlmZmVyZW50IGRlY2xhcmF0aW9ucyBoZXJlIGJlY2F1 c2U6CisgIChhKSB0byBhbGxvdyBLZXJtaXQgdG8gYmUgYnVpbHQgd2l0aG91dCB0aGUgYXV0b21h dGljIHBhcml0eSBzZW5zaW5nIGZlYXR1cmUKKyAgKGIpIG9uZSBvZiBlYWNoIHR5cGUgZm9yIEFO U0kgQywgb25lIGZvciBub24tQU5TSS4KKyovCisjaWZuZGVmIE5PWEZFUgorCitzdGF0aWMgaW50 IHB1c2hlZGJhY2sgPSAwOworCitpbnQKKyNpZmRlZiBQQVJTRU5TRQorI2lmZGVmIENLX0FOU0lD Cit0dGlubChDSEFSICpkZXN0LCBpbnQgbWF4LGludCB0aW1vLCBDSEFSIGVvbCwgQ0hBUiBzdGFy dCwgaW50IHR1cm4pCisjZWxzZQordHRpbmwoZGVzdCxtYXgsdGltbyxlb2wsc3RhcnQsdHVybikg aW50IG1heCx0aW1vLHR1cm47IENIQVIgKmRlc3QsIGVvbCwgc3RhcnQ7CisjZW5kaWYgLyogQ0tf QU5TSUMgKi8KKyNlbHNlIC8qIG5vdCBQQVJTRU5TRSAqLworI2lmZGVmIENLX0FOU0lDCit0dGlu bChDSEFSICpkZXN0LCBpbnQgbWF4LGludCB0aW1vLCBDSEFSIGVvbCkKKyNlbHNlCit0dGlubChk ZXN0LG1heCx0aW1vLGVvbCkgaW50IG1heCx0aW1vOyBDSEFSICpkZXN0LCBlb2w7CisjZW5kaWYg LyogQ0tfQU5TSUMgKi8KKyNlbmRpZiAvKiBQQVJTRU5TRSAqLworLyogdHRpbmwgKi8geworCisj aWZuZGVmIE1ZUkVBRAorICAgIENIQVIgY2gsIGR1bTsKKyNlbmRpZiAvKiBNWVJFQUQgKi8KKyNp ZmRlZiBQQVJTRU5TRQorICAgIGludCBwa3RsZW4gPSAtMTsKKyAgICBpbnQgbHBsZW4gPSAwOwor ICAgIGludCBoYXZlbGVuID0gMDsKKyNlbmRpZiAvKiBQQVJTRU5TRSAqLworICAgIGludCBmZDsK KyAgICBpbnQgc29wbWFzayA9IDB4ZmY7CQkJLyogU3RhcnQtT2YtUGFja2V0IG1hc2sgKi8KKyNp ZmRlZiBDS1hYQ0hBUgorICAgIGV4dGVybiBzaG9ydCBkYmx0W107CQkvKiBJZ25vcmUtY2hhcmFj dGVyIHRhYmxlICovCisgICAgZXh0ZXJuIGludCBpZ25mbGFnOworI2VuZGlmIC8qIENLWFhDSEFS ICovCisjaWZkZWYgVENQU09DS0VUCisgICAgZXh0ZXJuIENIQVIgc3RjaHI7CisjZW5kaWYgLyog VENQU09DS0VUICovCisgICAgaW50IHg7CisjaWZkZWYgU1RSRUFNSU5HCisgICAgZXh0ZXJuIGlu dCBzdHJlYW1pbmc7CisgICAgZXh0ZXJuIGludCBzbmR0eXA7CisjZW5kaWYgLyogU1RSRUFNSU5H ICovCisKKyAgICBpZiAodHR5ZmQgPCAwKSByZXR1cm4oLTMpOyAgICAgICAgICAvKiBOb3Qgb3Bl bi4gKi8KKy8qCisgIEluIEZlYnJ1YXJ5IDIwMDcgSSBmaXhlZCB0dGlubCgpIHRvIHdvcmsgYmV0 dGVyIHVuZGVyIHRoZSB0cnVseSBhd2Z1bAorICBjb25kaXRpb25zIGVuY291bnRlcmVkIGJ5IHRo ZSBBTS1BUEVYIG9jZWFub2dyYXBoaWMgZmxvYXRzIHRoYXQgZ2F0aGVyCisgIGh1cnJpY2FuZSBk YXRhIGFuZCBwaG9uZSBob21lIHVzaW5nIElyaWRpdW0gc2F0ZWxsaXRlIG1vZGVtcywgd2hpY2gg dW5kZXIKKyAgY2VydGFpbiBjb25kaXRpb25zLCBjYW4gc2VuZCB0d28gcGFja2V0cyBiYWNrIHRv IGJhY2sgYWZ0ZXIgYSBsb25nIHBhdXNlLgorICBJbiB0aGlzIGNhc2UgdGhlIHNlY29uZCBwYWNr ZXQgd291bGQgYmUgaWdub3JlZCBiZWNhdXNlIHRoZSBTT0ggd2FzIHNraXBwZWQKKyAgZHVlIHRv IHRoZSB0dGZsdWkoKSBjYWxsLiAgQnV0IHRoZSByZXdvcmtlZCBsb29rYWhlYWQvcHVzaGJhY2sg bG9naWMgYnJva2UKKyAgS2VybWl0IHRyYW5zZmVycyBvbiBlbmNyeXB0ZWQgY29ubmVjdGlvbnMu ICBUaGlzIHdhcyBmaXhlZCAxMi0xMyBBdWd1c3QKKyAgMjAwNy4gIEFsbCBvZiB0aGlzIGhhcHBl bmVkIGFmdGVyIDguMC4yMTIgRGV2LjI3IHdhcyByZWxlYXNlZCBhbmQgYmVmb3JlCisgIERldi4y OCwgc28gbm8gaGFybSBkb25lIG90aGVyIHRoYW4gdGhlIGRlbGF5LgorKi8KKyAgICBkZWJ1ZyhG MTAxLCJ0dGlubCBtYXgiLCIiLG1heCk7CisgICAgZGVidWcoRjEwMSwidHRpbmwgdGltbyIsIiIs dGltbyk7CisKKyNpZmRlZiBORVRDTUQKKyAgICBpZiAodHRwaXBlKQorICAgICAgZmQgPSBmZGlu OworICAgIGVsc2UKKyNlbmRpZiAvKiBORVRDTUQgKi8KKyAgICAgIGZkID0gdHR5ZmQ7CisKKyNp ZmRlZiBDT01NRU5UCisgICAgaWYgKHhsb2NhbCAmJiBjb25jaGsoKSA+IDApCQkvKiBBbGxvdyBm b3IgY29uc29sZSBpbnRlcnJ1cHRpb25zICovCisgICAgICByZXR1cm4oLTEpOworI2VuZGlmIC8q IENPTU1FTlQgKi8KKworICAgICpkZXN0ID0gJ1wwJzsgICAgICAgICAgICAgICAgICAgICAgIC8q IENsZWFyIGRlc3RpbmF0aW9uIGJ1ZmZlciAqLworICAgIGlmICh0aW1vIDwgMCkgdGltbyA9IDA7 CQkvKiBTYWZldHkgKi8KKyAgICBpZiAodGltbykgewkJCQkvKiBEb24ndCB0aW1lIG91dCBpZiB0 aW1vID09IDAgKi8KKwlpbnQgeHg7CisJc2F2YWwgPSBzaWduYWwoU0lHQUxSTSx0aW1lcmgpOwkv KiBFbmFibGUgdGltZXIgaW50ZXJydXB0ICovCisJeHggPSBhbGFybSh0aW1vKTsJCS8qIFNldCBp dC4gKi8KKwlkZWJ1ZyhGMTAxLCJ0dGlubCBhbGFybSIsIiIseHgpOworICAgIH0KKyAgICBpZiAo CisjaWZkZWYgQ0tfUE9TSVhfU0lHCisJc2lnc2V0am1wKHNqYnVmLDEpCisjZWxzZQorCXNldGpt cChzamJ1ZikKKyNlbmRpZiAvKiBDS19QT1NJWF9TSUcgKi8KKwkpIHsJCQkJLyogVGltZXIgd2Vu dCBvZmY/ICovCisJZGVidWcoRjEwMCwidHRpbmwgdGltb3V0IiwiIiwwKTsgLyogR2V0IGhlcmUg b24gdGltZW91dC4gKi8KKwkvKiBkZWJ1ZyhGMTEwLCIgd2l0aCIsKGNoYXIgKikgZGVzdCwwKTsg Ki8KKwl0dGltb2ZmKCk7CQkJLyogVHVybiBvZmYgdGltZXIgKi8KKwlyZXR1cm4oLTEpOwkJCS8q IGFuZCByZXR1cm4gZXJyb3IgY29kZS4gKi8KKyAgICB9IGVsc2UgeworCXJlZ2lzdGVyIGludCBp LCBuID0gLTE7CQkvKiBsb2NhbCB2YXJpYWJsZXMgKi8KKwlpbnQgY2NuID0gMDsKKyNpZmRlZiBQ QVJTRU5TRQorCXJlZ2lzdGVyIGludCBmbGFnID0gMDsKKwlkZWJ1ZyhGMDAwLCJ0dGlubCBzdGFy dCIsIiIsc3RhcnQpOworI2VuZGlmIC8qIFBBUlNFTlNFICovCisKKwl0dHBtc2sgPSB0dHBydHkg PyAwMTc3IDogMDM3NzsJLyogU2V0IHBhcml0eSBzdHJpcHBpbmcgbWFzay4gKi8KKwlzb3BtYXNr ID0gbmVlZHBjaGsgPyAwMTc3IDogdHRwbXNrOyAvKiBBbmQgU09QIG1hdGNoaW5nIG1hc2suICov CisKKy8qIE5vdyByZWFkIGludG8gZGVzdGluYXRpb24sIHN0cmlwcGluZyBwYXJpdHkgYW5kIGxv b2tpbmcgZm9yIHRoZSAqLworLyogdGhlIHBhY2tldCB0ZXJtaW5hdG9yLCBhbmQgYWxzbyBmb3Ig c2V2ZXJhbCBDdHJsLUMncyB0eXBlZCBpbiBhIHJvdy4gKi8KKworCWkgPSAwOwkJCQkvKiBEZXN0 aW5hdGlvbiBpbmRleCAqLworCWRlYnVnKEYxMDEsInR0aW5sIGVvbCIsIiIsZW9sKTsKKworCXdo aWxlIChpIDwgbWF4LTEpIHsKKyNpZmRlZiBNWVJFQUQKKwkgICAgZXJybm8gPSAwOworCSAgICAv KiBPbiBlbmNyeXB0ZWQgY29ubmVjdGlvbnMgbXlyZWFkIHJldHVybnMgZW5jcnlwdGVkIGJ5dGVz ICovCisJICAgIG4gPSBteXJlYWQoKTsKKwkgICAgZGVidWcoRjAwMCwiVFRJTkwgbXlyZWFkIGNo YXIiLCIiLG4pOworCSAgICBpZiAobiA8IDApIHsJLyogVGltZW91dCBvciBpL28gZXJyb3I/ICov CisjaWZkZWYgREVCVUcKKwkJaWYgKGRlYmxvZykgeworCQkgICAgZGVidWcoRjEwMSwidHRpbmwg bXlyZWFkIGZhaWx1cmUsIG4iLCIiLG4pOworCQkgICAgZGVidWcoRjEwMSwidHRpbmwgbXlyZWFk IGVycm5vIiwiIixlcnJubyk7CisJCX0KKyNlbmRpZiAvKiBERUJVRyAqLworCQkvKiBEb24ndCBs ZXQgRUlOVFIgYnJlYWsgcGFja2V0cy4gKi8KKwkJaWYgKG4gPT0gLTMpIHsKKwkJICAgIGlmIChl cnJubyA9PSBFSU5UUiAmJiBpID4gMCkgeworCQkJZGVidWcoRjExMSwidHRpbmwgRUlOVFIgbXly ZWFkIGkiLCJjb250aW51aW5nIixpKTsKKwkJCWNvbnRpbnVlOworCQkgICAgfSBlbHNlIHsKKwkJ CWRlYnVnKEYxMTAsInR0aW5sIG5vbi1FSU5UUiAtMyIsImNsb3NpbmciLDApOworCQkJd2FzY2xv c2VkID0gMTsKKwkJCXR0aW1vZmYoKTsJLyogVHVybiBvZmYgdGltZXIgKi8KKwkJCXR0Y2xvcygw KTsKKwkJCXJldHVybihuKTsKKwkJICAgIH0KKwkJfSBlbHNlIGlmIChuID09IC0yICYmIG5ldGNv bm4gLyogJiYgdGltbyA9PSAwICovICkgeworCQkgICAgLyogSGVyZSB3ZSB0cnkgdG8gY2F0Y2gg YnJva2VuIG5ldHdvcmsgY29ubmVjdGlvbnMgKi8KKwkJICAgIC8qIGV2ZW4gd2hlbiBpb2N0bCgp IGFuZCByZWFkKCkgZG8gbm90IGNhdGNoIHRoZW0gKi8KKwkJICAgIGRlYnVnKEYxMTEsInR0aW5s IG5ldHdvcmsgbXlyZWFkIGZhaWx1cmUiLCJjbG9zaW5nIixuKTsKKwkJICAgIHdhc2Nsb3NlZCA9 IDE7CisJCSAgICB0dGltb2ZmKCk7CisJCSAgICB0dGNsb3MoMCk7CisJCSAgICByZXR1cm4oLTMp OworCQl9CisjaWZkZWYgU1RSRUFNSU5HCisJCS8qIFN0cmVhbWluZyBhbmQgbm8gZGF0YSB0byBy ZWFkICovCisJCWVsc2UgaWYgKG4gPT0gMCAmJiBzdHJlYW1pbmcgJiYgc25kdHlwID09ICdEJykK KwkJICByZXR1cm4oMCk7CisjZW5kaWYgLyogU1RSRUFNSU5HICovCisJCWJyZWFrOwkJCS8qIEJy ZWFrIG91dCBvZiB3aGlsZSBsb29wICovCisJICAgIH0KKworI2Vsc2UgLyogbm90IE1ZUkVBRCAo aXMgdGhpcyBjb2RlIHVzZWQgYW55d2hlcmUgYW55IG1vcmU/KSAqLworLyoKKyAgVGhlIG5vbi1N WVJFQUQgY29kZSBkYXRlcyBmcm9tIHRoZSAxOTgwcyBhbmQgd2FzIG5lZWRlZCBvbiBjZXJ0YWlu IHBsYXRmb3JtcworICB3aGVyZSB0aGVyZSB3ZXJlIG5vIG5vbmJsb2NraW5nIHJlYWRzLiAgLWZk YywgMjAwNy8wMi8yMi4KKyovCisJICAgIGlmICgobiA9IHJlYWQoZmQsICZuLCAxKSkgPCAxKQor CSAgICAgIGJyZWFrOwkJCS8qIEVycm9yIC0gYnJlYWsgb3V0IG9mIHdoaWxlIGxvb3AgKi8KKwor I2VuZGlmIC8qIE1ZUkVBRCAqLworCisJICAgIC8qIEdldCBoZXJlIHdpdGggY2hhciBpbiBuICov CisKKyNpZmRlZiBDS19FTkNSWVBUSU9OCisJICAgIGlmIChURUxPUFRfVShURUxPUFRfRU5DUllQ VElPTikgJiYgIXB1c2hlZGJhY2spIHsKKwkJQ0hBUiBjaCA9IG47CisJCWNrX3RuX2RlY3J5cHQo KGNoYXIgKikmY2gsMSk7CisJCW4gPSBjaDsKKwkJZGVidWcoRjAwMCwiVFRJTkwgZGVjcnlwIGNo YXIiLCIiLG4pOworCSAgICB9CisJICAgIHB1c2hlZGJhY2sgPSAwOworI2VuZGlmIC8qIENLX0VO Q1JZUFRJT04gKi8KKworI2lmZGVmIFRDUFNPQ0tFVAorCSAgICBpZiAobiA9PSBJQUMgJiYJCS8q IEhhbmRsZSBUZWxuZXQgb3B0aW9ucyAqLworCQkoKHhsb2NhbCAmJiBuZXRjb25uICYmIElTX1RF TE5FVCgpKSB8fAorCQkoIXhsb2NhbCAmJiBzc3RlbG5ldCkpKSB7CisJCW4gPSB0dF90bm9wdChu KTsKKwkJaWYgKG4gPCAwKQorCQkgIHJldHVybihuKTsKKyNpZm5kZWYgTk9QQVJTRU4KKwkJZWxz ZSBpZiAobiA9PSAxKQorCQkgIHN0YXJ0ID0gc3RjaHI7CisjZW5kaWYgLyogTk9QQVJTRU4gKi8K KwkJaWYgKG4gIT0gMjU1KQkJLyogTm8gZGF0YSAtIGdvIGJhY2sgZm9yIG5leHQgY2hhciAqLwor CQkgIGNvbnRpbnVlOworCSAgICB9CQkJCS8qIFF1b3RlZCBJQUMgLSBrZWVwIGdvaW5nICovCisj ZW5kaWYgLyogVENQU09DS0VUICovCisKKyNpZmRlZiBDS1hYQ0hBUgorCSAgICBpZiAoaWduZmxh ZykKKwkgICAgICBpZiAoZGJsdFsodW5zaWduZWQpIG5dICYgMSkgLyogQ2hhcmFjdGVyIHRvIGln bm9yZT8gKi8KKwkJY29udGludWU7CisjZW5kaWYgLyogQ0tYWENIQVIgKi8KKy8qCisgIFVzZSBw YXJpdHkgbWFzaywgcmF0aGVyIHRoYW4gYWx3YXlzIHN0cmlwcGluZyBwYXJpdHksIHRvIGNoZWNr IGZvcgorICBjYW5jZWxsYXRpb24uICBPdGhlcndpc2UsIHJ1bnMgbGlrZSBceDAzXHg4M1x4MDMg aW4gYSBwYWNrZXQgY291bGQgY2FuY2VsCisgIHRoZSB0cmFuc2ZlciB3aGVuIHBhcml0eSBpcyBO T05FLiAgKE5vdGUgdGhhdCBceDAzXHgwM1x4MDMgaXMgZXh0cmVtZWx5CisgIHVubGlrZWx5IGR1 ZSB0byBydW4tbGVuZ3RoIGVuY29kaW5nLikKKyovCisJICAgIC8qIENoZWNrIGNhbmNlbGxhdGlv biAqLworCSAgICBpZiAoIXhsb2NhbCAmJiB4ZnJjYW4gJiYgKChuICYgdHRwbXNrKSA9PSB4ZnJj aHIpKSB7CisJCWlmICgrK2NjbiA+PSB4ZnJudW0pIHsJLyogSWYgeGZybnVtIGluIGEgcm93LCBi YWlsIG91dC4gKi8KKwkJICAgIGlmICh0aW1vKSB7CQkvKiBDbGVhciB0aW1lci4gKi8KKwkJCXR0 aW1vZmYoKTsKKwkJICAgIH0KKwkJICAgIGlmICh4ZnJjaHIgPCAzMikKKwkJICAgICAgcHJpbnRm KCJeJWMuLi5cclxuIiwoY2hhcikoeGZyY2hyKzY0KSk7CisJCSAgICBlbHNlCisJCSAgICAgIHBy aW50ZigiQ2FuY2VsZWQuLi5cclxuIik7CisJCSAgICByZXR1cm4oLTIpOworCQl9CisJICAgIH0g ZWxzZSBjY24gPSAwOwkJLyogTm8gY2FuY2VsbGF0aW9uLCByZXNldCBjb3VudGVyLCAqLworCisj aWZkZWYgUEFSU0VOU0UKKy8qCisgIFJlc3RydWN0dXJlZCBjb2RlIGFsbG93cyBmb3IgYSBuZXcg cGFja2V0IHRvIGFwcGVhciBzb21ld2hlcmUgaW4gdGhlCisgIG1pZGRsZSBvZiBhIHByZXZpb3Vz IG9uZS4gIC1mZGMsIDI0IEZlYiAyMDA3LgorKi8KKwkgICAgaWYgKChuICYgc29wbWFzaykgPT0g c3RhcnQpIHsgLyogU3RhcnQgb2YgUGFja2V0ICovCisJCWRlYnVnKEYxMDEsInR0aW5sIFNPUCBp IiwiIixpKTsKKwkJZmxhZyA9IDE7CQkvKiBGbGFnIHRoYXQgd2UgYXJlIGluIGEgcGFja2V0ICov CisJCWhhdmVsZW4gPSAwOwkJLyogSW52YWxpZGF0ZSBwcmV2aW91cyBsZW5ndGggKi8KKwkJcGt0 bGVuID0gLTE7CQkvKiAoaWYgYW55KSBpbiBjYXNlIHdlIHdlcmUgKi8KKwkJbHBsZW4gPSAwOwkJ LyogYWxyZWFkIHByb2Nlc3NhbmQgYSBwYWNrZXQgKi8KKwkJaSA9IDA7CQkJLyogYW5kIHJlc2V0 IHRoZSBkZXN0IGJ1ZmZlciBwb2ludGVyICovCisJICAgIH0KKwkgICAgaWYgKGZsYWcgPT0gMCkg ewkJLyogTm8gU09QIHlldC4uLiAqLworCQlkZWJ1ZyhGMDAwLCJ0dGlubCBza2lwcGluZyIsIiIs bik7CisJCWNvbnRpbnVlOworCSAgICB9CisJICAgIGRlc3RbaSsrXSA9IG4gJiB0dHBtc2s7Cisv KgorICBJZiB3ZSBoYXZlIG5vdCBiZWVuIGluc3RydWN0ZWQgdG8gd2FpdCBmb3IgYSB0dXJuYXJv dW5kIGNoYXJhY3Rlciwgd2UgY2FuIGdvCisgIGJ5IHRoZSBwYWNrZXQgbGVuZ3RoIGZpZWxkLiAg SWYgdHVybiAhPSAwLCB3ZSBtdXN0IHdhaXQgZm9yIHRoZSBlbmQgb2YgbGluZQorICAoZW9sKSBj aGFyYWN0ZXIgYmVmb3JlIHJldHVybmluZy4gIFRoaXMgaXMgYW4gZWdyZWdpb3VzIHZpb2xhdGlv biBvZiBhbGwKKyAgcHJpbmNpcGxlcyBvZiBsYXllcmluZy4uLiAgKExlc3MgZWdyZWdpb3VzIGlu IEMtS2VybWl0IDkuMCwgaW4gd2hpY2ggd2UgZ28KKyAgYnkgdGhlIGxlbmd0aCBmaWVsZCBidXQg YWxzbyBsb29rIGZvciB0aGUgZW9sIGluIGNhc2UgaXQgYXJyaXZlcyBlYXJseSwKKyAgZS5nLiBp ZiB0aGUgbGVuZ3RoIGZpZWxkIHdhcyBjb3JydXB0ZWQgdXB3YXJkcy4pCisqLworCSAgICBpZiAo IWhhdmVsZW4pIHsKKwkJaWYgKGkgPT0gMikgeworCQkgICAgaWYgKChkZXN0WzFdICYgMHg3Zikg PCAzMikgLyogR2FyYmFnZSBpbiBsZW5ndGggZmllbGQgKi8KKwkJICAgICAgcmV0dXJuKC0xKTsJ LyogZmRjIC0gMTMgQXByIDIwMTAgKi8KKwkJICAgIHBrdGxlbiA9IHh1bmNoYXIoZGVzdFsxXSAm IDB4N2YpOworICAgICAgICAgICAgICAgICAgICBpZiAocGt0bGVuID4gOTQpCS8qIFJ1Ym91dCBp biBsZW5ndGggZmllbGQgKi8KKwkJICAgICAgcmV0dXJuKC0xKTsJLyogZmRjIC0gMTMgQXByIDIw MTAgKi8KKwkJICAgIGlmIChwa3RsZW4gPiAxKSB7CisJCQloYXZlbGVuID0gMTsKKwkJCWRlYnVn KEYxMDEsInR0aW5sIHBrdGxlbiB2YWx1ZSIsIiIscGt0bGVuKTsKKwkJICAgIH0KKwkJfSBlbHNl IGlmIChpID09IDUgJiYgcGt0bGVuID09IDApIHsKKwkJICAgIGxwbGVuID0geHVuY2hhcihkZXN0 WzRdICYgMHg3Zik7CisJCX0gZWxzZSBpZiAoaSA9PSA2ICYmIHBrdGxlbiA9PSAwKSB7CisJCSAg ICBwa3RsZW4gPSBscGxlbiAqIDk1ICsgeHVuY2hhcihkZXN0WzVdICYgMHg3ZikgKyA1OworCQkg ICAgaGF2ZWxlbiA9IDE7CisJCSAgICBkZWJ1ZyhGMTAxLCJ0dGlubCBleHRlbmRlZCBsZW5ndGgi LCIiLHBrdGxlbik7CisJCX0KKwkgICAgfQorCisvKgorICBTdXBwb3NlIHdlIGxvb2tlZCBhdCB0 aGUgc2VxdWVuY2UgbnVtYmVyIGhlcmUgYW5kIGZvdW5kIGl0IHdhcyBvdXQgb2YKKyAgcmFuZ2U/ ICBUaGlzIHdvdWxkIG1lYW4gZWl0aGVyIChhKSBpbmNvbWluZyBwYWNrZXRzIGhhZCBTT1AgdW5w cmVmaXhlZAorICBhbmQgd2UgYXJlIG91dCBvZiBzeW5jLCBvciAoYikgdGhlIHBhY2tldCBpcyBk YW1hZ2VkLiAgU2luY2UgKGEpIGlzIGJhZAorICBwcmFjdGljZSwgbGV0J3MgaWdub3JlIGl0LiAg U28gd2hhdCBzaG91bGQgd2UgZG8gaGVyZSBpZiB3ZSBrbm93IHRoZQorICBwYWNrZXQgaXMgZGFt YWdlZD8KKworICAgMS4gTm90aGluZyAtLSBrZWVwIHRyeWluZyB0byByZWFkIHRoZSBwYWNrZXQg dGlsbCB3ZSBmaW5kIHdoYXQgd2UgdGhpbmsKKyAgICAgIGlzIHRoZSBlbmQsIG9yIHdlIHRpbWUg b3V0LCBhbmQgbGV0IHRoZSB1cHBlciBsYXllciBkZWNpZGUgd2hhdCB0bworICAgICAgZG8uICBC dXQgc2luY2UgZWl0aGVyIHRoZSBwYWNrZXQgaXMgY29ycnVwdCBvciB3ZSBhcmUgb3V0IG9mIHN5 bmMsCisgICAgICBvdXIgY3JpdGVyaW9uIGZvciBmaW5kaW5nIHRoZSBlbmQgZG9lcyBub3QgYXBw bHkgYW5kIHdlIGFyZSBsaWtlbHkKKyAgICAgIHRvIHRpbWUgb3V0IChvciBzd2FsbG93IGEgcGll Y2Ugb2YgdGhlIG5leHQgcGFja2V0KSBpZiBvdXIgYXNzdW1lZAorICAgICAgbGVuZ3RoIGlzIHRv byBsb25nLiAgKFRoaXMgd2FzIHRoZSBiZWhhdmlvciBwcmlvciB0byB2ZXJzaW9uIDcuMC4pCisK KyAgIDIuIHNldCBmbGFnID0gMCBhbmQgY29udGludWU/ICBUaGlzIHdvdWxkIGZvcmNlIHVzIHRv IHdhaXQgZm9yIHRoZQorICAgICAgbmV4dCBwYWNrZXQgdG8gY29tZSBpbiwgYW5kIHRoZXJlZm9y ZSAoaW4gdGhlIG5vbndpbmRvd2luZyBjYXNlKSwKKyAgICAgIHdvdWxkIGZvcmNlIGEgdGltZW91 dCBpbiB0aGUgb3RoZXIgS2VybWl0LgorCisgICAzLiBzZXQgZmxhZyA9IDAgYW5kIGNvbnRpbnVl LCBidXQgb25seSBpZiB0aGUgd2luZG93IHNpemUgaXMgPiAxIGFuZAorICAgICAgdGhlIHdpbmRv dyBpcyBub3QgYmxvY2tlZD8gIFRhbGsgYWJvdXQgY2hlYXRpbmchCisKKyAgIDQuIFJldHVybiBh IGZhaWx1cmUgY29kZSBhbmQgbGV0IHRoZSB1cHBlciBsYXllciBkZWNpZGUgd2hhdCB0byBkby4K KyAgICAgIFRoaXMgc2hvdWxkIGJlIGVxdWl2YWxlbnQgdG8gMywgYnV0IHdpdGhvdXQgdGhlIGNo ZWF0aW5nLiAgU28gbGV0J3MKKyAgICAgIGRvIGl0IHRoYXQgd2F5Li4uICBCdXQgbm90ZSB0aGF0 IHdlIG11c3QgaWdub3JlIHRoZSBwYXJpdHkgYml0CisgICAgICBpbiBjYXNlIHRoaXMgaXMgdGhl IGZpcnN0IHBhY2tldCBhbmQgd2UgaGF2ZSBub3QgeWV0IHJ1biBwYXJjaGsoKS4KKyovCisJICAg IGlmIChpID09IDMpIHsJCS8qIFBlZWsgYXQgc2VxdWVuY2UgbnVtYmVyICovCisJCXggPSB4dW5j aGFyKChkZXN0W2ktMV0gJiAweDdmKSk7IC8qIElmIGl0J3Mgbm90IGluIHJhbmdlLi4uICovCisJ CWlmICh4IDwgMCB8fCB4ID4gNjMpIHsKKwkJICAgIGRlYnVnKEYxMTEsInR0aW5sIGJhZCBzZXEi LGRlc3QseCk7CisJCSAgICBpZiAodGltbykgdHRpbW9mZigpOworCQkgICAgcmV0dXJuKC0xKTsJ CS8qIHJldHVybiBhIG5vbmZhdGFsIGVycm9yICovCisJCX0KKwkgICAgfQorCisjZWxzZSAvKiBQ QVJTRU5TRSAqLworCSAgICBkZXN0W2krK10gPSBuICYgdHRwbXNrOworI2VuZGlmIC8qIFBBUlNF TlNFICovCisKKyAgICAvKiBDaGVjayBmb3IgZW5kIG9mIHBhY2tldCAqLworCisJICAgIGlmICgK KwkJKChuICYgdHRwbXNrKSA9PSBlb2wpCS8qIEFsd2F5cyBicmVhayBvbiB0aGUgZW9sIGNoYXIg Ki8KKyNpZmRlZiBQQVJTRU5TRQorCQkgfHwJCQkvKiBmZGMgLSBzZWUgbm90ZXMgb2YgMTMgQXBy IDIwMTAgKi8KKy8qCisgIFB1cmVseSBsZW5ndGgtZHJpdmVuIGlmIFNFVCBIQU5EU0hBS0UgTk9O RSAoaS5lLiB0dXJuID09IDApLgorICBUaGlzIGFsbG93cyBwYWNrZXQgdGVybWluYXRvcnMgYW5k IGhhbmRzaGFrZSBjaGFyYWN0ZXJzIHRvIGFwcGVhcgorICBsaXRlcmFsbHkgaW5zaWRlIGEgcGFj a2V0IGRhdGEgZmllbGQuCisqLworCQkoaGF2ZWxlbiAmJiAoaSA+IHBrdGxlbisxKSAmJgorCQkg KCF0dXJuIHx8ICh0dXJuICYmIChuICYgMHg3ZikgPT0gdHVybikpKSAvKiAodHVybiwgbm90IGVv bCkgKi8KKworI2VuZGlmIC8qIFBBUlNFTlNFICovCisJCSkgeworLyoKKyAgSGVyZSB3ZSBoYXZl IGVpdGhlciByZWFkIHRoZSBsYXN0IGJ5dGUgb2YgdGhlIHBhY2tldCBiYXNlZCBvbiBpdHMgbGVu Z3RoCisgIGZpZWxkLCBvciBlbHNlIHdlIGhhdmUgcmVhZCB0aGUgcGFja2V0IHRlcm1pbmF0b3Ig KGVvbCkgb3IgdGhlIGhhbGYtZHVwbGV4CisgIGxpbmUtdHVybmFyb3VuZCBjaGFyICh0dXJuKS4K KyovCisjaWZuZGVmIFBBUlNFTlNFCisJCWRlYnVnKEYxMDEsInR0aW5sIGdvdCBlb2wiLCIiLGVv bCk7IC8qIChvciB0dXJuKSAqLworCQlkZXN0W2ldID0gJ1wwJzsJCS8qIFllcywgdGVybWluYXRl IHRoZSBzdHJpbmcsICovCisJCS8qIGRlYnVnKEYxMDEsInR0aW5sIGkiLCIiLGkpOyAqLworCisj ZWxzZSAgLyogUEFSU0VOU0UgKi8KKworI2lmZGVmIERFQlVHCisJCWlmIChkZWJsb2cpIHsKKwkJ ICAgIGlmICgobiAmIHR0cG1zaykgIT0gZW9sKSB7CisJCQlkZWJ1ZyhGMTAxLCJ0dGlubCBFT1Ag bGVuZ3RoIiwiIixwa3RsZW4pOworCQkJZGVidWcoRjAwMCwidHRpbmwgRU9QIGN1cnJlbnQgY2hh ciIsIiIsbik7CisJCQlkZWJ1ZyhGMTAxLCJ0dGlubCBFT1AgcGFja2V0IGJ1ZiBpbmRleCIsIiIs aSk7CisJCSAgICB9IGVsc2UgZGVidWcoRjEwMSwidHRpbmwgZ290IGVvbCIsIiIsZW9sKTsKKwkJ fQorI2VuZGlmIC8qIERFQlVHICovCisKKyNpZmRlZiBNWVJFQUQKKy8qCisgIFRoZSBwYWNrZXQg d2FzIHJlYWQgYmFzZWQgb24gaXRzIGxlbmd0aC4gIFRoaXMgbGVhdmVzIHRoZSBwYWNrZXQgdGVy bWluYXRvcgorICB1bnJlYWQsIGFuZCBzbyB0dGNoaygpIHdpbGwgYWx3YXlzIHJldHVybiBhdCBs ZWFzdCAxIGJlY2F1c2Ugb2YgdGhpcywKKyAgcG9zc2libHkgZ2l2aW5nIGEgZmFsc2UgcG9zaXRp dmUgdG8gdGhlICJpcyB0aGVyZSBhbm90aGVyIHBhY2tldCB3YWl0aW5nPyIKKyAgdGVzdC4gIEJ1 dCBpZiB3ZSBrbm93IHRoZSB0ZXJtaW5hdG9yIChvciBhbnkgb3RoZXIgaW50ZXJwYWNrZXQganVu aykgaXMKKyAgdGhlcmUsIHdlIGNhbiBzYWZlbHkgZ2V0IHJpZCBvZiBpdC4KKworICBOT1RFOiBU aGlzIGNvZGUgcmV3b3JrZWQgdG8gKGEpIGV4ZWN1dGUgZXZlbiBpZiB0aGUgZGVidWcgbG9nIGlz bid0IGFjdGl2ZTsKKyAgYW5kIChiKSBhY3R1YWxseSB3b3JrLiAgLWZkYywgMjAwNy8wMi8yMi4g IEFuZCBhZ2FpbiAyMDA3LzA4LzEyLTEzIHRvIGFsc28KKyAgd29yayBvbiBlbmNyeXB0ZWQgY29u bmVjdGlvbnMuCisqLwkKKwkJZGVidWcoRjEwMSwiVFRJTkwgbXlfY291bnQiLCIiLG15X2NvdW50 KTsKKwkJaWYgKChuICYgdHRwbXNrKSAhPSBlb2wpIHsgLyogTm90IHRoZSBwYWNrZXQgdGVybWlu YXRvciAqLworCQkgICAgaW50IHg7CisJCSAgICB3aGlsZSAobXlfY291bnQgPiAwKSB7CisJCQl4 ID0gbXlyZWFkKCk7CSAgIC8qICh3YXMgdHRpbmMoMCkgKi8KKwkJCWRlYnVnKEYwMDAsIlRUSU5M IGxrcmVhZCBjaGFyIiwiIix4KTsKKyNpZmRlZiBDS19FTkNSWVBUSU9OCisJCQlpZiAoVEVMT1BU X1UoVEVMT1BUX0VOQ1JZUFRJT04pKSB7CisJCQkgICAgQ0hBUiBjaCA9IHg7CisJCQkgICAgY2tf dG5fZGVjcnlwdCgoY2hhciAqKSZjaCwxKTsKKwkJCSAgICB4ID0gY2g7CisJCQkgICAgZGVidWco RjAwMCwiVFRJTkwgbGtkZWNyIGNoYXIiLCIiLHgpOyAKKwkJCX0KKyNlbmRpZgkvKiBDS19FTkNS WVBUSU9OICovCisJCQkvKgorCQkJICBOb3RlOiB3aGlsZSBpdCBtaWdodCBzZWVtIG1vcmUgZWxl Z2FudCB0byBzaW1wbHkKKwkJCSAgcHVzaCBiYWNrIHRoZSBlbmNyeXB0ZWQgYnl0ZSwgdGhhdCBk ZXN5bmNocm9uaXplcworCQkJICB0aGUgZGVjcnlwdGlvbiBzdHJlYW07IHRoZSBmbGFnIGlzIG5l Y2Vzc2FyeSBzbyB3ZQorCQkJICBkb24ndCB0cnkgdG8gZGVjcnlwdCB0aGUgc2FtZSBieXRlIHR3 aWNlLgorCQkJKi8KKwkJCWlmICgoeCAmIHR0cG1zaykgPT0gc3RhcnQpIHsgLyogU3RhcnQgb2Yg bmV4dCBwYWNrZXQgKi8KKwkJCSAgICBteXVucmQoeCk7CS8qIFB1c2ggYmFjayB0aGUgZGVjcnlw dGVkIGJ5dGUgKi8KKwkJCSAgICBwdXNoZWRiYWNrID0gMTsgLyogQW5kIHNldCBmbGFnICovCisJ CQkgICAgZGVidWcoRjAwMCwiVFRJTkwgbGtwdXNoIGNoYXIiLCIiLHgpOworCQkJICAgIGJyZWFr OworCQkJfQorCQkgICAgfQorCQl9CisjZW5kaWYgLyogTVlSRUFEICovCisKKwkJZGVzdFtpXSA9 ICdcMCc7CQkvKiBUZXJtaW5hdGUgdGhlIHN0cmluZywgKi8KKwkgICAgICAgIGlmIChuZWVkcGNo aykgewkJLyogUGFyaXR5IGNoZWNrZWQgeWV0PyAqLworCQkgICAgaWYgKHR0cHJ0eSA9PSAwKSB7 CS8qIE5vLCBjaGVjay4gKi8KKwkJCWlmICgodHRwcnR5ID0gcGFyY2hrKGRlc3Qsc3RhcnQsaSkp ID4gMCkgeworCQkJICAgIGludCBqOworCQkJICAgIGRlYnVnKEYxMDEsInR0aW5sIHNlbnNlcyBw YXJpdHkiLCIiLHR0cHJ0eSk7CisJCQkgICAgZGVidWcoRjExMCwidHRpbmwgcGFja2V0IGJlZm9y ZSIsZGVzdCwwKTsKKwkJCSAgICB0dHBtc2sgPSAweDdmOworCQkJICAgIGZvciAoaiA9IDA7IGog PCBpOyBqKyspCisJCQkgICAgICBkZXN0W2pdICY9IDB4N2Y7CS8qIFN0cmlwIHBhcml0eSBmcm9t IHBhY2tldCAqLworCQkJICAgIGRlYnVnKEYxMTAsInR0aW5sIHBhY2tldCBhZnRlciAiLGRlc3Qs MCk7CisJCQl9IGVsc2UgdHRwcnR5ID0gMDsgLyogUmVzdG9yZSBpZiBwYXJjaGsgZXJyb3IgKi8K KwkJICAgIH0KKwkJICAgIHNvcG1hc2sgPSB0dHBtc2s7CisJCSAgICBuZWVkcGNoayA9IDA7CisJ CX0KKyNlbmRpZiAvKiBQQVJTRU5TRSAqLworCisJCWlmICh0aW1vKQkJLyogVHVybiBvZmYgdGlt ZXIgaWYgaXQgd2FzIG9uICovCisJCSAgdHRpbW9mZigpOworICAgICAgICAgICAgICAgIGNraGV4 ZHVtcCgidHRpbmwgZ290IixkZXN0LGkpOworCisjaWZkZWYgU1RSRUFNSU5HCisJCS8qIHR0aW5s KCkgd2FzIGNhbGxlZCBiZWNhdXNlIHRoZXJlIHdhcyBub24tcGFja2V0ICovCisJCS8qIGRhdGEg c2l0dGluZyBpbiB0aGUgYmFjayBjaGFubmVsLiAgSWdub3JlIGl0LiAgICovCisJCWlmIChzdHJl YW1pbmcgJiYgc25kdHlwID09ICdEJykKKwkJICByZXR1cm4oLTEpOworI2VuZGlmIC8qIFNUUkVB TUlORyAqLworCQlyZXR1cm4oaSk7CisJICAgIH0KKwl9IC8qIEVuZCBvZiB3aGlsZSgpICovCisJ dHRpbW9mZigpOworCXJldHVybihuKTsKKyAgICB9Cit9CisjZW5kaWYgLyogTk9YRkVSICovCisK Ky8qICBUIFQgSSBOIEMgLS0gIFJlYWQgYSBjaGFyYWN0ZXIgZnJvbSB0aGUgY29tbXVuaWNhdGlv biBsaW5lICAqLworLyoKKyBPbiBzdWNjZXNzLCByZXR1cm5zIHRoZSBjaGFyYWN0ZXIgdGhhdCB3 YXMgcmVhZCwgPj0gMC4KKyBPbiBmYWlsdXJlLCByZXR1cm5zIC0xIG9yIG90aGVyIG5lZ2F0aXZl IG15cmVhZCBlcnJvciBjb2RlLAorICAgb3IgLTIgaWYgY29ubmVjdGlvbiBpcyBicm9rZW4gb3Ig dHR5ZmQgPCAwLgorICAgb3IgLTMgaWYgc2Vzc2lvbiBsaW1pdCBoYXMgZXhwaXJlZCwKKyAgIG9y IC00IGlmIHNvbWV0aGluZyBvciBvdGhlci4uLgorIE5PVEU6IFRoZSBBUEkgZG9lcyBub3QgcHJv dmlkZSBmb3IgdHRpbmMoKSByZXR1cm5pbmcgYSBzcGVjaWFsIGNvZGUKKyB1cG9uIHRpbWVvdXQs IGJ1dCB3ZSBuZWVkIGl0LiAgU28gZm9yIHRoaXMgd2UgaGF2ZSBhIGdsb2JhbCB2YXJpYWJsZSwK KyB0dGluY3RpbW8uCisqLworc3RhdGljIGludCB0dGluY3RpbW8gPSAwOwkJLyogWXVrICovCisK K2ludAordHRpbmModGltbykgaW50IHRpbW87IHsKKworICAgIGludCBuID0gMCwgZmQ7CisgICAg aW50IGlzX3RuID0gMDsKKyAgICBDSEFSIGNoID0gMDsKKworICAgIHR0aW5jdGltbyA9IDA7CisK KyAgICBpZiAodHR5ZmQgPCAwKSByZXR1cm4oLTIpOyAgICAgICAgICAvKiBOb3Qgb3Blbi4gKi8K KworICAgIGlzX3RuID0gKHhsb2NhbCAmJiBuZXRjb25uICYmIElTX1RFTE5FVCgpKSB8fAorCSAg ICAoIXhsb2NhbCAmJiBzc3RlbG5ldCk7CisKKyNpZmRlZiBUVExFQlVGCisgICAgaWYgKHR0cHVz aCA+PSAwKSB7CisgICAgICAgIGRlYnVnKEYxMTEsInR0aW5jIiwidHRwdXNoIix0dHB1c2gpOwor ICAgICAgICBjaCA9IHR0cHVzaDsKKyAgICAgICAgdHRwdXNoID0gLTE7CisgICAgICAgIHJldHVy bihjaCk7CisgICAgfQorICAgIGlmIChsZV9kYXRhKSB7CisgICAgICAgIGlmIChsZV9nZXRjaGFy KCZjaCkgPiAwKSB7CisgICAgICAgICAgICBkZWJ1ZyhGMTExLCJ0dGluYyBsZV9nZXRjaGFyIiwi Y2giLGNoKTsKKyAgICAgICAgICAgIHJldHVybihjaCk7CisgICAgICAgIH0KKyAgICB9CisjZW5k aWYgLyogVFRMRUJVRiAqLworCisjaWZkZWYgTkVUQ01ECisgICAgaWYgKHR0cGlwZSkKKyAgICAg IGZkID0gZmRpbjsKKyAgICBlbHNlCisjZW5kaWYgLyogTkVUQ01EICovCisgICAgICBmZCA9IHR0 eWZkOworCisgICAgaWYgKCh0aW1vIDw9IDApCQkJLyogVW50aW1lZC4gKi8KKyNpZmRlZiBNWVJF QUQKKwl8fCAobXlfY291bnQgPiAwKQkJLyogQnVmZmVyZWQgY2hhciBhbHJlYWR5IHdhaXRpbmcu ICovCisjZW5kaWYgLyogTVlSRUFEICovCisJKSB7CisjaWZkZWYgTVlSRUFECisgICAgICAgIC8q IENvbW0gbGluZSBmYWlsdXJlIHJldHVybnMgLTEgdGhydSBteXJlYWQsIHNvIG5vICY9IDAzNzcg Ki8KKwluID0gbXlyZWFkKCk7CQkJLyogV2FpdCBmb3IgYSBjaGFyYWN0ZXIuLi4gKi8KKwkvKiBk ZWJ1ZyhGMDAwLCJ0dGluYyBNWVJFQUQgbiIsIiIsbik7ICovCisjaWZkZWYgQ0tfRU5DUllQVElP TgorCS8qIGRlYnVnKEYxMDEsInR0aW5jIHVfZW5jcnlwdCIsIiIsVEVMT1BUX1UoVEVMT1BUX0VO Q1JZUFRJT04pKTsgKi8KKwlpZiAoVEVMT1BUX1UoVEVMT1BUX0VOQ1JZUFRJT04pICYmIG4gPj0g MCkgeworCSAgICBjaCA9IG47CisJICAgIGNrX3RuX2RlY3J5cHQoKGNoYXIgKikmY2gsMSk7CisJ ICAgIG4gPSBjaDsKKwl9CisjZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLworCisjaWZkZWYgTkVU UFRZCisJaWYgKHR0cHR5ICYmIG4gPCAwKSB7CisJICAgIGRlYnVnKEYxMDEsInR0aW5jIGVycm9y IG9uIHB0eSIsIiIsbik7CisJICAgIHR0Y2xvcygwKTsKKwkgICAgcmV0dXJuKG4pOworCX0KKyNl bmRpZiAvKiBORVRQVFkgKi8KKworI2lmZGVmIFROQ09ERQorCWlmICgobiA+IC0xKSAmJiBpc190 bikKKwkgIHJldHVybigodW5zaWduZWQpKG4gJiAweGZmKSk7CisJZWxzZQorI2VuZGlmIC8qIFRO Q09ERSAqLworCSAgcmV0dXJuKG4gPCAwID8gbiA6ICh1bnNpZ25lZCkobiAmIHR0cG1zaykpOwor CisjZWxzZSAgLyogTVlSRUFEICovCisKKyAgICAgICAgd2hpbGUgKChuID0gcmVhZChmZCwmY2gs MSkpID09IDApIC8qIFdhaXQgZm9yIGEgY2hhcmFjdGVyLiAqLworICAgICAgICAvKiBTaG91bGRu J3QgaGF2ZSB0byBsb29wIGluIHZlciA1QS4gKi8KKyNpZmRlZiBORVRDT05OCisJICBpZiAobmV0 Y29ubikgewkJLyogU3BlY2lhbCBoYW5kbGluZyBmb3IgbmV0ICovCisJICAgICAgbmV0Y2xvcygp OwkJLyogSWYgcmVhZCgpIHJldHVybnMgMCBpdCBtZWFucyAqLworCSAgICAgIG5ldGNvbm4gPSAw OwkJLyogdGhlIGNvbm5lY3Rpb24gaGFzIGRyb3BwZWQuICovCisJICAgICAgZXJybm8gPSBFTk9U Q09OTjsKKwkgICAgICByZXR1cm4oLTIpOworCSAgfQorI2VuZGlmIC8qIE5FVENPTk4gKi8KKwkg IDsKKwkvKiBkZWJ1ZyhGMTAxLCJ0dGluYyIsIiIsY2gpOyAqLworI2lmZGVmIFROQ09ERQorCWlm ICgobiA+IDApICYmIGlzX3RuKSB7CisjaWZkZWYgQ0tfRU5DUllQVElPTgorCSAgICBpZiAoVEVM T1BUX1UoVEVMT1BUX0VOQ1JZUFRJT04pKSB7CisJCWNrX3RuX2RlY3J5cHQoJmNoLDEpOworCQlu ID0gY2g7CisJICAgIH0KKyNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCisJICAgIHJldHVybigo dW5zaWduZWQpKGNoICYgMHhmZikpOworCX0gZWxzZQorI2VuZGlmIC8qIFROQ09ERSAqLworICAg ICAgICByZXR1cm4oKG4gPCAwKSA/IC00IDogKChuID09IDApID8gLTEgOiAodW5zaWduZWQpKGNo ICYgdHRwbXNrKSkpOworI2VuZGlmIC8qIE1ZUkVBRCAqLworCisgICAgfSBlbHNlIHsJCQkJLyog VGltZWQgcmVhZCAqLworCisJaW50IG9sZGFsYXJtOworCXNhdmFsID0gc2lnbmFsKFNJR0FMUk0s dGltZXJoKTsJLyogU2V0IHVwIGhhbmRsZXIsIHNhdmUgb2xkIG9uZS4gKi8KKwlvbGRhbGFybSA9 IGFsYXJtKHRpbW8pOwkJLyogU2V0IGFsYXJtLCBzYXZlIG9sZCBvbmUuICovCisJaWYgKAorI2lm ZGVmIENLX1BPU0lYX1NJRworCSAgICBzaWdzZXRqbXAoc2pidWYsMSkKKyNlbHNlCisJICAgIHNl dGptcChzamJ1ZikKKyNlbmRpZiAvKiBDS19QT1NJWF9TSUcgKi8KKwkgICAgKSB7CQkJCS8qIFRp bWVyIGV4cGlyZWQgKi8KKwkgICAgdHRpbmN0aW1vID0gMTsKKwkgICAgbiA9IC0xOwkJCS8qIHNl dCBmbGFnICovCisJfSBlbHNlIHsKKyNpZmRlZiBNWVJFQUQKKwkgICAgbiA9IG15cmVhZCgpOwkJ LyogSWYgbWFuYWdpbmcgb3duIGJ1ZmZlci4uLiAqLworCSAgICBkZWJ1ZyhGMTAxLCJ0dGluYyBt eXJlYWQiLCIiLG4pOworCSAgICBjaCA9IG47CisjZWxzZQorCSAgICBuID0gcmVhZChmZCwmY2gs MSk7CQkvKiBPdGhlcndpc2UgY2FsbCB0aGUgc3lzdGVtLiAqLworCSAgICBpZiAobiA9PSAwKSBu ID0gLTE7CisJICAgIGRlYnVnKEYxMDEsInR0aW5jIHJlYWQiLCIiLG4pOworI2VuZGlmIC8qIE1Z UkVBRCAqLworCisjaWZkZWYgQ0tfRU5DUllQVElPTgorCSAgICBpZiAoVEVMT1BUX1UoVEVMT1BU X0VOQ1JZUFRJT04pICYmIG4gPj0gMCkgeworCQlja190bl9kZWNyeXB0KChjaGFyICopJmNoLDEp OworCSAgICB9CisjZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLworCSAgICBpZiAobiA+PSAwKQor CSAgICAgIG4gPSAodW5zaWduZWQpIChjaCAmIDB4ZmYpOworCSAgICBlbHNlCisJICAgICAgbiA9 IChuIDwgMCkgPyAtNCA6IC0yOwkvKiBTcGVjaWFsIHJldHVybiBjb2Rlcy4gKi8KKwl9CisJdHRp bW9mZigpOwkJCS8qIFR1cm4gb2ZmIHRoZSB0aW1lciAqLworCWlmIChvbGRhbGFybSA+IDApIHsK KwkgICAgaWYgKG4gPT0gLTEpCQkvKiBhbmQgcmVzdG9yZSBhbnkgcHJldmlvdXMgYWxhcm0gKi8K KwkgICAgICBvbGRhbGFybSAtPSB0aW1vOworCSAgICBpZiAob2xkYWxhcm0gPCAwKQkJLyogYWRq dXN0ZWQgYnkgb3VyIHRpbWVvdXQgaW50ZXJ2YWwgKi8KKwkgICAgICBvbGRhbGFybSA9IDA7CisJ ICAgIGlmIChvbGRhbGFybSkgeworCSAgICAgICAgZGVidWcoRjEwMSwidHRpbmMgcmVzdG9yaW5n IG9sZGFsYXJtIiwiIixvbGRhbGFybSk7CisJCWFsYXJtKG9sZGFsYXJtKTsKKwkgICAgfQorCX0K KyNpZmRlZiBORVRDT05OCisJaWYgKG5ldGNvbm4pIHsKKwkgICAgaWYgKG4gPT0gLTIpIHsJCS8q IHJlYWQoKSByZXR1cm5zIDAgKi8KKwkJbmV0Y2xvcygpOwkJLyogb24gbmV0d29yayByZWFkIGZh aWx1cmUgKi8KKwkJbmV0Y29ubiA9IDA7CisJCWVycm5vID0gRU5PVENPTk47CisJICAgIH0KKwl9 CisjZW5kaWYJLyogTkVUQ09OTiAqLworI2lmZGVmIFROQ09ERQorCWlmICgobiA+IC0xKSAmJiBp c190bikKKwkgIHJldHVybigodW5zaWduZWQpKG4gJiAweGZmKSk7CisJZWxzZQorI2VuZGlmIC8q IFROQ09ERSAqLworCSAgLyogUmV0dXJuIG1hc2tlZCBjaGFyIG9yIG5lZy4gKi8KKwkgIHJldHVy biggKG4gPCAwKSA/IG4gOiAodW5zaWduZWQpKG4gJiB0dHBtc2spICk7CisgICAgfQorfQorCisv KiAgUyBOIEQgQiBSIEsgIC0tICBTZW5kIGEgQlJFQUsgc2lnbmFsIG9mIHRoZSBnaXZlbiBkdXJh dGlvbiAgKi8KKworc3RhdGljIGludAorI2lmZGVmIENLX0FOU0lDCitzbmRicmsoaW50IG1zZWMp IHsJCQkvKiBBcmd1bWVudCBpcyBtaWxsaXNlY29uZHMgKi8KKyNlbHNlCitzbmRicmsobXNlYykg aW50IG1zZWM7IHsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworI2lmbmRlZiBQT1NJWAorICAgIGlu dCB4LCBuOworI2VuZGlmIC8qIFBPU0lYICovCisKKyNpZmRlZiBPWE9TCisjZGVmaW5lIEJTREJS RUFLCisjZW5kaWYgLyogT1hPUyAqLworCisjaWZkZWYgQU5ZQlNECisjZGVmaW5lIEJTREJSRUFL CisjZW5kaWYgLyogQU5ZQlNEICovCisKKyNpZmRlZiBCU0Q0NAorI2RlZmluZSBCU0RCUkVBSwor I2VuZGlmIC8qIEJTRDQ0ICovCisKKyNpZmRlZiBDT0hFUkVOVAorI2lmZGVmIEJTREJSRUFLCisj dW5kZWYgQlNEQlJFQUsKKyNlbmRpZiAvKiBCU0RCUkVBSyAqLworI2VuZGlmIC8qIENPSEVSRU5U ICovCisKKyNpZmRlZiBCRUxMVjEwCisjaWZkZWYgQlNEQlJFQUsKKyN1bmRlZiBCU0RCUkVBSwor I2VuZGlmIC8qIEJTREJSRUFLICovCisjZW5kaWYgLyogQkVMTFYxMCAqLworCisjaWZkZWYgUFJP VlgxCisgICAgY2hhciBzcGQ7CisjZW5kaWYgLyogUFJPVlgxICovCisKKyAgICBkZWJ1ZyhGMTAx LCJ0dHNuZGIgdHR5ZmQiLCIiLHR0eWZkKTsKKyAgICBpZiAodHR5ZmQgPCAwKSByZXR1cm4oLTEp OyAgICAgICAgICAvKiBOb3Qgb3Blbi4gKi8KKworI2lmZGVmIFBsYW45CisgICAgcmV0dXJuIHA5 c25kYnJrKG1zZWMpOworI2Vsc2UKKyNpZmRlZiBORVRDT05OCisjaWZkZWYgTkVUQ01ECisgICAg aWYgKHR0cGlwZSkJCQkJLyogUGlwZSAqLworICAgICAgcmV0dXJuKHR0b2MoJ1wwJykpOworI2Vu ZGlmIC8qIE5FVENNRCAqLworI2lmZGVmIE5FVFBUWQorICAgIGlmICh0dHB0eSkKKyAgICAgIHJl dHVybih0dG9jKCdcMCcpKTsKKyNlbmRpZiAvKiBORVRQVFkgKi8KKyAgICBpZiAobmV0Y29ubikg CQkJLyogU2VuZCBuZXR3b3JrIEJSRUFLICovCisgICAgICByZXR1cm4obmV0YnJlYWsoKSk7Cisj ZW5kaWYgLyogTkVUQ09OTiAqLworCisgICAgaWYgKG1zZWMgPCAxIHx8IG1zZWMgPiA1MDAwKSBy ZXR1cm4oLTEpOyAvKiBCYWQgYXJndW1lbnQgKi8KKworI2lmZGVmIFBPU0lYCQkJCS8qIEVhc3kg aW4gUE9TSVggKi8KKyAgICB7CisJaW50IHg7CisJZGVidWcoRjExMSwic25kYnJrIFBPU0lYIixj a2l0b2EobXNlYyksKG1zZWMvMzc1KSk7CisJZXJybm8gPSAwOworCXggPSB0Y3NlbmRicmVhayh0 dHlmZCxtc2VjIC8gMzc1KTsKKwlkZWJ1ZyhGMTExLCJzbmRicmsgdGNzZW5kYnJlYWsiLGNraXRv YShlcnJubykseCk7CisJcmV0dXJuKHgpOworICAgIH0KKyNlbHNlCisjaWZkZWYgUFJPVlgxCisg ICAgZ3R0eSh0dHlmZCwmdHRidWYpOyAgICAgICAgICAgICAgICAgLyogR2V0IGN1cnJlbnQgdHR5 IGZsYWdzICovCisgICAgc3BkID0gdHRidWYuc2dfb3NwZWVkOyAgICAgICAgICAgICAgLyogU2F2 ZSBzcGVlZCAqLworICAgIHR0YnVmLnNnX29zcGVlZCA9IEI1MDsgICAgICAgICAgICAgIC8qIENo YW5nZSB0byA1MCBiYXVkICovCisgICAgc3R0eSh0dHlmZCwmdHRidWYpOyAgICAgICAgICAgICAg ICAgLyogIC4uLiAqLworICAgIG4gPSAoaW50KXN0cmxlbihicm51bHMpOwkJLyogU2VuZCB0aGUg cmlnaHQgbnVtYmVyIG9mIG51bGxzICovCisgICAgeCA9IG1zZWMgLyA5MTsKKyAgICBpZiAoeCA+ IG4pIHggPSBuOworICAgIHdyaXRlKHR0eWZkLGJybnVscyxuKTsKKyAgICB0dGJ1Zi5zZ19vc3Bl ZWQgPSBzcGQ7ICAgICAgICAgICAgICAvKiBSZXN0b3JlIHNwZWVkICovCisgICAgc3R0eSh0dHlm ZCwmdHRidWYpOyAgICAgICAgICAgICAgICAgLyogIC4uLiAqLworICAgIHJldHVybigwKTsKKyNl bHNlCisjaWZkZWYgYWVnaXMKKyAgICBzaW9fJGNvbnRyb2woKHNob3J0KXR0eWZkLCBzaW9fJHNl bmRfYnJlYWssIG1zZWMsIHN0KTsKKyAgICByZXR1cm4oMCk7CisjZWxzZQorI2lmZGVmIEJTREJS RUFLCisgICAgbiA9IEZXUklURTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogRmx1c2ggb3V0 cHV0IHF1ZXVlLiAqLworLyogV2F0Y2ggb3V0IGZvciBpbnQgdnMgbG9uZyBwcm9ibGVtcyBpbiAm biBhcmchICovCisgICAgZGVidWcoRjEwMSwic25kYnJrIEJTREJSRUFLIiwiIixtc2VjKTsKKyAg ICBpb2N0bCh0dHlmZCxUSU9DRkxVU0gsJm4pOyAgICAgICAgICAvKiBJZ25vcmUgYW55IGVycm9y cy4uICovCisgICAgaWYgKGlvY3RsKHR0eWZkLFRJT0NTQlJLLChjaGFyICopMCkgPCAwKSB7ICAv KiBUdXJuIG9uIEJSRUFLICovCisgICAgICAgIHBlcnJvcigiQ2FuJ3Qgc2VuZCBCUkVBSyIpOwor ICAgICAgICByZXR1cm4oLTEpOworICAgIH0KKyAgICB4ID0gbXNsZWVwKG1zZWMpOyAgICAgICAg ICAgICAgICAgICAgLyogU2xlZXAgZm9yIHNvIG1hbnkgbWlsbGlzZWNvbmRzICovCisgICAgaWYg KGlvY3RsKHR0eWZkLFRJT0NDQlJLLChjaGFyICopMCkgPCAwKSB7ICAvKiBUdXJuIG9mZiBCUkVB SyAqLworICAgICAgICBwZXJyb3IoIkJSRUFLIHN0dWNrISEhIik7CisgICAgICAgIGRvZXhpdChC QURfRVhJVCwtMSk7CQkvKiBHZXQgb3V0LCBjbG9zaW5nIHRoZSBsaW5lLiAqLworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgd2l0aCBiYWQgZXhpdCBzdGF0dXMg Ki8KKyAgICB9CisgICAgcmV0dXJuKHgpOworI2Vsc2UKKyNpZmRlZiBBVFRTVgorLyoKKyAgTm8g d2F5IHRvIHNlbmQgYSBsb25nIEJSRUFLIGluIFN5cyBWLCBzbyBzZW5kIGEgYnVuY2ggb2YgcmVn dWxhciBvbmVzLgorICAoQWN0dWFsbHksIFN5cyBWIFI0IGlzICpzdXBwb3NlZCogdG8gaGF2ZSB0 aGUgUE9TSVggdGNzZW5kYnJlYWsoKSBmdW5jdGlvbiwKKyAgYnV0IHRoZXJlJ3Mgbm8gd2F5IGZv ciB0aGlzIGNvZGUgdG8ga25vdyBmb3Igc3VyZS4pCisqLworICAgIGRlYnVnKEYxMDEsInNuZGJy ayBBVFRTViIsIiIsbXNlYyk7CisgICAgeCA9IG1zZWMgLyAyNzU7CisgICAgZm9yIChuID0gMDsg biA8IHg7IG4rKykgeworCS8qIFJlcG9ydGVkbHkgdGhlIGNhc3QgYnJlYWtzIHRoaXMgZnVuY3Rp b24gb24gc29tZSBzeXN0ZW1zICovCisJLyogQnV0IHRoZW4gd2h5IHdhcyBpdCBoZXJlIGluIHRo ZSBmaXJzdCBwbGFjZT8gKi8KKwlpZiAoaW9jdGwodHR5ZmQsVENTQlJLLCAvKiAoY2hhciAqKSAq LyAwKSA8IDApIHsKKwkgICAgcGVycm9yKCJDYW4ndCBzZW5kIEJSRUFLIik7CisJICAgIHJldHVy bigtMSk7CisJfQorICAgIH0KKyAgICByZXR1cm4oMCk7CisjZWxzZQorI2lmZGVmICBWNworICAg IGRlYnVnKEYxMDEsInNuZGJyayBWNyIsIiIsbXNlYyk7CisgICAgcmV0dXJuKGdlbmJyayh0dHlm ZCwyNTApKTsJCS8qIFNpbXVsYXRlIGEgQlJFQUsgKi8KKyNlbHNlCisgICAgZGVidWcoRjEwMSwi c25kYnJrIGNhdGNoYWxsIiwiIixtc2VjKTsKKyAgICB0dG9jKDApO3R0b2MoMCk7dHRvYygwKTt0 dG9jKDApOworICAgIHJldHVybigwKTsKKyNlbmRpZiAvKiBWNyAqLworI2VuZGlmIC8qIEJTREJS RUFLICovCisjZW5kaWYgLyogQVRUU1YgKi8KKyNlbmRpZiAvKiBhZWdpcyAqLworI2VuZGlmIC8q IFBST1ZYMSAqLworI2VuZGlmIC8qIFBPU0lYICovCisjZW5kaWYgLyogUGxhbjkgKi8KK30KKwor LyogIFQgVCBTIE4gRCBCICAtLSAgU2VuZCBhIEJSRUFLIHNpZ25hbCAgKi8KKworaW50Cit0dHNu ZGIoKSB7CisjaWZkZWYgVE5fQ09NUE9SVAorICAgIGlmIChuZXRjb25uICYmIGlzdG5jb21wb3J0 KCkpCisgICAgICByZXR1cm4oKHRuc25kYigyNzVMKSA+PSAwKSA/IDAgOiAtMSk7CisgICAgZWxz ZQorI2VuZGlmIC8qIFROX0NPTVBPUlQgKi8KKyAgICAgIHJldHVybihzbmRicmsoMjc1KSk7Cit9 CisKKy8qICBUIFQgUyBOIEQgTCBCICAtLSAgU2VuZCBhIExvbmcgQlJFQUsgc2lnbmFsICAqLwor CitpbnQKK3R0c25kbGIoKSB7CisjaWZkZWYgVE5fQ09NUE9SVAorICAgIGlmIChuZXRjb25uICYm IGlzdG5jb21wb3J0KCkpCisgICAgICByZXR1cm4oKHRuc25kYigxODAwTCkgPj0gMCkgPyAwIDog LTEpOworICAgIGVsc2UKKyNlbmRpZiAvKiBUTl9DT01QT1JUICovCisgICAgcmV0dXJuKHNuZGJy aygxNTAwKSk7Cit9CisKKy8qICBNIFMgTCBFIEUgUCAgLS0gIE1pbGxpc2Vjb25kIHZlcnNpb24g b2Ygc2xlZXAoKS4gICovCisKKy8qCisgIENhbGwgd2l0aCBudW1iZXIgb2YgbWlsbGlzZWNvbmRz ICh0aG91c2FuZHRocyBvZiBzZWNvbmRzKSB0byBzbGVlcC4KKyAgSW50ZW5kZWQgb25seSBmb3Ig c21hbGwgaW50ZXJ2YWxzLiAgRm9yIGJpZyBvbmVzLCBqdXN0IHVzZSBzbGVlcCgpLgorICBIaWdo bHkgc3lzdGVtLWRlcGVuZGVudC4KKyAgUmV0dXJucyAwIGFsd2F5cywgZXZlbiBpZiBpdCBkaWRu J3Qgd29yay4KKyovCisKKy8qIERlZmluZSBNU0xGVElNRSBmb3Igc3lzdGVtcyB0aGF0IG11c3Qg dXNlIGFuIGZ0aW1lKCkgbG9vcC4gKi8KKyNpZmRlZiBBTllCU0QJCQkJLyogRm9yIHByZS00LjIg QlNEIHZlcnNpb25zICovCisjaWZuZGVmIEJTRDQKKyNkZWZpbmUgTVNMRlRJTUUKKyNlbmRpZiAv KiBCU0Q0ICovCisjZW5kaWYgLyogQU5ZQlNEICovCisKKyNpZmRlZiBUT1dFUjEJCQkJLyogTkNS IFRvd2VyIE9TIDEuMCAqLworI2RlZmluZSBNU0xGVElNRQorI2VuZGlmIC8qIFRPV0VSMSAqLwor CisjaWZkZWYgQ09IRVJFTlQgICAgICAgICAvKiBDb2hlcmVudC4uLiAqLworI2lmbmRlZiBfSTM4 NiAgICAgICAgICAgLyogTWF5YmUgQ29oZXJlbnQvMzg2IHNob3VsZCBnZXQgdGhpcywgdG9vICov CisjZGVmaW5lIE1TTEZUSU1FICAgICAgICAvKiBPcGluaW9ucyBhcmUgZGl2aWRlZCAqLworI2Vu ZGlmIC8qIF9JMzg2ICovCisjZW5kaWYgLyogQ09IRVJFTlQgKi8KKworI2lmZGVmIENPTU1FTlQK KyNpZmRlZiBHRVRNU0VDCisKKy8qIE1pbGxpc2Vjb25kIHRpbWVyICovCisKK3N0YXRpYyBsb25n IG1zZWNiYXNlID0gMEw7CQkvKiBVbnNpZ25lZCBsb25nIG5vdCBwb3J0YWJsZSAqLworCitsb25n CitnZXRtc2VjKCkgewkJCQkvKiBNaWxsaXNlY29uZHMgc2luY2UgYmFzZSB0aW1lICovCisgICAg c3RydWN0IHRpbWV2YWwgeHY7CisgICAgc3RydWN0IHRpbWV6b25lIHh6OworICAgIGxvbmcgc2Vj cywgbXNlY3M7CisgICAgaWYgKAorI2lmZGVmIEdUT0RPTkVBUkcKKwlnZXR0aW1lb2ZkYXkoJnR2 KQorI2Vsc2UKKyNpZmRlZiBQVFgKKwlnZXR0aW1lb2ZkYXkoJnR2LCBOVUxMKQorI2Vsc2UKKwln ZXR0aW1lb2ZkYXkoJnR2LCAmdHopCisjZW5kaWYgLyogUFRYICovCisjZW5kaWYgLyogR1RPRE9O RUFSRyAqLworCTwgMCkKKyAgICAgIHJldHVybigtMSk7CisgICAgaWYgKG1zZWNiYXNlID09IDBM KSB7CQkvKiBGaXJzdCBjYWxsLCBzZXQgYmFzZSB0aW1lLiAqLworCW1zZWNiYXNlID0gdHYudHZf c2VjOworCWRlYnVnKEYxMDEsImdldG1zZWMgYmFzZSIsIiIsbXNlY2Jhc2UpOworICAgIH0KKyAg ICByZXR1cm4oKCh0di50dl9zZWMgLSBtc2VjYmFzZSkgKiAxMDAwTCkgKyAodHYudHZfdXNlYyAv IDEwMDBMKSk7Cit9CisjZW5kaWYgLyogR0VUTVNFQyAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8K KworI2lmZGVmIFNFTEVDVAoraW50Cit0dHdhaXQoZmQsIHNlY3MpIGludCBmZCwgc2Vjczsgewor ICAgIGludCB4OworICAgIGZkX3NldCByZmRzOworICAgIEZEX1pFUk8oJnJmZHMpOworICAgIEZE X1NFVChmZCwmcmZkcyk7CisgICAgdHYudHZfc2VjID0gc2VjczsKKyAgICB0di50dl91c2VjID0g MEw7CisgICAgZXJybm8gPSAwOworICAgIGlmICgoeCA9IHNlbGVjdChGRF9TRVRTSVpFLAorI2lm ZGVmIEhQVVg5CisJCSAgICAoaW50ICopCisjZWxzZQorI2lmZGVmIEhQVVgxMDAwCisJCSAgICAo aW50ICopCisjZW5kaWYgLyogSFBVWDEwMDAgKi8KKyNlbmRpZiAvKiBIUFVYOSAqLworCQkgICAg JnJmZHMsCisJCSAgICAwLCAwLCAmdHYpKSA8IDApIHsKKwlkZWJ1ZyhGMTAxLCJ0dHdhaXQgc2Vs ZWN0IGVycm5vIiwiIixlcnJubyk7CisJcmV0dXJuKDApOworICAgIH0gZWxzZSB7CisJZGVidWco RjEwMSwidHR3YWl0IE9LIiwiIixlcnJubyk7CisJeCA9IEZEX0lTU0VUKGZkLCAmcmZkcyk7CisJ ZGVidWcoRjEwMSwidHR3YWl0IHNlbGVjdCB4IiwiIix4KTsKKwlyZXR1cm4oeCA/IDEgOiAwKTsK KyAgICB9Cit9CisjZW5kaWYgLyogU0VMRUNUICovCisKK2ludAorbXNsZWVwKG0pIGludCBtOyB7 CisvKgorICBPdGhlciBwb3NzaWJpbGl0aWVzIGhlcmUgYXJlOgorICAgbmFub3NsZWVwKCksIHJl cG9ydGVkbHkgZGVmaW5lZCBpbiBQT1NJWC40LgorICAgc2dpbmFwKCksIElSSVggb25seSAoYmFj ayB0byB3aGF0IElSSVggdmVyc2lvbiBJIGRvbid0IGtub3cpLgorKi8KKyNpZmRlZiBQbGFuOQor ICAgIHJldHVybiBfU0xFRVAobSk7CisjZWxzZQorI2lmZGVmIEJFT1NPUkJFQk9YCisgICAgc25v b3plKG0qMTAwMCk7CisjZWxzZSAvKiBCRU9TT1JCRUJPWCAqLworI2lmZGVmIFNFTEVDVAorICAg IGludCB0MSwgeDsKKyAgICBkZWJ1ZyhGMTAxLCJtc2xlZXAgU0VMRUNUIDEiLCIiLG0pOworICAg IGlmIChtIDw9IDApIHJldHVybigwKTsKKyAgICBpZiAobSA+PSAxMDAwKSB7CQkJLyogQ2F0Y2gg YmlnIGFyZ3VtZW50cy4gKi8KKwlzbGVlcChtLzEwMDApOworCW0gPSBtICUgMTAwMDsKKwlpZiAo bSA8IDEwKSByZXR1cm4oMCk7CisgICAgfQorICAgIGRlYnVnKEYxMDEsIm1zbGVlcCBTRUxFQ1Qg MiIsIiIsbSk7CisjaWZkZWYgQkVMTFYxMAorICAgIHggPSBzZWxlY3QoIDAsIChmZF9zZXQgKikw LCAoZmRfc2V0ICopMCwgKGZkX3NldCAqKTAsIG0gKTsKKyAgICBkZWJ1ZyhGMTAxLCJtc2xlZXAg QkVMTFYxMCBzZWxlY3QiLCIiLHgpOworI2Vsc2UgLyogQkVMTFYxMCAqLworI2lmZGVmIEhQVVg5 CisgICAgZ2V0dGltZW9mZGF5KCZ0diwgJnR6KTsKKyNlbHNlCisKKyNpZm5kZWYgQ09IRVJFTlQK KyNpZmRlZiBHVE9ET05FQVJHCisgICAgaWYgKGdldHRpbWVvZmRheSgmdHYpIDwgMCkKKyNlbHNl CisjaWZkZWYgUFRYCisgICAgaWYgKGdldHRpbWVvZmRheSgmdHYsTlVMTCkgPCAwKQorI2Vsc2UK KyNpZmRlZiBOT1RJTUVaT05FCisgICAgaWYgKGdldHRpbWVvZmRheSgmdHYsIE5VTEwpIDwgMCkJ Lyogd29uZGVyIHdoYXQgdGhpcyBkb2VzLi4uICovCisjZWxzZQorICAgIGlmIChnZXR0aW1lb2Zk YXkoJnR2LCAmdHopIDwgMCkKKyNlbmRpZiAvKiBOT1RJTUVaT05FICovCisjZW5kaWYgLyogUFRY ICovCisjZW5kaWYgLyogR1RPRE9ORUFSRyAqLworICAgICAgcmV0dXJuKC0xKTsKKyAgICB0MSA9 IHR2LnR2X3NlYzsgICAgICAgICAgICAgICAgICAgICAvKiBTZWNvbmRzICovCisjZW5kaWYgLyog Q09IRVJFTlQgKi8KKyNlbmRpZiAvKiBIUFVYOSAqLworICAgIHR2LnR2X3NlYyA9IDA7ICAgICAg ICAgICAgICAgICAgICAgIC8qIFVzZSBzZWxlY3QoKSAqLworICAgIHR2LnR2X3VzZWMgPSBtICog MTAwMEw7CisjaWZkZWYgQlNENDQKKyAgICB4ID0gc2VsZWN0KCAwLCAoZmRfc2V0ICopMCwgKGZk X3NldCAqKTAsIChmZF9zZXQgKikwLCAmdHYgKTsKKyAgICBkZWJ1ZyhGMTAxLCJtc2xlZXAgQlNE NDQgc2VsZWN0IiwiIix4KTsKKyNlbHNlIC8qIEJTRDQ0ICovCisjaWZkZWYgX19saW51eF9fCisg ICAgeCA9IHNlbGVjdCggMCwgKGZkX3NldCAqKTAsIChmZF9zZXQgKikwLCAoZmRfc2V0ICopMCwg JnR2ICk7CisgICAgZGVidWcoRjEwMSwibXNsZWVwIF9fbGludXhfXyBzZWxlY3QiLCIiLHgpOwor I2Vsc2UgLyogX19saW51eF9fICovCisjaWZkZWYgQlNENDMKKyAgICB4ID0gc2VsZWN0KCAwLCAo ZmRfc2V0ICopMCwgKGZkX3NldCAqKTAsIChmZF9zZXQgKikwLCAmdHYgKTsKKyAgICBkZWJ1ZyhG MTAxLCJtc2xlZXAgQlNENDMgc2VsZWN0IiwiIix4KTsKKyNlbHNlIC8qIEJTRDQzICovCisjaWZk ZWYgUU5YNgorICAgIHggPSBzZWxlY3QoIDAsIChmZF9zZXQgKikwLCAoZmRfc2V0ICopMCwgKGZk X3NldCAqKTAsICZ0diApOworICAgIGRlYnVnKEYxMDEsIm1zbGVlcCBRTlg2IHNlbGVjdCIsIiIs eCk7CisjZWxzZSAvKiBRTlg2ICovCisjaWZkZWYgUU5YCisgICAgeCA9IHNlbGVjdCggMCwgKGZk X3NldCAqKTAsIChmZF9zZXQgKikwLCAoZmRfc2V0ICopMCwgJnR2ICk7CisgICAgZGVidWcoRjEw MSwibXNsZWVwIFFOWCBzZWxlY3QiLCIiLHgpOworI2Vsc2UgLyogUU5YICovCisjaWZkZWYgQ09I RVJFTlQKKyAgICB4ID0gc2VsZWN0KCAwLCAoZmRfc2V0ICopMCwgKGZkX3NldCAqKTAsIChmZF9z ZXQgKikwLCAmdHYgKTsKKyAgICBkZWJ1ZyhGMTAxLCJtc2xlZXAgQ09IRVJFTlQgc2VsZWN0Iiwi Iix4KTsKKyNlbHNlIC8qIENPSEVSRU5UICovCisjaWZkZWYgSFBVWDEwMDAJCQkJLyogMTAuMDAg b25seSwgbm90IDEwLjEwIG9yIGxhdGVyICovCisgICAgeCA9IHNlbGVjdCggMCwgKGludCAqKTAs IChpbnQgKikwLCAoaW50ICopMCwgJnR2ICk7CisgICAgZGVidWcoRjEwMSwibXNsZWVwIEhQLVVY IDEwLjAwIHNlbGVjdCIsIiIseCk7CisjZWxzZSAvKiBIUFVYMTAwMCAqLworI2lmZGVmIFNWUjQK KyAgICB4ID0gc2VsZWN0KCAwLCAoZmRfc2V0ICopMCwgKGZkX3NldCAqKTAsIChmZF9zZXQgKikw LCAmdHYgKTsKKyAgICBkZWJ1ZyhGMTAxLCJtc2xlZXAgU1ZSNCBzZWxlY3QiLCIiLHgpOworI2Vs c2UgLyogU1ZSNCAqLworI2lmZGVmIE9TRjQwCisgICAgeCA9IHNlbGVjdCggMCwgKGZkX3NldCAq KTAsIChmZF9zZXQgKikwLCAoZmRfc2V0ICopMCwgJnR2ICk7CisgICAgZGVidWcoRjEwMSwibXNs ZWVwIE9TRjQwIHNlbGVjdCIsIiIseCk7CisjZWxzZSAvKiBPU0Y0MCAqLworI2lmZGVmIFBUWAor ICAgIHggPSBzZWxlY3QoIDAsIChmZF9zZXQgKikwLCAoZmRfc2V0ICopMCwgKGZkX3NldCAqKTAs ICZ0diApOworICAgIGRlYnVnKEYxMDEsIm1zbGVlcCBPU0Y0MCBzZWxlY3QiLCIiLHgpOworI2Vs c2UKKyAgICB4ID0gc2VsZWN0KCAwLCAoaW50ICopMCwgKGludCAqKTAsIChpbnQgKikwLCAmdHYg KTsKKyAgICBkZWJ1ZyhGMTAxLCJtc2xlZXAgY2F0Y2gtYWxsIHNlbGVjdCIsIiIseCk7CisjZW5k aWYgLyogUFRYICovCisjZW5kaWYgLyogT1NGNDAgKi8KKyNlbmRpZiAvKiBIUDEwMDAgKi8KKyNl bmRpZiAvKiBTVlI0ICovCisjZW5kaWYgLyogQ09IRVJFTlQgKi8KKyNlbmRpZiAvKiBRTlggKi8K KyNlbmRpZiAvKiBRTlg2ICovCisjZW5kaWYgLyogQlNENDMgKi8KKyNlbmRpZiAvKiBfX2xpbnV4 X18gKi8KKyNlbmRpZiAvKiBCU0Q0NCAqLworI2VuZGlmIC8qIEJFTExWMTAgKi8KKyAgICByZXR1 cm4oMCk7CisKKyNlbHNlCQkJCQkvKiBOb3QgU0VMRUNUICovCisjaWZkZWYgQ0tfUE9MTAkJCQkv KiBXZSBoYXZlIHBvbGwoKSAqLworICAgIHN0cnVjdCBwb2xsZmQgcGZkOwkJCS8qIFN1cHBseSBh IHZhbGlkIGFkZHJlc3MgZm9yIHBvbGwoKSAqLworCisjaWZkZWYgT0RUMzAJCQkJLyogQnV0IGlu IFNDTyBPRFQgMy4wICovCisjaWZkZWYgTkFQCQkJCS8qIHdlIHNob3VsZCB1c2UgbmFwKCkgaW5z dGVhZCAqLworICAgIGRlYnVnKEYxMDEsIm1zbGVlcCBPRFQgMy4wIE5BUCIsIiIsbSk7IC8qIGJl Y2F1c2UgdXNpbmcgcG9sbCgpIGhlcmUgKi8KKyAgICBuYXAoKGxvbmcpbSk7CQkJICAgLyogc2Vl bXMgdG8gYnJlYWsgZGlhbGluZy4gKi8KKyAgICByZXR1cm4oMCk7CisjZWxzZQorICAgIGRlYnVn KEYxMDEsIm1zbGVlcCBPRFQgMy4wIFBPTEwiLCIiLG0pOworICAgIHBvbGwoJnBmZCwgMCwgbSk7 CisgICAgcmV0dXJuKDApOworI2VuZGlmIC8qIE5BUCAqLworI2Vsc2UKKyAgICBkZWJ1ZyhGMTAx LCJtc2xlZXAgUE9MTCIsIiIsbSk7CisgICAgcG9sbCgmcGZkLCAwLCBtKTsKKyAgICByZXR1cm4o MCk7CisjZW5kaWYgLyogT0RUMzAgKi8KKworLyoKKyAgV2UgY291bGQgaGFuZGxlIHRoZSBhYm92 ZSBtb3JlIGNsZWFubHkgYnkganVzdCBsZXR0aW5nIG5hcCgpIGFsd2F5cworICB0YWtlIHByZWNl ZGVuY2Ugb3ZlciBwb2xsKCkgaW4gdGhpcyByb3V0aW5lLCBidXQgdGhlcmUgaXMgbm8gd2F5IHRv IGtub3cKKyAgd2hldGhlciB0aGF0IHdvdWxkIGJyZWFrIHNvbWV0aGluZyBlbHNlLgorKi8KKwor I2Vsc2UJCQkJCS8qIE5vdCBQT0xMICovCisjaWZkZWYgVVNMRUVQCisvKgorICAiVGhpcyByb3V0 aW5lIGlzIGltcGxlbWVudGVkIHVzaW5nIHNldGl0aW1lcigyKTsgaXQgcmVxdWlyZXMgZWlnaHQK KyAgc3lzdGVtIGNhbGxzLi4uIi4gIEluIG90aGVyIHdvcmRzLCBpdCBtaWdodCB0YWtlIDUgbWlu dXRlcyB0byBzbGVlcAorICAxMCBtaWxsaXNlY29uZHMuLi4KKyovCisgICAgZGVidWcoRjEwMSwi bXNsZWVwIFVTTEVFUCIsIiIsbSk7CisgICAgaWYgKG0gPj0gMTAwMCkgewkJCS8qIENhdGNoIGJp ZyBhcmd1bWVudHMuICovCisJc2xlZXAobS8xMDAwKTsKKwltID0gbSAlIDEwMDA7CisJaWYgKG0g PCAxMCkgcmV0dXJuKDApOworICAgIH0KKyAgICB1c2xlZXAoKHVuc2lnbmVkIGludCkobSAqIDEw MDApKTsKKyAgICByZXR1cm4oMCk7CisjZWxzZQorI2lmZGVmIGFlZ2lzCisgICAgdGltZV8kY2xv Y2tfdCBkdXI7CisgICAgZGVidWcoRjEwMSwibXNsZWVwIGFlZ2lzIiwiIixtKTsKKyAgICBkdXIu YzIuaGlnaDE2ID0gMDsKKyAgICBkdXIuYzIubG93MzIgID0gMjUwICogbTsgLyogb25lIG1pbGxp c2Vjb25kID0gMjUwIGZvdXIgbWljcm9zZWNvbmQgdGlja3MgKi8KKyAgICB0aW1lXyR3YWl0KHRp bWVfJHJlbGF0aXZlLCBkdXIsIHN0KTsKKyAgICByZXR1cm4oMCk7CisjZWxzZQorI2lmZGVmIFBS T1ZYMQorICAgIGRlYnVnKEYxMDEsIm1zbGVlcCBWZW5peCIsIiIsbSk7CisgICAgaWYgKG0gPD0g MCkgcmV0dXJuKDApOworICAgIHNsZWVwKC0oKG0gKiA2MCArIDUwMCkgLyAxMDAwKSk7CisgICAg cmV0dXJuKDApOworI2Vsc2UKKyNpZmRlZiBOQVAKKyAgICBkZWJ1ZyhGMTAxLCJtc2xlZXAgTkFQ IiwiIixtKTsKKyAgICBuYXAoKGxvbmcpbSk7CisgICAgcmV0dXJuKDApOworI2Vsc2UKKyNpZmRl ZiBBVFRTVgorI2lmbmRlZiBCU0Q0NAorICAgIGV4dGVybiBsb25nIHRpbWVzKCk7CQkvKiBPciAj aW5jbHVkZSA8dGltZXMuaD4gPyAqLworI2VuZGlmIC8qIEJTRDQ0ICovCisgICAgbG9uZyB0MSwg dDIsIHRhcnJheVs0XTsKKyAgICBpbnQgdDM7CisgICAgY2hhciAqY3AgPSBnZXRlbnYoIkhaIik7 CisgICAgaW50IENMT0NLX1RJQ0s7CisgICAgaW50IGhlcnR6OworCisgICAgaWYgKGNwICYmICho ZXJ0eiA9IGF0b2koY3ApKSkgeworICAgICAgICBDTE9DS19USUNLICA9IDEwMDAgLyBoZXJ0ejsK KyAgICB9IGVsc2UgewkJCQkvKiBwcm9iYWJseSBzaW5nbGUgdXNlciBtb2RlICovCisjaWZkZWYg SFoKKyAgICAgICAgQ0xPQ0tfVElDSyAgPSAxMDAwIC8gSFo7CisjZWxzZQorCXN0YXRpYyB3YXJu ZWQgPSAwOworCS8qIEhaIGFsd2F5cyBleGlzdHMgaW4sIGZvciBpbnN0YW5jZSwgU0NPIFhlbml4 LCBzbyB5b3UgZG9uJ3QgaGF2ZSB0bworCSAqIG1ha2Ugc3BlY2lhbCAjaWZkZWZzIGZvciBYRU5J WCBoZXJlLCBsaWtlIGluIHZlciA0Ri4gQWxzbywgaWYgeW91CisJICogaGF2ZSBYZW5peCwgeW91 IGhhdmUgc2hvdWxkIGhhdmUgbmFwKCksIHNvIHRoZSBiZXN0IGlzIHRvIHVzZSAtRE5BUAorCSAq IGluIHRoZSBtYWtlZmlsZS4gTW9zdCBzeXN0ZW1zIGhhdmUgSFouCisJICovCisJQ0xPQ0tfVElD SyA9IDE3OwkJLyogMS82MCBzZWMgKi8KKwlpZiAoIXdhcm5lZCkgeworICAgICAgICAgIHByaW50 Zigid2FybmluZzogZW52aXJvbm1lbnQgdmFyaWFibGUgSFogYmFkLi4uIHVzaW5nIEhaPSVkXHJc biIsCisJCSAxMDAwIC8gQ0xPQ0tfVElDSyk7CisgICAgICAgICAgd2FybmVkID0gMTsKKwl9Cisj ZW5kaWYgLyogIUhaICovCisgICAgfQorICAgIGRlYnVnKEYxMDEsIm1zbGVlcCBBVFRTViIsIiIs bSk7CisgICAgaWYgKG0gPD0gMCkgcmV0dXJuKDApOworICAgIGlmIChtID49IDEwMDApIHsJCQkv KiBDYXRjaCBiaWcgYXJndW1lbnRzLiAqLworCXNsZWVwKG0vMTAwMCk7CisJbSA9IG0gJSAxMDAw OworCWlmIChtIDwgMTApIHJldHVybigwKTsKKyAgICB9CisgICAgaWYgKCh0MSA9IHRpbWVzKHRh cnJheSkpIDwgMCkgcmV0dXJuKC0xKTsKKyAgICB3aGlsZSAoMSkgeworICAgICAgICBpZiAoKHQy ID0gdGltZXModGFycmF5KSkgPCAwKSByZXR1cm4oLTEpOworICAgICAgICB0MyA9ICgoaW50KSh0 MiAtIHQxKSkgKiBDTE9DS19USUNLOworICAgICAgICBpZiAodDMgPiBtKSByZXR1cm4odDMpOwor ICAgIH0KKyNlbHNlIC8qIE5vdCBBVFRTViAqLworI2lmZGVmIE1TTEZUSU1FCQkJCS8qIFVzZSBm dGltZSgpIGxvb3AuLi4gKi8KKyAgICBpbnQgdDEsIHQzID0gMDsKKyAgICBkZWJ1ZyhGMTAxLCJt c2xlZXAgTVNMRlRJTUUiLCIiLG0pOworICAgIGlmIChtIDw9IDApIHJldHVybigwKTsKKyAgICBp ZiAobSA+PSAxMDAwKSB7CQkJLyogQ2F0Y2ggYmlnIGFyZ3VtZW50cy4gKi8KKwlzbGVlcChtLzEw MDApOworCW0gPSBtICUgMTAwMDsKKwlpZiAobSA8IDEwKSByZXR1cm4oMCk7CisgICAgfQorI2lm ZGVmIFFOWAorICAgIGZ0aW1lKCZmdHApOwkJCS8qIHZvaWQgZnRpbWUoKSBpbiBRTlggKi8KKyNl bHNlCisgICAgaWYgKGZ0aW1lKCZmdHApIDwgMCkgcmV0dXJuKC0xKTsJLyogR2V0IGJhc2UgdGlt ZS4gKi8KKyNlbmRpZiAvKiBRTlggKi8KKyAgICB0MSA9ICgoZnRwLnRpbWUgJiAweGZmKSAqIDEw MDApICsgZnRwLm1pbGxpdG07CisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgZnRpbWUoJmZ0cCk7 CQkJLyogR2V0IGN1cnJlbnQgdGltZSBhbmQgY29tcGFyZS4gKi8KKyAgICAgICAgdDMgPSAoKChm dHAudGltZSAmIDB4ZmYpICogMTAwMCkgKyBmdHAubWlsbGl0bSkgLSB0MTsKKyAgICAgICAgaWYg KHQzID4gbSkgcmV0dXJuKDApOworICAgIH0KKyNlbHNlCisvKiBUaGlzIGluY2x1ZGVzIHRydWUg UE9TSVgsIHdoaWNoIGhhcyBubyB3YXkgdG8gZG8gdGhpcy4gKi8KKyAgICBkZWJ1ZyhGMTAxLCJt c2xlZXAgYnVzeSBsb29wIiwiIixtKTsKKyAgICBpZiAobSA+PSAxMDAwKSB7CQkJLyogQ2F0Y2gg YmlnIGFyZ3VtZW50cy4gKi8KKwlzbGVlcChtLzEwMDApOworCW0gPSBtICUgMTAwMDsKKwlpZiAo bSA8IDEwKSByZXR1cm4oMCk7CisgICAgfQorICAgIGlmIChtID4gMCkgd2hpbGUgKG0gPiAwKSBt LS07CS8qIEp1c3QgYSBkdW1iIGJ1c3kgbG9vcCAqLworICAgIHJldHVybigwKTsKKyNlbmRpZiAv KiBNU0xGVElNRSAqLworI2VuZGlmIC8qIEFUVFNWICovCisjZW5kaWYgLyogTkFQICovCisjZW5k aWYgLyogUFJPVlgxICovCisjZW5kaWYgLyogYWVnaXMgKi8KKyNlbmRpZiAvKiBDS19QT0xMICov CisjZW5kaWYgLyogU0VMRUNUICovCisjZW5kaWYgLyogQkVPU09SQkVCT1ggKi8KKyNlbmRpZiAv KiBVU0xFRVAgKi8KKyNlbmRpZiAvKiBQbGFuOSAqLworfQorCisvKiAgUiBUIEkgTSBFIFIgLS0g IFJlc2V0IGVsYXBzZWQgdGltZSBjb3VudGVyICAqLworCitWT0lECitydGltZXIoKSB7CisgICAg dGNvdW50ID0gdGltZSggKHRpbWVfdCAqKSAwICk7Cit9CisKKworLyogIEcgVCBJIE0gRSBSIC0t ICBHZXQgY3VycmVudCB2YWx1ZSBvZiBlbGFwc2VkIHRpbWUgY291bnRlciBpbiBzZWNvbmRzICAq LworCitpbnQKK2d0aW1lcigpIHsKKyAgICBpbnQgeDsKKyAgICB4ID0gKGludCkgKHRpbWUoICh0 aW1lX3QgKikgMCApIC0gdGNvdW50KTsKKyAgICBkZWJ1ZyhGMTAxLCJndGltZXIiLCIiLHgpOwor ICAgIHJldHVybiggKHggPCAwKSA/IDAgOiB4ICk7Cit9CisKKyNpZmRlZiBHRlRJTUVSCisvKgor ICBGbG9hdGluZy1wb2ludCB0aW1lcnMuICBSZXF1aXJlIG5vdCBvbmx5IGZsb2F0aW5nIHBvaW50 IHN1cHBvcnQsIGJ1dAorICBhbHNvIGdldHRpbWVvZmRheSgpLgorKi8KK3N0YXRpYyBzdHJ1Y3Qg dGltZXZhbCB0emVybzsKKworVk9JRAorcmZ0aW1lcigpIHsKKyNpZmRlZiBHVE9ET05FQVJHCQkJ LyogQWNjb3VudCBmb3IgTW90J3MgZGVmaW5pdGlvbiAqLworICAgIChWT0lEKSBnZXR0aW1lb2Zk YXkoJnR6ZXJvKTsKKyNlbHNlCisgICAgKFZPSUQpIGdldHRpbWVvZmRheSgmdHplcm8sIChzdHJ1 Y3QgdGltZXpvbmUgKikwKTsKKyNlbmRpZiAvKiBHVE9ET05FQVJHICovCit9CisKK0NLRkxPQVQK K2dmdGltZXIoKSB7CisgICAgc3RydWN0IHRpbWV2YWwgdG5vdywgdGRlbHRhOworICAgIENLRkxP QVQgczsKKyNpZmRlZiBERUJVRworICAgIGNoYXIgZnBidWZbNjRdOworI2VuZGlmIC8qIERFQlVH ICovCisjaWZkZWYgR1RPRE9ORUFSRwkJCS8qIEFjY291bnQgZm9yIE1vdCdzIGRlZmluaXRpb24g Ki8KKyAgICAoVk9JRCkgZ2V0dGltZW9mZGF5KCZ0bm93KTsKKyNlbHNlCisgICAgKFZPSUQpIGdl dHRpbWVvZmRheSgmdG5vdywgKHN0cnVjdCB0aW1lem9uZSAqKTApOworI2VuZGlmIC8qIEdUT0RP TkVBUkcgKi8KKworICAgIHRkZWx0YS50dl9zZWMgPSB0bm93LnR2X3NlYyAtIHR6ZXJvLnR2X3Nl YzsKKyAgICB0ZGVsdGEudHZfdXNlYyA9IHRub3cudHZfdXNlYyAtIHR6ZXJvLnR2X3VzZWM7CisK KyAgICBpZiAodGRlbHRhLnR2X3VzZWMgPCAwKSB7CisJdGRlbHRhLnR2X3NlYy0tOworCXRkZWx0 YS50dl91c2VjICs9IDEwMDAwMDA7CisgICAgfQorICAgIHMgPSAoQ0tGTE9BVCkgdGRlbHRhLnR2 X3NlYyArICgoQ0tGTE9BVCkgdGRlbHRhLnR2X3VzZWMgLyAxMDAwMDAwLjApOworICAgIGlmIChz IDwgR0ZNSU5USU1FKQorICAgICAgcyA9IEdGTUlOVElNRTsKKyNpZmRlZiBERUJVRworICAgIGlm IChkZWJsb2cpIHsKKwlzcHJpbnRmKGZwYnVmLCIlZiIscyk7CisJZGVidWcoRjExMCwiZ2Z0aW1l ciIsZnBidWYsMCk7CisgICAgfQorI2VuZGlmIC8qIERFQlVHICovCisgICAgcmV0dXJuKHMpOwor fQorI2VuZGlmIC8qIEdGVElNRVIgKi8KKworLyogIFogVCBJIE0gRSAgLS0gIFJldHVybiBhc2N0 aW1lKCktZm9ybWF0IGRhdGUvdGltZSBzdHJpbmcgICovCisvKgorICBOT1RFOiBhcyBhIHNpZGUg ZWZmZWN0IG9mIGNhbGxpbmcgdGhpcyByb3V0aW5lLCB3ZSBjYW4gYWxzbyBzZXQgdGhlCisgIGZv bGxvd2luZyB0d28gdmFyaWFibGVzLCBnaXZpbmcgdGhlIG1pY3JvLSBhbmQgbWlsbGlzZWNvbmRz IChmcmFjdGlvbnMgb2YKKyAgc2Vjb25kcykgb2YgdGhlIGNsb2NrIHRpbWUuICBDdXJyZW50bHkg dGhpcyBpcyBkb25lIG9ubHkgaW4gQlNELWJhc2VkIGJ1aWxkcworICB0aGF0IHVzZSBnZXR0aW1l b2ZkYXkoKS4gIFdoZW4gdGhlc2UgdmFyaWFibGVzIGFyZSBub3QgZmlsbGVkIGluLCB0aGV5IGFy ZQorICBsZWZ0IHdpdGggYSB2YWx1ZSBvZiAtMUwuCisqLworc3RhdGljIGNoYXIgYXNjdG1idWZb NjRdOworCitWT0lECit6dGltZShzKSBjaGFyICoqczsgeworCisjaWZkZWYgR0ZUSU1FUgorLyoK KyAgVGhlIGdldHRpbWVvZmRheSgpIG1ldGhvZCwgd2hpY2ggYWxzbyBzZXRzIHp0bXNlYyBhbmQg enR1c2VjLCB3b3JrcyBmb3IKKyAgYWxsIEdGVElNRVIgYnVpbGRzLiAgTk9URTogenRtc2VjIGFu ZCB6dHVzZWMgYXJlIGRlZmluZWQgaW4gY2tjbWFpLmMsCisgIGFuZCBleHRlcm4gZGVjbGFyYXRp b25zIGZvciB0aGVtIGFyZSBpbiBja2NkZWIuaDsgdGh1cyB0aGV5IGFyZQorICBkZWNsYXJlZCBp biB0aGlzIGZpbGUgYnkgaW5jbHVzaW9uIG9mIGNrY2RlYi5oLgorKi8KKyAgICBjaGFyICphc2N0 aW1lKCk7CisgICAgc3RydWN0IHRtICpsb2NhbHRpbWUoKTsKKyAgICBzdHJ1Y3QgdG0gKnRwOwor ICAgIHp0bXNlYyA9IC0xTDsKKyAgICB6dHVzZWMgPSAtMUw7CisKKyAgICBpZiAoIXMpCisgICAg ICBkZWJ1ZyhGMTAwLCJ6dGltZSBzPT1OVUxMIiwiIiwwKTsKKworI2lmZGVmIEdUT0RPTkVBUkcK KyAgICAvKiBObyAybmQgYXJnIGluIE1vdG9yb2xhIFNWODggYW5kIHNvbWUgb3RoZXJzICovCisg ICAgaWYgKGdldHRpbWVvZmRheSgmdHYpID4gLTEpCisjZWxzZQorI2lmbmRlZiBDT0hFUkVOVAor I2lmZGVmIFBUWAorICAgIGlmIChnZXR0aW1lb2ZkYXkoJnR2LE5VTEwpID4gLTEpCisjZWxzZQor I2lmZGVmIE5PVElNRVpPTkUKKyAgICBpZiAoZ2V0dGltZW9mZGF5KCZ0diwgTlVMTCkgPiAtMSkJ Lyogd29uZGVyIHdoYXQgdGhpcyBkb2VzLi4uICovCisjZWxzZQorICAgIGlmIChnZXR0aW1lb2Zk YXkoJnR2LCAmdHopID4gLTEpCisjZW5kaWYgLyogTk9USU1FWk9ORSAqLworI2VuZGlmIC8qIFBU WCAqLworI2VuZGlmIC8qIENPSEVSRU5UICovCisjZW5kaWYgLyogR1RPRE9ORUFSRyAqLworICAg ICAgewkJCQkJLyogRmlsbCBpbiB0bSBzdHJ1Y3QgKi8KKwl6dHVzZWMgPSB0di50dl91c2VjOwkJ LyogTWljcm9zZWNvbmRzICovCisJenRtc2VjID0genR1c2VjIC8gMTAwMEw7CS8qIE1pbGxpc2Vj b25kcyAqLworI2lmZGVmIEhQVVg5CisJeworCSAgICB0aW1lX3Qgeno7CisJICAgIHp6ID0gdHYu dHZfc2VjOworCSAgICB0cCA9IGxvY2FsdGltZSgmenopOwkvKiBDb252ZXJ0IHRvIGxvY2FsIHRp bWUgKi8KKwl9CisjZWxzZQorI2lmZGVmIEhQVVgxMDAwCisJeworCSAgICB0aW1lX3Qgeno7CisJ ICAgIHp6ID0gdHYudHZfc2VjOworCSAgICB0cCA9IGxvY2FsdGltZSgmenopOworCX0KKyNlbHNl CisjaWZkZWYgTElOVVgKKwl7ICAgLyogYXZvaWQgdW5hbGlnbmVkIGFjY2VzcyB0cmFwIG9uIDY0 LWJpdCBwbGF0Zm9ybXMgKi8KKwkgICAgdGltZV90IHp6OworCSAgICB6eiA9IHR2LnR2X3NlYzsK KwkgICAgdHAgPSBsb2NhbHRpbWUoJnp6KTsKKwl9CisjZWxzZQorI2lmZGVmIE1BQ09TWAorCXRw ID0gbG9jYWx0aW1lKCh0aW1lX3QgKikmdHYudHZfc2VjKTsgLyogQ29udmVydCB0byBsb2NhbCB0 aW1lICovCisjZWxzZQorCXRwID0gbG9jYWx0aW1lKCZ0di50dl9zZWMpOworI2VuZGlmIC8qIE1B Q09TWCAqLworI2VuZGlmIC8qIExJTlVYICovCisjZW5kaWYgLyogSFBVWDEwMDAgKi8KKyNlbmRp ZiAvKiBIUFVYOSAqLworCWlmIChzKSB7CisJICAgIGNoYXIgKiBzMjsKKwkgICAgczIgPSBhc2N0 aW1lKHRwKTsJCS8qIENvbnZlcnQgcmVzdWx0IHRvIEFTQ0lJIHN0cmluZyAqLworCSAgICBhc2N0 bWJ1ZlswXSA9ICdcMCc7CisJICAgIGlmIChzMikgY2tzdHJuY3B5KGFzY3RtYnVmLHMyLDY0KTsK KwkgICAgKnMgPSBhc2N0bWJ1ZjsKKwkgICAgZGVidWcoRjExMSwienRpbWUgR0ZUSU1FUiBnZXR0 aW1lb2ZkYXkiLCpzLHp0dXNlYyk7CisJfQorICAgIH0KKyNlbHNlICAvKiBOb3QgR0ZUSU1FUiAq LworCisjdW5kZWYgWlRJTUVWNwkJCQkvKiBXaGljaCBzeXN0ZW1zIG5lZWQgdG8gdXNlICovCisj aWZkZWYgQ09IRVJFTlQJCQkJLyogb2xkIFVOSVggVmVyc2lvbiA3IHdheS4uLiAqLworI2RlZmlu ZSBaVElNRVY3CisjZW5kaWYgLyogQ09IRVJFTlQgKi8KKyNpZmRlZiBUT1dFUjEKKyNkZWZpbmUg WlRJTUVWNworI2VuZGlmIC8qIFRPV0VSMSAqLworI2lmZGVmIEFOWUJTRAorI2lmbmRlZiBCU0Q0 MgorI2RlZmluZSBaVElNRVY3CisjZW5kaWYgLyogQlNENDIgKi8KKyNlbmRpZiAvKiBBTllCU0Qg Ki8KKyNpZmRlZiBWNworI2lmbmRlZiBNSU5JWAorI2RlZmluZSBaVElNRVY3CisjZW5kaWYgLyog TUlOSVggKi8KKyNlbmRpZiAvKiBWNyAqLworI2lmZGVmIFBPU0lYCisjZGVmaW5lIFpUSU1FVjcK KyNlbmRpZiAvKiBQT1NJWCAqLworCisjaWZkZWYgSFBVWDEwMjAKKy8qCisgIFByb3RvdHlwZXMg YXJlIGluIDx0aW1lLmg+LCBpbmNsdWRlZCBhYm92ZS4KKyovCisgICAgdGltZV90IGNsb2NrX3N0 b3JhZ2U7CisgICAgY2xvY2tfc3RvcmFnZSA9IHRpbWUoKHZvaWQgKikgMCk7CisgICAgaWYgKHMp IHsKKwkqcyA9IGN0aW1lKCZjbG9ja19zdG9yYWdlKTsKKwlkZWJ1ZyhGMTEwLCJ6dGltZTogSFBV WCAxMC4yMCIsKnMsMCk7CisgICAgfQorI2Vsc2UKKyNpZmRlZiBBVFRTVgkJCQkvKiBBVCZUIHdh eSAqLworLyogIGV4dGVybiBsb25nIHRpbWUoKTsgKi8JCS8qIFRoZW9yZXRpY2FsbHkgdGhlc2Ug c2hvdWxkICovCisgICAgY2hhciAqY3RpbWUoKTsJCQkvKiBhbHJlYWR5IGJlZW4gZGNsJ2QgaW4g PHRpbWUuaD4gKi8KKyAgICB0aW1lX3QgY2xvY2tfc3RvcmFnZTsKKyAgICBjbG9ja19zdG9yYWdl ID0gdGltZSgKKyNpZmRlZiBJUklYNjAKKwkJCSAodGltZV90ICopCisjZWxzZQorI2lmZGVmIEJT RDQ0CisJCQkgKHRpbWVfdCAqKQorI2Vsc2UKKwkJCSAobG9uZyAqKQorI2VuZGlmIC8qIEJTRDQ0 ICovCisjZW5kaWYgLyogSVJJWDYwICovCisJCQkgMCApOworICAgIGlmIChzKSB7CisJKnMgPSBj dGltZSggJmNsb2NrX3N0b3JhZ2UgKTsKKwlkZWJ1ZyhGMTEwLCJ6dGltZTogQVRUU1YiLCpzLDAp OworICAgIH0KKyNlbHNlCisjaWZkZWYgUFJPVlgxCQkJCS8qIFZlbml4IDEuMCB3YXkgKi8KKyAg ICBpbnQgdXRpbWVbMl07CisgICAgdGltZSh1dGltZSk7CisgICAgaWYgKHMpIHsKKwkqcyA9IGN0 aW1lKHV0aW1lKTsKKwlkZWJ1ZyhGMTEwLCJ6dGltZTogUFJPVlgxIiwqcywwKTsKKyAgICB9Cisj ZWxzZQorI2lmZGVmIEJTRDQyCQkJCS8qIDQuMkJTRCB3YXkgKi8KKyAgICBjaGFyICphc2N0aW1l KCk7CisgICAgc3RydWN0IHRtICpsb2NhbHRpbWUoKTsKKyAgICBzdHJ1Y3QgdG0gKnRwOworICAg IGdldHRpbWVvZmRheSgmdHYsICZ0eik7CisgICAgenR1c2VjID0gdHYudHZfdXNlYzsKKyAgICB6 dG1zZWMgPSB0di50dl91c2VjIC8gMTAwMEw7CisgICAgdHAgPSBsb2NhbHRpbWUoJnR2LnR2X3Nl Yyk7CisgICAgaWYgKHMpIHsKKwkqcyA9IGFzY3RpbWUodHApOworCWRlYnVnKEYxMTEsInp0aW1l OiBCU0Q0MiIsKnMsenR1c2VjKTsKKyAgICB9CisjZWxzZQorI2lmZGVmIE1JTklYCQkJCS8qIE1J TklYIHdheSAqLworI2lmZGVmIENPTU1FTlQKKyAgICBleHRlcm4gbG9uZyB0aW1lKCk7CQkJLyog QWxyZWFkeSBnb3QgdGhlc2UgZnJvbSA8dGltZS5oPiAqLworICAgIGV4dGVybiBjaGFyICpjdGlt ZSgpOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICB0aW1lX3QgdXRpbWVbMl07CisgICAgdGlt ZSh1dGltZSk7CisgICAgaWYgKHMpIHsKKwkqcyA9IGN0aW1lKHV0aW1lKTsKKwlkZWJ1ZyhGMTEw LCJ6dGltZTogTUlOSVgiLCpzLDApOworICAgIH0KKyNlbHNlCisjaWZkZWYgWlRJTUVWNwkJCQkv KiBUaGUgcmVndWxhciB3YXkgKi8KKyAgICBjaGFyICphc2N0aW1lKCk7CisgICAgc3RydWN0IHRt ICpsb2NhbHRpbWUoKTsKKyAgICBzdHJ1Y3QgdG0gKnRwOworICAgIGxvbmcgeGNsb2NrOwkJCS8q IG9yIHVuc2lnbmVkIGxvbmcgZm9yIEJlQm94PyAqLworICAgIHRpbWUoJnhjbG9jayk7CisgICAg dHAgPSBsb2NhbHRpbWUoJnhjbG9jayk7CisgICAgaWYgKHMpIHsKKwkqcyA9IGFzY3RpbWUodHAp OworCWRlYnVnKEYxMTAsInp0aW1lOiBaVElNRVY3IiwqcywwKTsKKyAgICB9CisjZWxzZQkJCQkJ LyogQ2F0Y2gtYWxsIGZvciBvdGhlcnMuLi4gKi8KKyAgICBpZiAocykgeworCSpzID0gIkRheSBN b24gMDAgMDA6MDA6MDAgMDAwMFxuIjsgLyogRHVtbXkgaW4gYXNjdGltZSgpIGZvcm1hdCAqLwor CWRlYnVnKEYxMTAsInp0aW1lOiBjYXRjaC1hbGwiLCpzLDApOworICAgIH0KKyNlbmRpZiAvKiBa VElNRVY3ICovCisjZW5kaWYgLyogTUlOSVggKi8KKyNlbmRpZiAvKiBCU0Q0MiAqLworI2VuZGlm IC8qIFBST1ZYMSAqLworI2VuZGlmIC8qIEFUVFNWICovCisjZW5kaWYgLyogSFBVWDEwMjAgKi8K KyNlbmRpZiAvKiBHRlRJTUVSICovCit9CisKKy8qICBDIE8gTiBHIE0gIC0tICBHZXQgY29uc29s ZSB0ZXJtaW5hbCBtb2Rlcy4gICovCisKKy8qCisgIFNhdmVzIGluaXRpYWwgY29uc29sZSBtb2Rl LCBhbmQgZXN0YWJsaXNoZXMgdmFyaWFibGVzIGZvciBzd2l0Y2hpbmcKKyAgYmV0d2VlbiBjdXJy ZW50IChwcmVzdW1hYmx5IG5vcm1hbCkgbW9kZSBhbmQgb3RoZXIgbW9kZXMuCisgIFNob3VsZCBi ZSBjYWxsZWQgd2hlbiBwcm9ncmFtIHN0YXJ0cywgYnV0IG9ubHkgYWZ0ZXIgZXN0YWJsaXNoaW5n CisgIHdoZXRoZXIgcHJvZ3JhbSBpcyBpbiB0aGUgZm9yZWdyb3VuZCBvciBiYWNrZ3JvdW5kLgor ICBSZXR1cm5zIDEgaWYgaXQgZ290IHRoZSBtb2RlcyBPSywgMCBpZiBpdCBkaWQgbm90aGluZywg LTEgb24gZXJyb3IuCisqLworaW50Citjb25nbSgpIHsKKyAgICBpbnQgZmQ7CisgICAgaWYgKGJh Y2tncmQgfHwgIWlzYXR0eSgwKSkgewkvKiBJZiBpbiBiYWNrZ3JvdW5kLiAqLworCWNnbWYgPSAt MTsJCQkvKiBEb24ndCBib3RoZXIsIG1vZGVzIGFyZSBnYXJiYWdlLiAqLworCXJldHVybigtMSk7 CisgICAgfQorICAgIGlmIChjZ21mID4gMCkgcmV0dXJuKDApOwkJLyogQWxyZWFkeSBkaWQgdGhp cy4gKi8KKyAgICBkZWJ1ZyhGMTAwLCJjb25nbSBnZXR0aW5nIG1vZGVzIiwiIiwwKTsgLyogTmVl ZCB0byBkbyBpdC4gKi8KKyNpZmRlZiBhZWdpcworICAgIGlvc18kaW5xX3R5cGVfdWlkKGlvc18k c3RkaW4sIGNvbnVpZCwgc3QpOworICAgIGlmIChzdC5hbGwgIT0gc3RhdHVzXyRvaykgeworCWZw cmludGYoc3RkZXJyLCAicHJvYmxlbSBnZXR0aW5nIHN0ZGluIG9ianR5cGU6ICIpOworCWVycm9y XyRwcmludChzdCk7CisgICAgfQorICAgIGNvbmNycCA9IChjb251aWQgPT0gbWJ4XyR1aWQpOwor ICAgIGNvbmJ1Zm4gPSAwOworI2VuZGlmIC8qIGFlZ2lzICovCisKKyNpZm5kZWYgQkVCT1gKKyAg ICBpZiAoKGZkID0gb3BlbihDVFROQU0sMikpIDwgMCkgewkvKiBPcGVuIGNvbnRyb2xsaW5nIHRl cm1pbmFsICovCisjaWZkZWYgQ09NTUVOVAorCWZwcmludGYoc3RkZXJyLCJFcnJvciBvcGVuaW5n ICVzXG4iLCBDVFROQU0pOworCXBlcnJvcigiY29uZ20iKTsKKwlyZXR1cm4oLTEpOworI2Vsc2UK KwlmZCA9IDA7CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgIH0KKyNlbHNlCisgICAgZmQgPSAw OworI2VuZGlmIC8qICFCRUJPWCAqLworI2lmZGVmIEJTRDQ0T1JQT1NJWAorICAgIGlmICh0Y2dl dGF0dHIoZmQsJmNjb2xkKSA8IDApIHJldHVybigtMSk7CisgICAgaWYgKHRjZ2V0YXR0cihmZCwm Y2NjYnJrKSA8IDApIHJldHVybigtMSk7CisgICAgaWYgKHRjZ2V0YXR0cihmZCwmY2NyYXcpIDwg MCkgcmV0dXJuKC0xKTsKKyNlbHNlCisjaWZkZWYgQVRUU1YKKyAgICBpZiAoaW9jdGwoZmQsVENH RVRBLCZjY29sZCkgIDwgMCkgcmV0dXJuKC0xKTsKKyAgICBpZiAoaW9jdGwoZmQsVENHRVRBLCZj Y2NicmspIDwgMCkgcmV0dXJuKC0xKTsKKyAgICBpZiAoaW9jdGwoZmQsVENHRVRBLCZjY3Jhdykg IDwgMCkgcmV0dXJuKC0xKTsKKyNpZmRlZiBWWFZFCisgICAgY2NjYnJrLmNfbGluZSA9IDA7CQkJ LyogU1RUWSBsaW5lIDAgZm9yIENEQyBWWC9WRSAqLworICAgIGlmIChpb2N0bChmZCxUQ1NFVEEs JmNjY2JyaykgPCAwKSByZXR1cm4oLTEpOworICAgIGNjcmF3LmNfbGluZSA9IDA7CQkJLyogU1RU WSBsaW5lIDAgZm9yIENEQyBWWC9WRSAqLworICAgIGlmIChpb2N0bChmZCxUQ1NFVEEsJmNjcmF3 KSA8IDApIHJldHVybigtMSk7CisjZW5kaWYgLyogVlhWRSAqLworI2Vsc2UKKyNpZmRlZiBCRUxM VjEwCisgICAgaWYgKGlvY3RsKGZkLFRJT0NHRVRQLCZjY29sZCkgPCAwKSByZXR1cm4oLTEpOwor ICAgIGlmIChpb2N0bChmZCxUSU9DR0VUUCwmY2NjYnJrKSA8IDApIHJldHVybigtMSk7CisgICAg aWYgKGlvY3RsKGZkLFRJT0NHRVRQLCZjY3JhdykgPCAwKSByZXR1cm4oLTEpOworICAgIGRlYnVn KEYxMDEsImNjY2Jyay5zZ19mbGFncyBvcmlnIiwiIiwgY2NjYnJrLnNnX2ZsYWdzKTsKKyNlbHNl CisgICAgaWYgKGd0dHkoZmQsJmNjb2xkKSA8IDApIHJldHVybigtMSk7CisgICAgaWYgKGd0dHko ZmQsJmNjY2JyaykgPCAwKSByZXR1cm4oLTEpOworICAgIGlmIChndHR5KGZkLCZjY3JhdykgPCAw KSByZXR1cm4oLTEpOworI2VuZGlmIC8qIEJFTExWMTAgKi8KKyNlbmRpZiAvKiBBVFRTViAqLwor I2VuZGlmIC8qIEJTRDQ0T1JQT1NJWCAqLworI2lmZGVmIHNvbnlfbmV3cwkJCS8qIFNvbnkgTkVX UyAqLworICAgIGlmIChpb2N0bChmZCxUSU9DS0dFVCwma21fY29uKSA8IDApIHsgLyogR2V0IGNv bnNvbGUgS2FuamkgbW9kZSAqLworCXBlcnJvcigiY29uZ20gZXJyb3IgZ2V0dGluZyBLYW5qaSBt b2RlIik7CisJZGVidWcoRjEwMSwiY29uZ20gZXJyb3IgZ2V0dGluZyBLYW5qaSBtb2RlIiwiIiww KTsKKwlrbV9jb24gPSAtMTsJCQkvKiBNYWtlIHN1cmUgdGhpcyBzdGF5cyB1bmRlZmluZWQuICov CisJcmV0dXJuKC0xKTsKKyAgICB9CisjZW5kaWYgLyogc29ueV9uZXdzICovCisgICAgaWYgKGZk ID4gMCkKKyAgICAgIGNsb3NlKGZkKTsKKyAgICBjZ21mID0gMTsJCQkJLyogRmxhZyB0aGF0IHdl IGdvdCB0aGVtLiAqLworICAgIHJldHVybigxKTsKK30KKworCitzdGF0aWMgVk9JRAorY29uZ2V0 YnVmKHgpIGludCB4OyB7CisgICAgaW50IG47CisgICAgbiA9IENPTkJVRlNJWiAtIChjb25idWZw IC0gY29uYnVmKTsJLyogSG93IG11Y2ggcm9vbSBsZWZ0IGluIGJ1ZmZlcj8gKi8KKyAgICBpZiAo eCA+IG4pIHsKKwlkZWJ1ZyhGMTAxLCJjb25nZXRidWYgY2hhciBsb3NzIiwiIix4LW4pOworCXgg PSBuOworICAgIH0KKyAgICB4ID0gcmVhZCgwLGNvbmJ1ZnAseCk7CisgICAgY29uYnVmbiArPSB4 OworICAgIGRlYnVnKEYxMTEsImNvbmdldGJ1ZiByZWFkYWhlYWQiLGNvbmJ1Zix4KTsKK30KKwor CisvKiAgQyBPIE4gQyBCIC0tICBQdXQgY29uc29sZSBpbiBjYnJlYWsgbW9kZS4gICovCisKKy8q ICBSZXR1cm5zIDAgaWYgb2ssIC0xIGlmIG5vdCAgKi8KKworaW50CisjaWZkZWYgQ0tfQU5TSUMK K2NvbmNiKGNoYXIgZXNjKQorI2Vsc2UKK2NvbmNiKGVzYykgY2hhciBlc2M7CisjZW5kaWYgLyog Q0tfQU5TSUMgKi8KKy8qIGNvbmNiICovIHsKKyAgICBpbnQgeCwgeSA9IDA7CisgICAgZGVidWco RjEwMSwiY29uY2IgY29uc3RhdGUiLCIiLGNvbnN0YXRlKTsKKyAgICBkZWJ1ZyhGMTAxLCJjb25j YiBjZ21mIiwiIixjZ21mKTsKKyAgICBkZWJ1ZyhGMTAxLCJjb25jYiBiYWNrZ3JkIiwiIixiYWNr Z3JkKTsKKworICAgIGlmIChjb25zdGF0ZSA9PSBDT05fQ0IpCisgICAgICByZXR1cm4oMCk7CisK KyAgICBpZiAoY2dtZiA8IDEpCQkJLyogRGlkIHdlIGdldCBjb25zb2xlIG1vZGVzIHlldD8gKi8K KyAgICAgIGlmICghYmFja2dyZCkJCQkvKiBObywgaW4gYmFja2dyb3VuZD8gKi8KKwljb25nbSgp OwkJCS8qIE5vLCB0cnkgdG8gZ2V0IHRoZW0gbm93LiAqLworICAgIGlmIChjZ21mIDwgMSkJCQkv KiBTdGlsbCBkb24ndCBoYXZlIHRoZW0/ICovCisgICAgICByZXR1cm4oMCk7CQkJLyogR2l2ZSB1 cC4gKi8KKyAgICBkZWJ1ZyhGMTAxLCJjb25jYiB0dHlmZCIsIiIsdHR5ZmQpOworICAgIGRlYnVn KEYxMDEsImNvbmNiIHR0ZmRmbGciLCIiLHR0ZmRmbGcpOworI2lmZGVmIENPTU1FTlQKKyAgICAv KiBUaGlzIGJyZWFrcyByZXR1cm5pbmcgdG8gcHJvbXB0IGFmdGVyIHByb3RvY29sIHdpdGggIi1s IDAiICovCisgICAgLyogQ29tbWVudGVkIG91dCBKdWx5IDE5OTggKi8KKyAgICBpZiAodHRmZGZs ZyAmJiB0dHlmZCA+PSAwICYmIHR0eWZkIDwgMykKKyAgICAgIHJldHVybigwKTsKKyNlbmRpZiAv KiBDT01NRU5UICovCisgICAgeCA9IGlzYXR0eSgwKTsKKyAgICBkZWJ1ZyhGMTAxLCJjb25jYiBp c2F0dHkiLCIiLHgpOworICAgIGlmICgheCkgcmV0dXJuKDApOwkJCS8qIE9ubHkgd2hlbiBydW5u aW5nIG9uIHJlYWwgdHR5cyAqLworICAgIGRlYnVnKEYxMDEsImNvbmNiIHhzdXNwZW5kIiwiIix4 c3VzcGVuZCk7CisgICAgaWYgKGJhY2tncmQpCQkJLyogRG8gbm90aGluZyBpZiBpbiBiYWNrZ3Jv dW5kLiAqLworICAgICAgcmV0dXJuKDApOworICAgIGVzY2NociA9IGVzYzsgICAgICAgICAgICAg ICAgICAgICAgIC8qIE1ha2UgdGhpcyBhdmFpbGFibGUgdG8gb3RoZXIgZm5zICovCisgICAgY2t4 ZWNoID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogUHJvZ3JhbSBjYW4gZWNobyBjaGFy YWN0ZXJzICovCisjaWZkZWYgYWVnaXMKKyAgICBjb25idWZuID0gMDsKKyAgICBpZiAoY29uY3Jw KSByZXR1cm4od3JpdGUoMSwgIlwwMzVcMDAyIiwgMikpOworICAgIGlmIChjb251aWQgPT0gaW5w dXRfcGFkXyR1aWQpIHtwYWRfJHJhdyhpb3NfJHN0ZGluLCBzdCk7IHJldHVybigwKTt9CisjZW5k aWYgLyogYWVnaXMgKi8KKworI2lmZGVmIENPSEVSRU5UCisjZGVmaW5lIFNWT1JQT1NJWAorI2Vu ZGlmIC8qIENPSEVSRU5UICovCisKKyNpZmRlZiBQbGFuOQorICAgIHggPSBwOWNvbmNiKCk7Cisj ZWxzZQorI2lmbmRlZiBTVk9SUE9TSVgJCQkvKiBCU0QsIFY3LCBldGMgKi8KKyAgICBkZWJ1ZyhG MTAxLCJjY2Nicmsuc2dfZmxhZ3MgY29uY2IgMSIsIiIsIGNjY2Jyay5zZ19mbGFncyk7CisgICAg ZGVidWcoRjEwMSwiY29uY2Igc3R0eSBDQlJFQUsiLCIiLDApOworICAgIGNjY2Jyay5zZ19mbGFn cyB8PSAoQ0JSRUFLfENSTU9EKTsJLyogU2V0IHRvIGNoYXJhY3RlciB3YWtldXAsICovCisgICAg Y2NjYnJrLnNnX2ZsYWdzICY9IH5FQ0hPOyAgICAgICAgICAgLyogbm8gZWNoby4gKi8KKyAgICBk ZWJ1ZyhGMTAxLCJjY2Nicmsuc2dfZmxhZ3MgY29uY2IgMiIsIiIsIGNjY2Jyay5zZ19mbGFncyk7 CisgICAgZXJybm8gPSAwOworLyoKKyAgQlNEIHN0dHkoKSBjbGVhcnMgdGhlIGNvbnNvbGUgYnVm ZmVyLiAgU28gaWYgYW55dGhpbmcgaXMgd2FpdGluZyBpbiBpdCwKKyAgd2UgaGF2ZSB0byByZWFk IGl0IG5vdyB0byBhdm9pZCBsb3NpbmcgaXQuCisqLworICAgIHggPSBjb25jaGsoKTsKKyAgICBp ZiAoeCA+IDApCisgICAgICBjb25nZXRidWYoeCk7CisKKyNpZmRlZiBCRUxMVjEwCisgICAgeCA9 IGlvY3RsKDAsVElPQ1NFVFAsJmNjY2Jyayk7CisjZWxzZQorICAgIHggPSBzdHR5KDAsJmNjY2Jy ayk7CisgICAgZGVidWcoRjEwMSwiY2NjYnJrLnNnX2ZsYWdzIGNvbmNiIHgiLCIiLCB4KTsKKyNl bmRpZiAvKiBCRUxMVjEwICovCisjZWxzZQkJCQkJLyogU3lzIFYgYW5kIFBPU0lYICovCisjaWZu ZGVmIE9YT1MKKyAgICBkZWJ1ZyhGMTAxLCJjb25jYiBjY2NicmsuY19mbGFnIiwiIixjY2Nicmsu Y19sZmxhZyk7CisjaWZkZWYgUU5YCisgICAgLyogRG9uJ3QgbWVzcyB3aXRoIElFWFRFTiAqLwor ICAgIGNjY2Jyay5jX2xmbGFnICY9IH4oSUNBTk9OfEVDSE8pOworI2Vsc2UKKyNpZmRlZiBDT0hF UkVOVAorICAgIGNjY2Jyay5jX2xmbGFnICY9IH4oSUNBTk9OfEVDSE8pOworI2Vsc2UKKyAgICBj Y2NicmsuY19sZmxhZyAmPSB+KElDQU5PTnxFQ0hPfElFWFRFTik7CisjZW5kaWYgLyogQ09IRVJF TlQgKi8KKyNlbmRpZiAvKiBRTlggKi8KKyAgICBjY2NicmsuY19sZmxhZyB8PSBJU0lHOwkJLyog QWxsb3cgc2lnbmFscyBpbiBjb21tYW5kIG1vZGUuICovCisgICAgY2NjYnJrLmNfaWZsYWcgfD0g SUdOQlJLOwkJLyogQnV0IGlnbm9yZSBCUkVBSyBzaWduYWwgKi8KKyAgICBjY2NicmsuY19pZmxh ZyAmPSB+QlJLSU5UOworCisjZWxzZSAvKiBPWE9TICovCisgICAgZGVidWcoRjEwMCwiY29uY2Ig T1hPUyBpcyBkZWZpbmVkIiwiIiwwKTsKKyAgICBjY2NicmsuY19sZmxhZyAmPSB+KElDQU5PTnxF Q0hPKTsKKyAgICBjY2NicmsuY19jY1tWRElTQ0FSRF0gPSBjY2NicmsuY19jY1tWTE5FWFRdID0g Q0RJU0FCTEU7CisjZW5kaWYgLyogT1hPUyAqLworI2lmZGVmIENPTU1FTlQKKy8qCisgIEJlbGll dmUgaXQgb3Igbm90LCBpbiBTQ08gVU5JWCwgVlNVU1AgaXMgZ3JlYXRlciB0aGFuIE5DQywgYW5k IHNvIHRoaXMKKyAgYXJyYXkgcmVmZXJlbmNlIGlzIG91dCBvZiBib3VuZHMuICBJdCdzIG9ubHkg YSBkZWJ1ZygpIGNhbGwgc28gd2hvIG5lZWRzIGl0LgorKi8KKyNpZmRlZiBWU1VTUAorICAgIGRl YnVnKEYxMDEsImNvbmNiIGNfY2NbVlNVU1BdIiwiIixjY2NicmsuY19jY1tWU1VTUF0pOworI2Vu ZGlmIC8qIFZTVVNQICovCisjZW5kaWYgLyogQ09NTUVOVCAqLworI2lmbmRlZiBWSU5UUgorICAg IGRlYnVnKEYxMDEsImNvbmNiIGNfY2NbMF0iLCIiLGNjY2Jyay5jX2NjWzBdKTsKKyAgICBjY2Ni cmsuY19jY1swXSA9IDAwMzsgICAgICAgICAgICAgICAvKiBJbnRlcnJ1cHQgY2hhciBpcyBDb250 cm9sLUMgKi8KKyNlbHNlCisgICAgZGVidWcoRjEwMSwiY29uY2IgY19jY1tWSU5UUl0iLCIiLGNj Y2Jyay5jX2NjWzBdKTsKKyAgICBjY2NicmsuY19jY1tWSU5UUl0gPSAwMDM7CisjZW5kaWYgLyog VklOVFIgKi8KKyNpZm5kZWYgVlFVSVQKKyAgICBjY2NicmsuY19jY1sxXSA9IGVzY2NocjsgICAg ICAgICAgICAvKiBlc2NhcGUgZHVyaW5nIHBhY2tldCBtb2RlcyAqLworI2Vsc2UKKyAgICBjY2Ni cmsuY19jY1tWUVVJVF0gPSBlc2NjaHI7CisjZW5kaWYgLyogVlFVSVQgKi8KKyNpZm5kZWYgVkVP RgorICAgIGNjY2Jyay5jX2NjWzRdID0gMTsKKyNlbHNlCisjaWZuZGVmIE9YT1MKKyNpZmRlZiBW TUlOCisgICAgY2NjYnJrLmNfY2NbVk1JTl0gPSAxOworI2VuZGlmIC8qIFZNSU4gKi8KKyNlbHNl IC8qIE9YT1MgKi8KKyAgICBjY2NicmsuY19taW4gPSAxOworI2VuZGlmIC8qIE9YT1MgKi8KKyNl bmRpZiAvKiBWRU9GICovCisjaWZkZWYgWklMT0cKKyAgICBjY2NicmsuY19jY1s1XSA9IDA7Cisj ZWxzZQorI2lmbmRlZiBWRU9MCisgICAgY2NjYnJrLmNfY2NbNV0gPSAxOworI2Vsc2UKKyNpZm5k ZWYgT1hPUworI2lmZGVmIFZUSU1FCisgICAgY2NjYnJrLmNfY2NbVlRJTUVdID0gMTsKKyNlbmRp ZiAvKiBWVElNRSAqLworI2Vsc2UgLyogT1hPUyAqLworICAgIGNjY2Jyay5jX3RpbWUgPSAxOwor I2VuZGlmIC8qIE9YT1MgKi8KKyNlbmRpZiAvKiBWRU9MICovCisjZW5kaWYgLyogWklMT0cgKi8K KyAgICBlcnJubyA9IDA7CisjaWZkZWYgQlNENDRPUlBPU0lYCQkJLyogU2V0IG5ldyBtb2RlcyAq LworICAgIHggPSB0Y3NldGF0dHIoMCxUQ1NBRFJBSU4sJmNjY2Jyayk7CisjZWxzZSAvKiBBVFRT ViAqLyAgICAgIAkJCS8qIG9yIHRoZSBQT1NJWCB3YXkgKi8KKyAgICB4ID0gaW9jdGwoMCxUQ1NF VEFXLCZjY2NicmspOwkvKiB0aGUgU3lzIFYgd2F5ICovCisjZW5kaWYgLyogQlNENDRPUlBPU0lY ICovCisjZW5kaWYgLyogU1ZPUlBPU0lYICovCisKKyNpZmRlZiBDT0hFUkVOVAorI3VuZGVmIFNW T1JQT1NJWAorI2VuZGlmIC8qIENPSEVSRU5UICovCisKKyAgICBkZWJ1ZyhGMTAxLCJjb25jYiB4 IiwiIix4KTsKKyAgICBkZWJ1ZyhGMTAxLCJjb25jYiBlcnJubyIsIiIsZXJybm8pOworCisjaWZk ZWYgIFY3CisjaWZuZGVmIE1JTklYCisgICAgaWYgKGttZW1bQ09OXSA8IDApIHsKKyAgICAgICAg cWFkZHJbQ09OXSA9IGluaXRyYXdxKDApOworICAgICAgICBpZigoa21lbVtDT05dID0gb3Blbigi L2Rldi9rbWVtIiwgMCkpIDwgMCkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJDYW4n dCByZWFkIC9kZXYva21lbSBpbiBjb25jYi5cbiIpOworICAgICAgICAgICAgcGVycm9yKCIvZGV2 L2ttZW0iKTsKKyAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYg LyogTUlOSVggKi8KKyNlbmRpZiAvKiBWNyAqLworI2VuZGlmIC8qIFBsYW45ICovCisKKyAgICBp ZiAoeCA+IC0xKQorICAgICAgY29uc3RhdGUgPSBDT05fQ0I7CisKKyAgICBkZWJ1ZyhGMTAxLCJj b25jYiByZXR1cm5zIiwiIix4KTsKKyAgICByZXR1cm4oeCk7Cit9CisKKy8qICBDIE8gTiBCIEkg TiAgLS0gIFB1dCBjb25zb2xlIGluIGJpbmFyeSBtb2RlICAqLworCisvKiAgUmV0dXJucyAwIGlm IG9rLCAtMSBpZiBub3QgICovCisKK2ludAorI2lmZGVmIENLX0FOU0lDCitjb25iaW4oY2hhciBl c2MpCisjZWxzZQorY29uYmluKGVzYykgY2hhciBlc2M7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8K Ky8qIGNvbmJpbiAqLyAgeworCisgICAgaW50IHg7CisKKyAgICBkZWJ1ZyhGMTAxLCJjb25iaW4g Y29uc3RhdGUiLCIiLGNvbnN0YXRlKTsKKworICAgIGlmIChjb25zdGF0ZSA9PSBDT05fQklOKQor ICAgICAgcmV0dXJuKDApOworCisgICAgaWYgKCFpc2F0dHkoMCkpIHJldHVybigwKTsgICAgICAg ICAgLyogb25seSBmb3IgcmVhbCB0dHlzICovCisgICAgY29uZ20oKTsJCQkJLyogR2V0IG1vZGVz IGlmIG5lY2Vzc2FyeS4gKi8KKyAgICBkZWJ1ZyhGMTAwLCJjb25iaW4iLCIiLDApOworICAgIGVz Y2NociA9IGVzYzsgICAgICAgICAgICAgICAgICAgICAgIC8qIE1ha2UgdGhpcyBhdmFpbGFibGUg dG8gb3RoZXIgZm5zICovCisgICAgY2t4ZWNoID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAg LyogUHJvZ3JhbSBjYW4gZWNobyBjaGFyYWN0ZXJzICovCisjaWZkZWYgYWVnaXMKKyAgICBjb25i dWZuID0gMDsKKyAgICBpZiAoY29uY3JwKSByZXR1cm4od3JpdGUoMSwgIlwwMzVcMDAyIiwgMikp OworICAgIGlmIChjb251aWQgPT0gaW5wdXRfcGFkXyR1aWQpIHsKKwlwYWRfJHJhdyhpb3NfJHN0 ZGluLCBzdCk7CisJcmV0dXJuKDApOworICAgICAgfQorI2VuZGlmIC8qIGFlZ2lzICovCisKKyNp ZmRlZiBDT0hFUkVOVAorI2RlZmluZSBTVk9SUE9TSVgKKyNlbmRpZiAvKiBDT0hFUkVOVCAqLwor CisjaWZkZWYgUGxhbjkKKyAgICByZXR1cm4gcDljb25iaW4oKTsKKyNlbHNlCisjaWZkZWYgU1ZP UlBPU0lYCisjaWZuZGVmIE9YT1MKKyNpZmRlZiBRTlgKKyAgICBjY3Jhdy5jX2xmbGFnICY9IH4o SVNJR3xJQ0FOT058RUNITyk7CisjZWxzZQorI2lmZGVmIENPSEVSRU5UCisgICAgY2NyYXcuY19s ZmxhZyAmPSB+KElTSUd8SUNBTk9OfEVDSE8pOworI2Vsc2UKKyAgICBjY3Jhdy5jX2xmbGFnICY9 IH4oSVNJR3xJQ0FOT058RUNIT3xJRVhURU4pOworI2VuZGlmIC8qIENPSEVSRU5UICovCisjZW5k aWYgLyogUU5YICovCisjZWxzZSAvKiBPWE9TICovCisgICAgY2NyYXcuY19sZmxhZyAmPSB+KElT SUd8SUNBTk9OfEVDSE8pOworICAgIGNjcmF3LmNfY2NbVkRJU0NBUkRdID0gY2NyYXcuY19jY1tW TE5FWFRdID0gQ0RJU0FCTEU7CisjZW5kaWYgLyogT1hPUyAqLworICAgIGNjcmF3LmNfaWZsYWcg fD0gSUdOUEFSOworLyoKKyAgTm90ZSB0aGF0IGZvciB0ZXJtaW5hbCBzZXNzaW9ucyB3ZSBkaXNh YmxlIFhvbi9Yb2ZmIGZsb3cgY29udHJvbCB0byBhbGxvdworICB0aGUgcGFzc2FnZSBeUSBhbmQg XlMgYXMgZGF0YSBjaGFyYWN0ZXJzIGZvciBFTUFDUywgYW5kIHRvIGFsbG93IFhNT0RFTQorICB0 cmFuc2ZlcnMgdG8gd29yayB3aGVuIEMtS2VybWl0IGlzIGluIHRoZSBtaWRkbGUsIGV0Yy4gIEhh cmR3YXJlIGZsb3cKKyAgY29udHJvbCwgaWYgaW4gdXNlLCBpcyBub3QgYWZmZWN0ZWQuCisqLwor I2lmZGVmIEFUVFNWCisjaWZkZWYgQlNENDQKKyAgICBjY3Jhdy5jX2lmbGFnICY9IH4oSUdOQlJL fElOTENSfElHTkNSfElDUk5MfElYT058SVhBTll8SVhPRkYKKyAgICAgICAgICAgICAgICAgICAg ICAgIHxJTlBDS3xJU1RSSVApOworI2Vsc2UKKyAgICBjY3Jhdy5jX2lmbGFnICY9IH4oSUdOQlJL fElOTENSfElHTkNSfElDUk5MfElVQ0xDfElYT058SVhBTll8SVhPRkYKKyAgICAgICAgICAgICAg ICAgICAgICAgIHxJTlBDS3xJU1RSSVApOworI2VuZGlmIC8qIEJTRDQ0ICovCisjZWxzZSAvKiBQ T1NJWCAqLworICAgIGNjcmF3LmNfaWZsYWcgJj0gfihJR05CUkt8SU5MQ1J8SUdOQ1J8SUNSTkx8 SVhPTnxJWE9GRnxJTlBDS3xJU1RSSVApOworI2VuZGlmIC8qIEFUVFNWICovCisgICAgY2NyYXcu Y19vZmxhZyAmPSB+T1BPU1Q7CisjaWZkZWYgQ09NTUVOVAorLyoKKyAgV0hBVCBUSEUgSEVDSyBX QVMgVEhJUyBGT1I/CisgIFRoZSBCOTYwMCBzZXR0aW5nIChvYnZpb3VzbHkpIHByZXZlbnRzIENP Tk5FQ1QgZnJvbSB3b3JraW5nIGF0IGFueQorICBzcGVlZCBvdGhlciB0aGFuIDk2MDAgd2hlbiB5 b3UgYXJlIGxvZ2dlZCBpbiB0byB0aGUgNzMwMCBvbiBhIHNlcmlhbAorICBsaW5lLiAgTWF5YmUg c29tZSBvZiB0aGUgb3RoZXIgZmxhZ3MgYXJlIG5lY2Vzc2FyeSAtLSBpZiBzbywgcHV0IGJhY2sK KyAgdGhlIG9uZXMgdGhhdCBhcmUgbmVlZGVkLiAgVGhpcyBjb2RlIGlzIHN1cHBvc2VkIHRvIHdv cmsgdGhlIHNhbWUsIG5vCisgIG1hdHRlciB3aGV0aGVyIHlvdSBhcmUgbG9nZ2VkIGluIHRvIHRo ZSA3MzAwIG9uIHRoZSByZWFsIGNvbnNvbGUgZGV2aWNlLAorICBvciB0aHJvdWdoIGEgc2VyaWFs IHBvcnQuCisqLworI2lmZGVmIEFUVDczMDAKKyAgICBjY3Jhdy5jX2NmbGFnID0gQ0xPQ0FMIHwg Qjk2MDAgfCBDUzggfCBDUkVBRCB8IEhVUENMOworI2VuZGlmIC8qIEFUVDczMDAgKi8KKyNlbmRp ZiAvKiBDT01NRU5UICovCisKKy8qKiogS2VybWl0IHVzZWQgdG8gcHV0IHRoZSBjb25zb2xlIGlu IDgtYml0IHJhdyBtb2RlLCBidXQgc29tZSB1c2VycyBoYXZlCisgKioqIHBvaW50ZWQgb3V0IHRo YXQgdGhpcyBzaG91bGQgbm90IGJlIGRvbmUsIHNpbmNlIHNvbWUgc2l0ZXMgYWN0dWFsbHkKKyAq KiogdXNlIHRlcm1pbmFscyB3aXRoIHBhcml0eSBzZXR0aW5ncyBvbiB0aGVpciBVbml4IHN5c3Rl bXMsIGFuZCBpZiB3ZQorICoqKiBvdmVycmlkZSB0aGUgY3VycmVudCBzZXR0aW5ncyBhbmQgc3Rv cCBkb2luZyBwYXJpdHksIHRoZW4gdGhlaXIgdGVybWluYWxzCisgKioqIHdpbGwgZGlzcGxheSBi bG90Y2hlcyBmb3IgY2hhcmFjdGVycyB3aG9zZSBwYXJpdHkgaXMgd3JvbmcuICBUaGVyZWZvcmUs CisgKioqIHRoZSBmb2xsb3dpbmcgdHdvIGxpbmVzIGFyZSBjb21tZW50ZWQgb3V0IChMYXJyeSBB ZnJpbiwgQ2xlbXNvbiBVKToKKyAqKioKKyAqKiogICBjY3Jhdy5jX2NmbGFnICY9IH4oUEFSRU5C fENTSVpFKTsKKyAqKiogICBjY3Jhdy5jX2NmbGFnIHw9IChDUzh8Q1JFQUQpOworICoqKgorICoq KiBTeXMgSUlJL1Ygc2l0ZXMgdGhhdCBoYXZlIHRyb3VibGUgd2l0aCB0aGlzIGNhbiByZXN0b3Jl IHRoZXNlIGxpbmVzLgorICoqKi8KKyNpZm5kZWYgVklOVFIKKyAgICBjY3Jhdy5jX2NjWzBdID0g MDAzOwkJLyogSW50ZXJydXB0IGNoYXIgaXMgQ3RybC1DICovCisjZWxzZQorICAgIGNjcmF3LmNf Y2NbVklOVFJdID0gMDAzOworI2VuZGlmIC8qIFZJTlRSICovCisjaWZuZGVmIFZRVUlUCisgICAg Y2NyYXcuY19jY1sxXSA9IGVzY2NocjsJCS8qIEVzY2FwZSBkdXJpbmcgcGFja2V0IG1vZGUgKi8K KyNlbHNlCisgICAgY2NyYXcuY19jY1tWUVVJVF0gPSBlc2NjaHI7CisjZW5kaWYgLyogVlFVSVQg Ki8KKyNpZm5kZWYgVkVPRgorICAgIGNjcmF3LmNfY2NbNF0gPSAxOworI2Vsc2UKKyNpZm5kZWYg T1hPUworI2lmZGVmIFZNSU4KKyAgICBjY3Jhdy5jX2NjW1ZNSU5dID0gMTsKKyNlbmRpZiAvKiBW TUlOICovCisjZWxzZSAvKiBPWE9TICovCisgICAgY2NyYXcuY19taW4gPSAxOworI2VuZGlmIC8q IE9YT1MgKi8KKyNlbmRpZiAvKiBWRU9GICovCisKKyNpZmRlZiBaSUxPRworICAgIGNjcmF3LmNf Y2NbNV0gPSAwOworI2Vsc2UKKyNpZm5kZWYgVkVPTAorICAgIGNjcmF3LmNfY2NbNV0gPSAxOwor I2Vsc2UKKyNpZm5kZWYgT1hPUworI2lmZGVmIFZUSU1FCisgICAgY2NyYXcuY19jY1tWVElNRV0g PSAxOworI2VuZGlmIC8qIFZUSU1FICovCisjZWxzZSAvKiBPWE9TICovCisgICAgY2NyYXcuY190 aW1lID0gMTsKKyNlbmRpZiAvKiBPWE9TICovCisjZW5kaWYgLyogVkVPTCAqLworI2VuZGlmIC8q IFpJTE9HICovCisKKyNpZmRlZiBCU0Q0NE9SUE9TSVgKKyAgICB4ID0gdGNzZXRhdHRyKDAsVENT QURSQUlOLCZjY3Jhdyk7CS8qIFNldCBuZXcgbW9kZXMuICovCisjZWxzZQorICAgIHggPSBpb2N0 bCgwLFRDU0VUQVcsJmNjcmF3KTsKKyNlbmRpZiAvKiBCU0Q0NE9SUE9TSVggKi8KKyNlbHNlIC8q IEJlcmtlbGV5LCBldGMuICovCisgICAgeCA9IGNvbmNoaygpOwkJCS8qIEJlY2F1c2Ugc3R0eSgp IGlzIGRlc3RydWN0aXZlICovCisgICAgaWYgKHggPiAwKQorICAgICAgY29uZ2V0YnVmKHgpOwor ICAgIGNjcmF3LnNnX2ZsYWdzIHw9IChSQVd8VEFOREVNKTsgICAgIC8qIFNldCByYXdtb2RlLCBY T04vWE9GRiAoaGEpICovCisgICAgY2NyYXcuc2dfZmxhZ3MgJj0gfihFQ0hPfENSTU9EKTsgICAg LyogU2V0IGNoYXIgd2FrZXVwLCBubyBlY2hvICovCisjaWZkZWYgQkVMTFYxMAorICAgIHggPSBp b2N0bCgwLFRJT0NTRVRQLCZjY3Jhdyk7CisjZWxzZQorICAgIHggPSBzdHR5KDAsJmNjcmF3KTsK KyNlbmRpZiAvKiBCRUxMVjEwICovCisjZW5kaWYgLyogU1ZPUlBPU0lYICovCisjZW5kaWYgLyog UGxhbjkgKi8KKworICAgIGlmICh4ID4gLTEpCisgICAgICBjb25zdGF0ZSA9IENPTl9CSU47CisK KyAgICBkZWJ1ZyhGMTAxLCJjb25iaW4gcmV0dXJucyIsIiIseCk7CisgICAgcmV0dXJuKHgpOwor CisjaWZkZWYgQ09IRVJFTlQKKyN1bmRlZiBTVk9SUE9TSVgKKyNlbmRpZiAvKiBDT0hFUkVOVCAq LworCit9CisKKworLyogIEMgTyBOIFIgRSBTICAtLSAgUmVzdG9yZSB0aGUgY29uc29sZSB0ZXJt aW5hbCAgKi8KKworaW50Citjb25yZXMoKSB7CisgICAgaW50IHg7CisgICAgZGVidWcoRjEwMSwi Y29ucmVzIGNnbWYiLCIiLGNnbWYpOworICAgIGRlYnVnKEYxMDEsImNvbnJlcyBjb25zdGF0ZSIs IiIsY29uc3RhdGUpOworCisgICAgaWYgKGNnbWYgPCAxKQkJCS8qIERvIG5vdGhpbmcgaWYgbW9k ZXMgdW5jaGFuZ2VkICovCisgICAgICByZXR1cm4oMCk7CisgICAgaWYgKGNvbnN0YXRlID09IENP Tl9SRVMpCisgICAgICByZXR1cm4oMCk7CisKKyAgICBpZiAoIWlzYXR0eSgwKSkgcmV0dXJuKDAp OyAgICAgICAgICAvKiBvbmx5IGZvciByZWFsIHR0eXMgKi8KKyAgICBkZWJ1ZyhGMTAwLCJjb25y ZXMgaXNhdHR5IG9rIiwiIiwwKTsKKyAgICBja3hlY2ggPSAwOyAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBTeXN0ZW0gc2hvdWxkIGVjaG8gY2hhcnMgKi8KKworI2lmZGVmIGFlZ2lzCisgICAg Y29uYnVmbiA9IDA7CisgICAgaWYgKGNvbmNycCkgcmV0dXJuKHdyaXRlKDEsICJcMDM1XDAwMSIs IDIpKTsKKyAgICBpZiAoY29udWlkID09IGlucHV0X3BhZF8kdWlkKSB7CisJcGFkXyRjb29rZWQo aW9zXyRzdGRpbiwgc3QpOworCWNvbnN0YXRlID0gQ09OX1JFUzsKKwlyZXR1cm4oMCk7CisgICAg fQorI2VuZGlmIC8qIGFlZ2lzICovCisKKyNpZmRlZiBQbGFuOQorICAgIHA5Y29ucmVzKCk7Cisj ZWxzZQorI2lmZGVmIEJTRDQ0T1JQT1NJWAorICAgIGRlYnVnKEYxMDAsImNvbnJlcyByZXN0b3Jp bmcgdGNzZXRhdHRyIiwiIiwwKTsKKyAgICB4ID0gdGNzZXRhdHRyKDAsVENTQURSQUlOLCZjY29s ZCk7CisjZWxzZQorI2lmZGVmIEFUVFNWCisgICAgZGVidWcoRjEwMCwiY29ucmVzIHJlc3Rvcmlu ZyBpb2N0bCIsIiIsMCk7CisgICAgeCA9IGlvY3RsKDAsVENTRVRBVywmY2NvbGQpOworI2Vsc2Ug LyogQlNELCBWNywgYW5kIGZyaWVuZHMgKi8KKyNpZmRlZiBzb255X25ld3MJCQkvKiBTb255IE5F V1MgKi8KKyAgICBpZiAoa21fY29uICE9IC0xKQorICAgICAgaW9jdGwoMCxUSU9DS1NFVCwma21f Y29uKTsJLyogUmVzdG9yZSBjb25zb2xlIEthbmppIG1vZGUgKi8KKyNlbmRpZiAvKiBzb255X25l d3MgKi8KKyAgICBtc2xlZXAoMTAwKTsKKyAgICBkZWJ1ZyhGMTAwLCJjb25yZXMgcmVzdG9yaW5n IHN0dHkiLCIiLDApOworICAgIHggPSBjb25jaGsoKTsJCQkvKiBCZWNhdXNlIHN0dHkoKSBpcyBk ZXN0cnVjdGl2ZSAqLworICAgIGlmICh4ID4gMCkKKyAgICAgIGNvbmdldGJ1Zih4KTsKKyNpZmRl ZiBCRUxMVjEwCisgICAgeCA9IGlvY3RsKDAsVElPQ1NFVFAsJmNjb2xkKTsKKyNlbHNlCisgICAg eCA9IHN0dHkoMCwmY2NvbGQpOworI2VuZGlmIC8qIEJFTExWMTAgKi8KKyNlbmRpZiAvKiBBVFRT ViAqLworI2VuZGlmIC8qIEJTRDQ0T1JQT1NJWCAqLworI2VuZGlmIC8qIFBsYW45ICovCisgICAg aWYgKHggPiAtMSkKKyAgICAgIGNvbnN0YXRlID0gQ09OX1JFUzsKKworICAgIGRlYnVnKEYxMDEs ImNvbnJlcyByZXR1cm5zIiwiIix4KTsKKyAgICByZXR1cm4oeCk7Cit9CisKKy8qICBDIE8gTiBP IEMgIC0tICBPdXRwdXQgYSBjaGFyYWN0ZXIgdG8gdGhlIGNvbnNvbGUgdGVybWluYWwgICovCisK K2ludAorI2lmZGVmIENLX0FOU0lDCitjb25vYyhjaGFyIGMpCisjZWxzZQorY29ub2MoYykgY2hh ciBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCisvKiBjb25vYyAqLyB7CisKKyNpZmRlZiBJS1NE CisgICAgaWYgKGluc2VydmVyICYmICFsb2NhbCkKKyAgICAgIHJldHVybih0dG9jKGMpKTsKKwor I2lmZGVmIENLX0VOQ1JZUFRJT04KKyAgICBpZiAoaW5zZXJ2ZXIgJiYgVEVMT1BUX01FKFRFTE9Q VF9FTkNSWVBUSU9OKSkKKyAgICAgICAgY2tfdG5fZW5jcnlwdCgmYywxKTsKKyNlbmRpZiAvKiBD S19FTkNSWVBUSU9OICovCisjZW5kaWYgLyogSUtTRCAqLworCisjaWZkZWYgUGxhbjkKKyAgICBy ZXR1cm4gY29ud3JpdGUoJmMsMSk7CisjZWxzZQorICAgIHJldHVybih3cml0ZSgxLCZjLDEpKTsK KyNlbmRpZiAvKiBQbGFuOSAqLworfQorCisvKiAgQyBPIE4gWCBPICAtLSAgV3JpdGUgeCBjaGFy YWN0ZXJzIHRvIHRoZSBjb25zb2xlIHRlcm1pbmFsICAqLworCitpbnQKK2NvbnhvKHgscykgaW50 IHg7IGNoYXIgKnM7IHsKKworI2lmZGVmIElLU0QKKyAgICBpZiAoaW5zZXJ2ZXIgJiYgIWxvY2Fs KQorICAgICAgcmV0dXJuKHR0b2woKENIQVIgKilzLHgpKTsKKworI2lmZGVmIENLX0VOQ1JZUFRJ T04KKyAgICBpZiAoaW5zZXJ2ZXIgJiYgVEVMT1BUX01FKFRFTE9QVF9FTkNSWVBUSU9OKSkKKyAg ICAgICAgY2tfdG5fZW5jcnlwdChzLHgpOworI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KKyNl bmRpZiAvKiBJS1NEICovCisKKyNpZmRlZiBQbGFuOQorICAgIHJldHVybihjb253cml0ZShzLHgp KTsKKyNlbHNlCisgICAgcmV0dXJuKHdyaXRlKDEscyx4KSk7CisjZW5kaWYgLyogUGxhbjkgKi8K K30KKworLyogIEMgTyBOIE8gTCAgLS0gIFdyaXRlIGEgbGluZSB0byB0aGUgY29uc29sZSB0ZXJt aW5hbCAgKi8KKworaW50Citjb25vbChzKSBjaGFyICpzOyB7CisgICAgaW50IGxlbjsKKyAgICBp ZiAoIXMpIHMgPSAiIjsJCQkvKiBBbHdheXMgZG8gdGhpcyEgKi8KKyAgICBsZW4gPSBzdHJsZW4o cyk7CisgICAgaWYgKGxlbiA9PSAwKQorICAgICAgcmV0dXJuKDApOworCisjaWZkZWYgSUtTRAor ICAgIGlmIChpbnNlcnZlciAmJiAhbG9jYWwpCisgICAgICByZXR1cm4odHRvbCgoQ0hBUiAqKXMs bGVuKSk7CisKKyNpZmRlZiBDS19FTkNSWVBUSU9OCisgICAgaWYgKGluc2VydmVyICYmIFRFTE9Q VF9NRShURUxPUFRfRU5DUllQVElPTikpIHsKKwlpZiAobnhwYWNrZXQgPCBsZW4pIHsKKwkgICAg aWYgKHhwYWNrZXQpIHsKKwkJZnJlZSh4cGFja2V0KTsKKwkJeHBhY2tldCA9IE5VTEw7CisJCW54 cGFja2V0ID0gMDsKKwkgICAgfQorCSAgICBsZW4gPSBsZW4gPiAxMDI0MCA/IGxlbiA6IDEwMjQw OworCSAgICB4cGFja2V0ID0gKENIQVIgKiltYWxsb2MobGVuKTsKKwkgICAgaWYgKCF4cGFja2V0 KSB7CisJCWZwcmludGYoc3RkZXJyLCJ0dG9sIG1hbGxvYyBmYWlsdXJlXG4iKTsKKwkJcmV0dXJu KC0xKTsKKwkgICAgfSBlbHNlCisJICAgICAgbnhwYWNrZXQgPSBsZW47CisJfQorCW1lbWNweSh4 cGFja2V0LHMsbGVuKTsKKwlzID0gKGNoYXIgKil4cGFja2V0OworCWNrX3RuX2VuY3J5cHQocyxs ZW4pOworICAgIH0KKyNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCisjZW5kaWYgLyogSUtTRCAq LworCisjaWZkZWYgUGxhbjkKKyAgICByZXR1cm4oY29ud3JpdGUocyxsZW4pKTsKKyNlbHNlCisg ICAgcmV0dXJuKHdyaXRlKDEscyxsZW4pKTsKKyNlbmRpZiAvKiBQbGFuOSAqLworfQorCisvKiAg QyBPIE4gTyBMIEEgIC0tICBXcml0ZSBhbiBhcnJheSBvZiBsaW5lcyB0byB0aGUgY29uc29sZSB0 ZXJtaW5hbCAqLworCitpbnQKK2Nvbm9sYShzKSBjaGFyICpzW107IHsKKyAgICBjaGFyICogcDsK KyAgICBpbnQgaSwgeDsKKworCisgICAgaWYgKCFzKSByZXR1cm4oMCk7CisgICAgZm9yIChpID0g MDsgOyBpKyspIHsKKwlwID0gc1tpXTsKKwlpZiAoIXApIHAgPSAiIjsJCQkvKiBMZXQncyBub3Qg ZHVtcCBjb3JlIHNoYWxsIHdlPyAqLworCWlmICghKnApCisJICBicmVhazsKKyNpZmRlZiBJS1NE CisJaWYgKGluc2VydmVyICYmICFsb2NhbCkKKwkgIHggPSB0dG9sKChDSEFSICopcCwoaW50KXN0 cmxlbihwKSk7CisJZWxzZQorI2VuZGlmIC8qIElLU0QgKi8KKwkgIHggPSBjb25vbChwKTsKKwlp ZiAoeCA8IDApCisJICByZXR1cm4oLTEpOworICAgIH0KKyAgICByZXR1cm4oMCk7Cit9CisKKy8q ICBDIE8gTiBPIEwgTCAgLS0gIE91dHB1dCBhIHN0cmluZyBmb2xsb3dlZCBieSBDUkxGICAqLwor CitpbnQKK2Nvbm9sbChzKSBjaGFyICpzOyB7CisgICAgQ0hBUiBidWZbM107CisgICAgYnVmWzBd ID0gJ1xyJzsKKyAgICBidWZbMV0gPSAnXG4nOworICAgIGJ1ZlsyXSA9ICdcMCc7CisgICAgaWYg KCFzKSBzID0gIiI7CisKKyNpZmRlZiBJS1NECisgICAgaWYgKGluc2VydmVyICYmICFsb2NhbCkg eworCWlmICgqcykgdHRvbCgoQ0hBUiAqKXMsKGludClzdHJsZW4ocykpOworCXJldHVybih0dG9s KGJ1ZiwyKSk7CisgICAgfQorI2VuZGlmIC8qIElLU0QgKi8KKworICAgIGlmICgqcykgY29ub2wo cyk7CisjaWZkZWYgSUtTRAorI2lmZGVmIENLX0VOQ1JZUFRJT04KKyAgICBpZiAoaW5zZXJ2ZXIg JiYgVEVMT1BUX01FKFRFTE9QVF9FTkNSWVBUSU9OKSkKKyAgICAgIGNrX3RuX2VuY3J5cHQoKGNo YXIgKilidWYsMik7CisjZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLworI2VuZGlmIC8qIElLU0Qg Ki8KKworI2lmZGVmIFBsYW45CisgICAgcmV0dXJuKGNvbndyaXRlKGJ1ZiwgMikpOworI2Vsc2UK KyAgICByZXR1cm4od3JpdGUoMSxidWYsMikpOworI2VuZGlmIC8qIFBsYW45ICovCit9CisKKy8q ICBDIE8gTiBDIEggSyAgLS0gIFJldHVybiBob3cgbWFueSBjaGFyYWN0ZXJzIGF2YWlsYWJsZSBh dCBjb25zb2xlICAqLworLyoKKyAgV2UgY291bGQgYWxzbyB1c2Ugc2VsZWN0KCkgaGVyZSB0byBj b3ZlciBhIGZldyBtb3JlIHN5c3RlbXMgdGhhdCBhcmUgbm90CisgIGNvdmVyZWQgYnkgYW55IG9m IHRoZSBmb2xsb3dpbmcsIGUuZy4gSFAtVVggOS4weCBvbiB0aGUgbW9kZWwgODAwLgorKi8KK2lu dAorY29uY2hrKCkgeworICAgIHN0YXRpYyBpbnQgY29udHlwID0gMDsJCS8qICsxIGZvciBpc2F0 dHksIC0xIG90aGVyd2lzZSAqLworCisgICAgaWYgKGNvbnR5cCA9PSAwKQkJCS8qIFRoaXMgcHJl dmVudHMgdW5uZWNlc3NhcnkgKi8KKyAgICAgIGNvbnR5cCA9IChpc2F0dHkoMCkgPyAxIDogLTEp OwkvKiBkdXBsaWNhdGVkIGNhbGxzIHRvIGlzYXR0eSgpICovCisgICAgZGVidWcoRjEwMSwiY29u Y2hrIGNvbnR5cCIsIiIsY29udHlwKTsKKyAgICBpZiAoYmFja2dyZCB8fCAoY29udHlwIDwgMCkp CisgICAgICByZXR1cm4oMCk7CisKKyNpZmRlZiBhZWdpcworICAgIGlmIChjb25idWZuID4gMCkg cmV0dXJuKGNvbmJ1Zm4pOyAgIC8qIHVzZSBvbGQgY291bnQgaWYgbm9uemVybyAqLworCisgICAg LyogcmVhZCBpbiBtb3JlIGNoYXJhY3RlcnMgKi8KKyAgICBjb25idWZuID0gaW9zXyRnZXQoaW9z XyRzdGRpbiwKKyAgICAgICAgICAgICAgaW9zXyRjb25kX29wdCwgY29uYnVmLCAobG9uZylzaXpl b2YoY29uYnVmKSwgc3QpOworICAgIGlmIChzdC5hbGwgIT0gc3RhdHVzXyRvaykgY29uYnVmbiA9 IDA7CisgICAgY29uYnVmcCA9IGNvbmJ1ZjsKKyAgICByZXR1cm4oY29uYnVmbik7CisjZWxzZQor I2lmZGVmIElLU0QKKyAgICBpZiAoaW5zZXJ2ZXIgJiYgIWxvY2FsKQorICAgICAgcmV0dXJuKGlu X2NoaygxLHR0eWZkKSk7CisgICAgZWxzZQorI2VuZGlmIC8qIElLU0QgKi8KKyAgICAgIHJldHVy bihpbl9jaGsoMCwwKSk7CisjZW5kaWYgLyogYWVnaXMgKi8KK30KKworLyogIEMgTyBOIEkgTiBD ICAtLSAgR2V0IGEgY2hhcmFjdGVyIGZyb20gdGhlIGNvbnNvbGUgICovCisvKgorICBDYWxsIHdp dGggdGltbyA+IDAgdG8gZG8gYSB0aW1lZCByZWFkLCB0aW1vID09IDAgdG8gZG8gYW4gdW50aW1l ZCBibG9ja2luZworICByZWFkLiAgVXBvbiBzdWNjZXNzLCByZXR1cm5zIHRoZSBjaGFyYWN0ZXIu ICBVcG9uIGZhaWx1cmUsIHJldHVybnMgLTEuCisgIEEgdGltZWQgcmVhZCB0aGF0IGRvZXMgbm90 IGNvbXBsZXRlIHdpdGhpbiB0aGUgdGltZW91dCBwZXJpb2QgcmV0dXJucyAtMi4KKyovCitpbnQK K2NvbmluYyh0aW1vKSBpbnQgdGltbzsgeworICAgIGludCBuID0gMDsgQ0hBUiBjaDsKKyAgICBp bnQgeHg7CisKKyAgICBpZiAoY29uYnVmbiA+IDApIHsJCQkvKiBJZiBzb21ldGhpbmcgYWxyZWFk eSBidWZmZXJlZCAqLworCS0tY29uYnVmbjsKKwlyZXR1cm4oKHVuc2lnbmVkKSgqY29uYnVmcCsr ICYgMHhmZikpOworICAgIH0KKworICAgIGVycm5vID0gMDsJCQkJLyogQ2xlYXIgdGhpcyAqLwor I2lmZGVmIElLU0QKKyAgICBpZiAoaW5zZXJ2ZXIgJiYgIWxvY2FsKSB7CisJeHggPSB0dGluYyh0 aW1vKTsKKwlpZiAoeHggPCAwKQorCSAgcmV0dXJuKHR0aW5jdGltbyA/IC0yIDogLTEpOworCWVs c2UKKwkgIHJldHVybih4eCk7CisgICAgfQorI2VuZGlmIC8qIElLU0QgKi8KKworI2lmZGVmIGFl Z2lzCQkJCS8qIEFwb2xsbyBBZWdpcyBvbmx5Li4uICovCisgICAgZGVidWcoRjEwMSwiY29uaW5j IHRpbW8iLCIiLHRpbW8pOworICAgIGZmbHVzaChzdGRvdXQpOworICAgIGlmIChjb25jaGsoKSA+ IDApIHsKKwktLWNvbmJ1Zm47CisJcmV0dXJuKCh1bnNpZ25lZCkoKmNvbmJ1ZnArKyAmIDB4ZmYp KTsKKyAgICB9CisjZW5kaWYgLyogYWVnaXMgKi8KKworI2lmZGVmIFRUTEVCVUYKKyAgICBpZiAo CisjaWZkZWYgSUtTRAorCWluc2VydmVyICYmCisjZW5kaWYgLyogSUtTRCAqLworCSF4bG9jYWwK KwkpIHsKKwlpZiAodHRwdXNoID49IDApIHsKKwkgICAgZGVidWcoRjExMSwidHRpbmMiLCJ0dHB1 c2giLHR0cHVzaCk7CisJICAgIGNoID0gdHRwdXNoOworCSAgICB0dHB1c2ggPSAtMTsKKwkgICAg cmV0dXJuKGNoKTsKKwl9CisJaWYgKGxlX2RhdGEpIHsKKwkgICAgaWYgKGxlX2dldGNoYXIoJmNo KSA+IDApIHsKKwkJZGVidWcoRjExMSwidHRpbmMgTG9jYWxFY2hvSW5CdWYiLCJjaCIsY2gpOwor CQlyZXR1cm4oY2gpOworCSAgICB9CisJfQorICAgIH0KKyNlbmRpZiAvKiBUVExFQlVGICovCisK KyAgICBpZiAodGltbyA8PSAwKSB7CQkJLyogVW50aW1lZCwgYmxvY2tpbmcgcmVhZC4gKi8KKwl3 aGlsZSAoMSkgewkJCS8qIEtlZXAgdHJ5aW5nIHRpbGwgd2UgZ2V0IG9uZS4gKi8KKwkgICAgbiA9 IHJlYWQoMCwgJmNoLCAxKTsJLyogUmVhZCBhIGNoYXJhY3Rlci4gKi8KKwkgICAgaWYgKG4gPT0g MCkgY29udGludWU7CS8qIFNob3VsZG4ndCBoYXBwZW4uICovCisJICAgIGlmIChuID4gMCkgewkJ LyogSWYgcmVhZCB3YXMgc3VjY2Vzc2Z1bCwgKi8KKyNpZmRlZiBJS1NECisjaWZkZWYgQ0tfRU5D UllQVElPTgorICAgICAgICAgICAgICAgIGRlYnVnKEYxMDAsImNvbmluYyBkZWNyeXB0IDEiLCIi LDApOworICAgICAgICAgICAgICAgIGlmIChpbnNlcnZlciAmJiAhbG9jYWwgJiYgVEVMT1BUX1Uo VEVMT1BUX0VOQ1JZUFRJT04pKQorCQkgIGNrX3RuX2RlY3J5cHQoKGNoYXIgKikmY2gsMSk7Cisj ZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLworI2VuZGlmIC8qIElLU0QgKi8KKwkJcmV0dXJuKCh1 bnNpZ25lZCkoY2ggJiAweGZmKSk7IC8qIHJldHVybiB0aGUgY2hhcmFjdGVyLiAqLworICAgICAg ICAgICAgfQorCisvKiBDb21lIGhlcmUgaWYgcmVhZCgpIHJldHVybmVkIGFuIGVycm9yLiAqLwor CisJICAgIGRlYnVnKEYxMDEsICJjb25pbmMoMCkgZXJybm8iLCIiLGVycm5vKTsgLyogTG9nIHRo ZSBlcnJvci4gKi8KKyNpZm5kZWYgT1hPUworI2lmZGVmIFNWT1JQT1NJWAorI2lmZGVmIENJRSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ0lFIFJlZ3VsdXMgaGFzIG5vIEVJTlRSIHN5 bWJvbD8gKi8KKyNpZm5kZWYgRUlOVFIKKyNkZWZpbmUgRUlOVFIgNAorI2VuZGlmIC8qIEVJTlRS ICovCisjZW5kaWYgLyogQ0lFICovCisvKgorICBUaGlzIHJvdXRpbmUgaXMgdXNlZCBmb3Igc2V2 ZXJhbCBkaWZmZXJlbnQgcHVycG9zZXMuICBJbiBDT05ORUNUIG1vZGUsIGl0IGlzCisgIHVzZWQg dG8gZG8gYW4gdW50aW1lZCwgYmxvY2tpbmcgcmVhZCBmcm9tIHRoZSBrZXlib2FyZCBpbiB0aGUg bG93ZXIgQ09OTkVDVAorICBmb3JrLiAgRHVyaW5nIGxvY2FsLW1vZGUgZmlsZSB0cmFuc2Zlciwg aXQgcmVhZHMgYSBjaGFyYWN0ZXIgZnJvbSB0aGUKKyAgY29uc29sZSB0byBpbnRlcnJ1cHQgdGhl IGZpbGUgdHJhbnNmZXIgKGxpa2UgQSBmb3IgYSBzdGF0dXMgcmVwb3J0LCBYIHRvCisgIGNhbmNl bCBhIGZpbGUsIGV0YykuICBPYnZpb3VzbHksIHdlIGRvbid0IHdhbnQgdGhlIHJlYWRzIGluIHRo ZSBsYXR0ZXIgY2FzZQorICB0byBiZSBibG9ja2luZywgb3IgdGhlIGZpbGUgdHJhbnNmZXIgd291 bGQgc3RvcCB1bnRpbCB0aGUgdXNlciB0eXBlZAorICBzb21ldGhpbmcuICBVbmZvcnR1bmF0ZWx5 LCBTeXN0ZW0gViBkb2VzIG5vdCBhbGxvdyB0aGUgY29uc29sZSBkZXZpY2UgaW5wdXQKKyAgYnVm ZmVyIHRvIGJlIHNhbXBsZWQgbm9uZGVzdHJ1Y3RpdmVseSAoZS5nLiBieSBjb25jaGsoKSksIHNv IGEga2x1ZGdlIGlzCisgIHVzZWQgaW5zdGVhZC4gIER1cmluZyBsb2NhbC1tb2RlIGZpbGUgdHJh bnNmZXIsIHRoZSBTSUdRVUlUIHNpZ25hbCBpcyBhcm1lZAorICBhbmQgdHJhcHBlZCBieSBlc2N0 cnAoKSwgYW5kIHRoaXMgcm91dGluZSBwcmV0ZW5kcyB0byBoYXZlIHJlYWQgdGhlIHF1aXQKKyAg Y2hhcmFjdGVyIGZyb20gdGhlIGtleWJvYXJkIG5vcm1hbGx5LiAgQnV0LCBrbHVkZ2Ugb3Igbm8g a2x1ZGdlLCB0aGUgcmVhZCgpCisgIGlzc3VlZCBieSB0aGlzIGNvbW1hbmQsIHVuZGVyIFN5c3Rl bSBWIG9ubHksIGNhbiBmYWlsIGlmIGEgc2lnbmFsIC0tIEFOWQorICBzaWduYWwgLS0gaXMgY2F1 Z2h0IHdoaWxlIHRoZSByZWFkIGlzIHBlbmRpbmcuICBUaGlzIGNhbiBvY2N1ciBub3Qgb25seSB3 aGVuCisgIHRoZSB1c2VyIHR5cGVzIHRoZSBxdWl0IGNoYXJhY3RlciwgYnV0IGFsc28gZHVyaW5n IHRlbG5ldCBuZWdvdGlhdGlvbnMsIHdoZW4KKyAgdGhlIGxvd2VyIENPTk5FQ1QgZm9yayBzaWdu YWxzIHRoZSB1cHBlciBvbmUgYWJvdXQgYW4gZWNob2luZyBtb2RlIGNoYW5nZS4KKyAgV2hlbiB0 aGlzIGhhcHBlbnMsIHdlIGhhdmUgdG8gcG9zdCB0aGUgcmVhZCgpIGFnYWluLiAgVGhpcyBpcyBh cHBhcmVudGx5IG5vdAorICBhIHByb2JsZW0gaW4gQlNELWJhc2VkIFVOSVggdmVyc2lvbnMuCisq LworCSAgICBpZiAoZXJybm8gPT0gRUlOVFIpCQkvKiBSZWFkIGludGVycnVwdGVkLiAqLworCSAg ICAgIGlmIChjb25lc2MpICB7CQkvKiBJZiBieSBTSUdRVUlULCAqLworIAkJIGNvbmVzYyA9IDA7 CQkvKiB0aGUgY29uZXNjIHZhcmlhYmxlIGlzIHNldCwgKi8KKyAJCSByZXR1cm4oZXNjY2hyKTsJ Lyogc28gcmV0dXJuIHRoZSBlc2NhcGUgY2hhcmFjdGVyLiAqLworCSAgICAgfSBlbHNlIGNvbnRp bnVlOwkJLyogQnkgb3RoZXIgc2lnbmFsLCB0cnkgYWdhaW4uICovCisjZWxzZQorLyoKKyAgVGhp cyBtaWdodCBiZSBkYW5nZXJvdXMsIGJ1dCBsZXQncyBkbyB0aGlzIG9uIG5vbi1TeXN0ZW0gViB2 ZXJzaW9ucyB0b28sCisgIHNpbmNlIGF0IGxlYXN0IG9uZSBTdW5PUyA0LjEuMiB1c2VyIGNvbXBs YWlucyBvZiBpbW1lZGlhdGUgZGlzY29ubmVjdGlvbnMKKyAgdXBvbiBmaXJzdCBtYWtpbmcgYSBU RUxORVQgY29ubmVjdGlvbi4KKyovCisJICAgIGlmIChlcnJubyA9PSBFSU5UUikJCS8qIFJlYWQg aW50ZXJydXB0ZWQuICovCisJICAgICAgY29udGludWU7CisjZW5kaWYgLyogU1ZPUlBPU0lYICov CisjZWxzZSAvKiBPWE9TICovCisJICAgIGlmIChlcnJubyA9PSBFSU5UUikJCS8qIFJlYWQgaW50 ZXJydXB0ZWQuICovCisJICAgICAgY29udGludWU7CisjZW5kaWYgLyogT1hPUyAqLworCSAgICBy ZXR1cm4oLTEpOwkJCS8qIEVycm9yICovCisJfQorICAgIH0KKyNpZmRlZiBERUJVRworICAgIGlm IChkZWJsb2cgJiYgdGltbyA8PSAwKSB7CisJZGVidWcoRjEwMCwiY29uaW5jIHRpbWVvdXQgbG9n aWMgZXJyb3IiLCIiLDApOworCXRpbW8gPSAxOworICAgIH0KKyNlbmRpZiAvKiBERUJVRyAqLwor CisvKiBUaW1lZCByZWFkLi4uICovCisKKyAgICBzYXZhbCA9IHNpZ25hbChTSUdBTFJNLHRpbWVy aCk7CS8qIFNldCB1cCB0aW1lb3V0IGhhbmRsZXIuICovCisgICAgeHggPSBhbGFybSh0aW1vKTsJ CQkvKiBTZXQgdGhlIGFsYXJtLiAqLworICAgIGRlYnVnKEYxMDEsImNvbmluYyBhbGFybSBzZXQi LCIiLHRpbW8pOworICAgIGlmICgKKyNpZmRlZiBDS19QT1NJWF9TSUcKKwlzaWdzZXRqbXAoc2pi dWYsMSkKKyNlbHNlCisJc2V0am1wKHNqYnVmKQorI2VuZGlmIC8qIENLX1BPU0lYX1NJRyAqLwor CSkJCQkJLyogVGhlIHJlYWQoKSB0aW1lZCBvdXQuICovCisgICAgICBuID0gLTI7CQkJCS8qIENv ZGUgZm9yIHRpbWVvdXQuICovCisgICAgZWxzZQorICAgICAgbiA9IHJlYWQoMCwgJmNoLCAxKTsK KyAgICB0dGltb2ZmKCk7CQkJCS8qIFR1cm4gb2ZmIHRpbWVyICovCisgICAgaWYgKG4gPiAwKSB7 CQkJLyogR290IGNoYXJhY3RlciBPSy4gKi8KKyNpZmRlZiBJS1NECisjaWZkZWYgQ0tfRU5DUllQ VElPTgorICAgICAgICBkZWJ1ZyhGMTAwLCJjb25pbmMgZGVjcnlwdCAyIiwiIiwwKTsKKyAgICAg ICAgaWYgKGluc2VydmVyICYmICFsb2NhbCAmJiBURUxPUFRfVShURUxPUFRfRU5DUllQVElPTikp CisJICBja190bl9kZWNyeXB0KChjaGFyICopJmNoLDEpOworI2VuZGlmIC8qIENLX0VOQ1JZUFRJ T04gKi8KKyNlbmRpZiAvKiBJS1NEICovCisJcmV0dXJuKCh1bnNpZ25lZCkoY2ggJiAweGZmKSk7 CS8qIFJldHVybiBpdC4gKi8KKyAgICB9CisvKgorICByZWFkKCkgcmV0dXJuZWQgYW4gZXJyb3Iu ICBTYW1lIGRlYWwgYXMgYWJvdmUsIGJ1dCB3aXRob3V0IHRoZSBsb29wLgorKi8KKyAgICBkZWJ1 ZyhGMTAxLCAiY29uaW5jKHRpbW8pIG4iLCIiLG4pOworICAgIGRlYnVnKEYxMDEsICJjb25pbmMo dGltbykgZXJybm8iLCIiLGVycm5vKTsKKyNpZm5kZWYgT1hPUworI2lmZGVmIFNWT1JQT1NJWAor ICAgIGlmIChuID09IC0xICYmIGVycm5vID09IEVJTlRSICYmIGNvbmVzYyAhPSAwKSB7CisJY29u ZXNjID0gMDsKKwlyZXR1cm4oZXNjY2hyKTsJCQkvKiBVc2VyIGVudGVyZWQgZXNjYXBlIGNoYXJh Y3Rlci4gKi8KKyAgICB9CisjZW5kaWYgLyogU1ZPUlBPU0lYICovCisgICAgaWYgKG4gPT0gMCAm JiBlcnJubyA+IDApIHsJCS8qIEl0J3MgYW4gZXJyb3IgKi8KKwlyZXR1cm4oLTEpOworICAgIH0K KyNlbmRpZiAvKiAhIE9YT1MgKi8KKyAgICByZXR1cm4obik7Cit9CisKKy8qICBDIE8gTiBHIEsg UyAgLS0gIENvbnNvbGUgR2V0IEtleWJvYXJkIFNjYW5jb2RlICAqLworCisjaWZuZGVmIGNvbmdr cworLyoKKyAgVGhpcyBmdW5jdGlvbiBuZWVkcyB0byBiZSBmaWxsZWQgaW4gd2l0aCB0aGUgdmFy aW91cyBzeXN0ZW0tZGVwZW5kZW50CisgIHN5c3RlbSBjYWxscyB1c2VkIGJ5IFNVTk9TLCBOZVhU IE9TLCBYZW5peCwgQXZpaW9uLCBldGMsIHRvIHJlYWQgYSBmdWxsCisgIGtleWJvYXJkIHNjYW4g Y29kZS4gIFVuZm9ydHVuYXRlbHkgdGhlcmUgYXJlbid0IGFueS4KKyovCitpbnQKK2Nvbmdrcyh0 aW1vKSBpbnQgdGltbzsgeworCisjaWZkZWYgSUtTRAorICAgIGlmIChpbnNlcnZlciAmJiAhbG9j YWwpCisgICAgICByZXR1cm4odHRpbmModGltbykpOworI2VuZGlmIC8qIElLU0QgKi8KKworICAg IHJldHVybihjb25pbmModGltbykpOworfQorI2VuZGlmIC8qIGNvbmdrcyAqLworCisjaWZkZWYg QVRUNzMwMAorCisvKiAgQSBUIFQgRCBJIEEgTCAgLS0gIERpYWwgdXAgdGhlIHJlbW90ZSBzeXN0 ZW0gdXNpbmcgaW50ZXJuYWwgbW9kZW0KKyAqIFB1cnBvc2U6IHRvIG9wZW4gYW5kIGRpYWwgYSBu dW1iZXIgb24gdGhlIGludGVybmFsIG1vZGVtIGF2YWlsYWJsZSBvbiB0aGUKKyAqIEFUVDczMDAg VU5JWCBQQy4gIFdyaXR0ZW4gYnkgSm9lIERvdXBuaWsuIFN1cGVyY2VlZHMgdmVyc2lvbiB3cml0 dGVuIGJ5CisgKiBSaWNoYXJkIEUuIEhpbGwsIERpY2tpbnNvbiwgVFguIHdoaWNoIGVtcGxveWVk IGRpYWwoM2MpLgorICogVXNlcyBpbmZvcm1hdGlvbiBpbiA8c3lzL3Bob25lLmg+IGFuZCBvdXIg c3RhdHVzIGludCBhdHRtb2RlbS4KKyAqLworYXR0ZGlhbCh0dG5hbWUsc3BlZWQsdGVsbmJyKSBj aGFyICp0dG5hbWUsKnRlbG5icjsgbG9uZyBzcGVlZDsgeworICAgIGNoYXIgKnRlbG51bTsKKwor ICAgIGF0dG1vZGVtICY9IH5JU01PREVNOyAgICAgICAgICAgICAgICAgICAgICAgLyogbW9kZW0g bm90IGluIHVzZSB5ZXQgKi8KKyAgICAgICAgICAgICAgICAgICAgLyogRW5zdXJlIE9fTkRFTEFZ IGlzIHNldCwgZWxzZSBpL28gdHJhZmZpYyBoYW5ncyAqLworICAgICAgICAgICAgICAgICAgICAv KiBXZSB0dXJuIHRoaXMgZmxhZyBvZmYgb25jZSB0aGUgZGlhbCBpcyBjb21wbGV0ZSAqLworICAg IGZjbnRsKHR0eWZkLCBGX1NFVEZMLCBmY250bCh0dHlmZCwgRl9HRVRGTCwgMCkgfCBPX05ERUxB WSk7CisKKyAgICAvKiBDb25kaXRpb24gbGluZSwgY2hlY2sgYXZhaWxhYmlsaXR5ICYgREFUQSBt b2RlLCB0dXJuIG9uIHNwZWFrZXIgKi8KKyAgICBpZiAoaW9jdGwodHR5ZmQsUElPQ09GRkhPT0ss ICZkaWFsZXIpID09IC0xKSB7CisgICAgICAgIHByaW50ZigiY2Fubm90IGFjY2VzcyBwaG9uZVxu Iik7CisgICAgICAgIHR0Y2xvcygwKTsKKyAgICAgICAgcmV0dXJuICgtMik7CisgICAgfQorICAg IGlvY3RsKHR0eWZkLFBJT0NHRVRQLCZkaWFsZXIpOyAgICAgIC8qIGdldCBwaG9uZSBkaWFsZXIg cGFyYW1ldGVycyAqLworCisgICAgaWYgKGRpYWxlci5jX2xpbmVwYXJhbSAmIFZPSUNFKSB7CS8q IHBob25lIG11c3QgYmUgaW4gREFUQSBtb2RlICovCisgICAgICAgIHByaW50ZigiIFNob3VsZCBu b3QgZGlhbCB3aXRoIG1vZGVtIGluIFZPSUNFIG1vZGUuXG4iKTsKKyAgICAgICAgcHJpbnRmKCIg RXhpdCBLZXJtaXQsIHN3aXRjaCB0byBEQVRBIGFuZCByZXRyeSBjYWxsLlxuIik7CisgICAgICAg IHR0Y2xvcygwKTsKKyAgICAgICAgcmV0dXJuICgtMik7CisgICAgfQorI2lmZGVmIEFUVFRPTkVE CQkJCS8qIE9sZCB3YXksIHRvbmUgZGlhbGluZyBvbmx5LiAqLworICAgIGRpYWxlci5jX2xpbmVw YXJhbSA9IERBVEEgfCBEVE1GOwkvKiBEaWFsIHdpdGggdG9uZXMsICovCisgICAgZGlhbGVyLmNf bGluZXBhcmFtICY9IH5QVUxTRTsJLyogbm90IHdpdGggcHVsc2VzLiAqLworI2Vsc2UKKyAgICAv KiBMZWF2ZSBjdXJyZW50IHB1bHNlL3RvbmUgc3RhdGUgYWxvbmUuICovCisgICAgLyogQnV0IHdo YXQgYWJvdXQgREFUQT8gIEFkZCBpdCBiYWNrIGlmIHlvdSBoYXZlIHRyb3VibGUuICovCisgICAg Lyogc3lzL3Bob25lIHNheXMgeW91IGdldCBEQVRBIGF1dG9tYXRpY2FsbHkgYnkgb3BlbmluZyBk ZXZpY2UgUkRXUiAqLworI2VuZGlmCisgICAgZGlhbGVyLmNfd2FpdGRpYWx0b25lID0gNTsgICAg ICAgICAgICAgICAgICAvKiB3YWl0IDUgc2VjIGZvciBkaWFsdG9uZSAqLworI2lmZGVmIENPTU1F TlQKKyAgICBkaWFsZXIuY19mZWVkYmFjayA9IFNQRUFLRVJPTnxOT1JNU1BLfFJJTkdPTjsgIC8q IGNvbnRyb2wgc3BlYWtlciAqLworI2Vsc2UKKyAgICAvKiBzeXMvcGhvbmUgc2F5cyBSSU5HT04g dXNlZCBvbmx5IGZvciBpbmNvbWluZyB2b2ljZSBjYWxscyAqLworICAgIGRpYWxlci5jX2ZlZWRi YWNrICY9IH4oU09GVFNQS3xMT1VEU1BLKTsKKyAgICBkaWFsZXIuY19mZWVkYmFjayB8PSBTUEVB S0VST058Tk9STVNQSzsKKyNlbmRpZgorICAgIGRpYWxlci5jX3dhaXRmbGFzaCA9IDUwMDsgICAg ICAgICAgICAgICAgICAgLyogMC41IHNlYyBmbGFzaCBob29rICovCisgICAgaWYoaW9jdGwodHR5 ZmQsUElPQ1NFVFAsJmRpYWxlcikgPT0gLTEpIHsgICAvKiBzZXQgcGhvbmUgcGFyYW1ldGVycyAq LworICAgICAgICBwcmludGYoIkNhbm5vdCBzZXQgbW9kZW0gY2hhcmFjdGVyaXN0aWNzXG4iKTsK KyAgICAgICAgdHRjbG9zKDApOworICAgICAgICByZXR1cm4gKC0yKTsKKyAgICB9CisgICAgaW9j dGwodHR5ZmQsUElPQ1JFQ09OTiwwKTsJCS8qIFR1cm5zIG9uIHNwZWFrZXIgZm9yIHB1bHNlICov CisKKyNpZmRlZiBDT01NRU5UCisgICAgZnByaW50ZihzdGRlcnIsIlBob25lIGxpbmUgc3RhdHVz LiBsaW5lX3BhcjolbyBkaWFsdG9uZV93YWl0OiVvIFwKK2xpbmVfc3RhdHVzOiVvIGZlZWRiYWNr OiVvXG4iLAorICAgIGRpYWxlci5jX2xpbmVwYXJhbSwgZGlhbGVyLmNfd2FpdGRpYWx0b25lLAor ICAgIGRpYWxlci5jX2xpbmVzdGF0dXMsIGRpYWxlci5jX2ZlZWRiYWNrKTsKKyNlbmRpZgorCisg ICAgYXR0bW9kZW0gfD0gSVNNT0RFTTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBtb2RlbSBp cyBub3cgaW4tdXNlICovCisgICAgc2xlZXAoMSk7CisgICAgZm9yICh0ZWxudW0gPSB0ZWxuYnI7 ICp0ZWxudW0gIT0gJ1wwJzsgdGVsbnVtKyspICAgIC8qIGRpYWwgbnVtYmVyICovCisjaWZkZWYg QVRUVE9ORUQKKyAgICAgIC8qIFRvbmUgZGlhbGluZyBvbmx5ICovCisgICAgICBpZiAoaW9jdGwo dHR5ZmQsUElPQ0RJQUwsdGVsbnVtKSAhPSAwKSB7CisJICBwZXJyb3IoIkVycm9yIGluIGRpYWxp bmciKTsKKwkgIHR0Y2xvcygwKTsKKwkgIHJldHVybigtMik7CisgICAgICB9CisjZWxzZSAvKiBB bGxvdyBQdWxzZSBvciBUb25lIGRpYWxpbmcgKi8KKyAgICBzd2l0Y2ggKCp0ZWxudW0pIHsKKyAg ICAgIGNhc2UgJ3QnOiBjYXNlICdUJzogY2FzZSAnJSc6CS8qIFRvbmUgZGlhbGluZyByZXF1ZXN0 ZWQgKi8KKwlkaWFsZXIuY19saW5lcGFyYW0gfD0gRFRNRjsKKwlkaWFsZXIuY19saW5lcGFyYW0g Jj0gflBVTFNFOworCWlmIChpb2N0bCh0dHlmZCxQSU9DU0VUUCwmZGlhbGVyKSA9PSAtMSkgewor CSAgICBwcmludGYoIkNhbm5vdCBzZXQgbW9kZW0gdG8gdG9uZSBkaWFsaW5nXG4iKTsKKwkgICAg dHRjbG9zKDApOworCSAgICByZXR1cm4oLTIpOworCX0KKwlicmVhazsKKyAgICAgIGNhc2UgJ2Qn OiBjYXNlICdEJzogY2FzZSAncCc6IGNhc2UgJ1AnOiBjYXNlICdeJzoKKwlkaWFsZXIuY19saW5l cGFyYW0gfD0gUFVMU0U7CisJZGlhbGVyLmNfbGluZXBhcmFtICY9IH5EVE1GOworCWlmIChpb2N0 bCh0dHlmZCxQSU9DU0VUUCwmZGlhbGVyKSA9PSAtMSkgeworCSAgICBwcmludGYoIkNhbm5vdCBz ZXQgbW9kZW0gdG8gcHVsc2UgZGlhbGluZ1xuIik7CisJICAgIHR0Y2xvcygwKTsKKwkgICAgcmV0 dXJuKC0yKTsKKwl9CisJYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICBpZiAoaW9jdGwo dHR5ZmQsUElPQ0RJQUwsdGVsbnVtKSAhPSAwKSB7CisJICAgIHBlcnJvcigiRGlhbGluZyBlcnJv ciIpOworCSAgICB0dGNsb3MoMCk7CisJICAgIHJldHVybigtMik7CisJfQorCWJyZWFrOworICAg IH0KKyNlbmRpZgorCisgICAgaW9jdGwodHR5ZmQsUElPQ0RJQUwsIkAiKTsJCS8qIHRlcm1pbmF0 b3IgZm9yIGRhdGEgY2FsbCAqLworICAgIGRvIHsJCQkJLyogd2FpdCBmb3IgbW9kZW1zIHRvIENv bm5lY3QgKi8KKyAgICAgICAgaWYgKGlvY3RsKHR0eWZkLFBJT0NHRVRQLCZkaWFsZXIpICE9IDAp CXsgLyogZ2V0IHBhcmFtcyAqLworCSAgICBwZXJyb3IoIkNhbm5vdCBnZXQgbW9kZW1zIHRvIGNv bm5lY3QiKTsKKwkgICAgdHRjbG9zKDApOworCSAgICByZXR1cm4oLTIpOworCX0KKyAgICB9IHdo aWxlICgoZGlhbGVyLmNfbGluZXN0YXR1cyAmIE1PREVNQ09OTkVDVEVEKSA9PSAwKTsKKyAgICAv KiBUdXJuIG9mZiBPX05ERUxBWSBmbGFnIG5vdy4gKi8KKyAgICBmY250bCh0dHlmZCwgRl9TRVRG TCwgZmNudGwodHR5ZmQsIEZfR0VURkwsIDApICYgfk9fTkRFTEFZKTsKKyAgICBzaWduYWwoU0lH SFVQLCBzaWdodXApOyAgICAgICAgICAgICAvKiBoYW5ndXAgb24gbG9zcyBvZiBjYXJyaWVyICov CisgICAgcmV0dXJuKDApOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcmV0dXJuIHN1Y2Nl c3MgKi8KK30KKworLyoKKyAgT2ZmZ2V0dHksIG9uZ2V0dHkgZnVuY3Rpb25zLiBUaGVzZSBmdW5j dGlvbiBnZXQgdGhlICdnZXR0eSgxbSknIG9mZgorICBhbmQgcmVzdG9yZSBpdCB0byB0aGUgaW5k aWNhdGVkIGxpbmUuICBTaGVsbCdzIHJldHVybiBjb2RlcyBhcmU6CisgICAgMDogQ2FuJ3QgZG8g aXQuICBQcm9iYWJseSBhIHVzZXIgbG9nZ2VkIG9uLgorICAgIDE6IE5vIG5lZWQuICBObyBnZXR0 eSBvbiB0aGF0IGxpbmUuCisgICAgMjogRG9uZSwgeW91IHNob3VsZCByZXN0b3JlIHRoZSBnZXR0 eSB3aGVuIHlvdSdyZSBkb25lLgorICBET0dFVFkgU3lzdGVtKDMpLCBob3dldmVyLCByZXR1cm5z IHRoZW0gYXMgMCwgMjU2LCA1MTIsIHJlc3BlY3RpdmVseS4KKyAgVGhhbmtzIHRvIEtldmluIE8n R29ybWFuLCBBbmFybSBTb2Z0d2FyZSBTeXN0ZW1zLgorCisgICBnZXRvZmYuc2ggbG9va3MgbGlr ZTogICBnZXRvbi5zaCBsb29rcyBsaWtlOgorICAgICBzZXRnZXR0eSAkMSAwICAgICAgICAgICBz ZXRnZXR0eSAkMSAxCisgICAgIGVycj0kPyAgICAgICAgICAgICAgICAgIGV4aXQgJD8KKyAgICAg c2xlZXAgMgorICAgICBleGl0ICRlcnIKKyovCisKKy8qICBPIEYgRiBHIEUgVCBUIFkgIC0tICBU dXJuIG9mZiBnZXR0eSgxbSkgZm9yIHRoZSBjb21tdW5pY2F0aW9ucyB0dHkgbGluZQorICogYW5k IGdldCBzdGF0dXMgc28gaXQgY2FuIGJlIHJlc3RhcnRlZCBhZnRlciB0aGUgbGluZSBpcyBodW5n IHVwLgorICovCitpbnQKK29mZmdldHR5KHR0bmFtZSkgY2hhciAqdHRuYW1lOyB7CisgICAgY2hh ciB0ZW1wWzMwXTsKKyAgICB3aGlsZSAoKnR0bmFtZSAhPSAnXDAnKSB0dG5hbWUrKzsgICAgICAg Lyogc2VlayB0ZXJtaW5hdG9yIG9mIHBhdGggKi8KKyAgICB0dG5hbWUgLT0gMzsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogZ2V0IGxhc3QgMyBjaGFycyBvZiBuYW1lICovCisgICAgc3By aW50Zih0ZW1wLCIvdXNyL2Jpbi9nZXRvZmYuc2ggJXMiLHR0bmFtZSk7CisgICAgcmV0dXJuKHpz eXNjbWQodGVtcCkpOworfQorCisvKiAgTyBOIEcgRSBUIFQgWSAgLS0gIFR1cm4gb24gZ2V0dHko MW0pIGZvciB0aGUgY29tbXVuaWNhdGlvbnMgdHR5IGxpbmUgKi8KKworaW50CitvbmdldHR5KHR0 bmFtZSkgY2hhciAqdHRuYW1lOyB7CisgICAgY2hhciB0ZW1wWzMwXTsKKyAgICB3aGlsZSAoKnR0 bmFtZSAhPSAnXDAnKSB0dG5hbWUrKzsgICAgICAgLyogY29tbXMgdHR5IHBhdGggbmFtZSAqLwor ICAgIHR0bmFtZSAtPSAzOworICAgIHNwcmludGYodGVtcCwiL3Vzci9iaW4vZ2V0b24uc2ggJXMi LHR0bmFtZSk7CisgICAgcmV0dXJuKHpzeXNjbWQodGVtcCkpOworfQorI2VuZGlmIC8qIEFUVDcz MDAgKi8KKworLyogIFQgVCBTIEMgQSBSIFIgIC0tICBTZXQgdHRjYXJyIHZhcmlhYmxlLCBjb250 cm9sbGluZyBjYXJyaWVyIGhhbmRsaW5nLgorICoKKyAqICAwID0gT2ZmOiBBbHdheXMgaWdub3Jl IGNhcnJpZXIuIEUuZy4geW91IGNhbiBjb25uZWN0IHdpdGhvdXQgY2Fycmllci4KKyAqICAxID0g T246IEhlZWQgY2FycmllciwgZXhjZXB0IGR1cmluZyBkaWFsaW5nLiBDYXJyaWVyIGxvc3MgZ2l2 ZXMgZGlzY29ubmVjdC4KKyAqICAyID0gQXV0bzogRm9yICJtb2RlbSBkaXJlY3QiOiBUaGUgc2Ft ZSBhcyAiT2ZmIi4KKyAqICAgICAgICAgICAgRm9yIHJlYWwgbW9kZW0gdHlwZXM6IEhlZWQgY2Fy cmllciBkdXJpbmcgY29ubmVjdCwgYnV0IGlnbm9yZQorICogICAgICAgICAgICAgICAgaXQgYW55 dGltZSBlbHNlLiAgQ29tcGF0aWJsZSB3aXRoIHByZS01QSBDLUtlcm1pdCB2ZXJzaW9ucy4KKyAq CisgKiBBcyB5b3UgY2FuIHNlZSwgdGhpcyBzZXR0aW5nIGRvZXMgbm90IGFmZmVjdCBkaWFsaW5n LCB3aGljaCBhbHdheXMgaWdub3JlcworICogY2FycmllciAodW5sZXNzIHRoZXJlIGlzIHNvbWUg c3BlY2lhbCBleGNlcHRpb24gZm9yIHNvbWUgbW9kZW0gdHlwZSkuICBJdAorICogZG9lcyBhZmZl Y3QgdHRvcGVuKCkgaWYgaXQgaXMgc2V0IGJlZm9yZSB0dG9wZW4oKSBpcyB1c2VkLiAgVGhpcyBz ZXR0aW5nCisgKiB0YWtlcyBlZmZlY3Qgb24gdGhlIG5leHQgY2FsbCB0byB0dG9wZW4oKS90dHBr dCgpL3R0dnQoKS4gIEFuZCB0aGV5IGFyZQorICogKG9yIHNob3VsZCBiZSkgYWx3YXlzIGNhbGxl ZCBiZWZvcmUgYW55IGNvbW11bmljYXRpb25zIGlzIHRyaWVkLCB3aGljaAorICogbWVhbnMgdGhh dCwgcHJhY3RpY2FsbHkgc3BlYWtpbmcsIHRoZSBlZmZlY3QgaXMgaW1tZWRpYXRlLgorICoKKyAq IE9mIGNvdXJzZSwgbm90aGluZyBvZiB0aGlzIGFwcGxpZXMgdG8gcmVtb3RlIG1vZGUgKHhsb2Nh bCA9IDApLgorICoKKyAqIFNvbWVvbmUgaGFzIHlldCB0byB1bmNvdmVyIGhvdyB0byBtYW5pcHVs YXRlIHRoZSBjYXJyaWVyIGluIHRoZSBCU0QKKyAqIGVudmlyb25tZW50IChvciBhbnkgbm9uLXRl cm1pbyB1c2luZyBlbnZpcm9ubWVudCkuICBVbnRpbCB0aGF0IHRpbWUsIHRoaXMKKyAqIHdpbGwg c2ltcGx5IGJlIGEgbm8tb3AgZm9yIEJTRC4KKyAqCisgKiBOb3RlIHRoYXQgaW4gcHJldmlvdXMg dmVyc2lvbnMsIHRoZSBjYXJyaWVyIHdhcyBtb3N0IG9mdGVuIGxlZnQgdW5jaGFuZ2VkCisgKiBp biB0dHBrdCgpL3R0dnQoKSB1bmxlc3MgdGhleSB3ZXJlIGNhbGxlZCB3aXRoIEZMT19ESUFMIG9y IEZMT19ESUFYLiAgVGhpcworICogaGFzIGNoYW5nZWQuICBOb3cgaXQgaXMgY29udHJvbGxlZCBi eSB0dGNhcnIgaW4gY29uanVuY3Rpb24gd2l0aCB0aGVzZQorICogbW9kZXMuCisgKi8KK2ludAor dHRzY2FycihjYXJyaWVyKSBpbnQgY2FycmllcjsgeworICAgIHR0Y2FyciA9IGNhcnJpZXI7Cisg ICAgZGVidWcoRjEwMSwgInR0c2NhcnIiLCIiLHR0Y2Fycik7CisgICAgcmV0dXJuKHR0Y2Fycik7 Cit9CisKKy8qIEMgQSBSIFIgQyBUIEwgIC0tICBTZXQgdHR5IG1vZGVzIGZvciBjYXJyaWVyIHRy ZWF0bWVudC4KKyAqCisgKiBTZXRzIHRoZSBhcHByb3ByaWF0ZSBiaXRzIGluIGEgdGVybWlvIG9y IHNndHR5YiBzdHJ1Y3QgZm9yIGNhcnJpZXIgY29udHJvbAorICogKGFjdHVhbGx5LCB0aGVyZSBh cmUgbm8gYml0cyBpbiBzZ3R0eWIgZm9yIHRoYXQpLCBvciBwZXJmb3JtcyBhbnkgb3RoZXIKKyAq IG9wZXJhdGlvbnMgbmVlZGVkIHRvIGNvbnRyb2wgdGhpcyBvbiB0aGUgY3VycmVudCBzeXN0ZW0u ICBUaGUgZnVuY3Rpb24gZG9lcworICogbm90IGRvIHRoZSBhY3R1YWwgVENTRVRBIG9yIHN0dHks IHNpbmNlIG9mdGVuIHdlIHdhbnQgdG8gc2V0IG90aGVyIGJpdHMgdG9vCisgKiBmaXJzdC4gIERv bid0IGNhbGwgdGhpcyBmdW5jdGlvbiB3aGVuIHhsb2NhbCBpcyAwLCBvciB0aGUgdHR5IGlzIG5v dCBvcGVuZWQuCisgKgorICogV2UgZG9uJ3Qga25vdyBob3cgdG8gZG8gYW55dGhpbmcgbGlrZSBj YXJyaWVyIGNvbnRyb2wgb24gbm9uLUFUVFNWIHN5c3RlbXMsCisgKiBleGNlcHQsIGFwcGFyZW50 bHksIHVsdHJpeC4gIFNlZSBhYm92ZS4gIEl0IGlzIGFsc28ga25vd24gdGhhdCB0aGlzIGRvZXNu J3QKKyAqIGhhdmUgbXVjaCBlZmZlY3Qgb24gYSBYZW5peCBzeXN0ZW0uICBGb3IgWGVuaXgsIG9u ZSBzaG91bGQgc3dpdGNoIGJhY2sgYW5kCisgKiBmb3J0aCBiZXR3ZWVuIHRoZSB1cHBlciBhbmQg bG93ZXIgY2FzZSBkZXZpY2UgZmlsZXMuICBNYXliZSBsYXRlci4KKyAqIFByZXNlbnRseSwgWGVu aXggd2lsbCBzdGljayB0byB0aGUgbW9kZSBpdCB3YXMgb3BlbmVkIHdpdGguCisgKgorICogY2Fy cmllcjogMCA9IGlnbm9yZSBjYXJyaWVyLCAxID0gcmVxdWlyZSBjYXJyaWVyLgorICogVGhlIGN1 cnJlbnQgc3RhdGUgaXMgc2F2ZWQgaW4gY3VyY2FyciwgYW5kIGNoZWNrZWQgdG8gc2F2ZSBsYWJv dXIuCisgKi8KKyNpZmRlZiBTVk9SUE9TSVgKK2ludAorI2lmZGVmIEJTRDQ0T1JQT1NJWAorY2Fy cmN0bCh0dHBhciwgY2FycmllcikJc3RydWN0IHRlcm1pb3MgKnR0cGFyOyBpbnQgY2FycmllcjsK KyNlbHNlIC8qIEFUVFNWICovCitjYXJyY3RsKHR0cGFyLCBjYXJyaWVyKQlzdHJ1Y3QgdGVybWlv ICp0dHBhcjsgaW50IGNhcnJpZXI7CisjZW5kaWYgLyogQlNENDRPUlBPU0lYICovCisvKiBjYXJy Y3RsICovIHsKKyAgICBkZWJ1ZyhGMTAxLCAiY2FycmN0bCIsIiIsY2Fycmllcik7CisgICAgaWYg KGNhcnJpZXIpCisgICAgICB0dHBhci0+Y19jZmxhZyAmPSB+Q0xPQ0FMOworICAgIGVsc2UKKyAg ICAgIHR0cGFyLT5jX2NmbGFnIHw9IENMT0NBTDsKKyAgICByZXR1cm4oMCk7Cit9CisjZWxzZSAv KiBCZXJrZWxleSwgVjcsIGV0IGFsLi4uICovCitpbnQKK2NhcnJjdGwodHRwYXIsIGNhcnJpZXIp IHN0cnVjdCBzZ3R0eWIgKnR0cGFyOyBpbnQgY2FycmllcjsgeworICAgIGRlYnVnKEYxMDEsICJj YXJyY3RsIiwiIixjYXJyaWVyKTsKKyAgICBpZiAoY2FycmllciA9PSBjdXJjYXJyKQorICAgICAg cmV0dXJuKDApOworICAgIGN1cmNhcnIgPSBjYXJyaWVyOworI2lmZGVmIHVsdHJpeAorI2lmZGVm IENPTU1FTlQKKy8qCisgIE9sZCBjb2RlIGZyb20gc29tZWJvZHkgYXQgREVDIHRoYXQgdGVuZHMg dG8gZ2V0IHN0dWNrLCB0aW1lIG91dCwgZXRjLgorKi8KKyAgICBpZiAoY2FycmllcikgeworCWlv Y3RsKHR0eWZkLCBUSU9DTU9ERU0sICZ0ZW1wKTsKKwlpb2N0bCh0dHlmZCwgVElPQ0hQQ0wsIDAp OworICAgIH0gZWxzZSB7CisJLyogKEFjY29yZGluZyB0byB0aGUgbWFudWFscywgVElPQ05DQVIg c2hvdWxkIGJlIHByZWZlcnJlZCAqLworCS8qIG92ZXIgVElPQ05NT0RFTS4uLikgKi8KKwlpb2N0 bCh0dHlmZCwgVElPQ05NT0RFTSwgJnRlbXApOworICAgIH0KKyNlbHNlCisvKgorICBOZXcgY29k ZSBmcm9tIEphbWllIFdhdHNvbiB0aGF0LCBoZSBzYXlzLCBlbGltaW5hdGVzIHRoZSBwcm9ibGVt cy4KKyovCisgICAgaWYgKGNhcnJpZXIpIHsKKwlpb2N0bCh0dHlmZCwgVElPQ0NBUik7CisJaW9j dGwodHR5ZmQsIFRJT0NIUENMKTsKKyAgICB9IGVsc2UgeworCWlvY3RsKHR0eWZkLCBUSU9DTkNB Uik7CisgICAgfQorI2VuZGlmIC8qIENPTU1FTlQgKi8KKyNlbmRpZiAvKiB1bHRyaXggKi8KKyAg ICByZXR1cm4oMCk7Cit9CisjZW5kaWYgLyogU1ZPUlBPU0lYICovCisKKworLyogIFQgVCBHIE0g RCBNICAtLSAgR2V0IG1vZGVtIHNpZ25hbHMgICovCisvKgorIExvb2tzIGZvciBSUy0yMzIgbW9k ZW0gc2lnbmFscywgYW5kIHJldHVybnMgdGhvc2UgdGhhdCBhcmUgb24gaW4gYXMgaXRzCisgcmV0 dXJuIHZhbHVlLCBpbiBhIGJpdCBtYXNrIGNvbXBvc2VkIG9mIHRoZSBCTV94eHggdmFsdWVzIGRl ZmluZWQgaW4gY2tjZGViLmguCisgUmV0dXJuczoKKyAtMyBOb3QgaW1wbGVtZW50ZWQKKyAtMiBp ZiB0aGUgY29tbXVuaWNhdGlvbiBkZXZpY2UgZG9lcyBub3QgaGF2ZSBtb2RlbSBjb250cm9sIChl LmcuIHRlbG5ldCkKKyAtMSBvbiBlcnJvci4KKyA+PSAwIG9uIHN1Y2Nlc3MsIHdpdGggYSBiaXQg bWFzayBjb250YWluaW5nIHRoZSBtb2RlbSBzaWduYWxzIHRoYXQgYXJlIG9uLgorKi8KKworLyoK KyAgRGVmaW5lIHRoZSBzeW1ib2wgS19NRE1DVEwgaWYgd2UgaGF2ZSBTeXMgViBSMyAvIDQuMyBC U0Qgc3R5bGUKKyAgbW9kZW0gY29udHJvbCwgbmFtZWx5IHRoZSBUSU9DTUdFVCBpb2N0bC4KKyov CisKKyNpZmRlZiBCU0Q0MworI2RlZmluZSBLX01ETUNUTAorI2VuZGlmIC8qIEJTRDQzICovCisK KyNpZmRlZiBTVU5PUzQKKyNkZWZpbmUgS19NRE1DVEwKKyNlbmRpZiAvKiBTVU5PUzQgKi8KKwor LyoKKyAgU0NPIE9wZW5TZXJ2ZXIgUjUuMC40LiAgVGhlIFRJT0NNR0VUIGRlZmluaXRpb24gaXMg aGFyZHdpcmVkIGluIGJlY2F1c2UgaXQKKyAgaXMgc2tpcHBlZCBpbiB0ZXJtaW8uaCB3aGVuIF9Q T1NJWF9TT1VSQ0UgaXMgZGVmaW5lZC4gIEJ1dCBfUE9TSVhfU09VUkNFCisgIG11c3QgYmUgZGVm aW5lZCBpbiBvcmRlciB0byBnZXQgdGhlIGhpZ2ggc2VyaWFsIHNwZWVkcyB0aGF0IGFyZSBuZXcg dG8KKyAgNS4wLjQuICBIb3dldmVyLCB0aGUgcmVndWxhciBTQ08gZHJpdmVycyBkbyBub3QgaW1w bGVtZW50IFRJT0NNR0VULCBzbyB0aGUKKyAgaW9jdGwoKSByZXR1cm5zIC0xIHdpdGggZXJybm8g MjIgKGludmFsaWQgZnVuY3Rpb24pLiAgQnV0IHRoaXJkLXBhcnR5CisgIGRyaXZlcnMsIGUuZy4g Zm9yIERpZ2lib2FyZCwgZG8gaW1wbGVtZW50IGl0LCBhbmQgc28gaXQgc2hvdWxkIHdvcmsgb24g cG9ydHMKKyAgZHJpdmVuIGJ5IHRob3NlIGRyaXZlcnMuCisqLworI2lmZGVmIFNDT19PU1I1MDQK KyNpZm5kZWYgVElPQ01HRVQKKyNkZWZpbmUgVElPQ01HRVQgKCgndCc8PDgpfDI5KQorI2VuZGlm IC8qIFRJT0NNR0VUICovCisjZW5kaWYgLyogU0NPX09TUjUwNCAqLworCisjaWZkZWYgQ0tfU0NP VjUKKy8qIEJlY2F1c2UgUE9TSVggc3RyaWN0bmVzcyBpbiA8c3lzL3Rlcm1pby5oPiB3b24ndCBs ZXQgdXMgc2VlIHRoZXNlLiAqLworI2lmbmRlZiBUSU9DTV9EVFIKKyNkZWZpbmUgVElPQ01fRFRS CTB4MDAwMgkJLyogZGF0YSB0ZXJtaW5hbCByZWFkeSAqLworI2RlZmluZSBUSU9DTV9SVFMJMHgw MDA0CQkvKiByZXF1ZXN0IHRvIHNlbmQgKi8KKyNkZWZpbmUgVElPQ01fQ1RTCTB4MDAyMAkJLyog Y2xlYXIgdG8gc2VuZCAqLworI2RlZmluZSBUSU9DTV9DQVIJMHgwMDQwCQkvKiBjYXJyaWVyIGRl dGVjdCAqLworI2RlZmluZSBUSU9DTV9STkcJMHgwMDgwCQkvKiByaW5nICovCisjZGVmaW5lIFRJ T0NNX0RTUgkweDAxMDAJCS8qIGRhdGEgc2V0IHJlYWR5ICovCisjZGVmaW5lIFRJT0NNX0NECVRJ T0NNX0NBUgorI2RlZmluZSBUSU9DTV9SSQlUSU9DTV9STkcKKyNlbmRpZiAvKiBUSU9DTV9EVFIg Ki8KKyNlbmRpZiAvKiBDS19TQ09WNSAqLworCisjaWZkZWYgUU5YCisjZGVmaW5lIEtfTURNQ1RM CisjZWxzZQorI2lmZGVmIFRJT0NNR0VUCisjZGVmaW5lIEtfTURNQ1RMCisjZW5kaWYgLyogVElP Q01HRVQgKi8KKyNlbmRpZiAvKiBRTlggKi8KKy8qCisgICJBIHNlcmlhbCBjb21tdW5pY2F0aW9u IHByb2dyYW0gdGhhdCBjYW4ndCByZWFkIG1vZGVtIHNpZ25hbHMKKyAgIGlzIGxpa2UgYSBjYXIg d2l0aG91dCB3aW5kb3dzLiIKKyovCitpbnQKK3R0Z21kbSgpIHsKKworI2lmZGVmIFFOWAorI2lu Y2x1ZGUgPHN5cy9xaW9jdGwuaD4KKworICAgIHVuc2lnbmVkIGxvbmcgeSwgbWRtYml0c1syXTsK KyAgICBpbnQgeCwgeiA9IDA7CisKKyAgICBpZiAoeGxvY2FsICYmIHR0eWZkIDwgMCkKKyAgICAg IHJldHVybigtMSk7CisKKyNpZmRlZiBORVRDT05OCisgICAgaWYgKG5ldGNvbm4pIHsJCQkvKiBO ZXR3b3JrIGNvbm5lY3Rpb24gKi8KKyNpZmRlZiBUTl9DT01QT1JUCisgICAgICAgIGlmIChpc3Ru Y29tcG9ydCgpKSB7CisJICAgIGdvdHNpZ3MgPSAxOworCSAgICByZXR1cm4odG5nbWRtKCkpOwor CX0gZWxzZQorI2VuZGlmIC8qIFROX0NPTVBPUlQgKi8KKwkgIHJldHVybigtMik7CQkJLyogTm8g bW9kZW0gc2lnbmFscyAqLworICAgIH0KKyNlbmRpZiAvKiBORVRDT05OICovCisKKyNpZmRlZiBO RVRDTUQKKyAgICBpZiAodHRwaXBlKSByZXR1cm4oLTIpOworI2VuZGlmIC8qIE5FVENNRCAqLwor I2lmZGVmIE5FVFBUWQorICAgIGlmICh0dHB0eSkgcmV0dXJuKC0yKTsKKyNlbmRpZiAvKiBORVRQ VFkgKi8KKworICAgIG1kbWJpdHNbMF0gPSAwTDsKKyAgICBtZG1iaXRzWzFdID0gMEw7CisvKgor ICogRnJvbSA8c3lzL3Fpb2N0bC5oPjoKKyAqCisgKiBTRVJJQUwgZGV2aWNlcyAgIChhbGwgRGV2 LnNlciB2ZXJzaW9ucykKKyAqIDAgOiBEVFIgICAgICAgICAgIDggPSBEYXRhIEJpdHMgMCAgMTYg LSByZXNlcnZlZCAgICAgMjQgLSByZXNlcnZlZAorICogMSA6IFJUUyAgICAgICAgICAgOSA9IERh dGEgQml0cyAxICAxNyAtIHJlc2VydmVkICAgICAyNSAtIHJlc2VydmVkCisgKiAyID0gT3V0IDEg ICAgICAgIDEwID0gU3RvcCBCaXRzICAgIDE4IC0gcmVzZXJ2ZWQgICAgIDI2IC0gcmVzZXJ2ZWQK KyAqIDMgPSBJbnQgRW5hYmxlICAgMTEgPSBQYXIgRW5hYmxlICAgMTkgLSByZXNlcnZlZCAgICAg MjcgLSByZXNlcnZlZAorICogNCA9IExvb3AgICAgICAgICAxMiA9IFBhciBFdmVuICAgICAyMCA9 IENUUyAgICAgICAgICAyOCAtIHJlc2VydmVkCisgKiA1IC0gcmVzZXJ2ZWQgICAgIDEzID0gUGFy IFN0aWNrICAgIDIxID0gRFNSICAgICAgICAgIDI5IC0gcmVzZXJ2ZWQKKyAqIDYgLSByZXNlcnZl ZCAgICAgMTQgOiBCcmVhayAgICAgICAgMjIgPSBSSSAgICAgICAgICAgMzAgLSByZXNlcnZlZAor ICogNyAtIHJlc2VydmVkICAgICAxNSA9IDAgICAgICAgICAgICAyMyA9IENEICAgICAgICAgICAz MSAtIHJlc2VydmVkCisgKi8KKyAgICBlcnJubyA9IDA7CisgICAgeCA9IHFueF9pb2N0bCh0dHlm ZCwgUUNUTF9ERVZfQ1RMLCAmbWRtYml0c1swXSwgOCwgJm1kbWJpdHNbMF0sIDQpOworICAgIGRl YnVnKEYxMDEsInR0Z21kbSBxbnhfaW9jdGwiLCIiLHgpOworICAgIGRlYnVnKEYxMDEsInR0Z21k bSBxbnhfaW9jdGwgZXJybm8iLCIiLGVycm5vKTsKKyAgICBpZiAoIXgpIHsKKwlkZWJ1ZyhGMTAx LCJ0dGdtZG0gcW54X2lvY3RsIG1kbWJpdHNbMF0iLCIiLG1kbWJpdHNbMF0pOworCWRlYnVnKEYx MDEsInR0Z21kbSBxbnhfaW9jdGwgbWRtYml0c1sxXSIsIiIsbWRtYml0c1sxXSk7CisJeSA9IG1k bWJpdHNbMF07CisJaWYgKHkgJiAweDAwMDAwMUwpIHogfD0gQk1fRFRSOwkvKiBCaXQgIDAgKi8K KwlpZiAoeSAmIDB4MDAwMDAyTCkgeiB8PSBCTV9SVFM7CS8qIEJpdCAgMSAqLworCWlmICh5ICYg MHgxMDAwMDBMKSB6IHw9IEJNX0NUUzsJLyogQml0IDIwICovCisJaWYgKHkgJiAweDIwMDAwMEwp IHogfD0gQk1fRFNSOwkvKiBCaXQgMjEgKi8KKwlpZiAoeSAmIDB4NDAwMDAwTCkgeiB8PSBCTV9S Tkc7CS8qIEJpdCAyMiAqLworCWlmICh5ICYgMHg4MDAwMDBMKSB6IHw9IEJNX0RDRDsJLyogQml0 IDIzICovCisJZGVidWcoRjEwMSwidHRnbWRtIHFueCByZXN1bHQiLCIiLHopOworCWRlYnVnKEYx MTAsInR0Z21kbSBxbnggQ0QgPSAiLCh6ICYgQk1fRENEKSA/ICJPbiIgOiAiT2ZmIiwgMCk7CisJ Z290c2lncyA9IDE7CisJcmV0dXJuKHopOworICAgIH0gZWxzZSByZXR1cm4oLTEpOworI2Vsc2Ug LyogUU5YICovCisjaWZkZWYgSFBVWAkJCQkvKiBIUFVYIGhhcyBpdHMgb3duIHdheSAqLworICAg IGludCB4LCB6OworCisjaWZkZWYgSFBVWDEwCQkJCS8qIE1vZGVtIGZsYWcgd29yZCAqLworICAg IG1mbGFnIHk7CQkJCS8qIG1mbGFnIHR5cGVkZWYnZCBpbiA8c3lzL21vZGVtLmg+ICovCisjZWxz ZQorI2lmZGVmIEhQVVg5CisgICAgbWZsYWcgeTsKKyNlbHNlCisjaWZkZWYgSFBVWDgKKyAgICBt ZmxhZyB5OworI2Vsc2UKKyAgICB1bnNpZ25lZCBsb25nIHk7CQkJLyogTm90IHN1cmUgYWJvdXQg cHJlLTguMC4uLiAqLworI2VuZGlmIC8qIEhQVVg4ICovCisjZW5kaWYgLyogSFBVWDkgKi8KKyNl bmRpZiAvKiBIUFVYMTAgKi8KKworICAgIGlmICh4bG9jYWwgJiYgdHR5ZmQgPCAwKQorICAgICAg cmV0dXJuKC0xKTsKKworI2lmZGVmIE5FVENPTk4KKyAgICBpZiAobmV0Y29ubikgewkJCS8qIE5l dHdvcmsgY29ubmVjdGlvbiAqLworI2lmZGVmIFROX0NPTVBPUlQKKyAgICAgICAgaWYgKGlzdG5j b21wb3J0KCkpIHsKKwkgICAgZ290c2lncyA9IDE7CisJICAgIHJldHVybih0bmdtZG0oKSk7CisJ fSBlbHNlCisjZW5kaWYgLyogVE5fQ09NUE9SVCAqLworCSAgcmV0dXJuKC0yKTsJCQkvKiBObyBt b2RlbSBzaWduYWxzICovCisgICAgfQorI2VuZGlmIC8qIE5FVENPTk4gKi8KKworI2lmZGVmIE5F VENNRAorICAgIGlmICh0dHBpcGUpIHJldHVybigtMik7CisjZW5kaWYgLyogTkVUQ01EICovCisj aWZkZWYgTkVUUFRZCisgICAgaWYgKHR0cHR5KSByZXR1cm4oLTIpOworI2VuZGlmIC8qIE5FVFBU WSAqLworCisgICAgaWYgKHhsb2NhbCkJCQkJLyogR2V0IG1vZGVtIHNpZ25hbHMgKi8KKyAgICAg IHggPSBpb2N0bCh0dHlmZCxNQ0dFVEEsJnkpOworICAgIGVsc2UKKyAgICAgIHggPSBpb2N0bCgw LE1DR0VUQSwmeSk7CisgICAgaWYgKHggPCAwKSByZXR1cm4oLTEpOworICAgIGRlYnVnKEYxMDEs InR0Z21kbSIsIiIseSk7CisKKyAgICB6ID0gMDsJCQkJLyogSW5pdGlhbGl6ZSByZXR1cm4gdmFs dWUgKi8KKworLyogTm93IHNldCBiaXRzIGZvciBlYWNoIG1vZGVtIHNpZ25hbCB0aGF0IGlzIHJl cG9ydGVkIHRvIGJlIG9uLiAqLworCisjaWZkZWYgTUNUUworICAgIC8qIENsZWFyIFRvIFNlbmQg Ki8KKyAgICBkZWJ1ZyhGMTAxLCJ0dGdtZG0gSFBVWCBDVFMiLCIiLHkgJiBNQ1RTKTsKKyAgICBp ZiAoeSAmIE1DVFMpIHogfD0gQk1fQ1RTOworI2VuZGlmCisjaWZkZWYgTURTUgorICAgIC8qIERh dGEgU2V0IFJlYWR5ICovCisgICAgZGVidWcoRjEwMSwidHRnbWRtIEhQVVggRFNSIiwiIix5ICYg TURTUik7CisgICAgaWYgKHkgJiBNRFNSKSB6IHw9IEJNX0RTUjsKKyNlbmRpZgorI2lmZGVmIE1E Q0QKKyAgICAvKiBDYXJyaWVyICovCisgICAgZGVidWcoRjEwMSwidHRnbWRtIEhQVVggRENEIiwi Iix5ICYgTURDRCk7CisgICAgaWYgKHkgJiBNRENEKSB6IHw9IEJNX0RDRDsKKyNlbmRpZgorI2lm ZGVmIE1SSQorICAgIC8qIFJpbmcgSW5kaWNhdGUgKi8KKyAgICBkZWJ1ZyhGMTAxLCJ0dGdtZG0g SFBVWCBSSSIsIiIseSAmIE1SSSk7CisgICAgaWYgKHkgJiBNUkkpIHogfD0gQk1fUk5HOworI2Vu ZGlmCisjaWZkZWYgTURUUgorICAgIC8qIERhdGEgVGVybWluYWwgUmVhZHkgKi8KKyAgICBkZWJ1 ZyhGMTAxLCJ0dGdtZG0gSFBVWCBEVFIiLCIiLHkgJiBNRFRSKTsKKyAgICBpZiAoeSAmIE1EVFIp IHogfD0gQk1fRFRSOworI2VuZGlmCisjaWZkZWYgTVJUUworICAgIC8qIFJlcXVlc3QgVG8gU2Vu ZCAqLworICAgIGRlYnVnKEYxMDEsInR0Z21kbSBIUFVYIFJUUyIsIiIseSAmIE1SVFMpOworICAg IGlmICh5ICYgTVJUUykgeiB8PSBCTV9SVFM7CisjZW5kaWYKKyAgICBnb3RzaWdzID0gMTsKKyAg ICByZXR1cm4oeik7CisKKyNlbHNlIC8qICEgSFBVWCAqLworCisjaWZkZWYgS19NRE1DVEwKKy8q CisgIE5vdGUsIFRJT0NNR0VUIG1pZ2h0IGFscmVhZHkgaGF2ZSBiZWVuIGRlZmluZWQgaW4gPHN5 cy9pb2N0bC5oPiBvciBlbHNld2hlcmUuCisgIElmIG5vdCwgd2UgdHJ5IGluY2x1ZGluZyA8c3lz L3R0eWNvbS5oPiAtLSBpZiB0aGlzIGJsb3dzIHVwIHRoZW4gbW9yZSBpZmRlZnMKKyAgYXJlIG5l ZWRlZC4KKyovCisjaWZuZGVmIFRJT0NNR0VUCisjaW5jbHVkZSA8c3lzL3R0eWNvbS5oPgorI2Vu ZGlmIC8qIFRJT0NNR0VUICovCisKKyAgICBpbnQgeCwgeSwgejsKKworICAgIGRlYnVnKEYxMDAs InR0Z21kbSBLX01ETUNUTCBkZWZpbmVkIiwiIiwwKTsKKworI2lmZGVmIE5FVENPTk4KKyAgICBp ZiAobmV0Y29ubikgewkJCS8qIE5ldHdvcmsgY29ubmVjdGlvbiAqLworI2lmZGVmIFROX0NPTVBP UlQKKyAgICAgICAgaWYgKGlzdG5jb21wb3J0KCkpIHsKKwkgICAgZ290c2lncyA9IDE7CisJICAg IHJldHVybih0bmdtZG0oKSk7CisJfSBlbHNlCisjZW5kaWYgLyogVE5fQ09NUE9SVCAqLworCSAg cmV0dXJuKC0yKTsJCQkvKiBObyBtb2RlbSBzaWduYWxzICovCisgICAgfQorI2VuZGlmIC8qIE5F VENPTk4gKi8KKworI2lmZGVmIE5FVENNRAorICAgIGlmICh0dHBpcGUpIHJldHVybigtMik7Cisj ZW5kaWYgLyogTkVUQ01EICovCisjaWZkZWYgTkVUUFRZCisgICAgaWYgKHR0cHR5KSByZXR1cm4o LTIpOworI2VuZGlmIC8qIE5FVFBUWSAqLworCisgICAgaWYgKHhsb2NhbCAmJiB0dHlmZCA8IDAp CisgICAgICByZXR1cm4oLTEpOworCisgICAgaWYgKHhsb2NhbCkKKyAgICAgIHggPSBpb2N0bCh0 dHlmZCxUSU9DTUdFVCwmeSk7CS8qIEdldCBtb2RlbSBzaWduYWxzLiAqLworICAgIGVsc2UKKyAg ICAgIHggPSBpb2N0bCgwLFRJT0NNR0VULCZ5KTsKKyAgICBkZWJ1ZyhGMTAxLCJ0dGdtZG0gVElP Q01HRVQgaW9jdGwiLCIiLHgpOworICAgIGlmICh4IDwgMCkgeworCWRlYnVnKEYxMDEsInR0Z21k bSBlcnJubyIsIiIsZXJybm8pOworCXJldHVybigtMSk7CisgICAgfQorICAgIGRlYnVnKEYxMDEs InR0Z21kbSBiaXRzIiwiIix5KTsKKworICAgIHogPSAwOwkJCQkvKiBJbml0aWFsaXplIHJldHVy biB2YWx1ZS4gKi8KKyNpZmRlZiBUSU9DTV9DVFMKKyAgICAvKiBDbGVhciBUbyBTZW5kICovCisg ICAgaWYgKHkgJiBUSU9DTV9DVFMpIHogfD0gQk1fQ1RTOworICAgIGRlYnVnKEYxMDEsInR0Z21k bSBUSU9DTV9DVFMgZGVmaW5lZCIsIiIsVElPQ01fQ1RTKTsgCisjZWxzZQorICAgIGRlYnVnKEYx MDAsInR0Z21kbSBUSU9DTV9DVFMgbm90IGRlZmluZWQiLCIiLDApOworI2VuZGlmCisjaWZkZWYg VElPQ01fRFNSCisgICAgLyogRGF0YSBTZXQgUmVhZHkgKi8KKyAgICBpZiAoeSAmIFRJT0NNX0RT UikgeiB8PSBCTV9EU1I7CisgICAgZGVidWcoRjEwMSwidHRnbWRtIFRJT0NNX0RTUiBkZWZpbmVk IiwiIixUSU9DTV9EU1IpOyAKKyNlbHNlCisgICAgZGVidWcoRjEwMCwidHRnbWRtIFRJT0NNX0RT UiBub3QgZGVmaW5lZCIsIiIsMCk7CisjZW5kaWYKKyNpZmRlZiBUSU9DTV9DQVIKKyAgICAvKiBD YXJyaWVyICovCisgICAgaWYgKHkgJiBUSU9DTV9DQVIpIHogfD0gQk1fRENEOworICAgIGRlYnVn KEYxMDEsInR0Z21kbSBUSU9DTV9DQVIgZGVmaW5lZCIsIiIsVElPQ01fQ0FSKTsgCisjZWxzZQor ICAgIGRlYnVnKEYxMDAsInR0Z21kbSBUSU9DTV9DQVIgbm90IGRlZmluZWQiLCIiLDApOworI2Vu ZGlmCisjaWZkZWYgVElPQ01fUk5HCisgICAgLyogUmluZyBJbmRpY2F0ZSAqLworICAgIGlmICh5 ICYgVElPQ01fUk5HKSB6IHw9IEJNX1JORzsKKyAgICBkZWJ1ZyhGMTAxLCJ0dGdtZG0gVElPQ01f Uk5HIGRlZmluZWQiLCIiLFRJT0NNX1JORyk7IAorI2Vsc2UKKyAgICBkZWJ1ZyhGMTAwLCJ0dGdt ZG0gVElPQ01fUk5HIG5vdCBkZWZpbmVkIiwiIiwwKTsKKyNlbmRpZgorI2lmZGVmIFRJT0NNX0RU UgorICAgIC8qIERhdGEgVGVybWluYWwgUmVhZHkgKi8KKyAgICBpZiAoeSAmIFRJT0NNX0RUUikg eiB8PSBCTV9EVFI7CisgICAgZGVidWcoRjEwMSwidHRnbWRtIFRJT0NNX0RUUiBkZWZpbmVkIiwi IixUSU9DTV9EVFIpOyAKKyNlbHNlCisgICAgZGVidWcoRjEwMCwidHRnbWRtIFRJT0NNX0RUUiBu b3QgZGVmaW5lZCIsIiIsMCk7CisjZW5kaWYKKyNpZmRlZiBUSU9DTV9SVFMKKyAgICAvKiBSZXF1 ZXN0IFRvIFNlbmQgKi8KKyAgICBpZiAoeSAmIFRJT0NNX1JUUykgeiB8PSBCTV9SVFM7CisgICAg ZGVidWcoRjEwMSwidHRnbWRtIFRJT0NNX1JUUyBkZWZpbmVkIiwiIixUSU9DTV9SVFMpOyAKKyNl bHNlCisgICAgZGVidWcoRjEwMCwidHRnbWRtIFRJT0NNX1JUUyBub3QgZGVmaW5lZCIsIiIsMCk7 CisjZW5kaWYKKyAgICBnb3RzaWdzID0gMTsKKyAgICByZXR1cm4oeik7CisKKyNlbHNlIC8qICFL X01ETUNUTCBjYXRjaC1BbGwgKi8KKworICAgIGRlYnVnKEYxMDAsInR0Z21kbSBLX01ETUNUTCBu b3QgZGVmaW5lZCIsIiIsMCk7CisjaWZkZWYgVElPQ01HRVQKKyAgICBkZWJ1ZyhGMTAwLCJ0dGdt ZG0gVElPQ01HRVQgZGVmaW5lZCIsIiIsMCk7CisjZWxzZQorICAgIGRlYnVnKEYxMDAsInR0Z21k bSBUSU9DTUdFVCBub3QgZGVmaW5lZCIsIiIsMCk7CisjZW5kaWYgLyogVElPQ01HRVQgKi8KKyNp ZmRlZiBfU1ZJRDMKKyAgICBkZWJ1ZyhGMTAwLCJ0dGdtZG0gX1NWSUQzIGRlZmluZWQiLCIiLDAp OworI2Vsc2UKKyAgICBkZWJ1ZyhGMTAwLCJ0dGdtZG0gX1NWSUQzIG5vdCBkZWZpbmVkIiwiIiww KTsKKyNlbmRpZiAvKiBfU1ZJRDMgKi8KKworI2lmZGVmIE5FVENPTk4KKyAgICBpZiAobmV0Y29u bikgewkJCS8qIE5ldHdvcmsgY29ubmVjdGlvbiAqLworI2lmZGVmIFROX0NPTVBPUlQKKyAgICAg ICAgaWYgKGlzdG5jb21wb3J0KCkpIHsKKwkgICAgZ290c2lncyA9IDE7CisJICAgIHJldHVybih0 bmdtZG0oKSk7CisJfSBlbHNlCisjZW5kaWYgLyogVE5fQ09NUE9SVCAqLworCSAgcmV0dXJuKC0y KTsJCQkvKiBObyBtb2RlbSBzaWduYWxzICovCisgICAgfQorI2VuZGlmIC8qIE5FVENPTk4gKi8K KworI2lmZGVmIE5FVENNRAorICAgIGlmICh0dHBpcGUpIHJldHVybigtMik7CisjZW5kaWYgLyog TkVUQ01EICovCisjaWZkZWYgTkVUUFRZCisgICAgaWYgKHR0cHR5KSByZXR1cm4oLTIpOworI2Vu ZGlmIC8qIE5FVFBUWSAqLworCisgICAgcmV0dXJuKC0zKTsJCQkJLyogU29ycnksIEkgZG9uJ3Qg a25vdyBob3cuLi4gKi8KKworI2VuZGlmIC8qIEtfTURNQ1RMICovCisjZW5kaWYgLyogSFBVWCAq LworI2VuZGlmIC8qIFFOWCAqLworfQorCisvKiAgUCBTIFUgUyBQIEUgTiBEICAtLSAgUHV0IHRo aXMgcHJvY2VzcyBpbiB0aGUgYmFja2dyb3VuZC4gICovCisKKy8qCisgIENhbGwgd2l0aCBmbGFn IG5vbnplcm8gaWYgc3VzcGVuZGluZyBpcyBhbGxvd2VkLCB6ZXJvIGlmIG5vdCBhbGxvd2VkLgor ICBSZXR1cm5zIDAgb24gYXBwYXJlbnQgc3VjY2VzcywgLTEgb24gZmFpbHVyZSAoZmxhZyB3YXMg emVybywgb3IKKyAga2lsbCgpIHJldHVybmVkIGFuIGVycm9yIGNvZGUuCisqLworaW50Citwc3Vz cGVuZChmbGFnKSBpbnQgZmxhZzsgeworCisjaWZkZWYgUlRVCisgICAgZXh0ZXJuIGludCBydHVf YnVnOworI2VuZGlmIC8qIFJUVSAqLworCisgICAgaWYgKGZsYWcgPT0gMCkgcmV0dXJuKC0xKTsK KworI2lmZGVmIE5PSkMKKyAgICByZXR1cm4oLTEpOworI2Vsc2UKKyNpZmRlZiBTSUdUU1RQCisv KgorICBUaGUgYmlnIHF1ZXN0aW9uIGhlcmUgaXMgd2hldGhlciBqb2IgY29udHJvbCBpcyAqcmVh bGx5KiBzdXBwb3J0ZWQuCisgIFRoZXJlJ3Mgbm8gd2F5IEtlcm1pdCBjYW4ga25vdyBmb3Igc3Vy ZS4gIFRoZSBmYWN0IHRoYXQgU0lHVFNUUCBpcworICBkZWZpbmVkIGRvZXMgbm90IGd1YXJhbnRl ZSB0aGUgVW5peCBrZXJuZWwgc3VwcG9ydHMgaXQsIGFuZCB0aGUgZmFjdAorICB0aGF0IHRoZSBV bml4IGtlcm5lbCBzdXBwb3J0cyBpdCBkb2Vzbid0IGd1YXJhbnRlZSB0aGF0IHRoZSB1c2VyJ3MK KyAgc2hlbGwgKG9yIG90aGVyIHByb2Nlc3MgdGhhdCBpbnZva2VkIEtlcm1pdCkgc3VwcG9ydHMg aXQuCisqLworI2lmZGVmIFJUVQorICAgIHJ0dV9idWcgPSAxOworI2VuZGlmIC8qIFJUVSAqLwor ICAgIGlmIChraWxsKDAsU0lHU1RPUCkgPCAwCisjaWZkZWYgTUlQUworLyogTGV0J3MgdHJ5IHRo aXMgZm9yIE1JUFMgdG9vLiAqLworCSYmIGtpbGwoZ2V0cGlkKCksU0lHU1RPUCkgPCAwCisjZW5k aWYgLyogTUlQUyAqLworCSkgewkJCQkvKiBJZiBqb2IgY29udHJvbCwgc3VzcGVuZCB0aGUgam9i ICovCisJcGVycm9yKCJzdXNwZW5kIik7CisJZGVidWcoRjEwMSwicHN1c3BlbmQgZXJyb3IiLCIi LGVycm5vKTsKKwlyZXR1cm4oLTEpOworICAgIH0KKyAgICBkZWJ1ZyhGMTAwLCJwc3VzcGVuZCBv ayIsIiIsMCk7CisgICAgcmV0dXJuKDApOworI2Vsc2UKKyAgICByZXR1cm4oLTEpOworI2VuZGlm IC8qIFNJR1RTVFAgKi8KKyNlbmRpZiAvKiBOT0pDICovCit9CisKKy8qCisgIHNldHVpZCBwYWNr YWdlLCBieSBLcmlzdG9mZmVyIEVyaWtzc29uLCB3aXRoIGNvbnRyaWJ1dGlvbnMgZnJvbSBEZWFu CisgIExvbmcgYW5kIGZkYy4KKyovCisKKy8qIFRoZSBmb2xsb3dpbmcgaXMgZm9yIFNDTyB3aGVu IENLX0FOU0lMSUJTIGlzIGRlZmluZWQuLi4gKi8KKyNpZmRlZiBNX1VOSVgKKyNpZmRlZiBDS19B TlNJTElCUworI2lmbmRlZiBOT0dFVElEX1BST1RPUworI2RlZmluZSBOT0dFVElEX1BST1RPUwor I2VuZGlmIC8qIE5PR0VUSURfUFJPVE9TICovCisjZW5kaWYgLyogQ0tfQU5TSUxJQlMgKi8KKyNl bmRpZiAvKiBNX1VOSVggKi8KKworI2lmbmRlZiBfUE9TSVhfU09VUkNFCisjaWZuZGVmIFNVTk9T NAorI2lmbmRlZiBORVhUCisjaWZuZGVmIFBTMkFJWDEwCisjaWZuZGVmIHNlcXVlbnQKKyNpZm5k ZWYgSFBVWDkKKyNpZm5kZWYgSFBVWDEwCisjaWZuZGVmIENPSEVSRU5UCisjaWZuZGVmIE5PR0VU SURfUFJPVE9TCitfUFJPVE9UWVAoIFVJRF9UIGdldHVpZCwgKHZvaWQpICk7CitfUFJPVE9UWVAo IFVJRF9UIGdldGV1aWQsICh2b2lkKSApOworX1BST1RPVFlQKCBVSURfVCBnZXRyZXVpZCwgKHZv aWQpICk7CitfUFJPVE9UWVAoIFVJRF9UIGdldGdpZCwgKHZvaWQpICk7CitfUFJPVE9UWVAoIFVJ RF9UIGdldGVnaWQsICh2b2lkKSApOworX1BST1RPVFlQKCBVSURfVCBnZXRyZWdpZCwgKHZvaWQp ICk7CisjZW5kaWYgLyogTk9HRVRJRF9QUk9UT1MgKi8KKyNlbHNlCitfUFJPVE9UWVAoIFVJRF9U IGdldHJldWlkLCAodm9pZCkgKTsKK19QUk9UT1RZUCggVUlEX1QgZ2V0cmVnaWQsICh2b2lkKSAp OworI2VuZGlmIC8qIENPSEVSRU5UICovCisjZW5kaWYgLyogSFBVWDEwICovCisjZW5kaWYgLyog SFBVWDkgKi8KKyNlbmRpZiAvKiBzZXF1ZW50ICovCisjZW5kaWYgLyogUFMyQUlYMTAgKi8KKyNl bmRpZiAvKiBORVhUICovCisjZW5kaWYgLyogU1VOT1M0ICovCisjZW5kaWYgLyogX1BPU0lYX1NP VVJDRSAqLworCisvKgorU3ViamVjdDogU2V0LXVzZXItaWQKK1RvOiBmZGNAd2F0c3VuLmNjLmNv bHVtYmlhLmVkdSAoRnJhbmsgZGEgQ3J1eikKK0RhdGU6IFNhdCwgMjEgQXByIDkwIDQ6NDg6MjUg TUVTCitGcm9tOiBLcmlzdG9mZmVyIEVyaWtzc29uIDxza2VAcGttYWIuc2U+CisKK1RoaXMgaXMg YSBzZXQgb2YgZnVuY3Rpb25zIHRvIGJlIHVzZWQgaW4gcHJvZ3JhbXMgdGhhdCBtYXkgYmUgcnVu IHNldC11c2VyLWlkCithbmQvb3Igc2V0LWdyb3VwLWlkLiBUaGV5IGhhbmRsZSBib3RoIHRoZSBj YXNlIHdoZXJlIHRoZSBwcm9ncmFtIGlzIG5vdCBydW4KK3dpdGggc3VjaCBwcml2aWxlZ2VzIChu b3RoaW5nIHNwZWNpYWwgaGFwcGVucyB0aGVuKSwgYW5kIHRoZSBjYXNlIHdoZXJlIG9uZQorb3Ig Ym90aCBvZiB0aGVzZSBzZXQtaWQgbW9kZXMgYXJlIHVzZWQuICBUaGUgcHJvZ3JhbSBpcyBtYWRl IHRvIHJ1biB3aXRoIHRoZQordXNlcidzIHJlYWwgdXNlciBhbmQgZ3JvdXAgaWRzIG1vc3Qgb2Yg dGhlIHRpbWUsIGV4Y2VwdCBmb3Igd2hlbiBtb3JlCitwcml2aWxlZ2VzIGFyZSBuZWVkZWQuICBE b24ndCBzZXQtdXNlci1pZCB0byAicm9vdCIuCisKK1RoaXMgd29ya3Mgb24gU3lzdGVtIFYgYW5k IFBPU0lYLiAgSW4gQlNELCBpdCBkZXBlbmRzIG9uIHRoZQorInNhdmVkLXNldC11c2VyLWlkIiBm ZWF0dXJlLgorKi8KKworI2RlZmluZSBVSURfUk9PVCAwCQkJLyogUm9vdCB1c2VyIGFuZCBncm91 cCBpZHMgKi8KKyNkZWZpbmUgR0lEX1JPT1QgMAorCisvKgorICBUaGUgZm9sbG93aW5nIGNvZGUg ZGVmaW5lcyB0aGUgc3ltYm9sIFNFVEVVSUQgZm9yIFVOSVggc3lzdGVtcyBiYXNlZAorICBvbiBC U0Q0LjQgKGVpdGhlciAtRW5jdW1iZXJlZCBvciAtTGl0ZSkuICBUaGlzIHByb2dyYW0gd2lsbCB0 aGVuIHVzZQorICBzZXRldWlkKCkgYW5kIHNldGVnaWQoKSBpbnN0ZWFkIG9mIHNldHVpZCgpIGFu ZCBzZXRnaWQoKSwgd2hpY2ggc3RpbGwKKyAgZG9uJ3QgYWxsb3cgYXJiaXRyYXJ5IHN3aXRjaGlu Zy4gIEl0IGFsc28gYXZvaWRzIHNldHJldWlkKCkgYW5kCisgIHNldHJlZ2lkKCksIHdoaWNoIGFy ZSBpbmNsdWRlZCBpbiBCU0Q0LjQgZm9yIGNvbXBhdGliaWxpdHkgb25seSwgYXJlCisgIGluc2Vj dXJlLCBhbmQgcHJpbnQgd2FybmluZ3MgdG8gc3RkZXJyIHVuZGVyIGF0IGxlYXN0IG9uZSBzeXN0 ZW0gKE5ldEJTRAorICAxLjApLiAgTm90ZSB0aGF0IFBPU0lYIHN5c3RlbXMgc2hvdWxkIHN0aWxs IHVzZSBzZXR1aWQoKSBhbmQgc2V0Z2lkKCk7CisgIHRoZSBzZXRldWlkKCkgYW5kIHNldGVnaWQo KSBmdW5jdGlvbnMgYXJlIEJTRDQuNCBleHRlbnNpb25zIHRvIHRoZQorICBQT1NJWCBtb2RlbC4g IE1pa2UgTG9uZyA8bWlrZS5sb25nQGFuYWxvZy5jb20+LCA4Lzk0LgorKi8KKyNpZmRlZiBCU0Q0 NAorI2RlZmluZSBTRVRFVUlECisjZW5kaWYgLyogQlNENDQgKi8KKworLyoKKyAgVGhlIGZvbGxv d2luZyBjb25zdHJ1Y3Rpb24gYXV0b21hdGljYWxseSBkZWZpbmVzIHRoZSBzeW1ib2wgU0VUUkVV SUQgZm9yCisgIFVOSVggdmVyc2lvbnMgYmFzZWQgb24gQmVya2VsZXkgVW5peCA0LjIgYW5kIDQu My4gIElmIHRoaXMgc3ltYm9sIGlzCisgIGRlZmluZWQsIHRoZW4gdGhpcyBwcm9ncmFtIHdpbGwg dXNlIGdldHJldWlkKCkgYW5kIGdldHJlZ2lkKCkgY2FsbHMgaW4KKyAgcHJlZmVyZW5jZSB0byBn ZXR1aWQoKSBhbmQgZ2V0Z2lkKCksIHdoaWNoIGluIEJlcmtlbGV5LWJhc2VkIFVuaXhlcyBkbwor ICBub3QgYWxsb3cgYXJiaXRyYXJ5IHN3aXRjaGluZyBiYWNrIGFuZCBmb3J0aCBvZiByZWFsICYg ZWZmZWN0aXZlIHVpZC4KKyAgVGhpcyBjb25zdHJ1Y3Rpb24gYWxzbyBhbGxvd3MgLURTRVRSRVVJ RCB0byBiZSBwdXQgb24gdGhlIGNjIGNvbW1hbmQgbGluZQorICBmb3IgYW55IHN5c3RlbSB0aGF0 IGhhcyBhbmQgd2FudHMgdG8gdXNlIHNldHJlW3VnXWlkKCkuICBJdCBhbHNvIHByZXZlbnRzCisg IGF1dG9tYXRpYyBkZWZpbml0aW9uIG9mIFNFVFJFVUlEIGlmIC1ETk9TRVRSRVUgaXMgaW5jbHVk ZWQgb24gdGhlIGNjCisgIGNvbW1hbmQgbGluZSAob3Igb3RoZXJ3aXNlIGRlZmluZWQpLgorKi8K KyNpZmRlZiBGVDE4CQkJCS8qIE5vbmUgb2YgdGhpcyBmb3IgRm9ydHVuZS4gKi8KKyNkZWZpbmUg Tk9TRVRSRVUKKyNlbmRpZiAvKiBGVDE4ICovCisKKyNpZmRlZiBBTllCU0QKKyNpZm5kZWYgQlNE MjkKKyNpZm5kZWYgQlNENDEKKyNpZm5kZWYgU0VUUkVVSUQKKyNpZm5kZWYgTk9TRVRSRVUKKyNp Zm5kZWYgU0VURVVJRAorI2RlZmluZSBTRVRSRVVJRAorI2VuZGlmIC8qIFNFVEVVSUQgKi8KKyNl bmRpZiAvKiBOT1NFVFJFVSAqLworI2VuZGlmIC8qIFNFVFJFVUlEICovCisjZW5kaWYgLyogIUJT RDQxICovCisjZW5kaWYgLyogIUJTRDI5ICovCisjZW5kaWYgLyogQU5ZQlNEICovCisKKy8qIFZh cmlhYmxlcyBmb3IgdXNlciBhbmQgZ3JvdXAgSURzLiAqLworCitzdGF0aWMgVUlEX1QgcmVhbHVp ZCA9IChVSURfVCkgLTEsIHByaXZ1aWQgPSAoVUlEX1QpIC0xOworc3RhdGljIEdJRF9UIHJlYWxn aWQgPSAoR0lEX1QpIC0xLCBwcml2Z2lkID0gKEdJRF9UKSAtMTsKKworCisvKiBQIFIgSSBWIF8g SSBOIEkgIC0tICBJbml0aWFsaXplIHByaXZpbGVnZXMgcGFja2FnZSAgKi8KKworLyogQ2FsbGVk IGFzIGVhcmx5IGFzIHBvc3NpYmxlIGluIGEgc2V0LXVpZCBvciBzZXQtZ2lkIHByb2dyYW0gdG8g c3RvcmUgdGhlCisgKiBzZXQtdG8gdWlkIGFuZC9vciBnaWQgYW5kIHN0ZXAgZG93biB0byB0aGUg dXNlcnMgcmVhbCB1aWQgYW5kIGdpZC4gVGhlCisgKiBzdG9yZWQgaWQncyBjYW4gYmUgdGVtcG9y YXJpbHkgcmVzdG9yZWQgKGFsbG93ZWQgaW4gU3lzdGVtIFYpIGR1cmluZworICogb3BlcmF0aW9u cyB0aGF0IHJlcXVpcmUgdGhlIHByaXZpbGVnZS4gIE1vc3Qgb2YgdGhlIHRpbWUsIHRoZSBwcm9n cmFtCisgKiBzaG91bGQgZXhlY3V0ZSBpbiB1bnByaXZpbGlnZWQgc3RhdGUsIHRvIG5vdCBpbXBv c2UgYW55IHNlY3VyaXR5IHRocmVhdC4KKyAqCisgKiBOb3RlOiBEb24ndCBmb3JnZXQgdGhhdCBh Y2Nlc3MoKSBhbHdheXMgdXNlcyB0aGUgcmVhbCBpZDpzIHRvIGRldGVybWluZQorICogZmlsZSBh Y2Nlc3MsIGV2ZW4gd2l0aCBwcml2aWxlZ2VzIHJlc3RvcmVkLgorICoKKyAqIFJldHVybnMgYW4g ZXJyb3IgbWFzaywgd2l0aCBlcnJvciB2YWx1ZXMgb3I6ZWQgdG9nZXRoZXI6CisgKiAgIDEgaWYg c2V0dWlkKCkgZmFpbHMsCisgKiAgIDIgaWYgc2V0Z2lkKCkgZmFpbHMsIGFuZAorICogICA0IGlm IHRoZSBwcm9ncmFtIGlzIHNldC11c2VyLWlkIHRvICJyb290Iiwgd2hpY2ggY2FuJ3QgYmUgaGFu ZGxlZC4KKyAqCisgKiBPbmx5IHRoZSByZXR1cm4gdmFsdWUgMCBpbmRpY2F0ZXMgcmVhbCBzdWNj ZXNzLiBJbiBjYXNlIG9mIGZhaWx1cmUsCisgKiB0aG9zZSBwcml2aWxlZ2VzIHRoYXQgY291bGQg YmUgcmVkdWNlZCBoYXZlIGJlZW4sIGF0IGxlYXN0LCBidXQgdGhlCisgKiBwcm9ncmFtIHNob3Vs ZCBiZSBhYm9ydGVkIG5vbmUtdGhlLWxlc3MuCisgKgorICogQWxzbyBub3RlIHRoYXQgdGhlc2Ug ZnVuY3Rpb25zIGRvIG5vdCBleHBlY3QgdGhlIHVpZCBvciBnaWQgdG8gY2hhbmdlCisgKiB3aXRo b3V0IHRoZWlyIGtub3dpbmcuIEl0IG1heSB3b3JrIGlmIGl0IGlzIG9ubHkgZG9uZSB0ZW1wb3Jh cmlseSwgYnV0CisgKiB5b3UncmUgb24geW91ciBvd24uCisgKi8KK2ludAorcHJpdl9pbmkoKSB7 CisgICAgaW50IGVyciA9IDA7CisKKyNpZm5kZWYgSEFWRV9MT0NLREVWCisKKyAgICAvKiBTYXZl IHJlYWwgSUQ6cy4gKi8KKyAgICByZWFsdWlkID0gZ2V0dWlkKCk7CisgICAgcmVhbGdpZCA9IGdl dGdpZCgpOworCisgICAgLyogU2F2ZSBjdXJyZW50IGVmZmVjdGl2ZSBJRDpzLCB0aG9zZSBzZXQg dG8gYXQgcHJvZ3JhbSBleGVjLiAqLworICAgIHByaXZ1aWQgPSBnZXRldWlkKCk7CisgICAgcHJp dmdpZCA9IGdldGVnaWQoKTsKKworICAgIC8qIElmIHJ1bm5pbmcgc2V0LXVpZCwgZ28gZG93biB0 byByZWFsIHVpZCwgb3RoZXJ3aXNlIHJlbWVtYmVyIHRoYXQKKyAgICAgKiBubyBwcml2aWxlZ2Vk IHVpZCBpcyBhdmFpbGFibGUuCisgICAgICoKKyAgICAgKiBFeGNlcHRpb25zOgorICAgICAqCisg ICAgICogMSkgSWYgdGhlIHJlYWwgdWlkIGlzIGFscmVhZHkgInJvb3QiIGFuZCB0aGUgc2V0LXVp ZCB1aWQgKHRoZQorICAgICAqIGluaXRpYWwgZWZmZWN0aXZlIHVpZCkgaXMgbm90ICJyb290Iiwg dGhlbiB3ZSB3b3VsZCBoYXZlIHRyb3VibGUKKyAgICAgKiBpZiB3ZSB3ZW50ICJkb3duIiB0byAi cm9vdCIgaGVyZSwgYW5kIHRoZW4gdGVtcG9yYXJpbHkgYmFjayB0byB0aGUKKyAgICAgKiBzZXQt dWlkIHVpZCAobm90ICJyb290IikgYW5kIHRoZW4gYWdhaW4gdHJpZWQgdG8gYmVjb21lICJyb290 Ii4gSQorICAgICAqIHRoaW5rIHRoZSAic2F2ZWQgc2V0LXVpZCIgaXMgbG9zdCB3aGVuIGNoYW5n aW5nIHVpZCBmcm9tIGVmZmVjdGl2ZQorICAgICAqIHVpZCAicm9vdCIsIHdoaWNoIGNoYW5nZXMg YWxsIHVpZCwgbm90IG9ubHkgdGhlIGVmZmVjdGl2ZSB1aWQuIEJ1dAorICAgICAqIGluIHRoaXMg c2l0dWF0aW9uLCB3ZSBjYW4gc2ltcGx5IGdvIHRvICJyb290IiBhbmQgc3RheSB0aGVyZSBhbGwK KyAgICAgKiB0aGUgdGltZS4gVGhhdCBzaG91bGQgZ2l2ZSBzdWZmaWNpZW50IHByaXZpbGVnZSAo dW5kZXJzdGF0ZW1lbnQhKSwKKyAgICAgKiBhbmQgZ2l2ZSB0aGUgcmlnaHQgdWlkcyBmb3Igc3Vi cHJvY2Vzc2VzLgorICAgICAqCisgICAgICogMikgSWYgdGhlIHNldC11aWQgKHRoZSBpbml0aWFs IGVmZmVjdGl2ZSB1aWQpIGlzICJyb290IiwgYW5kIHdlCisgICAgICogY2hhbmdlIHVpZCB0byB0 aGUgcmVhbCB1aWQsIHdlIGNhbid0IGNoYW5nZSBpdCBiYWNrIHRvICJyb290IiB3aGVuCisgICAg ICogd2UgbmVlZCB0aGUgcHJpdmlsZWdlLCBmb3IgdGhlIHNhbWUgcmVhc29uIGFzIGluIDEpLiBU aHVzLCB3ZSBjYW4ndAorICAgICAqIGhhbmRsZSBwcm9ncmFtcyB0aGF0IGFyZSBzZXQtdXNlci1p ZCB0byAicm9vdCIgYXQgYWxsLiBUaGUgcHJvZ3JhbQorICAgICAqIHNob3VsZCBiZSBzdG9wcGVk LiAgVXNlIHNvbWUgb3RoZXIgdWlkLiAgInJvb3QiIGlzIHByb2JhYmx5IHRvbworICAgICAqIHBy aXZpbGVnZWQgZm9yIHN1Y2ggdGhpbmdzLCBhbnl3YXkuIChUaGUgdWlkIGlzIHJldmVydGVkIHRv IHRoZQorICAgICAqIHJlYWwgdWlkIHVudGlsIHRlcm1pbmF0aW9uLikKKyAgICAgKgorICAgICAq IFRoZXNlIHR3byBleGNlcHRpb25zIGhhdmUgdGhlIGVmZmVjdCB0aGF0IHRoZSAicm9vdCIgdWlk IHdpbGwgbmV2ZXIKKyAgICAgKiBiZSBvbmUgb2YgdGhlIHR3byB1aWRzIHRoYXQgYXJlIGJlaW5n IHN3aXRjaGVkIGJldHdlZW4sIHdoaWNoIGFsc28KKyAgICAgKiBtZWFucyB3ZSBkb24ndCBoYXZl IHRvIGNoZWNrIGZvciBzdWNoIGNhc2VzIGluIHRoZSBzd2l0Y2hpbmcKKyAgICAgKiBmdW5jdGlv bnMuCisgICAgICoKKyAgICAgKiBOb3RlIHRoYXQgZXhjZXB0aW9uIDEpIGlzIGhhbmRsZWQgYnkg dGhlc2Ugcm91dGluZXMgKGJ5IGNvbnN0YW50bHkKKyAgICAgKiBydW5uaW5nIHdpdGggdWlkICJy b290Iiwgd2hpbGUgZXhjZXB0aW9uIDIpIGlzIGEgc2VyaW91cyBlcnJvciwgYW5kCisgICAgICog aXMgbm90IHByb3ZpZGVkIGZvciBhdCBhbGwgaW4gdGhlIHN3aXRjaGluZyBmdW5jdGlvbnMuCisg ICAgICovCisgICAgaWYgKHJlYWx1aWQgPT0gcHJpdnVpZCkKKwlwcml2dWlkID0gKFVJRF9UKSAt MTsJCS8qIE5vdCBydW5uaW5nIHNldC11c2VyLWlkLiAqLworCisgICAgLyogSWYgcnVubmluZyBz ZXQtZ2lkLCBnbyBkb3duIHRvIHJlYWwgZ2lkLCBvdGhlcndpc2UgcmVtZW1iZXIgdGhhdAorICAg ICAqIG5vIHByaXZpbGVnZWQgZ2lkIGlzIGF2YWlsYWJsZS4KKyAgICAgKgorICAgICAqIFRoZXJl IGFyZSBubyBleGNlcHRpb24gbGlrZSB0aGVyZSBpcyBmb3IgdGhlIHVzZXIgaWQsIHNpbmNlIHRo ZXJlCisgICAgICogaXMgbm8gZ3JvdXAgaWQgdGhhdCBpcyBwcml2aWxlZ2VkIGluIHRoZSBtYW5u ZXIgb2YgdWlkICJyb290Ii4KKyAgICAgKiBUaGVyZSBjb3VsZCBiZSBlcXVpdmFsZW50IHByb2Js ZW1zIGZvciBncm91cCBjaGFuZ2luZyBpZiB0aGUKKyAgICAgKiBwcm9ncmFtIHNvbWV0aW1lcyBy YW4gd2l0aCB1aWQgInJvb3QiIGFuZCBzb21ldGltZXMgbm90LCBidXQKKyAgICAgKiB0aGF0IGlz IGFscmVhZHkgYXZvaWRlZCBhcyBleHBsYWluZWQgYWJvdmUuCisgICAgICoKKyAgICAgKiBUaHVz IHdlIGNhbiBleHBlY3QgYWx3YXlzIHRvIGJlIGFibGUgdG8gc3dpdGNoIHRvIHRoZSAic2F2ZWQg c2V0LQorICAgICAqIGdpZCIgd2hlbiB3ZSB3YW50LCBhbmQgYmFjayB0byB0aGUgcmVhbCBnaWQg YWdhaW4uIFlvdSBtYXkgYWxzbworICAgICAqIGRyYXcgdGhlIGNvbmNsdXNpb24gdGhhdCBzZXQt Z2lkIHByb3ZpZGVzIGZvciBmZXdlciBoYXNzbGVzIHRoYW4KKyAgICAgKiBzZXQtdWlkLgorICAg ICAqLworCisjaWZkZWYgU1VJRERFQlVHCisgICAgZnByaW50ZihzdGRlcnIsIlVJRF9ST09UPSVk XG4iLFVJRF9ST09UKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwicmVhbHVpZD0lZFxuIixyZWFsdWlk KTsKKyAgICBmcHJpbnRmKHN0ZGVyciwicHJpdnVpZD0lZFxuIixwcml2dWlkKTsKKyNlbmRpZiAv KiBTVUlEREVCVUcgKi8KKworICAgIGlmIChyZWFsZ2lkID09IHByaXZnaWQpCQkvKiBJZiBub3Qg cnVubmluZyBzZXQtdXNlci1pZCwgKi8KKyAgICAgIHByaXZnaWQgPSAoR0lEX1QpIC0xOwkJLyog IHJlbWVtYmVyIGl0IHRoaXMgd2F5LiAqLworCisgICAgZXJyID0gcHJpdl9vZmYoKTsJCQkvKiBU dXJuIG9mZiBzZXR1aWQgcHJpdmlsZWdlLiAqLworCisgICAgaWYgKHByaXZ1aWQgPT0gVUlEX1JP T1QpCQkvKiBJZiBzZXR1aWQgdG8gcm9vdCwgKi8KKyAgICAgIGVyciB8PSA0OwkJCQkvKiByZXR1 cm4gdGhpcyBlcnJvci4gKi8KKworICAgIGlmIChyZWFsdWlkID09IFVJRF9ST09UKSB7CQkvKiBJ ZiByZWFsIGlkIGlzIHJvb3QsICovCisJcHJpdnVpZCA9IChVSURfVCkgLTE7CQkvKiBzdGF5IHJv b3QgYXQgYWxsIHRpbWVzLiAqLworI2lmZGVmIEFUVDczMDAKKwkvKiBJZiBLZXJtaXQgaW5zdGFs bGVkIFNVSUQgdXVjcCBhbmQgdXNlciBpcyBydW5uaW5nIGFzIHJvb3QgKi8KKwllcnIgJj0gfjE7 CQkJLyogU3lzdGVtIFYgUjAgZG9lcyBub3Qgc2F2ZSBVSUQgKi8KKyNlbmRpZiAvKiBBVFQ3MzAw ICovCisgICAgfQorI2VuZGlmIC8qIEhBVkVfTE9DS0RFViAqLworICAgIHJldHVybihlcnIpOwor fQorCisKKy8qIE1hY3JvcyBmb3IgaGlkaW5nIHRoZSBkaWZmZXJlbmNlcyBpbiBVSUQvR0lEIHNl dHRpbmcgYmV0d2VlbiB2YXJpb3VzIFVuaXgKKyAqIHN5c3RlbXMuIFRoZXNlIG1hY3JvcyBzaG91 bGQgYWx3YXlzIGJlIGNhbGxlZCB3aXRoIGJvdGggdGhlIHByaXZpbGVnZWQgSUQKKyAqIGFuZCB0 aGUgbm9uLXByaXZpbGVnZWQgSUQuIFRoZSBvbmUgaW4gdGhlIHNlY29uZCBhcmd1bWVudCwgd2ls bCBiZWNvbWUgdGhlCisgKiBlZmZlY3RpdmUgSUQuIFRoZSBvbmUgaW4gdGhlIGZpcnN0IGFyZ3Vt ZW50IHdpbGwgYmUgcmV0YWluZWQgZm9yIGxhdGVyCisgKiByZXRyaWV2YWwuCisgKi8KKyNpZmRl ZiBTRVRSRVVJRAorI2lmZGVmIFNBVkVEVUlECisvKiBPbiBCU0Qgc3lzdGVtcyB3aXRoIHRoZSBz YXZlZC1VSUQgZmVhdHVyZSwgd2UganVzdCBqdWdnbGUgdGhlIGVmZmVjdGl2ZQorICogVUlEIGJh Y2sgYW5kIGZvcnRoLCBhbmQgbGVhdmUgdGhlIHJlYWwgVUlEIGF0IGl0cyB0cnVlIHZhbHVlLiAg VGhlIGtlcm5lbAorICogYWxsb3dzIHN3aXRjaGluZyB0byBib3RoIHRoZSBjdXJyZW50IHJlYWwg VUlELCB0aGUgZWZmZWN0aXZlIFVJRCwgYW5kIHRoZQorICogVUlEIHdoaWNoIHRoZSBwcm9ncmFt IGlzIHNldC1VSUQgdG8uICBUaGUgc2F2ZWQgc2V0LVVJRCBhbHdheXMgaG9sZHMgdGhlCisgKiBw cml2aWxlZ2VkIFVJRCBmb3IgdXMsIGFuZCB0aGUgcmVhbCBVSUQgd2lsbCBhbHdheXMgYmUgdGhl IG5vbi1wcml2aWxlZ2VkLAorICogYW5kIHdlIGNhbiBmcmVlbHkgY2hvb3NlIG9uZSBvZiB0aGVt IGZvciB0aGUgZWZmZWN0aXZlIFVJRCBhdCBhbnkgdGltZS4KKyAqLworI2RlZmluZSBzd2l0Y2h1 aWQoaGlkZGVuLGFjdGl2ZSkgc2V0cmV1aWQoIChVSURfVCkgLTEsIGFjdGl2ZSkKKyNkZWZpbmUg c3dpdGNoZ2lkKGhpZGRlbixhY3RpdmUpIHNldHJlZ2lkKCAoR0lEX1QpIC0xLCBhY3RpdmUpCisK KyNlbHNlICAgLyogU0VUUkVVSUQsIVNBVkVEVUlEICovCisKKy8qIE9uIHN5c3RlbXMgd2l0aCBz ZXRyZVhpZCgpIGJ1dCB3aXRob3V0IHRoZSBzYXZlZC1VSUQgZmVhdHVyZSwgbm90YWJseQorICog QlNEIDQuMiwgd2Ugc3dhcCB0aGUgcmVhbCBhbmQgZWZmZWN0aXZlIFVJRHMgZWFjaCB0aW1lLiAg SXQncworICogdGhlIGVmZmVjdGl2ZSBVSUQgdGhhdCB3ZSBhcmUgaW50ZXJlc3RlZCBpbiwgYnV0 IHdlIGhhdmUgdG8gcmV0YWluIHRoZQorICogdW51c2VkIFVJRCBzb21ld2hlcmUgdG8gZW5hYmxl IHVzIHRvIHJlc3RvcmUgaXQgbGF0ZXIsIGFuZCB3ZSBkbyB0aGlzCisgKiBpbiB0aGUgcmVhbCBV SUQuICBUaGUga2VybmVsIG9ubHkgYWxsb3dzIHN3aXRjaGluZyB0byBlaXRoZXIgdGhlIGN1cnJl bnQKKyAqIHJlYWwgb3IgdGhlIGVmZmVjdGl2ZSBVSUQsIHVubGVzcyB5b3UncmUgInJvb3QiLgor ICovCisjZGVmaW5lIHN3aXRjaHVpZChoaWRkZW4sYWN0aXZlKQlzZXRyZXVpZChoaWRkZW4sYWN0 aXZlKQorI2RlZmluZSBzd2l0Y2hnaWQoaGlkZGVuLGFjdGl2ZSkJc2V0cmVnaWQoaGlkZGVuLGFj dGl2ZSkKKyNlbmRpZgorCisjZWxzZSAvKiAhU0VUUkVVSUQsICFTQVZFRFVJRCAqLworCisjaWZk ZWYgU0VURVVJRAorLyoKKyAgQlNEIDQuNCB3b3JrcyBzaW1pbGFybHkgdG8gU3lzdGVtIFYgYW5k IFBPU0lYIChzZWUgYmVsb3cpLCBidXQgdXNlcworICBzZXRlWGlkKCkgaW5zdGVhZCBvZiBzZXRY aWQoKSB0byBjaGFuZ2UgZWZmZWN0aXZlIElEcy4gIEluIGFkZGl0aW9uLCB0aGUKKyAgc2V0ZVhp ZCgpIGZ1bmN0aW9ucyB3b3JrIHRoZSBzYW1lIGZvciAicm9vdCIgYXMgZm9yIG90aGVyIHVzZXJz LgorKi8KKyNkZWZpbmUgc3dpdGNodWlkKGhpZGRlbixhY3RpdmUpCXNldGV1aWQoYWN0aXZlKQor I2RlZmluZSBzd2l0Y2hnaWQoaGlkZGVuLGFjdGl2ZSkJc2V0ZWdpZChhY3RpdmUpCisKKyNlbHNl IC8qICFTRVRFVUlEICovCisKKy8qIE9uIFN5c3RlbSBWIGFuZCBQT1NJWCwgdGhlIG9ubHkgdGhp bmcgd2UgY2FuIGNoYW5nZSBpcyB0aGUgZWZmZWN0aXZlIFVJRAorICogKHVubGVzcyB0aGUgY3Vy cmVudCBlZmZlY3RpdmUgVUlEIGlzICJyb290IiwgYnV0IGluaXRzdWlkKCkgYXZvaWRzIHRoYXQg Zm9yCisgKiB1cykuICBUaGUga2VybmVsIGFsbG93cyBzd2l0Y2hpbmcgdG8gdGhlIGN1cnJlbnQg cmVhbCBVSUQgb3IgdG8gdGhlIHNhdmVkCisgKiBzZXQtVUlELiAgVGhlc2UgYXJlIGFsd2F5cyBz ZXQgdG8gdGhlIG5vbi1wcml2aWxlZ2VkIFVJRCBhbmQgdGhlIHByaXZpbGVnZWQKKyAqIFVJRCwg cmVzcGVjdGl2ZWx5LCBhbmQgd2Ugb25seSBjaGFuZ2UgdGhlIGVmZmVjdGl2ZSBVSUQuICBUaGlz IGJyZWFrcyBpZgorICogdGhlIGN1cnJlbnQgZWZmZWN0aXZlIFVJRCBpcyAicm9vdCIsIHRob3Vn aCwgYmVjYXVzZSBmb3IgInJvb3QiIHNldHVpZC9naWQKKyAqIGJlY29tZXMgbW9yZSBwb3dlcmZ1 bCwgd2hpY2ggaXMgd2h5IGluaXRzdWlkKCkgdHJlYXRzICJyb290IiBzcGVjaWFsbHkuCisgKiBO b3RlOiBUaGF0IHNwZWNpYWwgdHJlYXRtZW50IG1heWJlIGNvdWxkIGJlIGlnbm9yZWQgZm9yIEJT RD8gIE5vdGU6IEZvcgorICogc3lzdGVtcyB0aGF0IGRvbid0IGZpdCBhbnkgb2YgdGhlc2UgZm91 ciBjYXNlcywgd2Ugc2ltcGx5IGNhbid0IHN1cHBvcnQKKyAqIHNldC1VSUQuCisgKi8KKyNkZWZp bmUgc3dpdGNodWlkKGhpZGRlbixhY3RpdmUpCXNldHVpZChhY3RpdmUpCisjZGVmaW5lIHN3aXRj aGdpZChoaWRkZW4sYWN0aXZlKQlzZXRnaWQoYWN0aXZlKQorCisjZW5kaWYgLyogU0VURVVJRCAq LworI2VuZGlmIC8qIFNFVFJFVUlEICovCisKKworLyogUCBSIEkgViBfIE8gTiAgLS0gIFR1cm4g b24gdGhlIHNldHVpZCBhbmQvb3Igc2V0Z2lkICovCisKKy8qIEdvIHRvIHRoZSBwcml2aWxlZ2Vk IHVpZCAoZ2lkKSB0aGF0IHRoZSBwcm9ncmFtIGlzIHNldC11c2VyLWlkCisgKiAoc2V0LWdyb3Vw LWlkKSB0bywgdW5sZXNzIHRoZSBwcm9ncmFtIGlzIHJ1bm5pbmcgdW5wcml2aWxlZ2VkLgorICog SWYgc2V0dWlkKCkgZmFpbHMsIHJldHVybiB2YWx1ZSB3aWxsIGJlIDEuIElmIGdldHVpZCgpIGZh aWxzIGl0CisgKiB3aWxsIGJlIDIuICBSZXR1cm4gaW1tZWRpYXRlbHkgYWZ0ZXIgZmlyc3QgZmFp bHVyZSwgYW5kIHRoZSBmdW5jdGlvbgorICogdHJpZXMgdG8gcmVzdG9yZSBhbnkgcGFydGlhbCB3 b3JrIGRvbmUuICBSZXR1cm5zIDAgb24gc3VjY2Vzcy4KKyAqIEdyb3VwIGlkIGlzIGNoYW5nZWQg Zmlyc3QsIHNpbmNlIGl0IGlzIGxlc3Mgc2VyaW91cyB0aGFuIHVzZXIgaWQuCisgKi8KK2ludAor cHJpdl9vbigpIHsKKyNpZm5kZWYgSEFWRV9MT0NLREVWCisgICAgaWYgKHByaXZnaWQgIT0gKEdJ RF9UKSAtMSkKKyAgICAgIGlmIChzd2l0Y2hnaWQocmVhbGdpZCxwcml2Z2lkKSkKKyAgICAgICAg cmV0dXJuKDIpOworCisgICAgaWYgKHByaXZ1aWQgIT0gKFVJRF9UKSAtMSkKKyAgICAgIGlmIChz d2l0Y2h1aWQocmVhbHVpZCxwcml2dWlkKSkgeworCSAgaWYgKHByaXZnaWQgIT0gKEdJRF9UKSAt MSkKKwkgICAgc3dpdGNoZ2lkKHByaXZnaWQscmVhbGdpZCk7CisJICByZXR1cm4oMSk7CisgICAg ICB9CisjZW5kaWYgLyogSEFWRV9MT0NLREVWICovCisgICAgcmV0dXJuKDApOworfQorCisvKiBQ IFIgSSBWIF8gTyBGIEYgIC0tICBUdXJuIG9uIHRoZSByZWFsIHVpZCBhbmQgZ2lkICovCisKKy8q IFJldHVybiB0byB0aGUgdW5wcml2aWxlZ2VkIHVpZCAoZ2lkKSBhZnRlciBhbiB0ZW1wb3Jhcnkg dmlzaXQgdG8KKyAqIHByaXZpbGVnZWQgc3RhdHVzLCB1bmxlc3MgdGhlIHByb2dyYW0gaXMgcnVu bmluZyB3aXRob3V0IHNldC11c2VyLWlkCisgKiAoc2V0LWdyb3VwLWlkKS4gUmV0dXJucyAxIGZv ciBmYWlsdXJlIGluIHNldHVpZCgpIGFuZCAyIGZvciBmYWlsdXJlCisgKiBpbiBzZXRnaWQoKSBv cjplZCB0b2dldGhlci4gVGhlIGZ1bmN0aW9ucyB0cmllcyB0byByZXR1cm4gYm90aCB1aWQKKyAq IGFuZCBnaWQgdG8gdW5wcml2aWxlZ2VkIHN0YXRlLCByZWdhcmRsZXNzIG9mIGVycm9ycy4gUmV0 dXJucyAwIG9uCisgKiBzdWNjZXNzLgorICovCitpbnQKK3ByaXZfb2ZmKCkgeworICAgIGludCBl cnIgPSAwOworI2lmbmRlZiBIQVZFX0xPQ0tERVYKKyAgICBpZiAocHJpdnVpZCAhPSAoVUlEX1Qp IC0xKQorICAgICAgIGlmIChzd2l0Y2h1aWQocHJpdnVpZCxyZWFsdWlkKSkKKwkgIGVyciB8PSAx OworCisgICAgaWYgKHByaXZnaWQgIT0gKEdJRF9UKSAtMSkKKyAgICAgICBpZiAoc3dpdGNoZ2lk KHByaXZnaWQscmVhbGdpZCkpCisJZXJyIHw9IDI7CisjZW5kaWYgLyogSEFWRV9MT0NLREVWICov CisgICAgcmV0dXJuKGVycik7Cit9CisKKy8qIFR1cm4gb2ZmIHByaXZpbGVnZSBwZXJtYW5lbnRs eS4gIE5vIGdvaW5nIGJhY2suICBUaGlzIGlzIG5lY2Vzc2FyeSBiZWZvcmUKKyAqIGEgZm9yaygp IG9uIEJTRDQzIG1hY2hpbmVzIHRoYXQgZG9uJ3Qgc2F2ZSB0aGUgc2V0VUlEIG9yIHNldEdJRCwg YmVjYXVzZQorICogd2Ugc3dhcCB0aGUgcmVhbCBhbmQgZWZmZWN0aXZlIGlkcywgYW5kIHdlIGRv bid0IHdhbnQgdG8gbGV0IHRoZSBmb3JrZWQKKyAqIHByb2Nlc3Mgc3dhcCB0aGVtIGFnYWluIGFu ZCBnZXQgdGhlIHByaXZpbGVnZSBiYWNrLiBJdCB3aWxsIHdvcmsgb24gb3RoZXIKKyAqIG1hY2hp bmVzIHRvbywgc3VjaCB0aGF0IHlvdSBjYW4gcmVseSBvbiBpdHMgZWZmZWN0IGFsd2F5cyBiZWlu ZyB0aGUgc2FtZSwKKyAqIGZvciBpbnN0YW5jZSwgZXZlbiB3aGVuIHlvdSdyZSBpbiBwcml2X29u KCkgc3RhdGUgd2hlbiB0aGlzIGlzIGNhbGxlZC4KKyAqIChXZWxsLCB0aGF0IHBhcnQgYWJvdXQg InBlcm1hbmVudCIgaXMgb24gU3lzdGVtIFYgb25seSB0cnVlIGlmIHlvdSBmb2xsb3cKKyAqIHRo aXMgd2l0aCBhIGNhbGwgdG8gZXhlYygpLCBidXQgdGhhdCdzIHdoYXQgd2Ugd2FudCBpdCBmb3Ig YW55d2F5LikKKyAqIEFkZGVkIGJ5IERlYW4gTG9uZyAtLSBkbG9uZ0BtaWRnYXJkLnVjc2MuZWR1 CisgKi8KK2ludAorcHJpdl9jYW4oKSB7CisjaWZuZGVmIEhBVkVfTE9DS0RFVgorI2lmZGVmIFNF VFJFVUlECisgICAgaW50IGVyciA9IDA7CisgICAgaWYgKHByaXZ1aWQgIT0gKFVJRF9UKSAtMSkK KyAgICAgICBpZiAoc2V0cmV1aWQocmVhbHVpZCxyZWFsdWlkKSkKKwkgIGVyciB8PSAxOworCisg ICAgaWYgKHByaXZnaWQgIT0gKEdJRF9UKSAtMSkKKyAgICAgICAgaWYgKHNldHJlZ2lkKHJlYWxn aWQscmVhbGdpZCkpCisgCSAgZXJyIHw9IDI7CisKKyAgICByZXR1cm4oZXJyKTsKKworI2Vsc2UK KyNpZmRlZiBTRVRFVUlECisgICAgaW50IGVyciA9IDA7CisgICAgaWYgKHByaXZ1aWQgIT0gKFVJ RF9UKSAtMSkKKwlpZiAoc2V0dWlkKHJlYWx1aWQpKSB7CisJICAgIGRlYnVnKEYxMDEsInNldHVp ZCBmYWlsZWQiLCIiLGVycm5vKTsKKwkgICAgZXJyIHw9IDE7CisJICAgIGRlYnVnKEYxMDEsInJ1 aWQiLCIiLGdldHVpZCgpKTsKKwkgICAgZGVidWcoRjEwMSwiZXVpZCIsIiIsZ2V0ZXVpZCgpKTsK Kwl9CisgICAgZGVidWcoRjEwMSwic2V0dWlkIiwiIixyZWFsdWlkKTsKKyAgICBpZiAocHJpdmdp ZCAhPSAoR0lEX1QpIC0xKQorICAgICAgICBpZiAoc2V0Z2lkKHJlYWxnaWQpKSB7CisJICAgIGRl YnVnKEYxMDEsInNldGdpZCBmYWlsZWQiLCIiLGVycm5vKTsKKwkgICAgZXJyIHw9IDI7CisJICAg IGRlYnVnKEYxMDEsInJnaWQiLCIiLGdldGdpZCgpKTsKKwkgICAgZGVidWcoRjEwMSwiZWdpZCIs IiIsZ2V0ZWdpZCgpKTsKKwl9CisgICAgZGVidWcoRjEwMSwic2V0Z2lkIiwiIixyZWFsZ2lkKTsK KyAgICByZXR1cm4oZXJyKTsKKyNlbHNlCisgICAgLyogRWFzeSB3YXkgb2YgdXNpbmcgc2V0dWlk KCkvc2V0Z2lkKCkgaW5zdGVhZCBvZiBzZXRyZXVpZCgpL3NldHJlZ2lkKCkuKi8KKyAgICByZXR1 cm4ocHJpdl9vZmYoKSk7CisjZW5kaWYgLyogU0VURVVJRCAqLworI2VuZGlmIC8qIFNFVFJFVUlE ICovCisjZWxzZQorICAgIHJldHVybigwKTsKKyNlbmRpZiAvKiBIQVZFX0xPQ0tERVYgKi8KK30K KworLyogUCBSIEkgViBfIE8gUCBOICAtLSAgRm9yIG9wZW5pbmcgcHJvdGVjdGVkIGZpbGVzIG9y IGRldmljZXMuICovCisKK2ludAorcHJpdl9vcG4obmFtZSwgbW9kZXMpIGNoYXIgKm5hbWU7IGlu dCBtb2RlczsgeworICAgIGludCB4OworICAgIHByaXZfb24oKTsJCQkJLyogVHVybiBwcml2aWxl Z2VzIG9uICovCisgICAgZGVidWcoRjExMSwicHJpdl9vcG4iLG5hbWUsbW9kZXMpOworICAgIGVy cm5vID0gMDsKKyAgICB4ID0gb3BlbihuYW1lLCBtb2Rlcyk7CQkvKiBUcnkgdG8gb3BlbiB0aGUg ZGV2aWNlICovCisgICAgZGVidWcoRjEwMSwicHJpdl9vcG4gcmVzdWx0IiwiIix4KTsKKyAgICBk ZWJ1ZyhGMTAxLCJwcml2X29wbiBlcnJubyIsIiIsZXJybm8pOworICAgIHByaXZfb2ZmKCk7CQkJ CS8qIFR1cm4gcHJpdmlsZWdlcyBvZmYgKi8KKyAgICByZXR1cm4oeCk7CQkJCS8qIFJldHVybiBv cGVuJ3MgcmV0dXJuIGNvZGUgKi8KK30KKworLyogIFAgUiBJIFYgXyBDIEggSyAgLS0gIENoZWNr IHByaXZpbGVnZXMuICAqLworCisvKiAgVHJ5IHRvIHR1cm4gdGhlbSBvZmYuICBJZiB0dXJuaW5n IHRoZW0gb2ZmIGRpZCBub3Qgc3VjY2VlZCwgY2FuY2VsIHRoZW0gKi8KKworaW50Citwcml2X2No aygpIHsKKyAgICBpbnQgeCwgeSA9IDA7CisgICAgeCA9IHByaXZfb2ZmKCk7CQkJLyogVHVybiBv ZmYgcHJpdnMuICovCisgICAgaWYgKHggIT0gMCB8fCBnZXR1aWQoKSA9PSBwcml2dWlkIHx8IGdl dGV1aWQoKSA9PSBwcml2dWlkKQorICAgICAgeSA9IHByaXZfY2FuKCk7CisgICAgaWYgKHggIT0g MCB8fCBnZXRnaWQoKSA9PSBwcml2Z2lkIHx8IGdldGVnaWQoKSA9PSBwcml2Z2lkKQorICAgICAg eSA9IHkgfCBwcml2X2NhbigpOworICAgIHJldHVybih5KTsKK30KKworVUlEX1QKK3JlYWxfdWlk KCkgeworICAgIHJldHVybihyZWFsdWlkKTsKK30KKworVk9JRAordHRpbW9mZigpIHsJCQkJLyog VHVybiBvZmYgYW55IHRpbWVyIGludGVycnVwdHMgKi8KKyAgICAvKiBpbnQgeHg7ICovCisvKgor ICBBcyBvZiA1QSgxODMpLCB3ZSBzZXQgU0lHQUxSTSB0byBTSUdfSUdOICh0byBpZ25vcmUgYWxh cm1zKSByYXRoZXIgdGhhbiB0bworICBTSUdfREZMICh0byBjYXRjaCBhbGFybXMsIG9yIGlmIHRo ZXJlIGlzIG5vIGhhbmRsZXIsIHRvIGV4aXQpLiAgVGhpcyBpcyB0bworICBjdXJlIChtYXNrLCBy ZWFsbHkpIGEgZGVlcGVyIHByb2JsZW0gd2l0aCBzdHJheSBhbGFybXMgdGhhdCBvY2N1cnMgb24g c29tZQorICBzeXN0ZW1zLCBwb3NzaWJseSBoYXZpbmcgdG8gZG8gd2l0aCBzbGVlcCgpLCB0aGF0 IGNhdXNlZCBjb3JlIGR1bXBzLiAgSXQKKyAgc2hvdWxkIGJlIE9LIHRvIGRvIHRoaXMsIGJlY2F1 c2Ugbm8gY29kZSBpbiB0aGlzIG1vZHVsZSB1c2VzIG5lc3RlZCBhbGFybXMuCisgIChCdXQgd2Ug c3RpbGwgaGF2ZSB0byB3YXRjaCBvdXQgZm9yIFNDUklQVCBhbmQgRElBTC4uLikKKyovCisgICAg LyogeHggPSAqLyBhbGFybSgwKTsKKyAgICAvKiBkZWJ1ZyhGMTAxLCJ0dGltb2ZmIGFsYXJtIiwi Iix4eCk7ICovCisgICAgaWYgKHNhdmFsKSB7CQkJLyogUmVzdG9yZSBhbnkgcHJldmlvdXMgKi8K KwlzaWduYWwoU0lHQUxSTSxzYXZhbCk7CQkvKiBhbGFybSBoYW5kbGVyLiAqLworCS8qIGRlYnVn KEYxMDEsInR0aW1vZmYgYWxhcm0gcmVzdG9yaW5nIHNhdmFsIiwiIixzYXZhbCk7ICovCisJc2F2 YWwgPSBOVUxMOworICAgIH0gZWxzZSB7CisJc2lnbmFsKFNJR0FMUk0sU0lHX0lHTik7CS8qIFVz ZWQgdG8gYmUgU0lHX0RGTCAqLworCS8qIGRlYnVnKEYxMDAsInR0aW1vZmYgYWxhcm0gU0lHX0lH TiIsIiIsMCk7ICovCisgICAgfQorfQorCisKK2ludAordHRfaXNfc2VjdXJlKCkgewkgIC8qIFRl bGxzIHdoZXRoZXIgdGhlIGN1cnJlbnQgY29ubmVjdGlvbiBpcyBzZWN1cmUgKi8KKworICAgIGlm ICh0dHlmZCA9PSAtMSkKKyAgICAgIHJldHVybigwKTsKKworICAgIGlmICgwCisjaWZkZWYgU1NI QlVJTFRJTgorCXx8IElTX1NTSCgpCisjZW5kaWYgLyogU1NIQlVJTFRJTiAqLworI2lmZGVmIENL X0VOQ1JZUFRJT04KKwl8fCBja190bl9lbmNyeXB0aW5nKCkgJiYgY2tfdG5fZGVjcnlwdGluZygp CisjZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLworI2lmZGVmIENLX1NTTAorCXx8IHRsc19hY3Rp dmVfZmxhZyB8fCBzc2xfYWN0aXZlX2ZsYWcKKyNlbmRpZiAvKiBDS19TU0wgKi8KKyNpZmRlZiBS TE9HQ09ERQorI2lmZGVmIENLX0tFUkJFUk9TCisjaWZkZWYgQ0tfRU5DUllQVElPTgorCXx8IHR0 bnByb3RvID09IE5QX0VLNExPR0lOIHx8IHR0bnByb3RvID09IE5QX0VLNUxPR0lOCisjZW5kaWYg LyogQ0tfRU5DUllQVElPTiAqLworI2VuZGlmIC8qIENLX0tFUkJFUk9TICovCisjZW5kaWYgLyog UkxPR0NPREUgKi8KKwkpCisgICAgICByZXR1cm4oMSk7CisgICAgcmV0dXJuKDApOworfQorCisj aWZkZWYgQ0tfUkVESVIKKyAgCisvKiBFeHRlcm5hbCBwcm90b2NvbCBoYW5kbGVyIHBhcmFtZXRl cnMgZnJvbSBja3V1czMuYyAqLworZXh0ZXJuIGludCBleHBfaGFuZGxlciwgZXhwX3N0ZGVyciwg ZXhwX3RpbW87CisKKyNpZmRlZiBTRUxFQ1QKKyNpZmRlZiBORVRQVFkKKworLyogVGhlIHJpZ2h0 IHNpemUgaXMgMjQ1NzYgKi8KKworI2lmbmRlZiBQVFlfUEJVRl9TSVpFCQkJLyogU2l6ZSBvZiBi dWZmZXIgdG8gcmVhZCBmcm9tIHB0eSAqLworI2RlZmluZSBQVFlfUEJVRl9TSVpFIDI0NTc2CQkv KiBhbmQgd3JpdGUgdG8gbmV0LiAqLworI2VuZGlmCS8qIFBUWV9QQlVGX1NJWkUgKi8KKworI2lm bmRlZiBQVFlfVEJVRl9TSVpFCQkJLyogU2l6ZSBvZiBidWZmZXIgdG8gcmVhZCBmcm9tIG5ldCAq LworI2RlZmluZSBQVFlfVEJVRl9TSVpFIDI0NTc2CQkvKiBhbmQgd3JpdGUgdG8gcHR5LiAqLwor I2VuZGlmCS8qIFBUWV9UQlVGX1NJWkUgKi8KKworI2lmZGVmIE9fTkRFTEFZCQkJCS8qIFdoZXRo ZXIgdG8gdXNlIG5vbmJsb2NraW5nICovCisjaWZuZGVmIFBUWV9OT19OREVMQVkJCQkvKiByZWFk cyBvbiB0aGUgcHNldWRvdGVybWluYWwgKi8KKyNpZm5kZWYgUFRZX1VTRV9OREVMQVkKKyNkZWZp bmUgUFRZX1VTRV9OREVMQVkKKyNlbmRpZgkvKiBQVFlfVVNFX05ERUxBWSAqLworI2VuZGlmCS8q IFBUWV9OT19OREVMQVkgKi8KKyNlbmRpZgkvKiBPX05ERUxBWSAqLworCisjaWZuZGVmIEhBVkVf T1BFTlBUWQorI2lmbmRlZiBVU0VfQ0tVUFRZX0MKKyNkZWZpbmUgVVNFX0NLVVBUWV9DCisjZW5k aWYgLyogVVNFX0NLVVBUWV9DICovCisjZW5kaWYgLyogSEFWRV9PUEVOUFRZICovCisKK1ZPSUQK K3B0eV9tYWtlX3JhdyhmZCkgaW50IGZkOyB7CisgICAgaW50IHggPSAtMjMsIGk7CisKKyNpZmRl ZiBCU0Q0NE9SUE9TSVgJCQkvKiBQT1NJWCAqLworICAgIHN0cnVjdCB0ZXJtaW9zIHRwOworI2Vs c2UKKyNpZmRlZiBBVFRTVgkJCQkvKiBBVCZUIFVOSVggKi8KKyNpZmRlZiBDS19BTlNJQworICAg IHN0cnVjdCB0ZXJtaW8gdHAgPSB7MH07CisjZWxzZQorICAgIHN0cnVjdCB0ZXJtaW8gdHA7Cisj ZW5kaWYJLyogQ0tfQU5TSUMgKi8KKyNlbHNlCisgICAgc3RydWN0IHNndHR5YiB0cDsJCQkvKiBU cmFkaXRpb25hbCAqLworI2VuZGlmIC8qIEFUVFNWICovCisjZW5kaWYgLyogQlNENDRPUlBPU0lY ICovCisKKyAgICBkZWJ1ZyhGMTAxLCJwdHlfbWFrZV9yYXcgZmQiLCIiLGZkKTsKKyAgICBlcnJu byA9IDA7CisKKyNpZmRlZiBCU0Q0NE9SUE9TSVgJCQkvKiBQT1NJWCAqLworICAgIHggPSB0Y2dl dGF0dHIoZmQsJnRwKTsKKyAgICBkZWJ1ZyhGMTAxLCJwdHlfbWFrZV9yYXcgdGNnZXRhdHRyIiwi Iix4KTsKKyNlbHNlCisjaWZkZWYgQVRUU1YJCQkJLyogQVQmVCBVTklYICovCisgICAgeCA9IGlv Y3RsKGZkLFRDR0VUQSwmdHApOworICAgIGRlYnVnKEYxMDEsInB0eV9tYWtlX3JhdyBUQ0dFVEEg aW9jdGwiLCIiLHgpOworI2Vsc2UKKyAgICB4ID0gZ3R0eShmZCwmdHApOworICAgIGRlYnVnKEYx MDEsInB0eV9tYWtlX3JhdyB0dHR5IiwiIix4KTsKKyNlbmRpZiAvKiBBVFRTViAqLworI2VuZGlm IC8qIEJTRDQ0T1JQT1NJWCAqLworICAgIGRlYnVnKEYxMDEsInB0eV9tYWtlX3JhdyBHRVQgZXJy bm8iLCIiLGVycm5vKTsKKworI2lmZGVmIFVTRV9DRk1BS0VSQVcKKyAgICBlcnJubyA9IDA7Cisg ICAgY2ZtYWtlcmF3KCZ0cCk7CisgICAgZGVidWcoRjEwMSwicHR5X21ha2VfcmF3IGNmbWFrZXJh dyBlcnJubyIsIiIsZXJybm8pOworI2Vsc2UgIC8qIFVTRV9DRk1BS0VSQVcgKi8KKworI2lmZGVm IENPTU1FTlQKKworLyogVGhpcyB2ZXJ5IHNpbXBsZSB2ZXJzaW9uIHJlY29tbWVuZGVkIGJ5IFNl cmcgSWFrb2xldiBkb2Vzbid0IHdvcmsgKi8KKworICAgIHRwLmNfbGZsYWcgJj0gfihFQ0hPfElD QU5PTnxJRVhURU58SVNJRyk7CisgICAgdHAuY19pZmxhZyAmPSB+KEJSS0lOVHxJQ1JOTHxJTlBD S3xJU1RSSVB8SVhPTik7CisgICAgdHAuY19jZmxhZyAmPSB+KENTSVpFfFBBUkVOQik7CisgICAg dHAuY19jZmxhZyB8PSBDUzg7CisgICAgdHAuY19vZmxhZyAmPSB+KE9QT1NUKTsKKyAgICB0cC5j X2NjW1ZNSU5dID0gMTsKKyAgICB0cC5jX2NjW1ZUSU1FXSA9IDA7CisKKyAgICBkZWJ1ZyhGMTAx LCJwdHlfbWFrZV9yYXcgMSBjX2NjW10gTkNDUyIsIiIsTkNDUyk7CisgICAgZGVidWcoRjEwMSwi cHR5X21ha2VfcmF3IDEgaWZsYWdzIiwiIix0cC5jX2lmbGFnKTsKKyAgICBkZWJ1ZyhGMTAxLCJw dHlfbWFrZV9yYXcgMSBvZmxhZ3MiLCIiLHRwLmNfb2ZsYWcpOworICAgIGRlYnVnKEYxMDEsInB0 eV9tYWtlX3JhdyAxIGxmbGFncyIsIiIsdHAuY19sZmxhZyk7CisgICAgZGVidWcoRjEwMSwicHR5 X21ha2VfcmF3IDEgY2ZsYWdzIiwiIix0cC5jX2NmbGFnKTsKKworI2Vsc2UKKyNpZmRlZiBDT01N RU5UCisvKgorICBJbiB0aGlzIHZlcnNpb24gd2UgdW5zZXQgZXZlcnl0aGluZyBhbmQgdGhlbiBz ZXQgb25seSB0aGUKKyAgYml0cyB3ZSBrbm93IHdlIG5lZWQuCisqLworICAgIC8qIGlmbGFncyAq LworICAgIHRwLmNfaWZsYWcgPSAwTDsKKyAgICB0cC5jX2lmbGFnIHw9IElHTkJSSzsKKyNpZmRl ZiBJTUFYQkVMCisgICAgdHAuY19pZmxhZyB8PSBJTUFYQkVMOworI2VuZGlmIC8qIElNQVhCRUwg Ki8KKworICAgIC8qIG9mbGFncyAqLworICAgIHRwLmNfb2ZsYWcgPSAwTDsKKworICAgIC8qIGxm bGFncyAqLworICAgIHRwLmNfbGZsYWcgPSAwTDsKKyNpZmRlZiBOT0tFUk5JTkZPCisgICAgdHAu Y19sZmxhZyB8PSBOT0tFUk5JTkZPOworI2VuZGlmCS8qIE5PS0VSTklORk8gKi8KKworICAgIC8q IGNmbGFncyAqLworICAgIHRwLmNfY2ZsYWcgPSAwTDsKKyAgICB0cC5jX2NmbGFnIHw9IENTOHxD UkVBRDsKKworICAgIGZvciAoaSA9IDA7IGkgPCBOQ0NTOyBpKyspIHsJLyogTm8gc3BlY2lhbCBj aGFyYWN0ZXJzICovCisJdHAuY19jY1tpXSA9IDA7CisgICAgfQorI2lmZGVmIFZNSU4KKyAgICB0 cC5jX2NjW1ZNSU5dID0gMTsJCQkvKiBCdXQgYWx3YXlzIHdhaXQgZm9yIGlucHV0ICovCisjZW5k aWYJLyogVk1JTiAqLworICAgIGRlYnVnKEYxMDEsInB0eV9tYWtlX3JhdyAyIGNfY2NbXSBOQ0NT IiwiIixOQ0NTKTsKKyAgICBkZWJ1ZyhGMTAxLCJwdHlfbWFrZV9yYXcgMiBpZmxhZ3MiLCIiLHRw LmNfaWZsYWcpOworICAgIGRlYnVnKEYxMDEsInB0eV9tYWtlX3JhdyAyIG9mbGFncyIsIiIsdHAu Y19vZmxhZyk7CisgICAgZGVidWcoRjEwMSwicHR5X21ha2VfcmF3IDIgbGZsYWdzIiwiIix0cC5j X2xmbGFnKTsKKyAgICBkZWJ1ZyhGMTAxLCJwdHlfbWFrZV9yYXcgMiBjZmxhZ3MiLCIiLHRwLmNf Y2ZsYWcpOworCisjZWxzZSAgLyogQ09NTUVOVCAqLworLyoKKyAgSW4gdGhpcyB2ZXJzaW9uIHdl IHNldCBvciB1bnNldCBldmVyeSBzaW5nbGUgZmxhZyBleHBsaWNpdGx5LiAgSXQgd29ya3MgYQor ICBiaXQgYmV0dGVyIHRoYW4gdGhlIHNpbXBsZSB2ZXJzaW9uIGp1c3QgYWJvdmUsIGJ1dCBpdCdz IHN0aWxsIGZhciBmcm9tCisgIGFkZXF1YXRlLgorKi8KKyAgICAvKiBpZmxhZ3MgKi8KKyAgICB0 cC5jX2lmbGFnICY9IH4oUEFSTVJLfElTVFJJUHxCUktJTlR8SU5MQ1J8SUdOQ1J8SUNSTkwpOwor ICAgIHRwLmNfaWZsYWcgJj0gfihJTlBDS3xJR05QQVJ8SVhBTll8SVhPTnxJWE9GRik7CisgICAg dHAuY19pZmxhZyB8PSBJR05CUks7CisjaWZkZWYgSU1BWEJFTAorI2lmZGVmIENPTU1FTlQKKyAg ICB0cC5jX2lmbGFnIHw9IElNQVhCRUw7CisjZWxzZQorICAgIHRwLmNfaWZsYWcgJj0gfklNQVhC RUw7CisjZW5kaWYgLyogQ09NTUVOVCAqLworI2VuZGlmIC8qIElNQVhCRUwgKi8KKyNpZmRlZiBJ VUNMQworICAgIHRwLmNfaWZsYWcgJj0gfklVQ0xDOworI2VuZGlmIC8qIElVQ0xDICovCisKKyAg ICAvKiBvZmxhZ3MgKi8KKyNpZmRlZiBCU0RMWQorICAgIHRwLmNfb2ZsYWcgJj0gfkJTRExZOwor I2VuZGlmIC8qIEJTRExZICovCisjaWZkZWYgQ1JETFkKKyAgICB0cC5jX29mbGFnICY9IH5DUkRM WTsKKyNlbmRpZiAvKiBDUkRMWSAqLworI2lmZGVmIEZGRExZCisgICAgdHAuY19vZmxhZyAmPSB+ RkZETFk7CisjZW5kaWYgLyogRkZETFkgKi8KKyNpZmRlZiBOTERMWQorICAgIHRwLmNfb2ZsYWcg Jj0gfk5MRExZOworI2VuZGlmIC8qIE5MRExZICovCisjaWZkZWYgVEFCRExZCisgICAgdHAuY19v ZmxhZyAmPSB+VEFCRExZOworI2VuZGlmIC8qIFRBQkRMWSAqLworI2lmZGVmIFZURExZCisgICAg dHAuY19vZmxhZyAmPSB+VlRETFk7CisjZW5kaWYgLyogVlRETFkgKi8KKyNpZmRlZiBPRkRFTAor ICAgIHRwLmNfb2ZsYWcgJj0gfk9GREVMOworI2VuZGlmIC8qIE9GREVMICovCisjaWZkZWYgT0ZJ TEwKKyAgICB0cC5jX29mbGFnICY9IH5PRklMTDsKKyNlbmRpZiAvKiBPRklMTCAqLworI2lmZGVm IE9MQ1VDCisgICAgdHAuY19vZmxhZyAmPSB+T0xDVUM7CisjZW5kaWYgLyogT0xDVUMgKi8KKyNp ZmRlZiBDTVNQQVIKKyAgICB0cC5jX29mbGFnICY9IH5DTVNQQVI7CisjZW5kaWYgLyogQ01TUEFS ICovCisgICAgdHAuY19vZmxhZyAmPSB+T1BPU1Q7CisjaWZkZWYgT1hUQUJTCisgICAgdHAuY19v ZmxhZyAmPSB+T1hUQUJTOworI2VuZGlmIC8qIE9YVEFCUyAqLworI2lmZGVmIENPTU1FTlQKKyNp ZmRlZiBPTk9DUgorICAgIHRwLmNfb2ZsYWcgJj0gfk9OT0NSOwkJLyogTWF5YmUgc2hvdWxkIGJl IHw9PyAqLworICAgIHRwLmNfb2ZsYWcgfD0gT05PQ1I7CQkvKiBtYWtlcyBubyBkaWZmZXJlbmNl IGVpdGhlciB3YXkgKi8KKyNlbmRpZiAvKiBPTk9DUiAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8K KyNpZmRlZiBPTk9FT1QKKyAgICB0cC5jX29mbGFnICY9IH5PTk9FT1Q7CisjZW5kaWYgLyogT05P RU9UICovCisjaWZkZWYgT05MUkVUCisgICAgdHAuY19vZmxhZyAmPSB+T05MUkVUOworI2VuZGlm IC8qIE9OTFJFVCAqLworI2lmZGVmIE9OTENSCisgICAgdHAuY19vZmxhZyAmPSB+T05MQ1I7Cisj ZW5kaWYgLyogT05MQ1IgKi8KKyNpZmRlZiBPQ1JOTAorICAgIHRwLmNfb2ZsYWcgJj0gfk9DUk5M OworI2VuZGlmIC8qIE9DUk5MICovCisKKyAgICAvKiBsZmxhZ3MgKi8KKyAgICB0cC5jX2xmbGFn ICY9IH5FQ0hPOworI2lmZGVmIEVDSE9FCisgICAgdHAuY19sZmxhZyAmPSB+RUNIT0U7CisjZW5k aWYgLyogRUNIT0UgKi8KKyNpZmRlZiBFQ0hPTkwKKyAgICB0cC5jX2xmbGFnICY9IH5FQ0hPTkw7 CisjZW5kaWYgLyogRUNIT05MICovCisjaWZkZWYgRUNIT1BSVAorICAgIHRwLmNfbGZsYWcgJj0g fkVDSE9QUlQ7CisjZW5kaWYgLyogRUNIT1BSVCAqLworI2lmZGVmIEVDSE9LRQorICAgIHRwLmNf bGZsYWcgJj0gfkVDSE9LRTsKKyNlbmRpZiAvKiBFQ0hPS0UgKi8KKyNpZmRlZiBFQ0hPQ1RMCisg ICAgdHAuY19sZmxhZyAmPSB+RUNIT0NUTDsKKyNlbmRpZiAvKiBFQ0hPQ1RMICovCisjaWZkZWYg WENBU0UKKyAgICB0cC5jX2xmbGFnICY9IH5YQ0FTRTsKKyNlbmRpZiAvKiBYQ0FTRSAqLworI2lm ZGVmIEFMVFdFUkFTRQorICAgIHRwLmNfbGZsYWcgJj0gfkFMVFdFUkFTRTsKKyNlbmRpZiAvKiBB TFRXRVJBU0UgKi8KKyNpZmRlZiBFWFRQUk9DCisgICAgdHAuY19sZmxhZyAmPSB+KElDQU5PTnxJ U0lHfElFWFRFTnxUT1NUT1B8RkxVU0hPfFBFTkRJTnxFWFRQUk9DKTsKKyNlbHNlCisgICAgdHAu Y19sZmxhZyAmPSB+KElDQU5PTnxJU0lHfElFWFRFTnxUT1NUT1B8RkxVU0hPfFBFTkRJTik7Cisj ZW5kaWYJLyogRVhUUFJPQyAqLworI2lmZGVmIE5PS0VSTklORk8KKyAgICB0cC5jX2xmbGFnIHw9 IE5PS0VSTklORk87CisjZW5kaWYJLyogTk9LRVJOSU5GTyAqLworI2lmbmRlZiBDT01NRU5UCisg ICAgdHAuY19sZmxhZyAmPSB+Tk9GTFNIOwkJLyogVFJZIElUIFRIRSBPVEhFUiBXQVk/ICovCisj ZWxzZQorICAgIHRwLmNfbGZsYWcgfD0gTk9GTFNIOwkJLyogTm8sIHRoaXMgd2F5IGlzIHdvcnNl ICovCisjZW5kaWYgLyogQ09NTUVOVCAqLworCisgICAgLyogY2ZsYWdzICovCisgICAgdHAuY19j ZmxhZyAmPSB+KENTSVpFfFBBUkVOQnxQQVJPREQpOworICAgIHRwLmNfY2ZsYWcgfD0gQ1M4fENS RUFEOworCisjaWZkZWYgTURNQlVGCisgICAgdHAuY19jZmxhZyAmPSB+KE1ETUJVRik7CisjZWxz ZQorI2lmZGVmIENDQVJfT0ZMT1cKKyAgICB0cC5jX2NmbGFnICY9IH4oQ0NBUl9PRkxPVyk7CS8q IHR3byBuYW1lcyBmb3IgdGhlIHNhbWUgdGhpbmcgKi8KKyNlbmRpZiAvKiBDQ0FSX09GTE9XICov CisjZW5kaWYgLyogTURNQlVGICovCisKKyNpZmRlZiBDQ1RTX09GTE9XCisgICAgdHAuY19jZmxh ZyAmPSB+KENDVFNfT0ZMT1cpOworI2VuZGlmIC8qIENDVFNfT0ZMT1cgKi8KKyNpZmRlZiBDRFNS X09GTE9XCisgICAgdHAuY19jZmxhZyAmPSB+KENEU1JfT0ZMT1cpOworI2VuZGlmIC8qIENEU1Jf T0ZMT1cgKi8KKyNpZmRlZiBDRFRSX0lGTE9XCisgICAgdHAuY19jZmxhZyAmPSB+KENEVFJfSUZM T1cpOworI2VuZGlmIC8qIENEVFJfSUZMT1cgKi8KKyNpZmRlZiBDUlRTX0lGTE9XCisgICAgdHAu Y19jZmxhZyAmPSB+KENSVFNfSUZMT1cpOworI2VuZGlmIC8qIENSVFNfSUZMT1cgKi8KKyNpZmRl ZiBDUlRTWE9GRgorICAgIHRwLmNfY2ZsYWcgJj0gfihDUlRTWE9GRik7CisjZW5kaWYgLyogQ1JU U1hPRkYgKi8KKyNpZmRlZiBDUlRTQ1RTCisgICAgdHAuY19jZmxhZyAmPSB+KENSVFNDVFMpOwor I2VuZGlmIC8qIENSVFNDVFMgKi8KKyNpZmRlZiBDTE9DQUwKKyAgICB0cC5jX2NmbGFnICY9IH4o Q0xPQ0FMKTsKKyNlbmRpZiAvKiBDTE9DQUwgKi8KKyNpZmRlZiBDU1RPUEIKKyAgICB0cC5jX2Nm bGFnICY9IH4oQ1NUT1BCKTsKKyNlbmRpZiAvKiBDU1RPUEIgKi8KKyNpZmRlZiBIVVBDTAorICAg IHRwLmNfY2ZsYWcgJj0gfihIVVBDTCk7CisjZW5kaWYgLyogSFVQQ0wgKi8KKworICAgIGZvciAo aSA9IDA7IGkgPCBOQ0NTOyBpKyspIHsJLyogTm8gc3BlY2lhbCBjaGFyYWN0ZXJzICovCisJdHAu Y19jY1tpXSA9IDA7CisgICAgfQorI2lmZGVmIFZNSU4KKyAgICB0cC5jX2NjW1ZNSU5dID0gMTsJ CQkvKiBCdXQgYWx3YXlzIHdhaXQgZm9yIGlucHV0ICovCisjZW5kaWYJLyogVk1JTiAqLworICAg IGRlYnVnKEYxMDEsInB0eV9tYWtlX3JhdyAzIGNfY2NbXSBOQ0NTIiwiIixOQ0NTKTsKKyAgICBk ZWJ1ZyhGMTAxLCJwdHlfbWFrZV9yYXcgMyBpZmxhZ3MiLCIiLHRwLmNfaWZsYWcpOworICAgIGRl YnVnKEYxMDEsInB0eV9tYWtlX3JhdyAzIG9mbGFncyIsIiIsdHAuY19vZmxhZyk7CisgICAgZGVi dWcoRjEwMSwicHR5X21ha2VfcmF3IDMgbGZsYWdzIiwiIix0cC5jX2xmbGFnKTsKKyAgICBkZWJ1 ZyhGMTAxLCJwdHlfbWFrZV9yYXcgMyBjZmxhZ3MiLCIiLHRwLmNfY2ZsYWcpOworI2VuZGlmIC8q IENPTU1FTlQgKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisKKyAgICBlcnJubyA9IDA7CisjaWZk ZWYgQlNENDRPUlBPU0lYCQkJLyogUE9TSVggKi8KKyAgICB4ID0gdGNzZXRhdHRyKGZkLFRDU0FO T1csJnRwKTsKKyAgICBkZWJ1ZyhGMTAxLCJwdHlfbWFrZV9yYXcgdGNzZXRhdHRyIiwiIix4KTsK KyNlbHNlCisjaWZkZWYgQVRUU1YJCQkJLyogQVQmVCBVTklYICovCisgICAgeCA9IGlvY3RsKGZk LFRDU0VUQSwmdHApOworICAgIGRlYnVnKEYxMDEsInB0eV9tYWtlX3JhdyBpb2N0bCIsIiIseCk7 CisjZWxzZQorICAgIHggPSBzdHR5KGZkLCZ0cCk7CQkJLyogVHJhZGl0aW9uYWwgKi8KKyAgICBk ZWJ1ZyhGMTAxLCJwdHlfbWFrZV9yYXcgc3R0eSIsIiIseCk7CisjZW5kaWYgLyogQVRUU1YgKi8K KyNlbmRpZiAvKiBCU0Q0NE9SUE9TSVggKi8KKyAgICBkZWJ1ZyhGMTAxLCJwdHlfbWFrZV9yYXcg ZXJybm8iLCIiLGVycm5vKTsKKworI2VuZGlmIC8qIF9fTmV0QlNEX18gKi8KK30KKworc3RhdGlj IGludAorcHR5X2NoayhmZCkgaW50IGZkOyB7CisgICAgaW50IHgsIG4gPSAwOworICAgIGVycm5v ID0gMDsKKyNpZmRlZiBGSU9OUkVBRAorICAgIHggPSBpb2N0bChmZCwgRklPTlJFQUQsICZuKTsJ LyogQlNEIGFuZCBtb3N0IG90aGVycyAqLworICAgIGNrbWFrbXNnKG1zZ2J1Ziw1MDAsCisJICAg ICAicHR5X2NoayBpb2N0bCBGSU9OUkVBRCBlcnJubz0iLAorCSAgICAgY2tpdG9hKGVycm5vKSwK KwkgICAgICIgY291bnQ9IiwKKwkgICAgIGNraXRvYShuKSk7CisgICAgZGVidWcoRjEwMCxtc2di dWYsIiIsMCk7CisjZWxzZQorI2lmZGVmIFJEQ0hLCisgICAgbiA9IHJkY2hrKGZkKTsKKyAgICBk ZWJ1ZyhGMTAxLCJwdHlfY2hrIHJkY2hrIiwiIixuKTsKKyNlbHNlCisgICAgbiA9IDE7CisjZW5k aWYJLyogUkRDSEsgKi8KKyNlbmRpZgkvKiBGSU9OUkVBRCAqLworICAgIHJldHVybigobiA+IC0x KSA/IG4gOiAwKTsKK30KKworc3RhdGljIGludAorcHR5X2dldF9zdGF0dXMoZmQscGlkKSBpbnQg ZmQ7IFBJRF9UIHBpZDsgeworICAgIGludCB4LCBzdGF0dXMgPSAtMTsKKyAgICBQSURfVCB3Owor CisgICAgZGVidWcoRjEwMSwicHR5X2dldF9zdGF0dXMgZmQiLCIiLGZkKTsKKyAgICBkZWJ1ZyhG MTAxLCJwdHlfZ2V0X3N0YXR1cyBwaWQiLCIiLHBpZCk7CisKKyAgICBpZiAocGV4aXRzdGF0ID4g LTEpCisgICAgICByZXR1cm4ocGV4aXRzdGF0KTsKKworI2lmZGVmIENPTU1FTlQKKyAgICAvKiBO b3Qgb25seSB1bm5lY2Vzc2FyeSBidXQgaGFybWZ1bCAqLworICAgIGVycm5vID0gMDsKKyAgICB4 ID0ga2lsbChwdHlfZm9ya19waWQsMCk7CisgICAgZGVidWcoRjEwMSwicHR5X2dldF9zdGF0dXMg a2lsbCB2YWx1ZSIsIiIseCk7CisgICAgZGVidWcoRjEwMSwicHR5X2dldF9zdGF0dXMga2lsbCBl cnJubyIsIiIsZXJybm8pOworICAgIGlmICh4ID4gLTEgJiYgZXJybm8gIT0gRVNSQ0gpCisgICAg ICByZXR1cm4oLTEpOwkJCS8qIEZvcmsgc3RpbGwgdGhlcmUgKi8KKyAgICAvKiBGb3JrIHNlZW1z IHRvIGJlIGdvbmUgKi8KKyNlbmRpZgkvKiBDT01NRU5UICovCisKKyAgICBlcnJubyA9IDA7Cisg ICAgeCA9IHdhaXRwaWQocHR5X2ZvcmtfcGlkLCZzdGF0dXMsV05PSEFORyk7CisgICAgZGVidWco RjExMSwicHR5X2dldF9zdGF0dXMgd2FpdHBpZCIsY2tpdG9hKGVycm5vKSx4KTsKKyAgICBpZiAo eCA8PSAwICYmIGVycm5vID09IDApIHsKKwlkZWJ1ZyhGMTAxLCJwdHlfZ2V0X3N0YXR1cyB3YWl0 cGlkIHJldHVybiIsIiIsLTEpOworCXJldHVybigtMSk7CisgICAgfQorICAgIGlmICh4ID4gMCkg eworCWlmICh4ICE9IHB0eV9mb3JrX3BpZCkKKwkgIGRlYnVnKEYxMDEsCisJCSJwdHlfZ2V0X3N0 YXR1cyB3YWl0cGlkIHBpZCBkb2Vzbid0IG1hdGNoIiwiIixwdHlfZm9ya19waWQpOyAKKwlkZWJ1 ZyhGMTAxLCJwdHlfZ2V0X3N0YXR1cyB3YWl0cGlkIHN0YXR1cyIsIiIsc3RhdHVzKTsKKwlkZWJ1 ZyhGMTAxLCJwdHlfZ2V0X3N0YXR1cyB3YWl0cGlkIGVycm5vIiwiIixlcnJubyk7CisJaWYgKFdJ RkVYSVRFRChzdGF0dXMpKSB7CisJICAgIGRlYnVnKEYxMDAsInB0eV9nZXRfc3RhdHVzIFdJRkVY SVRFRCIsIiIsMCk7CisJICAgIHN0YXR1cyA9IFdFWElUU1RBVFVTKHN0YXR1cyk7CisJICAgIGRl YnVnKEYxMDEsInB0eV9nZXRfc3RhdHVzIGZvcmsgZXhpdCBzdGF0dXMiLCIiLHN0YXR1cyk7Cisj aWZkZWYgQ09NTUVOVAorCSAgICBlbmRfcHR5KCk7CisjZW5kaWYJLyogQ09NTUVOVCAqLworCSAg ICBjbG9zZShmZCk7CisJICAgIHBleGl0c3RhdCA9IHN0YXR1czsKKwl9IGVsc2UgeworCSAgICBk ZWJ1ZyhGMTAwLCJwdHlfZ2V0X3N0YXR1cyB3YWl0cGlkIHVuZXhwZWN0ZWQgc3RhdHVzIiwiIiww KTsKKwl9CisgICAgfQorICAgIGRlYnVnKEYxMDEsInB0eV9nZXRfc3RhdHVzIHJldHVybiBzdGF0 dXMiLCIiLHN0YXR1cyk7CisgICAgcmV0dXJuKHN0YXR1cyk7Cit9CisKKy8qIHQgdCBwIHQgeSBj IG0gZCAgLS0gIFJ1biBjb21tYW5kIG9uIHB0eSBhbmQgZm9yd2FyZCB0byBuZXQgKi8KKworLyoK KyAgTmVlZGVkIGZvciBydW5uaW5nIGV4dGVybmFsIHByb3RvY29scyBvbiBzZWN1cmUgY29ubmVj dGlvbnMuCisgIEZvciBleGFtcGxlLCBpZiBDLUtlcm1pdCBoYXMgbWFkZSBhbiBTU0wvVExTIG9y IEtlcmJlcm9zIFRlbG5ldAorICBjb25uZWN0aW9uLCBhbmQgdGhlbiBuZWVkcyB0byB0cmFuc2Zl ciBhIGZpbGUgd2l0aCBabW9kZW0sIHdoaWNoIGlzCisgIGFuIGV4dGVybmFsIHByb2dyYW0sIHRo aXMgcm91dGluZSByZWFkcyBabW9kZW0ncyBvdXRwdXQsIGVuY3J5cHRzIGl0LAorICBhbmQgdGhl biBmb3J3YXJkcyBpdCBvdXQgdGhlIGNvbm5lY3Rpb24sIGFuZCByZWFkcyB0aGUgZW5jcnlwdGVk IGRhdGEKKyAgc3RyZWFtIGNvbWluZyBpbiBmcm9tIHRoZSBjb25uZWN0aW9uLCBkZWNyeXB0cyBp dCwgYW5kIGZvcndhcmRzIGl0IHRvCisgIFptb2RlbS4KKworICBXb3JrcyBsaWtlIGEgVENQL0lQ IHBvcnQgZm9yd2FyZGVyIGV4Y2VwdCBvbmUgZW5kIGlzIGEgcHR5IHJhdGhlcgorICB0aGFuIGEg c29ja2V0LCB3aGljaCBpbnRyb2R1Y2VzIHNvbWUgY29tcGxpY2F0aW9uczoKKworICAgLiBPbiBt b3N0IHBsYXRmb3Jtcywgc2VsZWN0KCkgYWx3YXlzIGluZGljYXRlcyB0aGUgb3V0cHV0IHNpZGUg b2YKKyAgICAgdGhlIHB0eSBoYXMgY2hhcmFjdGVycyB3YWl0aW5nIHRvIGJlIHJlYWQsIGV2ZW4g d2hlbiBpdCBkb2Vzbid0LAorICAgICBldmVuIHdoZW4gdGhlIHB0eSBwcm9jZXNzIGhhcyBhbHJl YWR5IGV4aXRlZC4KKworICAgLiBOb25ibG9ja2luZyByZWFkcyBtdXN0IGJlIHVzZWQgb24gdGhl IHB0eSwgYmVjYXVzZSB0aGVyZSBpcyBubworICAgICB3YXkgb24gY2VydGFpbiBwbGF0Zm9ybXMg KGUuZy4gTmV0QlNEKSB0byBmaW5kIG91dCBob3cgbWFueSBjaGFyYWN0ZXJzCisgICAgIGFyZSBh dmFpbGFibGUgdG8gYmUgcmVhZCAodGhlIEZJT05SRUFEIGlvY3RsIGFsd2F5cyBzYXlzIDApLiAg VGhlIGNvZGUKKyAgICAgYWxzbyBhbGxvd3MgZm9yIGJsb2NraW5nIHJlYWRzIChpZiBPX05ERUxB WSBhbmQgT19OT05CTE9DSyBhcmUgbm90CisgICAgIGRlZmluZWQsIG9yIGlmIFBUWV9OT19OREVM QVkgaXMgZGVmaW5lZCksIGJ1dCBvbiBzb21lIHBsYXRmb3JtcyB0aGlzIGNhbgorICAgICByZXN1 bHQgaW4gc2luZ2xlLWJ5dGUgcmVhZHMgYW5kIHdyaXRlcyAoTmV0QlNEIGFnYWluKS4KKworICAg LiBUZXN0aW5nIGZvciAiRU9GIiBvbiB0aGUgcHR5IGlzIHByb2JsZW1hdGljLiAgc2VsZWN0KCkg bmV2ZXIgZ2l2ZXMKKyAgICAgYW55IGluZGljYXRpb24uICBBZnRlciB0aGUgcHR5IHByb2Nlc3Mg aGFzIGV4aXRlZCBhbmQgdGhlIGZvcmsgaGFzCisgICAgIGRpc2FwcGVhcmVkLCByZWFkKCkgY2Fu IHN0aWxsIHJldHVybiB3aXRoIDAgYnl0ZXMgcmVhZCBidXQgd2l0aG91dCBhbgorICAgICBlcnJv ciAoTmV0QlNEKTsgbm8ga25vd24gdGVzdCBvbiB0aGUgcHR5IGZpbGUgZGVzY3JpcHRvciB3aWxs IGluZGljYXRlCisgICAgIHRoYXQgaXQgaXMgbm8gbG9uZ2VyIHZhbGlkLiAgVGhlIHByb2Nlc3Mg SUQgb2YgdGhlIHB0eSBmb3JrIGNhbiBiZQorICAgICB0ZXN0ZWQgb24gc29tZSBwbGF0Zm9ybXMg KE5ldEJTRCwgbHVja2lseSkgYnV0IG5vdCBvdGhlcnMgKFNvbGFyaXMsCisgICAgIExpbnV4KS4K KworICBPbiB0aGUgbmV0d29yayBzaWRlLCB3ZSB1c2UgdHRpbmMoKSBhbmQgdHRvYygpLCB3aGlj aCwgZm9yIG5ldHdvcmsgCisgIGNvbm5lY3Rpb25zLCBoYW5kbGUgYW55IGFjdGl2ZSBzZWN1cml0 eSBtZXRob2RzLgorCisgIENhbGwgd2l0aCBzID0gY29tbWFuZC4KKyAgUmV0dXJucyAwIG9uIGZh aWx1cmUsIDEgb24gc3VjY2Vzcy4KKyAgZmRjIC0gRGVjZW1iZXIgMjAwNiAtIEF1Z3VzdCAyMDA3 LgorCisgIE5PVEU6IFRoaXMgY29kZSBkZWZhdWx0cyB0byBub25ibG9ja2luZyByZWFkcyBpZiBP X05ERUxBWSBvciBPX05PTkJMT0NLIGFyZQorICBkZWZpbmVkIGluIHRoZSBoZWFkZXIgZmlsZXMs IHdoaWNoIHNob3VsZCBiZSB0cnVlIG9mIGV2ZXJ5IHJlY2VudCBVbml4CisgIHBsYXRmb3JtLiAg SWYgdGhpcyBjYXVzZXMgdHJvdWJsZSBzb21ld2hlcmUsIGRlZmluZSBQVFlfTk9fTkRFTEFZLCBl LmcuIHdoZW4KKyAgYnVpbGRpbmcgQy1LZXJtaXQ6CisKKyAgICB0b3VjaCBja3V0aW8uYworICAg IG1ha2UgcGxhdGZvcm1uYW1lIEtGTEFHUz0tRFBUWV9OT19OT0RFTEFZCisqLworc3RhdGljIGlu dCBoYXZlX3B0eSA9IDA7CQkvKiBEbyB3ZSBoYXZlIGEgcHR5PyAqLworCitzdGF0aWMgU0lHVFlQ ICgqc2F2ZV9zaWdjaGxkKSgpID0gTlVMTDsJLyogRm9yIGNhdGNoaW5nIFNJR0NITEQgKi8KKwor c3RhdGljIFZPSUQKK3NpZ2NobGRfaGFuZGxlcihzaWcpIGludCBzaWc7IHsKKyAgICBoYXZlX3B0 eSA9IDA7CQkJLyogV2UgZG9uJ3QgaGF2ZSBhIHB0eSAqLworI2lmZGVmIERFQlVHCisgICAgaWYg KHNhdmVfc2lnY2hsZCkgeworCShWT0lEKSBzaWduYWwoU0lHQ0hMRCxzYXZlX3NpZ2NobGQpOwor CXNhdmVfc2lnY2hsZCA9IE5VTEw7CisgICAgfQorICAgIGlmIChkZWJsb2cpIHsKKwlkZWJ1ZyhG MTAwLCIqKioqKioqKioqKioqKiIsIiIsMCk7CisJZGVidWcoRjEwMCwiU0lHQ0hMRCBjYXVnaHQi LCIiLDApOworCWRlYnVnKEYxMDAsIioqKioqKioqKioqKioqIiwiIiwwKTsKKyAgICB9CisjZW5k aWYJLyogREVCVUcgKi8KK30KKyNkZWZpbmUgSEFWRV9JQUMgMQorI2RlZmluZSBIQVZFX0NSICAy CisKK2ludAordHRwdHljbWQocykgY2hhciAqczsgeworICAgIENIQVIgdGJ1ZltQVFlfVEJVRl9T SVpFXTsJCS8qIFJlYWQgZnJvbSBuZXQsIHdyaXRlIHRvIHB0eSAqLworICAgIGludCB0YnVmX2F2 YWlsID0gMDsJCQkvKiBQb2ludGVycyBmb3IgdGJ1ZiAqLworICAgIGludCB0YnVmX3dyaXR0ZW4g PSAwOworICAgIHN0YXRpYyBpbnQgaW5fc3RhdGUgPSAwOwkJLyogRm9yIFRFTE5FVCBJQUMgYW5k IE5WVCBpbiAqLworICAgIHN0YXRpYyBpbnQgb3V0X3ByZXYgPSAwOwkJLyogU2ltcGxlciBzY2hl bWUgZm9yIG91dCAqLworCisgICAgQ0hBUiBwYnVmW1BUWV9QQlVGX1NJWkVdOwkJLyogUmVhZCBm cm9tIHB0eSwgd3JpdGUgdG8gbmV0ICovCisgICAgQ0hBUiBkYnVmW1BUWV9QQlVGX1NJWkUgKyBQ VFlfUEJVRl9TSVpFICsgMV07IC8qIERvdWJsZS1zaXplIGJ1ZmZlciAqLworICAgIGludCBwYnVm X2F2YWlsID0gMDsJCQkvKiBQb2ludGVycyBmb3IgcGJ1ZiAqLworICAgIGludCBwYnVmX3dyaXR0 ZW4gPSAwOworCisgICAgaW50IHB0eWZkID0gLTE7CQkJLyogUHR5IGZpbGUgZGVzY3JpcHRvciAq LworICAgIGludCBoYXZlX25ldCA9IDA7CQkJLyogV2UgaGF2ZSBhIG5ldHdvcmsgY29ubmVjdGlv biAqLworICAgIGludCBwdHlfZXJyID0gMDsJCQkvKiBHb3QgZXJyb3Igb24gcHR5ICovCisgICAg aW50IG5ldF9lcnIgPSAwOwkJCS8qIEdvdCBlcnJvciBvbiBuZXQgKi8KKyAgICBpbnQgc3RhdHVz ID0gLTE7CQkJLyogUHR5IHByb2Nlc3MgZXhpdCBzdGF0dXMgKi8KKyAgICBpbnQgcmMgPSAwOwkJ CQkvKiBPdXIgcmV0dXJuIGNvZGUgKi8KKworICAgIGludCB4MSA9IDAsIHgyID0gMDsJCQkvKiBX b3JrZXJzLi4uICovCisgICAgaW50IGMsIG4sIG0sIHQsIHg7CQkJLyogV29ya2VycyAqLworCisg ICAgbG9uZyBzZWNvbmRzX3RvX3dhaXQgPSAwTDsJCS8qIHNlbGVjdCgpIHRpbWVvdXQgKi8KKyAg ICBzdHJ1Y3QgdGltZXZhbCB0diwgKnR2MjsJCS8qIEZvciBzZWxlY3QoKSAqLworI2lmZGVmIElO VFNFTEVDVAorICAgIGludCBpbiwgb3V0LCBlcnI7CQkJLyogRm9yIHNlbGVjdCgpICovCisjZWxz ZQorICAgIGZkX3NldCBpbiwgb3V0LCBlcnI7CisjZW5kaWYgLyogSU5UU0VMRUNUICovCisgICAg aW50IG5mZHMgPSAwOwkJCS8qIEZvciBzZWxlY3QoKSAqLworCisgICAgaW50IHBzZXQgPSAwLCB0 c2V0ID0gMCwgcG5vdHNldCA9IDAsIHRub3RzZXQgPSAwOyAvKiBzdGF0cy9kZWJ1Z2dpbiBvbmx5 ICovCisgICAgaW50IHJlYWRfbmV0X2J5dGVzID0gMDsJCS8qIFN0YXRzICovCisgICAgaW50IHdy aXRlX25ldF9ieXRlcyA9IDA7CQkvKiBTdGF0cyAqLworICAgIGludCByZWFkX3B0eV9ieXRlcyA9 IDA7CQkvKiBTdGF0cyAqLworICAgIGludCB3cml0ZV9wdHlfYnl0ZXMgPSAwOwkJLyogU3RhdHMg Ki8KKyAgICBpbnQgaXNfdG4gPSAwOwkJCS8qIFRFTE5FVCBwcm90b2NvbCBpcyBhY3RpdmUgKi8K KworICAgIGludCBtYXN0ZXJmZCA9IC0xOworICAgIGludCBzbGF2ZWZkID0gLTE7CisjaWZuZGVm IFVTRV9DS1VQVFlfQworICAgIHN0cnVjdCB0ZXJtaW9zIHRlcm07CisgICAgc3RydWN0IHdpbnNp emUgdHdpbjsKKyAgICBzdHJ1Y3Qgc3RyaW5nYXJyYXkgKiBxOworICAgIGNoYXIgKiogYXJncyA9 IE5VTEw7CisjZW5kaWYgLyogVVNFX0NLVVBUWV9DICovCisKKyAgICBpbl9zdGF0ZSA9IDA7CQkJ LyogTm8gcHJldmlvdXMgY2hhcmFjdGVyIHlldCAqLworCisgICAgaWYgKHR0eWZkID09IC0xKSB7 CisJcHJpbnRmKCI/U29ycnksIGNvbW11bmljYXRpb24gY2hhbm5lbCBpcyBub3Qgb3BlblxuIik7 CisJcmV0dXJuKDApOworICAgIH0gZWxzZSB7CisJaGF2ZV9uZXQgPSAxOworICAgIH0KKyAgICBp ZiAobm9wdXNoKSB7CisJZGVidWcoRjEwMCwidHRwdHljbWQgZmFpbDogbm9wdXNoIiwiIiwwKTsK KwlyZXR1cm4oMCk7CisgICAgfQorICAgIGlmICghcykgcyA9ICIiOwkJCS8qIERlZmVuc2UgZGUg Ym9ndXMgYXJndW1lbnRzICovCisgICAgaWYgKCEqcykgcmV0dXJuKDApOworICAgIHBleGl0c3Rh dCA9IC0xOwkJCS8qIEZvcmsgcHJvY2VzcyBleGl0IHN0YXR1cyAqLworCisjaWZkZWYgVE5DT0RF CisgICAgaXNfdG4gPSAoeGxvY2FsICYmIG5ldGNvbm4gJiYgSVNfVEVMTkVUKCkpIHx8IC8qIFRl bG5ldCBwcm90b2NvbCBhY3RpdmUgKi8KKwkgICAgKCF4bG9jYWwgJiYgc3N0ZWxuZXQpOworI2Vu ZGlmIC8qIFROQ09ERSAqLworCisgICAgZGVidWcoRjExMCwidHRwdHljbWQgY29tbWFuZCIscyww KTsKKyAgICBkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCB0dHlmZCIsIiIsdHR5ZmQpOworICAgIGRlYnVn KEYxMDEsInR0cHR5Y21kIGlzX3RuIiwiIixpc190bik7CisgICAgZGVidWcoRjEwMSwidHRwdHlj bWQgY2tlcm1pdCBwaWQiLCIiLGdldHBpZCgpKTsKKworI2lmZGVmIFVTRV9DS1VQVFlfQworICAg IC8qIENhbGwgY2t1cHR5LmMgbW9kdWxlIHRvIGdldCBhbmQgc2V0IHVwIHRoZSBwdHkgZm9yayAq LworICAgIC8qIGZjIDEgPT0gInJ1biBhbiBleHRlcm5hbCBwcm90b2NvbCIgKi8KKyAgICBkZWJ1 ZyhGMTAwLCJ0dHB0eWNtZCB1c2luZyBja3VwdHkuYyIsIiIsMCk7CisgICAgaWYgKGRvX3B0eSgm cHR5ZmQscywxKSA8IDApIHsJLyogU3RhcnQgdGhlIGNvbW1hbmQgb24gYSBwdHkgKi8KKwlkZWJ1 ZyhGMTAwLCJ0dHB0eWNtZCBkb19wdHkgZmFpbHMiLCIiLDApOworCXJldHVybigwKTsKKyAgICB9 CisgICAgbWFzdGVyZmQgPSBwdHlmZDsKKyAgICBwdHlfbWFzdGVyX2ZkID0gcHR5ZmQ7CisjaWZk ZWYgQ09NTUVOVAorICAgIHNsYXZlZmQgPSBwdHlfc2xhdmVfZmQ7CQkvKiBUaGlzIGlzIG5vdCB2 aXNpYmxlIHRvIHVzICovCisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgIGRlYnVnKEYxMTEsInR0 cHR5Y21kIHB0eWZkIiwiVVNFX0NLVVBUWV9DIixwdHlmZCk7CisgICAgZGVidWcoRjExMSwidHRw dHljbWQgbWFzdGVyZmQiLCJVU0VfQ0tVUFRZX0MiLG1hc3RlcmZkKTsKKyAgICBkZWJ1ZyhGMTEx LCJ0dHB0eWNtZCBmb3JrIHBpZCIsIlVTRV9DS1VQVFlfQyIscHR5X2ZvcmtfcGlkKTsKKyNpZm5k ZWYgU09MQVJJUworICAgIC8qICJpb2N0bCBpbmFwcHJvcHJpYXRlIG9uIGRldmljZSIgZm9yIHB0 eSBtYXN0ZXIgKi8KKyAgICBwdHlfbWFrZV9yYXcobWFzdGVyZmQpOworI2VuZGlmIC8qIFNPTEFS SVMgKi8KKworI2Vsc2UgLyogVVNFX0NLVVBUWV9DICovCisKKyAgICBkZWJ1ZyhGMTAwLCJ0dHB0 eWNtZCBPUEVOUFRZIiwiIiwwKTsKKyAgICBpZiAodGNnZXRhdHRyKDAsICZ0ZXJtKSA9PSAtMSkg ewkvKiBHZXQgY29udHJvbGxpbmcgdGVybWluYWwncyBtb2RlcyAqLworCXBlcnJvcigidGNnZXRh dHRyIik7CisJcmV0dXJuKDApOworICAgIH0KKyAgICBpZiAoaW9jdGwoMCwgVElPQ0dXSU5TWiwg KGNoYXIgKikgJnR3aW4pID09IC0xKSB7IC8qIGFuZCB3aW5kb3cgc2l6ZSAqLworCXBlcnJvcigi aW9jdGwgVElPQ0dXSU5TWiIpOworCXJldHVybigwKTsKKyAgICB9CisgICAgaWYgKG9wZW5wdHko Jm1hc3RlcmZkLCAmc2xhdmVmZCwgTlVMTCwgTlVMTCwgTlVMTCkgPT0gLTEpIHsKKwlkZWJ1ZyhG MTAxLCJ0dHB0eWNtZCBvcGVucHR5IGZhaWxlZCBlcnJubyIsIiIsZXJybm8pOworCXBlcnJvcigi b3BlbnRweSIpOworCXJldHVybigwKTsKKyAgICB9CisgICAgZGVidWcoRjEwMSwidHRwdHljbWQg b3BlbnB0eSBtYXN0ZXJmZCIsIiIsbWFzdGVyZmQpOworICAgIGRlYnVnKEYxMDEsInR0cHR5Y21k IG9wZW5wdHkgc2xhdmVmZCIsIiIsc2xhdmVmZCk7CisgICAgcHR5X21hc3Rlcl9mZCA9IG1hc3Rl cmZkOworICAgIHB0eV9zbGF2ZV9mZCA9IHNsYXZlZmQ7CisgICAgZGVidWcoRjEwMSwidHRwdHlj bWQgb3BlbnB0eSBwdHlfbWFzdGVyX2ZkIiwiIixwdHlfbWFzdGVyX2ZkKTsKKworICAgIC8qIFB1 dCBwdHkgbWFzdGVyIGluIHJhdyBtb2RlIGJ1dCBsZXQgZm9ya2VkIGFwcCBjb250cm9sIHRoZSBz bGF2ZSAqLworICAgIHB0eV9tYWtlX3JhdyhtYXN0ZXJmZCk7CisKKyNpZmRlZiBDT01NRU5UCisj aWZkZWYgVElPQ1JFTU9URQorICAgIC8qIFRJT0NSRU1PVEUsMCA9IGRpc2FibGUgYWxsIHRlcm1p byBwcm9jZXNzaW5nICovCisgICAgeCA9IGlvY3RsKG1hc3RlcmZkLCBUSU9DUkVNT1RFLCAxKTsK KyAgICBkZWJ1ZyhGMTExLCJ0dHB0eWNtZCBpb2N0bCBUSU9DUkVNT1RFIixja2l0b2EoeCksZXJy bm8pOworI2VuZGlmCS8qIFRJT0NSRU1PVEUgKi8KKyNpZmRlZiBUSU9DVFRZCisgICAgLyogVElP Q1RUWSwwID0gZGlzYWJsZSBhbGwgdGVybWlvIHByb2Nlc3NpbmcgKi8KKyAgICB4ID0gaW9jdGwo bWFzdGVyZmQsIFRJT0NUVFksIDApOworICAgIGRlYnVnKEYxMTEsInR0cHR5Y21kIGlvY3RsIFRJ T0NUVFkiLGNraXRvYSh4KSxlcnJubyk7CisjZW5kaWYJLyogVElPQ1RUWSAqLworI2VuZGlmIC8q IENPTU1FTlQgKi8KKworICAgIGhhdmVfcHR5ID0gMTsJCQkvKiBXZSBoYXZlIGFuIG9wZW4gcHR5 ICovCisgICAgc2F2ZV9zaWdjaGxkID0gc2lnbmFsKFNJR0NITEQsIHNpZ2NobGRfaGFuZGxlcik7 IC8qIENhdGNoIGZvcmsgcXVpdCAqLworCisgICAgcHR5X2ZvcmtfcGlkID0gZm9yaygpOwkJLyog TWFrZSBmb3JrIGZvciBleHRlcm5hbCBwcm90b2NvbCAqLworICAgIGRlYnVnKEYxMDEsInR0cHR5 Y21kIHB0eV9mb3JrX3BpZCIsIiIscHR5X2ZvcmtfcGlkKTsKKyAgICBpZiAocHR5X2ZvcmtfcGlk ID09IC0xKSB7CisJcGVycm9yKCJmb3JrIik7CisJcmV0dXJuKDApOworICAgIH0gZWxzZSBpZiAo cHR5X2ZvcmtfcGlkID09IDApIHsJLyogSW4gbmV3IGZvcmsgKi8KKwlpbnQgeDsKKwlkZWJ1ZyhG MTAxLCJ0dHB0eWNtZCBuZXcgZm9yayBwaWQiLCIiLGdldHBpZCgpKTsKKwljbG9zZShtYXN0ZXJm ZCk7CQkvKiBTbGF2ZSBxdWFydGVycyBubyBtYXN0ZXJzIGFsbG93ZWQgKi8KKwl4ID0gc2V0c2lk KCk7CisJZGVidWcoRjEwMSwidHRwdHljbWQgbmV3IGZvcmsgc2V0c2lkIiwiIix4KTsKKwlpZiAo eCA9PSAtMSkgeworCSAgICBwZXJyb3IoInR0cHR5Y21kIHNldHNpZCIpOworCSAgICBleGl0KDEp OworCX0KKwlzaWduYWwoU0lHSU5ULFNJR19JR04pOwkJLyogTGV0IHVwcGVyIGZvcmsgY2F0Y2gg dGhpcyAqLworCQorI2lmZGVmIENPTU1FTlQKKyNpZmRlZiBUSU9DU0NUVFkKKwkvKiBNYWtlIHB0 eSB0aGUgY29udHJvbGxpbmcgdGVybWluYWwgZm9yIHRoZSBwcm9jZXNzICovCisJLyogVEhJUyBD QVVTRVMgQU4gSU5GSU5JVEUgU0lHV0lOQ0ggSU5URVJSVVBUIExPT1AgKi8KKwl4ID0gaW9jdGwo c2xhdmVmZCwgVElPQ1NDVFRZLCBOVUxMKTsKKwlkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCBUSU9DU0NU VFkiLCIiLHgpOworI2VuZGlmCS8qIFRJT0NTQ1RUWSAqLworI2VuZGlmCS8qIENPTU1FTlQgKi8K KworCS8qIEluaXRpYWxpemUgc2xhdmUgcHR5IG1vZGVzIGFuZCBzaXplIHRvIHRob3NlIG9mIG91 ciB0ZXJtaW5hbCAqLworCWlmICh0Y3NldGF0dHIoc2xhdmVmZCwgVENTQU5PVywgJnRlcm0pID09 IC0xKSB7CisJICAgIHBlcnJvcigidHRwdHljbWQgdGNzZXRhdHRyIik7CisJICAgIGV4aXQoMSk7 CisJfQorCWlmIChpb2N0bChzbGF2ZWZkLCBUSU9DU1dJTlNaLCAmdHdpbikgPT0gLTEpIHsKKwkg ICAgcGVycm9yKCJ0dHB0eWNtZCBpb2N0bCIpOworCSAgICBleGl0KDEpOworCX0KKyNpZmRlZiBD T01NRU5UCisjaWZkZWYgVElPQ05PVFRZCisJLyogRGlzYXNzb2NpYXRlIHRoaXMgcHJvY2VzcyBm cm9tIGl0cyB0ZXJtaW5hbCAqLworCS8qIFRISVMgSEFTIE5PIEVGRkVDVCAqLworCXggPSBpb2N0 bChzbGF2ZWZkLCBUSU9DTk9UVFksIE5VTEwpOworCWRlYnVnKEYxMDEsInR0cHR5Y21kIFRJT0NO T1RUWSIsIiIseCk7CisjZW5kaWYJLyogVElPQ05PVFRZICovCisjZW5kaWYJLyogQ09NTUVOVCAq LworCisjaWZkZWYgQ09NTUVOVAorI2lmZGVmIFNJR1RUT1UJCisJLyogSWdub3JlIHRlcm1pbmFs IG91dHB1dCBpbnRlcnJ1cHRzICovCisJLyogVEhJUyBIQVMgTk8gRUZGRUNUICovCisJZGVidWco RjEwMCwidHRwdHljbWQgaWdub3JpbmcgU0lHVFRPVSIsIiIsMCk7CisJc2lnbmFsKFNJR1RUT1Us IFNJR19JR04pOworI2VuZGlmCS8qIFNJR1RUT1UgKi8KKyNpZmRlZiBTSUdUU1RQCQorCS8qIEln bm9yZSB0ZXJtaW5hbCBvdXRwdXQgaW50ZXJydXB0cyAqLworCS8qIFRISVMgSEFTIE5PIEVGRkVD VCAqLworCWRlYnVnKEYxMDAsInR0cHR5Y21kIGlnbm9yaW5nIFNJR1RTVFAiLCIiLDApOworCXNp Z25hbChTSUdUU1RQLCBTSUdfSUdOKTsKKyNlbmRpZgkvKiBTSUdUU1RQICovCisjZW5kaWYJLyog Q09NTUVOVCAqLworCisJcHR5X21ha2VfcmF3KHNsYXZlZmQpOwkJLyogUHV0IGl0IGluIHJhd21v ZGUgKi8KKworCWVycm5vID0gMDsKKwlpZiAoZHVwMihzbGF2ZWZkLCBTVERJTl9GSUxFTk8pICE9 IFNURElOX0ZJTEVOTyB8fAorCSAgICBkdXAyKHNsYXZlZmQsIFNURE9VVF9GSUxFTk8pICE9IFNU RE9VVF9GSUxFTk8pIHsKKwkgICAgZGVidWcoRjEwMSwidHRwdHljbWQgbmV3IGZvcmsgZHVwMiBl cnJvciIsIiIsZXJybm8pOworCSAgICBwZXJyb3IoInR0cHR5Y21kIGR1cDIiKTsKKwkgICAgZXhp dCgxKTsKKwl9CisJZGVidWcoRjEwMCwidHRwdHljbWQgbmV3IGZvcmsgZHVwMiBvayIsIiIsMCk7 CisKKwkvKiBQYXJzZSBleHRlcm5hbCBwcm90b2NvbCBjb21tYW5kIGxpbmUgKi8KKwlxID0gY2tz cGxpdCgxLDAscyxOVUxMLCJcXCVbXSYkKy0vPSpeX0Ahe30vPD58LiN+J2A6Oz8iLDcsMCwwKTsK KwlpZiAoIXEpIHsKKwkgICAgZGVidWcoRjEwMCwidHRwdHljbWQgY2tzcGxpdCBmYWlsZWQiLCIi LDApOworCSAgICBleGl0KDEpOworCX0gZWxzZSB7CisJICAgIGludCBpLCBuOworCSAgICBkZWJ1 ZyhGMTAwLCJ0dHB0eWNtZCBja3NwbGl0IG9rIiwiIiwwKTsKKwkgICAgbiA9IHEtPmFfc2l6ZTsK KwkgICAgYXJncyA9IHEtPmFfaGVhZCArIDE7CisJICAgIGZvciAoaSA9IDA7IGkgPD0gbjsgaSsr KSB7CisJCWlmICghYXJnc1tpXSkgeworCQkgICAgYnJlYWs7CisJCX0gZWxzZSB7CisJCSAgICAv KiBzb21ldGltZXMgY2tzcGxpdCgpIGRvZXNuJ3QgdGVybWluYXRlIHRoZSBsaXN0ICovCisJCSAg ICBpZiAoKGkgPT0gbikgJiYgYXJnc1tpXSkgeworCQkJaWYgKChpbnQpc3RybGVuKGFyZ3NbaV0p ID09IDApCisJCQkgIG1ha2VzdHIoJihhcmdzW2ldKSxOVUxMKTsKKwkJICAgIH0KKwkJfQorCSAg ICB9CSAgICAKKwl9CisjaWZkZWYgQ09NTUVOVAorLyoKKyAgUHV0dGluZyB0aGUgc2xhdmUgcHR5 IGluIHJhd21vZGUgc2hvdWxkIG5vdCBiZSBuZWNlc3NhcnkgYmVjYXVzZSB0aGUKKyAgZXh0ZXJu YWwgcHJvdG9jb2wgcHJvZ3JhbSBpcyBzdXBwb3NlZCB0byBkbyB0aGF0IGl0c2VsZi4gIFlldCBk b2luZyB0aGlzCisgIGhlcmUgY3V0cyBkb3duIG9uIFptb2RlbSBiaW5hcnktZmlsZSB0cmFuc21p c3Npb24gZXJyb3JzIGJ5IDMwLTUwJSBidXQKKyAgc3RpbGwgZG9lc24ndCBlbGltaW5hdGUgdGhl bS4KKyovCisJcHR5X21ha2VfcmF3KFNURElOX0ZJTEVOTyk7CisJcHR5X21ha2VfcmF3KFNURE9V VF9GSUxFTk8pOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKworCWRlYnVnKEYxMDAsInR0cHR5Y21k IGV4ZWN2cCdpbmcgZXh0ZXJuYWwgcHJvdG9jb2wiLCIiLDApOworCWV4ZWN2cChhcmdzWzBdLGFy Z3MpOworCXBlcnJvcigiZXhlY3ZwIGZhaWxlZCIpOworCWRlYnVnKEYxMDEsInR0cHR5Y21kIGV4 ZWN2cCBmYWlsZWQiLCIiLGVycm5vKTsKKwljbG9zZShzbGF2ZWZkKTsKKwlleGl0KDEpOworICAg IH0gCisgICAgLyogKHRoZXJlIGFyZSBiZXR0ZXIgd2F5cyB0byBkbyB0aGlzLi4uKSAqLworICAg IG1zbGVlcCgxMDAwKTsJCSAgLyogTWFrZSBwYXJlbnQgd2FpdCBmb3IgY2hpbGQgdG8gYmUgcmVh ZHkgKi8KKyAgICBwdHlmZCA9IG1hc3RlcmZkOwkJCS8qIFdlIHRhbGsgdG8gdGhlIG1hc3RlciAq LworCisjZW5kaWYgLyogVVNFX0NLVVBUWV9DICovCisKKyAgICBkZWJ1ZyhGMTAxLCJ0dHB0eWNt ZCBwdHlmZCIsIiIscHR5ZmQpOworICAgIGlmIChwdHlmZCA8IDApIHsKKwlwcmludGYoIj9GYWls dXJlIHRvIGdldCBwdHlcbiIpOworCXJldHVybigtOSk7CisgICAgfQorICAgIGhhdmVfcHR5ID0g MTsJICAgICAgLyogV2UgaGF2ZSBhbiBvcGVuIHB0eSBvciB3ZSB3b3VsZG4ndCBoZSBoZXJlICov CisKKyAgICBkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCBQVFlfUEJVRl9TSVpFIiwiIixQVFlfUEJVRl9T SVpFKTsKKyAgICBkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCBQVFlfVEJVRl9TSVpFIiwiIixQVFlfVEJV Rl9TSVpFKTsKKworI2lmZGVmIFBUWV9VU0VfTkRFTEFZCisgICAgLyogCisgICAgICAgTk9URTog SWYgc2VsZWN0KCkgYW5kIGlvY3RsKHB0eWZkLEZJT05SRUFELCZuKSByZXR1cm4gdHJ1ZSBpbmRp Y2F0aW9ucworICAgICAgIG9uIHRoZSBwdHksIHdlIGRvbid0IG5lZWQgbm9uYmxvY2tpbmcgcmVh ZHMuICBQZXJmb3JtYW5jZSBvZiBlaXRoZXIKKyAgICAgICBtZXRob2Qgc2VlbXMgdG8gYmUgYWJv dXQgdGhlIHNhbWUsIHNvIHVzZSB3aGF0ZXZlciB3b3Jrcy4KKyAgICAqLworICAgIGVycm5vID0g MDsKKyAgICB4ID0gZmNudGwocHR5ZmQsRl9TRVRGTCxmY250bChwdHlmZCxGX0dFVEZMLCAwKXxP X05ERUxBWSk7CisgICAgY2ttYWttc2cobXNnYnVmLDUwMCwKKwkgICAgICJ0dHB0eWNtZCBzZXQg T19OREVMQVkgZXJybm89IiwKKwkgICAgIGNraXRvYShlcnJubyksCisJICAgICAiIGZjbnRsPSIs CisJICAgICBja2l0b2EoeCkpOworICAgIGRlYnVnKEYxMDAsbXNnYnVmLCIiLDApOworI2VuZGlm IC8qIFBUWV9VU0VfTkRFTEFZICovCisKKyNpZmRlZiBDT01NRU5UCisvKiBOb3QgbmVjZXNzYXJ5 LCB0aGUgcHJvdG9jb2wgbW9kdWxlIGFscmVhZHkgZGlkIHRoaXMgKi8KKworI2lmZGVmIFVTRV9D Rk1BS0VSQVcKKyAgICBpZiAodGNnZXRhdHRyKHR0eWZkLCAmdGVybSkgPiAtMSkgeworCWNmbWFr ZXJhdygmdGVybSk7CisJZGVidWcoRjEwMSwidHRwdHljbWQgbmV0IGNmbWFrZXJhdyBlcnJubyIs IiIsZXJybm8pOworCXggdGNzZXRhdHRyKHR0eWZkLCBUQ1NBTk9XLCAmdGVybSk7CisJZGVidWco RjEwMSwidHRwdHljbWQgbmV0IHRjc2V0YXR0ciIsIiIseCk7CisJZGVidWcoRjEwMSwidHRwdHlj bWQgbmV0IHRjc2V0YXR0ciIsIiIsZXJybm8pOworICAgIH0KKyNlbHNlCisgICAgaWYgKGxvY2Fs KQkJCQkvKiBQdXQgbmV0d29yayBjb25uZWN0aW9uIGluICovCisgICAgICB0dHBrdCh0dHNwZWVk LHR0Zmxvdyx0dHBydHkpOwkvKiAicGFja2V0IG1vZGUiLiAqLworICAgIGVsc2UKKyAgICAgIGNv bmJpbigoY2hhcillc2NjaHIpOwkJLyogT1IuLi4gcHR5X21ha2VfcmF3KDApICovCisjZW5kaWYg LyogVVNFX0NGTUFLRVJBVyAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKworI2lmZGVmIFROQ09E RQorICAgIGlmIChpc190bikgeworICAgICAgZGVidWcoRjEwMSwiPDw8IHR0cHR5Y21kIFRFTE9Q VF9NRV9CSU5BUlkiLCIiLFRFTE9QVF9NRShURUxPUFRfQklOQVJZKSk7CisgICAgICBkZWJ1ZyhG MTAxLCI8PDwgdHRwdHljbWQgVEVMT1BUX1VfQklOQVJZIiwiIixURUxPUFRfVShURUxPUFRfQklO QVJZKSk7CisgICAgfQorI2VuZGlmIC8qIFROQ09ERSAqLworCisgICAgZGVidWcoRjEwMSwidHRw dHljbWQgZW50ZXJpbmcgbG9vcCAtIHNlY29uZHNfdG9fd2FpdCIsIiIsc2Vjb25kc190b193YWl0 KTsKKworICAgIHdoaWxlIChoYXZlX3B0eSB8fCBoYXZlX25ldCkgeworCUZEX1pFUk8oJmluKTsJ CQkvKiBJbml0aWFsaXplIHNlbGVjdCgpIHN0cnVjdHMgKi8KKwlGRF9aRVJPKCZvdXQpOworCUZE X1pFUk8oJmVycik7CQkJLyogKG5vdCB1c2VkIGJlY2F1c2UgdXNlbGVzcykgKi8KKwluZmRzID0g LTE7CisKKwlkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCBsb29wIHRvcCBoYXZlX3B0eSIsIiIsaGF2ZV9w dHkpOworCWRlYnVnKEYxMDEsInR0cHR5Y21kIGxvb3AgdG9wIGhhdmVfbmV0IiwiIixoYXZlX25l dCk7CisKKwkvKiBQdHkgaXMgb3BlbiBhbmQgd2UgaGF2ZSByb29tIHRvIHJlYWQgZnJvbSBpdD8g Ki8KKwlpZiAoaGF2ZV9wdHkgJiYgcGJ1Zl9hdmFpbCA8IFBUWV9QQlVGX1NJWkUpIHsKKwkgICAg ZGVidWcoRjEwMCwidHRwdHljbWQgRkRfU0VUIHB0eWZkIGluIiwiIiwwKTsKKyAgICAgICAgICAg IEZEX1NFVChwdHlmZCwgJmluKTsKKwkgICAgbmZkcyA9IHB0eWZkOworICAgICAgICB9CisJLyog TmV0d29yayBpcyBvcGVuIGFuZCB3ZSBoYXZlIHJvb20gdG8gcmVhZCBmcm9tIGl0PyAqLworICAg ICAgICBpZiAoaGF2ZV9uZXQgJiYgaGF2ZV9wdHkgJiYgdGJ1Zl9hdmFpbCA8IFBUWV9UQlVGX1NJ WkUpIHsKKwkgICAgZGVidWcoRjEwMCwidHRwdHljbWQgRkRfU0VUIHR0eWZkIGluIiwiIiwwKTsK KyAgICAgICAgICAgIEZEX1NFVCh0dHlmZCwgJmluKTsKKwkgICAgaWYgKHR0eWZkID4gbmZkcykg bmZkcyA9IHR0eWZkOworICAgICAgICB9CisJLyogUHR5IGlzIG9wZW4gYW5kIHdlIGhhdmUgc3R1 ZmYgdG8gd3JpdGUgdG8gaXQ/ICovCisgICAgICAgIGlmIChoYXZlX3B0eSAmJiB0YnVmX2F2YWls IC0gdGJ1Zl93cml0dGVuID4gMCkgeworCSAgICBkZWJ1ZyhGMTAwLCJ0dHB0eWNtZCBGRF9TRVQg cHR5ZmQgb3V0IiwiIiwwKTsKKyAgICAgICAgICAgIEZEX1NFVCAocHR5ZmQsICZvdXQpOworCSAg ICBpZiAocHR5ZmQgPiBuZmRzKSBuZmRzID0gcHR5ZmQ7CisgICAgICAgIH0KKwkvKiBOZXQgaXMg b3BlbiBhbmQgd2UgaGF2ZSBzdHVmZiB0byB3cml0ZSB0byBpdD8gKi8KKwlkZWJ1ZyhGMTAxLCJ0 dHB0eWNtZCBwYnVmX2F2YWlsLXBidWZfd3JpdHRlbiIsIiIsCisJICAgICAgcGJ1Zl9hdmFpbCAt IHBidWZfd3JpdHRlbik7CisgICAgICAgIGlmIChoYXZlX25ldCAmJiBwYnVmX2F2YWlsIC0gcGJ1 Zl93cml0dGVuID4gMCkgeworCSAgICBkZWJ1ZyhGMTAwLCJ0dHB0eWNtZCBGRF9TRVQgdHR5ZmQg b3V0IiwiIiwwKTsKKyAgICAgICAgICAgIEZEX1NFVCAodHR5ZmQsICZvdXQpOworCSAgICBpZiAo dHR5ZmQgPiBuZmRzKSBuZmRzID0gdHR5ZmQ7CisgICAgICAgIH0KKwkvKiBXZSBkb24ndCB1c2Ug ZXJyIGJlY2F1c2UgaXQncyBub3QgcmVhbGx5IGZvciBlcnJvcnMsICovCisJLyogYnV0IGZvciBv dXQgb2YgYmFuZCBkYXRhIG9uIHRoZSBUQ1Agc29ja2V0LCB3aGljaCwgaWYgaXQgaXMgKi8KKwkv KiB0byBiZSBoYW5kbGVkIGF0IGFsbCwgaXMgaGFuZGxlZCBpbiB0aGUgdHQqKCkgcm91dGluZXMg Ki8KKworCW5mZHMrKzsJCQkJLyogMC1iYXNlZCB0byAxLWJhc2VkICovCisJZGVidWcoRjEwMSwi dHRwdHljbWQgbmZkcyIsIiIsbmZkcyk7CisJaWYgKCFuZmRzKSB7CisJICAgIGRlYnVnKEYxMDAs InR0cHR5Y21kIE5PIEZEcyBzZXQgZm9yIHNlbGVjdCIsIiIsMCk7CisJICAgIGlmIChoYXZlX3B0 eSkgeworCQkvKiBUaGlzIGlzIG5vdCByaWdodCAtLSBzbGVlcGluZyB3b24ndCBhY2NvbXBsaXNo IGFueXRoaW5nICovCisJCWRlYnVnKEYxMDEsInR0cHR5Y21kIG1zbGVlcCIsIiIsMTAwKTsKKwkJ bXNsZWVwKDEwMCk7CSAgICAKKwkgICAgfSBlbHNlIHsKKwkJZGVidWcoRjEwMCwidHRwdHljbWQg bm8gcHR5IC0gcXVpdHRpbmcgbG9vcCIsIiIsMCk7CisJCWJyZWFrOworCSAgICB9CisJfQorCWVy cm5vID0gMDsKKworCWlmIChzZWNvbmRzX3RvX3dhaXQgPiAwTCkgewkvKiBUaW1lb3V0IGluIGNh c2Ugbm90aGluZyBoYXBwZW5zICovCisJICAgIHR2LnR2X3NlYyA9IHNlY29uZHNfdG9fd2FpdDsg LyogZm9yIGEgbG9uZyB0aW1lICovCisJICAgIHR2LnR2X3VzZWMgPSAwTDsJCQorCSAgICB0djIg PSAmdHY7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0djIgPSBOVUxMOworCX0KKwl4 ID0gc2VsZWN0KG5mZHMsICZpbiwgJm91dCwgTlVMTCwgdHYyKTsKKwlkZWJ1ZyhGMTAxLCJ0dHB0 eWNtZCBzZWxlY3QiLCIiLHgpOworCWlmICh4IDwgMCkgeworCSAgICBpZiAoZXJybm8gPT0gRUlO VFIpCisJICAgICAgY29udGludWU7CisJICAgIGRlYnVnKEYxMDEsInR0cHR5Y21kIHNlbGVjdCBl cnJvciIsIiIsZXJybm8pOworCSAgICBicmVhazsKKwl9CisJaWYgKHggPT0gMCkgeworCSAgICBk ZWJ1ZyhGMTAxLCJ0dHB0eWNtZCArKysgc2VsZWN0IHRpbWVvdXQiLCIiLHNlY29uZHNfdG9fd2Fp dCk7IAorCSAgICBpZiAoaGF2ZV9wdHkpIHsKKwkJc3RhdHVzID0gcHR5X2dldF9zdGF0dXMocHR5 ZmQscHR5X2ZvcmtfcGlkKTsKKwkJZGVidWcoRjEwMSwidHRwdHljbWQgcHR5X2dldF9zdGF0dXMg QSIsIiIsc3RhdHVzKTsKKwkJaWYgKHN0YXR1cyA+IC0xKSBwZXhpdHN0YXQgPSBzdGF0dXM7CisJ CWhhdmVfcHR5ID0gMDsKKwkgICAgfQorCSAgICBicmVhazsKKwl9CisJLyogV2Ugd2FudCB0byBo YW5kbGUgYW55IHBlbmRpbmcgd3JpdGVzIGZpcnN0IHRvIG1ha2Ugcm9vbSAqLworCS8qIGZvciBu ZXcgaW5jb21pbmcuICovCisKKwlpZiAoRkRfSVNTRVQodHR5ZmQsICZvdXQpKSB7CS8qIENhbiB3 cml0ZSB0byBuZXQ/ICovCisJICAgIENIQVIgKiBzOworCSAgICBzID0gcGJ1ZiArIHBidWZfd3Jp dHRlbjsJLyogQ3VycmVudCBzcG90IGZvciBzZW5kaW5nICovCisjaWZkZWYgVE5DT0RFCisJICAg IGlmIChpc190bikgewkJLyogdHRvbCgpIGRvZXNuJ3QgZG91YmxlIElBQ3MgKi8KKwkJQ0hBUiBj OwkJCS8qIFJld3JpdGUgc3RyaW5nIHdpdGggSUFDcyBkb3VibGVkICovCisJCWludCBpOworCQlz ID0gcGJ1ZiArIHBidWZfd3JpdHRlbjsgLyogU291cmNlICovCisJCXggPSAwOwkJIAkgLyogQ291 bnQgKi8KKwkJZm9yIChpID0gMDsgaSA8IHBidWZfYXZhaWwgLSBwYnVmX3dyaXR0ZW47IGkrKykg eworCQkgICAgYyA9IHNbaV07CQkvKiBOZXh0IGNoYXJhY3RlciAqLworCQkgICAgaWYgKGMgPT0g SUFDKSB7CS8qIElmIGl0J3MgSUFDICovCisJCQlkYnVmW3grK10gPSBjOwkvKiBwdXQgYW5vdGhl ciBvbmUgKi8KKwkJCWRlYnVnKEYwMDAsIj4+PiBRVU9URUQgSUFDIiwiIixjKTsKKwkJICAgIH0g ZWxzZSBpZiAoYyAhPSAweDBhICYmIG91dF9wcmV2ID09IDB4MGQpIHsJLyogQmFyZSBDUiAqLwor CQkJaWYgKCFURUxPUFRfTUUoVEVMT1BUX0JJTkFSWSkpIHsgLyogTlZUIHJ1bGUgKi8KKwkJCSAg ICBjID0gMHgwMDsKKwkJCSAgICBkYnVmW3grK10gPSBjOworCQkJICAgIGRlYnVnKEYwMDAsIj4+ PiBDUi1OVUwiLCIiLGMpOworCQkJfQkJCQorCQkgICAgfQorCQkgICAgZGJ1Zlt4KytdID0gYzsJ LyogQ29weSBhbmQgY291bnQgaXQgKi8KKwkJICAgIGRlYnVnKEYwMDAsIj4+PiBjaGFyIixja2l0 b2EoaW5fc3RhdGUpLGMpOworCQkgICAgb3V0X3ByZXYgPSBjOworCQl9CisJCXMgPSBkYnVmOwkJ LyogTmV3IHNvdXJjZSAqLworCSAgICB9IGVsc2UKKyNlbmRpZiAvKiBUTkNPREUgKi8KKwkgICAg ICB4ID0gcGJ1Zl9hdmFpbCAtIHBidWZfd3JpdHRlbjsgLyogSG93IG11Y2ggdG8gc2VuZCAqLwor CisJICAgIGRlYnVnKEYxMDEsInR0cHR5Y21kIGJ5dGVzIHRvIHNlbmQiLCIiLHgpOworCSAgICB4 ID0gdHRvbChzLCB4KTsKKwkgICAgZGVidWcoRjEwMSwiPj4+IHR0b2wiLCIiLHgpOworCSAgICBp ZiAoeCA8IDApIHsKKwkJbmV0X2VycisrOworCQlkZWJ1ZyhGMTExLCJ0dHB0eWNtZCB0dG9sIGVy cm9yIixja2l0b2EoeCksZXJybm8pOworCQl4ID0gMDsKKwkgICAgfQorCSAgICB3cml0ZV9uZXRf Ynl0ZXMgKz0geDsKKwkgICAgcGJ1Zl93cml0dGVuICs9IHg7CisJfQorCWlmIChGRF9JU1NFVChw dHlmZCwgJm91dCkpIHsJLyogQ2FuIHdyaXRlIHRvIHB0eT8gKi8KKwkgICAgZGVidWcoRjEwMCwi dHRwdHljbWQgRkRfSVNTRVQgcHR5ZmQgb3V0IiwiIiwwKTsKKwkgICAgZXJybm8gPSAwOworI2lm bmRlZiBDT01NRU5UCisJICAgIHggPSB3cml0ZShwdHlmZCx0YnVmICsgdGJ1Zl93cml0dGVuLHRi dWZfYXZhaWwgLSB0YnVmX3dyaXR0ZW4pOworI2Vsc2UKKwkgICAgLyogQnl0ZSBsb29wIHRvIHJ1 bGUgb3V0IGRhdGEgb3ZlcnJ1bnMgaW4gdGhlIHB0eSAqLworCSAgICAvKiAoaXQgbWFrZXMgbm8g ZGlmZmVyZW5jZSkgKi8KKwkgICAgeworCQljaGFyICpwID0gdGJ1Zit0YnVmX3dyaXR0ZW47CisJ CWludCBuID0gdGJ1Zl9hdmFpbCAtIHRidWZfd3JpdHRlbjsKKwkJZm9yICh4ID0gMDsgeCA8IG47 IHgrKykgeworCQkgICAgbXNsZWVwKDEwKTsKKwkJICAgIGlmICh3cml0ZShwdHlmZCwmKHBbeF0p LDEpIDwgMCkKKwkJICAgICAgYnJlYWs7CisJCX0KKwkgICAgfQorI2VuZGlmIC8qIENPTU1FTlQg Ki8KKwkgICAgZGVidWcoRjExMSwidHRwdHljbWQgcHR5ZmQgd3JpdGUiLGNraXRvYShlcnJubyks eCk7CisJICAgIGlmICh4ID4gMCkgeworCQl0YnVmX3dyaXR0ZW4gKz0geDsKKwkJd3JpdGVfcHR5 X2J5dGVzICs9IHg7CisJICAgIH0gZWxzZSB7CisJCXggPSAwOworCQlwdHlfZXJyKys7CisJCWlm IChwZXhpdHN0YXQgPCAwKSB7CisJCSAgICBzdGF0dXMgPSBwdHlfZ2V0X3N0YXR1cyhwdHlmZCxw dHlfZm9ya19waWQpOworCQkgICAgZGVidWcoRjEwMSwidHRwdHljbWQgcHR5X2dldF9zdGF0dXMg QiIsIiIsc3RhdHVzKTsKKwkJICAgIGlmIChzdGF0dXMgPiAtMSkgcGV4aXRzdGF0ID0gc3RhdHVz OworCQkgICAgaGF2ZV9wdHkgPSAwOworCQl9CisJCWRlYnVnKEYxMDAsInR0cHR5Y21kICsrKyBw dHlmZCB3cml0ZSBlcnJvciIsIiIsMCk7CisJICAgIH0KKwl9CisJaWYgKEZEX0lTU0VUKHR0eWZk LCAmaW4pKSB7CS8qIENhbiByZWFkIGZyb20gbmV0PyAqLworCSAgICB0c2V0Kys7CisJICAgIGRl YnVnKEYxMDAsInR0cHR5Y21kIEZEX0lTU0VUIHR0eWZkIGluIiwiIiwwKTsKKwkgICAgbiA9IGlu X2NoaygxLHR0eWZkKTsKKwkgICAgZGVidWcoRjEwMSwidHRwdHljbWQgaW5fY2hrKHR0eWZkKSIs IiIsbik7IAorCSAgICBpZiAobiA8IDAgfHwgdHR5ZmQgPT0gLTEpIHsKKwkJZGVidWcoRjEwMSwi dHRwdHljbWQgKysrIHR0eWZkIGVycm5vIiwiIixlcnJubyk7CisJCW5ldF9lcnIrKzsKKwkgICAg fSBlbHNlIGlmIChuID4gMCkgeworCQlpZiAobiA+IFBUWV9UQlVGX1NJWkUgLSB0YnVmX2F2YWls KQorCQkgIG4gPSBQVFlfVEJVRl9TSVpFIC0gdGJ1Zl9hdmFpbDsKKwkJZGVidWcoRjEwMSwidHRw dHljbWQgbmV0IHJlYWQgc2l6ZSBhZGp1c3RlZCIsIiIsbik7IAorCQlpZiAoeGxvY2FsICYmIG5l dGNvbm4pIHsKKwkJICAgIC8qCisJCSAgICAgIFdlIGhhdmUgdG8gdXNlIGEgYnl0ZSBsb29wIGhl cmUgYmVjYXVzZSB0dHhpbigpCisJCSAgICAgIGRvZXMgbm90IGRlY3J5cHQgb3IsIGZvciB0aGF0 IG1hdHRlciwgaGFuZGxlIFRlbG5ldC4KKwkJICAgICovCisJCSAgICBpbnQgYzsKKwkJICAgIENI QVIgKiBwOworCQkgICAgcCA9IHRidWYgKyB0YnVmX2F2YWlsOworCQkgICAgZm9yICh4ID0gMDsg eCA8IG47IHgrKykgeworCQkJaWYgKChjID0gdHRpbmMoMCkpIDwgMCkKKwkJCSAgYnJlYWs7CisJ CQlpZiAoIWlzX3RuKSB7CS8qIE5vdCBUZWxuZXQgLSBrZWVwIGFsbCBieXRlcyAqLworCQkJICAg ICpwKysgPSAoQ0hBUiljOworCQkJICAgIGRlYnVnKEYwMDAsIjw8PCBjaGFyIiwiIixjKTsKKyNp ZmRlZiBUTkNPREUKKwkJCX0gZWxzZSB7CS8qIFRlbG5ldCAtIG11c3QgaGFuZGxlIElBQyBhbmQg TlZUICovCisJCQkgICAgZGVidWcoRjAwMCwiPDw8IGNoYXIiLGNraXRvYShpbl9zdGF0ZSksYyk7 CisJCQkgICAgc3dpdGNoIChjKSB7CisJCQkgICAgICBjYXNlIDB4MDA6IC8qIE5VTCAqLworCQkJ CWlmIChpbl9zdGF0ZSA9PSBIQVZFX0NSKSB7CisJCQkJICAgIGRlYnVnKEYwMDAsIjw8PCBTS0lQ IiwiIixjKTsKKwkJCQl9IGVsc2UgeworCQkJCSAgICAqcCsrID0gYzsKKwkJCQkgICAgZGVidWco RjAwMCwiPDw8IEtlZXAiLCIiLGMpOworCQkJCX0KKwkJCQlpbl9zdGF0ZSA9IDA7CisJCQkJYnJl YWs7CisJCQkgICAgICBjYXNlIDB4MGQ6IC8qIENSICovCisJCQkJaWYgKCFURUxPUFRfVShURUxP UFRfQklOQVJZKSkKKwkJCQkgIGluX3N0YXRlID0gSEFWRV9DUjsKKwkJCQkqcCsrID0gYzsKKwkJ CQlkZWJ1ZyhGMDAwLCI8PDwgS2VlcCIsIiIsYyk7CisJCQkJYnJlYWs7CisjaWZkZWYgQ09NTUVO VAorCQkJICAgICAgY2FzZSAweDBmOiAvKiBDdHJsLU8gKi8KKwkJCSAgICAgIGNhc2UgMHgxNjog LyogQ3RybC1WICovCisJCQkJKnArKyA9IDB4MTY7CisJCQkJKnArKyA9IGM7CisJCQkJZGVidWco RjAwMCwiPDw8IFFVT1QiLCIiLGMpOworCQkJCWJyZWFrOworI2VuZGlmIC8qIENPTU1FTlQgKi8K KwkJCSAgICAgIGNhc2UgMHhmZjogLyogSUFDICovCisJCQkJaWYgKGluX3N0YXRlID09IEhBVkVf SUFDKSB7CisJCQkJICAgIGRlYnVnKEYwMDAsIjw8PCBLRUVQIiwiIixjKTsKKwkJCQkgICAgKnAr KyA9IGM7CisJCQkJICAgIGluX3N0YXRlID0gMDsKKwkJCQl9IGVsc2UgeworCQkJCSAgICBkZWJ1 ZyhGMDAwLCI8PDwgU0tJUCIsIiIsYyk7CisJCQkJICAgIGluX3N0YXRlID0gSEFWRV9JQUM7CisJ CQkJfQorCQkJCWJyZWFrOworCQkJICAgICAgZGVmYXVsdDoJLyogQWxsIG90aGVycyAqLworCQkJ CWlmIChpbl9zdGF0ZSA9PSBIQVZFX0lBQykgeworI2lmZGVmIENPTU1FTlQKKy8qCisgIHRuX2Rv b3AoKSB3aWxsIGNvbnN1bWUgYW4gdW5rbm93biBudW1iZXIgb2YgYnl0ZXMgYW5kIHdlJ2xsIG92 ZXJzaG9vdAorICB0aGUgZm9yLWxvb3AuICBUaGUgb25seSBUZWxuZXQgY29tbWFuZCBJJ3ZlIGV2 ZXIgc2VlbiBhcnJpdmUgaGVyZSBpcworICBhIERhdGEgTWFyaywgd2hpY2ggY29tZXMgd2hlbiB0 aGUgcmVtb3RlIHByb3RvY29sIGV4aXRzIGFuZCB0aGUgcmVtb3RlCisgIGpvYiByZXR1cm5zIHRv IGl0cyBzaGVsbCBwcm9tcHQuICBPbiB0aGUgYXNzdW1wdGlvbiBpdCdzIGEgMS1ieXRlIGNvbW1h bmQsCisgIHdlIGRvbid0IHdyaXRlIG91dCB0aGUgSUFDIG9yIHRoZSBjb21tYW5kLCBhbmQgd2Ug Y2xlYXIgdGhlIHN0YXRlLiAgSWYKKyAgd2UgY2FsbGVkIHRuX2Rvb3AoKSB3ZSdkIGhhdmUgbm8g d2F5IG9mIGtub3dpbmcgaG93IG1hbnkgYnl0ZXMgaXQgdG9vaworICBmcm9tIHRoZSBpbnB1dCBz dHJlYW0uCisqLworCQkJCSAgICBpbnQgeHg7CisJCQkJICAgIHh4ID0gdG5fZG9vcCgoQ0hBUilj LGR1cGxleCx0dGluYyk7CisJCQkJICAgIGRlYnVnKEYxMTEsIjw8PCBET09QIixja2N0b2EoYyks eHgpOworI2Vsc2UKKwkJCQkgICAgZGVidWcoRjEwMSwiPDw8IERPT1AiLCIiLGMpOworI2VuZGlm CS8qIENPTU1FTlQgKi8KKwkJCQkgICAgaW5fc3RhdGUgPSAwOworCQkJCX0gZWxzZSB7CisJCQkJ ICAgICpwKysgPSBjOworCQkJCSAgICBkZWJ1ZyhGMDAwLCI8PDwga2VlcCIsIiIsYyk7CisJCQkJ ICAgIGluX3N0YXRlID0gMDsKKwkJCQl9CisJCQkgICAgfQorI2VuZGlmCS8qIFROQ09ERSAqLwor CQkJfQorCQkgICAgfQorCQkgICAgY2ttYWttc2cobXNnYnVmLDUwMCwKKwkJCSAgICAgInR0cHR5 Y21kIHJlYWQgbmV0IFt0dGluYyBsb29wXSBlcnJubz0iLAorCQkJICAgICBja2l0b2EoZXJybm8p LAorCQkJICAgICAiIGNvdW50PSIsCisJCQkgICAgIGNraXRvYSh4KSk7CisJCSAgICBkZWJ1ZyhG MTAwLG1zZ2J1ZiwiIiwwKTsKKwkJfSBlbHNlIHsKKwkJICAgIHggPSB0dHhpbihuLHRidWYrdGJ1 Zl9hdmFpbCk7CisJCSAgICBkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCB0dHhpbiB4IiwiIix4KTsgCisJ CX0KKworCQlpZiAoeCA8IDApIHsKKwkJICAgIGRlYnVnKEYxMDEsInR0cHR5Y21kIHJlYWQgbmV0 IGVycm9yIiwiIix4KTsKKwkJICAgIG5ldF9lcnIrKzsKKwkJfQorCQl0YnVmX2F2YWlsICs9IHg7 CisJCXJlYWRfbmV0X2J5dGVzICs9IHg7CisJICAgIH0KKworCX0gZWxzZQorCSAgdG5vdHNldCsr OworCisJaWYgKEZEX0lTU0VUKHB0eWZkLCAmaW4pKSB7CS8qIFJlYWQgZnJvbSBwdHk/ICovCisJ ICAgIHBzZXQrKzsKKwkgICAgZGVidWcoRjEwMCwidHRwdHljbWQgRkRfSVNTRVQgcHR5ZmQgaW4i LCIiLDApOworI2lmZGVmIFBUWV9VU0VfTkRFTEFZCisJICAgIG4gPSBQVFlfUEJVRl9TSVpFOwor I2Vsc2UKKwkgICAgLyoKKwkgICAgICBUaGlzIGRvZXMgbm90IHdvcmsgb24gbm9uYmxvY2tpbmcg Y2hhbm5lbHMKKwkgICAgICBvbiBjZXJ0YWluIHBsYXRmb3JtcyBzdWNoIGFzIE5ldEJTRC4KKwkg ICAgKi8KKwkgICAgbiA9IHB0eV9jaGsocHR5ZmQpOworI2VuZGlmIC8qIFBUWV9VU0VfTkRFTEFZ ICovCisJICAgIGRlYnVnKEYxMDEsInR0cHR5Y21kIHB0eV9jaGsoKSBuIiwiIixuKTsgCisKKwkg ICAgaWYgKG4gPCAwKQorCSAgICAgIG4gPSAwOworCSAgICBpZiAobiA+IDApIHsKKwkJaWYgKG4g PiBQVFlfUEJVRl9TSVpFIC0gcGJ1Zl9hdmFpbCkKKwkJICBuID0gUFRZX1BCVUZfU0laRSAtIHBi dWZfYXZhaWw7CisJCWRlYnVnKEYxMDEsInR0cHR5Y21kIHB0eSByZWFkIHNpemUgYWRqdXN0ZWQi LCIiLG4pOyAKKwkJZXJybm8gPSAwOworCQl4ID0gcmVhZChwdHlmZCxwYnVmK3BidWZfYXZhaWws bik7CisjaWZkZWYgREVCVUcKKwkJaWYgKGRlYmxvZykgeworCQkgICAgY2ttYWttc2cobXNnYnVm LDUwMCwKKwkJCSAgICAgInR0cHR5Y21kIHJlYWQgcHR5IGVycm5vPSIsCisJCQkgICAgIGNraXRv YShlcnJubyksCisJCQkgICAgICIgY291bnQ9IiwKKwkJCSAgICAgY2tpdG9hKHgpKTsKKwkJICAg IGRlYnVnKEYxMDAsbXNnYnVmLCIiLDApOworCQl9CisjZW5kaWYJLyogREVCVUcgKi8KKworCQlp ZiAoeCA8IDAgJiYgZXJybm8gPT0gRUFHQUlOKQorCQkgIHggPSAwOworCisJCWlmICh4IDwgMCkg ewkJLyogVGhpcyB3b3JrcyBvbiBTb2xhcmlzIGFuZCBMaW51eCAqLworCQkgICAgcHR5X2Vycisr OwkJLyogYnV0IG5vdCBOZXRCU0QgKi8KKwkJICAgIGRlYnVnKEYxMDAsIlRFUk1JTkFUSU9OIFRF U1QgQSIsIiIsMCk7CisjaWZkZWYgQ09NTUVOVAorCQkgICAgaWYgKGVycm5vID09IEVJTykKKwkJ ICAgICAgcmMgPSAxOworI2VuZGlmCS8qIENPTU1FTlQgKi8KKwkJICAgIGlmIChwZXhpdHN0YXQg PCAwKSB7CisJCQlzdGF0dXMgPSBwdHlfZ2V0X3N0YXR1cyhwdHlmZCxwdHlfZm9ya19waWQpOwor CQkJZGVidWcoRjEwMSwidHRwdHljbWQgcHR5X2dldF9zdGF0dXMgQyIsIiIsc3RhdHVzKTsKKwkJ CWlmIChzdGF0dXMgPiAtMSkgcGV4aXRzdGF0ID0gc3RhdHVzOworCQkgICAgfQorCQkgICAgaGF2 ZV9wdHkgPSAwOworCQkgICAgeCA9IDA7CisJCX0KKwkJaWYgKHggPT0gMCAmJiAhcHR5X2Vycikg eyAvKiBUaGlzIHdvcmtzIG9uIE5ldEJTRCBidXQgKi8KKwkJICAgIGRlYnVnKEYxMDAsIlRFUk1J TkFUSU9OIFRFU1QgQiIsIiIsMCk7CisJCSAgICBzdGF0dXMgPSBwZXhpdHN0YXQgPiAtMSA/IHBl eGl0c3RhdCA6CisJCQlwdHlfZ2V0X3N0YXR1cyhwdHlmZCxwdHlfZm9ya19waWQpOworCQkgICAg ZGVidWcoRjEwMSwidHRwdHljbWQgcHR5X2dldF9zdGF0dXMgRCIsIiIsc3RhdHVzKTsKKwkJICAg IGlmIChzdGF0dXMgPiAtMSkgeworCQkJcGV4aXRzdGF0ID0gc3RhdHVzOworCQkJcHR5X2Vycisr OworCQkJaGF2ZV9wdHkgPSAwOworCQkgICAgfSBlbHNlIHsJCS8qIFNlbGVjdCgpIGxpZWQgKi8K KwkJCXB0eV9lcnIgPSAwOwkvKiBwdHkgc3RpbGwgdGhlcmUgYnV0IGhhcyBub3RoaW5nICovCisJ CQltc2xlZXAoMTAwKTsJLyogc2xlZXAgYSBiaXQgKi8KKwkJICAgIH0KKwkJICAgIHggPSAwOwor CQl9IAorCQkvKiBIb3BlZnVsbHkgdGhlIG5leHQgdHdvIGFyZSBubyBsb25nZXIgbmVlZGVkLi4u ICovCisJCWlmICghcHR5X2VyciAmJiAoCisjaWZuZGVmIFBUWV9VU0VfTkRFTEFZCisJCSAgICB4 IDwgMSB8fCBlcnJubworI2Vsc2UKKwkJICAgIGVycm5vICE9IDAgJiYgZXJybm8gIT0gRUFHQUlO CisjZW5kaWYgLyogUFRZX1VTRV9OREVMQVkgKi8KKwkJICAgICkpIHsKKwkJICAgIGRlYnVnKEYx MDAsIlRFUk1JTkFUSU9OIFRFU1QgQyIsIiIsMCk7CisJCSAgICBwdHlfZXJyKys7CisJCSAgICBk ZWJ1ZyhGMTAxLCJ0dHB0eWNtZCBTRVQgcHR5X2VyciIsIiIscHR5X2Vycik7CisJCSAgICBpZiAo ZXJybm8gPT0gRUlPKQkvKiBlcnJubyA9PSBFSU8gaXMgbGlrZSBFT0YgKi8KKwkJICAgICAgcmMg PSAxOworCQkgICAgaWYgKHggPCAwKQorCQkgICAgICB4ID0gMDsKKwkJfQorI2lmZGVmIENPTU1F TlQKKyNpZmRlZiBERUJVRworCQlpZiAoZGVibG9nKSB7CisJCSAgICBwYnVmW3BidWZfYXZhaWwg KyB4XSA9ICdcMCc7CisJCSAgICBkZWJ1ZyhGMTExLCJ0dHB0eWNtZCBhZGRlZCB0byBwdHkgYnVm ZmVyIiwKKwkJCSAgcGJ1ZitwYnVmX2F2YWlsLHgpOworCQl9CisjZW5kaWYJLyogREVCVUcgKi8K KyNlbmRpZgkvKiBDT01NRU5UICovCisJCXBidWZfYXZhaWwgKz0geDsKKwkJcmVhZF9wdHlfYnl0 ZXMgKz0geDsKKwkgICAgfSBlbHNlIHsJCQkvKiBuID09IDAgd2l0aCBibG9ja2luZyByZWFkcyAq LworCQlkZWJ1ZyhGMTAwLAorCQkgICAgICAiUFRZIFJFQUQgUkVUVVJORUQgWkVSTyBCWVRFUyAt IFNIT1VMRCBOT1QgSEFQUEVOIiwKKwkJICAgICAgIiIsMCk7CisJICAgIH0KKwl9IGVsc2UKKwkg IHBub3RzZXQrKzsKKworCS8qIElmIHdyaXRlcyBoYXZlIGNhdWdodCB1cCB0byByZWFkcywgcmVz ZXQgdGhlIGJ1ZmZlcnMgKi8KKworCWlmIChwYnVmX3dyaXR0ZW4gPT0gcGJ1Zl9hdmFpbCkKKwkg IHBidWZfd3JpdHRlbiA9IHBidWZfYXZhaWwgPSAwOworCWlmICh0YnVmX3dyaXR0ZW4gPT0gdGJ1 Zl9hdmFpbCkKKwkgIHRidWZfd3JpdHRlbiA9IHRidWZfYXZhaWwgPSAwOworCisJLyogU2VlIGlm IHdlIGNhbiBleGl0ICovCisKKwl4MSA9IHBidWZfYXZhaWwgLSBwYnVmX3dyaXR0ZW47IAorCXgy ID0gdGJ1Zl9hdmFpbCAtIHRidWZfd3JpdHRlbjsKKworCWRlYnVnKEYxMDEsInR0cHR5Y21kIHB0 eV9lcnIgTE9PUCBFWElUIFRFU1QgcHR5X2VyciIsIiIscHR5X2Vycik7CisJZGVidWcoRjEwMSwi dHRwdHljbWQgcHR5X2VyciBMT09QIEVYSVQgVEVTVCB4MSBbd3JpdGUgdG8gbmV0XSIsIiIseDEp OworCWRlYnVnKEYxMDEsInR0cHR5Y21kIHB0eV9lcnIgTE9PUCBFWElUIFRFU1QgeDIgW3dyaXRl IHRvIHB0eV0iLCIiLHgyKTsKKwlkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCBwdHlfZXJyIExPT1AgRVhJ VCBURVNUIHJjIiwiIixyYyk7CisJZGVidWcoRjEwMSwidHRwdHljbWQgcHR5X2VyciBMT09QIEVY SVQgVEVTVCBzdGF0dXMiLCIiLHN0YXR1cyk7CisJZGVidWcoRjEwMSwidHRwdHljbWQgcHR5X2Vy ciBMT09QIEVYSVQgVEVTVCBwZXhpdHN0YXQiLCIiLHBleGl0c3RhdCk7CisKKwlpZiAobmV0X2Vy cikgewkJCS8qIE5ldCBlcnJvcj8gKi8KKwkgICAgZGVidWcoRjEwMSwidHRwdHljbWQgbmV0X2Vy ciBMT09QIEVYSVQgVEVTVCBuZXRfZXJyIiwiIixuZXRfZXJyKTsKKwkgICAgaWYgKGhhdmVfbmV0 KSB7CisJCWlmIChsb2NhbCkgeworCQkgICAgdHRjbG9zKDApOworCQkgICAgcHJpbnRmKCI/Q29u bmVjdGlvbiBjbG9zZWRcbiIpOworCQl9CisJCWhhdmVfbmV0ID0gMDsKKwkgICAgfQorCSAgICBk ZWJ1ZyhGMTAxLCJ0dHB0eWNtZCBuZXRfZXJyIExPT1AgRVhJVCBURVNUIHgxIiwiIix4MSk7CisJ ICAgIGlmICh4MSA9PSAwKQorCSAgICAgIGJyZWFrOworCX0KKwlpZiAocHR5X2VycikgewkJCS8q IFB0eSBlcnJvcj8gKi8KKwkgICAgaWYgKGhhdmVfcHR5KSB7CisJCWlmIChwZXhpdHN0YXQgPCAw KSB7CQkKKwkJICAgIHN0YXR1cyA9IHB0eV9nZXRfc3RhdHVzKHB0eWZkLHB0eV9mb3JrX3BpZCk7 CisJCSAgICBkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCBwdHlfZ2V0X3N0YXR1cyBFIiwiIixzdGF0dXMp OworCQkgICAgaWYgKHN0YXR1cyA+IC0xKSBwZXhpdHN0YXQgPSBzdGF0dXM7CisJCX0KKwkJaGF2 ZV9wdHkgPSAwOworCSAgICB9CisJICAgIGlmICh4MSA9PSAwICYmIHgyID09IDApIHsJLyogSWYg YnVmZmVycyBhcmUgY2F1Z2h0IHVwICovCisJCXJjID0gMTsJCQkvKiBzZXQgcHJlbGltaW5hcnkg cmV0dXJuIHRvIHN1Y2Nlc3MgKi8KKwkJZGVidWcoRjEwMSwidHRwdHljbWQgcHR5X2VyciBMT09Q IEVYSVQgVEVTVCByYyAyIiwiIixyYyk7CisJCWJyZWFrOwkJCS8qIGFuZCBleGl0IHRoZSBsb29w ICovCisJICAgIH0KKwl9CisgICAgfQorICAgIGRlYnVnKEYxMDEsInR0cHR5Y21kICsrKyBoYXZl X3B0eSIsIiIsaGF2ZV9wdHkpOworICAgIGlmIChoYXZlX3B0eSkgewkJCS8qIEluIGNhc2Ugc2Vs ZWN0KCkgZmFpbGVkICovCisjaWZkZWYgVVNFX0NLVVBUWV9DCisJZW5kX3B0eSgpOworCWNsb3Nl KHB0eWZkKTsKKyNlbHNlCisJY2xvc2Uoc2xhdmVmZCk7CisJY2xvc2UobWFzdGVyZmQpOworI2Vu ZGlmIC8qIFVTRV9DS1VQVFlfQyAqLworICAgIH0KKyAgICBwdHlfbWFzdGVyX2ZkID0gLTE7Cisg ICAgZGVidWcoRjEwMSwidHRwdHljbWQgKysrIHBleGl0c3RhdCIsIiIscGV4aXRzdGF0KTsKKyAg ICBpZiAocGV4aXRzdGF0IDwgMCkgewkJLyogVHJ5IG9uZSBsYXN0IHRpbWUgdG8gZ2V0IHN0YXR1 cyAqLworCXN0YXR1cyA9IHB0eV9nZXRfc3RhdHVzKHB0eWZkLHB0eV9mb3JrX3BpZCk7CisJZGVi dWcoRjEwMSwidHRwdHljbWQgcHR5X2dldF9zdGF0dXMgRiIsIiIsc3RhdHVzKTsKKwlpZiAoc3Rh dHVzID4gLTEpIHBleGl0c3RhdCA9IHN0YXR1czsKKyAgICB9CisgICAgZGVidWcoRjEwMSwidHRw dHljbWQgKysrIGZpbmFsIHBleGl0c3RhdCIsIiIscGV4aXRzdGF0KTsKKyAgICBpZiAoZGVibG9n KSB7CQkJLyogU3RhdHMgZm9yIGRlYnVnIGxvZyAqLworCWRlYnVnKEYxMDEsInR0cHR5Y21kICsr KyBwc2V0CSIsIiIscHNldCk7CisJZGVidWcoRjEwMSwidHRwdHljbWQgKysrIHBub3RzZXQiLCIi LHBub3RzZXQpOworCWRlYnVnKEYxMDEsInR0cHR5Y21kICsrKyB0c2V0CSIsIiIsdHNldCk7CisJ ZGVidWcoRjEwMSwidHRwdHljbWQgKysrIHRub3RzZXQiLCIiLHRub3RzZXQpOworCisJZGVidWco RjEwMSwidHRwdHljbWQgKysrICByZWFkX3B0eV9ieXRlcyIsIiIscmVhZF9wdHlfYnl0ZXMpOwor CWRlYnVnKEYxMDEsInR0cHR5Y21kICsrKyB3cml0ZV9uZXRfYnl0ZXMiLCIiLHdyaXRlX25ldF9i eXRlcyk7CisJZGVidWcoRjEwMSwidHRwdHljbWQgKysrICByZWFkX25ldF9ieXRlcyIsIiIscmVh ZF9uZXRfYnl0ZXMpOworCWRlYnVnKEYxMDEsInR0cHR5Y21kICsrKyB3cml0ZV9wdHlfYnl0ZXMi LCIiLHdyaXRlX3B0eV9ieXRlcyk7CisgICAgfQorLyoKKyAgSWYgd2UgZ290IHRoZSBleHRlcm5h bCBwcm90b2NvbCdzIGV4aXQgc3RhdHVzIGZyb20gd2FpdHBpZCgpLCB3ZSB1c2UgdGhhdAorICB0 byBzZXQgb3VyIHJldHVybiBjb2RlLiAgSWYgbm90LCB3ZSBmYWxsIGJhY2sgb24gd2hhdGV2ZXIg cmMgd2FzIHByZXZpb3VzbHkKKyAgc2V0IHRvLCBuYW1lbHkgMSAoc3VjY2VzcykgaWYgdGhlIHB0 eSBmb3JrIHNlZW1lZCB0byB0ZXJtaW5hdGUsIDAgb3RoZXJ3aXNlLgorKi8KKyAgICBpZiAoc2F2 ZV9zaWdjaGxkKSB7CQkJLyogUmVzdG9yZSB0aGlzIGlmIHdlIGNoYW5nZWQgaXQgKi8KKwkoVk9J RCkgc2lnbmFsKFNJR0NITEQsc2F2ZV9zaWdjaGxkKTsKKwlzYXZlX3NpZ2NobGQgPSBOVUxMOwor ICAgIH0KKyAgICBtc2xlZXAoNTAwKTsKKyAgICB4ID0ga2lsbChwdHlfZm9ya19waWQsU0lHSFVQ KTsJLyogSW4gY2FzZSBpdCdzIHN0aWxsIHRoZXJlICovCisgICAgcHR5X2ZvcmtfcGlkID0gLTE7 CisgICAgZGVidWcoRjEwMSwidHRwdHljbWQgZm9yayBraWxsIFNJR0hVUCIsIiIseCk7CisgICAg aWYgKHBleGl0c3RhdCA+IC0xKQorICAgICAgcmMgPSAocGV4aXRzdGF0ID09IDAgPyAxIDogMCk7 CisgICAgZGVidWcoRjEwMSwidHRwdHljbWQgKysrIHJjIiwiIixyYyk7CisgICAgaWYgKCFsb2Nh bCkgewkJCS8qIElmIGluIHJlbW90ZSBtb2RlICovCisJY29ucmVzKCk7CQkJLyogcmVzdG9yZSBj b25zb2xlIHRvIENCUkVBSyBtb2RlICovCisJY29uY2IoKGNoYXIpZXNjY2hyKTsKKyAgICB9Cisg ICAgcmV0dXJuKHJjKTsKK30KKyNlbmRpZgkvKiBORVRQVFkgKi8KKyNlbmRpZgkvKiBTRUxFQ1Qg Ki8KKworLyogVCBUIFIgVSBOIEMgTSBEICAtLSAgUmVkaXJlY3QgYW4gZXh0ZXJuYWwgY29tbWFu ZCBvdmVyIHRoZSBjb25uZWN0aW9uLiAqLworCisvKgorICBUVFJVTkNNRCBpcyB0aGUgcm91dGlu ZSB0aGF0IHdhcyBvcmlnaW5hbGx5IHVzZWQgZm9yIHJ1bm5pbmcgZXh0ZXJuYWwKKyAgcHJvdG9j b2xzLiAgSXQgaXMgdmVyeSBzaW1wbGUgYW5kIHdvcmtzIGZpbmUgcHJvdmlkZWQgKGEpIHRoZSBj b25uZWN0aW9uCisgIGlzIG5vdCBlbmNyeXB0ZWQsIGFuZCAoYikgdGhlIGV4dGVybmFsIHByb3Rv Y29sIHVzZXMgc3RhbmRhcmQgaS9vCisgIChmaWxlIGRlc2NyaXB0b3JzIDAgYW5kIDEpIGZvciBm aWxlIHRyYW5zZmVyLgorKi8KKworaW50Cit0dHJ1bmNtZChzKSBjaGFyICpzOyB7CisgICAgUElE X1QgcGlkOwkJCQkvKiBwaWQgb2YgbG93ZXIgZm9yayAqLworICAgIGludCB3c3RhdDsJCQkJLyog Zm9yIHdhaXQoKSAqLworICAgIGludCB4OworICAgIGludCBzdGF0dXNwOworCisgICAgaWYgKHR0 eWZkID09IC0xKSB7CisJcHJpbnRmKCI/U29ycnksIGRldmljZSBpcyBub3Qgb3BlblxuIik7CisJ cmV0dXJuKDApOworICAgIH0KKyAgICBpZiAobm9wdXNoKSB7CisJZGVidWcoRjEwMCwidHRydW5j bWQgZmFpbDogbm9wdXNoIiwiIiwwKTsKKwlyZXR1cm4oMCk7CisgICAgfQorCisjaWZkZWYgTkVU UFRZCisvKioqKioqKioqKioqKioqCisgIEl0IG1pZ2h0IGFsc28gYmUgbmVjZXNzYXJ5IHRvIHVz ZSB0aGUgcHR5IHJvdXRpbmUgZm9yIG90aGVyIHJlYXNvbnMsCisgIGUuZy4gYmVjYXVzZSB0aGUg ZXh0ZXJuYWwgcHJvZ3JhbSBkb2VzIG5vdCB1c2Ugc3RkaW8uCisqLworI2lmZGVmIE5FVENPTk4K Ky8qCisgIElmIHdlIGhhdmUgYSBuZXR3b3JrIGNvbm5lY3Rpb24gd2UgdXNlIGEgZGlmZmVyZW50 IHJvdXRpbmUgYmVjYXVzZQorICAoYSkgaWYgdGhlIGNvbm5lY3Rpb24gaXMgZW5jcnlwdGVkLCB0 aGUgbWVjaGFuaXNtIHVzZWQgaGVyZSBjYW4ndCBkZWFsCisgIHdpdGggaXQ7IGFuZCAoYikgaXQg d29uJ3QgaGFuZGxlIGFueSBuZXR3b3JrIHByb3RvY29scyBlaXRoZXIsIGUuZy4KKyAgVGVsbmV0 LCBSbG9naW4sIEs1IFUtdG8tVSwgZXRjLiAgSG93ZXZlciwgdGhpcyByb3V0aW5lIHdvcmtzIG11 Y2gKKyAgYmV0dGVyIChmYXN0ZXIsIG1vcmUgdHJhbnNwYXJlbnQpIG9uIHNlcmlhbCBjb25uZWN0 aW9ucyBhbmQgd2hlbgorICBDLUtlcm1pdCBpcyBpbiByZW1vdGUgbW9kZSAoaS5lLiBpcyBvbiB0 aGUgZmFyIGVuZCkuCisqLworICAgIC8qIEZvciB0ZXN0aW5nIGFsd2F5cyB1c2UgdGhpcyAqLwor ICAgIGlmIChuZXRjb25uKQorICAgICAgcmV0dXJuKHR0cHR5Y21kKHMpKTsKKyNlbmRpZiAvKiBO RVRDT05OICovCisKKy8qKioqKioqKioqKioqKiovCisjZWxzZSAgLyogTkVUUFRZICovCisgICAg aWYgKHR0X2lzX3NlY3VyZSgpKSB7CisJcHJpbnRmKCI/U29ycnksIFwKK2V4dGVybmFsIHByb3Rv Y29scyBvdmVyIHNlY3VyZSBjb25uZWN0aW9ucyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgT1MuXG4i CisgICAgICAgICAgICAgICk7CisgICAgICAgIHJldHVybigwKTsKKyAgICB9CisjZW5kaWYJLyog TkVUUFRZICovCisKKyAgICBjb25yZXMoKTsJCQkJLyogTWFrZSBjb25zb2xlIG5vcm1hbCAgKi8K KyAgICBwZXhpdHN0YXQgPSAtNDsKKyAgICBpZiAoKHBpZCA9IGZvcmsoKSkgPT0gMCkgewkJLyog TWFrZSBhIGNoaWxkIGZvcmsgKi8KKwlpZiAocHJpdl9jYW4oKSkJCQkvKiBDaGlsZDogdHVybiBv ZmYgcHJpdnMuICovCisJICBleGl0KDEpOworCWR1cDIodHR5ZmQsIDApOwkJCS8qIEdpdmUgc3Rk aW4vb3V0IHRvIHRoZSBsaW5lICovCisJZHVwMih0dHlmZCwgMSk7CisJeCA9IHN5c3RlbShzKTsK KwlkZWJ1ZyhGMTAxLCJ0dHJ1bmNtZCBzeXN0ZW0iLHMseCk7CisJX2V4aXQoeCA/IEJBRF9FWElU IDogMCk7CisgICAgfSBlbHNlIHsKKwlTSUdUWVAgKCppc3RhdCkoKSwgKCpxc3RhdCkoKTsKKwlp ZiAocGlkID09IChQSURfVCkgLTEpCQkvKiBmb3JrKCkgZmFpbGVkPyAqLworCSAgcmV0dXJuKDAp OworCWlzdGF0ID0gc2lnbmFsKFNJR0lOVCxTSUdfSUdOKTsgLyogTGV0IHRoZSBmb3JrIGhhbmRs ZSBrZXlib2FyZCAqLworCXFzdGF0ID0gc2lnbmFsKFNJR1FVSVQsU0lHX0lHTik7IC8qIGludGVy cnVwdHMgaXRzZWxmLi4uICovCisKKyNpZmRlZiBDT01NRU5UCisgICAgCXdoaWxlICgoKHdzdGF0 ID0gd2FpdCgmc3RhdHVzcCkpICE9IHBpZCkgJiYgKHdzdGF0ICE9IC0xKSkgOworI2Vsc2UgIC8q IE5vdCBDT01NRU5UICovCisgICAgCXdoaWxlICgxKSB7CisJICAgIHdzdGF0ID0gd2FpdCgmc3Rh dHVzcCk7CisJICAgIGRlYnVnKEYxMDEsInR0cnVuY21kIHdhaXQiLCIiLHdzdGF0KTsKKwkgICAg aWYgKHdzdGF0ID09IHBpZCB8fCB3c3RhdCA9PSAtMSkKKwkgICAgICBicmVhazsKKwl9CisjZW5k aWYgLyogQ09NTUVOVCAqLworCisJcGV4aXRzdGF0ID0gKHN0YXR1c3AgJiAweGZmKSA/IHN0YXR1 c3AgOiBzdGF0dXNwID4+IDg7CisJZGVidWcoRjEwMSwidHRydW5jbWQgd2FpdCBzdGF0dXNwIiwi IixzdGF0dXNwKTsKKwlkZWJ1ZyhGMTAxLCJ0dHJ1bmNtZCB3YWl0IHBleGl0c3RhdCIsIiIscGV4 aXRzdGF0KTsKKwlzaWduYWwoU0lHSU5ULGlzdGF0KTsJCS8qIFJlc3RvcmUgaW50ZXJydXB0cyAq LworCXNpZ25hbChTSUdRVUlULHFzdGF0KTsKKyAgICB9CisgICAgY29uY2IoKGNoYXIpZXNjY2hy KTsJCS8qIFJlc3RvcmUgY29uc29sZSB0byBDQlJFQUsgbW9kZSAqLworICAgIHJldHVybihzdGF0 dXNwID09IDAgPyAxIDogMCk7Cit9CisjZW5kaWYJLyogQ0tfUkVESVIgKi8KKworc3RydWN0IHRt ICoKKyNpZmRlZiBDS19BTlNJQworY21kYXRlMnRtKGNoYXIgKiBkYXRlLCBpbnQgZ210KSAgICAg ICAgIC8qIGRhdGUgYXMgInl5eXltbWRkIGhoOm1tOnNzIiAqLworI2Vsc2UKK2NtZGF0ZTJ0bShk YXRlLGdtdCkgY2hhciAqIGRhdGU7IGludCBnbXQ7CisjZW5kaWYKK3sKKyAgICAvKiBkYXRlIGFz ICJ5eXl5bW1kZCBoaDptbTpzcyIgKi8KKyAgICBzdGF0aWMgc3RydWN0IHRtIF90bTsKKyAgICB0 aW1lX3Qgbm93OworCisgICAgaWYgKHN0cmxlbihkYXRlKSAhPSAxNyB8fAorCWRhdGVbOF0gIT0g JyAnIHx8CisJZGF0ZVsxMV0gIT0gJzonIHx8CisJZGF0ZVsxNF0gIT0gJzonKQorICAgICAgcmV0 dXJuKE5VTEwpOworCisgICAgdGltZSgmbm93KTsKKyAgICBpZiAoZ210KQorICAgICAgX3RtID0g KmdtdGltZSgmbm93KTsKKyAgICBlbHNlCisgICAgICBfdG0gPSAqbG9jYWx0aW1lKCZub3cpOwor ICAgIF90bS50bV95ZWFyID0gKGRhdGVbMF0tJzAnKSoxMDAwICsgKGRhdGVbMV0tJzAnKSoxMDAg KworICAgICAgICAgICAgICAgICAgKGRhdGVbMl0tJzAnKSoxMCAgICsgKGRhdGVbM10tJzAnKS0x OTAwOworICAgIF90bS50bV9tb24gID0gKGRhdGVbNF0tJzAnKSoxMCAgICsgKGRhdGVbNV0tJzAn KS0xOworICAgIF90bS50bV9tZGF5ID0gKGRhdGVbNl0tJzAnKSoxMCAgICsgKGRhdGVbN10tJzAn KTsKKyAgICBfdG0udG1faG91ciA9IChkYXRlWzldLScwJykqMTAgICArIChkYXRlWzEwXS0nMCcp OworICAgIF90bS50bV9taW4gID0gKGRhdGVbMTJdLScwJykqMTAgICsgKGRhdGVbMTNdLScwJyk7 CisgICAgX3RtLnRtX3NlYyAgPSAoZGF0ZVsxNV0tJzAnKSoxMCAgKyAoZGF0ZVsxNl0tJzAnKTsK KworICAgIC8qIFNob3VsZCB3ZSBzZXQgX3RtLnRtX2lzZHN0IHRvIC0xIGhlcmU/ICovCisKKyAg ICBfdG0udG1fd2RheSA9IDA7CisgICAgX3RtLnRtX3lkYXkgPSAwOworCisgICAgcmV0dXJuKCZf dG0pOworfQorCisjaWZkZWYgT1hPUworI3VuZGVmIGtpbGwKKyNlbmRpZiAvKiBPWE9TICovCisK KyNpZmRlZiBPWE9TCitpbnQKK3ByaXZfa2lsbChwaWQsIHNpZykgaW50IHBpZCwgc2lnOyB7Cisg ICAgaW50CWk7CisKKyAgICBpZiAocHJpdl9vbigpKQorCWRlYnVnKEYxMDAsInByaXZfa2lsbCBw cml2X29uIGZhaWxlZCIsIiIsMCk7CisgICAgaSA9IGtpbGwocGlkLCBzaWcpOworICAgIGlmIChw cml2X29mZigpKQorCWRlYnVnKEYxMDAsInByaXZfa2lsbCBwcml2X29mZiBmYWlsZWQiLCIiLDAp OworICAgIHJldHVybihpKTsKK30KKyNlbmRpZiAvKiBPWE9TICovCisKKyNpZmRlZiBCRU9TT1JC RUJPWAorLyogI2lmZGVmIEJFX0RSXzcgKi8KKy8qCisgIGFsYXJtKCkgZnVuY3Rpb24gbm90IHN1 cHBsaWVkIHdpdGggQmUgT1MgRFI3IC0gdGhpcyBvbmUgY29udHJpYnV0ZWQgYnkKKyAgTmVhbCBQ LiBNdXJwaHkuCisqLworCisvKgorICBUaGlzIHNob3VsZCBtaW1pYyB0aGUgVU5JWC9QT1NJWCBh bGFybSgpIGZ1bmN0aW9uIHdlbGwgZW5vdWdoLCB3aXRoIHRoZQorICBjYXZlYXQgdGhhdCBvbmUn cyBTSUdBTFJNIGhhbmRsZXIgbXVzdCBjYWxsIGFsYXJtX2V4cGlyZWQoKSB0byBjbGVhbiB1cCB2 YXJzCisgIGFuZCB3YWl0IGZvciB0aGUgYWxhcm0gdGhyZWFkIHRvIGZpbmlzaC4KKyovCit1bnNp Z25lZCBpbnQKK2FsYXJtKHVuc2lnbmVkIGludCBzZWNvbmRzKSB7CisgICAgbG9uZyB0aW1lX2xl ZnQgPSAwOworCisvKiBJZiBhbiBhbGFybSBpcyBhY3RpdmUsIHR1cm4gaXQgb2ZmLCBzYXZpbmcg dGhlIHVudXNlZCB0aW1lICovCisgICAgaWYgKGFsYXJtX3RocmVhZCAhPSAtMSkgeworICAgICAg ICAvKiBXZSdsbCBiZSBnZW5lcm91cyBhbmQgY291bnQgcGFydGlhbCBzZWNvbmRzIGFzIHdob2xl IHNlY29uZHMuICovCisgICAgICAgIHRpbWVfbGVmdCA9IGFsYXJtX3N0cnVjdC50aW1lIC0KKwkg ICgoc3lzdGVtX3RpbWUoKSAtIHRpbWVfc3RhcnRlZCkgLyAxMDAwMDAwLjApOworCisgICAgICAg IC8qIEtpbGwgdGhlIGFsYXJtIHRocmVhZCAqLworICAgICAgICBraWxsX3RocmVhZCAoYWxhcm1f dGhyZWFkKTsKKworICAgICAgICAvKiBXZSBuZWVkIHRvIGNsZWFuIHVwIGFzIHRob3VnaCB0aGUg YWxhcm0gb2NjdXJlZC4gKi8KKyAgICAgICAgdGltZV9zdGFydGVkID0gMDsKKyAgICAgICAgYWxh cm1fc3RydWN0LnRocmVhZCA9IC0xOworICAgICAgICBhbGFybV9zdHJ1Y3QudGltZSA9IDA7Cisg ICAgICAgIGFsYXJtX2V4cGlyZWQoKTsKKyAgICB9CisKKy8qIFNldCBhIG5ldyBhbGFybSBjbG9j aywgaWYgcmVxdWVzdGVkLiAqLworICAgIGlmIChzZWNvbmRzID4gMCkgeworICAgICAgICBhbGFy bV9zdHJ1Y3QudGhyZWFkID0gZmluZF90aHJlYWQoTlVMTCk7CisgICAgICAgIGFsYXJtX3N0cnVj dC50aW1lID0gc2Vjb25kczsKKyAgICAgICAgdGltZV9zdGFydGVkID0gc3lzdGVtX3RpbWUoKTsK KyAgICAgICAgYWxhcm1fdGhyZWFkID0gc3Bhd25fdGhyZWFkIChkb19hbGFybSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWxhcm1fdGhyZWFkIiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBCX05PUk1BTF9QUklPUklUWSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKSAmYWxhcm1fc3RydWN0CisJCQkJICAg ICApOworICAgICAgICByZXN1bWVfdGhyZWFkIChhbGFybV90aHJlYWQpOworICAgIH0KKworLyog Tm93IHJldHVybiBbdW51c2VkIHRpbWUgfCAwXSAqLworICAgIHJldHVybiAoKHVuc2lnbmVkIGlu dCkgdGltZV9sZWZ0KTsKK30KKworLyoKKyAgVGhpcyBmdW5jdGlvbiBpcyB0aGUgZGVwYXJ0dXJl IGZyb20gVU5JWC9QT1NJWCBhbGFybSBoYW5kbGluZy4gSW4gdGhlIGNhc2UKKyAgb2YgQmUncyBt aXNzaW5nIGFsYXJtKCkgZnVuY3Rpb24sIHRoaXMgc3R1ZmYgbmVlZHMgdG8gYmUgZG9uZSBpbiB0 aGUgU0lHQUxSTQorICBoYW5kbGVyLiBXaGVuIEJlIGltcGxlbWVudHMgYWxhcm0oKSwgdGhpcyBm dW5jdGlvbiBjYWxsIGNhbiBiZSBlbGltaW5hdGVkCisgIGZyb20gdXNlcidzIFNJR0FMUk0gc2ln bmFsIGhhbmRsZXJzLgorKi8KKwordm9pZAorYWxhcm1fZXhwaXJlZCh2b2lkKSB7CisgICAgbG9u ZyByZXRfdmFsOworCisgICAgaWYgKGFsYXJtX3RocmVhZCAhPSAtMSkgeworICAgICAgICB3YWl0 X2Zvcl90aHJlYWQgKGFsYXJtX3RocmVhZCwgJnJldF92YWwpOworICAgICAgICBhbGFybV90aHJl YWQgPSAtMTsKKyAgICB9Cit9CisKKy8qCisgIFRoaXMgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgc25v b3plcyB0aGUgcmVxdWlzaXRlIG51bWJlciBvZiBzZWNvbmRzIGFuZCB0aGVuCisgIFNJR0FMUk1z IHRoZSBjYWxsaW5nIHRocmVhZC4gTm90ZSB0aGF0IGtpbGwoKSB3YW50cyBhIHBpZF90IGFyZywg d2hpbHN0IEJlCisgIHVzZXMgdGhyZWFkX2lkOyBjdXJyZW50bHkgdGhleSBhcmUgYm90aCB0eXBk ZWYnZWQgYXMgbG9uZywgYnV0IEknbGwgZG8gdGhlCisgIGNhc3QgYW55d2F5LiBUaGlzIGZ1bmN0 aW9uIGlzIHJ1biBpbiBhIHNlcGFyYXRlIHRocmVhZC4KKyovCisKK2xvbmcKK2RvX2FsYXJtICh2 b2lkICphbGFybV9zdHJ1Y3QpIHsKKyAgICBzbm9vemUgKChkb3VibGUpICgoc3RydWN0IEFMQVJN X1NUUlVDVCAqKSBhbGFybV9zdHJ1Y3QpLT50aW1lICogMTAwMDAwMC4wKTsKKyAgICBraWxsICgo cGlkX3QpKChzdHJ1Y3QgQUxBUk1fU1RSVUNUICopIGFsYXJtX3N0cnVjdCktPnRocmVhZCwgU0lH QUxSTSk7CisgICAgdGltZV9zdGFydGVkID0gMDsKKyAgICAoKHN0cnVjdCBBTEFSTV9TVFJVQ1Qg KikgYWxhcm1fc3RydWN0KS0+dGhyZWFkID0gLTE7CisgICAgKChzdHJ1Y3QgQUxBUk1fU1RSVUNU ICopIGFsYXJtX3N0cnVjdCktPnRpbWUgPSAwOworfQorLyogI2VuZGlmICovIC8qIEJFX0RSXzcg Ki8KKyNlbmRpZiAvKiBCRU9TT1JCRUJPWCAqLworCisjaWZkZWYgUGxhbjkKKworaW50CitwOXR0 eWN0bChjaGFyIGxldHRlciwgaW50IG51bSwgaW50IHBhcmFtKSB7CisgICAgY2hhciBjbWRbMjBd OworICAgIGludCBsZW47CisKKyAgICBpZiAodHR5Y3RsZmQgPCAwKQorICAgICAgcmV0dXJuIC0x OworCisgICAgY21kWzBdID0gbGV0dGVyOworICAgIGlmIChudW0pCisgICAgICBsZW4gPSBzcHJp bnRmKGNtZCArIDEsICIlZCIsIHBhcmFtKSArIDE7CisgICAgZWxzZSB7CisJY21kWzFdID0gcGFy YW07CisJbGVuID0gMjsKKyAgICB9CisgICAgaWYgKHdyaXRlKHR0eWN0bGZkLCBjbWQsIGxlbikg PT0gbGVuKSB7CisJY21kW2xlbl0gPSAwOworCS8qIGZwcmludGYoc3Rkb3V0LCAid3JvdGUgJyVz J1xuIiwgY21kKTsgKi8KKwlyZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIC0xOworfQorCitp bnQKK3A5dHR5cGFyaXR5KGNoYXIgbCkgeworICAgIHJldHVybiBwOXR0eWN0bCgncCcsIDAsIGwp OworfQorCitpbnQKK3A5dHRoZmxvdyhpbnQgZmxvdywgaW50IHN0YXR1cykgeworICAgIHJldHVy biBwOXR0eWN0bCgnbScsIDEsIHN0YXR1cyk7Cit9CisKK2ludAorcDl0dHNzcGQoaW50IGNwcykg eworICAgIGlmIChwOXR0eWN0bCgnYicsIDEsIGNwcyAqIDEwKSA8IDApCisgICAgICByZXR1cm4g LTE7CisgICAgdHR5bGFzdHNwZWVkID0gY3BzICogMTA7CisgICAgcmV0dXJuIDA7Cit9CisKK2lu dAorcDlvcGVudHR5Y3RsKGNoYXIgKnR0bmFtZSkgeworICAgIGNoYXIgbmFtZVsxMDBdOworCisg ICAgaWYgKHR0eWN0bGZkID49IDApIHsKKwljbG9zZSh0dHljdGxmZCk7CisJdHR5Y3RsZmQgPSAt MTsKKwl0dHlsYXN0c3BlZWQgPSAtMTsKKyAgICB9CisgICAgc3ByaW50ZihuYW1lLCAiJXNjdGwi LCB0dG5hbWUpOworICAgIHR0eWN0bGZkID0gb3BlbihuYW1lLCAxKTsKKyAgICByZXR1cm4gdHR5 Y3RsZmQ7Cit9CisKK2ludAorcDljb25jYigpIHsKKyAgICBpZiAoY29uc2N0bGZkID49IDApIHsK KwlpZiAod3JpdGUoY29uc2N0bGZkLCAicmF3b24iLCA1KSA9PSA1KQorCSAgcmV0dXJuIDA7Cisg ICAgfQorICAgIHJldHVybiAtMTsKK30KKworaW50CitwOWNvbmJpbigpIHsKKyAgICByZXR1cm4g cDljb25jYigpOworfQorCitpbnQKK3A5Y29ucmVzKCkgeworICAgIGlmIChjb25zY3RsZmQgPj0g MCkgeworCWlmICh3cml0ZShjb25zY3RsZmQsICJyYXdvZmYiLCA2KSA9PSA2KQorCSAgcmV0dXJu IDA7CisgICAgfQorICAgIHJldHVybiAtMTsKK30KKworaW50CitwOXNuZGJyayhpbnQgbXNlYykg eworICAgIGlmICh0dHljdGxmZCA+PSAwKSB7CisJY2hhciBjbWRbMjBdOworCWludCBpID0gc3By aW50ZihjbWQsICJrJWQiLCBtc2VjKTsKKwlpZiAod3JpdGUodHR5Y3RsZmQsIGNtZCwgaSkgPT0g aSkKKwkgIHJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4gLTE7Cit9CisKK2ludAorY29ud3Jp dGUoY2hhciAqYnVmLCBpbnQgbikgeworICAgIGludCB4OworICAgIHN0YXRpYyBpbnQgbGVuZ3Ro ID0gMDsKKyAgICBzdGF0aWMgaW50IGhvbGRpbmdjciA9IDA7CisgICAgaW50IG5vcm1hbCA9IDA7 CisgICAgZm9yICh4ID0gMDsgeCA8IG47IHgrKykgeworCWNoYXIgYyA9IGJ1Zlt4XTsKKwlpZiAo YyA9PSAwMDcpIHsKKwkgICAgaWYgKG5vcm1hbCkgeworCQl3cml0ZSgxLCBidWYgKyAoeCAtIG5v cm1hbCksIG5vcm1hbCk7CisJCWxlbmd0aCArPSBub3JtYWw7CisJCW5vcm1hbCA9IDA7CisJICAg IH0KKwkgICAgLyogd3JpdGUobm9pc2VmZCwgIjEwMDAgMzAwIiwgOCk7ICovCisJICAgIGhvbGRp bmdjciA9IDA7CisJfSBlbHNlIGlmIChjID09ICdccicpIHsKKwkgICAgaWYgKG5vcm1hbCkgewor CQl3cml0ZSgxLCBidWYgKyAoeCAtIG5vcm1hbCksIG5vcm1hbCk7CisJCWxlbmd0aCArPSBub3Jt YWw7CisJCW5vcm1hbCA9IDA7CisJICAgIH0KKwkgICAgaG9sZGluZ2NyID0gMTsKKwl9IGVsc2Ug aWYgKGMgPT0gJ1xuJykgeworCSAgICB3cml0ZSgxLCBidWYgKyAoeCAtIG5vcm1hbCksIG5vcm1h bCArIDEpOworCSAgICBub3JtYWwgPSAwOworCSAgICBsZW5ndGggPSAwOworCSAgICBob2xkaW5n Y3IgPSAwOworCX0gZWxzZSBpZiAoYyA9PSAnXGInKSB7CisJICAgIGlmIChub3JtYWwpIHsKKwkJ d3JpdGUoMSwgYnVmICsgKHggLSBub3JtYWwpLCBub3JtYWwpOworCQlsZW5ndGggKz0gbm9ybWFs OworCQlub3JtYWwgPSAwOworCSAgICB9CisJICAgIGlmIChsZW5ndGgpIHsKKwkJd3JpdGUoMSwg JmMsIDEpOworCQlsZW5ndGgtLTsKKwkgICAgfQorCSAgICBob2xkaW5nY3IgPSAwOworCX0gZWxz ZSB7CisJICAgIGlmIChob2xkaW5nY3IpIHsKKwkJY2hhciBiID0gJ1xiJzsKKwkJd2hpbGUgKGxl bmd0aC0tID4gMCkKKwkJICB3cml0ZSgxLCAmYiwgMSk7CisJCWxlbmd0aCA9IDA7CS8qIGNvbXBp bGVyIGJ1ZyAqLworCSAgICB9CisJICAgIGhvbGRpbmdjciA9IDA7CisJICAgIG5vcm1hbCsrOwor CX0KKyAgICB9CisgICAgaWYgKG5vcm1hbCkgeworCXdyaXRlKDEsIGJ1ZiArICh4IC0gbm9ybWFs KSwgbm9ybWFsKTsKKwlsZW5ndGggKz0gbm9ybWFsOworICAgIH0KKyAgICByZXR1cm4gbjsKK30K Kwordm9pZAorY29ucHJpbnQoY2hhciAqZm10LCAuLi4pIHsKKyAgICBzdGF0aWMgY2hhciBidWZb MTAwMF07CQkvKiBub3Qgc2FmZSBpZiBvbiB0aGUgc3RhY2sgKi8KKworICAgIHZhX2xpc3QgYXA7 CisgICAgaW50IGk7CisKKyAgICB2YV9zdGFydChhcCwgZm10KTsKKyAgICBpID0gdnNwcmludGYo YnVmLCBmbXQsIGFwKTsKKyAgICBjb253cml0ZShidWYsIGkpOworfQorI2VuZGlmIC8qIFBsYW45 ICovCisKKy8qIGZwcmludGYsIHByaW50ZiwgcGVycm9yIHJlcGxhY2VtZW50cy4uLiAqLworCisv KiBmIHAgciBpIG4gdCBmICovCisKKyNpZmRlZiBVTklYCisjaWZkZWYgQ0tfQU5TSUMKKyNpbmNs dWRlIDxzdGRhcmcuaD4KKyNlbHNlIC8qIENLX0FOU0lDICovCisjaWZkZWYgX19HTlVDX18KKyNp bmNsdWRlIDxzdGRhcmcuaD4KKyNlbHNlCisjaW5jbHVkZSA8dmFyYXJncy5oPgorI2VuZGlmCS8q IF9fR05VQ19fICovCisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKyNpZmRlZiBmcHJpbnRmCisjdW5k ZWYgZnByaW50Zgorc3RhdGljIGNoYXIgc3RyMVs0MDk2XTsKK3N0YXRpYyBjaGFyIHN0cjJbNDA5 Nl07CitpbnQKKyNpZmRlZiBDS19BTlNJQworY2t4ZnByaW50ZihGSUxFICogZmlsZSwgY29uc3Qg Y2hhciAqIGZvcm1hdCwgLi4uKQorI2Vsc2UgLyogQ0tfQU5TSUMgKi8KK2NreGZwcmludGYodmFf YWxpc3QpIHZhX2RjbAorI2VuZGlmIC8qIENLX0FOU0lDICovCisvKiBja3hmcHJpbnRmICovIHsK KyAgICBpbnQgaSwgaiwgbGVuLCBnb3RfY3I7CisgICAgdmFfbGlzdCBhcmdzOworICAgIGludCBy YyA9IDA7CisKKyNpZmRlZiBDS19BTlNJQworICAgIHZhX3N0YXJ0KGFyZ3MsIGZvcm1hdCk7Cisj ZWxzZSAvKiBDS19BTlNJQyAqLworICAgIGNoYXIgKiBmb3JtYXQ7CisgICAgRklMRSAqIGZpbGU7 CisgICAgdmFfc3RhcnQoYXJncyk7CisgICAgZmlsZSA9IHZhX2FyZyhhcmdzLEZJTEUgKik7Cisg ICAgZm9ybWF0ID0gdmFfYXJnKGFyZ3MsY2hhciAqKTsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLwor CisgICAgaWYgKCFpbnNlcnZlciB8fCAoZmlsZSAhPSBzdGRvdXQgJiYgZmlsZSAhPSBzdGRlcnIg JiYgZmlsZSAhPSBzdGRpbikpIHsKKwlyYyA9IHZmcHJpbnRmKGZpbGUsZm9ybWF0LGFyZ3MpOwor ICAgIH0gZWxzZSB7CisJdW5zaWduZWQgaW50IGM7CisgICAgICAgIHJjID0gdnNwcmludGYoc3Ry MSwgZm9ybWF0LCBhcmdzKTsKKyAgICAgICAgbGVuID0gc3RybGVuKHN0cjEpOworICAgICAgICBp ZiAobGVuID49IHNpemVvZihzdHIxKSkgeworICAgICAgICAgICAgZGVidWcoRjEwMSwiY2t4ZnBy aW50ZigpIGJ1ZmZlciBvdmVyZmxvdyIsIiIsbGVuKTsKKyAgICAgICAgICAgIGRvZXhpdChCQURf RVhJVCwxKTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKGkgPSAwLCBqID0gMCwgZ290X2NyID0g MDsKKwkgICAgIGkgPCBsZW4gJiYgaiA8IHNpemVvZihzdHIxKS0yOworCSAgICAgaSsrLCBqKysg KSB7CisJICAgIC8qIFdlIGNhbid0IHVzZSAyNTUgYXMgYSBjYXNlIGxhYmVsIGJlY2F1c2Ugb2Yg c2lnbmVkIGNoYXJzICovCisJICAgIGMgPSAodW5zaWduZWQpKHN0cjFbaV0gJiAweGZmKTsKKyNp ZmRlZiBUTkNPREUKKwkgICAgaWYgKGMgPT0gMjU1KSB7CisJCWlmIChnb3RfY3IgJiYgIVRFTE9Q VF9NRShURUxPUFRfQklOQVJZKSkKKwkJICBzdHIyW2orK10gPSAnXDAnOworCQlzdHIyW2orK10g PSBJQUM7CisJCXN0cjJbal0gPSBJQUM7CisJCWdvdF9jciA9IDA7CisJICAgIH0gZWxzZQorI2Vu ZGlmIC8qIFROQ09ERSAqLworCSAgICBzd2l0Y2ggKGMpIHsKKwkgICAgICBjYXNlICdccic6Cisg ICAgICAgICAgICAgICAgaWYgKGdvdF9jcgorI2lmZGVmIFROQ09ERQorCQkgICAgJiYgIVRFTE9Q VF9NRShURUxPUFRfQklOQVJZKQorI2VuZGlmIC8qIFROQ09ERSAqLworCQkgICAgKQorCQkgIHN0 cjJbaisrXSA9ICdcMCc7CisgICAgICAgICAgICAgICAgc3RyMltqXSA9IHN0cjFbaV07CisgICAg ICAgICAgICAgICAgZ290X2NyID0gMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgICBj YXNlICdcbic6CisgICAgICAgICAgICAgICAgaWYgKCFnb3RfY3IpCisJCSAgc3RyMltqKytdID0g J1xyJzsKKyAgICAgICAgICAgICAgICBzdHIyW2pdID0gc3RyMVtpXTsKKyAgICAgICAgICAgICAg ICBnb3RfY3IgPSAwOworICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICAgIGRlZmF1bHQ6Cisg ICAgICAgICAgICAgICAgaWYgKGdvdF9jcgorI2lmZGVmIFROQ09ERQorCQkgICAgJiYgIVRFTE9Q VF9NRShURUxPUFRfQklOQVJZKQorI2VuZGlmIC8qIFROQ09ERSAqLworCQkgICAgKQorCQkgIHN0 cjJbaisrXSA9ICdcMCc7CisgICAgICAgICAgICAgICAgc3RyMltqXSA9IHN0cjFbaV07CisgICAg ICAgICAgICAgICAgZ290X2NyID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg ICBpZiAoZ290X2NyCisjaWZkZWYgVE5DT0RFCisgICAgICAgICAgICAgJiYgIVRFTE9QVF9NRShU RUxPUFRfQklOQVJZKQorI2VuZGlmIC8qIFROQ09ERSAqLworICAgICAgICAgICAgICkKKyAgICAg ICAgICAgIHN0cjJbaisrXSA9ICdcMCc7CisjaWZkZWYgQ0tfRU5DUllQVElPTgorI2lmZGVmIFRO Q09ERQorICAgICAgICBpZiAoVEVMT1BUX01FKFRFTE9QVF9FTkNSWVBUSU9OKSkKKwkgIGNrX3Ru X2VuY3J5cHQoc3RyMixqKTsKKyNlbmRpZiAvKiBUTkNPREUgKi8KKyNlbmRpZiAvKiBDS19FTkNS WVBUSU9OICovCisjaWZkZWYgQ0tfU1NMCisJaWYgKGluc2VydmVyICYmIChzc2xfYWN0aXZlX2Zs YWcgfHwgdGxzX2FjdGl2ZV9mbGFnKSkgeworCSAgICAvKiBXcml0ZSB1c2luZyBTU0wgKi8KKyAg ICAgICAgICAgIGNoYXIgKiBwID0gc3RyMjsKKyAgICAgICAgICBzc2xfcmV0cnk6CisgICAgICAg ICAgICBpZiAoc3NsX2FjdGl2ZV9mbGFnKQorCSAgICAgIHJjID0gU1NMX3dyaXRlKHNzbF9jb24s IHAsIGopOworICAgICAgICAgICAgZWxzZQorCSAgICAgIHJjID0gU1NMX3dyaXRlKHRsc19jb24s IHAsIGopOworCSAgICBkZWJ1ZyhGMTExLCJja3hmcHJpbnRmIiwiU1NMX3dyaXRlIixyYyk7Cisg ICAgICAgICAgICBzd2l0Y2ggKFNTTF9nZXRfZXJyb3Ioc3NsX2FjdGl2ZV9mbGFnP3NzbF9jb246 dGxzX2NvbixyYykpIHsKKwkgICAgICBjYXNlIFNTTF9FUlJPUl9OT05FOgorICAgICAgICAgICAg ICAgIGlmIChyYyA9PSBqKQorCQkgIGJyZWFrOworICAgICAgICAgICAgICAgIHAgKz0gcmM7Cisg ICAgICAgICAgICAgICAgaiAtPSByYzsKKyAgICAgICAgICAgICAgICBnb3RvIHNzbF9yZXRyeTsK KwkgICAgICBjYXNlIFNTTF9FUlJPUl9XQU5UX1dSSVRFOgorCSAgICAgIGNhc2UgU1NMX0VSUk9S X1dBTlRfUkVBRDoKKwkgICAgICBjYXNlIFNTTF9FUlJPUl9TWVNDQUxMOgorICAgICAgICAgICAg ICAgIGlmIChyYyAhPSAwKQorCQkgIHJldHVybigtMSk7CisJICAgICAgY2FzZSBTU0xfRVJST1Jf V0FOVF9YNTA5X0xPT0tVUDoKKwkgICAgICBjYXNlIFNTTF9FUlJPUl9TU0w6CisJICAgICAgY2Fz ZSBTU0xfRVJST1JfWkVST19SRVRVUk46CisJICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg ICByYyA9IDA7CisgICAgICAgICAgICB9CisJfSBlbHNlCisjZW5kaWYgLyogQ0tfU1NMICovCisg ICAgICAgIGZ3cml0ZShzdHIyLHNpemVvZihjaGFyKSxqLHN0ZG91dCk7CisgICAgfQorICAgIHZh X2VuZChhcmdzKTsKKyAgICByZXR1cm4ocmMpOworfQorI2VuZGlmIC8qIGZwcmludGYgKi8KKwor LyogcCByIGkgbiB0IGYgKi8KKworI2lmZGVmIHByaW50ZgorI3VuZGVmIHByaW50ZgoraW50Cisj aWZkZWYgQ0tfQU5TSUMKK2NreHByaW50Zihjb25zdCBjaGFyICogZm9ybWF0LCAuLi4pCisjZWxz ZSAvKiBDS19BTlNJQyAqLworY2t4cHJpbnRmKHZhX2FsaXN0KSB2YV9kY2wKKyNlbmRpZiAvKiBD S19BTlNJQyAqLworLyogY2t4cHJpbnRmICovIHsKKyAgICBpbnQgaSwgaiwgbGVuLCBnb3RfY3I7 CisgICAgdmFfbGlzdCBhcmdzOworICAgIGludCByYyA9IDA7CisKKyNpZmRlZiBDS19BTlNJQwor ICAgIHZhX3N0YXJ0KGFyZ3MsIGZvcm1hdCk7CisjZWxzZSAvKiBDS19BTlNJQyAqLworICAgIGNo YXIgKiBmb3JtYXQ7CisgICAgdmFfc3RhcnQoYXJncyk7CisgICAgZm9ybWF0ID0gdmFfYXJnKGFy Z3MsY2hhciAqKTsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworCisgICAgaWYgKCFpbnNlcnZlcikg eworCXJjID0gdnByaW50Zihmb3JtYXQsIGFyZ3MpOworICAgIH0gZWxzZSB7CisJdW5zaWduZWQg aW50IGM7CisgICAgICAgIHJjID0gdnNwcmludGYoc3RyMSwgZm9ybWF0LCBhcmdzKTsKKyAgICAg ICAgbGVuID0gc3RybGVuKHN0cjEpOworICAgICAgICBpZiAobGVuID49IHNpemVvZihzdHIxKSkg eworICAgICAgICAgICAgZGVidWcoRjEwMSwiY2t4cHJpbnRmKCkgYnVmZmVyIG92ZXJmbG93Iiwi IixsZW4pOworICAgICAgICAgICAgZG9leGl0KEJBRF9FWElULDEpOworICAgICAgICB9CisgICAg ICAgIGZvciAoaSA9IDAsIGogPSAwLCBnb3RfY3I9MDsKKwkgICAgIGkgPCBsZW4gJiYgaiA8IHNp emVvZihzdHIxKS0yOworCSAgICAgaSsrLCBqKysgKSB7CisJICAgIGMgPSAodW5zaWduZWQpKHN0 cjFbaV0gJiAweGZmKTsKKyNpZmRlZiBUTkNPREUKKwkgICAgaWYgKGMgPT0gMjU1KSB7CisJCWlm IChnb3RfY3IgJiYgIVRFTE9QVF9NRShURUxPUFRfQklOQVJZKSkKKwkJICBzdHIyW2orK10gPSAn XDAnOworCQlzdHIyW2orK10gPSBJQUM7CisJCXN0cjJbal0gPSBJQUM7CisJCWdvdF9jciA9IDA7 CisJICAgIH0gZWxzZQorI2VuZGlmIC8qIFROQ09ERSAqLworCSAgICBzd2l0Y2ggKGMpIHsKKwkg ICAgICBjYXNlICdccic6CisgICAgICAgICAgICAgICAgaWYgKGdvdF9jcgorI2lmZGVmIFROQ09E RQorCQkgICAgJiYgIVRFTE9QVF9NRShURUxPUFRfQklOQVJZKQorI2VuZGlmIC8qIFROQ09ERSAq LworCQkgICAgKQorCQkgIHN0cjJbaisrXSA9ICdcMCc7CisgICAgICAgICAgICAgICAgc3RyMltq XSA9IHN0cjFbaV07CisgICAgICAgICAgICAgICAgZ290X2NyID0gMTsKKyAgICAgICAgICAgICAg ICBicmVhazsKKwkgICAgICBjYXNlICdcbic6CisgICAgICAgICAgICAgICAgaWYgKCFnb3RfY3Ip CisJCSAgc3RyMltqKytdID0gJ1xyJzsKKyAgICAgICAgICAgICAgICBzdHIyW2pdID0gc3RyMVtp XTsKKyAgICAgICAgICAgICAgICBnb3RfY3IgPSAwOworICAgICAgICAgICAgICAgIGJyZWFrOwor CSAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgaWYgKGdvdF9jcgorI2lmZGVmIFROQ09E RQorCQkgICAgJiYgIVRFTE9QVF9NRShURUxPUFRfQklOQVJZKQorI2VuZGlmIC8qIFROQ09ERSAq LworCQkgICAgKQorCQkgIHN0cjJbaisrXSA9ICdcMCc7CisgICAgICAgICAgICAgICAgc3RyMltq XSA9IHN0cjFbaV07CisgICAgICAgICAgICAgICAgZ290X2NyID0gMDsKKyAgICAgICAgICAgICAg ICBicmVhazsKKwkgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChnb3RfY3IKKyNpZmRlZiBU TkNPREUKKyAgICAgICAgICAgICAmJiAhVEVMT1BUX01FKFRFTE9QVF9CSU5BUlkpCisjZW5kaWYg LyogVE5DT0RFICovCisgICAgICAgICAgICAgKQorICAgICAgICAgICAgc3RyMltqKytdID0gJ1ww JzsKKyNpZmRlZiBDS19FTkNSWVBUSU9OCisjaWZkZWYgVE5DT0RFCisgICAgICAgIGlmIChURUxP UFRfTUUoVEVMT1BUX0VOQ1JZUFRJT04pKQorCSAgY2tfdG5fZW5jcnlwdChzdHIyLGopOworI2Vu ZGlmIC8qIFROQ09ERSAqLworI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KKyNpZmRlZiBDS19T U0wKKwlpZiAoaW5zZXJ2ZXIgJiYgKHNzbF9hY3RpdmVfZmxhZyB8fCB0bHNfYWN0aXZlX2ZsYWcp KSB7CisgICAgICAgICAgICBjaGFyICogcCA9IHN0cjI7CisJICAgIC8qIFdyaXRlIHVzaW5nIFNT TCAqLworICAgICAgICAgIHNzbF9yZXRyeToKKyAgICAgICAgICAgIGlmIChzc2xfYWN0aXZlX2Zs YWcpCisJICAgICAgcmMgPSBTU0xfd3JpdGUoc3NsX2NvbiwgcCwgaik7CisgICAgICAgICAgICBl bHNlCisJICAgICAgcmMgPSBTU0xfd3JpdGUodGxzX2NvbiwgcCwgaik7CisJICAgIGRlYnVnKEYx MTEsImNreHByaW50ZiIsIlNTTF93cml0ZSIscmMpOworICAgICAgICAgICAgc3dpdGNoIChTU0xf Z2V0X2Vycm9yKHNzbF9hY3RpdmVfZmxhZz9zc2xfY29uOnRsc19jb24scmMpKSB7CisJICAgICAg Y2FzZSBTU0xfRVJST1JfTk9ORToKKyAgICAgICAgICAgICAgICBpZiAocmMgPT0gaikKKwkJICBi cmVhazsKKyAgICAgICAgICAgICAgICBwICs9IHJjOworICAgICAgICAgICAgICAgIGogLT0gcmM7 CisgICAgICAgICAgICAgICAgZ290byBzc2xfcmV0cnk7CisJICAgICAgY2FzZSBTU0xfRVJST1Jf V0FOVF9XUklURToKKwkgICAgICBjYXNlIFNTTF9FUlJPUl9XQU5UX1JFQUQ6CisJICAgICAgY2Fz ZSBTU0xfRVJST1JfU1lTQ0FMTDoKKyAgICAgICAgICAgICAgICBpZiAocmMgIT0gMCkKKwkJICBy ZXR1cm4oLTEpOworCSAgICAgIGNhc2UgU1NMX0VSUk9SX1dBTlRfWDUwOV9MT09LVVA6CisJICAg ICAgY2FzZSBTU0xfRVJST1JfU1NMOgorCSAgICAgIGNhc2UgU1NMX0VSUk9SX1pFUk9fUkVUVVJO OgorCSAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmMgPSAwOworICAgICAgICAgICAg fQorCX0gZWxzZQorI2VuZGlmIC8qIENLX1NTTCAqLworCSAgcmMgPSBmd3JpdGUoc3RyMixzaXpl b2YoY2hhciksaixzdGRvdXQpOworICAgIH0KKyAgICB2YV9lbmQoYXJncyk7CisgICAgcmV0dXJu KHJjKTsKK30KKyNlbmRpZiAvKiBwcmludGYgKi8KKworLyogIHAgZSByIHIgbyByICAqLworCisj aWZkZWYgcGVycm9yCisjdW5kZWYgcGVycm9yCitfUFJPVE9UWVAoY2hhciAqIGNrX2VycnN0ciwo Vk9JRCkpOworI2lmZGVmIE5FWFQKK3ZvaWQKKyNlbHNlCisjaWZkZWYgQ0tfU0NPVjUKK3ZvaWQK KyNlbHNlCitpbnQKKyNlbmRpZiAvKiBDS19TQ09WNSAqLworI2VuZGlmIC8qIE5FWFQgKi8KKyNp ZmRlZiBDS19BTlNJQworY2t4cGVycm9yKGNvbnN0IGNoYXIgKiBzdHIpCisjZWxzZSAvKiBDS19B TlNJQyAqLworY2t4cGVycm9yKHN0cikgY2hhciAqIHN0cjsKKyNlbmRpZiAvKiBDS19BTlNJQyAq LworLyogY2t4cGVycm9yICovIHsKKyAgICBjaGFyICogZXJyc3RyID0gY2tfZXJyc3RyKCk7Cisj aWZuZGVmIE5FWFQKKyNpZm5kZWYgQ0tfU0NPVjUKKyAgICByZXR1cm4KKyNlbmRpZiAvKiBDS19T Q09WNSAqLworI2VuZGlmIC8qIE5FWFQgKi8KKyAgICAgIGNreHByaW50ZigiJXMlcyAlc1xuIixz dHIsKmVycnN0cj8iOiI6IiIsZXJyc3RyKTsKK30KKyNlbmRpZiAvKiBwZXJyb3IgKi8KKyNlbmRp ZiAvKiBVTklYICovCisKKyNpZmRlZiBNSU5JWDIKKworLyogTWluaXggZG9lc24ndCBoYXZlIGEg Z2V0dGltZW9mZGF5IGNhbGwgKGJ1dCBNSU5JWDMgZG9lcykuCisgKiBXZSBmYWtlIG9uZSBoZXJl IHVzaW5nIHRpbWUoMikKKyAqLworCisjaWZuZGVmIE1JTklYMworaW50CitnZXR0aW1lb2ZkYXko c3RydWN0IHRpbWV2YWwgKnRwLCBzdHJ1Y3QgdGltZXpvbmUgKnR6cCkgeworICAgIHRwLT50dl91 c2VjID0gMEw7CQkJLyogQ2xvc2UgZW5vdWdoIGZvciBob3JzZXNob2VzICovCisgICAgaWYodGlt ZSgmKHRwLT50dl9zZWMpKT09LTEpCisgICAgICByZXR1cm4oLTEpOworICAgIHJldHVybigwKTsK K30KKyNlbmRpZgkvKiBNSU5JWDMgKi8KKworI2lmbmRlZiBNSU5JWDMKK2ludAorcmVhZGxpbmso Y29uc3QgY2hhciAqcGF0aCwgdm9pZCAqYnVmLCBzaXplX3QgYnVmc2l6KSB7CisgICAgZXJybm8g PSBFTk9TWVM7CisgICAgcmV0dXJuKC0xKTsKK30KKyNlbmRpZgkvKiBNSU5JWDMgKi8KKworI2Vu ZGlmIC8qIE1JTklYMiAqLwoKZGlmZiAtLWdpdCBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2Vy bWl0LTkuMC4zMDIvY2t1dHV0b3IudHh0IGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQt OS4wLjMwMi9ja3V0dXRvci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u ZWYyYWViZQotLS0gL2Rldi9udWxsCisrKyBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0 LTkuMC4zMDIvY2t1dHV0b3IudHh0CkBAIC0wLDAgKzEsMTk0OCBAQAorCisgICBbMV1UaGUgQ29s dW1iaWEgQ3Jvd24gVGhlIEtlcm1pdCBQcm9qZWN0IHwgQ29sdW1iaWEgVW5pdmVyc2l0eQorICAg NjEyIFdlc3QgMTE1dGggU3RyZWV0LCBOZXcgWW9yayBOWSAxMDAyNSBVU0EgbyBbMl1rZXJtaXRA Y29sdW1iaWEuZWR1CisgICAuLi5zaW5jZSAxOTgxCisgICBbM11Ib21lIFs0XUtlcm1pdCA5NSBb NV1DLUtlcm1pdCBbNl1TY3JpcHRzIFs3XUN1cnJlbnQgWzhdTmV3IFs5XUZBUQorICAgWzEwXVN1 cHBvcnQKKworICAgQy1LRVJNSVQgOS4wIFVOSVggTUFOVUFMIFBBR0UgQU5EIFRVVE9SSUFMCisK KyAgICAgRnJhbmsgZGEgQ3J1egorICAgICBbMTFdVGhlIEtlcm1pdCBQcm9qZWN0LCBbMTJdQ29s dW1iaWEgVW5pdmVyc2l0eQorCisgICBbIFsxM11QREYgdmVyc2lvbiBdIFsgWzE0XU5yb2ZmIHZl cnNpb24gXQorCisgICAgIFRoaXMgZG9jdW1lbnQgaXMgaW50ZW5kZWQgdG8gZ2l2ZSB0aGUgYmVn aW5uZXIgc3VmZmljaWVudAorICAgICBpbmZvcm1hdGlvbiB0byBtYWtlIGJhc2ljIChpZiBub3Qg YWR2YW5jZWQpIHVzZSBvZiBDLUtlcm1pdCA5LjAuCisgICAgIEFsdGhvdWdoIGl0IG1pZ2h0IGJl IHJhdGhlciBsb25nIGZvciBhIFVuaXggbWFudWFsIHBhZ2UgKGFib3V0IDE2MDAKKyAgICAgbGlu ZXMpLCBpdCdzIHN0aWxsIGZhciBzaG9ydGVyIHRoYW4gdGhlIFsxNV1DLUtlcm1pdCBtYW51YWws IHdoaWNoCisgICAgIHNob3VsZCBiZSBjb25zdWx0ZWQgZm9yIGFkdmFuY2VkIHRvcGljcyBzdWNo IGFzIGN1c3RvbWl6YXRpb24sCisgICAgIGNoYXJhY3Rlci1zZXRzLCBzY3JpcHRpbmcsIGV0Yy4g V2UgYWxzbyBhdHRlbXB0IHRvIHByb3ZpZGUgYSBjbGVhcgorICAgICBzdHJ1Y3R1cmFsIG92ZXJ2 aWV3IG9mIEMtS2VybWl0J3MgbWFueSBjYXBhYmlsaXRpZXMsIGZ1bmN0aW9uYWwKKyAgICAgYXJl YXMsIHN0YXRlcywgYW5kIG1vZGVzIGFuZCB0aGVpciBpbnRlcnJlbGF0aW9uLCB0aGF0IHNob3Vs ZCBiZQorICAgICBoZWxwZnVsIHRvIGJlZ2lubmVycyBhbmQgdmV0ZXJhbnMgYWxpa2UsIGFzIHdl bGwgYXMgdG8gdGhvc2UKKyAgICAgdXBncmFkaW5nIHRvIHRoZSBuZXcgcmVsZWFzZS4gVGhhbmtz IHRvIENocmlzdGluZSBHaWFub25lIGZvciBoZXIKKyAgICAgd29yayBvbiB0aGlzIGRvY3VtZW50 IGJlZm9yZSBzaGUgd2FzIGxhaWQgb2ZmIGluIDIwMDUuCisKKyAgIE1vc3QgcmVjZW50IHVwZGF0 ZTogRnJpIEp1bCAxIDE0OjEyOjMxIDIwMTEKKworQ09OVEVOVFMKKworICAgICAqIFsxNl1ERVND UklQVElPTgorICAgICAqIFsxN11TWU5PUFNJUworICAgICAqIFsxOF1PUFRJT05TCisgICAgICog WzE5XUNPTU1BTkQgTEFOR1VBR0UKKyAgICAgKiBbMjBdSU5JVElBTElaQVRJT04gRklMRQorICAg ICAqIFsyMV1NT0RFUyBPRiBPUEVSQVRJT04KKyAgICAgKiBbMjJdTUFLSU5HIENPTk5FQ1RJT05T CisgICAgICogWzIzXVRSQU5TRkVSUklORyBGSUxFUyBXSVRIIEtFUk1JVAorICAgICAqIFsyNF1L RVJNSVQgQ0xJRU5UL1NFUlZFUiBDT05ORUNUSU9OUworCisgICAgICogWzI1XUtFUk1JVCdTIEJV SUxULUlOIEZUUCBBTkQgSFRUUCBDTElFTlRTCisgICAgICogWzI2XUlOVEVSTkVUIEtFUk1JVCBT RVJWSUNFCisgICAgICogWzI3XVNFQ1VSSVRZCisgICAgICogWzI4XUFMVEVSTkFUSVZFIENPTU1B TkQtTElORSBQRVJTT05BTElUSUVTCisgICAgICogWzI5XUxJQ0VOU0UKKyAgICAgKiBbMzBdT1RI RVIgVE9QSUNTCisgICAgICogWzMxXURPQ1VNRU5UQVRJT04gQU5EIFVQREFURVMKKyAgICAgKiBb MzJdRklMRVMKKyAgICAgKiBbMzNdQVVUSE9SUworCitERVNDUklQVElPTgorCisgICBbMzRdVG9w ICAgWzM1XUNvbnRlbnRzICAgWzM2XU5leHQKKworICAgWzM3XUMtS2VybWl0IGlzIGFuIGFsbC1w dXJwb3NlIGNvbW11bmljYXRpb25zIHNvZnR3YXJlIHBhY2thZ2UgZnJvbSB0aGUKKyAgIFszOF1L ZXJtaXQgUHJvamVjdCBhdCBbMzldQ29sdW1iaWEgVW5pdmVyc2l0eSB0aGF0OgorCisgICAgICog SXMgcG9ydGFibGUgdG8gbWFueSBwbGF0Zm9ybXMsIFVuaXggYW5kIG5vbi1Vbml4IGFsaWtlLgor ICAgICAqIENhbiBtYWtlIGJvdGggc2VyaWFsIGFuZCBuZXR3b3JrIGNvbm5lY3Rpb25zLgorICAg ICAqIENhbiBjb25kdWN0IGludGVyYWN0aXZlIHRlcm1pbmFsIHNlc3Npb25zIG92ZXIgaXRzIGNv bm5lY3Rpb24uCisgICAgICogQ2FuIHRyYW5zZmVyIHRleHQgb3IgYmluYXJ5IGZpbGVzIG92ZXIg dGhlIHNhbWUgY29ubmVjdGlvbi4KKyAgICAgKiBDYW4gY29udmVydCB0ZXh0LWZpbGUgY2hhcmFj dGVyIHNldHMgaW4gdGVybWluYWwgbW9kZSBvciBmaWxlCisgICAgICAgdHJhbnNmZXIuCisgICAg ICogSXMgY3VzdG9taXphYmxlIGluIGV2ZXJ5IGFzcGVjdCBvZiBpdHMgb3BlcmF0aW9uLgorCisg ICBDLUtlcm1pdCBpcyBhIG1vZGVtIHByb2dyYW0sIGEgVGVsbmV0IGNsaWVudCwgYW4gUmxvZ2lu IGNsaWVudCwgYW4gRlRQCisgICBjbGllbnQsIGFuIEhUVFAgY2xpZW50LCBhbmQgb24gc2VsZWN0 ZWQgcGxhdGZvcm1zLCBhbHNvIGFuIFguMjUgY2xpZW50LgorICAgSXQgY2FuIG1ha2UgaXRzIG93 biBzZWN1cmUgSW50ZXJuZXQgY29ubmVjdGlvbnMgdXNpbmcgSUVURi1hcHByb3ZlZAorICAgc2Vj dXJpdHkgbWV0aG9kcyBpbmNsdWRpbmcgS2VyYmVyb3MgSVYsIEtlcmJlcm9zIFYsIFNTTC9UTFMs IGFuZCBTUlAKKyAgIGFuZCBpdCBjYW4gYWxzbyBtYWtlIFNTSCAoU2VjdXJlIFNoZWxsKSBjb25u ZWN0aW9ucyB0aHJvdWdoIHlvdXIKKyAgIGV4dGVybmFsIFNTSCBjbGllbnQgYXBwbGljYXRpb24u IEl0IGNhbiBiZSB0aGUgZmFyLWVuZCBmaWxlLXRyYW5zZmVyIG9yCisgICBjbGllbnQvc2VydmVy IHBhcnRuZXIgb2YgeW91ciBkZXNrdG9wIEtlcm1pdCBjbGllbnQuIEl0IGNhbiBhbHNvIGFjY2Vw dAorICAgaW5jb21pbmcgZGlhbGVkIGFuZCBuZXR3b3JrIGNvbm5lY3Rpb25zLiBJdCBjYW4gZXZl biBiZSBpbnN0YWxsZWQgYXMgYW4KKyAgIEludGVybmV0IHNlcnZpY2Ugb24gaXRzIG93biBzdGFu ZGFyZCBUQ1Agc29ja2V0LCAxNjQ5IFtbNDBdUkZDMjgzOSwKKyAgIFs0MV1SRkMyODQwXS4KKwor ICAgQW5kIHBlcmhhcHMgbW9zdCBpbXBvcnRhbnQsIGV2ZXJ5dGhpbmcgeW91IGNhbiBkbyAiYnkg aGFuZCIKKyAgIChpbnRlcmFjdGl2ZWx5KSB3aXRoIEMtS2VybWl0LCBjYW4gYmUgInNjcmlwdGVk IiAoYXV0b21hdGVkKSB1c2luZyBpdHMKKyAgIGJ1aWx0LWluIGNyb3NzLXBsYXRmb3JtIHRyYW5z cG9ydC1pbmRlcGVuZGVudCBzY3JpcHQgcHJvZ3JhbW1pbmcKKyAgIGxhbmd1YWdlLCB3aGljaCBo YXBwZW5zIHRvIGJlIGlkZW50aWNhbCB0byBpdHMgaW50ZXJhY3RpdmUgY29tbWFuZAorICAgbGFu Z3VhZ2UuCisKKyAgIFRoaXMgbWFudWFsIHBhZ2Ugb2ZmZXJzIGFuIG92ZXJ2aWV3IG9mIEMtS2Vy bWl0IDkuMCBmb3IgVW5peCAoIlVuaXgiIGlzCisgICBhbiBvcGVyYXRpbmcgc3lzdGVtIGZhbWls eSB0aGF0IGluY2x1ZGVzIEFJWCwgREcvVVgsIEZyZWVCU0QsIEhQLVVYLAorICAgSVJJWCwgTGlu dXgsIE1hYyBPUyBYLCBOZXRCU0QsIE9wZW5CU0QsIE9wZW4gU2VydmVyLCBPcGVuIFVuaXgsIFFO WCwKKyAgIFNvbGFyaXMsIFN1bk9TLCBTeXN0ZW0gViBSMywgU3lzdGVtIFYgUjQsIFRydTY0IFVu aXgsIFVuaXh3YXJlLCBYZW5peCwKKyAgIGFuZCBtYW55IG90aGVycykuIEZvciB0aG9yb3VnaCBj b3ZlcmFnZSwgcGxlYXNlIGNvbnN1bHQgdGhlIHB1Ymxpc2hlZAorICAgQy1LZXJtaXQgbWFudWFs IGFuZCBzdXBwbGVtZW50cyAoc2VlIFs0Ml1ET0NVTUVOVEFUSU9OIGJlbG93KS4gRm9yCisgICBm dXJ0aGVyIGluZm9ybWF0aW9uIGFib3V0IEMtS2VybWl0LCBLZXJtaXQgc29mdHdhcmUgZm9yIG90 aGVyCisgICBwbGF0Zm9ybXMsIGFuZCBLZXJtaXQgbWFudWFscywgdmlzaXQgdGhlIEtlcm1pdCBQ cm9qZWN0IHdlYnNpdGU6CisKKyAgWzQzXWh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC8K KworICAgVGhpcyBpcyBhIGxvbmdlci10aGFuLWF2ZXJhZ2UgbWFudWFsIHBhZ2UsIGFuZCB5ZXQg aXQgYmFyZWx5IHNjcmF0Y2hlcworICAgdGhlIHN1cmZhY2UuIERvbid0IGJlIGRhdW50ZWQuIEMt S2VybWl0IGlzIGEgbGFyZ2UgYW5kIGNvbXBsZXggcGFja2FnZSwKKyAgIGV2b2x2aW5nIG92ZXIg ZGVjYWRlcyBvZiBwcmFjdGljZSBhbmQgZXhwZXJpZW5jZSwgYnV0IHRoYXQgZG9lc24ndCBtZWFu CisgICBpdCdzIGhhcmQgdG8gbGVhcm4gb3IgdXNlLiBJdHMgbW9zdCBjb21tb25seSB1c2VkIGZ1 bmN0aW9ucyBhcmUKKyAgIGV4cGxhaW5lZCBoZXJlIHdpdGggcG9pbnRlcnMgdG8gYWRkaXRpb25h bCBpbmZvcm1hdGlvbiBlbHNld2hlcmUuCisKKyAgIFs0NF1LZXJtaXQgSG9tZSBbNDVdQy1LZXJt aXQgSG9tZSBbNDZdQy1LZXJtaXQgRkFRCisKK1NZTk9QU0lTCisKKyAgIFs0N11Ub3AgWzQ4XUNv bnRlbnRzIFs0OV1OZXh0IFs1MF1QcmV2aW91cworCisgICBVc2FnZTogIGtlcm1pdCBbZmlsZW5h bWVdIFsteCBhcmcgWy14IGFyZ10uLi5bLXl5eV0uLl0gWyB7PSwtLSwrfSB0ZXh0CisgICBdIF0K KyAgIE9yOiAgICBrZXJtaXQgVVJMCisKKyAgICAgKiAteCBpcyBhbiBvcHRpb24gcmVxdWlyaW5n IGFuIGFyZ3VtZW50OworICAgICAqIC15IGlzIGFuIG9wdGlvbiB3aXRoIG5vIGFyZ3VtZW50Lgor CisgICBJZiB0aGUgZmlyc3QgY29tbWFuZC1saW5lIGFyZ3VtZW50IGlzIHRoZSBuYW1lIG9mIGEg ZmlsZSwKKyAgIGludGVyYWN0aXZlLW1vZGUgY29tbWFuZHMgYXJlIGV4ZWN1dGVkIGZyb20gdGhl IGZpbGUuIFRoZSAnPScgKG9yICItLSIpCisgICBhcmd1bWVudCB0ZWxscyBLZXJtaXQgbm90IHRv IHBhcnNlIHRoZSByZW1haW5kZXIgb2YgdGhlIGNvbW1hbmQgbGluZSwKKyAgIGJ1dCB0byBtYWtl IHRoZSB3b3JkcyBmb2xsb3dpbmcgJz0nIGF2YWlsYWJsZSBhcyBcJTEsIFwlMiwgLi4uIFwlOS4g VGhlCisgICAiKyIgYXJndW1lbnQgaXMgbGlrZSAiPSIgYnV0IGZvciB1c2UgaW4gImtlcmJhbmcg c2NyaXB0cyIgKGV4cGxhaW5lZAorICAgWzUxXWJlbG93KS4gQSBzZWNvbmQgY29tbWFuZC1saW5l IGZvcm1hdCBhbGxvd3MgdGhlIG9uZSBhbmQgb25seQorICAgYXJndW1lbnQgdG8gYmUgYSBbNTJd VGVsbmV0LCBGVFAsIEhUVFAsIG9yIElLU0QgVVJMLgorCisgICBPcmRlciBvZiBleGVjdXRpb246 CisKKyAgICAxLiBbNTNdVGhlIGNvbW1hbmQgZmlsZSAoaWYgYW55KS4KKyAgICAyLiBbNTRdVGhl IGluaXRpYWxpemF0aW9uIGZpbGUsIGlmIGFueSwgdW5sZXNzIHN1cHByZXNzZWQgd2l0aCAtWS4K KyAgICAzLiBbNTVdVGhlIGN1c3RvbWl6YXRpb24gZmlsZSAoaWYgaXQgaXMgZXhlY3V0ZWQgYnkg dGhlIGluaXRpYWxpemF0aW9uCisgICAgICAgZmlsZSkuCisgICAgNC4gWzU2XVRoZSBjb21tYW5k LWxpbmUgVVJMIChpZiBhbnksIGFuZCBpZiBzbywgZXhlY3V0aW9uIHN0b3BzIGhlcmUpLgorICAg IDUuIFs1N11Db21tYW5kLWxpbmUgb3B0aW9ucyAoaWYgYW55KS4KKyAgICA2LiBbNThdSW50ZXJh Y3RpdmUgY29tbWFuZHMuCisKKyAgIFNvbWUgY29tbWFuZC1saW5lIG9wdGlvbnMgY2FuIGNhdXNl IGFjdGlvbnMgKHN1Y2ggYXMgLXMgdG8gc2VuZCBhCisgICBmaWxlKTsgb3RoZXJzIGp1c3Qgc2V0 IHBhcmFtZXRlcnMuIElmIGFueSBhY3Rpb24gb3B0aW9ucyBhcmUgaW5jbHVkZWQKKyAgIG9uIHRo ZSBjb21tYW5kIGxpbmUsIEtlcm1pdCBleGl0cyB3aGVuIGZpbmlzaGVkIHVubGVzcyBhbHNvIGdp dmVuIHRoZQorICAgLVMgKCJzdGF5Iikgb3B0aW9uLiBJZiBubyBhY3Rpb24gb3B0aW9ucyBhcmUg Z2l2ZW4sIG5vIGluaXRpYWxpemF0aW9uCisgICBvciBjb21tYW5kIGZpbGVzIGNvbnRhaW5lZCBh biBFWElUIG9yIFFVSVQgY29tbWFuZCwgYW5kIG5vIGZhdGFsIGVycm9ycworICAgb2NjdXJyZWQs IEtlcm1pdCBpc3N1ZXMgaXRzIHByb21wdCBhbmQgd2FpdHMgZm9yIHlvdSB0byB0eXBlIGNvbW1h bmRzLgorCisgICAgIEJlYXIgaW4gbWluZCB0aGF0IEMtS2VybWl0IGNhbiBiZSBidWlsdCB3aXRo IHNlbGVjdGVkIGZlYXR1cmVzCisgICAgIGRpc2FibGVkLCBhbmQgYWxzbyB0aGF0IGNlcnRhaW4g ZmVhdHVyZXMgYXJlIG5vdCBhdmFpbGFibGUgb24gYWxsCisgICAgIHBsYXRmb3Jtcy4gRm9yIGV4 YW1wbGUsIEMtS2VybWl0IGNhbid0IGJlIGJ1aWx0IHdpdGggVENQL0lQIHN1cHBvcnQKKyAgICAg b24gYSBwbGF0Zm9ybSB0aGF0IGRvZXMgbm90IGhhdmUgVENQL0lQIGhlYWRlciBmaWxlcyBhbmQg bGlicmFyaWVzCisgICAgIChhbmQgZXZlbiBpZiBLZXJtaXQgZG9lcyBpbmNsdWRlIFRDUC9JUCBz dXBwb3J0LCBpdCBjYW4ndCBiZSB1c2VkIHRvCisgICAgIG1ha2UgVENQL0lQIGNvbm5lY3Rpb25z IG9uIGEgY29tcHV0ZXIgdGhhdCBkb2VzIG5vdCBoYXZlIGEgVENQL0lQCisgICAgIHN0YWNrIGlu c3RhbGxlZCkuIElmIHlvdXIgdmVyc2lvbiBvZiBDLUtlcm1pdCBsYWNrcyBhIGZlYXR1cmUKKyAg ICAgbWVudGlvbmVkIGhlcmUsIHVzZSBpdHMgU0hPVyBGRUFUVVJFUyBjb21tYW5kIHRvIHNlZSB3 aGF0IG1pZ2h0IGhhdmUKKyAgICAgYmVlbiBleGNsdWRlZC4KKworICAgQy1LZXJtaXQgaGFzIHRo cmVlIGtpbmRzIG9mIGNvbW1hbmRzOiByZWd1bGFyIHNpbmdsZS1sZXR0ZXIKKyAgIGNvbW1hbmQt bGluZSBvcHRpb25zLCBleHRlbmRlZC1mb3JtYXQgY29tbWFuZC1saW5lIG9wdGlvbnMsIGFuZAor ICAgaW50ZXJhY3RpdmUgY29tbWFuZHMuCisKKyAgIFs1OV1LZXJtaXQgSG9tZSBbNjBdQy1LZXJt aXQgSG9tZSBbNjFdQy1LZXJtaXQgRkFRCisKK09QVElPTlMKKworICAgWzYyXVRvcCBbNjNdQ29u dGVudHMgWzY0XU5leHQgWzY1XVByZXZpb3VzICA8LSAoTW9zdCBwZW9wbGUgc2hvdWxkCisgICBj bGljayBOZXh0IHRvIHNraXAgYXJvdW5kIHRoaXMgc2VjdGlvbi4uLikKKworICAgTGlrZSBtb3N0 IFVuaXggY29tbWFuZHMsIEMtS2VybWl0IGNhbiBiZSBiZSBnaXZlbiBvcHRpb25zIG9uIHRoZQor ICAgY29tbWFuZCBsaW5lLiBCdXQgQy1LZXJtaXQgYWxzbyBjYW4gYmUgdXNlZCBpbnRlcmFjdGl2 ZWx5IGJ5IGdpdmluZyBpdAorICAgWzY2XWNvbW1hbmRzIGNvbXBvc2VkIG9mIHdvcmRzLCB3aGlj aCBhcmUgbW9yZSBpbnR1aXRpdmUgdGhhbiBjcnlwdGljCisgICBjb21tYW5kLWxpbmUgb3B0aW9u cywgYW5kIG1vcmUgZmxleGlibGUgdG9vLiBJbiBvdGhlciB3b3JkcywgeW91IGRvbid0CisgICBo YXZlIHRvIHVzZSBDLUtlcm1pdCdzIGNvbW1hbmQtbGluZSBvcHRpb25zLCBidXQgdGhleSBhcmUg YXZhaWxhYmxlIGlmCisgICB5b3Ugd2FudCB0by4gKEJ5IHRoZSBzYW1lIHRva2VuLCB5b3UgZG9u J3QgaGF2ZSB0byB1c2UgaXRzIGludGVyYWN0aXZlCisgICBjb21tYW5kcyBlaXRoZXIgLS0geW91 IGNhbiB1c2UgZWl0aGVyIG9yIGJvdGggaW4gYW55IGNvbWJpbmF0aW9uLikKKworICAgQy1LZXJt aXQgaXMgZ2VuZXJhbGx5IGluc3RhbGxlZCBpbiB0aGUgUEFUSCBhcyAia2VybWl0IiwgYW5kIHRo ZXJlZm9yZQorICAgaXMgaW52b2tlZCBieSB0eXBpbmcgdGhlIHdvcmQgImtlcm1pdCIgKGxvd2Vy Y2FzZSkgYXQgdGhlIHNoZWxsIHByb21wdCwKKyAgIGFuZCB0aGVuIHByZXNzaW5nIHRoZSBSZXR1 cm4gb3IgRW50ZXIga2V5LiBJZiB5b3Ugd2lzaCB0byBpbmNsdWRlCisgICBjb21tYW5kLWxpbmUg b3B0aW9ucywgcHV0IHRoZW0gYWZ0ZXIgdGhlIHdvcmQgImtlcm1pdCIgYnV0IGJlZm9yZQorICAg cHJlc3NpbmcgUmV0dXJuIG9yIEVudGVyLCBzZXBhcmF0ZWQgYnkgc3BhY2VzLCBmb3IgZXhhbXBs ZToKKworICAkIGtlcm1pdCAtcyBja2VybWl0LnRhci5negorCisgICAoJyQnIGlzIHRoZSBzaGVs bCBwcm9tcHQ7ICJrZXJtaXQgLXMgY2tlcm1pdC50YXIuZ3oiIGlzIHdoYXQgeW91IHR5cGUsCisg ICBmb2xsb3dlZCBieSBSZXR1cm4gb3IgRW50ZXIuKQorCisgICBIZXJlIGlzIGEgbGlzdCBvZiBD LUtlcm1pdCdzIHNpbmdsZS1sZXR0ZXIgY29tbWFuZC1saW5lIG9wdGlvbnMsIHdoaWNoCisgICBz dGFydCB3aXRoIGEgc2luZ2xlIGRhc2ggKC0pLCBpbiBBU0NJSSAoImFscGhhYmV0aWNhbCIpIG9y ZGVyLgorICAgQWxwaGFiZXRpYyBjYXNlIGlzIHNpZ25pZmljYW50ICgtQSBpcyBub3QgdGhlIHNh bWUgYXMgLWEpLiBUaGUgQWN0aW9uPworICAgY29sdW1uIGNvbnRhaW5zIFkgZm9yIGFjdGlvbiBv cHRpb25zIGFuZCBOIGZvciBub24tYWN0aW9uIG9wdGlvbnMuCisKKyAgIE9wdGlvbiBBY3Rpb24/ IERlc2NyaXB0aW9uCisgICAtMCBOIChkaWdpdCB6ZXJvKSAxMDAlIHRyYW5zcGFyZW50IENvbm5l Y3Qgc3RhdGUgZm9yICJpbi10aGUtbWlkZGxlIgorICAgb3BlcmF0aW9uOiA4IGJpdHMsIG5vIHBh cml0eSwgbm8gZXNjYXBlIGNoYXJhY3RlciwgZXZlcnl0aGluZyBwYXNzZXMKKyAgIHRocm91Z2gu CisgICAtOCBOIChkaWdpdCBlaWdodCkgQ29ubmVjdGlvbiBpcyA4LWJpdCBjbGVhbiAodGhpcyBp cyB0aGUgZGVmYXVsdCBpbgorICAgQy1LZXJtaXQgOS4wKS4gRXF1aXZhbGVudCB0byB0aGUgRUlH SFRCSVQgY29tbWFuZCwgd2hpY2ggaW4gdHVybiBpcyBhCisgICBzaG9ydGN1dCBmb3IgU0VUIFRF Uk1JTkFMIEJZVEVTSVpFIDgsIFNFVCBDT01NQU5EIEJZVEVTSVpFIDgsIFNFVAorICAgUEFSSVRZ IE5PTkUuCisgICAtOSBhcmcgTiAoZGlnaXQgbmluZSkgTWFrZSBhIGNvbm5lY3Rpb24gdG8gYW4g RlRQIHNlcnZlci4gRXF1aXZhbGVudCB0bworICAgdGhlIEZUUCBPUEVOIGNvbW1hbmQuCisgICBB cmd1bWVudDogSVAtYWRkcmVzcy1vci1ob3N0bmFtZVs6b3B0aW9uYWwtVENQLXBvcnRdLgorICAg Tk9URTogQy1LZXJtaXQgYWxzbyBoYXMgYSBzZXBhcmF0ZSBGVFAgY29tbWFuZC1saW5lIHBlcnNv bmFsaXR5LCB3aXRoCisgICByZWd1bGFyIEZUUC1saWtlIGNvbW1hbmQtbGluZSBzeW50YXguIFs2 N11Nb3JlIGFib3V0IHRoaXMgYmVsb3cuCisgICAtQSBOIEtlcm1pdCBpcyB0byBiZSBzdGFydGVk IGFzIGFuIEludGVybmV0IHNlcnZpY2UgKElLU0QpIChvbmx5IGZyb20KKyAgIGluZXRkLmNvbmYp LgorICAgLUIgTiBLZXJtaXQgaXMgcnVubmluZyBpbiBCYXRjaCBvciBCYWNrZ3JvdW5kIChubyBj b250cm9sbGluZworICAgdGVybWluYWwpLiBUbyBiZSB1c2VkIGluIGNhc2UgS2VybWl0IGRvZXNu J3QgYXV0b21hdGljYWxseSBzZW5zZSBpdHMKKyAgIGJhY2tncm91bmQgc3RhdHVzLiBFcXVpdmFs ZW50IHRvIHRoZSBTRVQgQkFDS0dST1VORCBPTiBjb21tYW5kLgorICAgLUMgYXJnIE4gSW50ZXJh Y3RpdmUtbW9kZSBDb21tYW5kcyB0byBiZSBleGVjdXRlZC4KKyAgIEFyZ3VtZW50OiBDb21tYW5k cyBzZXBhcmF0ZWQgYnkgY29tbWFzLCBsaXN0IGluIGRvdWJsZXF1b3Rlcy4KKyAgIC1EIGFyZyBO IERlbGF5IGJlZm9yZSBzdGFydGluZyB0byBzZW5kIGluIFJlbW90ZSBtb2RlLiBFcXVpdmFsZW50 IHRvCisgICB0aGUgU0VUIERFTEFZIGNvbW1hbmQuCisgICBBcmd1bWVudDogTnVtYmVyIG9mIHNl Y29uZHMuCisgICAtRSBOIEV4aXQgYXV0b21hdGljYWxseSB3aGVuIGNvbm5lY3Rpb24gY2xvc2Vz LiBFcXVpdmFsZW50IHRvIFNFVCBFWElUCisgICBPTi1ESVNDT05ORUNUIE9OLgorICAgLUYgYXJn IE4gVXNlIGFuIG9wZW4gVENQIGNvbm5lY3Rpb24uCisgICBBcmd1bWVudDogTnVtZXJpYyBmaWxl IGRlc2NyaXB0b3Igb2Ygb3BlbiBUQ1AgY29ubmVjdGlvbi4KKyAgIEFsc28gc2VlOiAtaiwgLUou CisgICAtRyBhcmcgWSBHZXQgZmlsZShzKSBmcm9tIHNlcnZlciwgc2VuZCBjb250ZW50cyB0byBz dGFuZGFyZCBvdXRwdXQsCisgICB3aGljaCBub3JtYWxseSB3b3VsZCBiZSBwaXBlZCB0byBhbm90 aGVyIHByb2Nlc3MuCisgICBBcmd1bWVudDogUmVtb3RlIGZpbGUgc3BlY2lmaWNhdGlvbiwgaW4g cXVvdGVzIGlmIGl0IGNvbnRhaW5zCisgICBtZXRhY2hhcmFjdGVycy4KKyAgIEFsc28gc2VlOiAt ZywgLWsuCisgICAtSCBOIFN1cHByZXNzIHByb2dyYW0gc3RhcnR1cCBIZXJhbGQgYW5kIGdyZWV0 aW5nLgorICAgLUkgTiBUZWxsIEtlcm1pdCBpdCBoYXMgYSByZWxpYWJsZSBjb25uZWN0aW9uLCB0 byBmb3JjZSBzdHJlYW1pbmcgdG8gYmUKKyAgIHVzZWQgd2hlcmUgaXQgbm9ybWFsbHkgd291bGQg bm90IGJlLiBFcXVpdmFsZW50IHRvIHRoZSBTRVQgUkVMSUFCTEUgT04KKyAgIGNvbW1hbmQuCisg ICAtSiBhcmcgTiAiQmUgbGlrZSBUZWxuZXQuIiBMaWtlIC1qIGJ1dCBpbXBsaWVzIC1FLgorICAg QXJndW1lbnQ6IElQIGhvc3RuYW1lL2FkZHJlc3Mgb3B0aW9uYWxseSBmb2xsb3dlZCBieSBzZXJ2 aWNlLgorICAgTk9URTogQy1LZXJtaXQgYWxzbyBoYXMgYSBzZXBhcmF0ZSBUZWxuZXQgY29tbWFu ZC1saW5lIHBlcnNvbmFsaXR5LAorICAgd2l0aCByZWd1bGFyIFRlbG5ldC1saWtlIGNvbW1hbmQt bGluZSBzeW50YXguIFs2OF1Nb3JlIGFib3V0IHRoaXMKKyAgIGJlbG93LgorICAgLUwgTiBSZWN1 cnNpdmUgZGlyZWN0b3J5IGRlc2NlbnQgZm9yIGZpbGVzIGluIC1zIG9wdGlvbi4KKyAgIC1NIGFy ZyBOIE15IHVzZXIgbmFtZSAoZm9yIHVzZSB3aXRoIFRlbG5ldCwgUmxvZ2luLCBGVFAsIGV0Yyku CisgICBFcXVpdmFsZW50IHRvIHRoZSBTRVQgTE9HSU4gVVNFUiBjb21tYW5kLgorICAgQXJndW1l bnQ6IFVzZXJuYW1lIHN0cmluZy4KKyAgIC1PIFkgKFVwcGVyY2FzZSBsZXR0ZXIgTykgQmUgYSBz ZXJ2ZXIgZm9yIE9uZSBjb21tYW5kIG9ubHkuIEFsc28gc2VlOgorICAgLXguCisgICAtUCBOIERv bid0IGNvbnZlcnQgZmlsZSAoUGF0aCkgbmFtZXMgb2YgdHJhbnNmZXJyZWQgZmlsZXMuIEVxdWl2 YWxlbnQKKyAgIHRvIFNFVCBGSUxFIE5BTUVTIExJVEVSQUwuCisgICAtUSBOIFF1aWNrIEtlcm1p dCBwcm90b2NvbCBzZXR0aW5ncy4gRXF1aXZhbGVudCB0byB0aGUgRkFTVCBjb21tYW5kLgorICAg VGhpcyBpcyB0aGUgZGVmYXVsdCBpbiBDLUtlcm1pdCA3LjAgYW5kIGxhdGVyLgorICAgLVIgTiBS ZW1vdGUtb25seSAodGhpcyBqdXN0IG1ha2VzIElGIFJFTU9URSB0cnVlKS4KKyAgIC1TIE4gU3Rh eSAoZW50ZXIgY29tbWFuZCBwYXJzZXIgYWZ0ZXIgYWN0aW9uIG9wdGlvbnMpLgorICAgLVQgTiBG b3JjZSBUZXh0IG1vZGUgZm9yIGZpbGUgdHJhbnNmZXI7IGltcGxpZXMgLVYuIEVxdWl2YWxlbnQg dG8gU0VUCisgICBUUkFOU0ZFUiBNT0RFIE1BTlVBTCwgU0VUIEZJTEUgVFlQRSBURVhULgorICAg LVYgTiBEaXNhYmxlIGF1dG9tYXRpYyBwZXItZmlsZSB0ZXh0L2JpbmFyeSBzd2l0Y2hpbmcuIEVx dWl2YWxlbnQgdG8KKyAgIFNFVCBUUkFOU0ZFUiBNT0RFIE1BTlVBTC4KKyAgIC1ZIE4gU2tpcCAo ZG9uJ3QgZXhlY3V0ZSkgdGhlIGluaXRpYWxpemF0aW9uIGZpbGUuCisgICAtYSBhcmcgTiBBcy1u YW1lIGZvciBmaWxlKHMpIGluIC1zLCAtciwgb3IgLWcuCisgICBBcmd1bWVudDogQXMtbmFtZSBz dHJpbmcgKGFsdGVybmF0aXZlIGZpbGVuYW1lKS4gV2hlbiByZWNlaXZpbmcgZmlsZXMsCisgICB0 aGlzIGNhbiBiZSBhIGRpcmVjdG9yeSBuYW1lLgorICAgLWIgYXJnIE4gU3BlZWQgZm9yIHNlcmlh bCBkZXZpY2UuIEVxdWl2YWxlbnQgdG8gU0VUIFNQRUVELgorICAgQXJndW1lbnQ6IE51bWVyaWMg Qml0cyBwZXIgc2Vjb25kIGZvciBzZXJpYWwgY29ubmVjdGlvbnMuCisgICAtYyBZIEVudGVyIENv bm5lY3Qgc3RhdGUgYmVmb3JlIHRyYW5zZmVycmluZyBmaWxlcy4KKyAgIC1kIE4gQ3JlYXRlIGEg ZGVidWcubG9nIGZpbGUgd2l0aCBkZXRhaWxlZCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gKGEKKyAg IHNlY29uZCAtZCBhZGRzIHRpbWVzdGFtcHMpLiBFcXVpdmFsZW50IHRvIExPRyBERUJVRyBidXQg dGFrZXMgZWZmZWN0CisgICBzb29uZXIuCisgICAtZSBhcmcgTiBNYXhpbXVtIGxlbmd0aCBmb3Ig aW5jb21pbmcgS2VybWl0IGZpbGUtdHJhbnNmZXIgcGFja2V0cy4KKyAgIEVxdWl2YWxlbnQgdG8g U0VUIFJFQ0VJVkUgUEFDS0VULUxFTkdUSC4KKyAgIEFyZ3VtZW50OiBMZW5ndGggaW4gYnl0ZXMu CisgICAtZiBZIFNlbmQgYSBGSU5JU0ggY29tbWFuZCB0byBhIEtlcm1pdCBzZXJ2ZXIuCisgICAt ZyBhcmcgTiBHZXQgZmlsZShzKSBmcm9tIGEgS2VybWl0IHNlcnZlci4KKyAgIEFyZ3VtZW50OiBG aWxlIHNwZWNpZmljYXRpb24gb24gb3RoZXIgY29tcHV0ZXIsIGluIHF1b3RlcyBpZiBpdAorICAg Y29udGFpbnMgbWV0YWNoYXJhY3RlcnMuIEVxdWl2YWxlbnQgdG8gR0VULgorICAgQWxzbyBzZWU6 IC1hLCAtRywgLXIuCisgICAtaCBZIFByaW50IEhlbHAgdGV4dCBmb3Igc2luZ2xlLWxldHRlciBj b21tYW5kLWxpbmUgb3B0aW9ucyAocGlwZSB0aHJ1CisgICAnbW9yZScgdG8gcHJldmVudCBzY3Jv bGxpbmcpLgorICAgLWkgTiBGb3JjZSBiaW5hcnkgKEltYWdlKSBtb2RlIGZvciBmaWxlIHRyYW5z ZmVyOyBpbXBsaWVzIC1WLgorICAgRXF1aXZhbGVudCB0byBTRVQgVFJBTlNGRVIgTU9ERSBNQU5V QUwsIFNFVCBGSUxFIFRZUEUgQklOQVJZLgorICAgLWogYXJnIE4gTWFrZSBhIFRDUC9JUCBjb25u ZWN0aW9uLgorICAgQXJndW1lbnQ6IElQIGhvc3QgbmFtZS9hZGRyZXNzIGFuZCBvcHRpb25hbCBz ZXJ2aWNlIG5hbWUgb3IgbnVtYmVyLgorICAgRXF1aXZhbGVudCB0byB0aGUgVEVMTkVUIGNvbW1h bmQuCisgICBBbHNvIHNlZTogLUosIC1GLgorICAgLWsgWSBSZWNlaXZlIGZpbGUocykgdG8gc3Rh bmRhcmQgb3V0cHV0LCB3aGljaCBub3JtYWxseSB3b3VsZCBiZSBwaXBlZAorICAgdG8gYW5vdGhl ciBwcm9jZXNzLgorICAgQWxzbyBzZWU6IC1yLCAtRy4KKyAgIC1sIGFyZyBOIChMb3dlcmNhc2Ug bGV0dGVyIEwpIE1ha2UgYSBjb25uZWN0aW9uIG9uIHRoZSBnaXZlbiBzZXJpYWwKKyAgIGNvbW11 bmljYXRpb25zIGRldmljZS4gRXF1aXZhbGVudCB0byB0aGUgU0VUIExJTkUgKFNFVCBQT1JUKSBj b21tYW5kLgorICAgQXJndW1lbnQ6IFNlcmlhbCBkZXZpY2UgbmFtZSwgZS5nLiAvZGV2L3R0eVMw LgorICAgLW0gYXJnIE4gTW9kZW0gdHlwZSBmb3IgdXNlIHdpdGggdGhlIC1sIGRldmljZS4gRXF1 aXZhbGVudCB0byB0aGUgU0VUCisgICBNT0RFTSBUWVBFIGNvbW1hbmQuCisgICBBcmd1bWVudDog TW9kZW0gbmFtZSBhcyBpbiBTRVQgTU9ERU0gVFlQRSBjb21tYW5kLCBlLmcuICJ1c3JvYm90aWNz Ii4KKyAgIC1uIFkgRW50ZXIgQ29ubmVjdCBzdGF0ZSBhZnRlciB0cmFuc2ZlcnJpbmcgZmlsZXMg KGhpc3RvcmljYWwpLgorICAgLXAgYXJnIE4gUGFyaXR5LiBFcXVpdmFsZW50IHRvIHRoZSBTRVQg UEFSSVRZIGNvbW1hbmQuCisgICBBcmd1bWVudDogT25lIG9mIHRoZSBmb2xsb3dpbmc6IGUodmVu KSwgbyhkZCksIG0oYXJrKSwgbihvbmUpLCBzKHBhY2UpLgorICAgLXEgTiBRdWlldCAoc3VwcHJl c3MgbW9zdCBtZXNzYWdlcykuIEVxdWl2YWxlbnQgdG8gU0VUIFFVSUVUIE9OLgorICAgLXIgWSBS ZWNlaXZlIGZpbGUocykuIEVxdWl2YWxlbnQgdG8gdGhlIFJFQ0VJVkUgY29tbWFuZC4KKyAgIEFy Z3VtZW50OiAobm9uZSwgYnV0IHNlZSAtYSkKKyAgIC1zIGFyZyBOIFNlbmQgZmlsZShzKS4KKyAg IEFyZ3VtZW50OiBPbmUgb3IgbW9yZSBsb2NhbCBmaWxlIHNwZWNpZmljYXRpb25zLiBFcXVpdmFs ZW50IHRvIHRoZSBTRU5ECisgICBjb21tYW5kLgorICAgQWxzbyBzZWU6IC1hLgorICAgLXQgTiAo SGlzdG9yaWNhbCkgWG9uIChDdHJsLVEpIFR1cm5hcm91bmQgY2hhcmFjdGVyIGZvciBoYWxmLWR1 cGxleAorICAgY29ubmVjdGlvbnMgKHVzZWQgb24gc2VyaWFsIGxpbmVtb2RlIGNvbm5lY3Rpb25z IHRvIG9sZCBtYWluZnJhbWVzKS4KKyAgIEVxdWl2YWxlbnQgdG8gU0VUIERVUExFWCBIQUxGLCBT RVQgSEFORFNIQUtFIFhPTi4KKyAgIC12IGFyZyBOIFdpbmRvdyBzaXplIGZvciBLZXJtaXQgcHJv dG9jb2wgKGlnbm9yZWQgd2hlbiBzdHJlYW1pbmcpLgorICAgRXF1aXZhbGVudCB0byBTRVQgV0lO RE9XLVNJWkUuCisgICBBcmd1bWVudDogTnVtYmVyLCAxIHRvIDMyLgorICAgLXcgTiBJbmNvbWlu ZyBmaWxlcyBXcml0ZSBvdmVyIGV4aXN0aW5nIGZpbGVzLiBFcXVpdmFsZW50IHRvIFNFVCBGSUxF CisgICBDT0xMSVNJT04gT1ZFUldSSVRFLgorICAgLXggWSBFbnRlciBzZXJ2ZXIgbW9kZS4gRXF1 aXZhbGVudCB0byB0aGUgU0VSVkVSIGNvbW1hbmQuIEFsc28gc2VlOiAtTy4KKyAgIC15IGFyZyBO IEFsdGVybmF0aXZlIGluaXRpYWxpemF0aW9uIGZpbGUuCisgICBBcmd1bWVudDogRmlsZW5hbWUu CisgICAteiBOIEZvcmNlIGZvcmVncm91bmQgYmVoYXZpb3IuIFRvIGJlIHVzZWQgaW4gY2FzZSBL ZXJtaXQgZG9lc24ndAorICAgYXV0b21hdGljYWxseSBzZW5zZSBpdHMgZm9yZWdyb3VuZCBzdGF0 dXMuIEVxdWl2YWxlbnQgdG8gdGhlIFNFVAorICAgQkFDS0dST1VORCBPRkYgY29tbWFuZC4KKwor ICAgRXh0ZW5kZWQgY29tbWFuZC1saW5lIG9wdGlvbnMgKG5lY2Vzc2FyeSBiZWNhdXNlIHNpbmds ZS1sZXR0ZXIgb25lcyBhcmUKKyAgIGFib3V0IHVzZWQgdXApIHN0YXJ0IHdpdGggdHdvIGRhc2hl cyAoLS0pLCB3aXRoIHdvcmRzIHJhdGhlciB0aGFuCisgICBzaW5nbGUgbGV0dGVycyBhcyBvcHRp b24gbmFtZXMuIElmIGFuIGV4dGVuZGVkIG9wdGlvbiB0YWtlcyBhbgorICAgYXJndW1lbnQsIGl0 IGlzIHNlcGFyYXRlZCBmcm9tIHRoZSBvcHRpb24gd29yZCBieSBhIGNvbG9uICg6KS4gRXh0ZW5k ZWQKKyAgIG9wdGlvbnMgaW5jbHVkZToKKworICAgT3B0aW9uIERlc2NyaXB0aW9uCisgICAtLWJh bm5lcmZpbGU6ZmlsZW5hbWUgRmlsZSB0byBkaXNwbGF5IHVwb24gc3RhcnR1cCBvciBJS1NEIGxv Z2luLgorICAgLS1jZGZpbGU6ZmlsZW5hbWUgRmlsZSB0byBiZSBzZW50IGZvciBkaXNwbGF5IHRv IHRoZSBjbGllbnQgd2hlbiBzZXJ2ZXIKKyAgIGNoYW5nZXMgZGlyZWN0b3J5IChmaWxlbmFtZSBp cyByZWxhdGl2ZSB0byB0aGUgY2hhbmdlZC10byBkaXJlY3RvcnkpLgorICAgLS1jZG1lc3NhZ2U6 e29uLG9mZn0gRW5hYmxlL2Rpc2FibGUgdGhlIHNlcnZlciBDRCBtZXNzYWdlIGZlYXR1cmUuCisg ICAtLWhlbHAgUHJpbnRzIHVzYWdlIG1lc3NhZ2UgZm9yIGV4dGVuZGVkIG9wdGlvbnMuCisgICAt LWhlbHBmaWxlOmZpbGVuYW1lIERlc2lnbmF0ZXMgYSBmaWxlIGNvbnRhaW5pbmcgY3VzdG9tIHRl eHQgdG8gcmVwbGFjZQorICAgdGhlIHRvcC1sZXZlbCBIRUxQIGNvbW1hbmQuCisgICAtLW5vaW50 ZXJydXB0cyBEaXNhYmxlcyBrZXlib2FyZCBpbnRlcnJ1cHRzLgorICAgLS1ub3Blcm1zIERpc2Fi bGVzIHRoZSBLZXJtaXQgcHJvdG9jb2wgZmlsZSBQZXJtaXNzaW9ucyBhdHRyaWJ1dGUsIHRvCisg ICBwcmV2ZW50IHRyYW5zbWlzc2lvbiBvZiBmaWxlIHBlcm1pc3Npb25zIChwcm90ZWN0aW9uKSBm cm9tIHNlbmRlciB0bworICAgcmVjZWl2ZXIuCisKKyAgIFBsdXMgc2V2ZXJhbCBvdGhlciBbNjld SUtTRC1Pbmx5IG9wdGlvbnMuCisKKyAgIFNlZSB0aGUgWzcwXWZpbGUtdHJhbnNmZXIgc2VjdGlv biBmb3IgZXhhbXBsZXMgb2YgY29tbWFuZC1saW5lCisgICBpbnZvY2F0aW9uLgorCitDT01NQU5E IExBTkdVQUdFCisKKyAgIFs3MV1Ub3AgWzcyXUNvbnRlbnRzIFs3M11OZXh0IFs3NF1QcmV2aW91 cworCisgICAgICogWzc1XUNvbW1hbmQgRmlsZXMsIE1hY3JvcywgYW5kIFNjcmlwdHMKKyAgICAg KiBbNzZdQ29tbWFuZCBMaXN0CisKKyAgIEMtS2VybWl0J3MgaW50ZXJhY3RpdmUgY29tbWFuZCBs YW5ndWFnZSBpcyB0aGUgc3ViamVjdCBvZiBhCisgICBbNzddNjIyLXBhZ2UgYm9vayBhbmQgYW5v dGhlciBzZXZlcmFsIGh1bmRyZWQgcGFnZXMgb2YgdXBkYXRlcywgZmFyIHRvbworICAgbXVjaCBm b3IgYSBtYW51YWwgcGFnZS4gQnV0IGl0J3Mgbm90IGhhcmQgdG8gZ2V0IHN0YXJ0ZWQuIEF0IHRo ZSBzaGVsbAorICAgcHJvbXB0LCBqdXN0IHR5cGUgImtlcm1pdCIgdG8gZ2V0IEMtS2VybWl0J3Mg aW50ZXJhY3RpdmUgY29tbWFuZAorICAgcHJvbXB0OgorCisgICQga2VybWl0CisgICgvY3VycmVu dC9kaXJlY3RvcnkpIEMtS2VybWl0PgorCisgICBCZWdpbiBieSB0eXBpbmcgImhlbHAiIChhbmQg dGhlbiBwcmVzcyB0aGUgUmV0dXJuIG9yIEVudGVyIGtleSkgZm9yIGEKKyAgIHRvcC1sZXZlbCBv dmVydmlldywgcmVhZCBpdCwgYW5kIGdvIGZyb20gdGhlcmUuIFlvdXIgc2Vjb25kIGNvbW1hbmQK KyAgIHNob3VsZCBwcm9iYWJseSBiZSAiaW50cm8iIChpbnRyb2R1Y3Rpb24pLiBOb3RlIHRoZSBw cm9tcHQgc2hvd3MgeW91cgorICAgY3VycmVudCBkaXJlY3RvcnkgKHVubGVzcyB5b3UgdGVsbCBL ZXJtaXQgdG8gcHJvbXB0IHlvdSB3aXRoIHNvbWV0aGluZworICAgZWxzZSkuCisKKyAgIEludGVy YWN0aXZlIGNvbW1hbmRzIGFyZSBjb21wb3NlZCBtYWlubHkgb2YgcmVndWxhciBFbmdsaXNoIHdv cmRzLAorICAgdXN1YWxseSBpbiB0aGUgZm9ybSBvZiBpbXBlcmF0aXZlIHNlbnRlbmNlcywgc3Vj aCBhczoKKworICBzZW5kIG9vZmEudHh0CisKKyAgIHdoaWNoIHRlbGxzIEtlcm1pdCB0byBzZW5k ICh0cmFuc2ZlcikgdGhlIGZpbGUgd2hvc2UgbmFtZSBpcyBvb2ZhLnR4dCwKKyAgIG9yOgorCisg IHNldCB0cmFuc2ZlciBtb2RlIGF1dG9tYXRpYworCisgICB3aGljaCBzZXRzIEtlcm1pdCdzICJ0 cmFuc2ZlciBtb2RlIiB0byAiYXV0b21hdGljIiAod2hhdGV2ZXIgdGhhdAorICAgbWVhbnMpLgor CisgICBXaGlsZSB0eXBpbmcgY29tbWFuZHMsIHlvdSBjYW4gYWJicmV2aWF0ZSwgYXNrIGZvciBo ZWxwIChieSBwcmVzc2luZworICAgdGhlICI/IiBrZXkgYW55d2hlcmUgaW4gYSBjb21tYW5kKSwg Y29tcGxldGUga2V5d29yZHMgb3IgZmlsZW5hbWVzCisgICAod2l0aCB0aGUgVGFiIG9yIEVzYyBr ZXkpLCBhbmQgZWRpdCB5b3VyIHR5cGluZyB3aXRoIEJhY2tzcGFjZSBvcgorICAgRGVsZXRlLCBD dHJsLVcsIEN0cmwtVSwgZXRjLiBZb3UgY2FuIGFsc28gcmVjYWxsIHByZXZpb3VzIGNvbW1hbmRz LAorICAgc2F2ZSB5b3VyIGNvbW1hbmQgaGlzdG9yeSwgYW5kIHdobyBrbm93cyB3aGF0IGVsc2Uu IEdpdmUgdGhlIElOVFJPCisgICBjb21tYW5kIGZvciBkZXRhaWxzLgorCisgICBDLUtlcm1pdCBo YXMgaHVuZHJlZHMgb2YgY29tbWFuZHMsIGFuZCB0aGV5IGNhbiBiZSBpc3N1ZWQgaW4gaW5maW5p dGUKKyAgIHZhcmlldHkgYW5kIGNvbWJpbmF0aW9ucywgaW5jbHVkaW5nIGNvbW1hbmRzIGZvcjoK KworICAgICAqIE1ha2luZyBjb25uZWN0aW9ucyAoU0VUIExJTkUsIERJQUwsIFRFTE5FVCwgU1NI LCBGVFAsIENPTk5FQ1QsIC4uLikKKyAgICAgKiBCcmVha2luZyBjb25uZWN0aW9ucyAoSEFOR1VQ LCBDTE9TRSkKKyAgICAgKiBUcmFuc2ZlcnJpbmcgZmlsZXMgKFNFTkQsIEdFVCwgUkVDRUlWRSwg TU9WRSwgUkVTRU5ELCAuLi4pCisgICAgICogRXN0YWJsaXNoaW5nIHByZWZlcmVuY2VzIChTRVQp CisgICAgICogRGlzcGxheWluZyBwcmVmZXJlbmNlcyAoU0hPVykKKyAgICAgKiBNYW5hZ2luZyBs b2NhbCBmaWxlcyAoQ0QsIERFTEVURSwgTUtESVIsIERJUkVDVE9SWSwgUkVOQU1FLCBUWVBFLAor ICAgICAgIC4uLikKKyAgICAgKiBNYW5hZ2luZyByZW1vdGUgZmlsZXMgKFJDRCwgUkRFTCwgUk1L RElSLCBSRElSLCAuLi4pCisgICAgICogVXNpbmcgbG9jYWwgZmlsZXMgKEZPUEVOLCBGQ0xPU0Us IEZSRUFELCBGV1JJVEUpCisgICAgICogUHJvZ3JhbW1pbmcgKFRBS0UsIERFRklORSwgSUYsIEZP UiwgV0hJTEUsIFNXSVRDSCwgREVDTEFSRSwgLi4uKQorICAgICAqIEludGVyYWN0aW5nIHdpdGgg dGhlIHVzZXIgKEVDSE8sIEFTSywgLi4uKQorICAgICAqIEludGVyYWN0aW5nIHdpdGggYSByZW1v dGUgY29tcHV0ZXIgKElOUFVULCBPVVRQVVQsIC4uLikKKyAgICAgKiBJbnRlcmFjdGluZyB3aXRo IGxvY2FsIHByb2dyYW1zIChSVU4sIEVYRUMsIFBUWSwgLi4uKQorICAgICAqIExvZ2dpbmcgdGhp bmdzIChMT0cgU0VTU0lPTiwgTE9HIFBBQ0tFVFMsIExPRyBERUJVRywgLi4uKQorCisgICBBbmQg b2YgY291cnNlIFFVSVQgb3IgRVhJVCB0byBnZXQgb3V0IGFuZCBIRUxQIHRvIGdldCBoZWxwLCBh bmQgZm9yCisgICBwcm9ncmFtbWVyczogbG9vcHMsIGRlY2lzaW9uIG1ha2luZywgdmFyaWFibGVz LCBhcnJheXMsIGFzc29jaWF0aXZlCisgICBhcnJheXMsIGludGVnZXIgYW5kIGZsb2F0aW5nIHBv aW50IGFyaXRobWV0aWMsIG1hY3JvcywgYnVpbHQtaW4gYW5kCisgICB1c2VyLWRlZmluZWQgZnVu Y3Rpb25zLCBzdHJpbmcgbWFuaXB1bGF0aW9uLCBwYXR0ZXJuIG1hdGNoaW5nLCBibG9jaworICAg c3RydWN0dXJlLCBzY29waW5nLCByZWN1cnNpb24sIGFuZCBhbGwgdGhlIHJlc3QuIFRvIGdldCBh IGxpc3Qgb2YgYWxsCisgICBDLUtlcm1pdCdzIGNvbW1hbmRzLCB0eXBlIGEgcXVlc3Rpb24gbWFy ayAoPykgYXQgdGhlIHByb21wdC4gVG8gZ2V0IGEKKyAgIGRlc2NyaXB0aW9uIG9mIGFueSBjb21t YW5kLCB0eXBlIEhFTFAgZm9sbG93ZWQgYnkgdGhlIG5hbWUgb2YgdGhlCisgICBjb21tYW5kLCBm b3IgZXhhbXBsZToKKworICBoZWxwIHNlbmQKKworICAgVGhlIGNvbW1hbmQgaW50ZXJydXB0aW9u IGNoYXJhY3RlciBpcyBDdHJsLUMgKGhvbGQgZG93biB0aGUgQ3RybCBrZXkKKyAgIGFuZCBwcmVz cyB0aGUgQyBrZXkpLgorCisgICBUaGUgY29tbWFuZCBsYW5ndWFnZSAiZXNjYXBlIGNoYXJhY3Rl ciIsIHVzZWQgdG8gaW50cm9kdWNlIHZhcmlhYmxlCisgICBuYW1lcywgZnVuY3Rpb24gaW52b2Nh dGlvbnMsIGFuZCBzbyBvbiwgaXMgYmFja3NsYXNoIChcKS4gSWYgeW91IG5lZWQKKyAgIHRvIGlu Y2x1ZGUgYSBsaXRlcmFsIGJhY2tzbGFzaCBpbiBhIGNvbW1hbmQsIHR5cGUgdHdvIG9mIHRoZW0s IGUuZy46CisKKyAgZ2V0IGM6XFxrOTVcXGs5NWN1c3RvbS5pbmkKKworQ29tbWFuZCBGaWxlcywg TWFjcm9zLCBhbmQgU2NyaXB0cworCisgICBBIGZpbGUgY29udGFpbmluZyBLZXJtaXQgY29tbWFu ZHMgaXMgY2FsbGVkIGEgS2VybWl0IGNvbW1hbmQgZmlsZSBvcgorICAgS2VybWl0IHNjcmlwdC4g SXQgY2FuIGJlIGV4ZWN1dGVkIHdpdGggS2VybWl0J3MgVEFLRSBjb21tYW5kOgorCisgICgvY3Vy cmVudC9kaXIpIEMtS2VybWl0PiB0YWtlIGNvbW1hbmRmaWxlCisKKyAgICh3aGVyZSAiY29tbWFu ZGZpbGUiIGlzIHRoZSBuYW1lIG9mIHRoZSBjb21tYW5kIGZpbGUpLiBQbGVhc2UgZG9uJ3QKKyAg IHBpcGUgYSBjb21tYW5kIGZpbGUgaW50byBLZXJtaXQncyBzdGFuZGFyZCBpbnB1dCAod2hpY2gg bWlnaHQgb3IgbWlnaHQKKyAgIG5vdCB3b3JrKTsgaWYgeW91IGhhdmUgS2VybWl0IGNvbW1hbmRz IGluIGEgZmlsZSwgdGVsbCBLZXJtaXQgdG8gVEFLRQorICAgdGhlIGZpbGUuCisKKyAgIEluIFVu aXggb25seSwgYSBLZXJtaXQgY29tbWFuZCBmaWxlIGNhbiBhbHNvIGJlIGV4ZWN1dGVkIGRpcmVj dGx5IGJ5CisgICBpbmNsdWRpbmcgYSAia2VyYmFuZyIgbGluZSBhcyB0aGUgZmlyc3QgbGluZSBv ZiB0aGUgZmlsZToKKworICAjIS91c3IvbG9jYWwvYmluL2tlcm1pdCArCisKKyAgIFRoYXQgaXMs IGEgdG9wIGxpbmUgdGhhdCBzdGFydHMgd2l0aCAiIyEiLCBmb2xsb3dlZCBpbW1lZGlhdGVseSBi eSB0aGUKKyAgIGZ1bGwgcGF0aCBvZiB0aGUgS2VybWl0IGV4ZWN1dGFibGUsIGFuZCB0aGVuLCBp ZiB0aGUgS2VybWl0IHNjcmlwdCBpcworICAgdG8gYmUgZ2l2ZW4gYXJndW1lbnRzIG9uIHRoZSBj b21tYW5kIGxpbmUsIGEgc3BhY2UgYW5kIGEgcGx1cyBzaWduLiBUaGUKKyAgIHNjcmlwdCBmaWxl IG11c3QgYWxzbyBoYXZlIGV4ZWN1dGUgcGVybWlzc2lvbjoKKworICBjaG1vZCAreCBjb21tYW5k ZmlsZQorCisgICBFeGNlcHQgZm9yIHRoZSAiICsiIHBhcnQsIHRoaXMgaXMgZXhhY3RseSB0aGUg c2FtZSBhcyB5b3Ugd291bGQgZG8gZm9yCisgICBhIHNoZWxsIHNjcmlwdCwgYSBQZXJsIHNjcmlw dCwgZXRjLiBIZXJlJ3MgYSBzaW1wbGUgYnV0IHVzZWxlc3MgZXhhbXBsZQorICAgc2NyaXB0IHRo YXQgcmVndXJnaXRhdGVzIGl0cyBhcmd1bWVudHMgKHVwIHRvIHRocmVlIG9mIHRoZW0pOgorCisg ICMhL3Vzci9sb2NhbC9iaW4va2VybWl0ICsKKyAgaWYgZGVmaW5lZCBcJTEgZWNobyAiQXJndW1l bnQgMTogXCUxIgorICBpZiBkZWZpbmVkIFwlMiBlY2hvICJBcmd1bWVudCAyOiBcJTIiCisgIGlm IGRlZmluZWQgXCUzIGVjaG8gIkFyZ3VtZW50IDM6IFwlMyIKKyAgaWYgZGVmaW5lZCBcJTQgZWNo byAiZXRjLi4uIgorICBleGl0CisKKyAgIElmIHRoaXMgZmlsZSBpcyBzdG9yZWQgaW4geW91ciBj dXJyZW50IGRpcmVjdG9yeSBhcyAiY29tbWFuZGZpbGUiLAorICAgdGhlbjoKKworICAuL2NvbW1h bmRmaWxlIG9uZSB0d28gdGhyZWUgZm91ciBmaXZlCisKKyAgIHByaW50czoKKworICBBcmd1bWVu dCAxOiBvbmUKKyAgQXJndW1lbnQgMjogdHdvCisgIEFyZ3VtZW50IDM6IHRocmVlCisgIGV0Yy4u LgorCisgICBUaGlzIGlsbHVzdHJhdGVzIHRoZSBiYXNpYyBzdHJ1Y3R1cmUgb2YgYSBzdGFuZGFs b25lIEtlcm1pdCBzY3JpcHQ6IHRoZQorICAgImtlcmJhbmcgbGluZSIsIHRoZW4gc29tZSBjb21t YW5kcy4gSXQgc2hvdWxkIGVuZCB3aXRoICJleGl0IiB1bmxlc3MKKyAgIHlvdSB3YW50IHRoZSBL ZXJtaXQgcHJvbXB0IHRvIGFwcGVhciB3aGVuIGl0IGlzIGZpbmlzaGVkLiBcJTEgaXMgdGhlCisg ICBmaXJzdCBhcmd1bWVudCwgXCUyIHRoZSBzZWNvbmQsIGFuZCBzbyBvbi4KKworICAgWW91IGNh biBhbHNvIGNyZWF0ZSB5b3VyIG93biBjb21tYW5kcyBieSBkZWZpbmluZyBuYW1lZCBtYWNyb3Mg Y29tcG9zZWQKKyAgIG9mIG90aGVyIEtlcm1pdCBjb21tYW5kcyAob3IgbWFjcm9zKS4gSGVyZSdz IGEgc2ltcGxlIGV4YW1wbGU6CisKKyAgZGVmaW5lIG15ZGlhbCB7CisgICAgICBzZXQgbW9kZW0g dHlwZSB1c3JvYm90aWNzCisgICAgICBzZXQgcG9ydCAvZGV2L3R0eVMwCisgICAgICBpZiBmYWls IGVuZCAxCisgICAgICBzZXQgc3BlZWQgNTc2MDAKKyAgICAgIGRpYWwgXCUxCisgICAgICBpZiBz dWNjZXNzIGNvbm5lY3QKKyAgfQorCisgICBUaGlzIHNob3dzIGhvdyB5b3UgY2FuIGNvbWJpbmUg bWFueSBjb21tYW5kcyBpbnRvIG9uZSBjb21tYW5kLCAibXlkaWFsIgorICAgaW4gdGhpcyBjYXNl ICh5b3UgY2FuIHVzZSBhbnkgbmFtZSB5b3UgbGlrZSwgcHJvdmlkZWQgaXQgZG9lcyBub3QgY2xh c2gKKyAgIHdpdGggdGhlIG5hbWUgb2YgYSBidWlsdC1pbiBjb21tYW5kKS4gV2hlbiB0aGlzIG1h Y3JvIGRlZmluaXRpb24gaXMgaW4KKyAgIGVmZmVjdCwgeW91IGNhbiB0eXBlIGNvbW1hbmRzIGxp a2U6CisKKyAgbXlkaWFsIDc2NTQzMjEKKworICAgYW5kIGl0IGV4ZWN1dGVzIGFsbCB0aGUgY29t bWFuZHMgaW4gbWFjcm8gZGVmaW5pdGlvbiwgc3Vic3RpdHV0aW5nIHRoZQorICAgZmlyc3Qgb3Bl cmFuZCAoIjc2NTQzMjEiKSBmb3IgdGhlIGZvcm1hbCBwYXJhbWV0ZXIgKCJcJTEiKSBpbiB0aGUK KyAgIGRlZmluaXRpb24uIFRoaXMgc2F2ZXMgeW91IGZyb20gaGF2aW5nIHRvIHR5cGUgbG90cyBv ZiBjb21tYW5kcyBldmVyeQorICAgdGltZSB5b3Ugd2FudCB0byBtYWtlIGEgbW9kZW0gY2FsbC4K KworICAgT25lIHdheSB0byBoYXZlIHRoZSBtYWNybyBkZWZpbml0aW9uIGluIGVmZmVjdCBpcyB0 byB0eXBlIHRoZQorICAgZGVmaW5pdGlvbiBhdCB0aGUgS2VybWl0IHByb21wdC4gQW5vdGhlciB3 YXkgaXMgdG8gc3RvcmUgdGhlIGRlZmluaXRpb24KKyAgIGluIGEgZmlsZSBhbmQgVEFLRSB0aGUg ZmlsZS4gSWYgeW91IHdhbnQgdGhlIGRlZmluaXRpb24gdG8gYmUgaW4gZWZmZWN0CisgICBhdXRv bWF0aWNhbGx5IGV2ZXJ5IHRpbWUgeW91IHN0YXJ0IEtlcm1pdCwgcHV0IHRoZSBkZWZpbml0aW9u IGluIHlvdXIKKyAgIGluaXRpYWxpemF0aW9uIG9yIGN1c3RvbWl6YXRpb24gZmlsZSAoZXhwbGFp bmVkIFs3OF1iZWxvdykuCisKKyAgIEhlcmUncyBhIHNvbWV3aGF0IG1vcmUgYW1iaXRpb3VzIGV4 YW1wbGU6CisKKyAgZGVmaW5lIG15ZGVsZXRlIHsKKyAgICAgIGxvY2FsIHRyYXNoCisgICAgICBh c3NpZ24gdHJhc2ggXHYoaG9tZSl0cmFzaGNhbi8KKyAgICAgIGlmIG5vdCBkZWZpbmVkIFwlMSBl bmQgMSAiRGVsZXRlIHdoYXQ/IgorICAgICAgaWYgd2lsZCBcJTEgZW5kIDEgIkRlbGV0aW5nIG11 bHRpcGxlIGZpbGVzIGlzIHRvbyBzY2FyeSIKKyAgICAgIGlmIG5vdCBleGlzdCBcJTEgZW5kIDEg IkkgY2FuJ3QgZmluZCBcJTEiCisgICAgICBpZiBub3QgZGlyZWN0b3J5IFxtKHRyYXNoKSB7Cisg ICAgICAgICAgbWtkaXIgXG0odHJhc2gpCisgICAgICAgICAgaWYgZmFpbCBlbmQgMSAiTm8gdHJh c2ggY2FuIgorICAgICAgfQorICAgICAgcmVuYW1lIC9saXN0IFwlMSBcbSh0cmFzaCkKKyAgfQor ICBkZWZpbmUgbXl1bmRlbGV0ZSB7CisgICAgICBsb2NhbCB0cmFzaAorICAgICAgYXNzaWduIHRy YXNoIFx2KGhvbWUpdHJhc2hjYW4vCisgICAgICBpZiBub3QgZGVmaW5lZCBcJTEgZW5kIDEgIlVu ZGVsZXRlIHdoYXQ/IgorICAgICAgaWYgd2lsZCBcJTEgZW5kIDEgIlVuZGVsZXRpbmcgbXVsdGlw bGUgZmlsZXMgaXMgdG9vIGhhcmQiCisgICAgICBpZiBub3QgZGlyZWN0b3J5IFxtKHRyYXNoKSBl bmQgMSAiTm8gdHJhc2ggY2FuIgorICAgICAgaWYgbm90IGV4aXN0IFxtKHRyYXNoKVwlMSBlbmQg MSAiSSBjYW4ndCBmaW5kIFwlMSBpbiB0cmFzaCBjYW4iCisgICAgICByZW5hbWUgL2xpc3QgXG0o dHJhc2gpXCUxIC4KKyAgfQorCisgICBUaGVzZSBtYWNyb3MgYXJlIG5vdCBleGFjdGx5IHByb2R1 Y3Rpb24gcXVhbGl0eSAodGhleSBkb24ndCBoYW5kbGUKKyAgIGZpbGVuYW1lcyB0aGF0IGluY2x1 ZGUgcGF0aCBzZWdtZW50cywgdGhleSBkb24ndCBoYW5kbGUgbXVsdGlwbGUgZmlsZXMsCisgICBl dGMpLCBidXQgeW91IGdldCB0aGUgaWRlYTogeW91IGNhbiBwYXNzIGFyZ3VtZW50cyB0byBtYWNy b3MsIHRoZXkgY2FuCisgICBjaGVjayB0aGVtIGFuZCBtYWtlIG90aGVyIGtpbmRzIG9mIGRlY2lz aW9ucywgYW5kIHRoZSBjb21tYW5kcworICAgdGhlbXNlbHZlcyBhcmUgcmVsYXRpdmVseSBpbnR1 aXRpdmUgYW5kIGludGVsbGlnaWJsZS4KKworICAgSWYgeW91IHB1dCB0aGUgYWJvdmUgbGluZXMg aW50byB5b3VyIGluaXRpYWxpemF0aW9uIG9yIGN1c3RvbWl6YXRpb24KKyAgIGZpbGUsIHlvdSds bCBoYXZlIE1ZREVMRVRFIGFuZCBNWVVOREVMRVRFIGNvbW1hbmRzIGF2YWlsYWJsZSBldmVyeSB0 aW1lCisgICB5b3Ugc3RhcnQgS2VybWl0LCBhdCBsZWFzdCBhcyBsb25nIGFzIHlvdSBkb24ndCBz dXBwcmVzcyBleGVjdXRpb24gb2YKKyAgIHRoZSBpbml0aWFsaXphdGlvbiBmaWxlLiAoRXhlcmNp c2UgZm9yIHRoZSByZWFkZXI6IE1ha2UgdGhlc2UgbWFjcm9zCisgICBnZW5lcmFsbHkgdXNlZnVs OiByZW1vdmUgbGltaXRhdGlvbnMsIGFkZCB0cmFzaGNhbiBkaXNwbGF5LCBicm93c2luZywKKyAg IGVtcHR5aW5nLCBldGMuKQorCisgICBLZXJiYW5nIHNjcmlwdHMgZXhlY3V0ZSB3aXRob3V0IHRo ZSBpbml0aWFsaXphdGlvbiBmaWxlLiBUaGlzIHRvIGtlZXAKKyAgIHRoZW0gcG9ydGFibGUgYW5k IGFsc28gdG8gbWFrZSB0aGVtIHN0YXJ0IGZhc3Rlci4gSWYgeW91IHdhbnQgdG8gd3JpdGUKKyAg IEtlcmJhbmcgc2NyaXB0cyB0aGF0IGRlcGVuZCBvbiB0aGUgaW5pdGlhbGl6YXRpb24gZmlsZSwg aW5jbHVkZSB0aGUKKyAgIGNvbW1hbmQKKworICB0YWtlIFx2KGhvbWUpLmtlcm1yYworCisgICBh dCB0aGUgZGVzaXJlZCBzcG90IGluIHRoZSBzY3JpcHQuIEJ5IHRoZSB3YXksIFx2KHh4eCkgaXMg YSBidWlsdC1pbgorICAgdmFyaWFibGUgKHh4eCBpcyB0aGUgdmFyaWFibGUgbmFtZSwgImhvbWUi IGluIHRoaXMgY2FzZSkuIFRvIHNlZSB3aGF0CisgICBidWlsdC1pbiB2YXJpYWJsZXMgYXJlIGF2 YWlsYWJsZSwgdHlwZSAic2hvdyB2YXJpYWJsZXMiIGF0IHRoZSBDLUtlcm1pdAorICAgcHJvbXB0 LiBUbyBzZWUgd2hhdCBlbHNlIHlvdSBjYW4gc2hvdywgdHlwZSAic2hvdyA/Ii4gXG0oeHh4KSBp cyBhIHVzZXIKKyAgIGRlZmluZWQgdmFyaWFibGUgKHN0cmljdGx5IHNwZWFraW5nLCBpdCBpcyBh IG1hY3JvIHVzZWQgYXMgYSB2YXJpYWJsZSkuCisKK0NvbW1hbmQgTGlzdAorCisgICBDLUtlcm1p dCBoYXMgbW9yZSB0aGFuIDIwMCB0b3AtbGV2ZWwgY29tbWFuZHMsIGFuZCBzb21lIG9mIHRoZXNl LCBzdWNoCisgICBhcyBTRVQsIGJyYW5jaCBvZmYgaW50byBodW5kcmVkcyBvZiBzdWJjb21tYW5k cyBvZiB0aGVpciBvd24sIHNvIGl0J3MKKyAgIG5vdCBwcmFjdGljYWwgdG8gZGVzY3JpYmUgdGhl bSBhbGwgaGVyZS4gSW5zdGVhZCwgaGVyZSdzIGEgY29uY2lzZSBsaXN0CisgICBvZiB0aGUgbW9z dCBjb21tb25seSB1c2VkIHRvcC1sZXZlbCBjb21tYW5kcywgZ3JvdXBlZCBieSBjYXRlZ29yeS4g VG8KKyAgIGxlYXJuIGFib3V0IGVhY2ggY29tbWFuZCwgdHlwZSAiaGVscCIgZm9sbG93ZWQgYnkg dGhlIGNvbW1hbmQgbmFtZSwKKyAgIGUuZy4gImhlbHAgc2V0Ii4gVGVybXMgc3VjaCBhcyBDb21t YW5kIHN0YXRlIGFuZCBDb25uZWN0IHN0YXRlIGFyZQorICAgZXhwbGFpbmVkIGluIHN1YnNlcXVl bnQgc2VjdGlvbnMuCisKKyAgIE9wdGlvbmFsIGZpZWxkcyBhcmUgc2hvd24gaW4gWyBpdGFsaWNp emVkIGJyYWNrZXRzIF0uIGZpbGVuYW1lIG1lYW5zCisgICB0aGUgbmFtZSBvZiBhIHNpbmdsZSBm aWxlLiBmaWxlc3BlYyBtZWFucyBhIGZpbGUgc3BlY2lmaWNhdGlvbiB0aGF0IGlzCisgICBhbGxv d2VkIHRvIGNvbnRhaW4gd2lsZGNhcmQgY2hhcmFjdGVycyBsaWtlICcqJyB0byBtYXRjaCBncm91 cHMgb2YKKyAgIGZpbGVzLiBvcHRpb25zIGFyZSAob3B0aW9uYWwpIHN3aXRjaGVzIGxpa2UgL1BB R0UsIC9OT1BBR0UsIC9RVUlFVCwKKyAgIGV0YywgbGlzdGVkIGluIHRoZSBIRUxQIHRleHQgZm9y IGVhY2ggY29tbWFuZC4gRXhhbXBsZToKKworICBzZW5kIC9yZWN1cnNpdmUgL2xhcmdlcjoxMDAw MCAvYWZ0ZXI6LTF3ZWVrIC9leGNlcHQ6Ki50eHQgKgorCisgICB3aGljaCBjYW4gYmUgcmVhZCBh cyAic2VuZCBhbGwgdGhlIGZpbGVzIGluIHRoaXMgZGlyZWN0b3J5IGFuZCBhbGwgdGhlCisgICBv bmVzIHVuZGVybmVhdGggaXQgdGhhdCBhcmUgbGFyZ2VyIHRoYW4gMTAwMDAgYnl0ZXMsIG5vIG1v cmUgdGhhbiBvbmUKKyAgIHdlZWsgb2xkLCBhbmQgd2hvc2UgbmFtZXMgZG9uJ3QgZW5kIHdpdGgg Ii50eHQiLgorCisgICBCYXNpYyBDb21tYW5kcworCisgICBIRUxQIFJlcXVlc3RzIHRvcC1sZXZl bCBoZWxwLgorICAgSEVMUCBjb21tYW5kIFJlcXVlc3RzIGhlbHAgYWJvdXQgdGhlIGdpdmVuIGNv bW1hbmQuCisgICBJTlRST0RVQ1RJT04gUmVxdWVzdHMgYSBicmllZiBpbnRyb2R1Y3Rpb24gdG8g Qy1LZXJtaXQuCisgICBMSUNFTlNFIERpc3BsYXlzIHRoZSBDLUtlcm1pdCBzb2Z0d2FyZSBjb3B5 cmlnaHQgYW5kIGxpY2Vuc2UuCisgICBWRVJTSU9OIERpc3BsYXlzIEMtS2VybWl0J3MgdmVyc2lv biBudW1iZXIuCisgICBFWElUIFsgbnVtYmVyIF0gRXhpdHMgZnJvbSBLZXJtaXQgd2l0aCB0aGUg Z2l2ZW4gc3RhdHVzIGNvZGUuIFN5bm9ueW1zOgorICAgUVVJVCwgRSwgUS4KKyAgIFRBS0UgZmls ZW5hbWUgWyBwYXJhbWV0ZXJzLi4uIF0gRXhlY3V0ZXMgY29tbWFuZHMgZnJvbSB0aGUgZ2l2ZW4g ZmlsZS4KKyAgIExPRyBpdGVtIFsgZmlsZW5hbWUgXSBLZWVwcyBhIGxvZyBvZiB0aGUgZ2l2ZW4g aXRlbSBpbiB0aGUgZ2l2ZW4gZmlsZS4KKyAgIFsgRE8gXSBtYWNybyBbIHBhcmFtZXRlcnMuLi4g XSAgICBFeGVjdXRlcyBjb21tYW5kcyBmcm9tIHRoZSBnaXZlbgorICAgbWFjcm8uCisgICBTRVQg cGFyYW1ldGVyIHZhbHVlIFNldHMgdGhlIGdpdmVuIHBhcmFtZXRlciB0byB0aGUgZ2l2ZW4gdmFs dWUuCisgICBTSE9XIGNhdGVnb3J5IFNob3dzIHNldHRpbmdzIGluIGEgZ2l2ZW4gY2F0ZWdvcnku CisgICBTVEFUVVMgVGVsbHMgd2hldGhlciBwcmV2aW91cyBjb21tYW5kIHN1Y2NlZWRlZCBvciBm YWlsZWQuCisgICBEQVRFIFsgZGF0ZS1hbmQvb3ItdGltZSBdIFNob3dzIGN1cnJlbnQgZGF0ZS10 aW1lIG9yIGludGVycHJldHMgZ2l2ZW4KKyAgIGRhdGUtdGltZS4KKyAgIFJVTiBbIGV4dGVybi1j b21tYW5kIFsgcGFyYW1ldGVycy4uLiBdIFJ1bnMgdGhlIGdpdmVuIGV4dGVybmFsIGNvbW1hbmQu CisgICBTeW5vbnltOiAhLgorICAgRVhFQyBbIGV4dGVybi1jb21tYW5kIFsgcGFyYW1zLi4uIF0g S2VybWl0IG92ZXJsYXlzIGl0c2VsZiB3aXRoIHRoZQorICAgZ2l2ZW4gY29tbWFuZC4KKyAgIFNV U1BFTkQgU3RvcHMgS2VybWl0IGFuZCBwdXRzIGl0IGluIHRoZSBiYWNrZ3JvdW5kLiBTeW5vbnlt OiBaLgorCisgICBMb2NhbCBGaWxlIE1hbmFnZW1lbnQKKworICAgVFlQRSBbIG9wdGlvbnMgXSBm aWxlbmFtZSBEaXNwbGF5cyB0aGUgY29udGVudHMgb2YgdGhlIGdpdmVuIGZpbGUuCisgICBNT1JF IFsgb3B0aW9ucyBdIGZpbGVuYW1lIEVxdWl2YWxlbnQgdG8gVFlQRSAvUEFHRSAocGF1c2UgYWZ0 ZXIgZWFjaAorICAgc2NyZWVuZnVsKS4KKyAgIENBVCBbIG9wdGlvbnMgXSBmaWxlbmFtZSBFcXVp dmFsZW50IHRvIFRZUEUgL05PUEFHRS4KKyAgIEhFQUQgWyBvcHRpb25zIF0gZmlsZW5hbWUgRGlz cGxheXMgdGhlIGZpcnN0IGZldyBsaW5lcyBvZiBhIGdpdmVuIGZpbGUuCisgICBUQUlMIFsgb3B0 aW9ucyBdIGZpbGVuYW1lIERpc3BsYXlzIHRoZSBsYXN0IGZldyBsaW5lcyBvZiBhIGdpdmVuIGZp bGUuCisgICBHUkVQIFsgb3B0aW9ucyBdIHBhdHRlcm4gZmlsZXNwZWMgRGlzcGxheXMgbGluZXMg ZnJvbSBmaWxlcyB0aGF0IG1hdGNoCisgICB0aGUgcGF0dGVybi4gU3lub255bTogRklORC4KKyAg IERJUkVDVE9SWSBbIG9wdGlvbnMgXSBbIGZpbGVzcGVjIF0gTGlzdHMgZmlsZXMgKGJ1aWx0LWlu LCBtYW55CisgICBvcHRpb25zKS4KKyAgIExTIFsgb3B0aW9ucyBdIFsgZmlsZXNwZWMgXSBMaXN0 cyBmaWxlcyAocnVucyBleHRlcm5hbCAibHMiIGNvbW1hbmQpLgorICAgREVMRVRFIFsgb3B0aW9u cyBdIFsgZmlsZXNwZWMgXSBEZWxldGVzIGZpbGVzLiBTeW5vbnltOiBSTS4KKyAgIFBVUkdFIFsg b3B0aW9ucyBdIFsgZmlsZXNwZWMgXSBSZW1vdmVzIGJhY2t1cCAoKi5+bn4pIGZpbGVzLgorICAg Q09QWSBbIG9wdGlvbnMgXSBbIGZpbGVzcGVjcy4uLiBdIENvcGllcyBmaWxlcy4gU3lub255bTog Q1AuCisgICBSRU5BTUUgWyBvcHRpb25zIF0gWyBmaWxlc3BlY3MuLi4gXSBSZW5hbWVzIGZpbGVz LiBTeW5vbnltOiBNVi4KKyAgIENITU9EIFsgb3B0aW9ucyBdIFsgZmlsZXNwZWNzLi4uIF0gQ2hh bmdlcyBwZXJtaXNzaW9ucyBvZiBmaWxlcy4KKyAgIFRSQU5TTEFURSBmaWxlbmFtZSBjaGFyc2V0 cyBmaWxlbmFtZSBdIENvbnZlcnRzIGZpbGUncyBjaGFyYWN0ZXIgc2V0LgorICAgU3lub255bTog WExBVEUuCisgICBDRCBDaGFuZ2VzIHlvdXIgd29ya2luZyBkaXJlY3RvcnkgdG8geW91ciBob21l IGRpcmVjdG9yeS4KKyAgIENEIGRpcmVjdG9yeSBDaGFuZ2VzIHlvdXIgd29ya2luZyBkaXJlY3Rv cnkgdG8gdGhlIG9uZSBnaXZlbi4KKyAgIENEVVAgQ2hhbmdlcyB5b3VyIHdvcmtpbmcgZGlyZWN0 b3J5IG9uZSBsZXZlbCB1cC4KKyAgIFBXRCBEaXNwbGF5cyB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5 LgorICAgQkFDSyBSZXR1cm5zIHRvIHlvdXIgcHJldmlvdXMgd29ya2luZyBkaXJlY3RvcnkuCisg ICBNS0RJUiBbIGRpcmVjdG9yeSBdIENyZWF0ZXMgYSBkaXJlY3RvcnkuCisgICBSTURJUiBbIGRp cmVjdG9yeSBdIFJlbW92ZXMgYSBkaXJlY3RvcnkuCisKKyAgIE1ha2luZyBDb25uZWN0aW9ucwor CisgICBTRVQgTElORSBbIG9wdGlvbnMgXSBkZXZpY2VuYW1lICAgICAgICBPcGVucyB0aGUgbmFt ZWQgc2VyaWFsIHBvcnQuCisgICBTeW5vbnltOiBTRVQgUE9SVC4KKyAgIE9QRU4gTElORSBbIG9w dGlvbnMgXSBkZXZpY2VuYW1lIFNhbWUgYXMgU0VUIExJTkUuIFN5bm9ueW06IE9QRU4gUE9SVC4K KyAgIFNFVCBNT0RFTSBUWVBFIFsgbmFtZSBdIFRlbGxzIEtlcm1pdCB3aGF0IGtpbmQgb2YgbW9k ZW0gaXMgb24gdGhlIHBvcnQuCisgICBESUFMIFsgbnVtYmVyIF0gVGVsbHMgS2VybWl0IHRvIGRp YWwgdGhlIGdpdmVuIHBob25lIG51bWJlciB3aXRoIHRoZQorICAgbW9kZW0uCisgICBSRURJQUwg UmVkaWFscyB0aGUgbW9zdCByZWNlbnRseSBkaWFsZWQgcGhvbmUgbnVtYmVyLgorICAgQU5TV0VS IFdhaXRzIGZvciBhbmQgYW5zd2VycyBhbiBpbmNvbWluZyBjYWxsIG9uIHRoZSBtb2RlbS4KKyAg IEFVVEhFTlRJQ0FURSBbIHBhcmFtZXRlcnMuLi4gXSBQZXJmb3JtcyBzZWN1cmUgYXV0aGVudGlj YXRpb24gb24gYQorICAgVENQL0lQIGNvbm5lY3Rpb24uCisgICBTRVQgTkVUV09SSyBUWVBFIHsg VENQL0lQLCBYLjI1LCAuLi4gfSBTZWxlY3RzIG5ldHdvcmsgdHlwZSBmb3IKKyAgIHN1YnNlcXVl bnQgU0VUIEhPU1QgY29tbWFuZHMuCisgICBTRVQgSE9TVCBbIG9wdGlvbnMgXSBob3N0IFsgcG9y dCBdIE9wZW5zIGEgbmV0d29yayBjb25uZWN0aW9uIHRvIHRoZQorICAgZ2l2ZW4gaG9zdCBhbmQg cG9ydC4KKyAgIFNFVCBIT1NUIFsgb3B0aW9ucyBdICogcG9ydCBXYWl0cyBmb3IgYW4gaW5jb21p bmcgVENQL0lQIGNvbm5lY3Rpb24gb24KKyAgIHRoZSBnaXZlbiBwb3J0LgorICAgVEVMTkVUIFsg b3B0aW9ucyBdIGhvc3QgT3BlbnMgYSBUZWxuZXQgY29ubmVjdGlvbiB0byB0aGUgaG9zdCBhbmQK KyAgIGVudGVycyBDb25uZWN0IHN0YXRlLgorICAgUkxPR0lOIFsgb3B0aW9ucyBdIGhvc3QgT3Bl bnMgYW4gUmxvZ2luIGNvbm5lY3Rpb24gdG8gdGhlIGhvc3QgYW5kCisgICBlbnRlcnMgQ29ubmVj dCBzdGF0ZS4KKyAgIElLU0QgWyBvcHRpb25zIF0gaG9zdCBPcGVucyBhIGNvbm5lY3Rpb24gdG8g YW4gSW50ZXJuZXQgS2VybWl0IFNlcnZpY2UuCisgICBTU0ggWyBvcHRpb25zIF0gaG9zdCBPcGVu cyBhbiBTU0ggY29ubmVjdGlvbiB0byB0aGUgaG9zdCBhbmQgZW50ZXJzCisgICBDb25uZWN0IHN0 YXRlLgorICAgRlRQIE9QRU4gaG9zdCBbIG9wdGlvbnMgXSBPcGVucyBhbiBGVFAgY29ubmVjdGlv biB0byB0aGUgaG9zdC4KKyAgIEhUVFAgWyBvcHRpb25zIF0gT1BFTiBob3N0IE9wZW5zIGFuIEhU VFAgY29ubmVjdGlvbiB0byB0aGUgaG9zdC4KKyAgIFBUWSBleHRlcm5hbC1jb21tYW5kIFJ1bnMg dGhlIGNvbW1hbmQgb24gYSBwc2V1ZG90ZXJtaW5hbCBhcyBpZiBpdCB3ZXJlCisgICBhIGNvbm5l Y3Rpb24uCisgICBQSVBFIGV4dGVybmFsLWNvbW1hbmQgUnVucyB0aGUgY29tbWFuZCB0aHJvdWdo IGEgcGlwZSBhcyBpZiBpdCB3ZXJlIGEKKyAgIGNvbm5lY3Rpb24uCisKKyAgIFVzaW5nIENvbm5l Y3Rpb25zCisKKyAgIENPTk5FQ1QgWyBvcHRpb25zIF0gICAgICAgICAgICAgICAgICAgIEVudGVy cyBDb25uZWN0ICh0ZXJtaW5hbCkgc3RhdGUuCisgICBTeW5vbnltOiBDLgorICAgUkVESVJFQ1Qg Y29tbWFuZCBSZWRpcmVjdHMgdGhlIGdpdmVuIGV4dGVybmFsIGNvbW1hbmQgb3ZlciB0aGUKKyAg IGNvbm5lY3Rpb24uCisgICBURUxPUFQgY29tbWFuZCBTZW5kcyBhIFRlbG5ldCBwcm90b2NvbCBj b21tYW5kIChUZWxuZXQgY29ubmVjdGlvbnMKKyAgIG9ubHkpLgorICAgQ3RybC1cQyAiRXNjYXBl cyBiYWNrIiBmcm9tIENvbm5lY3Qgc3RhdGUgdG8gQ29tbWFuZCBzdGF0ZS4KKyAgIEN0cmwtXEIg KEluIENvbm5lY3Qgc3RhdGUpIFNlbmRzIGEgQlJFQUsgc2lnbmFsIChzZXJpYWwgb3IgVGVsbmV0 KS4KKyAgIEN0cmwtXCEgKEluIENvbm5lY3Qgc3RhdGUpIEVudGVycyBpbmZlcmlvciBzaGVsbDsg ImV4aXQiIHRvIHJldHVybi4KKyAgIEN0cmwtXD8gKEluIENvbm5lY3Qgc3RhdGUpIFNob3dzIGEg bWVudSBvZiBvdGhlciBlc2NhcGUtbGV2ZWwgb3B0aW9ucy4KKyAgIEN0cmwtXEN0cmwtXCAoSW4g Q29ubmVjdCBzdGF0ZSkgVHlwZSB0d28gQ3RybC1CYWNrc2xhc2hlcyB0byBzZW5kIG9uZQorICAg b2YgdGhlbS4KKyAgIFNFVCBFU0NBUEUgWyBjaGFyYWN0ZXIgXSBDaGFuZ2VzIEtlcm1pdCdzIENv bm5lY3Qtc3RhdGUgZXNjYXBlCisgICBjaGFyYWN0ZXIuCisKKyAgIENsb3NpbmcgQ29ubmVjdGlv bnMKKworICAgSEFOR1VQIEhhbmdzIHVwIHRoZSBjdXJyZW50bHkgb3BlbiBzZXJpYWwtcG9ydCBv ciBuZXR3b3JrIGNvbm5lY3Rpb24uCisgICBDTE9TRSBDbG9zZXMgdGhlIGN1cnJlbnRseSBvcGVu IHNlcmlhbC1wb3J0IG9yIG5ldHdvcmsgY29ubmVjdGlvbi4KKyAgIFNFVCBMSU5FICh3aXRoIG5v IGRldmljZW5hbWUpICAgICAgICAgIENsb3NlcyB0aGUgY3VycmVudGx5IG9wZW4KKyAgIHNlcmlh bC1wb3J0IG9yIG5ldHdvcmsgY29ubmVjdGlvbi4KKyAgIFNFVCBIT1NUICh3aXRoIG5vIGhvc3Ru YW1lKSBDbG9zZXMgdGhlIGN1cnJlbnRseSBvcGVuIHNlcmlhbC1wb3J0IG9yCisgICBuZXR3b3Jr IGNvbm5lY3Rpb24uCisgICBGVFAgQ0xPU0UgQ2xvc2VzIHRoZSBjdXJyZW50bHkgb3BlbiBGVFAg Y29ubmVjdGlvbi4KKyAgIEhUVFAgQ0xPU0UgQ2xvc2VzIHRoZSBjdXJyZW50bHkgb3BlbiBIVFRQ IGNvbm5lY3Rpb24uCisgICBFWElUIEFsc28gY2xvc2VzIGFsbCBjb25uZWN0aW9ucy4gU3lub255 bTogUVVJVC4KKyAgIFNFVCBFWElUIFdBUk5JTkcgT0ZGIFN1cHByZXNzZXMgd2FybmluZyBhYm91 dCBvcGVuIGNvbm5lY3Rpb25zIG9uIGV4aXQKKyAgIG9yIGNsb3NlLgorCisgICBGaWxlIFRyYW5z ZmVyCisKKyAgIFNFTkQgWyBvcHRpb25zIF0gZmlsZW5hbWUgWyBhcy1uYW1lIF0gIFNlbmRzIHRo ZSBnaXZlbiBmaWxlLiBTeW5vbnltOgorICAgUy4KKyAgIFNFTkQgWyBvcHRpb25zIF0gZmlsZXNw ZWMgU2VuZHMgYWxsIGZpbGVzIHRoYXQgbWF0Y2guCisgICBSRVNFTkQgWyBvcHRpb25zIF0gZmls ZXNwZWMgUmVzdW1lcyBhbiBpbnRlcnJ1cHRlZCBTRU5EIGZyb20gdGhlIHBvaW50CisgICBvZiBm YWlsdXJlLgorICAgUkVDRUlWRSBbIG9wdGlvbnMgXSBbIGFzLW5hbWUgXSBXYWl0cyBwYXNzaXZl bHkgZm9yIGZpbGVzIHRvIGFycml2ZS4KKyAgIFN5bm9ueW06IFIuCisgICBMT0cgVFJBTlNBQ1RJ T05TIFsgZmlsZW5hbWUgXSBLZWVwcyBhIHJlY29yZCBvZiBmaWxlIHRyYW5zZmVycy4KKyAgIEZB U1QgVXNlIGZhc3QgZmlsZS10cmFuc2ZlciBzZXR0aW5ncyAoZGVmYXVsdCkuCisgICBDQVVUSU9V UyBVc2UgY2F1dGlvdXMgYW5kIGxlc3MgZmFzdCBmaWxlLXRyYW5zZmVyIHNldHRpbmdzLgorICAg Uk9CVVNUIFVzZSB1bHRyYS1jb25zZXJ2YXRpdmUgYW5kIHNsb3cgZmlsZS10cmFuc2ZlciBzZXR0 aW5ncy4KKyAgIFNUQVRJU1RJQ1MgWyBvcHRpb25zIF0gR2l2ZXMgc3RhdGlzdGljcyBhYm91dCB0 aGUgbW9zdCByZWNlbnQgZmlsZQorICAgdHJhbnNmZXIuCisgICBXSEVSRSBBZnRlciB0cmFuc2Zl cjogIldoZXJlIGRpZCBteSBmaWxlcyBnbz8iLgorICAgVFJBTlNNSVQgWyBvcHRpb25zIF0gWyBm aWxlbmFtZSBdIFNlbmRzIGZpbGUgd2l0aG91dCBwcm90b2NvbC4gU3lub255bToKKyAgIFhNSVQu CisgICBMT0cgU0VTU0lPTiBbIGZpbGVuYW1lIF0gQ2FwdHVyZXMgcmVtb3RlIHRleHQgb3IgZmls ZXMgd2l0aG91dAorICAgcHJvdG9jb2wuCisgICBTRVQgUFJPVE9DT0wgWyBuYW1lLi4uIF0gVGVs bHMgS2VybWl0IHRvIHVzZSBhbiBleHRlcm5hbCBmaWxlLXRyYW5zZmVyCisgICBwcm90b2NvbC4K KyAgIEZUUCB7IFBVVCwgTVBVVCwgR0VULCBNR0VULCAuLi4gfSBGVFAgY2xpZW50IGNvbW1hbmRz LgorICAgSFRUUCB7IFBVVCwgR0VULCBIRUFELCBQT1NULCAuLi4gfSBIVFRQIGNsaWVudCBjb21t YW5kcy4KKworICAgS2VybWl0IFNlcnZlcgorCisgICBFTkFCTEUsIERJU0FCTEUgICAgICAgICAg ICAgICAgICAgICAgICBDb250cm9scyB3aGljaCBmZWF0dXJlcyBjYW4gYmUKKyAgIHVzZWQgYnkg Y2xpZW50cy4KKyAgIFNFVCBTRVJWRVIgU2V0cyBwYXJhbWV0ZXJzIHByaW9yIHRvIGVudGVyaW5n IFNlcnZlciBzdGF0ZS4KKyAgIFNFUlZFUiBFbnRlcnMgU2VydmVyIHN0YXRlLgorCisgICBDbGll bnQgb2YgS2VybWl0IG9yIEZUUCBTZXJ2ZXIKKworICAgWyBSRU1PVEUgXSBMT0dJTiBbIHVzZXIg cGFzc3dvcmQgXSBMb2dzIGluIHRvIGEgS2VybWl0IHNlcnZlciBvciBJS1NECisgICB0aGF0IHJl cXVpcmVzIGl0LgorICAgWyBSRU1PVEUgXSBMT0dPVVQgTG9ncyBvdXQgZnJvbSBhIEtlcm1pdCBz ZXJ2ZXIgb3IgSUtTRC4KKyAgIFNFTkQgWyBvcHRpb25zIF0gZmlsZW5hbWUgWyBhcy1uYW1lIF0g IFNlbmRzIHRoZSBnaXZlbiBmaWxlIHRvIHRoZQorICAgc2VydmVyLiBTeW5vbnltczogUywgUFVU LgorICAgU0VORCBbIG9wdGlvbnMgXSBmaWxlc3BlYyBTZW5kcyBhbGwgZmlsZXMgdGhhdCBtYXRj aC4KKyAgIFJFU0VORCBbIG9wdGlvbnMgXSBmaWxlc3BlYyBSZXN1bWVzIGFuIGludGVycnVwdGVk IFNFTkQgZnJvbSB0aGUgcG9pbnQKKyAgIG9mIGZhaWx1cmUuCisgICBHRVQgWyBvcHRpb25zIF0g cmVtb3RlLWZpbGVzcGVjIEFza3MgdGhlIHNlcnZlciB0byBzZW5kIHRoZSBnaXZlbgorICAgZmls ZXMuIFN5bm9ueW06IEcuCisgICBSRUdFVCBbIG9wdGlvbnMgXSByZW1vdGUtZmlsZXNwZWMgUmVz dW1lcyBhbiBpbnRlcnJ1cHRlZCBHRVQgZnJvbSB0aGUKKyAgIHBvaW50IG9mIGZhaWx1cmUuCisg ICBSRU1PVEUgQ0QgWyBkaXJlY3RvcnkgXSBBc2tzIHNlcnZlciB0byBjaGFuZ2UgaXRzIHdvcmtp bmcgZGlyZWN0b3J5LgorICAgU3lub255bTogUkNELgorICAgUkVNT1RFIFBXRCBbIGRpcmVjdG9y eSBdIEFza3Mgc2VydmVyIHRvIGRpc3BsYXkgaXRzIHdvcmtpbmcgZGlyZWN0b3J5LgorICAgU3lu b255bTogUlBXRC4KKyAgIFJFTU9URSBESVJFQ1RPUlkgWyBmaWxlc3BlYy4uLiBdIEFza3Mgc2Vy dmVyIHRvIHNlbmQgYSBkaXJlY3RvcnkKKyAgIGxpc3RpbmcuIFN5bm9ueW06IFJESVIuCisgICBS RU1PVEUgREVMRVRFIFsgZmlsZXNwZWMuLi4gXSBBc2tzIHNlcnZlciB0byBkZWxldGUgZmlsZXMu IFN5bm9ueW06CisgICBSREVMLgorICAgUkVNT1RFIFsgY29tbWFuZC4uLiBdIChNYW55IG90aGVy IGNvbW1hbmRzOiAicmVtb3RlID8iIGZvciBhIGxpc3QpLgorICAgTUFJTCBbIG9wdGlvbnMgXSBm aWxlc3BlYyBTZW5kcyBmaWxlKHMpIHRvIGJlIGRlbGl2ZXJlZCBhcyBlLW1haWwKKyAgIChLZXJt aXQgb25seSkuCisgICBGSU5JU0ggQXNrcyB0aGUgc2VydmVyIHRvIGV4aXQgc2VydmVyIHN0YXRl IChLZXJtaXQgb25seSkuCisgICBCWUUgQXNrcyB0aGUgc2VydmVyIHRvIGxvZyBvdXQgYW5kIGNs b3NlIHRoZSBjb25uZWN0aW9uLgorCisgICBTY3JpcHQgUHJvZ3JhbW1pbmcKKyAgICAgICAgICBE RUZJTkUsIERFQ0xBUkUsIFVOREVGSU5FLCBVTkRFQ0xBUkUsIEFTU0lHTiwgRVZBTFVBVEUsCisg ICAgICAgICAgU0VYUFJFU1NJT04sIEFSUkFZLCBTT1JULCBJTlBVVCwgT1VUUFVULCBJRiwgRk9S LCBXSElMRSwgU1dJVENILAorICAgICAgICAgIEdPVE8sIEVDSE8sIEFTSywgR0VUQywgR0VUT0ss IEFTU0VSVCwgV0FJVCwgU0xFRVAsIEZPUEVOLCBGUkVBRCwKKyAgICAgICAgICBGV1JJVEUsIEZD TE9TRSwgU1RPUCwgRU5ELCBSRVRVUk4sIExFQVJOLCBTSElGVCwgVFJBQ0UsIFZPSUQsCisgICAg ICAgICAgSU5DUkVNRU5ULCBERUNSRU1FTlQsIC4uLiBGb3IgdGhlc2UgYW5kIG1hbnkgbW9yZSB5 b3UnbGwgbmVlZCB0bworICAgICAgICAgIGNvbnN1bHQgdGhlIFs3OV1tYW51YWwgYW5kIHN1cHBs ZW1lbnRzLCBhbmQvb3IgdmlzaXQgdGhlCisgICAgICAgICAgWzgwXUtlcm1pdCBTY3JpcHQgTGli cmFyeSwgd2hpY2ggYWxzbyBpbmNsdWRlcyBhIGJyaWVmIHR1dG9yaWFsLgorICAgICAgICAgIEhp bnQ6IEhFTFAgTEVBUk4gdG8gZmluZCBvdXQgaG93IHRvIGdldCBLZXJtaXQgdG8gd3JpdGUgc2lt cGxlCisgICAgICAgICAgc2NyaXB0cyBmb3IgeW91LgorCisgICBNYW55IG9mIEtlcm1pdCdzIGNv bW1hbmRzIGhhdmUgc3lub255bXMsIHZhcmlhbnRzLCByZWxhdGl2ZXMsIGFuZCBzbworICAgb24u IEZvciBleGFtcGxlLCBNU0VORCBpcyBhIHZlcnNpb24gb2YgU0VORCB0aGF0IGFjY2VwdHMgYSBs aXN0IG9mIGZpbGUKKyAgIHNwZWNpZmljYXRpb25zIHRvIGJlIHNlbnQsIHJhdGhlciB0aGFuIGp1 c3Qgb25lIGZpbGUgc3BlY2lmaWNhdGlvbiwgYW5kCisgICBNUFVUIGlzIGEgc3lub255bSBvZiBN U0VORC4gTU9WRSBtZWFucyB0byBTRU5EIGFuZCB0aGVuIERFTEVURSB0aGUKKyAgIHNvdXJjZSBm aWxlIGlmIHN1Y2Nlc3NmdWwuIE1NT1ZFIGlzIGxpa2UgTU9WRSwgYnV0IGFjY2VwdHMgYSBsaXN0 IG9mCisgICBmaWxlc3BlY3MsIGFuZCBzbyBvbi4gVGhlc2UgYXJlIGRlc2NyaWJlZCBpbiB0aGUg WzgxXWZ1bGwKKyAgIGRvY3VtZW50YXRpb24uCisKKyAgIFVzZSBxdWVzdGlvbiBtYXJrIHRvIGZl ZWwgeW91ciB3YXkgdGhyb3VnaCBhbiB1bmZhbWlsaWFyIGNvbW1hbmQsIGFzIGluCisgICB0aGlz IGV4YW1wbGUgKHRoZSBwYXJ0IHlvdSB0eXBlIGlzIHVuZGVybGluZWQpOgorCisgIEMtS2VybWl0 PiByZW1vdGUgPyBPbmUgb2YgdGhlIGZvbGxvd2luZzoKKyAgIGFzc2lnbiAgICAgZGVsZXRlICAg ICBoZWxwICAgICAgIGxvZ2luICAgICAgcHJpbnQgICAgICByZW5hbWUgICAgIHNwYWNlCisgICBj ZCAgICAgICAgIGRpcmVjdG9yeSAgaG9zdCAgICAgICBsb2dvdXQgICAgIHB3ZCAgICAgICAgcm1k aXIgICAgICB0eXBlCisgICBjb3B5ICAgICAgIGV4aXQgICAgICAga2VybWl0ICAgICBta2RpciAg ICAgIHF1ZXJ5ICAgICAgc2V0ICAgICAgICB3aG8KKyAgQy1LZXJtaXQ+IHJlbW90ZSBzZXQgPyBP bmUgb2YgdGhlIGZvbGxvd2luZzoKKyAgIGF0dHJpYnV0ZXMgICBmaWxlICAgICAgICAgcmV0cnkg ICAgICAgIHRyYW5zZmVyCisgICBibG9jay1jaGVjayAgcmVjZWl2ZSAgICAgIHNlcnZlciAgICAg ICB3aW5kb3cKKyAgQy1LZXJtaXQ+IHJlbW90ZSBzZXQgZmlsZSA/IE9uZSBvZiB0aGUgZm9sbG93 aW5nOgorICAgY2hhcmFjdGVyLXNldCAgaW5jb21wbGV0ZSAgICAgcmVjb3JkLWxlbmd0aAorICAg Y29sbGlzaW9uICAgICAgbmFtZXMgICAgICAgICAgdHlwZQorICBDLUtlcm1pdD4gcmVtb3RlIHNl dCBmaWxlIG5hbWVzID8gT25lIG9mIHRoZSBmb2xsb3dpbmc6CisgICBjb252ZXJ0ZWQgIGxpdGVy YWwKKyAgQy1LZXJtaXQ+IHJlbW90ZSBzZXQgZmlsZSBuYW1lcyBsaXRlcmFsCisgIEMtS2VybWl0 PgorCisgICBUaGlzIGlzIGNhbGxlZCBtZW51IG9uIGRlbWFuZDogeW91IGdldCBhIG1lbnUgd2hl biB5b3Ugd2FudCBvbmUsIGJ1dAorICAgbWVudXMgYXJlIG5vdCBmb3JjZWQgb24geW91IGV2ZW4g d2hlbiBrbm93IHdoYXQgeW91J3JlIGRvaW5nLiBOb3RlIHRoYXQKKyAgIHlvdSBjYW4gYWxzbyBh YmJyZXZpYXRlIG1vc3Qga2V5d29yZHMsIGFuZCB5b3UgY2FuIGNvbXBsZXRlIHRoZW0gd2l0aAor ICAgdGhlIFRhYiBvciBFc2Mga2V5LiBBbHNvIG5vdGUgdGhhdCA/IHdvcmtzIGZvciBmaWxlbmFt ZXMgdG9vLCBhbmQgdGhhdAorICAgeW91IGNhbiB1c2UgaXQgaW4gdGhlIG1pZGRsZSBvZiBhIGtl eXdvcmQgb3IgZmlsZW5hbWUsIG5vdCBqdXN0IGF0IHRoZQorICAgYmVnaW5uaW5nLiBGb3IgZXhh bXBsZSwgInNlbmQgeD8iIGxpc3RzIGFsbCB0aGUgZmlsZXMgaW4gdGhlIGN1cnJlbnQKKyAgIGRp cmVjdG9yeSB3aG9zZSBuYW1lcyBzdGFydCB3aXRoICd4Jy4KKworICAgWzgyXUtlcm1pdCBIb21l IFs4M11DLUtlcm1pdCBIb21lIFs4NF1DLUtlcm1pdCBGQVEKKworSU5JVElBTElaQVRJT04gRklM RQorCisgICBbODVdVG9wIFs4Nl1Db250ZW50cyBbODddTmV4dCBbODhdUHJldmlvdXMKKworICAg SW4gaXRzIGRlZmF1bHQgY29uZmlndXJhdGlvbiwgQy1LZXJtaXQgZXhlY3V0ZXMgY29tbWFuZHMg ZnJvbSBhIGZpbGUKKyAgIGNhbGxlZCAua2VybXJjIGluIHlvdXIgaG9tZSBkaXJlY3Rvcnkgd2hl biBpdCBzdGFydHMsIHVubGVzcyBpdCBpcworICAgZ2l2ZW4gdGhlIC1ZIG9yIC15IGNvbW1hbmQt bGluZSBvcHRpb24uIEN1c3RvbSBjb25maWd1cmF0aW9ucyBtaWdodAorICAgc3Vic3RpdHV0ZSBh IHNoYXJlZCBzeXN0ZW0td2lkZSBpbml0aWFsaXphdGlvbiBmaWxlLiBUaGUgU0hPVyBGSUxFCisg ICBjb21tYW5kIHRlbGxzIHdoYXQgaW5pdGlhbGl6YXRpb24gZmlsZSwgaWYgYW55LCB3YXMgdXNl ZC4gVGhlIHN0YW5kYXJkCisgICBpbml0aWFsaXphdGlvbiBmaWxlICJjaGFpbnMiIHRvIGFuIGlu ZGl2aWR1YWwgY3VzdG9taXphdGlvbiBmaWxlLAorICAgLm15a2VybWMsIGluIHRoZSBob21lIGRp cmVjdG9yeSwgaW4gd2hpY2ggZWFjaCB1c2VyIGNhbiBlc3RhYmxpc2gKKyAgIGhlci9oaXMgb3du IHByZWZlcmVuY2VzLCBkZWZpbmUgbWFjcm9zLCBhbmQgc28gb24uCisKKyAgIFNpbmNlIGV4ZWN1 dGlvbiBvZiB0aGUgaW5pdGlhbGl6YXRpb24gZmlsZSAoYXQgbGVhc3QgdGhlIHN0YW5kYXJkIG9u ZSkKKyAgIG1ha2VzIEMtS2VybWl0IHRha2UgbG9uZ2VyIHRvIHN0YXJ0LCBpdCBtaWdodCBiZSBi ZXR0ZXIgbm90IHRvIGhhdmUgYW4KKyAgIGluaXRpYWxpemF0aW9uIGZpbGUsIGVzcGVjaWFsbHkg bm93IHRoYXQgS2VybWl0J3MgZGVmYXVsdCBzdGFydHVwCisgICBjb25maWd1cmF0aW9uIGlzIHdl bGwgYXR0dW5lZCB0byBtb2Rlcm4gY29tcHV0aW5nIGFuZCBuZXR3b3JraW5nIC0tIGluCisgICBv dGhlciB3b3JkcywgeW91IG5vIGxvbmdlciBoYXZlIGRvIGFueXRoaW5nIHNwZWNpYWwgdG8gbWFr ZSBLZXJtaXQKKyAgIHRyYW5zZmVycyBnbyBmYXN0LiBTbyBpbnN0ZWFkIG9mIGhhdmluZyBhbiBp bml0aWFsaXphdGlvbiBmaWxlIHRoYXQgaXMKKyAgIGV4ZWN1dGVkIGV2ZXJ5IHRpbWUgS2VybWl0 IHN0YXJ0cywgeW91IG1pZ2h0IGNvbnNpZGVyIG1ha2luZyBvbmUgb3IKKyAgIG1vcmUga2VyYmFu ZyBzY3JpcHRzICh3aXRoIG5hbWVzIG90aGVyIHRoYXQgLmtlcm1yYykgdGhhdCBkbyBOT1QKKyAg IGluY2x1ZGUgYW4gImV4aXQiIGNvbW1hbmQsIGFuZCBpbnZva2UgdGhvc2Ugd2hlbiB5b3UgbmVl ZCB0aGUgc2V0dGluZ3MsCisgICBtYWNybyBkZWZpbml0aW9ucywgYW5kL29yIHNjcmlwdGVkIGFj dGlvbnMgdGhleSBjb250YWluLCBhbmQgaW52b2tlCisgICBDLUtlcm1pdCBkaXJlY3RseSB3aGVu IHlvdSBkb24ndC4KKworICAgVG8gcHV0IGl0IGFub3RoZXIgd2F5Li4uIFdlIHN0aWxsIGRpc3Ry aWJ1dGUgdGhlIHN0YW5kYXJkCisgICBpbml0aWFsaXphdGlvbiBmaWxlIHNpbmNlIGl0J3MgZmVh dHVyZWQgaW4gdGhlIG1hbnVhbCBhbmQgYmFja3dhcmRzCisgICBjb21wYXRpYmlsaXR5IGlzIGlt cG9ydGFudCB0byB1cy4gQnV0IHRoZXJlJ3Mgbm8gaGFybSBpbiBub3QgdXNpbmcgaXQKKyAgIGlm IHlvdSBkb24ndCBuZWVkIHRoZSBzdHVmZiB0aGF0J3MgaW4gaXQgKHNlcnZpY2VzIGRpcmVjdG9y eSwgZGlhbGluZworICAgZGlyZWN0b3J5LCBuZXR3b3JrIGRpcmVjdG9yeSwgYW5kIGFzc29jaWF0 ZWQgbWFjcm8gZGVmaW5pdGlvbnMpLiBPbiB0aGUKKyAgIG90aGVyIGhhbmQsIGlmIHRoZXJlIGFy ZSBzZXR0aW5ncyBvciBtYWNyb3MgeW91IHdhbnQgaW4gZWZmZWN0IEVWRVJZCisgICB0aW1lIHlv dSB1c2UgS2VybWl0LCB0aGUgaW5pdGlhbGl6YXRpb24gZmlsZSAob3IgdGhlIGN1c3RvbWl6YXRp b24gZmlsZQorICAgaXQgY2hhaW5zIHRvKSBpcyB0aGUgcGxhY2UgdG8gcHV0IHRoZW0sIGJlY2F1 c2UgdGhhdCdzIHRoZSBvbmx5IHBsYWNlCisgICBLZXJtaXQgbG9va3MgZm9yIHRoZW0gYXV0b21h dGljYWxseSBlYWNoIHRpbWUgeW91IHN0YXJ0IGl0LgorCisgICBbODldS2VybWl0IEhvbWUgWzkw XUMtS2VybWl0IEhvbWUgWzkxXUMtS2VybWl0IEZBUQorCitNT0RFUyBPRiBPUEVSQVRJT04KKwor ICAgWzkyXVRvcCBbOTNdQ29udGVudHMgWzk0XU5leHQgWzk1XVByZXZpb3VzCisKKyAgIEtlcm1p dCBpcyBzYWlkIHRvIGJlIGluIExvY2FsIG1vZGUgaWYgaXQgaGFzIG1hZGUgYSBjb25uZWN0aW9u IHRvCisgICBhbm90aGVyIGNvbXB1dGVyLCBlLmcuIGJ5IGRpYWxpbmcgaXQgb3IgZXN0YWJsaXNo aW5nIGEgVGVsbmV0CisgICBjb25uZWN0aW9uIHRvIGl0LiBUaGUgb3RoZXIgY29tcHV0ZXIgaXMg cmVtb3RlLCBzbyBpZiB5b3Ugc3RhcnQgYW5vdGhlcgorICAgY29weSBvZiBLZXJtaXQgb24gdGhl IHJlbW90ZSBjb21wdXRlciwgaXQgaXMgc2FpZCB0byBiZSBpbiBSZW1vdGUgbW9kZQorICAgKGFz IGxvbmcgYXMgaXQgaGFzIG5vdCBtYWRlIGFueSBjb25uZWN0aW9ucyBvZiBpdHMgb3duKS4gVGhl IGxvY2FsCisgICBLZXJtaXQgY29tbXVuaWNhdGVzIG92ZXIgdGhlIGNvbW11bmljYXRpb25zIGRl dmljZSBvciBuZXR3b3JrCisgICBjb25uZWN0aW9uLCBhY3RpbmcgYXMgYSBjb25kdWl0IGJldHdl ZW4gdGhlIHRoZSByZW1vdGUgY29tcHV0ZXIgYW5kCisgICB5b3VyIGtleWJvYXJkIGFuZCBzY3Jl ZW4uIFRoZSByZW1vdGUgS2VybWl0IGlzIHRoZSBmaWxlLXRyYW5zZmVyCisgICBwYXJ0bmVyIHRv IHRoZSBsb2NhbCBLZXJtaXQgYW5kIGNvbW11bmljYXRlcyBvbmx5IHRocm91Z2ggaXRzIHN0YW5k YXJkCisgICBpbnB1dCBhbmQgb3V0cHV0LgorCisgICBBdCBhbnkgbW9tZW50LCBhIEtlcm1pdCBw cm9ncmFtIGNhbiBiZSBpbiBhbnkgb2YgdGhlIGZvbGxvd2luZyBzdGF0ZXMuCisgICBJdCdzIGlt cG9ydGFudCB0byBrbm93IHdoYXQgdGhleSBhcmUgYW5kIGhvdyB0byBjaGFuZ2UgZnJvbSBvbmUg dG8gdGhlCisgICBvdGhlci4KKworICAgQ29tbWFuZCBzdGF0ZQorICAgICAgICAgIEluIHRoaXMg c3RhdGUsIEtlcm1pdCByZWFkcyBjb21tYW5kcyBmcm9tOgorCisgICAgICAgICAgKyBZb3VyIGtl eWJvYXJkOyBvcjoKKyAgICAgICAgICArIEEgZmlsZSwgb3I6CisgICAgICAgICAgKyBBIG1hY3Jv IGRlZmluaXRpb24uCisKKyAgICAgICAgICBZb3UgY2FuIGV4aXQgZnJvbSBDb21tYW5kIHN0YXRl IGJhY2sgdG8gVW5peCB3aXRoIHRoZSBFWElUIG9yCisgICAgICAgICAgUVVJVCBjb21tYW5kIChz YW1lIHRoaW5nKS4gWW91IGNhbiBlbnRlciBDb25uZWN0IHN0YXRlIHdpdGggYW55CisgICAgICAg ICAgb2YgdmFyaW91cyBjb21tYW5kcyAoQ09OTkVDVCwgRElBTCwgVEVMTkVULCBldGMpLiBZb3Ug Y2FuIGVudGVyCisgICAgICAgICAgZmlsZSB0cmFuc2ZlciBzdGF0ZSB3aXRoIGNvbW1hbmRzIGxp a2UgU0VORCwgUkVDRUlWRSwgYW5kIEdFVC4KKyAgICAgICAgICBZb3UgY2FuIGVudGVyIFNlcnZl ciBzdGF0ZSB3aXRoIHRoZSBTRVJWRVIgY29tbWFuZC4gVGhlIFRBS0UKKyAgICAgICAgICBjb21t YW5kIHRlbGxzIEtlcm1pdCB0byByZWFkIGFuZCBleGVjdXRlIGNvbW1hbmRzIGZyb20gYSBmaWxl LgorICAgICAgICAgIFRoZSAocGVyaGFwcyBpbXBsaWVkKSBETyBjb21tYW5kIHRlbGxzIEtlcm1p dCB0byByZWFkIGFuZAorICAgICAgICAgIGV4ZWN1dGUgY29tbWFuZHMgZnJvbSBhIG1hY3JvIGRl ZmluaXRpb24uIFdoaWxlIGluIENvbW1hbmQKKyAgICAgICAgICBzdGF0ZSwgeW91IGNhbiBpbnRl cnJ1cHQgYW55IGNvbW1hbmQsIG1hY3JvLCBvciBjb21tYW5kIGZpbGUgYnkKKyAgICAgICAgICB0 eXBpbmcgQ3RybC1DIChob2xkIGRvd24gdGhlIEN0cmwga2V5IGFuZCBwcmVzcyB0aGUgQyBrZXkp OyB0aGlzCisgICAgICAgICAgbm9ybWFsbHkgYnJpbmdzIHlvdSBiYWNrIHRvIHRoZSBwcm9tcHQu CisKKyAgIFNoZWxsIHN0YXRlCisgICAgICAgICAgWW91IGNhbiBpbnZva2UgYW4gaW5mZXJpb3Ig c2hlbGwgb3IgZXh0ZXJuYWwgY29tbWFuZCBmcm9tIHRoZQorICAgICAgICAgIEtlcm1pdCBjb21t YW5kIHByb21wdCBieSB1c2luZyB0aGUgUFVTSCwgUlVOICghKSwgRURJVCwgb3IKKyAgICAgICAg ICBCUk9XU0UgY29tbWFuZC4gV2hpbGUgdGhlIGluZmVyaW9yIHNoZWxsIG9yIGNvbW1hbmQgaXMg YWN0aXZlLAorICAgICAgICAgIEtlcm1pdCBpcyBzdXNwZW5kZWQgYW5kIGRvZXMgbm90aGluZy4g UmV0dXJuIHRvIEtlcm1pdCBDb21tYW5kCisgICAgICAgICAgc3RhdGUgYnkgZXhpdGluZyBmcm9t IHRoZSBpbmZlcmlvciBzaGVsbCBvciBhcHBsaWNhdGlvbi4KKworICAgQ29ubmVjdCBzdGF0ZQor ICAgICAgICAgIEluIHRoaXMgc3RhdGUsIHdoaWNoIGNhbiBiZSBlbnRlcmVkIG9ubHkgd2hlbiBp biBMb2NhbCBtb2RlCisgICAgICAgICAgKGkuZS4gd2hlbiBLZXJtaXQgaGFzIG1hZGUgYSBjb25u ZWN0aW9uIHRvIGFub3RoZXIgY29tcHV0ZXIpLAorICAgICAgICAgIEtlcm1pdCBpcyBhY3Rpbmcg YXMgYSB0ZXJtaW5hbCB0byB0aGUgcmVtb3RlIGNvbXB1dGVyLiBZb3VyCisgICAgICAgICAga2V5 c3Ryb2tlcyBhcmUgc2VudCB0byB0aGUgcmVtb3RlIGNvbXB1dGVyIGFuZCBjaGFyYWN0ZXJzIHRo YXQKKyAgICAgICAgICBhcnJpdmUgb3ZlciB0aGUgY29tbXVuaWNhdGlvbiBjb25uZWN0aW9uIGFy ZSBkaXNwbGF5ZWQgb24geW91cgorICAgICAgICAgIHNjcmVlbi4gVGhpcyBzdGF0ZSBpcyBlbnRl cmVkIHdoZW4geW91IGdpdmUgYSBDT05ORUNULCBESUFMLAorICAgICAgICAgIFRFTE5FVCwgUkxP R0lOLCBvciBJS1NEIGNvbW1hbmQuIFlvdSBjYW4gcmV0dXJuIHRvIGNvbW1hbmQgc3RhdGUKKyAg ICAgICAgICBieSBsb2dnaW5nIG91dCBvZiB0aGUgcmVtb3RlIGNvbXB1dGVyLCBvciBieSB0eXBp bmc6CisKKyAgQ3RybC1cYworCisgICAgICAgICAgVGhhdCBpczogSG9sZCBkb3duIHRoZSBDdHJs IGtleSBhbmQgcHJlc3MgdGhlIGJhY2tzbGFzaCBrZXksCisgICAgICAgICAgdGhlbiBsZXQgZ28g b2YgdGhlIEN0cmwga2V5IGFuZCBwcmVzcyB0aGUgQyBrZXkuIFRoaXMgaXMgY2FsbGVkCisgICAg ICAgICAgZXNjYXBpbmcgYmFjay4gQ2VydGFpbiBvdGhlciBlc2NhcGUtbGV2ZWwgY29tbWFuZHMg YXJlIGFsc28KKyAgICAgICAgICBwcm92aWRlZDsgdHlwZSBDdHJsLVw/IGZvciBhIGxpc3QuIEZv ciBleGFtcGxlLCB5b3UgY2FuIGVudGVyCisgICAgICAgICAgU2hlbGwgc3RhdGUgd2l0aDoKKwor ICBDdHJsLVwhCisKKyAgICAgICAgICBUbyBzZW5kIGEgQ3RybC1cIHRvIHRoZSBob3N0IHdoaWxl IGluIENvbm5lY3Qgc3RhdGUsIHR5cGUgdHdvIG9mCisgICAgICAgICAgdGhlbSBpbiBhIHJvdy4g U2VlIEhFTFAgQ09OTkVDVCBhbmQgSEVMUCBTRVQgRVNDQVBFIGZvciBtb3JlCisgICAgICAgICAg aW5mby4KKworICAgTG9jYWwgZmlsZS10cmFuc2ZlciBzdGF0ZQorICAgICAgICAgIEluIHRoaXMg c3RhdGUsIEtlcm1pdCBpcyBzZW5kaW5nIHBhY2tldHMgYmFjayBhbmQgZm9ydGggd2l0aCB0aGUK KyAgICAgICAgICBvdGhlciBjb21wdXRlciBpbiBvcmRlciB0byB0cmFuc2ZlciBhIGZpbGUgb3Ig YWNjb21wbGlzaCBzb21lCisgICAgICAgICAgb3RoZXIgZmlsZS1yZWxhdGVkIHRhc2suIEFuZCBh dCB0aGUgc2FtZSB0aW1lLCBpdCBpcyBkaXNwbGF5aW5nCisgICAgICAgICAgaXRzIHByb2dyZXNz IG9uIHlvdXIgc2NyZWVuIGFuZCB3YXRjaGluZyB5b3VyIGtleWJvYXJkIGZvcgorICAgICAgICAg IGludGVycnVwdGlvbnMuIEluIHRoaXMgc3RhdGUsIHRoZSBmb2xsb3dpbmcgc2luZ2xlLWtleXN0 cm9rZQorICAgICAgICAgIGNvbW1hbmRzIGFyZSBhY2NlcHRlZDoKKworICAgICAgWCAgICAgICAg SW50ZXJydXB0IHRoZSBjdXJyZW50IGZpbGUgYW5kIGdvIG9uIHRvIHRoZSBuZXh0IChpZiBhbnkp LgorICAgICAgWiAgICAgICAgSW50ZXJydXB0IHRoZSBjdXJyZW50IGZpbGUgYW5kIHNraXAgYWxs IHRoZSByZXN0LgorICAgICAgRSAgICAgICAgTGlrZSBaIGJ1dCB1c2VzIGEgInN0cm9uZ2VyIiBw cm90b2NvbCAodXNlIGlmIFggb3IgWiBkb24ndCB3b3JrKS4KKyAgICAgIEN0cmwtQyAgIEludGVy cnVwdCBmaWxlLXRyYW5zZmVyIG1vZGUgKHVzZSBpZiBaIG9yIEUgZG9uJ3Qgd29yaykuCisKKyAg ICAgICAgICBLZXJtaXQgcmV0dXJucyB0byBpdHMgcHJldmlvdXMgc3RhdGUgKENvbW1hbmQgb3Ig Q29ubmVjdCkgd2hlbgorICAgICAgICAgIHRoZSB0cmFuc2ZlciBpcyBjb21wbGV0ZSBvciB3aGVu IGludGVycnVwdGVkIHN1Y2Nlc3NmdWxseSBieSBYLAorICAgICAgICAgIFosIEUsIG9yIEN0cmwt QyAoaG9sZCBkb3duIHRoZSBDdHJsIGtleSBhbmQgcHJlc3MgdGhlIEMga2V5KS4KKworICAgUmVt b3RlIGZpbGUtdHJhbnNmZXIgc3RhdGUKKyAgICAgICAgICBJbiB0aGlzIHN0YXRlLCBLZXJtaXQg aXMgZXhjaGFuZ2luZyBmaWxlLXRyYW5zZmVyIHBhY2tldHMgd2l0aAorICAgICAgICAgIGl0cyBs b2NhbCBwYXJ0bmVyIG92ZXIgaXRzIHN0YW5kYXJkIGkvby4gSXQgbGVhdmVzIHRoaXMgc3RhdGUK KyAgICAgICAgICBhdXRvbWF0aWNhbGx5IHdoZW4gdGhlIHRyYW5zZmVyIGlzIGNvbXBsZXRlLiBJ biBjYXNlIHlvdSBmaW5kCisgICAgICAgICAgeW91ciBsb2NhbCBLZXJtaXQgaW4gQ29ubmVjdCBz dGF0ZSBhbmQgdGhlIHJlbW90ZSBvbmUgaW4KKyAgICAgICAgICBGaWxlLXRyYW5zZmVyIHN0YXRl IChpbiB3aGljaCBpdCBzZWVtcyB0byBpZ25vcmUgeW91cgorICAgICAgICAgIGtleXN0cm9rZXMp LCB5b3UgY2FuIHVzdWFsbHkgcmV0dXJuIGl0IHRvIGNvbW1hbmQgc3RhdGUgYnkKKyAgICAgICAg ICB0eXBpbmcgdGhyZWUgQ3RybC1DJ3MgaW4gYSByb3cuIElmIHRoYXQgZG9lc24ndCB3b3JrLCBy ZXR1cm4KKyAgICAgICAgICB5b3VyIGxvY2FsIEtlcm1pdCB0byBDb21tYW5kIHN0YXRlIChDdHJs LVwgQykgYW5kIHR5cGUKKyAgICAgICAgICAiZS1wYWNrZXQiIGFuZCB0aGVuIHByZXNzIHRoZSBS ZXR1cm4gb3IgRW50ZXIga2V5OyB0aGlzIGZvcmNlcyBhCisgICAgICAgICAgZmF0YWwgS2VybWl0 IHByb3RvY29sIGVycm9yLgorCisgICBSZW1vdGUgU2VydmVyIHN0YXRlCisgICAgICAgICAgVGhp cyBpcyBsaWtlIFJlbW90ZSBGaWxlLXRyYW5zZmVyIHN0YXRlLCBleGNlcHQgaXQgbmV2ZXIgcmV0 dXJucworICAgICAgICAgIGF1dG9tYXRpY2FsbHkgdG8gQ29tbWFuZCBzdGF0ZS4gUmF0aGVyLCBp dCBhd2FpdHMgZnVydGhlcgorICAgICAgICAgIGluc3RydWN0aW9ucyBmcm9tIHRoZSBjbGllbnQg cHJvZ3JhbTsgdGhhdCBpcywgZnJvbSB5b3VyIExvY2FsCisgICAgICAgICAgS2VybWl0IHByb2dy YW0uIFlvdSBjYW4gcmV0dXJuIHRoZSBSZW1vdGUgU2VydmVyIHRvIGl0cyBwcmV2aW91cworICAg ICAgICAgIHN0YXRlIGJ5IGlzc3VpbmcgYSAiZmluaXNoIiBjb21tYW5kIHRvIHRoZSBjbGllbnQs IG9yIGlmIHlvdSBhcmUKKyAgICAgICAgICBpbiBDb25uZWN0IHN0YXRlLCBieSB0eXBpbmcgdGhy ZWUgQ3RybC1DJ3MgaW4gYSByb3cuIFlvdSBjYW4KKyAgICAgICAgICB0ZWxsIHRoZSBzZXJ2ZXIg am9iIHRvIGxvZyBvdXQgYW5kIGJyZWFrIHRoZSBjb25uZWN0aW9uIGJ5CisgICAgICAgICAgaXNz dWluZyBhICJieWUiIGNvbW1hbmQgdG8gdGhlIGNsaWVudC4KKworICAgTG9jYWwgU2VydmVyIHN0 YXRlCisgICAgICAgICAgTGlrZSBSZW1vdGUtU2VydmVyIHN0YXRlLCBidXQgaW4gbG9jYWwgbW9k ZSwgYW5kIHRoZXJlZm9yZSB3aXRoCisgICAgICAgICAgaXRzIGZpbGUtdHJhbnNmZXIgZGlzcGxh eSBzaG93aW5nLCBhbmQgbGlzdGVuaW5nIGZvciBzaW5nbGUta2V5CisgICAgICAgICAgY29tbWFu ZHMsIGFzIGluIExvY2FsIEZpbGUtdHJhbnNmZXIgc3RhdGUuIFVzdWFsbHkgdGhpcyBzdGF0ZSBp cworICAgICAgICAgIGVudGVyZWQgYXV0b21hdGljYWxseSB3aGVuIGEgcmVtb3RlIEtlcm1pdCBw cm9ncmFtIGdpdmVzIGEgR0VUCisgICAgICAgICAgY29tbWFuZC4KKworICAgQy1LZXJtaXQsIEtl cm1pdCA5NSwgYW5kIE1TLURPUyBLZXJtaXQgYWxsIGNhbiBzd2l0Y2ggYXV0b21hdGljYWxseQor ICAgZnJvbSBDb25uZWN0IHN0YXRlIHRvIExvY2FsIEZpbGUtdHJhbnNmZXIgc3RhdGUgd2hlbiB5 b3UgaW5pdGlhdGUgYQorICAgZmlsZSB0cmFuc2ZlciBmcm9tIHRoZSByZW1vdGUgY29tcHV0ZXIg Ynkgc3RhcnRpbmcgS2VybWl0IGFuZCB0ZWxsaW5nCisgICBpdCB0byBzZW5kIG9yIGdldCBhIGZp bGUsIGluIHdoaWNoIGNhc2UsIENvbm5lY3Qgc3RhdGUgaXMgYXV0b21hdGljYWxseQorICAgcmVz dW1lZCBhZnRlciB0aGUgZmlsZSB0cmFuc2ZlciBpcyBmaW5pc2hlZC4KKworICAgTm90ZSB0aGF0 IEMtS2VybWl0IGlzIG5vdCBhIHRlcm1pbmFsIGVtdWxhdG9yLiBJdCBpcyBhIGNvbW11bmljYXRp b25zCisgICBhcHBsaWNhdGlvbiB0aGF0IHlvdSBydW4gaW4gYSB0ZXJtaW5hbCB3aW5kb3cgKGUu Zy4gY29uc29sZSBvciBYdGVybSkuCisgICBUaGUgc3BlY2lmaWMgZW11bGF0aW9uLCBzdWNoIGFz IFZUMTAwLCBWVDIyMCwgTGludXggQ29uc29sZSwgb3IgWHRlcm0sCisgICBpcyBwcm92aWRlZCBi eSB0aGUgdGVybWluYWwgd2luZG93IGluIHdoaWNoIHlvdSBhcmUgcnVubmluZyBDLUtlcm1pdC4K KyAgIEtlcm1pdCA5NSBhbmQgTVMtRE9TIEtlcm1pdCwgb24gdGhlIG90aGVyIGhhbmQsIGFyZSB0 cnVlIHRlcm1pbmFsCisgICBlbXVsYXRvcnMuIFdoeSBpcyBDLUtlcm1pdCBub3QgYSB0ZXJtaW5h bCBlbXVsYXRvcj8gWzk2XUNMSUNLIEhFUkUgdG8KKyAgIHJlYWQgYWJvdXQgaXQuCisKKyAgIFs5 N11LZXJtaXQgSG9tZSBbOThdQy1LZXJtaXQgSG9tZSBbOTldQy1LZXJtaXQgRkFRCisKK01BS0lO RyBDT05ORUNUSU9OUworCisgICBbMTAwXVRvcCBbMTAxXUNvbnRlbnRzIFsxMDJdTmV4dCBbMTAz XVByZXZpb3VzCisKKyAgIEhlcmUgaXMgaG93IHRvIG1ha2UgZGlmZmVyZW50IGtpbmRzIG9mIGNv bm5lY3Rpb25zIHVzaW5nIGludGVyYWN0aXZlCisgICBLZXJtaXQgY29tbWFuZHMgKGFzIG5vdGVk IGFib3ZlLCB5b3UgY2FuIGFsc28gbWFrZSBjb25uZWN0aW9ucyB3aXRoCisgICBjb21tYW5kLWxp bmUgb3B0aW9ucykuIE5vdGUgdGhhdCB5b3UgZG9uJ3QgaGF2ZSB0byBtYWtlIGNvbm5lY3Rpb25z CisgICB3aXRoIEtlcm1pdC4gSXQgY2FuIGFsc28gYmUgdXNlZCBvbiB0aGUgZmFyIGVuZCBvZiBh IGNvbm5lY3Rpb24gYXMgdGhlCisgICByZW1vdGUgZmlsZSB0cmFuc2ZlciBhbmQgbWFuYWdlbWVu dCBwYXJ0bmVyIG9mIHlvdXIgbG9jYWwKKyAgIGNvbW11bmljYXRpb25zIHNvZnR3YXJlLgorCisg ICBNYWtpbmcgYSBUZWxuZXQgQ29ubmVjdGlvbgorICAgICAgICAgIEF0IHRoZSBDLUtlcm1pdCBj b21tYW5kIHByb21wdCwgc2ltcGx5IHR5cGU6CisKKyAgdGVsbmV0IGZvby5iYXIuY29tICAgICAg ICAgOyBTdWJzdGl0dXRlIGRlc2lyZWQgaG9zdCBuYW1lIG9yIGFkZHJlc3MuCisgIHRlbG5ldCB4 eXpjb3JwLmNvbSAzMDAwICAgIDsgWW91IGNhbiBhbHNvIGluY2x1ZGUgYSBwb3J0IG51bWJlci4K KworICAgICAgICAgIElmIHRoZSBjb25uZWN0aW9uIGlzIHN1Y2Nlc3NmdWwsIEtlcm1pdCBhdXRv bWF0aWNhbGx5IGVudGVycworICAgICAgICAgIENvbm5lY3Qgc3RhdGUuIFdoZW4geW91IGxvZ291 dCBmcm9tIHRoZSByZW1vdGUgaG9zdCwgS2VybWl0CisgICAgICAgICAgYXV0b21hdGljYWxseSBy ZXR1cm5zIHRvIGl0cyBwcm9tcHQuIE1vcmUgaW5mbzogSEVMUCBURUxORVQsCisgICAgICAgICAg SEVMUCBTRVQgVEVMTkVULCBIRUxQIFNFVCBURUxPUFQuIEFsc28gc2VlIHRoZSBbMTA0XUlLU0Qg c2VjdGlvbgorICAgICAgICAgIGJlbG93LgorCisgICBNYWtpbmcgYW4gUmxvZ2luIGNvbm5lY3Rp b24KKyAgICAgICAgICBUaGlzIGlzIGp1c3QgbGlrZSBUZWxuZXQsIGV4Y2VwdCB5b3UgaGF2ZSB0 byBiZSByb290IHRvIGRvIGl0CisgICAgICAgICAgYmVjYXVzZSBSbG9naW4gdXNlcyBhIHByaXZp bGVnZWQgVENQIHBvcnQ6CisKKyAgcmxvZ2luIGZvby5iYXIuY29tICAgICAgICAgOyBTdWJzdGl0 dXRlIGRlc2lyZWQgaG9zdCBuYW1lIG9yIGFkZHJlc3MuCisKKyAgICAgICAgICBNb3JlIGluZm86 IEhFTFAgUkxPR0lOLgorCisgICBNYWtpbmcgYW4gU1NIIENvbm5lY3Rpb24KKyAgICAgICAgICBV bmxpa2UgVGVsbmV0IGFuZCBSbG9naW4sIFNTSCBjb25uZWN0aW9ucyBhcmUgbm90IGJ1aWx0LWlu LCBidXQKKyAgICAgICAgICBoYW5kbGVkIGJ5IHJ1bm5pbmcgeW91ciBleHRlcm5hbCBTU0ggY2xp ZW50IHRocm91Z2ggYQorICAgICAgICAgIHBzZXVkb3Rlcm1pbmFsLiBVc2luZyBDLUtlcm1pdCB0 byBjb250cm9sIHRoZSBTU0ggY2xpZW50IGdpdmVzCisgICAgICAgICAgeW91IGFsbCBvZiBLZXJt aXQncyBmZWF0dXJlcyAoZmlsZSB0cmFuc2ZlciwgY2hhcmFjdGVyLXNldAorICAgICAgICAgIGNv bnZlcnNpb24sIHNjcmlwdGluZywgZXRjKSBvdmVyIFNTSC4KKworICBzc2ggZm9vLmJhci5jb20g ICAgICAgICAgICA7IFN1YnN0aXR1dGUgZGVzaXJlZCBob3N0IG5hbWUgb3IgYWRkcmVzcy4KKwor ICAgICAgICAgIE1vcmUgaW5mbzogSEVMUCBTU0gsIEhFTFAgU0VUIFNTSC4KKworICAgRGlhbGlu ZyB3aXRoIGEgTW9kZW0KKyAgICAgICAgICBJZiBpdCdzIGFuIGV4dGVybmFsIG1vZGVtLCBtYWtl IHN1cmUgaXQgaXMgY29ubmVjdGVkIHRvIGEgdXNhYmxlCisgICAgICAgICAgc2VyaWFsIHBvcnQg b24geW91ciBjb21wdXRlciB3aXRoIGEgcmVndWxhciAoc3RyYWlnaHQtdGhyb3VnaCkKKyAgICAg ICAgICBbMTA1XW1vZGVtIGNhYmxlLCBhbmQgdG8gdGhlIHRlbGVwaG9uZSBqYWNrIHdpdGggYSB0 ZWxlcGhvbmUKKyAgICAgICAgICBjYWJsZSwgYW5kIHRoYXQgaXQncyB0dXJuZWQgb24uIFRoZW4g dXNlIHRoZXNlIGNvbW1hbmRzOgorCisgIHNldCBtb2RlbSB0eXBlIHVzcm9ib3RpY3MgIDsgT3Ig b3RoZXIgc3VwcG9ydGVkIHR5cGUKKyAgc2V0IGxpbmUgL2Rldi90dHlTMCAgICAgICAgOyBTcGVj aWZ5IGRldmljZSBuYW1lCisgIHNldCBzcGVlZCA1NzYwMCAgICAgICAgICAgIDsgT3Igb3RoZXIg ZGVzaXJlZCBzcGVlZAorICBzZXQgZmxvdyBydHMvY3RzICAgICAgICAgICA7IE1vc3QgbW9kZXJu IG1vZGVtcyBzdXBwb3J0IHRoaXMKKyAgc2V0IGRpYWwgbWV0aG9kIHRvbmUgICAgICAgOyAob3Ig cHVsc2UpCisgIGRpYWwgNzY1NDMyMSAgICAgICAgICAgICAgIDsgRGlhbCB0aGUgZGVzaXJlZCBu dW1iZXIKKworICAgICAgICAgIFR5cGUgInNldCBtb2RlbSB0eXBlID8iIGZvciBhIGxpc3Qgb2Yg c3VwcG9ydGVkIG1vZGVtIHR5cGVzLiBJZgorICAgICAgICAgIHlvdSBvbWl0IHRoZSBTRVQgTU9E RU0gVFlQRSBjb21tYW5kLCB0aGUgZGVmYXVsdCB0eXBlIGlzCisgICAgICAgICAgImdlbmVyaWMt aGlnaC1zcGVlZCIsIHdoaWNoIHNob3VsZCB3b3JrIGZvciBtb3N0IG1vZGVybgorICAgICAgICAg IEFULWNvbW1hbmQtc2V0IG1vZGVtcy4gSWYgdGhlIGxpbmUgaXMgYnVzeSwgS2VybWl0IHJlZGlh bHMKKyAgICAgICAgICBhdXRvbWF0aWNhbGx5LiBJZiB0aGUgY2FsbCBkb2VzIG5vdCBzdWNjZWVk LCB1c2UgInNldCBkaWFsCisgICAgICAgICAgZGlzcGxheSBvbiIgYW5kIHRyeSBpdCBhZ2FpbiB0 byB3YXRjaCB3aGF0IGhhcHBlbnMuIElmIHRoZSBjYWxsCisgICAgICAgICAgc3VjY2VlZHMsIEtl cm1pdCBlbnRlcnMgQ29ubmVjdCBzdGF0ZSBhdXRvbWF0aWNhbGx5IGFuZCByZXR1cm5zCisgICAg ICAgICAgdG8gaXRzIHByb21wdCBhdXRvbWF0aWNhbGx5IHdoZW4geW91IGxvZyBvdXQgZnJvbSB0 aGUgcmVtb3RlCisgICAgICAgICAgY29tcHV0ZXIgb3IgdGhlIGNvbm5lY3Rpb24gaXMgb3RoZXJ3 aXNlIGxvc3QuCisKKyAgICAgICAgICBZb3UgY2FuIGFsc28gZGlhbCBmcm9tIGEgbW9kZW0gdGhh dCBpcyBhY2Nlc3NpYmxlIGJ5IFRlbG5ldCwKKyAgICAgICAgICBlLmcuIHRvIGEgcmV2ZXJzZSB0 ZXJtaW5hbCBzZXJ2ZXIuIEluIHRoaXMgY2FzZSB0aGUgY29tbWFuZAorICAgICAgICAgIHNlcXVl bmNlIGlzOgorCisgIHNldCBob3N0IHRzLnh4eC5jb20gMjAwMCAgIDsgVGVybWluYWwtc2VydmVy IGFuZCBwb3J0CisgIHNldCBtb2RlbSB0eXBlIHVzcm9ib3RpY3MgIDsgT3Igb3RoZXIgc3VwcG9y dGVkIHR5cGUKKyAgc2V0IGRpYWwgbWV0aG9kIHRvbmUgICAgICAgOyAob3IgcHVsc2UpCisgIGRp YWwgNzY1NDMyMSAgICAgICAgICAgICAgIDsgRGlhbCB0aGUgZGVzaXJlZCBudW1iZXIKKworICAg ICAgICAgIElmIHRoZSB0ZXJtaW5hbCBzZXJ2ZXIgc3VwcG9ydHMgdGhlIFRlbG5ldCBDb20gUG9y dCBPcHRpb24sCisgICAgICAgICAgWzEwNl1SRkMgMjIxNywgeW91IGNhbiBhbHNvIGdpdmUgc2Vy aWFsLXBvcnQgcmVsYXRlZCBjb21tYW5kcworICAgICAgICAgIHN1Y2ggYXMgU0VUIFNQRUVELCBT RVQgUEFSSVRZLCBhbmQgc28gb24sIGFuZCBLZXJtaXQgcmVsYXlzIHRoZW0KKyAgICAgICAgICB0 byB0aGUgdGVybWluYWwgc2VydmVyIHVzaW5nIHRoZSBwcm90b2NvbCBzcGVjaWZpZWQgaW4gdGhl IFJGQy4KKworICAgICAgICAgIE1vcmUgaW5mbzogSEVMUCBTRVQgTU9ERU0sIEhFTFAgU0VUIExJ TkUsIEhFTFAgU0VUIFNQRUVELCBIRUxQCisgICAgICAgICAgU0VUIEZMT1csIEhFTFAgRElBTCwg SEVMUCBTRVQgRElBTCwgSEVMUCBTRVQgTU9ERU0sIEhFTFAgU0VUCisgICAgICAgICAgQ0FSUklF Ui1XQVRDSCwgU0hPVyBDT01NVU5JQ0FUSU9OUywgU0hPVyBNT0RFTSwgU0hPVyBESUFMLgorCisg ICBEaXJlY3QgU2VyaWFsIFBvcnQKKyAgICAgICAgICBDb25uZWN0IHRoZSB0d28gY29tcHV0ZXJz LCBBIGFuZCBCLCB3aXRoIGEgWzEwN11udWxsIG1vZGVtIGNhYmxlCisgICAgICAgICAgKG9yIHR3 byBtb2RlbSBjYWJsZXMgaW50ZXJjb25uZWN0ZWQgd2l0aCBhIG51bGwtbW9kZW0gYWRhcHRlciBv cgorICAgICAgICAgIG1vZGVtIGVsaW1pbmF0b3IpLiBGcm9tIENvbXB1dGVyIEE6CisKKyAgc2V0 IG1vZGVtIHR5cGUgbm9uZSAgICAgICAgOyBUaGVyZSBpcyBubyBtb2RlbQorICBzZXQgbGluZSAv ZGV2L3R0eVMwICAgICAgICA7IFNwZWNpZnkgZGV2aWNlIG5hbWUKKyAgc2V0IGNhcnJpZXItd2F0 Y2ggb2ZmICAgICAgOyBJZiBEVFIgYW5kIENEIGFyZSBub3QgY3Jvc3MtY29ubmVjdGVkCisgIHNl dCBzcGVlZCA1NzYwMCAgICAgICAgICAgIDsgT3Igb3RoZXIgZGVzaXJlZCBzcGVlZAorICBzZXQg ZmxvdyBydHMvY3RzICAgICAgICAgICA7IElmIFJUUyBhbmQgQ1RTIGFyZSBjcm9zcy1jb25uZWN0 ZWQKKyAgc2V0IGZsb3cgeG9uL3hvZmYgICAgICAgICAgOyBJZiB5b3UgY2FuJ3QgdXNlIFJUUy9D VFMKKyAgc2V0IHBhcml0eSBldmVuICAgICAgICAgICAgOyAob3IgIm1hcmsiIG9yICJzcGFjZSIs IGlmIG5lY2Vzc2FyeSkKKyAgc2V0IHN0b3AtYml0cyAyICAgICAgICAgICAgOyAocmFyZWx5IG5l Y2Vzc2FyeSkKKyAgY29ubmVjdCAgICAgICAgICAgICAgICAgICAgOyBFbnRlciBDb25uZWN0ICh0 ZXJtaW5hbCkgc3RhdGUKKworICAgICAgICAgIFRoaXMgYXNzdW1lcyBDb21wdXRlciBCIGlzIHNl dCB1cCB0byBsZXQgeW91IGxvZyBpbi4gSWYgaXQKKyAgICAgICAgICBpc24ndCwgeW91IGNhbiBy dW4gYSBjb3B5IG9mIEtlcm1pdCBvbiBDb21wdXRlciBCIGFuZCBmb2xsb3cKKyAgICAgICAgICBh cHByb3hpbWF0ZWx5IHRoZSBzYW1lIGRpcmVjdGlvbnMuIE1vcmUgaW5mbzogQXMgYWJvdmUgcGx1 cyBIRUxQCisgICAgICAgICAgQ09OTkVDVC4KKworICAgV2l0aCBtb2RlbXMgb3IgZGlyZWN0IHNl cmlhbCBjb25uZWN0aW9ucywgeW91IG1pZ2h0IGFsc28gaGF2ZSB0byAic2V0CisgICBwYXJpdHkg ZXZlbiIgKG9yICJtYXJrIiBvciAic3BhY2UiKSBpZiBpdCdzIGEgNy1iaXQgY29ubmVjdGlvbi4K KworICAgT2YgdGhlIGNvbm5lY3Rpb24gdHlwZXMgbGlzdGVkIGFib3ZlLCBvbmx5IG9uZSBjYW4g YmUgb3BlbiBhdCBhIHRpbWUuCisgICBIb3dldmVyLCBhbnkgb25lIG9mIHRoZXNlIGNhbiBiZSBv cGVuIGNvbmN1cnJlbnRseSB3aXRoIGFuIFsxMDhdRlRQIG9yCisgICBIVFRQIHNlc3Npb24uIEVh Y2ggY29ubmVjdGlvbiB0eXBlIGNhbiBiZSBjdXN0b21pemVkIHRvIGFueSBkZXNpcmVkCisgICBk ZWdyZWUsIHNjcmlwdGVkLCBsb2dnZWQsIHlvdSBuYW1lIGl0LiBTZWUgdGhlIG1hbnVhbC4KKwor ICAgTk9URTogT24gc2VsZWN0ZWQgcGxhdGZvcm1zLCBDLUtlcm1pdCBhbHNvIGNhbiBtYWtlIFgu MjUgY29ubmVjdGlvbnMuCisgICBTZWUgdGhlIG1hbnVhbCBmb3IgZGV0YWlscy4KKworICAgWzEw OV1LZXJtaXQgSG9tZSBbMTEwXUMtS2VybWl0IEhvbWUgWzExMV1DLUtlcm1pdCBGQVEKKworVFJB TlNGRVJSSU5HIEZJTEVTIFdJVEggS0VSTUlUCisKKyAgIFsxMTJdVG9wIFsxMTNdQ29udGVudHMg WzExNF1OZXh0IFsxMTVdUHJldmlvdXMKKworICAgICAqIFsxMTZdRG93bmxvYWRpbmcgRmlsZXMK KyAgICAgKiBbMTE3XVVwbG9hZGluZyBGaWxlcworICAgICAqIFsxMThdS2VybWl0IFRyYW5zZmVy cyB0aGUgT2xkLUZhc2hpb25lZCBXYXkKKyAgICAgKiBbMTE5XUlmIEZpbGUgVHJhbnNmZXIgRmFp bHMKKyAgICAgKiBbMTIwXUFkdmFuY2VkIEtlcm1pdCBGaWxlIFRyYW5zZmVyIEZlYXR1cmVzCisg ICAgICogWzEyMV1Ob24tS2VybWl0IEZpbGUgVHJhbnNmZXIKKworICAgVGhlcmUgaXMgYSBbMTIy XXdpZGVzcHJlYWQgYW5kIHBlcnNpc3RlbnQgYmVsaWVmIHRoYXQgS2VybWl0IGlzIGEgc2xvdwor ICAgcHJvdG9jb2wuIFRoaXMgaXMgYmVjYXVzZSwgdW50aWwgcmVjZW50bHksIGl0IHVzZWQgY29u c2VydmF0aXZlIHR1bmluZworICAgYnkgZGVmYXVsdCB0byBtYWtlIHN1cmUgZmlsZSB0cmFuc2Zl cnMgc3VjY2VlZGVkLCByYXRoZXIgdGhhbiBmYWlsaW5nCisgICBiZWNhdXNlIHRoZXkgb3Zlcmxv YWRlZCB0aGUgY29ubmVjdGlvbi4gU29tZSBleHRyYSBjb21tYW5kcyAob3IKKyAgIGNvbW1hbmQt bGluZSBvcHRpb25zLCBsaWtlIC1RKSB3ZXJlIG5lZWRlZCB0byBtYWtlIGl0IGdvIGZhc3QsIGJ1 dAorICAgbm9ib2R5IGJvdGhlcmVkIHRvIGZpbmQgb3V0IGFib3V0IHRoZW0uIEFsc28sIGl0IHRh a2VzIHR3byB0byB0YW5nbzoKKyAgIG1vc3Qgbm9uLUtlcm1pdC1Qcm9qZWN0IEtlcm1pdCBwcm90 b2NvbCBpbXBsZW1lbnRhdGlvbnMgcmVhbGx5IEFSRQorICAgc2xvdy4gVGhlIGJlc3QgZmlsZS10 cmFuc2ZlciBwYXJ0bmVycyBmb3IgQy1LZXJtaXQgYXJlOiBhbm90aGVyIGNvcHkgb2YKKyAgIFsx MjNdQy1LZXJtaXQgKDcuMCBvciBsYXRlcikgYW5kIFsxMjRdS2VybWl0IDk1LiBUaGVzZSBjb21i aW5hdGlvbnMKKyAgIHdvcmsgd2VsbCBhbmQgdGhleSB3b3JrIGZhc3QgYnkgZGVmYXVsdC4gTVMt RE9TIEtlcm1pdCBpcyBnb29kIHRvbywgYnV0CisgICB5b3UgaGF2ZSB0byB0ZWxsIGl0IHRvIGdv IGZhc3QgKGJ5IGdpdmluZyBpdCB0aGUgRkFTVCBjb21tYW5kKS4KKworICAgRnVydGhlcm1vcmUs IGFsbCB0aHJlZSBvZiB0aGVzZSBLZXJtaXQgcHJvZ3JhbXMgc3VwcG9ydCAiYXV0b2Rvd25sb2Fk IgorICAgYW5kICJhdXRvdXBsb2FkIiwgbWVhbmluZyB0aGF0IHdoZW4gdGhleSBhcmUgaW4gQ29u bmVjdCBzdGF0ZSBhbmQgYQorICAgS2VybWl0IHBhY2tldCBjb21lcyBpbiBmcm9tIHRoZSByZW1v dGUsIHRoZXkgYXV0b21hdGljYWxseSBzd2l0Y2ggaW50bworICAgZmlsZSB0cmFuc2ZlciBtb2Rl LgorCisgICBBbmQgcGx1cywgQy1LZXJtaXQgYW5kIEs5NSBhbHNvIHN3aXRjaCBhdXRvbWF0aWNh bGx5IGJldHdlZW4gdGV4dCBhbmQKKyAgIGJpbmFyeSBtb2RlIGZvciBlYWNoIGZpbGUsIHNvIHRo ZXJlIGlzIG5vIG5lZWQgdG8gInNldCBmaWxlIHR5cGUKKyAgIGJpbmFyeSIgb3IgInNldCBmaWxl IHR5cGUgdGV4dCIsIG9yIHRvIHdvcnJ5IGFib3V0IGZpbGVzIGJlaW5nCisgICBjb3JydXB0ZWQg YmVjYXVzZSB0aGV5IHdlcmUgdHJhbnNmZXJyZWQgaW4gdGhlIHdyb25nIG1vZGUuCisKKyAgIFdo YXQgYWxsIG9mIHRoZXNlIHdvcmRzIGFkZCB1cCB0byBpcyB0aGF0IG5vdywgd2hlbiB5b3UgdXNl IHVwLXRvLWRhdGUKKyAgIEtlcm1pdCBzb2Z0d2FyZSBmcm9tIHRoZSBLZXJtaXQgUHJvamVjdCwg ZmlsZSB0cmFuc2ZlciBpcyBub3Qgb25seQorICAgZmFzdCwgaXQncyByaWRpY3Vsb3VzbHkgZWFz eS4gWW91IGJhcmVseSBoYXZlIHRvIGdpdmUgYW55IGNvbW1hbmRzIGF0CisgICBhbGwuCisKKyAg IERvd25sb2FkaW5nIEZpbGVzCisgICAgICAgICAgTGV0J3Mgc2F5IHlvdSBoYXZlIFsxMjVdS2Vy bWl0IDk1LCBbMTI2XUMtS2VybWl0LCBvciBbMTI3XU1TLURPUworICAgICAgICAgIEtlcm1pdCBv biB5b3VyIGRlc2t0b3AgY29tcHV0ZXIsIHdpdGggYSBjb25uZWN0aW9uIHRvIGEgVW5peAorICAg ICAgICAgIGNvbXB1dGVyIHRoYXQgaGFzIEMtS2VybWl0IGluc3RhbGxlZCBhcyAia2VybWl0Ii4g VG8gZG93bmxvYWQgYQorICAgICAgICAgIGZpbGUgKHNlbmQgaXQgZnJvbSBVbml4IHRvIHlvdXIg ZGVza3RvcCBjb21wdXRlciksIGp1c3QgdHlwZSB0aGUKKyAgICAgICAgICBmb2xsb3dpbmcgY29t bWFuZCBhdCB5b3VyIFVuaXggc2hlbGwgcHJvbXB0OgorCisgIGtlcm1pdCAtcyBvb2ZhLnR4dAor CisgICAgICAgICAgKHdoZXJlIG9vZmEudHh0IGlzIHRoZSBmaWxlbmFtZSkuIElmIHlvdSB3YW50 IHRvIHNlbmQgbW9yZSB0aGFuCisgICAgICAgICAgb25lIGZpbGUsIHlvdSBjYW4gcHV0IGFzIG1h bnkgZmlsZW5hbWVzIGFzIHlvdSB3YW50IG9uIHRoZQorICAgICAgICAgIGNvbW1hbmQgbGluZSwg YW5kIHRoZXkgY2FuIGJlIGFueSBjb21iaW5hdGlvbiBvZiB0ZXh0IGFuZAorICAgICAgICAgIGJp bmFyeToKKworICBrZXJtaXQgLXMgb29mYS50eHQgb29mYS56aXAgb29mYS5odG1sIG9vZmEudGFy Lmd6CisKKyAgICAgICAgICBhbmQvb3IgeW91IGNhbiB1c2Ugd2lsZGNhcmRzIHRvIHNlbmQgZ3Jv dXBzIG9mIGZpbGVzOgorCisgIGtlcm1pdCAtcyBvb2ZhLioKKworICAgICAgICAgIElmIHlvdSB3 YW50IHRvIHNlbmQgYSBmaWxlIHVuZGVyIGFuIGFzc3VtZWQgbmFtZSwgdXNlOgorCisgIGtlcm1p dCAtcyBmcmlkYXkudHh0IC1hIHRvZGF5LnR4dAorCisgICAgICAgICAgVGhpcyBzZW5kcyB0aGUg ZmlsZSBmcmlkYXkudHh0IGJ1dCB0ZWxscyB0aGUgcmVjZWl2aW5nIEtlcm1pdAorICAgICAgICAg IHRoYXQgaXRzIG5hbWUgaXMgdG9kYXkudHh0LiBJbiBhbGwgY2FzZXMsIGFzIG5vdGVkLCB3aGVu IHRoZQorICAgICAgICAgIGZpbGUgdHJhbnNmZXIgaXMgZmluaXNoZWQsIHlvdXIgZGVza3RvcCBL ZXJtaXQgcmV0dXJucworICAgICAgICAgIGF1dG9tYXRpY2FsbHkgdG8gQ29ubmVjdCBzdGF0ZS4g Tm8gd29ycmllcyBhYm91dCBlc2NhcGluZyBiYWNrLAorICAgICAgICAgIHJlLWNvbm5lY3Rpbmcs IHRleHQvYmluYXJ5IG1vZGUgc3dpdGNoaW5nLiBBbG1vc3QgdG9vIGVhc3ksCisgICAgICAgICAg cmlnaHQ/CisKKyAgIFVwbG9hZGluZyBGaWxlcworICAgICAgICAgIFRvIHVwbG9hZCBmaWxlcyAo c2VuZCB0aGVtIGZyb20geW91ciBkZXNrdG9wIGNvbXB1dGVyIHRvIHRoZQorICAgICAgICAgIHJl bW90ZSBVbml4IGNvbXB1dGVyKSBkbyB0aGUgc2FtZSB0aGluZywgYnV0IHVzZSB0aGUgLWcgKEdF VCkKKyAgICAgICAgICBvcHRpb24gaW5zdGVhZCBvZiAtczoKKworICBrZXJtaXQgLWcgb29mYS50 eHQKKworICAgICAgICAgIFRoaXMgY2F1c2VzIHlvdXIgbG9jYWwgS2VybWl0IHRvIGVudGVyIHNl cnZlciBtb2RlOyB0aGVuIHRoZQorICAgICAgICAgIHJlbW90ZSBLZXJtaXQgcHJvZ3JhbSByZXF1 ZXN0cyB0aGUgbmFtZWQgZmlsZSBhbmQgdGhlIGxvY2FsCisgICAgICAgICAgS2VybWl0IHNlbmRz IGl0IGFuZCByZXR1cm5zIGF1dG9tYXRpY2FsbHkgdG8gQ29ubmVjdCBzdGF0ZSB3aGVuCisgICAg ICAgICAgZG9uZS4KKworICAgICAgICAgIElmIHlvdSB3YW50IHRvIHVwbG9hZCBtdWx0aXBsZSBm aWxlcywgeW91IGhhdmUgaGF2ZSB1c2Ugc2hlbGwKKyAgICAgICAgICBxdW90aW5nIHJ1bGVzLCBz aW5jZSB0aGVzZSBhcmVuJ3QgbG9jYWwgZmlsZXM6CisKKyAga2VybWl0IC1nICJvb2ZhLnR4dCBv b2ZhLnppcCBvb2ZhLmh0bWwgb29mYS50YXIuZ3oiCisgIGtlcm1pdCAtZyAib29mYS4qIgorCisg ICAgICAgICAgSWYgeW91IHdhbnQgdG8gdXBsb2FkIGEgZmlsZSBidXQgc3RvcmUgaXQgdW5kZXIg YSBkaWZmZXJlbnQKKyAgICAgICAgICBuYW1lLCB1c2U6CisKKyAga2VybWl0IC1nIGZyaWRheS50 eHQgLWEgdG9kYXkudHh0CisKKyAgIEtlcm1pdCBUcmFuc2ZlcnMgdGhlIE9sZC1GYXNoaW9uZWQg V2F5CisgICAgICAgICAgSWYgeW91ciBkZXNrdG9wIGNvbW11bmljYXRpb25zIHNvZnR3YXJlIGRv ZXMgbm90IHN1cHBvcnQKKyAgICAgICAgICBhdXRvdXBsb2FkIG9yIGF1dG9kb3dubG9hZCwgb3Ig aXQgZG9lcyBub3QgaW5jbHVkZSBLZXJtaXQgc2VydmVyCisgICAgICAgICAgbW9kZSwgdGhlIHBy b2NlZHVyZSByZXF1aXJlcyBtb3JlIHN0ZXBzLgorCisgICAgICAgICAgVG8gZG93bmxvYWQgYSBm aWxlLCB0eXBlOgorCisgIGtlcm1pdCAtcyBmaWxlbmFtZQorCisgICAgICAgICAgb24gdGhlIGhv c3QgYXMgYmVmb3JlLCBidXQgaWYgbm90aGluZyBoYXBwZW5zIGF1dG9tYXRpY2FsbHkgaW4KKyAg ICAgICAgICByZXNwb25zZSB0byB0aGlzIGNvbW1hbmQsIHlvdSBoYXZlIHRvIHN3aXRjaCB5b3Vy IGRlc2t0b3AKKyAgICAgICAgICBjb21tdW5pY2F0aW9ucyBzb2Z0d2FyZSBpbnRvIEtlcm1pdCBS ZWNlaXZlIHN0YXRlLiBUaGlzIG1pZ2h0IGJlCisgICAgICAgICAgZG9uZSBieSBlc2NhcGluZyBi YWNrIHVzaW5nIGtleWJvYXJkIGNoYXJhY3RlcnMgb3IgaG90IGtleXMKKyAgICAgICAgICAoQWx0 LXggaXMgdHlwaWNhbCkgYW5kL29yIHdpdGggYSBjb21tYW5kIChsaWtlIFJFQ0VJVkUpIG9yIGEK KyAgICAgICAgICBtZW51LiBXaGVuIHRoZSBmaWxlIHRyYW5zZmVyIGlzIGNvbXBsZXRlLCB5b3Ug aGF2ZSB0byBnbyBiYWNrIHRvCisgICAgICAgICAgQ29ubmVjdCBzdGF0ZSwgVGVybWluYWwgZW11 bGF0aW9uLCBvciB3aGF0ZXZlciB0ZXJtaW5vbG9neQorICAgICAgICAgIGFwcGxpZXMgdG8geW91 ciBkZXNrdG9wIGNvbW11bmljYXRpb25zIHNvZnR3YXJlLgorCisgICAgICAgICAgVG8gdXBsb2Fk IGEgZmlsZSwgdHlwZToKKworICBrZXJtaXQgLXIKKworICAgICAgICAgIG9uIHRoZSBob3N0IChy YXRoZXIgdGhhbiAia2VybWl0IC1nIikuIFRoaXMgdGVsbHMgQy1LZXJtaXQgdG8KKyAgICAgICAg ICB3YWl0IHBhc3NpdmVseSBmb3IgYSBmaWxlIHRvIHN0YXJ0IGFycml2aW5nLiBUaGVuIHJlZ2Fp biB0aGUKKyAgICAgICAgICBhdHRlbnRpb24gb2YgeW91ciBkZXNrdG9wIHNvZnR3YXJlIChBbHQt eCBvciB3aGF0ZXZlcikgYW5kCisgICAgICAgICAgaW5zdHJ1Y3QgaXQgdG8gc2VuZCB0aGUgZGVz aXJlZCBmaWxlKHMpIHdpdGggS2VybWl0IHByb3RvY29sLgorICAgICAgICAgIFdoZW4gdGhlIHRy YW5zZmVyIGlzIGZpbmlzaGVkLCByZXR1cm4gdG8gdGhlIENvbm5lY3Qgb3IgVGVybWluYWwKKyAg ICAgICAgICBzY3JlZW4uCisKKyAgIElmIEZpbGUgVHJhbnNmZXIgRmFpbHMKKyAgICAgICAgICBB bHRob3VnaCBldmVyeSBhc3BlY3Qgb2YgS2VybWl0J3Mgb3BlcmF0aW9uIGNhbiBiZSBmaW5lbHkg dHVuZWQsCisgICAgICAgICAgdGhlcmUgYXJlIGFsc28gdGhyZWUgc2hvcnQgYW5kIHNpbXBsZSAi b21uaWJ1cyB0dW5pbmciIGNvbW1hbmRzCisgICAgICAgICAgeW91IGNhbiB1c2UgZm9yIHRyb3Vi bGVzaG9vdGluZzoKKworICAgICAgICBGQVNUCisgICAgICAgICAgICAgICAgVXNlIGZhc3QgZmls ZS10cmFuc2ZlciBzZXR0aW5ncy4gVGhpcyBoYXMgYmVlbiB0aGUgZGVmYXVsdAorICAgICAgICAg ICAgICAgIHNpbmNlIEMtS2VybWl0IDcuMCBub3cgdGhhdCBtb3N0IG1vZGVybiBjb21wdXRlcnMg YW5kCisgICAgICAgICAgICAgICAgY29ubmVjdGlvbnMgc3VwcG9ydCBpdC4gSWYgdHJhbnNmZXJz IGZhaWwgd2l0aCBmYXN0CisgICAgICAgICAgICAgICAgc2V0dGluZ3MsIHRyeSAuIC4gLgorCisg ICAgICAgIENBVVRJT1VTCisgICAgICAgICAgICAgICAgVXNlIGNhdXRpb3VzIGJ1dCBub3QgcGFy YW5vaWQgc2V0dGluZ3MuIEZpbGUgdHJhbnNmZXJzLCBpZgorICAgICAgICAgICAgICAgIHRoZXkg d29yaywgd2lsbCBnbyBhdCBtZWRpdW0gc3BlZWQuIElmIG5vdCwgdHJ5IC4gLiAuCisKKyAgICAg ICAgUk9CVVNUCisgICAgICAgICAgICAgICAgVXNlIHRoZSBtb3N0IHJvYnVzdCwgcmVzaWxpZW50 LCBjb25zZXJ2YXRpdmUsIHNhZmUsIGFuZAorICAgICAgICAgICAgICAgIHJlbGlhYmxlIHNldHRp bmdzLiBGaWxlIHRyYW5zZmVycyB3aWxsIGFsbW9zdCBjZXJ0YWlubHkKKyAgICAgICAgICAgICAg ICB3b3JrLCBidXQgdGhleSB3aWxsIGJlIHF1aXRlIHNsb3cgKG9mIGNvdXJzZSB0aGlzIGlzIGEK KyAgICAgICAgICAgICAgICBjbGFzc2ljIHRyYWRlb2ZmOyBST0JVU1Qgd2FzIEMtS2VybWl0J3Mg ZGVmYXVsdCB0dW5pbmcgaW4KKyAgICAgICAgICAgICAgICB2ZXJzaW9ucyA2LjAgYW5kIGVhcmxp ZXIsIHdoaWNoIG1hZGUgZXZlcnlib2R5IHRoaW5rCisgICAgICAgICAgICAgICAgS2VybWl0IHBy b3RvY29sIHdhcyBzbG93KS4gSWYgUk9CVVNUIGRvZXNuJ3QgZG8gdGhlIHRyaWNrLAorICAgICAg ICAgICAgICAgIHRyeSBhZ2FpbiB3aXRoIFNFVCBQQVJJVFkgU1BBQ0UgZmlyc3QgaW4gY2FzZSBp dCdzIG5vdCBhbgorICAgICAgICAgICAgICAgIDgtYml0IGNvbm5lY3Rpb24uCisKKyAgICAgICAg ICBPYnZpb3VzbHkgdGhlIHN1Y2Nlc3MgYW5kIHBlcmZvcm1hbmNlIG9mIGEgZmlsZSB0cmFuc2Zl ciBhbHNvCisgICAgICAgICAgZGVwZW5kcyBvbiBDLUtlcm1pdCdzIGZpbGUgdHJhbnNmZXIgcGFy dG5lci4gVXAtdG8tZGF0ZSwgcmVhbAorICAgICAgICAgIFsxMjhdS2VybWl0IFByb2plY3QgcGFy dG5lcnMgYXJlIHJlY29tbWVuZGVkIGJlY2F1c2UgdGhleQorICAgICAgICAgIGNvbnRhaW4gdGhl IGJlc3QgS2VybWl0IHByb3RvY29sIGltcGxlbWVudGF0aW9ucyBhbmQgYmVjYXVzZQorICAgICAg ICAgIFsxMjldd2UgY2FuIHN1cHBvcnQgdGhlbSBpbiBjYXNlIG9mIHRyb3VibGUuCisKKyAgICAg ICAgICBJZiB5b3Ugc3RpbGwgaGF2ZSB0cm91YmxlLCBjb25zdWx0IENoYXB0ZXIgMTAgb2YgWzEz MF1Vc2luZworICAgICAgICAgIEMtS2VybWl0LCBvciBzZW5kIGVtYWlsIHRvIFsxMzFda2VybWl0 LXN1cHBvcnRAY29sdW1iaWEuZWR1LgorCisgICBBZHZhbmNlZCBLZXJtaXQgRmlsZS1UcmFuc2Zl ciBGZWF0dXJlcworICAgICAgICAgIE9idmlvdXNseSB0aGVyZSBpcyBhIGxvdCBtb3JlIHRvIEtl cm1pdCBmaWxlIHRyYW5zZmVyLCBpbmNsdWRpbmcKKyAgICAgICAgICBhbGwgc29ydHMgb2YgaW50 ZXJhY3RpdmUgY29tbWFuZHMsIHByZWZlcmVuY2VzLCBvcHRpb25zLAorICAgICAgICAgIGxvZ2dp bmcsIGRlYnVnZ2luZywgdHJvdWJsZXNob290aW5nLCBhbmQgYW55dGhpbmcgZWxzZSB5b3UgY2Fu CisgICAgICAgICAgaW1hZ2luZSBidXQgdGhhdCdzIHdoYXQgdGhlIFsxMzJdbWFudWFsIGFuZCB1 cGRhdGVzIGFyZSBmb3IuCisgICAgICAgICAgSGVyZSBhcmUgYSBmZXcgdG9waWNzIHlvdSBjYW4g ZXhwbG9yZSBpZiB5b3UncmUgaW50ZXJlc3RlZCBieQorICAgICAgICAgIFR5cGluZyBIRUxQIGZv ciB0aGUgbGlzdGVkIGNvbW1hbmRzOgorCisgICAgICAgIExvZ2dpbmcgdHJhbnNmZXJzOgorICAg ICAgICAgICAgICAgIExPRyBUUkFOU0FDVElPTlMgKEhFTFAgTE9HKQorCisgICAgICAgIEF1dG9t YXRpYyBwZXItZmlsZSB0ZXh0L2JpbmFyeSBtb2RlIHN3aXRjaGluZzoKKyAgICAgICAgICAgICAg ICBTRVQgVFJBTlNGRVIgTU9ERSB7IEFVVE9NQVRJQywgTUFOVUFMIH0gKEhFTFAgU0VUCisgICAg ICAgICAgICAgICAgVFJBTlNGRVIpLgorCisgICAgICAgIENyb3NzLXBsYXRmb3JtIHJlY3Vyc2l2 ZSBkaXJlY3RvcnkgdHJlZSB0cmFuc2ZlcjoKKyAgICAgICAgICAgICAgICBTRU5EIC9SRUNVUlNJ VkUsIEdFVCAvUkVDVVJTSVZFIChIRUxQIFNFTkQsIEhFTFAgR0VUKS4KKworICAgICAgICBGaWxl IGNvbGxpc2lvbiBvcHRpb25zOgorICAgICAgICAgICAgICAgIFNFVCBGSUxFIENPTExJU0lPTiB7 IE9WRVJXUklURSwgQkFDS1VQLCBESVNDQVJELCAuLi4gfQorICAgICAgICAgICAgICAgIChIRUxQ IFNFVCBGSUxFKS4KKworICAgICAgICBVcGRhdGUgbW9kZSAob25seSB0cmFuc2ZlciBmaWxlcyB0 aGF0IGNoYW5nZWQgc2luY2UgbGFzdCB0aW1lKToKKyAgICAgICAgICAgICAgICBTRVQgRklMRSBD T0xMSVNJT04gVVBEQVRFIChIRUxQIFNFVCBGSUxFKS4KKworICAgICAgICBGaWxlbmFtZSBzZWxl Y3Rpb24gcGF0dGVybnM6CisgICAgICAgICAgICAgICAgKEhFTFAgV0lMRENBUkQpLgorCisgICAg ICAgIEZsZXhpYmxlIGZpbGUgc2VsZWN0aW9uOgorICAgICAgICAgICAgICAgIFNFTkQgKG9yIEdF VCkgL0JFRk9SRSAvQUZURVIgL0xBUkdFUiAvU01BTExFUiAvVFlQRQorICAgICAgICAgICAgICAg IC9FWENFUFQsIC4uLgorCisgICAgICAgIENoYXJhY3Rlci1zZXQgY29udmVyc2lvbjoKKyAgICAg ICAgICAgICAgICBTRVQgeyBGSUxFLCBUUkFOU0ZFUiB9IENIQVJBQ1RFUi1TRVQsIEFTU09DSUFU RSwgLi4uCisKKyAgICAgICAgRmlsZS9QYXRobmFtZSBjb250cm9sOgorICAgICAgICAgICAgICAg IFNFVCB7IFNFTkQsIFJFQ0VJVkUgfSBQQVRITkFNRVMsIFNFVCBGSUxFIE5BTUVTLgorCisgICAg ICAgIEF0b21pYyBmaWxlIG1vdmVtZW50OgorICAgICAgICAgICAgICAgIFNFTkQgKG9yIEdFVCkg L0RFTEVURSAvUkVOQU1FIC9NT1ZFLVRPCisKKyAgICAgICAgVHJhbnNmZXJyaW5nIHRvL2Zyb20g c3RhbmRhcmQgaS9vIG9mIG90aGVyIGNvbW1hbmRzOgorICAgICAgICAgICAgICAgIFNFTkQgKG9y IEdFVCkgL0NPTU1BTkQKKworICAgICAgICBSZWNvdmVyeSBvZiBpbnRlcnJ1cHRlZCB0cmFuc2Zl ciBmcm9tIHBvaW50IG9mIGZhaWx1cmU6CisgICAgICAgICAgICAgICAgUkVTRU5ELCBSRUdFVCAo SEVMUCBSRVNFTkQsIEhFTFAgUkVHRVQpLgorCisgICBOb24tS2VybWl0IEZpbGUgVHJhbnNmZXIK KyAgICAgICAgICBZb3UgY2FuIGFsc28gdXNlIEMtS2VybWl0IHRvIHRyYW5zZmVyIGZpbGVzIHdp dGggRlRQIG9yIEhUVFAKKyAgICAgICAgICBJbnRlcm5ldCBwcm90b2NvbHM7IFsxMzNdc2VlIGJl bG93LgorCisgICAgICAgICAgT24gYSByZWd1bGFyIHNlcmlhbCBvciBUZWxuZXQgY29ubmVjdGlv biB3aGVyZSB0aGUgb3RoZXIKKyAgICAgICAgICBjb21wdXRlciBkb2Vzbid0IHN1cHBvcnQgS2Vy bWl0IHByb3RvY29sIGF0IGFsbCwgeW91IGhhdmUKKyAgICAgICAgICBzZXZlcmFsIG9wdGlvbnMu IEZvciBleGFtcGxlLCBpZiB5b3VyIGRlc2t0b3AgY29tbXVuaWNhdGlvbnMKKyAgICAgICAgICBz b2Z0d2FyZSBzdXBwb3J0cyBabW9kZW0sIHVzZSAicnoiIGFuZCAic3oiIG9uIHRoZSBob3N0IHJh dGhlcgorICAgICAgICAgIHRoYW4gS2VybWl0LiBCdXQgaWYgS2VybWl0IGlzIHlvdXIgZGVza3Rv cCBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUKKyAgICAgICAgICB1c2luZyBpdCB0byBtYWtlIGNhbGxz IG9yIG5ldHdvcmsgY29ubmVjdGlvbnMgdG8gb3RoZXIgY29tcHV0ZXJzCisgICAgICAgICAgdGhh dCBkb24ndCBzdXBwb3J0IEtlcm1pdCBwcm90b2NvbCAob3IgdGhhdCBkb24ndCBoYXZlIGEgZ29v ZAorICAgICAgICAgIGltcGxlbWVudGF0aW9uIG9mIGl0KSwgdGhlbiBpZiB5b3VyIGNvbXB1dGVy IGFsc28gaGFzIGV4dGVybmFsCisgICAgICAgICAgWCwgWSwgb3IgWm1vZGVtIHByb2dyYW1zIHRo YXQgYXJlIHJlZGlyZWN0YWJsZSwgS2VybWl0IGNhbiB1c2UKKyAgICAgICAgICB0aGVtIGFzIGV4 dGVybmFsIHByb3RvY29scy4gSEVMUCBTRVQgUFJPVE9DT0wgZm9yIGRldGFpbHMuCisKKyAgICAg ICAgICBZb3UgY2FuIGFsc28gY2FwdHVyZSAicmF3IiBkYXRhIHN0cmVhbXMgZnJvbSB0aGUgb3Ro ZXIgY29tcHV0ZXIKKyAgICAgICAgICB3aXRoIExPRyBTRVNTSU9OIChIRUxQIExPRyBhbmQgSEVM UCBTRVQgU0VTU0lPTi1MT0cgZm9yCisgICAgICAgICAgZGV0YWlscyksIGFuZCB5b3UgY2FuIHVw bG9hZCBmaWxlcyB3aXRob3V0IGFueSBwcm90b2NvbCBhdCBhbGwKKyAgICAgICAgICB3aXRoIFRS QU5TTUlUIChIRUxQIFRSQU5TTUlULCBIRUxQIFNFVCBUUkFOU01JVCkuCisKKyAgIFsxMzRdS2Vy bWl0IEhvbWUgWzEzNV1DLUtlcm1pdCBIb21lIFsxMzZdQy1LZXJtaXQgRkFRCisKK0tFUk1JVCBD TElFTlQvU0VSVkVSIENPTk5FQ1RJT05TCisKKyAgIFsxMzddVG9wIFsxMzhdQ29udGVudHMgWzEz OV1OZXh0IFsxNDBdUHJldmlvdXMKKworICAgT24gYW55IGtpbmQgb2YgY29ubmVjdGlvbiB5b3Ug Y2FuIG1ha2Ugd2l0aCBLZXJtaXQgLS0gc2VyaWFsLCBUQ1AvSVAsCisgICBYLjI1LCBldGMgLS0g eW91IGNhbiBzZXQgdXAgYSBjb252ZW5pZW50IGNsaWVudC9zZXJ2ZXIgcmVsYXRpb25zaGlwCisg ICBiZXR3ZWVuIHlvdXIgS2VybWl0IGNsaWVudCAodGhlIG9uZSB0aGF0IG1hZGUgdGhlIGNvbm5l Y3Rpb24pIGFuZCB0aGUKKyAgIEtlcm1pdCBwcm9ncmFtIG9uIHRoZSBmYXIgZW5kIG9mIHRoZSBj b25uZWN0aW9uICh0aGUgcmVtb3RlIEtlcm1pdCkgYnkKKyAgIHB1dHRpbmcgdGhlIHJlbW90ZSBL ZXJtaXQgaW4gc2VydmVyIG1vZGUuIFRoaXMgaXMgbm9ybWFsbHkgZG9uZSBieQorICAgZ2l2aW5n IGl0IGEgU0VSVkVSIGNvbW1hbmQsIG9yIGJ5IHN0YXJ0aW5nIGl0IHdpdGggdGhlIC14IGNvbW1h bmQtbGluZQorICAgb3B0aW9uLiBJbiBzb21lIGNhc2VzIChbMTQxXUludGVybmV0IEtlcm1pdCBT ZXJ2aWNlLCBTU0ggY29ubmVjdGlvbnMgdG8KKyAgIGEgS2VybWl0IHN1YnN5c3RlbSwgb3Igc3Bl Y2lhbGx5IGNvbmZpZ3VyZWQgaG9zdHMpLCB0aGVyZSBpcyBhbHJlYWR5IGEKKyAgIEtlcm1pdCBz ZXJ2ZXIgd2FpdGluZyBvbiB0aGUgZmFyIGVuZC4gSGVyZSBpcyBhIHF1aWNrIHN5bm9wc2lzIG9m IHRoZQorICAgY29tbWFuZHMgeW91IGNhbiBnaXZlIHRvIHRoZSBjbGllbnQgZm9yIGludGVyYWN0 aW5nIHdpdGggdGhlIHNlcnZlcjoKKworICAgU0VORCBbIHN3aXRjaGVzIF0gZmlsZW5hbWUKKyAg ICAgICAgICBTZW5kcyB0aGUgbmFtZWQgZmlsZSB0byB0aGUgc2VydmVyLiBUaGUgZmlsZW5hbWUg Y2FuIGluY2x1ZGUKKyAgICAgICAgICB3aWxkY2FyZHMuIExvdHMgb2Ygc3dpdGNoZXMgYXJlIGF2 YWlsYWJsZSBmb3IgZmlsZSBzZWxlY3Rpb24sCisgICAgICAgICAgZXRjLiBUeXBlIEhFTFAgU0VO RCBhdCB0aGUgY2xpZW50IHByb21wdCBmb3IgZGV0YWlscy4KKworICAgR0VUIFsgc3dpdGNoZXMg XSBmaWxlbmFtZQorICAgICAgICAgIEFza3MgdGhlIHNlcnZlciB0byBzZW5kIHRoZSBuYW1lZCBm aWxlLiBUaGUgZmlsZW5hbWUgY2FuIGluY2x1ZGUKKyAgICAgICAgICB3aWxkY2FyZHMuIFR5cGUg SEVMUCBHRVQgYXQgdGhlIGNsaWVudCBwcm9tcHQgZm9yIGRldGFpbHMuCisKKyAgIEJZRQorICAg ICAgICAgIFRlcm1pbmF0ZXMgdGhlIHNlcnZlciBhbmQgY2xvc2VzIHlvdXIgY29ubmVjdGlvbiB0 byBpdC4KKworICAgRklOSVNICisgICAgICAgICAgVGVybWluYXRlcyB0aGUgc2VydmVyLiBJZiB5 b3Ugc3RhcnRlZCB0aGUgc2VydmVyIHlvdXJzZWxmLCB0aGlzCisgICAgICAgICAgbGVhdmVzIHRo ZSByZW1vdGUgaG9zdCBhdCBpdHMgc2hlbGwgcHJvbXB0LiBJZiBpdCB3YXMgYQorICAgICAgICAg IGRlZGljYXRlZCBzZXJ2ZXIgKHN1Y2ggYXMgSUtTRCBvciBhbiBTU0ggc3Vic3lzdGVtKSwgRklO SVNIIGlzCisgICAgICAgICAgZXF1aXZhbGVudCB0byBCWUUuCisKKyAgIFNFVCBMT0NVUyB7IExP Q0FMLCBSRU1PVEUsIEFVVE8gfQorICAgICAgICAgIChDLUtlcm1pdCA4LjAuMjAxIGFuZCBsYXRl ciwgSzk1IDEuMS4yMSBhbmQgbGF0ZXIpIFRoaXMgdGVsbHMKKyAgICAgICAgICB0aGUgY2xpZW50 IHdoZXRoZXIgZmlsZS1tYW5hZ2VtZW50IGNvbW1hbmRzIGxpa2UgQ0QsIFBXRCwKKyAgICAgICAg ICBESVJFQ1RPUlksIERFTEVURSwgTUtESVIsIGV0Yywgc2hvdWxkIGJlIGV4ZWN1dGVkIGxvY2Fs bHkgb3IgYnkKKyAgICAgICAgICB0aGUgc2VydmVyLiBJbiB0aGlzIHR5cGUgb2YgY29ubmVjdGlv biwgdGhlIGRlZmF1bHQgaXMgTE9DQUwuCisgICAgICAgICAgVXNlIFNFVCBMT0NVUyBSRU1PVEUg aWYgeW91IHdhbnQgS2VybWl0IHRvIGJlaGF2ZSBsaWtlIGFuIEZUUAorICAgICAgICAgIGNsaWVu dCwgaW4gd2hpY2ggY2FzZSB0aGVzZSBjb21tYW5kcyBhcmUgZXhlY3V0ZWQgcmVtb3RlbHksIGFu ZAorICAgICAgICAgIHRoZWlyIGxvY2FsIHZlcnNpb25zIG11c3QgaGF2ZSBhbiBMIHByZWZpeDog TENELCBMUFdELAorICAgICAgICAgIExESVJFQ1RPUlksIGV0Yy4gV2hlbiBMT0NVUyBpcyBMT0NB TCwgdGhlbiB0aGUgcmVtb3RlIHZlcnNpb25zCisgICAgICAgICAgbXVzdCBoYXZlIGFuIFIgcHJl Zml4OiBSQ0QsIFJQV0QsIFJESVJFQ1RPUlksIGV0Yy4gSEVMUCBTRVQKKyAgICAgICAgICBMT0NV UyBmb3IgZGV0YWlscy4gU0hPVyBDT01NQU5EIHRvIHNlZSBjdXJyZW50IGxvY3VzLgorCisgICBU aGUgZm9sbG93aW5nIGNvbW1hbmRzIGFyZSBhZmZlY3RlZCBieSBTRVQgTE9DVVM6CisKKyAgIENE LCBMQ0QsIFJDRAorICAgICAgICAgIENoYW5nZSAod29ya2luZywgY3VycmVudCkgZGlyZWN0b3J5 LiBIRUxQIENEIGZvciBkZXRhaWxzLgorCisgICBDRFVQLCBMQ0RVUCwgUkNEVVAKKyAgICAgICAg ICBDRCBvbmUgbGV2ZWwgdXAuCisKKyAgIERJUkVDVE9SWSwgTERJUkVDVE9SWSwgUkRJUkVDVE9S WQorICAgICAgICAgIFByb2R1Y2UgYSBkaXJlY3RvcnkgbGlzdGluZy4gTWFueSBvcHRpb25zIGFy ZSBhdmFpbGFibGUgZm9yCisgICAgICAgICAgbG9jYWwgbGlzdGluZ3MuIEhFTFAgRElSRUNUT1JZ IGZvciBkZXRhaWxzLgorCisgICBERUxFVEUsIExERUxFVEUsIFJERUxFVEUKKyAgICAgICAgICBE ZWxldGVzIGZpbGVzIG9yIGRpcmVjdG9yaWVzLiBNYW55IG9wdGlvbnMgYXZhaWxhYmxlLCBIRUxQ CisgICAgICAgICAgREVMRVRFLgorCisgICBSRU5BTUUsIExSRU5BTUUsIFJSRU5BTUUKKyAgICAg ICAgICBSZW5hbWVzIGZpbGVzIG9yIGRpcmVjdG9yaWVzLiBNYW55IG9wdGlvbnMgYXZhaWxhYmxl LCBIRUxQCisgICAgICAgICAgUkVOQU1FLgorCisgICBNS0RJUiwgTE1LRElSLCBSTUtESVIKKyAg ICAgICAgICBDcmVhdGVzIGEgZGlyZWN0b3J5LiBIRUxQIE1LRElSLgorCisgICBSTURJUiwgTFJN RElSLCBSUk1ESVIKKyAgICAgICAgICBSZW1vdmVzIGEgZGlyZWN0b3J5LiBIRUxQIFJNRElSLgor CisgICBUaGVyZSBhcmUgZG96ZW5zIC0tIG1heWJlIGh1bmRyZWRzIC0tIG9mIG90aGVyIGNvbW1h bmRzLCBkZXNjcmliZWQgaW4KKyAgIHRoZSBidWlsdC1pbiBoZWxwLCBvbiB0aGUgd2Vic2l0ZSwg YW5kL29yIGluIHRoZSBwdWJsaXNoZWQgb3Igb25saW5lCisgICBtYW51YWxzLiBCdXQgZXZlbiBp ZiB5b3UgZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8gZG9jdW1lbnRhdGlvbiwgeW91IGNhbgorICAgInNl dCBsb2N1cyByZW1vdGUiIGFuZCB0aGVuIHVzZSBwcmV0dHkgbXVjaCB0aGUgc2FtZSBjb21tYW5k cyB5b3Ugd291bGQKKyAgIHVzZSB3aXRoIGFueSBGVFAgY2xpZW50LgorCisgICBbMTQyXUtlcm1p dCBIb21lIFsxNDNdQy1LZXJtaXQgSG9tZSBbMTQ0XUMtS2VybWl0IEZBUQorCitLRVJNSVQnUyBC VUlMVC1JTiBGVFAgQU5EIEhUVFAgQ0xJRU5UUworCisgICBbMTQ1XVRvcCBbMTQ2XUNvbnRlbnRz IFsxNDddTmV4dCBbMTQ4XVByZXZpb3VzCisKKyAgIEtlcm1pdCdzIEZUUCBjbGllbnQgaXMgbGlr ZSB0aGUgcmVndWxhciBVbml4IEZUUCBjbGllbnQgdGhhdCB5b3UncmUKKyAgIHVzZWQgdG8sIGJ1 dCB3aXRoIHNvbWUgZGlmZmVyZW5jZXM6CisKKyAgICAgKiBJdCBoYXMgbG90cyBtb3JlIGNvbW1h bmRzIGFuZCBmZWF0dXJlcy4KKyAgICAgKiBZb3UgY2FuIGhhdmUgYW4gRlRQIHNlc3Npb24gYW5k IGEgcmVndWxhciBLZXJtaXQgc2VyaWFsIG9yIFRlbG5ldAorICAgICAgIHNlc3Npb24gb3BlbiBh dCB0aGUgc2FtZSB0aW1lLgorICAgICAqIEZUUCBzZXNzaW9ucyBjYW4gYmUgZnVsbHkgYXV0b21h dGVkLgorCisgICBCeSBkZWZhdWx0IEtlcm1pdCdzIEZUUCBjbGllbnQgdHJpZXMgaXRzIGJlc3Qg dG8gcHJlc2VudCB0aGUgc2FtZSB1c2VyCisgICBpbnRlcmZhY2UgYXMgYSByZWd1bGFyIEZUUCBj bGllbnQ6IFBVVCwgR0VULCBESVIsIENELCBCWUUsIGV0Yywgc2hvdWxkCisgICB3b3JrIHRoZSBz YW1lLCBldmVuIHRob3VnaCBzb21lIG9mIHRoZXNlIGNvbW1hbmRzIGhhdmUgZGlmZmVyZW50Cisg ICBtZWFuaW5nIGluIEtlcm1pdC10by1LZXJtaXQgY29ubmVjdGlvbnM7IGZvciBleGFtcGxlLCBD RCwgRElSLCBSRU5BTUUsCisgICBldGMsIGluIEtlcm1pdCBhY3QgbG9jYWxseSwgd2hlcmVhcyBp biBGVFAgdGhleSBhcmUgY29tbWFuZHMgZm9yIHRoZQorICAgc2VydmVyLiBUaGlzIG1pZ2h0IGNh dXNlIHNvbWUgY29uZnVzaW9uLCBidXQgYXMgaW4gYWxsIHRoaW5ncyBLZXJtaXQsCisgICB5b3Ug aGF2ZSB0b3RhbCBjb250cm9sOgorCisgICAgICogVGhlIFsxNDldU0VUIExPQ1VTIGNvbW1hbmQg bGV0cyB5b3Ugc3BlY2lmeSB3aGVyZSBmaWxlIG1hbmFnZW1lbnQKKyAgICAgICBjb21tYW5kcyBz aG91bGQgYmUgZXhlY3V0ZWQgLS0gbG9jYWxseSBvciByZW1vdGVseSAtLSBmb3IgYW55IGtpbmQK KyAgICAgICBvZiBjb25uZWN0aW9uLgorICAgICAqIEFueSBGVFAgY29tbWFuZCBjYW4gYmUgcHJl Zml4ZWQgd2l0aCB0aGUgd29yZCAiRlRQIiB0byByZW1vdmUgYW55CisgICAgICAgYW1iaWd1aXR5 LgorCisgICBQZW5kaW5nIHB1YmxpY2F0aW9uIG9mIHRoZSBuZXh0IGVkaXRpb24gb2YgdGhlIG1h bnVhbCwgdGhlIEtlcm1pdCBGVFAKKyAgIGNsaWVudCBpcyB0aG9yb3VnaGx5IGRvY3VtZW50ZWQg YXQgdGhlIEtlcm1pdCBQcm9qZWN0IHdlYnNpdGU6CisKKyAgWzE1MF1odHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvZnRwY2xpZW50Lmh0bWwKKworICAgWW91IGFsc28gY2FuIHVzZSBIRUxQ IEZUUCBhbmQgSEVMUCBTRVQgRlRQIHRvIGdldCBkZXNjcmlwdGlvbnMgb2YKKyAgIEtlcm1pdCdz IEZUUC1yZWxhdGVkIGNvbW1hbmRzLgorCisgICBUaGUgSFRUUCBjbGllbnQgaXMgc2ltaWxhciB0 byB0aGUgRlRQIG9uZSwgZXhjZXB0IHlvdSBwcmVmaXggZWFjaAorICAgY29tbWFuZCB3aXRoIEhU VFAgaW5zdGVhZCBvZiBGVFA6IEhUVFAgT1BFTiwgSFRUUCBHRVQsIEhUVFAgUFVULCBIVFRQCisg ICBDTE9TRSwgZXRjLiBUeXBlIEhFTFAgSFRUUCBmb3IgZGV0YWlscywgb3IgdmlzaXQgdGhlIHRv IHZpZXcgdGhlCisgICBbMTUxXW1hbnVhbCBzdXBwbGVtZW50cy4gSFRUUCBjb25uZWN0aW9ucyBj YW4gYmUgb3BlbiBhdCB0aGUgc2FtZSB0aW1lCisgICBhcyByZWd1bGFyIHNlcmlhbCBvciBUZWxu ZXQgY29ubmVjdGlvbnMgYW5kIEZUUCBjb25uZWN0aW9ucy4gU28gS2VybWl0CisgICBjYW4gbWFu YWdlIHVwIHRvIHRocmVlIHR5cGVzIGNvbm5lY3Rpb25zIHNpbXVsdGFuZW91c2x5LgorCisgICBb MTUyXUtlcm1pdCBIb21lIFsxNTNdQy1LZXJtaXQgSG9tZSBbMTU0XUMtS2VybWl0IEZBUSBbMTU1 XUZUUCBDbGllbnQKKyAgIFsxNTZdSFRUUCBDbGllbnQKKworSU5URVJORVQgS0VSTUlUIFNFUlZJ Q0UKKworICAgWzE1N11Ub3AgWzE1OF1Db250ZW50cyBbMTU5XU5leHQgWzE2MF1QcmV2aW91cwor CisgICBDLUtlcm1pdCBjYW4gYmUgY29uZmlndXJlZCBhbmQgcnVuIGFzIGFuIEludGVybmV0IHNl cnZpY2UgKGNhbGxlZAorICAgSUtTRCksIHNpbWlsYXIgdG8gYW4gRlRQIHNlcnZlciAoRlRQRCkg ZXhjZXB0IHlvdSBjYW4gKGJ1dCBuZWVkIG5vdCkKKyAgIGludGVyYWN0IHdpdGggaXQgZGlyZWN0 bHksIHBsdXMgaXQgZG9lcyBhIGxvdCBtb3JlIHRoYW4gYW4gRlRQIHNlcnZlcgorICAgY2FuIGRv LiBUaGUgVENQIHBvcnQgZm9yIElLU0QgaXMgMTY0OS4gSXQgdXNlcyBUZWxuZXQgcHJvdG9jb2wu CisgICBDLUtlcm1pdCBjYW4gYmUgYW4gSW50ZXJuZXQgS2VybWl0IFNlcnZlciwgb3IgaXQgY2Fu IGJlIGEgY2xpZW50IG9mIGFuCisgICBJS1NELiBZb3UgY2FuIG1ha2UgY29ubmVjdGlvbnMgZnJv bSBDLUtlcm1pdCB0byBhbiBJS1NEIHdpdGggYW55IG9mIHRoZQorICAgZm9sbG93aW5nIGNvbW1h bmRzOgorCisgIHRlbG5ldCBmb28uYmFyLmVkdSAxNjQ5CisgIHRlbG5ldCBmb28uYmFyLmVkdSBr ZXJtaXQgICA7IGlmICJrZXJtaXQiIGlzIGxpc3RlZCBpbiAvZXRjL3NlcnZpY2VzCisgIGlrc2Qg Zm9vLmJhci5lZHUKKworICAgVGhlIElLU0QgY29tbWFuZCBpcyBlcXVpdmFsZW50IHRvIGEgVEVM TkVUIGNvbW1hbmQgc3BlY2lmeWluZyBwb3J0CisgICAxNjQ5LiBGb3IgbW9yZSBpbmZvcm1hdGlv biBhYm91dCBtYWtpbmcgYW5kIHVzaW5nIGNvbm5lY3Rpb25zIHRvIGFuCisgICBJS1NELCBzZWU6 CisKKyAgWzE2MV1odHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY3Vpa3NkLmh0bWwKKwor ICAgWW91IGNhbiBydW4gYW4gSW50ZXJuZXQgS2VybWl0IFNlcnZpY2Ugb24geW91ciBvd24gY29t cHV0ZXIgdG9vIChpZiB5b3UKKyAgIGFyZSB0aGUgc3lzdGVtIGFkbWluaXN0cmF0b3IpLiBGb3Ig aW5zdHJ1Y3Rpb25zLCBzZWU6CisKKyAgWzE2Ml1odHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvaWtzZC5odG1sCisKKyAgIFsxNjNdS2VybWl0IEhvbWUgWzE2NF1DLUtlcm1pdCBIb21lIFsx NjVdQy1LZXJtaXQgRkFRCisKK1NFQ1VSSVRZCisKKyAgIFsxNjZdVG9wIFsxNjddQ29udGVudHMg WzE2OF1OZXh0IFsxNjldUHJldmlvdXMKKworICAgQWxsIG9mIEMtS2VybWl0J3MgYnVpbHQtaW4g VENQL0lQIG5ldHdvcmtpbmcgbWV0aG9kcyAoVGVsbmV0LCBSbG9naW4sCisgICBJS1NELCBGVFAs IGFuZCBIVFRQKSBjYW4gYmUgc2VjdXJlZCBieSBvbmUgb3IgbW9yZSBvZiB0aGUgZm9sbG93aW5n CisgICBJRVRGLWFwcHJvdmVkIG1ldGhvZHM6CisKKyAgICAgKiBNSVQgS2VyYmVyb3MgSVYKKyAg ICAgKiBNSVQgS2VyYmVyb3MgVgorICAgICAqIFNTTC9UTFMKKyAgICAgKiBTdGFuZm9yZCBTUlAK KworICAgRm9yIGNvbXBsZXRlIGluc3RydWN0aW9ucyBzZWU6CisKKyAgWzE3MF1odHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvc2VjdXJpdHkuaHRtbAorCisgICBBbmQgYXMgbm90ZWQgcHJl dmlvdXNseSwgeW91IGNhbiBhbHNvIG1ha2UgU1NIIGNvbm5lY3Rpb25zIHdpdGgKKyAgIEMtS2Vy bWl0IGlmIHlvdSBhbHJlYWR5IGhhdmUgYW4gU1NIIGNsaWVudCBpbnN0YWxsZWQuCisKKyAgIFsx NzFdS2VybWl0IEhvbWUgWzE3Ml1DLUtlcm1pdCBIb21lIFsxNzNdQy1LZXJtaXQgRkFRCisKK0FM VEVSTkFUSVZFIENPTU1BTkQtTElORSBQRVJTT05BTElUSUVTCisKKyAgIFsxNzRdVG9wIFsxNzVd Q29udGVudHMgWzE3Nl1OZXh0IFsxNzddUHJldmlvdXMKKworICAgV2hlbiBpbnZva2VkIGFzICJr ZXJtaXQiIG9yIGFueSBvdGhlciBuYW1lIGJlc2lkZXMgYW55IG9mIHRoZSBzcGVjaWFsCisgICBv bmVzLCBDLUtlcm1pdCBoYXMgdGhlIGNvbW1hbmQtbGluZSBvcHRpb25zIGRlc2NyaWJlZCBhYm92 ZSBpbiB0aGUKKyAgIFsxNzhdT1BUSU9OUyBzZWN0aW9uLiBIb3dldmVyLCBpZiB5b3UgaW52b2tl IEMtS2VybWl0IHVzaW5nIGFueSBvZiB0aGUKKyAgIGZvbGxvd2luZyBuYW1lczoKKworICAgICB0 ZWxuZXQgIFRlbG5ldCBjbGllbnQKKyAgICAgZnRwICAgICBGVFAgY2xpZW50CisgICAgIGh0dHAg ICAgSFRUUCBjbGllbnQKKyAgICAgaHR0cHMgICBTZWN1cmUgSFRUUCBjbGllbnQKKworICAgS2Vy bWl0J3MgY29tbWFuZC1saW5lIHBlcnNvbmFsaXR5IGNoYW5nZXMgdG8gbWF0Y2guIFRoaXMgY2Fu IGJlIGRvbmUKKyAgIChhbW9uZyBvdGhlciB3YXlzKSB3aXRoIHN5bWJvbGljIGxpbmtzIChzeW1s aW5rcykuIEZvciBleGFtcGxlLCBpZiB5b3UKKyAgIHdhbnQgQy1LZXJtaXQgdG8gYmUgeW91ciBy ZWd1bGFyIFRlbG5ldCBjbGllbnQsIG9yIHRoZSBUZWxuZXQgaGVscGVyIG9mCisgICB5b3VyIFdl YiBicm93c2VyLCB5b3UgY2FuIGNyZWF0ZSBhIGxpbmsgbGlrZSB0aGUgZm9sbG93aW5nIGluIGEK KyAgIGRpcmVjdG9yeSB0aGF0IGxpZXMgaW4geW91ciBQQVRIIGFoZWFkIG9mIHRoZSByZWd1bGFy IHRlbG5ldCBwcm9ncmFtOgorCisgIGxuIC1zIC91c3IvbG9jYWwvYmluL2tlcm1pdCB0ZWxuZXQK KworICAgTm93IHdoZW4geW91IGdpdmUgYSAidGVsbmV0IiBjb21tYW5kLCB5b3UgYXJlIGludm9r aW5nIEtlcm1pdCBpbnN0ZWFkLAorICAgYnV0IHdpdGggaXRzIFRlbG5ldCBjb21tYW5kLWxpbmUg cGVyc29uYWxpdHkgc28sIGZvciBleGFtcGxlOgorCisgIHRlbG5ldCB4eXpjb3JwLmNvbQorCisg ICBNYWtlcyBhIFRlbG5ldCBjb25uZWN0aW9uIHRvIHh5emNvcnAuY29tLCBhbmQgS2VybWl0IGV4 aXRzCisgICBhdXRvbWF0aWNhbGx5IHdoZW4gdGhlIGNvbm5lY3Rpb24gaXMgY2xvc2VkIChqdXN0 IGxpa2UgdGhlIHJlZ3VsYXIKKyAgIFRlbG5ldCBjbGllbnQpLiBUeXBlICJ0ZWxuZXQgLWgiIHRv IGdldCBhIGxpc3Qgb2YgS2VybWl0J3MKKyAgIFRlbG5ldC1wZXJzb25hbGl0eSBjb21tYW5kLWxp bmUgb3B0aW9ucywgd2hpY2ggYXJlIGludGVuZGVkIHRvIGJlIGFzCisgICBjb21wYXRpYmxlIGFz IHBvc3NpYmxlIHdpdGggdGhlIHJlZ3VsYXIgVGVsbmV0IGNsaWVudC4KKworICAgU2ltaWxhcmx5 IGZvciBGVFA6CisKKyAgbG4gLXMgL3Vzci9sb2NhbC9iaW4va2VybWl0IGZ0cAorCisgICBBbmQg bm93IHR5cGUgImZ0cCAtaCIgdG8gc2VlIGl0cyBjb21tYW5kLWxpbmUgb3B0aW9ucywgYW5kIHVz ZSBjb21tYW5kCisgICBsaW5lcyBqdXN0IGxpa2UgeW91IHdvdWxkIGdpdmUgeW91ciByZWd1bGFy IEZUUCBjbGllbnQ6CisKKyAgZnRwIC1uIHh5emNvcnAuY29tCisKKyAgIGJ1dCB3aXRoIGFkZGl0 aW9uYWwgb3B0aW9ucyBhbGxvd2luZyBhbiBlbnRpcmUgc2Vzc2lvbiB0byBiZSBzcGVjaWZpZWQK KyAgIG9uIHRoZSBjb21tYW5kIGxpbmUsIGFzIGV4cGxhaW5lZCBpbiB0aGUgQy1LZXJtaXQgWzE3 OV1GVFAgY2xpZW50CisgICBkb2N1bWVudGF0aW9uLgorCisgICBBbmQgc2ltaWxhcmx5IGZvciBI VFRQOgorCisgIGxuIC1zIC91c3IvbG9jYWwvYmluL2tlcm1pdCBodHRwCisgIC4vaHR0cCAtaAor ICAuL2h0dHAgd3d3LmNvbHVtYmlhLmVkdSAtZyBrZXJtaXQvaW5kZXguaHRtbAorCisgICBGaW5h bGx5LCBpZiBLZXJtaXQncyBmaXJzdCBjb21tYW5kLWxpbmUgb3B0aW9uIGlzIGEgVGVsbmV0LCBG VFAsIElLU0QsCisgICBvciBIVFRQIFVSTCwgS2VybWl0IGF1dG9tYXRpY2FsbHkgbWFrZXMgdGhl IGFwcHJvcHJpYXRlIGtpbmQgb2YKKyAgIGNvbm5lY3Rpb24gYW5kLCBpZiBpbmRpY2F0ZWQgYnkg dGhlIFVSTCwgdGFrZXMgdGhlIGRlc2lyZWQgYWN0aW9uOgorCisgIGtlcm1pdCB0ZWxuZXQ6eHl6 Y29ycC5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBPcGVucyBhIFRlbG5ldCBzZXNz aW9uCisgIGtlcm1pdCB0ZWxuZXQ6Ly9vbGdhQHh5emNvcnAuY29tICAgICAgICAgICAgICAgICAg ICAgOyBEaXR0byBmb3IgdXNlciBvbGdhCisgIGtlcm1pdCBmdHA6Ly9vbGdhQHh5emNvcnAuY29t L3B1YmxpYy9vb2ZhLnppcCAgICAgICAgOyBEb3dubG9hZHMgYSBmaWxlCisgIGtlcm1pdCBrZXJt aXQ6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9mL1JFQUQuTUUgOyBEaXR0byBmb3IgSUtT RAorICBrZXJtaXQgaWtzZDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2YvUkVBRC5NRSAg IDsgKFRoaXMgd29ya3MgdG9vKQorICBrZXJtaXQgaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2luZGV4Lmh0bWwgICAgIDsgR3JhYnMgYSB3ZWIgcGFnZQorICBrZXJtaXQgaHR0cHM6Ly93 d3dzLnh5emNvcnAuY29tL3NlY3JldC9wbGFuLmh0bWwgICAgIDsgR3JhYnMgYSBzZWN1cmUgd2Vi IHBhZ2UKKworICAgWzE4MF1LZXJtaXQgSG9tZSBbMTgxXUMtS2VybWl0IEhvbWUgWzE4Ml1DLUtl cm1pdCBGQVEKKworTElDRU5TRQorCisgICBbMTgzXVRvcCBbMTg0XUNvbnRlbnRzIFsxODVdTmV4 dCBbMTg2XVByZXZpb3VzCisKKyAgIE9uIG9yIGJlZm9yZSAzMCBKdW5lIDIwMTEsIGJhcnJpbmcg dW5mb3Jlc2VlbiBjaXJjdW1zdGFuY2VzLAorICAgWzE4N11DLUtlcm1pdCA5LjAgd2lsbCBiZSBy ZWxlYXNlZCB3aXRoIHRoZSBbMTg4XVJldmlzZWQgMy1DbGF1c2UgQlNECisgICBMaWNlbnNlLiBU aGlzIGlzIGEgY2VydGlmaWVkIFsxODldT3BlbiBTb3VyY2UgbGljZW5zZSwgYW5kIGl0IG1lYW5z CisgICB0aGF0IEMtS2VybWl0IG5vIGxvbmdlciBuZWVkcyB0byBiZSBsaWNlbnNlZCBmb3IgY29t bWVyY2lhbAorICAgcmVkaXN0cmlidXRpb24uIFRlY2huaWNhbCBzdXBwb3J0IGZvciBLZXJtaXQg c29mdHdhcmUgd2lsbCBub3QgYmUKKyAgIGF2YWlsYWJsZSBmcm9tIENvbHVtYmlhIFVuaXZlcnNp dHkgYWZ0ZXIgSnVuZSAzMHRoLgorCisgICBbMTkwXUtlcm1pdCBIb21lIFsxOTFdQy1LZXJtaXQg SG9tZSBbMTkyXUMtS2VybWl0IEZBUQorCitPVEhFUiBUT1BJQ1MKKworICAgWzE5M11Ub3AgWzE5 NF1Db250ZW50cyBbMTk1XU5leHQgWzE5Nl1QcmV2aW91cworCisgICBUaGVyZSdzIHdheSBtb3Jl IHRvIEMtS2VybWl0IHRoYW4gd2UndmUgdG91Y2hlZCBvbiBoZXJlIC0tCisgICB0cm91Ymxlc2hv b3RpbmcsIGN1c3RvbWl6YXRpb24sIGNoYXJhY3RlciBzZXRzLCBkaWFsaW5nIGRpcmVjdG9yaWVz LAorICAgc2VuZGluZyBwYWdlcywgc2NyaXB0IHdyaXRpbmcsIGFuZCBvbiBhbmQgb24sIGFsbCBv ZiB3aGljaCBhcmUgY292ZXJlZAorICAgaW4gdGhlIG1hbnVhbCBhbmQgdXBkYXRlcyBhbmQgc3Vw cGxlbWVudHMuIEZvciB0aGUgbW9zdCB1cC10by1kYXRlCisgICBpbmZvcm1hdGlvbiBvbiBkb2N1 bWVudGF0aW9uIChvciB1cGRhdGVkIGRvY3VtZW50YXRpb24gaXRzZWxmKSB2aXNpdAorICAgdGhl IEtlcm1pdCBQcm9qZWN0IHdlYnNpdGU6CisKKyAgWzE5N11odHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvCisKKyAgIFRoZXJlIHlvdSB3aWxsIGFsc28gZmluZCBbMTk4XUtlcm1pdCBzb2Z0 d2FyZSBwYWNrYWdlcyBmb3Igb3RoZXIKKyAgIHBsYXRmb3JtczogZGlmZmVyZW50IFVuaXggdmFy aWV0aWVzLCBXaW5kb3dzLCBET1MsIFZNUywgSUJNIG1haW5mcmFtZXMsCisgICBhbmQgbWFueSBv dGhlcnM6IDIwKyB5ZWFycycgd29ydGguCisKKyAgIFsxOTldS2VybWl0IEhvbWUgWzIwMF1DLUtl cm1pdCBIb21lIFsyMDFdQy1LZXJtaXQgRkFRCisKK0RPQ1VNRU5UQVRJT04gQU5EIFVQREFURVMK KworICAgWzIwMl1Ub3AgWzIwM11Db250ZW50cyBbMjA0XU5leHQgWzIwNV1QcmV2aW91cworCisg ICBUaGUgbWFudWFsIGZvciBDLUtlcm1pdCBpczoKKworICAgIDEuIEZyYW5rIGRhIENydXogYW5k IENocmlzdGluZSBNLiBHaWFub25lLCBbMjA2XVVzaW5nIEMtS2VybWl0LCBTZWNvbmQKKyAgICAg ICBFZGl0aW9uLCBEaWdpdGFsIFByZXNzIC8gQnV0dGVyd29ydGgtSGVpbmVtYW5uLCBXb2J1cm4s IE1BLCAxOTk3LAorICAgICAgIDYyMiBwYWdlcywgSVNCTiAxLTU1NTU4LTE2NC0xLiBUaGlzIGlz IGEgcHJpbnRlZCBib29rLCBub3cgYWxzbworICAgICAgIGF2YWlsYWJsZSBhcyBhIFsyMDddS2lu ZGxlIEUtQm9vay4gSXQgY292ZXJzIEMtS2VybWl0IDYuMC4KKyAgICAyLiBUaGUgQy1LZXJtaXQg Ny4wIFN1cHBsZW1lbnQ6CisgICAgICAgWzIwOF1odHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tlcm1pdDcwLmh0bWwKKyAgICAzLiBUaGUgQy1LZXJtaXQgOC4wIFN1cHBsZW1lbnQ6Cisg ICAgICAgWzIwOV1odHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwK KyAgICA0LiBUaGUgQy1LZXJtaXQgOS4wIFN1cHBsZW1lbnQ6CisgICAgICAgWzIxMF1odHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDkwLmh0bWwKKworICAgVGhlIEMtS2VybWl0 IGhvbWUgcGFnZSBpcyBoZXJlOgorCisgIFsyMTFdaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZXJtaXQuaHRtbAorCisgICBWaXNpdCB0aGlzIHBhZ2UgdG8gbGVhcm4gYWJvdXQgbmV3 IHZlcnNpb25zLCBCZXRhIHRlc3RzLCBhbmQgb3RoZXIKKyAgIG5ld3M7IHRvIHJlYWQgY2FzZSBz dHVkaWVzIGFuZCB0dXRvcmlhbHM7IHRvIGRvd25sb2FkIHNvdXJjZSBjb2RlLAorICAgaW5zdGFs bCBwYWNrYWdlcywgYW5kIFsyMTJdcHJlYnVpbHQgYmluYXJpZXMgZm9yIG1hbnkgcGxhdGZvcm1z LiBBbHNvCisgICB2aXNpdDoKKworICAgWzIxM11odHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvc2NyaXB0bGliLmh0bWwKKyAgICAgICAgICBUaGUgS2VybWl0IHNjcmlwdCBsaWJyYXJ5IGFu ZCB0dXRvcmlhbAorCisgICBbMjE0XWh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9uZXdm YXEuaHRtbAorICAgICAgICAgIFRoZSBLZXJtaXQgRkFRIChGcmVxdWVudGx5IEFza2VkIFF1ZXN0 aW9ucyBhYm91dCBLZXJtaXQpCisKKyAgIFsyMTVdaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZmFxLmh0bWwKKyAgICAgICAgICBUaGUgQy1LZXJtaXQgRkFRIChGcmVxdWVudGx5IEFz a2VkIFF1ZXN0aW9ucyBhYm91dCBDLUtlcm1pdCkKKworICAgWzIxNl1odHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvc2VjdXJpdHkuaHRtbAorICAgICAgICAgIFRoZSBLZXJtaXQgc2VjdXJp dHkgcmVmZXJlbmNlLgorCisgICBbMjE3XWh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC90 ZWxuZXQuaHRtbAorICAgICAgICAgIEMtS2VybWl0IFRlbG5ldCBjbGllbnQgZG9jdW1lbnRhdGlv bi4KKworICAgWzIxOF1odHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvc3R1ZGllcy5odG1s CisgICAgICAgICAgQ2FzZSBzdHVkaWVzLgorCisgICBbMjE5XWh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2Nid3IuaHRtbAorICAgICAgICAgIEdlbmVyYWwgQy1LZXJtaXQgSGludHMg YW5kIFRpcHMuCisKKyAgIFsyMjBdaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3 ci5odG1sCisgICAgICAgICAgVW5peCBDLUtlcm1pdCBIaW50cyBhbmQgVGlwcy4KKworICAgWzIy MV1odHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t2YndyLmh0bWwKKyAgICAgICAgICBW TVMgQy1LZXJtaXQgSGludHMgYW5kIFRpcHMuCisKKyAgIFsyMjJdaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrdWlucy5odG1sCisgICAgICAgICAgVW5peCBDLUtlcm1pdCBJbnN0YWxs YXRpb24gSW5zdHJ1Y3Rpb25zCisKKyAgIFsyMjNdaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2Nrdmlucy5odG1sCisgICAgICAgICAgVk1TIEMtS2VybWl0IEluc3RhbGxhdGlvbiBJbnN0 cnVjdGlvbnMKKworICAgWzIyNF1odHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvc3VwcG9y dC5odG1sCisgICAgICAgICAgVGVjaG5pY2FsIHN1cHBvcnQuCisKKyAgIFsyMjVdaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2s5NXR1dG9yaWFsLmh0bWwKKyAgICAgICAgICBLZXJtaXQg OTUgdHV0b3JpYWwgKHRoaXMgZG9jdW1lbnQpLgorCisgICBbMjI2XWNvbXAucHJvdG9jb2xzLmtl cm1pdC5taXNjCisgICAgICAgICAgVGhlIEtlcm1pdCBuZXdzZ3JvdXAgKHVubW9kZXJhdGVkKS4K KworICAgWzIyN11LZXJtaXQgSG9tZSBbMjI4XUMtS2VybWl0IEhvbWUgWzIyOV1DLUtlcm1pdCBG QVEKKworRklMRVMKKworICAgWzIzMF1Ub3AgWzIzMV1Db250ZW50cyBbMjMyXU5leHQgWzIzM11Q cmV2aW91cworCisgICAgICAgICAgWzIzNF1UaGUgUmV2aXNlZCAzLUNsYXVzZSBMaWNlbnNlCisg ICAgICAgICAgQy1LZXJtaXQgbGljZW5zZS4KKworICAgWzIzNV1+Ly5rZXJtcmMKKyAgICAgICAg ICBJbml0aWFsaXphdGlvbiBmaWxlLgorCisgICBbMjM2XX4vLm15a2VybXJjCisgICAgICAgICAg Q3VzdG9taXphdGlvbiBmaWxlLgorCisgICB+Ly5rZGQKKyAgICAgICAgICBLZXJtaXQgZGlhbGlu ZyBkaXJlY3RvcnkgKHNlZSBtYW51YWwpLgorCisgICB+Ly5rbmQKKyAgICAgICAgICBLZXJtaXQg bmV0d29yayBkaXJlY3RvcnkgKHNlZSBtYW51YWwpLgorCisgICB+Ly5rc2QKKyAgICAgICAgICBL ZXJtaXQgc2VydmljZXMgZGlyZWN0b3J5IChzZWUgbWFudWFsKS4KKworICAgWzIzN11ja3VpbnMu aHRtbAorICAgICAgICAgIEluc3RhbGxhdGlvbiBpbnN0cnVjdGlvbnMgZm9yIFVuaXguCisKKyAg IFsyMzhdY2tjYndyLmh0bWwKKyAgICAgICAgICBHZW5lcmFsIEMtS2VybWl0IGJ1Z3MsIGhpbnRz LCB0aXBzLgorCisgICBbMjM5XWNrdWJ3ci5odG1sCisgICAgICAgICAgVW5peC1zcGVjaWZpYyBD LUtlcm1pdCBidWdzLCBoaW50cywgdGlwcy4KKworICAgWzI0MF1ja2NwbG0uaHRtbAorICAgICAg ICAgIEMtS2VybWl0IHByb2dyYW0gbG9naWMgbWFudWFsLgorCisgICBbMjQxXWNrY2NmZy5odG1s CisgICAgICAgICAgQy1LZXJtaXQgY29tcGlsZS10aW1lIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4K KworICAgc3NoCisgICAgICAgICAgKGluIHlvdXIgUEFUSCkgU1NIIGNvbm5lY3Rpb24gaGVscGVy LgorCisgICByeiwgc3osIGV0Yy4KKyAgICAgICAgICAoaW4geW91ciBQQVRIKSBleHRlcm5hbCBw cm90b2NvbHMgZm9yIFhZWm1vZGVtLgorCisgICAvdmFyL3Nwb29sL2xvY2tzIChvciB3aGF0ZXZl cikKKyAgICAgICAgICBVVUNQIGxvY2tmaWxlIGZvciBkaWFsaW5nIG91dCAoc2VlIFsyNDJdaW5z dGFsbGF0aW9uCisgICAgICAgICAgaW5zdHJ1Y3Rpb25zKS4KKworICAgWzI0M11LZXJtaXQgSG9t ZSBbMjQ0XUMtS2VybWl0IEhvbWUgWzI0NV1DLUtlcm1pdCBGQVEKKworQVVUSE9SUworCisgICBb MjQ2XVRvcCBbMjQ3XUNvbnRlbnRzIFsyNDhdUHJldmlvdXMKKworICAgICBGcmFuayBkYSBDcnV6 IGFuZCBKZWZmcmV5IEUgQWx0bWFuCisgICAgIFRoZSBLZXJtaXQgUHJvamVjdCAtIENvbHVtYmlh IFVuaXZlcml0eQorICAgICA2MTIgV2VzdCAxMTV0aCBTdHJlZXQKKyAgICAgTmV3IFlvcmsgTlkg MTAwMjUtNzc5OQorICAgICBVU0EKKworICAgMTk4NS1wcmVzZW50LCB3aXRoIGNvbnRyaWJ1dGlv bnMgZnJvbSBodW5kcmVkcyBvZiBvdGhlcnMgYWxsIG92ZXIgdGhlCisgICB3b3JsZC4KKyAgICAg X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fCisKKworICAgIEMtS2VybWl0IDkuMCBVbml4IE1hbnVhbCBQYWdlIGFuZCBUdXRv cmlhbCAvIFsyNDlda2VybWl0QGNvbHVtYmlhLmVkdQorICAgIC8gMSBKdWx5IDIwMTEKKworUmVm ZXJlbmNlcworCisgICAxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS8KKyAgIDIuIG1haWx0bzpr ZXJtaXRAY29sdW1iaWEuZWR1CisgICAzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv aW5kZXguaHRtbAorICAgNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2s5NS5odG1s CisgICA1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCisgICA2 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tzY3JpcHRzLmh0bWwKKyAgIDcuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9jdXJyZW50Lmh0bWwKKyAgIDguIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC93aGF0c25ldy5odG1sCisgICA5LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tmYXEuaHRtbAorICAxMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L3N1cHBvcnQuaHRtbAorICAxMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0LworICAxMi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUvCisgIDEzLiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IucGRmCisgIDE0LiBmdHA6Ly9rZXJtaXQuY29sdW1i aWEuZWR1L2tlcm1pdC90ZXN0L3RleHQvY2t1a2VyLm5yCisgIDE1LiBodHRwOi8vd3d3LmFtYXpv bi5jb20vZ3AvcHJvZHVjdC8xNTU1NTgxNjQxP2llPVVURjgmdGFnPWFsZWlkbW9yZWxkb20tMjAm bGlua0NvZGU9YXMyJmNhbXA9MTc4OSZjcmVhdGl2ZT05MzI1JmNyZWF0aXZlQVNJTj0xNTU1NTgx NjQxCisgIDE2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCNk ZXNjcmlwdGlvbgorICAxNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9y Lmh0bWwjc3lub3BzaXMKKyAgMTguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0 dXRvci5odG1sI29wdGlvbnMKKyAgMTkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a3V0dXRvci5odG1sI2NvbW1hbmRzCisgIDIwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2t1dHV0b3IuaHRtbCNpbml0ZmlsZQorICAyMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrdXR1dG9yLmh0bWwjbW9kZXMKKyAgMjIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja3V0dXRvci5odG1sI2Nvbm5lY3Rpb25zCisgIDIzLiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCN0cmFuc2ZlcgorICAyNC4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjc2VydmVyCisgIDI1LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCNmdHAKKyAgMjYuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1sI2lrc2QKKyAgMjcuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1sI3NlY3VyaXR5CisgIDI4LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCNwZXJzb25hZQorICAyOS4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjbGljZW5zZQorICAzMC4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjb3RoZXIKKyAgMzEu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1sI2RvY3VtZW50YXRp b24KKyAgMzIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1sI2Zp bGVzCisgIDMzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCNh dXRob3JzCisgIDM0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRt bCN0b3AKKyAgMzUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1s I2NvbnRlbnRzCisgIDM2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3Iu aHRtbCNzeW5vcHNpcworICAzNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQuaHRtbAorICAzOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0LworICAzOS4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUvCisgIDQwLiBmdHA6Ly9mdHAuaXNpLmVkdS9pbi1ub3Rlcy9y ZmMyODM5LnR4dAorICA0MS4gZnRwOi8vZnRwLmlzaS5lZHUvaW4tbm90ZXMvcmZjMjg0MC50eHQK KyAgNDIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1sI2RvY3Vt ZW50YXRpb24KKyAgNDMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC8KKyAgNDQuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC8KKyAgNDUuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKKyAgNDYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2ZhcS5odG1sCisgIDQ3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1 dHV0b3IuaHRtbCN0b3AKKyAgNDguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0 dXRvci5odG1sI2NvbnRlbnRzCisgIDQ5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2t1dHV0b3IuaHRtbCNvcHRpb25zCisgIDUwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2t1dHV0b3IuaHRtbCNzeW5vcHNpcworICA1MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrdXR1dG9yLmh0bWwja2VyYmFuZworICA1Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjcGVyc29uYWUKKyAgNTMuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1sI2tlcmJhbmcKKyAgNTQuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1sI2luaXRmaWxlCisgIDU1LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCNpbml0ZmlsZQorICA1Ni4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjcGVyc29uYWUKKyAgNTcuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1sI29wdGlvbnMKKyAgNTgu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1sI2NvbW1hbmRzCisg IDU5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvCisgIDYwLiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCisgIDYxLiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tmYXEuaHRtbAorICA2Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrdXR1dG9yLmh0bWwjdG9wCisgIDYzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2t1dHV0b3IuaHRtbCNjb250ZW50cworICA2NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrdXR1dG9yLmh0bWwjY29tbWFuZHMKKyAgNjUuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja3V0dXRvci5odG1sI2Rlc2NyaXB0aW9uCisgIDY2LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCNjb21tYW5kcworICA2Ny4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjcGVyc29uYWUKKyAgNjguIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1sI3BlcnNvbmFlCisgIDY5LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCNpa3NkCisgIDcwLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCN0cmFuc2ZlcgorICA3 MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjdG9wCisgIDcy LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCNjb250ZW50cwor ICA3My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjaW5pdGZp bGUKKyAgNzQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1sI29w dGlvbnMKKyAgNzUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1s I2tlcmJhbmcKKyAgNzYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5o dG1sI2NtZGxpc3QKKyAgNzcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRv ci5odG1sI2RvY3VtZW50YXRpb24KKyAgNzguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja3V0dXRvci5odG1sI2luaXRmaWxlCisgIDc5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t1dHV0b3IuaHRtbCNkb2N1bWVudGF0aW9uCisgIDgwLiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tzY3JpcHRzLmh0bWwKKyAgODEuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja3V0dXRvci5odG1sI2RvY3VtZW50YXRpb24KKyAgODIuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC8KKyAgODMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0Lmh0bWwKKyAgODQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Zh cS5odG1sCisgIDg1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRt bCN0b3AKKyAgODYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1s I2NvbnRlbnRzCisgIDg3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3Iu aHRtbCNtb2RlcworICA4OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9y Lmh0bWwjY29tbWFuZHMKKyAgODkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC8KKyAg OTAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKKyAgOTEuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2ZhcS5odG1sCisgIDkyLiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCN0b3AKKyAgOTMuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1sI2NvbnRlbnRzCisgIDk0LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCNjb25uZWN0aW9ucworICA5NS4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjaW5pdGZpbGUKKyAg OTYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2ZhcS5odG1sI3Rlcm0KKyAgOTcu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC8KKyAgOTguIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKKyAgOTkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2ZhcS5odG1sCisgMTAwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2t1dHV0b3IuaHRtbCN0b3AKKyAxMDEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a3V0dXRvci5odG1sI2NvbnRlbnRzCisgMTAyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2t1dHV0b3IuaHRtbCN0cmFuc2ZlcgorIDEwMy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrdXR1dG9yLmh0bWwjbW9kZXMKKyAxMDQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja3V0dXRvci5odG1sI2lrc2QKKyAxMDUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9jYWJsZS5odG1sCisgMTA2LiBmdHA6Ly9mdHAuaXNpLmVkdS9pbi1ub3Rlcy9yZmMy MjE3LnR4dAorIDEwNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NhYmxlLmh0bWwK KyAxMDguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1sI2Z0cAor IDEwOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0LworIDExMC4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAorIDExMS4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZmFxLmh0bWwKKyAxMTIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja3V0dXRvci5odG1sI3RvcAorIDExMy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrdXR1dG9yLmh0bWwjY29udGVudHMKKyAxMTQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja3V0dXRvci5odG1sI3NlcnZlcgorIDExNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjY29ubmVjdGlvbnMKKyAxMTYuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1sI2Rvd25sb2FkCisgMTE3LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCN1cGxvYWQKKyAxMTguIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1sI29sZGZhc2hpb25lZAorIDExOS4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjdHJvdWJsZQorIDEy MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjYWR2YW5jZWQK KyAxMjEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1sI25vbmtl cm1pdAorIDEyMi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2tlcm1pdC5odG1sI25v dHNsb3cKKyAxMjMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwK KyAxMjQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9rOTUuaHRtbAorIDEyNS4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2s5NS5odG1sCisgMTI2LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCisgMTI3LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvbXNrZXJtaXQuaHRtbAorIDEyOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0LworIDEyOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L3N1cHBvcnQuaHRt bAorIDEzMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrbWFudWFsLmh0bWwKKyAx MzEuIG1haWx0bzprZXJtaXQtc3VwcG9ydEBjb2x1bWJpYS5lZHUKKyAxMzIuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1sI2RvY3VtZW50YXRpb24KKyAxMzMuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1sI2Z0cAorIDEzNC4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0LworIDEzNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaXQuaHRtbAorIDEzNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZmFxLmh0bWwKKyAxMzcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0 dXRvci5odG1sI3RvcAorIDEzOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1 dG9yLmh0bWwjY29udGVudHMKKyAxMzkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a3V0dXRvci5odG1sI2Z0cAorIDE0MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr dXR1dG9yLmh0bWwjdHJhbnNmZXIKKyAxNDEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja3V0dXRvci5odG1sI2lrc2QKKyAxNDIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC8KKyAxNDMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKKyAx NDQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2ZhcS5odG1sCisgMTQ1LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCN0b3AKKyAxNDYuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1sI2NvbnRlbnRzCisgMTQ3LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCNpa3NkCisgMTQ4LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCN0cmFuc2ZlcgorIDE0 OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjc2VydmVyCisg MTUwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvZnRwY2xpZW50Lmh0bWwKKyAxNTEu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1sI2RvY3VtZW50YXRp b24KKyAxNTIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC8KKyAxNTMuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKKyAxNTQuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2ZhcS5odG1sCisgMTU1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tlcm1pdDMuaHRtbCN4MworIDE1Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrZXJtaXQzLmh0bWwjeDIuMgorIDE1Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrdXR1dG9yLmh0bWwjdG9wCisgMTU4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t1dHV0b3IuaHRtbCNjb250ZW50cworIDE1OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjc2VjdXJpdHkKKyAxNjAuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1sI2Z0cAorIDE2MS4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2N1aWtzZC5odG1sCisgMTYyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvaWtzZC5odG1sCisgMTYzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvCisg MTY0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCisgMTY1LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tmYXEuaHRtbAorIDE2Ni4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjdG9wCisgMTY3LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCNjb250ZW50cworIDE2OC4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjcGVyc29uYWUKKyAxNjkuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1sI2lrc2QKKyAxNzAuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9zZWN1cml0eS5odG1sCisgMTcxLiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvCisgMTcyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tlcm1pdC5odG1sCisgMTczLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tmYXEuaHRtbAorIDE3NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9y Lmh0bWwjdG9wCisgMTc1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3Iu aHRtbCNjb250ZW50cworIDE3Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1 dG9yLmh0bWwjbGljZW5zZQorIDE3Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr dXR1dG9yLmh0bWwjaWtzZAorIDE3OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr dXR1dG9yLmh0bWwjb3B0aW9ucworIDE3OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQzLmh0bWwjeDMuMS4yCisgMTgwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvCisgMTgxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCisg MTgyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tmYXEuaHRtbAorIDE4My4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjdG9wCisgMTg0LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCNjb250ZW50cworIDE4NS4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjb3RoZXIKKyAxODYu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1sI3BlcnNvbmFlCisg MTg3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2s5MC5odG1sCisgMTg4LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY3UtYnNkLWxpY2Vuc2UuaHRtbAorIDE4OS4gaHR0 cDovL3d3dy5vcGVuc291cmNlLm9yZy8KKyAxOTAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC8KKyAxOTEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwK KyAxOTIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2ZhcS5odG1sCisgMTkzLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCN0b3AKKyAxOTQuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1sI2NvbnRlbnRzCisgMTk1 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCNkb2N1bWVudGF0 aW9uCisgMTk2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCNs aWNlbnNlCisgMTk3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvCisgMTk4LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaG93dG9nZXQuaHRtbAorIDE5OS4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0LworIDIwMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZXJtaXQuaHRtbAorIDIwMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZmFxLmh0bWwKKyAyMDIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5o dG1sI3RvcAorIDIwMy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0 bWwjY29udGVudHMKKyAyMDQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRv ci5odG1sI2ZpbGVzCisgMjA1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0 b3IuaHRtbCNvdGhlcgorIDIwNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrbWFu dWFsLmh0bWwKKyAyMDcuIGh0dHA6Ly93d3cuYW1hem9uLmNvbS9ncC9wcm9kdWN0L0IwMDJBQ1BG OU0/aWU9VVRGOCZ0YWc9YWxlaWRtb3JlbGRvbS0yMCZsaW5rQ29kZT1hczImY2FtcD0xNzg5JmNy ZWF0aXZlPTM5MDk1NyZjcmVhdGl2ZUFTSU49QjAwMkFDUEY5TQorIDIwOC4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sCisgMjA5LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwKKyAyMTAuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0OTAuaHRtbAorIDIxMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrZXJtaXQuaHRtbAorIDIxMi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrODBiaW5hcmllcy5odG1sCisgMjEzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv c2NyaXB0bGliLmh0bWwKKyAyMTQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9uZXdm YXEuaHRtbAorIDIxNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZmFxLmh0bWwK KyAyMTYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9zZWN1cml0eS5odG1sCisgMjE3 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvdGVsbmV0Lmh0bWwKKyAyMTguIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9zdHVkaWVzLmh0bWwKKyAyMTkuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2Nid3IuaHRtbAorIDIyMC4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrdWJ3ci5odG1sCisgMjIxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t2YndyLmh0bWwKKyAyMjIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a3VpbnMuaHRtbAorIDIyMy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nrdmlucy5o dG1sCisgMjI0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvc3VwcG9ydC5odG1sCisg MjI1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvazk1dHV0b3JpYWwuaHRtbAorIDIy Ni4gbmV3czpjb21wLnByb3RvY29scy5rZXJtaXQubWlzYworIDIyNy4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0LworIDIyOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQuaHRtbAorIDIyOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZmFxLmh0 bWwKKyAyMzAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1sI3Rv cAorIDIzMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjY29u dGVudHMKKyAyMzIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1s I2F1dGhvcnMKKyAyMzMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5o dG1sI2RvY3VtZW50YXRpb24KKyAyMzQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j dS1ic2QtbGljZW5zZS5odG1sCisgMjM1LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1p dC9jLWtlcm1pdC9ja2VybWl0LmluaQorIDIzNi4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9r ZXJtaXQvYy1rZXJtaXQvY2tlcm1vZC5pbmkKKyAyMzcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja3VpbnMuaHRtbAorIDIzOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrY2J3ci5odG1sCisgMjM5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1Yndy Lmh0bWwKKyAyNDAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NwbG0uaHRtbAor IDI0MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5odG1sCisgMjQyLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwKKyAyNDMuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC8KKyAyNDQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2VybWl0Lmh0bWwKKyAyNDUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2ZhcS5odG1sCisgMjQ2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3Iu aHRtbCN0b3AKKyAyNDcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5o dG1sI2NvbnRlbnRzCisgMjQ4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0 b3IuaHRtbCNmaWxlcworIDI0OS4gbWFpbHRvOmtlcm1pdEBjb2x1bWJpYS5lZHUKCmRpZmYgLS1n aXQgYS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdXVzMi5jIGIvY2tl cm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3V1czIuYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjBkZmU5Ci0tLSAvZGV2L251bGwKKysrIGIvY2tlcm1p dC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3V1czIuYwpAQCAtMCwwICsxLDE0NDkx IEBACisjaWZkZWYgU1NIVEVTVAorI2RlZmluZSBTU0hCVUlMVElOCisjZW5kaWYgLyogU1NIVEVT VCAqLworCisvKiAgQyBLIFUgVSBTIDIgIC0tICBVc2VyIGludGVyZmFjZSBzdHJpbmdzICYgaGVs cCB0ZXh0IG1vZHVsZSBmb3IgQy1LZXJtaXQgICovCisKKy8qCisgIEF1dGhvcnM6CisgICAgRnJh bmsgZGEgQ3J1eiA8ZmRjQGNvbHVtYmlhLmVkdT4sCisgICAgICBUaGUgS2VybWl0IFByb2plY3Qs IENvbHVtYmlhIFVuaXZlcnNpdHksIE5ldyBZb3JrIENpdHkKKyAgICBKZWZmcmV5IEUgQWx0bWFu IDxqYWx0bWFuQHNlY3VyZS1lbmRwb2ludHMuY29tPgorICAgICAgU2VjdXJlIEVuZHBvaW50cyBJ bmMuLCBOZXcgWW9yayBDaXR5CisKKyAgQ29weXJpZ2h0IChDKSAxOTg1LCAyMDExLAorICAgIFRy dXN0ZWVzIG9mIENvbHVtYmlhIFVuaXZlcnNpdHkgaW4gdGhlIENpdHkgb2YgTmV3IFlvcmsuCisg ICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFNlZSB0aGUgQy1LZXJtaXQgQ09QWUlORy5UWFQgZmls ZSBvciB0aGUKKyAgICBjb3B5cmlnaHQgdGV4dCBpbiB0aGUgY2tjbWFpLmMgbW9kdWxlIGZvciBk aXNjbGFpbWVyIGFuZCBwZXJtaXNzaW9ucy4KKworICBUaGlzIG1vZHVsZSBjb250YWlucyBIRUxQ IGNvbW1hbmQgYW5kIG90aGVyIGxvbmcgdGV4dCBzdHJpbmdzLgorCisgIElNUE9SVEFOVDogQ2hh cmFjdGVyIHN0cmluZyBjb25zdGFudHMgbG9uZ2VyIHRoYW4gYWJvdXQgMjUwIGFyZSBub3QgcG9y dGFibGUuCisgIExvbmdlciBzdHJpbmdzIHNob3VsZCBiZSBicm9rZW4gdXAgaW50byBhcnJheXMg b2Ygc3RyaW5ncyBhbmQgYWNjZXNzZWQgd2l0aAorICBobXNnYSgpIHJhdGhlciB0aGFuIGhtc2co KS4gIChUaGlzIHN0YXRlbWVudCB3YXMgdHJ1ZSBpbiB0aGUgMTk4MHMgYW5kCisgIHByb2JhYmx5 IGlzIG5vdCBhIGJpZyBjb25jZXJuIGluIHRoZSAyMXN0IENlbnR1cnksIGJ1dCB5b3UgbmV2ZXIg a25vdzsKKyAgdGhlcmUgc3RpbGwgbWlnaHQgZXhpc3Qgc29tZSAxNi1iaXQgcGxhdGZvcm1zIGFu ZCBDIGNvbXBpbGVycyB0aGF0IGhhdmUKKyAgcmVzdHJpY3Rpb25zIGxpa2UgdGhpcy4KKyovCisj aW5jbHVkZSAiY2tjc3ltLmgiCisjaW5jbHVkZSAiY2tjZGViLmgiCisjaW5jbHVkZSAiY2tjbmV0 LmgiCisjaW5jbHVkZSAiY2tjYXNjLmgiCisjaW5jbHVkZSAiY2tja2VyLmgiCisjaW5jbHVkZSAi Y2t1dXNyLmgiCisjaW5jbHVkZSAiY2tjeGxhLmgiCisjaWZkZWYgT1MyCisjaWZkZWYgTlQKKyNp bmNsdWRlIDx3aW5kb3dzLmg+CisjZWxzZSAvKiBub3QgTlQgKi8KKyNkZWZpbmUgSU5DTF9LQkQK KyNpZmRlZiBPUzJNT1VTRQorI2RlZmluZSBJTkNMX01PVQorI2VuZGlmIC8qIE9TMk1PVVNFICov CisjZGVmaW5lIElOQ0xfRE9TTUlTQworI2RlZmluZSBJTkNMX0RPU0RFVklDRVMKKyNpbmNsdWRl IDxvczIuaD4gICAgICAgICAgICAgICAgLyogVGhpcyBwdWxscyBpbiBhIHdob2xlIGxvYWQgb2Yg c3R1ZmYgKi8KKyN1bmRlZiBDT01NRU5UCisjZW5kaWYgLyogTlQgKi8KKyNpbmNsdWRlICJja29j b24uaCIKKyNpbmNsdWRlICJja29rdmIuaCIKKyNpbmNsdWRlICJja29rZXkuaCIKKyNlbmRpZiAv KiBPUzIgKi8KKworZXh0ZXJuIGNoYXIgKiBja19jcnllYXI7CQkvKiBGb3IgY29weXJpZ2h0IG5v dGljZSAqLworCitleHRlcm4geHhfc3RycCB4eHN0cmluZzsKK2V4dGVybiBjaGFyICogY2NudGFi W107CisvKgorICBobHB0b2sgY29udGFpbnMgdGhlIHN0cmluZyBmb3Igd2hpY2ggdGhlIHVzZXIg cmVxdWVzdGVkIGhlbHAuICBUaGlzIGlzCisgIHVzZWZ1bCBmb3IgZGlzdGluZ3Vpc2hpbmcgc3lu b255bXMsIGluIGNhc2UgZGlmZmVyZW50IGhlbHAgdGV4dCBpcyBuZWVkZWQKKyAgZGVwZW5kaW5n IG9uIHdoaWNoIHN5bm9ueW0gd2FzIGdpdmVuLgorKi8KK2V4dGVybiBjaGFyICogaGxwdG9rOwor CisjaWZuZGVmIE5PSUtTRAorICAgIGV4dGVybiBpbnQgaW5zZXJ2ZXI7CisjZW5kaWYgLyogSUtT RCAqLworCisjaWZuZGVmIE5PSUNQCitleHRlcm4gaW50IGNtZmxnczsKKworI2lmZGVmIERDTURC VUYKK2V4dGVybiBjaGFyICpjbWRidWYsICphdG1idWY7CisjZWxzZQorZXh0ZXJuIGNoYXIgY21k YnVmW10sIGF0bWJ1ZltdOworI2VuZGlmIC8qIERDTURCVUYgKi8KKyNlbmRpZiAvKiBOT0lDUCAq LworCitleHRlcm4gY2hhciAqeGFyZzA7CitleHRlcm4gaW50IG5ybXQsIG5wcm0sIGRmbG9jLCBs b2NhbCwgcGFyaXR5LCBlc2NhcGU7CitleHRlcm4gaW50IHR1cm4sIGZsb3c7CitleHRlcm4gaW50 IGJpbmFyeSwgcXVpZXQsIGtlZXA7CitleHRlcm4gaW50IHN1Y2Nlc3MsIHhhc2ttb3JlOworI2lm ZGVmIE9TMgorZXh0ZXJuIGludCB0dF9yb3dzW10sIHR0X2NvbHNbXTsKKyNlbHNlIC8qIE9TMiAq LworZXh0ZXJuIGludCB0dF9yb3dzLCB0dF9jb2xzOworI2VuZGlmIC8qIE9TMiAqLworZXh0ZXJu IGludCBjbWRfcm93cywgY21kX2NvbHM7CisKK2V4dGVybiBsb25nIHNwZWVkOworZXh0ZXJuIGNo YXIgKmRmdHR5LCAqdmVyc2lvLCAqY2t4c3lzOworI2lmbmRlZiBOT0hFTFAKK2V4dGVybiBjaGFy ICpoZWxwZmlsZTsKKyNlbmRpZiAvKiBOT0hFTFAgKi8KK2V4dGVybiBzdHJ1Y3Qga2V5dGFiIHBy bXRhYltdOworI2lmbmRlZiBOT1hGRVIKK2V4dGVybiBzdHJ1Y3Qga2V5dGFiIHJlbWNtZFtdOwor I2VuZGlmIC8qIE5PWEZFUiAqLworCisjaWZuZGVmIE5PSUNQCisKKy8qICBJbnRlcmFjdGl2ZSBo ZWxwIHN0cmluZ3MgICovCisKKy8qIFRvcC1sZXZlbCBIRUxQIHRleHQuICBJTVBPUlRBTlQ6IEFs c28gc2VlIHRvcGhscGlbXSBmb3IgSUtTRC4gKi8KKworc3RhdGljIGNoYXIgKnRvcGhscFtdID0g eworIlRydXN0ZWVzIG9mIENvbHVtYmlhIFVuaXZlcnNpdHkgaW4gdGhlIENpdHkgb2YgTmV3IFlv cmsuXG4iLAorCisjaWZuZGVmIE5PSEVMUAorIiAgVHlwZSBFWElUICAgIHRvIGV4aXQuIiwKKyNp ZmRlZiBPUzIKKyIgIFR5cGUgSU5UUk8gICBmb3IgYSBicmllZiBpbnRyb2R1Y3Rpb24gdG8gdGhl IEtlcm1pdCBDb21tYW5kIHNjcmVlbi4iLAorIiAgVHlwZSBMSUNFTlNFIHRvIHNlZSB0aGUgS2Vy bWl0IDk1IGxpY2Vuc2UuIiwKKyNlbHNlCisiICBUeXBlIElOVFJPICAgZm9yIGEgYnJpZWYgaW50 cm9kdWN0aW9uIHRvIEMtS2VybWl0LiIsCisiICBUeXBlIExJQ0VOU0UgdG8gc2VlIHRoZSBDLUtl cm1pdCBsaWNlbnNlLiIsCisjZW5kaWYgLyogT1MyICovCisiICBUeXBlIEhFTFAgICAgZm9sbG93 ZWQgYnkgYSBjb21tYW5kIG5hbWUgZm9yIGhlbHAgYWJvdXQgYSBzcGVjaWZpYyBjb21tYW5kLiIs CisjaWZuZGVmIE5PUFVTSAorI2lmZGVmIFVOSVgKKyIgIFR5cGUgTUFOVUFMICB0byBhY2Nlc3Mg dGhlIEMtS2VybWl0IG1hbnVhbCBwYWdlLiIsCisjZWxzZQorI2lmZGVmIFZNUworIiAgVHlwZSBN QU5VQUwgIHRvIGFjY2VzcyB0aGUgQy1LZXJtaXQgaGVscCB0b3BpYy4iLAorI2Vsc2UKKyNpZmRl ZiBPUzIKKyIgIFR5cGUgTUFOVUFMICB0byBhY2Nlc3MgdGhlIEs5NSBtYW51YWwuIiwKKyNlbHNl CisiICBUeXBlIE1BTlVBTCAgdG8gYWNjZXNzIHRoZSBDLUtlcm1pdCBtYW51YWwuIiwKKyNlbmRp ZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBVTklYICovCisjZW5kaWYg LyogTk9QVVNIICovCisiICBUeXBlIE5FV1MgICAgZm9yIG5ld3MgYWJvdXQgbmV3IGZlYXR1cmVz LiIsCisiICBUeXBlIFNVUFBPUlQgdG8gbGVhcm4gaG93IHRvIGdldCB0ZWNobmljYWwgc3VwcG9y dC4iLAorIiAgUHJlc3MgPyAgICAgIChxdWVzdGlvbiBtYXJrKSBhdCB0aGUgcHJvbXB0LCBvciBh bnl3aGVyZSB3aXRoaW4gYSBjb21tYW5kLCIsCisiICAgICAgICAgICAgICAgZm9yIGEgbWVudSAo Y29udGV4dC1zZW5zaXRpdmUgaGVscCwgbWVudSBvbiBkZW1hbmQpLiIsCisjZWxzZQorIlByZXNz ID8gZm9yIGEgbGlzdCBvZiBjb21tYW5kczsgc2VlIGRvY3VtZW50YXRpb24gZm9yIGRldGFpbGVk IGRlc2NyaXB0aW9ucy4iLAorI2VuZGlmIC8qIE5PSEVMUCAqLworCisjaWZuZGVmIE5PQ01ETAor I2lmbmRlZiBOT0hFTFAKKyIgIiwKKyIgIFR5cGUgSEVMUCBPUFRJT05TIGZvciBoZWxwIHdpdGgg Y29tbWFuZC1saW5lIG9wdGlvbnMuIiwKKyNlbmRpZiAvKiBOT0hFTFAgKi8KKyNlbmRpZiAvKiBO T0NNREwgKi8KKyIgIiwKKyNpZm5kZWYgT1MyCisjaWZkZWYgTUFDCisiRG9jdW1lbnRhdGlvbiBm b3IgQ29tbWFuZCBXaW5kb3c6IFwiVXNpbmcgQy1LZXJtaXRcIiBieSBGcmFuayBkYSBDcnV6IGFu ZCIsCisiQ2hyaXN0aW5lIE0uIEdpYW5vbmUsIERpZ2l0YWwgUHJlc3MsIDE5OTcsIElTQk46IDEt NTU1NTgtMTY0LTEiLAorI2Vsc2UKKyJET0NVTUVOVEFUSU9OOiBcIlVzaW5nIEMtS2VybWl0XCIg YnkgRnJhbmsgZGEgQ3J1eiBhbmQgQ2hyaXN0aW5lIE0uIEdpYW5vbmUsIiwKKyIybmQgRWRpdGlv biwgRGlnaXRhbCBQcmVzcyAvIEJ1dHRlcndvcnRoLUhlaW5lbWFubiAxOTk3LCBJU0JOIDEtNTU1 NTgtMTY0LTEsIiwKKyJwbHVzIHN1cHBsZW1lbnRzIGF0IGh0dHA6Ly9rZXJtaXQuY29sdW1iaWEu ZWR1L2NrZXJtaXQuaHRtbCNkb2MuIiwKKyNlbmRpZiAvKiBNQUMgKi8KKyNlbmRpZiAvKiBPUzIg Ki8KKyNpZmRlZiBNQUMKKyIgIiwKKyJBbHNvIHNlZSB0aGUgTWFjIEtlcm1pdCBEb2MgYW5kIEJ3 ciBmaWxlcyBvbiB0aGUgTWFjIEtlcm1pdCBkaXNrZXR0ZS5cbiIsCisjZWxzZQorI2lmZGVmIEhQ VVgxMAorIiAiLAorIlNlZSB0aGUgZmlsZXMgaW4gL3Vzci9zaGFyZS9saWIva2VybWl0LyBmb3Ig YWRkaXRpb25hbCBpbmZvcm1hdGlvbi4iLAorI2VuZGlmIC8qIEhQVVgxMCAqLworI2VuZGlmIC8q IE1BQyAqLworIiIKK307CisKKyNpZm5kZWYgTk9JS1NECitzdGF0aWMgY2hhciAqdG9waGxwaVtd ID0geyAgICAgICAgICAgICAgLyogVG9wLWxldmVsIGhlbHAgZm9yIElLU0QgKi8KKworIlRydXN0 ZWVzIG9mIENvbHVtYmlhIFVuaXZlcnNpdHkgaW4gdGhlIENpdHkgb2YgTmV3IFlvcmsuXG4iLAor CisjaWZuZGVmIE5PSEVMUAorIiAgVHlwZSBJTlRSTyAgIGZvciBhIGJyaWVmIGludHJvZHVjdGlv biB0byBLZXJtaXQgY29tbWFuZHMuIiwKKyIgIFR5cGUgVkVSU0lPTiBmb3IgdmVyc2lvbiBhbmQg Y29weXJpZ2h0IGluZm9ybWF0aW9uLiIsCisiICBUeXBlIEhFTFAgICAgZm9sbG93ZWQgYnkgYSBj b21tYW5kIG5hbWUgZm9yIGhlbHAgYWJvdXQgYSBzcGVjaWZpYyBjb21tYW5kLiIsCisiICBUeXBl IFNVUFBPUlQgdG8gbGVhcm4gaG93IHRvIGdldCB0ZWNobmljYWwgc3VwcG9ydC4iLAorIiAgVHlw ZSBMT0dPVVQgIChvciBFWElUKSB0byBsb2cgb3V0LiIsCisiICBQcmVzcyA/ICAgICAgKHF1ZXN0 aW9uIG1hcmspIGF0IHRoZSBwcm9tcHQsIG9yIGFueXdoZXJlIHdpdGhpbiBhIGNvbW1hbmQsIiwK KyIgICAgICAgICAgICAgICBmb3IgYSBtZW51IChjb250ZXh0LXNlbnNpdGl2ZSBoZWxwLCBtZW51 IG9uIGRlbWFuZCkuIiwKKyNlbHNlCisiUHJlc3MgPyBmb3IgYSBsaXN0IG9mIGNvbW1hbmRzOyBz ZWUgZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlsZWQgZGVzY3JpcHRpb25zLiIsCisjZW5kaWYgLyog Tk9IRUxQICovCisiICIsCisiRE9DVU1FTlRBVElPTjogXCJVc2luZyBDLUtlcm1pdFwiIGJ5IEZy YW5rIGRhIENydXogYW5kIENocmlzdGluZSBNLiBHaWFub25lLCIsCisiMm5kIEVkaXRpb24sIERp Z2l0YWwgUHJlc3MgKDE5OTcpLCBJU0JOIDEtNTU1NTgtMTY0LTEuICBNb3JlIGluZm8gYXQgdGhl IiwKKyJLZXJtaXQgUHJvamVjdCB3ZWJzaXRlLCBodHRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS8u IiwKKyIiCit9OworI2VuZGlmIC8qIE5PSUtTRCAqLworCisjaWZuZGVmIE5PSEVMUAorY2hhciAq bmV3c3R4dFtdID0geworI2lmZGVmIE9TMgorIldlbGNvbWUgdG8gS2VybWl0IDk1IDMueC54LiAg TWFqb3IgbmV3IGZlYXR1cmVzIHNpbmNlIDIuMS4zIGluY2x1ZGU6IiwKKyNlbHNlCisiV2VsY29t ZSB0byBDLUtlcm1pdCA5LjAuMzAwLiAgTmV3IGZlYXR1cmVzIHNpbmNlIDguMC4yMTEgaW5jbHVk ZToiLAorI2VuZGlmIC8qIE9TMiAqLworIiAuIE9wZW4gU291cmNlIFNpbXBsaWZpZWQgMy1DbGF1 c2UgQlNEIExpY2Vuc2UiLAorIiAuIEZ1bGwgNjQtYml0IG1lbW9yeSBtb2RlbCBvbiBwbGF0Zm9y bXMgdGhhdCBzdXBwb3J0IGl0IiwKKyIgLiBMYXJnZSBmaWxlIHN1cHBvcnQgKDY0LWJpdCBmaWxl IHNpemUpIG9uIG1vc3QgcGxhdGZvcm1zIiwKKyIgLiBMb25nIGludGVnZXIgdmFyaWFibGVzIGFu ZCBjb25zdGFudHMgaW4gY29tbWFuZHMgYW5kIHNjcmlwdHMiLAorIiAuIEJpZ2dlciBtYXhpbXVt IGNvbW1hbmQgYW5kIG1hY3JvIGxlbmd0aHMiLAorIiAuIEJpZ2dlciBmaWxlbmFtZSBleHBhbnNp b24gc3BhY2UiLAorIiAuIE5ldyBzdXBlci1mbGV4aWJsZSBSRU5BTUUgY29tbWFuZCIsCisiIC4g TmV3IENPUFkgYW5kIERJUkVDVE9SWSBjb21tYW5kIG9wdGlvbnMiLAorIiAuIE5ldyBUT1VDSCBj b21tYW5kIiwKKyIgLiBSYXcgU1NML1RMUyBjb25uZWN0aW9ucyBmb3IgY29ubmVjdGluZyB0byBQ T1AzIGFuZCBzaW1pbGFyIHNlcnZpY2VzIiwKKyIgLiBBdCBwcm9tcHQsIEN0cmwtSyByZWNhbGxz IG1vc3QgcmVjZW50IGZpbGVuYW1lIiwKKyIgLiBTY3JpcHRpbmcgYW5kIHBlcmZvcm1hbmNlIGlt cHJvdmVtZW50cyBhbmQgYnVnIGZpeGVzIiwKKyIgIiwKKyJEb2N1bWVudGF0aW9uOiIsCisiIDEu IGh0dHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L3VzaW5nY2tlcm1pdC5odG1sIiwKKyIgICAgXCJV c2luZyBDLUtlcm1pdFwiLCBzZWNvbmQgZWRpdGlvbiAoMTk5NyksIGN1cnJlbnQgd2l0aCBDLUtl cm1pdCA2LjAuIiwKKyIgIiwKKyIgMi4gaHR0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUvY2tlcm1p dDcwLmh0bWwiLAorIiAgICB3aGljaCBkb2N1bWVudHMgdGhlIG5ldyBmZWF0dXJlcyBvZiBDLUtl cm1pdCA3LjAuIiwKKyIgIiwKKyIgMy4gaHR0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUvY2tlcm1p dDgwLmh0bWwiLAorIiAgICB3aGljaCBkb2N1bWVudHMgdGhlIG5ldyBmZWF0dXJlcyBvZiBDLUtl cm1pdCA4LjAuIiwKKyIgIiwKKyIgNC4gaHR0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUvY2tlcm1p dDkwLmh0bWwiLAorIiAgICB3aGljaCBkb2N1bWVudHMgdGhlIG5ldyBmZWF0dXJlcyBvZiBDLUtl cm1pdCA5LjAuIiwKKyIgIiwKKyJJZiB0aGUgcmVsZWFzZSBkYXRlIHNob3duIGJ5IHRoZSBWRVJT SU9OIGNvbW1hbmQgaXMgbG9uZyBwYXN0LCBiZSBzdXJlIHRvIiwKKyJjaGVjayB3aXRoIHRoZSBL ZXJtaXQgd2Vic2l0ZSB0byBzZWUgaWYgdGhlcmUgaGF2ZSBiZWVuIHVwZGF0ZXM6IiwKKyIgIiwK KyNpZmRlZiBPUzIKKyIgIGh0dHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2s5NS5odG1sICAgICAo S2VybWl0IDk1IGhvbWUgcGFnZSkiLAorI2Vsc2UKKyIgIGh0dHA6Ly9rZXJtaXQuY29sdW1iaWEu ZWR1L2NrZXJtaXQuaHRtbCAoQy1LZXJtaXQgaG9tZSBwYWdlKSIsCisjZW5kaWYJLyogT1MyICov CisiICBodHRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS8gICAgICAgICAgICAgKEtlcm1pdCBQcm9q ZWN0IGhvbWUgcGFnZSkiLAorIiIKK307CisjZW5kaWYgLyogTk9IRUxQICovCisKKyNpZm5kZWYg Tk9IRUxQCitjaGFyICppbnRyb3R4dFtdID0geworI2lmZGVmIE9TMgorIldlbGNvbWUgdG8gSy05 NSwgS2VybWl0IGNvbW11bmljYXRpb25zIHNvZnR3YXJlIGZvcjoiLAorI2Vsc2UKKyNpZmRlZiBV TklYCisjaWZkZWYgSFBVWAorIldlbGNvbWUgdG8gSFAtVVggQy1LZXJtaXQgY29tbXVuaWNhdGlv bnMgc29mdHdhcmUgZm9yOiIsCisjZWxzZQorIldlbGNvbWUgdG8gVU5JWCBDLUtlcm1pdCBjb21t dW5pY2F0aW9ucyBzb2Z0d2FyZSBmb3I6IiwKKyNlbmRpZiAvKiBIUFVYICovCisjZWxzZQorI2lm ZGVmIFZNUworIldlbGNvbWUgdG8gVk1TIEMtS2VybWl0IGNvbW11bmljYXRpb25zIHNvZnR3YXJl IGZvcjoiLAorI2Vsc2UKKyNpZmRlZiBWT1MKKyJXZWxjb21lIHRvIFZPUyBDLUtlcm1pdCBjb21t dW5pY2F0aW9ucyBzb2Z0d2FyZSBmb3I6IiwKKyNlbHNlCisjaWZkZWYgTUFDCisiV2VsY29tZSB0 byBNYWMgS2VybWl0IGNvbW11bmljYXRpb25zIHNvZnR3YXJlIGZvcjoiLAorI2Vsc2UKKyJXZWxj b21lIHRvIEMtS2VybWl0IGNvbW11bmljYXRpb25zIHNvZnR3YXJlIGZvcjoiLAorI2VuZGlmIC8q IE1BQyAqLworI2VuZGlmIC8qIFZPUyAqLworI2VuZGlmIC8qIFZNUyAqLworI2VuZGlmIC8qIFVO SVggKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyNpZm5kZWYgTk9YRkVSCisiIC4gRXJyb3ItZnJlZSBh bmQgZWZmaWNpZW50IGZpbGUgdHJhbnNmZXIiLAorI2VuZGlmIC8qIE5PWEZFUiAqLworI2lmbmRl ZiBOT0xPQ0FMCisjaWZkZWYgT1MyCisiIC4gVlQzMjAvMjIwLzEwMi8xMDAvNTIsIEFOU0ksIFd5 c2UsIExpbnV4LCBUZWxldmlkZW8sIGFuZCBvdGhlciBlbXVsYXRpb25zIiwKKyNlbHNlCisjaWZk ZWYgTUFDCisiIC4gVlQyMjAgdGVybWluYWwgZW11bGF0aW9uIiwKKyNlbHNlCisiIC4gVGVybWlu YWwgY29ubmVjdGlvbiIsCisjZW5kaWYgLyogTUFDICovCisjZW5kaWYgLyogT1MyICovCisjZW5k aWYgLyogTk9MT0NBTCAqLworI2lmbmRlZiBOT1NQTAorIiAuIFNjcmlwdCBwcm9ncmFtbWluZyIs CisjZW5kaWYgLyogTk9TUEwgKi8KKyNpZm5kZWYgTk9JQ1MKKyIgLiBJbnRlcm5hdGlvbmFsIGNo YXJhY3RlciBzZXQgY29udmVyc2lvbiIsCisjZW5kaWYgLyogTk9JQ1MgKi8KKyNpZm5kZWYgTk9E SUFMCisjaWZuZGVmIE5PU1BMCisiIC4gTnVtZXJpYyBhbmQgYWxwaGFudW1lcmljIHBhZ2luZyIs CisjZW5kaWYgLyogTk9TUEwgKi8KKyNlbmRpZiAvKiBOT0RJQUwgKi8KKworI2lmbmRlZiBOT0xP Q0FMCisiICIsCisiU3VwcG9ydGluZzoiLAorIiAuIFNlcmlhbCBjb25uZWN0aW9ucywgZGlyZWN0 IG9yIGRpYWxlZC4iLAorI2lmbmRlZiBOT0RJQUwKKyIgLiBBdXRvbWF0aWMgbW9kZW0gZGlhbGlu ZyIsCisjZW5kaWYgLyogTk9ESUFMICovCisjaWZkZWYgVENQU09DS0VUCisiIC4gVENQL0lQIG5l dHdvcmsgY29ubmVjdGlvbnM6IiwKKyNpZmRlZiBUTkNPREUKKyIgICAtIFRlbG5ldCBzZXNzaW9u cyIsCisjZW5kaWYgLyogVE5DT0RFICovCisjaWZkZWYgU1NIQlVJTFRJTgorIiAgIC0gU1NIIHYx IGFuZCB2MiBjb25uZWN0aW9ucyIsCisjZWxzZQorI2lmZGVmIEFOWVNTSAorIiAgIC0gU1NIIGNv bm5lY3Rpb25zIHZpYSBleHRlcm5hbCBhZ2VudCIsCisjZW5kaWYgLyogQU5ZU1NIICovCisjZW5k aWYgLyogU1NIQlVJTFRJTiAqLworI2lmZGVmIFJMT0dDT0RFCisiICAgLSBSbG9naW4gc2Vzc2lv bnMiLAorI2VuZGlmIC8qIFJMT0dDT0RFICovCisjaWZkZWYgTkVXRlRQCisiICAgLSBGVFAgc2Vz c2lvbnMiLAorI2VuZGlmIC8qIE5FV0ZUUCAqLworI2lmZGVmIENLSFRUUAorIiAgIC0gSFRUUCAx LjEgc2Vzc2lvbnMiLAorI2VuZGlmIC8qIENLSFRUUCAqLworI2lmZGVmIElLU0QKKyIgICAtIElu dGVybmV0IEtlcm1pdCBTZXJ2aWNlIiwKKyNlbmRpZiAvKiBJS1NEICovCisjZW5kaWYgLyogVENQ U09DS0VUICovCisjaWZkZWYgQU5ZWDI1CisiIC4gWC4yNSBuZXR3b3JrIGNvbm5lY3Rpb25zIiwK KyNlbmRpZiAvKiBBTllYMjUgKi8KKyNpZmRlZiBPUzIKKyNpZmRlZiBERUNORVQKKyIgLiBERUNu ZXQvUEFUSFdPUktTIExBVCBFdGhlcm5ldCBjb25uZWN0aW9ucyIsCisjZW5kaWYgLyogREVDTkVU ICovCisjaWZkZWYgU1VQRVJMQVQKKyIgLiBNZXJpZGlhbiBUZWNobm9sb2dpZXMnIFN1cGVyTEFU IGNvbm5lY3Rpb25zIiwKKyNlbmRpZiAvKiBTVVBFUkxBVCAqLworI2lmZGVmIE5QSVBFCisiIC4g TmFtZWQtcGlwZSBjb25uZWN0aW9ucyIsCisjZW5kaWYgLyogTlBJUEUgKi8KKyNpZmRlZiBDS19O RVRCSU9TCisiIC4gTkVUQklPUyBjb25uZWN0aW9ucyIsCisjZW5kaWYgLyogQ0tfTkVUQklPUyAq LworI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIE5PTE9DQUwgKi8KKworIiAiLAorIldoaWxl IHR5cGluZyBjb21tYW5kcywgeW91IG1heSB1c2UgdGhlIGZvbGxvd2luZyBzcGVjaWFsIGNoYXJh Y3RlcnM6IiwKKyIgLiBERUwsIFJVQk9VVCwgQkFDS1NQQUNFLCBDVFJMLUg6IERlbGV0ZSB0aGUg bW9zdCByZWNlbnQgY2hhcmFjdGVyIHR5cGVkLiIsCisiIC4gQ1RSTC1XOiAgICAgIERlbGV0ZSB0 aGUgbW9zdCByZWNlbnQgd29yZCB0eXBlZC4iLAorIiAuIENUUkwtVTogICAgICBEZWxldGUgdGhl IGN1cnJlbnQgbGluZS4iLAorIiAuIENUUkwtUjogICAgICBSZWRpc3BsYXkgdGhlIGN1cnJlbnQg bGluZS4iLAorCisjaWZkZWYgQ0tfUkVDQUxMCisjaWZkZWYgT1MyCisiIC4gVXBhcnJvdzogICAg IENvbW1hbmQgcmVjYWxsIC0gZ28gYmFja3dhcmRzIGluIGNvbW1hbmQgcmVjYWxsIGJ1ZmZlci4i LAorIiAuIERvd25hcnJvdzogICBDb21tYW5kIHJlY2FsbCAtIGdvIGZvcndhcmQgaW4gY29tbWFu ZCByZWNhbGwgYnVmZmVyLiIsCisjaWZuZGVmIE5PSUtTRAorIiAgIChOb3RlOiBBcnJvdyBrZXlz IGNhbiBiZSB1c2VkIG9ubHkgb24gdGhlIFBDJ3MgcGh5c2ljYWwga2V5Ym9hcmQuKSIsCisjZW5k aWYgLyogTk9JS1NEICovCisjZW5kaWYgLyogT1MyICovCisiIC4gQ1RSTC1QOiAgICAgIENvbW1h bmQgcmVjYWxsIC0gZ28gYmFja3dhcmRzIGluIGNvbW1hbmQgcmVjYWxsIGJ1ZmZlci4iLAorIiAu IENUUkwtQjogICAgICBDb21tYW5kIHJlY2FsbCAtIHNhbWUgYXMgQ3RybC1QLiIsCisiIC4gQ1RS TC1OOiAgICAgIENvbW1hbmQgcmVjYWxsIC0gZ28gZm9yd2FyZCBpbiBjb21tYW5kIHJlY2FsbCBi dWZmZXIuIiwKKyNlbmRpZiAvKiBDS19SRUNBTEwgKi8KKyNpZm5kZWYgTk9MQVNURklMRQorIiAu IENUUkwtSzogICAgICBJbnNlcnQgdGhlIG1vc3QgcmVjZW50bHkgZW50ZXJlZCBsb2NhbCBmaWxl IHNwZWNpZmljdGlvbi4iLAorI2VuZGlmCS8qIE5PTEFTVEZJTEUgKi8KKworIiAuID8gICAgICAg ICAgICAocXVlc3Rpb24gbWFyaykgRGlzcGxheSBhIG1lbnUgZm9yIHRoZSBjdXJyZW50IGNvbW1h bmQgZmllbGQuIgorLAorIiAuIEVTQyAgICAgICAgICAob3IgVEFCIG9yIEN0cmwtSSkgQXR0ZW1w dCB0byBjb21wbGV0ZSB0aGUgY3VycmVudCBmaWVsZC4iLAorIiAuIFxcICAgICAgICAgICAgKGJh Y2tzbGFzaCkgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGNoYXJhY3RlciBsaXRlcmFsbHkiLAorI2lm bmRlZiBOT1NQTAorIiAgICAgICAgICAgICAgICBvciBpbnRyb2R1Y2UgYSBiYWNrc2xhc2ggY29k ZSwgdmFyaWFibGUsIG9yIGZ1bmN0aW9uLiIsCisjZWxzZQorIiAgICAgICAgICAgICAgICBvciBp bnRyb2R1Y2UgYSBudW1lcmljIGJhY2tzbGFzaCBjb2RlLiIsCisjZW5kaWYgLyogTk9TUEwgKi8K KyIgIiwKKworIklNUE9SVEFOVDogU2luY2UgYmFja3NsYXNoIChcXCkgaXMgS2VybWl0J3MgY29t bWFuZC1saW5lIGVzY2FwZSBjaGFyYWN0ZXIsIiwKKyJ5b3UgbXVzdCBlbnRlciBET1MsIFdpbmRv d3MsIG9yIE9TLzIgcGF0aG5hbWVzIHVzaW5nIGVpdGhlciBmb3J3YXJkIHNsYXNoICgvKSIKKywK KyJvciBkb3VibGUgYmFja3NsYXNoIChcXFxcKSBhcyB0aGUgZGlyZWN0b3J5IHNlcGFyYXRvciBp biBtb3N0IGNvbnRleHRzLiIsCisiRXhhbXBsZXM6IEM6L1RNUC9SRUFETUUuVFhULCBDOlxcXFxU TVBcXFxcUkVBRE1FLlRYVC4iLAorIiAiLAorCisiQ29tbWFuZCB3b3JkcyBvdGhlciB0aGFuIGZp bGVuYW1lcyBjYW4gYmUgYWJicmV2aWF0ZWQgaW4gbW9zdCBjb250ZXh0cy4iLAorIiAiLAorCisi QmFzaWMgY29tbWFuZHM6IiwKKyIgIEVYSVQgICAgICAgICAgRXhpdCBmcm9tIEtlcm1pdCIsCisi ICBIRUxQICAgICAgICAgIFJlcXVlc3QgZ2VuZXJhbCBoZWxwIiwKKyIgIEhFTFAgY29tbWFuZCAg UmVxdWVzdCBoZWxwIGFib3V0IHRoZSBnaXZlbiBjb21tYW5kIiwKKyIgIFRBS0UgICAgICAgICAg RXhlY3V0ZSBjb21tYW5kcyBmcm9tIGEgZmlsZSIsCisiICBUWVBFICAgICAgICAgIERpc3BsYXkg YSBmaWxlIG9uIHlvdXIgc2NyZWVuIiwKKyIgIE9SSUVOVEFUSU9OICAgRXhwbGFpbnMgZGlyZWN0 b3J5IHN0cnVjdHVyZSIsCisiICIsCisKKyNpZm5kZWYgTk9YRkVSCisiQ29tbWFuZHMgZm9yIGZp bGUgdHJhbnNmZXI6IiwKKyIgIFNFTkQgICAgICAgICAgU2VuZCBmaWxlcyIsCisiICBSRUNFSVZF ICAgICAgIFJlY2VpdmUgZmlsZXMiLAorIiAgR0VUICAgICAgICAgICBHZXQgZmlsZXMgZnJvbSBh IEtlcm1pdCBzZXJ2ZXIiLAorI2lmZGVmIENLX1JFU0VORAorIiAgUkVTRU5EICAgICAgICBSZWNv dmVyIGFuIGludGVycnVwdGVkIHNlbmQiLAorIiAgUkVHRVQgICAgICAgICBSZWNvdmVyIGFuIGlu dGVycnVwdGVkIGdldCBmcm9tIGEgc2VydmVyIiwKKyNlbmRpZiAvKiBDS19SRVNFTkQgKi8KKyNp Zm5kZWYgTk9TRVJWRVIKKyIgIFNFUlZFUiAgICAgICAgQmUgYSBLZXJtaXQgc2VydmVyIiwKKyNl bmRpZiAvKiBOT1NFUlZFUiAqLworIiAiLAorIkZpbGUtdHJhbnNmZXIgc3BlZWQgc2VsZWN0aW9u OiIsCisiICBGQVNUICAgICAgICAgIFVzZSBmYXN0IHNldHRpbmdzIC0tIFRISVMgSVMgVEhFIERF RkFVTFQiLAorIiAgQ0FVVElPVVMgICAgICBVc2Ugc2xvd2VyLCBtb3JlIGNhdXRpb3VzIHNldHRp bmdzIiwKKyIgIFJPQlVTVCAgICAgICAgVXNlIGV4dHJlbWVseSBzbG93IGFuZCBjYXV0aW91cyBz ZXR0aW5ncyIsCisiICIsCisiRmlsZS10cmFuc2ZlciBwZXJmb3JtYW5jZSBmaW5lIHR1bmluZzoi LAorIiAgU0VUIFJFQ0VJVkUgUEFDS0VULUxFTkdUSCAgS2VybWl0IHBhY2tldCBzaXplIiwKKyIg IFNFVCBXSU5ET1cgICAgICAgICAgICAgICAgIE51bWJlciBvZiBzbGlkaW5nIHdpbmRvdyBzbG90 cyIsCisiICBTRVQgUFJFRklYSU5HICAgICAgICAgICAgICBBbW91bnQgb2YgY29udHJvbC1jaGFy YWN0ZXIgcHJlZml4aW5nIiwKKyNlbmRpZiAvKiBOT1hGRVIgKi8KKworI2lmbmRlZiBOT0xPQ0FM CisiICIsCisiVG8gbWFrZSBhIGRpcmVjdCBzZXJpYWwgY29ubmVjdGlvbjoiLAorI2lmZGVmIE9T MgorI2lmZGVmIE5UCisjaWZkZWYgQ0tfVEFQSQorIiAgU0VUIFBPUlQgVEFQSSBTZWxlY3QgVEFQ SSBjb21tdW5pY2F0aW9uIGRldmljZSIsCisjZW5kaWYgLyogQ0tfVEFQSSAqLworIiAgU0VUIFBP UlQgICAgICBTZWxlY3Qgc2VyaWFsIGNvbW11bmljYXRpb24gZGV2aWNlIiwKKyNlbHNlCisiICBT RVQgUE9SVCAgICAgIFNlbGVjdCBzZXJpYWwgY29tbXVuaWNhdGlvbiBwb3J0IG9yIHNlcnZlciIs CisjZW5kaWYgLyogTlQgKi8KKyNlbHNlCisiICBTRVQgTElORSAgICAgIFNlbGVjdCBzZXJpYWwg Y29tbXVuaWNhdGlvbiBkZXZpY2UiLAorI2VuZGlmIC8qIE9TMiAqLworIiAgU0VUIFNQRUVEICAg ICBTZWxlY3QgY29tbXVuaWNhdGlvbiBzcGVlZCIsCisiICBTRVQgUEFSSVRZICAgIENvbW11bmlj YXRpb25zIHBhcml0eSAoaWYgbmVjZXNzYXJ5KSIsCisjaWZkZWYgQ0tfUlRTQ1RTCisiICBTRVQg RkxPVyAgICAgIENvbW11bmljYXRpb25zIGZsb3cgY29udHJvbCwgc3VjaCBhcyBSVFMvQ1RTIiwK KyNlbHNlCisiICBTRVQgRkxPVyAgICAgIENvbW11bmljYXRpb25zIGZsb3cgY29udHJvbCwgc3Vj aCBhcyBYT04vWE9GRiIsCisjZW5kaWYgLyogQ0tfUlRTQ1RTICovCisiICBDT05ORUNUICAgICAg IEJlZ2luIHRlcm1pbmFsIGNvbm5lY3Rpb24iLAorCisjaWZuZGVmIE5PRElBTAorIiAiLAorIlRv IGRpYWwgb3V0IHdpdGggYSBtb2RlbToiLAorIiAgU0VUIERJQUwgRElSRUNUT1JZICAgICBTcGVj aWZ5IGRpYWxpbmcgZGlyZWN0b3J5IGZpbGUgKG9wdGlvbmFsKSIsCisiICBTRVQgRElBTCBDT1VO VFJZLUNPREUgIENvdW50cnkgeW91IGFyZSBkaWFsaW5nIGZyb20gKCopIiwKKyIgIFNFVCBESUFM IEFSRUEtQ09ERSAgICAgQXJlYS1jb2RlIHlvdSBhcmUgZGlhbGluZyBmcm9tICgqKSIsCisiICBM T09LVVAgICAgICAgICAgICAgICAgIExvb2t1cCBlbnRyaWVzIGluIHlvdXIgZGlhbGluZyBkaXJl Y3RvcnkgKCopIiwKKyIgIFNFVCBNT0RFTSBUWVBFICAgICAgICAgU2VsZWN0IG1vZGVtIHR5cGUi LAorI2lmZGVmIE9TMgorI2lmZGVmIE5UCisjaWZkZWYgQ0tfVEFQSQorIiAgU0VUIFBPUlQgVEFQ SSAgICAgICAgICBTZWxlY3QgVEFQSSBjb21tdW5pY2F0aW9uIGRldmljZSIsCisjZW5kaWYgLyog Q0tfVEFQSSAqLworIiAgU0VUIFBPUlQgICAgICAgICAgICAgICBTZWxlY3Qgc2VyaWFsIGNvbW11 bmljYXRpb24gZGV2aWNlIiwKKyNlbHNlCisiICBTRVQgUE9SVCAgICAgICAgICAgICAgIFNlbGVj dCBzZXJpYWwgY29tbXVuaWNhdGlvbiBwb3J0IG9yIHNlcnZlciIsCisjZW5kaWYgLyogTlQgKi8K KyNlbHNlCisiICBTRVQgTElORSAgICAgICAgICAgICAgIFNlbGVjdCBzZXJpYWwgY29tbXVuaWNh dGlvbiBkZXZpY2UiLAorI2VuZGlmIC8qIE9TMiAqLworIiAgU0VUIFNQRUVEICAgICAgICAgICAg ICBTZWxlY3QgY29tbXVuaWNhdGlvbiBzcGVlZCIsCisiICBTRVQgUEFSSVRZICAgICAgICAgICAg IENvbW11bmljYXRpb25zIHBhcml0eSAoaWYgbmVjZXNzYXJ5KSIsCisiICBESUFMICAgICAgICAg ICAgICAgICAgIERpYWwgdGhlIHBob25lIG51bWJlciIsCisiICBDT05ORUNUICAgICAgICAgICAg ICAgIEJlZ2luIHRlcm1pbmFsIGNvbm5lY3Rpb24iLAorIiAiLAorI2lmZGVmIE9TMgorIkZ1cnRo ZXIgaW5mbzogICBIRUxQIERJQUwsIEhFTFAgU0VUIE1PREVNLCBIRUxQIFNFVCBQT1JULCBIRUxQ IFNFVCBESUFMIiwKKyNlbHNlCisiRnVydGhlciBpbmZvOiAgIEhFTFAgRElBTCwgSEVMUCBTRVQg TU9ERU0sIEhFTFAgU0VUIExJTkUsIEhFTFAgU0VUIERJQUwiLAorI2VuZGlmIC8qIE9TMiAqLwor IigqKSAoRm9yIHVzZSB3aXRoIG9wdGlvbmFsIGRpYWxpbmcgZGlyZWN0b3J5KSIsCisjZW5kaWYg LyogTk9ESUFMICovCisKKyNpZmRlZiBORVRDT05OCisiICIsCisiVG8gbWFrZSBhIG5ldHdvcmsg Y29ubmVjdGlvbjoiLAorI2lmbmRlZiBOT0RJQUwKKyIgIFNFVCBORVRXT1JLIERJUkVDVE9SWSAg U3BlY2lmeSBhIG5ldHdvcmsgc2VydmljZXMgZGlyZWN0b3J5IChvcHRpb25hbCkiLAorIiAgTE9P S1VQICAgICAgICAgICAgICAgICBMb29rdXAgZW50cmllcyBpbiB5b3VyIG5ldHdvcmsgZGlyZWN0 b3J5IiwKKyNlbmRpZiAvKiBOT0RJQUwgKi8KKyIgIFNFVCBORVRXT1JLIFRZUEUgICAgICAgU2Vs ZWN0IG5ldHdvcmsgdHlwZSAoaWYgbW9yZSB0aGFuIG9uZSBhdmFpbGFibGUpIiwKKyIgIFNFVCBI T1NUICAgICAgICAgICAgICAgTWFrZSBhIG5ldHdvcmsgY29ubmVjdGlvbiBidXQgc3RheSBpbiBj b21tYW5kIG1vZGUiLAorIiAgQ09OTkVDVCAgICAgICAgICAgICAgICBCZWdpbiB0ZXJtaW5hbCBj b25uZWN0aW9uIiwKKyNpZmRlZiBUTkNPREUKKyIgIFRFTE5FVCAgICAgICAgICAgICAgICAgU2Vs ZWN0IGEgVGVsbmV0IGhvc3QgYW5kIENPTk5FQ1QgdG8gaXQiLAorI2VuZGlmIC8qIFROQ09ERSAq LworI2lmZGVmIFJMT0dDT0RFCisiICBSTE9HSU4gICAgICAgICAgICAgICAgIFNlbGVjdCBhbiBS bG9naW4gaG9zdCBhbmQgQ09OTkVDVCB0byBpdCIsCisjZW5kaWYgLyogUkxPR0NPREUgKi8KKyNp ZmRlZiBBTllTU0gKKyIgIFNTSCBbIE9QRU4gXSAgICAgICAgICAgU2VsZWN0IGFuIFNTSCBob3N0 IGFuZCBDT05ORUNUIHRvIGl0IiwKKyNlbmRpZiAvKiBBTllTU0ggKi8KKyNpZmRlZiBORVdGVFAK KyIgIEZUUCBbIE9QRU4gXSAgICAgICAgICAgTWFrZSBhbiBGVFAgY29ubmVjdGlvbiIsCisjZW5k aWYgLyogTkVXRlRQICovCisjaWZkZWYgQ0tIVFRQCisiICBIVFRQIE9QRU4gICAgICAgICAgICAg IE1ha2UgYW4gSFRUUCBjb25uZWN0aW9uIiwKKyNlbmRpZiAvKiBDS0hUVFAgKi8KKyNlbmRpZiAv KiBORVRDT05OICovCisKKyNpZmRlZiBOVAorIiAiLAorIlRvIHJldHVybiBmcm9tIHRoZSB0ZXJt aW5hbCB3aW5kb3cgdG8gdGhlIEstOTU+IHByb21wdDoiLAorI2Vsc2UKKyNpZmRlZiBPUzIKKyIg IiwKKyJUbyByZXR1cm4gZnJvbSB0aGUgdGVybWluYWwgd2luZG93IHRvIHRoZSBLLzI+IHByb21w dDoiLAorI2Vsc2UKKyIgIiwKKyJUbyByZXR1cm4gZnJvbSBhIHRlcm1pbmFsIGNvbm5lY3Rpb24g dG8gdGhlIEMtS2VybWl0IHByb21wdDoiLAorI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIE5U ICovCisjaWZkZWYgT1MyCisiICBcCitQcmVzcyB0aGUga2V5IG9yIGtleS1jb21iaW5hdGlvbiBz aG93biBhZnRlciBcIkNvbW1hbmQ6XCIgaW4gdGhlIHN0YXR1cyBsaW5lIiwKKyIgIChzdWNoIGFz IEFsdC14KSBvciB0eXBlIHlvdXIgZXNjYXBlIGNoYXJhY3RlciBmb2xsb3dlZCBieSB0aGUgbGV0 dGVyIEMuIiwKKyNlbHNlCisiICBUeXBlIHlvdXIgZXNjYXBlIGNoYXJhY3RlciBmb2xsb3dlZCBi eSB0aGUgbGV0dGVyIEMuIiwKKyNlbmRpZiAvKiBPUzIgKi8KKyIgIiwKKyJUbyBkaXNwbGF5IHlv dXIgZXNjYXBlIGNoYXJhY3RlcjoiLAorIiAgU0hPVyBFU0NBUEUiLAorIiAiLAorIlRvIGRpc3Bs YXkgb3RoZXIgc2V0dGluZ3M6IiwKKyIgIFNIT1cgQ09NTVVOSUNBVElPTlMsIFNIT1cgVEVSTUlO QUwsIFNIT1cgRklMRSwgU0hPVyBQUk9UT0NPTCwgZXRjLiIsCisjZWxzZSAgLyogIU5PTE9DQUwg Ki8KKyIgIiwKKyJUbyBkaXNwbGF5IHNldHRpbmdzOiIsCisiICBTSE9XIENPTU1VTklDQVRJT05T LCBTSE9XIEZJTEUsIFNIT1cgUFJPVE9DT0wsIGV0Yy4iLAorI2VuZGlmIC8qIE5PTE9DQUwgKi8K KyIgIiwKKyJUaGUgbWFudWFsIGZvciBDLUtlcm1pdCBpcyB0aGUgYm9vayBcIlVzaW5nIEMtS2Vy bWl0XCIuICBGb3IgaW5mb3JtYXRpb24iLAorImFib3V0IHRoZSBtYW51YWwsIHZpc2l0OiIsCisi ICBodHRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS91c2luZ2NrZXJtaXQuaHRtbCIsCisiICIsCisj aWZkZWYgT1MyCisiRm9yIGEgS2VybWl0IDk1IHR1dG9yaWFsLCB2aXNpdDoiLAorIiAgaHR0cDov L2tlcm1pdC5jb2x1bWJpYS5lZHUvazk1dHV0b3IuaHRtbCIsCisiICIsCisjZW5kaWYgLyogT1My ICovCisiRm9yIGFuIG9ubGluZSBDLUtlcm1pdCB0dXRvcmlhbCwgdmlzaXQ6IiwKKyIgIGh0dHA6 Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2NrdXR1dG9yLmh0bWwiLAorIiAiLAorIlRvIGxlYXJuIGFi b3V0IHNjcmlwdCBwcm9ncmFtbWluZyBhbmQgYXV0b21hdGlvbjoiLAorIiAgaHR0cDovL2tlcm1p dC5jb2x1bWJpYS5lZHUvY2tzY3JpcHRzLmh0bWwiLAorIiAiLAorIkZvciBmdXJ0aGVyIGluZm9y bWF0aW9uIGFib3V0IGEgcGFydGljdWxhciBjb21tYW5kLCB0eXBlIEhFTFAgeHh4LCIsCisid2hl cmUgeHh4IGlzIHRoZSBuYW1lIG9mIHRoZSBjb21tYW5kLiAgRm9yIGRvY3VtZW50YXRpb24sIG5l d3Mgb2YgbmV3IiwKKyJyZWxlYXNlcywgYW5kIGluZm9ybWF0aW9uIGFib3V0IG90aGVyIEtlcm1p dCBzb2Z0d2FyZSwgdmlzaXQgdGhlIiwKKyJLZXJtaXQgUHJvamVjdCB3ZWJzaXRlOiIsCisiICIs CisiICBodHRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS8iLAorIiAiLAorIkZvciBpbmZvcm1hdGlv biBhYm91dCB0ZWNobmljYWwgc3VwcG9ydCBwbGVhc2UgdmlzaXQgdGhpcyBwYWdlOiIsCisiICIs CisiICBodHRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9zdXBwb3J0Lmh0bWwiLAorIiIKK307CisK K3N0YXRpYyBjaGFyICogaG14eW1hdGNoW10gPSB7CisiU0VUIE1BVENIIHsgRE9URklMRSwgRklG TyB9IHsgT04sIE9GRiB9IiwKKyIgIFRlbGxzIHdoZXRoZXIgd2lsZGNhcmRzIHNob3VsZCBtYXRj aCBkb3RmaWxlcyAoZmlsZXMgd2hvc2UgbmFtZXMgYmVnaW4iLAorIiAgd2l0aCBwZXJpb2QpIG9y IFVOSVggRklGTyBzcGVjaWFsIGZpbGVzLiAgTUFUQ0ggRklGTyBkZWZhdWx0IGlzIE9GRi4iLAor IiAgTUFUQ0ggRE9URklMRSBkZWZhdWx0IGlzIE9GRiBpbiBVTklYLCBPTiBlbHNld2hlcmUuIiwK KyIiCit9OworCisjaWZuZGVmIE5PU0VYUAorc3RhdGljIGNoYXIgKiBobXh5c2V4cFtdID0gewor IlNFVCBTRVhQUkVTU0lPTiB7IERFUFRILUxJTUlULCBFQ0hPLVJFU1VMVCwgVFJVTkNBVEUtQUxM LVJFU1VMVFMgfSIsCisiICBERVBUSC1MSU1JVCBzZXRzIGEgbGltaXQgb24gdGhlIGRlcHRoIG9m IG5lc3Rpbmcgb3IgcmVjdXJzaW9uIGluIiwKKyIgIFMtRXhwcmVzc2lvbnMgdG8gcHJldmVudCB0 aGUgcHJvZ3JhbSBmcm9tIGNyYXNoaW5nIGZyb20gbWVtb3J5IGV4aGF1c3Rpb24uIiwKKyIgIEVD SE8tUkVTVUxUIHRlbGxzIHdoZXRoZXIgUy1FeHByZXNzaW9uIHJlc3VsdHMgc2hvdWxkIGJlIGRp c3BsYXllZCBhcyIsCisiICBhIHJlc3VsdCBvZiBldmFsdWF0aW5nIGFuIGV4cHJlc3Npb247IHRo ZSBkZWZhdWx0IGlzIHRvIGRpc3BsYXkgb25seSBhdCIsCisiICB0b3AgKGludGVyYWN0aXZlKSBs ZXZlbDsgT0ZGIG1lYW5zIG5ldmVyIGRpc3BsYXk7IE9OIG1lYW5zIGFsd2F5cyBkaXNwbGF5LiIs CisiICBUUlVOQ0FURS1BTEwtUkVTVUxUUyBPTiBtZWFucyB0aGUgcmVzdWx0cyBvZiBhbGwgYXJp dGhtZXRpYyBvcGVyYXRpb25zIiwKKyIgIHNob3VsZCBiZSBmb3JjZWQgdG8gaW50ZWdlcnMgKHdo b2xlIG51bWJlcnMpIGJ5IGRpc2NhcmRpbmcgYW55IGZyYWN0aW9uYWwiLAorIiAgcGFydC4gIFRo ZSBkZWZhdWx0IGlzIE9GRi4gIFNIT1cgU0VYUFJFU1NJT04gZGlzcGxheXMgdGhlIGN1cnJlbnQg c2V0dGluZ3MuIgorLCIiCit9OworI2VuZGlmCS8qIE5PU0VYUCAqLworCisjaWZkZWYgT1MyCisj aWZkZWYgS1VJCitzdGF0aWMgY2hhciAqIGhteHlndWlbXSA9IHsKKyJTRVQgR1VJIENMT1NFIE9G RiIsCisiICBEaXNhYmxlcyB0aGUgU3lzdGVtIE1lbnUgQ2xvc2UgYW5kIEZpbGUtPkV4aXQgZnVu Y3Rpb25zIHdoaWNoIGNvdWxkIGJlIiwKKyIgIHVzZWQgdG8gZXhpdCBLZXJtaXQuICBPbmNlIGRp c2FibGVkIHRoZXNlIGZ1bmN0aW9ucyBjYW5ub3QgYmUgcmUtZW5hYmxlZCIsCisiICBhbmQgdGhl IG9ubHkgd2F5IHRvIGV4aXQgS2VybWl0IGlzIHZpYSB0aGUgS2VybWl0IFNjcmlwdCBFWElUIGNv bW1hbmQuIiwKKyIgIiwKKyJTRVQgR1VJIERJQUxPR1MgeyBPTiwgT0ZGIH0iLAorIiAgT04gbWVh bnMgdGhhdCBwb3B1cHMsIGFsZXJ0cywgdXNlIEdVSSBkaWFsb2dzOyBPRkYgbWVhbnMgdG8gdXNl IiwKKyIgIHRleHQtbW9kZSBwb3B1cHMgb3IgcHJvbXB0cy4gIE9OIGJ5IGRlZmF1bHQuIiwKKyIg IiwKKyJTRVQgR1VJIEZPTlQgbmFtZSBzaXplIiwKKyIgIENob29zZXMgdGhlIGZvbnQgYW5kIHNp emUuICBUeXBlIFwic2V0IGd1aSBmb250ID9cIiB0byBzZWUgdGhlIGxpc3Qgb2YiLAorIiAgY2hv aWNlcy4gIFRoZSBzaXplIGNhbiBiZSBhIHdob2xlIG51bWJlciBvciBjYW4gY29udGFpbiBhIGRl Y2ltYWwgcG9pbnQiLAorIiAgYW5kIGEgZnJhY3Rpb24gKHdoaWNoIGlzIHJvdW5kZWQgdG8gdGhl IG5lYXJlc3QgaGFsZiBwb2ludCkuIiwKKyIgIiwKKyJTRVQgR1VJIE1FTlVCQVIgT0ZGIiwKKyIg IERpc2FibGVzIG1lbnViYXIgZnVuY3Rpb25zIHdoaWNoIGNvdWxkIGJlIHVzZWQgdG8gbW9kaWZ5 IHRoZSBLZXJtaXQiLAorIiAgc2Vzc2lvbiBjb25maWd1cmF0aW9uLiAgT25jZSBkaXNhYmxlZCB0 aGUgbWVudWJhciBmdW5jdGlvbnMgY2Fubm90IGJlIiwKKyIgIHJlLWVuYWJsZWQuIiwgCisiICIs CisiU0VUIEdVSSBSR0JDT0xPUiBjb2xvcm5hbWUgcmVkdmFsdWUgZ3JlZW52YWx1ZSBibHVldmFs dWUiLAorIiAgU3BlY2lmaWVzIHRoZSByZWQtZ3JlZW4tYmx1ZSBtaXh0dXJlIHRvIGJlIHVzZWQg dG8gcmVuZGVyIHRoZSBnaXZlbiIsCisiICBjb2xvciBuYW1lLiAgVHlwZSBcInNldCBndWkgcmdi Y29sb3JcIiB0byBzZWUgYSBsaXN0IG9mIGNvbG9ybmFtZXMuIiwKKyIgIHRoZSBSR0IgdmFsdWVz IGFyZSB3aG9sZSBudW1iZXJzIGZyb20gMCB0byAyNTUuIiwKKyIgIiwKKyJTRVQgR1VJIFRPT0xC QVIgT0ZGIiwgCisiICBEaXNhYmxlcyB0b29sYmFyIGZ1bmN0aW9ucyB3aGljaCBjb3VsZCBiZSB1 c2VkIHRvIG1vZGlmeSB0aGUgS2VybWl0IiwKKyIgIHNlc3Npb24gY29uZmlndXJhdGlvbi4gIE9u Y2UgZGlzYWJsZWQgdGhlIHRvb2xiYXIgZnVuY3Rpb25zIGNhbm5vdCBiZSIsCisiICByZS1lbmFi bGVkLiIsIAorIiAiLAorIlNFVCBHVUkgV0lORE9XIFBPU0lUSU9OIHggeSIsCisiICBNb3ZlcyB0 aGUgSzk1IHdpbmRvdyB0byB0aGUgZ2l2ZW4gWCxZIGNvb3JkaW5hdGVzLCBwaXhlbHMgZnJvbSB0 b3AgbGVmdC4iLAorIiAgKE5vdCB5ZXQgaW1wbGVtZW50ZWQgLS0gdXNlIGNvbW1hbmQtbGluZSBv cHRpb25zIHRvIGRvIHRoaXMuKSIsCisiICIsCisiU0VUIEdVSSBXSU5ET1cgUkVTSVpFLU1PREUg eyBDSEFOR0UtRElNRU5TSU9OUywgU0NBTEUtRk9OVCB9IiwKKyIgIERlZmF1bHQgaXMgQ0hBTkdF LURJTUVOU0lPTlMuIiwKKyIiLAorIlNFVCBHVUkgV0lORE9XIFJVTi1NT0RFIHsgTUFYSU1JWkUs IE1JTklNSVpFLCBSRVNUT1JFIH0iLAorIiAgQ2hhbmdlcyB0aGUgcnVuIG1vZGUgc3RhdGUgb2Yg dGhlIEdVSSB3aW5kb3cuIiwKKyIiCit9OworI2VuZGlmIC8qIEtVSSAqLworI2VuZGlmIC8qIE9T MiAqLworCisjaWZkZWYgQU5ZU1NICitzdGF0aWMgY2hhciAqIGhteHhzc2hbXSA9IHsKKyNpZmRl ZiBTU0hCVUlMVElOCisiU3ludGF4OiBTU0ggeyBBREQsIEFHRU5ULCBDTEVBUiwgS0VZLCBbIE9Q RU4gXSwgVjIgfSBvcGVyYW5kcy4uLiIsCisiICBQZXJmb3JtcyBhbiBTU0gtcmVsYXRlZCBhY3Rp b24sIGRlcGVuZGluZyBvbiB0aGUga2V5d29yZCB0aGF0IGZvbGxvd3M6IiwKKyIgIiwKKyJTU0gg QUREIExPQ0FMLVBPUlQtRk9SV0FSRCBsb2NhbC1wb3J0IGhvc3QgcG9ydCIsCisiICBBZGRzIGEg cG9ydCBmb3J3YXJkaW5nIHRyaXBsZXQgdG8gdGhlIGxvY2FsIHBvcnQgZm9yd2FyZGluZyBsaXN0 LiIsCisiICBUaGUgdHJpcGxldCBzcGVjaWZpZXMgYSBsb2NhbCBwb3J0IHRvIGJlIGZvcndhcmRl ZCBhbmQgdGhlIGhvc3RuYW1lIC8iLAorIiAgaXAtYWRkcmVzcyBhbmQgcG9ydCBudW1iZXIgdG8g d2hpY2ggdGhlIHBvcnQgc2hvdWxkIGJlIGZvcndhcmRlZCBmcm9tIiwKKyIgIHRoZSByZW1vdGUg aG9zdC4gIFBvcnQgZm9yd2FyZGluZyBpcyBhY3RpdmF0ZWQgYXQgY29ubmVjdGlvbiIsCisiICBl c3RhYmxpc2htZW50IGFuZCBjb250aW51ZXMgdW50aWwgdGhlIGNvbm5lY3Rpb24gaXMgdGVybWlu YXRlZC4iLAorIiAiLAorIlNTSCBBREQgUkVNT1RFLVBPUlQtRk9SV0FSRCByZW1vdGUtcG9ydCBo b3N0IHBvcnQiLAorIiAgQWRkcyBhIHBvcnQgZm9yd2FyZGluZyB0cmlwbGV0IHRvIHRoZSByZW1v dGUgcG9ydCBmb3J3YXJkaW5nIGxpc3QuIiwKKyIgIFRoZSB0cmlwbGV0IHNwZWNpZmllcyBhIHJl bW90ZSBwb3J0IHRvIGJlIGZvcndhcmRlZCBhbmQgdGhlIiwKKyIgIGhvc3RuYW1lL2lwLWFkZHJl c3MgYW5kIHBvcnQgbnVtYmVyIHRvIHdoaWNoIHRoZSBwb3J0IHNob3VsZCBiZSIsCisiICBmb3J3 YXJkZWQgZnJvbSB0aGUgbG9jYWwgbWFjaGluZS4gIFBvcnQgZm9yd2FyZGluZyBpcyBhY3RpdmF0 ZWQgYXQiLAorIiAgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IGFuZCBjb250aW51ZXMgdW50aWwg dGhlIGNvbm5lY3Rpb24gaXMiLAorIiAgdGVybWluYXRlZC4iLAorIiAiLAorIlNTSCBBR0VOVCBB REQgWyBpZGVudGl0eS1maWxlIF0iLAorIiAgQWRkcyB0aGUgY29udGVudHMgb2YgdGhlIGlkZW50 aXR5LWZpbGUgKGlmIGFueSkgdG8gdGhlIFNTSCBBR0VOVCIsCisiICBwcml2YXRlIGtleSBjYWNo ZS4gIElmIG5vIGlkZW50aXR5LWZpbGUgaXMgc3BlY2lmaWVkLCBhbGwgZmlsZXMiLAorIiAgc3Bl Y2lmaWVkIHdpdGggU0VUIFNTSCBJREVOVElUWS1GSUxFIGFyZSBhZGRlZCB0byB0aGUgY2FjaGUu IiwKKyIgIiwKKyJTU0ggQUdFTlQgREVMRVRFIFsgaWRlbnRpdHktZmlsZSBdIiwKKyIgIERlbGV0 ZXMgdGhlIGNvbnRlbnRzIG9mIHRoZSBpZGVudGl0eS1maWxlIChpZiBhbnkpIGZyb20gdGhlIFNT SCBBR0VOVCIsCisiICBwcml2YXRlIGtleSBjYWNoZS4gIElmIG5vIGlkZW50aXR5LWZpbGUgaXMg c3BlY2lmaWVkLCBhbGwgZmlsZXMiLAorIiAgc3BlY2lmaWVkIHdpdGggU0VUIFNTSCBJREVOVElU WS1GSUxFIGFyZSBkZWxldGVkIGZyb20gdGhlIGNhY2hlLiIsCisiICIsCisiU1NIIEFHRU5UIExJ U1QgWyAvRklOR0VSUFJJTlQgXSIsCisiICBMaXN0cyB0aGUgY29udGVudHMgb2YgdGhlIFNTSCBB R0VOVCBwcml2YXRlIGtleSBjYWNoZS4gIElmIC9GSU5HRVJQUklOVCIsCisiICBpcyBzcGVjaWZp ZWQsIHRoZSBmaW5nZXJwcmludCBvZiB0aGUgcHJpdmF0ZSBrZXlzIGFyZSBkaXNwbGF5ZWQgaW5z dGVhZCIsCisiICBvZiB0aGUga2V5cy4iLAorIiAiLAorIlNTSCBDTEVBUiBMT0NBTC1QT1JULUZP UldBUkQiLAorIiAgQ2xlYXJzIHRoZSBsb2NhbCBwb3J0IGZvcndhcmRpbmcgbGlzdC4iLAorIiAi LAorIlNTSCBDTEVBUiBSRU1PVEUtUE9SVC1GT1JXQVJEIiwKKyIgIENsZWFycyB0aGUgcmVtb3Rl IHBvcnQgZm9yd2FyZGluZyBsaXN0LiIsCisiICIsCisiU1NIIEtFWSBjb21tYW5kczoiLAorIiAg VGhlIFNTSCBLRVkgY29tbWFuZHMgY3JlYXRlIGFuZCBtYW5hZ2UgcHVibGljIGFuZCBwcml2YXRl IGtleSBwYWlycyIsCisiICAoaWRlbnRpdGllcykuICBUaGVyZSBhcmUgdGhyZWUgZm9ybXMgb2Yg U1NIIGtleXMuICBFYWNoIGtleSBwYWlyIGlzIiwKKyIgIHN0b3JlZCBpbiBpdHMgb3duIHNldCBv ZiBmaWxlczoiLAorIiAiLAorIiAgIEtleSBUeXBlICAgICAgUHJpdmF0ZSBLZXkgRmlsZSAgICAg ICAgICAgUHVibGljIEtleSBGaWxlIiwKKyIgICAgdjEgUlNBIGtleXMgICBcXHYoYXBwZGF0YSlz c2gvaWRlbnRpdHkgICBcXHYoYXBwZGF0YSlzc2gvaWRlbnRpdHkucHViIiwKKyIgICAgdjIgUlNB IGtleXMgICBcXHYoYXBwZGF0YSlzc2gvaWRfcnNhICAgICBcXHYoYXBwZGF0YSlzc2gvaWRfcnNh LnB1YiIsCisiICAgIHYyIERTQSBrZXlzICAgXFx2KGFwcGRhdGEpc3NoL2lkX2RzYSAgICAgXFx2 KGFwcGRhdGEpc3NoL2lkX2RzYS5wdWIiLAorIiAiLAorIiAgS2V5cyBhcmUgc3RvcmVkIHVzaW5n IHRoZSBPcGVuU1NIIGtleWZpbGUgZm9ybWF0LiAgVGhlIHByaXZhdGUga2V5IiwKKyIgIGZpbGVz IGNhbiBiZSAob3B0aW9uYWxseSkgcHJvdGVjdGVkIGJ5IHNwZWNpZnlpbmcgYSBwYXNzcGhyYXNl LiAgQSIsCisiICBwYXNzcGhyYXNlIGlzIGEgbG9uZ2VyIHZlcnNpb24gb2YgYSBwYXNzd29yZC4g IEVuZ2xpc2ggdGV4dCBwcm92aWRlcyIsCisiICBubyBtb3JlIHRoYW4gMiBiaXRzIG9mIGtleSBk YXRhIHBlciBjaGFyYWN0ZXIuICA1Ni1iaXQga2V5cyBjYW4gYmUiLAorIiAgYnJva2VuIGJ5IGEg YnJ1dGUgZm9yY2UgYXR0YWNrIGluIGFwcHJveGltYXRlbHkgMjQgaG91cnMuICBXaGVuIHVzZWQs IiwKKyIgIHByaXZhdGUga2V5IGZpbGVzIHNob3VsZCB0aGVyZWZvcmUgYmUgcHJvdGVjdGVkIGJ5 IGEgcGFzc3BocmFzZSBvZiBhdCIsCisiICBsZWFzdCA0MCBjaGFyYWN0ZXJzIChhYm91dCA4MCBi aXRzKS4iLAorIiAiLAorIiAgVG8gaW5zdGFsbCBhIHB1YmxpYyBrZXkgZmlsZSBvbiB0aGUgaG9z dCwgeW91IG11c3QgdHJhbnNmZXIgdGhlIGZpbGUiLAorIiAgdG8gdGhlIGhvc3QgYW5kIGFwcGVu ZCBpdCB0byB5b3VyIFwiYXV0aG9yaXplZF9rZXlzXCIgZmlsZS4gIFRoZSBmaWxlIiwKKyIgIHBl cm1pc3Npb25zIG11c3QgYmUgNjAwIChvciBlcXVpdmFsZW50KS4iLAorIiAiLAorIlNTSCBLRVkg Q0hBTkdFLVBBU1NQSFJBU0UgWyAvTkVXLVBBU1NQSFJBU0U6cGFzc3BocmFzZSIsCisiICAgICAg L09MRC1QQVNTUEhSQVNFOnBhc3NwaHJhc2UgXSBmaWxlbmFtZSIsCisiICBUaGlzIHJlLWVuY3J5 cHRzIHRoZSBzcGVjaWZpZWQgcHJpdmF0ZSBrZXkgZmlsZSB3aXRoIGEgbmV3IHBhc3NwaHJhc2Uu IiwKKyIgIFRoZSBvbGQgcGFzc3BocmFzZSBpcyByZXF1aXJlZC4gIElmIHRoZSBwYXNzcGhyYXNl cyAoYW5kIGZpbGVuYW1lKSBhcmUiLAorIiAgbm90IHByb3ZpZGVkIEtlcm1pdCBwcm9tcHRzIHlv dXIgZm9yIHRoZW0uIiwKKyIgIiwKKyJTU0ggS0VZIENSRUFURSBbIC9CSVRTOmJpdHMgL1BBU1NQ SFJBU0U6cGFzc3BocmFzZSIsCisiICAgIC9UWVBFOnsgVjEtUlNBLCBWMi1EU0EsIFYyLVJTQSB9 IC9WMS1SU0EtQ09NTUVOVDpjb21tZW50IF0gZmlsZW5hbWUiLAorIiAgVGhpcyBjb21tYW5kIGNy ZWF0ZXMgYSBuZXcgcHJpdmF0ZS9wdWJsaWMga2V5IHBhaXIuICBUaGUgZGVmYXVsdHMgYXJlOiIs CisiICBCSVRTOjEwMjQgYW5kIFRZUEU6VjItUlNBLiAgVGhlIGZpbGVuYW1lIGlzIHRoZSBuYW1l IG9mIHRoZSBwcml2YXRlIiwKKyIgIGtleSBmaWxlLiAgVGhlIHB1YmxpYyBrZXkgaXMgY3JlYXRl ZCB3aXRoIHRoZSBzYW1lIG5hbWUgd2l0aCAucHViIiwKKyIgIGFwcGVuZGVkIHRvIGl0LiAgSWYg YSBmaWxlbmFtZSBpcyBub3Qgc3BlY2lmaWVkIEtlcm1pdCBwcm9tcHRzIHlvdSBmb3IiLAorIiAg aXQuICBWMSBSU0Ega2V5IGZpbGVzIG1heSBoYXZlIGFuIG9wdGlvbmFsIGNvbW1lbnQsIHdoaWNo IGlzIGlnbm9yZWQiLAorIiAgZm9yIG90aGVyIGtleSB0eXBlcy4iLAorIiAiLAorIlNTSCBLRVkg RElTUExBWSBbIC9GT1JNQVQ6e0ZJTkdFUlBSSU5ULElFVEYsT1BFTlNTSCxTU0guQ09NfSBdIGZp bGVuYW1lIiwKKyIgIFRoaXMgY29tbWFuZCBkaXNwbGF5cyB0aGUgY29udGVudHMgb2YgYSBwdWJs aWMgb3IgcHJpdmF0ZSBrZXkgZmlsZS4iLAorIiAgVGhlIGRlZmF1bHQgZm9ybWF0IGlzIE9QRU5T U0guIiwKKyIgIiwKKyJTU0ggS0VZIFYxIFNFVC1DT01NRU5UIGZpbGVuYW1lIGNvbW1lbnQiLAor IiAgVGhpcyBjb21tYW5kIHJlcGxhY2VzIHRoZSBjb21tZW50IGFzc29jaWF0ZWQgd2l0aCBhIFYx IFJTQSBrZXkgZmlsZS4iLAorIiAiLAorIlNTSCBbIE9QRU4gXSBob3N0IFsgcG9ydCBdIFsgL0NP TU1BTkQ6Y29tbWFuZCAvVVNFUjp1c2VybmFtZSIsCisiICAgICAgL1BBU1NXT1JEOnB3ZCAvVkVS U0lPTjp7IDEsIDIgfSAvWDExLUZPUldBUkRJTkc6eyBPTiwgT0ZGIH0gXSIsCisiICBUaGlzIGNv bW1hbmQgZXN0YWJsaXNoZXMgYSBuZXcgY29ubmVjdGlvbiB1c2luZyBTU0ggdmVyc2lvbiAxIG9y IiwKKyIgIHZlcnNpb24gMiBwcm90b2NvbC4gIFRoZSBjb25uZWN0aW9uIGlzIG1hZGUgdG8gdGhl IHNwZWNpZmllZCBob3N0IG9uIiwKKyIgIHRoZSBTU0ggcG9ydCAoeW91IGNhbiBvdmVycmlkZSB0 aGUgcG9ydCBieSBpbmNsdWRpbmcgYSBwb3J0IG5hbWUgb3IiLAorIiAgbnVtYmVyIGFmdGVyIHRo ZSBob3N0IG5hbWUpLiAgT25jZSB0aGUgY29ubmVjdGlvbiBpcyBlc3RhYmxpc2hlZCB0aGUiLAor IiAgYXV0aGVudGljYXRpb24gbmVnb3RpYXRpb25zIGJlZ2luLiAgSWYgdGhlIGF1dGhlbnRpY2F0 aW9uIGlzIGFjY2VwdGVkLCIsCisiICB0aGUgbG9jYWwgYW5kIHJlbW90ZSBwb3J0IGZvcndhcmRp bmcgbGlzdHMgYXJlIHVzZWQgdG8gZXN0YWJsaXNoIHRoZSIsCisiICBkZXNpcmVkIGNvbm5lY3Rp b25zLiAgSWYgWDExIEZvcndhcmRpbmcgaXMgYWN0aXZlLCB0aGlzIHJlc3VsdHMgaW4gYSIsCisi ICByZW1vdGUgcG9ydCBmb3J3YXJkaW5nIGJldHdlZW4gdGhlIFgxMSBjbGllbnRzIG9uIHRoZSBy ZW1vdGUgaG9zdCBhbmQiLAorIiAgWDExIFNlcnZlciBvbiB0aGUgbG9jYWwgbWFjaGluZS4gIElm IGEgL0NPTU1BTkQgaXMgcHJvdmlkZWQsIHRoZSIsCisiICBjb21tYW5kIGlzIGV4ZWN1dGVkIG9u IHRoZSByZW1vdGUgaG9zdCBpbiBwbGFjZSBvZiB5b3VyIGRlZmF1bHQgc2hlbGwuIiwKKyIgIiwK KyIgIEFuIGV4YW1wbGUgb2YgYSAvQ09NTUFORCB0byBleGVjdXRlIEMtS2VybWl0IGluIFNFUlZF UiBtb2RlIGlzOiIsCisiICAgICBTU0ggT1BFTiBob3N0bmFtZSAvQ09NTUFORDp7a2VybWl0IC14 IC1sIDB9IiwKKyIgIiwKKyJTU0ggVjIgUkVLRVkiLAorIiAgUmVxdWVzdHMgdGhhdCBhbiBleGlz dGluZyBTU0ggVjIgY29ubmVjdGlvbiBnZW5lcmF0ZSBuZXcgc2Vzc2lvbiBrZXlzLiIsCisjZWxz ZSAgLyogU1NIQlVJTFRJTiAqLworIlN5bnRheDogU1NIIFsgb3B0aW9ucyBdIDxob3N0bmFtZT4g WyBjb21tYW5kIF0iLAorIiAgTWFrZXMgYW4gU1NIIGNvbm5lY3Rpb24gdXNpbmcgdGhlIGV4dGVy bmFsIHNzaCBwcm9ncmFtIHZpYSB0aGUgU0VUIFNTSCIsCisiICBDT01NQU5EIHN0cmluZywgd2hp Y2ggaXMgXCJzc2ggLWUgbm9uZVwiIGJ5IGRlZmF1bHQuICBPcHRpb25zIGZvciB0aGUiLAorIiAg ZXh0ZXJuYWwgc3NoIHByb2dyYW0gbWF5IGJlIGluY2x1ZGVkLiAgSWYgdGhlIGhvc3RuYW1lIGlz IGZvbGxvd2VkIGJ5IGEiLAorIiAgY29tbWFuZCwgdGhlIGNvbW1hbmQgaXMgZXhlY3V0ZWQgb24g dGhlIGhvc3QgaW5zdGVhZCBvZiBhbiBpbnRlcmFjdGl2ZSIsCisiICBzaGVsbC4iLAorI2VuZGlm IC8qIFNTSEJVSUxUSU4gKi8KKyIiCit9OworCitzdGF0aWMgY2hhciAqaG14eXNzaFtdID0gewor I2lmZGVmIFNTSEJVSUxUSU4KKyJTRVQgU1NIIEFHRU5ULUZPUldBUkRJTkcgeyBPTiwgT0ZGIH0i LAorIiAgSWYgYW4gYXV0aGVudGljYXRpb24gYWdlbnQgaXMgaW4gdXNlLCBzZXR0aW5nIHRoaXMg dmFsdWUgdG8gT04iLAorIiAgcmVzdWx0cyBpbiB0aGUgY29ubmVjdGlvbiB0byB0aGUgYWdlbnQg YmVpbmcgZm9yd2FyZGVkIHRvIHRoZSByZW1vdGUiLAorIiAgY29tcHV0ZXIuICBUaGUgZGVmYXVs dCBpcyBPRkYuIiwKKyIgIiwKKyJTRVQgU1NIIENIRUNLLUhPU1QtSVAgeyBPTiwgT0ZGIH0iLAor IiAgU3BlY2lmaWVzIHdoZXRoZXIgdGhlIHJlbW90ZSBob3N0J3MgaXAtYWRkcmVzcyBzaG91bGQg YmUgY2hlY2tlZCIsCisiICBhZ2FpbnN0IHRoZSBtYXRjaGluZyBob3N0IGtleSBpbiB0aGUga25v d25faG9zdHMgZmlsZS4gIFRoaXMgY2FuIGJlIiwKKyIgIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIHRo ZSBob3N0IGtleSBjaGFuZ2VkIGFzIGEgcmVzdWx0IG9mIEROUyBzcG9vZmluZy4iLAorIiAgVGhl IGRlZmF1bHQgaXMgT04uIiwKKyIgIiwKKyJTRVQgU1NIIENPTVBSRVNTSU9OIHsgT04sIE9GRiB9 IiwKKyIgIFNwZWNpZmllcyB3aGV0aGVyIGNvbXByZXNzaW9uIHdpbGwgYmUgdXNlZC4gIFRoZSBk ZWZhdWx0IGlzIE9OLiIsCisiICIsCisiU0VUIFNTSCBEWU5BTUlDLUZPUldBUkRJTkcgeyBPTiwg T0ZGIH0iLAorIiAgU3BlY2lmaWVzIHdoZXRoZXIgS2VybWl0IGlzIHRvIGFjdCBhcyBhIFNPQ0tT NCBzZXJ2aWNlIG9uIHBvcnQgMTA4MCIsCisiICB3aGVuIGNvbm5lY3RlZCB0byBhIHJlbW90ZSBo b3N0IHZpYSBTU0guICBXaGVuIEtlcm1pdCBhY3RzIGFzIGEgU09DS1M0IiwKKyIgIHNlcnZpY2Us IGl0IGFjY2VwdHMgY29ubmVjdGlvbiByZXF1ZXN0cyBhbmQgZm9yd2FyZHMgdGhlIGNvbm5lY3Rp b25zIiwKKyIgIHRocm91Z2ggdGhlIHJlbW90ZSBob3N0LiAgVGhlIGRlZmF1bHQgaXMgT0ZGLiIs CisiICIsCisiU0VUIFNTSCBHQVRFV0FZLVBPUlRTIHsgT04sIE9GRiB9IiwKKyIgIFNwZWNpZmll cyB3aGV0aGVyIEtlcm1pdCBzaG91bGQgYWN0IGFzIGEgZ2F0ZXdheSBmb3IgZm9yd2FyZGVkIiwK KyIgIGNvbm5lY3Rpb25zIHJlY2VpdmVkIGZyb20gdGhlIHJlbW90ZSBob3N0LiAgVGhlIGRlZmF1 bHQgaXMgT0ZGLiIsCisiICIsCisiU0VUIFNTSCBHU1NBUEkgREVMRUdBVEUtQ1JFREVOVElBTFMg eyBPTiwgT0ZGIH0iLAorIiAgU3BlY2lmaWVzIHdoZXRoZXIgS2VybWl0IHNob3VsZCBkZWxlZ2F0 ZSBHU1NBUEkgY3JlZGVudGlhbHMgdG8gIiwKKyIgIHRoZSByZW1vdGUgaG9zdCBhZnRlciBhdXRo ZW50aWNhdGlvbi4gIERlbGVnYXRpbmcgY3JlZGVudGlhbHMgYWxsb3dzIiwKKyIgIHRoZSBjcmVk ZW50aWFscyB0byBiZSB1c2VkIGZyb20gdGhlIHJlbW90ZSBob3N0LiAgVGhlIGRlZmF1bHQgaXMg T0ZGLiIsCisiICIsCisiU0VUIFNTSCBIRUFSVEJFQVQtSU5URVJWQUwgPHNlY29uZHM+IiwKKyIg IFNwZWNpZmllcyBhIG51bWJlciBvZiBzZWNvbmRzIG9mIGlkbGUgdGltZSBhZnRlciB3aGljaCBh biBJR05PUkUiLAorIiAgbWVzc2FnZSB3aWxsIGJlIHNlbnQgdG8gdGhlIHNlcnZlci4gIFRoaXMg cHVsc2UgaXMgdXNlZnVsIGZvciIsCisiICBtYWludGFpbmluZyBjb25uZWN0aW9ucyB0aHJvdWdo IEhUVFAgUHJveHkgc2VydmVycyBhbmQgTmV0d29yayIsCisiICBBZGRyZXNzIFRyYW5zbGF0b3Jz LiAgVGhlIGRlZmF1bHQgaXMgT0ZGICgwIHNlY29uZHMpLiIsCisiICIsCisiU0VUIFNTSCBJREVO VElUWS1GSUxFIGZpbGVuYW1lIFsgZmlsZW5hbWUgWyAuLi4gXSBdIiwKKyIgIFNwZWNpZmllcyBv bmUgb3IgbW9yZSBmaWxlcyBmcm9tIHdoaWNoIHRoZSB1c2VyJ3MgYXV0aG9yaXphdGlvbiIsCisi ICBpZGVudGl0aWVzIChwcml2YXRlIGtleXMpIGFyZSB0byBiZSByZWFkIHdoZW4gdXNpbmcgcHVi bGljIGtleSIsCisiICBhdXRob3JpemF0aW9uLiAgVGhlc2UgYXJlIGZpbGVzIHVzZWQgaW4gYWRk aXRpb24gdG8gdGhlIGRlZmF1bHQgZmlsZXM6IiwKKyIgIiwKKyIgICAgXFx2KGFwcGRhdGEpc3No L2lkZW50aXR5ICAgICAgVjEgUlNBIiwKKyIgICAgXFx2KGFwcGRhdGEpc3NoL2lkX3JzYSAgICAg ICAgVjIgUlNBIiwKKyIgICAgXFx2KGFwcGRhdGEpc3NoL2lkX2RzYSAgICAgICAgVjIgRFNBIiwK KyIgIiwKKyJTRVQgU1NIIEtFUkJFUk9TNCBUR1QtUEFTU0lORyB7IE9OLCBPRkYgfSIsCisiICBT cGVjaWZpZXMgd2hldGhlciBLZXJtaXQgc2hvdWxkIGZvcndhcmQgS2VyYmVyb3MgNCBUR1RzIHRv IHRoZSBob3N0LiIsCisiICBUaGUgZGVmYXVsdCBpcyBPRkYuIiwKKyIgIiwKKyJTRVQgU1NIIEtF UkJFUk9TNSBUR1QtUEFTU0lORyB7IE9OLCBPRkYgfSIsCisiICBTcGVjaWZpZXMgd2hldGhlciBL ZXJtaXQgc2hvdWxkIGZvcndhcmQgS2VyYmVyb3MgNSBUR1RzIHRvIHRvIHRoZSIsCisiICBob3N0 LiAgVGhlIGRlZmF1bHQgaXMgT0ZGLiIsCisiICIsCisiU0VUIFNTSCBQUklWSUxFR0VELVBPUlQg eyBPTiwgT0ZGIH0iLAorIiAgU3BlY2lmaWVzIHdoZXRoZXIgYSBwcml2aWxlZ2VkIHBvcnQgKGxl c3MgdGhhbiAxMDI0KSBzaG91bGQgYmUgdXNlZCIsCisiICB3aGVuIGNvbm5lY3RpbmcgdG8gdGhl IGhvc3QuICBQcml2aWxlZ2VkIHBvcnRzIGFyZSBub3QgcmVxdWlyZWQgZXhjZXB0IiwKKyIgIHdo ZW4gdXNpbmcgU1NIIFYxIHdpdGggUmhvc3RzIG9yIFJob3N0c1JTQSBhdXRob3JpemF0aW9uLiAg VGhlIGRlZmF1bHQiLAorIiAgaXMgT0ZGLiIsCisiICIsCisiU0VUIFNTSCBRVUlFVCB7IE9OLCBP RkYgfSIsCisiICBTcGVjaWZpZXMgd2hldGhlciBhbGwgbWVzc2FnZXMgZ2VuZXJhdGVkIGluIGNv bmp1bmN0aW9uIHdpdGggU1NIIiwKKyIgIHByb3RvY29scyBzaG91bGQgYmUgc3VwcHJlc3NlZC4g IFRoZSBkZWZhdWx0IGlzIE9GRi4iLAorIiAiLAorIlNFVCBTU0ggU1RSSUNULUhPU1QtS0VZLUNI RUNLIHsgQVNLLCBPTiwgT0ZGIH0iLAorIiAgU3BlY2lmaWVzIGhvdyBLZXJtaXQgc2hvdWxkIGJl aGF2ZSBpZiB0aGUgdGhlIGhvc3Qga2V5IGNoZWNrIGZhaWxzLiIsCisiICBXaGVuIHN0cmljdCBo b3N0IGtleSBjaGVja2luZyBpcyBPRkYsIHRoZSBuZXcgaG9zdCBrZXkgaXMgYWRkZWQgdG8gdGhl IiwKKyIgIHByb3RvY29sLXZlcnNpb24tc3BlY2lmaWMgdXNlci1rbm93bi1ob3N0cy1maWxlLiAg V2hlbiBzdHJpY3QgaG9zdCBrZXkiLAorIiAgY2hlY2tpbmcgaXMgT04sIHRoZSBuZXcgaG9zdCBr ZXkgaXMgcmVmdXNlZCBhbmQgdGhlIGNvbm5lY3Rpb24gaXMiLAorIiAgZHJvcHBlZC4gIFdoZW4g c2V0IHRvIEFTSywgS2VybWl0IHByb21wdCB5b3UgdG8gc2F5IHdoZXRoZXIgdGhlIG5ldyIsCisi ICBob3N0IGtleSBzaG91bGQgYmUgYWNjZXB0ZWQuICBUaGUgZGVmYXVsdCBpcyBBU0suIiwKKyIg IiwKKyIgIFN0cmljdCBob3N0IGtleSBjaGVja2luZyBwcm90ZWN0cyB5b3UgYWdhaW5zdCBUcm9q YW4gaG9yc2UgYXR0YWNrcy4iLAorIiAgSXQgZGVwZW5kcyBvbiB5b3UgdG8gbWFpbnRhaW4gdGhl IGNvbnRlbnRzIG9mIHRoZSBrbm93bi1ob3N0cy1maWxlIiwKKyIgIHdpdGggY3VycmVudCBhbmQg dHJ1c3RlZCBob3N0IGtleXMuIiwKKyIgIiwKKyJTRVQgU1NIIFVTRS1PUEVOU1NILUNPTkZJRyB7 IE9OLCBPRkYgfSIsCisiICBTcGVjaWZpZXMgd2hldGhlciBLZXJtaXQgc2hvdWxkIHBhcnNlIGFu IE9wZW5TU0ggY29uZmlndXJhdGlvbiBmaWxlIiwKKyIgIGFmdGVyIGFwcGx5aW5nIEtlcm1pdCdz IFNFVCBTU0ggY29tbWFuZHMuICBUaGUgY29uZmlndXJhdGlvbiBmaWxlIiwKKyIgIHdvdWxkIGJl IGxvY2F0ZWQgYXQgXFx2KGhvbWUpc3NoL3NzaF9jb25maWcuICBUaGUgZGVmYXVsdCBpcyBPRkYu IiwKKyIgIiwKKyJTRVQgU1NIIFYxIENJUEhFUiB7IDNERVMsIEJMT1dGSVNILCBERVMgfSIsCisi ICBTcGVjaWZpZXMgd2hpY2ggY2lwaGVyIHNob3VsZCBiZSB1c2VkIHRvIHByb3RlY3QgU1NIIHZl cnNpb24gMSIsCisiICBjb25uZWN0aW9ucy4gIFRoZSBkZWZhdWx0IGlzIDNERVMuIiwKKyIgIiwK KyJTRVQgU1NIIFYxIEdMT0JBTC1LTk9XTi1IT1NUUy1GSUxFIGZpbGVuYW1lIiwKKyIgIFNwZWNp ZmllcyB0aGUgbG9jYXRpb24gb2YgdGhlIHN5c3RlbS13aWRlIGtub3duLWhvc3RzIGZpbGUuICBU aGUiLAorIiAgZGVmYXVsdCBpczoiLAorIiAiLAorIiAgICBcdihjb21tb24pc3NoX2tub3duX2hv c3RzIiwKKyIgIiwKKyJTRVQgU1NIIFYxIFVTRVItS05PV04tSE9TVFMtRklMRSBmaWxlbmFtZSIs CisiICBTcGVjaWZpZXMgdGhlIGxvY2F0aW9uIG9mIHRoZSB1c2VyLWtub3duLWhvc3RzLWZpbGUu ICBUaGUgZGVmYXVsdCIsCisiICBsb2NhdGlvbiBpczoiLAorIiAiLAorIiAgICBcXHYoYXBwZGF0 YSlzc2gva25vd25faG9zdHMiLAorIiAiLAorIlNFVCBTU0ggVjIgQVVUSEVOVElDQVRJT04geyBF WFRFUk5BTC1LRVlYLCBHU1NBUEksIEhPU1RCQVNFRCwgIiwKKyIgICAgS0VZQk9BUkQtSU5URVJB Q1RJVkUsIFBBU1NXT1JELCBQVUJLRVksIFNSUC1HRVgtU0hBMSB9IFsgLi4uIF0iLAorIiAgU3Bl Y2lmaWVzIGFuIG9yZGVyZWQgbGlzdCBvZiBTU0ggdmVyc2lvbiAyIGF1dGhlbnRpY2F0aW9uIG1l dGhvZHMgdG8iLAorIiAgYmUgdXNlZCB3aGVuIGNvbm5lY3RpbmcgdG8gdGhlIHJlbW90ZSBob3N0 LiAgVGhlIGRlZmF1bHQgbGlzdCBpczoiLAorIiAiLAorIiAgICBleHRlcm5hbC1rZXl4IGdzc2Fw aSBob3N0YmFzZWQgcHVibGlja2V5IHNycC1nZXgtc2hhMSBwdWJsaWNrZXkiLAorIiAgICBrZXli b2FyZC1pbnRlcmFjdGl2ZSBwYXNzd29yZCBub25lIiwKKyIgIiwKKyJTRVQgU1NIIFYyIEFVVE8t UkVLRVkgeyBPTiwgT0ZGIH0iLAorIiAgU3BlY2lmaWVzIHdoZXRoZXIgS2VybWl0IGF1dG9tYXRp Y2FsbHkgaXNzdWVzIHJla2V5aW5nIHJlcXVlc3RzIiwKKyIgIG9uY2UgYW4gaG91ciB3aGVuIFNT SCB2ZXJzaW9uIDIgaW4gaW4gdXNlLiAgVGhlIGRlZmF1bHQgaXMgT04uIiwKKyIgIiwKKyJTRVQg U1NIIFYyIENJUEhFUlMgeyAzREVTLUNCQywgQUVTMTI4LUNCQyBBRVMxOTItQ0JDIEFFUzI1Ni1D QkMiLAorIiAgICAgQVJDRk9VUiBCTE9XRklTSC1DQkMgQ0FTVDEyOC1DQkMgUklKTkRBRUwxMjgt Q0JDIFJJSk5EQUVMMTkyLUNCQyIsCisiICAgICBSSUpOREFFTDI1Ni1DQkMgfSIsCisiICBTcGVj aWZpZXMgYW4gb3JkZXJlZCBsaXN0IG9mIFNTSCB2ZXJzaW9uIGNpcGhlcnMgdG8gYmUgdXNlZCB0 byBlbmNyeXB0IiwKKyIgIHRoZSBlc3RhYmxpc2hlZCBjb25uZWN0aW9uLiAgVGhlIGRlZmF1bHQg bGlzdCBpczoiLAorIiAiLAorIiAgICBhZXMxMjgtY2JjIDNkZXMtY2JjIGJsb3dmaXNoLWNiYyBj YXN0MTI4LWNiYyBhcmNmb3VyIGFlczE5Mi1jYmMiLAorIiAgICBhZXMyNTYtY2JjIiwKKyIgIiwK KyIgIFwicmlqbmRhZWxcIiBpcyBhbiBhbGlhcyBmb3IgXCJhZXNcIi4iLAorIiAiLAorIlNFVCBT U0ggVjIgR0xPQkFMLUtOT1dOLUhPU1RTLUZJTEUgZmlsZW5hbWUiLAorIiAgU3BlY2lmaWVzIHRo ZSBsb2NhdGlvbiBvZiB0aGUgc3lzdGVtLXdpZGUga25vd24taG9zdHMgZmlsZS4gIFRoZSBkZWZh dWx0IiwKKyIgIGxvY2F0aW9uIGlzOiIsCisiICIsCisiICAgIFxcdihjb21tb24pc3NoL2tub3du X2hvc3RzMiIsCisiICIsCisiU0VUIFNTSCBWMiBIT1NUS0VZLUFMR09SSVRITVMgeyBTU0gtRFNT LCBTU0gtUlNBIH0iLAorIiAgU3BlY2lmaWVzIGFuIG9yZGVyZWQgbGlzdCBvZiBob3N0a2V5IGFs Z29yaXRobXMgdG8gYmUgdXNlZCB0byB2ZXJpZnkiLAorIiAgdGhlIGlkZW50aXR5IG9mIHRoZSBo b3N0LiAgVGhlIGRlZmF1bHQgbGlzdCBpcyIsCisiICIsCisiICAgIHNzaC1yc2Egc3NoLWRzcyIs CisiICIsCisiU0VUIFNTSCBWMiBNQUNTIHsgSE1BQy1NRDUgSE1BQy1NRDUtOTYgSE1BQy1SSVBF TUQxNjAgSE1BQy1TSEExIiwKKyIgICAgIEhNQUMtU0hBMS05NiB9IiwKKyIgIFNwZWNpZmllcyBh biBvcmRlcmVkIGxpc3Qgb2YgTWVzc2FnZSBBdXRoZW50aWNhdGlvbiBDb2RlIGFsZ29yaXRobXMg dG8iLAorIiAgYmUgdXNlZCBmb3IgaW50ZWdyaXR5ICBwcm90ZWN0aW9uIG9mIHRoZSBlc3RhYmxp c2hlZCBjb25uZWN0aW9uLiAgVGhlIiwKKyIgIGRlZmF1bHQgbGlzdCBpczoiLAorIiAiLAorIiAg ICBobWFjLW1kNSBobWFjLXNoYTEgaG1hYy1yaXBlbWQxNjAgaG1hYy1zaGExLTk2IGhtYWMtbWQ1 LTk2IiwKKyIgIiwKKyJTRVQgU1NIIFYyIFVTRVItS05PV04tSE9TVFMtRklMRSBmaWxlbmFtZSIs CisiICBTcGVjaWZpZXMgdGhlIGxvY2F0aW9uIG9mIHRoZSB1c2VyLWtub3duLWhvc3RzIGZpbGUu ICBUaGUgZGVmYXVsdCIsCisiICBsb2NhdGlvbiBpczoiLAorIiAiLAorIiAgICBcXHYoYXBwZGF0 YSlzc2gva25vd25faG9zdHMyIiwKKyIgIiwKKyJTRVQgU1NIIFZFUkJPU0UgbGV2ZWwiLAorIiAg U3BlY2lmaWVzIGhvdyBtYW55IG1lc3NhZ2VzIHNob3VsZCBiZSBnZW5lcmF0ZWQgYnkgdGhlIE9w ZW5TU0ggZW5naW5lLiIsCisiICBUaGUgbGV2ZWwgY2FuIHJhbmdlIGZyb20gMCB0byA3LiAgVGhl IGRlZmF1bHQgdmFsdWUgaXMgMi4iLAorIiAiLAorIlNFVCBTU0ggVkVSU0lPTiB7IDEsIDIsIEFV VE9NQVRJQyB9IiwKKyIgIFNwZWNpZmllcyB3aGljaCBTU0ggdmVyc2lvbiBzaG91bGQgYmUgbmVn b3RpYXRlZC4gIFRoZSBkZWZhdWx0IGlzIiwKKyIgIEFVVE9NQVRJQyB3aGljaCBtZWFucyB1c2Ug dmVyc2lvbiAyIGlmIHN1cHBvcnRlZDsgb3RoZXJ3aXNlIHRvIGZhbGwiLAorIiAgYmFjayB0byB2 ZXJzaW9uIDEuIiwKKyIgIiwKKyJTRVQgU1NIIFgxMS1GT1JXQVJESU5HIHsgT04sIE9GRiB9IiwK KyIgIFNwZWNpZmllcyB3aGV0aGVyIFggV2luZG93cyBTeXN0ZW0gRGF0YSBpcyB0byBiZSBmb3J3 YXJkZWQgYWNyb3NzIHRoZSIsCisiICBlc3RhYmxpc2hlZCBTU0ggY29ubmVjdGlvbi4gIFRoZSBk ZWZhdWx0IGlzIE9GRi4gIFdoZW4gT04sIHRoZSBESVNQTEFZIiwKKyIgIHZhbHVlIGlzIGVpdGhl ciBzZXQgdXNpbmcgdGhlIFNFVCBURUxORVQgRU5WIERJU1BMQVkgY29tbWFuZCBvciByZWFkIiwK KyIgIGZyb20gdGhlIERJU1BMQVkgZW52aXJvbm1lbnQgdmFyaWFibGUuIiwKKyIgIiwKKyJTRVQg U1NIIFhBVVRILUxPQ0FUSU9OIGZpbGVuYW1lIiwKKyIgIFNwZWNpZmllcyB0aGUgbG9jYXRpb24g b2YgdGhlIHhhdXRoIGV4ZWN1dGFibGUgKGlmIHByb3ZpZGVkIHdpdGggdGhlIiwKKyIgIFgxMSBT ZXJ2ZXIgc29mdHdhcmUuKSIsCisjZWxzZSAgLyogU1NIQlVJTFRJTiAqLworIlN5bnRheDogU0VU IFNTSCBDT01NQU5EIGNvbW1hbmQiLAorIiAgU3BlY2lmaWVzIHRoZSBleHRlcm5hbCBjb21tYW5k IHRvIGJlIHVzZWQgdG8gbWFrZSBhbiBTU0ggY29ubmVjdGlvbi4iLAorIiAgQnkgZGVmYXVsdCBp dCBpcyBcInNzaCAtZSBub25lXCIgKHNzaCB3aXRoIG5vIGVzY2FwZSBjaGFyYWN0ZXIpLiIsCisj ZW5kaWYgLyogU1NIQlVJTFRJTiAqLworIiIKK307CisjZW5kaWYgLyogQU5ZU1NIICovCisKKyNp ZmRlZiBORVdGVFAKK3N0YXRpYyBjaGFyICpobXh5Z3ByW10gPSB7CisiU3ludGF4OiBTRVQgR0VU LVBVVC1SRU1PVEUgeyBBVVRPLCBGVFAsIEtFUk1JVH0iLAorIiAgVGVsbHMgS2VybWl0IHdoZXRo ZXIgR0VULCBQVVQsIGFuZCBSRU1PVEUgY29tbWFuZHMgc2hvdWxkIGJlIGRpcmVjdGVkIiwKKyIg IGF0IGEgS2VybWl0IHNlcnZlciBvciBhbiBGVFAgc2VydmVyLiAgVGhlIGRlZmF1bHQgaXMgQVVU TywgbWVhbmluZyB0aGF0IiwKKyIgIGlmIHlvdSBoYXZlIG9ubHkgb25lIGFjdGl2ZSBjb25uZWN0 aW9uLCB0aGUgYXBwcm9wcmlhdGUgYWN0aW9uIGlzIHRha2VuIiwKKyIgIHdoZW4geW91IGdpdmUg YSBHRVQsIFBVVCwgb3IgUkVNT1RFIGNvbW1hbmQuICBTRVQgR0VULVBVVC1SRU1PVEUgRlRQIGZv cmNlcyIKKywKKyIgIEtlcm1pdCB0byB0cmVhdCBHRVQsIFBVVCwgYW5kIFJFTU9URSBhcyBGVFAg Y2xpZW50IGNvbW1hbmRzOyBzZXR0aW5nIHRoaXMiLAorIiAgdG8gS0VSTUlUIGZvcmNlcyB0aGVz ZSBjb21tYW5kcyB0byBiZSB0cmVhdGVkIGFzIEtlcm1pdCBjbGllbnQgY29tbWFuZHMuIiwKKyIg IE5PVEU6IFBVVCBpbmNsdWRlcyBTRU5ELCBNUFVULCBNU0VORCwgYW5kIGFsbCBvdGhlciBzaW1p bGFyIGNvbW1hbmRzLiIsCisiICBBbHNvIHNlZSBIRUxQIFJFTU9URSwgSEVMUCBTRVQgTE9DVVMs IEhFTFAgRlRQLiIsCisiIgorfTsKKyNlbmRpZiAvKiBORVdGVFAgKi8KKworI2lmZGVmIExPQ1VT CitzdGF0aWMgY2hhciAqaG14eWxvY3VzW10gPSB7CisjaWZkZWYgS1VJCisiU3ludGF4OiBTRVQg TE9DVVMgeyBBU0ssIEFVVE8sIExPQ0FMLCBSRU1PVEUgfSIsCisjZWxzZQorIlN5bnRheDogU0VU IExPQ1VTIHsgQVVUTywgTE9DQUwsIFJFTU9URSB9IiwKKyNlbmRpZiAvKiBLVUkgKi8KKyIgIFNw ZWNpZmllcyB3aGV0aGVyIHVucHJlZml4ZWQgZmlsZSBtYW5hZ2VtZW50IGNvbW1hbmRzIHNob3Vs ZCBvcGVyYXRlIiwKKyIgIGxvY2FsbHkgb3IgKHdoZW4gdGhlcmUgaXMgYSBjb25uZWN0aW9uIHRv IGEgcmVtb3RlIEZUUCBvciBLZXJtaXQiLAorIiAgc2VydmVyKSBzZW50IHRvIHRoZSBzZXJ2ZXIu ICBUaGUgYWZmZWN0ZWQgY29tbWFuZHMgYXJlOiBDRCAoQ1dEKSwgUFdELCIsCisiICBDRFVQLCBE SVJFQ1RPUlksIERFTEVURSwgUkVOQU1FLCBNS0RJUiwgYW5kIFJNRElSLiAgVG8gZm9yY2UgYW55 IG9mIiwKKyIgIHRoZXNlIGNvbW1hbmRzIHRvIGJlIGV4ZWN1dGVkIGxvY2FsbHksIGdpdmUgaXQg YW4gTC1wcmVmaXg6IExDRCwgTERJUiwiLAorIiAgZXRjLiAgVG8gZm9yY2UgcmVtb3RlIGV4ZWN1 dGlvbiwgdXNlIHRoZSBSLXByZWZpeDogUkNELCBSRElSLCBhbmQgc28iLAorIiAgb24uICBTSE9X IENPTU1BTkQgc2hvd3MgdGhlIGN1cnJlbnQgTG9jdXMuIiwKKyIgIiwKKyIgIEJ5IGRlZmF1bHQs IHRoZSBMb2N1cyBmb3IgZmlsZSBtYW5hZ2VtZW50IGNvbW1hbmRzIGlzIHN3aXRjaGVkIiwKKyIg IGF1dG9tYXRpY2FsbHkgd2hlbmV2ZXIgeW91IG1ha2Ugb3IgY2xvc2UgYSBjb25uZWN0aW9uOiBp ZiB5b3UgbWFrZSBhbiIsCisiICBGVFAgY29ubmVjdGlvbiwgdGhlIExvY3VzIGJlY29tZXMgUkVN T1RFOyBpZiB5b3UgY2xvc2UgYW4gRlRQIGNvbm5lY3Rpb24iLAorIiAgb3IgbWFrZSBhbnkgb3Ro ZXIga2luZCBvZiBjb25uZWN0aW9uLCB0aGUgTG9jdXMgYmVjb21lcyBMT0NBTC4iLAorI2lmZGVm IEtVSQorIiAiLAorIiAgVGhlcmUgYXJlIHR3byBraW5kcyBvZiBhdXRvbWF0aWMgc3dpdGNoaW5n OiBBU0sgKHRoZSBkZWZhdWx0KSB3aGljaCIsCisiICBhc2tzIHlvdSBpZiBpdCdzIE9LIHRvIHN3 aXRjaCwgYW5kIEFVVE8sIHdoaWNoIHN3aXRjaGVzIHdpdGhvdXQgYXNraW5nLiIsCisjZW5kaWYg LyogS1VJICovCisiICIsCisiICBJZiB5b3UgZ2l2ZSBhIFNFVCBMT0NVUyBMT0NBTCBvciBTRVQg TE9DVVMgUkVNT1RFIGNvbW1hbmQsIHRoaXMgc2V0cyIsCisiICB0aGUgbG9jdXMgYXMgaW5kaWNh dGVkIGFuZCBkaXNhYmxlcyBhdXRvbWF0aWMgc3dpdGNoaW5nLiIsCisjaWZkZWYgS1VJCisiICBT RVQgTE9DVVMgQVVUTyBvciBTRVQgTE9DVVMgQVNLIHJlc3RvcmVzIGF1dG9tYXRpYyBzd2l0Y2hp bmcuIiwKKyIgIFlvdSBjYW4gYWxzbyBjaGFuZ2UgTG9jdXMgc3dpdGNoaW5nIGFuZCBiZWhhdmlv ciBpbiB0aGUgQWN0aW9ucyBtZW51LiIsCisjZWxzZQorIiAgU0VUIExPQ1VTIEFVVE8gcmVzdG9y ZXMgYXV0b21hdGljIHN3aXRjaGluZy4iLAorI2VuZGlmIC8qIEtVSSAqLworIiIsCit9OworI2Vu ZGlmIC8qIExPQ1VTICovCisKKyNpZmRlZiBVTklYCisjaWZuZGVmIE5PUFVURU5WCitzdGF0aWMg Y2hhciAqaG14eHB1dGVudltdID0geworIlN5bnRheDogUFVURU5WIG5hbWUgdmFsdWUiLAorIiAg Q3JlYXRlcyBvciBtb2RpZmllcyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgd2l0aCB0aGUgZ2l2 ZW4gbmFtZSB0byBoYXZlIiwKKyIgIHRoZSBnaXZlbiB2YWx1ZS4gIFB1cnBvc2U6IHRvIHBhc3Mg cGFyYW1ldGVycyB0byBzdWJwcm9jZXNzZXMgd2l0aG91dCIsCisiICBoYXZpbmcgdGhlbSBhcHBl YXIgb24gdGhlIGNvbW1hbmQgbGluZS4gIElmIHRoZSB2YWx1ZSBpcyBibGFuayAoZW1wdHkpLCIs CisiICB0aGUgdmFyaWFibGUgaXMgZGVsZXRlZC4gIFRoZSByZXN1bHQgaXMgdmlzaWJsZSB0byB0 aGlzIGluc3RhbnRpYXRpb24gb2YiLAorIiAgQy1LZXJtaXQgdmlhIFxcJChuYW1lKSBhbmQgdG8g YW55IGluZmVyaW9yIHByb2Nlc3NlcyBieSB3aGF0ZXZlciBtZXRob2QiLAorIiAgdGhleSB1c2Ug dG8gYWNjZXNzIGVudmlyb25tZW50IHZhcmlhYmxlcy4gIFRoZSB2YWx1ZSBtYXkgYmUgZW5jbG9z ZWQgaW4iLAorIiAgZG91YmxlcXVvdGVzIG9yIGJyYWNlcywgYnV0IGl0IG5lZWQgbm90IGJlOyBp ZiBpdCBpcyB0aGUgb3V0ZXJtb3N0IiwKKyIgIGRvdWJsZXF1b3RlcyBvciBicmFjZXMgYXJlIHJl bW92ZWQuIiwKKyIgIiwKKyIgIE5vdGUgdGhlIHN5bnRheDoiLAorIiAgICBQVVRFTlYgbmFtZSB2 YWx1ZSIsCisiICBub3Q6IiwKKyIgICAgUFVURU5WIG5hbWU9dmFsdWUiLAorIiAiLAorIiAgVGhl cmUgaXMgbm8gZXF1YWwgc2lnbiBiZXR3ZWVuIG5hbWUgYW5kIHZhbHVlLCBhbmQgdGhlIG5hbWUg aXRzZWxmIG1heSIsCisiICBub3QgaW5jbHVkZSBhbiBlcXVhbCBzaWduLiIsCisiIiwKK307Cisj ZW5kaWYJLyogTk9QVVRFTlYgKi8KKyNlbmRpZgkvKiBVTklYICovCisKK3N0YXRpYyBjaGFyICpo bXh4dGFrW10gPSB7CisiU3ludGF4OiBUQUtFIGZpbGVuYW1lIFsgYXJndW1lbnRzIF0iLAorIiAg VGVsbHMgS2VybWl0IHRvIGV4ZWN1dGUgY29tbWFuZHMgZnJvbSB0aGUgbmFtZWQgZmlsZS4gIE9w dGlvbmFsIGFyZ3VtZW50IiwKKyIgIHdvcmRzLCBhcmUgYXV0b21hdGljYWxseSBhc3NpZ25lZCB0 byB0aGUgbWFjcm8gYXJndW1lbnQgdmFyaWFibGVzIFxcJTEiLAorIiAgdGhyb3VnaCBcXCU5LiAg S2VybWl0IGNvbW1hbmQgZmlsZXMgbWF5IHRoZW1zZWx2ZXMgY29udGFpbiBUQUtFIGNvbW1hbmRz LCIsCisiICB1cCB0byBhbnkgcmVhc29uYWJsZSBkZXB0aCBvZiBuZXN0aW5nLiIsCisiIgorfTsK KworI2lmZGVmIFRDUFNPQ0tFVAorc3RhdGljIGNoYXIgKmhteHhmaXJld1tdID0geworI2lmZGVm IE9TMgorIkZpcmV3YWxsIFRyYXZlcnNhbCBpbiBLZXJtaXQgOTUiLAorI2Vsc2UKKyJGaXJld2Fs bCBUcmF2ZXJzYWwgaW4gQy1LZXJtaXQiLAorI2VuZGlmCisiICIsCisjaWZuZGVmIE5FV0ZUUAor I2lmbmRlZiBDS0hUVFAKKyNpZm5kZWYgQ0tfU09DS1MKKyNkZWZpbmUgTk9GSVJFV0FMTAorI2Vu ZGlmCisjZW5kaWYKKyNlbmRpZgorI2lmZGVmIE5PRklSRVdBTEwKKyJUaGlzIHZlcnNpb24gb2Yg S2VybWl0IHdhcyBidWlsdCB3aXRoIG5vIHN1cHBvcnQgZm9yIGZpcmV3YWxsIHRyYXZlcnNhbCIs CisicHJvdG9jb2xzLiAgS2VybWl0IGNhbiBiZSBidWlsdCB3aXRoIHN1cHBvcnQgZm9yIEhUVFAg UHJveHkgU2VydmVycywiLAorIlNPQ0tTIGF1dGhvcml6ZWQgZmlyZXdhbGwgdHJhdmVyc2FsLCBh bmQgRlRQIFBhc3NpdmUgY29ubmVjdGlvbiBtb2Rlcy4iLAorIiAiLAorI2Vsc2UgLyogTk9GSVJF V0FMTCAqLworI2lmZGVmIENLSFRUUAorIlRoZSBzaW1wbGlzdCBmb3JtIG9mIGZpcmV3YWxsIHRy YXZlcnNhbCBpcyB0aGUgSFRUUCBDT05ORUNUIGNvbW1hbmQuIFRoZSIsCisiQ09OTkVDVCBjb21t YW5kIHdhcyBpbXBsZW1lbnRlZCB0byBhbGxvdyBhIHB1YmxpYyB3ZWIgc2VydmVyIHdoaWNoIHVz dWFsbHkiLAorInJlc2lkZXMgb24gdGhlIGJvdW5kYXJ5IGJldHdlZW4gdGhlIHB1YmxpYyBhbmQg cHJpdmF0ZSBuZXR3b3JrcyB0byBmb3J3YXJkIiwKKyJIVFRQIHJlcXVlc3RzIGZyb20gY2xpZW50 cyBvbiB0aGUgcHJpdmF0ZSBuZXR3b3JrIHRvIHB1YmxpYyB3ZWIgc2l0ZXMuICBUbyIsCisiYWxs b3cgc2VjdXJlIHdlYiBjb25uZWN0aW9ucywgdGhlIEhUVFAgQ09OTkVDVCBjb21tYW5kIGF1dGhl bnRpY2F0ZXMgdGhlIiwKKyJjbGllbnQgd2l0aCBhIHVzZXJuYW1lL3Bhc3N3b3JkIGFuZCB0aGVu IGVzdGFibGlzaGVzIGEgdHVubmVsIHRvIHRoZSIsCisiZGVzaXJlZCBob3N0LiIsCisKKyIgIiwK KworIldlYiBzZXJ2ZXJzIHRoYXQgc3VwcG9ydCB0aGUgQ09OTkVDVCBjb21tYW5kIGNhbiBiZSBj b25maWd1cmVkIHRvIGFsbG93IiwKKyJvdXRib3VuZCBjb25uZWN0aW9ucyBmb3IgYXV0aGVudGlj YXRlZCB1c2VycyB0byBhbnkgVENQL0lQIGhvc3RuYW1lLXBvcnQiLAorImNvbWJpbmF0aW9uIGFj Y2Vzc2libGUgdG8gdGhlIFdlYiBzZXJ2ZXIuICBIVFRQIENPTk5FQ1QgY2FuIGJlIHVzZWQgb25s eSIsCisid2l0aCBUQ1AtYmFzZWQgcHJvdG9jb2xzLiAgUHJvdG9jb2xzIHN1Y2ggYXMgS2VyYmVy b3MgYXV0aGVudGljYXRpb24gdGhhdCIsCisidXNlIFVEUC9JUCBjYW5ub3QgYmUgdHVubmVsZWQg dXNpbmcgSFRUUCBDT05ORUNULiIsCisKKyIgIiwKKworIlNFVCBUQ1AgSFRUUC1QUk9YWSBbc3dp dGNoZXNdIFs8aG9zdG5hbWUgb3IgaXAtYWRkcmVzcz5bOjxwb3J0Pl1dIiwKKyIgIElmIGEgaG9z dG5hbWUgb3IgaXAtYWRkcmVzcyBpcyBzcGVjaWZpZWQsIEtlcm1pdCB1c2VzIHRoZSBnaXZlbiIs CisiICBwcm94eSBzZXJ2ZXIgd2hlbiBhdHRlbXB0aW5nIG91dGdvaW5nIFRDUCBjb25uZWN0aW9u cy4gIElmIG5vIGhvc3RuYW1lciIsCisiICBvciBpcC1hZGRyZXNzIGlzIHNwZWNpZmllZCwgYW55 IHByZXZpb3VzbHkgc3BlY2lmaWVkIFByb3h5IHNlcnZlciBpcyIsCisiICByZW1vdmVkLiAgSWYg bm8gcG9ydCBudW1iZXIgaXMgc3BlY2lmaWVkLCB0aGUgXCJodHRwXCIgc2VydmljZSBpcyB1c2Vk LiIsCisiICBbc3dpdGNoZXNdIGNhbiBiZSBvbmUgb3IgbW9yZSBvZjoiLAorIiAgICAgL0FHRU5U OjxhZ2VudD4gL1VTRVI6PHVzZXI+IC9QQVNTV09SRDo8cGFzc3dvcmQ+IiwKKyIgIFN3aXRjaCBw YXJhbWV0ZXJzIGFyZSB1c2VkIHdoZW4gY29ubmVjdGluZyB0byB0aGUgcHJveHkgc2VydmVyIGFu ZCIsCisiICBvdmVycmlkZSBhbnkgb3RoZXIgdmFsdWVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgY29u bmVjdGlvbi4iLAorIiAiLAorCisjZW5kaWYgLyogQ0tIVFRQICovCisjaWZkZWYgQ0tfU09DS1MK KworIkluIHRoZSBlYXJseSAxOTkwcyBhcyBmaXJld2FsbHMgd2VyZSBiZWNvbWluZyBwcmV2YWxl bnQsIERhdmlkIEtvYmxhcyIsCisiZGV2ZWxvcGVkIHRoZSBTT0NLUyBwcm90b2NvbCBmb3IgVENQ L0lQIGZpcmV3YWxsIHRyYXZlcnNhbC4gIFR3byB2ZXJzaW9ucyIsCisib2YgU09DS1MgYXJlIGN1 cnJlbnRseSBpbiB1c2U6IFZlcnNpb24gNC4yIGxldHMgVENQL0lQIGNsaWVudCBhcHBsaWNhdGlv bnMiLAorInRyYXZlcnNlIGZpcmV3YWxscywgc2ltaWxhciB0byBIVFRQIENPTk5FQ1QsIGV4Y2Vw dCB0aGF0IHRoZSBTT0NLUyBjbGllbnQiLAorImlzIGF3YXJlIG9mIHRoZSBwdWJsaWMgc291cmNl IElQIGFkZHJlc3MgYW5kIHBvcnQsIHdoaWNoIGNhbiBiZSB1c2VkIHdpdGhpbiIsCisidGhlIGFw cGxpY2F0aW9uIHByb3RvY29sIHRvIGFzc2lzdCBpbiBzZWN1cmluZyB0aGUgY29ubmVjdGlvbiAo ZS5nLiBGVFAiLAorInNlc3Npb25zIHNlY3VyZWQgd2l0aCBHU1NBUEkgS2VyYmVyb3MgNSkuIiwK KworIiAiLAorCisiSW4gMTk5NSB0aGUgSUVURiBpc3N1ZWQgU09DS1MgUHJvdG9jb2wgVmVyc2lv biA1IChSRkMgMTkyOCksIHdoaWNoIGlzIiwKKyJzaWduaWZpY2FudGx5IG1vcmUgZ2VuZXJhbCB0 aGFuIHZlcnNpb24gNC4gIEJlc2lkZXMgc3VwcG9ydGluZyBjbGllbnQtIiwKKyJ0by1zZXJ2ZXIg VENQL0lQIGNvbm5lY3Rpb25zLCBpdCBhbHNvIGluY2x1ZGVzOiIsCisKKyIgIiwKKyIgLiBBdXRo ZW50aWNhdGVkIGZpcmV3YWxsIHRyYXZlcnNhbCBvZiBVRFAvSVAgcGFja2V0cy4iLAorIiAuIEF1 dGhlbnRpY2F0ZWQgYmluZGluZyBvZiBpbmNvbWluZyBwdWJsaWMgcG9ydHMgb24gdGhlIGZpcmV3 YWxsLiIsCisiICIsCisKKyJUaGlzIGxldHMgYSBzZXJ2aWNlIG9uIHRoZSBwcml2YXRlIG5ldHdv cmsgb2ZmZXIgcHVibGljIHNlcnZpY2VzLiAgSXQgYWxzbyIsCisibGV0cyBjbGllbnQgYXBwbGlj YXRpb25zIGxpa2UgRlRQIGVzdGFibGlzaCBhIHRlbXBvcmFyeSBwdWJsaWMgcHJlc2VuY2UiLAor InRoYXQgY2FuIGJlIHVzZWQgYnkgdGhlIEZUUCBzZXJ2ZXIgdG8gY3JlYXRlIGEgZGF0YSBjaGFu bmVsLiAgQnkgYWxsb3dpbmciLAorInRoZSBjbGllbnQgdG8gYmluZCB0byBhIHB1YmxpYyBwb3J0 IG9uIHRoZSBmaXJld2FsbCBhbmQgYmUgYXdhcmUgb2YgdGhlIiwKKyJwdWJsaWMgYWRkcmVzcywg U09DS1MgNSBsZXRzIHRoZSBhcHBsaWNhdGlvbiBwcm90b2NvbCBjb21tdW5pY2F0ZSB0aGlzIiwK KyJpbmZvcm1hdGlvbiB0byB0aGUgc2VydmVyLiIsCisKKyIgIiwKKworI2lmZGVmIE9TMgorI2lm ZGVmIE5UCisiS2VybWl0IDk1IHN1cHBvcnRzIFNPQ0tTIDQuMi4gIFRoZSBTT0NLUyBTZXJ2ZXIg aXMgc3BlY2lmaWVkIHdpdGg6IiwKKyIgIiwKKyIgIFNFVCBUQ1AgU09DS1MtU0VSVkVSIGhvc3Ru YW1lL2lwLWFkZHJlc3MiLAorIiAiLAorIlRoZSBTT0NLUy5DT05GIGZpbGUgaXMgZm91bmQgYnkg ZXhhbWluaW5nIHRoZSBFVEMgZW52aXJvbm1lbnQgdmFyaWFibGU7IiwKKyJzZWFyY2hpbmcgaW4g XFxXSU5ET1dTIG9uIFdpbmRvd3MgOTUvOTgvTUU7IG9yIHRoZSIsCisiXFxXSU5ET1dTXFxTWVNU RU1cXERSSVZFUlNcXEVUQyBkaXJlY3Rvcnkgb24gTlRcXDIwMDBcXFhQIHN5c3RlbXMuIiwKKwor I2Vsc2UgLyogTlQgKi8KKworIktlcm1pdC8yIHByb3ZpZGVzIHN1cHBvcnQgZm9yIFNPQ0tTIDQu MiBzZXJ2ZXJzIHdoZW4gdXNpbmcgSUJNIFRDUC9JUCAyLjAsIiwKKyJJQk0gT1MvMiBXQVJQLCBv ciBhIGNvbXBhdGlibGUgcHJvdG9jb2wgc3RhY2suIFNPQ0tTIGlzIG9uZSBwb3B1bGFyIG1lYW5z IiwKKyJvZiBpbXBsZW1lbnRpbmcgYSBmaXJld2FsbCBiZXR3ZWVuIGEgcHJpdmF0ZSBuZXR3b3Jr IGFuZCB0aGUgSW50ZXJuZXQuIiwKKyIgIiwKKyJLZXJtaXQvMiBzaGFyZXMgdGhlIHNhbWUgU09D S1MgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFzIElCTSBHb3BoZXIuIEl0IGFsc28iLAorInN1cHBv cnRzIHRoZSB1c2Ugb2YgbG9jYWwgU09DS1MgY29uZmlndXJhdGlvbiBmaWxlcy4iLAorIiAiLAor IlRvIHNwZWNpZnkgdGhlIGRlZmF1bHQgU09DS1MgU2VydmVyLCBhZGQgU0VUIFNPQ0tTX1NFUlZF Uj0gdG8geW91ciIsCisiQ09ORklHLlNZUyBmaWxlLiIsCisiICIsCisiSWYgeW91IG11c3QgdXNl IGEgU09DS1MgRGlzdHJpYnV0ZWQgTmFtZSBTZXJ2ZXIsIGFkZCBTRVQgU09DS1NfTlM9IHRvIHlv dXIiLAorIkNPTkZJRy5TWVMgZmlsZS4iLAorIiAiLAorCisiSWYgeW91IG11c3QgdXNlIGEgc3Bl Y2lmaWMgd2l0aCB5b3VyIFNPQ0tTIHNlcnZlciwgYmUgc3VyZSB0byBhZGQgU0VUIFVTRVI9IiwK KyJ0byB5b3VyIENPTkZJRy5TWVMgZmlsZS4gT3RoZXJ3aXNlLCBcIm9zMnVzZXJcIiBpcyB1c2Vk IGJ5IGRlZmF1bHQuIiwKKworIiAiLAorCisiVGhlIFNPQ0tTIGNvbmZpZ3VyYXRpb24gZmlsZSBt dXN0IGJlIHBsYWNlZCBpbiB0aGUgZGlyZWN0b3J5IHBvaW50ZWQgdG8gYnkiLAorInRoZSBFVEMg ZW52aXJvbm1lbnQgdmFyaWFibGUgYXMgZGVjbGFyZWQgaW4geW91ciBDT05GSUcuU1lTIGZpbGUu IFRoZSBuYW1lIiwKKyJzaG91bGQgYmUgU09DS1MuQ09ORi4gT24gYSBGQVQgZmlsZSBzeXN0ZW0s IHVzZSBTT0NLUy5DTkYuIiwKKworIiAiLAorIlRoZSBmb3JtYXQgb2YgdGhlIGxpbmVzIGluIHRo ZSBTT0NLUyBjb25maWd1cmF0aW9uIGZpbGUgYXJlIGFzIGZvbGxvd3M6IiwKKyIgIiwKKyIgLiAj IGNvbW1lbnRzIiwKKyIgLiBkZW55IFsqPXVzZXJsaXN0XSBkc3RfYWRkciBkc3RfbWFzayBbb3Ag cG9ydF0iLAorIiAuIGRpcmVjdCBbKj11c2VybGlzdF0gZHN0X2FkZHIgZHN0X21hc2sgW29wIHBv cnRdIiwKKyIgLiBzb2NrZCBbQD1zZXJ2ZXJsaXN0XSBbKj11c2VybGlzdF0gZHN0X2FkZHIgZHN0 X21hc2sgW29wIHBvcnRdIiwKKyIgIiwKKworIm9wIG11c3QgYmUgb25lIG9mICdlcScsICduZXEn LCAnbHQnLCAnZ3QnLCAnbGUnLCBvciAnZ2UnLiBkc3RfYWRkciwiLAorImRzdF9tYXNrLCBhbmQg cG9ydCBtYXkgYmUgZWl0aGVyIG51bWVyaWMgb3IgbmFtZSBlcXVpdmFsZW50cy4iLAorCisiICIs CisKKyJLZXJtaXQvMiBpZ25vcmVzIHRoZSBbKj11c2VybGlzdF0gYW5kIFtAPXNlcnZlcmxpc3Rd IGZpZWxkcy4gTWF0Y2hlcyBhcmUiLAorImRldGVybWluZWQgb24gYSBmaXJzdCBtYXRjaCBub3Qg YSBiZXN0IG1hdGNoIGJhc2lzLiBBZGRyZXNzZXMgZm9yIHdoaWNoIG5vIiwKKyJtYXRjaCBpcyBm b3VuZCBkZWZhdWx0IHRvIFwic29ja2RcIi4iLAorCisiICIsCisKKyJGb3IgY29tcGxldGVuZXNz OiBGaWVsZHMgaW4gc3F1YXJlIGJyYWNrZXRzIGFyZSBvcHRpb25hbC4gVGhlIG9wdGlvbmFsIiwK KyJAPXNlcnZlcmxpc3QgZmllbGQgd2l0aCBhICdzb2NrZCcgbGluZSBzcGVjaWZpZXMgdGhlIGxp c3Qgb2YgU09DS1Mgc2VydmVycyIsCisidGhlIGNsaWVudCBzaG91bGQgdHJ5IChpbiB0aGUgZ2l2 ZW4gb3JkZXIpIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgU09DS1MiLAorInNlcnZlci4gSWYgdGhl IEA9c2VydmVybGlzdCBwYXJ0IGlzIG9taXR0ZWQsIHRoZW4gdGhlIGRlZmF1bHQgU09DS1Mgc2Vy dmVyIiwKKyJpcyB1c2VkLiAgQ29tbWFzIGFyZSB1c2VkIGluIHRoZSB1c2VybGlzdCBhbmQgc2Vy dmVybGlzdCBhcyBzZXBhcmF0b3JzLCBubyIsCisid2hpdGUgc3BhY2VzIGFyZSBhbGxvd2VkLiIs CisKKyNlbmRpZiAvKiBOVCAqLworCisiICIsCisKKyNlbHNlIC8qIE9TMiAqLworI2lmZGVmIENL X1NPQ0tTNQorIlRoaXMgdmVyc2lvbiBvZiBDLUtlcm1pdCBzdXBwb3J0cyBTT0NLUyB2ZXJzaW9u IDUuIiwKKyNlbHNlIC8qIENLX1NPQ0tTNSAqLworIlRoaXMgdmVyc2lvbiBvZiBDLUtlcm1pdCBz dXBwb3J0cyBTT0NLUyB2ZXJzaW9uIDQuIiwKKyNlbmRpZiAvKiBDS19TT0NLUzUgKi8KKworIlNl ZSB0aGUgbWFuIHBhZ2UgKG9yIG90aGVyIHN5c3RlbSBkb2N1bWVudGF0aW9uKSBmb3IgaW5mb3Jt YXRpb24gb24iLAorImNvbmZpZ3VyaW5nIHRoZSBTT0NLUyBsaWJyYXJ5IHZpYSB0aGUgL2V0Yy9z b2Nrcy5jb25mIGZpbGUuIiwKKworI2VuZGlmIC8qIE9TMiAqLworIiAiLAorI2VuZGlmIC8qIENL X1NPQ0tTICovCisKKyNpZmRlZiBORVdGVFAKKworIkZUUCBpcyBvbmUgb2YgdGhlIGZldyB3ZWxs LWtub3duIEludGVybmV0IHNlcnZpY2VzIHRoYXQgcmVxdWlyZXMiLAorIm11bHRpcGxlIGNvbm5l Y3Rpb25zLiAgQXMgZGVzY3JpYmVkIGFib3ZlLCBGVFAgb3JpZ2luYWxseSByZXF1aXJlZCB0aGUi LAorInNlcnZlciB0byBlc3RhYmxpc2ggdGhlIGRhdGEgY29ubmVjdGlvbiB0byB0aGUgY2xpZW50 IHVzaW5nIGEgZGVzdGluYXRpb24iLAorImFkZHJlc3MgYW5kIHBvcnQgcHJvdmlkZWQgYnkgdGhl IGNsaWVudC4gIFRoaXMgZG9lc24ndCB3b3JrIHdpdGggcG9ydCIsCisiZmlsdGVyaW5nIGZpcmV3 YWxscy4iLAorCisiICIsCisKKyJMYXRlciwgRlRQIHByb3RvY29sIGFkZGVkIGEgXCJwYXNzaXZl XCIgbW9kZSwgaW4gd2hpY2ggY29ubmVjdGlvbnMgZm9yIiwKKyJ0aGUgZGF0YSBjaGFubmVscyBh cmUgY3JlYXRlZCBpbiB0aGUgcmV2ZXJzZSBkaXJlY3Rpb24uICBJbnN0ZWFkIG9mIHRoZSIsCisi c2VydmVyIGVzdGFibGlzaGluZyBhIGNvbm5lY3Rpb24gdG8gdGhlIGNsaWVudCwgdGhlIGNsaWVu dCBtYWtlcyBhIHNlY29uZCIsCisiY29ubmVjdGlvbiB3aXRoIHRoZSBzZXJ2ZXIgYXMgdGhlIGRl c3RpbmF0aW9uLiAgVGhpcyB3b3JrcyBqdXN0IGZpbmUgYXMiLAorImxvbmcgYXMgdGhlIGNsaWVu dCBpcyBiZWhpbmQgdGhlIGZpcmV3YWxsIGFuZCB0aGUgc2VydmVyIGlzIGluIHB1YmxpYyIsCisi YWRkcmVzcyBzcGFjZS4gIElmIHRoZSBzZXJ2ZXIgaXMgYmVoaW5kIGEgZmlyZXdhbGwgdGhlbiB0 aGUgdHJhZGl0aW9uYWwiLAorImFjdGl2ZSBtb2RlIG11c3QgYmUgdXNlZC4gIElmIGJvdGggdGhl IGNsaWVudCBhbmQgc2VydmVyIGFyZSBiZWhpbmQgdGhlaXIiLAorIm93biBwb3J0IGZpbHRlcmlu ZyBmaXJld2FsbHMgdGhlbiBkYXRhIGNoYW5uZWxzIGNhbm5vdCBiZSBlc3RhYmxpc2hlZC4iLAor CisiICIsCisKKyJJbiBLZXJtaXQncyBGVFAgY2xpZW50LCBwYXNzaXZlIG1vZGUgaXMgY29udHJv bGxlZCB3aXRoIHRoZSBjb21tYW5kOiIsCisKKyIgIiwKKyIgIFNFVCBGVFAgUEFTU0lWRS1NT0RF IHsgT04sIE9GRiB9IiwKKyIgIiwKKworIlRoZSBkZWZhdWx0IGlzIE9OLCBtZWFuaW5nIHRvIHVz ZSBwYXNzaXZlIG1vZGUuIiwKKworI2VuZGlmIC8qIE5FV0ZUUCAqLworI2VuZGlmIC8qIE5PRklS RVdBTEwgKi8KKworIiIKK307CisjZW5kaWYgLyogVENQU09DS0VUICovCisKK3N0YXRpYyBjaGFy ICpobXh4c2F2ZVtdID0geworIlN5bnRheDogU0FWRSBpdGVtIGZpbGVuYW1lIHsgTkVXLCBBUFBF TkQgfSIsCisiICBTYXZlcyB0aGUgcmVxdWVzdGVkIG1hdGVyaWFsIGluIHRoZSBnaXZlbiBmaWxl LiAgQSBuZXcgZmlsZSBpcyBjcmVhdGVkIiwKKyIgIGJ5IGRlZmF1bHQ7IGluY2x1ZGUgQVBQRU5E IGF0IHRoZSBlbmQgb2YgdGhlIGNvbW1hbmQgdG8gYXBwZW5kIHRvIGFuIiwKKyIgIGV4aXN0aW5n IGZpbGUuICBJdGVtczoiLAorI2lmbmRlZiBOT1NFVEtFWQorIiAgICBLRVlNQVAgICAgICAgICAg ICAgICBTYXZlcyB0aGUgY3VycmVudCBrZXkgc2V0dGluZ3MuIiwKKyNlbmRpZiAvKiBOT1NFVEtF WSAqLworI2lmZGVmIENLX1JFQ0FMTAorIiAgICBDT01NQU5EIEhJU1RPUlkgICAgICBTYXZlcyB0 aGUgY3VycmVudCBjb21tYW5kIHJlY2FsbCAoaGlzdG9yeSkgYnVmZmVyIiwKKyNlbmRpZiAvKiBD S19SRUNBTEwgKi8KKyNpZmRlZiBPUzIKKyIgICAgQ09NTUFORCBTQ1JPTExCQUNLICAgU2F2ZXMg dGhlIGN1cnJlbnQgY29tbWFuZC1zY3JlZW4gc2Nyb2xsYmFjayBidWZmZXIiLAorIiAgICBURVJN SU5BTCBTQ1JPTExCQUNLICBTYXZlcyB0aGUgY3VycmVudCB0ZXJtaW5hbC1zY3JlZW4gc2Nyb2xs YmFjayBidWZmZXIiLAorI2VuZGlmIC8qIE9TMiAqLworIiIKK307CisKKyNpZmRlZiBDS1JPT1QK K3N0YXRpYyBjaGFyICpobXh4Y2hyb290W10gPSB7CisiU3ludGF4OiBTRVQgUk9PVCBkaXJlY3Rv cnluYW1lIiwKKyIgIFNldHMgdGhlIHJvb3QgZm9yIGZpbGUgYWNjZXNzIHRvIHRoZSBnaXZlbiBk aXJlY3RvcnkgYW5kIGRpc2FibGVzIGFjY2VzcyIsCisiICB0byBzeXN0ZW0gYW5kIHNoZWxsIGNv bW1hbmRzIGFuZCBleHRlcm5hbCBwcm9ncmFtcy4gIE9uY2UgdGhpcyBjb21tYW5kIiwKKyIgIGlz IGdpdmVuLCBubyBmaWxlcyBvciBkaXJlY3RvcmllcyBvdXRzaWRlIHRoZSB0cmVlIHJvb3RlZCBi eSB0aGUgZ2l2ZW4iLAorIiAgZGlyZWN0b3J5IGNhbiBiZSBvcGVuZWQsIHJlYWQsIGxpc3RlZCwg ZGVsZXRlZCwgcmVuYW1lZCwgb3IgYWNjZXNzZWQgaW4iLAorIiAgYW55IG90aGVyIHdheS4gIFRo aXMgY29tbWFuZCBjYW4gbm90IGJlIHVuZG9uZSBieSBhIHN1YnNlcXVlbnQgU0VUIFJPT1QiLAor IiAgY29tbWFuZC4gIFByaW1hcmlseSBmb3IgdXNlIHdpdGggc2VydmVyIG1vZGUsIHRvIHJlc3Ry aWN0IGFjY2VzcyBvZiIsCisiICBjbGllbnRzIHRvIGEgcGFydGljdWxhciBkaXJlY3RvcnkgdHJl ZS4gIFN5bm9ueW06IENIUk9PVC4iLAorIiIKK307CisjZW5kaWYgLyogQ0tST09UICovCisKK3N0 YXRpYyBjaGFyICpobXh4c2NybltdID0geworIlN5bnRheDogU0NSRUVOIHsgQ0xFQVIsIENMRU9M LCBNT1ZFIHJvdyBjb2x1bW4gfSIsCisjaWZkZWYgT1MyCisiICBQZXJmb3JtcyBzY3JlZW4tZm9y bWF0dGluZyBhY3Rpb25zLiIsCisjZWxzZQorIiAgUGVyZm9ybXMgc2NyZWVuLWZvcm1hdHRpbmcg YWN0aW9ucy4gIENvcnJlY3Qgb3BlcmF0aW9uIG9mIHRoZXNlIGNvbW1hbmRzIiwKKyIgIGRlcGVu ZHMgb24gcHJvcGVyIHRlcm1pbmFsIHNldHVwIG9uIGJvdGggZW5kcyBvZiB0aGUgY29ubmVjdGlv biAtLSBtYWlubHkiLAorIiAgdGhhdCB0aGUgaG9zdCB0ZXJtaW5hbCB0eXBlIGlzIHNldCB0byBh Z3JlZSB3aXRoIHRoZSBraW5kIG9mIHRlcm1pbmFsIG9yIiwKKyIgIHRoZSBlbXVsYXRpb24geW91 IGFyZSB2aWV3aW5nIEMtS2VybWl0IHRocm91Z2guIiwKKyNlbmRpZiAvKiBPUzIgKi8KKyIgIiwK KyJTQ1JFRU4gQ0xFQVIiLAorIiAgTW92ZXMgdGhlIGN1cnNvciB0byBob21lIHBvc2l0aW9uIGFu ZCBjbGVhcnMgdGhlIGVudGlyZSBzY3JlZW4uIiwKKyNpZmRlZiBPUzIKKyIgIFN5bm9ueW1zOiBD TFMsIENMRUFSIFNDUkVFTiwgQ0xFQVIgQ09NTUFORC1TQ1JFRU4gQUxMIiwKKyNlbHNlCisiICBT eW5vbnltczogQ0xTLCBDTEVBUiBTQ1JFRU4uIiwKKyNlbmRpZiAvKiBPUzIgKi8KKyIgIiwKKyJT Q1JFRU4gQ0xFT0wiLAorIiAgQ2xlYXJzIGZyb20gdGhlIGN1cnJlbnQgY3Vyc29yIHBvc2l0aW9u IHRvIHRoZSBlbmQgb2YgdGhlIGxpbmUuIiwKKyNpZmRlZiBPUzIKKyIgIFN5bm9ueW06IENMRUFS IENPTU1BTkQtU0NSRUVOIEVPTCIsCisjZW5kaWYgLyogT1MyICovCisiICIsCisiU0NSRUVOIE1P VkUgcm93IGNvbHVtbiIsCisiICBNb3ZlcyB0aGUgY3Vyc29yIHRvIHRoZSBpbmRpY2F0ZWQgcm93 IGFuZCBjb2x1bW4uICBUaGUgcm93IGFuZCBjb2x1bW4iLAorIiAgbnVtYmVycyBhcmUgMS1iYXNl ZCBzbyBvbiBhIDI0eDgwIHNjcmVlbiwgdGhlIGhvbWUgcG9zaXRpb24gaXMgMSAxIGFuZCIsCisi ICB0aGUgbG93ZXIgcmlnaHQgY29ybmVyIGlzIDI0IDgwLiAgSWYgYSByb3cgb3IgY29sdW1uIG51 bWJlciBpcyBnaXZlbiB0aGF0IiwKKyIgIHRvbyBsYXJnZSBmb3Igd2hhdCBLZXJtaXQgb3IgdGhl IG9wZXJhdGluZyBzeXN0ZW0gdGhpbmtzIGlzIHlvdXIgc2NyZWVuIiwKKyIgIHNpemUsIHRoZSBh cHByb3ByaWF0ZSBudW1iZXIgaXMgc3Vic3RpdHV0ZWQuIiwKKyIgIiwKKyJBbHNvIHNlZToiLAor I2lmZGVmIE9TMgorIiAgSEVMUCBGVU5DVElPTiBTQ1JOQ1VSWCwgSEVMUCBGVU5DVElPTiBTQ1JO Q1VSWSwgSEVMUCBGVU5DVElPTiBTQ1JTVFIsIiwKKyNlbmRpZiAvKiBPUzIgKi8KKyIgIFNIT1cg VkFSSUFCTEUgVEVSTUlOQUwsIFNIT1cgVkFSSUFCTEUgQ09MUywgU0hPVyBWQVIgUk9XUywgU0hP VyBDT01NQU5ELiIsCisiIgorfTsKKworI2lmbmRlZiBOT1NQTAorc3RhdGljIGNoYXIgKmhtZndv cmRbXSA9IHsKKyJGdW5jdGlvbiBcXGZ3b3JkKHMxLG4xLHMyLHMzLG4yLG4zKSAtIEV4dHJhY3Rz IGEgd29yZCBmcm9tIGEgc3RyaW5nLiIsCisiICAgIHMxID0gc291cmNlIHN0cmluZy4iLAorIiAg ICBuMSA9IHdvcmQgbnVtYmVyICgxLWJhc2VkKSBjb3VudGluZyBmcm9tIGxlZnQ7IGlmIG5lZ2F0 aXZlLCBmcm9tIHJpZ2h0LiIsCisiICAgIHMyID0gb3B0aW9uYWwgYnJlYWsgc2V0LiIsCisiICAg IHMzID0gb3B0aW9uYWwgaW5jbHVkZSBzZXQgKG9yIEFMTCwgQ1NWLCBvciBUU1YpLiIsCisiICAg IG4yID0gb3B0aW9uYWwgZ3JvdXBpbmcgbWFzay4iLAorIiAgICBuMyA9IG9wdGlvbmFsIHNlcGFy YXRvciBmbGFnOiIsCisiICAgICAgIDAgPSBjb2xsYXBzZSBhZGphY2VudCBzZXBhcmF0b3JzOyIs CisiICAgICAgIDEgPSBkb24ndCBjb2xsYXBzZSBhZGphY2VudCBzZXBhcmF0b3JzLiIsCisiICIs CisiICBcXGZ3b3JkKCkgcmV0dXJucyB0aGUgbjF0aCBcIndvcmRcIiBvZiB0aGUgc3RyaW5nIHMx LCBhY2NvcmRpbmcgdG8gdGhlIiwKKyIgIGNyaXRlcmlhIHNwZWNpZmllZCBieSB0aGUgb3RoZXIg cGFyYW1ldGVycy4iLAorIiAiLAorIiAgVGhlIEJSRUFLIFNFVCBpcyB0aGUgc2V0IG9mIGFsbCBj aGFyYWN0ZXJzIHRoYXQgc2VwYXJhdGUgd29yZHMuIFRoZSIsCisiICBkZWZhdWx0IGJyZWFrIHNl dCBpcyBhbGwgY2hhcmFjdGVycyBleGNlcHQgQVNDSUkgbGV0dGVycyBhbmQgZGlnaXRzLiIsCisi ICBBU0NJSSAoQzApIGNvbnRyb2wgY2hhcmFjdGVycyBhcmUgdHJlYXRlZCBhcyBicmVhayBjaGFy YWN0ZXJzIGJ5IGRlZmF1bHQsIiwKKyIgIGFzIGFyZSBzcGFjaW5nIGFuZCBwdW5jdHVhdGlvbiBj aGFyYWN0ZXJzLCBicmFja2V0cywgYW5kIHNvIG9uLCBhbmQiLAorIiAgYWxsIDgtYml0IGNoYXJh Y3RlcnMuIiwKKyIgIiwKKyIgIFRoZSBJTkNMVURFIFNFVCBpcyB0aGUgc2V0IG9mIGNoYXJhY3Rl cnMgdGhhdCBhcmUgdG8gYmUgdHJlYXRlZCBhcyAiLAorIiAgcGFydHMgb2Ygd29yZHMgZXZlbiB0 aG91Z2ggdGhleSBub3JtYWxseSB3b3VsZCBiZSBzZXBhcmF0b3JzLiAgVGhlIiwKKyIgIGRlZmF1 bHQgaW5jbHVkZSBzZXQgaXMgZW1wdHkuICBUaHJlZSBzcGVjaWFsIHN5bWJvbGljIGluY2x1ZGUg c2V0cyBhcmUiLAorIiAgYWxzbyBhbGxvd2VkOiIsCisiICAgIiwKKyIgICAgQUxMIChtZWFuaW5n IGluY2x1ZGUgYWxsIGJ5dGVzIHRoYXQgYXJlIG5vdCBpbiB0aGUgYnJlYWsgc2V0KSIsCisiICAg IENTViAoc3BlY2lhbCB0cmVhdG1lbnQgZm9yIENvbW1hLVNlcGFyYXRlZC1WYWx1ZSByZWNvcmRz KSIsCisiICAgIFRTViAoc3BlY2lhbCB0cmVhdG1lbnQgZm9yIFRhYi1TZXBhcmF0ZWQtVmFsdWUg cmVjb3JkcykiLAorIiAiLAorIiAgRm9yIG9wZXJhdGluZyBvbiA4LWJpdCBjaGFyYWN0ZXIgc2V0 cywgdGhlIGluY2x1ZGUgc2V0IHNob3VsZCBiZSBBTEwuIiwKKyIgIiwKKyIgIElmIHRoZSBHUk9V UElORyBNQVNLIGlzIGdpdmVuIGFuZCBpcyBub256ZXJvLCB3b3JkcyBjYW4gYmUgZ3JvdXBlZCBi eSIsCisiICBxdW90ZXMgb3IgYnJhY2tldHMgc2VsZWN0ZWQgYnkgdGhlIHN1bSBvZiB0aGUgZm9s bG93aW5nOiIsCisiICIsCisiICAgICAxID0gZG91YmxlcXVvdGVzOiAgICBcImEgYiBjXCIiLAor IiAgICAgMiA9IGJyYWNlczogICAgICAgICAge2EgYiBjfSIsCisiICAgICA0ID0gYXBvc3Ryb3Bo ZXM6ICAgICAnYSBiIGMnIiwKKyIgICAgIDggPSBwYXJlbnRoZXNlczogICAgIChhIGIgYykiLAor IiAgICAxNiA9IHNxdWFyZSBicmFja2V0czogW2EgYiBjXSIsCisiICAgIDMyID0gYW5nbGUgYnJh Y2tldHM6ICA8YSBiIGM+IiwKKyIgIiwKKyIgIE5lc3RpbmcgaXMgcG9zc2libGUgd2l0aCB7fSgp W108PiBidXQgbm90IHdpdGggcXVvdGVzIG9yIGFwb3N0cm9waGVzLiIsCisiICIsCisiUmV0dXJu cyBzdHJpbmc6IiwKKyIgIFdvcmQgbnVtYmVyIG4xLCBpZiB0aGVyZSBpcyBvbmUsIG90aGVyd2lz ZSBhbiBlbXB0eSBzdHJpbmcuIiwKKyIgIiwKKyJBbHNvIHNlZToiLAorIiAgSEVMUCBGVU5DVElP TiBTUExJVCIsCisiIgorfTsKKworc3RhdGljIGNoYXIgKmhteHhwcm9tcHRbXSA9IHsKKyJTeW50 YXg6IFBST01QVCBbIHRleHQgXSIsCisiICBFbnRlcnMgaW50ZXJhY3RpdmUgY29tbWFuZCBsZXZl bCBmcm9tIHdpdGhpbiBhIHNjcmlwdCBpbiBzdWNoIGEgd2F5IHRoYXQiLAorIiAgdGhlIHNjcmlw dCBjYW4gYmUgY29udGludWVkIHdpdGggYW4gRU5EIG9yIFJFVFVSTiBjb21tYW5kLiAgU1RPUCwg RVhJVCwiLAorIiAgU0hPVyBTVEFDSywgVFJBQ0UsIGFuZCBDdHJsLUMgYWxsIGhhdmUgdGhlaXIg bm9ybWFsIGVmZmVjdHMuICBUaGUgUFJPTVBUIiwKKyIgIGNvbW1hbmQgYWxsb3dzIHZhcmlhYmxl cyB0byBiZSBleGFtaW5lZCBvciBjaGFuZ2VkLCBvciBhbnkgb3RoZXIgY29tbWFuZHMiLAorIiAg dG8gYmUgZ2l2ZW4sIGluIGFueSBudW1iZXIsIHByaW9yIHRvIHJldHVybmluZyB0byB0aGUgc2Ny aXB0LCBhbGxvd2luZyIsCisiICBLZXJtaXQgdG8gc2VydmUgYXMgaXRzIG93biBkZWJ1Z2dlcjsg YWRkaW5nIHRoZSBQUk9NUFQgY29tbWFuZCB0byBhIHNjcmlwdCIsCisiICBpcyBsaWtlIHNldHRp bmcgYSBicmVha3BvaW50LiAgSWYgdGhlIG9wdGlvbmFsIHRleHQgaXMgaW5jbHVkZWQsIGl0IGlz IiwKKyIgIHVzZWQgYXMgdGhlIG5ldyBwcm9tcHQgZm9yIHRoaXMgbGV2ZWwsIGUuZy4gXCJwcm9t cHQgQnJlYWtwb2ludF8xPlwiLiIsCisiIgorfTsKKworc3RhdGljIGNoYXIgKmh4eGlucFtdID0g eworIlN5bnRheDogIElOUFVUIFsgL0NPVU5UOm4gL0NMRUFSIC9OT01BVENIIC9OT1dSQVAgXSBc Cit7IG51bWJlci1vZi1zZWNvbmRzLCB0aW1lLW9mLWRheSB9IFsgdGV4dCBdIiwKKyIgIiwKKyJF eGFtcGxlczoiLAorIiAgSU5QVVQgNSBMb2dpbjoiLAorIiAgSU5QVVQgMjM6NTk6NTkgUklORyIs CisiICBJTlBVVCAvTk9NQVRDSCAxMCIsCisiICBJTlBVVCAvQ0xFQVIgMTAgXFwxM1xcMTAiLAor IiAgSU5QVVQgL0NMRUFSIDEwIFxcMTNcXDEwJFwzMiIsCisiICBJTlBVVCAvQ09VTlQ6MjU2IDEw IiwKKyIgIElOUFVUIDEwIFxcZnBhdHRlcm4oPCpAKi4qPikiLAorIiAiLAorIiAgV2FpdHMgdXAg dG8gdGhlIGdpdmVuIG51bWJlciBvZiBzZWNvbmRzLCBvciB1bnRpbCB0aGUgZ2l2ZW4gdGltZSBv ZiBkYXksIiwKKyIgIGZvciB0aGUgZ2l2ZW4gdGV4dCB0byBhcnJpdmUgb24gdGhlIGNvbm5lY3Rp b24uIEZvciB1c2UgaW4gc2NyaXB0IHByb2dyYW1zIiwKKyIgIHdpdGggSUYgRkFJTFVSRSBvciBJ RiBTVUNDRVNTLCB3aGljaCB0ZWxsIHdoZXRoZXIgdGhlIGRlc2lyZWQgdGV4dCBhcnJpdmVkIiwK KyIgIHdpdGhpbiB0aGUgZ2l2ZW4gYW1vdW50IG9mIHRpbWUuIiwKKyIgIiwKKyIgIFRoZSB0ZXh0 LCBpZiBnaXZlbiwgY2FuIGJlIGEgcmVndWxhciB0ZXh0IG9yIGl0IGNhbiBiZSBhIFxccGF0dGVy bigpIiwKKyIgIGludm9jYXRpb24sIGluIHdoaWNoIGNhc2UgaXQgaXMgdHJlYXRlZCBhcyBhIHBh dHRlcm4gcmF0aGVyIHRoYW4gYSBsaXRlcmFsIiwKKyIgIHN0cmluZyAoSEVMUCBQQVRURVJOUyBm b3IgZGV0YWlscykuIiwKKyIgIiwKKyIgIElmIHRoZSAvQ09VTlQ6IHN3aXRjaCBpcyBpbmNsdWRl ZCwgSU5QVVQgd2FpdHMgZm9yIHRoZSBnaXZlbiBudW1iZXIgb2YiLAorIiAgY2hhcmFjdGVycyB0 byBhcnJpdmUuIiwKKyIgIiwKKyIgIElmIG5vIHRleHQgaXMgc3BlY2lmaWVkLCBJTlBVVCB3YWl0 cyBmb3IgdGhlIGZpcnN0IGNoYXJhY3RlciB0aGF0IGFycml2ZXMiLAorIiAgYW5kIG1ha2VzIGl0 IGF2YWlsYWJsZSBpbiB0aGUgXFx2KGluY2hhcikgdmFyaWFibGUuICBUaGlzIGlzIGVxdWl2YWxl bnQgdG8iLAorIiAgaW5jbHVkaW5nIGEgL0NPVU5UOiBzd2l0Y2ggd2l0aCBhbiBhcmd1bWVudCBv ZiAxLiIsCisiICIsCisiICBJZiB0aGUgL05PTUFUQ0ggc3dpdGNoIGlzIGluY2x1ZGVkLCBJTlBV VCBkb2VzIG5vdCBhdHRlbXB0IHRvIG1hdGNoIGFueSIsCisiICBjaGFyYWN0ZXJzLCBidXQgY29u dGludWVzIHJlYWRpbmcgZnJvbSB0aGUgY29tbXVuaWNhdGlvbiBjb25uZWN0aW9uIHVudGlsIiwK KyIgIHRoZSB0aW1lb3V0IGludGVydmFsIGV4cGlyZXMuICBJZiB0aGUgdGltZW91dCBpbnRlcnZh bCBpcyAwLCB0aGUgSU5QVVQiLAorIiAgY29tbWFuZCBkb2VzIG5vdCB3YWl0OyBpLmUuIHRoZSBn aXZlbiB0ZXh0IG11c3QgYWxyZWFkeSBiZSBhdmFpbGFibGUgZm9yIiwKKyIgIHJlYWRpbmcgZm9y IHRoZSBJTlBVVCBjb21tYW5kIHRvIHN1Y2NlZWQuICBJZiB0aGUgaW50ZXJ2YWwgaXMgbmVnYXRp dmUsIiwKKyIgIHRoZSBJTlBVVCBjb21tYW5kIHdhaXRzIGZvcmV2ZXIuIiwKKyIgIiwKKyIgIFRo ZSBJTlBVVCBidWZmZXIsIFxcdihpbnB1dCksIGlzIG5vcm1hbGx5IGNpcmN1bGFyLiAgSW5jb21p bmcgbWF0ZXJpYWwgaXMiLAorIiAgYXBwZW5kZWQgdG8gaXQgdW50aWwgaXQgcmVhY2hlcyB0aGUg ZW5kLCBhbmQgdGhlbiBpdCB3cmFwcyBhcm91bmQgdG8gdGhlIiwKKyIgIGJlZ2lubmluZy4gIElm IHRoZSAvQ0xFQVIgc3dpdGNoIGlzIGdpdmVuLCBJTlBVVCBjbGVhcnMgaXRzIGJ1ZmZlciBiZWZv cmUiLAorIiAgcmVhZGluZyBmcm9tIHRoZSBjb25uZWN0aW9uLiIsCisiICIsCisiICBUeXBpY2Fs IGV4YW1wbGUgb2YgdXNlOiIsCisiICIsCisiICAgIElOUFVUIDEwIGxvZ2luOiIsCisiICAgIElG IEZBSUwgRVhJVCAxIFwiVGltZWQgb3V0IHdhaXRpbmcgZm9yIGxvZ2luIHByb21wdFwiIiwKKyIg ICAgTElORU9VVCBteXVzZXJpZCIsCisiICAgIElOUFVUIDEwIFBhc3N3b3JkOiIsCisiICAgIElG IEZBSUwgRVhJVCAxIFwiVGltZWQgb3V0IHdhaXRpbmcgZm9yIFBhc3N3b3JkIHByb21wdFwiIiwK KyIgICAgTElORU9VVCB4eHh4eHh4IiwKKyIgIiwKKyIgIFRoZSAvTk9XUkFQIHN3aXRjaCBtZWFu cyB0aGF0IElOUFVUIHNob3VsZCByZXR1cm4gd2l0aCBmYWlsdXJlIHN0YXR1cyIsCisiICBhbmQg d2l0aCBcXHYoaW5zdGF0dXMpIHNldCB0byA2IGlmIGl0cyBpbnRlcm5hbCBidWZmZXIgZmlsbHMg dXAgYmVmb3JlIiwKKyIgIGFueSBvZiB0aGUgb3RoZXIgY29tcGxldGlvbiBjcml0ZXJpYSBhcmUg bWV0LiAgVGhpcyBhbGxvd3MgZm9yIGNhcHR1cmUiLAorIiAgb2YgdGhlIGNvbXBsZXRlIGluY29t aW5nIGRhdGEgc3RyZWFtIChleGNlcHQgTlVMIGJ5dGVzLCB3aGljaCBhcmUiLAorIiAgZGlzY2Fy ZGVkKS4gIENBVVRJT046IGlmIHRoZSBzZWFyY2ggdGFyZ2V0IChpZiBhbnkpIHNwYW5zIHRoZSBJ TlBVVCBidWZmZXIiLAorIiAgYm91bmRhcnksIElOUFVUIHdpbGwgbm90IHN1Y2NlZWQuIiwKKyIg IiwKKyIgIFwKK1xcdihpbnN0YXR1cykgdmFsdWVzIGFyZTogMCAoc3VjY2VzcyksIDEgKHRpbWVk IG91dCksIDIgKGtleWJvYXJkIGludGVycnVwdCksIiwKKyIgIDMgKGludGVybmFsIGVycm9yKSwg NCAoSS9PIGVycm9yIG9yIGNvbm5lY3Rpb24gbG9zdCksIDUgKElOUFVUIGRpc2FibGVkKSwiLAor IiAgYW5kIDYgKGJ1ZmZlciBmaWxsZWQgYW5kIC9OT1dSQVAgc2V0KTsgdGhlc2UgYXJlIHNob3du IGJ5IFxcdihpbm1lc3NhZ2UpLiIsCisiICIsCisiICBBbHNvIHNlZSBPVVRQVVQsIE1JTlBVVCwg UkVJTlBVVCwgU0VUIElOUFVUIGFuZCBDTEVBUi4gIFNlZSBIRUxQIFBBVVNFIGZvciIsCisiICBk ZXRhaWxzIG9uIHRpbWUtb2YtZGF5IGZvcm1hdCBhbmQgSEVMUCBQQVRURVJOUyBmb3IgcGF0dGVy biBzeW50YXguIiwKKyIifTsKKworc3RhdGljIGNoYXIgKmh4eG91dFtdID0geworIlN5bnRheDog T1VUUFVUIHRleHQiLAorIiAgU2VuZHMgdGhlIHRleHQgb3V0IHRoZSBjb21tdW5pY2F0aW9ucyBj b25uZWN0aW9uLCBhcyBpZiB5b3UgaGFkIHR5cGVkIGl0IiwKKyIgIGR1cmluZyBDT05ORUNUIG1v ZGUuICBUaGUgdGV4dCBtYXkgY29udGFpbiBiYWNrc2xhc2ggY29kZXMsIHZhcmlhYmxlcywiLAor IiAgZXRjLCBwbHVzIHRoZSBmb2xsb3dpbmcgc3BlY2lhbCBjb2RlczoiLAorIiAiLAorIiAgICBc XE4gLSBTZW5kIGEgTlVMIChBU0NJSSAwKSBjaGFyYWN0ZXIgKHlvdSBjYW4ndCB1c2UgXFwwIGZv ciB0aGlzKS4iLAorIiAgICBcXEIgLSBTZW5kIGEgQlJFQUsgc2lnbmFsLiIsCisiICAgIFxcTCAt IFNlbmQgYSBMb25nIEJSRUFLIHNpZ25hbC4iLAorIiAiLAorIkFsc28gc2VlIFNFVCBPVVRQVVQu IiwKKyIiIH07CisjZW5kaWYgLyogTk9TUEwgKi8KKworc3RhdGljIGNoYXIgKmh4eXBhcmlbXSA9 IHsKKyJTRVQgUEFSSVRZIE5PTkUiLAorIiAgQ2hvb3NlcyA4IGRhdGEgYml0cyBhbmQgbm8gcGFy aXR5LiIsCisiICIsCisiU0VUIFBBUklUWSB7IEVWRU4sIE9ERCwgTUFSSywgU1BBQ0UgfSIsCisi ICBDaG9vc2VzIDcgZGF0YSBiaXRzIHBsdXMgdGhlIGluZGljYXRlZCBraW5kIG9mIHBhcml0eS4i LAorIiAgRm9yY2VzIDh0aC1iaXQgcHJlZml4aW5nIGR1cmluZyBmaWxlIHRyYW5zZmVyLiIsCisi ICIsCisjaWZkZWYgSFdQQVJJVFkKKyJTRVQgUEFSSVRZIEhBUkRXQVJFIHsgRVZFTiwgT0REIH0i LAorIiAgQ2hvb3NlcyA4IGRhdGEgYml0cyBwbHVzIHRoZSBpbmRpY2F0ZWQga2luZCBvZiBwYXJp dHkuIiwKKyIgIiwKKyJBbHNvIHNlZSBTRVQgVEVSTUlOQUwgQllURVNJWkUsIFNFVCBTRVJJQUws IGFuZCBTRVQgU1RPUC1CSVRTLiIsCisjZWxzZQorIkFsc28gc2VlIFNFVCBURVJNSU5BTCBCWVRF U0laRSBhbmQgU0VUIFNFUklBTC4iLAorI2VuZGlmIC8qIEhXUEFSSVRZICovCisiIn07CisKKyNp Zm5kZWYgTk9MT0NBTAorc3RhdGljIGNoYXIgKmh4eWVzY1tdID0geworI2lmZGVmIE9TMgorIlN5 bnRheDogU0VUIEVTQ0FQRSBudW1iZXIiLAorIiAgRGVjaW1hbCBBU0NJSSB2YWx1ZSBmb3IgZXNj YXBlIGNoYXJhY3RlciBkdXJpbmcgQ09OTkVDVCwgbm9ybWFsbHkgMjkiLAorIiAgKENvbnRyb2wt XSkuICBUeXBlIHRoZSBlc2NhcGUgY2hhcmFjdGVyIGZvbGxvd2VkIGJ5IEMgdG8gZ2V0IGJhY2sg dG8gdGhlIiwKKyIgIEMtS2VybWl0IHByb21wdCBvciBmb2xsb3dlZCBieSA/IHRvIHNlZSBvdGhl ciBvcHRpb25zLCBvciB1c2UgdGhlIFxcS2V4aXQiLAorIiAga2V5Ym9hcmQgdmVyYiwgbm9ybWFs bHkgYXNzaWduZWQgdG8gQWx0LXguIiwKKyNlbHNlCisjaWZkZWYgTkVYVAorIlN5bnRheDogU0VU IEVTQ0FQRSBudW1iZXIiLAorIiAgRGVjaW1hbCBBU0NJSSB2YWx1ZSBmb3IgZXNjYXBlIGNoYXJh Y3RlciBkdXJpbmcgQ09OTkVDVCwgbm9ybWFsbHkgMjkiLAorIiAgKENvbnRyb2wtXSkuICBUeXBl IHRoZSBlc2NhcGUgY2hhcmFjdGVyIGZvbGxvd2VkIGJ5IEMgdG8gZ2V0IGJhY2sgdG8gdGhlIiwK KyIgIEMtS2VybWl0IHByb21wdCBvciBmb2xsb3dlZCBieSA/IHRvIHNlZSBvdGhlciBvcHRpb25z LiIsCisjZWxzZQorIlN5bnRheDogU0VUIEVTQ0FQRSBudW1iZXIiLAorIiAgRGVjaW1hbCBBU0NJ SSB2YWx1ZSBmb3IgZXNjYXBlIGNoYXJhY3RlciBkdXJpbmcgQ09OTkVDVCwgbm9ybWFsbHkgMjgi LAorIiAgKENvbnRyb2wtXFwpLiAgVHlwZSB0aGUgZXNjYXBlIGNoYXJhY3RlciBmb2xsb3dlZCBi eSBDIHRvIGdldCBiYWNrIHRvIHRoZSIsCisiICBDLUtlcm1pdCBwcm9tcHQgb3IgZm9sbG93ZWQg YnkgPyB0byBzZWUgb3RoZXIgb3B0aW9ucy4iLAorI2VuZGlmIC8qIE5FWFQgKi8KKyNlbmRpZiAv KiBPUzIgKi8KKyIgIiwKKyJZb3UgbWF5IGFsc28gZW50ZXIgdGhlIGVzY2FwZSBjaGFyYWN0ZXIg YXMgXlggKGNpcmN1bWZsZXggZm9sbG93ZWQgYnkgYSIsCisibGV0dGVyIG9yIG9uZSBvZjogQCwg XiwgXywgWywgXFwsIG9yIF0sIHRvIGluZGljYXRlIGEgY29udHJvbCBjaGFyYWN0ZXI7IiwKKyJm b3IgZXhhbXBsZSwgU0VUIEVTQyBeXyBzZXRzIHlvdXIgZXNjYXBlIGNoYXJhY3RlciB0byBDdHJs LVVuZGVyc2NvcmUuIiwKKyIgIiwKKyJZb3UgY2FuIGFsc28gc3BlY2lmeSBhbiA4LWJpdCBjaGFy YWN0ZXIgKDEyOC0yNTUpIGFzIHlvdXIgZXNjYXBlIGNoYXJhY3RlciwiLAorImVpdGhlciBieSB0 eXBpbmcgaXQgbGl0ZXJhbGx5IG9yIGJ5IGVudGVyaW5nIGl0cyBudW1lcmljIGNvZGUuIiwKKyIi IH07CisjZW5kaWYgLyogTk9MT0NBTCAqLworCisjaWZuZGVmIE5PU1BMCitzdGF0aWMgY2hhciAq aHh5b3V0W10gPSB7CisiU0VUIE9VVFBVVCBQQUNJTkcgPG51bWJlcj4iLAorIiAgSG93IG1hbnkg bWlsbGlzZWNvbmRzIHRvIHBhdXNlIGFmdGVyIHNlbmRpbmcgZWFjaCBPVVRQVVQgY2hhcmFjdGVy LCIsCisiICBub3JtYWxseSAwLiIsCisiICIsCisiU0VUIE9VVFBVVCBTUEVDSUFMLUVTQ0FQRVMg eyBPTiwgT0ZGIH0iLAorIiAgV2hldGhlciB0byBwcm9jZXNzIHRoZSBzcGVjaWFsIE9VVFBVVC1v bmx5IGVzY2FwZXMgXFxCLCBcXEwsIGFuZCBcXE4uIiwKKyIgIE5vcm1hbGx5IE9OICh0aGV5IGFy ZSBwcm9jZXNzZWQpLiIsCisiIiB9OworCitzdGF0aWMgY2hhciAqaHh5aW5wW10gPSB7CisiU3lu dGF4OiBTRVQgSU5QVVQgcGFyYW1ldGVyIHZhbHVlIiwKKyIgIiwKKyNpZmRlZiBDS19BVVRPREwK KyJTRVQgSU5QVVQgQVVUT0RPV05MT0FEIHsgT04sIE9GRiB9IiwKKyIgIENvbnRyb2xzIHdoZXRo ZXIgYXV0b2Rvd25sb2FkcyBhcmUgYWxsb3dlZCBkdXJpbmcgSU5QVVQgY29tbWFuZCBleGVjdXRp b24uIiwKKyIgIiwKKyNlbmRpZiAvKiBDS19BVVRPREwgKi8KKyJTRVQgSU5QVVQgQlVGRkVSLUxF TkdUSCBudW1iZXItb2YtYnl0ZXMiLAorIiAgUmVtb3ZlcyB0aGUgb2xkIElOUFVUIGJ1ZmZlciBh bmQgY3JlYXRlcyBhIG5ldyBvbmUgd2l0aCB0aGUgZ2l2ZW4gbGVuZ3RoLiIsCisiICIsCisiU0VU IElOUFVUIENBTkNFTExBVElPTiB7IE9OLCBPRkYgfSIsCisiICBXaGV0aGVyIGFuIElOUFVUIGlu IHByb2dyZXNzIGNhbiBiZSBjYW4gaW50ZXJydXB0ZWQgZnJvbSB0aGUga2V5Ym9hcmQuIiwKKyIg IiwKKyJTRVQgSU5QVVQgQ0FTRSB7IElHTk9SRSwgT0JTRVJWRSB9IiwKKyIgIFRlbGxzIHdoZXRo ZXIgYWxwaGFiZXRpYyBjYXNlIGlzIHRvIGJlIHNpZ25pZmljYW50IGluIHN0cmluZyBjb21wYXJp c29ucy4iLAorIiAgVGhpcyBzZXR0aW5nIGlzIGxvY2FsIHRvIHRoZSBjdXJyZW50IG1hY3JvIG9y IGNvbW1hbmQgZmlsZSwgYW5kIGlzIiwKKyIgIGluaGVyaXRlZCBieSBzdWJvcmRpbmF0ZSBtYWNy b3MgYW5kIHRha2UgZmlsZXMuIiwKKyIgIiwKKyJTRVQgSU5QVVQgRUNITyB7IE9OLCBPRkYgfSIs CisiICBUZWxscyB3aGV0aGVyIHRvIGRpc3BsYXkgYXJyaXZpbmcgY2hhcmFjdGVycyByZWFkIGJ5 IElOUFVUIG9uIHRoZSBzY3JlZW4uIiwKKyIgIiwKKyNpZmRlZiBDS0ZMT0FUCisiU0VUIElOUFVU IFNDQUxFLUZBQ1RPUiA8bnVtYmVyPiIsCisiICBBIG51bWJlciB0byBtdWx0aXBseSBhbGwgSU5Q VVQgdGltZW91dHMgYnksIHdoaWNoIG1heSBpbmNsdWRlIGEgZnJhY3Rpb25hbCIsCisiICBwYXJ0 LCBlLmcuIDIuNS4gIEFsbCBJTlBVVCBjb21tYW5kcyB0aGF0IHNwZWNpZnkgYSB0aW1lb3V0IGlu IHNlY29uZHMiLAorIiAgKGFzIG9wcG9zZWQgdG8gYSBzcGVjaWZpYyB0aW1lIG9mIGRheSkgaGF2 ZSB0aGVpciB0aW1lIGxpbWl0IGFkanVzdGVkIiwKKyIgIGF1dG9tYXRpY2FsbHkgYnkgdGhpcyBm YWN0b3IsIHdoaWNoIGlzIGFsc28gYXZhaWxhYmxlIGluIHRoZSBidWlsdC1pbiIsCisiICByZWFk LW9ubHkgdmFyaWFibGUgXFx2KGluc2NhbGUpLiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgMS4wLiIs CisiICIsCisKKyNlbmRpZgkvKiBDS0ZMT0FUICovCisKKyJTRVQgSU5QVVQgU0lMRU5DRSA8bnVt YmVyPiIsCisiICBUaGUgbWF4aW11bSBudW1iZXIgdG8gc2Vjb25kcyBvZiBzaWxlbmNlIChubyBp bnB1dCBhdCBhbGwpIGJlZm9yZSB0aGUiLAorIiAgSU5QVVQgY29tbWFuZCB0aW1lcyBvdXQsIDAg Zm9yIG5vIG1heGltdW0uIiwKKyIgIiwKKyNpZmRlZiBPUzIKKyJTRVQgSU5QVVQgVEVSTUlOQUwg eyBPTiwgT0ZGIH0iLAorIiAgRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBkYXRhIHJlY2VpdmVkIGR1 cmluZyBhbiBJTlBVVCBjb21tYW5kIGlzIGRpc3BsYXllZCIsCisiICBpbiB0aGUgdGVybWluYWwg d2luZG93LiAgRGVmYXVsdCBpcyBPTi4iLAorIiAiLAorI2VuZGlmIC8qIE9TMiAqLworIlNFVCBJ TlBVVCBUSU1FT1VULUFDVElPTiB7IFBST0NFRUQsIFFVSVQgfSIsCisiICBUZWxscyB3aGV0aGVy IHRvIHByb2NlZWQgb3IgcXVpdCBmcm9tIGEgc2NyaXB0IHByb2dyYW0gaWYgYW4gSU5QVVQgY29t bWFuZCIsCisiICBmYWlscy4gIFBST0NFRUQgKGRlZmF1bHQpIGFsbG93cyB1c2Ugb2YgSUYgU1VD Q0VTUyAvIElGIEZBSUxVUkUgY29tbWFuZHMuIiwKKyIgIFRoaXMgc2V0dGluZyBpcyBsb2NhbCB0 byB0aGUgY3VycmVudCBtYWNybyBvciBjb21tYW5kIGZpbGUsIGFuZCBpcyIsCisiICBpbmhlcml0 ZWQgYnkgc3Vib3JkaW5hdGUgbWFjcm9zIGFuZCB0YWtlIGZpbGVzLiIsCisiIiB9OworCitzdGF0 aWMgY2hhciAqaHh5ZnVuY1tdID0geworIlNFVCBGVU5DVElPTiBESUFHTk9TVElDUyB7IE9OLCBP RkYgfSIsCisiICBXaGV0aGVyIHRvIGlzc3VlIGRpYWdub3N0aWMgbWVzc2FnZXMgZm9yIGlsbGVn YWwgZnVuY3Rpb24gY2FsbHMgYW5kIiwKKyIgIHJlZmVyZW5jZXMgdG8gbm9uZXhpc3RlbnQgYnVp bHQtaW4gdmFyaWFibGVzLiAgT04gYnkgZGVmYXVsdC4iLAorIiAiLAorIlNFVCBGVU5DVElPTiBF UlJPUiB7IE9OLCBPRkYgfSIsCisiICBXaGV0aGVyIGFuIGlsbGVnYWwgZnVuY3Rpb24gY2FsbCBv ciByZWZlcmVuY2UgdG8gYSBub25leGlzdGVudCBidWlsdC1pbiIsCisiICB2YXJpYWJsZSBzaG91 bGQgY2F1c2UgYSBjb21tYW5kIHRvIGZhaWwuICBPRkYgYnkgZGVmYXVsdC4iLAorIiIgfTsKKyNl bmRpZiAvKiBOT1NQTCAqLworCitzdGF0aWMgY2hhciAqaHh5eHl6W10gPSB7CisjaWZkZWYgQ0tf WFlaCisjaWZkZWYgWFlaX0lOVEVSTkFMCisKKy8qIFRoaXMgaXMgZm9yIGJ1aWx0LWluIHByb3Rv Y29scyAqLworCisiU3ludGF4OiBTRVQgUFJPVE9DT0wgeyBLRVJNSVQsIFhNT0RFTSwgWU1PREVN LCBaTU9ERU0gfSBbIHMxIHMyIFsgczMgXSBdIiwKKyIgIFNlbGVjdHMgcHJvdG9jb2wgdG8gdXNl IGZvciB0cmFuc2ZlcnJpbmcgZmlsZXMuICBTdHJpbmcgczEgaXMgYSBjb21tYW5kIHRvIiwKKyIg IHNlbmQgdG8gdGhlIHJlbW90ZSBob3N0IHByaW9yIHRvIFNFTkRpbmcgZmlsZXMgd2l0aCB0aGlz IHByb3RvY29sIGluIiwKKyIgIGJpbmFyeSBtb2RlOyBzdHJpbmcgczIgaXMgdGhlIHNhbWUgdGhp bmcgYnV0IGZvciB0ZXh0IG1vZGUuICBVc2UgXCIlc1wiIGluIiwKKyIgIGFueSBvZiB0aGVzZSBz dHJpbmdzIHRvIHJlcHJlc2VudCB0aGUgZmlsZW5hbWUocykuICBJZiB0aGUgcHJvdG9jb2wgaXMi LAorIiAgS0VSTUlULCB5b3UgbWF5IGFsc28gc3BlY2lmeSBhIHN0cmluZyBzMywgdGhlIGNvbW1h bmQgdG8gc3RhcnQgYSBLZXJtaXQiLAorIiAgc2VydmVyIG9uIHRoZSByZW1vdGUgaG9zdCB3aGVu IHlvdSBnaXZlIGEgR0VULCBSRUdFVCwgUkVNT1RFLCBvciBvdGhlciIsCisiICBjbGllbnQgY29t bWFuZC4gIFVzZSB7IGJyYWNlcyB9IGlmIGFueSBjb21tYW5kIGNvbnRhaW5zIHNwYWNlcy4gIEV4 YW1wbGVzOiIsCisiICIsCisiICAgIHNldCBwcm90byB4bW9kZW0ge3J4ICVzfSB7cnggLWEgJXN9 IiwKKyIgICAgc2V0IHByb3RvIGtlcm1pdCB7a2VybWl0IC1ZUWlyfSB7a2VybWl0IC1ZUVRyfSB7 a2VybWl0IC1ZUXh9IiwKKworI2Vsc2UgLyogVGhpcyBpcyBmb3Igd2hlbiBub24tS2VybWl0IHBy b3RvY29scyBhcmUgZXh0ZXJuYWwgKi8KKworIlN5bnRheDogXAorU0VUIFBST1RPQ09MIHsgS0VS TUlULCBYTU9ERU0sIFlNT0RFTSwgWk1PREVNIH0gWyBzMSBzMiBzMyBzNCBzNSBzNiBdIiwKKyIg IFNlbGVjdHMgcHJvdG9jb2wgdG8gdXNlIGZvciB0cmFuc2ZlcnJpbmcgZmlsZXMuICBzMSBhbmQg czIgYXJlIGNvbW1hbmRzIHRvIiwKKyIgIG91dHB1dCBwcmlvciB0byBTRU5EaW5nIHdpdGggdGhp cyBwcm90b2NvbCwgdG8gYXV0b21hdGljYWxseSBzdGFydCB0aGUiLAorIiAgUkVDRUlWRSBwcm9j ZXNzIG9uIHRoZSBvdGhlciBlbmQgaW4gYmluYXJ5IG9yIHRleHQgbW9kZSwgcmVzcGVjdGl2ZWx5 LiIsCisiICBJZiB0aGUgcHJvdG9jb2wgaXMgS0VSTUlULCBzMyBpcyB0aGUgY29tbWFuZCB0byBz dGFydCBhIEtlcm1pdCBzZXJ2ZXIgb24iLAorIiAgdGhlIHJlbW90ZSBjb21wdXRlciwgYW5kIHRo ZXJlIGFyZSBubyBzNC1zNiBjb21tYW5kcy4gIE90aGVyd2lzZSwgczMgYW5kIiwKKyIgIHM0IGFy ZSBjb21tYW5kcyB1c2VkIG9uIHRoaXMgY29tcHV0ZXIgZm9yIHNlbmRpbmcgZmlsZXMgd2l0aCB0 aGlzIHByb3RvY29sIiwKKyIgIGluIGJpbmFyeSBvciB0ZXh0IG1vZGUsIHJlc3BlY3RpdmVseTsg czUgYW5kIHM2IGFyZSB0aGUgY29tbWFuZHMgZm9yIiwKKyIgIHJlY2VpdmluZyBmaWxlcyB3aXRo IHRoaXMgcHJvdG9jb2wuICBVc2UgXCIlc1wiIGluIGFueSBvZiB0aGVzZSBzdHJpbmdzIiwKKyIg IHRvIHJlcHJlc2VudCB0aGUgZmlsZW5hbWUocykuICBVc2UgeyBicmFjZXMgfSBpZiBhbnkgY29t bWFuZCBjb250YWlucyIsCisiICBzcGFjZXMuICBFeGFtcGxlczoiLAorIiAiLAorIiAgICBzZXQg cHJvdG8ga2VybWl0IHtrZXJtaXQgLVlRaXJ9IHtrZXJtaXQgLVlRVHJ9IHtrZXJtaXQgLVlReH0i LAorIiAgICBzZXQgcHJvdG8geW1vZGVtIHJiIHtyYiAtYX0ge3NiICVzfSB7c2IgLWEgJXN9IHJi IHJiIiwKKyIgIiwKKyJFeHRlcm5hbCBwcm90b2NvbHMgcmVxdWlyZSBSRURJUkVDVCBhbmQgZXh0 ZXJuYWwgZmlsZSB0cmFuc2ZlciBwcm9ncmFtcyB0aGF0IiwKKyJ1c2UgcmVkaXJlY3RhYmxlIHN0 YW5kYXJkIGlucHV0L291dHB1dC4iLAorI2VuZGlmIC8qIFhZWl9JTlRFUk5BTCAqLworI2Vsc2UK KyJTeW50YXg6IFwKK1NFVCBQUk9UT0NPTCBLRVJNSVQgWyBzMSBbIHMyIFsgczMgXSBdIF0iLAor IiAgTGV0cyB5b3Ugc3BlY2lmeSB0aGUgYXV0b3VwbG9hZCBiaW5hcnksIGF1dG91cGxvYWQgdGV4 dCwgYW5kIGF1dG9zZXJ2ZXIiLAorIiAgY29tbWFuZCBzdHJpbmdzIHRvIGJlIHNlbnQgdG8gdGhl IHJlbW90ZSBzeXN0ZW0gaW4gYWR2YW5jZSBvZiBhbnkgU0VORCIsCisiICBvciBHRVQgY29tbWFu ZHMuICBCeSBkZWZhdWx0IHRoZXNlIGFyZSBcImtlcm1pdCAtaXJcIiwgXCJrZXJtaXQgLXJcIiwg YW5kIiwKKyIgIFwia2VybWl0IC14XCIuICBVc2UgeyBicmFjZXMgfSBhcm91bmQgYW55IGNvbW1h bmQgdGhhdCBjb250YWlucyBzcGFjZXMuIiwKKyIgIEV4YW1wbGU6IiwKKyIgIiwKKyIgICAgc2V0 IHByb3RvIGtlcm1pdCB7a2VybWl0IC1ZaXJ9IHtrZXJtaXQgLVlUcn0ge2tlcm1pdCAtWXh9IiwK KyNlbmRpZiAvKiBDS19YWVogKi8KKyIgIiwKKyIgIFNIT1cgUFJPVE9DT0wgZGlzcGxheXMgdGhl IGN1cnJlbnQgc2V0dGluZ3MuIiwKKyIifTsKKworc3RhdGljIGNoYXIgKmhteHhieWUgPSAiU3lu dGF4OiBCWUVcblwKKyAgU2h1dCBkb3duIGFuZCBsb2cgb3V0IGEgcmVtb3RlIEtlcm1pdCBzZXJ2 ZXIiOworCisjaWZkZWYgQ0tfUEVSTVMKKyNpZmRlZiBVTklYCitzdGF0aWMgY2hhciAqaG14eGNo bW9kW10gPSB7CisiU3ludGF4OiBDSE1PRCBbIHN3aXRjaGVzIF0gY29kZSBmaWxlc3BlYyIsCisi ICBVTklYIG9ubHkuICBDaGFuZ2VzIHBlcm1pc3Npb25zIG9mIHRoZSBnaXZlbiBmaWxlKHMpIHRv IHRoZSBnaXZlbiBjb2RlLCIsCisiICB3aGljaCBtdXN0IGJlIGFuIG9jdGFsIG51bWJlciBzdWNo IGFzIDY2NCBvciA3NzUuICBPcHRpb25hbCBzd2l0Y2hlczoiLAorIiAiLAorIiAgIC9GSUxFUyAg ICAgICAgT25seSBjaGFuZ2UgcGVybWlzc2lvbnMgb2YgcmVndWxhciBmaWxlcy4iLAorIiAgIC9E SVJFQ1RPUklFUyAgT25seSBjaGFuZ2UgcGVybWlzc2lvbnMgb2YgZGlyZWN0b3J5IGZpbGVzLiIs CisiICAgL1RZUEU6QklOQVJZICBPbmx5IGNoYW5nZSBwZXJtaXNzaW9ucyBvZiBiaW5hcnkgZmls ZXMuIiwKKyIgICAvVFlQRTpURVhUICAgIE9ubHkgY2hhbmdlIHBlcm1pc3Npb25zIG9mIHRleHQg ZmlsZXMuIiwKKyIgICAvRE9URklMRVMgICAgIEluY2x1ZGUgZmlsZXMgd2hvc2UgbmFtZXMgYmVn aW4gd2l0aCBkb3QgKC4pLiIsCisiICAgL1JFQ1VSU0lWRSAgICBDaGFuZ2UgcGVybWlzc2lvbnMg aW4gc3ViZGlyZWN0b3JpZXMgdG9vLiIsCisiICAgL0xJU1QgICAgICAgICBMaXN0IGVhY2ggZmls ZSAoc3lub255bTogL1ZFUkJPU0UpLiIsCisiICAgL05PTElTVCAgICAgICBPcGVyYXRlIHNpbGVu dGx5IChzeW5vbnltOiAvUVVJRVQpLiIsCisiICAgL1BBR0UgICAgICAgICBXaGVuIGxpc3Rpbmcs IHBhdXNlIGF0IGVuZCBvZiBlYWNoIHNjcmVlbiAoaW1wbGllcyAvTElTVCkuIiwKKyIgICAvTk9Q QUdFICAgICAgIFdoZW4gbGlzdGluZywgZG9uJ3QgcGF1c2UgYXQgZW5kIG9mIGVhY2ggc2NyZWVu LiIsCisiICAgL1NJTVVMQVRFICAgICBTaG93IHdoYXQgd291bGQgYmUgZG9uZSBidXQgZG9uJ3Qg YWN0dWFsbHkgZG8gaXQuIiwKKyIiCit9OworI2VuZGlmIC8qIFVOSVggKi8KKyNlbmRpZiAvKiBD S19QRVJNUyAqLworCisjaWZuZGVmIE5PU1BMCisjaWZuZGVmIE5PU0VYUAorc3RhdGljIGNoYXIg KmhteHhzZXhwW10gPSB7CisiU3ludGF4OiAob3BlcmF0aW9uIG9wZXJhbmQgWyBvcGVyYW5kIFsg Li4uIF0gXSkiLAorIiAiLAorIiAgQy1LZXJtaXQgaW5jbHVkZXMgYSBzaW1wbGUgTElTUC1saWtl IFMtRXhwcmVzc2lvbiBwYXJzZXIgb3BlcmF0aW5nIG9uIiwKKyIgIG51bWJlcnMgb25seS4gIEFu IFMtRXhwcmVzc2lvbiBpcyBhbHdheXMgZW5jbG9zZWQgaW4gcGFyZW50aGVzZXMuICBUaGUiLAor IiAgcGFyZW50aGVzZXMgY2FuIGNvbnRhaW4gKGEpIGEgbnVtYmVyLCAoYikgYSB2YXJpYWJsZSwg KGMpIGEgZnVuY3Rpb24gdGhhdCIsCisiICByZXR1cm5zIGEgbnVtYmVyLCBvciAoZCkgYW4gb3Bl cmF0b3IgZm9sbG93ZWQgYnkgb25lIG9yIG1vcmUgb3BlcmFuZHMuIiwKKyIgIE9wZXJhbmRzIGNh biBiZSBhbnkgb2YgKGEpIHRocm91Z2ggKGMpIG9yIGFuIFMtRXhwcmVzc2lvbi4gIE51bWJlcnMg Y2FuIGJlIiwKKyIgIGludGVnZXJzIG9yIGZsb2F0aW5nLXBvaW50LiAgQW55IG9wZXJhbmQgdGhh dCBpcyBub3QgYSBudW1iZXIgYW5kIGRvZXMgbm90IiwKKyIgIHN0YXJ0IHdpdGggYmFja3NsYXNo IChcXCkgaXMgdHJlYXRlZCBhcyBhIEtlcm1pdCBtYWNybyBuYW1lLiAgT3BlcmF0b3JzOiIsCisi ICIsCisiIE9wZXJhdG9yICBBY3Rpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBF eGFtcGxlICAgICAgICAgICBWYWx1ZSIsCisiICBFVkFMICguKSAgUmV0dXJucyB0aGUgY29udGFp bmVkIHZhbHVlICAgICAgICAgICAgKDYpICAgICAgICAgICAgICAgNiIsCisiICBRVU9URSAoJykg SW5oaWJpdHMgZXZhbHVhdGlvbiBvZiBmb2xsb3dpbmcgdmFsdWUgKHF1b3RlIGEpICAgICAgICAg YSIsCisiICBTRVRRICAgICAgQXNzaWducyBhIHZhbHVlIHRvIGEgZ2xvYmFsIHZhcmlhYmxlICAg KHNldHEgYSAyKSAgICAgICAgMiIsCisiICBMRVQgICAgICAgQXNzaWducyBhIHZhbHVlIHRvIGEg bG9jYWwgdmFyaWFibGUgICAgKGxldCBiIC0xLjMpICAgICAtMS4zIiwKKyIgICsgICAgICAgICBB ZGRzIGFsbCBvcGVyYW5kcyAoMSBvciBtb3JlKSAgICAgICAgICAoKyBhIGIpICAgICAgICAgICAw LjciLAorIiAgLSAgICAgICAgIFN1YnRyYWN0cyBhbGwgb3BlcmFuZHMgKDEgb3IgbW9yZSkgICAg ICgtIDkgNSAyIDEpICAgICAgIDEiLAorIiAgKiAgICAgICAgIE11bHRpcGxpZXMgYWxsIG9wZXJh bmRzICgxIG9yIG1vcmUpICAgICgqIGEgKCsgYiAxKSAzKSAgLTEuOCIsCisiICAvICAgICAgICAg RGl2aWRlcyBhbGwgb3BlcmFuZHMgKDEgb3IgbW9yZSkgICAgICAgKC8gYiBhIDIpICAgICAgICAt MC4zMjUiLAorIiAgXiAgICAgICAgIFJhaXNlIGdpdmVuIG51bWJlciB0byBnaXZlbiBwb3dlciAg ICAgICheIDMgMikgICAgICAgICAgIDkiLAorIiAgKysgICAgICAgIEluY3JlbWVudHMgYSB2YXJp YWJsZSAgICAgICAgICAgICAgICAgICgrKyBhIDEuMikgICAgICAgIDMuMiIsCisiICAtLSAgICAg ICAgRGVjcmVtZW50cyBhIHZhcmlhYmxlICAgICAgICAgICAgICAgICAgKC0tIGEpICAgICAgICAg ICAgMSIsCisiICBBQlMgICAgICAgQWJzb2x1dGUgdmFsdWUgb2YgMSBvcGVyYW5kICAgICAgICAg ICAgKGFicyAoKiBhIGIgMykpICAgNy44IiwKKyIgIE1BWCAgICAgICBNYXhpbXVtIG9mIGFsbCBv cGVyYW5kcyAoMSBvciBtb3JlKSAgICAobWF4IDEgMiAzIDQpICAgICA0IiwKKyIgIE1JTiAgICAg ICBNaW5pbXVtIG9mIGFsbCBvcGVyYW5kcyAoMSBvciBtb3JlKSAgICAobWluIDEgMiAzIDQpICAg ICAxIiwKKyIgIE1PRCAgICAgICBNb2R1bHVzIG9mIGFsbCBvcGVyYW5kcyAoMSBvciBtb3JlKSAg ICAobW9kIDcgNCAyKSAgICAgICAxIiwKKyIgIFRSVU5DQVRFICBJbnRlZ2VyIHBhcnQgb2YgZmxv YXRpbmctcG9pbnQgb3BlcmFuZCAodHJ1bmNhdGUgMS4zMzMpICAxIiwKKyIgIENFSUxJTkcgICBD ZWlsaW5nIG9mIGZsb2F0aW5nLXBvaW50IG9wZXJhbmQgICAgICAoY2VpbGluZyAxLjI1KSAgICAy IiwKKyIgIEZMT09SICAgICBGbG9vciBvZiBmbG9hdGluZy1wb2ludCBvcGVyYW5kICAgICAgICAo Zmxvb3IgMS4yNSkgICAgICAxIiwKKyIgIFJPVU5EICAgICBPcGVyYW5kIHJvdW5kZWQgdG8gbmVh cmVzdCBpbnRlZ2VyICAgICAocm91bmQgMS43NSkgICAgICAyIiwKKyIgIFNRUlQgICAgICBTcXVh cmUgcm9vdCBvZiAxIG9wZXJhbmQgICAgICAgICAgICAgICAoc3FydCAyKSAgICAgICAgICAxLjQx NC4uIiwKKyIgIEVYUCAgICAgICBlICgyLjcxODI4Li4pIHRvIHRoZSBnaXZlbiBwb3dlciAgICAg ICAoZXhwIC0xKSAgICAgICAgICAwLjM2Ny4uIiwKKyIgIFNJTiAgICAgICBTaW5lIG9mIGFuZ2xl IGV4cHJlc3NlZCBpbiByYWRpYW5zICAgICAoc2luICgvIHBpIDIpKSAgICAxLjAiLAorIiAgQ09T ICAgICAgIENvc2luZSBvZiBnaXZlbiBudW1iZXIgICAgICAgICAgICAgICAgIChjb3MgcGkpICAg ICAgICAgLTEuMCIsCisiICBUQU4gICAgICAgVGFuZ2VudCBvZiBnaXZlbiBudW1iZXIgICAgICAg ICAgICAgICAgKHRhbiBwaSkgICAgICAgICAgMC4wIiwKKyIgIExPRyAgICAgICBOYXR1cmFsIGxv ZyAoYmFzZSBlKSBvZiBnaXZlbiBudW1iZXIgICAobG9nIDIuNzE4MykgICAgICAxLjAwMC4uIiwK KyIgIExPRzEwICAgICBMb2cgYmFzZSAxMCBvZiBnaXZlbiBudW1iZXIgICAgICAgICAgICAobG9n MTAgMTAwMCkgICAgICAzLjAiLAorIiAiLAorIlByZWRpY2F0ZSBvcGVyYXRvcnMgcmV0dXJuIDAg aWYgZmFsc2UsIDEgaWYgdHJ1ZSwgYW5kIGlmIGl0IGlzIHRoZSBvdXRlcm1vc3QiLAorIm9wZXJh dG9yLCBzZXRzIFNVQ0NFU1Mgb3IgRkFJTFVSRSBhY2NvcmRpbmdseToiLAorIiAiLAorIiAgPCAg ICAgICAgIE9wZXJhbmRzIGluIHN0cmljdGx5IGRlc2NlbmRpbmcgb3JkZXIgICg8IDYgNSA0IDMg MiAxKSAgIDEiLAorIiAgPD0gICAgICAgIE9wZXJhbmRzIGluIGRlc2NlbmRpbmcgb3JkZXIgICAg ICAgICAgICg8PSA2IDYgNSA0IDMgMikgIDEiLAorIiAgIT0gICAgICAgIE9wZXJhbmRzIGFyZSBu b3QgZXF1YWwgICAgICAgICAgICAgICAgICghPSAxIDEgMS4wKSAgICAgIDAiLAorIiAgPSAgICg9 PSkgIEFsbCBvcGVyYW5kcyBhcmUgZXF1YWwgICAgICAgICAgICAgICAgICg9IDMgMyAzIDMpICAg ICAgIDEiLAorIiAgPiAgICAgICAgIE9wZXJhbmRzIGluIHN0cmljdGx5IGFzY2VuZGluZyBvcmRl ciAgICg+IDEgMiAzIDQgNSA2KSAgIDEiLAorIiAgPj0gICAgICAgIE9wZXJhbmRzIGluIGFzY2Vu ZGluZyBvcmRlciAgICAgICAgICAgICg+IDEgMSAyIDMgNCA1KSAgIDEiLAorIiAgQU5EICgmJikg IE9wZXJhbmRzIGFyZSBhbGwgdHJ1ZSAgICAgICAgICAgICAgICAgIChhbmQgMSAxIDEgMSAwKSAg IDAiLAorIiAgT1IgICh8fCkgIEF0IGxlYXN0IG9uZSBvcGVyYW5kIGlzIHRydWUgICAgICAgICAg IChvciAxIDEgMSAxIDApICAgIDEiLAorIiAgWE9SICAgICAgIExvZ2ljYWwgRXhjbHVzaXZlIE9S ICAgICAgICAgICAgICAgICAgICh4b3IgMyAxKSAgICAgICAgIDAiLAorIiAgTk9UICghKSAgIFJl dmVyc2VzIHRydXRoIHZhbHVlIG9mIG9wZXJhbmQgICAgICAgIChub3QgMykgICAgICAgICAgIDAi LAorIiAiLAorIkJpdC1vcmllbnRlZCBvcGVyYXRvcnM6IiwKKyIgIiwKKyIgICYgICAgICAgICBC aXR3aXNlIEFORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJiA3IDIpICAgICAgICAgICAy IiwKKyIgIHwgICAgICAgICBCaXR3aXNlIE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo fCAxIDIgMyA0KSAgICAgICA3IiwKKyIgICMgICAgICAgICBCaXR3aXNlIEV4Y2x1c2l2ZSBPUiAg ICAgICAgICAgICAgICAgICAoIyAzIDEpICAgICAgICAgICAyIiwKKyIgIH4gICAgICAgICBSZXZl cnNlcyBhbGwgYml0cyAgICAgICAgICAgICAgICAgICAgICAofiAzKSAgICAgICAgICAgIC00IiwK KyIgIiwKKyJPcGVyYXRvcnMgdGhhdCB3b3JrIG9uIHRydXRoIHZhbHVlczoiLAorIiAiLAorIiAg SUYgICAgICAgIENvbmRpdGlvbmFsIGV2YWx1YXRpb24gICAgICAgICAgICAgICAgIChpZiAoMSkg MiAzKSAgICAgIDIiLAorIiAiLAorIk9wZXJhdG9ycyBjYW4gYWxzbyBiZSBuYW1lcyBvZiBLZXJt aXQgbWFjcm9zIHRoYXQgcmV0dXJuIGVpdGhlciBudW1lcmljIiwKKyJ2YWx1ZXMgb3Igbm8gdmFs dWUgYXQgYWxsLiIsCisiICIsCisiQnVpbHQtaW4gY29uc3RhbnRzIGFyZToiLAorIiAiLAorIiAg dCAgICAgICAgIFRydWUgKDEpIiwKKyIgIG5pbCAgICAgICBGYWxzZSAoZW1wdHkpIiwKKyIgIHBp ICAgICAgICBUaGUgdmFsdWUgb2YgUGkgKDMuMTQxNTkyNi4uLikiLAorIiAiLAorIklmIFNFVCBT RVhQUkVTU0lPTiBUUlVOQ0FURS1BTEwtUkVTVUxUUyBpcyBPTiwgYWxsIHJlc3VsdHMgYXJlIHRy dW5jdGF0ZWQiLAorInRvIGludGVnZXIgdmFsdWVzIGJ5IGRpc2NhcmRpbmcgYW55IGZyYWN0aW9u YWwgcGFydC4gIE90aGVyd2lzZSByZXN1bHRzIiwKKyJhcmUgZmxvYXRpbmctcG9pbnQgaWYgdGhl cmUgZnJhY3Rpb25hbCBwYXJ0IGFuZCBpbnRlZ2VyIG90aGVyd2lzZS4iLAorIklmIFNFVCBTRVhQ UkVTU0lPTiBFQ0hPLVJFU1VMVCBpcyBBVVRPICh0aGUgZGVmYXVsdCksIHRoZSB2YWx1ZSBvZiB0 aGUiLAorIlMtRXhwcmVzc2lvbiBpcyBwcmludGVkIGlmIHRoZSBTLUV4cHJlc3Npb24gaXMgZ2l2 ZW4gYXQgdG9wIGxldmVsOyBpZiBPTiwiLAorIml0IGlzIHByaW50ZWQgYXQgYW55IGxldmVsOyBp ZiBPRkYgaXQgaXMgbm90IHByaW50ZWQuICBBdCBhbGwgbGV2ZWxzLCB0aGUiLAorInZhcmlhYmxl IFxcdihzZXhwcmVzc2lvbikgaXMgc2V0IHRvIHRoZSBtb3N0IHJlY2VudCBTLUV4cHJlc3Npb24s IGFuZCIsCisiXFx2KHN2YWx1ZSkgaXMgc2V0IHRvIGl0cyB2YWx1ZS4gIFlvdSBjYW4gdXNlIHRo ZSBcXGZzZXhwcmVzc3Npb24oKSBmdW5jdGlvbiIsCisidG8gZXZhbHVhdGUgYW4gUy1FeHByZXNz aW9uIGFueXdoZXJlIGluIGEgS2VybWl0IGNvbW1hbmQuIiwKKyIiCit9OworI2VuZGlmIC8qIE5P U0VYUCAqLworI2VuZGlmIC8qIE5PU1BMICovCisKK3N0YXRpYyBjaGFyICpobXh4Z3JlcFtdID0g eworI2lmZGVmIFVOSVhPUk9TSworIlN5bnRheDogR1JFUCBbIG9wdGlvbnMgXSBwYXR0ZXJuIGZp bGVzcGVjIiwKKyNlbHNlCisiU3ludGF4OiBGSU5EIFsgb3B0aW9ucyBdIHBhdHRlcm4gZmlsZXNw ZWMiLAorI2VuZGlmIC8qIFVOSVhPUk9TSyAqLworIiAgU2VhcmNoZXMgdGhyb3VnaCB0aGUgZ2l2 ZW4gZmlsZSBvciBmaWxlcyBmb3IgdGhlIGdpdmVuIGNoYXJhY3RlciBzdHJpbmciLAorIiAgb3Ig cGF0dGVybi4gIEluIHRoZSBub3JtYWwgY2FzZSwgYWxsIGxpbmVzIGNvbnRhaW5pbmcgYW55IHRl eHQgdGhhdCBtYXRjaGVzIgorLAorIiAgdGhlIHBhdHRlcm4gYXJlIHByaW50ZWQuICBQYXR0ZXJu IHN5bnRheCBpcyBhcyBkZXNjcmliZWQgaW4gSEVMUCBQQVRURVJOUyIsCisiICBleGNlcHQgdGhh dCAnKicgaXMgaW1wbGllZCBhdCB0aGUgYmVnaW5uaW5nIHVubGVzcyB0aGUgcGF0dGVybiBzdGFy dHMgd2l0aCIsCisiICAnXicgYW5kIGFsc28gYXQgdGhlIGVuZCB1bmxlc3MgdGhlIHBhdHRlcm4g ZW5kcyB3aXRoICckJy4gIFRoZXJlZm9yZSwiLAorIiAgXCJncmVwIHNvbWV0aGluZyAqLnR4dFwi IGxpc3RzIGFsbCBsaW5lcyBpbiBhbGwgKi50eHQgZmlsZXMgdGhhdCBjb250YWluIiwKKyIgIHRo ZSB3b3JkIFwic29tZXRoaW5nXCIsIGJ1dCBcImdyZXAgXnNvbWV0aGluZyAqLnR4dFwiIGxpc3Rz IG9ubHkgdGhlIGxpbmVzIiwKKyIgIHRoYXQgU1RBUlQgd2l0aCBcInNvbWV0aGluZ1wiLiAgVGhl IGNvbW1hbmQgc3VjY2VlZHMgaWYgYW55IG9mIHRoZSBnaXZlbiIsCisiICBmaWxlcyBjb250YWlu ZWQgYW55IGxpbmVzIHRoYXQgbWF0Y2ggdGhlIHBhdHRlcm4sIG90aGVyd2lzZSBpdCBmYWlscy4i LAorI2lmZGVmIFVOSVhPUk9TSworIiAgU3lub255bTogRklORC4iLAorI2Vsc2UKKyIgIFN5bm9u eW06IEdSRVAuIiwKKyNlbmRpZiAvKiBVTklYT1JPU0sgKi8KKyIgIiwKKyJGaWxlIHNlbGVjdGlv biBvcHRpb25zOiIsCisiICAvTk9CQUNLVVBGSUxFUyIsCisiICAgIEV4Y2x1ZGVzIGJhY2t1cCBm aWxlcyAobGlrZSBvb2ZhLnR4dC5+M34pIGZyb20gdGhlIHNlYXJjaC4iLAorIiAgL0RPVEZJTEVT IiwKKyIgICAgSW5jbHVkZXMgZmlsZXMgd2hvc2UgbmFtZXMgc3RhcnQgd2l0aCBkb3QgKC4pIGlu IHRoZSBzZWFyY2guIiwKKyIgIC9OT0RPVEZJTEVTIiwKKyIgICAgRXhjbHVkZXMgZmlsZXMgd2hv c2UgbmFtZXMgc3RhcnQgd2l0aCBkb3QgKC4pIGZyb20gdGhlIHNlYXJjaC4iLAorI2lmZGVmIFJF Q1VSU0lWRQorIiAgL1JFQ1VSU0lWRSIsCisiICAgIFNlYXJjaGVzIHRocm91Z2ggZmlsZXMgaW4g c3ViZGlyZWN0b3JpZXMgdG9vLiIsCisjZW5kaWYgLyogUkVDVVJTSVZFICovCisiICAvVFlQRTpU RVhUIiwKKyIgICAgU2VhcmNoIG9ubHkgdGV4dCBmaWxlcyAocmVxdWlyZXMgRklMRSBTQ0FOIE9O KS4iLAorIiAgL1RZUEU6QklOQVJZIiwKKyIgICAgU2VhcmNoIG9ubHkgYmluYXJ5IGZpbGVzIChy ZXF1aXJlcyBGSUxFIFNDQU4gT04pLiIsCisiICIsCisiUGF0dGVybi1tYXRjaGluZyBvcHRpb25z OiIsCisiICAvTk9DQVNFIiwKKyIgICAgSWdub3JlcyBjYXNlIG9mIGxldHRlcnMgKEFTQ0lJIG9u bHkpIHdoZW4gY29tcGFyaW5nLiIsCisiICAvTk9NQVRDSCIsCisiICAgIFNlYXJjaGVzIGZvciBs aW5lcyB0aGF0IGRvIE5PVCBtYXRjaCB0aGUgcGF0dGVybi4iLAorIiAgL0VYQ0VQVDpwYXR0ZXJu IiwKKyIgICAgRXhjbHVkZSBsaW5lcyB0aGF0IG1hdGNoIHRoZSBtYWluIHBhdHRlcm4gdGhhdCBh bHNvIG1hdGNoIHRoaXMgcGF0dGVybi4iLAorIiAiLAorIkRpc3BsYXkgb3B0aW9uczoiLAorIiAg L0NPVU5UOnZhcmlhYmxlLW5hbWUiLAorIiAgICBGb3IgZWFjaCBmaWxlLCBwcmludHMgb25seSB0 aGUgZmlsZW5hbWUgYW5kIGEgY291bnQgb2YgbWF0Y2hpbmcgbGluZXMiLAorIiAgICBhbmQgYXNz aWducyB0aGUgdG90YWwgbWF0Y2ggY291bnQgdG8gdGhlIHZhcmlhYmxlLCBpZiBvbmUgaXMgZ2l2 ZW4uIiwKKyIgIC9OQU1FT05MWSIsCisiICAgIFByaW50cyB0aGUgbmFtZSBvZiBlYWNoIGZpbGUg dGhhdCBjb250YWlucyBhdCBsZWFzdCBvbmUgbWF0Y2hpbmcgbGluZSwiLAorIiAgICBvbmUgbmFt ZSBwZXIgbGluZSwgcmF0aGVyIHRoYW4gc2hvd2luZyBlYWNoIG1hdGNoaW5nIGxpbmUuIiwKKyIg IC9OT0xJU1QiLAorIiAgICBEb2Vzbid0IHByaW50IGFueXRoaW5nIChidXQgc2V0cyBTVUNDRVNT IG9yIEZBSUxVUkUgYXBwcm9wcmlhdGVseSkuIiwKKyIgIC9MSU5FTlVNQkVSUyIsCisiICAgIFBy ZWNlZGVzIGVhY2ggZmlsZSBsaW5lIGJ5IGl0cyBsaW5lIG51bWJlciB3aXRoaW4gdGhlIGZpbGUu IiwKKyIgIC9QQUdFIiwKKyIgICAgUGF1c2VzIGFmdGVyIGVhY2ggc2NyZWVuZnVsLiIsCisiICAv Tk9QQUdFIiwKKyIgICAgRG9lc24ndCBwYXVzZSBhZnRlciBlYWNoIHNjcmVlbmZ1bC4iLAorIiAg L09VVFBVVDpuYW1lIiwKKyIgICAgU2VuZHMgcmVzdWx0cyB0byB0aGUgZ2l2ZW4gZmlsZS4gIElm IHRoaXMgc3dpdGNoIGlzIG9taXR0ZWQsIHRoZSIsCisiICAgIHJlc3VsdHMgYXBwZWFyIG9uIHlv dXIgc2NyZWVuLiAgVGhpcyBzd2l0Y2ggb3ZlcnJpZGVzIGFueSBleHByZXNzIG9yIiwKKyIgICAg aW1wbGllZCAvUEFHRSBzd2l0Y2guIiwKKyIifTsKKworc3RhdGljIGNoYXIgKmhteHhkaXJbXSA9 IHsKKyNpZmRlZiBET01ZRElSCisiU3ludGF4OiBESVJFQ1RPUlkgWyBzd2l0Y2hlcyBdIFsgZmls ZXNwZWMgWyBmaWxlc3BlYyBbIC4uLiBdIF0gXSIsCisjaWZkZWYgTE9DVVMKKyIgIElmIExPQ1VT IGlzIFJFTU9URSBvciBMT0NVUyBpcyBBVVRPIGFuZCB5b3UgaGF2ZSBhbiBGVFAgY29ubmVjdGlv biwiLAorIiAgdGhpcyBjb21tYW5kIGlzIGVxdWl2YWxlbnQgdG8gUkVNT1RFIERJUkVDVE9SWSAo UkRJUikuICBPdGhlcndpc2U6IiwKKyIgIiwKKyNlbmRpZiAvKiBMT0NVUyAqLworIiAgTGlzdHMg bG9jYWwgZmlsZXMuICBUaGUgZmlsZXNwZWMgbWF5IGJlIGEgZmlsZW5hbWUsIHBvc3NpYmx5IGNv bnRhaW5pbmciLAorIiAgd2lsZGNhcmQgY2hhcmFjdGVycywgb3IgYSBkaXJlY3RvcnkgbmFtZS4g IElmIG5vIGZpbGVzcGVjIGlzIGdpdmVuLCBhbGwiLAorIiAgZmlsZXMgaW4gdGhlIGN1cnJlbnQg ZGlyZWN0b3J5IGFyZSBsaXN0ZWQuICBJZiBhIGRpcmVjdG9yeSBuYW1lIGlzIGdpdmVuLCIsCisi ICBhbGwgdGhlICBmaWxlcyBpbiBpdCBhcmUgbGlzdGVkLiAgTXVsdGlwbGUgZmlsZXNwZWNzIGNh biBiZSBnaXZlbi4iLAorIiAgT3B0aW9uYWwgc3dpdGNoZXM6IiwKKyIgIiwKKyIgICAvQlJJRUYg ICAgICAgICAgIExpc3QgZmlsZW5hbWVzIG9ubHkuIiwKKyNpZmRlZiBDS19QRVJNUworIiAgIC9W RVJCT1NFICAgICAgICsgQWxzbyBsaXN0IHBlcm1pc3Npb25zLCBzaXplLCBhbmQgZGF0ZS4iLAor I2Vsc2UKKyIgICAvVkVSQk9TRSAgICAgICArIEFsc28gbGlzdCBkYXRlIGFuZCBzaXplLiIsCisj ZW5kaWYgLyogQ0tfUEVSTVMgKi8KKyIgICAvRklMRVMgICAgICAgICAgIFNob3cgZmlsZXMgYnV0 IG5vdCBkaXJlY3Rvcmllcy4iLAorIiAgIC9ESVJFQ1RPUklFUyAgICAgU2hvdyBkaXJlY3Rvcmll cyBidXQgbm90IGZpbGVzLiIsCisiICAgL0FMTCAgICAgICAgICAgKyBTaG93IGJvdGggZmlsZXMg YW5kIGRpcmVjdG9yaWVzLiIsCisiICAgL0FSUkFZOiZhICAgICAgICBTdG9yZSBmaWxlIGxpc3Qg aW4gc3BlY2lmaWVkIGFycmF5IChlLmcuIFxcJWFbXSkuIiwKKyIgICAvUEFHRSAgICAgICAgICAg IFBhdXNlIGFmdGVyIGVhY2ggc2NyZWVuZnVsLiIsCisiICAgL05PUEFHRSAgICAgICAgICBEb24n dCBwYXVzZSBhZnRlciBlYWNoIHNjcmVlbmZ1bC4iLAorIiAgIC9UT1A6biAgICAgICAgICAgT25s eSBzaG93IHRoZSB0b3AgbiBsaW5lcyBvZiB0aGUgZGlyZWN0b3J5IGxpc3RpbmcuIiwKKyNpZmRl ZiBVTklYT1JPU0sKKyIgICAvRE9URklMRVMgICAgICAgIEluY2x1ZGUgZmlsZXMgd2hvc2UgbmFt ZXMgc3RhcnQgd2l0aCBkb3QgKHBlcmlvZCkuIiwKKyIgICAvTk9ET1RGSUxFUyAgICArIERvbid0 IGluY2x1ZGUgZmlsZXMgd2hvc2UgbmFtZXMgc3RhcnQgd2l0aCBkb3QuIiwKKyIgICAvRk9MTE9X TElOS1MgICAgIEZvbGxvdyBzeW1ib2xpYyBsaW5rcy4iLAorIiAgIC9OT0ZPTExPV0xJTktTICsg RG9uJ3QgZm9sbG93IHN5bWJvbGljIGxpbmtzLiIsCisiICAgL05PTElOS1MgICAgICAgICBEb24n dCBsaXN0IHN5bWJvbGljIGxpbmtzIGF0IGFsbC4iLAorIiAgIC9CQUNLVVAgICAgICAgICsgSW5j bHVkZSBiYWNrdXAgZmlsZXMgKG5hbWVzIGVuZCB3aXRoIC5+bn4pLiIsCisiICAgL05PQkFDS1VQ RklMRVMgICBEb24ndCBpbmNsdWRlIGJhY2t1cCBmaWxlcy4iLAorI2VuZGlmIC8qIFVOSVhPUk9T SyAqLworIiAgIC9PVVRQVVQ6ZmlsZSAgICAgU3RvcmUgZGlyZWN0b3J5IGxpc3RpbmcgaW4gdGhl IGdpdmVuIGZpbGUuIiwKKyIgICAvSEVBRElORyAgICAgICAgIEluY2x1ZGUgaGVhZGluZyBhbmQg c3VtbWFyeS4iLAorIiAgIC9OT0hFQURJTkcgICAgICsgRG9uJ3QgaW5jbHVkZSBoZWFkaW5nIG9y IHN1bW1hcnkuIiwKKyIgICAvQ09VTlQ6dmFyICAgICAgIFB1dCB0aGUgbnVtYmVyIG9mIG1hdGNo aW5nIGZpbGVzIGluIHRoZSBnaXZlbiB2YXJpYWJsZS4iLAorIiAgIC9TVU1NQVJZICAgICAgICAg UHJpbnQgb25seSBjb3VudCBhbmQgdG90YWwgc2l6ZSBvZiBtYXRjaGluZyBmaWxlcy4iLAorIiAg IC9YRkVSTU9ERSAgICAgICAgU2hvdyBwYXR0ZXJuLWJhc2VkIHRyYW5zZmVyIG1vZGUgKFQ9VGV4 dCwgQj1CaW5hcnkpLiIsCisiICAgL1RZUEU6ICAgICAgICAgICBTaG93IG9ubHkgZmlsZXMgb2Yg dGhlIHNwZWNpZmllZCB0eXBlICh0ZXh0IG9yIGJpbmFyeSkuIiwKKyIgICAvTUVTU0FHRTp0ZXh0 ICAgIEFkZCBicmllZiBtZXNzYWdlIHRvIGVhY2ggbGlzdGluZyBsaW5lLiIsCisiICAgL05PTUVT U0FHRSAgICAgKyBEb24ndCBhZGQgbWVzc2FnZSB0byBlYWNoIGxpc3RpbmcgbGluZS4iLAorIiAg IC9OT1hGRVJNT0RFICAgICsgRG9uJ3Qgc2hvdyBwYXR0ZXJuLWJhc2VkIHRyYW5zZmVyIG1vZGUi LAorIiAgIC9JU09EQVRFICAgICAgICsgSW4gdmVyYm9zZSBsaXN0aW5ncywgc2hvdyBkYXRlIGlu IElTTyA4MDYxIGZvcm1hdC4iLAorIiAgIC9FTkdMSVNIREFURSAgICAgSW4gdmVyYm9zZSBsaXN0 aW5ncywgc2hvdyBkYXRlIGluIFwiRW5nbGlzaFwiIGZvcm1hdC4iLAorI2lmZGVmIFJFQ1VSU0lW RQorIiAgIC9SRUNVUlNJVkUgICAgICAgRGVzY2VuZCB0aHJvdWdoIHN1YmRpcmVjdG9yaWVzLiIs CisiICAgL05PUkVDVVJTSVZFICAgKyBEb24ndCBkZXNjZW5kIHRocm91Z2ggc3ViZGlyZWN0b3Jp ZXMuIiwKKyNlbmRpZiAvKiBSRUNVUlNJVkUgKi8KKyIgICAvU09SVDprZXkgICAgICAgIFNvcnQg Ynkga2V5LCBOQU1FLCBEQVRFLCBvciBTSVpFOyBkZWZhdWx0IGtleSBpcyBOQU1FLiIsCisiICAg L05PU09SVCAgICAgICAgKyBEb24ndCBzb3J0LiIsCisiICAgL0FTQ0VORElORyAgICAgKyBJZiBz b3J0aW5nLCBzb3J0IGluIGFzY2VuZGluZyBvcmRlci4iLAorIiAgIC9SRVZFUlNFICAgICAgICAg SWYgc29ydGluZywgc29ydCBpbiByZXZlcnNlIG9yZGVyLiIsCisiICIsCisiRmFjdG9yeSBkZWZh dWx0cyBhcmUgbWFya2VkIHdpdGggKy4gIERlZmF1bHQgZm9yIHBhZ2luZyBkZXBlbmRzIG9uIFNF VCIsCisiQ09NTUFORCBNT1JFLVBST01QVElORy4gIFVzZSBTRVQgT1BUSU9OUyBESVJFQ1RPUlkg WyBzd2l0Y2hlcyBdIHRvIGNoYW5nZSIsCisiZGVmYXVsdHM7IHVzZSBTSE9XIE9QVElPTlMgdG8g ZGlzcGxheSBjdXN0b21pemVkIGRlZmF1bHRzLiAgQWxzbyBzZWUiLAorIldESVJFQ1RPUlkuIiwK KyNlbHNlCisiU3ludGF4OiBESVJFQ1RPUlkgWyBmaWxlc3BlYyBdIiwKKyIgIExpc3RzIHRoZSBz cGVjaWZpZWQgZmlsZSBvciBmaWxlcy4gIElmIG5vIGZpbGVzcGVjIGlzIGdpdmVuLCBhbGwgZmls ZXMiLAorIiAgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGFyZSBsaXN0ZWQuIiwKKyNlbmRpZiAv KiBET01ZRElSICovCisiIn07CisKK3N0YXRpYyBjaGFyICpobXh4dG91Y1tdID0geworIlN5bnRh eDogVE9VQ0ggWyBzd2l0Y2hlcyBdIGZpbGVzcGVjIiwKKyIgIFVwZGF0ZXMgdGhlIG1vZGlmaWNh dGlvbiB0aW1lIG9mIHRoZSBnaXZlbiBmaWxlIG9yIGZpbGVzIHRvIHRoZSBjdXJyZW50IiwKKyIg IGRhdGUgYW5kIHRpbWUuICBJZiB0aGUgZmlsZXNwZWMgaXMgdGhlIG5hbWUgb2YgYSBzaW5nbGUg ZmlsZSB0aGF0IGRvZXMgbm90IiwKKyIgIGV4aXN0LCB0aGUgZmlsZSBpcyBjcmVhdGVkLiAgVGhl IG9wdGlvbmFsIHN3aXRjaGVzIGFyZSB0aGUgc2FtZSBhcyBmb3IiLAorIiAgdGhlIERJUkVDVE9S WSBjb21tYW5kLiAgVE9VQ0ggb3BlcmF0ZXMgc2lsZW50bHkgdW5sZXNzIHRoZSAvVkVSQk9TRSIs CisiICBzd2l0Y2ggaXMgZ2l2ZW4sIGluIHdoaWNoIGNhc2UgaXQgbGlzdHMgZWFjaCBmaWxlIGl0 IGFmZmVjdHMuIiwKKyIifTsKKworI2lmbmRlZiBOT1NQTAorc3RhdGljIGNoYXIgKmhteHhrY2Rb XSA9IHsKKyJTeW50YXg6IEtDRCBzeW1ib2xpYy1kaXJlY3RvcnktbmFtZSIsCisiICBLZXJtaXQg Q2hhbmdlIERpcmVjdG9yeTogTGlrZSBDRCAocS52LikgYnV0IChhKSBhbHdheXMgYWN0cyBsb2Nh bGx5LCBhbmQiLAorIiAgKGIpIHRha2VzIGEgc3ltYm9saWMgZGlyZWN0b3J5IG5hbWUgcmF0aGVy IHRoYW4gYW4gYWN0dWFsIGRpcmVjdG9yeSBuYW1lLiIsCisiICBUaGUgc3ltYm9saWMgbmFtZXMg Y29ycmVzcG9uZCB0byBLZXJtaXQncyBkaXJlY3RvcnktdmFsdWVkIGJ1aWx0LWluIiwKKyIgIHZh cmlhYmxlcywgc3VjaCBhcyBcXHYoZG93bmxvYWQpLCBcXHYoZXhlZGlyKSwgYW5kIHNvIG9uLiAg SGVyZSdzIHRoZSBsaXN0OiIKKywKKyIgIiwKKyNpZmRlZiBOVAorIiAgICBhcHBkYXRhICAgICAg IFlvdXIgcGVyc29uYWwgS2VybWl0IDk1IGFwcGxpY2F0aW9uIGRhdGEgZGlyZWN0b3J5IiwKKyIg ICAgY29tbW9uICAgICAgICBLZXJtaXQgOTUncyBhcHBsaWNhdGlvbiBkYXRhIGRpcmVjdG9yeSBm b3IgYWxsIHVzZXJzIiwKKyIgICAgZGVza3RvcCAgICAgICBZb3VyIFdpbmRvd3MgZGVza3RvcCIs CisjZW5kaWYgLyogTlQgKi8KKyIgICAgZG93bmxvYWQgICAgICBZb3VyIGRvd25sb2FkIGRpcmVj dG9yeSAoaWYgYW55KSIsCisjaWZkZWYgT1MyT1JVTklYCisiICAgIGV4ZWRpciAgICAgICAgVGhl IGRpcmVjdG9yeSB3aGVyZSB0aGUgS2VybWl0IGV4ZWN1dGFibGUgcmVzaWRlcyIsCisjZW5kaWYg LyogT1MyT1JVTklYICovCisiICAgIGhvbWUgICAgICAgICAgWW91ciBob21lLCBsb2dpbiwgb3Ig ZGVmYXVsdCBkaXJlY3RvcnkiLAorIiAgICBpbmlkaXIgICAgICAgIFRoZSBkaXJlY3Rvcnkgd2hl cmUgS2VybWl0J3MgaW5pdGlhbGl6YXRpb24gd2FzIGZvdW5kIiwKKyNpZmRlZiBVTklYCisiICAg IGxvY2tkaXIgICAgICAgVGhlIFVOSVggVVVDUCBsb2NrZmlsZSBkaXJlY3Rvcnkgb24gdGhpcyBj b21wdXRlciIsCisjZW5kaWYgLyogVU5JWCAqLworI2lmZGVmIE5UCisiICAgIHBlcnNvbmFsICAg ICAgWW91ciBcIk15IERvY3VtZW50c1wiIGRpcmVjdG9yeSIsCisjZW5kaWYgLyogTlQgKi8KKyIg ICAgc3RhcnR1cCAgICAgICBZb3VyIGN1cnJlbnQgZGlyZWN0b3J5IGF0IHRoZSB0aW1lIEtlcm1p dCBzdGFydGVkIiwKKyIgICAgdGV4dGRpciAgICAgICBUaGUgZGlyZWN0b3J5IHdoZXJlIEtlcm1p dCB0ZXh0IGZpbGVzIHJlc2lkZSwgaWYgYW55IiwKKyIgICAgdG1wZGlyICAgICAgICBZb3VyIHRl bXBvcmFyeSBkaXJlY3RvcnkiLAorIiAiLAorIiAgQWxzbyBzZWUgQ0QsIFNFVCBGSUxFIERPV05M T0FELCBTRVQgVEVNUC1ESVJFQ1RPUlkuIiwKKyIiCit9OworI2VuZGlmIC8qIE5PU1BMICovCisK K3N0YXRpYyBjaGFyICpobXh4Y3dkW10gPSB7CisjaWZkZWYgTE9DVVMKKyIgIElmIExPQ1VTIGlz IFJFTU9URSBvciBMT0NVUyBpcyBBVVRPIGFuZCB5b3UgaGF2ZSBhbiBGVFAgY29ubmVjdGlvbiwi LAorIiAgdGhpcyBjb21tYW5kIGlzIGVxdWl2YWxlbnQgdG8gUkVNT1RFIENEIChSQ0QpLiAgT3Ro ZXJ3aXNlOiIsCisiICIsCisjZW5kaWYgLyogTE9DVVMgKi8KKyNpZmRlZiB2bXMKKyJTeW50YXg6 IENEIFsgZGlyZWN0b3J5IG9yIGRldmljZTpkaXJlY3RvcnkgXSIsCisiICBDaGFuZ2UgV29ya2lu ZyBEaXJlY3RvcnkuICBFcXVpdmFsZW50IHRvIFZNUyBTRVQgREVGQVVMVCBjb21tYW5kLiIsCisj ZWxzZQorI2lmZGVmIGRhdGFnZW5lcmFsCisiQ2hhbmdlIFdvcmtpbmcgRGlyZWN0b3J5LCBlcXVp dmFsZW50IHRvIEFPUy9WUyAnZGlyJyBjb21tYW5kLiIsCisjZWxzZQorI2lmZGVmIE9TMgorIlN5 bnRheDogQ0QgWyBkaXNrIG9yIGRpcmVjdG9yeSBuYW1lIF0iLAorIiAgQ2hhbmdlIERpc2sgb3Ig RGlyZWN0b3J5LiAgSWYgYSBkaXNrIG9yIGRpcmVjdG9yeSBuYW1lIGlzIG5vdCBzcGVjaWZpZWQs IiwKKyIgIHlvdXIgY3VycmVudCBkaXJlY3RvcnkgYmVjb21lcyB0aGUgb25lIHNwZWNpZmllZCBi eSBIT01FIGVudmlyb25tZW50IiwKKyIgIHZhcmlhYmxlLCBpZiBhbnkuICBBIGRpc2sgbGV0dGVy IG11c3QgYmUgZm9sbG93ZWQgYnkgYSBjb2xvbi4iLAorI2Vsc2UKKyJTeW50YXg6IENEIFsgZGly ZWN0b3J5IG5hbWUgXSIsCisiICBDaGFuZ2UgRGlyZWN0b3J5LiAgQ2hhbmdlcyB5b3VyIGN1cnJl bnQsIHdvcmtpbmcsIGRlZmF1bHQgZGlyZWN0b3J5IHRvIHRoZSIsCisiICBvbmUgZ2l2ZW4sIHNv IHRoYXQgZnV0dXJlIG5vbi1hYnNvbHV0ZSBmaWxlbmFtZSByZWZlcmVuY2VzIGFyZSByZWxhdGl2 ZSB0byIsCisiICB0aGlzIGRpcmVjdG9yeS4gIElmIHRoZSBkaXJlY3RvcnkgbmFtZSBpcyBvbWl0 dGVkLCB5b3VyIGhvbWUgKGxvZ2luKSIsCisiICBkaXJlY3RvcnkgaXMgc3VwcGxpZWQuIiwKKyNl bmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLworI2VuZGlmIC8qIHZtcyAq LworIiAgQy1LZXJtaXQncyBkZWZhdWx0IHByb21wdCBzaG93cyB5b3VyIGN1cnJlbnQgZGlyZWN0 b3J5LiIsCisiICBTeW5vbnltczogTENELCBDV0QuIiwKKyNpZmRlZiBMT0NVUworIiAgQWxzbyBz ZWU6IFNFVCBMT0NVUywgUFdELCBDRFVQLCBCQUNLLCBSRU1PVEUgQ0QgKFJDRCksIFNFVCBDRCwg U0VUIFBST01QVC4iLAorI2Vsc2UKKyIgIEFsc28gc2VlOiBQV0QsIENEVVAsIEJBQ0ssIFJFTU9U RSBDRCAoUkNEKSwgU0VUIENELCBTRVQgUFJPTVBULiIsCisjZW5kaWYgLyogTE9DVVMgKi8KKyNp Zm5kZWYgTk9TUEwKKyIgIEFuZCBzZWU6IEhFTFAgS0NELiIsCisjZW5kaWYgLyogTk9TUEwgKi8K KyIgIFJlbGV2YW50IGVudmlyb25tZW50IHZhcmlhYmxlczogQ0RQQVRILCBIT01FLiIsCisiIn07 CisKK3N0YXRpYyBjaGFyICpobXh4ZGVsW10gPSB7CisiU3ludGF4OiBERUxFVEUgWyBzd2l0Y2hl cy4uLiBdIGZpbGVzcGVjIiwKKyNpZmRlZiBMT0NVUworIiAgSWYgTE9DVVMgaXMgUkVNT1RFIG9y IExPQ1VTIGlzIEFVVE8gYW5kIHlvdSBoYXZlIGFuIEZUUCBjb25uZWN0aW9uLCIsCisiICB0aGlz IGNvbW1hbmQgaXMgZXF1aXZhbGVudCB0byBSRU1PVEUgREVMRVRFIChSREVMRVRFKS4gIE90aGVy d2lzZToiLAorIiAiLAorI2VuZGlmIC8qIExPQ1VTICovCisiICBEZWxldGVzIGEgZmlsZSBvciBm aWxlcyBvbiB0aGUgY29tcHV0ZXIgd2hlcmUgQy1LZXJtaXQgaXMgcnVubmluZy4iLAorIiAgVGhl IGZpbGVzcGVjIG1heSBkZW5vdGUgYSBzaW5nbGUgZmlsZSBvciBjYW4gaW5jbHVkZSB3aWxkY2Fy ZCBjaGFyYWN0ZXJzIiwKKyIgIHRvIG1hdGNoIG11bHRpcGxlIGZpbGVzLiAgUk0gaXMgYSBzeW5v bnltIGZvciBERUxFVEUuICBTd2l0Y2hlcyBpbmNsdWRlOiIsCisiICIsCisiL0FGVEVSOmRhdGUt dGltZSIsCisjaWZkZWYgVk1TCisiICBTcGVjaWZpZXMgdGhhdCBvbmx5IHRob3NlIGZpbGVzIGNy ZWF0ZWQgYWZ0ZXIgdGhlIGdpdmVuIGRhdGUtdGltZSBhcmUiLAorI2Vsc2UKKyIgIFNwZWNpZmll cyB0aGF0IG9ubHkgdGhvc2UgZmlsZXMgbW9kaWZpZWQgYWZ0ZXIgdGhlIGdpdmVuIGRhdGUtdGlt ZSBhcmUiLAorI2VuZGlmIC8qIFZNUyAqLworIiAgdG8gYmUgZGVsZXRlZC4gIEhFTFAgREFURSBm b3IgaW5mbyBhYm91dCBkYXRlLXRpbWUgZm9ybWF0cy4iLAorIiAiLAorIi9CRUZPUkU6ZGF0ZS10 aW1lIiwKKyNpZmRlZiBWTVMKKyIgIFNwZWNpZmllcyB0aGF0IG9ubHkgdGhvc2UgZmlsZXMgbW9k aWZpZWQgYmVmb3JlIHRoZSBnaXZlbiBkYXRlLXRpbWUiLAorI2Vsc2UKKyIgIFNwZWNpZmllcyB0 aGF0IG9ubHkgdGhvc2UgZmlsZXMgbW9kaWZpZWQgYmVmb3JlIHRoZSBnaXZlbiBkYXRlLXRpbWUi LAorI2VuZGlmIC8qIFZNUyAqLworIiAgYXJlIHRvIGJlIGRlbGV0ZWQuIiwKKyIgIiwKKyIvTk9U LUFGVEVSOmRhdGUtdGltZSIsCisjaWZkZWYgVk1TCisiICBTcGVjaWZpZXMgdGhhdCBvbmx5IHRo b3NlIGZpbGVzIG1vZGlmaWVkIGF0IG9yIGJlZm9yZSB0aGUgZ2l2ZW4gZGF0ZS10aW1lIiwKKyNl bHNlCisiICBTcGVjaWZpZXMgdGhhdCBvbmx5IHRob3NlIGZpbGVzIG1vZGlmaWVkIGF0IG9yIGJl Zm9yZSB0aGUgZ2l2ZW4gZGF0ZS10aW1lIiwKKyNlbmRpZiAvKiBWTVMgKi8KKyIgIGFyZSB0byBi ZSBkZWxldGVkLiIsCisiICIsCisiL05PVC1CRUZPUkU6ZGF0ZS10aW1lIiwKKyNpZmRlZiBWTVMK KyIgIFNwZWNpZmllcyB0aGF0IG9ubHkgdGhvc2UgZmlsZXMgbW9kaWZpZWQgYXQgb3IgYWZ0ZXIg dGhlIGdpdmVuIGRhdGUtdGltZSIsCisjZWxzZQorIiAgU3BlY2lmaWVzIHRoYXQgb25seSB0aG9z ZSBmaWxlcyBtb2RpZmllZCBhdCBvciBhZnRlciB0aGUgZ2l2ZW4gZGF0ZS10aW1lIiwKKyNlbmRp ZiAvKiBWTVMgKi8KKyIgIGFyZSB0byBiZSBkZWxldGVkLiIsCisiICIsCisiL0xBUkdFUi1USEFO Om51bWJlciIsCisiICBTcGVjaWZpZXMgdGhhdCBvbmx5IHRob3NlIGZpbGVzIGxvbmdlciB0aGFu IHRoZSBnaXZlbiBudW1iZXIgb2YgYnl0ZXMgYXJlIiwKKyIgIHRvIGJlIGRlbGV0ZWQuIiwKKyIg IiwKKyIvU01BTExFUi1USEFOOm51bWJlciIsCisiICBTcGVjaWZpZXMgdGhhdCBvbmx5IHRob3Nl IGZpbGVzIHNtYWxsZXIgdGhhbiB0aGUgZ2l2ZW4gbnVtYmVyIG9mIGJ5dGVzIGFyZSIsCisiICB0 byBiZSBzZW50LiIsCisiICIsCisiL0VYQ0VQVDpwYXR0ZXJuIiwKKyIgIFNwZWNpZmllcyB0aGF0 IGFueSBmaWxlcyB3aG9zZSBuYW1lcyBtYXRjaCB0aGUgcGF0dGVybiwgd2hpY2ggY2FuIGJlIGEi LAorIiAgcmVndWxhciBmaWxlbmFtZSBvciBtYXkgY29udGFpbiB3aWxkY2FyZHMsIGFyZSBub3Qg dG8gYmUgZGVsZXRlZC4gIFRvIiwKKyIgIHNwZWNpZnkgbXVsdGlwbGUgcGF0dGVybnMgKHVwIHRv IDgpLCB1c2Ugb3V0ZXIgYnJhY2VzIGFyb3VuZCB0aGUgZ3JvdXAiLAorIiAgYW5kIGlubmVyIGJy YWNlcyBhcm91bmQgZWFjaCBwYXR0ZXJuOiIsCisiICIsCisiICAgIC9FWENFUFQ6e3twYXR0ZXJu MX17cGF0dGVybjJ9Li4ufSIsCisiICIsCisjaWZkZWYgVU5JWE9ST1NLCisiL0RPVEZJTEVTIiwK KyIgIEluY2x1ZGUgKGRlbGV0ZSkgZmlsZXMgd2hvc2UgbmFtZXMgYmVnaW4gd2l0aCBcIi5cIi4i LAorIiAiLAorIi9OT0RPVEZJTEVTIiwKKyIgIFNraXAgKGRvbid0IGRlbGV0ZSkgZmlsZXMgd2hv c2UgbmFtZXMgYmVnaW4gd2l0aCBcIi5cIi4iLAorIiAiLAorI2VuZGlmIC8qIFVOSVhPUk9TSyAq LworIi9UWVBFOlRFWFQiLAorIiAgRGVsZXRlIG9ubHkgcmVndWxhciB0ZXh0IGZpbGVzIChyZXF1 aXJlcyBGSUxFIFNDQU4gT04pIiwKKyIgIiwKKyIvVFlQRTpCSU5BUlkiLAorIiAgRGVsZXRlIG9u bHkgcmVndWxhciBiaW5hcnkgZmlsZXMgKHJlcXVpcmVzIEZJTEUgU0NBTiBPTikiLAorIiAiLAor Ii9ESVJFQ1RPUklFUyIsCisiICBJbmNsdWRlIGRpcmVjdG9yaWVzLiAgSWYgdGhpcyBzd2l0Y2gg aXMgbm90IGdpdmVuLCBvbmx5IHJlZ3VsYXIgZmlsZXMiLAorIiAgYXJlIGRlbGV0ZWQuICBJZiBp dCBpcyBnaXZlbiwgS2VybWl0IGF0dGVtcHRzIHRvIGRlbGV0ZSBhbnkgZGlyZWN0b3JpZXMiLAor IiAgdGhhdCBtYXRjaCB0aGUgZ2l2ZW4gZmlsZSBzcGVjaWZpY2F0aW9uLCB3aGljaCBzdWNjZWVk cyBvbmx5IGlmIHRoZSIsCisiICBkaXJlY3RvcnkgaXMgZW1wdHkuIiwKKyIgIiwKKyNpZmRlZiBS RUNVUlNJVkUKKyIvUkVDVVJTSVZFIiwKKyIgIFRoZSBERUxFVEUgY29tbWFuZCBhcHBsaWVzIHRv IHRoZSBlbnRpcmUgZGlyZWN0b3J5IHRyZWUgcm9vdGVkIGluIHRoZSIsCisiICBjdXJyZW50IG9y IHNwZWNpZmllZCBkaXJlY3RvcnkuICBXaGVuIHRoZSAvRElSRUNUT1JJRVMgc3dpdGNoIGlzIGFs c28iLAorIiAgZ2l2ZW4sIEtlcm1pdCBkZWxldGVzIGFsbCB0aGUgKG1hdGNoaW5nKSBmaWxlcyBp biBlYWNoIGRpcmVjdG9yeSBiZWZvcmUiLAorIiAgYXR0ZW1wdGluZyB0byBkZWxldGUgdGhlIGRp cmVjdG9yeSBpdHNlbGYuIiwKKyIgIiwKKyNlbmRpZiAvKiBSRUNVUlNJVkUgKi8KKyNpZmRlZiBV TklYCisjaWZkZWYgUkVDVVJTSVZFCisiL0FMTCIsCisiICBUaGlzIGlzIGEgc2hvcnRjdXQgZm9y IC9SRUNVUlNJVkUgL0RJUkVDVE9SSUVTIC9ET1RGSUxFUy4iLAorI2Vsc2UKKyIvQUxMIiwKKyIg IFRoaXMgaXMgYSBzaG9ydGN1dCBmb3IgL0RJUkVDVE9SSUVTIC9ET1RGSUxFUy4iLAorI2VuZGlm IC8qIFJFQ1VSU0lWRSAqLworI2Vsc2UgIC8qICFVTklYICovCisjaWZkZWYgUkVDVVJTSVZFCisi L0FMTCIsCisiICBUaGlzIGlzIGEgc2hvcnRjdXQgZm9yIC9SRUNVUlNJVkUgL0RJUkVDVE9SSUVT LiIsCisjZWxzZQorIi9BTEwiLAorIiAgVGhpcyBpcyBhIHN5bm9ueW0gZm9yIC9ESVJFQ1RPUklF Uy4iLAorI2VuZGlmIC8qIFJFQ1VSU0lWRSAqLworI2VuZGlmIC8qIFVOSVggKi8KKyIgIiwKKyIv TElTVCIsCisiICBMaXN0IGVhY2ggZmlsZSBhbmQgdGVsbCB3aGV0aGVyIGl0IHdhcyBkZWxldGVk LiAgU3lub255bXM6IC9MT0csIC9WRVJCT1NFLiIsCisiICIsCisiL05PTElTVCIsCisiICBEb24n dCBsaXN0IGZpbGVzIHdoaWxlIGRlbGV0aW5nLiAgU3lub255bXM6IC9OT0xPRywgL1FVSUVULiIs CisiICIsCisiL0hFQURJTkciLAorIiAgUHJpbnQgaGVhZGluZyBhbmQgc3VtbWFyeSBpbmZvcm1h dGlvbi4iLAorIiAiLAorIi9OT0hFQURJTkciLAorIiAgRG9uJ3QgcHJpbnQgaGVhZGluZyBhbmQg c3VtbWFyeSBpbmZvcm1hdGlvbi4iLAorIiAiLAorIi9TVU1NQVJZIiwKKyIgIExpa2UgL0hFQURJ TkcgL05PTElTVCwgYnV0IG9ubHkgcHJpbnRzIHRoZSBzdW1tYXJ5IGxpbmUuIiwKKyIgIiwKKyIv UEFHRSIsCisiICBJZiBsaXN0aW5nLCBwYXVzZSBhZnRlciBlYWNoIHNjcmVlbmZ1bC4iLAorIiAi LAorIi9OT1BBR0UiLAorIiAgRG9uJ3QgcGF1c2UgYWZ0ZXIgZWFjaCBzY3JlZW5mdWwuIiwKKyIg IiwKKyIvQVNLIiwKKyIgIEludGVyYWN0aXZlbHkgYXNrIHBlcm1pc3Npb24gdG8gZGVsZXRlIGVh Y2ggZmlsZS4gIFJlcGx5IFllcyBvciBPSyB0byIsCisiICBkZWxldGUgaXQsIE5vIG5vdCB0byBk ZWxldGUgaXQsIFF1aXQgdG8gY2FuY2VsIHRoZSBERUxFVEUgY29tbWFuZCwgYW5kIiwKKyIgIEdv IHRvIGdvIGFoZWFkIGFuZCBkZWxldGUgYWxsIHRoZSByZXN0IG9mIHRoZSBmaWxlcyB3aXRob3V0 IGFza2luZy4iLAorIiAiLAorIi9OT0FTSyIsCisiICBEZWxldGUgZmlsZXMgd2l0aG91dCBhc2tp bmcgcGVybWlzc2lvbi4iLAorIiAiLAorIi9TSU1VTEFURSIsCisiICBQcmV2aWV3IGZpbGVzIHNl bGVjdGVkIGZvciBkZWxldGlvbiB3aXRob3V0IGFjdHVhbGx5IGRlbGV0aW5nIHRoZW0uIiwKKyIg IEltcGxpZXMgL0xJU1QuIiwKKyIgIiwKKyJVc2UgU0VUIE9QVElPTlMgREVMRVRFIHRvIG1ha2Ug c2VsZWN0ZWQgc3dpdGNoZXMgZWZmZWN0aXZlIGZvciBldmVyeSBERUxFVEUiLAorImNvbW1hbmQg XAordW5sZXNzIHlvdSBvdmVycmlkZSB0aGVtOyB1c2UgU0hPVyBPUFRJT05TIHRvIHNlZSBzZWxl Y3Rpb25zIGN1cnJlbnRseSIsCisjaWZkZWYgTE9DVVMKKyJpbiBlZmZlY3QuICBBbHNvIHNlZSBI RUxQIFNFVCBMT0NVUywgSEVMUCBQVVJHRSwgSEVMUCBXSUxEQ0FSRC4iLAorI2Vsc2UKKyJpbiBl ZmZlY3QuICBBbHNvIHNlZSBIRUxQIFBVUkdFLCBIRUxQIFdJTERDQVJELiIsCisjZW5kaWYgLyog TE9DVVMgKi8KKyIifTsKKworI2lmbmRlZiBOT0hUVFAKK3N0YXRpYyBjaGFyICpobXh4aHR0cFtd ID0geworIlN5bnRheDoiLAorI2lmZGVmIENLX1NTTAorIkhUVFAgWyA8c3dpdGNoZXM+IF0gT1BF TiBbeyAvU1NMLCAvVExTIH1dIDxob3N0bmFtZT4gPHNlcnZpY2UvcG9ydD4iLAorI2Vsc2UKKyJI VFRQIFsgPHN3aXRjaGVzPiBdIE9QRU4gPGhvc3RuYW1lPiA8c2VydmljZS9wb3J0PiIsCisjZW5k aWYgLypDS19TU0wgKi8KKyIgIEluc3RydWN0cyBLZXJtaXQgdG8gb3BlbiBhIG5ldyBjb25uZWN0 aW9uIGZvciBIVFRQIGNvbW11bmljYXRpb24gd2l0aCIsCisiICB0aGUgc3BlY2lmaWVkIGhvc3Qg b24gdGhlIHNwZWNpZmllZCBwb3J0LiAgVGhlIGRlZmF1bHQgcG9ydCBpcyBcImh0dHBcIi4iLAor I2lmZGVmIENLX1NTTAorIiAgSWYgL1NTTCBvciAvVExTIGFyZSBzcGVjaWZpZWQgb3IgaWYgdGhl IHNlcnZpY2UgaXMgXCJodHRwc1wiIG9yIHBvcnQgNDQzLCIsCisiICBhIHNlY3VyZSBjb25uZWN0 aW9uIHdpbGwgYmUgZXN0YWJsaXNoZWQgdXNpbmcgdGhlIGN1cnJlbnQgYXV0aGVudGljYXRpb24i LAorIiAgc2V0dGluZ3MuICBTZWUgSEVMUCBTRVQgQVVUSCBmb3IgZGV0YWlscy4iLAorI2VuZGlm IC8qIENLX1NTTCAqLworIiAgSWYgPHN3aXRjaGVzPiBhcmUgc3BlY2lmaWVkLCB0aGV5IGFyZSBh cHBsaWVkIHRvIGFsbCBzdWJzZXF1ZW50IEhUVFAiLAorIiAgYWN0aW9ucyAoR0VULCBQVVQsIC4u LikgdW50aWwgYW4gSFRUUCBDTE9TRSBjb21tYW5kIGlzIGV4ZWN1dGVkLiIsCisiICBBIFVSTCBj YW4gYmUgaW5jbHVkZWQgaW4gcGxhY2Ugb2YgdGhlIGhvc3RuYW1lIGFuZCBzZXJ2aWNlIG9yIHBv cnQuIiwKKyIgIiwKKyJIVFRQIENMT1NFIiwKKyIgIEluc3RydWN0cyBLZXJtaXQgdG8gY2xvc2Ug YW55IG9wZW4gSFRUUCBjb25uZWN0aW9uIGFuZCBjbGVhciBhbnkgc2F2ZWQiLAorIiAgc3dpdGNo IHZhbHVlcy4iLAorIiAiLAorIkhUVFAgWyA8c3dpdGNoZXM+IF0gQ09OTkVDVCA8aG9zdD5bOjxw b3J0Pl0iLAorIiAgSW5zdHJ1Y3RzIHRoZSBzZXJ2ZXIgdG8gZXN0YWJsaXNoIGEgY29ubmVjdGlv biB3aXRoIHRoZSBzcGVjaWZpZWQgaG9zdCIsCisiICBhbmQgdG8gcmVkaXJlY3QgYWxsIGRhdGEg dHJhbnNtaXR0ZWQgYmV0d2VlbiBLZXJtaXQgYW5kIHRoZSBob3N0IGZvciB0aGUiLAorIiAgbGlm ZSBvZiB0aGUgY29ubmVjdGlvbi4iLAorIiAiLAorIkhUVFAgWyA8c3dpdGNoZXM+IF0gR0VUIDxy ZW1vdGUtZmlsZW5hbWU+IFsgPGxvY2FsLWZpbGVuYW1lPiBdIiwKKyIgIFJldHJpZXZlcyB0aGUg bmFtZWQgZmlsZSBvbiB0aGUgY3VycmVudGx5IG9wZW4gSFRUUCBjb25uZWN0aW9uLiAgVGhlIiwK KyIgIGRlZmF1bHQgbG9jYWwgZmlsZW5hbWUgaXMgdGhlIHNhbWUgYXMgdGhlIHJlbW90ZSBmaWxl bmFtZSwgYnV0IHdpdGggYW55IiwKKyIgIHBhdGggc3RyaXBwZWQuICBJZiB5b3Ugd2FudCB0aGUg ZmlsZSB0byBiZSBkaXNwbGF5ZWQgb24gdGhlIHNjcmVlbiBpbnN0ZWFkIiwKKyIgIG9mIHN0b3Jl ZCBvbiBkaXNrLCBpbmNsdWRlIHRoZSAvVE9TQ1JFRU4gc3dpdGNoIGFuZCBvbWl0IHRoZSBsb2Nh bCIsCisiICBmaWxlbmFtZS4gIElmIHlvdSBnaXZlIGEgVVJMIGluc3RlYWQgb2YgYSByZW1vdGUg ZmlsZW5hbWUsIHRoaXMgY29tbWFuZHMiLAorIiAgb3BlbnMgdGhlIGNvbm5lY3Rpb24sIEdFVHMg dGhlIGZpbGUsIGFuZCBjbG9zZXMgdGhlIGNvbm5lY3Rpb247IHRoZSBzYW1lIiwKKyIgIGlzIHRy dWUgZm9yIHRoZSByZW1haW5pbmcgSFRUUCBjb21tYW5kcyBmb3Igd2hpY2ggeW91IGNhbiBzcGVj aWZ5IGEiLAorIiAgcmVtb3RlIGZpbGVuYW1lLCBkaXJlY3RvcnkgbmFtZSwgb3IgcGF0aC4iLAor IiAiLAorIkhUVFAgWyA8c3dpdGNoZXM+IF0gSEVBRCA8cmVtb3RlLWZpbGVuYW1lPiBbIDxsb2Nh bC1maWxlbmFtZT4gXSIsCisiICBMaWtlIEdFVCBleGNlcHQgd2l0aG91dCBhY3R1YWxseSBnZXR0 aW5nIHRoZSBmaWxlOyBpbnN0ZWFkIGl0IGdldHMgb25seSIsCisiICB0aGUgaGVhZGVycywgc3Rv cmluZyB0aGVtIGludG8gdGhlIGdpdmVuIGZpbGUgKGlmIGEgbG9jYWwgZmlsZW5hbWUgaXMiLAor IiAgc3BlY2lmaWVkKSwgb25lIGxpbmUgcGVyIGhlYWRlciBpdGVtIGFzIHNob3duIGluIHRoZSAv QVJSQVk6IHN3aXRjaCIsCisiICBkZXNjcmlwdGlvbi4iLAorIiAiLAorIkhUVFAgWyA8c3dpdGNo ZXM+IF0gSU5ERVggPHJlbW90ZS1kaXJlY3Rvcnk+IFsgPGxvY2FsLWZpbGVuYW1lPiBdIiwKKyIg IFJldHJpZXZlcyB0aGUgZmlsZSBsaXN0aW5nIGZvciB0aGUgZ2l2ZW4gc2VydmVyIGRpcmVjdG9y eS4iLAorIiAgTk9URTogVGhpcyBjb21tYW5kIGlzIG5vdCBzdXBwb3J0ZWQgYnkgbW9zdCBXZWIg c2VydmVycywgYW5kIGV2ZW4gd2hlbiIsCisiICB0aGUgc2VydmVyIHVuZGVyc3RhbmQgaXQsIHRo ZXJlIGlzIG5vIHN0YXJkYXJkIHJlc3BvbnNlIGZvcm1hdC4iLAorIiAiLAorIkhUVFAgWyA8c3dp dGNoZXM+IF0gUE9TVCBbIC9NSU1FLVRZUEU6PHR5cGU+IF0gPGxvY2FsLWZpbGU+IDxyZW1vdGUt cGF0aD4iLAorIiAgICAgWyA8ZGVzdC1maWxlPiBdIiwKKyIgIFVzZWQgdG8gc2VuZCBhIHJlc3Bv bnNlIGFzIGlmIGl0IHdlcmUgc2VudCBmcm9tIGEgZm9ybS4gIFRoZSBkYXRhIHRvIGJlIiwKKyIg IHBvc3RlZCBtdXN0IGJlIHJlYWQgZnJvbSBhIGZpbGUuIiwKKyIgIiwKKyJIVFRQIFsgPHN3aXRj aGVzPiBdIFBVVCBbIC9NSU1FLVRZUEU6PHR5cGU+IF0gPGxvY2FsLWZpbGU+IDxyZW1vdGUtZmls ZT4iLAorIiAgICAgWyA8ZGVzdC1maWxlPiBdIiwKKyIgIFVwbG9hZHMgdGhlIGdpdmVuIGxvY2Fs IGZpbGUgdG8gc2VydmVyIGZpbGUuICBJZiB0aGUgcmVtb3RlIGZpbGVuYW1lIGlzIiwKKyIgIG9t aXR0ZWQsIHRoZSBsb2NhbCBuYW1lIGlzIHVzZWQsIGJ1dCB3aXRoIGFueSBwYXRoIHN0cmlwcGVk LiIsCisiICIsCisiSFRUUCBbIDxzd2l0Y2hlcz4gXSBERUxFVEUgPHJlbW90ZS1maWxlbmFtZT4i LAorIiAgSW5zdHJ1Y3RzIHRoZSBzZXJ2ZXIgdG8gZGVsZXRlIHRoZSBzcGVjaWZpZWQgZmlsZW5h bWUuIiwKKyIgIiwKKyJ3aGVyZSA8c3dpdGNoZXM+IGFyZToiLAorIi9BR0VOVDo8dXNlci1hZ2Vu dD4iLAorIiAgSWRlbnRpZmllcyB0aGUgY2xpZW50IHRvIHRoZSBzZXJ2ZXI7IFwiQy1LZXJtaXRc IiBvciBcIktlcm1pdC05NVwiIiwKKyIgIGJ5IGRlZmF1bHQuIiwKKyIgIiwKKyIvSEVBREVSOjxo ZWFkZXItbGluZT4iLAorIiAgVXNlZCBmb3Igc3BlY2lmeWluZyBhbnkgb3B0aW9uYWwgaGVhZGVy cy4gIEEgbGlzdCBvZiBoZWFkZXJzIGlzIHByb3ZpZGVkIiwKKyIgIHVzaW5nIGJyYWNlcyBmb3Ig Z3JvdXBpbmc6IiwKKyIgIiwKKyIgICAgL0hFQURFUjp7ezx0YWc+Ojx2YWx1ZT59ezx0YWc+Ojx2 YWx1ZT59Li4ufSIsCisiICIsCisiICBGb3IgYSBsaXN0aW5nIG9mIHZhbGlkIDx0YWc+IHZhbHVl IGFuZCA8dmFsdWU+IGZvcm1hdHMgc2VlIFJGQyAxOTQ1OiIsCisiICBcIkh5cGVydGV4dCBUcmFu c2ZlciBQcm90b2NvbCAtLSBIVFRQLzEuMFwiLiAgQSBtYXhpbXVtIG9mIGVpZ2h0IGhlYWRlcnMi LAorIiAgbWF5IGJlIHNwZWNpZmllZC4iLAorIiAiLAorIi9UT1NDUkVFTiIsCisiICBEaXNwbGF5 IHNlcnZlciByZXNwb25zZXMgb24gdGhlIHNjcmVlbi4iLAorIiAiLAorIi9VU0VSOjxuYW1lPiIs CisiICBJbiBjYXNlIGEgcGFnZSByZXF1aXJlcyBhIHVzZXJuYW1lIGZvciBhY2Nlc3MuIiwKKyIg IiwKKyIvUEFTU1dPUkQ6PHBhc3N3b3JkPiIsCisiICBJbiBjYXNlIGEgcGFnZSByZXF1aXJlcyBh IHBhc3N3b3JkIGZvciBhY2Nlc3MuIiwKKyIgIiwKKyIvQVJSQVk6PGFycmF5bmFtZT4iLAorIiAg VGVsbHMgS2VybWl0IHRvIHN0b3JlIHRoZSByZXNwb25zZSBoZWFkZXJzIGluIHRoZSBnaXZlbiBh cnJheSwgb25lIGxpbmUiLAorIiAgcGVyIGVsZW1lbnQuICBUaGUgYXJyYXkgbmVlZCBub3QgYmUg ZGVjbGFyZWQgaW4gYWR2YW5jZS4gIEV4YW1wbGU6IiwKKyIgIiwKKyIgICAgaHR0cCAvYXJyYXk6 YyBnZXQga2VybWl0L2luZGV4Lmh0bWwiLAorIiAgICBzaG93IGFycmF5IGMiLAorIiAgICBEaW1l bnNpb24gPSA5IiwKKyIgICAgMS4gRGF0ZTogRnJpLCAyNiBOb3YgMTk5OSAyMzoxMjoyMiBHTVQi LAorIiAgICAyLiBTZXJ2ZXI6IEFwYWNoZS8xLjMuNCAoVW5peCkiLAorIiAgICAzLiBMYXN0LU1v ZGlmaWVkOiBNb24sIDA2IFNlcCAxOTk5IDIyOjM1OjU4IEdNVCIsCisiICAgIDQuIEVUYWc6IFwi YmMwNDktZjcyLTM3ZDQ0MWNlXCIiLAorIiAgICA1LiBBY2NlcHQtUmFuZ2VzOiBieXRlcyIsCisi ICAgIDYuIENvbnRlbnQtTGVuZ3RoOiAzOTU0IiwKKyIgICAgNy4gQ29ubmVjdGlvbjogY2xvc2Ug ICAgICIsCisiICAgIDguIENvbnRlbnQtVHlwZTogdGV4dC9odG1sIiwKKyIgIiwKKyJBcyB5b3Ug Y2FuIHNlZSwgdGhlIGhlYWRlciBsaW5lcyBhcmUgbGlrZSBNSU1FIGUtbWFpbCBoZWFkZXIgbGlu ZXM6IiwKKyJpZGVudGlmaWVyLCBjb2xvbiwgdmFsdWUuICBUaGUgL0FSUkFZIHN3aXRjaCBpcyB0 aGUgb25seSBtZXRob2QgYXZhaWxhYmxlIiwKKyJ0byBhIHNjcmlwdCB0byBwcm9jZXNzIHRoZSBz ZXJ2ZXIgcmVzcG9uc2VzIGZvciBhIFBPU1Qgb3IgUFVUIGNvbW1hbmQuIiwKKyIgIiwKKyIiCit9 OworI2VuZGlmIC8qIE5PSFRUUCAqLworCisjaWZkZWYgQ0tfS0VSQkVST1MKK3N0YXRpYyBjaGFy ICpobXh4YXV0aFtdID0geworIlN5bnRheDoiLAorIkFVVEhFTlRJQ0FURSB7IEtFUkJFUk9TNCwg S0VSQkVST1M1IFsgc3dpdGNoZXMgXSB9IDxhY3Rpb24+IFsgc3dpdGNoZXMgXSIsCisiICBPYnRh aW5zIG9yIGRlc3Ryb3lzIEtlcmJlcm9zIHRpY2tldHMgYW5kIGxpc3RzIGluZm9ybWF0aW9uIGFi b3V0IHRoZW0uIiwKKyIgIEFjdGlvbnMgYXJlIElOSVRJQUxJWkUsIERFU1RST1ksIGFuZCBMSVNU LUNSRURFTlRJQUxTLiAgS0VSQkVST1M0IGNhbiBiZSIsCisiICBhYmJyZXZpYXRlZCBLNCBvciBL UkI0OyBLRVJCRVJPUzUgY2FuIGJlIGFiYnJldmlhdGVkIEs1IG9yIEtSQjUuICBVc2UgPyB0byIs CisiICBzZWUgd2hpY2gga2V5d29yZHMsIHN3aXRjaGVzLCBvciBvdGhlciBxdWFudGl0aWVzIGFy ZSB2YWxpZCBhdCBlYWNoIHBvaW50IiwKKyIgIGluIHRoZSBjb21tYW5kLiIsCisiICIsCisiICBU aGUgYWN0aW9ucyBhcmUgSU5JVElBTElaRSwgREVTVFJPWSwgYW5kIExJU1QtQ1JFREVOVElBTFM6 IiwKKyIgIiwKKyIgICAgQVVUSCB7IEs0LCBLNSB9IHsgSU5JVElBTElaRSBbc3dpdGNoZXNdLCBE RVNUUk9ZLCIsCisiICAgICAgTElTVC1DUkVERU5USUFMUyBbc3dpdGNoZXNdIH0iLAorIiAiLAor IiAgVGhlIElOSVRJQUxJWkUgYWN0aW9uIGlzIHRoZSBtb3N0IGNvbXBsZXgsIGFuZCBpdHMgZm9y bWF0IGlzIGRpZmZlcmVudCIsCisiICBmb3IgS2VyYmVyb3MgNCBhbmQgS2VyYmVyb3MgNS4gIFRo ZSBmb3JtYXQgZm9yIEtlcmJlcm9zIDQgaXM6IiwKKyIgIiwKKyIgIEFVVEggSzQgSU5JVElBTEla RSBbIC9JTlNUQU5DRTo8bmFtZT4gL0xJRkVUSU1FOjxtaW51dGVzPiAtIiwKKyIgICAgL1BBU1NX T1JEOjxwYXNzd29yZD4gL1BSRUFVVEggL1JFQUxNOjxuYW1lPiA8cHJpbmNpcGFsPiBdIiwKKyIg IiwKKyIgIEFsbCBzd2l0Y2hlcyBhcmUgb3B0aW9uYWwuICBLZXJiZXJvcyA0IElOSVRJQUxJWkUg c3dpdGNoZXMgYXJlOiIsCisiICIsCisiICAvSU5TVEFOQ0U6PG5hbWU+IiwKKyIgICAgQWxsb3dz IGFuIEluc3RhbmNlIChzdWNoIGFzIGEgaG9zdG5hbWUpIHRvIGJlIHNwZWNpZmllZC4iLAorIiAi LAorIiAgL0xJRkVUSU1FOjxudW1iZXI+IiwKKyIgICAgU3BlY2lmaWVzIHRoZSByZXF1ZXN0ZWQg bGlmZXRpbWUgaW4gbWludXRlcyBmb3IgdGhlIHRpY2tldC4gIElmIG5vIiwKKyIgICAgbGlmZXRp bWUgaXMgc3BlY2lmaWVkLCA2MDAgbWludXRlcyBpcyB1c2VkLiAgSWYgdGhlIGxpZmV0aW1lIGlz IGdyZWF0ZXIiLAorIiAgICB0aGFuIHRoZSBtYXhpbXVtIHN1cHBvcnRlZCBieSB0aGUgdGlja2V0 IGdyYW50aW5nIHNlcnZpY2UsIHRoZSByZXN1bHRpbmciLAorIiAgICBsaWZldGltZSBpcyBzaG9y dGVuZWQgYWNjb3JkaW5nbHkuIiwKKyIgIiwKKyIgIC9OT1QtUFJFQVVUSCIsCisiICAgIEluc3Ry dWN0cyBLZXJtaXQgdG8gc2VuZCBhIHRpY2tldCBnZXR0aW5nIHRpY2tldCAoVEdUKSByZXF1ZXN0 IHRvIHRoZSIsCisiICAgIEtEQyB3aXRob3V0IGFueSBwcmVhdXRoZW50aWNhdGlvbiBkYXRhLiIs CisiICIsCisiICAvUEFTU1dPUkQ6PHN0cmluZz4iLAorIiAgICBBbGxvd3MgYSBwYXNzd29yZCB0 byBiZSBpbmNsdWRlZCBvbiB0aGUgY29tbWFuZCBsaW5lIG9yIGluIGEgc2NyaXB0IiwKKyIgICAg ZmlsZS4gIElmIG5vIC9QQVNTV09SRCBzd2l0Y2ggaXMgaW5jbHVkZWQsIHlvdSBhcmUgcHJvbXB0 ZWQgb24gYSBzZXBhcmF0ZSIKKywKKyIgICAgbGluZS4gIFRoZSBwYXNzd29yZCBzd2l0Y2ggaXMg cHJvdmlkZWQgb24gYSB1c2UtYXQteW91ci1vd24tcmlzayBiYXNpcyIsCisiICAgIGZvciB1c2Ug aW4gYXV0b21hdGVkIHNjcmlwdHMuICBXQVJOSU5HOiBQYXNzd29yZHMgc2hvdWxkIG5vdCBiZSBz dG9yZWQgaW4iCissCisiICAgIGZpbGVzLiIsCisiICIsCisiICAvUFJFQVVUSCIsCisiICAgIElu c3RydWN0cyBLZXJtaXQgdG8gc2VuZCBhIHByZWF1dGhlbnRpY2F0ZWQgVGlja2V0LUdldHRpbmcg VGlja2V0IChUR1QpIiwKKyIgICAgcmVxdWVzdCB0byB0aGUgS0RDIGluc3RlYWQgb2YgYSBwbGFp bnRleHQgcmVxdWVzdC4gIFRoZSBkZWZhdWx0IHdoZW4iLAorIiAgICBzdXBwb3J0ZWQgYnkgdGhl IEtlcmJlcm9zIGxpYnJhcmllcy4iLAorIiAiLAorIiAgL1JFQUxNOjxuYW1lPiIsCisiICAgIEFs bG93cyBhIHJlYWxtIHRvIGJlIHNwZWNpZmllZCAob3ZlcnJpZGluZyB0aGUgZGVmYXVsdCByZWFs bSkuIiwKKyIgIiwKKyIgIDxwcmluY2lwYWw+IiwKKyIgICAgWW91ciBpZGVudGl0eSBpbiB0aGUg Z2l2ZW4gb3IgZGVmYXVsdCBLZXJiZXJvcyByZWFsbSwgb2YgdGhlIGZvcm06IiwKKyIgICAgdXNl cmlkWy5pbnN0YW5jZVsuaW5zdGFuY2VdXUBbcmVhbG1dICAiLAorIiAgICBDYW4gYmUgb21pdHRl ZCBpZiBpdCBpcyB0aGUgc2FtZSBhcyB5b3VyIHVzZXJuYW1lIG9yIFNFVCBMT0dJTiBVU0VSSUQi LAorIiAgICB2YWx1ZSBvbiB0aGUgY2xpZW50IHN5c3RlbS4iLAorIiAiLAorIiAgVGhlIGZvcm1h dCBmb3IgS2VyYmVyb3MgNSBpcyBhcyBmb2xsb3dzOiIsCisiICIsCisiICBBVVRIIEs1IFsgL0NB Q0hFOjxmaWxlbmFtZT4gXSB7IElOSVRJQUxJWkUgWyBzd2l0Y2hlcyBdLCBERVNUUk9ZLCIsCisi ICAgIExJU1QtQ1JFREVOVElBTFMgLi4ufSIsCisiICIsCisiVGhlIElOSVRJQUxJWkUgY29tbWFu ZCBmb3IgS2VyYmVyb3MgNSBjYW4gaW5jbHVkZSBhIG51bWJlciBvZiBzd2l0Y2hlczsiLAorImFs bCBhcmUgb3B0aW9uYWw6IiwKKyIgIiwKKyJBVVRIIEs1IFsgL0NBQ0hFOjxmaWxlbmFtZT4gXSBJ TklUSVRJQUxJWkUgWyAvQUREUkVTU0VTOjxhZGRyLWxpc3Q+IiwKKyIgIC9GT1JXQVJEQUJMRSAv S0VSQkVST1M0IC9MSUZFVElNRTo8bWludXRlcz4gL1BBU1NXT1JEOjxwYXNzd29yZD4iLAorIiAg L1BPU1REQVRFOjxkYXRlLXRpbWU+IC9QUk9YSUFCTEUgL1JFQUxNOjxuYW1lPiAvUkVORVcgL1JF TkVXQUJMRTo8bWludXRlcz4iLAorIiAgL1NFUlZJQ0U6PG5hbWU+IC9WQUxJREFURSA8cHJpbmNp cGFsPiBdIiwKKyIgIiwKKyIgIEFsbCBLZXJiZXJvcyA1IElOSVRJQUxJWkUgc3dpdGNoZXMgYXJl IG9wdGlvbmFsOiIsCisiICIsCisiICAvQUREUkVTU0VTOntsaXN0IG9mIGlwLWFkZHJlc3Nlc30i LAorIiAgICBTcGVjaWZpZXMgYSBsaXN0IG9mIElQIGFkZHJlc3NlcyB0aGF0IHNob3VsZCBiZSBw bGFjZWQgaW4gdGhlIFRpY2tldCIsCisiICAgIEdldHRpbmcgVGlja2V0IGluIGFkZGl0aW9uIHRv IHRoZSBsb2NhbCBtYWNoaW5lIGFkZHJlc3Nlcy4iLAorIiAiLAorIiAgL0ZPUldBUkRBQkxFIiwK KyIgICAgUmVxdWVzdHMgZm9yd2FyZGFibGUgdGlja2V0cy4iLAorIiAiLAorIiAgL0lOU1RBTkNF OjxuYW1lPiIsCisiICAgIEFsbG93cyBhbiBJbnN0YW5jZSAoc3VjaCBhcyBhIGhvc3RuYW1lKSB0 byBiZSBzcGVjaWZpZWQuIiwKKyIgIiwKKyIgIC9LRVJCRVJPUzQiLAorIiAgICBJbnN0cnVjdHMg S2VybWl0IHRvIGdldCBLZXJiZXJvcyA0IHRpY2tldHMgaW4gYWRkaXRpb24gdG8gS2VyYmVyb3Mg NSIsCisiICAgIHRpY2tldHMuICBJZiBLZXJiZXJvcyA1IHRpY2tldHMgYXJlIG5vdCBzdXBwb3J0 ZWQgYnkgdGhlIHNlcnZlciwgYSIsCisiICAgIG1pbGQgd2FybmluZyBpcyBwcmludGVkIGFuZCBL ZXJiZXJvcyA0IHRpY2tldHMgYXJlIHJlcXVlc3RlZC4iLAorIiAiLAorIiAgL0xJRkVUSU1FOjxu dW1iZXI+IiwKKyIgICAgU3BlY2lmaWVzIHRoZSByZXF1ZXN0ZWQgbGlmZXRpbWUgaW4gbWludXRl cyBmb3IgdGhlIHRpY2tldC4gIElmIG5vIiwKKyIgICAgbGlmZXRpbWUgaXMgc3BlY2lmaWVkLCA2 MDAgbWludXRlcyBpcyB1c2VkLiAgSWYgdGhlIGxpZmV0aW1lIGlzIGdyZWF0ZXIiLAorIiAgICB0 aGFuIHRoZSBtYXhpbXVtIHN1cHBvcnRlZCBieSB0aGUgdGlja2V0IGdyYW50aW5nIHNlcnZpY2Us IHRoZSByZXN1bHRpbmciLAorIiAgICBsaWZldGltZSBpcyBzaG9ydGVuZWQuIiwKKyIgIiwKKyIg IC9OTy1LRVJCRVJPUzQiLAorIiAgICBJbnN0cnVjdHMgS2VybWl0IHRvIG5vdCBhdHRlbXB0IHRv IHJldHJpZXZlIEtlcmJlcm9zIDQgY3JlZGVudGlhbHMuIiwKKyIgIiwKKyIgIC9OT1QtRk9SV0FS REFCTEUiLAorIiAgICBSZXF1ZXN0cyBub24tZm9yd2FyZGFibGUgdGlja2V0cy4iLAorIiAiLAor IiAgL05PVC1QUk9YSUFCTEUiLAorIiAgICBSZXF1ZXN0cyBub24tcHJveGlhYmxlIHRpY2tldHMu IiwKKyIgIiwKKyIgIC9QQVNTV09SRDo8c3RyaW5nPiIsCisiICAgIEFsbG93cyBhIHBhc3N3b3Jk IHRvIGJlIGluY2x1ZGVkIG9uIHRoZSBjb21tYW5kIGxpbmUgb3IgaW4gYSBzY3JpcHQiLAorIiAg ICBmaWxlLiAgSWYgbm8gL1BBU1NXT1JEIHN3aXRjaCBpcyBpbmNsdWRlZCwgeW91IGFyZSBwcm9t cHRlZCBvbiBhIHNlcGFyYXRlIgorLAorIiAgICBsaW5lLiAgVGhlIHBhc3N3b3JkIHN3aXRjaCBp cyBwcm92aWRlZCBvbiBhIHVzZS1hdC15b3VyLW93bi1yaXNrIGJhc2lzIiwKKyIgICAgZm9yIHVz ZSBpbiBhdXRvbWF0ZWQgc2NyaXB0cy4gIFdBUk5JTkc6IFBhc3N3b3JkcyBzaG91bGQgbm90IGJl IHN0b3JlZCBpbiIKKywKKyIgICAgZmlsZXMuIiwKKyIgIiwKKyIgIC9QT1NUREFURTo8ZGF0ZS10 aW1lPiIsCisiICAgIFJlcXVlc3RzIGEgcG9zdGRhdGVkIHRpY2tldCwgdmFsaWQgc3RhcnRpbmcg YXQgPGRhdGUtdGltZT4uICBQb3N0ZGF0ZWQiLAorIiAgICB0aWNrZXRzIGFyZSBpc3N1ZWQgd2l0 aCB0aGUgaW52YWxpZCBmbGFnIHNldCwgYW5kIG5lZWQgdG8gYmUgZmVkIGJhY2sgdG8iLAorIiAg ICB0aGUgS0RDIGJlZm9yZSB1c2Ugd2l0aCB0aGUgL1ZBTElEQVRFIHN3aXRjaC4gIFR5cGUgSEVM UCBEQVRFIGZvciBpbmZvIiwKKyIgICAgb24gZGF0ZS10aW1lIGZvcm1hdHMuIiwKKyIgIiwKKyIg IC9QUk9YSUFCTEUiLAorIiAgICBSZXF1ZXN0cyBwcm94aWFibGUgdGlja2V0cy4iLAorIiAiLAor IiAgL1JFQUxNOjxzdHJpbmc+IiwKKyIgICAgQWxsb3dzIGFuIGFsdGVybmF0aXZlIHJlYWxtIHRv IGJlIHNwZWNpZmllZC4iLAorIiAiLAorIiAgL1JFTkVXIiwKKyIgICAgUmVxdWVzdHMgcmVuZXdh bCBvZiBhIHJlbmV3YWJsZSBUaWNrZXQtR3JhbnRpbmcgVGlja2V0LiAgTm90ZSB0aGF0ICIsCisi ICAgIGFuIGV4cGlyZWQgdGlja2V0IGNhbm5vdCBiZSByZW5ld2VkIGV2ZW4gaWYgaXQgaXMgd2l0 aGluIGl0cyByZW5ld2FibGUgIiwKKyIgICAgbGlmZXRpbWUuIiwKKyIgIiwKKyIgIC9SRU5FV0FC TEU6PG51bWJlcj4iLAorIiAgICBSZXF1ZXN0cyByZW5ld2FibGUgdGlja2V0cywgd2l0aCBhIHRv dGFsIGxpZmV0aW1lIG9mIDxudW1iZXI+IG1pbnV0ZXMuIiwKKyIgIiwKKyIgIC9TRVJWSUNFOjxz dHJpbmc+IiwKKyIgICAgQWxsb3dzIGEgc2VydmljZSBvdGhlciB0aGFuIHRoZSB0aWNrZXQgZ3Jh bnRpbmcgc2VydmljZSB0byBiZSBzcGVjaWZpZWQuIiwKKyIgIiwKKyIgIC9WQUxJREFURSIsCisi ICAgIFJlcXVlc3RzIHRoYXQgdGhlIFRpY2tldCBHcmFudGluZyBUaWNrZXQgaW4gdGhlIGNhY2hl ICh3aXRoIHRoZSBpbnZhbGlkIiwKKyIgICAgZmxhZyBzZXQpIGJlIHBhc3NlZCB0byB0aGUgS0RD IGZvciB2YWxpZGF0aW9uLiAgSWYgdGhlIHRpY2tldCBpcyB3aXRoaW4iLAorIiAgICBpdHMgcmVx dWVzdGVkIHRpbWUgcmFuZ2UsIHRoZSBjYWNoZSBpcyByZXBsYWNlZCB3aXRoIHRoZSB2YWxpZGF0 ZWQiLAorIiAgICB0aWNrZXQuIiwKKyIgIiwKKyIgIDxwcmluY2lwYWw+IiwKKyIgICAgWW91ciBp ZGVudGl0eSBpbiB0aGUgZ2l2ZW4gb3IgZGVmYXVsdCBLZXJiZXJvcyByZWFsbSwgb2YgdGhlIGZv cm06IiwKKyIgICAgdXNlcmlkWy9pbnN0YW5jZV1bQHJlYWxtXSAgIiwKKyIgICAgQ2FuIGJlIG9t aXR0ZWQgaWYgaXQgaXMgdGhlIHNhbWUgYXMgeW91ciB1c2VybmFtZSBvciBTRVQgTE9HSU4gVVNF UklEIiwKKyIgICAgdmFsdWUgb24gdGhlIGNsaWVudCBzeXN0ZW0uIiwKKyIgIiwKKyIgIE5vdGU6 IEtlcmJlcm9zIDUgYWx3YXlzIGF0dGVtcHRzIHRvIHJldHJpZXZlIGEgVGlja2V0LUdldHRpbmcg VGlja2V0IChUR1QpIiwKKyIgIHVzaW5nIHRoZSBwcmVhdXRoZW50aWNhdGVkIFRHVCByZXF1ZXN0 LiIsCisiICIsCisiICBBVVRIT1JJWkUgSzUgTElTVC1DUkVERU5USUFMUyBbIC9BRERSRVNTRVMg L0ZMQUdTIC9FTkNSWVBUSU9OIF0iLAorIiAiLAorIiAgU2hvd3Mgc3RhcnQgdGltZSwgZXhwaXJh dGlvbiB0aW1lLCBzZXJ2aWNlIG9yIHByaW5jaXBhbCBuYW1lLCBwbHVzIiwKKyIgIHRoZSBmb2xs b3dpbmcgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBkZXBlbmRpbmcgdGhlIHN3aXRjaGVzOiIsCisi ICIsCisiICAvQUREUkVTU0VTIGRpc3BsYXlzIHRoZSBob3N0bmFtZXMgYW5kL29yIElQIGFkZHJl c3NlcyBlbWJlZGRlZCB3aXRoaW4iLAorIiAgICB0aGUgdGlja2V0cy4iLAorIiAiLAorIiAgL0ZM QUdTIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gKGlmIGFwcGxpY2FibGUpIGZv ciBlYWNoIHRpY2tldDoiLAorIiAgICBGIC0gVGlja2V0IGlzIEZvcndhcmRhYmxlIiwKKyIgICAg ZiAtIFRpY2tldCB3YXMgRm9yd2FyZGVkIiwKKyIgICAgUCAtIFRpY2tldCBpcyBQcm94aWFibGUi LAorIiAgICBwIC0gVGlja2V0IGlzIGEgUHJveHkiLAorIiAgICBEIC0gVGlja2V0IG1heSBiZSBQ b3N0ZGF0ZWQiLAorIiAgICBkIC0gVGlja2V0IGhhcyBiZWVuIFBvc3RkYXRlZCIsCisiICAgIGkg LSBUaWNrZXQgaXMgSW52YWxpZCIsCisiICAgIFIgLSBUaWNrZXQgaXMgUmVuZXdhYmxlIiwKKyIg ICAgSSAtIFRpY2tldCBpcyB0aGUgSW5pdGlhbCBUaWNrZXQiLAorIiAgICBIIC0gVGlja2V0IGhh cyBiZWVuIGF1dGhlbnRpY2F0ZWQgYnkgSGFyZHdhcmUiLAorIiAgICBBIC0gVGlja2V0IGhhcyBi ZWVuIFByZS1hdXRoZW50aWNhdGVkIiwKKyIgIiwKKyIgIC9FTkNSWVBUSU9OIGRpc3BsYXlzIHRo ZSBlbmNyeXB0aW9uIHVzZWQgYnkgZWFjaCB0aWNrZXQgKGlmIGFwcGxpY2FibGUpOiIsCisiICAg IERFUy1DQkMtQ1JDIiwKKyIgICAgREVTLUNCQy1NRDQiLAorIiAgICBERVMtQ0JDLU1ENSIsCisi ICAgIERFUzMtQ0JDLVNIQSIsCisiIgorfTsKKyNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLworCisj aWZuZGVmIE5PQ1NFVFMKK3N0YXRpYyBjaGFyICpobXh4YXNzb2NbXSA9IHsKKyJBU1NPQ0lBVEUg RklMRS1DSEFSQUNURVItU0VUIDxmaWxlLWNoYXJhY3Rlci1zZXQ+IDx0cmFuc2Zlci1jaGFyYWN0 ZXItc2V0PiIsCisiICBUZWxscyBDLUtlcm1pdCB0aGF0IHdoZW5ldmVyIHRoZSBnaXZlbiBmaWxl LWNoYXJhY3RlciBzZXQgaXMgc2VsZWN0ZWQsIGFuZCIsCisiICBTRU5EIENIQVJBQ1RFUi1TRVQg KHEudi4pIGlzIEFVVE9NQVRJQywgdGhlIGdpdmVuIHRyYW5zZmVyIGNoYXJhY3Rlci1zZXQiLAor IiAgaXMgc2VsZWN0ZWQgYXV0b21hdGljYWxseS4iLAorIiAiLAorIkFTU09DSUFURSBYRkVSLUNI QVJBQ1RFUi1TRVQgPHhmZXItY2hhcmFjdGVyLXNldD4gPGZpbGUtY2hhcmFjdGVyLXNldD4iLAor IiAgVGVsbHMgQy1LZXJtaXQgdGhhdCB3aGVuZXZlciB0aGUgZ2l2ZW4gdHJhbnNmZXItY2hhcmFj dGVyIHNldCBpcyBzZWxlY3RlZCwiLAorIiAgZWl0aGVyIGJ5IGNvbW1hbmQgb3IgYnkgYW4gYW5u b3VuY2VyIGF0dGFjaGVkIHRvIGFuIGluY29taW5nIHRleHQgZmlsZSwiLAorIiAgYW5kIFNFTkQg Q0hBUkFDVEVSLVNFVCBpcyBBVVRPTUFUSUMsIHRoZSBzcGVjaWZpZWQgZmlsZSBjaGFyYWN0ZXIt c2V0IGlzIiwKKyIgIHRvIGJlIHNlbGVjdGVkIGF1dG9tYXRpY2FsbHkuICBTeW5vbnltOiBBU1NP Q0lBVEUgVFJBTlNGRVItQ0hBUkFDVEVSLVNFVC4iLAorIiAiLAorIlVzZSBTSE9XIEFTU09DSUFU SU9OUyB0byBsaXN0IHRoZSBjdXJyZW50IGNoYXJhY3Rlci1zZXQgYXNzb2NpYXRpb25zLCBhbmQi LAorIlNIT1cgQ0hBUkFDVEVSLVNFVFMgdG8gbGlzdCB0aGUgY3VycmVudCBzZXR0aW5ncy4iLAor IiIKK307CisjZW5kaWYgLyogTk9DU0VUUyAqLworCitzdGF0aWMgY2hhciAqaG14eHBhdFtdID0g eworIkEgXCJwYXR0ZXJuXCIgaXMgbm90YXRpb24gdXNlZCBpbiBhIHNlYXJjaCBzdHJpbmcgd2hl biBzZWFyY2hpbmcgdGhyb3VnaCIsCisidGV4dC4gIEMtS2VybWl0IHVzZXMgdGhyZWUga2luZHMg b2YgcGF0dGVybnM6IGZsb2F0aW5nIHBhdHRlcm5zLCBhbmNob3JlZCIsCisicGF0dGVybnMsIGFu ZCB3aWxkY2FyZHMuICBXaWxkY2FyZHMgYXJlIGFuY2hvcmVkIHBhdHRlcm5zIHRoYXQgYXJlIHVz ZWQgdG8iLAorIm1hdGNoIGZpbGUgbmFtZXM7IHR5cGUgSEVMUCBXSUxEQ0FSRCB0byBsZWFybiBh Ym91dCB0aGVtLiIsCisiICIsCisiSW4gYSBwYXR0ZXJuLCBjZXJ0YWluIGNoYXJhY3RlcnMgYXJl IHNwZWNpYWw6IiwKKyIgIiwKKyIqIE1hdGNoZXMgYW55IHNlcXVlbmNlIG9mIHplcm8gb3IgbW9y ZSBjaGFyYWN0ZXJzLiAgRm9yIGV4YW1wbGUsIFwiayp0XCIiLAorIiAgbWF0Y2hlcyBhbGwgc3Ry aW5ncyB0aGF0IHN0YXJ0IHdpdGggXCJrXCIgYW5kIGVuZCB3aXRoIFwidFwiIGluY2x1ZGluZyIs CisiICBcImt0XCIsIFwia2l0XCIsIFwia25pZ2h0XCIsIG9yIFwia2VybWl0XCIuIiwKKyIgIiwK KyNpZmRlZiBWTVMKKyIlIE1hdGNoZXMgYW55IHNpbmdsZSBjaGFyYWN0ZXIuICBGb3IgZXhhbXBs ZSwgXCJrJSUlJXRcIiBtYXRjaGVzIGFsbCBzdHJpbmdzIiwKKyNlbHNlCisiPyBNYXRjaGVzIGFu eSBzaW5nbGUgY2hhcmFjdGVyLiAgRm9yIGV4YW1wbGUsIFwiaz8/Pz90XCIgbWF0Y2hlcyBhbGwg c3RyaW5ncyIsCisjZW5kaWYgLyogVk1TICovCisiICB0aGF0IGFyZSBleGFjdGx5IDYgY2hhcmFj dGVycyBsb25nIGFuZCBzdGFydCB3aXRoIFwia1wiIGFuZCBlbmQgd2l0aCIsCisjaWZkZWYgVk1T CisiICB3aXRoIFwidFwiLiIsCisjZWxzZQorIiAgd2l0aCBcInRcIi4gIFdoZW4gdHlwaW5nIGNv bW1hbmRzIGF0IHRoZSBwcm9tcHQsIHlvdSBtdXN0IHByZWNlZGUgYW55IiwKKyIgIHF1ZXN0aW9u IG1hcmsgdG8gYmUgdXNlZCBmb3IgbWF0Y2hpbmcgYnkgYSBiYWNrc2xhc2ggKFxcKSB0byBvdmVy cmlkZSB0aGUiLAorIiAgbm9ybWFsIGZ1bmN0aW9uIG9mIHF1ZXN0aW9uIG1hcmsgaW4gaW50ZXJh Y3RpdmUgY29tbWFuZHMsIHdoaWNoIGlzIHRvIiwKKyIgIHByb3ZpZGUgbWVudXMgYW5kIGZpbGUg bGlzdHMuIiwKKyNlbmRpZiAvKiBWTVMgKi8KKyIgIiwKKyNpZmRlZiBPUzJPUlVOSVgKKyNpZmRl ZiBDS1JFR0VYCisiW2FiY10iLAorIiAgU3F1YXJlIGJyYWNrZXRzIGVuY2xvc2luZyBhIGxpc3Qg b2YgY2hhcmFjdGVycyBtYXRjaGVzIGFueSBjaGFyYWN0ZXIgaW4iLAorIiAgdGhlIGxpc3QuICBF eGFtcGxlOiBoW2FvdV10IG1hdGNoZXMgaGF0LCBob3QsIGFuZCBodXQuIiwKKyIgIiwKKyJbYS16 XSIsCisiICBTcXVhcmUgYnJhY2tldHMgZW5jbG9zaW5nIGEgcmFuZ2Ugb2YgY2hhcmFjdGVycyBt YXRjaGVzIGFueSBjaGFyYWN0ZXIgaW4iLAorIiAgdGhlIHJhbmdlOyBhIGh5cGhlbiAoLSkgc2Vw YXJhdGVzIHRoZSBsb3cgYW5kIGhpZ2ggZWxlbWVudHMgb2YgdGhlIHJhbmdlLiIsCisiICBGb3Ig ZXhhbXBsZSwgW2Etel0gbWF0Y2hlcyBhbnkgY2hhcmFjdGVyIGZyb20gYSB0byB6LiIsCisiICIs CisiW2FjZG0tel0iLAorIiAgTGlzdHMgYW5kIHJhbmdlcyBtYXkgYmUgY29tYmluZWQuICBUaGlz IGV4YW1wbGUgbWF0Y2hlcyBhLCBjLCBkLCBvciBhbnkiLAorIiAgbGV0dGVyIGZyb20gbSB0aHJv dWdoIHouIiwKKyIgIiwKKyJ7c3RyaW5nMSxzdHJpbmcyLC4uLn0iLAorIiAgQnJhY2VzIGVuY2xv c2UgYSBsaXN0IG9mIHN0cmluZ3MgdG8gYmUgbWF0Y2hlZC4gIEZvciBleGFtcGxlOiIsCisiICBr ZXJ7bWl0LG5lbCxiZXJvc30gbWF0Y2hlcyBrZXJtaXQsIGtlcm5lbCwgYW5kIGtlcmJlcm9zLiAg VGhlIHN0cmluZ3MiLAorIiAgbWF5IHRoZW1zZWx2ZXMgY29udGFpbiAqLCA/LCBbYWJjXSwgW2Et el0sIG9yIG90aGVyIGxpc3RzIG9mIHN0cmluZ3MuIiwKKyNlbmRpZiAvKiBDS1JFR0VYICovCisj ZW5kaWYgLyogT1MyT1JVTklYICovCisjaWZuZGVmIE5PU1BMCisiICIsCisiVG8gZm9yY2UgYSBz cGVjaWFsIHBhdHRlcm4gY2hhcmFjdGVyIHRvIGJlIHRha2VuIGxpdGVyYWxseSwgcHJlY2VkZSBp dCB3aXRoIiwKKyJhIGJhY2tzbGFzaCwgZS5nLiBbYVxcLXpdIG1hdGNoZXMgYSwgaHlwaGVuLCBv ciB6IHJhdGhlciB0aGFuIGEgdGhyb3VnaCB6LiIsCisiICIsCisiQSBmbG9hdGluZyAgcGF0dGVy biBjYW4gYWxzbyBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgc3BlY2lhbCBjaGFyYWN0ZXJzOiIsCisi ICIsCisiXiAoRmlyc3QgY2hhcmFjdGVyIG9mIHBhdHRlcm4pIEFuY2hvcnMgdGhlIHBhdHRlcm4g YXQgdGhlIGJlZ2lubmluZy4iLAorIiQgKExhc3QgY2hhcmFjdGVyIG9mIHBhdHRlcm4pIEFuY2hv cnMgdGhlIHBhdHRlcm4gYXQgdGhlIGVuZC4iLAorIiAiLAorIklmIGEgZmxvYXRpbmcgcGF0dGVy biBkb2VzIG5vdCBzdGFydCB3aXRoIFwiXlwiLCB0aGUgcGF0dGVybiBjYW4gbWF0Y2giLAorImFu eXdoZXJlIGluIHRoZSBzdHJpbmcgaW5zdGVhZCBvZiBvbmx5IGF0IHRoZSBiZWdpbm5pbmc7IGlu IG90aGVyIHdvcmRzLCBhIiwKKyJsZWFkaW5nIFwiKlwiIGlzIGFzc3VtZWQuICBTaW1pbGFybHks IGlmIHRoZSBwYXR0ZXJuIGRvZXNuJ3QgZW5kIHdpdGggXCIkXCIsIiwKKyJhIHRyYWlsaW5nIFwi KlwiIGlzIGFzc3VtZWQuIiwKKyIgIiwKKyJUaGUgZm9sbG93aW5nIGNvbW1hbmRzIGFuZCBmdW5j dGlvbnMgdXNlIGZsb2F0aW5nIHBhdHRlcm5zOiIsCisiICBHUkVQIFsgPHN3aXRjaGVzPiBdIDxw YXR0ZXJuPiA8ZmlsZXNwZWM+IiwKKyIgIFRZUEUgL01BVENIOjxwYXR0ZXJuPiA8ZmlsZT4iLAor IiAgXFxmYXJyYXlsb29rKDxwYXR0ZXJuPiw8YXJyYXluYW1lPikiLAorIiAgXFxmc2VhcmNoKDxw YXR0ZXJuPiw8c3RyaW5nPlssPG9mZnNldD5dKSIsCisiICBcXGZyc2VhcmNoKDxwYXR0ZXJuPiw8 c3RyaW5nPlssPG9mZnNldD5dKSIsCisiICBUaGUgL0VYQ0VQVDogY2xhdXNlIGluIFNFTkQsIEdF VCwgREVMRVRFLCBldGMuIiwKKyIgIiwKKyJFeGFtcGxlOiIsCisiICBcXGZzZWFyY2goYWJjLHh4 YWJjeHh4KSBzdWNjZWVkcyBiZWNhdXNlIHh4YWJjeHggY29udGFpbnMgYWJjLiIsCisiICBcXGZz ZWFyY2goXmFiYyx4eGFiY3h4KSBmYWlscyBiZWNhdXNlIHh4YWJjeHggZG9lcyBub3Qgc3RhcnQg d2l0aCBhYmMuIiwKKyIgIiwKKworIkFsbCBvdGhlciBjb21tYW5kcyBhbmQgZnVuY3Rpb25zIHVz ZSBhbmNob3JlZCBwYXR0ZXJucywgbWVhbmluZyB0aGF0IF4gYW5kICQiLAorImFyZSBub3QgdHJl YXRlZCBzcGVjaWFsbHksIGFuZCAqIGlzIG5vdCBhc3N1bWVkIGF0IHRoZSBiZWdpbm5pbmcgb3Ig ZW5kIG9mIiwKKyJ0aGUgcGF0dGVybi4gIFRoaXMgaXMgdHJ1ZSBtYWlubHkgb2YgZmlsZW5hbWUg cGF0dGVybnMgKHdpbGRjYXJkcyksIHNpbmNlIiwKKyJ5b3Ugd291bGQgbm90IHdhbnQgYSBjb21t YW5kIGxpa2UgXCJkZWxldGUgeFwiIHRvIGRlbGV0ZSBhbGwgZmlsZXMgd2hvc2UiLCAKKyJuYW1l cyBjb250YWluZWQgXCJ4XCIhIiwKKworIiAiLAorIllvdSBjYW4gdXNlIGFuY2hvcmVkIHBhdHRl cm5zIG5vdCBvbmx5IGluIGZpbGVuYW1lcywgYnV0IGFsc28gaW4gU1dJVENIIiwKKyJjYXNlIGxh YmVscywgaW4gdGhlIElOUFVUIGFuZCBNSU5QVVQgY29tbWFuZHMsIGFuZCBpbiBmaWxlIGJpbmFy eS0gYW5kIiwKKyJ0ZXh0LXBhdHRlcm5zIGZvciBmaWxlbmFtZXMuICBUaGUgSUYgTUFUQ0ggcGF0 dGVybiBpcyBhbHNvIGFuY2hvcmVkLiIsCisjZW5kaWYgLyogTk9TUEwgKi8KKyIiIH07CisKK3N0 YXRpYyBjaGFyICpobXh4d2lsZFtdID0geworCisiQSBcIndpbGRjYXJkXCIgaXMgYSBub3RhdGlv biB1c2VkIGluIGEgZmlsZW5hbWUgdG8gbWF0Y2ggbXVsdGlwbGUgZmlsZXMuIiwKKyJGb3IgZXhh bXBsZSwgaW4gXCJzZW5kICoudHh0XCIgdGhlIGFzdGVyaXNrIGlzIGEgd2lsZGNhcmQuICBLZXJt aXQgY29tbWFuZHMiLAorInRoYXQgYWNjZXB0IGZpbGVuYW1lcyBhbHNvIGFjY2VwdHMgd2lsZGNh cmRzLCBleGNlcHQgY29tbWFuZHMgdGhhdCBhcmUiLAorImFsbG93ZWQgdG8gb3BlcmF0ZSBvbiBv bmx5IG9uZSBmaWxlLCBzdWNoIGFzIFRSQU5TTUlULiIsCisiVGhpcyB2ZXJzaW9uIG9mIEtlcm1p dCBhY2NlcHRzIHRoZSBmb2xsb3dpbmcgd2lsZGNhcmRzOiIsCisiICIsCisiKiBNYXRjaGVzIGFu eSBzZXF1ZW5jZSBvZiB6ZXJvIG9yIG1vcmUgY2hhcmFjdGVycy4gIEZvciBleGFtcGxlLCBcImNr Ki5jXCIiLAorIiAgbWF0Y2hlcyBhbGwgZmlsZXMgd2hvc2UgbmFtZXMgc3RhcnQgd2l0aCBcImNr XCIgYW5kIGVuZCB3aXRoIFwiLmNcIiIsCisiICBpbmNsdWRpbmcgXCJjay5jXCIuIiwKKyIgIiwK KyNpZmRlZiBWTVMKKyIlIE1hdGNoZXMgYW55IHNpbmdsZSBjaGFyYWN0ZXIuICBGb3IgZXhhbXBs ZSwgXCJjayUuY1wiIG1hdGNoZXMgYWxsIGZpbGVzIiwKKyNlbHNlCisiPyBNYXRjaGVzIGFueSBz aW5nbGUgY2hhcmFjdGVyLiAgRm9yIGV4YW1wbGUsIFwiY2s/LmNcIiBtYXRjaGVzIGFsbCBmaWxl cyIsCisjZW5kaWYgLyogVk1TICovCisiICB3aG9zZSBuYW1lcyBhcmUgZXhhY3RseSA1IGNoYXJh Y3RlcnMgbG9uZyBhbmQgc3RhcnQgd2l0aCBcImNrXCIgYW5kIGVuZCIsCisjaWZkZWYgVk1TCisi ICB3aXRoIFwiLmNcIi4iLAorI2Vsc2UKKyIgIHdpdGggXCIuY1wiLiAgV2hlbiB0eXBpbmcgY29t bWFuZHMgYXQgdGhlIHByb21wdCwgeW91IG11c3QgcHJlY2VkZSBhbnkiLAorIiAgcXVlc3Rpb24g bWFyayB0byBiZSB1c2VkIGZvciBtYXRjaGluZyBieSBhIGJhY2tzbGFzaCAoXFwpIHRvIG92ZXJy aWRlIHRoZSIsCisiICBub3JtYWwgZnVuY3Rpb24gb2YgcXVlc3Rpb24gbWFyayBpbiBpbnRlcmFj dGl2ZSBjb21tYW5kcywgd2hpY2ggaXMgdG8iLAorIiAgcHJvdmlkZSBtZW51cyBhbmQgZmlsZSBs aXN0cy4gIFlvdSBkb24ndCwgaG93ZXZlciwgbmVlZCB0byBxdW90ZSBmaWxlbmFtZSIsCisiICBx dWVzdGlvbiBtYXJrcyBpbiBjb21tYW5kIGZpbGVzIChzY3JpcHQgcHJvZ3JhbXMpLiIsCisjZW5k aWYgLyogVk1TICovCisiICIsCisjaWZkZWYgT1MyT1JVTklYCisjaWZkZWYgQ0tSRUdFWAorIlth YmNdIiwKKyIgIFNxdWFyZSBicmFja2V0cyBlbmNsb3NpbmcgYSBsaXN0IG9mIGNoYXJhY3RlcnMg bWF0Y2hlcyBhbnkgY2hhcmFjdGVyIGluIiwKKyIgIHRoZSBsaXN0LiAgRXhhbXBsZTogY2t1dXNy LltjaF0gbWF0Y2hlcyBja3V1c3IuYyBhbmQgY2t1dXNyLmguIiwKKyIgIiwKKyJbYS16XSIsCisi ICBTcXVhcmUgYnJhY2tldHMgZW5jbG9zaW5nIGEgcmFuZ2Ugb2YgY2hhcmFjdGVycyBtYXRjaGVz IGFueSBjaGFyYWN0ZXIgaW4iLAorIiAgdGhlIHJhbmdlOyBhIGh5cGhlbiAoLSkgc2VwYXJhdGVz IHRoZSBsb3cgYW5kIGhpZ2ggZWxlbWVudHMgb2YgdGhlIHJhbmdlLiIsCisiICBGb3IgZXhhbXBs ZSwgW2Etel0gbWF0Y2hlcyBhbnkgY2hhcmFjdGVyIGZyb20gYSB0byB6LiIsCisiICIsCisiW2Fj ZG0tel0iLAorIiAgTGlzdHMgYW5kIHJhbmdlcyBtYXkgYmUgY29tYmluZWQuICBUaGlzIGV4YW1w bGUgbWF0Y2hlcyBhLCBjLCBkLCBvciBhbnkiLAorIiAgbGV0dGVyIGZyb20gbSB0aHJvdWdoIHou IiwKKyIgIiwKKyJ7c3RyaW5nMSxzdHJpbmcyLC4uLn0iLAorIiAgQnJhY2VzIGVuY2xvc2UgYSBs aXN0IG9mIHN0cmluZ3MgdG8gYmUgbWF0Y2hlZC4gIEZvciBleGFtcGxlOiIsCisiICBja3t1Zmlv LHZjb24sY21haX0uYyBtYXRjaGVzIGNrdWZpby5jLCBja3Zjb24uYywgb3IgY2tjbWFpLmMuICBU aGUgc3RyaW5ncyIsCisiICBtYXkgdGhlbXNlbHZlcyBjb250YWluICosID8sIFthYmNdLCBbYS16 XSwgb3Igb3RoZXIgbGlzdHMgb2Ygc3RyaW5ncy4iLAorI2VuZGlmIC8qIENLUkVHRVggKi8KKyNl bmRpZiAvKiBPUzJPUlVOSVggKi8KKyIgIiwKKyJUbyBmb3JjZSBhIHNwZWNpYWwgcGF0dGVybiBj aGFyYWN0ZXIgdG8gYmUgdGFrZW4gbGl0ZXJhbGx5LCBwcmVjZWRlIGl0IHdpdGgiLAorImEgYmFj a3NsYXNoLCBlLmcuIFthXFwtel0gbWF0Y2hlcyBhLCBoeXBoZW4sIG9yIHogcmF0aGVyIHRoYW4g YSB0aHJvdWdoIHouIiwKKyJPciB0ZWxsIEtlcm1pdCB0byBTRVQgV0lMRENBUkQtRVhQQU5TSU9O IE9GRiBiZWZvcmUgZW50ZXJpbmcgb3IgcmVmZXJyaW5nIiwKKyJ0byB0aGUgZmlsZW5hbWUuIiwK KyIgIiwKKyNpZm5kZWYgTk9TUEwKKyJTaW1pbGFyIG5vdGF0aW9uIGNhbiBiZSB1c2VkIGluIGdl bmVyYWwtcHVycG9zZSBzdHJpbmcgbWF0Y2hpbmcuICBUeXBlIEhFTFAiLAorIlBBVFRFUk5TIGZv ciBkZXRhaWxzLiAgQWxzbyBzZWUgSEVMUCBTRVQgTUFUQ0guIiwKKyNlbmRpZiAvKiBOT1NQTCAq LworIiIgfTsKKworI2lmbmRlZiBOT1hGRVIKK3N0YXRpYyBjaGFyICpobXh4ZmFzdFtdID0gewor IkZBU1QsIENBVVRJT1VTLCBhbmQgUk9CVVNUIGFyZSBwcmVkZWZpbmVkIG1hY3JvcyB0aGF0IHNl dCBzZXZlcmFsIiwKKyJmaWxlLXRyYW5zZmVyIHBhcmFtZXRlcnMgYXQgb25jZSB0byBhY2hpZXZl IHRoZSBkZXNpcmVkIGZpbGUtdHJhbnNmZXIgZ29hbC4iLAorIkZBU1QgY2hvb3NlcyBhIGxhcmdl IHBhY2tldCBzaXplLCBhIGxhcmdlIHdpbmRvdyBzaXplLCBhbmQgYSBmYWlyIGFtb3VudCBvZiIs CisiY29udHJvbC1jaGFyYWN0ZXIgdW5wcmVmaXhpbmcgYXQgdGhlIHJpc2sgb2YgcG9zc2libGUg ZmFpbHVyZSBvbiBzb21lIiwKKyJjb25uZWN0aW9ucy4gIEZBU1QgaXMgdGhlIGRlZmF1bHQgdHVu aW5nIGluIEMtS2VybWl0IDcuMCBhbmQgbGF0ZXIuICBJbiBjYXNlIiwKKyJGQVNUIGZpbGUgdHJh bnNmZXJzIGZhaWwgZm9yIHlvdSBvbiBhIHBhcnRpY3VsYXIgY29ubmVjdGlvbiwgdHJ5IENBVVRJ T1VTLiIsCisiSWYgdGhhdCBmYWlscyB0b28sIHRyeSBST0JVU1QuICBZb3UgY2FuIGFsc28gY2hh bmdlIHRoZSBkZWZpbml0aW9ucyBvZiBlYWNoIiwKKyJtYWNybyB3aXRoIHRoZSBERUZJTkUgY29t bWFuZC4gIFRvIHNlZSB0aGUgY3VycmVudCBkZWZpbml0aW9ucywgdHlwZSIsCisiXCJzaG93IG1h Y3JvIGZhc3RcIiwgXCJzaG93IG1hY3JvIGNhdXRpb3VzXCIsIG9yIFwic2hvdyBtYWNybyByb2J1 c3RcIi4iLAorIiIKK307CisjZW5kaWYgLyogTk9YRkVSICovCisKKyNpZmRlZiBWTVMKK3N0YXRp YyBjaGFyICogaG14eHB1cmdlW10gPSB7CisiU3ludGF4OiBQVVJHRSBbIHN3aXRjaGVzIF0gWyBm aWxlc3BlYyBdIiwKKyIgIFJ1bnMgdGhlIERDTCBQVVJHRSBjb21tYW5kLiAgU3dpdGNoZXMgYW5k IGZpbGVzcGVjIGFyZSBub3QgcGFyc2VkIG9yIiwKKyIgIHZlcmlmaWVkIGJ5IEtlcm1pdCwgYnV0 IHBhc3NlZCBkaXJlY3RseSB0byBEQ0wuIiwKKyIiCit9OworI2Vsc2UKKyNpZmRlZiBDS1BVUkdF CitzdGF0aWMgY2hhciAqIGhteHhwdXJnZVtdID0geworIlN5bnRheDogUFVSR0UgWyBzd2l0Y2hl cyBdIFsgZmlsZXNwZWMgXSIsCisiICBEZWxldGVzIGJhY2t1cCBmaWxlczsgdGhhdCBpcywgZmls ZXMgd2hvc2UgbmFtZXMgZW5kIGluIFwiLn5uflwiLCB3aGVyZSIsCisiICBuIGlzIGEgbnVtYmVy LiAgUFVSR0UgYnkgaXRzZWxmIGRlbGV0ZXMgYWxsIGJhY2t1cCBmaWxlcyBpbiB0aGUgY3VycmVu dCIsCisiICBkaXJlY3RvcnkuICBTd2l0Y2hlczoiLAorCisiICIsCisiL0FGVEVSOmRhdGUtdGlt ZSIsCisjaWZkZWYgVk1TCisiICBTcGVjaWZpZXMgdGhhdCBvbmx5IHRob3NlIGZpbGVzIGNyZWF0 ZWQgYWZ0ZXIgdGhlIGdpdmVuIGRhdGUtdGltZSBhcmUiLAorI2Vsc2UKKyIgIFNwZWNpZmllcyB0 aGF0IG9ubHkgdGhvc2UgZmlsZXMgbW9kaWZpZWQgYWZ0ZXIgdGhlIGdpdmVuIGRhdGUtdGltZSBh cmUiLAorI2VuZGlmIC8qIFZNUyAqLworIiAgdG8gYmUgcHVyZ2VkLiAgSEVMUCBEQVRFIGZvciBp bmZvIGFib3V0IGRhdGUtdGltZSBmb3JtYXRzLiIsCisiICIsCisiL0JFRk9SRTpkYXRlLXRpbWUi LAorI2lmZGVmIFZNUworIiAgU3BlY2lmaWVzIHRoYXQgb25seSB0aG9zZSBmaWxlcyBtb2RpZmll ZCBiZWZvcmUgdGhlIGdpdmVuIGRhdGUtdGltZSIsCisjZWxzZQorIiAgU3BlY2lmaWVzIHRoYXQg b25seSB0aG9zZSBmaWxlcyBtb2RpZmllZCBiZWZvcmUgdGhlIGdpdmVuIGRhdGUtdGltZSIsCisj ZW5kaWYgLyogVk1TICovCisiICBhcmUgdG8gYmUgcHVyZ2VkLiIsCisiICIsCisiL05PVC1BRlRF UjpkYXRlLXRpbWUiLAorI2lmZGVmIFZNUworIiAgU3BlY2lmaWVzIHRoYXQgb25seSB0aG9zZSBm aWxlcyBtb2RpZmllZCBhdCBvciBiZWZvcmUgdGhlIGdpdmVuIGRhdGUtdGltZSIsCisjZWxzZQor IiAgU3BlY2lmaWVzIHRoYXQgb25seSB0aG9zZSBmaWxlcyBtb2RpZmllZCBhdCBvciBiZWZvcmUg dGhlIGdpdmVuIGRhdGUtdGltZSIsCisjZW5kaWYgLyogVk1TICovCisiICBhcmUgdG8gYmUgcHVy Z2VkLiIsCisiICIsCisiL05PVC1CRUZPUkU6ZGF0ZS10aW1lIiwKKyNpZmRlZiBWTVMKKyIgIFNw ZWNpZmllcyB0aGF0IG9ubHkgdGhvc2UgZmlsZXMgbW9kaWZpZWQgYXQgb3IgYWZ0ZXIgdGhlIGdp dmVuIGRhdGUtdGltZSIsCisjZWxzZQorIiAgU3BlY2lmaWVzIHRoYXQgb25seSB0aG9zZSBmaWxl cyBtb2RpZmllZCBhdCBvciBhZnRlciB0aGUgZ2l2ZW4gZGF0ZS10aW1lIiwKKyNlbmRpZiAvKiBW TVMgKi8KKyIgIGFyZSB0byBiZSBwdXJnZWQuIiwKKyIgIiwKKyIvTEFSR0VSLVRIQU46bnVtYmVy IiwKKyIgIFNwZWNpZmllcyB0aGF0IG9ubHkgdGhvc2UgZmlsZXMgbG9uZ2VyIHRoYW4gdGhlIGdp dmVuIG51bWJlciBvZiBieXRlcyBhcmUiLAorIiAgdG8gYmUgcHVyZ2VkLiIsCisiICIsCisiL1NN QUxMRVItVEhBTjpudW1iZXIiLAorIiAgU3BlY2lmaWVzIHRoYXQgb25seSB0aG9zZSBmaWxlcyBz bWFsbGVyIHRoYW4gdGhlIGdpdmVuIG51bWJlciBvZiBieXRlcyBhcmUiLAorIiAgdG8gYmUgcHVy Z2VkLiIsCisiICIsCisiL0VYQ0VQVDpwYXR0ZXJuIiwKKyIgIFNwZWNpZmllcyB0aGF0IGFueSBm aWxlcyB3aG9zZSBuYW1lcyBtYXRjaCB0aGUgcGF0dGVybiwgd2hpY2ggY2FuIGJlIGEiLAorIiAg cmVndWxhciBmaWxlbmFtZSBvciBtYXkgY29udGFpbiB3aWxkY2FyZHMsIGFyZSBub3QgdG8gYmUg cHVyZ2VkLiAgVG8iLAorIiAgc3BlY2lmeSBtdWx0aXBsZSBwYXR0ZXJucyAodXAgdG8gOCksIHVz ZSBvdXRlciBicmFjZXMgYXJvdW5kIHRoZSBncm91cCIsCisiICBhbmQgaW5uZXIgYnJhY2VzIGFy b3VuZCBlYWNoIHBhdHRlcm46IiwKKyIgIiwKKyIgICAgL0VYQ0VQVDp7e3BhdHRlcm4xfXtwYXR0 ZXJuMn0uLi59IiwKKyIgIiwKKyNpZmRlZiBVTklYT1JPU0sKKyIvRE9URklMRVMiLAorIiAgSW5j bHVkZSAocHVyZ2UpIGZpbGVzIHdob3NlIG5hbWVzIGJlZ2luIHdpdGggXCIuXCIuIiwKKyIgIiwK KyIvTk9ET1RGSUxFUyIsCisiICBTa2lwIChkb24ndCBwdXJnZSkgZmlsZXMgd2hvc2UgbmFtZXMg YmVnaW4gd2l0aCBcIi5cIi4iLAorIiAiLAorI2VuZGlmIC8qIFVOSVhPUk9TSyAqLworI2lmZGVm IFJFQ1VSU0lWRQorIi9SRUNVUlNJVkUiLAorIiAgRGVzY2VuZHMgdGhyb3VnaCB0aGUgY3VycmVu dCBvciBzcGVjaWZpZWQgZGlyZWN0b3J5IHRyZWUuIiwKKyIgIiwKKyNlbmRpZiAvKiBSRUNVUlNJ VkUgKi8KKyIvS0VFUDpuIiwKKyIgIFJldGFpbiB0aGUgJ24nIG1vc3QgcmVjZW50IChoaWdoZXN0 LW51bWJlcmVkKSBiYWNrdXAgZmlsZXMgZm9yIGVhY2ggZmlsZS4iLAorIiAgQnkgZGVmYXVsdCwg bm9uZSBhcmUga2VwdC4gIElmIC9LRUVQIGlzIGdpdmVuIHdpdGhvdXQgYSBudW1iZXIsIDEgaXMg dXNlZC4iLAorIiAiLAorIi9MSVNUIiwKKyIgIERpc3BsYXkgZWFjaCBmaWxlIGFzIGl0IGlzIHBy b2Nlc3NlZCBhbmQgc2F5IHdoZXRoZXIgaXQgaXMgcHVyZ2VkIG9yIGtlcHQuIiwKKyIgIFN5bm9u eW1zOiAvTE9HLCAvVkVSQk9TRS4iLAorIiAiLAorIi9OT0xJU1QiLAorIiAgVGhlIFBVUkdFIGNv bW1hbmQgc2hvdWxkIG9wZXJhdGUgc2lsZW50bHkgKGRlZmF1bHQpLiIsCisiICBTeW5vbnltczog L05PTE9HLCAvUVVJRVQuIiwKKyIgIiwKKyIvSEVBRElORyIsCisiICBQcmludCBoZWFkaW5nIGFu ZCBzdW1tYXJ5IGluZm9ybWF0aW9uLiIsCisiICIsCisiL05PSEVBRElORyIsCisiICBEb24ndCBw cmludCBoZWFkaW5nIGFuZCBzdW1tYXJ5IGluZm9ybWF0aW9uLiIsCisiICIsCisiL1BBR0UiLAor IiAgV2hlbiAvTElTVCBpcyBpbiBlZmZlY3QsIHBhdXNlIGF0IHRoZSBlbmQgb2YgZWFjaCBzY3Jl ZW5mdWwsIGV2ZW4gaWYiLAorIiAgQ09NTUFORCBNT1JFLVBST01QVElORyBpcyBPRkYuIiwKKyIg IiwKKyIvTk9QQUdFIiwKKyIgIERvbid0IHBhdXNlLCBldmVuIGlmIENPTU1BTkQgTU9SRS1QUk9N UFRJTkcgaXMgT04uIiwKKyIgIiwKKyIvQVNLIiwKKyIgIEludGVyYWN0aXZlbHkgYXNrIHBlcm1p c3Npb24gdG8gZGVsZXRlIGVhY2ggYmFja3VwIGZpbGUuIiwKKyIgIiwKKyIvTk9BU0siLAorIiAg UHVyZ2UgYmFja3VwIGZpbGVzIHdpdGhvdXQgYXNraW5nIHBlcm1pc3Npb24uIiwKKyIgIiwKKyIv U0lNVUxBVEUiLAorIiAgSW5oaWJpdHMgdGhlIGFjdHVhbCBkZWxldGlvbiBvZiBmaWxlczsgdXNl IHRvIHByZXZpZXcgd2hpY2ggZmlsZXMgd291bGQiLAorIiAgYWN0dWFsbHkgYmUgZGVsZXRlZC4g IEltcGxpZXMgL0xJU1QuIiwKKyIgIiwKKyJVc2UgU0VUIE9QVElPTlMgUFVSR0UgWyBzd2l0Y2hl cyBdIHRvIGNoYW5nZSBkZWZhdWx0czsgdXNlIFNIT1cgT1BUSU9OUyB0byIsCisiZGlzcGxheSBj dXN0b21pemVkIGRlZmF1bHRzLiAgQWxzbyBzZWUgSEVMUCBERUxFVEUsIEhFTFAgV0lMRENBUkQu IiwKKyIiCit9OworI2VuZGlmIC8qIENLUFVSR0UgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKworc3Rh dGljIGNoYXIgKmhteHhjbG9bXSA9IHsKKyJTeW50YXg6ICBDTE9TRSBbIGl0ZW0gXSIsCisiICBD bG9zZSB0aGUgaW5kaWNhdGVkIGl0ZW0uICBUaGUgZGVmYXVsdCBpdGVtIGlzIENPTk5FQ1RJT04s IHdoaWNoIGlzIHRoZSIsCisiICBjdXJyZW50IFNFVCBMSU5FIG9yIFNFVCBIT1NUIGNvbm5lY3Rp b24uICBUaGUgb3RoZXIgaXRlbXMgYXJlOiIsCisiICIsCisjaWZkZWYgQ0tMT0dESUFMCisiICAg IENYLUxPRyAgICAgICAgICAoY29ubmVjdGlvbiBsb2csIG9wZW5lZCB3aXRoIExPRyBDWCkiLAor I2VuZGlmIC8qIENLTE9HRElBTCAqLworI2lmbmRlZiBOT0xPQ0FMCisiICAgIFNFU1NJT04tTE9H ICAgICAob3BlbmVkIHdpdGggTE9HIFNFU1NJT04pIiwKKyNlbmRpZiAvKiBOT0xPQ0FMICovCisj aWZkZWYgVExPRworIiAgICBUUkFOU0FDVElPTi1MT0cgKG9wZW5lZCB3aXRoIExPRyBUUkFOU0FD VElPTlMpIiwKKyNlbmRpZiAvKiBUTE9HICovCisiICAgIFBBQ0tFVC1MT0cgICAgICAob3BlbmVk IHdpdGggTE9HIFBBQ0tFVFMpIiwKKyNpZmRlZiBERUJVRworIiAgICBERUJVRy1MT0cgICAgICAg KG9wZW5lZCB3aXRoIExPRyBERUJVRykiLAorI2VuZGlmIC8qIERFQlVHICovCisjaWZuZGVmIE5P U1BMCisiICAgIFJFQUQtRklMRSAgICAgICAob3BlbmVkIHdpdGggT1BFTiBSRUFEKSIsCisiICAg IFdSSVRFLUZJTEUgICAgICAob3BlbmVkIHdpdGggT1BFTiBXUklURSBvciBPUEVOIEFQUEVORCki LAorI2VuZGlmIC8qIE5PU1BMICovCisiICIsCisiVHlwZSBIRUxQIExPRyBhbmQgSEVMUCBPUEVO IGZvciBmdXJ0aGVyIGluZm8uIiwKKyIiCit9OworCisjaWZkZWYgQ0tMRUFSTgorc3RhdGljIGNo YXIgKiBobXh4bGVhcm5bXSA9IHsKKyJTeW50YXg6IExFQVJOIFsgL09OIC9PRkYgL0NMT1NFIF0g WyBmaWxlbmFtZSBdIiwKKyIgIFJlY29yZHMgYSBsb2dpbiBzY3JpcHQuICBJZiB5b3UgZ2l2ZSBh IGZpbGVuYW1lLCB0aGUgZmlsZSBpcyBvcGVuZWQgZm9yIiwKKyIgIHN1YnNlcXVlbnQgcmVjb3Jk aW5nLiAgSWYgeW91IGRvbid0IGdpdmUgYW55IHN3aXRjaGVzLCAvT04gaXMgYXNzdW1lZC4iLAor IiAgL09OIGVuYWJsZXMgcmVjb3JkaW5nIHRvIHRoZSBjdXJyZW50IGZpbGUgKGlmIGFueSk7IC9P RkYgZGlzYWJsZXMiLAorIiAgcmVjb3JkaW5nLiAgL0NMT1NFIGNsb3NlcyB0aGUgY3VycmVudCBm aWxlIChpZiBhbnkpLiAgQWZ0ZXIgTEVBUk4gL0NMT1NFIiwKKyIgIG9yIGV4aXQgZnJvbSBLZXJt aXQsIHlvdXIgc2NyaXB0IGlzIGF2YWlsYWJsZSBmb3IgZXhlY3V0aW9uIGJ5IHRoZSBUQUtFIiwK KyIgIGNvbW1hbmQuIiwKKyIiCit9OworI2VuZGlmIC8qIENLTEVBUk4gKi8KKworI2lmZGVmIENL X01JTlBVVAorc3RhdGljIGNoYXIgKmhteHhtaW5wW10gPSB7CisiU3ludGF4OiAgTUlOUFVUIFsg c3dpdGNoZXMgXSBuIFsgc3RyaW5nMSBbIHN0cmluZzIgWyAuLi4gXSBdIF0iLAorIkV4YW1wbGU6 IE1JTlBVVCA1IExvZ2luOiB7VXNlcm5hbWU6IH0ge05PIENBUlJJRVJ9IEJVU1kgUklORyIsCisi ICBGb3IgdXNlIGluIHNjcmlwdCBwcm9ncmFtcy4gIFdhaXRzIHVwIHRvIG4gc2Vjb25kcyBmb3Ig YW55IG9uZSBvZiB0aGUiLAorIiAgc3RyaW5ncyB0byBhcnJpdmUgb24gdGhlIGNvbW11bmljYXRp b24gZGV2aWNlLiAgSWYgbm8gc3RyaW5ncyBhcmUgZ2l2ZW4sIiwKKyIgIHRoZSBjb21tYW5kIHdh aXRzIGZvciBhbnkgY2hhcmFjdGVyIGF0IGFsbCB0byBhcnJpdmUuICBTdHJpbmdzIGFyZSIsCisi ICBzZXBhcmF0ZWQgYnkgc3BhY2VzOyB1c2Uge2JyYWNlc30gb3IgXCJkb3VibGVxdW90ZXNcIiBm b3IgZ3JvdXBpbmcuICBJZiIsCisiICBhbnkgb2YgdGhlIHN0cmluZ3MgaXMgZW5jb3VudGVyZWQg d2l0aGluIHRoZSB0aW1lb3V0IGludGVydmFsLCB0aGUgY29tbWFuZCIsCisiICBzdWNjZWVkcyBh bmQgdGhlIFxcdihtaW5wdXQpIHZhcmlhYmxlIGlzIHNldCB0byB0aGUgbnVtYmVyIG9mIHRoZSBz dHJpbmciLAorIiAgdGhhdCB3YXMgbWF0Y2hlZDogMSwgMiwgMywgZXRjLiAgSWYgbm9uZSBvZiB0 aGUgc3RyaW5ncyBhcnJpdmVzLCB0aGUiLAorIiAgY29tbWFuZCB0aW1lcyBvdXQsIGZhaWxzLCBh bmQgXFx2KG1pbnB1dCkgaXMgc2V0IHRvIDAuICBJbiBhbGwgb3RoZXIiLAorIiAgcmVzcGVjdHMs IE1JTlBVVCBpcyBsaWtlIElOUFVULiAgU2VlIEhFTFAgSU5QVVQgZm9yIHRoZSBhdmFpbGFibGUg c3dpdGNoZXMiLAorIiAgYW5kIG90aGVyIGRldGFpbHMgb2Ygb3BlcmF0aW9uLiIsCisiIiB9Owor I2VuZGlmIC8qIENLX01JTlBVVCAqLworCisjaWZuZGVmIE5PTE9DQUwKK3N0YXRpYyBjaGFyICpo bXh4Y29uW10gPSB7CisiU3ludGF4OiBDT05ORUNUIChvciBDLCBvciBDUSkgWyBzd2l0Y2hlcyBd IiwKKyIgIENvbm5lY3QgdG8gYSByZW1vdGUgY29tcHV0ZXIgdmlhIHRoZSBzZXJpYWwgY29tbXVu aWNhdGlvbnMgZGV2aWNlIGdpdmVuIGluIiwKKyNpZmRlZiBPUzIKKyIgIHRoZSBtb3N0IHJlY2Vu dCBTRVQgUE9SVCBjb21tYW5kLCBvciB0byB0aGUgbmV0d29yayBob3N0IG5hbWVkIGluIHRoZSBt b3N0IiwKKyNlbHNlCisiICB0aGUgbW9zdCByZWNlbnQgU0VUIExJTkUgY29tbWFuZCwgb3IgdG8g dGhlIG5ldHdvcmsgaG9zdCBuYW1lZCBpbiB0aGUgbW9zdCIsCisjZW5kaWYgLyogT1MyICovCisi ICByZWNlbnQgU0VUIEhPU1QgY29tbWFuZC4gIFR5cGUgdGhlIGVzY2FwZSBjaGFyYWN0ZXIgZm9s bG93ZWQgYnkgQyB0byBnZXQiLAorIiAgYmFjayB0byB0aGUgQy1LZXJtaXQgcHJvbXB0LCBvciBm b2xsb3dlZCBieSA/IGZvciBhIGxpc3Qgb2YgQ09OTkVDVC1tb2RlIiwKKyNpZmRlZiBPUzIKKyIg IGVzY2FwZSBjb21tYW5kcy4gIFlvdSBjYW4gYWxzbyBhc3NpZ24gdGhlIFxcS2V4aXQgdmVyYiB0 byB0aGUga2V5IG9yIiwKKyIgIGtleS1jb21iaW5hdGlvbiBvZiB5b3VyIGNob2ljZTsgYnkgZGVm YXVsdCBpdCBpcyBhc3NpZ25lZCB0byBBbHQteC4iLAorI2Vsc2UKKyIgIGVzY2FwZSBjb21tYW5k cy4iLAorIiAiLAorIkluY2x1ZGUgdGhlIC9RVUlFVExZIHN3aXRjaCB0byBzdXBwcmVzcyB0aGUg aW5mb3JtYXRpb25hbCBtZXNzYWdlIHRoYXQiLAorInRlbGxzIHlvdSBob3cgdG8gZXNjYXBlIGJh Y2ssIGV0Yy4gIENRIGlzIGEgc3lub255bSBmb3IgQ09OTkVDVCAvUVVJRVRMWS4iLAorI2VuZGlm IC8qIE9TMiAqLworIiAiLAorIk90aGVyIHN3aXRjaGVzIGluY2x1ZGU6IiwKKyNpZmRlZiBDS19U UklHR0VSCisiICIsCisiL1RSSUdHRVI6c3RyaW5nIiwKKyIgIE9uZSBvciBtb3JlIHN0cmluZ3Mg dG8gbG9vayBmb3IgdGhhdCB3aWxsIGNhdXNlIGF1dG9tYXRpYyByZXR1cm4gdG8iLAorIiAgY29t bWFuZCBtb2RlLiAgVG8gc3BlY2lmeSBvbmUgc3RyaW5nLCBqdXN0IHB1dCBpdCByaWdodCBhZnRl ciB0aGUiLAorIiAgY29sb24sIGUuZy4gXCIvVFJJR0dFUjpHb29kYnllXCIuICBJZiB0aGUgc3Ry aW5nIGNvbnRhaW5zIGFueSBzcGFjZXMsIHlvdSIsCisiICBtdXN0IGVuY2xvc2UgaXQgaW4gYnJh Y2VzLCBlLmcuIFwiL1RSSUdHRVI6e1JFQURZIFRPIFNFTkQuLi59XCIuICBUbyIsCisiICBzcGVj aWZ5IG1vcmUgdGhhbiBvbmUgdHJpZ2dlciwgdXNlIHRoZSBmb2xsb3dpbmcgZm9ybWF0OiIsCisi ICIsCisiICAgIC9UUklHR0VSOnt7c3RyaW5nMX17c3RyaW5nMn0uLi57c3RyaW5nbn19IiwKKyIg IiwKKyIgIFVwb24gcmV0dXJuIGZyb20gQ09OTkVDVCBtb2RlLCB0aGUgdmFyaWFibGUgXFx2KHRy aWdnZXIpIGlzIHNldCB0byB0aGUiLAorIiAgdHJpZ2dlciBzdHJpbmcsIGlmIGFueSwgdGhhdCB3 YXMgYWN0dWFsbHkgZW5jb3VudGVyZWQuICBUaGlzIHZhbHVlLCBsaWtlIiwKKyIgIGFsbCBvdGhl ciBDT05ORUNUIHN3aXRjaGVzIGFwcGxpZXMgb25seSB0byB0aGUgQ09OTkVDVCBjb21tYW5kIHdp dGggd2hpY2giLAorIiAgaXQgaXMgZ2l2ZW4sIGFuZCBvdmVycmlkZXMgKHRlbXBvcmFyaWx5KSBh bnkgZ2xvYmFsIFNFVCBURVJNSU5BTCBUUklHR0VSIiwKKyIgIHN0cmluZyB0aGF0IG1pZ2h0IGJl IGluIGVmZmVjdC4iLAorI2VuZGlmIC8qIENLX1RSSUdHRVIgKi8KKyNpZmRlZiBPUzIKKyIgIiwK KyIvSURMRS1MSU1JVDpudW1iZXIiLAorIiAgVGhlIG51bWJlciBvZiBzZWNvbmRzIG9mIGlkbGUg dGltZSwgYWZ0ZXIgd2hpY2ggS2VybWl0IHJldHVybnMiLAorIiAgYXV0b21hdGljYWxseSB0byBj b21tYW5kIG1vZGU7IGRlZmF1bHQgMCAobm8gbGltaXQpLiIsCisiICIsCisiL0lETEUtSU5URVJW QUw6bnVtYmVyIiwKKyIgIFRoZSBudW1iZXIgb2Ygc2Vjb25kcyBvZiBpZGxlIHRpbWUsIGFmdGVy IHdoaWNoIEtlcm1pdCBhdXRvbWF0aWNhbGx5IiwKKyIgIHRyYW5zbWl0cyB0aGUgaWRsZSBzdHJp bmcuIiwKKyIgIiwKKyIvSURMRS1TVFJJTkc6c3RyaW5nIiwKKyIgIFRoZSBzdHJpbmcgdG8gdHJh bnNtaXQgd2hlbmV2ZXIgdGhlIGlkbGUgaW50ZXJ2YWwgaGFzIHBhc3NlZC4iLAorIiAiLAorIi9U SU1FLUxJTUlUOm51bWJlciIsCisiICBUaGUgbWF4aW11bSBudW1iZXIgb2Ygc2Vjb25kcyBmb3Ig d2hpY2ggdGhlIENPTk5FQ1Qgc2Vzc2lvbiBtYXkgbGFzdC4iLAorIiAgVGhlIGRlZmF1bHQgaXMg MCAobm8gbGltaXQpLiAgSWYgYSBub256ZXJvIG51bWJlciBpcyBnaXZlbiwgS2VybWl0IHJldHVy bnMiLAorIiAgYXV0b21hdGljYWxseSB0byBjb21tYW5kIG1vZGUgYWZ0ZXIgdGhpcyBtYW55IHNl Y29uZHMuIiwKKyNlbmRpZiAvKiBPUzIgKi8KKyIiIH07CisjZW5kaWYgLyogTk9MT0NBTCAqLwor CitzdGF0aWMgY2hhciAqaG14eG1nZXRbXSA9IHsKKyJTeW50YXg6IE1HRVQgWyBzd2l0Y2hlcy4u LiBdIHJlbW90ZS1maWxlc3BlYyBbIHJlbW90ZS1maWxlc3BlYyAuLi4gXSIsCisiICIsCisiSnVz dCBsaWtlIEdFVCAocS52LikgZXhjZXB0IGFsbG93cyBhIGxpc3Qgb2YgcmVtb3RlIGZpbGUgc3Bl Y2lmaWNhdGlvbnMsIiwKKyJzZXBhcmF0ZWQgYnkgc3BhY2VzLiIsCisiIgorfTsKKworc3RhdGlj IGNoYXIgKmhteHhnZXRbXSA9IHsKKyJTeW50YXg6IEdFVCBbIHN3aXRjaGVzLi4uIF0gcmVtb3Rl LWZpbGVzcGVjIFsgYXMtbmFtZSBdIiwKKyIgIFRlbGxzIHRoZSBvdGhlciBLZXJtaXQsIHdoaWNo IG11c3QgYmUgaW4gKG9yIHN1cHBvcnQgYXV0b3N3aXRjaGluZyBpbnRvKSIsCisiICBzZXJ2ZXIg bW9kZSwgdG8gc2VuZCB0aGUgbmFtZWQgZmlsZSBvciBmaWxlcy4gIElmIHRoZSByZW1vdGUtZmls ZXNwZWMgb3IiLAorIiAgdGhlIGFzLW5hbWUgY29udGFpbiBzcGFjZXMsIHRoZXkgbXVzdCBiZSBl bmNsb3NlZCBpbiBicmFjZXMuICBJZiBhcy1uYW1lIiwKKyIgIGlzIHRoZSBuYW1lIG9mIGFuIGV4 aXN0aW5nIGxvY2FsIGRpcmVjdG9yeSwgaW5jb21pbmcgZmlsZXMgYXJlIHBsYWNlZCBpbiIsCisi ICB0aGF0IGRpcmVjdG9yeTsgaWYgaXQgaXMgdGhlIG5hbWUgb2YgZGlyZWN0b3J5IHRoYXQgZG9l cyBub3QgZXhpc3QsIEtlcm1pdCIsCisiICB0cmllcyB0byBjcmVhdGUgaXQuICBPcHRpb25hbCBz d2l0Y2hlcyBpbmNsdWRlOiIsCisiICIsCisiL0FTLU5BTUU6dGV4dCIsCisiICBTcGVjaWZpZXMg XCJ0ZXh0XCIgYXMgdGhlIG5hbWUgdG8gc3RvcmUgdGhlIGluY29taW5nIGZpbGUgdW5kZXIsIG9y IiwKKyIgIGRpcmVjdG9yeSB0byBzdG9yZSBpdCBpbi4gIFlvdSBjYW4gYWxzbyBzcGVjaWZ5IHRo ZSBhcy1uYW1lIGFzIHRoZSBzZWNvbmQiLAorIiAgZmlsZW5hbWUgb24gdGhlIEdFVCBjb21tYW5k IGxpbmUuIiwKKyIgIiwKKyIvQklOQVJZIiwKKyIgIFBlcmZvcm1zIHRoaXMgdHJhbnNmZXIgaW4g YmluYXJ5IG1vZGUgd2l0aG91dCBhZmZlY3RpbmcgdGhlIGdsb2JhbCIsCisiICB0cmFuc2ZlciBt b2RlLiIsCisiICIsCisiL0NPTU1BTkQiLAorIiAgUmVjZWl2ZXMgdGhlIGZpbGUgaW50byB0aGUg c3RhbmRhcmQgaW5wdXQgb2YgYSBjb21tYW5kLCByYXRoZXIgdGhhbiBzYXZpbmciLAorIiAgaXQg b24gIGRpc2suICBUaGUgL0FTLU5BTUUgb3IgdGhlIHNlY29uZCBcImZpbGVuYW1lXCIgb24gdGhl IEdFVCBjb21tYW5kIiwKKyIgIGxpbmUgaXMgaW50ZXJwcmV0ZWQgYXMgdGhlIG5hbWUgb2YgYSBj b21tYW5kLiIsCisiICIsCisiL0RFTEVURSIsCisiICBBc2tzIHRoZSBvdGhlciBLZXJtaXQgdG8g ZGVsZXRlIHRoZSBmaWxlIChvciBlYWNoIGZpbGUgaW4gdGhlIGdyb3VwKSIsCisiICBhZnRlciBp dCBoYXMgYmVlbiB0cmFuc2ZlcnJlZCBzdWNjZXNzZnVsbHkuIiwKKyIgIiwKKyIvRVhDRVBUOnBh dHRlcm4iLAorIiAgU3BlY2lmaWVzIHRoYXQgYW55IGZpbGVzIHdob3NlIG5hbWVzIG1hdGNoIHRo ZSBwYXR0ZXJuLCB3aGljaCBjYW4gYmUgYSIsCisiICByZWd1bGFyIGZpbGVuYW1lLCBvciBtYXkg Y29udGFpbiBcIipcIiBhbmQvb3IgXCI/XCIgbWV0YWNoYXJhY3RlcnMsIiwKKyIgIGFyZSB0byBi ZSByZWZ1c2VkLiAgVG8gc3BlY2lmeSBtdWx0aXBsZSBwYXR0ZXJucyAodXAgdG8gOCksIHVzZSBv dXRlciIsCisiICBicmFjZXMgYXJvdW5kIHRoZSBncm91cCwgYW5kIGlubmVyIGJyYWNlcyBhcm91 bmQgZWFjaCBwYXR0ZXJuOiIsCisiICIsCisiICAgIC9FWENFUFQ6e3twYXR0ZXJuMX17cGF0dGVy bjJ9Li4ufSIsCisiICIsCisiL0ZJTEVOQU1FUzp7Q09OVkVSVEVELExJVEVSQUx9IiwKKyIgIE92 ZXJyaWRlcyB0aGUgZ2xvYmFsIFNFVCBGSUxFIE5BTUVTIHNldHRpbmcgZm9yIHRoaXMgdHJhbnNm ZXIgb25seS4iLAorIiAiLAorIi9GSUxURVI6Y29tbWFuZCIsCisiICBDYXVzZXMgdGhlIGluY29t aW5nIGZpbGUgdG8gcGFzc2VkIHRocm91Z2ggdGhlIGdpdmVuIGNvbW1hbmQgKHN0YW5kYXJkIiwK KyIgIGlucHV0L291dHB1dCBmaWx0ZXIpIGJlZm9yZSBiZWluZyB3cml0dGVuIHRvIGRpc2suIiwK KyIgIiwKKyNpZmRlZiBWTVMKKyIvSU1BR0UiLAorIiAgVHJhbnNmZXIgaW4gaW1hZ2UgbW9kZS4i LAorIiAiLAorI2VuZGlmIC8qIFZNUyAqLworI2lmZGVmIENLX0xBQkVMRUQKKyIvTEFCRUxFRCIs CisiICBWTVMgYW5kIE9TLzIgb25seTogU3BlY2lmaWVzIGxhYmVsZWQgdHJhbnNmZXIgbW9kZS4i LAorIiAiLAorI2VuZGlmIC8qIENLX0xBQkVMRUQgKi8KKworIi9NT1ZFLVRPOmRpcmVjdG9yeS1u YW1lIiwKKyIgIFNwZWNpZmllcyB0aGF0IGVhY2ggZmlsZSB0aGF0IGFycml2ZXMgc2hvdWxkIGJl IG1vdmVkIHRvIHRoZSBzcGVjaWZpZWQiLAorIiAgZGlyZWN0b3J5IGFmdGVyLCBhbmQgb25seSBp ZiwgaXQgaGFzIGJlZW4gcmVjZWl2ZWQgc3VjY2Vzc2Z1bGx5LiIsCisiICIsCisiL1BBVEhOQU1F Uzp7T0ZGLEFCU09MVVRFLFJFTEFUSVZFLEFVVE99IiwKKyIgIE92ZXJyaWRlcyB0aGUgZ2xvYmFs IFNFVCBSRUNFSVZFIFBBVEhOQU1FUyBzZXR0aW5nIGZvciB0aGlzIHRyYW5zZmVyLiIsCisiICIs CisiL1BJUEVTOntPTixPRkZ9IiwKKyIgIE92ZXJyaWRlcyB0aGUgVFJBTlNGRVIgUElQRVMgc2V0 dGluZyBmb3IgdGhpcyBjb21tYW5kIG9ubHkuICBPTiBhbGxvd3MiLAorIiAgcmVjZXB0aW9uIG9m IGZpbGVzIHdpdGggbmFtZXMgbGlrZSBcIiF0YXIgeGYgLVwiIHRvIGJlIGF1dG9tYXRpY2FsbHki LAorIiAgZGlyZWN0ZWQgdG8gYSBwaXBlbGluZS4iLAorIiAiLAorIi9RVUlFVCIsCisiICBXaGVu IHNlbmRpbmcgaW4gbG9jYWwgbW9kZSwgdGhpcyBzdXBwcmVzc2VzIHRoZSBmaWxlLXRyYW5zZmVy IGRpc3BsYXkuIiwKKyIgIiwKKyIvUkVDT1ZFUiIsCisiICBVc2VkIHRvIHJlY292ZXIgZnJvbSBh IHByZXZpb3VzbHkgaW50ZXJydXB0ZWQgdHJhbnNmZXI7IEdFVCAvUkVDT1ZFUiIsCisiICBpcyBl cXVpdmFsZW50IFJFR0VULiAgV29ya3Mgb25seSBpbiBiaW5hcnkgbW9kZS4iLAorIiAiLAorIi9S RUNVUlNJVkUiLAorIiAgVGVsbHMgdGhlIHNlcnZlciB0byBkZXNjZW5kIHRocm91Z2ggdGhlIGRp cmVjdG9yeSB0cmVlIHdoZW4gbG9jYXRpbmciLAorIiAgdGhlIGZpbGVzIHRvIGJlIHNlbnQuIiwK KyIgIiwKKyIvUkVOQU1FLVRPOnN0cmluZyIsCisiICBTcGVjaWZpZXMgdGhhdCBlYWNoIGZpbGUg dGhhdCBhcnJpdmVzIHNob3VsZCBiZSByZW5hbWVkIGFzIHNwZWNpZmllZCIsCisiICBhZnRlciwg YW5kIG9ubHkgaWYsIGl0IGhhcyBiZWVuIHJlY2VpdmVkIHN1Y2Nlc3NmdWxseS4gIFRoZSBzdHJp bmcgc2hvdWxkIiwKKyIgIG5vcm1hbGx5IGNvbnRhaW4gdmFyaWFibGVzIGxpa2UgXFx2KGZpbGVu YW1lKSBvciBcXHYoZmlsZW51bSkuIiwKKyIgIiwKKyIvVEVYVCIsCisiICBQZXJmb3JtcyB0aGlz IHRyYW5zZmVyIGluIHRleHQgbW9kZSB3aXRob3V0IGFmZmVjdGluZyB0aGUgZ2xvYmFsIiwKKyIg IHRyYW5zZmVyIG1vZGUuIiwKKyIgIiwKKyIvVFJBTlNQQVJFTlQiLAorIiAgSW5oaWJpdHMgY2hh cmFjdGVyLXNldCB0cmFuc2xhdGlvbiBvZiBpbmNvbWluZyB0ZXh0IGZpbGVzIGZvciB0aGUgZHVy YXRpb24iLAorIiAgb2YgdGhlIEdFVCBjb21tYW5kIHdpdGhvdXQgYWZmZWN0aW5nIHN1YnNlcXVl bnQgY29tbWFuZHMuIiwKKyIgIiwKKyJBbHNvIHNlZSBIRUxQIE1HRVQsIEhFTFAgU0VORCwgSEVM UCBSRUNFSVZFLCBIRUxQIFNFUlZFUiwgSEVMUCBSRU1PVEUuIiwKKyIifTsKKworc3RhdGljIGNo YXIgKmhteHhsZ1tdID0geworIlN5bnRheDogTE9HIChvciBMKSBsb2ctdHlwZSBbIGZpbGVuYW1l IFsgeyBORVcsIEFQUEVORCB9IF0gXSIsCisiICIsCisiUmVjb3JkIGluZm9ybWF0aW9uIGluIGEg bG9nIGZpbGU6IiwKKyIgIiwKKyNpZmRlZiBDS0xPR0RJQUwKKyJDWCIsCisiICBDb25uZWN0aW9u cyBtYWRlIHdpdGggU0VUIExJTkUsIFNFVCBQT1JULCBTRVQgSE9TVCwgRElBTCwgVEVMTkVULCBl dGMuIiwKKyIgIFRoZSBkZWZhdWx0IGZpbGVuYW1lIGlzIENYLkxPRyBpbiB5b3VyIGhvbWUgZGly ZWN0b3J5IGFuZCBBUFBFTkQgaXMgdGhlIiwKKyIgIGRlZmF1bHQgbW9kZSBmb3Igb3BlbmluZy4i LAorIiAiLAorI2VuZGlmIC8qIENLTE9HRElBTCAqLworI2lmZGVmIERFQlVHCisiREVCVUciLAor IiAgRGVidWdnaW5nIGluZm9ybWF0aW9uLCB0byBoZWxwIHRyYWNrIGRvd24gYnVncyBpbiB0aGUg Qy1LZXJtaXQgcHJvZ3JhbS4iLAorIiAgVGhlIGRlZmF1bHQgbG9nIG5hbWUgaXMgZGVidWcubG9n IGluIGN1cnJlbnQgZGlyZWN0b3J5LiIsCisiICIsCisjZW5kaWYgLyogREVCVUcgKi8KKyJQQUNL RVRTIiwKKyIgIEtlcm1pdCBwYWNrZXRzLCB0byBoZWxwIHdpdGggcHJvdG9jb2wgcHJvYmxlbXMu ICBUaGUgZGVmYXVsdCBmaWxlbmFtZSBpcyIsCisiICBwYWNrZXQubG9nIGluIGN1cnJlbnQgZGly ZWN0b3J5LiIsCisiICIsCisjaWZuZGVmIE5PTE9DQUwKKyJTRVNTSU9OIiwKKyIgIFJlY29yZHMg eW91ciBDT05ORUNUIHNlc3Npb24gKGRlZmF1bHQ6IHNlc3Npb24ubG9nIGluIGN1cnJlbnQgZGly ZWN0b3J5KS4iLAorIiAiLAorI2VuZGlmIC8qIE5PTE9DQUwgKi8KKyNpZmRlZiBUTE9HCisiVFJB TlNBQ1RJT05TIiwKKyIgIE5hbWVzIGFuZCBzdGF0aXN0aWNzIGFib3V0IGZpbGVzIHRyYW5zZmVy cmVkIChkZWZhdWx0OiB0cmFuc2FjdC5sb2cgaW4iLAorIiAgY3VycmVudCBkaXJlY3Rvcnk7IHNl ZSBIRUxQIFNFVCBUUkFOU0FDVElPTi1MT0cgZm9yIHRyYW5zYWN0aW9uLWxvZyBmb3JtYXQiLAor IiAgb3B0aW9ucy4pIiwKKyIgIiwKKyNlbmRpZiAvKiBUTE9HICovCisiSWYgeW91IGluY2x1ZGUg dGhlIEFQUEVORCBrZXl3b3JkIGFmdGVyIHRoZSBmaWxlbmFtZSwgdGhlIGV4aXN0aW5nIGxvZyBm aWxlLCIsCisiaWYgYW55LCBpcyBhcHBlbmRlZCB0bzsgb3RoZXJ3aXNlIGEgbmV3IGZpbGUgaXMg Y3JlYXRlZCAoZXhjZXB0IEFQUEVORCBpcyIsCisidGhlIGRlZmF1bHQgZm9yIHRoZSBjb25uZWN0 aW9uIGxvZykuICBVc2UgQ0xPU0UgPGtleXdvcmQ+IHRvIHN0b3AgbG9nZ2luZy4iLAorI2lmZGVm IE9TMk9SVU5JWAorIiAiLAorIk5vdGU6IFRoZSBmaWxlbmFtZSBjYW4gYWxzbyBiZSBhIHBpcGUs IGUuZy46IiwKKyIgIiwKKyIgIGxvZyB0cmFuc2FjdGlvbnMgfGxwciIsCisiICBsb2cgZGVidWcg e3wgZ3JlcCBcIl5URUxORVRcIiA+IGRlYnVnLmxvZ30iLAorIiAiLAorIkJyYWNlcyBhcmUgcmVx dWlyZWQgaWYgdGhlIHBpcGVsaW5lIG9yIGZpbGVuYW1lIGNvbnRhaW5zIHNwYWNlcy4iLAorI2Vu ZGlmIC8qIE9TMk9SVU5JWCAqLworIiIgfTsKKworI2lmbmRlZiBOT1NDUklQVAorc3RhdGljIGNo YXIgKmhteHhsb2dpW10gPSB7ICJcCitTeW50YXg6IFNDUklQVCB0ZXh0IiwKKyIgIEEgbGltaXRl ZCBhbmQgY3J5cHRpYyBcImxvZ2luIGFzc2lzdGFudFwiLCBjYXJyaWVkIG92ZXIgZnJvbSBvbGQg Qy1LZXJtaXQiLAorIiAgcmVsZWFzZXMgZm9yIGNvbXB0YWJpbGl0eSwgYnV0IG5vdCByZWNvbW1l bmRlZCBmb3IgdXNlLiAgSW5zdGVhZCwgcGxlYXNlIiwKKyIgIHVzZSB0aGUgZnVsbCBzY3JpcHQg cHJvZ3JhbW1pbmcgbGFuZ3VhZ2UgZGVzY3JpYmVkIGluIGNoYXB0ZXJzIDE3LTE5IG9mIiwKKyIg IFwiVXNpbmcgQy1LZXJtaXRcIi4iLAorIiAiLAorIiAgTG9naW4gdG8gYSByZW1vdGUgc3lzdGVt IHVzaW5nIHRoZSB0ZXh0IHByb3ZpZGVkLiAgVGhlIGxvZ2luIHNjcmlwdCIsCisiICBpcyBpbnRl bmRlZCB0byBvcGVyYXRlIHNpbWlsYXJseSB0byBVTklYIHV1Y3AgXCJMLnN5c1wiIGVudHJpZXMu IiwKKyIgIEEgbG9naW4gc2NyaXB0IGlzIGEgc2VxdWVuY2Ugb2YgdGhlIGZvcm06IiwKKyIgIiwK KyIgICAgZXhwZWN0IHNlbmQgW2V4cGVjdCBzZW5kXSAuIC4gLiIsCisiICIsCisiICB3aGVyZSAn ZXhwZWN0JyBpcyBhIHByb21wdCBvciBtZXNzYWdlIHRvIGJlIGlzc3VlZCBieSB0aGUgcmVtb3Rl IHNpdGUsIGFuZCIsCisiICAnc2VuZCcgaXMgdGhlIG5hbWVzLCBudW1iZXJzLCBldGMsIHRvIHJl dHVybi4gIFRoZSBzZW5kIG1heSBhbHNvIGJlIHRoZSIsCisiICBrZXl3b3JkIEVPVCB0byBzZW5k IENvbnRyb2wtRCwgb3IgQlJFQUsgKG9yIFxcXFxiKSB0byBzZW5kIGEgYnJlYWsgc2lnbmFsLiIs CisiICBMZXR0ZXJzIGluIHNlbmQgbWF5IGJlIHByZWZpeGVkIGJ5IH4gdG8gc2VuZCBzcGVjaWFs IGNoYXJhY3RlcnM6IiwKKyIgIiwKKyIgIH5iIGJhY2tzcGFjZSwgfnMgc3BhY2UsIH5xICc/Jywg fm4gbGluZWZlZWQsIH5yIHJldHVybiwgfmMgZG9uXCd0IiwKKyIgIGFwcGVuZCBhIHJldHVybiwg YW5kIH5vW29bb11dIGZvciBvY3RhbCBvZiBhIGNoYXJhY3Rlci4gIEFzIHdpdGggc29tZSIsCisi ICBVVUNQIHN5c3RlbXMsIHNlbnQgc3RyaW5ncyBhcmUgZm9sbG93ZWQgYnkgfnIgdW5sZXNzIHRo ZXkgZW5kIHdpdGggfmMuIiwKKyIgIiwKKyIgIE9ubHkgdGhlIGxhc3QgNyBjaGFyYWN0ZXJzIGlu IGVhY2ggZXhwZWN0IGFyZSBtYXRjaGVkLiAgQSBudWxsIGV4cGVjdCwiLAorIiAgZS5nLiB+MCBv ciB0d28gYWRqYWNlbnQgZGFzaGVzLCBjYXVzZXMgYSBzaG9ydCBkZWxheS4gIElmIHlvdSBleHBl Y3QiLAorIiAgdGhhdCBhIHNlcXVlbmNlIG1pZ2h0IG5vdCBhcnJpdmUsIGFzIHdpdGggdXVjcCwg Y29uZGl0aW9uYWwgc2VxdWVuY2VzIiwKKyIgIG1heSBiZSBleHByZXNzZWQgaW4gdGhlIGZvcm06 IiwKKyIgIiwKKyIgICAgLXNlbmQtZXhwZWN0Wy1zZW5kLWV4cGVjdFsuLi5dXSIsCisiICIsCisi ICB3aGVyZSBkYXNoZWQgc2VxdWVuY2VzIGFyZSBmb2xsb3dlZCBhcyBsb25nIGFzIHByZXZpb3Vz IGV4cGVjdHMgZmFpbC4iLAorIiIgfTsKKyNlbmRpZiAvKiBOT1NDUklQVCAqLworCisjaWZuZGVm IE5PRlJJTExTCitzdGF0aWMgY2hhciAqIGhteHh0eXBbXSA9IHsKKyJTeW50YXg6IFRZUEUgWyBz d2l0Y2hlcy4uLiBdIGZpbGUiLAorIiAgRGlzcGxheXMgYSBmaWxlIG9uIHRoZSBzY3JlZW4uICBQ YXVzZXMgYXV0b21hdGljYWxseSBhdCBlbmQgb2YgZWFjaCIsCisiICBzY3JlZW5mdWwgaWYgQ09N TUFORCBNT1JFLVBST01QVElORyBpcyBPTi4gIE9wdGlvbmFsIHN3aXRjaGVzOiIsCisiICIsCisi ICAvUEFHRSIsCisiICAgICBQYXVzZSBhdCB0aGUgZW5kIG9mIGVhY2ggc2NyZWVuZnVsIGV2ZW4g aWYgQ09NTUFORCBNT1JFLVBST01QVElORyBPRkYuIiwKKyIgICAgIFN5bm9ueW06IC9NT1JFIiwK KyIgIC9OT1BBR0UiLAorIiAgICAgRG9uJ3QgcGF1c2UgYXQgdGhlIGVuZCBvZiBlYWNoIHNjcmVl biBldmVuIGlmIENPTU1BTkQgTU9SRS1QUk9NUFRJTkcgT04uIgorLAorIiAgL0hFQUQ6biIsCisi ICAgICBPbmx5IHR5cGUgdGhlIGZpcnN0ICduJyBsaW5lcyBvZiB0aGUgZmlsZS4iLAorIiAgL1RB SUw6biIsCisiICAgICBPbmx5IHR5cGUgdGhlIGxhc3QgJ24nIGxpbmVzIG9mIHRoZSBmaWxlLiIs CisiICAvTUFUQ0g6cGF0dGVybiIsCisiICAgICBPbmx5IHR5cGUgbGluZXMgdGhhdCBtYXRjaCB0 aGUgZ2l2ZW4gcGF0dGVybi4gIEhFTFAgV0lMRENBUkRTIGZvciBpbmZvIiwKKyIgICAgIGluZm8g YWJvdXQgcGF0dGVybnMuICAvSEVBRCBhbmQgL1RBSUwgYXBwbHkgYWZ0ZXIgL01BVENILiIsCisi ICAvUFJFRklYOnN0cmluZyIsCisiICAgICBQcmludCB0aGUgZ2l2ZW4gc3RyaW5nIGF0IHRoZSBi ZWdpbm5pbmcgb2YgZWFjaCBsaW5lLiIsCisiICAvTlVNQkVSIiwKKyIgICAgIEFkZCBsaW5lIG51 bWJlcnMgKGNvbmZsaWN0cyB3aXRoIC9QUkVGSVgpIiwKKyIgIC9XSURUSDpudW1iZXIiLAorIiAg ICAgVHJ1bmNhdGUgZWFjaCBsaW5lIGF0IHRoZSBnaXZlbiBjb2x1bW4gbnVtYmVyIGJlZm9yZSBw cmludGluZy4iLAorI2lmZGVmIEtVSQorIiAgICAgT3Igd2hlbiBjb21iaW5lZCB3aXRoIC9HVUkg c3BlY2lmaWVzIHRoZSB3aWR0aCBvZiB0aGUgZGlhbG9nIGJveC4iLAorIiAgL0hFSUdIVDpudW1i ZXIiLAorIiAgICAgV2hlbiBjb21iaW5lZCB3aXRoIC9HVUkgc3BlY2lmaWVzIHRoZSBoZWlnaHQg b2YgdGhlIGRpYWxvZyBib3guIiwKKyIgIC9HVUk6c3RyaW5nIiwKKyIgICAgIFNwZWNpZmllcyB0 aGUgdGl0bGUgdG8gdXNlIGZvciB0aGUgZGlhbG9nIGJveC4iLAorI2VuZGlmIC8qIEtVSSAqLwor IiAgL0NPVU5UIiwKKyIgICAgIENvdW50IGxpbmVzIChhbmQgbWF0Y2hlcykgYW5kIHByaW50IHRo ZSBjb3VudChzKSBidXQgbm90IHRoZSBsaW5lcy4iLAorI2lmZGVmIFVOSUNPREUKKyIgIC9DSEFS QUNURVItU0VUOm5hbWUiLAorIiAgICAgVHJhbnNsYXRlcyBmcm9tIHRoZSBuYW1lZCBjaGFyYWN0 ZXIgc2V0LiIsCisjaWZuZGVmIE9TMgorIiAgL1RSQU5TTEFURS1UTzpuYW1lIiwKKyIgICAgIFRy YW5zbGF0ZXMgdG8gdGhlIG5hbWVkIGNoYXJhY3RlciBzZXQgKGRlZmF1bHQgPSBjdXJyZW50IGZp bGUgY2hhcnNldCkuIiwKKyNlbmRpZiAvKiBPUzIgKi8KKyIgIC9UUkFOU1BBUkVOVCIsCisiICAg ICBJbmhpYml0cyBjaGFyYWN0ZXItc2V0IHRyYW5zbGF0aW9uLiIsCisjZW5kaWYgLyogVU5JQ09E RSAqLworIiAgL09VVFBVVDpuYW1lIiwKKyIgICAgIFNlbmRzIHJlc3VsdHMgdG8gdGhlIGdpdmVu IGZpbGUuICBJZiB0aGlzIHN3aXRjaCBpcyBvbWl0dGVkLCB0aGUiLAorIiAgICAgcmVzdWx0cyBh cHBlYXIgb24geW91ciBzY3JlZW4uICBUaGlzIHN3aXRjaCBvdmVycmlkZXMgYW55IGV4cHJlc3Mg b3IiLAorIiAgICAgaW1wbGllZCAvUEFHRSBzd2l0Y2guIiwKKyIgIiwKKyJZb3UgY2FuIHVzZSBT RVQgT1BUSU9OUyBUWVBFIHRvIHNldCB0aGUgZGVmYXVsdHMgZm9yIC9QQUdFIG9yIC9OT1BBR0Ug YW5kIiwKKyIvV0lEVEguICBVc2UgU0hPVyBPUFRJT05TIHRvIHNlZSBjdXJyZW50IFRZUEUgb3B0 aW9ucy4iLAorIiIKK307CisKK3N0YXRpYyBjaGFyICogaG14eGNsZVtdID0geworIlN5bnRheDog Q0xFQVIgWyBpdGVtLW5hbWUgXSIsCisiICIsCisiQ2xlYXJzIHRoZSBuYW1lZCBpdGVtLiAgSWYg bm8gaXRlbSBpcyBuYW1lZCwgREVWSUNFLUFORC1JTlBVVCBpcyBhc3N1bWVkLiIsCisiICIsCisi ICBBTEFSTSAgICAgICAgICAgIENsZWFycyBhbnkgcGVuZGluZyBhbGFybSAoc2VlIFNFVCBBTEFS TSkuIiwKKyNpZmRlZiBDS19BUEMKKyIgIEFQQy1TVEFUVVMgICAgICAgQ2xlYXJzIEFwcGxpY2F0 aW9uIFByb2dyYW0gQ29tbWFuZCBzdGF0dXMuIiwKKyNlbmRpZiAvKiBDS19BUEMgKi8KKyNpZmRl ZiBQQVRURVJOUworIiAgQklOQVJZLVBBVFRFUk5TICBDbGVhcnMgdGhlIGZpbGUgYmluYXJ5LXBh dHRlcm5zIGxpc3QuIiwKKyNlbmRpZiAvKiBQQVRURVJOUyAqLworI2lmZGVmIE9TMgorIiAgQ09N TUFORC1TQ1JFRU4gICBDbGVhcnMgdGhlIGN1cnJlbnQgY29tbWFuZCBzY3JlZW4uIiwKKyNlbmRp ZiAvKiBPUzIgKi8KKyIgIERFVklDRSAgICAgICAgICAgQ2xlYXJzIHRoZSBjdXJyZW50IHBvcnQg b3IgbmV0d29yayBpbnB1dCBidWZmZXIuIiwKKyIgIERFVklDRS1BTkQtSU5QVVQgQ2xlYXJzIGJv dGggdGhlIGRldmljZSBhbmQgdGhlIElOUFVUIGJ1ZmZlci4iLAorIiAgRElBTC1TVEFUVVMgICAg ICBDbGVhcnMgdGhlIFxcdihkaWFsc3RhdHVzKSB2YXJpYWJsZS4iLAorIiAgXAorSU5QVVQgICAg ICAgICAgICBDbGVhcnMgdGhlIElOUFVULWNvbW1hbmQgYnVmZmVyIGFuZCB0aGUgXFx2KGlucHV0 KSB2YXJpYWJsZS4iLAorIiAgS0VZQk9BUkQtQlVGRkVSICBDbGVhcnMgdGhlIGNvbW1hbmQgdGVy bWluYWwga2V5Ym9hcmQgaW5wdXQgYnVmZmVyLiIsCisjaWZkZWYgT1MyCisiICBcCitTQ1JPTExC QUNLICAgICAgIGVtcHRpZXMgdGhlIHNjcm9sbGJhY2sgYnVmZmVyIGluY2x1ZGluZyB0aGUgY3Vy cmVudCBzY3JlZW4uIiwKKyNlbmRpZiAvKiBPUzIgKi8KKyIgIFNFTkQtTElTVCAgICAgICAgQ2xl YXJzIHRoZSBjdXJyZW50IFNFTkQgbGlzdCAoc2VlIEFERCkuIiwKKyNpZmRlZiBPUzIKKyIgIFwK K1RFUk1JTkFMLVNDUkVFTiAgQ2xlYXJzIHRoZSBjdXJyZW50IHNjcmVlbiBhIHBsYWNlcyBpdCBp bnRvIHRoZSBzY3JvbGxiYWNrLiIsCisiICAgIGJ1ZmZlci4iLAorI2VuZGlmIC8qIE9TMiAqLwor I2lmZGVmIFBBVFRFUk5TCisiICBURVhULVBBVFRFUk5TICAgIENsZWFycyB0aGUgZmlsZSB0ZXh0 LXBhdHRlcm5zIGxpc3QuIiwKKyNlbmRpZiAvKiBQQVRURVJOUyAqLworIiJ9OworI2VuZGlmIC8q IE5PRlJJTExTICovCisKK3N0YXRpYyBjaGFyICogaG14eGRhdGVbXSA9IHsKKyJTeW50YXg6IERB VEUgWyBkYXRlLXRpbWUgWyB0aW1lem9uZSBdIF0gWyBkZWx0YS10aW1lIF0iLAorIiAgUHJpbnRz IGEgZGF0ZS10aW1lIGluIHN0YW5kYXJkIGZvcm1hdDogeXl5eW1tZGRfaGg6bW06c3MuIiwKKyIg IFZhcmlvdXMgZGF0ZS10aW1lIGZvcm1hdHMgYXJlIGFjY2VwdGVkOiIsCisiICIsCisiICAuIFRo ZSBkYXRlLCBpZiBnaXZlbiwgbXVzdCBwcmVjZWRlIHRoZSB0aW1lLiIsCisiICAuIFRoZSB5ZWFy IG11c3QgYmUgZm91ciBkaWdpdHMgb3IgZWxzZSBhIDItZGlnaXQgZm9ybWF0IGRkIG1tbSB5eSwi LAorIiAgICBpbiB3aGljaCBjYXNlIGlmICh5eSA8IDUwKSB5eXl5ID0geXkgKyAyMDAwOyBlbHNl IHl5eXkgPSB5eSArIDE5MDAuIiwKKyIgIC4gSWYgdGhlIHllYXIgY29tZXMgZmlyc3QsIHRoZSBz ZWNvbmQgZmllbGQgaXMgdGhlIG1vbnRoLiIsCisiICAuIFRoZSBkYXksIG1vbnRoLCBhbmQgeWVh ciBtYXkgYmUgc2VwYXJhdGVkIGJ5IHNwYWNlcywgLywgLSwgb3IgdW5kZXJzY29yZS4iCissIiAg LiBUaGUgZGF0ZSBhbmQgdGltZSBtYXkgYmUgc2VwYXJhdGVkIGJ5IHNwYWNlcyBvciB1bmRlcnNj b3JlLiIsCisiICAuIFRoZSBtb250aCBtYXkgYmUgbnVtZXJpYyAoMSA9IEphbnVhcnkpIG9yIHNw ZWxsZWQgb3V0IG9yIGFiYnJldmlhdGVkIGluIiwKKyIgICAgRW5nbGlzaC4iLAorIiAgLiBUaGUg dGltZSBtYXkgYmUgaW4gMjQtaG91ciBmb3JtYXQgb3IgMTItaG91ciBmb3JtYXQuIiwKKyIgIC4g SWYgdGhlIGhvdXIgaXMgMTIgb3IgbGVzcywgQU0gaXMgYXNzdW1lZCB1bmxlc3MgQU0gb3IgUE0g aXMgaW5jbHVkZWQuIiwKKyIgIC4gSWYgdGhlIGRhdGUgaXMgb21pdHRlZCBidXQgYSB0aW1lIGlz IGdpdmVuLCB0aGUgY3VycmVudCBkYXRlIGlzIHN1cHBsaWVkLiIKKywKKyIgIC4gSWYgdGhlIHRp bWUgaXMgZ2l2ZW4gYnV0IGRhdGUgb21pdHRlZCwgMDA6MDA6MDAgaXMgc3VwcGxpZWQuIiwKKyIg IC4gSWYgYm90aCB0aGUgZGF0ZSBhbmQgdGltZSBhcmUgb21pdHRlZCwgdGhlIGN1cnJlbnQgZGF0 ZSBhbmQgdGltZSBhcmUiLAorIiAgICBzdXBwbGllZC4iLAorIiAiLAorIiAgVGhlIGZvbGxvd2lu ZyBzaG9ydGN1dHMgY2FuIGFsc28gYmUgdXNlZCBpbiBwbGFjZSBvZiBkYXRlczoiLAorIiAiLAor IiAgTk9XIiwKKyIgICAgU3RhbmRzIGZvciB0aGUgY3VycmVudCBkYXRlIGFuZCB0aW1lLiIsCisi ICIsCisiICBUT0RBWSIsCisiICAgIFRvZGF5J3MgZGF0ZSwgb3B0aW9uYWxseSBmb2xsb3dlZCBi eSBhIHRpbWU7IDAwOjAwOjAwIGlmIG5vIHRpbWUgZ2l2ZW4uIiwKKyIgIiwKKyIgIFlFU1RFUkRB WSIsCisiICAgIFllc3RlcmRheSdzIGRhdGUsIG9wdGlvbmFsbHkgZm9sbG93ZWQgYnkgYSB0aW1l IChkZWZhdWx0IDAwOjAwOjAwKS4iLAorIiAiLAorIiAgVE9NT1JST1ciLAorIiAgICBUb21vcnJv d3MncyBkYXRlLCBvcHRpb25hbGx5IGZvbGxvd2VkIGJ5IGEgdGltZSAoZGVmYXVsdCAwMDowMDow MCkuIiwKKyIgIiwKKyIgIFRpbWV6b25lIHNwZWNpZmljYXRpb25zIGFyZSBzaW1pbGFyIHRvIHRo b3NlIHVzZWQgaW4gZS1tYWlsIGFuZCBIVFRQIiwKKyIgICAgaGVhZGVycywgZWl0aGVyIGEgVVNB IHRpbWV6b25lIG5hbWUsIGUuZy4gRVNULCBvciBhIHNpZ25lZCBmb3VyLWRpZ2l0IiwKKyIgICAg dGltZXpvbmUgb2Zmc2V0LCB7KywtfWhobW0sIGUuZy4sIC0wNTAwOyBpdCBpcyB1c2VkIHRvIGNv bnZlcnQgZGF0ZS10aW1lLCIKKywKKyIgICAgYSBsb2NhbCB0aW1lIGluIHRoYXQgdGltZXpvbmUs IHRvIEdNVCB3aGljaCBpcyB0aGVuIGNvbnZlcnRlZCB0byB0aGUiLAorIiAgICBsb2NhbCB0aW1l IGF0IHRoZSBob3N0LiAgSWYgbm8gdGltZXpvbmUgaXMgZ2l2ZW4sIHRoZSBkYXRlLXRpbWUgaXMg bG9jYWwuIgorLCIgICAgVG8gY29udmVydCBsb2NhbCB0aW1lIChvciBhIHRpbWUgaW4gYSBzcGVj aWZpZWQgdGltZXpvbmUpIHRvIFVUQyAoR01UKSwiLAorIiAgICB1c2UgdGhlIGZ1bmN0aW9uIFxm dXRjZGF0ZSgpLiIsCisiICIsCisiICBEZWx0YSB0aW1lcyBhcmUgZ2l2ZW4gYXMgeyssLX1bbnVt YmVyIGRhdGUtdW5pdHNdW2hoWzptbVs6c3NdXV0iLAorIiAgICBBIGRhdGUgaW4gdGhlIGZ1dHVy ZS9wYXN0IHJlbGF0aXZlIHRvIHRoZSBkYXRlLXRpbWU7IGRhdGUtdW5pdHMgbWF5IGJlIiwKKyIg ICAgREFZUywgV0VFS1MsIE1PTlRIUywgWUVBUlM6ICszZGF5cywgLTd3ZWVrcywgKzM6MDAsICsx bW9udGggODowMC4iLAorIiAiLAorIkFsbCB0aGUgZm9ybWF0cyBzaG93biBhYm92ZSBhcmUgYWNj ZXB0YWJsZSBhcyBhcmd1bWVudHMgdG8gZGF0ZS10aW1lIHN3aXRjaGVzIgorLAorInN1Y2ggYXMg L0FGVEVSOiBvciAvQkVGT1JFOiwgYW5kIHRvIGZ1bmN0aW9ucyBzdWNoIGFzIFxcZmN2dGRhdGUo KSwiLAorIlxcZmRpZmZkYXRlKCksIGFuZCBcXGZ1dGNkYXRlKCksIHRoYXQgdGFrZSBkYXRlLXRp bWUgc3RyaW5ncyBhcyBhcmd1bWVudHMuIiwKKyIiCit9OworCisKKyNpZm5kZWYgTk9YRkVSCitz dGF0aWMgY2hhciAqIGhteHhzZW5bXSA9IHsKKyJTeW50YXg6IFNFTkQgKG9yIFMpIFsgc3dpdGNo ZXMuLi5dIFsgZmlsZXNwZWMgWyBhcy1uYW1lIF0gXSIsCisiICBTZW5kcyB0aGUgZmlsZSBvciBm aWxlcyBzcGVjaWZpZWQgYnkgZmlsZXNwZWMuICBJZiB0aGUgZmlsZXNwZWMgaXMgb21pdHRlZCIs CisiICB0aGUgU0VORC1MSVNUIGlzIHVzZWQgKEhFTFAgQUREIGZvciBtb3JlIGluZm8pLiAgVGhl IGZpbGVzcGVjIG1heSBjb250YWluIiwKKyIgIHdpbGRjYXJkIGNoYXJhY3RlcnMuICBBbiAnYXMt bmFtZScgbWF5IGJlIGdpdmVuIHRvIHNwZWNpZnkgdGhlIG5hbWUocykiLAorIiAgdGhlIGZpbGVz KHMpIGFyZSBzZW50IHVuZGVyOyBpZiB0aGUgYXMtbmFtZSBpcyBvbWl0dGVkLCBlYWNoIGZpbGUg aXMiLAorIiAgc2VudCB1bmRlciBpdHMgb3duIG5hbWUuICBBbHNvIHNlZSBIRUxQIE1TRU5ELCBI RUxQIFdJTERDQVJELiIsCisiICBPcHRpb25hbCBzd2l0Y2hlcyBpbmNsdWRlOiIsCisiICIsCisj aWZuZGVmIE5PU1BMCisiL0FSUkFZOjxhcnJheW5hbWU+IiwKKyIgIFNwZWNpZmllcyB0aGF0IHRo ZSBkYXRhIHRvIGJlIHNlbnQgY29tZXMgZnJvbSB0aGUgZ2l2ZW4gYXJyYXksIHN1Y2ggYXMiLAor IiAgXFwmYVtdLiAgQSByYW5nZSBtYXkgYmUgc3BlY2lmaWVkLCBlLmcuIFNFTkQgL0FSUkFZOiZh WzEwMDoxOTldLiAgTGVhdmUiLAorIiAgdGhlIGJyYWNrZXRzIGVtcHR5IG9yIG9taXQgdGhlbSBh bHRvZ2V0aGVyIHRvIHNlbmQgdGhlIHdob2xlIDEtYmFzZWQgYXJyYXkuIgorLAorIiAgSW5jbHVk ZSAvVEVYVCB0byBoYXZlIEtlcm1pdCBzdXBwbHkgYSBsaW5lIHRlcm1pbmF0b3IgYXQgdGhlIGVu ZCBvZiBlYWNoIiwKKyIgIGFycmF5IGVsZW1lbnQgKGFuZCB0cmFuc2xhdGUgY2hhcmFjdGVyIHNl dHMgaWYgY2hhcmFjdGVyLXNldCB0cmFuc2xhdGlvbnMiLAorIiAgYXJlIHNldCB1cCksIG9yIC9C SU5BUlkgdG8gdHJlYXQgdGhlIGFycmF5IGFzIG9uZSBsb25nIHN0cmluZyBvZiBjaGFyYWN0ZXJz IgorLAorIiAgdG8gYmUgc2VudCBhcy1pcy4gIElmIGFuIGFzLW5hbWUgaXMgbm90IHNwZWNpZmll ZCwgdGhlIGFycmF5IGlzIHNlbnQgd2l0aCIsCisiICB0aGUgbmFtZSBfQVJSQVlfWF8sIHdoZXJl IFwiWFwiIGlzIHJlcGxhY2VkIGJ5IGFjdHVhbCBhcnJheSBsZXR0ZXIuIiwKKyIgIiwKKyNlbmRp ZiAvKiBOT1NQTCAqLworCisiL0FTLU5BTUU6PHRleHQ+IiwKKyIgIFNwZWNpZmllcyA8dGV4dD4g YXMgdGhlIG5hbWUgdG8gc2VuZCB0aGUgZmlsZSB1bmRlciBpbnN0ZWFkIG9mIGl0cyByZWFsIiwK KyIgIG5hbWUuICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gZ2l2aW5nIGFuIGFzLW5hbWUgYWZ0ZXIg dGhlIGZpbGVzcGVjLiIsCisiICIsCisiL0JJTkFSWSIsCisiICBQZXJmb3JtcyB0aGlzIHRyYW5z ZmVyIGluIGJpbmFyeSBtb2RlIHdpdGhvdXQgYWZmZWN0aW5nIHRoZSBnbG9iYWwiLAorIiAgdHJh bnNmZXIgbW9kZS4iLAorIiAiLAorIi9URVhUIiwKKyIgIFBlcmZvcm1zIHRoaXMgdHJhbnNmZXIg aW4gdGV4dCBtb2RlIHdpdGhvdXQgYWZmZWN0aW5nIHRoZSBnbG9iYWwiLAorIiAgdHJhbnNmZXIg bW9kZS4iLAorIiAiLAorIi9UUkFOU1BBUkVOVCIsCisiICBJbmhpYml0cyBjaGFyYWN0ZXItc2V0 IHRyYW5zbGF0aW9uIGZvciB0ZXh0IGZpbGVzIGZvciB0aGUgZHVyYXRpb24gb2YiLAorIiAgdGhl IFNFTkQgY29tbWFuZCB3aXRob3V0IGFmZmVjdGluZyBzdWJzZXF1ZW50IGNvbW1hbmRzLiIsCisi ICIsCisiL05PQkFDS1VQRklMRVMiLAorIiAgU2tpcCAoZG9uJ3Qgc2VuZCkgS2VybWl0IG9yIEVN QUNTIGJhY2t1cCBmaWxlcyAoZmlsZXMgd2l0aCBuYW1lcyB0aGF0IiwKKyIgIGVuZCB3aXRoIC5+ bn4sIHdoZXJlIG4gaXMgYSBudW1iZXIpLiIsCisiICIsCisjaWZkZWYgVU5JWE9ST1NLCisiL0RP VEZJTEVTIiwKKyIgIEluY2x1ZGUgKHNlbmQpIGZpbGVzIHdob3NlIG5hbWVzIGJlZ2luIHdpdGgg XCIuXCIuIiwKKyIgIiwKKyIvTk9ET1RGSUxFUyIsCisiICBEb24ndCBzZW5kIGZpbGVzIHdob3Nl IG5hbWVzIGJlZ2luIHdpdGggXCIuXCIuIiwKKyIgIiwKKyIvRk9MTE9XTElOS1MiLAorIiAgU2Vu ZCBmaWxlcyB0aGF0IGFyZSBwb2ludGVkIHRvIGJ5IHN5bWJvbGljIGxpbmtzLiIsCisiICIsCisi L05PRk9MTE9XTElOS1MiLAorIiAgU2tpcCBvdmVyIHN5bWJvbGljIGxpbmtzIChkZWZhdWx0KS4i LAorIiAiLAorI2VuZGlmIC8qIFVOSVhPUk9TSyAqLworCisjaWZkZWYgVk1TCisiL0lNQUdFIiwK KyIgIFBlcmZvcm1zIHRoaXMgdHJhbnNmZXIgaW4gaW1hZ2UgbW9kZSB3aXRob3V0IGFmZmVjdGlu ZyB0aGUgZ2xvYmFsIiwKKyIgIHRyYW5zZmVyIG1vZGUuIiwKKyIgIiwKKyNlbmRpZiAvKiBWTVMg Ki8KKyNpZmRlZiBDS19MQUJFTEVECisiL0xBQkVMRUQiLAorIiAgUGVyZm9ybXMgdGhpcyB0cmFu c2ZlciBpbiBsYWJlbGVkIG1vZGUgd2l0aG91dCBhZmZlY3RpbmcgdGhlIGdsb2JhbCIsCisiICB0 cmFuc2ZlciBtb2RlLiIsCisiICIsCisjZW5kaWYgLyogQ0tfTEFCRUxFRCAqLworIi9DT01NQU5E IiwKKyIgIFNlbmRzIHRoZSBvdXRwdXQgZnJvbSBhIGNvbW1hbmQsIHJhdGhlciB0aGFuIHRoZSBj b250ZW50cyBvZiBhIGZpbGUuIiwKKyIgIFRoZSBmaXJzdCBcImZpbGVuYW1lXCIgb24gdGhlIFNF TkQgY29tbWFuZCBsaW5lIGlzIGludGVycHJldGVkIGFzIHRoZSBuYW1lIiwKKyIgIG9mIGEgY29t bWFuZDsgdGhlIHNlY29uZCAoaWYgYW55KSBpcyB0aGUgYXMtbmFtZS4iLAorIiAiLAorIi9GSUxF TkFNRVM6e0NPTlZFUlRFRCxMSVRFUkFMfSIsCisiICBPdmVycmlkZXMgdGhlIGdsb2JhbCBTRVQg RklMRSBOQU1FUyBzZXR0aW5nIGZvciB0aGlzIHRyYW5zZmVyIG9ubHkuIiwKKyIgIiwKKyIvUEFU SE5BTUVTOntPRkYsQUJTT0xVVEUsUkVMQVRJVkV9IiwKKyIgIE92ZXJyaWRlcyB0aGUgZ2xvYmFs IFNFVCBTRU5EIFBBVEhOQU1FUyBzZXR0aW5nIGZvciB0aGlzIHRyYW5zZmVyLiIsCisiICIsCisi L0ZJTFRFUjpjb21tYW5kIiwKKyIgIFNwZWNpZmllcyBhIGNvbW1hbmQgXAorKHN0YW5kYXJkIGlu cHV0L291dHB1dCBmaWx0ZXIpIHRvIHBhc3MgdGhlIGZpbGUgdGhyb3VnaCIsCisiICBiZWZvcmUg c2VuZGluZyBpdC4iLAorIiAiLAorIi9ERUxFVEUiLAorIiAgRGVsZXRlcyB0aGUgZmlsZSAob3Ig ZWFjaCBmaWxlIGluIHRoZSBncm91cCkgYWZ0ZXIgaXQgaGFzIGJlZW4gc2VudCIsCisiICBzdWNj ZXNzZnVsbHkgKGFwcGxpZXMgb25seSB0byByZWFsIGZpbGVzKS4iLAorIiAiLAorIi9RVUlFVCIs CisiICBXaGVuIHNlbmRpbmcgaW4gbG9jYWwgbW9kZSwgdGhpcyBzdXBwcmVzc2VzIHRoZSBmaWxl LXRyYW5zZmVyIGRpc3BsYXkuIiwKKyIgIiwKKyIvUkVDT1ZFUiIsCisiICBVc2VkIHRvIHJlY292 ZXIgZnJvbSBhIHByZXZpb3VzbHkgaW50ZXJydXB0ZWQgdHJhbnNmZXI7IFNFTkQgL1JFQ09WRVIi LAorIiAgaXMgZXF1aXZhbGVudCBSRVNFTkQgKHVzZSBpbiBiaW5hcnkgbW9kZSBvbmx5KS4iLAor IiAiLAorIi9SRUNVUlNJVkUiLAorIiAgVGVsbHMgQy1LZXJtaXQgdG8gbG9vayBub3Qgb25seSBp biB0aGUgZ2l2ZW4gb3IgY3VycmVudCBkaXJlY3RvcnkgZm9yIiwKKyIgIGZpbGVzIHRoYXQgbWF0 Y2ggdGhlIGZpbGVzcGVjLCBidXQgYWxzbyBpbiBhbGwgaXRzIHN1YmRpcmVjdG9yaWVzLCBhbmQi LAorIiAgYWxsIHRoZWlyIHN1YmRpcmVjdG9yaWVzLCBldGMuIiwKKyIgIiwKKyIvUkVOQU1FLVRP Om5hbWUiLAorIiAgVGVsbHMgQy1LZXJtaXQgdG8gcmVuYW1lIGVhY2ggc291cmNlIGZpbGUgdGhh dCBpcyBzZW50IHN1Y2Nlc3NmdWxseSB0byIsCisiICB0aGUgZ2l2ZW4gbmFtZSAodXN1YWxseSB5 b3Ugc2hvdWxkIGluY2x1ZGUgXFx2KGZpbGVuYW1lKSBpbiB0aGUgbmV3IG5hbWUsIiwKKyIgIHdo aWNoIGlzIHJlcGxhY2VkIGJ5IHRoZSBvcmlnaW5hbCBmaWxlbmFtZS4iLAorIiAiLAorIi9NT1ZF LVRPOmRpcmVjdG9yeSIsCisiICBUZWxscyBDLUtlcm1pdCB0byBtb3ZlIGVhY2ggc291cmNlIGZp bGUgdGhhdCBpcyBzZW50IHN1Y2Nlc3NmdWxseSB0byIsCisiICB0aGUgZ2l2ZW4gZGlyZWN0b3J5 LiIsCisiICIsCisiL1NUQVJUSU5HOm51bWJlciIsCisiICBTdGFydHMgc2VuZGluZyB0aGUgZmls ZSBmcm9tIHRoZSBnaXZlbiBieXRlIHBvc2l0aW9uLiIsCisiICBTRU5EIC9TVEFSVElORzpuIGZp bGVuYW1lIGlzIGVxdWl2YWxlbnQgdG8gUFNFTkQgZmlsZW5hbWUgbi4iLAorIiAiLAorIi9TVUJK RUNUOnRleHQiLAorIiAgU3BlY2lmaWVzIHRoZSBzdWJqZWN0IG9mIGFuIGVtYWlsIG1lc3NhZ2Us IHRvIGJlIHVzZWQgd2l0aCAvTUFJTC4gIElmIHRoZSIsCisiICB0ZXh0IGNvbnRhaW5zIHNwYWNl cywgaXQgbXVzdCBiZSBlbmNsb3NlZCBpbiBicmFjZXMuIiwKKyIgIiwKKyIvTUFJTDphZGRyZXNz IiwKKyIgIFNlbmRzIHRoZSBmaWxlIGFzIGUtbWFpbCB0byB0aGUgZ2l2ZW4gYWRkcmVzczsgdXNl IHdpdGggL1NVQkpFQ1Q6LiIsCisiICIsCisiL1BSSU5UOm9wdGlvbnMiLAorIiAgU2VuZHMgdGhl IGZpbGUgdG8gYmUgcHJpbnRlZCwgd2l0aCBvcHRpb25hbCBvcHRpb25zIGZvciB0aGUgcHJpbnRl ci4iLAorIiAiLAorI2lmZGVmIENLX1hZWgorIi9QUk9UT0NPTDpuYW1lIiwKKyIgIFVzZXMgdGhl IGdpdmVuIHByb3RvY29sIHRvIHNlbmQgdGhlIGZpbGUgKEtlcm1pdCwgWm1vZGVtLCBldGMpIGZv ciB0aGlzIiwKKyIgIHRyYW5zZmVyIHdpdGhvdXQgY2hhbmdpbmcgZ2xvYmFsIHByb3RvY29sLiIs CisiICIsCisjZW5kaWYgLyogQ0tfWFlaICovCisiL0FGVEVSOmRhdGUtdGltZSIsCisjaWZkZWYg Vk1TCisiICBTcGVjaWZpZXMgdGhhdCBvbmx5IHRob3NlIGZpbGVzIGNyZWF0ZWQgYWZ0ZXIgdGhl IGdpdmVuIGRhdGUtdGltZSBhcmUiLAorI2Vsc2UKKyIgIFNwZWNpZmllcyB0aGF0IG9ubHkgdGhv c2UgZmlsZXMgbW9kaWZpZWQgYWZ0ZXIgdGhlIGdpdmVuIGRhdGUtdGltZSBhcmUiLAorI2VuZGlm IC8qIFZNUyAqLworIiAgdG8gYmUgc2VudC4gIEhFTFAgREFURSBmb3IgaW5mbyBhYm91dCBkYXRl LXRpbWUgZm9ybWF0cy4iLAorIiAiLAorIi9CRUZPUkU6ZGF0ZS10aW1lIiwKKyNpZmRlZiBWTVMK KyIgIFNwZWNpZmllcyB0aGF0IG9ubHkgdGhvc2UgZmlsZXMgbW9kaWZpZWQgYmVmb3JlIHRoZSBn aXZlbiBkYXRlLXRpbWUiLAorI2Vsc2UKKyIgIFNwZWNpZmllcyB0aGF0IG9ubHkgdGhvc2UgZmls ZXMgbW9kaWZpZWQgYmVmb3JlIHRoZSBnaXZlbiBkYXRlLXRpbWUiLAorI2VuZGlmIC8qIFZNUyAq LworIiAgYXJlIHRvIGJlIHNlbnQuIiwKKyIgIiwKKyIvTk9ULUFGVEVSOmRhdGUtdGltZSIsCisj aWZkZWYgVk1TCisiICBTcGVjaWZpZXMgdGhhdCBvbmx5IHRob3NlIGZpbGVzIG1vZGlmaWVkIGF0 IG9yIGJlZm9yZSB0aGUgZ2l2ZW4gZGF0ZS10aW1lIiwKKyNlbHNlCisiICBTcGVjaWZpZXMgdGhh dCBvbmx5IHRob3NlIGZpbGVzIG1vZGlmaWVkIGF0IG9yIGJlZm9yZSB0aGUgZ2l2ZW4gZGF0ZS10 aW1lIiwKKyNlbmRpZiAvKiBWTVMgKi8KKyIgIGFyZSB0byBiZSBzZW50LiIsCisiICIsCisiL05P VC1CRUZPUkU6ZGF0ZS10aW1lIiwKKyNpZmRlZiBWTVMKKyIgIFNwZWNpZmllcyB0aGF0IG9ubHkg dGhvc2UgZmlsZXMgbW9kaWZpZWQgYXQgb3IgYWZ0ZXIgdGhlIGdpdmVuIGRhdGUtdGltZSIsCisj ZWxzZQorIiAgU3BlY2lmaWVzIHRoYXQgb25seSB0aG9zZSBmaWxlcyBtb2RpZmllZCBhdCBvciBh ZnRlciB0aGUgZ2l2ZW4gZGF0ZS10aW1lIiwKKyNlbmRpZiAvKiBWTVMgKi8KKyIgIGFyZSB0byBi ZSBzZW50LiIsCisiICIsCisiL0xBUkdFUi1USEFOOm51bWJlciIsCisiICBTcGVjaWZpZXMgdGhh dCBvbmx5IHRob3NlIGZpbGVzIGxvbmdlciB0aGFuIHRoZSBnaXZlbiBudW1iZXIgb2YgYnl0ZXMg YXJlIiwKKyIgIHRvIGJlIHNlbnQuIiwKKyIgIiwKKyIvU01BTExFUi1USEFOOm51bWJlciIsCisi ICBTcGVjaWZpZXMgdGhhdCBvbmx5IHRob3NlIGZpbGVzIHNtYWxsZXIgdGhhbiB0aGUgZ2l2ZW4g bnVtYmVyIG9mIGJ5dGVzIGFyZSIsCisiICB0byBiZSBzZW50LiIsCisiICIsCisiL0VYQ0VQVDpw YXR0ZXJuIiwKKyIgIFNwZWNpZmllcyB0aGF0IGFueSBmaWxlcyB3aG9zZSBuYW1lcyBtYXRjaCB0 aGUgcGF0dGVybiwgd2hpY2ggY2FuIGJlIGEiLAorIiAgcmVndWxhciBmaWxlbmFtZSwgb3IgbWF5 IGNvbnRhaW4gXCIqXCIgYW5kL29yIFwiP1wiIG1ldGFjaGFyYWN0ZXJzLCIsCisiICBhcmUgbm90 IHRvIGJlIHNlbnQuICBUbyBzcGVjaWZ5IG11bHRpcGxlIHBhdHRlcm5zICh1cCB0byA4KSwgdXNl IG91dGVyIiwKKyIgIGJyYWNlcyBhcm91bmQgdGhlIGdyb3VwLCBhbmQgaW5uZXIgYnJhY2VzIGFy b3VuZCBlYWNoIHBhdHRlcm46IiwKKyIgIiwKKyIgICAgL0VYQ0VQVDp7e3BhdHRlcm4xfXtwYXR0 ZXJuMn0uLi59IiwKKyIgIiwKKyIvVFlQRTp7QUxMLFRFWFQsQklOQVJZfSIsCisiICBTZW5kIG9u bHkgZmlsZXMgb2YgdGhlIGdpdmVuIHR5cGUgKHNlZSBTRVQgRklMRSBTQ0FOKS4iLAorIiAiLAor Ii9MSVNURklMRTpmaWxlbmFtZSIsCisiICBTcGVjaWZpZXMgdGhlIG5hbWUgb2YgYSBmaWxlIHRo YXQgY29udGFpbnMgdGhlIGxpc3Qgb2YgbmFtZXMgb2YgZmlsZXMiLAorIiAgdGhhdCBhcmUgdG8g YmUgc2VudC4gIFRoZSBmaWxlbmFtZXMgc2hvdWxkIGJlIGxpc3RlZCBvbmUgbmFtZSBwZXIgbGlu ZSIsCisiICBpbiB0aGlzIGZpbGUgKGJ1dCBhIG5hbWUgY2FuIGNvbnRhaW4gd2lsZGNhcmRzKS4i LAorIiAiLAorIkFsc28gc2VlIEhFTFAgUkVDRUlWRSwgSEVMUCBHRVQsIEhFTFAgU0VSVkVSLCBI RUxQIFJFTU9URS4iLAorIiJ9OworCitzdGF0aWMgY2hhciAqaG14eHJjW10gPSB7CisiU3ludGF4 OiBSRUNFSVZFIChvciBSKSBbIHN3aXRjaGVzLi4uIF0gWyBhcy1uYW1lIF0iLAorIiAgV2FpdCBm b3IgYSBmaWxlIHRvIGFycml2ZSBmcm9tIHRoZSBvdGhlciBLZXJtaXQsIHdoaWNoIG11c3QgYmUg Z2l2ZW4gYSIsCisiICBTRU5EIGNvbW1hbmQuICBJZiB0aGUgb3B0aW9uYWwgYXMtbmFtZSBpcyBn aXZlbiwgdGhlIGluY29taW5nIGZpbGUgb3IiLAorIiAgZmlsZXMgYXJlIHN0b3JlZCB1bmRlciB0 aGF0IG5hbWUsIG90aGVyd2lzZSBpdCB3aWxsIGJlIHN0b3JlZCB1bmRlciIsCisjaWZuZGVmIENL X1RNUERJUgorIiAgdGhlIG5hbWUgaXQgYXJyaXZlcyB3aXRoLiIsCisjZWxzZQorI2lmZGVmIE9T MgorIiAgdGhlIG5hbWUgaXQgYXJyaXZlcyB3aXRoLiAgSWYgdGhlIGZpbGVzcGVjIGRlbm90ZXMg YSBkaXNrIGFuZC9vciIsCisiICBkaXJlY3RvcnksIHRoZSBpbmNvbWluZyBmaWxlIG9yIGZpbGVz IHdpbGwgYmUgc3RvcmVkIHRoZXJlLiIsCisjZWxzZQorIiAgdGhlIG5hbWUgaXQgYXJyaXZlcyB3 aXRoLiAgSWYgdGhlIGZpbGVzcGVjIGRlbm90ZXMgYSBkaXJlY3RvcnksIHRoZSIsCisiICBpbmNv bWluZyBmaWxlIG9yIGZpbGVzIHdpbGwgYmUgcGxhY2VkIGluIHRoYXQgZGlyZWN0b3J5LiIsCisj ZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogQ0tfVE1QRElSICovCisiICIsCisiT3B0aW9uYWwg c3dpdGNoZXMgaW5jbHVkZToiLAorIiAiLAorIi9BUy1OQU1FOnRleHQiLAorIiAgU3BlY2lmaWVz IFwidGV4dFwiIGFzIHRoZSBuYW1lIHRvIHN0b3JlIHRoZSBpbmNvbWluZyBmaWxlIHVuZGVyLiIs CisiICBZb3UgY2FuIGFsc28gc3BlY2lmeSB0aGUgYXMtbmFtZSBhcyBhIGZpbGVuYW1lIG9uIHRo ZSBjb21tYW5kIGxpbmUuIiwKKyIgIiwKKyIvQklOQVJZIiwKKyIgIFNraXBzIHRleHQtbW9kZSBj b252ZXJzaW9ucyB1bmxlc3MgdGhlIGluY29taW5nIGZpbGUgYXJyaXZlcyB3aXRoIGJpbmFyeSIs CisiICBhdHRyaWJ1dGUiLAorIiAiLAorIi9DT01NQU5EIiwKKyIgIFJlY2VpdmVzIHRoZSBmaWxl IGludG8gdGhlIHN0YW5kYXJkIGlucHV0IG9mIGEgY29tbWFuZCwgcmF0aGVyIHRoYW4gc2F2aW5n IiwKKyIgIGl0IG9uIGRpc2suICBUaGUgL0FTLU5BTUUgb3IgdGhlIFwiZmlsZW5hbWVcIiBvbiB0 aGUgUkVDRUlWRSBjb21tYW5kIGxpbmUiLAorIiAgaXMgaW50ZXJwcmV0ZWQgYXMgdGhlIG5hbWUg b2YgYSBjb21tYW5kLiIsCisiICIsCisiL0VYQ0VQVDpwYXR0ZXJuIiwKKyIgIFNwZWNpZmllcyB0 aGF0IGFueSBmaWxlcyB3aG9zZSBuYW1lcyBtYXRjaCB0aGUgcGF0dGVybiwgd2hpY2ggY2FuIGJl IGEiLAorIiAgcmVndWxhciBmaWxlbmFtZSwgb3IgbWF5IGNvbnRhaW4gXCIqXCIgYW5kL29yIFwi P1wiIG1ldGFjaGFyYWN0ZXJzLCIsCisiICBhcmUgdG8gYmUgcmVmdXNlZC4gIFRvIHNwZWNpZnkg bXVsdGlwbGUgcGF0dGVybnMgKHVwIHRvIDgpLCB1c2Ugb3V0ZXIiLAorIiAgYnJhY2VzIGFyb3Vu ZCB0aGUgZ3JvdXAsIGFuZCBpbm5lciBicmFjZXMgYXJvdW5kIGVhY2ggcGF0dGVybjoiLAorIiAi LAorIiAgICAvRVhDRVBUOnt7cGF0dGVybjF9e3BhdHRlcm4yfS4uLn0iLAorIiAiLAorIi9GSUxF TkFNRVM6e0NPTlZFUlRFRCxMSVRFUkFMfSIsCisiICBPdmVycmlkZXMgdGhlIGdsb2JhbCBTRVQg RklMRSBOQU1FUyBzZXR0aW5nIGZvciB0aGlzIHRyYW5zZmVyIG9ubHkuIiwKKyIgIiwKKyIvRklM VEVSOmNvbW1hbmQiLAorIiAgQ2F1c2VzIHRoZSBpbmNvbWluZyBmaWxlIHRvIHBhc3NlZCB0aHJv dWdoIHRoZSBnaXZlbiBjb21tYW5kIChzdGFuZGFyZCIsCisiICBpbnB1dC9vdXRwdXQgZmlsdGVy KSBiZWZvcmUgYmVpbmcgd3JpdHRlbiB0byBkaXNrLiIsCisiICIsCisjaWZkZWYgVk1TCisiL0lN QUdFIiwKKyIgIFJlY2VpdmVzIHRoZSBmaWxlIGluIGltYWdlIG1vZGUuIiwKKyIgIiwKKyNlbmRp ZiAvKiBWTVMgKi8KKyNpZmRlZiBDS19MQUJFTEVECisiL0xBQkVMRUQiLAorIiAgU3BlY2lmaWVz IGxhYmVsZWQgdHJhbnNmZXIgbW9kZS4iLAorIiAiLAorI2VuZGlmIC8qIENLX0xBQkVMRUQgKi8K KworIi9NT1ZFLVRPOmRpcmVjdG9yeS1uYW1lIiwKKyIgIFNwZWNpZmllcyB0aGF0IGVhY2ggZmls ZSB0aGF0IGFycml2ZXMgc2hvdWxkIGJlIG1vdmVkIHRvIHRoZSBzcGVjaWZpZWQiLAorIiAgZGly ZWN0b3J5IGFmdGVyLCBhbmQgb25seSBpZiwgaXQgaGFzIGJlZW4gcmVjZWl2ZWQgc3VjY2Vzc2Z1 bGx5LiIsCisiICIsCisiL1BBVEhOQU1FUzp7T0ZGLEFCU09MVVRFLFJFTEFUSVZFLEFVVE99IiwK KyIgIE92ZXJyaWRlcyB0aGUgZ2xvYmFsIFNFVCBSRUNFSVZFIFBBVEhOQU1FUyBzZXR0aW5nIGZv ciB0aGlzIHRyYW5zZmVyLiIsCisiICIsCisiL1BJUEVTOntPTixPRkZ9IiwKKyIgIE92ZXJyaWRl cyB0aGUgVFJBTlNGRVIgUElQRVMgc2V0dGluZyBmb3IgdGhpcyBjb21tYW5kIG9ubHkuICBPTiBh bGxvd3MiLAorIiAgcmVjZXB0aW9uIG9mIGZpbGVzIHdpdGggbmFtZXMgbGlrZSBcIiF0YXIgeGYg LVwiIHRvIGJlIGF1dG9tYXRpY2FsbHkiLAorIiAgZGlyZWN0ZWQgdG8gYSBwaXBlbGluZS4iLAor IiAiLAorIi9QUk9UT0NPTDpuYW1lIiwKKyIgIFVzZSB0aGUgZ2l2ZW4gcHJvdG9jb2wgdG8gcmVj ZWl2ZSB0aGUgaW5jb21pbmcgZmlsZShzKS4iLAorIiAiLAorIi9RVUlFVCIsCisiICBXaGVuIHNl bmRpbmcgaW4gbG9jYWwgbW9kZSwgdGhpcyBzdXBwcmVzc2VzIHRoZSBmaWxlLXRyYW5zZmVyIGRp c3BsYXkuIiwKKyIgIiwKKyIvUkVDVVJTSVZFIiwKKyIgIEVxdWl2YWxlbnQgdG8gL1BBVEhOQU1F UzpSRUxBVElWRS4iLAorIiAiLAorIi9SRU5BTUUtVE86c3RyaW5nIiwKKyIgIFNwZWNpZmllcyB0 aGF0IGVhY2ggZmlsZSB0aGF0IGFycml2ZXMgc2hvdWxkIGJlIHJlbmFtZWQgYXMgc3BlY2lmaWVk IiwKKyIgIGFmdGVyLCBhbmQgb25seSBpZiwgaXQgaGFzIGJlZW4gcmVjZWl2ZWQgc3VjY2Vzc2Z1 bGx5LiAgVGhlIHN0cmluZyBzaG91bGQiLAorIiAgbm9ybWFsbHkgY29udGFpbiB2YXJpYWJsZXMg bGlrZSBcXHYoZmlsZW5hbWUpIG9yIFxcdihmaWxlbnVtKS4iLAorIiAiLAorIi9URVhUIiwKKyIg IEZvcmNlcyB0ZXh0LW1vZGUgY29udmVyc2lvbnMgdW5sZXNzIHRoZSBpbmNvbWluZyBmaWxlIGhh cyB0aGUgYmluYXJ5IiwKKyIgIGF0dHJpYnV0ZSIsCisiICIsCisiL1RSQU5TUEFSRU5UIiwKKyIg IEluaGliaXRzIGNoYXJhY3Rlci1zZXQgdHJhbnNsYXRpb24gb2YgaW5jb21pbmcgdGV4dCBmaWxl cyBmb3IgdGhlIGR1cmF0aW9uIiwKKyIgIG9mIHRoZSBSRUNFSVZFIGNvbW1hbmQgd2l0aG91dCBh ZmZlY3Rpbmcgc3Vic2VxdWVudCBjb21tYW5kcy4iLAorIiAiLAorIkFsc28gc2VlIEhFTFAgU0VO RCwgSEVMUCBHRVQsIEhFTFAgU0VSVkVSLCBIRUxQIFJFTU9URS4iLAorIiIgfTsKKworI2lmbmRl ZiBOT1JFU0VORAorc3RhdGljIGNoYXIgKmhteHhyc2VuID0gIlwKK1N5bnRheDogUkVTRU5EIGZp bGVzcGVjIFtuYW1lXVxuXG5cCisgIFJlc2VuZHMgdGhlIGZpbGUgb3IgZmlsZXMsIHdob3NlIHBy ZXZpb3VzIHRyYW5zZmVyIHdhcyBpbnRlcnJ1cHRlZC5cblwKKyAgUGlja3MgdXAgZnJvbSB3aGVy ZSBwcmV2aW91cyB0cmFuc2ZlciBsZWZ0IG9mZiwgSUYgdGhlIHJlY2VpdmVyIGtlcHQgdGhlXG5c CisgIHBhcnRpYWxseSByZWNlaXZlZCBmaWxlLiAgV29ya3Mgb25seSBmb3IgYmluYXJ5LW1vZGUg dHJhbnNmZXJzLlxuXAorICBSZXF1aXJlcyBmaWxlLXRyYW5zZmVyIHBhcnRuZXIgdG8gc3VwcG9y dCByZWNvdmVyeS4gIFN5bm9ueW06IFJFUFVULiI7CisKK3N0YXRpYyBjaGFyICpobXh4cmdldCA9 ICJcCitTeW50YXg6IFJFR0VUIGZpbGVzcGVjXG5cblwKKyAgQXNrIGEgc2VydmVyIHRvIFJFU0VO RCBhIGZpbGUgdG8gQy1LZXJtaXQuIjsKKworc3RhdGljIGNoYXIgKmhteHhwc2VuID0gIlwKK1N5 bnRheDogUFNFTkQgZmlsZXNwZWMgcG9zaXRpb24gW25hbWVdXG5cblwKKyAgSnVzdCBsaWtlIFNF TkQsIGV4Y2VwdCBzZW5kcyB0aGUgZmlsZSBzdGFydGluZyBhdCB0aGUgZ2l2ZW4gYnl0ZSBwb3Np dGlvbi4iOworI2VuZGlmIC8qIE5PUkVTRU5EICovCisKKyNpZm5kZWYgTk9NU0VORAorc3RhdGlj IGNoYXIgKmhteHhtc2VbXSA9IHsKKyJTeW50YXg6IE1TRU5EIFsgc3dpdGNoZXMuLi4gXSBmaWxl c3BlYyBbIGZpbGVzcGVjIFsgLi4uIF0gXSIsCisiICBTZW5kcyB0aGUgZmlsZXMgc3BlY2lmaWVk IGJ5IHRoZSBmaWxlc3BlY3MuICBPbmUgb3IgbW9yZSBmaWxlc3BlY3MgbWF5IGJlIiwKKyIgIGxp c3RlZCwgc2VwYXJhdGVkIGJ5IHNwYWNlcy4gIEFueSBvciBhbGwgZmlsZXNwZWNzIG1heSBjb250 YWluIHdpbGRjYXJkcyIsCisiICBhbmQgdGhleSBtYXkgYmUgaW4gZGlmZmVyZW50IGRpcmVjdG9y aWVzLiAgQWx0ZXJuYXRpdmUgbmFtZXMgY2Fubm90IGJlIiwKKyIgIGdpdmVuLiAgU3dpdGNoZXMg aW5jbHVkZSAvQklOQVJZIC9ERUxFVEUgL01BSUwgL1BST1RPQ09MIC9RVUlFVCAvUkVDT1ZFUiIs CisiICAvVEVYVCAvVFlQRTsgc2VlIEhFTFAgU0VORCBmb3IgZGVzY3JpcHRpb25zLiIsCisiIgor fTsKKyNlbmRpZiAvKiBOT01TRU5EICovCisKK3N0YXRpYyBjaGFyICpobXh4YWRkW10gPSB7Cisj aWZuZGVmIE5PTVNFTkQKKyJBREQgU0VORC1MSVNUIGZpbGVzcGVjIFsgPG1vZGU+IFsgPGFzLW5h bWU+IF0gXSIsCisiICBBZGRzIHRoZSBzcGVjaWZpZWQgZmlsZSBvciBmaWxlcyB0byB0aGUgY3Vy cmVudCBTRU5EIGxpc3QuICBVc2UgU0hPVyIsCisiICBTRU5ELUxJU1QgYW5kIENMRUFSIFNFTkQt TElTVCB0byBkaXNwbGF5IGFuZCBjbGVhciB0aGUgbGlzdDsgdXNlIFNFTkQiLAorIiAgYnkgaXRz ZWxmIHRvIHNlbmQgdGhlIGZpbGVzIGZyb20gaXQuIiwKKyIgIiwKKyNlbmRpZiAvKiBOT01TRU5E ICovCisjaWZkZWYgUEFUVEVSTlMKKyJBREQgQklOQVJZLVBBVFRFUk5TIFsgPHBhdHRlcm4+IFsg PHBhdHRlcm4+IC4uLiBdIF0iLAorIiAgQWRkcyB0aGUgcGF0dGVybihzKSwgaWYgYW55LCB0byB0 aGUgU0VUIEZJTEUgQklOQVJZLVBBVFRFUk5TIGxpc3QuIiwKKyIgIiwKKyJBREQgVEVYVC1QQVRU RVJOUyBbIDxwYXR0ZXJuPiBbIDxwYXR0ZXJuPiAuLi4gXSBdIiwKKyIgIEFkZHMgdGhlIHBhdHRl cm4ocyksIGlmIGFueSwgdG8gdGhlIFNFVCBGSUxFIFRFWFQtUEFUVEVSTlMgbGlzdC4iLAorIiAg VXNlIFNIT1cgUEFUVEVSTlMgdG8gc2VlIHRoZSBsaXN0cy4gIFNlZSBIRUxQIFNFVCBGSUxFIGZv ciBmdXJ0aGVyIGluZm8uIiwKKyNlbmRpZiAvKiBQQVRURVJOUyAqLworIiJ9OworCitzdGF0aWMg Y2hhciAqaG14eHJlbXZbXSA9IHsKKyNpZmRlZiBQQVRURVJOUworIlJFTU9WRSBCSU5BUlktUEFU VEVSTlMgWyA8cGF0dGVybj4gWyA8cGF0dGVybj4gLi4uIF0gXSIsCisiICBSZW1vdmVzIHRoZSBw YXR0ZXJuKHMpLCBpZiBhbnksIGZyb20gdGhlIFNFVCBGSUxFIEJJTkFSWS1QQVRURVJOUyBsaXN0 IiwKKyIgIiwKKyJSRU1PVkUgVEVYVC1QQVRURVJOUyBbIDxwYXR0ZXJuPiBbIDxwYXR0ZXJuPiAu Li4gXSBdIiwKKyIgIFJlbW92ZXMgdGhlIGdpdmVuIHBhdHRlcm5zIGZyb20gdGhlIFNFVCBGSUxF IFRFWFQtUEFUVEVSTlMgbGlzdC4iLAorIiAgVXNlIFNIT1cgUEFUVEVSTlMgdG8gc2VlIHRoZSBs aXN0cy4gIFNlZSBIRUxQIFNFVCBGSUxFIGZvciBmdXJ0aGVyIGluZm8uIiwKKyNlbmRpZiAvKiBQ QVRURVJOUyAqLworIiJ9OworI2VuZGlmIC8qIE5PWEZFUiAqLworCisjaWZuZGVmIE5PU0VSVkVS CitzdGF0aWMgY2hhciAqaG14eHNlciA9ICJTeW50YXg6IFNFUlZFUlxuXAorICBFbnRlciBzZXJ2 ZXIgbW9kZSBvbiB0aGUgY3VycmVudCBjb25uZWN0aW9uLiAgQWxsIGZ1cnRoZXIgY29tbWFuZHNc blwKKyAgYXJlIHRha2VuIGluIHBhY2tldCBmb3JtIGZyb20gdGhlIG90aGVyIEtlcm1pdCBwcm9n cmFtLiAgVXNlIEZJTklTSCxcblwKKyAgQllFLCBvciBSRU1PVEUgRVhJVCB0byBnZXQgQy1LZXJt aXQgb3V0IG9mIHNlcnZlciBtb2RlLiI7CisjZW5kaWYgLyogTk9TRVJWRVIgKi8KKworc3RhdGlj IGNoYXIgKmhtaHNldFtdID0geworIiAgVGhlIFNFVCBjb21tYW5kIGVzdGFibGlzaGVzIGNvbW11 bmljYXRpb24sIGZpbGUsIHNjcmlwdGluZywgb3Igb3RoZXIiLAorIiAgcGFyYW1ldGVycy4gIFRo ZSBTSE9XIGNvbW1hbmQgY2FuIGJlIHVzZWQgdG8gZGlzcGxheSB0aGUgdmFsdWVzIG9mIiwKKyIg IFNFVCBwYXJhbWV0ZXJzLiAgSGVscCBpcyBhdmFpbGFibGUgZm9yIGVhY2ggaW5kaXZpZHVhbCBw YXJhbWV0ZXI7IiwKKyIgIHR5cGUgSEVMUCBTRVQgPyB0byBzZWUgd2hhdCdzIGF2YWlsYWJsZS4i LAorIiIgfTsKKworI2lmbmRlZiBOT1NFVEtFWQorc3RhdGljIGNoYXIgKmhtaHNrZXlbXSA9IHsK KyJTeW50YXg6IFNFVCBLRVkgayB0ZXh0IiwKKyJPcjogICAgIFNFVCBLRVkgQ0xFQVIiLAorIiAg Q29uZmlndXJlIHRoZSBrZXkgd2hvc2UgXCJzY2FuIGNvZGVcIiBpcyBrIHRvIHNlbmQgdGhlIGdp dmVuIHRleHQgd2hlbiIsCisiICBwcmVzc2VkIGR1cmluZyBDT05ORUNUIG1vZGUuICBTRVQgS0VZ IENMRUFSIHJlc3RvcmVzIGFsbCB0aGUgZGVmYXVsdCIsCisiICBrZXkgbWFwcGluZ3MuICBJZiB0 aGVyZSBpcyBubyB0ZXh0LCB0aGUgZGVmYXVsdCBrZXkgYmluZGluZyBpcyByZXN0b3JlZCIsCisj aWZuZGVmIE5PQ1NFVFMKKyIgIGZvciB0aGUga2V5IGsuICBTRVQgS0VZIG1hcHBpbmdzIHRha2Ug cGxhY2UgYmVmb3JlIHRlcm1pbmFsIGNoYXJhY3Rlci1zZXQiLAorIiAgdHJhbnNsYXRpb24uIiwK KyNlbHNlCisiICB0aGUga2V5IGsuIiwKKyNlbmRpZiAvKiBOT0NTRVRTICovCisjaWZkZWYgT1My CisiICIsCisiICBUaGUgdGV4dCBtYXkgY29udGFpbiBcIlxcS3ZlcmJzXCIgdG8gZGVub3RlIGFj dGlvbnMsIHRvIHN0YW5kIGZvciBERUMiLAorIiAga2V5cGFkLCBmdW5jdGlvbiwgb3IgZWRpdGlu ZyBrZXlzLCBldGMuICBGb3IgYSBsaXN0IG9mIGF2YWlsYWJsZSBrZXlib2FyZCIsCisiICB2ZXJi cywgdHlwZSBTSE9XIEtWRVJCUy4iLAorI2VuZGlmIC8qIE9TMiAqLworIiAiLAorIiAgVG8gZmlu ZCBvdXQgdGhlIHNjYW4gY29kZSBhbmQgbWFwcGluZyBmb3IgYSBwYXJ0aWN1bGFyIGtleSwgdXNl IHRoZSIsCisiICBTSE9XIEtFWSBjb21tYW5kLiIsCisiIn07CisjZW5kaWYgLyogTk9TRVRLRVkg Ki8KKworc3RhdGljIGNoYXIgKmhteHljaGt0W10gPSB7ICJTeW50YXg6IFNFVCBCTE9DSy1DSEVD SyBudW1iZXIiLAorIiAiLAorIlR5cGUgb2YgYmxvY2sgY2hlY2sgdG8gYmUgdXNlZCBmb3IgZXJy b3IgZGV0ZWN0aW9uIG9uIGZpbGUtdHJhbnNmZXIiLAorInBhY2tldHM6IDEsIDIsIDMsIDQsIG9y IDUuICBUaGlzIGNvbW1hbmQgbXVzdCBiZSBnaXZlbiB0byB0aGUgZmlsZSIsCisic2VuZGVyIHBy aW9yIHRvIHRoZSB0cmFuc2Zlci4iLAorIiAiLAorIlR5cGUgMSBpcyBzdGFuZGFyZCBhbmQgc3Vw cG9ydGVkIGJ5IGFsbCBLZXJtaXQgcHJvdG9jb2wgaW1wbGVtZW50YXRpb25zLCIsCisiICBidXQg aXQncyBvbmx5IGEgNi1iaXQgY2hlY2tzdW0sIHJlcHJlc2VudGVkIGluIGEgc2luZ2xlIHByaW50 YWJsZSBBU0NJSSIsCisiICBjaGFyYWN0ZXIuICBJdCdzIGZpbmUgZm9yIHJlbGlhYmxlIGNvbm5l Y3Rpb25zIChlcnJvci1jb3JyZWN0aW5nIG1vZGVtcywiLAorIiAgVENQL0lQLCBldGMpIGJ1dCB0 eXBlIDMgaXMgcmVjb21tZW5kZWQgZm9yIGNvbm5lY3Rpb25zIHdoZXJlIGVycm9ycyBjYW4iLAor IiAgb2NjdXIuIiwKKyIgIiwKKyJUeXBlIDIgaXMgYSAxMi1iaXQgY2hlY2tzdW0gcmVwcmVzZW50 ZWQgaW4gdHdvIHByaW50YWJsZSBjaGFyYWN0ZXJzLiIsCisiICIsCisiVHlwZSAzIGlzIGEgMTYt Yml0IGN5Y2xpYyByZWR1bmRhbmN5IGNoZWNrLCB0aGUgc3Ryb25nZXN0IGVycm9yIiwKKyIgIGRl dGVjdGlvbiBtZXRob2Qgc3VwcG9ydGVkIGJ5IEtlcm1pdCBwcm90b2NvbCwgcmVwcmVzZW50ZWQg aW4gdGhyZWUiLAorIiAgcHJpbnRhYmxlIGNoYXJhY3RlcnMuIiwKKyIgIiwKKyJUeXBlIDQgKGFs aWFzIFwiQkxBTkstRlJFRS0yXCIpIGlzIGEgMTItYml0IGNoZWNrc3VtIGd1YXJhbnRlZWQgdG8i LAorIiAgY29udGFpbiBubyBibGFua3MgaW4gaXRzIHJlcHJlc2VudGF0aW9uOyB0aGlzIGlzIG5l ZWRlZCBmb3IgY29ubmVjdGlvbnMiLAorIiAgd2hlcmUgdHJhaWxpbmcgYmxhbmtzIGFyZSBzdHJp cHBlZCBmcm9tIGluY29taW5nIGxpbmVzIG9mIHRleHQuIiwKKyIgIiwKKyJUeXBlIDUgKGFsaWFz IFwiRk9SQ0UtM1wiKSBtZWFucyB0byBmb3JjZSBhIFR5cGUgMyBibG9jayBjaGVjayBvbiIsCisi ICBldmVyeSBwYWNrZXQsIGluY2x1ZGluZyB0aGUgZmlyc3QgcGFja2V0LCB3aGljaCBub3JtYWxs eSBoYXMgYSB0eXBlIDEiLAorIiAgYmxvY2sgY2hlY2suICBUaGlzIGlzIGZvciB1c2UgaW4gY3Jp dGljYWwgYXBwbGljYXRpb25zIG9uIG5vaXN5IiwKKyIgIGNvbm5lY3Rpb25zLiAgQXMgd2l0aCB0 eXBlcyAyLCAzLCBhbmQgNCwgaWYgdGhlIEtlcm1pdCBmaWxlIiwKKyIgIHRyYW5zZmVyIHBhcnRu ZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIHR5cGUsIHRoZSB0cmFuc2ZlciBmYWlscyIsCisiICBp bW1lZGlhdGVseSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSB0cmFuc2Zlci4iLAorIiIgfTsKKwor c3RhdGljIGNoYXIgKiBobXh5ZGViW10gPSB7CisiU3ludGF4OiBTRVQgREVCVUcgeyBTRVNTSU9O LCBPTiwgT0ZGLCBUSU1FU1RBTVAsIE1FU1NBR0VTIH0iLAorIiAiLAorIlNFVCBERUJVRyBPTiIs CisjaWZkZWYgREVCVUcKKyIgIE9wZW5zIGEgZGVidWcgbG9nIGZpbGUgbmFtZWQgZGVidWcubG9n IGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4iLAorIiAgVXNlIExPRyBERUJVRyBpZiB5b3Ugd2Fu dCBzcGVjaWZ5IGEgZGlmZmVyZW50IGxvZyBmaWxlIG5hbWUgb3IgcGF0aC4iLAorI2Vsc2UKKyIg IChIYXMgbm8gZWZmZWN0IGluIHRoaXMgdmVyc2lvbiBvZiBLZXJtaXQuKSIsCisjZW5kaWYgLyog REVCVUcgKi8KKyIgIiwKKyJTRVQgREVCVUcgT0ZGIiwKKyIgIFN0b3BzIGRlYnVnIGxvZ2dpbmcg YW5kIHNlc3Npb24gZGVidWdnaW5nLiIsCisiICIsCisiU0VUIERFQlVHIFNFU1NJT04iLAorI2lm bmRlZiBOT0xPQ0FMCisiICBEaXNwbGF5cyBjb250cm9sIGFuZCA4LWJpdCBjaGFyYWN0ZXJzIHN5 bWJvbGljYWxseSBkdXJpbmcgQ09OTkVDVCBtb2RlLiIsCisiICBFcXVpdmFsZW50IHRvIFNFVCBU RVJNSU5BTCBERUJVRyBPTi4iLAorI2Vsc2UKKyIgIChIYXMgbm8gZWZmZWN0IGluIHRoaXMgdmVy c2lvbiBvZiBLZXJtaXQuKSIsCisjZW5kaWYgLyogTk9MT0NBTCAqLworIiAiLAorIlNFVCBERUJV RyBUSU1FU1RBTVAgeyBPTiwgT0ZGIH0iLAorIiAgRW5hYmxlcy9EaXNhYmxlcyB0aW1lc3RhbXBz IG9uIGRlYnVnIGxvZyBlbnRyaWVzLiIsCisiICIsCisiU0VUIERFQlVHIE1FU1NBR0VTIHsgT04s IE9GRiwgU1RERVJSIH0gW0MtS2VybWl0IDkuMF0iLAorIiAgRW5hYmxlcy9EaXNhYmxlcyBtZXNz YWdlcyBwcmludGVkIGJ5IHRoZSBERUJVRyBjb21tYW5kLiIsCisiICBTRVQgREVCVUcgT0ZGIGNh dXNlcyBERUJVRyBtZXNzYWdlcyBub3QgdG8gYmUgcHJpbnRlZC4iLAorIiAgU0VUIERFQlVHIE9O IHNlbmRzIERFQlVHIG1lc3NhZ2VzIHRvIHN0YW5kYXJkIG91dHB1dCAoc3Rkb3V0KTsiLAorIiAg U0VUIERFQlVHIFNUREVSUiBzZW5kcyBERUJVRyBtZXNzYWdlcyB0byBzdGFuZGFyZCBlcnJvciAo c3RkZXJyKTsiLAorIiIgfTsKKworI2lmZGVmIENLX1NQRUVECitzdGF0aWMgY2hhciAqaG14eXFj dGxbXSA9IHsKKyJTeW50YXg6IFNFVCBDT05UUk9MLUNIQVJBQ1RFUiB7IFBSRUZJWEVELCBVTlBS RUZJWEVEIH0geyA8Y29kZT4uLi4sIEFMTCB9IiwKKyIgIiwKKyIgIDxjb2RlPiBpcyB0aGUgbnVt ZXJpYyBBU0NJSSBjb2RlIGZvciBhIGNvbnRyb2wgY2hhcmFjdGVyIDEtMzEsMTI3LTE1OSwyNTUu IgorLAorIiAgVGhlIHdvcmQgXCJBTExcIiBtZWFucyBhbGwgY2hhcmFjdGVycyBpbiB0aGlzIHJh bmdlLiIsCisiICIsCisiICBQUkVGSVhFRCA8Y29kZT4gbWVhbnMgdGhlIGdpdmVuIGNvbnRyb2wg Y2hhcmFjdGVyIG11c3QgYmUgY29udmVydGVkIHRvIGEiLAorIiAgcHJpbnRhYmxlIGNoYXJhY3Rl ciBhbmQgcHJlZml4ZWQsIHRoZSBkZWZhdWx0IGZvciBhbGwgY29udHJvbCBjaGFyYWN0ZXJzLiIs CisiICIsCisiICBVTlBSRUZJWEVEIDxjb2RlPiBtZWFucyB5b3UgdGhpbmsgaXQgaXMgc2FmZSB0 byBzZW5kIHRoZSBnaXZlbiBjb250cm9sIiwKKyIgIGNoYXJhY3RlciBhcy1pcywgd2l0aG91dCBh IHByZWZpeC4gIFVTRSBUSElTIE9QVElPTiBBVCBZT1VSIE9XTiBSSVNLISIsCisiICIsCisiICBT SE9XIENPTlRST0wgdG8gc2VlIGN1cnJlbnQgc2V0dGluZ3MuICBTRVQgQ09OVFJPTCBQUkVGSVhF RCBBTEwgaXMiLAorIiAgcmVjb21tZW5kZWQgZm9yIHNhZmV0eS4gIFlvdSBjYW4gaW5jbHVkZSBt dWx0aXBsZSA8Y29kZT4gdmFsdWVzIGluIG9uZSIsCisiICBjb21tYW5kLCBzZXBhcmF0ZWQgYnkg c3BhY2VzLiIsCisiIiB9OworI2VuZGlmIC8qIENLX1NQRUVEICovCisKKyNpZm5kZWYgTk9ESUFM CitzdGF0aWMgY2hhciAqaHh5bW9kbVtdID0geworIlN5bnRheDogU0VUIE1PREVNIDxwYXJhbWV0 ZXI+IDx2YWx1ZT4gLi4uIiwKKyIgIiwKKyJOb3RlOiBNYW55IG9mIHRoZSBTRVQgTU9ERU0gcGFy YW1ldGVycyBhcmUgY29uZmlndXJlZCBhdXRvbWF0aWNhbGx5IHdoZW4iLAorInlvdSBTRVQgTU9E RU0gVFlQRSwgYWNjb3JkaW5nIHRvIHRoZSBtb2RlbSdzIGNhcGFiaWxpdGllcy4gIFNIT1cgTU9E RU0gdG8iLAorInNlZSB0aGVtLiAgQWxzbyBzZWUgSEVMUCBESUFMIGFuZCBIRUxQIFNFVCBESUFM LiIsCisiICIsCisiU0VUIE1PREVNIFRZUEUgPG5hbWU+IiwKKworIiBUZWxscyBLZXJtaXQgd2hp Y2gga2luZCBvZiBtb2RlbSB5b3UgaGF2ZSwgc28gaXQgY2FuIGlzc3VlIHRoZSIsCisiIGFwcHJv cHJpYXRlIG1vZGVtLXNwZWNpZmljIGNvbW1hbmRzIGZvciBjb25maWd1cmF0aW9uLCBkaWFsaW5n LCBhbmQiLAorIiBoYW5naW5nIHVwLiAgRm9yIGEgbGlzdCBvZiB0aGUgbW9kZW0gdHlwZXMga25v d24gdG8gS2VybWl0LCB0eXBlIFwic2V0IiwKKyIgbW9kZW0gdHlwZSA/XCIuICBUaGUgZGVmYXVs dCBtb2RlbSB0eXBlIGlzIEdFTkVSSUMsIHdoaWNoIHNob3VsZCB3b3JrIiwKKyIgd2l0aCBhbnkg QVQgY29tbWFuZC1zZXQgbW9kZW0gdGhhdCBpcyBjb25maWd1cmVkIGZvciBlcnJvciBjb3JyZWN0 aW9uLCIsCisiIGRhdGEgY29tcHJlc3Npb24sIGFuZCBoYXJkd2FyZSBmbG93IGNvbnRyb2wuICBV c2UgU0VUIE1PREVNIFRZUEUgTk9ORSIsCisiIGZvciBkaXJlY3Qgc2VyaWFsLCBjb25uZWN0aW9u cy4gIFVzZSBTRVQgTU9ERU0gVFlQRSBVU0VSLURFRklORUQgdG8gdXNlIiwKKyIgYSB0eXBlIG9m IG1vZGVtIHRoYXQgaXMgbm90IGJ1aWx0IGluIHRvIEtlcm1pdCwgYW5kIHRoZW4gdXNlIFNFVCBN T0RFTSIsCisiIENBUEFCSUxJVElFUywgU0VUIE1PREVNLCBESUFMLUNPTU1BTkQsIGFuZCBTRVQg TU9ERU0gQ09NTUFORCB0byB0ZWxsIiwKKyIgS2VybWl0IGhvdyB0byBjb25maWd1cmUgYW5kIGNv bnRyb2wgaXQuIiwKKworIiAiLAorCisiU0VUIE1PREVNIENBUEFCSUxJVElFUyA8bGlzdD4iLAor IiAgVXNlIHRoaXMgY29tbWFuZCBmb3IgY2hhbmdpbmcgS2VybWl0J3MgaWRlYSBvZiB5b3VyIG1v ZGVtJ3MgY2FwYWJpbGl0aWVzLCIsCisiICBmb3IgZXhhbXBsZSwgaWYgeW91ciBtb2RlbSBpcyBz dXBwb3NlZCB0byBoYXZlIGJ1aWx0LWluIGVycm9yIGNvcnJlY3Rpb24iLAorIiAgYnV0IGluIGZh Y3QgZG9lcyBub3QuICBBbHNvIHVzZSB0aGlzIGNvbW1hbmQgdG8gZGVmaW5lIHRoZSBjYXBhYmls aXRpZXMiLAorIiAgb2YgYSBVU0VSLURFRklORUQgbW9kZW0uICBDYXBhYmlsaXRpZXMgYXJlOiIs CisiICIsCisiICAgIEFUICAgICAgQVQtY29tbWFuZHMiLAorIiAgICBEQyAgICAgIGRhdGEtY29t cHJlc3Npb24iLAorIiAgICBFQyAgICAgIGVycm9yLWNvcnJlY3Rpb24iLAorIiAgICBIV0ZDICAg IGhhcmR3YXJlLWZsb3ciLAorIiAgICBJVFUgICAgIHYyNWJpcy1jb21tYW5kcyIsCisiICAgIFNX RkMgICAgc29mdHdhcmUtZmxvdyIsCisiICAgIEtTICAgICAga2VybWl0LXNwb29mIiwKKyIgICAg U0IgICAgICBzcGVlZC1idWZmZXJpbmciLAorIiAgICBUQiAgICAgIFRlbGViaXQiLAorIiAiLAor IlNFVCBNT0RFTSBDQVJSSUVSLVdBVENIIHsgQVVUTywgT04sIE9GRiB9IiwKKyIgIFN5bm9ueW0g Zm9yIFNFVCBDQVJSSUVSLVdBVENIIChxLnYuKSIsCisiICIsCisiU0VUIE1PREVNIENPTVBSRVNT SU9OIHsgT04sIE9GRiB9IiwKKyIgIEVuYWJsZXMvZGlzYWJsZXMgdGhlIG1vZGVtJ3MgZGF0YSBj b21wcmVzc2lvbiBmZWF0dXJlLCBpZiBhbnkuIiwKKyIgIiwKKyJTRVQgTU9ERU0gRElBTC1DT01N QU5EIDx0ZXh0PiIsCisiICBUaGUgdGV4dCByZXBsYWNlcyBLZXJtaXQncyBidWlsdC1pbiBtb2Rl bSBkaWFsaW5nIGNvbW1hbmQuICBJdCBtdXN0IiwKKyIgIGluY2x1ZGUgJyVzJyAocGVyY2VudCBz KSBhcyBhIHBsYWNlLWhvbGRlciBmb3IgdGhlIHRlbGVwaG9uZSBudW1iZXJzIiwKKyIgIGdpdmVu IGluIHlvdXIgRElBTCBjb21tYW5kcy4iLAorIiAiLAorIlNFVCBNT0RFTSBFUlJPUi1DT1JSRUNU SU9OIHsgT04sIE9GRiB9IiwKKyIgIEVuYWJsZXMvZGlzYWJsZXMgdGhlIG1vZGVtJ3MgZXJyb3It Y29ycmVjdGlvbiBmZWF0dXJlLCBpZiBhbnkuIiwKKyIgIiwKKyJTRVQgTU9ERU0gRVNDQVBFLUNI QVJBQ1RFUiBudW1iZXIiLAorIiAgTnVtZXJpYyBBU0NJSSB2YWx1ZSBvZiBtb2RlbSdzIGVzY2Fw ZSBjaGFyYWN0ZXIsIGUuZy4gNDMgZm9yICcrJy4iLAorIiAgRm9yIEhheWVzLWNvbXBhdGlibGUg bW9kZW1zLCBLZXJtaXQgdXNlcyB0aHJlZSBjb3BpZXMsIGUuZy4gXCIrKytcIi4iLAorIiAiLAor IlNFVCBNT0RFTSBGTE9XLUNPTlRST0wge0FVVE8sIE5PTkUsIFJUUy9DVFMsIFhPTi9YT0ZGfSIs CisiICBTZWxlY3RzIHRoZSB0eXBlIG9mIGxvY2FsIGZsb3cgY29udHJvbCB0byBiZSB1c2VkIGJ5 IHRoZSBtb2RlbS4iLAorIiAiLAorIlNFVCBNT0RFTSBIQU5HVVAtTUVUSE9EIHsgTU9ERU0tQ09N TUFORCwgUlMyMzItU0lHTkFMLCBEVFIgfSIsCisiICBIb3cgaGFuZ3VwIG9wZXJhdGlvbnMgc2hv dWxkIGJlIGRvbmUuICBNT0RFTS1DT01NQU5EIG1lYW5zIHRyeSB0byIsCisiICBlc2NhcGUgYmFj ayB0byB0aGUgbW9kZW0ncyBjb21tYW5kIHByb2Nlc3NvciBhbmQgZ2l2ZSBhIG1vZGVtLXNwZWNp ZmljIiwKKyIgIGhhbmd1cCBjb21tYW5kLiAgUlMyMzItU0lHTkFMIG1lYW5zIHR1cm4gb2ZmIHRo ZSBEVFIgc2lnbmFsLiAgRFRSIGlzIGEiLAorIiAgc3lub255bSBmb3IgUlMyMzItU0lHTkFMLiIs CisiICIsCisiU0VUIE1PREVNIEtFUk1JVC1TUE9PRiB7T04sIE9GRn0iLAorIiAgSWYgdGhlIHNl bGVjdGVkIG1vZGVtIHR5cGUgc3VwcG9ydHMgdGhlIEtlcm1pdCBwcm90b2NvbCBkaXJlY3RseSwi LAorIiAgdXNlIHRoaXMgY29tbWFuZCB0byB0dXJuIGl0cyBLZXJtaXQgcHJvdG9jb2wgZnVuY3Rp b24gb24gb3Igb2ZmLiIsCisiICIsCisiU0VUIE1PREVNIE1BWElNVU0tU1BFRUQgPG51bWJlcj4i LAorIiAgU3BlY2lmeSB0aGUgbWF4aW11bSBpbnRlcmZhY2Ugc3BlZWQgZm9yIHRoZSBtb2RlbS4i LAorIiAiLAorIlNFVCBNT0RFTSBOQU1FIDx0ZXh0PiIsCisiICBEZXNjcmlwdGl2ZSBuYW1lIGZv ciBhIFVTRVItREVGSU5FRCBtb2RlbS4iLAorIiAiLAorIlNFVCBNT0RFTSBTUEVBS0VSIHtPTiwg T0ZGfSIsCisiICBUdXJucyB0aGUgbW9kZW0ncyBzcGVha2VyIG9uIG9yIG9mZiBkdXJpbmcgZGlh bGluZy4iLAorIiAiLAorIlNFVCBNT0RFTSBTUEVFRC1NQVRDSElORyB7T04sIE9GRn0iLAorIiAg T04gbWVhbnMgdGhhdCBDLUtlcm1pdCBjaGFuZ2VzIGl0cyBzZXJpYWwgaW50ZXJmYWNlIHNwZWVk IHRvIGFncmVlIHdpdGgiLAorIiAgdGhlIHNwZWVkIHJlcG9ydGVkIGJ5IHRoZSBtb2RlbSdzIENP Tk5FQ1QgbWVzc2FnZSwgaWYgYW55LiAgT0ZGIG1lYW5zIiwKKyIgIEtlcm1pdCBzaG91bGQgbm90 IGNoYW5nZSBpdHMgaW50ZXJmYWNlIHNwZWVkLiIsCisiICIsCisiU0VUIE1PREVNIFZPTFVNRSB7 TE9XLCBNRURJVU0sIEhJR0h9IiwKKyIgIFNlbGVjdHMgdGhlIGRlc2lyZWQgbW9kZW0gc3BlYWtl ciB2b2x1bWUgZm9yIHdoZW4gdGhlIHNwZWFrZXIgaXMgT04uIiwKKyIgIiwKKyJTRVQgTU9ERU0g Q09NTUFORCBjb21tYW5kcyBhcmUgdXNlZCB0byBvdmVycmlkZSBidWlsdC1pbiBtb2RlbSBjb21t YW5kcyBmb3IiLAorImVhY2ggbW9kZW0gdHlwZSwgb3IgdG8gZmlsbCBpbiBjb21tYW5kcyBmb3Ig dGhlIFVTRVItREVGSU5FRCBtb2RlbSB0eXBlLiIsCisiT21pdHRpbmcgdGhlIG9wdGlvbmFsIFsg dGV4dCBdIHJlc3RvcmVzIHRoZSBidWlsdC1pbiBtb2RlbS1zcGVjaWZpYyBjb21tYW5kLCIsCisi aWYgYW55OiIsCisiICIsCisiU0VUIE1PREVNIENPTU1BTkQgQVVUT0FOU1dFUiB7T04sIE9GRn0g WyB0ZXh0IF0iLAorIiAgTW9kZW0gY29tbWFuZHMgdG8gdHVybiBhdXRvYW5zd2VyIG9uIGFuZCBv ZmYuIiwKKyIgIiwKKyJTRVQgTU9ERU0gQ09NTUFORCBDT01QUkVTU0lPTiB7T04sIE9GRn0gWyB0 ZXh0IF0iLAorIiAgTW9kZW0gY29tbWFuZHMgdG8gdHVybiBkYXRhIGNvbXByZXNzaW9uIG9uIGFu ZCBvZmYuIiwKKyIgIiwKKyJTRVQgTU9ERU0gQ09NTUFORCBFUlJPUi1DT1JSRUNUSU9OIHtPTiwg T0ZGfSBbIHRleHQgXSIsCisiICBNb2RlbSBjb21tYW5kcyB0byB0dXJuIGVycm9yIGNvcnJlY3Rp b24gb24gYW5kIG9mZi4iLAorIiAiLAorIlNFVCBNT0RFTSBDT01NQU5EIEhBTkdVUCBbIHRleHQg XSIsCisiICBDb21tYW5kIHRoYXQgdGVsbHMgdGhlIG1vZGVtIHRvIGhhbmcgdXAgdGhlIGNvbm5l Y3Rpb24uIiwKKyIgIiwKKyJTRVQgTU9ERU0gQ09NTUFORCBJR05PUkUtRElBTFRPTkUgWyB0ZXh0 IF0iLAorIiAgQ29tbWFuZCB0aGF0IHRlbGxzIHRoZSBtb2RlbSBub3QgdG8gd2FpdCBmb3IgZGlh bHRvbmUgYmVmb3JlIGRpYWxpbmcuIiwKKyIgIiwKKyJTRVQgTU9ERU0gQ09NTUFORCBJTklULVNU UklORyBbIHRleHQgXSIsCisiICBUaGUgJ3RleHQnIGlzIGEgcmVwbGFjZW1lbnQgZm9yIEMtS2Vy bWl0J3MgYnVpbHQtaW4gaW5pdGlhbGl6YXRpb24gY29tbWFuZCIsCisiICBmb3IgdGhlIG1vZGVt LiIsCisiICIsCisiU0VUIE1PREVNIENPTU1BTkQgUFJFRElBTC1JTklUIFsgdGV4dCBdIiwKKyIg IEEgc2Vjb25kIElOSVQtU1RSSU5HIHRoYXQgaXMgdG8gYmUgc2VudCB0byB0aGUgbW9kZW0ganVz dCBwcmlvciB0byBcCitkaWFsaW5nLiIsCisiICIsCisiU0VUIE1PREVNIENPTU1BTkQgSEFSRFdB UkUtRkxPVyBbIHRleHQgXSIsCisiICBNb2RlbSBjb21tYW5kIHRvIGVuYWJsZSBoYXJkd2FyZSBm bG93IGNvbnRyb2wgKFJUUy9DVFMpIGluIHRoZSBtb2RlbS4iLAorIiAiLAorIlNFVCBNT0RFTSBD T01NQU5EIFNPRlRXQVJFLUZMT1cgWyB0ZXh0IF0iLAorIiAgTW9kZW0gY29tbWFuZCB0byBlbmFi bGUgbG9jYWwgc29mdHdhcmUgZmxvdyBjb250cm9sIChYb24vWG9mZikgaW4gbW9kZW0uIiwKKyIg IiwKKyJTRVQgTU9ERU0gQ09NTUFORCBTUEVBS0VSIHsgT04sIE9GRiB9IFsgdGV4dCBdIiwKKyIg IE1vZGVtIGNvbW1hbmQgdG8gdHVybiB0aGUgbW9kZW0ncyBzcGVha2VyIG9uIG9yIG9mZi4iLAor IiAiLAorIlNFVCBNT0RFTSBDT01NQU5EIE5PLUZMT1ctQ09OVFJPTCBbIHRleHQgXSIsCisiICBN b2RlbSBjb21tYW5kIHRvIGRpc2FibGUgbG9jYWwgZmxvdyBjb250cm9sIGluIHRoZSBtb2RlbS4i LAorIiAiLAorIlNFVCBNT0RFTSBDT01NQU5EIFBVTFNFIFsgdGV4dCBdIiwKKyIgIE1vZGVtIGNv bW1hbmQgdG8gc2VsZWN0IHB1bHNlIGRpYWxpbmcuIiwKKyIgIiwKKyJTRVQgTU9ERU0gQ09NTUFO RCBUT05FIFsgdGV4dCBdIiwKKyIgIE1vZGVtIGNvbW1hbmQgdG8gc2VsZWN0IHRvbmUgZGlhbGlu Zy4iLAorIiAiLAorIlNFVCBNT0RFTSBDT01NQU5EIFZPTFVNRSB7IExPVywgTUVESVVNLCBISUdI IH0gWyB0ZXh0IF0iLAorIiAgTW9kZW0gY29tbWFuZCB0byBzZXQgdGhlIG1vZGVtJ3Mgc3BlYWtl ciB2b2x1bWUuIiwKKyIifTsKKworc3RhdGljIGNoYXIgKmhteHlkaWFsW10gPSB7CisiVGhlIFNF VCBESUFMIGNvbW1hbmQgZXN0YWJsaXNoZXMgb3IgY2hhbmdlcyBhbGwgcGFyYW1ldGVycyByZWxh dGVkIHRvIiwKKyJkaWFsaW5nIHRoZSB0ZWxlcGhvbmUuICBBbHNvIHNlZSBIRUxQIERJQUwgYW5k IEhFTFAgU0VUIE1PREVNLiAgVXNlIFNIT1ciLAorIkRJQUwgdG8gZGlzcGxheSBhbGwgb2YgdGhl IFNFVCBESUFMIHZhbHVlcy4iLAorIiAiLAorIlNFVCBESUFMIENPVU5UUlktQ09ERSA8bnVtYmVy PiIsCisiICBUZWxscyBLZXJtaXQgdGhlIHRlbGVwaG9uaWMgY291bnRyeS1jb2RlIG9mIHRoZSBj b3VudHJ5IHlvdSBhcmUgZGlhbGluZyIsCisiICBmcm9tLCBzbyBpdCBjYW4gdGVsbCB3aGV0aGVy IGEgcG9ydGFibGUtZm9ybWF0IHBob25lIG51bWJlciBmcm9tIHlvdXIiLAorIiAgZGlhbGluZyBk aXJlY3Rvcnkgd2lsbCByZXN1bHQgaW4gYSBuYXRpb25hbCBvciBhbiBpbnRlcm5hdGlvbmFsIGNh bGwuIiwKKyIgIEV4YW1wbGVzOiAxIGZvciBVU0EsIENhbmFkYSwgUHVlcnRvIFJpY28sIGV0Yzsg NyBmb3IgUnVzc2lhLCAzOSBmb3IgSXRhbHksIiwKKyIgIDM1MSBmb3IgUG9ydHVnYWwsIDQ3IGZv ciBOb3J3YXksIDQ0IGZvciB0aGUgVUssIDk3MiBmb3IgSXNyYWVsLCA4MSBmb3IiLAorIiAgSmFw YW4sIC4uLiIsCisiICIsCisiICBJZiB5b3UgaGF2ZSBub3QgYWxyZWFkeSBzZXQgeW91ciBESUFM IElOVEwtUFJFRklYIGFuZCBMRC1QUkVGSVgsIHRoZW4gdGhpcyIsCisiICBjb21tYW5kIHNldHMg ZGVmYXVsdCB2YWx1ZXMgZm9yIHRoZW06IDAxMSBhbmQgMSwgcmVzcGVjdGl2ZWx5LCBmb3IgY291 bnRyeSIsCisiICBjb2RlIDE7IDAwIGFuZCAwLCByZXNwZWN0aXZlbHksIGZvciBhbGwgb3RoZXIg Y291bnRyeSBjb2Rlcy4gIElmIHRoZXNlIGFyZSIsCisiICBub3QgeW91ciB0cnVlIGludGVybmF0 aW9uYWwgYW5kIGxvbmctZGlzdGFuY2UgZGlhbGluZyBwcmVmaXhlcywgdGhlbiB5b3UiLAorIiAg c2hvdWxkIGZvbGxvdyB0aGlzIGNvbW1hbmQgYnkgRElBTCBJTlRMLVBSRUZJWCBhbmQgTEQtUFJF RklYIHRvIGxldCBLZXJtaXQiLAorIiAga25vdyB3aGF0IHRoZXkgcmVhbGx5IGFyZS4iLAorIiAi LAorIlNFVCBESUFMIEFSRUEtQ09ERSBbIDxudW1iZXI+IF0iLAorIiAgVGVsbHMgS2VybWl0IHRo ZSBhcmVhIG9yIGNpdHkgY29kZSB0aGF0IHlvdSBhcmUgZGlhbGluZyBmcm9tLCBzbyBpdCBjYW4i LAorIiAgdGVsbCB3aGV0aGVyIGEgcG9ydGFibGUtZm9ybWF0IHBob25lIG51bWJlciBmcm9tIHRo ZSBkaWFsaW5nIGRpcmVjdG9yeSBpcyIsCisiICBsb2NhbCBvciBsb25nIGRpc3RhbmNlLiAgQmUg Y2FyZWZ1bCBub3QgdG8gaW5jbHVkZSB5b3VyIGxvbmctZGlzdGFuY2UiLAorIiAgZGlhbGluZyBw cmVmaXggYXMgcGFydCBvZiB5b3VyIGFyZWEgY29kZTsgZm9yIGV4YW1wbGUsIHRoZSBhcmVhIGNv ZGUgZm9yIiwKKyIgIGNlbnRyYWwgTG9uZG9uIGlzIDE3MSwgbm90IDAxNzEuIiwKKyIgIiwKKyJT RVQgRElBTCBDT05GSVJNQVRJT04ge09OLCBPRkZ9IiwKKyIgIEtlcm1pdCBkb2VzIHZhcmlvdXMg dHJhbnNmb3JtYXRpb25zIG9uIGEgdGVsZXBob25lIG51bWJlciByZXRyaWV2ZWQgZnJvbSIsCisi ICB0aGUgZGlhbGluZyBkaXJlY3RvcnkgcHJpb3IgdG8gZGlhbGluZyAodXNlIExPT0tVUCA8bmFt ZT4gdG8gc2VlIHRoZW0pLiIsCisiICBJbiBjYXNlIHRoZSByZXN1bHQgbWlnaHQgYmUgd3Jvbmcs IHlvdSBjYW4gdXNlIFNFVCBESUFMIENPTkZJUk0gT04gdG8gaGF2ZSIsCisiICBLZXJtaXQgYXNr IHlvdSBpZiBpdCBpcyBPSyB0byBkaWFsIHRoZSBudW1iZXIsIGFuZCBpZiBub3QsIHRvIGxldCB5 b3UgdHlwZSIsCisiICBpbiBhIHJlcGxhY2VtZW50LiIsCisiICIsCisiU0VUIERJQUwgQ09OTkVD VCB7IEFVVE8sIE9OLCBPRkYgfSIsCisiICBXaGV0aGVyIHRvIENPTk5FQ1QgKGVudGVyIHRlcm1p bmFsIG1vZGUpIGF1dG9tYXRpY2FsbHkgYWZ0ZXIgc3VjY2Vzc2Z1bGx5IiwKKyIgIGRpYWxpbmcu ICBPTiBtZWFucyB0byBkbyB0aGlzOyBPRkYgbWVhbnMgbm90IHRvLiAgQVVUTyAodGhlIGRlZmF1 bHQpIG1lYW5zIiwKKyIgIGRvIGl0IGlmIHRoZSBESUFMIGNvbW1hbmQgd2FzIGdpdmVuIGludGVy YWN0aXZlbHksIGJ1dCBkb24ndCBkbyBpdCBpZiB0aGUiLAorIiAgRElBTCBjb21tYW5kIHdhcyBp c3N1ZWQgZnJvbSBhIG1hY3JvIG9yIGNvbW1hbmQgZmlsZS4gIElmIHlvdSBzcGVjaWZ5IE9OIiwK KyIgIG9yIEFVVE8sIHlvdSBtYXkgZm9sbG93IHRoaXMgYnkgb25lIG9mIHRoZSBrZXl3b3JkcyBW RVJCT1NFIG9yIFFVSUVULCB0byIsCisiICBpbmRpY2F0ZSB3aGV0aGVyIHRoZSB2ZXJib3NlIDQt bGluZSAnQ29ubmVjdGluZy4uLicgbWVzc2FnZSBpcyB0byBiZSIsCisiICBkaXNwbGF5ZWQgaWYg RElBTCBzdWNjZWVkcyBhbmQgS2VybWl0IGdvZXMgaW50byBDT05ORUNUIG1vZGUuIiwKKyIgIiwK KyJTRVQgRElBTCBDT05WRVJULURJUkVDVE9SWSB7QVNLLCBPTiwgT0ZGfSIsCisiICBUaGUgZm9y bWF0IG9mIEtlcm1pdCdzIGRpYWxpbmcgZGlyZWN0b3J5IGNoYW5nZWQgaW4gdmVyc2lvbiA1QSgx OTIpLiAgVGhpcyIsCisiICBjb21tYW5kIHRlbGxzIEtlcm1pdCB3aGF0IHRvIGRvIHdoZW4gaXQg ZW5jb3VudGVycyBhbiBvbGQtc3R5bGUgZGlyZWN0b3J5OiIsCisiICBBU0sgeW91IHdoZXRoZXIg dG8gY29udmVydCBpdCwgb3IgY29udmVydCBpdCBhdXRvbWF0aWNhbGx5IChPTiksIG9yIGxlYXZl IiwKKyIgIGl0IGFsb25lIChPRkYpLiAgT2xkLXN0eWxlIGRpcmVjdG9yaWVzIGNhbiBzdGlsbCBi ZSB1c2VkIHdpdGhvdXQiLAorIiAgY29udmVyc2lvbiwgYnV0IHRoZSBwYXJpdHkgYW5kIHNwZWVk IGZpZWxkcyBhcmUgaWdub3JlZC4iLAorIiAiLAorIlNFVCBESUFMIERJUkVDVE9SWSBbIGZpbGVu YW1lIFsgZmlsZW5hbWUgWyBmaWxlbmFtZSBbIC4uLiBdIF0gXSBdIiwKKyIgIFRoZSBuYW1lKHMp IG9mIHlvdXIgZGlhbGluZyBkaXJlY3RvcnkgZmlsZShzKS4gIElmIHlvdSBkbyBub3Qgc3VwcGx5 IGFueSIsCisiICBmaWxlbmFtZXMsIHRoZSAgZGlhbGluZyBkaXJlY3RvcnkgZmVhdHVyZSBpcyBk aXNhYmxlZCBhbmQgYWxsIG51bWJlcnMgYXJlIiwKKyIgIGRpYWxlZCBsaXRlcmFsbHkgYXMgZ2l2 ZW4gaW4gdGhlIERJQUwgY29tbWFuZC4gIElmIHlvdSBzdXBwbHkgbW9yZSB0aGFuIiwKKyIgIG9u ZSBkaXJlY3RvcnksIGFsbCBvZiB0aGVtIGFyZSBzZWFyY2hlZC4iLAorIiAiLAorIlNFVCBESUFM IFNPUlQge09OLCBPRkZ9IiwKKyIgIFdoZW4gbXVsdGlwbGUgZW50cmllcyBhcmUgb2J0YWluZWQg ZnJvbSB5b3VyIGRpYWxpbmcgZGlyZWN0b3J5LCB0aGV5IGFyZSIsCisiICBzb3J0ZWQgaW4gXCJj aGVhcGVzdC1maXJzdFwiIG9yZGVyLiAgSWYgdGhpcyBkb2VzIG5vdCBwcm9kdWNlIHRoZSBkZXNp cmVkIiwKKyIgIGVmZmVjdCwgU0VUIERJQUwgU09SVCBPRkYgdG8gZGlzYWJsZSBzb3J0aW5nLCBh bmQgdGhlIG51bWJlcnMgd2lsbCBiZSIsCisiICBkaWFsZWQgaW4gdGhlIG9yZGVyIGluIHdoaWNo IHRoZXkgd2VyZSBmb3VuZC4iLAorIiAiLAorIlNFVCBESUFMIERJU1BMQVkge09OLCBPRkZ9IiwK KyIgIFdoZXRoZXIgdG8gZGlzcGxheSBkaWFsaW5nIHByb2dyZXNzIG9uIHRoZSBzY3JlZW47IGRl ZmF1bHQgaXMgT0ZGLiIsCisiICIsCisiU0VUIERJQUwgSEFOR1VQIHtPTiwgT0ZGfSIsCisiICBX aGV0aGVyIHRvIGhhbmcgdXAgdGhlIHBob25lIHByaW9yIHRvIGRpYWxpbmc7IGRlZmF1bHQgaXMg T04uIiwKKyIgIiwKKyJTRVQgRElBTCBJR05PUkUtRElBTFRPTkUge09OLCBPRkZ9IiwKKyIgIFdo ZXRoZXIgdG8gaWdub3JlIGRpYWx0b25lIHdoZW4gZGlhbGluZzsgZGVmYXVsdCBpcyBPRkYuIiwK KyIgIiwKKyNpZm5kZWYgTk9TUEwKKyJTRVQgRElBTCBNQUNSTyBbIG5hbWUgXSIsCisiICBTcGVj aWZ5IHRoZSBuYW1lIG9mIGEgbWFjcm8gdG8gZXhlY3V0ZSBvbiBldmVyeSBwaG9uZSBudW1iZXIg ZGlhbGVkLCBqdXN0IiwKKyIgIHByaW9yIHRvIGRpYWxpbmcgaXQsIGluIG9yZGVyIHRvIHBlcmZv cm0gYW55IGxhc3QtbWludXRlIGFsdGVyYXRpb25zLiIsCisiICIsCisjZW5kaWYgLyogTk9TUEwg Ki8KKyJTRVQgRElBTCBNRVRIT0Qge0FVVE8sIERFRkFVTFQsIFRPTkUsIFBVTFNFfSIsCisiICBX aGV0aGVyIHRvIHVzZSB0aGUgbW9kZW0ncyBERUZBVUxUIGRpYWxpbmcgbWV0aG9kLCBvciB0byBm b3JjZSBUT05FIG9yIiwKKyIgIFBVTFNFIGRpYWxpbmcuICBBVVRPICh0aGUgZGVmYXVsdCkgbWVh bnMgdG8gY2hvb3NlIHRvbmUgb3IgcHVsc2UgZGlhbGluZyIsCisiICBiYXNlZCBvbiB0aGUgY291 bnRyeSBjb2RlLiAgKEFsc28gc2VlIFNFVCBESUFMIFRPTkUtQ09VTlRSSUVTIGFuZCBTRVQgRElB TCIsCisiICBQVUxTRS1DT1VOVFJJRVMuKSIsCisiICIsCisiU0VUIERJQUwgUEFDSU5HIG51bWJl ciIsCisiICBIb3cgbWFueSBtaWxsaXNlY29uZHMgdG8gcGF1c2UgYmV0d2VlbiBzZW5kaW5nIGVh Y2ggY2hhcmFjdGVyIHRvIHRoZSBtb2RlbSIsCisiICBkaWFsZXIuICBUaGUgZGVmYXVsdCBpcyAt MSwgbWVhbmluZyB0byB1c2UgdGhlIG51bWJlciBmcm9tIHRoZSBidWlsdC1pbiIsCisiIG1vZGVt IGRhdGFiYXNlLiIsCisiICAiLAorIlNFVCBESUFMIFBVTFNFLUNPVU5UUklFUyBbIGNjIFsgY2Mg WyAuLi4gXSBdIF0iLAorIiAgU2V0cyB0aGUgbGlzdCBvZiBjb3VudHJpZXMgaW4gd2hpY2ggcHVs c2UgZGlhbGluZyBpcyByZXF1aXJlZC4gIEVhY2ggY2MiLAorIiAgaXMgYSBjb3VudHJ5IGNvZGUu IiwKKyIgIiwKKyJTRVQgRElBTCBURVNUIHsgT04sIE9GRiB9IiwKKyIgIE9GRiBmb3Igbm9ybWFs IGRpYWxpbmcuICBTZXQgdG8gT04gdG8gdGVzdCBkaWFsaW5nIHByb2NlZHVyZXMgd2l0aG91dCIs CisiICBhY3R1YWxseSBkaWFsaW5nLiIsCisiICIsCisiU0VUIERJQUwgVE9ORS1DT1VOVFJJRVMg WyBjYyBbIGNjIFsgLi4uIF0gXSBdIiwKKyIgIFNldHMgdGhlIGxpc3Qgb2YgY291bnRyaWVzIGlu IHdoaWNoIHRvbmUgZGlhbGluZyBpcyBhdmFpbGFibGUuICBFYWNoIGNjIiwKKyIgIGlzIGEgY291 bnRyeSBjb2RlLiIsCisiICIsCisiU0VUIERJQUwgVElNRU9VVCBudW1iZXIiLAorIiAgSG93IG1h bnkgc2Vjb25kcyB0byB3YWl0IGZvciBhIGRpYWxlZCBjYWxsIHRvIGNvbXBsZXRlLiAgVXNlIHRo aXMgY29tbWFuZCIsCisiICB0byBvdmVycmlkZSB0aGUgRElBTCBjb21tYW5kJ3MgYXV0b21hdGlj IHRpbWVvdXQgY2FsY3VsYXRpb24uICBBIHZhbHVlIiwKKyIgIG9mIDAgdHVybnMgb2ZmIHRoaXMg ZmVhdHVyZSBhbmQgcmV0dXJucyB0byBLZXJtaXQncyBhdXRvbWF0aWMgZGlhbCIsCisiICB0aW1l b3V0IGNhbGN1bGF0aW9uLiIsCisiICIsCisiU0VUIERJQUwgUkVTVFJJQ1QgeyBJTlRFUk5BVElP TkFMLCBMT0NBTCwgTE9ORy1ESVNUQU5DRSwgTk9ORSB9IiwKKyIgIFByZXZlbnRzIHBsYWNpbmcg Y2FsbHMgb2YgdGhlIHR5cGUgaW5kaWNhdGVkLCBvciBncmVhdGVyLiAgRm9yIGV4YW1wbGUiLAor IiAgU0VUIERJQUwgUkVTVFJJQ1QgTE9ORyBwcmV2ZW50cyBwbGFjaW5nIG9mIGxvbmctZGlzdGFu Y2UgYW5kIGludGVybmF0aW9uYWwiLAorIiAgY2FsbHMuICBJZiB0aGlzIGNvbW1hbmQgaXMgbm90 IGdpdmVuLCB0aGVyZSBhcmUgbm8gcmVzdHJpY3Rpb25zLiAgVXNlZnVsIiwKKyIgIHdoZW4gZGlh bGluZyBhIGxpc3Qgb2YgbnVtYmVycyBmZXRjaGVkIGZyb20gYSBkaWFsaW5nIGRpcmVjdG9yeS4i LAorIiAiLAorIlNFVCBESUFMIFJFVFJJRVMgPG51bWJlcj4iLAorIiAgSG93IG1hbnkgdGltZXMg dG8gcmVkaWFsIGVhY2ggbnVtYmVyIGlmIHRoZSBkaWFsaW5nIHJlc3VsdCBpcyBidXN5IG9yIG5v IiwKKyIgIG5vIGFuc3dlciwgdW50aWwgdGhlIGNhbGwgaXMgc3VjY2Vzc2Z1bGx5IGFuc3dlcmVk LiAgVGhlIGRlZmF1bHQgaXMgMCIsCisiICBiZWNhdXNlIGF1dG9tYXRpYyByZWRpYWxpbmcgaXMg aWxsZWdhbCBpbiBzb21lIGNvdW50cmllcy4iLAorIiAiLAorIlNFVCBESUFMIElOVEVSVkFMIDxu dW1iZXI+IiwKKyIgIEhvdyBtYW55IHNlY29uZHMgdG8gcGF1c2UgYmV0d2VlbiBhdXRvbWF0aWMg cmVkaWFsIGF0dGVtcHRzOyBkZWZhdWx0IDEwLiIsCisiICIsCisiVGhlIGZvbGxvd2luZyBjb21t YW5kcyBhcHBseSB0byBhbGwgcGhvbmUgbnVtYmVycywgd2hldGhlciBnaXZlbiBsaXRlcmFsbHki LAorIm9yIGZvdW5kIGluIHRoZSBkaWFsaW5nIGRpcmVjdG9yeToiLAorIiAiLAorIlNFVCBESUFM IFBSRUZJWCBbIHRleHQgXSIsCisiICBFc3RhYmxpc2ggYSBwcmVmaXggdG8gYmUgYXBwbGllZCB0 byBhbGwgcGhvbmUgbnVtYmVycyB0aGF0IGFyZSBkaWFsZWQsIiwKKyIgIGZvciBleGFtcGxlIHRv IGRpc2FibGUgY2FsbCB3YWl0aW5nLiIsCisiICIsCisiU0VUIERJQUwgU1VGRklYIFsgdGV4dCBd IiwKKyIgIEVzdGFibGlzaCBhIHN1ZmZpeCB0byBiZSBhZGRlZCBhZnRlciBhbGwgcGhvbmUgbnVt YmVycyB0aGF0IGFyZSBkaWFsZWQuIiwKKyIgIiwKKyJUaGUgZm9sbG93aW5nIGNvbW1hbmRzIGFw cGx5IG9ubHkgdG8gcG9ydGFibGUtZm9ybWF0IG51bWJlcnMgb2J0YWluZWQgZnJvbSIsCisidGhl IGRpYWxpbmcgZGlyZWN0b3J5OyBpLmUuIG51bWJlcnMgdGhhdCBzdGFydCB3aXRoIGEgXCIrXCIg c2lnbiBhbmQiLAorImNvdW50cnkgY29kZSwgZm9sbG93ZWQgYnkgYXJlYSBjb2RlIGluIHBhcmVu dGhlc2VzLCBmb2xsb3dlZCBieSB0aGUgcGhvbmUiLAorIm51bWJlci4iLAorIiAiLAorIlNFVCBE SUFMIExDLUFSRUEtQ09ERVMgWyA8bGlzdD4gXSIsCisiICBTcGVjaWVzIGEgbGlzdCBvZiBhcmVh IGNvZGVzIHRvIHdoaWNoIGRpYWxpbmcgaXMgbG9jYWwsIGkuZS4gZG9lcyBub3QiLAorIiAgcmVx dWlyZSB0aGUgTEQtUFJFRklYLiAgVXAgdG8gMzIgYXJlYSBjb2RlcyBtYXkgYmUgbGlzdGVkLCBz ZXBhcmF0ZWQgYnkiLAorIiAgc3BhY2VzLiAgQW55IGFyZWEgY29kZXMgaW4gdGhpcyBsaXN0IHdp bGwgYmUgaW5jbHVkZWQgaW4gdGhlIGZpbmFsIGRpYWwiLAorIiAgc3RyaW5nIHNvIGRvIG5vdCBp bmNsdWRlIHlvdXIgb3duIGFyZWEgY29kZSBpZiBpdCBzaG91bGQgbm90IGJlIGRpYWxlZC4iLAor IiAiLAorIlNFVCBESUFMIExDLVBSRUZJWCBbIDx0ZXh0PiBdIiwKKyIgIFNwZWNpZmllcyBhIHBy ZWZpeCB0byBiZSBhcHBsaWVkIHRvIGxvY2FsIGNhbGxzIG1hZGUgZnJvbSBwb3J0YWJsZSBkaWFs aW5nIiwKKyIgIGRpcmVjdG9yeSBlbnRyaWVzLiAgTm9ybWFsbHkgbm8gcHJlZml4IGlzIHVzZWQg Zm9yIGxvY2FsIGNhbGxzLiIsCisiICIsCisiU0VUIERJQUwgTEMtU1VGRklYIFsgPHRleHQ+IF0i LAorIiAgU3BlY2lmaWVzIGEgc3VmZml4IHRvIGJlIGFwcGxpZWQgdG8gbG9jYWwgY2FsbHMgbWFk ZSBmcm9tIHBvcnRhYmxlIGRpYWxpbmciLAorIiAgZGlyZWN0b3J5IGVudHJpZXMuICBOb3JtYWxs eSBubyBzdWZmaXggaXMgdXNlZCBmb3IgbG9jYWwgY2FsbHMuIiwKKyIgIiwKKyJTRVQgRElBTCBM RC1QUkVGSVggWyA8dGV4dD4gXSIsCisiICBZb3VyIGxvbmctZGlzdGFuY2UgZGlhbGluZyBwcmVm aXgsIHRvIGJlIHVzZWQgd2l0aCBwb3J0YWJsZSBkaWFsaW5nIiwKKyIgIGRpcmVjdG9yeSBlbnRy aWVzIHRoYXQgcmVzdWx0IGluIGxvbmctZGlzdGFuY2UgY2FsbHMuIiwKKyIgIiwKKyJTRVQgRElB TCBMRC1TVUZGSVggWyA8dGV4dD4gXSIsCisiICBMb25nLWRpc3RhbmNlIGRpYWxpbmcgc3VmZml4 LCBpZiBhbnksIHRvIGJlIHVzZWQgd2l0aCBwb3J0YWJsZSBkaWFsaW5nIiwKKyIgIGRpcmVjdG9y eSBlbnRyaWVzIHRoYXQgcmVzdWx0IGluIGxvbmctZGlzdGFuY2UgY2FsbHMuICBUaGlzIHdvdWxk IG5vcm1hbGx5IiwKKyIgIGJlIHVzZWQgZm9yIGFwcGVuZGluZyBhIGNhbGxpbmctY2FyZCBudW1i ZXIgdG8gdGhlIHBob25lIG51bWJlci4iLAorIiAiLAorIlNFVCBESUFMIEZPUkNFLUxPTkctRElT VEFOQ0UgeyBPTiwgT0ZGIH0iLAorIiAgV2hldGhlciB0byBmb3JjZSBsb25nLWRpc3RhbmNlIGRp YWxpbmcgZm9yIGNhbGxzIHRoYXQgbm9ybWFsbHkgd291bGQgYmUiLAorIiAgbG9jYWwuICBGb3Ig dXNlIChlLmcuKSBpbiBGcmFuY2UuIiwKKyIgIiwKKyJTRVQgRElBTCBUT0xMLUZSRUUtQVJFQS1D T0RFIFsgPG51bWJlcj4gWyA8bnVtYmVyPiBbIC4uLiBdIF0gXSIsCisiICBUZWxscyBLZXJtaXQg dGhlIHRvbGwtZnJlZSBhcmVhIGNvZGUocykgaW4geW91ciBjb3VudHJ5LiIsCisiICIsCisiU0VU IERJQUwgVE9MTC1GUkVFLVBSRUZJWCBbIDx0ZXh0PiBdIiwKKyIgIFlvdSB0b2xsLWZyZWUgZGlh bGluZyBwcmVmaXgsIGluIGNhc2UgaXQgaXMgZGlmZmVyZW50IGZyb20geW91ciBsb25nLSIsCisi ICBkaXN0YW5jZSBkaWFsaW5nIHByZWZpeC4iLAorIiAiLAorIlNFVCBESUFMIElOVEwtUFJFRklY IDx0ZXh0PiIsCisiICBZb3VyIGludGVybmF0aW9uYWwgZGlhbGluZyBwcmVmaXgsIHRvIGJlIHVz ZWQgd2l0aCBwb3J0YWJsZSBkaWFsaW5nIiwKKyIgIGRpcmVjdG9yeSBlbnRyaWVzIHRoYXQgcmVz dWx0IGluIGludGVybmF0aW9uYWwgY2FsbHMuIiwKKyIgIiwKKyJTRVQgRElBTCBJTlRMLVNVRkZJ WCA8dGV4dD4iLAorIiAgSW50ZXJuYXRpb25hbCBkaWFsaW5nIHN1ZmZpeCwgaWYgYW55LCB0byBi ZSB1c2VkIHdpdGggcG9ydGFibGUgZGlhbGluZyIsCisiICBkaXJlY3RvcnkgZW50cmllcyB0aGF0 IHJlc3VsdCBpbiBpbnRlcm5hdGlvbmFsIGNhbGxzLiIsCisiICIsCisiU0VUIERJQUwgUEJYLU9V VFNJREUtUFJFRklYIDx0ZXh0PiIsCisiICBVc2UgdGhpcyB0byB0ZWxsIEtlcm1pdCBob3cgdG8g Z2V0IGFuIG91dHNpZGUgbGluZSB3aGVuIGRpYWxpbmcgZnJvbSBhIiwKKyIgIFByaXZhdGUgQnJh bmNoIEV4Y2hhbmdlIChQQlgpLiIsCisiICIsCisiU0VUIERJQUwgUEJYLUVYQ0hBTkdFIDx0ZXh0 PiBbIDx0ZXh0PiBbIC4uLiBdIF0iLAorIiAgSWYgUEJYLU9VVFNJREUtUFJFRklYIGlzIHNldCwg dGhlbiB5b3UgY2FuIHVzZSB0aGlzIGNvbW1hbmQgdG8gdGVsbCBLZXJtaXQiLAorIiAgdGhlIGxl YWRpbmcgZGlnaXRzIG9mIG9uZSBvciBtb3JlIGxvY2FsIHBob25lIG51bWJlcnMgdGhhdCBpZGVu dGlmeSBpdCBhcyIsCisiICBiZWluZyBvbiB5b3VyIFBCWCwgc28gaXQgY2FuIG1ha2UgYW4gaW50 ZXJuYWwgY2FsbCBieSBkZWxldGluZyB0aG9zZSBkaWdpdHMiCissCisiICBmcm9tIHRoZSBwaG9u ZSBudW1iZXIuIiwKKyIgIiwKKyJTRVQgRElBTCBQQlgtSU5URVJOQUwtUFJFRklYIDx0ZXh0PiIs CisiICBJZiBQQlgtRVhDSEFOR0UgaXMgc2V0LCBhbmQgS2VybWl0IGRldGVybWluZXMgZnJvbSBp dCB0aGF0IGEgY2FsbCBpcyIsCisiICBpbnRlcm5hbCwgdGhlbiB0aGlzIHByZWZpeCwgaWYgYW55 LCBpcyBhZGRlZCB0byB0aGUgbnVtYmVyIHByaW9yIHRvIiwKKyIgIFwKK2RpYWxpbmcuICBVc2Ug dGhpcyBpZiBpbnRlcm5hbCBjYWxscyBmcm9tIHlvdXIgUEJYIHJlcXVpcmUgYSBzcGVjaWFsIHBy ZWZpeC4iLAorIiIgfTsKKyNlbmRpZiAvKiBOT0RJQUwgKi8KKworc3RhdGljIGNoYXIgKmhteHlm bG9bXSA9IHsgIlN5bnRheDogU0VUIEZMT1cgWyBzd2l0Y2ggXSB2YWx1ZSIsCisiICIsCisjaWZu ZGVmIE5PTE9DQUwKKyIgIFNlbGVjdHMgdGhlIHR5cGUgb2YgZmxvdyBjb250cm9sIHRvIHVzZSBk dXJpbmcgZmlsZSB0cmFuc2ZlciwgdGVybWluYWwiLAorIiAgY29ubmVjdGlvbiwgYW5kIHNjcmlw dCBleGVjdXRpb24uIiwKKyNlbHNlCisiICBTZWxlY3RzIHRoZSB0eXBlIG9mIGZsb3cgY29udHJv bCB0byB1c2UgZHVyaW5nIGZpbGUgdHJhbnNmZXIuIiwKKyNlbmRpZiAvKiBOT0xPQ0FMICovCisi ICIsCisiICBTd2l0Y2hlcyBsZXQgeW91IGFzc29jaWF0ZSBhIHBhcnRpY3VsYXIga2luZCBvZiBm bG93IGNvbnRyb2wgd2l0aCBlYWNoIiwKKyIgIGtpbmQgb2YgY29ubmVjdGlvbjogL1JFTU9URSwg L01PREVNLCAvRElSRUNULVNFUklBTCwgL1RDUElQLCBldGM7IHR5cGUiLAorIiAgXCJzZXQgZmxv dyA/XCIgZm9yIGEgbGlzdCBvZiBhdmFpbGFibGUgc3dpdGNoZXMuICBUaGVuIHdoZW5ldmVyIHlv dSBtYWtlIiwKKyIgIGEgY29ubmVjdGlvbiwgdGhlIGFzc29jaWF0ZWQgZmxvdy1jb250cm9sIGlz IGNob3NlbiBhdXRvbWF0aWNhbGx5LiIsCisiICBUaGUgZmxvdy1jb250cm9sIHZhbHVlcyBhcmUg Tk9ORSwgS0VFUCwgWE9OL1hPRkYsIGFuZCBwb3NzaWJseSBSVFMvQ1RTIiwKKyIgIGFuZCBzb21l IG90aGVyczsgYWdhaW4sIHR5cGUgXCJzZXQgZmxvdyA/XCIgZm9yIGEgbGlzdC4gIEtFRVAgdGVs bHMgS2VybWl0IiwKKyIgIG5vdCB0byB0cnkgdG8gY2hhbmdlIHRoZSBjdXJyZW50IGZsb3ctY29u dHJvbCBtZXRob2QgZm9yIHRoZSBjb25uZWN0aW9uLiIsCisiICIsCisiICBJZiB5b3Ugb21pdCB0 aGUgc3dpdGNoIGFuZCBzaW1wbHkgc3VwcGx5IGEgdmFsdWUsIHRoaXMgdmFsdWUgYmVjb21lcyB0 aGUiLAorIiAgY3VycmVudCBmbG93IGNvbnRyb2wgdHlwZSwgb3ZlcnJpZGluZyBhbnkgZGVmYXVs dCB2YWx1ZSB0aGF0IG1pZ2h0IGhhdmUiLAorIiAgYmVlbiBjaG9zZW4gaW4geW91ciBtb3N0IHJl Y2VudCBTRVQgTElORSwgU0VUIFBPUlQsIG9yIFNFVCBIT1NULCBvciBvdGhlciIsCisiICBjb25u ZWN0aW9uLWVzdGFibGlzaG1lbnQgY29tbWFuZC4iLAorIiAiLAorIiAgVHlwZSBTSE9XIEZMT1ct Q09OVFJPTCB0byBzZWUgdGhlIGN1cnJlbnQgZGVmYXVsdHMgZm9yIGVhY2ggY29ubmVjdGlvbiB0 eXBlIgorLAorIiAgYXMgd2VsbCBhcyB0aGUgY3VycmVudCBjb25uZWN0aW9uIHR5cGUgYW5kIGZs b3ctY29udHJvbCBzZXR0aW5nLiAgU0hPVyIsCisiICBDT01NVU5JQ0FUSU9OUyBhbHNvIHNob3dz IHRoZSBjdXJyZW50IGZsb3ctY29udHJvbCBzZXR0aW5nLiIsCisiIn07CisKK3N0YXRpYyBjaGFy ICpobXh5ZltdID0geworIlN5bnRheDogU0VUIEZJTEUgcGFyYW1ldGVyIHZhbHVlIiwKKyIgIiwK KyJTZXRzIGZpbGUtcmVsYXRlZCBwYXJhbWV0ZXJzLiAgVXNlIFNIT1cgRklMRSB0byB2aWV3IHRo ZW0uICBBbHNvIHNlZSBTRVQiLAorIihhbmQgU0hPVykgVFJBTlNGRVIgYW5kIFBST1RPQ09MLiIs CisiICIsCisjaWZkZWYgVk1TCisiU0VUIEZJTEUgVFlQRSB7IFRFWFQsIEJJTkFSWSwgSU1BR0Us IExBQkVMRUQgfSIsCisjZWxzZQorI2lmZGVmIFNUUkFUVVMKKyJTRVQgRklMRSBUWVBFIHsgVEVY VCwgQklOQVJZLCBMQUJFTEVEIH0iLAorI2Vsc2UKKyNpZmRlZiBNQUMKKyJTRVQgRklMRSBUWVBF IHsgVEVYVCwgQklOQVJZLCBNQUNCSU5BUlkgfSIsCisjZWxzZQorIlNFVCBGSUxFIFRZUEUgeyBU RVhULCBCSU5BUlkgfSIsCisjZW5kaWYgLyogU1RSQVRVUyAqLworI2VuZGlmIC8qIE1BQyAqLwor I2VuZGlmIC8qIFZNUyAqLworIiAgSG93IGZpbGUgY29udGVudHMgYXJlIHRvIGJlIHRyZWF0ZWQg ZHVyaW5nIGZpbGUgdHJhbnNmZXIgaW4gdGhlIGFic2VuY2UiLAorIiAgb2YgYW55IG90aGVyIGlu ZGljYXRpb24uICBUWVBFIGNhbiBiZSBURVhUIGZvciBjb252ZXJzaW9uIG9mIHJlY29yZCBmb3Jt YXQiLAorIiAgYW5kIGNoYXJhY3RlciBzZXQsIHdoaWNoIGlzIHVzdWFsbHkgbmVlZGVkIHdoZW4g dHJhbnNmZXJyaW5nIHRleHQgZmlsZXMiLAorIiAgYmV0d2VlbiB1bmxpa2UgcGxhdGZvcm1zIChz dWNoIGFzIFVOSVggYW5kIFdpbmRvd3MpLCBvciBCSU5BUlkgZm9yIG5vIiwKKyIgIGNvbnZlcnNp b24gaWYgVFJBTlNGRVIgTU9ERSBpcyBNQU5VQUwsIHdoaWNoIGlzIG5vdCB0aGUgZGVmYXVsdC4g IFVzZSIsCisiICBCSU5BUlkgd2l0aCBUUkFOU0ZFUiBNT0RFIE1BTlVBTCBmb3IgZXhlY3V0YWJs ZSBwcm9ncmFtcyBvciBiaW5hcnkgZGF0YSBvciIsCisiICB3aGVuZXZlciB5b3Ugd2lzaCB0byBk dXBsaWNhdGUgdGhlIG9yaWdpbmFsIGNvbnRlbnRzIG9mIHRoZSBmaWxlLCBieXRlIGZvciIKKywK KyIgIGJ5dGUuICBJbiBtb3N0IG1vZGVybiBLZXJtaXQgcHJvZ3JhbXMsIHRoZSBmaWxlIHNlbmRl ciBpbmZvcm1zIHRoZSByZWNlaXZlciIKKywKKyIgIG9mIHRoZSBmaWxlIHR5cGUgYXV0b21hdGlj YWxseS4gIEhvd2V2ZXIsIHdoZW4gc2VuZGluZyBmaWxlcyBmcm9tIEMtS2VybWl0IiwKKyIgIHRv IGFuIGFuY2llbnQgb3Igbm9uLUNvbHVtYmlhIEtlcm1pdCBpbXBsZW1lbnRhdGlvbiwgeW91IG1p Z2h0IG5lZWQgdG8gc2V0IiwKKyIgIHRoZSBjb3JyZXNwb25kaW5nIGZpbGUgdHlwZSBhdCB0aGUg cmVjZWl2ZXIgYXMgd2VsbC4iLAorIiAiLAorI2lmZGVmIFZNUworIiAgRklMRSBUWVBFIHNldHRp bmdzIG9mIFRFWFQgYW5kIEJJTkFSWSBoYXZlIG5vIGVmZmVjdCB3aGVuIHNlbmRpbmcgZmlsZXMs IiwKKyIgIHNpbmNlIFZNUyBDLUtlcm1pdCBkZXRlcm1pbmVzIGVhY2ggZmlsZSdzIHR5cGUgYXV0 b21hdGljYWxseSBmcm9tIGl0cyIsCisiICByZWNvcmQgZm9ybWF0OiBiaW5hcnkgZm9yIGZpeGVk LCB0ZXh0IGZvciBvdGhlcnMuICBGb3IgaW5jb21pbmcgZmlsZXMsIiwKKyIgIHRoZXNlIHNldHRp bmdzIGFyZSBlZmZlY3RpdmUgb25seSBpbiB0aGUgYWJzZW5jZSBvZiBhIGZpbGUtdHlwZSBpbmRp Y2F0aW9uIiwKKyIgIGZyb20gdGhlIHNlbmRlci4iLAorIiAiLAorIiAgWW91IG1heSBpbmNsdWRl IGFuIG9wdGlvbmFsIHJlY29yZC1mb3JtYXQgYWZ0ZXIgdGhlIHdvcmQgQklOQVJZLiAgVGhpcyBt YXkiLAorIiAgYmUgRklYRUQgKHRoZSBkZWZhdWx0KSBvciBVTkRFRklORUQuICBVTkRFRklORUQg aXMgdXNlZCB3aGVuIHlvdSBuZWVkIHRvIiwKKyIgIHJlY2VpdmUgYmluYXJ5IGZpbGVzIGluIGJp bmFyeSBtb2RlIGFuZCBoYXZlIHRoZW0gc3RvcmVkIHdpdGggVU5ERUZJTkVEIiwKKyIgIHJlY29y ZCBmb3JtYXQsIHdoaWNoIGlzIHJlcXVpcmVkIGJ5IGNlcnRhaW4gVk1TIGFwcGxpY2F0aW9ucy4i LAorIiAiLAorIiAgVHdvIGFkZGl0aW9uYWwgVk1TIGZpbGUgdHlwZXMgYXJlIGFsc28gc3VwcG9y dGVkOiBJTUFHRSBhbmQgTEFCRUxFRC4iLAorIiAgSU1BR0UgbWVhbnMgcmF3IGJsb2NrIGkvbywg bm8gaW50ZXJmZXJlbmNlIGZyb20gUk1TLCBhcHBsaWVzIHRvIGZpbGUiLAorIiAgdHJhbnNtaXNz aW9uIG9ubHksIGFuZCBvdmVycmlkZXMgdGhlIG5vcm1hbCBhdXRvbWF0aWNhIGZpbGUgdHlwZSIs CisiICBkZXRlcm1pbmF0aW9uLiAgIExBQkVMRUQgbWVhbnMgdG8gc2VuZCBvciBpbnRlcnByZXQg Uk1TIGF0dHJpYnV0ZXMiLAorIiAgd2l0aCB0aGUgZmlsZS4iLAorIiAiLAorI2Vsc2UKKyIgIFdo ZW4gVFJBTlNGRVIgTU9ERSBpcyBBVVRPTUFUSUMgKGFzIGl0IGlzIGJ5IGRlZmF1bHQpLCB2YXJp b3VzIGF1dG9tYXRpYyIsCisiICBtZXRob2RzIChkZXBlbmRpbmcgb24gdGhlIHBsYXRmb3JtKSBh cmUgdXNlZCB0byBkZXRlcm1pbmUgd2hldGhlciBhIGZpbGUiLAorIiAgaXMgdHJhbnNmZXJyZWQg aW4gdGV4dCBvciBiaW5hcnkgbW9kZTsgdGhlc2UgbWV0aG9kcyAod2hpY2ggbWlnaHQgaW5jbHVk ZSIsCisiICBjb250ZW50IHNjYW4gKHNlZSBTRVQgRklMRSBTQ0FOIGJlbG93KSwgZmlsZW5hbWUg cGF0dGVybiBtYXRjaGluZyAoU0VUIEZJTEUiCissCisiICBQQVRURVJOUyksIGNsaWVudC9zZXJ2 ZXIgXCJraW5kcmVkLXNwaXJpdFwiIHJlY29nbml0aW9uLCBvciBzb3VyY2UgZmlsZSIsCisiICBy ZWNvcmQgZm9ybWF0KSBzdXBlcnNlZGUgdGhlIEZJTEUgVFlQRSBzZXR0aW5nIGJ1dCBjYW4sIHRo ZW1zZWx2ZXMsIGJlIiwKKyIgIHN1cGVyc2VkZWQgYnkgaW5jbHVkaW5nIGEgL0JJTkFSWSBvciAv VEVYVCBzd2l0Y2ggaW4gdGhlIFNFTkQsIEdFVCwgb3IiLAorIiAgUkVDRUlWRSBjb21tYW5kLiIs CisiICIsCisiICBXaGVuIFRSQU5TRkVSIE1PREUgaXMgTUFOVUFMLCB0aGUgYXV0b21hdGljIG1l dGhvZHMgYXJlIHNraXBwZWQgZm9yIHNlbmRpbmciCissCisiICBmaWxlczsgdGhlIEZJTEUgVFlQ RSBzZXR0aW5nIGlzIHVzZWQgaW5zdGVhZCwgd2hpY2ggY2FuIGJlIHN1cGVyc2VkZWQgb24iLAor IiAgYSBwZXItY29tbWFuZCBiYXNpcyB3aXRoIGEgL1RFWFQgb3IgL0JJTkFSWSBzd2l0Y2guIiwK KyNlbmRpZiAvKiBWTVMgKi8KKyIgIiwKKworI2lmbmRlZiBOT1hGRVIKKworIlNFVCBGSUxFIEJZ VEVTSVpFIHsgNywgOCB9IiwKKyIgIE5vcm1hbGx5IDguICBJZiA3LCBLZXJtaXQgdHJ1bmNhdGVz IHRoZSA4dGggYml0IG9mIGFsbCBmaWxlIGJ5dGVzLiIsCisiICIsCisjaWZuZGVmIE5PQ1NFVFMK KyJTRVQgRklMRSBDSEFSQUNURVItU0VUIG5hbWUiLAorIiAgVGVsbHMgdGhlIGVuY29kaW5nIG9m IHRoZSBsb2NhbCBmaWxlLCBBU0NJSSBieSBkZWZhdWx0LiIsCisiICBUaGUgbmFtZXMgSVRBTElB TiwgUE9SVFVHVUVTRSwgTk9SV0VHSUFOLCBldGMsIHJlZmVyIHRvIDctYml0IElTTy02NDYiLAor IiAgbmF0aW9uYWwgY2hhcmFjdGVyIHNldHMuICBMQVRJTjEgaXMgdGhlIDgtYml0IElTTyA4ODU5 LTEgTGF0aW4gQWxwaGFiZXQgMSIsCisiICBmb3IgV2VzdGVybiBFdXJvcGVhbiBsYW5ndWFnZXMu IiwKKyIgIE5FWFQgaXMgdGhlIDgtYml0IGNoYXJhY3RlciBzZXQgb2YgdGhlIE5lWFQgd29ya3N0 YXRpb24uIiwKKyIgIFRoZSBDUG5ubiBzZXRzIGFyZSBmb3IgUENzLiAgTUFDSU5UT1NILUxBVElO IGlzIGZvciB0aGUgTWFjaW50b3NoLiIsCisjaWZuZGVmIE5PTEFUSU4yCisiICBMQVRJTjIgaXMg SVNPIDg4NTktMiBmb3IgRWFzdGVybiBFdXJvcGVhbiBsYW5ndWFnZXMgdGhhdCBhcmUgd3JpdHRl biB3aXRoIiwKKyIgIFJvbWFuIGxldHRlcnMuICBNYXpvdmlhIGlzIGEgUEMgY29kZSBwYWdlIHVz ZWQgaW4gUG9sYW5kLiIsCisjZW5kaWYgLyogTk9MQVRJTjIgKi8KKyNpZmRlZiBDWVJJTExJQwor IiAgS09JLUNZUklMTElDLCBDWVJJTExJQy1JU08sIGFuZCBDUDg2NiBhcmUgOC1iaXQgQ3lyaWxs aWMgY2hhcmFjdGVyIHNldHMuIiwKKyIgIFNIT1JULUtPSSBpcyBhIDctYml0IEFTQ0lJIGNvZGlu ZyBmb3IgQ3lyaWxsaWMuICBCVUxHQVJJQS1QQyBpcyBhIFBDIGNvZGUiLAorIiAgcGFnZSB1c2Vk IGluIEJ1bGdhcmlhIiwKKyNlbmRpZiAvKiBDWVJJTExJQyAqLworI2lmZGVmIEhFQlJFVworIiAg SEVCUkVXLUlTTyBpcyBJU08gODg1OS04IExhdGluL0hlYnJldy4gIENQODYyIGlzIHRoZSBIZWJy ZXcgUEMgY29kZSBwYWdlLiIsCisiICBIRUJSRVctNyBpcyBsaWtlIEFTQ0lJIHdpdGggdGhlIGxv d2VyY2FzZSBsZXR0ZXJzIHJlcGxhY2VkIGJ5IEhlYnJldy4iLAorI2VuZGlmIC8qIEhFQlJFVyAq LworI2lmZGVmIEdSRUVLCisiICBHUkVFSy1JU08gaXMgSVNPIDg4NTktNyBMYXRpbi9HcmVlay4g IENQODY5IGlzIHRoZSBHcmVlayBQQyBjb2RlIHBhZ2UuIiwKKyIgIEVMT1QtOTI3IGlzIGxpa2Ug QVNDSUkgd2l0aCB0aGUgbG93ZXJjYXNlIGxldHRlcnMgcmVwbGFjZWQgYnkgR3JlZWsuIiwKKyNl bmRpZiAvKiBHUkVFSyAqLworI2lmZGVmIEtBTkpJCisiICBKQVBBTkVTRS1FVUMsIEpJUzctS0FO SkksIERFQy1LQU5KSSwgYW5kIFNISUZULUpJUy1LQU5KSSBhcmUgSmFwYW5lc2UiLAorIiAgS2Fu amkgY2hhcmFjdGVyIHNldHMuIiwKKyNlbmRpZiAvKiBLQU5KSSAqLworI2lmZGVmIFVOSUNPREUK KyIgIFVDUy0yIGlzIHRoZSAyLWJ5dGUgZm9ybSBvZiB0aGUgVW5pdmVyc2FsIENoYXJhY3RlciBT ZXQuIiwKKyIgIFVURi04IGlzIHRoZSBzZXJpYWxpemVkIGZvcm0gb2YgdGhlIFVuaXZlcnNhbCBD aGFyYWN0ZXIgU2V0LiIsCisjZW5kaWYgLyogVU5JQ09ERSAqLworIiAgVHlwZSBTRVQgRklMRSBD SEFSID8gZm9yIGEgY29tcGxldGUgbGlzdCBvZiBmaWxlIGNoYXJhY3RlciBzZXRzLiIsCisiICIs CisiU0VUIEZJTEUgREVGQVVMVCA3QklULUNIQVJBQ1RFUi1TRVQiLAorIiAgV2hlbiBhdXRvbWF0 aWNhbGx5IHN3aXRjaGluZyBhbW9uZyBkaWZmZXJlbnQga2luZHMgb2YgZmlsZXMgd2hpbGUgc2Vu ZGluZyIsCisiICB0aGlzIHRlbGxzIHRoZSBjaGFyYWN0ZXIgc2V0IHRvIGJlIHVzZWQgZm9yIDct Yml0IHRleHQgZmlsZXMuIiwKKyIgIiwKKyJTRVQgRklMRSBERUZBVUxUIDhCSVQtQ0hBUkFDVEVS LVNFVCIsCisiICBUaGlzIHRlbGxzIHRoZSBjaGFyYWN0ZXIgc2V0IHRvIGJlIHVzZWQgZm9yIDgt Yml0IHRleHQgZmlsZXMgd2hlbiIsCisiICBzd2l0Y2hpbmcgYXV0b21hdGljYWxseSBhbW9uZyBk aWZmZXJlbnQga2luZHMgb2YgZmlsZXMuIiwKKyIgIiwKKyNlbmRpZiAvKiBOT0NTRVRTICovCisK KyJTRVQgRklMRSBDT0xMSVNJT04gb3B0aW9uIiwKKyIgIFRlbGxzIHdoYXQgdG8gZG8gd2hlbiBh IGZpbGUgYXJyaXZlcyB0aGF0IGhhcyB0aGUgc2FtZSBuYW1lIGFzIiwKKyIgIGFuIGV4aXN0aW5n IGZpbGUuICBUaGUgb3B0aW9ucyBhcmU6IiwKKyIgICBCQUNLVVAgKGRlZmF1bHQpIC0gUmVuYW1l IHRoZSBvbGQgZmlsZSB0byBhIG5ldywgdW5pcXVlIG5hbWUgYW5kIHN0b3JlIiwKKyIgICAgIHRo ZSBpbmNvbWluZyBmaWxlIHVuZGVyIHRoZSBuYW1lIGl0IHdhcyBzZW50IHdpdGguIiwKKyIgICBP VkVSV1JJVEUgLSBPdmVyd3JpdGUgKHJlcGxhY2UpIHRoZSBleGlzdGluZyBmaWxlLiIsCisiICAg QVBQRU5EIC0gQXBwZW5kIHRoZSBpbmNvbWluZyBmaWxlIHRvIHRoZSBlbmQgb2YgdGhlIGV4aXN0 aW5nIGZpbGUuIiwKKyIgICBSRUpFQ1QgLSBSZWZ1c2UgYW5kL29yIGRpc2NhcmQgdGhlIGluY29t aW5nIGZpbGUgKD0gRElTQ0FSRCkuIiwKKyIgICBSRU5BTUUgLSBHaXZlIHRoZSBpbmNvbWluZyBm aWxlIGEgdW5pcXVlIG5hbWUuIiwKKyIgICBVUERBVEUgLSBBY2NlcHQgdGhlIGluY29taW5nIGZp bGUgb25seSBpZiBuZXdlciB0aGFuIHRoZSBleGlzdGluZyBmaWxlLiIsCisiICIsCisKKyJTRVQg RklMRSBERVNUSU5BVElPTiB7IERJU0ssIFBSSU5URVIsIFNDUkVFTiwgTk9XSEVSRSB9IiwKKyIg IERJU0sgKGRlZmF1bHQpOiBTdG9yZSBpbmNvbWluZyBmaWxlcyBvbiBkaXNrLiIsCisiICBQUklO VEVSOiAgICAgICAgU2VuZCBpbmNvbWluZyBmaWxlcyB0byBTRVQgUFJJTlRFUiBkZXZpY2UuIiwK KyIgIFNDUkVFTjogICAgICAgICBEaXNwbGF5IGluY29taW5nIGZpbGVzIG9uIHNjcmVlbiAobG9j YWwgbW9kZSBvbmx5KS4iLAorIiAgTk9XSEVSRTogICAgICAgIERvIG5vdCBwdXQgaW5jb21pbmcg ZmlsZXMgYW55d2hlcmUgKHVzZSBmb3IgY2FsaWJyYXRpb24pLiIsCisiICIsCisiU0VUIEZJTEUg RElTUExBWSBvcHRpb24iLAorIiAgU2VsZWN0cyB0aGUgZm9ybWF0IG9mIHRoZSBmaWxlIHRyYW5z ZmVyIGRpc3BsYXkgZm9yIGxvY2FsLW1vZGUgZmlsZSIsCisiICB0cmFuc2Zlci4gIFRoZSBjaG9p Y2VzIGFyZToiLAorIiAiLAorIiAgQlJJRUYgICAgICBBIGxpbmUgcGVyIGZpbGUsIHNob3dpbmcg c2l6ZSwgbW9kZSwgc3RhdHVzLCBhbmQgdGhyb3VnaHB1dC4iLAorIiAgU0VSSUFMICAgICBPbmUg ZG90IGlzIHByaW50ZWQgZm9yIGV2ZXJ5IEsgYnl0ZXMgdHJhbnNmZXJyZWQuIiwKKyIgIENSVCAg ICAgICAgTnVtYmVycyBhcmUgY29udGludW91c2x5IHVwZGF0ZWQgb24gYSBzaW5nbGUgc2NyZWVu IGxpbmUuIiwKKyIgICAgICAgICAgICAgVGhpcyBmb3JtYXQgY2FuIGJlIHVzZWQgb24gYW55IHZp ZGVvIGRpc3BsYXkgdGVybWluYWwuIiwKKyNpZmRlZiBDS19DVVJTRVMKKyIgIEZVTExTQ1JFRU4g QSBmdWxseSBmb3JtYXR0ZWQgMjR4ODAgc2NyZWVuIHNob3dpbmcgbG90cyBvZiBpbmZvcm1hdGlv bi4iLAorIiAgICAgICAgICAgICBUaGlzIHJlcXVpcmVzIGEgdGVybWluYWwgb3IgdGVybWluYWwg ZW11bGF0b3IuIiwKKyNlbmRpZiAvKiBDS19DVVJTRVMgKi8KKyIgIE5PTkUgICAgICAgTm8gZmls ZSB0cmFuc2ZlciBkaXNwbGF5IGF0IGFsbC4iLAorIiAiLAorCisiU0VUIEZJTEUgRE9XTkxPQUQt RElSRUNUT1JZIFsgPGRpcmVjdG9yeS1uYW1lPiBdIiwKKyIgIFRoZSBkaXJlY3RvcnkgaW50byB3 aGljaCBhbGwgcmVjZWl2ZWQgZmlsZXMgc2hvdWxkIGJlIHBsYWNlZC4gIEJ5IGRlZmF1bHQsIiwK KyIgIHJlY2VpdmVkIGZpbGVzIGdvIGludG8geW91ciBjdXJyZW50IGRpcmVjdG9yeS4iLAorIiAi LAorI2VuZGlmIC8qIE5PWEZFUiAqLworCisjaWZkZWYgQ0tfQ1RSTFoKKyJTRVQgRklMRSBFT0Yg eyBDVFJMLVosIExFTkdUSCB9IiwKKyIgIEVuZC1PZi1GaWxlIGRldGVjdGlvbiBtZXRob2QsIG5v cm1hbGx5IExFTkdUSC4gIEFwcGxpZXMgb25seSB0byB0ZXh0LW1vZGUiLAorIiAgdHJhbnNmZXJz LiAgV2hlbiBzZXQgdG8gQ1RSTC1aLCB0aGlzIG1ha2VzIHRoZSBmaWxlIHNlbmRlciB0cmVhdCB0 aGUgZmlyc3QiLAorIiAgQ3RybC1aIGluIHRoZSBpbnB1dCBmaWxlIGFzIHRoZSBlbmQgb2YgZmls ZSAoRU9GKSwgYW5kIGl0IG1ha2VzIHRoZSBmaWxlIiwKKyIgIHJlY2VpdmVyIHRhY2sgYSBDdHJs LVogb250byB0aGUgZW5kIG9mIHRoZSBvdXRwdXQgZmlsZSBpZiBpdCBkb2VzIG5vdCIsCisiICBh bHJlYWR5IGVuZCB3aXRoIEN0cmwtWi4iLAorIiAiLAorI2VuZGlmIC8qIENLX0NUUkxaICovCisK KyJTRVQgRklMRSBFTkQtT0YtTElORSB7IENSLCBDUkxGLCBMRiB9IiwKKyIgIFVzZSB0aGlzIGNv bW1hbmQgdG8gc3BlY2lmeSBub25zdGFuZGFyZCBsaW5lIHRlcm1pbmF0b3JzIGZvciB0ZXh0IGZp bGVzLiIsCisiICIsCisKKyNpZm5kZWYgTk9YRkVSCisiU0VUIEZJTEUgSU5DT01QTEVURSB7IEFV VE8sIEtFRVAsIERJU0NBUkQgfSIsCisiICBXaGF0IHRvIGRvIHdpdGggYW4gaW5jb21wbGV0ZWx5 IHJlY2VpdmVkIGZpbGU6IEtFRVAsIERJU0NBUkQsIG9yIEFVVE8uIiwKKyIgIEFVVE8gKHRoZSBk ZWZhdWx0KSBtZWFucyBESVNDQVJEIGlmIHRyYW5zZmVyIGlzIGluIHRleHQgbW9kZSwgS0VFUCBp ZiBpdCIsCisiICBpcyBpbiBiaW5hcnkgbW9kZS4iLAorIiAiLAorI2lmZGVmIFZNUworIlNFVCBG SUxFIExBQkVMIHsgQUNMLCBCQUNLVVAtREFURSwgTkFNRSwgT1dORVIsIFBBVEggfSB7IE9OLCBP RkYgfSIsCisiICBUZWxscyB3aGljaCBpdGVtcyB0byBpbmNsdWRlIChPTikgb3IgZXhjbHVkZSAo T0ZGKSBpbiBsYWJlbGVkIGZpbGUiLAorIiAgdHJhbnNmZXJzIiwKKyIgIiwKKyNlbHNlCisjaWZk ZWYgT1MyCisiU0VUIEZJTEUgTEFCRUwgeyBBUkNISVZFLCBSRUFELU9OTFksIEhJRERFTiwgU1lT VEVNLCBFWFRFTkRFRCB9IHsgT04sIE9GRiB9IiwKKyIgIFRlbGxzIHdoaWNoIGl0ZW1zIHRvIGlu Y2x1ZGUgKE9OKSBvciBleGNsdWRlIChPRkYpIGluIGxhYmVsZWQgZmlsZSIsCisiICB0cmFuc2Zl cnMuIiwKKyIgIiwKKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKworI2lmZGVm IFVOSVgKKyNpZmRlZiBEWU5BTUlDCisiU0VUIEZJTEUgTElTVFNJWkUgbnVtYmVyIiwKKyIgIENo YW5nZXMgdGhlIHNpemUgb2YgdGhlIGludGVybmFsIHdpbGRjYXJkIGV4cGFuc2lvbiBsaXN0LiAg VXNlIFNIT1cgRklMRSIsCisiICB0byBzZWUgdGhlIGN1cnJlbnQgc2l6ZS4gIFVzZSB0aGlzIGNv bW1hbmQgdG8gaW5jcmVhc2UgdGhlIHNpemUgaWYgeW91IGdldCIsCisiICBhIFwiP1RvbyBtYW55 IGZpbGVzXCIgZXJyb3IuICBBbHNvIHNlZSBTRVQgRklMRSBTVFJJTkdTUEFDRS4iLAorIiAiLAor I2VuZGlmIC8qIERZTkFNSUMgKi8KKyNlbmRpZiAvKiBVTklYICovCisKKyJTRVQgRklMRSBOQU1F UyB7IENPTlZFUlRFRCwgTElURVJBTCB9IiwKKyIgIEZpbGUgbmFtZXMgYXJlIG5vcm1hbGx5IENP TlZFUlRFRCB0byBcImNvbW1vbiBmb3JtXCIgZHVyaW5nIHRyYW5zbWlzc2lvbiIsCisiICAoZS5n LiBsb3dlcmNhc2UgdG8gdXBwZXJjYXNlLCBleHRyYSBwZXJpb2RzIGNoYW5nZWQgdG8gdW5kZXJz Y29yZSwgZXRjKS4iLAorIiAgTElURVJBTCBtZWFucyB1c2UgZmlsZW5hbWVzIGxpdGVyYWxseSAo dXNlZnVsIGJldHdlZW4gbGlrZSBzeXN0ZW1zKS4gIEFsc28iLAorIiAgc2VlIFNFVCBTRU5EIFBB VEhOQU1FUyBhbmQgU0VUIFJFQ0VJVkUgUEFUSE5BTUVTLiIsCisiICIsCisKKyNpZmRlZiBVTklY CisiU0VUIEZJTEUgT1VUUFVUIHsgeyBCVUZGRVJFRCwgVU5CVUZGRVJFRCB9IFsgc2l6ZSBdLCBC TE9DS0lORywgTk9OQkxPQ0tJTkcgfSIsCisiICBMZXRzIHlvdSBjb250cm9sIHRoZSBkaXNrIG91 dHB1dCBidWZmZXIgZm9yIGluY29taW5nIGZpbGVzLiAgQnVmZmVyZWQiLAorIiAgYmxvY2tpbmcg d3JpdGVzIGFyZSBub3JtYWwuICBOb25ibG9ja2luZyB3cml0ZXMgbWlnaHQgYmUgZmFzdGVyIG9u IHNvbWUiLAorIiAgc3lzdGVtcyBidXQgbWlnaHQgYWxzbyBiZSByaXNreSwgZGVwZW5kaW5nIG9u IHRoZSB1bmRlcmx5aW5nIGZpbGUgc2VydmljZS4iLAorIiAgVW5idWZmZXJlZCB3cml0ZXMgbWln aHQgYmUgdXNlZnVsIGluIGNyaXRpY2FsIGFwcGxpY2F0aW9ucyB0byBlbnN1cmUgdGhhdCIsCisi ICBjYWNoZWQgZGlzayB3cml0ZXMgYXJlIG5vdCBsb3N0IGluIGEgY3Jhc2gsIGJ1dCB3aWxsIHBy b2JhYmx5IGFsc28gYmUiLAorIiAgc2xvd2VyLiAgVGhlIG9wdGlvbmFsIHNpemUgcGFyYW1ldGVy IGFmdGVyIEJVRkZFUkVEIG9yIFVOQlVGRkVSRUQgbGV0cyB5b3UiLAorIiAgY2hhbmdlIHRoZSBk aXNrIG91dHB1dCBidWZmZXIgc2l6ZTsgdGhpcyBtaWdodCBtYWtlIGEgZGlmZmVyZW5jZSBpbiIs CisiICBwZXJmb3JtYW5jZS4iLAorIiAiLAorI2VuZGlmIC8qIFVOSVggKi8KKworI2lmZGVmIFBB VFRFUk5TCisiU0VUIEZJTEUgUEFUVEVSTlMgeyBPTiwgT0ZGLCBBVVRPIH0iLAorIiAgT04gbWVh bnMgdG8gdXNlIGZpbGVuYW1lIHBhdHRlcm4gbGlzdHMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdG8g c2VuZCBhIGZpbGUiLAorIiAgaW4gdGV4dCBvciBiaW5hcnkgbW9kZS4gIE9GRiBtZWFucyB0byBz ZW5kIGFsbCBmaWxlcyBpbiB0aGUgcHJldmFpbGluZyIsCisiICBtb2RlLiAgQVVUTyAodGhlIGRl ZmF1bHQpIGlzIGxpa2UgT04gaWYgdGhlIG90aGVyIEtlcm1pdCBhY2NlcHRzIEF0dHJpYnV0ZSIs CisiICBwYWNrZXRzIGFuZCBsaWtlIE9GRiBvdGhlcndpc2UuICBGSUxFIFBBVFRFUk5TIGFyZSB1 c2VkIG9ubHkgaWYgRklMRSBTQ0FOIiwKKyIgIGlzIE9GRiAoc2VlIFNFVCBGSUxFIFNDQU4pLiIs CisiICIsCisiU0VUIEZJTEUgQklOQVJZLVBBVFRFUk5TIFsgPHBhdHRlcm4+IFsgPHBhdHRlcm4+ IC4uLiBdIF0iLAorIiAgWmVybyBvciBtb3JlIGZpbGVuYW1lIHBhdHRlcm5zIHdoaWNoLCBpZiBt YXRjaGVkLCBjYXVzZSBhIGZpbGUgdG8gYmUgc2VudCIsCisiICBpbiBiaW5hcnkgbW9kZSB3aGVu IEZJTEUgUEFUVEVSTlMgYXJlIE9OLiAgSEVMUCBXSUxEQ0FSRFMgZm9yIGEgZGVzY3JpcHRpb24i CissCisiICBvZiBwYXR0ZXJuIHN5bnRheC4gIFNIT1cgUEFUVEVSTlMgdG8gc2VlIHRoZSBjdXJy ZW50IGZpbGUgcGF0dGVybiBsaXN0cy4iLAorIiAiLAorIlNFVCBGSUxFIFRFWFQtUEFUVEVSTlMg WyA8cGF0dGVybj4gWyA8cGF0dGVybj4gLi4uIF0gXSIsCisiICBaZXJvIG9yIG1vcmUgZmlsZW5h bWUgcGF0dGVybnMgd2hpY2gsIGlmIG1hdGNoZWQsIGNhdXNlIGEgZmlsZSB0byBiZSBzZW50IiwK KyIgIGluIHRleHQgbW9kZSB3aGVuIEZJTEUgUEFUVEVSTlMgaXMgT047IGlmIGEgZmlsZSBkb2Vz IG5vdCBtYXRjaCBhIHRleHQgb3IiLAorIiAgYmluYXJ5IHBhdHRlcm4sIHRoZSBwcmV2YWlsaW5n IFNFVCBGSUxFIFRZUEUgaXMgdXNlZC4iLAorIiAiLAorI2VuZGlmIC8qIFBBVFRFUk5TICovCisK KyNpZmRlZiBWTVMKKyJTRVQgRklMRSBSRUNPUkQtTEVOR1RIIG51bWJlciIsCisiICBTZXRzIHRo ZSByZWNvcmQgbGVuZ3RoIGZvciByZWNlaXZlZCBmaWxlcyBvZiB0eXBlIEJJTkFSWS4gIFVzZSB0 aGlzIHRvIiwKKyIgIHJlY2VpdmUgVk1TIEJBQ0tVUCBzYXZlc2V0cyBvciBvdGhlciBmaXhlZC1m b3JtYXQgZmlsZXMgdGhhdCBkbyBub3QgdXNlIiwKKyIgIHRoZSBkZWZhdWx0IHJlY29yZCBsZW5n dGggb2YgNTEyLiIsCisiICIsCisjZW5kaWYgLyogVk1TICovCisKKyJTRVQgRklMRSBTQ0FOIHsg T04gWyBzaXplIF0sIE9GRiB9IiwKKyIgIElmIFRSQU5TRkVSIE1PREUgaXMgQVVUT01BVElDIGFu ZCBGSUxFIFNDQU4gaXMgT04gKGFzIGl0IGlzIGJ5IGRlZmF1bHQpIiwKKyIgIEtlcm1pdCBwZWVr cyBhdCB0aGUgZmlsZSdzIGNvbnRlbnRzIHRvIHNlZSBpZiBpdCdzIHRleHQgb3IgYmluYXJ5LiAg VXNlIiwKKyIgIFNFVCBGSUxFIFNDQU4gT0ZGIHRvIGRpc2FibGUgZmlsZSBwZWVraW5nLCB3aGls ZSBzdGlsbCBrZWVwaW5nIFRSQU5TRkVSIiwKKyIgIE1PREUgYXV0b21hdGljIHRvIGFsbG93IG5h bWUgcGF0dGVybnMgYW5kIG90aGVyIG1ldGhvZHMuICBUaGUgb3B0aW9uYWwiLAorIiAgc2l6ZSBp cyB0aGUgbnVtYmVyIG9mIGZpbGUgYnl0ZXMgdG8gc2NhbiwgNDkxNTIgYnkgZGVmYXVsdC4gIC0x IG1lYW5zIHRvIiwKKyIgIHNjYW4gdGhlIHdob2xlIGZpbGUuICBBbHNvIHNlZSBTRVQgRklMRSBQ QVRURVJOUy4iLAorIiAiLAorCisjaWZkZWYgVU5JWAorI2lmZGVmIERZTkFNSUMKKyJTRVQgRklM RSBTVFJJTkdTUEFDRSBudW1iZXIiLAorIiAgQ2hhbmdlcyB0aGUgc2l6ZSAoaW4gYnl0ZXMpIG9m IHRoZSBpbnRlcm5hbCBidWZmZXIgdGhhdCBob2xkcyBsaXN0cyBvZiIsCisiICBmaWxlbmFtZXMg c3VjaCBhcyB3aWxkY2FyZCBleHBhbnNpb24gbGlzdHMuICBVc2UgU0hPVyBGSUxFIHRvIHNlZSB0 aGUiLAorIiAgY3VycmVudCBzaXplLiAgVXNlIHRoaXMgY29tbWFuZCB0byBpbmNyZWFzZSB0aGUg c2l6ZSBpZiB5b3UgZ2V0IGEiLAorIiAgXCI/U3RyaW5nIHNwYWNlIGV4aGF1c3RlZFwiIGVycm9y LiAgQWxzbyBzZWUgU0VUIEZJTEUgTElTVFNJWkUuIiwKKyIgIiwKKyNlbmRpZiAvKiBEWU5BTUlD ICovCisjZW5kaWYgLyogVU5JWCAqLworCisjaWZkZWYgVU5JQ09ERQorIlNFVCBGSUxFIFVDUyBC T00geyBPTiwgT0ZGIH0iLAorIiAgV2hldGhlciB0byB3cml0ZSBhIEJ5dGUgT3JkZXIgTWFyayB3 aGVuIGNyZWF0aW5nIGEgVUNTLTIgZmlsZS4iLAorIiAiLAorIlNFVCBGSUxFIFVDUyBCWVRFLU9S REVSIHsgQklHLUVORElBTiwgTElUVExFLUVORElBTiB9IiwKKyIgIEJ5dGUgb3JkZXIgdG8gdXNl IHdoZW4gY3JlYXRpbmcgVUNTLTIgZmlsZXMsIGFuZCB0byB1c2Ugd2hlbiByZWFkaW5nIFVDUy0y IiwKKyIgIGZpbGVzIHRoYXQgZG8gbm90IHN0YXJ0IHdpdGggYSBCeXRlIE9yZGVyIE1hcmsuIiwK KyIgIiwKKyNlbmRpZiAvKiBVTklDT0RFICovCisKKyJTRVQgRklMRSBXQVJOSU5HIHsgT04sIE9G RiB9IiwKKyIgIFNFVCBGSUxFIFdBUk5JTkcgaXMgc3VwZXJzZWRlZCBieSB0aGUgbmV3ZXIgY29t bWFuZCwgU0VUIEZJTEUiLAorIiAgQ09MTElTSU9OLiAgU0VUIEZJTEUgV0FSTklORyBPTiBpcyBl cXVpdmFsZW50IHRvIFNFVCBGSUxFIENPTExJU0lPTiBSRU5BTUUiLAorIiAgYW5kIFNFVCBGSUxF IFdBUk5JTkcgT0ZGIGlzIGVxdWl2YWxlbnQgdG8gU0VUIEZJTEUgQ09MTElTSU9OIE9WRVJXUklU RS4iLAorI2VuZGlmIC8qIE5PWEZFUiAqLworIiIgfTsKKworc3RhdGljIGNoYXIgKmhteHloc2hb XSA9IHsKKyJTeW50YXg6IFNFVCBIQU5EU0hBS0UgeyBOT05FLCBYT04sIExGLCBCRUxMLCBFU0Ms IENPREUgbnVtYmVyIH0iLAorIiAgQ2hhcmFjdGVyIHRvIHVzZSBmb3IgaGFsZiBkdXBsZXggbGlu ZSB0dXJuYXJvdW5kIGhhbmRzaGFrZSBkdXJpbmcgZmlsZSIsCisiICB0cmFuc2Zlci4gIEMtS2Vy bWl0IHdhaXRzIGZvciB0aGlzIGNoYXJhY3RlciBmcm9tIHRoZSBvdGhlciBjb21wdXRlciIsCisi ICBiZWZvcmUgc2VuZGluZyBpdHMgbmV4dCBwYWNrZXQuICBEZWZhdWx0IGlzIE5PTkU7IHlvdSBj YW4gZ2l2ZSBvbmUgb2YgdGhlIiwKKyIgIG90aGVyIG5hbWVzIGxpa2UgQkVMTCBvciBFU0MsIG9y IHVzZSBTRVQgSEFORFNIQUtFIENPREUgdG8gc3BlY2lmeSB0aGUiLAorIiAgbnVtZXJpYyBjb2Rl IHZhbHVlIG9mIHRoZSBoYW5kc2hha2UgY2hhcmFjdGVyLiAgVHlwZSBTRVQgSEFORFNIID8gZm9y IGEiLAorIiAgY29tcGxldGUgbGlzdCBvZiBwb3NzaWJpbGl0aWVzLiIsCisiIiB9OworCisjaWZu ZGVmIE5PU0VSVkVSCitzdGF0aWMgY2hhciAqaHNldHNydltdID0geworIlNFVCBTRVJWRVIgQ0Qt TUVTU0FHRSB7T04sT0ZGfSIsCisiICBUZWxscyB3aGV0aGVyIHRoZSBzZXJ2ZXIsIGFmdGVyIHN1 Y2Nlc3NmdWxseSBleGVjdXRpbmcgYSBSRU1PVEUgQ0QiLAorIiAgY29tbWFuZCwgc2hvdWxkIHNl bmQgdGhlIGNvbnRlbnRzIG9mIHRoZSBuZXcgZGlyZWN0b3J5J3MgUkVBRC5NRSIsCisiICAob3Ig c2ltaWxhcikgZmlsZSB0byB5b3VyIHNjcmVlbi4iLAorIiAiLAorIlNFVCBTRVJWRVIgQ0QtTUVT U0FHRSBGSUxFIG5hbWUiLAorIiAgVGVsbHMgdGhlIG5hbWUgb2YgdGhlIGZpbGUgdG8gYmUgZGlz cGxheWVkIGFzIGEgQ0QtTUVTU0FHRSwgc3VjaCBhcyIsCisiICBSRUFELk1FIChTSE9XIFNFUlZF UiB0ZWxscyB0aGUgY3VycmVudCBDRC1NRVNTQUdFIEZJTEUgbmFtZSkuIiwKKyIgIFRvIHNwZWNp ZnkgbW9yZSB0aGFuIG9uZSBmaWxlbmFtZSB0byBsb29rIGZvciwgdXNlIHt7bmFtZTF9e25hbWUy fS4ufS4iLAorIiAgU3lub255bTogU0VUIENEIE1FU1NBR0UgRklMRSA8bGlzdD4uIiwKKyIgIiwK KyJTRVQgU0VSVkVSIERJU1BMQVkge09OLE9GRn0iLAorIiAgVGVsbHMgd2hldGhlciBsb2NhbC1t b2RlIEMtS2VybWl0IGR1cmluZyBzZXJ2ZXIgb3BlcmF0aW9uIHNob3VsZCBwdXQgYSIsCisiICBm aWxlIHRyYW5zZmVyIGRpc3BsYXkgb24gdGhlIHNjcmVlbi4gIERlZmF1bHQgaXMgT0ZGLiIsCisi ICIsCisiU0VUIFNFUlZFUiBHRVQtUEFUSCBbIGRpcmVjdG9yeSBbIGRpcmVjdG9yeSBbIC4uLiBd IF0gXSIsCisiICBUZWxscyB0aGUgQy1LZXJtaXQgc2VydmVyIHdoZXJlIHRvIGxvb2sgZm9yIGZp bGVzIHdob3NlIG5hbWVzIGl0IHJlY2VpdmVzIiwKKyIgIGZyb20gY2xpZW50IEdFVCBjb21tYW5k cyB3aGVuIHRoZSBuYW1lcyBhcmUgbm90IGZ1bGx5IHNwZWNpZmllZCBwYXRobmFtZXMuIiwKKyIg IERlZmF1bHQgaXMgbm8gR0VULVBBVEgsIHNvIEMtS2VybWl0IGxvb2tzIG9ubHkgaW4gaXRzIGN1 cnJlbnQgZGlyZWN0b3J5LiIsCisiICIsCisiU0VUIFNFUlZFUiBJRExFLVRJTUVPVVQgc2Vjb25k cyIsCisiICBJZGxlIHRpbWUgbGltaXQgd2hpbGUgaW4gc2VydmVyIG1vZGUsIDAgZm9yIG5vIGxp bWl0LiIsCisjaWZuZGVmIE9TMgorIiAgTk9URTogU0VSVkVSIElETEUtVElNRU9VVCBhbmQgU0VS VkVSIFRJTUVPVVQgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4iLAorI2VuZGlmIC8qIE9TMiAqLwor IiAiLAorIlNFVCBTRVJWRVIgS0VFUEFMSVZFIHtPTixPRkZ9IiwKKyIgIFRlbGxzIHdoZXRoZXIg Qy1LZXJtaXQgc2hvdWxkIHNlbmQgXCJrZWVwYWxpdmVcIiBwYWNrZXRzIHdoaWxlIGV4ZWN1dGlu ZyIsCisiICBSRU1PVEUgSE9TVCBjb21tYW5kcywgd2hpY2ggaXMgdXNlZnVsIGluIGNhc2UgdGhl IGNvbW1hbmQgdGFrZXMgYSBsb25nIiwKKyIgIHRpbWUgdG8gcHJvZHVjZSBhbnkgb3V0cHV0IGFu ZCB0aGVyZWZvcmUgbWlnaHQgY2F1c2UgdGhlIG9wZXJhdGlvbiB0byB0aW1lIiwKKyIgIG91dC4g IE9OIGJ5IGRlZmF1bHQ7IHR1cm4gaXQgT0ZGIGlmIGl0IGNhdXNlcyB0cm91YmxlIHdpdGggdGhl IGNsaWVudCBvciIsCisiICBzbG93cyBkb3duIHRoZSBzZXJ2ZXIgdG9vIG11Y2guIiwKKyIgIiwK KyJTRVQgU0VSVkVSIExPR0lOIFsgdXNlcm5hbWUgWyBwYXNzd29yZCBbIGFjY291bnQgXSBdIF0i LAorIiAgU2V0cyB1cCBhIHVzZXJuYW1lIGFuZCBvcHRpb25hbCBwYXNzd29yZCB3aGljaCBtdXN0 IGJlIHN1cHBsaWVkIGJlZm9yZSIsCisiICB0aGUgc2VydmVyIHdpbGwgcmVzcG9uZCB0byBhbnkg Y29tbWFuZHMgb3RoZXIgdGhhbiBSRU1PVEUgTE9HSU4uICBUaGUiLAorIiAgYWNjb3VudCBpcyBp Z25vcmVkLiAgSWYgeW91IGVudGVyIFNFVCBTRVJWRVIgTE9HSU4gYnkgaXRzZWxmLCB0aGVuIGxv Z2luIiwKKyIgIGlzIG5vIGxvbmdlciByZXF1aXJlZC4gIE9ubHkgb25lIFNFVCBTRVJWRVIgTE9H SU4gY29tbWFuZCBjYW4gYmUgaW4gZWZmZWN0IiwKKyIgIGF0IGEgdGltZTsgQy1LZXJtaXQgZG9l cyBub3Qgc3VwcG9ydCBtdWx0aXBsZSB1c2VyL3Bhc3N3b3JkIHBhaXJzLiIsCisiICIsCisiU0VU IFNFUlZFUiBUSU1FT1VUIG4iLAorIiAgU2VydmVyIGNvbW1hbmQgd2FpdCB0aW1lb3V0IGludGVy dmFsLCBob3cgb2Z0ZW4gdGhlIEMtS2VybWl0IHNlcnZlciBpc3N1ZXMiLAorIiAgYSBOQUsgd2hp bGUgd2FpdGluZyBmb3IgYSBjb21tYW5kIHBhY2tldC4gIFNwZWNpZnkgMCBmb3Igbm8gTkFLcyBh dCBhbGwuIiwKKyIgIERlZmF1bHQgaXMgMC4iLAorIiIKK307CisjZW5kaWYgLyogTk9TRVJWRVIg Ki8KKworc3RhdGljIGNoYXIgKmhtaHJtdFtdID0geworI2lmZGVmIE5FV0ZUUAorIlRoZSBSRU1P VEUgY29tbWFuZCBzZW5kcyBmaWxlIG1hbmFnZW1lbnQgaW5zdHJ1Y3Rpb25zIG9yIG90aGVyIGNv bW1hbmRzIiwKKyJ0byBhIEtlcm1pdCBvciBGVFAgc2VydmVyLiAgSWYgeW91IGhhdmUgYSBzaW5n bGUgY29ubmVjdGlvbiwgdGhlIGNvbW1hbmQgaXMiLAorImRpcmVjdGVkIHRvIHRoZSBzZXJ2ZXIg eW91IGFyZSBjb25uZWN0ZWQgdG87IGlmIHlvdSBoYXZlIG11bHRpcGxlIGNvbm5lY3Rpb25zIgor LAorInRoZSBjb21tYW5kIGlzIGRpcmVjdGVkIGFjY29yZGluZyB0byB5b3VyIEdFVC1QVVQtUkVN T1RFIHNldHRpbmcuIiwKKyNlbHNlCisiVGhlIFJFTU9URSBjb21tYW5kIHNlbmRzIGZpbGUgbWFu YWdlbWVudCBpbnN0cnVjdGlvbnMgb3Igb3RoZXIgY29tbWFuZHMiLAorInRvIGEgS2VybWl0IHNl cnZlci4gIFRoZXJlIHNob3VsZCBhbHJlYWR5IGJlIGEgS2VybWl0IHJ1bm5pbmcgaW4gc2VydmVy IiwKKyJtb2RlIG9uIHRoZSBvdGhlciBlbmQgb2YgdGhlIGNvbm5lY3Rpb24uIiwKKyNlbmRpZiAv KiBORVdGVFAgKi8KKyJUeXBlIFJFTU9URSA/IHRvIHNlZSBhIGxpc3Qgb2YgYXZhaWxhYmxlIHJl bW90ZSBjb21tYW5kcy4gIFR5cGUgSEVMUCBSRU1PVEUiLAorInh4eCB0byBnZXQgZnVydGhlciBp bmZvcm1hdGlvbiBhYm91dCBhIHBhcnRpY3VsYXIgcmVtb3RlIGNvbW1hbmQgeHh4LiIsCisiICIs CisiQWxsIFJFTU9URSBjb21tYW5kcyBleGNlcHQgTE9HSU4gYW5kIExPR09VVCBoYXZlIFItY29t bWFuZCBzaG9ydGN1dHM7IiwKKyJmb3IgZXhhbXBsZSwgUkRJUiBmb3IgUkVNT1RFIERJUiwgUkNE IGZvciBSRU1PVEUgQ0QsIGV0Yy4iLAorIiAiLAorI2lmZGVmIE5FV0ZUUAorI2lmZGVmIExPQ1VT CisiQWxzbyBzZWU6IEhFTFAgU0VUIExPQ1VTLCBIRUxQIEZUUCwgSEVMUCBTRVQgR0VULVBVVC1S RU1PVEUuIiwKKyNlbHNlCisiQWxzbyBzZWU6IEhFTFAgRlRQLCBIRUxQIFNFVCBHRVQtUFVULVJF TU9URS4iLAorI2VuZGlmIC8qIExPQ1VTICovCisjZWxzZQorI2lmZGVmIExPQ1VTCisiQWxzbyBz ZWU6IEhFTFAgU0VUIExPQ1VTLiIsCisjZW5kaWYgLyogTE9DVVMgKi8KKyNlbmRpZiAvKiBORVdG VFAgKi8KKyIiIH07CisKKyNpZm5kZWYgTk9TUEwKK3N0YXRpYyBjaGFyICppZmhscFtdID0geyAi U3ludGF4OiBJRiBbTk9UXSBjb25kaXRpb24gY29tbWFuZGxpc3QiLAorIiAiLAorIklmIHRoZSBj b25kaXRpb24gaXMgKGlzIG5vdCkgdHJ1ZSwgZG8gdGhlIGNvbW1hbmRsaXN0LiAgVGhlIGNvbW1h bmRsaXN0IiwKKyJjYW4gYmUgYSBzaW5nbGUgY29tbWFuZCwgb3IgYSBsaXN0IG9mIGNvbW1hbmRz IHNlcGFyYXRlZCBieSBjb21tYXMgYW5kIiwKKyJlbmNsb3NlZCBpbiBicmFjZXMuICBUaGUgY29u ZGl0aW9uIGNhbiBiZSBhIHNpbmdsZSBjb25kaXRpb24gb3IgYSBncm91cCBvZiIsCisiY29uZGl0 aW9ucyBzZXBhcmF0ZWQgYnkgQU5EICgmJikgb3IgT1IgKHx8KSBhbmQgZW5jbG9zZWQgaW4gcGFy ZW50aGVzZXMuIiwKKyJJZiBwYXJlbnRoZXNlcyBhcmUgdXNlZCB0aGV5IG11c3QgYmUgc3Vycm91 bmRlZCBieSBzcGFjZXMuICBFeGFtcGxlczoiLAorIiAiLAorIiAgSUYgRVhJU1Qgb29mYS50eHQg PGNvbW1hbmQ+IiwKKyIgIElGICggRVhJU1Qgb29mYS50eHQgfHwgPSBcXHYobmRheSkgMyApIDxj b21tYW5kPiIsCisiICBJRiAoIEVYSVNUIG9vZmEudHh0IHx8ID0gXFx2KG5kYXkpIDMgKSB7IDxj b21tYW5kPiwgPGNvbW1hbmQ+LCAuLi4gfSIsCisiICIsCisiVGhlIGNvbmRpdGlvbnMgYXJlOiIs CisiICIsCisiICBTVUNDRVNTICAgICAtIFRoZSBwcmV2aW91cyBjb21tYW5kIHN1Y2NlZWRlZCIs CisiICBPSyAgICAgICAgICAtIFN5bm9ueW0gZm9yIFNVQ0NFU1MiLAorIiAgRkFJTFVSRSAgICAg LSBUaGUgcHJldmlvdXMgY29tbWFuZCBmYWlsZWQiLAorIiAgRVJST1IgICAgICAgLSBTeW5vbnlt IGZvciBGQUlMVVJFIiwKKyIgIEZMQUcgICAgICAgIC0gU3VjY2VlZHMgaWYgU0VUIEZMQUcgT04s IGZhaWxzIGlmIFNFVCBGTEFHIE9GRiIsCisiICBCQUNLR1JPVU5EICAtIEMtS2VybWl0IGlzIHJ1 bm5pbmcgaW4gdGhlIGJhY2tncm91bmQiLAorI2lmZGVmIENLX0lGUk8KKyIgIEZPUkVHUk9VTkQg IC0gQy1LZXJtaXQgaXMgcnVubmluZyBpbiB0aGUgZm9yZWdyb3VuZCIsCisiICBSRU1PVEUtT05M WSAtIEMtS2VybWl0IHdhcyBzdGFydGVkIHdpdGggdGhlIC1SIGNvbW1hbmQtbGluZSBvcHRpb24i LAorI2Vsc2UKKyIgIEZPUkVHUk9VTkQgIC0gQy1LZXJtaXQgaXMgcnVubmluZyBpbiB0aGUgZm9y ZWdyb3VuZCIsCisjZW5kaWYgLyogQ0tfSUZSTyAqLworIiAgS0VSQkFORyAgICAgLSBBIEtlcmJh bmcgc2NyaXB0IGlzIHJ1bm5pbmciLAorIiAgQUxBUk0gICAgICAgLSBTRVQgQUxBUk0gdGltZSBo YXMgcGFzc2VkIiwKKyIgIEFTS1RJTUVPVVQgIC0gVGhlIG1vc3QgcmVjZW50IEFTSywgQVNLUSwg R0VUQywgb3IgR0VUT0sgdGltZWQgb3V0IiwKKyIgIEVNVUxBVElPTiAgIC0gU3VjY2VlZHMgaWYg ZXhlY3V0ZWQgd2hpbGUgaW4gQ09OTkVDVCBtb2RlIiwKKyNpZmRlZiBPUzIKKyIgIFRBUEkgICAg ICAgIC0gQ3VycmVudCBjb25uZWN0aW9uIGlzIHZpYSBhIE1pY3Jvc29mdCBUQVBJIGRldmljZSIs CisjZW5kaWYgLyogT1MyICovCisiICIsCisiICBNUy1LRVJNSVQgICAtIFByb2dyYW0gaXMgTVMt RE9TIEtlcm1pdCIsCisiICBDLUtFUk1JVCAgICAtIFByb2dyYW0gaXMgQy1LZXJtaXQiLAorIiAg Sy05NSAgICAgICAgLSBQcm9ncmFtIGlzIEtlcm1pdCA5NSIsCisiICBHVUkgICAgICAgICAtIFBy b2dyYW0gcnVucyBpbiBhIEdVSSB3aW5kb3ciLAorIiAiLAorIiAgQVZBSUxBQkxFIENSWVBUTyAg ICAgICAgICAgICAgICAgIC0gRW5jcnlwdGlvbiBpcyBhdmFpbGFibGUiLAorIiAgQVZBSUxBQkxF IEtFUkJFUk9TNCAgICAgICAgICAgICAgIC0gS2VyYmVyb3MgNCBhdXRoZW50aWNhdGlvbiBpcyBh dmFpbGFibGUiLAorIiAgQVZBSUxBQkxFIEtFUkJFUk9TNSAgICAgICAgICAgICAgIC0gS2VyYmVy b3MgNSBhdXRoZW50aWNhdGlvbiBpcyBhdmFpbGFibGUiLAorIiAgQVZBSUxBQkxFIE5UTE0gICAg ICAgICAgICAgICAgICAgIC0gTlRMTSBhdXRoZW50aWNhdGlvbiBpcyBhdmFpbGFibGUiLAorIiAg QVZBSUxBQkxFIFNSUCAgICAgICAgICAgICAgICAgICAgIC0gU1JQIGF1dGhlbnRpY2F0aW9uIGlz IGF2YWlsYWJsZSIsCisiICBBVkFJTEFCTEUgU1NMICAgICAgICAgICAgICAgICAgICAgLSBTU0wv VExTIGF1dGhlbnRpY2F0aW9uIGlzIGF2YWlsYWJsZSIsCisiICBNQVRDSCBzdHJpbmcgcGF0dGVy biAgICAgICAgICAgICAgLSBTdWNjZWVkcyBpZiBzdHJpbmcgbWF0Y2hlcyBwYXR0ZXJuIiwKKyNp ZmRlZiBDS0ZMT0FUCisiICBGTE9BVCBudW1iZXIgICAgICAgICAgICAgICAgICAgICAgLSBTdWNj ZWVkcyBpZiBmbG9hdGluZy1wb2ludCBudW1iZXIiLAorI2VuZGlmIC8qIENLRkxPQVQgKi8KKyIg IENPTU1BTkQgd29yZCAgICAgICAgICAgICAgICAgICAgICAtIFN1Y2NlZWRzIGlmIHdvcmQgaXMg YnVpbHQtaW4gY29tbWFuZCIsCisiICBERUZJTkVEIHZhcmlhYmxlbmFtZSBvciBtYWNyb25hbWUg LSBUaGUgbmFtZWQgdmFyaWFibGUgb3IgbWFjcm8gaXMgZGVmaW5lZCIsCisiICBERUNMQVJFRCBh cnJheW5hbWUgICAgICAgICAgICAgICAgLSBUaGUgbmFtZWQgYXJyYXkgaXMgZGVjbGFyZWQiLAor IiAgTlVNRVJJQyB2YXJpYWJsZSBvciBjb25zdGFudCAgICAgIC0gVGhlIHZhcmlhYmxlIG9yIGNv bnN0YW50IGlzIG51bWVyaWMiLAorIiAgRVhJU1QgZmlsZW5hbWUgICAgICAgICAgICAgICAgICAg IC0gVGhlIG5hbWVkIGZpbGUgZXhpc3RzIiwKKyIgIEFCU09MVVRFIGZpbGVuYW1lICAgICAgICAg ICAgICAgICAtIFRoZSBmaWxlbmFtZSBpcyBhYnNvbHV0ZSwgbm90IHJlbGF0aXZlIiwKKyNpZmRl ZiBDS19UTVBESVIKKyIgIERJUkVDVE9SWSBzdHJpbmcgICAgICAgICAgICAgICAgICAtIFRoZSBz dHJpbmcgaXMgdGhlIG5hbWUgb2YgYSBkaXJlY3RvcnkiLAorI2VuZGlmIC8qIENLX1RNUERJUiAq LworI2lmZGVmIFVOSVgKKyIgIExJTksgc3RyaW5nICAgICAgICAgICAgICAgICAgICAgICAtIFRo ZSBzdHJpbmcgaXMgYSBzeW1ib2xpYyBsaW5rIiwKKyNlbmRpZgkvKiBVTklYICovCisiICBSRUFE QUJMRSBmaWxlbmFtZSAgICAgICAgICAgICAgICAgLSBTdWNjZWVkcyBpZiB0aGUgZmlsZSBpcyBy ZWFkYWJsZSIsCisiICBXUklURUFCTEUgZmlsZW5hbWUgICAgICAgICAgICAgICAgLSBTdWNjZWVk cyBpZiB0aGUgZmlsZSBpcyB3cml0ZWFibGUiLAorI2lmZGVmIFpGQ0RBVAorIiAgTkVXRVIgZmls ZTEgZmlsZTIgICAgICAgICAgICAgICAgIC0gVGhlIDFzdCBmaWxlIGlzIG5ld2VyIHRoYW4gdGhl IDJuZCBvbmUiLAorI2VuZGlmIC8qIFpGQ0RBVCAqLworIiAgT1BFTiB7IFJFQUQtRklMRSxTRVNT SU9OLUxPRywuLi59IC0gVGhlIGdpdmVuIGZpbGUgb3IgbG9nIGlzIG9wZW4iLAorI2lmbmRlZiBO T0xPQ0FMCisiICBPUEVOIENPTk5FQ1RJT04gICAgICAgICAgICAgICAgICAgLSBBIGNvbm5lY3Rp b24gaXMgb3BlbiIsCisjZW5kaWYgLyogTk9MT0NBTCAqLworIiAgS0JISVQgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC0gQSBrZXkgaGFzIGJlZW4gcHJlc3NlZCIsCisiICIsCisiICBWRVJT SU9OIC0gZXF1aXZhbGVudCB0byBcImlmID49IFxcdih2ZXJzaW9uKSAuLi5cIiIsCisiICBDT1VO VCAgIC0gc3VidHJhY3Qgb25lIGZyb20gQ09VTlQsIGV4ZWN1dGUgdGhlIGNvbW1hbmQgaWYgdGhl IHJlc3VsdCBpcyIsCisiICAgICAgICAgICAgZ3JlYXRlciB0aGFuIHplcm8gKHNlZSBTRVQgQ09V TlQpIiwKKyIgIiwKKyIgIEVRVUFMIHMxIHMyIC0gczEgYW5kIHMyIChjaGFyYWN0ZXIgc3RyaW5n cyBvciB2YXJpYWJsZXMpIGFyZSBlcXVhbCIsCisiICBMTFQgczEgczIgICAtIHMxIGlzIGxleGlj YWxseSAoYWxwaGFiZXRpY2FsbHkpIGxlc3MgdGhhbiBzMiIsCisiICBMR1QgczEgczEgICAtIHMx IGlzIGxleGljYWxseSAoYWxwaGFiZXRpY2FsbHkpIGdyZWF0ZXIgdGhhbiBzMiIsCisiICIsCisi ICA9ICBuMSBuMiAtIG4xIGFuZCBuMiAobnVtYmVycyBvciB2YXJpYWJsZXMgY29udGFpbmluZyBu dW1iZXJzKSBhcmUgZXF1YWwiLAorIiAgPCAgbjEgbjIgLSBuMSBpcyBhcml0aG1ldGljYWxseSBs ZXNzIHRoYW4gbjIiLAorIiAgPD0gbjEgbjIgLSBuMSBpcyBhcml0aG1ldGljYWxseSBsZXNzIHRo YW4gb3IgZXF1YWwgdG8gbjIiLAorIiAgPiAgbjEgbjIgLSBuMSBpcyBhcml0aG1ldGljYWxseSBn cmVhdGVyIHRoYW4gbjIiLAorIiAgPj0gbjEgbjIgLSBuMSBpcyBhcml0aG1ldGljYWxseSBncmVh dGVyIHRoYW4gb3IgZXF1YWwgdG8gbjIiLAorIiAiLAorIiAgKG51bWJlciBieSBpdHNlbGYpIC0g ZmFpbHMgaWYgdGhlIG51bWJlciBpcyAwLCBzdWNjZWVkcyBvdGhlcndpc2UiLAorIiAiLAorIiAg VFJVRSAgICAgLSBhbHdheXMgc3VjY2VlZHMiLAorIiAgRkFMU0UgICAgLSBhbHdheXMgZmFpbHMi LAorIiAiLAorIlRoZSBJRiBjb21tYW5kIG1heSBiZSBmb2xsb3dlZCBvbiB0aGUgbmV4dCBsaW5l IGJ5IGFuIEVMU0UgY29tbWFuZC4gRXhhbXBsZToiLAorIiAiLAorIiAgSUYgPCBcXCV4IDEwIEVD SE8gSXQncyBsZXNzIiwKKyIgIEVMU0UgZWNobyBJdCdzIG5vdCBsZXNzIiwKKyIgIiwKKyJJdCBj YW4gYWxzbyBpbmNsdWRlIGFuIEVMU0UgcGFydCBvbiB0aGUgc2FtZSBsaW5lIGlmIGJyYWNlcyBh cmUgdXNlZDoiLAorIiAiLAorIiAgSUYgPCBcXCV4IDEwIHsgRUNITyBJdCdzIGxlc3MgfSBFTFNF IHsgRUNITyBJdCdzIG5vdCBsZXNzIH0iLAorIiAiLAorIkFsc28gc2VlIEhFTFAgV0lMRENBUkQg KGZvciBJRiBNQVRDSCBwYXR0ZXJuIHN5bnRheCkuIiwKKyIiIH07CisKK3N0YXRpYyBjaGFyICpo bXh4ZXZhbFtdID0geyAiU3ludGF4OiBFVkFMVUFURSB2YXJpYWJsZSBleHByZXNzaW9uIiwKKyIg IEV2YWx1YXRlcyB0aGUgZXhwcmVzc2lvbiBhbmQgYXNzaWducyBpdHMgdmFsdWUgdG8gdGhlIGdp dmVuIHZhcmlhYmxlLiIsCisiICBUaGUgZXhwcmVzc2lvbiBjYW4gY29udGFpbiBudW1iZXJzIGFu ZC9vciBudW1lcmljLXZhbHVlZCB2YXJpYWJsZXMgb3IiLAorIiAgZnVuY3Rpb25zLCBjb21iaW5l ZCB3aXRoIG1hdGhlbWF0aWNhbCBvcGVyYXRvcnMgYW5kIHBhcmVudGhlc2VzIGluIiwKKyIgIHRy YWRpdGlvbmFsIG5vdGF0aW9uLiAgT3BlcmF0b3JzIGluY2x1ZGUgKy0vKigpLCBldGMuICBFeGFt cGxlOiIsCisiICBFVkFMVUFURSBcXCVuICgxKzEpICogKFxcJWEgLyAzKS4iLAorIiAiLAorIiAg Tk9URTogUHJpb3IgdG8gQy1LZXJtaXQgNy4wLCB0aGUgc3ludGF4IHdhcyBcIkVWQUxVQVRFIGV4 cHJlc3Npb25cIiIsCisiICAobm8gdmFyaWFibGUpLCBhbmQgdGhlIHJlc3VsdCB3YXMgcHJpbnRl ZC4gIFVzZSBTRVQgRVZBTCB7IE9MRCwgTkVXIH0iLAorIiAgdG8gY2hvb3NlIHRoZSBvbGQgb3Ig bmV3IGJlaGF2aW9yLCB3aGljaCBpcyBORVcgYnkgZGVmYXVsdC4iLAorIiAiLAorIkFsc2Ugc2Vl OiBIRUxQIEZVTkNUSU9OIEVWQUwuIiwKKyIiIH07CisjZW5kaWYgLyogTk9TUEwgKi8KKworc3Rh dGljIGNoYXIgKmhteHhleGl0W10gPSB7CisiU3ludGF4OiBFWElUIChvciBRVUlUKSBbIG51bWJl ciBbIHRleHQgXSBdIiwKKyIgIEV4aXRzIGZyb20gdGhlIEtlcm1pdCBwcm9ncmFtLCBjbG9zaW5n IGFsbCBvcGVuIGZpbGVzIGFuZCBkZXZpY2VzLiIsCisiICBJZiBhIG51bWJlciBpcyBnaXZlbiBp dCBiZWNvbWVzIEtlcm1pdCdzIGV4aXQgc3RhdHVzIGNvZGUuICBJZiB0ZXh0IGlzIiwKKyIgIGlu Y2x1ZGVkLCBpdCBpcyBwcmludGVkLiAgQWxzbyBzZWUgU0VUIEVYSVQuIiwKKyIiIH07CisKKyNp Zm5kZWYgTk9TUEwKK3N0YXRpYyBjaGFyICppZnhobHBbXSA9IHsgIlwKK1N5bnRheDogWElGIGNv bmRpdGlvbiB7IGNvbW1hbmRsaXN0IH0gWyBFTFNFIHsgY29tbWFuZGxpc3QgfSBdIiwKKyIgIE9i c29sZXRlLiAgU2FtZSBhcyBJRiAoc2VlIEhFTFAgSUYpLiIsCisiIiB9OworCitzdGF0aWMgY2hh ciAqZm9yaGxwW10gPSB7ICJcCitTeW50YXg6IEZPUiB2YXJpYWJsZW5hbWUgaW5pdGlhbC12YWx1 ZSBmaW5hbC12YWx1ZSBpbmNyZW1lbnQgeyBjb21tYW5kbGlzdCB9IiwKKyIgIEZPUiBsb29wLiAg RXhlY3V0ZSB0aGUgY29tbWEtc2VwYXJhdGVkIGNvbW1hbmRzIGluIHRoZSBjb21tYW5kbGlzdCB0 aGUiLAorIiAgbnVtYmVyIG9mIHRpbWVzIGdpdmVuIGJ5IHRoZSBpbml0aWFsIHZhbHVlLCBmaW5h bCB2YWx1ZSBhbmQgaW5jcmVtZW50LiIsCisiICBFeGFtcGxlOiAgRk9SIFxcJWkgMTAgMSAtMSB7 IHBhdXNlIDEsIGVjaG8gXFwlaSB9IiwgIiIgfTsKKworc3RhdGljIGNoYXIgKndoaWhscFtdID0g eyAiXAorU3ludGF4OiBXSElMRSBjb25kaXRpb24geyBjb21tYW5kbGlzdCB9IiwKKyIgIFdISUxF IGxvb3AuICBFeGVjdXRlIHRoZSBjb21tYS1zZXBhcmF0ZWQgY29tbWFuZHMgaW4gdGhlIGJyYWNr ZXRlZCIsCisiICBjb21tYW5kbGlzdCB3aGlsZSB0aGUgY29uZGl0aW9uIGlzIHRydWUuICBDb25k aXRpb25zIGFyZSB0aGUgc2FtZSBhcyBmb3IiLAorIiAgSUYgY29tbWFuZHMuIiwKKyIiIH07CisK K3N0YXRpYyBjaGFyICpzd2lobHBbXSA9IHsKKyJTeW50YXg6IFNXSVRDSCA8dmFyaWFibGU+IHsg Y2FzZS1saXN0IH0iLAorIiAgU2VsZWN0cyBmcm9tIGEgZ3JvdXAgb2YgY29tbWFuZHMgYmFzZWQg b24gdGhlIHZhbHVlIG9mIGEgdmFyaWFibGUuIiwKKyIgIFRoZSBjYXNlLWxpc3QgaXMgYSBzZXJp ZXMgb2YgbGluZXMgbGlrZSB0aGVzZToiLAorIiAiLAorIiAgICA6eCwgY29tbWFuZCwgY29tbWFu ZCwgLi4uLCBicmVhayIsCisiICIsCisiICB3aGVyZSBcInhcIiBpcyBhIHBvc3NpYmxlIHZhbHVl IGZvciB0aGUgdmFyaWFibGUuICBBdCB0aGUgZW5kIG9mIHRoZSIsCisiICBjYXNlLWxpc3QsIHlv dSBjYW4gcHV0IGEgXCJkZWZhdWx0XCIgbGFiZWwgdG8gY2F0Y2ggd2hlbiB0aGUgdmFyaWFibGUg ZG9lcyIsCisiICBub3QgbWF0Y2ggYW55IG9mIHRoZSBsYWJlbHM6IiwKKyIgIiwKKyIgICAgOmRl ZmF1bHQsIGNvbW1hbmQsIGNvbW1hbmQsIC4uLiIsCisiICIsCisiVGhlIGNhc2UgbGFiZWwgXCJ4 XCIgY2FuIGJlIGEgY2hhcmFjdGVyLCBhIHN0cmluZywgYSB2YXJpYWJsZSwgYSBmdW5jdGlvbiIs CisiaW52b2NhdGlvbiwgYSBwYXR0ZXJuLCBvciBhbnkgY29tYmluYXRpb24gb2YgdGhlc2UuICBT ZWUgSEVMUCBXSUxEQ0FSRFMiLAorImZvciBpbmZvcm1hdGlvbiBhYm91dCBwYXR0ZXJucy4iLAor IiJ9OworCitzdGF0aWMgY2hhciAqb3BlbmhscFtdID0geworIlN5bnRheDogIE9QRU4gbW9kZSBm aWxlbmFtZSIsCisiICBGb3IgdXNlIHdpdGggUkVBRCBhbmQgV1JJVEUgY29tbWFuZHMuICBPcGVu IHRoZSBsb2NhbCBmaWxlIGluIHRoZSIsCisiICBzcGVjaWZpZWQgbW9kZTogUkVBRCwgV1JJVEUs IG9yIEFQUEVORC4gICFSRUFEIGFuZCAhV1JJVEUgbWVhbiB0byByZWFkIiwKKyIgIGZyb20gb3Ig d3JpdGUgdG8gYSBzeXN0ZW0gY29tbWFuZCByYXRoZXIgdGhhbiBhIGZpbGUuICBFeGFtcGxlczoi LAorIiAiLAorIiAgICBPUEVOIFJFQUQgb29mYS50eHQiLAorIiAgICBPUEVOICFSRUFEIHNvcnQg Zm9vLmJhciIsCisiIiB9OworCitzdGF0aWMgY2hhciAqaHh4YXNrW10gPSB7CisiU3ludGF4OiAg QVNLIFsgc3dpdGNoZXMgXSB2YXJpYWJsZW5hbWUgWyBwcm9tcHQgXSIsCisiRXhhbXBsZTogQVNL IFxcJW4geyBXaGF0IGlzIHlvdXIgbmFtZVxcPyB9IiwKKyIgIElzc3VlcyB0aGUgcHJvbXB0IGFu ZCBkZWZpbmVzIHRoZSB2YXJpYWJsZSB0byBiZSB3aGF0ZXZlciBpcyB0eXBlZCBpbiIsCisiICBy ZXNwb25zZSwgdXAgdG8gdGhlIHRlcm1pbmF0aW5nIGNhcnJpYWdlIHJldHVybi4gIFVzZSBicmFj ZXMgdG8gcHJlc2VydmUiLAorIiAgbGVhZGluZyBhbmQvb3IgdHJhaWxpbmcgc3BhY2VzIGluIHRo ZSBwcm9tcHQuIiwKKyIgIiwKKyJTeW50YXg6ICBBU0tRIFsgc3dpdGNoZXMgXSB2YXJpYWJsZW5h bWUgWyBwcm9tcHQgXSIsCisiRXhhbXBsZTogQVNLUSBcXCVwIHsgUGFzc3dvcmQ6fSIsCisiICBM aWtlIEFTSyBleGNlcHQgdGhlIHJlc3BvbnNlIGRvZXMgbm90IGVjaG8gb24gdGhlIHNjcmVlbiBv ciwgaWYgc3BlY2lmaWVkIiwKKyIgIGl0IGVjaG9lcyBhcyBhc3Rlcmlza3Mgb3Igb3RoZXIgc3Bl Y2lmaWVkIGNoYXJhY3Rlci4iLAorIiAiLAorIlN3aXRjaGVzOiIsCisiIC9ERUZBVUxUOnRleHQi LAorIiAgVGV4dCB0byBzdXBwbHkgaWYgdGhlIHVzZXIgZW50ZXJzIGEgYmxhbmsgcmVzcG9uc2Ug b3IgdGhlIC9USU1FT1VUIiwKKyIgIGxpbWl0IGV4cGlyZWQgd2l0aCBubyByZXNwb25zZS4iLAor IiAiLAorIiAvRUNITzpjaGFyIiwKKyIgIChBU0tRIG9ubHkpIENoYXJhY3RlciB0byBiZSBlY2hv ZWQgZWFjaCB0aW1lIHRoZSB1c2VyIHByZXNzZXMgYSBrZXkiLAorIiAgY29ycmVzcG9uZGluZyB0 byBhIHByaW50YWJsZSBjaGFyYWN0ZXIuICBUaGlzIGxldHMgdXNlcnMgc2VlIHdoYXQgdGhleSBh cmUiLAorIiAgZG9pbmcgd2hlbiB0aGV5IGFyZSB0eXBpbmcgKGUuZy4pIHBhc3N3b3JkcywgYW5k IG1ha2VzIGVkaXRpbmcgZWFzaWVyLiIsCisiICIsCisjaWZkZWYgT1MyCisiIC9QT1BVUCIsCisi ICBUaGUgcHJvbXB0IGFuZCByZXNwb25zZSBkaWFsb2cgdGFrZXMgcGxhY2UgaW4gYSB0ZXh0LW1v ZGUgcG9wdXAuIiwKKyIgIEs5NSBvbmx5OyBpbiBDLUtlcm1pdCB0aGlzIHN3aXRjaCBpcyBpZ25v cmVkLiIsCisiICIsCisjaWZkZWYgS1VJCisiIC9HVUkiLAorIiAgVGhlIHByb21wdCBhbmQgcmVz cG9uc2UgZGlhbG9nIHRha2VzIHBsYWNlIGluIGEgR1VJIHBvcHVwLiIsCisiICBLOTUgR1VJIHZl cnNpb24gb25seTsgaW4gQy1LZXJtaXQgYW5kIHRoZSBLOTUgY29uc29sZSB2ZXJzaW9uLCIsIAor IiAgdGhpcyBzd2l0Y2ggaXMgaWdub3JlZC4iLAorIiAiLAorI2VuZGlmIC8qIEtVSSAqLworI2Vu ZGlmIC8qIE9TMiAqLworIiAvVElNRU9VVDpudW1iZXIiLAorIiAgSWYgdGhlIHJlc3BvbnNlIGlz IG5vdCBlbnRlcmVkIHdpdGhpbiB0aGUgZ2l2ZW4gbnVtYmVyIG9mIHNlY29uZHMsIHRoZSIsCisi ICBjb21tYW5kIGZhaWxzLiAgVGhpcyBpcyBlcXVpdmFsZW50IHRvIHNldHRpbmcgQVNLLVRJTUVS IHRvIGEgcG9zaXRpdmUiLAorIiAgbnVtYmVyLCBleGNlcHQgaXQgYXBwbGllcyBvbmx5IHRvIHRo aXMgY29tbWFuZC4gIEFsc28gc2VlIFNFVCBBU0stVElNRVIuIiwKKyIgIE5PVEU6IElmIGEgL0RF RkFVTFQ6IHZhbHVlIHdhcyBhbHNvIGdpdmVuLCBpdCBpcyBzdXBwbGllZCBhdXRvbWF0aWNhbGx5 IiwKKyIgIHVwb24gdGltZW91dCBhbmQgdGhlIGNvbW1hbmQgZG9lcyBOT1QgZmFpbC4iLAorCisi ICIsCisiIC9RVUlFVCIsCisiICBTdXBwcmVzc2VzIFwiP1RpbWVkIG91dFwiIG1lc3NhZ2Ugd2hl biAvVElNRU9VVCBpcyBnaXZlbiBhbmQgdXNlciBkb2Vzbid0IiwKKyIgIHJlc3BvbmQgd2l0aGlu IHRoZSB0aW1lIGxpbWl0LiIsCisiIn07CitzdGF0aWMgY2hhciAqaHh4Z2V0Y1tdID0geworIlN5 bnRheDogIEdFVEMgdmFyaWFibGVuYW1lIFsgcHJvbXB0IF0iLAorIkV4YW1wbGU6IEdFVEMgXFwl YyB7IFR5cGUgYW55IGNoYXJhY3RlciB0byBjb250aW51ZS4uLn0iLAorIiAgSXNzdWVzIHRoZSBw cm9tcHQgYW5kIHNldHMgdGhlIHZhcmlhYmxlIHRvIHRoZSBmaXJzdCBjaGFyYWN0ZXIgeW91IHR5 cGUuIiwKKyIgIFVzZSBicmFjZXMgdG8gcHJlc2VydmUgbGVhZGluZyBhbmQvb3IgdHJhaWxpbmcg c3BhY2VzIGluIHRoZSBwcm9tcHQuIiwKKyIgIiwKKyJBbHNvIHNlZSBTRVQgQVNLLVRJTUVSLiIs CisiIn07CisKK3N0YXRpYyBjaGFyICpobXh5dGltZXJbXSA9IHsKKyJTeW50YXg6IFNFVCBBU0st VElNRVIgbnVtYmVyIiwKKyIgIEZvciB1c2Ugd2l0aCBBU0ssIEFTS1EsIEdFVE9LLCBhbmQgR0VU Qy4gIElmIEFTSy1USU1FUiBpcyBzZXQgdG8gYSBudW1iZXIiLAorIiAgZ3JlYXRlciB0aGFuIDAs IHRoZXNlIGNvbW1hbmRzIHdpbGwgdGltZSBvdXQgYWZ0ZXIgdGhlIGdpdmVuIG51bWJlciBvZiIs CisiICBzZWNvbmRzIHdpdGggbm8gcmVzcG9uc2UuICBUaGlzIGNvbW1hbmQgaXMgXCJzdGlja3lc Iiwgc28gdG8gcmV2ZXJ0IHRvIiwKKyIgXAordW50aW1lZCBBU0tzIGFmdGVyIGEgdGltZWQgb25l LCB1c2UgU0VUIEFTSy1USU1FUiAwLiAgQWxzbyBzZWUgSUYgQVNLVElNRU9VVC4iLAorIiJ9Owor CitzdGF0aWMgY2hhciAqaHh4ZG90W10gPSB7CisiU3ludGF4OiAuPHZhcmlhYmxlLW5hbWU+IDxh c3NpZ25tZW50LW9wZXJhdG9yPiA8dmFsdWU+IiwKKyIgIEFzc2lnbnMgdGhlIHZhbHVlIHRvIHRo ZSB2YXJpYWJsZSBpbiB0aGUgbWFubmVyIGluZGljYXRlZCBieSB0aGUiLAorIiAgYXNzaWdubWVu dCBvcGVyYXRvcjoiLAorIiAgPSAgIENvcGllcyB3aXRob3V0IGV2YWx1YXRpb24gKGxpa2UgREVG SU5FKS4iLAorIiAgOj0gIENvcGllcyB3aXRoIGV2YWx1YXRpb24gKGxpa2UgQVNTSUdOKS4iLAor IiAgOjo9IENvcGllcyB3aXRoIGFyaXRobWV0aWMgZXZhbHVhdGlvbiAobGlrZSBFVkFMVUFURSku IiwKKyIifTsKKworc3RhdGljIGNoYXIgKmh4eGRlZltdID0geworIlN5bnRheDogREVGSU5FIG5h bWUgWyBkZWZpbml0aW9uIF0iLAorIiAgRGVmaW5lcyBhIG1hY3JvIG9yIHZhcmlhYmxlLiAgSXRz IHZhbHVlIGlzIHRoZSBkZWZpbml0aW9uLCB0YWtlbiIsCisiICBsaXRlcmFsbHkuICBObyBleHBh bnNpb24gb3IgZXZhbHVhdGlvbiBvZiB0aGUgZGVmaW5pdGlvbiBpcyBkb25lLiAgVGh1cyIsCisi ICBpZiB0aGUgZGVmaW5pdGlvbiBpbmNsdWRlcyBhbnkgdmFyaWFibGUgb3IgZnVuY3Rpb24gcmVm ZXJlbmNlcywgdGhlaXIiLAorIiAgbmFtZXMgYXJlIGluY2x1ZGVkLCByYXRoZXIgdGhhbiB0aGVp ciB2YWx1ZXMgKGNvbXBhcmUgd2l0aCBBU1NJR04pLiAgSWYiLAorIiAgdGhlIGRlZmluaXRpb24g aXMgb21pdHRlZCwgdGhlbiB0aGUgbmFtZWQgdmFyaWFibGUgb3IgbWFjcm8gaXMgdW5kZWZpbmVk LiIsCisiICIsCisiQSB0eXBpY2FsIG1hY3JvIGRlZmluaXRpb24gbG9va3MgbGlrZSB0aGlzOiIs CisiICIsCisiICBERUZJTkUgbmFtZSBjb21tYW5kLCBjb21tYW5kLCBjb21tYW5kLCAuLi4iLAor IiAiLAorImZvciBleGFtcGxlOiIsCisiICIsCisiICBERUZJTkUgdmF4IHNldCBwYXJpdHkgZXZl biwgc2V0IGR1cGxleCBmdWxsLCBzZXQgZmxvdyB4b24veG9mZiIsCisiICIsCisid2hpY2ggZGVm aW5lcyBhIEtlcm1pdCBjb21tYW5kIG1hY3JvIGNhbGxlZCAndmF4Jy4gIFRoZSBkZWZpbml0aW9u IGlzIGEiLAorImNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIEtlcm1pdCBjb21tYW5kcy4gIFVzZSB0 aGUgRE8gY29tbWFuZCB0byBleGVjdXRlIiwKKyJ0aGUgbWFjcm8sIG9yIGp1c3QgdHlwZSBpdHMg bmFtZSwgZm9sbG93ZWQgb3B0aW9uYWxseSBieSBhcmd1bWVudHMuIiwKKyIgIiwKKyJUaGUgZGVm aW5pdGlvbiBvZiBhIHZhcmlhYmxlIGNhbiBiZSBhbnl0aGluZyBhdCBhbGwsIGZvciBleGFtcGxl OiIsCisiICIsCisiICBERUZJTkUgXFwlYSBNb25kYXkiLAorIiAgREVGSU5FIFxcJWIgMyIsCisi ICIsCisiVGhlc2UgdmFyaWFibGVzIGNhbiBiZSB1c2VkIGFsbW9zdCBhbnl3aGVyZSwgZm9yIGV4 YW1wbGU6IiwKKyIgIiwKKyIgIEVDSE8gVG9kYXkgaXMgXFwlYSIsCisiICBTRVQgQkxPQ0stQ0hF Q0sgXFwlYiIsCisiIiB9OworCitzdGF0aWMgY2hhciAqaHh4YXNzW10gPSB7CisiU3ludGF4OiAg QVNTSUdOIHZhcmlhYmxlbmFtZSBzdHJpbmcuIiwKKyJFeGFtcGxlOiBBU1NJR04gXFwlYSBNeSBu YW1lIGlzIFxcJWIuIiwKKyIgIEFzc2lnbnMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIHN0cmlu ZyB0byB0aGUgdmFyaWFibGUgKG9yIG1hY3JvKS4iLAorIiAgVGhlIGRlZmluaXRpb24gc3RyaW5n IGlzIGZ1bGx5IGV2YWx1YXRlZCBiZWZvcmUgaXQgaXMgYXNzaWduZWQsIHNvIHRoYXQiLAorIiAg dGhlIHZhbHVlcyBvZiBhbnkgdmFyaWFibGVzIHRoYXQgYXJlIGNvbnRhaW5lZCBhcmUgdXNlZCwg cmF0aGVyIHRoYW4gdGhlaXIiLAorIiAgbmFtZXMuICBDb21wYXJlIHdpdGggREVGSU5FLiAgVG8g aWxsdXN0cmF0ZSB0aGUgZGlmZmVyZW5jZSwgdHJ5IHRoaXM6IiwKKyIgIiwKKyIgICAgREVGSU5F IFxcJWEgaGVsbG8iLAorIiAgICBERUZJTkUgXFwleCBcXCVhIiwKKyIgICAgQVNTSUdOIFxcJXkg XFwlYSIsCisiICAgIERFRklORSBcXCVhIGdvb2RieWUiLAorIiAgICBFQ0hPIFxcJXggXFwleSIs CisiICIsCisiICBUaGlzIHByaW50cyAnZ29vZGJ5ZSBoZWxsbycuIiwgIiIgfTsKKworc3RhdGlj IGNoYXIgKmh4eGRlY1tdID0geworIlN5bnRheDogREVDUkVNRU5UIHZhcmlhYmxlbmFtZSBbIG51 bWJlciBdIiwKKyIgIERlY3JlbWVudCAoc3VidHJhY3Qgb25lIGZyb20pIHRoZSB2YWx1ZSBvZiBh IHZhcmlhYmxlIGlmIHRoZSBjdXJyZW50IHZhbHVlIiwKKyIgIGlzIG51bWVyaWMuICBJZiB0aGUg bnVtYmVyIGFyZ3VtZW50IGlzIGdpdmVuLCBzdWJ0cmFjdCB0aGF0IG51bWJlciIsCisiICBpbnN0 ZWFkLiIsCisiICIsCisiRXhhbXBsZXM6IERFQ1IgXFwlYSwgREVDUiBcXCVhIDcsIERFQ1IgXFwl YSBcXCVuIiwgIiIgfTsKKworc3RhdGljIGNoYXIgKmh4eGluY1tdID0geworIlN5bnRheDogSU5D UkVNRU5UIHZhcmlhYmxlbmFtZSBbIG51bWJlciBdIiwKKyIgIEluY3JlbWVudCAoYWRkIG9uZSB0 bykgdGhlIHZhbHVlIG9mIGEgdmFyaWFibGUgaWYgdGhlIGN1cnJlbnQgdmFsdWUgaXMiLAorIiAg bnVtZXJpYy4gIElmIHRoZSBudW1iZXIgYXJndW1lbnQgaXMgZ2l2ZW4sIGFkZCB0aGF0IG51bWJl ciBpbnN0ZWFkLiIsCisiICIsCisiRXhhbXBsZXM6IElOQ1IgXFwlYSwgSU5DUiBcXCVhIDcsIElO Q1IgXFwlYSBcXCVuIiwgIiIgfTsKKyNlbmRpZiAvKiBOT1NQTCAqLworCisjaWZkZWYgQU5ZWDI1 CisjaWZuZGVmIElCTVgyNQorc3RhdGljIGNoYXIgKmh4eHBhZFtdID0geworIlN5bnRheDogUEFE IGNvbW1hbmQiLAorIlguMjUgUEFEIGNvbW1hbmRzOiIsCisiICIsCisiICAgIFBBRCBDTEVBUiAg ICAgLSBDbGVhciB0aGUgdmlydHVhbCBjYWxsIiwKKyIgICAgUEFEIFNUQVRVUyAgICAtIFJldHVy biB0aGUgc3RhdHVzIG9mIHZpcnR1YWwgY2FsbCIsCisiICAgIFBBRCBSRVNFVCAgICAgLSBTZW5k IGEgcmVzZXQgcGFja2V0IiwKKyIgICAgUEFEIElOVEVSUlVQVCAtIFNlbmQgYW4gaW50ZXJydXB0 IHBhY2tldCIsCisiIn07CisjZW5kaWYgLyogSUJNWDI1ICovCisKK3N0YXRpYyBjaGFyICpoeHl4 MjVbXSA9IHsKKyJTeW50YXg6IFNFVCBYLjI1IG9wdGlvbiB7IE9OIFsgZGF0YSBdLCBPRkYgfSIs CisiICIsCisiWC4yNSBjYWxsIG9wdGlvbnM6IiwKKyIgIENMT1NFRC1VU0VSLUdST1VQIHsgT04g aW5kZXgsIE9GRiB9IiwKKyIgICAgRW5hYmxlIG9yIGRpc2FibGUgY2xvc2VkIHVzZXIgZ3JvdXAg Y2FsbCwgd2hlcmUgaW5kZXggaXMgdGhlIGdyb3VwIiwKKyIgICAgaW5kZXgsIDAgdG8gOTkuIiwK KyIgIFJFVkVSU0UtQ0hBUkdFIHsgT04sIE9GRiB9IiwKKyIgICAgVGVsbCB3aGV0aGVyIHlvdSB3 YW50IHRvIHJldmVyc2UgdGhlIGNoYXJnZXMgZm9yIHRoZSBjYWxsLiIsCisiICBDQUxMLVVTRVIt REFUQSB7IE9OIHN0cmluZywgT0ZGIH0iLAorIiAgICBTcGVjaWZ5IGNhbGwgdXNlci1kYXRhIGZv ciB0aGUgWC4yNSBjYWxsLiIsCisiIn07CisjZW5kaWYgLyogQU5ZWDI1ICovCisKK3N0YXRpYyBj aGFyICpoeHlwcnRyW10gPSB7CisjaWZkZWYgUFJJTlRTV0kKKyJTeW50YXg6IFNFVCBQUklOVEVS IFsgc3dpdGNoZXMgXSBbIG5hbWUgXSIsCisiICIsCisiICBTcGVjaWZpZXMgdGhlIHByaW50ZXIg dG8gYmUgdXNlZCBmb3IgdHJhbnNwYXJlbnQtcHJpbnQsIGF1dG9wcmludCwgYW5kIiwKKyIgIHNj cmVlbi1kdW1wIG1hdGVyaWFsIGR1cmluZyB0ZXJtaW5hbCBlbXVsYXRpb24sIGFzIHdlbGwgYXMg Zm9yIHRoZSBQUklOVCIsCisiICBjb21tYW5kLCBwbHVzIHZhcmlvdXMgb3B0aW9ucyBnb3Zlcm5p bmcgcHJpbnQgYmVoYXZpb3IuIiwKKyIgIiwKKyJTd2l0Y2hlcyBmb3Igc3BlY2lmeWluZyB0aGUg cHJpbnRlciBieSB0eXBlOiIsCisiICIsCisiL05PTkUiLAorIiAgSW5jbHVkZSB0aGlzIHN3aXRj aCB0byBzcGVjaWZ5IHRoYXQgYWxsIHByaW50ZXIgYWN0aW9ucyBzaG91bGQgc2ltcGx5IGJlIiwK KyIgIHNraXBwZWQuICBVc2UgdGhpcywgZm9yIGV4YW1wbGUsIGlmIHlvdSBoYXZlIG5vIHByaW50 ZXIuIiwKKyIgIiwKKyIvRE9TLURFVklDRVs6bmFtZV0iLAorIiAgSW5jbHVkZSB0aGlzIHRvIGRl Y2xhcmUgYSBET1MgcHJpbnRlciBhbmQgdG8gc3BlY2lmeSBpdHMgbmFtZSwgc3VjaCBhcyIsCisi ICBQUk4sIExQVDEsIGV0Yy4iLAorIiAiLAorI2lmZGVmIE5UCisiL1dJTkRPV1MtUVVFVUVbOltx dWV1ZS1uYW1lXV0iLAorIiAgSW5jbHVkZSB0aGlzIHRvIGRlY2xhcmUgYSBXaW5kb3dzIHByaW50 ZXIgYW5kIHNwZWNpZnkgaXRzIHF1ZXVlIG5hbWUuIiwKKyIgIFR5cGUgcXVlc3Rpb24gbWFyayAo PykgYWZ0ZXIgdGhlIGNvbG9uICg6KSB0byBzZWUgYSBsaXN0IG9mIGtub3duIHF1ZXVlIiwKKyIg IG5hbWVzLiAgSWYgdGhlIGNvbG9uIGlzIGFic2VudCwgdGhlIHN3aXRjaCBpbmRpY2F0ZXMgdGhl IGN1cnJlbnRseSIsCisiICBzZWxlY3RlZCBwcmludGVyIGlzIGEgV2luZG93cyBQcmludCBRdWV1 ZS4gIElmIHRoZSBjb2xvbiBpcyBwcm92aWRlZCIsCisiICBhbmQgdGhlIG5hbWUgaXMgYWJzZW50 LCB0aGUgV2luZG93cyBQcmludCBRdWV1ZSBjaG9zZW4gYXMgdGhlIERlZmF1bHQiLAorIiAgUHJp bnRlciBpcyBzZWxlY3RlZC4iLAorIiAiLAorI2VuZGlmIC8qIE5UICovCisiL0ZJTEVbOm5hbWVd IiwKKyIgIFNwZWNpZmllcyB0aGF0IGFsbCBwcmludGVyIG1hdGVyaWFsIGlzIHRvIGJlIGFwcGVu ZGVkIHRvIHRoZSBuYW1lZCBmaWxlLCIsCisiICByYXRoZXIgdGhhbiBiZWluZyBzZW50IHRvIGEg cHJpbnRlci4gIElmIHRoZSBmaWxlIGRvZXMgbm90IGV4aXN0LCBpdCBpcyIsCisiICBjcmVhdGVk IHRoZSBmaXJzdCB0aW1lIGFueSBtYXRlcmlhbCBpcyB0byBiZSBwcmludGVkLiIsCisiICIsCisi L1BJUEVbOm5hbWVdIiwKKyIgIFNwZWNpZmllcyB0aGF0IGFsbCBwcmludGVyIG1hdGVyaWFsIGlz IHRvIGJlIHNlbnQgYXMgc3RhbmRhcmQgaW5wdXQgdG8iLAorIiAgdGhlIHByb2dyYW0gb3IgY29t bWFuZCB3aG9zZSBuYW1lIGlzIGdpdmVuLiAgRXhhbXBsZToiLAorIiAiLAorIiAgICBTRVQgUFJJ TlRFUiAvUElQRTp7dGV4dHBzID4gbHB0MX0iLAorIiAiLAorIklmIHlvdSBnaXZlIGEgcHJpbnRl ciBuYW1lIHdpdGhvdXQgc3BlY2lmeWluZyBhbnkgb2YgdGhlc2Ugc3dpdGNoZXMsIHRoZW4gaXQi LAorImlzIGFzc3VtZWQgdG8gYmUgYSBET1MgcHJpbnRlciBkZXZpY2Ugb3IgZmlsZW5hbWUgdW5s ZXNzIHRoZSBuYW1lIGdpdmVuIiwKKyIoYWZ0ZXIgcmVtb3ZpbmcgZW5jbG9zaW5nIGJyYWNlcywg aWYgYW55KSBzdGFydHMgd2l0aCBcInxcIiwgXAoraW4gd2hpY2ggY2FzZSBpdCIsCisiaXMgYSBw aXBlLiAgRXhhbXBsZXM6IiwKKyIgIiwKKyIgIFNFVCBQUklOVEVSIExQVDEgICAgICAgICAgICAg ICA8LS0gRE9TIGRldmljZSIsCisiICBTRVQgUFJJTlRFUiB7fCB0ZXh0cHMgPiBscHQxfSAgPC0t IFBpcGUiLAorIiAiLAorIlRoZSBuZXh0IGdyb3VwIG9mIHN3aXRjaGVzIHRlbGxzIHdoZXRoZXIg dGhlIHByaW50ZXIgaXMgb25lLXdheSBvciIsCisiYmlkaXJlY3Rpb25hbCAodHdvLXdheSk6IiwK KyIgIiwKKyIvT1VUUFVULU9OTFkiLAorIiAgSW5jbHVkZSB0aGlzIHRvIGRlY2xhcmUgdGhlIHBy aW50ZXIgY2FwYWJsZSBvbmx5IG9mIHJlY2VpdmluZyBtYXRlcmlhbCB0byIsCisiICBiZSBwcmlu dGVkLCBidXQgbm90IHNlbmRpbmcgYW55dGhpbmcgYmFjay4gIFRoaXMgaXMgdGhlIG5vcm1hbCBr aW5kIG9mIiwKKyIgIHByaW50ZXIsIEtlcm1pdCdzIGRlZmF1bHQga2luZCwgYW5kIHRoZSBvcHBv c2l0ZSBvZiAvQklESVJFQ1RJT05BTC4iLAorIiAiLAorIi9CSURJUkVDVElPTkFMIiwKKyIgIElu Y2x1ZGUgdGhpcyB0byBkZWNsYXJlIHRoZSBwcmludGVyIGJpZGlyZWN0aW9uYWwuICBUaGlzIGlz IHRoZSBvcHBvc2l0ZSAiLAorIiAgb2YgL09VVFBVVC1PTkxZLiAgWW91IGNhbiBhbHNvIHVzZSB0 aGlzIG9wdGlvbiB3aXRoIHNlcmlhbCBwcmludGVycywgZXZlbiIsCisiICBpZiB0aGV5IGFyZW4n dCBiaWRpcmVjdGlvbmFsLCBpbiBjYXNlIHlvdSBuZWVkIHRvIHNwZWNpZnkgc3BlZWQsIGZsb3ci LAorIiAgY29udHJvbCwgb3IgcGFyaXR5LiIsCisiICIsCisiVGhlIG5leHQgZ3JvdXAgYXBwbGll cyBvbmx5IHRvIGJpZGlyZWN0aW9uYWwgYW5kL29yIHNlcmlhbCBwcmludGVyczoiLAorIiAiLAor Ii9GTE9XLUNPTlRST0w6e05PTkUsWE9OL1hPRkYsUlRTL0NUUyxLRUVQfSIsCisiICBGbG93IGNv bnRyb2wgdG8gdXNlIHdpdGggYSBzZXJpYWwgYmlkaXJlY3Rpb25hbCBwcmludGVyLCBkZWZhdWx0 IEtFRVA7IiwKKyNpZmRlZiBOVAorIiAgaS5lLiB1c2Ugd2hhdGV2ZXIgdGhlIFdpbmRvd3MgZHJp dmVyIGZvciB0aGUgcG9ydCBub3JtYWxseSB1c2VzLiIsCisjZWxzZQorIiAgaS5lLiB1c2Ugd2hh dGV2ZXIgdGhlIE9TLzIgZHJpdmVyIGZvciB0aGUgcG9ydCBub3JtYWxseSB1c2VzLiIsCisjZW5k aWYgLyogTlQgKi8KKyIgIiwKKyIvUEFSSVRZOntOT05FLEVWRU4sT0RELFNQQUNFLE1BUkt9IiwK KyIgIFBhcml0eSB0byB1c2Ugd2l0aCBhIHNlcmlhbCBwcmludGVyLCBkZWZhdWx0IE5PTkU7IGku ZS4gdXNlIDggZGF0YSBiaXRzIiwKKyIgIGFuZCBubyBwYXJpdHkuICBJZiB5b3Ugb21pdCB0aGUg Y29sb24gYW5kIHRoZSBrZXl3b3JkLCBOT05FIGlzIHNlbGVjdGVkLiIsCisiICIsCisiL1NQRUVE Om51bWJlciIsCisiICBJbnRlcmZhY2Ugc3BlZWQsIGluIGJpdHMgcGVyIHNlY29uZCwgdG8gdXNl IHdpdGggYSBzZXJpYWwgcHJpbnRlciwgc3VjaCBhcyIsCisiICAyNDAwLCA5NjAwLCAxOTIwMCwg ZXRjLiAgVHlwZSBTRVQgUFJJTlRFUiAvU1BFRUQ6PyBmb3IgYSBsaXN0IG9mIHBvc3NpYmxlIiwK KyIgIHNwZWVkcy4iLAorIiAiLAorIlRoZSBuZXh0IGdyb3VwIGRlYWxzIHdpdGggcHJpbnQgam9i cyAtLSBob3cgdG8gaWRlbnRpZnkgdGhlbSwgaG93IHRvIHN0YXJ0IiwKKyJ0aGVtLCBob3cgdG8g dGVybWluYXRlIHRoZW06IiwKKyIgIiwKKyIvVElNRU9VVFs6bnVtYmVyXSIsCisiICBVc2VkIHdp dGggaG9zdC1kaXJlY3RlZCB0cmFuc3BhcmVudCBvciBhdXRvIHByaW50aW5nLCB0aGlzIGlzIHRo ZSBudW1iZXIiLAorIiAgb2Ygc2Vjb25kcyB0byB3YWl0IGFmdGVyIHRoZSBob3N0IGNsb3NlcyB0 aGUgcHJpbnRlciBiZWZvcmUgdGVybWluYXRpbmciLAorIiAgdGhlIHByaW50IGpvYiBpZiB0aGUg cHJpbnRlciBpcyBub3Qgb3BlbmVkIGFnYWluIGR1cmluZyB0aGUgc3BlY2lmaWVkIiwKKyIgIGFt b3VudCBvZiB0aW1lLiIsCisiICIsCisiL0pPQi1IRUFERVItRklMRVs6ZmlsZW5hbWVdIiwKKyIg IFRoZSBuYW1lIG9mIGEgZmlsZSB0byBiZSBzZW50IHRvIHRoZSBwcmludGVyIGF0IHRoZSBiZWdp bm5pbmcgb2YgZWFjaCIsCisiICBwcmludCBqb2IsIGFzIGEgYnVyc3QgcGFnZSwgb3IgdG8gY29u ZmlndXJlIHRoZSBwcmludGVyLiAgTm9ybWFsbHkgbm8gZmlsZSIsCisiICBpcyBpcyBzZW50LiIs CisiICIsCisiL0VORC1PRi1KT0ItU1RSSU5HWzpzdHJpbmddIiwKKyIgIFN0cmluZyBvZiBjaGFy YWN0ZXJzIHRvIGJlIHNlbnQgdG8gdGhlIHByaW50ZXIgYXQgdGhlIGVuZCBvZiB0aGUgcHJpbnQi LAorIiAgam9iLCB1c3VhbGx5IHVzZWQgdG8gZm9yY2UgdGhlIGxhc3Qgb3Igb25seSBwYWdlIG91 dCBvZiB0aGUgcHJpbnRlci4gIFdoZW4iLAorIiAgc3VjaCBhIHN0cmluZyBpcyBuZWVkZWQsIGl0 IHVzdWFsbHkgY29uc2lzdHMgb2YgYSBzaW5nbGUgZm9ybWZlZWQ6IFwic2V0IiwKKyIgIHByaW50 ZXIgL2VuZC1vZi1qb2I6e1xcMTJ9XCIuICBObyBlbmQtb2Ytam9iIHN0cmluZyBpcyBzZW50IHVu bGVzcyB5b3UiLAorIiAgc3BlY2lmeSBvbmUgd2l0aCB0aGlzIG9wdGlvbi4gIElmIHRoZSBzdHJp bmcgY29udGFpbnMgYW55IHNwYWNlcyBvciIsCisiICBjb250cm9sIGNoYXJhY3RlcnMgKGV2ZW4g aW4gYmFja3NsYXNoIG5vdGF0aW9uLCBhcyBhYm92ZSksIGVuY2xvc2UgaXQgaW4iLAorIiAgYnJh Y2VzLiIsCisiICIsCisiVGhlIG5leHQgZ3JvdXAgaXMgZm9yIHVzZSB3aXRoIHByaW50ZXJzIHRo YXQgcHJpbnQgb25seSBQb3N0U2NyaXB0OiIsCisiICIsCisiL1BPU1RTQ1JJUFQgb3IgL1BTIiwK KyIgIEluZGljYXRlcyB0aGF0IEs5NSBzaG91bGQgY29udmVydCBhbGwgdGV4dCB0byBQb3N0U2Ny aXB0IGJlZm9yZSBzZW5kaW5nIiwKKyIgIGl0IHRvIHRoZSBwcmludGVyLiAgVGhlIGZpeGVkLXBp dGNoIENvdXJpZXItMTEgZm9udCBpcyB1c2VkLiIsCisiICIsCisiL1dJRFRIOm51bWJlciIsCisi ICBTcGVjaWZpZXMgdGhlIHdpZHRoIG9mIHRoZSBwYWdlIGluIGNoYXJhY3RlcnMuICBJZiB0aGlz IHN3aXRjaCBpcyBub3QiLAorIiAgZ2l2ZW4sIDgwIGlzIHVzZWQuIiwKKyIgIiwKKyIvSEVJR0hU Om51bWJlciIsCisiICBTcGVjaWZpZXMgdGhlIGhlaWdodCBvZiB0aGUgcGFnZSBpbiBsaW5lcy4g IElmIHRoaXMgc3dpdGNoIGlzIG5vdCBnaXZlbiIsCisiICA2NiBpcyB1c2VkLiIsCisiICIsCisi L05PUE9TVFNDUklQVCBvciAvTk9QUyIsCisiICBJbmRpY2F0ZXMgdGhhdCBLOTUgc2hvdWxkIG5v dCBjb252ZXJ0IGFsbCB0ZXh0IHRvIFBvc3RTY3JpcHQgYmVmb3JlIiwKKyIgIHNlbmRpbmcgaXQg dG8gdGhlIHByaW50ZXIuIiwKKyIgIiwKKyJUaGUgZmluYWwgc3dpdGNoIGlzIGZvciB1c2Ugd2l0 aCBBdXRvUHJpbnQgbW9kZSBhbmQgU2NyZWVuIER1bXBzIiwKKyIgIiwKKyIvQ0hBUkFDVEVSLVNF VDo8Y2hhcmFjdGVyLXNldD4iLAorIiAgU3BlY2lmaWVzIHRoZSBjaGFyYWN0ZXIgc2V0IHVzZWQg YnkgdGhlIHByaW50ZXIgd2hpY2ggbWF5IGJlIGRpZmZlcmVudCIsCisiICBmcm9tIGJvdGggdGhl IGNoYXJhY3RlciBzZXQgdXNlZCBieSB0aGUgaG9zdCBhbmQgYnkgdGhlIGxvY2FsIGNvbXB1dGVy LiIsCisiICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBDUDQzNy4iLAorIiAiLAorIlNIT1cgUFJJTlRF UiBkaXNwbGF5cyB5b3VyIGN1cnJlbnQgcHJpbnRlciBzZXR0aW5ncy4iLAorI2Vsc2UKKyNpZmRl ZiBVTklYCisiU3ludGF4OiBTRVQgUFJJTlRFUiBbIHsgfGNvbW1hbmQsIGZpbGVuYW1lIH0gXSIs CisiICBTcGVjaWZpZXMgdGhlIGNvbW1hbmQgKHN1Y2ggYXMgXCJ8bHByXCIpIG9yIGZpbGVuYW1l IHRvIGJlIHVzZWQgYnkgdGhlIiwKKyIgIFBSSU5UIGNvbW1hbmQuICBJZiBhIGZpbGVuYW1lIGlz IGdpdmVuLCBlYWNoIFBSSU5UIGNvbW1hbmQgYXBwZW5kcyB0byB0aGUiLAorIiAgZ2l2ZW4gZmls ZS4gIElmIHRoZSBTRVQgUFJJTlRFUiBhcmd1bWVudCBjb250YWlucyBzcGFjZXMsIGl0IG11c3Qg YmUiLAorIiAgZW5jbG9zZWQgaW4gYnJhY2VzLCBlLmcuIFwic2V0IHByaW50ZXIge3wgbHByIC1Q bGFzZXJ9XCIuIElmIHRoZSBhcmd1bWVudCIsCisiICBpcyBvbWl0dGVkIHRoZSBkZWZhdWx0IHZh bHVlIGlzIHJlc3RvcmVkLiAgU0hPVyBQUklOVEVSIGxpc3RzIHRoZSBjdXJyZW50IiwKKyIgIHBy aW50ZXIuICBTZWUgSEVMUCBQUklOVCBmb3IgZnVydGhlciBpbmZvLiIsCisjZWxzZQorIlNvcnJ5 LCBTRVQgUFJJTlRFUiBub3QgYXZhaWxhYmxlIHlldC4iLAorI2VuZGlmIC8qIFVOSVggKi8KKyNl bmRpZiAvKiBQUklOVFNXSSAqLworIiJ9OworCisjaWZkZWYgT1MyCisjaWZkZWYgQlBSSU5UCitz dGF0aWMgY2hhciAqaHh5YnBydHJbXSA9IHsKKyJTeW50YXg6IFNFVCBCUFJJTlRFUiBbIHBvcnRu YW1lIHNwZWVkIFsgcGFyaXR5IFsgZmxvdy1jb250cm9sIF0gXSBdIiwKKyIgIChPYnNvbGV0ZSwg cmVwbGFjZWQgYnkgU0VUIFBSSU5URVIgL0JJRElSRUNUSU9OQUwuKSIsCisiIn07CisjZW5kaWYg LyogQlBSSU5UICovCisjZW5kaWYgLyogT1MyICovCisKK3N0YXRpYyBjaGFyICpoeHlleGl0W10g PSB7CisiU3ludGF4OiBTRVQgRVhJVCBIQU5HVVAgeyBPTiwgT0ZGIH0iLAorIiAgV2hlbiBPTiAo d2hpY2ggaXMgdGhlIGRlZmF1bHQpLCBDLUtlcm1pdCBleGVjdXRlcyBhbiBpbXBsaWNpdCBIQU5H VVAgYW5kIiwKKyIgIENMT1NFIGNvbW1hbmQgb24gdGhlIGNvbW11bmljYXRpb25zIGRldmljZSBv ciBjb25uZWN0aW9uIHdoZW4gaXQgZXhpdHMuIiwKKyIgIFdoZW4gT0ZGLCBLZXJtaXQgc2tpcHMg dGhpcyBzZXF1ZW5jZS4iLAorIiAiLAorIlN5bnRheDogU0VUIEVYSVQgT04tRElTQ09OTkVDVCB7 IE9OLCBPRkYgfSIsCisiICBXaGVuIE9OLCBDLUtlcm1pdCBFWElUcyBhdXRvbWF0aWNhbGx5IHdo ZW4gYSBuZXR3b3JrIGNvbm5lY3Rpb24iLAorIiAgaXMgdGVybWluYXRlZCBlaXRoZXIgYnkgdGhl IGhvc3Qgb3IgYnkgaXNzdWluZyBhIEhBTkdVUCBjb21tYW5kLiIsCisiICIsCisiU3ludGF4OiBT RVQgRVhJVCBTVEFUVVMgbnVtYmVyIiwKKyNpZmRlZiBOT1NQTAorIiAgU2V0IEMtS2VybWl0J3Mg cHJvZ3JhbSByZXR1cm4gY29kZSB0byB0aGUgZ2l2ZW4gbnVtYmVyLiIsCisjZWxzZQorIiAgU2V0 IEMtS2VybWl0J3MgcHJvZ3JhbSByZXR1cm4gY29kZSB0byB0aGUgZ2l2ZW4gbnVtYmVyLCB3aGlj aCBjYW4gYmUgYSIsCisiICBjb25zdGFudCwgdmFyaWFibGUsIGZ1bmN0aW9uIHJlc3VsdCwgb3Ig YXJpdGhtZXRpYyBleHByZXNzaW9uLiIsCisjZW5kaWYgLyogTk9TUEwgKi8KKyIgIiwKKyJTeW50 YXg6IFNFVCBFWElUIFdBUk5JTkcgeyBPTiwgT0ZGLCBBTFdBWVMgfSIsCisiICBXaGVuIEVYSVQg V0FSTklORyBpcyBPTiwgaXNzdWUgYSB3YXJuaW5nIG1lc3NhZ2UgYW5kIGFzayBmb3IgY29uZmly bWF0aW9uIiwKKyIgIGJlZm9yZSBFWElUaW5nIGlmIGEgY29ubmVjdGlvbiB0byBhbm90aGVyIGNv bXB1dGVyIG1pZ2h0IHN0aWxsIGJlIG9wZW4uIiwKKyIgIFdoZW4gRVhJVCBXQVJOSU5HIGlzIEFM V0FZUywgY29uZmlybWF0aW9uIGlzIGFsd2F5cyByZXF1ZXN0ZWQuICBXaGVuIE9GRiIsCisiICBp dCBpcyBuZXZlciByZXF1ZXN0ZWQuICBUaGUgZGVmYXVsdCBpcyBPTi4iLAorIiIgfTsKKworI2lm bmRlZiBOT1NQTAorc3RhdGljIGNoYXIgKmh4eHBhdVtdID0geworIlN5bnRheDogIFBBVVNFIFsg eyBudW1iZXItb2Ytc2Vjb25kcywgaGg6bW06c3MgfSBdIiwKKyJFeGFtcGxlOiBQQVVTRSAzICBv ciAgUEFVU0UgMTQ6NTI6MzAiLAorIiAgRG8gbm90aGluZyBmb3IgdGhlIHNwZWNpZmllZCBudW1i ZXIgb2Ygc2Vjb25kcyBvciB1bnRpbCB0aGUgZ2l2ZW4gdGltZSBvZiIsCisiICBkYXkgaW4gMjQt aG91ciBoaDptbTpzcyBub3RhdGlvbi4gIElmIHRoZSB0aW1lIG9mIGRheSBpcyBlYXJsaWVyIHRo YW4gdGhlIiwKKyIgIGN1cnJlbnQgdGltZSwgaXQgaXMgYXNzdW1lZCB0byBiZSB0b21vcnJvdy4g IElmIG5vIGFyZ3VtZW50IGdpdmVuLCBvbmUiLAorIiAgc2Vjb25kIGlzIHVzZWQuICBUaGUgcGF1 c2UgY2FuIGJlIGludGVycnVwdGVkIGJ5IHR5cGluZyBhbnkgY2hhcmFjdGVyIG9uIiwKKyIgIHRo ZSBrZXlib2FyZCB1bmxlc3MgU0xFRVAgQ0FOQ0VMTEFUSU9OIGlzIE9GRi4gIElmIGludGVycnVw dGVkLCBQQVVTRSIsCisiICBmYWlscywgb3RoZXJ3aXNlIGl0IHN1Y2NlZWRzLiAgU3lub255bTog U0xFRVAuIiwKKyIiIH07CisKK3N0YXRpYyBjaGFyICpoeHhtc2xbXSA9IHsKKyJTeW50YXg6ICBN U0xFRVAgWyBudW1iZXIgXSIsCisiRXhhbXBsZTogTVNMRUVQIDUwMCIsCisiICBEbyBub3RoaW5n IGZvciB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtaWxsaXNlY29uZHM7IGlmIG5vIG51bWJlciBn aXZlbiwiLAorIiAgMTAwIG1pbGxpc2Vjb25kcy4iLCIiIH07CisjZW5kaWYgLyogTk9TUEwgKi8K KworI2lmbmRlZiBOT1BVU0gKK2V4dGVybiBpbnQgbm9wdXNoOworc3RhdGljIGNoYXIgKmh4eHNo ZVtdID0geworIlN5bnRheDogISwgQCwgUlVOLCBQVVNILCBvciBTUEFXTiwgb3B0aW9uYWxseSBm b2xsb3dlZCBieSBhIGNvbW1hbmQuIiwKKyIgIEdpdmVzIHRoZSBjb21tYW5kIHRvIHRoZSBsb2Nh bCBvcGVyYXRpbmcgc3lzdGVtJ3MgY29tbWFuZCBwcm9jZXNzb3IsIGFuZCIsCisiICBkaXNwbGF5 cyB0aGUgcmVzdWx0cyBvbiB0aGUgc2NyZWVuLiAgSWYgdGhlIGNvbW1hbmQgaXMgb21pdHRlZCwg ZW50ZXJzIHRoZSIsCisiICBzeXN0ZW0ncyBjb21tYW5kIGxpbmUgaW50ZXJwcmV0ZXIgb3Igc2hl bGw7IGV4aXQgZnJvbSBpdCAodGhlIGNvbW1hbmQgZm9yIiwKKyIgIHRoaXMgaXMgdXN1YWxseSBF WElUIG9yIFFVSVQgb3IgTE9HT1VUKSB0byByZXR1cm4gdG8gS2VybWl0LiIsCisiIgorfTsKKyNl bmRpZiAvKiBOT1BVU0ggKi8KKworI2lmbmRlZiBOT1hNSVQKK3N0YXRpYyBjaGFyICpoeHh4bWl0 W10gPSB7CisiU3ludGF4OiBUUkFOU01JVCBbIHN3aXRjaGVzIF0gZmlsZW5hbWUiLAorIiAgU2Vu ZHMgdGhlIGNvbnRlbnRzIG9mIGEgZmlsZSwgd2l0aG91dCBhbnkgZXJyb3IgY2hlY2tpbmcgb3Ig Y29ycmVjdGlvbiwiLAorIiAgdG8gdGhlIGNvbXB1dGVyIG9uIHRoZSBvdGhlciBlbmQgb2YgeW91 ciBTRVQgTElORSBvciBTRVQgSE9TVCBjb25uZWN0aW9uIiwKKyIgIChvciBpZiBDLUtlcm1pdCBp cyBpbiByZW1vdGUgbW9kZSwgZGlzcGxheXMgaXQgb24gdGhlIHNjcmVlbikuICBUaGUiLAorIiAg ZmlsZW5hbWUgaXMgdGhlIG5hbWUgb2YgYSBzaW5nbGUgZmlsZSAobm8gd2lsZGNhcmRzKSB0byBi ZSBzZW50IG9yLCBpZiIsCisiICB0aGUgL1BJUEUgc3dpdGNoIGlzIGluY2x1ZGVkLCB0aGUgbmFt ZSBvZiBhIGNvbW1hbmQgd2hvc2Ugb3V0cHV0IGlzIHRvIGJlIiwKKyIgIHNlbnQuIiwKKyIgIiwK KyIgIFRoZSBmaWxlIGlzIHNlbnQgYWNjb3JkaW5nIHRvIHlvdXIgY3VycmVudCBGSUxFIFRZUEUg c2V0dGluZyAoQklOQVJZIG9yIiwKKyIgIFRFWFQpLCB3aGljaCB5b3UgY2FuIG92ZXJyaWRlIHdp dGggYSAvQklOQVJZIG9yIC9URVhUIHN3aXRjaCB3aXRob3V0IiwKKyIgIGNoYW5naW5nIHRoZSBn bG9iYWwgc2V0dGluZy4gIEluIHRleHQgbW9kZSwgaXQgaXMgc2VudCBhIGxpbmUgYXQgYSB0aW1l LCIsCisiICB3aXRoIGNhcnJpYWdlIHJldHVybiBhdCB0aGUgZW5kIG9mIGVhY2ggbGluZSAoYXMg aWYgeW91IHdlcmUgdHlwaW5nIGl0IGF0IiwKKyIgIHlvdXIga2V5Ym9hcmQpLCBhbmQgQy1LZXJt aXQgd2FpdHMgZm9yIGEgbGluZWZlZWQgdG8gZWNobyBiZWZvcmUgc2VuZGluZyIsCisiICB0aGUg bmV4dCBsaW5lOyB1c2UgL05PV0FJVCB0byBlbGltaW5hdGUgdGhlIGZlZWRiYWNrIHJlcXVpcmVt ZW50LiAgSW4iLAorIiAgYmluYXJ5IG1vZGUsIGl0IGlzIHNlbnQgYSBjaGFyYWN0ZXIgYXQgYSB0 aW1lLCB3aXRoIG5vIGZlZWRiYWNrIHJlcXVpcmVkLiIsCisiICIsCisiICBOb3JtYWxseSB0aGUg dHJhbnNtaXR0ZWQgbWF0ZXJpYWwgaXMgZWNob2VkIHRvIHlvdXIgc2NyZWVuLiAgVXNlIFNFVCIs CisiICBUUkFOU01JVCBFQ0hPIE9GRiBvciB0aGUgL05PRUNITyBzd2l0Y2ggdG8gc3VwcHJlc3Mg ZWNob2luZy4gIE5vdGUgdGhhdCIsCisiICBUUkFOU01JVCAvTk9FQ0hPIC9OT1dBSVQgL0JJTkFS WSBpcyBhIHNwZWNpYWwgY2FzZSwgdGhhdCBtb3JlIG9yIGxlc3MiLAorIiAgYmxhc3RzIHRoZSBm aWxlIG91dCBhdCBmdWxsIHNwZWVkLiIsCisiICIsCisjaWZuZGVmIE5PQ1NFVFMKKyIgIENoYXJh Y3RlciBzZXRzIGFyZSB0cmFuc2xhdGVkIGFjY29yZGluZyB0byB5b3VyIGN1cnJlbnQgRklMRSBh bmQgVEVSTUlOQUwiLAorIiAgQ0hBUkFDVEVSLVNFVCBzZXR0aW5ncyB3aGVuIFRSQU5TTUlUIGlz IGluIHRleHQgbW9kZS4gIEluY2x1ZGUgL1RSQU5TUEFSRU5UIgorLAorIiAgdG8gZGlzYWJsZSBj aGFyYWN0ZXItc2V0IHRyYW5zbGF0aW9uIGluIHRleHQgbW9kZSAoL1RSQU5TUEFSRU5UIGltcGxp ZXMiLAorIiAgL1RFWFQpLiIsCisiICIsCisjZW5kaWYgLyogTk9DU0VUUyAqLworIiAgVGhlcmUg Y2FuIGJlIG5vIGd1YXJhbnRlZSB0aGF0IHRoZSBvdGhlciBjb21wdXRlciB3aWxsIHJlY2VpdmUg dGhlIGZpbGUiLAorIiAgY29ycmVjdGx5IGFuZCBjb21wbGV0ZWx5LiAgQmVmb3JlIHlvdSBzdGFy dCB0aGUgVFJBTlNNSVQgY29tbWFuZCwgeW91IiwKKyIgIG11c3QgcHV0IHRoZSBvdGhlciBjb21w dXRlciBpbiBkYXRhIGNvbGxlY3Rpb24gbW9kZSwgZm9yIGV4YW1wbGUgYnkiLAorIiAgc3RhcnRp bmcgYSB0ZXh0IGVkaXRvci4gIFRSQU5TTUlUIG1heSBiZSBpbnRlcnJ1cHRlZCBieSBDdHJsLUMu ICBTeW5vbnltOiIsCisiICBYTUlULiAgU2VlIEhFTFAgU0VUIFRSQU5TTUlUIGZvciBmdXJ0aGVy IGluZm9ybWF0aW9uLiIsCisiIiB9OworI2VuZGlmIC8qIE5PWE1JVCAqLworCisjaWZuZGVmIE5P Q1NFVFMKK3N0YXRpYyBjaGFyICpoeHh4bGFbXSA9IHsKKyJTeW50YXg6IFRSQU5TTEFURSBmaWxl MSBjczEgY3MyIFsgZmlsZTIgXSIsCisiICBUcmFuc2xhdGVzIGZpbGUxIGZyb20gdGhlIGNoYXJh Y3RlciBzZXQgY3MxIGludG8gdGhlIGNoYXJhY3RlciBzZXQgY3MyIiwKKyIgIGFuZCBzdG9yZXMg dGhlIHJlc3VsdCBpbiBmaWxlMi4gIFRoZSBjaGFyYWN0ZXIgc2V0cyBjYW4gYmUgYW55IG9mIiwK KyIgIEMtS2VybWl0J3MgZmlsZSBjaGFyYWN0ZXIgc2V0cy4gIElmIGZpbGUyIGlzIG9taXR0ZWQs IHRoZSB0cmFuc2xhdGlvbiIsCisiICBpcyBkaXNwbGF5ZWQgb24gdGhlIHNjcmVlbi4gIEFuIGFw cHJvcHJpYXRlIGludGVybWVkaWF0ZSBjaGFyYWN0ZXItc2V0IiwKKyIgIGlzIGNob3NlbiBhdXRv bWF0aWNhbGx5LCBpZiBuZWNlc3NhcnkuICBTeW5vbnltOiBYTEFURS4gIEV4YW1wbGU6IiwKKyIg IiwKKyIgICAgVFJBTlNMQVRFIGxhc2FnbmEubGF0IGxhdGluMSBpdGFsaWFuIGxhc2FnbmEubnJj IiwKKyIgIiwKKyIgIE11bHRpcGxlIGZpbGVzIGNhbiBiZSB0cmFuc2xhdGVkIGlmIGZpbGUyIGlz IGEgZGlyZWN0b3J5IG9yIGRldmljZSBuYW1lLCIsCisiICByYXRoZXIgdGhhbiBhIGZpbGVuYW1l LCBvciBpZiBmaWxlMiBpcyBvbWl0dGVkLiIsCisiIiB9OworI2VuZGlmIC8qIE5PQ1NFVFMgKi8K KworI2lmbmRlZiBOT1NQTAorc3RhdGljIGNoYXIgKmh4eHdhaVtdID0geworIlN5bnRheDogV0FJ VCB7IG51bWJlci1vZi1zZWNvbmRzLCBoaDptbTpzcyB9IFsgPHdoYXQ+IF0iLAorIiAiLAorIkV4 YW1wbGVzOiIsCisiICB3YWl0IDUgY2QgY3RzIiwKKyIgIHdhaXQgMjM6NTk6NTkgY2QiLAorIiAi LAorIiAgV2FpdHMgdXAgdG8gdGhlIGdpdmVuIG51bWJlciBvZiBzZWNvbmRzIG9yIHRoZSBnaXZl biB0aW1lIG9mIGRheSBmb3IgdGhlIiwKKyIgIHNwZWNpZmllZCBpdGVtIG9yIGV2ZW50LCB3aGlj aCBjYW4gYmUgRklMRSwgdGhlIG5hbWUocykgb2Ygb25lIG9yIG1vcmUiLAorIiAgbW9kZW0gc2ln bmFscywgb3Igbm90aGluZy4gIElmIG5vdGhpbmcgaXMgc3BlY2lmaWVkLCBXQUlUIGFjdHMgbGlr ZSBTTEVFUC4iLAorIiAgSWYgb25lIG9yIG1vcmUgbW9kZW0gc2lnbmFsIG5hbWVzIGFyZSBnaXZl biwgS2VybWl0IHdhaXRzIGZvciB0aGUgc3BlY2lmaWVkIgorLAorIiAgbW9kZW0gc2lnbmFscyB0 byBhcHBlYXIgb24gdGhlIHNlcmlhbCBjb21tdW5pY2F0aW9uIGRldmljZS4iLAorIiAgU2V0cyBG QUlMVVJFIGlmIHRoZSBzaWduYWxzIGRvIG5vdCBhcHBlYXIgaW4gdGhlIGdpdmVuIHRpbWUgb3Ig aW50ZXJydXB0ZWQiLAorIiAgZnJvbSB0aGUga2V5Ym9hcmQgZHVyaW5nIHRoZSB3YWl0aW5nIHBl cmlvZC4iLAorIiAiLAorIlNpZ25hbHM6IiwKKyIgIGNkICA9IENhcnJpZXIgRGV0ZWN0OyIsCisi ICBkc3IgPSBEYXRhc2V0IFJlYWR5OyIsCisiICBjdHMgPSBDbGVhciBUbyBTZW5kOyIsCisiICBy aSAgPSBSaW5nIEluZGljYXRlLiIsCisiICIsCisiSWYgeW91IHdhbnQgS2VybWl0IHRvIHdhaXQg Zm9yIGEgZmlsZSBldmVudCwgdGhlbiB0aGUgc3ludGF4IGlzOiIsCisiICIsCisiICBXQUlUIDx0 aW1lPiBGSUxFIHsgQ1JFQVRJT04sIERFTEVUSU9OLCBNT0RJRklDQVRJT04gfSA8ZmlsZW5hbWU+ IiwKKyIgIiwKKyJ3aGVyZSA8dGltZT4gaXMgYXMgYWJvdmUsIGFuZCA8ZmlsZW5hbWU+IGlzIHRo ZSBuYW1lIG9mIGEgc2luZ2xlIGZpbGUuIiwKKyJLZXJtaXQgd2FpdHMgdXAgdG8gdGhlIGdpdmVu IGFtb3VudCBvZiB0aW1lIGZvciB0aGUgc3BlY2lmaWVkIGV2ZW50IHRvIG9jY3VyIiwKKyJ3aXRo IHRoZSBzcGVjaWZpZWQgZmlsZSwgc3VjY2VlZHMgaWYgaXQgZG9lcywgZmFpbHMgaWYgaXQgZG9l c24ndC4iLAorIiIgfTsKKyNlbmRpZiAvKiBOT1NQTCAqLworCitzdGF0aWMgY2hhciAqaHh4d3Jp W10gPSB7CisiU3ludGF4OiBXUklURSBuYW1lIHRleHQiLAorIiAgV3JpdGVzIHRoZSBnaXZlbiB0 ZXh0IHRvIHRoZSBuYW1lZCBsb2cgb3IgZmlsZS4gIFRoZSB0ZXh0IHRleHQgbWF5IGluY2x1ZGUi LAorIiAgYmFja3NsYXNoIGNvZGVzLCBhbmQgaXMgbm90IHRlcm1pbmF0ZWQgYnkgYSBuZXdsaW5l IHVubGVzcyB5b3UgaW5jbHVkZSB0aGUiLAorIiAgYXBwcm9wcmlhdGUgY29kZS4gIFRoZSBuYW1l IHBhcmFtZXRlciBjYW4gYmUgYW55IG9mIHRoZSBmb2xsb3dpbmc6IiwKKyIgIiwKKyIgICBERUJV Ry1MT0ciLAorIiAgIEVSUk9SIChzdGFuZGFyZCBlcnJvcikiLAorI2lmbmRlZiBOT1NQTAorIiAg IEZJTEUgKHRoZSBPUEVOIFdSSVRFLCBPUEVOICFXUklURSwgb3IgT1BFTiBBUFBFTkQgZmlsZSwg c2VlIEhFTFAgT1BFTikiLAorI2VuZGlmIC8qIE5PU1BMICovCisiICAgUEFDS0VULUxPRyIsCisi ICAgU0NSRUVOIChjb21wYXJlIHdpdGggRUNITykiLAorI2lmbmRlZiBOT0xPQ0FMCisiICAgU0VT U0lPTi1MT0ciLAorI2VuZGlmIC8qIE5PTE9DQUwgKi8KKyIgICBUUkFOU0FDVElPTi1MT0ciLCAi IiB9OworCisjaWZuZGVmIE5PRElBTAorc3RhdGljIGNoYXIgKmh4eGxvb2tbXSA9IHsgIlN5bnRh eDogTE9PS1VQIG5hbWUiLAorIiAgTG9va3MgdXAgdGhlIGdpdmVuIG5hbWUgaW4gdGhlIGRpYWxp bmcgZGlyZWN0b3J5IG9yIGRpcmVjdG9yaWVzLCBpZiBhbnksIiwKKyIgIHNwZWNpZmllZCBpbiB0 aGUgbW9zdCByZWNlbnQgU0VUIERJQUwgRElSRUNUT1JZIGNvbW1hbmQuICBFYWNoIG1hdGNoaW5n IiwKKyIgIGVudHJ5IGlzIHNob3duLCBhbG9uZyB3aXRoIGFueSB0cmFuc2Zvcm1hdGlvbnMgdGhh dCB3b3VsZCBiZSBhcHBsaWVkIHRvIiwKKyIgIHBvcnRhYmxlLWZvcm1hdCBlbnRyaWVzIGJhc2Vk IG9uIHlvdXIgbG9jYWxlLiAgSEVMUCBESUFMLCBIRUxQIFNFVCBESUFMIiwKKyIgIGZvciBmdXJ0 aGVyIGluZm8uIiwKKyIiCit9OworCitzdGF0aWMgY2hhciAqaHh4YW5zd1tdID0geyAiU3ludGF4 OiAgQU5TV0VSIFsgPHNlY29uZHM+IF0iLAorI2lmZGVmIE9TMgorIiAgV2FpdHMgZm9yIGEgbW9k ZW0gY2FsbCB0byBjb21lIGluLiAgUHJpb3IgU0VUIE1PREVNIFRZUEUgYW5kIFNFVCBQT1JUIiwK KyNlbHNlCisiICBXYWl0cyBmb3IgYSBtb2RlbSBjYWxsIHRvIGNvbWUgaW4uICBQcmlvciBTRVQg TU9ERU0gVFlQRSBhbmQgU0VUIExJTkUiLAorI2VuZGlmIC8qIE9TMiAqLworIiAgcmVxdWlyZWQu ICBJZiA8c2Vjb25kcz4gaXMgMCBvciBub3Qgc3BlY2lmaWVkLCBLZXJtaXQgd2FpdHMgZm9yZXZl ciBvciIsCisiICB1bnRpbCBpbnRlcnJ1cHRlZCwgb3RoZXJ3aXNlIEtlcm1pdCB3YWl0cyB0aGUg Z2l2ZW4gbnVtYmVyIG9mIHNlY29uZHMuIiwKKyIgIFRoZSBBTlNXRVIgY29tbWFuZCBwdXRzIHRo ZSBtb2RlbSBpbiBhdXRvYW5zd2VyIG1vZGUuICBTdWJzZXF1ZW50IERJQUwiLAorIiAgY29tbWFu ZHMgd2lsbCBhdXRvbWF0aWNhbGx5IHB1dCBpdCAoYmFjaykgaW4gb3JpZ2luYXRlIG1vZGUuICBT SE9XIE1PREVNLCIsCisiICBIRUxQIFNFVCBNT0RFTSBmb3IgbW9yZSBpbmZvLiIsCisiIgorfTsK Kworc3RhdGljIGNoYXIgKmh4eGRpYWxbXSA9IHsgIlN5bnRheDogIERJQUwgcGhvbmVudW1iZXIi LAorIkV4YW1wbGU6IERJQUwgNzY1NDMyMSIsCisiICBcCitEaWFscyBhIG51bWJlciB1c2luZyBh biBhdXRvZGlhbCBtb2RlbS4gIEZpcnN0IHlvdSBtdXN0IFNFVCBNT0RFTSBUWVBFLCB0aGVuIiwK KyNpZmRlZiBPUzIKKyIgIFNFVCBQT1JUIChvciBpbiBXaW5kb3dzIG9ubHksIFNFVCBQT1JUIFRB UEkgaW5zdGVhZCBvZiBTRVQgTU9ERU0gVFlQRSBhbmQiLAorIiAgU0VUIExJTkUpLCB0aGVuIFNF VCBTUEVFRC4gVGhlbiBnaXZlIHRoZSBESUFMIGNvbW1hbmQsIGluY2x1ZGluZyB0aGUgcGhvbmUi LAorI2Vsc2UKKyIgIFNFVCBMSU5FLCB0aGVuIFNFVCBTUEVFRC4gIFRoZW4gZ2l2ZSB0aGUgRElB TCBjb21tYW5kLCBpbmNsdWRpbmcgdGhlIHBob25lIiwKKyNlbmRpZiAvKiBPUzIgKi8KKyIgIG51 bWJlciwgZm9yIGV4YW1wbGU6IiwKKyIgIiwKKyIgICBESUFMIDc2NTQzMjEiLAorI2lmZGVmIE5F VENPTk4KKyIgIiwKKyIgIElmIHRoZSBtb2RlbSBpcyBvbiBhIG5ldHdvcmsgbW9kZW0gc2VydmVy LCBTRVQgSE9TVCBmaXJzdCwgdGhlbiBTRVQgTU9ERU0iLAorIiAgVFlQRSwgdGhlbiBESUFMLiIs CisjZW5kaWYgLyogTkVUQ09OTiAqLworIiAiLAorIklmIHlvdSBnaXZlIHRoZSBESUFMIGNvbW1h bmQgaW50ZXJhY3RpdmVseSBhdCB0aGUgS2VybWl0IHByb21wdCwgYW5kIHRoZSIsCisiY2FsbCBp cyBwbGFjZWQgc3VjY2Vzc2Z1bGx5LCBLZXJtaXQgYXV0b21hdGljYWxseSBlbnRlcnMgQ09OTkVD VCBtb2RlLiIsCisiSWYgdGhlIERJQUwgY29tbWFuZCBpcyBnaXZlbiBmcm9tIGEgbWFjcm8gb3Ig Y29tbWFuZCBmaWxlLCBLZXJtaXQgcmVtYWlucyIsCisiaW4gY29tbWFuZCBtb2RlIGFmdGVyIHRo ZSBjYWxsIGlzIHBsYWNlZCwgc3VjY2Vzc2Z1bGx5IG9yIG5vdC4gIFlvdSBjYW4iLAorImNoYW5n ZSB0aGlzIGJlaGF2aW9yIHdpdGggdGhlIFNFVCBESUFMIENPTk5FQ1QgY29tbWFuZC4iLAorIiAi LAorIklmIHRoZSBwaG9uZW51bWJlciBzdGFydHMgd2l0aCBhIGxldHRlciwgYW5kIGlmIHlvdSBo YXZlIHVzZWQgdGhlIFNFVCBESUFMIiwKKyJESVJFQ1RPUlkgY29tbWFuZCB0byBzcGVjaWZ5IG9u ZSBvciBtb3JlIGRpYWxpbmctZGlyZWN0b3J5IGZpbGVzLCBLZXJtaXQiLAorImxvb2tzIGl0IHVw IGluIHRoZSBnaXZlbiBmaWxlKHMpOyBpZiBpdCBpcyBmb3VuZCwgdGhlIG5hbWUgaXMgcmVwbGFj ZWQgYnkiLAorInRoZSBudW1iZXIgb3IgbnVtYmVycyBhc3NvY2lhdGVkIHdpdGggdGhlIG5hbWUu ICBJZiBpdCBpcyBub3QgZm91bmQsIHRoZSIsCisibmFtZSBpcyBzZW50IHRvIHRoZSBtb2RlbSBs aXRlcmFsbHkuIiwKKyIgIiwKKyJJZiB0aGUgcGhvbmVudW1iZXIgc3RhcnRzIHdpdGggYW4gZXF1 YWxzIHNpZ24gKFwiPVwiKSwgdGhpcyBmb3JjZXMgdGhlIHBhcnQiLAorImFmdGVyIHRoZSA9IHRv IGJlIHNlbnQgbGl0ZXJhbGx5IHRvIHRoZSBtb2RlbSwgZXZlbiBpZiBpdCBzdGFydHMgd2l0aCBh IiwKKyJsZXR0ZXIsIHdpdGhvdXQgYW55IGRpcmVjdG9yeSBsb29rdXAuIiwKKyIgIiwKKyJZb3Ug Y2FuIGFsc28gZ2l2ZSBhIGxpc3Qgb2YgcGhvbmUgbnVtYmVycyBlbmNsb3NlZCBpbiBicmFjZXMs IGUuZzoiLAorIiAiLAorIiAgZGlhbCB7ezc2NTQzMjF9ezg3NjU0MzJ9eysxICgyMTIgNTU1LTEy MTJ9fSIsCisiICIsCisiKEVhY2ggbnVtYmVyIGlzIGVuY2xvc2VkIGluIGJyYWNlcyBhbmQgdGhl IGVudGlyZSBsaXN0IGlzIGFsc28gZW5jbG9zZWQgaW4iLAorImJyYWNlcy4pICBJbiB0aGlzIGNh c2UsIGVhY2ggbnVtYmVyIGlzIHRyaWVkIHVudGlsIHRoZXJlIGlzIGFuIGFuc3dlci4gIFRoZSIs CisicGhvbmUgbnVtYmVycyBpbiB0aGlzIGtpbmQgb2YgbGlzdCBjYW4gbm90IGJlIG5hbWVzIG9m IGRpYWxpbmcgZGlyZWN0b3J5IiwKKyJlbnRyaWVzLiIsCisiICIsCisiQSBkaWFsaW5nIGRpcmVj dG9yeSBpcyBhIHBsYWluIHRleHQgZmlsZSwgb25lIGVudHJ5IHBlciBsaW5lOiIsCisiICIsCisi ICBuYW1lICBwaG9uZW51bWJlciAgOyAgY29tbWVudHMiLAorIiAiLAorImZvciBleGFtcGxlOiIs CisiICIsCisiICB3b3JrICAgIDk4NzY1NDMgICAgICAgICAgICAgIDsgVGhpcyBpcyBhIGNvbW1l bnQiLAorIiAgZS1tYWlsICArMSAgKDIxMikgNTU1IDQzMjEgICA7IE15IGVsZWN0cm9uaWMgbWFp bGJveCIsCisiICBnZXJtYW55ICs0OSAoNTExKSA1NTUgMTIzNCAgIDsgT3VyIGJyYW5jaCBpbiBI YW5vdmVyIiwKKyIgIiwKKyJJZiBhIHBob25lIG51bWJlciBzdGFydHMgd2l0aCArLCB0aGVuIGl0 IG11c3QgaW5jbHVkZSBjb3VudHJ5IGNvZGUgYW5kIiwKKyJhcmVhIGNvZGUsIGFuZCBDLUtlcm1p dCB3aWxsIHRyeSB0byBoYW5kbGUgdGhlc2UgYXBwcm9wcmlhdGVseSBiYXNlZCBvbiIsCisidGhl IGN1cnJlbnQgbG9jYWxlIChIRUxQIFNFVCBESUFMIGZvciBmdXJ0aGVyIGluZm8pOyB0aGVzZSBh cmUgY2FsbGVkIiwKKyJQT1JUQUJMRSBlbnRyaWVzLiAgSWYgaXQgZG9lcyBub3Qgc3RhcnQgd2l0 aCArLCBpdCBpcyBkaWFsZWQgbGl0ZXJhbGx5LiIsCisiICIsCisiSWYgbW9yZSB0aGFuIG9uZSBl bnRyeSBpcyBmb3VuZCB3aXRoIHRoZSBzYW1lIG5hbWUsIEtlcm1pdCBkaWFscyBhbGwgb2YiLAor InRoZW0gdW50aWwgdGhlIGNhbGwgaXMgY29tcGxldGVkOyBpZiB0aGUgZW50cmllcyBhcmUgaW4g cG9ydGFibGUgZm9ybWF0LCIsCisiS2VybWl0IGRpYWxzIHRoZW0gaW4gY2hlYXAtdG8tZXhwZW5z aXZlIG9yZGVyOiBpbnRlcm5hbCwgdGhlbiBsb2NhbCwgdGhlbiIsCisibG9uZy1kaXN0YW5jZSwg dGhlbiBpbnRlcm5hdGlvbmFsLCBiYXNlZCBvbiBpdHMga25vd2xlZGdlIG9mIHlvdXIgbG9jYWwi LAorImNvdW50cnkgY29kZSBhbmQgYXJlYSBjb2RlIChzZWUgSEVMUCBTRVQgRElBTCkuIiwKKyIg IiwKKyJTcGVjaWZ5IHlvdXIgZGlhbGluZyBkaXJlY3RvcnkgZmlsZShzKSB3aXRoIHRoZSBTRVQg RElBTCBESVJFQ1RPUlkgY29tbWFuZC4iLAorIiAiLAorI2lmZGVmIE5FVENPTk4KKyJTZWUgYWxz byBTRVQgRElBTCwgU0VUIE1PREVNLCBTRVQgTElORSwgU0VUIEhPU1QsIFNFVCBTUEVFRCwgUkVE SUFMLCBhbmQiLAorIlBESUFMLiIsCisjZWxzZQorIlNlZSBhbHNvIFNFVCBESUFMLCBTRVQgTU9E RU0sIFNFVCBMSU5FLCBTRVQgU1BFRUQsIFBESUFMLCBhbmQgUkVESUFMLiIsCisjZW5kaWYgLyog TkVUQ09OTiAqLworIiIgfTsKKworI2lmZGVmIENLX1RBUEkKK3N0YXRpYyBjaGFyICpoeHh0YXBp W10gPSB7CisiVEFQSSBDT05GSUdVUkUtTElORSA8dGFwaS1saW5lPiIsCisiICBEaXNwbGF5cyB0 aGUgVEFQSSBDb25maWd1cmUgTGluZSBEaWFsb2cgYm94IGFuZCBhbGxvd3MgeW91IHRvIiwKKyIg IGFsdGVyIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgPHRhcGkt bGluZT4uIiwKKyIgIiwKKyJUQVBJIERJQUxJTkctUFJPUEVSVElFUyIsCisiICBEaXNwbGF5cyB0 aGUgVEFQSSBEaWFsaW5nIFByb3BlcnRpZXMgKGxvY2F0aW9ucykgRGlhbG9nIGJveC4gIFRoZSIs CisiICBEaWFsaW5nIHJ1bGVzIG1heSBiZSBjaGFuZ2VkIGFuZCBsb2NhdGlvbnMgY3JlYXRlZCBh bmQgZGVsZXRlZC4iLAorIiAgV2hlbiB0aGUgZGlhbG9nIGJveCBpcyBjbG9zZWQsIEstOTUgaW1w b3J0cyB0aGUgY3VycmVudCBEaWFsaW5nIiwKKyIgIFByb3BlcnRpZXMnIExvY2F0aW9uIGludG8g dGhlIEtlcm1pdCBESUFMIGNvbW1hbmQgc2V0dGluZ3MuIiwKKyIifTsKKworc3RhdGljIGNoYXIg Kmh4eXRhcGlbXSA9IHsKKyJTRVQgVEFQSSBMSU5FIDx0YXBpLWxpbmU+IiwKKyIgIE9wZW5zIGEg VEFQSSBkZXZpY2UgZm9yIHVzZSBieSBLZXJtaXQuIiwKKyIgIiwKKyJTRVQgVEFQSSBNT0RFTS1E SUFMSU5HIHtPTiwgW09GRl19IiwKKyIgIElmIFRBUEkgTU9ERU0tRElBTElORyBpcyBPRkYgd2hl biBTRVQgVEFQSSBMSU5FIGlzIGlzc3VlZCwgS2VybWl0IG9wZW5zIiwKKyIgIHRoZSBUQVBJIGRl dmljZSBkaXJlY3RseSBhcyBhIFwicmF3IHBvcnRcIi4gIFRoZSBkZXZpY2UgaXMgdW5hdmFpbGFi bGUgdG8iLAorIiAgb3RoZXIgYXBwbGljYXRpb25zIGFuZCBLZXJtaXQgcGVyZm9ybXMgZGlhbGlu ZyBmdW5jdGlvbnMgdXNpbmcgaXRzIiwKKyIgIGJ1aWx0LWluIGRpYWxpbmcgYW5kIG1vZGVtIGRh dGFiYXNlcy4gIElmIFRBUEkgTU9ERU0tRElBTElORyBpcyBPTiwgVEFQSSIsCisiICBoYW5kbGVz IGFsbCBkaWFsaW5nIGZ1bmN0aW9ucyBhbmQgdGhlIHBvcnQgbWF5IGJlIHNoYXJlZCB3aXRoIG90 aGVyIiwKKyIgIGFwcGxpY2F0aW9ucyB3aGVuIGEgY2FsbCBpcyBub3QgYWN0aXZlLiAgV2hlbiBU QVBJIE1PREVNLURJQUxJTkcgaXMgT0ZGLCIsCisiICBTRVQgTU9ERU0gVFlQRSBUQVBJIEtlcm1p dCB1c2VzIHRoZSBUQVBJIG1vZGVtIGNvbW1hbmRzIGltcG9ydGVkIGZyb20gdGhlIiwKKyIgIFdp bmRvd3MgUmVnaXN0cnkgZHVyaW5nIHRoZSBwcmV2aW91cyBTRVQgVEFQSSBMSU5FIGNhbGwuIiwK KyIgIiwKKyJTRVQgVEFQSSBMT0NBVElPTiA8dGFwaS1sb2NhdGlvbj4iLAorIiAgU3BlY2lmaWVz IHRoZSBUQVBJIGxvY2F0aW9uIHRvIG1ha2UgY3VycmVudCBmb3IgdGhlIGVudGlyZSBzeXN0ZW0u ICBUaGUiLAorIiAgPHRhcGktbG9jYXRpb24+J3MgZGlhbGluZyBwcm9wZXJ0aWVzIGFyZSBpbXBv cnRlZCBpbnRvIEtlcm1pdCdzIFNFVCBESUFMIiwKKyIgIGNvbW1hbmQgZGF0YWJhc2UuIiwKKyIg IiwKKyJTRVQgVEFQSSBQSE9ORS1OVU1CRVItQ09OVkVSU0lPTlMge09OLCBPRkYsIFtBVVRPXX0i LAorIiAgQ29udHJvbHMgd2hldGhlciB0aGUgcGhvbmUgbnVtYmVyIGNvbnZlcnNpb25zIGFyZSBw ZXJmb3JtZWQgYnkgVEFQSSAoT04pIiwKKyIgIG9yIGJ5IEtlcm1pdCAoT0ZGKSwgb3IgYWNjb3Jk aW5nIHRoZSB0eXBlIG9mIHBvcnQgdGhhdCB3YXMgc2VsZWN0ZWQiLAorIiAgKEFVVE8pOyBBVVRP IGlzIHRoZSBkZWZhdWx0LCBhbmQgaXMgZXF1aXZhbGVudCB0byBPTiBpZiB0aGUgY3VycmVudCIs CisiICBMSU5FL1BPUlQgaXMgYSBUQVBJIGRldmljZSBhbmQgVEFQSSBNT0RFTS1ESUFMSU5HIGlz IE9OLCBPRkYgb3RoZXJ3aXNlLiIsCisiICIsCisiU0VUIFRBUEkgTU9ERU0tTElHSFRTIHtbT05d LCBPRkZ9IiwKKyIgIERpc3BsYXlzIGEgbW9kZW0gbGlnaHRzIGluZGljYXRvciBvbiB0aGUgV2lu ZG93cyA5NSBUYXNrYmFyLiAgRG9lcyBub3RoaW5nIiwKKyIgIGluIFdpbmRvd3MgTlQgNC4wLiIs CisiICIsCisiU0VUIFRBUEkgTUFOVUFMLURJQUxJTkcge09OLCBbT0ZGXX0iLAorIiAgRGlzcGxh eXMgYSBkaWFsb2cgYm94IGR1cmluZyBkaWFsaW5nIHJlcXVlc3RpbmcgdGhhdCB5b3UgbWFudWFs bHkgZGlhbCB0aGUiLAorIiAgcGhvbmUgYmVmb3JlIGNvbnRpbnVpbmcuICBBcHBsaWVzIG9ubHkg d2hlbiBUQVBJIE1PREVNLURJQUxJTkcgaXMgT04uIiwKKyIgIiwKKyJTRVQgVEFQSSBXQUlULUZP Ui1DUkVESVQtQ0FSRC1UT05FIDxzZWNvbmRzPiIsCisiICBTb21lIG1vZGVtcyBkb24ndCBzdXBw b3J0IHRoZSAnJCcgKEJPTkcpIHN5bWJvbCBkdXJpbmcgZGlhbGluZywgd2hpY2giLAorIiAgbWVh bnMgXCJ3YWl0IGZvciBjcmVkaXQgY2FyZCB0b25lIGJlZm9yZSBjb250aW51aW5nLlwiICBJZiBU QVBJIHJlY29nbml6ZXMiLAorIiAgdGhlIG1vZGVtIGFzIG9uZSB0aGF0IGRvZXMgbm90IHN1cHBv cnQgQk9ORywgaXQgcmVwbGFjZXMgdGhlICckJyB3aXRoIiwKKyIgIDxzZWNvbmRzPiB3b3J0aCBv ZiBwYXVzZXMuICBUaGUgZGVmYXVsdCBpcyA4IHNlY29uZHMuICBUaGlzIGNvbW1hbmQiLAorIiAg YXBwbGllcyBvbmx5IHdoZW4gVEFQSSBNT0RFTS1ESUFMSU5HIGlzIE9OIiwKKyIgIiwKKyJTRVQg VEFQSSBQUkUtRElBTC1URVJNSU5BTCB7T04sIFtPRkZdfSIsCisiU0VUIFRBUEkgUE9TVC1ESUFM LVRFUk1JTkFMIHtPTiwgW09GRl19IiwKKyIgIERpc3BsYXlzIGEgc21hbGwgdGVybWluYWwgd2lu ZG93IHRoYXQgbWF5IGJlIHVzZWQgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUiLAorIiAgbW9kZW0g b3IgdGhlIGhvc3QgcHJpb3IgdG8gb3IgaW1tZWRpYXRlbHkgYWZ0ZXIgZGlhbGluZzsgYXBwbGll cyBvbmx5IHdoZW4iLAorIiAgVEFQSSBNT0RFTS1ESUFMSU5HIGlzIE9OIiwKKyIgIiwKKyJTRVQg VEFQSSBJTkFDVElWSVRZLVRJTUVPVVQgPG1pbnV0ZXM+IiwKKyIgIFNwZWNpZmllcyB0aGUgbnVt YmVyIG9mIG1pbnV0ZXMgb2YgaW5hY3Rpdml0eSB0aGF0IG1heSBnbyBieSBiZWZvcmUgVEFQSSIs CisiICBkaXNjb25uZWN0cyB0aGUgbGluZS4gIFRoZSBkZWZhdWx0IGlzIDAgd2hpY2ggbWVhbnMg ZGlzYWJsZSB0aGlzIGZ1bmN0aW9uLiIsCisiICBBcHBsaWVzIG9ubHkgd2hlbiBUQVBJIE1PREVN LURJQUxJTkcgaXMgT04uIiwKKyIgIiwKKyJTRVQgVEFQSSBVU0UtV0lORE9XUy1DT05GSUdVUkFU SU9OIHtPTiwgW09GRl19IiwKKyIgIFNwZWNpZmllcyB3aGV0aGVyIHRoZSBUQVBJIG1vZGVtIHZh bHVlcyBmb3Igc3BlZWQsIHBhcml0eSwgc3RvcCBiaXRzLCBmbG93IiwKKyIgIGNvbnRyb2wsIGV0 Yy4gYXJlIHVzZWQgaW4gcHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCB2YWx1ZXMgc3BlY2lmaWVk IiwKKyIgIHdpdGhpbiBLZXJtaXQtOTUuIiwKKyIgIiwKKyIifTsKKyNlbmRpZiAvKiBDS19UQVBJ ICovCisKKyNlbmRpZiAvKiBOT0RJQUwgKi8KKworI2lmZGVmIFROQ09ERQorc3RhdGljIGNoYXIg KmhteHhpa3NbXSA9IHsKKyJTeW50YXg6IElLUyBbIHN3aXRjaGVzIF0gWyBob3N0IFsgc2Vydmlj ZSBdIF0iLAorIiAgRXN0YWJsaXNoZXMgYSBuZXcgY29ubmVjdGlvbiB0byBhbiBJbnRlcm5ldCBL ZXJtaXQgU2VydmljZSBkYWVtb24uIiwKKyIgIEVxdWl2YWxlbnQgdG8gU0VUIE5FVFdPUksgVFlQ RSBUQ1AvSVAsIFNFVCBIT1NUIGhvc3QgS0VSTUlUIC9URUxORVQsIiwKKyIgIElGIFNVQ0NFU1Mg Q09OTkVDVC4gIElmIGhvc3QgaXMgb21pdHRlZCwgdGhlIHByZXZpb3VzIGNvbm5lY3Rpb24gKGlm IGFueSkiLAorIiAgaXMgcmVzdW1lZC4gIERlcGVuZGluZyBvbiBob3cgS2VybWl0IGhhcyBiZWVu IGJ1aWx0IHN3aXRjaGVzIG1heSBiZSIsCisiICBhdmFpbGFibGUgdG8gcmVxdWlyZSBhIHNlY3Vy ZSBhdXRoZW50aWNhdGlvbiBtZXRob2QgYW5kIGJpZGlyZWN0aW9uYWwiLAorIiAgZW5jcnlwdGlv bi4gIFNlZSBIRUxQIFNFVCBURUxORVQgZm9yIG1vcmUgaW5mby4iLAorIiAiLAorI2lmZGVmIENL X0FVVEhFTlRJQ0FUSU9OCisiIC9BVVRIOjx0eXBlPiBpcyBlcXVpdmFsZW50IHRvIFNFVCBURUxO RVQgQVVUSCBUWVBFIDx0eXBlPiBhbmQiLAorIiAgIFNFVCBURUxPUFQgQVVUSCBSRVFVSVJFRCB3 aXRoIHRoZSBmb2xsb3dpbmcgZXhjZXB0aW9ucy4gIElmIHRoZSB0eXBlIiwKKyIgICBpcyBBVVRP LCB0aGVuIFNFVCBURUxPUFQgQVVUSCBSRVFVRVNURUQgaXMgZXhlY3V0ZWQgYW5kIGlmIHRoZSB0 eXBlIiwKKyIgICBpcyBOT05FLCB0aGVuIFNFVCBURUxPUFQgQVVUSCBSRUZVU0VEIGlzIGV4ZWN1 dGVkLiIsCisiICIsCisjZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJT04gKi8KKyNpZmRlZiBDS19F TkNSWVBUSU9OCisiIC9FTkNSWVBUOjx0eXBlPiBpcyBlcXVpdmFsZW50IHRvIFNFVCBURUxORVQg RU5DUllQVCBUWVBFIDx0eXBlPiIsCisiICAgYW5kIFNFVCBURUxPUFQgRU5DUllQVCBSRVFVSVJF RCBSRVFVSVJFRCB3aXRoIHRoZSBmb2xsb3dpbmcgZXhjZXB0aW9ucy4iLAorIiAgIElmIHRoZSB0 eXBlIGlzIEFVVE8gdGhlbiBTRVQgVEVMT1BUIEFVVEggUkVRVUVTVEVEIFJFUVVFU1RFRCBpcyBl eGVjdXRlZCIsCisiICAgYW5kIGlmIHRoZSB0eXBlIGlzIE5PTkUgdGhlbiBTRVQgVEVMT1BUIEVO Q1JZUFQgUkVGVVNFRCBSRUZVU0VEIGlzIiwKKyIgICBleGVjdXRlZC4iLAorIiAiLAorI2VuZGlm IC8qIENLX0VOQ1JZUFRJT04gKi8KKyIgL1VTRVJJRDpbPG5hbWU+XSIsCisiICAgVGhpcyBzd2l0 Y2ggaXMgZXF1aXZhbGVudCB0byBTRVQgTE9HSU4gVVNFUklEIDxuYW1lPiBvciBTRVQgVEVMTkVU IiwKKyIgICBFTlZJUk9OTUVOVCBVU0VSIDxuYW1lPi4gIElmIGEgc3RyaW5nIGlzIGdpdmVuLCBp dCBzZW50IHRvIGhvc3QgZHVyaW5nIiwKKyIgICBUZWxuZXQgbmVnb3RpYXRpb25zOyBpZiB0aGlz IHN3aXRjaCBpcyBnaXZlbiBidXQgdGhlIHN0cmluZyBpcyBvbWl0dGVkLCIsCisiICAgbm8gdXNl ciBJRCBpcyBzZW50IHRvIHRoZSBob3N0LiAgSWYgdGhpcyBzd2l0Y2ggaXMgbm90IGdpdmVuLCB5 b3VyIiwKKyIgICBjdXJyZW50IFVTRVJJRCB2YWx1ZSwgXFx2KHVzZXJpZCksIGlzIHNlbnQuICBX aGVuIGEgdXNlcmlkIGlzIHNlbnQgdG8gdGhlIiwKKyIgICBob3N0IGl0IGlzIGEgcmVxdWVzdCB0 byBsb2dpbiBhcyB0aGUgc3BlY2lmaWVkIHVzZXIuIiwKKyIgIiwKKyNpZmRlZiBDS19BVVRIRU5U SUNBVElPTgorIiAvUEFTU1dPUkQ6WzxzdHJpbmc+XSIsCisiICAgVGhpcyBzd2l0Y2ggaXMgZXF1 aXZhbGVudCB0byBTRVQgTE9HSU4gUEFTU1dPUkQuICBJZiBhIHN0cmluZyBpcyBnaXZlbiwiLAor IiAgIGl0IGlzIHRyZWF0ZWQgYXMgdGhlIHBhc3N3b3JkIHRvIGJlIHVzZWQgKGlmIHJlcXVpcmVk KSBieSBhbnkgVGVsbmV0IiwKKyIgICBBdXRoZW50aWNhdGlvbiBwcm90b2NvbCAoS2VyYmVyb3Mg VGlja2V0IHJldHJpZXZhbCwgU2VjdXJlIFJlbW90ZSIsCisiICAgUGFzc3dvcmQsIG9yIFguNTA5 IGNlcnRpZmljYXRlIHByaXZhdGUga2V5IGRlY3J5cHRpb24uKSAgSWYgbm8gcGFzc3dvcmQiLAor IiAgIHN3aXRjaCBpcyBzcGVjaWZpZWQgYSBwcm9tcHQgaXMgaXNzdWVkIHRvIHJlcXVlc3QgdGhl IHBhc3N3b3JkIGlmIG9uZSIsCisiICAgaXMgcmVxdWlyZWQgZm9yIHRoZSBuZWdvdGlhdGVkIGF1 dGhlbnRpY2F0aW9uIG1ldGhvZC4iLAorI2VuZGlmIC8qIENLX0FVVEhFTlRJQ0FUSU9OICovCisi In07CisKK3N0YXRpYyBjaGFyICpobXh4dGVsW10gPSB7CisiU3ludGF4OiBURUxORVQgWyBzd2l0 Y2hlcyBdIFsgaG9zdCBbIHNlcnZpY2UgXSBdIiwKKyIgIEVxdWl2YWxlbnQgdG8gU0VUIE5FVFdP UksgVFlQRSBUQ1AvSVAsIFNFVCBIT1NUIGhvc3QgWyBzZXJ2aWNlIF0gL1RFTE5FVCwiLAorIiAg SUYgU1VDQ0VTUyBDT05ORUNULiAgSWYgaG9zdCBpcyBvbWl0dGVkLCB0aGUgcHJldmlvdXMgY29u bmVjdGlvbiAoaWYgYW55KSIsCisiICBpcyByZXN1bWVkLiAgRGVwZW5kaW5nIG9uIGhvdyBLZXJt aXQgaGFzIGJlZW4gYnVpbHQgc3dpdGNoZXMgbWF5IGJlIiwKKyIgIGF2YWlsYWJsZSB0byByZXF1 aXJlIGEgc2VjdXJlIGF1dGhlbnRpY2F0aW9uIG1ldGhvZCBhbmQgYmlkaXJlY3Rpb25hbCIsCisi ICBlbmNyeXB0aW9uLiAgU2VlIEhFTFAgU0VUIFRFTE5FVCBmb3IgbW9yZSBpbmZvLiIsCisiICIs CisjaWZkZWYgQ0tfQVVUSEVOVElDQVRJT04KKyIgL0FVVEg6PHR5cGU+IGlzIGVxdWl2YWxlbnQg dG8gU0VUIFRFTE5FVCBBVVRIIFRZUEUgPHR5cGU+IGFuZCIsCisiICAgU0VUIFRFTE9QVCBBVVRI IFJFUVVJUkVEIHdpdGggdGhlIGZvbGxvd2luZyBleGNlcHRpb25zLiAgSWYgdGhlIHR5cGUiLAor IiAgIGlzIEFVVE8sIHRoZW4gU0VUIFRFTE9QVCBBVVRIIFJFUVVFU1RFRCBpcyBleGVjdXRlZCBh bmQgaWYgdGhlIHR5cGUiLAorIiAgIGlzIE5PTkUsIHRoZW4gU0VUIFRFTE9QVCBBVVRIIFJFRlVT RUQgaXMgZXhlY3V0ZWQuIiwKKyIgIiwKKyNlbmRpZiAvKiBDS19BVVRIRU5USUNBVElPTiAqLwor I2lmZGVmIENLX0VOQ1JZUFRJT04KKyIgL0VOQ1JZUFQ6PHR5cGU+IGlzIGVxdWl2YWxlbnQgdG8g U0VUIFRFTE5FVCBFTkNSWVBUIFRZUEUgPHR5cGU+IiwKKyIgICBhbmQgU0VUIFRFTE9QVCBFTkNS WVBUIFJFUVVJUkVEIFJFUVVJUkVEIHdpdGggdGhlIGZvbGxvd2luZyBleGNlcHRpb25zLiIsCisi ICAgSWYgdGhlIHR5cGUgaXMgQVVUTyB0aGVuIFNFVCBURUxPUFQgQVVUSCBSRVFVRVNURUQgUkVR VUVTVEVEIGlzIGV4ZWN1dGVkIiwKKyIgICBhbmQgaWYgdGhlIHR5cGUgaXMgTk9ORSB0aGVuIFNF VCBURUxPUFQgRU5DUllQVCBSRUZVU0VEIFJFRlVTRUQgaXMiLAorIiAgIGV4ZWN1dGVkLiIsCisi ICIsCisjZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLworIiAvVVNFUklEOls8bmFtZT5dIiwKKyIg ICBUaGlzIHN3aXRjaCBpcyBlcXVpdmFsZW50IHRvIFNFVCBMT0dJTiBVU0VSSUQgPG5hbWU+IG9y IFNFVCBURUxORVQiLAorIiAgIEVOVklST05NRU5UIFVTRVIgPG5hbWU+LiAgSWYgYSBzdHJpbmcg aXMgZ2l2ZW4sIGl0IHNlbnQgdG8gaG9zdCBkdXJpbmciLAorIiAgIFRlbG5ldCBuZWdvdGlhdGlv bnM7IGlmIHRoaXMgc3dpdGNoIGlzIGdpdmVuIGJ1dCB0aGUgc3RyaW5nIGlzIG9taXR0ZWQsIiwK KyIgICBubyB1c2VyIElEIGlzIHNlbnQgdG8gdGhlIGhvc3QuICBJZiB0aGlzIHN3aXRjaCBpcyBu b3QgZ2l2ZW4sIHlvdXIiLAorIiAgIGN1cnJlbnQgVVNFUklEIHZhbHVlLCBcXHYodXNlcmlkKSwg aXMgc2VudC4gIFdoZW4gYSB1c2VyaWQgaXMgc2VudCB0byB0aGUiLAorIiAgIGhvc3QgaXQgaXMg YSByZXF1ZXN0IHRvIGxvZ2luIGFzIHRoZSBzcGVjaWZpZWQgdXNlci4iLAorIiAiLAorI2lmZGVm IENLX0FVVEhFTlRJQ0FUSU9OCisiIC9QQVNTV09SRDpbPHN0cmluZz5dIiwKKyIgICBUaGlzIHN3 aXRjaCBpcyBlcXVpdmFsZW50IHRvIFNFVCBMT0dJTiBQQVNTV09SRC4gIElmIGEgc3RyaW5nIGlz IGdpdmVuLCIsCisiICAgaXQgaXMgdHJlYXRlZCBhcyB0aGUgcGFzc3dvcmQgdG8gYmUgdXNlZCAo aWYgcmVxdWlyZWQpIGJ5IGFueSBUZWxuZXQiLAorIiAgIEF1dGhlbnRpY2F0aW9uIHByb3RvY29s IChLZXJiZXJvcyBUaWNrZXQgcmV0cmlldmFsLCBTZWN1cmUgUmVtb3RlIiwKKyIgICBQYXNzd29y ZCwgb3IgWC41MDkgY2VydGlmaWNhdGUgcHJpdmF0ZSBrZXkgZGVjcnlwdGlvbi4pICBJZiBubyBw YXNzd29yZCIsCisiICAgc3dpdGNoIGlzIHNwZWNpZmllZCBhIHByb21wdCBpcyBpc3N1ZWQgdG8g cmVxdWVzdCB0aGUgcGFzc3dvcmQgaWYgb25lIiwKKyIgICBpcyByZXF1aXJlZCBmb3IgdGhlIG5l Z290aWF0ZWQgYXV0aGVudGljYXRpb24gbWV0aG9kLiIsCisjZW5kaWYgLyogQ0tfQVVUSEVOVElD QVRJT04gKi8KKyIifTsKKworc3RhdGljIGNoYXIgKmh4dG9wdFtdID0geworIlRFTE9QVCB7IEFP LCBBWVQsIEJSRUFLLCBDQU5DRUwsIEVDLCBFTCwgRU9GLCBFT1IsIEdBLCBJUCwgRE1BUkssIE5P UCwgU0UsIiwKKyIgICAgICAgICBTVVNQLCBTQiBbIG9wdGlvbiBdLCBETyBbIG9wdGlvbiBdLCBE T05UIFsgb3B0aW9uIF0sIiwKKyIgICAgICAgICBXSUxMIFsgb3B0aW9uIF0sIFdPTlQgW29wdGlv bl0gfSIsCisiICBUaGlzIGNvbW1hbmQgbGV0cyB5b3Ugc2VuZCBhbGwgdGhlIFRlbG5ldCBwcm90 b2NvbCBjb21tYW5kcy4gIE5vdGUgdGhhdCIsCisiICBjZXJ0YWluIGNvbW1hbmRzIGRvIG5vdCBy ZXF1aXJlIGEgcmVzcG9uc2UsIGFuZCB0aGVyZWZvcmUgY2FuIGJlIHVzZWQgYXMiLAorIiAgbm9u ZGVzdHJ1Y3RpdmUgXCJwcm9iZXNcIiB0byBzZWUgaWYgdGhlIFRlbG5ldCBzZXNzaW9uIGlzIHN0 aWxsIG9wZW47IiwKKyIgIGUuZy46IiwKKyIgIiwKKyIgICAgc2V0IGhvc3QgeHl6Y29ycC5jb20i LAorIiAgICAuLi4iLAorIiAgICB0ZWxvcHQgbm9wIiwKKyIgICAgdGVsb3B0IG5vcCIsCisiICAg IGlmIGZhaWwgc3RvcCAxIENvbm5lY3Rpb24gbG9zdCIsCisiICIsCisiICBURUxPUFQgTk9QIGlz IHNlbnQgdHdpY2UgYmVjYXVzZSB0aGUgZmFpbHVyZSBvZiB0aGUgY29ubmVjdGlvbiB3aWxsIG5v dCIsCisiICBiZSBkZXRlY3RlZCB1bnRpbCB0aGUgc2Vjb25kIHNlbmQgaXMgYXR0ZW1wdGVkLiAg VGhpcyBjb21tYW5kIGlzIG1lYW50IiwKKyIgIHByaW1hcmlseSBhcyBhIGRlYnVnZ2luZyB0b29s IGZvciB0aGUgZXhwZXJ0IHVzZXIuIiwKKyIifTsKKyNlbmRpZiAvKiBUTkNPREUgKi8KKworI2Vu ZGlmIC8qIE5PSEVMUCAqLworCisvKiAgRCBPIEggTCBQICAtLSAgR2l2ZSBhIGhlbHAgbWVzc2Fn ZSAgKi8KKworX1BST1RPVFlQKCBpbnQgZG9oc2V0LCAoaW50KSApOworI2lmbmRlZiBOT0NNREwK K19QUk9UT1RZUCggaW50IGRvaG9wdHMsICh2b2lkKSApOworI2VuZGlmIC8qIE5PQ01ETCAqLwor I2lmbmRlZiBOT1NQTAorX1BST1RPVFlQKCBpbnQgZG9oZnVuYywgKGludCkgKTsKK2V4dGVybiBz dHJ1Y3Qga2V5dGFiIGZuY3RhYltdOworZXh0ZXJuIGludCBuZnVuY3M7CisjZW5kaWYgLyogTk9T UEwgKi8KKyNpZmRlZiBPUzIKKyNpZm5kZWYgTk9LVkVSQlMKK19QUk9UT1RZUCggaW50IGRvaGt2 ZXJiLCAoaW50KSApOworZXh0ZXJuIHN0cnVjdCBrZXl0YWIga3ZlcmJzW107CitleHRlcm4gaW50 IG5rdmVyYnM7CisjZW5kaWYgLyogTk9LVkVSQlMgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKworI2lm bmRlZiBOT1NQTAorc3RhdGljIGNoYXIgKiBoeHhkY2xbXSA9IHsKKyJTeW50YXg6IEFSUkFZIHZl cmIgb3BlcmFuZHMuLi4iLAorIiAiLAorIkRlY2xhcmVzIGFycmF5cyBhbmQgcGVyZm9ybXMgdmFy aW91cyBvcGVyYXRpb25zIG9uIHRoZW0uICBBcnJheXMgaGF2ZSIsCisidGhlIGZvbGxvd2luZyBz eW50YXg6IiwKKyIgIiwKKyIgIFxcJmFbbl0iLAorIiAiLAorIndoZXJlIFwiYVwiIGlzIGEgbGV0 dGVyIGFuZCBuIGlzIGEgbnVtYmVyIG9yIGEgdmFyaWFibGUgd2l0aCBhIG51bWVyaWMgdmFsdWUi LAorIm9yIGFuIGFyaXRobWV0aWMgZXhwcmVzc2lvbi4gIFRoZSB2YWx1ZSBvZiBhbiBhcnJheSBl bGVtZW50IGNhbiBiZSBhbnl0aGluZyIsCisiYXQgYWxsIC0tIGEgbnVtYmVyLCBhIGNoYXJhY3Rl ciwgYSBzdHJpbmcsIGEgZmlsZW5hbWUsIGV0Yy4iLAorIiAiLAorIlRoZSBmb2xsb3dpbmcgQVJS QVkgdmVyYnMgYXJlIGF2YWlsYWJsZToiLAorIiAiLAorIlsgQVJSQVkgXSBERUNMQVJFIGFycmF5 bmFtZVtuXSBbID0gaW5pdGlhbGl6ZXJzLi4uIF0iLAorIiAgRGVjbGFyZXMgYW4gYXJyYXkgb2Yg dGhlIGdpdmVuIHNpemUsIG4uICBUaGUgcmVzdWx0aW5nIGFycmF5IGhhcyBuKzEiLAorIiAgZWxl bWVudHMsIDAgdGhyb3VnaCBuLiAgQXJyYXkgZWxlbWVudHMgY2FuIGJlIHVzZWQganVzdCBsaWtl IGFueSBvdGhlciIsCisiICB2YXJpYWJsZXMuICBJbml0aWFsIHZhbHVlcyBjYW4gYmUgZ2l2ZW4g Zm9yIGVsZW1lbnRzIDEsIDIsIC4uLiBieSIsCisiICBpbmNsdWRpbmcgPSBmb2xsb3dlZCBieSBv bmUgb3IgbW9yZSB2YWx1ZXMgc2VwYXJhdGVkIGJ5IHNwYWNlcy4gIElmIHlvdSIsCisiICBvbWl0 IHRoZSBzaXplLCB0aGUgYXJyYXkgaXMgc2l6ZWQgYWNjb3JkaW5nIHRvIHRoZSBudW1iZXIgb2Yg aW5pdGlhbGl6ZXJzOyIsCisiICBpZiBub25lIGFyZSBnaXZlbiB0aGUgYXJyYXkgaXMgZGVzdHJv eWVkIGFuZCB1bmRlY2xhcmVkIGlmIGl0IGFscmVhZHkiLAorIiAgZXhpc3RlZC4gIFRoZSBBUlJB WSBrZXl3b3JkIGlzIG9wdGlvbmFsLiAgU3lub255bTogWyBBUlJBWSBdIERDTC4iLAorIiAiLAor IlsgQVJSQVkgXSBVTkRFQ0xBUkUgYXJyYXluYW1lIiwKKyIgIERlc3Ryb3lzIGFuZCB1bmRlY2xh cmVzIHRoZSBnaXZlbiBhcnJheS4gIFN5bm9ueW06IEFSUkFZIERFU1RST1kuIiwKKyIgIiwKKyJB UlJBWSBTSE9XIFsgYXJyYXluYW1lIF0iLAorIiAgRGlzcGxheXMgdGhlIGNvbnRlbnRzIG9mIHRo ZSBnaXZlbiBhcnJheS4gIEEgcmFuZ2Ugc3BlY2lmaWVyIGNhbiBiZSIsCisiICBpbmNsdWRlZCB0 byBkaXNwbGF5IGEgc2VnbWVudCBvZiB0aGUgYXJyYXksIGUuZy4gXCJhcnJheSBzaG93IFxcJmFb MToyNF0uXCIiCissCisiICBJZiB0aGUgYXJyYXluYW1lIGlzIG9taXR0ZWQsIGFsbCBkZWNsYXJl ZCBhcnJheXMgYXJlIGxpc3RlZCwgYnV0IHRoZWlyIiwKKyIgIGNvbnRlbnRzIGlzIG5vdCBzaG93 bi4gIFN5bm9ueW06IFNIT1cgQVJSQVkuIiwKKyIgIiwKKyJBUlJBWSBDTEVBUiBhcnJheW5hbWUi LAorIiAgQ2xlYXJzIGFsbCBlbGVtZW50cyBvZiB0aGUgYXJyYXksIGkuZS4gc2V0cyB0aGVtIHRv IGVtcHR5IHZhbHVlcy4iLAorIiAgWW91IG1heSBpbmNsdWRlIGEgcmFuZ2Ugc3BlY2lmaWVyIHRv IGNsZWFyIGEgc2VnbWVudCBvZiB0aGUgYXJyYXkgcmF0aGVyIiwKKyIgIHRoYW4gdGhlIHdob2xl IGFycmF5LCBlLmcuIFwiYXJyYXkgY2xlYXIgXFwlYVsyMjozOF1cIiIsCisiICIsCisiQVJSQVkg U0VUIGFycmF5bmFtZSB2YWx1ZSIsCisiICBTZXRzIGFsbCBlbGVtZW50cyBvZiB0aGUgYXJyYXkg dG8gdGhlIGdpdmVuIHZhbHVlLiAgWW91IG1heSBzcGVjaWZ5IGEiLAorIiAgcmFuZ2UgdG8gc2V0 IGEgc2VnbWVudCBvZiB0aGUgYXJyYXksIGUuZy4gXCJhcnJheSBzZXQgXFwlYVsyOjldIDBcIiIs CisiICIsCisiQVJSQVkgUkVTSVpFIGFycmF5bmFtZSBudW1iZXIiLAorIiAgQ2hhbmdlcyB0aGUg c2l6ZSBvZiB0aGUgZ2l2ZW4gYXJyYXksIHdoaWNoIG11c3QgYWxyZWFkeSBleGlzdCwgdG8gdGhl IiwKKyIgIG51bWJlciBnaXZlbi4gIElmIHRoZSBudW1iZXIgaXMgc21hbGxlciB0aGFuIHRoZSBj dXJyZW50IHNpemUsIHRoZSBleHRyYSIsCisiICBlbGVtZW50cyBhcmUgZGlzY2FyZGVkOyBpZiBp dCBpcyBsYXJnZXIsIG5ldyBlbXB0eSBlbGVtZW50cyBhcmUgYWRkZWQuIiwKKyIgIiwKKyJBUlJB WSBDT1BZIGFycmF5MSBhcnJheTIiLAorIiAgQ29waWVzIGFycmF5MSB0byBhcnJheTIuICBJZiBh cnJheTIgaGFzIG5vdCBiZWVuIGRlY2xhcmVkLCBpdCBpcyBjcmVhdGVkIiwKKyIgIGF1dG9tYXRp Y2FsbHkuICBSYW5nZSBzcGVjaWZpZXJzIG1heSBiZSBnaXZlbiBvbiBvbmUgb3IgYm90aCBhcnJh eXMuIiwKKyIgIiwKKyJBUlJBWSBMSU5LIGFycmF5MSBhcnJhMiIsCisiICBNYWtlcyBhcnJheTEg YSBsaW5rIHRvIGFycmF5Mi4iLAorIiAiLAorIlsgQVJSQVkgXSBTT1JUIFsgc3dpdGNoZXMgXSBh cnJheS1uYW1lIFsgYXJyYXkyIF0iLAorIiAgU29ydHMgdGhlIGdpdmVuIGFycmF5IGxleGljYWxs eSBhY2NvcmRpbmcgdG8gdGhlIHN3aXRjaGVzLiAgRWxlbWVudCAwIG9mIiwKKyIgIHRoZSBhcnJh eSBpcyBleGNsdWRlZCBmcm9tIHNvcnRpbmcgYnkgZGVmYXVsdC4gIFRoZSBBUlJBWSBrZXl3b3Jk IGlzIiwKKyIgIG9wdGlvbmFsLiAgSWYgYSBzZWNvbmQgYXJyYXkgbmFtZSBpcyBnaXZlbiwgdGhh dCBhcnJheSBpcyBzb3J0ZWQgYWNjb3JkaW5nIiwKKyIgIHRvIHRoZSBmaXJzdCBvbmUuICBTd2l0 Y2hlczoiLAorIiAiLAorIiAgL0NBU0U6e09OLE9GRn0iLAorIiAgICBJZiBPTiwgYWxwaGFiZXRp YyBjYXNlIG1hdHRlcnM7IGlmIE9GRiBpdCBpcyBpZ25vcmVkLiAgSWYgdGhpcyBzd2l0Y2ggaXMi LAorIiAgICBvbWl0dGVkLCB0aGUgY3VycmVudCBTRVQgQ0FTRSBzZXR0aW5nIGFwcGxpZXMuIiwK KyIgIiwKKyIgIC9LRVk6bnVtYmVyIiwKKyIgICAgXAorUG9zaXRpb24gKDEtYmFzZWQgY29sdW1u IG51bWJlcikgYXQgd2hpY2ggY29tcGFyaXNvbnMgYmVnaW4sIDEgYnkgZGVmYXVsdC4iLAorIiAi LAorIiAgL05VTUVSSUMiLAorIiAgICBTcGVjaWZpZXMgYSBudW1lcmljIHJhdGhlciB0aGFuIGxl eGljYWwgc29ydC4iLAorIiAiLAorIiAgL1JBTkdFOmxvd1s6aGlnaF0iLAorIiAgICBUaGUgcmFu Z2Ugb2YgZWxlbWVudHMsIGxvdyB0aHJvdWdoIGhpZ2gsIHRvIGJlIHNvcnRlZC4gIElmIHRoaXMg c3dpdGNoIiwKKyIgICAgaXMgbm90IGdpdmVuLCBlbGVtZW50cyAxIHRocm91Z2ggdGhlIGRpbWVu c2lvbmVkIHNpemUgYXJlIHNvcnRlZC4gIElmIiwKKyIgICAgOmhpZ2ggaXMgb21pdHRlZCwgdGhl IGRpbWVuc2lvbmVkIHNpemUgaXMgdXNlZC4gIFRvIGluY2x1ZGUgZWxlbWVudCAwIGluIiwKKyIg ICAgYSBzb3J0LCB1c2UgL1JBTkdFOjAgKHRvIHNvcnQgdGhlIHdob2xlIGFycmF5KSBvciAvUkFO R0U6MDpuICh0byBzb3J0IiwKKyIgICAgZWxlbWVudHMgMCB0aHJvdWdoIG4pLiAgWW91IGNhbiB1 c2UgYSByYW5nZSBzcGVjaWZpZXIgaW4gdGhlIGFycmF5IG5hbWUiLAorIiAgICBpbnN0ZWFkIG9m IHRoZSAvUkFOR0Ugc3dpdGNoLiIsCisiICIsCisiICAvUkVWRVJTRSIsCisiICAgIFNvcnQgaW4g cmV2ZXJzZSBvcmRlci4gIElmIHRoaXMgc3dpdGNoIGlzIG5vdCBnaXZlbiwgdGhlIGFycmF5IGlz IHNvcnRlZCIsCisiICAgIGluIGFzY2VuZGluZyBvcmRlci4iLAorIiAiLAorIlZhcmlvdXMgZnVu Y3Rpb25zIGFyZSBhdmFpbGFibGUgZm9yIGFycmF5IG9wZXJhdGlvbnM7IHNlZSBIRUxQIEZVTkNU SU9OIGZvciIsCisiZGV0YWlscy4gIFRoZXNlIGluY2x1ZGUgXFxmZGltZW5zaW9uKCksIFxcZmFy cmF5bG9vaygpLCBcXGZmaWxlcygpLCBcCitcXGZzcGxpdCgpLCIsCisiYW5kIG1hbnkgbW9yZS4i LAorIiJ9OworI2VuZGlmIC8qIE5PU1BMICovCisKKyNpZmRlZiBaQ09QWQorc3RhdGljIGNoYXIg KiBobXh4Y3B5W10gPSB7CisiU3ludGF4OiBDT1BZIFsgc3dpdGNoZXMgXSBmaWxlMSBmaWxlMiIs CisiICBDb3BpZXMgdGhlIHNvdXJjZSBmaWxlIChmaWxlMSkgdG8gdGhlIGRlc3RpbmF0aW9uIGZp bGUgKGZpbGUyKS4gIElmIGZpbGUyIiwKKyIgIGlzIGEgZGlyZWN0b3J5LCBmaWxlMSBjYW4gY29u dGFpbiB3aWxkY2FyZHMgdG8gZGVub3RlIGEgZ3JvdXAgb2YgZmlsZXMgdG8iLAorIiAgYmUgY29w aWVkIHRvIHRoZSBnaXZlbiBkaXJlY3RvcnkuICBTd2l0Y2hlczoiLAorIiAiLAorIiAgL0xJU1Qi LAorIiAgICBQcmludCB0aGUgZmlsZW5hbWVzIGFuZCBzdGF0dXMgd2hpbGUgY29weWluZy4gIFN5 bm9ueW1zOiAvTE9HLCAvVkVSQk9TRS4iLAorIiAiLAorIiAgL05PTElTVCIsCisiICAgIENvcHkg c2lsZW50bHkgKGRlZmF1bHQpLiBTeW5vbnltczogL05PTE9HLCAvUVVJRVQuIiwKKyIgIiwKKyIg IC9QUkVTRVJWRSIsCisiICAgIENvcHkgdGltZXN0YW1wIGFuZCBwZXJtaXNzaW9ucyBmcm9tIHNv dXJjZSBmaWxlIHRvIGRlc3RpbmF0aW9uIGZpbGUuIiwKKyIgIiwKKyIgIC9PVkVSV1JJVEU6e0FM V0FZUyxORVZFUixORVdFUixPTERFUn0iLAorIiAgICBXaGVuIGNvcHlpbmcgZnJvbSBvbmUgZGly ZWN0b3J5IHRvIGFub3RoZXIsIHRoaXMgdGVsbHMgd2hhdCB0byBkbyB3aGVuIiwKKyIgICAgdGhl IGRlc3RpbmF0aW9uIGZpbGUgYWxyZWFkeSBleGlzdHM6IG92ZXJ3cml0ZSBpdCBhbHdheXM7IG5l dmVyOyBvbmx5IGlmIiwKKyIgICAgdGhlIHNvdXJjZSBmaWxlIGlzIG5ld2VyOyBvciBvbmx5IGlm IHRoZSBzb3VyY2UgZmlsZSBpcyBvbGRlci4iLAorIiAiLAorIiAgL0FQUEVORCIsCisiICAgIEFw cGVuZCB0aGUgc291cmNlIGZpbGUgdG8gdGhlIGRlc3RpbmF0aW9uIGZpbGUuICBJbiB0aGlzIGNh c2UgdGhlIHNvdXJjZSIsCisiICAgIGZpbGUgc3BlY2lmaWNhdGlvbiBjYW4gY29udGFpbiB3aWxk Y2FyZHMsIGFuZCBhbGwgdGhlIG1hdGNoaW5nIHNvdXJjZSIsCisiICAgIGZpbGVzIGFyZSBhcHBl bmRlZCwgb25lIGFmdGVyIHRoZSBvdGhlciBpbiBhbHBoYWJldGljYWwgb3JkZXIgYnkgbmFtZSwi LAorIiAgICB0byB0aGUgZGVzdGluYXRpb24gZmlsZS4iLAorIiAiLAorIiAgL1NXQVAtQllURVMi LAorIiAgICBTd2FwIGJ5dGVzIHdoaWxlIGNvcHlpbmcgKGUuZy4gZm9yIGNvbnZlcnRpbmcgYmV0 d2VlbiBCaWctRW5kaWFuIGFuZCIsCisiICAgIExpdHRsZS1FbmRpYW4gYmluYXJ5IGRhdGEgZm9y bWF0cykuIiwKKyNpZm5kZWYgTk9TUEwKKyIgIiwKKyIgIC9GUk9NQjY0IiwKKyIgICAgQ29udmVy dCBmcm9tIEJhc2U2NCBlbmNvZGluZyB3aGlsZSBjb3B5aW5nLiIsCisiICIsCisiICAvVE9CNjQi LAorIiAgICBDb252ZXJ0IHRvIEJhc2U2NCBlbmNvZGluZyB3aGlsZSBjb3B5aW5nLiIsCisjZW5k aWYgLyogTk9TUEwgKi8KKyIiCit9OworI2VuZGlmIC8qIFpDT1BZICovCisKKyNpZm5kZWYgTk9G UklMTFMKK3N0YXRpYyBjaGFyICogaG14eHJlbltdID0geworI2lmZGVmIExPQ1VTCisiICBJZiBM T0NVUyBpcyBSRU1PVEUgb3IgTE9DVVMgaXMgQVVUTyBhbmQgeW91IGhhdmUgYW4gRlRQIGNvbm5l Y3Rpb24sIiwKKyIgIHRoaXMgY29tbWFuZCBpcyBlcXVpdmFsZW50IHRvIFJFTU9URSBSRU5BTUUg KFJSRU4pLiAgT3RoZXJ3aXNlOiIsCisiICIsCisjZW5kaWYgLyogTE9DVVMgKi8KKyJTeW50YXg6 IFJFTkFNRSBbIHN3aXRjaGVzIF0gbmFtZTEgWyBuYW1lMiBdIiwKKyIgIFJlbmFtZXMgdGhlIHNv dXJjZSBmaWxlIChuYW1lMSkgdG8gdGhlIHRhcmdldCBuYW1lMi4gIElmIG5hbWUyIGlzIGEiLAor IiAgZGlyZWN0b3J5LCBuYW1lMSBpcyBhbGxvd2VkIHRvIGNvbnRhaW4gd2lsZGNhcmRzLCBhbmQg dGhlIGZpbGUocykgbWF0Y2hpbmciLAorIiAgbmFtZTEgYXJlIG1vdmVkIHRvIGRpcmVjdG9yeSBu YW1lMiwgc3ViamVjdCB0byBydWxlcyBvZiB0aGUgdW5kZXJseWluZyIsCisiICBvcGVyYXRpbmcg c3lzdGVtIHJlZ2FyZGluZyByZW5hbWluZyBhY3Jvc3MgZGlzayBib3VuZGFyaWVzLCBldGMuIFN3 aXRjaGVzOiIsCisiICIsCisiICAvTElTVCIsCisiICAgIFByaW50IHRoZSBmaWxlbmFtZXMgYW5k IHN0YXR1cyB3aGlsZSByZW5hbWluZy4gIFN5bm9ueW1zOiAvTE9HLCAvVkVSQk9TRSIsCisiICIs CisiICAvTk9MSVNUIiwKKyIgICAgUmVuYW1lIHNpbGVudGx5IChkZWZhdWx0KS4gU3lub255bXM6 IC9OT0xPRywgL1FVSUVUIiwKKyIgIiwKKyIgIC9DT0xMSVNJT046e0ZBSUwsU0tJUCxPVkVSV1JJ VEV9IiwKKyIgICAgVGVsbHMgd2hhdCB0byBkbyBpZiBhIGZpbGUgd2l0aCB0aGUgZ2l2ZW4gKG9y IGRlcml2ZWQpIG5ldyBuYW1lIGFscmVhZHkiLAorIiAgICBleGlzdHM6IGZhaWwgKGFuZCBzdG9w IHdpdGhvdXQgcmVuYW1pbmcgYW55IGZpbGVzKTsgc2tpcCB0aGlzIGZpbGUiLAorIiAgICB3aXRo b3V0IHJlbmFtaW5nIGl0IGFuZCBnbyBvbiB0byB0aGUgbmV4dCBvbmUsIGlmIGFueTsgb3Igb3Zl cndyaXRlICh0aGUiLAorIiAgICBleGlzdGluZyBmaWxlKS4gIFBST0NFRUQgaXMgYSBzeW5vbnlt IGZvciBTS0lQLiIsCisiICIsCisiICAvU0lNVUxBVEUiLAorIiAgICBTaG93IHdoYXQgdGhlIGVm ZmVjdHMgb2YgdGhlIFJFTkFNRSBjb21tYW5kIHdvdWxkIGJlIHdpdGhvdXQgYWN0dWFsbHkiLAor IiAgICByZW5hbWluZyBhbnkgZmlsZXMuIiwKKyIgIiwKKyIgIFdoZW4gYW55IG9mIHRoZSBmb2xs b3dpbmcgc3dpdGNoZXMgaXMgZ2l2ZW4sIG5hbWUyIG11c3QgZWl0aGVyIGJlIHRoZSIsCisiICB0 aGUgbmFtZSBvZiBhIGRpcmVjdG9yeSwgb3IgZWxzZSBvbWl0dGVkLCBhbmQgbmFtZTEgaXMgYWxs b3dlZCB0byBjb250YWluIiwKKyIgIGNvbnRhaW4gd2lsZGNhcmRzLCBhbGxvd2luZyBtdWx0aXBs ZSBmaWxlcyB0byBiZSByZW5hbWVkIGF0IG9uY2UuIElmIG5hbWUyIiwKKyIgIGlzIGdpdmVuLCB0 aGVuIGFsbCBmaWxlcyBtYXRjaGluZyBuYW1lMSBhcmUgbW92ZWQgdG8gdGhlIG5hbWUyIGRpcmVj dG9yeSIsCisiICBhZnRlciBiZWluZyByZW5hbWVkLiIsCisiICIsCisiICAvTE9XRVI6e0FMTCxV UFBFUn0iLAorIiAgICBDb252ZXJ0cyBsZXR0ZXJzIGluIHRoZSBmaWxlbmFtZSB0byBsb3dlcmNh c2UuICBBTEwgbWVhbnMgdG8gY29udmVydCIsCisiICAgIGFsbCBtYXRjaGluZyBmaWxlbmFtZXMs IFVQUEVSIG1lYW5zIHRvIGNvbnZlcnQgb25seSB0aG9zZSBmaWxlbmFtZXMiLAorIiAgICB0aGF0 IGNvbnRhaW4gbm8gbG93ZXJjYXNlIGxldHRlcnMuICBUaGUgc3dpdGNoIGFyZ3VtZW50IGNhbiBi ZSBvbWl0dGVkLCIsCisiICAgIGluIHdoaWNoIGNhc2UgQUxMIGZpbGVuYW1lcyBhcmUgY29udmVy dGVkLiIsCisiICIsCisiICAvVVBQRVI6e0FMTCxMT1dFUn0iLAorIiAgICBDb252ZXJ0cyBsZXR0 ZXJzIGluIHRoZSBmaWxlbmFtZSB0byB1cHBlcmNhc2UuICBBTEwgbWVhbnMgdG8gY29udmVydCIs CisiICAgIGFsbCBtYXRjaGluZyBmaWxlbmFtZXMsIExPV0VSIG1lYW5zIHRvIGNvbnZlcnQgb25s eSB0aG9zZSBmaWxlbmFtZXMiLAorIiAgICB0aGF0IGNvbnRhaW4gbm8gdXBwZXJjYXNlIGxldHRl cnMuICBBcyB3aXRoIC9MT1dFUiwgQUxMIGlzIHRoZSBkZWZhdWx0IiwKKyIgICAgc3dpdGNoIGFy Z3VtZW50LiIsCisiICIsCisiICAvRklYU1BBQ0VTOnMiLAorIiAgICBSZXBsYWNlcyBhbGwgc3Bh Y2VzIGluIGVhY2ggbWF0Y2hpbmcgZmlsZW5hbWUgYnkgdGhlIHN0cmluZyBzLCB3aGljaCBtYXki LAorIiAgICBiZSBlbXB0eSwgYSBzaW5nbGUgY2hhcmFjdGVyLCBvciBhIHN0cmluZyBvZiBjaGFy YWN0ZXJzLiAgVGhlIGRlZmF1bHQiLAorIiAgICByZXBsYWNlbWVudCAoaWYgbm8gYXJndW1lbnQg aXMgZ2l2ZW4pIGlzIHVuZGVyc2NvcmUgKF8pLiIsCisiICIsCisiICAvUkVQTEFDRTp7e3N0cmlu ZzF9e3N0cmluZzJ9e29wdGlvbnN9fSIsCisiICAgIFJlcGxhY2VzIGFsbCBvciBzZWxlY3RlZCBv Y2N1cnJlbmNlcyBvZiBzdHJpbmcxIHdpdGggc3RyaW5nMiBpbiB0aGUiLAorIiAgICBtYXRjaGlu ZyBmaWxlbmFtZXMuICBUaGUgYnJhY2VzIGFyZSBwYXJ0IG9mIHRoZSBjb21tYW5kLiAgVGhlIG9w dGlvbnMiLAorIiAgICBzdHJpbmcgY2FuIGNvbnRhaW4gdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXJz OiIsCisiICAgICBBOiBTdHJpbmcgbWF0Y2hpbmcgaXMgY2FzZS1zZW5zaXRpdmUuIiwKKyIgICAg IGE6IFN0cmluZyBtYXRjaGluZyBpcyBjYXNlLWluc2Vuc2l0aXZlLiIsCisiICAgICBeOiBTdHJp bmcgbWF0Y2hpbmcgaXMgYW5jaG9yZWQgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZW5hbWUu IiwKKyIgICAgICQ6IFN0cmluZyBtYXRjaGluZyBpcyBhbmNob3JlZCB0byB0aGUgZW5kIG9mIHRo ZSBmaWxlbmFtZS4iLAorIiAgICAgMTogT25seSB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiB0aGUg c3RyaW5nIChpZiBhbnkpIHdpbGwgYmUgY2hhbmdlZC4iLAorIiAgICAgMjogT25seSB0aGUgc2Vj b25kIG9jY3VycmVuY2UsIGFuZCBzbyBvbiBmb3IgYWxsIGRpZ2l0cyB1cCB0byA5LiIsCisiICAg ICAtOiAoYmVmb3JlIGEgZGlnaXQpIE9jY3VycmVuY2VzIGFyZSBjb3VudGVkIGZyb20gdGhlIHJp Z2h0LiIsCisiICAgICB+OiAoYmVmb3JlIG9jY3VycmVuY2UpIEFsbCBvY2N1cmVuY2VzIEJVVCB0 aGUgb25lIGdpdmVuIGFyZSBjaGFuZ2VkLiIsCisiICIsCisiICAvQ09OVkVSVDpjc2V0MTpjc2V0 MSIsCisiICAgIENvbnZlcnRzIGVhY2ggbWF0Y2hpbmcgZmlsZW5hbWUgZnJvbSBjaGFyYWN0ZXIt c2V0IDEgdG8gY2hhcmFjdGVyLXNldCAyLiIsCisiICAgIENoYXJhY3RlciBzZXRzIGFyZSB0aGUg c2FtZSBhcyBmb3IgU0VUIEZJTEUgQ0hBUkFDVEVSLVNFVC4iLAorIiAiLAorIiAgR2xvYmFsIHZh bHVlcyBmb3IgL0xJU1QgYW5kIENPTExJU0lPTiBjYW4gYmUgc2V0IHdpdGggU0VUIFJFTkFNRSBh bmQiLAorIiAgZGlzcGxheWVkIHdpdGggU0hPVyBSRU5BTUUuIiwKKyIiCit9OworI2VuZGlmIC8q IE5PRlJJTExTICovCisKK3N0YXRpYyBjaGFyICoKK2NtZGxobHBbXSA9IHsKKyJDb21tYW5kLWxp bmUgb3B0aW9ucyBhcmUgZ2l2ZW4gYWZ0ZXIgdGhlIHByb2dyYW0gbmFtZSBpbiB0aGUgc3lzdGVt IiwKKyJjb21tYW5kIHRoYXQgeW91IHVzZSB0byBzdGFydCBLZXJtaXQuICBFeGFtcGxlOiIsCisi ICIsCisiIGtlcm1pdCAtaSAtcyBvb2ZhLmV4ZSIsCisiICIsCisidGVsbHMgS2VybWl0IHRvIHNl bmQgKC1zKSB0aGUgZmlsZSBvb2ZhLmV4ZSBpbiBiaW5hcnkgKC1pKSBtb2RlLiIsCisiICIsCisi Q29tbWFuZC1saW5lIG9wdGlvbnMgYXJlIGNhc2Utc2Vuc2l0aXZlOyBcIi1zXCIgaXMgZGlmZmVy ZW50IGZyb20gXCItU1wiLiIsCisjaWZkZWYgVk1TCisiSW4gVk1TLCB1cHBlcmNhc2Ugb3B0aW9u cyBtdXN0IGJlIGVuY2xvc2VkIGluIGRvdWJsZXF1b3RlczogIiwKKyIgIiwKKyIgJCBrZXJtaXQg XCItWVwiIFwiLVNcIiAtcyBvb2ZhLnR4dCAiLAorI2VuZGlmIC8qIFZNUyAqLworIiAiLAorIklm IGFueSBcImFjdGlvbiBvcHRpb25zXCIgYXJlIGluY2x1ZGVkIG9uIHRoZSBjb21tYW5kIGxpbmUs IEtlcm1pdCBleGl0cyIsCisiYWZ0ZXIgZXhlY3V0aW5nIGl0cyBjb21tYW5kLWxpbmUgb3B0aW9u cy4gIElmIC1TIGlzIGluY2x1ZGVkLCBvciBubyBhY3Rpb24iLAorIm9wdGlvbnMgd2VyZSBnaXZl biwgS2VybWl0IGVudGVycyBpdHMgaW50ZXJhY3RpdmUgY29tbWFuZCBwYXJzZXIgYW5kIiwKKyJp c3N1ZXMgaXRzIHByb21wdC4iLAorIiAiLAorIkNvbW1hbmQtbGluZSBvcHRpb25zIGFyZSBzaW5n bGUgY2hhcmFjdGVycyBwcmVjZWRlZCBieSBkYXNoICgtKS4gIFNvbWUiLAorInJlcXVpcmUgYW4g XCJhcmd1bWVudCxcIiBvdGhlcnMgZG8gbm90LiAgSWYgYW4gYXJndW1lbnQgY29udGFpbnMgc3Bh Y2VzLCBpdCIsCisibXVzdCBiZSBlbmNsb3NlZCBpbiBkb3VibGVxdW90ZXM6IiwKKyIgIiwKKyIg a2VybWl0IC1zIFwiZmlsZW5hbWUgd2l0aCBzcGFjZXNcIiIsCisiICIsCisiXAorQW4gb3B0aW9u IHRoYXQgZG9lcyBub3QgcmVxdWlyZSBhbiBhcmd1bWVudCBjYW4gYmUgYnVuZGxlZCB3aXRoIG90 aGVyIG9wdGlvbnM6IgorLAorIiAiLAorIiBrZXJtaXQgLVFpcyBvb2ZhLmV4ZSIsCisiICIsCisi RXhjZXB0aW9ucyB0byB0aGUgcnVsZXM6IiwKKyIgIiwKKyIgLiBJZiB0aGUgZmlyc3QgY29tbWFu ZC1saW5lIG9wdGlvbiBpcyBhIGZpbGVuYW1lLCBLZXJtaXQgZXhlY3V0ZXMgY29tbWFuZHMiLAor IiAgIGZyb20gdGhlIGZpbGUuICBBZGRpdGlvbmFsIGNvbW1hbmQtbGluZSBvcHRpb25zIGNhbiBm b2xsb3cgdGhlIGZpbGVuYW1lLiIsCisiICIsCisiIC4gVGhlIHNwZWNpYWwgb3B0aW9uIFwiPVwi IChlcXVhbCBzaWduKSBvciBcIi0tXCIgKGRvdWJsZSBoeXBoZW4pIG1lYW5zIHRvIiwKKyIgICB0 cmVhdCB0aGUgcmVzdCBvZiB0aGUgY29tbWFuZCBsaW5lIGFzIGRhdGEsIHJhdGhlciB0aGFuIGNv bW1hbmRzOyB0aGlzIiwKKyIgICBkYXRhIGlzIHBsYWNlZCBpbiB0aGUgYXJndW1lbnQgdmVjdG9y IGFycmF5LCBcXCZAW10sIGFsb25nIHdpdGggdGhlIG90aGVyIiwKKyIgICBpdGVtcyBvbiB0aGUg Y29tbWFuZCBsaW5lLCBhbmQgYWxzbyBpbiB0aGUgdG9wLWxldmVsIFxcJTEuLlxcJTkgdmFyaWFi bGVzLiIKKywKKyIgIiwKKyNpZmRlZiBLRVJCQU5HCisiIC4gQSBzaW1pbGFyIG9wdGlvbiBcIitc IiAocGx1cyBzaWduKSBtZWFuczogdGhlIG5hbWUgb2YgYSBLZXJtaXQgc2NyaXB0IiwKKyIgICBm aWxlIGZvbGxvd3MuICBUaGlzIGZpbGUgaXMgdG8gYmUgZXhlY3V0ZWQsIGFuZCBpdHMgbmFtZSBh c3NpZ25lZCB0byBcXCUwIiwKKyIgICBhbmQgXFwmX1swXS4gIEFsbCBzdWJzZXF1ZW50IGNvbW1h bmQtbGluZSBhcmd1bWVudHMgYXJlIHRvIGJlIGlnbm9yZWQgYnkiLAorIiAgIEtlcm1pdCBidXQg bWFkZSBhdmFpbGFibGUgdG8gdGhlIHNjcmlwdCBhcyBcXCUxLCBcXCUyLCAuLi4sIGFzIHdlbGwg YXMiLAorIiAgIGluIHRoZSBhcmd1bWVudC12ZWN0b3IgYXJyYXlzLiAgVGhlIGluaXRpYWxpemF0 aW9uIGZpbGUgaXMgbm90IGV4ZWN1dGVkIiwKKyIgICBhdXRvbWF0aWNhbGx5IGluIHRoaXMgY2Fz ZS4iLAorIiAiLAorI2VuZGlmIC8qIEtFUkJBTkcgKi8KKyIgLiBUaGUgLXMgb3B0aW9uIGNhbiBh Y2NlcHQgbXVsdGlwbGUgZmlsZW5hbWVzLCBzZXBhcmF0ZWQgYnkgc3BhY2VzLiIsCisiICIsCisi IC4gdGhlIC1qIGFuZCAtSiBvcHRpb25zIGFsbG93IGFuIG9wdGlvbmFsIHNlY29uZCBhcmd1bWVu dCwgdGhlIFRDUCBwb3J0IiwKKyIgICBuYW1lIG9yIG51bWJlci4iLAorIiAiLAorIlR5cGUgXCJo ZWxwIG9wdGlvbnMgYWxsXCIgdG8gbGlzdCBhbGwgdGhlIGNvbW1hbmQtbGluZSBvcHRpb25zLiIs CisiVHlwZSBcImhlbHAgb3B0aW9uIHhcIiB0byBzZWUgdGhlIGhlbHAgbWVzc2FnZSBmb3Igb3B0 aW9uIHguIiwKKyIgIiwKKyJLZXJtaXQgYWxzbyBvZmZlcnMgYSBzZWxlY3Rpb24gb2YgXCJleHRl bmRlZCBjb21tYW5kLWxpbmVcIiBvcHRpb25zLiIsCisiVGhlc2UgYmVnaW4gd2l0aCB0d28gZGFz aGVzLCBmb2xsb3dlZCBieSBhIGtleXdvcmQsIGFuZCB0aGVuLCBpZiB0aGUgb3B0aW9uIiwKKyJo YXMgYXJndW1lbnRzLCBhIGNvbG9uICg6KSBvciBlcXVhbCBzaWduICg9KSBmb2xsb3dlZCBieSB0 aGUgYXJndW1lbnQuIiwKKyJVbmxpa2Ugc2luZ2xlLWxldHRlciBvcHRpb25zLCBleHRlbmRlZCBv cHRpb24ga2V5d29yZHMgYXJlbid0IGNhc2Ugc2Vuc2l0aXZlIiwKKyJhbmQgdGhleSBjYW4gYmUg YWJicmV2aWF0ZWQgdG8gYW55IGxlbmd0aCB0aGF0IHN0aWxsIGRpc3Rpbmd1aXNoZXMgdGhlbSBm cm9tIiwKKyJvdGhlciBleHRlbmRlZC1vcHRpb24ga2V5d29yZHMuICBFeGFtcGxlOiIsCisiICIs CisiICBrZXJtaXQgLS1iYW5uZXI6b29mYS50eHQiLAorIiAiLAorIndoaWNoIGRlc2lnbmF0ZXMg dGhlIGZpbGUgb29mYS50eHQgdG8gYmUgcHJpbnRlZCB1cG9uIHN0YXJ0dXAsIHJhdGhlciB0aGFu IiwKKyJ0aGUgYnVpbHQtaW4gYmFubmVyIChncmVldGluZykgdGV4dC4gIFRvIG9idGFpbiBhIGxp c3Qgb2YgYXZhaWxhYmxlIiwKKyJleHRlbmRlZCBvcHRpb25zLCB0eXBlIFwiaGVscCBleHRlbmRl ZC1vcHRpb25zID9cIi4gIFRvIGdldCBoZWxwIGFib3V0IGFsbCIsCisiZXh0ZW5kZWQgb3B0aW9u cywgdHlwZSBcImhlbHAgZXh0ZW5kZWQtb3B0aW9uc1wiLiAgVG8gZ2V0IGhlbHAgYWJvdXQgYSIs CisicGFydGljdWxhciBleHRlbmRlZCBvcHRpb24sIHR5cGUgXCJoZWxwIGV4dGVuZGVkLW9wdGlv biB4eHhcIiwgd2hlcmUgXCJ4eHhcIiIsCisiaXMgdGhlIG9wdGlvbiBrZXl3b3JkLiIsCisjaWZk ZWYgQ09NTUVOVAorI2lmbmRlZiBOT0lLU0QKKyIgIiwKKyJBdCBwcmVzZW50LCBtb3N0IG9mIHRo ZSBleHRlbmRlZCBvcHRpb25zIGFwcGx5IG9ubHkgdG8gdGhlIEludGVybmV0IEtlcm1pdCIsCisi U2VydmljZSBEYWVtb24gKElLU0QpLiAgVHlwZSBcImhlbHAgaWtzZFwiIGZvciBkZXRhaWxzLiIs CisjZW5kaWYgLyogTk9JS1NEICovCisjZW5kaWYgLyogQ09NTUVOVCAqLworIiIKK307CisKKwor I2lmbmRlZiBOT0hFTFAKKyNpZm5kZWYgTk9DTURMCitpbnQKK2RveG9wdHMoKSB7CisgICAgZXh0 ZXJuIGNoYXIgKiB4b3B0aGxwW10sICogeGFyZ2hscFtdOworICAgIGV4dGVybiBzdHJ1Y3Qga2V5 dGFiIHhhcmd0YWJbXTsKKyAgICBleHRlcm4gaW50IG54YXJnczsKKyAgICBpbnQgaSwgeCwgeSwg biA9IDA7CisjaWZkZWYgQ0tfVFRHV1NJWgorI2lmZGVmIE9TMgorICAgIHR0Z2N3c3ooKTsKKyNl bHNlIC8qIE9TMiAqLworICAgIC8qIENoZWNrIHdoZXRoZXIgd2luZG93IHNpemUgY2hhbmdlZCAq LworICAgIGlmICh0dGd3c2l6KCkgPiAwKSB7CisgICAgICAgIGlmICh0dF9yb3dzID4gMCAmJiB0 dF9jb2xzID4gMCkgeworICAgICAgICAgICAgY21kX3Jvd3MgPSB0dF9yb3dzOworICAgICAgICAg ICAgY21kX2NvbHMgPSB0dF9jb2xzOworICAgICAgICB9CisgICAgfQorI2VuZGlmIC8qIE9TMiAq LworI2VuZGlmIC8qIENLX1RUR1dTSVogKi8KKyAgICB5ID0gY21rZXkoeGFyZ3RhYiwKKyAgICAg ICAgICAgICAgbnhhcmdzLAorICAgICAgICAgICAgICAiRXh0ZW5kZWQgYXJndW1lbnQgd2l0aG91 dCB0aGUgXCItLVwiIHByZWZpeCIsCisgICAgICAgICAgICAgICIiLAorICAgICAgICAgICAgICB4 eHN0cmluZworICAgICAgICAgICAgICApOworICAgIGlmICh5ID09IC0zKSB7CisJcHJpbnRmKCJc biIpOworICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApCisJICByZXR1cm4oeCk7CisgICAg ICAgIGZvciAoaSA9IDA7IGkgPD0gWEFfTUFYOyBpKyspIHsKKyAgICAgICAgICAgIGlmICh4b3B0 aGxwW2ldKSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCIlc1xuIix4b3B0aGxwW2ldKTsKKyAg ICAgICAgICAgICAgICBwcmludGYoIiAgICVzXG4iLHhhcmdobHBbaV0pOworICAgICAgICAgICAg ICAgIHByaW50ZigiXG4iKTsKKyAgICAgICAgICAgICAgICBuICs9IDM7CisgICAgICAgICAgICAg ICAgaWYgKG4gPiAoY21kX3Jvd3MgLSA2KSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIWFz a21vcmUoKSkKKyAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oMCk7CisgICAgICAgICAgICAg ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICBuID0gMDsKKyAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuKDEpOworICAgIH0g ZWxzZSBpZiAoeSA8IDApCisgICAgICByZXR1cm4oeSk7CisgICAgaWYgKCh4ID0gY21jZm0oKSkg PCAwKQorICAgICAgcmV0dXJuKHgpOworICAgIHByaW50ZigiXG4lc1xuIix4b3B0aGxwW3ldKTsK KyAgICBwcmludGYoIiAgICVzXG5cbiIseGFyZ2hscFt5XSk7CisgICAgcmV0dXJuKDEpOworfQor CitpbnQKK2RvaG9wdHMoKSB7CisgICAgaW50IGksIG4sIHgsIHksIHosIGFsbCA9IDAsIG1zZyA9 IDA7CisgICAgY2hhciAqczsKKyAgICBleHRlcm4gY2hhciAqb3B0aGxwW10sICphcmdobHBbXTsK KyAgICBleHRlcm4gY2hhciAqIHhvcHRobHBbXSwgKiB4YXJnaGxwW107CisgICAgZXh0ZXJuIGlu dCBvcHRhY3RbXTsKKyAgICBpZiAoKHggPSBjbXR4dCgiQSBjb21tYW5kLWxpbmUgb3B0aW9uIGNo YXJhY3RlcixcblwKK29yIHRoZSB3b3JkIEFMTCwgb3IgY2FycmlhZ2UgcmV0dXJuIGZvciBhbiBv dmVydmlldyIsCisgICAgICAgICAgICAgICAgICAgIiIsICZzLCB4eHN0cmluZykpIDwgMCkKKyAg ICAgIHJldHVybih4KTsKKyAgICBpZiAoISpzKQorICAgICAgbXNnID0gMTsKKyAgICBlbHNlIGlm ICghc3RyY21wKHMsImFsbCIpIHx8ICghc3RyY21wKHMsIkFMTCIpKSkKKyAgICAgIGFsbCA9IDE7 CisgICAgZWxzZSBpZiAoKnMgPT0gJy0nKSAgICAgICAgICAgICAgICAgLyogQmUgdG9sZXJhbnQg b2YgbGVhZGluZyBoeXBoZW4gKi8KKyAgICAgIHMrKzsKKyAgICBpZiAoIWFsbCAmJiAoaW50KXN0 cmxlbihzKSA+IDEpIHsKKyAgICAgICAgcHJpbnRmKCI/QSBzaW5nbGUgY2hhcmFjdGVyLCBwbGVh c2UsIG9yIGNhcnJpYWdlIHRvIGxpc3QgdGhlbSBhbGwuXG4iKTsKKyAgICAgICAgcmV0dXJuKC05 KTsKKyAgICB9CisgICAgaWYgKGFsbCkgeworICAgICAgICB5ID0gMzM7CisgICAgICAgIHogPSAx Mjc7CisgICAgfSBlbHNlIHsKKyAgICAgICAgeSA9ICpzOworICAgICAgICB6ID0gKHkgPT0gMCkg PyAxMjcgOiB5OworICAgICAgICBpZiAoeSA9PSAwKSB5ID0gMzM7CisgICAgfQorI2lmZGVmIENL X1RUR1dTSVoKKyNpZmRlZiBPUzIKKyAgICB0dGdjd3N6KCk7CisjZWxzZSAvKiBPUzIgKi8KKyAg ICAvKiBDaGVjayB3aGV0aGVyIHdpbmRvdyBzaXplIGNoYW5nZWQgKi8KKyAgICBpZiAodHRnd3Np eigpID4gMCkgeworICAgICAgICBpZiAodHRfcm93cyA+IDAgJiYgdHRfY29scyA+IDApIHsKKyAg ICAgICAgICAgIGNtZF9yb3dzID0gdHRfcm93czsKKyAgICAgICAgICAgIGNtZF9jb2xzID0gdHRf Y29sczsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBDS19U VEdXU0laICovCisgICAgcHJpbnRmKCJcbiIpOworICAgIGZvciAoaSA9IDAsIG4gPSAxOyBtc2cg IT0gMCAmJiAqY21kbGhscFtpXTsgaSsrKSB7CisgICAgICAgIHByaW50ZigiJXNcbiIsY21kbGhs cFtpXSk7CisgICAgICAgIGlmICgrK24gPiAoY21kX3Jvd3MgLSAzKSkgeworICAgICAgICAgICBp ZiAoIWFza21vcmUoKSkKKyAgICAgICAgICAgICByZXR1cm4oMCk7CisgICAgICAgICAgIGVsc2UK KyAgICAgICAgICAgICBuID0gMDsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoYWxsKSB7Cisg ICAgICAgIHByaW50ZigiVGhlIGZvbGxvd2luZyBjb21tYW5kLWxpbmUgb3B0aW9ucyBhcmUgYXZh aWxhYmxlOlxuXG4iKTsKKyAgICAgICAgbiArPSAyOworICAgIH0KKyAgICBmb3IgKGkgPSB5OyBt c2cgPT0gMCAmJiBpIDw9IHo7IGkrKykgeworICAgICAgICBpZiAoIW9wdGhscFtpXSkKKyAgICAg ICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKGFyZ2hscFtpXSkgeyAgICAgICAgICAgICAgICAv KiBPcHRpb24gd2l0aCBhcmcgKi8KKyAgICAgICAgICAgIHByaW50ZigiIC0lYyA8YXJnPiVzXG4i LChjaGFyKWksKG9wdGFjdFtpXT8iIChhY3Rpb24gb3B0aW9uKSI6IiIpKTsKKworICAgICAgICAg ICAgcHJpbnRmKCIgICAgICVzXG4iLG9wdGhscFtpXSk7CisgICAgICAgICAgICBwcmludGYoIiAg ICAgQXJndW1lbnQ6ICVzXG5cbiIsYXJnaGxwW2ldKTsKKyAgICAgICAgICAgIHggPSA0OworICAg ICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgIC8qIE9wdGlvbiB3aXRob3V0IGFy ZyAqLworICAgICAgICAgICAgcHJpbnRmKCIgLSVjICAlcyVzXG4iLAorICAgICAgICAgICAgICAg ICAgIChjaGFyKWksIG9wdGhscFtpXSwKKyAgICAgICAgICAgICAgICAgICAob3B0YWN0W2ldPyIg KGFjdGlvbiBvcHRpb24pIjoiIikKKyAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICBw cmludGYoIiAgICAgQXJndW1lbnQ6IChub25lKVxuXG4iKTsKKyAgICAgICAgICAgIHggPSAzOwor ICAgICAgICB9CisgICAgICAgIG4gKz0geDsKKyAgICAgICAgaWYgKG4gPiAoY21kX3Jvd3MgLSB4 IC0gMSkpIHsKKyAgICAgICAgICAgIGlmICghYXNrbW9yZSgpKQorICAgICAgICAgICAgICByZXR1 cm4oMCk7CisgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgbiA9IDA7CisgICAgICAgIH0K KyAgICB9CisgICAgaWYgKGFsbCkgewkJCQkvKiBKZWZmLCBKYW4gMjAwMyAqLworICAgICAgICBw cmludGYoIlxuIik7CisgICAgICAgIGlmICgrK24gPj0gY21kX3Jvd3MpIHsKKyAgICAgICAgICAg IGlmICghYXNrbW9yZSgpKQorICAgICAgICAgICAgICByZXR1cm4oMCk7CisJICAgIGVsc2UKKyAg ICAgICAgICAgICAgbiA9IDA7CisgICAgICAgIH0KKyAgICAgICAgcHJpbnRmKCJUaGUgZm9sbG93 aW5nIGV4dGVuZGVkIG9wdGlvbnMgYXJlIGF2YWlsYWJsZTpcbiIpOworICAgICAgICBpZiAoKytu ID49IGNtZF9yb3dzKSB7CisgICAgICAgICAgICBpZiAoIWFza21vcmUoKSkKKyAgICAgICAgICAg ICAgcmV0dXJuKDApOworCSAgICBlbHNlCisgICAgICAgICAgICAgIG4gPSAwOworICAgICAgICB9 CisgICAgICAgIHByaW50ZigiXG4iKTsKKyAgICAgICAgaWYgKCsrbiA+PSBjbWRfcm93cykgewor ICAgICAgICAgICAgaWYgKCFhc2ttb3JlKCkpCisgICAgICAgICAgICAgIHJldHVybigwKTsKKwkg ICAgZWxzZQorICAgICAgICAgICAgICBuID0gMDsKKyAgICAgICAgfQorICAgICAgICBmb3IgKGkg PSAwOyBpIDw9IFhBX01BWDsgaSsrKSB7CisgICAgICAgICAgICBpZiAoeG9wdGhscFtpXSkgewor ICAgICAgICAgICAgICAgIHByaW50ZigiJXNcbiIseG9wdGhscFtpXSk7CisgICAgICAgICAgICAg ICAgcHJpbnRmKCIgICAlc1xuIix4YXJnaGxwW2ldKTsKKyAgICAgICAgICAgICAgICBwcmludGYo IlxuIik7CisgICAgICAgICAgICAgICAgbiArPSAzOworICAgICAgICAgICAgICAgIGlmIChuID4g KGNtZF9yb3dzIC0gNCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFhc2ttb3JlKCkpCisJ CSAgICAgIHJldHVybigwKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorCQkgICAgICBuID0g MDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cisg ICAgcmV0dXJuKDEpOworfQorI2VuZGlmIC8qIE5PQ01ETCAqLworI2VuZGlmIC8qIE5PSEVMUCAq LworCisjaWZkZWYgQ0tDSEFOTkVMSU8KK3N0YXRpYyBjaGFyICogaHh4ZmlsZVtdID0geworIlN5 bnRheDogRklMRSA8c3ViY29tbWFuZD4gWyBzd2l0Y2hlcyBdIDxjaGFubmVsPiBbIDxkYXRhPiBd IiwKKyIgIE9wZW5zLCBjbG9zZXMsIHJlYWRzLCB3cml0ZXMsIGFuZCBtYW5hZ2VzIGxvY2FsIGZp bGVzLiIsCisiICIsCisiVGhlIEZJTEUgY29tbWFuZHMgYXJlOiIsCisiICIsCisiICBGSUxFIE9Q RU4gICAob3IgRk9QRU4pICAgLS0gT3BlbiBhIGxvY2FsIGZpbGUuIiwKKyIgIEZJTEUgQ0xPU0Ug IChvciBGQ0xPU0UpICAtLSBDbG9zZSBhbiBvcGVuIGZpbGUuIiwKKyIgIEZJTEUgUkVBRCAgIChv ciBGUkVBRCkgICAtLSBSZWFkIGRhdGEgZnJvbSBhbiBvcGVuIGZpbGUuIiwKKyIgIEZJTEUgV1JJ VEUgIChvciBGV1JJVEUpICAtLSBXcml0ZSBkYXRhIHRvIGFuIG9wZW4gZmlsZS4iLAorIiAgRklM RSBMSVNUICAgKG9yIEZMSVNUKSAgIC0tIExpc3Qgb3BlbiBmaWxlcy4iLAorIiAgRklMRSBTVEFU VVMgKG9yIEZTVEFUVVMpIC0tIFNob3cgc3RhdHVzIG9mIGEgY2hhbm5lbC4iLAorIiAgRklMRSBS RVdJTkQgKG9yIEZSRVdJTkQpIC0tIFJld2luZCBhbiBvcGVuIGZpbGUiLAorIiAgRklMRSBDT1VO VCAgKG9yIEZDT1VOVCkgIC0tIENvdW50IGxpbmVzIG9yIGJ5dGVzIGluIGFuIG9wZW4gZmlsZSIs CisiICBGSUxFIFNFRUsgICAob3IgRlNFRUspICAgLS0gU2VlayB0byBzcGVjaWZpZWQgc3BvdCBp biBhbiBvcGVuIGZpbGUuIiwKKyIgIEZJTEUgRkxVU0ggIChvciBGRkxVU0gpICAtLSBGbHVzaCBv dXRwdXQgYnVmZmVycyBmb3IgYW4gb3BlbiBmaWxlLiIsCisiICIsCisiVHlwZSBIRUxQIEZJTEUg T1BFTiBvciBIRUxQIEZPUEVOIGZvciBkZXRhaWxzIGFib3V0IEZJTEUgT1BFTjsiLAorInR5cGUg SEVMUCBGSUxFIENMT1NFIG9yIEhFTFAgRkNMT1NFIGZvciBkZXRhaWxzIGFib3V0IEZJTEUgQ0xP U0UsIGFuZCBzbyBvbi4iLAorIiAiLAorIlRoZSBmb2xsb3dpbmcgdmFyaWFibGVzIGFyZSByZWxh dGVkIHRvIHRoZSBGSUxFIGNvbW1hbmQ6IiwKKyIgIiwKKyIgIFxcdihmX21heCkgICAgIC0tIE1h eGltdW0gbnVtYmVyIG9mIGZpbGVzIHRoYXQgY2FuIGJlIG9wZW4gYXQgb25jZSIsCisiICBcXHYo Zl9lcnJvcikgICAtLSBDb21wbGV0aW9uIGNvZGUgb2YgbW9zdCByZWNlbnQgRklMRSBjb21tYW5k IG9yIGZ1bmN0aW9uIiwKKyIgIFxcdihmX2NvdW50KSAgIC0tIFJlc3VsdCBvZiBtb3N0IHJlY2Vu dCBGSUxFIENPVU5UIGNvbW1hbmQiLAorIiAiLAorIlRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFy ZSByZWxhdGVkIHRvIHRoZSBGSUxFIGNvbW1hbmQ6IiwKKyIgIiwKKyIgIFxcRl9lb2YoKSAgICAg IC0tIENoZWNrIGlmIGNoYW5uZWwgaXMgYXQgRU9GIiwKKyIgIFxcRl9wb3MoKSAgICAgIC0tIEdl dCBjaGFubmVsIHJlYWQvd3JpdGUgcG9zaXRpb24gKGJ5dGUgbnVtYmVyKSIsCisiICBcXEZfbGlu ZSgpICAgICAtLSBHZXQgY2hhbm5lbCByZWFkL3dyaXRlIHBvc2l0aW9uIChsaW5lIG51bWJlciki LAorIiAgXFxGX2hhbmRsZSgpICAgLS0gR2V0IGZpbGUgaGFuZGxlIiwKKyIgIFxcRl9zdGF0dXMo KSAgIC0tIEdldCBjaGFubmVsIHN0YXR1cyIsCisiICBcXEZfZ2V0Y2hhcigpICAtLSBSZWFkIGNo YXJhY3RlciIsCisiICBcXEZfZ2V0bGluZSgpICAtLSBSZWFkIGxpbmUiLAorIiAgXFxGX2dldGJs b2NrKCkgLS0gUmVhZCBibG9jayIsCisiICBcXEZfcHV0Y2hhcigpICAtLSBXcml0ZSBjaGFyYWN0 ZXIiLAorIiAgXFxGX3B1dGxpbmUoKSAgLS0gV3JpdGUgbGluZSIsCisiICBcXEZfcHV0YmxvY2so KSAtLSBXcml0ZSBibG9jayIsCisiICBcXEZfZXJybXNnKCkgICAtLSBFcnJvciBtZXNzYWdlIGZy b20gbW9zdCByZWNlbnQgRklMRSBjb21tYW5kIG9yIGZ1bmN0aW9uIiwKKyIgIiwKKyJUeXBlIEhF TFAgPGZ1bmN0aW9uLW5hbWU+IGZvciBpbmZvcm1hdGlvbiBhYm91dCBlYWNoIG9uZS4iLAorIiIK K307CisKK3N0YXRpYyBjaGFyICogaHh4Zl9vcFtdID0geworIlN5bnRheDogRklMRSBPUEVOIFsg c3dpdGNoZXMgXSA8dmFyaWFibGU+IDxmaWxlbmFtZT4iLAorIiAgT3BlbnMgdGhlIGZpbGUgaW5k aWNhdGVkIGJ5IDxmaWxlbmFtZT4gaW4gdGhlIG1vZGUgaW5kaWNhdGVkIGJ5IHRoZSIsCisiICBz d2l0Y2hlcywgaWYgYW55LCBvciBpZiBubyBzd2l0Y2hlcyBhcmUgaW5jbHVkZWQsIGluIHJlYWQt b25seSBtb2RlLCBhbmQiLAorIiAgYXNzaWducyBhIGNoYW5uZWwgbnVtYmVyIGZvciB0aGUgZmls ZSB0byB0aGUgZ2l2ZW4gdmFyaWFibGUuIiwKKyIgIFN5bm9ueW06IEZPUEVOLiAgU3dpdGNoZXM6 IiwKKyIgIiwKKyIvUkVBRCIsCisiICBPcGVuIHRoZSBmaWxlIGZvciByZWFkaW5nLiIsCisiICIs CisiL1dSSVRFIiwKKyIgIE9wZW4gdGhlIGZpbGUgZm9yIHdyaXRpbmcuICBJZiAvUkVBRCB3YXMg bm90IGFsc28gc3BlY2lmaWVkLCB0aGlzIGNyZWF0ZXMiLAorIiAgYSBuZXcgZmlsZS4gIElmIC9S RUFEIHdhcyBzcGVjaWZpZWQsIHRoZSBleGlzdGluZyBmaWxlIGlzIHByZXNlcnZlZCwgYnV0IiwK KyIgIHdyaXRpbmcgaXMgYWxsb3dlZC4gIEluIGJvdGggY2FzZXMsIHRoZSByZWFkL3dyaXRlIHBv aW50ZXIgaXMgaW5pdGlhbGx5IiwKKyIgIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUuIiwK KyIgIiwKKyIvQVBQRU5EIiwKKyIgIElmIHRoZSBmaWxlIGRvZXMgbm90IGV4aXN0LCBjcmVhdGUg YSBuZXcgZmlsZSBhbmQgb3BlbiBpdCBmb3Igd3JpdGluZy4iLAorIiAgSWYgdGhlIGZpbGUgZXhp c3RzLCBvcGVuIGl0IGZvciB3cml0aW5nLCBidXQgd2l0aCB0aGUgd3JpdGUgcG9pbnRlciIsCisi ICBwb3NpdGlvbmVkIGF0IHRoZSBlbmQuIiwKKyIgIiwKKyIvQklOQVJZIiwKKyNpZmRlZiBWTVMK KyIgIE9wZW5zIHRoZSBmaWxlIGluIGJpbmFyeSBtb2RlIHRvIGluaGliaXQgZW5kLW9mLWxpbmUg Y29udmVyc2lvbnMuIiwKKyNlbHNlCisjaWZkZWYgT1MyCisiICBPcGVucyB0aGUgZmlsZSBpbiBi aW5hcnkgbW9kZSB0byBpbmhpYml0IGVuZC1vZi1saW5lIGNvbnZlcnNpb25zLiIsCisjZWxzZQor I2lmZGVmIFVOSVgKKyIgIFRoaXMgb3B0aW9uIGlzIGlnbm9yZWQgaW4gVU5JWC4iLAorI2Vsc2UK KyIgIFRoaXMgb3B0aW9uIGlzIGlnbm9yZWQgb24gdGhpcyBwbGF0Zm9ybS4iLAorI2VuZGlmIC8q IFVOSVggKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKyIgIiwKKyJTd2l0 Y2hlcyBjYW4gYmUgY29tYmluZWQgaW4gYW4gd2F5IHRoYXQgbWFrZXMgc2Vuc2UgYW5kIGlzIHN1 cHBvcnRlZCBieSB0aGUiLAorInVuZGVybHlpbmcgb3BlcmF0aW5nIHN5c3RlbS4iLAorIiIKK307 CisKK3N0YXRpYyBjaGFyICogaHh4Zl9jbFtdID0geworIlN5bnRheDogRklMRSBDTE9TRSA8Y2hh bm5lbD4iLAorIiAgQ2xvc2VzIHRoZSBmaWxlIG9uIHRoZSBnaXZlbiBjaGFubmVsIGlmIGl0IHdh cyBvcGVuLiIsCisiICBBbHNvIHNlZSBIRUxQIEZJTEUgT1BFTi4gIFN5bm9ueW06IEZDTE9TRS4i LAorIiIKK307CisKK3N0YXRpYyBjaGFyICogaHh4Zl9mbFtdID0geworIlN5bnRheDogRklMRSBG TFVTSCA8Y2hhbm5lbD4iLAorIiAgRmx1c2hlcyBvdXRwdXQgYnVmZmVycyBvbiB0aGUgZ2l2ZW4g Y2hhbm5lbCBpZiBpdCB3YXMgb3BlbiwgZm9yY2luZyIsCisiICBhbGwgbWF0ZXJpYWwgcHJldmlv dXNseSB3cml0dGVuIHRvIGJlIGNvbW1pdHRlZCB0byBkaXNrLiAgU3lub255bTogRkZMVVNILiIs CisiICBBbHNvIGF2YWlsYWJsZSBhcyBcXEZfZmx1c2goKS4iLAorIiIKK307CisKK3N0YXRpYyBj aGFyICogaHh4Zl9saVtdID0geworIlN5bnRheDogRklMRSBMSVNUIiwKKyIgIExpc3RzIHRoZSBj aGFubmVsIG51bWJlciwgbmFtZSwgbW9kZXMsIGFuZCBwb3NpdGlvbiBvZiBlYWNoIGZpbGUgb3Bl bmVkIiwKKyIgIHdpdGggRklMRSBPUEVOLiAgU3lub255bTogRkxJU1QuIiwKKyIiCit9OworCitz dGF0aWMgY2hhciAqIGh4eGZfcmVbXSA9IHsKKyJTeW50YXg6IEZJTEUgUkVBRCBbIHN3aXRjaGVz IF0gPGNoYW5uZWw+IFsgPHZhcmlhYmxlPiBdIiwKKyIgIFJlYWRzIGRhdGEgZnJvbSB0aGUgZmls ZSBvbiB0aGUgZ2l2ZW4gY2hhbm5lbCBudW1iZXIgaW50byB0aGUgPHZhcmlhYmxlPiwiLAorIiAg aWYgb25lIHdhcyBnaXZlbjsgaWYgbm8gdmFyaWFibGUgd2FzIGdpdmVuLCB0aGUgcmVzdWx0IGlz IHByaW50ZWQgb24iLAorIiAgdGhlIHNjcmVlbi4gIFRoZSB2YXJpYWJsZSBzaG91bGQgYmUgYSBt YWNybyBuYW1lIHJhdGhlciB0aGFuIGEgXFwleCIsCisiICB2YXJpYWJsZSBvciBhcnJheSBlbGVt ZW50IGlmIHlvdSB3YW50IGJhY2tzbGFzaCBjaGFyYWN0ZXJzIGluIHRoZSBmaWxlIHRvIiwKKyIg IGJlIHRha2VuIGxpdGVyYWxseS4gIFN5bm9ueW06IEZSRUFELiAgU3dpdGNoZXM6IiwKKyIgIiwK KyIvTElORSIsCisiICBTcGVjaWZpZXMgdGhhdCBhIGxpbmUgb2YgdGV4dCBpcyB0byBiZSByZWFk LiAgQSBsaW5lIGlzIGRlZmluZWQgYWNjb3JkaW5nIiwKKyIgIHRvIHRoZSB1bmRlcmx5aW5nIG9w ZXJhdGluZyBzeXN0ZW0ncyB0ZXh0LWZpbGUgZm9ybWF0LiAgRm9yIGV4YW1wbGUsIGluIiwKKyIg IFVOSVggYSBsaW5lIGlzIGEgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycyB1cCB0byBhbmQgaW5jbHVk aW5nIGEgbGluZWZlZWQuIiwKKyIgIFRoZSBsaW5lIHRlcm1pbmF0b3IgKGlmIGFueSkgaXMgcmVt b3ZlZCBiZWZvcmUgYXNzaWduaW5nIHRoZSB0ZXh0IHRvIHRoZSIsCisiICB2YXJpYWJsZS4gIElm IG5vIHN3aXRjaGVzIGFyZSBpbmNsdWRlZCB3aXRoIHRoZSBGSUxFIFJFQUQgY29tbWFuZCwgL0xJ TkUiLAorIiAgaXMgYXNzdW1lZC4iLAorIiAiLAorIi9TSVpFOm51bWJlciIsCisiICBTcGVjaWZp ZXMgdGhhdCB0aGUgZ2l2ZW4gbnVtYmVyIG9mIGJ5dGVzIChjaGFyYWN0ZXJzKSBpcyB0byBiZSBy ZWFkLiIsCisiICBUaGlzIGdpdmVzIGEgc2VtYmxhbmNlIG9mIFwicmVjb3JkIGkvb1wiIGZvciBm aWxlcyB0aGF0IGRvIG5vdCBuZWNlc3NhcmlseSIsCisiICBjb250YWluIGxpbmVzLiAgVGhlIHJl c3VsdGluZyBibG9jayBvZiBjaGFyYWN0ZXJzIGlzIGFzc2lnbmVkIHRvIHRoZSIsCisiICB2YXJp YWJsZSB3aXRob3V0IGFueSBlZGl0aW5nLiIsCisiICIsCisiL0NIQVJBQ1RFUiIsCisiICBFcXVp dmFsZW50IHRvIC9TSVpFOjEuICBJZiBGSUxFIFJFQUQgL0NIQVIgc3VjY2VlZHMgYnV0IHRoZSA8 dmFyaWFibGU+IGlzIiwKKyIgIGVtcHR5LCB0aGlzIGluZGljYXRlcyBhIE5VTCBieXRlIHdhcyBy ZWFkLiIsCisiICIsCisiL1RSSU0iLAorIiAgVGVsbHMgS2VybWl0IHRvIHRyaW0gdHJhaWxpbmcg d2hpdGVzcGFjZSB3aGVuIHVzZWQgd2l0aCAvTElORS4gIElnbm9yZWQiLAorIiAgaWYgdXNlZCB3 aXRoIC9DSEFSIG9yIC9TSVpFLiIsCisiICIsCisiL1VOVEFCSUZZIiwKKyIgIFRlbGxzIEtlcm1p dCB0byBjb252ZXJ0IHRhYnMgdG8gc3BhY2VzIChhc3N1bWluZyB0YWJzIHNldCBldmVyeSA4IHNw YWNlcykiLAorIiAgd2hlbiB1c2VkIHdpdGggL0xJTkUuICBJZ25vcmVkIGlmIHVzZWQgd2l0aCAv Q0hBUiBvciAvU0laRS4iLAorIiAiLAorIlN5bm9ueW06IEZSRUFELiIsCisiQWxzbyBhdmFpbGFi bGUgYXMgXFxGX2dldGNoYXIoKSwgXFxGX2dldGxpbmUoKSwgXFxGX2dldGJsb2NrKCkuIiwKKyIi Cit9OworCitzdGF0aWMgY2hhciAqIGh4eGZfcndbXSA9IHsKKyJTeW50YXg6IEZJTEUgUkVXSU5E IDxjaGFubmVsPiIsCisiICBJZiB0aGUgY2hhbm5lbCBpcyBvcGVuLCBtb3ZlcyB0aGUgcmVhZC93 cml0ZSBwb2ludGVyIHRvIHRoZSBiZWdpbm5pbmcgb2YiLAorIiAgdGhlIGZpbGUuICBFcXVpdmFs ZW50IHRvIEZJTEUgU0VFSyA8Y2hhbm5lbD4gMC4gIFN5bm9ueW06IEZSRVdJTkQuIiwKKyIgIEFs c28gYXZhaWxhYmxlIGFzIFxcRl9yZXdpbmQoKS4iLAorIiIKK307CisKK3N0YXRpYyBjaGFyICog aHh4Zl9zZVtdID0geworIlN5bnRheDogRklMRSBTRUVLIFsgc3dpdGNoZXMgXSA8Y2hhbm5lbD4g eyBbeyssLX1dPG51bWJlcj4sIEVPRiB9IiwKKyIgIFN3aXRjaGVzIGFyZSAvQllURSwgL0xJTkUs IC9SRUxBVElWRSwgL0FCU09MVVRFLCBhbmQgL0ZJTkQ6cGF0dGVybi4iLAorIiAgTW92ZXMgdGhl IGZpbGUgcG9pbnRlciBmb3IgdGhpcyBmaWxlIHRvIHRoZSBnaXZlbiBwb3NpdGlvbiBpbiB0aGUi LAorIiAgZmlsZS4gIFN1YnNlcXVlbnQgRklMRSBSRUFEcyBvciBXUklURXMgd2lsbCB0YWtlIHBs YWNlIGF0IHRoYXQgcG9zaXRpb24uIiwKKyIgIElmIG5laXRoZXIgdGhlIC9SRUxBVElWRSBub3Ig L0FCU09MVVRFIHN3aXRjaCBpcyBnaXZlbiwgYW4gdW5zaWduZWQiLAorIiAgPG51bWJlcj4gaXMg YWJzb2x1dGU7IGEgc2lnbmVkIG51bWJlciBpcyByZWxhdGl2ZS4gIEVPRiBtZWFucyB0byBtb3Zl IHRvIiwKKyIgIHRoZSBlbmQgb2YgdGhlIGZpbGUuICBJZiBhIC9GSU5EOiBzd2l0Y2ggaXMgaW5j bHVkZWQsIEtlcm1pdCBzZWVrcyB0byB0aGUiLAorIiAgc3BlY2lmaWVkIHNwb3QgKGUuZy4gMCBm b3IgdGhlIGJlZ2lubmluZykgYW5kIHRoZW4gYmVnaW5zIHNlYXJjaGluZyBsaW5lIiwKKyIgIGJ5 IGxpbmUgZm9yIHRoZSBmaXJzdCBsaW5lIHRoYXQgbWF0Y2hlcyB0aGUgZ2l2ZW4gcGF0dGVybi4g IFRvIHN0YXJ0IiwKKyIgIHNlYXJjaGluZyBmcm9tIHRoZSBjdXJyZW50IGZpbGUgcG9zaXRpb24g c3BlY2lmeSBhIGxpbmUgbnVtYmVyIG9mICswLiIsCisiICBUbyBzdGFydCBzZWFyY2hpbmcgZnJv bSB0aGUgbGluZSBhZnRlciB0aGUgY3VycmVudCBvbmUsIHVzZSArMSAoZXRjKS4iLAorIiAgU3lu b255bTogRlNFRUsuIiwKKyIiCit9OworCitzdGF0aWMgY2hhciAqIGh4eGZfc3RbXSA9IHsKKyJT eW50YXg6IEZJTEUgU1RBVFVTIDxjaGFubmVsPiIsCisiICBJZiB0aGUgY2hhbm5lbCBpcyBvcGVu LCB0aGlzIGNvbW1hbmQgc2hvd3MgdGhlIG5hbWUgb2YgdGhlIGZpbGUsIHRoZSIsCisiICBzd2l0 Y2hlcyBpdCB3YXMgb3BlbmVkIHdpdGgsIGFuZCB0aGUgY3VycmVudCByZWFkL3dyaXRlIHBvc2l0 aW9uLiIsCisiICBTeW5vbnltOiBGU1RBVFVTIiwKKyIiCit9OworCitzdGF0aWMgY2hhciAqIGh4 eGZfY29bXSA9IHsKKyJTeW50YXg6IEZJTEUgQ09VTlQgWyB7IC9CWVRFUywgL0xJTkVTLCAvTElT VCwgL05PTElTVCB9IF0gPGNoYW5uZWw+IiwKKyIgIElmIHRoZSBjaGFubmVsIGlzIG9wZW4sIHRo aXMgY29tbWFuZCBwcmludHMgdGhlIG51Ym1lciBvZiBieXRlcyAoZGVmYXVsdCkiLAorIiAgb3Ig bGluZXMgaW4gdGhlIGZpbGUgaWYgYXQgdG9wIGxldmVsIG9yIGlmIC9MSVNUIGlzIGluY2x1ZGVk OyBpZiAvTk9MSVNUIiwKKyIgIGlzIGdpdmVuLCB0aGUgcmVzdWx0IGlzIG5vdCBwcmludGVkLiAg SW4gYWxsIGNhc2VzIHRoZSByZXN1bHQgaXMgYXNzaWduZWQiLAorIiAgdG8gXFx2KGZfY291bnQp LiAgU3lub255bTogRkNPVU5UIiwKKyIiCit9OworCitzdGF0aWMgY2hhciAqIGh4eGZfd3JbXSA9 IHsKKyJGSUxFIFdSSVRFIFsgc3dpdGNoZXMgXSA8Y2hhbm5lbD4gPHRleHQ+IiwKKyIgIFdyaXRl cyB0aGUgZ2l2ZW4gdGV4dCB0byB0aGUgZmlsZSBvbiB0aGUgZ2l2ZW4gY2hhbm5lbCBudW1iZXIu ICBUaGUgPHRleHQ+IiwKKyIgIGNhbiBiZSBsaXRlcmFsIHRleHQgb3IgYSB2YXJpYWJsZSwgb3Ig YW55IGNvbWJpbmF0aW9uLiAgSWYgdGhlIHRleHQgbWlnaHQiLAorIiAgY29udGFpbiBsZWFkaW5n IG9yIHRyYWlsaW5nIHNwYWNlcywgaXQgbXVzdCBiZSBlbmNsb3NlZCBpbiBicmFjZXMgaWYgeW91 IiwKKyIgIHdhbnQgdG8gcHJlc2VydmUgdGhlbS4gIFN5bm9ueW06IEZXUklURS4gIFN3aXRjaGVz OiIsCisiICIsCisiL0xJTkUiLAorIiAgU3BlY2lmaWVzIHRoYXQgYW4gYXBwcm9wcmlhdGUgbGlu ZSB0ZXJtaW5hdG9yIGlzIHRvIGJlIGFkZGVkIHRvIHRoZSIsCisiICBlbmQgb2YgdGhlIDx0ZXh0 Pi4gIElmIG5vIHN3aXRjaGVzIGFyZSBpbmNsdWRlZCwgL0xJTkUgaXMgYXNzdW1lZC4iLAorIiAi LAorIi9TSVpFOm51bWJlciIsCisiICBTcGVjaWZpZXMgdGhhdCB0aGUgZ2l2ZW4gbnVtYmVyIG9m IGJ5dGVzIChjaGFyYWN0ZXJzKSBpcyB0byBiZSB3cml0dGVuLiIsCisiICBJZiB0aGUgZ2l2ZW4g PHRleHQ+IGlzIGxvbmdlciB0aGFuIHRoZSByZXF1ZXN0ZWQgc2l6ZSwgaXQgaXMgdHJ1bmNhdGVk OyIsCisiICBpZiBpcyBzaG9ydGVyLCBpdCBpcyBwYWRkZWQgYWNjb3JkaW5nIC9MUEFEIGFuZCAv UlBBRCBzd2l0Y2hlcy4gIFN5bm9ueW06IiwKKyIgIC9CTE9DSy4iLAorIiAiLAorIi9MUEFEWzp2 YWx1ZV0iLAorIiAgSWYgL1NJWkUgd2FzIGdpdmVuLCBidXQgdGhlIDx0ZXh0PiBpcyBzaG9ydGVy IHRoYW4gdGhlIHJlcXVlc3RlZCBzaXplLCIsCisiICB0aGUgdGV4dCBpcyBwYWRkZWQgb24gdGhl IGxlZnQgd2l0aCBzdWZmaWNpZW50IGNvcGllcyBvZiB0aGUgY2hhcmFjdGVyIiwKKyIgIHdob3Nl IEFTQ0lJIHZhbHVlIGlzIGdpdmVuIHRvIHdyaXRlIHRoZSBnaXZlbiBsZW5ndGguICBJZiBubyB2 YWx1ZSBpcyIsCisiICBzcGVjaWZpZWQsIDMyICh0aGUgY29kZSBmb3IgU3BhY2UpIGlzIHVzZWQu ICBUaGUgdmFsdWUgY2FuIGFsc28gYmUgMCB0byIsCisiICB3cml0ZSB0aGUgaW5kaWNhdGVkIG51 bWJlciBvZiBOVUwgYnl0ZXMuICBJZiAvU0laRSB3YXMgbm90IGdpdmVuLCB0aGlzIiwKKyIgIHN3 aXRjaCBpcyBpZ25vcmVkLiIsCisiICIsCisiL1JQQURbOnZhbHVlXSIsCisiICBMaWtlIExQQUQs IGJ1dCBwYWRzIG9uIHRoZSByaWdodC4iLAorIiAiLAorIi9TVFJJTkciLAorIiAgU3BlY2lmaWVz IHRoYXQgdGhlIDx0ZXh0PiBpcyB0byBiZSB3cml0dGVuIGFzLWlzLCB3aXRoIG5vIHRlcm1pbmF0 b3IgYWRkZWQuIgorLAorIiAiLAorIi9DSEFSQUNURVIiLAorIiAgU3BlY2lmaWVzIHRoYXQgb25l IGNoYXJhY3RlciBzaG91bGQgYmUgd3JpdHRlbi4gIElmIHRoZSA8dGV4dD4gaXMgZW1wdHkgb3Ii LAorIiAgbm90IGdpdmVuLCBhIE5VTCBjaGFyYWN0ZXIgaXMgd3JpdHRlbjsgb3RoZXJ3aXNlIHRo ZSBmaXJzdCBjaGFyYWN0ZXIgb2YiLAorIiAgPHRleHQ+IGlzIGdpdmVuLiIsCisiICIsCisiU3lu b255bSBGV1JJVEUuIiwKKyJBbHNvIGF2YWlsYWJsZSBhcyBcXEZfcHV0Y2hhcigpLCBcXEZfcHV0 bGluZSgpLCBcXEZfcHV0YmxvY2soKS4iLAorIiIKK307CisKK3N0YXRpYyBpbnQKK2RvaGZpbGUo Y3gpIGludCBjeDsgeworICAgIGV4dGVybiBzdHJ1Y3Qga2V5dGFiIGZjdGFiW107CisgICAgZXh0 ZXJuIGludCBuZmN0YWI7CisgICAgaW50IHg7CisgICAgaWYgKGN4ID09IFhYRklMRSkgeyAgICAg ICAgICAgICAgICAgLyogRklMRSBjb21tYW5kIHdhcyBnaXZlbiAqLworICAgICAgICAvKiBHZXQg c3ViY29tbWFuZCAqLworICAgICAgICBpZiAoKGN4ID0gY21rZXkoZmN0YWIsbmZjdGFiLCJPcGVy YXRpb24iLCIiLHh4c3RyaW5nKSkgPCAwKSB7CisgICAgICAgICAgICBpZiAoY3ggPT0gLTMpIHsK KyAgICAgICAgICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApCisgICAgICAgICAgICAgICAg ICByZXR1cm4oeCk7CisgICAgICAgICAgICAgICAgY3ggPSBYWEZJTEU7CisgICAgICAgICAgICB9 IGVsc2UKKyAgICAgICAgICAgICAgcmV0dXJuKGN4KTsKKyAgICAgICAgfQorICAgICAgICBpZiAo KHggPSBjbWNmbSgpKSA8IDApCisgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICBzd2l0Y2gg KGN4KSB7CisgICAgICAgICAgY2FzZSBGSUxfQ0xTOiBjeCA9IFhYRl9DTDsgYnJlYWs7CisgICAg ICAgICAgY2FzZSBGSUxfRkxVOiBjeCA9IFhYRl9GTDsgYnJlYWs7CisgICAgICAgICAgY2FzZSBG SUxfTElTOiBjeCA9IFhYRl9MSTsgYnJlYWs7CisgICAgICAgICAgY2FzZSBGSUxfT1BOOiBjeCA9 IFhYRl9PUDsgYnJlYWs7CisgICAgICAgICAgY2FzZSBGSUxfUkVBOiBjeCA9IFhYRl9SRTsgYnJl YWs7CisgICAgICAgICAgY2FzZSBGSUxfUkVXOiBjeCA9IFhYRl9SVzsgYnJlYWs7CisgICAgICAg ICAgY2FzZSBGSUxfU0VFOiBjeCA9IFhYRl9TRTsgYnJlYWs7CisgICAgICAgICAgY2FzZSBGSUxf U1RBOiBjeCA9IFhYRl9TVDsgYnJlYWs7CisgICAgICAgICAgY2FzZSBGSUxfV1JJOiBjeCA9IFhY Rl9XUjsgYnJlYWs7CisgICAgICAgICAgY2FzZSBGSUxfQ09VOiBjeCA9IFhYRl9DTzsgYnJlYWs7 CisgICAgICAgIH0KKyAgICB9CisgICAgc3dpdGNoIChjeCkgeworICAgICAgY2FzZSBYWEZJTEU6 IHJldHVybihobXNnYShoeHhmaWxlKSk7CisgICAgICBjYXNlIFhYRl9DTDogcmV0dXJuKGhtc2dh KGh4eGZfY2wpKTsKKyAgICAgIGNhc2UgWFhGX0ZMOiByZXR1cm4oaG1zZ2EoaHh4Zl9mbCkpOwor ICAgICAgY2FzZSBYWEZfTEk6IHJldHVybihobXNnYShoeHhmX2xpKSk7CisgICAgICBjYXNlIFhY Rl9PUDogcmV0dXJuKGhtc2dhKGh4eGZfb3ApKTsKKyAgICAgIGNhc2UgWFhGX1JFOiByZXR1cm4o aG1zZ2EoaHh4Zl9yZSkpOworICAgICAgY2FzZSBYWEZfUlc6IHJldHVybihobXNnYShoeHhmX3J3 KSk7CisgICAgICBjYXNlIFhYRl9TRTogcmV0dXJuKGhtc2dhKGh4eGZfc2UpKTsKKyAgICAgIGNh c2UgWFhGX1NUOiByZXR1cm4oaG1zZ2EoaHh4Zl9zdCkpOworICAgICAgY2FzZSBYWEZfV1I6IHJl dHVybihobXNnYShoeHhmX3dyKSk7CisgICAgICBjYXNlIFhYRl9DTzogcmV0dXJuKGhtc2dhKGh4 eGZfY28pKTsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybigtMik7CisgICAgfQorfQor I2VuZGlmIC8qIENLQ0hBTk5FTElPICovCisKK2ludAorZG9obHAoeHgpIGludCB4eDsgeworICAg IGludCB4LHk7CisKKyAgICBkZWJ1ZyhGMTAxLCJET0hFTFAgeHgiLCIiLHh4KTsKKyAgICBpZiAo eHggPCAwKSByZXR1cm4oeHgpOworCisjaWZkZWYgTk9IRUxQCisgICAgaWYgKCh4ID0gY21jZm0o KSkgPCAwKQorICAgICAgcmV0dXJuKHgpOworICAgIHByaW50ZigiXG4lcywgQ29weXJpZ2h0IChD KSAxOTg1LCAlcywiLHZlcnNpbywgY2tfY3J5ZWFyKTsKKyNpZm5kZWYgTk9JS1NECisgICAgaWYg KGluc2VydmVyKQorICAgICAgcmV0dXJuKGhtc2dhKHRvcGhscGkpKTsKKyAgICBlbHNlCisjZW5k aWYgLyogSUtTRCAqLworICAgICAgcmV0dXJuKGhtc2dhKHRvcGhscCkpOworCisjZWxzZSAvKiBo ZWxwIGlzIGF2YWlsYWJsZSAqLworCisgICAgaWYgKGhlbHBmaWxlKQorICAgICAgcmV0dXJuKGRv dHlwZShoZWxwZmlsZSx4YXNrbW9yZSwwLDAsTlVMTCwwLE5VTEwsMCwwLE5VTEwsMCkpOworCisj aWZkZWYgQ0tDSEFOTkVMSU8KKyAgICBpZiAoeHggPT0gWFhGSUxFKQorICAgICAgcmV0dXJuKGRv aGZpbGUoeHgpKTsKKyAgICBlbHNlIGlmICh4eCA9PSBYWEZfUkUgfHwgeHggPT0gWFhGX1dSIHx8 IHh4ID09IFhYRl9PUCB8fAorICAgICAgICAgICAgIHh4ID09IFhYRl9DTCB8fCB4eCA9PSBYWEZf U0UgfHwgeHggPT0gWFhGX1JXIHx8CisgICAgICAgICAgICAgeHggPT0gWFhGX0ZMIHx8IHh4ID09 IFhYRl9MSSB8fCB4eCA9PSBYWEZfU1QgfHwgeHggPT0gWFhGX0NPKQorICAgICAgcmV0dXJuKGRv aGZpbGUoeHgpKTsKKyNlbmRpZiAvKiBDS0NIQU5ORUxJTyAqLworCisgICAgc3dpdGNoICh4eCkg eworCisjaWZuZGVmIE5PU1BMCitjYXNlIFhYQVNTOiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogQVNTSUdOICovCisgICAgcmV0dXJuKGhtc2dhKGh4eGFzcykpOworCitjYXNlIFhYQVNL OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQVNLICovCitjYXNlIFhYQVNLUTogICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogQVNLUSAqLworICAgIHJldHVybihobXNnYShoeHhh c2spKTsKKworY2FzZSBYWEFQQzoKKyAgICByZXR1cm4oaG1zZygiU3ludGF4OiBBUEMgdGV4dFxu XAorICBFY2hvZXMgdGhlIHRleHQgd2l0aGluIGEgVlQyMjAvMzIwLzQyMCBBcHBsaWNhdGlvbiBQ cm9ncmFtIENvbW1hbmQuIikpOworI2VuZGlmIC8qIE5PU1BMICovCisKKyNpZm5kZWYgTk9GUklM TFMKK2Nhc2UgWFhCVUc6CisgICAgcmV0dXJuKGhtc2coIkRlc2NyaWJlcyBob3cgdG8gZ2V0IHRl Y2huaWNhbCBzdXBwb3J0LiIpKTsKKyNlbmRpZiAvKiBOT0ZSSUxMUyAqLworCisjaWZuZGVmIE5P U1BMCitjYXNlIFhYQkVFUDoKKyNpZmRlZiBPUzIKKyAgICByZXR1cm4oaG1zZygiU3ludGF4OiBC RUVQIFsgeyBFUlJPUiwgSU5GT1JNQVRJT04sIFdBUk5JTkcgfSBdXG5cCisgIEdlbmVyYXRlcyBh IGJlbGwgYWNjb3JkaW5nIHRvIHRoZSBjdXJyZW50IHNldHRpbmdzLiAgSWYgU0VUIEJFTEwgaXMg c2V0IHRvXG5cCisgIFwic3lzdGVtLXNvdW5kc1wiIHRoZW4gdGhlIGFwcHJvcHJpYXRlIFN5c3Rl bSBTb3VuZCB3aWxsIGJlIGdlbmVyYXRlZC5cblwKKyAgRGVmYXVsdCBpcyBJTkZPUk1BVElPTi4i KSk7CisjZWxzZSAvKiBPUzIgKi8KKyAgICByZXR1cm4oaG1zZygiU3ludGF4OiBCRUVQXG5cCitT ZW5kcyBhIEJFTCBjaGFyYWN0ZXIgdG8geW91ciB0ZXJtaW5hbC4iKSk7CisjZW5kaWYgLyogT1My ICovCisjZW5kaWYgLyogTk9TUEwgKi8KKworY2FzZSBYWEJZRTogICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIEJZRSAqLworICAgIHJldHVybihobXNnKGhteHhieWUpKTsKKworY2FzZSBY WENISzogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNoZWNrICovCisgICAgcmV0dXJu KGhtc2coIlwKK1N5bnRheDogQ0hFQ0sgbmFtZVxuXAorICBDaGVja3NcCisgIHRvIHNlZSBpZiB0 aGUgbmFtZWQgZmVhdHVyZSBpcyBpbmNsdWRlZCBpbiB0aGlzIHZlcnNpb24gb2YgS2VybWl0Llxu XAorICBUbyBsaXN0IHRoZSBmZWF0dXJlcyB5b3UgY2FuIGNoZWNrLCB0eXBlIFwiY2hlY2sgP1wi LiIpKTsKKworI2lmbmRlZiBOT0ZSSUxMUworY2FzZSBYWENMRTogICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIGNsZWFyICovCisgICAgcmV0dXJuKGhtc2dhKGhteHhjbGUpKTsKKyNlbmRp ZiAvKiBOT0ZSSUxMUyAqLworCitjYXNlIFhYQ0xPOiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogY2xvc2UgKi8KKyAgICByZXR1cm4oaG1zZ2EoaG14eGNsbykpOworCitjYXNlIFhYQ09N OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29tbWVudCAqLworI2lmbmRlZiBTVFJB VFVTIC8qIENhbid0IHVzZSAjIGZvciBjb21tZW50cyBpbiBTdHJhdHVzIFZPUyAqLworICAgIHJl dHVybihobXNnKCJcCitTeW50YXg6IENPTU1FTlQgdGV4dFxuXAorRXhhbXBsZTogQ09NTUVOVCAt IHRoaXMgaXMgYSBjb21tZW50LlxuXAorICBJbnRyb2R1Y2VzIGEgY29tbWVudC4gIEJlZ2lubmlu ZyBvZiBjb21tYW5kIGxpbmUgb25seS4gIENvbW1hbmRzIG1heSBhbHNvXG5cCisgIGhhdmUgdHJh aWxpbmcgY29tbWVudHMsIGludHJvZHVjZWQgYnkgOyBvciAjLiIpKTsKKyNlbHNlCisgICAgcmV0 dXJuKGhtc2coIlwKK1N5bnRheDogQ09NTUVOVCB0ZXh0XG5cCitFeGFtcGxlOiBDT01NRU5UIC0g dGhpcyBpcyBhIGNvbW1lbnQuXG5cCisgIEludHJvZHVjZXMgYSBjb21tZW50LiAgQmVnaW5uaW5n IG9mIGNvbW1hbmQgbGluZSBvbmx5LiAgQ29tbWFuZHMgbWF5IGFsc29cblwKKyAgaGF2ZSB0cmFp bGluZyBjb21tZW50cywgaW50cm9kdWNlZCBieSA7IChzZW1pY29sb24pLiIpKTsKKyNlbmRpZiAv KiBTVFJBVFVTICovCisKKyNpZm5kZWYgTk9MT0NBTAorY2FzZSBYWENPTjogICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIENPTk5FQ1QgKi8KK2Nhc2UgWFhDUTogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBDUSA9PSBDT05ORUNUIC9RVUlFVExZICovCisgICAgaG1zZ2EoaG14 eGNvbik7CisgICAgcHJpbnRmKCJZb3VyIGVzY2FwZSBjaGFyYWN0ZXIgaXMgQ3RybC0lYyAoQVND SUkgJWQsICVzKVxyXG4iLAorICAgICAgICAgICBjdGwoZXNjYXBlKSwgZXNjYXBlLCAoZXNjYXBl ID09IDEyNyA/ICJERUwiIDogY2NudGFiW2VzY2FwZV0pKTsKKyAgICByZXR1cm4oMCk7CisjZW5k aWYgLyogTk9MT0NBTCAqLworCisjaWZkZWYgWkNPUFkKK2Nhc2UgWFhDUFk6CisgICAgcmV0dXJu KGhtc2dhKGhteHhjcHkpKTsKKyNlbmRpZiAvKiBaQ09QWSAqLworCisjaWZkZWYgTlQKK2Nhc2Ug WFhMSU5LOgorcmV0dXJuKGhtc2coCisiICBMSU5LIHNvdXJjZSBkZXN0aW5hdGlvblxuXAorICAg Y3JlYXRlcyBhIGhhcmQgbGluayB0byB0aGUgZmlsZSBzcGVjaWZpZWQgYnkgc291cmNlIHRvIHRo ZSBmaWxlbmFtZVxuXAorICAgc3BlY2lmaWVkIGJ5IGRlc3RpbmF0aW9uLiAgSGFyZCBsaW5rcyBh cmUgb25seSBzdXBwb3J0ZWQgb24gTlRGUy5cblwKKyAgIGRlc3RpbmF0aW9uIGNhbiBlaXRoZXIg YmUgYSBmaWxlbmFtZSBvciBhIGRpcmVjdG9yeS4gIHNvdXJjZSBtYXlcblwKKyAgIGNvbnRhaW4g d2lsZGNhcmRzIGlmIGRlc3RpbmF0aW9uIGlzIGEgZGlyZWN0b3J5LiIpKTsKKyNlbmRpZiAvKiBO VCAqLworCisjaWZuZGVmIE5PRlJJTExTCitjYXNlIFhYTFJFTjogICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogTFJFTkFNRSAqLworICAgIHJldHVybihobXNnKAorIiAgTFJFTkFNRSBpcyBh biBhbGlhcyBmb3IgdGhlIFJFTkFNRSBjb21tYW5kIGZvcmNpbmcgaXQgdG8gZXhlY3V0ZVxuXAor ICBvbiB0aGUgbG9jYWwgY29tcHV0ZXIuICBBbHNvIHNlZTogUkVOQU1FLCBSUkVOQU1FLCBTRVQg TE9DVVMuIikpOworCitjYXNlIFhYUkVOOgorICAgIHJldHVybihobXNnYShobXh4cmVuKSk7Cisj ZW5kaWYgLyogTk9GUklMTFMgKi8KKworY2FzZSBYWENEVVA6ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBDRFVQICovCitjYXNlIFhYTENEVToKKyAgICByZXR1cm4oaG1zZygKKyJDaGFu Z2Ugd29ya2luZyBkaXJlY3RvcnkgdG8gdGhlIG9uZSBqdXN0IGFib3ZlIHRoZSBjdXJyZW50IG9u ZS4iKSk7CisKK2Nhc2UgWFhMQ1dEOgorICAgIHJldHVybihobXNnKAorIiAgTENEIChMQ1dEKSBp cyBhbiBhbGlhcyBmb3IgdGhlIENEIChDV0QpIGNvbW1hbmQgZm9yY2luZyBpdCB0byBleGVjdXRl XG5cCisgIG9uIHRoZSBsb2NhbCBjb21wdXRlci4gIEFsc28gc2VlOiBDRCwgQ0RVUCwgUkNELCBT RVQgTE9DVVMuIikpOworCitjYXNlIFhYQ1dEOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogQ0QgLyBDV0QgKi8KKyAgICByZXR1cm4oaG1zZ2EoaG14eGN3ZCkpOworCisjaWZuZGVmIE5P U1BMCitjYXNlIFhYS0NEOgorICAgIHJldHVybihobXNnYShobXh4a2NkKSk7CisKK2Nhc2UgWFhB UlJBWToKK2Nhc2UgWFhEQ0w6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBERUNMQVJF ICovCitjYXNlIFhYU09SVDoKKyAgICByZXR1cm4oaG1zZ2EoaHh4ZGNsKSk7CisKK2Nhc2UgWFhE RUY6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBERUZJTkUgKi8KKyNpZm5kZWYgTk9T UEwKKyAgICBpZiAoaGxwdG9rKSAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXaGF0IHRoZXkg YWN0dWFsbHkgdHlwZWQuLi4gKi8KKyAgICAgIGlmIChobHB0b2tbMF0gPT0gJy4nKQorICAgICAg ICByZXR1cm4oaG1zZ2EoaHh4ZG90KSk7CisjZW5kaWYgLyogTk9TUEwgKi8KKyAgICByZXR1cm4o aG1zZ2EoaHh4ZGVmKSk7CisKK2Nhc2UgWFhVTkRFRjogICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBVTkRFRklORSAqLworICAgIHJldHVybihobXNnKCJTeW50YXg6ICBVTkRFRklORSB2YXJp YWJsZS1uYW1lXG5cCisgIFVuZGVmaW5lcyBhIG1hY3JvIG9yIHZhcmlhYmxlLiIpKTsKKyNlbmRp ZiAvKiBOT1NQTCAqLworCitjYXNlIFhYTVNHOgorICAgIHJldHVybihobXNnKCJTeW50YXg6IE1F U1NBR0UgdGV4dC10by1wcmludC1pZi1kZWJ1Z2dpbmdcblwKKyAgUHJpbnRzIHRoZSBnaXZlbiB0 ZXh0IHRvIHN0ZG91dCBpZiBTRVQgREVCVUcgTUVTU0FHRSBpcyBPTjsgcHJpbnRzIGl0XG5cCisg IHRvIHN0ZGVyciBpZiBTRVQgREVCVUcgTUVTU0FHRSBpcyBTVERFUlI7IGRvZXNuJ3QgcHJpbnQg aXQgYXQgYWxsIGlmIFNFVFxuXAorICBERUJVRyBNRVNTQUdFIGlzIE9GRi4gIFN5bm9ueW06IE1T Ry4iKSk7CisKKyNpZm5kZWYgTk9GUklMTFMKK2Nhc2UgWFhMREVMOgorICAgIHJldHVybihobXNn KAorIiAgTERFTEVURSBpcyBhbiBhbGlhcyBmb3IgdGhlIERFTEVURSBjb21tYW5kIGZvcmNpbmcg aXQgdG8gZXhlY3V0ZVxuXAorICBvbiB0aGUgbG9jYWwgY29tcHV0ZXIuICBBbHNvIHNlZTogREVM RVRFLCBSREVMRVRFLCBTRVQgTE9DVVMuIikpOworCitjYXNlIFhYREVMOiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogZGVsZXRlICovCisgICAgcmV0dXJuKGhtc2dhKGhteHhkZWwpKTsK KyNlbmRpZiAvKiBOT0ZSSUxMUyAqLworCisjaWZuZGVmIE5PRElBTAorY2FzZSBYWERJQUw6ICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERJQUwsIGV0Yy4uLiAqLworICAgIHJldHVybiho bXNnYShoeHhkaWFsKSk7CisKK2Nhc2UgWFhQRElBOiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBQRElBTCAqLworICAgIHJldHVybihobXNnKCJTeW50YXg6IFBESUFMIHBob25lbnVtYmVy XG5cCisgIFBhcnRpYWxseSBkaWFscyBhIHBob25lIG51bWJlci4gIExpa2UgRElBTCBidXQgZG9l cyBub3Qgd2FpdCBmb3IgY2FycmllclxuXAorICBvciBDT05ORUNUIG1lc3NhZ2UuIikpOworCitj YXNlIFhYUkVEOgorICAgIHJldHVybihobXNnKCJSZWRpYWwgdGhlIG51bWJlciBnaXZlbiBpbiB0 aGUgbW9zdCByZWNlbnQgRElBTCBjb21tbmQuIikpOworCitjYXNlIFhYQU5TVzogICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogQU5TV0VSICovCisgICAgcmV0dXJuKGhtc2dhKGh4eGFuc3cp KTsKKworY2FzZSBYWExPT0s6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExPT0tVUCBu dW1iZXIgaW4gZGlyZWN0b3J5ICovCisgICAgcmV0dXJuKGhtc2dhKGh4eGxvb2spKTsKKyNlbmRp ZiAvKiBOT0RJQUwgKi8KKworY2FzZSBYWExESVI6ICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIExESVJFQ1RPUlkgKi8KKyAgICByZXR1cm4oaG1zZygKKyIgIExESVJJUkVDVE9SWSBpcyBh biBhbGlhcyBmb3IgdGhlIERJUkVDVE9SWSBjb21tYW5kIGZvcmNpbmcgaXQgdG8gZXhlY3V0ZVxu XAorICBvbiB0aGUgbG9jYWwgY29tcHV0ZXIuICBBbHNvIHNlZTogRElSRUNUT1JZLCBTRVQgTE9D VVMsIFJESVJFQ1RPUlkuIikpOworCitjYXNlIFhYRElSOiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogRElSRUNUT1JZICovCisgICAgcmV0dXJuKGhtc2dhKGhteHhkaXIpKTsKKworY2Fz ZSBYWFRPVUM6CQkJCS8qIFRPVUNIICovCisgICAgcmV0dXJuKGhtc2dhKGhteHh0b3VjKSk7CisK K2Nhc2UgWFhXRElSOgkJCQkvKiBXRElSRUNUT1JZICovCisgIHJldHVybihobXNnKCIgIFdESVJF Q1RPUlkgaXMgc2hvcnRoYW5kIGZvciBESVJFQ1RPUlkgL1NPUlQ6REFURSAvUkVWRVJTRTtcblwK KyAgaXQgcHJvZHVjZXMgYSBsaXN0aW5nIGluIHJldmVyc2UgY2hyb25vbG9naWNhbCBvcmRlci4g IFNlZSB0aGUgRElSRUNUT1JZXG5cCisgIGNvbW1hbmQgZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24u IikpOworCitjYXNlIFhYSERJUjoJCQkJLyogSERJUkVDVE9SWSAqLworICByZXR1cm4oaG1zZygi ICBIRElSRUNUT1JZIGlzIHNob3J0aGFuZCBmb3IgRElSRUNUT1JZIC9TT1JUOlNJWkUgL1JFVkVS U0U7XG5cCisgIGl0IHByb2R1Y2VzIGEgbGlzdGluZyBzaG93aW5nIHRoZSBiaWdnZXN0IGZpbGVz IGZpcnN0LiAgU2VlIHRoZSBESVJFQ1RPUllcblwKKyAgY29tbWFuZCBmb3IgZnVydGhlciBpbmZv cm1hdGlvbi4iKSk7CisKK2Nhc2UgWFhMTUtEOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBMTUtESVIgKi8KKyAgICByZXR1cm4oaG1zZygKKyIgIExNS0RJUiBpcyBhbiBhbGlhcyBmb3Ig dGhlIE1LRElSIGNvbW1hbmQgZm9yY2luZyBpdCB0byBleGVjdXRlXG5cCisgIG9uIHRoZSBsb2Nh bCBjb21wdXRlci4gIEFsc28gc2VlOiBNS0RJUiwgUk1LRElSLCBTRVQgTE9DVVMuIikpOworCitj YXNlIFhYTUtESVI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTUtESVIgKi8KKyAgICBy ZXR1cm4oaG1zZygiQ3JlYXRlcyBhIGRpcmVjdG9yeS4gIEFsc28gc2VlIExSTURJUiwgUlJNRElS LCBTRVQgTE9DVVMuIikpOworCitjYXNlIFhYTFJNRDogICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogTFJNRElSICovCisgICAgcmV0dXJuKGhtc2coCisiICBMUk1ESVIgaXMgYW4gYWxpYXMg Zm9yIHRoZSBSTURJUiBjb21tYW5kIGZvcmNpbmcgaXQgdG8gZXhlY3V0ZVxuXAorICBvbiB0aGUg bG9jYWwgY29tcHV0ZXIuICBBbHNvIHNlZTogUk1ESVIsIFJSTURJUiwgU0VUIExPQ1VTLiIpKTsK KworY2FzZSBYWFJNRElSOiAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJNRElSICovCisg ICAgcmV0dXJuKGhtc2coIlJlbW92ZXMgYSBkaXJlY3RvcnkuICBBbHNvIHNlZSBMUk1ESVIsIFJS TURJUiwgU0VUIExPQ1VTLiIpKTsKKworY2FzZSBYWExTOgorI2lmZGVmIFVOSVhPUk9TSworICAg IHJldHVybihobXNnKCJTeW50YXg6IExTIFsgYXJncyBdXG5cCisgIFJ1bnMgXCJsc1wiIHdpdGgg dGhlIGdpdmVuIGFyZ3VtZW50cy4iKSk7CisjZWxzZQorICAgIHJldHVybihobXNnYShobXh4ZGly KSk7CisjZW5kaWYgLyogVU5JWE9ST1NLICovCisKKyNpZm5kZWYgTk9TRVJWRVIKKyNpZm5kZWYg Tk9GUklMTFMKK2Nhc2UgWFhESVM6CisgICAgcmV0dXJuKGhtc2coIlN5bnRheDogRElTQUJMRSBj b21tYW5kXG5cCisgIFNlY3VyaXR5IGZvciB0aGUgS2VybWl0IHNlcnZlci4gIFByZXZlbnRzIHRo ZSBjbGllbnQgS2VybWl0IHByb2dyYW0gZnJvbVxuXAorICBleGVjdXRpbmcgdGhlIG5hbWVkIFJF TU9URSBjb21tYW5kLCBzdWNoIGFzIENELCBERUxFVEUsIFJFQ0VJVkUsIGV0Yy4iKSk7CisjZW5k aWYgLyogTk9GUklMTFMgKi8KKyNlbmRpZiAvKiBOT1NFUlZFUiAqLworCisjaWZuZGVmIE5PU1BM CitjYXNlIFhYRE86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG8gKi8KKyAgICBy ZXR1cm4oaG1zZygiU3ludGF4OiBbIERPIF0gbWFjcm9uYW1lIFsgYXJndW1lbnRzIF1cblwKKyAg RXhlY3V0ZXMgYSBtYWNybyB0aGF0IHdhcyBkZWZpbmVkIHdpdGggdGhlIERFRklORSBjb21tYW5k LiAgVGhlIHdvcmQgRE9cblwKKyAgY2FuIGJlIG9taXR0ZWQuICBUcmFpbGluZyBhcmd1bWVudCB3 b3JkcywgaWYgYW55LCBhcmUgYXV0b21hdGljYWxseVxuXAorICBhc3NpZ25lZCB0byB0aGUgbWFj cm8gYXJndW1lbnQgdmFyaWFibGVzIFxcJTEgdGhyb3VnaCBcXCU5LiIpKTsKKyNlbmRpZiAvKiBO T1NQTCAqLworCisjaWZuZGVmIE5PU1BMCitjYXNlIFhYREVDOgorICAgIHJldHVybihobXNnYSho eHhkZWMpKTsKKyNlbmRpZiAvKiBOT1NQTCAqLworCitjYXNlIFhYRUNIOiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogZWNobyAqLworICAgIHJldHVybihobXNnKCJTeW50YXg6IEVDSE8g dGV4dFxuXAorICBEaXNwbGF5cyB0aGUgdGV4dCBvbiB0aGUgc2NyZWVuLCBmb2xsb3dlZCBieSBh IGxpbmUgdGVybWluYXRvci4gIFRoZSBFQ0hPXG5cCisgIHRleHQgbWF5IGNvbnRhaW4gYmFja3Ns YXNoIGNvZGVzLiAgRXhhbXBsZTogRUNITyBcXDdXYWtlIHVwIVxcNy4gIEFsc28gc2VlXG5cCisg IFhFQ0hPIGFuZCBXUklURSBTQ1JFRU4uIikpOworCitjYXNlIFhYWEVDSDogICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogeGVjaG8gKi8KKyAgICByZXR1cm4oaG1zZygiU3ludGF4OiBYRUNI TyB0ZXh0XG5cCisgIEp1c3QgbGlrZSBFQ0hPIGJ1dCBkb2VzIG5vdCBhZGQgYSBsaW5lIHRlcm1p bmF0b3IgdG8gdGhlIHRleHQuICBTZWUgRUNITy4iKSk7CisKK2Nhc2UgWFhWT0lEOgorICAgIHJl dHVybihobXNnKCJTeW50YXg6IFZPSUQgdGV4dFxuXAorICBMaWtlIEVDSE8gYnV0IGRvZXNuJ3Qg cHJpbnQgYW55dGhpbmc7IGNhbiBiZSB1c2VkIHRvIGludm9rZSBmdW5jdGlvbnNcblwKKyAgd2hl biB5b3UgZG9uJ3QgbmVlZCB0byBkaXNwbGF5IG9yIHVzZSB0aGVpciByZXN1bHRzLiIpKTsKKwor I2lmbmRlZiBOT1NFUlZFUgorI2lmbmRlZiBOT0ZSSUxMUworY2FzZSBYWEVOQToKKyAgICByZXR1 cm4oaG1zZygiU3ludGF4OiBFTkFCTEUgY2FwYWJpbGl0eVxuXAorICBGb3IgdXNlIHdpdGggc2Vy dmVyIG1vZGUuICBBbGxvd3MgdGhlIGNsaWVudCBLZXJtaXQgcHJvZ3JhbSBhY2Nlc3MgdG8gdGhl XG5cCisgIG5hbWVkIGNhcGFiaWxpdHksIHN1Y2ggYXMgQ0QsIERFTEVURSwgUkVDRUlWRSwgZXRj LiAgT3Bwb3NpdGUgb2YgRElTQUJMRS4iKSk7CisjZW5kaWYgLyogTk9GUklMTFMgKi8KKyNlbmRp ZiAvKiBOT1NFUlZFUiAqLworCisjaWZuZGVmIE5PU1BMCitjYXNlIFhYRU5EOiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogZW5kICovCisgICAgcmV0dXJuKGhtc2coIlN5bnRheDogRU5E IFsgbnVtYmVyIFsgbWVzc2FnZSBdIF1cblwKKyAgRXhpdHMgZnJvbSB0aGUgY3VycmVudCBtYWNy byBvciBUQUtFIGZpbGUsIGJhY2sgdG8gd2hlcmV2ZXIgaW52b2tlZCBmcm9tLlxuXAorICBOdW1i ZXIgaXMgcmV0dXJuIGNvZGUuICBNZXNzYWdlLCBpZiBnaXZlbiwgaXMgcHJpbnRlZC4iKSk7CisK K2Nhc2UgWFhFVkFMOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBldmFsdWF0ZSAqLwor ICAgIHJldHVybihobXNnYShobXh4ZXZhbCkpOworI2VuZGlmIC8qIE5PU1BMICovCisKKyNpZm5k ZWYgTk9GUklMTFMKK2Nhc2UgWFhFUlI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBl LXBhY2tldCAqLworICAgIHJldHVybihobXNnKCJTeW50YXg6IEUtUEFDS0VUXG5cCisgIFNlbmRz IGFuIEVycm9yIHBhY2tldCB0byB0aGUgb3RoZXIgS2VybWl0LiIpKTsKKyNlbmRpZiAvKiBOT0ZS SUxMUyAqLworCitjYXNlIFhYRVhJOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXhp dCAqLworY2FzZSBYWFFVSToKKyAgICByZXR1cm4oaG1zZ2EoaG14eGV4aXQpKTsKKworY2FzZSBY WEZJTjoKKyAgICByZXR1cm4oaG1zZygiU3ludGF4OiBGSU5JU0hcblwKKyAgVGVsbHMgdGhlIHJl bW90ZSBLZXJtaXQgc2VydmVyIHRvIHNodXQgZG93biB3aXRob3V0IGxvZ2dpbmcgb3V0LiIpKTsK KworI2lmbmRlZiBOT1NQTAorICBjYXNlIFhYRk9SOgorICAgIHJldHVybihobXNnYShmb3JobHAp KTsKKyNlbmRpZiAvKiBOT1NQTCAqLworCisgIGNhc2UgWFhHRVQ6CisgICAgcmV0dXJuKGhtc2dh KGhteHhnZXQpKTsKKyAgY2FzZSBYWE1HRVQ6CisgICAgcmV0dXJuKGhtc2dhKGhteHhtZ2V0KSk7 CisKKyNpZm5kZWYgTk9TUEwKKyNpZm5kZWYgTk9GUklMTFMKKyAgY2FzZSBYWEdPSzoKKyAgICBy ZXR1cm4oaG1zZygiU3ludGF4OiBHRVRPSyBbIHN3aXRjaGVzIF0gcHJvbXB0XG5cCisgIFByaW50 cyB0aGUgcHJvbXB0LCBtYWtlcyB1c2VyIHR5cGUgJ3llcycsICdubycsIG9yICdvaycsIGFuZCBz ZXRzIFNVQ0NFU1NcblwKKyAgb3IgRkFJTFVSRSBhY2NvcmRpbmdseS4gIFRoZSBvcHRpb25hbCBz d2l0Y2hlcyBhcmUgdGhlIHNhbWUgYXMgZm9yIEFTSy4iKSk7CisjZW5kaWYgLyogTk9GUklMTFMg Ki8KKyNlbmRpZiAvKiBOT1NQTCAqLworCisjaWZuZGVmIE5PU1BMCisgIGNhc2UgWFhHT1RPOgor ICAgIHJldHVybihobXNnKCJTeW50YXg6IEdPVE8gbGFiZWxcblwKKyAgSW4gYSBUQUtFIGZpbGUg b3IgbWFjcm8sIGdvIHRvIHRoZSBnaXZlbiBsYWJlbC4gIEEgbGFiZWwgaXMgYSB3b3JkIG9uIHRo ZVxuXAorICBsZWZ0IG1hcmdpbiB0aGF0IHN0YXJ0cyB3aXRoIGEgY29sb24gKDopLiAgRXhhbXBs ZTpcblxuXAorICA6b29mYVxuXAorICBlY2hvIEhlbGxvIVxuXAorICBnb3RvIG9vZmEiKSk7Cisj ZW5kaWYgLyogTk9TUEwgKi8KKworICBjYXNlIFhYSEFOOgorICAgIHJldHVybihobXNnKCJTeW50 YXg6IEhBTkdVUFxuXAorSGFuZyB1cCB0aGUgcGhvbmUgb3IgbmV0d29yayBjb25uZWN0aW9uLiIp KTsKKworICBjYXNlIFhYSExQOgorLyoKKyAgV2UgZ2V0IGNvbmZpcm1hdGlvbiBoZXJlLCBldmVu IHRob3VnaCB3ZSBkbyBpdCBhZ2FpbiBpbiBobXNnYSgpLCB0byBwcmV2ZW50CisgIHRoZSBDb3B5 cmlnaHQgbWVzc2FnZSBmcm9tIGJlaW5nIHByaW50ZWQgcHJlbWF0dXJlbHkuICBUaGlzIGRvZXNu J3QgZG8gYW55CisgIGhhcm0sIGJlY2F1c2UgdGhlIGZpcnN0IGNhbGwgdG8gY21jZm0oKSBzZXRz IGNtZmxncyB0byAxLCBtYWtpbmcgdGhlIHNlY29uZAorICBjYWxsIHJldHVybiBpbW1lZGlhdGVs eS4KKyovCisgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKQorICAgICAgcmV0dXJuKHgpOworCisg ICAgaWYgKGhlbHBmaWxlKSB7CisgICAgICAgIHByaW50ZigiXG4lcywgQ29weXJpZ2h0IChDKSAx OTg1LCAlcyxcblwKK1RydXN0ZWVzIG9mIENvbHVtYmlhIFVuaXZlcnNpdHkgaW4gdGhlIENpdHkg b2YgTmV3IFlvcmsuXG5cbiIsCisJICAgICAgIHZlcnNpbywKKwkgICAgICAgY2tfY3J5ZWFyCisJ ICAgICAgICk7CisgICAgICAgIHJldHVybihkb3R5cGUoaGVscGZpbGUseGFza21vcmUsMywwLE5V TEwsMCxOVUxMLDAsMCxOVUxMLDApKTsKKyAgICB9IGVsc2UgeworICAgICAgICBwcmludGYoIlxu JXMsIENvcHlyaWdodCAoQykgMTk4NSwgJXMsIix2ZXJzaW8sY2tfY3J5ZWFyKTsKKyAgICAgICAg cmV0dXJuKGhtc2dhKHRvcGhscCkpOworICAgIH0KKworY2FzZSBYWElOVDoKKyNpZmRlZiBPUzIK KyAgICByZXR1cm4oaG1zZygiVGhlIElOVFJPIGNvbW1hbmQgZ2l2ZXMgYSBicmllZiBpbnRyb2R1 Y3Rpb24gdG8gS2VybWl0IDk1LiIpKTsKKyNlbHNlCisgICAgcmV0dXJuKGhtc2coIlRoZSBJTlRS TyBjb21tYW5kIGdpdmVzIGEgYnJpZWYgaW50cm9kdWN0aW9uIHRvIEMtS2VybWl0LiIpKTsKKyNl bmRpZiAvKiBPUzIgKi8KKworI2lmbmRlZiBOT1NQTAorY2FzZSBYWElGOgorICAgIHJldHVybiho bXNnYShpZmhscCkpOworCitjYXNlIFhYSU5DOgorICAgIHJldHVybihobXNnYShoeHhpbmMpKTsK KworY2FzZSBYWElOUDoKKyAgIHJldHVybihobXNnYShoeHhpbnApKTsKKyNlbmRpZiAvKiBOT1NQ TCAqLworCisjaWZkZWYgQ0tfTUlOUFVUCitjYXNlIFhYTUlOUDoKKyAgICByZXR1cm4oaG1zZ2Eo aG14eG1pbnApKTsKKyNlbmRpZiAvKiBDS19NSU5QVVQgKi8KKworI2lmbmRlZiBOT1NQTAorY2Fz ZSBYWFJFSToKKyAgICByZXR1cm4oaG1zZygiU3ludGF4OiBSRUlOUFVUIG4gc3RyaW5nXG5cCisg IExvb2tzIGZvciB0aGUgc3RyaW5nIGluIHRoZSB0ZXh0IHRoYXQgaGFzIHJlY2VudGx5IGJlZW4g SU5QVVQsIHNldCBTVUNDRVNTXG5cCisgIG9yIEZBSUxVUkUgYWNjb3JkaW5nbHkuICBUaW1lb3V0 LCBuLCBtdXN0IGJlIHNwZWNpZmllZCBidXQgaXMgaWdub3JlZC4iKSk7CisjZW5kaWYgLyogTk9T UEwgKi8KKworI2lmbmRlZiBOT1NQTAorY2FzZSBYWExCTDoKKyAgICByZXR1cm4oaG1zZygiXAor ICBJbnRyb2R1Y2VzIGEgbGFiZWwsIGxpa2UgOmxvb3AsIGZvciB1c2Ugd2l0aCBHT1RPIGluIFRB S0UgZmlsZXMgb3IgbWFjcm9zLlxuXAorU2VlIEdPVE8uIikpOworI2VuZGlmIC8qIE5PU1BMICov CisKK2Nhc2UgWFhMT0c6CisgICAgcmV0dXJuKGhtc2dhKGhteHhsZykpOworCisjaWZuZGVmIE5P U0NSSVBUCitjYXNlIFhYTE9HSToKKyAgICByZXR1cm4oaG1zZ2EoaG14eGxvZ2kpKTsKKyNlbmRp ZgorCisjaWZuZGVmIE5PRlJJTExTCitjYXNlIFhYTUFJOgorICAgIHJldHVybihobXNnKCJTeW50 YXg6IE1BSUwgZmlsZW5hbWUgYWRkcmVzc1xuXAorICBFcXVpdmFsZW50IHRvIFNFTkQgL01BSUw6 YWRkcmVzcyBmaWxlbmFtZS4iKSk7CisjZW5kaWYgLyogTk9GUklMTFMgKi8KKworI2lmbmRlZiBO T01TRU5ECitjYXNlIFhYTVNFOgorICAgIHJldHVybihobXNnYShobXh4bXNlKSk7CisKK2Nhc2Ug WFhBREQ6CisgICAgcmV0dXJuKGhtc2dhKGhteHhhZGQpKTsKKworY2FzZSBYWE1NT1ZFOgorICAg IHJldHVybihobXNnKCJNTU9WRSBpcyBleGFjdGx5IGxpa2UgTVNFTkQsIGV4Y2VwdCBlYWNoIGZp bGUgdGhhdCBpc1xuXAorc2VudCBzdWNjZXNzZnVsbHkgaXMgZGVsZXRlZCBhZnRlciBpdCBpcyBz ZW50LiIpKTsKKyNlbmRpZiAvKiBOT01TRU5EICovCisKKyNpZm5kZWYgTk9TUEwKK2Nhc2UgWFhP UEU6CisgICAgcmV0dXJuKGhtc2dhKG9wZW5obHApKTsKKyNlbmRpZiAvKiBOT1NQTCAqLworCitj YXNlIFhYTkVXOgorICAgIHJldHVybihobXNnKAorIiAgUHJpbnRzIG5ld3Mgb2YgbmV3IGZlYXR1 cmVzIHNpbmNlIHB1YmxpY2F0aW9uIG9mIFwiVXNpbmcgQy1LZXJtaXRcIi4iKSk7CisKK2Nhc2Ug WFhVUEQ6CisgICAgcmV0dXJuKGhtc2coCisiICBOZXcgZmVhdHVyZXMgYXJlIGRlc2NyaWJlZCBp biB0aGUgb25saW5lIEtlcm1pdCA5NSBtYW51YWwsXG5cCisgICBhY2Nlc3NpYmxlIHZpYSB0aGUg TUFOVUFMIGNvbW1hbmQuIikpOworCisjaWZuZGVmIE5PU1BMCitjYXNlIFhYT1VUOgorICAgIHJl dHVybihobXNnYShoeHhvdXQpKTsKKyNlbmRpZiAvKiBOT1NQTCAqLworCisjaWZkZWYgQU5ZWDI1 CisjaWZuZGVmIElCTVgyNQorY2FzZSBYWFBBRDoKKyAgICByZXR1cm4oaG1zZ2EoaHh4cGFkKSk7 CisjZW5kaWYgLyogSUJNWDI1ICovCisjZW5kaWYgLyogQU5ZWDI1ICovCisKKyNpZm5kZWYgTk9T UEwKK2Nhc2UgWFhQQVU6CisgICAgcmV0dXJuKGhtc2dhKGh4eHBhdSkpOworCitjYXNlIFhYTVNM OgorICAgIHJldHVybihobXNnYShoeHhtc2wpKTsKKyNlbmRpZiAvKiBOT1NQTCAqLworCisjaWZk ZWYgVENQU09DS0VUCitjYXNlIFhYUE5HOgorICAgIHJldHVybihobXNnKCJTeW50YXg6IFBJTkcg WyBJUC1ob3N0bmFtZS1vci1udW1iZXIgXVxuXAorICBDaGVja3MgaWYgdGhlIGdpdmVuIElQIG5l dHdvcmsgaG9zdCBpcyByZWFjaGFibGUuICBEZWZhdWx0IGhvc3QgaXMgZnJvbVxuXAorICBtb3N0 IHJlY2VudCBTRVQgSE9TVCBvciBURUxORVQgY29tbWFuZC4gIFJ1bnMgc3lzdGVtIFBJTkcgcHJv Z3JhbSwgaWYgYW55LiIpCisgICAgICAgICAgICk7CisKK2Nhc2UgWFhGVFA6CisjaWZkZWYgU1lT RlRQCisgICAgcmV0dXJuKGhtc2coIlN5bnRheDogRlRQIFsgSVAtaG9zdG5hbWUtb3ItbnVtYmVy IF1cblwKKyAgTWFrZXMgYW4gRlRQIGNvbm5lY3Rpb24gdG8gdGhlIGdpdmVuIElQIGhvc3Qgb3Is IGlmIG5vIGhvc3Qgc3BlY2lmaWVkLCB0b1xuXAorICB0aGUgY3VycmVudCBob3N0LiAgVXNlcyB0 aGUgc3lzdGVtJ3MgRlRQIHByb2dyYW0sIGlmIGFueS4iKSk7CisjZWxzZQorI2lmbmRlZiBOT0ZU UAorICAgIHJldHVybihkb2Z0cGhscCgpKTsKKyNlbmRpZiAvKiBOT0ZUUCAqLworI2VuZGlmIC8q IFNZU0ZUUCAqLworI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLworCisjaWZuZGVmIE5PRlJJTExTCitj YXNlIFhYUFJJOgorI2lmZGVmIFVOSVgKKyAgICByZXR1cm4oaG1zZygiU3ludGF4OiBQUklOVCBm aWxlIFsgb3B0aW9ucyBdXG5cCisgIFByaW50cyB0aGUgbG9jYWwgZmlsZSBvbiBhIGxvY2FsIHBy aW50ZXIgd2l0aCB0aGUgZ2l2ZW4gb3B0aW9ucy4gIEFsc28gc2VlXG5cCisgIEhFTFAgU0VUIFBS SU5URVIuIikpOworI2Vsc2UKKyNpZmRlZiBWTVMKKyAgICByZXR1cm4oaG1zZygiU3ludGF4OiBQ UklOVCBmaWxlIFsgb3B0aW9ucyBdXG5cCisgIFByaW50cyB0aGUgbG9jYWwgZmlsZSBvbiBhIGxv Y2FsIHByaW50ZXIgd2l0aCB0aGUgZ2l2ZW4gb3B0aW9ucy4gIEFsc28gc2VlXG5cCisgIEhFTFAg U0VUIFBSSU5URVIuIikpOworI2Vsc2UKKyAgICByZXR1cm4oaG1zZygiU3ludGF4OiBQUklOVCBm aWxlXG5cCisgIFByaW50cyB0aGUgbG9jYWwgZmlsZSBvbiBhIGxvY2FsIHByaW50ZXIuICBBbHNv IHNlZSBIRUxQIFNFVCBQUklOVEVSLiIpKTsKKyNlbmRpZiAvKiBVTklYICovCisjZW5kaWYgLyog Vk1TICovCisjZW5kaWYgLyogTk9GUklMTFMgKi8KKworY2FzZSBYWFBXRDoKK2Nhc2UgWFhMUFdE OgorICAgIHJldHVybihobXNnKCJTeW50YXg6IFBXRFxuXAorUHJpbnQgdGhlIG5hbWUgb2YgdGhl IGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuIikpOworCisjaWZuZGVmIE5PU1BMCitjYXNlIFhY UkVBOgorICAgIHJldHVybihobXNnKCJTeW50YXg6IFJFQUQgdmFyaWFibGVuYW1lXG5cCisgIFJl YWRzIGEgbGluZSBmcm9tIHRoZSBjdXJyZW50bHkgb3BlbiBSRUFEIG9yICFSRUFEIGZpbGUgaW50 byB0aGUgdmFyaWFibGVcblwKKyAgKHNlZSBPUEVOKS4iKSk7CisjZW5kaWYgLyogTk9TUEwgKi8K KworI2lmbmRlZiBOT1hGRVIKK2Nhc2UgWFhSRUM6CisgICAgcmV0dXJuKGhtc2dhKGhteHhyYykp OworCitjYXNlIFhYUkVNOgorICAgIHkgPSBjbWtleShyZW1jbWQsbnJtdCwiUmVtb3RlIGNvbW1h bmQiLCIiLHh4c3RyaW5nKTsKKyAgICByZXR1cm4oZG9ocm10KHkpKTsKKyNlbmRpZiAvKiBOT1hG RVIgKi8KKworI2lmbmRlZiBOT1NQTAorY2FzZSBYWFJFVDoKKyAgICByZXR1cm4oaG1zZygiU3lu dGF4OiBSRVRVUk4gWyB2YWx1ZSBdXG5cCisgIFJldHVybiBmcm9tIGEgbWFjcm8uICBBbiBvcHRp b25hbCByZXR1cm4gdmFsdWUgY2FuIGJlIGdpdmVuIGZvciB1c2Ugd2l0aFxuXAorICBcXGZleGVj dXRlKG1hY3JvKSwgd2hpY2ggYWxsb3dzIG1hY3JvcyB0byBiZSB1c2VkIGxpa2UgZnVuY3Rpb25z LiIpKTsKKyNlbmRpZiAvKiBOT1NQTCAqLworCisjaWZuZGVmIE5PWEZFUgorY2FzZSBYWFNFTjoK KyAgICByZXR1cm4oaG1zZ2EoaG14eHNlbikpOworY2FzZSBYWE1PVkU6CisgICAgcmV0dXJuKGht c2coIk1PVkUgaXMgZXhhY3RseSBsaWtlIFNFTkQsIGV4Y2VwdCBlYWNoIGZpbGUgdGhhdCBpc1xu XAorc2VudCBzdWNjZXNzZnVsbHkgaXMgZGVsZXRlZCBhZnRlciBpdCBpcyBzZW50LiIpKTsKKyNp Zm5kZWYgTk9SRVNFTkQKK2Nhc2UgWFhSU0VOOgorICAgIHJldHVybihobXNnKGhteHhyc2VuKSk7 CitjYXNlIFhYUkVHRVQ6CisgICAgcmV0dXJuKGhtc2coaG14eHJnZXQpKTsKK2Nhc2UgWFhQU0VO OgorICAgIHJldHVybihobXNnKGhteHhwc2VuKSk7CisjZW5kaWYgLyogTk9SRVNFTkQgKi8KKwor I2lmbmRlZiBOT1NFUlZFUgorY2FzZSBYWFNFUjoKKyAgICByZXR1cm4oaG1zZyhobXh4c2VyKSk7 CisjZW5kaWYgLyogTk9TRVJWRVIgKi8KKyNlbmRpZiAvKiBOT1hGRVIgKi8KKworI2lmbmRlZiBO T0pDCitjYXNlIFhYU1VTOgorICAgIHJldHVybihobXNnKCJTeW50YXg6IFNVU1BFTkQgb3IgWlxu XAorICBTdXNwZW5kcyBLZXJtaXQuICBDb250aW51ZSBLZXJtaXQgd2l0aCB0aGUgYXBwcm9wcmlh dGUgc3lzdGVtIGNvbW1hbmQsXG5cCisgIHN1Y2ggYXMgZmcuIikpOworI2VuZGlmIC8qIE5PSkMg Ki8KKworY2FzZSBYWFNFVDoKKyAgICB5ID0gY21rZXkocHJtdGFiLG5wcm0sIlBhcmFtZXRlciIs IiIseHhzdHJpbmcpOworICAgIGRlYnVnKEYxMDEsIkhFTFAgU0VUIHkiLCIiLHkpOworICAgIHJl dHVybihkb2hzZXQoeSkpOworCisjaWZuZGVmIE5PUFVTSAorY2FzZSBYWFNIRToKKyAgICBpZiAo bm9wdXNoKSB7CisgICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOworICAg ICAgICBwcmludGYoIlNvcnJ5LCBoZWxwIG5vdCBhdmFpbGFibGUgZm9yIFwiJXNcIlxuIixjbWRi dWYpOworICAgICAgICBicmVhazsKKyAgICB9IGVsc2UKKyAgICAgICByZXR1cm4oaG1zZ2EoaHh4 c2hlKSk7CisjaWZkZWYgQ0tfUkVESVIKK2Nhc2UgWFhGVU46CisgICAgcmV0dXJuKGhtc2coIlN5 bnRheDogUkVESVJFQ1QgY29tbWFuZFxuXAorICBSdW5zIHRoZSBnaXZlbiBsb2NhbCBjb21tYW5k IHdpdGggaXRzIHN0YW5kYXJkIGlucHV0IGFuZCBvdXRwdXQgcmVkaXJlY3RlZFxuXAorICB0byB0 aGUgY3VycmVudCBTRVQgTElORSBvciBTRVQgSE9TVCBjb21tdW5pY2F0aW9ucyBwYXRoLlxuXAor ICBTeW5vbnltOiA8IChMZWZ0IGFuZ2xlIGJyYWNrZXQpLiIpKTsKKyNlbmRpZiAvKiBDS19SRURJ UiAqLworCisjaWZkZWYgQ0tfUkVYWAorY2FzZSBYWFJFWFg6CisgICAgcmV0dXJuKGhtc2coIlN5 bnRheDogUkVYWCB0ZXh0XG5cCisgIFRoZSB0ZXh0IGlzIGEgUmV4eCBjb21tYW5kIHRvIGJlIGV4 ZWN1dGVkLiBUaGUgXFx2KHJleHgpIHZhcmlhYmxlIGlzIHNldFxuXAorICB0byB0aGUgUmV4eCBj b21tYW5kJ3MgcmV0dXJuIHZhbHVlLlxuXAorICBUbyBleGVjdXRlIGEgcmV4eCBwcm9ncmFtIGZp bGUsIHVzZTogIFJFWFggY2FsbCA8ZmlsZW5hbWU+XG5cCisgIFJleHggcHJvZ3JhbXMgbWF5IGNh bGwgS2VybWl0IGZ1bmN0aW9ucyBieSBwbGFjaW5nIHRoZSBLZXJtaXQgY29tbWFuZFxuXAorICBp biBzaW5nbGUgcXVvdGVzLiAgRm9yIGluc3RhbmNlOiAgJ3NldCBwYXJpdHkgbm9uZScuIikpOwor I2VuZGlmIC8qIENLX1JFWFggKi8KKyNlbmRpZiAvKiBOT1BVU0ggKi8KKworI2lmbmRlZiBOT1NI T1cKK2Nhc2UgWFhTSE86CisgICAgcmV0dXJuKGhtc2coIlwKKyAgRGlzcGxheSBjdXJyZW50IHZh bHVlcyBvZiB2YXJpb3VzIGl0ZW1zIChTRVQgcGFyYW1ldGVycywgdmFyaWFibGVzLCBldGMpLlxu XAorICBUeXBlIFNIT1cgPyBmb3IgYSBsaXN0IG9mIGNhdGVnb3JpZXMuIikpOworI2VuZGlmIC8q IE5PU0hPVyAqLworCitjYXNlIFhYU1BBOgorI2lmZGVmIGRhdGFnZW5lcmFsCisgICAgcmV0dXJu KGhtc2coIlwKKyAgRGlzcGxheSBkaXNrIHVzYWdlIGluIGN1cnJlbnQgZGV2aWNlLCBkaXJlY3Rv cnksXG5cCisgIG9yIHJldHVybiBzcGFjZSBmb3IgYSBzcGVjaWZpZWQgZGV2aWNlLCBkaXJlY3Rv cnkuIikpOworI2Vsc2UKKyAgICByZXR1cm4oaG1zZygiU3ludGF4OiBTUEFDRVxuXAorICBEaXNw bGF5IGRpc2sgdXNhZ2UgaW4gY3VycmVudCBkZXZpY2UgYW5kL29yIGRpcmVjdG9yeSIpKTsKKyNl bmRpZgorCitjYXNlIFhYU1RBOgorICAgIHJldHVybihobXNnKCJTeW50YXg6IFNUQVRJU1RJQ1Mg Wy9CUklFRl1cblwKKyAgRGlzcGxheSBzdGF0aXN0aWNzIGFib3V0IG1vc3QgcmVjZW50IGZpbGUg dHJhbnNmZXIiKSk7CisKKyNpZm5kZWYgTk9TUEwKK2Nhc2UgWFhTVE86CisgICAgcmV0dXJuKGht c2coIlN5bnRheDogU1RPUCBbIG51bWJlciBbIG1lc3NhZ2UgXSBdXG5cCisgIFN0b3AgZXhlY3V0 aW5nIHRoZSBjdXJyZW50IG1hY3JvIG9yIFRBS0UgZmlsZSBhbmQgcmV0dXJuIGltbWVkaWF0ZWx5 IHRvXG5cCisgIHRoZSBLZXJtaXQgcHJvbXB0LiAgTnVtYmVyIGlzIGEgcmV0dXJuIGNvZGUuICBN ZXNzYWdlIHByaW50ZWQgaWYgZ2l2ZW4uIikpOworI2VuZGlmIC8qIE5PU1BMICovCisKK2Nhc2Ug WFhUQUs6CisgICAgcmV0dXJuKGhtc2dhKGhteHh0YWspKTsKKworI2lmZGVmIFRDUFNPQ0tFVAor I2lmZGVmIFROQ09ERQorY2FzZSBYWElLU0Q6CisgICAgcmV0dXJuKGhtc2dhKGhteHhpa3MpKTsK KworY2FzZSBYWFRFTDoKKyAgICByZXR1cm4oaG1zZ2EoaG14eHRlbCkpOworCitjYXNlIFhYVEVM T1A6CisgICAgcmV0dXJuKGhtc2dhKGh4dG9wdCkpOworI2VuZGlmIC8qIFROQ09ERSAqLworCisj aWZkZWYgUkxPR0NPREUKK2Nhc2UgWFhSTE9HOgorICAgIHJldHVybihobXNnKCJTeW50YXg6IFJM T0dJTiBbIHN3aXRjaGVzIF0gWyBob3N0IFsgdXNlcm5hbWUgXSBdXG5cCisgIEVxdWl2YWxlbnQg dG8gU0VUIE5FVFdPUksgVFlQRSBUQ1AvSVAsIFNFVCBIT1NUIGhvc3QgWyBzZXJ2aWNlIF0gL1JM T0dJTixcblwKKyAgSUYgU1VDQ0VTUyBDT05ORUNULiAgSWYgaG9zdCBpcyBvbWl0dGVkLCB0aGUg cHJldmlvdXMgY29ubmVjdGlvbiAoaWYgYW55KVxuXAorICBpcyByZXN1bWVkLiAgRGVwZW5kaW5n IG9uIGhvdyBLZXJtaXQgaGFzIGJlZW4gYnVpbHQgc3dpdGNoZXMgbWF5IGJlXG5cCisgIGF2YWls YWJsZSB0byByZXF1aXJlIEtlcmJlcm9zIGF1dGhlbnRpY2F0aW9uIGFuZCBERVMgZW5jcnlwdGlv bi4iKSk7CisjZW5kaWYgLyogUkxPR0NPREUgKi8KKyNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KKwor I2lmbmRlZiBOT1hNSVQKK2Nhc2UgWFhUUkE6CisgICAgcmV0dXJuKGhtc2dhKGh4eHhtaXQpKTsK KyNlbmRpZiAvKiBOT1hNSVQgKi8KKworI2lmbmRlZiBOT0ZSSUxMUworY2FzZSBYWFRZUDoKKyAg ICByZXR1cm4oaG1zZ2EoaG14eHR5cCkpOworY2FzZSBYWE1PUkU6CisgICAgcmV0dXJuKGhtc2co IlN5bnRheDogTU9SRSBbIHN3aXRjaGVzIF0gZmlsZW5hbWVcblwKKyAgRXF1aXZhbGVudCB0byBU WVBFIC9QQUdFIGZpbGVuYW1lOyBzZWUgSEVMUCBUWVBFLiIpKTsKK2Nhc2UgWFhDQVQ6CisgICAg cmV0dXJuKGhtc2coIlN5bnRheDogTU9SRSBbIHN3aXRjaGVzIF0gZmlsZW5hbWVcblwKKyAgRXF1 aXZhbGVudCB0byBUWVBFIC9OT1BBR0UgZmlsZW5hbWU7IHNlZSBIRUxQIFRZUEUuIikpOworY2Fz ZSBYWEhFQUQ6CisgICAgcmV0dXJuKGhtc2coIlN5bnRheDogSEVBRCBbIHN3aXRjaGVzIF0gZmls ZW5hbWVcblwKKyAgRXF1aXZhbGVudCB0byBUWVBFIC9IRUFEIGZpbGVuYW1lOyBzZWUgSEVMUCBU WVBFLiIpKTsKK2Nhc2UgWFhUQUlMOgorICAgIHJldHVybihobXNnKCJTeW50YXg6IFRBSUwgWyBz d2l0Y2hlcyBdIGZpbGVuYW1lXG5cCisgIEVxdWl2YWxlbnQgdG8gVFlQRSAvVEFJTCBmaWxlbmFt ZTsgc2VlIEhFTFAgVFlQRS4iKSk7CisjZW5kaWYgLyogTk9GUklMTFMgKi8KKworI2lmbmRlZiBO T1NQTAorY2FzZSBYWFdISToKKyAgICByZXR1cm4oaG1zZ2Eod2hpaGxwKSk7CisKK2Nhc2UgWFhT V0lUOgorICAgIHJldHVybihobXNnYShzd2lobHApKTsKKyNlbmRpZiAvKiBOT1NQTCAqLworCisj aWZuZGVmIE5PQ1NFVFMKK2Nhc2UgWFhYTEE6CisgICAgcmV0dXJuKGhtc2dhKGh4eHhsYSkpOwor I2VuZGlmIC8qIE5PQ1NFVFMgKi8KKworY2FzZSBYWFZFUjoKKyAgICByZXR1cm4oaG1zZygiU3lu dGF4OiBWRVJTSU9OXG5EaXNwbGF5cyB0aGUgcHJvZ3JhbSB2ZXJzaW9uIG51bWJlci4iKSk7CisK KyNpZm5kZWYgTk9TUEwKK2Nhc2UgWFhXQUk6CisgICAgcmV0dXJuKGhtc2dhKGh4eHdhaSkpOwor I2VuZGlmIC8qIE5PU1BMICovCisKKyNpZm5kZWYgTk9GUklMTFMKK2Nhc2UgWFhXSE86CisgICAg cmV0dXJuKGhtc2coIlN5bnRheDogV0hPIFsgdXNlciBdXG5EaXNwbGF5cyBpbmZvIGFib3V0IHRo ZSB1c2VyLiIpKTsKKworY2FzZSBYWFdSSToKKyAgICByZXR1cm4oaG1zZ2EoaHh4d3JpKSk7CisK K2Nhc2UgWFhXUkw6CisgICAgcmV0dXJuKGhtc2coCisiV1JJVEUtTElORSAoV1JJVEVMTikgaXMg anVzdCBsaWtlIFdSSVRFLCBidXQgaW5jbHVkZXMgYSBsaW5lIHRlcm1pbmF0b3JcblwKK2F0IHRo ZSBlbmQgb2YgdGV4dC4gIFNlZSBXUklURS4iKSk7CisjZW5kaWYgLyogTk9GUklMTFMgKi8KKwor I2lmbmRlZiBOT1NQTAorY2FzZSBYWElGWDoKKyAgICByZXR1cm4oaG1zZ2EoaWZ4aGxwKSk7CisK K2Nhc2UgWFhHRVRDOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBHRVRDICovCisgICAg cmV0dXJuKGhtc2dhKGh4eGdldGMpKTsKKworY2FzZSBYWEZXRDogICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIEZPUldBUkQgKi8KKyAgICByZXR1cm4oaG1zZygKKyJMaWtlIEdPVE8sIGJ1 dCBzZWFyY2hlcyBvbmx5IGZvcndhcmQgZm9yIHRoZSBsYWJlbC4gIFNlZSBHT1RPLiIpKTsKKwor Y2FzZSBYWExPQ0FMOiAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExPQ0FMICovCisgICAg cmV0dXJuKGhtc2coCisiRGVjbGFyZXMgYSB2YXJpYWJsZSB0byBiZSBsb2NhbCB0byB0aGUgY3Vy cmVudCBtYWNybyBvciBjb21tYW5kIGZpbGUuIikpOworI2VuZGlmIC8qIE5PU1BMICovCisKK2Nh c2UgWFhWSUVXOgorICAgIHJldHVybihobXNnKAorIlZpZXcgdGhlIHRlcm1pbmFsIGVtdWxhdGlv biBzY3JlZW4gZXZlbiB3aGVuIHRoZXJlIGlzIG5vIGNvbm5lY3Rpb24uIikpOworCisjaWZkZWYg TkVXRlRQCitjYXNlIFhYQVNDOgorICAgIHJldHVybihobXNnKAorIkluaGliaXRzIGF1dG9tYXRp YyB0cmFuc2Zlci1tb2RlIHN3aXRjaGluZyBhbmQgZm9yY2VzIFRFWFQgKEFTQ0lJKSB0cmFuc2Zl clxuXAorbW9kZSBmb3IgYWxsIGZpbGVzIGluIGJvdGggS2VybWl0IGFuZCBGVFAgcHJvdG9jb2xz LiIpKTsKK2Nhc2UgWFhCSU46CisgICAgcmV0dXJuKGhtc2coCisiSW5oaWJpdHMgYXV0b21hdGlj IHRyYW5zZmVyLW1vZGUgc3dpdGNoaW5nIGFuZCBmb3JjZXMgQklOQVJZIHRyYW5zZmVyIG1vZGVc blwKK2ZvciBhbGwgZmlsZXMgaW4gYm90aCBLZXJtaXQgYW5kIEZUUCBwcm90b2NvbHMuIikpOwor I2Vsc2UKK2Nhc2UgWFhBU0M6CisgICAgcmV0dXJuKGhtc2coCisiSW5oaWJpdHMgYXV0b21hdGlj IHRyYW5zZmVyLW1vZGUgc3dpdGNoaW5nIGFuZCBmb3JjZXMgVEVYVCAoQVNDSUkpIHRyYW5zZmVy XG5cCittb2RlIGZvciBhbGwgZmlsZXMuIikpOworY2FzZSBYWEJJTjoKKyAgICByZXR1cm4oaG1z ZygKKyJJbmhpYml0cyBhdXRvbWF0aWMgdHJhbnNmZXItbW9kZSBzd2l0Y2hpbmcgYW5kIGZvcmNl cyBCSU5BUlkgdHJhbnNmZXIgbW9kZVxuXAorZm9yIGFsbCBmaWxlcy4iKSk7CisjZW5kaWYJLyog TkVXRlRQICovCisKK2Nhc2UgWFhEQVRFOgorICAgIHJldHVybihobXNnYShobXh4ZGF0ZSkpOwor CitjYXNlIFhYUkVUUjoKKyAgICByZXR1cm4oaG1zZygKKyJKdXN0IGxpa2UgR0VUIGJ1dCBhc2tz IHRoZSBzZXJ2ZXIgdG8gZGVsZXRlIGVhY2ggZmlsZSB0aGF0IGhhcyBiZWVuXG5cCitzZW50IHN1 Y2Nlc3NmdWxseS4iKSk7CisKK2Nhc2UgWFhFSUdIVDoKKyAgICByZXR1cm4oaG1zZygKKyJFcXVp dmFsZW50IHRvIFNFVCBQQVJJVFkgTk9ORSwgU0VUIENPTU1BTkQgQllURSA4LCBTRVQgVEVSTUlO QUwgQllURSA4LiIpKTsKKworY2FzZSBYWFNBVkU6CisgICAgcmV0dXJuKGhtc2dhKGhteHhzYXZl KSk7CisKKyNpZm5kZWYgTk9GUklMTFMKKyNpZm5kZWYgTk9QVVNICitjYXNlIFhYRURJVDoKKyAg ICByZXR1cm4oaG1zZygiU3ludGF4OiBFRElUIFsgPGZpbGU+IF1cblwKK1N0YXJ0cyB5b3VyIHBy ZWZlcnJlZCBlZGl0b3Igb24gdGhlIGdpdmVuIGZpbGUsIG9yIGlmIG5vbmUgZ2l2ZW4sIHRoZSBt b3N0XG5cCityZWNlbnRseSBlZGl0ZWQgZmlsZSwgaWYgYW55LiAgQWxzbyBzZWUgU0VUIEVESVRP Ui4iKSk7CisjZW5kaWYgLyogTk9QVVNIICovCisjZW5kaWYgLyogTk9GUklMTFMgKi8KKworI2lm ZGVmIEJST1dTRVIKK2Nhc2UgWFhCUk9XUzoKKyAgICByZXR1cm4oaG1zZygiU3ludGF4OiBCUk9X U0UgWyA8dXJsPiBdXG5cCitTdGFydHMgeW91ciBwcmVmZXJyZWQgV2ViIGJyb3dzZXIgb24gdGhl IGdpdmVuIFVSTCwgb3IgaWYgbm9uZSBnaXZlbiwgdGhlXG5cCittb3N0IHJlY2VudGx5IHZpc2l0 ZWQgVVJMLCBpZiBhbnkuICBBbHNvIHNlZSBTRVQgQlJPV1NFUi4iKSk7CisjZW5kaWYgLyogQlJP V1NFUiAqLworCisjaWZkZWYgQ0tfVEFQSQorY2FzZSBYWFRBUEk6CisgICAgcmV0dXJuKGhtc2dh KGh4eHRhcGkpKTsKKyNlbmRpZiAvKiBDS19UQVBJICovCisKKyNpZmRlZiBQSVBFU0VORAorY2Fz ZSBYWENTRU46CisgICAgcmV0dXJuKGhtc2coIlN5bnRheDogQ1NFTkQgWyBzd2l0Y2hlcyBdIDxj b21tYW5kPiBbIDxhcy1uYW1lPiBdXG5cCitTZW5kcyBmcm9tIHRoZSBnaXZlbiA8Y29tbWFuZD4g cmF0aGVyIHRoYW4gZnJvbSBhIGZpbGUuICBFcXVpdmFsZW50IHRvXG5cCitTRU5EIC9DT01NQU5E OyBzZWUgSEVMUCBTRU5EIGZvciBkZXRhaWxzLiIpKTsKKworY2FzZSBYWENSRUM6CisgICAgcmV0 dXJuKGhtc2coIlN5bnRheDogQ1JFQ0VJVkUgWyBzd2l0Y2hlcyBdIDxjb21tYW5kPlxuXAorUmVj ZWl2ZXMgdG8gdGhlIGdpdmVuIDxjb21tYW5kPiByYXRoZXIgdGhhbiB0byBhIGZpbGUuICBFcXVp dmFsZW50IHRvXG5cCitSRUNFSVZFIC9DT01NQU5EOyBzZWUgSEVMUCBSRUNFSVZFIGZvciBkZXRh aWxzLiIpKTsKKworY2FzZSBYWENHRVQ6CisgICAgcmV0dXJuKGhtc2coIlN5bnRheDogQ0dFVCA8 cmVtb3RlLWZpbGUtb3ItY29tbWFuZD4gPGxvY2FsLWNvbW1hbmQ+XG5cCitFcXVpdmFsZW50IHRv IEdFVCAvQ09NTUFORDsgc2VlIEhFTFAgR0VUIGZvciBkZXRhaWxzLiIpKTsKKyNlbmRpZiAvKiBQ SVBFU0VORCAqLworCisjaWZuZGVmIE5PU1BMCitjYXNlIFhYRlVOQzoKKy8qCisgIFRyaWNreSBw YXJzaW5nLiAgV2Ugd2FudCB0byBsZXQgdGhlbSB0eXBlIHRoZSBmdW5jdGlvbiBuYW1lIGluIGFu eSBmb3JtYXQKKyAgYXQgYWxsOiBcZmJsYWgoKSwgXGZibGFoLCBcXGZibGFoKCksIGZibGFoLCBi bGFoLCBibGFoKCksIGV0YywgYnV0IG9mIGNvdXJzZQorICBvbmx5IG9uZSBvZiB0aGVzZSBpcyBy ZWNvZ25pemVkIGJ5IGNta2V5KCkuICBTbyB3ZSBjYWxsIGNta2V5eCgpICh0aGUgIm5vCisgIGNv bXBsYWludHMiIHZlcnNpb24gb2YgY21rZXkoKSksIGFuZCBpZiBpdCBmYWlscywgd2UgdHJ5IHRo ZSBvdGhlciBmb3JtYXRzCisgIHNpbGVudGx5LCBhbmQgc3RpbGwgYWxsb3cgZm9yIDxuby1uYW1l LWdpdmVuPiwgZWRpdGluZyBhbmQgcmVwYXJzZSwgZXRjLgorKi8KKyAgICB5ID0gY21rZXl4KGZu Y3RhYixuZnVuY3MsIk5hbWUgb2YgZnVuY3Rpb24iLCIiLE5VTEwpOworICAgIGlmICh5ID09IC0x KSB7ICAgICAgICAgICAgICAgICAgICAgIC8qIFJlcGFyc2UgbmVlZGVkICovCisgICAgICAgIHJl dHVybih5KTsKKyAgICB9IGVsc2UgaWYgKHkgPT0gLTMpIHsKKyAgICAgICAgaWYgKCh4ID0gY21j Zm0oKSkgPCAwKSAgICAgICAgICAvKiBGb3IgcmVjYWxsIGJ1ZmZlci4uLiAqLworICAgICAgICAg IHJldHVybih4KTsKKyAgICAgICAgcmV0dXJuKGRvaGZ1bmMoeSkpOyAgICAgICAgICAgICAvKiAt MyBnaXZlcyBnZW5lcmFsIG1lc3NhZ2UgKi8KKyAgICB9CisgICAgaWYgKHkgPCAwKSB7ICAgICAg ICAgICAgICAgICAgICAgICAgLyogU29tZXRoaW5nIGdpdmVuIGJ1dCBkaWRuJ3QgbWF0Y2ggKi8K KyAgICAgICAgaW50IGR1bW15OworICAgICAgICBjaGFyICogcDsKKyAgICAgICAgZm9yIChwID0g YXRtYnVmOyAqcDsgcCsrKSB7ICAgICAvKiBDaG9wIG9mZiB0cmFpbGluZyBwYXJlbnMgaWYgYW55 ICovCisgICAgICAgICAgICBpZiAoKnAgPT0gJygnKSB7CisgICAgICAgICAgICAgICAgKnAgPSBO VUw7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg ICAgICAgLyogQ2hvcCBvZmYgbGVhZGluZyAiXFxmIiBvciAiXGYiIG9yICJmIiAqLworICAgICAg ICBwID0gYXRtYnVmOworICAgICAgICBpZiAoKnAgPT0gQ01EUSkgICAgICAgICAgICAgICAgIC8q IEFsbG93IGZvciBcXGYuLi4gKi8KKyAgICAgICAgICBwKys7CisgICAgICAgIGlmICgqcCA9PSBD TURRICYmICgqKHArMSkgPT0gJ2YnIHx8ICoocCsxKSA9PSAnRicpKSB7IC8qIG9yIFxmICovCisg ICAgICAgICAgICBwICs9IDI7CisgICAgICAgIH0gZWxzZSBpZiAoKnAgPT0gJ2YnIHx8ICpwID09 ICdGJykgeyAvKiBvciBqdXN0IGYgKi8KKyAgICAgICAgICAgIHArKzsKKyAgICAgICAgfQorICAg ICAgICB5ID0gbG9va3VwKGZuY3RhYixwLG5mdW5jcywmZHVtbXkpOyAvKiBMb29rIHVwIHRoZSBy ZXN1bHQgKi8KKyAgICB9CisgICAgaWYgKHkgPCAwKSB7CisgICAgICAgIHByaW50ZigiP05vIHN1 Y2ggZnVuY3Rpb24gLSBcIiVzXCJcbiIsYXRtYnVmKTsKKyAgICAgICAgcmV0dXJuKC05KTsKKyAg ICB9CisgICAgeCA9IGNtZ2JyaygpOyAgICAgICAgICAgICAgICAgICAgICAgLyogRmluZCBvdXQg aG93IHVzZXIgdGVybWluYXRlZCAqLworICAgIGlmICh4ID09IExGIHx8IHggPT0gQ1IpICAgICAg ICAgICAgIC8qIGlmIHdpdGggQ1Igb3IgTEYgKi8KKyAgICAgIGNtZmxncyA9IDE7ICAgICAgICAg ICAgICAgICAgICAgICAvKiByZXN0b3JlIGNtZmxncyB0byBzYXkgc28gKi8KKyAgICBpZiAoKHgg PSBjbWNmbSgpKSA8IDApICAgICAgICAgICAgICAvKiBBbmQgVEhFTiBjb25maXJtIHNvIGNvbW1h bmQgd2lsbCAqLworICAgICAgcmV0dXJuKHgpOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGdl dCBpbnRvIHJlY2FsbCBidWZmZXIuICovCisgICAgcmV0dXJuKGRvaGZ1bmMoeSkpOworI2VuZGlm IC8qIE5PU1BMICovCisKKyNpZm5kZWYgTk9DTURMCitjYXNlIFhYT1BUUzogICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogQ29tbWFuZC1saW5lIG9wdGlvbnMgKi8KKyAgICByZXR1cm4oZG9o b3B0cygpKTsKKworY2FzZSBYWFhPUFRTOiAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEV4 dGVuZGVkIGNvbW1hbmQtbGluZSBvcHRpb25zICovCisgICAgcmV0dXJuKGRveG9wdHMoKSk7Cisj ZW5kaWYgLyogTk9DTURMICovCisKKyNpZmRlZiBPUzIKKyNpZm5kZWYgTk9LVkVSQlMKK2Nhc2Ug WFhLVlJCOiB7CisgICAgeSA9IGNta2V5eChrdmVyYnMsbmt2ZXJicywiTmFtZSBvZiBrZXlib2Fy ZCB2ZXJiIHdpdGhvdXQgXFxrIiwiIixOVUxMKTsKKyAgICBpZiAoeSA9PSAtMSkgeyAgICAgICAg ICAgICAgICAgICAgICAvKiBSZXBhcnNlIG5lZWRlZCAqLworICAgICAgICByZXR1cm4oeSk7Cisg ICAgfSBlbHNlIGlmICh5ID09IC0zKSB7CisgICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkg ICAgICAgICAgLyogRm9yIHJlY2FsbCBidWZmZXIuLi4gKi8KKyAgICAgICAgICByZXR1cm4oeCk7 CisgICAgICAgIHJldHVybihkb2hrdmVyYih5KSk7ICAgICAgICAgICAgLyogLTMgZ2l2ZXMgZ2Vu ZXJhbCBtZXNzYWdlICovCisgICAgfQorICAgIGlmICh5IDwgMCkgeyAgICAgICAgICAgICAgICAg ICAgICAgIC8qIFNvbWV0aGluZyBnaXZlbiBidXQgZGlkbid0IG1hdGNoICovCisgICAgICAgIGlu dCBkdW1teTsKKyAgICAgICAgY2hhciAqIHA7CisgICAgICAgIGZvciAocCA9IGF0bWJ1ZjsgKnA7 IHArKykgeyAgICAgLyogQ2hvcCBvZmYgdHJhaWxpbmcgcGFyZW5zIGlmIGFueSAqLworICAgICAg ICAgICAgaWYgKCpwID09ICcoJykgeworICAgICAgICAgICAgICAgICpwID0gTlVMOworICAgICAg ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8qIENo b3Agb2ZmIGxlYWRpbmcgIlxcayIgb3IgIlxrIiBvciAiayIgKi8KKyAgICAgICAgcCA9IGF0bWJ1 ZjsKKyAgICAgICAgaWYgKCpwID09IENNRFEpICAgICAgICAgICAgICAgICAvKiBBbGxvdyBmb3Ig XFxrLi4uICovCisgICAgICAgICAgcCsrOworICAgICAgICBpZiAoKnAgPT0gQ01EUSAmJiAoKihw KzEpID09ICdrJyB8fCAqKHArMSkgPT0gJ0snKSkgeyAvKiBvciBcayAqLworICAgICAgICAgICAg cCArPSAyOworICAgICAgICB9IGVsc2UgaWYgKCpwID09ICdrJyB8fCAqcCA9PSAnSycpIHsgLyog b3IganVzdCBrICovCisgICAgICAgICAgICBwKys7CisgICAgICAgIH0KKyAgICAgICAgeSA9IGxv b2t1cChrdmVyYnMscCxua3ZlcmJzLCZkdW1teSk7IC8qIExvb2sgdXAgdGhlIHJlc3VsdCAqLwor ICAgIH0KKyAgICBpZiAoeSA8IDApIHsKKyAgICAgICAgcHJpbnRmKCI/Tm8gc3VjaCBmdW5jdGlv biAtIFwiJXNcIlxuIixhdG1idWYpOworICAgICAgICByZXR1cm4oLTkpOworICAgIH0KKyAgICB4 ID0gY21nYnJrKCk7ICAgICAgICAgICAgICAgICAgICAgICAvKiBGaW5kIG91dCBob3cgdXNlciB0 ZXJtaW5hdGVkICovCisgICAgaWYgKHggPT0gTEYgfHwgeCA9PSBDUikgICAgICAgICAgICAgLyog aWYgd2l0aCBDUiBvciBMRiAqLworICAgICAgY21mbGdzID0gMTsgICAgICAgICAgICAgICAgICAg ICAgIC8qIHJlc3RvcmUgY21mbGdzIHRvIHNheSBzbyAqLworICAgIGlmICgoeCA9IGNtY2ZtKCkp IDwgMCkgICAgICAgICAgICAgIC8qIEFuZCBUSEVOIGNvbmZpcm0gc28gY29tbWFuZCB3aWxsICov CisgICAgICByZXR1cm4oeCk7ICAgICAgICAgICAgICAgICAgICAgICAgLyogZ2V0IGludG8gcmVj YWxsIGJ1ZmZlci4gKi8KKyAgICByZXR1cm4oZG9oa3ZlcmIoeSkpOworfQorI2VuZGlmIC8qIE5P S1ZFUkJTICovCisjZW5kaWYgLyogT1MyICovCisKK2Nhc2UgWFhLRVJNSToKKyAgICByZXR1cm4o aG1zZygiU3ludGF4OiBLRVJNSVQgW2NvbW1hbmQtbGluZS1vcHRpb25zXVxuXAorICBMZXRzIHlv dSBnaXZlIGNvbW1hbmQtbGluZSBvcHRpb25zIGF0IHRoZSBwcm9tcHQgb3IgaW4gYSBzY3JpcHQu XG5cCisgIEhFTFAgT1BUSU9OUyBmb3IgbW9yZSBpbmZvLiIpKTsKKworY2FzZSBYWEJBQ0s6Cisg ICAgcmV0dXJuKGhtc2coIlN5bnRheDogQkFDS1xuICBSZXR1cm5zIHRvIHlvdXIgcHJldmlvdXMg ZGlyZWN0b3J5LiIpKTsKKworY2FzZSBYWFdIRVJFOgorICAgIHJldHVybihobXNnKCJTeW50YXg6 IFdIRVJFXG4gIFRlbGxzIHdoZXJlIHlvdXIgdHJhbnNmZXJyZWQgZmlsZXMgd2VudC4iKSk7CisK KyNpZm5kZWYgTk9YRkVSCitjYXNlIFhYUkVNVjoKKyAgICByZXR1cm4oaG1zZ2EoaG14eHJlbXYp KTsKKyNlbmRpZiAvKiBOT1hGRVIgKi8KKworI2lmZGVmIENLX0tFUkJFUk9TCitjYXNlIFhYQVVU SDoKKyAgICByZXR1cm4oaG1zZ2EoaG14eGF1dGgpKTsKKyNlbmRpZiAvKiBDS19LRVJCRVJPUyAq LworCisjaWZuZGVmIE5PSFRUUAorY2FzZSBYWEhUVFA6CisgICAgcmV0dXJuKGhtc2dhKGhteHho dHRwKSk7CisjZW5kaWYgLyogTk9IVFRQICovCisKKyNpZmRlZiBORVRDTUQKK2Nhc2UgWFhQSVBF OgorICAgIHJldHVybihobXNnKCJTeW50YXg6IFBJUEUgWyBjb21tYW5kIF1cblwKK01ha2VzIGEg Y29ubmVjdGlvbiB0aHJvdWdoIHRoZSBwcm9ncmFtIHdob3NlIGNvbW1hbmQgbGluZSBpcyBnaXZl bi4gRXhhbXBsZTpcblwKK1xuIHBpcGUgcmxvZ2luIHh5emNvcnAuY29tIikpOworI2VuZGlmIC8q IE5FVENNRCAqLworCitjYXNlIFhYU1RBVFVTOgorICAgIHJldHVybihobXNnKAorIlNUQVRVUyBp cyB0aGUgc2FtZSBhcyBTSE9XIFNUQVRVUzsgcHJpbnRzIFNVQ0NFU1Mgb3IgRkFJTFVSRSBmb3Ig dGhlXG5cCitwcmV2aW91cyBjb21tYW5kLiIpKTsKKworI2lmbmRlZiBOT1NQTAorY2FzZSBYWEFT U0VSOgorICAgIHJldHVybihobXNnKCJTeW50YXg6IEFTU0VSVCA8Y29uZGl0aW9uPlxuXAorU3Vj Y2VlZHMgb3IgZmFpbHMgZGVwZW5kaW5nIG9uIDxjb25kaXRpb24+OyBzZWUgSEVMUCBJRiBmb3Ig PGNvbmRpdGlvbj5zLiIpKTsKKworY2FzZSBYWEZBSUw6CisgICAgcmV0dXJuKGhtc2coIkFsd2F5 cyBmYWlscy4iKSk7CisKK2Nhc2UgWFhTVUNDOgorICAgIHJldHVybihobXNnKCJBbHdheXMgc3Vj Y2VlZHMuIikpOworI2VuZGlmIC8qIE5PU1BMICovCisKKyNpZmRlZiBDS19MT0dJTgorY2FzZSBY WExPR09VVDoKKyAgICByZXR1cm4oaG1zZygKKyJJZiB5b3UgaGF2ZWQgbG9nZ2VkIGluIHRvIEtl cm1pdCBhcyBhbiBJbnRlcm5ldCBLZXJtaXQgc2VydmVyLCB0aGUgTE9HT1VUXG5cCitjb21tYW5k LCBnaXZlbiBhdCB0aGUgcHJvbXB0LCBsb2dzIHlvdSBvdXQgYW5kIGNsb3NlcyB5b3VyIHNlc3Np b24uIikpOworI2VuZGlmIC8qIENLX0xPR0lOICovCisKK2Nhc2UgWFhSRVNFVDoKKyAgICByZXR1 cm4oaG1zZygiQ2xvc2VzIGFsbCBvcGVuIGZpbGVzIGFuZCBsb2dzLiIpKTsKKworI2lmbmRlZiBO T0NTRVRTCitjYXNlIFhYQVNTT0M6CisgICAgcmV0dXJuKGhtc2dhKGhteHhhc3NvYykpOworI2Vu ZGlmIC8qIE5PQ1NFVFMgKi8KKworI2lmbmRlZiBOT1NQTAorY2FzZSBYWFNISUZUOgorICAgIHJl dHVybihobXNnKCJTeW50YXg6IFNISUZUIFsgbiBdXG5cCisgIFNoaWZ0cyBcXCUxLi45IHZhcmlh YmxlcyBuIHBsYWNlcyB0byB0aGUgbGVmdDsgZGVmYXVsdCBuID0gMS4iKSk7CisjZW5kaWYgLyog Tk9TUEwgKi8KKworI2lmbmRlZiBOT1BVU0gKK2Nhc2UgWFhNQU46CisjaWZkZWYgVU5JWAorICAg IHJldHVybihobXNnKCJTeW50YXg6IE1BTlVBTCBbIHRvcGljIF1cblwKKyAgUnVucyB0aGUgXCJt YW5cIiBjb21tYW5kIG9uIHRoZSBnaXZlbiB0b3BpYyAoZGVmYXVsdCBcImtlcm1pdFwiKS4iKSk7 CisjZWxzZQorI2lmZGVmIE9TMgorICAgIHJldHVybihobXNnKCJTeW50YXg6IE1BTlVBTFxuXAor ICBBY2Nlc3NlcyB0aGUgS2VybWl0IDk1IEhUTUwgbWFudWFsIHVzaW5nIHRoZSBjdXJyZW50IGJy b3dzZXIuIikpOworI2Vsc2UKKyAgICByZXR1cm4oaG1zZygiU3ludGF4OiBNQU5VQUwgWyB0b3Bp YyBdXG5cCisgIFJ1bnMgdGhlIFwiaGVscFwiIGNvbW1hbmQgb24gdGhlIGdpdmVuIHRvcGljIChk ZWZhdWx0IFwia2VybWl0XCIpLiIpKTsKKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBVTklY ICovCisjZW5kaWYgLyogTk9QVVNIICovCisKK2Nhc2UgWFhXSUxEOgorICAgIHJldHVybihobXNn YShobXh4d2lsZCkpOworCisjaWZkZWYgTE9DVVMKK2Nhc2UgWFhMT0NVOgorICAgIHJldHVybiho bXNnYShobXh5bG9jdXMpKTsKKyNlbmRpZgkvKiBMT0NVUyAqLworCitjYXNlIFhYUEFUOgorICAg IHJldHVybihobXNnYShobXh4cGF0KSk7CisKKyNpZm5kZWYgTk9YRkVSCitjYXNlIFhYRkFTVDoK K2Nhc2UgWFhDQVU6CitjYXNlIFhYUk9COgorICAgIHJldHVybihobXNnYShobXh4ZmFzdCkpOwor I2VuZGlmIC8qIE5PWEZFUiAqLworCisjaWZkZWYgQ0tQVVJHRQorY2FzZSBYWFBVUkdFOgorICAg IHJldHVybihobXNnYShobXh4cHVyZ2UpKTsKKyNlbHNlCisjaWZkZWYgVk1TCitjYXNlIFhYUFVS R0U6CisgICAgcmV0dXJuKGhtc2dhKGhteHhwdXJnZSkpOworI2VuZGlmIC8qIFZNUyAqLworI2Vu ZGlmIC8qIENLUFVSR0UgKi8KKworI2lmbmRlZiBOT1hGRVIKKyAgY2FzZSBYWFJBU0c6CisgICAg cmV0dXJuKGhtc2coIiAgUkFTRyBhbmQgUkFTU0lHTiBhcmUgc2hvcnQgZm9ybXMgb2YgUkVNT1RF IEFTU0lHTi4iKSk7CisgIGNhc2UgWFhSQ1dEOgorICAgIHJldHVybihobXNnKCIgIFJDRCBhbmQg UkNXRCBhcmUgc2hvcnQgZm9ybXMgb2YgUkVNT1RFIENELiIpKTsKKyAgY2FzZSBYWFJDUFk6Cisg ICAgcmV0dXJuKGhtc2coIiAgUkNPUFkgaXMgYSBzaG9ydCBmb3JtIG9mIFJFTU9URSBDT1BZLiIp KTsKKyAgY2FzZSBYWFJERUw6CisgICAgcmV0dXJuKGhtc2coIiAgUkRFTEVURSBpcyBhIHNob3J0 IGZvcm0gb2YgUkVNT1RFIFJFTEVURS4iKSk7CisgIGNhc2UgWFhSRElSOgorICAgIHJldHVybiho bXNnKCIgIFJESVJFQ1RPUlkgaXMgYSBzaG9ydCBmb3JtIG9mIFJFTU9URSBESVJFQ1RPUlkuIikp OworICBjYXNlIFhYUlhJVDoKKyAgICByZXR1cm4oaG1zZygiICBSRVhJVCBpcyBhIHNob3J0IGZv cm0gb2YgUkVNT1RFIEVYSVQuIikpOworICBjYXNlIFhYUkhMUDoKKyAgICByZXR1cm4oaG1zZygi ICBSSEVMUCBpcyBhIHNob3J0IGZvcm0gb2YgUkVNT1RFIEhFTFAuIikpOworICBjYXNlIFhYUkhP UzoKKyAgICByZXR1cm4oaG1zZygiICBSSE9TVCBpcyBhIHNob3J0IGZvcm0gb2YgUkVNT1RFIEhP U1QuIikpOworICBjYXNlIFhYUktFUjoKKyAgICByZXR1cm4oaG1zZygiICBSS0VSTUlUIGlzIGEg c2hvcnQgZm9ybSBvZiBSRU1PVEUgS0VSTUlULiIpKTsKKyAgY2FzZSBYWFJNS0Q6CisgICAgcmV0 dXJuKGhtc2coIiAgUk1LRElSIGlzIGEgc2hvcnQgZm9ybSBvZiBSRU1PVEUgTUtESVIuIikpOwor ICBjYXNlIFhYUk1TRzoKKyAgICByZXR1cm4oaG1zZygiICBSTUVTU0FHRSBhbmQgUk1TRyBhcmUg c2hvcnQgZm9ybXMgb2YgUkVNT1RFIE1FU1NBR0UuIikpOworICBjYXNlIFhYUlBSSToKKyAgICBy ZXR1cm4oaG1zZygiICBSUFJJTlQgaXMgYSBzaG9ydCBmb3JtIG9mIFJFTU9URSBQUklOVC4iKSk7 CisgIGNhc2UgWFhSUFdEOgorICAgIHJldHVybihobXNnKCIgIFJQV0QgaXMgYSBzaG9ydCBmb3Jt IG9mIFJFTU9URSBQV0QuIikpOworICBjYXNlIFhYUlFVRToKKyAgICByZXR1cm4oaG1zZygiICBR VUVSWSBhbmQgUlFVRVJZIGFyZSBzaG9ydCBmb3JtcyBvZiBSRU1PVEUgUVVFUlkuIikpOworICBj YXNlIFhYUlJFTjoKKyAgICByZXR1cm4oaG1zZygiICBSUkVOQU1FIGlzIGEgc2hvcnQgZm9ybSBv ZiBSRU1PVEUgUkVOQU1FLiIpKTsKKyAgY2FzZSBYWFJSTUQ6CisgICAgcmV0dXJuKGhtc2coIiAg UlJNRElSIGlzIGEgc2hvcnQgZm9ybSBvZiBSRU1PVEUgUk1ESVIuIikpOworICBjYXNlIFhYUlNF VDoKKyAgICByZXR1cm4oaG1zZygiICBSU0VUIGlzIGEgc2hvcnQgZm9ybSBvZiBSRU1PVEUgU0VU LiIpKTsKKyAgY2FzZSBYWFJTUEE6CisgICAgcmV0dXJuKGhtc2coIiAgUlNQQUNFIGlzIGEgc2hv cnQgZm9ybSBvZiBSRU1PVEUgU1BBQ0UuIikpOworICBjYXNlIFhYUlRZUDoKKyAgICByZXR1cm4o aG1zZygiICBSVFlQRSBpcyBhIHNob3J0IGZvcm0gb2YgUkVNT1RFIFRZUEUuIikpOworICBjYXNl IFhYUldITzoKKyAgICByZXR1cm4oaG1zZygiICBSV0hPIGlzIGEgc2hvcnQgZm9ybSBvZiBSRU1P VEUgV0hPLiIpKTsKKyNlbmRpZiAvKiBOT1hGRVIgKi8KKworICBjYXNlIFhYU0NSTjoKKyAgICBy ZXR1cm4oaG1zZ2EoaG14eHNjcm4pKTsKKworI2lmZGVmIENLRVhFQworICBjYXNlIFhYRVhFQzoK KyAgICByZXR1cm4oaG1zZygiU3ludGF4OiBFWEVDIDxjb21tYW5kPiBbIDxhcmcxPiBbIDxhcmcy PiBbIC4uLiBdIF1cblwKKyAgQy1LZXJtaXQgb3ZlcmxheXMgaXRzZWxmIHdpdGggdGhlIGdpdmVu IHN5c3RlbSBjb21tYW5kIGFuZCBzdGFydHMgaXQgd2l0aFxuXAorICB0aGUgZ2l2ZW4gYXJndW1l bnRzLiAgVXBvbiBhbnkgZXJyb3IsIGNvbnRyb2wgcmV0dXJucyB0byBDLUtlcm1pdC4iKSk7Cisj ZW5kaWYgLyogQ0tFWEVDICovCisKKyNpZm5kZWYgTk9TUEwKKyAgY2FzZSBYWFRSQUNFOgorICAg IHJldHVybihobXNnKAorIlN5bnRheDogVFJBQ0UgeyAvT04sIC9PRkYgfSB7IEFTU0lHTk1FTlRT LCBDT01NQU5ELUxFVkVMLCBBTEwgfVxuXAorICBUdXJucyB0cmFjaW5nIG9mIHRoZSBnaXZlbiBv YmplY3Qgb24gb3Igb2ZmLiIpKTsKKyNlbmRpZiAvKiBOT1NQTCAqLworCisjaWZkZWYgQ0tfUEVS TVMKKyNpZmRlZiBVTklYCisgIGNhc2UgWFhDSE1PRDoKKyAgICByZXR1cm4oaG1zZ2EoaG14eGNo bW9kKSk7CisjZW5kaWYgLyogVU5JWCAqLworI2VuZGlmIC8qIENLX1BFUk1TICovCisKKyNpZmRl ZiBDS1JPT1QKKyAgY2FzZSBYWENIUlQ6CisgICAgcmV0dXJuKGhtc2dhKGhteHhjaHJvb3QpKTsK KyNlbmRpZiAvKiBDS1JPT1QgKi8KKworI2lmbmRlZiBOT1NQTAorICBjYXNlIFhYUFJPTVA6Cisg ICAgcmV0dXJuKGhtc2dhKGhteHhwcm9tcHQpKTsKKyNlbmRpZiAvKiBOT1NQTCAqLworCisgIGNh c2UgWFhHUkVQOgorICAgIHJldHVybihobXNnYShobXh4Z3JlcCkpOworCisjaWZuZGVmIE5PU0VY UAorI2lmbmRlZiBOT1NQTAorICBjYXNlIFhYU0VYUDoKKyAgICByZXR1cm4oaG1zZ2EoaG14eHNl eHApKTsKKyNlbmRpZiAvKiBOT1NQTCAqLworI2VuZGlmIC8qIE5PU0VYUCAqLworCisjaWZkZWYg Q0tMRUFSTgorICBjYXNlIFhYTEVBUk46CisgICAgcmV0dXJuKGhtc2dhKGhteHhsZWFybikpOwor I2VuZGlmIC8qIENLTEVBUk4gKi8KKworI2lmZGVmIEFOWVNTSAorICBjYXNlIFhYU1NIOgorICAg IHJldHVybihobXNnYShobXh4c3NoKSk7CisjZW5kaWYgLyogQU5ZU1NIICovCisKKyNpZmRlZiBU Q1BTT0NLRVQKKyAgY2FzZSBYWEZJUkVXOgorICAgIHJldHVybihobXNnYShobXh4ZmlyZXcpKTsK KyNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KKworI2lmZGVmIE5FV0ZUUAorICBjYXNlIFhYVVNFUjoK KyAgICByZXR1cm4oaG1zZygiIEVxdWl2YWxlbnQgdG8gRlRQIFVTRVIuIikpOworICBjYXNlIFhY QUNDVDoKKyAgICByZXR1cm4oaG1zZygiIEVxdWl2YWxlbnQgdG8gRlRQIEFDQ09VTlQuIikpOwor I2VuZGlmIC8qIE5FV0ZUUCAqLworCisgIGNhc2UgWFhPUklFOgorICAgIHJldHVybihobXNnKCIg U2hvd3MgdGhlIGRpcmVjdG9yaWVzIGltcG9ydGFudCB0byBLZXJtaXQuIikpOworCisgIGNhc2Ug WFhDT05UOgorICAgIHJldHVybihobXNnKCIgSW4gYSBGT1Igb3IgV0hJTEUgbG9vcDogY29udGlu dWUgdGhlIGxvb3AuXG5cCisgQXQgdGhlIHByb21wdDogY29udGludWUgYSBzY3JpcHQgdGhhdCBo YXMgXCJzaGVsbGVkIG91dFwiIHRvIHRoZSBwcm9tcHQuIikpOworCisgIGNhc2UgWFhSRURPOgor ICAgIHJldHVybihobXNnKCIgU3ludGF4OiBSRURPIHh4eCAob3IpIF54eHhcblwKKyBSZS1leGVj dXRlcyB0aGUgbW9zdCByZWNlbnQgY29tbWFuZCBzdGFydGluZyB3aXRoIHh4eC4iKSk7CisKKyNp ZmRlZiBVTklYCisjaWZuZGVmIE5PUFVURU5WCisgIGNhc2UgWFhQVVRFOgorICAgIHJldHVybiho bXNnYShobXh4cHV0ZW52KSk7CisjZW5kaWYJLyogTk9QVVRFTlYgKi8KKyNlbmRpZgkvKiBVTklY ICovCisKKyAgY2FzZSBYWE5PVEFWOgorICAgIHJldHVybihobXNnKCIgVGhpcyBjb21tYW5kIGlz IG5vdCBjb25maWd1cmVkIGluIHRoaXMgdmVyc2lvbiBvZiBLZXJtaXQuIikpOworCitkZWZhdWx0 OiB7CisgICAgICAgIGNoYXIgKnM7CisgICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0 dXJuKHgpOworICAgICAgICBzID0gY21kYnVmICsgKGludClzdHJsZW4oY21kYnVmKSAtMTsKKyAg ICAgICAgd2hpbGUgKHMgPj0gY21kYnVmICYmICpzID09IFNQKQorICAgICAgICAgICpzLS0gPSBO VUw7CisgICAgICAgIHdoaWxlIChzID49IGNtZGJ1ZiAmJiAqcyAhPSBTUCkKKyAgICAgICAgICBz LS07CisgICAgICAgIHdoaWxlICgqcyA9PSBTUCkgcysrOworICAgICAgICBwcmludGYoIlNvcnJ5 LCBoZWxwIG5vdCBhdmFpbGFibGUgZm9yIFwiJXNcIlxuIixzKTsKKyAgICAgICAgYnJlYWs7Cisg ICAgICB9CisgICAgfSAvKiBzd2l0Y2ggKi8KKyNlbmRpZiAvKiBOT0hFTFAgKi8KKworICAgIHJl dHVybihzdWNjZXNzID0gMCk7Cit9CisKKy8qICBIIE0gUyBHICAtLSAgR2V0IGNvbmZpcm1hdGlv biwgdGhlbiBwcmludCB0aGUgZ2l2ZW4gbWVzc2FnZSAgKi8KKworaW50CitobXNnKHMpIGNoYXIg KnM7IHsKKyAgICBpbnQgeDsKKyAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsK KyAgICBwcmludGYoIlxuJXNcblxuIixzKTsKKyAgICByZXR1cm4oMCk7Cit9CisKKyNpZmRlZiBO T0hFTFAKKworaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFByaW50 IGFuIGFycmF5IG9mIGxpbmVzLCAqLworaG1zZ2EocykgY2hhciAqc1tdOyB7ICAgICAgICAgICAg ICAgICAgIC8qIGNoZWFwIHZlcnNpb24uICovCisgICAgaW50IGk7CisgICAgaWYgKChpID0gY21j Zm0oKSkgPCAwKSByZXR1cm4oaSk7CisgICAgcHJpbnRmKCJcbiIpOyAgICAgICAgICAgICAgICAg ICAgICAgLyogU3RhcnQgb2ZmIHdpdGggYSBibGFuayBsaW5lICovCisgICAgZm9yIChpID0gMDsg KnNbaV07IGkrKykgeyAgICAgICAgICAgLyogUHJpbnQgZWFjaCBsaW5lLiAqLworICAgICAgICBw cmludGYoIiVzXG4iLHNbaV0pOworICAgIH0KKyAgICBwcmludGYoIlxuIik7CisgICAgcmV0dXJu KDApOworfQorCisjZWxzZSAvKiBOT0hFTFAgbm90IGRlZmluZWQuLi4gKi8KKworaW50ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFByaW50IGFuIGFycmF5IG9mIGxpbmVz LCAqLworaG1zZ2EocykgY2hhciAqc1tdOyB7ICAgICAgICAgICAgICAgICAgIC8qIHBhdXNpbmcg YXQgZW5kIG9mIGVhY2ggc2NyZWVuLiAqLworICAgIGV4dGVybiBpbnQgaG10b3BsaW5lOyAgICAg ICAgICAgICAgIC8qIChUaGlzIHNob3VsZCBiZSBhIHBhcmFtZXRlci4uLikgKi8KKyAgICBpbnQg eCwgeSwgaSwgaiwgaywgbjsKKyAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsK KworI2lmZGVmIENLX1RUR1dTSVoKKyNpZmRlZiBPUzIKKyAgICB0dGdjd3N6KCk7CisjZWxzZSAv KiBPUzIgKi8KKyAgICAvKiBDaGVjayB3aGV0aGVyIHdpbmRvdyBzaXplIGNoYW5nZWQgKi8KKyAg ICBpZiAodHRnd3NpeigpID4gMCkgeworICAgICAgICBpZiAodHRfcm93cyA+IDAgJiYgdHRfY29s cyA+IDApIHsKKyAgICAgICAgICAgIGNtZF9yb3dzID0gdHRfcm93czsKKyAgICAgICAgICAgIGNt ZF9jb2xzID0gdHRfY29sczsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBPUzIgKi8KKyNl bmRpZiAvKiBDS19UVEdXU0laICovCisKKyAgICBwcmludGYoIlxuIik7ICAgICAgICAgICAgICAg ICAgICAgICAvKiBTdGFydCBvZmYgd2l0aCBhIGJsYW5rIGxpbmUgKi8KKyAgICBuID0gKGhtdG9w bGluZSA+IDApID8gaG10b3BsaW5lIDogMTsgLyogTGluZSBjb3VudGVyICovCisgICAgZm9yIChp ID0gMDsgKnNbaV07IGkrKykgeworICAgICAgICBwcmludGYoIiVzXG4iLHNbaV0pOyAgICAgICAg ICAgIC8qIFByaW50IGEgbGluZS4gKi8KKyAgICAgICAgeSA9IChpbnQpc3RybGVuKHNbaV0pOwor ICAgICAgICBrID0gMTsKKyAgICAgICAgZm9yIChqID0gMDsgaiA8IHk7IGorKykgICAgICAgICAv KiBTZWUgaG93IG1hbnkgbmV3bGluZXMgd2VyZSAqLworICAgICAgICAgIGlmIChzW2ldW2pdID09 ICdcbicpIGsrKzsgICAgIC8qIGluIHRoZSBzdHJpbmcuLi4gKi8KKyAgICAgICAgbiArPSBrOwor ICAgICAgICBpZiAobiA+IChjbWRfcm93cyAtIDMpICYmICpzW2krMV0pIC8qIEFmdGVyIGEgc2Ny ZWVuZnVsLCBnaXZlIHRoZW0gKi8KKyAgICAgICAgICBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDAp OyAgICAvKiBhICJtb3JlPyIgcHJvbXB0LiAqLworICAgICAgICAgIGVsc2UgbiA9IDA7CisgICAg fQorICAgIHByaW50ZigiXG4iKTsKKyAgICByZXR1cm4oMCk7Cit9CisKKyNpZm5kZWYgTk9GUklM TFMKK3N0YXRpYyBjaGFyICogc3VwcG9ydHRleHRbXSA9IHsKKworIkxpdmUgdGVjaG5pY2FsIHN1 cHBvcnQgZm9yIEtlcm1pdCBzb2Z0d2FyZSBpcyBubyBsb25nZXIgYXZhaWxhYmxlIiwKKyJmcm9t IENvbHVtYmlhIFVuaXZlcnNpdHksIGFzIGl0IHdhcyBmcm9tIG1pZC0xOTgxIHVudGlsIG1pZC0y MDExIHdoZW4iLAorCisjaWZkZWYgT1MyCisKKyJ0aGUgS2VybWl0IFByb2plY3Qgd2FzIGNhbmNl bGxlZC4gIEJlZ2lubmluZyB3aXRoIHZlcnNpb24gMy4wLCBLZXJtaXQgOTUiLAorCisjZWxzZQor CisidGhlIEtlcm1pdCBQcm9qZWN0IHdhcyBjYW5jZWxsZWQuICBCZWdpbm5pbmcgd2l0aCB2ZXJz aW9uIDkuMCwgQy1LZXJtaXQiLAorCisjZW5kaWYJLyogT1MyICovCisKKyJpcyBPcGVuIFNvdXJj ZSBzb2Z0d2FyZS4gIFRoZSBLZXJtaXQgd2Vic2l0ZSBpcyBzdXBwb3NlZCByZW1haW4gb3BlbiIs CisiaW5kZWZpbml0ZWx5IGF0OiIsCisiICIsCisiICBodHRwOi8va2VybWl0LmNvbHVtYmlhLmVk dS8iLAorIiAiLAorCisjaWZkZWYgT1MyCisKKyJUaGUgS2VybWl0IDk1IHBhZ2UgaXMgaGVyZToi LAorIiAiLAorIiAgaHR0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUvazk1Lmh0bWwiLAorIiAiLAor IlRoZSBLZXJtaXQgOTUgbWFudWFsIGlzIGhlcmU6IiwKKyIgIiwKKyIgIGh0dHA6Ly9rZXJtaXQu Y29sdW1iaWEuZWR1L2s5NW1hbnVhbC8iLAorIiAiLAorIlRoZSBLZXJtaXQgOTUgRnJlcXVlbnRs eSBBc2tlZCBRdWVzdGlvbnMgcGFnZSBpcyBoZXJlOiIsCisiICIsCisiICBodHRwOi8va2VybWl0 LmNvbHVtYmlhLmVkdS9rOTVmYXEuaHRtbCIsCisiICIsCisiYW5kIG1hbnkgb3RoZXIgcmVzb3Vy Y2VzIGFyZSBsaXN0ZWQgb24gdGhlIEtlcm1pdCA5NSBob21lIHBhZ2UuIiwKKyIgIiwKKworI2Vs c2UKKworIlRoZSBDLUtlcm1pdCBob21lIHBhZ2UgaXMgaGVyZToiLAorIiAiLAorIiAgaHR0cDov L2tlcm1pdC5jb2x1bWJpYS5lZHUvY2tlcm1pdC5odG1sIiwKKyIgIiwKKyJUaGUgZG9jdW1lbnRh dGlvbiBmb3IgQy1LZXJtaXQgaXMgbGlzdGVkIGhlcmU6IiwKKyIgIiwKKyIgIGh0dHA6Ly9rZXJt aXQuY29sdW1iaWEuZWR1L2NrZXJtaXQuaHRtbCNkb2MiLAorIiAiLAorIlRoZSBDLUtlcm1pdCBG cmVxdWVudGx5IEFza2VkIFF1ZXN0aW9ucyBwYWdlIGlzIGhlcmU6IiwKKyIgIiwKKyIgIGh0dHA6 Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2NrZmFxLmh0bWwiLAorIiAiLAorImFuZCBtYW55IG90aGVy IHJlc291cmNlcyBhcmUgbGlzdGVkIG9uIHRoZSBDLUtlcm1pdCBob21lIHBhZ2UuIiwKKyIgIiwK KworI2VuZGlmCS8qIE9TMiAqLworCisiVGltZSB3aWxsIHRlbGwgd2hhdCBzb3J0IG9mIGRldmVs b3BtZW50IGFuZCBzdXBwb3J0IHN0cnVjdHVyZXMgYXJpc2UiLAorImluIHRoZSBPcGVuIFNvdXJj ZSBjb21tdW5pdHkuIiwKKyIiCit9OworCisvKiBEbyB0aGUgQlVHIGNvbW1hbmQgKi8KK2ludAor ZG9idWcoKSB7CisgICAgcmV0dXJuKGhtc2dhKHN1cHBvcnR0ZXh0KSk7Cit9CisjZW5kaWYgLyog Tk9GUklMTFMgKi8KKworI2lmbmRlZiBOT1hNSVQKK3N0YXRpYyBjaGFyICpoc2V0eG1pdFtdID0g eworIlN5bnRheDogU0VUIFRSQU5TTUlUIHBhcmFtZXRlciB2YWx1ZSIsCisiICIsCisiQ29udHJv bHMgdGhlIGJlaGF2aW9yIG9mIHRoZSBUUkFOU01JVCBjb21tYW5kIChzZWUgSEVMUCBUUkFOU01J VCk6IiwKKyIgIiwKKyJTRVQgVFJBTlNNSVQgRUNITyB7IE9OLCBPRkYgfSIsCisiICBXaGV0aGVy IHRvIGVjaG8gdGV4dCB0byB5b3VyIHNjcmVlbiBhcyBpdCBpcyBiZWluZyB0cmFuc21pdHRlZC4i LAorIiAiLAorIlNFVCBUUkFOU01JVCBFT0YgdGV4dCIsCisiICBUZXh0IHRvIHNlbmQgYWZ0ZXIg ZW5kIG9mIGZpbGUgaXMgcmVhY2hlZCwgZS5nLiBcXDQgZm9yIEN0cmwtRCIsCisiICIsCisiU0VU IFRSQU5TTUlUIEZJTEwgbnVtYmVyIiwKKyIgIEFTQ0lJIHZhbHVlIG9mIGEgY2hhcmFjdGVyIHRv IGluc2VydCBpbnRvIGJsYW5rIGxpbmVzLCAwIGZvciBub25lLiIsCisiICBBcHBsaWVzIG9ubHkg dG8gdGV4dCBtb2RlLiAgMCBieSBkZWZhdWx0LiIsCisiICIsCisiU0VUIFRSQU5TTUlUIExJTkVG RUVEIHsgT04sIE9GRiB9IiwKKyIgIFRyYW5zbWl0IExpbmVmZWVkIGFzIHdlbGwgYXMgQ2Fycmlh Z2UgUmV0dXJuIChDUikgYXQgdGhlIGVuZCBvZiBlYWNoIGxpbmUuIiwKKyIgIE5vcm1hbGx5LCBv bmx5IENSICBpcyBzZW50LiIsCisiICIsCisiU0VUIFRSQU5TTUlUIExPQ0tJTkctU0hJRlQgeyBP TiwgT0ZGIH0iLAorIiAgV2hldGhlciB0byB1c2UgU08vU0kgZm9yIHRyYW5zbWl0dGluZyA4LWJp dCBkYXRhIHdoZW4gUEFSSVRZIGlzIG5vdCBOT05FLiIsCisiICIsCisiU0VUIFRSQU5TTUlUIFBB VVNFIG51bWJlciIsCisiICBIb3cgbWFueSBtaWxsaXNlY29uZHMgdG8gcGF1c2UgYWZ0ZXIgdHJh bnNtaXR0aW5nIGVhY2ggbGluZSAodGV4dCBtb2RlKSwiLAorIiAgb3IgZWFjaCBjaGFyYWN0ZXIg KGJpbmFyeSBtb2RlKS4iLAorIiAiLAorIlNFVCBUUkFOU01JVCBQUk9NUFQgbnVtYmVyIiwKKyIg IEFTQ0lJIHZhbHVlIG9mIGNoYXJhY3RlciB0byBsb29rIGZvciBmcm9tIGhvc3QgYmVmb3JlIHNl bmRpbmcgbmV4dCBsaW5lIiwKKyIgIHdoZW4gVFJBTlNNSVR0aW5nIGluIHRleHQgbW9kZTsgbm9y bWFsbHkgMTAgKExpbmVmZWVkKS4gIDAgbWVhbnMgbm9uZTsiLAorIiAgZG9uJ3Qgd2FpdCBmb3Ig YSBwcm9tcHQuIiwKKyIgIiwKKyJTRVQgVFJBTlNNSVQgVElNRU9VVCBudW1iZXIiLAorIiAgTnVt YmVyIG9mIHNlY29uZHMgdG8gd2FpdCBmb3IgZWFjaCBjaGFyYWN0ZXIgdG8gZWNobyB3aGVuIFRS QU5TTUlUIEVDSE8iLAorIiAgaXMgT04gb3IgVFJBTlNNSVQgUFJPTVBUIGlzIG5vdCAwLiAgSWYg MCBpcyBzcGVjaWZpZWQsIHRoaXMgbWVhbnMgd2FpdCIsCisiICBpbmRlZmluaXRlbHkgZm9yIGVh Y2ggZWNoby4iLAorIiAiLAorIlN5bm9ueW06IFNFVCBYTUlULiAgU0hPVyBUUkFOU01JVCBkaXNw bGF5cyBjdXJyZW50IHNldHRpbmdzLiIsCisiIiB9OworI2VuZGlmIC8qIE5PWE1JVCAqLworCitz dGF0aWMgY2hhciAqaHNldGJrZ1tdID0geworIlN5bnRheDogU0VUIEJBQ0tHUk9VTkQgeyBPRkYs IE9OIH0iLAorIiAiLAorIiAgU0VUIEJBQ0tHUk9VTkQgT0ZGIGZvcmNlcyBwcm9tcHRzIGFuZCBt ZXNzYWdlcyB0byBhcHBlYXIgb24geW91ciBzY3JlZW4iLAorIiAgZXZlbiB0aG91Z2ggS2VybWl0 IHRoaW5rcyBpdCBpcyBydW5uaW5nIGluIHRoZSBiYWNrZ3JvdW5kLiIsCisiIiB9OworCisjaWZk ZWYgRFlOQU1JQworc3RhdGljIGNoYXIgKmhzZXRidWZbXSA9IHsKKyJTeW50YXg6IFNFVCBCVUZG RVJTIG4xIFsgbjIgXSIsCisiICIsCisiICBDaGFuZ2VzIHRoZSBvdmVyYWxsIGFtb3VudCBvZiBt ZW1vcnkgYWxsb2NhdGVkIGZvciBTRU5EIGFuZCBSRUNFSVZFIHBhY2tldCIsCisiICBidWZmZXJz LCByZXNwZWN0aXZlbHkuICBCaWdnZXIgbnVtYmVycyBsZXQgeW91IGhhdmUgbG9uZ2VyIHBhY2tl dHMgYW5kIiwKKyIgIG1vcmUgd2luZG93IHNsb3RzLiAgSWYgbjIgaXMgb21pdHRlZCwgdGhlIHNh bWUgdmFsdWUgYXMgbjEgaXMgdXNlZC4iLAorI2lmZGVmIEJJR0JVRk9LCisiICIsCisiICBOT1RF OiBUaGlzIGNvbW1hbmQgaXMgbm90IG5lZWRlZCBpbiB0aGlzIHZlcnNpb24gb2YgS2VybWl0LCB3 aGljaCBpcyIsCisiICBhbHJlYWR5IGNvbmZpZ3VyZWQgZm9yIG1heGltdW0tc2l6ZSBwYWNrZXQg YnVmZmVycy4iLAorI2VuZGlmIC8qIEJJR0JVRk9LICovCisiIiB9OworI2VuZGlmIC8qIERZTkFN SUMgKi8KKworc3RhdGljIGNoYXIgKmhzZXRjbWRbXSA9IHsKKyJTeW50YXg6IFNFVCBDT01NQU5E IHBhcmFtZXRlciB2YWx1ZSIsCisiICIsCisKKyNpZmRlZiBDS19BVVRPREwKKyJTRVQgQ09NTUFO RCBBVVRPRE9XTkxPQUQgeyBPTiwgT0ZGIH0iLAorIiAgRW5hYmxlcy9EaXNhYmxlcyBhdXRvbWF0 aWMgcmVjb2duaXRpb24gb2YgS2VybWl0IHBhY2tldHMgd2hpbGUgaW4iLAorIiAgY29tbWFuZCBt b2RlLiAgT04gYnkgZGVmYXVsdC4iLAorIiAiLAorI2VuZGlmIC8qIENLX0FVVE9ETCAqLworCisi U0VUIENPTU1BTkQgQllURVNJWkUgeyA3LCA4IH0iLAorIiAgSW5mb3JtcyBLZXJtaXQgb2YgdGhl IGJ5dGVzaXplIG9mIHRoZSBjb21tdW5pY2F0aW9uIHBhdGggYmV0d2VlbiBpdHNlbGYiLAorIiAg YW5kIHlvdXIga2V5Ym9hcmQgYW5kIHNjcmVlbi4gIDggaXMgYXNzdW1lZC4gIFNFVCBDT01NQU5E IEJZVEUgNyBvbmx5IGlmIiwKKyIgIDgtYml0IGNoYXJhY3RlcnMgY2Fubm90IHBhc3MuIiwKKyIg IiwKKworI2lmZGVmIE9TMgorIlNFVCBDT01NQU5EIENPTE9SIDxmb3JlZ3JvdW5kLWNvbG9yPiA8 YmFja2dyb3VuZC1jb2xvcj4iLAorIiAgTGV0cyB5b3UgY2hvb3NlIGNvbG9ycyBmb3IgQ29tbWFu ZCBzY3JlZW4uICBVc2UgPyBpbiB0aGUgY29sb3IgZmllbGRzIHRvIiwKKyIgIHRvIGdldCBsaXN0 cyBvZiBhdmFpbGFibGUgY29sb3JzLiIsCisiICIsCisiU0VUIENPTU1BTkQgQ1VSU09SLVBPU0lU SU9OIDxyb3c+IDxjb2x1bW4+IiwKKyIgIE1vdmVzIHRoZSBjb21tYW5kLXNjcmVlbiBjdXJzb3Ig dG8gdGhlIGdpdmVuIHBvc2l0aW9uICgxLWJhc2VkKS4gIFRoaXMiLAorIiAgY29tbWFuZCBzaG91 bGQgYmUgdXNlZCBpbiBzY3JpcHRzIGluc3RlYWQgb2YgcmVseWluZyBvbiBBTlNJLlNZUyBlc2Nh cGUiLAorIiAgc2VxdWVuY2VzLiIsCisiICIsCisjZW5kaWYgLyogT1MyICovCisKKyJTRVQgQ09N TUFORCBFUlJPUiB7IDAsMSwyLDMgfSIsCisiICBTZXRzIHRoZSB2ZXJib3NpdHkgbGV2ZWwgb2Yg Y29tbWFuZCBlcnJvciBtZXNzYWdlczsgdGhlIGhpZ2hlciB0aGUgbnVtYmVyLCIsCisiICB0aGUg bW9yZSB2ZXJib3NlIHRoZSBtZXNzYWdlLiAgVGhlIGRlZmF1bHQgaXMgMS4gIEhpZ2hlciB2YWx1 ZXMgYXJlIiwKKyIgIHVzZWZ1bCBvbmx5IGZvciBkZWJ1Z2dpbmcgc2NyaXB0cy4iLAorIiAiLAor CisjaWZkZWYgT1MyCisjaWZkZWYgTlQKKyJTRVQgQ09NTUFORCBIRUlHSFQgPG51bWJlcj4iLAor IiAgQ2hhbmdlcyB0aGUgbnVtYmVyIG9mIHJvd3MgKGxpbmVzKSBpbiB5b3VyIGNvbW1hbmQgc2Ny ZWVuLCBub3QiLAorIiAgY291bnRpbmcgdGhlIHN0YXR1cyBsaW5lLiAgUmVjb21tZW5kZWQgdmFs dWVzIGFyZSAyNCwgNDIsIGFuZCA0OSAob3IgMjUsIiwKKyIgIDQzLCBhbmQgNTAgaWYgU0VUIENP TU1BTkQgU1RBVFVTTElORSBpcyBPRkYuKSIsCisjZWxzZQorIlNFVCBDT01NQU5EIEhFSUdIVCA8 bnVtYmVyPiIKKyIgIENoYW5nZXMgdGhlIG51bWJlciBvZiByb3dzIChsaW5lcykgaW4geW91ciBj b21tYW5kIHNjcmVlbiwgbm90IiwKKyIgIGNvdW50aW5nIHRoZSBzdGF0dXMgbGluZS4gIFdpbmRv d2VkIHNlc3Npb25zIGNhbiB1c2UgYW55IHZhbHVlIGZyb20gOCB0byIsCisiICAxMDEuICBGdWxs c2NyZWVuIHNlc3Npb25zIGFyZSBsaW1pdGVkIHRvIDI0LCA0MiwgNDksIG9yIDU5LiAgTm90IGFs bCIKKyIgIGhlaWdodHMgYXJlIHN1cHBvcnRlZCBieSBhbGwgdmlkZW8gYWRhcHRlcnMuIiwKKyNl bmRpZiAvKiBOVCAqLworI2Vsc2UgIC8qIE9TMiAqLworIlNFVCBDT01NQU5EIEhFSUdIVCA8bnVt YmVyPiIsCisiICBJbmZvcm1zIEtlcm1pdCBvZiB0aGUgbnVtYmVyIG9mIHJvd3MgaW4geW91ciBj b21tYW5kIHNjcmVlbiBmb3IgdGhlIiwKKyIgIHB1cnBvc2VzIG9mIE1vcmU/LXByb21wdGluZy4i LAorI2VuZGlmIC8qIE9TMiAqLworIiAiLAorIlNFVCBDT01NQU5EIFdJRFRIIDxudW1iZXI+IiwK KyIgIEluZm9ybXMgS2VybWl0IG9mIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBhY3Jvc3MgeW91 ciBzY3JlZW4gZm9yIiwKKyIgIHB1cnBvc2VzIG9mIHNjcmVlbiBmb3JtYXR0aW5nLiIsCisiICIs CisiU0VUIENPTU1BTkQgTU9SRS1QUk9NUFRJTkcgeyBPTiwgT0ZGIH0iLAorIiAgT04gKHRoZSBk ZWZhdWx0KSBlbmFibGVzIE1vcmU/LXByb21wdGluZyB3aGVuIEtlcm1pdCBuZWVkcyB0byBkaXNw bGF5IiwKKyIgIHRleHQgdGhhdCBkb2VzIG5vdCBmaXQgdmVydGljYWxseSBvbiB5b3VyIHNjcmVl bi4gIE9GRiBhbGxvd3MgdGhlIHRleHQgdG8iLAorIiAgc2Nyb2xsIGJ5IHdpdGhvdXQgaW50ZXJ2 ZW50aW9uLiAgSWYgeW91ciBjb21tYW5kIHdpbmRvdyBoYXMgc2Nyb2xsIGJhcnMsIiwKKyIgIHlv dSBtaWdodCBwcmVmZXIgT0ZGLiIsCisiICIsCisKKyNpZmRlZiBDS19SRUNBTEwKKyJTRVQgQ09N TUFORCBSRUNBTEwtQlVGRkVSLVNJWkUgbnVtYmVyIiwKKyIgIEhvdyBiaWcgeW91IHdhbnQgS2Vy bWl0J3MgY29tbWFuZCByZWNhbGwgYnVmZmVyIHRvIGJlLiAgQnkgZGVmYXVsdCwgaXQiLAorIiAg aG9sZHMgMTAgY29tbWFuZHMuICBZb3UgY2FuIG1ha2UgaXQgYW55IHNpemUgeW91IGxpa2UsIHN1 YmplY3QgdG8gbWVtb3J5IiwKKyIgIGNvbnN0cmFpbnRzIG9mIHRoZSBjb21wdXRlci4gIEEgc2l6 ZSBvZiAwIGRpc2FibGVzIGNvbW1hbmQgcmVjYWxsLiIsCisiICBXaGVuZXZlciB5b3UgZ2l2ZSB0 aGlzIGNvbW1hbmQsIHByZXZpb3VzIGNvbW1hbmQgaGlzdG9yeSBpcyBsb3N0LiIsCisiICIsCisj ZW5kaWYgLyogQ0tfUkVDQUxMICovCisKKyJTRVQgQ09NTUFORCBRVU9USU5HIHsgT04sIE9GRiB9 IiwKKyIgIFdoZXRoZXIgdG8gdHJlYXQgYmFja3NsYXNoIGFuZCBxdWVzdGlvbiBtYXJrIGFzIHNw ZWNpYWwgY2hhcmFjdGVycyAoT04pLCIsCisiICBvciBhcyBvcmRpbmFyeSBkYXRhIGNoYXJhY3Rl cnMgKE9GRikgaW4gY29tbWFuZHMuICBPTiBieSBkZWZhdWx0LiIsCisiICIsCisjaWZkZWYgRE9V QkxFUVVPVElORworIlNFVCBDT01NQU5EIERPVUJMRVFVT1RJTkcgeyBPTiwgT0ZGIH0iLAorIiAg V2hldGhlciB0byBhbGxvdyBkb3VibGVxdW90ZXMgKFwiKSB0byBiZSB1c2VkIHRvIGVuY2xvc2Ug ZmllbGRzLCIsCisiICBmaWxlbmFtZXMsIGRpcmVjdG9yeSBuYW1lcywgYW5kIG1hY3JvIGFyZ3Vt ZW50cyB0aGF0IG1pZ2h0IGNvbnRhaW4iLAorIiAgc3BhY2VzLiAgT04gYnkgZGVmYXVsdDsgdXNl IE9GRiB0byBmb3JjZSBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIiLAorIiAgdmVyc2lvbnMuIiwK KyIgIiwKKyNlbmRpZiAvKiBET1VCTEVRVU9USU5HICovCisKKyNpZmRlZiBDS19SRUNBTEwKKyJT RVQgQ09NTUFORCBSRVRSWSB7IE9OLCBPRkYgfSIsCisiICBXaGV0aGVyIHRvIHJlcHJvbXB0IHlv dSB3aXRoIHRoZSBjb3JyZWN0IGJ1dCBpbmNvbXBsZXRlIHBvcnRpb24gb2YgYSIsCisiICBzeW50 YWN0aWNhbGx5IGluY29ycmVjdCBjb21tYW5kLiAgT04gYnkgZGVmYXVsdC4iLAorIiAiLAorI2Vu ZGlmIC8qIENLX1JFQ0FMTCAqLworCisjaWZkZWYgT1MyCisiU0VUIENPTU1BTkQgU0NST0xMQkFD SyA8bGluZXM+IiwKKyIgIFNldHMgc2l6ZSBvZiB2aXJ0dWFsIENvbW1hbmQgc2NyZWVuIGJ1ZmZl ciB0byB0aGUgZ2l2ZW4gbnVtYmVyIG9mIGxpbmVzLCIsCisiICB3aGljaCBpbmNsdWRlcyB0aGUg YWN0aXZlIENvbW1hbmQgc2NyZWVuLiAgVGhlIG1pbmltdW0gaXMgMjU2LiAgVGhlIG1heCIsCisi ICBpcyAyIG1pbGxpb24uICBUaGUgZGVmYXVsdCBpcyA1MTIuIiwKKyIgIiwKKyJTRVQgQ09NTUFO RCBTVEFUVVNMSU5FIHsgT04sIE9GRiB9IiwKKyIgIE9OIChkZWZhdWx0KSBlbmFibGVzIHRoZSBL ZXJtaXQgc3RhdHVzIGxpbmUgaW4gdGhlIGNvbW1hbmQgc2NyZWVuLiIsCisiICBPRkYgcmVtb3Zl cyBpdCwgbWFraW5nIHRoZSBsaW5lIGF2YWlsYWJsZSBmb3IgdXNlIGJ5IHRoZSBob3N0LiIsCisi ICIsCisjZW5kaWYgLyogT1MyICovCisKKyJVc2UgU0hPVyBDT01NQU5EIHRvIGRpc3BsYXkgdGhl c2Ugc2V0dGluZ3MuIiwKKyIiIH07CisKKyNpZm5kZWYgTk9MT0NBTAorc3RhdGljIGNoYXIgKmhz ZXRjYXJbXSA9IHsKKyJTeW50YXg6IFNFVCBDQVJSSUVSLVdBVENIIHsgQVVUTywgT0ZGLCBPTiB9 IiwKKyIgIiwKKyIgIEF0dGVtcHRzIHRvIGNvbnRyb2wgdHJlYXRtZW50IG9mIGNhcnJpZXIgKHRo ZSBEYXRhIENhcnJpZXIgRGV0ZWN0IHNpZ25hbCkiLAorIiAgb24gc2VyaWFsIGNvbW11bmljYXRp b24gKFNFVCBMSU5FIG9yIFNFVCBQT1JUKSBkZXZpY2VzLiAgT04gbWVhbnMgdGhhdCIsCisiICBj YXJyaWVyIGlzIHJlcXVpcmVkIGF0IGFsbCB0aW1lcy4gIE9GRiBtZWFucyBjYXJyaWVyIGlzIG5l dmVyIHJlcXVpcmVkLiIsCisiICBBVVRPICh0aGUgZGVmYXVsdCkgbWVhbnMgY2FycmllciBpcyBy ZXF1aXJlZCBhdCBhbGwgdGltZXMgZXhjZXB0IGR1cmluZyIsCisiICB0aGUgRElBTCBjb21tYW5k LiAgQ29ycmVjdCBvcGVyYXRpb24gb2YgY2Fycmllci13YXRjaCBkZXBlbmRzIG9uIHRoZSIsCisi ICBjYXBhYmlsaXRpZXMgb2YgdGhlIHVuZGVybHlpbmcgT1MsIGRyaXZlcnMsIGRldmljZXMsIGFu ZCBjYWJsZXMuICBJZiB5b3UiLAorIiAgbmVlZCB0byBDT05ORUNUIHRvIGEgc2VyaWFsIGRldmlj ZSB0aGF0IGlzIG5vdCBhc3NlcnRpbmcgY2FycmllciwgYW5kIiwKKyIgIEtlcm1pdCB3b24ndCBs ZXQgeW91LCB1c2UgU0VUIENBUlJJRVItV0FUQ0ggT0ZGLiAgVXNlIFNIT1cgQ09NTVVOSUNBVElP TlMiLAorIiAgdG8gZGlzcGxheSB0aGUgQ0FSUklFUi1XQVRDSCBzZXR0aW5nLiIsCisiIiB9Owor I2VuZGlmIC8qIE5PTE9DQUwgKi8KKworc3RhdGljIGNoYXIgKmhzZXRhdFtdID0geworIlN5bnRh eDogU0VUIEFUVFJJQlVURVMgbmFtZSBPTiBvciBPRkYiLAorIiAiLAorIiAgVXNlIHRoaXMgY29t bWFuZCB0byBlbmFibGUgKE9OKSBvciBkaXNhYmxlIChPRkYpIHRoZSB0cmFuc21pc3Npb24gb2Yi LAorIiAgc2VsZWN0ZWQgZmlsZSBhdHRyaWJ1dGVzIGFsb25nIHdpdGggZWFjaCBmaWxlLCBhbmQg dG8gaGFuZGxlIG9yIGlnbm9yZSIsCisiICBzZWxlY3RlZCBpbmNvbWluZyBmaWxlIGF0dHJpYnV0 ZXMsIGluY2x1ZGluZzoiLAorIiAiLAorI2lmbmRlZiBOT0NTRVRTCisiICAgQ0hBUkFDVEVSLVNF VDogIFRoZSB0cmFuc2ZlciBjaGFyYWN0ZXIgc2V0IGZvciB0ZXh0IGZpbGVzIiwKKyNlbmRpZiAv KiBOT0NTRVRTICovCisiICAgREFURTogICAgICAgICAgIFRoZSBmaWxlJ3MgY3JlYXRpb24gZGF0 ZSIsCisiICAgRElTUE9TSVRJT046ICAgIFVudXN1YWwgdGhpbmdzIHRvIGRvIHdpdGggdGhlIGZp bGUsIGxpa2UgTUFJTCBvciBQUklOVCIsCisiICAgTEVOR1RIOiAgICAgICAgIFRoZSBmaWxlJ3Mg bGVuZ3RoIiwKKyIgICBQUk9URUNUSU9OOiAgICAgVGhlIGZpbGUncyBwcm90ZWN0aW9uIChwZXJt aXNzaW9ucykiLAorIiAgIFNZU1RFTS1JRDogICAgICBNYWNoaW5lL09wZXJhdGluZyBzeXN0ZW0g b2Ygb3JpZ2luIiwKKyIgICBUWVBFOiAgICAgICAgICAgVGhlIGZpbGUncyB0eXBlICh0ZXh0IG9y IGJpbmFyeSkiLAorIiAiLAorIllvdSBjYW4gYWxzbyBzcGVjaWZ5IEFMTCB0byBzZWxlY3QgYWxs IG9mIHRoZW0uICBFeGFtcGxlczoiLAorIiAiLAorIiAgIFNFVCBBVFRSIERBVEUgT0ZGIiwKKyIg ICBTRVQgQVRUUiBMRU5HVEggT04iLAorIiAgIFNFVCBBVFRSIEFMTCBPRkYiLAorIiAiLAorIkFs c28gc2VlIEhFTFAgU0VUIFNFTkQgYW5kIEhFTFAgU0VUIFJFQ0VJVkUuIiwKKyIiCit9OworCitz dGF0aWMgY2hhciAqaHh5dGFrW10gPSB7CisiU3ludGF4OiBTRVQgVEFLRSBwYXJhbWV0ZXIgdmFs dWUiLAorIiAiLAorIiAgQ29udHJvbHMgYmVoYXZpb3Igb2YgVEFLRSBjb21tYW5kOiIsCisiICIs CisiU0VUIFRBS0UgRUNITyB7IE9OLCBPRkYgfSIsCisiICBUZWxscyB3aGV0aGVyIGNvbW1hbmRz IHJlYWQgZnJvbSBhIFRBS0UgZmlsZSBzaG91bGQgYmUgZGlzcGxheWVkIG9uIHRoZSIsCisiICBz Y3JlZW4gKGlmIHNvLCBlYWNoIGNvbW1hbmQgaXMgc2hvd24gYXQgdGhlIHRpbWUgaXQgaXMgcmVh ZCwgYW5kIGxhYmVsZWQiLAorIiAgd2l0aCBhIGxpbmUgbnVtYmVyKS4iLAorIiAiLAorIlNFVCBU QUtFIEVSUk9SIHsgT04sIE9GRiB9IiwKKyIgIFRlbGxzIHdoZXRoZXIgYSBUQUtFIGNvbW1hbmQg ZmlsZSBzaG91bGQgYmUgYXV0b21hdGljYWxseSB0ZXJtaW5hdGVkIHdoZW4iLAorIiAgYSBjb21t YW5kIGZhaWxzLiAgVGhpcyBzZXR0aW5nIGlzIGxvY2FsIHRvIHRoZSBjdXJyZW50IGNvbW1hbmQg ZmlsZSwgYW5kIiwKKyIgIGluaGVyaXRlZCBieSBzdWJvcmRpbmF0ZSBjb21tYW5kIGZpbGVzLiIs CisiIiB9OworCisjaWZuZGVmIE5PTE9DQUwKKyNpZmRlZiBPUzJNT1VTRQorc3RhdGljIGNoYXIg Kmh4eW1vdXNlW10gPSB7CisiU3ludGF4OiBTRVQgTU9VU0UgQUNUSVZBVEUgeyBPTiwgT0ZGIH0i LAorIiAgRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgbW91c2UgaW4gQ29ubmVjdCBtb2RlLiAgRGVm YXVsdCBpcyBPTiIsCisiICIsCisiU3ludGF4OiBTRVQgTU9VU0UgQlVUVE9OIDxudW1iZXI+IDxr ZXktbW9kaWZpZXI+IDxhY3Rpb24+IFsgPHRleHQ+IF0iLAorIiB3aGVyZToiLAorIiAgPG51bWJl cj4gaXMgdGhlIG1vdXNlIGJ1dHRvbiBudW1iZXIsIDEsIDIsIG9yIDM7IiwKKyIgIDxrZXktbW9k aWZpZXI+IGRlbm90ZXMgbW9kaWZpZXIga2V5cyBoZWxkIGRvd24gZHVyaW5nIHRoZSBtb3VzZSBl dmVudDoiLAorIiAgIEFMVCwgQUxULVNISUZULCBDVFJMLCBDVFJMLUFMVCBDVFJMLUFMVC1TSElG VCwgQ1RSTC1TSElGVCwgU0hJRlQsIE5PTkU7IiwKKyIgIDxhY3Rpb24+IGlzIHRoZSBtb3VzZSBh Y3Rpb24sIENMSUNLLCBEUkFHLCBvciBET1VCTEUtQ0xJQ0suIiwKKyIgIiwKKyIgVGhlIDx0ZXh0 PiBoYXMgZXhhY3RseSB0aGUgc2FtZSBwcm9wZXJ0aWVzIGFzIHRoZSA8dGV4dD4gZnJvbSB0aGUg U0VUIEtFWSIsCisiIGNvbW1hbmQgLS0gaXQgY2FuIGJlIGEgY2hhcmFjdGVyLCBhIHN0cmluZywg b25lIG9yIG1vcmUgS3ZlcmJzLCBhIG1hY3JvIiwKKyIgaW52b2tlZCBhcyBhIEt2ZXJiLCBvciBh bnkgY29tYmluYXRpb24gb2YgdGhlc2UuICBUaHVzLCBhbnl0aGluZyB0aGF0IGNhbiIsCisiIGJl IGFzc2lnbmVkIHRvIGEga2V5IGNhbiBhbHNvIGJlIGFzc2lnbmVkIHRvIHRoZSBtb3VzZSAtLSBh bmQgdmljZSB2ZXJzYS4iLAorIiBJZiB0aGUgPHRleHQ+IGlzIG9taXR0ZWQsIHRoZSBhY3Rpb24g d2lsbCBiZSBpZ25vcmVkLiAgRXhhbXBsZXM6IiwKKyIgIiwKKyIgU0VUIE1PVVNFIEJVVFRPTiAx IE5PTkUgRE9VQkxFIFxcS21vdXNlQ3VyUG9zIiwKKyIgU0VUIE1PVSBCIDIgU0hJRlQgQ0xJQ0sg aGVscFxcMTMiLAorIiAiLAorIiBEUkFHIG9wZXJhdGlvbnMgcGVyZm9ybSBhIFwibWFyayBtb2Rl XCIgc2VsZWN0aW9uIG9mIFRleHQuIFlvdSBzaG91bGQiLAorIiBhc3NpZ24gb25seSB0aGUgZm9s bG93aW5nIGFjdGlvbnMgdG8gZHJhZyBvcGVyYXRpb25zOiIsCisiICIsCisiICBcXEtkdW1wICAg ICAgICAgLSBjb3B5IG1hcmtlZCB0ZXh0IHRvIHByaW50ZXIgKG9yIGZpbGUpIiwKKyIgIFxcS21h cmtjb3B5Y2xpcCAtIGNvcHkgbWFya2VkIHRleHQgdG8gUE0gQ2xpcGJvYXJkIiwKKyIgIFxcS21h cmtjb3B5aG9zdCAtIGNvcHkgbWFya2VkIHRleHQgZGlyZWN0IHRvIEhvc3QiLAorIiAgXFxLbW91 c2VtYXJrICAgIC0gbWFyayB0ZXh0LCBubyBjb3B5IG9wZXJhdGlvbiBwZXJmb3JtZWQiLAorIiAi LAorIiBUaGUgZm9sbG93aW5nIEt2ZXJiIGlzIG9ubHkgZm9yIHVzZSB3aXRoIHRoZSBtb3VzZToi LAorIiAiLAorIiAgXFxLbW91c2VDdXJQb3MiLAorIiAiLAorIiB3aGljaCByZXByZXNlbnRzIHRo ZSBtb3VzZS1kaXJlY3RlZCB0ZXJtaW5hbCBjdXJzb3IgZmVhdHVyZS4iLAorIiAiLAorIlN5bnRh eDogU0VUIE1PVVNFIENMRUFSIiwKKyIgUmVzdG9yZXMgYWxsIG1vdXNlIGV2ZW50cyB0byB0aGVp ciBkZWZhdWx0IGRlZmluaXRpb25zIiwKKyIgICBCdXR0b24gMSBDdHJsLUNsaWNrID0gS3ZlcmI6 IFxcS21vdXNldXJsIiwKKyIgICBCdXR0b24gMSBEb3VibGUtQ2xpY2sgPSBLdmVyYjogXFxLbW91 c2VjdXJwb3MiLAorIiAgIEJ1dHRvbiAxIERyYWcgPSBLdmVyYjogXFxLbWFya2NvcHljbGlwIiwK KyIgICBCdXR0b24gMSBBbHQtRHJhZyA9IEt2ZXJiOiBcXEttYXJrY29weWNsaXBfbm9lb2wiLAor IiAgIEJ1dHRvbiAxIEN0cmwtRHJhZyA9IEt2ZXJiOiBcXEttYXJrY29weWhvc3QiLAorIiAgIEJ1 dHRvbiAxIEN0cmwtQWx0LURyYWcgPSBLdmVyYjogXFxLbWFya2NvcHlob3N0X25vZW9sIiwKKyIg ICBCdXR0b24gMSBDdHJsLVNoaWZ0LURyYWcgPSBLdmVyYjogXFxLZHVtcCIsCisiICAgQnV0dG9u IDIgRG91YmxlLUNsaWNrID0gS3ZlcmI6IFxcS3Bhc3RlIiwKKyIgICBCdXR0b24gMiBEcmFnID0g S3ZlcmI6IFxcS21hcmtjb3B5aG9zdCIsCisiICAgQnV0dG9uIDIgQWx0LURyYWcgPSBLdmVyYjog XFxLbWFya2NvcHlob3N0X25vZW9sICAgICAiLCAgICAKKyIgICBCdXR0b24gMyBEb3VibGUtQ2xp Y2sgPSBLdmVyYjogXFxLcGFzdGUiLAorIiJ9OworI2VuZGlmIC8qIE9TMk1PVVNFICovCisKK3N0 YXRpYyBjaGFyICpoeHl0ZXJtW10gPSB7CisiU3ludGF4OiBTRVQgVEVSTUlOQUwgcGFyYW1ldGVy IHZhbHVlIiwKKyIgIiwKKyNpZmRlZiBPUzIKKyJTRVQgVEVSTUlOQUwgVFlQRSB7IEFOU0ksIFZU NTIsIFZUMTAwLCBWVDEwMiwgVlQyMjAsIFZUMzIwLCAuLi4gfSIsCisiICBTZWxlY3RzIHR5cGUg dHlwZSBvZiB0ZXJtaW5hbCB0byBlbXVsYXRlLiAgVHlwZSBTRVQgVEVSTUlOQUwgVFlQRSA/IHRv IiwKKyIgIHNlZSBhIGNvbXBsZXRlIGxpc3QuIiwKKyIgIiwKKyJTRVQgVEVSTUlOQUwgQU5TV0VS QkFDSyB7IE9GRiwgT04gfSIsCisiICBEaXNhYmxlcy9lbmFibGVzIHRoZSBFTlEvQW5zd2VyYmFj ayBzZXF1ZW5jZSAoXCJLLTk1IHZlcnNpb24gdGVybS10eXBlXCIpLiIsCisiICIsCisiU0VUIFRF Uk1JTkFMIEFOU1dFUkJBQ0sgTUVTU0FHRSA8ZXh0ZW5zaW9uPiIsCisiICBBbGxvd3MgeW91IHRv IHNwZWNpZnkgYW4gZXh0ZW5zaW9uIHRvIHRoZSBkZWZhdWx0IGFuc3dlcmJhY2sgbWVzc2FnZS4i LAorIiAiLAorI2Vsc2UKKyJTRVQgVEVSTUlOQUwgVFlQRSAuLi4iLAorIiAgVGhpcyBjb21tYW5k IGlzIG5vdCBhdmFpbGFibGUgYmVjYXVzZSB0aGlzIHZlcnNpb24gb2YgS2VybWl0IGRvZXMgbm90 IiwKKyIgIGluY2x1ZGUgYSB0ZXJtaW5hbCBlbXVsYXRvci4gIEluc3RlYWQsIGl0IGlzIGEgXCJz ZW1pdHJhbnNwYXJlbnQgcGlwZVwiIiwKKyIgIChvciBhIHRvdGFsbHkgdHJhbnNwYXJlbnQgb25l LCBpZiB5b3UgY29uZmlndXJlIGl0IHRoYXQgd2F5KSB0byB0aGUiLAorIiAgY29tcHV0ZXIgb3Ig c2VydmljZSB5b3UgaGF2ZSBtYWRlIGEgY29ubmVjdGlvbiB0by4gIFlvdXIgY29uc29sZSwiLAor IiAgd29ya3N0YXRpb24gd2luZG93LCBvciB0aGUgdGVybWluYWwgZW11bGF0b3Igb3IgdGVybWlu YWwgZnJvbSB3aGljaCB5b3UiLAorIiAgYXJlIHJ1bm5pbmcgS2VybWl0IHByb3ZpZGVzIHRoZSBl bXVsYXRpb24uIiwKKyIgIiwKKyNlbmRpZiAvKiBPUzIgKi8KKworI2lmZGVmIENLX0FQQworIlNF VCBURVJNSU5BTCBBUEMgeyBPTiwgT0ZGLCBOTy1JTlBVVCwgTk8tSU5QVVQtVU5DSEVDS0VELCBV TkNIRUNLRUQgfSIsCisjaWZkZWYgT1MyCisiICBDb250cm9scyBleGVjdXRpb24gb2YgQXBwbGlj YXRpb24gUHJvZ3JhbSBDb21tYW5kcyBzZW50IGJ5IHRoZSBob3N0IHdoaWxlIiwKKyIgIEstOTUg aXMgZWl0aGVyIGluIENPTk5FQ1QgbW9kZSBvciBwcm9jZXNzaW5nIElOUFVUIGNvbW1hbmRzLiAg T04gYWxsb3dzIiwKKyIgIGV4ZWN1dGlvbiBvZiBcInNhZmVcIiBjb21tYW5kcyBhbmQgZGlzYWxs b3dzIHBvdGVudGlhbGx5IGRhbmdlcm91cyBvbmVzIiwKKyIgIHN1Y2ggYXMgREVMRVRFLCBSRU5B TUUsIE9VVFBVVCwgYW5kIFJVTi4gIE9GRiBwcmV2ZW50cyBleGVjdXRpb24gb2YgQVBDcy4iLAor IiAgVU5DSEVDS0VEIGFsbG93cyBleGVjdXRpb24gb2YgYWxsIEFQQ3MuICBPRkYgaXMgdGhlIGRl ZmF1bHQuIiwKKyNlbHNlIC8qIE9TMiAqLworIiAgQ29udHJvbHMgZXhlY3V0aW9uIG9mIEFwcGxp Y2F0aW9uIFByb2dyYW0gQ29tbWFuZHMgc2VudCBieSB0aGUgaG9zdCB3aGlsZSIsCisiICBDLUtl cm1pdCBpcyBpbiBDT05ORUNUIG1vZGUuICBPTiBhbGxvd3MgZXhlY3V0aW9uIG9mIFwic2FmZVwi IGNvbW1hbmRzIGFuZCIsCisiICBkaXNhbGxvd3MgcG90ZW50aWFsbHkgZGFuZ2Vyb3VzIGNvbW1h bmRzIHN1Y2ggYXMgREVMRVRFLCBSRU5BTUUsIE9VVFBVVCwiLAorIiAgYW5kIFJVTi4gIE9GRiBw cmV2ZW50cyBleGVjdXRpb24gb2YgQVBDcy4gIFVOQ0hFQ0tFRCBhbGxvd3MgZXhlY3V0aW9uIG9m IiwKKyIgIGFsbCBBUENzLiAgT0ZGIGlzIHRoZSBkZWZhdWx0LiIsCisjZW5kaWYgLyogT1MyICov CisiICIsCisjZW5kaWYgLyogQ0tfQVBDICovCisKKyNpZmRlZiBPUzIKKyJTRVQgVEVSTUlOQUwg QVJST1ctS0VZUyB7IEFQUExJQ0FUSU9OLCBDVVJTT1IgfSIsCisiICBTZXRzIHRoZSBtb2RlIGZv ciB0aGUgYXJyb3cga2V5cyBkdXJpbmcgVlQgdGVybWluYWwgZW11bGF0aW9uLiIsCisiICIsCisi U0VUIFRFUk1JTkFMIEFUVFJJQlVURSB7IEJMSU5LLCBESU0sIFBST1RFQ1RFRCwgUkVWRVJTRSwg VU5ERVJMSU5FIH0iLAorIiAgRGV0ZXJtaW5lcyBob3cgYXR0cmlidXRlcyBhcmUgZGlzcGxheWVk IGJ5IEtlcm1pdC05NS4iLAorIiAiLAorIlNFVCBURVJNSU5BTCBBVFRSSUJVVEUgeyBCTElOSywg RElNLCBSRVZFUlNFLCBVTkRFUkxJTkUgfSB7IE9OLCBPRkYgfSIsCisiICBEZXRlcm1pbmVzIHdo ZXRoZXIgcmVhbCBCbGlua2luZywgRGltLCBSZXZlcnNlLCBhbmQgVW5kZXJsaW5lIGFyZSB1c2Vk IGluIiwKKyIgIHRoZSB0ZXJtaW5hbCBkaXNwbGF5LiAgV2hlbiBCTElOSyBpcyB0dXJuZWQgT0ZG LCByZXZlcnNlIGJhY2tncm91bmQiLAorIiAgaW50ZW5zaXR5IGlzIHVzZWQuICBXaGVuIERJTSBp cyB0dXJuZWQgT0ZGLCBkaW0gY2hhcmFjdGVycyBhcHBlYXIgQk9MRC4iLAorIiAgV2hlbiBSRVZF UlNFIGFuZCBVTkRFUkxJTkUgYXJlIE9GRiwgdGhlIGNvbG9ycyBzZWxlY3RlZCB3aXRoIFNFVCIs CisiICBURVJNSU5BTCBDT0xPUiB7IFJFVkVSU0UsVU5ERVJMSU5FIH0gYXJlIHVzZWQgaW5zdGVh ZC4gIFRoaXMgY29tbWFuZCIsCisiICBhZmZlY3RzIHRoZSBlbnRpcmUgY3VycmVudCBzY3JlZW4g YW5kIHRlcm1pbmFsIHNjcm9sbGJhY2sgYnVmZmVyLiIsCisiICIsCisiU0VUIFRFUk1JTkFMIEFU VFJJQlVURSBQUk9URUNURUQgWyAtIiwKKyIgICB7IEJPTEQsIERJTSwgSU5WSVNJQkxFLCBOT1JN QUwsIFJFVkVSU0UsIFVOREVSTElORUQgfSBdIiwKKyIgIFNldHMgdGhlIGF0dHJpYnV0ZXMgdXNl ZCB0byByZXByZXNlbnQgUHJvdGVjdGVkIHRleHQgaW4gV3lzZSBhbmQgVGVsZXZpZGVvIiwKKyIg IHRlcm1pbmFsIGVtdWxhdGlvbnMuICBBbnkgY29tYmluYXRpb24gb2YgYXR0cmlidXRlcyBtYXkg YmUgdXNlZC4gIFRoZSIsCisiICBkZWZhdWx0IGlzIERJTS4pIiwKKyIgIiwKKyNlbmRpZiAvKiBP UzIgKi8KKworI2lmZGVmIE9TMgorI2lmZGVmIENLX1hZWgorIlNFVCBURVJNSU5BTCBBVVRPRE9X TkxPQUQgeyBPTiwgT0ZGLCBFUlJPUiB7IFNUT1AsIENPTlRJTlVFIH0gfSIsCisiICBlbmFibGVz L2Rpc2FibGVzIGF1dG9tYXRpYyBzd2l0Y2hpbmcgaW50byBmaWxlLXRyYW5zZmVyIG1vZGUgd2hl biBhIEtlcm1pdCIsCisiICBvciBaTU9ERU0gZmlsZSB0cmFuc2ZlciBoYXMgYmVlbiBkZXRlY3Rl ZCBkdXJpbmcgQ09OTkVDVCBtb2RlIG9yIHdoaWxlIiwKKyIgIGFuIElOUFVUIGNvbW1hbmQgaXMg YWN0aXZlLiAgRGVmYXVsdCBpcyBPRkYuIiwKKyNlbHNlCisiU0VUIFRFUk1JTkFMIEFVVE9ET1dO TE9BRCB7IE9OLCBPRkYsIEVSUk9SIHsgU1RPUCwgQ09OVElOVUUgfSB9IiwKKyIgIGVuYWJsZXMv ZGlzYWJsZXMgYXV0b21hdGljIHN3aXRjaGluZyBpbnRvIGZpbGUtdHJhbnNmZXIgbW9kZSB3aGVu IGEgS2VybWl0IiwKKyIgIGZpbGUgdHJhbnNmZXIgaGFzIGJlZW4gZGV0ZWN0ZWQgZHVyaW5nIENP Tk5FQ1QgbW9kZSBvciB3aGlsZSBhbiBJTlBVVCIsCisiICBjb21tYW5kIGlzIGFjdGl2ZS4gIERl ZmF1bHQgaXMgT0ZGLiIsCisjZW5kaWYgLyogQ0tfWFlaICovCisKKyIgIiwKKyIgIFdoZW4gVEVS TUlOQUwgQVVUT0RPV05MT0FEIGlzIE9OLCB0aGUgVEVSTUlOQUwgQVVUT0RPV05MT0FEIEVSUk9S IHNldHRpbmciLAorIiAgdGVsbHMgd2hhdCB0byBkbyBpZiBhbiBlcnJvciBvY2N1cnMgZHVyaW5n IGEgZmlsZSB0cmFuc2ZlciBvciBvdGhlciIsCisiICBwcm90b2NvbCBvcGVyYXRpb24gaW5pdGlh dGVkIGJ5IHRoZSB0ZXJtaW5hbCBlbXVsYXRvcjogU1RPUCAodGhlIGRlZmF1bHQpIiwKKyIgIG1l YW5zIHRvIHJlbWFpbiBpbiBjb21tYW5kIG1vZGUgc28geW91IGNhbiBzZWUgd2hhdCBoYXBwZW5l ZDsgQ09OVElOVUUiLAorIiAgbWVhbnMgdG8gcmVzdW1lIHRoZSBDT05ORUNUIHNlc3Npb24gKGUu Zy4gc28gYSBmYXItZW5kIHNjcmlwdCBjYW4gY29udGludWUiLAorIiAgaXRzIHdvcmspLiIsCisi ICIsCisKKyNpZmRlZiBDS19YWVoKKyJTRVQgVEVSTS4uLiBBVVRPLi4uIHsgS0VSTUlULCBaTU9E RU0gfSBDMC1DT05GTElDVFMgeyBJR05PUkVELCBQUk9DRVNTRUQgfSIsCisiICBEZXRlcm1pbmVz IHdoZXRoZXIgdGhlIGFjdGl2ZSB0ZXJtaW5hbCBlbXVsYXRvciBzaG91bGQgcHJvY2VzcyBvciBp Z25vcmUiLAorIiAgQzAgY29udHJvbCBjaGFyYWN0ZXJzIHdoaWNoIGFyZSBhbHNvIHVzZWQgZm9y IHRoZSBzcGVjaWZpZWQgZmlsZSB0cmFuc2ZlciIsCisiICBwcm90b2NvbC4gIEtlcm1pdCBieSBk ZWZhdWx0IHVzZXMgXkEgKFNPSCkgYW5kIFptb2RlbSB1c2VzIF5YIChDQU4pLiIsCisiICBEZWZh dWx0IGlzIFBST0NFU1NFRC4iLAorIiAiLAorIlNFVCBURVJNLi4uIEFVVE8uLi4geyBLRVJNSVQs IFpNT0RFTSB9IERFVEVDVElPTi1NRVRIT0QgeyBQQUNLRVQsIFNUUklORyB9IiwKKyIgIERldGVy bWluZXMgd2hldGhlciB0aGUgc3BlY2lmaWVkIGZpbGUgdHJhbnNmZXIgcHJvdG9jb2wgc2hvdWxk IGJlIGRldGVjdGVkIiwKKyIgIGJ5IGxvb2tpbmcgZm9yIHZhbGlkIHBhY2tldHMgb3IgYnkgaWRl bnRpZnlpbmcgYSBzcGVjaWZpZWQgdGV4dCBzdHJpbmcuIiwKKyIgIERlZmF1bHQgaXMgUEFDS0VU LiIsCisiICIsCisiU0VUIFRFUk0uLi4gQVVUTy4uLiB7IEtFUk1JVCwgWk1PREVNIH0gU1RSSU5H IDx0ZXh0PiIsCisiICBMZXRzIHlvdSBhc3NpZ24gYW4gYXV0b2Rvd25sb2FkIGRldGVjdGlvbiBz dHJpbmcgZm9yIHVzZSB3aXRoIHRoZSIsCisiICBzcGVjaWZpZWQgZmlsZSB0cmFuc2ZlciBwcm90 b2NvbC4iLAorIiAgRGVmYXVsdCBmb3IgS2VybWl0IGlzIFwiUkVBRFkgVE8gU0VORC4uLlwiLCBm b3IgWm1vZGVtIGlzIFwicnpcXHsxM31cIi4iLAorIiAiLAorI2Vsc2UgLyogQ0tfWFlaICovCisi U0VUIFRFUk0uLi4gQVVUTy4uLiBLRVJNSVQgQzAtQ09ORkxJQ1RTIHsgSUdOT1JFRCwgUFJPQ0VT U0VEIH0iLAorIiAgRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBhY3RpdmUgdGVybWluYWwgZW11bGF0 b3Igc2hvdWxkIHByb2Nlc3Mgb3IgaWdub3JlIiwKKyIgIEMwIGNvbnRyb2wgY2hhcmFjdGVycyB3 aGljaCBhcmUgYWxzbyB1c2VkIGZvciB0aGUgc3BlY2lmaWVkIGZpbGUgdHJhbnNmZXIiLAorIiAg cHJvdG9jb2wuICBLZXJtaXQgYnkgZGVmYXVsdCB1c2VzIF5BIDxTT0g+LiAgRGVmYXVsdCBpcyBQ Uk9DRVNTRUQuIiwKKyIgIiwKKyJTRVQgVEVSTS4uLiBBVVRPLi4uIEtFUk1JVCBERVRFQ1RJT04t TUVUSE9EIHsgUEFDS0VULCBTVFJJTkcgfSIsCisiICBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHNw ZWNpZmllZCBmaWxlIHRyYW5zZmVyIHByb3RvY29sIHNob3VsZCBiZSBkZXRlY3RlZCIsCisiICBi eSBsb29raW5nIGZvciB2YWxpZCBwYWNrZXRzIG9yIGJ5IGlkZW50aWZ5aW5nIGEgc3BlY2lmaWVk IHRleHQgc3RyaW5nLiIsCisiICBEZWZhdWx0IGlzIFBBQ0tFVC4iLAorIiAiLAorIlNFVCBURVJN Li4uIEFVVE8uLi4gS0VSTUlUIFNUUklORyA8dGV4dD4iLAorIiAgTGV0cyB5b3UgYXNzaWduIGFu IGF1dG9kb3dubG9hZCBkZXRlY3Rpb24gc3RyaW5nIGZvciB1c2Ugd2l0aCB0aGUiLAorIiAgc3Bl Y2lmaWVkIGZpbGUgdHJhbnNmZXIgcHJvdG9jb2wuICBEZWZhdWx0IGlzIFwiUkVBRFkgVE8gU0VO RC4uLlwiLiIsCisiICIsCisjZW5kaWYgLyogQ0tfWFlaICovCisiU0VUIFRFUk1JTkFMIEFVVE9Q QUdFIHsgT04sIE9GRiB9IiwKKyIgIiwKKyJTRVQgVEVSTUlOQUwgQVVUT1NDUk9MTCB7IE9OLCBP RkYgfSIsCisiICIsCisjZWxzZSAvKiBPUzIgKi8KKyJTRVQgVEVSTUlOQUwgQVVUT0RPV05MT0FE IHsgT04sIE9GRiwgRVJST1IgeyBTVE9QLCBDT05USU5VRSB9IH0iLAorIiAgRW5hYmxlcy9kaXNh YmxlcyBhdXRvbWF0aWMgc3dpdGNoaW5nIGludG8gZmlsZS10cmFuc2ZlciBtb2RlIHdoZW4gYSB2 YWxpZCIsCisjaWZkZWYgQ0tfWFlaCisiICBLZXJtaXQgb3IgWk1PREVNIHBhY2tldCBvZiB0aGUg YXBwcm9wcmlhdGUgdHlwZSBpcyByZWNlaXZlZCBkdXJpbmcgQ09OTkVDVCIsCisiICBtb2RlLiAg RGVmYXVsdCBpcyBPRkYuIiwKKyNlbHNlCisiICBLZXJtaXQgcGFja2V0IG9mIHRoZSBhcHByb3By aWF0ZSB0eXBlIGlzIHJlY2VpdmVkIGR1cmluZyBDT05ORUNUIG1vZGUuIiwKKyIgIERlZmF1bHQg aXMgT0ZGLiIsCisjZW5kaWYgLyogQ0tfWFlaICovCisKKyIgIiwKKyIgIFdoZW4gVEVSTUlOQUwg QVVUT0RPV05MT0FEIGlzIE9OLCB0aGUgVEVSTUlOQUwgQVVUT0RPV05MT0FEIEVSUk9SIHNldHRp bmciLAorIiAgdGVsbHMgd2hhdCB0byBkbyBpZiBhbiBlcnJvciBvY2N1cnMgZHVyaW5nIGEgZmls ZSB0cmFuc2ZlciBvciBvdGhlciIsCisiICBwcm90b2NvbCBvcGVyYXRpb24gaW5pdGlhdGVkIGJ5 IHRoZSB0ZXJtaW5hbCBlbXVsYXRvcjogU1RPUCAodGhlIGRlZmF1bHQpIiwKKyIgIG1lYW5zIHRv IHJlbWFpbiBpbiBjb21tYW5kIG1vZGUgc28geW91IGNhbiBzZWUgd2hhdCBoYXBwZW5lZDsgQ09O VElOVUUiLAorIiAgbWVhbnMgdG8gcmVzdW1lIHRoZSBDT05ORUNUIHNlc3Npb24gKGUuZy4gc28g YSBmYXItZW5kIHNjcmlwdCBjYW4gY29udGludWUiLAorIiAgaXRzIHdvcmspLiIsCisiICIsCisK KyNlbmRpZiAvKiBPUzIgKi8KKworI2lmZGVmIE9TMgorIlNFVCBURVJNSU5BTCBCRUxMIHsgQVVE SUJMRSwgVklTSUJMRSwgTk9ORSB9IiwKKyIgIFNwZWNpZmllcyBob3cgQ29udHJvbC1HIChiZWxs KSBjaGFyYWN0ZXJzIGFyZSBoYW5kbGVkLiAgQVVESUJMRSBtZWFucyIsCisiICBhIGJlZXAgaXMg c291bmRlZDsgVklTSUJMRSBtZWFucyB0aGUgc2NyZWVuIGlzIGZsYXNoZWQgbW9tZW50YXJpbHku IiwKKyIgIiwKKyIgIChUaGlzIGNvbW1hbmQgaGFzIGJlZW4gc3VwZXJzZWRlZCBieSBTRVQgQkVM TC4pIiwKKyIgIiwKKyNlbmRpZiAvKiBPUzIgKi8KKworIlNFVCBURVJNSU5BTCBCWVRFU0laRSB7 IDcsIDggfSIsCisiICBVc2UgNy0gb3IgOC1iaXQgY2hhcmFjdGVycyBiZXR3ZWVuIEtlcm1pdCBh bmQgdGhlIHJlbW90ZSBjb21wdXRlciBkdXJpbmciLAorIiAgdGVybWluYWwgc2Vzc2lvbnMuICBU aGUgZGVmYXVsdCBpcyA4LiIsCisiICIsCisKKyNpZm5kZWYgTk9DU0VUUworI2lmZGVmIE9TMgor IlNFVCBURVJNSU5BTCBDSEFSQUNURVItU0VUIDxyZW1vdGUtY3M+IiwKKyIgIFNwZWNpZmllcyB0 aGUgY2hhcmFjdGVyIHNldCB1c2VkIGJ5IHRoZSByZW1vdGUgaG9zdCwgPHJlbW90ZS1jcz4uIiwK KyIgIEVxdWl2YWxlbnQgdG8gU0VUIFRFUk0gUkVNT1RFLUNIQVJBQ1RFUi1TRVQgPHJlbW90ZS1j cz4gQUxMLiAgRm9yIG1vcmUiLAorIiAgY29udHJvbCBvdmVyIHRoZSBkZXRhaWxzLCB1c2UgU0VU IFRFUk0gUkVNT1RFLUNIQVJBQ1RFUi1TRVQgYW5kIChpbiIsCisiICBub24tR1VJIEs5NSB2ZXJz aW9ucykgU0VUIFRFUk0gTE9DQUwtQ0hBUkFDVEVSLVNFVDsgdGhlc2UgYXJlIGV4cGxhaW5lZCIs CisiICBiZWxvdy4gIFRoZSBkZWZhdWx0IFRFUk1JTkFMIENIQVJBQ1RFUi1TRVQgaXMgTEFUSU4x IChJU08gODg1OS0xKS4iLAorI2Vsc2UgIC8qIG5vdCBPUzIgKi8KKyJTRVQgVEVSTUlOQUwgQ0hB UkFDVEVSLVNFVCA8cmVtb3RlLWNzPiBbIDxsb2NhbC1jcz4gXSIsCisiICBTcGVjaWZpZXMgdGhl IGNoYXJhY3RlciBzZXQgdXNlZCBieSB0aGUgcmVtb3RlIGhvc3QsIDxyZW1vdGUtY3M+LCBhbmQg dGhlIiwKKyIgIGNoYXJhY3RlciBzZXQgdXNlZCBieSBDLUtlcm1pdCBsb2NhbGx5LCA8bG9jYWwt Y3M+LiAgSWYgeW91IGRvbid0IHNwZWNpZnkiLAorIiAgdGhlIGxvY2FsIGNoYXJhY3RlciBzZXQs IHRoZSBjdXJyZW50IEZJTEUgQ0hBUkFDVEVSLVNFVCBpcyB1c2VkLiAgV2hlbiIsCisiICB5b3Ug c3BlY2lmeSB0d28gZGlmZmVyZW50IGNoYXJhY3RlciBzZXRzLCBDLUtlcm1pdCB0cmFuc2xhdGVz IGJldHdlZW4gdGhlbSIsCisiICBkdXJpbmcgQ09OTkVDVC4gIEJ5IGRlZmF1bHQsIGJvdGggY2hh cmFjdGVyIHNldHMgYXJlIFRSQU5TUEFSRU5ULCBhbmQiLAorIiAgbm8gdHJhbnNsYXRpb24gaXMg ZG9uZS4iLAorI2VuZGlmIC8qIE9TMiAqLworIiAiLAorI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKwor I2lmZGVmIE9TMgorCisiU0VUIFRFUk1JTkFMIENPREUtUEFHRSA8bnVtYmVyPiIsCisiICBMZXRz IHlvdSBjaGFuZ2UgdGhlIFBDIGNvZGUgcGFnZS4gIE9ubHkgd29ya3MgZm9yIGNvZGUgcGFnZXMg dGhhdCBhcmUiLAorIiAgc3VjY2Vzc2Z1bGx5IHByZXBhcmVkIGluIENPTkZJRy5TWVMuICBVc2Ug U0hPVyBURVJNSU5BTCB0byBsaXN0IHRoZSIsCisiICBjdXJyZW50IGNvZGUgcGFnZSBhbmQgdGhl IGF2YWlsYWJsZSBjb2RlIHBhZ2VzLiIsCisjaWZkZWYgT1MyT05MWQorIiAiLAorIiAgQWxzbyBz ZWUgU0VUIFRFUk1JTkFMIEZPTlQgaWYgdGhlIGRlc2lyZWQgY29kZSBwYWdlIGluIG5vdCBhdmFp bGFibGUgaW4iLAorIiAgeW91ciB2ZXJzaW9uIG9mIE9TLzIuIiwKKyNlbmRpZiAvKiBPUzJPTkxZ ICovCisiICIsCisKKyNpZm5kZWYgTlQKKyJTRVQgVEVSTUlOQUwgQ09MT1IgQk9SREVSIDxmb3Jl Z3JvdW5kPiIsCisjZW5kaWYgLyogTlQgKi8KKyJTRVQgVEVSTUlOQUwgQ09MT1IgPHNjcmVlbnBh cnQ+IDxmb3JlZ3JvdW5kPiA8YmFja2dyb3VuZD4iLAorIiBTZXRzIHRoZSBjb2xvcnMgb2YgdGhl IHRlcm1pbmFsIGVtdWxhdGlvbiBzY3JlZW4uIiwKKyIgPHNjcmVlbnBhcnQ+IG1heSBiZSBhbnkg b2YgdGhlIGZvbGxvd2luZzoiLAorIiAgREVCVUcsIEhFTFAtVEVYVCwgUkVWRVJTRSwgU0VMRUNU SU9OLCBTVEFUVVMtTElORSwgVEVSTUlOQUwtU0NSRUVOLCBvciIsCisiICBVTkRFUkxJTkVELVRF WFQuIiwKKyIgPGZvcmVncm91bmQ+IGFuZCA8YmFja2dyb3VuZD4gbWF5IGJlIGFueSBvZjoiLAor IiAgQkxBQ0ssIEJMVUUsIEdSRUVOLCBDWUFOLCBSRUQsIE1BR0VOVEEsIEJST1dOLCBMR1JBWSwg REdSQVksIExCTFVFLCIsCisiICBMR1JFRU4sIExDWUFOLCBMUkVELCBMTUFHRU5UQSwgWUVMTE9X IG9yIFdISVRFLiIsCisiIFRoZSBMIHByZWZpeCBmb3IgdGhlIGNvbG9yIG5hbWVzIG1lYW5zIExp Z2h0LiIsCisiICIsCisKKyJTRVQgVEVSTUlOQUwgQ09MT1IgRVJBU0UgeyBDVVJSRU5ULUNPTE9S LCBERUZBVUxULUNPTE9SIH0iLAorIiAgRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBjdXJyZW50IGNv bG9yIGFzIHNldCBieSB0aGUgaG9zdCBvciB0aGUgZGVmYXVsdCIsCisiICBjb2xvciBhcyBzZXQg YnkgdGhlIHVzZXIgKFNFVCBURVJNSU5BTCBDT0xPUiBURVJNSU5BTCkgaXMgdXNlZCB0byBjbGVh ciIsCisiICB0aGUgc2NyZWVuIHdoZW4gZXJhc2UgY29tbWFuZHMgYXJlIHJlY2VpdmVkIGZyb20g dGhlIGhvc3QuIiwKKyIgIiwKKworIlNFVCBURVJNSU5BTCBDT0xPUiBSRVNFVC1PTi1FU0NbMG0g eyBDVVJSRU5ULUNPTE9SLCBERUZBVUxULUNPTE9SIH0iLAorIiAgRGV0ZXJtaW5lcyB3aGV0aGVy IHRoZSBjdXJyZW50IGNvbG9yIG9yIHRoZSBkZWZhdWx0IGNvbG9yIGlzIHVzZWQgYWZ0ZXIiLAor IiAgPEVTQz5bMG0gKFwicmVzZXQgYXR0cmlidXRlc1wiKSBjb21tYW5kIHNlcXVlbmNlIGlzIHJl Y2VpdmVkIGZyb20gdGhlIiwKKyIgIGhvc3QuIiwKKyIgIiwKKworIlNFVCBURVJNSU5BTCBDT05U Uk9MUyB7IDcsIDggfSIsCisiICBEZXRlcm1pbmVzIHdoZXRoZXIgVlQyMjAvMzIwIG9yIFd5c2Ug MzcwIGZ1bmN0aW9uIGtleXMsIGFycm93IGtleXMsIGV0YywiLAorIiAgdGhhdCBnZW5lcmF0ZSBB TlNJLWZvcm1hdCBlc2NhcGUgc2VxdWVuY2VzIHNob3VsZCBzZW5kIDgtYml0IGNvbnRyb2wiLAor IiAgY2hhcmFjdGVycyBvciA3LWJpdCBlc2NhcGUgc2VxdWVuY2VzLiIsCisiICIsCisjZW5kaWYg LyogT1MyICovCisKKyJTRVQgVEVSTUlOQUwgQ1ItRElTUExBWSB7IENSTEYsIE5PUk1BTCB9IiwK KyIgIFNwZWNpZmllcyBob3cgaW5jb21pbmcgY2FycmlhZ2UgcmV0dXJuIGNoYXJhY3RlcnMgYXJl IHRvIGJlIGRpc3BsYXllZCIsCisiICBvbiB5b3VyIHNjcmVlbi4iLAorIiAiLAorCisjaWZkZWYg T1MyCisjaWZkZWYgS1VJCisiU0VUIFRFUk1JTkFMIENVUlNPUiB7IEZVTEwsIEhBTEYsIFVOREVS TElORSB9IHtPTiwgT0ZGLCBOT0JMSU5LfSIsCisiICBTZWxlY3RzIHRoZSBjdXJzb3Igc3R5bGUg YW5kIHZpc2liaWxpdHkgZm9yIHRoZSB0ZXJtaW5hbCBzY3JlZW4uIiwKKyNlbHNlCisiU0VUIFRF Uk1JTkFMIENVUlNPUiB7IEZVTEwsIEhBTEYsIFVOREVSTElORSB9IHtPTiwgT0ZGfSIsCisiICBT ZWxlY3RzIHRoZSBjdXJzb3Igc3R5bGUgYW5kIHZpc2liaWxpdHkgZm9yIHRoZSB0ZXJtaW5hbCBz Y3JlZW4uIiwKKyNlbmRpZiAvKiBLVUkgKi8KKyIgIiwKKyNlbmRpZiAvKiBPUzIgKi8KKworIlNF VCBURVJNSU5BTCBERUJVRyB7IE9OLCBPRkYgfSIsCisiICBUdXJucyB0ZXJtaW5hbCBzZXNzaW9u IGRlYnVnZ2luZyBvbiBhbmQgb2ZmLiAgV2hlbiBPTiwgaW5jb21pbmcgY29udHJvbCIsCisiICBj aGFyYWN0ZXJzIGFyZSBkaXNwbGF5ZWQgc3ltYm9saWNhbGx5LCByYXRoZXIgdGhhbiBiZSB0YWtl biBhcyBmb3JtYXR0aW5nIiwKKyIgIGNvbW1hbmRzLiAgU0VUIFRFUk1JTkFMIERFQlVHIE9OIGlt cGxpZXMgU0VUIFRFTE5FVCBERUJVRyBPTi4iLAorIiAiLAorI2lmZGVmIE9TMgorIlNFVCBURVJN SU5BTCBERy1VTklYLU1PREUgeyBPTiwgT0ZGIH0iLAorIiAgU3BlY2lmaWVzIHdoZXRoZXIgdGhl IERhdGEgR2VuZXJhbCBlbXVsYXRpb25zIHNob3VsZCBhY2NlcHQgY29udHJvbCIsCisiICBzZXF1 ZW5jZXMgaW4gVW5peCBjb21wYXRpYmxlIGZvcm1hdCBvciBpbiBuYXRpdmUgREcgZm9ybWF0LiAg VGhlIiwKKyIgIGRlZmF1bHQgaXMgT0ZGLCBERyBmb3JtYXQuIiwKKyIgIiwKKyNlbmRpZiAvKiBP UzIgKi8KKworIlNFVCBURVJNSU5BTCBFQ0hPIHsgTE9DQUwsIFJFTU9URSB9IiwKKyIgIFNwZWNp ZmllcyB3aGljaCBzaWRlIGRvZXMgdGhlIGVjaG9pbmcgZHVyaW5nIHRlcm1pbmFsIGNvbm5lY3Rp b24uIiwKKyIgIiwKKworIlNFVCBURVJNSU5BTCBFU0NBUEUtQ0hBUkFDVEVSIHsgRU5BQkxFRCwg RElTQUJMRUQgfSIsCisiICBUdXJucyBvbi9vZmYgdGhlIGFiaWxpdHkgdG8gZXNjYXBlIGJhY2sg ZnJvbSBDT05ORUNUIG1vZGUgdXNpbmcgdGhlIFNFVCIsCisjaWZkZWYgT1MyCisiICBFU0NBUEUg Y2hhcmFjdGVyLiAgSWYgeW91IGRpc2FibGUgaXQgeW91IGNhbiBzdGlsbCBnZXQgYmFjayB1c2lu ZyBBbHQta2V5IiwKKyIgIGNvbWJpbmF0aW9ucyBhcyBzaG93biBpbiB0aGUgc3RhdHVzIGxpbmUu ICBBbHNvIHNlZSBIRUxQIFNFVCBFU0NBUEUuIiwKKyNlbHNlCisiICBFU0NBUEUgY2hhcmFjdGVy LiAgSWYgeW91IGRpc2FibGUgaXQsIEtlcm1pdCByZXR1cm5zIHRvIGl0cyBwcm9tcHQgb25seSIs CisiICB3aGVuIHRoZSBjb25uZWN0aW9uIGlzIGNsb3NlZCBieSB0aGUgb3RoZXIgZW5kLiAgVVNF IFdJVEggRVhUUkVNRSBDQVVUSU9OLiIsCisiICBBbHNvIHNlZSBIRUxQIFNFVCBFU0NBUEUuIiwK KyNlbmRpZiAvKiBPUzIgKi8KKyIgIiwKKworI2lmZGVmIE9TMgorI2lmZGVmIEtVSQorIlNFVCBU RVJNSU5BTCBGT05UIDxmYWNlbmFtZT4gPGhlaWdodD4iLAorIiAgU3BlY2lmaWVzIHRoZSBmb250 IHRvIGJlIHVzZWQgaW4gdGhlIEtlcm1pdCA5NSB3aW5kb3cuICBUaGUgZm9udCBpcyIsCisiICBk ZXRlcm1pbmVkIGJ5IHRoZSBjaG9pY2Ugb2YgYSBmYWNlbmFtZSBhbmQgYSBoZWlnaHQgbWVhc3Vy ZWQgaW4gUG9pbnRzLiIsCisiICBUaGUgYXZhaWxhYmxlIGZhY2VuYW1lcyBhcmUgdGhvc2UgaW5z dGFsbGVkIGluIHRoZSBGb250IENvbnRyb2wgUGFuZWwuIiwKKyIgIiwKKyNlbHNlIC8qIEtVSSAq LworI2lmZGVmIE9TMk9OTFkKKyJTRVQgVEVSTUlOQUwgRk9OVCB7IENQNDM3LCBDUDg1MCwgQ1A4 NTIsIENQODYyLCBDUDg2NiwgREVGQVVMVCB9IiwKKyIgIENQNDM3IC0gT3JpZ2luYWwgUEMgY29k ZSBwYWdlIiwKKyIgIENQODUwIC0gXCJNdWx0aWxpbmd1YWxcIiAoV2VzdCBFdXJvcGUpIGNvZGUg cGFnZSIsCisiICBDUDg1MiAtIEVhc3QgRXVyb3BlIFJvbWFuIEFscGhhYmV0IGNvZGUgcGFnZSAo Zm9yIEN6ZWNoLCBQb2xpc2gsIGV0YykiLAorIiAgQ1A4NjIgLSBIZWJyZXcgY29kZSBwYWdlIiwK KyIgIENQODY2IC0gQ3lyaWxsaWMgKFJ1c3NpYW4sIEJlbG9ydXNzaWFuLCBhbmQgVWtyYWluaWFu KSBjb2RlIHBhZ2UiLAorIiAiLAorIiAgTG9hZHMgYSBzb2Z0IGludG8gdGhlIHZpZGVvIGFkYXB0 ZXIgZm9yIHVzZSBkdXJpbmcgdGVybWluYWwgZW11bGF0aW9uLiIsCisiICBVc2UgdGhpcyBjb21t YW5kIHdoZW4geW91ciBPUy8yIHN5c3RlbSBkb2VzIG5vdCBoYXZlIHRoZSBkZXNpcmVkIGNvZGUu IiwKKyIgIHBhZ2UuICBDYW4gYmUgdXNlZCBvbmx5IGluIGZ1bGwtc2NyZWVuIHNlc3Npb25zLiAg QWxzbyBzZWUgU0VUIFRFUk1JTkFMIiwKKyIgIENPREUtUEFHRSBhbmQgU0VUIFRFUk1JTkFMIFJF TU9URS1DSEFSQUNURVItU0VULiIsCisiICIsCisjZW5kaWYgLyogT1MyT05MWSAqLworI2VuZGlm IC8qIEtVSSAqLworCisjaWZkZWYgTlQKKyJTRVQgVEVSTUlOQUwgSEVJR0hUIDxudW1iZXI+IiwK KyIgIENoYW5nZXMgdGhlIG51bWJlciBvZiByb3dzIChsaW5lcykgdG8gdXNlIGR1cmluZyB0ZXJt aW5hbCBlbXVsYXRpb24sIG5vdCIsCisiICBjb3VudGluZyB0aGUgc3RhdHVzIGxpbmUuICBSZWNv bW1lbmRlZCB2YWx1ZXMgYXJlIDI0LCA0MiwgYW5kIDQ5IChvciAyNSwiLAorIiAgNDMsIGFuZCA1 MCBpZiBTRVQgVEVSTUlOQUwgU1RBVFVTTElORSBpcyBPRkYuKSIsCisjZWxzZQorIlNFVCBURVJN SU5BTCBIRUlHSFQgPG51bWJlcj4iCisiICBDaGFuZ2VzIHRoZSBudW1iZXIgb2Ygcm93cyAobGlu ZXMpIHRvIHVzZSBkdXJpbmcgdGVybWluYWwgZW11bGF0aW9uLCBub3QiLAorIiAgY291bnRpbmcg dGhlIHN0YXR1cyBsaW5lLiAgV2luZG93ZWQgc2Vzc2lvbnMgY2FuIHVzZSBhbnkgdmFsdWUgZnJv bSA4IHRvIiwKKyIgIDEwMS4gIEZ1bGxzY3JlZW4gc2Vzc2lvbnMgYXJlIGxpbWl0ZWQgdG8gMjQs IDQyLCA0OSwgb3IgNTkuICBOb3QgYWxsIgorIiAgaGVpZ2h0cyBhcmUgc3VwcG9ydGVkIGJ5IGFs bCB2aWRlbyBhZGFwdGVycy4iLAorI2VuZGlmIC8qIE5UICovCisjZWxzZSAgLyogT1MyICovCisi U0VUIFRFUk1JTkFMIEhFSUdIVCA8bnVtYmVyPiIsCisiICBUZWxscyBDLUtlcm1pdCBob3cgbWFu eSByb3dzIChsaW5lcykgYXJlIG9uIHlvdXIgQ09OTkVDVC1tb2RlIHNjcmVlbi4iLAorI2VuZGlm IC8qIE9TMiAqLworIiAiLAorCisjaWZkZWYgQ0tUSURMRQorIlNFVCBURVJNSU5BTCBJRExFLVRJ TUVPVVQgPG51bWJlcj4iLAorIiAgU2V0cyB0aGUgbGltaXQgb24gaWRsZSB0aW1lIGluIENPTk5F Q1QgbW9kZSB0byB0aGUgZ2l2ZW4gbnVtYmVyIG9mIiwKKyIgIHNlY29uZHMuICAwICh0aGUgZGVm YXVsdCkgbWVhbnMgbm8gbGltaXQuIiwKKyIgIiwKKyJTRVQgVEVSTUlOQUwgSURMRS1BQ1RJT04g eyBFWElULCBIQU5HVVAsIE9VVFBVVCBbIHRleHQgXSwgUkVUVVJOIH0iLAorIiAgU3BlY2lmaWVz IHRoZSBhY3Rpb24gdG8gYmUgdGFrZW4gd2hlbiBhIENPTk5FQ1Qgc2Vzc2lvbiBpcyBpZGxlIGZv ciB0aGUiLAorIiAgbnVtYmVyIG9mIHNlY29uZHMgZ2l2ZW4gYnkgU0VUIFRFUk1JTkFMIElETEUt VElNRU9VVC4gIFRoZSBkZWZhdWx0IGFjdGlvbiIsCisiICBpcyB0byBSRVRVUk4gdG8gY29tbWFu ZCBtb2RlLiAgRVhJVCBleGl0cyBmcm9tIEtlcm1pdDsgSEFOR1VQIGhhbmdzIHVwIHRoZSIsCisi ICBjb25uZWN0aW9uLCBhbmQgT1VUUFVUIHNlbmRzIHRoZSBnaXZlbiB0ZXh0IHRvIHRoZSBob3N0 IHdpdGhvdXQgbGVhdmluZyIsCisiICBDT05ORUNUIG1vZGU7IGlmIG5vIHRleHQgaXMgZ2l2ZW4g YSBOVUwgKDApIGNoYXJhY3RlciBpcyBzZW50LiIsCisjaWZkZWYgVE5DT0RFCisiICIsCisiU0VU IFRFUk1JTkFMIElETEUtQUNUSU9OIHsgVEVMTkVULU5PUCwgVEVMTkVULUFZVCB9IiwKKyIgIEZv ciBURUxORVQgY29ubmVjdGlvbnMgb25seTogU2VuZHMgdGhlIGluZGljYXRlZCBUZWxuZXQgcHJv dG9jb2wgbWVzc2FnZToiLAorIiAgTm8gT3BlcmF0aW9uIChOT1ApIG9yIFwiQXJlIFlvdSBUaGVy ZT9cIiAoQVlUKS4iLAorI2VuZGlmIC8qIFROQ09ERSAqLworIiAiLAorI2VuZGlmIC8qIENLVElE TEUgKi8KKworI2lmZGVmIE9TMgorCisiU0VUIFRFUk1JTkFMIEtEQi1GT0xMT1dTLUdML0dSIHsg T04sIE9GRiB9IiwKKyIgU3BlY2lmaWVzIHdoZXRoZXIgb3Igbm90IHRoZSBrZXlib2FyZCBjaGFy YWN0ZXIgc2V0IHNob3VsZCBmb2xsb3cgdGhlIiwKKyIgIGFjdGl2ZSBHTCBhbmQgR1IgY2hhcmFj dGVyIHNldHMuICBUaGlzIGZlYXR1cmUgaXMgT0ZGIGJ5IGRlZmF1bHQgYW5kIiwKKyIgIHNob3Vs ZCBub3QgYmUgdXNlZCB1bmxlc3MgaXQgaXMgc3BlY2lmaWNseSByZXF1aXJlZCBieSB0aGUgaG9z dCIsCisiICBhcHBsaWNhdGlvbi4iLAorIiAiLAorCisiU0VUIFRFUk1JTkFMIEtFWSA8bW9kZT4g L0xJVEVSQUwgPGtleWNvZGU+IDx0ZXh0PiIsCisiU0VUIFRFUk1JTkFMIEtFWSA8bW9kZT4gREVG QVVMVCIsCisiU0VUIFRFUk1JTkFMIEtFWSA8bW9kZT4gQ0xFQVIiLAorIiAgQ29uZmlndXJlcyB0 aGUga2V5IHdob3NlIDxrZXljb2RlPiBpcyBnaXZlbiB0byBzZW5kIHRoZSBnaXZlbiB0ZXh0IHdo ZW4iLAorIiAgcHJlc3NlZCB3aGlsZSA8bW9kZT4gaXMgYWN0aXZlLiAgPG1vZGU+IG1heSBiZSBh bnkgb2YgdGhlIHZhbGlkIHRlcm1pbmFsIiwKKyIgIHR5cGVzIG9yIHRoZSBzcGVjaWFsIG1vZGVz IFwiRU1BQ1NcIiwgXCJIRUJSRVdcIiBvciBcIlJVU1NJQU5cIi4gIERFRkFVTFQiLAorIiAgcmVz dG9yZXMgYWxsIGRlZmF1bHQga2V5IG1hcHBpbmdzIGZvciB0aGUgc3BlY2lmaWVkIG1vZGUuICBD TEVBUiBlcmFzZXMiLAorIiAgYWxsIHRoZSBrZXkgbWFwcGluZ3MuICBJZiB0aGVyZSBpcyBubyB0 ZXh0LCB0aGUgZGVmYXVsdCBrZXkgYmluZGluZyBpcyIsCisjaWZuZGVmIE5PQ1NFVFMKKyIgIHJl c3RvcmVkIGZvciB0aGUga2V5IGsuICBTRVQgVEVSTUlOQUwgS0VZIG1hcHBpbmdzIHRha2UgcGxh Y2UgYmVmb3JlIiwKKyIgIHRlcm1pbmFsIGNoYXJhY3Rlci1zZXQgdHJhbnNsYXRpb24uICBTRVQg S0VZIG1hcHBpbmdzIHRha2UgcHJlY2VkZW5jZSBvdmVyIiwKKyIgIFNFVCBURVJNSU5BTCBLRVkg PHRlcm1pbmFsIHR5cGU+IHNldHRpbmdzLiIsCisjZWxzZQorIiAgcmVzdG9yZWQgZm9yIHRoZSBr ZXkuICBTRVQgS0VZIG1hcHBpbmdzIHRha2UgcHJlY2VkZW5jZSBvdmVyIFNFVCBURVJNSU5BTCIs CisiICBLRVkgPHRlcm1pbmFsIHR5cGU+IHNldHRpbmdzLiIsCisjZW5kaWYgLyogTk9DU0VUUyAq LworIiAgVGhlIC9MSVRFUkFMIHN3aXRjaCBtYXkgYmUgdXNlZCB0byBpbnN0cnVjdCBLZXJtaXQg dG8gaWdub3JlIGNoYXJhY3Rlci1zZXQiLAorIiAgdHJhbnNsYXRpb25zIHdoZW4gc2VuZGluZyB0 aGlzIGRlZmluaXRpb24gdG8gdGhlIGhvc3QuIiwKKyIgIiwKKyIgIFRoZSB0ZXh0IG1heSBjb250 YWluIFwiXFxLdmVyYnNcIiB0byBkZW5vdGUgYWN0aW9ucywgdG8gc3RhbmQgZm9yIERFQyIsCisi ICBrZXlwYWQsIGZ1bmN0aW9uLCBvciBlZGl0aW5nIGtleXMsIGV0Yy4gIEZvciBhIGxpc3Qgb2Yg YXZhaWxhYmxlIGtleWJvYXJkIiwKKyIgIHZlcmJzLCB0eXBlIFNIT1cgS1ZFUkJTLiIsCisiICIs CisiICBUbyBmaW5kIG91dCB0aGUga2V5Y29kZSBhbmQgbWFwcGluZyBmb3IgYSBwYXJ0aWN1bGFy IGtleSwgdXNlIHRoZSBTSE9XIiwKKyIgIEtFWSBjb21tYW5kLiAgVXNlIHRoZSBTQVZFIEtFWVMg Y29tbWFuZCB0byBzYXZlIGFsbCBzZXR0aW5ncyB0byBhIGZpbGUuIiwKKyIgIiwKKyJTRVQgVEVS TUlOQUwgS0VZQk9BUkQtTU9ERSB7IE5PUk1BTCwgRU1BQ1MsIFJVU1NJQU4sIEhFQlJFVyB9IiwK KyIgIFNlbGVjdCBhIHNwZWNpYWwga2V5Ym9hcmQgbW9kZSBmb3IgdXNlIGluIHRoZSB0ZXJtaW5h bCBzY3JlZW4uIiwKKyIgIiwKKworIlNFVCBURVJNSU5BTCBLRVlQQUQtTU9ERSB7IEFQUExJQ0FU SU9OLCBOVU1FUklDIH0iLAorIiAgU3BlY2lmaWVzIHRoZSBcIm1vZGVcIiBvZiB0aGUgbnVtZXJp YyBrZXlwYWQgZm9yIFZUIHRlcm1pbmFsIGVtdWxhdGlvbi4iLAorIiAgVXNlIHRoaXMgY29tbWFu ZCBpbiBjYXNlIHRoZSBob3N0IG9yIGFwcGxpY2F0aW9uIHdhbnRzIHRoZSBrZXlwYWQgdG8gYmUi LAorIiAgaW4gYSBkaWZmZXJlbnQgbW9kZSB0aGFuIGl0J3MgaW4sIGJ1dCBkaWQgbm90IHNlbmQg dGhlIGVzY2FwZSBzZXF1ZW5jZSIsCisiICB0byBwdXQgaXQgaW4gdGhlIG5lZWRlZCBtb2RlLiIs CisiICIsCisKKyNlbmRpZgkvKiBPUzIgKi8KKworIlNFVCBURVJNSU5BTCBMRi1ESVNQTEFZIHsg Q1JMRiwgTk9STUFMIH0iLAorIiAgU3BlY2lmaWVzIGhvdyBpbmNvbWluZyBsaW5lZmVlZCBjaGFy YWN0ZXJzIGFyZSB0byBiZSBkaXNwbGF5ZWQiLAorIiAgb24geW91ciBzY3JlZW4uIiwKKyIgIiwK KworI2lmZGVmIE9TMgorCisjaWZkZWYgS1VJCisiU0VUIFRFUk1JTkFMIExJTkUtU1BBQ0lORyA8 ZmxvYXQ+IiwKKyIgIFNwZWNpZmllcyB0aGUgbGluZSBzcGFjaW5nIHVzZWQgd2hlbiBkaXNwbGF5 aW5nIHRleHQuICBUaGUgZGVmYXVsdCBpcyAxLjAuIiwKKyIgIFZhbGlkIHZhbHVlcyByYW5nZSBm cm9tIDEuMCB0byAzLjAgaW5jbHVzaXZlLiIsCisiICIsCisjZW5kaWYgLyogS1VJICovCisjZW5k aWYgLyogT1MyICovCisKKyNpZm5kZWYgTk9DU0VUUworI2lmZGVmIE9TMgorIlNFVCBURVJNSU5B TCBMT0NBTC1DSEFSQUNURVItU0VUIDxsb2NhbC1jcz4iLAorIiAgU3BlY2lmaWVzIHRoZSBjaGFy YWN0ZXIgc2V0IHVzZWQgYnkgSy05NSBsb2NhbGx5LiAgSWYgeW91IGRvbid0IHNwZWNpZnkiLAor I2lmZGVmIE9TMk9OTFkKKyIgIHRoZSBsb2NhbCBjaGFyYWN0ZXItc2V0LCB0aGUgY3VycmVudCBU RVJNSU5BTCBGT05UIGlzIHVzZWQgaWYgeW91IGhhdmUiLAorIiAgZ2l2ZW4gYSBTRVQgVEVSTUlO QUwgRk9OVCBjb21tYW5kOyBvdGhlcndpc2UgdGhlIGN1cnJlbnQgY29kZXBhZ2UgaXMgdXNlZC4i LAorI2Vsc2UKKyIgIHRoZSBsb2NhbCBjaGFyYWN0ZXItc2V0LCB0aGUgY3VycmVudCBjb2RlIHBh Z2UgaXMgdXNlZC4iLAorI2VuZGlmIC8qIE9TMk9OTFkgKi8KKyIgIiwKKyIgIFdoZW4gdGhlIGxv Y2FsIGFuZCByZW1vdGUgY2hhcmFjdGVyIHNldHMgZGlmZmVyLCBLZXJtaXQgdHJhbnNsYXRlcyBi ZXR3ZWVuIiwKKyIgIHRoZW0gZHVyaW5nIENPTk5FQ1QuICBCeSBkZWZhdWx0LCB0aGUgcmVtb3Rl IGNoYXJhY3RlciBzZXQgaXMgTGF0aW4xIGFuZCIsCisiICB0aGUgbG9jYWwgb25lIGlzIHlvdXIg Y3VycmVudCBjb2RlIHBhZ2UuIiwKKyNpZmRlZiBOVAorIiAiLAorIiAgSW4gV2luZG93cyBOVCwg VW5pY29kZSBpcyB1c2VkIGFzIHRoZSBsb2NhbCBjaGFyYWN0ZXItc2V0IHJlZ2FyZGxlc3Mgb2Yi LAorIiAgdGhpcyBzZXR0aW5nLiIsCisjZW5kaWYgLyogTlQgKi8KKyIgIiwKKyJTZWUgYWxzbyBT RVQgVEVSTUlOQUwgUkVNT1RFLUNIQVJBQ1RFUi1TRVQiLAorIiAiLAorI2VuZGlmIC8qIE9TMiAq LworI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKworI2lmZGVmIE9TMgorIlNFVCBURVJNSU5BTCBMT0NL SU5HLVNISUZUIHsgT0ZGLCBPTiB9IiwKKyIgIFRlbGxzIHdoZXRoZXIgdG8gc2VuZCBTaGlmdC1J bi9TaGlmdC1PdXQgKEN0cmwtTyBhbmQgQ3RybC1OKSB0byBzd2l0Y2giLAorIiAgYmV0d2VlbiA3 LWJpdCBhbmQgOC1iaXQgY2hhcmFjdGVycyBzZW50IGR1cmluZyB0ZXJtaW5hbCBlbXVsYXRpb24g b3ZlciIsCisiICA3LWJpdCBjb25uZWN0aW9ucy4gIE9GRiBieSBkZWZhdWx0LiIsCisjZWxzZQor IlNFVCBURVJNSU5BTCBMT0NLSU5HLVNISUZUIHsgT0ZGLCBPTiB9IiwKKyIgIFRlbGxzIEtlcm1p dCB3aGV0aGVyIHRvIHVzZSBTaGlmdC1Jbi9TaGlmdC1PdXQgKEN0cmwtTyBhbmQgQ3RybC1OKSB0 byIsCisiICBzd2l0Y2ggYmV0d2VlbiA3LWJpdCBhbmQgOC1iaXQgY2hhcmFjdGVycyBkdXJpbmcg Q09OTkVDVC4gIE9GRiBieSBkZWZhdWx0LiIsCisjZW5kaWYgLyogT1MyICovCisiICIsCisKKyNp ZmRlZiBPUzIKKyJTRVQgVEVSTUlOQUwgTUFSR0lOLUJFTEwgeyBPTiBbY29sdW1uXSwgT0ZGIH0i LAorIiAgRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBtYXJnaW4tYmVsbCBpcyBhY3RpdmF0ZWQgYW5k IHdoYXQgY29sdW1uIGl0IHNob3VsZCIsCisiICByaW5nIGF0LiAgT0ZGIGJ5IGRlZmF1bHQuIiwK KyIgIiwKKyNlbmRpZiAvKiBPUzIgKi8KKworIlNFVCBURVJNSU5BTCBORVdMSU5FLU1PREUgeyBP RkYsIE9OIH0iLAorIiAgVGVsbHMgd2hldGhlciB0byBzZW5kIENSTEYgKENhcnJpYWdlIFJldHVy biBhbmQgTGluZSBGZWVkKSB3aGVuIHlvdSB0eXBlIiwKKyIgIENSIChwcmVzcyB0aGUgUmV0dXJu IG9yIEVudGVyIGtleSkgaW4gQ09OTkVDVCBtb2RlLiIsCisiICIsCisKKyNpZmRlZiBPUzIKKyJT RVQgVEVSTUlOQUwgT1VUUFVULVBBQ0lORyA8bWlsbGlzZWNvbmRzPiIsCisiICBUZWxscyBob3cg bG9uZyB0byBwYXVzZSBiZXR3ZWVuIHNlbmRpbmcgZWFjaCBjaGFyYWN0ZXIgdG8gdGhlIGhvc3Qg ZHVyaW5nIiwKKyIgIENPTk5FQ1QgbW9kZS4gIE5vcm1hbGx5IG5vdCBuZWVkZWQgYnV0IHNvbWV0 aW1lcyByZXF1aXJlZCB0byB3b3JrIGFyb3VuZCIsCisiICBUUkFOU01JU1NJT04gQkxPQ0tFRCBj b25kaXRpb25zIHdoZW4gcGFzdGluZyBpbnRvIHRoZSB0ZXJtaW5hbCB3aW5kb3cuIiwKKyIgIiwK KworI2lmZGVmIFBDVEVSTQorIlNFVCBURVJNSU5BTCBQQ1RFUk0geyBPTiwgT0ZGIH0iLAorIiAg QWN0aXZhdGVzIG9yIGRlYWN0aXZhdGVzIHRoZSBQQ1RFUk0gdGVybWluYWwgZW11bGF0aW9uIGtl eWJvYXJkIG1vZGUuIiwKKyIgIFdoZW4gUENURVJNIGlzIE9OIGFsbCBrZXlzdHJva2VzIGluIHRo ZSB0ZXJtaW5hbCBzY3JlZW4gYXJlIHNlbnQgdG8gdGhlIiwKKyIgIGhvc3QgYXMgbWFrZS9icmVh ayAoZG93bi91cCkgY29kZXMgaW5zdGVhZCBvZiBhcyBjaGFyYWN0ZXJzIGZyb20gdGhlIiwKKyIg IFJFTU9URS1DSEFSQUNURVItU0VULCBhbmQgYWxsIGtleWJvYXJkIG1hcHBpbmdzLCBpbmNsdWRp bmcgS3ZlcmJzIGFuZCB0aGUiLAorIiAgZXNjYXBlIGNoYXJhY3RlciBhcmUgZGlzYWJsZWQuICBU byB0dXJuIG9mZiBQQ1RFUk0ga2V5Ym9hcmQgbW9kZSB3aGlsZSBpbiIsCisiICBDT05ORUNUIG1v ZGUgcHJlc3MgQ29udHJvbC1DYXBzTG9jay4gIFBDVEVSTSBpcyBPRkYgYnkgZGVmYXVsdC4iLAor IiAiLAorI2VuZGlmIC8qIFBDVEVSTSAqLworI2VuZGlmIC8qIE9TMiAqLworCisjaWZkZWYgT1My CisiU0VUIFRFUk1JTkFMIFBSSU5UIHsgQVVUTywgQ09QWSwgT0ZGLCBVU0VSIH0iLAorIiAgQWxs b3dzIHNlbGVjdGl2ZSBjb250cm9sIG9mIHZhcmlvdXMgdHlwZXMgb2YgcHJpbnRpbmcgZnJvbSB0 aGUgVGVybWluYWwiLAorIiAgc2Vzc2lvbi4gIEFVVE8gcHJpbnRzIGEgbGluZSBvZiB0ZXh0IGZy b20gdGhlIHRlcm1pbmFsIHNjcmVlbiB3aGVuZXZlciIsCisiICB0aGUgY3Vyc29yIGlzIG1vdmVk IG9mZiB0aGUgbGluZS4gIENPUFkgcHJpbnRzIGV2ZXJ5IGJ5dGUgcmVjZWl2ZWQgYXMiLAorIiAg aXQgaXMgcmVjZWl2ZWQgd2l0aG91dCBpbnRlcnByZXRhdGlvbi4gIFVTRVIgcHJpbnRzIGV2ZXJ5 IGJ5dGUgYWZ0ZXIiLAorIiAgaW50ZXJwcmV0YXRpb24gYnkgdGhlIHRlcm1pbmFsIGVtdWxhdG9y IHRyYW5zbGF0ZXMgY2hhcmFjdGVyLXNldHMgYW5kIiwKKyIgIGNvbnN0cnVjdCBlc2NhcGUgc2Vx dWVuY2VzLCAuLi4gIFRoZSBkZWZhdWx0IGlzIE9GRi4iLAorIiAiLAorI2Vsc2UKKyNpZmRlZiBY UFJJTlQKKyJTRVQgVEVSTUlOQUwgUFJJTlQgeyBPTiwgT0ZGIH0iLAorIiAgRW5hYmxlcyBhbmQg ZGlzYWJsZXMgaG9zdC1pbml0aWF0ZWQgdHJhbnNwYXJlbnQgcHJpbnRpbmcgaW4gQ09OTkVDVCBt b2RlLiIsCisiICIsCisjZW5kaWYgLyogWFBSSU5UICovCisjZW5kaWYgLyogT1MyICovCisKKyNp ZmRlZiBPUzIKKyNpZm5kZWYgTk9DU0VUUworIlNFVCBURVJNSU5BTCBSRU1PVEUtQ0hBUkFDVEVS LVNFVCA8cmVtb3RlLWNzPiBbIHsgRzAsRzEsRzIsRzMgfS4uLiBdIiwKKyIgIFNwZWNpZmllcyB0 aGUgY2hhcmFjdGVyIHNldCB1c2VkIGJ5IHRoZSByZW1vdGUgaG9zdCwgPHJlbW90ZS1jcz4uIiwK KyIgIFdoZW4gdGhlIGxvY2FsIGFuZCByZW1vdGUgY2hhcmFjdGVyIHNldHMgZGlmZmVyLCBLZXJt aXQgdHJhbnNsYXRlcyIsCisiICBiZXR3ZWVuIHRoZW0gZHVyaW5nIENPTk5FQ1QuICBCeSBkZWZh dWx0LCB0aGUgcmVtb3RlIGNoYXJhY3RlciBzZXQgaXMiLAorIiAgTGF0aW4xIGFuZCB0aGUgbG9j YWwgb25lIGlzIHlvdXIgY3VycmVudCBjb2RlIHBhZ2UuICBPcHRpb25hbGx5LCB5b3UgY2FuIiwK KyIgIGFsc28gZGVzaWduYXRlIHRoZSBjaGFyYWN0ZXIgc2V0IHRvIHRoZSBHMC4uRzMgZ3JhcGhp YyB0YWJsZXMuIiwKKyIgIiwKKyNlbmRpZiAvKiBOT0NTRVRTICovCisjZW5kaWYgLyogT1MyICov CisKKyNpZmRlZiBPUzIKKyJTRVQgVEVSTUlOQUwgUk9MTC1NT0RFIHsgSU5TRVJULCBPVkVSV1JJ VEUsIEtFWVNUUk9LRVMgWyBvcHRpb24gXSB9IiwKKyIgIFRlbGxzIHdoZXRoZXIgbmV3IGRhdGEg d2hlbiByZWNlaXZlZCBmcm9tIHRoZSBob3N0IGlzIGVudGVyZWQgaW50byB0aGUiLAorIiAgc2Ny b2xsYmFjayBidWZmZXIgYXQgdGhlIGN1cnJlbnQgcm9sbGJhY2sgcG9zaXRpb24gKE9WRVJXUklU RSkgb3IgYXQgdGhlIiwKKyIgIGVuZCBvZiB0aGUgYnVmZmVyIChJTlNFUlQpLiAgVGhlIGRlZmF1 bHQgaXMgSU5TRVJULiAgVHlwaW5nIGlzIGFsbG93ZWQiLAorIiAgZHVyaW5nIHJvbGxiYWNrcyBp biBlaXRoZXIgbW9kZSwgYWNjb3JkaW5nIHRvIFNFVCBURVJNIFJPTEwgS0VZU1RST0tFUzoiLAor IiAgU0VORCAodGhlIGRlZmF1bHQpIG1lYW5zIHRvIHByb2Nlc3Mga2V5c3Ryb2tlcyBub3JtYWxs eTsgSUdOT1JFIG1lYW5zIHRvIiwKKyIgIGlnbm9yZSB0aGVtIHdoZW4gdGhlIHNjcmVlbiBpcyBz Y3JvbGxlZCBiYWNrOyBSRVNUT1JFLUFORC1TRU5EIGlzIGxpa2UiLAorIiAgU0VORCBidXQgcmVz dG9yZXMgdGhlIHNjcmVlbiB0byBpdHMgYWN0aXZlIHBvc2l0aW9uIGZpcnN0LiIsCisiICIsCisK KyJTRVQgVEVSTUlOQUwgU0NSRUVOLU1PREUgeyBOT1JNQUwsIFJFVkVSU0UgfSIsCisiICBXaGVu IHNldCB0byBSRVZFUlNFIHRoZSBmb3JlZ3JvdW5kIGFuZCBiYWNrZ3JvdW5kIGNvbG9ycyBhcmUg c3dhcHBlZCBhcyIsCisiICB3ZWxsIGFzIHRoZSBhcHBsaWNhdGlvbiBvZiB0aGUgZm9yZWdyb3Vu ZCBhbmQgYmFja2dyb3VuZCBpbnRlbnNpdHkgYml0cy4iLAorIiAgVGhlIGRlZmF1bHQgaXMgTk9S TUFMLiIsCisiICIsCisKKyJTRVQgVEVSTUlOQUwgU0NSRUVOLU9QVElNSVpFIHsgT04sIE9GRiB9 IiwKKyIgIFdoZW4gc2V0IHRvIE9OLCB0aGUgZGVmYXVsdCwgS2VybWl0IG9ubHkgcGFpbnRzIHRo ZSBzY3JlZW4gd2l0aCBjaGFyYWN0ZXJzIiwKKyIgIHRoYXQgaGF2ZSBjaGFuZ2VkIHNpbmNlIHRo ZSBsYXN0IHNjcmVlbiBwYWludC4gIFdoZW4gT0ZGLCB0aGUgc2NyZWVuIGlzIiwKKyIgIGNvbXBs ZXRlbHkgcmVwYWludGVkIGVhY2ggdGltZSB0aGVyZSBpcyBhIGNoYW5nZS4iLAorIiAiLAorCisi U0VUIFRFUk1JTkFMIFNDUkVFTi1VUERBVEUgeyBGQVNULCBTTU9PVEggfSBbIDxtaWxsaXNlY29u ZHM+IF0iLAorIiAgQ2hvb3NlcyB0aGUgbWVjaGFuaXNtIHVzZWQgZm9yIHNjcmVlbiB1cGRhdGlu ZyBhbmQgdGhlIHVwZGF0ZSBmcmVxdWVuY3kuIiwKKyIgIERlZmF1bHRzIGFyZSBGQVNUIHNjcm9s bGluZyB3aXRoIHVwZGF0ZXMgZXZlcnkgMTAwIG1pbGxpc2Vjb25kcy4iLAorIiAiLAorCisiU0VU IFRFUk1JTkFMIFNDUk9MTEJBQ0sgPGxpbmVzPiIsCisiICBTZXRzIHNpemUgb2YgQ09OTkVDVCB2 aXJ0dWFsIHNjcmVlbiBidWZmZXIuICA8bGluZXM+IGluY2x1ZGVzIHRoZSBhY3RpdmUiLAorIiAg dGVybWluYWwgc2NyZWVuLiAgVGhlIG1pbmltdW0gaXMgMjU2LiAgVGhlIG1heGltdW0gaXMgMiBt aWxsaW9uLiAgVGhlIiwKKyIgIGRlZmF1bHQgaXMgMjAwMC4iLAorIiAiLAorCisiU0VUIFRFUk1J TkFMIFNFTkQtREFUQSB7IE9OLCBPRkYgfSIsCisiICBEZXRlcm1pbmVzIHdoZXRoZXIgQVNDSUkg ZW11bGF0aW9ucyBzdWNoIGFzIFdZU0UgMzAsNTAsNjAgb3IgVFZJIDkxMCssOTI1LCIsCisiICA5 NTAgbWF5IHNlbmQgdGhlaXIgc2NyZWVuIGNvbnRlbnRzIHRvIHRoZSBob3N0IHVwb24gcmVxdWVz dC4gIEFsbG93aW5nIHRoZSIsCisiICBzY3JlZW4gdG8gYmUgcmVhZCBieSB0aGUgaG9zdCBpcyBh IHNpZ25pZmljYW50IHNlY3VyaXR5IHJpc2suICBUaGUgZGVmYXVsdCIsCisiICBpcyBPRkYgYW5k IHNob3VsZCBvbmx5IGJlIGNoYW5nZWQgYWZ0ZXIgYSBzZWN1cml0eSBldmFsdWF0aW9uIG9mIGhv c3QiLAorIiAgZW52aXJvbm1lbnQuIiwKKyIgIiwKKworIlNFVCBURVJNSU5BTCBTRU5ELUVORC1P Ri1CTE9DSyB7IENSTEZfRVRYLCBVU19DUiB9IiwKKyIgIERldGVybWluZXMgd2hpY2ggc2V0IG9m IGNoYXJhY3RlcnMgc2hvdWxkIGJlIHVzZWQgYXMgZW5kIG9mIGxpbmUgYW5kIGVuZCIsCisiICBv ZiB0cmFuc21pc3Npb24gaW5kaWNhdG9ycyB3aGVuIHNlbmRpbmcgc2NyZWVuIGRhdGEgdG8gdGhl IGhvc3QiLAorIiAiLAorCisiU0VUIFRFUk1JTkFMIFNHUi1DT0xPUlMgeyBPTiwgT0ZGIH0iLAor IiAgT04gKGRlZmF1bHQpIG1lYW5zIGFsbG93IGhvc3QgY29udHJvbCBvZiBjb2xvcnM7IE9GRiBt ZWFucyBpZ25vcmUgaG9zdCIsCisiICBlc2NhcGUgc2VxdWVuY2VzIHRvIHNldCBjb2xvci4iLAor IiAiLAorCisiU0VUIFRFUk1JTkFMIFNOSS1DSC5DT0RFIHsgT04sIE9GRiB9IiwKKyIgIFRoaXMg Y29tbWFuZCBjb250cm9scyB0aGUgc3RhdGUgb2YgdGhlIENILkNPREUga2V5LiAgSXQgaXMgdGhl IGVxdWl2YWxlbnQiLAorIiAgdG8gdGhlIFNOSV9DSF9DT0RFIEtleWJvYXJkIHZlcmIuICBUaGUg U05JIHRlcm1pbmFsIHVzZXMgQ0guQ09ERSB0byIsCisiICBlYXNpbHkgc3dpdGNoIGJldHdlZW4g dGhlIE5hdGlvbmFsIExhbmd1YWdlIGNoYXJhY3RlciBzZXQgYW5kIFUuUy4gQVNDSUkuIiwKKyIg IFRoZSBkZWZhdWx0IGlzIE9OIHdoaWNoIG1lYW5zIHRvIGRpc3BsYXkgY2hhcmFjdGVycyBhcyBV LlMuIEFTQ0lJLiAgV2hlbiIsCisiICBPRkYgdGhlIGxhbnVhZ2Ugc3BlY2lmaWVkIGJ5IFNFVCBU RVJNSU5BTCBTTkktTEFOVUFHRSBpcyB1c2VkIHRvIGRpc3BsYXkiLAorIiAgY2hhcmFjdGVycyB3 aGVuIDctYml0IGNoYXJhY3RlciBzZXRzIGFyZSBpbiB1c2UuIiwKKyIgIiwKKyJTRVQgVEVSTUlO QUwgU05JLUZJUk1XQVJFLVZFUlNJT05TIDxrYmQtdmVyc2lvbj4gPHRlcm1pbmFsLXZlcnNpb24+ IiwKKyIgIFNwZWNpZmllcyB0aGUgRmlybXdhcmUgVmVyc2lvbiBudW1iZXIgdGhhdCBzaG91bGQg YmUgcmVwb3J0ZWQgdG8gdGhlIGhvc3QiLAorIiAgd2hlbiB0aGUgdGVybWluYWwgaXMgcXVlcmll ZC4gIFRoZSBkZWZhdWx0IGlzIDkyMDAzMSBmb3IgdGhlIGtleWJvYXJkIiwKKyIgIGFuZCA4MzA4 NTEgZm9yIHRoZSB0ZXJtaW5hbC4iLAorIiAiLAorIlNFVCBURVJNSU5BTCBTTkktTEFOR1VBR0Ug PG5hdGlvbmFsLWxhbmd1YWdlPiIsCisiICBBbiBhbGlhcyBmb3IgU0VUIFRFUk1JTkFMIFZULUxB TlVBR0UsIHRoaXMgY29tbWFuZCBzcGVjaWZpZXMgdGhlIG5hdGlvbmFsIiwKKyIgIGxhbmd1YWdl IGNoYXJhY3Rlci1zZXQgdGhhdCBzaG91bGQgYmUgdXNlZCB3aGVuIHRoZSBOUkMgbW9kZSBpcyBh Y3RpdmF0ZWQiLAorIiAgZm9yIFZUIGVtdWxhdGlvbnMgb3Igd2hlbiBDSC5DT0RFIGlzIE9GRiBm b3IgU05JIGVtdWxhdGlvbnMuICBUaGUgZGVmYXVsdCIsCisiICBsYW5ndWFnZSBmb3IgU0VUIFRF Uk1JTkFMIFRZUEUgU05JLTk3ODAxIGlzIFwiR2VybWFuXCIuIiwKKyIgIiwKKyJTRVQgVEVSTUlO QUwgU05JLVBBR0VNT0RFIHsgT04sIE9GRiB9IiwKKyIgIERldGVybWluZXMgd2hldGhlciBvciBu b3QgcGFnZSBtb2RlIGlzIGFjdGl2ZS4gIE9GRiBieSBkZWZhdWx0LiIsCisiICIsCisiU0VUIFRF Uk1JTkFMIFNOSS1TQ1JPTExNT0RFIHsgT04sIE9GRiB9IiwKKyIgIERldGVybWluZXMgd2hldGhl ciBvciBub3Qgc2Nyb2xsIG1vZGUgaXMgYWN0aXZlLiAgT0ZGIGJ5IGRlZmF1bHQuIiwKKyIgIiwK KyJTRVQgVEVSTUlOQUwgU1RBVFVTTElORSB7IE9OLCBPRkYgfSIsCisiICBPTiAoZGVmYXVsdCkg ZW5hYmxlcyB0aGUgS2VybWl0IHN0YXR1cyBsaW5lIGluIHRoZSB0ZXJtaW5hbCBzY3JlZW4uIiwK KyIgIE9GRiByZW1vdmVzIGl0LCBtYWtpbmcgdGhlIGxpbmUgYXZhaWxhYmxlIGZvciB1c2UgYnkg dGhlIGhvc3QuIiwKKyIgIiwKKworIlNFVCBURVJNSU5BTCBUUkFOU01JVC1USU1FT1VUIDxzZWNv bmRzPiIsCisiICBTcGVjaWZpZXMgdGhlIG1heGltdW0gYW1vdW50IG9mIHRpbWUgSy05NSB3YWl0 cyBiZWZvcmUgcmV0dXJuaW5nIHRvIHRoZSIsCisiICBwcm9tcHQgaWYgeW91ciBrZXlzdHJva2Vz IGNhbid0IGJlIHRyYW5zbWl0dGVkIGZvciBzb21lIHJlYXNvbiwgc3VjaCBhcyBhIiwKKyIgIGZs b3ctY29udHJvbCBkZWFkbG9jay4iLAorIiAiLAorI2VuZGlmIC8qIE9TMiAqLworCisjaWZkZWYg Q0tfVFJJR0dFUgorIlNFVCBURVJNSU5BTCBUUklHR0VSIDxzdHJpbmc+IiwKKyIgIFNwZWNpZmll cyBhIHN0cmluZyB0aGF0LCB3aGVuIGRldGVjdGVkIGR1cmluZyBhbnkgc3Vic2VxdWVudCBDT05O RUNUIiwKKyIgIHNlc3Npb24sIGlzIHRvIGNhdXNlIGF1dG9tYXRpYyByZXR1cm4gdG8gY29tbWFu ZCBtb2RlLiAgR2l2ZSB0aGlzIGNvbW1hbmQiLAorIiAgd2l0aG91dCBhIHN0cmluZyB0byBjYW5j ZWwgdGhlIGN1cnJlbnQgdHJpZ2dlci4gIFNlZSBIRUxQIENPTk5FQ1QgZm9yIiwKKyIgIGFkZGl0 aW9uYWwgaW5mb3JtYXRpb24uIiwKKyIgIiwKKyNlbmRpZiAvKiBDS19UUklHR0VSICovCisKKyNp ZmRlZiBPUzIKKyJTRVQgVEVSTUlOQUwgVVJMLUhJR0hMSUdIVCB7IE9OIDxhdHRyaWJ1dGU+LCBP RkYgfSIsCisiICBTcGVjaWZpZXMgd2hldGhlciBLLTk1IHNob3VsZCBoaWdobGlnaHQgVVJMcyBh bmQgd2hpY2ggc2NyZWVuIGF0dHJpYnV0ZSIsCisiICBzaG91bGQgYmUgdXNlZC4gIFRoZSBzY3Jl ZW4gYXR0cmlidXRlcyBjYW4gYmUgb25lIG9mIE5PUk1BTCwgQkxJTkssIEJPTEQsIiwKKyIgIERJ TSwgSU5WSVNJQkxFLCBSRVZFUlNFLCBvciBVTkRFUkxJTkUuICBUaGUgZGVmYXVsdCBpcyBPTiB1 c2luZyB0aGUiLAorIiAgQk9MRCBzY3JlZW4gYXR0cmlidXRlLiIsCisiICIsCisiU0VUIFRFUk1J TkFMIFZJREVPLUNIQU5HRSB7IERJU0FCTEVELCBFTkFCTEVEIH0iLAorIiAgU3BlY2lmaWVzIHdo ZXRoZXIgSy05NSBzaG91bGQgY2hhbmdlIHZpZGVvIG1vZGVzIGF1dG9tYXRpY2FsbHkgaW4gcmVz cG9uc2UiLAorI2lmZGVmIE5UCisiICB0byBlc2NhcGUgc2VxdWVuY2VzIGZyb20gdGhlIG90aGVy IGNvbXB1dGVyLiAgRU5BQkxFRCBieSBkZWZhdWx0IChleGNlcHQiLAorIiAgb24gV2luZG93cyA5 NSkuIiwKKyNlbHNlIC8qIE5UICovCisiICB0byBlc2NhcGUgc2VxdWVuY2VzIGZyb20gdGhlIG90 aGVyIGNvbXB1dGVyLiAgRU5BQkxFRCBieSBkZWZhdWx0LiIsCisjZW5kaWYgLyogTlQgKi8KKyIg IiwKKworIlNFVCBURVJNSU5BTCBWVC1MQU5HVUFHRSA8bGFuZ3VhZ2U+IiwKKyIgIFNwZWNpZmll cyB0aGUgTmF0aW9uYWwgUmVwbGFjZW1lbnQgQ2hhcmFjdGVyIFNldCAoTlJDKSB0byBiZSB1c2Vk IHdoZW4iLAorIiAgTlJDIG1vZGUgaXMgYWN0aXZhdGVkLiAgVGhlIGRlZmF1bHQgaXMgXCJOb3J0 aCBBbWVyaWNhblwiLiIsCisiICIsCisiU0VUIFRFUk1JTkFMIFZULU5SQy1NT0RFIHsgT04sIE9G RiB9IiwKKyIgIE9GRiAoZGVmYXVsdCkgY2hvb3NlcyBWVCBtdWx0aW5hdGlvbmFsIENoYXJhY3Rl ciBTZXQgbW9kZS4gIE9GRiBjaG9vc2VzIiwKKyIgIFZUIE5hdGlvbmFsIFJlcGxhY2VtZW50IENo YXJhY3Rlci1zZXQgbW9kZS4gIFRoZSBOUkMgaXMgc2VsZWN0ZWQgd2l0aCIsCisiICBTRVQgVEVS TUlOQUwgVlQtTEFOR1VBR0UiLAorIiAiLAorCisjaWZkZWYgTlQKKyJTRVQgVEVSTUlOQUwgV0lE VEggPGNvbHM+IiwKKyIgIFRlbGxzIHRoZSBudW1iZXIgb2YgY29sdW1ucyBpbiB0aGUgdGVybWlu YWwgc2NyZWVuLiIsCisiICIsCisiICBUaGUgZGVmYXVsdCBpcyA4MC4gIFlvdSBjYW4gYWxzbyB1 c2UgMTMyLiAgT3RoZXIgd2lkdGhzIGNhbiBiZSBjaG9zZW4gYnV0IiwKKyIgIGFyZSB1c3VhbGx5 IG5vdCBzdXBwb3J0ZWQgYnkgaG9zdCBzb2Z0d2FyZS4iLAorIiAiLAorI2Vsc2UKKyJTRVQgVEVS TUlOQUwgV0lEVEggPGNvbHM+IiwKKyIgIFRlbGxzIGhvdyBtYW55IGNvbHVtbnMgZGVmaW5lIHRo ZSB0ZXJtaW5hbCBzaXplLiIsCisiICIsCisiRGVmYXVsdCBpcyA4MC4gIEluIFdpbmRvd2VkIE9T LzIgMi54IHNlc3Npb25zLCB0aGlzIHZhbHVlIG1heSBub3QgYmUgY2hhbmdlZCIsCisiSW4gV2lu ZG93ZWQgT1MvMiBXQVJQIDMueCBzZXNzaW9ucywgdGhpcyB2YWx1ZSBtYXkgcmFuZ2UgZnJvbSAy MCB0byAyNTUuIiwKKyJJbiBGdWxsIHNjcmVlbiBzZXNzaW9ucywgdmFsdWVzIG9mIDQwLCA4MCwg YW5kIDEzMiBhcmUgdmFsaWQuICBOb3QgYWxsIiwKKyJjb21iaW5hdGlvbnMgb2YgaGVpZ2h0IGFu ZCB3aWR0aCBhcmUgc3VwcG9ydGVkIG9uIGFsbCBhZGFwdGVycy4iLAorIiAiLAorI2VuZGlmIC8q IE5UICovCisiU0VUIFRFUk1JTkFMIFdSQVAgeyBPRkYsIE9OIH0iLAorIiAgVGVsbHMgd2hldGhl ciB0aGUgdGVybWluYWwgZW11bGF0b3Igc2hvdWxkIGF1dG9tYXRpY2FsbHkgd3JhcCBsb25nIGxp bmVzIiwKKyIgIG9uIHlvdXIgc2NyZWVuLiIsCisiICIsCisjZWxzZQorCisiU0VUIFRFUk1JTkFM IFdJRFRIIDxudW1iZXI+IiwKKyIgXAorVGVsbHMgS2VybWl0IGhvdyBtYW55IGNvbHVtbnMgKGNo YXJhY3RlcnMpIGFyZSBvbiB5b3VyIENPTk5FQ1QtbW9kZSBzY3JlZW4uIiwKKyIgIiwKKyNlbmRp ZiAvKiBPUzIgKi8KKyJUeXBlIFNIT1cgVEVSTUlOQUwgdG8gc2VlIGN1cnJlbnQgdGVybWluYWwg c2V0dGluZ3MuIiwKKyIiIH07CisjZW5kaWYgLyogTk9MT0NBTCAqLworCisjaWZkZWYgTkVUQ09O Tgorc3RhdGljIGNoYXIgKmh4eWhvc3RbXSA9IHsKKyJTRVQgSE9TVCBbIHN3aXRjaGVzIF0gaG9z dG5hbWUtb3ItYWRkcmVzcyBbIHNlcnZpY2UgXSBbIHByb3RvY29sLXN3aXRjaCBdIiwKKyIgIEVz dGFibGlzaGVzIGEgY29ubmVjdGlvbiB0byB0aGUgc3BlY2lmaWVkIG5ldHdvcmsgaG9zdCBvbiB0 aGUgY3VycmVudGx5IiwKKyIgIHNlbGVjdGVkIG5ldHdvcmsgdHlwZS4gIEZvciBUQ1AvSVAgY29u bmVjdGlvbnMsIHRoZSBkZWZhdWx0IHNlcnZpY2UgaXMiLAorIiAgVEVMTkVUOyBzcGVjaWZ5IGEg ZGlmZmVyZW50IFRDUCBwb3J0IG51bWJlciBvciBzZXJ2aWNlIG5hbWUgdG8gY2hvb3NlIGEiLAor IiAgZGlmZmVyZW50IHNlcnZpY2UuICBUaGUgZmlyc3Qgc2V0IG9mIHN3aXRjaGVzIGNhbiBiZToi LAorIiAiLAorIiAvTkVUV09SSy1UWVBFOm5hbWUiLAorIiAgIE1ha2VzIHRoZSBjb25uZWN0aW9u IG9uIHRoZSBnaXZlbiB0eXBlIG9mIG5ldHdvcmsuICBFcXVpdmFsZW50IHRvIFNFVCIsCisiICAg TkVUV09SSyBUWVBFIG5hbWUgcHJpb3IgdG8gU0VUIEhPU1QsIGV4Y2VwdCB0aGF0IHRoZSBzZWxl Y3RlZCBuZXR3b3JrIiwKKyIgICB0eXBlIGlzIHVzZWQgb25seSBmb3IgdGhpcyBjb25uZWN0aW9u LiAgVHlwZSBcInNldCBob3N0IC9uZXQ6P1wiIHRvIHNlZSIsCisjaWZkZWYgTkVUQ01ECisiICAg YSBsaXN0LiAgL05FVFdPUkstVFlQRTpDT01NQU5EIG1lYW5zIHRvIG1ha2UgdGhlIGNvbm5lY3Rp b24gdGhyb3VnaCB0aGUiLAorIiAgIGdpdmVuIHN5c3RlbSBjb21tYW5kLCBzdWNoIGFzIFwicmxv Z2luXCIgb3IgXCJjdVwiLiIsCisjZWxzZQorIiAgIGEgbGlzdC4iLAorI2VuZGlmIC8qIE5FVENN RCAqLworIiAiLAorIiAvQ09OTkVDVCIsCisiICAgXAorRW50ZXIgQ09OTkVDVCAodGVybWluYWwp IG1vZGUgYXV0b21hdGljYWxseSBpZiB0aGUgY29ubmVjdGlvbiBpcyBzdWNjZXNzZnVsLiIsCisi ICIsCisiIC9TRVJWRVIiLAorIiAgIEVudGVyIHNlcnZlciBtb2RlIGF1dG9tYXRpY2FsbHkgaWYg dGhlIGNvbm5lY3Rpb24gaXMgc3VjY2Vzc2Z1bC4iLAorIiAiLAorIiAvVVNFUklEOls8bmFtZT5d IiwKKyIgICBUaGlzIHN3aXRjaCBpcyBlcXVpdmFsZW50IHRvIFNFVCBMT0dJTiBVU0VSSUQgPG5h bWU+IG9yIFNFVCBURUxORVQiLAorIiAgIEVOVklST05NRU5UIFVTRVIgPG5hbWU+LiAgSWYgYSBz dHJpbmcgaXMgZ2l2ZW4sIGl0IHNlbnQgdG8gaG9zdCBkdXJpbmciLAorIiAgIFRlbG5ldCBuZWdv dGlhdGlvbnM7IGlmIHRoaXMgc3dpdGNoIGlzIGdpdmVuIGJ1dCB0aGUgc3RyaW5nIGlzIG9taXR0 ZWQsIiwKKyIgICBubyB1c2VyIElEIGlzIHNlbnQgdG8gdGhlIGhvc3QuICBJZiB0aGlzIHN3aXRj aCBpcyBub3QgZ2l2ZW4sIHlvdXIiLAorIiAgIGN1cnJlbnQgVVNFUklEIHZhbHVlLCBcXHYodXNl cmlkKSwgaXMgc2VudC4gIFdoZW4gYSB1c2VyaWQgaXMgc2VudCB0byB0aGUiLAorIiAgIGhvc3Qg aXQgaXMgYSByZXF1ZXN0IHRvIGxvZ2luIGFzIHRoZSBzcGVjaWZpZWQgdXNlci4iLAorIiAiLAor I2lmZGVmIENLX0FVVEhFTlRJQ0FUSU9OCisiIC9QQVNTV09SRDpbPHN0cmluZz5dIiwKKyIgICBU aGlzIHN3aXRjaCBpcyBlcXVpdmFsZW50IHRvIFNFVCBMT0dJTiBQQVNTV09SRC4gIElmIGEgc3Ry aW5nIGlzIGdpdmVuLCIsCisiICAgaXQgaXMgdHJlYXRlZCBhcyB0aGUgcGFzc3dvcmQgdG8gYmUg dXNlZCAoaWYgcmVxdWlyZWQpIGJ5IGFueSBUZWxuZXQiLAorIiAgIEF1dGhlbnRpY2F0aW9uIHBy b3RvY29sIChLZXJiZXJvcyBUaWNrZXQgcmV0cmlldmFsLCBTZWN1cmUgUmVtb3RlIiwKKyIgICBQ YXNzd29yZCwgb3IgWC41MDkgY2VydGlmaWNhdGUgcHJpdmF0ZSBrZXkgZGVjcnlwdGlvbi4pICBJ ZiBubyBwYXNzd29yZCIsCisiICAgc3dpdGNoIGlzIHNwZWNpZmllZCBhIHByb21wdCBpcyBpc3N1 ZWQgdG8gcmVxdWVzdCB0aGUgcGFzc3dvcmQgaWYgb25lIiwKKyIgICBpcyByZXF1aXJlZCBmb3Ig dGhlIG5lZ290aWF0ZWQgYXV0aGVudGljYXRpb24gbWV0aG9kLiIsCisiICIsCisjZW5kaWYgLyog Q0tfQVVUSEVOVElDQVRJT04gKi8KKyJUaGUgcHJvdG9jb2wtc3dpdGNoZXMgY2FuIGJlOiIsCisi ICIsCisiIC9OTy1URUxORVQtSU5JVCIsCisiICAgRG8gbm90IHNlbmQgaW5pdGlhbCBUZWxuZXQg bmVnb3RpYXRpb25zIGV2ZW4gaWYgdGhpcyBpcyBhIFRlbG5ldCBwb3J0LiIsCisiICIsCisiIC9S QVctU09DS0VUIiwKKyIgICBUaGlzIGlzIGEgY29ubmVjdGlvbiB0byBhIHJhdyBUQ1Agc29ja2V0 LiIsCisiICIsCisjaWZkZWYgUkxPR0NPREUKKyIgL1JMT0dJTiIsCisiICAgVXNlIFJsb2dpbiBw cm90b2NvbCBldmVuIGlmIHRoaXMgaXMgbm90IGFuIFJsb2dpbiBwb3J0LiIsCisiICIsCisjZW5k aWYgLyogUkxPR0NPREUgKi8KKyIgL1RFTE5FVCIsCisiICAgU2VuZCBpbml0aWFsIFRlbG5ldCBu ZWdvdGlhdGlvbnMgZXZlbiBpZiB0aGlzIGlzIG5vdCBhIFRlbG5ldCBwb3J0LiIsCisiICIsCisj aWZkZWYgQ0tfS0VSQkVST1MKKyNpZmRlZiBSTE9HQ09ERQorI2lmZGVmIEtSQjQKKyIgL0s0TE9H SU4iLAorIiAgIFVzZSBLZXJiZXJvcyBJViBrbG9naW4gcHJvdG9jb2wgZXZlbiBpZiB0aGlzIGlz IG5vdCBhIGtsb2dpbiBwb3J0LiIsCisiICIsCisjaWZkZWYgQ0tfRU5DUllQVElPTgorIiAvRUs0 TE9HSU4iLAorIiAgIFVzZSBLZXJiZXJvcyBJViBFbmNyeXB0ZWQgbG9naW4gcHJvdG9jb2wgZXZl biBpZiB0aGlzIGlzIG5vdCBhbiBla2xvZ2luIiwKKyIgICBwb3J0LiIsCisiICIsCisjZW5kaWYg LyogQ0tfRU5DUllQVElPTiAqLworI2VuZGlmIC8qIEtSQjQgKi8KKyNpZmRlZiBLUkI1CisiIC9L NUxPR0lOIiwKKyIgICBVc2UgS2VyYmVyb3MgViBrbG9naW4gcHJvdG9jb2wgZXZlbiBpZiB0aGlz IGlzIG5vdCBhIGtsb2dpbiBwb3J0LiIsCisiICIsCisjaWZkZWYgQ0tfRU5DUllQVElPTgorIiAv RUs1TE9HSU4iLAorIiAgIFVzZSBLZXJiZXJvcyBWIEVuY3J5cHRlZCBsb2dpbiBwcm90b2NvbCBl dmVuIGlmIHRoaXMgaXMgbm90IGFuIGVrbG9naW4iLAorIiAgIHBvcnQuIiwKKyIgIiwKKyNlbmRp ZiAvKiBDS19FTkNSWVBUSU9OICovCisjZW5kaWYgLyogS1JCNSAqLworI2VuZGlmIC8qIFJMT0dD T0RFICovCisjZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KKyNpZmRlZiBDS19TU0wKKyIgL1NTTCIs CisiICAgUGVyZm9ybSBTU0wgbmVnb3RpYXRpb25zLiIsCisiICIsCisiIC9TU0wtVEVMTkVUIiwK KyIgICBQZXJmb3JtIFNTTCBuZWdvdGlhdGlvbnMgYW5kIGlmIHN1Y2Nlc3NmdWwgc3RhcnQgVGVs bmV0IG5lZ290aWF0aW9ucy4iLAorIiAiLAorIiAvVExTIiwKKyIgICBQZXJmb3JtIFRMUyBuZWdv dGlhdGlvbnMuIiwKKyIgIiwKKyIgL1RMUy1URUxORVQiLAorIiAgIFBlcmZvcm0gVExTIG5lZ290 aWF0aW9ucyBhbmQgaWYgc3VjY2Vzc2Z1bCBzdGFydCBUZWxuZXQgbmVnb3RpYXRpb25zLiIsCisi ICIsCisjZW5kaWYgLyogQ0tfU1NMICovCisiRXhhbXBsZXM6IiwKKyIgIFNFVCBIT1NUIGtlcm1p dC5jb2x1bWJpYS5lZHUiLAorIiAgU0VUIEhPU1QgL0NPTk5FQ1Qga2VybWl0LmNvbHVtYmlhLmVk dSIsCisiICBTRVQgSE9TVCAqIDE2NDkiLAorIiAgU0VUIEhPU1QgL1NFUlZFUiAqIDE2NDkiLAor IiAgU0VUIEhPU1QgMTI4LjU5LjM5LjIiLAorIiAgU0VUIEhPU1QgbWFkbGFiLnNwcmwudW1pY2gu ZWR1IDMwMDAiLAorIiAgU0VUIEhPU1QgeHl6Y29ycC5jb20gMjAwMCAvUkFXLVNPQ0tFVCIsCisj aWZkZWYgU1NIQlVJTFRJTgorIiAgU0VUIEhPU1QgL05FVDpTU0gga2VybWl0LmNvbHVtYmlhLmVk dSAveDExLWZvcndhcmRpbmc6b24iLCAKKyNlbmRpZiAvKiBTU0hCVUlMVElOICovCisjaWZkZWYg TkVUQ01ECisiICBTRVQgSE9TVCAvQ09OTkVDVCAvQ09NTUFORCBybG9naW4geHl6Y29ycC5jb20i LAorI2VuZGlmIC8qIE5FVENNRCAqLworIiAiLAorI2lmZGVmIFNVUEVSTEFUCisiTm90ZXM6IiwK KyIgIiwKKyIgLiBUaGUgVEVMTkVUIGNvbW1hbmQgaXMgZXF1aXZhbGVudCB0byBTRVQgTkVUV09S SyBUWVBFIFRDUC9JUCwiLAorIiAgIFNFVCBIT1NUIG5hbWUgWyBwb3J0IF0gL1RFTE5FVCwgSUYg U1VDQ0VTUyBDT05ORUNUIiwKKyIgIiwKKyIgLiBGb3IgU1VQRVJMQVQgY29ubmVjdGlvbnMsIHRo ZSBob3N0bmFtZS1vci1hZGRyZXNzIG1heSBiZSBlaXRoZXIgYSBzZXJ2aWNlIiwKKyIgICBuYW1l LCBvciBhIG5vZGUvcG9ydCBjb21iaW5hdGlvbiwgYXMgcmVxdWlyZWQgYnkgeW91ciBMQVQgaG9z dC4iLAorI2Vsc2UKKyJUaGUgVEVMTkVUIGNvbW1hbmQgaXMgZXF1aXZhbGVudCB0byBTRVQgTkVU V09SSyBUWVBFIFRDUC9JUCwiLAorIlNFVCBIT1NUIG5hbWUgWyBwb3J0IF0gL1RFTE5FVCwgSUYg U1VDQ0VTUyBDT05ORUNUIiwKKyNlbmRpZiAvKiBTVVBFUkxBVCAqLworIiAiLAorIkFsc28gc2Vl IFNFVCBORVRXT1JLLCBURUxORVQsIFNFVCBURUxORVQuIiwKKyIiIH07CisKK3N0YXRpYyBjaGFy ICpobXh5YXV0aFtdID0geworIlN5bmF0eDogU0VUIEFVVEhFTlRJQ0FUSU9OIDxhdXRoX3R5cGU+ IDxwYXJhbWV0ZXI+IDx2YWx1ZT4iLAorIiAgU2V0cyBkZWZhdWx0cyBmb3IgdGhlIEFVVEhFTlRJ Q0FURSBjb21tYW5kOiIsCisiICIsCisjaWZkZWYgQ0tfS0VSQkVST1MKKyJTRVQgQVVUSEVOVElD QVRJT04gS0VSQkVST1M1IEFERFJFU1NFUyB7bGlzdCBvZiBpcC1hZGRyZXNzZXN9IiwKKyIgIFNw ZWNpZmllcyBhIGxpc3Qgb2YgSVAgYWRkcmVzc2VzIHRoYXQgc2hvdWxkIGJlIHBsYWNlZCBpbiB0 aGUgVGlja2V0IiwKKyIgIEdldHRpbmcgVGlja2V0IGluIGFkZGl0aW9uIHRvIHRoZSBsb2NhbCBt YWNoaW5lIGFkZHJlc3Nlcy4iLAorIiAiLAorIlNFVCBBVVRIRU5USUNBVElPTiB7IEtFUkJFUk9T NCwgS0VSQkVST1M1IH0gQVVUT0RFU1RST1kiLAorIiAgeyBPTi1DTE9TRSwgT04tRVhJVCwgTkVW RVIgfSIsCisiICBXaGVuIE9OLCBLZXJtaXQgd2lsbCBkZXN0cm95IGFsbCBjcmVkZW50aWFscyBp biB0aGUgZGVmYXVsdCIsCisiICBjcmVkZW50aWFscyBjYWNoZSB1cG9uIEtlcm1pdCB0ZXJtaW5h dGlvbi4gIERlZmF1bHQgaXMgTkVWRVIuIiwKKyIgIiwKKyJTRVQgQVVUSEVOVElDQVRJT04geyBL RVJCRVJPUzQsIEtFUkJFUk9TNSB9IEFVVE9HRVQgeyBPTiwgT0ZGIH0iLAorIiAgV2hlbiBPTiwg aWYgdGhlIGhvc3Qgb2ZmZXJzIEtlcmJlcm9zIDQgb3IgS2VyYmVyb3MgNSBhdXRoZW50aWNhdGlv biIsCisiICBhbmQgS2VybWl0IGlzIGNvbmZpZ3VyZWQgdG8gdXNlIHRoYXQgYXV0aGVudGljYXRp b24gbWV0aG9kIGFuZCB0aGVyZSIsCisiICBpcyBubyBUR1QsIEtlcm1pdCB3aWxsIGF1dG9tYXRp Y2FsbHkgYXR0ZW1wdCB0byByZXRyaWV2ZSBvbmUgYnkiLAorIiAgcHJvbXB0aW5nIGZvciB0aGUg cGFzc3dvcmQgKGFuZCBwcmluY2lwYWwgaWYgbmVlZGVkLikgIERlZmF1bHQgaXMgT04uIiwKKyIg IiwKKyJTRVQgQVVUSEVOVElDQVRJT04gS0VSQkVST1M1IENSRURFTlRJQUxTLUNBQ0hFIDxmaWxl bmFtZT4iLAorIiAgQWxsb3dzIGFuIGFsdGVybmF0aXZlIGNyZWRlbnRpYWxzIGNhY2hlIHRvIGJl IHNwZWNpZmllZC4gIFRoaXMgaXMgdXNlZnVsIiwKKyIgIHdoZW4geW91IG5lZWQgdG8gbWFpbnRh aW4gdHdvIG9yIG1vcmUgc2V0cyBvZiBjcmVkZW50aWFscyBmb3IgZGlmZmVyZW50IiwKKyIgIHJl YWxtcyBvciByb2xlcy4gIFRoZSBkZWZhdWx0IGlzIHNwZWNpZmllZCBieSB0aGUgZW52aXJvbm1l bnQgdmFyaWFibGUiLAorIiAgS1JCNUNDTkFNRSBvciBhcyByZXBvcnRlZCBieSB0aGUgS2VyYmVy b3MgNSBsaWJyYXJ5LiIsCisiICIsCisiU0VUIEFVVEhFTlRJQ0FUSU9OIEtFUkJFUk9TNSBGT1JX QVJEQUJMRSB7IE9OLCBPRkYgfSIsCisiICBXaGVuIE9OLCBzcGVjaWZpZXMgdGhhdCBLZXJiZXJv cyA1IGNyZWRlbnRpYWxzIHNob3VsZCBiZSBmb3J3YXJkYWJsZSB0byIsCisiICB0aGUgaG9zdC4g IElmIFNFVCBURUxORVQgQVVUSEVOVElDQVRJT04gRk9SV0FSRElORyBpcyBPTiwgZm9yd2FyZGFi bGUiLAorIiAgY3JlZGVudGlhbHMgYXJlIHNlbnQgdG8gdGhlIGhvc3QuICBUaGUgZGVmYXVsdCBp cyBPRkYuIiwKKyIgIiwKKyJTRVQgQVVUSEVOVElDQVRJT04gS0VSQkVST1M1IEdFVC1LNC1UR1Qg eyBPTiwgT0ZGIH0iLAorIiAgV2hlbiBPTiwgc3BlY2lmaWVzIHRoYXQgS2VyYmVyb3MgNCBjcmVk ZW50aWFscyBzaG91bGQgYmUgcmVxdWVzdGVkIGVhY2giLAorIiAgdGltZSBLZXJiZXJvcyA1IGNy ZWRlbnRpYWxzIGFyZSByZXF1ZXN0ZWQgd2l0aCBBVVRIIEtFUkJFUk9TNSBJTklULiIsCisiICBE ZWZhdWx0IGlzIE9GRi4iLAorIiAiLAorIlNFVCBBVVRIRU5USUNBVElPTiBLRVJCRVJPUzQgSU5T VEFOQ0UgPGluc3RhbmNlPiIsCisiICBBbGxvd3MgYSBLZXJiZXJvcyA0IGluc3RhbmNlIHRvIGJl IHNwZWNpZmllZCBhcyBhIGRlZmF1bHQgKGlmIG5lZWRlZCkuIiwKKyIgIiwKKyJTRVQgQVVUSEVO VElDQVRJT04geyBLRVJCRVJPUzQsIEtFUkJFUk9TNSB9IEtFWVRBQiA8ZmlsZW5hbWU+IiwKKyIg IFNwZWNpZmllcyB0aGUgbG9jYXRpb24gb2YgdGhlIGtleXRhYiBmaWxlIHVzZWQgdG8gYXV0aGVu dGljYXRlIGluY29taW5nIiwKKyIgIGNvbm5lY3Rpb25zLiAgVGhlIGRlZmF1bHQgaXMgbm9uZSwg d2hpY2ggbWVhbnMgdG8gdXNlIHRoZSBkZWZhdWx0IHZhbHVlIiwKKyIgIGNvbmZpZ3VyZWQgaW4g dGhlIEtlcmJlcm9zIGluc3RhbGxhdGlvbi4iLAorIiAiLAorIlNFVCBBVVRIRU5USUNBVElPTiB7 IEtFUkJFUk9TNCwgS0VSQkVST1M1IH0gTElGRVRJTUUgPG1pbnV0ZXM+IiwKKyIgIFNwZWNpZmll cyB0aGUgbGlmZXRpbWUgb2YgdGhlIFRHVHMgcmVxdWVzdGVkIGZyb20gdGhlIEtEQy4gIFRoZSBk ZWZhdWx0IiwKKyIgIGlzIDYwMCBtaW51dGVzICgxMCBob3VycykuIiwKKyIgIiwKKyJTRVQgQVVU SEVOVElDQVRJT04gS0VSQkVST1M1IE5PLUFERFJFU1NFUyB7IE9OLCBPRkYgfSIsCisiICBTcGVj aWZpZXMgd2hldGhlciBvciBub3QgSVAgYWRkcmVzc2VzIHdpbGwgYmUgaW5zZXJ0ZWQgaW50byB0 aGUgVEdULiIKKyIgIERlZmF1bHQgaXMgT0ZGLiIsCisiICIsCisiU0VUIEFVVEhFTlRJQ0FUSU9O IEtFUkJFUk9TNCBQUkVBVVRIIHsgT04sIE9GRiB9IiwKKyIgIEFsbG93cyBLZXJiZXJvcyA0IHBy ZWF1dGhlbnRpY2F0ZWQgVEdUIHJlcXVlc3RzIHRvIGJlIHR1cm5lZCBvZmYuICBUaGUiLAorIiAg ZGVmYXVsdCBpcyBPTi4gIE9ubHkgdXNlIGlmIGFic29sdXRlbHkgbmVjZXNzYXJ5LiAgV2UgcmVj b21tZW5kIHRoYXQiLAorIiAgcHJlYXV0aGVudGljYXRlZCByZXF1ZXN0cyBiZSByZXF1aXJlZCBm b3IgYWxsIHRpY2tldHMgcmV0dXJuZWQgYnkgYSBLREMiLAorIiAgdG8gYSByZXF1ZXN0b3IuIiwK KyIgIiwKKyJTRVQgQVVUSEVOVElDQVRJT04geyBLRVJCRVJPUzQsIEtFUkJFUk9TNSB9IFBSSU5D SVBBTCA8bmFtZT4iLAorIiAgV2hlbiBLZXJtaXQgc3RhcnRzLCBpdCBhdHRlbXB0cyB0byBzZXQg dGhlIHByaW5jaXBhbCBuYW1lIHRvIHRoYXQgc3RvcmVkIiwKKyIgIGluIHRoZSBjdXJyZW50IGNy ZWRlbnRpYWxzIGNhY2hlLiAgSWYgbm8gY3JlZGVudGlhbCBjYWNoZSBleGlzdHMsIHRoZSIsCisi ICBjdXJyZW50IFNFVCBMT0dJTiBVU0VSSUQgdmFsdWUgaXMgdXNlZC4gIFNFVCBMT0dJTiBVU0VS SUQgaXMgc2V0IHRvIHRoZSIsCisiICBvcGVyYXRpbmcgc3lzdGVtJ3MgY3VycmVudCB1c2VybmFt ZSB3aGVuIEtlcm1pdCBpcyBzdGFydGVkLiAgVG8gZm9yY2UiLAorIiAgS2VybWl0IHRvIHByb21w dCB0aGUgdXNlciBmb3IgdGhlIHByaW5jaXBhbCBuYW1lIHdoZW4gcmVxdWVzdGluZyBUR1RzLCIs CisiICBwbGFjZToiLAorIiAiLAorIiAgICBTRVQgQVVUSCBLNCBQUklOQ0lQQUwge30iLAorIiAg ICBTRVQgQVVUSCBLNSBQUklOQ0lQQUwge30iLAorIiAiLAorIiAgaW4gdGhlIEtlcm1pdCBpbml0 aWFsaXphdGlvbiBmaWxlIG9yIGNvbm5lY3Rpb24gc2NyaXB0LiIsCisiICIsCisiU0VUIEFVVEhF TlRJQ0FUSU9OIHsgS0VSQkVST1M0LCBLRVJCRVJPUzUgfSBQUk9NUFQgUEFTU1dPUkQgPHByb21w dD4iLAorIiAgU3BlY2lmaWVzIGEgY3VzdG9tIHByb21wdCB0byBiZSB1c2VkIHdoZW4gcHJvbXB0 aW5nIGZvciBhIHBhc3N3b3JkLiIsCisiICBUaGUgS2VyYmVyb3MgcHJvbXB0IHN0cmluZ3MgbWF5 IGNvbnRhaW4gdHdvICVzIHJlcGxhY2VtZW50IGZpZWxkcy4iLAorIiAgVGhlIGZpcnN0ICVzIGlz IHJlcGxhY2VkIGJ5IHRoZSBwcmluY2lwYWwgbmFtZTsgdGhlIHNlY29uZCBieSB0aGUgcmVhbG0u IiwKKyIgIiwKKyJTRVQgQVVUSEVOVElDQVRJT04geyBLRVJCRVJPUzQsIEtFUkJFUk9TNSB9IFBS T01QVCBQUklOQ0lQQUwgPHByb21wdD4iLAorIiAgU3BlY2lmaWVzIGEgY3VzdG9tIHByb21wdCB0 byBiZSB1c2VkIHdoZW4gcHJvbXB0aW5nIGZvciB0aGUgS2VyYmVyb3MiLAorIiAgcHJpbmNpcGFs IG5hbWUuICBObyAlcyByZXBsYWNlbWVudCBmaWVsZHMgbWF5IGJlIHVzZWQuICBLZXJtaXQgcHJv bXB0cyIsCisiICBmb3IgYSBwcmluY2lwYWwgbmFtZSB3aGVuIHJldHJpZXZpbmcgYSBUR1QgaWYg dGhlIGNvbW1hbmQ6IiwKKyIgIiwKKyIgICAgU0VUIEFVVEhFTlRJQ0FUSU9OIHsgS0VSQkVST1M0 LCBLRVJCRVJPUzUgfSBQUklOQ0lQQUwge30iLAorIiAiLAorIiAgaGFzIGJlZW4gaXNzdWVkLiIs CisiICIsCisiU0VUIEFVVEhFTlRJQ0FUSU9OIEtFUkJFUk9TNSBQUk9YSUFCTEUgeyBPTiwgT0ZG IH0iLAorIiAgV2hlbiBPTiwgc3BlY2lmaWVzIHRoYXQgS2VyYmVyb3MgNSBjcmVkZW50aWFscyBz aG91bGQgYmUgcHJveGlhYmxlLiIsCisiICBEZWZhdWx0IGlzIE9GRi4iLAorIiAiLAorIlNFVCBB VVRIRU5USUNBVElPTiBLRVJCRVJPUzUgUkVORVdBQkxFIDxtaW51dGVzPiIsCisiICBXaGVuIDxt aW51dGVzPiBpcyBncmVhdGVyIHRoYW4gdGhlIHRpY2tldCBsaWZldGltZSBhIFRHVCBtYXkgYmUg cmVuZXdlZCIsCisiICB3aXRoIEFVVEggSzUgSU5JVCAvUkVORVcgaW5zdGVhZCBvZiBnZXR0aW5n IGEgbmV3IHRpY2tldCBhcyBsb25nIGFzIHRoZSIsCisiICB0aWNrZXQgaXMgbm90IGV4cGlyZWQg YW5kIGl0cyB3aXRoaW4gdGhlIHJlbmV3YWJsZSBsaWZldGltZS4gIERlZmF1bHQgaXMiLAorIiAg MCAoemVybykgbWludXRlcy4iLAorIiAiLAorIlNFVCBBVVRIRU5USUNBVElPTiB7IEtFUkJFUk9T NCwgS0VSQkVST1M1IH0gUkVBTE0gPG5hbWU+IiwKKyIgIElmIG5vIGRlZmF1bHQgaXMgc2V0LCB0 aGUgZGVmYXVsdCByZWFsbSBjb25maWd1cmVkIGZvciB0aGUgS2VyYmVyb3MiLAorIiAgbGlicmFy aWVzIGlzIHVzZWQuICBBYmJyZXZpYXRpb25zIGFjY2VwdGVkLiIsCisiICIsCisiU0VUIEFVVEhF TlRJQ0FUSU9OIHsgS0VSQkVST1M0LCBLRVJCRVJPUzUgfSBTRVJWSUNFLU5BTUUgPG5hbWU+IiwK KyIgIFRoaXMgY29tbWFuZCBzcGVjaWZpZXMgdGhlIHNlcnZpY2UgdGlja2V0IG5hbWUgdXNlZCB0 byBhdXRoZW50aWNhdGUiLAorIiAgdG8gdGhlIGhvc3Qgd2hlbiBLZXJtaXQgaXMgdXNlZCBhcyBh IGNsaWVudDsgb3IgdGhlIHNlcnZpY2UgdGlja2V0IiwKKyIgIG5hbWUgYWNjZXB0ZWQgYnkgS2Vy bWl0IHdoZW4gaXQgaXMgYWN0aW5nIGFzIHRoZSBob3N0LiIsCisiICBJZiBubyBkZWZhdWx0IGlz IHNldCwgdGhlIGRlZmF1bHQgc2VydmljZSBuYW1lIGZvciBLZXJiZXJvcyA0IGlzIiwKKyIgIFwi cmNtZFwiIGFuZCBmb3IgS2VyYmVyb3MgNSBpcyBcImhvc3RcIi4iLAorIiAiLAorI2VuZGlmIC8q IENLX0tFUkJFUk9TICovCisjaWZkZWYgQ0tfU1JQCisiU0VUIEFVVEhFTlRJQ0FUSU9OIFNSUCBQ Uk9NUFQgUEFTU1dPUkQgPHByb21wdD4iLAorIiAgU3BlY2lmaWVzIGEgY3VzdG9tIHByb21wdCB0 byBiZSB1c2VkIHdoZW4gcHJvbXB0aW5nIGZvciBhIHBhc3N3b3JkLiIsCisiICBUaGUgU1JQIHBy b21wdCBzdHJpbmcgbWF5IGNvbnRhaW4gb25lICVzIHJlcGxhY2VtZW50IGZpZWxkcyB3aGljaCBp cyIsCisiICByZXBsYWNlZCBieSB0aGUgbG9naW4gdXNlcmlkLiIsCisiICIsCisjZW5kaWYgLyog Q0tfU1JQICovCisjaWZkZWYgQ0tfU1NMCisiSW4gYWxsIG9mIHRoZSBmb2xsb3dpbmcgY29tbWFu ZHMgXCJTU0xcIiBhbmQgXCJUTFNcIiBhcmUgYWxpYXNlcy4iLAorIiAiLAorIlNFVCBBVVRIRU5U SUNBVElPTiB7IFNTTCwgVExTIH0gQ0lQSEVSLUxJU1QgPGxpc3Qgb2YgY2lwaGVycz4iLAorIkFw cGxpZXMgdG8gYm90aCBTU0wgYW5kIFRMUy4gIEEgY29sb24gc2VwYXJhdGVkIGxpc3Qgb2YgYW55 IG9mIHRoZSBmb2xsb3dpbmciLAorIihjYXNlIHNlbnNpdGl2ZSkgb3B0aW9ucyBkZXBlbmRpbmcg b24gdGhlIG9wdGlvbnMgY2hvc2VuIHdoZW4gT3BlblNTTCB3YXMgIiwKKyJjb21waWxlZDogIiwK KyIgIiwKKyIgIEtleSBFeGNoYW5nZSBBbGdvcml0aG1zOiIsCisiICAgIFwia1JTQVwiICAgICAg UlNBIGtleSBleGNoYW5nZSIsCisiICAgIFwia0RIclwiICAgICAgRGlmZmllLUhlbGxtYW4ga2V5 IGV4Y2hhbmdlIChrZXkgZnJvbSBSU0EgY2VydCkiLAorIiAgICBcImtESGRcIiAgICAgIERpZmZp ZS1IZWxsbWFuIGtleSBleGNoYW5nZSAoa2V5IGZyb20gRFNBIGNlcnQpIiwKKyIgICAgXCJrRURI XCIgICAgICBFcGhlbWVyYWwgRGlmZmllLUhlbGxtYW4ga2V5IGV4Y2hhbmdlICh0ZW1wb3Jhcnkg a2V5KSIsCisiICAgIFwia0tSQjVcIiAgICAgS2VyYmVyb3MgNSIsCisiICIsCisiICBBdXRoZW50 aWNhdGlvbiBBbGdvcml0aG06IiwKKyIgICAgXCJhTlVMTFwiICAgICBObyBhdXRoZW50aWNhdGlv biIsCisiICAgIFwiYVJTQVwiICAgICAgUlNBIGF1dGhlbnRpY2F0aW9uIiwKKyIgICAgXCJhRFNT XCIgICAgICBEU1MgYXV0aGVudGljYXRpb24iLAorIiAgICBcImFESFwiICAgICAgIERpZmZpZS1I ZWxsbWFuIGF1dGhlbnRpY2F0aW9uIiwKKyIgICAgXCJhS1JCNVwiICAgICBLZXJiZXJvcyA1IiwK KyIgIiwKKyIgIENpcGhlciBFbmNvZGluZyBBbGdvcml0aG06IiwKKyIgICAgXCJlTlVMTFwiICAg ICBObyBlbmNvZGlpbmciLAorIiAgICBcIkRFU1wiICAgICAgIERFUyBlbmNvZGluZyIsCisiICAg IFwiM0RFU1wiICAgICAgVHJpcGxlIERFUyBlbmNvZGluZyIsCisiICAgIFwiUkM0XCIgICAgICAg UkM0IGVuY29kaW5nIiwKKyIgICAgXCJSQzJcIiAgICAgICBSQzIgZW5jb2RpbmciLAorIiAgICBc IklERUFcIiAgICAgIElERUEgZW5jb2RpbmciLAorIiAiLAorIiAgTUFDIERpZ2VzdCBBbGdvcml0 aG06IiwKKyIgICAgXCJNRDVcIiAgICAgICBNRDUgaGFzaCBmdW5jdGlvbiIsCisiICAgIFwiU0hB MVwiICAgICAgU0hBMSBoYXNoIGZ1bmN0aW9uIiwKKyIgICAgXCJTSEFcIiAgICAgICBTSEEgaGFz aCBmdW5jdGlvbiAoc2hvdWxkIG5vdCBiZSB1c2VkKSIsCisiICIsCisiICBBbGlhc2VzOiIsCisi ICAgIFwiU1NMdjJcIiAgICAgYWxsIFNTTCB2ZXJzaW9uIDIuMCBjaXBoZXJzIChzaG91bGQgbm90 IGJlIHVzZWQpIiwKKyIgICAgXCJTU0x2M1wiICAgICBhbGwgU1NMIHZlcnNpb24gMy4wIGNpcGhl cnMiLAorIiAgICBcIkVYUFwiICAgICAgIGFsbCBleHBvcnQgY2lwaGVycyAoNDAtYml0KSIsCisi ICAgIFwiRVhQT1JUNTZcIiAgYWxsIGV4cG9ydCBjaXBoZXJzICg1Ni1iaXQpIiwKKyIgICAgXCJM T1dcIiAgICAgICBhbGwgbG93IHN0cmVuZ3RoIGNpcGhlcnMgKG5vIGV4cG9ydCkiLAorIiAgICBc Ik1FRElVTVwiICAgIGFsbCBjaXBoZXJzIHdpdGggMTI4LWJpdCBlbmNyeXB0aW9uIiwKKyIgICAg XCJISUdIXCIgICAgICBhbGwgY2lwaGVycyB1c2luZyBncmVhdGVyIHRoYW4gMTI4LWJpdCBlbmNy eXB0aW9uIiwKKyIgICAgXCJSU0FcIiAgICAgICBhbGwgY2lwaGVycyB1c2luZyBSU0Ega2V5IGV4 Y2hhbmdlIiwKKyIgICAgXCJESFwiICAgICAgICBhbGwgY2lwaGVycyB1c2luZyBEaWZmaWUtSGVs bG1hbiBrZXkgZXhjaGFuZ2UiLAorIiAgICBcIkVESFwiICAgICAgIGFsbCBjaXBoZXJzIHVzaW5n IEVwaGVtZXJhbCBEaWZmaWUtSGVsbG1hbiBrZXkgZXhjaGFuZ2UiLAorIiAgICBcIkFESFwiICAg ICAgIGFsbCBjaXBoZXJzIHVzaW5nIEFub255bW91cyBEaWZmaWUtSGVsbG1hbiBrZXkgZXhjaGFu Z2UiLAorIiAgICBcIkRTU1wiICAgICAgIGFsbCBjaXBoZXJzIHVzaW5nIERTUyBhdXRoZW50aWNh dGlvbiIsCisiICAgIFwiS1JCNVwiICAgICAgYWxsIGNpcGhlcnMgdXNpbmcgS2VyYmVyb3MgNSBh dXRoZW50aWNhdGlvbiIsCisiICAgIFwiTlVMTFwiICAgICAgYWxsIGNpcGhlcnMgdXNpbmcgbm8g ZW5jcnlwdGlvbiIsCisiICIsCisiRWFjaCBpdGVtIGluIHRoZSBsaXN0IG1heSBpbmNsdWRlIGEg cHJlZml4IG1vZGlmaWVyOiIsCisiICIsCisiICAgIFwiK1wiICAgICAgICAgbW92ZSBjaXBoZXIo cykgdG8gdGhlIGN1cnJlbnQgbG9jYXRpb24gaW4gdGhlIGxpc3QiLAorIiAgICBcIi1cIiAgICAg ICAgIHJlbW92ZSBjaXBoZXIocykgZnJvbSB0aGUgbGlzdCAobWF5IGJlIGFkZGVkIGFnYWluIGJ5 IiwKKyIgICAgICAgICAgICAgICAgYSBzdWJzZXF1ZW50IGxpc3QgZW50cnkpIiwKKyIgICAgXCIh XCIgICAgICAgICBraWxsIGNpcGhlciBmcm9tIHRoZSBsaXN0IChpdCBtYXkgbm90IGJlIGFkZGVk IGFnYWluIiwKKyIgICAgICAgICAgICAgICAgYnkgYSBzdWJzZXF1ZW50IGxpc3QgZW50cnkpIiwK KyIgIiwKKyJJZiBubyBtb2RpZmllciBpcyBzcGVjaWZpZWQgdGhlIGVudHJ5IGlzIGFkZGVkIHRv IHRoZSBsaXN0IGF0IHRoZSBjdXJyZW50ICIsCisicG9zaXRpb24uICBcIitcIiBtYXkgYWxzbyBi ZSB1c2VkIHRvIGNvbWJpbmUgdGFncyB0byBzcGVjaWZ5IGVudHJpZXMgc3VjaCBhcyAiCissCisi XCJSU0ErUkM0XCIgZGVzY3JpYmVzIGFsbCBjaXBoZXJzIHRoYXQgdXNlIGJvdGggUlNBIGFuZCBS QzQuIiwKKyIgIiwKKyJGb3IgZXhhbXBsZSwgYWxsIGF2YWlsYWJsZSBjaXBoZXJzIG5vdCBpbmNs dWRpbmcgQURIIGtleSBleGNoYW5nZToiLAorIiAiLAorIiAgQUxMOiFBREg6UkM0K1JTQTorSElH SDorTUVESVVNOitMT1c6K1NTTHYyOitFWFAiLAorIiAiLAorIkFsbCBhbGdvcml0aG1zIGluY2x1 ZGluZyBBREggYW5kIGV4cG9ydCBidXQgZXhjbHVkaW5nIHBhdGVudGVkIGFsZ29yaXRobXM6ICIs CisiICIsCisiICBISUdIOk1FRElVTTpMT1c6RVhQT1JUNTY6RVhQOkFESDoha1JTQTohYVJTQToh UkM0OiFSQzI6IUlERUEiLAorIiAiLAorIlRoZSBPcGVuU1NMIGNvbW1hbmQgIiwKKyIgIiwKKyIg IG9wZW5zc2wuZXhlIGNpcGhlcnMgLXYgPGxpc3Qgb2YgY2lwaGVycz4gIiwKKyIgIiwKKyJtYXkg YmUgdXNlZCB0byBsaXN0IGFsbCBvZiB0aGUgY2lwaGVycyBhbmQgdGhlIG9yZGVyIGRlc2NyaWJl ZCBieSBhIHNwZWNpZmljIiwKKyI8bGlzdCBvZiBjaXBoZXJzPi4iLAorIiAiLAorIlNFVCBBVVRI RU5USUNBVElPTiB7IFNTTCwgVExTIH0gQ1JMLURJUiA8ZGlyZWN0b3J5PiIsCisic3BlY2lmaWVz IGEgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgY2VydGlmaWNhdGUgcmV2b2NhdGlvbiBmaWxlcyB3 aGVyZSBlYWNoIiwKKyJmaWxlIGlzIG5hbWVkIGJ5IHRoZSBoYXNoIG9mIHRoZSBjZXJ0aWZpY2F0 ZSB0aGF0IGhhcyBiZWVuIHJldm9rZWQuIiwKKyIgIiwKKyIgIE9wZW5TU0wgZXhwZWN0cyB0aGUg aGFzaCBzeW1saW5rcyB0byBiZSBtYWRlIGxpa2UgdGhpczoiLAorIiAiLAorIiAgICBsbiAtcyBj cmwucGVtIGBvcGVuc3NsIGNybCAtaGFzaCAtbm9vdXQgLWluIGNybC5wZW1gLnIwIiwKKyIgIiwK KyIgIFNpbmNlIG5vdCBhbGwgZmlsZSBzeXN0ZW1zIGhhdmUgc3ltbGlua3MgeW91IGNhbiB1c2Ug dGhlIGZvbGxvd2luZyBjb21tYW5kIiwKKyIgIGluIEtlcm1pdCB0byBjb3B5IHRoZSBjcmwucGVt IGZpbGUgdG8gdGhlIGhhc2ggZmlsZSBuYW1lLiIsCisiICIsCisiICAgICBjb3B5IGNybC5wZW0g e1xcZmNvbW1hbmQob3BlbnNzbC5leGUgY3JsIC1oYXNoIC1ub291dCAtaW4gY3JsLnBlbSkucjB9 IiwKKyIgIiwKKyIgIFRoaXMgcHJvZHVjZXMgYSBoYXNoIGJhc2VkIG9uIHRoZSBpc3N1ZXIgZmll bGQgaW4gdGhlIENSTCBzdWNoICIsCisiICB0aGF0IHRoZSBpc3N1ZXIgZmllbGQgb2YgYSBDZXJ0 IG1heSBiZSBxdWlja2x5IG1hcHBlZCB0byB0aGUgIiwKKyIgIGNvcnJlY3QgQ1JMLiIsCisiICIs CisiU0VUIEFVVEhFTlRJQ0FUSU9OIHsgU1NMLCBUTFMgfSBDUkwtRklMRSA8ZmlsZW5hbWU+IiwK KyJzcGVjaWZpZXMgYSBmaWxlIHRoYXQgY29udGFpbnMgYSBsaXN0IG9mIGNlcnRpZmljYXRlIHJl dm9jYXRpb25zLiIsCisiICIsCisiU0VUIEFVVEhFTlRJQ0FUSU9OIHsgU1NMLCBUTFMgfSBERUJV RyB7IE9OLCBPRkYgfSIsCisic3BlY2lmaWVzIHdoZXRoZXIgZGVidWcgaW5mb3JtYXRpb24gc2hv dWxkIGJlIGRpc3BsYXllZCBhYm91dCB0aGUgU1NML1RMUyIsCisiY29ubmVjdGlvbi4gIFdoZW4g REVCVUcgaXMgT04sIHRoZSBWRVJJRlkgY29tbWFuZCBkb2VzIG5vdCB0ZXJtaW5hdGUiLAorImNv bm5lY3Rpb25zIHdoZW4gc2V0IHRvIEZBSUwtSUYtTk8tUEVFUi1DRVJUIHdoZW4gYSBjZXJ0aWZp Y2F0ZSBpcyIsCisicHJlc2VudGVkIHRoYXQgY2Fubm90IGJlIHN1Y2Nlc3NmdWxseSB2ZXJpZmll ZC4gIEluc3RlYWQgZWFjaCBlcnJvciIsCisiaXMgZGlzcGxheWVkIGJ1dCB0aGUgY29ubmVjdGlv biBhdXRvbWF0aWNhbGx5IGNvbnRpbnVlcy4iLAorIiAiLAorIlNFVCBBVVRIRU5USUNBVElPTiB7 IFNTTCwgVExTIH0gREgtUEFSQU0tRklMRSA8ZmlsZW5hbWU+IiwKKyIgIFNwZWNpZmllcyBhIGZp bGUgY29udGFpbmluZyBESCBwYXJhbWV0ZXJzIHdoaWNoIGFyZSB1c2VkIHRvIGdlbmVyYXRlIiwK KyIgIHRlbXBvcmFyeSBESCBrZXlzLiAgSWYgYSBESCBwYXJhbWV0ZXIgZmlsZSBpcyBub3QgcHJv dmlkZWQgS2VybWl0IHVzZXMgYSIsCisiICBmaXhlZCBzZXQgb2YgcGFyYW1ldGVycyBkZXBlbmRp bmcgb24gdGhlIG5lZ290aWF0ZWQga2V5IGxlbmd0aC4gIEtlcm1pdCIsCisiICBwcm92aWRlcyBE SCBwYXJhbWV0ZXJzIGZvciBrZXkgbGVuZ3RocyBvZiA1MTIsIDc2OCwgMTAyNCwgMTUzNiwgYW5k IDIwNDgiLAorIiAgYml0cy4iLAorIiAiLAorIlNFVCBBVVRIRU5USUNBVElPTiB7IFNTTCwgVExT IH0gRFNBLUNFUlQtQ0hBSU4tRklMRSA8ZmlsZW5hbWU+IiwKKyIgIFNwZWNpZmllcyBhIGZpbGUg Y29udGFpbmluZyBhIERTQSBjZXJ0aWZpY2F0ZSBjaGFpbiB0byBiZSBzZW50IGFsb25nIHdpdGgi LAorIiAgdGhlIERTQS1DRVJUIHRvIHRoZSBwZWVyLiAgVGhpcyBmaWxlIG11c3Qgb25seSBiZSBz cGVjaWZpZWQgaWYgS2VybWl0IGlzIiwKKyIgIGJlaW5nIHVzZWQgYXMgYSBzZXJ2ZXIgYW5kIHRo ZSBEU0EgY2VydGlmaWNhdGUgd2FzIHNpZ25lZCBieSBhbiIsCisiICBpbnRlcm1lZGlhcnkgY2Vy dGlmaWNhdGUgYXV0aG9yaXR5LiIsCisiICIsCisiU0VUIEFVVEhFTlRJQ0FUSU9OIHsgU1NMLCBU TFMgfSBEU0EtQ0VSVC1GSUxFIDxmaWxlbmFtZT4iLAorIiAgU3BlY2lmaWVzIGEgZmlsZSBjb250 YWluaW5nIGEgRFNBIGNlcnRpZmljYXRlIHRvIGJlIHNlbnQgdG8gdGhlIHBlZXIgdG8gIiwKKyIg IGF1dGhlbnRpY2F0ZSB0aGUgaG9zdCBvciBlbmQgdXNlci4gIFRoZSBmaWxlIG1heSBjb250YWlu IHRoZSBtYXRjaGluZyBESCAiLAorIiAgcHJpdmF0ZSBrZXkgaW5zdGVhZCBvZiB1c2luZyB0aGUg RFNBLUtFWS1GSUxFIGNvbW1hbmQuIiwKKyIgIiwKKyJTRVQgQVVUSEVOVElDQVRJT04geyBTU0ws IFRMUyB9IERTQS1LRVktRklMRSA8ZmlsZW5hbWU+IiwKKyJTcGVjaWZpZXMgYSBmaWxlIGNvbnRh aW5pbmcgdGhlIHByaXZhdGUgREgga2V5IHRoYXQgbWF0Y2hlcyB0aGUgRFNBICIsCisiY2VydGlm aWNhdGUgc3BlY2lmaWVkIHdpdGggRFNBLUNFUlQtRklMRS4gIFRoaXMgY29tbWFuZCBpcyBvbmx5 IG5lY2Vzc2FyeSBpZiIsCisidGhlIHByaXZhdGUga2V5IGlzIG5vdCBhcHBlbmRlZCB0byB0aGUg Y2VydGlmaWNhdGUgaW4gdGhlIGZpbGUgc3BlY2lmaWVkIGJ5IiwKKyJEU0EtQ0VSVC1GSUxFLiIs CisiICIsCisiICBOb3RlOiBXaGVuIGV4ZWN1dGluZyBhIHNjcmlwdCBpbiB0aGUgYmFja2dyb3Vu ZCBvciB3aGVuIGl0IGlzIiwKKyIgIHJ1bm5pbmcgYXMgYW4gSW50ZXJuZXQgS2VybWl0IFNlcnZp Y2UgRGFlbW9uLCBLZXJtaXQgY2Fubm90IHN1cHBvcnQgIiwKKyIgIGVuY3J5cHRlZCBwcml2YXRl IGtleXMuICBXaGVuIGF0dGVtcHRpbmcgdG8gbG9hZCBhIHByaXZhdGUga2V5IHRoYXQgaXMiLAor IiAgZW5jcnlwdGVkLCBhIHByb21wdCB3aWxsIGJlIGdlbmVyYXRlZCByZXF1ZXN0aW5nIHRoZSBw YXNzcGhyYXNlIG5lY2Vzc2FyeSIsCisiICB0byBkZWNyeXB0IHRoZSBrZXlmaWxlLiAgVG8gYXV0 b21hdGUgYWNjZXNzIHRvIHRoZSBwcml2YXRlIGtleSB5b3UgbXVzdCIsCisiICBkZWNyeXB0IHRo ZSBlbmNyeXB0ZWQga2V5ZmlsZSBhbmQgY3JlYXRlIGFuIHVuZW5jcnlwdGVkIGtleWZpbGUgZm9y IHVzZSIsCisiICBieSBLZXJtaXQuICBUaGlzIGNhbiBiZSBhY2NvbXBsaXNoZWQgYnkgdXNpbmcg dGhlIGZvbGxvd2luZyBjb21tYW5kIGFuZCIsCisiICB0aGUgcGFzc3BocmFzZToiLAorIiAiLAor IiAgb3BlbnNzbCBkc2EgLWluIDxlbmNyeXB0ZWQta2V5LWZpbGU+IC1vdXQgPHVuZW5jcnlwdGVk LWtleS1maWxlPiIsCisiICIsCisiU0VUIEFVVEhFTlRJQ0FUSU9OIHsgU1NMLCBUTFMgfSBSQU5E T00tRklMRSA8ZmlsZW5hbWU+IiwKKyIgIFNwZWNpZmllcyBhIGZpbGUgY29udGFpbmluZyByYW5k b20gZGF0YSB0byBiZSB1c2VkIGFzIHNlZWQgZm9yIHRoZSIsCisiICBQc2V1ZG8gUmFuZG9tIE51 bWJlciBHZW5lcmF0b3IuICBUaGUgY29udGVudHMgb2YgdGhlIGZpbGUgYXJlIiwKKyIgIG92ZXJ3 cml0dGVuIHdpdGggbmV3IHJhbmRvbSBkYXRhIG9uIGVhY2ggdXNlLiIsCisiICIsCisiU0VUIEFV VEhFTlRJQ0FUSU9OIHsgU1NMLCBUTFMgfSBSU0EtQ0VSVC1DSEFJTi1GSUxFIDxmaWxlbmFtZT4i LAorIiAgU3BlY2lmaWVzIGEgZmlsZSBjb250YWluaW5nIGEgUlNBIGNlcnRpZmljYXRlIGNoYWlu IHRvIGJlIHNlbnQgYWxvbmcgd2l0aCIsCisiICB0aGUgUlNBLUNFUlQgdG8gdGhlIHBlZXIuICBU aGlzIGZpbGUgbXVzdCBvbmx5IGJlIHNwZWNpZmllZCBpZiBLZXJtaXQgaXMiLAorIiAgYmVpbmcg dXNlZCBhcyBhIHNlcnZlciBhbmQgdGhlIFJTQSBjZXJ0aWZpY2F0ZSB3YXMgc2lnbmVkIGJ5IGFu IiwKKyIgIGludGVybWVkaWFyeSBjZXJ0aWZpY2F0ZSBhdXRob3JpdHkuIiwKKyIgIiwKKyJTRVQg QVVUSEVOVElDQVRJT04geyBTU0wsIFRMUyB9IFJTQS1DRVJULUZJTEUgPGZpbGVuYW1lPiIsCisi ICBTcGVjaWZpZXMgYSBmaWxlIGNvbnRhaW5pbmcgYSBSU0EgY2VydGlmaWNhdGUgdG8gYmUgc2Vu dCB0byB0aGUgcGVlciB0byAiLAorIiAgYXV0aGVudGljYXRlIHRoZSBob3N0IG9yIGVuZCB1c2Vy LiAgVGhlIGZpbGUgbWF5IGNvbnRhaW4gdGhlIG1hdGNoaW5nIFJTQSAiLAorIiAgcHJpdmF0ZSBr ZXkgaW5zdGVhZCBvZiB1c2luZyB0aGUgUlNBLUtFWS1GSUxFIGNvbW1hbmQuIiwKKyIgIiwKKyJT RVQgQVVUSEVOVElDQVRJT04geyBTU0wsIFRMUyB9IFJTQS1LRVktRklMRSA8ZmlsZW5hbWU+IiwK KyIgIFNwZWNpZmllcyBhIGZpbGUgY29udGFpbmluZyB0aGUgcHJpdmF0ZSBSU0Ega2V5IHRoYXQg bWF0Y2hlcyB0aGUgUlNBIiwKKyIgIGNlcnRpZmljYXRlIHNwZWNpZmllZCB3aXRoIFJTQS1DRVJU LUZJTEUuICBUaGlzIGNvbW1hbmQgaXMgb25seSBuZWNlc3NhcnkiLAorIiAgaWYgdGhlIHByaXZh dGUga2V5IGlzIG5vdCBhcHBlbmRlZCB0byB0aGUgY2VydGlmaWNhdGUgaW4gdGhlIGZpbGUgc3Bl Y2lmaWVkIgorLAorIiAgYnkgUlNBLUNFUlQtRklMRS4gICIsCisiICIsCisiICBOb3RlOiBXaGVu IGV4ZWN1dGluZyBhIHNjcmlwdCBpbiB0aGUgYmFja2dyb3VuZCBvciB3aGVuIGl0IGlzIiwKKyIg IHJ1bm5pbmcgYXMgYW4gSW50ZXJuZXQgS2VybWl0IFNlcnZpY2UgRGFlbW9uLCBLZXJtaXQgY2Fu bm90IHN1cHBvcnQgIiwKKyIgIGVuY3J5cHRlZCBwcml2YXRlIGtleXMuICBXaGVuIGF0dGVtcHRp bmcgdG8gbG9hZCBhIHByaXZhdGUga2V5IHRoYXQgaXMiLAorIiAgZW5jcnlwdGVkLCBhIHByb21w dCB3aWxsIGJlIGdlbmVyYXRlZCByZXF1ZXN0aW5nIHRoZSBwYXNzcGhyYXNlIG5lY2Vzc2FyeSIs CisiICB0byBkZWNyeXB0IHRoZSBrZXlmaWxlLiAgVG8gYXV0b21hdGUgYWNjZXNzIHRvIHRoZSBw cml2YXRlIGtleSB5b3UgbXVzdCIsCisiICBkZWNyeXB0IHRoZSBlbmNyeXB0ZWQga2V5ZmlsZSBh bmQgY3JlYXRlIGFuIHVuZW5jcnlwdGVkIGtleWZpbGUgZm9yIHVzZSIsCisiICBieSBLZXJtaXQu ICBUaGlzIGNhbiBiZSBhY2NvbXBsaXNoZWQgYnkgdXNpbmcgdGhlIGZvbGxvd2luZyBjb21tYW5k IGFuZCIsCisiICB0aGUgcGFzc3BocmFzZToiLAorIiAiLAorIiAgb3BlbnNzbCByc2EgLWluIDxl bmNyeXB0ZWQta2V5LWZpbGU+IC1vdXQgPHVuZW5jcnlwdGVkLWtleS1maWxlPiIsCisiICIsCisi U0VUIEFVVEhFTlRJQ0FUSU9OIHsgU1NMLCBUTFMgfSBWRVJCT1NFIHsgT04sIE9GRiB9IiwKKyIg IFNwZWNpZmllcyB3aGV0aGVyIGluZm9ybWF0aW9uIGFib3V0IHRoZSBhdXRoZW50aWNhdGlvbiAo aWUsIHRoZSIsCisiICBjZXJ0aWZpY2F0ZSBjaGFpbikgc2hvdWxkIGJlIGRpc3BsYXllZCB1cG9u IG1ha2luZyBhIGNvbm5lY3Rpb24uIiwKKyIgIiwKKyJTRVQgQVVUSEVOVElDQVRJT04geyBTU0ws IFRMUyB9IFZFUklGWSB7IE5PLFBFRVItQ0VSVCxGQUlMLUlGLU5PLVBFRVItQ0VSVCB9IiwKKyIg IFNwZWNpZmllcyB3aGV0aGVyIGNlcnRpZmljYXRlcyBzaG91bGQgYmUgcmVxdWVzdGVkIGZyb20g dGhlIHBlZXIgdmVyaWZpZWQ7IiwKKyIgIHdoZXRoZXIgdGhleSBzaG91bGQgYmUgdmVyaWZpZWQg d2hlbiB0aGV5IGFyZSBwcmVzZW50ZWQ7IGFuZCB3aGV0aGVyIHRoZXkiLAorIiAgc2hvdWxkIGJl IHJlcXVpcmVkLiAgV2hlbiBzZXQgdG8gTk8gKHRoZSBkZWZhdWx0IGZvciBJS1NEKSwgS2VybWl0 IGRvZXMiLAorIiAgbm90IHJlcXVlc3QgdGhhdCB0aGUgcGVlciBzZW5kIGEgY2VydGlmaWNhdGU7 IGlmIG9uZSBpcyBwcmVzZW50ZWQgaXQgaXMiLAorIiAgaWdub3JlZC4gIFdoZW4gc2V0IHRvIFBF RVItQ0VSVCAodGhlIGRlZmF1bHQgd2hlbiBub3QgSUtTRCksIEtlcm1pdCIsCisiICByZXF1ZXN0 cyBhIGNlcnRpZmljYXRlIGJlIHNlbnQgYnkgdGhlIHBlZXIuICBJZiBwcmVzZW50ZWQsIHRoZSBj ZXJ0aWZpY2F0ZSIsCisiICBpcyB2ZXJpZmllZC4gIEFueSBlcnJvcnMgZHVyaW5nIHRoZSB2ZXJp ZmljYXRpb24gcHJvY2VzcyByZXN1bHQgaW4iLAorIiAgcXVlcmllcyB0byB0aGUgZW5kIHVzZXIu ICBXaGVuIHNldCB0byBGQUlMLUlGLU5PLVBFRVItQ0VSVCwgS2VybWl0IiwKKyIgIHJlcXVlc3Rz IGEgY2VydGlmaWNhdGUgYmUgc2VudCBieSB0aGUgcGVlci4gIElmIHRoZSBjZXJ0aWZpY2F0ZSBp cyBub3QiLAorIiAgcHJlc2VudGVkIG9yIGZhaWxzIHRvIHZlcmlmeSwgdGhlIGNvbm5lY3Rpb24g aXMgdGVybWluYXRlZCB3aXRob3V0IiwKKyIgIHF1ZXJ5aW5nIHRoZSB1c2VyLiIsCisiICIsCisi ICBJZiBhbiBhbm9ueW1vdXMgY2lwaGVyIChpLmUuLCBBREgpIGlzIGRlc2lyZWQsIHRoZSBOTyBz ZXR0aW5nIG11c3QgYmUiLAorIiAgdXNlZC4gIE90aGVyd2lzZSwgdGhlIHJlY2VpcHQgb2YgdGhl IHBlZXIgY2VydGlmaWNhdGUgcmVxdWVzdCBpcyIsCisiICBpbnRlcnByZXRlZCBhcyBhIHByb3Rv Y29sIGVycm9yIGFuZCB0aGUgbmVnb3RpYXRpb24gZmFpbHMuIiwKKyIgIiwKKyIgIElmIHlvdSB3 aXNoIHRvIGFsbG93IHRoZSBwZWVyIHRvIGF1dGhlbnRpY2F0ZSB1c2luZyBlaXRoZXIgYW4gWDUw OSIsCisiICBjZXJ0aWZpY2F0ZSB0byB1c2VyaWQgbWFwcGluZyBmdW5jdGlvbiBvciB2aWEgdXNl IG9mIGEgfi8udGxzbG9naW4gZmlsZSIsCisiICB5b3UgbXVzdCB1c2UgZWl0aGVyIFBFRVItQ0VS VCBvciBGQUlMLUlGLU5PLVBFRVItQ0VSVC4gIE90aGVyd2lzZSwgYW55IiwKKyIgIGNlcnRpZmlj YXRlcyB0aGF0IGFyZSBwcmVzZW50ZWQgaXMgaWdub3JlZC4gIEluIG90aGVyIHdvcmRzLCB1c2Ug Tk8gaWYgeW91IiwKKyIgIHdhbnQgdG8gZGlzYWJsZSB0aGUgYWJpbGl0eSB0byB1c2UgY2VydGlm aWNhdGVzIHRvIGF1dGhlbnRpY2F0ZSBhIHBlZXIuIiwKKyIgIiwKKyJTRVQgQVVUSEVOVElDQVRJ T04geyBTU0wsIFRMUyB9IFZFUklGWS1ESVIgPGRpcmVjdG9yeT4iLAorIiAgU3BlY2lmaWVzIGEg ZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgcm9vdCBDQSBjZXJ0aWZpY2F0ZSBmaWxlcyB1c2VkIHRv IiwKKyIgIHZlcmlmeSB0aGUgY2VydGlmaWNhdGUgY2hhaW5zIHByZXNlbnRlZCBieSB0aGUgcGVl ci4gIEVhY2ggZmlsZSBpcyBuYW1lZCIsCisiICBieSBhIGhhc2ggb2YgdGhlIGNlcnRpZmljYXRl LiIsCisiICIsCisiICBPcGVuU1NMIGV4cGVjdHMgdGhlIGhhc2ggc3ltbGlua3MgdG8gYmUgbWFk ZSBsaWtlIHRoaXM6IiwKKyIgIiwKKyIgICAgbG4gLXMgY2VydC5wZW0gYG9wZW5zc2wgeDUwOSAt aGFzaCAtbm9vdXQgLWluIGNlcnQucGVtYC4wIiwKKyIgIiwKKyIgIFNpbmNlIG5vdCBhbGwgZmls ZSBzeXN0ZW1zIGhhdmUgc3ltbGlua3MgeW91IGNhbiB1c2UgdGhlIGZvbGxvd2luZyBjb21tYW5k IiwKKyIgIGluIEtlcm1pdCB0byBjb3B5IHRoZSBjZXJ0LnBlbSBmaWxlIHRvIHRoZSBoYXNoIGZp bGUgbmFtZS4iLAorIiAiLAorIiAgICBjb3B5IGNlcnQucGVtIHtcXGZjb21tYW5kKG9wZW5zc2wu ZXhlIHg1MDkgLWhhc2ggLW5vb3V0IC1pbiBjZXJ0LnBlbSkuMH0iLAorIiAiLAorIiAgVGhpcyBw cm9kdWNlcyBhIGhhc2ggYmFzZWQgb24gdGhlIHN1YmplY3QgZmllbGQgaW4gdGhlIGNlcnQgc3Vj aCB0aGF0IHRoZSIsCisiICBjZXJ0aWZpY2F0ZSBtYXkgYmUgcXVpY2tseSBmb3VuZC4iLAorIiAi LAorIlNFVCBBVVRIRU5USUNBVElPTiB7IFNTTCwgVExTIH0gVkVSSUZZLUZJTEUgPGZpbGU+IiwK KyIgIFNwZWNpZmllcyBhIGZpbGUgdGhhdCBjb250YWlucyByb290IENBIGNlcnRpZmljYXRlcyB0 byBiZSB1c2VkIGZvciIsCisiICB2ZXJpZnlpbmcgY2VydGlmaWNhdGUgY2hhaW5zLiIsCisiICIs CisjZW5kaWYgLyogQ0tfU1NMICovCisiIgorfTsKKworc3RhdGljIGNoYXIgKmh4eW5ldFtdID0g eworIlN5bnRheDogU0VUIE5FVFdPUksgeyBUWVBFIG5ldHdvcmstdHlwZSwgRElSRUNUT1JZIFsg ZmlsZShzKS4uLiBdIH0iLAorIiAiLAorIlNlbGVjdCB0aGUgdHlwZSBvZiBuZXR3b3JrIHRvIGJl IHVzZWQgd2l0aCBTRVQgSE9TVCBjb25uZWN0aW9uczoiLAorIiAiLAorI2lmZGVmIE5FVENNRAor IiAgU0VUIE5FVFdPUksgVFlQRSBDT01NQU5EICAgOyBNYWtlIGEgY29ubmVjdGlvbiB0aHJvdWdo IGFuIGV4dGVybmFsIGNvbW1hbmQiLAorI2VuZGlmIC8qIE5FVENNRCAqLworI2lmZGVmIFRDUFNP Q0tFVAorIiAgU0VUIE5FVFdPUksgVFlQRSBUQ1AvSVAgICAgOyBJbnRlcm5ldDogVGVsbmV0LCBS bG9naW4sIGV0Yy4iLAorI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLworI2lmZGVmIEFOWVgyNQorIiAg U0VUIE5FVFdPUksgVFlQRSBYLjI1ICAgICAgOyBYLjI1IHBlZXItdG8tcGVlciBjb25uZWN0aW9u cy4iLAorI2VuZGlmIC8qIEFOWVgyNSAqLworI2lmZGVmIERFQ05FVAorIiAgU0VUIE5FVFdPUksg VFlQRSBQQVRIV09SS1MgeyBMQVQsIENURVJNIH0gOyBERUMgTEFUIG9yIENURVJNIGNvbm5lY3Rp b25zLiIsCisjZW5kaWYgLyogREVDTkVUICovCisjaWZkZWYgTlBJUEUKKyIgIFNFVCBORVRXT1JL IFRZUEUgTkFNRUQtUElQRSA8cGlwZW5hbWU+ICA7IE9TLzIgTmFtZWQgUGlwZSBjb25uZWN0aW9u cy4iLAorI2VuZGlmIC8qIE5QSVBFICovCisjaWZkZWYgQ0tfTkVUQklPUworIiAgU0VUIE5FVFdP UksgVFlQRSBORVRCSU9TICAgICAgICAgICAgICAgIDsgTkVUQklPUyBwZWVyLXRvLXBlZXIgY29u bmVjdGlvbnMiLAorI2VuZGlmIC8qIENLX05FVEJJT1MgKi8KKyNpZmRlZiBTVVBFUkxBVAorIiAg U0VUIE5FVFdPUksgVFlQRSBTVVBFUkxBVCA7IExBVCBjb25uZWN0aW9ucyAoTWVyaWRpYW4gVGVj aG5vbG9neSBTdXBlckxBVCkiLAorI2VuZGlmIC8qIFNVUEVSTEFUICovCisiICIsCisiSWYgb25s eSBvbmUgbmV0d29yayB0eXBlIGlzIGxpc3RlZCBhYm92ZSwgdGhhdCBpcyB0aGUgZGVmYXVsdCBu ZXR3b3JrIGZvciIsCisjaWZkZWYgUkxPR0NPREUKKyJTRVQgSE9TVCBjb21tYW5kcy4gIEFsc28g c2VlIFNFVCBIT1NULCBURUxORVQsIFJMT0dJTi4iLAorI2Vsc2UKKyNpZmRlZiBUTkNPREUKKyJT RVQgSE9TVCBjb21tYW5kcy4gIEFsc28gc2VlIFNFVCBIT1NULCBURUxORVQuIiwKKyNlbHNlCisi U0VUIEhPU1QgY29tbWFuZHMuICBBbHNvIHNlZSBTRVQgSE9TVC4iLAorI2VuZGlmIC8qIFROQ09E RSAqLworI2VuZGlmIC8qIFJMT0dDT0RFICovCisiICIsCisiU0VUIE5FVFdPUksgRElSRUNUT1JZ IFsgZmlsZSBbIGZpbGUgWyAuLi4gXSBdIF0iLAorIiAgU3BlY2lmaWVzIHRoZSBuYW1lKHMpIG9m IHplcm8gb3IgbW9yZSBuZXR3b3JrIGRpcmVjdG9yeSBmaWxlcywgc2ltaWxhciB0byIsCisiICBk aWFsaW5nIGRpcmVjdG9yaWVzIChIRUxQIERJQUwgZm9yIGRldGFpbHMpLiAgVGhlIGdlbmVyYWwg Zm9ybWF0IG9mIGEiLAorIiAgbmV0d29yayBkaXJlY3RvcnkgZW50cnkgaXM6IiwKKyIgIiwKKyIg ICAgbmFtZSBuZXR3b3JrLXR5cGUgYWRkcmVzcyBbIG5ldHdvcmstc3BlY2lmaWMtaW5mbyBdIFsg OyBjb21tZW50IF0iLAorIiAiLAorIiAgRm9yIFRDUC9JUCwgdGhlIGZvcm1hdCBpczoiLAorIiAi LAorIiAgICBuYW1lIHRjcC9pcCBpcC1ob3N0bmFtZS1vci1hZGRyZXNzIFsgc29ja2V0IF0gWyA7 IGNvbW1lbnQgXSIsCisiICIsCisiWW91IGNhbiBoYXZlIG11bHRpcGxlIG5ldHdvcmsgZGlyZWN0 b3JpZXMgYW5kIHlvdSBjYW4gaGF2ZSBtdWx0aXBsZSBlbnRyaWVzIiwKKyJ3aXRoIHRoZSBzYW1l IG5hbWUuICBTRVQgSE9TVCA8bmFtZT4gYW5kIFRFTE5FVCA8bmFtZT4gY29tbWFuZHMgbG9vayB1 cCB0aGUiLAorImdpdmVuIDxuYW1lPiBpbiB0aGUgZGlyZWN0b3J5IGFuZCwgaWYgZm91bmQsIGZp bGwgaW4gdGhlIGFkZGl0aW9uYWwgaXRlbXMiLAorImZyb20gdGhlIGVudHJ5LCBhbmQgdGhlbiB0 cnkgYWxsIG1hdGNoaW5nIGVudHJpZXMgdW50aWwgb25lIHN1Y2NlZWRzLiIsCisiIn07CisKKyNp Zm5kZWYgTk9UQ1BPUFRTCitzdGF0aWMgY2hhciAqaHh5dGNwW10gPSB7CisjaWZkZWYgU09MX1NP Q0tFVAorIlNFVCBUQ1AgQUREUkVTUyA8aXAtYWRkcmVzcz4iLAorIiAgVGhpcyBhbGxvd3MgYSBz cGVjaWZpYyBJUCBBZGRyZXNzIG9uIGEgbXVsdGlob21lZCBob3N0IHRvIGJlIHVzZWQiLAorIiAg aW5zdGVhZCBvZiBhbGxvd2luZyB0aGUgVENQL0lQIHN0YWNrIHRvIGNob29zZS4gIFRoaXMgbWF5 IGJlIG5lY2Vzc2FyeSIsCisiICB3aGVuIHVzaW5nIGF1dGhlbnRpY2F0aW9uIG9yIGxpc3Rlbmlu ZyBmb3IgYW4gaW5jb21pbmcgY29ubmVjdGlvbi4iLAorIiAgU3BlY2lmeSBubyA8aXAtYWRkcmVz cz4gdG8gcmVtb3ZlIHRoZSBwcmVmZXJlbmNlLiIsCisiICIsCisiU0VUIFRDUCBLRUVQQUxJVkUg eyBPTiwgT0ZGIH0iLAorIiAgU2V0dGluZyB0aGlzIE9OIG1pZ2h0IGhlbHAgdG8gZGV0ZWN0IGJy b2tlbiBjb25uZWN0aW9ucyBtb3JlIHF1aWNrbHkuIiwKKyIgIChkZWZhdWx0IGlzIE9OLikiLAor IiAiLAorIlNFVCBUQ1AgTElOR0VSIHsgT04gW3RpbWVvdXRdLCBPRkYgfSIsCisiICBTZXR0aW5n IHRoaXMgT04gZW5zdXJlcyB0aGF0IGEgY29ubmVjdGlvbiBkb2Vzbid0IGNsb3NlIGJlZm9yZSBh bGwiLAorIiAgb3V0c3RhbmRpbmcgZGF0YSBoYXMgYmVlbiB0cmFuc2ZlcnJlZCBhbmQgYWNrbm93 bGVkZ2VkLiAgVGhlIHRpbWVvdXQgaXMiLAorIiAgbWVhc3VyZWQgaW4gMTB0aHMgb2YgbWlsbGlz ZWNvbmRzLiAgVGhlIGRlZmF1bHQgaXMgT04gd2l0aCBhIHRpbWVvdXQgb2YgMC4iLAorIiAiLAor IlNFVCBUQ1AgTk9ERUxBWSB7IE9OLCBPRkYgfSIsCisiICBPTiBtZWFucyBzZW5kIHNob3J0IFRD UCBwYWNrZXRzIGltbWVkaWF0ZWx5IHJhdGhlciB0aGFuIHdhaXRpbmciLAorIiAgdG8gYWNjdW11 bGF0ZSBhIGJ1bmNoIG9mIHRoZW0gYmVmb3JlIHRyYW5zbWl0dGluZyAoTmFnbGUgQWxnb3JpdGht KS4iLAorIiAgKGRlZmF1bHQgaXMgT0ZGLikiLAorIiAiLAorIlNFVCBUQ1AgUkVDVkJVRiA8bnVt YmVyPiIsCisiU0VUIFRDUCBTRU5EQlVGIDxudW1iZXI+IiwKKyIgICBUQ1AgcmVjZWl2ZSBhbmQg c2VuZCBidWZmZXIgc2l6ZXMuICAoZGVmYXVsdCBpcyAtMSwgdXNlIHN5c3RlbSBkZWZhdWx0cy4p IiwKKyIgIiwKKyJUaGVzZSBpdGVtcyBsZXQgeW91IHR1bmUgVENQIG5ldHdvcmtpbmcgcGVyZm9y bWFuY2Ugb24gYSBwZXItY29ubmVjdGlvbiIsCisiYmFzaXMgYnkgYWRqdXN0aW5nIHBhcmFtZXRl cnMgeW91IG5vcm1hbGx5IHdvdWxkIG5vdCBoYXZlIGFjY2VzcyB0by4gIFlvdSIsCisic2hvdWxk IHVzZSB0aGVzZSBjb21tYW5kcyBvbmx5IGlmIHlvdSBmZWVsIHRoYXQgdGhlIFRDUC9JUCBwcm90 b2NvbCBzdGFjayIsCisidGhhdCBLZXJtaXQgaXMgdXNpbmcgaXMgZ2l2aW5nIHlvdSBpbmFkZXF1 YXRlIHBlcmZvcm1hbmNlLCBhbmQgdGhlbiBvbmx5IGlmIiwKKyJ5b3UgdW5kZXJzdGFuZCB0aGUg Y29uY2VwdHMgKHNlZSwgZm9yIGV4YW1wbGUsIHRoZSBDb21lciBUQ1AvSVAgYm9va3MpLCBhbmQi LAorInRoZW4gYXQgeW91ciBvd24gcmlzay4gIFRoZXNlIHNldHRpbmdzIGFyZSBkaXNwbGF5ZWQg YnkgU0hPVyBORVRXT1JLLiAgTm90IiwKKyJhbGwgb3B0aW9ucyBhcmUgbmVjZXNzYXJpbHkgYXZh aWxhYmxlIGluIGFsbCBLZXJtaXQgdmVyc2lvbnM7IGl0IGRlcGVuZHMgb24iLAorInRoZSB1bmRl cmx5aW5nIFRDUC9JUCBzZXJ2aWNlcy4iLAorIiAiLAorIlRoZSBmb2xsb3dpbmcgVENQIGFuZC9v ciBJUCBwYXJhbWV0ZXIocykgbWF5IGFsc28gYmUgY2hhbmdlZDoiLAorIiAiLAorI2VuZGlmIC8q IFNPTF9TT0NLRVQgKi8KKyJTRVQgVENQIFJFVkVSU0UtRE5TLUxPT0tVUCB7IEFVVE8sIE9OLCBP RkYgfSIsCisiICBUZWxscyBLZXJtaXQgd2hldGhlciB0byBwZXJmb3JtIHJldmVyc2UgRE5TIGxv b2t1cCBvbiBUQ1AvSVAgY29ubmVjdGlvbnMiLAorIiAgc28gS2VybWl0IGNhbiBkZXRlcm1pbmUg dGhlIGFjdHVhbCBob3N0bmFtZSBvZiB0aGUgaG9zdCBpdCBpcyBjb25uZWN0ZWQiLAorIiAgdG8s IHdoaWNoIGlzIHVzZWZ1bCBmb3IgY29ubmVjdGlvbnMgdG8gaG9zdCBwb29scywgYW5kIGlzIHJl cXVpcmVkIGZvciIsCisiICBLZXJiZXJvcyBjb25uZWN0aW9ucyB0byBob3N0IHBvb2xzIGFuZCBm b3IgaW5jb21pbmcgY29ubmVjdGlvbnMuICBJZiB0aGUiLAorIiAgb3RoZXIgaG9zdCBkb2VzIG5v dCBoYXZlIGEgRE5TIGVudHJ5LCB0aGUgcmV2ZXJzZSBsb29rdXAgY291bGQgdGFrZSBhIGxvbmci LAorIiAgdGltZSAobWludXRlcykgdG8gZmFpbCwgYnV0IHRoZSBjb25uZWN0aW9uIHdpbGwgc3Rp bGwgYmUgbWFkZS4gIFR1cm4gdGhpcyIsCisiICBvcHRpb24gT0ZGIGZvciBzcGVlZGllciBjb25u ZWN0aW9ucyBpZiB5b3UgZG8gbm90IG5lZWQgdG8ga25vdyBleGFjdGx5IiwKKyIgIHdoaWNoIGhv c3QgeW91IGFyZSBjb25uZWN0ZWQgdG8gYW5kIHlvdSBhcmUgbm90IHVzaW5nIEtlcmJlcm9zLiAg QVVUTywgdGhlIiwKKyIgIGRlZmF1bHQsIG1lYW5zIHRoZSBsb29rdXAgaXMgZG9uZSBvbiBob3N0 bmFtZXMsIGJ1dCBub3Qgb24gbnVtZXJpYyBJUCIsCisiICBhZGRyZXNzZXMgdW5sZXNzIEtlcmJl cm9zIHN1cHBvcnQgaXMgaW5zdGFsbGVkLiIsCisjaWZkZWYgQ0tfRE5TX1NSVgorIiAiLAorIlNF VCBUQ1AgRE5TLVNFUlZJQ0UtUkVDT1JEUyB7T04sIE9GRn0iLAorIiAgVGVsbHMgS2VybWl0IHdo ZXRoZXIgdG8gdHJ5IHRvIHVzZSBETlMgU1JWIHJlY29yZHMgdG8gZGV0ZXJtaW5lIHRoZSIsCisi ICBob3N0IGFuZCBwb3J0IG51bWJlciB1cG9uIHdoaWNoIHRvIGZpbmQgYW4gYWR2ZXJ0aXNlZCBz ZXJ2aWNlLiAgRm9yIiwKKyIgIGV4YW1wbGUsIGlmIGEgaG9zdCB3YW50cyByZWd1bGFyIFRlbG5l dCBjb25uZWN0aW9ucyByZWRpcmVjdGVkIHRvIHNvbWUiLAorIiAgcG9ydCBvdGhlciB0aGFuIDIz LCB0aGlzIGZlYXR1cmUgYWxsb3dzIEtlcm1pdCB0byBhc2sgdGhlIGhvc3Qgd2hpY2giLAorIiAg cG9ydCBpdCBzaG91bGQgdXNlLiAgU2luY2Ugbm90IGFsbCBkb21haW4gc2VydmVycyBhcmUgc2V0 IHVwIHRvIGFuc3dlciIsCisiICBzdWNoIHJlcXVlc3RzLCB0aGlzIGZlYXR1cmUgaXMgT0ZGIGJ5 IGRlZmF1bHQuIiwKKyNlbmRpZiAvKiBDS19ETlNfU1JWICovCisjaWZkZWYgTlQKKyNpZmRlZiBD S19TT0NLUworIiAiLAorIlNFVCBUQ1AgU09DS1MtU0VSVkVSIFs8aG9zdG5hbWUgb3IgaXAtYWRk cmVzcz5dIiwKKyIgIElmIGEgaG9zdG5hbWUgb3IgaXAtYWRkcmVzcyBpcyBzcGVjaWZpZWQsIEtl cm1pdCB3aWxsIHVzZSB0aGUgU09DS1MiLAorIiAgc2VydmVyIHdoZW4gYXR0ZW1wdGluZyBvdXRn b2luZyBjb25uZWN0aW9ucy4gIElmIG5vIGhvc3RuYW1lIG9yIiwKKyIgIGlwLWFkZHJlc3MgaXMg c3BlY2lmaWVkLCBhbnkgcHJldmlvdXNseSBzcGVjaWZpZWQgU09DS1Mgc2VydmVyIHdpbGwiLAor IiAgYmUgcmVtb3ZlZC4iLAorI2VuZGlmIC8qIENLX1NPQ0tTICovCisjZW5kaWYgLyogTlQgKi8K KyNpZm5kZWYgTk9IVFRQCisiICIsCisiU0VUIFRDUCBIVFRQLVBST1hZIFs8aG9zdG5hbWUgb3Ig aXAtYWRkcmVzcz5bOjxwb3J0Pl1dIiwKKyIgIElmIGEgaG9zdG5hbWUgb3IgaXAtYWRkcmVzcyBp cyBzcGVjaWZpZWQsIEtlcm1pdCB3aWxsIHVzZSB0aGUgUHJveHkiLAorIiAgc2VydmVyIHdoZW4g YXR0ZW1wdGluZyBvdXRnb2luZyBjb25uZWN0aW9ucy4gIElmIG5vIGhvc3RuYW1lIG9yIiwKKyIg IGlwLWFkZHJlc3MgaXMgc3BlY2lmaWVkLCBhbnkgcHJldmlvdXNseSBzcGVjaWZpZWQgUHJveHkg c2VydmVyIHdpbGwiLAorIiAgYmUgcmVtb3ZlZC4gIElmIG5vIHBvcnQgbnVtYmVyIGlzIHNwZWNp ZmllZCwgdGhlIFwiaHR0cFwiIHNlcnZpY2UiLAorIiAgd2lsbCBiZSB1c2VkLiIsCisjZW5kaWYg LyogTk9IVFRQICovCisiIn07CisjZW5kaWYgLyogTk9UQ1BPUFRTICovCisjZW5kaWYgLyogTkVU Q09OTiAqLworCisjaWZkZWYgVE5DT0RFCitzdGF0aWMgY2hhciAqaHh5dG9wdFtdID0geworIlNF VCBURUxPUFQgWyB7IC9DTElFTlQsIC9TRVJWRVIgfSBdIDxvcHRpb24+IC0iLAorIiAgICB7IEFD Q0VQVEVELCBSRUZVU0VELCBSRVFVRVNURUQsIFJFUVVJUkVEIH0gLSIsCisiICAgIFsgeyBBQ0NF UFRFRCwgUkVGVVNFRCwgUkVRVUVTVEVELCBSRVFVSVJFRCB9IF0iLAorIiAgU0VUIFRFTE9QVCBs ZXRzIHlvdSBzcGVjaWZ5IHBvbGljeSByZXF1aXJlbWVudHMgZm9yIEtlcm1pdCdzIGhhbmRsaW5n IG9mIiwKKyIgIFRlbG5ldCBvcHRpb24gbmVnb3RpYXRpb25zLiAgU2V0dGluZyBhbiBvcHRpb24g UkVRVUlSRUQgY2F1c2VzIEtlcm1pdCIsCisiICB0byBvZmZlciB0aGUgb3B0aW9uIHRvIHRoZSBw ZWVyIGFuZCBkaXNjb25uZWN0IGlmIHRoZSBvcHRpb24gaXMgcmVmdXNlZC4iLAorIiAgUkVRVUVT VEVEIGNhdXNlcyBLZXJtaXQgdG8gb2ZmZXIgYW4gb3B0aW9uIHRvIHRoZSBwZWVyLiAgQUNDRVBU RUQgcmVzdWx0cyIsCisiICBpbiBubyBvZmZlciBidXQgS2VybWl0IHdpbGwgYXR0ZW1wdCB0byBu ZWdvdGlhdGUgdGhlIG9wdGlvbiBpZiBpdCBpcyIsCisiICByZXF1ZXN0ZWQuICBSRUZVU0VEIGlu c3RydWN0cyBLZXJtaXQgdG8gcmVmdXNlIHRoZSBvcHRpb24gaWYgaXQgaXMiLAorIiAgcmVxdWVz dGVkIGJ5IHRoZSBwZWVyLiIsCisiICIsCisiICBTb21lIG9wdGlvbnMgYXJlIG5lZ290aWF0ZWQg aW4gdHdvIGRpcmVjdGlvbnMgYW5kIGFjY2VwdCBzZXBhcmF0ZSBwb2xpY2llcyIsCisiICBmb3Ig ZWFjaCBkaXJlY3Rpb247IHRoZSBmaXJzdCBrZXl3b3JkIGFwcGxpZXMgdG8gS2VybWl0IGl0c2Vs ZiwgdGhlIHNlY29uZCIsCisiICBhcHBsaWVzIHRvIEtlcm1pdCdzIFRlbG5ldCBwYXJ0bmVyOyBp ZiB0aGUgc2Vjb25kIGtleXdvcmQgaXMgb21pdHRlZCwgYW4iLAorIiAgYXBwcm9wcmlhdGUgKG9w dGlvbi1zcGVjaWZpYykgZGVmYXVsdCBpcyBhcHBsaWVkLiAgWW91IGNhbiBhbHNvIGluY2x1ZGUg YSIsCisiICAvQ0xJRU5UIG9yIC9TRVJWRVIgc3dpdGNoIHRvIGluZGljYXRlIHdoZXRoZXIgdGhl IGdpdmVuIHBvbGljaWVzIGFwcGx5IiwKKyIgIHdoZW4gS2VybWl0IGlzIHRoZSBUZWxuZXQgY2xp ZW50IG9yIHRoZSBUZWxuZXQgc2VydmVyOyBpZiBubyBzd2l0Y2ggaXMiLAorIiAgZ2l2ZW4sIHRo ZSBjb21tYW5kIGFwcGxpZXMgdG8gdGhlIGNsaWVudC4iLAorIiAiLAorIiAgTm90ZSB0aGF0IHNv bWUgb2YgS2VybWl0J3MgVGVsbmV0IHBhcnRuZXJzIGZhaWwgdG8gcmVmdXNlIG9wdGlvbnMgdGhh dCIsCisiICB0aGV5IGRvIG5vdCByZWNvZ25pemUgYW5kIGluc3RlYWQgZG8gbm90IHJlc3BvbmQg YXQgYWxsLiAgSW4gdGhpcyBjYXNlIGl0IiwKKyIgIGlzIHBvc3NpYmxlIHRvIHVzZSBTRVQgVEVM T1BUIHRvIGluc3RydWN0IEtlcm1pdCB0byBSRUZVU0UgdGhlIG9wdGlvbiIsCisiICBiZWZvcmUg Y29ubmVjdGluZyB0byB0aGUgcHJvYmxlbSBob3N0LCB0aHVzIHNraXBwaW5nIHRoZSBwcm9ibGVt YXRpYyIsCisiICBuZWdvdGlhdGlvbi4iLAorIiAiLAorIiAgVXNlIFNIT1cgVEVMT1BUIHRvIHZp ZXcgY3VycmVudCBUZWxuZXQgT3B0aW9uIG5lZ290aWF0aW9uIHNldHRpbmdzLiIsCisiICBTSE9X IFRFTE5FVCBkaXNwbGF5cyBjdXJyZW50IFRlbG5ldCBzZXR0aW5ncy4iLAorIiJ9OworCitzdGF0 aWMgY2hhciAqaHh5dGVsW10gPSB7CisiU3ludGF4OiBTRVQgVEVMTkVUIHBhcmFtZXRlciB2YWx1 ZSIsCisiICIsCisiRm9yIFRDUC9JUCBURUxORVQgY29ubmVjdGlvbnMsIHdoaWNoIGFyZSBpbiBO VlQgKEFTQ0lJKSBtb2RlIGJ5IGRlZmF1bHQ6IiwKKyIgIiwKKyNpZmRlZiBDS19BVVRIRU5USUNB VElPTgorI2lmZGVmIENPTU1FTlQKKyJTRVQgVEVMTkVUIEFVVEhFTklDQVRJT04geyBBQ0NFUFRF RCwgUkVGVVNFRCwgUkVRVUVTVEVELCBSRVFVSVJFRCB9IiwKKyIgIEFDQ0VQVCBvciBSRUZVU0Ug YXV0aGVudGljYXRpb24gYmlkcywgb3IgYWN0aXZlbHkgUkVRVUVTVCBhdXRoZW50aWNhdGlvbi4i LAorIiAgUkVRVUlSRUQgcmVmdXNlcyB0aGUgY29ubmVjdGlvbiBpZiBhdXRoZW50aWNhdGlvbiBp cyBub3Qgc3VjY2Vzc2Z1bGx5IiwKKyIgIG5lZ290aWF0ZWQuICBBQ0NFUFRFRCBieSBkZWZhdWx0 LiIsCisiICIsCisjZW5kaWYgLyogQ09NTUVOVCAqLworIlNFVCBURUxORVQgQVVUSEVOVElDQVRJ T04gVFlQRSB7IEFVVE9NQVRJQywgS0VSQkVST1NfSVYsIEtFUkJFUk9TX1YsIC4uLiIsCisjaWZk ZWYgTlQKKyIgIC4uLiwgTlRMTSwgU1NMLCBTUlAsIE5PTkUgfSBbLi4uXSIsCisjZWxzZSAvKiBO VCAqLworIiAgLi4uLCBTU0wsIFNSUCwgTk9ORSB9IFsuLi5dIiwKKyNlbmRpZiAvKiBOVCAqLwor IiAgQVVUT01BVElDIGlzIHRoZSBkZWZhdWx0LiAgQXZhaWxhYmxlIG9wdGlvbnMgY2FuIHZhcnkg ZGVwZW5kaW5nIG9uIHRoZSIsCisiICBmZWF0dXJlcyBLZXJtaXQgd2FzIGJ1aWx0IHRvIHN1cHBv cnQgYW5kIHRoZSBvcGVyYXRpbmcgc3lzdGVtIiwKKyIgIGNvbmZpZ3VyYXRpb247IHR5cGUgU0VU IFRFTE5FVCBBVVRIRU5USUNBVElPTiBUWVBFID8gZm9yIGEgbGlzdC4iLAorIiAiLAorIiAgV2hl biBLZXJtaXQgaXMgdGhlIFRlbG5ldCBjbGllbnQ6IiwKKyIgICAgQVVUT01BVElDIGFsbG93cyB0 aGUgaG9zdCB0byBjaG9vc2UgdGhlIHByZWZlcnJlZCB0eXBlIG9mIGF1dGhlbnRpY2F0aW9uLiIK KywKKyIgICAgTk9ORSBpbnN0cnVjdHMgS2VybWl0IHRvIHJlZnVzZSBhbGwgYXV0aGVudGljYXRp b24gbWV0aG9kcyB3aGVuIHRoZSIsCisiICAgIGF1dGhlbnRpY2F0aW9uIG9wdGlvbiBpcyBuZWdv dGlhdGVkLiAgQSBsaXN0IG9mIG9uZSBvciBtb3JlIG90aGVyIHZhbHVlcyIsCisiICAgIGFsbG93 IGEgc3BlY2lmaWMgc3Vic2V0IG9mIHRoZSBzdXBwb3J0ZWQgYXV0aGVudGljYXRpb24gbWV0aG9k cyB0byBiZSIsCisiICAgIHVzZWQuIiwKKyIgIiwKKyIgIFdoZW4gS2VybWl0IGlzIHRoZSBUZWxu ZXQgc2VydmVyOiIsCisiICAgIEFVVE9NQVRJQyByZXN1bHRzIGluIGF2YWlsYWJsZSBhdXRoZW50 aWNhdGlvbiBtZXRob2RzIGJlaW5nIG9mZmVyZWQiLAorIiAgICB0byB0aGUgdGVsbmV0IGNsaWVu dCBpbiB0aGUgZm9sbG93aW5nIG9yZGVyOiIsCisiICIsCisjaWZkZWYgTlQKKyIgICAgICBLRVJC RVJPU19WLCBLRVJCRVJPU19JViwgU1JQLCBTU0wsIE5UTE0iLAorI2Vsc2UgLyogTlQgKi8KKyIg ICAgICBLRVJCRVJPU19WLCBLRVJCRVJPU19JViwgU1JQLCBTU0wsIE5UTE0iLAorI2VuZGlmIC8q IE5UICovCisiICIsCisiICBOT05FIHJlc3VsdHMgaW4gbm8gYXV0aGVudGljYXRpb24gbWV0aG9k cyBiZWluZyBvZmZlcmVkIHRvIHRoZSBUZWxuZXQiLAorIiAgc2VydmVyIHdoZW4gdGhlIGF1dGhl bnRpY2F0aW9uIG9wdGlvbiBpcyBuZWdvdGlhdGVkLiAgVGhlIHByZWZlcnJlZCIsCisiICBtZXRo b2Qgb2YgZGlzYWJsaW5nIGF1dGhlbnRpY2F0aW9uIGlzOiIsCisiICIsCisiICAgIFNFVCBURUxP UFQgL1NFUlZFUiBBVVRIRU5USUNBVElPTiBSRUZVU0UiLAorIiAiLAorIiAgQSBsaXN0IG9mIG9u ZSBvciBtb3JlIGF1dGhlbnRpY2F0aW9uIG1ldGhvZHMgc3BlY2lmaWVzIHRoZSBvcmRlciB0aG9z ZSIsCisiICBtZXRob2RzIGFyZSB0byBiZSBvZmZlcmVkIHRvIHRoZSB0ZWxuZXQgY2xpZW50LiIs CisjaWZkZWYgTlQKKyIgIiwKKyIgIElmIHlvdSB3aXNoIHRvIGFsbG93IE5UTE0gYXV0aGVudGlj YXRpb24gdG8gYmUgdXNlZCB3aXRoIHRoZSBNaWNyb3NvZnQiLAorIiAgV2luZG93cyAyMDAwIG9y IFNlcnZpY2VzIGZvciBVbml4IFRlbG5ldCBjbGllbnQgeW91IG11c3Qgc3BlY2lmeSBhIGxpc3Qi LAorIiAgd2l0aCBOVExNIGFzIHRoZSBmaXJzdCBpdGVtIGluIHRoZSBsaXN0LiAgQnkgZGVmYXVs dCwgTlRMTSBpcyB0aGUgbGFzdCIsCisiICBpdGVtIGluIHRoZSBsaXN0IGJlY2F1c2UgaXQgZG9l cyBub3QgcHJvdmlkZSBhbnkgZm9ybSBvZiBkYXRhIGVuY3J5cHRpb24uIiwKKyNlbmRpZiAvKiBO VCAqLworIiAiLAorI2lmZGVmIENLX0tFUkJFUk9TCisiU0VUIFRFTE5FVCBBVVRIRU5USUNBVElP TiBGT1JXQVJESU5HIHsgT04sIE9GRiB9IiwKKyIgIFNldCB0aGlzIHRvIE9OIHRvIGZvcndhcmQg S2VyYmVyb3MgViB0aWNrZXQtZ3JhbnRpbmctdGlja2V0cyB0byB0aGUgaG9zdCIsCisiICBhZnRl ciBhdXRoZW50aWNhdGlvbiBpcyBjb21wbGV0ZS4gIE9GRiBieSBkZWZhdWx0LiIsCisiICIsCisj ZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KKyJTRVQgVEVMTkVUIEFVVEhFTlRJQ0FUSU9OIEVOQ1JZ UFQtRkxBRyB7IEFOWSwgTk9ORSwgVEVMT1BUIH0iLAorIiAgVXNlIHRoaXMgY29tbWFuZCB0byBz cGVjaWZ5IHdoaWNoIEFVVEggdGVsb3B0IGVuY3J5cHRpb24gZmxhZ3MgbWF5IGJlIiwKKyIgIGFj Y2VwdGVkIGluIGNsaWVudCBtb2RlIG9yIG9mZmVyZWQgaW4gc2VydmVyIG1vZGUuICBUaGUgZGVm YXVsdCBpcyBBTlkuIiwKKyIgIiwKKyJTRVQgVEVMTkVUIEFVVEhFTlRJQ0FUSU9OIEhPVy1GTEFH IHsgQU5ZLCBPTkUtV0FZLCBNVVRVQUwgfSIsCisiICBVc2UgdGhpcyBjb21tYW5kIHRvIHNwZWNp Znkgd2hpY2ggQVVUSCB0ZWxvcHQgaG93IGZsYWdzIG1heSBiZSIsCisiICBhY2NlcHRlZCBpbiBj bGllbnQgbW9kZSBvciBvZmZlcmVkIGluIHNlcnZlciBtb2RlLiAgVGhlIGRlZmF1bHQgaXMgQU5Z LiIsCisiICIsCisjZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJT04gKi8KKyNpZmRlZiBDT01NRU5U CisiU0VUIFRFTE5FVCBCSU5BUlktTU9ERSB7IEFDQ0VQVEVELCBSRUZVU0VELCBSRVFVRVNURUQs IFJFUVVJUkVEIH0iLAorIiAgQUNDRVBUIG9yIFJFRlVTRSBiaW5hcnktbW9kZSBiaWRzLCBvciBh Y3RpdmVseSBSRVFVRVNUIGJpbmFyeSBtb2RlLiIsCisiICBSRVFVSVJFRCByZWZ1c2VzIHRoZSBj b25uZWN0aW9uIGlmIGJpbmFyeSBtb2RlIGlzIG5vdCBzdWNjZXNzZnVsbHkiLAorIiAgbmVnb3Rp YXRlZCBpbiBib3RoIGRpcmVjdGlvbnMuICBBQ0NFUFRFRCBieSBkZWZhdWx0LiIsCisiICIsCisj ZW5kaWYgLyogQ09NTUVOVCAqLworIlNFVCBURUxORVQgQklOQVJZLVRSQU5TRkVSLU1PREUgeyBP TiwgT0ZGIH0iLAorIiAgV2hlbiBPTiAoT0ZGIGJ5IGRlZmF1bHQpIGFuZCBCSU5BUlkgbmVnb3Rp YXRpb25zIGFyZSBub3QgUkVGVVNFRCBLZXJtaXQiLAorIiAgd2lsbCBhdHRlbXB0IHRvIG5lZ290 aWF0ZSBCSU5BUlkgbW9kZSBpbiBlYWNoIGRpcmVjdGlvbiBiZWZvcmUgdGhlIHN0YXJ0IiwKKyIg IG9mIGVhY2ggZmlsZSB0cmFuc2Zlci4gIEFmdGVyIHRoZSB0cmFuc2ZlciBpcyBjb21wbGV0ZSBC SU5BUlkgbW9kZSB3aWxsIiwKKyIgIGJlIHJlc3RvcmVkIHRvIHRoZSBwcmUtdHJhbnNmZXIgc3Rh dGUuIiwKKyIgIiwKKyJTRVQgVEVMTkVUIEJJTkFSWS1UUkFOU0ZFUi1NT0RFIHsgT04sIE9GRiB9 IiwKKyIgIFNldCB0aGlzIGNvbW1hbmQgdG8gT04gaWYgeW91IHdhbnQgdG8gZm9yY2UgS2VybWl0 IHRvIG5lZ290aWF0ZSIsCisiICBUZWxuZXQgQmluYXJ5IGluIGJvdGggZGlyZWN0aW9ucyB3aGVu IHBlcmZvcm1pbmcgZmlsZSB0cmFuc2ZlcnMuIiwKKyIgIERlZmF1bHQgaXMgT0ZGLiAgQWxpYXMg U0VUIFRFTE5FVCBCSU5BUlktWEZFUi1NT0RFLiIsCisiICIsCisiU0VUIFRFTE5FVCBCVUcgQVVU SC1LUkI1LURFUyB7IE9OLCBPRkYgfSIsCisiICBEZWZhdWx0IGlzIE9OLiAgRGlzYWJsZSB0aGlz IGJ1ZyB0byBlbmFibGUgdGhlIHVzZSBvZiBlbmNyeXB0aW9uIHR5cGVzIiwKKyIgIG90aGVyIHRo YW4gREVTIHN1Y2ggYXMgM0RFUyBvciBDQVNULTEyOCB3aGVuIHRoZSBLZXJiZXJvcyA1IHNlc3Np b24ga2V5IiwKKyIgIGlzIGxvbmdlciB0aGFuIDggYnl0ZXMuIiwKKyIgIiwKKyJTRVQgVEVMTkVU IEJVRyBCSU5BUlktTUUtTUVBTlMtVS1UT08geyBPTiwgT0ZGIH0iLAorIiAgU2V0IHRoaXMgdG8g T04gdG8gdHJ5IHRvIG92ZXJjb21lIFRFTE5FVCBiaW5hcnktbW9kZSBtaXNuZWdvdGlhdGlvbnMg YnkiLAorIiAgS2VybWl0J3MgVEVMTkVUIHBhcnRuZXIuIiwKKyIgIiwKKyJTRVQgVEVMTkVUIEJV RyBCSU5BUlktVS1NRUFOUy1NRS1UT08geyBPTiwgT0ZGIH0iLAorIiAgU2V0IHRoaXMgdG8gT04g dG8gdHJ5IHRvIG92ZXJjb21lIFRFTE5FVCBiaW5hcnktbW9kZSBtaXNuZWdvdGlhdGlvbnMgYnki LAorIiAgS2VybWl0J3MgVEVMTkVUIHBhcnRuZXIuIiwKKyIgIiwKKyJTRVQgVEVMTkVUIEJVRyBJ TkZJTklURS1MT09QLUNIRUNLIHsgT04sIE9GRiB9IiwKKyIgIFNldCB0aGlzIHRvIE9OIHRvIHBy ZXZlbnQgS2VybWl0IGZyb20gcmVzcG9uZGluZyB0byBhIHRlbG5ldCBuZWdvdGlhdGlvbiIsCisi ICBzZXF1ZW5jZSB0aGF0IGVudGVycyBhbiBpbmZpbml0ZSBsb29wLiAgVGhlIGRlZmF1bHQgaXMg T0ZGIGJlY2F1c2UgdGhpcyIsCisiICBzaG91bGQgbmV2ZXIgb2NjdXIuIiwKKyIgIiwKKyJTRVQg VEVMTkVUIEJVRyBTQi1JTVBMSUVTLVdJTEwtRE8geyBPTiwgT0ZGIH0iLAorIiAgU2V0IHRoaXMg dG8gT04gdG8gYWxsb3cgS2VybWl0IHRvIHJlc3BvbmQgdG8gdGVsbmV0IHN1Yi1uZWdvdGlhdGlv bnMgaWYiLAorIiAgdGhlIHBlZXIgZm9yZ2V0cyB0byByZXNwb25kIHRvIFdJTEwgd2l0aCBETyBv ciB0byBETyB3aXRoIFdJTEwuIiwKKyIgIiwKKyJTRVQgVEVMTkVUIERFQlVHIHsgT04sIE9GRiB9 IiwKKyIgIFNldCB0aGlzIHRvIE9OIHRvIGRpc3BsYXkgdGVsbmV0IG5lZ290aWF0aW9ucyBhcyB0 aGV5IGFyZSBzZW50IGFuZCIsCisiICByZWNlaXZlZC4iLAorIiAiLAorIlNFVCBURUxORVQgREVM QVktU0IgeyBPTiwgT0ZGIH0iLAorIiAgV2hlbiBPTiwgdGVsbmV0IHN1Ym5lZ290aWF0aW9uIHJl c3BvbnNlcyBhcmUgZGVsYXllZCB1bnRpbCBhZnRlciBhbGwiLAorIiAgYXV0aGVudGljYXRpb24g YW5kIGVuY3J5cHRpb24gb3B0aW9ucyBhcmUgZWl0aGVyIHN1Y2Nlc3NmdWxseSBuZWdvdGlhdGVk IiwKKyIgIG9yIHJlZnVzZWQuIFRoaXMgZW5zdXJlcyB0aGF0IHByaXZhdGUgZGF0YSBpcyBwcm90 ZWN0ZWQuICBXaGVuIE9GRiwgdGVsbmV0IiwKKyIgIHN1Ym5lZ290aWF0aW9uIHJlc3BvbnNlcyBh cmUgc2VudCBpbW1lZGlhdGVseS4gIFRoZSBkZWZhdWx0IGlzIE9OLiIsCisiICIsCisiU0VUIFRF TE5FVCBFQ0hPIHsgTE9DQUwsIFJFTU9URSB9IiwKKyIgIEtlcm1pdCdzIGluaXRpYWwgZWNob2lu ZyBzdGF0ZSBmb3IgVEVMTkVUIGNvbm5lY3Rpb25zLCBMT0NBTCBieSBkZWZhdWx0LiIsCisiICBB ZnRlciB0aGUgY29ubmVjdGlvbiBpcyBtYWRlLCBURUxORVQgbmVnb3RpYXRpb25zIGRldGVybWlu ZSB0aGUgZWNob2luZy4iLAorIiAiLAorI2lmZGVmIENLX0VOQ1JZUFRJT04KKyNpZmRlZiBDT01N RU5UCisiU0VUIFRFTE5FVCBFTkNSWVBUSU9OIHsgQUNDRVBURUQsIFJFRlVTRUQsIFJFUVVFU1RF RCwgUkVRVUlSRUQgfSIsCisiICBBQ0NFUFQgb3IgUkVGVVNFIGVuY3J5cHRpb24gYmlkcywgb3Ig YWN0aXZlbHkgUkVRVUVTVCBlbmNyeXB0aW9uIGluIGJvdGguIiwKKyIgIGRpcmVjdGlvbnMuICBS RVFVSVJFRCByZWZ1c2VzIHRoZSBjb25uZWN0aW9uIGlmIGVuY3J5cHRpb24gaXMgbm90IiwKKyIg IHN1Y2Nlc3NmdWxseSBuZWdvdGlhdGVkIGluIGJvdGggZGlyZWN0aW9ucy4gIEFDQ0VQVEVEIGJ5 IGRlZmF1bHQuIiwKKyIgIiwKKyNlbmRpZiAvKiBDT01NRU5UICovCisiU0VUIFRFTE5FVCBFTkNS WVBUSU9OIFRZUEUgeyBBVVRPTUFUSUMsIENBU1QxMjhfQ0ZCNjQsIENBU1QxMjhfT0ZCNjQsICIs CisiICBDQVNUNV80MF9DRkI2NCwgQ0FTVDVfNDBfT0ZCNjQsIERFU19DRkI2NCwgREVTX09GQjY0 LCBOT05FIH0iLAorIiAgQVVUT01BVElDIGFsbG93cyB0aGUgaG9zdCB0byBjaG9vc2UgdGhlIHBy ZWZlcnJlZCB0eXBlIG9mIGVuY3J5cHRpb24uIiwKKyIgIE90aGVyIHZhbHVlcyBhbGxvdyBhIHNw ZWNpZmljIGVuY3J5cHRpb24gbWV0aG9kIHRvIGJlIHNwZWNpZmllZC4iLAorIiAgQVVUT01BVElD IGlzIHRoZSBkZWZhdWx0LiAgVGhlIGxpc3Qgb2Ygb3B0aW9ucyB3aWxsIHZhcnkgZGVwZW5kaW5n IiwKKyIgIG9uIHRoZSBlbmNyeXB0aW9uIHR5cGVzIHNlbGVjdGVkIGF0IGNvbXBpbGF0aW9uIHRp bWUuIiwKKyIgIiwKKyNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCisjaWZkZWYgQ0tfRU5WSVJP Tk1FTlQKKyNpZmRlZiBDT01NRU5UCisiU0VUIFRFTE5FVCBFTlZJUk9OTUVOVCB7IE9OLCBPRkYs IHZhcmlhYmxlLW5hbWUgWyB2YWx1ZSBdIH0iLAorIiAgVGhpcyBmZWF0dXJlIGxldHMgS2VybWl0 IHNlbmQgdGhlIHZhbHVlcyBvZiBjZXJ0YWluIGVudmlyb25tZW50IHZhcmlhYmxlcyIsCisiICB0 byB0aGUgb3RoZXIgY29tcHV0ZXIgaWYgaXQgYXNrcyBmb3IgdGhlbS4gIFRoZSB2YXJpYWJsZS1u YW1lIGNhbiBiZSBhbnkiLAorIiAgb2YgdGhlIFwid2VsbC1rbm93blwiIHZhcmlhYmxlcyBcIlVT RVJcIiwgXCJKT0JcIiwgXCJBQ0NUXCIsIFwiUFJJTlRFUlwiLCIsCisiICBcIlNZU1RFTVRZUEVc Iiwgb3IgXCJESVNQTEFZXCIuICBTb21lIFRlbG5ldCBzZXJ2ZXJzLCBpZiBnaXZlbiBhIFVTRVIi LAorIiAgdmFsdWUgaW4gdGhpcyB3YXksIHdpbGwgYWNjZXB0IGl0IGFuZCB0aGVyZWZvcmUgbm90 IHByb21wdCB5b3UgZm9yIHVzZXIiLAorIiAgbmFtZSB3aGVuIHlvdSBsb2cgaW4uICBUaGUgZGVm YXVsdCB2YWx1ZXMgYXJlIHRha2VuIGZyb20geW91ciBlbnZpcm9ubWVudDsiLAorIiAgdXNlIHRo aXMgY29tbWFuZCB0byBjaGFuZ2Ugb3IgcmVtb3ZlIHRoZW0uICBTZWUgUkZDMTU3MiBmb3IgZGV0 YWlscy4gIFlvdSIsCisiICBtYXkgYWxzbyBzcGVjaWZ5IE9GRiB0byBkaXNhYmxlIHRoaXMgZmVh dHVyZSwgYW5kIE9OIHRvIHJlLWVuYWJsZSBpdC4iLAorIiAiLAorI2Vsc2UKKyJTRVQgVEVMTkVU IEVOVklST05NRU5UIHsgdmFyaWFibGUtbmFtZSBbIHZhbHVlIF0gfSIsCisiICBUaGlzIGZlYXR1 cmUgbGV0cyBLZXJtaXQgc2VuZCB0aGUgdmFsdWVzIG9mIGNlcnRhaW4gZW52aXJvbm1lbnQgdmFy aWFibGVzIiwKKyIgIHRvIHRoZSBvdGhlciBjb21wdXRlciBpZiBpdCBhc2tzIGZvciB0aGVtLiAg VGhlIHZhcmlhYmxlLW5hbWUgY2FuIGJlIGFueSIsCisiICBvZiB0aGUgXCJ3ZWxsLWtub3duXCIg dmFyaWFibGVzIFwiVVNFUlwiLCBcIkpPQlwiLCBcIkFDQ1RcIiwgXCJQUklOVEVSXCIsIiwKKyIg IFwiU1lTVEVNVFlQRVwiLCBvciBcIkRJU1BMQVlcIi4gIFNvbWUgVGVsbmV0IHNlcnZlcnMsIGlm IGdpdmVuIGEgVVNFUiIsCisiICB2YWx1ZSBpbiB0aGlzIHdheSwgd2lsbCBhY2NlcHQgaXQgYW5k IHRoZXJlZm9yZSBub3QgcHJvbXB0IHlvdSBmb3IgdXNlciIsCisiICBuYW1lIHdoZW4geW91IGxv ZyBpbi4gIFRoZSBkZWZhdWx0IHZhbHVlcyBhcmUgdGFrZW4gZnJvbSB5b3VyIGVudmlyb25tZW50 OyIsCisiICB1c2UgdGhpcyBjb21tYW5kIHRvIGNoYW5nZSBvciByZW1vdmUgdGhlbS4gIFNlZSBS RkMxNTcyIGZvciBkZXRhaWxzLiIsCisiICIsCisjZW5kaWYgLyogQ09NTUVOVCAqLworI2VuZGlm IC8qIENLX0VOVklST05NRU5UICovCisjaWZkZWYgQ0tfRk9SV0FSRF9YCisiU0VUIFRFTE5FVCBG T1JXQVJELVggWEFVVEhPUklUWS1GSUxFIDxmaWxlPiIsCisiICBJZiB5b3VyIFggU2VydmVyIHJl cXVpcmVzIFggYXV0aGVudGljYXRpb24gYW5kIHRoZSBsb2NhdGlvbiBvZiB0aGUiLAorIiAgLlhh dXRob3JpdHkgZmlsZSBpcyBub3QgZGVmaW5lZCBieSB0aGUgWEFVVEhPUklUWSBlbnZpcm9ubWVu dCB2YXJpYWJsZSwiLAorIiAgdXNlIHRoaXMgY29tbWFuZCB0byBzcGVjaWZ5IHRoZSBsb2NhdGlv biBvZiB0aGUgLlhhdXRob3JpdHkgZmlsZS4iCisiICAiLAorI2VuZGlmIC8qIENLX0ZPUldBUkRf WCAqLworI2lmZGVmIENLX1NORExPQworIlNFVCBURUxORVQgTE9DQVRJT04gWyB0ZXh0IF0iLAor IiAgTG9jYXRpb24gc3RyaW5nIHRvIHNlbmQgdG8gdGhlIFRlbG5ldCBzZXJ2ZXIgaWYgaXQgYXNr cy4gIEJ5IGRlZmF1bHQgdGhpcyIsCisiICBpcyBwaWNrZWQgdXAgZnJvbSB0aGUgTE9DQVRJT04g ZW52aXJvbm1lbnQgdmFyaWFibGUuICBHaXZlIHRoaXMgY29tbWFuZCIsCisiICB3aXRoIG5vIHRl eHQgdG8gZGlzYWJsZSB0aGlzIGZlYXR1cmUuIiwKKyIgIiwKKyNlbmRpZiAvKiBDS19TTkRMT0Mg Ki8KKyJTRVQgVEVMTkVUIE5FV0xJTkUtTU9ERSB7IE5WVCwgQklOQVJZLU1PREUgfSB7IE9GRiwg T04sIFJBVyB9IiwKKworIiAgRGV0ZXJtaW5lcyBob3cgY2FycmlhZ2UgcmV0dXJucyBhcmUgaGFu ZGxlZCBvbiBURUxORVQgY29ubmVjdGlvbnMuICBUaGVyZSIsCisiICBhcmUgc2VwYXJhdGUgc2V0 dGluZ3MgZm9yIE5WVCAoQVNDSUkpIG1vZGUgYW5kIGJpbmFyeSBtb2RlLiAgT04gKGRlZmF1bHQi LAorIiAgZm9yIE5WVCBtb2RlKSBtZWFucyBDUkxGIHJlcHJlc2VudHMgQ1IuICBPRkYgbWVhbnMg Q1IgZm9sbG93ZWQgYnkgTlVMIiwKKyIgIHJlcHJlc2VudHMgQ1IuICBSQVcgKGRlZmF1bHQgZm9y IEJJTkFSWSBtb2RlKSBtZWFucyBDUiBzdGFuZHMgZm9yIGl0c2VsZi4iLAorIiAiLAorI2lmZGVm IFRDUFNPQ0tFVAorIlNFVCBURUxORVQgUFJPTVBULUZPUi1VU0VSSUQgPHByb21wdD4iLAorIiAg U3BlY2lmaWVzIGEgY3VzdG9tIHByb21wdCB0byBiZSB1c2VkIHdoZW4gcHJvbXB0aW5nIGZvciBh IHVzZXJpZC4gIEtlcm1pdCIsCisiICBwcm9tcHRzIGZvciBhIHVzZXJpZCBpZiB0aGUgY29tbWFu ZDoiLAorIiAiLAorIiAgICBTRVQgTE9HSU4gVVNFUklEIHt9IiwKKyIgIiwKKyIgIGhhcyBiZWVu IGlzc3VlZCBwcmlvciB0byBhIFRlbG5ldCBhdXRoZW50aWNhdGlvbiBuZWdvdGlhdGlvbiBmb3Ig YW4iLAorIiAgYXV0aGVudGljYXRpb24gdHlwZSB0aGF0IHJlcXVpcmVzIHRoZSB0cmFuc21pc3Np b24gb2YgYSBuYW1lLCBzdWNoIGFzIiwKKyIgIFNlY3VyZSBSZW1vdGUgUGFzc3dvcmQuIiwKKyIg IiwKKyNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KKyJTRVQgVEVMTkVUIFJFTU9URS1FQ0hPIHsgT04s IE9GRiB9IiwKKyIgIEFwcGxpZXMgb25seSB0byBpbmNvbWluZyBjb25uZWN0aW9ucyBjcmVhdGVk IHdpdGg6IiwKKyIgICAgU0VUIEhPU1QgKiA8cG9ydD4gL1RFTE5FVCIsCisiICBUaGlzIGNvbW1h bmQgZGV0ZXJtaW5lcyB3aGV0aGVyIEtlcm1pdCB3aWxsIGFjdHVhbGx5IGVjaG8gY2hhcmFjdGVy cyIsCisiICByZWNlaXZlZCBmcm9tIHRoZSByZW1vdGUgd2hlbiBpdCBoYXMgbmVnb3RpYXRlZCB0 byBkbyBzby4gIFRoZSBkZWZhdWx0IiwKKyIgIGlzIE9OLiAgUmVtb3RlIGVjaG9pbmcgbWF5IGJl IHR1cm5lZCBvZmYgd2hlbiBpdCBpcyBuZWNlc3NhcnkgdG8gcmVhZCIsCisiICBhIHBhc3N3b3Jk IHdpdGggdGhlIElOUFVUIGNvbW1hbmQuIiwKKyIgIiwKKyJTRVQgVEVMTkVUIFRFUk1JTkFMLVRZ UEUgbmFtZSIsCisiICBUaGUgdGVybWluYWwgdHlwZSB0byBzZW5kIHRvIHRoZSByZW1vdGUgVEVM TkVUIGhvc3QuICBJZiBub25lIGlzIGdpdmVuLCIsCisjaWZkZWYgT1MyCisiICB5b3VyIGN1cnJl bnQgU0VUIFRFUk1JTkFMIFRZUEUgdmFsdWUgaXMgc2VudCwgZS5nLiBWVDIyMC4iLAorIiAiLAor I2Vsc2UKKyIgIHlvdXIgbG9jYWwgdGVybWluYWwgdHlwZSBpcyBzZW50LiIsCisiICIsCisjZW5k aWYgLyogT1MyICovCisiU0VUIFRFTE5FVCBXQUlULUZPUi1ORUdPVElBVElPTlMgeyBPTiwgT0ZG IH0iLAorIiAgRWFjaCBUZWxuZXQgb3B0aW9uIG11c3QgYmUgZnVsbHkgbmVnb3RpYXRlZCBlaXRo ZXIgT24gb3IgT2ZmIGJlZm9yZSB0aGUiLAorIiAgc2Vzc2lvbiBjYW4gY29udGludWUuICBUaGlz IGlzIGVzcGVjaWFsbHkgdHJ1ZSB3aXRoIG9wdGlvbnMgdGhhdCByZXF1aXJlIiwKKyIgIHN1Ym5l Z290aWF0aW9ucyBzdWNoIGFzIEF1dGhlbnRpY2F0aW9uLCBFbmNyeXB0aW9uLCBhbmQgS2VybWl0 OyBmb3IiLAorIiAgcHJvcGVyIHN1cHBvcnQgb2YgdGhlc2Ugb3B0aW9ucyBLZXJtaXQgbXVzdCB3 YWl0IGZvciB0aGUgbmVnb3RpYXRpb25zIHRvIiwKKyIgIGNvbXBsZXRlLiAgT2YgY291cnNlLCBL ZXJtaXQgaGFzIG5vIHdheSBvZiBrbm93aW5nIHdoZXRoZXIgYSByZXBseSBpcyIsCisiICBkZWxh eWVkIG9yIG5vdCBjb21pbmcgYXQgYWxsLCBhbmQgc28gd2lsbCB3YWl0IGEgbWludXRlIG9yIG1v cmUgZm9yIiwKKyIgIHJlcXVpcmVkIHJlcGxpZXMgYmVmb3JlIGNvbnRpbnVpbmcgdGhlIHNlc3Np b24uICBJZiB5b3Uga25vdyB0aGF0IEtlcm1pdCdzIiwKKyIgIFRlbG5ldCBwYXJ0bmVyIHdpbGwg bm90IGJlIHNlbmRpbmcgdGhlIHJlcXVpcmVkIHJlcGxpZXMsIHlvdSBjYW4gc2V0IHRoaXMiLAor IiAgb3B0aW9uIG9mIE9GRiB0byBhdm9pZCB0aGUgbG9uZyB0aW1lb3V0cy4gIE9yIHlvdSBjYW4g aW5zdHJ1Y3QgS2VybWl0IHRvIiwKKyIgIFJFRlVTRSBzcGVjaWZpYyBvcHRpb25zIHdpdGggdGhl IFNFVCBURUxPUFQgY29tbWFuZC4iLAorIiIsCisiVHlwZSBTSE9XIFRFTE5FVCB0byBzZWUgdGhl IGN1cnJlbnQgdmFsdWVzIG9mIHRoZXNlIHBhcmFtZXRlcnMuIiwKKyIiIH07CisjZW5kaWYgLyog VE5DT0RFICovCisKKyNpZm5kZWYgTk9TUEwKK3N0YXRpYyBjaGFyICpoeHltYWNyW10gPSB7Cisi U3ludGF4OiBTRVQgTUFDUk8gcGFyYW1ldGVyIHZhbHVlIiwKKyIgIENvbnRyb2xzIHRoZSBiZWhh dmlvciBvZiBtYWNyb3MuIiwKKyIgIiwKKyJTRVQgTUFDUk8gRUNITyB7IE9OLCBPRkYgfSIsCisi ICBUZWxscyB3aGV0aGVyIGNvbW1hbmRzIGV4ZWN1dGVkIGZyb20gYSBtYWNybyBkZWZpbml0aW9u IHNob3VsZCBiZSIsCisiICBkaXNwbGF5ZWQgb24gdGhlIHNjcmVlbi4gIE9GRiBieSBkZWZhdWx0 OyB1c2UgT04gZm9yIGRlYnVnZ2luZy4iLAorIiAiLAorIlNFVCBNQUNSTyBFUlJPUiB7IE9OLCBP RkYgfSIsCisiICBUZWxscyB3aGV0aGVyIGEgbWFjcm8gc2hvdWxkIGJlIGF1dG9tYXRpY2FsbHkg dGVybWluYXRlZCB1cG9uIGEgY29tbWFuZCIsCisiICBlcnJvci4gIFRoaXMgc2V0dGluZyBpcyBs b2NhbCB0byB0aGUgY3VycmVudCBtYWNybywgYW5kIGluaGVyaXRlZCBieSIsCisiICBzdWJvcmRp bmF0ZSBtYWNyb3MuIiwKKyIiIH07CisjZW5kaWYgLyogTk9TUEwgKi8KKworc3RhdGljIGNoYXIg KmhteHlwcm1bXSA9IHsKKyJTeW50YXg6IFNFVCBQUk9NUFQgWyB0ZXh0IF0iLAorIiAiLAorI2lm ZGVmIE9TMgorIlByb21wdCB0ZXh0IGZvciB0aGlzIHByb2dyYW0sIG5vcm1hbGx5ICdLLTk1Picu ICBNYXkgY29udGFpbiBiYWNrc2xhc2giLAorI2Vsc2UKKyNpZmRlZiBNQUMKKyJQcm9tcHQgdGV4 dCBmb3IgdGhpcyBwcm9ncmFtLCBub3JtYWxseSAnTWFjLUtlcm1pdD4nLiAgTWF5IGNvbnRhaW4g YmFja3NsYXNoIiwKKyNlbHNlCisiUHJvbXB0IHRleHQgZm9yIHRoaXMgcHJvZ3JhbSwgbm9ybWFs bHkgJ0MtS2VybWl0PicuICBNYXkgY29udGFpbiBiYWNrc2xhc2giLAorI2VuZGlmIC8qIE1BQyAq LworI2VuZGlmIC8qIE9TMiAqLworImNvZGVzIGZvciBzcGVjaWFsIGVmZmVjdHMuICBTdXJyb3Vu ZCBieSB7IH0gdG8gcHJlc2VydmUgbGVhZGluZyBvciB0cmFpbGluZyIsCisjaWZkZWYgT1MyCisi c3BhY2VzLiAgSWYgdGV4dCBvbWl0dGVkLCBwcm9tcHQgcmV2ZXJ0cyB0byBLLTk1Pi4gIFByb21w dCBjYW4gaW5jbHVkZSIsCisjZWxzZQorI2lmZGVmIE1BQworInNwYWNlcy4gIElmIHRleHQgb21p dHRlZCwgcHJvbXB0IHJldmVydHMgdG8gTWFjLUtlcm1pdD4uICBQcm9tcHQgY2FuIGluY2x1ZGUi LAorI2Vsc2UKKyJzcGFjZXMuICBJZiB0ZXh0IG9taXR0ZWQsIHByb21wdCByZXZlcnRzIHRvIEMt S2VybWl0Pi4gIFByb21wdCBjYW4gaW5jbHVkZSIsCisjZW5kaWYgLyogT1MyICovCisjZW5kaWYg LyogTUFDICovCisidmFyaWFibGVzIGxpa2UgXFx2KGRpcikgb3IgXFx2KHRpbWUpIHRvIHNob3cg Y3VycmVudCBkaXJlY3Rvcnkgb3IgdGltZS4iLAorIiIgfTsKKworI2lmZGVmIFVOSVgKK3N0YXRp YyBjaGFyICpoeHl3aWxkW10gPSB7CisiU3ludGF4OiBTRVQgV0lMRENBUkQtRVhQQU5TSU9OIHsg S0VSTUlUIFsgc3dpdGNoIF0sIFNIRUxMLCBPTiwgT0ZGIH0iLAorIiAgS0VSTUlUICh0aGUgZGVm YXVsdCkgbWVhbnMgQy1LZXJtaXQgZXhwYW5kcyBmaWxlbmFtZSB3aWxkY2FyZHMgaW4gU0VORCBh bmQiLAorIiAgc2ltaWxhciBjb21tYW5kcyBpdHNlbGYsIGFuZCBpbiBpbmNvbWluZyBHRVQgY29t bWFuZHMuICBPcHRpb25hbCBzd2l0Y2hlcyIsCisiICBhcmUgL05PLU1BVENILURPVC1GSUxFUyAo XCIqXCIgYW5kIFwiP1wiIHNob3VsZCBub3QgbWF0Y2ggYW4gaW5pdGlhbCIsCisiICBwZXJpb2Qg aW4gYSBmaWxlbmFtZTsgdGhpcyBpcyB0aGUgZGVmYXVsdCkgYW5kIC9NQVRDSC1ET1QtRklMRVMg aWYgeW91IiwKKyIgIHdhbnQgZmlsZXMgd2hvc2UgbmFtZXMgYmVnaW4gd2l0aCBcIi5cIiBpbmNs dWRlZC4gIFNFVCBXSUxEQ0FSRCBTSEVMTCIsCisiICBtZWFucyB0aGF0IEtlcm1pdCBhc2tzIHlv dXIgcHJlZmVycmVkIHNoZWxsIHRvIGV4cGFuZCB3aWxkY2FyZHMgKHRoaXMiLAorIiAgc2hvdWxk IG5vdCBiZSBuZWNlc3NhcnkgaW4gQy1LZXJtaXQgNy4wIGFuZCBsYXRlcikuICBIRUxQIFdJTERD QVJEIGZvciIsCisiICBmdXJ0aGVyIGluZm9ybWF0aW9uLiIsCisiICIsCisiICBUaGUgT04gYW5k IE9GRiBjaG9pY2VzIGFsbG93IHlvdSB0byBkaXNhYmxlIGFuZCByZW5hYmxlIHdpbGRjYXJkIiwK KyIgIHByb2Nlc3NpbmcgaW5kZXBlbmRlbnQgb2YgdGhlIEtFUk1JVCAvIFNIRUxMIGNob2ljZS4g IERpc2FibGluZyB3aWxkY2FyZHMiLAorIiAgYWxsb3dzIHlvdSB0byBwcm9jZXNzIGFuIGFycmF5 IG9yIGxpc3Qgb2YgZmlsZW5hbWVzIHdpdGhvdXQgaGF2aW5nIHRvIiwKKyIgIGNvbnNpZGVyIHdo ZXRoZXIgdGhlIG5hbWVzIG1pZ2h0IGNvbnRhaW4gbGl0ZXJhbCB3aWxkY2FyZCBjaGFyYWN0ZXJz LiIsCisiICBXQVJOSU5HOiBTRVQgV0lMRCBPRkYgYWxzbyBkaXNhYmxlcyBpbnRlcm5hbCBmaWxl bmFtZSBwYXR0ZXJuLW1hdGNoaW5nLCIsCisiICB1c2VkIChmb3IgZXhhbXBsZSkgaW4gY3JlYXRp bmcgYmFja3VwIGZpbGVzLiIsCisiIiB9OworI2Vsc2UKK3N0YXRpYyBjaGFyICpoeHl3aWxkW10g PSB7CisiU3ludGF4OiBTRVQgV0lMRENBUkQtRVhQQU5TSU9OIHsgT04sIE9GRiB9IiwKKyIgIE9O ICh0aGUgZGVmYXVsdCkgbWVhbnMgdGhhdCBmaWxlbmFtZXMgZ2l2ZW4gdG8gS2VybWl0IGNvbW1h bmRzIHN1Y2ggYXMiLAorIiAgU0VORCBhbmQgRElSRUNUT1JZIGFyZSBhdXRvbWF0aWNhbGx5IGV4 cGFuZGVkIGludG8gbGlzdHMgb2YgZmlsZW5hbWVzIGlmIiwKKyIgIHRoZXkgY29udGFpbiBzcGVj aWFsICd3aWxkY2FyZCBjaGFyYWN0ZXJzJyBzdWNoIGFzICcqJy4gIFlvdSBjYW4gcmVmZXJlbmNl IiwKKyIgIGZpbGVzIHdob3NlIG5hbWVzIGNvbnRhaW5zIHN1Y2ggY2hhcmFjdGVycyBsaXRlcmFs bHkgYnkgcHJlY2VkaW5nIGVhY2giLAorIiAgc3VjaCBjaGFyYWN0ZXIgd2l0aCBhIGJhY2tzbGFz aCAnXFwnLiAgV2hlbiBkZWFsaW5nIHByb2dyYW1tYXRpY2FsbHkgd2l0aCIsCisiICBhIGZpbGUg bGlzdCwgaG93ZXZlciwgeW91IHNob3VsZCBTRVQgV0lMRENBUkQtRVhQQU5TSU9OIE9GRiB0byBm b3JjZSIsCisiICB0cmVhdCBlYWNoIG5hbWUgaW4gdGhlIGxpc3QgYXMgYSBsaXRlcmFsIG5hbWUu ICBTZWUgSEVMUCBXSUxEQ0FSRFMgZm9yIiwKKyIgIGRldGFpbHMgYWJvdXQgd2lsZGNhcmQgc3lu dGF4LiIsCisiIiB9OworI2VuZGlmIC8qIFVOSVggKi8KKworI2lmbmRlZiBOT1hGRVIKK3N0YXRp YyBjaGFyICpoeHl3aW5kW10gPSB7CisiU3ludGF4OiBTRVQgV0lORE9XLVNJWkUgbnVtYmVyIiwK KyIgIFNwZWNpZmllcyBudW1iZXIgb2Ygc2xvdHMgZm9yIHNsaWRpbmcgd2luZG93cywgaS5lLiB0 aGUgbnVtYmVyIG9mIHBhY2tldHMiLAorIiAgdGhhdCBjYW4gYmUgdHJhbnNtaXR0ZWQgYmVmb3Jl IHdhaXRpbmcgZm9yIGFja25vd2xlZGdlbWVudC4gIFRoZSBkZWZhdWx0IiwKKyNpZmRlZiBYWVpf SU5URVJOQUwKKyIgIGZvciBLZXJtaXQgcHJvdG9jb2wgaXMgb25lLCB0aGUgbWF4aW11bSBpcyAz MjsgZm9yIFpNT0RFTSwgdGhlIGRlZmF1bHQiLAorIiAgaXMgbm8gd2luZG93aW5nICgwKS4gIEZv ciBaTU9ERU0sIHRoZSB3aW5kb3cgc2l6ZSBpcyByZWFsbHkgdGhlIHBhY2tldCIsCisiICBsZW5n dGgsIGFuZCBpcyB1c2VkIG9ubHkgd2hlbiBub24td2luZG93ZWQgKHN0cmVhbWluZykgdHJhbnNm ZXJzIGZhaWw7IHRoZSIsCisiICBaTU9ERU0gd2luZG93IHNpemUgc2hvdWxkIGJlIGEgbGFyZ2lz aCBudW1iZXIsIGxpa2UgMTAyNCwgYW5kIGl0IHNob3VsZCBiZSIsCisiICBhIG11bHRpcGxlIG9m IDY0LiIsCisjZWxzZQorIiAgaXMgb25lLCB0aGUgbWF4aW11bSBpcyAzMi4gIEluY3JlYXNlZCB3 aW5kb3cgc2l6ZSBtaWdodCByZXN1bHQgaW4gcmVkdWNlZCIsCisiICBtYXhpbXVtIHBhY2tldCBs ZW5ndGguICBVc2Ugc2xpZGluZyB3aW5kb3dzIGZvciBpbXByb3ZlZCBlZmZpY2llbmN5IG9uIiwK KyIgIGNvbm5lY3Rpb25zIHdpdGggbG9uZyBkZWxheXMuICBBIGZ1bGwgZHVwbGV4IGNvbm5lY3Rp b24gaXMgcmVxdWlyZWQsIGFzIiwKKyIgIHdlbGwgYXMgYSBjb29wZXJhdGluZyBLZXJtaXQgb24g dGhlIG90aGVyIGVuZC4iLAorI2VuZGlmIC8qIFhZWl9JTlRFUk5BTCAqLworIiIgfTsKKworc3Rh dGljIGNoYXIgKmh4eXJwdFtdID0geworIlN5bnRheDogU0VUIFJFUEVBVCB7IENPVU5UUyB7IE9O LCBPRkYgfSwgUFJFRklYIDxjb2RlPiB9IiwKKyIgIFNFVCBSRVBFQVQgQ09VTlRTIHR1cm5zIHRo ZSByZXBlYXQtY291bnQgY29tcHJlc3Npb24gbWVjaGFuaXNtIE9OIGFuZCBPRkYuIiwKKyIgIFRo ZSBkZWZhdWx0IGlzIE9OLiAgU0VUIFJFUEVBVCBQUkVGSVggPGNvZGU+IHNldHMgdGhlIHJlcGVh dC1jb3VudCBwcmVmaXgiLAorIiAgY2hhcmFjdGVyIHRvIHRoZSBnaXZlbiBjb2RlLiAgVGhlIGRl ZmF1bHQgaXMgMTI2ICh0aWxkZSkuIiwKKyIiIH07CisKK3N0YXRpYyBjaGFyICpoeHlyY3ZbXSA9 IHsKKyJTeW50YXg6IFNFVCBSRUNFSVZFIHBhcmFtZXRlciB2YWx1ZSIsCisiICBTcGVjaWZpZXMg cGFyYW1ldGVycyBmb3IgaW5ib3VuZCBwYWNrZXRzOiIsCisiICIsCisjaWZuZGVmIE5PQ1NFVFMK KyJTRVQgUkVDRUlWRSBDSEFSQUNURVItU0VUIHsgQVVUT01BVElDLCBNQU5VQUwgfSIsCisiICBX aGV0aGVyIHRvIGF1dG9tYXRpY2FsbHkgc3dpdGNoIHRvIGFuIGFwcHJvcHJpYXRlIGZpbGUtY2hh cmFjdGVyIHNldCBiYXNlZCIsCisiICBvbiB0aGUgdHJhbnNmZXIgY2hhcmFjdGVyLXNldCBhbm5v dW5jZXIsIGlmIGFueSwgb2YgYW4gaW5jb21pbmcgdGV4dCBmaWxlLiIsCisiICBBVVRPTUFUSUMg YnkgZGVmYXVsdC4gIEFsc28gc2VlIEhFTFAgQVNTT0NJQVRFLiIsCisiICIsCisjZW5kaWYgLyog Tk9DU0VUUyAqLworIlNFVCBSRUNFSVZFIENPTlRST0wtUFJFRklYIG51bWJlciIsCisiICBBU0NJ SSB2YWx1ZSBvZiBwcmVmaXggY2hhcmFjdGVyIHVzZWQgZm9yIHF1b3RpbmcgY29udHJvbCBjaGFy YWN0ZXJzIGluIiwKKyIgIHBhY2tldHMgdGhhdCBLZXJtaXQgcmVjZWl2ZXMsIG5vcm1hbGx5IDM1 IChudW1iZXIgc2lnbikuICBEb24ndCBjaGFuZ2UiLAorIiAgdGhpcyB1bmxlc3Mgc29tZXRoaW5n IGlzIHdyb25nIHdpdGggdGhlIG90aGVyIEtlcm1pdCBwcm9ncmFtLiIsCisiICIsCisiU0VUIFJF Q0VJVkUgRU5ELU9GLVBBQ0tFVCBudW1iZXIiLAorIiAgQVNDSUkgdmFsdWUgb2YgY29udHJvbCBj aGFyYWN0ZXIgdGhhdCB0ZXJtaW5hdGVzIGluY29taW5nIHBhY2tldHMsIiwKKyIgIG5vcm1hbGx5 IDEzIChjYXJyaWFnZSByZXR1cm4pLiIsCisiICIsCisjaWZkZWYgQ0tYWENIQVIKKyJTRVQgUkVD RUlWRSBJR05PUkUtQ0hBUkFDVEVSIG51bWJlciIsCisiICBBU0NJSSB2YWx1ZSBvZiBjaGFyYWN0 ZXIgdG8gYmUgZGlzY2FyZGVkIHdoZW4gcmVjZWl2aW5nIHBhY2tldHMsIHN1Y2ggYXMiLAorIiAg bGluZSBmb2xkaW5nIGNoYXJhY3RlcnMuIiwKKyIgIiwKKyNlbmRpZiAvKiBDS1hYQ0hBUiAqLwor IlNFVCBSRUNFSVZFIE1PVkUtVE8gWyBkaXJlY3RvcnkgXSIsCisiICBJZiBhIGRpcmVjdG9yeSBu YW1lIGlzIHNwZWNpZmllZCwgdGhlbiBldmVyeSBmaWxlIHRoYXQgaXMgcmVjZWl2ZWQiLAorIiAg c3VjY2Vzc2Z1bGx5IGlzIG1vdmVkIHRvIHRoZSBnaXZlbiBkaXJlY3RvcnkgaW1tZWRpYXRlbHkg YWZ0ZXIgcmVjZXB0aW9uIiwKKyIgIGlzIGNvbXBsZXRlLiAgT21pdCB0aGUgZGlyZWN0b3J5IG5h bWUgdG8gcmVtb3ZlIGFueSBwcmV2aW91c2x5IHNldCBtb3ZlLXRvIiwKKyIgIGRpcmVjdG9yeS4i LAorIiAiLAorIlNFVCBSRUNFSVZFIFBBQ0tFVC1MRU5HVEggbnVtYmVyIiwKKyIgIE1heGltdW0g bGVuZ3RoIHBhY2tldCB0aGUgb3RoZXIgS2VybWl0IHNob3VsZCBzZW5kLiIsCisiICIsCisiU0VU IFJFQ0VJVkUgUEFERElORyBudW1iZXIiLAorIiAgTnVtYmVyIG9mIHByZXBhY2tldCBwYWRkaW5n IGNoYXJhY3RlcnMgdG8gYXNrIGZvciAobm9ybWFsbHkgMCkuIiwKKyIgIiwKKyJTRVQgUkVDRUlW RSBQQUQtQ0hBUkFDVEVSIG51bWJlciIsCisiICBBU0NJSSB2YWx1ZSBvZiBjb250cm9sIGNoYXJh Y3RlciB0byB1c2UgZm9yIHBhZGRpbmcgKG5vcm1hbGx5IDApLiIsCisiICIsCisiU0VUIFJFQ0VJ VkUgUEFUSE5BTUVTIHtPRkYsIEFCU09MVVRFLCBSRUxBVElWRSwgQVVUT30iLAorIiAgSWYgYSBy ZWNvZ25pemFibGUgcGF0aCAoZGlyZWN0b3J5LCBkZXZpY2UpIHNwZWNpZmljYXRpb24gYXBwZWFy cyBpbiBhbiIsCisiICBpbmNvbWluZyBmaWxlbmFtZSwgc3RyaXAgaXQgT0ZGIGJlZm9yZSB0cnlp bmcgdG8gY3JlYXRlIHRoZSBvdXRwdXQgZmlsZS4iLAorI2lmZGVmIENLX01LRElSCisiICBPdGhl cndpc2UsIHRoZW4gaWYgYW55IG9mIHRoZSBkaXJlY3RvcmllcyBpbiB0aGUgcGF0aCBkb24ndCBl eGlzdCwgS2VybWl0IiwKKyIgIHRyaWVzIHRvIGNyZWF0ZSB0aGVtLCByZWxhdGl2ZSB0byB5b3Vy IGN1cnJlbnQgb3IgZG93bmxvYWQgZGlyZWN0b3J5LCBvciIsCisiICBhYnNvbHV0ZWx5LCBhcyBz cGVjaWZpZWQuICBSRUxBVElWRSBtZWFucyBmb3JjZSBhbGwgaW5jb21pbmcgbmFtZXMsIGV2ZW4i LAorIiAgaWYgdGhleSBhcmUgYWJzb2x1dGUsIHRvIGJlIHJlbGF0aXZlIHRvIHlvdXIgY3VycmVu dCBvciBkb3dubG9hZCBkaXJlY3RvcnkuIgorLAorIiAgQVVUTywgd2hpY2ggaXMgdGhlIGRlZmF1 bHQsIG1lYW5zIFJFTEFUSVZFIGlmIHRoZSBmaWxlIHNlbmRlciBpbmRpY2F0ZXMgaW4iLAorIiAg YWR2YW5jZSB0aGF0IHRoaXMgaXMgYSByZWN1cnNpdmUgdHJhbnNmZXIsIG90aGVyd2lzZSBPRkYu IiwKKyNlbmRpZiAvKiBDS19NS0RJUiAqLworIiAiLAorIlNFVCBSRUNFSVZFIFBBVVNFIG51bWJl ciIsCisiICBNaWxsaXNlY29uZHMgdG8gcGF1c2UgYmV0d2VlbiBwYWNrZXRzLCBub3JtYWxseSAw LiIsCisiICIsCisKKyNpZmRlZiBDS19QRVJNUworIlNFVCBSRUNFSVZFIFBFUk1JU1NJT05TIHsg T04sIE9GRiB9IiwKKyIgIFdoZXRoZXIgdG8gY29weSBmaWxlIHBlcm1pc3Npb25zIGZyb20gaW5i b3VuZCBBdHRyaWJ1dGUgcGFja2V0cy4iLAorIiAiLAorI2VuZGlmIC8qIENLX1BFUk1TICovCisK KyJTRVQgUkVDRUlWRSBSRU5BTUUtVE8gWyB0ZW1wbGF0ZSBdIiwKKyIgIElmIGEgdGVtcGxhdGUg aXMgc3BlY2lmaWVkLCB0aGVuIGV2ZXJ5IGZpbGUgdGhhdCBpcyByZWNlaXZlZCBzdWNjZXNzZnVs bHkiLAorIiAgXAoraXMgcmVuYW1lZCBhY2NvcmRpbmcgdG8gdGhlIGdpdmVuIHRlbXBsYXRlIGlt bWVkaWF0ZWx5IGFmdGVyIGl0IGlzIHJlY2VpdmVkLiIsCisiICBcCitUaGUgdGVtcGxhdGUgc2hv dWxkIGluY2x1ZGUgdmFyaWFibGVzIGxpa2UgXFx2KGZpbGVuYW1lKSBvciBcXHYoZmlsZW51bWJl cikuIiwKKyIgIE9taXQgdGhlIHRlbXBsYXRlIHRvIHJlbW92ZSBhbnkgdGVtcGxhdGUgcHJldmlv dXNseSBzZXQuIiwKKyIgIiwKKyJTRVQgUkVDRUlWRSBTVEFSVC1PRi1QQUNLRVQgbnVtYmVyIiwK KyIgIEFTQ0lJIHZhbHVlIG9mIGNoYXJhY3RlciB0aGF0IG1hcmtzIHN0YXJ0IG9mIGluYm91bmQg cGFja2V0LiIsCisiICIsCisiU0VUIFJFQ0VJVkUgVElNRU9VVCBudW1iZXIiLAorIiAgTnVtYmVy IG9mIHNlY29uZHMgdGhlIG90aGVyIEtlcm1pdCBzaG91bGQgd2FpdCBmb3IgYSBwYWNrZXQgYmVm b3JlIHNlbmRpbmciLAorIiAgYSBOQUsgb3IgcmV0cmFuc21pdHRpbmcuIiwKKyNpZmRlZiBWTVMK KyIgIiwKKyJTRVQgUkVDRUlWRSBWRVJTSU9OLU5VTUJFUlMgeyBPTiwgT0ZGIH0iLAorIiAgSWYg T04sIGFuZCBpbiBpbmNvbWluZyBmaWxlbmFtZSBpbmNsdWRlcyBhIFZNUyB2ZXJzaW9uIG51bWJl ciwgdXNlIGl0IHdoZW4iLAorIiAgY3JlYXRpbmcgdGhlIGZpbGUuICBJZiBPRkYgKHdoaWNoIGlz IHRoZSBkZWZhdWx0KSwgc3RyaXAgYW55IFZNUyB2ZXJzaW9uIiwKKyIgIG51bWJlciBmcm9tIGlu Y29taW5nIGZpbGVuYW1lcyBiZWZvcmUgYXR0ZW1wdGluZyB0byBjcmVhdGUgdGhlIGZpbGUsIFwK K2NhdXNpbmciLAorIiAgdGhlIG5ldyBmaWxlIHRvIHJlY2VpdmUgdGhlIG5leHQgaGlnaGVzdCB2 ZXJzaW9uIG51bWJlci4iLAorI2VuZGlmIC8qIFZNUyAqLworIiIgfTsKKworc3RhdGljIGNoYXIg Kmh4eXNuZFtdID0geworIlN5bnRheDogU0VUIFNFTkQgcGFyYW1ldGVyIHZhbHVlIiwKKyIgIFNw ZWNpZmllcyBwYXJhbWV0ZXJzIGZvciBvdXRib3VuZCBmaWxlcyBvciBwYWNrZXRzLiIsCisiICIs CisiU0VUIFNFTkQgQkFDS1VQIHsgT04sIE9GRiB9IiwKKyIgIFRlbGxzIHdoZXRoZXIgdG8gaW5j bHVkZSBiYWNrdXAgZmlsZXMgd2hlbiBzZW5kaW5nIGZpbGUgZ3JvdXBzLiAgQmFja3VwIiwKKyIg IGZpbGVzIGFyZSB0aG9zZSBjcmVhdGVkIGJ5IEtlcm1pdCwgRU1BQ1MsIGV0Yywgd2hlbiBjcmVh dGluZyBhIG5ldyBmaWxlIiwKKyIgIHRoYXQgaGFzIHRoZSBzYW1lIG5hbWUgYXMgYW4gZXhpc3Rp bmcgZmlsZS4gIEEgYmFja3VwIGZpbGUgaGFzIGEgdmVyc2lvbiIsCisiICBhcHBlbmRlZCB0byBp dHMgbmFtZSwgZS5nLiBvb2ZhLnR4dC5+MjN+LiAgT04gaXMgdGhlIGRlZmF1bHQsIG1lYW5pbmci LAorIiAgZG9uJ3QgZXhjbHVkZSBiYWNrdXAgZmlsZXMuICBVc2UgT0ZGIHRvIGV4Y2x1ZGUgYmFj a3VwIGZpbGVzIGZyb20gZ3JvdXAiLAorIiAgdHJhbnNmZXJzLiIsCisiICIsCisjaWZuZGVmIE5P Q1NFVFMKKyJTRVQgU0VORCBDSEFSQUNURVItU0VUIHsgQVVUT01BVElDLCBNQU5VQUwgfSIsCisi ICBXaGV0aGVyIHRvIGF1dG9tYXRpY2FsbHkgc3dpdGNoIHRvIGFuIGFwcHJvcHJpYXRlIGZpbGUt Y2hhcmFjdGVyIHdoZW4gYSIsCisiICBTRVQgVFJBTlNGRVIgQ0hBUkFDVEVSLVNFVCBjb21tYW5k IGlzIGdpdmVuLCBvciB2aWNlIHZlcnNhLiAgQVVUT01BVElDIGJ5IiwKKyIgIGRlZmF1bHQuICBB bHNvIHNlZSBIRUxQIEFTU09DSUFURS4iLAorIiAiLAorI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKwor IlNFVCBTRU5EIENPTlRST0wtUFJFRklYIG51bWJlciIsCisiICBBU0NJSSB2YWx1ZSBvZiBwcmVm aXggY2hhcmFjdGVyIHVzZWQgZm9yIHF1b3RpbmcgY29udHJvbCBjaGFyYWN0ZXJzIGluIiwKKyIg IHBhY2tldHMgdGhhdCBLZXJtaXQgc2VuZHMsIG5vcm1hbGx5IDM1IChudW1iZXIgc2lnbikuIiwK KyIgIiwKKyNpZmRlZiBDS1hYQ0hBUgorIlNFVCBTRU5EIERPVUJMRS1DSEFSQUNURVIgbnVtYmVy IiwKKyIgIEFTQ0lJIHZhbHVlIG9mIGNoYXJhY3RlciB0byBiZSBkb3VibGVkIHdoZW4gc2VuZGlu ZyBwYWNrZXRzLCBzdWNoIGFzIGFuIiwKKyIgIFguMjUgUEFEIGVzY2FwZSBjaGFyYWN0ZXIuIiwK KyIgIiwKKyNlbmRpZiAvKiBDS1hYQ0hBUiAqLworIlNFVCBTRU5EIEVORC1PRi1QQUNLRVQgbnVt YmVyIiwKKyIgIEFTQ0lJIHZhbHVlIG9mIGNvbnRyb2wgY2hhcmFjdGVyIHRvIHRlcm1pbmF0ZSBh biBvdXRib3VuZCBwYWNrZXQsIiwKKyIgIG5vcm1hbGx5IDEzIChjYXJyaWFnZSByZXR1cm4pLiIs CisiICIsCisiU0VUIFNFTkQgTU9WRS1UTyBbIGRpcmVjdG9yeSBdIiwKKyIgIFwKK0lmIGEgZGly ZWN0b3J5IG5hbWUgaXMgc3BlY2lmaWVkLCB0aGVuIGV2ZXJ5IGZpbGUgdGhhdCBpcyBzZW50IHN1 Y2Nlc3NmdWxseSIsCisiICBpcyBtb3ZlZCB0byB0aGUgZ2l2ZW4gZGlyZWN0b3J5IGltbWVkaWF0 ZWx5IGFmdGVyIGl0IGlzIHNlbnQuIiwKKyIgIE9taXQgdGhlIGRpcmVjdG9yeSBuYW1lIHRvIHJl bW92ZSBhbnkgcHJldmlvdXNseSBzZXQgbW92ZS10byBkaXJlY3RvcnkuIiwKKyIgIiwKKyJTRVQg U0VORCBQQUNLRVQtTEVOR1RIIG51bWJlciIsCisiICBNYXhpbXVtIGxlbmd0aCBwYWNrZXQgdG8g c2VuZCwgZXZlbiBpZiBvdGhlciBLZXJtaXQgYXNrcyBmb3IgbG9uZ2VyIG9uZXMuIiwKKyIgIFRo aXMgY29tbWFuZCBjYW4gbm90IGJlIHVzZWQgdG8gZm9yY2UgcGFja2V0cyB0byBiZSBzZW50IHRo YXQgYXJlIGxvbmdlciIsCisiICB0aGFuIHRoZSBsZW5ndGggcmVxdWVzdGVkIGJ5IHRoZSByZWNl aXZlci4gIFVzZSB0aGlzIGNvbW1hbmQgb25seSB0byIsCisiICBmb3JjZSBzaG9ydGVyIG9uZXMu IiwKKyIgIiwKKyJTRVQgU0VORCBQQURESU5HIG51bWJlciIsCisiICBOdW1iZXIgb2YgcHJlcGFj a2V0IHBhZGRpbmcgY2hhcmFjdGVycyB0byBzZW5kLiIsCisiICIsCisiU0VUIFNFTkQgUEFELUNI QVJBQ1RFUiBudW1iZXIiLAorIiAgQVNDSUkgdmFsdWUgb2YgY29udHJvbCBjaGFyYWN0ZXIgdG8g dXNlIGZvciBwYWRkaW5nLiIsCisiICIsCisiU0VUIFNFTkQgUEFUSE5BTUVTIHtPRkYsIEFCU09M VVRFLCBSRUxBVElWRX0iLAorIiAgSW5jbHVkZSB0aGUgcGF0aCAoZGV2aWNlLCBkaXJlY3Rvcnkp IHBvcnRpb24gd2l0aCB0aGUgZmlsZSBuYW1lIHdoZW4iLAorIiAgc2VuZGluZyBpdCBhcyBzcGVj aWZpZWQ7IEFCU09MVVRFIG1lYW5zIHRvIHNlbmQgdGhlIHdob2xlIHBhdGhuYW1lLCIsCisiICBS RUxBVElWRSBtZWFucyB0byBpbmNsdWRlIHRoZSBwYXRobmFtZSByZWxhdGl2ZSB0byB0aGUgY3Vy cmVudCBkaXJlY3RvcnkuIiwKKyIgIEFwcGxpZXMgdG8gdGhlIGFjdHVhbCBmaWxlbmFtZSwgbm90 IHRvIHRoZSBcImFzLW5hbWVcIi4gIFRoZSBkZWZhdWx0IGlzIiwKKyIgIE9GRi4iLAorIiAiLAor IlNFVCBTRU5EIFBBVVNFIG51bWJlciIsCisiICBNaWxsaXNlY29uZHMgdG8gcGF1c2UgYmV0d2Vl biBwYWNrZXRzLCBub3JtYWxseSAwLiIsCisiICIsCisKKyNpZmRlZiBDS19QRVJNUworIlNFVCBT RU5EIFBFUk1JU1NJT05TIHsgT04sIE9GRiB9IiwKKyIgIFdoZXRoZXIgdG8gaW5jbHVkZSBmaWxl IHBlcm1pc3Npb25zIGluIG91dGJvdW5kIEF0dHJpYnV0ZSBwYWNrZXRzLiIsCisiICIsCisjZW5k aWYgLyogQ0tfUEVSTVMgKi8KKworIlNFVCBTRU5EIFJFTkFNRS1UTyBbIHRlbXBsYXRlIF0iLAor IiAgSWYgYSB0ZW1wbGF0ZSBpcyBzcGVjaWZpZWQsIHRoZW4gZXZlcnkgZmlsZSB0aGF0IGlzIHNl bnQgc3VjY2Vzc2Z1bGx5IiwKKyIgIGlzIHJlbmFtZWQgYWNjb3JkaW5nIHRvIHRoZSBnaXZlbiB0 ZW1wbGF0ZSBpbW1lZGlhdGVseSBhZnRlciBpdCBpcyBzZW50LiIsCisiICBcCitUaGUgdGVtcGxh dGUgc2hvdWxkIGluY2x1ZGUgdmFyaWFibGVzIGxpa2UgXFx2KGZpbGVuYW1lKSBvciBcXHYoZmls ZW51bWJlcikuIiwKKyIgIE9taXQgdGhlIHRlbXBsYXRlIHRvIHJlbW92ZSBhbnkgdGVtcGxhdGUg cHJldmlvdXNseSBzZXQuIiwKKyIgIiwKKyJTRVQgU0VORCBTVEFSVC1PRi1QQUNLRVQgbnVtYmVy IiwKKyIgIEFTQ0lJIHZhbHVlIG9mIGNoYXJhY3RlciB0byBtYXJrIHN0YXJ0IG9mIG91dGJvdW5k IHBhY2tldC4iLAorIiAiLAorI2lmZGVmIENLX1RJTUVSUworIlNFVCBTRU5EIFRJTUVPVVQgbnVt YmVyIFsgeyBEWU5BTUlDIFsgbWluIG1heCBdIF0sIEZJWEVEIH0gXSIsCisjZWxzZQorIlNFVCBT RU5EIFRJTUVPVVQgbnVtYmVyIiwKKyNlbmRpZiAvKiBDS19USU1FUlMgKi8KKworIiAgTnVtYmVy IG9mIHNlY29uZHMgdG8gd2FpdCBmb3IgYSBwYWNrZXQgYmVmb3JlIHNlbmRpbmcgTkFLIG9yIiwK KyNpZmRlZiBDS19USU1FUlMKKyIgIHJldHJhbnNtaXR0aW5nLiAgSW5jbHVkZSB0aGUgd29yZCBE WU5BTUlDIGFmdGVyIHRoZSBudW1iZXIgaW4gdGhlIiwKKyIgIFNFVCBTRU5EIFRJTUVPVVQgY29t bWFuZCB0byBoYXZlIEtlcm1pdCBjb21wdXRlIHRoZSB0aW1lb3V0cyBkeW5hbWljYWxseSIsCisi ICB0aHJvdWdob3V0IHRoZSB0cmFuc2ZlciBiYXNlZCBvbiB0aGUgcGFja2V0IHJhdGUuICBJbmNs dWRlIHRoZSB3b3JkIEZJWEVEIiwKKyIgIHRvIHVzZSB0aGUgXCJudW1iZXJcIiBnaXZlbiB0aHJv dWdob3V0IHRoZSB0cmFuc2Zlci4gIERZTkFNSUMgaXMgdGhlIiwKKyIgIGRlZmF1bHQuICBBZnRl ciBEWU5BTUlDIHlvdSBtYXkgaW5jbHVkZSBtaW5pbXVtIGFuZCBtYXhpbXVtIHZhbHVlcy4iLAor IiAgU0VUIFNFTkQgVElNRU9VVCAtMSBGSVhFRCBtZWFucyBubyB0aW1lb3V0cy4iLAorI2Vsc2UK KyIgIHJldHJhbnNtaXR0aW5nLiIsCisjZW5kaWYgLyogQ0tfVElNRVJTICovCisjaWZkZWYgVk1T CisiICIsCisiU0VUIFNFTkQgVkVSU0lPTi1OVU1CRVJTIHsgT04sIE9GRiB9IiwKKyIgIElmIE9O LCBpbmNsdWRlIFZNUyB2ZXJzaW9uIG51bWJlcnMgaW4gb3V0Ym91bmQgZmlsZW5hbWVzLiAgSWYg T0ZGICh3aGljaCIsCisiICBpcyB0aGUgZGVmYXVsdCksIHN0cmlwIHZlcnNpb24gbnVtYmVycy4i LAorI2VuZGlmIC8qIFZNUyAqLworIiIgfTsKKworc3RhdGljIGNoYXIgKmh4eXhmZXJbXSA9IHsK KyJTeW50YXg6IFNFVCBUUkFOU0ZFUiAob3IgWEZFUikgcGFyYW1ldGVyIHZhbHVlIiwKKyIgIiwK KyJDaG9pY2VzOiIsCisiICIsCisiU0VUIFRSQU5TRkVSIEJFTEwgeyBPRkYsIE9OIH0iLAorIiAg V2hldGhlciB0byByaW5nIHRoZSB0ZXJtaW5hbCBiZWxsIGF0IHRoZSBlbmQgb2YgYSBmaWxlIHRy YW5zZmVyLiIsCisiICIsCisjaWZkZWYgWEZSQ0FOCisiU0VUIFRSQU5TRkVSIENBTkNFTExBVElP TiB7IE9GRiwgT04gWyA8Y29kZT4gWyA8bnVtYmVyPiBdIF0gfSIsCisiICBPRkYgZGlzYWJsZXMg cmVtb3RlLW1vZGUgcGFja2V0LW1vZGUgY2FuY2VsbGF0aW9uIGZyb20gdGhlIGtleWJvYXJkLiIs CisiICBPTiBlbmFibGVzIGl0LiAgVGhlIG9wdGlvbmFsIDxjb2RlPiBpcyB0aGUgY29udHJvbCBj aGFyYWN0ZXIgdG8gdXNlIGZvciIsCisiICBjYW5jZWxsYXRpb247IHRoZSBvcHRpb25hbCA8bnVt YmVyPiBpcyBob3cgbWFueSBjb25zZWN1dGl2ZSBvY2N1cnJlbmNlcyIsCisiICBvZiB0aGUgZ2l2 ZW4gY29udHJvbCBjaGFyYWN0ZXIgYXJlIHJlcXVpcmVkIGZvciBjYW5jZWxsYXRpb24uIiwKKyIg IiwKKyNlbmRpZiAvKiBYRlJDQU4gKi8KKyJTRVQgVFJBTlNGRVIgSU5URVJSVVBUSU9OIHsgT04s IE9GRiB9IiwKKyIgIFRSQU5TRkVSIElOVEVSUlVQVElPTiBpcyBub3JtYWxseSBPTiwgYWxsb3dp bmcgZm9yIGludGVycnVwdGlvbiBvZiBhIGZpbGUiLAorIiAgdHJhbnNmZXIgaW4gcHJvZ3Jlc3Mg YnkgdHlwaW5nIGNlcnRhaW4gY2hhcmFjdGVycyB3aGlsZSB0aGUgZmlsZS10cmFuc2ZlciIsCisi ICBkaXNwbGF5IGlzIGFjdGl2ZS4gIFNFVCBUUkFOU0ZFUiBJTlRFUlJVUFRJT04gT0ZGIGRpc2Fi bGVzIGludGVycnVwdGlvbiIsCisiICBvZiBmaWxlIHRyYW5zZmVyIGZyb20gdGhlIGtleWJvYXJk IGluIGxvY2FsIG1vZGUuIiwKKyIgIiwKKyNpZm5kZWYgTk9TUEwKKyJTRVQgVFJBTlNGRVIgQ1JD LUNBTENVTEFUSU9OIHsgT0ZGLCBPTiB9IiwKKyIgIFRlbGxzIHdoZXRoZXIgS2VybWl0IHNob3Vs ZCBhY2N1bXVsYXRlIGEgQ3ljbGljIFJlZHVuZGFuY3kgQ2hlY2sgZm9yICIsCisiICBlYWNoIGZp bGUgdHJhbnNmZXIuICBOb3JtYWxseSBPTiwgaW4gd2hpY2ggY2FzZSB0aGUgQ1JDIHZhbHVlIGlz IGF2YWlsYWJsZSIsCisiICBpbiB0aGUgXFx2KGNyYzE2KSB2YXJpYWJsZSBhZnRlciB0aGUgdHJh bnNmZXIuICBBZGRzIHNvbWUgb3ZlcmhlYWQuICBVc2UiLAorIiAgU0VUIFRSQU5TRkVSIENSQyBP RkYgdG8gZGlzYWJsZS4iLAorIiAiLAorI2VuZGlmIC8qIE5PU1BMICovCisjaWZuZGVmIE5PQ1NF VFMKKyJTRVQgVFJBTlNGRVIgQ0hBUkFDVEVSLVNFVCBuYW1lIiwKKyIgIFNlbGVjdHMgdGhlIGNo YXJhY3RlciBzZXQgdXNlZCB0byByZXByZXNlbnQgdGV4dHVhbCBkYXRhIGluIEtlcm1pdCIsCisi ICBwYWNrZXRzLiAgVGV4dCBjaGFyYWN0ZXJzIGFyZSB0cmFuc2xhdGVkIHRvL2Zyb20gdGhlIEZJ TEUgQ0hBUkFDVEVSLVNFVC4iLAorIiAgQ2hvaWNlczoiLAorIiAiLAorIiAgVFJBTlNQQVJFTlQg KG5vIHRyYW5zbGF0aW9uLCB0aGUgZGVmYXVsdCkiLAorIiAgQVNDSUkiLAorIiAgTEFUSU4xIChJ U08gODg1OS0xIExhdGluIEFscGhhYmV0IDEpIiwKKyNpZm5kZWYgTk9MQVRJTjIKKyIgIExBVElO MiAoSVNPIDg4NTktMiBMYXRpbiBBbHBoYWJldCAyKSIsCisjZW5kaWYgLyogTk9MQVRJTjIgKi8K KyIgIExBVElOOSAoSVNPIDg4NTktMTUgTGF0aW4gQWxwaGFiZXQgOSkiLAorI2lmZGVmIENZUklM TElDCisiICBDWVJJTExJQy1JU08gKElTTyA4ODU5LTUgTGF0aW4vQ3lyaWxsaWMpIiwKKyNlbmRp ZiAvKiBDWVJJTExJQyAqLworI2lmZGVmIEdSRUVLCisiICBHUkVFSy1JU08gKElTTyA4ODU5LTcg TGF0aW4vR3JlZWspIiwKKyNlbmRpZiAvKiBHUkVFSyAqLworI2lmZGVmIEhFQlJFVworIiAgSEVC UkVXLUlTTyAoSVNPIDg4NTktOCBMYXRpbi9IZWJyZXcpIiwKKyNlbmRpZiAvKiBIRUJSRVcgKi8K KyNpZmRlZiBLQU5KSQorIiAgSkFQQU5FU0UtRVVDIChKSVMgWCAwMjA4IEthbmppICsgUm9tYW4g YW5kIEthdGFrYW5hKSIsCisjZW5kaWYgLyogS0FOSkkgKi8KKyNpZmRlZiBVTklDT0RFCisiICBV Q1MtMiAoSVNPIDEwNjQ2IC8gVW5pY29kZSAyLWJ5dGUgZm9ybSkiLAorIiAgVVRGLTggKElTTyAx MDY0NiAvIFVuaWNvZGUgOC1iaXQgc2VyaWFsaXplZCB0cmFuc2Zvcm1hdGlvbiBmb3JtYXQpIiwK KyNlbmRpZiAvKiBVTklDT0RFICovCisiICIsCisiU0VUIFRSQU5TRkVSIFRSQU5TTEFUSU9OIHsg T04sIE9GRiB9IiwKKyIgIEVuYWJsZXMgYW5kIGRpc2FibGVzIGZpbGUtdHJhbnNmZXIgY2hhcmFj dGVyLXNldCB0cmFuc2xhdGlvbi4gIEl0J3MiLAorIiAgZW5hYmxlZCBieSBkZWZhdWx0LiIsCisj ZW5kaWYgLyogTk9DU0VUUyAqLworIiAiLAorI2lmZGVmIENLX0NVUlNFUworIlNFVCBUUkFOU0ZF UiBESVNQTEFZIHsgQlJJRUYsIENSVCwgRlVMTFNDUkVFTiwgTk9ORSwgU0VSSUFMIH0iLAorI2Vs c2UKKyJTRVQgVFJBTlNGRVIgRElTUExBWSB7IEJSSUVGLCBDUlQsIE5PTkUsIFNFUklBTCB9IiwK KyNlbmRpZiAgLyogQ0tfQ1VSU0VTICovCisiICBDaG9vc2UgdGhlIGRlc2lyZWQgZm9ybWF0IGZv ciB0aGUgcHJvZ3Jlc3MgcmVwb3J0IHRvIGJlIGRpc3BsYXllZCBvbiIsCisiICB5b3VyIHNjcmVl biBkdXJpbmcgZmlsZSB0cmFuc2ZlcnMgd2hlbiBLZXJtaXQgaXMgaW4gbG9jYWwgbW9kZS4iLAor I2lmZGVmIENLX0NVUlNFUworIiAgRlVMTFNDUkVFTiByZXF1aXJlcyB5b3VyIHRlcm1pbmFsIHR5 cGUgYmUgc2V0IGNvcnJlY3RseTsgdGhlIG90aGVycyIsCisiICBhcmUgaW5kZXBlbmRlbnQgb2Yg dGVybWluYWwgdHlwZS4iLAorI2Vsc2UKKyIgIGZpbGUgdHJhbnNmZXIuIiwKKyNlbmRpZiAgLyog Q0tfQ1VSU0VTICovCisiICIsCisiU0VUIFRSQU5TRkVSIExPQ0tJTkctU0hJRlQgeyBPRkYsIE9O LCBGT1JDRUQgfSIsCisiICBUZWxsIHdoZXRoZXIgbG9ja2luZy1zaGlmdCBwcm90b2NvbCBzaG91 bGQgYmUgdXNlZCBkdXJpbmcgZmlsZSB0cmFuc2ZlciIsCisiICB0byBhY2hpZXZlIDgtYml0IHRy YW5zcGFyZW5jeSBvbiBhIDctYml0IGNvbm5lY3Rpb24uICBPTiBtZWFucyB0byByZXF1ZXN0IiwK KyIgIGl0cyB1c2UgaWYgUEFSSVRZIGlzIG5vdCBOT05FIGFuZCB0byB1c2UgaXQgaWYgdGhlIG90 aGVyIEtlcm1pdCBhZ3JlZXMsIiwKKyIgIE9GRiBtZWFucyBub3QgdG8gdXNlIGl0LCBGT1JDRUQg bWVhbnMgdG8gdXNlIGl0IGV2ZW4gaWYgdGhlIG90aGVyIEtlcm1pdCIsCisiICBkb2VzIG5vdCBh Z3JlZS4iLAorIiAiLAorIlNFVCBUUkFOU0ZFUiBNT0RFIHsgQVVUT01BVElDLCBNQU5VQUwgfSIs CisiICBBdXRvbWF0aWMgKHRoZSBkZWZhdWx0KSBtZWFucyBLZXJtaXQgc2hvdWxkIGF1dG9tYXRp Y2FsbHkgZ28gaW50byBiaW5hcnkiLAorIiAgZmlsZS10cmFuc2ZlciBtb2RlIGFuZCB1c2UgbGl0 ZXJhbCBmaWxlbmFtZXMgaWYgdGhlIG90aGVyIEtlcm1pdCBzYXlzIGl0IiwKKyIgIGhhcyBhIGNv bXBhdGlibGUgZmlsZSBzeXN0ZW0sIGUuZy4gVU5JWC10by1VTklYLCBidXQgbm90IFVOSVgtdG8t RE9TLiIsCisjaWZkZWYgUEFUVEVSTlMKKyIgIEFsc28sIHdoZW4gc2VuZGluZyBmaWxlcywgS2Vy bWl0IHNob3VsZCBzd2l0Y2ggYmV0d2VlbiBiaW5hcnkgYW5kIHRleHQiLAorIiAgbW9kZSBhdXRv bWF0aWNhbGx5IHBlciBmaWxlIGJhc2VkIG9uIHRoZSBTRVQgRklMRSBCSU5BUlktUEFUVEVSTlMg YW5kIFNFVCIsCisiICBGSUxFIFRFWFQtUEFUVEVSTlMuIiwKKyNlbmRpZiAvKiBQQVRURVJOUyAq LworIiAiLAorI2lmZGVmIFBJUEVTRU5ECisiU0VUIFRSQU5TRkVSIFBJUEVTIHsgT04sIE9GRiB9 IiwKKyIgIEVuYWJsZXMvRGlzYWJsZXMgYXV0b21hdGljIHNlbmRpbmcgZnJvbSAvIHJlY2VwdGlv biB0byBjb21tYW5kIHBpcGVzIHdoZW4iLAorIiAgdGhlIGluY29taW5nIGZpbGVuYW1lIHN0YXJ0 cyB3aXRoICchJy4gIEFsc28gc2VlIENTRU5ELCBDUkVDRUlWRS4iLAorIiAiLAorI2VuZGlmIC8q IFBJUEVTRU5EICovCisjaWZkZWYgQ0tfWFlaCisiU0VUIFRSQU5TRkVSIFBST1RPQ09MIHsgS0VS TUlULCBYTU9ERU0sIC4uLiB9IiwKKyIgIFN5bm9ueW0gZm9yIFNFVCBQUk9UT0NPTCAocS52Liku IiwKKyIgIiwKKyNlbmRpZiAvKiBDS19YWVogKi8KKyJTRVQgVFJBTlNGRVIgUkVQT1JUIHsgT04s IE9GRiB9IiwKKyIgIEVuYWJsZXMvRGlzYWJsZXMgdGhlIGF1dG9tYXRpYyBwb3N0LXRyYW5zZmVy IG1lc3NhZ2UgdGVsbGluZyB3aGF0IGZpbGVzIiwKKyIgIHdlbnQgd2hlcmUgZnJvbSBDLUtlcm1p dCB3aGVuIGl0IGlzIGluIHJlbW90ZSBtb2RlLiAgT04gYnkgZGVmYXVsdC4iLAorIiAiLAorIlNF VCBUUkFOU0ZFUiBTTE9XLVNUQVJUIHsgT0ZGLCBPTiB9IiwKKyIgIE9OICh0aGUgZGVmYXVsdCkg dGVsbHMgS2VybWl0LCB3aGVuIHNlbmRpbmcgZmlsZXMsIHRvIGdyYWR1YWxseSBidWlsZCB1cCIs CisiICB0aGUgcGFja2V0IGxlbmd0aCB0byB0aGUgbWF4aW11bSBuZWdvdGlhdGVkIGxlbmd0aC4g IE9GRiBtZWFucyBzdGFydCIsCisiICBzZW5kaW5nIHRoZSBtYXhpbXVtIGxlbmd0aCByaWdodCBh d2F5LiIsCisiICIsCisiU3lub255bTogU0VUIFhGRVIuICBVc2UgU0hPVyBUUkFOU0ZFUiAoWEZF UikgdG8gc2VlIFNFVCBUUkFOU0ZFUiB2YWx1ZXMuIiwKKyIiIH07CisjZW5kaWYgLyogTk9YRkVS ICovCisKKyNpZmRlZiBOVAorc3RhdGljIGNoYXIgKmh4eXdpbjk1W10gPSB7CisiU0VUIFdJTjk1 IDguMy1GSUxFTkFNRVMgeyBPTiwgT0ZGIH0iLAorIiAgSW5zdHJ1Y3RzIEstOTUgdG8gcmVwb3J0 IGFsbCBmaWxlbmFtZXMgdXNpbmcgOC4zIG5vdGF0aW9uIGluc3RlYWQgb2YgdGhlIiwKKyIgIG5v cm1hbCBsb25nIGZpbGVuYW1lcy4gIERlZmF1bHQgaXMgT0ZGIiwKKyIgIiwKKyJTRVQgV0lOOTUg QUxULUdSIHsgT04sIE9GRiB9IiwKKyIgIEluc3RydWN0cyBLLTk1LCB3aGVuIHVzZWQgb24gTVMg V2luZG93cyA5NSwgdG8gaW50ZXJwcmV0IHRoZSBSaWdodCBBbHQga2V5IiwKKyIgIGFzIHRoZSBB bHQtR3Iga2V5LiAgVGhpcyBpcyBuZWNlc3NhcnkgdG8gd29yayBhcm91bmQgdGhlIGZhaWx1cmUg b2YiLAorIiAgV2luZG93cyA5NSB0byBwcm9wZXJseSB0cmFuc2xhdGUgbm9uLVVTIGtleWJvYXJk cy4gIERlZmF1bHQgaXMgT0ZGLiIsCisiICIsCisiU0VUIFdJTjk1IEtFWUJPQVJELVRSQU5TTEFU SU9OIDxjaGFyYWN0ZXItc2V0PiIsCisiICBTcGVjaWZpZXMgdGhlIGNoYXJhY3Rlci1zZXQgdGhh dCBXaW5kb3dzIDk1IGlzIHVzaW5nIHRvIHNlbmQga2V5c3Ryb2tlcyIsCisiICB0byBLZXJtaXQt OTUgdmlhIHRoZSBrZXlib2FyZCBpbnB1dCBmdW5jdGlvbnMuICBEZWZhdWx0IGlzIExhdGluMS1J U08uIiwKKyIgIiwKKyJTRVQgV0lOOTUgT1ZFUkxBUFBFRC1JTyB7IE9OIDxyZXF1ZXN0cz4sIE9G RiB9IiwKKyIgIERldGVybWluZXMgd2hldGhlciBvciBub3QgSy05NSB1c2VzIE92ZXJsYXBwZWQt SS9PIG1ldGhvZHMgZm9yIHJlYWRpbmciLAorIiAgZnJvbSBhbmQgd3JpdGluZyB0byBzZXJpYWwg YW5kIFRBUEkgY29tbXVuaWNhdGlvbiBkZXZpY2VzLiAgPHJlcXVlc3RzPiIsCisiICBzcGVjaWZp ZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHNpbXVsdGFuZW91cyB3cml0ZSByZXF1ZXN0cyB0aGF0 IG1heSBiZSIsCisiICBvdmVybGFwcGVkLCBmcm9tIDEgdG8gMzAuICBEZWZhdWx0IGlzIE9OLiIs CisiICIsCisiU0VUIFdJTjk1IFBPUFVQUyB7IE9OLCBPRkYgfSIsCisiICBEZXRlcm1pbmVzIHdo ZXRoZXIgb3Igbm90IEtlcm1pdCA5NSB1c2VzIFBvcHVwcyB0byBxdWVyeSB0aGUgdXNlciBmb3Ii LAorIiAgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIHN1Y2ggYXMgdXNlciBJRHMgb3IgcGFzc3dvcmRz LiAgRGVmYXVsdCBpcyBPTi4iLAorIiAiLAorIlNFVCBXSU45NSBTRUxFQ1QtQlVHIHsgT04sIE9G RiB9IgorIiAgU29tZSBUQ1AvSVAgKFdpbnNvY2spIGltcGxlbWVudGF0aW9ucyBmb3IgV2luZG93 cyBoYXZlIGEgZGVmZWN0aXZlIiwKKyIgIHNlbGVjdCgpIGZ1bmN0aW9uLiAgVXNlIHRoaXMgY29t bWFuZCB0byBhdm9pZCB0aGUgdXNlIG9mIHNlbGVjdCgpIGlmIiwKKyIgIEs5NSBhcHBlYXJzIHRv IGJlIHVuYWJsZSB0byBzZW5kIGRhdGEgb3ZlciBUQ1AvSVAuICBEZWZhdWx0IGlzIE9GRi4iLAor IiJ9OworI2VuZGlmIC8qIE5UICovCisKK3N0YXRpYyBjaGFyICpobXh5YmVsW10gPSB7CisjaWZk ZWYgT1MyCisiU3ludGF4OiBTRVQgQkVMTCB7IEFVRElCTEUgWyB7IEJFRVAsIFNZU1RFTS1TT1VO RFMgfSBdLCBWSVNJQkxFLCBOT05FIH0iLAorIiAgU3BlY2lmaWVzIGhvdyBpbmNvbWluZyBDdHJs LUcgKGJlbGwpIGNoYXJhY3RlcnMgYXJlIGhhbmRsZWQgaW4gQ09OTkVDVCIsCisiICBtb2RlIGFu ZCBob3cgY29tbWFuZCB3YXJuaW5ncyBhcmUgcHJlc2VudGVkIGluIGNvbW1hbmQgbW9kZS4gIEFV RElCTEUiLAorIiAgbWVhbnMgZWl0aGVyIGEgYmVlcCBvciBhIHN5c3RlbS1zb3VuZCBpcyBnZW5l cmF0ZWQ7IFZJU0lCTEUgbWVhbnMgdGhlIiwKKyIgIHNjcmVlbiBpcyBmbGFzaGVkIG1vbWVudGFy aWx5LiIsCisjZWxzZQorIlN5bnRheDogU0VUIEJFTEwgeyBPRkYsIE9OIH0iLAorIiAgT04gKHRo ZSBkZWZhdWx0KSBlbmFibGVzIHJpbmdpbmcgb2YgdGhlIHRlcm1pbmFsIGJlbGwgKGJlZXApIGV4 Y2VwdCB3aGVyZSIsCisiICBpdCBpcyBkaXNhYmxlZCBpbiBjZXJ0YWluIGNpcmN1bXN0YW5jZXMs IGUuZy4gYnkgU0VUIFRSQU5TRkVSIEJFTEwuICBPRkYiLAorIiAgZGlzYWJsZXMgcmluZ2luZyBv ZiB0aGUgYmVsbCBpbiBhbGwgY2lyY3Vtc3RhbmNlcywgb3ZlcnJpZGluZyBhbnkgc3BlY2lmaWMi LAorIiAgU0VUIHh4eCBCRUxMIHNlbGVjdGlvbnMuIiwKKyNlbmRpZiAvKiBPUzIgKi8KKyIifTsK KworI2lmZGVmIE9TMgorc3RhdGljIGNoYXIgKmhteHltc2tbXSA9IHsKKyJTRVQgTVNLRVJNSVQg RklMRS1SRU5BTUlORyB7IE9OLCBPRkYgfSIsCisiICBPTiBlbmFibGVzIHRoZSB1c2Ugb2YgTVMt RE9TIEtlcm1pdCBmaWxlIHJlbmFtaW5nIGNvbnZlbnRpb25zIGluc3RlYWQgb2YiLAorIiAgQy1L ZXJtaXQgY29udmVudGlvbnMuICBGaWxlIHJlbmFtaW5nIG9jY3VycyBkdXJpbmcgZmlsZSB0cmFu c2ZlcnMgd2hlbiIsCisiICB0aGVyZSBpcyBhIGZpbGUgbmFtZSBjb2xsaXNpb24gYW5kIGVpdGhl ciBCQUNLVVAgb3IgUkVOQU1FIGNvbGxpc2lvbiIsCisiICBvcHRpb25zIGFyZSBhY3RpdmUuICBD LUtlcm1pdCBjb252ZW50aW9ucyBwcmVzZXJ2ZSB0aGUgb3JpZ2luYWwgZmlsZSBuYW1lIiwKKyIg IHdoaWxlIGFwcGVuZGluZyAufm51bX4gdG8gdGhlIGVuZC4gIE1TLURPUyBLZXJtaXQgY29udmVu dGlvbnMgcmVzdHJpY3QiLAorIiAgZmlsZW5hbWVzIHRvIDguMyBub3RhdGlvbiBhbmQgcHJlc2Vy dmUgdGhlIGV4dGVuc2lvbi4gIFVuaXF1ZSBudW1lcmljIiwKKyIgIHZhbHVlcyBvdmVyd3JpdGUg dGhlIHJpZ2h0IG1vc3QgcG9ydGlvbiBvZiB0aGUgZmlsZSBuYW1lJ3MgbGVmdCBoYW5kIHNpZGUu IiwKKyIgIiwKKyJTRVQgTVNLRVJNSVQgS0VZQ09ERVMgeyBPTiwgT0ZGIH0iLAorIiAgT04gZW5h YmxlcyB0aGUgdXNlIG9mIE1TLURPUyBLZXJtaXQgY29tcGF0aWJsZSBrZXljb2RlcyB0byBwcm92 aWRlIHNjcmlwdCIsCisiICBwb3J0YWJpbGl0eS4iLAorIiJ9OworI2VuZGlmIC8qIE9TMiAqLwor CitzdGF0aWMgY2hhciAqaG14eWNkW10gPSB7CisiU3ludGF4OiBTRVQgQ0QgeyBIT01FIDxwYXRo PiwgUEFUSCA8cGF0aD4sIE1FU1NBR0UgeyBPTiwgT0ZGLCBGSUxFIDxsaXN0PiB9IH0iCissCisi ICIsCisiU0VUIENEIEhPTUUgPHBhdGg+IiwKKyIgIFNwZWNpZmllZCB3aGljaCBkaXJlY3Rvcnkg dG8gY2hhbmdlIHRvIGlmIENEIG9yIEtDRCBpcyBnaXZlbiB3aXRob3V0IGEiLAorIiAgcGF0aG5h bWUuICBJZiB0aGlzIGNvbW1hbmQgaXMgbm90IGdpdmVuLCB5b3VyIGxvZ2luIG9yIEhPTUUgZGly ZWN0b3J5IGlzIiwKKyIgIHVzZWQuIiwKKyIgIiwKKyJTRVQgQ0QgUEFUSCA8cGF0aD4iLAorIiAg T3ZlcnJpZGVzIG5vcm1hbCBDRFBBVEggZW52aXJvbm1lbnQgdmFyaWFibGUsIHdoaWNoIHRlbGxz IHRoZSBDRCBjb21tYW5kIiwKKyIgIHdoZXJlIHRvIGxvb2sgZm9yIGRpcmVjdG9yaWVzIHRvIENE IHRvIGlmIHlvdSBkb24ndCBzcGVjaWZ5IHRoZW0gZnVsbHkuIiwKKyIgIFRoZSBmb3JtYXQgaXM6 IiwKKyIgIiwKKyNpZmRlZiBVTklYT1JPU0sKKyIgICAgc2V0IGNkIHBhdGggOmRpcmVjdG9yeTpk aXJlY3Rvcnk6Li4uIiwKKyIgIiwKKyIgIGluIG90aGVyIHdvcmRzLCBhIGxpc3Qgb2YgZGlyZWN0 b3JpZXMgc2VwYXJhdGVkIGJ5IGNvbG9ucywgd2l0aCBhIGNvbG9uIiwKKyIgIGF0IHRoZSBiZWdp bm5pbmcsIGUuZy46IiwKKyIgIiwKKyIgICAgc2V0IGNkIHBhdGggOi91c3Ivb2xnYTovdXNyL2l2 YW4vcHVibGljOi90bXAiLAorI2Vsc2UKKyNpZmRlZiBPUzIKKyIgICAgc2V0IGNkIHBhdGggZGlz azpkaXJlY3Rvcnk7ZGlzazpkaXJlY3Rvcnk7Li4uIiwKKyIgIiwKKyIgIGp1c3QgbGlrZSB0aGUg RE9TIFBBVEg7IGluIG90aGVyIHdvcmRzLCBhIGxpc3Qgb2YgZGlzazpkaXJlY3RvcnkgbmFtZXMi LAorIiAgc2VwYXJhdGVkIGJ5IHNlbWljb2xvbnMsIGUuZy46IiwKKyIgIiwKKyIgICAgU0VUIENE IFBBVEggQzpcXEs5NTtDOlxcSE9NRTtDOlxcTE9DQUw7QzpcXCIsCisjZWxzZQorI2lmZGVmIFZN UworIiAgICBzZXQgY2QgcGF0aCBkaXJlY3RvcnksZGlyZWN0b3J5LC4uLiIsCisiICIsCisiICBp biBvdGhlciB3b3JkcywgYSBsaXN0IG9mIGRpcmVjdG9yeSBzcGVjaWZpY2F0aW9ucyBvciBsb2dp Y2FsIG5hbWVzIHRoYXQiLAorIiAgcmVwcmVzZW50IHRoZW0sIGUuZy46IiwKKyIgIiwKKyIgICAg U0VUIENEIFBBVEggU1lTJExPR0lOOiwkRElTSzE6W09MR0FdLCRESVNLMltTQ1JBVENILklWQU5d LiIsCisjZWxzZQorIiAgKHVua25vd24gZm9yIHRoaXMgcGxhdGZvcm0pIiwKKyNlbmRpZiAvKiBW TVMgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBVTklYT1JPU0sgKi8KKyIgIiwKKyJT RVQgQ0QgTUVTU0FHRSB7IE9OLCBPRkYgfSIsCisiICBEZWZhdWx0IGlzIE9GRi4gIFdoZW4gT04s IHRoaXMgdGVsbHMgS2VybWl0IHRvIGxvb2sgZm9yIGEgZmlsZSB3aXRoIGEiLAorIiAgY2VydGFp biBuYW1lIGluIGFueSBkaXJlY3RvcnkgdGhhdCB5b3UgQ0QgdG8sIGFuZCBpZiBpdCBmaW5kcyBv bmUsIHRvIiwKKyIgIGRpc3BsYXkgaXQgb24geW91ciBzY3JlZW4gd2hlbiB5b3UgZ2l2ZSB0aGUg Q0QgY29tbWFuZC4gIFRoZSBmaWxlbmFtZSwiLAorIiAgb3IgbGlzdCBvZiBuYW1lcywgaXMgZ2l2 ZW4gaW4gdGhlIFNFVCBDRCBNRVNTQUdFIEZJTEUgY29tbWFuZC4iLAorIiAiLAorIlNFVCBDRCBN RVNTQUdFIEZJTEUgbmFtZSIsCisiICBvcjoiLAorIlNFVCBDRCBNRVNTQUdFIEZJTEUge3tuYW1l MX17bmFtZTJ9Li4ue25hbWU4fX0iLAorIiAgU3BlY2lmeSB1cCB0byA4IGZpbGVuYW1lcyB0byBs b29rIGZvciB3aGVuIHdoZW4gQ0RpbmcgdG8gYSBuZXcgZGlyZWN0b3J5IiwKKyIgIGFuZCBDRCBN RVNTQUdFIGlzIE9OLiAgVGhlIGZpcnN0IG9uZSBmb3VuZCwgaWYgYW55LCBpbiB0aGUgbmV3IGRp cmVjdG9yeSIsCisjaWZuZGVmIERGQ0RNU0cKKyIgIGlzIGRpc3BsYXllZC4iLAorI2Vsc2UKKyIg IGlzIGRpc3BsYXllZC4gIFRoZSBkZWZhdWx0IGxpc3QgaXM6IiwKKyIgIiwKKyNpZmRlZiBVTklY T1JPU0sKKyIgICB7ey4vLnJlYWRtZX17UkVBRE1FLlRYVH17UkVBRC5NRX19IiwKKyNlbHNlCisi ICAge3tSRUFETUUuVFhUfXtSRUFELk1FfX0iLAorI2VuZGlmIC8qIFVOSVhPUk9TSyAqLworIiAi LAorI2VuZGlmIC8qIERGQ0RNU0cgKi8KKyNpZm5kZWYgTk9TRVJWRVIKKyJTeW5vbnltOiBTRVQg U0VSVkVSIENELU1FU1NBR0UgRklMRS4iLAorI2VuZGlmIC8qIE5PU0VSVkVSICovCisiICIsCisi VHlwZSBTSE9XIENEIHRvIHZpZXcgY3VycmVudCBDRCBzZXR0aW5ncy4gIEFsc28gc2VlIEhFTFAg U0VUIFNFUlZFUi4iLAorIiIKK307CisKKyNpZm5kZWYgTk9JS1NECitzdGF0aWMgY2hhciAqIGhz ZXRpa3NbXSA9IHsKKyNpZmRlZiBPUzIKKyJTRVQgSUtTIEFOT05ZTU9VUyBBQ0NPVU5UIDx1c2Vy bmFtZT4iLAorIiAgT24gV2luZG93cyBOVC8yMDAwIHRoaXMgaXMgdGhlIGFjY291bnQgdGhhdCB3 aWxsIGJlIHVzZWQgdG8gYWxsb3ciLAorIiAgYW5vbnltb3VzIGFjY2VzcyB0byB0aGUgc3lzdGVt LiAgVGhpcyBhY2NvdW50IE1VU1QgaGF2ZSBubyBwYXNzd29yZCIsCisiICBhbmQgaXRzIHByaXZp bGVnZXMgc2hvdWxkIGJlIHJlc3RyaWN0ZWQgdG8gb25seSBhbGxvdyB0aG9zZSBvcGVyYXRpb25z IiwKKyIgIHdoaWNoIHNob3VsZCBiZSBwZXJtaXR0ZWQgdG8gdW5rbm93biB1c2Vycy4gIEluIHBy YWN0aWNlIHRoaXMgbWVhbnMiLAorIiAgTGlzdCBEaXJlY3RvcmllcyBhbmQgUmVhZC1FeGVjdXRl IHByaXZpbGVnZXMgb25seS4gIElmIGEgZGlyZWN0b3J5IiwKKyIgIGlzIGNvbmZpZ3VyZWQgZm9y IFdyaXRlIHByaXZpbGVnZXMgdGhlbiBSZWFkIHByaXZpbGVnZXMgc2hvdWxkIGJlIiwKKyIgIGRl bmllZCBmb3IgdGhhdCBkaXJlY3RvcnkuICBPdGhlcndpc2UsIHlvdXIgc3lzdGVtIHdpbGwgYmVj b21lIHVzZWQiLAorIiAgYnkgc29mdHdhcmUgcGlyYXRlcy4gIElmIHRoaXMgY29tbWFuZCBpcyBu b3Qgc3BlY2lmaWVkIGluIHRoZSBJS1NELktTQyIsCisiICBmaWxlIHRoZSB1c2VybmFtZSBcIkdV RVNUXCIgaXMgdXNlZCBieSBkZWZhdWx0LiAgVGhpcyBjb21tYW5kIGhhcyBubyIsCisiICBlZmZl Y3Qgb24gV2luZG93cyA5NS85OC4iLAorIiAiLAorI2VuZGlmIC8qIE9TMiAqLworIlNFVCBJS1Mg QU5PTllNT1VTIElOSVRGSUxFIGZpbGVuYW1lIiwKKyNpZmRlZiBPUzIKKyIgIFRoZSBpbml0aWFs aXphdGlvbiBmaWxlIHRvIGJlIGV4ZWN1dGVkIGZvciBhbm9ueW1vdXMgbG9naW5zLiAgQnkgZGVm YXVsdCIsCisiICBpdCBpcyBLOTUuSU5JIGluIHRoZSBob21lIGRpcmVjdG9yeSBhc3NvY2lhdGVk IHdpdGggdGhlIEFOTk9OWU1PVVMgYWNjb3VudC4iCissCisiICBBbnkgZmlsZW5hbWUgdGhhdCB5 b3Ugc3BlY2lmeSBoZXJlIG11c3QgYmUgcmVhZGFibGUgYnkgdGhlIEFOT05ZTU9VUyIsCisiICBh Y2NvdW50IGFuZCBpZiBhIFNFVCBJS1MgQU5PTllNT1VTIFJPT1QgY29tbWFuZCB3YXMgZ2l2ZW4s IGV4aXN0IHdpdGhpbiIsCisiICB0aGUgcmVzdHJpY3RlZCBkaXJlY3RvcnkgdHJlZS4gIFRoaXMg b3B0aW9uIGlzIGluZGVwZW5kZW50IG9mIHRoZSBTRVQgSUtTIiwKKyIgIElOSVRGSUxFIGNvbW1h bmQgd2hpY2ggYXBwbGllcyBvbmx5IHRvIHJlYWwgdXNlcnMuIiwKKyNlbHNlCisiICBUaGUgaW5p dGlhbGl6YXRpb24gZmlsZSB0byBiZSBleGVjdXRlZCBmb3IgYW5vbnltb3VzIGxvZ2lucy4gIEJ5 IGRlZmF1bHQiLAorIiAgaXQgaXMgLmtlcm1yYyBpbiB0aGUgYW5vbnltb3VzIHJvb3QgZGlyZWN0 b3J5LiAgVGhpcyBvcHRpb24gaXMgaW5kZXBlbmRlbnQiLAorIiAgb2YgdGhlIFNFVCBJS1MgSU5J VEZJTEUgY29tbWFuZCB3aGljaCBhcHBsaWVzIG9ubHkgdG8gcmVhbCB1c2Vycy4iLAorI2VuZGlm IC8qIE9TMiAqLworIiAiLAorIlNFVCBJS1MgQU5PTllNT1VTIExPR0lOIHsgT04sIE9GRiB9IiwK KyNpZmRlZiBPUzIKKyIgIFdoZXRoZXIgYW5vbnltb3VzIGxvZ2lucyBhcmUgYWxsb3dlZC4gIEJ5 IGRlZmF1bHQgdGhleSBhcmUgTk9UIGFsbG93ZWQsIiwKKyIgIHNvIHRoaXMgb3B0aW9uIG5lZWQg YmUgaW5jbHVkZWQgb25seSB0byBhbGxvdyB0aGVtIChvciBmb3IgY2xhcml0eSwgdG8iLAorIiAg ZW1waGFzaXplIHRoYXQgdGhleSBhcmUgbm90IGFsbG93ZWQpLiAgQW5vbnltb3VzIGxvZ2luIG9j Y3VycyB3aGVuIHRoZSIsCisiICB1c2VybmFtZSBcImFub255bW91c1wiIGlzIHNwZWNpZmllZCB3 aXRoIGFueSBwYXNzd29yZCAoYXMgd2l0aCBmdHBkKS4iLAorIiAgSW4gb3JkZXIgZm9yIGFub255 bW91cyBsb2dpbnMgdG8gc3VjY2VlZCBvbiBXaW5kb3dzIE5ULzIwMDAsIHRoZSIsCisiICBBTk9O WU1PVVMgYWNjb3VudCBtdXN0IGJlIGVuYWJsZWQuIiwKKyIgIiwKKyIgIE9uIFdpbmRvd3MgTlQg YW5kIDIwMDAsIGFub255bW91cyB1c2VycyBoYXZlIHRoZSBzYW1lIGFjY2VzcyByaWdodHMgYXMi LAorIiAgdGhlIEFOT05ZTU9VUyBhY2NvdW50LiAgSW4gV2luZG93cyA5NS85OCwgYW5vbnltb3Vz IHVzZXJzLCBqdXN0IGxpa2UgYW55IiwKKyIgIG90aGVyIHVzZXJzLCBoYXZlIGZ1bGwgYWNjZXNz IHJpZ2h0cyB0byB5b3VyIGVudGlyZSBQQywgc2luY2UgV2luZG93cyA5NSIsCisiICBhbmQgOTgg aW5jbHVkZSBubyBzZWN1cml0eSBmZWF0dXJlcy4gIEZvciB0aGlzIHJlYXNvbiwgaWYgeW91IGFy ZSBhbGxvd2luZyIsCisiICBhbm9ueW1vdXMgbG9naW5zLCBiZSBzdXJlIHRvIGFsc28gU0VUIGFu IElLUyBBTk9OWU1PVVMgUk9PVCBkaXJlY3RvcnkgdG8iLAorIiAgcmVzdHJpY3QgYW5vbnltb3Vz IHVzZXJzJyBmaWxlIGFjY2Vzcy4iLAorIiAiLAorIiAgQW5vbnltb3VzIHVzZXIgcGVybWlzc2lv bnMgbWF5IGJlIHJlc3RyaWN0ZWQgdmlhIHRoZSBzcGVjaWZpY2F0aW9uIG9mICIsCisiICBESVNB QkxFIGNvbW1hbmRzIGluIHRoZSBBTk9OWU1PVVMgaW5pdGZpbGUuICBBbm9ueW1vdXMgdXNlcnMg YXJlIG5vdCAiLAorIiAgcGVybWl0dGVkIHRvIGV4ZWN1dGUgYW4gRU5BQkxFIGNvbW1hbmQuICBB bm9ueW1vdXMgdXNlcnMgYXJlIGFsc28gcHJldmVudGVkIgorLAorIiAgZnJvbSBTSE9XaW5nIHNl bnNpdGl2ZSBkYXRhIGFib3V0IHRoZSBvcGVyYXRpbmcgc3lzdGVtIG9yIHRoZSBJS1MiLAorIiAg Y29uZmlndXJhdGlvbi4iLAorI2Vsc2UKKyIgIFdoZXRoZXIgYW5vbnltb3VzIGxvZ2lucyBhcmUg YWxsb3dlZC4gQnkgZGVmYXVsdCB0aGV5IGFyZSBhbGxvd2VkLCBzbyB0aGlzIiwKKyIgIG9wdGlv biBuZWVkIGJlIGluY2x1ZGVkIG9ubHkgdG8gZGlzYWxsb3cgdGhlbSAob3IgZm9yIGNsYXJpdHks IHRvIGVtcGhhc2l6ZSIKKywKKyIgIHRoZXkgYXJlIGFsbG93ZWQpLiBBbm9ueW1vdXMgbG9naW4g b2NjdXJzIHdoZW4gdGhlIHVzZXJuYW1lIFwiYW5vbnltb3VzXCIiLAorIiAgb3IgXCJmdHBcIiBp cyBnaXZlbiwgd2l0aCBhbnkgcGFzc3dvcmQgKGFzIHdpdGggZnRwZCkuIiwKKyNlbmRpZiAvKiBP UzIgKi8KKyIgIiwKKyJTRVQgSUtTIEFOT05ZTU9VUyBST09UIDxkaXJlY3Rvcnk+IiwKKyIgIFNw ZWNpZmllcyBhIGRpcmVjdG9yeSB0cmVlIHRvIHdoaWNoIGFub255bW91cyB1c2VycyBhcmUgcmVz dHJpY3RlZCBhZnRlciIsCisiICBsb2dpbi4iLAorIiAiLAorIlNFVCBJS1MgQkFOTkVSRklMRSA8 ZmlsZW5hbWU+IiwKKyIgIFRoZSBuYW1lIG9mIGEgZmlsZSBjb250YWluaW5nIGEgbWVzc2FnZSB0 byBiZSBwcmludGVkIGFmdGVyIHRoZSB1c2VyIGxvZ3MiLAorIiAgaW4sIGluIHBsYWNlIG9mIHRo ZSBub3JtYWwgbWVzc2FnZSAoY29weXJpZ2h0IG5vdGljZSwgXCJUeXBlIEhFTFAgb3IgPyBmb3Ii LAorIiAgaGVscFwiLCBldGMpLiIsCisiICIsCisiU0VUIElLUyBDREZJTEUgPGZpbGVsaXN0PiIs CisiICBXaGVuIGNkbWVzc2FnZSBpcyBvbiwgdGhpcyBpcyB0aGUgbmFtZSBvZiB0aGUgXCJyZWFk IG1lXCIgZmlsZSB0byBiZSBzaG93bi4iCissCisiICBOb3JtYWxseSB5b3Ugd291bGQgc3BlY2lm eSBhIHJlbGF0aXZlIChub3QgYWJzb2x1dGUpIG5hbWUsIHNpbmNlIHRoZSBmaWxlIiwKKyIgIGlz IG9wZW5lZCB1c2luZyB0aGUgbGl0ZXJhbCBuYW1lIHlvdSBzcGVjaWZpZWQsIGFmdGVyIGNoYW5n aW5nIHRvIHRoZSBuZXciLAorIiAgZGlyZWN0b3J5LiAgRXhhbXBsZToiLAorIiAiLAorIiAgICBT RVQgSUtTIENERklMRSBSRUFELk1FIiwKKyIgIiwKKyIgIFlvdSBjYW4gYWxzbyBnaXZlIGEgbGlz dCBvZiB1cCB0byA4IGZpbGVuYW1lcyBieSAoYSkgZW5jbG9zaW5nIGVhY2giLAorIiAgZmlsZW5h bWUgaW4gYnJhY2VzLCBhbmQgKGIpIGVuY2xvc2luZyB0aGUgZW50aXJlIGxpc3QgaW4gYnJhY2Vz LiAgRXhhbXBsZToiLAorIiAiLAorIiAgICBTRVQgSUtTIENERklMRSB7e1JFQUQuTUV9e2FhcmVh ZG1lLnR4dH17UkVBRE1FfXtyZWFkLXRoaXMtZmlyc3R9fSIsCisiICIsCisiICBXaGVuIGEgbGlz dCBpcyBnaXZlbiwgaXQgaXMgc2VhcmNoZWQgZnJvbSBsZWZ0IHRvIHJpZ2h0IGFuZCB0aGUgZmly c3QiLAorIiAgZmlsZSBmb3VuZCBpcyBkaXNwbGF5ZWQuIiwKKyIgIiwKKyJTRVQgSUtTIENETUVT U0FHRSB7T04sIE9GRiwgMCwgMSwgMn0iLAorIiAgRm9yIHVzZSBpbiB0aGUgU2VydmVyLVNpZGUg U2VydmVyIGNvbmZpZ3VyYXRpb247IHdoZW5ldmVyIHRoZSBjbGllbnQiLAorIiAgdGVsbHMgdGhl IHNlcnZlciB0byBjaGFuZ2UgZGlyZWN0b3J5LCB0aGUgc2VydmVyIHNlbmRzIHRoZSBjb250ZW50 cyBvZiBhIiwKKyIgIFwicmVhZCBtZVwiIGZpbGUgdG8gdGhlIGNsaWVudCdzIHNjcmVlbi4gIFRo aXMgZmVhdHVyZSBpcyBPTiBieSBkZWZhdWx0LCIsCisiICBhbmQgb3BlcmF0ZXMgaW4gY2xpZW50 L3NlcnZlciBtb2RlIG9ubHkgd2hlbiBPTiBvciAxLiAgSWYgc2V0IHRvIDIgb3IiLAorIiAgaGln aGVyLCBpdCBhbHNvIG9wZXJhdGVzIHdoZW4gdGhlIENEIGNvbW1hbmQgaXMgZ2l2ZW4gYXQgdGhl IElLU0Q+IHByb21wdC4iLAorIiAgU3lub255bTogU0VUIElLUyBDRE1TRy4iLAorIiAiLAorIlNF VCBJS1MgREFUQUJBU0UgeyBPTiwgT0ZGIH0iLAorIiAgVGhpcyBjb21tYW5kIGRldGVybWluZXMg d2hldGhlciBlbnRyaWVzIGFyZSBpbnNlcnRlZCBpbnRvIHRoZSBTRVQgSUtTIiwKKyIgIERCRklM RSAoSUtTRCBhY3RpdmUgc2Vzc2lvbnMgZGF0YWJhc2UpLiIsCisiICIsCisiU0VUIElLUyBEQkZJ TEUgPGZpbGVuYW1lPiIsCisiICBTcGVjaWZpZXMgdGhlIGZpbGUgd2hpY2ggc2hvdWxkIGJlIHVz ZWQgZm9yIHN0b3JpbmcgcnVudGltZSBzdGF0dXMiLAorI2lmZGVmIE9TMgorIiAgaW5mb3JtYXRp b24gYWJvdXQgYWN0aXZlIGNvbm5lY3Rpb25zLiAgVGhlIGRlZmF1bHQgaXMgYSBmaWxlIGNhbGxl ZCIsCisiICBcImlrc2QuZGJcIiBpbiB0aGUgV0lORE9XUyBkaXJlY3RvcnkuIiwKKyNlbHNlCisj aWZkZWYgVU5JWAorIiAgaW5mb3JtYXRpb24gYWJvdXQgYWN0aXZlIGNvbm5lY3Rpb25zLiAgVGhl IGRlZmF1bHQgaXMgYSBmaWxlIGNhbGxlZCIsCisiICBcImlrc2QuZGJcIiBpbiB0aGUgL3Zhci9s b2cgZGlyZWN0b3J5LiIsCisjZWxzZQorIiAgaW5mb3JtYXRpb24gYWJvdXQgYWN0aXZlIGNvbm5l Y3Rpb25zLiIsCisjZW5kaWYgLyogVU5JWCAqLworI2VuZGlmIC8qIE9TMiAqLworIiAiLAorI2lm ZGVmIE9TMgorIlNFVCBJS1MgREVGQVVMVC1ET01BSU4gPGRvbWFpbi1uYW1lPiIsCisiICBBIHVz ZXJpZCBvbiBXaW5kb3dzIGlzIG9mIHRoZSBmb3JtIERPTUFJTlxcXFx1c2VyaWQuICBUaGlzIGNv bW1hbmQiLAorIiAgZGV0ZXJtaW5lcyB3aGljaCBkb21haW4gd2lsbCBiZSBzZWFyY2hlZCBmb3Ig dGhlIHVzZXJpZCBpZiBhIGRvbWFpbiIsCisiICBpcyBub3Qgc3BlY2lmaWVkIGJ5IHRoZSB1c2Vy LiAgT24gV2luZG93cyA5NS85OCB3aGVuIFVzZXItbGV2ZWwiLAorIiAgYWNjZXNzIGlzIGFjdGl2 YXRlZCBpbiB0aGUgTmV0d29yayBDb250cm9sIFBhbmVsLCB0aGUgZGVmYXVsdCAiLAorIiAgZG9t YWluIHdpbGwgYmUgYXV0b21hdGljYWxseSBzZXQuICBJZiB0aGUgZGVmYXVsdCBkb21haW4gaXMg bm90IiwKKyIgIHNwZWNpZmllZCwgYWNjb3VudHMgb24gdGhlIGxvY2FsIG1hY2hpbmUgd2lsbCB0 YWtlIHByZWNlZGVuY2Ugb3ZlciIsCisiICBhY2NvdW50cyBpbiBEb21haW5zIHRvIHdoaWNoIHRo ZSBsb2NhbCBtYWNoaW5lIGJlbG9uZ3MuIiwKKyNlbmRpZiAvKiBPUzIgKi8KKyIgIiwKKyJTRVQg SUtTIEhFTFBGSUxFIDxmaWxlbmFtZT4iLAorIiAgU3BlY2lmaWVzIHRoZSBuYW1lIG9mIGEgZmls ZSB0byBiZSBkaXNwbGF5ZWQgaWYgdGhlIHVzZXIgdHlwZXMgSEVMUCIsCisiICAobm90IGZvbGxv d2VkIGJ5IGEgc3BlY2lmaWMgY29tbWFuZCBvciB0b3BpYyksIGluIHBsYWNlIG9mIHRoZSBidWls dC1pbiIsCisiICB0b3AtbGV2ZWwgaGVscCB0ZXh0LiAgVGhlIGZpbGUgbmVlZCBub3QgZml0IG9u IG9uZSBzY3JlZW47IG1vcmUtcHJvbXB0aW5nIiwKKyIgIGlzIHVzZWQgaWYgdGhlIGZpbGUgaXMg bW9yZSB0aGFuIG9uZSBzY3JlZW4gbG9uZyBpZiBDT01NQU5EIE1PUkUtUFJPTVBUSU5HIiwKKyIg IGlzIE9OLCBhcyBpdCBpcyBieSBkZWZhdWx0LiIsCisiICIsCisiU0VUIElLUyBJTklURklMRSA8 ZmlsZW5hbWU+IiwKKyIgIEV4ZWN1dGUgPGZpbGVuYW1lPiByYXRoZXIgdGhhbiB0aGUgbm9ybWFs IGluaXRpYWxpemF0aW9uIGZpbGUgZm9yIHJlYWwiLAorIiAgdXNlcnM7IHRoaXMgb3B0aW9uIGRv ZXMgbm90IGFwcGx5IHRvIGFub255bW91cyB1c2Vycy4iLAorIiAiLAorIlNFVCBJS1MgTk8tSU5J VEZJTEUgeyBPTiwgT0ZGIH0iLAorIiAgRG8gbm90IGV4ZWN1dGUgYW4gaW5pdGlhbGl6YXRpb24g ZmlsZSwgZXZlbiBpZiBhIHJlYWwgdXNlciBpcyBsb2dnaW5nIGluLiIsCisiICIsCisiU0VUIElL UyBTRVJWRVItT05MWSB7IE9OLCBPRkYgfSIsCisiICBJZiB0aGlzIG9wdGlvbiBpcyBpbmNsdWRl ZCBvbiB0aGUgSUtTRCBjb21tYW5kIGxpbmUsIHRoZSBDbGllbnQgU2lkZSBTZXJ2ZXIiCissCisi ICBjb25maWd1cmF0aW9uIGlzIGRpc2FibGVkLCBhbmQgdGhlIHVzZXIgd2lsbCBub3QgZ2V0IGEg VXNlcm5hbWU6IG9yIiwKKyIgIFBhc3N3b3JkOiBwcm9tcHQsIGFuZCB3aWxsIG5vdCBiZSBhYmxl IHRvIGFjY2VzcyB0aGUgSUtTRCBjb21tYW5kIHByb21wdC4iLAorIiAgQSBGSU5JU0ggY29tbWFu ZCBzZW50IHRvIHRoZSBJS1NEIHdpbGwgbG9nIGl0IG91dCBhbmQgY2xvc2UgdGhlIiwKKyIgIGNv bm5lY3Rpb24sIHJhdGhlciB0aGFuIHJldHVybmluZyBpdCB0byBpdHMgcHJvbXB0LiIsCisiICIs CisiU0VUIElLUyBUSU1FT1VUIDxudW1iZXI+IiwKKyIgIFRoaXMgc2V0cyBhIGxpbWl0IChpbiBz ZWNvbmRzKSBvbiB0aGUgYW1vdW50IG9mIHRpbWUgdGhlIGNsaWVudCBoYXMgdG8gbG9nIiwKKyIg IGluIG9uY2UgdGhlIGNvbm5lY3Rpb24gaXMgbWFkZS4gIElmIHN1Y2Nlc3NmdWwgbG9naW4gZG9l cyBub3Qgb2NjdXIgd2l0aGluIiwKKyIgIHRoZSBnaXZlbiBudW1iZXIgb2Ygc2Vjb25kcywgdGhl IGNvbm5lY3Rpb24gaXMgY2xvc2VkLiAgVGhlIGRlZmF1bHQgdGltZW91dCIKKywKKyIgIGlzIDMw MCBzZWNvbmRzICg1IG1pbnV0ZXMpLiAgQSB2YWx1ZSBvZiAwIG9yIGxlc3MgaW5kaWNhdGVzIHRo ZXJlIGlzIHRvIGJlIiwKKyIgIG5vIGxpbWl0LiIsCisiICIsCisiU0VUIElLUyBVU0VSRklMRSA8 ZmlsZW5hbWU+IiwKKyNpZmRlZiBVTklYCisiICBUaGlzIGZpbGUgY29udGFpbnMgYSBsaXN0IG9m IGxvY2FsIHVzZXJuYW1lcyB0aGF0IGFyZSB0byBiZSBkZW5pZWQgYWNjZXNzIiwKKyIgIHRvIElu dGVybmV0IEtlcm1pdCBTZXJ2aWNlLiAgVGhlIGRlZmF1bHQgaXMgL2V0Yy9mdHB1c2Vycy4gIFRo aXMgY2FuIGJlIHRoZSIKKywKKyIgIHNhbWUgZmlsZSB0aGF0IGlzIHVzZWQgYnkgd3VmdHBkLCBh bmQgdGhlIHN5bnRheCBpcyB0aGUgc2FtZTogb25lIHVzZXJuYW1lIiwKKyIgIHBlciBsaW5lOyBs aW5lcyBzdGFydGluZyB3aXRoIFwiI1wiIGFyZSBpZ25vcmVkLiAgVXNlIHRoaXMgb3B0aW9uIHRv IiwKKyIgIHNwZWNpZnkgdGhlIG5hbWUgb2YgYSBkaWZmZXJlbnQgZm9yYmlkZGVuLXVzZXIgZmls ZSwgb3IgdXNlIiwKKyIgIFwic2V0IGlrcyB1c2VyZmlsZSAvZGV2L251bGxcIiB0byBkaXNhYmxl IHRoaXMgZmVhdHVyZSBpbiBjYXNlIHRoZXJlIGlzIGEiLAorIiAgIC9ldGMvZnRwdXNlcnMgZmls ZSBidXQgeW91IGRvbid0IHdhbnQgdG8gdXNlIGl0LiIsCisjZWxzZQorIiAgVGhpcyBmaWxlIGNv bnRhaW5zIGEgbGlzdCBvZiBsb2NhbCB1c2VybmFtZXMgdGhhdCBhcmUgdG8gYmUgZGVuaWVkIGFj Y2VzcyIsCisiICB0byBJbnRlcm5ldCBLZXJtaXQgU2VydmljZS4gIFRoZSBzeW50YXggaXM6IG9u ZSB1c2VybmFtZSBwZXIgbGluZTsgbGluZXMiLAorIiAgc3RhcnRpbmcgd2l0aCBcIiNcIiBhcmUg aWdub3JlZC4iLAorI2VuZGlmIC8qIFVOSVggKi8KKyIgIiwKKyJTRVQgSUtTIFhGRVJMT0cgeyBP TiwgT0ZGIH0iLAorI2lmZGVmIFVOSVgKKyIgIFdoZXRoZXIgYSBmaWxlLXRyYW5zZmVyIGxvZyBz aG91bGQgYmUga2VwdC4gIE9mZiBieSBkZWZhdWx0LiAgSWYgXCJvblwiLCIsCisiICBidXQgbm8g U0VUIElLU0QgWEZFUkZJTEUgY29tbWFuZCBpcyBnaXZlbiwgL3Zhci9sb2cvaWtzZC5sb2cgaXMg dXNlZC4iLAorI2Vsc2UKKyIgIFdoZXRoZXIgYSBmaWxlLXRyYW5zZmVyIGxvZyBzaG91bGQgYmUg a2VwdC4gIE9mZiBieSBkZWZhdWx0LiIsCisjZW5kaWYgLyogVU5JWCAqLworIiAiLAorIlNFVCBJ S1MgWEZFUkZJTEUgPGZpbGVuYW1lPiIsCisiICBVc2UgdGhpcyBvcHRpb24gdG8gc3BlY2lmeSBh biBpa3NkIGxvZyBmaWxlIG5hbWUuICBJZiB5b3UgaW5jbHVkZSB0aGlzIiwKKyIgIG9wdGlvbiwg aXQgaW1wbGllcyBTRVQgSUtTIFhGRVJGSUxFIE9OLiIsCisiIgorfTsKKyNlbmRpZiAvKiBOT0lL U0QgKi8KKworLyogIEQgTyBIIFMgRSBUICAtLSAgR2l2ZSBoZWxwIGZvciBTRVQgY29tbWFuZCAg Ki8KKworaW50Citkb2hzZXQoeHgpIGludCB4eDsgeworICAgIGludCB4OworCisgICAgaWYgKHh4 ID09IC0zKSByZXR1cm4oaG1zZ2EoaG1oc2V0KSk7CisgICAgaWYgKHh4IDwgMCkgcmV0dXJuKHh4 KTsKKworI2lmZGVmIE5FV0ZUUAorICAgIGlmICh4eCA9PSBYWUZUUFgpCisgICAgICByZXR1cm4o ZG9zZXRmdHBobHAoKSk7CisgICAgaWYgKHh4ID09IFhZR1BSKQorICAgICAgcmV0dXJuKGhtc2dh KGhteHlncHIpKTsKKyNlbmRpZiAvKiBORVdGVFAgKi8KKworICAgIGlmICgoeCA9IGNtY2ZtKCkp IDwgMCkgcmV0dXJuKHgpOworICAgIHN3aXRjaCAoeHgpIHsKKyNpZm5kZWYgTk9JS1NECisgICAg ICBjYXNlIFhZSUtTOgorICAgICAgICByZXR1cm4oaG1zZ2EoaHNldGlrcykpOworI2VuZGlmIC8q IE5PSUtTRCAqLworCitjYXNlIFhZX1JFTjoKKyAgcmV0dXJuKGhtc2coIlNFVCBSRU5BTUUgTElT VCB7IE9OLCBPRkYgfVxuXAorICBUZWxscyB3aGV0aGVyIHRoZSBSRU5BTUUgY29tbWFuZCBzaG91 bGQgbGlzdCBpdHMgcmVzdWx0cyBieSBkZWZhdWx0LlxuXG5cCitTRVQgUkVOQU1FIENPTExJU0lP TiB7IEZBSUwsIFBST0NFRUQsIE9WRVJXUklURSB9XG5cCisgIEVzdGFibGlzaGVzIHRoZSBkZWZh dWx0IGFjdGlvbiB3aGVuIHJlbmFtaW5nIGEgZmlsZSB3b3VsZCBkZXN0cm95IGFuXG5cCisgIGV4 aXN0aW5nIGZpbGUuICBTZWUgSEVMUCBSRU5BTUUuIikpOworCitjYXNlIFhZQVRUUjoKKyAgICBy ZXR1cm4oaG1zZ2EoaHNldGF0KSk7CisKK2Nhc2UgWFlCQUNLOgorICAgIHJldHVybihobXNnYSho c2V0YmtnKSk7CisKK2Nhc2UgWFlCRUxMOgorICAgIHJldHVybihobXNnYShobXh5YmVsKSk7CisK KyNpZmRlZiBPUzIKK2Nhc2UgWFlQUlRZOgorICAgIHJldHVybihobXNnKCJTRVQgUFJJT1JJVFkg eyBSRUdVTEFSLCBGT1JFR1JPVU5ELVNFUlZFUiwgVElNRS1DUklUSUNBTCB9XG5cCisgIFNwZWNp ZmllcyBhdCB3aGljaCBwcmlvcml0eSBsZXZlbCB0aGUgY29tbXVuaWNhdGlvbiBhbmQgc2NyZWVu IHVwZGF0ZVxuXAorICB0aHJlYWRzIHNob3VsZCBvcGVyYXRlLiAgVGhlIGRlZmF1bHQgdmFsdWUg aXMgRk9SRUdST1VORC1TRVJWRVIuIikpOworCitjYXNlIFhZTVNLOgorICAgIHJldHVybihobXNn YShobXh5bXNrKSk7CisjZW5kaWYgLyogT1MyICovCisKKyNpZmRlZiBEWU5BTUlDCitjYXNlIFhZ QlVGOgorICAgIHJldHVybihobXNnYShoc2V0YnVmKSk7CisjZW5kaWYgLyogRFlOQU1JQyAqLwor CisjaWZuZGVmIE5PTE9DQUwKK2Nhc2UgWFlDQVJSOgorICAgIHJldHVybihobXNnYShoc2V0Y2Fy KSk7CisjZW5kaWYgLyogTk9MT0NBTCAqLworCisjaWZuZGVmIE5PU1BMCitjYXNlIFhZQ0FTRToK KyAgICByZXR1cm4oaG1zZygiU3ludGF4OiBTRVQgQ0FTRSB7IE9OLCBPRkYgfVxuXAorICBUZWxs cyB3aGV0aGVyIGFscGhhYmV0aWMgY2FzZSBpcyBzaWduaWZpY2FudCBpbiBzdHJpbmcgY29tcGFy aXNvbnNcblwKKyAgZG9uZSBieSBJTlBVVCwgSUYsIGFuZCBvdGhlciBjb21tYW5kcy4gIFRoaXMg c2V0dGluZyBpcyBsb2NhbCB0byB0aGVcblwKKyAgY3VycmVudCBtYWNybyBvciBjb21tYW5kIGZp bGUsIGFuZCBpbmhlcml0ZWQgYnkgc3Vib3JkaW5hdGVzLiIpKTsKKworI2VuZGlmIC8qIE5PU1BM ICovCisKK2Nhc2UgWFlDTUQ6CisgICAgcmV0dXJuKGhtc2dhKGhzZXRjbWQpKTsKKworY2FzZSBY WUlGRDoKKyAgICByZXR1cm4oaG1zZygiU3ludGF4OiBTRVQgSU5DT01QTEVURSB7IERJU0NBUkQs IEtFRVAgfVxuXAorICBXaGV0aGVyIHRvIGRpc2NhcmQgb3Iga2VlcCBpbmNvbXBsZXRlbHkgcmVj ZWl2ZWQgZmlsZXMsIGRlZmF1bHQgaXMgS0VFUC4iKSk7CisKKyNpZm5kZWYgTk9TUEwKK2Nhc2Ug WFlJTlBVOgorICAgIHJldHVybihobXNnYShoeHlpbnApKTsKKyNlbmRpZiAvKiBOT1NQTCAqLwor CitjYXNlIFhZQ0hLVDoKKyAgICByZXR1cm4oaG1zZ2EoaG14eWNoa3QpKTsKKworI2lmbmRlZiBO T1NQTAorY2FzZSBYWUNPVU46CisgICAgcmV0dXJuKGhtc2coIlN5bnRheDogIFNFVCBDT1VOVCBu dW1iZXJcblwKKyBFeGFtcGxlOiBTRVQgQ09VTlQgNVxuXAorICBTZXQgdXAgYSBsb29wIGNvdW50 ZXIsIGZvciB1c2Ugd2l0aCBJRiBDT1VOVC4gIExvY2FsIHRvIGN1cnJlbnQgbWFjcm9cblwKKyAg b3IgY29tbWFuZCBmaWxlLCBpbmhlcml0ZWQgYnkgc3Vib3JkaW5hdGUgbWFjcm9zIGFuZCBjb21t YW5kIGZpbGVzLiIpKTsKKyNlbmRpZiAvKiBOT1NQTCAqLworCitjYXNlIFhZREVCVToKKyAgICBy ZXR1cm4oaG1zZ2EoaG14eWRlYikpOworCitjYXNlIFhZREZMVDoKKyAgICByZXR1cm4oaG1zZygi U3ludGF4OiBTRVQgREVGQVVMVCBkaXJlY3RvcnlcblwKKyAgQ2hhbmdlIGRpcmVjdG9yeS4gIEVx dWl2YWxlbnQgdG8gQ0QgY29tbWFuZC4iKSk7CisKK2Nhc2UgWFlERUxBOgorICAgIHJldHVybiho bXNnKCJTeW50YXg6IFNFVCBERUxBWSBudW1iZXJcblwKKyAgTnVtYmVyIG9mIHNlY29uZHMgdG8g d2FpdCBiZWZvcmUgc2VuZGluZyBmaXJzdCBwYWNrZXQgYWZ0ZXIgU0VORCBjb21tYW5kLiIpKTsK KworI2lmbmRlZiBOT0RJQUwKK2Nhc2UgWFlESUFMOgorICAgIHJldHVybihobXNnYShobXh5ZGlh bCkpOworI2VuZGlmIC8qIE5PRElBTCAqLworCisjaWZkZWYgVU5JWAorY2FzZSBYWVNVU1A6Cisg ICAgcmV0dXJuKGhtc2coIlN5bnRheDogU0VUIFNVU1BFTkQgeyBPRkYsIE9OIH1cblwKKyAgRGlz YWJsZXMgU1VTUEVORCBjb21tYW5kLCBzdXNwZW5kIHNpZ25hbHMsIGFuZCA8ZXNjLWNoYXI+WiBk dXJpbmcgQ09OTkVDVC4iKQorICAgICAgICAgICApOworI2VuZGlmCisKKyNpZm5kZWYgTk9TQ1JJ UFQKK2Nhc2UgWFlTQ1JJOgorICAgIHJldHVybihobXNnKCJTeW50YXg6IFNFVCBTQ1JJUFQgRUNI TyB7IE9GRiwgT04gfVxuXAorICBEaXNhYmxlcy9FbmFibGVzIGVjaG9pbmcgb2YgU0NSSVBUIGNv bW1hbmQgb3BlcmF0aW9uLiIpKTsKKyNlbmRpZiAvKiBOT1NDUklQVCAqLworCitjYXNlIFhZVEFL RToKKyAgICByZXR1cm4oaG1zZ2EoaHh5dGFrKSk7CisKKyNpZm5kZWYgTk9MT0NBTAorY2FzZSBY WVRFUk06CisgICAgcmV0dXJuKGhtc2dhKGh4eXRlcm0pKTsKKworY2FzZSBYWURVUEw6CisgICAg cmV0dXJuKGhtc2coIlN5bnRheDogU0VUIERVUExFWCB7IEZVTEwsIEhBTEYgfVxuXAorICBEdXJp bmcgQ09OTkVDVDogRlVMTCBtZWFucyByZW1vdGUgaG9zdCBlY2hvZXMsIEhBTEYgbWVhbnMgS2Vy bWl0XG5cCisgIGRvZXMgaXRzIG93biBlY2hvaW5nLiIpKTsKKworY2FzZSBYWUxDTEU6CisgICAg cmV0dXJuKGhtc2coIlN5bnRheDogU0VUIExPQ0FMLUVDSE8geyBPRkYsIE9OIH1cblwKKyAgRHVy aW5nIENPTk5FQ1Q6IE9GRiBtZWFucyByZW1vdGUgaG9zdCBlY2hvZXMsIE9OIG1lYW5zIEtlcm1p dFxuXAorICBkb2VzIGl0cyBvd24gZWNob2luZy4gIFN5bm9ueW0gZm9yIFNFVCBEVVBMRVggeyBG VUxMLCBIQUxGIH0uIikpOworCitjYXNlIFhZRVNDOgorICAgIHJldHVybihobXNnYShoeHllc2Mp KTsgICAgICAgICAgICAgIC8qIFNFVCBFU0NBUEUgKi8KKyNlbmRpZiAvKiBOT0xPQ0FMICovCisK K2Nhc2UgWFlQUlRSOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTRVQgUFJJTlRFUiAq LworICAgIHJldHVybihobXNnYShoeHlwcnRyKSk7CisKKyNpZmRlZiBPUzIKKyNpZmRlZiBCUFJJ TlQKK2Nhc2UgWFlCRENQOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTRVQgQlBSSU5U RVIgKi8KKyAgICByZXR1cm4oaG1zZ2EoaHh5YnBydHIpKTsKKyNlbmRpZiAvKiBCUFJJTlQgKi8K KyNlbmRpZiAvKiBPUzIgKi8KKworY2FzZSBYWUVYSVQ6CisgICAgcmV0dXJuKGhtc2dhKGh4eWV4 aXQpKTsKKworY2FzZSBYWUZJTEU6CisgICAgcmV0dXJuKGhtc2dhKGhteHlmKSk7CisKK2Nhc2Ug WFlGTE9XOgorICAgIHJldHVybihobXNnYShobXh5ZmxvKSk7CisKK2Nhc2UgWFlIQU5EOgorICAg cmV0dXJuKGhtc2dhKGhteHloc2gpKTsKKworI2lmZGVmIE5FVENPTk4KKworY2FzZSBYWUhPU1Q6 CisgICAgcmV0dXJuKGhtc2dhKGh4eWhvc3QpKTsKKworY2FzZSBYWU5FVDoKKyAgICByZXR1cm4o aG1zZ2EoaHh5bmV0KSk7CisKKyNpZm5kZWYgTk9UQ1BPUFRTCisjaWZkZWYgU09MX1NPQ0tFVAor Y2FzZSBYWVRDUDoKKyAgICByZXR1cm4oaG1zZ2EoaHh5dGNwKSk7CisjZW5kaWYgLyogU09MX1NP Q0tFVCAqLworI2VuZGlmIC8qIE5PVENQT1BUUyAqLworCisjaWZkZWYgQU5ZWDI1CitjYXNlIFhZ WDI1OgorICAgIHJldHVybihobXNnYShoeHl4MjUpKTsKKworI2lmbmRlZiBJQk1YMjUKK2Nhc2Ug WFlQQUQ6CisgICAgcmV0dXJuKGhtc2coIlN5bnRheDogU0VUIFBBRCBuYW1lIHZhbHVlXG5cCitT ZXQgYSBQQUQgWC4zIHBhcmFtZXRlciB3aXRoIGEgZGVzaXJlZCB2YWx1ZS4iKSk7CisjZW5kaWYg LyogSUJNWDI1ICovCisjZW5kaWYgLyogQU5ZWDI1ICovCisjZW5kaWYgLyogTkVUQ09OTiAqLwor CisjaWZuZGVmIE5PU1BMCitjYXNlIFhZT1VUUDoKKyAgICByZXR1cm4oaG1zZ2EoaHh5b3V0KSk7 CisjZW5kaWYgLyogTk9TUEwgKi8KKworI2lmbmRlZiBOT1NFVEtFWQorY2FzZSBYWUtFWTogICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNFVCBLRVkgKi8KKyAgICByZXR1cm4oaG1zZ2Eo aG1oc2tleSkpOworI2VuZGlmIC8qIE5PU0VUS0VZICovCisKKyNpZm5kZWYgTk9DU0VUUworY2Fz ZSBYWUxBTkc6CisgICAgcmV0dXJuKGhtc2coIlN5bnRheDogU0VUIExBTkdVQUdFIG5hbWVcblwK KyAgU2VsZWN0cyBsYW5ndWFnZS1zcGVjaWZpYyB0cmFuc2xhdGlvbiBydWxlcyBmb3IgdGV4dC1t b2RlIGZpbGUgdHJhbnNmZXJzLlxuXAorICBVc2VkIHdpdGggU0VUIEZJTEUgQ0hBUkFDVEVSLVNF VCBhbmQgU0VUIFRSQU5TRkVSIENIQVJBQ1RFUi1TRVQgd2hlbiBvbmVcblwKKyAgb2YgdGhlc2Ug aXMgQVNDSUkuIikpOworI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKworY2FzZSBYWUxJTkU6CisgICAg cHJpbnRmKCJcblN5bnRheDogU0VUIExJTkUgKG9yIFNFVCBQT1JUKSBbIHN3aXRjaGVzIF0gWyBk ZXZpY2VuYW1lIF1cblwKKyAgU2VsZWN0cyBhIHNlcmlhbC1wb3J0IGRldmljZSB0byB1c2UgZm9y IG1ha2luZyBjb25uZWN0aW9ucy5cbiIpOworI2lmZGVmIE9TMgorI2lmZGVmIE5UCisgICAgcHJp bnRmKCJcbiIpOworICAgIHByaW50ZigKKyIgIFlvdSBtYXkgYWNjZXNzIGNvbW11bmljYXRpb24g cG9ydHMgYnkgdGhlIHRyYWRpdGlvbmFsIFwiRE9TXCIgcG9ydCBuYW1lXG4iKTsKKyAgICBwcmlu dGYoCisiICAoZS5nLiBTRVQgUE9SVCBDT00xKSBvciBieSB0aGUgTWljcm9zb2Z0IFRlbGVwaG9u eSBtb2RlbSBuYW1lIGZyb20gdGhlXG4iKTsKKyAgICBwcmludGYoCisiICBNb2RlbXMgZm9sZGVy IG9mIHRoZSBDb250cm9sIFBhbmVsIChlLmcuIFNFVCBQT1JUIFRBUEkpLiBJZiBvbmUgbWV0aG9k XG4iKTsKKyAgICBwcmludGYoIiAgZG9lc24ndCB3b3JrLCB0cnkgdGhlIG90aGVyLlxuXG4iKTsK KyNlbmRpZiAvKiBOVCAqLworI2Vsc2UgIC8qIE9TMiAqLworICAgIHByaW50ZigiICBUeXBpY2Fs IGRldmljZSBuYW1lIGZvciB0aGlzIHBsYXRmb3JtOiAlcy5cbiIsdHRndHBuKCkpOworICAgIHBy aW50ZigiICBUaGUgZGVmYXVsdCBkZXZpY2UgbmFtZSBpcyAlcyAoaS5lLiBub25lKS5cbiIsZGZ0 dHkpOworICAgIGlmICghZGZsb2MpIHsKKyAgICAgICAgcHJpbnRmKAorIiAgSWYgeW91IGRvIG5v dCBnaXZlIGEgU0VUIExJTkUgY29tbWFuZCBvciBpZiB5b3UgZ2l2ZSBhIFNFVCBMSU5FIGNvbW1h bmRcbiIpOworICAgICAgICBwcmludGYoCisiICB3aXRoIG5vIGRldmljZSBuYW1lLCBvciBpZiB5 b3Ugc3BlY2lmeSAlcyBhcyB0aGUgZGV2aWNlIG5hbWUsXG4iLGRmdHR5KTsKKyAgICAgICAgcHJp bnRmKAorIiAgS2VybWl0IHdpbGwgYmUgaW4gXCJyZW1vdGUgbW9kZVwiLCBzdWl0YWJsZSBmb3Ig dXNlIG9uIHRoZSBmYXIgZW5kIG9mIGFcbiIpOworICAgICAgICBwcmludGYoCisiICBjb25uZWN0 aW9uLCBlLmcuIGFzIHRoZSBmaWxlLXRyYW5zZmVyIHBhcnRuZXIgb2YgeW91ciBkZXNrdG9wIGNv bW11bmljYXRpb25cCitcbiIpOworICAgICAgICBwcmludGYoCisiICBzb2Z0d2FyZS4gIElmIHlv dSBTRVQgTElORSB0byBhIHNwZWNpZmljIGRldmljZSBvdGhlciB0aGFuICVzLFxuIiwgZGZ0dHkp OworICAgICAgICBwcmludGYoCisiICBLZXJtaXQgaXMgaW4gXCJsb2NhbCBtb2RlXCIsIHN1aXRh YmxlIGZvciBtYWtpbmcgYSBjb25uZWN0aW9uIHRvIGFub3RoZXJcbiIKKyAgICAgICAgICAgICAg KTsKKyAgICAgICAgcHJpbnRmKAorIiAgY29tcHV0ZXIuICBTRVQgTElORSBhbG9uZSByZXNldHMg S2VybWl0IHRvIHJlbW90ZSBtb2RlLlxuIik7CisgICAgfQorI2VuZGlmIC8qIE9TMiAqLworICAg ICAgICBwcmludGYoCisiICBUbyB1c2UgYSBtb2RlbSB0byBkaWFsIG91dCwgZmlyc3QgU0VUIE1P REVNIFRZUEUgKGUuZy4sIHRvIFVTUiksIHRoZW5cbiIpOworICAgIHByaW50ZigKKyNpZmRlZiBP UzIKKyIgIFNFVCBQT1JUIENPTXggKG9yIFNFVCBQT1JUIFRBUEkpLCBTRVQgU1BFRUQsIHRoZW4g Z2l2ZSBhIERJQUwgY29tbWFuZC5cbiIpOworI2Vsc2UKKyIgIFNFVCBMSU5FIHh4eCwgdGhlbiBT RVQgU1BFRUQsIHRoZW4gZ2l2ZSBhIERJQUwgY29tbWFuZC5cbiIpOworI2VuZGlmIC8qIE9TMiAq LworICAgIHByaW50ZigKKyNpZmRlZiBPUzIKKyIgIEZvciBkaXJlY3QgbnVsbC1tb2RlbSBjb25u ZWN0aW9ucyB1c2UgU0VUIE1PREVNIFRZUEUgTk9ORSwgU0VUIFBPUlQgQ09NeCxcbiIKKyNlbHNl CisiICBGb3IgZGlyZWN0IG51bGwtbW9kZW0gY29ubmVjdGlvbnMsIHVzZSBTRVQgTU9ERU0gVFlQ RSBOT05FLCBTRVQgTElORSB4eHgsXG4iCisjZW5kaWYgLyogT1MyICovCisgICAgKTsKKyAgICBw cmludGYoCisiICB0aGVuIFNFVCBGTE9XLCBTRVQgU1BFRUQsIGFuZCBDT05ORUNULlxuIik7Cisg ICAgcHJpbnRmKAorIlxuT3B0aW9uYWwgc3dpdGNoZXM6XG5cCisgIC9DT05ORUNUIC0gRW50ZXIg Q09OTkVDVCBtb2RlIGF1dG9tYXRpY2FsbHkgaWYgU0VUIExJTkUgc3VjY2VlZHMuXG4iKTsKKyAg ICBwcmludGYoCisiICAvU0VSVkVSICAtIEVudGVyIHNlcnZlciBtb2RlIGF1dG9tYXRpY2FsbHkg aWYgU0VUIExJTkUgc3VjY2VlZHMuXG4iKTsKKyNpZmRlZiBWTVMKKyAgICBwcmludGYoCisiICAv U0hBUkUgICAtIE9wZW4gdGhlIGRldmljZSBpbiBzaGFyZWQgbW9kZS5cbiIpOworICAgIHByaW50 ZigKKyIgIC9OT1NIQVJFIC0gT3BlbiB0aGUgZGV2aWNlIGluIGV4Y2x1c2l2ZSBtb2RlLlxuIik7 CisjZW5kaWYgLyogVk1TICovCisgICAgcHJpbnRmKCJcbiIpOworICAgIHByaW50ZigKKyJBbHNv IHNlZSBIRUxQIFNFVCBNT0RFTSwgSEVMUCBTRVQgRElBTCwgSEVMUCBTRVQgU1BFRUQsIEhFTFAg U0VUIEZMT1cuXG4iKTsKKyAgICByZXR1cm4oMCk7CisKKyNpZm5kZWYgTk9TUEwKK2Nhc2UgWFlN QUNSOgorICAgIHJldHVybihobXNnYShoeHltYWNyKSk7CisjZW5kaWYgLyogTk9TUEwgKi8KKwor I2lmbmRlZiBOT0RJQUwKK2Nhc2UgWFlNT0RNOgorICAgIHJldHVybihobXNnYShoeHltb2RtKSk7 CisjZW5kaWYgLyogTk9ESUFMICovCisKK2Nhc2UgWFlQQVJJOgorICAgIHJldHVybihobXNnYSho eHlwYXJpKSk7CisKK2Nhc2UgWFlQUk9NOgorICAgIHJldHVybihobXNnYShobXh5cHJtKSk7CisK K2Nhc2UgWFlRVUlFOgorICAgIHJldHVybihobXNnKCJTeW50YXg6IFNFVCBRVUlFVCB7T04sIE9G Rn1cblwKKyAgTm9ybWFsbHkgT0ZGLiAgT04gZGlzYWJsZXMgbW9zdCBpbmZvcm1hdGlvbiBtZXNz YWdlcyBkdXJpbmcgaW50ZXJhY3RpdmVcblwKKyAgb3BlcmF0aW9uLiIpKTsKKworI2lmZGVmIENL X1NQRUVECitjYXNlIFhZUUNUTDoKKyAgICByZXR1cm4oaG1zZ2EoaG14eXFjdGwpKTsKKyNlbmRp ZiAvKiBDS19TUEVFRCAqLworCitjYXNlIFhZUkVUUjoKKyAgICByZXR1cm4oaG1zZygiU3ludGF4 OiBTRVQgUkVUUlkgbnVtYmVyXG5cCisgIEluIEtlcm1pdCBwcm90b2NvbCBmaWxlIHRyYW5zZmVy czogSG93IG1hbnkgdGltZXMgdG8gcmV0cmFuc21pdCBhXG5cCisgIHBhcnRpY3VsYXIgcGFja2V0 IGJlZm9yZSBnaXZpbmcgdXA7IDAgPSBubyBsaW1pdC4iKSk7CisKKyNpZm5kZWYgTk9MT0NBTAor Y2FzZSBYWVNFU1M6CisjaWZkZWYgVU5JWAorICAgIHJldHVybihobXNnKAorIlN5bnRheDpcblwK KyBTRVQgU0VTU0lPTi1MT0cgeyBCSU5BUlksIERFQlVHLCBOVUxMLVBBRERFRCwgVEVYVCwgVElN RVNUQU1QRUQtVEVYVCB9XG5cCisgIElmIEJJTkFSWSwgcmVjb3JkIGFsbCBDT05ORUNUIGNoYXJh Y3RlcnMgaW4gc2Vzc2lvbiBsb2cuICBJZiBURVhULCBzdHJpcFxuXAorICBvdXQgQ1IsIE5VTCwg YW5kIFhPTi9YT0ZGIGNoYXJhY3RlcnMuICBERUJVRyBpcyB0aGUgc2FtZSBhcyBCSU5BUlkgYnV0 XG5cCisgIGFsc28gaW5jbHVkZXMgVGVsbmV0IG5lZ290aWF0aW9ucyBvbiBUQ1AvSVAgY29ubmVj dGlvbnMuIikpOworI2Vsc2UKKyNpZmRlZiBkYXRhZ2VuZXJhbAorICAgIHJldHVybihobXNnKAor IlN5bnRheDogU0VUIFNFU1NJT04tTE9HIHsgQklOQVJZLCBERUJVRywgVEVYVCwgVElNRVNUQU1Q RUQtVEVYVCB9XG5cCisgIElmIEJJTkFSWSwgcmVjb3JkIGFsbCBDT05ORUNUIGNoYXJhY3RlcnMg aW4gc2Vzc2lvbiBsb2cuICBJZiBURVhULCBzdHJpcFxuXAorICBvdXQgQ1IsIE5VTCwgYW5kIFhP Ti9YT0ZGIGNoYXJhY3RlcnMuICBERUJVRyBpcyB0aGUgc2FtZSBhcyBCSU5BUlkgYnV0XG5cCisg IGFsc28gaW5jbHVkZXMgVGVsbmV0IG5lZ290aWF0aW9ucyBvbiBUQ1AvSVAgY29ubmVjdGlvbnMu IikpOworI2Vsc2UKKyNpZmRlZiBTVFJBVFVTCisgICAgcmV0dXJuKGhtc2coCisiU3ludGF4OiBT RVQgU0VTU0lPTi1MT0cgeyBCSU5BUlksIERFQlVHLCBURVhULCBUSU1FU1RBTVBFRC1URVhUIH1c blwKKyAgSWYgQklOQVJZLCByZWNvcmQgYWxsIENPTk5FQ1QgY2hhcmFjdGVycyBpbiBzZXNzaW9u IGxvZy4gIElmIFRFWFQsIHN0cmlwXG5cCisgIG91dCBDUiwgTlVMLCBhbmQgWE9OL1hPRkYgY2hh cmFjdGVycy4gIERFQlVHIGlzIHRoZSBzYW1lIGFzIEJJTkFSWSBidXRcblwKKyAgYWxzbyBpbmNs dWRlcyBUZWxuZXQgbmVnb3RpYXRpb25zIG9uIFRDUC9JUCBjb25uZWN0aW9ucy4iKSk7CisjZWxz ZQorI2lmZGVmIEFNSUdBCisgICAgcmV0dXJuKGhtc2coCisiU3ludGF4OiBTRVQgU0VTU0lPTi1M T0cgeyBCSU5BUlksIERFQlVHLCBURVhULCBUSU1FU1RBTVBFRC1URVhUIH1cblwKKyAgSWYgQklO QVJZLCByZWNvcmQgYWxsIENPTk5FQ1QgY2hhcmFjdGVycyBpbiBzZXNzaW9uIGxvZy4gIElmIFRF WFQsIHN0cmlwXG5cCisgIG91dCBDUiwgTlVMLCBhbmQgWE9OL1hPRkYgY2hhcmFjdGVycy4gIERF QlVHIGlzIHRoZSBzYW1lIGFzIEJJTkFSWSBidXRcblwKKyAgYWxzbyBpbmNsdWRlcyBUZWxuZXQg bmVnb3RpYXRpb25zIG9uIFRDUC9JUCBjb25uZWN0aW9ucy4iKSk7CisjZWxzZQorI2lmZGVmIEdF TURPUworICAgIHJldHVybihobXNnKAorIlN5bnRheDogU0VUIFNFU1NJT04tTE9HIHsgQklOQVJZ LCBERUJVRywgVEVYVCwgVElNRVNUQU1QRUQtVEVYVCB9XG5cCisgIElmIEJJTkFSWSwgcmVjb3Jk IGFsbCBDT05ORUNUIGNoYXJhY3RlcnMgaW4gc2Vzc2lvbiBsb2cuICBJZiBURVhULCBzdHJpcFxu XAorICBvdXQgQ1IsIE5VTCwgYW5kIFhPTi9YT0ZGIGNoYXJhY3RlcnMuICBERUJVRyBpcyB0aGUg c2FtZSBhcyBCSU5BUlkgYnV0XG5cCisgIGFsc28gaW5jbHVkZXMgVGVsbmV0IG5lZ290aWF0aW9u cyBvbiBUQ1AvSVAgY29ubmVjdGlvbnMuIikpOworI2Vsc2UKKyNpZmRlZiBPUzIKKyAgICByZXR1 cm4oaG1zZygKKyJTeW50YXg6IFNFVCBTRVNTSU9OLUxPRyB7IEJJTkFSWSwgREVCVUcsIFRFWFQs IFRJTUVTVEFNUEVELVRFWFQgfVxuXAorICBJZiBCSU5BUlksIHJlY29yZCBhbGwgQ09OTkVDVCBj aGFyYWN0ZXJzIGluIHNlc3Npb24gbG9nLiAgSWYgVEVYVCwgc3RyaXBcblwKKyAgb3V0IE5VTCBh bmQgWE9OL1hPRkYgY2hhcmFjdGVycy4gIERFQlVHIGlzIHRoZSBzYW1lIGFzIEJJTkFSWSBidXRc blwKKyAgYWxzbyBpbmNsdWRlcyBUZWxuZXQgbmVnb3RpYXRpb25zIG9uIFRDUC9JUCBjb25uZWN0 aW9ucy4iKSk7CisjZWxzZQorI2lmZGVmIFZNUworICAgIHJldHVybihobXNnKAorIlN5bnRheDog U0VUIFNFU1NJT04tTE9HIHsgQklOQVJZLCBERUJVRywgVEVYVCwgVElNRVNUQU1QRUQtVEVYVCB9 XG5cCisgIElmIEJJTkFSWSwgcmVjb3JkIGFsbCBDT05ORUNUIGNoYXJhY3RlcnMgaW4gc2Vzc2lv biBsb2cuICBJZiBURVhULCBzdHJpcFxuXAorICBvdXQgQ1IsIE5VTCwgYW5kIFhPTi9YT0ZGIGNo YXJhY3RlcnMuICBERUJVRyBpcyB0aGUgc2FtZSBhcyBCSU5BUlkgYnV0XG5cCisgIGFsc28gaW5j bHVkZXMgVGVsbmV0IG5lZ290aWF0aW9ucyBvbiBUQ1AvSVAgY29ubmVjdGlvbnMuIikpOworI2Vs c2UKKyNpZmRlZiBPU0sKKyAgICByZXR1cm4oaG1zZygKKyJTeW50YXg6IFNFVCBTRVNTSU9OLUxP RyB7IEJJTkFSWSwgREVCVUcsIFRFWFQsIFRJTUVTVEFNUEVELVRFWFQgfVxuXAorICBJZiBCSU5B UlksIHJlY29yZCBhbGwgQ09OTkVDVCBjaGFyYWN0ZXJzIGluIHNlc3Npb24gbG9nLiAgSWYgVEVY VCwgc3RyaXBcblwKKyAgb3V0IExGLCBOVUwgYW5kIFhPTi9YT0ZGIGNoYXJhY3RlcnMuIikpOwor I2Vsc2UKKyNpZmRlZiBNQUMKKyAgICByZXR1cm4oaG1zZygKKyJTeW50YXg6IFNFVCBTRVNTSU9O LUxPRyB7IEJJTkFSWSwgREVCVUcsIFRFWFQsIFRJTUVTVEFNUEVELVRFWFQgfVxuXAorICBJZiBC SU5BUlksIHJlY29yZCBhbGwgQ09OTkVDVCBjaGFyYWN0ZXJzIGluIHNlc3Npb24gbG9nLiAgSWYg VEVYVCwgc3RyaXBcblwKKyAgb3V0IExGLCBOVUwgYW5kIFhPTi9YT0ZGIGNoYXJhY3RlcnMuIikp OworI2VuZGlmIC8qIE1BQyAqLworI2VuZGlmIC8qIE9TSyAqLworI2VuZGlmIC8qIE9TMiAqLwor I2VuZGlmIC8qIFZNUyAqLworI2VuZGlmIC8qIEdFTURPUyAqLworI2VuZGlmIC8qIEFNSUdBICov CisjZW5kaWYgLyogU1RSQVRVUyAqLworI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCisjZW5kaWYg LyogT1MyT1JVTklYICovCisKK2Nhc2UgWFlTUEVFOgorI2lmZGVmIE9TMgorCisgICAgcmV0dXJu KGhtc2coIlN5bnRheDogU0VUIFNQRUVEIG51bWJlclxuXAorICBTcGVlZCBmb3Igc2VyaWFsLXBv cnQgY29tbXVuaWNhdGlvbiBkZXZpY2Ugc3BlY2lmaWVkIGluIG1vc3QgcmVjZW50XG5cCisgIFNF VCBQT1JUIGNvbW1hbmQsIGluIGJpdHMgcGVyIHNlY29uZC4gIFR5cGUgU0VUIFNQRUVEID8gZm9y IGEgbGlzdCBvZlxuXAorICBwb3NzaWJsZSBzcGVlZHMuIikpOworI2Vsc2UKKyAgICByZXR1cm4o aG1zZygiU3ludGF4OiBTRVQgU1BFRUQgbnVtYmVyXG5cCisgIFNwZWVkIGZvciBzZXJpYWwtcG9y dCBjb21tdW5pY2F0aW9uIGRldmljZSBzcGVjaWZpZWQgaW4gbW9zdCByZWNlbnRcblwKKyAgU0VU IExJTkUgY29tbWFuZCwgaW4gYml0cyBwZXIgc2Vjb25kLiAgVHlwZSBTRVQgU1BFRUQgPyBmb3Ig YSBsaXN0IG9mXG5cCisgIHBvc3NpYmxlIHNwZWVkcy4gIEhhcyBubyBlZmZlY3Qgb24gam9iJ3Mg Y29udHJvbGxpbmcgdGVybWluYWwuIikpOworI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIE5P TE9DQUwgKi8KKworI2lmbmRlZiBOT1hGRVIKK2Nhc2UgWFlSRUNWOgorICAgIHJldHVybihobXNn YShoeHlyY3YpKTsKK2Nhc2UgWFlTRU5EOgorICAgIHJldHVybihobXNnYShoeHlzbmQpKTsKK2Nh c2UgWFlSRVBUOgorICAgIHJldHVybihobXNnYShoeHlycHQpKTsKKyNlbmRpZiAvKiBOT1hGRVIg Ki8KKworI2lmbmRlZiBOT1NFUlZFUgorY2FzZSBYWVNFUlY6CisgICAgcmV0dXJuKGhtc2dhKGhz ZXRzcnYpKTsKKyNlbmRpZiAvKiBOT1NFUlZFUiAqLworCisjaWZkZWYgVE5DT0RFCitjYXNlIFhZ VEVMOgorICAgIHJldHVybihobXNnYShoeHl0ZWwpKTsKKworY2FzZSBYWVRFTE9QOgorICAgIHJl dHVybihobXNnYShoeHl0b3B0KSk7CisjZW5kaWYgLyogVE5DT0RFICovCisKKyNpZm5kZWYgTk9Y TUlUCitjYXNlIFhZWE1JVDoKKyAgICByZXR1cm4oaG1zZ2EoaHNldHhtaXQpKTsKKyNlbmRpZiAv KiBOT1hNSVQgKi8KKworI2lmbmRlZiBOT0NTRVRTCitjYXNlIFhZVU5DUzoKKyAgICByZXR1cm4o aG1zZygiU3ludGF4OiBTRVQgVU5LTk9XTi1DSEFSLVNFVCBhY3Rpb25cblwKKyAgRElTQ0FSRCAo ZGVmYXVsdCkgbWVhbnMgcmVqZWN0IGFueSBhcnJpdmluZyBmaWxlcyBlbmNvZGVkIGluIHVua25v d25cblwKKyAgY2hhcmFjdGVyIHNldHMuICBLRUVQIG1lYW5zIHRvIGFjY2VwdCB0aGVtIGFueXdh eS4iKSk7CisjZW5kaWYgLyogTk9DU0VUUyAqLworCisjaWZkZWYgVU5JWAorY2FzZSBYWVdJTEQ6 CisgICAgcmV0dXJuKGhtc2dhKGh4eXdpbGQpKTsKKyNlbmRpZiAvKiBVTklYICovCisKKyNpZm5k ZWYgTk9YRkVSCitjYXNlIFhZV0lORDoKKyAgICByZXR1cm4oaG1zZ2EoaHh5d2luZCkpOworY2Fz ZSBYWVhGRVI6CisgICAgcmV0dXJuKGhtc2dhKGh4eXhmZXIpKTsKKyNlbmRpZiAvKiBOT1hGRVIg Ki8KKworI2lmbmRlZiBOT0xPQ0FMCisjaWZkZWYgT1MyTU9VU0UKK2Nhc2UgWFlNT1VTRToKKyAg ICByZXR1cm4oaG1zZ2EoaHh5bW91c2UpKTsKKyNlbmRpZiAvKiBPUzJNT1VTRSAqLworI2VuZGlm IC8qIE5PTE9DQUwgKi8KKworY2FzZSBYWUFMUk06CisgICAgcmV0dXJuKGhtc2coIlN5bnRheDog U0VUIEFMQVJNIFsgeyBzZWNvbmRzLCBoaDptbTpzcyB9IF1cblwKKyAgTnVtYmVyIG9mIHNlY29u ZHMgZnJvbSBub3csIG9yIHRpbWUgb2YgZGF5LCBhZnRlciB3aGljaCBJRiBBTEFSTVxuXAorICB3 aWxsIHN1Y2NlZWQuICAwLCBvciBubyB0aW1lIGF0IGFsbCwgbWVhbnMgbm8gYWxhcm0uIikpOwor CitjYXNlIFhZUFJPVE86CisgICAgcmV0dXJuKGhtc2dhKGh4eXh5eikpOworCisjaWZkZWYgQ0tf U1BFRUQKK2Nhc2UgWFlQUkVGSVg6CisgICAgcmV0dXJuKGhtc2coIlN5bnRheDogU0VUIFBSRUZJ WElORyB7IEFMTCwgQ0FVVElPVVMsIE1JTklNQUwgfVxuXAorICBcCitTZWxlY3RzIHRoZSBkZWdy ZWUgb2YgY29udHJvbC1jaGFyYWN0ZXIgcHJlZml4aW5nLiAgQWxzbyBzZWUgSEVMUCBTRVQgQ09O VFJPTC4iCispKTsKKyNlbmRpZiAvKiBDS19TUEVFRCAqLworCisjaWZkZWYgT1MyCitjYXNlIFhZ TE9HSU46CisgICAgcmV0dXJuKGhtc2coIlN5bnRheDogU0VUIExPR0lOIHsgVVNFUklELCBQQVNT V09SRCwgUFJPTVBUIH0gPHRleHQ+XG5cCisgIFByb3ZpZGVzIGFjY2VzcyBpbmZvcm1hdGlvbiBm b3IgdXNlIGJ5IGxvZ2luIHNjcmlwdHMuIikpOworI2VuZGlmIC8qIE9TMiAqLworCisjaWZuZGVm IE5PU1BMCitjYXNlIFhZVE1QRElSOgorICAgIHJldHVybihobXNnKCJTeW50YXg6IFNFVCBURU1Q LURJUkVDVE9SWSBbIDxkaXJlY3RvcnktbmFtZT4gXVxuXAorICBPdmVycmlkZXMgYXV0b21hdGlj IGFzc2lnbm1lbnQgb2YgXFx2KHRtcGRpcikgdmFyaWFibGUuIikpOworI2VuZGlmIC8qIE5PU1BM ICovCisKKyNpZmRlZiBPUzIKK2Nhc2UgWFlUSVRMRToKKyAgICByZXR1cm4oaG1zZygiU3ludGF4 OiBTRVQgVElUTEUgPHRleHQ+XG5cCisgIFNldHMgd2luZG93IHRpdGxlIHRvIHRleHQgaW5zdGVh ZCBvZiB1c2luZyBjdXJyZW50IGhvc3QvcG9ydCBuYW1lLiIpKTsKKyNlbmRpZiAvKiBPUzIgKi8K KworI2lmbmRlZiBOT1BVU0gKKyNpZm5kZWYgTk9GUklMTFMKK2Nhc2UgWFlFRElUOgorICAgIHJl dHVybihobXNnKCJTeW50YXg6IFNFVCBFRElUT1IgcGF0aG5hbWUgWyBvcHRpb25zIF1cblwKKyAg U3BlY2lmaWVzIHRoZSBuYW1lIG9mIHlvdXIgcHJlZmVycmVkIGVkaXRvciwgcGx1cyBhbnkgY29t bWFuZC1saW5lXG5cCisgIG9wdGlvbnMuICBTSE9XIEVESVRPUiBkaXNwbGF5cyBpdC4iKSk7Cisj ZW5kaWYgLyogTk9GUklMTFMgKi8KKyNlbmRpZiAvKiBOT1BVU0ggKi8KKworI2lmZGVmIEJST1dT RVIKK2Nhc2UgWFlCUk9XU0U6CisjaWZkZWYgTlQKKyAgICByZXR1cm4oaG1zZygiU3ludGF4OiBT RVQgQlJPV1NFUiBbIHBhdGhuYW1lIFsgb3B0aW9ucyBdIF1cblwKKyAgU3BlY2lmaWVzIHRoZSBu YW1lIG9mIHlvdXIgcHJlZmVycmVkIGJyb3dzZXIgcGx1cyBhbnkgY29tbWFuZC1saW5lXG5cCisg IG9wdGlvbnMuICBTSE9XIEJST1dTRVIgZGlzcGxheXMgaXQuICBPbWl0IHBhdGhuYW1lIGFuZCBv cHRpb25zIHRvIHVzZVxuXAorICBTaGVsbEV4ZWN1dGUuIikpOworI2Vsc2UKKyAgICByZXR1cm4o aG1zZygiU3ludGF4OiBTRVQgQlJPV1NFUiBbIHBhdGhuYW1lIFsgb3B0aW9ucyBdIF1cblwKKyAg U3BlY2lmaWVzIHRoZSBuYW1lIG9mIHlvdXIgcHJlZmVycmVkIGJyb3dzZXIgcGx1cyBhbnkgY29t bWFuZC1saW5lXG5cCisgIG9wdGlvbnMuICBTSE9XIEJST1dTRVIgZGlzcGxheXMgaXQuIikpOwor I2VuZGlmIC8qIE5UICovCisjZW5kaWYgLyogQlJPV1NFUiAqLworCisjaWZkZWYgQ0tfVEFQSQor Y2FzZSBYWVRBUEk6CisgICAgcmV0dXJuKGhtc2dhKGh4eXRhcGkpKTsKKyNlbmRpZiAvKiBDS19U QVBJICovCisKKyNpZmRlZiBOVAorY2FzZSBYWVdJTjk1OgorICAgIHJldHVybihobXNnYShoeHl3 aW45NSkpOworI2VuZGlmIC8qIE5UICovCisKKyNpZm5kZWYgTk9TUEwKK2Nhc2UgWFlGVU5DOgor ICAgIHJldHVybihobXNnYShoeHlmdW5jKSk7CisjZW5kaWYgLyogTk9TUEwgKi8KKworI2lmZGVm IENLX0FVVEhFTlRJQ0FUSU9OCitjYXNlIFhZQVVUSDoKKyAgICByZXR1cm4oaG1zZ2EoaG14eWF1 dGgpKTsKKyNlbHNlIC8qIENLX0FVVEhFTlRJQ0FUSU9OICovCisjaWZkZWYgQ0tfU1NMCitjYXNl IFhZQVVUSDoKKyAgICByZXR1cm4oaG1zZ2EoaG14eWF1dGgpKTsKKyNlbmRpZiAvKiBDS19TU0wg Ki8KKyNlbmRpZiAvKiBDS19BVVRIRU5USUNBVElPTiAqLworCisjaWZkZWYgQlJPV1NFUgorY2Fz ZSBYWUZUUDoKKyAgICByZXR1cm4oaG1zZygiU3ludGF4OiBTRVQgRlRQIFsgcGF0aG5hbWUgWyBv cHRpb25zIF0gXVxuXAorICBTcGVjaWZpZXMgdGhlIG5hbWUgb2YgeW91ciBmdHAgY2xpZW50LCBw bHVzIGFueSBjb21tYW5kLWxpbmUgb3B0aW9ucy5cblwKKyAgU0hPVyBGVFAgZGlzcGxheXMgaXQu IikpOworI2VuZGlmIC8qIEJST1dTRVIgKi8KKworY2FzZSBYWVNMRUVQOgorICAgIHJldHVybiho bXNnKCJTeW50YXg6IFNFVCBTTEVFUCBDQU5DRUxMQVRJT04geyBPTiwgT0ZGIH1cblwKKyAgVGVs bHMgd2hldGhlciBTTEVFUCAoUEFVU0UpIG9yIFdBSVQgY29tbWFuZHMgY2FuIGJlIGludGVycnVw dGVkIGZyb20gdGhlXG5cCisgIGtleWJvYXJkOyBPTiBieSBkZWZhdWx0LiIpKTsKKworY2FzZSBY WUNEOgorICAgIHJldHVybihobXNnYShobXh5Y2QpKTsKKworY2FzZSBYWVNFUklBTDoKKyAgICBy ZXR1cm4oaG1zZygiU3ludGF4OiBTRVQgU0VSSUFMIGRwc1xuXAorICBkIGlzIGRhdGEgbGVuZ3Ro IGluIGJpdHMsIDcgb3IgODsgcCBpcyBmaXJzdCBsZXR0ZXIgb2YgcGFyaXR5OyBzIGlzIHN0b3Bc blwKKyAgYml0cywgMSBvciAyLiAgRXhhbXBsZXM6IFwic2V0IHNlcmlhbCA3ZTFcIiwgXCJzZXQg c2VyaWFsIDhuMVwiLiIpKTsKKworI2lmZGVmIEhXUEFSSVRZCitjYXNlIFhZU1RPUDoKKyAgICBy ZXR1cm4oaG1zZygiU3ludGF4OiBTRVQgU1RPUC1CSVRTIHsgMSwgMiB9XG5cCisgIE51bWJlciBv ZiBzdG9wIGJpdHMgdG8gdXNlIG9uIFNFVCBMSU5FIGNvbm5lY3Rpb25zLCBub3JtYWxseSAxLiIp KTsKKyNlbmRpZiAvKiBIV1BBUklUWSAqLworCisjaWZuZGVmIE5PTE9DQUwKK2Nhc2UgWFlESVND OgorICAgIHJldHVybihobXNnKCJTeW50YXg6IFNFVCBESVNDT05ORUNUIHsgT04sIE9GRiB9XG5c CisgIFdoZXRoZXIgdG8gY2xvc2UgYW5kIHJlbGVhc2UgYSBTRVQgTElORSBkZXZpY2UgYXV0b21h dGljYWxseSB1cG9uXG5cCisgIGRpc2Nvbm5lY3Rpb247IE9GRiA9IGtlZXAgZGV2aWNlIG9wZW4g KGRlZmF1bHQpOyBPTiA9IGNsb3NlIGFuZCByZWxlYXNlLiIpKTsKKyNlbmRpZiAvKiBOT0xPQ0FM ICovCisKKyNpZmRlZiBTVFJFQU1JTkcKK2Nhc2UgWFlTVFJFQU06CisgICAgcmV0dXJuKGhtc2co IlN5bnRheDogU0VUIFNUUkVBTUlORyB7IE9OLCBPRkYsIEFVVE8gfVxuXAorICBUZWxscyBLZXJt aXQgd2hldGhlciBzdHJlYW1pbmcgcHJvdG9jb2wgY2FuIGJlIHVzZWQgZHVyaW5nIEtlcm1pdCBm aWxlXG5cCisgIHRyYW5zZmVycy4gIERlZmF1bHQgaXMgQVVUTywgbWVhbmluZyB1c2UgaXQgaWYg Y29ubmVjdGlvbiBpcyByZWxpYWJsZS4iKSk7CisjZW5kaWYgLyogU1RSRUFNSU5HICovCisKK2Nh c2UgWFlSRUxZOgorICAgIHJldHVybihobXNnKCJTeW50YXg6IFNFVCBSRUxJQUJMRSB7IE9OLCBP RkYsIEFVVE8gfVxuXAorICBUZWxscyBLZXJtaXQgd2hldGhlciBpdHMgY29ubmVjdGlvbiBpcyBy ZWxpYWJsZS4gIERlZmF1bHQgaXMgQVVUTyxcblwKKyAgbWVhbmluZyBLZXJtaXQgc2hvdWxkIGZp Z3VyZSBpdCBvdXQgZm9yIGl0c2VsZi4iKSk7CisKK2Nhc2UgWFlDTEVBUjoKKyAgICByZXR1cm4o aG1zZygiU3ludGF4OiBTRVQgQ0xFQVItQ0hBTk5FTCB7IE9OLCBPRkYsIEFVVE8gfVxuXAorICBU ZWxscyBLZXJtaXQgd2hldGhlciBpdHMgY29ubmVjdGlvbiBpcyB0cmFuc3BhcmVudCB0byBhbGwg OC1iaXQgYnl0ZXMuXG5cCisgIERlZmF1bHQgaXMgQVVUTywgbWVhbmluZyBLZXJtaXQgZmlndXJl cyBpdCBvdXQgZnJvbSB0aGUgY29ubmVjdGlvbiB0eXBlLlxuXAorICBXaGVuIGJvdGggc2VuZGVy IGFuZCByZWNlaXZlciBhZ3JlZSBjaGFubmVsIGlzIGNsZWFyLCBTRVQgUFJFRklYSU5HIE5PTkVc blwKKyAgaXMgdXNlZCBhdXRvbWF0aWNhbGx5LiIpKTsKKworI2lmZGVmIFRMT0cKK2Nhc2UgWFlU TE9HOgorICAgIHJldHVybihobXNnKCJTeW50YXg6IFNFVCBUUkFOU0FDVElPTi1MT0cgeyBCUklF RiwgRlRQLCBWRVJCT1NFIH1cblwKKyAgU2VsZWN0cyB0aGUgdHJhbnNhY3Rpb24tbG9nIGZvcm1h dDsgQlJJRUYgYW5kIEZUUCBoYXZlIG9uZSBsaW5lIHBlciBmaWxlO1xuXAorICBGVFAgaXMgY29t cGF0aWJsZSB3aXRoIEZUUCBsb2cuICBWRVJCT1NFICh0aGUgZGVmYXVsdCkgaGFzIG1vcmUgaW5m by4iKSk7CisjZW5kaWYgLyogVExPRyAqLworCitjYXNlIFhZT1BUUzoKKyAgICByZXR1cm4oaG1z ZygiU3ludGF4OiBTRVQgT1BUSU9OUyBjb21tYW5kIFsgc3dpdGNoZXMuLi4gXVxuXAorICBGb3Ig dXNlIHdpdGggY29tbWFuZHMgdGhhdCBoYXZlIHN3aXRjaGVzOyBzZXRzIHRoZSBkZWZhdWx0IHN3 aXRjaGVzIGZvclxuXAorICB0aGUgZ2l2ZW4gY29tbWFuZC4gIFR5cGUgU0VUIE9QVElPTlMgPyBm b3IgYSBsaXN0IG9mIGFtZW5hYmxlIGNvbW1hbmRzLiIpKTsKKworI2lmbmRlZiBOT1NQTAorY2Fz ZSBYWVRJTUVSOgorICAgIHJldHVybihobXNnYShobXh5dGltZXIpKTsKKyNlbmRpZiAvKiBOT1NQ TCAqLworCisjaWZkZWYgQ0tST09UCisgIGNhc2UgWFlST09UOgorICAgIHJldHVybihobXNnYSho bXh4Y2hyb290KSk7CisjZW5kaWYgLyogWFlST09UICovCisKKyNpZmRlZiBBTllTU0gKKyAgY2Fz ZSBYWVNTSDoKKyAgICByZXR1cm4oaG1zZ2EoaG14eXNzaCkpOworI2VuZGlmIC8qIEFOWUNNRCAq LworCisjaWZkZWYgTE9DVVMKKyAgY2FzZSBYWUxPQ1VTOgorICAgIHJldHVybihobXNnYShobXh5 bG9jdXMpKTsKKyNlbmRpZiAvKiBMT0NVUyAqLworCisjaWZkZWYgT1MyCisjaWZkZWYgS1VJCisg IGNhc2UgWFlHVUk6CisgICAgcmV0dXJuKGhtc2dhKGhteHlndWkpKTsKKyNlbmRpZiAvKiBLVUkg Ki8KKyNlbmRpZiAvKiBPUzIgKi8KKworICBjYXNlIFhZTUFUQ0g6CisgICAgcmV0dXJuKGhtc2dh KGhteHltYXRjaCkpOworCisjaWZuZGVmIE5PU0VYUAorICBjYXNlIFhZU0VYUDoKKyAgICByZXR1 cm4oaG1zZ2EoaG14eXNleHApKTsKKyNlbmRpZgkvKiBOT1NFWFAgKi8KKworI2lmbmRlZiBOT1NQ TAorICBjYXNlIFhZVkFSRVY6CisgICAgcmV0dXJuKGhtc2coIlN5bnRheDogU0VUIFZBUklBQkxF LUVWQUxVQVRJT04geyBSRUNVUlNJVkUsIFNJTVBMRSB9XG5cCisgIFRlbGxzIEtlcm1pdCB3ZWF0 aGVyIHRvIGV2YWx1YXRlIFxcJXggYW5kIFxcJnhbXSB2YXJpYWJsZXMgcmVjdXJzaXZlbHlcblwK KyAgKHdoaWNoIGlzIHRoZSBkZWZhdWx0IGZvciBoaXN0b3JpY2FsIHJlYXNvbnMpIG9yIGJ5IHNp bXBsZSBzdHJpbmdcblwKKyAgcmVwbGFjZW1lbnQsIHdoaWNoIGxldHMgeW91IHVzZSB0aGVzZSB2 YXJpYWJsZXMgc2FmZWx5IHRvIHN0b3JlIHN0cmluZ3NcblwKKyAgKHN1Y2ggYXMgV2luZG93cyBw YXRobmFtZXMpIHRoYXQgbWlnaHQgY29udGFpbiBiYWNrc2xhc2hlcy4iKSk7CisjZW5kaWYJLyog Tk9TUEwgKi8KKworZGVmYXVsdDoKKyAgICBwcmludGYoIk5vdCBhdmFpbGFibGUgLSBcIiVzXCJc biIsY21kYnVmKTsKKyAgICByZXR1cm4oMCk7CisgICAgfQorfQorCisjaWZuZGVmIE5PU1BMCitz dGF0aWMgY2hhciAqIGhmc3BsaXRbXSA9IHsKKyJGdW5jdGlvbiBcXGZzcGxpdChzMSwmYSxzMixz MyxuMixuMykgLSBBc3NpZ25zIHN0cmluZyB3b3JkcyB0byBhbiBhcnJheS4iLAorIiAgczEgPSBz b3VyY2Ugc3RyaW5nLiIsCisiICAmYSA9IGFycmF5IGRlc2lnbmF0b3IuIiwKKyIgIHMyID0gb3B0 aW9uYWwgYnJlYWsgc2V0LiIsCisiICBzMyA9IG9wdGlvbmFsIGluY2x1ZGUgc2V0IChvciBBTEws IENTViwgb3IgVFNWKS4iLAorIiAgbjIgPSBvcHRpb25hbCBncm91cGluZyBtYXNrLiIsCisiICBu MyA9IG9wdGlvbmFsIHNlcGFyYXRvciBmbGFnOiIsCisiICAgMCA9IGNvbGxhcHNlIGFkamFjZW50 IHNlcGFyYXRvcnM7IiwKKyIgICAxID0gZG9uJ3QgY29sbGFwc2UgYWRqYWNlbnQgc2VwYXJhdG9y cy4iLAorIiAiLAorIiAgXFxmc3BsaXQoKSBicmVha3MgdGhlIHN0cmluZyBzMSBpbnRvIFwid29y ZHNcIiBhcyBpbmRpY2F0ZWQgYnkgdGhlIG90aGVyIiwKKyIgIHBhcmFtZXRlcnMsIGFzc2lnbmlu ZyB0aGVtIHRvIGdpdmVuIGFycmF5LCBpZiBhbnkuICBJZiB0aGUgc3BlY2lmaWVkIiwKKyIgIGFs cmVhZHkgZXhpc3RzLCBpdCBpcyByZWN5Y2xlZDsgaWYgbm8gYXJyYXkgaXMgc3BlY2lmaWVkLCB0 aGUgY291bnQgaXMiLAorIiAgcmV0dXJuZWQgYnV0IG5vIGFycmF5IGlzIGNyZWF0ZWQuICBBbGwg YXJndW1lbnRzIGFyZSBvcHRpb25hbCIsCisiICAoXFxmc3BsaXQoKSB3aXRoIG5vIGFyZ3VtZW50 cyByZXR1cm5zIDApLiIsCisiICIsCisiICBUaGUgQlJFQUsgU0VUIGlzIHRoZSBzZXQgb2YgYWxs IGNoYXJhY3RlcnMgdGhhdCBzZXBhcmF0ZSB3b3Jkcy4gVGhlIiwKKyIgIGRlZmF1bHQgYnJlYWsg c2V0IGlzIGFsbCBjaGFyYWN0ZXJzIGV4Y2VwdCBBU0NJSSBsZXR0ZXJzIGFuZCBkaWdpdHMuIiwK KyIgIEFTQ0lJIChDMCkgY29udHJvbCBjaGFyYWN0ZXJzIGFyZSB0cmVhdGVkIGFzIGJyZWFrIGNo YXJhY3RlcnMgYnkgZGVmYXVsdCwiLAorIiAgYXMgYXJlIHNwYWNpbmcgYW5kIHB1bmN0dWF0aW9u IGNoYXJhY3RlcnMsIGJyYWNrZXRzLCBhbmQgc28gb24sIGFuZCIsCisiICBhbGwgOC1iaXQgY2hh cmFjdGVycy4iLAorIiAiLAorIiAgVGhlIElOQ0xVREUgU0VUIGlzIHRoZSBzZXQgb2YgY2hhcmFj dGVycyB0aGF0IGFyZSB0byBiZSB0cmVhdGVkIGFzICIsCisiICBwYXJ0cyBvZiB3b3JkcyBldmVu IHRob3VnaCB0aGV5IG5vcm1hbGx5IHdvdWxkIGJlIHNlcGFyYXRvcnMuICBUaGUiLAorIiAgZGVm YXVsdCBpbmNsdWRlIHNldCBpcyBlbXB0eS4gIFRocmVlIHNwZWNpYWwgc3ltYm9saWMgaW5jbHVk ZSBzZXRzIGFyZSIsCisiICBhbHNvIGFsbG93ZWQ6IiwKKyIgIiwKKyIgICAgQUxMIChtZWFuaW5n IGluY2x1ZGUgYWxsIGJ5dGVzIHRoYXQgYXJlIG5vdCBpbiB0aGUgYnJlYWsgc2V0KSIsCisiICAg IENTViAoc3BlY2lhbCB0cmVhdG1lbnQgZm9yIENvbW1hLVNlcGFyYXRlZC1WYWx1ZSByZWNvcmRz KSIsCisiICAgIFRTViAoc3BlY2lhbCB0cmVhdG1lbnQgZm9yIFRhYi1TZXBhcmF0ZWQtVmFsdWUg cmVjb3JkcykiLAorIiAiLAorIiAgRm9yIG9wZXJhdGluZyBvbiA4LWJpdCBjaGFyYWN0ZXIgc2V0 cywgdGhlIGluY2x1ZGUgc2V0IHNob3VsZCBiZSBBTEwuIiwKKyIgIiwKKyIgIElmIHRoZSBncm91 cGluZyBtYXNrIGlzIGdpdmVuIGFuZCBpcyBub256ZXJvLCB3b3JkcyBjYW4gYmUgZ3JvdXBlZCBi eSIsCisiICBxdW90ZXMgb3IgYnJhY2tldHMgc2VsZWN0ZWQgYnkgdGhlIHN1bSBvZiB0aGUgZm9s bG93aW5nOiIsCisiICIsCisiICAgICAxID0gZG91YmxlcXVvdGVzOiAgICBcImEgYiBjXCIiLAor IiAgICAgMiA9IGJyYWNlczogICAgICAgICAge2EgYiBjfSIsCisiICAgICA0ID0gYXBvc3Ryb3Bo ZXM6ICAgICAnYSBiIGMnIiwKKyIgICAgIDggPSBwYXJlbnRoZXNlczogICAgIChhIGIgYykiLAor IiAgICAxNiA9IHNxdWFyZSBicmFja2V0czogW2EgYiBjXSIsCisiICAgIDMyID0gYW5nbGUgYnJh Y2tldHM6ICA8YSBiIGM+IiwKKyIgIiwKKyIgIE5lc3RpbmcgaXMgcG9zc2libGUgd2l0aCB7fSgp W108PiBidXQgbm90IHdpdGggcXVvdGVzIG9yIGFwb3N0cm9waGVzLiIsCisiICIsCisiUmV0dXJu cyBpbnRlZ2VyOiIsCisiICBOdW1iZXIgb2Ygd29yZHMgaW4gc291cmNlIHN0cmluZy4iLAorIiAi LAorIkFsc28gc2VlOiIsCisiICBIRUxQIEZVTkNUSU9OIFdPUkQiLAorIiIKK307CisKKy8qICBE IE8gSCBGIFUgTiBDICAtLSAgR2l2ZSBoZWxwIGZvciBhIGZ1bmN0aW9uICAqLworCitpbnQKK2Rv aGZ1bmMoeHgpIGludCB4eDsgeworICAgIC8qIGludCB4OyAqLworICAgIGlmICh4eCA9PSAtMykg eworICAgICAgICBwcmludGYoIlxuIFR5cGUgU0hPVyBGVU5DVElPTlMgdG8gc2VlIGEgbGlzdCBv ZiBhdmFpbGFibGUgZnVuY3Rpb25zLlxuIgorICAgICAgICAgICAgICAgKTsKKyAgICAgICAgcHJp bnRmKAorICAgICAgICAiIFR5cGUgSEVMUCBGVU5DVElPTiA8bmFtZT4gZm9yIGhlbHAgb24gYSBw YXJ0aWN1bGFyIGZ1bmN0aW9uLlxuIik7CisgICAgICAgIHByaW50ZigKKyAgICAgICAgIiBGb3Ig ZnVuY3Rpb24gc2V0dGluZ3MgdXNlIEhFTFAgU0VUIEZVTkNUSU9OIGFuZCBTSE9XIFNDUklQVFMu XG5cbiIpOworICAgICAgICByZXR1cm4oMCk7CisgICAgfQorICAgIGlmICh4eCA9PSBGTl9XT1JE KSAgICAgICAgICAgICAgICAgIC8qIExvbmcgaGVscCBtZXNzYWdlICovCisgICAgICAgIHJldHVy bihobXNnYShobWZ3b3JkKSk7CisKKyAgICBwcmludGYoIlxuIik7CisgICAgc3dpdGNoICh4eCkg eworICAgICAgY2FzZSBGTl9JTkQ6ICAgICAgICAgICAgICAgICAgICAgIC8qIEluZGV4IChvZiBz dHJpbmcgMSBpbiBzdHJpbmcgMikgKi8KKyAgICAgIGNhc2UgRk5fUklYOiAgICAgICAgICAgICAg ICAgICAgICAvKiBSaW5kZXggKGluZGV4IGZyb20gcmlnaHQpICovCisgICAgICAgIHByaW50Zigi XFxmJXNpbmRleChzMSxzMixuMSxuMilcblwKKyAgczEgPSBzdHJpbmcgdG8gbG9vayBmb3IuXG5c CisgIHMyID0gc3RyaW5nIHRvIGxvb2sgaW4uXG5cCisgIG4xID0gb3B0aW9uYWwgMS1iYXNlZCBz dGFydGluZyBwb3NpdGlvbiwgZGVmYXVsdCA9IDEuXG5cCisgIG4yID0gb3B0aW9uYWwgZGVzaXJl ZCBvY2N1cnJlbmNlIG51bWJlciwgZGVmYXVsdCA9IDEuXG4iLAorICAgICAgICAgICAgICAgeHgg PT0gRk5fUklYID8gInIiIDogIiIKKyAgICAgICAgICAgICAgICk7CisgICAgICAgIHByaW50Zigi UmV0dXJucyBpbnRlZ2VyOlxuXAorICAxLWJhc2VkIHBvc2l0aW9uIG9mICVzbW9zdCBvY2N1cnJl bmNlIG9mIHMxIGluIHMyLCBpZ25vcmluZyB0aGUgJXNtb3N0XG5cCisgIChuMS0xKSBjaGFyYWN0 ZXJzIGluIHMyOyByZXR1cm5zIDAgaWYgczEgbm90IGZvdW5kIGluIHMyLlxuIiwKKyAgICAgICAg ICAgICAgIHh4ID09IEZOX0lORCA/ICJsZWZ0IiA6ICJyaWdodCIsCisgICAgICAgICAgICAgICB4 eCA9PSBGTl9JTkQgPyAibGVmdCIgOiAicmlnaHQiCisgICAgICAgICk7CisgICAgICAgIGJyZWFr OworICAgICAgY2FzZSBGTl9DT1VOVDoJCQkvKiBDb3VudCBvY2N1cnJlbmNlcyBvZiBzMSBpbiBz MiAqLworCXByaW50ZigiXFxmY291bnQoczEsczIsbjEpXG5cCisgIHMxID0gc3RyaW5nIG9yIGNo YXJhY3RlciB0byBsb29rIGZvci5cblwKKyAgczIgPSBzdHJpbmcgdG8gbG9vayBpbi5cblwKKyAg bjEgPSBvcHRpb25hbCAxLWJhc2VkIHN0YXJ0aW5nIHBvc2l0aW9uLCBkZWZhdWx0ID0gMS5cbiIp OworCXByaW50ZigiUmV0dXJucyBpbnRlZ2VyOlxuXAorICBOdW1iZXIgb2Ygb2NjdXJyZW5jZXMg b2YgczEgaW4gczIsIDAgb3IgbW9yZS5cbiIpOworICAgICAgICBicmVhazsKKworICAgICAgY2Fz ZSBGTl9TRUFSQ0g6ICAgICAgICAgICAgICAgICAgIC8qIFNlYXJjaCBmb3IgcGF0dGVybiAqLwor ICAgICAgY2FzZSBGTl9SU0VBUkNIOiAgICAgICAgICAgICAgICAgIC8qIFNlYXJjaCBmb3IgcGF0 dGVybiBmcm9tIHJpZ2h0ICovCisgICAgICAgIHByaW50ZigiXFxmJXNzZWFyY2goczEsczIsbjEs bjIpXG5cCisgIHMxID0gcGF0dGVybiB0byBsb29rIGZvci5cblwKKyAgczIgPSBzdHJpbmcgdG8g bG9vayBpbi5cblwKKyAgbjEgPSBvcHRpb25hbCAxLWJhc2VkIG9mZnNldCwgZGVmYXVsdCA9IDEu XG5cCisgIG4yID0gb3B0aW9uYWwgZGVzaXJlZCBvY2N1cnJlbmNlIG9mIG1hdGNoLCBkZWZhdWx0 ID0gMS5cbiIsCisgICAgICAgICAgICAgICB4eCA9PSBGTl9SU0VBUkNIID8gInIiIDogIiIKKyAg ICAgICAgICAgICAgICk7CisgICAgICAgIHByaW50ZigiUmV0dXJucyBpbnRlZ2VyOlxuXAorICAx LWJhc2VkIHBvc2l0aW9uIG9mICVzbW9zdCBtYXRjaCBmb3IgczEgaW4gczIsIGlnbm9yaW5nIHRo ZSAlc21vc3RcblwKKyAgKG4xLTEpIGNoYXJhY3RlcnMgaW4gczI7IHJldHVybnMgMCBpZiBubyBt YXRjaC5cbiIsCisgICAgICAgICAgICAgICB4eCA9PSBGTl9TRUFSQ0ggPyAibGVmdCIgOiAicmln aHQiLAorICAgICAgICAgICAgICAgeHggPT0gRk5fU0VBUkNIID8gImxlZnQiIDogInJpZ2h0Igor ICAgICAgICApOworICAgICAgICBwcmludGYoIiAgU2VlIEhFTFAgV0lMRENBUkRTIGZvciBpbmZv IGFib3V0IHBhdHRlcm5zLlxuIik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBGTl9MRU46 ICAgICAgICAgICAgICAgICAgICAgIC8qIExlbmd0aCAob2Ygc3RyaW5nKSAqLworICAgICAgICBw cmludGYoIlxcZmxlbmd0aChzMSlcblwKKyAgczEgPSBzdHJpbmcuXG4iKTsKKyAgICAgICAgcHJp bnRmKCJSZXR1cm5zIGludGVnZXI6XG5cCisgIExlbmd0aCBvZiBzdHJpbmcgczEuXG4iKTsKKyAg ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEZOX0xJVDogICAgICAgICAgICAgICAgICAgICAgLyog TGl0ZXJhbCAoZG9uJ3QgZXhwYW5kIHRoZSBzdHJpbmcpICovCisgICAgICAgIHByaW50ZigiXFxm bGl0ZXJhbChzMSlcblwKKyAgczEgPSBzdHJpbmcuXG4iKTsKKyAgICAgICAgcHJpbnRmKCJSZXR1 cm5zIHN0cmluZzpcblwKKyAgczEgbGl0ZXJhbGx5IHdpdGhvdXQgZXZhbHVhdGlvbi5cbiIpOwor ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRk5fTE9XOiAgICAgICAgICAgICAgICAgICAgICAv KiBMb3dlciAoY29udmVydCB0byBsb3dlcmNhc2UpICovCisgICAgICAgIHByaW50ZigiXFxmbG93 ZXIoczEpXG5cCisgIHMxID0gc3RyaW5nLlxuIik7CisgICAgICAgIHByaW50ZigiUmV0dXJucyBz dHJpbmc6XG5cCisgIHMxIHdpdGggdXBwZXJjYXNlIGxldHRlcnMgY29udmVydGVkIHRvIGxvd2Vy Y2FzZS5cbiIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRk5fTUFYOiAgICAgICAgICAg ICAgICAgICAgICAvKiBNYXggKG1heGltdW0pICovCisgICAgICAgIHByaW50ZigiXFxmbWF4aW11 bShuMSxuMilcblwKKyAgbjEgPSBpbnRlZ2VyLlxuXAorICBuMiA9IGludGVnZXIuXG4iKTsKKyAg ICAgICAgcHJpbnRmKCJSZXR1cm5zIGludGVnZXI6XG5cCisgIFRoZSBncmVhdGVyIG9mIG4xIGFu ZCBuMi5cbiIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRk5fTUlOOiAgICAgICAgICAg ICAgICAgICAgICAvKiBNaW4gKG1pbmltdW0pICovCisgICAgICAgIHByaW50ZigiXFxmbWluaW11 bShuMSxuMilcblwKKyAgbjEgPSBpbnRlZ2VyLlxuXAorICBuMiA9IGludGVnZXIuXG4iKTsKKyAg ICAgICAgcHJpbnRmKCJSZXR1cm5zIGludGVnZXI6XG5cCisgIFRoZSBsZXNzZXIgb2YgbjEgYW5k IG4yLlxuIik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBGTl9NT0Q6ICAgICAgICAgICAg ICAgICAgICAgIC8qIE1vZCAobW9kdWx1cykgKi8KKyAgICAgICAgcHJpbnRmKCJcXGZtb2R1bHVz KG4xLG4yKVxuXAorICBuMSA9IGludGVnZXIuXG5cCisgIG4yID0gaW50ZWdlci5cbiIpOworICAg ICAgICBwcmludGYoIlJldHVybnMgaW50ZWdlcjpcblwKKyAgVGhlIHJlbWFpbmRlciBhZnRlciBk aXZpZGluZyBuMSBieSBuMi5cbiIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRk5fRVZB OiAgICAgICAgICAgICAgICAgICAgICAvKiBFdmFsIChldmFsdWF0ZSBhcml0aCBleHByZXNzaW9u KSAqLworICAgICAgICBwcmludGYoIlxcZmV2YWx1YXRlKGUpXG5cCisgIGUgPSBhcml0aG1ldGlj IGV4cHJlc3Npb24uXG4iKTsKKyAgICAgICAgcHJpbnRmKCJSZXR1cm5zIGludGVnZXI6XG5cCisg IFRoZSByZXN1bHQgb2YgZXZhbHVhdGluZyB0aGUgZXhwcmVzc2lvbi5cbiIpOworICAgICAgICBi cmVhazsKKyAgICAgIGNhc2UgRk5fU1VCOiAgICAgICAgICAgICAgICAgICAgICAvKiBTdWJzdHIg KHN1YnN0cmluZykgKi8KKyAgICAgICAgcHJpbnRmKCJcXGZzdWJzdHJpbmcoczEsbjEsbjIpXG5c CisgIHMxID0gc3RyaW5nLlxuXAorICBuMSA9IGludGVnZXIsIDEtYmFzZWQgc3RhcnRpbmcgcG9z aXRpb24sIGRlZmF1bHQgPSAxLlxuXAorICBuMiA9IGludGVnZXIsIGxlbmd0aCwgZGVmYXVsdCA9 IGxlbmd0aChzMSkgLSBuMSArIDEuXG4iKTsKKyAgICAgICAgcHJpbnRmKCJSZXR1cm5zIHN0cmlu ZzpcblwKKyAgU3Vic3RyaW5nIG9mIHMxIHN0YXJ0aW5nIGF0IG4xLCBsZW5ndGggbjIuXG4iKTsK KyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEZOX1VQUDogICAgICAgICAgICAgICAgICAgICAg LyogVXBwZXIgKGNvbnZlcnQgdG8gdXBwZXJjYXNlKSAqLworICAgICAgICBwcmludGYoIlxcZnVw cGVyKHMxKVxuXAorICBzMSA9IHN0cmluZy5cbiIpOworICAgICAgICBwcmludGYoIlJldHVybnMg c3RyaW5nOlxuXAorICBzMSB3aXRoIGxvd2VyY2FzZSBsZXR0ZXJzIGNvbnZlcnRlZCB0byB1cHBl cmNhc2UuXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEZOX1JFVjogICAgICAgICAg ICAgICAgICAgICAgLyogUmV2ZXJzZSAoYSBzdHJpbmcpICovCisgICAgICAgIHByaW50ZigiXFxm cmV2ZXJzZShzMSlcblwKKyAgczEgPSBzdHJpbmcuXG4iKTsKKyAgICAgICAgcHJpbnRmKCJSZXR1 cm5zIHN0cmluZzpcblwKKyAgczEgd2l0aCBpdHMgY2hhcmFjdGVycyBpbiByZXZlcnNlIG9yZGVy LlxuIik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBGTl9SRVA6ICAgICAgICAgICAgICAg ICAgICAgIC8qIFJlcGVhdCAoYSBzdHJpbmcpICovCisgICAgICAgIHByaW50ZigiXFxmcmVwZWF0 KHMxLG4xKVxuXAorICBzMSA9IHN0cmluZy5cblwKKyAgbjEgPSBpbnRlZ2VyLlxuIik7CisgICAg ICAgIHByaW50ZigiUmV0dXJucyBzdHJpbmc6XG5cCisgIHMxIHJlcGVhdGVkIG4xIHRpbWVzLlxu Iik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBGTl9FWEU6ICAgICAgICAgICAgICAgICAg ICAgIC8qIEV4ZWN1dGUgKGEgbWFjcm8pICovCisgICAgICAgIHByaW50ZigiXFxmZXhlY3V0ZSht MSxhMSxhMixhMywuLi4pXG5cCisgIG0xID0gbWFjcm8gbmFtZS5cblwKKyAgYTEgPSBhcmd1bWVu dCAxLlxuXAorICBhMiA9IGFyZ3VtZW50IDIsIGV0Y1xuIik7CisgICAgICAgIHByaW50ZigiUmV0 dXJucyBzdHJpbmc6XG5cCisgIFRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIG1hY3JvIChIRUxQIFJF VFVSTiBmb3IgZnVydGhlciBpbmZvKS5cbiIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug Rk5fTFBBOiAgICAgICAgICAgICAgICAgICAgICAvKiBMUEFEIChsZWZ0IHBhZCkgKi8KKyAgICAg IGNhc2UgRk5fUlBBOiAgICAgICAgICAgICAgICAgICAgICAvKiBSUEFEIChyaWdodCBwYWQpICov CisgICAgICAgIHByaW50ZigiXFxmJWNwYWQoczEsbjEsYzEpXG5cCisgIHMxID0gc3RyaW5nLlxu XAorICBuMSA9IGludGVnZXIuXG5cCisgIGMxID0gY2hhcmFjdGVyLCBkZWZhdWx0ID0gc3BhY2Uu XG4iLAorICAgICAgICAgICAgICAgIHh4ID09IEZOX0xQQSA/ICdsJyA6ICdyJyk7CisgICAgICAg IHByaW50ZigiUmV0dXJucyBzdHJpbmc6XG5cCisgIHMxICVzLXBhZGRlZCB3aXRoIGNoYXJhY3Rl ciBjMSB0byBsZW5ndGggbjEuXG4iLAorICAgICAgICAgICAgICAgeHggPT0gRk5fTFBBID8gImxl ZnQiIDogInJpZ2h0Iik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBGTl9ERUY6ICAgICAg ICAgICAgICAgICAgICAgIC8qIERlZmluaXRpb24gb2YgYSBtYWNybywgdW5leHBhbmRlZCAqLwor ICAgICAgICBwcmludGYoIlxcZmRlZmluaXRpb24obTEpXG5cCisgIG0xID0gbWFjcm8gbmFtZS5c biIpOworICAgICAgICBwcmludGYoIlJldHVybnMgc3RyaW5nOlxuXAorICBMaXRlcmFsIGRlZmlu aXRpb24gb2YgbWFjcm8gbTEuXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEZOX0NP TjogICAgICAgICAgICAgICAgICAgICAgLyogQ29udGVudHMgb2YgYSB2YXJpYWJsZSwgZGl0dG8g Ki8KKyAgICAgICAgcHJpbnRmKCJcXGZjb250ZW50cyh2MSlcblwKKyAgdjEgPSB2YXJpYWJsZSBu YW1lIHN1Y2ggYXMgXFwlJWEuXG4iKTsKKyAgICAgICAgcHJpbnRmKCJSZXR1cm5zIHN0cmluZzpc blwKKyAgTGl0ZXJhbCBkZWZpbml0aW9uIG9mIHZhcmlhYmxlIHYxLCBldmFsdWF0ZWQgb25lIGxl dmVsIG9ubHkuXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEZOX0ZJTDogICAgICAg ICAgICAgICAgICAgICAgLyogTmV4dCBmaWxlICovCisgICAgICAgIHByaW50ZigiXFxmbmV4dGZp bGUoKVxuIik7CisgICAgICAgIHByaW50ZigiUmV0dXJucyBzdHJpbmc6XG5cCisgIE5hbWUgb2Yg bmV4dCBmaWxlIGZyb20gbGlzdCBjcmVhdGVkIGJ5IG1vc3QgcmVjZW50IFxcZltyXWZpbGVzKCkg b3JcblwKKyAgXFxmW3JdZGlyKClpbnZvY2F0aW9uLCBvciBhbiBlbXB0eSBzdHJpbmcgaWYgdGhl cmUgYXJlIG5vIG1vcmUgZmlsZXMgaW5cblwKKyAgdGhlIGxpc3QuXG4iKTsKKyAgICAgICAgYnJl YWs7CisgICAgICBjYXNlIEZOX0ZDOiAgICAgICAgICAgICAgICAgICAgICAgLyogRmlsZSBjb3Vu dCAqLworICAgICAgICBwcmludGYoIlxcZmZpbGVzKGYxWywmYV0pIC0gRmlsZSBsaXN0LlxuXAor ICBmMSA9IGZpbGUgc3BlY2lmaWNhdGlvbiwgcG9zc2libHkgY29udGFpbmluZyB3aWxkY2FyZHMu XG5cCisgICZhID0gb3B0aW9uYWwgbmFtZSBvZiBhcnJheSB0byBhc3NpZ24gZmlsZSBsaXN0IHRv LlxuIik7CisgICAgICAgIHByaW50ZigiUmV0dXJucyBpbnRlZ2VyOlxuXAorICBUaGUgbnVtYmVy IG9mIHJlZ3VsYXIgZmlsZXMgdGhhdCBtYXRjaCBmMS4gIFVzZSB3aXRoIFxcZm5leHRmaWxlKCku XG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEZOX0NIUjogICAgICAgICAgICAgICAg ICAgICAgLyogQ2hhcmFjdGVyIChsaWtlIEJBU0lDIENIUiQoKSkgKi8KKyAgICAgICAgcHJpbnRm KCJcXGZjaGFyYWN0ZXIobjEpXG5cCisgIG4xID0gaW50ZWdlci5cbiIpOworICAgICAgICBwcmlu dGYoIlJldHVybnMgY2hhcmFjdGVyOlxuXAorICBUaGUgY2hhcmFjdGVyIHdob3NlIG51bWVyaWMg Y29kZSBpcyBuMS5cbiIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRk5fUklHOiAgICAg ICAgICAgICAgICAgICAgICAvKiBSaWdodCAobGlrZSBCQVNJQyBSSUdIVCQoKSkgKi8KKyAgICAg ICAgcHJpbnRmKCJcXGZyaWdodChzMSxuMSlcblwKKyAgczEgPSBzdHJpbmcuXG5cCisgIG4xID0g aW50ZWdlciwgZGVmYXVsdCA9IGxlbmd0aChzMSkuXG4iKTsKKyAgICAgICAgcHJpbnRmKCJSZXR1 cm5zIHN0cmluZzpcblwKKyAgVGhlIHJpZ2h0bW9zdCBuMSBjaGFyYWN0ZXJzIG9mIHN0cmluZyBz MS5cbiIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRk5fTEVGOiAgICAgICAgICAgICAg ICAgICAgICAvKiBMZWZ0IChsaWtlIEJBU0lDIExFRlQkKCkpICovCisgICAgICAgIHByaW50Zigi XFxmbGVmdChzMSxuMSlcblwKKyAgczEgPSBzdHJpbmcuXG5cCisgIG4xID0gaW50ZWdlciwgZGVm YXVsdCA9IGxlbmd0aChzMSkuXG4iKTsKKyAgICAgICAgcHJpbnRmKCJSZXR1cm5zIHN0cmluZzpc blwKKyAgVGhlIGxlZnRtb3N0IG4xIGNoYXJhY3RlcnMgb2Ygc3RyaW5nIHMxLlxuIik7CisgICAg ICAgIGJyZWFrOworICAgICAgY2FzZSBGTl9DT0Q6ICAgICAgICAgICAgICAgICAgICAgIC8qIENv ZGUgdmFsdWUgb2YgY2hhcmFjdGVyICovCisgICAgICAgIHByaW50ZigiXFxmY29kZShzMSlcblwK KyAgYzEgPSBjaGFyYWN0ZXIuXG4iKTsKKyAgICAgICAgcHJpbnRmKCJSZXR1cm5zIGludGVnZXI6 XG5cCisgIFRoZSBudW1lcmljIGNvZGUgb2YgdGhlIGZpcnN0IGNoYXJhY3RlciBpbiBzdHJpbmcg czEsIG9yIDAgaWYgczEgZW1wdHkuXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEZO X1JQTDogICAgICAgICAgICAgICAgICAgICAgLyogUmVwbGFjZSAqLworICAgICAgICBwcmludGYo IlxcZnJlcGxhY2UoczEsczIsczNbLG4xXSlcblwKKyAgczEgPSBvcmlnaW5hbCBzdHJpbmcuXG5c CisgIHMyID0gbWF0Y2ggc3RyaW5nLlxuXAorICBzMyA9IHJlcGxhY2VtZW50IHN0cmluZy5cblwK KyAgbjEgPSBvY2N1cnJlbmNlLlxuIik7CisgICAgICAgIHByaW50ZigiUmV0dXJucyBzdHJpbmc6 XG5cCisgIHMxIHdpdGggb2NjdXJyZW5jZSBudW1iZXIgbjEgb2YgczIgcmVwbGFjZWQgYnkgczMu XG5cCisgIElmIG4xID0gMCBvciBvbWl0dGVkLCBhbGwgb2NjdXJyZW5jZXMgYXJlIHJlcGxhY2Vk LlxuXAorICBJZiBuMSA8IDAsIG9jY3VycmVuY2VzIGFyZSBjb3VudGVkIGZyb20gdGhlIHJpZ2h0 LlxuIik7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEZOX0ZEOiAgICAgICAgICAgICAg ICAgICAgICAgLyogRmlsZSBkYXRlICovCisgICAgICAgIHByaW50ZigiXFxmZGF0ZShmMSlcblwK KyAgZjEgPSBmaWxlbmFtZS5cbiIpOworI2lmZGVmIFZNUworICAgICAgICBwcmludGYoIlJldHVy bnMgc3RyaW5nOlxuXAorICBDcmVhdGlvbiBkYXRlIG9mIGZpbGUgZjEsIGZvcm1hdDogeXl5eW1t ZGQgaGg6bW06c3MuXG4iKTsKKyNlbHNlCisgICAgICAgIHByaW50ZigiUmV0dXJucyBzdHJpbmc6 XG5cCisgIE1vZGlmaWNhdGlvbiBkYXRlIG9mIGZpbGUgZjEsIGZvcm1hdDogeXl5eW1tZGQgaGg6 bW06c3MuXG4iKTsKKyNlbmRpZiAvKiBWTVMgKi8KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNl IEZOX0ZTOiAgICAgICAgICAgICAgICAgICAgICAgLyogRmlsZSBzaXplICovCisgICAgICAgIHBy aW50ZigiXFxmc2l6ZShmMSlcblwKKyAgZjEgPSBmaWxlbmFtZS5cbiIpOworICAgICAgICBwcmlu dGYoIlJldHVybnMgaW50ZWdlcjpcblwKKyAgU2l6ZSBvZiBmaWxlIGYxLlxuIik7CisgICAgICAg IGJyZWFrOworICAgICAgY2FzZSBGTl9WRVI6ICAgICAgICAgICAgICAgICAgICAgIC8qIFZlcmlm eSAqLworICAgICAgICBwcmludGYoIlxcZnZlcmlmeShzMSxzMixuMSlcblwKKyAgczEgPSBzdHJp bmcgb2YgY2hhcmFjdGVycyB0byBsb29rIGZvci5cblwKKyAgczIgPSBzdHJpbmcgdG8gbG9vayBp bi5cblwKKyAgbjEgPSBzdGFydGluZyBwb3NpdGlvbiBpbiBzMi5cbiIpOworICAgICAgICBwcmlu dGYoIlJldHVybnMgaW50ZWdlcjpcblwKKyAgMS1iYXNlZCBwb3NpdGlvbiBvZiBmaXJzdCBjaGFy YWN0ZXIgaW4gczIgdGhhdCBpcyBub3QgYWxzbyBpbiBzMSxcblwKKyAgb3IgLTEgaWYgczEgaXMg ZW1wdHksIG9yIDAgaWYgYWxsIGNoYXJhY3RlcnMgaW4gczIgYXJlIGFsc28gaW4gczEuXG4iKTsK KyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEZOX0lQQTogICAgICAgICAgICAgICAgICAgICAg LyogRmluZCBhbmQgcmV0dXJuIElQIGFkZHJlc3MgKi8KKyAgICAgICAgcHJpbnRmKCJcXGZpcGFk ZHJlc3MoczEsbjEpXG5cCisgIHMxID0gc3RyaW5nLlxuXAorICBuMSA9IDEtYmFzZWQgaW50ZWdl ciBzdGFydGluZyBwb3NpdGlvbiwgZGVmYXVsdCA9IDEuXG4iKTsKKyAgICAgICAgcHJpbnRmKCJS ZXR1cm5zIHN0cmluZzpcblwKKyAgRmlyc3QgSVAgYWRkcmVzcyBpbiBzMSwgc2Nhbm5pbmcgZnJv bSBsZWZ0IHN0YXJ0aW5nIGF0IHBvc2l0aW9uIG4xLlxuIik7CisgICAgICAgIGJyZWFrOworICAg ICAgY2FzZSBGTl9IRVg6ICAgICAgICAgICAgICAgICAgICAgIC8qIEhleGlmeSAqLworICAgICAg ICBwcmludGYoIlxcZmhleGlmeShzMSlcblwKKyAgczEgPSBzdHJpbmcuXG4iKTsKKyAgICAgICAg cHJpbnRmKCJSZXR1cm5zIHN0cmluZzpcblwKKyAgVGhlIGhleGFkZWNpbWFsIHJlcHJlc2VudGF0 aW9uIG9mIHMxLiAgQWxzbyBzZWUgXFxmbjJoZXgoKS5cbiIpOworICAgICAgICBicmVhazsKKyAg ICAgIGNhc2UgRk5fVU5IOiAgICAgICAgICAgICAgICAgICAgICAvKiBVbmhleGlmeSAqLworICAg ICAgICBwcmludGYoIlxcZnVuaGV4aWZ5KGgxKVxuXAorICBoMSA9IEhleGFkZWNpbWFsIHN0cmlu Zy5cbiIpOworICAgICAgICBwcmludGYoIlJldHVybnMgc3RyaW5nOlxuXAorICBUaGUgcmVzdWx0 IG9mIHVuaGV4aWZ5aW5nIHMxLCBvciBub3RoaW5nIGlmIHMxIGlzIG5vdCBhIGhleCBzdHJpbmcu XG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEZOX1VOVEFCOgkJCS8qIFVudGFiaWZ5 ICovCisgICAgICAgIHByaW50ZigiXFxmdW50YWJpZnkoczEpXG5cCisgIHMxID0gc3RyaW5nLlxu Iik7CisgICAgICAgIHByaW50ZigiUmV0dXJucyBzdHJpbmc6XG5cCisgIFRoZSByZXN1bHQgb2Yg Y29udmVydGluZyB0YWJzIGluIHMxIHRvIHNwYWNlcyBhc3N1bWluZyB0YWIgc3RvcHMgZXZlcnlc blwKKyAgOCBzcGFjZXMuXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEZOX0JSSzog ICAgICAgICAgICAgICAgICAgICAgLyogQnJlYWsgKi8KKyAgICAgIGNhc2UgRk5fU1BOOiAgICAg ICAgICAgICAgICAgICAgICAvKiBTcGFuICovCisgICAgICAgIHByaW50ZigiXFxmJXMoczEsczIs bjEpXG5cCisgIHMxID0gc3RyaW5nIHRvIGxvb2sgaW4uXG5cCisgIHMyID0gc3RyaW5nIG9mIGNo YXJhY3RlcnMgdG8gbG9vayBmb3IuXG5cCisgIG4xID0gMS1iYXNlZCBpbnRlZ2VyIHN0YXJ0aW5n IHBvc2l0aW9uLCBkZWZhdWx0ID0gMS5cbiIsCisgICAgICAgICAgICAgIHh4ID09IEZOX0JSSyA/ ICJicmVhayIgOiAic3BhbiIKKyAgICAgICAgICAgICAgKTsKKyAgICAgICAgcHJpbnRmKCJSZXR1 cm5zIHN0cmluZzpcblwKKyAgczEgdXAgdG8gdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgYW55IGNo YXJhY3RlciVzYWxzbyBpbiBzMixcblwKKyAgc2Nhbm5pbmcgZnJvbSB0aGUgbGVmdCBzdGFydGlu ZyBhdCBwb3NpdGlvbiBuMS5cbiIsCisgICAgICAgICAgICAgICB4eCA9PSBGTl9TUE4gPyAiIG5v dCAiIDogIiAiKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEZOX1RSTTogICAgICAgICAg ICAgICAgICAgICAgLyogVHJpbSAqLworICAgICAgY2FzZSBGTl9MVFI6ICAgICAgICAgICAgICAg ICAgICAgIC8qIExlZnQtVHJpbSAqLworICAgICAgICBwcmludGYoIlxcZiVzKHMxLHMyKVxuXAor ICBzMSA9IHN0cmluZyB0byBsb29rIGluLlxuXAorICBzMiA9IHN0cmluZyBvZiBjaGFyYWN0ZXJz IHRvIGxvb2sgZm9yLCBkZWZhdWx0ID0gYmxhbmtzIGFuZCB0YWJzLlxuIiwKKyAgICAgICAgICAg ICAgIHh4ID09IEZOX1RSTSA/ICJ0cmltIiA6ICJsdHJpbSIpOworICAgICAgICBwcmludGYoIlJl dHVybnMgc3RyaW5nOlxuXAorICBzMSB3aXRoIGFsbCBjaGFyYWN0ZXJzIHRoYXQgYXJlIGFsc28g aW4gczIgdHJpbW1lZCBmcm9tIHRoZSAlcy5cbi4iLAorICAgICAgICAgICAgICAgeHggPT0gRk5f VFJNID8gInJpZ2h0IiA6ICJsZWZ0Iik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBGTl9D QVA6ICAgICAgICAgICAgICAgICAgICAgIC8qIENhcGl0YWxpemUgKi8KKyAgICAgICAgcHJpbnRm KCJcXGZjYXBpdGFsaXplKHMxKVxuXAorICBzMSA9IHN0cmluZy5cbiIpOworICAgICAgICBwcmlu dGYoIlJldHVybnMgc3RyaW5nOlxuXAorICBzMSB3aXRoIGl0cyBmaXJzdCBsZXR0ZXIgY29udmVy dGVkIHRvIHVwcGVyY2FzZSBhbmQgdGhlIHJlbWFpbmluZ1xuXAorICBsZXR0ZXJzIHRvIGxvd2Vy Y2FzZS5cbiIpOworICAgICAgICBwcmludGYoIlN5bm9ueW06IFxcZmNhcHMoczEpXG4iKTsKKyAg ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEZOX1RPRDogICAgICAgICAgICAgICAgICAgICAgLyog VGltZS1vZi1kYXktdG8tc2Vjcy1zaW5jZS1taWRuaXRlICovCisgICAgICAgIHByaW50ZigiXFxm dG9kMnNlY3MoczEpXG5cCisgIHMxID0gdGltZS1vZi1kYXkgc3RyaW5nLCBoaDptbTpzcywgMjQt aG91ciBmb3JtYXQuXG4iKTsKKyAgICAgICAgcHJpbnRmKCJSZXR1cm5zIG51bWJlcjpcblwKKyAg U2Vjb25kcyBzaW5jZSBtaWRuaWdodC5cbiIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug Rk5fRkZOOiAgICAgICAgICAgICAgICAgICAgICAvKiBGdWxsIGZpbGUgbmFtZSAqLworICAgICAg ICBwcmludGYoIlxcZnBhdGhuYW1lKGYxKVxuXAorICBmMSA9IGZpbGVuYW1lLCBwb3NzaWJseSB3 aWxkLlxuIik7CisgICAgICAgIHByaW50ZigiUmV0dXJucyBzdHJpbmc6XG5cCisgIEZ1bGwgcGF0 aG5hbWUgb2YgZjEuXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEZOX0NISzogICAg ICAgICAgICAgICAgICAgICAgLyogQ2hlY2tzdW0gb2YgdGV4dCAqLworICAgICAgICBwcmludGYo IlxcZmNoZWNrc3VtKHMxKVxuXAorICBzMSA9IHN0cmluZy5cbiIpOworICAgICAgICBwcmludGYo IlJldHVybnMgaW50ZWdlcjpcblwKKyAgMTYtYml0IGNoZWNrc3VtIG9mIHN0cmluZyBzMS5cbiIp OworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRk5fQ1JDOiAgICAgICAgICAgICAgICAgICAg ICAvKiBDUkMtMTYgb2YgdGV4dCAqLworICAgICAgICBwcmludGYoIlxcZmNyYzE2KHMxKVxuXAor ICBzMSA9IHN0cmluZy5cbiIpOworICAgICAgICBwcmludGYoIlJldHVybnMgaW50ZWdlcjpcblwK KyAgMTYtYml0IGN5Y2xpYyByZWR1bmRhbmN5IGNoZWNrIG9mIHN0cmluZyBzMS5cbiIpOworICAg ICAgICBicmVhazsKKyAgICAgIGNhc2UgRk5fQlNOOiAgICAgICAgICAgICAgICAgICAgICAvKiBC YXNlbmFtZSBvZiBmaWxlICovCisgICAgICAgIHByaW50ZigiXFxmYmFzZW5hbWUoZjEpXG5cCisg IGYxID0gZmlsZW5hbWUsIHBvc3NpYmx5IHdpbGQuXG4iKTsKKyAgICAgICAgcHJpbnRmKCJSZXR1 cm5zIHN0cmluZzpcblwKKyAgRmlsZW5hbWUgZjEgc3RyaXBwZWQgb2YgYWxsIGRldmljZSBhbmQg ZGlyZWN0b3J5IGluZm9ybWF0aW9uLlxuIik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBG Tl9DTUQ6ICAgICAgICAgICAgICAgICAgICAgIC8qIE91dHB1dCBvZiBhIGNvbW1hbmQgKGNvb2tl ZCkgKi8KKyAgICAgICAgcHJpbnRmKCJcXGZjb21tYW5kKHMxKVxuXAorICBzMSA9IHN0cmluZ1xu Iik7CisgICAgICAgIHByaW50ZigiUmV0dXJucyBzdHJpbmc6XG5cCisgIE91dHB1dCBvZiBzeXN0 ZW0gY29tbWFuZCBzMSwgaWYgYW55LCB3aXRoIGZpbmFsIGxpbmUgdGVybWluYXRvciBzdHJpcHBl ZC5cbiIKKyAgICAgICAgICAgICAgICk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBGTl9S QVc6ICAgICAgICAgICAgICAgICAgICAgIC8qIE91dHB1dCBvZiBhIGNvbW1hbmQgKHJhdykgKi8K KyAgICAgICAgcHJpbnRmKCJcXGZyYXdjb21tYW5kKHMxKVxuXAorICBzMSA9IHN0cmluZ1xuIik7 CisgICAgICAgIHByaW50ZigiUmV0dXJucyBzdHJpbmc6XG5cCisgIE91dHB1dCBvZiBzeXN0ZW0g Y29tbWFuZCBzMSwgaWYgYW55LlxuIik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBGTl9T VFg6ICAgICAgICAgICAgICAgICAgICAgIC8qIFN0cmlwIGZyb20gcmlnaHQgKi8KKyAgICAgICAg cHJpbnRmKCJcXGZzdHJpcHgoczEsYzEpXG5cCisgIHMxID0gc3RyaW5nIHRvIGxvb2sgaW4uXG5c CisgIGMxID0gY2hhcmFjdGVyIHRvIGxvb2sgZm9yLCBkZWZhdWx0ID0gXCIuXCIuXG4iKTsKKyAg ICAgICAgcHJpbnRmKCJSZXR1cm5zIHN0cmluZzpcblwKKyAgczEgdXAgdG8gdGhlIHJpZ2h0bW9z dCBvY2N1cnJlbmNlIG9mIGNoYXJhY3RlciBjMS5cbiIKKyAgICAgICAgKTsKKyAgICAgICAgYnJl YWs7CisKKyAgICAgIGNhc2UgRk5fU1RMOiAgICAgICAgICAgICAgICAgICAgICAvKiBTdHJpcCBm cm9tIGxlZnQgKi8KKyAgICAgICAgcHJpbnRmKCJcXGZsb3AoczFbLGMxWyxuMV1dKVxuXAorICBz MSA9IHN0cmluZyB0byBsb29rIGluLlxuXAorICBjMSA9IGNoYXJhY3RlciB0byBsb29rIGZvciwg ZGVmYXVsdCA9IFwiLlwiLlxuXAorICBuMSA9IG9jY3VycmVuY2Ugb2YgYzEsIGRlZmF1bHQgPSAx LlxuIik7CisgICAgICAgIHByaW50ZigiUmV0dXJucyBzdHJpbmc6XG5cCisgIFRoZSBwYXJ0IG9m IHMxIGFmdGVyIHRoZSBuMXRoIGxlZnRtb3N0IG9jY3VycmVuY2Ugb2YgY2hhcmFjdGVyIGMxLlxu IgorICAgICAgICApOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBGTl9MT1BYOiAgICAg ICAgICAgICAgICAgICAgICAvKiBTdHJpcCBmcm9tIHJpZ2h0ICovCisgICAgICAgIHByaW50Zigi XFxmbG9weChzMSxjMSlcblwKKyAgczEgPSBzdHJpbmcgdG8gbG9vayBpbi5cblwKKyAgYzEgPSBj aGFyYWN0ZXIgdG8gbG9vayBmb3IsIGRlZmF1bHQgPSBcIi5cIi5cblwKKyAgbjEgPSBvY2N1cnJl bmNlIG9mIGMxLCBkZWZhdWx0ID0gMS5cbiIpOworICAgICAgICBwcmludGYoIlJldHVybnMgc3Ry aW5nOlxuXAorICBUaGUgcGFydCBvZiBzMSBhZnRlciB0aGUgbjF0aCByaWdodG1vc3Qgb2NjdXJy ZW5jZSBvZiBjaGFyYWN0ZXIgYzEuXG4iCisgICAgICAgICk7CisgICAgICAgIGJyZWFrOworCisg ICAgICBjYXNlIEZOX1NUTjogICAgICAgICAgICAgICAgICAgICAgLyogU3RyaXAgbiBjaGFycyAq LworICAgICAgICBwcmludGYoIlxcZnN0cmlwbihzMSxuMSlcblwKKyAgczEgPSBzdHJpbmcgdG8g bG9vayBpbi5cblwKKyAgbjEgPSBpbnRlZ2VyLCBkZWZhdWx0ID0gMC5cbiIpOworICAgICAgICBw cmludGYoIlJldHVybnMgc3RyaW5nOlxuXAorICBzMSB3aXRoIG4xIGNoYXJhY3RlcnMgcmVtb3Zl ZCBmcm9tIHRoZSByaWdodC5cbiIKKyAgICAgICAgKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAg IGNhc2UgRk5fU1RCOiAgICAgICAgICAgICAgICAgICAgICAvKiBTdHJpcCBlbmNsb3NpbmcgYnJh Y2tldHMgKi8KKyAgICAgICAgcHJpbnRmKCJcXGZzdHJpcGIoczFbLGMxWyxjMl1dKVxuXAorICBz MSA9IG9yaWdpbmFsIHN0cmluZy5cblwKKyAgYzEgPSBvcHRpb25hbCBmaXJzdCBjaGFyYWN0ZXJc biIpOworICAgICAgICBwcmludGYoIlwKKyAgYzIgPSBvcHRpb25hbCBmaW5hbCBjaGFyYWN0ZXIu XG4iKTsKKyAgICAgICAgcHJpbnRmKCJSZXR1cm5zIHN0cmluZzpcblwKKyAgczEgd2l0aCB0aGUg aW5kaWNhdGVkIGVuY2xvc2luZyBjaGFyYWN0ZXJzIHJlbW92ZWQuICBJZiBjMSBhbmQgYzIgbm90 XG5cCisgICAgIHNwZWNpZmllZCwgYW55IG1hdGNoaW5nIGJyYWNrZXRzLCBicmFjZXMsIHBhcmVu dGhlc2VzLCBvciBxdW90ZXMgYXJlXG4iKTsKKyAgICAgICAgcHJpbnRmKCJcCisgICAgIGFzc3Vt ZWQuICBJZiBjMSBpcyBnaXZlbiBidXQgbm90IGMyLCB0aGUgYXBwcm9wcmlhdGUgYzIgaXMgYXNz dW1lZC5cblwKKyAgICAgaWYgYm90aCBjMSBhbmQgYzIgYXJlIGdpdmVuLCB0aGV5IGFyZSB1c2Vk IGFzLWlzLlxuIgorICAgICAgICAgICAgICAgKTsKKyAgICAgICAgcHJpbnRmKAorIkFsdGVybmF0 aXZlIGZvcm1hdDpcblwKKyAgSW5jbHVkZSBhIGdyb3VwaW5nIG1hc2sgbnVtYmVyIGluIHBsYWNl IG9mIGMxIGFuZCBvbWl0IGMyIHRvIHNwZWNpZnkgbW9yZVxuXAorICB0aGFuIG9uZSBwb3NzaWJp bGl0eSBhdCBvbmNlOyBzZWUgXFxmd29yZCgpIGZvciBkZXRhaWxzLlxuIgorICAgICAgICAgICAg ICAgKTsKKyAgICAgICAgYnJlYWs7CisKKyNpZmRlZiBPUzIKKyAgICAgIGNhc2UgRk5fU0NSTl9D WDogICAgICAgICAgICAgICAgICAvKiBTY3JlZW4gQ3Vyc29yIFggUG9zICovCisgICAgICAgIHBy aW50ZigiXFxmc2NybmN1cngoKVxuIik7CisgICAgICAgIHByaW50ZigiUmV0dXJucyBpbnRlZ2Vy OlxuXAorICBUaGUgMC1iYXNlZCBYIGNvb3JkaW5hdGUgKGNvbHVtbikgb2YgdGhlIFRlcm1pbmFs IHNjcmVlbiBjdXJzb3IuXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEZOX1NDUk5f Q1k6ICAgICAgICAgICAgICAgICAgLyogU2NyZWVuIEN1cnNvciBZIFBvcyAqLworICAgICAgICBw cmludGYoIlxcZnNjcm5jdXJ5KClcbiIpOworICAgICAgICBwcmludGYoIlJldHVybnMgaW50ZWdl cjpcblwKKyAgVGhlIDAtYmFzZWQgWSBjb29yZGluYXRlIChyb3cpIG9mIHRoZSBUZXJtaW5hbCBz Y3JlZW4gY3Vyc29yLlxuIik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBGTl9TQ1JOX1NU UjogICAgICAgICAgICAgICAgIC8qIFNjcmVlbiBTdHJpbmcgKi8KKyAgICAgICAgcHJpbnRmKCJc XGZzY3Juc3RyKG55LG54LG4xKVxuXAorICBueSA9IGludGVnZXIuXG5cCisgIG54ID0gaW50ZWdl ci5cblwKKyAgbjEgPSBpbnRlZ2VyLlxuIik7CisgICAgICAgIHByaW50ZigiUmV0dXJucyBzdHJp bmc6XG5cCisgIFRoZSBzdHJpbmcgYXQgVGVybWluYWwtc2NyZWVuIGNvb3JkaW5hdGVzIChueCxu eSksIGxlbmd0aCBuMSxcblwKKyAgYmxhbmtzIGluY2x1ZGVkLiAgQ29vcmRpbmF0ZXMgc3RhcnQg YXQgMC4gIERlZmF1bHQgdmFsdWVzIGFyZVxuXAorICAwIGZvciBueSBhbmQgbngsIGFuZCBsaW5l IHdpZHRoIGZvciBuMS5cbiIpOworICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBPUzIgKi8KKwor ICAgICAgY2FzZSBGTl8ySEVYOiAgICAgICAgICAgICAgICAgICAgIC8qIE51bSB0byBoZXggKi8K KyAgICAgICAgcHJpbnRmKCJcXGZuMmhleChuMSkgLSBOdW1iZXIgdG8gaGV4XG4gIG4xID0gaW50 ZWdlci5cbiIpOworICAgICAgICBwcmludGYoIlJldHVybnMgc3RyaW5nOlxuICBUaGUgaGV4YWRl Y2ltYWwgcmVwcmVzZW50YXRpb24gb2YgbjEuXG4iKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAg IGNhc2UgRk5fMk9DVDogICAgICAgICAgICAgICAgICAgICAvKiBOdW0gdG8gaGV4ICovCisgICAg ICAgIHByaW50ZigiXFxmbjJvY3RhbChuMSkgLSBOdW1iZXIgdG8gb2N0YWxcbiAgbjEgPSBpbnRl Z2VyLlxuIik7CisgICAgICAgIHByaW50ZigiUmV0dXJucyBzdHJpbmc6XG4gIFRoZSBvY3RhbCBy ZXByZXNlbnRhdGlvbiBvZiBuMS5cbiIpOworICAgICAgICBicmVhazsKKworI2lmZGVmIFJFQ1VS U0lWRQorICAgICAgY2FzZSBGTl9ESVI6ICAgICAgICAgICAgICAgICAgICAgIC8qIFJlY3Vyc2l2 ZSBkaXJlY3RvcnkgY291bnQgKi8KKyAgICAgICAgcHJpbnRmKCJcXGZkaXJlY3RvcmllcyhmMSkg LSBEaXJlY3RvcnkgbGlzdC5cblwKKyAgZjEgPSBkaXJlY3Rvcnkgc3BlY2lmaWNhdGlvbiwgcG9z c2libHkgY29udGFpbmluZyB3aWxkY2FyZHMuXG5cCisgICZhID0gb3B0aW9uYWwgbmFtZSBvZiBh cnJheSB0byBhc3NpZ24gZGlyZWN0b3J5IGxpc3QgdG8uXG4iKTsKKyAgICAgICAgcHJpbnRmKCJS ZXR1cm5zIGludGVnZXI6XG5cCisgIFRoZSBudW1iZXIgb2YgZGlyZWN0b3JpZXMgdGhhdCBtYXRj aCBmMTsgdXNlIHdpdGggXFxmbmV4dGZpbGUoKS5cbiIpOworICAgICAgICBicmVhazsKKworICAg ICAgY2FzZSBGTl9SRklMOiAgICAgICAgICAgICAgICAgICAgIC8qIFJlY3Vyc2l2ZSBmaWxlIGNv dW50ICovCisgICAgICAgIHByaW50ZigiXFxmcmZpbGVzKGYxWywmYV0pIC0gUmVjdXJzaXZlIGZp bGUgbGlzdC5cblwKKyAgZjEgPSBmaWxlIHNwZWNpZmljYXRpb24sIHBvc3NpYmx5IGNvbnRhaW5p bmcgd2lsZGNhcmRzLlxuXAorICAmYSA9IG9wdGlvbmFsIG5hbWUgb2YgYXJyYXkgdG8gYXNzaWdu IGZpbGUgbGlzdCB0by5cbiIpOworICAgICAgICBwcmludGYoIlJldHVybnMgaW50ZWdlcjpcblwK KyAgVGhlIG51bWJlciBvZiBmaWxlcyB3aG9zZSBuYW1lcyBtYXRjaCBmMSBpbiB0aGUgY3VycmVu dCBvciBnaXZlblxuXAorICBkaXJlY3RvcnkgdHJlZTsgdXNlIHdpdGggXFxmbmV4dGZpbGUoKS5c biIpOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBGTl9SRElSOiAgICAgICAgICAgICAg ICAgICAgIC8qIFJlY3Vyc2l2ZSBkaXJlY3RvcnkgY291bnQgKi8KKyAgICAgICAgcHJpbnRmKCJc XGZyZGlyZWN0b3JpZXMoZjEpIC0gUmVjdXJzaXZlIGRpcmVjdG9yeSBsaXN0LlxuXAorICBmMSA9 IGRpcmVjdG9yeSBzcGVjaWZpY2F0aW9uLCBwb3NzaWJseSBjb250YWluaW5nIHdpbGRjYXJkcy5c blwKKyAgJmEgPSBvcHRpb25hbCBuYW1lIG9mIGFycmF5IHRvIGFzc2lnbiBkaXJlY3RvcnkgbGlz dCB0by5cbiIpOworICAgICAgICBwcmludGYoIlJldHVybnMgaW50ZWdlcjpcblwKKyAgVGhlIG51 bWJlciBvZiBkaXJlY3RvcmllcyB0aGF0IG1hdGNoIGYxIGluIHRoZSBjdXJyZW50IG9yIGdpdmVu IGRpcmVjdG9yeVxuXAorICB0cmVlLiAgVXNlIHdpdGggXFxmbmV4dGZpbGUoKS5cbiIpOworICAg ICAgICBicmVhazsKKyNlbmRpZiAvKiBSRUNVUlNJVkUgKi8KKworICAgICAgY2FzZSBGTl9ETkFN OiAgICAgICAgICAgICAgICAgICAgIC8qIERpcmVjdG9yeSBwYXJ0IG9mIGEgZmlsZW5hbWUgKi8K KyAgICAgICAgcHJpbnRmKCJcXGZkaXJuYW1lKGYpIC0gRGlyZWN0b3J5IHBhcnQgb2YgYSBmaWxl bmFtZS5cblwKKyAgZiA9IGEgZmlsZSBzcGVjaWZpY2F0aW9uLlxuIik7CisgICAgICAgIHByaW50 ZigiUmV0dXJucyBkaXJlY3RvcnkgbmFtZTpcblwKKyAgVGhlIGZ1bGwgbmFtZSBvZiB0aGUgZGly ZWN0b3J5IHRoYXQgdGhlIGZpbGUgaXMgaW4sIG9yIGlmIHRoZSBmaWxlIGlzIGFcblwKKyAgZGly ZWN0b3J5LCBpdHMgZnVsbCBuYW1lLlxuIik7CisgICAgICAgIGJyZWFrOworCisjaWZuZGVmIE5P UkFORE9NCisgICAgICBjYXNlIEZOX1JBTkQ6ICAgICAgICAgICAgICAgICAgICAgLyogUmFuZG9t IG51bWJlciAqLworICAgICAgICBwcmludGYoIlxcZnJhbmRvbShuKSAtIFJhbmRvbSBudW1iZXIu XG5cCisgIG4gPSBhIHBvc2l0aXZlIGludGVnZXIuXG4iKTsKKyAgICAgICAgcHJpbnRmKCJSZXR1 cm5zIGludGVnZXI6XG5cCisgIEEgcmFuZG9tIG51bWJlciBiZXR3ZWVuIDAgYW5kIG4tMS5cbiIp OworICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBOT1JBTkRPTSAqLworCisgICAgICBjYXNlIEZO X1NQTElUOiAgICAgICAgICAgICAgICAgICAgLyogU3BsaXQgKi8KKyNpZmRlZiBDT01NRU5UCisg ICAgICAgIHByaW50ZigiXFxmc3BsaXQoczEsJmEsczIsczMsbjIsbjMpIC0gXAorQXNzaWduIHN0 cmluZyB3b3JkcyB0byBhbiBhcnJheS5cblwKKyAgczEgPSBzb3VyY2Ugc3RyaW5nXG4gICZhID0g YXJyYXkgZGVzaWduYXRvclxuICBzMiA9IG9wdGlvbmFsIGJyZWFrIHNldC5cbiIpOworICAgICAg ICBwcmludGYoIiAgczMgPSBvcHRpb25hbCBpbmNsdWRlIHNldC5cbiIpOworICAgICAgICBwcmlu dGYoIiAgbjIgPSBvcHRpb25hbCBncm91cGluZyBtYXNrLlxuIik7CisgICAgICAgIHByaW50Zigi ICBuMyA9IG9wdGlvbmFsIHNlcGFyYXRvciBmbGFnLlxuIik7CisgICAgICAgIHByaW50ZigiICBz MiwgczMsIG4yLCBuMyBhcmUgYXMgaW4gXFxmd29yZCgpLlxuIik7CisgICAgICAgIHByaW50ZigK KyIgIEFsbCBhcmd1bWVudHMgYXJlIG9wdGlvbmFsOyBpZiBcXCZhW10gYWxyZWFkeSBleGlzdHMs IGl0IGlzIHJlY3ljbGVkO1xuXAorICBpZiBhcnJheSBub3Qgc3BlY2lmaWVkLCB0aGUgY291bnQg aXMgcmV0dXJuZWQgYnV0IG5vIGFycmF5IGlzIGNyZWF0ZWQuXG4iKTsKKyAgICAgICAgcHJpbnRm KCJSZXR1cm5zIGludGVnZXI6XG5cCisgIE51bWJlciBvZiB3b3JkcyBpbiBzb3VyY2Ugc3RyaW5n LlxuIik7CisjZWxzZQorICAgICAgICBobXNnYShoZnNwbGl0KTsKKyNlbmRpZgkvKiBDT01NRU5U ICovCisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEZOX0RUSU06ICAgICAgICAgICAgICAg ICAgICAgLyogQ1ZUREFURSAqLworICAgICAgICBwcmludGYoIlxcZmN2dGRhdGUoW2RhdGUtdGlt ZV1bLG4xXSkgLSBEYXRlL3RpbWUgY29udmVyc2lvbi5cbiIpOworICAgICAgICBwcmludGYoIiAg Q29udmVydHMgZGF0ZSBhbmQvb3IgdGltZSB0byBzdGFuZGFyZCBmb3JtYXQuXG4iKTsKKyAgICAg ICAgcHJpbnRmKCIgIElmIG5vIGRhdGUvdGltZSBnaXZlbiwgcmV0dXJucyBjdXJyZW50IGRhdGUv dGltZS5cbiIpOworICAgICAgICBwcmludGYoIiAgW2RhdGUtdGltZV0sIGlmIGdpdmVuLCBpcyBm cmVlLWZvcm1hdCBkYXRlIGFuZC9vciB0aW1lLlxuIik7CisgICAgICAgIHByaW50ZigiICBIRUxQ IERBVEUgZm9yIGluZm8gYWJvdXQgZGF0ZS10aW1lIGZvcm1hdHMuXG4iKTsKKyAgICAgICAgcHJp bnRmKCJSZXR1cm5zIHN0cmluZzpcblwKKyAgU3RhbmRhcmQtZm9ybWF0IGRhdGUgYW5kIHRpbWU6 IHl5eXltbWRkIGhoOm1tOnNzIChudW1lcmljKVxuIik7CisgICAgICAgIHByaW50ZigiICBJZiBu MSBpcyBnaXZlbjpcblwKKyAgbjEgPSAxOiB5eXl5LW1tbS1kZCBoaDptbTpzcyAobW1tID0gRW5n bGlzaCAzLWxldHRlciBtb250aCBhYmJyZXZpYXRpb24pXG5cCisgIG4xID0gMjogZGQtbW1tLXl5 eXkgaGg6bW06c3MgKGRpdHRvKVxuXAorICBuMSA9IDM6IHl5eXltbWRkaGhtbXNzIChhbGwgbnVt ZXJpYylcblwKKyAgbjEgPSA0OiBEYXkgTW9uIGRkIGhoOm1tOnNzIHl5eXkgKGFzY3RpbWUpXG5c CisgIE90aGVyOiAgeXl5eW1tZGQgaGg6bW06ZGQiKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAg IGNhc2UgRk5fSkRBVEU6ICAgICAgICAgICAgICAgICAgICAvKiBET1kgKi8KKyAgICAgICAgcHJp bnRmKCJcXGZkb3koW2RhdGUtdGltZV0pIC0gRGF5IG9mIFllYXIuXG4iKTsKKyAgICAgICAgcHJp bnRmKCIgIENvbnZlcnRzIGRhdGUgYW5kL29yIHRpbWUgdG8gZGF5LW9mLXllYXIgKERPWSkgZm9y bWF0LlxuIik7CisgICAgICAgIHByaW50ZigiICBJZiBubyBkYXRlL3RpbWUgZ2l2ZW4sIHJldHVy bnMgY3VycmVudCBkYXRlLlxuIik7CisgICAgICAgIHByaW50ZigiICBbZGF0ZS10aW1lXSwgaWYg Z2l2ZW4sIGlzIGZyZWUtZm9ybWF0IGRhdGUgYW5kL29yIHRpbWUuXG4iKTsKKyAgICAgICAgcHJp bnRmKCIgIEhFTFAgREFURSBmb3IgaW5mbyBhYm91dCBkYXRlLXRpbWUgZm9ybWF0cy5cbiIpOwor ICAgICAgICBwcmludGYoIlJldHVybnMgbnVtZXJpYyBzdHJpbmc6XG5cCisgIERPWTogeXl5eWRk ZCwgd2hlcmUgZGRkIGlzIDEtYmFzZWQgZGF5IG51bWJlciBpbiB5ZWFyLlxuIik7CisgICAgICAg IGJyZWFrOworCisgICAgICBjYXNlIEZOX1BOQ1ZUOgorICAgICAgICBwcmludGYoIlxcZmRpYWxj b252ZXJ0KHBob25lLW51bWJlcikgLSBDb252ZXJ0IHBob25lIG51bWJlci5cbiIpOworICAgICAg ICBwcmludGYoIiAgQ29udmVydHMgdGhlIGdpdmVuIHBob25lIG51bWJlciBmb3IgZGlhbGluZyBh Y2NvcmRpbmdcbiIpOworICAgICAgICBwcmludGYoCisiICB0byB0aGUgcHJldmFpbGluZyBkaWFs aW5nIHJ1bGVzIC0tIGNvdW50cnkgY29kZSwgYXJlYSBjb2RlLCBldGMuXG4iKTsKKyAgICAgICAg cHJpbnRmKCJSZXR1cm5zIHN0cmluZzpcblwKKyAgVGhlIGRpYWwgc3RyaW5nIHRoYXQgd291bGQg YmUgdXNlZCBpZiB0aGUgc2FtZSBwaG9uZSBudW1iZXIgaGFkIGJlZW5cblwKKyAgZ2l2ZW4gdG8g dGhlIERJQUwgY29tbWFuZC5cbiIKKyAgICAgICAgICAgICAgKTsKKyAgICAgICAgYnJlYWs7CisK KyAgICAgIGNhc2UgRk5fREFURUo6ICAgICAgICAgICAgICAgICAgICAvKiBET1kyREFURSAqLwor ICAgICAgICBwcmludGYoIlxcZmRveTJkYXRlKFtkb3lbIHRpbWVdXSkgLSBEYXkgb2YgWWVhciB0 byBEYXRlLlxuIik7CisgICAgICAgIHByaW50ZigiICBDb252ZXJ0cyB5eXl5bW1tIHRvIHl5eXlt bWRkXG4iKTsKKyAgICAgICAgcHJpbnRmKCIgIElmIHRpbWUgaW5jbHVkZWQsIGl0IGlzIGNvbnZl cnRlZCB0byAyNC1ob3VyIGZvcm1hdC4iKTsKKyAgICAgICAgcHJpbnRmKAorICAgICAgICAgICAg IlJldHVybnMgc3RhbmRhcmQgZGF0ZSBvciBkYXRlLXRpbWUgc3RyaW5nIHl5eXltbWRkIGhoOm1t OnNzXG4iKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgRk5fTUpEOgorICAgICAgICBw cmludGYoIlxcZm1qZChbW2RhdGVdWyB0aW1lXV0pIC0gTW9kaWZpZWQgSnVsaWFuIERhdGUgKE1K RCkuXG4iKTsKKyAgICAgICAgcHJpbnRmKAorIiAgQ29udmVydHMgZGF0ZSBhbmQvb3IgdGltZSB0 byBNSkQsIHRoZSBudW1iZXIgb2YgZGF5cyBzaW5jZSAxNyBOb3YgMTg1OC5cbiIpOworICAgICAg ICBwcmludGYoIiAgSEVMUCBEQVRFIGZvciBpbmZvIGFib3V0IGRhdGUtdGltZSBmb3JtYXRzLlxu Iik7CisgICAgICAgIHByaW50ZigiUmV0dXJuczogaW50ZWdlci5cbiIpOworICAgICAgICBicmVh azsKKworICAgICAgY2FzZSBGTl9NSkQyOgorICAgICAgICBwcmludGYoIlxcZm1qZDJkYXRlKG1q ZCkgLSBNb2RpZmllZCBKdWxpYW4gRGF0ZSAoTUpEKSB0byBEYXRlLlxuIik7CisgICAgICAgIHBy aW50ZigiICBDb252ZXJ0cyBNSkQgdG8gc3RhbmRhcmQtZm9ybWF0IGRhdGUuXG4iKTsKKyAgICAg ICAgcHJpbnRmKCJSZXR1cm5zOiB5eXl5bW1kZC5cbiIpOworICAgICAgICBicmVhazsKKworICAg ICAgY2FzZSBGTl9EQVk6CisgICAgICAgIHByaW50ZigiXFxmZGF5KFtbZGF0ZV1bIHRpbWVdXSkg LSBEYXkgb2YgV2Vlay5cbiIpOworICAgICAgICBwcmludGYoIlJldHVybnMgZGF5IG9mIHdlZWsg b2YgZ2l2ZW4gZGF0ZSBhcyBNb24sIFR1ZSwgZXRjLlxuIik7CisgICAgICAgIHByaW50ZigiSEVM UCBEQVRFIGZvciBpbmZvIGFib3V0IGRhdGUtdGltZSBmb3JtYXRzLlxuIik7CisgICAgICAgIGJy ZWFrOworCisgICAgICBjYXNlIEZOX05EQVk6CisgICAgICAgIHByaW50ZigiXFxmbmRheShbW2Rh dGVdWyB0aW1lXV0pIC0gTnVtZXJpYyBEYXkgb2YgV2Vlay5cbiIpOworICAgICAgICBwcmludGYo CisgICAgIlJldHVybnMgbnVtZXJpYyBkYXkgb2Ygd2VlayBvZiBnaXZlbiBkYXRlLCAwPVN1biwg MT1Nb24sIC4uLiwgNj1TYXQuXG4iKTsKKyAgICAgICAgcHJpbnRmKCJIRUxQIERBVEUgZm9yIGlu Zm8gYWJvdXQgZGF0ZS10aW1lIGZvcm1hdHMuXG4iKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAg IGNhc2UgRk5fVElNRToKKyAgICAgICAgcHJpbnRmKCJcXGZ0aW1lKFtbZGF0ZV1bIHRpbWVdXSkg LSBUaW1lLlxuIik7CisgICAgICAgIHByaW50ZigKKyJSZXR1cm5zIHRpbWUgcG9ydGlvbiBvZiBn aXZlbiBkYXRlIGFuZC9vciB0aW1lIGluIGhoOm1tOnNzIGZvcm1hdC5cbiIpOworICAgICAgICBw cmludGYoIklmIG5vIGFyZ3VtZW50IGdpdmVuLCByZXR1cm5zIGN1cnJlbnQgdGltZS5cbiIpOwor ICAgICAgICBwcmludGYoIkhFTFAgREFURSBmb3IgaW5mbyBhYm91dCBkYXRlLXRpbWUgZm9ybWF0 cy5cbiIpOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBGTl9OVElNOgorICAgICAgICBw cmludGYoIlxcZm50aW1lKFtbZGF0ZV1bIHRpbWVdXSkgLSBOdW1lcmljIFRpbWUuXG4iKTsKKyAg ICAgICAgcHJpbnRmKAorIlJldHVybnMgdGltZSBwb3J0aW9uIG9mIGdpdmVuIGRhdGUgYW5kL29y IHRpbWUgYXMgc2Vjb25kcyBzaW5jZSBtaWRuaWdodC5cbiIpOworICAgICAgICBwcmludGYoIklm IG5vIGFyZ3VtZW50IGdpdmVuLCByZXR1cm5zIGN1cnJlbnQgdGltZS5cbiIpOworICAgICAgICBw cmludGYoIkhFTFAgREFURSBmb3IgaW5mbyBhYm91dCBkYXRlLXRpbWUgZm9ybWF0cy5cbiIpOwor ICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBGTl9OMlRJTToKKyAgICAgICAgcHJpbnRmKCJc XGZuMnRpbWUoc2Vjb25kcykgLSBOdW1lcmljIFRpbWUgdG8gVGltZS5cbiIpOworICAgICAgICBw cmludGYoCisiUmV0dXJucyB0aGUgZ2l2ZW4gbnVtYmVyIG9mIHNlY29uZHMgaW4gaGg6bW06c3Mg Zm9ybWF0LlxuIik7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEZOX1BFUk06CisgICAg ICAgIHByaW50ZigiXFxmcGVybWlzc2lvbnMoZmlsZSkgLSBQZXJtaXNzaW9ucyBvZiBGaWxlLlxu Iik7CisgICAgICAgIHByaW50ZigKKyNpZmRlZiBVTklYCisiUmV0dXJucyBwZXJtaXNzaW9ucyBv ZiBnaXZlbiBmaWxlIGFzIHRoZXkgd291bGQgYmUgc2hvd24gYnkgXCJscyAtbFwiLlxuIgorI2Vs c2UKKyNpZmRlZiBWTVMKKyJSZXR1cm5zIHBlcm1pc3Npb25zIG9mIGdpdmVuIGZpbGUgYXMgdGhl eSB3b3VsZCBiZSBzaG93biBieSBcImRpciAvcHJvdFwiLlxuIgorI2Vsc2UKKyJSZXR1cm5zIHRo ZSBwZXJtaXNzaW9ucyBvZiB0aGUgZ2l2ZW4gZmlsZS5cbiIKKyNlbmRpZiAvKiBWTVMgKi8KKyNl bmRpZiAvKiBVTklYICovCisgICAgICAgICAgICAgICApOworICAgICAgICBicmVhazsKKworICAg ICAgY2FzZSBGTl9BTE9PSzoKKyAgICAgICAgcHJpbnRmKCJcXGZhcnJheWxvb2socGF0dGVybiwm YSkgLSBMb29rdXAgcGF0dGVybiBpbiBhcnJheS5cblwKKyAgcGF0dGVybiA9IFN0cmluZyBvciBw YXR0ZXJuXG4iKTsKKyAgICAgICAgcHJpbnRmKCIgICZhID0gYXJyYXkgZGVzaWduYXRvciwgY2Fu IGluY2x1ZGUgcmFuZ2Ugc3BlY2lmaWVyLlxuIik7CisgICAgICAgIHByaW50ZigKKyJSZXR1cm5z IG51bWJlcjpcblwKKyAgVGhlIGluZGV4IG9mIHRoZSBmaXJzdCBtYXRjaGluZyBhcnJheSBlbGVt ZW50IG9yIC0xIGlmIG5vbmUuXG4iKTsKKyAgICAgICAgcHJpbnRmKCJNb3JlIGluZm86XG5cCisg IEhFTFAgUEFUVEVSTiBmb3IgcGF0dGVybiBzeW50YXguXG4gIEhFTFAgQVJSQVkgZm9yIGFycmF5 cy5cbiIpOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBGTl9UTE9PSzoKKyAgICAgICAg cHJpbnRmKAorIlxcZnRhYmxlbG9vayhrZXl3b3JkLCZhLFtjXSkgLSBMb29rdXAga2V5d29yZCBp biBrZXl3b3JkIHRhYmxlLlxuXAorICBwYXR0ZXJuID0gU3RyaW5nXG4iKTsKKyAgICAgICAgcHJp bnRmKCIgIGtleXdvcmQgPSBrZXl3b3JkIHRvIGxvb2sgdXAgKGNhbiBiZSBhYmJyZXZpYXRlZCku XG4iKTsKKyAgICAgICAgcHJpbnRmKCIgICZhICAgICAgPSBhcnJheSBkZXNpZ25hdG9yLCBjYW4g aW5jbHVkZSByYW5nZSBzcGVjaWZpZXIuXG4iKTsKKyAgICAgICAgcHJpbnRmKCIgICAgICAgICAg ICBUaGlzIGFycmF5IG11c3QgYmUgaW4gYWxwaGFiZXRpY2FsIG9yZGVyLlxuIik7CisgICAgICAg IHByaW50ZigiICBjICAgICAgID0gT3B0aW9uYWwgZmllbGQgZGVsaW1pdGVyLCBjb2xvbig6KSBi eSBkZWZhdWx0LlxuIik7CisgICAgICAgIHByaW50ZigKKyJSZXR1cm5zIG51bWJlcjpcblwKKyAg MSBvciBncmVhdGVyLCBpbmRleCBvZiBhcnJheSBlbGVtZW50IHRoYXQgdW5pcXVlbHkgbWF0Y2hl cyBnaXZlbiBrZXl3b3JkO1xuIgorICAgICAgICAgICAgICAgKTsKKyAgICAgICAgcHJpbnRmKAor Im9yIC0yIGlmIGtleXdvcmQgd2FzIGFtYmlndW91cywgb3IgLTEgaWYga2V5d29yZCBlbXB0eSBv ciBub3QgZm91bmQuXG4iCisgICAgICAgICAgICAgICApOworICAgICAgICBwcmludGYoIkFsc28g c2VlOlxuXAorICBIRUxQIEZVTkMgQVJSQVlMT09LIGZvciBhIHNpbWlsYXIgZnVuY3Rpb24uXG4g IEhFTFAgQVJSQVkgZm9yIGFycmF5cy5cbiIpOworICAgICAgICBicmVhazsKKworICAgICAgY2Fz ZSBGTl9BQlM6ICAgICAgICAgICAgICAgICAgICAgIC8qIEFic29sdXRlICovCisgICAgICAgIHBy aW50ZigiXFxmYWJzb2x1dGUobjEpXG5cCisgIG4xID0gaW50ZWdlci5cbiIpOworICAgICAgICBw cmludGYoIlJldHVybnMgaW50ZWdlcjpcblwKKyAgVGhlIGFic29sdXRlICh1bnNpZ25lZCkgdmFs dWUgb2YgbjEuXG4iKTsKKyAgICAgICAgYnJlYWs7CisKKyNpZmRlZiBGTkZMT0FUCisgICAgICBj YXNlIEZOX0ZQQUJTOgorICAgICAgICBwcmludGYoIlxcZmZwYWJzb2x1dGUoZjEsZClcblwKKyAg ZjEgPSBmbG9hdGluZy1wb2ludCBudW1iZXIgb3IgaW50ZWdlci5cblwKKyAgIGQgPSBpbnRlZ2Vy LlxuIik7CisgICAgICAgIHByaW50ZigiUmV0dXJucyBmbG9hdGluZy1wb2ludCBudW1iZXI6XG5c CisgIFRoZSBhYnNvbHV0ZSAodW5zaWduZWQpIHZhbHVlIG9mIGYxIHRvIGQgZGVjaW1hbCBwbGFj ZXMuXG4iKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgRk5fRlBBREQ6CisgICAgICAg IHByaW50ZigiXFxmZnBhZGQoZjEsZjIsZClcblwKKyAgZjEsZjIgPSBmbG9hdGluZy1wb2ludCBu dW1iZXJzIG9yIGludGVnZXJzLlxuXAorICAgICAgZCA9IGludGVnZXIuXG4iKTsKKyAgICAgICAg cHJpbnRmKCJSZXR1cm5zIGZsb2F0aW5nLXBvaW50IG51bWJlcjpcblwKKyAgVGhlIHN1bSBvZiBm MSBhbmQgZjIgdG8gZCBkZWNpbWFsIHBsYWNlcy5cbiIpOworICAgICAgICBicmVhazsKKworICAg ICAgY2FzZSBGTl9GUFNVQjoKKyAgICAgICAgcHJpbnRmKCJcXGZmcHN1YnRyYWN0KGYxLGYyLGQp XG5cCisgIGYxLGYyID0gZmxvYXRpbmctcG9pbnQgbnVtYmVycyBvciBpbnRlZ2Vycy5cblwKKyAg ICAgIGQgPSBpbnRlZ2VyLlxuIik7CisgICAgICAgIHByaW50ZigiUmV0dXJucyBmbG9hdGluZy1w b2ludCBudW1iZXI6XG5cCisgIGYxIG1pbnVzIGYyIHRvIGQgZGVjaW1hbCBwbGFjZXMuXG4iKTsK KyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgRk5fRlBNVUw6CisgICAgICAgIHByaW50Zigi XFxmZnBtdWx0aXBseShmMSxmMixkKVxuXAorICBmMSxmMiA9IGZsb2F0aW5nLXBvaW50IG51bWJl cnMgb3IgaW50ZWdlcnMuXG5cCisgICAgICBkID0gaW50ZWdlci5cbiIpOworICAgICAgICBwcmlu dGYoIlJldHVybnMgZmxvYXRpbmctcG9pbnQgbnVtYmVyOlxuXAorICBUaGUgcHJvZHVjdCBvZiBm MSBhbmQgZjIgdG8gZCBkZWNpbWFsIHBsYWNlcy5cbiIpOworICAgICAgICBicmVhazsKKworICAg ICAgY2FzZSBGTl9GUERJVjoKKyAgICAgICAgcHJpbnRmKCJcXGZmcGRpdmlkZShmMSxmMixkKVxu XAorICBmMSxmMiA9IGZsb2F0aW5nLXBvaW50IG51bWJlcnMgb3IgaW50ZWdlcnMuXG5cCisgICAg ICBkID0gaW50ZWdlci5cbiIpOworICAgICAgICBwcmludGYoIlJldHVybnMgZmxvYXRpbmctcG9p bnQgbnVtYmVyOlxuXAorICBmMSBkaXZpZGVkIGJ5IGYyIHRvIGQgZGVjaW1hbCBwbGFjZXMuXG4i KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgRk5fRlBNQVg6CisgICAgICAgIHByaW50 ZigiXFxmZnBtYXhpbXVtKGYxLGYyLGQpXG5cCisgIGYxLGYyID0gZmxvYXRpbmctcG9pbnQgbnVt YmVycyBvciBpbnRlZ2Vycy5cblwKKyAgICAgIGQgPSBpbnRlZ2VyLlxuIik7CisgICAgICAgIHBy aW50ZigiUmV0dXJucyBmbG9hdGluZy1wb2ludCBudW1iZXI6XG5cCisgIFRoZSBtYXhpbXVtIG9m IGYxIGFuZCBmMiB0byBkIGRlY2ltYWwgcGxhY2VzLlxuIik7CisgICAgICAgIGJyZWFrOworCisg ICAgICBjYXNlIEZOX0ZQTUlOOgorICAgICAgICBwcmludGYoIlxcZmZwbWluaW11bShmMSxmMixk KVxuXAorICBmMSxmMiA9IGZsb2F0aW5nLXBvaW50IG51bWJlcnMgb3IgaW50ZWdlcnMuXG5cCisg ICAgICBkID0gaW50ZWdlci5cbiIpOworICAgICAgICBwcmludGYoIlJldHVybnMgZmxvYXRpbmct cG9pbnQgbnVtYmVyOlxuXAorICBUaGUgbWluaW11bSBvZiBmMSBhbmQgZjIgdG8gZCBkZWNpbWFs IHBsYWNlcy5cbiIpOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBGTl9GUE1PRDoKKyAg ICAgICAgcHJpbnRmKCJcXGZmcG1vZHVsdXMoZjEsZjIsZClcblwKKyAgZjEsZjIgPSBmbG9hdGlu Zy1wb2ludCBudW1iZXJzIG9yIGludGVnZXJzLlxuXAorICAgICAgZCA9IGludGVnZXIuXG4iKTsK KyAgICAgICAgcHJpbnRmKCJSZXR1cm5zIGZsb2F0aW5nLXBvaW50IG51bWJlcjpcblwKKyAgVGhl IG1vZHVsdXMgb2YgZjEgYW5kIGYyIHRvIGQgZGVjaW1hbCBwbGFjZXMuXG4iKTsKKyAgICAgICAg YnJlYWs7CisKKyAgICAgIGNhc2UgRk5fRlBQT1c6CisgICAgICAgIHByaW50ZigiXFxmZnByYWlz ZShmMSxmMixkKVxuXAorICBmMSxmMiA9IGZsb2F0aW5nLXBvaW50IG51bWJlcnMgb3IgaW50ZWdl cnMuXG5cCisgICAgICBkID0gaW50ZWdlci5cbiIpOworICAgICAgICBwcmludGYoIlJldHVybnMg ZmxvYXRpbmctcG9pbnQgbnVtYmVyOlxuXAorICBmMSByYWlzZWQgdG8gdGhlIHBvd2VyIGYyLCB0 byBkIGRlY2ltYWwgcGxhY2VzLlxuIik7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEZO X0ZQQ09TOgorICAgICAgICBwcmludGYoIlxcZmZwY29zaW5lKGYxLGQpXG5cCisgIGYxID0gZmxv YXRpbmctcG9pbnQgbnVtYmVyIG9yIGludGVnZXIuXG5cCisgICBkID0gaW50ZWdlci5cbiIpOwor ICAgICAgICBwcmludGYoIlJldHVybnMgZmxvYXRpbmctcG9pbnQgbnVtYmVyOlxuXAorICBUaGUg Y29zaW5lIG9mIGFuZ2xlIGYxIChpbiByYWRpYW5zKSB0byBkIGRlY2ltYWwgcGxhY2VzLlxuIik7 CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEZOX0ZQU0lOOgorICAgICAgICBwcmludGYo IlxcZmZwc2luZShmMSxkKVxuXAorICBmMSA9IGZsb2F0aW5nLXBvaW50IG51bWJlciBvciBpbnRl Z2VyLlxuXAorICAgZCA9IGludGVnZXIuXG4iKTsKKyAgICAgICAgcHJpbnRmKCJSZXR1cm5zIGZs b2F0aW5nLXBvaW50IG51bWJlcjpcblwKKyAgVGhlIHNpbmUgb2YgYW5nbGUgZjEgKGluIHJhZGlh bnMpIHRvIGQgZGVjaW1hbCBwbGFjZXMuXG4iKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNh c2UgRk5fRlBUQU46CisgICAgICAgIHByaW50ZigiXFxmZnB0YW5nZW50KGYxLGQpXG5cCisgIGYx ID0gZmxvYXRpbmctcG9pbnQgbnVtYmVyIG9yIGludGVnZXIuXG5cCisgICBkID0gaW50ZWdlci5c biIpOworICAgICAgICBwcmludGYoIlJldHVybnMgZmxvYXRpbmctcG9pbnQgbnVtYmVyOlxuXAor ICBUaGUgdGFuZ2VudCBvZiBhbmdsZSBmMSAoaW4gcmFkaWFucykgdG8gZCBkZWNpbWFsIHBsYWNl cy5cbiIpOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBGTl9GUEVYUDoKKyAgICAgICAg cHJpbnRmKCJcXGZmcGV4cChmMSxkKVxuXAorICBmMSA9IGZsb2F0aW5nLXBvaW50IG51bWJlciBv ciBpbnRlZ2VyLlxuXAorICAgZCA9IGludGVnZXIuXG4iKTsKKyAgICAgICAgcHJpbnRmKCJSZXR1 cm5zIGZsb2F0aW5nLXBvaW50IG51bWJlcjpcblwKKyAgZSAodGhlIGJhc2Ugb2YgbmF0dXJhbCBs b2dhcml0aG1zKSByYWlzZWQgdG8gdGhlIGYxIHBvd2VyLFxuXAorICB0byBkIGRlY2ltYWwgcGxh Y2VzLlxuIik7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEZOX0ZQSU5UOgorICAgICAg ICBwcmludGYoIlxcZmZwaW50KGYxKVxuXAorICBmMSA9IGZsb2F0aW5nLXBvaW50IG51bWJlciBv ciBpbnRlZ2VyLlxuIik7CisgICAgICAgIHByaW50ZigiUmV0dXJucyBpbnRlZ2VyOlxuXAorICBU aGUgaW50ZWdlciBwYXJ0IG9mIGYxLlxuIik7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNl IEZOX0ZQTE9HOgorICAgICAgICBwcmludGYoIlxcZmZwbG9nMTAoZjEsZClcblwKKyAgZjEgPSBm bG9hdGluZy1wb2ludCBudW1iZXIgb3IgaW50ZWdlci5cblwKKyAgIGQgPSBpbnRlZ2VyLlxuIik7 CisgICAgICAgIHByaW50ZigiUmV0dXJucyBmbG9hdGluZy1wb2ludCBudW1iZXI6XG5cCisgIFRo ZSBsb2dhcml0aG0sIGJhc2UgMTAsIG9mIGYxIHRvIGQgZGVjaW1hbCBwbGFjZXMuXG4iKTsKKyAg ICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgRk5fRlBMTjoKKyAgICAgICAgcHJpbnRmKCJcXGZm cGxvZ24oZjEsZClcblwKKyAgZjEgPSBmbG9hdGluZy1wb2ludCBudW1iZXIgb3IgaW50ZWdlci5c blwKKyAgIGQgPSBpbnRlZ2VyLlxuIik7CisgICAgICAgIHByaW50ZigiUmV0dXJucyBmbG9hdGlu Zy1wb2ludCBudW1iZXI6XG5cCisgIFRoZSBuYXR1cmFsIGxvZ2FyaXRobSBvZiBmMSB0byBkIGRl Y2ltYWwgcGxhY2VzLlxuIik7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEZOX0ZQUk9V OgorICAgICAgICBwcmludGYoIlxcZmZwcm91bmQoZjEsZClcblwKKyAgZjEgPSBmbG9hdGluZy1w b2ludCBudW1iZXIgb3IgaW50ZWdlci5cblwKKyAgIGQgPSBpbnRlZ2VyLlxuIik7CisgICAgICAg IHByaW50ZigiUmV0dXJucyBmbG9hdGluZy1wb2ludCBudW1iZXI6XG5cCisgIGYxIHJvdW5kZWQg dG8gZCBkZWNpbWFsIHBsYWNlcy5cbiIpOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBG Tl9GUFNRUjoKKyAgICAgICAgcHJpbnRmKCJcXGZmcHNxcnQoZjEsZClcblwKKyAgZjEgPSBmbG9h dGluZy1wb2ludCBudW1iZXIgb3IgaW50ZWdlci5cblwKKyAgIGQgPSBpbnRlZ2VyLlxuIik7Cisg ICAgICAgIHByaW50ZigiUmV0dXJucyBmbG9hdGluZy1wb2ludCBudW1iZXI6XG5cCisgIFRoZSBz cXVhcmUgcm9vdCBvZiBmMSB0byBkIGRlY2ltYWwgcGxhY2VzLlxuIik7CisgICAgICAgIGJyZWFr OworI2VuZGlmIC8qIEZORkxPQVQgKi8KKworI2lmZGVmIENLQ0hBTk5FTElPCisgICAgICBjYXNl IEZOX0ZFT0Y6CisgICAgICAgIHByaW50ZigiXFxmX2VvZihuMSlcblwKKyAgbjEgPSBjaGFubmVs IG51bWJlci5cbiIpOworICAgICAgICBwcmludGYoIlJldHVybnMgbnVtYmVyOlxuXAorICAxIGlm IGNoYW5uZWwgbjEgYXQgZW5kIG9mIGZpbGUsIDAgb3RoZXJ3aXNlLlxuIik7CisgICAgICAgIGJy ZWFrOworICAgICAgY2FzZSBGTl9GUE9TOgorICAgICAgICBwcmludGYoIlxcZl9wb3MobjEpXG5c CisgIG4xID0gY2hhbm5lbCBudW1iZXIuXG4iKTsKKyAgICAgICAgcHJpbnRmKCJSZXR1cm5zIG51 bWJlcjpcblwKKyAgUmVhZC93cml0ZSBwb2ludGVyIG9mIGNoYW5uZWwgbjEgYXMgYnl0ZSBudW1i ZXIuXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEZOX05MSU5FOgorICAgICAgICBw cmludGYoIlxcZl9saW5lKG4xKVxuXAorICBuMSA9IGNoYW5uZWwgbnVtYmVyLlxuIik7CisgICAg ICAgIHByaW50ZigiUmV0dXJucyBudW1iZXI6XG5cCisgIFJlYWQvd3JpdGUgcG9pbnRlciBvZiBj aGFubmVsIG4xIGFzIGxpbmUgbnVtYmVyLlxuIik7CisgICAgICAgIGJyZWFrOworICAgICAgY2Fz ZSBGTl9GSUxOTzoKKyAgICAgICAgcHJpbnRmKCJcXGZfaGFuZGxlKG4xKVxuXAorICBuMSA9IGNo YW5uZWwgbnVtYmVyLlxuIik7CisgICAgICAgIHByaW50ZigiUmV0dXJucyBudW1iZXI6XG5cCisg IEZpbGUgJXMgb2Ygb3BlbiBmaWxlIG9uIGNoYW5uZWwgbjEuXG4iLAorI2lmZGVmIE9TMgorICAg ICAgICAgICAgICAgImhhbmRsZSIKKyNlbHNlCisgICAgICAgICAgICAgICAiZGVzY3JpcHRvciIK KyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAgICAgICAgICk7CisgICAgICAgIGJyZWFrOworICAg ICAgY2FzZSBGTl9GU1RBVDoKKyAgICAgICAgcHJpbnRmKCJcXGZfc3RhdHVzKG4xKVxuXAorICBu MSA9IGNoYW5uZWwgbnVtYmVyLlxuIik7CisgICAgICAgIHByaW50ZigiUmV0dXJucyBudW1iZXI6 XG5cCisgIFN1bSBvZiBvcGVuIG1vZGVzIG9mIGNoYW5uZWwgbjE6IDEgPSByZWFkOyAyID0gd3Jp dGU7IDQgPSBhcHBlbmQsIG9yOlxuXAorICAwIGlmIG5vdCBvcGVuLlxuIik7CisgICAgICAgIGJy ZWFrOworICAgICAgY2FzZSBGTl9GR0NIQVI6CisgICAgICAgIHByaW50ZigiXFxmX2dldGNoYXIo bjEpXG5cCisgIG4xID0gY2hhbm5lbCBudW1iZXIuXG4iKTsKKyAgICAgICAgcHJpbnRmKCIgIFJl YWRzIGEgY2hhcmFjdGVyIGZyb20gY2hhbm5lbCBuMSBhbmQgcmV0dXJucyBpdC5cbiIpOworICAg ICAgICBicmVhazsKKyAgICAgIGNhc2UgRk5fRkdMSU5FOgorICAgICAgICBwcmludGYoIlxcZl9n ZXRsaW5lKG4xKVxuXAorICBuMSA9IGNoYW5uZWwgbnVtYmVyLlxuIik7CisgICAgICAgIHByaW50 ZigiICBSZWFkcyBhIGxpbmUgZnJvbSBjaGFubmVsIG4xIGFuZCByZXR1cm5zIGl0LlxuIik7Cisg ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBGTl9GR0JMSzoKKyAgICAgICAgcHJpbnRmKCJcXGZf Z2V0YmxvY2sobjEsbjIpXG5cCisgIG4xID0gY2hhbm5lbCBudW1iZXIsIG4yID0gc2l6ZVxuIik7 CisgICAgICAgIHByaW50ZigKKyIgIFJlYWRzIGEgYmxvY2sgb2YgbjIgY2hhcmFjdGVycyBmcm9t IGNoYW5uZWwgbjEgYW5kIHJldHVybnMgaXQuXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBj YXNlIEZOX0ZQQ0hBUjoKKyAgICAgICAgcHJpbnRmKCJcXGZfcHV0Y2hhcihuMSxjKVxuXAorICBu MSA9IGNoYW5uZWwgbnVtYmVyLCBjID0gY2hhcmFjdGVyXG4iKTsKKyAgICAgICAgcHJpbnRmKCIg IFdyaXRlcyBhIGNoYXJhY3RlciB0byBjaGFubmVsIG4xLlxuXAorUmV0dXJucyBudW1iZXI6XG5c CisgIDEgaWYgc3VjY2Vzc2Z1bCwgb3RoZXJ3aXNlIGEgbmVnYXRpdmUgZXJyb3IgY29kZS5cbiIp OworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRk5fRlBMSU5FOgorICAgICAgICBwcmludGYo IlxcZl9wdXRsaW5lKG4xLHMxKVxuXAorICBuMSA9IGNoYW5uZWwgbnVtYmVyLCBzMSA9IHN0cmlu Z1xuIik7CisgICAgICAgIHByaW50ZigKKyIgIFdyaXRlcyB0aGUgc3RyaW5nIHMxIHRvIGNoYW5u ZWwgbjEgYW5kIGFkZHMgYSBsaW5lIHRlcm1pbmF0b3IuXG5cCitSZXR1cm5zIG51bWJlcjpcbiIp OworICAgICAgICBwcmludGYoIiAgSG93IG1hbnkgY2hhcmFjdGVycyB3cml0dGVuIGlmIHN1Y2Nl c3NmdWw7XG5cCisgIE90aGVyd2lzZSBhIG5lZ2F0aXZlIGVycm9yIGNvZGUuXG4iCisgICAgICAg ICAgICAgICApOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRk5fRlBCTEs6CisgICAgICAg IHByaW50ZigiXFxmX3B1dGJsb2NrKG4xLHMxKVxuXAorICBuMSA9IGNoYW5uZWwgbnVtYmVyLCBz MSA9IHN0cmluZ1xuIik7CisgICAgICAgIHByaW50ZigKKyIgIFdyaXRlcyB0aGUgc3RyaW5nIHMx IHRvIGNoYW5uZWwgbjEuXG5cCisgIFJldHVybnMgbnVtYmVyOlxuIik7CisgICAgICAgIHByaW50 ZigiICBIb3cgbWFueSBjaGFyYWN0ZXJzIHdyaXR0ZW4gaWYgc3VjY2Vzc2Z1bDtcblwKKyAgT3Ro ZXJ3aXNlIGEgbmVnYXRpdmUgZXJyb3IgY29kZS5cbiIKKyAgICAgICAgICAgICAgICk7CisgICAg ICAgIGJyZWFrOworICAgICAgY2FzZSBGTl9GRVJNU0c6CisgICAgICAgIHByaW50ZigiXFxmX2Vy cm1zZyhbbjFdKVxuXAorICBuMSA9IG51bWVyaWMgZXJyb3IgY29kZSwgXFx2KGZfZXJyb3IpIGJ5 IGRlZmF1bHQuXG4iKTsKKyAgICAgICAgcHJpbnRmKCIgIFJldHVybnMgdGhlIGFzc29jaWF0ZWQg ZXJyb3IgbWVzc2FnZSBzdHJpbmcuXG4iKTsKKyAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogQ0tD SEFOTkVMSU8gKi8KKworICAgICAgY2FzZSBGTl9BQURVTVA6CisgICAgICAgIHByaW50ZigiXFxm YWFjb252ZXJ0KG5hbWUsJmFbLCZiXSlcblwKKyAgbmFtZSA9IG5hbWUgb2YgYXNzb2NpYXRpdmUg YXJyYXksICZhIGFuZCAmYiA9IG5hbWVzIG9mIHJlZ3VsYXIgYXJyYXlzLlxuIik7CisgICAgICAg IHByaW50ZigKKyIgIENvbnZlcnRzIHRoZSBnaXZlbiBhc3NvY2lhdGl2ZSBhcnJheSBpbnRvIHR3 byByZWd1bGFyIGFycmF5cywgJmEgYW5kICZiLFxuXAorICBjb250YWluaW5nIHRoZSBpbmRpY2Vz IGFuZCB2YWx1ZXMsIHJlc3BlY3RpdmVseTpcbiIpOworICAgICAgICBwcmludGYoIlJldHVybnMg bnVtYmVyOlxuXAorICBIb3cgbWFueSBlbGVtZW50cyB3ZXJlIGNvbnZlcnRlZC5cbiIpOworICAg ICAgICBicmVhazsKKworI2lmZGVmIENLX0tFUkJFUk9TCisgICAgICBjYXNlIEZOX0tSQl9USzoK KyAgICAgICAgcHJpbnRmKCJcXGZrcmJ0aWNrZXRzKG4pXG5cCisgIG4gPSBLZXJiZXJvcyB2ZXJz aW9uIG51bWJlciAoNCBvciA1KS5cblwKKyAgUmV0dXJucyBzdHJpbmc6XG5cCisgIFRoZSBudW1i ZXIgb2YgYWN0aXZlIEtlcmJlcm9zIDQgb3IgNSB0aWNrZXRzLlxuXAorICBSZXNldHMgdGhlIHRp Y2tldCBsaXN0IHVzZWQgYnkgXFxma3JibmV4dHRpY2tldChuKS5cbiIpOworICAgICAgICBicmVh azsKKworICAgICAgY2FzZSBGTl9LUkJfTlg6CisgICAgICAgIHByaW50ZigiXFxma3JibmV4dHRp Y2tldChuKVxuXAorICBuID0gS2VyYmVyb3MgdmVyc2lvbiBudW1iZXIgKDQgb3IgNSkuXG5cCisg IFJldHVybnMgc3RyaW5nOlxuXAorICAgIFRoZSBuZXh0IHRpY2tldCBpbiB0aGUgS2VyYmVyb3Mg NCBvciA1IHRpY2tldCBsaXN0IHRoYXQgd2FzIHNldCB1cCBieVxuXAorICAgIHRoZSBtb3N0IHJl Y2VudCBpbnZvY2F0aW9uIG9mIFxcZmtyYnRpY2tldHMobikuXG4iKTsKKyAgICAgICAgYnJlYWs7 CisKKyAgICAgIGNhc2UgRk5fS1JCX0lWOgorICAgICAgICBwcmludGYoIlxcZmtyYmlzdmFsaWQo bixuYW1lKVxuXAorICBuICAgID0gS2VyYmVyb3MgdmVyc2lvbiBudW1iZXIgKDQgb3IgNSkuXG5c CisgIG5hbWUgPSBhIHRpY2tldCBuYW1lIGFzIHJldHVybmVkIGJ5IFxcZmtyYm5leHR0aWNrZXQo bikuXG5cCisgIFJldHVybnMgbnVtYmVyOlxuXAorICAgIDEgaWYgdGhlIHRpY2tldCBpcyB2YWxp ZCwgMCBpZiBub3QgdmFsaWQuXG5cCisgICAgQSB0aWNrZXQgaXMgdmFsaWQgaWYgYWxsIHRoZSBm b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgdHJ1ZTpcblxuIik7CisgICAgICAgIHByaW50ZigiXG5c CisgICAgKGkpICAgaXQgZXhpc3RzIGluIHRoZSBjdXJyZW50IGNhY2hlIGZpbGU7XG5cCisgICAg KGlpKSAgaXQgaXMgbm90IGV4cGlyZWQ7XG5cCisgICAgKGlpaSkgaXQgaXMgbm90IG1hcmtlZCBp bnZhbGlkIChLNSBvbmx5KTtcblwKKyAgICAoaXYpICBpdCB3YXMgaXNzdWVkIGZyb20gdGhlIGN1 cnJlbnQgSVAgYWRkcmVzc1xuIik7CisgICAgICAgIHByaW50ZigiXG4gIFRoaXMgdmFsdWUgY2Fu IGJlIHVzZWQgaW4gYW4gSUYgc3RhdGVtZW50LCBlLmcuOlxuXG4iKTsKKyAgICAgICAgcHJpbnRm KCIgICAgaWYgXFxma3JiaXN2YWxpZCg0LGtyYnRndC5GT08uQkFSLkVEVUBGT08uQkFSLkVEVSkg Li4uXG4iKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgRk5fS1JCX1RUOgorICAgICAg ICBwcmludGYoIlxcZmtyYnRpbWVsZWZ0KG4sbmFtZSlcblwKKyAgbiAgICA9IEtlcmJlcm9zIHZl cnNpb24gbnVtYmVyICg0IG9yIDUpLlxuXAorICBuYW1lID0gYSB0aWNrZXQgbmFtZSBhcyByZXR1 cm5lZCBieSBcXGZrcmJuZXh0dGlja2V0KG4pLlxuXAorICBSZXR1cm5zIHN0cmluZzpcblwKKyAg ICBUaGUgbnVtYmVyIG9mIHNlY29uZHMgcmVtYWluaW5nIGluIHRoZSB0aWNrZXQncyBsaWZldGlt ZS5cbiIpOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBGTl9LUkJfRkc6CisgICAgICAg IHByaW50ZigiXFxma3JiZmxhZ3MobixuYW1lKVxuXAorICBuICAgID0gS2VyYmVyb3MgdmVyc2lv biBudW1iZXIgKDQgb3IgNSkuXG5cCisgIG5hbWUgPSBhIHRpY2tldCBuYW1lIGFzIHJldHVybmVk IGJ5IFxcZmtyYm5leHR0aWNrZXQobikuXG5cCisgIFJldHVybnMgc3RyaW5nOlxuIik7CisgICAg ICAgIHByaW50ZigKKyIgICAgVGhlIGZsYWdzIHN0cmluZyBhcyByZXBvcnRlZCB3aXRoIEFVVEgg SzUgTElTVCAvRkxBR1MuICBUaGlzIHN0cmluZyBjYW5cblwKKyAgICBiZSBzZWFyY2hlZCBmb3Ig YSBwYXJ0aWN1bGFyIGZsYWcgdXNpbmcgdGhlIFxcZmluZGV4KCkgZnVuY3Rpb24gd2hlblxuXAor ICAgIFNFVCBDQVNFIGlzIE9OIChmb3IgY2FzZSBzZW5zaXRpdmUgc2VhcmNoZXMpLiAgRmxhZyBz dHJpbmdzIGFyZSBvbmx5XG5cCisgICAgYXZhaWxhYmxlIGZvciBLNSB0aWNrZXRzLlxuIik7Cisg ICAgICAgIGJyZWFrOworI2VuZGlmIC8qIENLX0tFUkJFUk9TICovCisKKyAgICAgIGNhc2UgRk5f UEFUVEVSTjoKKyAgICAgICAgcHJpbnRmKCJcXGZwYXR0ZXJuKHMpXG5cCisgIHMgPSBzdHJpbmdc blwKKyAgUmV0dXJucyBzdHJpbmc6IHMgd2l0aCBhbnkgdmFyaWFibGVzLCBldGMsIGV2YWx1YXRl ZCBpbiB0aGUgbm9ybWFsIG1hbm5lci5cbiIKKyAgICAgICAgICAgICAgICk7CisgICAgICAgIHBy aW50ZigiXAorICBGb3IgdXNlIHdpdGggSU5QVVQsIE1JTlBVVCwgYW5kIFJFSU5QVVQgdG8gZGVj bGFyZSB0aGF0IGEgc2VhcmNoIHRhcmdldCBpc1xuXAorICBhIHBhdHRlcm4gcmF0aGVyIHRoYW4g YSBsaXRlcmFsIHN0cmluZy5cbiIpOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBGTl9I RVgyTjoKKyAgICAgICAgcHJpbnRmKCJcXGZoZXgybihzKVxuXAorICBzID0gaGV4YWRlY2ltYWwg bnVtYmVyXG5cCisgIFJldHVybnMgZGVjaW1hbCBlcXVpdmFsZW50LlxuIik7CisgICAgICAgIGJy ZWFrOworCisgICAgICBjYXNlIEZOX0hFWDJJUDoKKyAgICAgICAgcHJpbnRmKCJcXGZoZXgyaXAo cylcblwKKyAgcyA9IDgtZGlnaXQgaGV4YWRlY2ltYWwgbnVtYmVyXG5cCisgIFJldHVybnMgdGhl IGVxdWl2YWxlbnQgZGVjaW1hbCBkb3R0ZWQgSVAgYWRkcmVzcy5cbiIpOworICAgICAgICBicmVh azsKKworICAgICAgY2FzZSBGTl9JUDJIRVg6CisgICAgICAgIHByaW50ZigiXFxmaXAyaGV4KHMp XG5cCisgIHMgPSBkZWNpbWFsIGRvdHRlZCBJUCBhZGRyZXNzXG5cCisgIFJldHVybnMgdGhlIGVx dWl2YWxlbnQgOC1kaWdpdCBoZXhhZGVjaW1hbCBudW1iZXIuXG4iKTsKKyAgICAgICAgYnJlYWs7 CisKKyAgICAgIGNhc2UgRk5fT0NUMk46CisgICAgICAgIHByaW50ZigiXFxmb2N0Mm4ocylcblwK KyAgcyA9IG9jdGFsIG51bWJlclxuXAorICBSZXR1cm5zIGRlY2ltYWwgZXF1aXZhbGVudC5cbiIp OworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBGTl9UT0I2NDoKKyAgICAgICAgcHJpbnRm KCJcXGI2NGVuY29kZShzKVxuXAorICBzID0gc3RyaW5nIGNvbnRhaW5pbmcgbm8gTlVMIGJ5dGVz XG5cCisgIFJldHVybnMgQmFzZS02NCBlbmNvZGluZyBvZiBzdHJpbmcuXG4iKTsKKyAgICAgICAg YnJlYWs7CisKKyAgICAgIGNhc2UgRk5fRk1CNjQ6CisgICAgICAgIHByaW50ZigiXFxiNjRkZWNv ZGUocylcblwKKyAgcyA9IHN0cmluZyBpbiBCYXNlLTY0IG5vdGF0aW9uXG5cCisgIFJldHVybnMg dGhlIGRlY29kZWQgc3RyaW5nIG9yIGFuIGVycm9yIGNvZGUgaWYgcyBub3QgdmFsaWQuXG4iKTsK KyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgRk5fUkFESVg6CisgICAgICAgIHByaW50Zigi XFxmcmFkaXgocyxuMSxuMilcblwKKyAgcyA9IG51bWJlciBpbiByYWRpeCBuMVxuXAorICBSZXR1 cm5zIHRoZSBudW1iZXIncyByZXByZXNlbnRhdGlvbiBpbiByYWRpeCBuMi5cbiIpOworICAgICAg ICBicmVhazsKKworICAgICAgY2FzZSBGTl9KT0lOOgorICAgICAgICBwcmludGYoIlxcZmpvaW4o JmFbLHNbLG4xWyxuMl1dXSlcblwKKyAgJmEgPSBhcnJheSBkZXNpZ25hdG9yLCBjYW4gaW5jbHVk ZSByYW5nZSBzcGVjaWZpZXIuXG5cCisgIHMgID0gb3B0aW9uYWwgc2VwYXJhdG9yLlxuIik7Cisg ICAgICAgIHByaW50ZigiXAorICBuMSA9IG5vbnplcm8gdG8gcHV0IGdyb3VwaW5nIGFyb3VuZCBl bGVtZW50cyB0aGF0IGNvbnRhaW4gc3BhY2VzO1xuXAorICAgICAgIHNlZSBcXGZ3b3JkKCkgZ3Jv dXBpbmcgbWFzayBmb3IgdmFsdWVzIG9mIG4uXG4iKTsKKyAgICAgICAgcHJpbnRmKCJcCisgIG4y ID0gMCBvciBvbWl0dGVkIHRvIHB1dCBzcGFjZXMgYmV0d2VlbiBlbGVtZW50czsgbm9uemVybyB0 byBvbWl0IHRoZW0uXG4iKTsKKyAgICAgICAgcHJpbnRmKCJcCisgIFJldHVybnMgdGhlIChzZWxl Y3RlZCkgZWxlbWVudHMgb2YgdGhlIGFycmF5IGpvaW5lZCB0byB0b2dldGhlcixcblwKKyAgc2Vw YXJhdGVkIGJ5IHRoZSBzZXBhcmF0b3IuXG4iKTsKKwlwcmludGYoIlxuXAorICBJZiBzIGlzIENT ViAobGl0ZXJhbGx5KSwgdGhhdCBtZWFucyB0aGUgYXJyYXkgaXMgdG8gYmUgdHJhbnNmb3JtZWQg aW50byBhXG5cCisgIGNvbW1hLXNlcGFyYXRlZCBsaXN0LiAgTm8gb3RoZXIgYXJndW1lbnRzIGFy ZSBuZWVkZWQuICBJZiBzIGlzIFRTViwgdGhlblxuXAorICBhIHRhYi1zZXBhcmF0ZWQgbGlzdCBp cyBjcmVhdGVkLlxuIik7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEZOX1NVQlNUOgor ICAgICAgICBwcmludGYoIlxcZnN1YnN0aXR1dGUoczEsczIsczMpXG5cCisgIHMxID0gU291cmNl IHN0cmluZy5cblwKKyAgczIgPSBMaXN0IG9mIGNoYXJhY3RlcnMgdG8gYmUgdHJhbnNsYXRlZC5c blwKKyAgczMgPSBMaXN0IG9mIGNoYXJhY3RlcnMgdG8gdHJhbnNsYXRlIHRoZW0gdG8uXG4iKTsK KyAgICAgICAgcHJpbnRmKAorIiAgUmV0dXJuczogczEsIHdpdGggZWFjaCBjaGFyYWN0ZXIgdGhh dCBpcyBpbiBzMiByZXBsYWNlZCBieSB0aGVcblwKKyAgY29ycmVzcG9uZGluZyBjaGFyYWN0ZXIg aW4gczMuICBzMiBhbmQgczMgY2FuIGNvbnRhaW4gQVNDSUkgcmFuZ2VzLFxuXAorICBsaWtlIFth LXpdLiAgQW55IGNoYXJhY3RlcnMgaW4gczIgdGhhdCBkb24ndCBoYXZlIGNvcnJlc3BvbmRpbmdc blwKKyAgY2hhcmFjdGVycyBpbiBzMyAoYWZ0ZXIgcmFuZ2UgZXhwYW5zaW9uKSBhcmUgcmVtb3Zl ZCBmcm9tIHRoZSByZXN1bHQuXG5cCisgIFRoaXMgZnVuY3Rpb24gd29ya3Mgb25seSB3aXRoIHNp bmdsZS1ieXRlIGNoYXJhY3Rlci1zZXRzXG4iKTsKKyAgICAgICAgYnJlYWs7CisKKyNpZm5kZWYg Tk9TRVhQCisgICAgICBjYXNlIEZOX1NFWFA6CisgICAgICAgIHByaW50ZigiXFxmc2V4cHJlc3Np b24oczEpXG5cCisgIHMxID0gUy1FeHByZXNzaW9uLlxuIik7CisgICAgICAgIHByaW50ZigiICBS ZXR1cm5zOiBUaGUgcmVzdWx0IG9mIGV2YWx1YXRpbmcgczEuXG4iKTsKKyAgICAgICAgYnJlYWs7 CisKKyNlbmRpZiAvKiBOT1NFWFAgKi8KKworICAgICAgY2FzZSBGTl9DTURTVEs6CisgICAgICAg IHByaW50ZigiXFxmY21kc3RhY2sobjEsbjIpXG5cCisgIG4xID0gQ29tbWFuZC1zdGFjayBsZXZl bCwgMCB0byBcXHYoY21kbGV2ZWwpLCBkZWZhdWx0IFxcdihjbWRsZXZlbCkuXG5cCisgIG4yID0g RnVuY3Rpb24gY29kZSwgMCBvciAxLlxuIik7CisgICAgICAgIHByaW50ZigiUmV0dXJuczpcbiIp OworICAgICAgICBwcmludGYoIiAgbjIgPSAwOiBuYW1lIG9mIG9iamVjdCBhdCBzdGFjayBsZXZl bCBuMVxuXAorICBuMiA9IDE6IHR5cGUgb2Ygb2JqZWN0IGF0IHN0YWNrIGxldmVsIG4xOlxuXAor ICAgICAwID0gaW50ZXJhY3RpdmUgcHJvbXB0XG5cCisgICAgIDEgPSBjb21tYW5kIGZpbGVcblwK KyAgICAgMiA9IG1hY3JvXG4iCisgICAgICAgICAgICAgICApOworICAgICAgICAgIGJyZWFrOwor CisjaWZkZWYgQ0tGTE9BVAorICAgICAgY2FzZSBGTl9ESUZEQVRFOgorICAgICAgICBwcmludGYo IlxcZmRpZmZkYXRlcyhkMSxkMilcblwKKyAgZDEgPSBmcmVlLWZvcm1hdCBkYXRlIGFuZC9vciB0 aW1lIChkZWZhdWx0ID0gTk9XKS5cblwKKyAgZDIgPSBkaXR0by5cbiIpOworICAgICAgICBwcmlu dGYoIlJldHVybnM6XG4iKTsKKyAgICAgICAgcHJpbnRmKCIgIERpZmZlcmVuY2UgZXhwcmVzc2Vk IGFzIGRlbHRhIHRpbWU6XG4iKTsKKyAgICAgICAgcHJpbnRmKCIgIE5lZ2F0aXZlIGlmIGQyIGlz IGxhdGVyIHRoYW4gZDEsIG90aGVyd2lzZSBwb3NpdGl2ZS5cbiIpOworICAgICAgICBicmVhazsK KyNlbmRpZiAvKiBDS0ZMT0FUICovCisKKyAgICAgIGNhc2UgRk5fQ01QREFURToKKyAgICAgICAg cHJpbnRmKCJcXGZjbXBkYXRlcyhkMSxkMilcblwKKyAgZDEgPSBmcmVlLWZvcm1hdCBkYXRlIGFu ZC9vciB0aW1lIChkZWZhdWx0ID0gTk9XKS5cblwKKyAgZDIgPSBkaXR0by5cbiIpOworICAgICAg ICBwcmludGYoIlJldHVybnM6XG4iKTsKKyAgICAgICAgcHJpbnRmKCIgIDAgaWYgZDEgaXMgZXF1 YWwgdG8gZDI7XG5cCisgIDEgaWYgZDEgaXMgbGF0ZXIgdGhhbiBkMjtcblwKKyAtMSBpZiBkMSBp cyBlYXJsaWVyIHRoYW4gZDIuXG4iKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgRk5f VE9HTVQ6CisgICAgICAgIHByaW50ZigiXFxmdXRjZGF0ZShkMSlcblwKKyAgZDEgPSBmcmVlLWZv cm1hdCBkYXRlIGFuZC9vciB0aW1lIChkZWZhdWx0ID0gTk9XKS5cbiIpOworICAgICAgICBwcmlu dGYoIlJldHVybnM6XG4iKTsKKyAgICAgICAgcHJpbnRmKCIgIERhdGUtdGltZSBjb252ZXJ0ZWQg dG8gVVRDIChHTVQpIHl5eXltbWRkIGhoOm1tOnNzLlxuIik7CisgICAgICAgIGJyZWFrOworCisj aWZkZWYgVENQU09DS0VUCisgICAgICBjYXNlIEZOX0hTVEFERDoKKyAgICAgICAgcHJpbnRmKCJc XGZhZGRyMm5hbWUocylcblwKKyAgcyA9IG51bWVyaWMgSVAgYWRkcmVzcy5cbiIpOworICAgICAg ICBwcmludGYoIlJldHVybnM6XG4iKTsKKyAgICAgICAgcHJpbnRmKCIgIENvcnJlc3BvbmRpbmcg SVAgaG9zdG5hbWUgaWYgZm91bmQsIG90aGVyd2lzZSBudWxsLlxuIik7CisgICAgICAgIGJyZWFr OworICAgICAgY2FzZSBGTl9IU1ROQU06CisgICAgICAgIHByaW50ZigiXFxmbmFtZTJhZGRyKHMp XG5cCisgIHMgPSBJUCBob3N0IG5hbWUuXG4iKTsKKyAgICAgICAgcHJpbnRmKCJSZXR1cm5zOlxu Iik7CisgICAgICAgIHByaW50ZigiICBDb3JyZXNwb25kaW5nIG51bWVyaWMgSVAgYWRkcmVzcyBp ZiBmb3VuZCwgZWxzZSBudWxsLlxuIik7CisgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIFRDUFNP Q0tFVCAqLworCisgICAgICBjYXNlIEZOX0RFTFNFQzoKKyAgICAgICAgcHJpbnRmKCJcXGZkZWx0 YTJzZWNzKGR0KVxuXAorICBkdCA9IERlbHRhIHRpbWUsIGUuZy4gKzNkMTQ6Mjc6NTIuXG4iKTsK KyAgICAgICAgcHJpbnRmKCJSZXR1cm5zOlxuIik7CisgICAgICAgIHByaW50ZigiICBUaGUgY29y cmVzcG9uZGluZyBudW1iZXIgb2Ygc2Vjb25kcy5cbiIpOworICAgICAgICBicmVhazsKKworICAg ICAgY2FzZSBGTl9QQ19EVToKKyAgICAgICAgcHJpbnRmKCJcXGZkb3MydW5peHBhdGgocClcblwK KyAgcCA9IHN0cmluZywgRE9TIHBhdGhuYW1lLlxuIik7CisgICAgICAgIHByaW50ZigiUmV0dXJu czpcbiIpOworICAgICAgICBwcmludGYoIiAgVGhlIGFyZ3VtZW50IGNvbnZlcnRlZCB0byBhIFVu aXggcGF0aG5hbWUuXG4iKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgRk5fUENfVUQ6 CisgICAgICAgIHByaW50ZigiXFxmdW5peDJkb3NwYXRoKHApXG5cCisgIHAgPSBzdHJpbmcsIFVu aXggcGF0aG5hbWUuXG4iKTsKKyAgICAgICAgcHJpbnRmKCJSZXR1cm5zOlxuIik7CisgICAgICAg IHByaW50ZigiICBUaGUgYXJndW1lbnQgY29udmVydGVkIHRvIGEgRE9TIHBhdGhuYW1lLlxuIik7 CisgICAgICAgIGJyZWFrOworCisjaWZkZWYgRk5fRVJSTVNHCisgICAgICBjYXNlIEZOX0VSUk1T RzoKKyAgICAgICAgcHJpbnRmKCJcXGZlcnJzdHJpbmcobilcblwKKyAgbiA9IHBsYXRmb3JtLWRl cGVuZGVudCBudW1lcmljIGVycm9yIGNvZGUuXG4iKTsKKyAgICAgICAgcHJpbnRmKCJSZXR1cm5z OlxuIik7CisgICAgICAgIHByaW50ZigiICBUaGUgY29ycmVzcG9uZGluZyBlcnJvciBzdHJpbmcu XG4iKTsKKyAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogRk5fRVJSTVNHICovCisKKyAgICAgIGNh c2UgRk5fS1dWQUw6CisgICAgICAgIHByaW50ZigiXFxma2V5d29yZHZhbHVlKHMxWyxzMl0pXG5c CisgIHMxID0gc3RyaW5nIG9mIHRoZSBmb3JtIFwibmFtZT12YWx1ZVwiXG5cCisgIHMyID0gb25l IG1vcmUgc2VwYXJhdG9yIGNoYXJhY3RlcnMgKGRlZmF1bHQgc2VwYXJhdG9yIGlzIFwiPVwiKVxu Iik7CisgICAgICAgIHByaW50ZigiICAgIEFzc2lnbnMgdGhlIHZhbHVlLCBpZiBhbnksIHRvIHRo ZSBuYW1lZCBtYWNybyBhbmQgc2V0c1xuIik7CisgICAgICAgIHByaW50ZigiICAgIHRoZSBcXHYo bGFzdGtleXdvcmR2YWx1ZSkgdG8gdGhlIG1hY3JvIG5hbWUuXG4iKTsKKyAgICAgICAgcHJpbnRm KCIgICAgSWYgbm8gdmFsdWUgaXMgZ2l2ZW4sIHRoZSBtYWNybyBpcyB1bmRlZmluZWQuXG4iKTsK KyAgICAgICAgcHJpbnRmKCJSZXR1cm5zOlxuIik7CisgICAgICAgIHByaW50ZigiIC0xIG9uIGVy cm9yXG4iKTsKKyAgICAgICAgcHJpbnRmKCIgIDAgaWYgbm8ga2V5d29yZCBvciB2YWx1ZSB3ZXJl IGZvdW5kXG4iKTsKKyAgICAgICAgcHJpbnRmKCIgIDEgaWYgYSBrZXl3b3JkIHdhcyBmb3VuZCBi dXQgbm8gdmFsdWVcbiIpOworICAgICAgICBwcmludGYoIiAgMiBpZiBhIGtleXdvcmQgYW5kIGEg dmFsdWUgd2VyZSBmb3VuZFxuIik7CisgICAgICAgIHByaW50ZigiU3lub255bTogXFxrd3ZhbHVl KHMxWyxzMl0pXG4iKTsKKyAgICAgICAgYnJlYWs7CisKKyNpZmRlZiBDT01NRU5UCisgICAgICBj YXNlIEZOX1NMRUVQOgorICAgICAgICBwcmludGYoIlxcZnNsZWVwKG4pXG5cCisgIG4gPSBudW1i ZXIgb2Ygc2Vjb25kc1xuIik7CisgICAgICAgIHByaW50ZigiICAgIFBhdXNlcyBmb3IgdGhlIGdp dmVuIG51bWJlciBvZiBzZWNvbmRzLlxuIik7CisgICAgICAgIHByaW50ZigiUmV0dXJuczogdGhl IGVtcHR5IHN0cmluZy5cbiIpOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBGTl9NU0xF RVA6CisgICAgICAgIHByaW50ZigiXFxmbXNsZWVwKG4pXG5cCisgIG4gPSBudW1iZXIgb2YgbWls bGlzZWNvbmRzXG4iKTsKKyAgICAgICAgcHJpbnRmKCIgICAgUGF1c2VzIGZvciB0aGUgZ2l2ZW4g bnVtYmVyIG9mIG1pbGxpc2Vjb25kcy5cbiIpOworICAgICAgICBwcmludGYoIlJldHVybnM6IHRo ZSBlbXB0eSBzdHJpbmcuXG4iKTsKKyAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogQ09NTUVOVCAq LworCisjaWZkZWYgTlQKKyAgICAgIGNhc2UgRk5fU05BTUU6CisgICAgICAgIHByaW50ZigiXFxm c2hvcnRwYXRobmFtZShzKVxuXAorICBzID0gZmlsZSBvciBkaXJlY3RvcnkgbmFtZSBzdHJpbmdc biIpOworICAgICAgICBwcmludGYoIiAgICBSZXR1cm5zIHRoZSBzaG9ydCBwYXRoIGZvcm0gb2Yg dGhlIGdpdmVuIGlucHV0LlxuIik7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEZOX0xO QU1FOgorICAgICAgICBwcmludGYoIlxcZmxvbmdwYXRobmFtZShzKVxuXAorICBzID0gZmlsZSBv ciBkaXJlY3RvcnkgbmFtZSBzdHJpbmdcbiIpOworICAgICAgICBwcmludGYoIiAgICBSZXR1cm5z IHRoZSBsb25nIHBhdGggZm9ybSBvZiB0aGUgZ2l2ZW4gaW5wdXQuXG4iKTsKKyAgICAgICAgYnJl YWs7CisjZWxzZQorICAgICAgY2FzZSBGTl9TTkFNRToKKyAgICAgICAgcHJpbnRmKCJcXGZzaG9y dHBhdGhuYW1lKHMpXG5cCisgICAgU3lub255bSBmb3IgXGZwYXRobmFtZSgpXG4iKTsKKyAgICAg ICAgYnJlYWs7CisKKyAgICAgIGNhc2UgRk5fTE5BTUU6CisgICAgICAgIHByaW50ZigiXFxmbG9u Z3BhdGhuYW1lKHMpXG5cCisgICAgU3lub255bSBmb3IgXGZwYXRobmFtZSgpXG4iKTsKKyAgICAg ICAgYnJlYWs7CisjZW5kaWYgLyogTlQgKi8KKworICAgICAgY2FzZSBGTl9FTUFJTDoKKyAgICAg ICAgcHJpbnRmKCJcXGZlbWFpbGFkZHJlc3MocylcblwKKyAgcyA9IEZyb206IG9yIFNlbmRlcjog aGVhZGVyIGZyb20gYW4gUkZDMjgyMi1mb3JtYXQgZW1haWwgbWVzc2FnZVxuIik7CisgICAgICAg IHByaW50ZigiICAgIEV4dHJhY3RzIGFuZCByZXR1cm5zIHRoZSBlbWFpbCBhZGRyZXNzLlxuIik7 CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEZOX1BJQ1RVUkU6CisgICAgICAgIHByaW50 ZigiXFxmcGljdHVyZWluZm8oc1ssJmFdKVxuXAorICBzICA9IEZpbGUgc3BlY2lmaWNhdGlvbiBv ZiBhIEpQRyBvciBHSUYgcGljdHVyZSBmaWxlLlxuXAorICAmYSA9IE9wdGlvbmFsIGFycmF5IG5h bWUuXG5cbiIpOworICAgICAgICBwcmludGYoIlJldHVybnMgaW50ZWdlcjpcblwKKyAgMCBpZiBm aWxlIG5vdCBmb3VuZCBvciBub3QgcmVjb2duaXplZDtcblwKKyAgMSBpZiBvcmllbnRhdGlvbiBp cyBsYW5kc2NhcGU7XG5cCisgIDIgaWYgb3JpZW50YXRpb24gaXMgcG9ydHJhaXQuXG5cbiIpOyAK KwlwcmludGYoIiAgSWYgYW4gYXJyYXkgbmFtZSBpcyBpbmNsdWRlZCwgZWxlbWVudCAxIGlzIGZp bGxlZCBcCitpbiB3aXRoIHRoZSBpbWFnZSB3aWR0aFxuXAorICBpbiBwaXhlbHMsIGFuZCBlbGVt ZW50IDIgdGhlIGltYWdlIGhlaWdodC5cbiIpOworCWJyZWFrOworCisgICAgICBjYXNlIEZOX1BJ RDoKKyAgICAgICAgcHJpbnRmKCJcXGZnZXRwaWRpbmZvKG4xKVxuXAorIG4xID0gTnVtZXJpYyBw cm9jZXNzIElEXG4iKTsKKyAgICAgICAgcHJpbnRmKCJSZXR1cm5zIGludGVnZXI6XG5cCisgLTEg b24gZmFpbHVyZSB0byBnZXQgaW5mb3JtYXRpb247XG5cCisgIDEgaWYgbjEgaXMgdGhlIElEIG9m IGFuIGFjdGl2ZSBwcm9jZXNzO1xuXAorICAwIGlmIHRoZSBwcm9jZXNzIGRvZXMgbm90IGV4aXN0 LlxuIik7IAorICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBGTl9GVU5DOgorCXByaW50Zigi XFxmZnVuY3Rpb24oczEpXG5cCisgczEgPSBuYW1lIG9mIGZ1bmN0aW9uLlxuIik7CisgICAgICAg IHByaW50ZigiUmV0dXJucyBpbnRlZ2VyOlxuXAorICAxIGlmIHMxIGlzIHRoZSBuYW1lIG9mIGFu IGF2YWlsYWJsZSBidWlsdC1pbiBmdW5jdGlvbjtcblwKKyAgMCBvdGhlcndpc2UuXG4iKTsgCisg ICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEZOX1JFQ1VSU0U6CisJcHJpbnRmKCJcXGZyZWN1 cnNlKHMxKVxuXAorIHMxID0gbmFtZSBvZiBcXCZ4IG9yIFxcJnhbXSB0eXBlIHZhcmlhYmxlXG4i KTsKKyAgICAgICAgcHJpbnRmKCJSZXR1cm5zIHRoZSByZXN1bHQgb2YgZXZhbHVhdGluZyB0aGUg dmFyaWFibGUgcmVjdXJzaXZlbHkuXG4iKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2Ug Rk5fU1FVRUVaRToKKyAgICAgICAgcHJpbnRmKCJcXGZzcXVlZXplKHMpXG5cCisgIHMgPSBzdHJp bmdcblwKKyAgICBSZXR1cm5zIHN0cmluZyB3aXRoIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRl c3BhY2UgcmVtb3ZlZCwgVGFic1xuXAorICAgIGNvbnZlcnRlZCB0byBTcGFjZXMsIGFuZCBtdWx0 aXBsZSBzcGFjZXMgY29udmVydGVkIHRvIHNpbmdsZSBzcGFjZXMuXG4iKTsKKyAgICAgICAgYnJl YWs7CisKKyNpZm5kZWYgTk9DU0VUUworICAgICAgY2FzZSBGTl9YTEFURToKKyAgICAgICAgcHJp bnRmKCJcXGZjdnRjc2V0KHMsY3NldDEsY3NldDIpXG5cCisgIHMgPSBzdHJpbmdcblwKKyAgICBS ZXR1cm5zIHN0cmluZyBjb252ZXJ0ZWQgZnJvbSBjaGFyYWN0ZXIgc2V0IGNzZXQxIHRvIGNzZXQy LCB3aGVyZSBjc2V0MVxuXAorICAgIGFuZCBjc2V0MiBhcmUgbmFtZXMgb2YgRmlsZSBDaGFyYWN0 ZXItU2V0cyBcCisoJ3NldCBmaWxlIGNoYXIgPycgZm9yIGEgbGlzdCkuXG4iKTsKKyAgICAgICAg YnJlYWs7CisjZW5kaWYJLyogTk9DU0VUUyAqLworCisgICAgICBjYXNlIEZOX1VOUENUOgorICAg ICAgICBwcmludGYoIlxcZmRlY29kZWhleChzMVssczJdKVxuXAorICBzMSwgczIgPSBzdHJpbmdz XG5cCisgICAgRGVjb2RlcyBhIHN0cmluZyBzMSB0aGF0IGNvbnRhaW5zIHByZWZpeGVkIGhleCBi eXRlcy4gIHMyIGlzIHRoZSBwcmVmaXg7XG5cCisgICAgdGhlIGRlZmF1bHQgaXMgJSUlJS4gIFlv dSBjYW4gc3BlY2lmeSBhbnkgb3RoZXIgcHJlZml4IG9uZSBvciB0d28gYnl0ZXNcblwKKyAgICBs b25nLiAgSWYgdGhlIHByZWZpeCBjb250YWlucyBsZXR0ZXJzIChzdWNoIGFzIDB4KSwgY2FzZSBp cyBpbmdvcmVkLlxuXAorICAgIFJldHVybnMgc3RyaW5nIHMxIHdpdGggaGV4IGVzY2FwZXMgcmVw bGFjZWQgYnkgdGhlIGJ5dGVzIHRoZXkgXAorcmVwcmVzZW50LlxuIik7CisgICAgICAgIGJyZWFr OworCisgICAgICBjYXNlIEZOX1NUUklOR1Q6CisgICAgICAgIHByaW50ZigiXFxmc3RyaW5ndHlw ZShzKVxuXAorICBzID0gc3RyaW5nXG5cCisgICAgUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRp bmcgdGhlIHR5cGUgb2YgaXRzIHN0cmluZyBhcmd1bWVudCBzMTpcblwKKyAgICA3QklULCA4QklU LCBVVEY4LCBURVhULCBvciBCSU5BUlkuICBURVhUIG1lYW5zIHNvbWUga2luZCBvZiB0ZXh0XG5c CisgICAgb3RoZXIgdGhhbiA3QklULCA4QklULCBvciBVVEY4ICh0aGlzIHByb2JhYmx5IHdpbGwg bmV2ZXIgYXBwZWFyKS5cbiIpOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBGTl9TVFJD TVA6CisgICAgICAgIHByaW50ZigiXFxmc3RyY21wKHMxLHMyWyxjYXNlWyxzdGFydFssbGVuZ3Ro XV1dKVxuXAorICBzMSwgczIgPSBzdHJpbmdzXG5cCisgIGNhc2UsIHN0YXJ0LCBsZW5ndGggPSBu dW1iZXJzIG9yIGFyaXRobWV0aWMgZXhwcmVzc2lvbnMuXG5cCisgICAgY2FzZSA9IDAgW2RlZmF1 bHRdIG1lYW5zIHRvIGRvIGEgY2FzZS1pbmRlcGVuZGVudCBjb21wYXJpc29uO1xuXAorICAgIG5v bnplcm8gY2FzZSByZXF1ZXN0cyBhIGNhc2Utc2Vuc2l0aXZlIGNvbXBhcmlzb24uXG5cCisgICAg VGhlIG9wdGlvbmFsIHN0YXJ0IGFuZCBsZW5ndGggYXJndW1lbnRzIGFwcGx5IHRvIGJvdGggczEg YW5kIHMyXG5cCisgICAgYW5kIGFsbG93IHNwZWNpZmljYXRpb24gb2Ygc3Vic3RyaW5ncyBpZiBp dCBpcyBub3QgZGVzaXJlZCB0byBjb21wYXJlXG5cCisgICAgdGhlIHdob2xlIHN0cmluZ3MuICBS ZXN1bHRzIGZvciBub24tQVNDSUkgc3RyaW5ncyBhcmUgaW1wbGVudGF0aW9uLVxuXAorICAgIGFu ZCBsb2NhbGUtZGVwZW5kZW50LlxuXAorICBSZXR1cm5zIGEgbnVtYmVyOlxuXAorICAgIC0xOiBz MSBpcyBsZXhpY2FsbHkgbGVzcyB0aGFuIHMyO1xuXAorICAgICAwOiBzMSBhbmQgczIgYXJlIGxl eGljYWxseSBlcXVhbDtcblwKKyAgICAgMjogczEgaXMgbGV4aWNhbGx5IGdyZWF0ZXIgdGhhbiBz Mi5cbiIpOworICAgICAgICBicmVhazsKKworICAgICAgZGVmYXVsdDoKKyAgICAgICAgcHJpbnRm KCJTb3JyeSwgaGVscCBub3QgYXZhaWxhYmxlIGZvciBcIiVzXCJcbiIsY21kYnVmKTsKKyAgICB9 CisgICBwcmludGYoIlxuIik7CisgICByZXR1cm4oMCk7Cit9CisjZW5kaWYgLyogTk9TUEwgKi8K KworI2lmZGVmIE9TMgorI2lmbmRlZiBOT0tWRVJCUworCisvKiAgRCBPIEggSyBWIEUgUiBCICAt LSAgR2l2ZSBoZWxwIGZvciBhIEt2ZXJiICAqLworCitpbnQKK2RvaGt2ZXJiKHh4KSBpbnQgeHg7 IHsKKyAgICBpbnQgeCxpLGZvdW5kLGJ1dHRvbixldmVudDsKKworICAgIGlmICh4eCA9PSAtMykg eworICAgICAgICBwcmludGYoIlxuIFR5cGUgU0hPVyBLVkVSQlMgdG8gc2VlIGEgbGlzdCBvZiBh dmFpbGFibGUgS3ZlcmJzLlxuIgorICAgICAgICAgICAgICAgKTsKKyAgICAgICAgcHJpbnRmKAor IiBUeXBlIEhFTFAgS1ZFUkIgPG5hbWU+IHRvIHNlZSB0aGUgY3VycmVudCBkZWZpbml0aW9uIG9m IGEgZ2l2ZW4gS3ZlcmIuXG5cbiIKKyAgICAgICAgICAgICAgKTsKKyAgICAgICAgcmV0dXJuKC05 KTsKKyAgICB9CisgICAgaWYgKHh4IDwgMCkgcmV0dXJuKHh4KTsKKyAgICBpZiAoKHggPSBjbWNm bSgpKSA8IDApIHJldHVybih4KTsKKyAgICBzd2l0Y2ggKCB4eCApIHsKKyAgICAgICAgLyogREVD IFZUIGtleWJvYXJkIGtleSBkZWZpbml0aW9ucyAqLworCisgICAgY2FzZSAgS19DT01QT1NFIDog ICAgICAgICAgICAgICAgICAgLyogQ29tcG9zZSBrZXkgKi8KKyAgICAgICAgcHJpbnRmKCJcXEtj b21wb3NlICAgICAgICAgICBDb21wb3NlIGFuIGFjY2VudGVkIGNoYXJhY3RlclxuIik7CisgICAg ICAgIGJyZWFrOworICAgIGNhc2UgIEtfQ19VTkkxNiA6ICAgICAgICAgICAgICAgICAgIC8qIFVD UzIga2V5ICovCisgICAgICAgIHByaW50ZigiXFxLdWNzMiAgICAgICAgICAgICAgRW50ZXIgYSBV bmljb2RlIGNoYXJhY3RlclxuIik7CisgICAgICAgIGJyZWFrOworCisvKiBERUMgYXJyb3cga2V5 cyAqLworCisgICAgY2FzZSAgS19VUEFSUiAgICAgOiAgICAgICAgICAgICAgICAgLyogREVDIFVw IEFycm93IGtleSAqLworICAgICAgICBwcmludGYoIlxcS3VwYXJyICAgICAgICAgVHJhbnNtaXQg VGVybWluYWwgVXAgQXJyb3cgc2VxdWVuY2VcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNl ICBLX0ROQVJSICAgICA6ICAgICAgICAgICAgICAgICAvKiBERUMgRG93biBBcnJvdyBrZXkgKi8K KyAgICAgICAgcHJpbnRmKCJcXEtkbmFyciAgICAgICAgIFRyYW5zbWl0IFRlcm1pbmFsIERvd24g QXJyb3cgc2VxdWVuY2VcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlICBLX1JUQVJSICAg ICA6ICAgICAgICAgICAgICAgICAvKiBERUMgUmlnaHQgQXJyb3cga2V5ICovCisgICAgICAgIHBy aW50ZigiXFxLcnRhcnIgICAgICAgICBUcmFuc21pdCBUZXJtaW5hbCBSaWdodCBBcnJvdyBzZXF1 ZW5jZVxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfTEZBUlIgICAgIDogICAgICAg ICAgICAgICAgIC8qIERFQyBMZWZ0IEFycm93IGtleSAqLworICAgICAgICBwcmludGYoIlxcS2xm YXJyICAgICAgICAgVHJhbnNtaXQgVGVybWluYWwgTGVmdCBBcnJvdyBzZXF1ZW5jZVxuIik7Cisg ICAgICAgIGJyZWFrOworCisgICAgY2FzZSAgS19QRjEgICAgICAgOiAgICAgICAgICAgICAgICAg LyogREVDIFBGMSBrZXkgKi8KKyAgICAgICAgcHJpbnRmKCJcXEtwZjEsXFxLZ29sZCAgICBUcmFu c21pdCBERUMgUEYxIHNlcXVlbmNlXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19Q RjIgICAgICAgOiAgICAgICAgICAgICAgICAgLyogREVDIFBGMiBrZXkgKi8KKyAgICAgICAgcHJp bnRmKCJcXEtwZjIgICAgICAgICAgIFRyYW5zbWl0IERFQyBQRjIgc2VxdWVuY2VcbiIpOworICAg ICAgICBicmVhazsKKyAgICBjYXNlICBLX1BGMyAgICAgICA6ICAgICAgICAgICAgICAgICAvKiBE RUMgUEYzIGtleSAqLworICAgICAgICBwcmludGYoIlxcS3BmMyAgICAgICAgICAgVHJhbnNtaXQg REVDIFBGMyBzZXF1ZW5jZVxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfUEY0ICAg ICAgIDogICAgICAgICAgICAgICAgIC8qIERFQyBQRjQga2V5ICovCisgICAgICAgIHByaW50Zigi XFxLcGY0ICAgICAgICAgICBUcmFuc21pdCBERUMgUEY0IHNlcXVlbmNlXG4iKTsKKyAgICAgICAg YnJlYWs7CisKKyAgICBjYXNlICBLX0tQMCAgICAgICA6ICAgICAgICAgICAgICAgICAvKiBERUMg S2V5cGFkIDAgKi8KKyAgICAgICAgcHJpbnRmKCJcXEtrcDAgICAgICAgICAgIFRyYW5zbWl0IERF QyBLZXlwYWQtMCBzZXF1ZW5jZVxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfS1Ax ICAgICAgIDogICAgICAgICAgICAgICAgIC8qIERFQyBLZXlwYWQgMSAqLworICAgICAgICBwcmlu dGYoIlxcS2twMSAgICAgICAgICAgVHJhbnNtaXQgREVDIEtleXBhZC0xIHNlcXVlbmNlXG4iKTsK KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19LUDIgICAgICAgOiAgICAgICAgICAgICAgICAg LyogZXRjIC4uLiB0aHJvdWdoIDkgKi8KKyAgICAgICAgcHJpbnRmKCJcXEtrcDIgICAgICAgICAg IFRyYW5zbWl0IERFQyBLZXlwYWQtMiBzZXF1ZW5jZVxuIik7CisgICAgICAgIGJyZWFrOworICAg IGNhc2UgIEtfS1AzICAgICAgIDoKKyAgICAgICAgcHJpbnRmKCJcXEtrcDMgICAgICAgICAgIFRy YW5zbWl0IERFQyBLZXlwYWQtMyBzZXF1ZW5jZVxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNh c2UgIEtfS1A0ICAgICAgIDoKKyAgICAgICAgcHJpbnRmKCJcXEtrcDQgICAgICAgICAgIFRyYW5z bWl0IERFQyBLZXlwYWQtNCBzZXF1ZW5jZVxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug IEtfS1A1ICAgICAgIDoKKyAgICAgICAgcHJpbnRmKCJcXEtrcDUgICAgICAgICAgIFRyYW5zbWl0 IERFQyBLZXlwYWQtNSBzZXF1ZW5jZVxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgIEtf S1A2ICAgICAgIDoKKyAgICAgICAgcHJpbnRmKCJcXEtrcDYgICAgICAgICAgIFRyYW5zbWl0IERF QyBLZXlwYWQtNiBzZXF1ZW5jZVxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfS1A3 ICAgICAgIDoKKyAgICAgICAgcHJpbnRmKCJcXEtrcDcgICAgICAgICAgIFRyYW5zbWl0IERFQyBL ZXlwYWQtNyBzZXF1ZW5jZVxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfS1A4ICAg ICAgIDoKKyAgICAgICAgcHJpbnRmKCJcXEtrcDggICAgICAgICAgIFRyYW5zbWl0IERFQyBLZXlw YWQtOCBzZXF1ZW5jZVxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfS1A5ICAgICAg IDoKKyAgICAgICAgcHJpbnRmKCJcXEtrcDkgICAgICAgICAgIFRyYW5zbWl0IERFQyBLZXlwYWQt OSBzZXF1ZW5jZVxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfS1BDT01BICAgIDog ICAgICAgICAgICAgICAgIC8qIERFQyBrZXlwYWQgY29tbWEgKi8KKyAgICAgICAgcHJpbnRmKCJc XEtrcGNvbWEgICAgICAgIFRyYW5zbWl0IERFQyBLZXlwYWQtQ29tbWEgc2VxdWVuY2VcbiIpOwor ICAgICAgICBicmVhazsKKyAgICBjYXNlICBLX0tQTUlOVVMgICA6ICAgICAgICAgICAgICAgICAv KiBERUMga2V5cGFkIG1pbnVzICovCisgICAgICAgIHByaW50ZigiXFxLa3BtaW51cyAgICAgICBU cmFuc21pdCBERUMgS2V5cGFkLU1pbnVzIHNlcXVlbmNlXG4iKTsKKyAgICAgICAgYnJlYWs7Cisg ICAgY2FzZSAgS19LUERPVCAgICAgOiAgICAgICAgICAgICAgICAgLyogREVDIGtleXBhZCBwZXJp b2QgKi8KKyAgICAgICAgcHJpbnRmKCJcXEtrcGRvdCAgICAgICAgIFRyYW5zbWl0IERFQyBLZXlw YWQtUGVyaW9kIHNlcXVlbmNlXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19LUEVO VEVSICAgOiAgICAgICAgICAgICAgICAgLyogREVDIGtleXBhZCBlbnRlciAqLworICAgICAgICBw cmludGYoIlxcS2twZW50ZXIgICAgICAgVHJhbnNtaXQgREVDIEtleXBhZC1FbnRlciBzZXF1ZW5j ZVxuIik7CisgICAgICAgIGJyZWFrOworCisvKiBERUMgVG9wLVJhbmsgRiBrZXlzICovCisKKyAg ICBjYXNlICBLX0RFQ0YxICAgICA6ICAgICAgICAgICAgICAgICAvKiBERUMgRjEga2V5ICovCisg ICAgICAgIHByaW50ZigiXFxLZGVjZjEgICAgICAgICBUcmFuc21pdCBERUMgRjEgc2VxdWVuY2Ug Zm9yIFBDIGtleWJvYXJkXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19ERUNGMiAg ICAgOiAgICAgICAgICAgICAgICAgLyogREVDIEYyIGtleSAqLworICAgICAgICBwcmludGYoIlxc S2RlY2YyICAgICAgICAgVHJhbnNtaXQgREVDIEYyIHNlcXVlbmNlIGZvciBQQyBrZXlib2FyZFxu Iik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfREVDRjMgICAgIDogICAgICAgICAgICAg ICAgIC8qIERFQyBGMyBrZXkgKi8KKyAgICAgICAgcHJpbnRmKCJcXEtkZWNmMyAgICAgICAgIFRy YW5zbWl0IERFQyBGMyBzZXF1ZW5jZSBmb3IgUEMga2V5Ym9hcmRcbiIpOworICAgICAgICBicmVh azsKKyAgICBjYXNlICBLX0RFQ0Y0ICAgICA6ICAgICAgICAgICAgICAgICAvKiBERUMgRjQga2V5 ICovCisgICAgICAgIHByaW50ZigiXFxLZGVjZjQgICAgICAgICBUcmFuc21pdCBERUMgRjQgc2Vx dWVuY2UgZm9yIFBDIGtleWJvYXJkXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19E RUNGNSAgICAgOiAgICAgICAgICAgICAgICAgLyogREVDIEY1IGtleSAqLworICAgICAgICBwcmlu dGYoIlxcS2RlY2Y1ICAgICAgICAgVHJhbnNtaXQgREVDIEY1IHNlcXVlbmNlIGZvciBQQyBrZXli b2FyZFxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfREVDSE9NRTogICAgICAgICAg ICAgICAgICAgIC8qIERFQyBIT01FIGtleSAqLworICAgICAgIHByaW50ZigiXFxLZGVjaG9tZSAg ICAgICBUcmFuc21pdCBERUMgSE9NRSBzZXF1ZW5jZSBmb3IgUEMga2V5Ym9hcmRcbiIpOworICAg ICAgIGJyZWFrOworCisgICAgY2FzZSAgS19ERUNGNiAgICAgOiAgICAgICAgICAgICAgICAgLyog REVDIEY2IGtleSAqLworICAgICAgICBwcmludGYoIlxcS2RlY2Y2ICAgICAgICAgVHJhbnNtaXQg REVDIEY2IHNlcXVlbmNlXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19ERUNGNyAg ICAgOiAgICAgICAgICAgICAgICAgLyogZXRjLCB0aHJvdWdoIEYyMCAqLworICAgICAgICBwcmlu dGYoIlxcS2RlY2Y3ICAgICAgICAgVHJhbnNtaXQgREVDIEY3IHNlcXVlbmNlXG4iKTsKKyAgICAg ICAgYnJlYWs7CisgICAgY2FzZSAgS19ERUNGOCAgICAgOgorICAgICAgICBwcmludGYoIlxcS2Rl Y2Y4ICAgICAgICAgVHJhbnNtaXQgREVDIEY4IHNlcXVlbmNlXG4iKTsKKyAgICAgICAgYnJlYWs7 CisgICAgY2FzZSAgS19ERUNGOSAgICAgOgorICAgICAgICBwcmludGYoIlxcS2RlY2Y5ICAgICAg ICAgVHJhbnNtaXQgREVDIEY5IHNlcXVlbmNlXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz ZSAgS19ERUNGMTAgICAgOgorICAgICAgICBwcmludGYoIlxcS2RlY2YxMCAgICAgICAgVHJhbnNt aXQgREVDIEYxMCBzZXF1ZW5jZVxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfREVD RjExICAgIDoKKyAgICAgICAgcHJpbnRmKCJcXEtkZWNmMTEgICAgICAgIFRyYW5zbWl0IERFQyBG MTEgc2VxdWVuY2VcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlICBLX0RFQ0YxMiAgICA6 CisgICAgICAgIHByaW50ZigiXFxLZGVjZjEyICAgICAgICBUcmFuc21pdCBERUMgRjEyIHNlcXVl bmNlXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19ERUNGMTMgICAgOgorICAgICAg ICBwcmludGYoIlxcS2RlY2YxMyAgICAgICAgVHJhbnNtaXQgREVDIEYxMyBzZXF1ZW5jZVxuIik7 CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfREVDRjE0ICAgIDoKKyAgICAgICAgcHJpbnRm KCJcXEtkZWNmMTQgICAgICAgIFRyYW5zbWl0IERFQyBGMTQgc2VxdWVuY2VcbiIpOworICAgICAg ICBicmVhazsKKyAgICBjYXNlICBLX0RFQ0hFTFAgICA6ICAgICAgICAgICAgICAgICAvKiBERUMg SGVscCBrZXkgKi8KKyAgICAgICAgcHJpbnRmKCJcXEtkZWNmMTUsXFxLZGVjaGVscCAgVHJhbnNt aXQgREVDIEhFTFAgc2VxdWVuY2VcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlICBLX0RF Q0RPICAgICA6ICAgICAgICAgICAgICAgICAvKiBERUMgRG8ga2V5ICovCisgICAgICAgIHByaW50 ZigiXFxLZGVjZjE2LFxcS2RlY2RvICAgIFRyYW5zbWl0IERFQyBETyBzZXF1ZW5jZVxuIik7Cisg ICAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfREVDRjE3ICAgIDoKKyAgICAgICAgcHJpbnRmKCJc XEtkZWNmMTcgICAgICAgIFRyYW5zbWl0IERFQyBGMTcgc2VxdWVuY2VcbiIpOworICAgICAgICBi cmVhazsKKyAgICBjYXNlICBLX0RFQ0YxOCAgICA6CisgICAgICAgIHByaW50ZigiXFxLZGVjZjE4 ICAgICAgICBUcmFuc21pdCBERUMgRjE4IHNlcXVlbmNlXG4iKTsKKyAgICAgICAgYnJlYWs7Cisg ICAgY2FzZSAgS19ERUNGMTkgICAgOgorICAgICAgICBwcmludGYoIlxcS2RlY2YxOSAgICAgICAg VHJhbnNtaXQgREVDIEYxOSBzZXF1ZW5jZVxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug IEtfREVDRjIwICAgIDoKKyAgICAgICAgcHJpbnRmKCJcXEtkZWNmMjAgICAgICAgIFRyYW5zbWl0 IERFQyBGMjAgc2VxdWVuY2VcbiIpOworICAgICAgICBicmVhazsKKworLyogREVDIGVkaXRpbmcg a2V5cyAqLworCisgICAgY2FzZSAgS19ERUNGSU5EICAgOiAgICAgICAgICAgICAgICAgLyogREVD IEZpbmQga2V5ICovCisgICAgICAgIHByaW50ZigiXFxLZGVjZmluZCAgICAgICBUcmFuc21pdCBE RUMgRklORCBzZXF1ZW5jZVxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfREVDSU5T RVJUIDogICAgICAgICAgICAgICAgIC8qIERFQyBJbnNlcnQga2V5ICovCisgICAgICAgIHByaW50 ZigiXFxLZGVjaW5zZXJ0ICAgICBUcmFuc21pdCBERUMgSU5TRVJUIEhFUkUgc2VxdWVuY2VcbiIp OworICAgICAgICBicmVhazsKKyAgICBjYXNlICBLX0RFQ1JFTU9WRSA6ICAgICAgICAgICAgICAg ICAvKiBERUMgUmVtb3ZlIGtleSAqLworICAgICAgICBwcmludGYoIlxcS2RlY3JlbW92ZSAgICAg VHJhbnNtaXQgREVDIFJFTU9WRSBzZXF1ZW5jZVxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNh c2UgIEtfREVDU0VMRUNUIDogICAgICAgICAgICAgICAgIC8qIERFQyBTZWxlY3Qga2V5ICovCisg ICAgICAgIHByaW50ZigiXFxLZGVjZnNlbGVjdCAgICBUcmFuc21pdCBERUMgU0VMRUNUIHNlcXVl bmNlXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19ERUNQUkVWICAgOiAgICAgICAg ICAgICAgICAgLyogREVDIFByZXZpb3VzIFNjcmVlbiBrZXkgKi8KKyAgICAgICAgcHJpbnRmKCJc XEtkZWNwcmV2ICAgICAgIFRyYW5zbWl0IERFQyBQUkVWIFNDUkVFTiBzZXF1ZW5jZVxuIik7Cisg ICAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfREVDTkVYVCAgIDogICAgICAgICAgICAgICAgIC8q IERFQyBOZXh0IFNjcmVlbiBrZXkgKi8KKyAgICAgICAgcHJpbnRmKCJcXEtkZWNuZXh0ICAgICAg IFRyYW5zbWl0IERFQyBORVhUIFNDUkVFTiBzZXF1ZW5jZVxuIik7CisgICAgICAgIGJyZWFrOwor CisvKiBERUMgVXNlci1EZWZpbmVkIEtleXMgKi8KKworICAgIGNhc2UgIEtfVURLRjEgICAgIDog ICAgICAgICAgICAgICAgIC8qIEYxIC0gRjUgYXJlIFhURVJNIGV4dGVuc2lvbnMgKi8KKyAgICAg IHByaW50ZigiXFxLdWRrZjEgICAgICAgICBUcmFuc21pdCBYVEVSTSBGMSBVc2VyIERlZmluZWQg S2V5IHNlcXVlbmNlXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfVURLRjIgICAgIDoK KyAgICAgIHByaW50ZigiXFxLdWRrZjIgICAgICAgICBUcmFuc21pdCBYVEVSTSBGMiBVc2VyIERl ZmluZWQgS2V5IHNlcXVlbmNlXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfVURLRjMg ICAgIDoKKyAgICAgIHByaW50ZigiXFxLdWRrZjMgICAgICAgICBUcmFuc21pdCBYVEVSTSBGMyBV c2VyIERlZmluZWQgS2V5IHNlcXVlbmNlXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtf VURLRjQgICAgIDoKKyAgICAgIHByaW50ZigiXFxLdWRrZjQgICAgICAgICBUcmFuc21pdCBYVEVS TSBGNCBVc2VyIERlZmluZWQgS2V5IHNlcXVlbmNlXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNh c2UgIEtfVURLRjUgICAgIDoKKyAgICAgIHByaW50ZigiXFxLdWRrZjUgICAgICAgICBUcmFuc21p dCBYVEVSTSBGNSBVc2VyIERlZmluZWQgS2V5IHNlcXVlbmNlXG4iKTsKKyAgICAgIGJyZWFrOwor ICAgIGNhc2UgIEtfVURLRjYgICAgIDogICAgICAgICAgICAgICAgIC8qIERFQyBVc2VyIERlZmlu ZWQgS2V5IEY2ICovCisgICAgICBwcmludGYoIlxcS3Vka2Y2ICAgICAgICAgVHJhbnNtaXQgREVD IEY2IFVzZXIgRGVmaW5lZCBLZXkgc2VxdWVuY2VcbiIpOworICAgICAgYnJlYWs7CisgICAgY2Fz ZSAgS19VREtGNyAgICAgOiAgICAgICAgICAgICAgICAgLyogREVDIFVzZXIgRGVmaW5lZCBLZXkg RjcgKi8KKyAgICAgIHByaW50ZigiXFxLdWRrZjcgICAgICAgICBUcmFuc21pdCBERUMgRjcgVXNl ciBEZWZpbmVkIEtleSBzZXF1ZW5jZVxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX1VE S0Y4ICAgICA6ICAgICAgICAgICAgICAgICAvKiBldGMgLi4uIHRocm91Z2ggRjIwICovCisgICAg ICBwcmludGYoIlxcS3Vka2Y4ICAgICAgICAgVHJhbnNtaXQgREVDIEY4IFVzZXIgRGVmaW5lZCBL ZXkgc2VxdWVuY2VcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19VREtGOSAgICAgOgor ICAgICAgcHJpbnRmKCJcXEt1ZGtmOSAgICAgICAgIFRyYW5zbWl0IERFQyBGOSBVc2VyIERlZmlu ZWQgS2V5IHNlcXVlbmNlXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfVURLRjEwICAg IDoKKyAgICAgIHByaW50ZigiXFxLdWRrZjEwICAgICAgICBUcmFuc21pdCBERUMgRjEwIFVzZXIg RGVmaW5lZCBLZXkgc2VxdWVuY2VcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19VREtG MTEgICAgOgorICAgICAgcHJpbnRmKCJcXEt1ZGtmMTEgICAgICAgIFRyYW5zbWl0IERFQyBGMTEg VXNlciBEZWZpbmVkIEtleSBzZXF1ZW5jZVxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBL X1VES0YxMiAgICA6CisgICAgICBwcmludGYoIlxcS3Vka2YxMiAgICAgICAgVHJhbnNtaXQgREVD IEYxMiBVc2VyIERlZmluZWQgS2V5IHNlcXVlbmNlXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNh c2UgIEtfVURLRjEzICAgIDoKKyAgICAgIHByaW50ZigiXFxLdWRrZjEzICAgICAgICBUcmFuc21p dCBERUMgRjEzIFVzZXIgRGVmaW5lZCBLZXkgc2VxdWVuY2VcbiIpOworICAgICAgYnJlYWs7Cisg ICAgY2FzZSAgS19VREtGMTQgICAgOgorICAgICAgcHJpbnRmKCJcXEt1ZGtmMTQgICAgICAgIFRy YW5zbWl0IERFQyBGMTQgVXNlciBEZWZpbmVkIEtleSBzZXF1ZW5jZVxuIik7CisgICAgICBicmVh azsKKyAgICBjYXNlICBLX1VES0hFTFAgICA6CisgICAgICBwcmludGYoCisgICAgICAiXFxLdWRr aGVscCxcXEt1ZGtmMTUgIFRyYW5zbWl0IERFQyBIRUxQIFVzZXIgRGVmaW5lZCBLZXkgc2VxdWVu Y2VcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19VREtETyAgICAgOgorICAgICAgcHJp bnRmKAorICAgICAgIlxcS3Vka2RvLFxcS3Vka2YxNiAgICBUcmFuc21pdCBERUMgRE8gVXNlciBE ZWZpbmVkIEtleSBzZXF1ZW5jZVxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX1VES0Yx NyAgICA6CisgICAgICBwcmludGYoIlxcS3Vka2YxNyAgICAgICAgVHJhbnNtaXQgREVDIEYxNyBV c2VyIERlZmluZWQgS2V5IHNlcXVlbmNlXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtf VURLRjE4ICAgIDoKKyAgICAgIHByaW50ZigiXFxLdWRrZjE4ICAgICAgICBUcmFuc21pdCBERUMg RjE4IFVzZXIgRGVmaW5lZCBLZXkgc2VxdWVuY2VcbiIpOworICAgICAgYnJlYWs7CisgICAgY2Fz ZSAgS19VREtGMTkgICAgOgorICAgICAgcHJpbnRmKCJcXEt1ZGtmMTkgICAgICAgIFRyYW5zbWl0 IERFQyBGMTkgVXNlciBEZWZpbmVkIEtleSBzZXF1ZW5jZVxuIik7CisgICAgICBicmVhazsKKyAg ICBjYXNlICBLX1VES0YyMCAgICA6CisgICAgICBwcmludGYoIlxcS3Vka2YyMCAgICAgICAgVHJh bnNtaXQgREVDIEYyMCBVc2VyIERlZmluZWQgS2V5IHNlcXVlbmNlXG4iKTsKKyAgICAgIGJyZWFr OworCisvKiBFbWFjcyBLZXlzICovCisgICAgY2FzZSAgS19FTUFDU19PVkVSOgorICAgICAgcHJp bnRmKAorICAgICAiXFxLZW1hY3Nfb3ZlcndyaXRlICBUcmFuc21pdCBFTUFDUyBPdmVyd3JpdGUg dG9nZ2xlIGNvbW1hbmQgc2VxdWVuY2VcbiIpOworICAgICAgYnJlYWs7CisKKy8qIEtlcm1pdCBz Y3JlZW4tc2Nyb2xsaW5nIGtleXMgKi8KKworICAgIGNhc2UgIEtfRE5PTkUgICAgIDogICAgICAg ICAgICAgICAgIC8qIFNjcmVlbiByb2xsYmFjazogZG93biBvbmUgbGluZSAqLworICAgICAgcHJp bnRmKCJcXEtkbm9uZSAgICAgICAgIFNjcmVlbiByb2xsYmFjazogZG93biBvbmUgbGluZVxuIik7 CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX0ROU0NOICAgICA6ICAgICAgICAgICAgICAgICAv KiBTY3JlZW4gcm9sbGJhY2s6IGRvd24gb25lIHNjcmVlbiAqLworICAgICAgcHJpbnRmKCJcXEtk bnNjbiAgICAgICAgIFNjcmVlbiByb2xsYmFjazogZG93biBvbmUgc2NyZWVuXG4iKTsKKyAgICAg IGJyZWFrOworICAgIGNhc2UgIEtfVVBPTkUgICAgIDogICAgICAgICAgICAgICAgIC8qIFNjcmVl biByb2xsYmFjazogVXAgb25lIGxpbmUgKi8KKyAgICAgIHByaW50ZigiXFxLdXBvbmUgICAgICAg ICBTY3JlZW4gcm9sbGJhY2s6IHVwIG9uZSBsaW5lXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNh c2UgIEtfVVBTQ04gICAgIDogICAgICAgICAgICAgICAgIC8qIFNjcmVlbiByb2xsYmFjazogVXAg b25lIHNjcmVlbiAqLworICAgICAgcHJpbnRmKCJcXEt1cHNjbiAgICAgICAgIFNjcmVlbiByb2xs YmFjazogdXAgb25lIHNjcmVlblxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX0VORFND TiAgICA6ICAgICAgICAgICAgICAgICAvKiBTY3JlZW4gcm9sbGJhY2s6IGxhdGVzdCBzY3JlZW4g Ki8KKyAgICAgIHByaW50ZigiXFxLZW5kc2NuICAgICAgICBTY3JlZW4gcm9sbGJhY2s6IGxhdGVz dCBzY3JlZW5cbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19IT01TQ04gICAgOiAgICAg ICAgICAgICAgICAgLyogU2NyZWVuIHJvbGxiYWNrOiBvbGRlc3Qgc2NyZWVuICovCisgICAgICBw cmludGYoIlxcS2hvbXNjbiAgICAgICAgU2NyZWVuIHJvbGxiYWNrOiBvbGRlc3Qgc2NyZWVuXG4i KTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfR09fQk9PSyAgIDogICAgICAgICAvKiBTY3Jv bGwgdG8gYm9va21hcmsgKi8KKyAgICAgIHByaW50ZigiXFxLZ29ib29rICAgICAgICBTY3JlZW4g cm9sbGJhY2s6IGdvIHRvIGJvb2ttYXJrXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtf R09UTyAgICAgIDogICAgICAgICAvKiBTY3JvbGwgdG8gbGluZSBudW1iZXIgKi8KKyAgICAgIHBy aW50ZigiXFxLZ290byAgICAgICAgICBTY3JlZW4gcm9sbGJhY2s6IGdvIHRvIGxpbmUgbnVtYmVy XG4iKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSAgS19MRk9ORSAgICAgOiAgICAgICAgICAg ICAgICAgLyogSG9yaXpvbnRhbCBTY3JvbGw6IExlZnQgb25lIGNlbGwgKi8KKyAgICAgIHByaW50 ZigiXFxLbGZvbmUgICAgICAgICBIb3Jpem9udGFsIFNjcm9sbDogTGVmdCBvbmUgY29sdW1uXG4i KTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfTEZQQUdFICAgIDogICAgICAgICAgICAgICAg IC8qIEhvcml6b250YWwgU2Nyb2xsOiBMZWZ0IG9uZSBwYWdlICovCisgICAgICBwcmludGYoIlxc S2xmcGFnZSAgICAgICAgSG9yaXpvbnRhbCBTY3JvbGw6IExlZnQgZWlnaHQgY29sdW1uc1xuIik7 CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX0xGQUxMICAgICA6CisgICAgICBwcmludGYoIlxc S2xmYWxsICAgICAgICAgSG9yaXpvbnRhbCBTY3JvbGw6IExlZnQgdG8gbWFyZ2luXG4iKTsKKyAg ICAgIGJyZWFrOworICAgIGNhc2UgIEtfUlRPTkUgICAgIDogICAgICAgICAgICAgICAgIC8qIEhv cml6b250YWwgU2Nyb2xsOiBSaWdodCBvbmUgY2VsbCAqLworICAgICAgcHJpbnRmKCJcXEtydG9u ZSAgICAgICAgIEhvcml6b250YWwgU2Nyb2xsOiBSaWdodCBvbmUgY29sdW1uXG4iKTsKKyAgICAg IGJyZWFrOworICAgIGNhc2UgIEtfUlRQQUdFICAgIDogICAgICAgICAgICAgICAgIC8qIEhvcml6 b250YWwgU2Nyb2xsOiBSaWdodCBvbmUgcGFnZSAqLworICAgICAgcHJpbnRmKCJcXEtydHBhZ2Ug ICAgICAgIEhvcml6b250YWwgU2Nyb2xsOiBSaWdodCBlaWdodCBjb2x1bW5zXG4iKTsKKyAgICAg IGJyZWFrOworICAgIGNhc2UgIEtfUlRBTEwgICAgIDoKKyAgICAgIHByaW50ZigiXFxLcnRhbGwg ICAgICAgICBIb3Jpem9udGFsIFNjcm9sbDogUmlnaHQgdG8gbWFyZ2luXG4iKTsKKyAgICAgIGJy ZWFrOworCisvKiBLZXlib2FyZCBsYW5ndWFnZSBzd2l0Y2hpbmcgdmVyYnMgKi8KKworICAgIGNh c2UgIEtfS0JfRU5HICAgIDogICAgICAgICAgICAgICAgIC8qIEVuZ2xpc2gga2V5Ym9hcmQgbW9k ZSAqLworICAgICAgcHJpbnRmKCJcXEtrYmVuZ2xpc2ggICAgIFN3aXRjaCB0byBOb3JtYWwgKEVu Z2xpc2gpIGtleWJvYXJkIG1vZGVcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19LQl9I RUIgICAgOiAgICAgICAgICAgICAgICAgLyogSGVicmV3IGtleWJvYXJkIG1vZGUgKi8KKyAgICAg IHByaW50ZigiXFxLa2JoZWJyZXcgICAgICBTd2l0Y2ggdG8gSGVicmV3IGtleWJvYXJkIG1vZGVc biIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19LQl9SVVMgICAgOiAgICAgICAgICAgICAg ICAgLyogUnVzc2lhbiBrZXlib2FyZCBtb2RlICovCisgICAgICBwcmludGYoIlxcS2ticnVzc2lh biAgICAgU3dpdGNoIHRvIFJ1c3NpYW4ga2V5Ym9hcmQgbW9kZVxuIik7CisgICAgICBicmVhazsK KyAgICBjYXNlICBLX0tCX0VNQSAgICA6ICAgICAgICAgICAgICAgICAvKiBFbWFjcyBrZXlib2Fy ZCBtb2RlICovCisgICAgICBwcmludGYoIlxcS2tiZW1hY3MgICAgICAgU3dpdGNoIHRvIEVNQUNT IGtleWJvYXJkIG1vZGVcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19LQl9XUCAgICAg OiAgICAgICAgICAgICAgICAgLyogV29yZCBQZXJmZWN0IDUuMSBtb2RlICovCisgICAgICBwcmlu dGYoIlxcS2tid3AgICAgICAgICAgU3dpdGNoIHRvIFdvcmQgUGVyZmVjdCA1LjEga2V5Ym9hcmQg bW9kZVxuIik7CisgICAgICBicmVhazsKKworLyogTWFyayBNb2RlIGFjdGlvbnMgKi8KKworICAg IGNhc2UgIEtfTUFSS19TVEFSVCAgOiAgICAgICAvKiBFbnRlciBNYXJrIE1vZGUvU3RhcnQgbWFy a2luZyAqLworICAgICAgcHJpbnRmKCJcXEttYXJrc3RhcnQgICAgIE1hcmsgTW9kZTogRW50ZXIg bW9kZSBvciBTdGFydCBtYXJraW5nXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfTUFS S19DQU5DRUwgOiAgICAgICAvKiBFeGl0IE1hcmsgTW9kZSAtIERvIE5vdGhpbmcgKi8KKyAgICAg IHByaW50ZigiXFxLbWFya2NhbmNlbCAgICBNYXJrIE1vZGU6IENhbmNlbCBtb2RlXG4iKTsKKyAg ICAgIGJyZWFrOworICAgIGNhc2UgIEtfTUFSS19DT1BZQ0xJUDogICAgICAvKiBFeGl0IE1hcmsg TW9kZSAtIENvcHkgZGF0YSB0byBjbGlwYm9hcmQgKi8KKyAgICAgIHByaW50ZigiXFxLbWFya2Nv cHljbGlwICBNYXJrIE1vZGU6IENvcHkgbWFya2VkIHRleHQgdG8gY2xpcGJvYXJkXG4iKTsKKyAg ICAgIGJyZWFrOworICAgIGNhc2UgIEtfTUFSS19DT1BZSE9TVDogICAgICAvKiBFeGl0IE1hcmsg TW9kZSAtIENvcHkgZGF0YSB0byBob3N0ICAgKi8KKyAgICAgIHByaW50ZigiXFxLbWFya2NvcHlo b3N0ICBNYXJrIE1vZGU6IENvcHkgbWFya2VkIHRleHQgdG8gaG9zdFxuIik7CisgICAgICBicmVh azsKKyAgICBjYXNlICBLX01BUktfU0VMRUNUIDogICAgICAgLyogRXhpdCBNYXJrIE1vZGUgLSBT ZWxlY3QgKi8KKyAgICAgIHByaW50ZigKKyAgICAgICJcXEttYXJrc2VsZWN0ICAgIE1hcmsgTW9k ZTogUGxhY2UgbWFya2VkIHRleHQgaW50byBcXHYoc2VsZWN0KVxuIik7CisgICAgICBicmVhazsK KyAgICBjYXNlICBLX0JBQ0tTUkNIICAgIDogICAgICAgICAgICAvKiBTZWFyY2ggQmFja3dhcmRz IGZvciB0ZXh0ICovCisgICAgICBwcmludGYoIlxcS2JhY2tzZWFyY2ggICAgU2VhcmNoOiBCZWdp biBiYWNrd2FyZCBzZWFyY2ggZm9yIHRleHRcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAg S19GV0RTUkNIICAgICA6ICAgICAgICAgICAgLyogU2VhcmNoIEZvcndhcmRzIGZvciB0ZXh0ICov CisgICAgICBwcmludGYoIlxcS2Z3ZHNlYXJjaCAgICAgU2VhcmNoOiBCZWdpbiBmb3J3YXJkIHNl YXJjaCBmb3IgdGV4dFxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX0JBQ0tORVhUICAg IDogICAgIC8qIFNlYXJjaCBCYWNrd2FyZHMgZm9yIG5leHQgaW5zdGFuY2Ugb2YgdGV4dCAqLwor ICAgICAgcHJpbnRmKAorICAgICAgIlxcS2JhY2tuZXh0ICAgICAgU2VhcmNoOiBGaW5kIG5leHQg aW5zdGFuY2Ugb2YgdGV4dCBiYWNrd2FyZHNcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAg S19GV0RORVhUICAgICA6ICAgICAgLyogU2VhcmNoIEZvcndhcmRzIGZvciBuZXh0IGluc3RhbmNl IG9mIHRleHQgKi8KKyAgICAgIHByaW50ZigiXFxLZndkbmV4dCAgICAgICBTZWFyY2g6IEZpbmQg bmV4dCBpbnN0YW5jZSBvZiB0ZXh0IGZvcndhcmRzXG4iKTsKKyAgICAgIGJyZWFrOworCisvKiBN aXNjZWxsYW5lb3VzIEtlcm1pdCBhY3Rpb25zICovCisKKyAgICBjYXNlICBLX0VYSVQgICAgICAg IDogICAgICAgICAgICAgICAvKiBSZXR1cm4gdG8gY29tbWFuZCBwYXJzZXIgKi8KKyAgICAgIHBy aW50ZigiXFxLZXhpdCAgICAgICAgICBUb2dnbGUgYmV0d2VlbiBDT01NQU5EIGFuZCBDT05ORUNU IG1vZGVzXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfQlJFQUsgICAgICAgOiAgICAg ICAgICAgICAgIC8qIFNlbmQgYSBCUkVBSyAqLworICAgICAgcHJpbnRmKCJcXEticmVhayAgICAg ICAgIFRyYW5zbWl0IEJSRUFLIHNpZ25hbCB0byBob3N0XG4iKTsKKyAgICAgIGJyZWFrOworICAg IGNhc2UgIEtfUkVTRVQgICAgICAgOiAgICAgICAgICAgICAgIC8qIFJlc2V0IGVtdWxhdG9yICov CisgICAgICBwcmludGYoIlxcS3Jlc2V0ICAgICAgICAgUmVzZXQgVGVybWluYWwgRW11bGF0b3Ig dG8gdXNlciBkZWZhdWx0c1xuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX0RPUyAgICAg ICAgIDogICAgICAgICAgICAgICAvKiBQdXNoIHRvIERPUyAoaS5lLiBPUy8yKSAqLworICAgICAg cHJpbnRmKCJcXEtkb3MsXFxLb3MyICAgICBQdXNoIHRvIENvbW1hbmQgU2hlbGxcbiIpOworICAg ICAgYnJlYWs7CisgICAgY2FzZSAgS19IQU5HVVAgICAgICA6ICAgICAgICAgICAgICAgLyogSGFu ZyB1cCB0aGUgY29ubmVjdGlvbiAqLworICAgICAgcHJpbnRmKCJcXEtoYW5ndXAgICAgICAgIEhh bmd1cCB0aGUgYWN0aXZlIGNvbm5lY3Rpb25cbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAg S19EVU1QICAgICAgICA6ICAgICAgICAgICAgICAgLyogRHVtcC9QcmludCBjdXJyZW50IHNjcmVl biAqLworICAgICAgcHJpbnRmKAorICAgICAiXFxLZHVtcCAgICAgICAgICBEdW1wL2NvcHkgY3Vy cmVudCBzY3JlZW4gdG8gU0VUIFBSSU5URVIgZGV2aWNlL2ZpbGVcbiIpOworICAgICAgYnJlYWs7 CisgICAgY2FzZSAgS19MQlJFQUsgICAgICA6ICAgICAgICAgICAgICAgLyogU2VuZCBhIExvbmcg QlJFQUsgKi8KKyAgICAgIHByaW50ZigiXFxLbGJyZWFrICAgICAgICBUcmFuc21pdCBMT05HIEJS RUFLIHNpZ25hbCB0byBob3N0XG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfTlVMTCAg ICAgICAgOiAgICAgICAgICAgICAgIC8qIFNlbmQgYSBOVUwgKi8KKyAgICAgIHByaW50ZigiXFxL bnVsbCAgICAgICAgICBUcmFuc21pdCBOVUxMICgnXDAnKSBjaGFyYWN0ZXIgdG8gaG9zdFxuIik7 CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX0hFTFAgICAgICAgIDogICAgICAgICAgICAgICAv KiBQb3AtdXAgaGVscCAqLworICAgICAgcHJpbnRmKCJcXEtoZWxwICAgICAgICAgIFJhaXNlIFBv cC1VcCBoZWxwIGRpc3BsYXlcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19IT0xEU0NS TiAgICA6ICAgICAgICAgICAgICAgLyogSG9sZCBzY3JlZW4gKi8KKyAgICAgIHByaW50ZigiXFxL aG9sZHNjcm4gICAgICBQYXVzZSBkYXRhIGlucHV0IGR1cmluZyBDT05ORUNUIG1vZGVcbiIpOwor ICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19JR05PUkUgICAgICA6ICAgICAgICAgICAgICAgLyog SWdub3JlIHRoaXMga2V5LCBkb24ndCBldmVuIGJlZXAgKi8KKyAgICAgIHByaW50ZigiXFxLaWdu b3JlICAgICAgICBJZ25vcmUga2V5XG4iKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSAgS19M T0dPRkYgICAgICA6ICAgICAgICAgICAgICAgLyogVHVybiBvZmYgc2Vzc2lvbiBsb2dnaW5nICov CisgICAgICBwcmludGYoIlxcS2xvZ29mZiAgICAgICAgVHVybiBvZmYgc2Vzc2lvbiBsb2dnaW5n IChzZWUgXFxLc2Vzc2lvbilcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19MT0dPTiAg ICAgICA6ICAgICAgICAgICAgICAgLyogVHVybiBvbiBzZXNzaW9uIGxvZ2dpbmcgKi8KKyAgICAg IHByaW50ZigiXFxLbG9nb24gICAgICAgICBUdXJuIG9uIHNlc3Npb24gbG9nZ2luZyAoc2VlIFxc S3Nlc3Npb24pXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgS19TRVNTSU9OOgorICAgICAg cHJpbnRmKAorICAgICAgICAgIlxcS3Nlc3Npb24gICAgICAgVG9nZ2xlIG9uL29mZiBzZXNzaW9u IGxvZ2dpbmcgdG8gJ3Nlc3Npb24ubG9nJ1xuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlIEtf QVVUT0RPV046CisgICAgICBwcmludGYoIlxcS2F1dG9kb3duICAgICAgVG9nZ2xlIG9uL29mZiB0 ZXJtaW5hbCBhdXRvZG93bmxvYWQuXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgS19CWVRF U0laRToKKyAgICAgIHByaW50ZigKKyAgICAgICAgIlxcS2J5dGVzaXplICAgICAgVG9nZ2xlIHRl cm1pbmFsIGJ5dGVzaXplIGJldHdlZW4gNyBhbmQgOCBiaXRzLlxuIik7CisgICAgICBicmVhazsK KworI2lmZGVmIENPTU1FTlQKKyAgICBjYXNlIE1PREVMSU5FOgorICAgIGNhc2UgIEtfTkVUSE9M RCAgICAgOiAgICAgICAgICAgICAgIC8qIFB1dCBuZXR3b3JrIGNvbm5lY3Rpb24gb24gaG9sZCAq LworICAgIGNhc2UgIEtfTkVYVFNFU1MgICAgOiAgICAgICAgICAgICAgIC8qIFRvZ2dsZSB0byBu ZXh0IG5ldHdvcmsgc2Vzc2lvbiAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKworICAgIGNhc2Ug S19DVVJTT1JfVVJMOgorICAgICAgICBwcmludGYoCisgICAgICJcXEt1cmwgICAgICAgICAgIFRy ZWF0IHRleHQgdW5kZXIgY3Vyc29yIHBvc2l0aW9uIGFzIGEgVVJMXG4iKTsKKyAgICAgICAgYnJl YWs7CisgICAgY2FzZSAgS19TVEFUVVMgICAgICA6ICAgICAgICAgICAgICAgLyogU2hvdyBzdGF0 dXMgKi8KKyAgICAgIHByaW50ZigKKyAgICAgIlxcS3N0YXR1cyAgICAgICAgVG9nZ2xlIHN0YXR1 c2xpbmUgKE5vbmUsIEluZGljYXRvciwgSG9zdCBXcml0ZWFibGUpXG4iKTsKKyAgICAgIGJyZWFr OworICAgIGNhc2UgIEtfVEVSTVRZUEUgICAgOiAgICAgICAgICAgICAgIC8qIFRvZ2dsZSB0ZXJt IHR5cGU6IHRleHQvZ3JhcGhpY3MgKi8KKyAgICAgIHByaW50ZigiXFxLdGVybXR5cGUgICAgICBU b2dnbGUgVGVybWluYWwgVHlwZVxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX1BSVENU UkwgICAgIDogICAgICAgICAgICAgICAvKiBQcmludCBDb250cm9sbGVyIG1vZGUgKi8KKyAgICAg IHByaW50ZigiXFxLcHJ0Y3RybCAgICAgICBUb2dnbGUgQ3RybC1QcmludCAodHJhbnNwYXJlbnQp IG1vZGVcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19QUklOVEZGICAgICA6ICAgICAg ICAgICAgICAgLyogUHJpbnQgZm9ybWZlZWQgKi8KKyAgICAgIHByaW50ZigiXFxLcHJpbnRmZiAg ICAgICBPdXRwdXQgRm9ybSBGZWVkIHRvIFNFVCBQUklOVEVSIGRldmljZVxuIik7CisgICAgICBi cmVhazsKKyAgICBjYXNlICBLX0ZMSVBTQ04gICAgIDogICAgICAgICAgICAgICAvKiBGbGlwIHNj cmVlbiAqLworICAgICAgcHJpbnRmKCJcXEtmbGlwc2NuICAgICAgIFJldmVyc2UgZm9yZWdyb3Vu ZCBhbmQgYmFja2dyb3VuZCBjb2xvcnNcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19E RUJVRyAgICAgICA6ICAgICAgICAgICAgICAgLyogVG9nZ2xlIGRlYnVnZ2luZyAqLworICAgICAg cHJpbnRmKCJcXEtkZWJ1ZyAgICAgICAgIFRvZ2dsZSBUZXJtaW5hbCBEZWJ1ZyBtb2RlXG4iKTsK KyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfVE5fU0FLICAgICAgOiAgICAgICAgICAgICAgIC8q IFRFTE5FVCBTZWN1cmUgQWNjZXNzIEtleSAqLworICAgICAgcHJpbnRmKCJcXEt0bl9zYWsgICAg ICAgIFRFTE5FVDogSUJNIFNlY3VyZSBBY2Nlc3MgS2V5XG4iKTsKKyAgICAgIHByaW50ZigiICAg ICAgICAgICAgICAgIFVzZWQgdG8gcmVxdWVzdCBhIFRydXN0ZWQgU2hlbGwgd2l0aCBBSVhcbiIp OworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19UTl9BTyAgICAgICA6ICAgICAgICAgICAgICAg LyogVEVMTkVUIENhbmNlbCBPdXRwdXQgKi8KKyAgICAgIHByaW50ZigiXFxLdG5fYW8gICAgICAg ICBURUxORVQ6IFRyYW5zbWl0IENhbmNlbC1PdXRwdXQgcmVxdWVzdFxuIik7CisgICAgICBicmVh azsKKyAgICBjYXNlICBLX1ROX0FZVCAgICAgIDogICAgICAgICAgICAgICAvKiBURUxORVQgQXJl IFlvdSBUaGVyZSAqLworICAgICAgcHJpbnRmKCJcXEt0bmF5dCAgICAgICAgIFRFTE5FVDogVHJh bnNtaXQgQXJlIFlvdSBUaGVyZT8gcmVxdWVzdFxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNl ICBLX1ROX0VDICAgICAgIDogICAgICAgICAgICAgICAvKiBURUxORVQgRXJhc2UgQ2hhcmFjdGVy ICovCisgICAgICBwcmludGYoIlxcS3RuX2VjICAgICAgICAgVEVMTkVUOiBUcmFuc21pdCBFcmFz ZSBDaGFyYWN0ZXIgcmVxdWVzdFxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX1ROX0VM ICAgICAgIDogICAgICAgICAgICAgICAvKiBURUxORVQgRXJhc2UgTGluZSAqLworICAgICAgcHJp bnRmKCJcXEt0bl9lbCAgICAgICAgIFRFTE5FVDogVHJhbnNtaXQgRXJhc2UgTGluZSByZXF1ZXN0 XG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfVE5fR0EgICAgICAgOiAgICAgICAgICAg ICAgIC8qIFRFTE5FVCBHbyBBaGVhZCAqLworICAgICAgcHJpbnRmKCJcXEt0bl9nYSAgICAgICAg IFRFTE5FVDogVHJhbnNtaXQgR28gQWhlYWQgcmVxdWVzdFxuIik7CisgICAgICBicmVhazsKKyAg ICBjYXNlICBLX1ROX0lQICAgICAgIDogICAgICAgICAgICAgICAvKiBURUxORVQgSW50ZXJydXB0 IFByb2Nlc3MgKi8KKyAgICAgIHByaW50ZigiXFxLdG5faXAgICAgICAgICBURUxORVQ6IFRyYW5z bWl0IEludGVycnVwdCBQcm9jZXNzIHJlcXVlc3RcbiIpOworICAgICAgYnJlYWs7CisgICAgY2Fz ZSAgS19UTl9MT0dPVVQgICA6ICAgICAgICAgICAgICAgLyogVEVMTkVUIExvZ291dCAqLworICAg ICAgcHJpbnRmKCJcXEt0bl9sb2dvdXQgICAgIFRFTE5FVDogVHJhbnNtaXQgRG8gTG9nb3V0IE9w dGlvblxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX1ROX05BV1MgICA6ICAgICAgICAg ICAgICAgICAvKiBURUxORVQgTkFXUyAqLworICAgICAgcHJpbnRmKAorICAgICAgICAiXFxLdG5f bmF3cyAgICAgICBURUxORVQ6IFRyYW5zbWl0IFdpbmRvdyBTaXplIGlmIE5BV1MgaXMgYWN0aXZl XG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfUEFTVEUgICAgICAgOiAgICAgICAgICAg ICAgIC8qIFBhc3RlIGRhdGEgZnJvbSBjbGlwYm9hcmQgKi8KKyAgICAgIHByaW50ZigiXFxLcGFz dGUgICAgICAgICBQYXN0ZSBkYXRhIGZyb20gY2xpcGJvYXJkIHRvIGhvc3RcbiIpOworICAgICAg YnJlYWs7CisgICAgY2FzZSAgS19DTFJTQ1JOICAgICA6ICAgICAgICAgICAgICAgLyogQ2xlYXIg VGVybWluYWwgU2NyZWVuICovCisgICAgICBwcmludGYoIlxcS2NsZWFyc2NyZWVuICAgQ2xlYXIg dGhlIFRlcm1pbmFsIHNjcmVlblxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX1BSVEFV VE8gICAgIDogICAgICAgICAgICAgICAvKiBQcmludCBBdXRvIG1vZGUgKi8KKyAgICAgIHByaW50 ZigiXFxLcHJ0YXV0byAgICAgICBUb2dnbGUgQXV0by1QcmludCBtb2RlXG4iKTsKKyAgICAgIGJy ZWFrOworICAgIGNhc2UgIEtfUFJUQ09QWSAgICAgOiAgICAgICAgICAgICAgIC8qIFByaW50IENv cHkgbW9kZSAqLworICAgICAgcHJpbnRmKCJcXEtwcnRjb3B5ICAgICAgIFRvZ2dsZSBDb3B5LVBy aW50IG1vZGVcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19BTlNXRVJCQUNLICA6ICAg ICAgICAgICAgICAgLyogVHJhbnNtaXQgQW5zd2VyYmFjayBTdHJpbmcgKi8KKyAgICAgIHByaW50 ZigiXFxLYW5zd2VyYmFjayAgICBUcmFuc21pdCBhbnN3ZXJiYWNrIHN0cmluZyB0byBob3N0XG4i KTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfU0VUX0JPT0sgICAgOiAgICAgICAgICAgICAg IC8qIFNldCBCb29rbWFyayAqLworICAgICAgcHJpbnRmKCJcXEtzZXRib29rICAgICAgIFNldCBi b29rbWFya1xuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX1FVSVQgICAgICAgIDogICAg ICAgICAgICAgICAvKiBRdWl0IEtlcm1pdCAqLworICAgICAgcHJpbnRmKCJcXEtxdWl0ICAgICAg ICAgIEhhbmd1cCBjb25uZWN0aW9uIGFuZCBxdWl0IGtlcm1pdFxuIik7CisgICAgICBicmVhazsK KyAgICBjYXNlICBLX0tFWUNMSUNLICAgIDogICAgICAgICAgICAgICAvKiBUb2dnbGUgS2V5Y2xp Y2sgKi8KKyAgICAgIHByaW50ZigiXFxLa2V5Y2xpY2sgICAgICBUb2dnbGUgS2V5Y2xpY2sgbW9k ZVxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX0xPR0RFQlVHICAgIDogICAgICAgICAg ICAgICAvKiBUb2dnbGUgRGVidWcgTG9nIEZpbGUgKi8KKyAgICAgIHByaW50ZigiXFxLbG9nZGVi dWcgICAgICBUb2dnbGUgRGVidWcgTG9nZ2luZyB0byBGaWxlXG4iKTsKKyAgICAgIGJyZWFrOwor ICAgIGNhc2UgIEtfRk5LRVlTICAgICAgOiAgICAgICAgICAgICAgIC8qIFNob3cgRnVuY3Rpb24g S2V5IExhYmVscyAqLworICAgICAgcHJpbnRmKCJcXEtmbmtleXMgICAgICAgIERpc3BsYXkgRnVu Y3Rpb24gS2V5IExhYmVsc1xuIik7CisgICAgICBicmVhazsKKworI2lmZGVmIE9TMk1PVVNFCisv KiBNb3VzZSBvbmx5IEt2ZXJicyAqLworCisgICAgY2FzZSAgS19NT1VTRV9DVVJQT1MgOgorICAg ICAgcHJpbnRmKCJcXEttb3VzZWN1cnBvcyAgIE1vdXNlOiBNb3ZlIGhvc3QgY3Vyc29yIHRvIHBv c2l0aW9uXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfTU9VU0VfTUFSSyAgIDoKKyAg ICAgIHByaW50ZigKKyAgICAgIlxcS21vdXNlbWFyayAgICAgTW91c2U6IE1hcmsgdGV4dCBmb3Ig c2VsZWN0aW9uIChkcmFnIGV2ZW50IG9ubHkpXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2Ug IEtfTU9VU0VfVVJMICAgIDoKKyAgICAgIHByaW50ZigiXFxLbW91c2V1cmwgICAgICBNb3VzZTog U3RhcnQgYnJvd3NlciB3aXRoIHNlbGVjdGVkIFVSTFxuIik7CisgICAgICBicmVhazsKKyNlbmRp ZiAvKiBPUzJNT1VTRSAqLworCisvKiBBTlNJIEZ1bmN0aW9uIEtleSBkZWZpbml0aW9ucyAqLwor ICAgIGNhc2UgIEtfQU5TSUYwMSAgICAgICAgICA6CisgICAgICBwcmludGYoIlxcS2Fuc2lmMDEg ICAgICAgVHJhbnNtaXQgU0NPQU5TSS9BVDM4NjogRjEgXG4iKTsKKyAgICAgIGJyZWFrOworICAg IGNhc2UgIEtfQU5TSUYwMiAgICAgICAgICA6CisgICAgICBwcmludGYoIlxcS2Fuc2lmMDIgICAg ICAgVHJhbnNtaXQgU0NPQU5TSS9BVDM4NjogRjIgXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNh c2UgIEtfQU5TSUYwMyAgICAgICAgICA6CisgICAgICBwcmludGYoIlxcS2Fuc2lmMDMgICAgICAg VHJhbnNtaXQgU0NPQU5TSS9BVDM4NjogRjMgXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2Ug IEtfQU5TSUYwNCAgICAgICAgICA6CisgICAgICBwcmludGYoIlxcS2Fuc2lmMDQgICAgICAgVHJh bnNtaXQgU0NPQU5TSS9BVDM4NjogRjQgXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtf QU5TSUYwNSAgICAgICAgICA6CisgICAgICBwcmludGYoIlxcS2Fuc2lmMDUgICAgICAgVHJhbnNt aXQgU0NPQU5TSS9BVDM4NjogRjUgXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfQU5T SUYwNiAgICAgICAgICA6CisgICAgICBwcmludGYoIlxcS2Fuc2lmMDYgICAgICAgVHJhbnNtaXQg U0NPQU5TSS9BVDM4NjogRjYgXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfQU5TSUYw NyAgICAgICAgICA6CisgICAgICBwcmludGYoIlxcS2Fuc2lmMDcgICAgICAgVHJhbnNtaXQgU0NP QU5TSS9BVDM4NjogRjcgXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfQU5TSUYwOCAg ICAgICAgICA6CisgICAgICBwcmludGYoIlxcS2Fuc2lmMDggICAgICAgVHJhbnNtaXQgU0NPQU5T SS9BVDM4NjogRjggXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfQU5TSUYwOSAgICAg ICAgICA6CisgICAgICBwcmludGYoIlxcS2Fuc2lmMDkgICAgICAgVHJhbnNtaXQgU0NPQU5TSS9B VDM4NjogRjkgXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfQU5TSUYxMCAgICAgICAg ICA6CisgICAgICBwcmludGYoIlxcS2Fuc2lmMTAgICAgICAgVHJhbnNtaXQgU0NPQU5TSS9BVDM4 NjogRjEwXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfQU5TSUYxMSAgICAgICAgICA6 CisgICAgICBwcmludGYoIlxcS2Fuc2lmMTEgICAgICAgVHJhbnNtaXQgU0NPQU5TSS9BVDM4Njog RjExXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfQU5TSUYxMiAgICAgICAgICA6Cisg ICAgICBwcmludGYoIlxcS2Fuc2lmMTIgICAgICAgVHJhbnNtaXQgU0NPQU5TSS9BVDM4NjogRjEy XG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfQU5TSUYxMyAgICAgICAgICA6CisgICAg ICBwcmludGYoIlxcS2Fuc2lmMTMgICAgICAgVHJhbnNtaXQgU0NPQU5TSS9BVDM4NjogU2hpZnQt RjEgXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfQU5TSUYxNCAgICAgICAgICA6Cisg ICAgICBwcmludGYoIlxcS2Fuc2lmMTQgICAgICAgVHJhbnNtaXQgU0NPQU5TSS9BVDM4NjogU2hp ZnQtRjIgXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfQU5TSUYxNSAgICAgICAgICA6 CisgICAgICBwcmludGYoIlxcS2Fuc2lmMTUgICAgICAgVHJhbnNtaXQgU0NPQU5TSS9BVDM4Njog U2hpZnQtRjMgXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfQU5TSUYxNiAgICAgICAg ICA6CisgICAgICBwcmludGYoIlxcS2Fuc2lmMTYgICAgICAgVHJhbnNtaXQgU0NPQU5TSS9BVDM4 NjogU2hpZnQtRjQgXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfQU5TSUYxNyAgICAg ICAgICA6CisgICAgICBwcmludGYoIlxcS2Fuc2lmMTcgICAgICAgVHJhbnNtaXQgU0NPQU5TSS9B VDM4NjogU2hpZnQtRjUgXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfQU5TSUYxOCAg ICAgICAgICA6CisgICAgICBwcmludGYoIlxcS2Fuc2lmMTggICAgICAgVHJhbnNtaXQgU0NPQU5T SS9BVDM4NjogU2hpZnQtRjYgXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfQU5TSUYx OSAgICAgICAgICA6CisgICAgICBwcmludGYoIlxcS2Fuc2lmMTkgICAgICAgVHJhbnNtaXQgU0NP QU5TSS9BVDM4NjogU2hpZnQtRjcgXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfQU5T SUYyMCAgICAgICAgICA6CisgICAgICBwcmludGYoIlxcS2Fuc2lmMjAgICAgICAgVHJhbnNtaXQg U0NPQU5TSS9BVDM4NjogU2hpZnQtRjggXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtf QU5TSUYyMSAgICAgICAgICA6CisgICAgICBwcmludGYoIlxcS2Fuc2lmMjEgICAgICAgVHJhbnNt aXQgU0NPQU5TSS9BVDM4NjogU2hpZnQtRjkgXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2Ug IEtfQU5TSUYyMiAgICAgICAgICA6CisgICAgICBwcmludGYoIlxcS2Fuc2lmMjIgICAgICAgVHJh bnNtaXQgU0NPQU5TSS9BVDM4NjogU2hpZnQtRjEwXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNh c2UgIEtfQU5TSUYyMyAgICAgICAgICA6CisgICAgICBwcmludGYoIlxcS2Fuc2lmMjMgICAgICAg VHJhbnNtaXQgU0NPQU5TSS9BVDM4NjogU2hpZnQtRjExXG4iKTsKKyAgICAgIGJyZWFrOworICAg IGNhc2UgIEtfQU5TSUYyNCAgICAgICAgICA6CisgICAgICBwcmludGYoIlxcS2Fuc2lmMjQgICAg ICAgVHJhbnNtaXQgU0NPQU5TSS9BVDM4NjogU2hpZnQtRjEyXG4iKTsKKyAgICAgIGJyZWFrOwor ICAgIGNhc2UgIEtfQU5TSUYyNSAgICAgICAgICA6CisgICAgICBwcmludGYoIlxcS2Fuc2lmMjUg ICAgICAgVHJhbnNtaXQgU0NPQU5TSS9BVDM4NjogQ3RybC1GMSBcbiIpOworICAgICAgYnJlYWs7 CisgICAgY2FzZSAgS19BTlNJRjI2ICAgICAgICAgIDoKKyAgICAgIHByaW50ZigiXFxLYW5zaWYy NiAgICAgICBUcmFuc21pdCBTQ09BTlNJL0FUMzg2OiBDdHJsLUYyIFxuIik7CisgICAgICBicmVh azsKKyAgICBjYXNlICBLX0FOU0lGMjcgICAgICAgICAgOgorICAgICAgcHJpbnRmKCJcXEthbnNp ZjI3ICAgICAgIFRyYW5zbWl0IFNDT0FOU0kvQVQzODY6IEN0cmwtRjMgXG4iKTsKKyAgICAgIGJy ZWFrOworICAgIGNhc2UgIEtfQU5TSUYyOCAgICAgICAgICA6CisgICAgICBwcmludGYoIlxcS2Fu c2lmMjggICAgICAgVHJhbnNtaXQgU0NPQU5TSS9BVDM4NjogQ3RybC1GNCBcbiIpOworICAgICAg YnJlYWs7CisgICAgY2FzZSAgS19BTlNJRjI5ICAgICAgICAgIDoKKyAgICAgIHByaW50ZigiXFxL YW5zaWYyOSAgICAgICBUcmFuc21pdCBTQ09BTlNJL0FUMzg2OiBDdHJsLUY1IFxuIik7CisgICAg ICBicmVhazsKKyAgICBjYXNlICBLX0FOU0lGMzAgICAgICAgICAgOgorICAgICAgcHJpbnRmKCJc XEthbnNpZjMwICAgICAgIFRyYW5zbWl0IFNDT0FOU0kvQVQzODY6IEN0cmwtRjYgXG4iKTsKKyAg ICAgIGJyZWFrOworICAgIGNhc2UgIEtfQU5TSUYzMSAgICAgICAgICA6CisgICAgICBwcmludGYo IlxcS2Fuc2lmMzEgICAgICAgVHJhbnNtaXQgU0NPQU5TSS9BVDM4NjogQ3RybC1GNyBcbiIpOwor ICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19BTlNJRjMyICAgICAgICAgIDoKKyAgICAgIHByaW50 ZigiXFxLYW5zaWYzMiAgICAgICBUcmFuc21pdCBTQ09BTlNJL0FUMzg2OiBDdHJsLUY4IFxuIik7 CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX0FOU0lGMzMgICAgICAgICAgOgorICAgICAgcHJp bnRmKCJcXEthbnNpZjMzICAgICAgIFRyYW5zbWl0IFNDT0FOU0kvQVQzODY6IEN0cmwtRjkgXG4i KTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfQU5TSUYzNCAgICAgICAgICA6CisgICAgICBw cmludGYoIlxcS2Fuc2lmMzQgICAgICAgVHJhbnNtaXQgU0NPQU5TSS9BVDM4NjogQ3RybC1GMTBc biIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19BTlNJRjM1ICAgICAgICAgIDoKKyAgICAg IHByaW50ZigiXFxLYW5zaWYzNSAgICAgICBUcmFuc21pdCBTQ09BTlNJL0FUMzg2OiBDdHJsLUYx MVxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX0FOU0lGMzYgICAgICAgICAgOgorICAg ICAgcHJpbnRmKCJcXEthbnNpZjM2ICAgICAgIFRyYW5zbWl0IFNDT0FOU0kvQVQzODY6IEN0cmwt RjEyXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfQU5TSUYzNyAgICAgICAgICA6Cisg ICAgICBwcmludGYoIlxcS2Fuc2lmMzcgICAgICAgVHJhbnNtaXQgU0NPQU5TSS9BVDM4NjogQ3Ry bC1TaGlmdC1GMSBcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19BTlNJRjM4ICAgICAg ICAgIDoKKyAgICAgIHByaW50ZigiXFxLYW5zaWYzOCAgICAgICBUcmFuc21pdCBTQ09BTlNJL0FU Mzg2OiBDdHJsLVNoaWZ0LUYyIFxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX0FOU0lG MzkgICAgICAgICAgOgorICAgICAgcHJpbnRmKCJcXEthbnNpZjM5ICAgICAgIFRyYW5zbWl0IFND T0FOU0kvQVQzODY6IEN0cmwtU2hpZnQtRjMgXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2Ug IEtfQU5TSUY0MCAgICAgICAgICA6CisgICAgICBwcmludGYoIlxcS2Fuc2lmNDAgICAgICAgVHJh bnNtaXQgU0NPQU5TSS9BVDM4NjogQ3RybC1TaGlmdC1GNCBcbiIpOworICAgICAgYnJlYWs7Cisg ICAgY2FzZSAgS19BTlNJRjQxICAgICAgICAgIDoKKyAgICAgIHByaW50ZigiXFxLYW5zaWY0MSAg ICAgICBUcmFuc21pdCBTQ09BTlNJL0FUMzg2OiBDdHJsLVNoaWZ0LUY1IFxuIik7CisgICAgICBi cmVhazsKKyAgICBjYXNlICBLX0FOU0lGNDIgICAgICAgICAgOgorICAgICAgcHJpbnRmKCJcXEth bnNpZjQyICAgICAgIFRyYW5zbWl0IFNDT0FOU0kvQVQzODY6IEN0cmwtU2hpZnQtRjYgXG4iKTsK KyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfQU5TSUY0MyAgICAgICAgICA6CisgICAgICBwcmlu dGYoIlxcS2Fuc2lmNDMgICAgICAgVHJhbnNtaXQgU0NPQU5TSS9BVDM4NjogQ3RybC1TaGlmdC1G NyBcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19BTlNJRjQ0ICAgICAgICAgIDoKKyAg ICAgIHByaW50ZigiXFxLYW5zaWY0NCAgICAgICBUcmFuc21pdCBTQ09BTlNJL0FUMzg2OiBDdHJs LVNoaWZ0LUY4IFxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX0FOU0lGNDUgICAgICAg ICAgOgorICAgICAgcHJpbnRmKCJcXEthbnNpZjQ1ICAgICAgIFRyYW5zbWl0IFNDT0FOU0kvQVQz ODY6IEN0cmwtU2hpZnQtRjkgXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfQU5TSUY0 NiAgICAgICAgICA6CisgICAgICBwcmludGYoIlxcS2Fuc2lmNDYgICAgICAgVHJhbnNtaXQgU0NP QU5TSS9BVDM4NjogQ3RybC1TaGlmdC1GMTBcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAg S19BTlNJRjQ3ICAgICAgICAgIDoKKyAgICAgIHByaW50ZigiXFxLYW5zaWY0NyAgICAgICBUcmFu c21pdCBTQ09BTlNJL0FUMzg2OiBDdHJsLVNoaWZ0LUYxMVxuIik7CisgICAgICBicmVhazsKKyAg ICBjYXNlICBLX0FOU0lGNDggICAgICAgICAgOgorICAgICAgcHJpbnRmKCJcXEthbnNpZjQ4ICAg ICAgIFRyYW5zbWl0IFNDT0FOU0kvQVQzODY6IEN0cmwtU2hpZnQtRjEyXG4iKTsKKyAgICAgIGJy ZWFrOworICAgIGNhc2UgIEtfQU5TSUY0OSAgICAgICAgICA6CisgICAgICBwcmludGYoIlxcS2Fu c2lmNDkgICAgICAgVHJhbnNtaXQgU0NPQU5TSS9BVDM4NjogSG9tZVxuIik7CisgICAgICBicmVh azsKKyAgICBjYXNlICBLX0FOU0lGNTAgICAgICAgICAgOgorICAgICAgcHJpbnRmKCJcXEthbnNp ZjUwICAgICAgIFRyYW5zbWl0IFNDT0FOU0kvQVQzODY6IFVwIEFycm93XG4iKTsKKyAgICAgIGJy ZWFrOworICAgIGNhc2UgIEtfQU5TSUY1MSAgICAgICAgICA6CisgICAgICBwcmludGYoIlxcS2Fu c2lmNTEgICAgICAgVHJhbnNtaXQgU0NPQU5TSS9BVDM4NjogUGdVcFxuIik7CisgICAgICBicmVh azsKKyAgICBjYXNlICBLX0FOU0lGNTIgICAgICAgICAgOgorICAgICAgcHJpbnRmKCJcXEthbnNp ZjUyICAgICAgIFRyYW5zbWl0IFNDT0FOU0kvQVQzODY6IEN0cmwtU2hpZnQtU3VidHJhY3RcbiIp OworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19BTlNJRjUzICAgICAgICAgIDoKKyAgICAgIHBy aW50ZigiXFxLYW5zaWY1MyAgICAgICBUcmFuc21pdCBTQ09BTlNJL0FUMzg2OiBMZWZ0IEFycm93 XG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfQU5TSUY1NCAgICAgICAgICA6CisgICAg ICBwcmludGYoIlxcS2Fuc2lmNTQgICAgICAgVHJhbnNtaXQgU0NPQU5TSS9BVDM4NjogQ2xlYXJc biIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19BTlNJRjU1ICAgICAgICAgIDoKKyAgICAg IHByaW50ZigiXFxLYW5zaWY1NSAgICAgICBUcmFuc21pdCBTQ09BTlNJL0FUMzg2OiBSaWdodCBB cnJvd1xuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX0FOU0lGNTYgICAgICAgICAgOgor ICAgICAgcHJpbnRmKCJcXEthbnNpZjU2ICAgICAgIFRyYW5zbWl0IFNDT0FOU0kvQVQzODY6IFNo aWZ0LUFkZFxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX0FOU0lGNTcgICAgICAgICAg OgorICAgICAgcHJpbnRmKCJcXEthbnNpZjU3ICAgICAgIFRyYW5zbWl0IFNDT0FOU0kvQVQzODY6 IEVuZFxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX0FOU0lGNTggICAgICAgICAgOgor ICAgICAgcHJpbnRmKCJcXEthbnNpZjU4ICAgICAgIFRyYW5zbWl0IFNDT0FOU0kvQVQzODY6IERv d24gQXJyb3dcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19BTlNJRjU5ICAgICAgICAg IDoKKyAgICAgIHByaW50ZigiXFxLYW5zaWY1OSAgICAgICBUcmFuc21pdCBTQ09BTlNJL0FUMzg2 OiBQZ0RuXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfQU5TSUY2MCAgICAgICAgICA6 CisgICAgICBwcmludGYoIlxcS2Fuc2lmNjAgICAgICAgVHJhbnNtaXQgU0NPQU5TSS9BVDM4Njog SW5zZXJ0XG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfQU5TSUY2MSAgICAgICAgICA6 CisgICAgICBwcmludGYoIlxcS2Fuc2lmNjEgICAgICAgVHJhbnNtaXQgU0NPQU5TSS9BVDM4Njog KG5vdCBuYW1lZClcbiIpOworICAgICAgYnJlYWs7CisKKy8qIFdZU0UgRnVuY3Rpb24gS2V5cyAo dW5zaGlmdGVkKSAqLworICAgIGNhc2UgIEtfV1lGMDEgICAgICAgICAgICA6CisgICAgICBwcmlu dGYoIlxcS3d5ZjAxICAgICAgICAgVHJhbnNtaXQgV1lTRSAzMC81MC82MC8xNjA6IEYxXG4iKTsK KyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfV1lGMDIgICAgICAgICAgICA6CisgICAgICBwcmlu dGYoIlxcS3d5ZjAyICAgICAgICAgVHJhbnNtaXQgV1lTRSAzMC81MC82MC8xNjA6IEYyXG4iKTsK KyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfV1lGMDMgICAgICAgICAgICA6CisgICAgICBwcmlu dGYoIlxcS3d5ZjAzICAgICAgICAgVHJhbnNtaXQgV1lTRSAzMC81MC82MC8xNjA6IEYzXG4iKTsK KyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfV1lGMDQgICAgICAgICAgICA6CisgICAgICBwcmlu dGYoIlxcS3d5ZjA0ICAgICAgICAgVHJhbnNtaXQgV1lTRSAzMC81MC82MC8xNjA6IEY0XG4iKTsK KyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfV1lGMDUgICAgICAgICAgICA6CisgICAgICBwcmlu dGYoIlxcS3d5ZjA1ICAgICAgICAgVHJhbnNtaXQgV1lTRSAzMC81MC82MC8xNjA6IEY1XG4iKTsK KyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfV1lGMDYgICAgICAgICAgICA6CisgICAgICBwcmlu dGYoIlxcS3d5ZjA2ICAgICAgICAgVHJhbnNtaXQgV1lTRSAzMC81MC82MC8xNjA6IEY2XG4iKTsK KyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfV1lGMDcgICAgICAgICAgICA6CisgICAgICBwcmlu dGYoIlxcS3d5ZjA3ICAgICAgICAgVHJhbnNtaXQgV1lTRSAzMC81MC82MC8xNjA6IEY3XG4iKTsK KyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfV1lGMDggICAgICAgICAgICA6CisgICAgICBwcmlu dGYoIlxcS3d5ZjA4ICAgICAgICAgVHJhbnNtaXQgV1lTRSAzMC81MC82MC8xNjA6IEY4XG4iKTsK KyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfV1lGMDkgICAgICAgICAgICA6CisgICAgICBwcmlu dGYoIlxcS3d5ZjA5ICAgICAgICAgVHJhbnNtaXQgV1lTRSAzMC81MC82MC8xNjA6IEY5XG4iKTsK KyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfV1lGMTAgICAgICAgICAgICA6CisgICAgICBwcmlu dGYoIlxcS3d5ZjEwICAgICAgICAgVHJhbnNtaXQgV1lTRSAzMC81MC82MC8xNjA6IEYxMFxuIik7 CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX1dZRjExICAgICAgICAgICAgOgorICAgICAgcHJp bnRmKCJcXEt3eWYxMSAgICAgICAgIFRyYW5zbWl0IFdZU0UgMzAvNTAvNjAvMTYwOiBGMTFcbiIp OworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19XWUYxMiAgICAgICAgICAgIDoKKyAgICAgIHBy aW50ZigiXFxLd3lmMTIgICAgICAgICBUcmFuc21pdCBXWVNFIDMwLzUwLzYwLzE2MDogRjEyXG4i KTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfV1lGMTMgICAgICAgICAgICA6CisgICAgICBw cmludGYoIlxcS3d5ZjEzICAgICAgICAgVHJhbnNtaXQgV1lTRSAzMC81MC82MC8xNjA6IEYxM1xu Iik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX1dZRjE0ICAgICAgICAgICAgOgorICAgICAg cHJpbnRmKCJcXEt3eWYxNCAgICAgICAgIFRyYW5zbWl0IFdZU0UgMzAvNTAvNjAvMTYwOiBGMTRc biIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19XWUYxNSAgICAgICAgICAgIDoKKyAgICAg IHByaW50ZigiXFxLd3lmMTUgICAgICAgICBUcmFuc21pdCBXWVNFIDMwLzUwLzYwLzE2MDogRjE1 XG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfV1lGMTYgICAgICAgICAgICA6CisgICAg ICBwcmludGYoIlxcS3d5ZjE2ICAgICAgICAgVHJhbnNtaXQgV1lTRSAzMC81MC82MC8xNjA6IEYx NlxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX1dZRjE3ICAgICAgICAgICAgOgorICAg ICAgcHJpbnRmKCJcXEt3eWYxNyAgICAgICAgIFRyYW5zbWl0IFdZU0UgMzAvNTAvNjAvMTYwOiBG MTdcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19XWUYxOCAgICAgICAgICAgIDoKKyAg ICAgIHByaW50ZigiXFxLd3lmMTggICAgICAgICBUcmFuc21pdCBXWVNFIDMwLzUwLzYwLzE2MDog RjE4XG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfV1lGMTkgICAgICAgICAgICA6Cisg ICAgICBwcmludGYoIlxcS3d5ZjE5ICAgICAgICAgVHJhbnNtaXQgV1lTRSAzMC81MC82MC8xNjA6 IEYxOVxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX1dZRjIwICAgICAgICAgICAgOgor ICAgICAgcHJpbnRmKCJcXEt3eWYyMCAgICAgICAgIFRyYW5zbWl0IFdZU0UgMzAvNTAvNjAvMTYw OiBGMjBcbiIpOworICAgICAgYnJlYWs7CisKKy8qIFdZU0UgRnVuY3Rpb24gS2V5cyAoc2hpZnRl ZCkgKi8KKyAgICBjYXNlICBLX1dZU0YwMSAgICAgICAgICAgOgorICAgICAgcHJpbnRmKCJcXEt3 eXNmMDEgICAgICAgIFRyYW5zbWl0IFdZU0UgMzAvNTAvNjAvMTYwOiBTaGlmdC1GMVxuIik7Cisg ICAgICBicmVhazsKKyAgICBjYXNlICBLX1dZU0YwMiAgICAgICAgICAgOgorICAgICAgcHJpbnRm KCJcXEt3eXNmMDIgICAgICAgIFRyYW5zbWl0IFdZU0UgMzAvNTAvNjAvMTYwOiBTaGlmdC1GMlxu Iik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX1dZU0YwMyAgICAgICAgICAgIDoKKyAgICAg IHByaW50ZigiXFxLd3lzZjAzICAgICAgICBUcmFuc21pdCBXWVNFIDMwLzUwLzYwLzE2MDogU2hp ZnQtRjNcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19XWVNGMDQgICAgICAgICAgICA6 CisgICAgICBwcmludGYoIlxcS3d5c2YwNCAgICAgICAgVHJhbnNtaXQgV1lTRSAzMC81MC82MC8x NjA6IFNoaWZ0LUY0XG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfV1lTRjA1ICAgICAg ICAgICAgOgorICAgICAgcHJpbnRmKCJcXEt3eXNmMDUgICAgICAgIFRyYW5zbWl0IFdZU0UgMzAv NTAvNjAvMTYwOiBTaGlmdC1GNVxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX1dZU0Yw NiAgICAgICAgICAgIDoKKyAgICAgIHByaW50ZigiXFxLd3lzZjA2ICAgICAgICBUcmFuc21pdCBX WVNFIDMwLzUwLzYwLzE2MDogU2hpZnQtRjZcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAg S19XWVNGMDcgICAgICAgICAgICA6CisgICAgICBwcmludGYoIlxcS3d5c2YwNyAgICAgICAgVHJh bnNtaXQgV1lTRSAzMC81MC82MC8xNjA6IFNoaWZ0LUY3XG4iKTsKKyAgICAgIGJyZWFrOworICAg IGNhc2UgIEtfV1lTRjA4ICAgICAgICAgICAgOgorICAgICAgcHJpbnRmKCJcXEt3eXNmMDggICAg ICAgIFRyYW5zbWl0IFdZU0UgMzAvNTAvNjAvMTYwOiBTaGlmdC1GOFxuIik7CisgICAgICBicmVh azsKKyAgICBjYXNlICBLX1dZU0YwOSAgICAgICAgICAgIDoKKyAgICAgIHByaW50ZigiXFxLd3lz ZjA5ICAgICAgICBUcmFuc21pdCBXWVNFIDMwLzUwLzYwLzE2MDogU2hpZnQtRjlcbiIpOworICAg ICAgYnJlYWs7CisgICAgY2FzZSAgS19XWVNGMTAgICAgICAgICAgICA6CisgICAgICBwcmludGYo IlxcS3d5c2YxMCAgICAgICAgVHJhbnNtaXQgV1lTRSAzMC81MC82MC8xNjA6IFNoaWZ0LUYxMFxu Iik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX1dZU0YxMSAgICAgICAgICAgIDoKKyAgICAg IHByaW50ZigiXFxLd3lzZjExICAgICAgICBUcmFuc21pdCBXWVNFIDMwLzUwLzYwLzE2MDogU2hp ZnQtRjExXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfV1lTRjEyICAgICAgICAgICAg OgorICAgICAgcHJpbnRmKCJcXEt3eXNmMTIgICAgICAgIFRyYW5zbWl0IFdZU0UgMzAvNTAvNjAv MTYwOiBTaGlmdC1GMTJcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19XWVNGMTMgICAg ICAgICAgICA6CisgICAgICBwcmludGYoIlxcS3d5c2YxMyAgICAgICAgVHJhbnNtaXQgV1lTRSAz MC81MC82MC8xNjA6IFNoaWZ0LUYxM1xuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX1dZ U0YxNCAgICAgICAgICAgIDoKKyAgICAgIHByaW50ZigiXFxLd3lzZjE0ICAgICAgICBUcmFuc21p dCBXWVNFIDMwLzUwLzYwLzE2MDogU2hpZnQtRjE0XG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNh c2UgIEtfV1lTRjE1ICAgICAgICAgICAgOgorICAgICAgcHJpbnRmKCJcXEt3eXNmMTUgICAgICAg IFRyYW5zbWl0IFdZU0UgMzAvNTAvNjAvMTYwOiBTaGlmdC1GMTVcbiIpOworICAgICAgYnJlYWs7 CisgICAgY2FzZSAgS19XWVNGMTYgICAgICAgICAgICA6CisgICAgICBwcmludGYoIlxcS3d5c2Yx NiAgICAgICAgVHJhbnNtaXQgV1lTRSAzMC81MC82MC8xNjA6IFNoaWZ0LUYxNlxuIik7CisgICAg ICBicmVhazsKKyAgICBjYXNlICBLX1dZU0YxNyAgICAgICAgICAgOgorICAgICAgcHJpbnRmKCJc XEt3eXNmMTcgICAgICAgIFRyYW5zbWl0IFdZU0UgMzAvNTAvNjAvMTYwOiBTaGlmdC1GMTdcbiIp OworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19XWVNGMTggICAgICAgICAgIDoKKyAgICAgIHBy aW50ZigiXFxLd3lzZjE4ICAgICAgICBUcmFuc21pdCBXWVNFIDMwLzUwLzYwLzE2MDogU2hpZnQt RjE4XG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfV1lTRjE5ICAgICAgICAgICA6Cisg ICAgICBwcmludGYoIlxcS3d5c2YxOSAgICAgICAgVHJhbnNtaXQgV1lTRSAzMC81MC82MC8xNjA6 IFNoaWZ0LUYxOVxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX1dZU0YyMCAgICAgICAg ICAgOgorICAgICAgcHJpbnRmKCJcXEt3eXNmMjAgICAgICAgIFRyYW5zbWl0IFdZU0UgMzAvNTAv NjAvMTYwOiBTaGlmdC1GMjBcbiIpOworICAgICAgYnJlYWs7CisKKy8qIFdZU0UgRWRpdCBhbmQg U3BlY2lhbCBLZXlzICovCisgICAgY2FzZSAgS19XWUJTICAgICAgICAgOgorICAgICAgcHJpbnRm KCJcXEt3eWJzICAgICAgICAgIFRyYW5zbWl0IFdZU0UgMzAvNTAvNjAvMTYwOiBCYWNrc3BhY2Vc biIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19XWUNMUkxOICAgICAgICAgIDoKKyAgICAg IHByaW50ZigiXFxLd3ljbHJsbiAgICAgICBUcmFuc21pdCBXWVNFIDMwLzUwLzYwLzE2MDogQ2xl YXIgTGluZVxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX1dZU0NMUkxOICAgICA6Cisg ICAgIHByaW50ZigiXFxLd3lzY2xybG4gICAgICBUcmFuc21pdCBXWVNFIDMwLzUwLzYwLzE2MDog U2hpZnQtQ2xlYXIgTGluZVxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX1dZQ0xSUEcg ICAgICA6CisgICAgICBwcmludGYoIlxcS3d5Y2xycGcgICAgICAgVHJhbnNtaXQgV1lTRSAzMC81 MC82MC8xNjA6IENsZWFyIFBhZ2VcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19XWVND TFJQRyAgICAgOgorICAgIHByaW50ZigiXFxLd3lzY2xycGcgICAgICBUcmFuc21pdCBXWVNFIDMw LzUwLzYwLzE2MDogU2hpZnQtQ2xlYXIgUGFnZVxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNl ICBLX1dZREVMQ0hBUiAgICA6CisgICAgICBwcmludGYoIlxcS3d5ZGVsY2hhciAgICAgVHJhbnNt aXQgV1lTRSAzMC81MC82MC8xNjA6IERlbGV0ZSBDaGFyXG4iKTsKKyAgICAgIGJyZWFrOworICAg IGNhc2UgIEtfV1lERUxMTiAgICAgIDoKKyAgICAgIHByaW50ZigiXFxLd3lkZWxsbiAgICAgICBU cmFuc21pdCBXWVNFIDMwLzUwLzYwLzE2MDogRGVsZXRlIExpbmVcbiIpOworICAgICAgYnJlYWs7 CisgICAgY2FzZSAgS19XWUVOVEVSICAgICAgICAgIDoKKyAgICAgIHByaW50ZigiXFxLd3llbnRl ciAgICAgICBUcmFuc21pdCBXWVNFIDMwLzUwLzYwLzE2MDogRW50ZXJcbiIpOworICAgICAgYnJl YWs7CisgICAgY2FzZSAgS19XWUVTQyAgICAgICAgICAgIDoKKyAgICAgIHByaW50ZigiXFxLd3ll c2MgICAgICAgICBUcmFuc21pdCBXWVNFIDMwLzUwLzYwLzE2MDogRXNjXG4iKTsKKyAgICAgIGJy ZWFrOworICAgIGNhc2UgIEtfV1lIT01FICAgICAgICAgICA6CisgICAgICBwcmludGYoIlxcS3d5 aG9tZSAgICAgICAgVHJhbnNtaXQgV1lTRSAzMC81MC82MC8xNjA6IEhvbWVcbiIpOworICAgICAg YnJlYWs7CisgICAgY2FzZSAgS19XWVNIT01FICAgICAgICAgIDoKKyAgICAgIHByaW50ZigiXFxL d3lzaG9tZSAgICAgICBUcmFuc21pdCBXWVNFIDMwLzUwLzYwLzE2MDogU2hpZnQtSG9tZVxuIik7 CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX1dZSU5TRVJUICAgICA6CisgICAgICBwcmludGYo IlxcS3d5aW5zZXJ0ICAgICAgVHJhbnNtaXQgV1lTRSAzMC81MC82MC8xNjA6IEluc2VydFxuIik7 CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX1dZSU5TQ0hBUiAgICA6CisgICAgICBwcmludGYo IlxcS3d5aW5zY2hhciAgICAgVHJhbnNtaXQgV1lTRSAzMC81MC82MC8xNjA6IEluc2VydCBDaGFy XG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfV1lJTlNMTiAgICAgICAgICA6CisgICAg ICBwcmludGYoIlxcS3d5aW5zbG4gICAgICAgVHJhbnNtaXQgV1lTRSAzMC81MC82MC8xNjA6IElu c2VydCBMaW5lXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfV1lQR05FWFQgICAgIDoK KyAgICAgIHByaW50ZigiXFxLd3lwZ25leHQgICAgICBUcmFuc21pdCBXWVNFIDMwLzUwLzYwLzE2 MDogUGFnZSBOZXh0XG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfV1lQR1BSRVYgICAg IDoKKyAgICAgIHByaW50ZigiXFxLd3lwZ3ByZXYgICAgICBUcmFuc21pdCBXWVNFIDMwLzUwLzYw LzE2MDogUGFnZSBQcmV2aW91c1xuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX1dZUkVQ TEFDRSAgICA6CisgICAgICBwcmludGYoIlxcS3d5cmVwbGFjZSAgICAgVHJhbnNtaXQgV1lTRSAz MC81MC82MC8xNjA6IFJlcGxhY2UgICAgICBcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAg S19XWVJFVFVSTiAgICAgOgorICAgICAgcHJpbnRmKCJcXEt3eXJldHVybiAgICAgIFRyYW5zbWl0 IFdZU0UgMzAvNTAvNjAvMTYwOiBSZXR1cm4gICAgICAgXG4iKTsKKyAgICAgIGJyZWFrOworICAg IGNhc2UgIEtfV1lUQUIgICAgICAgICAgICA6CisgICAgICBwcmludGYoIlxcS3d5dGFiICAgICAg ICAgVHJhbnNtaXQgV1lTRSAzMC81MC82MC8xNjA6IFRhYiAgICAgICAgICBcbiIpOworICAgICAg YnJlYWs7CisgICAgY2FzZSAgS19XWVNUQUIgICAgICAgICAgIDoKKyAgICAgIHByaW50ZigiXFxL d3lzdGFiICAgICAgICBUcmFuc21pdCBXWVNFIDMwLzUwLzYwLzE2MDogU2hpZnQtVGFiICAgIFxu Iik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX1dZUFJUU0NOICAgICA6CisgICAgICBwcmlu dGYoIlxcS3d5cHJ0c2NuICAgICAgVHJhbnNtaXQgV1lTRSAzMC81MC82MC8xNjA6IFByaW50IFNj cmVlbiBcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19XWVNFU0MgICAgICAgOgorICAg ICAgcHJpbnRmKCJcXEt3eXNlc2MgICAgICAgIFRyYW5zbWl0IFdZU0UgMzAvNTAvNjAvMTYwOiBT aGlmdC1Fc2MgICAgXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfV1lTQlMgICAgICAg IDoKKyAgICBwcmludGYoIlxcS3d5c2JzICAgICAgICAgVHJhbnNtaXQgV1lTRSAzMC81MC82MC8x NjA6IFNoaWZ0LUJhY2tzcGFjZVxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX1dZU0VO VEVSICAgICA6CisgICAgICBwcmludGYoIlxcS3d5c2VudGVyICAgICAgVHJhbnNtaXQgV1lTRSAz MC81MC82MC8xNjA6IFNoaWZ0LUVudGVyXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtf V1lTUkVUVVJOICAgIDoKKyAgICAgIHByaW50ZigiXFxLd3lzcmV0dXJuICAgICBUcmFuc21pdCBX WVNFIDMwLzUwLzYwLzE2MDogU2hpZnQtUmV0dXJuXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNh c2UgIEtfV1lVUEFSUiAgICAgICAgICA6CisgICAgICBwcmludGYoIlxcS3d5dXBhcnIgICAgICAg VHJhbnNtaXQgV1lTRSAzMC81MC82MC8xNjA6IFVwIEFycm93XG4iKTsKKyAgICAgIGJyZWFrOwor ICAgIGNhc2UgIEtfV1lETkFSUiAgICAgICAgICA6CisgICAgICBwcmludGYoIlxcS3d5ZG5hcnIg ICAgICAgVHJhbnNtaXQgV1lTRSAzMC81MC82MC8xNjA6IERvd24gQXJyb3dcbiIpOworICAgICAg YnJlYWs7CisgICAgY2FzZSAgS19XWUxGQVJSICAgICAgICAgIDoKKyAgICAgIHByaW50ZigiXFxL d3lsZmFyciAgICAgICBUcmFuc21pdCBXWVNFIDMwLzUwLzYwLzE2MDogTGVmdCBBcnJvd1xuIik7 CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX1dZUlRBUlIgICAgICAgICAgOgorICAgICAgcHJp bnRmKCJcXEt3eXJ0YXJyICAgICAgIFRyYW5zbWl0IFdZU0UgMzAvNTAvNjAvMTYwOiBSaWdodCBB cnJvd1xuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX1dZU1VQQVJSICAgICA6CisgICAg ICBwcmludGYoIlxcS3d5c3VwYXJyICAgICAgVHJhbnNtaXQgV1lTRSAzMC81MC82MC8xNjA6IFNo aWZ0LVVwIEFycm93XG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfV1lTRE5BUlIgICAg IDoKKyAgICBwcmludGYoIlxcS3d5c2RuYXJyICAgICAgVHJhbnNtaXQgV1lTRSAzMC81MC82MC8x NjA6IFNoaWZ0LURvd24gQXJyb3dcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19XWVNM RkFSUiAgICAgOgorICAgIHByaW50ZigiXFxLd3lzbGZhcnIgICAgICBUcmFuc21pdCBXWVNFIDMw LzUwLzYwLzE2MDogU2hpZnQtTGVmdCBBcnJvd1xuIik7CisgICAgICBicmVhazsKKyAgICBjYXNl ICBLX1dZU1JUQVJSICAgICA6CisgICAgcHJpbnRmKCJcXEt3eXNydGFyciAgICAgIFRyYW5zbWl0 IFdZU0UgMzAvNTAvNjAvMTYwOiBTaGlmdC1SaWdodCBBcnJvd1xuIik7CisgICAgICBicmVhazsK KyAgICBjYXNlICBLX1dZU0VORDoKKyAgICAgIHByaW50ZigiXFxLd3lzZW5kICAgICAgICBUcmFu c21pdCBXWVNFIDMwLzUwLzYwLzE2MDogU2VuZFxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNl ICBLX1dZU1NFTkQ6CisgICAgICBwcmludGYoIlxcS3d5c3NlbmQgICAgICAgVHJhbnNtaXQgV1lT RSAzMC81MC82MC8xNjA6IFNoaWZ0LVNlbmRcbiIpOworICAgICAgYnJlYWs7CisKKy8qIERhdGEg R2VuZXJhbCBGdW5jdGlvbiBLZXlzICh1bnNoaWZ0ZWQpICovCisgICAgY2FzZSAgS19ER0YwMSAg ICAgICAgICAgIDoKKyAgICAgIHByaW50ZigiXFxLZGdmMDEgICAgICAgICBUcmFuc21pdCBEYXRh IEdlbmVyYWw6IEYxICAgICAgICAgICAgICAgICBcbiIpOworICAgICAgYnJlYWs7CisgICAgY2Fz ZSAgS19ER0YwMiAgICAgICAgICAgIDoKKyAgICAgIHByaW50ZigiXFxLZGdmMDEgICAgICAgICBU cmFuc21pdCBEYXRhIEdlbmVyYWw6IEYyICAgICAgICAgICAgICAgICBcbiIpOworICAgICAgYnJl YWs7CisgICAgY2FzZSAgS19ER0YwMyAgICAgICAgICAgIDoKKyAgICAgIHByaW50ZigiXFxLZGdm MDEgICAgICAgICBUcmFuc21pdCBEYXRhIEdlbmVyYWw6IEYzICAgICAgICAgICAgICAgICBcbiIp OworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19ER0YwNCAgICAgICAgICAgIDoKKyAgICAgIHBy aW50ZigiXFxLZGdmMDEgICAgICAgICBUcmFuc21pdCBEYXRhIEdlbmVyYWw6IEY0ICAgICAgICAg ICAgICAgICBcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19ER0YwNSAgICAgICAgICAg IDoKKyAgICAgIHByaW50ZigiXFxLZGdmMDEgICAgICAgICBUcmFuc21pdCBEYXRhIEdlbmVyYWw6 IEY1ICAgICAgICAgICAgICAgICBcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19ER0Yw NiAgICAgICAgICAgIDoKKyAgICAgIHByaW50ZigiXFxLZGdmMDEgICAgICAgICBUcmFuc21pdCBE YXRhIEdlbmVyYWw6IEY2ICAgICAgICAgICAgICAgICBcbiIpOworICAgICAgYnJlYWs7CisgICAg Y2FzZSAgS19ER0YwNyAgICAgICAgICAgIDoKKyAgICAgIHByaW50ZigiXFxLZGdmMDEgICAgICAg ICBUcmFuc21pdCBEYXRhIEdlbmVyYWw6IEY3ICAgICAgICAgICAgICAgICBcbiIpOworICAgICAg YnJlYWs7CisgICAgY2FzZSAgS19ER0YwOCAgICAgICAgICAgIDoKKyAgICAgIHByaW50ZigiXFxL ZGdmMDEgICAgICAgICBUcmFuc21pdCBEYXRhIEdlbmVyYWw6IEY4ICAgICAgICAgICAgICAgICBc biIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19ER0YwOSAgICAgICAgICAgIDoKKyAgICAg IHByaW50ZigiXFxLZGdmMDEgICAgICAgICBUcmFuc21pdCBEYXRhIEdlbmVyYWw6IEY5ICAgICAg ICAgICAgICAgICBcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19ER0YxMCAgICAgICAg ICAgIDoKKyAgICAgIHByaW50ZigiXFxLZGdmMDEgICAgICAgICBUcmFuc21pdCBEYXRhIEdlbmVy YWw6IEYxMCAgICAgICAgICAgICAgICBcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19E R0YxMSAgICAgICAgICAgIDoKKyAgICAgIHByaW50ZigiXFxLZGdmMDEgICAgICAgICBUcmFuc21p dCBEYXRhIEdlbmVyYWw6IEYxMSAgICAgICAgICAgICAgICBcbiIpOworICAgICAgYnJlYWs7Cisg ICAgY2FzZSAgS19ER0YxMiAgICAgICAgICAgIDoKKyAgICAgIHByaW50ZigiXFxLZGdmMDEgICAg ICAgICBUcmFuc21pdCBEYXRhIEdlbmVyYWw6IEYxMiAgICAgICAgICAgICAgICBcbiIpOworICAg ICAgYnJlYWs7CisgICAgY2FzZSAgS19ER0YxMyAgICAgICAgICAgIDoKKyAgICAgIHByaW50Zigi XFxLZGdmMDEgICAgICAgICBUcmFuc21pdCBEYXRhIEdlbmVyYWw6IEYxMyAgICAgICAgICAgICAg ICBcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19ER0YxNCAgICAgICAgICAgIDoKKyAg ICAgIHByaW50ZigiXFxLZGdmMDEgICAgICAgICBUcmFuc21pdCBEYXRhIEdlbmVyYWw6IEYxNCAg ICAgICAgICAgICAgICBcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19ER0YxNSAgICAg ICAgICAgIDoKKyAgICAgIHByaW50ZigiXFxLZGdmMDEgICAgICAgICBUcmFuc21pdCBEYXRhIEdl bmVyYWw6IEYxNSAgICAgICAgICAgICAgICBcbiIpOworICAgICAgYnJlYWs7CisKKy8qIERhdGEg R2VuZXJhbCBGdW5jdGlvbiBLZXlzIChzaGlmdGVkKSAqLworICAgIGNhc2UgIEtfREdTRjAxICAg ICAgICAgICA6CisgICAgICBwcmludGYoCisgICAgICAiXFxLZGdzZjAxICAgICAgICBUcmFuc21p dCBEYXRhIEdlbmVyYWw6IFNoaWZ0LUYxICAgICAgICAgICAgICAgICBcbiIpOworICAgICAgYnJl YWs7CisgICAgY2FzZSAgS19ER1NGMDIgICAgICAgICAgIDoKKyAgICAgIHByaW50ZigKKyAgICAg ICJcXEtkZ3NmMDIgICAgICAgIFRyYW5zbWl0IERhdGEgR2VuZXJhbDogU2hpZnQtRjIgICAgICAg ICAgICAgICAgIFxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX0RHU0YwMyAgICAgICAg ICAgOgorICAgICAgcHJpbnRmKAorICAgICAgIlxcS2Rnc2YwMyAgICAgICAgVHJhbnNtaXQgRGF0 YSBHZW5lcmFsOiBTaGlmdC1GMyAgICAgICAgICAgICAgICAgXG4iKTsKKyAgICAgIGJyZWFrOwor ICAgIGNhc2UgIEtfREdTRjA0ICAgICAgICAgICA6CisgICAgICBwcmludGYoCisgICAgICAiXFxL ZGdzZjA0ICAgICAgICBUcmFuc21pdCBEYXRhIEdlbmVyYWw6IFNoaWZ0LUY0ICAgICAgICAgICAg ICAgICBcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19ER1NGMDUgICAgICAgICAgIDoK KyAgICAgIHByaW50ZigKKyAgICAgICJcXEtkZ3NmMDUgICAgICAgIFRyYW5zbWl0IERhdGEgR2Vu ZXJhbDogU2hpZnQtRjUgICAgICAgICAgICAgICAgIFxuIik7CisgICAgICBicmVhazsKKyAgICBj YXNlICBLX0RHU0YwNiAgICAgICAgICAgOgorICAgICAgcHJpbnRmKAorICAgICAgIlxcS2Rnc2Yw NiAgICAgICAgVHJhbnNtaXQgRGF0YSBHZW5lcmFsOiBTaGlmdC1GNiAgICAgICAgICAgICAgICAg XG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfREdTRjA3ICAgICAgICAgICA6CisgICAg ICBwcmludGYoCisgICAgICAiXFxLZGdzZjA3ICAgICAgICBUcmFuc21pdCBEYXRhIEdlbmVyYWw6 IFNoaWZ0LUY3ICAgICAgICAgICAgICAgICBcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAg S19ER1NGMDggICAgICAgICAgIDoKKyAgICAgIHByaW50ZigKKyAgICAgICJcXEtkZ3NmMDggICAg ICAgIFRyYW5zbWl0IERhdGEgR2VuZXJhbDogU2hpZnQtRjggICAgICAgICAgICAgICAgIFxuIik7 CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX0RHU0YwOSAgICAgICAgICAgOgorICAgICAgcHJp bnRmKAorICAgICAgIlxcS2Rnc2YwOSAgICAgICAgVHJhbnNtaXQgRGF0YSBHZW5lcmFsOiBTaGlm dC1GOSAgICAgICAgICAgICAgICAgXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfREdT RjEwICAgICAgICAgICA6CisgICAgICBwcmludGYoCisgICAgICAiXFxLZGdzZjEwICAgICAgICBU cmFuc21pdCBEYXRhIEdlbmVyYWw6IFNoaWZ0LUYxMCAgICAgICAgICAgICAgICBcbiIpOworICAg ICAgYnJlYWs7CisgICAgY2FzZSAgS19ER1NGMTEgICAgICAgICAgIDoKKyAgICAgIHByaW50ZigK KyAgICAgICJcXEtkZ3NmMTEgICAgICAgIFRyYW5zbWl0IERhdGEgR2VuZXJhbDogU2hpZnQtRjEx ICAgICAgICAgICAgICAgIFxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX0RHU0YxMiAg ICAgICAgICAgOgorICAgICAgcHJpbnRmKAorICAgICAgIlxcS2Rnc2YxMiAgICAgICAgVHJhbnNt aXQgRGF0YSBHZW5lcmFsOiBTaGlmdC1GMTIgICAgICAgICAgICAgICAgXG4iKTsKKyAgICAgIGJy ZWFrOworICAgIGNhc2UgIEtfREdTRjEzICAgICAgICAgICA6CisgICAgICBwcmludGYoCisgICAg ICAiXFxLZGdzZjEzICAgICAgICBUcmFuc21pdCBEYXRhIEdlbmVyYWw6IFNoaWZ0LUYxMyAgICAg ICAgICAgICAgICBcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19ER1NGMTQgICAgICAg ICAgIDoKKyAgICAgIHByaW50ZigKKyAgICAgICJcXEtkZ3NmMTQgICAgICAgIFRyYW5zbWl0IERh dGEgR2VuZXJhbDogU2hpZnQtRjE0ICAgICAgICAgICAgICAgIFxuIik7CisgICAgICBicmVhazsK KyAgICBjYXNlICBLX0RHU0YxNSAgICAgICAgICAgOgorICAgICAgcHJpbnRmKAorICAgICAgIlxc S2Rnc2YxNSAgICAgICAgVHJhbnNtaXQgRGF0YSBHZW5lcmFsOiBTaGlmdC1GMTUgICAgICAgICAg ICAgICAgXG4iKTsKKyAgICAgIGJyZWFrOworCisvKiBEYXRhIEdlbmVyYWwgRnVuY3Rpb24gS2V5 cyAoY29udHJvbCkgKi8KKyAgICBjYXNlICBLX0RHQ0YwMSAgICAgICAgICAgOgorICAgICAgcHJp bnRmKAorICAgICAgIlxcS2RnY2YwMSAgICAgICAgVHJhbnNtaXQgRGF0YSBHZW5lcmFsOiBDdHJs LUYxICAgICAgICAgICAgICAgICBcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19ER0NG MDIgICAgICAgICAgICA6CisgICAgICBwcmludGYoCisgICAgICAiXFxLZGdjZjAyICAgICAgICBU cmFuc21pdCBEYXRhIEdlbmVyYWw6IEN0cmwtRjIgICAgICAgICAgICAgICAgIFxuIik7CisgICAg ICBicmVhazsKKyAgICBjYXNlICBLX0RHQ0YwMyAgICAgICAgICAgIDoKKyAgICAgIHByaW50ZigK KyAgICAgICJcXEtkZ2NmMDMgICAgICAgIFRyYW5zbWl0IERhdGEgR2VuZXJhbDogQ3RybC1GMyAg ICAgICAgICAgICAgICAgXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfREdDRjA0ICAg ICAgICAgICAgOgorICAgICAgcHJpbnRmKAorICAgICAgIlxcS2RnY2YwNCAgICAgICAgVHJhbnNt aXQgRGF0YSBHZW5lcmFsOiBDdHJsLUY0ICAgICAgICAgICAgICAgICBcbiIpOworICAgICAgYnJl YWs7CisgICAgY2FzZSAgS19ER0NGMDUgICAgICAgICAgICA6CisgICAgICBwcmludGYoCisgICAg ICAiXFxLZGdjZjA1ICAgICAgICBUcmFuc21pdCBEYXRhIEdlbmVyYWw6IEN0cmwtRjUgICAgICAg ICAgICAgICAgIFxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX0RHQ0YwNiAgICAgICAg ICAgIDoKKyAgICAgIHByaW50ZigKKyAgICAgICJcXEtkZ2NmMDYgICAgICAgIFRyYW5zbWl0IERh dGEgR2VuZXJhbDogQ3RybC1GNiAgICAgICAgICAgICAgICAgXG4iKTsKKyAgICAgIGJyZWFrOwor ICAgIGNhc2UgIEtfREdDRjA3ICAgICAgICAgICAgOgorICAgICAgcHJpbnRmKAorICAgICAgIlxc S2RnY2YwNyAgICAgICAgVHJhbnNtaXQgRGF0YSBHZW5lcmFsOiBDdHJsLUY3ICAgICAgICAgICAg ICAgICBcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19ER0NGMDggICAgICAgICAgICA6 CisgICAgICBwcmludGYoCisgICAgICAiXFxLZGdjZjA4ICAgICAgICBUcmFuc21pdCBEYXRhIEdl bmVyYWw6IEN0cmwtRjggICAgICAgICAgICAgICAgIFxuIik7CisgICAgICBicmVhazsKKyAgICBj YXNlICBLX0RHQ0YwOSAgICAgICAgICAgIDoKKyAgICAgIHByaW50ZigKKyAgICAgICJcXEtkZ2Nm MDkgICAgICAgIFRyYW5zbWl0IERhdGEgR2VuZXJhbDogQ3RybC1GOSAgICAgICAgICAgICAgICAg XG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfREdDRjEwICAgICAgICAgICAgOgorICAg ICAgcHJpbnRmKAorICAgICAgIlxcS2RnY2YxMCAgICAgICAgVHJhbnNtaXQgRGF0YSBHZW5lcmFs OiBDdHJsLUYxMCAgICAgICAgICAgICAgICBcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAg S19ER0NGMTEgICAgICAgICAgICA6CisgICAgICBwcmludGYoCisgICAgICAiXFxLZGdjZjExICAg ICAgICBUcmFuc21pdCBEYXRhIEdlbmVyYWw6IEN0cmwtRjExICAgICAgICAgICAgICAgIFxuIik7 CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX0RHQ0YxMiAgICAgICAgICAgIDoKKyAgICAgIHBy aW50ZigKKyAgICAgICJcXEtkZ2NmMTIgICAgICAgIFRyYW5zbWl0IERhdGEgR2VuZXJhbDogQ3Ry bC1GMTIgICAgICAgICAgICAgICAgXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfREdD RjEzICAgICAgICAgICAgOgorICAgICAgcHJpbnRmKAorICAgICAgIlxcS2RnY2YxMyAgICAgICAg VHJhbnNtaXQgRGF0YSBHZW5lcmFsOiBDdHJsLUYxMyAgICAgICAgICAgICAgICBcbiIpOworICAg ICAgYnJlYWs7CisgICAgY2FzZSAgS19ER0NGMTQgICAgICAgICAgICA6CisgICAgICBwcmludGYo CisgICAgICAiXFxLZGdjZjE0ICAgICAgICBUcmFuc21pdCBEYXRhIEdlbmVyYWw6IEN0cmwtRjE0 ICAgICAgICAgICAgICAgIFxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX0RHQ0YxNSAg ICAgICAgICAgIDoKKyAgICAgIHByaW50ZigKKyAgICAgICJcXEtkZ2NmMTUgICAgICAgIFRyYW5z bWl0IERhdGEgR2VuZXJhbDogQ3RybC1GMTUgICAgICAgICAgICAgICAgXG4iKTsKKyAgICAgIGJy ZWFrOworCisvKiBEYXRhIEdlbmVyYWwgRnVuY3Rpb24gS2V5cyAoY29udHJvbCBzaGlmdGVkKSAq LworICAgIGNhc2UgIEtfREdDU0YwMSAgICAgICAgICA6CisgICAgICBwcmludGYoCisgICAgIlxc S2RnY3NmMDEgICAgICAgVHJhbnNtaXQgRGF0YSBHZW5lcmFsOiBDdHJsLVNoaWZ0LUYxICAgICAg ICAgICAgICAgIFxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX0RHQ1NGMDIgICAgICAg ICAgOgorICAgICAgcHJpbnRmKAorICAgICJcXEtkZ2NzZjAyICAgICAgIFRyYW5zbWl0IERhdGEg R2VuZXJhbDogQ3RybC1TaGlmdC1GMiAgICAgICAgICAgICAgICBcbiIpOworICAgICAgYnJlYWs7 CisgICAgY2FzZSAgS19ER0NTRjAzICAgICAgICAgIDoKKyAgICAgIHByaW50ZigKKyAgICAiXFxL ZGdjc2YwMyAgICAgICBUcmFuc21pdCBEYXRhIEdlbmVyYWw6IEN0cmwtU2hpZnQtRjMgICAgICAg ICAgICAgICAgXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfREdDU0YwNCAgICAgICAg ICA6CisgICAgICBwcmludGYoCisgICAgIlxcS2RnY3NmMDQgICAgICAgVHJhbnNtaXQgRGF0YSBH ZW5lcmFsOiBDdHJsLVNoaWZ0LUY0ICAgICAgICAgICAgICAgIFxuIik7CisgICAgICBicmVhazsK KyAgICBjYXNlICBLX0RHQ1NGMDUgICAgICAgICAgOgorICAgICAgcHJpbnRmKAorICAgICJcXEtk Z2NzZjA1ICAgICAgIFRyYW5zbWl0IERhdGEgR2VuZXJhbDogQ3RybC1TaGlmdC1GNSAgICAgICAg ICAgICAgICBcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19ER0NTRjA2ICAgICAgICAg IDoKKyAgICAgIHByaW50ZigKKyAgICAiXFxLZGdjc2YwNiAgICAgICBUcmFuc21pdCBEYXRhIEdl bmVyYWw6IEN0cmwtU2hpZnQtRjYgICAgICAgICAgICAgICAgXG4iKTsKKyAgICAgIGJyZWFrOwor ICAgIGNhc2UgIEtfREdDU0YwNyAgICAgICAgICA6CisgICAgICBwcmludGYoCisgICAgIlxcS2Rn Y3NmMDcgICAgICAgVHJhbnNtaXQgRGF0YSBHZW5lcmFsOiBDdHJsLVNoaWZ0LUY3ICAgICAgICAg ICAgICAgIFxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX0RHQ1NGMDggICAgICAgICAg OgorICAgICAgcHJpbnRmKAorICAgICJcXEtkZ2NzZjA4ICAgICAgIFRyYW5zbWl0IERhdGEgR2Vu ZXJhbDogQ3RybC1TaGlmdC1GOCAgICAgICAgICAgICAgICBcbiIpOworICAgICAgYnJlYWs7Cisg ICAgY2FzZSAgS19ER0NTRjA5ICAgICAgICAgIDoKKyAgICAgIHByaW50ZigKKyAgICAiXFxLZGdj c2YwOSAgICAgICBUcmFuc21pdCBEYXRhIEdlbmVyYWw6IEN0cmwtU2hpZnQtRjkgICAgICAgICAg ICAgICAgXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfREdDU0YxMCAgICAgICAgICA6 CisgICAgICBwcmludGYoCisgICAgIlxcS2RnY3NmMTAgICAgICAgVHJhbnNtaXQgRGF0YSBHZW5l cmFsOiBDdHJsLVNoaWZ0LUYxMCAgICAgICAgICAgICAgIFxuIik7CisgICAgICBicmVhazsKKyAg ICBjYXNlICBLX0RHQ1NGMTEgICAgICAgICAgOgorICAgICAgcHJpbnRmKAorICAgICJcXEtkZ2Nz ZjExICAgICAgIFRyYW5zbWl0IERhdGEgR2VuZXJhbDogQ3RybC1TaGlmdC1GMTEgICAgICAgICAg ICAgICBcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19ER0NTRjEyICAgICAgICAgIDoK KyAgICAgIHByaW50ZigKKyAgICAiXFxLZGdjc2YxMiAgICAgICBUcmFuc21pdCBEYXRhIEdlbmVy YWw6IEN0cmwtU2hpZnQtRjEyICAgICAgICAgICAgICAgXG4iKTsKKyAgICAgIGJyZWFrOworICAg IGNhc2UgIEtfREdDU0YxMyAgICAgICAgICA6CisgICAgICBwcmludGYoCisgICAgIlxcS2RnY3Nm MTMgICAgICAgVHJhbnNtaXQgRGF0YSBHZW5lcmFsOiBDdHJsLVNoaWZ0LUYxMyAgICAgICAgICAg ICAgIFxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX0RHQ1NGMTQgICAgICAgICAgOgor ICAgICAgcHJpbnRmKAorICAgICJcXEtkZ2NzZjE0ICAgICAgIFRyYW5zbWl0IERhdGEgR2VuZXJh bDogQ3RybC1TaGlmdC1GMTQgICAgICAgICAgICAgICBcbiIpOworICAgICAgYnJlYWs7CisgICAg Y2FzZSAgS19ER0NTRjE1ICAgICAgICAgIDoKKyAgICAgIHByaW50ZigKKyAgICAiXFxLZGdjc2Yx NSAgICAgICBUcmFuc21pdCBEYXRhIEdlbmVyYWw6IEN0cmwtU2hpZnQtRjE1ICAgICAgICAgICAg ICAgXG4iKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSAgS19ER1VQQVJSICAgICAgICAgIDoK KyAgICAgIHByaW50ZigiXFxLZGd1cGFyciAgICAgICBUcmFuc21pdCBEYXRhIEdlbmVyYWw6IFVw IEFycm93ICAgICAgICAgIFxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX0RHRE5BUlIg ICAgICAgICAgOgorICAgICAgcHJpbnRmKCJcXEtkZ2RuYXJyICAgICAgIFRyYW5zbWl0IERhdGEg R2VuZXJhbDogRG93biBBcnJvdyAgICAgICAgXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2Ug IEtfREdMRkFSUiAgICAgICAgICA6CisgICAgICBwcmludGYoIlxcS2RnbGZhcnIgICAgICAgVHJh bnNtaXQgRGF0YSBHZW5lcmFsOiBMZWZ0IEFycm93ICAgICAgICBcbiIpOworICAgICAgYnJlYWs7 CisgICAgY2FzZSAgS19ER1JUQVJSICAgICAgICAgIDoKKyAgICAgIHByaW50ZigiXFxLZGdydGFy ciAgICAgICBUcmFuc21pdCBEYXRhIEdlbmVyYWw6IFJpZ2h0IEFycm93ICAgICAgIFxuIik7Cisg ICAgICBicmVhazsKKyAgICBjYXNlICBLX0RHU1VQQVJSICAgICA6CisgICAgICBwcmludGYoIlxc S2Rnc3VwYXJyICAgICAgVHJhbnNtaXQgRGF0YSBHZW5lcmFsOiBTaGlmdC1VcCBBcnJvdyAgICBc biIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19ER1NETkFSUiAgICAgOgorICAgICAgcHJp bnRmKCJcXEtkZ3NkbmFyciAgICAgIFRyYW5zbWl0IERhdGEgR2VuZXJhbDogU2hpZnQtRG93biBB cnJvdyAgXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfREdTTEZBUlIgICAgIDoKKyAg ICAgIHByaW50ZigiXFxLZGdzbGZhcnIgICAgICBUcmFuc21pdCBEYXRhIEdlbmVyYWw6IFNoaWZ0 LUxlZnQgQXJyb3cgIFxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX0RHU1JUQVJSICAg ICA6CisgICAgICBwcmludGYoIlxcS2Rnc3J0YXJyICAgICAgVHJhbnNtaXQgRGF0YSBHZW5lcmFs OiBTaGlmdC1SaWdodCBBcnJvdyBcbiIpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlICBLX0RH RVJBU0VQQUdFICA6CisgICAgICBwcmludGYoIlxcS2RnZXJhc2VwYWdlICAgVHJhbnNtaXQgRGF0 YSBHZW5lcmFsOiBFcmFzZSBQYWdlICAgICAgICBcbiIpOworICAgICAgYnJlYWs7CisgICAgY2Fz ZSAgS19ER0MxICAgICAgICAgICAgIDoKKyAgICAgIHByaW50ZigiXFxLZGdjMSAgICAgICAgICBU cmFuc21pdCBEYXRhIEdlbmVyYWw6IEMxICAgICAgICAgICAgICAgIFxuIik7CisgICAgICBicmVh azsKKyAgICBjYXNlICBLX0RHQzIgICAgICAgICAgICAgOgorICAgICAgcHJpbnRmKCJcXEtkZ2My ICAgICAgICAgIFRyYW5zbWl0IERhdGEgR2VuZXJhbDogQzIgICAgICAgICAgICAgICAgXG4iKTsK KyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfREdFUkFTRUVPTCAgIDoKKyAgICAgIHByaW50Zigi XFxLZGdlcmFzZWVvbCAgICBUcmFuc21pdCBEYXRhIEdlbmVyYWw6IEVyYXNlIEVPTCAgICAgICAg IFxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX0RHQzMgICAgICAgICAgICAgOgorICAg ICAgcHJpbnRmKCJcXEtkZ2MzICAgICAgICAgIFRyYW5zbWl0IERhdGEgR2VuZXJhbDogQzMgICAg ICAgICAgICAgICAgXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfREdDNCAgICAgICAg ICAgICA6CisgICAgICBwcmludGYoIlxcS2RnYzQgICAgICAgICAgVHJhbnNtaXQgRGF0YSBHZW5l cmFsOiBDNCAgICAgICAgICAgICAgICBcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19E R0NNRFBSSU5UICAgOgorICAgICAgcHJpbnRmKCJcXEtkZ2NtZHByaW50ICAgIFRyYW5zbWl0IERh dGEgR2VuZXJhbDogQ29tbWFuZCBQcmludCAgICAgXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNh c2UgIEtfREdIT01FICAgICAgIDoKKyAgICAgIHByaW50ZigiXFxLZGdob21lICAgICAgICBUcmFu c21pdCBEYXRhIEdlbmVyYWw6IEhvbWUgICAgICAgICAgICAgIFxuIik7CisgICAgICBicmVhazsK KyAgICBjYXNlICBLX0RHU0VSQVNFUEFHRSA6CisgICAgICBwcmludGYoIlxcS2Rnc2VyYXNlcGFn ZSAgVHJhbnNtaXQgRGF0YSBHZW5lcmFsOiBFcmFzZSBQYWdlICAgICAgICBcbiIpOworICAgICAg YnJlYWs7CisgICAgY2FzZSAgS19ER1NDMSAgICAgICAgICAgIDoKKyAgICAgIHByaW50ZigiXFxL ZGdzYzEgICAgICAgICBUcmFuc21pdCBEYXRhIEdlbmVyYWw6IFNoaWZ0LUMxICAgICAgICAgIFxu Iik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX0RHU0MyICAgICAgICAgICAgOgorICAgICAg cHJpbnRmKCJcXEtkZ3NjMiAgICAgICAgIFRyYW5zbWl0IERhdGEgR2VuZXJhbDogU2hpZnQtQzIg ICAgICAgICAgXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfREdTRVJBU0VFT0wgIDoK KyAgICAgIHByaW50ZigiXFxLZGdzZXJhc2Vlb2wgICBUcmFuc21pdCBEYXRhIEdlbmVyYWw6IFNo aWZ0LUVyYXNlIEVPTCAgXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfREdTQzMgICAg ICAgICAgICA6CisgICAgICBwcmludGYoIlxcS2Rnc2MzICAgICAgICAgVHJhbnNtaXQgRGF0YSBH ZW5lcmFsOiBTaGlmdC1DMyAgICAgICAgICBcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAg S19ER1NDNCAgICAgICAgICAgIDoKKyAgICAgIHByaW50ZigiXFxLZGdzYzQgICAgICAgICBUcmFu c21pdCBEYXRhIEdlbmVyYWw6IFNoaWZ0LUM0ICAgICAgICAgIFxuIik7CisgICAgICBicmVhazsK KyAgICBjYXNlICBLX0RHU0NNRFBSSU5UICA6CisgICAgICBwcmludGYoIlxcS2Rnc2NtZHByaW50 ICAgVHJhbnNtaXQgRGF0YSBHZW5lcmFsOiBTaGlmdC1Db21tYW5kIFByaW50XG4iKTsKKyAgICAg IGJyZWFrOworICAgIGNhc2UgIEtfREdCUyAgICAgICAgIDoKKyAgICAgIHByaW50ZigiXFxLZGdi cyAgICAgICAgICBUcmFuc21pdCBEYXRhIEdlbmVyYWw6IEJhY2tzcGFjZSAgICAgICAgIFxuIik7 CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX0RHU0hPTUUgICAgICA6CisgICAgICBwcmludGYo IlxcS2RzaG9tZSAgICAgICAgVHJhbnNtaXQgRGF0YSBHZW5lcmFsOiBTaGlmdC1Ib21lICAgICAg ICBcbiIpOworICAgICAgYnJlYWs7CisKKworLyogVGVsZXZpZGVvIEZ1bmN0aW9uIEtleXMgKHVu c2hpZnRlZCkgKi8KKyAgICBjYXNlICBLX1RWSUYwMSAgICAgICAgICAgOgorICAgICAgcHJpbnRm KCJcXEt0dmlmMDEgICAgICAgIFRyYW5zbWl0IFRlbGV2aWRlbzogRjEgICAgICAgXG4iKTsKKyAg ICAgIGJyZWFrOworICAgIGNhc2UgIEtfVFZJRjAyICAgICAgICAgICA6CisgICAgICBwcmludGYo IlxcS3R2aWYwMiAgICAgICAgVHJhbnNtaXQgVGVsZXZpZGVvOiBGMiAgICAgICAgICAgICAgXG4i KTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfVFZJRjAzICAgICAgICAgICA6CisgICAgICBw cmludGYoIlxcS3R2aWYwMyAgICAgICAgVHJhbnNtaXQgVGVsZXZpZGVvOiBGMyAgICAgICAgICAg ICBcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19UVklGMDQgICAgICAgICAgIDoKKyAg ICAgIHByaW50ZigiXFxLdHZpZjA0ICAgICAgICBUcmFuc21pdCBUZWxldmlkZW86IEY0ICAgICAg ICAgICAgICBcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19UVklGMDUgICAgICAgICAg IDoKKyAgICAgIHByaW50ZigiXFxLdHZpZjA1ICAgICAgICBUcmFuc21pdCBUZWxldmlkZW86IEY1 ICAgICAgICAgICAgICBcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19UVklGMDYgICAg ICAgICAgIDoKKyAgICAgIHByaW50ZigiXFxLdHZpZjA2ICAgICAgICBUcmFuc21pdCBUZWxldmlk ZW86IEY2ICAgICAgICAgICAgICBcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19UVklG MDcgICAgICAgICAgIDoKKyAgICAgIHByaW50ZigiXFxLdHZpZjA3ICAgICAgICBUcmFuc21pdCBU ZWxldmlkZW86IEY3ICAgICAgICAgICAgICBcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAg S19UVklGMDggICAgICAgICAgIDoKKyAgICAgIHByaW50ZigiXFxLdHZpZjA4ICAgICAgICBUcmFu c21pdCBUZWxldmlkZW86IEY4ICAgICAgICAgICAgICBcbiIpOworICAgICAgYnJlYWs7CisgICAg Y2FzZSAgS19UVklGMDkgICAgICAgICAgIDoKKyAgICAgIHByaW50ZigiXFxLdHZpZjA5ICAgICAg ICBUcmFuc21pdCBUZWxldmlkZW86IEY5ICAgICAgICAgICAgICBcbiIpOworICAgICAgYnJlYWs7 CisgICAgY2FzZSAgS19UVklGMTAgICAgICAgICAgIDoKKyAgICAgIHByaW50ZigiXFxLdHZpZjEw ICAgICAgICBUcmFuc21pdCBUZWxldmlkZW86IEYxMCAgICAgICAgICAgICBcbiIpOworICAgICAg YnJlYWs7CisgICAgY2FzZSAgS19UVklGMTEgICAgICAgICAgIDoKKyAgICAgIHByaW50ZigiXFxL dHZpZjExICAgICAgICBUcmFuc21pdCBUZWxldmlkZW86IEYxMSAgICAgICAgICAgICBcbiIpOwor ICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19UVklGMTIgICAgICAgICAgIDoKKyAgICAgIHByaW50 ZigiXFxLdHZpZjEyICAgICAgICBUcmFuc21pdCBUZWxldmlkZW86IEYxMiAgICAgICAgICAgICBc biIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19UVklGMTMgICAgICAgICAgIDoKKyAgICAg IHByaW50ZigiXFxLdHZpZjEzICAgICAgICBUcmFuc21pdCBUZWxldmlkZW86IEYxMyAgICAgICAg ICAgICBcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19UVklGMTQgICAgICAgICAgIDoK KyAgICAgIHByaW50ZigiXFxLdHZpZjE0ICAgICAgICBUcmFuc21pdCBUZWxldmlkZW86IEYxNCAg ICAgICAgICAgICBcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19UVklGMTUgICAgICAg ICAgIDoKKyAgICAgIHByaW50ZigiXFxLdHZpZjE1ICAgICAgICBUcmFuc21pdCBUZWxldmlkZW86 IEYxNSAgICAgICAgICAgICBcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19UVklGMTYg ICAgICAgICAgIDoKKyAgICAgIHByaW50ZigiXFxLdHZpZjE2ICAgICAgICBUcmFuc21pdCBUZWxl dmlkZW86IEYxNiAgICAgICAgICAgICBcbiIpOworICAgICAgYnJlYWs7CisKKy8qIFRlbGV2aWRl byBGdW5jdGlvbiBLZXlzIChzaGlmdGVkKSAqLworICAgIGNhc2UgIEtfVFZJU0YwMSAgICAgICAg ICA6CisgICAgICBwcmludGYoIlxcS3R2aXNmMDEgICAgICAgVHJhbnNtaXQgVGVsZXZpZGVvOiBT aGlmdC1GMSBcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19UVklTRjAyICAgICAgICAg IDoKKyAgICAgIHByaW50ZigiXFxLdHZpc2YwMiAgICAgICBUcmFuc21pdCBUZWxldmlkZW86IFNo aWZ0LUYyIFxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX1RWSVNGMDMgICAgICAgICAg ICA6CisgICAgICBwcmludGYoIlxcS3R2aXNmMDMgICAgICAgVHJhbnNtaXQgVGVsZXZpZGVvOiBT aGlmdC1GMyBcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19UVklTRjA0ICAgICAgICAg ICAgOgorICAgICAgcHJpbnRmKCJcXEt0dmlzZjA0ICAgICAgIFRyYW5zbWl0IFRlbGV2aWRlbzog U2hpZnQtRjQgXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfVFZJU0YwNSAgICAgICAg ICAgIDoKKyAgICAgIHByaW50ZigiXFxLdHZpc2YwNSAgICAgICBUcmFuc21pdCBUZWxldmlkZW86 IFNoaWZ0LUY1IFxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX1RWSVNGMDYgICAgICAg ICAgICA6CisgICAgICBwcmludGYoIlxcS3R2aXNmMDYgICAgICAgVHJhbnNtaXQgVGVsZXZpZGVv OiBTaGlmdC1GNiBcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19UVklTRjA3ICAgICAg ICAgICAgOgorICAgICAgcHJpbnRmKCJcXEt0dmlzZjA3ICAgICAgIFRyYW5zbWl0IFRlbGV2aWRl bzogU2hpZnQtRjcgXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfVFZJU0YwOCAgICAg ICAgICAgIDoKKyAgICAgIHByaW50ZigiXFxLdHZpc2YwOCAgICAgICBUcmFuc21pdCBUZWxldmlk ZW86IFNoaWZ0LUY4IFxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX1RWSVNGMDkgICAg ICAgICAgICA6CisgICAgICBwcmludGYoIlxcS3R2aXNmMDkgICAgICAgVHJhbnNtaXQgVGVsZXZp ZGVvOiBTaGlmdC1GOSBcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19UVklTRjEwICAg ICAgICAgICAgOgorICAgICAgcHJpbnRmKCJcXEt0dmlzZjEwICAgICAgIFRyYW5zbWl0IFRlbGV2 aWRlbzogU2hpZnQtRjEwXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfVFZJU0YxMSAg ICAgICAgICAgIDoKKyAgICAgIHByaW50ZigiXFxLdHZpc2YxMSAgICAgICBUcmFuc21pdCBUZWxl dmlkZW86IFNoaWZ0LUYxMVxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX1RWSVNGMTIg ICAgICAgICAgICA6CisgICAgICBwcmludGYoIlxcS3R2aXNmMTIgICAgICAgVHJhbnNtaXQgVGVs ZXZpZGVvOiBTaGlmdC1GMTJcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19UVklTRjEz ICAgICAgICAgICAgOgorICAgICAgcHJpbnRmKCJcXEt0dmlzZjEzICAgICAgIFRyYW5zbWl0IFRl bGV2aWRlbzogU2hpZnQtRjEzXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfVFZJU0Yx NCAgICAgICAgICAgIDoKKyAgICAgIHByaW50ZigiXFxLdHZpc2YxNCAgICAgICBUcmFuc21pdCBU ZWxldmlkZW86IFNoaWZ0LUYxNFxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX1RWSVNG MTUgICAgICAgICAgICA6CisgICAgICBwcmludGYoIlxcS3R2aXNmMTUgICAgICAgVHJhbnNtaXQg VGVsZXZpZGVvOiBTaGlmdC1GMTVcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19UVklT RjE2ICAgICAgICAgICAgOgorICAgICAgcHJpbnRmKCJcXEt0dmlzZjE2ICAgICAgIFRyYW5zbWl0 IFRlbGV2aWRlbzogU2hpZnQtRjE2XG4iKTsKKyAgICAgIGJyZWFrOworCisvKiBUZWxldmlkZW8g RWRpdCBhbmQgU3BlY2lhbCBLZXlzICovCisgICAgY2FzZSAgS19UVklCUyAgICAgICAgIDoKKyAg ICAgIHByaW50ZigiXFxLdHZpYnMgICAgICAgICBUcmFuc21pdCBUZWxldmlkZW86IEJhY2tzcGFj ZSAgICAgICBcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19UVklDTFJMTiAgICAgICAg IDoKKyAgICAgIHByaW50ZigiXFxLdHZpY2xybG4gICAgICBUcmFuc21pdCBUZWxldmlkZW86IENs ZWFyIExpbmUgICAgICBcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19UVklTQ0xSTE4g ICAgIDoKKyAgICAgIHByaW50ZigiXFxLdHZpc2NscmxuICAgICBUcmFuc21pdCBUZWxldmlkZW86 IFNoaWZ0LUNsZWFyIExpbmVcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19UVklDTFJQ RyAgICAgIDoKKyAgICAgIHByaW50ZigiXFxLdHZpY2xycGcgICAgICBUcmFuc21pdCBUZWxldmlk ZW86IENsZWFyIFBhZ2UgICAgICBcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19UVklT Q0xSUEcgICAgIDoKKyAgICAgIHByaW50ZigiXFxLdHZpc2NscnBnICAgICBUcmFuc21pdCBUZWxl dmlkZW86IFNoaWZ0LUNsZWFyIFBhZ2VcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19U VklERUxDSEFSICAgIDoKKyAgICAgIHByaW50ZigiXFxLdHZpZGVsY2hhciAgICBUcmFuc21pdCBU ZWxldmlkZW86IERlbGV0ZSBDaGFyICAgICBcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAg S19UVklERUxMTiAgICAgIDoKKyAgICAgIHByaW50ZigiXFxLdHZpZGVsbG4gICAgICBUcmFuc21p dCBUZWxldmlkZW86IERlbGV0ZSBMaW5lICAgICBcbiIpOworICAgICAgYnJlYWs7CisgICAgY2Fz ZSAgS19UVklFTlRFUiAgICAgICAgIDoKKyAgICAgIHByaW50ZigiXFxLdHZpZW50ZXIgICAgICBU cmFuc21pdCBUZWxldmlkZW86IEVudGVyICAgICAgICAgICBcbiIpOworICAgICAgYnJlYWs7Cisg ICAgY2FzZSAgS19UVklFU0MgICAgICAgICAgIDoKKyAgICAgIHByaW50ZigiXFxLdHZpZXNjICAg ICAgICBUcmFuc21pdCBUZWxldmlkZW86IEVzYyAgICAgICAgICAgICBcbiIpOworICAgICAgYnJl YWs7CisgICAgY2FzZSAgS19UVklIT01FICAgICAgICAgIDoKKyAgICAgIHByaW50ZigiXFxLdHZp aG9tZSAgICAgICBUcmFuc21pdCBUZWxldmlkZW86IEhvbWUgICAgICAgICAgICBcbiIpOworICAg ICAgYnJlYWs7CisgICAgY2FzZSAgS19UVklTSE9NRSAgICAgICAgIDoKKyAgICAgIHByaW50Zigi XFxLdHZpc2hvbWUgICAgICBUcmFuc21pdCBUZWxldmlkZW86IFNoaWZ0LUhvbWUgICAgICBcbiIp OworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19UVklJTlNFUlQgICAgIDoKKyAgICAgIHByaW50 ZigiXFxLdHZpaW5zZXJ0ICAgICBUcmFuc21pdCBUZWxldmlkZW86IEluc2VydCAgICAgICAgICBc biIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19UVklJTlNDSEFSICAgIDoKKyAgICAgIHBy aW50ZigiXFxLdHZpaW5zY2hhciAgICBUcmFuc21pdCBUZWxldmlkZW86IEluc2VydCBDaGFyICAg ICBcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19UVklJTlNMTiAgICAgICAgIDoKKyAg ICAgIHByaW50ZigiXFxLdHZpaW5zbG4gICAgICBUcmFuc21pdCBUZWxldmlkZW86IEluc2VydCBM aW5lICAgICBcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19UVklQR05FWFQgICAgIDoK KyAgICAgIHByaW50ZigiXFxLdHZpcGduZXh0ICAgICBUcmFuc21pdCBUZWxldmlkZW86IFBhZ2Ug TmV4dCAgICAgICBcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19UVklQR1BSRVYgICAg IDoKKyAgICAgIHByaW50ZigiXFxLdHZpcGdwcmV2ICAgICBUcmFuc21pdCBUZWxldmlkZW86IFBh Z2UgUHJldmlvdXMgICBcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19UVklSRVBMQUNF ICAgIDoKKyAgICAgIHByaW50ZigiXFxLdHZpcmVwbGFjZSAgICBUcmFuc21pdCBUZWxldmlkZW86 IFJlcGxhY2UgICAgICAgICBcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19UVklSRVRV Uk4gICAgIDoKKyAgICAgIHByaW50ZigiXFxLdHZpcmV0dXJuICAgICBUcmFuc21pdCBUZWxldmlk ZW86IFJldHVybiAgICAgICAgICBcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19UVklU QUIgICAgICAgICAgIDoKKyAgICAgIHByaW50ZigiXFxLdHZpdGFiICAgICAgICBUcmFuc21pdCBU ZWxldmlkZW86IFRhYiAgICAgICAgICAgICBcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAg S19UVklTVEFCICAgICAgICAgIDoKKyAgICAgIHByaW50ZigiXFxLdHZpc3RhYiAgICAgICBUcmFu c21pdCBUZWxldmlkZW86IFNoaWZ0LVRhYiAgICAgICBcbiIpOworICAgICAgYnJlYWs7CisgICAg Y2FzZSAgS19UVklQUlRTQ04gICAgIDoKKyAgICAgIHByaW50ZigiXFxLdHZpcHJ0c2NuICAgICBU cmFuc21pdCBUZWxldmlkZW86IFByaW50IFNjcmVlbiAgICBcbiIpOworICAgICAgYnJlYWs7Cisg ICAgY2FzZSAgS19UVklTRVNDICAgICAgIDoKKyAgICAgIHByaW50ZigiXFxLdHZpc2VzYyAgICAg ICBUcmFuc21pdCBUZWxldmlkZW86IFNoaWZ0LUVzYyAgICAgICBcbiIpOworICAgICAgYnJlYWs7 CisgICAgY2FzZSAgS19UVklTQlMgICAgICAgIDoKKyAgICAgIHByaW50ZigiXFxLdHZpc2JzICAg ICAgICBUcmFuc21pdCBUZWxldmlkZW86IFNoaWZ0LUJhY2tzcGFjZSBcbiIpOworICAgICAgYnJl YWs7CisgICAgY2FzZSAgS19UVklTRU5URVIgICAgIDoKKyAgICAgIHByaW50ZigiXFxLdHZpc2Vu dGVyICAgICBUcmFuc21pdCBUZWxldmlkZW86IFNoaWZ0LUVudGVyICAgICBcbiIpOworICAgICAg YnJlYWs7CisgICAgY2FzZSAgS19UVklTUkVUVVJOICAgIDoKKyAgICAgIHByaW50ZigiXFxLdHZp c3JldHVybiAgICBUcmFuc21pdCBUZWxldmlkZW86IFNoaWZ0LVJldHVybiAgICBcbiIpOworICAg ICAgYnJlYWs7CisgICAgY2FzZSAgS19UVklVUEFSUiAgICAgICAgIDoKKyAgICAgIHByaW50Zigi XFxLdHZpdXBhcnIgICAgICBUcmFuc21pdCBUZWxldmlkZW86IFVwIEFycm93ICAgICAgICBcbiIp OworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19UVklETkFSUiAgICAgICAgIDoKKyAgICAgIHBy aW50ZigiXFxLdHZpZG5hcnIgICAgICBUcmFuc21pdCBUZWxldmlkZW86IERvd24gQXJyb3cgICAg ICBcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19UVklMRkFSUiAgICAgICAgIDoKKyAg ICAgIHByaW50ZigiXFxLdHZpbGZhcnIgICAgICBUcmFuc21pdCBUZWxldmlkZW86IExlZnQgQXJy b3cgICAgICBcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19UVklSVEFSUiAgICAgICAg IDoKKyAgICAgIHByaW50ZigiXFxLdHZpcnRhcnIgICAgICBUcmFuc21pdCBUZWxldmlkZW86IFJp Z2h0IEFycm93ICAgICBcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19UVklTVVBBUlIg ICAgIDoKKyAgICAgIHByaW50ZigiXFxLdHZpc3VwYXJyICAgICBUcmFuc21pdCBUZWxldmlkZW86 IFNoaWZ0LVVwIEFycm93ICBcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19UVklTRE5B UlIgICAgIDoKKyAgICAgIHByaW50ZigiXFxLdHZpc2RuYXJyICAgICBUcmFuc21pdCBUZWxldmlk ZW86IFNoaWZ0LURvd24gQXJyb3dcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19UVklT TEZBUlIgICAgIDoKKyAgICAgIHByaW50ZigiXFxLdHZpc2xmYXJyICAgICBUcmFuc21pdCBUZWxl dmlkZW86IFNoaWZ0LUxlZnQgQXJyb3dcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19U VklTUlRBUlIgICAgIDoKKyAgICAgIHByaW50ZigiXFxLdHZpc3J0YXJyICAgICBUcmFuc21pdCBU ZWxldmlkZW86IFNoaWZ0LVJpZ2h0IEFycm93XG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2Ug S19UVklTRU5EOgorICAgICAgcHJpbnRmKCJcXEt0dmlzZW5kICAgICAgIFRyYW5zbWl0IFRlbGV2 aWRlbzogU2VuZFxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlIEtfVFZJU1NFTkQ6CisgICAg ICBwcmludGYoIlxcS3R2aXNzZW5kICAgICAgVHJhbnNtaXQgVGVsZXZpZGVvOiBTaGlmdC1TZW5k XG4iKTsKKyAgICAgIGJyZWFrOworCisvKiBIUCBGdW5jdGlvbiBhbmQgRWRpdCBrZXlzICovCisg ICAgY2FzZSAgS19IUEYwMSAgICAgICAgICAgIDoKKyAgICAgIHByaW50ZigiXFxLaHBmMDEgICAg ICAgICBUcmFuc21pdCBIZXdsZXR0LVBhY2thcmQ6IEYxICAgICAgIFxuIik7CisgICAgICBicmVh azsKKyAgICBjYXNlICBLX0hQRjAyICAgICAgICAgICAgOgorICAgICAgcHJpbnRmKCJcXEtocGYw MiAgICAgICAgIFRyYW5zbWl0IEhld2xldHQtUGFja2FyZDogRjIgICAgICAgICAgICAgIFxuIik7 CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX0hQRjAzICAgICAgICAgICAgOgorICAgICAgcHJp bnRmKCJcXEtocGYwMyAgICAgICAgIFRyYW5zbWl0IEhld2xldHQtUGFja2FyZDogRjMgICAgICAg ICAgICAgXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfSFBGMDQgICAgICAgICAgICA6 CisgICAgICBwcmludGYoIlxcS2hwZjA0ICAgICAgICAgVHJhbnNtaXQgSGV3bGV0dC1QYWNrYXJk OiBGNCAgICAgICAgICAgICAgXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfSFBGMDUg ICAgICAgICAgICA6CisgICAgICBwcmludGYoIlxcS2hwZjA1ICAgICAgICAgVHJhbnNtaXQgSGV3 bGV0dC1QYWNrYXJkOiBGNSAgICAgICAgICAgICAgXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNh c2UgIEtfSFBGMDYgICAgICAgICAgICA6CisgICAgICBwcmludGYoIlxcS2hwZjA2ICAgICAgICAg VHJhbnNtaXQgSGV3bGV0dC1QYWNrYXJkOiBGNiAgICAgICAgICAgICAgXG4iKTsKKyAgICAgIGJy ZWFrOworICAgIGNhc2UgIEtfSFBGMDcgICAgICAgICAgICA6CisgICAgICBwcmludGYoIlxcS2hw ZjA3ICAgICAgICAgVHJhbnNtaXQgSGV3bGV0dC1QYWNrYXJkOiBGNyAgICAgICAgICAgICAgXG4i KTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfSFBGMDggICAgICAgICAgICA6CisgICAgICBw cmludGYoIlxcS2hwZjA4ICAgICAgICAgVHJhbnNtaXQgSGV3bGV0dC1QYWNrYXJkOiBGOCAgICAg ICAgICAgICAgXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfSFBGMDkgICAgICAgICAg ICA6CisgICAgICBwcmludGYoIlxcS2hwZjA5ICAgICAgICAgVHJhbnNtaXQgSGV3bGV0dC1QYWNr YXJkOiBGOSAgICAgICAgICAgICAgXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfSFBG MTAgICAgICAgICAgICA6CisgICAgICBwcmludGYoIlxcS2hwZjEwICAgICAgICAgVHJhbnNtaXQg SGV3bGV0dC1QYWNrYXJkOiBGMTAgICAgICAgICAgICAgXG4iKTsKKyAgICAgIGJyZWFrOworICAg IGNhc2UgIEtfSFBGMTEgICAgICAgICAgICA6CisgICAgICBwcmludGYoIlxcS2hwZjExICAgICAg ICAgVHJhbnNtaXQgSGV3bGV0dC1QYWNrYXJkOiBGMTEgICAgICAgICAgICAgXG4iKTsKKyAgICAg IGJyZWFrOworICAgIGNhc2UgIEtfSFBGMTIgICAgICAgICAgICA6CisgICAgICBwcmludGYoIlxc S2hwZjEyICAgICAgICAgVHJhbnNtaXQgSGV3bGV0dC1QYWNrYXJkOiBGMTIgICAgICAgICAgICAg XG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfSFBGMTMgICAgICAgICAgICA6CisgICAg ICBwcmludGYoIlxcS2hwZjEzICAgICAgICAgVHJhbnNtaXQgSGV3bGV0dC1QYWNrYXJkOiBGMTMg ICAgICAgICAgICAgXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfSFBGMTQgICAgICAg ICAgICA6CisgICAgICBwcmludGYoIlxcS2hwZjE0ICAgICAgICAgVHJhbnNtaXQgSGV3bGV0dC1Q YWNrYXJkOiBGMTQgICAgICAgICAgICAgXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtf SFBGMTUgICAgICAgICAgICA6CisgICAgICBwcmludGYoIlxcS2hwZjE1ICAgICAgICAgVHJhbnNt aXQgSGV3bGV0dC1QYWNrYXJkOiBGMTUgICAgICAgICAgICAgXG4iKTsKKyAgICAgIGJyZWFrOwor ICAgIGNhc2UgIEtfSFBGMTYgICAgICAgICAgICA6CisgICAgICBwcmludGYoIlxcS2hwZjE2ICAg ICAgICAgVHJhbnNtaXQgSGV3bGV0dC1QYWNrYXJkOiBGMTYgICAgICAgICAgICAgXG4iKTsKKyAg ICAgIGJyZWFrOworICAgIGNhc2UgIEtfSFBSRVRVUk4gICAgIDoKKyAgICAgIHByaW50ZigiXFxL aHByZXR1cm4gICAgICBUcmFuc21pdCBIZXdsZXR0LVBhY2thcmQ6IFJldHVyblxuIik7CisgICAg ICBicmVhazsKKyAgICBjYXNlICBLX0hQRU5URVIgICAgICAgICAgOgorICAgICAgcHJpbnRmKCJc XEtocGVudGVyICAgICAgIFRyYW5zbWl0IEhld2xldHQtUGFja2FyZDogRW50ZXIgKGtleXBhZClc biIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19IUEJBQ0tUQUIgICAgICAgIDoKKyAgICAg IHByaW50ZigiXFxLaHBiYWNrdGFiICAgICBUcmFuc21pdCBIZXdsZXR0LVBhY2thcmQ6IEJhY2sg VGFiXG4iKTsKKyAgICAgIGJyZWFrOworICAgICAgICAvKiBTaWVtZW5zIE5peGRvcmYgSW50ZXJu YXRpb25hbCA5NzgwMS01eHgga3ZlcmJzICovCisgICAgY2FzZSBLX1NOSV9ET1VCTEVfMCAgICAg IDoKKyAgICAgICAgcHJpbnRmKCJcXEtzbmlfMDAgICAgICAgICAgVHJhbnNtaXQgU05JLTk3ODAx LTV4eDogRG91YmxlLVplcm9cbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEtfU05JX0Nf RE9VQkxFXzAgICAgOgorICAgICAgICBwcmludGYoCisiXFxLc25pX2NfMDAgICAgICAgIFRyYW5z bWl0IFNOSS05NzgwMS01eHg6IEN0cmwtRG91YmxlLVplcm9cbiIpOworICAgICAgICBicmVhazsK KyAgICBjYXNlIEtfU05JX0NfQ0UgICAgICAgICAgOgorICAgICAgICBwcmludGYoIlxcS3NuaV9j X2NlICAgICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBDdHJsLUNFXG4iKTsKKyAgICAgICAg YnJlYWs7CisgICAgY2FzZSBLX1NOSV9DX0NPTVBPU0UgICAgIDoKKyAgICAgICAgcHJpbnRmKCJc XEtzbmlfY19jb21wb3NlICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogQ3RybC1Db21wb3NlXG4i KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBLX1NOSV9DX0RFTEVURV9DSEFSIDoKKyAgICAg ICAgcHJpbnRmKAorIlxcS3NuaV9jX2RlbF9jaGFyICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBD dHJsLURlbGV0ZSBDaGFyXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBLX1NOSV9DX0RF TEVURV9MSU5FIDoKKyAgICAgICAgcHJpbnRmKAorIlxcS3NuaV9jX2RlbF9saW5lICBUcmFuc21p dCBTTkktOTc4MDEtNXh4OiBDdHJsLURlbGV0ZSBMaW5lXG4iKTsKKyAgICAgICAgYnJlYWs7Cisg ICAgY2FzZSBLX1NOSV9DX0RFTEVURV9XT1JEIDoKKyAgICAgICAgcHJpbnRmKAorIlxcS3NuaV9j X2RlbF93b3JkICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBDdHJsLURlbGV0ZSBXb3JkXG4iKTsK KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBLX1NOSV9DX0NVUlNPUl9ET1dOIDoKKyAgICAgICAg cHJpbnRmKAorIlxcS3NuaV9jX2RuYXJyICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBDdHJs LUN1cnNvciBEb3duXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBLX1NOSV9DX0VORE1B UktFICAgIDoKKyAgICAgICAgcHJpbnRmKCJcXEtzbmlfY19lbmRtYXJrZSAgVHJhbnNtaXQgU05J LTk3ODAxLTV4eDogQ3RybC1FbmQgTWFya2VcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNl IEtfU05JX0NfRjAxICAgICAgICAgOgorICAgICAgICBwcmludGYoIlxcS3NuaV9jX2YwMSAgICAg ICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBDdHJsLUYxXG4iKTsKKyAgICAgICAgYnJlYWs7Cisg ICAgY2FzZSBLX1NOSV9DX0YwMiAgICAgICAgIDoKKyAgICAgICAgcHJpbnRmKCJcXEtzbmlfY19m MDIgICAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogQ3RybC1GMlxuIik7CisgICAgICAgIGJy ZWFrOworICAgIGNhc2UgS19TTklfQ19GMDMgICAgICAgICA6CisgICAgICAgIHByaW50ZigiXFxL c25pX2NfZjAzICAgICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IEN0cmwtRjNcbiIpOworICAg ICAgICBicmVhazsKKyAgICBjYXNlIEtfU05JX0NfRjA0ICAgICAgICAgOgorICAgICAgICBwcmlu dGYoIlxcS3NuaV9jX2YwNCAgICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBDdHJsLUY0XG4i KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBLX1NOSV9DX0YwNSAgICAgICAgIDoKKyAgICAg ICAgcHJpbnRmKCJcXEtzbmlfY19mMDUgICAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogQ3Ry bC1GNVxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS19TTklfQ19GMDYgICAgICAgICA6 CisgICAgICAgIHByaW50ZigiXFxLc25pX2NfZjA2ICAgICAgIFRyYW5zbWl0IFNOSS05NzgwMS01 eHg6IEN0cmwtRjZcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEtfU05JX0NfRjA3ICAg ICAgICAgOgorICAgICAgICBwcmludGYoIlxcS3NuaV9jX2YwNyAgICAgICBUcmFuc21pdCBTTkkt OTc4MDEtNXh4OiBDdHJsLUY3XG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBLX1NOSV9D X0YwOCAgICAgICAgIDoKKyAgICAgICAgcHJpbnRmKCJcXEtzbmlfY19mMDggICAgICAgVHJhbnNt aXQgU05JLTk3ODAxLTV4eDogQ3RybC1GOFxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug S19TTklfQ19GMDkgICAgICAgICA6CisgICAgICAgIHByaW50ZigiXFxLc25pX2NfZjA5ICAgICAg IFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IEN0cmwtRjlcbiIpOworICAgICAgICBicmVhazsKKyAg ICBjYXNlIEtfU05JX0NfRjEwICAgICAgICAgOgorICAgICAgICBwcmludGYoIlxcS3NuaV9jX2Yx MCAgICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBDdHJsLUYxMFxuIik7CisgICAgICAgIGJy ZWFrOworICAgIGNhc2UgS19TTklfQ19GMTEgICAgICAgICA6CisgICAgICAgIHByaW50ZigiXFxL c25pX2NfZjExICAgICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IEN0cmwtRjExXG4iKTsKKyAg ICAgICAgYnJlYWs7CisgICAgY2FzZSBLX1NOSV9DX0YxMiAgICAgICAgIDoKKyAgICAgICAgcHJp bnRmKCJcXEtzbmlfY19mMTIgICAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogQ3RybC1GMTJc biIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEtfU05JX0NfRjEzICAgICAgICAgOgorICAg ICAgICBwcmludGYoIlxcS3NuaV9jX2YxMyAgICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBD dHJsLUYxM1xuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS19TTklfQ19GMTQgICAgICAg ICA6CisgICAgICAgIHByaW50ZigiXFxLc25pX2NfZjE0ICAgICAgIFRyYW5zbWl0IFNOSS05Nzgw MS01eHg6IEN0cmwtRjE0XG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBLX1NOSV9DX0Yx NSAgICAgICAgIDoKKyAgICAgICAgcHJpbnRmKCJcXEtzbmlfY19mMTUgICAgICAgVHJhbnNtaXQg U05JLTk3ODAxLTV4eDogQ3RybC1GMTVcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEtf U05JX0NfRjE2ICAgICAgICAgOgorICAgICAgICBwcmludGYoIlxcS3NuaV9jX2YxNiAgICAgICBU cmFuc21pdCBTTkktOTc4MDEtNXh4OiBDdHJsLUYxNlxuIik7CisgICAgICAgIGJyZWFrOworICAg IGNhc2UgS19TTklfQ19GMTcgICAgICAgICA6CisgICAgICAgIHByaW50ZigiXFxLc25pX2NfZjE3 ICAgICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IEN0cmwtRjE3XG4iKTsKKyAgICAgICAgYnJl YWs7CisgICAgY2FzZSBLX1NOSV9DX0YxOCAgICAgICAgIDoKKyAgICAgICAgcHJpbnRmKCJcXEtz bmlfY19mMTggICAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogQ3RybC1GMThcbiIpOworICAg ICAgICBicmVhazsKKyAgICBjYXNlIEtfU05JX0NfVVNFUjEgICAgICAgIDoKKyAgICAgICAgcHJp bnRmKAorIlxcS3NuaV9jX3VzZXIxICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBDdHJsLUtl eSBiZWxvdyBGMThcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEtfU05JX0NfRjE5ICAg ICAgICAgOgorICAgICAgICBwcmludGYoIlxcS3NuaV9jX2YxOSAgICAgICBUcmFuc21pdCBTTkkt OTc4MDEtNXh4OiBDdHJsLUYxOVxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS19TTklf Q19VU0VSMiAgICAgICA6CisgICAgICAgIHByaW50ZigKKyJcXEtzbmlfY191c2VyMiAgICAgVHJh bnNtaXQgU05JLTk3ODAxLTV4eDogQ3RybC1LZXkgYmVsb3cgRjE5XG4iKTsKKyAgICAgICAgYnJl YWs7CisgICAgY2FzZSBLX1NOSV9DX0YyMCAgICAgICAgIDoKKyAgICAgICAgcHJpbnRmKCJcXEtz bmlfY19mMjAgICAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogQ3RybC1GMjBcbiIpOworICAg ICAgICBicmVhazsKKyAgICBjYXNlIEtfU05JX0NfVVNFUjMgICAgICAgOgorICAgICAgICBwcmlu dGYoCisiXFxLc25pX2NfdXNlcjMgICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IEN0cmwtS2V5 IGJlbG93IEYyMFxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS19TTklfQ19GMjEgICAg ICAgICA6CisgICAgICAgIHByaW50ZigiXFxLc25pX2NfZjIxICAgICAgIFRyYW5zbWl0IFNOSS05 NzgwMS01eHg6IEN0cmwtRjIxXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBLX1NOSV9D X1VTRVI0ICAgICAgIDoKKyAgICAgICAgcHJpbnRmKAorIlxcS3NuaV9jX3VzZXI0ICAgICBUcmFu c21pdCBTTkktOTc4MDEtNXh4OiBDdHJsLUtleSBiZWxvdyBGMjFcbiIpOworICAgICAgICBicmVh azsKKyAgICBjYXNlIEtfU05JX0NfRjIyICAgICAgICAgOgorICAgICAgICBwcmludGYoIlxcS3Nu aV9jX2YyMiAgICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBDdHJsLUYyMlxuIik7CisgICAg ICAgIGJyZWFrOworICAgIGNhc2UgS19TTklfQ19VU0VSNSAgICAgICA6CisgICAgICAgIHByaW50 ZigKKyJcXEtzbmlfY191c2VyNSAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogQ3RybC1LZXkg YmVsb3cgRjIyXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBLX1NOSV9DX0hFTFAgICAg ICAgIDoKKyAgICAgICAgcHJpbnRmKCJcXEtzbmlfY19oZWxwICAgICAgVHJhbnNtaXQgU05JLTk3 ODAxLTV4eDogQ3RybC1IZWxwXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBLX1NOSV9D X0hPTUUgICAgICAgIDoKKyAgICAgICAgcHJpbnRmKCJcXEtzbmlfY19ob21lICAgICAgVHJhbnNt aXQgU05JLTk3ODAxLTV4eDogQ3RybC1Ib21lXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz ZSBLX1NOSV9DX0lOU0VSVF9DSEFSIDoKKyAgICAgICAgcHJpbnRmKAorIlxcS3NuaV9jX2luc19j aGFyICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBDdHJsLUluc2VydCBDaGFyXG4iKTsKKyAgICAg ICAgYnJlYWs7CisgICAgY2FzZSBLX1NOSV9DX0lOU0VSVF9MSU5FIDoKKyAgICAgICAgcHJpbnRm KAorIlxcS3NuaV9jX2luc19saW5lICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBDdHJsLUluc2Vy dCBMaW5lXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBLX1NOSV9DX0lOU0VSVF9XT1JE IDoKKyAgICAgICAgcHJpbnRmKAorIlxcS3NuaV9jX2luc193b3JkICBUcmFuc21pdCBTTkktOTc4 MDEtNXh4OiBDdHJsLUluc2VydCBXb3JkXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBL X1NOSV9DX0xFRlRfVEFCICAgIDoKKyAgICAgICAgcHJpbnRmKCJcXEtzbmlfY19sZWZ0X3RhYiAg VHJhbnNtaXQgU05JLTk3ODAxLTV4eDogQ3RybC1MZWZ0IFRhYlxuIik7CisgICAgICAgIGJyZWFr OworICAgIGNhc2UgS19TTklfQ19DVVJTT1JfTEVGVCA6CisgICAgICAgIHByaW50ZigKKyJcXEtz bmlfY19sZmFyciAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogQ3RybC1DdXJzb3IgTGVmdFxu Iik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS19TTklfQ19NT0RFICAgICAgICA6CisgICAg ICAgIHByaW50ZigiXFxLc25pX2NfbW9kZSAgICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IEN0 cmwtTW9kZVxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS19TTklfQ19QQUdFICAgICAg ICA6CisgICAgICAgIHByaW50ZigiXFxLc25pX2NfcGFnZSAgICAgIFRyYW5zbWl0IFNOSS05Nzgw MS01eHg6IEN0cmwtUGFnZVxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS19TTklfQ19Q UklOVCAgICAgICA6CisgICAgICAgIHByaW50ZigiXFxLc25pX2NfcHJpbnQgICAgIFRyYW5zbWl0 IFNOSS05NzgwMS01eHg6IEN0cmwtUHJpbnRcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNl IEtfU05JX0NfQ1VSU09SX1JJR0hUOgorICAgICAgICBwcmludGYoCisiXFxLc25pX2NfcnRhcnIg ICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IEN0cmwtQ3Vyc29yIFJpZ2h0XG4iKTsKKyAgICAg ICAgYnJlYWs7CisgICAgY2FzZSBLX1NOSV9DX1NDUk9MTF9ET1dOIDoKKyAgICAgICAgcHJpbnRm KAorIlxcS3NuaV9jX3Njcm9sbF9kbiBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBDdHJsLVNjcm9s bCBEb3duXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBLX1NOSV9DX1NDUk9MTF9VUCAg IDoKKyAgICAgICAgcHJpbnRmKCJcXEtzbmlfY19zY3JvbGxfdXAgVHJhbnNtaXQgU05JLTk3ODAx LTV4eDogQ3RybC1TY3JvbGwgVXBcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEtfU05J X0NfU1RBUlQgICAgICAgOgorICAgICAgICBwcmludGYoIlxcS3NuaV9jX3N0YXJ0ICAgICBUcmFu c21pdCBTTkktOTc4MDEtNXh4OiBDdHJsLVN0YXJ0XG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAg Y2FzZSBLX1NOSV9DX0NVUlNPUl9VUCAgIDoKKyAgICAgICAgcHJpbnRmKCJcXEtzbmlfY191cGFy ciAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogQ3RybC1DdXJzb3IgVXBcbiIpOworICAgICAg ICBicmVhazsKKyAgICBjYXNlIEtfU05JX0NfVEFCICAgICAgICAgOgorICAgICAgICBwcmludGYo IlxcS3NuaV9jX3RhYiAgICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBDdHJsLVRhYlxuIik7 CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS19TTklfQ0UgICAgICAgICAgICA6CisgICAgICAg IHByaW50ZigiXFxLc25pX2NlICAgICAgICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IENFXG4i KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBLX1NOSV9DSF9DT0RFOgorICAgICAgICBwcmlu dGYoIlxcS3NuaV9jaF9jb2RlICAgICBUb2dnbGUgU05JLTk3ODAxLTV4eDogQ0guQ09ERSBmdW5j dGlvbi5cbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEtfU05JX0NPTVBPU0UgICAgICAg OgorICAgICAgICBwcmludGYoIlxcS3NuaV9jb21wb3NlICAgICBUcmFuc21pdCBTTkktOTc4MDEt NXh4OiBDb21wb3NlXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBLX1NOSV9ERUxFVEVf Q0hBUiAgIDoKKyAgICAgICAgcHJpbnRmKCJcXEtzbmlfZGVsX2NoYXIgICAgVHJhbnNtaXQgU05J LTk3ODAxLTV4eDogRGVsZXRlIENoYXJcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEtf U05JX0RFTEVURV9MSU5FICAgOgorICAgICAgICBwcmludGYoIlxcS3NuaV9kZWxfbGluZSAgICBU cmFuc21pdCBTTkktOTc4MDEtNXh4OiBEZWxldGUgTGluZVxuIik7CisgICAgICAgIGJyZWFrOwor ICAgIGNhc2UgS19TTklfREVMRVRFX1dPUkQgICA6CisgICAgICAgIHByaW50ZigiXFxLc25pX2Rl bF93b3JkICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IERlbGV0ZSBXb3JkXG4iKTsKKyAgICAg ICAgYnJlYWs7CisgICAgY2FzZSBLX1NOSV9DVVJTT1JfRE9XTiAgIDoKKyAgICAgICAgcHJpbnRm KCJcXEtzbmlfZG5hcnIgICAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogQ3Vyc29yIERvd25c biIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEtfU05JX0VORE1BUktFICAgICAgOgorICAg ICAgICBwcmludGYoIlxcS3NuaV9lbmRtYXJrZSAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBF bmQgTWFya2VcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEtfU05JX0YwMSAgICAgICAg ICAgOgorICAgICAgICBwcmludGYoIlxcS3NuaV9mMDEgICAgICAgICBUcmFuc21pdCBTTkktOTc4 MDEtNXh4OiBGMVxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS19TTklfRjAyICAgICAg ICAgICA6CisgICAgICAgIHByaW50ZigiXFxLc25pX2YwMiAgICAgICAgIFRyYW5zbWl0IFNOSS05 NzgwMS01eHg6IEYyXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBLX1NOSV9GMDMgICAg ICAgICAgIDoKKyAgICAgICAgcHJpbnRmKCJcXEtzbmlfZjAzICAgICAgICAgVHJhbnNtaXQgU05J LTk3ODAxLTV4eDogRjNcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEtfU05JX0YwNCAg ICAgICAgICAgOgorICAgICAgICBwcmludGYoIlxcS3NuaV9mMDQgICAgICAgICBUcmFuc21pdCBT TkktOTc4MDEtNXh4OiBGNFxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS19TTklfRjA1 ICAgICAgICAgICA6CisgICAgICAgIHByaW50ZigiXFxLc25pX2YwNSAgICAgICAgIFRyYW5zbWl0 IFNOSS05NzgwMS01eHg6IEY1XG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBLX1NOSV9G MDYgICAgICAgICAgIDoKKyAgICAgICAgcHJpbnRmKCJcXEtzbmlfZjA2ICAgICAgICAgVHJhbnNt aXQgU05JLTk3ODAxLTV4eDogRjZcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEtfU05J X0YwNyAgICAgICAgICAgOgorICAgICAgICBwcmludGYoIlxcS3NuaV9mMDcgICAgICAgICBUcmFu c21pdCBTTkktOTc4MDEtNXh4OiBGN1xuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS19T TklfRjA4ICAgICAgICAgICA6CisgICAgICAgIHByaW50ZigiXFxLc25pX2YwOCAgICAgICAgIFRy YW5zbWl0IFNOSS05NzgwMS01eHg6IEY4XG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBL X1NOSV9GMDkgICAgICAgICAgIDoKKyAgICAgICAgcHJpbnRmKCJcXEtzbmlfZjA5ICAgICAgICAg VHJhbnNtaXQgU05JLTk3ODAxLTV4eDogRjlcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNl IEtfU05JX0YxMCAgICAgICAgICAgOgorICAgICAgICBwcmludGYoIlxcS3NuaV9mMTAgICAgICAg ICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBGMTBcbiIpOworICAgICAgICBicmVhazsKKyAgICBj YXNlIEtfU05JX0YxMSAgICAgICAgICAgOgorICAgICAgICBwcmludGYoIlxcS3NuaV9mMTEgICAg ICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBGMTFcbiIpOworICAgICAgICBicmVhazsKKyAg ICBjYXNlIEtfU05JX0YxMiAgICAgICAgICAgOgorICAgICAgICBwcmludGYoIlxcS3NuaV9mMTIg ICAgICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBGMTJcbiIpOworICAgICAgICBicmVhazsK KyAgICBjYXNlIEtfU05JX0YxMyAgICAgICAgICAgOgorICAgICAgICBwcmludGYoIlxcS3NuaV9m MTMgICAgICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBGMTNcbiIpOworICAgICAgICBicmVh azsKKyAgICBjYXNlIEtfU05JX0YxNCAgICAgICAgICAgOgorICAgICAgICBwcmludGYoIlxcS3Nu aV9mMTQgICAgICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBGMTRcbiIpOworICAgICAgICBi cmVhazsKKyAgICBjYXNlIEtfU05JX0YxNSAgICAgICAgICAgOgorICAgICAgICBwcmludGYoIlxc S3NuaV9mMTUgICAgICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBGMTVcbiIpOworICAgICAg ICBicmVhazsKKyAgICBjYXNlIEtfU05JX0YxNiAgICAgICAgICAgOgorICAgICAgICBwcmludGYo IlxcS3NuaV9mMTYgICAgICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBGMTZcbiIpOworICAg ICAgICBicmVhazsKKyAgICBjYXNlIEtfU05JX0YxNyAgICAgICAgICAgOgorICAgICAgICBwcmlu dGYoIlxcS3NuaV9mMTcgICAgICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBGMTdcbiIpOwor ICAgICAgICBicmVhazsKKyAgICBjYXNlIEtfU05JX0YxOCAgICAgICAgICAgOgorICAgICAgICBw cmludGYoIlxcS3NuaV9mMTggICAgICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBGMThcbiIp OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEtfU05JX1VTRVIxICAgICAgICAgIDoKKyAgICAg ICAgcHJpbnRmKCJcXEtzbmlfdXNlcjEgICAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogS2V5 IGJlbG93IEYxOFxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS19TTklfRjE5ICAgICAg ICAgICA6CisgICAgICAgIHByaW50ZigiXFxLc25pX2YxOSAgICAgICAgIFRyYW5zbWl0IFNOSS05 NzgwMS01eHg6IEYxOVxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS19TTklfVVNFUjIg ICAgICAgICAgOgorICAgICAgICBwcmludGYoIlxcS3NuaV91c2VyMiAgICAgICBUcmFuc21pdCBT TkktOTc4MDEtNXh4OiBLZXkgYmVsb3cgRjE5XG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz ZSBLX1NOSV9GMjAgICAgICAgICAgIDoKKyAgICAgICAgcHJpbnRmKCJcXEtzbmlfZjIwICAgICAg ICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogRjIwXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAg Y2FzZSBLX1NOSV9VU0VSMyAgICAgICAgICA6CisgICAgICAgIHByaW50ZigiXFxLc25pX3VzZXIz ICAgICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IEtleSBiZWxvdyBGMjBcbiIpOworICAgICAg ICBicmVhazsKKyAgICBjYXNlIEtfU05JX0YyMSAgICAgICAgICAgOgorICAgICAgICBwcmludGYo IlxcS3NuaV9mMjEgICAgICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBGMjFcbiIpOworICAg ICAgICBicmVhazsKKyAgICBjYXNlIEtfU05JX1VTRVI0ICAgICAgICAgIDoKKyAgICAgICAgcHJp bnRmKCJcXEtzbmlfdXNlcjQgICAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogS2V5IGJlbG93 IEYyMVxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS19TTklfRjIyICAgICAgICAgICA6 CisgICAgICAgIHByaW50ZigiXFxLc25pX2YyMiAgICAgICAgIFRyYW5zbWl0IFNOSS05NzgwMS01 eHg6IEYyMlxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS19TTklfVVNFUjUgICAgICAg ICAgOgorICAgICAgICBwcmludGYoIlxcS3NuaV91c2VyNSAgICAgICBUcmFuc21pdCBTTkktOTc4 MDEtNXh4OiBLZXkgYmVsb3cgRjIyXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBLX1NO SV9IRUxQICAgICAgICAgIDoKKyAgICAgICAgcHJpbnRmKCJcXEtzbmlfaGVscCAgICAgICAgVHJh bnNtaXQgU05JLTk3ODAxLTV4eDogSGVscFxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug S19TTklfSE9NRSAgICAgICAgICA6CisgICAgICAgIHByaW50ZigiXFxLc25pX2hvbWUgICAgICAg IFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IEhvbWVcbiIpOworICAgICAgICBicmVhazsKKyAgICBj YXNlIEtfU05JX0lOU0VSVF9DSEFSICAgOgorICAgICAgICBwcmludGYoIlxcS3NuaV9pbnNfY2hh ciAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBJbnNlcnQgQ2hhclxuIik7CisgICAgICAgIGJy ZWFrOworICAgIGNhc2UgS19TTklfSU5TRVJUX0xJTkUgICA6CisgICAgICAgIHByaW50ZigiXFxL c25pX2luc19saW5lICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IEluc2VydCBMaW5lXG4iKTsK KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBLX1NOSV9JTlNFUlRfV09SRCAgIDoKKyAgICAgICAg cHJpbnRmKCJcXEtzbmlfaW5zX3dvcmQgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogSW5zZXJ0 IFdvcmRcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEtfU05JX0xFRlRfVEFCICAgICAg OgorICAgICAgICBwcmludGYoIlxcS3NuaV9sZWZ0X3RhYiAgICBUcmFuc21pdCBTTkktOTc4MDEt NXh4OiBMZWZ0IFRhYlxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS19TTklfQ1VSU09S X0xFRlQgICA6CisgICAgICAgIHByaW50ZigiXFxLc25pX2xmYXJyICAgICAgIFRyYW5zbWl0IFNO SS05NzgwMS01eHg6IEN1cnNvciBMZWZ0XG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBL X1NOSV9NT0RFICAgICAgICAgIDoKKyAgICAgICAgcHJpbnRmKCJcXEtzbmlfbW9kZSAgICAgICAg VHJhbnNtaXQgU05JLTk3ODAxLTV4eDogTW9kZVxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNh c2UgS19TTklfUEFHRSAgICAgICAgICA6CisgICAgICAgIHByaW50ZigiXFxLc25pX3BhZ2UgICAg ICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IFBhZ2VcbiIpOworICAgICAgICBicmVhazsKKyAg ICBjYXNlIEtfU05JX1BSSU5UICAgICAgICAgOgorICAgICAgICBwcmludGYoIlxcS3NuaV9wcmlu dCAgICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBQcmludFxuIik7CisgICAgICAgIGJyZWFr OworICAgIGNhc2UgS19TTklfQ1VSU09SX1JJR0hUICA6CisgICAgICAgIHByaW50ZigiXFxLc25p X3J0YXJyICAgICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IEN1cnNvciBSaWdodFxuIik7Cisg ICAgICAgIGJyZWFrOworICAgIGNhc2UgS19TTklfU19ET1VCTEVfMCAgICA6CisgICAgICAgIHBy aW50ZigKKyJcXEtzbmlfc18wMCAgICAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogU2hpZnQt RG91YmxlLVplcm9cbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEtfU05JX1NfQ0UgICAg ICAgICAgOgorICAgICAgICBwcmludGYoIlxcS3NuaV9zX2NlICAgICAgICBUcmFuc21pdCBTTkkt OTc4MDEtNXh4OiBTaGlmdC1DRVxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS19TTklf U19DT01QT1NFICAgICA6CisgICAgICAgIHByaW50ZigiXFxLc25pX3NfY29tcG9zZSAgIFRyYW5z bWl0IFNOSS05NzgwMS01eHg6IFNoaWZ0LUNvbXBvc2VcbiIpOworICAgICAgICBicmVhazsKKyAg ICBjYXNlIEtfU05JX1NfREVMRVRFX0NIQVIgOgorICAgICAgICBwcmludGYoCisiXFxLc25pX3Nf ZGVsX2NoYXIgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IFNoaWZ0LURlbGV0ZSBDaGFyXG4iKTsK KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBLX1NOSV9TX0RFTEVURV9MSU5FIDoKKyAgICAgICAg cHJpbnRmKAorIlxcS3NuaV9zX2RlbF9saW5lICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBTaGlm dC1EZWxldGUgTGluZVxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS19TTklfU19ERUxF VEVfV09SRCA6CisgICAgICAgIHByaW50ZigKKyJcXEtzbmlfc19kZWxfd29yZCAgVHJhbnNtaXQg U05JLTk3ODAxLTV4eDogU2hpZnQtRGVsZXRlIFdvcmRcbiIpOworICAgICAgICBicmVhazsKKyAg ICBjYXNlIEtfU05JX1NfQ1VSU09SX0RPV04gOgorICAgICAgICBwcmludGYoCisiXFxLc25pX3Nf ZG5hcnIgICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IFNoaWZ0LUN1cnNvciBEb3duXG4iKTsK KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBLX1NOSV9TX0VORE1BUktFICAgIDoKKyAgICAgICAg cHJpbnRmKCJcXEtzbmlfc19lbmRtYXJrZSAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogU2hpZnQt RW5kIE1hcmtlXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBLX1NOSV9TX0YwMSAgICAg ICAgIDoKKyAgICAgICAgcHJpbnRmKCJcXEtzbmlfc19mMDEgICAgICAgVHJhbnNtaXQgU05JLTk3 ODAxLTV4eDogU2hpZnQtRjFcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEtfU05JX1Nf RjAyICAgICAgICAgOgorICAgICAgICBwcmludGYoIlxcS3NuaV9zX2YwMiAgICAgICBUcmFuc21p dCBTTkktOTc4MDEtNXh4OiBTaGlmdC1GMlxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug S19TTklfU19GMDMgICAgICAgICA6CisgICAgICAgIHByaW50ZigiXFxLc25pX3NfZjAzICAgICAg IFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IFNoaWZ0LUYzXG4iKTsKKyAgICAgICAgYnJlYWs7Cisg ICAgY2FzZSBLX1NOSV9TX0YwNCAgICAgICAgIDoKKyAgICAgICAgcHJpbnRmKCJcXEtzbmlfc19m MDQgICAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogU2hpZnQtRjRcbiIpOworICAgICAgICBi cmVhazsKKyAgICBjYXNlIEtfU05JX1NfRjA1ICAgICAgICAgOgorICAgICAgICBwcmludGYoIlxc S3NuaV9zX2YwNSAgICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBTaGlmdC1GNVxuIik7Cisg ICAgICAgIGJyZWFrOworICAgIGNhc2UgS19TTklfU19GMDYgICAgICAgICA6CisgICAgICAgIHBy aW50ZigiXFxLc25pX3NfZjA2ICAgICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IFNoaWZ0LUY2 XG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBLX1NOSV9TX0YwNyAgICAgICAgIDoKKyAg ICAgICAgcHJpbnRmKCJcXEtzbmlfc19mMDcgICAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDog U2hpZnQtRjdcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEtfU05JX1NfRjA4ICAgICAg ICAgOgorICAgICAgICBwcmludGYoIlxcS3NuaV9zX2YwOCAgICAgICBUcmFuc21pdCBTTkktOTc4 MDEtNXh4OiBTaGlmdC1GOFxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS19TTklfU19G MDkgICAgICAgICA6CisgICAgICAgIHByaW50ZigiXFxLc25pX3NfZjA5ICAgICAgIFRyYW5zbWl0 IFNOSS05NzgwMS01eHg6IFNoaWZ0LUY5XG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBL X1NOSV9TX0YxMCAgICAgICAgIDoKKyAgICAgICAgcHJpbnRmKCJcXEtzbmlfc19mMTAgICAgICAg VHJhbnNtaXQgU05JLTk3ODAxLTV4eDogU2hpZnQtRjEwXG4iKTsKKyAgICAgICAgYnJlYWs7Cisg ICAgY2FzZSBLX1NOSV9TX0YxMSAgICAgICAgIDoKKyAgICAgICAgcHJpbnRmKCJcXEtzbmlfc19m MTEgICAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogU2hpZnQtRjExXG4iKTsKKyAgICAgICAg YnJlYWs7CisgICAgY2FzZSBLX1NOSV9TX0YxMiAgICAgICAgIDoKKyAgICAgICAgcHJpbnRmKCJc XEtzbmlfc19mMTIgICAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogU2hpZnQtRjEyXG4iKTsK KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBLX1NOSV9TX0YxMyAgICAgICAgIDoKKyAgICAgICAg cHJpbnRmKCJcXEtzbmlfc19mMTMgICAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogU2hpZnQt RjEzXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBLX1NOSV9TX0YxNCAgICAgICAgIDoK KyAgICAgICAgcHJpbnRmKCJcXEtzbmlfc19mMTQgICAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4 eDogU2hpZnQtRjE0XG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBLX1NOSV9TX0YxNSAg ICAgICAgIDoKKyAgICAgICAgcHJpbnRmKCJcXEtzbmlfc19mMTUgICAgICAgVHJhbnNtaXQgU05J LTk3ODAxLTV4eDogU2hpZnQtRjE1XG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBLX1NO SV9TX0YxNiAgICAgICAgIDoKKyAgICAgICAgcHJpbnRmKCJcXEtzbmlfc19mMTYgICAgICAgVHJh bnNtaXQgU05JLTk3ODAxLTV4eDogU2hpZnQtRjE2XG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAg Y2FzZSBLX1NOSV9TX0YxNyAgICAgICAgIDoKKyAgICAgICAgcHJpbnRmKCJcXEtzbmlfc19mMTcg ICAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogU2hpZnQtRjE3XG4iKTsKKyAgICAgICAgYnJl YWs7CisgICAgY2FzZSBLX1NOSV9TX0YxOCAgICAgICAgIDoKKyAgICAgICAgcHJpbnRmKCJcXEtz bmlfc19mMTggICAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogU2hpZnQtRjE4XG4iKTsKKyAg ICAgICAgYnJlYWs7CisgICAgY2FzZSBLX1NOSV9TX1VTRVIxICAgICAgICA6CisgICAgICAgIHBy aW50ZigKKyJcXEtzbmlfc191c2VyMSAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogU2hpZnQt S2V5IGJlbG93IEYxOFxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS19TTklfU19GMTkg ICAgICAgICA6CisgICAgICAgIHByaW50ZigiXFxLc25pX3NfZjE5ICAgICAgIFRyYW5zbWl0IFNO SS05NzgwMS01eHg6IFNoaWZ0LUYxOVxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS19T TklfU19VU0VSMiAgICAgICA6CisgICAgICAgIHByaW50ZigKKyJcXEtzbmlfc191c2VyMiAgICAg VHJhbnNtaXQgU05JLTk3ODAxLTV4eDogU2hpZnQtS2V5IGJlbG93IEYxOVxuIik7CisgICAgICAg IGJyZWFrOworICAgIGNhc2UgS19TTklfU19GMjAgICAgICAgICA6CisgICAgICAgIHByaW50Zigi XFxLc25pX3NfZjIwICAgICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IFNoaWZ0LUYyMFxuIik7 CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS19TTklfU19VU0VSMyAgICAgICA6CisgICAgICAg IHByaW50ZigKKyJcXEtzbmlfc191c2VyMyAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogU2hp ZnQtS2V5IGJlbG93IEYyMFxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS19TTklfU19G MjEgICAgICAgICA6CisgICAgICAgIHByaW50ZigiXFxLc25pX3NfZjIxICAgICAgIFRyYW5zbWl0 IFNOSS05NzgwMS01eHg6IFNoaWZ0LUYyMVxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug S19TTklfU19VU0VSNCAgICAgICA6CisgICAgICAgIHByaW50ZigKKyJcXEtzbmlfc191c2VyNCAg ICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogU2hpZnQtS2V5IGJlbG93IEYyMVxuIik7CisgICAg ICAgIGJyZWFrOworICAgIGNhc2UgS19TTklfU19GMjIgICAgICAgICA6CisgICAgICAgIHByaW50 ZigiXFxLc25pX3NfZjIyICAgICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IFNoaWZ0LUYyMlxu Iik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS19TTklfU19VU0VSNSAgICAgICA6CisgICAg ICAgIHByaW50ZigKKyJcXEtzbmlfc191c2VyNSAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDog U2hpZnQtS2V5IGJlbG93IEYyMlxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS19TTklf U19IRUxQICAgICAgICA6CisgICAgICAgIHByaW50ZigiXFxLc25pX3NfaGVscCAgICAgIFRyYW5z bWl0IFNOSS05NzgwMS01eHg6IFNoaWZ0LUhlbHBcbiIpOworICAgICAgICBicmVhazsKKyAgICBj YXNlIEtfU05JX1NfSE9NRSAgICAgICAgOgorICAgICAgICBwcmludGYoIlxcS3NuaV9zX2hvbWUg ICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBTaGlmdC1Ib21lXG4iKTsKKyAgICAgICAgYnJl YWs7CisgICAgY2FzZSBLX1NOSV9TX0lOU0VSVF9DSEFSIDoKKyAgICAgICAgcHJpbnRmKAorIlxc S3NuaV9zX2luc19jaGFyICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBTaGlmdC1JbnNlcnQgQ2hh clxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS19TTklfU19JTlNFUlRfTElORSA6Cisg ICAgICAgIHByaW50ZigKKyJcXEtzbmlfc19pbnNfbGluZSAgVHJhbnNtaXQgU05JLTk3ODAxLTV4 eDogU2hpZnQtSW5zZXJ0IExpbmVcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEtfU05J X1NfSU5TRVJUX1dPUkQgOgorICAgICAgICBwcmludGYoCisiXFxLc25pX3NfaW5zX3dvcmQgIFRy YW5zbWl0IFNOSS05NzgwMS01eHg6IFNoaWZ0LUluc2VydCBXb3JkXG4iKTsKKyAgICAgICAgYnJl YWs7CisgICAgY2FzZSBLX1NOSV9TX0xFRlRfVEFCICAgIDoKKyAgICAgICAgcHJpbnRmKCJcXEtz bmlfc19sZWZ0X3RhYiAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogU2hpZnQtTGVmdCBUYWJcbiIp OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEtfU05JX1NfQ1VSU09SX0xFRlQgOgorICAgICAg ICBwcmludGYoCisiXFxLc25pX3NfbGZhcnIgICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IFNo aWZ0LUN1cnNvciBMZWZ0XG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBLX1NOSV9TX01P REUgICAgICAgIDoKKyAgICAgICAgcHJpbnRmKCJcXEtzbmlfc19tb2RlICAgICAgVHJhbnNtaXQg U05JLTk3ODAxLTV4eDogU2hpZnQtTW9kZVxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug S19TTklfU19QQUdFICAgICAgICA6CisgICAgICAgIHByaW50ZigiXFxLc25pX3NfcGFnZSAgICAg IFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IFNoaWZ0LVBhZ2VcbiIpOworICAgICAgICBicmVhazsK KyAgICBjYXNlIEtfU05JX1NfUFJJTlQgICAgICAgOgorICAgICAgICBwcmludGYoIlxcS3NuaV9z X3ByaW50ICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBTaGlmdC1QcmludFxuIik7CisgICAg ICAgIGJyZWFrOworICAgIGNhc2UgS19TTklfU19DVVJTT1JfUklHSFQ6CisgICAgICAgIHByaW50 ZigKKyJcXEtzbmlfc19ydGFyciAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogU2hpZnQtQ3Vy c29yIFJpZ2h0XG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBLX1NOSV9TX1NDUk9MTF9E T1dOIDoKKyAgICAgICAgcHJpbnRmKAorIlxcS3NuaV9zX3Njcm9sbF9kbiBUcmFuc21pdCBTTkkt OTc4MDEtNXh4OiBTaGlmdC1TY3JvbGwgRG93blxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNh c2UgS19TTklfU19TQ1JPTExfVVAgICA6CisgICAgICAgIHByaW50ZigiXFxLc25pX3Nfc2Nyb2xs X3VwIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IFNoaWZ0LVNjcm9sbCBVcFxuIik7CisgICAgICAg IGJyZWFrOworICAgIGNhc2UgS19TTklfU19TVEFSVCAgICAgICA6CisgICAgICAgIHByaW50Zigi XFxLc25pX3Nfc3RhcnQgICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IFNoaWZ0LVN0YXJ0XG4i KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBLX1NOSV9TX0NVUlNPUl9VUCAgIDoKKyAgICAg ICAgcHJpbnRmKCJcXEtzbmlfc191cGFyciAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogU2hp ZnQtQ3Vyc29yIFVwXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBLX1NOSV9TX1RBQiAg ICAgICAgIDoKKyAgICAgICAgcHJpbnRmKCJcXEtzbmlfc190YWIgICAgICAgVHJhbnNtaXQgU05J LTk3ODAxLTV4eDogU2hpZnQtVGFiXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBLX1NO SV9TQ1JPTExfRE9XTiAgIDoKKyAgICAgICAgcHJpbnRmKCJcXEtzbmlfc2Nyb2xsX2RuICAgVHJh bnNtaXQgU05JLTk3ODAxLTV4eDogU2Nyb2xsIERvd25cbiIpOworICAgICAgICBicmVhazsKKyAg ICBjYXNlIEtfU05JX1NDUk9MTF9VUCAgICAgOgorICAgICAgICBwcmludGYoIlxcS3NuaV9zY3Jv bGxfdXAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBTY3JvbGwgVXBcbiIpOworICAgICAgICBi cmVhazsKKyAgICBjYXNlIEtfU05JX1NUQVJUICAgICAgICAgOgorICAgICAgICBwcmludGYoIlxc S3NuaV9zdGFydCAgICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBTdGFydFxuIik7CisgICAg ICAgIGJyZWFrOworICAgIGNhc2UgS19TTklfVEFCICAgICAgICAgICA6CisgICAgICAgIHByaW50 ZigiXFxLc25pX3RhYiAgICAgICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IFRhYlxuIik7Cisg ICAgICAgIGJyZWFrOworICAgIGNhc2UgS19TTklfQ1VSU09SX1VQICAgICA6CisgICAgICAgIHBy aW50ZigiXFxLc25pX3VwYXJyICAgICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IEN1cnNvciBV cFxuIik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBLX0JBODBfQVRUUjoKKyAgICAgICAg cHJpbnRmKCJcXEtiYTgwX2F0dHIgICAgICAgVHJhbnNtaXQgQkE4MDogQXR0clxuIik7CisgICAg ICAgIGJyZWFrOworICAgIGNhc2UgS19CQTgwX0NfS0VZOgorICAgICAgICBwcmludGYoIlxcS2Jh ODBfY19rZXkgICAgICBUcmFuc21pdCBCQTgwOiBDXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAg Y2FzZSBLX0JBODBfQ0xFQVI6CisgICAgICAgIHByaW50ZigiXFxLYmE4MF9jbGVhciAgICAgIFRy YW5zbWl0IEJBODA6IENsZWFyXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBLX0JBODBf Q01EOgorICAgICAgICBwcmludGYoIlxcS2JhODBfY21kICAgICAgICBUcmFuc21pdCBCQTgwOiBD bWRcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEtfQkE4MF9DT1BZOgorICAgICAgICBw cmludGYoIlxcS2JhODBfY29weSAgICAgICBUcmFuc21pdCBCQTgwOiBDb3B5XG4iKTsKKyAgICAg ICAgYnJlYWs7CisgICAgY2FzZSBLX0JBODBfREVMOgorICAgICAgICBwcmludGYoIlxcS2JhODBf ZGVsICAgICAgICBUcmFuc21pdCBCQTgwOiBEZWxldGVcbiIpOworICAgICAgICBicmVhazsKKyAg ICBjYXNlIEtfQkE4MF9ERUxfQjoKKyAgICAgICAgcHJpbnRmKCJcXEtiYTgwX2RlbF9iICAgICAg VHJhbnNtaXQgQkE4MDogRGVsZXRlIEJcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEtf QkE4MF9ETzoKKyAgICAgICAgcHJpbnRmKCJcXEtiYTgwX2RvICAgICAgICAgVHJhbnNtaXQgQkE4 MDogRG9cbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEtfQkE4MF9FTkQ6CisgICAgICAg IHByaW50ZigiXFxLYmE4MF9lbmQgICAgICAgIFRyYW5zbWl0IEJBODA6IEVuZFxuIik7CisgICAg ICAgIGJyZWFrOworICAgIGNhc2UgS19CQTgwX0VOVjoKKyAgICAgICAgcHJpbnRmKCJcXEtiYTgw X2VudiAgICAgICAgVHJhbnNtaXQgQkE4MDogRW52XG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAg Y2FzZSBLX0JBODBfRU9QOgorICAgICAgICBwcmludGYoIlxcS2JhODBfZW9wICAgICAgICBUcmFu c21pdCBCQTgwOiBFT1BcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEtfQkE4MF9FUkFT RToKKyAgICAgICAgcHJpbnRmKCJcXEtiYTgwX2VyYXNlICAgICAgVHJhbnNtaXQgQkE4MDogRXJh c2VcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEtfQkE4MF9GTVQ6CisgICAgICAgIHBy aW50ZigiXFxLYmE4MF9mbXQgICAgICAgIFRyYW5zbWl0IEJBODA6IEZvcm1hdFxuIik7CisgICAg ICAgIGJyZWFrOworICAgIGNhc2UgS19CQTgwX0hFTFA6CisgICAgICAgIHByaW50ZigiXFxLYmE4 MF9oZWxwICAgICAgIFRyYW5zbWl0IEJBODA6IEhlbHBcbiIpOworICAgICAgICBicmVhazsKKyAg ICBjYXNlIEtfQkE4MF9IT01FOgorICAgICAgICBwcmludGYoIlxcS2JhODBfaG9tZSAgICAgICBU cmFuc21pdCBCQTgwOiBIb21lXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBLX0JBODBf SU5TOgorICAgICAgICBwcmludGYoIlxcS2JhODBfaW5zICAgICAgICBUcmFuc21pdCBCQTgwOiBJ bnNlcnRcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEtfQkE4MF9JTlNfQjoKKyAgICAg ICAgcHJpbnRmKCJcXEtiYTgwX2luc19iICAgICAgVHJhbnNtaXQgQkE4MDogSW5zZXJ0IEJcbiIp OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEtfQkE4MF9NQVJLOgorICAgICAgICBwcmludGYo IlxcS2JhODBfbWFyayAgICAgICBUcmFuc21pdCBCQTgwOiBNYXJrXG4iKTsKKyAgICAgICAgYnJl YWs7CisgICAgY2FzZSBLX0JBODBfTU9WRToKKyAgICAgICAgcHJpbnRmKCJcXEtiYTgwX21vdmUg ICAgICAgVHJhbnNtaXQgQkE4MDogTW92ZVxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug S19CQTgwX1BBMDE6CisgICAgICAgIHByaW50ZigiXFxLYmE4MF9wYTAxICAgICAgIFRyYW5zbWl0 IEJBODA6IFBBMVxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS19CQTgwX1BBMDI6Cisg ICAgICAgIHByaW50ZigiXFxLYmE4MF9wYTAyICAgICAgIFRyYW5zbWl0IEJBODA6IFBBMlxuIik7 CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS19CQTgwX1BBMDM6CisgICAgICAgIHByaW50Zigi XFxLYmE4MF9wYTAzICAgICAgIFRyYW5zbWl0IEJBODA6IFBBM1xuIik7CisgICAgICAgIGJyZWFr OworICAgIGNhc2UgS19CQTgwX1BBMDQ6CisgICAgICAgIHByaW50ZigiXFxLYmE4MF9wYTA0ICAg ICAgIFRyYW5zbWl0IEJBODA6IFBBNFxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS19C QTgwX1BBMDU6CisgICAgICAgIHByaW50ZigiXFxLYmE4MF9wYTA1ICAgICAgIFRyYW5zbWl0IEJB ODA6IFBBNVxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS19CQTgwX1BBMDY6CisgICAg ICAgIHByaW50ZigiXFxLYmE4MF9wYTA2ICAgICAgIFRyYW5zbWl0IEJBODA6IFBBNlxuIik7Cisg ICAgICAgIGJyZWFrOworICAgIGNhc2UgS19CQTgwX1BBMDc6CisgICAgICAgIHByaW50ZigiXFxL YmE4MF9wYTA3ICAgICAgIFRyYW5zbWl0IEJBODA6IFBBN1xuIik7CisgICAgICAgIGJyZWFrOwor ICAgIGNhc2UgS19CQTgwX1BBMDg6CisgICAgICAgIHByaW50ZigiXFxLYmE4MF9wYTA4ICAgICAg IFRyYW5zbWl0IEJBODA6IFBBOFxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS19CQTgw X1BBMDk6CisgICAgICAgIHByaW50ZigiXFxLYmE4MF9wYTA5ICAgICAgIFRyYW5zbWl0IEJBODA6 IFBBOVxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS19CQTgwX1BBMTA6CisgICAgICAg IHByaW50ZigiXFxLYmE4MF9wYTEwICAgICAgIFRyYW5zbWl0IEJBODA6IFBBMTBcbiIpOworICAg ICAgICBicmVhazsKKyAgICBjYXNlIEtfQkE4MF9QQTExOgorICAgICAgICBwcmludGYoIlxcS2Jh ODBfcGExMSAgICAgICBUcmFuc21pdCBCQTgwOiBQQTExXG4iKTsKKyAgICAgICAgYnJlYWs7Cisg ICAgY2FzZSBLX0JBODBfUEExMjoKKyAgICAgICAgcHJpbnRmKCJcXEtiYTgwX3BhMTIgICAgICAg VHJhbnNtaXQgQkE4MDogUEExMlxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS19CQTgw X1BBMTM6CisgICAgICAgIHByaW50ZigiXFxLYmE4MF9wYTEzICAgICAgIFRyYW5zbWl0IEJBODA6 IFBBMTNcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEtfQkE4MF9QQTE0OgorICAgICAg ICBwcmludGYoIlxcS2JhODBfcGExNCAgICAgICBUcmFuc21pdCBCQTgwOiBQQTE0XG4iKTsKKyAg ICAgICAgYnJlYWs7CisgICAgY2FzZSBLX0JBODBfUEExNToKKyAgICAgICAgcHJpbnRmKCJcXEti YTgwX3BhMTUgICAgICAgVHJhbnNtaXQgQkE4MDogUEExNVxuIik7CisgICAgICAgIGJyZWFrOwor ICAgIGNhc2UgS19CQTgwX1BBMTY6CisgICAgICAgIHByaW50ZigiXFxLYmE4MF9wYTE2ICAgICAg IFRyYW5zbWl0IEJBODA6IFBBMTZcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEtfQkE4 MF9QQTE3OgorICAgICAgICBwcmludGYoIlxcS2JhODBfcGExNyAgICAgICBUcmFuc21pdCBCQTgw OiBQQTE3XG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBLX0JBODBfUEExODoKKyAgICAg ICAgcHJpbnRmKCJcXEtiYTgwX3BhMTggICAgICAgVHJhbnNtaXQgQkE4MDogUEExOFxuIik7Cisg ICAgICAgIGJyZWFrOworICAgIGNhc2UgS19CQTgwX1BBMTk6CisgICAgICAgIHByaW50ZigiXFxL YmE4MF9wYTE5ICAgICAgIFRyYW5zbWl0IEJBODA6IFBBMTlcbiIpOworICAgICAgICBicmVhazsK KyAgICBjYXNlIEtfQkE4MF9QQTIwOgorICAgICAgICBwcmludGYoIlxcS2JhODBfcGEyMCAgICAg ICBUcmFuc21pdCBCQTgwOiBQQTIwXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBLX0JB ODBfUEEyMToKKyAgICAgICAgcHJpbnRmKCJcXEtiYTgwX3BhMjEgICAgICAgVHJhbnNtaXQgQkE4 MDogUEEyMVxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS19CQTgwX1BBMjI6CisgICAg ICAgIHByaW50ZigiXFxLYmE4MF9wYTIyICAgICAgIFRyYW5zbWl0IEJBODA6IFBBMjJcbiIpOwor ICAgICAgICBicmVhazsKKyAgICBjYXNlIEtfQkE4MF9QQTIzOgorICAgICAgICBwcmludGYoIlxc S2JhODBfcGEyMyAgICAgICBUcmFuc21pdCBCQTgwOiBQQTIzXG4iKTsKKyAgICAgICAgYnJlYWs7 CisgICAgY2FzZSBLX0JBODBfUEEyNDoKKyAgICAgICAgcHJpbnRmKCJcXEtiYTgwX3BhMjQgICAg ICAgVHJhbnNtaXQgQkE4MDogUEEyNFxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS19C QTgwX1BHRE46CisgICAgICAgIHByaW50ZigiXFxLYmE4MF9wZ2RuICAgICAgIFRyYW5zbWl0IEJB ODA6IFBhZ2UgRG93blxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS19CQTgwX1BHVVA6 CisgICAgICAgIHByaW50ZigiXFxLYmE4MF9wZ3VwICAgICAgIFRyYW5zbWl0IEJBODA6IFBhZ2Ug VXBcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEtfQkE4MF9QSUNLOgorICAgICAgICBw cmludGYoIlxcS2JhODBfcGljayAgICAgICBUcmFuc21pdCBCQTgwOiBQaWNrXG4iKTsKKyAgICAg ICAgYnJlYWs7CisgICAgY2FzZSBLX0JBODBfUFJJTlQ6CisgICAgICAgIHByaW50ZigiXFxLYmE4 MF9wcmludCAgICAgIFRyYW5zbWl0IEJBODA6IFByaW50XG4iKTsKKyAgICAgICAgYnJlYWs7Cisg ICAgY2FzZSBLX0JBODBfUFVUOgorICAgICAgICBwcmludGYoIlxcS2JhODBfcHV0ICAgICAgICBU cmFuc21pdCBCQTgwOiBQdXRcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEtfQkE4MF9S RUZSRVNIOgorICAgICAgICBwcmludGYoIlxcS2JhODBfcmVmcmVzaCAgICBUcmFuc21pdCBCQTgw OiBSZWZyZXNoIFxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS19CQTgwX1JFU0VUOgor ICAgICAgICBwcmludGYoIlxcS2JhODBfcmVzZXQgICAgICBUcmFuc21pdCBCQTgwOiBSZXNldFxu Iik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS19CQTgwX1JVQk9VVDoKKyAgICAgICAgcHJp bnRmKCJcXEtiYTgwX3J1Ym91dCAgICAgVHJhbnNtaXQgQkE4MDogUnVib3V0XG4iKTsKKyAgICAg ICAgYnJlYWs7CisgICAgY2FzZSBLX0JBODBfU0FWRToKKyAgICAgICAgcHJpbnRmKCJcXEtiYTgw X3NhdmUgICAgICAgVHJhbnNtaXQgQkE4MDogU2F2ZVxuIik7CisgICAgICAgIGJyZWFrOworICAg IGNhc2UgS19CQTgwX1NPRlRLRVkxOgorICAgICAgICBwcmludGYoIlxcS2JhODBfc29mdGtleTEg ICBUcmFuc21pdCBCQTgwOiBTb2Z0a2V5IDFcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNl IEtfQkE4MF9TT0ZUS0VZMjoKKyAgICAgICAgcHJpbnRmKCJcXEtiYTgwX3NvZnRrZXkyICAgVHJh bnNtaXQgQkE4MDogU29mdGtleSAyXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBLX0JB ODBfU09GVEtFWTM6CisgICAgICAgIHByaW50ZigiXFxLYmE4MF9zb2Z0a2V5MyAgIFRyYW5zbWl0 IEJBODA6IFNvZnRrZXkgM1xuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS19CQTgwX1NP RlRLRVk0OgorICAgICAgICBwcmludGYoIlxcS2JhODBfc29mdGtleTQgICBUcmFuc21pdCBCQTgw OiBTb2Z0a2V5IDRcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEtfQkE4MF9TT0ZUS0VZ NToKKyAgICAgICAgcHJpbnRmKCJcXEtiYTgwX3NvZnRrZXk1ICAgVHJhbnNtaXQgQkE4MDogU29m dGtleSA1XG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBLX0JBODBfU09GVEtFWTY6Cisg ICAgICAgIHByaW50ZigiXFxLYmE4MF9zb2Z0a2V5NiAgIFRyYW5zbWl0IEJBODA6IFNvZnRrZXkg NlxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS19CQTgwX1NPRlRLRVk3OgorICAgICAg ICBwcmludGYoIlxcS2JhODBfc29mdGtleTcgICBUcmFuc21pdCBCQTgwOiBTb2Z0a2V5IDdcbiIp OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEtfQkE4MF9TT0ZUS0VZODoKKyAgICAgICAgcHJp bnRmKCJcXEtiYTgwX3NvZnRrZXk4ICAgVHJhbnNtaXQgQkE4MDogU29mdGtleSA4XG4iKTsKKyAg ICAgICAgYnJlYWs7CisgICAgY2FzZSBLX0JBODBfU09GVEtFWTk6CisgICAgICAgIHByaW50Zigi XFxLYmE4MF9zb2Z0a2V5OSAgIFRyYW5zbWl0IEJBODA6IFNvZnRrZXkgOVxuIik7CisgICAgICAg IGJyZWFrOworICAgIGNhc2UgS19CQTgwX1VORE86CisgICAgICAgIHByaW50ZigiXFxLYmE4MF91 bmRvICAgICAgIFRyYW5zbWl0IEJBODA6IFVuZG9cbiIpOworICAgICAgICBicmVhazsKKworICAg ICAgICBjYXNlICBLX0kzMV9GMDE6CisgICAgICAgIHByaW50ZigiXFxLaTMxX2YwMSAgICAgICAg IFRyYW5zbWl0IElCTSAzMXh4OiBGMVxuIik7CisgICAgICAgIGJyZWFrOworICAgICAgIGNhc2Ug IEtfSTMxX0YwMjogICAgICAgICAKKyAgICAgICAgcHJpbnRmKCJcXEtpMzFfZjAyICAgICAgICAg VHJhbnNtaXQgSUJNIDMxeHg6IEYyXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgY2FzZSAg S19JMzFfRjAzOiAgICAgICAgIAorICAgICAgICBwcmludGYoIlxcS2kzMV9mMDMgICAgICAgICBU cmFuc21pdCBJQk0gMzF4eDogRjNcbiIpOworICAgICAgICBicmVhazsKKyAgICAgICBjYXNlICBL X0kzMV9GMDQ6ICAgICAgICAgCisgICAgICAgIHByaW50ZigiXFxLaTMxX2YwNCAgICAgICAgIFRy YW5zbWl0IElCTSAzMXh4OiBGNFxuIik7CisgICAgICAgIGJyZWFrOworICAgICAgIGNhc2UgIEtf STMxX0YwNTogICAgICAgICAKKyAgICAgICAgcHJpbnRmKCJcXEtpMzFfZjA1ICAgICAgICAgVHJh bnNtaXQgSUJNIDMxeHg6IEY1XG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgY2FzZSAgS19J MzFfRjA2OiAgICAgICAgIAorICAgICAgICBwcmludGYoIlxcS2kzMV9mMDYgICAgICAgICBUcmFu c21pdCBJQk0gMzF4eDogRjZcbiIpOworICAgICAgICBicmVhazsKKyAgICAgICBjYXNlICBLX0kz MV9GMDc6ICAgICAgICAgCisgICAgICAgIHByaW50ZigiXFxLaTMxX2YwNyAgICAgICAgIFRyYW5z bWl0IElCTSAzMXh4OiBGN1xuIik7CisgICAgICAgIGJyZWFrOworICAgICAgIGNhc2UgIEtfSTMx X0YwODogICAgICAgICAKKyAgICAgICAgcHJpbnRmKCJcXEtpMzFfZjA4ICAgICAgICAgVHJhbnNt aXQgSUJNIDMxeHg6IEY4XG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgY2FzZSAgS19JMzFf RjA5OiAgICAgICAgIAorICAgICAgICBwcmludGYoIlxcS2kzMV9mMDkgICAgICAgICBUcmFuc21p dCBJQk0gMzF4eDogRjlcbiIpOworICAgICAgICBicmVhazsKKyAgICAgICBjYXNlICBLX0kzMV9G MTA6ICAgICAgICAgCisgICAgICAgIHByaW50ZigiXFxLaTMxX2YxMCAgICAgICAgIFRyYW5zbWl0 IElCTSAzMXh4OiBGMTBcbiIpOworICAgICAgICBicmVhazsKKyAgICAgICBjYXNlICBLX0kzMV9G MTE6ICAgICAgICAgCisgICAgICAgIHByaW50ZigiXFxLaTMxX2YxMSAgICAgICAgIFRyYW5zbWl0 IElCTSAzMXh4OiBGMTFcbiIpOworICAgICAgICBicmVhazsKKyAgICAgICBjYXNlICBLX0kzMV9G MTI6ICAgICAgICAgCisgICAgICAgIHByaW50ZigiXFxLaTMxX2YxMiAgICAgICAgIFRyYW5zbWl0 IElCTSAzMXh4OiBGMTJcbiIpOworICAgICAgICBicmVhazsKKyAgICAgICBjYXNlICBLX0kzMV9G MTM6ICAgICAgICAgCisgICAgICAgIHByaW50ZigiXFxLaTMxX2YxMyAgICAgICAgIFRyYW5zbWl0 IElCTSAzMXh4OiBGMTNcbiIpOworICAgICAgICBicmVhazsKKyAgICAgICBjYXNlICBLX0kzMV9G MTQ6ICAgICAgICAgCisgICAgICAgIHByaW50ZigiXFxLaTMxX2YxNCAgICAgICAgIFRyYW5zbWl0 IElCTSAzMXh4OiBGMTRcbiIpOworICAgICAgICBicmVhazsKKyAgICAgICBjYXNlICBLX0kzMV9G MTU6ICAgICAgICAgCisgICAgICAgIHByaW50ZigiXFxLaTMxX2YxNSAgICAgICAgIFRyYW5zbWl0 IElCTSAzMXh4OiBGMTVcbiIpOworICAgICAgICBicmVhazsKKyAgICAgICBjYXNlICBLX0kzMV9G MTY6ICAgICAgICAgCisgICAgICAgIHByaW50ZigiXFxLaTMxX2YxNiAgICAgICAgIFRyYW5zbWl0 IElCTSAzMXh4OiBGMTZcbiIpOworICAgICAgICBicmVhazsKKyAgICAgICBjYXNlICBLX0kzMV9G MTc6ICAgICAgICAgCisgICAgICAgIHByaW50ZigiXFxLaTMxX2YxNyAgICAgICAgIFRyYW5zbWl0 IElCTSAzMXh4OiBGMTdcbiIpOworICAgICAgICBicmVhazsKKyAgICAgICBjYXNlICBLX0kzMV9G MTg6ICAgICAgICAgCisgICAgICAgIHByaW50ZigiXFxLaTMxX2YxOCAgICAgICAgIFRyYW5zbWl0 IElCTSAzMXh4OiBGMThcbiIpOworICAgICAgICBicmVhazsKKyAgICAgICBjYXNlICBLX0kzMV9G MTk6ICAgICAgICAgCisgICAgICAgIHByaW50ZigiXFxLaTMxX2YxOSAgICAgICAgIFRyYW5zbWl0 IElCTSAzMXh4OiBGMTlcbiIpOworICAgICAgICBicmVhazsKKyAgICAgICBjYXNlICBLX0kzMV9G MjA6ICAgICAgICAgCisgICAgICAgIHByaW50ZigiXFxLaTMxX2YyMCAgICAgICAgIFRyYW5zbWl0 IElCTSAzMXh4OiBGMjBcbiIpOworICAgICAgICBicmVhazsKKyAgICAgICBjYXNlICBLX0kzMV9G MjE6ICAgICAgICAgCisgICAgICAgIHByaW50ZigiXFxLaTMxX2YyMSAgICAgICAgIFRyYW5zbWl0 IElCTSAzMXh4OiBGMjFcbiIpOworICAgICAgICBicmVhazsKKyAgICAgICBjYXNlICBLX0kzMV9G MjI6ICAgICAgICAgCisgICAgICAgIHByaW50ZigiXFxLaTMxX2YyMiAgICAgICAgIFRyYW5zbWl0 IElCTSAzMXh4OiBGMjJcbiIpOworICAgICAgICBicmVhazsKKyAgICAgICBjYXNlICBLX0kzMV9G MjM6ICAgICAgICAgCisgICAgICAgIHByaW50ZigiXFxLaTMxX2YyMyAgICAgICAgIFRyYW5zbWl0 IElCTSAzMXh4OiBGMjNcbiIpOworICAgICAgICBicmVhazsKKyAgICAgICBjYXNlICBLX0kzMV9G MjQ6ICAgICAgICAgCisgICAgICAgIHByaW50ZigiXFxLaTMxX2YyNCAgICAgICAgIFRyYW5zbWl0 IElCTSAzMXh4OiBGMjRcbiIpOworICAgICAgICBicmVhazsKKyAgICAgICBjYXNlICBLX0kzMV9G MjU6ICAgICAgICAgCisgICAgICAgIHByaW50ZigiXFxLaTMxX2YyNSAgICAgICAgIFRyYW5zbWl0 IElCTSAzMXh4OiBGMjVcbiIpOworICAgICAgICBicmVhazsKKyAgICAgICBjYXNlICBLX0kzMV9G MjY6ICAgICAgICAgCisgICAgICAgIHByaW50ZigiXFxLaTMxX2YyNiAgICAgICAgIFRyYW5zbWl0 IElCTSAzMXh4OiBGMjZcbiIpOworICAgICAgICBicmVhazsKKyAgICAgICBjYXNlICBLX0kzMV9G Mjc6ICAgICAgICAgCisgICAgICAgIHByaW50ZigiXFxLaTMxX2YyNyAgICAgICAgIFRyYW5zbWl0 IElCTSAzMXh4OiBGMjdcbiIpOworICAgICAgICBicmVhazsKKyAgICAgICBjYXNlICBLX0kzMV9G Mjg6ICAgICAgICAgCisgICAgICAgIHByaW50ZigiXFxLaTMxX2YyOCAgICAgICAgIFRyYW5zbWl0 IElCTSAzMXh4OiBGMjhcbiIpOworICAgICAgICBicmVhazsKKyAgICAgICBjYXNlICBLX0kzMV9G Mjk6ICAgICAgICAgCisgICAgICAgIHByaW50ZigiXFxLaTMxX2YyOSAgICAgICAgIFRyYW5zbWl0 IElCTSAzMXh4OiBGMjlcbiIpOworICAgICAgICBicmVhazsKKyAgICAgICBjYXNlICBLX0kzMV9G MzA6ICAgICAgICAgCisgICAgICAgIHByaW50ZigiXFxLaTMxX2YzMCAgICAgICAgIFRyYW5zbWl0 IElCTSAzMXh4OiBGMzBcbiIpOworICAgICAgICBicmVhazsKKyAgICAgICBjYXNlICBLX0kzMV9G MzE6ICAgICAgICAgCisgICAgICAgIHByaW50ZigiXFxLaTMxX2YzMSAgICAgICAgIFRyYW5zbWl0 IElCTSAzMXh4OiBGMzFcbiIpOworICAgICAgICBicmVhazsKKyAgICAgICBjYXNlICBLX0kzMV9G MzI6ICAgICAgICAgCisgICAgICAgIHByaW50ZigiXFxLaTMxX2YzMiAgICAgICAgIFRyYW5zbWl0 IElCTSAzMXh4OiBGMzJcbiIpOworICAgICAgICBicmVhazsKKyAgICAgICBjYXNlICBLX0kzMV9G MzM6ICAgICAgICAgCisgICAgICAgIHByaW50ZigiXFxLaTMxX2YzMyAgICAgICAgIFRyYW5zbWl0 IElCTSAzMXh4OiBGMzNcbiIpOworICAgICAgICBicmVhazsKKyAgICAgICBjYXNlICBLX0kzMV9G MzQ6ICAgICAgICAgCisgICAgICAgIHByaW50ZigiXFxLaTMxX2YzNCAgICAgICAgIFRyYW5zbWl0 IElCTSAzMXh4OiBGMzRcbiIpOworICAgICAgICBicmVhazsKKyAgICAgICBjYXNlICBLX0kzMV9G MzU6ICAgICAgICAgCisgICAgICAgIHByaW50ZigiXFxLaTMxX2YzNSAgICAgICAgIFRyYW5zbWl0 IElCTSAzMXh4OiBGMzVcbiIpOworICAgICAgICBicmVhazsKKyAgICAgICBjYXNlICBLX0kzMV9G MzY6ICAgICAgICAgCisgICAgICAgIHByaW50ZigiXFxLaTMxX2YzNiAgICAgICAgIFRyYW5zbWl0 IElCTSAzMXh4OiBGMzZcbiIpOworICAgICAgICBicmVhazsKKyAgICAgICBjYXNlICBLX0kzMV9Q QTE6ICAgICAgICAgCisgICAgICAgIHByaW50ZigiXFxLaTMxX3BhMSAgICAgICAgIFRyYW5zbWl0 IElCTSAzMXh4OiBQQTFcbiIpOworICAgICAgICBicmVhazsKKyAgICAgICBjYXNlICBLX0kzMV9Q QTI6ICAgICAgICAgCisgICAgICAgIHByaW50ZigiXFxLaTMxX3BhMiAgICAgICAgIFRyYW5zbWl0 IElCTSAzMXh4OiBQQTJcbiIpOworICAgICAgICBicmVhazsKKyAgICAgICBjYXNlICBLX0kzMV9Q QTM6ICAgICAgICAgCisgICAgICAgIHByaW50ZigiXFxLaTMxX3BhMyAgICAgICAgIFRyYW5zbWl0 IElCTSAzMXh4OiBQQTNcbiIpOworICAgICAgICBicmVhazsKKyAgICAgICBjYXNlICBLX0kzMV9S RVNFVDoKKyAgICAgICAgcHJpbnRmKCJcXEtpMzFfcmVzZXQgICAgICAgVHJhbnNtaXQgSUJNIDMx eHg6IFJlc2V0XG4iKTsKKyAgICAgICAgYnJlYWs7ICAgICAgICAgICAgCisgICAgICAgY2FzZSAg S19JMzFfSlVNUDogICAgICAgIAorICAgICAgICBwcmludGYoIlxcS2kzMV9qdW1wICAgICAgICBU cmFuc21pdCBJQk0gMzF4eDogSnVtcFxuIik7CisgICAgICAgIGJyZWFrOworICAgICAgIGNhc2Ug IEtfSTMxX0NMRUFSOiAgICAgICAKKyAgICAgICAgcHJpbnRmKCJcXEtpMzFfY2xlYXIgICAgICAg VHJhbnNtaXQgSUJNIDMxeHg6IENsZWFyXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgY2Fz ZSAgS19JMzFfRVJBU0VfRU9GOiAgIAorICAgICAgICBwcmludGYoIlxcS2kzMV9lcmFzZV9lb2Yg ICBUcmFuc21pdCBJQk0gMzF4eDogRXJhc2UgdG8gRW5kIG9mIEZpZWxkXG4iKTsKKyAgICAgICAg YnJlYWs7CisgICAgICAgY2FzZSAgS19JMzFfRVJBU0VfRU9QOiAgIAorICAgICAgICBwcmludGYo IlxcS2kzMV9lb3AgICAgICAgICBUcmFuc21pdCBJQk0gMzF4eDogRXJhc2UgdG8gRW5kIG9mIFBh Z2VcbiIpOworICAgICAgICBicmVhazsKKyAgICAgICBjYXNlICBLX0kzMV9FUkFTRV9JTlA6ICAg CisgICAgICAgIHByaW50ZigiXFxLaTMxX2lucCAgICAgICAgIFRyYW5zbWl0IElCTSAzMXh4OiBF cmFzZSBJbnB1dCBPcGVyYXRpb25cbiIpOworICAgICAgICBicmVhazsKKyAgICAgICBjYXNlICBL X0kzMV9JTlNFUlRfQ0hBUjogCisgICAgICAgIHByaW50ZigiXFxLaTMxX2luc19jaGFyICAgIFRy YW5zbWl0IElCTSAzMXh4OiBJbnNlcnQgQ2hhcmFjdGVyXG4iKTsKKyAgICAgICAgYnJlYWs7Cisg ICAgICAgY2FzZSAgS19JMzFfSU5TRVJUX1NQQUNFOgorICAgICAgICBwcmludGYoIlxcS2kzMV9p bnNfc3BhY2UgICBUcmFuc21pdCBJQk0gMzF4eDogSW5zZXJ0IFNwYWNlXG4iKTsKKyAgICAgICAg YnJlYWs7CisgICAgICAgY2FzZSAgS19JMzFfREVMRVRFOiAgICAgIAorICAgICAgICBwcmludGYo IlxcS2kzMV9kZWxldGUgICAgICBUcmFuc21pdCBJQk0gMzF4eDogRGVsZXRlIENoYXJhY3Rlclxu Iik7CisgICAgICAgIGJyZWFrOworICAgICAgIGNhc2UgIEtfSTMxX0lOU19MTjogICAgICAKKyAg ICAgICAgcHJpbnRmKCJcXEtpMzFfaW5zX2xpbmUgICAgVHJhbnNtaXQgSUJNIDMxeHg6IEluc2Vy dCBMaW5lXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgY2FzZSAgS19JMzFfREVMX0xOOiAg ICAgIAorICAgICAgICBwcmludGYoIlxcS2kzMV9kZWxfbG4gICAgICBUcmFuc21pdCBJQk0gMzF4 eDogRGVsZXRlIExpbmVcbiIpOworICAgICAgICBicmVhazsKKyAgICAgICBjYXNlICBLX0kzMV9Q UklOVF9MSU5FOiAgCisgICAgICAgIHByaW50ZigiXFxLaTMxX3BydF9saW5lICAgIFRyYW5zbWl0 IElCTSAzMXh4OiBQcmludCBMaW5lXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgY2FzZSAg S19JMzFfUFJJTlRfTVNHOiAgIAorICAgICAgICBwcmludGYoIlxcS2kzMV9wcnRfbXNnICAgICBU cmFuc21pdCBJQk0gMzF4eDogUHJpbnQgTWVzc2FnZVxuIik7CisgICAgICAgIGJyZWFrOworICAg ICAgIGNhc2UgIEtfSTMxX1BSSU5UX1NISUZUOiAKKyAgICAgICAgcHJpbnRmKCJcXEtpMzFfcHJ0 X3NoaWZ0ICAgVHJhbnNtaXQgSUJNIDMxeHg6IFByaW50IFNoaWZ0XG4iKTsKKyAgICAgICAgYnJl YWs7CisgICAgICAgY2FzZSAgS19JMzFfQ0FOQ0VMOiAgICAgIAorICAgICAgICBwcmludGYoIlxc S2kzMV9jYW5jZWwgICAgICBUcmFuc21pdCBJQk0gMzF4eDogQ2FuY2VsXG4iKTsKKyAgICAgICAg YnJlYWs7CisgICAgICAgY2FzZSAgS19JMzFfU0VORF9MSU5FOiAgIAorICAgICAgICBwcmludGYo IlxcS2kzMV9zZW5kX2xpbmUgICBUcmFuc21pdCBJQk0gMzF4eDogU2VuZCBMaW5lXG4iKTsKKyAg ICAgICAgYnJlYWs7CisgICAgICAgY2FzZSAgS19JMzFfU0VORF9NU0c6ICAgIAorICAgICAgICBw cmludGYoIlxcS2kzMV9zZW5kX21zZyAgICBUcmFuc21pdCBJQk0gMzF4eDogU2VuZCBNZXNzYWdl XG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgY2FzZSAgS19JMzFfU0VORF9QQUdFOiAgIAor ICAgICAgICBwcmludGYoIlxcS2kzMV9zZW5kX3BhZ2UgICBUcmFuc21pdCBJQk0gMzF4eDogU2Vu ZCBQYWdlXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgY2FzZSAgS19JMzFfSE9NRTogICAg ICAgIAorICAgICAgICBwcmludGYoIlxcS2kzMV9ob21lICAgICAgICBUcmFuc21pdCBJQk0gMzF4 eDogSG9tZVxuIik7CisgICAgICAgIGJyZWFrOworICAgICAgIGNhc2UgIEtfSTMxX0JBQ0tfVEFC OiAgICAKKyAgICAgICAgcHJpbnRmKCJcXEtpMzFfYmFja190YWIgICAgVHJhbnNtaXQgSUJNIDMx eHg6IEJhY2sgVGFiXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgY2FzZSAgS19TVU5fU1RP UDogCisgICAgICAgIHByaW50ZigiXFxLc3Vuc3RvcCAgICAgICAgIFRyYW5zbWl0IFNVTiBDb25z b2xlOiBTdG9wXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgY2FzZSAgS19TVU5fQUdBSU46 CisgICAgICAgIHByaW50ZigiXFxLc3VuYWdhaW4gICAgICAgIFRyYW5zbWl0IFNVTiBDb25zb2xl OiBBZ2FpblxuIik7CisgICAgICAgIGJyZWFrOworICAgICAgIGNhc2UgIEtfU1VOX1BST1BTOgor ICAgICAgICBwcmludGYoIlxcS3N1bnByb3BzICAgICAgICBUcmFuc21pdCBTVU4gQ29uc29sZTog UHJvcHNcbiIpOworICAgICAgICBicmVhazsKKyAgICAgICBjYXNlICBLX1NVTl9VTkRPOiAKKyAg ICAgICAgcHJpbnRmKCJcXEtzdW51bmRvICAgICAgICAgVHJhbnNtaXQgU1VOIENvbnNvbGU6IFVu ZG9cbiIpOworICAgICAgICBicmVhazsKKyAgICAgICBjYXNlICBLX1NVTl9GUk9OVDoKKyAgICAg ICAgcHJpbnRmKCJcXEtzdW5mcm9udCAgICAgICAgVHJhbnNtaXQgU1VOIENvbnNvbGU6IEZyb250 XG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgY2FzZSAgS19TVU5fQ09QWTogCisgICAgICAg IHByaW50ZigiXFxLc3VuY29weSAgICAgICAgIFRyYW5zbWl0IFNVTiBDb25zb2xlOiBDb3B5XG4i KTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgY2FzZSAgS19TVU5fT1BFTjogCisgICAgICAgIHBy aW50ZigiXFxLc3Vub3BlbiAgICAgICAgIFRyYW5zbWl0IFNVTiBDb25zb2xlOiBPcGVuXG4iKTsK KyAgICAgICAgYnJlYWs7CisgICAgICAgY2FzZSAgS19TVU5fUEFTVEU6CisgICAgICAgIHByaW50 ZigiXFxLc3VucGFzdGUgICAgICAgIFRyYW5zbWl0IFNVTiBDb25zb2xlOiBQYXN0ZVxuIik7Cisg ICAgICAgIGJyZWFrOworICAgICAgIGNhc2UgIEtfU1VOX0ZJTkQ6IAorICAgICAgICBwcmludGYo IlxcS3N1bmZpbmQgICAgICAgICBUcmFuc21pdCBTVU4gQ29uc29sZTogRmluZFxuIik7CisgICAg ICAgIGJyZWFrOworICAgICAgIGNhc2UgIEtfU1VOX0NVVDogIAorICAgICAgICBwcmludGYoIlxc S3N1bmN1dCAgICAgICAgICBUcmFuc21pdCBTVU4gQ29uc29sZTogQ3V0XG4iKTsKKyAgICAgICAg YnJlYWs7CisgICAgICAgY2FzZSAgS19TVU5fSEVMUDogCisgICAgICAgIHByaW50ZigiXFxLc3Vu aGVscCAgICAgICAgIFRyYW5zbWl0IFNVTiBDb25zb2xlOiBIZWxwXG4iKTsKKyAgICAgICAgYnJl YWs7CisKKyAgICAgICBkZWZhdWx0OgorICAgICAgICBwcmludGYoIk5vIGFkZGl0aW9uYWwgaGVs cCBhdmFpbGFibGUgZm9yIHRoaXMga3ZlcmJcbiIpOworICB9CisgICAgcHJpbnRmKCJcbiIpOwor CisgICAgLyogVGhpcyBpcyBub3QgdGhlIHByb3BlciB3YXkgdG8gZG8gaXQgc2luY2UgaXQgZG9l c24ndCBzaG93ICAqLworICAgIC8qIGFsbCBlbXVsYXRpb25zLCBub3IgZG9lcyBpdCBzaG93IHRo ZSBzcGVjaWFsIG1vZGVzLCBidXQgaXQgKi8KKyAgICAvKiBpcyBiZXR0ZXIgdGhhbiBub3RoaW5n LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgICBwcmludGYoIkN1 cnJlbnQgYmluZGluZ3M6XG4iKTsKKyAgICBmb3VuZCA9IDA7CisgICAgZm9yIChpID0gMjU2OyBp IDwgS01TSVpFIDsgaSsrKSB7CisgICAgICAgIGNvbl9ldmVudCBldnQgPSBtYXBrZXkoaSk7Cisg ICAgICAgIGlmIChldnQudHlwZSAhPSBrdmVyYikKKyAgICAgICAgICBjb250aW51ZTsKKyAgICAg ICAgaWYgKChldnQua3ZlcmIuaWQgJiB+Rl9LVkVSQikgPT0geHgpIHsKKyAgICAgICAgICAgIGZv dW5kID0gMTsKKyAgICAgICAgICAgIHByaW50ZigiICBcXCUtNGQgLSAlc1xuIixpLGtleW5hbWUo aSkpOworICAgICAgICB9CisgICAgfQorI2lmZGVmIE9TMk1PVVNFCisgICAgZm9yICggYnV0dG9u ID0gMCA7IGJ1dHRvbiA8IE1NQlVUVE9OTUFYIDsgYnV0dG9uKysgKQorICAgICAgZm9yICggZXZl bnQgPSAwIDsgZXZlbnQgPCBNTUVWRU5UU0laRSA7IGV2ZW50KysgKQorICAgICAgICBpZiAoIG1v dXNlbWFwW2J1dHRvbl1bZXZlbnRdLnR5cGUgPT0ga3ZlcmIgKSB7CisgICAgICAgICAgICBpZiAo IChtb3VzZW1hcFtidXR0b25dW2V2ZW50XS5rdmVyYi5pZCAmIH5GX0tWRVJCKSA9PSB4eCApIHsK KyAgICAgICAgICAgICAgICBmb3VuZCA9IDE7CisgICAgICAgICAgICAgICAgcHJpbnRmKCIgIE1v dXNlIC0gJXNcbiIsbW91c2VuYW1lKGJ1dHRvbixldmVudCkpOworICAgICAgICAgICAgfQorICAg ICAgICB9CisjZW5kaWYgLyogT1MyTU9VU0UgKi8KKworICAgIGlmICggIWZvdW5kICkgeworICAg ICAgICBwcmludGYoIiAgKG5vbmUpXG4iKTsKKyAgICB9CisgICAgcmV0dXJuKDApOworfQorI2Vu ZGlmIC8qIE5PS1ZFUkJTICovCisjZW5kaWYgLyogT1MyICovCisKKyNpZm5kZWYgTk9YRkVSCisv KiAgRCBPIEggUiBNIFQgIC0tICBHaXZlIGhlbHAgYWJvdXQgUkVNT1RFIGNvbW1hbmQgICovCisK K3N0YXRpYyBjaGFyICpocnNldFtdID0geworIlN5bnRheDogIFJFTU9URSBTRVQgcGFyYW1ldGVy IHZhbHVlIiwKKyJFeGFtcGxlOiBSRU1PVEUgU0VUIEZJTEUgVFlQRSBCSU5BUlkiLAorIiAgQXNr cyB0aGUgS2VybWl0IHNlcnZlciB0byBzZXQgdGhlIG5hbWVkIHBhcmFtZXRlciB0byB0aGUgZ2l2 ZW4gdmFsdWUuIiwKKyIgIEVxdWl2YWxlbnQgdG8gdHlwaW5nIHRoZSBjb3JyZXNwb25kaW5nIFNF VCBjb21tYW5kIGRpcmVjdGx5IHRvIHRoZSBvdGhlciIsCisiICBLZXJtaXQgaWYgaXQgd2VyZSBp biBpbnRlcmFjdGl2ZSBtb2RlLiIsICIiIH07CisKK2ludAorZG9ocm10KHh4KSBpbnQgeHg7IHsK KyAgICBpbnQgeDsKKyAgICBpZiAoeHggPT0gLTMpIHJldHVybihobXNnYShobWhybXQpKTsKKyAg ICBpZiAoeHggPCAwKSByZXR1cm4oeHgpOworICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0 dXJuKHgpOworICAgIHN3aXRjaCAoeHgpIHsKKworY2FzZSBYWkNQWToKKyAgICByZXR1cm4oaG1z ZygiU3ludGF4OiBSRU1PVEUgQ09QWSBzb3VyY2UgZGVzdGluYXRpb25cblwKKyAgQXNrcyB0aGUg S2VybWl0IHNlcnZlciB0byBjb3B5IHRoZSBzb3VyY2UgZmlsZSB0byBkZXN0aW5hdGlvbi5cblwK KyAgU3lub255bTogUkNPUFkuIikpOworCitjYXNlIFhaQ1dEOgorI2lmZGVmIE5FV0ZUUAorICAg IHJldHVybihobXNnKCJTeW50YXg6IFJFTU9URSBDRCBbIG5hbWUgXVxuXAorICBBc2tzIHRoZSBL ZXJtaXQgb3IgRlRQIHNlcnZlciB0byBjaGFuZ2UgaXRzIHdvcmtpbmcgZGlyZWN0b3J5IG9yIGRl dmljZS5cblwKKyAgSWYgdGhlIGRldmljZSBvciBkaXJlY3RvcnkgbmFtZSBpcyBvbWl0dGVkLCBy ZXN0b3JlIHRoZSBkZWZhdWx0LlxuXAorICBTeW5vbnltOiBSQ0QuIikpOworI2Vsc2UKKyAgICBy ZXR1cm4oaG1zZygiU3ludGF4OiBSRU1PVEUgQ0QgWyBuYW1lIF1cblwKKyAgQXNrcyB0aGUgS2Vy bWl0IHNlcnZlciB0byBjaGFuZ2UgaXRzIHdvcmtpbmcgZGlyZWN0b3J5IG9yIGRldmljZS5cblwK KyAgSWYgdGhlIGRldmljZSBvciBkaXJlY3RvcnkgbmFtZSBpcyBvbWl0dGVkLCByZXN0b3JlIHRo ZSBkZWZhdWx0LlxuXAorICBTeW5vbnltOiBSQ0QuIikpOworI2VuZGlmIC8qIE5FV0ZUUCAqLwor CitjYXNlIFhaREVMOgorI2lmZGVmIE5FV0ZUUAorICAgIHJldHVybihobXNnKCJTeW50YXg6IFJF TU9URSBERUxFVEUgZmlsZXNwZWNcblwKKyAgQXNrcyB0aGUgS2VybWl0IG9yIEZUUCBzZXJ2ZXIg dG8gZGVsZXRlIHRoZSBuYW1lZCBmaWxlKHMpLlxuXAorICBTeW5vbnltOiBSREVMLiIpKTsKKyNl bHNlCisgICAgcmV0dXJuKGhtc2coIlN5bnRheDogUkVNT1RFIERFTEVURSBmaWxlc3BlY1xuXAor ICBBc2tzIHRoZSBLZXJtaXQgc2VydmVyIHRvIGRlbGV0ZSB0aGUgbmFtZWQgZmlsZShzKS5cblwK KyAgU3lub255bTogUkRFTC4iKSk7CisjZW5kaWYgLyogTkVXRlRQICovCisKK2Nhc2UgWFpNS0Q6 CisjaWZkZWYgTkVXRlRQCisgICAgcmV0dXJuKGhtc2coIlN5bnRheDogUkVNT1RFIE1LRElSIGRp cmVjdG9yeS1uYW1lXG5cCisgIEFza3MgdGhlIEtlcm1pdCBvciBGVFAgc2VydmVyIHRvIGNyZWF0 ZSB0aGUgbmFtZWQgZGlyZWN0b3J5LlxuXAorICBTeW5vbnltOiBSTUtESVIuIikpOworI2Vsc2UK KyAgICByZXR1cm4oaG1zZygiU3ludGF4OiBSRU1PVEUgTUtESVIgZGlyZWN0b3J5LW5hbWVcblwK KyAgQXNrcyB0aGUgS2VybWl0IHNlcnZlciB0byBjcmVhdGUgdGhlIG5hbWVkIGRpcmVjdG9yeS5c blwKKyAgU3lub255bTogUk1LRElSLiIpKTsKKyNlbmRpZiAvKiBORVdGVFAgKi8KKworY2FzZSBY WlJNRDoKKyNpZmRlZiBORVdGVFAKKyAgICByZXR1cm4oaG1zZygiU3ludGF4OiBSRU1PVEUgUk1E SVIgZGlyZWN0b3J5LW5hbWVcblwKKyAgQXNrcyB0aGUgS2VybWl0IG9yIEZUUCBzZXJ2ZXIgdG8g cmVtb3ZlIHRoZSBuYW1lZCBkaXJlY3RvcnkuXG5cCisgIFN5bm9ueW06IFJSTURJUi4iKSk7Cisj ZWxzZQorICAgIHJldHVybihobXNnKCJTeW50YXg6IFJFTU9URSBSTURJUiBkaXJlY3RvcnktbmFt ZVxuXAorICBBc2tzIHRoZSBLZXJtaXQgc2VydmVyIHRvIHJlbW92ZSB0aGUgbmFtZWQgZGlyZWN0 b3J5LlxuXAorICBTeW5vbnltOiBSUk1ESVIuIikpOworI2VuZGlmIC8qIE5FV0ZUUCAqLworCitj YXNlIFhaRElSOgorI2lmZGVmIE5FV0ZUUAorICAgIHJldHVybihobXNnKCJTeW50YXg6IFJFTU9U RSBESVJFQ1RPUlkgWyBmaWxlc3BlYyBdXG5cCisgIEFza3MgdGhlIEtlcm1pdCBvciBGVFAgc2Vy dmVyIHRvIHByb3ZpZGUgYSBkaXJlY3RvcnkgbGlzdGluZyBvZiB0aGUgbmFtZWRcblwKKyAgZmls ZShzKSBvciBpZiBubyBmaWxlIHNwZWNpZmljYXRpb24gaXMgZ2l2ZW4sIG9mIGFsbCBmaWxlcyBp biBpdHMgY3VycmVudFxuXAorICBkaXJlY3RvcnkuICBTeW5vbnltOiBSRElSLiIpKTsKKyNlbHNl CisgICAgcmV0dXJuKGhtc2coIlN5bnRheDogUkVNT1RFIERJUkVDVE9SWSBbIGZpbGVzcGVjIF1c blwKKyAgQXNrcyB0aGUgS2VybWl0IHNlcnZlciB0byBwcm92aWRlIGEgZGlyZWN0b3J5IGxpc3Rp bmcgb2YgdGhlIG5hbWVkXG5cCisgIGZpbGUocykgb3IgaWYgbm8gZmlsZSBzcGVjaWZpY2F0aW9u IGlzIGdpdmVuLCBvZiBhbGwgZmlsZXMgaW4gaXRzIGN1cnJlbnRcblwKKyAgZGlyZWN0b3J5LiAg U3lub255bTogUkRJUi4iKSk7CisjZW5kaWYgLyogTkVXRlRQICovCisKK2Nhc2UgWFpITFA6Cisj aWZkZWYgTkVXRlRQCisgICAgcmV0dXJuKGhtc2coIlN5bnRheDogUkVNT1RFIEhFTFBcblwKKyAg QXNrcyB0aGUgS2VybWl0IG9yIEZUUCBzZXJ2ZXIgdG8gbGlzdCB0aGUgc2VydmljZXMgaXQgcHJv dmlkZXMuXG5cCisgIFN5bm9ueW06IFJIRUxQLiIpKTsKKyNlbHNlCisgICAgcmV0dXJuKGhtc2co IlN5bnRheDogUkVNT1RFIEhFTFBcblwKKyAgQXNrcyB0aGUgS2VybWl0IHNlcnZlciB0byBsaXN0 IHRoZSBzZXJ2aWNlcyBpdCBwcm92aWRlcy5cblwKKyAgU3lub255bTogUkhFTFAuIikpOworI2Vu ZGlmIC8qIE5FV0ZUUCAqLworCitjYXNlIFhaSE9TOgorICAgIHJldHVybihobXNnKCJTeW50YXg6 IFJFTU9URSBIT1NUIGNvbW1hbmRcblwKKyAgU2VuZHMgYSBjb21tYW5kIHRvIHRoZSBvdGhlciBj b21wdXRlciBpbiBpdHMgb3duIGNvbW1hbmQgbGFuZ3VhZ2VcblwKKyAgdGhyb3VnaCB0aGUgS2Vy bWl0IHNlcnZlciB0aGF0IGlzIHJ1bm5pbmcgb24gdGhhdCBob3N0LiAgU3lub255bTogUkhPU1Qu IikpOworCisjaWZuZGVmIE5PRlJJTExTCitjYXNlIFhaS0VSOgorICAgIHJldHVybihobXNnKCJT eW50YXg6IFJFTU9URSBLRVJNSVQgY29tbWFuZFxuXAorICBTZW5kcyBhIGNvbW1hbmQgdG8gdGhl IHJlbW90ZSBLZXJtaXQgc2VydmVyIGluIGl0cyBvd24gY29tbWFuZCBsYW5ndWFnZS5cblwKKyAg U3lub255bTogUktFUk1JVC4iKSk7CisKK2Nhc2UgWFpMR0k6CisgICAgcmV0dXJuKGhtc2coIlN5 bnRheDogUkVNT1RFIExPR0lOIHVzZXIgcGFzc3dvcmQgWyBhY2NvdW50IF1cblwKKyAgTG9ncyBp biB0byBhIHJlbW90ZSBLZXJtaXQgc2VydmVyIHRoYXQgcmVxdWlyZXMgeW91IGxvZ2luLiAgTm90 ZTogUkxPR0lOXG5cCisgIGlzIE5PVCBhIHN5bm9ueW0gZm9yIFJFTU9URSBMT0dJTi4iKSk7CisK K2Nhc2UgWFpMR086CisgICAgcmV0dXJuKGhtc2coIlN5bnRheDogUkVNT1RFIExPR09VVFxuXAor ICBMb2dzIG91dCBmcm9tIGEgcmVtb3RlIEtlcm1pdCBzZXJ2ZXIgdG8gd2hpY2ggeW91IGhhdmUg cHJldmlvdXNseSBsb2dnZWQgaW4uIgorKSk7CisKK2Nhc2UgWFpNU0c6CisgICAgcmV0dXJuKGht c2coIlN5bnRheDogUkVNT1RFIE1FU1NBR0UgdGV4dFxuXAorICBTZW5kcyBhIHNob3J0IHRleHQg bWVzc2FnZSB0byB0aGUgcmVtb3RlIEtlcm1pdCBzZXJ2ZXIuIikpOworCitjYXNlIFhaUFJJOgor ICAgIHJldHVybihobXNnKCJTeW50YXg6IFJFTU9URSBQUklOVCBmaWxlc3BlYyBbIG9wdGlvbnMg XVxuXAorICBTZW5kcyB0aGUgc3BlY2lmaWVkIGZpbGUocykgdG8gdGhlIHJlbW90ZSBLZXJtaXQg YW5kIGFzayBpdCB0byBoYXZlIHRoZVxuXAorICBmaWxlIHByaW50ZWQgb24gdGhlIHJlbW90ZSBz eXN0ZW0ncyBwcmludGVyLCB1c2luZyBhbnkgc3BlY2lmaWVkIG9wdGlvbnMuXG5cCisgIFN5bm9u eW06IFJQUklOVC4iKSk7CisjZW5kaWYgLyogTk9GUklMTFMgKi8KKworY2FzZSBYWlJFTjoKKyNp ZmRlZiBORVdGVFAKKyAgICByZXR1cm4oaG1zZygiU3ludGF4OiBSRU1PVEUgUkVOQU1FIGZpbGVz cGVjIG5ld25hbWVcblwKKyAgQXNrcyB0aGUgS2VybWl0IG9yIEZUUCBzZXJ2ZXIgdG8gcmVuYW1l IHRoZSBmaWxlLiAgU3lub255bTogUlJFTkFNRS4iKSk7CisjZWxzZQorICAgIHJldHVybihobXNn KCJTeW50YXg6IFJFTU9URSBSRU5BTUUgZmlsZXNwZWMgbmV3bmFtZVxuXAorICBBc2tzIHRoZSBL ZXJtaXQgc2VydmVyIHRvIHJlbmFtZSB0aGUgZmlsZS4gIFN5bm9ueW06IFJSRU5BTUUuIikpOwor I2VuZGlmIC8qIE5FV0ZUUCAqLworCitjYXNlIFhaU0VUOgorICAgIHJldHVybihobXNnYShocnNl dCkpOworCitjYXNlIFhaU1BBOgorICAgIHJldHVybihobXNnKCJTeW50YXg6IFJFTU9URSBTUEFD RSBbIG5hbWUgXVxuXAorICBBc2tzIHRoZSBLZXJtaXQgc2VydmVyIHRvIHRlbGwgeW91IGFib3V0 IGl0cyBkaXNrIHNwYWNlIG9uIHRoZSBjdXJyZW50XG5cCisgIGRpc2sgb3IgZGlyZWN0b3J5LCBv ciBpbiB0aGUgb25lIHRoYXQgeW91IG5hbWUuICBTeW5vbnltOiBSU1BBQ0UuIikpOworCisjaWZu ZGVmIE5PRlJJTExTCitjYXNlIFhaVFlQOgorI2lmZGVmIE5FV0ZUUAorICAgIHJldHVybihobXNn KCJTeW50YXg6IFJFTU9URSBUWVBFIGZpbGVcblwKKyAgQXNrcyB0aGUgS2VybWl0IG9yIEZUUCBz ZXJ2ZXIgdG8gc2VuZCB0aGUgbmFtZWQgZmlsZSB0byB5b3VyIHNjcmVlbi5cblwKKyAgU3lub255 bTogUlRZUEUuIikpOworI2Vsc2UKKyAgICByZXR1cm4oaG1zZygiU3ludGF4OiBSRU1PVEUgVFlQ RSBmaWxlXG5cCisgIEFza3MgdGhlIEtlcm1pdCBzZXJ2ZXIgdG8gc2VuZCB0aGUgbmFtZWQgZmls ZShzKSB0byB5b3VyIHNjcmVlbi5cblwKKyAgU3lub255bTogUlRZUEUuIikpOworI2VuZGlmIC8q IE5FV0ZUUCAqLworCisKK2Nhc2UgWFpXSE86CisgICAgcmV0dXJuKGhtc2coIlN5bnRheDogUkVN T1RFIFdITyBbIG5hbWUgXVxuXAorICBBc2tzIHRoZSBLZXJtaXQgc2VydmVyIHRvIGxpc3Qgd2hv J3MgbG9nZ2VkIGluLCBvciB0byBnaXZlIGluZm9ybWF0aW9uXG5cCisgIGFib3V0IHRoZSBuYW1l ZCB1c2VyLiAgU3lub255bTogUldITy4iKSk7CisjZW5kaWYgLyogTk9GUklMTFMgKi8KKworI2lm bmRlZiBOT1NQTAorY2FzZSBYWlFVRToKKyAgICByZXR1cm4oaG1zZygKKyJTeW50YXg6IFsgUkVN T1RFIF0gUVVFUlkgeyBLRVJNSVQsIFNZU1RFTSwgVVNFUiB9IHZhcmlhYmxlLW5hbWVcblwKKyAg QXNrcyB0aGUgS2VybWl0IHNlcnZlciB0byBzZW5kIHRoZSB2YWx1ZSBvZiB0aGUgbmFtZWQgdmFy aWFibGUgb2YgdGhlXG5cCisgIGdpdmVuIHR5cGUsIGFuZCBtYWtlIGl0IGF2YWlsYWJsZSBpbiB0 aGUgXFx2KHF1ZXJ5KSB2YXJpYWJsZS4gIFdoZW4gdGhlXG5cCisgIHR5cGUgaXMgS0VSTUlUIGZ1 bmN0aW9ucyBtYXkgYWxzbyBiZSBzcGVjaWZpZWQgYXMgaWYgdGhleSB3ZXJlIHZhcmlhYmxlcy4i KSk7CisKK2Nhc2UgWFpBU0c6CisgICAgcmV0dXJuKGhtc2coCisiU3ludGF4OiBSRU1PVEUgQVNT SUdOIHZhcmlhYmxlLW5hbWUgWyB2YWx1ZSBdXG5cCisgIEFzc2lnbnMgdGhlIGdpdmVuIHZhbHVl IHRvIHRoZSBuYW1lZCBnbG9iYWwgdmFyaWFibGUgb24gdGhlIHNlcnZlci5cblwKKyAgU3lub255 bXM6IFJBU0csIFJBU1NJR04uIikpOworI2VuZGlmIC8qIE5PU1BMICovCisKK2Nhc2UgWFpQV0Q6 CisgICAgcmV0dXJuKGhtc2coCisjaWZkZWYgTkVXRlRQCisiU3ludGF4OiBSRU1PVEUgUFdEXG5c CisgIEFza3MgdGhlIEtlcm1pdCBzZXJ2ZXIgdG8gZGlzcGxheSBpdHMgY3VycmVudCB3b3JraW5n IGRpcmVjdG9yeS5cblwKKyAgU3lub255bTogUlBXRC4iKSk7CisjZWxzZQorIlN5bnRheDogUkVN T1RFIFBXRFxuXAorICBBc2tzIHRoZSBLZXJtaXQgb3IgRlRQIHNlcnZlciB0byBkaXNwbGF5IGl0 cyBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LlxuXAorICBTeW5vbnltOiBSUFdELiIpKTsKKyNl bmRpZiAvKiBORVdGVFAgKi8KKworY2FzZSBYWlhJVDoKKyNpZmRlZiBORVdGVFAKKyAgICByZXR1 cm4oaG1zZygiU3ludGF4OiBSRU1PVEUgRVhJVFxuXAorICAgQXNrcyB0aGUgS2VybWl0IHNlcnZl ciB0byBleGl0ICh3aXRob3V0IGRpc2Nvbm5lY3RpbmcpLCBvciBjbG9zZXMgYW4gRlRQXG5cCisg ICBjb25uZWN0aW9uLiAgU3lub255bTogUkVYSVQsIGFuZCAoZm9yIEZUUCBvbmx5KSBCWUUsIEZU UCBCWUUuIikpOworI2Vsc2UKKyAgICByZXR1cm4oaG1zZygiU3ludGF4OiBSRU1PVEUgRVhJVFxu XAorICBBc2tzIHRoZSBLZXJtaXQgc2VydmVyIHRvIGV4aXQuICBTeW5vbnltOiBSRVhJVC4iKSk7 CisjZW5kaWYgLyogTkVXRlRQICovCisKK2RlZmF1bHQ6CisgICAgaWYgKCh4ID0gY21jZm0oKSkg PCAwKSByZXR1cm4oeCk7CisgICAgcHJpbnRmKCI/U29ycnksIG5vIGhlbHAgYXZhaWxhYmxlIC0g XCIlc1wiXG4iLGNtZGJ1Zik7CisgICAgcmV0dXJuKC05KTsKKyAgICB9Cit9CisjZW5kaWYgLyog Tk9YRkVSICovCisjZW5kaWYgLyogTk9IRUxQICovCisjZW5kaWYgLyogTk9JQ1AgKi8KCmRpZmYg LS1naXQgYS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdXVzMy5jIGIv Y2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3V1czMuYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODg3YjM0Ci0tLSAvZGV2L251bGwKKysrIGIvY2tl cm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3V1czMuYwpAQCAtMCwwICsxLDEz NjI5IEBACisjaWZkZWYgU1NIVEVTVAorI2RlZmluZSBTU0hCVUlMVElOCisjZW5kaWYgLyogU1NI VEVTVCAqLworCisjaW5jbHVkZSAiY2tjc3ltLmgiICAgICAgICAgICAgICAgICAgICAgLyogU3lt Ym9sIGRlZmluaXRpb25zICovCisKKy8qICBDIEsgVSBVIFMgMyAtLSAgIlVzZXIgSW50ZXJmYWNl IiBmb3IgQy1LZXJtaXQsIHBhcnQgMyAgKi8KKworLyoKKyAgQXV0aG9yczoKKyAgICBGcmFuayBk YSBDcnV6IDxmZGNAY29sdW1iaWEuZWR1PiwKKyAgICAgIFRoZSBLZXJtaXQgUHJvamVjdCwgQ29s dW1iaWEgVW5pdmVyc2l0eSwgTmV3IFlvcmsgQ2l0eQorICAgIEplZmZyZXkgRSBBbHRtYW4gPGph bHRtYW5Ac2VjdXJlLWVuZHBvaW50cy5jb20+CisgICAgICBTZWN1cmUgRW5kcG9pbnRzIEluYy4s IE5ldyBZb3JrIENpdHkKKworICBDb3B5cmlnaHQgKEMpIDE5ODUsIDIwMTEsCisgICAgVHJ1c3Rl ZXMgb2YgQ29sdW1iaWEgVW5pdmVyc2l0eSBpbiB0aGUgQ2l0eSBvZiBOZXcgWW9yay4KKyAgICBB bGwgcmlnaHRzIHJlc2VydmVkLiAgU2VlIHRoZSBDLUtlcm1pdCBDT1BZSU5HLlRYVCBmaWxlIG9y IHRoZQorICAgIGNvcHlyaWdodCB0ZXh0IGluIHRoZSBja2NtYWkuYyBtb2R1bGUgZm9yIGRpc2Ns YWltZXIgYW5kIHBlcm1pc3Npb25zLgorKi8KKworLyogIFNFVCBjb21tYW5kIChidXQgbXVjaCBt YXRlcmlhbCBoYXMgYmVlbiBzcGxpdCBvZmYgaW50byBja3V1czcuYykuICovCisKKy8qCisgIEtl cm1pdC1zcGVjaWZpYyBpbmNsdWRlcy4KKyAgRGVmaW5pdGlvbnMgaGVyZSBzdXBlcnNlZGUgdGhv c2UgZnJvbSBzeXN0ZW0gaW5jbHVkZSBmaWxlcy4KKyovCisjaW5jbHVkZSAiY2tjZGViLmgiICAg ICAgICAgICAgICAgICAgICAgLyogRGVidWdnaW5nICYgY29tcGlsZXIgdGhpbmdzICovCisjaW5j bHVkZSAiY2tjYXNjLmgiICAgICAgICAgICAgICAgICAgICAgLyogQVNDSUkgY2hhcmFjdGVyIHN5 bWJvbHMgKi8KKyNpbmNsdWRlICJja2NrZXIuaCIgICAgICAgICAgICAgICAgICAgICAvKiBLZXJt aXQgYXBwbGljYXRpb24gZGVmaW5pdGlvbnMgKi8KKyNpbmNsdWRlICJja2N4bGEuaCIgICAgICAg ICAgICAgICAgICAgICAvKiBDaGFyYWN0ZXIgc2V0IHRyYW5zbGF0aW9uICovCisjaW5jbHVkZSAi Y2tjbmV0LmgiICAgICAgICAgICAgICAgICAgICAgLyogTmV0d29yayBzeW1ib2xzICovCisKK2No YXIgcHdidWZbUFdCVUZMKzFdICA9IHsgTlVMLCBOVUwgfTsKK2ludCBwd2ZsZyA9IDA7CitpbnQg cHdjcnlwdCA9IDA7CisKKyNpZm5kZWYgTk9JQ1AKKworI2lmZGVmIENLX0FVVEhFTlRJQ0FUSU9O CisjaW5jbHVkZSAiY2t1YXRoLmgiCisjZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJT04gKi8KKyNp ZmRlZiBDS19TU0wKKyNpbmNsdWRlICJja19zc2wuaCIKKyNlbmRpZiAvKiBDS19TU0wgKi8KKyNp bmNsdWRlICJja3V1c3IuaCIgICAgICAgICAgICAgICAgICAgICAvKiBVc2VyIGludGVyZmFjZSBz eW1ib2xzICovCisjaWZkZWYgT1MyCisjaW5jbHVkZSAiY2tjdW5pLmgiCisjaWZkZWYgU1NIQlVJ TFRJTgorI2luY2x1ZGUgImNrb3NzaC5oIgorI2VuZGlmIC8qIFNTSEJVSUxUSU4gKi8KKyNpZmRl ZiBDS19ORVRCSU9TCisjaW5jbHVkZSA8b3MyLmg+CisjaWZkZWYgQ09NTUVOVCAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogV291bGQgeW91IGJlbGlldmUgKi8KKyN1bmRlZiBDT01NRU5UICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiA8b3MyLmg+IGRlZmluZXMgdGhpcyA/ICovCisjZW5k aWYgLyogQ09NTUVOVCAqLworI2luY2x1ZGUgImNrb25iaS5oIgorZXh0ZXJuIFVDSEFSIE5ldEJp b3NBZGFwdGVyOworI2VuZGlmIC8qIENLX05FVEJJT1MgKi8KKyNpbmNsdWRlICJja29jb24uaCIK KyNpbmNsdWRlICJja29rZXkuaCIKKyNpZm5kZWYgTk9URVJNCitleHRlcm4gdW5zaWduZWQgY2hh ciBjb2xvcmNtZDsgIC8qIENvbW1hbmQtc2NyZWVuIGNvbG9ycyAqLworZXh0ZXJuIHN0cnVjdCBr ZXl0YWIgdHR5Y2xydGFiW107CitleHRlcm4gaW50IG5jbHJzOworZXh0ZXJuIGludCB0dF9jb2xz W10sIHR0X3Jvd3NbXSwgdHRfc3pjaG5nW10sIHR0X3N0YXR1c1tdOworI2VuZGlmIC8qIE5PVEVS TSAqLworX1BST1RPVFlQKGludCBzZXRwcnR5LCAodm9pZCkpOworZXh0ZXJuIGNoYXIgc3RhcnR1 cGRpcltdLCBleGVkaXJbXTsKK2V4dGVybiBpbnQgdHRfbW9kZWNoZzsKKyNpZmRlZiBOVAorI2lu Y2x1ZGUgPHdpbmRvd3MuaD4KKyNpbmNsdWRlIDx0YXBpLmg+CisjaW5jbHVkZSAiY2tudGFwLmgi ICAgICAgICAgICAgICAgICAgICAgLyogTWljcm9zb2Z0IFRBUEkgKi8KKyNlbmRpZiAvKiBOVCAq LworI2VuZGlmIC8qIE9TMiAqLworCisjaWZuZGVmIE9TMgorZXh0ZXJuIGNoYXIgKiBleGVkaXI7 CisjZW5kaWYgLyogT1MyICovCisKKyNpZmRlZiBDS19SRUNBTEwKK2V4dGVybiBpbnQgY21fcmV0 cnk7CisjZW5kaWYgLyogQ0tfUkVDQUxMICovCisKKyNpZmRlZiBORVdGVFAKK2V4dGVybiBpbnQg ZnRwaXNvcGVuKCk7CisjZW5kaWYgLyogTkVXRlRQICovCisKK2V4dGVybiBpbnQgY21kaW50Owor ZXh0ZXJuIGludCBzcnZpZGw7CisKKyNpZmRlZiBDS0ZMT0FUCitleHRlcm4gQ0tGTE9BVCBmbG9h dHZhbDsJCS8qIChzZWUgaXNmbG9hdCgpKSAqLworI2VuZGlmIC8qIENLRkxPQVQgKi8KKworI2lm bmRlZiBOT1BVU0gKKyNpZm5kZWYgTk9GUklMTFMKKyNpZmRlZiBWTVMKK2NoYXIgZWRpdG9yW0NL TUFYUEFUSCArIDFdID0gImVkaXQiOworI2Vsc2UKK2NoYXIgZWRpdG9yW0NLTUFYUEFUSCArIDFd ID0geyBOVUwsIE5VTCB9OworI2VuZGlmIC8qIFZNUyAqLworY2hhciBlZGl0b3B0c1sxMjhdID0g eyBOVUwsIE5VTCB9OworY2hhciBlZGl0ZmlsZVtDS01BWFBBVEggKyAxXSA9IHsgTlVMLCBOVUwg fTsKKyNpZmRlZiBCUk9XU0VSCitjaGFyIGJyb3dzZXJbQ0tNQVhQQVRIICsgMV0gPSB7IE5VTCwg TlVMIH07CitjaGFyIGJyb3dzb3B0c1sxMjhdID0geyBOVUwsIE5VTCB9OworY2hhciBicm93c3Vy bFs0MDk2XSA9IHsgTlVMLCBOVUwgfTsKKyNlbmRpZiAvKiBCUk9XU0VSICovCisjZW5kaWYgLyog IE5PRlJJTExTICovCisjZW5kaWYgLyogTk9QVVNIICovCisKKyNpZm5kZWYgTk9GUklMTFMKKyNp Zm5kZWYgTk9SRU5BTUUKK19QUk9UT1RZUChpbnQgc2V0cmVuYW1lLCAodm9pZCkpOworI2VuZGlm CS8qIE5PUkVOQU1FICovCisjZW5kaWYJLyogTk9GUklMTFMgKi8KKworLyogVmFyaWFibGVzICov CisKK2ludCBjbWRfcXVvdGluZyA9IDE7CitpbnQgY21kX2VyciA9IDE7CitleHRlcm4gaW50IGhp bnRzLCB4Y21kc3JjOworCisjaWZkZWYgQ0tfS0VSQkVST1MKK2NoYXIgKiBrNHB3cHJvbXB0ID0g TlVMTDsgICAgICAgICAgICAgICAvKiBLZXJiZXJvcyA0IHBhc3N3b3JkIHByb21wdCAqLworY2hh ciAqIGs0cHJwcm9tcHQgPSBOVUxMOyAgICAgICAgICAgICAgIC8qIEtlcmJlcm9zIDQgcHJpbmNp cGFsIHByb21wdCAqLworY2hhciAqIGs1cHdwcm9tcHQgPSBOVUxMOyAgICAgICAgICAgICAgIC8q IEtlcmJlcm9zIDUgcGFzc3dvcmQgcHJvbXB0ICovCitjaGFyICogazVwcnByb21wdCA9IE5VTEw7 ICAgICAgICAgICAgICAgLyogS2VyYmVyb3MgNSBwcmluY2lwYWwgcHJvbXB0ICovCisjZW5kaWYg LyogQ0tfS0VSQkVST1MgKi8KKyNpZmRlZiBDS19TUlAKK2NoYXIgKiBzcnBwd3Byb21wdCA9IE5V TEw7CisjZW5kaWYgLyogQ0tfU1JQICovCisKK2V4dGVybiBjaGFyICogY2twcm9tcHQsICogaWtw cm9tcHQ7ICAgICAvKiBEZWZhdWx0IHByb21wdCAqLworZXh0ZXJuIHh4X3N0cnAgeHhzdHJpbmc7 CisKK2V4dGVybiBjaGFyICogY2Rtc2dmaWxlW10sICogY2Rtc2dzdHI7CisKK2V4dGVybiBpbnQK KyAgbG9jYWwsIHNlcnZlciwgc3VjY2VzcywgZGVzdCwgc2xlZXBjYW4sIGluc2VydmVyLCBmbG93 LCBhdXRvZmxvdywgYmluYXJ5LAorICBwYXJpdHksIGVzY2FwZSwgd2hhdCwgdHVybiwgZHVwbGV4 LCBiYWNrZ3JkLCBod3Bhcml0eSwgc3RvcGJpdHMsIHR1cm5jaCwKKyAgbWRtdHlwLCBuZXR3b3Jr LCBxdWlldCwgbmV0dHlwZSwgY2FycmllciwgZGVic2VzLCBkZWJ0aW0sIGNkdGltbywgbmxhbmdz LAorICBiZ3NldCwgcGZsYWcsIG1zZ2ZsZywgY21kbXNrLCB4c3VzcGVuZCwgdGVjaG8sIHBhY2lu ZywgeGl0d2FybiwgeGl0c3RhLAorICBvdXRlc2MsIGNtZF9jb2xzLCBjbWRfcm93cywgY2t4ZWNo LCB4YXNrbW9yZSwgaGF2ZWxpbmUsIGRpZHNldGxpbiwgaXNndWVzdCwKKyAgbWRtc2F2LCBjbGVh cnJxLCBzYXZlYXNrLCBkZWJtc2c7CisKK2V4dGVybiBpbnQgcmVsaWFibGUsIHNldHJlbGlhYmxl LCBtYXRjaGRvdCwgbWF0Y2hmaWZvLCBkaXJfZG90czsKKworI2lmbmRlZiBOT1NFUlZFUgorICBl eHRlcm4gaW50IGVuX3ByaTsKKyNlbmRpZiAvKiBOT1NFUlZFUiAqLworCisjaWZkZWYgSUtTRENP TkYKK2V4dGVybiBpbnQgaWtzZGNmOworI2VuZGlmIC8qIElLU0RDT05GICovCisjaWZkZWYgVENQ U09DS0VUCisgIGV4dGVybiBpbnQgdG5fZXhpdDsKKyNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KKyNp ZmRlZiBUTkNPREUKKyAgY2hhciAqIHRuX3ByX3VpZCA9IE5VTEw7CisjZW5kaWYgLyogVE5DT0RF ICovCisgIGV4dGVybiBpbnQgZXhpdG9uY2xvc2U7CisKKyNpZm5kZWYgTk9LVkVSQlMKK2V4dGVy biBpbnQgbmt2ZXJiczsKK2V4dGVybiBzdHJ1Y3Qga2V5dGFiIGt2ZXJic1tdOworI2VuZGlmIC8q IE5PS1ZFUkJTICovCisKK2V4dGVybiBpbnQgdHRucHJvdG87ICAgICAgICAgICAgICAgICAgICAv KiBOZXR3b3JrIHByb3RvY29sICovCisKK2V4dGVybiBjaGFyICpjY250YWJbXTsgICAgICAgICAg ICAgICAgICAvKiBOYW1lcyBvZiBjb250cm9sIGNoYXJzICovCisKKyNpZmRlZiBDS19BUEMKK2V4 dGVybiBpbnQgYXBjYWN0aXZlLCBhcGNzdGF0dXM7CisjZW5kaWYgLyogQ0tfQVBDICovCisKKyNp Zm5kZWYgTk9TQ1JJUFQKK2V4dGVybiBpbnQgc2VjaG87ICAgICAgICAgICAgICAgICAgICAgICAv KiBXaGV0aGVyIFNDUklQVCBjbWQgc2hvdWxkIGVjaG8gKi8KKyNlbmRpZiAvKiBOT1NDUklQVCAq LworCisjaWZkZWYgRENNREJVRgorZXh0ZXJuIGNoYXIgKmF0bWJ1ZiwgKmF0eGJ1ZjsKKyNlbHNl CitleHRlcm4gY2hhciBhdG1idWZbXSwgYXR4YnVmW107CisjZW5kaWYgLyogRENNREJVRiAqLwor ZXh0ZXJuIGludCBjbWZsZ3M7CisKK2V4dGVybiBjaGFyIHBzYXZlW107CitleHRlcm4gY2hhciB1 aWRidWZbXTsKK2V4dGVybiBpbnQgIHNsX3VpZF9zYXZlZDsKK2ludCBEZWxldGVTdGFydHVwRmls ZSA9IDA7CisKK2V4dGVybiBpbnQgY21kbHZsOyAgICAgICAgICAgICAgICAgICAgICAvKiBPdmVy YWxsIGNvbW1hbmQgbGV2ZWwgKi8KKworI2lmbmRlZiBOT1NQTAorX1BST1RPVFlQKCBzdGF0aWMg aW50IHBhcnNkaXIsIChpbnQpICk7CitjaGFyIHBybWJ1ZltQV0JVRkwrMV0gPSB7IE5VTCwgTlVM IH07CitpbnQgZm5kaWFncyA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgLyogRnVuY3Rpb24g ZGlhZ25vc3RpY3Mgb24vb2ZmICovCitpbnQgZm5lcnJvciA9IDE7ICAgICAgICAgICAgICAgICAg ICAgICAgLyogRnVuY3Rpb24gZXJyb3IgdHJlYXRtZW50ICovCisKKyNpZmRlZiBEQ01EQlVGCitl eHRlcm4gaW50ICpjb3VudCwgKnRha2VyciwgKm1lcnJvciwgKmlucGNhczsKKyNlbHNlCitleHRl cm4gaW50IGNvdW50W10sIHRha2VycltdLCBtZXJyb3JbXSwgaW5wY2FzW107CisjZW5kaWYgLyog RENNREJVRiAqLworZXh0ZXJuIGludCBtZWNobzsgICAgICAgICAgICAgICAgICAgICAgIC8qIE1h Y3JvIGVjaG8gKi8KK2V4dGVybiBsb25nIGNrX2FsYXJtOworZXh0ZXJuIGNoYXIgYWxybV9kYXRl W10sIGFscm1fdGltZVtdOworI2Vsc2UKK2V4dGVybiBpbnQgdGFrZXJyW107CisjZW5kaWYgLyog Tk9TUEwgKi8KKworZXh0ZXJuIGludCB4X2lmbnVtOworZXh0ZXJuIGludCBiaWdzYnNpeiwgYmln cmJzaXo7ICAgICAgICAgIC8qIFBhY2tldCBidWZmZXJzICovCisKK2V4dGVybiBsb25nIHNwZWVk OyAgICAgICAgICAgICAgICAgICAgICAvKiBUZXJtaW5hbCBzcGVlZCAqLworCitleHRlcm4gY2hh ciB0dG5hbWVbXTsgICAgICAgICAgICAgICAgICAgLyogQ29tbXVuaWNhdGlvbiBkZXZpY2UgbmFt ZSAqLworZXh0ZXJuIGNoYXIgbXlob3N0W10gOworZXh0ZXJuIGNoYXIgaW5pZGlyW107ICAgICAg ICAgICAgICAgICAgIC8qIEluaSBGaWxlIGRpcmVjdG9yeSAqLworCisjaWZuZGVmIE5PU0VUS0VZ CitleHRlcm4gS0VZICprZXltYXA7ICAgICAgICAgICAgICAgICAgICAgLyogQ2hhcmFjdGVyIG1h cCBmb3IgU0VUIEtFWSAoMToxKSAgKi8KK2V4dGVybiBNQUNSTyAqbWFjcm90YWI7ICAgICAgICAg ICAgICAgICAvKiBNYWNybyBtYXAgZm9yIFNFVCBLRVkgKDE6c3RyaW5nKSAqLworI2VuZGlmIC8q IE5PU0VUS0VZICovCisjaWZkZWYgT1MyCitpbnQgd2lkZXJlc3VsdDsgICAgICAgICAgICAgICAg ICAgICAgICAgLyogRm9yIHdpZGUgT1MvMiBzY2FuIGNvZGVzL2NtbnVtKCkgKi8KKyNlbmRpZiAv KiBPUzIgKi8KKworI2lmbmRlZiBOT0xPQ0FMCisjaWZkZWYgT1MyCitleHRlcm4gaW50IHR0X3Nj cnNpemVbXTsgICAgICAgICAgICAgICAgLyogU2Nyb2xsYmFjayBidWZmZXIgU2l6ZXMgKi8KKyNl bmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBOT0xPQ0FMICovCisKKy8qIFByaW50ZXIgc2V0dGlu Z3MgKi8KKworZXh0ZXJuIGNoYXIgKiBwcmludGVybmFtZTsgICAgICAgICAgICAgIC8qIE5VTEwg aWYgcHJpbnRlciBub3QgcmVkaXJlY3RlZCAqLworZXh0ZXJuIGludCBwcmludHBpcGU7CitleHRl cm4gaW50IG5vcHJpbnRlcjsKKyNpZmRlZiBQUklOVFNXSQoraW50IHByaW50dGltbyA9IDA7Citj aGFyICogcHJpbnR0ZXJtID0gTlVMTDsKK2NoYXIgKiBwcmludHNlcCA9IE5VTEw7CitpbnQgcHJp bnRlcnR5cGUgPSAwOworI2lmZGVmIEJQUklOVAoraW50IHByaW50YmlkaSA9IDA7ICAgICAgICAg ICAgICAgICAgICAgIC8qIFNFVCBCUFJJTlRFUiAoYmlkaXJlY3Rpb25hbCkgKi8KK2xvbmcgcHBv cnRzcGVlZCA9IDBMOyAgICAgICAgICAgICAgICAgICAvKiBCaWRpcmVjdGlvbiBwcmludGVyIHBv cnQgc3BlZWQsICovCitpbnQgcHBvcnRwYXJpdHkgPSAwOyAgICAgICAgICAgICAgICAgICAgLyog IHBhcml0eSwgKi8KK2ludCBwcG9ydGZsb3cgPSBGTE9fS0VFUDsgICAgICAgICAgICAgICAvKiAg YW5kIGZsb3cgY29udHJvbCAqLworI2VuZGlmIC8qIEJQUklOVCAqLworI2lmZGVmIE9TMgorZXh0 ZXJuIGludCB0eHQycHM7ICAgICAgICAgICAgICAgICAgICAgIC8qIFRleHQyUFMgY29udmVyc2lv bj8gKi8KK2V4dGVybiBpbnQgcHNfd2lkdGgsIHBzX2xlbmd0aDsgICAgICAgICAvKiBUZXh0MlBT IGRpbWVuc2lvbnMgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBQUklOVFNXSSAqLwor CisjaWZkZWYgT1MyCitleHRlcm4gaW50IHRjcF9hdmFpbDsgICAgICAgICAgICAgICAgICAgLyog Tm9uemVybyBpZiBUQ1AvSVAgaXMgYXZhaWxhYmxlICovCisjaWZkZWYgREVDTkVUCitleHRlcm4g aW50IGRuZXRfYXZhaWw7ICAgICAgICAgICAgICAgICAgLyogRGl0dG8gZm9yIERFQ25ldCAqLwor I2VuZGlmIC8qIERFQ05FVCAqLworI2lmZGVmIFNVUEVSTEFUCitleHRlcm4gaW50IHNsYXRfYXZh aWw7CisjZW5kaWYgLyogU1VQRVJMQVQgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKworc3RhdGljIHN0 cnVjdCBrZXl0YWIgbG9naW50YWJbXSA9IHsKKyAgICB7ICJwYXNzd29yZCIsIExPR0lfUFNXLCBD TV9JTlYgfSwKKyAgICB7ICJwcm9tcHQiLCAgIExPR0lfUFJNLCBDTV9JTlYgfSwKKyAgICB7ICJ1 c2VyaWQiLCAgIExPR0lfVUlELCAwIH0KK307CisKKyNpZm5kZWYgTk9DU0VUUworLyogc3lzdGVt LWluZGVwZW5kZW50IGNoYXJhY3RlciBzZXRzLCBkZWZpbmVkIGluIGNrY3hsYS5bY2hdICovCitl eHRlcm4gc3RydWN0IGNzaW5mbyB0Y3NpbmZvW107CitleHRlcm4gc3RydWN0IGxhbmdpbmZvIGxh bmdzW107CisKKy8qIE90aGVyIGNoYXJhY3Rlci1zZXQgcmVsYXRlZCB2YXJpYWJsZXMgKi8KK2V4 dGVybiBpbnQgdGNoYXJzZXQsIHRzbGV2ZWwsIGxhbmd1YWdlOworI2VuZGlmIC8qIE5PQ1NFVFMg Ki8KKworLyogRmlsZS10cmFuc2ZlciB2YXJpYWJsZSBkZWNsYXJhdGlvbnMgKi8KKworI2lmbmRl ZiBOT1hGRVIKKyNpZmRlZiBDS19BVVRPREwKK2V4dGVybiBpbnQgY21kYWRsOworI2VuZGlmIC8q IENLX0FVVE9ETCAqLworCisjaWZuZGVmIE5PU0VSVkVSCitleHRlcm4gaW50IG5nZXRwYXRoOwor ZXh0ZXJuIGNoYXIgKiBnZXRwYXRoW107CisjZW5kaWYgLyogTk9TRVJWRVIgKi8KKworZXh0ZXJu IHN0cnVjdCBja19wIHB0YWJbXTsKKworZXh0ZXJuIENIQVIgc3N0YXRlOyAgICAgICAgICAgICAg ICAgICAgIC8qIFByb3RvY29sIHN0YXJ0IHN0YXRlICovCitleHRlcm4gQ0hBUiBteWN0bHE7ICAg ICAgICAgICAgICAgICAgICAgLyogQ29udHJvbC1jaGFyYWN0ZXIgcHJlZml4ICovCitleHRlcm4g Q0hBUiBteXJwdHE7ICAgICAgICAgICAgICAgICAgICAgLyogUmVwZWF0LWNvdW50IHByZWZpeCAq LworCitleHRlcm4gaW50IHByb3RvY29sLCBzaXplLCBzcHNpeiwgc3BtYXgsIHVycHNpeiwgc3J2 dGltLCBzcnZjZG1zZywgc2xvc3RhcnQsCisgIHNydmRpcywgeGZlcm1vZGUsIGNrZGVsYXksIGtl ZXAsIG1heHRyeSwgdW5rY3MsIGJjdHIsIGJjdGYsIGVicWZsZywgc3djYXByLAorICB3c2xvdHIs IGxzY2FwciwgbHNjYXB1LCBzcHNpenIsIHJwdGVuYSwgcnB0bWluLCBkb2NyYywgeGZyY2FuLCB4 ZnJjaHIsCisgIHhmcm51bSwgeGZyYmVsLCB4ZnJpbnQsIHNydnBpbmcsIGdfeGZlcm1vZGUsIHhm cnhsYTsKKworI2lmZGVmIFBJUEVTRU5ECitleHRlcm4gaW50IHVzZXBpcGVzOworI2VuZGlmIC8q IFBJUEVTRU5EICovCisKKyNpZmRlZiBDS1hYQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgICAv KiBET1VCTEUgLyBJR05PUkUgY2hhciB0YWJsZSAqLworZXh0ZXJuIGludCBkYmxmbGFnLCBpZ25m bGFnLCBkYmxjaGFyOworZXh0ZXJuIHNob3J0IGRibHRbXTsKKyNlbmRpZiAvKiBDS1hYQ0hBUiAq LworCisjaWZkZWYgQ0tfU1BFRUQKK2V4dGVybiBzaG9ydCBjdGxwW107ICAgICAgICAgICAgICAg ICAgICAvKiBDb250cm9sLXByZWZpeCB0YWJsZSAqLworZXh0ZXJuIGludCBwcmVmaXhpbmc7Citz dGF0aWMgc3RydWN0IGtleXRhYiBwZnh0YWJbXSA9IHsKKyAgICAiYWxsIiwgICAgICAgICBQWF9B TEwsIDAsCisgICAgImNhdXRpb3VzIiwgICAgUFhfQ0FVLCAwLAorICAgICJtaW5pbWFsIiwgICAg IFBYX1dJTCwgMCwKKyAgICAibm9uZSIsICAgICAgICBQWF9OT04sIDAKK307CisjZW5kaWYgLyog Q0tfU1BFRUQgKi8KKyNlbmRpZiAvKiBOT1hGRVIgKi8KKworLyogRGVjbGFyYXRpb25zIGZyb20g Y21kIHBhY2thZ2UgKi8KKworI2lmZGVmIERDTURCVUYKK2V4dGVybiBjaGFyICpjbWRidWY7ICAg ICAgICAgICAgICAgICAgICAvKiBDb21tYW5kIGJ1ZmZlciAqLworZXh0ZXJuIGNoYXIgKmxpbmU7 CitleHRlcm4gY2hhciAqdG1wYnVmOworI2Vsc2UKK2V4dGVybiBjaGFyIGNtZGJ1ZltdOyAgICAg ICAgICAgICAgICAgICAvKiBDb21tYW5kIGJ1ZmZlciAqLworZXh0ZXJuIGNoYXIgbGluZVtdOyAg ICAgICAgICAgICAgICAgICAgIC8qIENoYXJhY3RlciBidWZmZXIgZm9yIGFueXRoaW5nICovCitl eHRlcm4gY2hhciB0bXBidWZbXTsKKyNlbmRpZiAvKiBEQ01EQlVGICovCisKKy8qIEZyb20gbWFp biBja3VzZXIgbW9kdWxlLi4uICovCisKK2V4dGVybiBjaGFyICp0cCwgKmxwOyAgICAgICAgICAg ICAgICAgICAvKiBUZW1wb3JhcnkgYnVmZmVyICovCisKK2V4dGVybiBpbnQgdGxldmVsOyAgICAg ICAgICAgICAgICAgICAgICAvKiBUYWtlIENvbW1hbmQgZmlsZSBsZXZlbCAqLworCisjaWZuZGVm IE5PTE9DQUwKK2V4dGVybiBpbnQgc2Vzc2Z0OyAgICAgICAgICAgICAgICAgICAgICAvKiBTZXNz aW9uLWxvZyBmaWxlIHR5cGUgKi8KK2V4dGVybiBpbnQgc2xvZ3RzOyAgICAgICAgICAgICAgICAg ICAgICAvKiBTZXNzaW9uLWxvZyB0aW1lc3RhbXBzIG9uL29mZiAqLworZXh0ZXJuIGludCBzbG9n bnVsOwkJCS8qIExpbmVzIG51bGwtdGVybWluYXRlZCAqLworI2VuZGlmIC8qIE5PTE9DQUwgKi8K KworY2hhciAqIHRlbXBkaXIgPSBOVUxMOworCisjaWZkZWYgVk1TCitpbnQgdm1zX21zZ3MgPSAx OyAgICAgICAgICAgICAgICAgICAgICAgLyogU0VUIE1FU1NBR0VTICovCitleHRlcm4gaW50IGJh dGNoOworI2VuZGlmIC8qIFZNUyAqLworCisvKiBLZXl3b3JkIHRhYmxlcyBmb3IgU0VUIGNvbW1h bmRzICovCisKKyNpZmRlZiBDS19TUEVFRAorc3RydWN0IGtleXRhYiBjdGx0YWJbXSA9IHsKKyAg ICAicHJlZml4ZWQiLCAgIDEsIDAsICAgICAgICAgICAgICAgICAvKiBOb3RlLCB0aGUgdmFsdWVz IGFyZSBpbXBvcnRhbnQuICovCisgICAgInVucHJlZml4ZWQiLCAwLCAwCit9OworI2VuZGlmIC8q IENLX1NQRUVEICovCisKK3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIG9sZG5ld1tdID0geworICAgICJu ZXciLCAwLCAwLAorICAgICJvbGQiLCAxLCAwCit9OworCisjZGVmaW5lIE1DSF9GSUZPIDEKKyNk ZWZpbmUgTUNIX0RPVEYgMgorc3RydWN0IGtleXRhYiBtYXRjaHRhYltdID0geworICAgIHsgImRv dGZpbGUiLCBNQ0hfRE9URiwgMCB9LAorICAgIHsgImZpZm8iLCAgICBNQ0hfRklGTywgMCB9Cit9 OworaW50IG5tYXRjaHRhYiA9IChzaXplb2YobWF0Y2h0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0 YWIpKTsKKworI2lmbmRlZiBOT1NQTAorc3RhdGljIHN0cnVjdCBrZXl0YWIgZnVuY3RhYltdID0g eworICAgICJkaWFnbm9zdGljcyIsIEZVTkNfREksIDAsCisgICAgImVycm9yIiwgICAgICAgRlVO Q19FUiwgMAorfTsKK3N0YXRpYyBpbnQgbmZ1bmN0YWIgPSAoc2l6ZW9mKGZ1bmN0YWIpIC8gc2l6 ZW9mKHN0cnVjdCBrZXl0YWIpKTsKKworc3RydWN0IGtleXRhYiBvdXRwdGFiW10gPSB7ICAgICAg ICAgICAgIC8qIFNFVCBPVVRQVVQgcGFyYW1ldGVycyAqLworICAgICJwYWNpbmciLCAwLCAwLCAg ICAgICAgICAgICAgICAgICAgIC8qIG9ubHkgb25lIHNvIGZhci4uLiAqLworICAgICJzcGVjaWFs LWVzY2FwZXMiLCAxLCAwCit9OworaW50IG5vdXRwdGFiID0gKHNpemVvZihvdXRwdGFiKSAvIHNp emVvZihzdHJ1Y3Qga2V5dGFiKSk7IC8qIEhvdyBtYW55ICovCisjZW5kaWYgLyogTk9TUEwgKi8K Kworc3RydWN0IGtleXRhYiBjaGt0YWJbXSA9IHsgICAgICAgICAgICAgIC8qIEJsb2NrIGNoZWNr IHR5cGVzICovCisgICAgIjEiLCAxLCAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMSA9 ICA2LWJpdCBjaGVja3N1bSAqLworICAgICIyIiwgMiwgMCwgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIDIgPSAxMi1iaXQgY2hlY2tzdW0gKi8KKyAgICAiMyIsIDMsIDAsICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiAzID0gMTYtYml0IENSQyAqLworICAgICI0IiwgNCwgMCwJCQkJLyog U2FtZSBhcyBCICovCisgICAgIjUiLCA1LCAwLAkJCQkvKiBTYW1lIGFzIEYgKi8KKyAgICAiYmxh bmstZnJlZS0yIiwgNCwgQ01fSU5WLAkJLyogQiA9IDEyLWJpdCBjaGVja3N1bSwgbm8gYmxhbmtz ICovCisgICAgImZvcmNlLTMiLCA1LCBDTV9JTlYJCS8qIEYgPSBGb3JjZSBDUkMgb24gQUxMIHBh Y2tldHMgKi8KK307CitzdGF0aWMgaW50IG5jaGt0ID0gKHNpemVvZihjaGt0YWIpIC8gc2l6ZW9m KHN0cnVjdCBrZXl0YWIpKTsKKworc3RydWN0IGtleXRhYiBycHR0YWJbXSA9IHsgICAgICAgICAg ICAgIC8qIFNFVCBSRVBFQVQgKi8KKyAgICAiY291bnRzIiwgICAgMCwgMCwgICAgICAgICAgICAg ICAgICAvKiBPbiBvciBPZmYgKi8KKyNpZmRlZiBDT01NRU5UCisgICAgIm1pbmltdW0iLCAgIDEs IDAsICAgICAgICAgICAgICAgICAgLyogVGhyZXNoaG9sZCAqLworI2VuZGlmIC8qIENPTU1FTlQg Ki8KKyAgICAicHJlZml4IiwgICAgMiwgMCAgICAgICAgICAgICAgICAgICAvKiBSZXBlYXQtcHJl Zml4IGNoYXJhY3RlciB2YWx1ZSAqLworfTsKKworI2lmbmRlZiBOT0xPQ0FMCisvKiBGb3IgU0VU IFsgTU9ERU0gXSBDQVJSSUVSLCBhbmQgYWxzbyBmb3IgU0VUIERJQUwgQ09OTkVDVCAqLworCitz dHJ1Y3Qga2V5dGFiIGNycnRhYltdID0geworICAgICJhdXRvbWF0aWMiLCBDQVJfQVVULCAwLCAg ICAgICAgICAgIC8qIDIgKi8KKyAgICAib2ZmIiwgICAgICAgQ0FSX09GRiwgMCwgICAgICAgICAg ICAvKiAwICovCisgICAgIm9uIiwgICAgICAgIENBUl9PTiwgIDAgICAgICAgICAgICAgLyogMSAq LworfTsKK2ludCBuY3JyID0gMzsKKyNlbmRpZiAvKiBOT0xPQ0FMICovCisKK3N0cnVjdCBrZXl0 YWIgb29hdGFiW10gPSB7ICAgICAgICAgICAgICAvKiBPbi9PZmYvQXV0byB0YWJsZSAqLworICAg ICJhdXRvbWF0aWMiLCBTRVRfQVVUTywgMCwgICAgICAgICAgIC8qIDIgKi8KKyAgICAib2ZmIiwg ICAgICAgU0VUX09GRiwgIDAsICAgICAgICAgICAvKiAwICovCisgICAgIm9uIiwgICAgICAgIFNF VF9PTiwgICAwICAgICAgICAgICAgLyogMSAqLworfTsKKworc3RydWN0IGtleXRhYiBvb2V0YWJb XSA9IHsgICAgICAgICAgICAgIC8qIE9uL09mZi9TdGRlcnIgdGFibGUgMjAxMC8wMy8xMiAqLwor ICAgICJvZmYiLCAgICAgICBTRVRfT0ZGLCAwLAkJLyogZm9yIFNFVCBERUJVRyBNRVNTQUdFUyAq LworICAgICJvbiIsICAgICAgICBTRVRfT04sICAwLAorICAgICJzIiwgICAgICAgICAyLCAgICAg ICBDTV9BQlJ8Q01fSU5WLAorICAgICJzdCIsICAgICAgICAyLCAgICAgICBDTV9BQlJ8Q01fSU5W LAorICAgICJzdGQiLCAgICAgICAyLCAgICAgICBDTV9BQlJ8Q01fSU5WLAorICAgICJzdGRlcnIi LCAgICAyLCAgICAgICAwLAorICAgICJzdGRvdXQiLCAgICBTRVRfT04sICBDTV9JTlYKK307Citz dGF0aWMgaW50IG5vb2V0YWIgPSAoc2l6ZW9mKG9vZXRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRh YikpOworCitzdHJ1Y3Qga2V5dGFiIG9va3RhYltdID0geyAgICAgICAgICAgICAgLyogT24vT2Zm L0FzayB0YWJsZSAqLworICAgICJhc2siLCAgICAgICAyLCAgICAgICAgMCwgICAgICAgICAgIC8q IDIgKi8KKyAgICAib2ZmIiwgICAgICAgU0VUX09GRiwgIDAsICAgICAgICAgICAvKiAwICovCisg ICAgIm9uIiwgICAgICAgIFNFVF9PTiwgICAwICAgICAgICAgICAgLyogMSAqLworfTsKKworc3Ry dWN0IGtleXRhYiBxdnRhYltdID0geyAgICAgICAgICAgICAgIC8qIFF1aWV0L1ZlcmJvc2UgdGFi bGUgKi8KKyAgICAicXVpZXQiLCAxLCAwLAorICAgICJ2ZXJib3NlIiwgMCwgMAorfTsKK2ludCBu cXZ0ID0gMjsKKworLyogRm9yIFNFVCBERUJVRyAqLworCisjZGVmaW5lIERFQl9PRkYgIDAKKyNk ZWZpbmUgREVCX09OICAgMQorI2RlZmluZSBERUJfU0VTICAyCisjZGVmaW5lIERFQl9USU0gIDMK KyNkZWZpbmUgREVCX0xFTiAgNAorI2RlZmluZSBERUJfTVNHICA1CisKK3N0cnVjdCBrZXl0YWIg ZGJndGFiW10gPSB7CisgICAgImxpbmVsZW5ndGgiLCBERUJfTEVOLCBDTV9JTlYsCisgICAgIm0i LCAgICAgICAgICBERUJfTVNHLCBDTV9BQlJ8Q01fSU5WLAorICAgICJtZXNzYWdlIiwgICAgREVC X01TRywgMCwKKyAgICAibXNnIiwgICAgICAgIERFQl9NU0csIENNX0lOViwKKyAgICAib2ZmIiwg ICAgICAgIERFQl9PRkYsIDAsCisgICAgIm9uIiwgICAgICAgICBERUJfT04sICAwLAorICAgICJz ZXNzaW9uIiwgICAgREVCX1NFUywgMCwKKyAgICAidGltZXN0YW1wcyIsIERFQl9USU0sIDAKK307 CitpbnQgbmRiZyA9IChzaXplb2YoZGJndGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7CisK KyNpZm5kZWYgTk9MT0NBTAorLyogVHJhbnNtaXNzaW9uIHNwZWVkcyAqLworCisjaWZkZWYgVFRT UERMSVNUIC8qIFNwZWVkIHRhYmxlIGNvbnN0cnVjdGVkIGF0IHJ1bnRpbWUgLiAuIC4gKi8KKwor c3RydWN0IGtleXRhYiAqIHNwZHRhYiA9IE5VTEw7CitpbnQgbnNwZCA9IDA7CisKKyNlbHNlCisv KgorICBOb3RlLCB0aGUgdmFsdWVzIGFyZSBlbmNvZGVkIGluIGNwcyByYXRoZXIgdGhhbiBicHMg YmVjYXVzZSAxOTIwMCBhbmQgaGlnaGVyCisgIGFyZSB0b28gYmlnIGZvciBzb21lIGludHMuICBB bGwgYnV0IDc1YnBzIGFyZSBtdWx0aXBsZXMgb2YgdGVuLiAgUmVzdWx0IG9mCisgIGxvb2t1cCBp biB0aGlzIHRhYmxlIG11c3QgYmUgbXVsdGlwbGllZCBieSAxMCB0byBnZXQgYWN0dWFsIHNwZWVk IGluIGJwcy4KKyAgSWYgdGhpcyBudW1iZXIgaXMgNzAsIGl0IG11c3QgYmUgY2hhbmdlZCB0byA3 NS4gIElmIGl0IGlzIDg4OCwgdGhpcyBtZWFucworICA3NS8xMjAwIHNwbGl0IHNwZWVkLgorCisg IFRoZSB2YWx1ZXMgYXJlIGdlbmVyaWMsIHJhdGhlciB0aGFuIHNwZWNpZmljIHRvIFVOSVguICBX ZSBjYW4ndCB1c2UgQjc1LAorICBCMTIwMCwgQjk2MDAsIGV0YywgYmVjYXVzZSBub24tVU5JWCB2 ZXJzaW9ucyBvZiBDLUtlcm1pdCB3aWxsIG5vdAorICBuZWNlc3NhcmlseSBoYXZlIHRoZXNlIHN5 bWJvbHMgZGVmaW5lZC4gIFRoZSBCUFNfeHh4IHN5bWJvbHMgYXJlCisgIEtlcm1pdC1zcGVjaWZp YywgYW5kIGFyZSBkZWZpbmVkIGluIGNrY2RlYi5oIG9yIG9uIHRoZSBDQyBjb21tYW5kIGxpbmUu CisKKyAgTGlrZSBhbGwgb3RoZXIga2V5dGFicywgdGhpcyBvbmUgbXVzdCBiZSBpbiAiYWxwaGFi ZXRpY2FsIiBvcmRlciwKKyAgcmF0aGVyIHRoYW4gbnVtZXJpYyBvcmRlci4KKyovCitzdHJ1Y3Qg a2V5dGFiIHNwZHRhYltdID0geworICAgICIwIiwgICAgICAwLCAgQ01fSU5WLAorICAgICIxMTAi LCAgIDExLCAgMCwKKyNpZmRlZiBCUFNfMTE1SworICIxMTUyMDAiLDExNTIwLCAgMCwKKyNlbmRp ZiAvKiBCUFNfMTE1SyAqLworICAiMTIwMCIsICAgMTIwLCAgMCwKKyNpZmRlZiBCUFNfMTM0Cisg ICIxMzQuNSIsICAxMzQsICAwLAorI2VuZGlmIC8qIEJQU18xMzQgKi8KKyNpZmRlZiBCUFNfMTRL CisgICIxNDQwMCIsIDE0NDAsICAwLAorI2VuZGlmIC8qIEJQU18xNEsgKi8KKyNpZmRlZiBCUFNf MTUwCisgICIxNTAiLCAgICAgMTUsICAwLAorI2VuZGlmIC8qIEJQU18xNTAgKi8KKyNpZmRlZiBC UFNfMTgwMAorICAiMTgwMCIsICAgICAxODAsICAwLAorI2VuZGlmIC8qIEJQU18xNTAgKi8KKyNp ZmRlZiBCUFNfMTlLCisgICIxOTIwMCIsIDE5MjAsICAwLAorI2VuZGlmIC8qIEJQU18xOUsgKi8K KyNpZmRlZiBCUFNfMjAwCisgICIyMDAiLCAgICAgMjAsICAwLAorI2VuZGlmIC8qIEJQU18yMDAg Ki8KKyNpZmRlZiBCUFNfMjMwSworICAiMjMwNDAwIiwgMjMwNDAsIDAsCisjZW5kaWYgLyogQlBT XzIzMEsgKi8KKyAgIjI0MDAiLCAgIDI0MCwgIDAsCisjaWZkZWYgQlBTXzI4SworICAiMjg4MDAi LCAyODgwLCAgMCwKKyNlbmRpZiAvKiBCUFNfMjhLICovCisgICIzMDAiLCAgICAgMzAsICAwLAor I2lmZGVmIEJQU18zNjAwCisgICIzNjAwIiwgICAzNjAsICAwLAorI2VuZGlmIC8qIEJQU18zNjAw ICovCisjaWZkZWYgQlBTXzM4SworICAiMzg0MDAiLCAzODQwLCAgMCwKKyNlbmRpZiAvKiBCUFNf MzhLICovCisjaWZkZWYgQlBTXzQ2MEsKKyAgIjQ2MDgwMCIsIDQ2MDgwLCAgMCwgICAgICAgICAg ICAgICAgICAvKiBOZWVkIDMyIGJpdHMgZm9yIHRoaXMuLi4gKi8KKyNlbmRpZiAvKiBCUFNfNDYw SyAqLworICAiNDgwMCIsICAgNDgwLCAgMCwKKyNpZmRlZiBCUFNfNTAKKyAgIjUwIiwgICAgICAg NSwgIDAsCisjZW5kaWYgLyogQlBTXzUwICovCisjaWZkZWYgQlBTXzU3SworICAiNTc2MDAiLCA1 NzYwLCAgMCwKKyNlbmRpZiAvKiBCUFNfNTdLICovCisgICI2MDAiLCAgICAgNjAsICAwLAorI2lm ZGVmIEJQU183MjAwCisgICI3MjAwIiwgICA3MjAsICAwLAorI2VuZGlmIC8qIEJQU183MjAwICov CisjaWZkZWYgQlBTXzc1CisgICI3NSIsICAgICAgIDcsICAwLAorI2VuZGlmIC8qIEJQU183NSAq LworI2lmZGVmIEJQU183NTEyCisgICI3NS8xMjAwIiw4ODgsICAwLCAgICAgICAgICAgICAgICAg ICAgLyogQ29kZSAiODg4IiBmb3Igc3BsaXQgc3BlZWQgKi8KKyNlbmRpZiAvKiBCUFNfNzUxMiAq LworI2lmZGVmIEJQU183NksKKyAgIjc2ODAwIiwgNzY4MCwgIDAsCisjZW5kaWYgLyogQlBTXzc2 SyAqLworI2lmZGVmIEJQU185MjFLCisgICI5MjE2MDAiLCA5MjE2MCwwLCAgICAgICAgICAgICAg ICAgICAgLyogTmVlZCAzMiBiaXRzIGZvciB0aGlzLi4uICovCisjZW5kaWYgLyogQlBTXzkyMUsg Ki8KKyAgIjk2MDAiLCAgIDk2MCwgIDAKK307CitpbnQgbnNwZCA9IChzaXplb2Yoc3BkdGFiKSAv IHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7IC8qIEhvdyBtYW55IHNwZWVkcyAqLworI2VuZGlmIC8q IFRUU1BETElTVCAqLworCisjaWZkZWYgVE5fQ09NUE9SVAorc3RydWN0IGtleXRhYiB0bnNwZHRh YltdID0geyAgICAgICAgICAgIC8qIFJGQyAyMjE3IFRFTE5FVCBDT01QT1JUIE9wdGlvbiAqLwor ICAgICIxMTUyMDAiLCAxMTUyMCwgIDAsICAgICAgICAgICAgICAgIC8qIChhZGQgYW55IG90aGVy IGRlZmluZWQgc3BlZWRzKSAqLworICAgICIxMjAwIiwgICAgIDEyMCwgIDAsCisgICAgIjE0NDAw IiwgICAxNDQwLCAgMCwKKyAgICAiMTkyMDAiLCAgIDE5MjAsICAwLAorICAgICIyMzA0MDAiLCAy MzA0MCwgIDAsCisgICAgIjI0MDAiLCAgICAgMjQwLCAgMCwKKyAgICAiMjg4MDAiLCAgIDI4ODAs ICAwLAorICAgICIzMDAiLCAgICAgICAzMCwgIDAsCisgICAgIjM4NDAwIiwgICAzODQwLCAgMCwK KyAgICAiNDYwODAwIiwgNDYwODAsICAwLAorICAgICI0ODAwIiwgICAgIDQ4MCwgIDAsCisgICAg IjU3NjAwIiwgICA1NzYwLCAgMCwKKyAgICAiNjAwIiwgICAgICAgNjAsICAwLAorICAgICI5NjAw IiwgICAgIDk2MCwgIDAKK307CitpbnQgbnRuc3BkID0gKHNpemVvZih0bnNwZHRhYikgLyBzaXpl b2Yoc3RydWN0IGtleXRhYikpOyAvKiBIb3cgbWFueSBzcGVlZHMgKi8KKyNlbmRpZiAvKiBUTl9D T01QT1JUICovCisjZW5kaWYgLyogTk9MT0NBTCAqLworCisjaWZuZGVmIE5PQ1NFVFMKK2V4dGVy biBzdHJ1Y3Qga2V5dGFiIGxuZ3RhYltdOyAgICAgICAgICAvKiBMYW5ndWFnZXMgZm9yIFNFVCBM QU5HVUFHRSAqLworZXh0ZXJuIGludCBubG5nOworI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKworI2lm bmRlZiBOT0xPQ0FMCisvKiBEdXBsZXgga2V5d29yZCB0YWJsZSAqLworCitzdHJ1Y3Qga2V5dGFi IGRweHRhYltdID0geworICAgICJmdWxsIiwgICAgICAwLCAwLAorICAgICJoYWxmIiwgICAgICAx LCAwCit9OworI2VuZGlmIC8qIE5PTE9DQUwgKi8KKworLyogRmxvdyBDb250cm9sICovCisKK3N0 cnVjdCBrZXl0YWIgY3h0eXBlc3dbXSA9IHsKKyNpZmRlZiBERUNORVQKKyAgICAiL2RlY25ldCIs ICAgICAgICAgQ1hUX0RFQ05FVCwgIDAsCisjZW5kaWYgLyogREVDTkVUICovCisgICAgIi9kaXJl Y3Qtc2VyaWFsIiwgIENYVF9ESVJFQ1QsICAwLAorI2lmZGVmIERFQ05FVAorICAgICIvbGF0Iiwg ICAgICAgICAgICBDWFRfTEFULCAgICAgMCwKKyNlbHNlCisjaWZkZWYgU1VQRVJMQVQKKyAgICAi L2xhdCIsICAgICAgICAgICAgQ1hUX0xBVCwgICAgIDAsCisjZW5kaWYgLyogU1VQRVJMQVQgKi8K KyNlbmRpZiAvKiBERUNORVQgKi8KKyAgICAiL21vZGVtIiwgICAgICAgICAgQ1hUX01PREVNLCAg IDAsCisjaWZkZWYgTlBJUEUKKyAgICAiL25hbWVkLXBpcGUiLCAgICAgQ1hUX05QSVBFLCAgIDAs CisjZW5kaWYgLyogTlBJUEUgKi8KKyNpZmRlZiBORVRCSU9TCisgICAgIi9uZXRiaW9zIiwgICAg ICAgIENYVF9ORVRCSU9TLCAwLAorI2VuZGlmIC8qIE5FVEJJT1MgKi8KKyAgICAiL3JlbW90ZSIs ICAgICAgICAgQ1hUX1JFTU9URSwgIDAsCisjaWZkZWYgVENQU09DS0VUCisgICAgIi90Y3BpcCIs ICAgICAgICAgIENYVF9UQ1BJUCwgICAwLAorI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLworI2lmZGVm IEFOWVgyNQorICAgICIveC4yNSIsICAgICAgICAgICBDWFRfWDI1LCAgICAgMCwKKyNlbmRpZiAv KiBBTllYMjUgKi8KKyAgICAiIiwgMCwgMAorfTsKK2ludCBuY3h0eXBlc3cgPSAoc2l6ZW9mKGN4 dHlwZXN3KSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7CisKKyNpZmRlZiBUTl9DT01QT1JUCitz dHJ1Y3Qga2V5dGFiIHRuZmxvdGFiW10gPSB7ICAgICAgICAgICAgLyogU0VUIEZMT1ctQ09OVFJP TCBrZXl3b3JkIHRhYmxlICovCisgICAgImR0ci9jZCIsICAgIEZMT19EVFJDLCAwLCAgICAgICAg ICAgLyogZm9yIFJGQyAyMjE3IFRlbG5ldCBDT01QT1JUICovCisgICAgImR0ci9jdHMiLCAgIEZM T19EVFJULCAwLAorICAgICJrZWVwIiwgICAgICBGTE9fS0VFUCwgMCwKKyAgICAibm9uZSIsICAg ICAgRkxPX05PTkUsIDAsCisgICAgInJ0cy9jdHMiLCAgIEZMT19SVFNDLCAwLAorICAgICJ4b24v eG9mZiIsICBGTE9fWE9OWCwgMAorfTsKK2ludCBudG5mbG8gPSAoc2l6ZW9mKHRuZmxvdGFiKSAv IHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7CisjZW5kaWYgLyogVE5fQ09NUE9SVCAqLworCitzdHJ1 Y3Qga2V5dGFiIGZsb3RhYltdID0geyAgICAgICAgICAgICAgLyogU0VUIEZMT1ctQ09OVFJPTCBr ZXl3b3JkIHRhYmxlICovCisgICAgImF1dG9tYXRpYyIsIEZMT19BVVRPLCBDTV9JTlYsICAgICAg LyogTm90IG5lZWRlZCBhbnkgbW9yZSAqLworI2lmZGVmIENLX0RUUkNECisgICAgImR0ci9jZCIs ICAgIEZMT19EVFJDLCAwLAorI2VuZGlmIC8qIENLX0RUUkNEICovCisjaWZkZWYgQ0tfRFRSQ1RT CisgICAgImR0ci9jdHMiLCAgIEZMT19EVFJULCAwLAorI2VuZGlmIC8qIENLX0RUUkNUUyAqLwor ICAgICJrZWVwIiwgICAgICBGTE9fS0VFUCwgMCwKKyAgICAibm9uZSIsICAgICAgRkxPX05PTkUs IDAsCisjaWZkZWYgQ0tfUlRTQ1RTCisgICAgInJ0cy9jdHMiLCAgIEZMT19SVFNDLCAwLAorI2Vu ZGlmIC8qIENLX1JUU0NUUyAqLworI2lmbmRlZiBQbGFuOQorICAgICJ4b24veG9mZiIsICBGTE9f WE9OWCwgMCwKKyNlbmRpZiAvKiBQbGFuOSAqLworICAgICIiLCAwLCAwCit9OworaW50IG5mbG8g PSAoc2l6ZW9mKGZsb3RhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpIC0gMTsKKworLyogIEhh bmRzaGFrZSBjaGFyYWN0ZXJzICAqLworCitzdHJ1Y3Qga2V5dGFiIGhzaHRhYltdID0geworICAg ICJiZWxsIiwgMDA3LCAwLAorICAgICJjb2RlIiwgOTk4LCAwLAorICAgICJjciIsICAgMDE1LCAw LAorICAgICJlc2MiLCAgMDMzLCAwLAorICAgICJsZiIsICAgMDEyLCAwLAorICAgICJub25lIiwg OTk5LCAwLCAgICAgICAgICAgICAgICAgICAgIC8qIChjYW4ndCB1c2UgbmVnYXRpdmUgbnVtYmVy cykgKi8KKyAgICAieG9mZiIsIDAyMywgMCwKKyAgICAieG9uIiwgIDAyMSwgMAorfTsKK2ludCBu aHNoID0gKHNpemVvZihoc2h0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKKworI2lmbmRl ZiBOT0xPQ0FMCitzdGF0aWMgc3RydWN0IGtleXRhYiBzZnR0YWJbXSA9IHsgICAgICAgLyogRmls ZSB0eXBlcyBmb3IgU0VUIFNFU1NJT04tTE9HICovCisgICAgImFzY2lpIiwgICAgIFhZRlRfVCwg Q01fSU5WLAorICAgICJiaW5hcnkiLCAgICBYWUZUX0IsIDAsCisgICAgImRlYnVnIiwgICAgIFhZ RlRfRCwgMCwKKyAgICAibnVsbC1wYWRkZWQtbGluZXMiLCA5OTgsIDAsCisgICAgInRleHQiLCAg ICAgIFhZRlRfVCwgMCwKKyAgICAidGltZXN0YW1wZWQtdGV4dCIsIDk5OSwgMAorfTsKK3N0YXRp YyBpbnQgbnNmdHRhYiA9IChzaXplb2Yoc2Z0dGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7 CisjZW5kaWYgLyogTk9MT0NBTCAqLworCisjaWZuZGVmIE5PRElBTAorCisjaWZkZWYgTkVUQ09O TiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTmV0d29ya3MgZGlyZWN0b3J5IGRlcGVuZHMg Ki8KK2ludCBubmV0ZGlyID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBvbiBESUFMIGNv ZGUgLS0gZml4IGxhdGVyLi4uICovCitjaGFyICpuZXRkaXJbTUFYRERJUisyXTsKKyNlbmRpZiAv KiBORVRDT05OICovCisKK19QUk9UT1RZUCggc3RhdGljIGludCBzZXRkaWFsLCAoaW50KSApOwor X1BST1RPVFlQKCBzdGF0aWMgaW50IHNldGRjZCwgKHZvaWQpICk7CitfUFJPVE9UWVAoIHN0YXRp YyBpbnQgY2tsb2dpbiwgKHZvaWQpICk7CisKKyNpZm5kZWYgTUlOSURJQUwKKyNpZmRlZiBPTERU QkNPREUKK2V4dGVybiBpbnQgdGJtb2RlbDsgICAgICAgICAgICAgICAgICAgICAvKiBUZWxlYml0 IG1vZGVsIElEICovCisjZW5kaWYgLyogT0xEVEJDT0RFICovCisjZW5kaWYgLyogTUlOSURJQUwg Ki8KKworZXh0ZXJuIE1ETUlORiAqbW9kZW1wW107ICAgICAgICAgICAgICAgIC8qIFBvaW50ZXJz IHRvIG1vZGVtIGluZm8gc3RydWN0cyAqLworZXh0ZXJuIHN0cnVjdCBrZXl0YWIgbWRtdGFiW107 ICAgICAgICAgIC8qIE1vZGVtIHR5cGVzIChpbiBtb2R1bGUgY2t1ZGlhLmMpICovCitleHRlcm4g aW50IG5tZG07ICAgICAgICAgICAgICAgICAgICAgICAgLyogTnVtYmVyIG9mIHRoZW0gKi8KKwor X1BST1RPVFlQKHN0YXRpYyBpbnQgZGlhbHN0ciwoY2hhciAqKiwgY2hhciAqKSk7CisKK2V4dGVy biBpbnQgZGlhbGhuZywgZGlhbHRtbywgZGlhbGtzcCwgZGlhbGRweSwgZGlhbG1odSwgZGlhbGVj LCBkaWFsZGM7CitleHRlcm4gaW50IGRpYWxydHIsIGRpYWxpbnQsIGRpYWx1ZHQsIGRpYWxzcnQs IGRpYWxyc3RyLCBtZG13YWl0ZDsKK2V4dGVybiBpbnQgbWRtc3BkLCBkaWFsZmMsIGRpYWxtdGgs IGRpYWxlc2MsIGRpYWxmbGQsIGRpYWxpZHQsIGRpYWxwYWNlOworZXh0ZXJuIGludCBtZG1zcGss IG1kbXZvbCwgZGlhbHRlc3Q7CisKK2ludCBkaWFsY3Z0ID0gMjsgICAgICAgICAgICAgICAgICAg ICAgICAvKiBESUFMIENPTlZFUlQtRElSRUNUT1JZICovCitpbnQgZGlhbGNuZiA9IDA7ICAgICAg ICAgICAgICAgICAgICAgICAgLyogRElBTCBDT05GSVJNQVRJT04gKi8KK2ludCBkaWFsY29uID0g MjsgICAgICAgICAgICAgICAgICAgICAgICAvKiBESUFMIENPTk5FQ1QgKi8KK2ludCBkaWFsY3Eg ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBESUFMIENPTk5FQ1QgQVVUTyBxdWlldC92 ZXJib3NlICovCitleHRlcm4gbG9uZyBkaWFsbWF4LCBkaWFsY2FwYXM7CitpbnQgdXNlcm1kbSA9 IDA7CitleHRlcm4gaW50IG5kaWFsZGlyOworZXh0ZXJuIGNoYXIgKmRpYWxpbmksICAgKmRpYWxt c3RyLCAqZGlhbG1wcm10LCAqZGlhbGRpcltdLCAqZGlhbGNtZCwgICpkaWFsbnByLAorICpkaWFs ZGNvbiwgKmRpYWxkY29mZiwgKmRpYWxlY29uLCAqZGlhbGVjb2ZmLCAqZGlhbGhjbWQsICAqZGlh bHgzLAorICpkaWFsaHdmYywgKmRpYWxzd2ZjLCAgKmRpYWxub2ZjLCAqZGlhbHRvbmUsICAqZGlh bHB1bHNlLCAqZGlhbG5hbWUsICpkaWFsbGFjOworZXh0ZXJuIGNoYXIgKmRpYWxsY2MsICAgKmRp YWxpeHAsICAqZGlhbGl4cywgICAqZGlhbGxkcCwgICAqZGlhbGxkcywgICpkaWFsdGZwLAorICpk aWFscHhpLCAgKmRpYWxweG8sICAgKmRpYWxzZngsICAqZGlhbGFhb24sICAqZGlhbGFhb2ZmOwor ZXh0ZXJuIGNoYXIgKmRpYWxsY3AsICAgKmRpYWxsY3MsICAqZGlhbGluaTIsICAqZGlhbG1hYzsK K2V4dGVybiBjaGFyICpkaWFsc3BvZmYsICpkaWFsc3BvbiwgKmRpYWx2b2wxLCAgKmRpYWx2b2wy LCAgKmRpYWx2b2wzOworCitjaGFyICpkaWFsdG9jY1tNQVhUUENDXSA9IHsgTlVMTCwgTlVMTCB9 OworaW50IG5kaWFsdG9jYyA9IDA7CitjaGFyICpkaWFscHVjY1tNQVhUUENDXSA9IHsgTlVMTCwg TlVMTCB9OworaW50IG5kaWFscHVjYyA9IDA7CisKK2NoYXIgKmRpYWx0ZmNbTUFYVE9MTEZSRUVd ID0geworICAgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwK K307CitpbnQgbnRvbGxmcmVlID0gMDsKKworY2hhciAqZGlhbHB4eFtNQVhQQlhFWENIXSA9IHsK KyAgICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMCit9Owor aW50IG5kaWFscHh4ID0gMDsKKworY2hhciAqZGlhbGxjYWNbTUFYTE9DQUxBQ10gPSB7CisgICAg TlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKKyAgICBOVUxM LCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAorICAgIE5VTEwsIE5V TEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCisgICAgTlVMTCwgTlVMTCwg TlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTAorfTsKK2ludCBubG9jYWxhYyA9IDA7 CisKK3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIGRyc3RydGFiW10gPSB7CisgICAgImludGVybmF0aW9u YWwiLCA1LCAwLAorICAgICJsb2NhbCIsICAgICAgICAgMiwgMCwKKyAgICAibG9uZy1kaXN0YW5j ZSIsIDQsIDAsCisgICAgIm5vbmUiLCAgICAgICAgICA2LCAwCit9OworCitzdGF0aWMgc3RydWN0 IGtleXRhYiBkY252dGFiW10gPSB7CisgICAgImFzayIsICAyLCAwLAorICAgICJvZmYiLCAgMCwg MCwKKyAgICAib24iLCAgIDEsIDAKK307CisKK3N0cnVjdCBrZXl0YWIgc2V0bWRtW10gPSB7Cisg ICAgImNhcGFiaWxpdGllcyIsICAgICBYWURDQVAsICAwLAorICAgICJjYXJyaWVyLXdhdGNoIiwg ICAgWFlETUNELCAgMCwKKyAgICAiY29tbWFuZCIsICAgICAgICAgIFhZRFNUUiwgIDAsCisgICAg ImNvbXByZXNzaW9uIiwgICAgICBYWUREQywgICBDTV9JTlYsCisgICAgImRhdGEtY29tcHJlc3Np b24iLCBYWUREQywgICAwLAorICAgICJkaWFsLWNvbW1hbmQiLCAgICAgWFlERElBLCAgMCwKKyAg ICAiZXJyb3ItY29ycmVjdGlvbiIsIFhZREVDLCAgIDAsCisgICAgImVzY2FwZS1jaGFyYWN0ZXIi LCBYWURFU0MsICAwLAorICAgICJmbG93LWNvbnRyb2wiLCAgICAgWFlERkMsICAgMCwKKyAgICAi aGFuZ3VwLW1ldGhvZCIsICAgIFhZRE1IVSwgIDAsCisjaWZuZGVmIE5PWEZFUgorICAgICJrZXJt aXQtc3Bvb2YiLCAgICAgWFlES1NQLCAgMCwKKyNlbmRpZiAvKiBOT1hGRVIgKi8KKyAgICAibWF4 aW11bS1zcGVlZCIsICAgIFhZRE1BWCwgIDAsCisgICAgIm5hbWUiLCAgICAgICAgICAgICBYWURO QU0sICAwLAorICAgICJzcGVha2VyIiwgICAgICAgICAgWFlEU1BLLCAgMCwKKyAgICAic3BlZWQt bWF0Y2hpbmciLCAgIFhZRFNQRCwgIDAsCisgICAgInR5cGUiLCAgICAgICAgICAgICBYWURUWVAs ICAwLAorICAgICJ2b2x1bWUiLCAgICAgICAgICAgWFlEVk9MLCAgMAorfTsKK2ludCBuc2V0bWRt ID0gKHNpemVvZihzZXRtZG0pIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKKworc3RydWN0IGtl eXRhYiB2b2x0YWJbXSA9IHsKKyAgICAiaGlnaCIsICAgMywgIDAsCisgICAgImxvdyIsICAgIDEs ICAwLAorICAgICJtZWRpdW0iLCAyLCAgMAorfTsKKworc3RydWN0IGtleXRhYiBtZG1jYXBbXSA9 IHsKKyAgICAiYXQtY29tbWFuZHMiLCAgICAgIENLRF9BVCwgIDAsCisgICAgImNvbXByZXNzaW9u IiwgICAgICBDS0RfREMsICAwLAorICAgICJkYyIsICAgICAgICAgICAgICAgQ0tEX0RDLCAgQ01f SU5WLAorICAgICJlYyIsICAgICAgICAgICAgICAgQ0tEX0VDLCAgQ01fSU5WLAorICAgICJlcnJv ci1jb3JyZWN0aW9uIiwgQ0tEX0VDLCAgMCwKKyAgICAiaGFyZHdhcmUtZmxvdyIsICAgIENLRF9I VywgIDAsCisgICAgImh3ZmMiLCAgICAgICAgICAgICBDS0RfSFcsICBDTV9JTlYsCisgICAgIml0 dSIsICAgICAgICAgICAgICBDS0RfVjI1LCBDTV9JTlYsCisgICAgImtlcm1pdC1zcG9vZiIsICAg ICBDS0RfS1MsICAwLAorICAgICJrcyIsICAgICAgICAgICAgICAgQ0tEX0tTLCAgQ01fSU5WLAor ICAgICJzYiIsICAgICAgICAgICAgICAgQ0tEX1NCLCAgQ01fSU5WLAorICAgICJzb2Z0d2FyZS1m bG93IiwgICAgQ0tEX1NXLCAgMCwKKyAgICAic3BlZWQtYnVmZmVyaW5nIiwgIENLRF9TQiwgIDAs CisgICAgInN3ZmMiLCAgICAgICAgICAgICBDS0RfU1csICBDTV9JTlYsCisgICAgInRiIiwgICAg ICAgICAgICAgICBDS0RfVEIsICBDTV9JTlYsCisgICAgInRlbGViaXQiLCAgICAgICAgICBDS0Rf VEIsICAwLAorICAgICJ2MjViaXMtY29tbWFuZHMiLCAgQ0tEX1YyNSwgMAorfTsKK2ludCBubWRt Y2FwID0gKHNpemVvZihtZG1jYXApIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKKworI2lmZGVm IENPTU1FTlQgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNFVCBBTlNXRVIgbm90IGltcGxl bWVudGVkIHlldCAqLworc3RhdGljIHN0cnVjdCBrZXl0YWIgYW5zd2VydGFiW10gPSB7CisgICAg eyAiY2FsbGVyLWlkIiwgIFhZQV9DSUQsICAwIH07CisgICAgeyAicmluZ3MiLCAgICAgIFhZQV9S TkcsICAwIH07CisgICAgeyAiIiwgMCwgMCB9Cit9Oworc3RhdGljIGludCBuYW5zd2VydGFiID0g IChzaXplb2YoYW5zd2VydGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSkgLSAxOworI2VuZGlm IC8qIENPTU1FTlQgKi8KKworc3RydWN0IGtleXRhYiBkaWFsdGFiW10gPSB7ICAgICAgICAgICAg IC8qIFNFVCBESUFMIHRhYmxlICovCisgICAgImFyZWEtY29kZSIsICAgICAgICBYWURMQUMsIDAs ICAgICAgLyogQWxzbyBzdGlsbCBpbmNsdWRlcyBpdGVtcyAgICAgKi8KKyAgICAiY29tcHJlc3Np b24iLCAgICAgIFhZRERDLCAgQ01fSU5WLCAvKiB0aGF0IHdlcmUgbW92ZWQgdG8gU0VUIE1PREVN LCAqLworICAgICJjb25maXJtYXRpb24iLCAgICAgWFlEQ05GLCAwLCAgICAgIC8qIGJ1dCB0aGV5 IGFyZSBDTV9JTlZpc2libGUuLi4gICovCisgICAgImNvbm5lY3QiLCAgICAgICAgICBYWURDT04s IDAsCisgICAgImNvbnZlcnQtZGlyZWN0b3J5IixYWURDVlQsIDAsCisgICAgImNvdW50cnktY29k ZSIsICAgICBYWURMQ0MsIDAsCisgICAgImRpYWwtY29tbWFuZCIsICAgICBYWURESUEsIENNX0lO ViwKKyAgICAiZGlyZWN0b3J5IiwgICAgICAgIFhZRERJUiwgMCwKKyAgICAiZGlzcGxheSIsICAg ICAgICAgIFhZRERQWSwgMCwKKyAgICAiZXNjYXBlLWNoYXJhY3RlciIsIFhZREVTQywgQ01fSU5W LAorICAgICJlcnJvci1jb3JyZWN0aW9uIiwgWFlERUMsICBDTV9JTlYsCisgICAgImZsb3ctY29u dHJvbCIsICAgICBYWURGQywgIENNX0lOViwKKyAgICAiZm9yY2UtbG9uZy1kaXN0YW5jZSIsIFhZ REZMRCwgMCwKKyAgICAiaGFuZ3VwIiwgICAgICAgICAgIFhZREhVUCwgMCwKKyAgICAiaWdub3Jl LWRpYWx0b25lIiwgIFhZRElEVCwgMCwKKyAgICAiaW50ZXJ2YWwiLCAgICAgICAgIFhZRElOVCwg MCwKKyAgICAiaW4iLCAgICAgICAgICAgICAgIFhZRElOSSwgQ01fSU5WfENNX0FCUiwKKyAgICAi aW5pdC1zdHJpbmciLCAgICAgIFhZRElOSSwgQ01fSU5WLAorICAgICJpbnRsLXByZWZpeCIsICAg ICAgWFlESVhQLCAwLAorICAgICJpbnRsLXN1ZmZpeCIsICAgICAgWFlESVhTLCAwLAorI2lmbmRl ZiBOT1hGRVIKKyAgICAia2VybWl0LXNwb29mIiwgICAgIFhZREtTUCwgQ01fSU5WLAorI2VuZGlm IC8qIE5PWEZFUiAqLworICAgICJsYy1hcmVhLWNvZGVzIiwgICAgWFlETExBQywgMCwKKyAgICAi bGMtcHJlZml4IiwgICAgICAgIFhZRExDUCwgMCwKKyAgICAibGMtc3VmZml4IiwgICAgICAgIFhZ RExDUywgMCwKKyAgICAibGQtcHJlZml4IiwgICAgICAgIFhZRExEUCwgMCwKKyAgICAibGQtc3Vm Zml4IiwgICAgICAgIFhZRExEUywgMCwKKyAgICAibG9jYWwtYXJlYS1jb2RlIiwgIFhZRExBQywg Q01fSU5WLAorICAgICJsb2NhbC1wcmVmaXgiLCAgICAgWFlETENQLCBDTV9JTlYsCisgICAgImxv Y2FsLXN1ZmZpeCIsICAgICBYWURMQ1MsIENNX0lOViwKKyAgICAibSIsICAgICAgICAgICAgICAg IFhZRE1USCwgQ01fSU5WfENNX0FCUiwKKyNpZm5kZWYgTk9TUEwKKyAgICAibWFjcm8iLCAgICAg ICAgICAgIFhZRE1BQywgMCwgICAgICAvKiAxOTUgKi8KKyNlbmRpZiAvKiBOT1NQTCAqLworI2lm ZGVmIE1ETUhVUAorICAgICJtZSIsICAgICAgICAgICAgICAgWFlETVRILCBDTV9JTlZ8Q01fQUJS LAorI2VuZGlmIC8qIE1ETUhVUCAqLworICAgICJtZXRob2QiLCAgICAgICAgICAgWFlETVRILCAw LAorICAgICJtbnAtZW5hYmxlIiwgICAgICAgWFlETU5QLCBDTV9JTlYsIC8qIG9ic29sZXRlIGJ1 dCBzdGlsbCBhY2NlcHRlZCAqLworI2lmZGVmIE1ETUhVUAorICAgICJtb2RlbS1oYW5ndXAiLCAg ICAgWFlETUhVLCBDTV9JTlYsCisjZW5kaWYgLyogTURNSFVQICovCisgICAgInBhY2luZyIsICAg ICAgICAgICBYWURQQUMsICAwLAorICAgICJwYngtZXhjaGFuZ2UiLCAgICAgWFlEUFhYLCAgMCwK KyAgICAicGJ4LWluc2lkZS1wcmVmaXgiLFhZRFBYSSwgIDAsCisgICAgInBieC1vdXRzaWRlLXBy ZWZpeCIsWFlEUFhPLCAwLAorICAgICJwcmVmaXgiLCAgICAgICAgICAgWFlETlBSLCAgMCwKKyAg ICAicHVsc2UtY291bnRyaWVzIiwgIFhZRFBVQ0MsIDAsCisgICAgInJlc3RyaWN0IiwgICAgICAg ICBYWURSU1RSLCAwLAorICAgICJyZXRyaWVzIiwgICAgICAgICAgWFlEUlRNLCAgMCwKKyAgICAi c29ydCIsICAgICAgICAgICAgIFhZRFNSVCwgIDAsCisgICAgInNwZWVkLW1hdGNoaW5nIiwgICBY WURTUEQsICBDTV9JTlYsCisgICAgInN0cmluZyIsICAgICAgICAgICBYWURTVFIsICBDTV9JTlYs CisgICAgInN1ZmZpeCIsICAgICAgICAgICBYWURTRlgsICAwLAorICAgICJ0ZXN0IiwgICAgICAg ICAgICAgWFlEVEVTVCwgMCwKKyAgICAidGltZW91dCIsICAgICAgICAgIFhZRFRNTywgIDAsCisg ICAgInRmLWFyZWEtY29kZSIsICAgICBYWURURkMsICBDTV9JTlYsCisgICAgInRmLXByZWZpeCIs ICAgICAgICBYWURURlAsICBDTV9JTlYsCisgICAgInRvbGwtZnJlZS1hcmVhLWNvZGUiLFhZRFRG QywwLAorICAgICJ0b2xsLWZyZWUtcHJlZml4IiwgWFlEVEZQLCAgMCwKKyAgICAidG9uZS1jb3Vu dHJpZXMiLCAgIFhZRFRPQ0MsIDAKK307CitpbnQgbmRpYWwgPSAoc2l6ZW9mKGRpYWx0YWIpIC8g c2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKKworI2lmZGVmIE1ETUhVUAorc3RydWN0IGtleXRhYiBt ZG1oYW5nW10gPSB7CisgICAgImR0ciIsICAgICAgICAgICAwLCAwLAorICAgICJtb2RlbS1jb21t YW5kIiwgMSwgMCwKKyAgICAicnMyMzItc2lnbmFsIiwgIDAsIDAsCisgICAgInYyNC1zaWduYWwi LCAgICAwLCBDTV9JTlYKK307CisjZW5kaWYgLyogTURNSFVQICovCisKK3N0YXRpYyBzdHJ1Y3Qg a2V5dGFiIG1kbWNtZFtdID0geworICAgICJhdXRvYW5zd2VyIiwgICAgICAgWFlEU19BTiwgMCwg ICAgIC8qIGF1dG9hbnN3ZXIgKi8KKyAgICAiY29tcHJlc3Npb24iLCAgICAgIFhZRFNfREMsIDAs ICAgICAvKiBkYXRhIGNvbXByZXNzaW9uICovCisgICAgImRpYWwtbW9kZS1wcm9tcHQiLCBYWURT X01QLCAwLCAgICAgLyogZGlhbCBtb2RlIHByb21wdCAqLworICAgICJkaWFsLW1vZGUtc3RyaW5n IiwgWFlEU19NUywgMCwgICAgIC8qIGRpYWwgbW9kZSBzdHJpbmcgKi8KKyAgICAiZXJyb3ItY29y cmVjdGlvbiIsIFhZRFNfRUMsIDAsICAgICAvKiBlcnJvciBjb3JyZWN0aW9uICovCisgICAgImhh bmd1cC1jb21tYW5kIiwgICBYWURTX0hVLCAwLCAgICAgLyogaGFuZ3VwIGNvbW1hbmQgKi8KKyAg ICAiaGFyZHdhcmUtZmxvdyIsICAgIFhZRFNfSFcsIDAsICAgICAvKiBod2ZjICovCisgICAgImln bm9yZS1kaWFsdG9uZSIsICBYWURTX0lELCAwLCAgICAgLyogaWdub3JlIGRpYWx0b25lICovCisg ICAgImluaXQtc3RyaW5nIiwgICAgICBYWURTX0lOLCAwLCAgICAgLyogaW5pdCBzdHJpbmcgKi8K KyAgICAibm8tZmxvdy1jb250cm9sIiwgIFhZRFNfTkYsIDAsICAgICAvKiBubyBmbG93IGNvbnRy b2wgKi8KKyAgICAicHJlZGlhbC1pbml0IiwgICAgIFhZRFNfSTIsIDAsICAgICAvKiBsYXN0LW1p bnV0ZSBzZXR1cCBjb21tYW5kcyAqLworICAgICJwdWxzZSIsICAgICAgICAgICAgWFlEU19EUCwg MCwgICAgIC8qIHB1bHNlICovCisgICAgInNvZnR3YXJlLWZsb3ciLCAgICBYWURTX1NXLCAwLCAg ICAgLyogc3dmYyAqLworICAgICJzcGVha2VyIiwgICAgICAgICAgWFlEU19TUCwgMCwgICAgIC8q IFNwZWFrZXIgKi8KKyAgICAidG9uZSIsICAgICAgICAgICAgIFhZRFNfRFQsIDAsICAgICAvKiB0 b25lICovCisgICAgInZvbHVtZSIsICAgICAgICAgICBYWURTX1ZPLCAwICAgICAgLyogVm9sdW1l ICovCit9Oworc3RhdGljIGludCBubWRtY21kID0gKHNpemVvZihtZG1jbWQpIC8gc2l6ZW9mKHN0 cnVjdCBrZXl0YWIpKTsKKworc3RydWN0IGtleXRhYiBkaWFsX2ZjW10gPSB7CisgICAgImF1dG8i LCAgICAgRkxPX0FVVE8sIDAsCisgICAgIm5vbmUiLCAgICAgRkxPX05PTkUsIDAsCisgICAgInJ0 cy9jdHMiLCAgRkxPX1JUU0MsIDAsCisgICAgInhvbi94b2ZmIiwgRkxPX1hPTlgsIDAKK307CisK K3N0cnVjdCBrZXl0YWIgZGlhbF9tW10gPSB7ICAgICAgICAgICAgICAvKiBESUFMIE1FVEhPRCAq LworICAgICJhdXRvIiwgICAgWFlETV9BLCAwLAorICAgICJkZWZhdWx0IiwgWFlETV9ELCAwLAor ICAgICJwdWxzZSIsICAgWFlETV9QLCAwLAorICAgICJ0b25lIiwgICAgWFlETV9ULCAwCit9Owor aW50IG5kaWFsX20gPSAoc2l6ZW9mKGRpYWxfbSkvc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKKyNl bmRpZiAvKiBOT0RJQUwgKi8KKworI2lmZGVmIENLX1RBUEkKK3N0cnVjdCBrZXl0YWIgdGFwaXRh YltdID0geyAgICAgICAgICAgICAvKiBUb3AtTGV2ZWwgTWljcm9zb2Z0IFRBUEkgKi8KKyAgICAi Y29uZmlndXJlLWxpbmUiLCAgICAgWFlUQVBJX0NGRywgIDAsCisgICAgImRpYWxpbmctcHJvcGVy dGllcyIsIFhZVEFQSV9ESUFMLCAwCit9OworaW50IG50YXBpdGFiID0gKHNpemVvZih0YXBpdGFi KS9zaXplb2Yoc3RydWN0IGtleXRhYikpOworCitzdHJ1Y3Qga2V5dGFiIHNldHRhcGl0YWJbXSA9 IHsgICAgICAgICAgLyogU0VUIE1pY3Jvc29mdCBUQVBJICovCisgICAgImluYWN0aXZpdHktdGlt ZW91dCIsIFhZVEFQSV9JTkEsICAwLAorICAgICJsaW5lIiwgICAgICAgICAgICAgICBYWVRBUElf TElOLCAgMCwKKyAgICAibG9jYXRpb24iLCAgICAgICAgICAgWFlUQVBJX0xPQywgIDAsCisgICAg Im1hbnVhbC1kaWFsaW5nIiwgICAgIFhZVEFQSV9NQU4sICAwLAorICAgICJtb2RlbS1kaWFsaW5n IiwgICAgICBYWVRBUElfUEFTUywgMCwKKyAgICAibW9kZW0tbGlnaHRzIiwgICAgICAgWFlUQVBJ X0xHSFQsIDAsCisgICAgInBob25lLW51bWJlci1jb252ZXJzaW9ucyIsICAgWFlUQVBJX0NPTiwg IDAsCisgICAgInBvcnQiLCAgICAgICAgICAgICAgIFhZVEFQSV9MSU4sICBDTV9JTlYsCisgICAg InBvc3QtZGlhbC10ZXJtaW5hbCIsIFhZVEFQSV9QU1QsICAwLAorICAgICJwcmUtZGlhbC10ZXJt aW5hbCIsICBYWVRBUElfUFJFLCAgMCwKKyAgICAidXNlLXdpbmRvd3MtY29uZmlndXJhdGlvbiIs IFhZVEFQSV9VU0UsIDAsCisgICAgIndhaXQtZm9yLWNyZWRpdC1jYXJkLXRvbmUiLCBYWVRBUElf Qk5HLCAwCit9OworaW50IG5zZXR0YXBpdGFiID0gKHNpemVvZihzZXR0YXBpdGFiKS9zaXplb2Yo c3RydWN0IGtleXRhYikpOworCitzdHJ1Y3Qga2V5dGFiICogdGFwaWxvY3RhYiA9IE5VTEw7ICAg ICAgLyogTWljcm9zb2Z0IFRBUEkgTG9jYXRpb25zICovCitpbnQgbnRhcGlsb2MgPSAwOworZXh0 ZXJuIHN0cnVjdCBrZXl0YWIgKiB0YXBpbGluZXRhYjsgICAgIC8qIE1pY3Jvc29mdCBUQVBJIExp bmUgRGV2aWNlcyAqLworZXh0ZXJuIGludCBudGFwaWxpbmU7CitleHRlcm4gaW50IHR0dGFwaTsg ICAgICAgICAgICAgICAgICAgICAgLyogVEFQSSBpbiB1c2UgKi8KK2V4dGVybiBpbnQgdGFwaXBh c3M7ICAgICAgICAgICAgICAgICAgICAvKiBUQVBJIFBhc3N0aHJvdWdoIG1vZGUgKi8KK2V4dGVy biBpbnQgdGFwaWNvbnY7ICAgICAgICAgICAgICAgICAgICAvKiBUQVBJIENvbnZlcnNpb24gbW9k ZSAqLworZXh0ZXJuIGludCB0YXBpbGlnaHRzOworZXh0ZXJuIGludCB0YXBpcHJldGVybTsKK2V4 dGVybiBpbnQgdGFwaXBvc3R0ZXJtOworZXh0ZXJuIGludCB0YXBpbWFudWFsOworZXh0ZXJuIGlu dCB0YXBpaW5hY3Rpdml0eTsKK2V4dGVybiBpbnQgdGFwaWJvbmc7CitleHRlcm4gaW50IHRhcGl1 c2VjZmc7CisjZW5kaWYgLyogQ0tfVEFQSSAqLworCisjaWZuZGVmIE5PUFVTSAorZXh0ZXJuIGlu dCBub3B1c2g7CitleHRlcm4gaW50IHdpbGRlbmE7CisjaWZkZWYgVU5JWAorc3RydWN0IGtleXRh YiB3aWxkdGFiW10gPSB7ICAgICAgICAgICAgIC8qIFNFVCBXSUxEQ0FSRC1FWFBBTlNJT04gKi8K KyNpZmRlZiBVTklYCisgICAgImtlcm1pdCIsICBXSUxEX0tFUiwgMCwJCS8qIEJ5IEtlcm1pdCAq LworI2VuZGlmCS8qIFVOSVggKi8KKyAgICAib2ZmIiwgICAgIFdJTERfT0ZGLCAwLAkJLyogRGlz YWJsZWQgKi8KKyAgICAib24iLCAgICAgIFdJTERfT04sICAwLAkJLyogRW5hYmxlZCAqLworI2lm ZGVmIFVOSVgKKyAgICAic2hlbGwiLCAgIFdJTERfU0hFLCAwLAkJLyogQnkgU2hlbGwgKi8KKyNl bmRpZgkvKiBVTklYICovCisgICAgIiIsIDAsIDAKK307CitpbnQgbndpbGQgPSAoc2l6ZW9mKHdp bGR0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKSAtIDE7CisKK3N0cnVjdCBrZXl0YWIgd2Rv dHRhYltdID0geyAgICAgICAgICAgICAvKiBjb250J2QgKi8KKyAgICAiL21hdGNoLWRvdC1maWxl cyIsICAgIDEsIDAsCisgICAgIi9uby1tYXRjaC1kb3QtZmlsZXMiLCAwLCAwCit9OworZXh0ZXJu IGludCB3aWxkeHBhbmQ7CisjZW5kaWYgLyogVU5JWCAqLworI2VuZGlmIC8qIE5PUFVTSCAqLwor CisjaWZkZWYgTkVUQ09OTgorZXh0ZXJuIHN0cnVjdCBrZXl0YWIgbmV0Y21kW10sIG5ldGtleVtd OworZXh0ZXJuIGludCBubmV0cywgbm5ldGtleTsKKyNpZmRlZiBUQ1BTT0NLRVQKK2V4dGVybiBz dHJ1Y3Qga2V5dGFiIHRjcG9wdFtdOworZXh0ZXJuIGludCBudGNwb3B0OworI2VuZGlmIC8qIFRD UFNPQ0tFVCAqLworI2lmZGVmIE5QSVBFCitjaGFyIHBpcGVuYW1lW1BJUEVOQU1MKzFdID0geyBO VUwsIE5VTCB9OworI2VuZGlmIC8qIE5QSVBFICovCisjaWZkZWYgQ0tfTkVUQklPUworZXh0ZXJu IHVuc2lnbmVkIGNoYXIgTmV0Qmlvc05hbWVbXTsKKyNlbmRpZiAvKiBDS19ORVRCSU9TICovCisj ZW5kaWYgLyogTkVUQ09OTiAqLworCisjaWZkZWYgQU5ZWDI1CitzdHJ1Y3Qga2V5dGFiIHgyNXRh YltdID0geworICAgICJjYWxsLXVzZXItZGF0YSIsICAgIFhZVURBVCwgMCwKKyAgICAiY2xvc2Vk LXVzZXItZ3JvdXAiLCBYWUNMT1MsIDAsCisgICAgInJldmVyc2UtY2hhcmdlIiwgICAgWFlSRVZD LCAwCit9OworaW50IG54MjUgPSAoc2l6ZW9mKHgyNXRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRh YikpOworCisjaWZuZGVmIElCTVgyNQorc3RydWN0IGtleXRhYiBwYWR4M3RhYltdID0geworICAg ICJicmVhay1hY3Rpb24iLCAgICAgICAgIFBBRF9CUkVBS19BQ1RJT04sICAgICAgICAgICAwLAor ICAgICJicmVhay1jaGFyYWN0ZXIiLCAgICAgIFBBRF9CUkVBS19DSEFSQUNURVIsICAgICAgICAw LAorICAgICJjaGFyYWN0ZXItZGVsZXRlIiwgICAgIFBBRF9DSEFSX0RFTEVURV9DSEFSLCAgICAg ICAwLAorICAgICJjci1wYWRkaW5nIiwgICAgICAgICAgIFBBRF9QQURESU5HX0FGVEVSX0NSLCAg ICAgICAwLAorICAgICJkaXNjYXJkLW91dHB1dCIsICAgICAgIFBBRF9TVVBQUkVTU0lPTl9PRl9E QVRBLCAgICAwLAorICAgICJlY2hvIiwgICAgICAgICAgICAgICAgIFBBRF9FQ0hPLCAgICAgICAg ICAgICAgICAgICAwLAorICAgICJlZGl0aW5nIiwgICAgICAgICAgICAgIFBBRF9FRElUSU5HLCAg ICAgICAgICAgICAgICAwLAorICAgICJlc2NhcGUiLCAgICAgICAgICAgICAgIFBBRF9FU0NBUEUs ICAgICAgICAgICAgICAgICAwLAorICAgICJmb3J3YXJkIiwgICAgICAgICAgICAgIFBBRF9EQVRB X0ZPUldBUkRfQ0hBUiwgICAgICAwLAorICAgICJsZi1wYWRkaW5nIiwgICAgICAgICAgIFBBRF9Q QURESU5HX0FGVEVSX0xGLCAgICAgICAwLAorICAgICJsZi1pbnNlcnQiLCAgICAgICAgICAgIFBB RF9MRl9BRlRFUl9DUiwgICAgICAgICAgICAwLAorICAgICJsaW5lLWRlbGV0ZSIsICAgICAgICAg IFBBRF9CVUZGRVJfREVMRVRFX0NIQVIsICAgICAwLAorICAgICJsaW5lLWRpc3BsYXkiLCAgICAg ICAgIFBBRF9CVUZGRVJfRElTUExBWV9DSEFSLCAgICAwLAorICAgICJsaW5lLWZvbGQiLCAgICAg ICAgICAgIFBBRF9MSU5FX0ZPTERJTkcsICAgICAgICAgICAwLAorICAgICJwYWQtZmxvdy1jb250 cm9sIiwgICAgIFBBRF9GTE9XX0NPTlRST0xfQllfUEFELCAgICAwLAorICAgICJzZXJ2aWNlLXNp Z25hbHMiLCAgICAgIFBBRF9TVVBQUkVTU0lPTl9PRl9TSUdOQUxTLCAwLAorICAgICJ0aW1lb3V0 IiwgICAgICAgICAgICAgIFBBRF9EQVRBX0ZPUldBUkRfVElNRU9VVCwgICAwLAorLyogU3BlZWQg aXMgcmVhZC1vbmx5ICovCisgICAgInRyYW5zbWlzc2lvbi1yYXRlIiwgICAgUEFEX0xJTkVfU1BF RUQsICAgICAgICAgICAgIDAsCisgICAgInVzZXItZmxvdy1jb250cm9sIiwgICAgUEFEX0ZMT1df Q09OVFJPTF9CWV9VU0VSLCAgIDAKK307CitpbnQgbnBhZHgzID0gKHNpemVvZihwYWR4M3RhYikg LyBzaXplb2Yoc3RydWN0IGtleXRhYikpOworI2VuZGlmIC8qIElCTVgyNSAqLworI2VuZGlmIC8q IEFOWVgyNSAqLworCisjaWZkZWYgVExPRworc3RhdGljIHN0cnVjdCBrZXl0YWIgdmJ0YWJbXSA9 IHsKKyAgICAiYnJpZWYiLCAgIDAsIDAsCisjaWZkZWYgT1MyT1JVTklYCisgICAgImZ0cCIsICAg ICAyLCAwLAorI2Vsc2UKKyNpZmRlZiBWTVMKKyAgICAiZnRwIiwgICAgIDIsIDAsCisjZW5kaWYg LyogZGVmIFZNUyAqLworI2VuZGlmIC8qIE9TMk9SVU5JWCAqLworICAgICJ2ZXJib3NlIiwgMSwg MAorfTsKK2ludCBudmIgPSAoc2l6ZW9mKHZidGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7 CisjZW5kaWYgLyogVExPRyAqLworCisjaWZkZWYgQ0tTWVNMT0cKK3N0YXRpYyBzdHJ1Y3Qga2V5 dGFiIHN5c2xvZ3RhYltdID0geworICAgICJhbGwiLCAgICAgICAgIFNZU0xHX0NYLCAwLAorICAg ICJjb21tYW5kcyIsICAgIFNZU0xHX0NNLCAwLAorICAgICJjb25uZWN0aW9uIiwgIFNZU0xHX0FD LCAwLAorICAgICJkZWJ1ZyIsICAgICAgIFNZU0xHX0RCLCAwLAorICAgICJkaWFsIiwgICAgICAg IFNZU0xHX0RJLCAwLAorICAgICJmaWxlLWFjY2VzcyIsIFNZU0xHX0ZBLCAwLAorICAgICJmaWxl LWNyZWF0ZSIsIFNZU0xHX0ZDLCAwLAorICAgICJsb2dpbiIsICAgICAgIFNZU0xHX0xJLCAwLAor ICAgICJub25lIiwgICAgICAgIFNZU0xHX05PLCAwLAorICAgICJwcm90b2NvbCIsICAgIFNZU0xH X1BSLCAwCit9OworaW50IG5zeXNsb2cgPSAoc2l6ZW9mKHN5c2xvZ3RhYikgLyBzaXplb2Yoc3Ry dWN0IGtleXRhYikpOworI2VuZGlmIC8qIENLU1lTTE9HICovCisKKy8qIFBhcml0eSBrZXl3b3Jk IHRhYmxlICovCisKK3N0cnVjdCBrZXl0YWIgcGFydGJsW10gPSB7CisgICAgImV2ZW4iLCAgICAn ZScsIDAsCisjaWZkZWYgSFdQQVJJVFkKKyAgICAiaGFyZHdhcmUiLCdIJywgMCwKKyNlbmRpZiAv KiBIV1BBUklUWSAqLworICAgICJtYXJrIiwgICAgJ20nLCAwLAorICAgICJub25lIiwgICAgIDAg LCAwLAorICAgICJvZGQiLCAgICAgJ28nLCAwLAorICAgICJzcGFjZSIsICAgJ3MnLCAwCit9Owor aW50IG5wYXIgPSAoc2l6ZW9mKHBhcnRibCkgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpOworCisj aWZkZWYgSFdQQVJJVFkKK3N0cnVjdCBrZXl0YWIgaHdwYXJ0YmxbXSA9IHsKKy8qIEFkZCBtYXJr IGFuZCBzcGFjZSBpZiBuZWVkZWQgYW5kIHBvc3NpYmxlICovCisgICAgImV2ZW4iLCAgICAnZScs IDAsCisjaWZkZWYgT1MyCisgICAgIm1hcmsiLCAgICAnbScsIDAsCisjZW5kaWYgLyogT1MyICov CisgICAgIm9kZCIsICAgICAnbycsIDAsCisjaWZkZWYgT1MyCisgICAgInNwYWNlIiwgICAncycs IDAsCisjZW5kaWYgLyogT1MyICovCisgICAgIiIsIDAsIDAKK307CitpbnQgbmh3cGFyID0gKHNp emVvZihod3BhcnRibCkgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpIC0gMTsKKyNlbmRpZiAvKiBI V1BBUklUWSAqLworCisvKiBPbi9PZmYgdGFibGUgKi8KKworc3RydWN0IGtleXRhYiBvbm9mZltd ID0geworICAgICJvZmYiLCAgICAgICAwLCAwLAorICAgICJvbiIsICAgICAgICAxLCAwCit9Owor CisjZGVmaW5lIFhZQ0RfTSAgICAwCQkJLyogQ0QgTUVTU0FHRSAqLworI2RlZmluZSBYWUNEX1Ag ICAgMQkJCS8qIENEIFBBVEggKi8KKyNkZWZpbmUgWFlDRF9IICAgIDIJCQkvKiBDRCBIT01FICov CisKK3N0cnVjdCBrZXl0YWIgY2R0YWJbXSA9IHsKKyAgICAiaG9tZSIsICAgICAgWFlDRF9ILCAw LAorICAgICJtZXNzYWdlIiwgICBYWUNEX00sIDAsCisgICAgInBhdGgiLCAgICAgIFhZQ0RfUCwg MAorfTsKK2ludCBuY2R0YWIgPSAoc2l6ZW9mKGNkdGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFi KSk7CisKK3N0cnVjdCBrZXl0YWIgY2Rtc2dbXSA9IHsKKyAgICAiZmlsZSIsICAgICAgMiwgMCwK KyAgICAib2ZmIiwgICAgICAgMCwgMCwKKyAgICAib24iLCAgICAgICAgMSwgMAorfTsKK2ludCBu Y2Rtc2cgPSAoc2l6ZW9mKGNkbXNnKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7CisKK3N0YXRp Yworc3RydWN0IGtleXRhYiB4aXR0YWJbXSA9IHsgICAgICAgICAgICAgIC8qIFNFVCBFWElUICov CisgICAgImhhbmd1cCIsICAgICAgICAzLCAwLCAgICAgICAgICAgICAgLyogLi4uSEFOR1VQICov CisgICAgIm9uLWRpc2Nvbm5lY3QiLCAyLCAwLCAgICAgICAgICAgICAgLyogLi4uT04tRElTQ09O TkVDVCAqLworICAgICJzdGF0dXMiLCAgICAgICAgMCwgMCwgICAgICAgICAgICAgIC8qIC4uLlNU QVRVUyAqLworICAgICJ3YXJuaW5nIiwgICAgICAgMSwgMCAgICAgICAgICAgICAgIC8qIC4uLldB Uk5JTkcgKi8KK307CitpbnQgbmV4aXQgPSAoc2l6ZW9mKHhpdHRhYikgLyBzaXplb2Yoc3RydWN0 IGtleXRhYikpOworCitzdHJ1Y3Qga2V5dGFiIHhpdHd0YWJbXSA9IHsgICAgICAgICAgICAgLyog U0VUIEVYSVQgV0FSTklORyAqLworICAgICJhbHdheXMiLCAyLCAwLCAgICAgICAgICAgICAgICAg ICAgIC8qIGV2ZW4gd2hlbiBub3QgY29ubmVjdGVkICovCisgICAgIm9mZiIsICAgIDAsIDAsICAg ICAgICAgICAgICAgICAgICAgLyogbm8gd2FybmluZyAgICAgKi8KKyAgICAib24iLCAgICAgMSwg MCAgICAgICAgICAgICAgICAgICAgICAvKiB3aGVuIGNvbm5lY3RlZCAqLworfTsKK2ludCBuZXhp dHcgPSAoc2l6ZW9mKHhpdHd0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKKworc3RydWN0 IGtleXRhYiBybHRhYltdID0geworICAgICJsb2NhbCIsICAgICAxLCAwLCAgICAgICAgICAgICAg ICAgIC8qIEVDSE8gdmFsdWVzICovCisgICAgIm9mZiIsICAgICAgIDAsIENNX0lOViwKKyAgICAi b24iLCAgICAgICAgMSwgQ01fSU5WLAorICAgICJyZW1vdGUiLCAgICAwLCAwCit9OworaW50IG5y bHQgPSAoc2l6ZW9mKHJsdGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7CisKKy8qIEluY29t cGxldGUgRmlsZSBEaXNwb3NpdGlvbiB0YWJsZSAqLworCitzdHJ1Y3Qga2V5dGFiIGlmZHRhYltd ID0geworICAgICJkaXNjYXJkIiwgU0VUX09GRiwgMCwKKyAgICAia2VlcCIsICAgIFNFVF9PTiwg IDAKK307CisKK3N0cnVjdCBrZXl0YWIgaWZkYXRhYltdID0geworICAgICJhdXRvIiwgICAgU0VU X0FVVE8sIDAsCisgICAgImRpc2NhcmQiLCBTRVRfT0ZGLCAgMCwKKyAgICAia2VlcCIsICAgIFNF VF9PTiwgICAwCit9OworCitjaGFyICogaWZkbmFtW10gPSB7ICJkaXNjYXJkIiwgImtlZXAiLCAi YXV0byIgfTsKKworLyogU0VUIFRBS0UgcGFyYW1ldGVycyB0YWJsZSAqLworc3RhdGljCitzdHJ1 Y3Qga2V5dGFiIHRha3RhYltdID0geworICAgICJlY2hvIiwgIDAsIDAsCisgICAgImVycm9yIiwg MSwgMCwKKyAgICAib2ZmIiwgICAyLCBDTV9JTlYsICAgICAgICAgICAgICAgICAvKiBGb3IgY29t cGF0aWJpbGl0eSAqLworICAgICJvbiIsICAgIDMsIENNX0lOViAgICAgICAgICAgICAgICAgIC8q IHdpdGggTVMtRE9TIEtlcm1pdC4uLiAqLworfTsKKworI2lmbmRlZiBOT1NQTAorI2lmZGVmIENP TU1FTlQKKy8qIG5vdCB1c2VkICovCitzdGF0aWMKK3N0cnVjdCBrZXl0YWIgc3VmdGFiW10gPSB7 ICAgICAgICAgICAgICAvKiAod2hhdCB0byBkbyB3aXRoKSBTVEFSVFVQLUZJTEUgKi8KKyAgICAi ZGVsZXRlIiwgMSwgMCwKKyAgICAia2VlcCIsICAgMCwgMAorfTsKKyNlbmRpZiAvKiBDT01NRU5U ICovCisKKy8qIFNFVCBNQUNSTyBwYXJhbWV0ZXJzIHRhYmxlICovCitzdGF0aWMKK3N0cnVjdCBr ZXl0YWIgc21hY3RhYltdID0geworICAgICJlY2hvIiwgIDAsIDAsCisgICAgImVycm9yIiwgMSwg MAorfTsKKyNlbmRpZiAvKiBOT1NQTCAqLworCisjaWZuZGVmIE5PU0NSSVBUCitzdGF0aWMKK3N0 cnVjdCBrZXl0YWIgc2NydGFiW10gPSB7CisgICAgImVjaG8iLCAgMCwgMAorfTsKKyNlbmRpZiAv KiBOT1NDUklQVCAqLworCisvKiBTRVQgQ09NTUFORCB0YWJsZSAqLworCisvKiBTRVQgQ09NTUFO RCBpdGVtcy4uLiAqLworCisjZGVmaW5lIFNDTURfQlNaIDAJLyogQllURVNJWkUgKi8KKyNkZWZp bmUgU0NNRF9SQ0wgMQkvKiBSRUNBTEwgKi8KKyNkZWZpbmUgU0NNRF9SVFIgMgkvKiBSRVRSWSAq LworI2RlZmluZSBTQ01EX1FVTyAzCS8qIFFVT1RJTkcgKi8KKyNkZWZpbmUgU0NNRF9DT0wgNAkv KiBDT0xPUiAqLworI2RlZmluZSBTQ01EX0hJRyA1CS8qIEhFSUdIVCAqLworI2RlZmluZSBTQ01E X1dJRCA2CS8qIFdJRFRIICovCisjZGVmaW5lIFNDTURfQ1VSIDcJLyogQ1VSU09SLVBPU0lUSU9O ICovCisjZGVmaW5lIFNDTURfU0NSIDgJLyogU0NST0xMQkFDSyAqLworI2RlZmluZSBTQ01EX01P UiA5CS8qIE1PUkUtUFJPTVBUSU5HICovCisjZGVmaW5lIFNDTURfSU5UIDEwICAgICAvKiBJTlRF UlJVUFRJT04gKi8KKyNkZWZpbmUgU0NNRF9BREwgMTEgICAgIC8qIEFVVE9ET1dOTE9BRCAqLwor I2RlZmluZSBTQ01EX1NUQSAxMiAgICAgLyogU1RBVFVTTElORSAqLworI2RlZmluZSBTQ01EX0RC USAxMwkvKiBET1VCTEVRVU9USU5HICovCisjZGVmaW5lIFNDTURfQ0JSIDE0CS8qIENCUkVBSyAq LworI2RlZmluZSBTQ01EX0JGTCAxNQkvKiBCVUZGRVItU0laRSAobm90IHVzZWQpICovCisjZGVm aW5lIFNDTURfRVJSIDE2CS8qIEVSUk9SICovCisjZGVmaW5lIFNDTURfVkFSIDE3CS8qIFZBUklB QkxFLUVWQUxVQVRJT04gKi8KKworc3RhdGljIHN0cnVjdCBrZXl0YWIgc2NtZHRhYltdID0gewor I2lmZGVmIENLX0FVVE9ETAorICAgICJhdXRvZG93bmxvYWQiLCAgICAgICBTQ01EX0FETCwgMCwK KyNlbmRpZiAvKiBDS19BVVRPREwgKi8KKyNpZmRlZiBDT01NRU5UCisvKgorICBUbyBpbXBsZW1l bnQgdGhpcyByZXF1aXJlcyB0aGF0IHdlIGNoYW5nZSBDTURCTCBhbmQgQVRNQkwKKyAgZnJvbSBj b21waWxlLXRpbWUgc3ltYm9scyB0byBydW50aW1lIHZhcmlhYmxlcy4gIE5vdCBhIGJpZyBkZWFs LAorICBidXQgbm90IHRyaXZpYWwgZWl0aGVyLgorICovCisgICAgImJ1ZmZlci1zaXplIiwgICAg ICAgIFNDTURfQkZMLCAwLAorI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAiYnl0ZXNpemUiLCAg ICAgICAgICAgU0NNRF9CU1osIDAsCisgICAgImNicmVhayIsICAgICAgICAgICAgIFNDTURfQ0JS LCBDTV9JTlYsCisjaWZkZWYgT1MyCisgICAgImNvbG9yIiwgICAgICAgICAgICAgIFNDTURfQ09M LCAwLAorICAgICJjdXJzb3ItcG9zaXRpb24iLCAgICBTQ01EX0NVUiwgMCwKKyNlbmRpZiAvKiBP UzIgKi8KKyNpZmRlZiBET1VCTEVRVU9USU5HCisgICAgImRvdWJsZXF1b3RpbmciLCAgICAgIFND TURfREJRLCAwLAorI2VuZGlmIC8qIERPVUJMRVFVT1RJTkcgKi8KKyAgICAiZXJyb3ItZGlzcGxh eSIsICAgICAgU0NNRF9FUlIsIDAsCisgICAgImhlaWdodCIsICAgICAgICAgICAgIFNDTURfSElH LCAwLAorICAgICJpbnRlcnJ1cHRpb24iLCAgICAgICBTQ01EX0lOVCwgMCwKKyAgICAibW9yZS1w cm9tcHRpbmciLCAgICAgU0NNRF9NT1IsIDAsCisgICAgInF1b3RpbmciLCAgICAgICAgICAgIFND TURfUVVPLCAwLAorI2lmZGVmIENLX1JFQ0FMTAorICAgICJyZWNhbGwtYnVmZmVyLXNpemUiLCBT Q01EX1JDTCwgMCwKKyNlbmRpZiAvKiBDS19SRUNBTEwgKi8KKyNpZmRlZiBDS19SRUNBTEwKKyAg ICAicmV0cnkiLCAgICAgICAgICAgICAgU0NNRF9SVFIsIDAsCisjZW5kaWYgLyogQ0tfUkVDQUxM ICovCisjaWZkZWYgT1MyCisjaWZkZWYgT05FVEVSTVVQRAorICAgICJzY3JvbGxiYWNrIiwgICAg ICAgICBTQ01EX1NDUiwgMCwKKyAgICAic3RhdHVzbGluZSIsICAgICAgICAgU0NNRF9TVEEsIDAs CisjZW5kaWYgLyogT05FVEVSTVVQRCAqLworI2VuZGlmIC8qIE9TMiAqLworICAgICJ2YXJpYWJs ZS1ldmFsdWF0aW9uIiwgU0NNRF9WQVIsMCwKKyAgICAid2lkdGgiLCAgICAgICAgICAgICAgU0NN RF9XSUQsIDAKK307CitzdGF0aWMgaW50IG5ieXR0ID0gKHNpemVvZihzY21kdGFiKSAvIHNpemVv ZihzdHJ1Y3Qga2V5dGFiKSk7CisKKyNpZm5kZWYgTk9TRVJWRVIKKy8qIFNlcnZlciBwYXJhbWV0 ZXJzIHRhYmxlICovCitzdGF0aWMgc3RydWN0IGtleXRhYiBzcnZ0YWJbXSA9IHsKKyAgICAiY2Qt bWVzc2FnZSIsICAgWFlTRVJDLCAwLAorICAgICJkaXNwbGF5IiwgICAgICBYWVNFUkQsIDAsCisg ICAgImdldC1wYXRoIiwgICAgIFhZU0VSUCwgMCwKKyAgICAiaWRsZS10aW1lb3V0IiwgWFlTRVJJ LCAwLAorICAgICJrZWVwYWxpdmUiLCAgICBYWVNFUkssIDAsCisgICAgImxvZ2luIiwgICAgICAg IFhZU0VSTCwgMCwKKyAgICAidGltZW91dCIsICAgICAgWFlTRVJULCAwCit9Oworc3RhdGljIGlu dCBuc3J2dCA9IChzaXplb2Yoc3J2dGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7CisjZW5k aWYgLyogTk9TRVJWRVIgKi8KKworc3RhdGljIHN0cnVjdCBrZXl0YWIgc2xlZXB0YWJbXSA9IHsg ICAgIC8qIFNFVCBTTEVFUCB0YWJsZSAqLworICAgICJjYW5jZWxsYXRpb24iLCAgMCwgICAwCit9 OworCitzdGF0aWMgc3RydWN0IGtleXRhYiB0c3RhYltdID0geyAgICAgICAgLyogU0VUIFRSQU5T RkVSL1hGRVIgdGFibGUgKi8KKyAgICAiYmVsbCIsICAgICAgICAgICAgWFlYX0JFTCwgMCwKKyNp ZmRlZiBYRlJDQU4KKyAgICAiY2FuY2VsbGF0aW9uIiwgICAgWFlYX0NBTiwgMCwKKyNlbmRpZiAv KiBYRlJDQU4gKi8KKyNpZm5kZWYgTk9DU0VUUworICAgICJjaGFyYWN0ZXItc2V0IiwgICBYWVhf Q1NFLCAwLAorI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKyNpZm5kZWYgTk9TUEwKKyAgICAiY3JjLWNh bGN1bGF0aW9uIiwgWFlYX0NSQywgMCwKKyNlbmRpZiAvKiBOT1NQTCAqLworICAgICJkaXNwbGF5 IiwgICAgICAgICBYWVhfRElTLCAwLAorICAgICJpbnRlcnJ1cHRpb24iLCAgICBYWVhfSU5ULCAw LAorICAgICJsb2NraW5nLXNoaWZ0IiwgICBYWVhfTFNILCAwLAorICAgICJtZXNzYWdlIiwgICAg ICAgICBYWVhfTVNHLCAwLAorICAgICJtb2RlIiwgICAgICAgICAgICBYWVhfTU9ELCAwLAorICAg ICJtc2ciLCAgICAgICAgICAgICBYWVhfTVNHLCBDTV9JTlYsCisjaWZkZWYgUElQRVNFTkQKKyAg ICAicGlwZXMiLCAgICAgICAgICAgWFlYX1BJUCwgMCwKKyNlbmRpZiAvKiBQSVBFU0VORCAqLwor I2lmZGVmIENLX1hZWgorICAgICJwcm90b2NvbCIsICAgICAgICBYWVhfUFJPLCAwLAorI2VuZGlm IC8qIENLX1hZWiAqLworICAgICJyZXBvcnQiLCAgICAgICAgICBYWVhfUlBULCAwLAorICAgICJz bG93LXN0YXJ0IiwgICAgICBYWVhfU0xPLCAwLAorI2lmbmRlZiBOT0NTRVRTCisgICAgInRyYW5z bGF0aW9uIiwgICAgIFhZWF9YTEEsIDAsCisjZWxzZQorICAgICJ0cmFuc2xhdGlvbiIsICAgICBY WVhfWExBLCBDTV9JTlYsCisjZW5kaWYgLyogTk9DU0VUUyAqLworICAgICJ4bGF0aW9uIiwgICAg ICAgICBYWVhfWExBLCBDTV9JTlYsCisgICAgIiIsIDAsIDAKK307CitzdGF0aWMgaW50IG50cyA9 IChzaXplb2YodHN0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKSAtIDE7CisKK3N0YXRpYyBz dHJ1Y3Qga2V5dGFiIHJ0c3RhYltdID0geyAgICAgICAvKiBSRU1PVEUgU0VUIFRSQU5TRkVSL1hG RVIgdGFibGUgKi8KKyNpZm5kZWYgTk9DU0VUUworICAgICJjaGFyYWN0ZXItc2V0IiwgICBYWVhf Q1NFLCAwLAorI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKyAgICAibW9kZSIsICAgICAgICAgICAgWFlY X01PRCwgMAorfTsKK3N0YXRpYyBpbnQgbnJ0cyA9IChzaXplb2YocnRzdGFiKSAvIHNpemVvZihz dHJ1Y3Qga2V5dGFiKSk7CisKK3N0cnVjdCBrZXl0YWIgeGZybXRhYltdID0geyAgICAgICAgICAg ICAvKiBUUkFOU0ZFUiBNT0RFIHRhYmxlICovCisgICAgImF1dG9tYXRpYyIsIFhNT0RFX0EsIDAs CisgICAgIm1hbnVhbCIsICAgIFhNT0RFX00sIDAKK307CisKKyNpZmRlZiBMT0NVUworZXh0ZXJu IGludCBsb2N1cywgYXV0b2xvY3VzOworCitzdGF0aWMgc3RydWN0IGtleXRhYiBsb2N1c3RhYltd ID0geworI2lmZGVmIEtVSQorICAgIHsgImFzayIsICAgICAzLCAwIH0sCQkvKiBQcmVzZW50bHkg aW1wbGVtZW50ZWQgaW4gR1VJIG9ubHkgKi8KKyNlbmRpZiAvKiBLVUkgKi8KKyAgICB7ICJhdXRv IiwgICAgMiwgMCB9LAorICAgIHsgImxvY2FsIiwgICAxLCAwIH0sCisgICAgeyAicmVtb3RlIiwg IDAsIDAgfQorfTsKK3N0YXRpYyBpbnQgbmxvY3VzdGFiID0gKHNpemVvZihsb2N1c3RhYikgLyBz aXplb2Yoc3RydWN0IGtleXRhYikpOworCisjZW5kaWYgLyogTE9DVVMgKi8KKworI2lmbmRlZiBO T0NTRVRTCisvKiBTRVQgVFJBTlNGRVIgQ0hBUkFDVEVSLVNFVCB0YWJsZSAqLworCitleHRlcm4g c3RydWN0IGtleXRhYiB0Y3N0YWJbXTsKK2V4dGVybiBpbnQgbnRjczsKKyNlbmRpZiAvKiBOT0NT RVRTICovCisKKy8qIFNFVCBUUkFOU0ZFUiBMT0NLSU5HLVNISUZUIHRhYmxlICovCitzdHJ1Y3Qg a2V5dGFiIGxzdGFiW10gPSB7CisgICAgImZvcmNlZCIsIDIsICAgMCwKKyAgICAib2ZmIiwgICAg MCwgICAwLAorICAgICJvbiIsICAgICAxLCAgIDAKK307CitpbnQgbmxzID0gKHNpemVvZihsc3Rh YikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpOworCisvKiBTRVQgVEVMTkVUIHRhYmxlcyAqLwor I2lmZGVmIFROQ09ERQorZXh0ZXJuIGludCB0bl9ubG0sIHRuX2JfbmxtLCB0bl9iX21ldSwgdG5f Yl91bWUsIHRuX2JfeGZlciwgdG5fc2JfYnVnOworZXh0ZXJuIGludCB0bl9ub19lbmNyeXB0X3hm ZXIsIHRuX2F1dGhfa3JiNV9kZXNfYnVnOworZXh0ZXJuIGludCB0bl93YWl0X2ZsZywgdG5fZHVw bGV4LCB0bl9kZWxheV9zYiwgdG5fc2Z1OworZXh0ZXJuIGludCBzbF90bl9zYXZlZDsKK2V4dGVy biBpbnQgdG5faW5maW5pdGU7CitleHRlcm4gaW50IHRuX3JlbV9lY2hvOworZXh0ZXJuIGludCB0 bl9kZWI7CitleHRlcm4gaW50IHRuX2F1dGhfaG93OworZXh0ZXJuIGludCB0bl9hdXRoX2VuYzsK KyNpZmRlZiBDS19GT1JXQVJEX1gKK2V4dGVybiBjaGFyICogdG5fZndkeF94YXV0aG9yaXR5Owor I2VuZGlmIC8qIENLX0ZPUldBUkRfWCAqLworI2lmZGVmIENLX0FVVEhFTlRJQ0FUSU9OCitzdGF0 aWMgc3RydWN0IGtleXRhYiBzZXRhdXRoW10gPSB7CisjaWZkZWYgQ0tfS0VSQkVST1MKKyAgICAi azQiLCAgICAgICAgQVVUSF9LUkI0LCBDTV9JTlYsCisgICAgIms1IiwgICAgICAgIEFVVEhfS1JC NSwgQ01fSU5WLAorICAgICJrZXJiZXJvczQiLCBBVVRIX0tSQjQsIDAsCisgICAgImtlcmJlcm9z NSIsIEFVVEhfS1JCNSwgMCwKKyAgICAia2VyYmVyb3NfaXYiLEFVVEhfS1JCNCwgQ01fSU5WLAor ICAgICJrZXJiZXJvc192IiwgQVVUSF9LUkI1LCBDTV9JTlYsCisgICAgImtyYjQiLCAgICAgIEFV VEhfS1JCNCwgQ01fSU5WLAorICAgICJrcmI1IiwgICAgICBBVVRIX0tSQjUsIENNX0lOViwKKyNl bmRpZiAvKiBDS19LRVJCRVJPUyAqLworI2lmZGVmIENLX1NSUAorICAgICJzcnAiLCAgICAgICBB VVRIX1NSUCwgIDAsCisjZW5kaWYgLyogQ0tfU1JQICovCisjaWZkZWYgQ0tfU1NMCisgICAgInNz bCIsICAgICAgQVVUSF9TU0wsICAgMCwKKyAgICAidGxzIiwgICAgICBBVVRIX1RMUywgICAwLAor I2VuZGlmIC8qIENLX1NTTCAqLworICAgICIiLCAgICAgICAgIDAsICAgICAgMAorfTsKK3N0YXRp YyBpbnQgbnNldGF1dGggPSBzaXplb2Yoc2V0YXV0aCkvc2l6ZW9mKHN0cnVjdCBrZXl0YWIpIC0g MTsKKyNpZmRlZiBDS19LRVJCRVJPUworZXh0ZXJuIGNoYXIgKiBrcmI1X2RfcHJpbmNpcGFsOyAg ICAgICAgIC8qIERlZmF1bHQgcHJpbmNpcGFsICovCitleHRlcm4gY2hhciAqIGtyYjVfZF9pbnN0 YW5jZTsKK2V4dGVybiBjaGFyICoga3JiNV9kX3JlYWxtOyAgICAgICAgICAgICAvKiBEZWZhdWx0 IHJlYWxtICovCitleHRlcm4gY2hhciAqIGtyYjVfZF9jYzsgICAgICAgICAgICAgICAgLyogRGVm YXVsdCBjcmVkZW50aWFscyBjYWNoZSAqLworZXh0ZXJuIGNoYXIgKiBrcmI1X2Rfc3J2OyAgICAg ICAgICAgICAgIC8qIERlZmF1bHQgc2VydmljZSBuYW1lICovCitleHRlcm4gaW50ICAgIGtyYjVf ZF9saWZldGltZTsgICAgICAgICAgLyogRGVmYXVsdCBsaWZldGltZSAqLworZXh0ZXJuIGludCAg ICBrcmI1X2RfZm9yd2FyZGFibGU7CitleHRlcm4gaW50ICAgIGtyYjVfZF9wcm94aWFibGU7Citl eHRlcm4gaW50ICAgIGtyYjVfZF9yZW5ld2FibGU7CitleHRlcm4gaW50ICAgIGtyYjVfYXV0b2dl dDsKK2V4dGVybiBpbnQgICAga3JiNV9hdXRvZGVsOworZXh0ZXJuIGludCAgICBrcmI1X2RfZ2V0 azQ7CitleHRlcm4gaW50ICAgIGtyYjVfY2hlY2thZGRyczsgICAgICAgICAgLyogQ2hlY2sgVEdU IEFkZHJzICovCitleHRlcm4gaW50ICAgIGtyYjVfZF9ub19hZGRyZXNzZXM7CitleHRlcm4gY2hh ciAqIGtyYjVfZF9hZGRyc1tdOworZXh0ZXJuIGNoYXIgKiBrNV9rZXl0YWI7ICAgICAgICAgICAg ICAgIC8qIEtleXRhYiBmaWxlICovCisKK2V4dGVybiBzdHJ1Y3Qga3JiNF9pbml0X2RhdGEga3Ji NF9pbml0OworZXh0ZXJuIGNoYXIgKiBrcmI0X2RfcHJpbmNpcGFsOyAgICAgICAgIC8qIERlZmF1 bHQgcHJpbmNpcGFsICovCitleHRlcm4gY2hhciAqIGtyYjRfZF9yZWFsbTsgICAgICAgICAgICAg LyogRGVmYXVsdCByZWFsbSAqLworZXh0ZXJuIGNoYXIgKiBrcmI0X2Rfc3J2OyAgICAgICAgICAg ICAgIC8qIERlZmF1bHQgc2VydmljZSBuYW1lICovCitleHRlcm4gaW50ICAgIGtyYjRfZF9saWZl dGltZTsgICAgICAgICAgLyogRGVmYXVsdCBsaWZldGltZSAqLworZXh0ZXJuIGludCAgICBrcmI0 X2RfcHJlYXV0aDsKK2V4dGVybiBjaGFyICoga3JiNF9kX2luc3RhbmNlOworZXh0ZXJuIGludCAg ICBrcmI0X2F1dG9nZXQ7CitleHRlcm4gaW50ICAgIGtyYjRfYXV0b2RlbDsKK2V4dGVybiBpbnQg ICAga3JiNF9jaGVja2FkZHJzOyAgICAgICAgICAvKiBDaGVjayBUR1QgQWRkcnMgKi8KK2V4dGVy biBjaGFyICogazRfa2V5dGFiOyAgICAgICAgICAgICAgICAvKiBLZXl0YWIgZmlsZSAqLworI2lm ZGVmIEtSQjQKK2V4dGVybiBpbnQgICAgazRkZWJ1ZzsKKyNlbmRpZiAvKiBLUkI0ICovCitzdGF0 aWMgc3RydWN0IGtleXRhYiBrcmJ2ZXJbXSA9IHsKKyAgICAiNCIsICAgICAgICAgICAgICAgICA0 LCAwLAorICAgICI1IiwgICAgICAgICAgICAgICAgIDUsIDAsCisgICAgIml2IiwgICAgICAgICAg ICAgICAgNCwgQ01fSU5WLAorICAgICJ2IiwgICAgICAgICAgICAgICAgIDUsIENNX0lOVgorfTsK K3N0YXRpYyBpbnQgbmtyYnZlciA9IHNpemVvZihrcmJ2ZXIpL3NpemVvZihzdHJ1Y3Qga2V5dGFi KTsKKworc3RhdGljIHN0cnVjdCBrZXl0YWIga2Rlc3RhYltdID0geworICAgICJuZXZlciIsICAg ICAgICAgICAgS1JCX0RFTF9OTywgMCwKKyAgICAibm8iLCAgICAgICAgICAgICAgIEtSQl9ERUxf Tk8sIENNX0lOViwKKyAgICAib24tY2xvc2UiLCAgICAgICAgIEtSQl9ERUxfQ0wsIDAsCisgICAg Im9uLWV4aXQiLCAgICAgICAgICBLUkJfREVMX0VYLCAwCit9Oworc3RhdGljIGludCBua2Rlc3Rh YiA9IHNpemVvZihrZGVzdGFiKS9zaXplb2Yoc3RydWN0IGtleXRhYik7CisKK3N0YXRpYyBzdHJ1 Y3Qga2V5dGFiIGs0dGFiW10gPSB7CisgICAgImF1dG9kZWwiLCAgICAgICAgICAgWFlLUkJERUws IENNX0lOViwKKyAgICAiYXV0b2Rlc3Ryb3kiLCAgICAgICBYWUtSQkRFTCwgMCwKKyAgICAiYXV0 b2dldCIsICAgICAgICAgICBYWUtSQkdFVCwgMCwKKyAgICAiY2hlY2stYWRkcmVzcyIsICAgICBY WUtSQkFEUiwgMCwKKyAgICAiZGVidWciLCAgICAgICAgICAgICBYWUtSQkRCRywgQ01fSU5WLAor ICAgICJpbnN0YW5jZSIsICAgICAgICAgIFhZS1JCSU5TLCAwLAorICAgICJrZXl0YWIiLCAgICAg ICAgICAgIFhZS1JCS1RCLCAwLAorICAgICJsaWZldGltZSIsICAgICAgICAgIFhZS1JCTElGLCAw LAorICAgICJwcmVhdXRoIiwgICAgICAgICAgIFhZS1JCUFJFLCAwLAorICAgICJwcmluY2lwYWwi LCAgICAgICAgIFhZS1JCUFIsICAwLAorICAgICJwcm9tcHQiLCAgICAgICAgICAgIFhZS1JCUFJN LCAwLAorICAgICJyZWFsbSIsICAgICAgICAgICAgIFhZS1JCUkwsICAwLAorICAgICJzZXJ2aWNl LW5hbWUiLCAgICAgIFhZS1JCU1JWLCAwCit9Oworc3RhdGljIGludCBuazR0YWIgPSBzaXplb2Yo azR0YWIpL3NpemVvZihzdHJ1Y3Qga2V5dGFiKTsKKworc3RhdGljIHN0cnVjdCBrZXl0YWIgazV0 YWJbXSA9IHsKKyAgICAiYWRkcmVzc2VzIiwgICAgICAgICBYWUtSQkFERCwgMCwKKyAgICAiYXV0 b2RlbGV0ZSIsICAgICAgICBYWUtSQkRFTCwgQ01fSU5WLAorICAgICJhdXRvZGVzdHJveSIsICAg ICAgIFhZS1JCREVMLCAwLAorICAgICJhdXRvZ2V0IiwgICAgICAgICAgIFhZS1JCR0VULCAwLAor ICAgICJjYyIsICAgICAgICAgICAgICAgIFhZS1JCQ0MsICBDTV9JTlYsCisgICAgImNoZWNrLWFk ZHJlc3MiLCAgICAgWFlLUkJBRFIsIDAsCisgICAgImNyZWRlbnRpYWxzLWNhY2hlIiwgWFlLUkJD QywgIDAsCisgICAgImZvcndhcmRhYmxlIiwgICAgICAgWFlLUkJGV0QsIDAsCisgICAgImdldC1r NC10Z3QiLCAgICAgICAgWFlLUkJLNUs0LDAsCisgICAgImluc3RhbmNlIiwgICAgICAgICAgWFlL UkJJTlMsIDAsCisgICAgImtleXRhYiIsICAgICAgICAgICAgWFlLUkJLVEIsIDAsCisgICAgImxp ZmV0aW1lIiwgICAgICAgICAgWFlLUkJMSUYsIDAsCisgICAgIm5vLWFkZHJlc3NlcyIsICAgICAg WFlLUkJOQUQsIDAsCisgICAgInByaW5jaXBhbCIsICAgICAgICAgWFlLUkJQUiwgIDAsCisgICAg InByb21wdCIsICAgICAgICAgICAgWFlLUkJQUk0sIDAsCisgICAgInByb3hpYWJsZSIsICAgICAg ICAgWFlLUkJQUlgsIDAsCisgICAgInJlYWxtIiwgICAgICAgICAgICAgWFlLUkJSTCwgIDAsCisg ICAgInJlbmV3YWJsZSIsICAgICAgICAgWFlLUkJSTlcsIDAsCisgICAgInNlcnZpY2UtbmFtZSIs ICAgICAgWFlLUkJTUlYsIDAKK307CitzdGF0aWMgaW50IG5rNXRhYiA9IHNpemVvZihrNXRhYikv c2l6ZW9mKHN0cnVjdCBrZXl0YWIpOworCisjZGVmaW5lIEtSQl9QV19QUk0gMQorI2RlZmluZSBL UkJfUFJfUFJNIDIKKworc3RhdGljIHN0cnVjdCBrZXl0YWIga3JicHJtdGFiW10gPSB7CisgICAg InBhc3N3b3JkIiwgIEtSQl9QV19QUk0sIDAsCisgICAgInByaW5jaXBhbCIsIEtSQl9QUl9QUk0s IDAKK307CisKKyNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLworI2lmZGVmIENLX1NSUAorc3RhdGlj IHN0cnVjdCBrZXl0YWIgc3JwdGFiW10gPSB7CisgICAgInByb21wdCIsICAgICAgICAgICAgWFlT UlBQUk0sIDAKK307CitzdGF0aWMgaW50IG5zcnB0YWIgPSBzaXplb2Yoc3JwdGFiKS9zaXplb2Yo c3RydWN0IGtleXRhYik7CisjZGVmaW5lIFNSUF9QV19QUk0gMQorCitzdGF0aWMgc3RydWN0IGtl eXRhYiBzcnBwcm10YWJbXSA9IHsKKyAgICAicGFzc3dvcmQiLCAgU1JQX1BXX1BSTSwgMAorfTsK KyNlbmRpZiAvKiBDS19TUlAgKi8KKyNpZmRlZiBDS19TU0wKK3N0YXRpYyBzdHJ1Y3Qga2V5dGFi IHNzbHRhYltdID0geworICAgICJjZXJ0cy1vayIsICAgICAgICAgIFhZU1NMQ09LLCAgQ01fSU5W LAorICAgICJjaXBoZXItbGlzdCIsICAgICAgIFhZU1NMQ0wsICAgMCwKKyAgICAiY3JsLWRpciIs ICAgICAgICAgICBYWVNTTENSTEQsIDAsCisgICAgImNybC1maWxlIiwgICAgICAgICAgWFlTU0xD UkwsICAwLAorICAgICJkZWJ1ZyIsICAgICAgICAgICAgIFhZU1NMREJHLCAgMCwKKyAgICAiZGgt a2V5LWZpbGUiLCAgICAgICBYWVNTTERLRkwsIENNX0lOViwKKyAgICAiZGgtcGFyYW0tZmlsZSIs ICAgICBYWVNTTERQRkwsIDAsCisgICAgImRzYS1jZXJ0LWNoYWluLWZpbGUiLCBYWVNTTERDQ0Ys IDAsCisgICAgImRzYS1jZXJ0LWZpbGUiLCAgICAgWFlTU0xEQ0ZMLCAwLAorICAgICJkc2Eta2V5 LWZpbGUiLCAgICAgIFhZU1NMREtGTCwgMCwKKyAgICAiZHVtbXkiLCAgICAgICAgICAgICBYWVNT TERVTSwgIENNX0lOViwKKyAgICAib25seSIsICAgICAgICAgICAgICBYWVNTTE9OLCAgIENNX0lO ViwKKyAgICAicmFuZG9tLWZpbGUiLCAgICAgICBYWVNTTFJORCwgIDAsCisgICAgInJzYS1jZXJ0 LWNoYWluLWZpbGUiLCBYWVNTTFJDQ0YsIDAsCisgICAgInJzYS1jZXJ0LWZpbGUiLCAgICAgWFlT U0xSQ0ZMLCAwLAorICAgICJyc2Eta2V5LWZpbGUiLCAgICAgIFhZU1NMUktGTCwgMCwKKyAgICAi dmVyYm9zZSIsICAgICAgICAgICBYWVNTTFZSQiwgIDAsCisgICAgInZlcmlmeSIsICAgICAgICAg ICAgWFlTU0xWUkYsICAwLAorICAgICJ2ZXJpZnktZGlyIiwgICAgICAgIFhZU1NMVlJGRCwgMCwK KyAgICAidmVyaWZ5LWZpbGUiLCAgICAgICBYWVNTTFZSRkYsIDAKK307CitzdGF0aWMgaW50IG5z c2x0YWIgPSBzaXplb2Yoc3NsdGFiKS9zaXplb2Yoc3RydWN0IGtleXRhYik7CitzdGF0aWMgc3Ry dWN0IGtleXRhYiBzc2x2ZXJ0YWJbXSA9IHsKKyAgICAiZmFpbC1pZi1uby1wZWVyLWNlcnQiLCBT U0xfVkVSSUZZX1BFRVIgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNTTF9WRVJJRllf RkFJTF9JRl9OT19QRUVSX0NFUlQsIDAsCisgICAgIm5vIiwgICAgICAgICAgICAgICBTU0xfVkVS SUZZX05PTkUsIDAsCisgICAgIm5vbmUiLCAgICAgICAgICAgICBTU0xfVkVSSUZZX05PTkUsIENN X0lOViwKKyAgICAib2ZmIiwgICAgICAgICAgICAgIFNTTF9WRVJJRllfTk9ORSwgQ01fSU5WLAor ICAgICJvbiIsICAgICAgICAgICAgICAgU1NMX1ZFUklGWV9QRUVSLCBDTV9JTlYsCisgICAgInBl ZXItY2VydCIsICAgICAgICBTU0xfVkVSSUZZX1BFRVIsIDAKK307CitzdGF0aWMgaW50IG5zc2x2 ZXJ0YWIgPSBzaXplb2Yoc3NsdmVydGFiKS9zaXplb2Yoc3RydWN0IGtleXRhYik7CisjZW5kaWYg LyogQ0tfU1NMICovCisjZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJT04gKi8KKyNpZmRlZiBDS19F TkNSWVBUSU9OCitpbnQgY3hfdHlwZSA9IENYX0FVVE87CitleHRlcm4gaW50IHNsX2N4X3R5cGU7 CisjZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLworZXh0ZXJuIGNoYXIgKnRjcF9hZGRyZXNzOwor I2lmbmRlZiBOT0hUVFAKK2V4dGVybiBjaGFyICogdGNwX2h0dHBfcHJveHk7CitleHRlcm4gY2hh ciAqIHRjcF9odHRwX3Byb3h5X3VzZXI7CitleHRlcm4gY2hhciAqIHRjcF9odHRwX3Byb3h5X3B3 ZDsKK2V4dGVybiBjaGFyICogdGNwX2h0dHBfcHJveHlfYWdlbnQ7CisjZW5kaWYgLyogTk9IVFRQ ICovCisjaWZkZWYgTlQKKyNpZmRlZiBDS19TT0NLUworZXh0ZXJuIGNoYXIgKnRjcF9zb2Nrc19z dnI7CitleHRlcm4gY2hhciAqdGNwX3NvY2tzX3VzZXI7CisjaWZkZWYgQ0tfU09DS1NfTlMKK2V4 dGVybiBjaGFyICp0Y3Bfc29ja3NfbnM7CisjZW5kaWYgLyogQ0tfU09DS1NfTlMgKi8KKyNlbmRp ZiAvKiBDS19TT0NLUyAqLworI2VuZGlmIC8qIE5UICovCisKKyNkZWZpbmUgVVBXX1VTRVIgIDEK KyNkZWZpbmUgVVBXX1BBU1MgIDIKKyNkZWZpbmUgVVBXX0FHRU5UIDMKKworc3RhdGljIHN0cnVj dCBrZXl0YWIgdXNlcnBhc3NbXSA9IHsKKyAgICB7ICIvYWdlbnQiLCAgIFVQV19BR0VOVCwgQ01f QVJHIH0sCisgICAgeyAiL3Bhc3N3b3JkIiwgVVBXX1BBU1MsIENNX0FSRyB9LAorICAgIHsgIi91 c2VyIiwgICAgIFVQV19VU0VSLCBDTV9BUkcgfSwKK307CitzdGF0aWMgaW50IG51c2VycGFzcyA9 IHNpemVvZih1c2VycGFzcykvc2l6ZW9mKHN0cnVjdCBrZXl0YWIpOworCitzdGF0aWMgc3RydWN0 IGtleXRhYiB0bm5lZ3RhYltdID0geyAgICAgLyogVEVMTkVUIE5FR09USUFUSU9OIHRhYmxlICov CisgICAgImFjY2VwdGVkIiwgIFROX05HX0FDLCAwLAorICAgICJyZWZ1c2VkIiwgICBUTl9OR19S RiwgMCwKKyAgICAicmVxIiwgICAgICAgVE5fTkdfUlEsIENNX0lOVnxDTV9BQlIsCisgICAgInJl cXUiLCAgICAgIFROX05HX1JRLCBDTV9JTlZ8Q01fQUJSLAorICAgICJyZXF1ZSIsICAgICBUTl9O R19SUSwgQ01fSU5WfENNX0FCUiwKKyAgICAicmVxdWVzIiwgICAgVE5fTkdfUlEsIENNX0lOVnxD TV9BQlIsCisgICAgInJlcXVlc3QiLCAgIFROX05HX1JRLCBDTV9JTlZ8Q01fQUJSLAorICAgICJy ZXF1ZXN0ZSIsICBUTl9OR19SUSwgQ01fSU5WfENNX0FCUiwKKyAgICAicmVxdWVzdGVkIiwgVE5f TkdfUlEsIDAsCisgICAgInJlcXVpcmVkIiwgIFROX05HX01VLCAwCit9Oworc3RhdGljIGludCBu dG5uZWd0YWIgPSBzaXplb2YodG5uZWd0YWIpL3NpemVvZihzdHJ1Y3Qga2V5dGFiKTsKKworI2lm ZGVmIENLX0VOQ1JZUFRJT04KK3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIHR5cGt3ZFtdID0geworICAg ICIvdHlwZSIsIDAsIENNX0FSRworfTsKKworc3RhdGljIHN0cnVjdCBrZXl0YWIgdG5lbmN0YWJb XSA9IHsgICAgIC8qIFRFTE5FVCBFTkNSWVBUSU9OIHRhYmxlICovCisgICAgImFjY2VwdGVkIiwg ICBUTl9OR19BQywgICAgQ01fSU5WLAorICAgICJyZWZ1c2VkIiwgICAgVE5fTkdfUkYsICAgIENN X0lOViwKKyAgICAicmVxIiwgICAgICAgIFROX05HX1JRLCAgICBDTV9JTlZ8Q01fQUJSLAorICAg ICJyZXF1IiwgICAgICAgVE5fTkdfUlEsICAgIENNX0lOVnxDTV9BQlIsCisgICAgInJlcXVlIiwg ICAgICBUTl9OR19SUSwgICAgQ01fSU5WfENNX0FCUiwKKyAgICAicmVxdWVzIiwgICAgIFROX05H X1JRLCAgICBDTV9JTlZ8Q01fQUJSLAorICAgICJyZXF1ZXN0IiwgICAgVE5fTkdfUlEsICAgIENN X0lOVnxDTV9BQlIsCisgICAgInJlcXVlc3RlIiwgICBUTl9OR19SUSwgICAgQ01fSU5WfENNX0FC UiwKKyAgICAicmVxdWVzdGVkIiwgIFROX05HX1JRLCAgICBDTV9JTlYsCisgICAgInJlcXVpcmVk IiwgICBUTl9OR19NVSwgICAgQ01fSU5WLAorICAgICJzdGFydCIsICAgICAgVE5fRU5fU1RBUlQs IENNX0lOViwKKyAgICAic3RvcCIsICAgICAgIFROX0VOX1NUT1AsICBDTV9JTlYsCisgICAgInR5 cGUiLCAgICAgICBUTl9FTl9UWVAsICAgMAorfTsKK3N0YXRpYyBpbnQgbnRuZW5jID0gc2l6ZW9m KHRuZW5jdGFiKS9zaXplb2Yoc3RydWN0IGtleXRhYikgOworI2VuZGlmIC8qIENLX0VOQ1JZUFRJ T04gKi8KKworI2lmZGVmIENLX0ZPUldBUkRfWAorc3RhdGljIHN0cnVjdCBrZXl0YWIgdG5md2R4 dGFiW10gPSB7ICAgIC8qIFRFTE5FVCBGT1JXQVJELVggdGFibGUgKi8KKyAgICAibm8tZW5jcnlw dGlvbiIsICAgIDEsICBDTV9JTlYsCisgICAgInhhdXRob3JpdHktZmlsZSIsICAwLCAgMAorfTsK K3N0YXRpYyBpbnQgbnRuZndkeCA9IHNpemVvZih0bmZ3ZHh0YWIpL3NpemVvZihzdHJ1Y3Qga2V5 dGFiKSA7CisjZW5kaWYgLyogQ0tfRk9SV0FSRF9YICovCisKK3N0YXRpYyBzdHJ1Y3Qga2V5dGFi IHRuYnVndGFiW10gPSB7ICAgICAvKiBURUxORVQgQlVHIHRhYmxlICovCisgICAgImF1dGgta3Ji NS1kZXMiLCAgICAgICAgIDQsIDAsCisgICAgImJpbmFyeS1tZS1tZWFucy11LXRvbyIsIDAsIDAs CisgICAgImJpbmFyeS11LW1lYW5zLW1lLXRvbyIsIDEsIDAsCisgICAgImluZmluaXRlLWxvb3At Y2hlY2siLCAgIDIsIDAsCisgICAgInNiLWltcGxpZXMtd2lsbC1kbyIsICAgIDMsIDAKK307CisK KyNpZmRlZiBDS19FTlZJUk9OTUVOVAorc3RhdGljIHN0cnVjdCBrZXl0YWIgdG5lbnZ0YWJbXSA9 IHsgICAgIC8qIFRFTE5FVCBFTlZJUk9OTUVOVCB0YWJsZSAqLworICAgICJhY2N0IiwgICAgIFRO X0VOVl9BQ0NULCAgICAwLAorICAgICJkaXNwbGF5IiwgIFROX0VOVl9ESVNQLCAgICAwLAorICAg ICJqb2IiLCAgICAgIFROX0VOVl9KT0IsICAgICAwLAorICAgICJsb2NhdGlvbiIsIFROX0VOVl9M T0MsICAgICAwLAorICAgICJvZmYiLCAgICAgIFROX0VOVl9PRkYsICAgICBDTV9JTlYsCisgICAg Im9uIiwgICAgICAgVE5fRU5WX09OLCAgICAgIENNX0lOViwKKyAgICAicHJpbnRlciIsICBUTl9F TlZfUFJOVCwgICAgMCwKKyAgICAic3lzdGVtdHlwZSIsVE5fRU5WX1NZUywgICAgMCwKKyAgICAi dXNlciIsICAgICBUTl9FTlZfVVNSLCAgICAgMCwKKyAgICAidXNlcnZhciIsICBUTl9FTlZfVVZB UiwgICAgMCwKKyAgICAiIiwgMCwgMAorfTsKK3N0YXRpYyBpbnQgbnRuZW52ID0gc2l6ZW9mKHRu ZW52dGFiKS9zaXplb2Yoc3RydWN0IGtleXRhYikgLSAxOworI2VuZGlmIC8qIENLX0VOVklST05N RU5UICovCisKKyNpZmRlZiBDS19BVVRIRU5USUNBVElPTgorc3RhdGljIHN0cnVjdCBrZXl0YWIg dG5hdXRodGFiW10gPSB7ICAgIC8qIFRFTE5FVCBBVVRIRU5USUNBVElPTiB0YWJsZSAqLworICAg ICJhY2NlcHRlZCIsICAgVE5fTkdfQUMsICBDTV9JTlYsCisgICAgImVuY3J5cHQtZmxhZyIsIFRO X0FVX0VOQywgMCwKKyAgICAiZm9yd2FyZGluZyIsIFROX0FVX0ZXRCwgICAwLAorICAgICJob3ct ZmxhZyIsICAgVE5fQVVfSE9XLCAgIDAsCisgICAgInJlZnVzZWQiLCAgICBUTl9OR19SRiwgIENN X0lOViwKKyAgICAicmVxIiwgICAgICAgIFROX05HX1JRLCAgQ01fSU5WfENNX0FCUiwKKyAgICAi cmVxdSIsICAgICAgIFROX05HX1JRLCAgQ01fSU5WfENNX0FCUiwKKyAgICAicmVxdWUiLCAgICAg IFROX05HX1JRLCAgQ01fSU5WfENNX0FCUiwKKyAgICAicmVxdWVzIiwgICAgIFROX05HX1JRLCAg Q01fSU5WfENNX0FCUiwKKyAgICAicmVxdWVzdCIsICAgIFROX05HX1JRLCAgQ01fSU5WfENNX0FC UiwKKyAgICAicmVxdWVzdGUiLCAgIFROX05HX1JRLCAgQ01fSU5WfENNX0FCUiwKKyAgICAicmVx dWVzdGVkIiwgIFROX05HX1JRLCAgQ01fSU5WLAorICAgICJyZXF1aXJlZCIsICAgVE5fTkdfTVUs ICBDTV9JTlYsCisgICAgInR5cGUiLCAgICAgICBUTl9BVV9UWVAsIDAKK307CitzdGF0aWMgaW50 IG50bmF1dGggPSBzaXplb2YodG5hdXRodGFiKS9zaXplb2Yoc3RydWN0IGtleXRhYikgOworCitz dHJ1Y3Qga2V5dGFiIGF1dHlwdGFiW10gPSB7ICAgIC8qIFRFTE5FVCBBVVRIRU5USUNBVElPTiBU WVBFIHRhYmxlICovCisgICAgImF1dG9tYXRpYyIsICBBVVRIX0FVVE8sIDAsCisjaWZkZWYgQ0tf S0VSQkVST1MKKyAgICAiazQiLCAgICAgICAgIEFVVEhfS1JCNCwgQ01fSU5WLAorICAgICJrNSIs ICAgICAgICAgQVVUSF9LUkI1LCBDTV9JTlYsCisgICAgImtlcmJlcm9zNCIsICBBVVRIX0tSQjQs IDAsCisgICAgImtlcmJlcm9zNSIsICBBVVRIX0tSQjUsIDAsCisgICAgImtlcmJlcm9zX2l2IixB VVRIX0tSQjQsIENNX0lOViwKKyAgICAia2VyYmVyb3NfdiIsIEFVVEhfS1JCNSwgQ01fSU5WLAor ICAgICJrcmI0IiwgICAgICAgQVVUSF9LUkI0LCBDTV9JTlYsCisgICAgImtyYjUiLCAgICAgICBB VVRIX0tSQjUsIENNX0lOViwKKyNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLworICAgICJub25lIiwg ICAgICAgQVVUSF9OT05FLCAwLAorI2lmZGVmIE5UCisgICAgIm50bG0iLCAgICAgICBBVVRIX05U TE0sIDAsCisjZW5kaWYgLyogTlQgKi8KKyNpZmRlZiBDS19TUlAKKyAgICAic3JwIiwgICAgICAg IEFVVEhfU1JQLCAgMCwKKyNlbmRpZiAvKiBDS19TUlAgKi8KKyNpZmRlZiBDS19TU0wKKyAgICAi c3NsIiwgICAgICAgIEFVVEhfU1NMLCAgMCwKKyNlbmRpZiAvKiBDS19TU0wgKi8KKyAgICAiIiwg MCwgMAorfTsKK2ludCBuYXV0eXAgPSBzaXplb2YoYXV0eXB0YWIpL3NpemVvZihzdHJ1Y3Qga2V5 dGFiKSAtIDE7CisKK3N0cnVjdCBrZXl0YWIgYXVob3d0YWJbXSA9IHsgICAgLyogVEVMTkVUIEFV VEhFTlRJQ0FUSU9OIEhPVyB0YWJsZSAqLworICAgICJhbnkiLCAgICAgVE5fQVVUSF9IT1dfQU5Z LCAgICAgMCwKKyAgICAibXV0dWFsIiwgIFROX0FVVEhfSE9XX01VVFVBTCwgIDAsCisgICAgIm9u ZS13YXkiLCBUTl9BVVRIX0hPV19PTkVfV0FZLCAwLAorICAgICIiLCAwLCAwCit9OworaW50IG5h dWhvdyA9IHNpemVvZihhdWhvd3RhYikvc2l6ZW9mKHN0cnVjdCBrZXl0YWIpIC0gMTsKKworc3Ry dWN0IGtleXRhYiBhdWVuY3RhYltdID0geyAgICAvKiBURUxORVQgQVVUSEVOVElDQVRJT04gRU5D UllQVCB0YWJsZSAqLworICAgICJhbnkiLCAgICAgVE5fQVVUSF9FTkNfQU5ZLCAgICAgMCwKKyAg ICAibm9uZSIsICAgIFROX0FVVEhfRU5DX05PTkUsICAgIDAsCisgICAgInRlbG9wdCIsICBUTl9B VVRIX0VOQ19URUxPUFQsICAwLAorI2lmZGVmIENLX1NTTAorICAgICJ0bHMiLCAgICAgVE5fQVVU SF9FTkNfVExTLCAgICAgMCwKKyNlbmRpZiAvKiBDS19TU0wgKi8KKyAgICAiIiwgMCwgMAorfTsK K2ludCBuYXVlbmMgPSBzaXplb2YoYXVlbmN0YWIpL3NpemVvZihzdHJ1Y3Qga2V5dGFiKSAtIDE7 CisjZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJT04gKi8KKworI2RlZmluZSBUTl9OTF9CSU4gMwor I2RlZmluZSBUTl9OTF9OVlQgNAorc3RhdGljIHN0cnVjdCBrZXl0YWIgdG5fbmxtdGFiW10gPSB7 ICAgIC8qIFRFTE5FVCBORVdMSU5FLU1PREUgdGFibGUgKi8KKyAgICAiYmluYXJ5LW1vZGUiLCBU Tl9OTF9CSU4sIDAsICAgICAgICAvKiBCaW5hcnkgbW9kZSAqLworICAgICJudnQiLCAgICBUTl9O TF9OVlQsIDAsICAgICAgICAgICAgIC8qIE5WVCBtb2RlICovCisgICAgIm9mZiIsICAgIFROTF9D Uk5VTCwgQ01fSU5WLCAgICAgICAgLyogQ1ItTlVMIChURUxORVQgc3BlYykgKi8KKyAgICAib24i LCAgICAgVE5MX0NSTEYsICBDTV9JTlYsICAgICAgICAvKiBDUi1MRiAoVEVMTkVUIHNwZWMpICov CisgICAgInJhdyIsICAgIFROTF9DUiwgICAgQ01fSU5WICAgICAgICAgLyogQ1Igb25seSAob3V0 IG9mIHNwZWMpICovCit9Oworc3RhdGljIGludCBudG5fbmxtID0gKHNpemVvZih0bl9ubG10YWIp IC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKKworc3RhdGljIHN0cnVjdCBrZXl0YWIgdG5sbXRh YltdID0geyAgICAgIC8qIFRFTE5FVCBORVdMSU5FLU1PREUgdGFibGUgKi8KKyAgICAiY3IiLCAg ICAgVE5MX0NSLCAgICBDTV9JTlYsICAgICAgICAvKiBDUiBvbmx5IChvdXQgb2Ygc3BlYykgKi8K KyAgICAiY3ItbGYiLCAgVE5MX0NSTEYsICBDTV9JTlYsICAgICAgICAvKiBDUi1MRiAoVEVMTkVU IHNwZWMpICovCisgICAgImNyLW51bCIsIFROTF9DUk5VTCwgQ01fSU5WLCAgICAgICAgLyogQ1It TlVMIChURUxORVQgc3BlYykgKi8KKyAgICAibGYiLCAgICAgVE5MX0xGLCAgICBDTV9JTlYsICAg ICAgICAvKiBMRiBpbnN0ZWFkIG9mIENSLUxGICovCisgICAgIm9mZiIsICAgIFROTF9DUk5VTCwg MCwgICAgICAgICAgICAgLyogQ1ItTlVMIChURUxORVQgc3BlYykgKi8KKyAgICAib24iLCAgICAg VE5MX0NSTEYsICAwLCAgICAgICAgICAgICAvKiBDUi1MRiAoVEVMTkVUIHNwZWMpICovCisgICAg InJhdyIsICAgIFROTF9DUiwgICAgMCAgICAgICAgICAgICAgLyogQ1Igb25seSAob3V0IG9mIHNw ZWMpICovCit9Oworc3RhdGljIGludCBudG5sbSA9IChzaXplb2YodG5sbXRhYikgLyBzaXplb2Yo c3RydWN0IGtleXRhYikpOworCitzdHJ1Y3Qga2V5dGFiIHRudGFiW10gPSB7CisjaWZkZWYgQ0tf QVVUSEVOVElDQVRJT04KKyAgICAiYXV0aGVudGljYXRpb24iLCAgICAgICBDS19UTl9BVSwgIDAs CisjZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJT04gKi8KKyAgICAiYiIsICAgICAgICAgICAgICAg ICAgICBDS19UTl9CTSwgIENNX0lOVnxDTV9BQlIsCisgICAgImJpIiwgICAgICAgICAgICAgICAg ICAgQ0tfVE5fQk0sICBDTV9JTlZ8Q01fQUJSLAorICAgICJiaW4iLCAgICAgICAgICAgICAgICAg IENLX1ROX0JNLCAgQ01fSU5WfENNX0FCUiwKKyAgICAiYmluYSIsICAgICAgICAgICAgICAgICBD S19UTl9CTSwgIENNX0lOVnxDTV9BQlIsCisgICAgImJpbmFyIiwgICAgICAgICAgICAgICAgQ0tf VE5fQk0sICBDTV9JTlZ8Q01fQUJSLAorICAgICJiaW5hcnkiLCAgICAgICAgICAgICAgIENLX1RO X0JNLCAgQ01fSU5WfENNX0FCUiwKKyAgICAiYmluYXJ5LSIsICAgICAgICAgICAgICBDS19UTl9C TSwgIENNX0lOVnxDTV9BQlIsCisgICAgImJpbmFyeS1tb2RlIiwgICAgICAgICAgQ0tfVE5fQk0s ICBDTV9JTlYsCisgICAgImJpbmFyeS10cmFuc2Zlci1tb2RlIiwgQ0tfVE5fWEYsICAwLAorICAg ICJiaW5hcnkteGZlci1tb2RlIiwgICAgIENLX1ROX1hGLCAgQ01fSU5WLAorICAgICJidWciLCAg ICAgICAgICAgICAgICAgIENLX1ROX0JVRywgMCwKKyAgICAiZGVidWciLCAgICAgICAgICAgICAg ICBDS19UTl9EQiwgIDAsCisgICAgImRlbGF5LXNiIiwgICAgICAgICAgICAgQ0tfVE5fREwsICAw LAorICAgICJlY2hvIiwgICAgICAgICAgICAgICAgIENLX1ROX0VDLCAgMCwKKyNpZmRlZiBDS19F TkNSWVBUSU9OCisgICAgImVuY3J5cHRpb24iLCAgICAgIENLX1ROX0VOQywgIDAsCisjZW5kaWYg LyogQ0tfRU5DUllQVElPTiAqLworI2lmZGVmIENLX0VOVklST05NRU5UCisgICAgImVudmlyb25t ZW50IiwgICAgIENLX1ROX0VOViwgIDAsCisjZW5kaWYgLyogQ0tfRU5WSVJPTk1FTlQgKi8KKyNp ZmRlZiBDS19GT1JXQVJEX1gKKyAgICAiZm9yd2FyZC14IiwgICAgICAgQ0tfVE5fRlgsICAgMCwK KyNlbmRpZiAvKiBDS19GT1JXQVJEX1ggKi8KKyNpZmRlZiBJS1NfT1BUSU9OCisgICAgImtlcm1p dCIsICAgICAgICAgIENLX1ROX0lLUywgIENNX0lOViwKKyNlbmRpZiAvKiBJS1NfT1BUSU9OICov CisjaWZkZWYgQ0tfU05ETE9DCisgICAgImxvY2F0aW9uIiwgICAgICAgIENLX1ROX0xPQywgIDAs CisjZW5kaWYgLyogQ0tfU05ETE9DICovCisjaWZkZWYgQ0tfTkFXUworICAgICJuYXdzIiwgICAg ICAgICAgICBDS19UTl9OQVdTLCBDTV9JTlYsCisjZW5kaWYgLyogQ0tfTkFXUyAqLworICAgICJu ZXdsaW5lLW1vZGUiLCAgICBDS19UTl9OTCwgICAwLAorICAgICJuby1lbmNyeXB0LWR1cmluZy14 ZmVyIiwgQ0tfVE5fTkUsIENNX0lOViwKKyAgICAicHJvbXB0LWZvci11c2VyaWQiLENLX1ROX1BV SUQsMCwKKyAgICAicmVtb3RlLWVjaG8iLCAgICAgQ0tfVE5fUkUsICAgMCwKKyNpZmRlZiBDS19T U0wKKyAgICAic3RhcnQtdGxzIiwgICAgICAgQ0tfVE5fVExTLCAgQ01fSU5WLAorI2VuZGlmIC8q IENLX1NTTCAqLworI2lmZGVmIE5UCisgICAgInNmdS1jb21wYXRpYmlsaXR5IiwgQ0tfVE5fU0ZV LCAwLAorI2Vsc2UKKyAgICAic2Z1LWNvbXBhdGliaWxpdHkiLCBDS19UTl9TRlUsIENNX0lOViwK KyNlbmRpZiAvKiBOVCAqLworICAgICJ0ZXJtaW5hbC10eXBlIiwgICBDS19UTl9UVCwgICAwLAor ICAgICJ3YWl0LWZvci1uZWdvdGlhdGlvbnMiLCBDS19UTl9XQUlULCAwLAorI2lmZGVmIENLX0VO VklST05NRU5UCisgICAgInhkaXNwbGF5LWxvY2F0aW9uIixDS19UTl9YRCwgQ01fSU5WLAorI2Vu ZGlmIC8qIENLX0VOVklST05NRU5UICovCisgICAgIiIsIDAsIDAKK307CitpbnQgbnRuID0gKHNp emVvZih0bnRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpIC0gMTsKKworc3RydWN0IGtleXRh YiB0bm9wdHRhYltdID0geworI2lmZGVmIENLX0FVVEhFTlRJQ0FUSU9OCisgICAgImF1dGhlbnRp Y2F0aW9uIiwgIENLX1ROX0FVLCAgIDAsCisjZWxzZQorICAgICJhdXRoZW50aWNhdGlvbiIsICBD S19UTl9BVSwgICBDTV9JTlYsCisjZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJT04gKi8KKyAgICAi YmluYXJ5LW1vZGUiLCAgICAgQ0tfVE5fQk0sICAgMCwKKyNpZmRlZiBUTl9DT01QT1JUCisgICAg ImMiLCAgICAgICAgICAgICAgIENLX1ROX0NQQywgICBDTV9JTlZ8Q01fQUJSLAorICAgICJjbyIs ICAgICAgICAgICAgICBDS19UTl9DUEMsICAgQ01fSU5WfENNX0FCUiwKKyAgICAiY29tIiwgICAg ICAgICAgICAgQ0tfVE5fQ1BDLCAgIENNX0lOVnxDTV9BQlIsCisgICAgImNvbS1wb3J0LWNvbnRy b2wiLENLX1ROX0NQQywgICAwLAorICAgICJjb21wb3J0LWNvbnRyb2wiLCBDS19UTl9DUEMsICAg Q01fSU5WLAorI2Vsc2UgLyogVE5fQ09NUE9SVCAqLworICAgICJjb20tcG9ydC1jb250cm9sIixD S19UTl9DUEMsICBDTV9JTlYsCisgICAgImNvbXBvcnQtY29udHJvbCIsIENLX1ROX0NQQywgICBD TV9JTlYsCisjZW5kaWYgLyogVE5fQ09NUE9SVCAqLworICAgICJlY2hvIiwgICAgICAgICAgICBD S19UTl9FQywgICAwLAorI2lmZGVmIENLX0VOQ1JZUFRJT04KKyAgICAiZW5jcnlwdGlvbiIsICAg ICAgQ0tfVE5fRU5DLCAgMCwKKyNlbHNlCisgICAgImVuY3J5cHRpb24iLCAgICAgIENLX1ROX0VO QywgIENNX0lOViwKKyNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCisjaWZkZWYgQ0tfRk9SV0FS RF9YCisgICAgImZvcndhcmQteCIsICAgICAgIENLX1ROX0ZYLCAgIDAsCisjZWxzZSAvKiBDS19G T1JXQVJEX1ggKi8KKyAgICAiZm9yd2FyZC14IiwgICAgICAgQ0tfVE5fRlgsICAgQ01fSU5WLAor I2VuZGlmIC8qIENLX0ZPUldBUkRfWCAqLworICAgICJpYm0tc2FrIiwgICAgICAgICBDS19UTl9T QUssICBDTV9JTlYsCisjaWZkZWYgSUtTX09QVElPTgorICAgICJrZXJtaXQiLCAgICAgICAgICBD S19UTl9JS1MsICAwLAorI2Vsc2UKKyAgICAia2VybWl0IiwgICAgICAgICAgQ0tfVE5fSUtTLCAg Q01fSU5WLAorI2VuZGlmIC8qIElLU19PUFRJT04gKi8KKyAgICAibGZsb3ciLCAgICAgICAgICAg Q0tfVE5fRkxXLCAgQ01fSU5WLAorICAgICJsb2dvdXQiLCAgICAgICAgICBDS19UTl9MT0csICAw LAorI2lmZGVmIENLX05BV1MKKyAgICAibmF3cyIsICAgICAgICAgICAgQ0tfVE5fTkFXUywgMCwK KyNlbHNlCisgICAgIm5hd3MiLCAgICAgICAgICAgIENLX1ROX05BV1MsIENNX0lOViwKKyNlbmRp ZiAvKiBDS19OQVdTICovCisjaWZkZWYgQ0tfRU5WSVJPTk1FTlQKKyAgICAibmV3LWVudmlyb25t ZW50IiwgQ0tfVE5fRU5WLCAgMCwKKyNlbHNlCisgICAgIm5ldy1lbnZpcm9ubWVudCIsIENLX1RO X0VOViwgIENNX0lOViwKKyNlbmRpZiAvKiBDS19FTlZJUk9OTUVOVCAqLworICAgICJwcmFnbWEt aGVhcnRiZWF0IixDS19UTl9QSFIsICBDTV9JTlYsCisgICAgInByYWdtYS1sb2dvbiIsICAgIENL X1ROX1BMRywgIENNX0lOViwKKyAgICAicHJhZ21hLXNzcGkiLCAgICAgQ0tfVE5fUFNQLCAgQ01f SU5WLAorICAgICJzYWsiLCAgICAgICAgICAgICBDS19UTl9TQUssICBDTV9JTlYsCisjaWZkZWYg Q0tfU05ETE9DCisgICAgInNlbmQtbG9jYXRpb24iLCAgIENLX1ROX0xPQywgIDAsCisjZWxzZQor ICAgICJzZW5kLWxvY2F0aW9uIiwgICBDS19UTl9MT0MsICBDTV9JTlYsCisjZW5kaWYgLyogQ0tf U05ETE9DICovCisgICAgInNnYSIsICAgICAgICAgICAgIENLX1ROX1NHQSwgQ01fSU5WfENNX0FC UiwKKyNpZmRlZiBDS19TU0wKKyAgICAic3RhcnQtdGxzIiwgICAgICAgQ0tfVE5fVExTLCAgMCwK KyNlbHNlCisgICAgInN0YXJ0LXRscyIsICAgICAgIENLX1ROX1RMUywgIENNX0lOViwKKyNlbmRp ZiAvKiBDS19TU0wgKi8KKyAgICAic3VwcHJlc3MtZ28tYWhlYWRzIiwgQ0tfVE5fU0dBLCAwLAor ICAgICJ0ZXJtaW5hbC10eXBlIiwgICBDS19UTl9UVCwgICAwLAorICAgICJ0dHlwZSIsICAgICAg ICAgICBDS19UTl9UVCwgICBDTV9JTlZ8Q01fQUJSLAorI2lmZGVmIENLX0VOVklST05NRU5UCisg ICAgInhkaXNwbGF5LWxvY2F0aW9uIiwgQ0tfVE5fWEQsIDAsCisjZWxzZQorICAgICJ4ZGlzcGxh eS1sb2NhdGlvbiIsIENLX1ROX1hELCBDTV9JTlYsCisjZW5kaWYgLyogQ0tfRU5WSVJPTk1FTlQg Ki8KKyAgICAiIiwgMCwgMAorfTsKK2ludCBudG5vcHQgPSAoc2l6ZW9mKHRub3B0dGFiKSAvIHNp emVvZihzdHJ1Y3Qga2V5dGFiKSkgLSAxOworCitzdHJ1Y3Qga2V5dGFiIHRub3B0c3dbXSA9IHsK KyAgICAiL2NsaWVudCIsICBDS19UTl9DTElFTlQsICAgMCwKKyAgICAiL3NlcnZlciIsICBDS19U Tl9TRVJWRVIsICAgMAorfTsKK2ludCBudG5vcHRzdyA9IChzaXplb2YodG5vcHRzdykgLyBzaXpl b2Yoc3RydWN0IGtleXRhYikpOworI2VuZGlmIC8qIFROQ09ERSAqLworCitzdHJ1Y3Qga2V5dGFi IGZ0cnRhYltdID0geyAgICAgICAgICAgICAgLyogRmVhdHVyZSB0YWJsZSAqLworI2lmbmRlZiBO T0NTRVRTICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDAgPSB3ZSBoYXZlIGl0LCAxID0gd2Ug ZG9uJ3QgKi8KKyJjaGFyYWN0ZXItc2V0cyIsICAgICAgIDAsIDAsCisjZWxzZQorImNoYXJhY3Rl ci1zZXRzIiwgICAgICAgMSwgMCwKKyNlbmRpZiAvKiBOT0NTRVRTICovCisjaWZuZGVmIE5PQ1lS SUwKKyJjeXJpbGxpYyIsICAgICAgICAgICAgIDAsIDAsCisjZWxzZQorImN5cmlsbGljIiwgICAg ICAgICAgICAgMSwgMCwKKyNlbmRpZiAvKiBOT0NZUklMICovCisKKyNpZm5kZWYgTk9MT0dESUFM CisiY3gtbG9nIiwgICAgICAgICAgICAgICAwLCAwLAorI2Vsc2UKKyJjeC1sb2ciLCAgICAgICAg ICAgICAgIDEsIDAsCisjZW5kaWYgLyogTk9MT0dESUFMICovCisKKyNpZm5kZWYgTk9ERUJVRwor ImRlYnVnIiwgICAgICAgICAgICAgICAgMCwgMCwKKyNlbHNlCisiZGVidWciLCAgICAgICAgICAg ICAgICAxLCAwLAorI2VuZGlmIC8qIE5PREVCVUcgKi8KKworI2lmbmRlZiBOT0RJQUwKKyJkaWFs IiwgICAgICAgICAgICAgICAgIDAsIDAsCisjZWxzZQorImRpYWwiLCAgICAgICAgICAgICAgICAg MSwgMCwKKyNlbmRpZiAvKiBOT0RJQUwgKi8KKworI2lmZGVmIERZTkFNSUMKKyJkeW5hbWljLW1l bW9yeSIsICAgICAgIDAsIDAsCisjZWxzZQorImR5bmFtaWMtbWVtb3J5IiwgICAgICAgMSwgMCwK KyNlbmRpZiAvKiBEWU5BTUlDICovCisKKyNpZm5kZWYgTk9YRkVSCisiZmlsZS10cmFuc2ZlciIs ICAgICAgICAwLCAwLAorI2Vsc2UKKyJmaWxlLXRyYW5zZmVyIiwgICAgICAgIDEsIDAsCisjZW5k aWYgLyogTk9YRkVSICovCisKKyNpZmRlZiBYWEZXRAorImZvcndhcmQiLCAgICAgICAgICAgICAg MCwgMCwKKyNlbHNlCisiZm9yd2FyZCIsICAgICAgICAgICAgICAxLCAwLAorI2VuZGlmIC8qIFhY RldEICovCisKKyNpZmRlZiBORVdGVFAKKyJmdHAiLCAgICAgICAgICAgICAgICAgIDAsIDAsCisj ZWxzZQorImZ0cCIsICAgICAgICAgICAgICAgICAgMSwgMCwKKyNlbmRpZiAvKiBORVdGVFAgKi8K KworI2lmZGVmIENLX0NVUlNFUworImZ1bGxzY3JlZW4tZGlzcGxheSIsICAgMCwgMCwKKyNlbHNl CisiZnVsbHNjcmVlbi1kaXNwbGF5IiwgICAxLCAwLAorI2VuZGlmIC8qIENLX0NVUlNFUyAqLwor I2lmZGVmIEdSRUVLCisiZ3JlZWsiLCAgICAgICAgICAgICAgICAwLCAwLAorI2Vsc2UKKyJncmVl ayIsICAgICAgICAgICAgICAgIDEsIDAsCisjZW5kaWYgLyogR1JFRUsgKi8KKyNpZmRlZiBIRUJS RVcKKyJoZWJyZXciLCAgICAgICAgICAgICAgIDAsIDAsCisjZWxzZQorImhlYnJldyIsICAgICAg ICAgICAgICAgMSwgMCwKKyNlbmRpZiAvKiBIRUJSRVcgKi8KKyNpZm5kZWYgTk9IRUxQCisiaGVs cCIsICAgICAgICAgICAgICAgICAwLCAwLAorI2Vsc2UKKyJoZWxwIiwgICAgICAgICAgICAgICAg IDEsIDAsCisjZW5kaWYgLyogTk9IRUxQICovCisKKyNpZm5kZWYgTk9JS1NECisiaWtzZCIsICAg ICAgICAgICAgICAgICAwLCAwLAorI2Vsc2UKKyJpa3NkIiwgICAgICAgICAgICAgICAgIDEsIDAs CisjZW5kaWYgLyogTk9JS1NEICovCisKKyNpZm5kZWYgTk9TUEwKKyJpZi1jb21tYW5kIiwgICAg ICAgICAgIDAsIDAsCisjZWxzZQorImlmLWNvbW1hbmQiLCAgICAgICAgICAgMSwgMCwKKyNlbmRp ZiAvKiBOT1NQTCAqLworI2lmbmRlZiBOT0pDCisjaWZkZWYgVU5JWAorImpvYi1jb250cm9sIiwg ICAgICAgICAgMCwgMCwKKyNlbHNlCisiam9iLWNvbnRyb2wiLCAgICAgICAgICAxLCAwLAorI2Vu ZGlmIC8qIFVOSVggKi8KKyNlbHNlCisiam9iLWNvbnRyb2wiLCAgICAgICAgICAxLCAwLAorI2Vu ZGlmIC8qIE5PSkMgKi8KKyNpZmRlZiBLQU5KSQorImthbmppIiwgICAgICAgICAgICAgICAgMCwg MCwKKyNlbHNlCisia2FuamkiLCAgICAgICAgICAgICAgICAxLCAwLAorI2VuZGlmIC8qIEtBTkpJ ICovCisKKyNpZm5kZWYgTk9YRkVSCisia2VybWl0IiwgICAgICAgICAgICAgICAwLCAwLAorI2Vs c2UKKyJrZXJtaXQiLCAgICAgICAgICAgICAgIDEsIDAsCisjZW5kaWYgLyogTk9YRkVSICovCisK KyNpZmRlZiBDS19LRVJCRVJPUworImtlcmJlcm9zIiwgICAgICAgICAgICAgMCwgMCwKKyNlbHNl Cisia2VyYmVyb3MiLCAgICAgICAgICAgICAxLCAwLAorI2VuZGlmIC8qIENLX0tFUkJFUk9TICov CisKKyNpZm5kZWYgTk9DU0VUUworImxhdGluMSIsICAgICAgICAgICAgICAgMCwgMCwKKyNlbHNl CisibGF0aW4xIiwgICAgICAgICAgICAgICAxLCAwLAorI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKyNp ZmRlZiBMQVRJTjIKKyJsYXRpbjIiLCAgICAgICAgICAgICAgIDAsIDAsCisjZWxzZQorImxhdGlu MiIsICAgICAgICAgICAgICAgMSwgMCwKKyNlbmRpZiAvKiBMQVRJTjIgKi8KKworI2lmZGVmIENL TEVBUk4KKyJsZWFybmVkLXNjcmlwdHMiLCAgICAgICAwLCAwLAorI2Vsc2UKKyJsZWFybmVkLXNj cmlwdHMiLCAgICAgICAxLCAwLAorI2VuZGlmIC8qIENLTEVBUk4gKi8KKworI2lmbmRlZiBOT0xP Q0FMCisibWFraW5nLWNvbm5lY3Rpb25zIiwgICAwLCAwLAorI2Vsc2UKKyJtYWtpbmctY29ubmVj dGlvbnMiLCAgIDEsIDAsCisjZW5kaWYgLyogTk9MT0NBTCAqLworCisjaWZkZWYgTkVUQ09OTgor Im5ldHdvcmsiLCAgICAgICAgICAgICAgMCwgMCwKKyNlbHNlCisibmV0d29yayIsICAgICAgICAg ICAgICAxLCAwLAorI2VuZGlmIC8qIE5FVENPTk4gKi8KKworI2lmZGVmIE5UCisjaWZkZWYgQ0tf QVVUSEVOVElDQVRJT04KKyJudGxtIiwgICAgICAgICAgICAgICAgIDEsIDAsCisjZWxzZSAvKiBD S19BVVRIRU5USUNBVElPTiAqLworIm50bG0iLCAgICAgICAgICAgICAgICAgMCwgMCwKKyNlbmRp ZiAvKiBDS19BVVRIRU5USUNBVElPTiAqLworI2Vsc2UgLyogTlQgKi8KKyJudGxtIiwgICAgICAg ICAgICAgICAgIDAsIDAsCisjZW5kaWYgLyogTlQgKi8KKworI2lmZGVmIFBJUEVTRU5ECisicGlw ZXMiLCAgICAgICAgICAgICAgICAwLCAwLAorI2Vsc2UKKyNpZmRlZiBORVRDTUQKKyJwaXBlcyIs ICAgICAgICAgICAgICAgIDAsIDAsCisjZW5kaWYgLyogTkVUQ01EICovCisjZW5kaWYgLyogUElQ RVNFTkQgKi8KKyNpZm5kZWYgUElQRVNFTkQKKyNpZm5kZWYgTkVUQ01ECisicGlwZXMiLCAgICAg ICAgICAgICAgICAxLCAwLAorI2VuZGlmIC8qIFBJUEVTRU5EICovCisjZW5kaWYgLyogTkVUQ01E ICovCisKKyNpZmRlZiBORVRQVFkKKyJwdHkiLCAgICAgICAgICAgICAgICAgIDAsIDAsCisjZWxz ZQorInB0eSIsICAgICAgICAgICAgICAgICAgMSwgMCwKKyNlbmRpZiAvKiBORVRQVFkgKi8KKwor I2lmbmRlZiBOT1BVU0gKKyJwdXNoIiwgICAgICAgICAgICAgICAgIDAsIDAsCisjZWxzZQorInB1 c2giLCAgICAgICAgICAgICAgICAgMSwgMCwKKyNlbmRpZiAvKiBQVVNIICovCisKKyNpZmRlZiBD S19SRURJUgorInJlZGlyZWN0IiwgICAgICAgICAgICAgMCwgMCwKKyNlbHNlCisicmVkaXJlY3Qi LCAgICAgICAgICAgICAxLCAwLAorI2VuZGlmIC8qIENLX1JFRElSICovCisKKyNpZmRlZiBDS19S VFNDVFMKKyJydHMvY3RzIiwgICAgICAgICAgICAgIDAsIDAsCisjZWxzZQorInJ0cy9jdHMiLCAg ICAgICAgICAgICAgMSwgMCwKKyNlbmRpZiAvKiBSVFMvQ1RTICovCisKKyNpZm5kZWYgTk9TQ1JJ UFQKKyJzY3JpcHQtY29tbWFuZCIsICAgICAgIDAsIDAsCisjZWxzZQorInNjcmlwdC1jb21tYW5k IiwgICAgICAgMSwgMCwKKyNlbmRpZiAvKiBOT1NDUklQVCAqLworI2lmbmRlZiBOT1NFUlZFUgor InNlcnZlci1tb2RlIiwgICAgICAgICAgMCwgMCwKKyNlbHNlCisic2VydmVyLW1vZGUiLCAgICAg ICAgICAxLCAwLAorI2VuZGlmIC8qIE5PU0VSVkVSICovCisKKyNpZm5kZWYgTk9TRVhQCisic2V4 cHJlc3Npb24iLCAgICAgICAgICAwLCAwLAorI2Vsc2UKKyJzZXhwcmVzc2lvbiIsICAgICAgICAg IDEsIDAsCisjZW5kaWYgLyogTk9TRVhQICovCisKKyNpZmRlZiBTRlRQX0JVSUxUSU4KKyJzZnRw IiwgICAgICAgICAgICAgICAgIDEsIDAsCisjZWxzZQorInNmdHAiLCAgICAgICAgICAgICAgICAg MCwgMCwKKyNlbmRpZiAvKiBTRlRQX0JVSUxUSU4gKi8KKworI2lmbmRlZiBOT1NIT1cKKyJzaG93 LWNvbW1hbmQiLCAgICAgICAgIDAsIDAsCisjZWxzZQorInNob3ctY29tbWFuZCIsICAgICAgICAg MSwgMCwKKyNlbmRpZiAvKiBOT1NIT1cgKi8KKworI2lmZGVmIENLX1NSUAorInNycCIsICAgICAg ICAgICAgICAgICAgMCwgMCwKKyNlbHNlCisic3JwIiwgICAgICAgICAgICAgICAgICAxLCAwLAor I2VuZGlmIC8qIENLX1NSUCAqLworCisjaWZkZWYgU1NIQlVJTFRJTgorInNzaCIsICAgICAgICAg ICAgICAgICAgMCwgMCwKKyNlbHNlIC8qIFNTSEJVSUxUSU4gKi8KKyJzc2giLCAgICAgICAgICAg ICAgICAgIDEsIDAsCisjZW5kaWYgLyogU1NIQlVJTFRJTiAqLworCisjaWZkZWYgQ0tfU1NMCisi c3NsL3RscyIsICAgICAgICAgICAgICAwLCAwLAorI2Vsc2UKKyJzc2wvdGxzIiwgICAgICAgICAg ICAgIDEsIDAsCisjZW5kaWYgLyogQ0tfU1NMICovCisKKyNpZm5kZWYgTk9YTUlUCisidHJhbnNt aXQiLCAgICAgICAgICAgICAwLCAwLAorI2Vsc2UKKyJ0cmFuc21pdCIsICAgICAgICAgICAgIDEs IDAsCisjZW5kaWYgLyogTk9YTUlUICovCisKKyNpZmRlZiBVTklDT0RFCisidW5pY29kZSIsICAg ICAgICAgICAgICAwLCAwLAorI2Vsc2UKKyJ1bmljb2RlIiwgICAgICAgICAgICAgIDEsIDAsCisj ZW5kaWYgLyogVU5JQ09ERSAqLworCisjaWZkZWYgQ0tfWFlaCisieHl6bW9kZW0iLCAgICAgICAg ICAgICAwLCAwLAorI2Vsc2UKKyJ4eXptb2RlbSIsICAgICAgICAgICAgIDEsIDAsCisjZW5kaWYg LyogQ0tfWFlaICovCisKKyIiLCAwLCAwCit9OworaW50IG5mdHIgPSAoc2l6ZW9mKGZ0cnRhYikg LyBzaXplb2Yoc3RydWN0IGtleXRhYikpIC0gMTsKKworc3RydWN0IGtleXRhYiBkZXN0dGFiW10g PSB7ICAgICAgICAgICAgIC8qIFNFVCBERVNUSU5BVElPTiAqLworI2lmZGVmIENBTElCUkFURQor ICAgICJjYWxpYnJhdGUiLCBERVNUX04sIENNX0lOViwKKyNlbmRpZiAvKiBDQUxJQlJBVEUgKi8K KyAgICAiZGlzayIsICAgIERFU1RfRCwgMCwKKyNpZmRlZiBDQUxJQlJBVEUKKyAgICAibm93aGVy ZSIsIERFU1RfTiwgMCwKKyNlbmRpZiAvKiBDQUxJQlJBVEUgKi8KKyAgICAicHJpbnRlciIsIERF U1RfUCwgMCwKKyAgICAic2NyZWVuIiwgIERFU1RfUywgMAorfTsKK2ludCBuZGVzdHMgPSAgKHNp emVvZihkZXN0dGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7CisKKyNpZm5kZWYgTk9TUEwg ICAgICAgICAgIC8qIFVzZWQgb25seSB3aXRoIHNjcmlwdCBwcm9ncmFtbWluZyBpdGVtcy4uLiAq LworCisjaWZuZGVmIE5PU0VSVkVSICAgICAgICAgICAgICAgICAgICAgICAgLyogVGhpcyBpcyBq dXN0IHRvIGF2b2lkIHNvbWUgKi8KKyNkZWZpbmUgQ0tfUEFSU0RJUiAgICAgICAgICAgICAgICAg ICAgICAvKiAic3RhdGVtZW50IG5vdCByZWFjaGVkIiAqLworI2Vsc2UgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIGNvbXBsYWludHMuLi4gKi8KKyNpZm5kZWYgTk9ESUFMCisj ZGVmaW5lIENLX1BBUlNESVIKKyNlbmRpZiAvKiBOT0RJQUwgKi8KKyNlbmRpZiAvKiBOT1NFUlZF UiAqLworCisvKgorICBjeCA9PSAwIG1lYW5zIGRpYWwgZGlyZWN0b3J5CisgIGN4ID09IDEgbWVh bnMgbmV0d29yayBkaXJlY3RvcnkKKyAgY3ggPT0gMiBtZWFucyBhIGRpcmVjdG9yeSBwYXRoIGxp c3QKKyovCitzdGF0aWMgaW50CitwYXJzZGlyKGN4KSBpbnQgY3g7IHsKKyAgICBpbnQgaSwgeCwg eSwgZGQ7ICAgICAgICAgICAgICAgICAgICAvKiBXb3JrZXJzICovCisgICAgaW50IG54ZGlyOwor ICAgIGNoYXIgKnM7CisgICAgY2hhciAqKiB4ZGlyOworICAgIGNoYXIgKnBwW01BWEdFVFBBVEhd OyAgICAgICAgICAgICAgIC8qIFRlbXBvcmFyeSBuYW1lIHBvaW50ZXJzICovCisjaWZkZWYgWkZO UUZQCisgICAgc3RydWN0IHpmbmZwICogZm5wOworI2lmZGVmIE9TMgorICAgIGNoYXIgKiBlbnY7 CisgICAgY2hhciBkaXJwYXRoWzQwOTZdOworI2Vsc2UgLyogT1MyICovCisgICAgY2hhciBkaXJw YXRoWzEwMjRdOyAgICAgICAgICAgICAgICAgLyogRm9yIGZ1bGx5IHF1YWxpZmllZCBmaWxlbmFt ZXMgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBaRk5RRlAgKi8KKworICAgIGludCBt YXggPSAwOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1heGltdW0gbnVtYmVyIG9mIHRoaW5n cyB0byBwYXJzZSAqLworICAgIGNoYXIgYzsKKworI2lmbmRlZiBOT0RJQUwKKyAgICBpZiAoY3gg PT0gMCkgeyAgICAgICAgICAgICAgICAgICAgICAvKiBEaWFsaW5nICovCisgICAgICAgIG54ZGly ID0gbmRpYWxkaXI7CisgICAgICAgIHhkaXIgPSBkaWFsZGlyOworICAgICAgICBtYXggPSBNQVhE RElSOworICAgIH0gZWxzZQorI2lmZGVmIE5FVENPTk4KKyAgICBpZiAoY3ggPT0gMSkgeyAgICAg ICAgICAgICAgICAgICAgICAvKiBOZXR3b3JrICovCisgICAgICAgIG54ZGlyID0gbm5ldGRpcjsK KyAgICAgICAgeGRpciA9IG5ldGRpcjsKKyAgICAgICAgbWF4ID0gTUFYRERJUjsKKyAgICB9IGVs c2UKKyNlbmRpZiAvKiBORVRDT05OICovCisjZW5kaWYgLyogTk9ESUFMICovCisjaWZuZGVmIE5P U0VSVkVSCisgICAgaWYgKGN4ID09IDIpIHsgICAgICAgICAgICAgICAgICAgICAgLyogR0VUIHBh dGggKi8KKyAgICAgICAgbnhkaXIgPSBuZ2V0cGF0aDsKKyAgICAgICAgeGRpciA9IGdldHBhdGg7 CisgICAgICAgIG1heCA9IE1BWEdFVFBBVEg7CisgICAgfSBlbHNlICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogQ2FsbGVkIHdpdGggaW52YWxpZCBmdW5jdGlvbiBjb2RlICovCisjZW5k aWYgLyogTk9TRVJWRVIgKi8KKyAgICAgIHJldHVybigtMik7CisKKyAgICBmb3IgKGkgPSAwOyBp IDwgTUFYR0VUUEFUSDsgaSsrKSAgICAvKiBJbml0IHRoZXNlLiAqLworICAgICAgcHBbaV0gPSBO VUxMOworCisjaWZkZWYgQ0tfUEFSU0RJUgorICAgIGRkID0gMDsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIFRlbXBvcmFyeSBuYW1lIGNvdW50ZXIgKi8KKyAgICB3aGlsZSAoMSkgewor ICAgICAgICBpZiAoY3ggIT0gMikgeyAgICAgICAgICAgICAgICAgIC8qIERpYWxpbmcgb3IgTmV0 d29yayBEaXJlY3RvcnkgKi8KKyNpZmRlZiBPUzIKKyAgICAgICAgICAgIGludCBsZW47CisgICAg ICAgICAgICBjaGFyICogYXBwZGF0YTAgPSBOVUxMLCAqIGFwcGRhdGExID0gTlVMTDsKKyNpZmRl ZiBOVAorICAgICAgICAgICAgZW52ID0gZ2V0ZW52KCJLOTVQSE9ORVMiKTsKKyAgICAgICAgICAg IG1ha2VzdHIoJmFwcGRhdGEwLChjaGFyICopR2V0QXBwRGF0YSgwKSk7CisgICAgICAgICAgICBt YWtlc3RyKCZhcHBkYXRhMSwoY2hhciAqKUdldEFwcERhdGEoMSkpOworI2Vsc2UgLyogTlQgKi8K KyAgICAgICAgICAgIGVudiA9IGdldGVudigiSzJQSE9ORVMiKTsKKyNlbmRpZiAvKiBOVCAqLwor ICAgICAgICAgICAgaWYgKCFlbnYpCisgICAgICAgICAgICAgIGVudiA9IGdldGVudigiSzk1UEhP TkVTIik7CisgICAgICAgICAgICBpZiAoIWVudikKKyAgICAgICAgICAgICAgZW52ID0gIiI7CisK KyAgICAgICAgICAgIGRpcnBhdGhbMF0gPSAnXDAnOworICAgICAgICAgICAgbGVuID0gc3RybGVu KGVudikgKyAyKnN0cmxlbihzdGFydHVwZGlyKSArIDIqc3RybGVuKGluaWRpcikKKyAgICAgICAg ICAgICAgICArIChhcHBkYXRhMD8yKnN0cmxlbihhcHBkYXRhMCk6MCkgCisgICAgICAgICAgICAg ICAgKyAoYXBwZGF0YTE/MipzdHJsZW4oYXBwZGF0YTEpOjApCisgICAgICAgICAgICAgICAgKyAy KnN0cmxlbih6aG9tZSgpKSArIDIqc3RybGVuKGV4ZWRpcikgKyA4KnN0cmxlbigiUEhPTkVTLyIp CisgICAgICAgICAgICAgICAgKyAxMjsKKyAgICAgICAgICAgIGlmIChsZW4gPCA0MDk2KSAgICAg ICAgICAgICAvKiBTQUZFICovCisgICAgICAgICAgICAgIHNwcmludGYoZGlycGF0aCwKKyAgICAg ICAgICAgICAgICAgICAgIiVzJXMlczslcyVzOyVzJXMlcyVzJXMlcyVzJXMlczslcyVzOyVzOyVz JXMiLAorICAgICAgICAgICAgICAgICAgICAvKiBTZW1pY29sb24tc2VwYXJhdGVkIHBhdGggbGlz dCAqLworICAgICAgICAgICAgICAgICAgICBlbnYsCisgICAgICAgICAgICAgICAgICAgIChlbnZb MF0gJiYgZW52W3N0cmxlbihlbnYpLTFdID09ICc7JykgPyAiIiA6ICI7IiwKKyAgICAgICAgICAg ICAgICAgICAgc3RhcnR1cGRpciwKKyAgICAgICAgICAgICAgICAgICAgc3RhcnR1cGRpciwgIlBI T05FUy8iLAorICAgICAgICAgICAgICAgICAgICBhcHBkYXRhMSA/IGFwcGRhdGExIDogIiIsIAor ICAgICAgICAgICAgICAgICAgICBhcHBkYXRhMSA/ICJLZXJtaXQgOTU7IiA6ICIiLAorICAgICAg ICAgICAgICAgICAgICBhcHBkYXRhMSA/IGFwcGRhdGExIDogIiIsIAorICAgICAgICAgICAgICAg ICAgICBhcHBkYXRhMSA/ICJLZXJtaXQgOTUvUEhPTkVTLzsiIDogIiIsCisgICAgICAgICAgICAg ICAgICAgIGFwcGRhdGEwID8gYXBwZGF0YTAgOiAiIiwgCisgICAgICAgICAgICAgICAgICAgIGFw cGRhdGEwID8gIktlcm1pdCA5NTsiIDogIiIsCisgICAgICAgICAgICAgICAgICAgIGFwcGRhdGEw ID8gYXBwZGF0YTAgOiAiIiwgCisgICAgICAgICAgICAgICAgICAgIGFwcGRhdGEwID8gIktlcm1p dCA5NS9QSE9ORVMvOyIgOiAiIiwKKyAgICAgICAgICAgICAgICAgICAgaW5pZGlyLAorICAgICAg ICAgICAgICAgICAgICBpbmlkaXIsICJQSE9ORVMvIiwKKyAgICAgICAgICAgICAgICAgICAgemhv bWUoKSwKKyAgICAgICAgICAgICAgICAgICAgemhvbWUoKSwgIlBIT05FUy8iLAorICAgICAgICAg ICAgICAgICAgICBleGVkaXIsCisgICAgICAgICAgICAgICAgICAgIGV4ZWRpciwgIlBIT05FUy8i CisgICAgICAgICAgICAgICAgICAgICk7CisjaWZkZWYgTlQKKyAgICAgICAgICAgIG1ha2VzdHIo JmFwcGRhdGEwLE5VTEwpOworICAgICAgICAgICAgbWFrZXN0cigmYXBwZGF0YTEsTlVMTCk7Cisj ZW5kaWYgLyogTlQgKi8KKyNlbHNlCisjaWZkZWYgVU5JWAorICAgICAgICAgICAgeSA9IDEwMjQ7 CisgICAgICAgICAgICBzID0gZGlycGF0aDsKKyAgICAgICAgICAgIHp6c3RyaW5nKCJcXHYoaG9t ZSkiLCZzLCZ5KTsKKyNlbmRpZiAvKiBVTklYICovCisjZW5kaWYgLyogT1MyICovCisgICAgICAg ICAgICB5ID0gY21pZmlwKAorICAgICAgICAgICAgICAgICAgIk5hbWVzIG9mIG9uZSBvciBtb3Jl IGRpcmVjdG9yeSBmaWxlcywgc2VwYXJhdGVkIGJ5IHNwYWNlcyIsCisgICAgICAgICAgICAgICAg ICAgICAgICIiLCZzLCZ4LDAsCisjaWZkZWYgT1MyT1JVTklYCisgICAgICAgICAgICAgICAgICAg ICAgIGRpcnBhdGgsCisjZWxzZQorICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAorI2VuZGlm IC8qIE9TMk9SVU5JWCAqLworICAgICAgICAgICAgICAgICAgICAgICB4eHN0cmluZworICAgICAg ICAgICAgICAgICAgICAgICApOworICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAg ICAgIC8qIExpc3Qgb2YgZGlyZWN0b3J5IG5hbWVzICovCisgICAgICAgICAgICB4ID0gMDsKKyAg ICAgICAgICAgIHkgPSBjbWRpcigiRGlyZWN0b3J5IG5hbWUiLCIiLCZzLHh4c3RyaW5nKTsKKyAg ICAgICAgfQorICAgICAgICBpZiAoeSA8IDApIHsKKyAgICAgICAgICAgIGlmICh5ID09IC0zKSB7 ICAgICAgICAgICAgICAvKiBFT0wgb3IgdXNlciB0eXBlZCA8Q1I+ICovCisgICAgICAgICAgICAg ICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeSk7CisgICAgICAgICAgICAgICAgZm9y IChpID0gMDsgaSA8IG1heDsgaSsrKSB7IC8qIENsZWFyIHRoZXNlICovCisgICAgICAgICAgICAg ICAgICAgIGlmIChpIDwgbnhkaXIgJiYgeGRpcltpXSkgeworICAgICAgICAgICAgICAgICAgICAg ICAgZnJlZSh4ZGlyW2ldKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg ICAgICB4ZGlyW2ldID0gKGkgPCBkZCkgPyBwcFtpXSA6IE5VTEw7CisgICAgICAgICAgICAgICAg fQorI2lmbmRlZiBOT0RJQUwKKyAgICAgICAgICAgICAgICBpZiAoY3ggPT0gMCkKKyAgICAgICAg ICAgICAgICAgIG5kaWFsZGlyID0gZGQ7CisjaWZkZWYgTkVUQ09OTgorICAgICAgICAgICAgICAg IGlmIChjeCA9PSAxKQorICAgICAgICAgICAgICAgICAgbm5ldGRpciA9IGRkOworI2VuZGlmIC8q IE5FVENPTk4gKi8KKyNlbmRpZiAvKiBOT0RJQUwgKi8KKyNpZm5kZWYgTk9TRVJWRVIKKyAgICAg ICAgICAgICAgICBpZiAoY3ggPT0gMikKKyAgICAgICAgICAgICAgICAgIG5nZXRwYXRoID0gZGQ7 CisjZW5kaWYgLyogTk9TRVJWRVIgKi8KKyAgICAgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9 IDEpOworCisgICAgICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgLyogUGFyc2Ug ZXJyb3IgKi8KKyAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZGQ7IGkrKykgeyAgLyog RnJlZSB0ZW1wIHN0b3JhZ2UgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKHBwW2ldKSBmcmVl KHBwW2ldKTsgLyogYnV0IGRvbid0IGNoYW5nZSAqLworICAgICAgICAgICAgICAgICAgICBwcFtp XSA9IE5VTEw7ICAgICAgICAgICAvKiBhbnl0aGluZyBlbHNlICovCisgICAgICAgICAgICAgICAg fQorICAgICAgICAgICAgICAgIHJldHVybih5KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor ICAgICAgICBpZiAoeCkgeworICAgICAgICAgICAgcHJpbnRmKCI/V2lsZGNhcmRzIG5vdCBhbGxv d2VkXG4iKTsKKyAgICAgICAgICAgIHJldHVybigtOSk7CisgICAgICAgIH0KKyNpZmRlZiBDS19U TVBESVIKKyAgICAgICAgaWYgKGN4ID09IDIgJiYgIWlzZGlyKHMpKSB7CisgICAgICAgICAgICBw cmludGYoIj9Ob3QgYSBkaXJlY3RvcnkgLSAlc1xuIiwgcyk7CisgICAgICAgICAgICByZXR1cm4o LTkpOworICAgICAgICB9CisjZW5kaWYgLyogQ0tfVE1QRElSICovCisKKyNpZmRlZiBaRk5RRlAK KyAgICAgICAgaWYgKGN4IDwgMikgeworICAgICAgICAgICAgaWYgKCFpc2Fic29sdXRlKHMpKSB7 ICAgICAgIC8qIElmIG5vdCByZWxhdGl2ZSBnZXQgZnVsbCBwYXRoICovCisgICAgICAgICAgICAg ICAgaWYgKChmbnAgPSB6Zm5xZnAocyxUTVBCVUZTSVogLSAxLHRtcGJ1ZikpKSB7CisgICAgICAg ICAgICAgICAgICAgIGlmIChmbnAtPmZwYXRoKQorICAgICAgICAgICAgICAgICAgICAgIGlmICgo aW50KSBzdHJsZW4oZm5wLT5mcGF0aCkgPiAwKQorICAgICAgICAgICAgICAgICAgICAgICAgcyA9 IGZucC0+ZnBhdGg7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9 CisjZW5kaWYgLyogWkZOUUZQICovCisgICAgICAgIGMgPSBOVUw7CisgICAgICAgIHggPSBzdHJs ZW4ocyk7CisgICAgICAgIGlmICh4ID4gMCkgICAgICAgICAgICAgICAgICAgICAgLyogR2V0IGxh c3QgY2hhciAqLworICAgICAgICAgIGMgPSBzW3gtMV07CisgICAgICAgIGRlYnVnKEYwMDAsInBh cnNkaXIgcyIscyxjKTsKKyAgICAgICAgaWYgKChwcFtkZF0gPSBtYWxsb2Moc3RybGVuKHMpKzIp KSA9PSBOVUxMKSB7CisgICAgICAgICAgICBwcmludGYoIj9JbnRlcm5hbCBlcnJvciAtIG1hbGxv Y1xuIik7CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZGQ7IGkrKykgeyAgLyogRnJlZSB0 ZW1wIHN0b3JhZ2UgKi8KKyAgICAgICAgICAgICAgICBpZiAocHBbaV0pIGZyZWUocHBbaV0pOwor ICAgICAgICAgICAgICAgIHBwW2ldID0gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg IHJldHVybigtOSk7CisgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyog SGF2ZSBzdG9yYWdlIGZvciBuYW1lICovCisgICAgICAgICAgICBzdHJjcHkocHBbZGRdLHMpOyAg ICAgICAgICAgLyogQ29weSBzdHJpbmcgaW50byBuZXcgc3RvcmFnZSAqLworICAgICAgICAgICAg ZGVidWcoRjExMSwicGFyc2RpciBwcFtkZF0gMSIscHBbZGRdLGRkKTsKKyNpZm5kZWYgTk9YRkVS CisgICAgICAgICAgICBpZiAoY3ggPT0gMikgeyAgICAgICAgICAgICAgLyogSWYgd2UgYXJlIHBh cnNpbmcgZGlyZWN0b3JpZXMgKi8KKyAgICAgICAgICAgICAgICBjaGFyIGRpcnNlcFsyXTsKKyAg ICAgICAgICAgICAgICBleHRlcm4gaW50IG15aW5kZXg7ICAgICAvKiBBcHBlbmQgZGlyZWN0b3J5 IHNlcGFyYXRvciBpZiAqLworICAgICAgICAgICAgICAgIGV4dGVybiBzdHJ1Y3Qgc3lzZGF0YSBz eXNpZGxpc3RbXTsgLyogaXQgaXMgbWlzc2luZy4uLiAgICovCisgICAgICAgICAgICAgICAgZGVi dWcoRjEwMSwicGFyc2RpciBteWluZGV4IiwiIixteWluZGV4KTsKKyAgICAgICAgICAgICAgICBp ZiAobXlpbmRleCA+IC0xKQorICAgICAgICAgICAgICAgICAgaWYgKHN5c2lkbGlzdFtteWluZGV4 XS5zaWRfdW5peGxpa2UpCisgICAgICAgICAgICAgICAgICAgIGlmIChjICE9IHN5c2lkbGlzdFtt eWluZGV4XS5zaWRfZGlyc2VwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkaXJzZXBbMF0g PSBzeXNpZGxpc3RbbXlpbmRleF0uc2lkX2RpcnNlcDsKKyAgICAgICAgICAgICAgICAgICAgICAg IGRpcnNlcFsxXSA9IE5VTDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cmNhdChwcFtkZF0s IChjaGFyICopIGRpcnNlcCk7IC8qIHNhZmUgKi8KKyAgICAgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgfQorI2VuZGlmIC8qIE5PWEZFUiAqLworICAgICAgICAgICAgZGVidWcoRjExMSwi cGFyc2RpciBwcFtkZF0gMiIscHBbZGRdLGRkKTsKKyAgICAgICAgICAgIGlmICgrK2RkID4gbWF4 KSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCI/VG9vIG1hbnkgZGlyZWN0b3JpZXMgLSAlZCBt YXhcbiIsIG1heCk7CisgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGRkOyBpKyspIHsg IC8qIEZyZWUgdGVtcCBzdG9yYWdlICovCisgICAgICAgICAgICAgICAgICAgIGlmIChwcFtpXSkg ZnJlZShwcFtpXSk7CisgICAgICAgICAgICAgICAgICAgIHBwW2ldID0gTlVMTDsKKyAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgLyogQ0tf UEFSU0RJUiAqLworfQorI2VuZGlmIC8qIE5PU1BMICovCisKKyNpZm5kZWYgTk9TRVJWRVIKK3N0 YXRpYyBpbnQKK2NrbG9naW4oKSB7CisgICAgaW50IHg7CisgICAgY2hhciAqIHM7CisgICAgY2hh ciB1c2VybmFtZVtMT0dJTkxFTisxXTsKKyAgICBjaGFyIHBhc3N3b3JkW0xPR0lOTEVOKzFdOwor ICAgIGNoYXIgYWNjb3VudFtMT0dJTkxFTisxXTsKKyAgICBleHRlcm4gY2hhciAqIHhfdXNlciwg KiB4X3Bhc3N3ZCwgKiB4X2FjY3Q7CisgICAgZXh0ZXJuIGludCB4X2xvZ2luLCB4X2xvZ2dlZDsK KworICAgIHVzZXJuYW1lWzBdID0gTlVMOworICAgIHBhc3N3b3JkWzBdID0gTlVMOworICAgIGFj Y291bnRbMF0gID0gTlVMOworCisgICAgeCA9IGNtZmxkKCJ1c2VybmFtZSIsICIiLCAmcywgeHhz dHJpbmcpOworICAgIGlmICh4ICE9IC0zKSB7CisgICAgICAgIGlmICh4IDwgMCkKKyAgICAgICAg ICByZXR1cm4oeCk7CisgICAgICAgIGlmICgoaW50KXN0cmxlbihzKSA+IExPR0lOTEVOKSB7Cisg ICAgICAgICAgICBwcmludGYoIlwiJXNcIiAtIHRvbyBsb25nLCAlZCBtYXhcbiIsIHMsIExPR0lO TEVOKTsKKyAgICAgICAgICAgIHJldHVybigtOSk7CisgICAgICAgIH0KKyAgICAgICAgY2tzdHJu Y3B5KHVzZXJuYW1lLHMsTE9HSU5MRU4rMSk7CisgICAgICAgIHggPSBjbWZsZCgicGFzc3dvcmQi LCAiIiwgJnMsIHh4c3RyaW5nKTsKKyAgICAgICAgaWYgKHggIT0gLTMpIHsKKyAgICAgICAgICAg IGlmICh4IDwgMCkKKyAgICAgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICAgICAgaWYgKChp bnQpc3RybGVuKHMpID4gTE9HSU5MRU4pIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIlwiJXNc IiAtIHRvbyBsb25nLCAlZCBtYXhcbiIsIHMsIExPR0lOTEVOKTsKKyAgICAgICAgICAgICAgICBy ZXR1cm4oLTkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2tzdHJuY3B5KHBhc3N3b3Jk LHMsTE9HSU5MRU4rMSk7CisgICAgICAgICAgICB4ID0gY21mbGQoImFjY291bnQiLCAiIiwgJnMs IHh4c3RyaW5nKTsKKyAgICAgICAgICAgIGlmICh4ICE9IC0zKSB7CisgICAgICAgICAgICAgICAg aWYgKHggPCAwKQorICAgICAgICAgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICAgICAgICAg IGlmICgoaW50KXN0cmxlbihzKSA+IExPR0lOTEVOKSB7CisgICAgICAgICAgICAgICAgICAgIHBy aW50ZigiXCIlc1wiIC0gdG9vIGxvbmcsICVkIG1heFxuIiwgcywgTE9HSU5MRU4pOworICAgICAg ICAgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg ICAgICBja3N0cm5jcHkoYWNjb3VudCxzLExPR0lOTEVOKzEpOworICAgICAgICAgICAgICAgIGlm ICgoeCA9IGNtY2ZtKCkpIDwgMCkKKyAgICAgICAgICAgICAgICAgIHJldHVybih4KTsKKyAgICAg ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBtYWtlc3RyKCZ4X3VzZXIsdXNlcm5hbWUp OworICAgIG1ha2VzdHIoJnhfcGFzc3dkLHBhc3N3b3JkKTsKKyAgICBtYWtlc3RyKCZ4X2FjY3Qs YWNjb3VudCk7CisgICAgeF9sb2dpbiA9ICh4X3VzZXIpID8gMSA6IDA7CisgICAgeF9sb2dnZWQg PSAwOworICAgIHJldHVybigxKTsKK30KKyNlbmRpZiAvKiBOT1NFUlZFUiAqLworCisjaWZuZGVm IE5PTE9DQUwKK3N0YXRpYyBpbnQKK3NldGRjZCgpIHsKKyAgICBpbnQgeCwgeSwgeiA9IDA7Cisg ICAgaWYgKCh5ID0gY21rZXkoY3JydGFiLG5jcnIsIiIsImF1dG9tYXRpYyIseHhzdHJpbmcpKSA8 IDApIHJldHVybih5KTsKKyAgICBpZiAoeSA9PSBDQVJfT04pIHsKKyAgICAgICAgeCA9IGNtbnVt KCJDYXJyaWVyIHdhaXQgdGltZW91dCwgc2Vjb25kcyIsIjAiLDEwLCZ6LHh4c3RyaW5nKTsKKyAg ICAgICAgaWYgKHggPCAwKSByZXR1cm4oeCk7CisgICAgfQorICAgIGlmICgoeCA9IGNtY2ZtKCkp IDwgMCkgcmV0dXJuKHgpOworICAgIGNhcnJpZXIgPSB0dHNjYXJyKHkpOworICAgIGNkdGltbyA9 IHo7CisgICAgcmV0dXJuKDEpOworfQorI2VuZGlmIC8qIE5PTE9DQUwgKi8KKworZXh0ZXJuIHN0 cnVjdCBrZXl0YWIgeWVzbm9bXTsKK2V4dGVybiBpbnQgbnllc25vOworCisvKiBnIGUgdCB5IGUg cyBuIG8gICovCisKK3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIHEweWVzbm9bXSA9IHsgICAgICAvKiBZ ZXMvTm8vUXVpdCBrZXl3b3JkIHRhYmxlICovCisgICAgIm5vIiwgICAgMCwgMCwKKyAgICAib2si LCAgICAxLCAwLAorICAgICJ5ZXMiLCAgIDEsIDAKK307CitzdGF0aWMgaW50IG5xMHllc25vID0g KHNpemVvZihxMHllc25vKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7CisKK3N0YXRpYyBzdHJ1 Y3Qga2V5dGFiIHExeWVzbm9bXSA9IHsgICAgICAvKiBZZXMvTm8vUXVpdCBrZXl3b3JkIHRhYmxl ICovCisgICAgIm5vIiwgICAgMCwgMCwKKyAgICAib2siLCAgICAxLCAwLAorICAgICJxdWl0Iiwg IDIsIDAsCisgICAgInllcyIsICAgMSwgMAorfTsKK3N0YXRpYyBpbnQgbnExeWVzbm8gPSAoc2l6 ZW9mKHExeWVzbm8pIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKKworc3RhdGljIHN0cnVjdCBr ZXl0YWIgcTJ5ZXNub1tdID0geyAgICAgIC8qIFllcy9Oby9RdWl0IGtleXdvcmQgdGFibGUgKi8K KyAgICAiZ28iLCAgICAzLCAwLAorICAgICJubyIsICAgIDAsIDAsCisgICAgIm9rIiwgICAgMSwg MCwKKyAgICAieWVzIiwgICAxLCAwCit9Oworc3RhdGljIGludCBucTJ5ZXNubyA9IChzaXplb2Yo cTJ5ZXNubykgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpOworCitzdGF0aWMgc3RydWN0IGtleXRh YiBxM3llc25vW10gPSB7ICAgICAgLyogWWVzL05vL1F1aXQga2V5d29yZCB0YWJsZSAqLworICAg ICJnbyIsICAgIDMsIDAsCisgICAgIm5vIiwgICAgMCwgMCwKKyAgICAib2siLCAgICAxLCAwLAor ICAgICJxdWl0IiwgIDIsIDAsCisgICAgInllcyIsICAgMSwgMAorfTsKK3N0YXRpYyBpbnQgbnEz eWVzbm8gPSAoc2l6ZW9mKHEzeWVzbm8pIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKKworCisv KiBBc2sgcXVlc3Rpb24sIGdldCB5ZXMvbm8gYW5zd2VyICovCisKK2ludAorZ2V0eWVzbm8obXNn LCBmbGFncykgY2hhciAqIG1zZzsgaW50IGZsYWdzOyB7CisjaWZkZWYgQ0tfUkVDQUxMCisgICAg ZXh0ZXJuIGludCBvbl9yZWNhbGw7ICAgICAgICAgICAgICAgLyogYXJvdW5kIFBhc3N3b3JkIHBy b21wdGluZyAqLworI2VuZGlmIC8qIENLX1JFQ0FMTCAqLworICAgIGludCB5LCB6OworCisjaWZu ZGVmIE5PTE9DQUwKKyNpZmRlZiBPUzIKKyAgICBleHRlcm4gaW50IHZtb2RlLCB3aW45NV9wb3B1 cCwgc3RhcnRmbGFnczsKKyAgICBpbnQgdm1vZGVfc2F2ID0gdm1vZGU7CisjZW5kaWYgLyogT1My ICovCisjZW5kaWYgLyogTk9MT0NBTCAqLworCisjaWZkZWYgQ0tfQVBDCisgICAgaWYgKCBhcGNh Y3RpdmUgIT0gQVBDX0lOQUNUSVZFICYmIChhcGNzdGF0dXMgJiBBUENfTk9JTlApICkgeworICAg ICAgICByZXR1cm4oc3VjY2VzcyA9IDApOworICAgIH0KKyNlbmRpZiAvKiBDS19BUEMgKi8KKwor I2lmbmRlZiBOT0xPQ0FMCisjaWZkZWYgT1MyCisjaWZkZWYgQ09NTUVOVAorICAgIGlmICh3aW45 NV9wb3B1cCAmJiAhKHN0YXJ0ZmxhZ3MgJiA5NikKKyNpZmRlZiBJS1NECisgICAgICAgICYmICFp bnNlcnZlcgorI2VuZGlmIC8qIElLU0QgKi8KKyAgICAgICAgKQorICAgICAgcmV0dXJuKHBvcHVw X3JlYWR5ZXNubyh2bW9kZSxOVUxMLG1zZyxmbGFncykpOworI2VuZGlmIC8qIENPTU1FTlQgKi8K KyAgICBpZiAodm1vZGUgPT0gVlRFUk0pIHsKKyAgICAgICAgdm1vZGUgPSBWQ01EOworICAgICAg ICBWc2NybklzRGlydHkoVlRFUk0pOworICAgICAgICBWc2NybklzRGlydHkoVkNNRCk7CisgICAg fQorI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIE5PTE9DQUwgKi8KKyNpZmRlZiBWTVMKKy8q CisgIEluIFZNUywgd2hlbmV2ZXIgYSBUQUtFIGZpbGUgb3IgbWFjcm8gaXMgYWN0aXZlLCB3ZSBy ZXN0b3JlIHRoZQorICBvcmlnaW5hbCBjb25zb2xlIG1vZGVzIHNvIEN0cmwtQy9DdHJsLVkgY2Fu IHdvcmsuICBCdXQgaGVyZSB3ZQorICBnbyBpbnRlcmFjdGl2ZSBhZ2Fpbiwgc28gd2UgaGF2ZSB0 byB0ZW1wb3JhcmlseSBwdXQgdGhlbSBiYWNrLgorKi8KKyAgICBpZiAoIXhjbWRzcmMpCisgICAg ICBjb25jYigoY2hhcillc2NhcGUpOworI2VuZGlmIC8qIFZNUyAqLworCisjaWZkZWYgQ0tfUkVD QUxMCisgICAgb25fcmVjYWxsID0gMDsKKyNlbmRpZiAvKiBDS19SRUNBTEwgKi8KKyAgICBjbXNh dnAocHNhdmUsUFJPTVBUTCk7ICAgICAgICAgICAgICAvKiBTYXZlIG9sZCBwcm9tcHQgKi8KKyAg ICBjbXNldHAobXNnKTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBNYWtlIG5ldyBwcm9tcHQg Ki8KKyAgICB6ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJbml0aWFsaXpl IGFuc3dlciB0byBOby4gKi8KKyAgICBjbWluaShja3hlY2gpOyAgICAgICAgICAgICAgICAgICAg ICAvKiBJbml0aWFsaXplIHBhcnNlci4gKi8KKyAgICBkbyB7CisgICAgICAgIHByb21wdChOVUxM KTsgICAgICAgICAgICAgICAgICAgLyogSXNzdWUgcHJvbXB0LiAqLworICAgICAgICBzd2l0Y2gg KGZsYWdzKSB7CisgICAgICAgICAgY2FzZSAwOiAgeSA9IGNta2V5KHEweWVzbm8sbnEweWVzbm8s IiIsIiIsTlVMTCk7IGJyZWFrOworICAgICAgICAgIGNhc2UgMTogIHkgPSBjbWtleShxMXllc25v LG5xMXllc25vLCIiLCIiLE5VTEwpOyBicmVhazsKKyAgICAgICAgICBjYXNlIDI6ICB5ID0gY21r ZXkocTJ5ZXNubyxucTJ5ZXNubywiIiwiIixOVUxMKTsgYnJlYWs7CisgICAgICAgICAgZGVmYXVs dDogeSA9IGNta2V5KHEzeWVzbm8sbnEzeWVzbm8sIiIsIiIsTlVMTCk7CisgICAgICAgIH0KKyAg ICAgICAgaWYgKHkgPCAwKSB7CisgICAgICAgICAgICBpZiAoeSA9PSAtNCkgeyAgICAgICAgICAg ICAgLyogRU9GICovCisgICAgICAgICAgICAgICAgeiA9IHk7CisgICAgICAgICAgICAgICAgYnJl YWs7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHkgPT0gLTMpICAgICAgICAgLyogTm8gYW5zd2Vy PyAqLworICAgICAgICAgICAgICBwcmludGYoIiBQbGVhc2UgcmVzcG9uZDsgdHlwZSAnPycgdG8g c2VlIHZhbGlkIGFuc3dlcnMuXG4iKTsKKyAgICAgICAgICAgIGNtaW5pKGNreGVjaCk7CisgICAg ICAgIH0gZWxzZSB7CisgICAgICAgICAgICB6ID0geTsgICAgICAgICAgICAgICAgICAgICAgLyog U2F2ZSBhbnN3ZXIgKi8KKyAgICAgICAgICAgIHkgPSBjbWNmbSgpOyAgICAgICAgICAgICAgICAv KiBHZXQgY29uZmlybWF0aW9uICovCisgICAgICAgIH0KKyAgICB9IHdoaWxlICh5IDwgMCk7ICAg ICAgICAgICAgICAgICAgICAvKiBDb250aW51ZSB0aWxsIGRvbmUgKi8KKyAgICBjbXNldHAocHNh dmUpOyAgICAgICAgICAgICAgICAgICAgICAvKiBSZXN0b3JlIHJlYWwgcHJvbXB0ICovCisjaWZk ZWYgVk1TCisgICAgaWYgKGNtZGx2bCA+IDApICAgICAgICAgICAgICAgICAgICAgLyogSW4gVk1T IGFuZCBub3QgYXQgdG9wIGxldmVsLCAqLworICAgICAgY29ucmVzKCk7ICAgICAgICAgICAgICAg ICAgICAgICAgIC8qICByZXN0b3JlIGNvbnNvbGUgYWdhaW4uICovCisjZW5kaWYgLyogVk1TICov CisjaWZuZGVmIE5PTE9DQUwKKyNpZmRlZiBPUzIKKyAgICBpZiAodm1vZGUgIT0gdm1vZGVfc2F2 KSB7CisgICAgICAgIHZtb2RlID0gVlRFUk07CisgICAgICAgIFZzY3JuSXNEaXJ0eShWQ01EKTsK KyAgICAgICAgVnNjcm5Jc0RpcnR5KFZURVJNKTsKKyAgICB9CisjZW5kaWYgLyogT1MyICovCisj ZW5kaWYgLyogTk9MT0NBTCAqLworICAgIHJldHVybih6KTsKK30KKworI2lmZGVmIEtVSQorZXh0 ZXJuIEhXTkQgaHduZENvbnNvbGU7CitfUFJPVE9UWVAoaW50IGd1aV90eHRfZGlhbG9nLChjaGFy ICosY2hhciAqLGludCxjaGFyICosaW50LGNoYXIgKixpbnQpKTsKK19QUk9UT1RZUChpbnQgZ3Vp X210eHRfZGlhbG9nLChjaGFyICosaW50LHN0cnVjdCB0eHRib3ggW10pKTsKK19QUk9UT1RZUChp bnQgZ3VpX3Bvc2l0aW9uLChpbnQsIGludCkpOworX1BST1RPVFlQKGludCBndWlfcmVzaXplX21v ZGUsKGludCkpOworX1BST1RPVFlQKGludCBndWlfd2luX3J1bl9tb2RlLChpbnQpKTsKK19QUk9U T1RZUChpbnQgZ3VpX3NhdmVhc19kaWFsb2csKGNoYXIgKixjaGFyICosIGludCwgY2hhciAqLCBj aGFyICosIGludCkpOworZXh0ZXJuIGludCBndWlfZGlhbG9nOworI2VuZGlmIC8qIEtVSSAqLwor CisvKiB1IHEgXyBvIGsgIC0tICBVc2VyIFF1ZXJ5LCBnZXQgWWVzL05vIG9yIE9LIENhbmNlbCAg Ki8KKy8qCisgIENhbGwgd2l0aDogIAorICAgIHByZWZhY2U6IEV4cGxhbmF0b3J5IHRleHQgdG8g cHJpbnQsIG9yIE5VTEwuCisgICAgcHJvbXB0OiAgUHJvbXB0LgorICAgIG1hc2s6ICAgIEJpdG1h c2sgZm9yIGxlZ2FsIHJlc3BvbnNlczogMSA9IE9LIG9yIFllczsgMiA9IE5vIG9yIENhbmNlbC4K KyAgICBoZWxwOiAgICBIZWxwIHRleHQgKGFycmF5IG9mIHN0cmluZ3Mgb3IgTlVMTCkgW25vdCB1 c2VkIGJ5IHBhcnNlcl0uCisgICAgZGZsdDogICAgRGVmYXVsdCByZXNwb25zZSAoMSBvciAyKSBb bm90IHVzZWQgYnkgcGFyc2VyXS4KKyAgUmV0dXJuczoKKyAgIC0xOiAgICAgICBJbnZhbGlkIGFy Z3VtZW50KHMpLgorICAgIDA6ICAgICAgIFVzZXIgc2FpZCBObyBvciBDYW5jZWwuCisgICAgMSAg ICAgICAgVXNlciBzYWlkIFllcyBvciBPSy4gICAgCisgIE5vdGVzOgorICAgIHByZWZhY2UgYW5k IHByb21wdCBzaG91bGQgbm90IGluY2x1ZGUgZmluYWwgbGluZSB0ZXJtaW5hdG9yIGJ1dCBtYXkK KyAgICBpbmNsdWRlIGVtYmVkZGVkIG9uZXMuICBIZWxwIHRleHQgaXMgaW4gY2FzZSBHVUkgZGlh bG9nIG5lZWRzIGEgSGVscAorICAgIGJ1dHRvbjsgZmluYWwgZWxlbWVudCBvZiBoZWxwLXN0cmlu ZyBhcnJheSBpcyAiIi4gIGRmbHQgaXMgdXNlZCBieSBHVUkKKyAgICB0byBoaWdobGlnaHQgdGhl IGRlZmF1bHQgcmVzcG9uc2UgYnV0dG9uLgorKi8KK2ludAorI2lmZGVmIENLX0FOU0lDCit1cV9v ayhjaGFyICogcHJlZmFjZSwgY2hhciAqIHByb21wdCwgaW50IG1hc2ssY2hhciAqKiBoZWxwLCBp bnQgZGZsdCkKKyNlbHNlIC8qIENLX0FOU0lDICovCit1cV9vayhwcmVmYWNlLHByb21wdCxtYXNr LGhlbHAsZGZsdCkKKyAgICBjaGFyICogcHJlZmFjZSwgKiBwcm9tcHQsICoqIGhlbHA7CisgICAg aW50IG1hc2ssIGRmbHQ7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIHVxX29rICovIHsKKyAg ICBpbnQgcmMsIGxlbjsKKyAgICBjaGFyICogdGV4dD1OVUxMOworCisgICAgaWYgKCFwcm9tcHQp CisgICAgICByZXR1cm4oLTEpOworCisgICAgaWYgKChtYXNrICYgMykgPT0gMSkgewkJLyogT0sg KEdVSSBvbmx5KSAqLworI2lmZGVmIEtVSQorICAgICAgaWYgKCBndWlfZGlhbG9nICkgeworCS8q IFRoaXMgb25lIGlzIGZvciBwb3B1cCBoZWxwLCBhbGVydHMsIGV0YyAqLworICAgICAgICBpZiAo cHJlZmFjZSkgeworICAgICAgICAgICAgbGVuID0gc3RybGVuKHByZWZhY2UpICsgc3RybGVuKHBy b21wdCkgKyA0OworICAgICAgICAgICAgdGV4dCA9IChjaGFyICopbWFsbG9jKGxlbik7CisgICAg ICAgICAgICBja21ha21zZyh0ZXh0LGxlbixwcmVmYWNlLCJcbiIscHJvbXB0LE5VTEwpOworICAg ICAgICB9CisgICAgICAgIHJjID0gTWVzc2FnZUJveChod25kQ29uc29sZSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICB0ZXh0ID8gdGV4dCA6IHByb21wdCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICBwcm9tcHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgTUJfT0sgfCBNQl9JQ09OSU5G T1JNQVRJT04gfCBNQl9UQVNLTU9EQUwpOworICAgICAgICBTaG93V2luZG93QXN5bmMoaHduZENv bnNvbGUsU1dfU0hPV05PUk1BTCk7CisgICAgICAgIFNldEZvcmVncm91bmRXaW5kb3coaHduZENv bnNvbGUpOworICAgICAgICBpZiAodGV4dCkKKwkgIGZyZWUodGV4dCk7CisgICAgICAgIGlmICgh cmMpCisJICByZXR1cm4oLTEpOworICAgICAgICBlbHNlIAorCSAgcmV0dXJuKDEpOworICAgICAg fSBlbHNlCisjZW5kaWYgIC8qIEtVSSAqLworICAgICAgeworCWlmIChwcmVmYWNlKQkJCS8qIEp1 c3QgZGlzcGxheSB0aGUgdGV4dCwgaWYgYW55ICovCisJICBwcmludGYoIiVzXG4iLHByZWZhY2Up OworCWlmIChwcm9tcHQpCisJICBwcmludGYoIiVzXG4iLHByb21wdCk7CisgICAgICAgIHJldHVy bigxKTsKKyAgICAgIH0KKyAgICB9IGVsc2UgaWYgKChtYXNrICYgMykgPT0gMykgewkvKiBZZXMv Tm8gb3IgT0svQ2FuY2VsICovCisjaWZkZWYgS1VJCisgICAgICBpZiAoIGd1aV9kaWFsb2cgKSB7 CisgICAgICAgIGlmIChwcmVmYWNlKSB7CisgICAgICAgICAgICBsZW4gPSBzdHJsZW4ocHJlZmFj ZSkgKyBzdHJsZW4ocHJvbXB0KSArIDQ7CisgICAgICAgICAgICB0ZXh0ID0gKGNoYXIgKiltYWxs b2MobGVuKTsKKyAgICAgICAgICAgIGNrbWFrbXNnKHRleHQsbGVuLHByZWZhY2UsIlxuIixwcm9t cHQsTlVMTCk7CisgICAgICAgIH0KKyAgICAgICAgcmMgPSBNZXNzYWdlQm94KGh3bmRDb25zb2xl LAorICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQgPyB0ZXh0IDogcHJvbXB0LAorICAgICAg ICAgICAgICAgICAgICAgICAgIHByb21wdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBNQl9Z RVNOTyB8IE1CX0lDT05JTkZPUk1BVElPTiB8IE1CX1RBU0tNT0RBTCB8IAorICAgICAgICAgICAg ICAgICAgICAgICAgIChkZmx0ID09IDIgPyBNQl9ERUZCVVRUT04yIDogTUJfREVGQlVUVE9OMSkp OworICAgICAgICBTaG93V2luZG93QXN5bmMoaHduZENvbnNvbGUsU1dfU0hPV05PUk1BTCk7Cisg ICAgICAgIFNldEZvcmVncm91bmRXaW5kb3coaHduZENvbnNvbGUpOworICAgICAgICBpZiAodGV4 dCkKKwkgIGZyZWUodGV4dCk7CisgICAgICAgIGlmICghcmMpCisJICByZXR1cm4oLTEpOworICAg ICAgICBlbHNlIGlmIChyYyA9PSBJRE5PIHx8IHJjID09IElEQ0FOQ0VMKQorCSAgcmV0dXJuKDAp OworICAgICAgICBlbHNlCisJICByZXR1cm4oMSk7CisgICAgICB9IGVsc2UKKyNlbmRpZiAgLyog S1VJICovCisgICAgICB7CisJaWYgKHByZWZhY2UpCisJICBwcmludGYoIiVzXG4iLHByZWZhY2Up OworCXJldHVybihnZXR5ZXNubyhwcm9tcHQsMCkpOworICAgICAgfQorICAgIH0gZWxzZSB7CisJ cHJpbnRmKCI/SW50ZXJuYWwgZXJyb3I6IHVxX29rKClcbiIpOworCXJldHVybigtMSk7CisgICAg fQorfQorCisvKiB1IHEgXyB0IHggdCAgLS0gIFVzZXIgUXVlcnksIGdldCBzaW5nbGUgdGV4dCBy ZXNwb25zZSAgKi8KKy8qCisgIENhbGwgd2l0aDogIAorICAgIHByZWZhY2U6IEV4cGxhbmF0b3J5 IHRleHQgdG8gcHJpbnQsIG9yIE5VTEwuCisgICAgcHJvbXB0OiAgUHJvbXB0LiAKKyAgICBlY2hv OiAgICAwID0gZG9uJ3QgZWNobzsgMSA9IGVjaG87IDIgPSBlY2hvIHdpdGggYXN0ZXJpc2tzLgor ICAgIGhlbHA6ICAgIEhlbHAgdGV4dCAoYXJyYXkgb2Ygc3RyaW5ncyBvciBOVUxMKSBbbm90IHVz ZWQgYnkgcGFyc2VyXS4KKyAgICBidWY6ICAgICBQb2ludGVyIHRvIHJlc3VsdCBidWZmZXIuCisg ICAgYnVmbGVuOiAgTGVuZ3RoIG9mIHJlc3VsdCBidWZmZXIuCisgICAgZGZsdDogICAgRGVmYXVs dCByZXNwb25zZSB0ZXh0IG9yIE5VTEwgW25vdCB1c2VkIGJ5IHBhcnNlcl0uCisgICAgdGltZXI6 ICAgT3B0aW9uYWwgVGltZW91dAorICBSZXR1cm5zOgorICAgIDA6ICAgICAgIFVzZXIgc2FpZCBO byBvciBDYW5jZWwuCisgICAgMSAgICAgICAgVXNlciBzYWlkIFllcyBvciBPSy4gICAgCisgIE5v dGVzOgorICAgIHByZWZhY2UsIHByb21wdCwgYW5kIGhlbHAgYXMgZm9yIHVxX29rKCkuCisqLwor aW50CisjaWZkZWYgQ0tfQU5TSUMKK3VxX3R4dChjaGFyICogcHJlZmFjZSwgY2hhciAqIHByb21w dCwgaW50IGVjaG8sIGNoYXIgKiogaGVscCwgY2hhciAqIGJ1ZiwgCisgICAgICAgaW50IGJ1Zmxl biwgY2hhciAqZGZsdCwgaW50IHRpbWVyKQorI2Vsc2UgLyogQ0tfQU5TSUMgKi8KK3VxX3R4dChw cmVmYWNlLHByb21wdCxlY2hvLGhlbHAsYnVmLGJ1ZmxlbixkZmx0LHRpbWVyKQorICAgIGNoYXIg KiBwcmVmYWNlLCAqIHByb21wdCwgKiogaGVscCwgKiBidWYsICogZGZsdDsgCisgICAgaW50IGJ1 ZmxlbiwgZWNobywgdGltZXI7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyNpZm5kZWYgTk9M T0NBTAorI2lmZGVmIE9TMgorICAgIGV4dGVybiBpbnQgdm1vZGU7CisgICAgZXh0ZXJuIGludCBz dGFydGZsYWdzOworICAgIGV4dGVybiBpbnQgd2luOTVfcG9wdXA7CisjZW5kaWYgLyogT1MyICov CisjZW5kaWYgLyogTk9MT0NBTCAqLworICAgIGludCByYzsgCisKKyAgICBpZiAoYnVmbGVuIDwg MSB8fCAhYnVmKQorICAgICAgcmV0dXJuKDApOworI2lmZGVmIEtVSQorICAgIGlmICggZ3VpX2Rp YWxvZyApIHsKKyAgICAgICAgcmMgPSBndWlfdHh0X2RpYWxvZyhwcmVmYWNlLHByb21wdCxlY2hv LGJ1ZixidWZsZW4sZGZsdCx0aW1lcik7CisgICAgICAgIGlmICggcmMgPiAtMSApCisgICAgICAg ICAgICByZXR1cm4ocmMpOworICAgIC8qIE90aGVyd2lzZSwgdGhlIGRpYWxvZyBjb3VsZCBub3Qg YmUgY3JlYXRlZC4gIEZhbGxiYWNrIHRvIHRleHQgbW9kZSAqLworICAgIH0gCisjZW5kaWYgLyog S1VJICovCisjaWZuZGVmIE5PTE9DQUwKKyNpZmRlZiBPUzIKKyAgICBpZiAod2luOTVfcG9wdXAg JiYgIShzdGFydGZsYWdzICYgOTYpCisjaWZkZWYgSUtTRAorICAgICAgICAgJiYgIWluc2VydmVy CisjZW5kaWYgLyogSUtTRCAqLworICAgICAgICAgKSB7CisgICAgICAgIGRlYm9rID0gMDsgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIERvbid0IGxvZyAqLworICAgICAgICBpZiAoZWNobyA9 PSAxKQorICAgICAgICAgICAgICAgIHBvcHVwX3JlYWR0ZXh0KHZtb2RlLHByZWZhY2UscHJvbXB0 LGJ1ZixidWZsZW4sMCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcG9wdXBf cmVhZHBhc3Modm1vZGUscHJlZmFjZSxwcm9tcHQsYnVmLGJ1ZmxlbiwwKTsKKyAgICAgICAgZGVi b2sgPSAxOworICAgICAgICByZXR1cm4oMSk7CisgICAgfQorI2VuZGlmIC8qIE9TMiAqLworI2Vu ZGlmIC8qIE5PTE9DQUwgKi8KKworICAgIGlmIChwcmVmYWNlKQorICAgICAgcHJpbnRmKCIlc1xu IixwcmVmYWNlKTsKKyAgICBpZiAoZWNobyA9PSAxKQorICAgICAgcmVhZHRleHQocHJvbXB0LGJ1 ZixidWZsZW4pOworICAgIGVsc2UKKyAgICAgIHJlYWRwYXNzKHByb21wdCxidWYsYnVmbGVuKTsK KyAgICByZXR1cm4oMSk7CQkJCS8qIChubyBidXR0b25zIGluIHBhcnNlcikgKi8KK30KKworLyog dSBxIF8gbSB0IHggdCAgLS0gIFVzZXIgUXVlcnksIGdldCBtdWx0aXBsZSB0ZXh0IHJlc3BvbnNl cyAqLworLyoKKyAgQ2FsbCB3aXRoOiAgCisgICAgcHJlZmFjZTogRXhwbGFuYXRvcnkgdGV4dCB0 byBwcmludCwgb3IgTlVMTC4KKyAgICBoZWxwOiAgICBIZWxwIHRleHQgKGFycmF5IG9mIHN0cmlu Z3Mgb3IgTlVMTCkgW25vdCB1c2VkIGJ5IHBhcnNlcl0uCisgICAgbjogICAgICAgTnVtYmVyIG9m IHJlc3BvbnNlcyB3YW50ZWQuCisgICAgZmllbGQ6ICAgQXJyYXkgb2Ygc3RydWN0IHR4dGJveCwg b25lIGVsZW1lbnQgcGVyIGZpZWxkLCBzZWUgY2t1dXNyLmguCisgIFJldHVybnM6CisgICAgMDog ICAgICAgVXNlciBzYWlkIE5vIG9yIENhbmNlbC4KKyAgICAxICAgICAgICBVc2VyIHNhaWQgWWVz IG9yIE9LLiAgICAKKyAgTm90ZXM6CisgICAgcHJlZmFjZSBhbmQgaGVscCBhcyBmb3IgdXFfb2so KS4KKyovCitpbnQKKyNpZmRlZiBDS19BTlNJQwordXFfbXR4dChjaGFyICogcHJlZmFjZSxjaGFy ICoqaGVscCwgaW50IG4sIHN0cnVjdCB0eHRib3ggZmllbGRbXSkKKyNlbHNlIC8qIENLX0FOU0lD ICovCit1cV9tdHh0KHByZWZhY2UsaGVscCxuLGZpZWxkKQorICAgIGNoYXIgKiBwcmVmYWNlOyBj aGFyICoqIGhlbHA7IGludCBuOyBzdHJ1Y3QgdHh0Ym94IGZpZWxkW107IAorI2VuZGlmIC8qIENL X0FOU0lDICovCit7CisjaWZuZGVmIE5PTE9DQUwKKyNpZmRlZiBPUzIKKyAgICBleHRlcm4gaW50 IHZtb2RlOworICAgIGV4dGVybiBpbnQgc3RhcnRmbGFnczsKKyAgICBleHRlcm4gaW50IHdpbjk1 X3BvcHVwOworI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIE5PTE9DQUwgKi8KKyAgICBpbnQg aSwgcmM7CisKKyAgICBpZiAobiA8IDEgfHwgIWZpZWxkKQorICAgICAgcmV0dXJuKDApOworI2lm ZGVmIEtVSQorICAgIGlmICggZ3VpX2RpYWxvZyApIHsKKyAgICAgICAgcmMgPSBndWlfbXR4dF9k aWFsb2cocHJlZmFjZSwgbiwgZmllbGQpOworICAgICAgICBpZiAoIHJjID4gLTEgKQorICAgICAg ICAgICAgcmV0dXJuKHJjKTsKKyAgICAvKiBPdGhlcndpc2UsIHRoZSBkaWFsb2cgY291bGQgbm90 IGJlIGNyZWF0ZWQuICBGYWxsYmFjayB0byB0ZXh0IG1vZGUgKi8KKyAgICB9CisjZW5kaWYgLyog S1VJICovCisjaWZuZGVmIE5PTE9DQUwKKyNpZmRlZiBPUzIKKyAgICBpZiAod2luOTVfcG9wdXAg JiYgIShzdGFydGZsYWdzICYgOTYpCisjaWZkZWYgSUtTRAorICAgICAgICAgJiYgIWluc2VydmVy CisjZW5kaWYgLyogSUtTRCAqLworICAgICAgICAgKSB7CisgICAgICAgIGRlYm9rID0gMDsgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIERvbid0IGxvZyAqLworICAgICAgICBmb3IgKGkgPSAw OyBpIDwgbjsgaSsrKSB7CisgICAgICAgICAgICBpZiAoZmllbGRbaV0udF9lY2hvID09IDEpCisg ICAgICAgICAgICAgICAgcG9wdXBfcmVhZHRleHQodm1vZGUscHJlZmFjZSxmaWVsZFtpXS50X2xi bCxmaWVsZFtpXS50X2J1ZixmaWVsZFtpXS50X2xlbiwwKTsKKyAgICAgICAgICAgIGVsc2UKKyAg ICAgICAgICAgICAgICBwb3B1cF9yZWFkcGFzcyh2bW9kZSxwcmVmYWNlLGZpZWxkW2ldLnRfbGJs LGZpZWxkW2ldLnRfYnVmLGZpZWxkW2ldLnRfbGVuLDApOworICAgICAgICB9CisgICAgICAgIGRl Ym9rID0gMTsKKyAgICAgICAgcmV0dXJuKDEpOworICAgIH0KKyNlbmRpZiAvKiBPUzIgKi8KKyNl bmRpZiAvKiBOT0xPQ0FMICovCisKKyAgICBpZiAocHJlZmFjZSkKKyAgICAgIHByaW50ZigiJXNc biIscHJlZmFjZSk7CisgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworCWlmIChmaWVsZFtp XS50X2VjaG8gPT0gMSkKKwkgIHJlYWR0ZXh0KGZpZWxkW2ldLnRfbGJsLGZpZWxkW2ldLnRfYnVm LGZpZWxkW2ldLnRfbGVuKTsKKwllbHNlCisJICByZWFkcGFzcyhmaWVsZFtpXS50X2xibCxmaWVs ZFtpXS50X2J1ZixmaWVsZFtpXS50X2xlbik7CisgICAgfQorICAgIHJldHVybigxKTsKK30KKwor LyogdSBxIF8gZiBpIGwgZSAgLS0gIFVzZXIgUXVlcnksIGdldCBmaWxlIG9yIGRpcmVjdG9yeSBu YW1lICAqLworLyoKKyAgQ2FsbCB3aXRoOiAgCisgICAgcHJlZmFjZTogRXhwbGFuYXRvcnkgdGV4 dCB0byBwcmludCwgb3IgTlVMTC4KKyAgICBwcm9tcHQ6ICBQcm9tcHQgc3RyaW5nLgorICAgIGZj OiAgICAgIEZ1bmN0aW9uIGNvZGU6CisJICAgICAgIDEgPSBpbnB1dCAoZXhpc3RpbmcpIGZpbGUK KwkgICAgICAgMiA9IGV4aXN0aW5nIGRpcmVjdG9yeSAKKwkgICAgICAgMyA9IGNyZWF0ZSBuZXcg b3V0cHV0IGZpbGUKKwkgICAgICAgNCA9IG91dHB1dCBmaWxlIGFsbG93aW5nIGFwcGVuZCBhY2Nl c3MKKyAgICBoZWxwOiAgICBIZWxwIHRleHQgKGFycmF5IG9mIHN0cmluZ3Mgb3IgTlVMTCkgW25v dCB1c2VkIGJ5IHBhcnNlcl0uCisgICAgZGZsdDogICAgRGVmYXVsdCByZXNwb25zZS4KKyAgICBy ZXN1bHQ6ICBQb2ludGVyIHRvIHJlc3VsdCBidWZmZXIuCisgICAgcmxlbmd0aDogTGVuZ3RoIG9m IHJlc3VsdCBidWZmZXIuCisKKyAgUmV0dXJuczoKKyAgIC0xOiAgICAgICBJbnZhbGlkIGFyZ3Vt ZW50LCByZXN1bHQgdG9vIGxvbmcsIG9yIG90aGVyIGVycm9yLgorICAgIDA6ICAgICAgIFVzZXIg Q2FuY2VsZWQuCisgICAgMTogICAgICAgT0ssIHdpdGggZmlsZS9wYXRobmFtZSBjb3BpZWQgdG8g cmVzdWx0IGJ1ZmZlci4KKyAgICAyOiAgICAgICBMaWtlIDEsIGJ1dCBmb3Igb3V0cHV0IGZpbGUg dGhhdCBpcyB0byBiZSBhcHBlbmRlZCB0by4KKworICBOb3RlczoKKyAgICAxLiBwcmVmYWNlIGFu ZCBwcm9tcHQgc2hvdWxkIG5vdCBpbmNsdWRlIGZpbmFsIGxpbmUgdGVybWluYXRvciBidXQgbWF5 CisgICAgICAgaW5jbHVkZSBlbWJlZGRlZCBvbmVzLiAgSGVscCB0ZXh0IGlzIGluIGNhc2UgR1VJ IGRpYWxvZyBuZWVkcyBhIEhlbHAKKyAgICAgICBidXR0b247IGZpbmFsIGVsZW1lbnQgb2YgaGVs cC1zdHJpbmcgYXJyYXkgaXMgIiIuCisKKyAgICAyLiBUaGUgZGVmYXVsdCBtaWdodCBiZSBhIGZp bGVuYW1lLCBhIGRpcmVjdG9yeSBuYW1lLCBhIHJlbGF0aXZlCisgICAgICAgcGF0aG5hbWUsIG9y IGFuIGFic29sdXRlIHBhdGhuYW1lLiAgVGhpcyByb3V0aW5lIG11c3QgY29udmVydCBpdCBpbnRv CisgICAgICAgaW50byBhIGZ1bGx5IHF1YWxpZmllZCAoYWJzb2x1dGUpIHBhdGhuYW1lIHNvIHRo ZSB1c2VyIGtub3dzIGV4YWN0bHkKKyAgICAgICB3aGVyZSB0aGUgZmlsZSBpcyB0byBiZSBmb3Vu ZCBvciBzdG9yZWQuICBJbiBhZGRpdGlvbiwgdGhlIFdpbmRvd3MKKyAgICAgICB2ZXJzaW9uIG9m IHRoaXMgcm91dGluZSBtdXN0IHNlcGFyYXRlIHRoZSBkaXJlY3RvcnkgcGFydCBmcm9tIHRoZQor ICAgICAgIG5hbWUgcGFydCwgc28gaXQgY2FuIGRpc3BsYXkgdGhlIGdpdmVuIGRpcmVjdG9yeSBp biB0aGUgZmlsZSBkaWFsb2csCisgICAgICAgYW5kIHB1dCBuYW1lIGluIHRoZSBmaWxlbmFtZSBi b3ggdG8gYmUgZWRpdGVkLCByZXBsYWNlZCwgb3IKKyAgICAgICBhY2NlcHRlZC4KKworICAgIDMu IFdoZW4gY2FsbGVkIHdpdGggRkMgNCwgdGhlIFdpbmRvd3MgdmVyc2lvbiBzaG91bGQgaW5jbHVk ZSAiTmV3IiBhbmQKKyAgICAgICAiQXBwZW5kIiBidXR0b25zIGluIHRoZSBkaWFsb2cuIHNvIHRo ZSB1c2VyIGNhbiBzYXkgd2hldGhlciB0aGUgZmlsZQorICAgICAgIHNob3VsZCBvdmVyd3JpdGUg YW55IGZpbGUgb2YgdGhlIHNhbWUgbmFtZSwgb3IgYmUgYXBwZW5kZWQgdG8gaXQuCisqLworCitp bnQKKyNpZmRlZiBDS19BTlNJQwordXFfZmlsZShjaGFyICogcHJlZmFjZSwgY2hhciAqIGZwcm9t cHQsIGludCBmYywgY2hhciAqKiBoZWxwLAorCWNoYXIgKiBkZmx0LCBjaGFyICogcmVzdWx0LCBp bnQgcmxlbmd0aCkKKyNlbHNlIC8qIENLX0FOU0lDICovCit1cV9maWxlKHByZWZhY2UsZnByb21w dCxmYyxoZWxwLGRmbHQscmVzdWx0LHJsZW5ndGgpCisgICAgY2hhciAqIHByZWZhY2UsICogZnBy b21wdCwgKiogaGVscCwgKiBkZmx0LCAqIHJlc3VsdDsKKyAgICBpbnQgZmMsIHJsZW5ndGg7Cisj ZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIHVxX2ZpbGUgKi8geworCisgICAgaW50IHJjID0gLTEs IHgsIHksIHo7CisgICAgY2hhciAqIHMsICogcCwgKiBmdWxscGF0aDsKKyAgICBjaGFyIGZpbGVi dWZbQ0tNQVhQQVRIKzFdOworCisjaWZkZWYgQ0tfUkVDQUxMCisgICAgZXh0ZXJuIGludCBvbl9y ZWNhbGw7CisjZW5kaWYgLyogQ0tfUkVDQUxMICovCisKKyNpZmRlZiBLVUkKKyAgICBpZiAoIGd1 aV9kaWFsb2cgKSB7CisgICAgICAgIHJjID0gZ3VpX3NhdmVhc19kaWFsb2cocHJlZmFjZSxmcHJv bXB0LGZjLGRmbHQscmVzdWx0LHJsZW5ndGgpOworICAgICAgICByZXR1cm4gcmM7CisgICAgfQor I2VuZGlmIC8qIEtVSSAqLworCisjaWZkZWYgQ0tfUkVDQUxMCisgICAgb25fcmVjYWxsID0gMDsK KyNlbmRpZiAvKiBDS19SRUNBTEwgKi8KKworICAgIGlmIChwcmVmYWNlKQkJCS8qIElmIHByZWZh dG9yeSB0ZXh0IGdpdmVuLi4uICovCisgICAgICBwcmludGYoIiVzXG4iLHByZWZhY2UpOwkJLyog ZGlzcGxheSBpdC4gKi8KKworICAgIGNtc2F2cChwc2F2ZSxQUk9NUFRMKTsgICAgICAgICAgICAg IC8qIFNhdmUgb2xkIHByb21wdCAqLworCisgICAgLyogV2UgZ2V0IHRoZSBmdWxsIHBhdGhuYW1l IG9mIHRoZSBwcm9wb3NlZCBvdXRwdXQgZmlsZSBqdXN0IHNvICovCisgICAgLyogd2UgY2FuIHNo b3cgaXQgdG8gdGhlIHVzZXIgYnV0IHdlIGRvbid0IHVzZSBpdCBvdXJzZWx2ZXMuICovCisKKyAg ICBwID0gTlVMTDsJCQkJLyogQnVpbGQgbmV3IHByb21wdCAqLworICAgIGlmICghZGZsdCkgZGZs dCA9ICIiOworICAgIGlmICgqZGZsdCkJCQkJLyogSGF2ZSBkZWZhdWx0IGZpbGVuYW1lICovCisg ICAgICB6Zm5xZnAoZGZsdCxDS01BWFBBVEgrMSxmaWxlYnVmKTsJLyogR2V0IGZ1bGwgcGF0aCAq LworICAgIGVsc2UKKyAgICAgIGNrbWFrbXNnKGZpbGVidWYsQ0tNQVhQQVRIKzEsemd0ZGlyKCks Im5ld2ZpbGUiLE5VTEwsTlVMTCk7CisgICAgZnVsbHBhdGggPSBmaWxlYnVmOworICAgIHggPSBz dHJsZW4oZnVsbHBhdGgpOworCisgICAgLyogSWYgbm8gcHJvbXB0IGdpdmVuLCBidWlsZCBvbmUg dGhhdCBzaG93cyB0aGUgcHJvcG9zZWQgZnVsbCBwYXRobmFtZS4gKi8KKworICAgIGlmICghZnBy b21wdCkgZnByb21wdCA9ICIiOworICAgIGlmICghKmZwcm9tcHQpIGZwcm9tcHQgPSB4ID8gIiBG aWxlbmFtZSIgOiAiIEZpbGVuYW1lOiAiOworICAgIHkgPSBzdHJsZW4oZnByb21wdCk7CisgICAg aWYgKHggPiAwKSB7CQkJLyogSGF2ZSBkZWZhdWx0IHBhdGhuYW1lPyAqLworCXAgPSAoY2hhciAq KW1hbGxvYyh4ICsgeSArIDcpOwkvKiBHZXQgdGVtcCBzdG9yYWdlICovCisJaWYgKHApIHsJCQkv KiBCdWlsZCBwcm9tcHQgKi8KKwkgICAgY2ttYWttc2cocCx4K3krNyxmcHJvbXB0LCIgWyIsZnVs bHBhdGgsIl06ICIpOworCSAgICBmcHJvbXB0ID0gcDsKKwl9CisgICAgfQorICAgIGNtc2V0cChm cHJvbXB0KTsJCQkvKiBNYWtlIG5ldyBwcm9tcHQgKi8KKyAgICBpZiAocCkgZnJlZShwKTsJCQkv KiBGcmVlIHRlbXAgc3RvcmFnZSAqLworICAgIGNtaW5pKGNreGVjaCk7ICAgICAgICAgICAgICAg ICAgICAgIC8qIEluaXRpYWxpemUgcGFyc2VyLiAqLworICAgIHggPSAtMTsKKyAgICBkbyB7Cisg ICAgICAgIHByb21wdChOVUxMKTsgICAgICAgICAgICAgICAgICAgLyogSXNzdWUgcHJvbXB0LiAq LworICAgICAgICBzd2l0Y2ggKGZjKSB7CQkJLyogUGFyc2UgZGVwZW5kcyBvbiBmdW5jdGlvbiBj b2RlICovCisgICAgICAgICAgY2FzZSAxOgkJCS8qIElucHV0IGZpbGUgKi8KKwkgICAgeCA9IGNt aWZpKCJOYW1lIG9mIGV4aXN0aW5nIGZpbGUiLGRmbHQsJnMsJnkseHhzdHJpbmcpOworCSAgICBy YyA9IDE7CisJICAgIGJyZWFrOworCSAgY2FzZSAyOgkJCS8qIERpcmVjdG9yeSAqLworCSAgICB4 ID0gY21kaXIoIkRpcmVjdG9yeSBuYW1lIixkZmx0LCZzLHh4c3RyaW5nKTsKKwkgICAgcmMgPSAx OworCSAgICBicmVhazsKKyAgICAgICAgICBjYXNlIDM6CQkJLyogTmV3IG91dHB1dCBmaWxlICov CisJICAgIC8qIEZhbGwgdGhydS4uLiAqLworCSAgY2FzZSA0OgkJCS8qIE91dHB1dCBmaWxlIC0g QXBwZW5kIGFsbG93ZWQgKi8KKwkgICAgeCA9IGNtb2ZpKCJPdXRwdXQgZmlsZSBzcGVjaWZpY2F0 aW9uIixkZmx0LCZzLHh4c3RyaW5nKTsKKwkgICAgcmMgPSAoZmMgPT0gNCkgPyAxIDogMjsKKwkg ICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoJCQkvKiBCYWQgZnVuY3Rpb24gY29kZSAqLwor CSAgICBnb3RvIHhfdXFfZmlsZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoeCA8IDApIHsJCQkv KiBQYXJzZSBlcnJvciAqLworCSAgICBmaWxlYnVmWzBdID0gTlVMOworICAgICAgICAgICAgaWYg KHggPT0gLTQpIHsgICAgICAgICAgICAgIC8qIEVPRiAqLworICAgICAgICAgICAgICAgIGJyZWFr OworICAgICAgICAgICAgfSBlbHNlIGlmICh4ID09IC0zKSAgICAgICAgIC8qIE5vIGFuc3dlcj8g Ki8KKyAgICAgICAgICAgICAgcHJpbnRmKGZjID09IDIgPworCQkgICAgICIgUGxlYXNlIGVudGVy IGEgZGlyZWN0b3J5IG5hbWUuXG4iIDoKKwkJICAgICAiIFBsZWFzZSBlbnRlciBhIGZpbGVuYW1l LlxuIgorCQkgICAgICk7CisgICAgICAgICAgICBjbWluaShja3hlY2gpOworICAgICAgICB9IGVs c2UgeworCSAgICB6ID0gc3RybGVuKHMpOworCSAgICBpZiAoeiA+IHJsZW5ndGggfHwgY2tzdHJu Y3B5KGZpbGVidWYsYnJzdHJpcChzKSxDS01BWFBBVEgrMSkgPCB6KSB7CisJCXByaW50ZigiP05h bWUgdG9vIGxvbmdcbiIpOworCQl4ID0gLTk7CisJICAgIH0gZWxzZQorCSAgICAgIHggPSBjbWNm bSgpOwkJLyogR2V0IGNvbmZpcm1hdGlvbiAqLworICAgICAgICB9CisJaWYgKGZjID09IDEgJiYg eCA+IC0xICYmIHkgPiAwKSB7CisJICAgIHByaW50ZigiP1dpbGRjYXJkcyBub3QgYWxsb3dlZFxu Iik7CisJICAgIHggPSAtOTsKKwl9CisgICAgfSB3aGlsZSAoeCA8IDApOyAgICAgICAgICAgICAg ICAgICAgLyogQ29udGludWUgdGlsbCBkb25lICovCisKKyAgeF91cV9maWxlOgorICAgIGlmICh4 IDwgMCkKKyAgICAgIHJjID0gLTE7CisKKyAgICBjbXNldHAocHNhdmUpOyAgICAgICAgICAgICAg ICAgICAgICAvKiBSZXN0b3JlIHJlYWwgcHJvbXB0ICovCisKKyAgICBpZiAocmMgPiAwKQorICAg ICAgY2tzdHJuY3B5KHJlc3VsdCxmaWxlYnVmLHJsZW5ndGgpOworICAgIHJldHVybihyYyk7Cit9 CisKKworI2lmZGVmIENLX1BFUk1TCisjaWZkZWYgVU5JWAorCitfUFJPVE9UWVAoIGludCB6c2V0 cGVybSwgKGNoYXIgKiwgaW50KSk7CisKKy8qIENITU9EIGNvbW1hbmQgZm9yIFVOSVggb25seSAq LworCisjZGVmaW5lIENITV9ESVIgMAorI2RlZmluZSBDSE1fRE9UIDEKKyNkZWZpbmUgQ0hNX0ZJ TCAyCisjZGVmaW5lIENITV9MSVMgMworI2RlZmluZSBDSE1fTk9MIDQKKyNkZWZpbmUgQ0hNX1FV SSA1CisjZGVmaW5lIENITV9SRUMgNgorI2RlZmluZSBDSE1fVlJCIDcKKyNkZWZpbmUgQ0hNX1BB RyA4CisjZGVmaW5lIENITV9OT1AgOQorI2RlZmluZSBDSE1fVFlQIDEwCisjZGVmaW5lIENITV9T SU0gMTEKKworc3RhdGljIHN0cnVjdCBrZXl0YWIgdWNobW9kc3dbXSA9IHsKKyAgICAiL2RpcmVj dG9yaWVzIiwgQ0hNX0RJUiwgMCwKKyAgICAiL2RvdGZpbGVzIiwgICAgQ0hNX0RPVCwgMCwKKyAg ICAiL2ZpbGVzIiwgICAgICAgQ0hNX0ZJTCwgMCwKKyAgICAiL2xpc3QiLCAgICAgICAgQ0hNX0xJ UywgMCwKKyAgICAiL25vbGlzdCIsICAgICAgQ0hNX05PTCwgMCwKKyAgICAiL25vcGFnZSIsICAg ICAgQ0hNX05PUCwgMCwKKyAgICAiL3BhZ2UiLCAgICAgICAgQ0hNX1BBRywgMCwKKyAgICAiL3F1 aWV0IiwgICAgICAgQ0hNX1FVSSwgQ01fSU5WLAorICAgICIvcmVjdXJzaXZlIiwgICBDSE1fUkVD LCAwLAorICAgICIvc2ltdWxhdGUiLCAgICBDSE1fU0lNLCAwLAorICAgICIvdHlwZSIsICAgICAg ICBDSE1fVFlQLCBDTV9BUkcsCisgICAgIi92ZXJib3NlIiwgICAgIENITV9WUkIsIENNX0lOViwK K307CitzdGF0aWMgaW50IG5jaG1vZHN3ID0gKHNpemVvZih1Y2htb2RzdykgLyBzaXplb2Yoc3Ry dWN0IGtleXRhYikpOworCitpbnQKK2RvdWNobW9kKCkgeworICAgIGV4dGVybiBpbnQgcmVjdXJz aXZlLCBuc2NhbmZpbGUsIGRpcmFjdGl2ZTsKKyNpZmRlZiBDS19UVEdXU0laCisgICAgZXh0ZXJu IGludCB0dF9yb3dzLCB0dF9jb2xzOworICAgIGludCBuID0gMDsKKyNlbmRpZiAvKiBDS19UVEdX U0laICovCisgICAgaW50IGksIGZpbGVzID0gMSwgdDEgPSAxLCB0MiA9IDAsIHgsIHksIHosIHZl cmJvc2UgPSAwLCByYyA9IDEsIHBhZ2luZzsKKyAgICBpbnQgeG1vZGUgPSAtMSwgZnMgPSAwLCBn ZXR2YWwgPSAwLCBzaW11bGF0ZSA9IDAsIHdpbGQgPSAwOworICAgIGNoYXIgYywgKiBzOworICAg IHN0cnVjdCBGREIgc3csIG51OworCisgICAgaWYgKHhhc2ttb3JlIDwgMCkgeworI2lmZGVmIENL X1RUR1dTSVoKKyAgICAgICAgeGFza21vcmUgPSAxOworI2Vsc2UKKyAgICAgICAgeGFza21vcmUg PSAwOworI2VuZGlmIC8qIENLX1RUR1dTSVogKi8KKyAgICB9CisgICAgcGFnaW5nID0geGFza21v cmU7CisKKyAgICBjbWZkYmkoJnN3LCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGaXJzdCBG REIgLSBjb21tYW5kIHN3aXRjaGVzICovCisgICAgICAgICAgIF9DTUtFWSwgICAgICAgICAgICAg ICAgICAgICAgLyogZmNvZGUgKi8KKyAgICAgICAgICAgIk9jdGFsIGZpbGUgcGVybWlzc2lvbiBj b2RlLCBvciBzd2l0Y2giLAorICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIGRlZmF1bHQgKi8KKyAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBhZGR0bCBzdHJpbmcgZGF0YSAqLworICAgICAgICAgICBuY2htb2RzdywgICAgICAgICAgICAg ICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAxOiB0Ymwgc2l6ZSAqLworICAgICAgICAgICA0 LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAyOiA0ID0g Y21zd2kgKi8KKyAgICAgICAgICAgeHhzdHJpbmcsICAgICAgICAgICAgICAgICAgICAvKiBQcm9j ZXNzaW5nIGZ1bmN0aW9uICovCisgICAgICAgICAgIHVjaG1vZHN3LCAgICAgICAgICAgICAgICAg ICAgLyogS2V5d29yZCB0YWJsZSAqLworICAgICAgICAgICAmbnUgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIFBvaW50ZXIgdG8gbmV4dCBGREIgKi8KKyAgICAgICAgICAgKTsKKyAgICBjbWZk YmkoJm51LAorICAgICAgICAgICBfQ01OVU0sICAgICAgICAgICAgICAgICAgICAgIC8qIE51bWJl ciAqLworICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEhlbHAgbWVz c2FnZSAqLworICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERlZmF1 bHQgKi8KKyAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOL0EgKi8K KyAgICAgICAgICAgOCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSYWRpeCA9IDggKi8K KyAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOL0EgKi8KKyAgICAg ICAgICAgeHhzdHJpbmcsICAgICAgICAgICAgICAgICAgICAvKiBQcm9jZXNzaW5nIGZ1bmN0aW9u ICovCisgICAgICAgICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgLyogTi9BICovCisg ICAgICAgICAgIE5VTEwgICAgICAgICAgICAgICAgICAgICAgICAgLyogTmV4dCAqLworICAgICAg ICAgICApOworCisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgaWYgKCh4ID0gY21mZGIoJnN3KSkg PCAwKSB7CisgICAgICAgICAgICBpZiAoeCA9PSAtMykgeworICAgICAgICAgICAgICAgIHggPSAt OTsKKyAgICAgICAgICAgICAgICBwcmludGYoIj9GaWxlbmFtZSByZXF1aXJlZFxuIik7CisgICAg ICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgIH0KKyAgICAgICAgaWYg KGNtcmVzdWx0LmZjb2RlICE9IF9DTUtFWSkKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgYyA9 IGNtZ2JyaygpOworICAgICAgICBnZXR2YWwgPSAoYyA9PSAnOicgfHwgYyA9PSAnPScpOworICAg ICAgICBpZiAoZ2V0dmFsICYmICEoY21na3dmbGdzKCkgJiBDTV9BUkcpKSB7CisgICAgICAgICAg ICBwcmludGYoIj9UaGlzIHN3aXRjaCBkb2VzIG5vdCB0YWtlIGFuIGFyZ3VtZW50XG4iKTsKKyAg ICAgICAgICAgIHJldHVybigtOSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFnZXR2YWwgJiYg KGNtZ2t3ZmxncygpICYgQ01fQVJHKSkgeworICAgICAgICAgICAgcHJpbnRmKCI/VGhpcyBzd2l0 Y2ggcmVxdWlyZXMgYW4gYXJndW1lbnRcbiIpOworICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAg ICAgICAgfQorICAgICAgICBzd2l0Y2ggKGNtcmVzdWx0Lm5yZXN1bHQpIHsKKyAgICAgICAgICBj YXNlIENITV9ESVI6CisgICAgICAgICAgICB0MSA9IDE7CisgICAgICAgICAgICB0MiA9IDE7Cisg ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIENITV9ET1Q6CisgICAgICAgICAgICBt YXRjaGRvdCA9IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIENITV9GSUw6 CisgICAgICAgICAgICB0MSA9IDA7CisgICAgICAgICAgICB0MiA9IDA7CisgICAgICAgICAgICBi cmVhazsKKyAgICAgICAgICBjYXNlIENITV9MSVM6CisgICAgICAgICAgY2FzZSBDSE1fVlJCOgor ICAgICAgICAgICAgdmVyYm9zZSA9IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBj YXNlIENITV9OT0w6CisgICAgICAgICAgY2FzZSBDSE1fUVVJOgorICAgICAgICAgICAgdmVyYm9z ZSA9IDA7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIENITV9SRUM6CisgICAg ICAgICAgICByZWN1cnNpdmUgPSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2Fz ZSBDSE1fUEFHOgorICAgICAgICAgICAgdmVyYm9zZSA9IDE7CisgICAgICAgICAgICBwYWdpbmcg PSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBDSE1fTk9QOgorICAgICAg ICAgICAgcGFnaW5nID0gMDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgQ0hN X1NJTToKKyAgICAgICAgICAgIHNpbXVsYXRlID0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAg ICAgICAgIGNhc2UgQ0hNX1RZUDogeworICAgICAgICAgICAgICBleHRlcm4gc3RydWN0IGtleXRh YiB0eHRiaW5bXTsKKyAgICAgICAgICAgICAgaWYgKCh4ID0gY21rZXkodHh0YmluLDMsIiIsIiIs eHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICAgICAg ICBpZiAoeCA9PSAyKSB7ICAgICAgICAgICAgIC8qIEFMTCAqLworICAgICAgICAgICAgICAgICAg eG1vZGUgPSAtMTsKKyAgICAgICAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAvKiBU RVhUIG9yIEJJTkFSWSBvbmx5ICovCisgICAgICAgICAgICAgICAgICB4bW9kZSA9IHg7CisgICAg ICAgICAgICAgICAgICBmcyA9IDE7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgYnJl YWs7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHogPSBjbXJlc3VsdC5ucmVz dWx0OworICAgIHggPSBjbWlmaTIoIkZpbGUgc3BlY2lmaWNhdGlvbiIsIiIsJnMsJndpbGQsdDEs TlVMTCx4eHN0cmluZyx0Mik7CisgICAgaWYgKHggPCAwKSB7CisgICAgICAgIGlmICh4ID09IC0z KSB7CisgICAgICAgICAgICBwcmludGYoIj9BIGZpbGUgc3BlY2lmaWNhdGlvbiBpcyByZXF1aXJl ZFxuIik7CisgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICB9IGVsc2UKKyAgICAgICAg ICByZXR1cm4oeCk7CisgICAgfQorICAgIGNrc3RybmNweSh0bXBidWYscyxUTVBCVUZTSVopOwor ICAgIHMgPSB0bXBidWY7CisgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKQorICAgICAgcmV0dXJu KHgpOworI2lmZGVmIFpYUkVXSU5ECisgICAgaWYgKHdpbGQpIGZpbGVzID0genhyZXdpbmQoKTsK KyNlbHNlCisgICAgaWYgKHdpbGQpIGZpbGVzID0gbnp4cGFuZChzLDApOworI2VuZGlmIC8qIFpY UkVXSU5EICovCisKKyAgICBpZiAocGFnaW5nID4gLTEpCisgICAgICB4YXNrbW9yZSA9IHBhZ2lu ZzsKKworI2lmZGVmIENLX1RUR1dTSVoKKyAgICBpZiAodmVyYm9zZSAmJiBwYWdpbmcpIHsKKyNp ZmRlZiBPUzIKKyAgICAgICAgdHRnY3dzeigpOworI2Vsc2UgLyogT1MyICovCisgICAgICAgIGlm ICh0dGd3c2l6KCkgPiAwKSB7CisgICAgICAgICAgICBpZiAodHRfcm93cyA+IDAgJiYgdHRfY29s cyA+IDApIHsKKyAgICAgICAgICAgICAgICBjbWRfcm93cyA9IHR0X3Jvd3M7CisgICAgICAgICAg ICAgICAgY21kX2NvbHMgPSB0dF9jb2xzOworICAgICAgICAgICAgfQorICAgICAgICB9CisjZW5k aWYgLyogT1MyICovCisgICAgfQorI2VuZGlmIC8qIENLX1RUR1dTSVogKi8KKworICAgIGZvciAo aSA9IDA7IGkgPCBmaWxlczsgaSsrKSB7CisgICAgICAgIGlmIChmaWxlcyA9PSAxICYmIHdpbGQg PT0gMCkgeyAgLyogRm9yICJjaG1vZCA3NzcgLiIgKi8KKyAgICAgICAgICAgIGNrc3RybmNweShs aW5lLHMsTElOQlVGU0laKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHggPSB6bmV4 dChsaW5lKTsKKyAgICAgICAgICAgIGlmICh4IDwgMSkgeworICAgICAgICAgICAgICAgIGlmIChp ID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/Tm8gZmlsZXMgbWF0Y2ggLSBc IiVzXCJcbiIsbGluZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybigtOSk7CisgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybigxKTsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgfQorICAgICAgICBpZiAoZnMpIHsKKyNpZmRlZiBWTVNPUlVOSVgKKyAgICAgICAgICAg IC8qIElmIC9UWVBFOlRFWFQgb3IgQklOQVJZIGdpdmVuLCBza2lwIGRpcmVjdG9yaWVzIGFuZCBs aW5rcyAqLworICAgICAgICAgICAgLyogc2luY2UgdGhleSBhcmUgbmVpdGhlciB0ZXh0IG5vciBi aW5hcnkuICovCisgICAgICAgICAgICBleHRlcm4gaW50IHpnZnNfZGlyLCB6Z2ZzX2xpbms7Cisg ICAgICAgICAgICB6Z2V0ZnMobGluZSk7CisgICAgICAgICAgICBpZiAoemdmc19kaXIgfHwgemdm c19saW5rKQorICAgICAgICAgICAgICBjb250aW51ZTsKKyNlbHNlCisgICAgICAgICAgICBpZiAo emNoa2kobGluZSkgPCAwKQorICAgICAgICAgICAgICBjb250aW51ZTsKKyNlbmRpZiAvKiBWTVNP UlVOSVggKi8KKyAgICAgICAgICAgIC8qIFJlZ3VsYXIgZmlsZSwgc2NhbiBpdCAqLworICAgICAg ICAgICAgc3dpdGNoIChzY2FuZmlsZShsaW5lLCZ5LG5zY2FuZmlsZSkpIHsKKyAgICAgICAgICAg ICAgY2FzZSBGVF9CSU46CisgICAgICAgICAgICAgICAgaWYgKHhtb2RlICE9IDEpCisgICAgICAg ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg ICAgY2FzZSBGVF9URVhUOgorICAgICAgICAgICAgICBjYXNlIEZUXzdCSVQ6CisgICAgICAgICAg ICAgIGNhc2UgRlRfOEJJVDoKKyNpZmRlZiBVTklDT0RFCisgICAgICAgICAgICAgIGNhc2UgRlRf VVRGODoKKyAgICAgICAgICAgICAgY2FzZSBGVF9VQ1MyOgorI2VuZGlmIC8qIFVOSUNPREUgKi8K KyAgICAgICAgICAgICAgICBpZiAoeG1vZGUgIT0gMCkKKyAgICAgICAgICAgICAgICAgIGNvbnRp bnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChzaW11bGF0ZSkgewor I2lmZGVmIFVOSVgKKyAgICAgICAgICAgIGV4dGVybiBpbnQgemNoa29kOyAgICAgICAgICAvKiBV bmlkZW50aWZpZWQgRmx5aW5nICovCisgICAgICAgICAgICBpbnQgeHggPSB6Y2hrb2Q7ICAgICAg ICAgICAgLyogQVBJIEV4dGVuc2lvbi4uLiAqLworICAgICAgICAgICAgemNoa29kID0gMTsKKyNl bmRpZiAvKiBVTklYICovCisgICAgICAgICAgICBpZiAoemNoa28obGluZSkgPCAwKQorICAgICAg ICAgICAgICBwcmludGYoIiVzIC0gQWNjZXNzIGRlbmllZFxuIixsaW5lKTsKKyAgICAgICAgICAg IGVsc2UKKyAgICAgICAgICAgICAgcHJpbnRmKCIlcyAtIE9LXG4iLGxpbmUpOworI2lmZGVmIFVO SVgKKyAgICAgICAgICAgIHpjaGtvZCA9IHh4OworI2VuZGlmIC8qIFVOSVggKi8KKyAgICAgICAg fSBlbHNlIHsKKyAgICAgICAgICAgIGlmICh6c2V0cGVybShsaW5lLHopIDwgMSkgeworICAgICAg ICAgICAgICAgIGlmICh2ZXJib3NlIHx8IGZpbGVzIDwgMikgeworICAgICAgICAgICAgICAgICAg ICBwcmludGYoIiVzOiAlc1xuIixsaW5lLGNrX2VycnN0cigpKTsKKyAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgICAgcmMgPSAwOworICAgICAgICAgICAgfSBlbHNlIGlmICh2ZXJib3Nl KSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCIlcyAgJXNcbiIsemlwZXJtKGxpbmUpLGxpbmUp OworICAgICAgICAgICAgfQorICAgICAgICB9CisjaWZkZWYgQ0tfVFRHV1NJWgorICAgICAgICBp ZiAodmVyYm9zZSAmJiBwYWdpbmcpIHsgICAgICAgIC8qIFBhdXNlIGF0IGVuZCBvZiBzY3JlZW4g Ki8KKyAgICAgICAgICAgIGlmIChjbWRfcm93cyA+IDAgJiYgY21kX2NvbHMgPiAwKSB7CisgICAg ICAgICAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgeworICAgICAgICAgICAgICAgICAg ICBpZiAoIWFza21vcmUoKSkKKyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgIG4gPSAwOworICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorI2VuZGlmIC8qIENLX1RUR1dTSVog Ki8KKworICAgIH0KKyAgICByZXR1cm4oc3VjY2VzcyA9IHJjKTsKK30KKyNlbmRpZiAvKiBVTklY ICovCisjZW5kaWYgLyogQ0tfUEVSTVMgKi8KKworI2lmbmRlZiBOT1NQTCAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIFMtRXhwcmVzc2lvbnMgKi8KKyNpZm5kZWYgTk9TRVhQCisKK3N0cnVj dCBrZXl0YWIgc2V4cHRhYltdID0geworICAgICJkZXB0aC1saW1pdCIsIDEsIDAsCisgICAgImVj aG8tcmVzdWx0IiwgMCwgMCwKKyAgICAidHJ1bmNhdGUtYWxsLXJlc3VsdHMiLCAyCit9OworCitz dGF0aWMgaW50IHNleHBtYXhkZXAgPSAxMDAwOyAgICAgICAgICAgLyogTWF4aW11bSBkZXB0aCAq LworCisjZGVmaW5lIHh4ZmxvYXQocyx4KSBcCisoKGlzZGlnaXQoKnMpfHwoKnM9PSctJyl8fCgq cz09JysnKXx8KCpzPT0nLicpfHwoKnM9PSdcMDQwJykpP2lzZmxvYXQocyx4KTowKQorCisjZGVm aW5lIFNYX0FERCAgMSAgICAgICAgICAgICAgICAgICAgICAgLyogU3ltYm9scyBmb3IgYnVpbHQt aW4gb3BlcmF0b3JzICovCisjZGVmaW5lIFNYX1NVQiAgMgorI2RlZmluZSBTWF9NVUwgIDMKKyNk ZWZpbmUgU1hfRElWICA0CisjZGVmaW5lIFNYX1BPVyAgNQorI2RlZmluZSBTWF9TRVQgIDYKKyNk ZWZpbmUgU1hfTU9EICA3CisjZGVmaW5lIFNYX0VWQSAgOAorI2RlZmluZSBTWF9FWFAgIDkKKyNk ZWZpbmUgU1hfQUVRIDEwCisjZGVmaW5lIFNYX0FMVCAxMQorI2RlZmluZSBTWF9BR1QgMTIKKyNk ZWZpbmUgU1hfQUxFIDEzCisjZGVmaW5lIFNYX0FHRSAxNAorI2RlZmluZSBTWF9NSU4gMTUKKyNk ZWZpbmUgU1hfTUFYIDE2CisjZGVmaW5lIFNYX1NRUiAxNworI2RlZmluZSBTWF9GTFIgMTgKKyNk ZWZpbmUgU1hfQ0VJIDE5CisjZGVmaW5lIFNYX1RSVSAyMAorI2RlZmluZSBTWF9BQlMgMjEKKyNk ZWZpbmUgU1hfUk9VIDIyCisjZGVmaW5lIFNYX0xFVCAyMworI2RlZmluZSBTWF9MR04gMjQKKyNk ZWZpbmUgU1hfTEdYIDI1CisjZGVmaW5lIFNYX0ZMTyAyNgorI2RlZmluZSBTWF9JRkMgMjcKKyNk ZWZpbmUgU1hfTk9UIDI4CisjZGVmaW5lIFNYX05FUSAyOQorI2RlZmluZSBTWF9BTkQgMzAKKyNk ZWZpbmUgU1hfTE9SIDMxCisjZGVmaW5lIFNYX1NJTiAzMgorI2RlZmluZSBTWF9DT1MgMzMKKyNk ZWZpbmUgU1hfVEFOIDM0CisjZGVmaW5lIFNYX0JXQSAzNQorI2RlZmluZSBTWF9CV08gMzYKKyNk ZWZpbmUgU1hfQldYIDM3CisjZGVmaW5lIFNYX0JXTiAzOAorI2RlZmluZSBTWF9YT1IgMzkKKyNk ZWZpbmUgU1hfSU5DIDQwCisjZGVmaW5lIFNYX0RFQyA0MQorI2RlZmluZSBTWF9RVU8gNDIKKyNk ZWZpbmUgU1hfU1RSIDQzCisKKy8qIE9wZXJhdG9yIGZsYWdzICovCisKKyNkZWZpbmUgU1hGX1BS RSAyNTYgICAgICAgICAgICAgICAgICAgICAvKiBQcmVkaWNhdGUgKi8KKyNkZWZpbmUgU1hGX09O RSA1MTIgICAgICAgICAgICAgICAgICAgICAvKiBSZXF1aXJlcyBvbmUgYXJnICovCisjZGVmaW5l IFNYRl9UV08gMTAyNCAgICAgICAgICAgICAgICAgICAgLyogUmVxdWlyZXMgdHdvIGFyZ3Mgb3Ig bW9yZSAqLworI2RlZmluZSBTWEZfRkxPIDIwNDggICAgICAgICAgICAgICAgICAgIC8qIENvZXJj ZSB0byBmbG9hdGluZy1wb2ludCAqLworCisvKiBCdWlsdC1pbiBjb25zdGFudHMgKi8KKworI2Rl ZmluZSBTWENfTklMIDEgICAgICAgICAgICAgICAgICAgICAgIC8qIE5JTCAqLworI2RlZmluZSBT WENfUEkgIDIgICAgICAgICAgICAgICAgICAgICAgIC8qIFBJICovCisjZGVmaW5lIFNYQ19UICAg MyAgICAgICAgICAgICAgICAgICAgICAgLyogVCAqLworCisvKgorICBUaGlzIGlzIGFuIHhsb29r dXAoKSB0YWJsZSBhbmQgc28gbmVlZCBub3QgYmUgaW4gImFsaGFiZXRpY2FsIiBvcmRlci4KKyAg VGhlcmVmb3JlIGVudHJpZXMgYXJlIGFycmFuZ2VkIHRvIG1pbmltaXplIHNlYXJjaCBmb3IgbW9z dCBjb21tb24KKyAgb3BlcmF0b3JzLgorKi8KK3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIHNleHBvcHNb XSA9IHsgICAgICAvKiBCdWlsdC1pbiBvcGVyYXRvcnMgKi8KKyAgICAic2V0cSIsICAgIFNYX1NF VCwgMCwgICAgICAgICAgICAgICAvKiBHbG9iYWwgYXNzaWdubWVudCAqLworICAgICIrIiwgICAg ICAgU1hfQURELCAwLCAgICAgICAgICAgICAgIC8qIFNpbXBsZSBhcml0aG1ldGljICovCisgICAg Ii0iLCAgICAgICBTWF9TVUIsIDAsCisgICAgIioiLCAgICAgICBTWF9NVUwsIDAsCisgICAgIi8i LCAgICAgICBTWF9ESVYsIFNYRl9UV08sCisgICAgIl4iLCAgICAgICBTWF9QT1csIFNYRl9UV08s CisKKyAgICAiaWYiLCAgICAgIFNYX0lGQywgU1hGX1RXTywgICAgICAgICAvKiBJRiAqLworICAg ICJsZXQiLCAgICAgU1hfTEVULCAwLCAgICAgICAgICAgICAgIC8qIExvY2FsIGFzc2lnbm1lbnQg Ki8KKyAgICAibm90IiwgICAgIFNYX05PVCwgU1hGX09ORSwgICAgICAgICAvKiBOT1QgKi8KKyAg ICAibW9kIiwgICAgIFNYX01PRCwgU1hGX1RXTywgICAgICAgICAvKiBNb2R1bHVzICovCisKKyAg ICAiPCIsICAgICAgIFNYX0FMVCwgU1hGX1BSRSwJCS8qIENvbXBhcmlzb25zICovCisgICAgIj4i LCAgICAgICBTWF9BR1QsIFNYRl9QUkUsCisgICAgIjw9IiwgICAgICBTWF9BTEUsIFNYRl9QUkUs CisgICAgIj0iLCAgICAgICBTWF9BRVEsIFNYRl9QUkUsCisgICAgIj49IiwgICAgICBTWF9BR0Us IFNYRl9QUkUsCisgICAgIiE9IiwgICAgICBTWF9ORVEsIFNYRl9QUkUsCisKKyAgICAiKysiLCAg ICAgIFNYX0lOQywgU1hGX09ORXxTWEZfVFdPLCAvKiBJbmNyZW1lbnQgKi8KKyAgICAiLS0iLCAg ICAgIFNYX0RFQywgU1hGX09ORXxTWEZfVFdPLCAvKiBEZWNyZW1lbnQgKi8KKworICAgICIqKiIs ICAgICAgU1hfUE9XLCBTWEZfVFdPLCAgICAgICAgIC8qIENvbW1vbiBzeW5vbnltcyAqLworICAg ICI9PSIsICAgICAgU1hfQUVRLCBTWEZfUFJFLAorICAgICIhIiwgICAgICAgU1hfTk9ULCBTWEZf T05FLAorICAgICIuIiwgICAgICAgU1hfRVZBLCAwLAorCisgICAgImFuZCIsICAgICBTWF9BTkQs IDAsICAgICAgICAgICAgICAgLyogTG9naWNhbCBvcGVyYXRvcnMgKi8KKyAgICAib3IiLCAgICAg IFNYX0xPUiwgMCwKKyAgICAieG9yIiwgICAgIFNYX1hPUiwgU1hGX1RXTywKKworICAgICJtYXgi LCAgICAgU1hfTUFYLCBTWEZfT05FfFNYRl9UV08sIC8qIE1heCBhbmQgbWluICovCisgICAgIm1p biIsICAgICBTWF9NSU4sIFNYRl9PTkV8U1hGX1RXTywKKworICAgICIlIiwgICAgICAgU1hfTU9E LCBTWEZfVFdPLCAgICAgICAgIC8qIE1vcmUgc3lub255bXMgKi8KKyAgICAifHwiLCAgICAgIFNY X0xPUiwgMCwKKyAgICAiJiYiLCAgICAgIFNYX0FORCwgMCwKKworICAgICJxdW90ZSIsICAgU1hf UVVPLCBTWEZfT05FLAorICAgICJzdHJpbmciLCAgU1hfU1RSLCBTWEZfT05FLAorCisgICAgImV2 YWwiLCAgICBTWF9FVkEsIDAsICAgICAgICAgICAgICAgLyogQXNzb3J0ZWQgY29tbWFuZHMgKi8K KyAgICAiYWJzIiwgICAgIFNYX0FCUywgU1hGX09ORSwKKyAgICAidHJ1bmNhdGUiLFNYX1RSVSwg U1hGX09ORXxTWEZfRkxPLAorICAgICJyb3VuZCIsICAgU1hfUk9VLCBTWEZfT05FfFNYRl9UV098 U1hGX0ZMTywKKyAgICAiY2VpbGluZyIsIFNYX0NFSSwgU1hGX09ORXxTWEZfRkxPLAorICAgICJm bG9vciIsICAgU1hfRkxSLCBTWEZfT05FfFNYRl9GTE8sCisgICAgImZsb2F0IiwgICBTWF9GTE8s IFNYRl9PTkV8U1hGX0ZMTywKKworI2lmZGVmIEZORkxPQVQKKyAgICAic3FydCIsICAgIFNYX1NR UiwgU1hGX09ORXxTWEZfRkxPLCAvKiBGbG9hdGluZyBwb2ludCBmdW5jdGlvbnMgKi8KKyAgICAi ZXhwIiwgICAgIFNYX0VYUCwgU1hGX09ORXxTWEZfRkxPLAorICAgICJzaW4iLCAgICAgU1hfU0lO LCBTWEZfT05FfFNYRl9GTE8sCisgICAgImNvcyIsICAgICBTWF9DT1MsIFNYRl9PTkV8U1hGX0ZM TywKKyAgICAidGFuIiwgICAgIFNYX1RBTiwgU1hGX09ORXxTWEZfRkxPLAorICAgICJsb2ciLCAg ICAgU1hfTEdOLCBTWEZfT05FfFNYRl9GTE8sCisgICAgImxvZzEwIiwgICBTWF9MR1gsIFNYRl9P TkV8U1hGX0ZMTywKKyNlbmRpZiAvKiBGTkZMT0FUICovCisKKyAgICAiIyIsICAgICAgIFNYX0JX WCwgU1hGX1RXTywgICAgICAgICAvKiBCaXR3aXNlIG9wZXJhdG9ycyAqLworICAgICImIiwgICAg ICAgU1hfQldBLCAwLAorICAgICJ8IiwgICAgICAgU1hfQldPLCAwLAorICAgICJ+IiwgICAgICAg U1hfQldOLCBTWEZfT05FLAorICAgICIiLCAwLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIChlbmQpICovCit9Oworc3RhdGljIGludCBuc2V4cG9wcyA9IChzaXplb2Yoc2V4cG9wcykg LyBzaXplb2Yoc3RydWN0IGtleXRhYikpIC0gMTsKKworc3RhdGljIHN0cnVjdCBrZXl0YWIgc2V4 cGNvbnN0c1tdID0geyAgIC8qIEJ1aWx0LWluIGNvbnN0YW50cyAqLworICAgICJuaWwiLCBTWENf TklMLCAwLCAgICAgICAgICAgICAgICAgIC8qIE5JTCAoZmFsc2UpICovCisgICAgInBpIiwgIFNY Q19QSSwgIDAsICAgICAgICAgICAgICAgICAgLyogUGkgKDMuMTQxNTkyNi4uLikgKi8KKyAgICAi dCIsICAgU1hDX1QsICAgMCwgICAgICAgICAgICAgICAgICAvKiBUICh0cnVlKSAqLworICAgICIi LCAwLCAwCit9Oworc3RhdGljIGludCBuc2V4cGNvbnN0cyA9IChzaXplb2Yoc2V4cGNvbnN0cykg LyBzaXplb2Yoc3RydWN0IGtleXRhYikpIC0gMTsKKworaW50IHNleHByYyA9IDA7ICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIFMtRXhwcmVzc2lvbiBlcnJvciBmbGFnICovCitpbnQgc2V4cHB2 ID0gLTE7ICAgICAgICAgICAgICAgICAgICAgICAgLyogUHJlZGljYXRlIHZhbHVlICovCitzdGF0 aWMgaW50IHNleHB0cnVuYyA9IDA7CQkvKiBGbGFnIHRvIGZvcmNlIGFsbCByZXN1bHRzIHRvIGlu dCAqLworCisjZGVmaW5lIFNYTUxFTiA2NCAgICAgICAgICAgICAgICAgICAgICAgLyogTWFjcm8g YXJnIGxpc3QgaW5pdGlhbCBsZW5ndGggKi8KKyNpbmNsdWRlIDxtYXRoLmg+ICAgICAgICAgICAg ICAgICAgICAgICAvKiBGbG9hdGluZy1wb2ludCBmdW5jdGlvbnMgKi8KKworX1BST1RPVFlQKCBj aGFyICogZnBmb3JtYXQsIChDS0ZMT0FULCBpbnQsIGludCkgKTsKK19QUk9UT1RZUCggQ0tGTE9B VCBja3JvdW5kLCAoQ0tGTE9BVCwgaW50LCBjaGFyICosIGludCkgKTsKKworZXh0ZXJuIGNoYXIg bWF0aF9waVtdOyAgICAgICAgICAgICAgICAgIC8qIFZhbHVlIG9mIFBpICovCitleHRlcm4gaW50 IHNleHBlY2hvOyAgICAgICAgICAgICAgICAgICAgLyogU0VUIFNFWFBSRVNTSU9OIEVDSE8gdmFs dWUgKi8KK2V4dGVybiBjaGFyICogc2V4cHZhbDsgICAgICAgICAgICAgICAgICAvKiBMYXN0IHRv cC1sZXZlbCBTLUV4cHJlc3Npb24gdmFsdWUgKi8KK2V4dGVybiBjaGFyICogbGFzdHNleHA7ICAg ICAgICAgICAgICAgICAvKiBMYXN0IFMtRXhwcmVzc2lvbiAqLworaW50IHNleHBybWF4ID0gMDsg ICAgICAgICAgICAgICAgICAgICAgIC8qIExvbmdlc3QgcmVzdWx0IChmb3Igc3RhdHMpICovCitp bnQgc2V4cGRtYXggPSAwOyAgICAgICAgICAgICAgICAgICAgICAgLyogTWF4IGRlcHRoIHJlYWNo ZWQgKGZvciBzdGF0cykgKi8KK2ludCBzZXhwZGVwICA9IDA7ICAgICAgICAgICAgICAgICAgICAg ICAvKiBkb3NleHAoKSByZWN1cnNpb24gZGVwdGggKi8KK3N0YXRpYyBpbnQgKiBzeHJsZW4gPSBO VUxMOyAgICAgICAgICAgICAvKiBSZXN1bHQgc3RhY2sgc3RyaW5nIHNpemVzICovCitzdGF0aWMg Y2hhciAqKiBzeHJlc3VsdCA9IE5VTEw7ICAgICAgICAgLyogUmVzdWx0IHN0YWNrICovCisKKy8q ICBzIGggbyBzIGUgeCBwICAtLSAgU2hvdyBTLUV4cHJlc3Npb24gaW5mbyAgKi8KKworVk9JRAor c2hvc2V4cCgpIHsKKyAgICBwcmludGYoIlxuIik7CisgICAgcHJpbnRmKCIgc2V4cHJlc3Npb24g ZWNoby1yZXN1bHQ6ICVzXG4iLHNob3dvb2Eoc2V4cGVjaG8pKTsKKyAgICBwcmludGYoIiBzZXhw cmVzc2lvbiBkZXB0aC1saW1pdDogJWRcbiIsc2V4cG1heGRlcCk7CisgICAgcHJpbnRmKCJcbiIp OworICAgIHByaW50ZigiIG1heGltdW0gZGVwdGggcmVhY2hlZDogICAlZFxuIixzZXhwZG1heCk7 CisgICAgcHJpbnRmKCIgbG9uZ2VzdCByZXN1bHQgcmV0dXJuZWQ6ICVkXG4iLHNleHBybWF4KTsK KyAgICBwcmludGYoIlxuIik7CisgICAgcHJpbnRmKCIgdHJ1bmNhdGUgYWxsIHJlc3VsdHM6ICAg ICVzXG4iLHNob3dvZmYoc2V4cHRydW5jKSk7CisgICAgcHJpbnRmKCJcbiIpOworICAgIHByaW50 ZigiIGxhc3Qgc2V4cHJlc3Npb246ICAgICAgICAlc1xuIixsYXN0c2V4cCA/IGxhc3RzZXhwIDog Iihub25lKSIpOworICAgIHByaW50ZigiIGxhc3QgdmFsdWU6ICAgICAgICAgICAgICAlc1xuIixz ZXhwdmFsID8gc2V4cHZhbCA6ICIobm9uZSkiKTsKKyAgICBwcmludGYoIlxuIik7Cit9CisKKwor c3RhdGljIGNoYXIgKgorc2V4cGRlYnVnKHMpIGNoYXIgKiBzOyB7CisgICAgLyogRm9yIGRlYnVn Z2luZyAtLSBpbmNsdWRlcyByZWN1cnNpb24gZGVwdGggaW4gZWFjaCBkZWJ1ZyBlbnRyeSAqLwor ICAgIHN0YXRpYyBjaGFyIGJ1Zls2NF07CisgICAgY2ttYWttc2coYnVmLDY0LCJkb3NleHBbIixj a2l0b2Eoc2V4cGRlcCksIl0gIixzKTsKKyAgICByZXR1cm4oKGNoYXIgKilidWYpOworfQorCisv KiAgZCBvIHMgZSB4IHAgIC0tICBTLUV4cHJlc3Npb24gUmVhZGVyICAqLworCisvKiAgUmV0dXJu cyB2YWx1ZSBhcyBzdHJpbmcgKGVtcHR5LCBudW1lcmljLCBvciBub24tbnVtZXJpYykgKi8KKwor c3RhdGljIGNoYXIgc3hyb3VuZGJ1ZlszMl07CQkvKiBGb3IgUk9VTkQgcmVzdWx0ICovCisKK2No YXIgKgorZG9zZXhwKHMpIGNoYXIgKnM7IHsgICAgICAgICAgICAgICAgICAgIC8qIHMgPSBTLUV4 cHJlc3Npb24gKi8KKyAgICBleHRlcm4gc3RydWN0IG10YWIgKm1hY3RhYjsgICAgICAgICAvKiBN YWNybyB0YWJsZSAqLworICAgIGV4dGVybiBpbnQgbWFjbHZsLCBubWFjOworICAgIGV4dGVybiBj aGFyICptcnZhbFtdOworICAgIGV4dGVybiBpbnQgbWFrZXN0cmxlbjsgICAgICAgICAgICAgIC8q IChzZWUgbWFrZXN0cigpKSAqLworICAgIHN0cnVjdCBzdHJpbmdhcnJheSAqIHEgPSBOVUxMOyAg ICAgIC8qIGNrc3BsaXQoKSByZXR1cm4gdHlwZSAqLworICAgIGNoYXIgKiBwW1NFWFBNQVgrMV0s ICoqIHAyOyAgICAgICAgIC8qIExpc3QgaXRlbXMgKG11c3QgYmUgb24gc3RhY2spICovCisgICAg Y2hhciAqIGxpbmUgPSBOVUxMOyAgICAgICAgICAgICAgICAgLyogRm9yIGJ1aWxkaW5nIG1hY3Jv IGFyZ3VtZW50IGxpc3QgKi8KKyAgICBpbnQgbm9zcGxpdCA9IDA7CisgICAgaW50IGxpbmVsZW4g PSAwOworICAgIGludCBsaW5lcG9zID0gMDsKKyAgICBpbnQgcXVvdGUgPSAwOyAgICAgICAgICAg ICAgICAgICAgICAvKiBMSVNQIHF1b3RlIGZsYWcgKi8KKyAgICBjaGFyICogczI7ICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBXb3JrZXJzICovCisgICAgaW50IGt3LCBrd2ZsYWdzLCBteCA9 IDAsIHggPSAwOworICAgIGludCBub3QgPSAwLCB0cnVuY2F0ZSA9IDAsIGJ1aWx0aW4gPSAwOwor ICAgIGludCBmcGZsYWcgPSAwLCBxdWl0ID0gMCwgbWFjcm8gPSAwOworICAgIENLX09GRl9UIHJl c3VsdCA9IDAsIGksIGosIGssIG4gPSAwOworICAgIENLRkxPQVQgZnBqLCBmcHJlc3VsdCA9IDAu MDsgICAgICAgIC8qIEZsb2F0aW5nLXBvaW50IHJlc3VsdHMgKi8KKyAgICBpbnQgcGZsYWcgPSAw OyAgICAgICAgICAgICAgICAgICAgICAvKiBIYXZlIHByZWRpY2F0ZSAqLworICAgIGludCBwcmVz dWx0ID0gMDsgICAgICAgICAgICAgICAgICAgIC8qIFByZWRpY2F0ZSByZXN1bHQgKi8KKyAgICBp bnQgbXVzdGZyZWUgPSAwOyAgICAgICAgICAgICAgICAgICAvKiBJZiB3ZSBtYWxsb2MnZCB3ZSBt dXN0IGZyZWUgKi8KKworICAgIHNleHBwdiA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAgIC8q IFByZWRpY2F0ZSB2YWx1ZSAqLworICAgIHMyID0gIiI7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIERlZmF1bHQgcmV0dXJuIHZhbHVlICovCisKKyAgICBkZWJ1ZyhGMTExLHNleHBkZWJ1 ZygiZW50cnkgMSIpLHMsc2V4cHJjKTsKKworICAgIGlmICgrK3NleHBkZXAgPiBzZXhwbWF4ZGVw KSB7ICAgICAgIC8qIEtlZXAgdHJhY2sgb2YgZGVwdGggKi8KKyAgICAgICAgcHJpbnRmKCI/Uy1F eHByZXNzaW9uIGRlcHRoIGxpbWl0IGV4Y2VlZGVkOiAlZFxuIixzZXhwbWF4ZGVwKTsKKyAgICAg ICAgc2V4cHJjKys7CisgICAgICAgIGRlYnVnKEYxMTEsc2V4cGRlYnVnKCJtYXggZGVwdGggZXhj ZWVkZWQiKSxzLHNleHByYyk7CisgICAgfQorICAgIGlmIChzZXhwZGVwID4gc2V4cGRtYXgpICAg ICAgICAgICAgIC8qIEZvciBzdGF0cyAqLworICAgICAgc2V4cGRtYXggPSBzZXhwZGVwOworCisg ICAgaWYgKHNleHByYykgICAgICAgICAgICAgICAgICAgICAgICAgLyogRXJyb3IsIHF1aXQgYWxs IGxldmVscyAqLworICAgICAgZ290byB4ZG9zZXhwOyAgICAgICAgICAgICAgICAgICAgIC8qIEFs d2F5cyBnb3RvIGNvbW1vbiBleGl0IHBvaW50ICovCisKKyAgICBkZWJ1ZyhGMTExLHNleHBkZWJ1 ZygiZW50cnkgMiIpLHMsc2V4cHJjKTsKKworICAgIGlmICghcykgcyA9ICIiOyAgICAgICAgICAg ICAgICAgICAgIC8qIE51bGwgb3IgZW1wdHkgYXJnICovCisKKyAgICB3aGlsZSAoKnMgPT0gU1Ap IHMrKzsgICAgICAgICAgICAgICAvKiBTdHJpcCBsZWFkaW5nIHNwYWNlcyAqLworICAgIGlmICgh KnMpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNvIGVtcHR5IHJlc3VsdCAqLworICAg ICAgZ290byB4ZG9zZXhwOworLyoKKyAgQWxsb2NhdGUgcmVzdWx0IHN0YWNrIHVwb24gZmlyc3Qg dXNlLCBvciBhZnRlciBpdCBoYXMgYmVlbiByZXNpemVkIHdpdGgKKyAgU0VUIFNFWFAgREVQVEgt TElNSVQuCisqLworICAgIGlmICghc3hyZXN1bHQpIHsKKyAgICAgICAgc3hyZXN1bHQgPSAoY2hh ciAqKiltYWxsb2Moc2V4cG1heGRlcCAqIHNpemVvZihjaGFyICopKTsKKyAgICAgICAgaWYgKCFz eHJlc3VsdCkgeworICAgICAgICAgICAgcHJpbnRmKCI/TWVtb3J5IGFsbG9jYXRpb24gZmFpbHVy ZSAtIFwiJXNcIlxuIiwgcyk7CisgICAgICAgICAgICBzZXhwcmMrKzsKKyAgICAgICAgICAgIGdv dG8geGRvc2V4cDsKKyAgICAgICAgfQorICAgICAgICBzeHJsZW4gPSAoaW50ICopbWFsbG9jKHNl eHBtYXhkZXAgKiBzaXplb2YoaW50KSk7CisgICAgICAgIGlmICghc3hybGVuKSB7CisgICAgICAg ICAgICBwcmludGYoIj9NZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlIC0gXCIlc1wiXG4iLCBzKTsK KyAgICAgICAgICAgIHNleHByYysrOworICAgICAgICAgICAgZ290byB4ZG9zZXhwOworICAgICAg ICB9CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzZXhwbWF4ZGVwOyBpKyspIHsKKyAgICAgICAg ICAgIHN4cmVzdWx0W2ldID0gTlVMTDsgICAgICAgICAvKiBSZXN1bHQgcG9pbnRlcnMgKi8KKyAg ICAgICAgICAgIHN4cmxlbltpXSA9IDA7ICAgICAgICAgICAgICAvKiBCdWZmZXIgc2l6ZXMgKi8K KyAgICAgICAgfQorICAgIH0KKyAgICBzMiA9IHM7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBzMiBpcyB0aGUgcmVzdWx0IHBvaW50ZXIgKi8KKyAgICBrID0gMDsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBMZW5ndGggYWNjdW11bGF0b3IgKi8KKyAgICBpZiAoc1swXSA9 PSAnKCcpIHsgICAgICAgICAgICAgICAgICAvKiBTdGFydHMgd2l0aCBvcGVuIHBhcmVuPyAqLwor ICAgICAgICB3aGlsZSAoKnMyKyspIGsrKzsgICAgICAgICAgICAgIC8qIEdldCBsZW5ndGggKi8K KyAgICAgICAgaWYgKHNbay0xXSA9PSAnKScpIHsgICAgICAgICAgICAvKiBTdHJpcCBvdXRlciBw YXJlbnMgaWYgYW55ICovCisgICAgICAgICAgICBzW2stMV0gPSBOVUw7CisgICAgICAgICAgICBz Kys7CisgICAgICAgICAgICBrIC09IDI7CisgICAgICAgICAgICB3aGlsZSAoKnMgPT0gU1ApIHsg ICAgICAgICAgLyogU3RyaXAgbGVhZGluZyBzcGFjZXMgZnJvbSByZXN1bHQgKi8KKyAgICAgICAg ICAgICAgICBzKys7CisgICAgICAgICAgICAgICAgay0tOworICAgICAgICAgICAgfQorICAgICAg ICAgICAgd2hpbGUgKGsgPiAwICYmIHNbay0xXSA9PSBTUCkgeyAvKiBBbmQgdHJhaWxpbmcgc3Bh Y2VzLiAqLworICAgICAgICAgICAgICAgIHNbay0xXSA9IE5VTDsKKyAgICAgICAgICAgICAgICBr LS07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCEqcykgeyAgICAgICAg ICAgICAgICAgICAgICAvKiBJZiBub3RoaW5nIHJlbWFpbnMgKi8KKyAgICAgICAgICAgIHMyID0g IiI7ICAgICAgICAgICAgICAgICAgICAvKiByZXR1cm4gZW1wdHkgcmVzdWx0LiAqLworICAgICAg ICAgICAgZ290byB4ZG9zZXhwOworICAgICAgICB9CisgICAgfQorICAgIC8qIEJyZWFrIHJlc3Vs dCB1cCBpbnRvICJ3b3JkcyIgKGFuIFNFWFAgY291bnRzIGFzIGEgd29yZCkgKi8KKworICAgIGZv ciAoaSA9IDA7IGkgPCBTRVhQTUFYKzE7IGkrKyApIHsJLyogQ2xlYXIgdGhlIG9wZXJhbmRzICov CisJcFtpXSA9IE5VTEw7CisgICAgfQorICAgIGlmICghKihzKzEpIHx8ICEqKHMrMikpIHsgICAg ICAgICAgIC8qIE5vIG5lZWQgdG8gY2FsbCBja3NwbGl0KCkgKi8KKyAgICAgICAgbiA9IDE7ICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBpZiBpdCdzIG9uZSBvciB0d28gY2hhcnMuICovCisg ICAgICAgIHBbMV0gPSBzOyAgICAgICAgICAgICAgICAgICAgICAgLyogTm8gbmVlZCB0byBtYWxs b2MgdGhpcyBlaXRoZXIuICovCisJbm9zcGxpdCA9IDE7CisgICAgICAgIGRlYnVnKEYxMDEsc2V4 cGRlYnVnKCJub3NwbGl0IiksIiIsbik7CisgICAgICAgIGlmIChzWzBdID09ICcoJykgeyAgICAg ICAgICAgICAgLyogKCkgZW1wdHkgKi8KKyAgICAgICAgICAgIHMyID0gIiI7CisgICAgICAgICAg ICBnb3RvIHhkb3NleHA7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworCW5vc3BsaXQgPSAwOwor ICAgICAgICBxID0gY2tzcGxpdCgxLFNFWFBNQVgscyxOVUxMLCJcXCVbXSYkKy0vPSpeX0Ahe30v PD58LiN+J2A6Oz8iLDgsMzksMCk7CisgICAgICAgIGlmICghcSkKKyAgICAgICAgICBnb3RvIHhk b3NleHA7CisgICAgICAgIG4gPSBxLT5hX3NpemU7ICAgICAgICAgICAgICAgICAgLyogTnVtYmVy IG9mIGl0ZW1zICovCisgICAgICAgIGRlYnVnKEYxMDEsc2V4cGRlYnVnKCJzcGxpdCIpLCIiLG4p OworICAgICAgICBpZiAobiA8IDAgfHwgbiA+IFNFWFBNQVgpIHsgICAgIC8qIENoZWNrIGZvciB0 b28gbWFueSAqLworICAgICAgICAgICAgcHJpbnRmKCI/VG9vIG1hbnkgb3BlcmFuZHM6IG1heCA9 ICVkXG4iLFNFWFBNQVgpOworICAgICAgICAgICAgc2V4cHJjKys7CisgICAgICAgICAgICBnb3Rv IHhkb3NleHA7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG4gPT0gMCkgICAgICAgICAgICAgICAg ICAgICAvKiBOb25lLCByZXN1bHQgaXMgTlVMTCwgZG9uZS4gKi8KKyAgICAgICAgICBnb3RvIHhk b3NleHA7CisgICAgICAgIGlmIChuID09IDEgJiYgc1swXSA9PSAnKCcpIHsgICAgLyogT25lIGJ1 dCBpdCdzIGFub3RoZXIgU0VYUCAqLworICAgICAgICAgICAgczIgPSBkb3NleHAocyk7CisgICAg ICAgICAgICBnb3RvIHhkb3NleHA7CisgICAgICAgIH0KKyAgICAgICAgcDIgPSBxLT5hX2hlYWQ7 ICAgICAgICAgICAgICAgICAvKiBQb2ludCB0byByZXN1bHQgYXJyYXkuICovCisgICAgICAgIGZv ciAoaSA9IDE7IGkgPD0gbjsgaSsrKSB7ICAgICAgLyogV2UgbXVzdCBjb3B5IGl0IGJlY2F1c2Ug Ki8KKyAgICAgICAgICAgIHBbaV0gPSBOVUxMOyAgICAgICAgICAgICAgICAvKiByZWN1cnNpdmUg Y2FsbHMgdG8gZG9zZXhwKCkgKi8KKyAgICAgICAgICAgIGlmIChwMltpXSkgICAgICAgICAgICAg ICAgICAvKiB3cml0ZSBvdmVyIHRoZSBzYW1lIGFycmF5ICovCisgICAgICAgICAgICAgIG1ha2Vz dHIoJihwW2ldKSxwMltpXSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHNbMF0gPT0gJygnKSB7 ICAgICAgICAgICAgICAvKiBPcGVyYXRvciBpcyBhbiBTLUV4cHJlc3Npb24gKi8KKyAgICAgICAg ICAgIHMyID0gZG9zZXhwKHBbMV0pOyAgICAgICAgICAvKiBSZXBsYWNlIGl0IGJ5IGl0cyB2YWx1 ZSAqLworICAgICAgICAgICAgbWFrZXN0cigmKHBbMV0pLHMyKTsKKyAgICAgICAgfQorICAgICAg ICBtdXN0ZnJlZSsrOyAgICAgICAgICAgICAgICAgICAgIC8qIFJlbWVtYmVyIHRvIGZyZWUgaXQg Ki8KKyAgICB9CisgICAgZGVidWcoRjExMCxzZXhwZGVidWcoImhlYWQiKSxwWzFdLDApOworCisg ICAgaWYgKG4gPT0gMSAmJiBwWzFdKSB7CisgICAgICAgIGlmICgqKHBbMV0pID09ICdcMDQ3Jykg eyAgICAgICAvKiBBcG9zdHJvcGhlID0gTElTUCBxdW90ZSBjaGFyYWN0ZXIgKi8KKyAgICAgICAg ICAgIHMyID0gcFsxXTsKKyAgICAgICAgICAgIGdvdG8geGRvc2V4cDsKKyAgICAgICAgfQorICAg IH0KKy8qCisgIFRoaXMgc2VjdGlvbiBzaWRlc3RlcHMgeGxvb2t1cCgpIG9mIHRoZSBtb3N0IGNv bW1vbiBvcGVyYXRvcnMuCisgIEl0J3Mgbm90IG5lY2Vzc2FyeSBidXQgaXQgc3BlZWRzIHVwIFNF WFAtaGVhdnkgbG9vcHMgYnkgYWJvdXQgMTAlLgorKi8KKyAgICBrd2ZsYWdzID0gMDsKKyAgICBp ZiAobiA+IDApIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBMb29rIHVwIHRoZSBvcGVyYXRv ciAqLworICAgICAgICBzMiA9IHBbMV07ICAgICAgICAgICAgICAgICAgICAgIC8qIFByZWxvb2t1 cCBvcHRpbWl6YXRpb24uLi4gKi8KKyAgICAgICAgaWYgKCFzMikKKyAgICAgICAgICBzMiA9ICIi OworICAgICAgICBpZiAoISpzMikKKyAgICAgICAgICBnb3RvIHhkb3NleHA7CisgICAgICAgIGt3 ID0gMDsKKyAgICAgICAgeCA9IDA7CisgICAgICAgIGlmIChpc2RpZ2l0KCpzMikpIHsgICAgICAg ICAgICAgLyogRGlnaXQgKi8KKyAgICAgICAgICAgIHggPSAtMjsKKworICAgICAgICB9IGVsc2Ug aWYgKGlzYWxwaGEoKnMyKSAmJiAhKihzMisxKSkgeyAvKiBTaW5nbGUgbGV0dGVyICovCisgICAg ICAgICAgICB4ID0gLTE7CisKKyAgICAgICAgfSBlbHNlIGlmICgqczIgPT0gJ3MnIHx8ICpzMiA9 PSAnUycpIHsgLyogU0VUUSAqLworICAgICAgICAgICAgczIrKzsKKyAgICAgICAgICAgIGlmICgq czIgPT0gJ2UnIHx8ICpzMiA9PSAnRScpIHsKKyAgICAgICAgICAgICAgICBzMisrOworICAgICAg ICAgICAgICAgIGlmICgqczIgPT0gJ3QnIHx8ICpzMiA9PSAnVCcpIHsKKyAgICAgICAgICAgICAg ICAgICAgczIrKzsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCpzMiA9PSAncScgfHwgKnMyID09 ICdRJykgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEqKHMyKzEpKSB7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgeCA9IFNYX1NFVDsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICBrd2ZsYWdzID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsdGluID0g MTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoIXgp IHsKKyAgICAgICAgICAgIGlmICghKihzMisxKSkgeyAgICAgICAgICAgICAvKiBDb21tb24gc2lu Z2xlLWNoYXJhY3RlciBvcHMgKi8KKyAgICAgICAgICAgICAgICBpZiAoKnMyID09ICcrJykgewor ICAgICAgICAgICAgICAgICAgICB4ID0gU1hfQUREOworICAgICAgICAgICAgICAgICAgICBrd2Zs YWdzID0gMDsKKyAgICAgICAgICAgICAgICAgICAgYnVpbHRpbiA9IDE7CisgICAgICAgICAgICAg ICAgfSBlbHNlIGlmICgqczIgPT0gJy0nKSB7CisgICAgICAgICAgICAgICAgICAgIHggPSBTWF9T VUI7CisgICAgICAgICAgICAgICAgICAgIGt3ZmxhZ3MgPSAwOworICAgICAgICAgICAgICAgICAg ICBidWlsdGluID0gMTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCpzMiA9PSAnKicpIHsK KyAgICAgICAgICAgICAgICAgICAgeCA9IFNYX01VTDsKKyAgICAgICAgICAgICAgICAgICAga3dm bGFncyA9IDA7CisgICAgICAgICAgICAgICAgICAgIGJ1aWx0aW4gPSAxOworICAgICAgICAgICAg ICAgIH0gZWxzZSBpZiAoKnMyID09ICcvJykgeworICAgICAgICAgICAgICAgICAgICB4ID0gU1hf RElWOworICAgICAgICAgICAgICAgICAgICBrd2ZsYWdzID0gU1hGX1RXTzsKKyAgICAgICAgICAg ICAgICAgICAgYnVpbHRpbiA9IDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor ICAgICAgICAgICAgaWYgKCF4KSB7ICAgICAgICAgICAgICAgICAgIC8qIE5vbmUgb2YgdGhlIGFi b3ZlLCBsb29rIGl0IHVwICovCisgICAgICAgICAgICAgICAgeCA9IHhsb29rdXAoc2V4cG9wcyxw WzFdLG5zZXhwb3BzLCZrdyk7CisgICAgICAgICAgICAgICAgaWYgKHggPiAwKSB7CisgICAgICAg ICAgICAgICAgICAgIGt3ZmxhZ3MgPSBzZXhwb3BzW2t3XS5mbGdzOworICAgICAgICAgICAgICAg ICAgICBidWlsdGluID0gMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg ICAgIH0KKyAgICB9CisgICAgLyogSWYgbm9uZSBvZiB0aGUgYWJvdmUsIGNoZWNrIGJ1aWx0LWlu IGNvbnN0YW50cyAqLworCisgICAgaWYgKHggPT0gLTEpIHsKKyAgICAgICAgeCA9IHhsb29rdXAo c2V4cGNvbnN0cyxwWzFdLG5zZXhwY29uc3RzLCZrdyk7CisgICAgICAgIGlmICh4ID4gMCkgewor ICAgICAgICAgICAgc3dpdGNoICh4KSB7CisgICAgICAgICAgICAgIGNhc2UgU1hDX05JTDoKKyAg ICAgICAgICAgICAgICBzMiA9ICIiOworICAgICAgICAgICAgICAgIGdvdG8geGRvc2V4cDsKKyAg ICAgICAgICAgICAgY2FzZSBTWENfUEk6CisgICAgICAgICAgICAgICAgczIgPSBtYXRoX3BpOwor ICAgICAgICAgICAgICAgIGdvdG8geGRvc2V4cDsKKyAgICAgICAgICAgICAgY2FzZSBTWENfVDoK KyAgICAgICAgICAgICAgICBzMiA9ICIxIjsKKyAgICAgICAgICAgICAgICBnb3RvIHhkb3NleHA7 CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKG4gPT0gMSkgeyAgICAg ICAgICAgICAgICAgICAgICAgLyogTm90IGFuIGV4cHJlc3Npb24gKi8KKyAgICAgICAgaWYgKGJ1 aWx0aW4pIHsgICAgICAgICAgICAgICAgICAvKiBCdWlsdC1pbiBvcGVyYW5kPyAqLworICAgICAg ICAgICAgc3dpdGNoICh4KSB7CQkvKiBPcGVyYXRvcnMgd2l0aCBkZWZhdWx0IHZhbHVlcyAqLwor ICAgICAgICAgICAgICBjYXNlIFNYX0VWQToKKyAgICAgICAgICAgICAgICBzMiA9ICIiOworICAg ICAgICAgICAgICAgIGdvdG8geGRvc2V4cDsKKyAgICAgICAgICAgICAgY2FzZSBTWF9NVUw6ICAg ICAgICAgICAgICAvKiAoKikgKi8KKyAgICAgICAgICAgICAgICBzMiA9IHNleHB2YWwgPyBzZXhw dmFsIDogIjEiOworICAgICAgICAgICAgICAgIGdvdG8geGRvc2V4cDsKKyAgICAgICAgICAgICAg Y2FzZSBTWF9BTkQ6ICAgICAgICAgICAgICAvKiAoQU5EKSAqLworICAgICAgICAgICAgICBjYXNl IFNYX0JXQTogICAgICAgICAgICAgIC8qIEJpdHdpc2UgKCYpICovCisgICAgICAgICAgICAgICAg cmVzdWx0Kys7CisgICAgICAgICAgICAgIGNhc2UgU1hfTE9SOiAgICAgICAgICAgICAgLyogKE9S KSAqLworICAgICAgICAgICAgICBjYXNlIFNYX0JXTzogICAgICAgICAgICAgIC8qIEJpdHdpc2Ug KHwpICovCisgICAgICAgICAgICAgIGNhc2UgU1hfQUREOiAgICAgICAgICAgICAgLyogKCspICov CisgICAgICAgICAgICAgIGNhc2UgU1hfU1VCOiAgICAgICAgICAgICAgLyogKC0pICovCisgICAg ICAgICAgICAgICAgczIgPSByZXN1bHQgPyAiMSIgOiAiMCI7CisgICAgICAgICAgICAgICAgZ290 byB4ZG9zZXhwOworICAgICAgICAgICAgfQorCisgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAg ICAgICAgICAgICAgLyogTm90IGEgYnVpbHQtaW4gb3BlcmFuZCAqLworICAgICAgICAgICAgY2hh ciAqIHAxOworICAgICAgICAgICAgcDEgPSBwWzFdOworICAgICAgICAgICAgd2hpbGUgKCpwMSA9 PSBTUCkgcDErKzsKKyAgICAgICAgICAgIGlmICghaXNhbHBoYSgqcDEpKSB7CisgICAgICAgICAg ICAgICAgaWYgKHh4ZmxvYXQocDEsMCkgPiAwKSB7IC8qIElzIGl0IGEgbnVtYmVyPyAqLworICAg ICAgICAgICAgICAgICAgICBzMiA9IHAxOworICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKnMy ID09ICcrJykgczIrKzsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCpwMSA9PSAnKCcpIHsg LyogQW4gUy1FeHByZXNzaW9uPyAqLworCisjaWZkZWYgQ09NTUVOVAorICAgICAgICAgICAgICAg ICAgICBzMiA9IGRvc2V4cChzMik7CisjZWxzZQorICAgICAgICAgICAgICAgICAgICBzMiA9IGRv c2V4cChwMSk7CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgICBnb3RvIHhkb3NleHA7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHggPCAxKSB7 ICAgICAgICAgLyogSXMgaXQgYSB2YXJpYWJsZT8gKi8KKyAgICAgICAgICAgICAgICBqID0gbXhs b29rKG1hY3RhYixwWzFdLG5tYWMpOyAvKiBMb29rIGl0IHVwICovCisgICAgICAgICAgICAgICAg ZGVidWcoRjExMSxzZXhwZGVidWcoIm49PTEgbXhsb29rIikscFsxXSxqKTsKKyAgICAgICAgICAg ICAgICBzMiA9IChqID4gLTEpID8gbWFjdGFiW2pdLm12YWwgOiAiIjsKKyAgICAgICAgICAgICAg ICBpZiAoIXMyKSBzMiA9ICIiOworICAgICAgICAgICAgICAgIGlmICh4eGZsb2F0KHMyLDApID4g MCkgIC8qIE1hY3JvIHZhbHVlIGlzIGEgbnVtYmVyICovCisgICAgICAgICAgICAgICAgICBnb3Rv IHhkb3NleHA7CisgICAgICAgICAgICAgICAgaWYgKGogPiAtMSkgeyAgICAgICAgICAgLyogSXQn cyBhIG1hY3JvICovCisgICAgICAgICAgICAgICAgICAgIG14ID0gajsKKyAgICAgICAgICAgICAg ICAgICAgeCA9IGo7ICAgICAgICAgICAgICAvKiB3aG9zZSBkZWZpbml0aW9uIGlzIG5vdCBudW1l cmljICovCisgICAgICAgICAgICAgICAgICAgIGlmICgqczIgPT0gJygnKSB7ICAgLyogSXMgaXQg YW4gUy1FeHByZXNzaW9uPyAqLworICAgICAgICAgICAgICAgICAgICAgICAgLyogV2UgaGF2ZSB0 byBhbGxvY2F0ZSBtZW1vcnkgb24gdGhlIHN0YWNrICovCisgICAgICAgICAgICAgICAgICAgICAg ICAvKiB0byBjYWxsIG91cnNlbHZlcyByZWN1cnNpdmVseSBvbiBpdCAqLworICAgICAgICAgICAg ICAgICAgICAgICAgLyogb3RoZXJ3aXNlIHdlJ2xsIHdpcGUgb3V0IHRoZSBtYWNybyBkZWZpbml0 aW9uICovCisgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICogczMgPSBOVUxMOworICAgICAg ICAgICAgICAgICAgICAgICAgLyogaW50IGsgPSAwOyAqLworICAgICAgICAgICAgICAgICAgICAg ICAgczMgPSBzMjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgqczMrKykgaysrOwor ICAgICAgICAgICAgICAgICAgICAgICAgczMgPSAoY2hhciAqKW1hbGxvYyhrICsgNCk7CisgICAg ICAgICAgICAgICAgICAgICAgICBpZiAoczMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzdHJjcHkoczMsczIpOyAgIC8qIFNBRkUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzMiA9IGRvc2V4cChzMyk7IC8qIEV2YWx1YXRlIGl0ICovCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZnJlZShzMyk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiP01lbW9yeSBhbGxvY2F0aW9uIGZhaWx1 cmUgLSBcIiVzXCJcbiIsczIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNleHByYysr OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZ290 byB4ZG9zZXhwOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlm ICgqczIgPT0gJ1wwNDcnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzMisrOworI2lmZGVm IENPTU1FTlQKKwkJCS8qIER1bXBzIGNvcmUgaWYgcGV0dHkgb3B0aW1pemF0aW9uIHdhcyB0YWtl biAqLworICAgICAgICAgICAgICAgICAgICAgICAgbWFrZXN0cigmKHBbMV0pLHMyKTsKKyNlbHNl CisJCQlpZiAoIW5vc3BsaXQgJiYgcFsxXSkgZnJlZShwWzFdKTsKKwkJCXBbMV0gPSAoY2hhciAq KW1hbGxvYygoaW50KXN0cmxlbihzMikgKyAxKTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAg ICAgICAgICAgICAgICAgICAgICBzMiA9IHBbMV07CisJCQlpZiAoIXMyKSBzMiA9ICIiOworICAg ICAgICAgICAgICAgICAgICAgICAgaWYgKCpzMiA9PSAnKCcpIHsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpZiAoczJbbWFrZXN0cmxlbi0xXSA9PSAnKScpIHsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgczJbbWFrZXN0cmxlbi0xXSA9IE5VTDsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgczIrKzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhG MTEwLHNleHBkZWJ1ZygiJ0EiKSxzMiwwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8g eGRvc2V4cDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBtYWNy bysrOyAgICAgICAgICAgIC8qIE5vdCBhbiBTLUV4cHJlc3Npb24gKi8KKyAgICAgICAgICAgICAg ICB9IGVsc2UgeyAgICAgICAgICAgICAgICAvKiBOb3QgZm91bmQgaW4gbWFjcm8gdGFibGUgKi8K KyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/Tm90IGRlZmluZWQgLSBcIiVzXCJcbiIsIHBb MV0pOworICAgICAgICAgICAgICAgICAgICBzZXhwcmMrKzsKKyAgICAgICAgICAgICAgICAgICAg Z290byB4ZG9zZXhwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg fQorICAgIH0gZWxzZSBpZiAoeCA8IDEgJiYgIW1hY3JvKSB7ICAgICAgIC8qIG4gPiAxIGFuZCBu b3QgYSBidWlsdC1pbiBvcGVyYXRvciAqLworICAgICAgICB4ID0gbXhsb29rKG1hY3RhYixwWzFd LG5tYWMpOyAgIC8qIFNlZSBpZiBpdCdzIGEgbWFjcm8gKi8KKyAgICAgICAgZGVidWcoRjExMSxz ZXhwZGVidWcoIm4hPTEgbXhsb29rIikscFsxXSx4KTsKKyAgICAgICAgaWYgKHggPCAwKSB7Cisg ICAgICAgICAgICBwcmludGYoIj9JbnZhbGlkIG9wZXJhbmQgLSBcIiVzXCJcbiIscFsxXSk7Cisg ICAgICAgICAgICBzZXhwcmMrKzsKKyAgICAgICAgICAgIGdvdG8geGRvc2V4cDsKKyAgICAgICAg fQorICAgICAgICBteCA9IHg7CisgICAgICAgIG1hY3JvKys7CisgICAgfQorICAgIGlmIChidWls dGluKSB7ICAgICAgICAgICAgICAgICAgICAgIC8qIEJ1aWx0LWluIG9wZXJhdG9yLi4uICovCisg ICAgICAgIGlmIChrd2ZsYWdzKSB7CisgICAgICAgICAgICBpbnQgZmxnczsKKyAgICAgICAgICAg IGlmICgoZmxncyA9IChrd2ZsYWdzICYgKFNYRl9PTkV8U1hGX1RXTykpKSkgeworICAgICAgICAg ICAgICAgIHN3aXRjaCAoZmxncykgeworICAgICAgICAgICAgICAgICAgY2FzZSAoU1hGX09ORXxT WEZfVFdPKToKKyAgICAgICAgICAgICAgICAgICAgaWYgKG4gPCAyKSB7CisgICAgICAgICAgICAg ICAgICAgICAgICBwcmludGYoIj9Ub28gZmV3IG9wZXJhbmRzIC0gXCIlc1wiXG4iLHMpOworICAg ICAgICAgICAgICAgICAgICAgICAgc2V4cHJjKys7CisgICAgICAgICAgICAgICAgICAgICAgICBn b3RvIHhkb3NleHA7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg YnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIFNYRl9UV086CisgICAgICAgICAgICAgICAg ICAgIGlmIChuIDwgMykgeworICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/VG9vIGZl dyBvcGVyYW5kcyAtIFwiJXNcIlxuIixzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNleHBy YysrOworICAgICAgICAgICAgICAgICAgICAgICAgZ290byB4ZG9zZXhwOworICAgICAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg Y2FzZSBTWEZfT05FOgorCQkgICAgaWYgKG4gIT0gMikgeworICAgICAgICAgICAgICAgICAgICAg ICAgcHJpbnRmKCI/VG9vICVzIG9wZXJhbmRzIC0gXCIlc1wiXG4iLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChuID4gMikgPyAibWFueSIgOiAiZmV3Iiwgcyk7CisgICAgICAgICAg ICAgICAgICAgICAgICBzZXhwcmMrKzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8geGRv c2V4cDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIH0KKyAgICAgICAgICAgIGlmIChrd2ZsYWdzICYgU1hGX1BSRSkgeyAgICAvKiBQcmVkaWNh dGU/ICovCisJCWlmIChuIDwgMikgeworCQkgICAgcHJpbnRmKCI/VG9vIGZldyBvcGVyYW5kcyAt IFwiJXNcIlxuIixzKTsKKwkJICAgIHNleHByYysrOworCQkgICAgZ290byB4ZG9zZXhwOworCQl9 CisgICAgICAgICAgICAgICAgcGZsYWcgPSAxOworICAgICAgICAgICAgICAgIHByZXN1bHQgPSAx OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGt3ZmxhZ3MgJiBTWEZfRkxPKSAgICAg IC8qIE9wZXJhdG9yIHJlcXVpcmVzIGZsb2F0aW5nIHBvaW50ICovCisgICAgICAgICAgICAgIGZw ZmxhZysrOyAgICAgICAgICAgICAgICAgLyogRm9yY2UgaXQgKi8KKworCSAgICBpZiAoeCA9PSBT WF9ST1UpIHsJCS8qIFJPVU5EIGNhbiBoYXZlIDEgb3IgMiBhcmd1bWVudHMgKi8KKwkJaWYgKG4g PCAyIHx8IG4gPiAzKSB7CisJCSAgICBwcmludGYoIj9Ub28gJXMgb3BlcmFuZHMgLSBcIiVzXCJc biIsCisJCQkgICAobiA+IDMpID8gIm1hbnkiIDogImZldyIsIHMpOworCQkgICAgc2V4cHJjKys7 CisJCSAgICBnb3RvIHhkb3NleHA7CisJCX0KKwkgICAgfQorCSAgICBpZiAoeCA9PSBTWF9ST1Up IHsKKwkJLyogQnV0IHRoZXkgYXJlIG5vdCAiY3VtdWxhdGl2ZSIgbGlrZSBvdGhlciBTRVhQIGFy Z3MgKi8KKwkJLyogU28gdGhpcyBjYXNlIGlzIGhhbmRsZWQgc3BlY2lhbGx5ICovCisJCWNoYXIg YnVmMVszMl0sIGJ1ZjJbMzJdOworCQlmbG9hdCByOworCQljaGFyICogczAsICogczE7CisJCWNo YXIgKiBxMCwgKiBxMTsKKworCQlzMCA9IHBbMl07CisJCWlmICghczApIHMwID0gIiI7CisJCWlm ICghKnMwKSBzMCA9ICIwIjsKKwkJcTAgPSBkb3NleHAoczApOworCQlja3N0cm5jcHkoYnVmMSxx MCwzMik7CisJCXEwID0gYnVmMTsKKworCQlzMSA9IHBbM107CisJCWlmICghczEpIHMxID0gIiI7 CisJCWlmICghKnMxKSBzMSA9ICIwIjsKKwkJcTEgPSBkb3NleHAoczEpOworCQlpZiAoIXExKSBx MSA9ICIiOworCQlpZiAoISpxMSkgcTEgPSAiMCI7CisJCWNrc3RybmNweShidWYyLHExLDMyKTsK KwkJcTEgPSBidWYyOworCisJCXIgPSBja3JvdW5kKGF0b2YocTApLChpbnQpKGF0b2YocTEpKSxz eHJvdW5kYnVmLDMxKTsKKwkJczIgPSBzeHJvdW5kYnVmOworCQlzZXhwcmMgPSAwOworCQlnb3Rv IHhkb3NleHA7CisJICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoeCA9PSBTWF9TRVQgfHwg eCA9PSBTWF9MRVQgfHwgLyogQXNzaWdubWVudCBpcyBzcGVjaWFsICovCisgICAgICAgICAgICB4 ID09IFNYX0lOQyB8fCB4ID09IFNYX0RFQykgeworICAgICAgICAgICAgaW50IHJjOworICAgICAg ICAgICAgY2hhciBjLCAqIG0sICogczM7CisgICAgICAgICAgICBpZiAobiA9PSAxKSB7CisgICAg ICAgICAgICAgICAgczIgPSAiIjsKKyAgICAgICAgICAgICAgICBnb3RvIHhkb3NleHA7CisgICAg ICAgICAgICB9CisgICAgICAgICAgICBzMiA9IE5VTEw7CisgICAgICAgICAgICBmb3IgKGkgPSAx OyBpIDwgbjsgaSArPSAyKSB7IC8qIExvb3AgdGhydSBvcGVyYW5kIHBhaXJzICovCisgICAgICAg ICAgICAgICAgcmMgPSAwOworICAgICAgICAgICAgICAgIHMzID0gcFtpKzFdOworICAgICAgICAg ICAgICAgIGMgPSAqczM7CisgICAgICAgICAgICAgICAgZGVidWcoRjExMCxzZXhwZGVidWcoInRh cmdldCBwIiksczMsMCk7CisKKyAgICAgICAgICAgICAgICAvKiBNYWtlIHN1cmUgdGFyZ2V0IGRv ZXNuJ3QgaGF2ZSBtdWx0aXBsZSB3b3JkcyAqLworICAgICAgICAgICAgICAgIHdoaWxlICgqczMp IHsgaWYgKCpzMyA8ICchJykgeyByYyA9IDE7IGJyZWFrOyB9OyBzMysrOyB9CisgICAgICAgICAg ICAgICAgczMgPSBwW2krMV07CisgICAgICAgICAgICAgICAgaWYgKHJjKSB7ICAgICAgICAgICAg ICAgLyogSWYgaXQgZG9lcyBpdCBtdXN0IGhhdmUgYmVlbiAqLworICAgICAgICAgICAgICAgICAg ICBjaGFyICogczQ7ICAgICAgICAgIC8qIGFuIFNFWFAgc28gZXZhbHVhdGUgaXQgKi8KKyAgICAg ICAgICAgICAgICAgICAgczMgPSBkb3NleHAoczMpOworICAgICAgICAgICAgICAgICAgICBzNCA9 IHMzOworICAgICAgICAgICAgICAgICAgICByYyA9IDA7CisgICAgICAgICAgICAgICAgICAgIHdo aWxlICgqczQpIHsgaWYgKCpzNCA8ICchJykgeyByYyA9IDE7IGJyZWFrOyB9OyBzNCsrOyB9Cisg ICAgICAgICAgICAgICAgICAgIGlmIChyYyA9PSAwKSBtYWtlc3RyKCYocFtpKzFdKSxzMyk7Cisg ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLyogQW5kIHRoYXQgaXQncyBub3Qg YSBudW1iZXIsIGV0Yy4gKi8KKyAgICAgICAgICAgICAgICBpZiAocmMgPiAwIHx8IGlzZGlnaXQo YykgfHwgYyA9PSAnKCcpIHsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/SW52YWxpZCBh c3NpZ25tZW50IC0gXCIlc1wiXG4iLHMpOworICAgICAgICAgICAgICAgICAgICBzZXhwcmMrKzsK KyAgICAgICAgICAgICAgICAgICAgZ290byB4ZG9zZXhwOworICAgICAgICAgICAgICAgIH0gZWxz ZSBpZiAoaXNhbHBoYShjKSkgeworICAgICAgICAgICAgICAgICAgICByYyA9IHhsb29rdXAoc2V4 cGNvbnN0cyxzMyxuc2V4cGNvbnN0cyxOVUxMKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJj ID4gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/QXNzaWdubWVudCB0byBj b25zdGFudCAtIFwiJXNcIlxuIixzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNleHByYysr OworICAgICAgICAgICAgICAgICAgICAgICAgZ290byB4ZG9zZXhwOworICAgICAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLyogSWYgKysgb3Ig LS0sIGdldCBjdXJyZW50IHZhbHVlIG9mIHZhcmlhYmxlICovCisgICAgICAgICAgICAgICAgaWYg KHggPT0gU1hfSU5DIHx8IHggPT0gU1hfREVDKSB7CisgICAgICAgICAgICAgICAgICAgIGludCBv ayA9IDE7CisgICAgICAgICAgICAgICAgICAgIGNoYXIgYnVmWzMyXTsKKyAgICAgICAgICAgICAg ICAgICAgaWYgKGMgPT0gQ01EUSkgeyAgICAvKiBBIGJhY2tzbGFzaCB2YXJpYWJsZSAqLworICAg ICAgICAgICAgICAgICAgICAgICAgaW50IG4gPSAzMjsKKyAgICAgICAgICAgICAgICAgICAgICAg IGNoYXIgKiBzID0gYnVmOworICAgICAgICAgICAgICAgICAgICAgICAgYnVmWzBdID0gTlVMOwor ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHp6c3RyaW5nKHMzLCZzLCZuKSA8IDAgfHwgIWJ1 ZlswXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgb2sgPSAwOworICAgICAgICAgICAgICAg ICAgICAgICAgczIgPSBidWY7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7ICAgICAgICAg ICAgLyogQSBtYWNybyAqLworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChrID0gbXhsb29r KG1hY3RhYixzMyxubWFjKSkgPCAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICBvayA9IDA7 CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAg IHMyID0gbWFjdGFiW2tdLm12YWw7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg ICAgICAgICAgaWYgKCFvaykgeworICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/Tm90 IGRlZmluZWQgLSBcIiVzXCJcbiIscFtpKzFdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNl eHByYysrOworICAgICAgICAgICAgICAgICAgICAgICAgZ290byB4ZG9zZXhwOworICAgICAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICghczIpIHMyID0gIiI7CisgICAg ICAgICAgICAgICAgICAgIGsgPSB4eGZsb2F0KHMyLDApOworICAgICAgICAgICAgICAgICAgICBp ZiAoayA8IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiP05vdCBudW1lcmlj IC0gXCIlc1wiXG4iLHBbaSsxXSk7CisgICAgICAgICAgICAgICAgICAgICAgICBzZXhwcmMrKzsK KyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8geGRvc2V4cDsKKyAgICAgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKnMyID09ICcrJykgczIrKzsKKyAgICAg ICAgICAgICAgICAgICAgcmVzdWx0ID0gY2thdG9mcyhzMik7CisgICAgICAgICAgICAgICAgICAg IGZwcmVzdWx0ID0gZmxvYXR2YWw7CisgICAgICAgICAgICAgICAgICAgIGlmIChrID4gMSB8fCBm cHJlc3VsdCAhPSByZXN1bHQpCisgICAgICAgICAgICAgICAgICAgICAgZnBmbGFnKys7CisgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChuIDwgaSsyKSB7ICAgICAgICAgIC8q IFZhcmlhYmxlIHdpdGggbm8gdmFsdWUgKi8KKyAgICAgICAgICAgICAgICAgICAgczIgPSAiIjsK KyAgICAgICAgICAgICAgICAgICAgaWYgKHggPT0gU1hfU0VUIHx8IHggPT0gU1hfTEVUKSB7Cisg ICAgICAgICAgICAgICAgICAgICAgICBkZWxtYWMocFtpKzFdLDEpOyAvKiBEZWxldGUgdGhlIHZh cmlhYmxlICovCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHMyID0gIjEiOworICAgICAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAg LyogVmFyaWFibGUgd2l0aCB2YWx1ZSAqLworICAgICAgICAgICAgICAgICAgICBrID0geHhmbG9h dChwW2krMl0sMCk7IC8qIElzIGl0IGEgbnVtYmVyPyAqLworICAgICAgICAgICAgICAgICAgICBp ZiAoayA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHMyID0gcFtpKzJdOworICAgICAg ICAgICAgICAgICAgICAgICAgd2hpbGUgKCpzMiA9PSAnKycpIHMyKys7CisgICAgICAgICAgICAg ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzMiA9IGRvc2V4cChwW2kr Ml0pOyAvKiBIYXZlIHZhbHVlLCBldmFsdWF0ZSBpdCAqLworICAgICAgICAgICAgICAgICAgICAg ICAgaWYgKHNleHByYykgZ290byB4ZG9zZXhwOworICAgICAgICAgICAgICAgICAgICAgICAgaWYg KCFzMikgczIgPSAiIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKnMyICYmICh4ID09 IFNYX0lOQyB8fCB4ID09IFNYX0RFQykpCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRp bnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICAgIGlmICh4ID09IFNYX0lOQyB8fCB4ID09IFNYX0RFQykgeworICAgICAgICAgICAgICAg ICAgICBrID0geHhmbG9hdChzMiwwKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGsgPCAxKSB7 CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIj9Ob3QgbnVtZXJpYyAtIFwiJXNcIlxu IixzMik7CisgICAgICAgICAgICAgICAgICAgICAgICBzZXhwcmMrKzsKKyAgICAgICAgICAgICAg ICAgICAgICAgIGdvdG8geGRvc2V4cDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICAgICAgICB3aGlsZSAoKnMyID09ICcrJykgczIrKzsKKyAgICAgICAgICAgICAgICAgICAg aiA9IGNrYXRvZnMoczIpOworICAgICAgICAgICAgICAgICAgICBpZiAoayA+IDEpIHsKKyAgICAg ICAgICAgICAgICAgICAgICAgIGZwaiA9IGZsb2F0dmFsOworICAgICAgICAgICAgICAgICAgICAg ICAgZnBmbGFnKys7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg ICAgICAgICAgICBmcGogPSAoQ0tGTE9BVClqOworICAgICAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgICAgICAgIGlmICh4ID09IFNYX0lOQykgeworICAgICAgICAgICAgICAgICAgICAg ICAgcmVzdWx0ICs9IGo7CisgICAgICAgICAgICAgICAgICAgICAgICBmcHJlc3VsdCArPSBmcGo7 CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoeCA9PSBTWF9ERUMpIHsKKyAgICAgICAg ICAgICAgICAgICAgICAgIHJlc3VsdCAtPSBqOworICAgICAgICAgICAgICAgICAgICAgICAgZnBy ZXN1bHQgLT0gZnBqOworICAgICAgICAgICAgICAgICAgICB9CisjaWZkZWYgRk5GTE9BVAorICAg ICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICE9IGZwcmVzdWx0KSBmcGZsYWcrKzsKKyNlbmRp ZgkvKiBGTkZMT0FUICovCisgICAgICAgICAgICAgICAgICAgIHMyID0gKGZwZmxhZyAmJiAhc2V4 cHRydW5jKSA/CisJCQlmcGZvcm1hdChmcHJlc3VsdCwwLDApIDogY2tmc3RvYShyZXN1bHQpOwor ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoeCA9PSBTWF9MRVQgJiYgY21k bHZsID4gMCkgLyogTEVUIG1ha2VzIHZhciBsb2NhbCAqLworICAgICAgICAgICAgICAgICAgYWRk bG9jYWwocFtpKzFdKTsKKyAgICAgICAgICAgICAgICBpZiAoKHJjID0gYWRkbWFjKHBbaSsxXSxz MikpIDwgMCkgeyAvKiBBZGQgdGhlIHZhbHVlICovCisgICAgICAgICAgICAgICAgICAgIHN3aXRj aCAocmMpIHsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIC0zOiBtID0gIkFycmF5IG5vdCBk ZWNsYXJlZCI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgLTI6IG0gPSAiU3Vi c2NyaXB0IG91dCBvZiByYW5nZSI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug LTQ6IG0gPSAiT3V0IG9mIG1lbW9yeSI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgIGRl ZmF1bHQ6IG0gPSAiRXJyb3IgY3JlYXRpbmcgdmFyaWFibGUiOworICAgICAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiPyVzIC0gXCIlc1wiXG4iLG0scyk7Cisg ICAgICAgICAgICAgICAgICAgIHNleHByYysrOworICAgICAgICAgICAgICAgICAgICBnb3RvIHhk b3NleHA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChzMikgcmVzdWx0 ID0gY2thdG9mcyhzMik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBnb3RvIHhkb3NleHA7 CisgICAgICAgIH0gZWxzZSBpZiAoeCA9PSBTWF9JRkMpIHsgICAgICAgICAgICAgICAvKiBDb25k aXRpb25hbCBleHByZXNzaW9uICovCisgICAgICAgICAgICBpbnQgdHJ1ZSA9IDA7CisgICAgICAg ICAgICBpZiAobiA+IDQpIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIj9Ub28gbWFueSBvcGVy YW5kczogSUYgLSBcIiVzXCJcbiIscyk7CisgICAgICAgICAgICAgICAgc2V4cHJjKys7CisgICAg ICAgICAgICAgICAgZ290byB4ZG9zZXhwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgczIg PSBkb3NleHAocFsyXSk7CisgICAgICAgICAgICBpZiAoc2V4cHJjKSBnb3RvIHhkb3NleHA7Cisg ICAgICAgICAgICBpZiAoczIpIHsKKyAgICAgICAgICAgICAgICBqID0gY2thdG9mcyhzMik7Cisg ICAgICAgICAgICAgICAgaWYgKHh4ZmxvYXQoczIsMCkgPT0gMikgeworICAgICAgICAgICAgICAg ICAgICBmcGZsYWcrKzsKKyAgICAgICAgICAgICAgICAgICAgZnByZXN1bHQgPSAoQ0tGTE9BVCly ZXN1bHQ7CisgICAgICAgICAgICAgICAgICAgIGZwaiA9IGZsb2F0dmFsOworICAgICAgICAgICAg ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGZwaiA9IGF0b2YoczIpOworICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0cnVlID0gKChmcGogIT0gMC4wKSA/IDEgOiAw KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghdHJ1ZSAmJiBuIDwgNCkgeworICAg ICAgICAgICAgICAgIHMyID0gTlVMTDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg ICAgICAgczIgPSBkb3NleHAodHJ1ZSA/IHBbM10gOiBwWzRdKTsKKyAgICAgICAgICAgICAgICBp ZiAoc2V4cHJjKSBnb3RvIHhkb3NleHA7CisgICAgICAgICAgICAgICAgaiA9IHMyID8gY2thdG9m cyhzMikgOiAwOworICAgICAgICAgICAgICAgIGlmICh4eGZsb2F0KHMyLDApID09IDIpIHsKKyAg ICAgICAgICAgICAgICAgICAgZnBmbGFnKys7CisgICAgICAgICAgICAgICAgICAgIGZwcmVzdWx0 ID0gKENLRkxPQVQpcmVzdWx0OworICAgICAgICAgICAgICAgICAgICBmcGogPSBmbG9hdHZhbDsK KyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBmcGogPSBzMiA/ IGF0b2YoczIpIDogMC4wOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBmcHJl c3VsdCA9IGZwajsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBqOworICAgICAgICAgICAgfQor ICAgICAgICAgICAgZ290byB4ZG9zZXhwOworICAgICAgICB9IGVsc2UgaWYgKHggPT0gU1hfUVVP KSB7CisjaWZuZGVmIENPTU1FTlQKKyAgICAgICAgICAgIGludCB4eDsKKyAgICAgICAgICAgIHh4 ID0gc3RybGVuKHBbMl0pOworICAgICAgICAgICAgcFszXSA9IChjaGFyICopbWFsbG9jKHh4KzQp OworICAgICAgICAgICAgczIgPSBwWzNdOworICAgICAgICAgICAgY2ttYWttc2cocFszXSx4eCs0 LCInKCIscFsyXSwiKSIsTlVMTCk7CisgICAgICAgICAgICBuKys7CisjZWxzZQorICAgICAgICAg ICAgczIgPSBwWzJdOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAgICAgIGdvdG8geGRv c2V4cDsKKyAgICAgICAgfSBlbHNlIGlmICh4ID09IFNYX1NUUikgeworICAgICAgICAgICAgaW50 IHh4OworICAgICAgICAgICAgczIgPSBkb3NleHAocFsyXSk7CisgICAgICAgICAgICBpZiAoc2V4 cHJjKSBnb3RvIHhkb3NleHA7CisgICAgICAgICAgICB4eCA9IHN0cmxlbihzMik7CisgICAgICAg ICAgICBwWzNdID0gKGNoYXIgKiltYWxsb2MoeHgrNCk7CisgICAgICAgICAgICBja21ha21zZyhw WzNdLHh4KzQsIicoIixzMiwiKSIsTlVMTCk7CisgICAgICAgICAgICBzMiA9IHBbM107CisgICAg ICAgICAgICBuKys7CisgICAgICAgICAgICBnb3RvIHhkb3NleHA7CisgICAgICAgIH0KKyAgICB9 CisgICAgLyogQXJpdGhtZXRpYyBvcGVyYXRvciBvciBtYWNybyAtIExvb3AgdGhydSBvcGVyYW5k cyAqLworCisgICAgcXVpdCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2hvcnQt Y2lyY3VpdCBmbGFnLiAqLworICAgIGlmIChtYWNybyAmJiBuID4gMSkgeyAgICAgICAgICAgICAg IC8qIElmIG9wZXJhdG9yIGlzIGEgbWFjcm8gKi8KKyAgICAgICAgaWYgKCFsaW5lKSB7ICAgICAg ICAgICAgICAgICAgICAvKiBhbGxvY2F0ZSBsb2NhbCBidWZmZXIgZm9yICovCisgICAgICAgICAg ICBsaW5lID0gKGNoYXIgKiltYWxsb2MoU1hNTEVOKTsgLyogdGhlIGV2YWx1YXRlZCBhcmd1bWVu dCBsaXN0LiAqLworICAgICAgICAgICAgaWYgKCFsaW5lKSB7CisgICAgICAgICAgICAgICAgcHJp bnRmKCI/TWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSAtIFwiJXNcIlxuIixwWzFdKTsKKyAgICAg ICAgICAgICAgICBzZXhwcmMrKzsKKyAgICAgICAgICAgICAgICBnb3RvIHhkb3NleHA7CisgICAg ICAgICAgICB9CisgICAgICAgICAgICBsaW5lbGVuID0gU1hNTEVOOworICAgICAgICAgICAgLyog ZGVidWcoRjEwMSwiZG9zZXhwIG1hY3JvIGFyZyBidWZmZXIiLCIiLGxpbmVsZW4pOyAqLworICAg ICAgICB9CisgICAgICAgIGxpbmVwb3MgPSAwOworICAgICAgICBsaW5lW2xpbmVwb3NdID0gTlVM OworICAgIH0KKyAgICBmb3IgKGkgPSAxOyAoKGkgPCBuKSAmJiAhc2V4cHJjICYmICFxdWl0KTsg aSsrKSB7IC8qIExvb3AgdGhydSBvcGVyYW5kcyAqLworICAgICAgICBxdW90ZSA9IDA7CisgICAg ICAgIHMyID0gcFtpKzFdOyAgICAgICAgICAgICAgICAgICAgLyogR2V0IG9wZXJhbmQgKi8KKyAg ICAgICAgaWYgKCFzMikgczIgPSAiIjsKKworI2lmZGVmIENPTU1FTlQKKyAgICAgICAgaWYgKCpz MiA9PSAnXDA0NycpIHsgICAgICAgICAgICAvKiBJcyBpdCBxdW90ZWQ/ICovCisgICAgICAgICAg ICBkZWJ1ZyhGMTEwLHNleHBkZWJ1ZygiJ0IiKSxzMiwwKTsKKyAgICAgICAgICAgIHMyKys7ICAg ICAgICAgICAgICAgICAgICAgICAvKiBTcGFjZSBwYXN0IHRoZSBxdW90ZSAqLworICAgICAgICAg ICAgcXVvdGUrKzsKKyAgICAgICAgICAgIGlmICgqczIgPT0gJygnKSB7ICAgICAgICAgICAvKiBR dW90ZWQgUy1FeHByZXNzaW9uPyAqLworICAgICAgICAgICAgICAgIGNoYXIgYzQsICogczQgPSBz MisxOyAgIC8qIFN0cmlwIG91dGVyIHBhcmVucyAqLworICAgICAgICAgICAgICAgIHdoaWxlICgo YzQgPSAqczQrKykpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGM0ID09ICcpJyAmJiAhKnM0 KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzMisrOworICAgICAgICAgICAgICAgICAgICAg ICAgKihzNC0xKSA9IE5VTDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg ICAgICAgZGVidWcoRjExMCxzZXhwZGVidWcoIidDIiksczIsMCk7CisKKyAgICAgICAgfSBlbHNl IHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBOb3QgcXVvdGVkICovCisgICAgICAgICAgICBz MiA9IGRvc2V4cChwW2krMV0pOyAgICAgICAgLyogZXZhbHVhdGUgaXQgKi8KKyAgICAgICAgICAg IGlmIChzZXhwcmMpIGdvdG8geGRvc2V4cDsKKyAgICAgICAgICAgIGlmICghczIpIHMyID0gIiI7 CisgICAgICAgICAgICBpZiAoIW1hY3JvICYmIHggPT0gU1hfRVZBKQorICAgICAgICAgICAgICBj b250aW51ZTsKKyAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgaWYgKCpzMiAhPSAnXDA0NycpIHsg ICAgICAgICAgICAvKiBJcyBpdCBxdW90ZWQ/ICovCisgICAgICAgICAgICBzMiA9IGRvc2V4cChw W2krMV0pOyAgICAgICAgLyogTm8sIGV2YWx1YXRlIGl0ICovCisgICAgICAgICAgICBpZiAoc2V4 cHJjKSBnb3RvIHhkb3NleHA7CisgICAgICAgICAgICBpZiAoIXMyKSBzMiA9ICIiOworICAgICAg ICAgICAgaWYgKCFtYWNybyAmJiB4ID09IFNYX0VWQSkKKyAgICAgICAgICAgICAgY29udGludWU7 CisgICAgICAgIH0KKyAgICAgICAgaWYgKCpzMiA9PSAnXDA0NycpIHsgICAgICAgICAgICAvKiBJ cyByZXN1bHQgcXVvdGVkPyAqLworICAgICAgICAgICAgZGVidWcoRjExMCxzZXhwZGVidWcoIidC IiksczIsMCk7CisgICAgICAgICAgICBzMisrOyAgICAgICAgICAgICAgICAgICAgICAgLyogU3Bh Y2UgcGFzdCB0aGUgcXVvdGUgKi8KKyAgICAgICAgICAgIHF1b3RlKys7CisgICAgICAgICAgICBp ZiAoKnMyID09ICcoJykgeyAgICAgICAgICAgLyogUXVvdGVkIFMtRXhwcmVzc2lvbj8gKi8KKyAg ICAgICAgICAgICAgICBjaGFyIGM0LCAqIHM0ID0gczIrMTsgICAvKiBTdHJpcCBvdXRlciBwYXJl bnMgKi8KKyAgICAgICAgICAgICAgICB3aGlsZSAoKGM0ID0gKnM0KyspKSB7CisgICAgICAgICAg ICAgICAgICAgIGlmIChjNCA9PSAnKScgJiYgISpzNCkgeworICAgICAgICAgICAgICAgICAgICAg ICAgczIrKzsKKyAgICAgICAgICAgICAgICAgICAgICAgICooczQtMSkgPSBOVUw7CisgICAgICAg ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlYnVnKEYxMTAsc2V4cGRlYnVn KCInQyIpLHMyLDApOworICAgICAgICB9CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAgICBp ZiAobWFjcm8pIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMTEsc2V4cGRlYnVnKCJtYWNybyBhcmci KSxzMixpKTsKKyAgICAgICAgICAgIGlmICghKnMyKSBxdW90ZSsrOworICAgICAgICAgICAgaWYg KCFxdW90ZSkgeworICAgICAgICAgICAgICAgIHJlZ2lzdGVyIGNoYXIgYzQsICogczQgPSBzMjsK KyAgICAgICAgICAgICAgICB3aGlsZSAoKGM0ID0gKnM0KyspKSBpZiAoYzQgPT0gU1ApIHsgcXVv dGUrKzsgYnJlYWs7IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChxdW90ZSkgbGlu ZVtsaW5lcG9zKytdID0gJ3snOworICAgICAgICAgICAgd2hpbGUgKChsaW5lW2xpbmVwb3MrK10g PSAqczIrKykpIHsKKyAgICAgICAgICAgICAgICBpZiAobGluZXBvcyA+IGxpbmVsZW4gLSAzKSB7 CisgICAgICAgICAgICAgICAgICAgIGNoYXIgKiB0bXAgPSBOVUxMOworICAgICAgICAgICAgICAg ICAgICBsaW5lW2xpbmVwb3NdID0gTlVMOworICAgICAgICAgICAgICAgICAgICBsaW5lbGVuICs9 IFNYTUxFTjsKKyAgICAgICAgICAgICAgICAgICAgdG1wID0gKGNoYXIgKikgbWFsbG9jKGxpbmVs ZW4pOworICAgICAgICAgICAgICAgICAgICBpZiAoIXRtcCkgeworICAgICAgICAgICAgICAgICAg ICAgICAgcHJpbnRmKCI/TWVtb3J5IHJlLWFsbG9jYXRpb24gZmFpbHVyZSAtIFwiJXMuLi5cIlxu IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lKTsKKyAgICAgICAgICAgICAg ICAgICAgICAgIHNleHByYysrOworICAgICAgICAgICAgICAgICAgICAgICAgZ290byB4ZG9zZXhw OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHN0cmNweSh0bXAs bGluZSk7CisgICAgICAgICAgICAgICAgICAgIGZyZWUobGluZSk7CisgICAgICAgICAgICAgICAg ICAgIGxpbmUgPSB0bXA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg ICAgICAgbGluZXBvcy0tOyAgICAgICAgICAgICAgICAgIC8qIEJhY2sgdXAgb3ZlciBOVUwgKi8K KyAgICAgICAgICAgIGlmIChxdW90ZSkKKyAgICAgICAgICAgICAgbGluZVtsaW5lcG9zKytdID0g J30nOyAgICAvKiBFbmQgcXVvdGUgZ3JvdXAgKi8KKyAgICAgICAgICAgIGxpbmVbbGluZXBvcysr XSA9IFNQOyAgICAgICAvKiBhZGQgYSBzcGFjZSAqLworICAgICAgICAgICAgbGluZVtsaW5lcG9z XSA9IE5VTDsgICAgICAgIC8qIGFuZCBhIE5VTCAqLworICAgICAgICAgICAgY29udGludWU7Cisg ICAgICAgIH0KKyAgICAgICAgaWYgKCFxdW90ZSkgeyAgICAgICAgICAgICAgICAgICAvKiBCdWls dC1pbiBvcGVyYXRvci4uLiAqLworICAgICAgICAgICAgczIgPSBkb3NleHAoczIpOworICAgICAg ICAgICAgaWYgKHNleHByYykgZ290byB4ZG9zZXhwOworICAgICAgICAgICAgaWYgKCFzMikgczIg PSAiIjsKKyAgICAgICAgfQorICAgICAgICBpZiAoeCA9PSBTWF9FVkEpCisgICAgICAgICAgY29u dGludWU7CisKKyAgICAgICAgaWYgKCEqczIpIHsKKyAgICAgICAgICAgIC8qIEFuIGVtcHR5IHZh bHVlIGlzIG5vdCBhIGxlZ2FsIG51bWJlciAqLworICAgICAgICAgICAgLyogYnV0IGl0IGlzIGEg bGVnYWwgdHJ1dGggdmFsdWUgKi8KKyAgICAgICAgICAgIGlmICh4ICE9IFNYX0FORCAmJiB4ICE9 IFNYX0xPUiAmJiB4ICE9IFNYX05PVCkgeworICAgICAgICAgICAgICAgIHByaW50ZigiP05vdCBO dW1lcmljIC0gXCIlc1wiXG4iLHBbaSsxXSk7CisgICAgICAgICAgICAgICAgc2V4cHJjKys7Cisg ICAgICAgICAgICAgICAgZ290byB4ZG9zZXhwOworICAgICAgICAgICAgfQorICAgICAgICAgICAg aiA9IDA7CisgICAgICAgICAgICBmcGogPSAwLjA7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg ICAgICBqID0gY2thdG9mcyhzMik7CisgICAgICAgICAgICAvKiBTd2l0Y2ggdG8gZmxvYXRpbmct cG9pbnQgdXBvbiBlbmNvdW50ZXJpbmcgYW55IGYucC4gYXJnICovCisgICAgICAgICAgICAvKiBP Ui4uLiBpZiBpbnRlZ2VyIGlzIHRvbyBiaWcgKi8KKyAgICAgICAgICAgIGlmICghZnBmbGFnKSBp ZiAoeHhmbG9hdChzMiwwKSA9PSAyKQorICAgICAgICAgICAgICBmcGZsYWcrKzsKKyAgICAgICAg ICAgIGZwaiA9IGF0b2YoczIpOworICAgICAgICB9CisgICAgICAgIGlmIChpID09IDEpIHsgICAg ICAgICAgICAgICAgICAgLyogSW5pdGlhbCByZXN1bHQgaXMgZmlyc3Qgb3BlcmFuZCAqLworICAg ICAgICAgICAgcmVzdWx0ID0gKG4gPT0gMiAmJiB4ID09IFNYX1NVQikgPyAwLWogOiBqOworICAg ICAgICAgICAgZnByZXN1bHQgPSAobiA9PSAyICYmIHggPT0gU1hfU1VCKSA/IC1mcGogOiBmcGo7 CisJICAgIGlmICgoeCA9PSBTWF9BTkQgJiYgcmVzdWx0ID09IDApIHx8CS8qIFNob3J0IGNpcmN1 aXQgKi8KKwkJKHggPT0gU1hfTE9SICYmIHJlc3VsdCAhPSAwKSkKKwkgICAgICBxdWl0Kys7Cisg ICAgICAgICAgICBpZiAoIShrd2ZsYWdzICYgU1hGX09ORSkpCS8qIENvbW1hbmQgdy9zaW5nbGUg YXJnICovCisgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmICh4 ID09IFNYX01PRCB8fCB4ID09IFNYX0RJVikgeworICAgICAgICAgICAgaWYgKCFyZXN1bHQpCisg ICAgICAgICAgICAgIGZwZmxhZysrOworICAgICAgICAgICAgaWYgKCFmcGopIHsKKyAgICAgICAg ICAgICAgICBwcmludGYoIj9EaXZpZGUgYnkgemVybyAtIFwiJXNcIlxuIixjbWRidWYpOworICAg ICAgICAgICAgICAgIHNleHByYysrOworICAgICAgICAgICAgICAgIGdvdG8geGRvc2V4cDsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBzd2l0Y2ggKHgpIHsJCQkvKiBBY2N1bXVs YXRlIHJlc3VsdCAqLworCisgICAgICAgICAgY2FzZSBTWF9FVkE6ICAgICAgICAgICAgICAgICAg LyogRVZBTCAqLworICAgICAgICAgICAgcmVzdWx0ID0gajsKKyAgICAgICAgICAgIGZwcmVzdWx0 ID0gZnBqOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIFNYX0FERDogICAg ICAgICAgICAgICAgICAvKiArICovCisgICAgICAgICAgICByZXN1bHQgKz0gajsKKyAgICAgICAg ICAgIGZwcmVzdWx0ICs9IGZwajsKKyNpZmRlZiBGTkZMT0FUCisgICAgICAgICAgICBpZiAocmVz dWx0ICE9IGZwcmVzdWx0KQorICAgICAgICAgICAgICBmcGZsYWcrKzsKKyNlbmRpZgkvKiBGTkZM T0FUICovCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgU1hfU1VCOiAgICAg ICAgICAgICAgICAgIC8qIC0gKi8KKyAgICAgICAgICAgIHJlc3VsdCAtPSBqOworICAgICAgICAg ICAgZnByZXN1bHQgLT0gZnBqOworI2lmZGVmIEZORkxPQVQKKyAgICAgICAgICAgIGlmIChyZXN1 bHQgIT0gZnByZXN1bHQpCisgICAgICAgICAgICAgIGZwZmxhZysrOworI2VuZGlmCS8qIEZORkxP QVQgKi8KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBTWF9NVUw6ICAgICAg ICAgICAgICAgICAgLyogKiAqLworICAgICAgICAgICAgcmVzdWx0ICo9IGo7CisgICAgICAgICAg ICBmcHJlc3VsdCAqPSBmcGo7CisjaWZkZWYgRk5GTE9BVAorICAgICAgICAgICAgaWYgKHJlc3Vs dCAhPSBmcHJlc3VsdCkKKyAgICAgICAgICAgICAgZnBmbGFnKys7CisjZW5kaWYJLyogRk5GTE9B VCAqLworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIFNYX0FORDogICAgICAg ICAgICAgICAgICAvKiBBTkQgKi8KKyAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiBqOwor ICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHF1aXQrKzsKKyAgICAgICAgICAgIGZwcmVzdWx0ID0g ZnByZXN1bHQgJiYgZnBqOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIFNY X0xPUjogICAgICAgICAgICAgICAgICAvKiBPUiAqLworICAgICAgICAgICAgcmVzdWx0ID0gcmVz dWx0IHx8IGo7CisgICAgICAgICAgICBpZiAoIXJlc3VsdCkgcXVpdCsrOworICAgICAgICAgICAg ZnByZXN1bHQgPSBmcHJlc3VsdCB8fCBmcGo7CisgICAgICAgICAgICBicmVhazsKKworICAgICAg ICAgIGNhc2UgU1hfTU9EOiAgICAgICAgICAgICAgICAgIC8qIE1vZHVsdXMgKi8KKyAgICAgICAg ICAgIHJlc3VsdCA9IHJlc3VsdCAlIGo7CisjaWZkZWYgRk5GTE9BVAorICAgICAgICAgICAgZnBy ZXN1bHQgPSAoQ0tGTE9BVClmbW9kKGZwcmVzdWx0LGZwaik7CisgICAgICAgICAgICBpZiAocmVz dWx0ICE9IGZwcmVzdWx0KQorICAgICAgICAgICAgICBmcGZsYWcrKzsKKyNlbHNlCisgICAgICAg ICAgICBmcHJlc3VsdCA9IHJlc3VsdDsKKyNlbmRpZiAvKiBGTkZMT0FUICovCisgICAgICAgICAg ICBicmVhazsKKworICAgICAgICAgIGNhc2UgU1hfRElWOiAgICAgICAgICAgICAgICAgIC8qIC8g Ki8KKwkgICAgaWYgKGopIHsKKwkJcmVzdWx0IC89IGo7CisJCWZwcmVzdWx0IC89IGZwajsKKyNp ZmRlZiBGTkZMT0FUCisJCWlmIChyZXN1bHQgIT0gZnByZXN1bHQpCisJCSAgZnBmbGFnKys7Cisj ZW5kaWYJLyogRk5GTE9BVCAqLworCSAgICB9IGVsc2UgeworCQlmcHJlc3VsdCAvPSBmcGo7CisJ CXJlc3VsdCA9IGZwajsKKyNpZmRlZiBGTkZMT0FUCisJCSAgZnBmbGFnKys7CisjZW5kaWYJLyog Rk5GTE9BVCAqLworCSAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2Ug U1hfQUVROiAgICAgICAgICAgICAgICAgIC8qIFRlc3QgZm9yIGVxdWFsaXR5ICovCisgICAgICAg ICAgICBpZiAoZnBmbGFnKSB7CisgICAgICAgICAgICAgICAgaWYgKGZwcmVzdWx0ICE9IGZwaikK KyAgICAgICAgICAgICAgICAgIHByZXN1bHQgPSAwOworICAgICAgICAgICAgfSBlbHNlIHsKKyAg ICAgICAgICAgICAgICBpZiAocmVzdWx0ICE9IGopCisgICAgICAgICAgICAgICAgICBwcmVzdWx0 ID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2Fz ZSBTWF9ORVE6ICAgICAgICAgICAgICAgICAgLyogVGVzdCBmb3IgaW5lcWFsaXR5ICovCisgICAg ICAgICAgICBpZiAoZnBmbGFnKSB7CisgICAgICAgICAgICAgICAgaWYgKGZwcmVzdWx0ID09IGZw aikKKyAgICAgICAgICAgICAgICAgIHByZXN1bHQgPSAwOworICAgICAgICAgICAgfSBlbHNlIHsK KyAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09IGopCisgICAgICAgICAgICAgICAgICBwcmVz dWx0ID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAg Y2FzZSBTWF9BTEU6ICAgICAgICAgICAgICAgICAgLyogQXJpdGhtZXRpYyBsZXNzLWVxdWFsICov CisgICAgICAgICAgICBpZiAoZnBmbGFnKSB7CisgICAgICAgICAgICAgICAgaWYgKGZwaiA8IGZw cmVzdWx0KQorICAgICAgICAgICAgICAgICAgcHJlc3VsdCA9IDA7CisgICAgICAgICAgICAgICAg ZnByZXN1bHQgPSBmcGo7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlm IChqIDwgcmVzdWx0KQorICAgICAgICAgICAgICAgICAgcHJlc3VsdCA9IDA7CisgICAgICAgICAg ICAgICAgcmVzdWx0ID0gajsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisg ICAgICAgICAgY2FzZSBTWF9BTFQ6ICAgICAgICAgICAgICAgICAgLyogQXJpdGhtZXRpYyBsZXNz LXRoYW4gKi8KKyAgICAgICAgICAgIGlmIChmcGZsYWcpIHsKKyAgICAgICAgICAgICAgICBpZiAo ZnBqIDw9IGZwcmVzdWx0KQorICAgICAgICAgICAgICAgICAgcHJlc3VsdCA9IDA7CisgICAgICAg ICAgICAgICAgZnByZXN1bHQgPSBmcGo7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg ICAgICAgIGlmIChqIDw9IHJlc3VsdCkKKyAgICAgICAgICAgICAgICAgIHByZXN1bHQgPSAwOwor ICAgICAgICAgICAgICAgIHJlc3VsdCA9IGo7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBi cmVhazsKKworICAgICAgICAgIGNhc2UgU1hfQUdUOiAgICAgICAgICAgICAgICAgIC8qIEFyaXRo bWV0aWMgZ3JlYXRlci10aGFuICovCisgICAgICAgICAgICBpZiAoZnBmbGFnKSB7CisgICAgICAg ICAgICAgICAgaWYgKGZwaiA+PSBmcHJlc3VsdCkKKyAgICAgICAgICAgICAgICAgIHByZXN1bHQg PSAwOworICAgICAgICAgICAgICAgIGZwcmVzdWx0ID0gZnBqOworICAgICAgICAgICAgfSBlbHNl IHsKKyAgICAgICAgICAgICAgICBpZiAoaiA+PSByZXN1bHQpCisgICAgICAgICAgICAgICAgICBw cmVzdWx0ID0gMDsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBqOworICAgICAgICAgICAgfQor ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIFNYX0FHRTogICAgICAgICAgICAg ICAgICAvKiBBcml0aG1ldGljIGdyZWF0ZXItZXF1YWwgKi8KKyAgICAgICAgICAgIGlmIChmcGZs YWcpIHsKKyAgICAgICAgICAgICAgICBpZiAoZnBqID4gZnByZXN1bHQpCisgICAgICAgICAgICAg ICAgICBwcmVzdWx0ID0gMDsKKyAgICAgICAgICAgICAgICBmcHJlc3VsdCA9IGZwajsKKyAgICAg ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKGogPiByZXN1bHQpCisgICAgICAg ICAgICAgICAgICBwcmVzdWx0ID0gMDsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBqOworICAg ICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIFNYX1BPVzog ICAgICAgICAgICAgICAgICAvKiBSYWlzZSB0byBwb3dlciAqLworI2lmZGVmIEZORkxPQVQKKyAg ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkb3VibGUgZHVtbXk7CisgICAgICAgICAgICAg ICAgaWYgKCFmcGopIHsKKyAgICAgICAgICAgICAgICAgICAgZnByZXN1bHQgPSAxLjA7CisgICAg ICAgICAgICAgICAgfSBlbHNlIGlmICgoIWZwcmVzdWx0ICYmIGZwaiA8PSAwLjApKSB7CisgICAg ICAgICAgICAgICAgICAgIHByaW50ZigiP0RpdmlkZSBieSB6ZXJvIC0gXCIlc1wiXG4iLGNtZGJ1 Zik7CisgICAgICAgICAgICAgICAgICAgIHNleHByYysrOworICAgICAgICAgICAgICAgICAgICBn b3RvIHhkb3NleHA7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmcHJlc3VsdCA8IDAuMCAm JiBtb2RmKGZwaiwmZHVtbXkpKSB7CisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiP0RvbWFp biBlcnJvciAtIFwiJXNcIlxuIixjbWRidWYpOworICAgICAgICAgICAgICAgICAgICBzZXhwcmMr KzsKKyAgICAgICAgICAgICAgICAgICAgZ290byB4ZG9zZXhwOworICAgICAgICAgICAgICAgIH0g ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGZwcmVzdWx0ID0gKENLRkxPQVQpcG93KGZwcmVz dWx0LGZwaik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorI2VuZGlmIC8qIEZO RkxPQVQgKi8KKyAgICAgICAgICAgIGlmIChqID09IDApIHsKKyAgICAgICAgICAgICAgICByZXN1 bHQgPSAxOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBDS19PRkZfVCB6 LCBzaWduID0gMDsKKyAgICAgICAgICAgICAgICBpZiAoaiA8IDApIHsKKyAgICAgICAgICAgICAg ICAgICAgaWYgKHJlc3VsdCA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYo Ij9EaXZpZGUgYnkgemVybyAtIFwiJXNcIlxuIixjbWRidWYpOworICAgICAgICAgICAgICAgICAg ICAgICAgc2V4cHJjKys7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHhkb3NleHA7Cisg ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaiA9IDAgLSBqOworICAg ICAgICAgICAgICAgICAgICBzaWduKys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg ICAgIHogPSByZXN1bHQ7CisgICAgICAgICAgICAgICAgd2hpbGUgKC0taiA+IDApCisgICAgICAg ICAgICAgICAgICByZXN1bHQgKj0gejsKKyAgICAgICAgICAgICAgICBpZiAoc2lnbikKKyAgICAg ICAgICAgICAgICAgIHJlc3VsdCA9IDEgLyByZXN1bHQ7CisgICAgICAgICAgICB9CisjaWZkZWYg Rk5GTE9BVAorICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSBmcHJlc3VsdCkKKyAgICAgICAgICAg ICAgZnBmbGFnKys7CisjZW5kaWYJLyogRk5GTE9BVCAqLworICAgICAgICAgICAgYnJlYWs7CisK KyNpZmRlZiBGTkZMT0FUCisgICAgICAgICAgY2FzZSBTWF9FWFA6ICAgICAgICAgICAgICAgICAg LyogZSB0byB0aGUgZ2l2ZW4gcG93ZXIgKi8KKyAgICAgICAgICAgIGZwcmVzdWx0ID0gKENLRkxP QVQpIGV4cChmcGopOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIFNYX0xH TjogICAgICAgICAgICAgICAgICAvKiBOYXR1cmFsIGxvZyAqLworICAgICAgICAgIGNhc2UgU1hf TEdYOiAgICAgICAgICAgICAgICAgIC8qIExvZyBiYXNlIDEwICovCisgICAgICAgICAgY2FzZSBT WF9TUVI6ICAgICAgICAgICAgICAgICAgLyogU3F1YXJlIHJvb3QgKi8KKyAgICAgICAgICAgIGlm IChmcGogPCAwLjApIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIj9Bcmd1bWVudCBvdXQgb2Yg cmFuZ2UgLSBcIiVzXCJcbiIsY21kYnVmKTsKKyAgICAgICAgICAgICAgICBzZXhwcmMrKzsKKyAg ICAgICAgICAgICAgICBnb3RvIHhkb3NleHA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp ZiAoeCA9PSBTWF9TUVIpCisgICAgICAgICAgICAgIGZwcmVzdWx0ID0gKENLRkxPQVQpIHNxcnQo ZnBqKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHggPT0gU1hfTEdOKQorICAgICAgICAgICAgICBm cHJlc3VsdCA9IChDS0ZMT0FUKSBsb2coZnBqKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg ICAgICAgZnByZXN1bHQgPSAoQ0tGTE9BVCkgbG9nMTAoZnBqKTsKKyAgICAgICAgICAgIGJyZWFr OworCisgICAgICAgICAgY2FzZSBTWF9TSU46ICAgICAgICAgICAgICAgICAgLyogc2luZSAqLwor ICAgICAgICAgICAgZnByZXN1bHQgPSAoQ0tGTE9BVCkgc2luKGZwaik7CisgICAgICAgICAgICBi cmVhazsKKworICAgICAgICAgIGNhc2UgU1hfQ09TOiAgICAgICAgICAgICAgICAgIC8qIGNvc2lu ZSAqLworICAgICAgICAgICAgZnByZXN1bHQgPSAoQ0tGTE9BVCkgY29zKGZwaik7CisgICAgICAg ICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgU1hfVEFOOiAgICAgICAgICAgICAgICAgIC8q IHRhbmdlbnQgKi8KKyAgICAgICAgICAgIGZwcmVzdWx0ID0gKENLRkxPQVQpIHRhbihmcGopOwor ICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogRk5GTE9BVCAqLworCisgICAgICAgICAgY2Fz ZSBTWF9DRUk6ICAgICAgICAgICAgICAgICAgLyogQ2VpbGluZyAqLworICAgICAgICAgICAgaWYg KGogIT0gZnBqKQorICAgICAgICAgICAgICBpZiAoZnBqID4gMC4wKQorICAgICAgICAgICAgICAg IGZwaiArPSAxLjA7CisgICAgICAgICAgICBmcHJlc3VsdCA9IGZwajsKKyAgICAgICAgICAgIGZw ZmxhZyA9IDE7CisgICAgICAgICAgICB0cnVuY2F0ZSA9IDE7CisgICAgICAgICAgICBicmVhazsK KworICAgICAgICAgIGNhc2UgU1hfRkxSOiAgICAgICAgICAgICAgICAgIC8qIEZsb29yICovCisg ICAgICAgICAgICBpZiAoaiAhPSBmcGopCisgICAgICAgICAgICAgIGlmIChmcGogPCAwLjApCisg ICAgICAgICAgICAgICAgZnBqIC09IDEuMDsKKyAgICAgICAgICAgIGZwcmVzdWx0ID0gZnBqOwor ICAgICAgICAgICAgZnBmbGFnID0gMTsKKyAgICAgICAgICAgIHRydW5jYXRlID0gMTsKKyAgICAg ICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBTWF9UUlU6ICAgICAgICAgICAgICAgICAg LyogVHJ1bmNhdGUgKi8KKyAgICAgICAgICAgIGZwcmVzdWx0ID0gZnBqOworICAgICAgICAgICAg ZnBmbGFnID0gMTsKKyAgICAgICAgICAgIHRydW5jYXRlID0gMTsKKyAgICAgICAgICAgIGJyZWFr OworCisgICAgICAgICAgY2FzZSBTWF9BQlM6ICAgICAgICAgICAgICAgICAgLyogQWJzb2x1dGUg dmFsdWUgKi8KKyAgICAgICAgICAgIHJlc3VsdCA9IChqIDwgMCkgPyAwIC0gaiA6IGo7CisjaWZk ZWYgRk5GTE9BVAorICAgICAgICAgICAgZnByZXN1bHQgPSAoZnBqIDwgMC4wKSA/IDAuMCAtIGZw aiA6IGZwajsKKyAgICAgICAgICAgIGlmIChyZXN1bHQgIT0gZnByZXN1bHQpCisgICAgICAgICAg ICAgIGZwZmxhZysrOworI2VuZGlmCS8qIEZORkxPQVQgKi8KKyAgICAgICAgICAgIGJyZWFrOwor CisgICAgICAgICAgY2FzZSBTWF9NQVg6ICAgICAgICAgICAgICAgICAgLyogTWF4ICovCisgICAg ICAgICAgICBpZiAoaiAhPSBmcGopCisgICAgICAgICAgICAgIGZwZmxhZysrOworICAgICAgICAg ICAgaWYgKGZwZmxhZykgeworICAgICAgICAgICAgICAgIGlmIChmcGogPiBmcHJlc3VsdCkKKyAg ICAgICAgICAgICAgICAgIGZwcmVzdWx0ID0gZnBqOworICAgICAgICAgICAgfSBlbHNlCisgICAg ICAgICAgICAgIGlmIChqID4gcmVzdWx0KQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IGo7Cisg ICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgU1hfTUlOOiAgICAgICAgICAgICAg ICAgIC8qIE1pbiAqLworICAgICAgICAgICAgaWYgKGogIT0gZnBqKQorICAgICAgICAgICAgICBm cGZsYWcrKzsKKyAgICAgICAgICAgIGlmIChmcGZsYWcpIHsKKyAgICAgICAgICAgICAgICBpZiAo ZnBqIDwgZnByZXN1bHQpCisgICAgICAgICAgICAgICAgICBmcHJlc3VsdCA9IGZwajsKKyAgICAg ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICBpZiAoaiA8IHJlc3VsdCkKKyAgICAgICAgICAg ICAgICByZXN1bHQgPSBqOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIFNY X0ZMTzogICAgICAgICAgICAgICAgICAvKiBGbG9hdCAqLworICAgICAgICAgICAgZnBmbGFnKys7 CisgICAgICAgICAgICBmcHJlc3VsdCA9IHJlc3VsdDsKKyAgICAgICAgICAgIGZwaiA9IGo7Cisg ICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgU1hfTk9UOiAgICAgICAgICAgICAg ICAgIC8qIE5PVCAocmV2ZXJzZSB0cnV0aCB2YWx1ZSkgKi8KKyAgICAgICAgICAgIGZwZmxhZyA9 IDA7CisgICAgICAgICAgICBub3QrKzsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAg Y2FzZSBTWF9CV0E6ICAgICAgICAgICAgICAgICAgLyogQml0d2lzZSBBTkQgKi8KKyAgICAgICAg ICAgIGZwZmxhZyA9IDA7CisgICAgICAgICAgICByZXN1bHQgJj0gajsKKyAgICAgICAgICAgIGJy ZWFrOworCisgICAgICAgICAgY2FzZSBTWF9CV086ICAgICAgICAgICAgICAgICAgLyogQml0d2lz ZSBPUiAqLworICAgICAgICAgICAgZnBmbGFnID0gMDsKKyAgICAgICAgICAgIHJlc3VsdCB8PSBq OworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIFNYX0JXWDogICAgICAgICAg ICAgICAgICAvKiBCaXR3aXNlIFhPUiAqLworICAgICAgICAgIGNhc2UgU1hfWE9SOiAgICAgICAg ICAgICAgICAgIC8qIExvZ2ljYWwgWE9SICovCisgICAgICAgICAgICBpZiAobiA+IDMpIHsKKyAg ICAgICAgICAgICAgICBwcmludGYoIj9Ub28gbWFueSBvcGVyYW5kcyAtIFwiJXNcIlxuIixzKTsK KyAgICAgICAgICAgICAgICBzZXhwcmMrKzsKKyAgICAgICAgICAgICAgICBnb3RvIHhkb3NleHA7 CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmcGZsYWcgPSAwOworICAgICAgICAgICAgaWYg KHggPT0gU1hfQldYKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0IF49IGo7CisgICAgICAgICAg ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJlc3VsdCA9IChyZXN1bHQgJiYgIWopIHx8ICgh cmVzdWx0ICYmIGopOworICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHJlc3VsdCA9IDE7Cisg ICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgU1hfQldO OiAgICAgICAgICAgICAgICAgIC8qIEJpdHdpc2UgTm90ICovCisgICAgICAgICAgICBmcGZsYWcg PSAwOworICAgICAgICAgICAgcmVzdWx0ID0gfnJlc3VsdDsKKyAgICAgICAgICAgIGJyZWFrOwor CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHByaW50ZigiQkFEIE9QIFslc11cbiIs cFsxXSk7CisgICAgICAgICAgICBzZXhwcmMrKzsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAo IXBmbGFnKSAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOb3QgYSBwcmVkaWNhdGUgKi8KKyAg ICAgIHNleHBwdiA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAvKiBTbyB1bnNldCB0aGlzICov CisKKyAgLyogZG9tYWNybzogKi8KKworICAgIGlmIChtYWNybykgeyAgICAgICAgICAgICAgICAg ICAgICAgIC8qIFVzZXItZGVmaW5lZCBtYWNybyAqLworICAgICAgICBleHRlcm4gaW50IGZzZXhw ZmxhZzsgICAgICAgICAgIC8qIChzZWUgZm5ldmFsKCk6Y2t1dXM0LmMpICovCisgICAgICAgIGlu dCBsb29rYWdhaW4gPSAwOyAgICAgICAgICAgICAgLyogTWF5YmUgdGhlIG1hY3JvIHRhYmxlIGNo YW5nZWQgKi8KKyAgICAgICAgaWYgKG1hY3RhYltteF0ua3dkKSB7ICAgICAgICAgICAvKiBDaGVj ayBhbmQgc2VlICovCisgICAgICAgICAgICBpZiAoY2tzdHJjbXAobWFjdGFiW214XS5rd2QscFsx XSwtMSwwKSkKKyAgICAgICAgICAgICAgbG9va2FnYWluKys7CisgICAgICAgIH0gZWxzZQorICAg ICAgICAgIGxvb2thZ2FpbisrOworICAgICAgICBpZiAobG9va2FnYWluKSB7ICAgICAgICAgICAg ICAgIC8qIFRoZSB0YWJsZSBjaGFuZ2VkICovCisgICAgICAgICAgICBteCA9IG14bG9vayhtYWN0 YWIscFsxXSxubWFjKTsgLyogR2V0IHRoZSBtYWNybydzIG5ldyBpbmRleCAqLworICAgICAgICAg ICAgZGVidWcoRjExMSxzZXhwZGVidWcoIm1hY3JvIG1vdmVkIikscFsxXSxteCk7CisgICAgICAg ICAgICBpZiAobXggPCAwKSB7ICAgICAgICAgICAgICAgICAgLyogWWlrZXMhICovCisgICAgICAg ICAgICAgICAgcHJpbnRmKCI/TWFjcm8gZGlzYXBwZWFyZWQhIC0gXCIlc1wiXG4iLHBbMV0pOwor ICAgICAgICAgICAgICAgIHNleHByYysrOworICAgICAgICAgICAgICAgIGdvdG8geGRvc2V4cDsK KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBkZWJ1ZyhGMTExLHNleHBkZWJ1Zygi bWFjcm8gbXgiKSxtYWN0YWJbbXhdLmt3ZCxteCk7CisgICAgICAgIGlmIChmc2V4cGZsYWcpIHsg ICAgICAgICAgICAgICAgLyogSWYgZW1iZWRkZWQgaW4gYSBmdW5jdGlvbiBjYWxsICovCisgICAg ICAgICAgICBpZiAoY21wdXNoKCkgPiAtMSkgeyAgICAgICAgLyogZ2V0IGEgbmV3IGNvcHkgb2Yg dGhlIHBhcnNpbmcgKi8KKyAgICAgICAgICAgICAgICBleHRlcm4gaW50IGlmYzsgICAgICAgICAv KiBlbnZpcm9ubWVudCwgKi8KKyAgICAgICAgICAgICAgICBpbnQgaywgaWZjc2F2ID0gaWZjOyAg ICAvKiBzYXZlIHRoZSBJRiBzdGF0ZSAqLworICAgICAgICAgICAgICAgIGRvZG8obXgsbGluZSww KTsgICAgICAgIC8qIFNldCB1cCB0aGUgbWFjcm8gKi8KKyAgICAgICAgICAgICAgICBrID0gcGFy c2VyKDEpOyAgICAgICAgICAvKiBDYWxsIHRoZSBwYXJzZXIgdG8gZXhlY3V0ZSBpdCAqLworICAg ICAgICAgICAgICAgIGNtcG9wKCk7ICAgICAgICAgICAgICAgIC8qIFBvcCBiYWNrIHRvIHByZXZp b3VzIGxldmVsICovCisgICAgICAgICAgICAgICAgaWZjID0gaWZjc2F2OyAgICAgICAgICAgLyog cmVzdG9yZSBJRiBzdGF0ZSAqLworICAgICAgICAgICAgICAgIGlmIChrID09IDApICAgICAgICAg ICAgIC8qIElmIG5vIGVycm9yICovCisgICAgICAgICAgICAgICAgICBzMiA9IG1ydmFsW21hY2x2 bCsxXTsgLyogZ2V0IHJldHVybiB2YWx1ZSwgaWYgYW55ICovCisgICAgICAgICAgICAgICAgaWYg KCFzMikgczIgPSAiIjsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLHNleHBkZWJ1ZygibWFj cm8gcmV0dXJuIiksczIsMCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg IHByaW50ZigiP1Jlc291cmNlcyBleGhhdXN0ZWQgLSBcIiVzXCJcbiIscyk7CisgICAgICAgICAg ICAgICAgc2V4cHJjKys7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7ICAgICAgICAg ICAgICAgICAgICAgICAgLyogTm90IGVtYmVkZGVkIGluIGEgZnVuY3Rpb24gY2FsbCAqLworICAg ICAgICAgICAgZG9kbyhteCxsaW5lLDApOyAgICAgICAgICAgIC8qIEFzIGFib3ZlIGJ1dCB3aXRo b3V0IGNtcHVzaC9wb3AoKSAqLworICAgICAgICAgICAgayA9IHBhcnNlcigxKTsKKyAgICAgICAg ICAgIGlmIChrID09IDApCisgICAgICAgICAgICAgIHMyID0gbXJ2YWxbbWFjbHZsKzFdOworICAg ICAgICAgICAgaWYgKCFzMikgczIgPSAiIjsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAocGZs YWcpIHsgICAgICAgICAgICAgICAgIC8qIFByZWRpY2F0ZSAqLworICAgICAgICBpZiAobm90KSBw cmVzdWx0ID0gcHJlc3VsdCA/IDAgOiAxOworICAgICAgICBzZXhwcHYgPSBwcmVzdWx0OyAgICAg ICAgICAgICAgIC8qIFNvIHNldCBwcmVkaWNhdGUgdmFsdWUgKDAgb3IgMSkgKi8KKyAgICAgICAg czIgPSBwcmVzdWx0ID8gIjEiIDogIjAiOworICAgIH0gZWxzZSBpZiAoZnBmbGFnICYmICFzZXhw dHJ1bmMpIHsJLyogUmVzdWx0IGlzIGZsb2F0aW5nLXBvaW50ICovCisgICAgICAgIGlmIChub3Qp IGZwcmVzdWx0ID0gZnByZXN1bHQgPyAwLjAgOiAxLjA7CisgICAgICAgIHMyID0gZnBmb3JtYXQo ZnByZXN1bHQsMCwwKTsKKyAgICB9IGVsc2UgaWYgKHggIT0gU1hfRVZBKSB7CisgICAgICAgIGlm IChub3QpIHJlc3VsdCA9IHJlc3VsdCA/IDAgOiAxOworICAgICAgICBzMiA9IGNrZnN0b2EocmVz dWx0KTsKKyAgICB9CisKKy8qIENvbW1vbiBleGl0IHBvaW50LiAgQWx3YXlzIGNvbWUgaGVyZSB0 byBleGl0LiAqLworCisgIHhkb3NleHA6CisKKyAgICBpZiAoIXMyKSBzMiA9ICIiOworICAgIGlm ICghc2V4cHJjICYmIHMyKSB7ICAgICAgICAgICAgICAgIC8qIEhhdmUgYSByZXN1bHQgKi8KKyAg ICAgICAgY2hhciAqIHN4OworICAgICAgICBjaGFyICogcTIgPSBzMjsgaW50IHh4ID0gMDsKKyAg ICAgICAgaWYgKCpzMikgeworICAgICAgICAgICAgd2hpbGUgKCpxMisrKSB4eCsrOyAgICAgICAg IC8qIEdldCBsZW5ndGggKi8KKyAgICAgICAgICAgIGlmICh4eCA+IHNleHBybWF4KSAgICAgICAg ICAvKiAoc3RhdHMpICovCisgICAgICAgICAgICAgIHNleHBybWF4ID0geHg7CisgICAgICAgIH0g ZWxzZQorICAgICAgICAgIHh4ID0gMDsKKyAgICAgICAgaWYgKHh4ID4gc3hybGVuW3NleHBkZXBd IHx8ICFzeHJlc3VsdFtzZXhwZGVwXSkgeworICAgICAgICAgICAgaW50IGs7CisgICAgICAgICAg ICBrID0geHggKyB4eCAvIDQ7CisgICAgICAgICAgICBpZiAoayA8IDMyKSBrID0gMzI7CisgICAg ICAgICAgICBpZiAoc3hyZXN1bHRbc2V4cGRlcF0pCisgICAgICAgICAgICAgIGZyZWUoc3hyZXN1 bHRbc2V4cGRlcF0pOworICAgICAgICAgICAgaWYgKChzeHJlc3VsdFtzZXhwZGVwXSA9IChjaGFy ICopbWFsbG9jKGspKSkgeworICAgICAgICAgICAgICAgIHN4cmxlbltzZXhwZGVwXSA9IGs7Cisg ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHByaW50ZigiP01lbW9yeSBhbGxv Y2F0aW9uIGZhaWx1cmUgLSBcIiVzXCJcbiIsczIpOworICAgICAgICAgICAgICAgIHNleHByYysr OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHN4ID0gc3hyZXN1bHRbc2V4cGRl cF07ICAgICAgICAgLyogUG9pbnQgdG8gcmVzdWx0IGJ1ZmZlciAqLworICAgICAgICB3aGlsZSAo KCpzeCsrID0gKnMyKyspKSA7ICAgICAgIC8qIGNvcHkgcmVzdWx0LiAqLworICAgICAgICBpZiAo ZnBmbGFnICYmIHRydW5jYXRlKSB7ICAgICAgIC8qIEZsb2F0aW5nIHBvaW50ICsgdHJ1bmNhdGUg Ki8KKyAgICAgICAgICAgIHN4ID0gc3hyZXN1bHRbc2V4cGRlcF07ICAgICAvKiBhdCBkZWNpbWFs IHBvaW50ICovCisgICAgICAgICAgICBmb3IgKGkgPSB4eCAtIDE7IGkgPj0gMDsgaS0tKSB7Cisg ICAgICAgICAgICAgICAgaWYgKHN4W2ldID09ICcuJykgeworICAgICAgICAgICAgICAgICAgICBz eFtpXSA9IE5VTDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT0gMCkgeyAgICAgICAvKiBJ ZiBub3RoaW5nIGxlZnQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIHN4WzBdID0gJzAnOyAg ICAvKiBwdXQgYSB6ZXJvLiAqLworICAgICAgICAgICAgICAgICAgICAgICAgc3hbMV0gPSBOVUw7 CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9 CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGxpbmUpICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogSWYgbWFjcm8gYXJnIGJ1ZmZlciBhbGxvY2F0ZWQgKi8KKyAgICAgIGZyZWUobGluZSk7 ICAgICAgICAgICAgICAgICAgICAgICAvKiBmcmVlIGl0LiAqLworICAgIGlmIChtdXN0ZnJlZSkg eyAgICAgICAgICAgICAgICAgICAgIC8qIEFuZCBmcmVlIGxvY2FsIGNvcHkgb2Ygc3BsaXQgbGlz dCAqLworICAgICAgICBmb3IgKGkgPSAxOyBpIDw9IG47IGkrKykgeworICAgICAgICAgICAgaWYg KHBbaV0pIGZyZWUocFtpXSk7CisgICAgICAgIH0KKyAgICB9CisgICAgZGVidWcoRjExMSxzZXhw ZGVidWcoImV4aXQiKSxzeHJlc3VsdFtzZXhwZGVwXSxzZXhwcmMpOworICAgIHJldHVybihzeHJl c3VsdFtzZXhwZGVwLS1dKTsKK30KKyNlbmRpZiAvKiBOT1NFWFAgKi8KKyNlbmRpZiAvKiBOT1NQ TCAqLworCitpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ0hFQ0sg Y29tbWFuZCAqLworZG9jaGsoKSB7CisgICAgaW50IHgsIHk7CisgICAgaWYgKCh5ID0gY21rZXko ZnRydGFiLG5mdHIsIiIsIiIseHhzdHJpbmcpKSA8IDApCisgICAgICByZXR1cm4oeSk7CisgICAg Y2tzdHJuY3B5KGxpbmUsYXRtYnVmLExJTkJVRlNJWik7CisgICAgaWYgKCh5ID0gY21jZm0oKSkg PCAwKQorICAgICAgcmV0dXJuKHkpOworI2lmbmRlZiBOT1BVU0gKKyAgICBpZiAoIWNrc3RyY21w KGxpbmUsInB1c2giLChpbnQpc3RybGVuKGxpbmUpLDApKSB7CisgICAgICAgIGlmIChtc2dmbGcp ICAgICAgICAgICAgICAgICAgICAgLyogSWYgYXQgdG9wIGxldmVsLi4uICovCisgICAgICAgICAg cHJpbnRmKCIgcHVzaCVzIGF2YWlsYWJsZVxuIiwgbm9wdXNoID8gIiBub3QiIDogIiIpOworICAg ICAgICBlbHNlIGlmIChub3B1c2ggJiYgIWJhY2tncmQpCisgICAgICAgICAgcHJpbnRmKCIgQ0hF Q0s6IHB1c2ggbm90IGF2YWlsYWJsZVxuIik7CisgICAgICAgIHJldHVybihzdWNjZXNzID0gMSAt IG5vcHVzaCk7CisgICAgfQorI2VuZGlmIC8qIE5PUFVTSCAqLworI2lmZGVmIFBJUEVTRU5ECisg ICAgaWYgKCFja3N0cmNtcChsaW5lLCJwaXBlcyIsKGludClzdHJsZW4obGluZSksMCkpIHsKKyAg ICAgICAgaWYgKG1zZ2ZsZykgICAgICAgICAgICAgICAgICAgICAvKiBJZiBhdCB0b3AgbGV2ZWwu Li4gKi8KKyAgICAgICAgICBwcmludGYoIiBwaXBlcyVzIGF2YWlsYWJsZVxuIiwKKyAgICAgICAg ICAgICAgICAgKG5vcHVzaCB8fCBwcm90b2NvbCAhPSBQUk9UT19LKSA/ICIgbm90IiA6ICIiKTsK KyAgICAgICAgZWxzZSBpZiAoKG5vcHVzaCB8fCBwcm90b2NvbCAhPSBQUk9UT19LKSAmJiAhYmFj a2dyZCkKKyAgICAgICAgICBwcmludGYoIiBDSEVDSzogcGlwZXMgbm90IGF2YWlsYWJsZVxuIik7 CisgICAgICAgIHJldHVybihzdWNjZXNzID0gMSAtIG5vcHVzaCk7CisgICAgfQorI2VuZGlmIC8q IFBJUEVTRU5EICovCisgICAgeSA9IGxvb2t1cChmdHJ0YWIsbGluZSxuZnRyLCZ4KTsgICAgLyog TG9vayBpdCB1cCAqLworICAgIGRlYnVnKEYxMTEsImRvY2hrIixmdHJ0YWJbeF0ua3dkLHkpOwor ICAgIGlmIChtc2dmbGcpICAgICAgICAgICAgICAgICAgICAgICAgIC8qIElmIGF0IHRvcCBsZXZl bC4uLiAqLworICAgICAgcHJpbnRmKCIgJXMlcyBhdmFpbGFibGVcbiIsIGZ0cnRhYlt4XS5rd2Qs IHkgPyAiIG5vdCIgOiAiIik7CisgICAgZWxzZSBpZiAoeSAmJiAhYmFja2dyZCkKKyAgICAgIHBy aW50ZigiIENIRUNLOiAlcyBub3QgYXZhaWxhYmxlXG4iLCBmdHJ0YWJbeF0ua3dkKTsKKyAgICBy ZXR1cm4oc3VjY2VzcyA9IDEgLSB5KTsKK30KKworI2lmbmRlZiBOT0xPQ0FMCisjaWZkZWYgQ0tM T0dESUFMCisKKy8qIENvbm5lY3Rpb24gbG9nIGFuZCBlbGFwc2VkLXRpbWUgcmVwb3J0aW5nICov CisKK2V4dGVybiBjaGFyIGN4bG9nYnVmW107ICAgICAgICAgICAgICAgICAvKiBMb2cgcmVjb3Jk IGJ1ZmZlciAqLworZXh0ZXJuIGNoYXIgZGlhZmlsW107ICAgICAgICAgICAgICAgICAgIC8qIExv ZyBmaWxlIG5hbWUgKi8KK2V4dGVybiBpbnQgZGlhbG9nLCBjeF9hY3RpdmU7ICAgICAgICAgICAv KiBGbGFncyAqLworc3RhdGljIGxvbmcgY3hfcHJldiA9IDBMOyAgICAgICAgICAgICAgIC8qIEVs YXBzZWQgdGltZSBvZiBwcmV2aW91cyBzZXNzaW9uICovCisKKyNlbmRpZiAvKiBDS0xPR0RJQUwg Ki8KKyNlbmRpZiAvKiBOT0xPQ0FMICovCisKK1ZPSUQKK2RvbG9nZW5kKCkgeyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBXcml0ZSByZWNvcmQgdG8gY29ubmVjdGlvbiBsb2cgKi8KKyNp ZmRlZiBMT0NVUworICAgIGV4dGVybiBpbnQgbG9jdXMsIGF1dG9sb2N1czsKKyNlbmRpZiAvKiBM T0NVUyAqLworCisjaWZuZGVmIE5PTE9DQUwKKyNpZmRlZiBDS0xPR0RJQUwKKyAgICBsb25nIGQx LCBkMiwgdDEsIHQyOworICAgIGNoYXIgYnVmWzMyXSwgKiBwOworI2VuZGlmIC8qIENLTE9HRElB TCAqLworI2VuZGlmIC8qIE5PTE9DQUwgKi8KKworI2lmZGVmIExPQ1VTCisgICAgaWYgKGF1dG9s b2N1cykgeworICAgICAgICBpbnQgeCA9IGxvY3VzOworI2lmZGVmIE5FV0ZUUAorCWRlYnVnKEYx MDEsImRvbG9nZW5kIGZ0cGlzY29ubmVjdGVkIiwiIixmdHBpc2Nvbm5lY3RlZCgpKTsKKyAgICAg ICAgc2V0bG9jdXMoZnRwaXNjb25uZWN0ZWQoKSA/IDAgOiAxLCAxKTsKKyNlbHNlCisgICAgICAg IHNldGxvY3VzKDEsMSk7CisjZW5kaWYgLyogTkVXRlRQICovCisgICAgfQorI2VuZGlmIC8qIExP Q1VTICovCisKKyNpZm5kZWYgTk9MT0NBTAorI2lmZGVmIENLTE9HRElBTAorICAgIGRlYnVnKEYx MDEsImRvbG9nZW5kIGRpYWxvZyIsIiIsZGlhbG9nKTsKKyAgICBkZWJ1ZyhGMTAxLCJkb2xvZ2Vu ZCBjeGxvZ2J1ZlswXSIsIiIsY3hsb2didWZbMF0pOworI2lmZGVmIENLU1lTTE9HCisgICAgZGVi dWcoRjEwMSwiZG9sb2dlbmQgY2t4bG9nZ2luZyIsIiIsY2t4bG9nZ2luZyk7CisjZW5kaWYgLyog Q0tTWVNMT0cgKi8KKworICAgIGlmICghY3hfYWN0aXZlIHx8ICFjeGxvZ2J1ZlswXSkgICAgIC8q IE5vIGFjdGl2ZSByZWNvcmQgKi8KKyAgICAgIHJldHVybjsKKworICAgIGN4X2FjdGl2ZSA9IDA7 ICAgICAgICAgICAgICAgICAgICAgIC8qIFJlY29yZCBpcyBub3QgYWN0aXZlICovCisgICAgZGVi dWcoRjExMSwiZG9sb2dlbmQgY3hsb2didWYgMSIsY3hsb2didWYsY3hfYWN0aXZlKTsKKworICAg IGQxID0gbWpkKChjaGFyICopY3hsb2didWYpOyAgICAgICAgIC8qIEdldCBzdGFydCBkYXRlIG9m IHRoaXMgc2Vzc2lvbiAqLworICAgIGNrc3RybmNweShidWYsY2tkYXRlKCksMzEpOyAgICAgICAg IC8qIEdldCBjdXJyZW50IGRhdGUgKi8KKyAgICBkMiA9IG1qZChidWYpOyAgICAgICAgICAgICAg ICAgICAgICAvKiBDb252ZXJ0IHRoZW0gdG8gbWpkcyAqLworICAgIHAgPSBjeGxvZ2J1ZjsgICAg ICAgICAgICAgICAgICAgICAgIC8qIEdldCBzdGFydCB0aW1lICovCisgICAgcFsxMV0gPSBOVUw7 CisgICAgcFsxNF0gPSBOVUw7ICAgICAgICAgICAgICAgICAgICAgICAgLyogQ29udmVydCB0byBz ZWNvbmRzICovCisgICAgdDEgPSBhdG9sKHArOSkgKiAzNjAwTCArIGF0b2wocCsxMikgKiA2MEwg KyBhdG9sKHArMTUpOworICAgIHBbMTFdID0gJzonOworICAgIHBbMTRdID0gJzonOworICAgIHAg PSBidWY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEdldCBlbmQgdGltZSAqLworICAg IHBbMTFdID0gTlVMOworICAgIHBbMTRdID0gTlVMOworICAgIHQyID0gYXRvbChwKzkpICogMzYw MEwgKyBhdG9sKHArMTIpICogNjBMICsgYXRvbChwKzE1KTsKKyAgICB0MiA9ICgoZDIgLSBkMSkg KiA4NjQwMEwpICsgKHQyIC0gdDEpOyAvKiBDb21wdXRlIGVsYXBzZWQgdGltZSAqLworICAgIGRl YnVnKEYxMDEsImRvbG9nZW5kIHQyIiwiIix0Mik7CisgICAgaWYgKHQyID4gLTFMKSB7CisgICAg ICAgIGN4X3ByZXYgPSB0MjsKKyAgICAgICAgcCA9IGhobW1zcyh0Mik7CisgICAgICAgIGRlYnVn KEYxMTAsImRvbG9nZW5kIGhobW1zcyIscCwwKTsKKyAgICAgICAgY2tzdHJuY2F0KGN4bG9nYnVm LCJFPSIsQ1hMT0dCVUZMKTsgLyogQXBwZW5kIHRvIGxvZyByZWNvcmQgKi8KKyAgICAgICAgY2tz dHJuY2F0KGN4bG9nYnVmLHAsQ1hMT0dCVUZMKTsKKyAgICAgICAgZGVidWcoRjExMCwiZG9sb2dl bmQgY3hsb2didWYgMiIsY3hsb2didWYsMCk7CisgICAgfSBlbHNlCisgICAgICBjeF9wcmV2ID0g MEw7CisgICAgZGVidWcoRjEwMSwiZG9sb2dlbmQgY3hfcHJldiIsIiIsY3hfcHJldik7CisgICAg aWYgKGRpYWxvZykgeyAgICAgICAgICAgICAgICAgICAgICAgLyogSWYgbG9nZ2luZyAqLworICAg ICAgICBpbnQgeDsKKyAgICAgICAgeCA9IGRpYW9wbihkaWFmaWwsMSwxKTsgICAgICAgICAvKiBP cGVuIGxvZyBpbiBhcHBlbmQgbW9kZSAqLworICAgICAgICBkZWJ1ZyhGMTAxLCJkb2xvZ2VuZCBk aWFvcG4iLCIiLHgpOworICAgICAgICB4ID0genNvdXRsKFpESUZJTCxjeGxvZ2J1Zik7ICAgIC8q IFdyaXRlIHRoZSByZWNvcmQgKi8KKyAgICAgICAgZGVidWcoRjEwMSwiZG9sb2dlbmQgenNvdXRs IiwiIix4KTsKKyAgICAgICAgeCA9IHpjbG9zZShaRElGSUwpOyAgICAgICAgICAgICAvKiBDbG9z ZSB0aGUgbG9nICovCisgICAgICAgIGRlYnVnKEYxMDEsImRvbG9nZW5kIHpjbG9zZSIsIiIseCk7 CisgICAgfQorI2lmZGVmIENLU1lTTE9HCisgICAgZGVidWcoRjEwMSwiZG9sb2dlbmQgY2t4bG9n Z2luZyIsIiIsY2t4bG9nZ2luZyk7CisgICAgaWYgKGNreGxvZ2dpbmcpIHsKKyAgICAgICAgaW50 IHg7CisgICAgICAgIHggPSBja2luZGV4KCJUPURJQUwiLGN4bG9nYnVmLDAsMCwxKTsKKyAgICAg ICAgZGVidWcoRjExMSwiZG9sb2dlbmQgY2t4c3lzbG9nIixjeGxvZ2J1Zixja3hzeXNsb2cpOwor ICAgICAgICBkZWJ1ZyhGMTExLCJkb2xvZ2VuZCBja2luZGV4IiwiVD1ESUFMIix4KTsKKyAgICAg ICAgaWYgKHggPiAwKSB7CisgICAgICAgICAgICBpZiAoY2t4c3lzbG9nID49IFNZU0xHX0RJKSB7 CisgICAgICAgICAgICAgICAgZGVidWcoRjExMCwiZG9sb2dlbmQgc3lzbG9nIixjeGxvZ2J1Zisx OCwwKTsKKyAgICAgICAgICAgICAgICBja3N5c2xvZyhTWVNMR19ESSwxLCJDT05ORUNUSU9OIiwo Y2hhciAqKShjeGxvZ2J1ZisxOCksIiIpOworICAgICAgICAgICAgfSBlbHNlIGlmIChja3hzeXNs b2cgPj0gU1lTTEdfQUMpIHsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJkb2xvZ2VuZCBz eXNsb2ciLGN4bG9nYnVmKzE4LDApOworICAgICAgICAgICAgICAgIGNrc3lzbG9nKFNZU0xHX0FD LDEsIkNPTk5FQ1RJT04iLChjaGFyICopKGN4bG9nYnVmKzE4KSwiIik7CisgICAgICAgICAgICB9 CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgLyogQ0tTWVNMT0cgKi8KKyNlbmRpZiAvKiBDS0xP R0RJQUwgKi8KKyNlbmRpZiAvKiBOT0xPQ0FMICovCit9CisKKyNpZm5kZWYgTk9MT0NBTAorI2lm ZGVmIENLTE9HRElBTAorCisvKiAgRCBPIEwgTyBHIFMgSCBPIFcgIC0tICBTaG93IHNlc3Npb24v Y29ubmVjdGlvbiBpbmZvICAqLworCisvKiBDYWxsIHdpdGggZmMgPT0gMSB0byBzaG93LCBmYyA9 PSAwIHRvIG9ubHkgY2FsY3VsYXRlLiAqLworLyogUmV0dXJucyBzZXNzaW9uIGVsYXBzZWQgdGlt ZSBpbiBzZWNvbmRzLiAqLworLyogSWYgbm8gc2Vzc2lvbiBhY3RpdmUsIHJldHVybnMgZWxhcHNl ZCB0aW1lIG9mIHByZXZpb3VzIHNlc3Npb24sIGlmIGFueSwgKi8KKy8qIG90aGVyd2lzZSAwICov CisKK2xvbmcKK2RvbG9nc2hvdyhmYykgaW50IGZjOyB7ICAgICAgICAgICAgICAgICAvKiBTSE9X IChjdXJyZW50KSBDT05ORUNUSU9OICovCisgICAgbG9uZyBkMSwgZDIsIHQxLCB0MiA9IDAsIHBy ZXY7CisgICAgY2hhciBjLCBidWYxWzMyXSwgYnVmMlszMl0sICogaW5mb1szMl0sICogcCwgKiBz OworICAgIGNoYXIgKiB4bG9nYnVmLCB4YnVmW0NYTE9HQlVGTCsxXTsKKyAgICBpbnQgaSwgeCA9 IDAsIHosIGZ0cCA9IDAsIGFjdGl2ZSA9IDA7CisKKyNpZmRlZiBORVdGVFAKKyAgICBleHRlcm4g Y2hhciBmdHBsb2didWZbXTsKKyAgICBleHRlcm4gbG9uZyBmdHBsb2dwcmV2OworICAgIGV4dGVy biBpbnQgZnRwbG9nYWN0aXZlOworICAgIGlmIChmYyAmIFdfRlRQKSB7CisgICAgICAgIGZjICY9 IDYzOworICAgICAgICBmdHAgPSAxOworICAgICAgICB4bG9nYnVmID0gZnRwbG9nYnVmOworICAg ICAgICBwcmV2ID0gZnRwbG9ncHJldjsKKyAgICAgICAgYWN0aXZlID0gZnRwbG9nYWN0aXZlOwor ICAgIH0gZWxzZSB7CisjZW5kaWYgLyogTkVXRlRQICovCisgICAgICAgIGZ0cCA9IDA7CisgICAg ICAgIHhsb2didWYgPSBjeGxvZ2J1ZjsKKyAgICAgICAgcHJldiA9IGN4X3ByZXY7CisgICAgICAg IGFjdGl2ZSA9IGN4X2FjdGl2ZTsKKyNpZmRlZiBORVdGVFAKKyAgICB9CisjZW5kaWYgLyogTkVX RlRQICovCisKKyAgICBkZWJ1ZyhGMTAxLCJkb2xvZ3Nob3cgbG9jYWwiLCIiLGxvY2FsKTsKKyAg ICBkZWJ1ZyhGMTAxLCJkb2xvZ3Nob3cgZnRwIiwiIixmdHApOworICAgIGRlYnVnKEYxMTEsImRv bG9nc2hvdyBhY3RpdmUiLHhsb2didWYsYWN0aXZlKTsKKworICAgIGlmICgheGxvZ2J1ZlswXSkg eworICAgICAgICBpZiAoZmMpIHsKKyAgICAgICAgICAgIGlmIChkaWRzZXRsaW4gfHwgZnRwKQor ICAgICAgICAgICAgICBwcmludGYoIiAlczogTm8gcmVjb3JkLlxuIiwgZnRwID8gIkZUUCIgOiAi S2VybWl0Iik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIHByaW50ZigiICVzOiBO byBjb25uZWN0aW9uLlxuIiwgZnRwID8gIkZUUCIgOiAiS2VybWl0Iik7CisgICAgICAgIH0KKyAg ICAgICAgcmV0dXJuKHByZXYpOworICAgIH0KKworI2lmZGVmIE5FV0ZUUAorICAgIGlmIChmdHAp IHsKKyAgICAgICAgeiA9IGZ0cGlzY29ubmVjdGVkKCkgPyAxIDogLTE7CisgICAgfSBlbHNlIHsK KyNlbmRpZiAvKiBORVdGVFAgKi8KKyAgICAgICAgaWYgKGxvY2FsKSB7ICAgICAgICAgICAgICAg ICAgICAvKiBTZWUgaWYgd2UgaGF2ZSBhbiBvcGVuIGNvbm5lY3Rpb24gKi8KKyAgICAgICAgICAg IHogPSB0dGNoaygpOworICAgICAgICAgICAgZGVidWcoRjEwMSwiZG9sb2dzaG93IHR0Y2hrIiwi Iix6KTsKKyAgICAgICAgICAgIHogPSAoeiA+IC0xKSA/IDEgOiAtMjsKKyAgICAgICAgfSBlbHNl IHsKKyAgICAgICAgICAgIHogPSBhY3RpdmUgPyAxIDogLTI7CisgICAgICAgIH0KKyNpZmRlZiBO RVdGVFAKKyAgICB9CisjZW5kaWYgLyogTkVXRlRQICovCisgICAgaWYgKHogPCAwTCkgeworICAg ICAgICBpZiAoIWZjKQorICAgICAgICAgIHJldHVybihwcmV2KTsKKyAgICAgICAgZWxzZQorICAg ICAgICAgIHQyID0gcHJldjsKKyAgICB9CisgICAgLyogTm90ZTogTk9UIGNrc3RybmNweSEgKi8K KyAgICBzdHJuY3B5KGJ1ZjEseGxvZ2J1ZiwxNyk7ICAgICAgICAgICAvKiBDb3B5IG9mIGp1c3Qg dGhlIHRpbWVzdGFtcCAqLworICAgIGJ1ZjFbMTddID0gTlVMOyAgICAgICAgICAgICAgICAgICAg IC8qIFRlcm1pbmF0ZSBpdCAqLworICAgIGNrc3RybmNweSh4YnVmLHhsb2didWYrMTgsQ1hMT0dC VUZMKTsgLyogQ29weSB0aGF0IGNhbiBiZSBwb2tlZCAqLworICAgIGRlYnVnKEYxMTEsImRvbG9n c2hvdyBwcmV2Iix4YnVmLHByZXYpOworCisgICAgeHdvcmRzKHhidWYsMzEsaW5mbywxKTsgICAg ICAgICAgICAgLyogQnJlYWsgdXAgaW50byBmaWVsZHMgKi8KKyAgICBkMSA9IG1qZChidWYxKTsg ICAgICAgICAgICAgICAgICAgICAvKiBDb252ZXJ0IHN0YXJ0IHRpbWUgdG8gTUpEICovCisgICAg Y2tzdHJuY3B5KGJ1ZjIsY2tkYXRlKCksMzEpOyAgICAgICAgLyogQ3VycmVudCBkYXRlICovCisg ICAgZDIgPSBtamQoYnVmMik7ICAgICAgICAgICAgICAgICAgICAgLyogQ29udmVydCB0byBNSkQg Ki8KKyAgICBwID0gYnVmMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQb2ludCB0byBz dGFydCB0aW1lICovCisgICAgcFsxMV0gPSBOVUw7CisgICAgcFsxNF0gPSBOVUw7ICAgICAgICAg ICAgICAgICAgICAgICAgLyogQ29udmVydCB0byBzZWNvbmRzICovCisgICAgdDEgPSBhdG9sKHAr OSkgKiAzNjAwTCArIGF0b2wocCsxMikgKiA2MEwgKyBhdG9sKHArMTUpOworICAgIHBbMTFdID0g JzonOworICAgIHBbMTRdID0gJzonOworICAgIHAgPSBidWYyOyAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIERpdHRvIGZvciBjdXJyZW50IHRpbWUgKi8KKyAgICBwWzExXSA9IE5VTDsKKyAg ICBwWzE0XSA9IE5VTDsKKyAgICBpZiAoeiA+IC0xTCkgeworICAgICAgICB0MiA9IGF0b2wocCs5 KSAqIDM2MDBMICsgYXRvbChwKzEyKSAqIDYwTCArIGF0b2wocCsxNSk7CisgICAgICAgIHQyID0g KChkMiAtIGQxKSAqIDg2NDAwTCkgKyAodDIgLSB0MSk7IC8qIEVsYXBzZWQgdGltZSBzbyBmYXIg Ki8KKyAgICB9CisgICAgaWYgKGZjKSB7CisgICAgICAgIHAgPSBOVUxMOworICAgICAgICBpZiAo dDIgPiAtMUwpICAgICAgICAgICAgICAgICAgIC8qIENvbnZlcnQgc2Vjb25kcyB0byBoaDptbTpz cyAqLworICAgICAgICAgIHAgPSBoaG1tc3ModDIpOworICAgICAgICBpZiAoeiA+IC0xKQorICAg ICAgICAgIHMgPSAiQWN0aXZlIjsKKyAgICAgICAgZWxzZSBpZiAoeiA9PSAtMikKKyAgICAgICAg ICBzID0gIkNsb3NlZCI7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBzID0gIlVua25vd24iOwor ICAgICAgICBwcmludGYoIlxuIik7ICAgICAgICAgICAgICAgICAgIC8qIFNob3cgcmVzdWx0cyAq LworICAgICAgICBwcmludGYoIiBTdGF0dXM6ICAgICAgICVzXG4iLHMpOworICAgICAgICBwcmlu dGYoIiBPcGVuZWQ6ICAgICAgICVzXG4iLGJ1ZjEpOworICAgICAgICBwcmludGYoIiBVc2VyOiAg ICAgICAgICVzXG4iLGluZm9bMV0gPyBpbmZvWzFdIDogIiIpOworICAgICAgICBwcmludGYoIiBQ SUQ6ICAgICAgICAgICVzXG4iLGluZm9bMl0gPyBpbmZvWzJdIDogIiIpOworICAgICAgICBmb3Ig KGkgPSAzOyBpbmZvW2ldOyBpKyspIHsKKyAgICAgICAgICAgIGMgPSBpbmZvW2ldWzBdOworICAg ICAgICAgICAgcyA9IChpbmZvW2ldKSA/IGluZm9baV0rMiA6ICIiOworICAgICAgICAgICAgc3dp dGNoIChjKSB7CisgICAgICAgICAgICAgIGNhc2UgJ1QnOiBwcmludGYoIiBUeXBlOiAgICAgICAg ICVzXG4iLCBzKTsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgJ04nOiBwcmludGYoIiBUbzog ICAgICAgICAgICVzXG4iLCBzKTsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgJ1AnOiBwcmlu dGYoIiBQb3J0OiAgICAgICAgICVzXG4iLCBzKTsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2Ug J0gnOiBwcmludGYoIiBGcm9tOiAgICAgICAgICVzXG4iLCBzKTsgYnJlYWs7CisgICAgICAgICAg ICAgIGNhc2UgJ0QnOiBwcmludGYoIiBEZXZpY2U6ICAgICAgICVzXG4iLCBzKTsgYnJlYWs7Cisg ICAgICAgICAgICAgIGNhc2UgJ08nOiBwcmludGYoIiBPcmlnaW46ICAgICAgICVzXG4iLCBzKTsg YnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgJ0UnOiBicmVhazsKKyAgICAgICAgICAgICAgZGVm YXVsdDogIHByaW50ZigiICVzXG4iLGluZm9baV0gPyBpbmZvW2ldIDogIiIpOworICAgICAgICAg ICAgfQorICAgICAgICB9CisgICAgICAgIGlmICh6IDwgMEwpCisgICAgICAgICAgcHJpbnRmKCIg RWxhcHNlZCB0aW1lOiAlc1xuIiwgaGhtbXNzKHQyKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAg ICBwcmludGYoIiBFbGFwc2VkIHRpbWU6ICVzXG4iLCBwID8gcCA6ICIodW5rbm93bikiKTsKKyAg ICAgICAgeCA9IDA7CisjaWZkZWYgTkVUQ09OTgorI2lmZGVmIFNTSEJVSUxUSU4KKyAgICAgICAg aWYgKCBJU19TU0goKSApIHgrKzsKKyNlbmRpZiAvKiBTU0hCVUlMVElOICovCisjaWZkZWYgQ0tf RU5DUllQVElPTgorICAgICAgICBpZiAoY2tfdG5fZW5jcnlwdGluZygpICYmIGNrX3RuX2RlY3J5 cHRpbmcoKSkgeCsrOworI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KKyNpZmRlZiBDS19TU0wK KyAgICAgICAgaWYgKHRsc19hY3RpdmVfZmxhZyB8fCBzc2xfYWN0aXZlX2ZsYWcpIHgrKzsKKyNl bmRpZiAvKiBDS19TU0wgKi8KKyNpZmRlZiBSTE9HQ09ERQorI2lmZGVmIENLX0tFUkJFUk9TCisj aWZkZWYgQ0tfRU5DUllQVElPTgorICAgICAgICBpZiAodHRucHJvdG8gPT0gTlBfRUs0TE9HSU4g fHwgdHRucHJvdG8gPT0gTlBfRUs1TE9HSU4pIHgrKzsKKyNlbmRpZiAvKiBDS19FTkNSWVBUSU9O ICovCisjZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KKyNlbmRpZiAvKiBSTE9HQ09ERSAqLworI2Vu ZGlmIC8qIE5FVENPTk4gKi8KKyAgICAgICAgaWYgKHogPiAwKQorICAgICAgICAgIHByaW50Zigi IEVuY3J5cHRlZDogICAgJXNcbiIsIHggPyAiWWVzIiA6ICJObyIpOworICAgICAgICBwcmludGYo IiBMb2c6ICAgICAgICAgICVzXG4iLCBkaWFsb2cgPyBkaWFmaWwgOiAiKG5vbmUpIik7CisgICAg ICAgIHByaW50ZigiXG4iKTsKKyAgICB9CisgICAgcmV0dXJuKHQyID4gLTFMID8gdDIgOiAwTCk7 Cit9CisKK1ZPSUQKK2RvbG9nbGluZSgpIHsKKyAgICBjaGFyICogcDsKKyAgICBpbnQgbiwgbSA9 IDA7CisKKyAgICBkb2xvZ2VuZCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQcmV2aW91 cyBzZXNzaW9uIG5vdCBjbG9zZWQgb3V0PyAqLworICAgIGN4X2FjdGl2ZSA9IDE7ICAgICAgICAg ICAgICAgICAgICAgIC8qIFJlY29yZCBpcyBhY3RpdmUgKi8KKyAgICBjeF9wcmV2ID0gMEw7Cisg ICAgcCA9IGNrZGF0ZSgpOyAgICAgICAgICAgICAgICAgICAgICAgLyogR2V0IHRpbWVzdGFtcCAq LworICAgIG4gPSBja3N0cm5jcHkoY3hsb2didWYscCxDWExPR0JVRkwtMSk7IC8qIFN0YXJ0IHJl Y29yZCBvZmYgd2l0aCBpdCAqLworICAgIGlmICghdWlkYnVmWzBdKSB7CisgICAgICAgIGRlYnVn KEYxMDAsImRvbG9nbGluZSB1aWRidWYgZW1wdHkiLCIiLDApOworI2lmZGVmIFVOSVggICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIFdobyBoYXMgd2hvYW1pKCkuLi4gKi8KKyAgICAgICAg Y2tzdHJuY3B5KHVpZGJ1ZiwoY2hhciAqKXdob2FtaSgpLFVJREJVRkxFTik7CisjZWxzZQorI2lm ZGVmIFNUUkFUVVMKKyAgICAgICAgY2tzdHJuY3B5KHVpZGJ1ZiwoY2hhciAqKXdob2FtaSgpLFVJ REJVRkxFTik7CisjZWxzZQorICAgICAgICBja3N0cm5jcHkodWlkYnVmLCJVTktOT1dOIixVSURC VUZMRU4pOworI2VuZGlmIC8qIFNUUkFUVVMgKi8KKyNlbmRpZiAvKiBVTklYICovCisgICAgfQor ICAgIG0gPSBzdHJsZW4odWlkYnVmKSArIHN0cmxlbihteWhvc3QpICsgc3RybGVuKHR0bmFtZSkg KyAzMjsKKyAgICBpZiAobittIDwgQ1hMT0dCVUZMLTEpIHsgICAgICAgICAgICAvKiBBZGQgc2Vy aWFsIGRldmljZSBpbmZvICovCisgICAgICAgIHAgPSBjeGxvZ2J1ZituOworICAgICAgICBzcHJp bnRmKHAsIiAlcyAlcyBUPVNFUklBTCBIPSVzIEQ9JXMgIiwgLyogU0FGRSAqLworICAgICAgICAg ICAgICAgIHVpZGJ1ZiwKKyAgICAgICAgICAgICAgICBja2dldHBpZCgpLAorICAgICAgICAgICAg ICAgIG15aG9zdCwKKyAgICAgICAgICAgICAgICB0dG5hbWUKKyAgICAgICAgICAgICAgICApOwor ICAgIH0gZWxzZQorICAgICAgY2tzdHJuY3B5KGN4bG9nYnVmLCJMT0dMSU5FIEJVRkZFUiBPVkVS RkxPVyIsQ1hMT0dCVUZMKTsKKyAgICBkZWJ1ZyhGMTEwLCJkb2xvZ2xpbmUiLGN4bG9nYnVmLDAp OworfQorCisjaWZkZWYgTkVUQ09OTgorVk9JRAorZG9sb2duZXQoKSB7CisgICAgY2hhciAqIHAs ICogcyA9ICJORVQiLCAqIHV1ID0gdWlkYnVmOworICAgIGNoYXIgKiBwb3J0ID0gIiI7CisgICAg aW50IG4sIG0sIHRjcCA9IDA7CisgICAgY2hhciAqIGggPSBOVUxMOworCisgICAgZG9sb2dlbmQo KTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogUHJldmlvdXMgc2Vzc2lvbiBub3QgY2xvc2Vk IG91dD8gKi8KKyAgICBjeF9wcmV2ID0gMEw7CisgICAgY3hfYWN0aXZlID0gMTsgICAgICAgICAg ICAgICAgICAgICAgLyogUmVjb3JkIGlzIGFjdGl2ZSAqLworICAgIHAgPSBja2RhdGUoKTsKKyAg ICBuID0gY2tzdHJuY3B5KGN4bG9nYnVmLHAsQ1hMT0dCVUZMKTsKKyNpZmRlZiBUQ1BTT0NLRVQK KyAgICBpZiAobmV0dHlwZSA9PSBORVRfVENQQiB8fCBuZXR0eXBlID09IE5FVF9UQ1BBKSB7CisJ dGNwKys7CisJcyA9ICJUQ1AiOworICAgIH0gZWxzZSBpZiAobmV0dHlwZSA9PSBORVRfU1NIKSB7 CisJcyA9ICJTU0giOworCXRjcCsrOworICAgIH0KKyNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KKyNp ZmRlZiBBTllYMjUKKyAgICBpZiAobmV0dHlwZSA9PSBORVRfU1gyNSB8fCBuZXR0eXBlID09IE5F VF9WWDI1IHx8IG5ldHR5cGUgPT0gTkVUX0lYMjUpCisgICAgICBzID0gIlgyNSI7CisjZW5kaWYg LyogQU5ZWDI1ICovCisjaWZkZWYgREVDTkVUCisgICAgaWYgKG5ldHR5cGUgPT0gTkVUX0RFQykK KyAgICAgIHMgPSAiREVDTkVUIjsKKyNlbmRpZiAvKiBERUNORVQgKi8KKyNpZmRlZiBTVVBFUkxB VAorICAgIGlmIChuZXR0eXBlID09IE5FVF9TTEFUKQorICAgICAgcyA9ICJTVVBFUkxBVCI7Cisj ZW5kaWYgLyogU1VQRVJMQVQgKi8KKyNpZmRlZiBDS19ORVRCSU9TCisgICAgaWYgKG5ldHR5cGUg PT0gTkVUX0JJT1MpCisgICAgICBzID0gIk5FVEJJT1MiOworI2VuZGlmIC8qIENLX05FVEJJT1Mg Ki8KKworICAgIGlmICghdXVbMF0pIHsKKyAgICAgICAgZGVidWcoRjEwMCwiZG9sb2duZXQgdWlk YnVmIGVtcHR5IiwiIiwwKTsKKyNpZmRlZiBPUzJPUlVOSVggICAgICAgICAgICAgICAgICAgICAg ICAvKiBXaG8gaGFzIHdob2FtaSgpLi4uICovCisgICAgICAgIHV1ID0gKGNoYXIgKil3aG9hbWko KTsKKyNlbHNlCisjaWZkZWYgU1RSQVRVUworICAgICAgICB1dSA9IChjaGFyICopd2hvYW1pKCk7 CisjZWxzZQorICAgICAgICB1dSA9ICJVTktOT1dOIjsKKyNlbmRpZiAvKiBTVFJBVFVTICovCisj ZW5kaWYgLyogVU5JWCAqLworICAgIH0KKyNpZmRlZiBUQ1BTT0NLRVQKKyAgICBpZiAodGNwKSB7 CisJaW50IGs7CisJbWFrZXN0cigmaCxteWhvc3QpOworCWlmICgoayA9IGNraW5kZXgoIjoiLGgs MCwwLDApKSA+IDApIHsKKwkgICAgaFtrLTFdID0gTlVMOworCSAgICBwb3J0ID0gJmhba107CisJ fSBlbHNlIHsKKwkgICAgaW50IHN2Y251bSA9IGdldHRjcHBvcnQoKTsKKwkgICAgaWYgKHN2Y251 bSA+IDApCisJICAgICAgcG9ydCA9IGNraXRvYShzdmNudW0pOworCSAgICBlbHNlCisJICAgICAg cG9ydCA9ICJ1bmsiOworCX0KKyAgICB9CisjZW5kaWYJLyogVENQU09DS0VUICovCisgICAgbSA9 IHN0cmxlbih1dSkgKyBzdHJsZW4obXlob3N0KSArIHN0cmxlbih0dG5hbWUpICsgc3RybGVuKHMp ICsgMzI7CisgICAgaWYgKG4rbSA8IENYTE9HQlVGTC0xKSB7ICAgICAgICAgICAgLyogU0FGRSAq LworICAgICAgICBwID0gY3hsb2didWYrbjsKKyAgICAgICAgc3ByaW50ZihwLCIgJXMgJXMgVD0l cyBOPSVzIEg9JXMgUD0lcyAiLAorICAgICAgICAgICAgICAgIHV1LAorICAgICAgICAgICAgICAg IGNrZ2V0cGlkKCksCisgICAgICAgICAgICAgICAgcywKKyAgICAgICAgICAgICAgICB0dG5hbWUs CisgICAgICAgICAgICAgICAgbXlob3N0LAorCQlwb3J0CisgICAgICAgICAgICAgICAgKTsKKyAg ICB9IGVsc2UKKyAgICAgIGNrc3RybmNweShjeGxvZ2J1ZiwiTE9HTkVUIEJVRkZFUiBPVkVSRkxP VyIsQ1hMT0dCVUZMKTsKKyAgICBkZWJ1ZyhGMTEwLCJkb2xvZ25ldCBjeGxvZ2J1ZiIsY3hsb2di dWYsMCk7CisgICAgaWYgKGgpIG1ha2VzdHIoJmgsTlVMTCk7Cit9CisjZW5kaWYgLyogTkVUQ09O TiAqLworI2VuZGlmIC8qIENLTE9HRElBTCAqLworCisjaWZuZGVmIE5PRElBTAorLyoKKyAgUGFy c2UgYSBESUFMLXJlbGF0ZWQgc3RyaW5nLCBzdHJpcHBpbmcgZW5jbG9zaW5nIGJyYWNlcywgaWYg YW55LgorKi8KK3N0YXRpYyBpbnQKK2RpYWxzdHIocCxtc2cpIGNoYXIgKipwOyBjaGFyICptc2c7 IHsKKyAgICBpbnQgeDsKKyAgICBjaGFyICpzOworCisgICAgaWYgKCh4ID0gY210eHQobXNnLCAi IiwgJnMsIHh4c3RyaW5nKSkgPCAwKQorICAgICAgcmV0dXJuKHgpOworICAgIHMgPSBicnN0cmlw KHMpOyAgICAgICAgICAgICAgICAgICAgIC8qIFN0cmlwIGJyYWNlcyBhcm91bmQuICovCisgICAg ZGVidWcoRjExMCwiZGlhbHN0ciIscywwKTsKKyAgICBtYWtlc3RyKHAsKnM/czpOVUxMKTsKKyAg ICByZXR1cm4oc3VjY2VzcyA9IDEpOworfQorCitWT0lECitpbml0bWRtKHgpIGludCB4OyB7Cisg ICAgTURNSU5GICogcDsKKyAgICBpbnQgbTsKKworICAgIG1kbXR5cCA9IHg7ICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIFNldCBnbG9iYWwgbW9kZW0gdHlwZSAqLworICAgIGRlYnVnKEYxMDEs ImluaXRtZG0gbWRtdHlwIiwiIixtZG10eXApOworICAgIGRlYnVnKEYxMDEsImluaXRtZG0gdXNl cm1kbSIsIiIsdXNlcm1kbSk7CisgICAgaWYgKHggPCAxKSByZXR1cm47CisKKyAgICBtID0gdXNl cm1kbSA/IHVzZXJtZG0gOiBtZG10eXA7CisKKyAgICBwID0gbW9kZW1wW21dOyAgICAgICAgICAg ICAgICAgICAgICAvKiBQb2ludCB0byBtb2RlbSBpbmZvIHN0cnVjdCwgYW5kICovCisgICAgLyog ZGVidWcoRjEwMSwiaW5pdG1kbSBwIiwiIixwKTsgKi8KKyAgICBpZiAocCkgeworICAgICAgICBk aWFsZWMgPSBwLT5jYXBhcyAmIENLRF9FQzsgICAgIC8qIHNldCBESUFMIEVSUk9SLUNPUlJFQ1RJ T04sICovCisgICAgICAgIGRpYWxkYyA9IHAtPmNhcGFzICYgQ0tEX0RDOyAgICAgLyogRElBTCBE QVRBLUNPTVBSRVNTSU9OLCBhbmQgKi8KKyAgICAgICAgbWRtc3BkID0gcC0+Y2FwYXMgJiBDS0Rf U0IgPyAwIDogMTsgLyogRElBTCBTUEVFRC1NQVRDSElORyBmcm9tIGl0LiAqLworICAgICAgICBk aWFsZmMgPSBGTE9fQVVUTzsgICAgICAgICAgICAgICAgICAvKiBNb2RlbSdzIGxvY2FsIGZsb3cg Y29udHJvbC4uICovCisgICAgICAgIGRpYWxtYXggICA9IHAtPm1heF9zcGVlZDsKKyAgICAgICAg ZGlhbGNhcGFzID0gcC0+Y2FwYXM7CisgICAgICAgIGRpYWxlc2MgICA9IHAtPmVzY19jaGFyOwor ICAgIH0gZWxzZSBpZiAobWRtdHlwID4gMCkgeworICAgICAgICBwcmludGYoIldBUk5JTkc6IG1v ZGVtIGluZm8gZm9yIFwiJXNcIiBub3QgZmlsbGVkIGluIHlldFxuIiwKKyAgICAgICAgICAgICAg IGdtZG10eXAoKQorICAgICAgICAgICAgICAgKTsKKyAgICB9CisKKy8qIFJlc2V0IG9yIHNldCB0 aGUgU0VUIERJQUwgU1RSSU5HIGl0ZW1zIC4uLiAqLworCisjaWZkZWYgREVCVUcKKyAgICBpZiAo ZGVibG9nKSB7CisgICAgICAgIGRlYnVnKEYxMTAsImluaXRtZG0gZGlhbGluaSIsZGlhbGluaSww KTsKKyAgICAgICAgZGVidWcoRjExMCwiaW5pdG1kbSBkaWFsbXN0ciAiLGRpYWxtc3RyLDApOwor ICAgICAgICBkZWJ1ZyhGMTEwLCJpbml0bWRtIGRpYWxtcHJtdCIsZGlhbG1wcm10LDApOworICAg ICAgICBkZWJ1ZyhGMTEwLCJpbml0bWRtIGRpYWxjbWQiLGRpYWxjbWQsMCk7CisgICAgICAgIGRl YnVnKEYxMTAsImluaXRtZG0gZGlhbGRjb24iLGRpYWxkY29uLDApOworICAgICAgICBkZWJ1ZyhG MTEwLCJpbml0bWRtIGRpYWxkY29mZiIsZGlhbGRjb2ZmLDApOworICAgICAgICBkZWJ1ZyhGMTEw LCJpbml0bWRtIGRpYWxlY29uIixkaWFsZWNvbiwwKTsKKyAgICAgICAgZGVidWcoRjExMCwiaW5p dG1kbSBkaWFsZWNvZmYiLGRpYWxlY29mZiwwKTsKKyAgICAgICAgZGVidWcoRjExMCwiaW5pdG1k bSBkaWFsaGNtZCIsZGlhbGhjbWQsMCk7CisgICAgICAgIGRlYnVnKEYxMTAsImluaXRtZG0gZGlh bGh3ZmMiLGRpYWxod2ZjLDApOworICAgICAgICBkZWJ1ZyhGMTEwLCJpbml0bWRtIGRpYWxzd2Zj IixkaWFsc3dmYywwKTsKKyAgICAgICAgZGVidWcoRjExMCwiaW5pdG1kbSBkaWFsbm9mYyIsZGlh bG5vZmMsMCk7CisgICAgICAgIGRlYnVnKEYxMTAsImluaXRtZG0gZGlhbHRvbmUiLGRpYWx0b25l LDApOworICAgICAgICBkZWJ1ZyhGMTEwLCJpbml0bWRtIGRpYWxwdWxzZSIsZGlhbHB1bHNlLDAp OworICAgICAgICBkZWJ1ZyhGMTEwLCJpbml0bWRtIGRpYWxuYW1lIixkaWFsbmFtZSwwKTsKKyAg ICAgICAgZGVidWcoRjExMCwiaW5pdG1kbSBkaWFsYWFvbiIsZGlhbGFhb24sMCk7CisgICAgICAg IGRlYnVnKEYxMTAsImluaXRtZG0gZGlhbGFhb2ZmIixkaWFsYWFvZmYsMCk7CisgICAgICAgIGRl YnVnKEYxMTAsImluaXRtZG0gZGlhbHgzIixkaWFseDMsMCk7CisgICAgICAgIGRlYnVnKEYxMTAs ImluaXRtZG0gZGlhbHNwb24iLGRpYWxzcG9uLDApOworICAgICAgICBkZWJ1ZyhGMTEwLCJpbml0 bWRtIGRpYWxzcG9mZiIsZGlhbHNwb2ZmLDApOworICAgICAgICBkZWJ1ZyhGMTEwLCJpbml0bWRt IGRpYWx2b2wxIixkaWFsdm9sMSwwKTsKKyAgICAgICAgZGVidWcoRjExMCwiaW5pdG1kbSBkaWFs dm9sMiIsZGlhbHZvbDIsMCk7CisgICAgICAgIGRlYnVnKEYxMTAsImluaXRtZG0gZGlhbHZvbDMi LGRpYWx2b2wzLDApOworICAgICAgICBkZWJ1ZyhGMTEwLCJpbml0bWRtIGRpYWxpbmkyIixkaWFs aW5pMiwwKTsKKyAgICB9CisjZW5kaWYgLyogREVCVUcgKi8KKworICAgIGlmICh1c2VybWRtICYm IHApIHsgLyogVVNFUi1ERUZJTkVEOiBjb3B5IGluZm8gZnJvbSBzcGVjaWZpZWQgdGVtcGxhdGUg Ki8KKworICAgICAgICBtYWtlc3RyKCZkaWFsaW5pICAscC0+d2FrZV9zdHIpOworICAgICAgICBt YWtlc3RyKCZkaWFsbXN0ciAscC0+ZG1vZGVfc3RyKTsKKyAgICAgICAgbWFrZXN0cigmZGlhbG1w cm10LHAtPmRtb2RlX3Byb21wdCk7CisgICAgICAgIG1ha2VzdHIoJmRpYWxjbWQgICxwLT5kaWFs X3N0cik7CisgICAgICAgIG1ha2VzdHIoJmRpYWxkY29uICxwLT5kY19vbl9zdHIpOworICAgICAg ICBtYWtlc3RyKCZkaWFsZGNvZmYscC0+ZGNfb2ZmX3N0cik7CisgICAgICAgIG1ha2VzdHIoJmRp YWxlY29uICxwLT5lY19vbl9zdHIpOworICAgICAgICBtYWtlc3RyKCZkaWFsZWNvZmYscC0+ZWNf b2ZmX3N0cik7CisgICAgICAgIG1ha2VzdHIoJmRpYWxoY21kICxwLT5odXBfc3RyKTsKKyAgICAg ICAgbWFrZXN0cigmZGlhbGh3ZmMgLHAtPmh3ZmNfc3RyKTsKKyAgICAgICAgbWFrZXN0cigmZGlh bHN3ZmMgLHAtPnN3ZmNfc3RyKTsKKyAgICAgICAgbWFrZXN0cigmZGlhbG5vZmMgLHAtPm5vZmNf c3RyKTsKKyAgICAgICAgbWFrZXN0cigmZGlhbHRvbmUgLHAtPnRvbmUpOworICAgICAgICBtYWtl c3RyKCZkaWFscHVsc2UscC0+cHVsc2UpOworICAgICAgICBtYWtlc3RyKCZkaWFsbmFtZSAsIlRo aXMgc3BhY2UgYXZhaWxhYmxlICh1c2UgU0VUIE1PREVNIE5BTUUpIik7CisgICAgICAgIG1ha2Vz dHIoJmRpYWxhYW9uICxwLT5hYV9vbl9zdHIpOworICAgICAgICBtYWtlc3RyKCZkaWFsYWFvZmYs cC0+YWFfb2ZmX3N0cik7CisgICAgICAgIG1ha2VzdHIoJmRpYWx4MyAgICxwLT5pZ25vcmVkdCk7 CisgICAgICAgIG1ha2VzdHIoJmRpYWxzcG9uICxwLT5zcF9vbl9zdHIpOworICAgICAgICBtYWtl c3RyKCZkaWFsc3BvZmYscC0+c3Bfb2ZmX3N0cik7CisgICAgICAgIG1ha2VzdHIoJmRpYWx2b2wx ICxwLT52b2wxX3N0cik7CisgICAgICAgIG1ha2VzdHIoJmRpYWx2b2wyICxwLT52b2wyX3N0cik7 CisgICAgICAgIG1ha2VzdHIoJmRpYWx2b2wzICxwLT52b2wzX3N0cik7CisgICAgICAgIG1ha2Vz dHIoJmRpYWxpbmkyICxwLT5pbmkyKTsKKworICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAg ICAvKiBOb3QgdXNlci1kZWZpbmVkLCBzbyB3aXBlIG91dCBvdmVycmlkZXMgKi8KKworICAgICAg ICBpZiAoZGlhbGluaSkgICBtYWtlc3RyKCZkaWFsaW5pLE5VTEwpOyAgIC8qIEluaXQtc3RyaW5n ICovCisgICAgICAgIGlmIChkaWFsbXN0cikgIG1ha2VzdHIoJmRpYWxtc3RyLE5VTEwpOyAgLyog RGlhbC1tb2RlLXN0ciAqLworICAgICAgICBpZiAoZGlhbG1wcm10KSBtYWtlc3RyKCZkaWFsbXBy bXQsTlVMTCk7IC8qIERpYWwtbW9kZS1wcm8gKi8KKyAgICAgICAgaWYgKGRpYWxjbWQpICAgbWFr ZXN0cigmZGlhbGNtZCxOVUxMKTsgICAvKiBEaWFsLWNvbW1hbmQgICovCisgICAgICAgIGlmIChk aWFsZGNvbikgIG1ha2VzdHIoJmRpYWxkY29uLE5VTEwpOyAgLyogREMgT04gY29tbWFuZCAqLwor ICAgICAgICBpZiAoZGlhbGRjb2ZmKSBtYWtlc3RyKCZkaWFsZGNvZmYsTlVMTCk7IC8qIERDIE9G RiBjb21tYW5kICovCisgICAgICAgIGlmIChkaWFsZWNvbikgIG1ha2VzdHIoJmRpYWxlY29uLE5V TEwpOyAgLyogRUMgT04gY29tbWFuZCAqLworICAgICAgICBpZiAoZGlhbGVjb2ZmKSBtYWtlc3Ry KCZkaWFsZWNvZmYsTlVMTCk7IC8qIEVDIE9GRiBjb21tYW5kICovCisgICAgICAgIGlmIChkaWFs aGNtZCkgIG1ha2VzdHIoJmRpYWxoY21kLE5VTEwpOyAgLyogSGFuZ3VwIGNvbW1hbmQgKi8KKyAg ICAgICAgaWYgKGRpYWxod2ZjKSAgbWFrZXN0cigmZGlhbGh3ZmMsTlVMTCk7ICAvKiBGbG93IGNv bnRyb2wuLi4gKi8KKyAgICAgICAgaWYgKGRpYWxzd2ZjKSAgbWFrZXN0cigmZGlhbHN3ZmMsTlVM TCk7ICAvKiAgKi8KKyAgICAgICAgaWYgKGRpYWxub2ZjKSAgbWFrZXN0cigmZGlhbG5vZmMsTlVM TCk7ICAvKiAgKi8KKyAgICAgICAgaWYgKGRpYWx0b25lKSAgbWFrZXN0cigmZGlhbHRvbmUsTlVM TCk7ICAvKiBEaWFsaW5nIG1ldGhvZCAqLworICAgICAgICBpZiAoZGlhbHB1bHNlKSBtYWtlc3Ry KCZkaWFscHVsc2UsTlVMTCk7IC8qICAqLworICAgICAgICBpZiAoZGlhbG5hbWUpICBtYWtlc3Ry KCZkaWFsbmFtZSxOVUxMKTsgIC8qIE1vZGVtIG5hbWUgKi8KKyAgICAgICAgaWYgKGRpYWxhYW9u KSAgbWFrZXN0cigmZGlhbGFhb24sTlVMTCk7ICAvKiBBdXRvYW5zd2VyIE9uICovCisgICAgICAg IGlmIChkaWFsYWFvZmYpIG1ha2VzdHIoJmRpYWxhYW9mZixOVUxMKTsgLyogQXV0b2Fuc3dlciBP ZmYgKi8KKyAgICAgICAgaWYgKGRpYWx4MykgICAgbWFrZXN0cigmZGlhbHgzLE5VTEwpOyAgICAv KiBJZ25vcmUgZGlhbHRvbmUgKi8KKyAgICAgICAgaWYgKGRpYWxzcG9uKSAgbWFrZXN0cigmZGlh bHNwb24sTlVMTCk7ICAvKiBTcGVha2VyIE9uICovCisgICAgICAgIGlmIChkaWFsc3BvZmYpIG1h a2VzdHIoJmRpYWxzcG9mZixOVUxMKTsgLyogU3BlYWtlciBPZmYgKi8KKyAgICAgICAgaWYgKGRp YWx2b2wxKSAgbWFrZXN0cigmZGlhbHZvbDEsTlVMTCk7ICAvKiBMb3cgdm9sdW1lICovCisgICAg ICAgIGlmIChkaWFsdm9sMikgIG1ha2VzdHIoJmRpYWx2b2wyLE5VTEwpOyAgLyogTWVkaXVtIHZv bHVtZSAqLworICAgICAgICBpZiAoZGlhbHZvbDMpICBtYWtlc3RyKCZkaWFsdm9sMyxOVUxMKTsg IC8qIEhpZ2ggdm9sdW1lICovCisgICAgICAgIGlmIChkaWFsaW5pMikgIG1ha2VzdHIoJmRpYWxp bmkyLE5VTEwpOyAgLyogSW5pdCBzdHJpbmcgMiAqLworICAgIH0KKyAgICBpZiAoYXV0b2Zsb3cp ICAgICAgICAgICAgICAgICAgICAgICAvKiBNYXliZSBjaGFuZ2UgZmxvdyBjb250cm9sICovCisg ICAgICBzZXRmbG93KCk7CisKKyNpZm5kZWYgTUlOSURJQUwKKyNpZmRlZiBPTERUQkNPREUKKyAg ICB0Ym1vZGVsID0gMDsgICAgICAgICAgIC8qIElmIGl0J3MgYSBUZWxlYml0LCB3ZSBkb24ndCBr bm93IHRoZSBtb2RlbCB5ZXQgKi8KKyNlbmRpZiAvKiBPTERUQkNPREUgKi8KKyNlbmRpZiAvKiBN SU5JRElBTCAqLworfQorCisjaWZkZWYgQ09NTUVOVAorLyogTm90IGltcGxlbWVudGVkIHlldCAq LworaW50CitzZXRhbnN3ZXIoKSB7CisgICAgaW50IHgsIHk7CisgICAgZXh0ZXJuIGludCBhbnNf Y2lkLCBhbnNfcmluZzsKKyAgICBpZiAoKHggPSBjbWtleShhbnN3ZXJ0YWIsbmFuc3dlcnRhYiwi IiwiIix4eHN0cmluZykpIDwgMCkKKyAgICAgIHJldHVybih4KTsKKyAgICBzd2l0Y2ggKHgpIHsK KyAgICAgIGNhc2UgWFlBX0NJRDoKKyAgICAgICAgcmV0dXJuKHNldG9uKCZhbnNfY2lkKSk7Cisg ICAgICBjYXNlIFhZQV9STkc6CisgICAgICAgIHkgPSBjbW51bSgiSG93IG1hbnkgcmluZ3MgYmVm b3JlIGFuc3dlcmluZyIsIjEiLDEwLCZ4LHh4c3RyaW5nKTsKKyAgICAgICAgeSA9IHNldG51bSgm YW5zX3JpbmdzLHgseSwyNTQpOworICAgICAgICByZXR1cm4oeSk7CisgICAgfQorfQorI2VuZGlm IC8qIENPTU1FTlQgKi8KKworaW50CitzZXRtb2RlbSgpIHsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogU0VUIE1PREVNICovCisKKyAgICBpbnQgeCwgeSwgejsKKyAgICBsb25nIHp6Owor ICAgIHN0cnVjdCBGREIgazEsIGsyOworICAgIGV4dGVybiBpbnQgbWRtc2V0OworCisgICAgY21m ZGJpKCZrMSxfQ01LRVksCisgICAgICAgICAgICJNb2RlbSBwYXJhbWV0ZXIiLCIiLCIiLG5zZXRt ZG0sIDAsIHh4c3RyaW5nLCBzZXRtZG0sICZrMik7CisgICAgY21mZGJpKCZrMixfQ01LRVksIiIs IiIsIiIsbm1kbSwwLHh4c3RyaW5nLG1kbXRhYixOVUxMKTsKKyAgICB4ID0gY21mZGIoJmsxKTsK KyAgICBpZiAoeCA8IDApIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBFcnJvciAqLworICAg ICAgICBpZiAoeCA9PSAtMiB8fCB4ID09IC05KQorICAgICAgICAgIHByaW50ZigiP05vIGtleXdv cmRzIG1hdGNoOiBcIiVzXCJcbiIsYXRtYnVmKTsKKyAgICAgICAgcmV0dXJuKHgpOworICAgIH0K KyAgICB5ID0gY21yZXN1bHQubnJlc3VsdDsgICAgICAgICAgICAgICAvKiBLZXl3b3JkIHZhbHVl ICovCisgICAgaWYgKGNtcmVzdWx0LmZkYmFkZHIgPT0gJmsyKSB7ICAgICAgLyogTW9kZW0tdHlw ZSBrZXl3b3JkIHRhYmxlICovCisgICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkKKyAgICAg ICAgICByZXR1cm4oeCk7CisgICAgICAgIHVzZXJtZG0gPSAwOworICAgICAgICBpbml0bWRtKGNt cmVzdWx0Lm5yZXN1bHQpOyAgICAgIC8qIFNldCB0aGUgbW9kZW0gdHlwZS4gKi8KKyAgICAgICAg cmV0dXJuKHN1Y2Nlc3MgPSAxKTsgICAgICAgICAgICAvKiBEb25lICovCisgICAgfQorICAgIHN3 aXRjaCAoY21yZXN1bHQubnJlc3VsdCkgeyAgICAgICAgIC8qIFNFVCBNT0RFTSBrZXl3b3JkIHRh YmxlLiAqLworI2lmZGVmIE1ETUhVUAorICAgICAgY2FzZSBYWURNSFU6ICAgICAgICAgICAgICAg ICAgICAgIC8qIERJQUwgTU9ERU0tSEFOR1VQICovCisgICAgICAgIGlmICgoeSA9IGNta2V5KG1k bWhhbmcsNCwiaG93IHRvIGhhbmcgdXAgbW9kZW0iLAorICAgICAgICAgICAgICAgICAgICAgICAi bW9kZW0tY29tbWFuZCIsIHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgIHJldHVybih5KTsKKyAg ICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKQorICAgICAgICAgIHJldHVybih4KTsKKyAgICAg ICAgZGlhbG1odSA9IHk7CisjaWZkZWYgQ09NTUVOVAorLyogTm9wZSwgSSBmaXhlZCBpdCAoMjAw MSAxMSAwOCkgKi8KKyNpZmRlZiBDS19TQ09WNQorICAgICAgICBpZiAoZGlhbG1odSA9PSAwICYm ICFxdWlldCkgeworICAgICAgICAgICAgcHJpbnRmKAorIlxuIFdBUk5JTkc6IFJTLTIzMiBzaWdu YWwgc2FtcGxpbmcgYW5kIG1hbmlwdWxhdGlvbiBkbyBub3Qgd29ya1xuIgorICAgICAgICAgICAg ICAgICAgICApOworICAgICAgICAgICAgcHJpbnRmKAorIiBpbiB0aGUgc3RhbmRhcmQgU0NPIE9T UjUgc2VyaWFsIGkvbyBkcml2ZXJzLiAgU0VUIE1PREVNIEhBTkdVUC1NRVRIT0RcbiIKKyAgICAg ICAgICAgICAgICAgICApOworICAgICAgICAgICAgcHJpbnRmKAorIiBNT0RFTS1DT01NQU5EIGlz IHJlY29tbWVuZGVkIGZvciBPU1I1LlxuXG4iCisgICAgICAgICAgICAgICAgICAgICk7CisgICAg ICAgIH0KKyNlbmRpZiAvKiBDS19TQ09WNSAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAg ICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKyNlbmRpZiAvKiBNRE1IVVAgKi8KKworICAgICAgY2Fz ZSBYWURDQVA6CisgICAgICAgIHp6ID0gMEw7CisgICAgICAgIHkgPSAwOworICAgICAgICB3aGls ZSAoeSAhPSAtMykgeworICAgICAgICAgICAgaWYgKCh5ID0gY21rZXkobWRtY2FwLG5tZG1jYXAs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2FwYWJpbGl0eSBvZiBtb2RlbSIsICIiLCB4 eHN0cmluZykpIDwgMCkgeworICAgICAgICAgICAgICAgIGlmICh5ID09IC0zKQorICAgICAgICAg ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAg cmV0dXJuKHkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgenogfD0geTsKKyAgICAgICAg fQorICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApCisgICAgICAgICAgcmV0dXJuKHgpOwor ICAgICAgICBkaWFsY2FwYXMgPSB6ejsKKyAgICAgICAgZGVidWcoRjEwMSwic2V0bW9kZW0gYXV0 b2Zsb3ciLCIiLGF1dG9mbG93KTsKKyAgICAgICAgZGVidWcoRjEwMSwic2V0bW9kZW0gZmxvdyAx IiwiIixmbG93KTsKKyAgICAgICAgaWYgKGF1dG9mbG93KSAgICAgICAgICAgICAgICAgICAvKiBN YXliZSBjaGFuZ2UgZmxvdyBjb250cm9sICovCisgICAgICAgICAgc2V0ZmxvdygpOworICAgICAg ICBkZWJ1ZyhGMTAxLCJzZXRtb2RlbSBmbG93IDIiLCIiLGZsb3cpOworICAgICAgICBtZG1zcGQg PSB6eiAmIENLRF9TQiA/IDAgOiAxOyAgIC8qIFNldCBNT0RFTSBTUEVFRC1NQVRDSElORyBmcm9t IGl0LiAqLworICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworCisgICAgICBjYXNlIFhZRE1B WDoKKyNpZmRlZiBUTl9DT01QT1JUCisgICAgICAgIGlmIChuZXR3b3JrICYmIGlzdG5jb21wb3J0 KCkpCisgICAgICAgICAgeCA9IGNta2V5KHRuc3BkdGFiLG50bnNwZCxsaW5lLCIiLHh4c3RyaW5n KTsKKyAgICAgICAgZWxzZQorI2VuZGlmIC8qIFROX0NPTVBPUlQgKi8KKyAgICAgICAgICB4ID0g Y21rZXkoc3BkdGFiLG5zcGQsbGluZSwiIix4eHN0cmluZyk7CisgICAgICAgIGlmICh4IDwgMCkg eworICAgICAgICAgICAgaWYgKHggPT0gLTMpIHByaW50ZigiP3ZhbHVlIHJlcXVpcmVkXG4iKTsK KyAgICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoKHkgPSBjbWNm bSgpKSA8IDApIHJldHVybih5KTsKKyAgICAgICAgZGlhbG1heCA9IChsb25nKSB4ICogMTBMOwor ICAgICAgICBpZiAoZGlhbG1heCA9PSA3MCkgZGlhbG1heCA9IDc1OworICAgICAgICByZXR1cm4o c3VjY2VzcyA9IDEpOworCisgICAgICBjYXNlIFhZRFNUUjogICAgICAgICAgICAgICAgICAgICAg LyogVGhlc2UgbW92ZWQgZnJvbSBTRVQgRElBTCAqLworICAgICAgY2FzZSBYWUREQzoKKyAgICAg IGNhc2UgWFlERUM6CisgICAgICBjYXNlIFhZREVTQzoKKyAgICAgIGNhc2UgWFlERkM6CisgICAg ICBjYXNlIFhZREtTUDoKKyAgICAgIGNhc2UgWFlEU1BEOgorICAgICAgY2FzZSBYWURESUE6Cisg ICAgICAgIHJldHVybihzZXRkaWFsKHgpKTsKKworICAgICAgY2FzZSBYWURUWVA6CisgICAgICAg IGlmICgoeSA9IGNta2V5KG1kbXRhYixubWRtLCJtb2RlbSB0eXBlIiwibm9uZSIsIHh4c3RyaW5n KSkgPCAwKQorICAgICAgICAgIHJldHVybih5KTsKKyAgICAgICAgaWYgKHkgPT0gZGlhbHVkdCkg eyAgICAgICAgICAgICAvKiBVc2VyLWRlZmluZWQgbW9kZW0gdHlwZSAqLworICAgICAgICAgICAg aWYgKCh4ID0gY21rZXkobWRtdGFiLG5tZG0sImJhc2VkIG9uIGV4aXN0aW5nIG1vZGVtIHR5cGUi LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgInVua25vd24iLCB4eHN0cmluZykpIDwgMCkK KyAgICAgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICB9CisgICAgICAgIGlmICgoeiA9IGNt Y2ZtKCkpIDwgMCkKKyAgICAgICAgICByZXR1cm4oeik7CisgICAgICAgIHVzZXJtZG0gPSAwOwor ICAgICAgICB1c2VybWRtID0gKHkgPT0gZGlhbHVkdCkgPyB4IDogMDsKKyAgICAgICAgaW5pdG1k bSh5KTsKKyAgICAgICAgbWRtc2V0ID0gKG1kbXR5cCA+IDApOworICAgICAgICByZXR1cm4oc3Vj Y2VzcyA9IDEpOworCisgICAgICBjYXNlIFhZRE5BTToKKyAgICAgICAgcmV0dXJuKGRpYWxzdHIo JmRpYWxuYW1lLCJEZXNjcmlwdGl2ZSBuYW1lIGZvciBtb2RlbSIpKTsKKworICAgICAgY2FzZSBY WURNQ0Q6ICAgICAgICAgICAgICAgICAgICAgIC8qIFNFVCBNT0RFTSBDQVJSSUVSLVdBVENIICov CisgICAgICAgIHJldHVybihzZXRkY2QoKSk7CisKKyAgICAgIGNhc2UgWFlEU1BLOiAgICAgICAg ICAgICAgICAgICAgICAvKiBTRVQgTU9ERU0gU1BFQUtFUiAqLworICAgICAgICByZXR1cm4oc2V0 b24oJm1kbXNwaykpOworCisgICAgICBjYXNlIFhZRFZPTDogICAgICAgICAgICAgICAgICAgICAg LyogU0VUIE1PREVNIFZPTFVNRSAqLworICAgICAgICBpZiAoKHggPSBjbWtleSh2b2x0YWIsMywi IiwibWVkaXVtIix4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAg IGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkKKyAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgIG1k bXZvbCA9IHg7CisgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisKKyAgICAgIGRlZmF1bHQ6 CisgICAgICAgIHByaW50ZigiVW5leHBlY3RlZCBTRVQgTU9ERU0gcGFyYW1ldGVyXG4iKTsKKyAg ICAgICAgcmV0dXJuKC05KTsKKyAgICB9Cit9CisKK3N0YXRpYyBpbnQgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBTZXQgRElBTCBjb21tYW5kIG9wdGlvbnMgKi8KK3NldGRpYWwoeSkg aW50IHk7IHsKKyAgICBpbnQgeCA9IDAsIHogPSAwOworICAgIGNoYXIgKnMgPSBOVUxMOworCisg ICAgaWYgKHkgPCAwKQorICAgICAgaWYgKCh5ID0gY21rZXkoZGlhbHRhYixuZGlhbCwiIiwiIix4 eHN0cmluZykpIDwgMCkKKyAgICAgICAgcmV0dXJuKHkpOworICAgIHN3aXRjaCAoeSkgeworICAg ICAgY2FzZSBYWURIVVA6ICAgICAgICAgICAgICAgICAgICAgIC8qIERJQUwgSEFOR1VQICovCisg ICAgICAgIHJldHVybihzZXRvbigmZGlhbGhuZykpOworICAgICAgY2FzZSBYWURJTkk6ICAgICAg ICAgICAgICAgICAgICAgIC8qIERJQUwgSU5JVC1TVFJJTkcgKi8KKyAgICAgICAgcmV0dXJuKGRp YWxzdHIoJmRpYWxpbmksIk1vZGVtIGluaXRpYWxpemF0aW9uIHN0cmluZyIpKTsKKyAgICAgIGNh c2UgWFlETlBSOiAgICAgICAgICAgICAgICAgICAgICAvKiBESUFMIFBSRUZJWCAqLworICAgICAg ICByZXR1cm4oZGlhbHN0cigmZGlhbG5wciwiVGVsZXBob25lIG51bWJlciBwcmVmaXgiKSk7Cisg ICAgICBjYXNlIFhZRERJQTogICAgICAgICAgICAgICAgICAgICAgLyogRElBTCBESUFMLUNPTU1B TkQgKi8KKyAgICAgICAgeCA9IGNtdHh0KCJEaWFsaW5nIGNvbW1hbmQgZm9yIG1vZGVtLFxuXAor IGluY2x1ZGUgXCIlc1wiIHRvIHN0YW5kIGZvciBwaG9uZSBudW1iZXIsXG5cCisgZm9yIGV4YW1w bGUsIFwic2V0IGRpYWwgZGlhbC1jb21tYW5kIEFURFQlc1xcMTNcIiIsCisgICAgICAgICAgICAg ICAgICAiIiwKKyAgICAgICAgICAgICAgICAgICZzLAorICAgICAgICAgICAgICAgICAgeHhzdHJp bmcpOworICAgICAgICBpZiAoeCA8IDAgJiYgeCAhPSAtMykgICAgICAgICAgIC8qIEhhbmRsZSBw YXJzZSBlcnJvcnMgKi8KKyAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgIHMgPSBicnN0cmlw KHMpOyAgICAgICAgICAgICAgICAgLyogU3RyaXAgYnJhY2VzIG9yIHF1b3RlcyAqLworICAgICAg ICB5ID0geCA9IHN0cmxlbihzKTsgICAgICAgICAgICAgIC8qIEdldCBsZW5ndGggb2YgdGV4dCAq LworICAgICAgICBpZiAoeSA+IDApIHsgICAgICAgICAgICAgICAgICAgIC8qIElmIHRoZXJlIGlz IGFueSB0ZXh0IChsZWZ0KSwgKi8KKyAgICAgICAgICAgIGZvciAoeCA9IDA7IHggPCB5OyB4Kysp IHsgICAvKiBtYWtlIHN1cmUgdGhleSBpbmNsdWRlZCAiJXMiICovCisgICAgICAgICAgICAgICAg aWYgKHNbeF0gIT0gJyUnKSBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBpZiAoc1t4KzFdID09 ICdzJykgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoeCA9PSB5KSB7Cisg ICAgICAgICAgICAgICAgcHJpbnRmKAorIj9EaWFsLWNvbW1hbmQgbXVzdCBjb250YWluIFwiJWNz XCIgZm9yIHBob25lIG51bWJlci5cbiIsJyUnKTsKKyAgICAgICAgICAgICAgICByZXR1cm4oLTkp OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChkaWFsY21kKSB7ICAgICAg ICAgICAgICAgICAgLyogRnJlZSBhbnkgcHJldmlvdXMgc3RyaW5nLiAqLworICAgICAgICAgICAg ZnJlZShkaWFsY21kKTsKKyAgICAgICAgICAgIGRpYWxjbWQgPSAoY2hhciAqKSAwOworICAgICAg ICB9CisgICAgICAgIGlmICh5ID4gMCkgeworICAgICAgICAgICAgZGlhbGNtZCA9IG1hbGxvYyh5 ICsgMSk7ICAgIC8qIEFsbG9jYXRlIHNwYWNlIGZvciBpdCAqLworICAgICAgICAgICAgaWYgKGRp YWxjbWQpCisgICAgICAgICAgICAgIHN0cmNweShkaWFsY21kLHMpOyAgICAgICAgLyogYW5kIG1h a2UgYSBzYWZlIGNvcHkuICovCisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAx KTsKKyNpZm5kZWYgTk9YRkVSCisgICAgICBjYXNlIFhZREtTUDogICAgICAgICAgICAgICAgICAg ICAgLyogRElBTCBLRVJNSVQtU1BPT0YgKi8KKyAgICAgICAgcmV0dXJuKHNldG9uKCZkaWFsa3Nw KSk7CisjZW5kaWYgLyogTk9YRkVSICovCisgICAgICBjYXNlIFhZRFRNTzogICAgICAgICAgICAg ICAgICAgICAgLyogRElBTCBUSU1FT1VUICovCisgICAgICAgIHkgPSBjbW51bSgiU2Vjb25kcyB0 byB3YWl0IGZvciBjYWxsIGNvbXBsZXRpb24iLCIwIiwxMCwmeCx4eHN0cmluZyk7CisgICAgICAg IGlmICh5IDwgMCkgcmV0dXJuKHkpOworICAgICAgICB5ID0gY21udW0oIktlcm1pdC9tb2RlbSB0 aW1lb3V0IGRpZmZlcmVudGlhbCIsIjEwIiwxMCwmeix4eHN0cmluZyk7CisgICAgICAgIGlmICh5 IDwgMCkgcmV0dXJuKHkpOworICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApCisgICAgICAg ICAgcmV0dXJuKHkpOworICAgICAgICBkaWFsdG1vID0geDsKKyAgICAgICAgbWRtd2FpdGQgPSB6 OworICAgICAgY2FzZSBYWURFU0M6ICAgICAgICAgICAgICAgICAgICAgIC8qIERJQUwgRVNDQVBF LUNIQVJBQ1RFUiAqLworICAgICAgICB5ID0gY21udW0oIkFTQ0lJIHZhbHVlIG9mIGNoYXJhY3Rl ciB0byBlc2NhcGUgYmFjayB0byBtb2RlbSIsCisgICAgICAgICAgICAgICAgICAiNDMiLDEwLCZ4 LHh4c3RyaW5nKTsKKyAgICAgICAgeSA9IHNldG51bSgmZGlhbGVzYyx4LHksMTI4KTsKKyAgICAg ICAgaWYgKHkgPiAtMSAmJiBkaWFsZXNjIDwgMCkgICAgICAvKiBObyBlc2NhcGUgY2hhcmFjdGVy ICovCisgICAgICAgICAgZGlhbG1odSA9IDA7ICAgICAgICAgICAgICAgICAgLyogU28gbm8gaGFu Z3VwIGJ5IG1vZGVtIGNvbW1hbmQgKi8KKyAgICAgICAgcmV0dXJuKHkpOworICAgICAgY2FzZSBY WUREUFk6ICAgICAgICAgICAgICAgICAgICAgIC8qIERJQUwgRElTUExBWSAqLworICAgICAgICBy ZXR1cm4oc2V0b24oJmRpYWxkcHkpKTsKKyAgICAgIGNhc2UgWFlEU1BEOiAgICAgICAgICAgICAg ICAgICAgICAvKiBESUFMIFNQRUVELU1BVENISU5HICovCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogdXNlZCB0byBiZSBzcGVlZC1jaGFuZ2luZyAqLworICAgICAg ICBpZiAoKHkgPSBzZXRvbigmbWRtc3BkKSkgPCAwKSByZXR1cm4oeSk7CisjaWZkZWYgQ09NTUVO VAorICAgICAgICBtZG1zcGQgPSAxIC0gbWRtc3BkOyAgICAgICAgICAgIC8qIHNvIGhlcmUgd2Ug cmV2ZXJzZSB0aGUgbWVhbmluZyAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAgcmV0 dXJuKHN1Y2Nlc3MgPSAxKTsKKyAgICAgIGNhc2UgWFlETU5QOiAgICAgICAgICAgICAgICAgICAg ICAvKiBESUFMIE1OUC1FTkFCTEUgKi8KKyAgICAgIGNhc2UgWFlERUM6ICAgICAgICAgICAgICAg ICAgICAgICAvKiBESUFMIEVSUk9SLUNPUlJFQ1RJT04gKi8KKyAgICAgICAgeCA9IHNldG9uKCZk aWFsZWMpOworICAgICAgICBpZiAoeCA+IDApCisgICAgICAgICAgaWYgKCFkaWFsZWMpIGRpYWxk YyA9IDA7ICAgICAgLyogT0ZGIGFsc28gdHVybnMgb2ZmIGNvbXByZXNzaW9uICovCisgICAgICAg IHJldHVybih4KTsKKworICAgICAgY2FzZSBYWUREQzogICAgICAgICAgICAgICAgICAgICAgIC8q IERJQUwgQ09NUFJFU1NJT04gKi8KKyAgICAgICAgeCA9IHNldG9uKCZkaWFsZGMpOworICAgICAg ICBpZiAoeCA+IDApCisgICAgICAgICAgaWYgKGRpYWxkYykgZGlhbGVjID0gMTsgICAgICAgLyog T04gYWxzbyB0dXJucyBvbiBlcnJvciBjb3JyZWN0aW9uICovCisgICAgICAgIHJldHVybih4KTsK KworI2lmZGVmIE1ETUhVUAorICAgICAgY2FzZSBYWURNSFU6ICAgICAgICAgICAgICAgICAgICAg IC8qIERJQUwgTU9ERU0tSEFOR1VQICovCisgICAgICAgIHJldHVybihzZXRvbigmZGlhbG1odSkp OworI2VuZGlmIC8qIE1ETUhVUCAqLworCisjaWZuZGVmIE5PU1BMCisgICAgICBjYXNlIFhZRERJ UjogICAgICAgICAgICAgICAgICAgICAgLyogRElBTCBESVJFQ1RPUlkgKHplcm8gb3IgbW9yZSkg Ki8KKyAgICAgICAgcmV0dXJuKHBhcnNkaXIoMCkpOyAgICAgICAgICAgICAvKiAwIG1lYW5zIERJ QUwgKi8KKyNlbmRpZiAvKiBOT1NQTCAqLworCisgICAgICBjYXNlIFhZRFNUUjogICAgICAgICAg ICAgICAgICAgICAgLyogRElBTCBTVFJJTkcgKi8KKyAgICAgICAgaWYgKCh5ID0gY21rZXkobWRt Y21kLG5tZG1jbWQsIiIsIiIseHhzdHJpbmcpKSA8IDApIHJldHVybih5KTsKKyAgICAgICAgc3dp dGNoICh5KSB7CisgICAgICAgICAgY2FzZSBYWURTX0FOOiAgICAgICAgICAgICAgICAgLyogQXV0 b2Fuc3dlciBPTi9PRkYgKi8KKyAgICAgICAgICBjYXNlIFhZRFNfREM6ICAgICAgICAgICAgICAg ICAvKiBEYXRhIGNvbXByZXNzaW9uIE9OL09GRiAqLworICAgICAgICAgIGNhc2UgWFlEU19FQzog ICAgICAgICAgICAgICAgIC8qIEVycm9yIGNvcnJlY3Rpb24gT04vT0ZGICovCisgICAgICAgICAg ICBpZiAoKHggPSBjbWtleShvbm9mZiwyLCIiLCJvbiIseHhzdHJpbmcpKSA8IDApCisgICAgICAg ICAgICAgIHJldHVybih4KTsKKyAgICAgICAgICAgIHNwcmludGYodG1wYnVmLCJNb2RlbSdzIGNv bW1hbmQgdG8gJXNhYmxlICVzIiwgLyogU0FGRSAqLworICAgICAgICAgICAgICAgICAgICB4ID8g ImVuIiA6ICJkaXMiLAorICAgICAgICAgICAgICAgICAgICAoeSA9PSBYWURTX0RDKSA/ICJjb21w cmVzc2lvbiIgOgorICAgICAgICAgICAgICAgICAgICAoKHkgPT0gWFlEU19FQykgPyAiZXJyb3It Y29ycmVjdGlvbiIgOgorICAgICAgICAgICAgICAgICAgICAiYXV0b2Fuc3dlciIpCisgICAgICAg ICAgICAgICAgICAgICk7CisgICAgICAgICAgICBpZiAoeCkgeworICAgICAgICAgICAgICAgIGlm ICh5ID09IFhZRFNfREMpCisgICAgICAgICAgICAgICAgICByZXR1cm4oZGlhbHN0cigmZGlhbGRj b24sdG1wYnVmKSk7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoeSA9PSBYWURTX0VDKQorICAg ICAgICAgICAgICAgICAgcmV0dXJuKGRpYWxzdHIoJmRpYWxlY29uLHRtcGJ1ZikpOworICAgICAg ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgIHJldHVybihkaWFsc3RyKCZkaWFsYWFv bix0bXBidWYpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKHkg PT0gWFlEU19EQykKKyAgICAgICAgICAgICAgICAgIHJldHVybihkaWFsc3RyKCZkaWFsZGNvZmYs dG1wYnVmKSk7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoeSA9PSBYWURTX0VDKQorICAgICAg ICAgICAgICAgICAgcmV0dXJuKGRpYWxzdHIoJmRpYWxlY29mZix0bXBidWYpKTsKKyAgICAgICAg ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICByZXR1cm4oZGlhbHN0cigmZGlhbGFhb2Zm LHRtcGJ1ZikpOworICAgICAgICAgICAgfQorICAgICAgICAgIGNhc2UgWFlEU19IVTogICAgICAg ICAgICAgICAgIC8qICAgIGhhbmd1cCBjb21tYW5kICovCisgICAgICAgICAgICByZXR1cm4oZGlh bHN0cigmZGlhbGhjbWQsIk1vZGVtJ3MgaGFuZ3VwIGNvbW1hbmQiKSk7CisgICAgICAgICAgY2Fz ZSBYWURTX0hXOiAgICAgICAgICAgICAgICAgLyogICAgaHdmYyAqLworICAgICAgICAgICAgcmV0 dXJuKGRpYWxzdHIoJmRpYWxod2ZjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1vZGVt J3MgY29tbWFuZCB0byBlbmFibGUgaGFyZHdhcmUgZmxvdyBjb250cm9sIikpOworICAgICAgICAg IGNhc2UgWFlEU19JTjogICAgICAgICAgICAgICAgIC8qICAgIGluaXQgKi8KKyAgICAgICAgICAg IHJldHVybihkaWFsc3RyKCZkaWFsaW5pLCJNb2RlbSdzIGluaXRpYWxpemF0aW9uIHN0cmluZyIp KTsKKyAgICAgICAgICBjYXNlIFhZRFNfTkY6ICAgICAgICAgICAgICAgICAvKiAgICBubyBmbG93 IGNvbnRyb2wgKi8KKyAgICAgICAgICAgIHJldHVybihkaWFsc3RyKCZkaWFsbm9mYywKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICJNb2RlbSdzIGNvbW1hbmQgdG8gZGlzYWJsZSBsb2NhbCBm bG93IGNvbnRyb2wiKSk7CisgICAgICAgICAgY2FzZSBYWURTX1BYOiAgICAgICAgICAgICAgICAg LyogICAgcHJlZml4ICovCisgICAgICAgICAgICByZXR1cm4oZGlhbHN0cigmZGlhbG5wciwiVGVs ZXBob25lIG51bWJlciBwcmVmaXggZm9yIGRpYWxpbmciKSk7CisgICAgICAgICAgY2FzZSBYWURT X1NXOiAgICAgICAgICAgICAgICAgLyogICAgc3dmYyAqLworICAgICAgICAgICAgcmV0dXJuKGRp YWxzdHIoJmRpYWxzd2ZjLAorICAgICAgICAgICAgICAgICAgICJNb2RlbSdzIGNvbW1hbmQgdG8g ZW5hYmxlIGxvY2FsIHNvZnR3YXJlIGZsb3cgY29udHJvbCIpKTsKKyAgICAgICAgICBjYXNlIFhZ RFNfRFQ6ICAgICAgICAgICAgICAgICAvKiAgICB0b25lIGRpYWxpbmcgKi8KKyAgICAgICAgICAg IHJldHVybihkaWFsc3RyKCZkaWFsdG9uZSwKKyAgICAgICAgICAgICAgICAgICAiQ29tbWFuZCB0 byBjb25maWd1cmUgbW9kZW0gZm9yIHRvbmUgZGlhbGluZyIpKTsKKyAgICAgICAgICBjYXNlIFhZ RFNfRFA6ICAgICAgICAgICAgICAgICAvKiAgICBwdWxzZSBkaWFsaW5nICovCisgICAgICAgICAg ICByZXR1cm4oZGlhbHN0cigmZGlhbHB1bHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg IkNvbW1hbmQgdG8gY29uZmlndXJlIG1vZGVtIGZvciBwdWxzZSBkaWFsaW5nIikpOworICAgICAg ICAgIGNhc2UgWFlEU19NUzogICAgICAgICAgICAgICAgIC8qICAgIGRpYWwgbW9kZSBzdHJpbmcg Ki8KKyAgICAgICAgICAgIHJldHVybihkaWFsc3RyKCZkaWFsbXN0ciwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAiQ29tbWFuZCB0byBlbnRlciBkaWFsIG1vZGUiKSk7CisgICAgICAgICAgY2Fz ZSBYWURTX01QOiAgICAgICAgICAgICAgICAgLyogICAgZGlhbCBtb2RlIHByb21wdCAqLworICAg ICAgICAgICAgcmV0dXJuKGRpYWxzdHIoJmRpYWxtcHJtdCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICJNb2RlbSByZXNwb25zZSB1cG9uIGVudGVyaW5nIGRpYWwgbW9kZSIpKTsKKyAgICAg ICAgICBjYXNlIFhZRFNfU1A6ICAgICAgICAgICAgICAgICAvKiBTUEVBS0VSIE9GRiAqLworICAg ICAgICAgICAgaWYgKCh4ID0gY21rZXkob25vZmYsMiwiIiwib24iLHh4c3RyaW5nKSkgPCAwKSBy ZXR1cm4oeCk7CisgICAgICAgICAgICBpZiAoeCkKKyAgICAgICAgICAgICAgcmV0dXJuKGRpYWxz dHIoJmRpYWxzcG9uLCJDb21tYW5kIHRvIHR1cm4gbW9kZW0gc3BlYWtlciBvbiIpKTsKKyAgICAg ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgcmV0dXJuKGRpYWxzdHIoJmRpYWxzcG9mZiwiQ29t bWFuZCB0byB0dXJuIG1vZGVtIHNwZWFrZXIgb2ZmIikpOworCisgICAgICAgICAgY2FzZSBYWURT X1ZPOiAgICAgICAgICAgICAgICAgLyogVk9MVU1FIExPVyAqLworICAgICAgICAgICAgaWYgKCh4 ID0gY21rZXkodm9sdGFiLDMsIiIsIm1lZGl1bSIseHhzdHJpbmcpKSA8IDApIHJldHVybih4KTsK KyAgICAgICAgICAgIHN3aXRjaCAoeCkgeworICAgICAgICAgICAgICBjYXNlIDA6CisgICAgICAg ICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICByZXR1cm4oZGlhbHN0cigmZGlhbHZvbDEs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNvbW1hbmQgZm9yIGxvdyBtb2RlbSBz cGVha2VyIHZvbHVtZSIpKTsKKyAgICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAg IHJldHVybihkaWFsc3RyKCZkaWFsdm9sMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJD b21tYW5kIGZvciBtZWRpdW0gbW9kZW0gc3BlYWtlciB2b2x1bWUiKSk7CisKKyAgICAgICAgICAg ICAgY2FzZSAzOgorICAgICAgICAgICAgICAgIHJldHVybihkaWFsc3RyKCZkaWFsdm9sMywKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ29tbWFuZCBmb3IgaGlnaCBtb2RlbSBzcGVh a2VyIHZvbHVtZSIpKTsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBy ZXR1cm4oLTIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgY2FzZSBYWURTX0lEOiAgICAg ICAgICAgICAgICAgLyogSUdOT1JFLURJQUxUT05FICovCisgICAgICAgICAgICByZXR1cm4oZGlh bHN0cigmZGlhbHgzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNvbW1hbmQgdG8gdGVs bCBtb2RlbSB0byBpZ25vcmUgZGlhbHRvbmUiKSk7CisKKyAgICAgICAgICBjYXNlIFhZRFNfSTI6 ICAgICAgICAgICAgICAgICAvKiBQUkVESUFMLUlOSVQgKi8KKyAgICAgICAgICAgIHJldHVybihk aWFsc3RyKCZkaWFsaW5pMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJDb21tYW5kIHRv IHNlbmQgdG8gbW9kZW0ganVzdCBwcmlvciB0byBkaWFsaW5nIikpOworCisgICAgICAgICAgZGVm YXVsdDoKKyAgICAgICAgICAgIHByaW50ZigiP1VuZXhwZWN0ZWQgU0VUIERJQUwgU1RSSU5HIHBh cmFtZXRlclxuIik7CisgICAgICAgIH0KKworICAgICAgY2FzZSBYWURGQzogICAgICAgICAgICAg ICAgICAgICAgIC8qIERJQUwgRkxPVy1DT05UUk9MICovCisgICAgICAgIGlmICgoeSA9IGNta2V5 KGRpYWxfZmMsNCwiIiwiYXV0byIseHhzdHJpbmcpKSA8IDApIHJldHVybih5KTsKKyAgICAgICAg aWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7CisgICAgICAgIGRpYWxmYyA9IHk7Cisg ICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisKKyAgICAgIGNhc2UgWFlETVRIOiB7ICAgICAg ICAgICAgICAgICAgICAvKiBESUFMIE1FVEhPRCAqLworICAgICAgICBleHRlcm4gaW50IGRpYWxt YXV0bzsKKyAgICAgICAgaWYgKCh5ID0gY21rZXkoZGlhbF9tLG5kaWFsX20sIiIsImRlZmF1bHQi LHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgIHJldHVybih5KTsKKyAgICAgICAgaWYgKCh4ID0g Y21jZm0oKSkgPCAwKQorICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgaWYgKHkgPT0gWFlE TV9BKSB7ICAgICAgICAgICAgICAvKiBBVVRPICovCisgICAgICAgICAgICBkaWFsbWF1dG8gPSAx OyAgICAgICAgICAgICAgLyogbG9jYWwgY291bnRyeSBjb2RlLCBpZiBrbm93bi4gKi8KKyAgICAg ICAgICAgIGRpYWxtdGggPSBYWURNX0Q7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgZGlh bG1hdXRvID0gMDsgICAgICAgICAgICAgICAgLyogdXNlIHRoZSBtZXRob2Qgc3BlY2lmaWVkICov CisgICAgICAgICAgZGlhbG10aCA9IHk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuKHN1Y2Nl c3MgPSAxKTsKKyAgICAgIH0KKyAgICAgIGNhc2UgWFlEUlRNOgorICAgICAgICB5ID0gY21udW0o Ik51bWJlciBvZiB0aW1lcyB0byB0cnkgZGlhbGluZyBhIG51bWJlciIsCisgICAgICAgICAgICAg ICAgICAiMSIsMTAsJngseHhzdHJpbmcpOworCXogPSBzZXRudW0oJmRpYWxydHIseCx5LC0xKTsK KwlpZiAoeiA+IC0xICYmIGRpYWxydHIgPCAwKSB7CisJICAgIHByaW50ZigiP1NvcnJ5LCBuZWdh dGl2ZSBkaWFsIHJldHJpZXMgbm90IHZhbGlkOiAlZFxuIixkaWFscnRyKTsKKwkgICAgcmV0dXJu KC05KTsKKwl9CisgICAgICAgIHJldHVybih6KTsKKworICAgICAgY2FzZSBYWURJTlQ6CisgICAg ICAgIHkgPSBjbW51bSgiU2Vjb25kcyB0byB3YWl0IGJldHdlZW4gcmVkaWFsIGF0dGVtcHRzIiwK KyAgICAgICAgICAgICAgICAgICIzMCIsMTAsJngseHhzdHJpbmcpOworICAgICAgICB6ID0gc2V0 bnVtKCZkaWFsaW50LHgseSwtMSk7CisJaWYgKHogPiAtMSAmJiBkaWFsaW50IDwgMCkgeworCSAg ICBwcmludGYoIj9Tb3JyeSwgbmVnYXRpdmUgZGlhbCBpbnRlcnZhbCBub3QgdmFsaWQ6ICVkXG4i LGRpYWxpbnQpOworCSAgICByZXR1cm4oLTkpOworCX0KKyAgICAgICAgcmV0dXJuKHopOworCisg ICAgICBjYXNlIFhZRExBQzogICAgICAgICAgICAgICAgICAgICAgLyogRElBTCBBUkVBLUNPREUg Ki8KKyAgICAgICAgaWYgKCh4ID0gZGlhbHN0cigmZGlhbGxhYywiQXJlYSBjb2RlIHlvdSBhcmUg Y2FsbGluZyBmcm9tIikpIDwgMCkKKyAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgIGlmIChk aWFsbGFjKSB7CisgICAgICAgICAgICBpZiAoIXJkaWdpdHMoZGlhbGxhYykpIHsKKyAgICAgICAg ICAgICAgICBwcmludGYoIj9Tb3JyeSwgYXJlYSBjb2RlIG11c3QgYmUgbnVtZXJpY1xuIik7Cisg ICAgICAgICAgICAgICAgaWYgKCpkaWFsbGFjID09ICcoJykKKyAgICAgICAgICAgICAgICAgIHBy aW50ZigiKHBsZWFzZSBvbWl0IHRoZSBwYXJlbnRoZXNlcylcbiIpOworICAgICAgICAgICAgICAg IGlmICgqZGlhbGxhYyA9PSAnLycpCisgICAgICAgICAgICAgICAgICBwcmludGYoIihubyBzbGFz aGVzLCBwbGVhc2UpXG4iKTsKKyAgICAgICAgICAgICAgICBpZiAoZGlhbGxhYykgZnJlZShkaWFs bGFjKTsKKyAgICAgICAgICAgICAgICBkaWFsbGFjID0gTlVMTDsKKyAgICAgICAgICAgICAgICBy ZXR1cm4oLTkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybih4KTsK KworICAgICAgY2FzZSBYWURDTkY6ICAgICAgICAgICAgICAgICAgICAgIC8qIENPTkZJUk1BVElP TiAqLworICAgICAgICByZXR1cm4oc3VjY2VzcyA9IHNldG9uKCZkaWFsY25mKSk7CisKKyAgICAg IGNhc2UgWFlEQ1ZUOiAgICAgICAgICAgICAgICAgICAgICAvKiBDT05WRVJULURJUkVDVE9SWSAq LworICAgICAgICBpZiAoKHkgPSBjbWtleShkY252dGFiLDMsIiIsImFzayIseHhzdHJpbmcpKSA8 IDApCisgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDAp CisgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICBkaWFsY3Z0ID0geTsKKyAgICAgICAgcmV0 dXJuKHN1Y2Nlc3MgPSAxKTsKKworICAgICAgY2FzZSBYWURMQ0M6ICAgICAgICAgICAgICAgICAg ICAgIC8qIERJQUwgQ09VTlRSWS1DT0RFICovCisgICAgICAgIHggPSBkaWFsc3RyKCZkaWFsbGNj LCJDb3VudHJ5IGNvZGUgeW91IGFyZSBjYWxsaW5nIGZyb20iKTsKKyAgICAgICAgaWYgKHggPCAx KSByZXR1cm4oeCk7CisgICAgICAgIGlmIChkaWFsbGNjKSB7CisgICAgICAgICAgICBpZiAoIXJk aWdpdHMoZGlhbGxjYykpIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIj9Tb3JyeSwgY291bnRy eSBjb2RlIG11c3QgYmUgbnVtZXJpY1xuIik7CisgICAgICAgICAgICAgICAgaWYgKCpkaWFsbGNj ID09ICcrJykKKyAgICAgICAgICAgICAgICAgIHByaW50ZigiKHBsZWFzZSBvbWl0IHRoZSBwbHVz IHNpZ24pXG4iKTsKKyAgICAgICAgICAgICAgICBpZiAoZGlhbGxjYykgZnJlZShkaWFsbGNjKTsK KyAgICAgICAgICAgICAgICBkaWFsbGNjID0gTlVMTDsKKyAgICAgICAgICAgICAgICByZXR1cm4o LTkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFzdHJjbXAoZGlhbGxjYywiMSIp KSB7IC8qIFNldCBkZWZhdWx0cyBmb3IgVVNBIGFuZCBDYW5hZGEgKi8KKyAgICAgICAgICAgICAg ICBpZiAoIWRpYWxsZHApICAgICAgICAgICAvKiBMb25nLWRpc3RhbmNlIHByZWZpeCAqLworICAg ICAgICAgICAgICAgICAgbWFrZXN0cigmZGlhbGxkcCwiMSIpOworICAgICAgICAgICAgICAgIGlm ICghZGlhbGl4cCkgICAgICAgICAgIC8qIEludGVybmF0aW9uYWwgZGlhbGluZyBwcmVmaXggKi8K KyAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJmRpYWxpeHAsIjAxMSIpOworICAgICAgICAgICAg ICAgIGlmIChudG9sbGZyZWUgPT0gMCkgeyAgIC8qIFRvbGwtZnJlZSBhcmVhIGNvZGVzICovCisg ICAgICAgICAgICAgICAgICAgIGlmICgoZGlhbHRmY1swXSA9IG1hbGxvYyg0KSkpIHsKKyAgICAg ICAgICAgICAgICAgICAgICAgIHN0cmNweShkaWFsdGZjWzBdLCI4MDAiKTsgLyogMTk3MC1zb21l dGhpbmcgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIG50b2xsZnJlZSsrOworICAgICAgICAg ICAgICAgICAgICAgICAgaWYgKChkaWFsdGZjWzFdID0gbWFsbG9jKDQpKSkgeworICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHN0cmNweShkaWFsdGZjWzFdLCI4ODgiKTsgLyogMTk5NiAqLwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG50b2xsZnJlZSsrOworICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGlmICgoZGlhbHRmY1syXSA9IG1hbGxvYyg0KSkpIHsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc3RyY3B5KGRpYWx0ZmNbMl0sIjg3NyIpOyAvKiA1IEFwcmls IDE5OTggKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnRvbGxmcmVlKys7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoZGlhbHRmY1szXSA9IG1hbGxvYyg0 KSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmNweShkaWFsdGZj WzNdLCI4NjYiKTsgLyogMjAwMD8gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIG50b2xsZnJlZSsrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlm ICghZGlhbHRmcCkgICAgICAgICAgIC8qIFRvbGwtZnJlZSBkaWFsaW5nIHByZWZpeCAqLworICAg ICAgICAgICAgICAgICAgbWFrZXN0cigmZGlhbHRmcCwiMSIpOworI2lmZGVmIENPTU1FTlQKKy8q IFRoZSB0aW1lIGZvciB0aGlzIGlzIHBhc3QgKi8KKyAgICAgICAgICAgIH0gZWxzZSBpZiAoIXN0 cmNtcChkaWFsbGNjLCIzNTgiKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAoKGludCkgc3Ry Y21wKHp6bmRhdGUoKSwiMTk5NjEwMTEiKSA+IDApCisgICAgICAgICAgICAgICAgICAgICAgICkg eyAgICAgICAgICAgICAgLyogRmlubGFuZCAqLworICAgICAgICAgICAgICAgIGlmICghZGlhbGxk cCkgICAgICAgICAgIC8qIExvbmctZGlzdGFuY2UgcHJlZml4ICovCisgICAgICAgICAgICAgICAg ICBtYWtlc3RyKCZkaWFsbGRwLCI5Iik7CisgICAgICAgICAgICAgICAgaWYgKCFkaWFsaXhwKSAg ICAgICAgICAgLyogSW50ZXJuYXRpb25hbCBkaWFsaW5nIHByZWZpeCAqLworICAgICAgICAgICAg ICAgICAgbWFrZXN0cigmZGlhbGl4cCwiOTkwIik7CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAg ICAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgIC8qIEV2ZXJ5d2hlcmUgZWxzZSAu Li4gKi8KKyAgICAgICAgICAgICAgICBpZiAoIWRpYWxsZHApIHsKKyAgICAgICAgICAgICAgICAg ICAgaWYgKChkaWFsbGRwID0gbWFsbG9jKDQpKSkKKyAgICAgICAgICAgICAgICAgICAgICBzdHJj cHkoZGlhbGxkcCwiMCIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAo IWRpYWxpeHApIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKChkaWFsaXhwID0gbWFsbG9jKDQp KSkKKyAgICAgICAgICAgICAgICAgICAgICBzdHJjcHkoZGlhbGl4cCwiMDAiKTsKKyAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIXN0cmNtcChkaWFsbGNj LCIzMyIpKSAgLyogRnJhbmNlICovCisgICAgICAgICAgICAgIGRpYWxmbGQgPSAxOyAgICAgICAg ICAgICAgLyogTG9uZy1kaXN0YW5jZSBkaWFsaW5nIGlzIGZvcmNlZCAqLworICAgICAgICB9Cisg ICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisKKyAgICAgIGNhc2UgWFlESVhQOiAgICAgICAg ICAgICAgICAgICAgICAvKiBESUFMIElOVEwtUFJFRklYICovCisgICAgICAgIHJldHVybihkaWFs c3RyKCZkaWFsaXhwLCJJbnRlcm5hdGlvbmFsIGRpYWxpbmcgcHJlZml4IikpOworCisgICAgICBj YXNlIFhZRElYUzogICAgICAgICAgICAgICAgICAgICAgLyogRElBTCBJTlRMLVNVRkZJWCAqLwor ICAgICAgICByZXR1cm4oZGlhbHN0cigmZGlhbGl4cywiSW50ZXJuYXRpb25hbCBkaWFsaW5nIHN1 ZmZpeCIpKTsKKworICAgICAgY2FzZSBYWURMRFA6ICAgICAgICAgICAgICAgICAgICAgIC8qIERJ QUwgTEQtUFJFRklYICovCisgICAgICAgIHJldHVybihkaWFsc3RyKCZkaWFsbGRwLCJMb25nLWRp c3RhbmNlIGRpYWxpbmcgcHJlZml4IikpOworCisgICAgICBjYXNlIFhZRExEUzogICAgICAgICAg ICAgICAgICAgICAgLyogRElBTCBMRC1TVUZGSVggKi8KKyAgICAgICAgcmV0dXJuKGRpYWxzdHIo JmRpYWxsZHMsIkxvbmctZGlzdGFuY2UgZGlhbGluZyBzdWZmaXgiKSk7CisKKyAgICAgIGNhc2Ug WFlETENQOiAgICAgICAgICAgICAgICAgICAgICAvKiBESUFMIExDLVBSRUZJWCAqLworICAgICAg ICByZXR1cm4oZGlhbHN0cigmZGlhbGxjcCwiTG9jYWwgZGlhbGluZyBwcmVmaXgiKSk7CisKKyAg ICAgIGNhc2UgWFlETENTOiAgICAgICAgICAgICAgICAgICAgICAvKiBESUFMIExDLVNVRkZJWCAq LworICAgICAgICByZXR1cm4oZGlhbHN0cigmZGlhbGxjcywiTG9jYWwgZGlhbGluZyBzdWZmaXgi KSk7CisKKyNpZmRlZiBDT01NRU5UCisgICAgICBjYXNlIFhZRFBYWDogICAgICAgICAgICAgICAg ICAgICAgLyogRElBTCBQQlgtRVhDSEFOR0UgKi8KKyAgICAgICAgcmV0dXJuKGRpYWxzdHIoJmRp YWxweHgsIkV4Y2hhbmdlIG9mIFBCWCB5b3UgYXJlIGNhbGxpbmcgZnJvbSIpKTsKKyNlbmRpZiAv KiBDT01NRU5UICovCisKKyAgICAgIGNhc2UgWFlEUFhJOiB7ICAgICAgICAgICAgICAgICAgICAv KiBESUFMIFBCWC1JTlRFUk5BTC1QUkVGSVggKi8KKyNpZmRlZiBDT01NRU5UCisgICAgICAgICAg cmV0dXJuKGRpYWxzdHIoJmRpYWxweGksCisgICAgICAgICAgICAgICAgICAgICAgICJJbnRlcm5h bC1jYWxsIHByZWZpeCBvZiBQQlggeW91IGFyZSBjYWxsaW5nIGZyb20iKSk7CisjZWxzZQorICAg ICAgICAgIGludCB4OworICAgICAgICAgIGlmICgoeCA9IGNtdHh0KCJJbnRlcm5hbC1jYWxsIHBy ZWZpeCBvZiBQQlggeW91IGFyZSBjYWxsaW5nIGZyb20iLAorICAgICAgICAgICAgICAgICAgICAg ICAgICIiLCZzLE5VTEwpKSA8IDApIC8qIERvbid0IGV2YWx1YXRlICovCisgICAgICAgICAgICBy ZXR1cm4oeCk7CisjaWZuZGVmIE5PU1BMCisgICAgICAgICAgaWYgKCpzKSB7CisgICAgICAgICAg ICAgIGNoYXIgYywgKiBwID0gdG1wYnVmOworICAgICAgICAgICAgICBpZiAoKnMgPT0gJ1xcJykg eworICAgICAgICAgICAgICAgICAgYyA9ICoocysxKTsKKyAgICAgICAgICAgICAgICAgIGlmIChp c3VwcGVyKGMpKSBjID0gdG9sb3dlcihjKTsKKyAgICAgICAgICAgICAgICAgIGlmIChjICE9ICdm JyAmJgorICAgICAgICAgICAgICAgICAgICAgIGNrc3RyY21wKHMsIlxcdihkJHB4KSIsOCwwKSAm JgorICAgICAgICAgICAgICAgICAgICAgIGNrc3RyY21wKHMsIlxcdihkJHB4eCkiLDksMCkgJiYK KyAgICAgICAgICAgICAgICAgICAgICBja3N0cmNtcChzLCJcXHYoZCRwKSIsNywwKSkgeworICAg ICAgICAgICAgICAgICAgICAgIHggPSBUTVBCVUZTSVo7CisgICAgICAgICAgICAgICAgICAgICAg enpzdHJpbmcocywmcCwmeCk7CisgICAgICAgICAgICAgICAgICAgICAgcyA9IHRtcGJ1ZjsKKyAg ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyNlbmRpZiAv KiBOT1NQTCAqLworICAgICAgICAgIG1ha2VzdHIoJmRpYWxweGkscyk7CisgICAgICAgICAgcmV0 dXJuKDEpOworICAgICAgfQorI2VuZGlmIC8qIENPTU1FTlQgKi8KKworICAgICAgY2FzZSBYWURQ WE86ICAgICAgICAgICAgICAgICAgICAgIC8qIERJQUwgUEJYLU9VVFNJREUtUFJFRklYICovCisg ICAgICAgIHJldHVybihkaWFsc3RyKCZkaWFscHhvLAorICAgICAgICAgICAgICAgICAgICAgICAi T3V0c2lkZS1saW5lIHByZWZpeCBvZiBQQlggeW91IGFyZSBjYWxsaW5nIGZyb20iKSk7CisKKyAg ICAgIGNhc2UgWFlEU0ZYOiAgICAgICAgICAgICAgICAgICAgICAvKiBESUFMIElOVEwtU1VGRklY ICovCisgICAgICAgIHJldHVybihkaWFsc3RyKCZkaWFsc2Z4LCIgVGVsZXBob25lIG51bWJlciBz dWZmaXggZm9yIGRpYWxpbmciKSk7CisKKyAgICAgIGNhc2UgWFlEU1JUOiAgICAgICAgICAgICAg ICAgICAgICAvKiBESUFMIFNPUlQgKi8KKyAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSBzZXRvbigm ZGlhbHNydCkpOworCisgICAgICBjYXNlIFhZRFBYWDogICAgICAgICAgICAgICAgICAgICAgLyog RElBTCBQQlgtRVhDSEFOR0UgKi8KKyAgICAgIGNhc2UgWFlEVEZDOiB7ICAgICAgICAgICAgICAg ICAgICAvKiBESUFMIFRPTEwtRlJFRS1BUkVBLUNPREUgICovCisgICAgICAgICAgaW50IG4sIGk7 ICAgICAgICAgICAgICAgICAgICAgLyogKHplcm8gb3IgbW9yZSBvZiB0aGVtLi4uKSAqLworICAg ICAgICAgIGNoYXIgKiBwW01BWFRPTExGUkVFXTsgICAgICAgIC8qIFRlbXBvcmFyeSBwb2ludGVy cyAqLworICAgICAgICAgIGNoYXIgKiBtOworICAgICAgICAgIGZvciAobiA9IDA7IG4gPCBNQVhU T0xMRlJFRTsgbisrKSB7CisgICAgICAgICAgICAgIGlmIChuID09IDApIHsKKyAgICAgICAgICAg ICAgICAgIG0gPSAoeSA9PSBYWURURkMpID8KKyAgICAgICAgICAgICAgICAgICJUb2xsLWZyZWUg YXJlYSBjb2RlKHMpIGluIHRoZSBjb3VudHJ5IHlvdSBhcmUgY2FsbGluZyBmcm9tIgorICAgICAg ICAgICAgICAgICAgICA6ICJFeGNoYW5nZShzKSBvZiBQQlggeW91IGFyZSBjYWxsaW5nIGZyb20i OworICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgbSA9ICh5ID09IFhZ RFRGQykgPworICAgICAgICAgICAgICAgICAgICAiQW5vdGhlciB0b2xsLWZyZWUgYXJlYSBjb2Rl IgorICAgICAgICAgICAgICAgICAgICAgIDogIkFub3RoZXIgUEJYIGV4Y2hhbmdlIjsKKyAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgICBpZiAoKHggPSBjbWZsZChtLCIiLCZzLHh4c3RyaW5n KSkgPCAwKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBpZiAocykgewor ICAgICAgICAgICAgICAgICAgaW50IGs7CisgICAgICAgICAgICAgICAgICBrID0gKGludCkgc3Ry bGVuKHMpOworICAgICAgICAgICAgICAgICAgaWYgKGsgPiAwKSB7CisgICAgICAgICAgICAgICAg ICAgICAgaWYgKChwW25dID0gbWFsbG9jKGsgKyAxKSkpCisgICAgICAgICAgICAgICAgICAgICAg ICBzdHJjcHkocFtuXSwgcyk7IC8qIHNhZmUgKi8KKyAgICAgICAgICAgICAgICAgIH0gZWxzZSBi cmVhazsKKyAgICAgICAgICAgICAgfSBlbHNlIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAg ICBpZiAoeCA9PSAtMykgeyAgICAgICAgICAgICAgICAvKiBDb21tYW5kIHdhcyBzdWNjZXNzZnVs ICovCisgICAgICAgICAgICAgIGludCBtOworICAgICAgICAgICAgICBtID0gKHkgPT0gWFlEVEZD KSA/IG50b2xsZnJlZSA6IG5kaWFscHh4OworICAgICAgICAgICAgICBpZiAoKHggPSBjbWNmbSgp KSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICAgICAgICB4ID0gMTsK KyAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG07IGkrKykgeyAvKiBSZW1vdmUgb2xkIGxp c3QsIGlmIGFueSAqLworICAgICAgICAgICAgICAgICAgaWYgICh5ID09IFhZRFRGQykKKyAgICAg ICAgICAgICAgICAgICAgbWFrZXN0cigmKGRpYWx0ZmNbaV0pLE5VTEwpOworICAgICAgICAgICAg ICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBtYWtlc3RyKCYoZGlhbHB4eFtpXSksTlVM TCk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgaWYgICh5ID09IFhZRFRGQykKKyAg ICAgICAgICAgICAgICBudG9sbGZyZWUgPSBuOyAgICAgICAgICAvKiBOZXcgY291bnQgKi8KKyAg ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG5kaWFscHh4ID0gbjsKKyAgICAgICAg ICAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgeyAvKiBOZXcgbGlzdCAqLworICAgICAgICAg ICAgICAgICAgaWYgICh5ID09IFhZRFRGQykKKyAgICAgICAgICAgICAgICAgICAgbWFrZXN0cigm KGRpYWx0ZmNbaV0pLHBbaV0pOworICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg ICAgICAgICBtYWtlc3RyKCYoZGlhbHB4eFtpXSkscFtpXSk7CisgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgeCA9IDE7CisgICAgICAgICAgfQorICAgICAgICAgIGZvciAoaSA9IDA7IGkg PCBuOyBpKyspCisgICAgICAgICAgICBpZiAocFtpXSkgZnJlZShwW2ldKTsKKyAgICAgICAgICBy ZXR1cm4oeCk7CisgICAgICB9CisKKyAgICAgIGNhc2UgWFlEVEZQOiAgICAgICAgICAgICAgICAg ICAgICAvKiBUT0xMLUZSRUUtUFJFRklYICovCisgICAgICAgIHJldHVybihkaWFsc3RyKCZkaWFs dGZwLAorICAgICAgICAgICAgICAgICAgICAgICAiIExvbmctZGlzdGFuY2UgcHJlZml4IGZvciB0 b2xsLWZyZWUgZGlhbGluZyIpKTsKKworICAgICAgY2FzZSBYWURDT046ICAgICAgICAgICAgICAg ICAgICAgIC8qIENPTk5FQ1QgKi8KKyAgICAgICAgeiA9IC0xOworICAgICAgICBpZiAoKHkgPSBj bWtleShjcnJ0YWIsbmNyciwiIiwiYXV0byIseHhzdHJpbmcpKSA8IDApIHJldHVybih5KTsKKyAg ICAgICAgaWYgKHkgIT0gQ0FSX09GRikgICAgICAgICAgICAgICAvKiBBVVRPIG9yIE9OPyAqLwor ICAgICAgICAgIGlmICgoeiA9IGNta2V5KHF2dGFiLG5xdnQsIiIsInZlcmJvc2UiLHh4c3RyaW5n KSkgPCAwKSByZXR1cm4oeik7CisgICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJu KHgpOworICAgICAgICBpZiAoeiA+IC0xKQorICAgICAgICAgIGRpYWxjcSA9IHo7CisgICAgICAg IGRpYWxjb24gPSB5OworICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworCisgICAgICBjYXNl IFhZRFJTVFI6ICAgICAgICAgICAgICAgICAgICAgLyogUkVTVFJJQ1QgKi8KKyAgICAgICAgaWYg KCh5ID0gY21rZXkoZHJzdHJ0YWIsNCwiIiwibm9uZSIseHhzdHJpbmcpKSA8IDApIHJldHVybih5 KTsKKyAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7CisgICAgICAgIGRp YWxyc3RyID0geTsKKyAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKworICAgICAgY2FzZSBY WURMTEFDOiB7ICAgICAgICAgICAgICAgICAgIC8qIExvY2FsIGFyZWEtY29kZSBsaXN0ICAqLwor ICAgICAgICAgIGludCBuLCBpOyAgICAgICAgICAgICAgICAgICAgIC8qICh6ZXJvIG9yIG1vcmUg b2YgdGhlbS4uLikgKi8KKyAgICAgICAgICBjaGFyICogcFtNQVhMT0NBTEFDXTsgLyogVGVtcG9y YXJ5IHBvaW50ZXJzICovCisgICAgICAgICAgZm9yIChuID0gMDsgbiA8IE1BWExPQ0FMQUM7IG4r KykgeworICAgICAgICAgICAgICBpZiAoKHggPSBjbWZsZCgKKyAgICAgICAgICAgICAgICAgICAg IkFyZWEgY29kZSB0byB3aGljaCBjYWxscyBmcm9tIHlvdXIgYXJlYSBhcmUgbG9jYWwiLAorICAg ICAgICAgICAgICAgICAgICAgICAiIiwmcyx4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgICAgICAgaWYgKHMpIHsKKyAgICAgICAgICAgICAgICAgIGludCBr OworICAgICAgICAgICAgICAgICAgayA9IChpbnQpIHN0cmxlbihzKTsKKyAgICAgICAgICAgICAg ICAgIGlmIChrID4gMCkgeworICAgICAgICAgICAgICAgICAgICAgIGlmICgocFtuXSA9IG1hbGxv YyhrICsgMSkpKQorICAgICAgICAgICAgICAgICAgICAgICAgc3RyY3B5KHBbbl0sIHMpOyAvKiBz YWZlICovCisgICAgICAgICAgICAgICAgICB9IGVsc2UgYnJlYWs7CisgICAgICAgICAgICAgIH0g ZWxzZSBicmVhazsKKyAgICAgICAgICB9CisgICAgICAgICAgaWYgKHggPT0gLTMpIHsgICAgICAg ICAgICAgICAgLyogQ29tbWFuZCB3YXMgc3VjY2Vzc2Z1bCAqLworICAgICAgICAgICAgICBpZiAo KHggPSBjbWNmbSgpKSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICAg ICAgICBmb3IgKGkgPSAwOyBpIDwgbmxvY2FsYWM7IGkrKykgLyogUmVtb3ZlIG9sZCBsaXN0LCBp ZiBhbnkgKi8KKyAgICAgICAgICAgICAgICBpZiAoZGlhbGxjYWNbaV0pIHsKKyAgICAgICAgICAg ICAgICAgICAgZnJlZShkaWFsbGNhY1tpXSk7CisgICAgICAgICAgICAgICAgICAgIGRpYWxsY2Fj W2ldID0gTlVMTDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIG5sb2NhbGFjID0g bjsgICAgICAgICAgICAgLyogTmV3IGNvdW50ICovCisgICAgICAgICAgICAgIGZvciAoaSA9IDA7 IGkgPCBubG9jYWxhYzsgaSsrKSAvKiBOZXcgbGlzdCAqLworICAgICAgICAgICAgICAgIGRpYWxs Y2FjW2ldID0gcFtpXTsKKyAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKyAgICAg ICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAvKiBQYXJzZSBlcnJvciwgdW5kbyBl dmVyeXRoaW5nICovCisgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspCisgICAg ICAgICAgICAgICAgaWYgKHBbaV0pIGZyZWUocFtpXSk7CisgICAgICAgICAgICAgIHJldHVybih4 KTsKKyAgICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGNhc2UgWFlERkxEOgorICAgICAgICBy ZXR1cm4oc3VjY2VzcyA9IHNldG9uKCZkaWFsZmxkKSk7CisKKyAgICAgIGNhc2UgWFlESURUOiAg ICAgICAgICAgICAgICAgICAgICAvKiBESUFMIElHTk9SRS1ESUFMVE9ORSAqLworICAgICAgICBy ZXR1cm4oc2V0b24oJmRpYWxpZHQpKTsKKworICAgICAgY2FzZSBYWURQQUM6CisgICAgICAgIHkg PSBjbW51bSgKKyAgICAgICAgICAgICAgIk1pbGxpc2Vjb25kcyB0byBwYXVzZSBiZXR3ZWVuIGVh Y2ggY2hhcmFjdGVyIHNlbnQgdG8gZGlhbGVyIiwKKyAgICAgICAgICAgICAgICAgICIiLDEwLCZ4 LHh4c3RyaW5nKTsKKyAgICAgICAgcmV0dXJuKHNldG51bSgmZGlhbHBhY2UseCx5LDk5OTkpKTsK KworI2lmbmRlZiBOT1NQTAorICAgICAgY2FzZSBYWURNQUM6CisgICAgICAgIGlmICgoeCA9IGNt ZmxkKCJOYW1lIG9mIG1hY3JvIHRvIGV4ZWN1dGUganVzdCBwcmlvciB0byBkaWFsaW5nIiwKKyAg ICAgICAgICAgICAgICAgICAgICAgIiIsJnMseHhzdHJpbmcpKSA8IDApIHsKKyAgICAgICAgICAg IGlmICh4ID09IC0zKQorICAgICAgICAgICAgICBzID0gTlVMTDsKKyAgICAgICAgICAgIGVsc2UK KyAgICAgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICB9CisgICAgICAgIGlmIChzKSB7Cisg ICAgICAgICAgICBpZiAoISpzKSB7CisgICAgICAgICAgICAgICAgcyA9IE5VTEw7CisgICAgICAg ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGNrc3RybmNweShsaW5lLHMsTElOQlVGU0la KTsKKyAgICAgICAgICAgICAgICBzID0gbGluZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor ICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApCisgICAgICAgICAgcmV0dXJuKHgpOworICAg ICAgICBtYWtlc3RyKCZkaWFsbWFjLHMpOworICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwor I2VuZGlmIC8qIE5PU1BMICovCisKKyAgICAgIGNhc2UgWFlEUFVDQzogICAgICAgICAgICAgICAg ICAgICAvKiBQdWxzZSBjb3VudHJ5IGNvZGVzICovCisgICAgICBjYXNlIFhZRFRPQ0M6IHsgICAg ICAgICAgICAgICAgICAgLyogVG9uZSBjb3VudHJ5IGNvZGVzICovCisgICAgICAgICAgaW50IG4s IGk7CisgICAgICAgICAgY2hhciAqIHBbTUFYVFBDQ107CisgICAgICAgICAgY2hhciAqIG07Cisg ICAgICAgICAgZm9yIChuID0gMDsgbiA8IE1BWFRQQ0M7IG4rKykgeworICAgICAgICAgICAgICBp ZiAobiA9PSAwKSB7CisgICAgICAgICAgICAgICAgICBtID0gKHkgPT0gWFlEUFVDQykgPworICAg ICAgICAgICAgICAgICAgIkNvdW50cnkgY29kZSB3aGVyZSBQdWxzZSBkaWFsaW5nIGlzIHJlcXVp cmVkIgorICAgICAgICAgICAgICAgICAgICA6ICJDb3VudHJ5IGNvZGUgd2hlcmUgVG9uZSBkaWFs aW5nIGlzIGF2YWlsYWJsZSI7CisgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAg IG0gPSAiQW5vdGhlciBjb3VudHJ5IGNvZGUiOworICAgICAgICAgICAgICBpZiAoKHggPSBjbWZs ZChtLCIiLCZzLHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg ICAgICAgICBpZiAocykgeworICAgICAgICAgICAgICAgICAgaW50IGs7CisgICAgICAgICAgICAg ICAgICBrID0gKGludCkgc3RybGVuKHMpOworICAgICAgICAgICAgICAgICAgaWYgKGsgPiAwKSB7 CisgICAgICAgICAgICAgICAgICAgICAgaWYgKChwW25dID0gbWFsbG9jKGsgKyAxKSkpCisgICAg ICAgICAgICAgICAgICAgICAgICBzdHJjcHkocFtuXSwgcyk7IC8qIHNhZmUgKi8KKyAgICAgICAg ICAgICAgICAgIH0gZWxzZSBicmVhazsKKyAgICAgICAgICAgICAgfSBlbHNlIGJyZWFrOworICAg ICAgICAgIH0KKyAgICAgICAgICBpZiAoeCA9PSAtMykgeyAgICAgICAgICAgICAgICAvKiBDb21t YW5kIHdhcyBzdWNjZXNzZnVsICovCisgICAgICAgICAgICAgIGludCBtOworICAgICAgICAgICAg ICBtID0gKHkgPT0gWFlEUFVDQykgPyBuZGlhbHB1Y2MgOiBuZGlhbHRvY2M7CisgICAgICAgICAg ICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4oeCk7Cisg ICAgICAgICAgICAgIHggPSAxOworICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbTsgaSsr KSB7IC8qIFJlbW92ZSBvbGQgbGlzdCwgaWYgYW55ICovCisgICAgICAgICAgICAgICAgICBpZiAo eSA9PSBYWURQVUNDKQorICAgICAgICAgICAgICAgICAgICBtYWtlc3RyKCYoZGlhbHB1Y2NbaV0p LE5VTEwpOworICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBtYWtl c3RyKCYoZGlhbHRvY2NbaV0pLE5VTEwpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg IGlmICh5ID09IFhZRFBVQ0MpIHsKKyAgICAgICAgICAgICAgICAgIG5kaWFscHVjYyA9IG47ICAg ICAgICAgICAgICAgIC8qIE5ldyBjb3VudCAqLworICAgICAgICAgICAgICB9IGVsc2UgeworICAg ICAgICAgICAgICAgICAgbmRpYWx0b2NjID0gbjsKKyAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7IC8qIE5ldyBsaXN0ICovCisgICAgICAgICAg ICAgICAgICBpZiAoeSA9PSBYWURQVUNDKSB7CisgICAgICAgICAgICAgICAgICAgICAgbWFrZXN0 cigmKGRpYWxwdWNjW2ldKSxwW2ldKTsKKyAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg ICAgICAgICAgICAgICAgICAgbWFrZXN0cigmKGRpYWx0b2NjW2ldKSxwW2ldKTsKKyAgICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB4ID0gMTsKKyAgICAg ICAgICB9CisgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykKKyAgICAgICAgICAgIGlm IChwW2ldKSBmcmVlKHBbaV0pOworICAgICAgICAgIHJldHVybih4KTsKKyAgICAgIH0KKyAgICAg IGNhc2UgWFlEVEVTVDoKKyAgICAgICAgcmV0dXJuKHNldG9uKCZkaWFsdGVzdCkpOworCisgICAg ICBkZWZhdWx0OgorICAgICAgICBwcmludGYoIj9VbmV4cGVjdGVkIFNFVCBESUFMIHBhcmFtZXRl clxuIik7CisgICAgICAgIHJldHVybigtOSk7CisgICAgfQorfQorCisjaWZuZGVmIE5PU0hPVwor aW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNIT1cgTU9ERU0gKi8K K3Nob21vZGVtKCkgeworICAgIE1ETUlORiAqIHA7CisgICAgaW50IHgsIG4sIG1kbTsKKyAgICBj aGFyIGM7CisgICAgbG9uZyB6ejsKKworI2lmZGVmIElLU0QKKyAgICBpZiAoaW5zZXJ2ZXIpIHsK KyAgICAgICAgcHJpbnRmKCJTb3JyeSwgY29tbWFuZCBkaXNhYmxlZFxyXG4iKTsKKyAgICAgICAg cmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKyAgICB9CisjZW5kaWYgLyogSUtTRCAqLworCisgICAgc2ht ZG1saW4oKTsKKyAgICBwcmludGYoIlxuIik7CisKKyAgICBtZG0gPSAobWRtdHlwID4gMCkgPyBt ZG10eXAgOiBtZG1zYXY7CisgICAgcCA9IChtZG0gPiAwKSA/IG1vZGVtcFttZG1dIDogTlVMTDsK KworICAgIGlmIChwKSB7CisgICAgICAgIHByaW50ZigiICVzXG5cbiIsIGRpYWxuYW1lID8gZGlh bG5hbWUgOiBwLT5uYW1lKTsKKworICAgICAgICBwcmludGYoIiBNb2RlbSBjYXBhYmlsaXRpZXM6 ICAgICIpOworICAgICAgICB6eiA9IGRpYWxjYXBhcyA/IGRpYWxjYXBhcyA6IHAtPmNhcGFzOwor ICAgICAgICBpZiAoIXp6KSB7CisgICAgICAgICAgICBwcmludGYoIiAobm9uZSkiKTsKKyAgICAg ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICh6eiAmIENLRF9BVCkgcHJpbnRmKCIgQVQiKTsK KyAgICAgICAgICAgIGlmICh6eiAmIENLRF9WMjUpIHByaW50ZigiIElUVSIpOworICAgICAgICAg ICAgaWYgKHp6ICYgQ0tEX1NCKSBwcmludGYoIiBTQiIpOworICAgICAgICAgICAgaWYgKHp6ICYg Q0tEX0VDKSBwcmludGYoIiBFQyIpOworICAgICAgICAgICAgaWYgKHp6ICYgQ0tEX0RDKSBwcmlu dGYoIiBEQyIpOworICAgICAgICAgICAgaWYgKHp6ICYgQ0tEX0hXKSBwcmludGYoIiBIV0ZDIik7 CisgICAgICAgICAgICBpZiAoenogJiBDS0RfU1cpIHByaW50ZigiIFNXRkMiKTsKKyAgICAgICAg ICAgIGlmICh6eiAmIENLRF9LUykgcHJpbnRmKCIgS1MiKTsKKyAgICAgICAgICAgIGlmICh6eiAm IENLRF9UQikgcHJpbnRmKCIgVEIiKTsKKyAgICAgICAgfQorICAgICAgICBwcmludGYoIlxuIE1v ZGVtIGNhcnJpZXItd2F0Y2g6ICAgICIpOworICAgICAgICBpZiAoY2FycmllciA9PSBDQVJfT0ZG KSBwcmludGYoIm9mZlxuIik7CisgICAgICAgIGVsc2UgaWYgKGNhcnJpZXIgPT0gQ0FSX09OKSBw cmludGYoIm9uXG4iKTsKKyAgICAgICAgZWxzZSBpZiAoY2FycmllciA9PSBDQVJfQVVUKSBwcmlu dGYoImF1dG9cbiIpOworICAgICAgICBlbHNlIHByaW50ZigidW5rbm93blxuIik7CisKKyAgICAg ICAgcHJpbnRmKCIgTW9kZW0gbWF4aW11bS1zcGVlZDogICAgIik7CisgICAgICAgIHp6ID0gKGRp YWxtYXggPiAwTCkgPyBkaWFsbWF4IDogcC0+bWF4X3NwZWVkOworICAgICAgICBpZiAoenogPiAw KQorICAgICAgICAgIHByaW50ZigiJWxkIGJwc1xuIiwgenopOworICAgICAgICBlbHNlCisgICAg ICAgICAgcHJpbnRmKCIodW5rbm93bilcbiIpOworICAgICAgICBwcmludGYoIiBNb2RlbSBlcnJv ci1jb3JyZWN0aW9uOiAlc1xuIiwgZGlhbGVjID8gIm9uIiA6ICJvZmYiKTsKKyAgICAgICAgcHJp bnRmKCIgTW9kZW0gY29tcHJlc3Npb246ICAgICAgJXNcbiIsIGRpYWxkYyA/ICJvbiIgOiAib2Zm Iik7CisgICAgICAgIHByaW50ZigiIE1vZGVtIHNwZWVkLW1hdGNoaW5nOiAgICVzIiwgICBtZG1z cGQgPyAib24iIDogIm9mZiIpOworICAgICAgICBwcmludGYoIiAoaW50ZXJmYWNlIHNwZWVkICVz KVxuIiwgbWRtc3BkID8gImNoYW5nZXMiIDogImlzIGxvY2tlZCIpOworICAgICAgICBwcmludGYo IiBNb2RlbSBmbG93LWNvbnRyb2w6ICAgICAiKTsKKyAgICAgICAgaWYgKGRpYWxmYyA9PSBGTE9f Tk9ORSkgcHJpbnRmKCJub25lXG4iKTsKKyAgICAgICAgZWxzZSBpZiAoZGlhbGZjID09IEZMT19Y T05YKSBwcmludGYoInhvbi94b2ZmXG4iKTsKKyAgICAgICAgZWxzZSBpZiAoZGlhbGZjID09IEZM T19SVFNDKSBwcmludGYoInJ0cy9jdHNcbiIpOworICAgICAgICBlbHNlIGlmIChkaWFsZmMgPT0g RkxPX0FVVE8pIHByaW50ZigiYXV0b1xuIik7CisgICAgICAgIHByaW50ZigiIE1vZGVtIGhhbmd1 cC1tZXRob2Q6ICAgICVzXG4iLAorICAgICAgICAgICAgICAgZGlhbG1odSA/CisgICAgICAgICAg ICAgICAibW9kZW0tY29tbWFuZCIgOgorICAgICAgICAgICAgICAgInJzMjMyLXNpZ25hbCIKKyAg ICAgICAgICAgICAgICk7CisgICAgICAgIHByaW50ZigiIE1vZGVtIHNwZWFrZXI6ICAgICAgICAg ICVzXG4iLCBzaG93b2ZmKG1kbXNwaykpOworICAgICAgICBwcmludGYoIiBNb2RlbSB2b2x1bWU6 ICAgICAgICAgICAlc1xuIiwKKyAgICAgICAgICAgICAgIChtZG12b2wgPT0gMikgPyAibWVkaXVt IiA6ICgobWRtdm9sIDw9IDEpID8gImxvdyIgOiAiaGlnaCIpKTsKKyAgICAgICAgcHJpbnRmKCIg TW9kZW0ga2VybWl0LXNwb29mOiAgICAgJXNcbiIsIGRpYWxrc3AgPyAib24iIDogIm9mZiIpOwor ICAgICAgICBjID0gKGNoYXIpICh4ID0gKGRpYWxlc2MgPyBkaWFsZXNjIDogcC0+ZXNjX2NoYXIp KTsKKyAgICAgICAgcHJpbnRmKCIgTW9kZW0gZXNjYXBlLWNoYXJhY3RlcjogJWQiLCB4KTsKKyAg ICAgICAgaWYgKGlzcHJpbnQoYykpCisgICAgICAgICAgcHJpbnRmKCIgKD0gXCIlY1wiKSIsYyk7 CisgICAgICAgIHByaW50ZigKKyJcblxuTU9ERU0gQ09NTUFORHMgKCogPSBzZXQgYXV0b21hdGlj YWxseSBieSBTRVQgTU9ERU0gVFlQRSk6XG5cbiIpOworICAgICAgICBkZWJ1ZyhGMTEwLCJzaG93 IGRpYWxpbmkiLGRpYWxpbmksMCk7CisgICAgICAgIHByaW50ZigiICVjIEluaXQtc3RyaW5nOiAg ICAgICAgICAiLCBkaWFsaW5pID8gJyAnIDogJyonICk7CisgICAgICAgIHNob2RzKGRpYWxpbmkg PyBkaWFsaW5pIDogcC0+d2FrZV9zdHIpOworICAgICAgICBwcmludGYoIiAlYyBEaWFsLW1vZGUt c3RyaW5nOiAgICAgIiwgZGlhbG1zdHIgPyAnICcgOiAnKicgKTsKKyAgICAgICAgc2hvZHMoZGlh bG1zdHIgPyBkaWFsbXN0ciA6IHAtPmRtb2RlX3N0cik7CisgICAgICAgIG4gPSBsb2NhbCA/IDE5 IDogMjA7CisgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSBy ZXR1cm4oMCk7IGVsc2UgbiA9IDA7CisgICAgICAgIHByaW50ZigiICVjIERpYWwtbW9kZS1wcm9t cHQ6ICAgICAiLCBkaWFsbXBybXQgPyAnICcgOiAnKicgKTsKKyAgICAgICAgc2hvZHMoZGlhbG1w cm10ID8gZGlhbG1wcm10IDogcC0+ZG1vZGVfcHJvbXB0KTsKKyAgICAgICAgaWYgKCsrbiA+IGNt ZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKKyAgICAg ICAgcHJpbnRmKCIgJWMgRGlhbC1jb21tYW5kOiAgICAgICAgICIsIGRpYWxjbWQgPyAnICcgOiAn KicgKTsKKyAgICAgICAgc2hvZHMoZGlhbGNtZCA/IGRpYWxjbWQgOiBwLT5kaWFsX3N0cik7Cisg ICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7 IGVsc2UgbiA9IDA7CisgICAgICAgIHByaW50ZigiICVjIENvbXByZXNzaW9uIG9uOiAgICAgICAi LCBkaWFsZGNvbiA/ICcgJyA6ICcqJyApOworICAgICAgICBpZiAoIWRpYWxkY29uKQorICAgICAg ICAgIGRlYnVnKEYxMTAsImRpYWxkY29uIiwiKG51bGwpIiwwKTsKKyAgICAgICAgZWxzZQorICAg ICAgICAgIGRlYnVnKEYxMTAsImRpYWxkY29uIixkaWFsZGNvbiwwKTsKKyAgICAgICAgc2hvZHMo ZGlhbGRjb24gPyBkaWFsZGNvbiA6IHAtPmRjX29uX3N0cik7CisgICAgICAgIGlmICgrK24gPiBj bWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7CisgICAg ICAgIHByaW50ZigiICVjIENvbXByZXNzaW9uIG9mZjogICAgICAiLCBkaWFsZGNvZmYgPyAnICcg OiAnKicgKTsKKyAgICAgICAgc2hvZHMoZGlhbGRjb2ZmID8gZGlhbGRjb2ZmIDogcC0+ZGNfb2Zm X3N0cik7CisgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSBy ZXR1cm4oMCk7IGVsc2UgbiA9IDA7CisgICAgICAgIHByaW50ZigiICVjIEVycm9yLWNvcnJlY3Rp b24gb246ICAiLCBkaWFsZWNvbiA/ICcgJyA6ICcqJyApOworICAgICAgICBzaG9kcyhkaWFsZWNv biA/IGRpYWxlY29uIDogcC0+ZWNfb25fc3RyKTsKKyAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dz IC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKKyAgICAgICAgcHJp bnRmKCIgJWMgRXJyb3ItY29ycmVjdGlvbiBvZmY6ICIsIGRpYWxlY29mZiA/ICcgJyA6ICcqJyAp OworICAgICAgICBzaG9kcyhkaWFsZWNvZmYgPyBkaWFsZWNvZmYgOiBwLT5lY19vZmZfc3RyKTsK KyAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigw KTsgZWxzZSBuID0gMDsKKyAgICAgICAgcHJpbnRmKCIgJWMgQXV0b2Fuc3dlciBvbjogICAgICAg ICIsIGRpYWxhYW9uID8gJyAnIDogJyonICk7CisgICAgICAgIHNob2RzKGRpYWxhYW9uID8gZGlh bGFhb24gOiBwLT5hYV9vbl9zdHIpOworICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBp ZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOworICAgICAgICBwcmludGYoIiAl YyBBdXRvYW5zd2VyIG9mZjogICAgICAgIiwgZGlhbGFhb2ZmID8gJyAnIDogJyonICk7CisgICAg ICAgIHNob2RzKGRpYWxhYW9mZiA/IGRpYWxhYW9mZiA6IHAtPmFhX29mZl9zdHIpOworICAgICAg ICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNl IG4gPSAwOworCisgICAgICAgIHByaW50ZigiICVjIFNwZWFrZXIgb246ICAgICAgICAgICAiLCBk aWFsc3BvbiA/ICcgJyA6ICcqJyApOworICAgICAgICBzaG9kcyhkaWFsc3BvbiA/IGRpYWxzcG9u IDogcC0+c3Bfb25fc3RyKTsKKyAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFh c2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKKyAgICAgICAgcHJpbnRmKCIgJWMgU3Bl YWtlciBvZmY6ICAgICAgICAgICIsIGRpYWxzcG9mZiA/ICcgJyA6ICcqJyApOworICAgICAgICBz aG9kcyhkaWFsc3BvZmYgPyBkaWFsc3BvZmYgOiBwLT5zcF9vZmZfc3RyKTsKKyAgICAgICAgaWYg KCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0g MDsKKyAgICAgICAgcHJpbnRmKCIgJWMgVm9sdW1lIGxvdzogICAgICAgICAgICIsIGRpYWx2b2wx ID8gJyAnIDogJyonICk7CisgICAgICAgIHNob2RzKGRpYWx2b2wxID8gZGlhbHZvbDEgOiBwLT52 b2wxX3N0cik7CisgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgp KSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7CisgICAgICAgIHByaW50ZigiICVjIFZvbHVtZSBtZWRp dW06ICAgICAgICAiLCBkaWFsdm9sMiA/ICcgJyA6ICcqJyApOworICAgICAgICBzaG9kcyhkaWFs dm9sMiA/IGRpYWx2b2wyIDogcC0+dm9sMl9zdHIpOworICAgICAgICBpZiAoKytuID4gY21kX3Jv d3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOworICAgICAgICBw cmludGYoIiAlYyBWb2x1bWUgaGlnaDogICAgICAgICAgIiwgZGlhbHZvbDMgPyAnICcgOiAnKicg KTsKKyAgICAgICAgc2hvZHMoZGlhbHZvbDMgPyBkaWFsdm9sMyA6IHAtPnZvbDNfc3RyKTsKKyAg ICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsg ZWxzZSBuID0gMDsKKworICAgICAgICBwcmludGYoIiAlYyBIYW5ndXAtY29tbWFuZDogICAgICAg IiwgZGlhbGhjbWQgPyAnICcgOiAnKicgKTsKKyAgICAgICAgc2hvZHMoZGlhbGhjbWQgPyBkaWFs aGNtZCA6IHAtPmh1cF9zdHIpOworICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAo IWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOworICAgICAgICBwcmludGYoIiAlYyBI YXJkd2FyZS1mbG93OiAgICAgICAgIiwgZGlhbGh3ZmMgPyAnICcgOiAnKicgKTsKKyAgICAgICAg c2hvZHMoZGlhbGh3ZmMgPyBkaWFsaHdmYyA6IHAtPmh3ZmNfc3RyKTsKKyAgICAgICAgaWYgKCsr biA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsK KyAgICAgICAgcHJpbnRmKCIgJWMgU29mdHdhcmUtZmxvdzogICAgICAgICIsIGRpYWxzd2ZjID8g JyAnIDogJyonICk7CisgICAgICAgIHNob2RzKGRpYWxzd2ZjID8gZGlhbHN3ZmMgOiBwLT5zd2Zj X3N0cik7CisgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSBy ZXR1cm4oMCk7IGVsc2UgbiA9IDA7CisgICAgICAgIHByaW50ZigiICVjIE5vLWZsb3ctY29udHJv bDogICAgICAiLCBkaWFsbm9mYyA/ICcgJyA6ICcqJyApOworICAgICAgICBzaG9kcyhkaWFsbm9m YyA/IGRpYWxub2ZjIDogcC0+bm9mY19zdHIpOworICAgICAgICBpZiAoKytuID4gY21kX3Jvd3Mg LSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOworICAgICAgICBwcmlu dGYoIiAlYyBQdWxzZTogICAgICAgICAgICAgICAgIiwgZGlhbHB1bHNlID8gJyAnIDogJyonKTsK KyAgICAgICAgc2hvZHMoZGlhbHB1bHNlID8gZGlhbHB1bHNlIDogcC0+cHVsc2UpOworICAgICAg ICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNl IG4gPSAwOworICAgICAgICBwcmludGYoIiAlYyBUb25lOiAgICAgICAgICAgICAgICAgIiwgZGlh bHRvbmUgPyAnICcgOiAnKicpOworICAgICAgICBzaG9kcyhkaWFsdG9uZSA/IGRpYWx0b25lIDog cC0+dG9uZSk7CisKKyAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3Jl KCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKKyAgICAgICAgcHJpbnRmKCIgJWMgSWdub3JlLWRp YWx0b25lOiAgICAgICIsIGRpYWx4MyA/ICcgJyA6ICcqJyk7CisgICAgICAgIHNob2RzKGRpYWx4 MyA/IGRpYWx4MyA6IHAtPmlnbm9yZWR0KTsKKworICAgICAgICBpZiAoKytuID4gY21kX3Jvd3Mg LSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOworICAgICAgICBwcmlu dGYoIiAlYyBQcmVkaWFsLWluaXQ6ICAgICAgICAgIiwgZGlhbGluaTIgPyAnICcgOiAnKicpOwor ICAgICAgICBzaG9kcyhkaWFsaW5pMiA/IGRpYWxpbmkyIDogcC0+aW5pMik7CisKKyAgICAgICAg aWYgKCsrbiA+IGNtZF9yb3dzIC0gNCkgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBu ID0gMDsKKyAgICAgICAgcHJpbnRmKCJcbiBGb3IgbW9yZSBpbmZvOiBTSE9XIERJQUwgYW5kIFNI T1cgQ09NTVVOSUNBVElPTlNcbiIpOworCisgICAgfSBlbHNlIGlmIChtZG0gPiAwKSB7CisgICAg ICAgIHByaW50ZigiTW9kZW0gaW5mbyBmb3IgXCIlc1wiIG5vdCBmaWxsZWQgaW4geWV0XG4iLCBn bWRtdHlwKCkpOworICAgIH0gZWxzZSBwcmludGYoCisiIE5vIG1vZGVtIHNlbGVjdGVkLCBzbyBE SUFMIGFuZCBtb3N0IFNFVCBNT0RFTSBjb21tYW5kcyBoYXZlIG5vIGVmZmVjdC5cblwKKyBVc2Ug U0VUIE1PREVNIFRZUEUgdG8gc2VsZWN0IGEgbW9kZW0uXG4iKTsKKyAgICByZXR1cm4oc3VjY2Vz cyA9IDEpOworfQorI2VuZGlmIC8qIE5PU0hPVyAqLworI2VuZGlmIC8qIE5PRElBTCAqLworCisj aWZkZWYgQ0tfVEFQSQoraW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogVEFQSSBhY3Rpb24gY29tbWFuZHMgKi8KK2RvdGFwaSgpIHsKKyAgICBpbnQgeCx5 OworICAgIGNoYXIgKnM7CisKKyAgICBpZiAoIVRBUElBdmFpbCkgeworICAgICAgICBwcmludGYo IlxuVEFQSSBpcyB1bmF2YWlsYWJsZSBvbiB0aGlzIHN5c3RlbS5cbiIpOworICAgICAgICByZXR1 cm4oLTkpOworICAgIH0KKyAgICBpZiAoKHkgPSBjbWtleSh0YXBpdGFiLG50YXBpdGFiLCJNUyBU QVBJIGNvbW1hbmQiLCIiLHh4c3RyaW5nKSkgPCAwKQorICAgICAgcmV0dXJuKHkpOworICAgIHN3 aXRjaCAoeSkgeworICAgICAgY2FzZSBYWVRBUElfQ0ZHOiB7ICAgICAgICAgICAgICAgICAgICAg ICAgLyogVEFQSSBDT05GSUdVUkUtTElORSAqLworICAgICAgICAgIGV4dGVybiBzdHJ1Y3Qga2V5 dGFiICogdGFwaWxpbmV0YWI7CisgICAgICAgICAgZXh0ZXJuIHN0cnVjdCBrZXl0YWIgKiBfdGFw aWxpbmV0YWI7CisgICAgICAgICAgZXh0ZXJuIGludCBudGFwaWxpbmU7CisgICAgICAgICAgZXh0 ZXJuIGludCBMaW5lRGV2aWNlSWQ7CisgICAgICAgICAgaW50IGxpbmVJRD1MaW5lRGV2aWNlSWQ7 CisgICAgICAgICAgaWYgKFRBUElBdmFpbCkKKyAgICAgICAgICAgIGNrdGFwaUJ1aWxkTGluZVRh YmxlKCZ0YXBpbGluZXRhYiwgJl90YXBpbGluZXRhYiwgJm50YXBpbGluZSk7CisgICAgICAgICAg aWYgKHRhcGlsaW5ldGFiICYmIF90YXBpbGluZXRhYiAmJiBudGFwaWxpbmUgPiAwKSB7CisgICAg ICAgICAgICAgIGludCBpPTAsIGogPSA5OTk5LCBrID0gLTE7CisKKyAgICAgICAgICAgICAgaWYg KCBMaW5lRGV2aWNlSWQgPT0gLTEgKSB7CisgICAgICAgICAgICAgICAgICAvKiBGaW5kIG91dCB3 aGF0IHRoZSBsb3dlc3QgbnVtYmVyZWQgVEFQSSBkZXZpY2UgaXMgKi8KKyAgICAgICAgICAgICAg ICAgIC8qIGFuZCB1c2UgaXQgYXMgdGhlIGRlZmF1bHQuICAgICAgICAgICAgICAgICAgICAgICAq LworICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG50YXBpbGluZTsgaSsrICkgewor ICAgICAgICAgICAgICAgICAgICAgIGlmICh0YXBpbGluZXRhYltpXS5rd3ZhbCA8IGopIHsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgayA9IGk7CisgICAgICAgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg ICAgICAgLyogRmluZCB0aGUgTGluZURldmljZUlkIGluIHRoZSB0YWJsZSBhbmQgdXNlIHRoYXQg ZW50cnkgKi8KKyAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBudGFwaWxpbmU7IGkr KyApIHsKKyAgICAgICAgICAgICAgICAgICAgICBpZiAodGFwaWxpbmV0YWJbaV0ua3d2YWwgPT0g TGluZURldmljZUlkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGsgPSBpOworICAgICAg ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgaWYgKGsgPj0g MCkKKyAgICAgICAgICAgICAgICBzID0gX3RhcGlsaW5ldGFiW2tdLmt3ZDsKKyAgICAgICAgICAg ICAgZWxzZQorICAgICAgICAgICAgICAgIHMgPSAiIjsKKworICAgICAgICAgICAgICBpZiAoKHkg PSBjbWtleShfdGFwaWxpbmV0YWIsbnRhcGlsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIlRBUEkgZGV2aWNlIG5hbWUiLHMseHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgICAg ICAgcmV0dXJuKHkpOworICAgICAgICAgICAgICBsaW5lSUQgPSB5OworICAgICAgICAgIH0KKyAg ICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKKyNpZmRlZiBJS1NECisg ICAgICAgICAgaWYgKGluc2VydmVyKSB7CisgICAgICAgICAgICAgIHByaW50ZigiU29ycnksIGNv bW1hbmQgZGlzYWJsZWRcclxuIik7CisgICAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7 CisgICAgICAgICAgfQorI2VuZGlmIC8qIElTS0QgKi8KKyAgICAgICAgICBja3RhcGlDb25maWd1 cmVMaW5lKGxpbmVJRCk7CisgICAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBjYXNlIFhZ VEFQSV9ESUFMOiAgICAgICAgICAgICAgICAgLyogVEFQSSBESUFMSU5HLVBST1BFUlRJRVMgKi8K KyAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKQorICAgICAgICAgIHJldHVybih4KTsKKyNp ZmRlZiBJS1NECisgICAgICAgIGlmIChpbnNlcnZlcikgeworICAgICAgICAgICAgcHJpbnRmKCJT b3JyeSwgY29tbWFuZCBkaXNhYmxlZFxyXG4iKTsKKyAgICAgICAgICAgIHJldHVybihzdWNjZXNz ID0gMCk7CisgICAgICAgIH0KKyNlbmRpZiAvKiBJU0tEICovCisgICAgICAgIGNrdGFwaURpYWxp bmdQcm9wKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4oc3VjY2VzcyA9IDEp OworfQorCitzdGF0aWMgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU0VUIFRB UEkgY29tbWFuZCBvcHRpb25zICovCitzZXR0YXBpKCkgeworICAgIGludCB4LCB5OworICAgIGNo YXIgKnM7CisKKyAgICBpZiAoIVRBUElBdmFpbCkgeworICAgICAgICBwcmludGYoIlxuVEFQSSBp cyB1bmF2YWlsYWJsZSBvbiB0aGlzIHN5c3RlbS5cbiIpOworICAgICAgICByZXR1cm4oLTkpOwor ICAgIH0KKyAgICBpZiAoKHkgPSBjbWtleShzZXR0YXBpdGFiLG5zZXR0YXBpdGFiLCJNUyBUQVBJ IG9wdGlvbiIsIiIseHhzdHJpbmcpKSA8IDApCisgICAgICByZXR1cm4oeSk7CisgICAgc3dpdGNo ICh5KSB7CisgICAgICBjYXNlIFhZVEFQSV9VU0U6CisgICAgICAgIHJldHVybiAoc3VjY2VzcyA9 IHNldG9uKCZ0YXBpdXNlY2ZnKSk7CisgICAgICBjYXNlIFhZVEFQSV9MR0hUOgorICAgICAgICBy ZXR1cm4gKHN1Y2Nlc3MgPSBzZXRvbigmdGFwaWxpZ2h0cykpOworICAgICAgY2FzZSBYWVRBUElf UFJFOgorICAgICAgICByZXR1cm4gKHN1Y2Nlc3MgPSBzZXRvbigmdGFwaXByZXRlcm0pKTsKKyAg ICAgIGNhc2UgWFlUQVBJX1BTVDoKKyAgICAgICAgcmV0dXJuIChzdWNjZXNzID0gc2V0b24oJnRh cGlwb3N0dGVybSkpOworICAgICAgY2FzZSBYWVRBUElfSU5BOgorICAgICAgICB5ID0gY21udW0o InNlY29uZHMgb2YgaW5hY3Rpdml0eSBiZWZvcmUgYXV0by1kaXNjb25uZWN0IiwKKyAgICAgICAg ICAgICAgICAgICIwIiwxMCwmeCx4eHN0cmluZyk7CisgICAgICAgIHJldHVybihzZXRudW0oJnRh cGlpbmFjdGl2aXR5LHgseSw2NTUzNSkpOworICAgICAgY2FzZSBYWVRBUElfQk5HOgorICAgICAg ICB5ID0gY21udW0oInNlY29uZHMgdG8gd2FpdCBmb3IgY3JlZGl0IGNhcmQgdG9uZSIsCisgICAg ICAgICAgICAgICAgICAiOCIsMTAsJngseHhzdHJpbmcpOworICAgICAgICByZXR1cm4oc2V0bnVt KCZ0YXBpYm9uZyx4LHksOTApKTsKKyAgICAgIGNhc2UgWFlUQVBJX01BTjoKKyAgICAgICAgcmV0 dXJuIChzdWNjZXNzID0gc2V0b24oJnRhcGltYW51YWwpKTsKKyAgICAgIGNhc2UgWFlUQVBJX0NP TjogICAgICAgICAgICAgICAgICAvKiBUQVBJIENPTlZFUlNJT05TICovCisgICAgICAgIHJldHVy biAoc3VjY2VzcyA9IHNldG9uYXV0KCZ0YXBpY29udikpOworICAgICAgY2FzZSBYWVRBUElfTElO OiAgICAgICAgICAgICAgICAgIC8qIFRBUEkgTElORSAqLworICAgICAgICB4ID0gc2V0bGluKFhZ VEFQSV9MSU4sMSwwKTsKKyAgICAgICAgaWYgKHggPiAtMSkgZGlkc2V0bGluKys7CisgICAgICAg IHJldHVybih4KTsKKyAgICAgIGNhc2UgWFlUQVBJX1BBU1M6IHsgICAgICAgICAgICAgICAvKiBU QVBJIFBBU1NUSFJPVUdIICovCisjaWZkZWYgTk9ESUFMCisgICAgICAgICAgcHJpbnRmKCJcbj9N b2RlbS1kaWFsaW5nIG5vdCBzdXBwb3J0ZWRcbiIpOworICAgICAgICAgIHJldHVybigtOSk7Cisj ZWxzZSAvKiBOT0RJQUwgKi8KKyAgICAgICAgICAvKiBQYXNzdGhyb3VnaCBiZWNhbWUgTW9kZW0t ZGlhbGluZyB3aGljaCBpcyBhbiBhbnRvbnltICovCisgICAgICAgICAgc3VjY2VzcyA9IHNldG9u KCZ0YXBpcGFzcyk7CisgICAgICAgICAgdGFwaXBhc3MgPSAhdGFwaXBhc3M7CisgICAgICAgICAg cmV0dXJuIChzdWNjZXNzKTsKKyNlbmRpZiAvKiBOT0RJQUwgKi8gICAgICAgIAorICAgICAgfQor ICAgICAgY2FzZSBYWVRBUElfTE9DOiB7ICAgICAgICAgICAgICAgIC8qIFRBUEkgTE9DQVRJT04g Ki8KKyAgICAgICAgICBleHRlcm4gY2hhciB0YXBpbG9jW107CisgICAgICAgICAgZXh0ZXJuIGlu dCB0YXBpbG9jaWQ7CisgICAgICAgICAgaW50IGkgPSAwLCBqID0gOTk5OSwgayA9IC0xOworCisg ICAgICAgICAgY2t0YXBpQnVpbGRMb2NhdGlvblRhYmxlKCZ0YXBpbG9jdGFiLCAmbnRhcGlsb2Mp OworICAgICAgICAgIGlmICghdGFwaWxvY3RhYiB8fCAhbnRhcGlsb2MpIHsKKyAgICAgICAgICAg ICAgcHJpbnRmKCJcbk5vIFRBUEkgTG9jYXRpb25zIGFyZSBjb25maWd1cmVkIGZvciB0aGlzIHN5 c3RlbVxuIik7CisgICAgICAgICAgICAgIHJldHVybigtOSk7CisgICAgICAgICAgfQorICAgICAg ICAgIGlmICh0YXBpbG9jaWQgPT0gLTEpCisgICAgICAgICAgICB0YXBpbG9jaWQgPSBja3RhcGlH ZXRDdXJyZW50TG9jYXRpb25JRCgpOworCisgICAgICAgICAgLyogRmluZCB0aGUgY3VycmVudCB0 YXBpbG9jIGVudHJ5ICovCisgICAgICAgICAgLyogYW5kIHVzZSBpdCBhcyB0aGUgZGVmYXVsdC4g Ki8KKyAgICAgICAgICBmb3IgKGsgPSAwOyBrIDwgbnRhcGlsb2M7IGsrKykgeworICAgICAgICAg ICAgICBpZiAodGFwaWxvY3RhYltrXS5rd3ZhbCA9PSB0YXBpbG9jaWQpCisgICAgICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgICAgIGlmIChrID49IDAgJiYgayA8IG50YXBp bG9jKQorICAgICAgICAgICAgcyA9IHRhcGlsb2N0YWJba10ua3dkOworICAgICAgICAgIGVsc2UK KyAgICAgICAgICAgIHMgPSAiIjsKKworICAgICAgICAgIGlmICgoeSA9IGNta2V5KHRhcGlsb2N0 YWIsbnRhcGlsb2MsICJUQVBJIGxvY2F0aW9uIixzLHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAg ICAgcmV0dXJuKHkpOworCisgICAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKQorICAgICAg ICAgICAgcmV0dXJuKHgpOworI2lmZGVmIElLU0QKKyAgICAgICAgICBpZiAoaW5zZXJ2ZXIpIHsK KyAgICAgICAgICAgICAgcHJpbnRmKCJTb3JyeSwgY29tbWFuZCBkaXNhYmxlZFxyXG4iKTsKKyAg ICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKyAgICAgICAgICB9CisjZW5kaWYgLyog SUtTRCAqLworICAgICAgICAgIGNrdGFwaUZldGNoTG9jYXRpb25JbmZvQnlJRCggeSApOworI2lm bmRlZiBOT0RJQUwKKyAgICAgICAgICBDb3B5VGFwaUxvY2F0aW9uSW5mb1RvS2VybWl0RGlhbENt ZCgpOworI2VuZGlmIC8qIE5PRElBTCAqLworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAg IH0KKyAgICByZXR1cm4oc3VjY2Vzcz0xKTsKK30KKyNlbmRpZiAvKiBDS19UQVBJICovCisjZW5k aWYgLyogTk9MT0NBTCAqLworCisjaWZuZGVmIE5PU1BMCisvKiBNZXRob2QgZm9yIGV2YWx1YXRp bmcgXCV4IGFuZCBcJnhbXSB2YXJpYWJsZXMgKi8KKworc3RhdGljIHN0cnVjdCBrZXl0YWIgdmFy ZXZhbHRhYltdID0geworICAgIHsgInJlY3Vyc2l2ZSIsIDEsIDAgfSwKKyAgICB7ICJzaW1wbGUi LCAgICAwLCAwIH0KK307CitzdGF0aWMgaW50IG52YXJldmFsdGFiID0gKHNpemVvZih2YXJldmFs dGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7CisKK2ludAorc2V0dmFyZXZhbCgpIHsKKyAg ICBpbnQgeCA9IDAsIHkgPSAwOworICAgIGV4dGVybiBpbnQgdmFyZXZhbDsKKyNpZmRlZiBEQ01E QlVGCisgICAgZXh0ZXJuIGludCAqIHh2YXJldjsKKyNlbHNlCisgICAgZXh0ZXJuIGludCB4dmFy ZXZbXTsKKyNlbmRpZiAvKiBEQ01EQlVGICovCisKKyAgICBpZiAoKHggPSBjbWtleSh2YXJldmFs dGFiLAorCQkgICBudmFyZXZhbHRhYiwgCisJCSAgICJNZXRob2QgZm9yIGV2YWx1YXRpbmcgXFwl eCBhbmQgXFwmeFtdIHZhcmlhYmxlcyIsCisJCSAgICIiLAorCQkgICB4eHN0cmluZykpIDwgMCkK KyAgICAgIHJldHVybih4KTsKKyAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApCisgICAgICByZXR1 cm4oeSk7CisgICAgeHZhcmV2W2NtZGx2bF0gPSB4OworICAgIHZhcmV2YWwgPSB4OworICAgIHJl dHVybihzdWNjZXNzID0gMSk7Cit9CisKKyNpZmRlZiBDS19BTlNJQyAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBTRVQgQUxBUk0gKi8KK2ludAorc2V0YWxhcm0obG9uZyB4eCkKKyNlbHNlCitp bnQKK3NldGFsYXJtKHh4KSBsb25nIHh4OworI2VuZGlmIC8qIENLX0FOU0lDICovCisvKiBzZXRh bGFybSAqLyB7CisjaWZkZWYgQ09NTUVOVAorICAgIGludCB5eXl5LCBtbSwgZGQsIHg7CisgICAg Y2hhciAqczsKKyAgICBsb25nIHp6OworICAgIGNoYXIgYnVmWzZdOworI2VuZGlmIC8qIENPTU1F TlQgKi8KKyAgICBsb25nIHNlYywgamQ7CisgICAgY2hhciB4YnVmWzIwXSwgKiBwOworCisgICAg ZGVidWcoRjEwMSwic2V0YWxhcm0geHgiLCIiLHh4KTsKKyAgICBja19hbGFybSA9IDBMOyAgICAg ICAgICAgICAgICAgICAgICAvKiAwID0gbm8gYWxhcm0gKGluIGNhc2Ugb2YgZXJyb3IpICovCisg ICAgaWYgKHh4IDwgMEwpIHsKKyAgICAgICAgcHJpbnRmKCIlbGQgLSBpbGxlZ2FsIHZhbHVlLCBt dXN0IGJlIDAgb3IgcG9zaXRpdmVcbiIsIHh4KTsKKyAgICAgICAgcmV0dXJuKC05KTsKKyAgICB9 CisgICAgaWYgKHh4ID09IDBMKSB7ICAgICAgICAgICAgICAgICAgICAgLyogQ0xFQVIgQUxBUk0g Ki8KKyAgICAgICAgYWxybV9kYXRlWzBdID0gTlVMOworICAgICAgICBhbHJtX3RpbWVbMF0gPSBO VUw7CisgICAgICAgIHJldHVybigxKTsKKyAgICB9CisjaWZkZWYgQ09NTUVOVAorICAgIHggPSA4 OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEdldCBjdXJyZW50IGRhdGUgKi8KKyAg ICBzID0gYWxybV9kYXRlOworICAgIGlmICh6enN0cmluZygiXFx2KG5kYXRlKSIsJnMsJngpIDwg MCkgeworICAgICAgICBwcmludGYoIkludGVybmFsIGRhdGUgZXJyb3IsIHNvcnJ5LlxuIik7Cisg ICAgICAgIGFscm1fZGF0ZVswXSA9IFNQOworICAgICAgICByZXR1cm4oLTkpOworICAgIH0KKyAg ICB4ID0gNTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBHZXQgY3VycmVudCB0aW1l ICovCisgICAgcyA9IGFscm1fdGltZTsKKyAgICBpZiAoenpzdHJpbmcoIlxcdihudGltZSkiLCZz LCZ4KSA8IDApIHsKKyAgICAgICAgcHJpbnRmKCJJbnRlcm5hbCB0aW1lIGVycm9yLCBzb3JyeS5c biIpOworICAgICAgICBhbHJtX3RpbWVbMF0gPSBTUDsKKyAgICAgICAgcmV0dXJuKC05KTsKKyAg ICB9CisgICAgc3ByaW50ZihidWYsIiUwNWxkIixhdG9sKGFscm1fdGltZSkpOyAvKiBTQUZFICgy MCkgKi8KKyAgICBja3N0cm5jcHkoYWxybV90aW1lLGJ1Ziw4KTsKKyAgICBkZWJ1ZyhGMTEwLCJT RVQgQUxBUk0gZGF0ZSAoMSkiLGFscm1fZGF0ZSwwKTsKKyAgICBkZWJ1ZyhGMTEwLCJTRVQgQUxB Uk0gdGltZSAoMSkiLGFscm1fdGltZSwwKTsKKworICAgIGlmICgoenogPSBhdG9sKGFscm1fdGlt ZSkgKyB4eCkgPCAwTCkgeworICAgICAgICBwcmludGYoIkludGVybmFsIHRpbWUgY29udmVyc2lv biBlcnJvciwgc29ycnkuXG4iKTsKKyAgICAgICAgcmV0dXJuKC05KTsKKyAgICB9CisgICAgaWYg KHp6ID49IDg2NDAwTCkgeyAgICAgICAgICAgICAgICAgLyogQWxhcm0gY3Jvc3NlcyBtaWRuaWdo dCAqLworICAgICAgICBjaGFyIGRbMTBdOyAgICAgICAgICAgICAgICAgICAgIC8qIExvY2FsIGRh dGUgYnVmZmVyICovCisgICAgICAgIGludCBsYXN0ZGF5OyAgICAgICAgICAgICAgICAgICAgLyog TGFzdCBkYXkgb2YgdGhpcyBtb250aCAqLworCisgICAgICAgIGNrc3RybmNweShkLGFscm1fZGF0 ZSw4KTsgICAgICAgLyogV2UnbGwgaGF2ZSB0byBjaGFuZ2UgdGhlIGRhdGUgKi8KKworICAgICAg ICB4ID0gKHp6IC8gODY0MDBMKTsgICAgICAgICAgICAgIC8qIEhvdyBtYW55IGRheXMgYWZ0ZXIg dG9kYXkgKi8KKworICAgICAgICBkZCA9IGF0b2koKGNoYXIgKikoZCs2KSk7ICAgICAgIC8qIFBh cnNlIHl5eXltbWRkICovCisgICAgICAgIGRbNl0gPSBOVUw7ICAgICAgICAgICAgICAgICAgICAg LyogaW50byB5eXl5LCBtbSwgZGQgLi4uICovCisgICAgICAgIG1tID0gYXRvaSgoY2hhciAqKShk KzQpKTsKKyAgICAgICAgZFs0XSA9IE5VTDsKKyAgICAgICAgeXl5eSA9IGF0b2koKGNoYXIgKilk KTsKKworICAgICAgICAvKiBIb3cgbWFueSBkYXlzIGluIHRoaXMgbW9udGggKi8KKworICAgICAg ICBsYXN0ZGF5ID0gbWRheXNbbW1dOworICAgICAgICBpZiAobW0gPT0gMiAmJiB5eXl5ICUgNCA9 PSAwKSAgIC8qIFdvcmtzIHRocnUgMjA5OSBBRC4uLiAqLworICAgICAgICAgIGxhc3RkYXkrKzsK KworICAgICAgICBpZiAoZGQgKyB4ID4gbGFzdGRheSkgeyAgICAgICAgIC8qIER1bWIgbG9vcCAq LworICAgICAgICAgICAgaW50IHk7CisKKyAgICAgICAgICAgIHggLT0gKG1kYXlzW21tXSAtIGRk KTsgICAgICAvKiBEZWR1Y3QgcmVzdCBvZiB0aGlzIG1vbnRoJ3MgZGF5cyAqLworCisgICAgICAg ICAgICAvKiBUaGVyZSdzIGEgbW9yZSBlbGVnYW50IHdheSB0byBkbyB0aGlzLi4uICovCisKKyAg ICAgICAgICAgIHdoaWxlICgxKSB7CisgICAgICAgICAgICAgICAgbW0rKzsgICAgICAgICAgICAg ICAgICAgLyogTmV4dCBtb250aCAqLworICAgICAgICAgICAgICAgIGlmIChtbSA+IDEyKSB7ICAg ICAgICAgIC8qIFdyYXAgYXJvdW5kICovCisgICAgICAgICAgICAgICAgICAgIG1tID0gMTsgICAg ICAgICAgICAgLyogSmFuLCBuZXh0IHllYXIgKi8KKyAgICAgICAgICAgICAgICAgICAgeXl5eSsr OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB5ID0gbWRheXNbbW1dOyAgICAg ICAgICAvKiBEYXlzIGluIG5ldyBtb250aCAqLworICAgICAgICAgICAgICAgIGlmIChtbSA9PSAy ICYmIHl5eXkgJSA0ID09IDApIC8qIEZlYiBpbiBsZWFwIHllYXIgKi8KKyAgICAgICAgICAgICAg ICAgIHkrKzsgICAgICAgICAgICAgICAgICAvKiBXb3JrcyB1bnRpbCAyMTAwIEFEICovCisgICAg ICAgICAgICAgICAgaWYgKHggLSB5IDwgMSkKKyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg ICAgICAgICAgICAgIHggLT0geTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRkID0geDsg ICAgICAgICAgICAgICAgICAgICAvKiBEYXkgb2YgYWxhcm0gbW9udGggKi8KKyAgICAgICAgfSBl bHNlIGRkICs9IHg7CisKKyAgICAgICAgc3ByaW50ZihhbHJtX2RhdGUsIiUwNGQlMDJkJTAyZCIs eXl5eSxtbSxkZCk7IC8qIFNBRkUgKDI0KSAqLworICAgICAgICB6eiA9IHp6ICUgODY0MDBMOwor ICAgIH0KKyAgICBzcHJpbnRmKGFscm1fdGltZSwiJWxkIix6eik7ICAgICAgICAvKiBTQUZFICgy NCkgKi8KKyAgICBkZWJ1ZyhGMTEwLCJTRVQgQUxBUk0gZGF0ZSAoMikiLGFscm1fZGF0ZSwwKTsK KyAgICBkZWJ1ZyhGMTEwLCJTRVQgQUxBUk0gdGltZSAoMikiLGFscm1fdGltZSwwKTsKKyAgICBj a19hbGFybSA9IHh4OworI2Vsc2UKKyAgICAvKiBKdWwgMTk5OCAqLworICAgIGNrc3RybmNweSh4 YnVmLGNrY3Z0ZGF0ZSgiIiwxKSwyMCk7IC8qIEdldCBjdXJyZW50IGRhdGUgYW5kIHRpbWUgKi8K KyAgICBwID0geGJ1ZjsKKyAgICBja3N0cm5jcHkoYWxybV9kYXRlLHhidWYsMTApOworICAgIGFs cm1fZGF0ZVs4XSA9IE5VTDsKKyAgICBzZWMgPSBhdG9sKHArOSkgKiAzNjAwTCArIGF0b2wocCsx MikgKiA2MEwgKyBhdG9sKHArMTUpOworICAgIGRlYnVnKEYxMTAsIlNFVCBBTEFSTSBkYXRlICgx KSIsYWxybV9kYXRlLDApOworICAgIGRlYnVnKEYxMDEsIlNFVCBBTEFSTSB0aW1lICgxKSIsIiIs c2VjKTsKKyAgICBpZiAoKHNlYyArPSB4eCkgPCAwTCkgeworICAgICAgICBwcmludGYoIkludGVy bmFsIHRpbWUgY29udmVyc2lvbiBlcnJvciwgc29ycnkuXG4iKTsKKyAgICAgICAgcmV0dXJuKC05 KTsKKyAgICB9CisgICAgaWYgKHNlYyA+PSA4NjQwMEwpIHsgICAgICAgICAgICAgICAgLyogQWxh cm0gY3Jvc3NlcyBtaWRuaWdodCAqLworICAgICAgICBsb25nIGRheXM7CisgICAgICAgIGRheXMg PSBzZWMgLyA4NjQwMEw7CisgICAgICAgIGpkID0gbWpkKHApICsgZGF5czsgICAgICAgICAgICAg LyogR2V0IG1vZGlmaWVkIEp1bGlhbiBkYXRlICovCisgICAgICAgIGNrc3RybmNweShhbHJtX2Rh dGUsbWpkMmRhdGUoamQpLDEwKTsKKyAgICAgICAgc2VjICU9IDg2NDAwTDsKKyAgICB9CisgICAg c3ByaW50ZihhbHJtX3RpbWUsIiUwNWxkIixzZWMpOyAgICAgLyogU0FGRSAoMjQpICovCisgICAg ZGVidWcoRjExMCwiU0VUIEFMQVJNIGRhdGUgKDIpIixhbHJtX2RhdGUsMCk7CisgICAgZGVidWco RjExMCwiU0VUIEFMQVJNIHRpbWUgKDIpIixhbHJtX3RpbWUsMCk7CisgICAgY2tfYWxhcm0gPSAx OyAgICAgICAgICAgICAgICAgICAgICAgLyogQWxhcm0gaXMgc2V0ICovCisKKyNlbmRpZiAvKiBD T01NRU5UICovCisgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKK30KKyNlbmRpZiAvKiBOT1NQTCAq LworCisjaWZuZGVmIE5PU0VUS0VZCitpbnQKK2Rvc2V0a2V5KCkgeyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBTRVQgS0VZICovCisgICAgaW50IHgsIHk7CisgICAgaW50IGZsYWcgPSAw OworICAgIGludCBrYzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEtleSBjb2RlICov CisgICAgY2hhciAqczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogS2V5IGJpbmRpbmcg Ki8KKyNpZm5kZWYgTk9LVkVSQlMKKyAgICBjaGFyICpwOyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBXb3JrZXIgKi8KKyNlbmRpZiAvKiBOT0tWRVJCUyAqLworI2lmZGVmIE9TMgorICAg IGV4dGVybiBpbnQgb3MyZ2tzOworICAgIGV4dGVybiBpbnQgbXNra2V5czsKKyAgICBleHRlcm4g aW50IGluaXR2aWs7CisjZW5kaWYgLyogT1MyICovCisKKyAgICB4X2lmbnVtID0gMTsKKyAgICB5 ID0gY21udW0oIm51bWVyaWMga2V5IGNvZGUsIG9yIHRoZSB3b3JkIENMRUFSLCIsIiIsMTAsJmtj LHh4c3RyaW5nKTsKKyAgICB4X2lmbnVtID0gMDsKKyAgICBpZiAoeSA8IDApIHsKKyAgICAgICAg ZGVidWcoRjExMSwiU0VUIEtFWSIsYXRtYnVmLHkpOworICAgICAgICBpZiAoeSA9PSAtMikgeyAg ICAgICAgICAgICAgICAgIC8qIE5vdCBhIHZhbGlkIG51bWJlciAqLworICAgICAgICAgICAgaWYg KCh5ID0gc3RybGVuKGF0bWJ1ZikpIDwgMCkgLyogQ2hlY2sgZm9yIFNFVCBLRVkgQ0xFQVIgKi8K KyAgICAgICAgICAgICAgcmV0dXJuKC0yKTsKKyAgICAgICAgICAgIGlmIChja3N0cmNtcChhdG1i dWYsImNsZWFyIix5LDApKQorICAgICAgICAgICAgICByZXR1cm4oLTIpOworICAgICAgICAgICAg aWYgKCh4ID0gY21jZm0oKSkgPCAwKQorICAgICAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAg ICAgICBmb3IgKHkgPSAwOyB5IDwgS01TSVpFOyB5KyspIHsKKyAgICAgICAgICAgICAgICBrZXlt YXBbeV0gPSAoS0VZKSB5OworICAgICAgICAgICAgICAgIG1hY3JvdGFiW3ldID0gTlVMTDsKKyAg ICAgICAgICAgIH0KKyNpZmRlZiBPUzIKKyAgICAgICAgICAgIGtleW1hcGluaXQoKTsgICAgICAg ICAgICAgICAvKiBTcGVjaWFsIE9TLzIgaW5pdGlhbGl6YXRpb25zICovCisgICAgICAgICAgICBp bml0dmlrID0gMTsgICAgICAgICAgICAgICAgLyogVXBkYXRlIHRoZSBWSUsgdGFibGUgKi8KKyNl bmRpZiAvKiBPUzIgKi8KKyAgICAgICAgICAgIHJldHVybigxKTsKKyAgICAgICAgfSBlbHNlIGlm ICh5ID09IC0zKSB7ICAgICAgICAgICAvKiBTRVQgS0VZIDxSZXR1cm4+ICovCisgICAgICAgICAg ICBwcmludGYoIiBQcmVzcyBrZXkgdG8gYmUgZGVmaW5lZDogIik7IC8qIFByb21wdCBmb3IgYSBr ZXlzdHJva2UgKi8KKyNpZmRlZiBVTklYCisjaWZkZWYgTk9TRVRCVUYKKyAgICAgICAgICAgIGZm bHVzaChzdGRvdXQpOworI2VuZGlmIC8qIE5PU0VUQlVGICovCisjZW5kaWYgLyogVU5JWCAqLwor ICAgICAgICAgICAgY29uYmluKChjaGFyKWVzY2FwZSk7ICAgICAgIC8qIFB1dCB0ZXJtaW5hbCBp biBiaW5hcnkgbW9kZSAqLworI2lmZGVmIE9TMgorICAgICAgICAgICAgb3MyZ2tzID0gMDsgICAg ICAgICAgICAgICAgIC8qIFR1cm4gb2ZmIEt2ZXJiIHByZXByb2Nlc3NpbmcgKi8KKyNlbmRpZiAv KiBPUzIgKi8KKyAgICAgICAgICAgIGtjID0gY29uZ2tzKDApOyAgICAgICAgICAgICAvKiBHZXQg Y2hhcmFjdGVyIG9yIHNjYW4gY29kZSAqLworI2lmZGVmIE9TMgorICAgICAgICAgICAgb3MyZ2tz ID0gMTsgICAgICAgICAgICAgICAgIC8qIFR1cm4gb24gS3ZlcmIgcHJlcHJvY2Vzc2luZyAqLwor I2VuZGlmIC8qIE9TMiAqLworICAgICAgICAgICAgY29uY2IoKGNoYXIpZXNjYXBlKTsgICAgICAg IC8qIFJlc3RvcmUgdGVybWluYWwgdG8gY2JyZWFrIG1vZGUgKi8KKyAgICAgICAgICAgIGlmIChr YyA8IDApIHsgICAgICAgICAgICAgICAvKiBDaGVjayBmb3IgZXJyb3IgKi8KKyAgICAgICAgICAg ICAgICBwcmludGYoIj9FcnJvciByZWFkaW5nIGtleVxuIik7CisgICAgICAgICAgICAgICAgcmV0 dXJuKDApOworICAgICAgICAgICAgfQorI2lmZGVmIE9TMgorICAgICAgICAgICAgc2hva2V5Y29k ZShrYywtMSk7ICAgICAgICAgIC8qIFNob3cgY3VycmVudCBkZWZpbml0aW9uICovCisjZWxzZQor ICAgICAgICAgICAgc2hva2V5Y29kZShrYyk7ICAgICAgICAgICAgIC8qIFNob3cgY3VycmVudCBk ZWZpbml0aW9uICovCisjZW5kaWYgLyogT1MyICovCisgICAgICAgICAgICBmbGFnID0gMTsgICAg ICAgICAgICAgICAgICAgLyogUmVtZW1iZXIgaXQncyBhIG11bHRpbGluZSBjb21tYW5kICovCisg ICAgICAgIH0gZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRXJyb3IgKi8KKyAgICAg ICAgICByZXR1cm4oeSk7CisgICAgfQorCisgICAgLyogTm9ybWFsIFNFVCBLRVkgPHNjYW5jb2Rl PiA8dmFsdWU+IGNvbW1hbmQuLi4gKi8KKworI2lmZGVmIE9TMgorICAgIGlmIChtc2trZXlzKQor ICAgICAga2MgPSBtc2t0b2NrKGtjKTsKKyNlbmRpZiAvKiBPUzIgKi8KKworICAgIGlmIChrYyA8 IDAgfHwga2MgPj0gS01TSVpFKSB7CisgICAgICAgIHByaW50ZigiP2tleSBjb2RlIG11c3QgYmUg YmV0d2VlbiAwIGFuZCAlZFxuIiwgS01TSVpFIC0gMSk7CisgICAgICAgIHJldHVybigtOSk7Cisg ICAgfQorICAgIGlmIChrYyA9PSBlc2NhcGUpIHsKKyAgICAgICAgcHJpbnRmKCJTb3JyeSwgJWQg aXMgdGhlIENPTk5FQ1QtbW9kZSBlc2NhcGUgY2hhcmFjdGVyXG4iLGtjKTsKKyAgICAgICAgcmV0 dXJuKC05KTsKKyAgICB9CisjaWZkZWYgT1MyCisgICAgd2lkZXJlc3VsdCA9IC0xOworI2VuZGlm IC8qIE9TMiAqLworICAgIGlmIChmbGFnKSB7CisgICAgICAgIGNtc2F2cChwc2F2ZSxQUk9NUFRM KTsKKyAgICAgICAgY21zZXRwKCIgRW50ZXIgbmV3IGRlZmluaXRpb246ICIpOworICAgICAgICBj bWluaShja3hlY2gpOworICAgICAgICBjbWZsZ3MgPSAwOworICAgICAgICBwcm9tcHQoTlVMTCk7 CisgICAgfQorICBkZWZfYWdhaW46CisgICAgaWYgKGZsYWcpCisgICAgICBjbXJlcygpOworICAg IGlmICgoeSA9IGNtdHh0KCJrZXkgZGVmaW5pdGlvbixcblwKK29yIEN0cmwtQyB0byBjYW5jZWwg dGhpcyBjb21tYW5kLFxuXAorb3IgRW50ZXIgdG8gcmVzdG9yZSBkZWZhdWx0IGRlZmluaXRpb24i LAorICAgICAgICAgICAgICAgICAgICIiLCZzLE5VTEwpKSA8IDApIHsKKyAgICAgICAgaWYgKGZs YWcpICAgICAgICAgICAgICAgICAgICAgICAvKiBIYW5kbGUgcGFyc2UgZXJyb3JzICovCisgICAg ICAgICAgZ290byBkZWZfYWdhaW47CisgICAgICAgIGVsc2UKKyAgICAgICAgICByZXR1cm4oeSk7 CisgICAgfQorICAgIHMgPSBicnN0cmlwKHMpOworI2lmbmRlZiBOT0tWRVJCUworICAgIHAgPSBz OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNhdmUgdGhpcyBwbGFjZSAqLworI2Vu ZGlmIC8qIE5PS1ZFUkJTICovCisvKgorICBJZiB0aGUgZGVmaW5pdGlvbiBpbmNsdWRlZCBhbnkg XEt2ZXJicywgcXVvdGUgdGhlIGJhY2tzbGFzaCBzbyB0aGUgXEt2ZXJiCisgIHdpbGwgc3RpbGwg YmUgaW4gdGhlIGRlZmluaXRpb24gd2hlbiB0aGUga2V5IGlzIHByZXNzZWQuICBXZSBkb24ndCBk byB0aGlzCisgIGluIHp6c3RyaW5nKCksIGJlY2F1c2UgXEt2ZXJicyBhcmUgdmFsaWQgb25seSBp biB0aGlzIGNvbnRleHQgYW5kIG5vd2hlcmUKKyAgZWxzZS4KKworICBXZSB1c2UgdGhpcyBjb2Rl IGFjdGl2ZSBmb3IgYWxsIHZlcnNpb25zIHRoYXQgc3VwcG9ydCBTRVQgS0VZLCBldmVuIGlmIHRo ZXkKKyAgZG9uJ3Qgc3VwcG9ydCBcS3ZlcmJzLCBiZWNhdXNlIG90aGVyd2lzZSBcSyB3b3VsZCBi ZWhhdmUgZGlmZmVyZW50bHkgZm9yCisgIGRpZmZlcmVudCB2ZXJzaW9ucy4KKyovCisgICAgZm9y ICh4ID0gMCwgeSA9IDA7IHNbeF07IHgrKywgeSsrKSB7IC8qIENvbnZlcnQgXEsgdG8gXFxLICov CisgICAgICAgIGlmICgoeCA+IDApICYmCisgICAgICAgICAgICAoc1t4XSA9PSAnSycgfHwgc1t4 XSA9PSAnaycpCisgICAgICAgICAgICApIHsgICAgICAgICAgICAgICAgICAgICAgICAgLyogSGF2 ZSBLICovCisKKyAgICAgICAgICAgIGlmICgoeCA9PSAxICYmIHNbeC0xXSA9PSBDTURRKSB8fAor ICAgICAgICAgICAgICAgICh4ID4gMSAmJiBzW3gtMV0gPT0gQ01EUSAmJiBzW3gtMl0gIT0gQ01E USkpIHsKKyAgICAgICAgICAgICAgICBsaW5lW3krK10gPSBDTURROyAgICAgICAvKiBNYWtlIGl0 IFxcSyAqLworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHggPiAxICYmIHNbeC0xXSA9 PSAneycgJiYgc1t4LTJdID09IENNRFEpIHsKKyAgICAgICAgICAgICAgICBsaW5lW3ktMV0gPSBD TURROyAgICAgICAvKiBIYXZlIFx7SyAqLworICAgICAgICAgICAgICAgIGxpbmVbeSsrXSA9ICd7 JzsgICAgICAgIC8qIE1ha2UgaXQgXFx7SyAqLworICAgICAgICAgICAgfQorICAgICAgICB9Cisg ICAgICAgIGxpbmVbeV0gPSBzW3hdOworICAgIH0KKyAgICBsaW5lW3krK10gPSBOVUw7ICAgICAg ICAgICAgICAgICAgICAvKiBUZXJtaW5hdGUgKi8KKyAgICBzID0gbGluZSArIHkgKyAxOyAgICAg ICAgICAgICAgICAgICAvKiBQb2ludCB0byBhZnRlciBpdCAqLworICAgIHggPSBMSU5CVUZTSVog LSAoaW50KSBzdHJsZW4obGluZSkgLSAxOyAvKiBDYWxjdWxhdGUgcmVtYWluaW5nIHNwYWNlICov CisgICAgaWYgKCh4IDwgKExJTkJVRlNJWiAvIDIpKSB8fAorICAgICAgICAoenpzdHJpbmcobGlu ZSwgJnMsICZ4KSA8IDApKSB7IC8qIEV4cGFuZCB2YXJpYWJsZXMsIGV0Yy4gKi8KKyAgICAgICAg cHJpbnRmKCI/S2V5IGRlZmluaXRpb24gdG9vIGxvbmdcbiIpOworICAgICAgICBpZiAoZmxhZykg Y21zZXRwKHBzYXZlKTsKKyAgICAgICAgcmV0dXJuKC05KTsKKyAgICB9CisgICAgcyA9IGxpbmUg KyB5ICsgMTsgICAgICAgICAgICAgICAgICAgLyogUG9pbnQgdG8gcmVzdWx0LiAqLworCisjaWZu ZGVmIE5PS1ZFUkJTCisvKgorICBTcGVjaWFsIGNhc2U6IHNlZSBpZiB0aGUgZGVmaW5pdGlvbiBz dGFydHMgd2l0aCBhIFxLdmVyYi4KKyAgSWYgaXQgZG9lcywgcG9pbnQgdG8gaXQgd2l0aCBwLCBv dGhlcndpc2Ugc2V0IHAgdG8gTlVMTC4KKyovCisgICAgcCA9IHM7CisgICAgaWYgKCpwKysgPT0g Q01EUSkgeworICAgICAgICBpZiAoKnAgPT0gJ3snKSBwKys7CisgICAgICAgIHAgPSAoKnAgPT0g J2snIHx8ICpwID09ICdLJykgPyBwICsgMSA6IE5VTEw7CisgICAgfQorI2VuZGlmIC8qIE5PS1ZF UkJTICovCisKKyAgICBpZiAobWFjcm90YWJba2NdKSB7ICAgICAgICAgICAgICAgICAvKiBQb3Nz aWJseSBmcmVlIG9sZCBtYWNybyBmcm9tIGtleS4gKi8KKyAgICAgICAgZnJlZSgoY2hhciAqKW1h Y3JvdGFiW2tjXSk7CisgICAgICAgIG1hY3JvdGFiW2tjXSA9IE5VTEw7CisgICAgfQorICAgIHN3 aXRjaCAoc3RybGVuKHMpKSB7ICAgICAgICAgICAgICAgIC8qIEFjdGlvbiBkZXBlbmRzIG9uIGxl bmd0aCAqLworICAgICAgY2FzZSAwOiAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlc2V0 IHRvIGRlZmF1bHQgYmluZGluZyAqLworICAgICAgICBrZXltYXBba2NdID0gKEtFWSkga2M7Cisg ICAgICAgIGJyZWFrOworICAgICAgY2FzZSAxOiAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IFNpbmdsZSBjaGFyYWN0ZXIgKi8KKyAgICAgICAga2V5bWFwW2tjXSA9IChDSEFSKSAqczsKKyAg ICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgLyog Q2hhcmFjdGVyIHN0cmluZyAqLworI2lmbmRlZiBOT0tWRVJCUworICAgICAgICBpZiAocCkgewor ICAgICAgICAgICAgeSA9IHhsb29rdXAoa3ZlcmJzLHAsbmt2ZXJicywmeCk7IC8qIExvb2sgaXQg dXAgKi8KKyAgICAgICAgICAgIGRlYnVnKEYxMDEsInNldCBrZXkga3ZlcmIgbG9va3VwIiwwLHkp OyAvKiBleGFjdCBtYXRjaCByZXF1aXJlZCAqLworICAgICAgICAgICAgaWYgKHkgPiAtMSkgewor ICAgICAgICAgICAgICAgIGtleW1hcFtrY10gPSBGX0tWRVJCIHwgeTsKKyAgICAgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorI2VuZGlmIC8qIE5PS1ZFUkJTICov CisgICAgICAgIGtleW1hcFtrY10gPSAoS0VZKSBrYzsKKyAgICAgICAgbWFjcm90YWJba2NdID0g KE1BQ1JPKSBtYWxsb2Moc3RybGVuKHMpKzEpOworICAgICAgICBpZiAobWFjcm90YWJba2NdKQor ICAgICAgICAgIHN0cmNweSgoY2hhciAqKSBtYWNyb3RhYltrY10sIHMpOyAvKiBzYWZlICovCisg ICAgICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAoZmxhZykgY21zZXRwKHBzYXZlKTsKKyNpZmRl ZiBPUzIKKyAgICBpbml0dmlrID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBVcGRhdGUg VklLIHRhYmxlICovCisjZW5kaWYgLyogT1MyICovCisgICAgcmV0dXJuKDEpOworfQorI2VuZGlm IC8qIE5PU0VUS0VZICovCisKKyNpZmRlZiBTVE9QQklUUworc3RydWN0IGtleXRhYiBzdG9wdGJs W10gPSB7CisgICAgeyAiMSIsIDEsIDAgfSwKKyAgICB7ICIyIiwgMiwgMCB9Cit9OworI2VuZGlm IC8qIFNUT1BCSVRTICovCisKK3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIHNlcnRibFtdID0geworICAg IHsgIjdFMSIsIDAsIDAgfSwKKyAgICB7ICI3RTIiLCAxLCAwIH0sCisgICAgeyAiN00xIiwgMiwg MCB9LAorICAgIHsgIjdNMiIsIDMsIDAgfSwKKyAgICB7ICI3TzEiLCA0LCAwIH0sCisgICAgeyAi N08yIiwgNSwgMCB9LAorICAgIHsgIjdTMSIsIDYsIDAgfSwKKyAgICB7ICI3UzIiLCA3LCAwIH0s CisjaWZkZWYgSFdQQVJJVFkKKyAgICB7ICI4RTEiLCA5LCAwIH0sCisgICAgeyAiOEUyIiwgMTAs IDAgfSwKKyNlbmRpZiAvKiBIV1BBUklUWSAqLworICAgIHsgIjhOMSIsIDgsIDAgfSwKKyNpZmRl ZiBIV1BBUklUWQorICAgIHsgIjhOMiIsIDExLCAwIH0sCisgICAgeyAiOE8xIiwgMTIsIDAgfSwK KyAgICB7ICI4TzIiLCAxMywgMCB9LAorI2VuZGlmIC8qIEhXUEFSSVRZICovCisgICAgeyAiIiwg MCwgMCB9Cit9Oworc3RhdGljIGludCBuc2VydGJsID0gKHNpemVvZihzZXJ0YmwpIC8gc2l6ZW9m KHN0cnVjdCBrZXl0YWIpKSAtIDE7CisKK3N0YXRpYyBjaGFyICogc2VybmFtW10gPSB7ICAgICAg ICAgICAgICAvKiBLZWVwIHRoaXMgaW4gc3luYyB3aXRoIHNlcnRibFtdICovCisgICI3RTEiLCAi N0UyIiwgIjdNMSIsICI3TTIiLCAiN08xIiwgIjdPMiIsICI3UzEiLCAiN1MyIiwKKyAgIjhOMSIs ICI4RTEiLCAiOEUyIiwgIjhOMiIsICI4TzEiLCAiOE8yIgorfTsKKworc3RhdGljIHN0cnVjdCBr ZXl0YWIgb3B0c3RhYltdID0geyAgICAgIC8qIFNFVCBPUFRJT05TIHRhYmxlICovCisjaWZuZGVm IE5PRlJJTExTCisgICAgeyAiZGVsZXRlIiwgICAgWFhERUwsICAgMH0sICAgICAgICAgICAgLyog REVMRVRFICovCisjZW5kaWYgLyogTk9GUklMTFMgKi8KKyAgICB7ICJkaXJlY3RvcnkiLCBYWERJ UiwgICAwfSwgICAgICAgICAvKiBESVJFQ1RPUlkgKi8KKyNpZmRlZiBDS1BVUkdFCisgICAgeyAi cHVyZ2UiLCAgICAgWFhQVVJHRSwgMH0sICAgICAgICAgLyogUFVSR0UgKi8KKyNlbmRpZiAvKiBD S1BVUkdFICovCisgICAgeyAidHlwZSIsICAgICAgWFhUWVAsICAgMH0sICAgICAgICAgLyogVFlQ RSAqLworICAgIHsgIiIsIDAsIDB9Cit9Oworc3RhdGljIGludCBub3B0c3RhYiA9ICAoc2l6ZW9m KG9wdHN0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKSAtIDE7CisKKyNpZm5kZWYgTk9YRkVS CisvKgorICBQUk9UT0NPTCBTRUxFQ1RJT04uICBLZXJtaXQgaXMgYWx3YXlzIGF2YWlsYWJsZS4g IElmIENLX1hZWiBpcyBkZWZpbmVkIGF0CisgIGNvbXBpbGUgdGltZSwgdGhlbiB0aGUgb3RoZXJz IGJlY29tZSBzZWxlY3Rpb25zIGFsc28uICBJbiBPUy8yIGFuZAorICBXaW5kb3dzLCB0aGV5IGFy ZSBpbnRlZ3JhdGVkIGFuZCB0aGUgdmFyaW91cyBTRVQgY29tbWFuZHMgKGUuZy4gInNldCBmaWxl CisgIHR5cGUiKSBhZmZlY3QgdGhlbSBhcyB0aGV5IHdvdWxkIEtlcm1pdC4gIEluIG90aGVyIE9T J3MgKFVOSVgsIFZNUywgZXRjKSwKKyAgdGhleSBhcmUgZXh0ZXJuYWwgcHJvdG9jb2xzIHdoaWNo IGFyZSBydW4gdmlhIEtlcm1pdCdzIFJFRElSRUNUIG1lY2hhbmlzbS4KKyAgQWxsIHdlIGRvIGlz IGNvbGxlY3QgYW5kIHZlcmlmeSB0aGUgZmlsZW5hbWVzIGFuZCBwYXNzIHRoZW0gYWxvbmcgdG8g dGhlCisgIGV4dGVybmFsIHByb3RvY29sLgorKi8KK3N0cnVjdCBrZXl0YWIgcHJvdG9zW10gPSB7 CisjaWZkZWYgQ0tfWFlaCisgICAgImciLCAgICAgICAgICBQUk9UT19HLCAgQ01fSU5WLAorI2Vu ZGlmIC8qIENLX1hZWiAqLworICAgICJrZXJtaXQiLCAgICAgUFJPVE9fSywgIDAsCisjaWZkZWYg Q0tfWFlaCisgICAgIm90aGVyIiwgICAgICBQUk9UT19PLCAgMCwKKyAgICAieCIsICAgICAgICAg IFBST1RPX1gsICBDTV9JTlZ8Q01fQUJSLAorICAgICJ4bW9kZW0iLCAgICAgUFJPVE9fWCwgIDAs CisgICAgInhtb2RlbS1jcmMiLCBQUk9UT19YQywgMCwKKyAgICAieSIsICAgICAgICAgIFBST1RP X1ksICBDTV9JTlZ8Q01fQUJSLAorICAgICJ5bW9kZW0iLCAgICAgUFJPVE9fWSwgIDAsCisgICAg Inltb2RlbS1nIiwgICBQUk9UT19HLCAgMCwKKyAgICAiem1vZGVtIiwgICAgIFBST1RPX1osICAw CisjZW5kaWYgLyogQ0tfWFlaICovCit9OworaW50IG5wcm90b3MgPSAgKHNpemVvZihwcm90b3Mp IC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKKworI2lmbmRlZiBYWVpfSU5URVJOQUwKKyNpZm5k ZWYgTk9QVVNICisjZGVmaW5lIEVYUF9IQU5ETEVSIDEKKyNkZWZpbmUgRVhQX1NUREVSUiAgMgor I2RlZmluZSBFWFBfVElNTyAgICAzCisKK3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIGV4dHByb3RhYltd ID0geworICAgIHsgImhhbmRsZXIiLCAgICAgICAgICBFWFBfSEFORExFUiwgMCB9LAorICAgIHsg InJlZGlyZWN0LXN0ZGVyciIsICBFWFBfU1RERVJSLCAwIH0sCisgICAgeyAidGltZW91dCIsICAg ICAgICAgIEVYUF9USU1PLCAwIH0KK307CitzdGF0aWMgaW50IG54dHByb3RhYiA9ICAoc2l6ZW9m KGV4dHByb3RhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpOworI2VuZGlmCS8qIE5PUFVTSCAq LworI2VuZGlmCS8qIFhZWl9JTlRFUk5BTCAqLworCisjZGVmaW5lIFhQQ01ETEVOIDcxCisKK19Q Uk9UT1RZUChzdGF0aWMgaW50IHByb3RvZmllbGQsIChjaGFyICosIGNoYXIgKiwgY2hhciAqKSk7 CitfUFJPVE9UWVAoc3RhdGljIGludCBzZXRwcm90bywgKHZvaWQpKTsKKworc3RhdGljIGludAor cHJvdG9maWVsZChjdXJyZW50LCBoZWxwLCBweCkgY2hhciAqIGN1cnJlbnQsICogaGVscCwgKiBw eDsgeworCisgICAgY2hhciAqcywgdG1wYnVmW1hQQ01ETEVOKzFdOworICAgIGludCB4OworCisg ICAgaWYgKGN1cnJlbnQpICAgICAgICAgICAgICAgICAgICAgICAgLyogUHV0IGJyYWNlcyBhcm91 bmQgZGVmYXVsdCAqLworICAgICAgY2ttYWttc2codG1wYnVmLFRNUEJVRlNJWiwieyIsY3VycmVu dCwifSIsTlVMTCk7CisgICAgZWxzZQorICAgICAgdG1wYnVmWzBdID0gTlVMOworCisgICAgaWYg KCh4ID0gY21mbGQoaGVscCwgKGNoYXIgKil0bXBidWYsICZzLCB4eHN0cmluZykpIDwgMCkKKyAg ICAgIHJldHVybih4KTsKKyAgICBpZiAoKGludClzdHJsZW4ocykgPiBYUENNRExFTikgeworICAg ICAgICBwcmludGYoIj9Tb3JyeSAtIG1heGltdW0gbGVuZ3RoIGlzICVkXG4iLCBYUENNRExFTik7 CisgICAgICAgIHJldHVybigtOSk7CisgICAgfSBlbHNlIGlmICgqcykgeworICAgICAgICBzdHJj cHkocHgscyk7ICAgICAgICAgICAgICAgICAgIC8qIHNhZmUgKi8KKyAgICB9IGVsc2UgeworICAg ICAgICBweCA9IE5VTEw7CisgICAgfQorICAgIHJldHVybih4KTsKK30KKworc3RhdGljIGludAor c2V0cHJvdG8oKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNlbGVjdCBhIGZpbGUg dHJhbnNmZXIgcHJvdG9jb2wgKi8KKyAgICAvKiBjaGFyICogcyA9IE5VTEw7ICovCisgICAgaW50 IHggPSAwLCB5OworICAgIGNoYXIgczFbWFBDTURMRU4rMV0sIHMyW1hQQ01ETEVOKzFdLCBzM1tY UENNRExFTisxXTsKKyAgICBjaGFyIHM0W1hQQ01ETEVOKzFdLCBzNVtYUENNRExFTisxXSwgczZb WFBDTURMRU4rMV0sIHM3W1hQQ01ETEVOKzFdOworICAgIGNoYXIgKiBwMSA9IHMxLCAqIHAyID0g czIsICpwMyA9IHMzOworICAgIGNoYXIgKiBwNCA9IHM0LCAqIHA1ID0gczUsICpwNiA9IHM2LCAq cDcgPSBzNzsKKworI2lmZGVmIFhZWl9JTlRFUk5BTAorICAgIGV4dGVybiBpbnQgcF9hdmFpbDsK KyNlbHNlCisjaWZuZGVmIENLX1JFRElSCisgICAgeCA9IDE7CisjZW5kaWYgLyogQ0tfUkVESVIg Ki8KKyNlbmRpZiAvKiBYWVpfSU5URVJOQUwgKi8KKyAgICBzMVswXSA9IE5VTDsKKyAgICBzMlsw XSA9IE5VTDsKKyAgICBzM1swXSA9IE5VTDsKKyAgICBzNFswXSA9IE5VTDsKKyAgICBzNVswXSA9 IE5VTDsKKyAgICBzNlswXSA9IE5VTDsKKworICAgIGlmICgoeSA9IGNta2V5KHByb3RvcyxucHJv dG9zLCIiLCJrZXJtaXQiLHh4c3RyaW5nKSkgPCAwKQorICAgICAgcmV0dXJuKHkpOworCisgICAg aWYgKHggJiYgeSAhPSBQUk9UT19LKSB7CisgICAgICAgIHByaW50ZigKKyAgICAgICAgICAgIj9T b3JyeSwgUkVESVJFQ1QgY2FwYWJpbGl0eSByZXF1aXJlZCBmb3IgZXh0ZXJuYWwgcHJvdG9jb2xz LlxuIik7CisgICAgICAgIHJldHVybigtOSk7CisgICAgfQorICAgIGlmICgoeCA9IHByb3RvZmll bGQocHRhYlt5XS5oX2JfaW5pdCwKKyAgICAgIk9wdGlvbmFsIGNvbW1hbmQgdG8gc2VuZCB0byBo b3N0IHByaW9yIHRvIHVwbG9hZGluZyBpbiBiaW5hcnkgbW9kZSIsCisgICAgICAgICAgICAgICBw MSkpIDwgMCkgeworICAgICAgICBpZiAoeCA9PSAtMykgeworICAgICAgICAgICAgcHJvdG9jb2wg PSB5OyAgICAgICAgICAgICAgIC8qIFNldCBwcm90b2NvbCBidXQgZG9uJ3QgY2hhbmdlICovCisg ICAgICAgICAgICByZXR1cm4oMSk7ICAgICAgICAgICAgICAgICAgLyogYW55dGhpbmcgZWxzZSAq LworICAgICAgICB9IGVsc2UKKyAgICAgICAgICByZXR1cm4oeCk7CisgICAgfQorICAgIGlmICgo eCA9IHByb3RvZmllbGQocHRhYlt5XS5oX3RfaW5pdCwKKyAgICAgIk9wdGlvbmFsIGNvbW1hbmQg dG8gc2VuZCB0byBob3N0IHByaW9yIHRvIHVwbG9hZGluZyBpbiB0ZXh0IG1vZGUiLAorICAgICAg ICAgICAgICAgcDIpKSA8IDApIHsKKyAgICAgICAgaWYgKHggPT0gLTMpCisgICAgICAgICAgZ290 byBwcm90b2V4aXQ7CisgICAgICAgIGVsc2UKKyAgICAgICAgICByZXR1cm4oeCk7CisgICAgfQor CisgICAgaWYgKHkgPT0gUFJPVE9fSykgeworICAgICAgICBpZiAoKHggPSBwcm90b2ZpZWxkKHB0 YWJbeV0uaF94X2luaXQsCisgICAgICAgICAgICAgICAgICAgICJPcHRpb25hbCBjb21tYW5kIHRv IHNlbmQgdG8gaG9zdCB0byBzdGFydCBLZXJtaXQgc2VydmVyIiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICBwMykpIDwgMCkgeworICAgICAgICAgICAgaWYgKHggPT0gLTMpCisgICAgICAg ICAgICAgIGdvdG8gcHJvdG9leGl0OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBy ZXR1cm4oeCk7CisgICAgICAgIH0KKyAgICB9CisKKworI2lmbmRlZiBYWVpfSU5URVJOQUwgICAg ICAgICAgICAgICAgICAgIC8qIElmIFhZWk1PREVNIGFyZSBleHRlcm5hbC4uLiAqLworCisgICAg aWYgKHkgIT0gUFJPVE9fSykgeworICAgICAgICBpZiAoKHggPSBwcm90b2ZpZWxkKHB0YWJbeV0u cF9iX3NjbWQsCisgICAgICAgICAgICAgICAgICJFeHRlcm5hbCBjb21tYW5kIHRvIFNFTkQgaW4g QklOQVJZIG1vZGUgd2l0aCB0aGlzIHByb3RvY29sIiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICBwNCkpIDwgMCkgeworICAgICAgICAgICAgaWYgKHggPT0gLTMpCisgICAgICAgICAgICAg IGdvdG8gcHJvdG9leGl0OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICByZXR1cm4o eCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCh4ID0gcHJvdG9maWVsZChwdGFiW3ldLnBfdF9z Y21kLAorICAgICAgICAgICAgICAgICAiRXh0ZXJuYWwgY29tbWFuZCB0byBTRU5EIGluIFRFWFQg bW9kZSB3aXRoIHRoaXMgcHJvdG9jb2wiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHA1 KSkgPCAwKSB7CisgICAgICAgICAgICBpZiAoeCA9PSAtMykKKyAgICAgICAgICAgICAgZ290byBw cm90b2V4aXQ7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIHJldHVybih4KTsKKyAg ICAgICAgfQorICAgICAgICBpZiAoKHggPSBwcm90b2ZpZWxkKHB0YWJbeV0ucF9iX3JjbWQsCisg ICAgICAgICAgICAgICAiRXh0ZXJuYWwgY29tbWFuZCB0byBSRUNFSVZFIGluIEJJTkFSWSBtb2Rl IHdpdGggdGhpcyBwcm90b2NvbCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcDYpKSA8 IDApIHsKKyAgICAgICAgICAgIGlmICh4ID09IC0zKQorICAgICAgICAgICAgICBnb3RvIHByb3Rv ZXhpdDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgcmV0dXJuKHgpOworICAgICAg ICB9CisgICAgICAgIGlmICgoeCA9IHByb3RvZmllbGQocHRhYlt5XS5wX3RfcmNtZCwKKyAgICAg ICAgICAgICAgICAgIkV4dGVybmFsIGNvbW1hbmQgdG8gUkVDRUlWRSBpbiBURVhUIG1vZGUgd2l0 aCB0aGlzIHByb3RvY29sIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwNykpIDwgMCkg eworICAgICAgICAgICAgaWYgKHggPT0gLTMpCisgICAgICAgICAgICAgIGdvdG8gcHJvdG9leGl0 OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgIH0K KyAgICB9CisjZW5kaWYgLyogWFlaX0lOVEVSTkFMICovCisKKyAgICBpZiAoKHggPSBjbWNmbSgp KSA8IDApICAgICAgICAgICAgICAvKiBDb25maXJtIHRoZSBjb21tYW5kICovCisgICAgICByZXR1 cm4oeCk7CisKK3Byb3RvZXhpdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDb21t b24gZXhpdCBmcm9tIHRoaXMgcm91dGluZSAqLworCisjaWZkZWYgWFlaX0lOVEVSTkFMCisgICAg aWYgKCFwX2F2YWlsKSB7CisgICAgICAgIGJsZWVwKEJQX1dBUk4pOworICAgICAgICBwcmludGYo IlxuP1gsWSwgYW5kIFptb2RlbSBhcmUgdW5hdmFpbGFibGVcbiIpOworICAgICAgICByZXR1cm4o c3VjY2VzcyA9IDApOworICAgIH0KKyNlbmRpZiAvKiBYWVpfSU5URVJOQUwgKi8KKworICAgIHAx ID0gYnJzdHJpcChwMSk7CisgICAgcDIgPSBicnN0cmlwKHAyKTsKKyAgICBwMyA9IGJyc3RyaXAo cDMpOworICAgIHA0ID0gYnJzdHJpcChwNCk7CisgICAgcDUgPSBicnN0cmlwKHA1KTsKKyAgICBw NiA9IGJyc3RyaXAocDYpOworICAgIHA3ID0gYnJzdHJpcChwNyk7CisgICAgaW5pdHByb3RvKHks cDEscDIscDMscDQscDUscDYscDcpOworICAgIHJldHVybihzdWNjZXNzID0gMSk7Cit9CisKKyNp Zm5kZWYgTk9QVVNICisjaWZuZGVmIFhZWl9JTlRFUk5BTAorCisjZGVmaW5lIERFRl9FWFBfVElN TyAxMgkgLyogRGVmYXVsdCB0aW1lb3V0IGZvciBleHRlcm5hbCBwcm90b2NvbCAoc2Vjb25kcykg Ki8KKworaW50IGV4cF9oYW5kbGVyID0gMDsJCQkvKiBUaGVzZSBhcmUgZXhwb3J0ZWQgKi8KK2lu dCBleHBfdGltbyA9IERFRl9FWFBfVElNTzsKK2ludCBleHBfc3RkZXJyID0gU0VUX0FVVE87CisK K1ZPSUQKK3Nob2V4dGVybigpIHsJCQkJLyogSW52b2tlZCBieSBTSE9XIFBST1RPQ09MICovCisg ICAgcHJpbnRmKCJcbiBFeHRlcm5hbC1wcm90b2NvbCBoYW5kbGVyOiAgICAgICAgICVzXG4iLAor CSAgIGV4cF9oYW5kbGVyID8gKGV4cF9oYW5kbGVyID09IDEgPyAicHR5IiA6ICJzeXN0ZW0iKSA6 ICJhdXRvbWF0aWMiKTsKKyNpZmRlZiBDT01NRU5UCisgICAgcHJpbnRmKCIgRXh0ZXJuYWwtcHJv dG9jb2wgcmVkaXJlY3Qtc3RkZXJyOiAlc1xuIiwgc2hvd29vYShleHBfc3RkZXJyKSk7CisjZW5k aWYJLyogQ09NTUVOVCAqLworICAgIHByaW50ZigiIEV4dGVybmFsLXByb3RvY29sIHRpbWVvdXQ6 ICAgICAgICAgJWQgKHNlYylcbiIsIGV4cF90aW1vKTsKK30KKworc3RhdGljIHN0cnVjdCBrZXl0 YWIgc2V0ZXh0ZXJuaGFuZGxlcltdID0geworICAgIHsgImF1dG9tYXRpYyIsIDAsIDAgfSwKKyAg ICB7ICJwdHkiLCAgICAgICAxLCAwIH0sCisgICAgeyAic3lzdGVtIiwgICAgMiwgMCB9Cit9Owor CitpbnQKK3NldGV4dGVybigpIHsJCQkJLyogU0VUIEVYVEVSTkFMLVBST1RPQ09MICovCisgICAg aW50IHgsIHk7CisgICAgaWYgKCh4ID0gY21rZXkoZXh0cHJvdGFiLG54dHByb3RhYiwiIiwiIix4 eHN0cmluZykpIDwgMCkKKyAgICAgIHJldHVybih4KTsKKyAgICBzd2l0Y2ggKHgpIHsKKyAgICAg IGNhc2UgRVhQX0hBTkRMRVI6CisJaWYgKCh4ID0gY21rZXkoc2V0ZXh0ZXJuaGFuZGxlciwzLCIi LCJhdXRvbWF0aWMiLHh4c3RyaW5nKSkgPCAwKQorCSAgcmV0dXJuKHgpOworCWlmICgoeSA9IGNt Y2ZtKCkpIDwgMCkKKwkgIHJldHVybih5KTsKKwlleHBfaGFuZGxlciA9IHg7CisJYnJlYWs7CisJ CisjaWZkZWYgQ09NTUVOVAorICAgICAgY2FzZSBFWFBfU1RERVJSOgorCWlmICgoeCA9IGNta2V5 KG9vYXRhYiwzLCIiLCJhdXRvbWF0aWMiLHh4c3RyaW5nKSkgPCAwKQorCSAgcmV0dXJuKHgpOwor CWlmICgoeSA9IGNtY2ZtKCkpIDwgMCkKKwkgIHJldHVybih5KTsKKwlleHBfc3RkZXJyID0geDsK KwlicmVhazsKKyNlbmRpZgkvKiBDT01NRU5UICovCisKKyAgICAgIGNhc2UgRVhQX1RJTU86CisJ eSA9IGNtbnVtKCJJbmFjdGl2aXR5IHRpbWVvdXQsIHNlY29uZHMsIixja2l0b2EoREVGX0VYUF9U SU1PKSwKKwkJICAxMCwmeCx4eHN0cmluZyk7CisgICAgICAgIHJldHVybihzZXRudW0oJmV4cF90 aW1vLHgseSwtMSkpOworICAgIH0KKyAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworfQorI2VuZGlm CS8qIFhZWl9JTlRFUk5BTCAqLworI2VuZGlmCS8qIE5PUFVTSCAqLworCitpbnQKK3NldGRlc3Qo KSB7CisgICAgaW50IHgsIHk7CisgICAgaWYgKCh5ID0gY21rZXkoZGVzdHRhYixuZGVzdHMsIiIs ImRpc2siLHh4c3RyaW5nKSkgPCAwKSByZXR1cm4oeSk7CisgICAgaWYgKCh4ID0gY21jZm0oKSkg PCAwKSByZXR1cm4oeCk7CisgICAgZGVzdCA9IHk7CisgICAgcmV0dXJuKDEpOworfQorI2VuZGlm IC8qIE5PWEZFUiAqLworCisjaWZkZWYgREVDTkVUCitzdHJ1Y3Qga2V5dGFiIGRuZXR0YWJbXSA9 IHsKKyNpZm5kZWYgT1MyT05MWQorICAgICJjdGVybSIsIE5QX0NURVJNLCAwLAorI2VuZGlmIC8q IE9TMk9OTFkgKi8KKyAgICAibGF0IiwgICBOUF9MQVQsICAgMAorfTsKK2ludCBuZG5ldCA9ICAo c2l6ZW9mKGRuZXR0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKKyNlbmRpZiAvKiBERUNO RVQgKi8KKworLyogIFMgRSBUIFAgUiBJIE4gVCBFIFIgIC0tICBTRVQgUFJJTlRFUiBjb21tYW5k ICAqLworCisjaWZkZWYgUFJJTlRTV0kKK3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIHBybnRhYltdID0g eyAgICAgICAvKiBTRVQgUFJJTlRFUiBzd2l0Y2hlcyAqLworICAgICIvYmlkaXJlY3Rpb25hbCIs ICAgIFBSTl9CSUQsIDAsCisjaWZkZWYgT1MyCisgICAgIi9jaGFyYWN0ZXItc2V0IiwgICAgUFJO X0NTLCAgQ01fQVJHLAorI2VuZGlmIC8qIE9TMiAqLworICAgICIvY29tbWFuZCIsICAgICAgICAg IFBSTl9QSVAsIENNX0FSRywKKyAgICAiL2Rvcy1kZXZpY2UiLCAgICAgICBQUk5fRE9TLCBDTV9B UkcsCisgICAgIi9lbmQtb2Ytam9iLXN0cmluZyIsUFJOX1RSTSwgQ01fQVJHLAorICAgICIvZmls ZSIsICAgICAgICAgICAgIFBSTl9GSUwsIENNX0FSRywKKyNpZmRlZiBCUFJJTlQKKyAgICAiL2Zs b3ctY29udHJvbCIsICAgICBQUk5fRkxPLCBDTV9BUkcsCisjZW5kaWYgLyogQlBSSU5UICovCisg ICAgIi9qb2ItaGVhZGVyLWZpbGUiLCAgUFJOX1NFUCwgQ01fQVJHLAorI2lmZGVmIE9TMgorICAg ICIvbGVuZ3RoIiwgICAgICAgICAgIFBSTl9MRU4sIENNX0FSRywKKyNlbmRpZiAvKiBPUzIgKi8K KyAgICAiL25vbmUiLCAgICAgICAgICAgICBQUk5fTk9OLCAwLAorI2lmZGVmIE9TMgorICAgICIv bm9wb3N0c2NyaXB0IiwgICAgIFBSTl9SQVcsIDAsCisgICAgIi9ub3BzIiwgICAgICAgICAgICAg UFJOX1JBVywgQ01fSU5WLAorI2VuZGlmIC8qIE9TMiAqLworICAgICIvb3V0cHV0LW9ubHkiLCAg ICAgIFBSTl9PVVQsIDAsCisjaWZkZWYgQlBSSU5UCisgICAgIi9wYXJpdHkiLCAgICAgICAgICAg UFJOX1BBUiwgQ01fQVJHLAorI2VuZGlmIC8qIEJQUklOVCAqLworICAgICIvcGlwZSIsICAgICAg ICAgICAgIFBSTl9QSVAsIENNX0FSR3xDTV9JTlYsCisjaWZkZWYgT1MyCisgICAgIi9wb3N0c2Ny aXB0IiwgICAgICAgUFJOX1BTLCAgMCwKKyAgICAiL3BzIiwgICAgICAgICAgICAgICBQUk5fUFMs ICBDTV9JTlYsCisjZW5kaWYgLyogT1MyICovCisgICAgIi9zZXBhcmF0b3IiLCAgICAgICAgUFJO X1NFUCwgQ01fQVJHfENNX0lOViwKKyNpZmRlZiBCUFJJTlQKKyAgICAiL3NwZWVkIiwgICAgICAg ICAgICBQUk5fU1BELCBDTV9BUkcsCisjZW5kaWYgLyogQlBSSU5UICovCisgICAgIi90aW1lb3V0 IiwgICAgICAgICAgUFJOX1RNTywgQ01fQVJHLAorICAgICIvdGVybWluYXRvciIsICAgICAgIFBS Tl9UUk0sIENNX0FSR3xDTV9JTlYsCisjaWZkZWYgT1MyCisjaWZkZWYgTlQKKyAgICAiL3ciLCAg ICAgICAgICAgICAgICBQUk5fV0lOLCBDTV9BUkd8Q01fQUJSfENNX0lOViwKKyAgICAiL3dpIiwg ICAgICAgICAgICAgICBQUk5fV0lOLCBDTV9BUkd8Q01fQUJSfENNX0lOViwKKyNlbmRpZiAvKiBO VCAqLworICAgICIvd2lkdGgiLCAgICAgICAgICAgIFBSTl9XSUQsIENNX0FSRywKKyNlbmRpZiAv KiBPUzIgKi8KKyNpZmRlZiBOVAorICAgICIvd2luZG93cy1xdWV1ZSIsICAgIFBSTl9XSU4sIENN X0FSRywKKyNlbmRpZiAvKiBOVCAqLworICAgICIiLCAgICAgICAgICAgICAgICAgMCwgICAgICAw Cit9OworaW50IG5wcm5zd2kgPSAgKHNpemVvZihwcm50YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0 YWIpKSAtIDE7CisjZW5kaWYgLyogUFJJTlRTV0kgKi8KKworc3RhdGljIGludAorc2V0cHJpbnRl cih4eCkgaW50IHh4OyB7CisgICAgaW50IHgsIHk7CisgICAgY2hhciAqIHM7CisgICAgY2hhciAq IGRlZm5hbWUgPSBOVUxMOworI2lmZGVmIE9TMgorICAgIGV4dGVybiBpbnQgcHJuY3M7CisjZW5k aWYgLyogT1MyICovCisKKyNpZmRlZiBCUFJJTlQKKyAgICBjaGFyIHBvcnRidWZbNjRdOworICAg IGxvbmcgcG9ydHNwZWVkID0gMEw7CisgICAgaW50IHBvcnRwYXJpdHkgPSAwOworICAgIGludCBw b3J0ZmxvdyA9IDA7CisjZW5kaWYgLyogQlBSSU5UICovCisKKyNpZmRlZiBQUklOVFNXSQorICAg IGludCBjLCBpLCBuLCB3aWxkLCBjb25maXJtZWQgPSAwOyAgIC8qIFdvcmtlcnMgKi8KKyAgICBp bnQgZ2V0dmFsID0gMDsgICAgICAgICAgICAgICAgICAgICAvKiBXaGV0aGVyIHRvIGdldCBzd2l0 Y2ggdmFsdWUgKi8KKyAgICBzdHJ1Y3Qgc3RyaW5naW50IHB2W1BSTl9NQVgrMV07ICAgIC8qIFRl bXBvcmFyeSBhcnJheSBmb3Igc3dpdGNoIHZhbHVlcyAqLworICAgIHN0cnVjdCBGREIgc3csIG9m LCBjbTsgICAgICAgICAgICAgIC8qIEZEQnMgZm9yIGVhY2ggcGFyc2UgZnVuY3Rpb24gKi8KKyAg ICBpbnQgaGF2ZXF1ZSA9IDA7CisgICAgaW50IHR5cGVzZXQgPSAwOworI2VuZGlmIC8qIFBSSU5U U1dJICovCisKKyNpZmRlZiBOVAorICAgIHN0cnVjdCBrZXl0YWIgKiBwcmludHRhYiA9IE5VTEws ICogX3ByaW50dGFiID0gTlVMTDsKKyAgICBpbnQgbnByaW50ID0gMCwgcHJpbnRkZWY9MDsKKyNl bmRpZiAvKiBOVCAqLworCisjaWZkZWYgT1MyCisgICAgZGVmbmFtZSA9ICJQUk4iOyAgICAgICAg ICAgICAgICAgICAgLyogZGVmYXVsdCAqLworI2Vsc2UKKyNpZmRlZiBWTVMKKyAgICBkZWZuYW1l ID0gIkxQVDoiOworI2Vsc2UKKyNpZmRlZiBVTklYCisgICAgZGVmbmFtZSA9ICJ8bHByIjsKKyNl bmRpZiAvKiBVTklYICovCisjZW5kaWYgLyogVk1TICovCisjZW5kaWYgLyogT1MyICovCisKKyNp ZmRlZiBQUklOVFNXSQorI2lmZGVmIE5UCisgICAgaGF2ZXF1ZSA9IFdpbjMyRW51bVBydCgmcHJp bnR0YWIsJl9wcmludHRhYiwmbnByaW50LCZwcmludGRlZik7CisgICAgaGF2ZXF1ZSA9IGhhdmVx dWUgJiYgbnByaW50OworI2VuZGlmIC8qIE5UICovCisKKyAgICBmb3IgKGkgPSAwOyBpIDw9IFBS Tl9NQVg7IGkrKykgeyAgICAvKiBJbml0aWFsaXplIHN3aXRjaCB2YWx1ZXMgKi8KKyAgICAgICAg cHZbaV0uc3ZhbCA9IE5VTEw7ICAgICAgICAgICAgICAvKiB0byBudWxsIHBvaW50ZXJzICovCisg ICAgICAgIHB2W2ldLml2YWwgPSAtMTsgICAgICAgICAgICAgICAgLyogYW5kIC0xIGludCB2YWx1 ZXMgKi8KKyAgICAgICAgcHZbaV0ud3ZhbCA9IChDS19PRkZfVCktMTsJLyogYW5kIC0xIHdpZGUg dmFsdWVzICovCisgICAgfQorICAgIGlmICh4eCA9PSBYWUJEQ1ApIHsgICAgICAgICAgICAgICAg IC8qIFNFVCBCUFJJTlRFUiA9PSAvQklESVJFQ1RJT05BTCAqLworICAgICAgICBwdltQUk5fQklE XS5pdmFsID0gMTsKKyAgICAgICAgcHZbUFJOX09VVF0uaXZhbCA9IDA7CisgICAgfQorCisgICAg LyogSW5pdGlhbGl6ZSBkZWZhdWx0cyBiYXNlZCB1cG9uIGN1cnJlbnQgcHJpbnRlciBzZXR0aW5n cyAqLworICAgIGlmIChwcmludGVybmFtZSkgeworICAgICAgICBkZWZuYW1lID0gcHJpbnRlcm5h bWU7CisgICAgICAgIHN3aXRjaCAocHJpbnRlcnR5cGUpIHsKKyAgICAgICAgICBjYXNlIFBSVF9X SU46IHB2W1BSTl9XSU5dLml2YWwgPSAxOyBicmVhazsKKyAgICAgICAgICBjYXNlIFBSVF9ET1M6 IHB2W1BSTl9ET1NdLml2YWwgPSAxOyBicmVhazsKKyAgICAgICAgICBjYXNlIFBSVF9QSVA6IHB2 W1BSTl9QSVBdLml2YWwgPSAxOyBicmVhazsKKyAgICAgICAgICBjYXNlIFBSVF9GSUw6IHB2W1BS Tl9GSUxdLml2YWwgPSAxOyBicmVhazsKKyAgICAgICAgICBjYXNlIFBSVF9OT046IHB2W1BSTl9O T05dLml2YWwgPSAxOyBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyNpZmRlZiBCUFJJTlQKKyAg ICAvKiBvbmx5IHNldCB0aGUgQklESSBmbGFnIGlmIHdlIGFyZSBiaWRpICovCisgICAgaWYgKHBy aW50YmlkaSkKKyAgICAgICAgcHZbUFJOX0JJRF0uaXZhbCA9IDE7CisKKyAgICAvKiBzZXJpYWwg cG9ydCBwYXJhbWV0ZXJzIG1heSBiZSBzZXQgZm9yIG5vbi1iaWRpIGRldmljZXMgKi8KKyAgICBw dltQUk5fU1BEXS5pdmFsID0gcHBvcnRzcGVlZCAvIDEwTDsKKyAgICBwdltQUk5fUEFSXS5pdmFs ID0gcHBvcnRwYXJpdHk7CisgICAgcHZbUFJOX0ZMT10uaXZhbCA9IHBwb3J0ZmxvdzsKKyNlbmRp ZiAvKiBCUFJJTlQgKi8KKyAgICBpZiAocHJpbnR0aW1vKQorICAgICAgICBwdltQUk5fVE1PXS5p dmFsID0gcHJpbnR0aW1vOworICAgIGlmIChwcmludHRlcm0pIHsKKyAgICAgICAgcHZbUFJOX1RS TV0uaXZhbCA9IDE7CisgICAgICAgIG1ha2VzdHIoJnB2W1BSTl9UUk1dLnN2YWwscHJpbnR0ZXJt KTsKKyAgICB9CisgICAgaWYgKHByaW50c2VwKSB7CisgICAgICAgIHB2W1BSTl9TRVBdLml2YWwg PSAxOworICAgICAgICBtYWtlc3RyKCZwdltQUk5fU0VQXS5zdmFsLHByaW50c2VwKTsKKyAgICB9 CisgICAgaWYgKHR4dDJwcykgeworICAgICAgICBwdltQUk5fUFNdLml2YWwgPSAxOworICAgICAg ICBwdltQUk5fV0lEXS5pdmFsID0gcHNfd2lkdGg7CisgICAgICAgIHB2W1BSTl9MRU5dLml2YWwg PSBwc19sZW5ndGg7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcHZbUFJOX1JBV10uaXZhbCA9IDE7 CisgICAgfQorCisgICAgLyogU2V0IHVwIGNoYWluZWQgcGFyc2UgZnVuY3Rpb25zLi4uICovCisK KyAgICBjbWZkYmkoJnN3LCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGaXJzdCBGREIgLSBj b21tYW5kIHN3aXRjaGVzICovCisgICAgICAgICAgIF9DTUtFWSwgICAgICAgICAgICAgICAgICAg ICAgLyogZmNvZGUgKi8KKyAgICAgICAgICAgIlN3aXRjaCIsICAgICAgICAgICAgICAgICAgICAv KiBobHBtc2cgKi8KKyAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBk ZWZhdWx0ICovCisgICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRk dGwgc3RyaW5nIGRhdGEgKi8KKyAgICAgICAgICAgbnBybnN3aSwgICAgICAgICAgICAgICAgICAg ICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMTogdGJsIHNpemUgKi8KKyAgICAgICAgICAgNCwgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMjogNCA9IGNtc3dp ICovCisgICAgICAgICAgIHh4c3RyaW5nLCAgICAgICAgICAgICAgICAgICAgLyogUHJvY2Vzc2lu ZyBmdW5jdGlvbiAqLworICAgICAgICAgICBwcm50YWIsICAgICAgICAgICAgICAgICAgICAgIC8q IEtleXdvcmQgdGFibGUgKi8KKyAgICAgICAgICAgJmNtICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBQb2ludGVyIHRvIG5leHQgRkRCICovCisgICAgICAgICAgICk7CisgICAgY21mZGJpKCZj bSwgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2Vjb25kIGZkYiBmb3IgY29uZmlybWF0aW9u ICovCisgICAgICAgICAgIF9DTUNGTSwgICAgICAgICAgICAgICAgICAgICAgLyogZmNvZGUgKi8K KyAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBobHBtc2cgKi8KKyAg ICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkZWZhdWx0ICovCisgICAg ICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgc3RyaW5nIGRhdGEg Ki8KKyAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1l cmljIGRhdGEgMSAqLworICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IGFkZHRsIG51bWVyaWMgZGF0YSAyICovCisgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgIE5V TEwsCisgICAgICAgICAgICZvZgorICAgICAgICAgICApOworICAgIGNtZmRiaSgmb2YsICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIFRoaXJkIEZEQiBmb3IgcHJpbnRlciBuYW1lICovCisgICAg ICAgICAgIF9DTU9GSSwgICAgICAgICAgICAgICAgICAgICAgLyogZmNvZGUgKi8KKyAgICAgICAg ICAgIlByaW50ZXIgb3IgZmlsZSBuYW1lIiwgICAgICAvKiBobHBtc2cgKi8KKyAgICAgICAgICAg ZGVmbmFtZSwgICAgICAgICAgICAgICAgICAgICAvKiBkZWZhdWx0ICovCisgICAgICAgICAgICIi LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KKyAgICAg ICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEg MTogdGJsIHNpemUgKi8KKyAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBhZGR0bCBudW1lcmljIGRhdGEgMjogNCA9IGNtc3dpICovCisgICAgICAgICAgIHh4c3RyaW5n LCAgICAgICAgICAgICAgICAgICAgLyogUHJvY2Vzc2luZyBmdW5jdGlvbiAqLworICAgICAgICAg ICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vdGhpbmcgKi8KKyAgICAgICAgICAg TlVMTAorICAgICAgICAgICApOworCisgICAgd2hpbGUgKDEpIHsgICAgICAgICAgICAgICAgICAg ICAgICAgLyogUGFyc2UgMCBvciBtb3JlIHN3aXRjaGVzICovCisgICAgICAgIHggPSBjbWZkYigm c3cpOyAgICAgICAgICAgICAgICAgLyogUGFyc2Ugc3dpdGNoIG9yIG90aGVyIHRoaW5nICovCisg ICAgICAgIGRlYnVnKEYxMDEsInNldHByaW50ZXIgY21mZGIiLCIiLHgpOworICAgICAgICBpZiAo eCA8IDApICAgICAgICAgICAgICAgICAgICAgIC8qIEVycm9yICovCisgICAgICAgICAgZ290byB4 c2V0cHJuOyAgICAgICAgICAgICAgICAgLyogb3IgcmVwYXJzZSBuZWVkZWQgKi8KKyAgICAgICAg aWYgKGNtcmVzdWx0LmZjb2RlICE9IF9DTUtFWSkgICAvKiBCcmVhayBvdXQgaWYgbm90IGEgc3dp dGNoICovCisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmIChjbXJlc3VsdC5mZGJhZGRyICE9 ICZzdykgICAgLyogQWR2YW5jZWQgdXNhZ2UgOi0pICovCisgICAgICAgICAgYnJlYWs7CisgICAg ICAgIGMgPSBjbWdicmsoKTsgICAgICAgICAgICAgICAgICAgLyogR2V0IGJyZWFrIGNoYXJhY3Rl ciAqLworICAgICAgICBnZXR2YWwgPSAoYyA9PSAnOicgfHwgYyA9PSAnPScpOyAvKiB0byBzZWUg aG93IHRoZXkgZW5kZWQgdGhlIHN3aXRjaCAqLworICAgICAgICBuID0gY21yZXN1bHQubnJlc3Vs dDsgICAgICAgICAgIC8qIE51bWVyaWMgcmVzdWx0ID0gc3dpdGNoIHZhbHVlICovCisgICAgICAg IGRlYnVnKEYxMDEsInNldHByaW50ZXIgc3dpdGNoIiwiIixuKTsKKworICAgICAgICBzd2l0Y2gg KG4pIHsgICAgICAgICAgICAgICAgICAgIC8qIFByb2Nlc3MgdGhlIHN3aXRjaCAqLworICAgICAg ICAgIGNhc2UgUFJOX1BTOiAgICAgICAgICAgICAgICAgIC8qIFRleHQgdG8gUG9zdHNjcmlwdCAq LworICAgICAgICAgICAgcHZbUFJOX1BTXS5pdmFsID0gMTsKKyAgICAgICAgICAgIHB2W1BSTl9C SURdLml2YWwgPSAwOworICAgICAgICAgICAgcHZbUFJOX09VVF0uaXZhbCA9IDE7CisgICAgICAg ICAgICBwdltQUk5fUkFXXS5pdmFsID0gMDsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg ICAgY2FzZSBQUk5fUkFXOiAgICAgICAgICAgICAgICAgLyogTm9uLVBvc3RzY3JpcHQgKi8KKyAg ICAgICAgICAgIHB2W1BSTl9QU10uaXZhbCA9IDA7CisgICAgICAgICAgICBwdltQUk5fUkFXXS5p dmFsID0gMTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBQUk5fQklEOiAg ICAgICAgICAgICAgICAgLyogQmlkaXJlY3Rpb25hbCAqLworICAgICAgICAgICAgcHZbUFJOX0JJ RF0uaXZhbCA9IDE7CisgICAgICAgICAgICBwdltQUk5fT1VUXS5pdmFsID0gMDsKKyAgICAgICAg ICAgIHB2W1BSTl9QU10uaXZhbCA9IDA7CisgICAgICAgICAgICBwdltQUk5fUkFXXS5pdmFsID0g MTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBQUk5fT1VUOiAgICAgICAg ICAgICAgICAgLyogT3V0cHV0LW9ubHkgKi8KKyAgICAgICAgICAgIHB2W1BSTl9PVVRdLml2YWwg PSAxOworICAgICAgICAgICAgcHZbUFJOX0JJRF0uaXZhbCA9IDA7CisgICAgICAgICAgICBwdltQ Uk5fUFNdLml2YWwgPSAwOworICAgICAgICAgICAgcHZbUFJOX1JBV10uaXZhbCA9IDE7CisgICAg ICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgUFJOX05PTjogICAgICAgICAgICAgICAg IC8qIE5PTkUgKi8KKyAgICAgICAgICAgIHR5cGVzZXQrKzsKKyAgICAgICAgICAgIHB2W25dLml2 YWwgPSAxOworICAgICAgICAgICAgcHZbUFJOX1NQRF0uaXZhbCA9IDA7CisgICAgICAgICAgICBw dltQUk5fUEFSXS5pdmFsID0gMDsKKyAgICAgICAgICAgIHB2W1BSTl9GTE9dLml2YWwgPSBGTE9f S0VFUDsKKyAgICAgICAgICAgIGJyZWFrOworCisjaWZkZWYgVU5JWAorICAgICAgICAgIGNhc2Ug UFJOX1dJTjoKKyNlbmRpZiAvKiBVTklYICovCisgICAgICAgICAgY2FzZSBQUk5fRE9TOiAgICAg ICAgICAgICAgICAgLyogRE9TIHByaW50ZXIgbmFtZSAqLworICAgICAgICAgIGNhc2UgUFJOX0ZJ TDogICAgICAgICAgICAgICAgIC8qIE9yIGZpbGVuYW1lICovCisgICAgICAgICAgY2FzZSBQUk5f UElQOgorICAgICAgICAgICAgdHlwZXNldCsrOworICAgICAgICAgICAgaWYgKHB2W25dLnN2YWwp IGZyZWUocHZbbl0uc3ZhbCk7CisgICAgICAgICAgICBwdltuXS5zdmFsID0gTlVMTDsKKyAgICAg ICAgICAgIHB2W1BSTl9OT05dLml2YWwgPSAwOyAgICAgICAvKiBaZXJvIGFueSBwcmV2aW91cyBz ZWxlY3Rpb25zICovCisgICAgICAgICAgICBwdltQUk5fV0lOXS5pdmFsID0gMDsKKyAgICAgICAg ICAgIHB2W1BSTl9ET1NdLml2YWwgPSAwOworICAgICAgICAgICAgcHZbUFJOX0ZJTF0uaXZhbCA9 IDA7CisgICAgICAgICAgICBwdltQUk5fUElQXS5pdmFsID0gMDsKKyAgICAgICAgICAgIHB2W25d Lml2YWwgPSAxOyAgICAgICAgICAgICAvKiBGbGFnIHRoaXMgb25lICovCisgICAgICAgICAgICBp ZiAoIWdldHZhbCkgYnJlYWs7ICAgICAgICAgLyogTm8gdmFsdWUgd2FudGVkICovCisKKyAgICAg ICAgICAgIGlmIChuID09IFBSTl9GSUwpIHsgICAgICAgICAvKiBGaWxlLCBjaGVjayBhY2Nlc3Np YmlsaXR5ICovCisgICAgICAgICAgICAgICAgaW50IHdpbGQgPSAwOworICAgICAgICAgICAgICAg IGlmICgoeCA9IGNtaW9maSgiRmlsZW5hbWUiLCJrZXJtaXQucHJuIiwmcywmd2lsZCx4eHN0cmlu ZykpPCAwKQorICAgICAgICAgICAgICAgICAgaWYgKHggPT0gLTkpIHsKKyAgICAgICAgICAgICAg ICAgICAgICBpZiAoemNoa28ocykgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgIHBy aW50ZigiQ2FuJ3QgY3JlYXRlIFwiJXNcIlxuIixzKTsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgcmV0dXJuKHgpOworICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg IH0gZWxzZSBnb3RvIHhzZXRwcm47CisgICAgICAgICAgICAgICAgaWYgKGlzd2lsZChzKSkgewor ICAgICAgICAgICAgICAgICAgICBwcmludGYoIj9BIHNpbmdsZSBmaWxlIHBsZWFzZVxuIik7Cisg ICAgICAgICAgICAgICAgICAgIHJldHVybigtOSk7CisgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICAgIHB2W1BSTl9TUERdLml2YWwgPSAwOworICAgICAgICAgICAgICAgIHB2W1BSTl9Q QVJdLml2YWwgPSAwOworICAgICAgICAgICAgICAgIHB2W1BSTl9GTE9dLml2YWwgPSBGTE9fS0VF UDsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoKHggPSBjbWZsZChuID09IFBSTl9ET1MgPyAvKiBW YWx1ZSB3YW50ZWQgLSBwYXJzZSBpdCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIkRP UyBwcmludGVyIGRldmljZSBuYW1lIiA6IC8qIEhlbHAgbWVzc2FnZSAqLworICAgICAgICAgICAg ICAgICAgICAgICAgICAgKG4gPT0gUFJOX1BJUCA/CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAiUHJvZ3JhbSBuYW1lIiA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAiRmlsZW5hbWUi KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPT0gUFJOX0RPUyA/CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAiUFJOIiA6ICAgICAgLyogRGVmYXVsdCAqLworICAgICAgICAgICAg ICAgICAgICAgICAgICAgIiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmcywKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIHh4c3RyaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAg ICApKSA8IDApCisgICAgICAgICAgICAgIGdvdG8geHNldHBybjsKKyAgICAgICAgICAgIHMgPSBi cnN0cmlwKHMpOyAgICAgICAgICAgICAvKiBTdHJpcCBlbmNsb3NpbmcgYnJhY2VzICovCisgICAg ICAgICAgICB3aGlsZSAoKnMgPT0gU1ApICAgICAgICAgICAgLyogU3RyaXAgbGVhZGluZyBibGFu a3MgKi8KKyAgICAgICAgICAgICAgcysrOworICAgICAgICAgICAgaWYgKG4gPT0gUFJOX1BJUCkg eyAgICAgICAgIC8qIElmIC9QSVBFOiAqLworICAgICAgICAgICAgICAgIGlmICgqcyA9PSAnfCcp IHsgICAgICAgIC8qIHN0cmlwIGFueSBleHRyYW5lb3VzIHBpcGUgc2lnbiAqLworICAgICAgICAg ICAgICAgICAgICBzKys7CisgICAgICAgICAgICAgICAgICAgIHdoaWxlICgqcyA9PSBTUCkKKyAg ICAgICAgICAgICAgICAgICAgICBzKys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg ICAgIHB2W1BSTl9TUERdLml2YWwgPSAwOworICAgICAgICAgICAgICAgIHB2W1BSTl9QQVJdLml2 YWwgPSAwOworICAgICAgICAgICAgICAgIHB2W1BSTl9GTE9dLml2YWwgPSBGTE9fS0VFUDsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgoeSA9IHN0cmxlbihzKSkgPiAwKSAgICAvKiBB bnl0aGluZyBsZWZ0PyAqLworICAgICAgICAgICAgICBpZiAocHZbbl0uc3ZhbCA9IChjaGFyICop IG1hbGxvYyh5KzEpKSAvKiBZZXMsIGtlZXAgaXQgKi8KKyAgICAgICAgICAgICAgICBzdHJjcHko cHZbbl0uc3ZhbCxzKTsgICAvKiBzYWZlICovCisgICAgICAgICAgICBicmVhazsKKyNpZmRlZiBO VAorICAgICAgICAgIGNhc2UgUFJOX1dJTjogICAgICAgICAgICAgICAgIC8qIFdpbmRvd3MgcXVl dWUgbmFtZSAqLworICAgICAgICAgICAgdHlwZXNldCsrOworICAgICAgICAgICAgaWYgKHB2W25d LnN2YWwpIGZyZWUocHZbbl0uc3ZhbCk7CisgICAgICAgICAgICBwdltuXS5zdmFsID0gTlVMTDsK KyAgICAgICAgICAgIHB2W1BSTl9OT05dLml2YWwgPSAwOworICAgICAgICAgICAgcHZbUFJOX0RP U10uaXZhbCA9IDA7CisgICAgICAgICAgICBwdltQUk5fRklMXS5pdmFsID0gMDsKKyAgICAgICAg ICAgIHB2W25dLml2YWwgPSAxOworICAgICAgICAgICAgcHZbUFJOX1NQRF0uaXZhbCA9IDA7Cisg ICAgICAgICAgICBwdltQUk5fUEFSXS5pdmFsID0gMDsKKyAgICAgICAgICAgIHB2W1BSTl9GTE9d Lml2YWwgPSBGTE9fS0VFUDsKKworICAgICAgICAgICAgaWYgKCFnZXR2YWwgfHwgIWhhdmVxdWUp CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKCh4ID0gY21rZXkoX3ByaW50 dGFiLG5wcmludCwiUHJpbnQgcXVldWUgbmFtZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICBfcHJpbnR0YWJbcHJpbnRkZWZdLmt3ZCx4eHN0cmluZykpIDwgMCkgeworICAgICAgICAgICAg ICAgIGlmICh4ICE9IC0yKQorICAgICAgICAgICAgICAgICAgZ290byB4c2V0cHJuOworCisgICAg ICAgICAgICAgICAgaWYgKHB2W1BSTl9XSU5dLnN2YWwpIGZyZWUocHZbUFJOX1dJTl0uc3ZhbCk7 CisgICAgICAgICAgICAgICAgcyA9IGF0bWJ1ZjsKKyAgICAgICAgICAgICAgICBpZiAoKHkgPSBz dHJsZW4ocykpID4gMCkKKyAgICAgICAgICAgICAgICAgIGlmIChwdltuXS5zdmFsID0gKGNoYXIg KiltYWxsb2MoeSsxKSkKKyAgICAgICAgICAgICAgICAgICAgc3RyY3B5KHB2W25dLnN2YWwscyk7 IC8qIHNhZmUgKi8KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKHB2 W1BSTl9XSU5dLnN2YWwpIGZyZWUocHZbUFJOX1dJTl0uc3ZhbCk7CisgICAgICAgICAgICAgICAg Zm9yIChpID0gMDsgaSA8IG5wcmludDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh4 ID09IHByaW50dGFiW2ldLmt3dmFsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzID0gcHJp bnR0YWJbaV0ua3dkOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCh5ID0g c3RybGVuKHMpKSA+IDApCisgICAgICAgICAgICAgICAgICBpZiAocHZbbl0uc3ZhbCA9IChjaGFy ICopbWFsbG9jKHkrMSkpCisgICAgICAgICAgICAgICAgICAgIHN0cmNweShwdltuXS5zdmFsLHMp OyAvKiBzYWZlICovCisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAv KiBOVCAqLworCisgICAgICAgICAgY2FzZSBQUk5fU0VQOiAgICAgICAgICAgICAgICAgLyogL0pP Qi1IRUFERVIgKHNlcGFyYXRvcikgKi8KKyAgICAgICAgICAgIGlmIChwdltuXS5zdmFsKSBmcmVl KHB2W25dLnN2YWwpOworICAgICAgICAgICAgcHZbbl0uc3ZhbCA9IE5VTEw7CisgICAgICAgICAg ICBwdltuXS5pdmFsID0gMTsKKyAgICAgICAgICAgIGlmICghZ2V0dmFsKSBicmVhazsKKyAgICAg ICAgICAgIGlmICgoeCA9IGNtaWZpKCJGaWxlbmFtZSIsIiIsJnMsJnkseHhzdHJpbmcpKSA8IDAp CisgICAgICAgICAgICAgIGdvdG8geHNldHBybjsKKyAgICAgICAgICAgIGlmICh5KSB7CisgICAg ICAgICAgICAgICAgcHJpbnRmKCI/V2lsZGNhcmRzIG5vdCBhbGxvd2VkXG4iKTsKKyAgICAgICAg ICAgICAgICB4ID0gLTk7CisgICAgICAgICAgICAgICAgZ290byB4c2V0cHJuOworICAgICAgICAg ICAgfQorICAgICAgICAgICAgaWYgKCh5ID0gc3RybGVuKHMpKSA+IDApCisgICAgICAgICAgICAg IGlmIChwdltuXS5zdmFsID0gKGNoYXIgKikgbWFsbG9jKHkrMSkpCisgICAgICAgICAgICAgICAg c3RyY3B5KHB2W25dLnN2YWwscyk7ICAgLyogc2FmZSAqLworICAgICAgICAgICAgYnJlYWs7CisK KyAgICAgICAgICBjYXNlIFBSTl9UTU86ICAgICAgICAgICAgICAgICAvKiAvVElNRU9VVDpudW1i ZXIgKi8KKyAgICAgICAgICAgIHB2W25dLml2YWwgPSAwOworICAgICAgICAgICAgaWYgKCFnZXR2 YWwpIGJyZWFrOworICAgICAgICAgICAgaWYgKCh4ID0gY21udW0oIlNlY29uZHMiLCIwIiwxMCwm eSx4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICAgICAgZ290byB4c2V0cHJuOworICAgICAgICAg ICAgaWYgKHkgPiA5OTkpIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIj9Tb3JyeSAtIDk5OSBp cyB0aGUgbWF4aW11bVxuIik7CisgICAgICAgICAgICAgICAgeCA9IC05OworICAgICAgICAgICAg ICAgIGdvdG8geHNldHBybjsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICBwdltu XS5pdmFsID0geTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBQUk5fVFJN OiAgICAgICAgICAgICAgICAgLyogL0VORC1PRi1KT0I6c3RyaW5nICovCisgICAgICAgICAgICBp ZiAocHZbbl0uc3ZhbCkgZnJlZShwdltuXS5zdmFsKTsKKyAgICAgICAgICAgIHB2W25dLnN2YWwg PSBOVUxMOworICAgICAgICAgICAgcHZbbl0uaXZhbCA9IDE7CisgICAgICAgICAgICBpZiAoIWdl dHZhbCkgYnJlYWs7CisgICAgICAgICAgICBpZiAoKHggPSBjbWZsZCgiU3RyaW5nIChlbmNsb3Nl IGluIGJyYWNlcyBpZiBpdCBjb250YWlucyBzcGFjZXMpIiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICIiLCZzLHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgICAgICBnb3RvIHhzZXRwcm47 CisgICAgICAgICAgICBzID0gYnJzdHJpcChzKTsKKyAgICAgICAgICAgIGlmICgoeSA9IHN0cmxl bihzKSkgPiAwKQorICAgICAgICAgICAgICBpZiAocHZbbl0uc3ZhbCA9IChjaGFyICopIG1hbGxv Yyh5KzEpKQorICAgICAgICAgICAgICAgIHN0cmNweShwdltuXS5zdmFsLHMpOyAgIC8qIHNhZmUg Ki8KKyAgICAgICAgICAgIGJyZWFrOworCisjaWZkZWYgQlBSSU5UCisgICAgICAgICAgY2FzZSBQ Uk5fRkxPOgorICAgICAgICAgICAgaWYgKCFnZXR2YWwpIGJyZWFrOworICAgICAgICAgICAgaWYg KCh4ID0gY21rZXkoZmxvdGFiLG5mbG8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi U2VyaWFsIHByaW50ZXItcG9ydCBmbG93IGNvbnRyb2wiLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgInJ0cy9jdHMiLHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgICAgICBnb3RvIHhz ZXRwcm47CisgICAgICAgICAgICBwdltuXS5pdmFsID0geDsKKyAgICAgICAgICAgIGJyZWFrOwor CisjaWZuZGVmIE5PTE9DQUwKKyAgICAgICAgICBjYXNlIFBSTl9TUEQ6CisgICAgICAgICAgICBp ZiAoIWdldHZhbCkgYnJlYWs7CisKKyAgICAgICAgICAgIC8qIFROX0NPTVBPUlQgaGVyZSB0b28/ ICovCisKKyAgICAgICAgICAgIGlmICgoeCA9IGNta2V5KHNwZHRhYiwgICAgICAvKiBTcGVlZCAo bm8gZGVmYXVsdCkgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zcGQsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAiU2VyaWFsIHByaW50ZXItcG9ydCBpbnRlcmZhY2Ugc3BlZWQi LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIjk2MDAiLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgeHhzdHJpbmcpCisgICAgICAgICAgICAgICAgICkgPCAwKQorICAgICAgICAgICAg ICBnb3RvIHhzZXRwcm47CisgICAgICAgICAgICBwdltuXS5pdmFsID0geDsKKyAgICAgICAgICAg IGJyZWFrOworI2VuZGlmIC8qIE5PTE9DQUwgKi8KKworICAgICAgICAgIGNhc2UgUFJOX1BBUjoK KyAgICAgICAgICAgIHB2W25dLml2YWwgPSAwOworICAgICAgICAgICAgaWYgKCFnZXR2YWwpIGJy ZWFrOworICAgICAgICAgICAgaWYgKCh4ID0gY21rZXkocGFydGJsLG5wYXIsIlNlcmlhbCBwcmlu dGVyLXBvcnQgcGFyaXR5IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJub25lIix4eHN0 cmluZykpIDwgMCkKKyAgICAgICAgICAgICAgZ290byB4c2V0cHJuOworICAgICAgICAgICAgcHZb bl0uaXZhbCA9IHg7CisgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBCUFJJTlQgKi8KKwor I2lmZGVmIE9TMgorICAgICAgICAgIGNhc2UgUFJOX0xFTjoKKyAgICAgICAgICAgIGlmICghZ2V0 dmFsKSBicmVhazsKKyAgICAgICAgICAgIGlmICgoeCA9IGNtbnVtKCJQUyBwYWdlIGxlbmd0aCIs ICI2NiIsMTAsJnkseHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgICAgIGdvdG8geHNldHBybjsK KyAgICAgICAgICAgIHB2W25dLml2YWwgPSB5OworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg ICAgICBjYXNlIFBSTl9XSUQ6CisgICAgICAgICAgICBpZiAoIWdldHZhbCkgYnJlYWs7CisgICAg ICAgICAgICBpZiAoKHggPSBjbW51bSgiUFMgcGFnZSB3aWR0aCIsICI4MCIsMTAsJnkseHhzdHJp bmcpKSA8IDApCisgICAgICAgICAgICAgIGdvdG8geHNldHBybjsKKyAgICAgICAgICAgIHB2W25d Lml2YWwgPSB5OworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIFBSTl9DUzoK KyAgICAgICAgICAgICAgcHZbbl0uaXZhbCA9IDA7CisgICAgICAgICAgICAgIGlmICghZ2V0dmFs KSBicmVhazsKKyAgICAgICAgICAgICAgaWYgKCh5ID0gY21rZXkoCisjaWZkZWYgQ0tPVU5JCisg ICAgICAgICAgICAgICAgICAgICAgIHR4cnRhYixudHhydGFiLAorI2Vsc2UgLyogQ0tPVU5JICov CisgICAgICAgICAgICAgICAgICAgICAgIHR0Y3N0YWIsbnRlcm1jLAorI2VuZGlmIC8qIENLT1VO SSAqLworICAgICAgICAgICAgICAgICAgICAgICAiYXV0by1wcmludC9wcmludHNjcmVlbiBjaGFy YWN0ZXItc2V0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgImNwNDM3Iix4eHN0cmluZykpIDwg MCkKKyAgICAgICAgICAgICAgICAgIGdvdG8geHNldHBybjsKKyAgICAgICAgICAgICAgcHZbbl0u aXZhbCA9IHk7CisgICAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIE9TMiAqLworCisgICAg ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHByaW50ZigiP1VuZXhwZWN0ZWQgc3dpdGNoIHZh bHVlIC0gJWRcbiIsY21yZXN1bHQubnJlc3VsdCk7CisgICAgICAgICAgICB4ID0gLTk7CisgICAg ICAgICAgICBnb3RvIHhzZXRwcm47CisgICAgICAgIH0KKyAgICB9CisgICAgbGluZVswXSA9IE5V TDsgICAgICAgICAgICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSBwcmludGVyIG5hbWUgdmFsdWUg Ki8KKyAgICBzd2l0Y2ggKGNtcmVzdWx0LmZjb2RlKSB7ICAgICAgICAgICAvKiBIb3cgZGlkIHdl IGdldCBoZXJlPyAqLworICAgICAgY2FzZSBfQ01PRkk6ICAgICAgICAgICAgICAgICAgICAgIC8q IFRoZXkgdHlwZWQgYSBmaWxlbmFtZSAqLworICAgICAgICBja3N0cm5jcHkobGluZSxjbXJlc3Vs dC5zcmVzdWx0LExJTkJVRlNJWik7IC8qIE5hbWUgKi8KKyAgICAgICAgd2lsZCA9IGNtcmVzdWx0 Lm5yZXN1bHQ7ICAgICAgICAvKiBXaWxkIGZsYWcgKi8KKyAgICAgICAgaWYgKCF0eXBlc2V0KSB7 ICAgICAgICAgICAgICAgICAvKiBBIHByaW50ZXIgbmFtZSB3aXRob3V0IGEgdHlwZSAqLworICAg ICAgICAgICAgcHZbUFJOX05PTl0uaXZhbCA9IDA7ICAgICAgIC8qIGlzIHN1cHBvc2VkIHRvIGJl IHRyZWF0ZWQgYXMgICovCisgICAgICAgICAgICBwdltQUk5fV0lOXS5pdmFsID0gMDsgICAgICAg LyogYSBET1Mgb3IgUGlwZSBwcmludGVyLiAgV2UgICAgKi8KKyAgICAgICAgICAgIHB2W1BSTl9G SUxdLml2YWwgPSAwOyAgICAgICAvKiBjbGVhciBhbGwgdGhlIGZsYWdzIGFuZCBsZXQgICAqLwor ICAgICAgICAgICAgcHZbUFJOX1BJUF0uaXZhbCA9IDA7ICAgICAgIC8qIHRoZSBjb2RlIGJlbG93 IGRvcGUgb3V0IHRoZSAgICovCisgICAgICAgICAgICBwdltQUk5fRE9TXS5pdmFsID0gMDsgICAg ICAgLyogdHlwZS4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgfQorI2lmZGVm IE5UCisgICAgICAgIGVsc2UgaWYgKHB2W1BSTl9XSU5dLml2YWwgJiYgbG9va3VwKF9wcmludHRh YixsaW5lLG5wcmludCwmeSkpIHsKKyAgICAgICAgICAgIC8qIGludmFsaWQgV2luZG93IFF1ZXVl IG5hbWUgKi8KKyAgICAgICAgICAgIHByaW50ZigiP2ludmFsaWQgV2luZG93cyBQcmludGVyIFF1 ZXVlIG5hbWU6IFwiJXNcIlxyXG4iLGxpbmUpOworICAgICAgICAgICAgeCA9IC05OworICAgICAg ICAgICAgZ290byB4c2V0cHJuOworICAgICAgICB9CisjZW5kaWYgLyogTlQgKi8KKyAgICAgICAg aWYgKCh4ID0gY21jZm0oKSkgPCAwKSAgICAgICAgICAvKiBDb25maXJtIHRoZSBjb21tYW5kICov CisgICAgICAgICAgZ290byB4c2V0cHJuOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgX0NN Q0ZNOiAgICAgICAgICAgICAgICAgICAgICAvKiBUaGV5IGVudGVyZWQgdGhlIGNvbW1hbmQgKi8K KyAgICAgICAgaWYgKHB2W1BSTl9ET1NdLml2YWwgPiAwKQorICAgICAgICAgIGNrc3RybmNweShs aW5lLHB2W1BSTl9ET1NdLnN2YWwgPyBwdltQUk5fRE9TXS5zdmFsIDogIiIsTElOQlVGU0laKTsK KyAgICAgICAgZWxzZSBpZiAocHZbUFJOX1dJTl0uaXZhbCA+IDApCisgICAgICAgICAgY2tzdHJu Y3B5KGxpbmUscHZbUFJOX1dJTl0uc3ZhbCA/IHB2W1BSTl9XSU5dLnN2YWwgOiAiIixMSU5CVUZT SVopOworICAgICAgICBlbHNlIGlmIChwdltQUk5fRklMXS5pdmFsID4gMCkKKyAgICAgICAgICBj a3N0cm5jcHkobGluZSxwdltQUk5fRklMXS5zdmFsID8gcHZbUFJOX0ZJTF0uc3ZhbCA6ICIiLExJ TkJVRlNJWik7CisgICAgICAgIGVsc2UgaWYgKHB2W1BSTl9QSVBdLml2YWwgPiAwKQorICAgICAg ICAgIGNrc3RybmNweShsaW5lLHB2W1BSTl9QSVBdLnN2YWwgPyBwdltQUk5fUElQXS5zdmFsIDog IiIsTElOQlVGU0laKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OiAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogQnkgbWlzdGFrZSAqLworICAgICAgICBwcmludGYoIj9VbmV4cGVj dGVkIGZ1bmN0aW9uIGNvZGU6ICVkXG4iLGNtcmVzdWx0LmZjb2RlKTsKKyAgICAgICAgeCA9IC05 OworICAgICAgICBnb3RvIHhzZXRwcm47CisgICAgfQorCisjZWxzZSAgLyogTm8gUFJJTlRTV0kg Ki8KKworICAgIGlmICgoeCA9IGNtb2ZpKCJQcmludGVyIG9yIGZpbGUgbmFtZSIsZGVmbmFtZSwm cyx4eHN0cmluZykpIDwgMCkKKyAgICAgIHJldHVybih4KTsKKyAgICBpZiAoeCA+IDEpIHsKKyAg ICAgICAgcHJpbnRmKCI/RGlyZWN0b3J5IG5hbWVzIG5vdCBhbGxvd2VkXG4iKTsKKyAgICAgICAg cmV0dXJuKC05KTsKKyAgICB9CisgICAgd2hpbGUgKCpzID09IFNQIHx8ICpzID09IEhUKSBzKys7 ICAgLyogVHJpbSBsZWFkaW5nIHdoaXRlc3BhY2UgKi8KKyAgICBja3N0cm5jcHkobGluZSxzLExJ TkJVRlNJWik7ICAgICAgICAvKiBNYWtlIGEgdGVtcG9yYXJ5IHNhZmUgY29weSAqLworICAgIGlm ICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOyAgIC8qIENvbmZpcm0gdGhlIGNvbW1hbmQg Ki8KKyNlbmRpZiAvKiBQUklOVFNXSSAqLworCisjaWZkZWYgSUtTRAorICAgIGlmIChpbnNlcnZl ciAmJiAoaXNndWVzdAorI2lmbmRlZiBOT1NFUlZFUgorICAgICAgICAgICAgICAgICAgICAgfHwg IUVOQUJMRUQoZW5fcHJpKQorI2VuZGlmIC8qIE5PU0VSVkVSICovCisgICAgICAgICAgICAgICAg ICAgICApKSB7CisgICAgICAgIHByaW50ZigiU29ycnksIHByaW50aW5nIGRpc2FibGVkXHJcbiIp OworICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOworICAgIH0KKyNlbmRpZiAvKiBJU0tEICov CisKKyNpZmRlZiBQUklOVFNXSQorI2lmZGVmIEJQUklOVAorICAgIGlmIChwcmludGJpZGkpIHsg ICAgICAgICAgICAgICAgICAgIC8qIElmIGJpZGkgcHJpbnRpbmcgYWN0aXZlICovCisjaWZuZGVm IFVOSVgKKyAgICAgICAgYnBydHN0b3AoKTsgICAgICAgICAgICAgICAgICAgICAvKiBTdG9wIGl0 IGJlZm9yZSBwcm9jZWVkaW5nICovCisjZW5kaWYgLyogVU5JWCAqLworICAgICAgICBwcmludGJp ZGkgPSAwOworICAgIH0KKyAgICBpZiAocHZbUFJOX1NQRF0uaXZhbCA+IDApIHsKKyAgICAgICAg cG9ydHNwZWVkID0gKGxvbmcpIHB2W1BSTl9TUERdLml2YWwgKiAxMEw7CisgICAgICAgIGlmIChw b3J0c3BlZWQgPT0gNzBMKSBwb3J0c3BlZWQgPSA3NUw7CisgICAgfQorICAgIGlmIChwdltQUk5f UEFSXS5pdmFsID4gMCkKKyAgICAgICAgcG9ydHBhcml0eSA9IHB2W1BSTl9QQVJdLml2YWw7Cisg ICAgaWYgKHB2W1BSTl9GTE9dLml2YWwgPiAwKQorICAgICAgICBwb3J0ZmxvdyA9IHB2W1BSTl9G TE9dLml2YWw7CisjZW5kaWYgLyogQlBSSU5UICovCisjZW5kaWYgLyogUFJJTlRTV0kgKi8KKwor ICAgIHMgPSBsaW5lOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFByaW50ZXIgbmFtZSwg aWYgZ2l2ZW4gKi8KKworI2lmZGVmIE9TMk9SVU5JWAorI2lmZGVmIFBSSU5UU1dJCisgICAgaWYg KHB2W1BSTl9QSVBdLml2YWwgPiAwKSB7ICAgICAgICAgLyogL1BJUEUgd2FzIGdpdmVuPyAqLwor ICAgICAgICBwcmludHBpcGUgPSAxOworICAgICAgICBub3ByaW50ZXIgPSAwOworICAgICAgICBp ZiAoKnMgPT0gICd8JykgeyAgICAgICAgICAgICAgIC8qIEl0IG1pZ2h0IHN0aWxsIGhhdmUgYSBw aXBlIHNpZ24gKi8KKyAgICAgICAgICAgIHMrKzsgICAgICAgICAgICAgICAgICAgICAgICAvKiBp ZiBuYW1lIGdpdmUgbGF0ZXIgKi8KKyAgICAgICAgICAgIHdoaWxlICgqcyA9PSBTUCkgICAgICAg ICAgICAvKiBzbyByZW1vdmUgaXQgYW5kIHNwYWNlcyAqLworICAgICAgICAgICAgICBzKys7Cisg ICAgICAgIH0KKyAgICB9IGVsc2UKKyNlbmRpZiAvKiBQUklOVFNXSSAqLworICAgICAgaWYgKCpz ID09ICd8JykgeyAgICAgICAgICAgICAgICAgIC8qIE9yIHBpcGUgaW1wbGllZCBieSBuYW1lPyAq LworICAgICAgICAgIHMrKzsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBvaW50IHBhc3Qg cGlwZSBzaWduICovCisgICAgICAgICAgd2hpbGUgKCpzID09IFNQKSAgICAgICAgICAgICAgLyog R29iYmxlIHdoaXRlc3BhY2UgKi8KKyAgICAgICAgICAgIHMrKzsKKyAgICAgICAgICBpZiAoKnMp IHsKKyAgICAgICAgICAgICAgcHJpbnRwaXBlID0gMTsKKyAgICAgICAgICAgICAgbm9wcmludGVy ID0gMDsKKyAgICAgICAgICB9CisgICAgICB9IGVsc2UgeworICAgICAgICAgIHByaW50cGlwZSA9 IDA7CisgICAgICB9CisKKyNpZmRlZiBQUklOVFNXSQorI2lmZGVmIEJQUklOVAorICAgIGlmIChw cmludHBpcGUgJiYgcHZbUFJOX0JJRF0uaXZhbCA+IDApIHsKKyAgICAgICAgcHJpbnRmKCI/U29y cnksIHBpcGVzIG5vdCBhbGxvd2VkIGZvciBiaWRpcmVjdGlvbmFsIHByaW50ZXJcbiIpOworICAg ICAgICByZXR1cm4oLTkpOworICAgIH0KKyNlbmRpZiAvKiBCUFJJTlQgKi8KKyNlbmRpZiAvKiBQ UklOVFNXSSAqLworI2VuZGlmIC8qIE9TMk9SVU5JWCAqLworCisjaWZkZWYgT1MyCisgICAgaWYg KCBwdltQUk5fQ1NdLml2YWwgPiAwICkgCisgICAgICAgIHBybmNzID0gcHZbUFJOX0NTXS5pdmFs OworCisgICAgaWYgKCBwdltQUk5fUFNdLml2YWwgPiAwICkgeworICAgICAgICB0eHQycHMgPSAx OworICAgICAgICBwc193aWR0aCA9IHB2W1BSTl9XSURdLml2YWwgPD0gMCA/IDgwIDogcHZbUFJO X1dJRF0uaXZhbDsKKyAgICAgICAgcHNfbGVuZ3RoID0gcHZbUFJOX0xFTl0uaXZhbCA8PSAwID8g NjYgOiBwdltQUk5fTEVOXS5pdmFsOworICAgIH0KKyNlbmRpZiAvKiBPUzIgKi8KKworICAgIHkg PSBzdHJsZW4ocyk7ICAgICAgICAgICAgICAgICAgICAgIC8qIExlbmd0aCBvZiBuYW1lIG9mIG5l dyBwcmludCBmaWxlICovCisgICAgaWYgKHkgPiAwCisjaWZkZWYgT1MyCisgICAgICAgICYmICgo eSAhPSAzKSB8fCAoY2tzdHJjbXAocywiUFJOIiwzLDApICE9IDApKQorI2VuZGlmIC8qIE9TMiAq LworICAgICAgICApIHsKKyAgICAgICAgaWYgKHByaW50ZXJuYW1lKSB7ICAgICAgICAgICAgICAv KiBIYWQgYSBwcmludCBmaWxlIGJlZm9yZT8gKi8KKyAgICAgICAgICAgIGZyZWUocHJpbnRlcm5h bWUpOyAgICAgICAgICAvKiBSZW1vdmUgaXRzIG5hbWUgKi8KKyAgICAgICAgICAgIHByaW50ZXJu YW1lID0gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBwcmludGVybmFtZSA9IChjaGFyICopIG1h bGxvYyh5ICsgMSk7IC8qIEFsbG9jYXRlIHNwYWNlIGZvciBpdCAqLworICAgICAgICBpZiAoIXBy aW50ZXJuYW1lKSB7CisgICAgICAgICAgICBwcmludGYoIj9NZW1vcnkgYWxsb2NhdGlvbiBmYWls dXJlXG4iKTsKKyAgICAgICAgICAgIHJldHVybigtOSk7CisgICAgICAgIH0KKyAgICAgICAgc3Ry Y3B5KHByaW50ZXJuYW1lLHMpOyAgICAgICAgICAvKiAoc2FmZSkgQ29weSBuZXcgbmFtZSB0byBu ZXcgc3BhY2UgKi8KKyAgICAgICAgZGVidWcoRjExMCwicHJpbnRlcm5hbWUiLHByaW50ZXJuYW1l LDApOworICAgIH0KKworI2lmZGVmIFBSSU5UU1dJCisgICAgLyogU2V0IHByaW50ZXIgdHlwZSBm cm9tIHN3aXRjaGVzIHRoYXQgd2VyZSBnaXZlbiBleHBsaWNpdGx5ICovCisKKyAgICBpZiAocHZb UFJOX05PTl0uaXZhbCA+IDApIHsgICAgICAgICAvKiBObyBwcmludGVyICovCisgICAgICAgIHBy aW50ZXJ0eXBlID0gUFJUX05PTjsKKyAgICAgICAgbm9wcmludGVyID0gMTsKKyAgICAgICAgcHJp bnRwaXBlID0gMDsKKyAgICB9IGVsc2UgaWYgKHB2W1BSTl9GSUxdLml2YWwgPiAwKSB7ICAvKiBG aWxlICovCisgICAgICAgIHByaW50ZXJ0eXBlID0gUFJUX0ZJTDsKKyAgICAgICAgbm9wcmludGVy ID0gMDsKKyAgICAgICAgcHJpbnRwaXBlID0gMDsKKyAgICB9IGVsc2UgaWYgKHB2W1BSTl9QSVBd Lml2YWwgPiAwKSB7ICAvKiBQaXBlICovCisgICAgICAgIHByaW50ZXJ0eXBlID0gUFJUX1BJUDsK KyAgICAgICAgbm9wcmludGVyID0gMDsKKyAgICAgICAgcHJpbnRwaXBlID0gMTsKKyAgICB9IGVs c2UgaWYgKHB2W1BSTl9XSU5dLml2YWwgPiAwKSB7ICAvKiBXaW5kb3dzIHByaW50IHF1ZXVlICov CisgICAgICAgIHByaW50ZXJ0eXBlID0gUFJUX1dJTjsKKyAgICAgICAgbm9wcmludGVyID0gMDsK KyAgICAgICAgcHJpbnRwaXBlID0gMDsKKyAgICB9IGVsc2UgaWYgKHB2W1BSTl9ET1NdLml2YWwg PiAwKSB7ICAvKiBET1MgZGV2aWNlICovCisgICAgICAgIHByaW50ZXJ0eXBlID0gUFJUX0RPUzsK KyAgICAgICAgbm9wcmludGVyID0gMDsKKyAgICAgICAgcHJpbnRwaXBlID0gMDsKKyAgICB9IGVs c2UgaWYgKGxpbmVbMF0pIHsgICAgICAgICAgICAgICAvKiBOYW1lIGdpdmVuIHdpdGhvdXQgc3dp dGNoZXMgKi8KKyAgICAgICAgbm9wcmludGVyID0gMDsKKyAgICAgICAgcHJpbnRlcnR5cGUgPSBw cmludHBpcGUgPyBQUlRfUElQIDogUFJUX0RPUzsKKyNpZmRlZiBOVAorICAgICAgICAvKiB3YXMg dGhlIGNvbW1hbmQgU0VUIFBSSU5URVIgd2luZG93cy1xdWV1ZSA/ICovCisgICAgICAgIHkgPSBs b29rdXAoX3ByaW50dGFiLGxpbmUsbnByaW50LCZ4KTsKKyAgICAgICAgaWYgKHkgPj0gMCkgewor ICAgICAgICAgICAgcHJpbnRlcnR5cGUgPSBQUlRfV0lOOworICAgICAgICAgICAgaWYgKHB2W1BS Tl9XSU5dLnN2YWwpIGZyZWUocHZbUFJOX1dJTl0uc3ZhbCk7CisgICAgICAgICAgICBpZiAocHJp bnRlcm5hbWUpIHsgICAgICAgICAgLyogSGFkIGEgcHJpbnQgZmlsZSBiZWZvcmU/ICovCisgICAg ICAgICAgICAgICAgZnJlZShwcmludGVybmFtZSk7ICAgICAgLyogUmVtb3ZlIGl0cyBuYW1lICov CisgICAgICAgICAgICAgICAgcHJpbnRlcm5hbWUgPSBOVUxMOworICAgICAgICAgICAgfQorICAg ICAgICAgICAgcHZbUFJOX1dJTl0uc3ZhbCA9IE5VTEw7CisgICAgICAgICAgICBwdltQUk5fV0lO XS5pdmFsID0gMTsKKyAgICAgICAgICAgIHMgPSBwcmludHRhYlt4XS5rd2Q7ICAgICAgICAvKiBH ZXQgZnVsbCBuZXcgbmFtZSAqLworICAgICAgICAgICAgaWYgKCh5ID0gc3RybGVuKHMpKSA+IDAp IHsKKyAgICAgICAgICAgICAgICBtYWtlc3RyKCZwdltQUk5fV0lOXS5zdmFsLHMpOworICAgICAg ICAgICAgICAgIG1ha2VzdHIoJnByaW50ZXJuYW1lLHMpOworICAgICAgICAgICAgICAgIGlmICgh cHJpbnRlcm5hbWUpIHsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/TWVtb3J5IGFsbG9j YXRpb24gZmFpbHVyZVxuIik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybigtOSk7CisgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsInByaW50ZXJuYW1lIixw cmludGVybmFtZSwwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICggeSA9PSAt MiApIHsKKyAgICAgICAgICAgIC8qIEFtYmlndW91cyBQcmludCBRdWV1ZSBOYW1lICovCisgICAg ICAgICAgICBwcmludGYoIj9BbWJpZ3VvdXMgcHJpbnRlciBuYW1lIHByb3ZpZGVkLlxuIik7Cisg ICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICB9CisjZW5kaWYgLyogTlQgKi8KKyAgICB9 CisKKyNpZmRlZiBCUFJJTlQKKyAgICAvKiBQb3J0IHBhcmFtZXRlcnMgbWF5IGJlIHNldCBmb3Ig bm9uLWJpZGkgbW9kZSAqLworCisgICAgcHBvcnRzcGVlZCA9IHBvcnRzcGVlZDsgICAgICAgICAg ICAgLyogU2V0IHBhcmFtZXRlcnMgKi8KKyAgICBwcG9ydHBhcml0eSA9IHBvcnRwYXJpdHk7Cisg ICAgcHBvcnRmbG93ID0gcG9ydGZsb3c7CisKKyAgICBpZiAocHZbUFJOX0JJRF0uaXZhbCA+IDAp IHsgICAgICAgICAvKiBCaWRpcmVjdGlvbmFsICovCisjaWZkZWYgVU5JWAorICAgICAgICBwcmlu dGJpZGkgPSAxOyAgICAgICAgICAgICAgICAgIC8qIChqdXN0IHRvIHRlc3QgcGFyc2luZy4uLikg Ki8KKyNlbHNlCisgICAgICAgIHByaW50YmlkaSA9IGJwcnRzdGFydCgpOyAgICAgICAgLyogU3Rh cnQgYmlkaXJlY3Rpb25hbCBwcmludGVyICovCisjZW5kaWYgLyogVU5JWCAqLworICAgICAgICBy ZXR1cm4oc3VjY2VzcyA9IHByaW50YmlkaSk7CisgICAgfSBlbHNlCisgICAgICBwcmludGJpZGkg PSAwOyAgICAgICAgICAgICAgICAgICAgLyogTm90IEJQUklOVEVSLCB1bnNldCBmbGFnICovCisj ZW5kaWYgLyogQlBSSU5UICovCisKKyAgICBpZiAocHZbUFJOX1RNT10uaXZhbCA+IC0xKSB7ICAg ICAgICAvKiBUYWtlIGNhcmUgb2YgdGltZW91dCAqLworICAgICAgICBwcmludHRpbW8gPSBwdltQ Uk5fVE1PXS5pdmFsOworICAgIH0KKyAgICBpZiAocHZbUFJOX1RSTV0uaXZhbCA+IDApIHsgICAg ICAgICAvKiBUZXJtaW5hdGlvbiBzdHJpbmcgKi8KKyAgICAgICAgaWYgKHByaW50dGVybSkgewor ICAgICAgICAgICAgZnJlZShwcmludHRlcm0pOworICAgICAgICAgICAgcHJpbnR0ZXJtID0gTlVM TDsKKyAgICAgICAgfQorICAgICAgICBpZiAocHZbUFJOX1RSTV0uc3ZhbCkKKyAgICAgICAgICBt YWtlc3RyKCZwcmludHRlcm0scHZbUFJOX1RSTV0uc3ZhbCk7CisgICAgfQorICAgIGlmIChwdltQ Uk5fU0VQXS5pdmFsID4gMCkgeyAgICAgICAgIC8qIGFuZCBzZXBhcmF0b3IgZmlsZSAqLworICAg ICAgICBpZiAocHJpbnRzZXApIHsKKyAgICAgICAgICAgIGZyZWUocHJpbnRzZXApOworICAgICAg ICAgICAgcHJpbnRzZXAgPSBOVUxMOworICAgICAgICB9CisgICAgICAgIGlmIChwdltQUk5fU0VQ XS5zdmFsKQorICAgICAgICAgIG1ha2VzdHIoJnByaW50c2VwLHB2W1BSTl9TRVBdLnN2YWwpOwor ICAgIH0KKyNlbmRpZiAvKiBQUklOVFNXSSAqLworCisjaWZkZWYgVU5JWE9ST1NLCisgICAgaWYg KCFwcmludHBpcGUKKyNpZmRlZiBQUklOVFNXSQorICAgICAgICAmJiAhbm9wcmludGVyCisjZW5k aWYgLyogUFJJTlRTV0kgKi8KKyAgICAgICAgKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBGaWxlIC0gY2hlY2sgYWNjZXNzICovCisgICAgICAgIGlmICh6Y2hrbyhzKSA8IDApIHsK KyAgICAgICAgICAgIHByaW50ZigiP0FjY2VzcyBkZW5pZWQgLSAlc1xuIixzKTsKKyAgICAgICAg ICAgIHggPSAtOTsKKyAgICAgICAgICAgIGdvdG8geHNldHBybjsKKyAgICAgICAgfQorICAgIH0K KyNlbmRpZiAvKiBVTklYT1JPU0sgKi8KKworICAgIHggPSAxOyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIFJldHVybiBjb2RlICovCisKKyAgeHNldHBybjogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBDb21tb24gZXhpdCAqLworI2lmZGVmIFBSSU5UU1dJCisgICAgZm9y IChpID0gMDsgaSA8PSBQUk5fTUFYOyBpKyspIHsgICAgLyogRnJlZSBtYWxsb2MnZCBtZW1vcnkg Ki8KKyAgICAgICAgaWYgKHB2W2ldLnN2YWwpCisgICAgICAgICAgZnJlZShwdltpXS5zdmFsKTsK KyAgICB9CisjZW5kaWYgLyogUFJJTlRTV0kgKi8KKyAgICBzdWNjZXNzID0gKHggPiAwKSA/IDEg OiAwOworICAgIHJldHVybih4KTsKK30KKworI2lmZGVmIEFOWVNTSAorLyogVGhlIFNFVCBTU0gg Y29tbWFuZCAqLworCisjZGVmaW5lIFNTSF9DTUQgIDEgICAgICAgICAgICAgICAgICAgICAgLyog U0VUIFNTSCBDT01NQU5EICovCisKKyNpZmRlZiBTU0hCVUlMVElOICAgICAgICAgICAgICAgICAg ICAgICAvKiBCdWlsdC1pbiBTRVQgU1NIIG9wdGlvbnMgKi8KKyNkZWZpbmUgU1NIX0FERCAgMiAg ICAgICAgICAgICAgICAgICAgICAvKiBBZGQgKi8KKyNkZWZpbmUgU1NIX0FGVyAgMyAgICAgICAg ICAgICAgICAgICAgICAvKiBBZ2VudC1mb3J3YXJkaW5nICovCisjZGVmaW5lIFNTSF9DSEkgIDQg ICAgICAgICAgICAgICAgICAgICAgLyogQ2hlY2sgSG9zdCBJUCAqLworI2RlZmluZSBTU0hfWEZX ICA1ICAgICAgICAgICAgICAgICAgICAgIC8qIFgxMS1mb3J3YXJkaW5nICovCisjZGVmaW5lIFNT SF9EWUYgIDYgICAgICAgICAgICAgICAgICAgICAgLyogRHluYW1pYyBmb3J3YXJkaW5nICovCisj ZGVmaW5lIFNTSF9HV1AgIDcgICAgICAgICAgICAgICAgICAgICAgLyogR2F0ZXdhIHBvcnRncyAq LworI2RlZmluZSBTU0hfR1NTICA4ICAgICAgICAgICAgICAgICAgICAgIC8qIEdTU0FQSSAqLwor I2RlZmluZSBTU0hfS0JEICA5ICAgICAgICAgICAgICAgICAgICAgIC8qIEtCRCBJbnRlcmFjdGl2 ZSBEZXZpY2VzICovCisjZGVmaW5lIFNTSF9LNCAgMTAgICAgICAgICAgICAgICAgICAgICAgLyog S2VyYmVyb3MgNCAqLworI2RlZmluZSBTU0hfSzUgIDExICAgICAgICAgICAgICAgICAgICAgIC8q IEtlcmJlcm9zIDUgKi8KKyNkZWZpbmUgU1NIX1NISyAxMiAgICAgICAgICAgICAgICAgICAgICAv KiBTdHJpY3QgSG9zdCBLZXkgQ2hlY2sgKi8KKyNkZWZpbmUgU1NIX1YxICAxMyAgICAgICAgICAg ICAgICAgICAgICAvKiBTU0ggVjEgKi8KKyNkZWZpbmUgU1NIX1YyICAxNCAgICAgICAgICAgICAg ICAgICAgICAvKiBTU0ggVjIgKi8KKyNkZWZpbmUgU1NIX1BSUCAxNSAgICAgICAgICAgICAgICAg ICAgICAvKiBQcml2ZCBwb3J0ICovCisjZGVmaW5lIFNTSF9DTVAgMTYgICAgICAgICAgICAgICAg ICAgICAgLyogQ29tcHJlc3Npb24gKi8KKyNkZWZpbmUgU1NIX1hBTCAxNyAgICAgICAgICAgICAg ICAgICAgICAvKiBYIEF1dGggTG9jYXRpb24gKi8KKyNkZWZpbmUgU1NIX1NISCAxOCAgICAgICAg ICAgICAgICAgICAgICAvKiBRdWlldCAqLworI2RlZmluZSBTU0hfVkVSIDE5ICAgICAgICAgICAg ICAgICAgICAgIC8qIFZlcnNpb24gKi8KKyNkZWZpbmUgU1NIX1ZSQiAyMCAgICAgICAgICAgICAg ICAgICAgICAvKiBWZXJib3NpdHkgbGV2ZWwgKi8KKyNkZWZpbmUgU1NIX0lERiAyMSAgICAgICAg ICAgICAgICAgICAgICAvKiBJZGVudGl0eSBGaWxlICovCisjZGVmaW5lIFNTSF9DRkcgMjIgICAg ICAgICAgICAgICAgICAgICAgLyogVXNlIE9wZW5TU0ggQ29uZmlnICovCisjZGVmaW5lIFNTSF9I QlQgMjMgICAgICAgICAgICAgICAgICAgICAgLyogSGVhcnRiZWF0IEludGVydmFsICovCisjZW5k aWYgLyogU1NIQlVJTFRJTiAqLworCitzdGF0aWMgc3RydWN0IGtleXRhYiBzc2h0YWJbXSA9IHsg ICAgICAgLyogU0VUIFNTSCBjb21tYW5kIHRhYmxlICovCisjaWZkZWYgU1NIQlVJTFRJTgorICAg IHsgImFnZW50LWZvcndhcmRpbmciLCAgICAgICAgU1NIX0FGVywgIDAgfSwKKyAgICB7ICJjaGVj ay1ob3N0LWlwIiwgICAgICAgICAgIFNTSF9DSEksICAwIH0sCisgICAgeyAiY29tcHJlc3Npb24i LCAgICAgICAgICAgICBTU0hfQ01QLCAgMCB9LAorICAgIHsgImR5bmFtaWMtZm9yd2FyZGluZyIs ICAgICAgU1NIX0RZRiwgIDAgfSwKKyAgICB7ICJnYXRld2F5LXBvcnRzIiwgICAgICAgICAgIFNT SF9HV1AsICAwIH0sCisgICAgeyAiZ3NzYXBpIiwgICAgICAgICAgICAgICAgICBTU0hfR1NTLCAg MCB9LAorICAgIHsgImhlYXJ0YmVhdC1pbnRlcnZhbCIsICAgICAgU1NIX0hCVCwgIDAgfSwKKyAg ICB7ICJpZGVudGl0eS1maWxlIiwgICAgICAgICAgIFNTSF9JREYsICAwIH0sCisjaWZkZWYgQ09N TUVOVAorICAgIHsgImtiZC1pbnRlcmFjdGl2ZS1kZXZpY2VzIiwgU1NIX0tCRCwgIDAgfSwKKyNl bmRpZiAvKiBDT01NRU5UICovCisgICAgeyAiazQiLCAgICAgICAgICAgICAgICAgICAgICBTU0hf SzQsIENNX0lOViB9LAorICAgIHsgIms1IiwgICAgICAgICAgICAgICAgICAgICAgU1NIX0s1LCBD TV9JTlYgfSwKKyAgICB7ICJrZXJiZXJvczQiLCAgICAgICAgICAgICAgIFNTSF9LNCwgICAwIH0s CisgICAgeyAia2VyYmVyb3M1IiwgICAgICAgICAgICAgICBTU0hfSzUsICAgMCB9LAorICAgIHsg ImtyYjQiLCAgICAgICAgICAgICAgICAgICAgU1NIX0s0LCBDTV9JTlYgfSwKKyAgICB7ICJrcmI1 IiwgICAgICAgICAgICAgICAgICAgIFNTSF9LNSwgQ01fSU5WIH0sCisgICAgeyAicHJpdmlsZWdl ZC1wb3J0IiwgICAgICAgICBTU0hfUFJQLCAgMCB9LAorICAgIHsgInF1aWV0IiwgICAgICAgICAg ICAgICAgICAgU1NIX1NISCwgIDAgfSwKKyAgICB7ICJzdHJpY3QtaG9zdC1rZXktY2hlY2siLCAg IFNTSF9TSEssICAwIH0sCisgICAgeyAidXNlLW9wZW5zc2gtY29uZmlnIiwgICAgICBTU0hfQ0ZH LCAgMCB9LAorICAgIHsgInYxIiwgICAgICAgICAgICAgICAgICAgICAgU1NIX1YxLCAgIDAgfSwK KyAgICB7ICJ2MiIsICAgICAgICAgICAgICAgICAgICAgIFNTSF9WMiwgICAwIH0sCisgICAgeyAi dmVyYm9zZSIsICAgICAgICAgICAgICAgICBTU0hfVlJCLCAgMCB9LAorICAgIHsgInZlcnNpb24i LCAgICAgICAgICAgICAgICAgU1NIX1ZFUiwgIDAgfSwKKyAgICB7ICJ4MTEtZm9yd2FyZGluZyIs ICAgICAgICAgIFNTSF9YRlcsICAwIH0sCisgICAgeyAieGF1dGgtbG9jYXRpb24iLCAgICAgICAg ICBTU0hfWEFMLCAgMCB9LAorI2Vsc2UKKyNpZmRlZiBTU0hDTUQKKyAgICB7ICJjb21tYW5kIiwg ICAgICAgICAgICAgICAgIFNTSF9DTUQsICAwIH0sCisjZW5kaWYgLyogU1NIQ01EICovCisjZW5k aWYgLyogU1NIQlVJTFRJTiAqLworICAgIHsgIiIsIDAsIDAgfQorfTsKK3N0YXRpYyBpbnQgbnNz aHRhYiA9IChzaXplb2Yoc3NodGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSkgLSAxOworCisj aWZkZWYgU1NIQlVJTFRJTgorc3RhdGljIHN0cnVjdCBrZXl0YWIgc3NodmVyW10gPSB7ICAgICAg IC8qIFNFVCBTU0ggVkVSU0lPTiBjb21tYW5kIHRhYmxlICovCisgICAgeyAiMSIsICAgICAgICAg IDEsICAwIH0sCisgICAgeyAiMiIsICAgICAgICAgIDIsICAwIH0sCisgICAgeyAiYXV0b21hdGlj IiwgIDAsICAwIH0KK307CisKKyNkZWZpbmUgU1NIQV9DUlMgICAxCisjZGVmaW5lIFNTSEFfRFNB ICAgMgorI2RlZmluZSBTU0hBX0dTUyAgIDMKKyNkZWZpbmUgU1NIQV9IT1MgICA0CisjZGVmaW5l IFNTSEFfS0JEICAgNQorI2RlZmluZSBTU0hBX0s0ICAgIDYKKyNkZWZpbmUgU1NIQV9LNSAgICA3 CisjZGVmaW5lIFNTSEFfUFNXICAgOAorI2RlZmluZSBTU0hBX1BLICAgIDkKKyNkZWZpbmUgU1NI QV9TS0UgIDEwCisjZGVmaW5lIFNTSEFfVElTICAxMQorI2RlZmluZSBTU0hBX0VYVCAgMTIKKyNk ZWZpbmUgU1NIQV9TUlAgIDEzCisKK3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIHNzaDJhdXRbXSA9IHsg ICAgICAvKiBTRVQgU1NIIFYyIEFVVEggY29tbWFuZCB0YWJsZSAqLworICAgIHsgImV4dGVybmFs LWtleXgiLCAgICAgIFNTSEFfRVhULCAwIH0sCisgICAgeyAiZ3NzYXBpIiwgICAgICAgICAgICAg U1NIQV9HU1MsIDAgfSwKKyAgICB7ICJob3N0YmFzZWQiLCAgICAgICAgICBTU0hBX0hPUywgMCB9 LAorICAgIHsgImtleWJvYXJkLWludGVyYWN0aXZlIiwgIFNTSEFfS0JELCAwIH0sCisgICAgeyAi cGFzc3dvcmQiLCAgICAgICAgICAgU1NIQV9QU1csIDAgfSwKKyAgICB7ICJwdWJsaWNrZXkiLCAg ICAgICAgICBTU0hBX1BLLCAgMCB9LAorICAgIHsgInNycC1nZXgtc2hhMSIsICAgICAgIFNTSEFf U1JQLCAwIH0sCisgICAgeyAiIiwgMCwgMCB9Cit9Oworc3RhdGljIGludCBuc3NoMmF1dCA9IChz aXplb2Yoc3NoMmF1dCkgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpIC0gMTsKKworI2RlZmluZSBT U0hGX0xDTCAgIDEKKyNkZWZpbmUgU1NIRl9STVQgICAyCisKK3N0YXRpYyBzdHJ1Y3Qga2V5dGFi IGFkZGZ3ZFtdID0geyAgICAgICAvKiBTRVQgU1NIIEFERCBjb21tYW5kIHRhYmxlICovCisgICAg eyAibG9jYWwtcG9ydC1mb3J3YXJkIiwgIFNTSEZfTENMLCAwIH0sCisgICAgeyAicmVtb3RlLXBv cnQtZm9yd2FyZCIsIFNTSEZfUk1ULCAwIH0sCisgICAgeyAiIiwgMCwgMCB9Cit9Oworc3RhdGlj IGludCBuYWRkZndkID0gKHNpemVvZihhZGRmd2QpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKSAt IDE7CisKKyNkZWZpbmUgU1NIMV9DSUYgICAxCisjZGVmaW5lIFNTSDFfR05IICAgMgorI2RlZmlu ZSBTU0gxX1VOSCAgIDMKKyNkZWZpbmUgU1NIMV9LNTQgICA0CisKKyNkZWZpbmUgU1NIMl9DSUYg ICAxCisjZGVmaW5lIFNTSDJfR05IICAgMgorI2RlZmluZSBTU0gyX1VOSCAgIDMKKyNkZWZpbmUg U1NIMl9BUksgICA0CisjZGVmaW5lIFNTSDJfSEtBICAgNQorI2RlZmluZSBTU0gyX01BQyAgIDYK KyNkZWZpbmUgU1NIMl9BVVQgICA3CisKK3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIHNzaHYxdGFiW10g PSB7ICAgICAvKiBTRVQgU1NIIFYxIGNvbW1hbmQgdGFibGUgKi8KKyAgICB7ICJjaXBoZXIiLCAg ICAgICAgICAgICAgICAgIFNTSDFfQ0lGLCAwIH0sCisgICAgeyAiZ2xvYmFsLWtub3duLWhvc3Rz LWZpbGUiLCBTU0gxX0dOSCwgMCB9LAorICAgIHsgIms1LXJldXNlLWs0LW1lc3NhZ2VzIiwgICAg U1NIMV9LNTQsIENNX0lOViB9LAorICAgIHsgInVzZXIta25vd24taG9zdHMtZmlsZSIsICAgU1NI MV9VTkgsIDAgfSwKKyAgICB7ICIiLCAwLCAwIH0KK307CitzdGF0aWMgaW50IG5zc2h2MXRhYiA9 IChzaXplb2Yoc3NodjF0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKSAtIDE7CisKK3N0YXRp YyBzdHJ1Y3Qga2V5dGFiIHNzaHYydGFiW10gPSB7ICAgICAvKiBTRVQgU1NIIFYyIGNvbW1hbmQg dGFibGUgKi8KKyAgICB7ICJhdXRoZW50aWNhdGlvbiIsICAgICAgICAgIFNTSDJfQVVULCAwIH0s CisgICAgeyAiYXV0by1yZWtleSIsICAgICAgICAgICAgICBTU0gyX0FSSywgMCB9LAorICAgIHsg ImNpcGhlcnMiLCAgICAgICAgICAgICAgICAgU1NIMl9DSUYsIDAgfSwKKyAgICB7ICJnbG9iYWwt a25vd24taG9zdHMtZmlsZSIsIFNTSDJfR05ILCAwIH0sCisgICAgeyAiaG9zdGtleS1hbGdvcml0 aG1zIiwgICAgICBTU0gyX0hLQSwgMCB9LAorICAgIHsgIm1hY3MiLCAgICAgICAgICAgICAgICAg ICAgU1NIMl9NQUMsIDAgfSwKKyAgICB7ICJ1c2VyLWtub3duLWhvc3RzLWZpbGUiLCAgIFNTSDJf VU5ILCAwIH0sCisgICAgeyAiIiwgMCwgMCB9Cit9Oworc3RhdGljIGludCBuc3NodjJ0YWIgPSAo c2l6ZW9mKHNzaHYydGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSkgLSAxOworCisjZGVmaW5l IFNTSENfM0RFUyAxICAgICAgICAgICAgICAgICAgICAgLyogM0RFUyAqLworI2RlZmluZSBTU0hD XzNDQkMgMiAgICAgICAgICAgICAgICAgICAgIC8qIDNERVMtQ0JDICovCisjZGVmaW5lIFNTSENf QTEyOCAzICAgICAgICAgICAgICAgICAgICAgLyogQUVTMTI4LUNCQyAqLworI2RlZmluZSBTU0hD X0ExOTIgNCAgICAgICAgICAgICAgICAgICAgIC8qIEFFUzE5Mi1DQkMgKi8KKyNkZWZpbmUgU1NI Q19BMjU2IDUgICAgICAgICAgICAgICAgICAgICAvKiBBRVMyNTYtQ0JDICovCisjZGVmaW5lIFNT SENfQVJDNCA2ICAgICAgICAgICAgICAgICAgICAgLyogQVJDRk9VUiAqLworI2RlZmluZSBTU0hD X0ZJU0ggNyAgICAgICAgICAgICAgICAgICAgIC8qIEJMT1dGSVNIICovCisjZGVmaW5lIFNTSENf QkNCQyA5ICAgICAgICAgICAgICAgICAgICAgLyogQkxPV0ZJU0gtQ0JDICovCisjZGVmaW5lIFNT SENfQzEyOCA4ICAgICAgICAgICAgICAgICAgICAgLyogQ0FTVDEyOC1DQkMgKi8KKyNkZWZpbmUg U1NIQ18xREVTIDEwICAgICAgICAgICAgICAgICAgICAvKiBERVMgKi8KKworc3RhdGljIHN0cnVj dCBrZXl0YWIgc3NoMWNpcGhlcnNbXSA9IHsKKyAgICB7ICIzZGVzIiwgICAgICAgICBTU0hDXzNE RVMsIDAgfSwKKyAgICB7ICJibG93ZmlzaCIsICAgICBTU0hDX0ZJU0gsIDAgfSwKKyAgICB7ICJk ZXMiLCAgICAgICAgICBTU0hDXzFERVMsIDAgfSwKKyAgICB7ICIiLCAwLCAwIH0KK307CitzdGF0 aWMgaW50IG5zc2gxY2lwaGVycyA9IChzaXplb2Yoc3NoMWNpcGhlcnMpIC8gc2l6ZW9mKHN0cnVj dCBrZXl0YWIpKSAtIDE7CisKK3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIHNzaDJjaXBoZXJzW10gPSB7 ICAvKiBTRVQgU1NIIFYyIENJUEhFUlMgY29tbWFuZCB0YWJsZSAqLworICAgIHsgIjNkZXMtY2Jj IiwgICAgICAgIFNTSENfM0RFUywgMCB9LAorICAgIHsgImFlczEyOC1jYmMiLCAgICAgIFNTSENf QTEyOCwgMCB9LAorICAgIHsgImFlczE5Mi1jYmMiLCAgICAgIFNTSENfQTE5MiwgMCB9LAorICAg IHsgImFlczI1Ni1jYmMiLCAgICAgIFNTSENfQTI1NiwgMCB9LAorICAgIHsgImFyY2ZvdXIiLCAg ICAgICAgIFNTSENfQVJDNCwgMCB9LAorICAgIHsgImJsb3dmaXNoLWNiYyIsICAgIFNTSENfRklT SCwgMCB9LAorICAgIHsgImNhc3QxMjgtY2JjIiwgICAgIFNTSENfQzEyOCwgMCB9LAorICAgIHsg InJpam5kYWVsMTI4LWNiYyIsIFNTSENfQTEyOCwgMCB9LAorICAgIHsgInJpam5kYWVsMTkyLWNi YyIsIFNTSENfQTE5MiwgMCB9LAorICAgIHsgInJpam5kYWVsMjU2LWNiYyIsIFNTSENfQTI1Niwg MCB9LAorICAgIHsgIiIsIDAsIDAgfQorfTsKK3N0YXRpYyBpbnQgbnNzaDJjaXBoZXJzID0gKHNp emVvZihzc2gyY2lwaGVycykgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpIC0gMTsKKworI2RlZmlu ZSBTU0hNX1NIQSAgICAgICAgMSAgICAgICAgICAgICAgIC8qIEhNQUMtU0hBMSAqLworI2RlZmlu ZSBTU0hNX1NIQV85NiAgICAgMiAgICAgICAgICAgICAgIC8qIEhNQUMtU0hBMS05NiAqLworI2Rl ZmluZSBTU0hNX01ENSAgICAgICAgMyAgICAgICAgICAgICAgIC8qIEhNQUMtTUQ1ICovCisjZGVm aW5lIFNTSE1fTUQ1Xzk2ICAgICA0ICAgICAgICAgICAgICAgLyogSE1BQy1NRDUtOTYgKi8KKyNk ZWZpbmUgU1NITV9SSVBFICAgICAgIDUgICAgICAgICAgICAgICAvKiBITUFDLVJJUEVNRDE2MCAq LworCitzdGF0aWMgc3RydWN0IGtleXRhYiBzc2gybWFjc1tdID0geyAgICAgLyogU0VUIFNTSCBW MiBNQUNTIGNvbW1hbmQgdGFibGUgKi8KKyAgICB7ICJobWFjLW1kNSIsICAgICAgIFNTSE1fTUQ1 LCAgICAwIH0sCisgICAgeyAiaG1hYy1tZDUtOTYiLCAgICBTU0hNX01ENV85NiwgMCB9LAorICAg IHsgImhtYWMtcmlwZW1kMTYwIiwgU1NITV9SSVBFLCAgIDAgfSwKKyAgICB7ICJobWFjLXNoYTEi LCAgICAgIFNTSE1fU0hBLCAgICAwIH0sCisgICAgeyAiaG1hYy1zaGExLTk2IiwgICBTU0hNX1NI QV85NiwgMCB9LAorICAgIHsgIiIsIDAsIDAgfQorfTsKK3N0YXRpYyBpbnQgbnNzaDJtYWNzID0g KHNpemVvZihzc2gybWFjcykgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpIC0gMTsKKworc3RhdGlj IHN0cnVjdCBrZXl0YWIgdGd0cGFzc1tdID0geworICAgIHsgInRndC1wYXNzaW5nIiwgMSwgMCwg fSwKKyAgICB7ICIiLCAwLCAwIH0KK307CitzdGF0aWMgaW50IG50Z3RwYXNzID0gKHNpemVvZih0 Z3RwYXNzKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSkgLSAxOworCitzdGF0aWMgc3RydWN0IGtl eXRhYiBnc3NhcGl0YWJbXSA9IHsKKyAgICB7ICJkZWxlZ2F0ZS1jcmVkZW50aWFscyIsIDEsIDAs IH0sCisgICAgeyAia2V5LWV4Y2hhbmdlIiwgICAgICAgICAyLCBDTV9JTlYsIH0sCisgICAgeyAi IiwgMCwgMCB9Cit9Oworc3RhdGljIGludCBuZ3NzYXBpdGFiID0gKHNpemVvZihnc3NhcGl0YWIp IC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKSAtIDE7CisKKyNkZWZpbmUgSEtBX1JTQSAxCisjZGVm aW5lIEhLQV9EU1MgMgorCitzdGF0aWMgc3RydWN0IGtleXRhYiBoa2F0YWJbXSA9IHsKKyAgICB7 ICJzc2gtZHNzIiwgSEtBX0RTUywgMCwgfSwKKyAgICB7ICJzc2gtcnNhIiwgSEtBX1JTQSwgMCwg fSwKKyAgICB7ICIiLCAwLCAwIH0KK307CitzdGF0aWMgaW50IG5oa2F0YWIgPSAoc2l6ZW9mKGhr YXRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpIC0gMTsKKworaW50ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIFNFVCBTU0ggdmFyaWFibGVzICovCisgIHNzaF9hZncg PSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWdlbnQgZm9yd2FyZGluZyAqLworICBz c2hfeGZ3ID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHgxMSBmb3J3YXJkaW5nICAg Ki8KKyAgc3NoX3BycCA9IFNFVF9PRkYsICAgICAgICAgICAgICAgICAgICAvKiBwcml2aWxlZ2Vk IHBvcnRzICovCisgIHNzaF9jbXAgPSAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29t cHJlc3Npb24gKi8KKyAgc3NoX3NoaCA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBx dWlldCAgICAgICAqLworICBzc2hfdmVyID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IHByb3RvY29sIHZlcnNpb24gKGF1dG8sMSwyKSAqLworICBzc2hfdnJiID0gMiwgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIFJlcG9ydCBlcnJvcnMgKi8KKyAgc3NoX2Noa2lwID0gMCwgICAg ICAgICAgICAgICAgICAgICAgICAvKiBTU0ggQ2hlY2sgSG9zdCBJUCBmbGFnICovCisgIHNzaF9n d3AgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZ2F0ZXdheSBwb3J0cyAqLworICBz c2hfZHlmID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGR5bmFtaWMgZm9yd2FyZGlu ZyAqLworICBzc2hfZ3NkID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGdzc2FwaSBk ZWxlZ2F0ZSBjcmVkZW50aWFscyAqLworICBzc2hfazR0Z3QgPSAwLCAgICAgICAgICAgICAgICAg ICAgICAgIC8qIGs0IHRndCBwYXNzaW5nICovCisgIHNzaF9rNXRndCA9IDAsICAgICAgICAgICAg ICAgICAgICAgICAgLyogazUgdGd0IHBhc3NpbmcgKi8KKyAgc3NoX3NoayA9IDIsICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBTdHJpY3QgaG9zdCBrZXkgKG5vLCB5ZXMsIGFzaykgKi8KKyAg c3NoMl9hcmsgPSAxLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBdXRvIHJlLWtleSAqLwor ICBzc2hfY2FzID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbW1hbmQgYXMgc3Vi c3lzICovCisgIHNzaF9jZmcgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdXNlIE9w ZW5TU0ggY29uZmlnPyAqLworICBzc2hfZ2t4ID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIGdzc2FwaSBrZXkgZXhjaGFuZ2UgKi8KKyAgc3NoX2s1X2lzX2s0ID0gMSwgICAgICAgICAg ICAgICAgICAgICAvKiBzb21lIFNTSCB2MSB1c2Ugc2FtZSBjb2RlcyAqLworICBzc2hfaGJ0ID0g MCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGhlYXJ0YmVhdCAoc2Vjb25kcykgKi8KKyAg c3NoX2R1bW15ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBib3R0b20gb2YgbGlzdCAq LworCitjaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVGhlIGZvbGxv d2luZyBhcmUgdG8gYmUgbWFsbG9jJ2QgKi8KKyAgKiBzc2gxX2NpZiA9IE5VTEwsICAgICAgICAg ICAgICAgICAgICAvKiB2MSBjaXBoZXIgKi8KKyAgKiBzc2gyX2NpZiA9IE5VTEwsICAgICAgICAg ICAgICAgICAgICAvKiB2MiBjaXBoZXIgbGlzdCAqLworICAqIHNzaDJfbWFjID0gTlVMTCwgICAg ICAgICAgICAgICAgICAgIC8qIHYyIG1hYyBsaXN0ICovCisgICogc3NoMl9hdXRoID0gTlVMTCwg ICAgICAgICAgICAgICAgICAgLyogdjIgYXV0aGVudGljYXRpb24gbGlzdCAqLworICAqIHNzaF9o c3QgPSBOVUxMLCAgICAgICAgICAgICAgICAgICAgIC8qIGhvc3RuYW1lICovCisgICogc3NoX3By dCA9IE5VTEwsICAgICAgICAgICAgICAgICAgICAgLyogcG9ydC9zZXJ2aWNlICovCisgICogc3No X2NtZCA9IE5VTEwsICAgICAgICAgICAgICAgICAgICAgLyogY29tbWFuZCB0byBleGVjdXRlICov CisgICogc3NoX3hhbCA9IE5VTEwsICAgICAgICAgICAgICAgICAgICAgLyogeGF1dGgtbG9jYXRp b24gKi8KKyAgKiBzc2gxX2duaCA9IE5VTEwsICAgICAgICAgICAgICAgICAgICAvKiB2MSBnbG9i YWwga25vd24gaG9zdHMgZmlsZSAqLworICAqIHNzaDFfdW5oID0gTlVMTCwgICAgICAgICAgICAg ICAgICAgIC8qIHYxIHVzZXIga25vd24gaG9zdHMgZmlsZSAqLworICAqIHNzaDJfZ25oID0gTlVM TCwgICAgICAgICAgICAgICAgICAgIC8qIHYyIGdsb2JhbCBrbm93biBob3N0cyBmaWxlICovCisg ICogc3NoMl91bmggPSBOVUxMLCAgICAgICAgICAgICAgICAgICAgLyogdjIgdXNlciBrbm93biBo b3N0cyBmaWxlICovCisgICogc3NoMl9oa2EgPSBOVUxMLCAgICAgICAgICAgICAgICAgICAgLyog SG9zdCBLZXkgQWxnb3JpdGhtcyAqLworICAqIHh4eF9kdW1teSA9IE5VTEw7CisKK2NoYXIgKiBz c2hfaWRmWzMyXSA9IHsgICAgICAgICAgICAgICAgICAvKiBJZGVudGl0eSBmaWxlIGxpc3QgKi8K KyAgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLAorICBOVUxMLE5VTEws TlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsCisgIE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVM TCxOVUxMLE5VTEwsTlVMTCwKKyAgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxO VUxMCit9OworY2hhciAqIHNzaF90bXBbMzJdID0geyAgICAgICAgICAgICAgICAgIC8qIFRlbXAg aWRlbnRpdHkgZmlsZSBsaXN0ICovCisgIE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5V TEwsTlVMTCwKKyAgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLAorICBO VUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsCisgIE5VTEwsTlVMTCxOVUxM LE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTAorfTsKK2ludCBzc2hfaWRmX24gPSAwOworCitleHRl cm4gaW50ICAgIHNzaF9wZl9sY2xfbiwKKyAgICAgICAgICAgICAgc3NoX3BmX3JtdF9uOworZXh0 ZXJuIHN0cnVjdCBzc2hfcGYgc3NoX3BmX2xjbFszMl07ICAgIC8qIFBvcnQgZm9yd2FyZGluZyBz dHJ1Y3RzICovCitleHRlcm4gc3RydWN0IHNzaF9wZiBzc2hfcGZfcm10WzMyXTsgICAgLyogKGRl Y2xhcmVkIGluIGNrdXVzci5jKSAqLworI2VuZGlmIC8qIFNTSEJVSUxUSU4gKi8KKworI2lmZGVm IFNGVFBfQlVJTFRJTgorc3RhdGljIHN0cnVjdCBrZXl0YWIgc2Z0cHRhYltdID0geworICAgIHsg ImVuZC1vZi1saW5lIiwgICAgICAgICAgICBYWV9TRlRQX0VPTCwgMCwgfSwKKyAgICB7ICJyZW1v dGUtY2hhcmFjdGVyLXNldCIsICAgWFlfU0ZUUF9SQ1MsIDAsIH0sCisgICAgeyAiIiwgMCwgMCB9 Cit9Oworc3RhdGljIGludCBuc2Z0cHRhYiA9IChzaXplb2Yoc2Z0cHRhYikgLyBzaXplb2Yoc3Ry dWN0IGtleXRhYikpIC0gMTsKKyNlbmRpZiAvKiBTRlRQX0JVSUxUSU4gKi8KKworVk9JRAorc2hv c3NoKCkgeworI2lmZGVmIFNTSEJVSUxUSU4KKyAgICBpbnQgaSwgbiA9IDA7ICAgICAgICAgICAg ICAgICAgICAgICAvKiBBREQgYXNrbW9yZSgpISAqLworCisgICAgcHJpbnRmKCJcblNTSCBpcyBi dWlsdCBpbjpcblxuIik7CisKKyAgICBwcmludGYoIiBzc2ggaG9zdDogICAgICAgICAgICAgICAg ICAgICAgICAlc1xuIixzaG93c3RyaW5nKHNzaF9oc3QpKTsKKyAgICBwcmludGYoIiBzc2ggcG9y dDogICAgICAgICAgICAgICAgICAgICAgICAlc1xuIixzaG93c3RyaW5nKHNzaF9wcnQpKTsKKyAg ICBwcmludGYoIiBzc2ggY29tbWFuZDogICAgICAgICAgICAgICAgICAgICAlc1xuIixzaG93c3Ry aW5nKHNzaF9jbWQpKTsKKyAgICBwcmludGYoIiBzc2ggYWdlbnQtZm9yd2FyZGluZzogICAgICAg ICAgICAlc1xuIixzaG93b2ZmKHNzaF9hZncpKTsKKyAgICBwcmludGYoIiBzc2ggY2hlY2staG9z dC1pcDogICAgICAgICAgICAgICAlc1xuIixzaG93b2ZmKHNzaF9jaGtpcCkpOworICAgIHByaW50 ZigiIHNzaCBjb21wcmVzc2lvbjogICAgICAgICAgICAgICAgICVzXG4iLHNob3dvZmYoc3NoX2Nt cCkpOworICAgIHByaW50ZigiIHNzaCBkeW5hbWljLWZvcndhcmRpbmc6ICAgICAgICAgICVzXG4i LHNob3dvZmYoc3NoX2R5ZikpOworICAgIGlmIChzc2hfcGZfbGNsWzBdLnAxICYmIHNzaF9wZl9s Y2xbMF0uaG9zdCAmJiBzc2hfcGZfbGNsWzBdLnAyKSB7CisgICAgICBwcmludGYoIiBzc2ggZm9y d2FyZC1sb2NhbC1wb3J0OiAgICAgICAgICAlZCAlcyAlZFxuIiwKKyAgICAgICAgICAgICBzc2hf cGZfbGNsWzBdLnAxLCBzc2hfcGZfbGNsWzBdLmhvc3QsIHNzaF9wZl9sY2xbMF0ucDIpOworICAg ICAgZm9yICggbj0xO248c3NoX3BmX2xjbF9uO24rKyApCisgICAgICAgIHByaW50ZigiICAgICAg ICAgICAgICAgICAgICAgICA6ICAgICAgICAgICVkICVzICVkXG4iLAorICAgICAgICAgICAgICAg c3NoX3BmX2xjbFtuXS5wMSwgc3NoX3BmX2xjbFtuXS5ob3N0LCBzc2hfcGZfbGNsW25dLnAyKTsK KyAgICB9IGVsc2UKKyAgICAgIHByaW50ZigiIHNzaCBmb3J3YXJkLWxvY2FsLXBvcnQ6ICAgICAg ICAgKG5vbmUpXG4iKTsKKyAgICBpZiAoc3NoX3BmX3JtdFswXS5wMSAmJiBzc2hfcGZfcm10WzBd Lmhvc3QgJiYgc3NoX3BmX3JtdFswXS5wMikgeworICAgICAgcHJpbnRmKCIgc3NoIGZvcndhcmQt cmVtb3RlLXBvcnQ6ICAgICAgICAgJWQgJXMgJWRcbiIsCisgICAgICAgICAgICAgc3NoX3BmX3Jt dFswXS5wMSwgc3NoX3BmX3JtdFswXS5ob3N0LCBzc2hfcGZfcm10WzBdLnAyKTsKKyAgICAgIGZv ciAoIG49MTtuPHNzaF9wZl9ybXRfbjtuKysgKQorICAgICAgICBwcmludGYoIiAgICAgICAgICAg ICAgICAgICAgICAgIDogICAgICAgICAlZCAlcyAlZFxuIiwKKyAgICAgICAgICAgICAgIHNzaF9w Zl9ybXRbbl0ucDEsIHNzaF9wZl9ybXRbbl0uaG9zdCwgc3NoX3BmX3JtdFtuXS5wMik7CisgICAg fSBlbHNlCisgICAgICBwcmludGYoIiBzc2ggZm9yd2FyZC1yZW1vdGUtcG9ydDogICAgICAgIChu b25lKVxuIik7CisgICAgcHJpbnRmKCIgc3NoIGdhdGV3YXktcG9ydHM6ICAgICAgICAgICAgICAg JXNcbiIsc2hvd29mZihzc2hfZ3dwKSk7CisgICAgcHJpbnRmKCIgc3NoIGdzc2FwaSBkZWxlZ2F0 ZS1jcmVkZW50aWFsczogJXNcbiIsc2hvd29mZihzc2hfZ3NkKSk7CisgICAgcHJpbnRmKCIgc3No IGdzc2FwaSBrZXktZXhjaGFuZ2UgICAgICAgIDogJXNcbiIsc2hvd29mZihzc2hfZ2t4KSk7Cisg ICAgcHJpbnRmKCIgc3NoIGlkZW50aXR5LWZpbGU6ICAgICAgICAgICAgICAgJWRcbiIsc3NoX2lk Zl9uKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgc3NoX2lkZl9uOyBpKyspCisgICAgICBwcmludGYo IiAgJTJkLiAlc1xuIixpKzEsc2hvd3N0cmluZyhzc2hfaWRmW2ldKSk7CisgICAgcHJpbnRmKCIg c3NoIGhlYXJ0YmVhdCBpbnRlcnZhbDogICAgICAgICAgJWRcbiIsIHNzaF9oYnQpOworICAgIHBy aW50ZigiIHNzaCBrNCB0Z3QtcGFzc2luZzogICAgICAgICAgICAgICVzXG4iLHNob3dvZmYoc3No X2s0dGd0KSk7CisgICAgcHJpbnRmKCIgc3NoIGs1IHRndC1wYXNzaW5nOiAgICAgICAgICAgICAg JXNcbiIsc2hvd29mZihzc2hfazV0Z3QpKTsKKworICAgIHByaW50ZigiIHNzaCBwcml2aWxlZ2Vk LXBvcnQ6ICAgICAgICAgICAgICVzXG4iLHNob3dvb2Eoc3NoX3BycCkpOworICAgIHByaW50Zigi IHNzaCBxdWlldDogICAgICAgICAgICAgICAgICAgICAgICVzXG4iLHNob3dvZmYoc3NoX3NoaCkp OworICAgIHByaW50ZigiIHNzaCBzdHJpY3QtaG9zdC1rZXktY2hlY2s6ICAgICAgICVkXG4iLHNz aF9zaGspOworICAgIHByaW50ZigiIHNzaCB1c2Utb3BlbnNzaC1jb25maWc6ICAgICAgICAgICVz XG4iLHNob3dvZmYoc3NoX2NmZykpOworICAgIHByaW50ZigiIHNzaCB2ZXJib3NlOiAgICAgICAg ICAgICAgICAgICAgICVkXG4iLHNzaF92cmIpOworICAgIHByaW50ZigiIHNzaCB2ZXJzaW9uOiAg ICAgICAgICAgICAgICAgICAgICVzXG4iLAorICAgICAgICAgICBzc2hfdmVyID8gY2tpdG9hKHNz aF92ZXIpIDogImF1dG9tYXRpYyIKKyAgICAgICAgICAgKTsKKyAgICBwcmludGYoIiBzc2ggeDEx LWZvcndhcmRpbmc6ICAgICAgICAgICAgICAlc1xuIixzaG93b29hKHNzaF94ZncpKTsKKyAgICBw cmludGYoIiBzc2ggeGF1dGgtbG9jYXRpb246ICAgICAgICAgICAgICAlc1xuIixzaG93c3RyaW5n KHNzaF94YWwpKTsKKyAgICBwcmludGYoIlxuIik7CisgICAgcHJpbnRmKCIgc3NoIHYxIGNpcGhl cjogICAgICAgICAgICAgICAgICAgJXNcbiIsc2hvd3N0cmluZyhzc2gxX2NpZikpOworICAgIHBy aW50ZigiIHNzaCB2MSBnbG9iYWwta25vd24taG9zdHMtZmlsZTogICVzXG4iLHNob3dzdHJpbmco c3NoMV9nbmgpKTsKKyAgICBwcmludGYoIiBzc2ggdjEgdXNlci1rbm93bi1ob3N0cy1maWxlOiAg ICAlc1xuIixzaG93c3RyaW5nKHNzaDFfdW5oKSk7CisgICAgcHJpbnRmKCJcbiIpOworICAgIHBy aW50ZigiIHNzaCB2MiBhdXRoZW50aWNhdGlvbjogICAgICAgICAgICVzXG4iLHNob3dzdHJpbmco c3NoMl9hdXRoKSk7CisgICAgcHJpbnRmKCIgc3NoIHYyIGF1dG8tcmVrZXk6ICAgICAgICAgICAg ICAgJXNcbiIsc2hvd29mZihzc2gyX2FyaykpOworICAgIHByaW50ZigiIHNzaCB2MiBjaXBoZXJz OiAgICAgICAgICAgICAgICAgICVzXG4iLHNob3dzdHJpbmcoc3NoMl9jaWYpKTsKKyAgICBwcmlu dGYoIiBzc2ggdjIgY29tbWFuZC1hcy1zdWJzeXN0ZW06ICAgICAlc1xuIixzaG93b2ZmKHNzaF9j YXMpKTsKKyAgICBwcmludGYoIiBzc2ggdjIgZ2xvYmFsLWtub3duLWhvc3RzLWZpbGU6ICAlc1xu IixzaG93c3RyaW5nKHNzaDJfZ25oKSk7CisgICAgcHJpbnRmKCIgc3NoIHYyIGhvc3RrZXktYWxn b3JpdGhtczogICAgICAgJXNcbiIsc2hvd3N0cmluZyhzc2gyX2hrYSkpOworICAgIHByaW50Zigi IHNzaCB2MiBtYWM6ICAgICAgICAgICAgICAgICAgICAgICVzXG4iLHNob3dzdHJpbmcoc3NoMl9t YWMpKTsKKyAgICBwcmludGYoIiBzc2ggdjIgdXNlci1rbm93bi1ob3N0cy1maWxlOiAgICAlc1xu IixzaG93c3RyaW5nKHNzaDJfdW5oKSk7CisjZWxzZQorI2lmZGVmIFNTSENNRAorICAgIGV4dGVy biBjaGFyICogc3NoY21kLCAqIGRlZnNzaGNtZDsKKyAgICBjaGFyICogczsKKyAgICBzID0gc3No Y21kID8gc3NoY21kIDogZGVmc3NoY21kOworICAgIHByaW50ZigiXG4gU1NIIGlzIGV4dGVybmFs LlxuXG4iKTsKKyAgICBwcmludGYoIiBzc2ggY29tbWFuZDogJXNcbiIsc2hvd3N0cmluZyhzKSk7 CisjZW5kaWYgLyogU1NIQ01EICovCisjZW5kaWYgLyogU1NIQlVJTFRJTiAqLworICAgIHByaW50 ZigiXG4iKTsKK30KKworc3RhdGljIGludAorZG9zZXRzc2goKSB7CisjaWZkZWYgU1NIQ01ECisg ICAgZXh0ZXJuIGNoYXIgKiBzc2hjbWQ7CisjZW5kaWYgLyogU1NIQ01EICovCisjaWZkZWYgU1NI QlVJTFRJTgorI2lmbmRlZiBTU0hURVNUCisgICAgZXh0ZXJuIGludCBzbF9zc2hfeGZ3X3NhdmVk LCBzbF9zc2hfdmVyX3NhdmVkOworI2VuZGlmIC8qIFNTSFRFU1QgKi8KKyNlbmRpZiAvKiBTU0hC VUlMVElOICovCisgICAgaW50IGN4LCB4LCB5LCB6OworICAgIGNoYXIgKiBzOworCisgICAgaWYg KChjeCA9IGNta2V5KHNzaHRhYixuc3NodGFiLCIiLCJjb21tYW5kIiwgeHhzdHJpbmcpKSA8IDAp CisgICAgICByZXR1cm4oY3gpOworICAgIHN3aXRjaCAoY3gpIHsKKyNpZmRlZiBTU0hDTUQKKyAg ICAgIGNhc2UgU1NIX0NNRDogICAgICAgICAgICAgICAgICAgICAvKiBDb21tYW5kICovCisgICAg ICAgIGlmICgoeCA9IGNtdHh0KCJDb21tYW5kIHRvIHN0YXJ0IHNzaCIsInNzaCAtZSBub25lIiwK KyAgICAgICAgICAgICAgICAgICAgICAgJnMseHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgcmV0 dXJuKHgpOworICAgICAgICBtYWtlc3RyKCZzc2hjbWQscyk7CisgICAgICAgIHJldHVybihzdWNj ZXNzID0gMSk7CisjZW5kaWYgLyogU1NIQ01EICovCisKKyNpZmRlZiBTU0hCVUlMVElOCisgICAg ICBjYXNlIFNTSF9BRlc6ICAgICAgICAgICAgICAgICAgICAgLyogQWdlbnQtZm9yd2FyZGluZyAq LworICAgICAgICByZXR1cm4oc3VjY2VzcyA9IHNldG9uKCZzc2hfYWZ3KSk7CisKKyAgICAgIGNh c2UgU1NIX0NISTogICAgICAgICAgICAgICAgICAgICAvKiBDaGVjayBIb3N0IElQICovCisgICAg ICAgIHJldHVybihzdWNjZXNzID0gc2V0b24oJnNzaF9jaGtpcCkpOworICAgICAgICBicmVhazsK KworICAgICAgY2FzZSBTU0hfQ01QOiAgICAgICAgICAgICAgICAgICAgIC8qIENvbXByZXNzaW9u ICovCisgICAgICAgIHJldHVybihzdWNjZXNzID0gc2V0b24oJnNzaF9jbXApKTsKKworICAgICAg Y2FzZSBTU0hfRFlGOiAgICAgICAgICAgICAgICAgICAgIC8qIER5bmFtaWMgRm9yd2FyZGluZyAq LworICAgICAgICByZXR1cm4oc3VjY2VzcyA9IHNldG9uKCZzc2hfZHlmKSk7CisKKyAgICAgIGNh c2UgU1NIX0dXUDogICAgICAgICAgICAgICAgICAgICAvKiBHYXRld2F5IHBvcnRzICovCisgICAg ICAgIHJldHVybihzdWNjZXNzID0gc2V0b24oJnNzaF9nd3ApKTsKKworICAgICAgY2FzZSBTU0hf R1NTOiAgICAgICAgICAgICAgICAgICAgIC8qIEdTU0FQSSAqLworICAgICAgICBpZiAoKHkgPSBj bWtleShnc3NhcGl0YWIsbmdzc2FwaXRhYiwiIiwiIiwgeHhzdHJpbmcpKSA8IDApCisgICAgICAg ICAgcmV0dXJuKHkpOworICAgICAgICBzd2l0Y2ggKHkpIHsKKyAgICAgICAgICBjYXNlIDE6ICAg ICAgICAgICAgICAgICAgICAgICAvKiBEZWxlZ2F0ZSBjcmVkZW50aWFscyAqLworICAgICAgICAg ICAgcmV0dXJuKHN1Y2Nlc3MgPSBzZXRvbigmc3NoX2dzZCkpOworICAgICAgICAgIGNhc2UgMjog ICAgICAgICAgICAgICAgICAgICAgIC8qIGtleS1leGNoYW5nZSAqLworICAgICAgICAgICAgcmV0 dXJuKHN1Y2Nlc3MgPSBzZXRvbigmc3NoX2dreCkpOworICAgICAgICB9CisgICAgICAgIGlmICgo eCA9IGNtY2ZtKCkpIDwgMCkKKyAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgIHJldHVybihz dWNjZXNzID0gMCk7CisKKyNpZmRlZiBDT01NRU5UCisgICAgICBjYXNlIFNTSF9LQkQ6ICAgICAg ICAgICAgICAgICAgICAgLyogS2JkIEludGVyYWN0aXZlIERldmljZXMgKi8KKyAgICAgICAgaWYg KCh4ID0gY21jZm0oKSkgPCAwKQorICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgLyogVE8g QkUgRklMTEVEIElOICovCisgICAgICAgIHJldHVybigtMik7CisjZW5kaWYgLyogQ09NTUVOVCAq LworCisgICAgICBjYXNlIFNTSF9LNDogICAgICAgICAgICAgICAgICAgICAgLyogS2VyYmVyb3Mg SVYgKi8KKyAgICAgIGNhc2UgU1NIX0s1OiAgICAgICAgICAgICAgICAgICAgICAvKiBLZXJiZXJv cyBWICovCisgICAgICAgIGlmICgoeSA9IGNta2V5KHRndHBhc3MsMSwiIiwidGd0LXBhc3Npbmci LCB4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgIHN3aXRjaCAo eSkgeworICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gKGN4 ID09IFNTSF9LNCkgPworICAgICAgICAgICAgICAgICAgIHNldG9uKCZzc2hfazR0Z3QpIDogc2V0 b24oJnNzaF9rNXRndCkpOworICAgICAgICB9CisgICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwg MCkKKyAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7CisK KyAgICAgIGNhc2UgU1NIX1BSUDogICAgICAgICAgICAgICAgICAgICAvKiBQcml2ZCBwb3J0ICov CisgICAgICAgIHJldHVybihzdWNjZXNzID0gc2V0b24oJnNzaF9wcnApKTsKKworICAgICAgY2Fz ZSBTU0hfU0hIOiAgICAgICAgICAgICAgICAgICAgIC8qIFF1aWV0ICovCisgICAgICAgIHJldHVy bihzdWNjZXNzID0gc2V0b24oJnNzaF9zaGgpKTsKKworICAgICAgY2FzZSBTU0hfU0hLOiAgICAg ICAgICAgICAgICAgICAgIC8qIFN0cmljdCBIb3N0IEtleSBDaGVjayAqLworICAgICAgICBpZiAo KHkgPSBjbWtleShvb2t0YWIsMywiIiwiIiwgeHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgcmV0 dXJuKHkpOworICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApCisgICAgICAgICAgcmV0dXJu KHgpOworICAgICAgICBzc2hfc2hrID0geTsKKyAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsK KworICAgICAgY2FzZSBTU0hfSEJUOgorCXggPSBjbW51bSgiSGVhcnRiZWF0IGludGVydmFsLCBz ZWNvbmRzIiwiMCIsMTAsJnoseHhzdHJpbmcpOworCWlmICh4IDwgMCkgcmV0dXJuKHgpOworCWlm ICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOworCXNzaF9oYnQgPSB6OworCXJldHVybihz dWNjZXNzID0gMSk7CisKKyAgICAgIGNhc2UgU1NIX1YxOiAgICAgICAgICAgICAgICAgICAgICAv KiBTU0ggVjEgKi8KKyAgICAgICAgaWYgKCh5ID0gY21rZXkoc3NodjF0YWIsbnNzaHYxdGFiLCIi LCIiLCB4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgIHN3aXRj aCAoeSkgeworICAgICAgICAgIGNhc2UgU1NIMV9LNTQ6CisgICAgICAgICAgICByZXR1cm4oc3Vj Y2VzcyA9IHNldG9uKCZzc2hfazVfaXNfazQpKTsKKyAgICAgICAgICBjYXNlIFNTSDFfQ0lGOiAg ICAgICAgICAgICAgICAvKiBOb3QgYSBsaXN0ICovCisgICAgICAgICAgICBpZiAoKHkgPSBjbWtl eShzc2gxY2lwaGVycyxuc3NoMWNpcGhlcnMsIiIsIiIsIHh4c3RyaW5nKSkgPCAwKQorICAgICAg ICAgICAgICBpZiAoeSAhPSAtMykKKyAgICAgICAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAg ICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKKyAgICAgICAgICAgIGlmICh5 ID09IC0zKSB7CisgICAgICAgICAgICAgICAgbWFrZXN0cigmc3NoMV9jaWYsTlVMTCk7CisgICAg ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGZvciAoeCA9IDA7IHggPCBuc3NoMWNp cGhlcnM7IHgrKykKKyAgICAgICAgICAgICAgICAgIGlmIChzc2gxY2lwaGVyc1t4XS5rd3ZhbCA9 PSB5KQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBtYWtlc3Ry KCZzc2gxX2NpZixzc2gxY2lwaGVyc1t4XS5rd2QpOworICAgICAgICAgICAgfQorICAgICAgICAg ICAgcmV0dXJuKDEpOworICAgICAgICAgIGNhc2UgU1NIMV9HTkg6CisgICAgICAgICAgY2FzZSBT U0gxX1VOSDoKKyAgICAgICAgICAgIGlmICgoeCA9IGNtaWZpKCJGaWxlbmFtZSIsIiIsJnMsJnos eHhzdHJpbmcpKSA8IDApIHsKKyAgICAgICAgICAgICAgICBpZiAoeCAhPSAtMykKKyAgICAgICAg ICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg ICAgY2tzdHJuY3B5KGxpbmUscyxMSU5CVUZTSVopOworICAgICAgICAgICAgICAgIGlmICh6Zm5x ZnAobGluZSxUTVBCVUZTSVosdG1wYnVmKSkKKyAgICAgICAgICAgICAgICAgIGNrc3RybmNweShs aW5lLHRtcGJ1ZixMSU5CVUZTSVopOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcyA9ICh4 ID09IC0zKSA/IE5VTEwgOiBsaW5lOworICAgICAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAw KQorICAgICAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgICAgICBzd2l0Y2ggKHkpIHsKKyAg ICAgICAgICAgICAgY2FzZSBTU0gxX0dOSDogbWFrZXN0cigmc3NoMV9nbmgscyk7IGJyZWFrOwor ICAgICAgICAgICAgICBjYXNlIFNTSDFfVU5IOiBtYWtlc3RyKCZzc2gxX3VuaCxzKTsgYnJlYWs7 CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4oMSk7CisgICAgICAgIH0KKworICAg ICAgY2FzZSBTU0hfVjI6ICAgICAgICAgICAgICAgICAgICAgIC8qIFNTSCBWMiAqLworICAgICAg ICBpZiAoKHkgPSBjbWtleShzc2h2MnRhYixuc3NodjJ0YWIsIiIsIiIsIHh4c3RyaW5nKSkgPCAw KQorICAgICAgICAgIHJldHVybih5KTsKKyAgICAgICAgc3dpdGNoICh5KSB7CisgICAgICAgICAg Y2FzZSBTU0gyX0FSSzoKKyAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gc2V0b24oJnNzaDJf YXJrKSk7CisgICAgICAgIGNhc2UgU1NIMl9BVVQ6IHsgICAgICAgICAgICAgICAgICAgICAgICAv KiBBdXRoZW50aWNhdGlvbiAqLworI2RlZmluZSBUTVBDTlQgMTIKKyAgICAgICAgICAgIGludCBp LCBqLCB0bXBbVE1QQ05UXTsKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBUTVBDTlQ7IGkr KykKKyAgICAgICAgICAgICAgdG1wW2ldID0gMDsKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkg PCBUTVBDTlQ7IGkrKykgeworICAgICAgICAgICAgICAgIGlmICgoeSA9IGNta2V5KHNzaDJhdXQs bnNzaDJhdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkF1dGhlbnRpY2F0aW9u IG1ldGhvZCIsIiIseHhzdHJpbmcpKSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHkg PT0gLTMpCisgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg IHJldHVybih5KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZm9yIChqID0g MDsgaiA8IGk7IGorKykgeworICAgICAgICAgICAgICAgICAgICBpZiAodG1wW2pdID09IHkpIHsK KyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiXHJcbj9DaG9pY2UgaGFzIGFscmVhZHkg YmVlbiB1c2VkLlxyXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybigtOSk7Cisg ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg dG1wW2ldID0geTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgoeiA9IGNtY2ZtKCkp IDwgMCkKKyAgICAgICAgICAgICAgcmV0dXJuKHopOworCisgICAgICAgICAgICBpZiAoc3NoMl9h dXRoKSB7CisgICAgICAgICAgICAgICAgZnJlZShzc2gyX2F1dGgpOworICAgICAgICAgICAgICAg IHNzaDJfYXV0aCA9IE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoaSA+IDAp IHsKKyAgICAgICAgICAgICAgICBpbnQgbGVuID0gMDsKKyAgICAgICAgICAgICAgICBmb3IgKGog PSAwOyBqIDwgaTsgaisrKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoeCA9IDA7IHggPCBu c3NoMmF1dDsgeCsrKQorICAgICAgICAgICAgICAgICAgICAgIGlmIChzc2gyYXV0W3hdLmt3dmFs ID09IHRtcFtqXSAmJiAhc3NoMmF1dFt4XS5mbGdzKQorICAgICAgICAgICAgICAgICAgICAgICAg YnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGxlbiArPSBzdHJsZW4oc3NoMmF1dFt4XS5rd2Qp ICsgMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc3NoMl9hdXRoID0gbWFs bG9jKGxlbik7CisgICAgICAgICAgICAgICAgc3NoMl9hdXRoWzBdID0gJ1wwJzsKKyAgICAgICAg ICAgICAgICBmb3IgKGogPSAwOyBqIDwgaTsgaisrKSB7CisgICAgICAgICAgICAgICAgICAgIGZv ciAoeCA9IDA7IHggPCBuc3NoMmF1dDsgeCsrKQorICAgICAgICAgICAgICAgICAgICAgIGlmIChz c2gyYXV0W3hdLmt3dmFsID09IHRtcFtqXSAmJiAhc3NoMmF1dFt4XS5mbGdzKQorICAgICAgICAg ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNrc3RybmNhdChzc2gy X2F1dGgsc3NoMmF1dFt4XS5rd2QsbGVuKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGogPCBp IC0gMSkKKyAgICAgICAgICAgICAgICAgICAgICBja3N0cm5jYXQoc3NoMl9hdXRoLCIsIixsZW4p OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybihz dWNjZXNzID0gMSk7CisjdW5kZWYgVE1QQ05UCisgICAgICAgICAgfQorICAgICAgICBjYXNlIFNT SDJfQ0lGOiB7CisjZGVmaW5lIFRNUENOVCAxMgorICAgICAgICAgICAgaW50IGksIGosIHRtcFtU TVBDTlRdOworICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IFRNUENOVDsgaSsrKQorICAgICAg ICAgICAgICB0bXBbaV0gPSAwOworCisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgVE1QQ05U OyBpKyspIHsKKyAgICAgICAgICAgICAgICBpZiAoKHkgPSBjbWtleShzc2gyY2lwaGVycyxuc3No MmNpcGhlcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIsIiIsIHh4c3RyaW5n KSkgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh5ID09IC0zKQorICAgICAgICAgICAg ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBpOyBqKyspIHsKKyAg ICAgICAgICAgICAgICAgICAgaWYgKHRtcFtqXSA9PSB5KSB7CisgICAgICAgICAgICAgICAgICAg ICAgICBwcmludGYoIlxyXG4/Q2hvaWNlIGhhcyBhbHJlYWR5IGJlZW4gdXNlZC5cclxuIik7Cisg ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRtcFtpXSA9IHk7CisgICAgICAg ICAgICB9CisgICAgICAgICAgICBpZiAoKHogPSBjbWNmbSgpKSA8IDApCisgICAgICAgICAgICAg IHJldHVybih6KTsKKworICAgICAgICAgICAgaWYgKHNzaDJfY2lmKSB7CisgICAgICAgICAgICAg ICAgZnJlZShzc2gyX2NpZik7CisgICAgICAgICAgICAgICAgc3NoMl9jaWYgPSBOVUxMOworICAg ICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGkgPiAwKSB7CisgICAgICAgICAgICAgICAgaW50 IGxlbiA9IDA7CisgICAgICAgICAgICAgICAgZm9yIChqPTA7IGogPCBpOyBqKyspIHsKKyAgICAg ICAgICAgICAgICAgICAgZm9yICh4ID0gMDsgeCA8IG5zc2gyY2lwaGVyczsgeCsrKQorICAgICAg ICAgICAgICAgICAgICAgIGlmIChzc2gyY2lwaGVyc1t4XS5rd3ZhbCA9PSB0bXBbal0gJiYKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgIXNzaDJjaXBoZXJzW3hdLmZsZ3MpCisgICAgICAgICAg ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgbGVuICs9IHN0cmxlbihz c2gyY2lwaGVyc1t4XS5rd2QpICsgMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg ICAgc3NoMl9jaWYgPSBtYWxsb2MobGVuKTsKKyAgICAgICAgICAgICAgICBzc2gyX2NpZlswXSA9 ICdcMCc7CisgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGk7IGorKykgeworICAgICAg ICAgICAgICAgICAgZm9yICh4ID0gMDsgeCA8IG5zc2gyY2lwaGVyczsgeCsrKQorICAgICAgICAg ICAgICAgICAgICBpZiAoc3NoMmNpcGhlcnNbeF0ua3d2YWwgPT0gdG1wW2pdICYmICFzc2gyY2lw aGVyc1t4XS5mbGdzKQorICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg ICAgICAgICBja3N0cm5jYXQoc3NoMl9jaWYsc3NoMmNpcGhlcnNbeF0ua3dkLGxlbik7CisgICAg ICAgICAgICAgICAgICAgIGlmIChqIDwgaSAtIDEpCisgICAgICAgICAgICAgICAgICAgICAgY2tz dHJuY2F0KHNzaDJfY2lmLCIsIixsZW4pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg IH0KKyAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisjdW5kZWYgVE1QQ05UCisgICAg ICAgIH0KKyAgICAgICAgY2FzZSBTU0gyX01BQzogeworI2RlZmluZSBUTVBDTlQgMTIKKyAgICAg ICAgICAgIGludCBpLCBqLCB0bXBbVE1QQ05UXTsKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkg PCBUTVBDTlQ7IGkrKykKKyAgICAgICAgICAgICAgdG1wW2ldID0gMDsKKworICAgICAgICAgICAg Zm9yIChpID0gMDsgaSA8IFRNUENOVDsgaSsrKSB7CisgICAgICAgICAgICAgICAgaWYgKCh5ID0g Y21rZXkoc3NoMm1hY3MsbnNzaDJtYWNzLCIiLCIiLCB4eHN0cmluZykpIDwgMCkgeworICAgICAg ICAgICAgICAgICAgICBpZiAoeSA9PSAtMykKKyAgICAgICAgICAgICAgICAgICAgICBicmVhazsK KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgaTsgaisrKSB7CisgICAgICAgICAgICAgICAgICAg IGlmICh0bXBbal0gPT0geSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJcclxu P0Nob2ljZSBoYXMgYWxyZWFkeSBiZWVuIHVzZWQuXHJcbiIpOworICAgICAgICAgICAgICAgICAg ICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgICB0bXBbaV0gPSB5OworICAgICAgICAgICAgfQorICAgICAgICAg ICAgaWYgKCh6ID0gY21jZm0oKSkgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybih6KTsKKwor ICAgICAgICAgICAgaWYgKHNzaDJfbWFjKSB7CisgICAgICAgICAgICAgICAgZnJlZShzc2gyX21h Yyk7CisgICAgICAgICAgICAgICAgc3NoMl9tYWMgPSBOVUxMOworICAgICAgICAgICAgfQorICAg ICAgICAgICAgaWYgKGkgPiAwKSB7CisgICAgICAgICAgICAgICAgaW50IGxlbiA9IDA7CisgICAg ICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGk7IGorKykgeworICAgICAgICAgICAgICAgICAg ICBmb3IgKHggPSAwOyB4IDwgbnNzaDJtYWNzOyB4KyspCisgICAgICAgICAgICAgICAgICAgICAg aWYgKHNzaDJtYWNzW3hdLmt3dmFsID09IHRtcFtqXSAmJiAhc3NoMm1hY3NbeF0uZmxncykKKyAg ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBsZW4gKz0g c3RybGVuKHNzaDJtYWNzW3hdLmt3ZCkgKyAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgICAgICBzc2gyX21hYyA9IG1hbGxvYyhsZW4pOworICAgICAgICAgICAgICAgIHNzaDJfbWFj WzBdID0gJ1wwJzsKKyAgICAgICAgICAgICAgICBmb3IgKGo9MDsgaiA8IGk7IGorKykgeworICAg ICAgICAgICAgICAgICAgICBmb3IgKHggPSAwOyB4IDwgbnNzaDJtYWNzOyB4KyspCisgICAgICAg ICAgICAgICAgICAgICAgaWYgKHNzaDJtYWNzW3hdLmt3dmFsID09IHRtcFtqXSAmJiAhc3NoMm1h Y3NbeF0uZmxncykKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg ICAgICAgICBja3N0cm5jYXQoc3NoMl9tYWMsc3NoMm1hY3NbeF0ua3dkLGxlbik7CisgICAgICAg ICAgICAgICAgICAgIGlmIChqIDwgaSAtIDEpCisgICAgICAgICAgICAgICAgICAgICAgY2tzdHJu Y2F0KHNzaDJfbWFjLCIsIixsZW4pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K KyAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisjdW5kZWYgVE1QQ05UCisgICAgICAg ICAgfQorICAgICAgICAgIGNhc2UgU1NIMl9IS0E6IHsKKyNkZWZpbmUgVE1QQ05UIDEyCisgICAg ICAgICAgICBpbnQgaSwgaiwgdG1wW1RNUENOVF07CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBp IDwgVE1QQ05UOyBpKyspCisgICAgICAgICAgICAgIHRtcFtpXSA9IDA7CisKKyAgICAgICAgICAg IGZvciAoaSA9IDA7IGkgPCBUTVBDTlQ7IGkrKykgeworICAgICAgICAgICAgICAgIGlmICgoeSA9 IGNta2V5KGhrYXRhYixuaGthdGFiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIi LCIiLCB4eHN0cmluZykpIDwgMCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoeSA9PSAtMykK KyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu KHkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwg aTsgaisrKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh0bXBbal0gPT0geSkgeworICAgICAg ICAgICAgICAgICAgICAgICAgcHJpbnRmKCJcclxuP0Nob2ljZSBoYXMgYWxyZWFkeSBiZWVuIHVz ZWQuXHJcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0bXBbaV0g PSB5OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCh6ID0gY21jZm0oKSkgPCAwKQor ICAgICAgICAgICAgICByZXR1cm4oeik7CisKKyAgICAgICAgICAgIGlmIChzc2gyX2hrYSkgewor ICAgICAgICAgICAgICAgIGZyZWUoc3NoMl9oa2EpOworICAgICAgICAgICAgICAgIHNzaDJfaGth ID0gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChpID4gMCkgeworICAgICAg ICAgICAgICAgIGludCBsZW4gPSAwOworICAgICAgICAgICAgICAgIGZvciAoaj0wOyBqIDwgaTsg aisrKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoeCA9IDA7IHggPCBuaGthdGFiOyB4Kysp CisgICAgICAgICAgICAgICAgICAgICAgaWYgKGhrYXRhYlt4XS5rd3ZhbCA9PSB0bXBbal0gJiYK KyAgICAgICAgICAgICAgICAgICAgICAgICAgIWhrYXRhYlt4XS5mbGdzKQorICAgICAgICAgICAg ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGxlbiArPSBzdHJsZW4oaGth dGFiW3hdLmt3ZCkgKyAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzc2gy X2hrYSA9IG1hbGxvYyhsZW4pOworICAgICAgICAgICAgICAgIHNzaDJfaGthWzBdID0gJ1wwJzsK KyAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgaTsgaisrKSB7CisgICAgICAgICAgICAg ICAgICBmb3IgKHggPSAwOyB4IDwgbmhrYXRhYjsgeCsrKQorICAgICAgICAgICAgICAgICAgICBp ZiAoaGthdGFiW3hdLmt3dmFsID09IHRtcFtqXSAmJiAhaGthdGFiW3hdLmZsZ3MpCisgICAgICAg ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNrc3RybmNhdChzc2gy X2hrYSxoa2F0YWJbeF0ua3dkLGxlbik7CisgICAgICAgICAgICAgICAgICAgIGlmIChqIDwgaSAt IDEpCisgICAgICAgICAgICAgICAgICAgICAgY2tzdHJuY2F0KHNzaDJfaGthLCIsIixsZW4pOwor ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybihzdWNj ZXNzID0gMSk7CisjdW5kZWYgVE1QQ05UCisgICAgICAgICAgfQorICAgICAgICAgIGNhc2UgU1NI Ml9HTkg6CisgICAgICAgICAgY2FzZSBTU0gyX1VOSDoKKyAgICAgICAgICAgIGlmICgoeCA9IGNt aWZpKCJGaWxlbmFtZSIsIiIsJnMsJnoseHhzdHJpbmcpKSA8IDApIHsKKyAgICAgICAgICAgICAg ICBpZiAoeCAhPSAtMykKKyAgICAgICAgICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgICAg IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgY2tzdHJuY3B5KGxpbmUscyxMSU5CVUZTSVopOwor ICAgICAgICAgICAgICAgIGlmICh6Zm5xZnAobGluZSxUTVBCVUZTSVosdG1wYnVmKSkKKyAgICAg ICAgICAgICAgICAgIGNrc3RybmNweShsaW5lLHRtcGJ1ZixMSU5CVUZTSVopOworICAgICAgICAg ICAgfQorICAgICAgICAgICAgcyA9ICh4ID09IC0zKSA/IE5VTEwgOiBsaW5lOworICAgICAgICAg ICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKQorICAgICAgICAgICAgICByZXR1cm4oeCk7CisgICAg ICAgICAgICBzd2l0Y2ggKHkpIHsKKyAgICAgICAgICAgICAgY2FzZSBTU0gyX0dOSDogbWFrZXN0 cigmc3NoMl9nbmgscyk7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIFNTSDJfVU5IOiBtYWtl c3RyKCZzc2gyX3VuaCxzKTsgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IHJldHVybihz dWNjZXNzID0gMCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9 IDEpOworICAgICAgICB9CisKKyAgICAgIGNhc2UgU1NIX1ZSQjogICAgICAgICAgICAgICAgICAg ICAvKiBWZXJib3NpdHkgbGV2ZWwgKi8KKyAgICAgICAgeSA9IGNtbnVtKCJTU0ggdmVyYm9zaXR5 IGxldmVsLCAwLTciLCIyIiwxMCwmeCx4eHN0cmluZyk7CisgICAgICAgIHJldHVybihzZXRudW0o JnNzaF92cmIseCx5LDcpKTsKKworICAgICAgY2FzZSBTU0hfVkVSOiAgICAgICAgICAgICAgICAg ICAgIC8qIFZlcnNpb24gKi8KKyAgICAgICAgaWYgKCh5ID0gY21rZXkoc3NodmVyLDMsIiIsImF1 dG8iLCB4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgIGlmICgo eCA9IGNtY2ZtKCkpIDwgMCkKKyAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgIHNzaF92ZXIg PSB5OyAgICAgICAgICAgICAgICAgICAgLyogMCA9PSBBVVRPICovCisjaWZuZGVmIFNTSFRFU1QK KyAgICAgICAgc2xfc3NoX3Zlcl9zYXZlZCA9IDA7CisjZW5kaWYgLyogU1NIVEVTVCAqLworICAg ICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworCisgICAgICBjYXNlIFNTSF9JREY6IHsgICAgICAg ICAgICAgICAgICAgLyogSWRlbnRpdHkgZmlsZSAqLworICAgICAgICBpbnQgaSwgbjsKKyAgICAg ICAgZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHsKKyAgICAgICAgICAgIGlmICgoeCA9IGNtaWZp KCJGaWxlbmFtZSIsIiIsJnMsJnkseHhzdHJpbmcpKSA8IDApIHsKKyAgICAgICAgICAgICAgICBp ZiAoeCA9PSAtMykKKyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIHJl dHVybih4KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghemZucWZwKHMsTElOQlVG U0laLGxpbmUpKQorICAgICAgICAgICAgICBja3N0cm5jcHkobGluZSxzLExJTkJVRlNJWik7Cisg ICAgICAgICAgICBtYWtlc3RyKCZzc2hfdG1wW2ldLGxpbmUpOworICAgICAgICB9CisgICAgICAg IG4gPSBpOworICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHsKKyAgICAgICAgICAgIGZv ciAoaSA9IDA7IGkgPCBuOyBpKyspCisgICAgICAgICAgICAgIG1ha2VzdHIoJihzc2hfdG1wW2ld KSxOVUxMKTsKKyAgICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgfQorICAgICAgICBmb3Ig KGkgPSAwOyBpIDwgMzI7IGkrKykgeworICAgICAgICAgICAgbWFrZXN0cigmKHNzaF9pZGZbaV0p LE5VTEwpOworICAgICAgICAgICAgaWYgKGkgPCBuKSB7CisgICAgICAgICAgICAgICAgc3NoX2lk ZltpXSA9IHNzaF90bXBbaV07CisgICAgICAgICAgICAgICAgc3NoX3RtcFtpXSA9IE5VTEw7Cisg ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1ha2VzdHIoJihzc2hfdG1wW2ld KSxOVUxMKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBzc2hfaWRmX24gPSBu OworICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworICAgICAgfQorICAgICAgY2FzZSBTU0hf WEZXOiAgICAgICAgICAgICAgICAgICAgIC8qIFgxMS1mb3J3YXJkaW5nICovCisgICAgICAgIHN1 Y2Nlc3MgPSBzZXRvbigmc3NoX3hmdyk7CisjaWZuZGVmIFNTSFRFU1QKKyAgICAgICAgaWYgKHN1 Y2Nlc3MpCisgICAgICAgICAgc2xfc3NoX3hmd19zYXZlZCA9IDA7CisjZW5kaWYgLyogU1NIVEVT VCAqLworICAgICAgICByZXR1cm4oc3VjY2Vzcyk7CisKKyAgICAgIGNhc2UgU1NIX1hBTDogICAg ICAgICAgICAgICAgICAgICAvKiBTU0ggWGF1dGggTG9jYXRpb24gKi8KKyAgICAgICAgaWYgKCh4 ID0gY21pZmkoIlBhdGggdG8gZXhlY3V0YWJsZSIsICIiLCZzLCZ5LHh4c3RyaW5nKSkgPCAwKSB7 CisgICAgICAgICAgICBpZiAoeCAhPSAtMykKKyAgICAgICAgICAgICAgcmV0dXJuKHgpOworICAg ICAgICB9IGVsc2UgeworICAgICAgICAgICAgY2tzdHJuY3B5KGxpbmUscyxMSU5CVUZTSVopOwor ICAgICAgICAgICAgaWYgKHpmbnFmcChsaW5lLFRNUEJVRlNJWix0bXBidWYpKQorICAgICAgICAg ICAgICBja3N0cm5jcHkobGluZSx0bXBidWYsTElOQlVGU0laKTsKKyAgICAgICAgfQorICAgICAg ICBzID0gKHggPT0gLTMpID8gTlVMTCA6IGxpbmU7CisgICAgICAgIGlmICgoeCA9IGNtY2ZtKCkp IDwgMCkgcmV0dXJuKHgpOworICAgICAgICBtYWtlc3RyKCZzc2hfeGFsLHMpOworICAgICAgICBy ZXR1cm4oc3VjY2VzcyA9IDEpOworCisgICAgICBjYXNlIFNTSF9DRkc6ICAgICAgICAgICAgICAg ICAgICAgLyogVXNlIE9wZW5TU0ggQ29uZmlnICovCisgICAgICAgIHJldHVybihzdWNjZXNzID0g c2V0b24oJnNzaF9jZmcpKTsKKyNlbmRpZiAvKiBTU0hCVUlMVElOICovCisKKyAgICAgIGRlZmF1 bHQ6CisgICAgICAgIHJldHVybigtMik7CisgICAgfQorfQorI2VuZGlmIC8qIEFOWVNTSCAqLwor CisjaWZkZWYgU0ZUUF9CVUlMVElOCitzdGF0aWMgaW50Citkb3NldHNmdHAoKSB7CisgICAgaW50 IGN4LCB4LCB5LCB6OworICAgIGNoYXIgKiBzOworCisgICAgaWYgKChjeCA9IGNta2V5KHNmdHB0 YWIsbnNmdHB0YWIsIiIsIiIsIHh4c3RyaW5nKSkgPCAwKQorICAgICAgcmV0dXJuKGN4KTsKKyAg ICBzd2l0Y2ggKGN4KSB7CisgICAgY2FzZSBYWV9TRlRQX0VPTDoKKyAgICBjYXNlIFhZX1NGVFBf UkNTOgorICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybigtMik7CisgICAgfQorfQorI2VuZGlm IC8qIFNGVFBfQlVJTFRJTiAqLworCisjaWZkZWYgS1VJCisjaW5jbHVkZSAiaWt1aS5oIgorZXh0 ZXJuIFVMT05HIFJHQlRhYmxlWzE2XTsKKworI2RlZmluZSBHVUlfUkdCICAxCisjZGVmaW5lIEdV SV9XSU4gIDIKKyNkZWZpbmUgR1VJX0ZPTiAgMworI2RlZmluZSBHVUlfRElBICA0CisjZGVmaW5l IEdVSV9UTEIgIDUKKyNkZWZpbmUgR1VJX01OQiAgNgorI2RlZmluZSBHVUlfQ0xTICA3CisKKyNk ZWZpbmUgR1VJV19QT1MgMQorI2RlZmluZSBHVUlXX1JFUyAyCisjZGVmaW5lIEdVSVdfUlVOIDMK KyNkZWZpbmUgR1VJV1JfTk9OIDAKKyNkZWZpbmUgR1VJV1JfRk9OIDEKKyNkZWZpbmUgR1VJV1Jf RElNIDIKKyNkZWZpbmUgR1VJV05fUkVTIDEKKyNkZWZpbmUgR1VJV05fTUlOIDIKKyNkZWZpbmUg R1VJV05fTUFYIDMKKworc3RhdGljIHN0cnVjdCBrZXl0YWIgZ3VpdGFiW10gPSB7CisgICAgeyAi Y2xvc2UiLCAgICAgICBHVUlfQ0xTLCAgMCB9LAorICAgIHsgImRpYWxvZ3MiLCAgICAgR1VJX0RJ QSwgIDAgfSwKKyAgICB7ICJmb250IiwgICAgICAgIEdVSV9GT04sICAwIH0sCisgICAgeyAibWVu dWJhciIsICAgICBHVUlfTU5CLCAgMCB9LAorICAgIHsgInJnYmNvbG9yIiwgICAgR1VJX1JHQiwg IDAgfSwKKyAgICB7ICJ0b29sYmFyIiwgICAgIEdVSV9UTEIsICAwIH0sCisgICAgeyAid2luZG93 IiwgICAgICBHVUlfV0lOLCAgMCB9LAorICAgIHsgIiIsIDAsIDB9Cit9Oworc3RhdGljIGludCBu Z3VpdGFiID0gKHNpemVvZihndWl0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKKworc3Rh dGljIHN0cnVjdCBrZXl0YWIgZ3Vpd3RhYltdID0geworICAgIHsgInBvc2l0aW9uIiwgICAgR1VJ V19QT1MsIDAgfSwKKyAgICB7ICJyZXNpemUtbW9kZSIsIEdVSVdfUkVTLCAwIH0sCisgICAgeyAi cnVuLW1vZGUiLCAgICBHVUlXX1JVTiwgMCB9LAorICAgIHsgIiIsIDAsIDB9Cit9Oworc3RhdGlj IGludCBuZ3Vpd3RhYiA9IChzaXplb2YoZ3Vpd3RhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikp OworCitzdGF0aWMgc3RydWN0IGtleXRhYiBndWl3cnRhYltdID0geworICAgIHsgImNoYW5nZS1k aW1lbnNpb25zIiwgIEdVSVdSX0RJTSwgMCB9LAorICAgIHsgIm5vbmUiLCAgICAgICAgICAgICAg IEdVSVdSX05PTiwgMCB9LAorICAgIHsgInNjYWxlLWZvbnQiLCAgICAgICAgIEdVSVdSX0ZPTiwg MCB9LAorICAgIHsgIiIsIDAsIDB9Cit9Oworc3RhdGljIGludCBuZ3Vpd3J0YWIgPSAoc2l6ZW9m KGd1aXdydGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7CisKK3N0YXRpYyBzdHJ1Y3Qga2V5 dGFiIGd1aXdudGFiW10gPSB7CisgICAgeyAibWF4aW1pemUiLCAgR1VJV05fTUFYLCAwIH0sCisg ICAgeyAibWluaW1pemUiLCAgR1VJV05fTUlOLCAwIH0sCisgICAgeyAicmVzdG9yZSIsICAgR1VJ V05fUkVTLCAwIH0sCisgICAgeyAiIiwgMCwgMH0KK307CitzdGF0aWMgaW50IG5ndWl3bnRhYiA9 IChzaXplb2YoZ3Vpd250YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKKworc3RhdGljIHN0 cnVjdCBrZXl0YWIgcmdidGFiW10gPSB7CisgICAgeyAiYmxhY2siLCAgICAgICAgIDAsIDAgfSwK KyAgICB7ICJibHVlIiwgICAgICAgICAgMSwgMCB9LAorICAgIHsgImJyb3duIiwgICAgICAgICA2 LCAwIH0sCisgICAgeyAiY3lhbiIsICAgICAgICAgIDMsIDAgfSwKKyAgICB7ICJkYXJrZ3JheSIs ICAgICAgOCwgMCB9LAorICAgIHsgImRncmF5IiwgICAgICAgICA4LCBDTV9JTlYgfSwKKyAgICB7 ICJncmVlbiIsICAgICAgICAgMiwgMCB9LAorICAgIHsgImxibHVlIiwgICAgICAgICA5LCBDTV9J TlYgfSwKKyAgICB7ICJsY3lhbiIsICAgICAgICAxMSwgQ01fSU5WIH0sCisgICAgeyAibGdyZWVu IiwgICAgICAgMTAsIENNX0lOViB9LAorICAgIHsgImxncmF5IiwgICAgICAgICA3LCBDTV9JTlYg fSwKKyAgICB7ICJsaWdodGJsdWUiLCAgICAgOSwgMCB9LAorICAgIHsgImxpZ2h0Y3lhbiIsICAg IDExLCAwIH0sCisgICAgeyAibGlnaHRncmVlbiIsICAgMTAsIDAgfSwKKyAgICB7ICJsaWdodGdy YXkiLCAgICAgNywgMCB9LAorICAgIHsgImxpZ2h0bWFnZW50YSIsIDEzLCAwIH0sCisgICAgeyAi bGlnaHRyZWQiLCAgICAgMTIsIDAgfSwKKyAgICB7ICJsbWFnZW50YSIsICAgICAxMywgQ01fSU5W IH0sCisgICAgeyAibHJlZCIsICAgICAgICAgMTIsIENNX0lOViB9LAorICAgIHsgIm1hZ2VudGEi LCAgICAgICA1LCAwIH0sCisgICAgeyAicmVkIiwgICAgICAgICAgIDQsIDAgfSwKKyAgICB7ICJ3 aGl0ZSIsICAgICAgICAxNSwgMCB9LAorICAgIHsgInllbGxvdyIsICAgICAgIDE0LCAwIH0sCisK K307CitpbnQgbnJnYiA9IChzaXplb2YocmdidGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7 CisKK1ZPSUQKK3Nob2d1aSgpIHsKKyAgICBleHRlcm4gZ3VpX2RpYWxvZzsKKyAgICBleHRlcm4g SFdORCBnZXRId25kS1VJKCk7CisgICAgdW5zaWduZWQgY2hhciBjbWRzYXYgPSBjb2xvcmNtZDsK KyAgICBpbnQgaSwgcmVkLCBncmVlbiwgYmx1ZSwgbGluZXM9MDsKKyAgICBjaGFyICogczsKKwor CisgICAgcHJpbnRmKCJHVUkgcGFyYW10ZXJzOlxuIik7CisgICAgaWYgKCsrbGluZXMgPiBjbWRf cm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybjsgZWxzZSBsaW5lcyA9IDA7IH0KKyAg ICBwcmludGYoIiAgRGlhbG9nczogICAgICVzXG4iLHNob3dvZmYoZ3VpX2RpYWxvZykpOworICAg IGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm47IGVs c2UgbGluZXMgPSAwOyB9CisgICAgcHJpbnRmKCIgIFBvc2l0aW9uOiAgICAlZCwlZFxuIixnZXRf Z3VpX3dpbmRvd19wb3NfeCgpLAorICAgICAgICAgICAgZ2V0X2d1aV93aW5kb3dfcG9zX3koKSk7 CisgICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVy bjsgZWxzZSBsaW5lcyA9IDA7IH0KKyAgICBwcmludGYoIiAgUmVzb2x1dGlvbjogICVkIHggJWRc biIsR2V0U3lzdGVtTWV0cmljcyhTTV9DWFNDUkVFTiksCisgICAgICAgICAgICBHZXRTeXN0ZW1N ZXRyaWNzKFNNX0NZU0NSRUVOKSk7CisgICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsg aWYgKCFhc2ttb3JlKCkpIHJldHVybjsgZWxzZSBsaW5lcyA9IDA7IH0KKyAgICBwcmludGYoIiAg UnVuLW1vZGU6ICAgICVzXG4iLElzSWNvbmljKGdldEh3bmRLVUkoKSkgPyAibWluaW1pemVkIiA6 CisgICAgICAgICAgICBJc1pvb21lZChnZXRId25kS1VJKCkpID8gIm1heGltaXplZCIgOiAicmVz dG9yZWQiKTsKKyAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUo KSkgcmV0dXJuOyBlbHNlIGxpbmVzID0gMDsgfQorICAgIHN3aXRjaCAoIGdldF9ndWlfcmVzaXpl X21vZGUoKSApIHsKKyAgICAgIGNhc2UgR1VJV1JfTk9OOgorICAgICAgICBzID0gIm5vbmUiOwor ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR1VJV1JfRk9OOgorICAgICAgICBzID0gInNjYWxl cyBmb250IjsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdVSVdSX0RJTToKKyAgICAgICAg cz0gImNoYW5nZXMgZGltZW5zaW9ucyI7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBwcmlu dGYoIiAgUmVzaXplLW1vZGU6ICVzXG4iLHMpOworICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3Mg LSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm47IGVsc2UgbGluZXMgPSAwOyB9CisgICAgcHJp bnRmKCJcbiIpOworICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9y ZSgpKSByZXR1cm47IGVsc2UgbGluZXMgPSAwOyB9CisKKyAgICBwcmludGYoIlJHQiBDb2xvciBU YWJsZTpcbiIpOworICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9y ZSgpKSByZXR1cm47IGVsc2UgbGluZXMgPSAwOyB9CisgICAgcHJpbnRmKCIgIENvbG9yICAgICAg ICAgICAgICBSZWQgR3JlZW4gQmx1ZVxuIik7CisgICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAt IDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybjsgZWxzZSBsaW5lcyA9IDA7IH0KKyAgICBwcmlu dGYoIiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKKyAg ICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuOyBl bHNlIGxpbmVzID0gMDsgfQorICAgIGZvciAoaSA9IDA7IGkgPCBucmdiOyBpKyspIHsKKyAgICAg ICAgaWYgKCFyZ2J0YWJbaV0uZmxncykgeworICAgICAgICAgICAgYmx1ZSA9IChSR0JUYWJsZVty Z2J0YWJbaV0ua3d2YWxdICYgMHgwMEZGMDAwMCk+PjE2OworICAgICAgICAgICAgZ3JlZW4gPSAo UkdCVGFibGVbcmdidGFiW2ldLmt3dmFsXSAmIDB4MDAwMEZGMDApPj44OworICAgICAgICAgICAg cmVkID0gKFJHQlRhYmxlW3JnYnRhYltpXS5rd3ZhbF0gJiAweDAwMDAwMEZGKTsKKyAgICAgICAg ICAgIHByaW50ZigiICAlLTE4cyAlM2QgICUzZCAgJTNkICAiLHJnYnRhYltpXS5rd2QscmVkLGdy ZWVuLGJsdWUpOworICAgICAgICAgICAgY29sb3JjbWQgPSByZ2J0YWJbaV0ua3d2YWwgPDwgNDsK KyAgICAgICAgICAgIHByaW50ZigiKioqKioqKioiKTsKKyAgICAgICAgICAgIGNvbG9yY21kID0g Y21kc2F2OworICAgICAgICAgICAgcHJpbnRmKCJcbiIpOworICAgICAgICAgICAgaWYgKCsrbGlu ZXMgPiBjbWRfcm93cyAtIDMpIHsKKwkJaWYgKCFhc2ttb3JlKCkpCisJCSAgcmV0dXJuOworCQll bHNlCisJCSAgbGluZXMgPSAwOworCSAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcHJpbnRm KCJcbiIpOworfQorCitpbnQKK3NldHJnYigpIHsKKyAgICBpbnQgY3gsIHJlZCA9IDAsIGJsdWUg PSAwLCBncmVlbiA9IDAsIHosIHg7CisKKyAgICBpZiAoKGN4ID0gY21rZXkocmdidGFiLG5yZ2Is IiIsIiIseHhzdHJpbmcpKSA8IDApCisgICAgICByZXR1cm4oY3gpOworICAgIGlmICgoeiA9IGNt bnVtKCJSZWQgdmFsdWUsIDAtMjU1IiwiIiwxMCwmcmVkLHh4c3RyaW5nKSkgPCAwKQorICAgICAg cmV0dXJuKHopOworICAgIGlmICgoeiA9IGNtbnVtKCJHcmVlbiB2YWx1ZSwgMC0yNTUiLCIiLDEw LCZncmVlbix4eHN0cmluZykpIDwgMCkKKyAgICAgIHJldHVybih6KTsKKyAgICBpZiAoKHogPSBj bW51bSgiQmx1ZSB2YWx1ZSwgMC0yNTUiLCIiLDEwLCZibHVlLHh4c3RyaW5nKSkgPCAwKQorICAg ICAgcmV0dXJuKHopOworICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOworICAg IGlmIChjeCA+IDE1IHx8IHJlZCA+IDI1NSB8fCBibHVlID4gMjU1IHx8IGdyZWVuID4gMjU1KQor ICAgICAgcmV0dXJuKC0yKTsKKyAgICBSR0JUYWJsZVtjeF0gPSAodW5zaWduZWQpKCgodW5zaWdu ZWQpYmx1ZSA8PCAxNikgfAorICAgICAgICAodW5zaWduZWQpKCh1bnNpZ25lZClncmVlbiA8PCA4 KSB8CisgICAgICAgICh1bnNpZ25lZClyZWQpOworICAgIHJldHVybihzdWNjZXNzID0gMSk7Cit9 CisKKy8qCisgIFNldCBHVUkgd2luZG93IHBvc2l0aW9uOiBYWSBjb29yZGluYXRlcyBvZiB1cHBl ciBsZWZ0IGNvcm5lciwKKyAgZXhwcmVzc2VkIGFzIHBpeGVsIG51bWJlcnMgaW4gdGhlIGN1cnJl bnQgc2NyZWVuIHJlc29sdXRpb24uCisgICgwLDApIG1lYW5zIHB1dCBvdXJzZWx2ZXMgaW4gdGhl IHVwcGVyIGxlZnQgY29ybmVyLgorICBDYW4gd2UgY2hlY2sgZm9yIG91dCBvZiBib3VuZHM/Cisq LworCitpbnQKK3NldGd1aXdpbigpIHsKKyAgICBpbnQgY3gsIHgsIHksIHo7CisgICAgaWYgKChj eCA9IGNta2V5KGd1aXd0YWIsbmd1aXd0YWIsIiIsIiIseHhzdHJpbmcpKSA8IDApCisgICAgICBy ZXR1cm4oY3gpOworICAgIHN3aXRjaCAoY3gpIHsKKyAgICAgIGNhc2UgR1VJV19QT1M6CisgICAg ICAgIGlmICgoeiA9IGNtbnVtKCJYIGNvb3JkaW5hdGUgKHBpeGVsIG51bWJlcikiLCIiLDEwLCZ4 LHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgIHJldHVybih6KTsKKyAgICAgICAgaWYgKCh6ID0g Y21udW0oIlkgY29vcmRpbmF0ZSAocGl4ZWwgbnVtYmVyKSIsIiIsMTAsJnkseHhzdHJpbmcpKSA8 IDApCisgICAgICAgICAgcmV0dXJuKHopOworICAgICAgICBpZiAoKHogPSBjbWNmbSgpKSA8IDAp CisgICAgICAgICAgcmV0dXJuKHopOworICAgICAgICBpZiAoeCA8IDAgfHwgeSA8IDApIHsKKyAg ICAgICAgICAgIHByaW50ZigiP0Nvb3JkaW5hdGVzIG11c3QgYmUgMCBvciBncmVhdGVyXG4iKTsK KyAgICAgICAgICAgIHJldHVybigtOSk7CisgICAgICAgIH0KKyAgICAgICAgZ3VpX3Bvc2l0aW9u KHgseSk7CisgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisgICAgICBjYXNlIEdVSVdfUkVT OgorICAgICAgICBpZiAoKHggPSBjbWtleShndWl3cnRhYixuZ3Vpd3J0YWIsIiIsIiIseHhzdHJp bmcpKSA8IDApCisgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICBpZiAoKHogPSBjbWNmbSgp KSA8IDApCisgICAgICAgICAgcmV0dXJuKHopOworICAgICAgICBndWlfcmVzaXplX21vZGUoeCk7 CisgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisgICAgICBjYXNlIEdVSVdfUlVOOgorCWlm ICgoeCA9IGNta2V5KGd1aXdudGFiLG5ndWl3bnRhYiwiIiwiIix4eHN0cmluZykpIDwgMCkKKwkg IHJldHVybih4KTsKKwlpZiAoKHogPSBjbWNmbSgpKSA8IDApCisJICByZXR1cm4oeik7CisJZ3Vp X3dpbl9ydW5fbW9kZSh4KTsKKwlyZXR1cm4oc3VjY2VzcyA9IDEpOworICAgICAgZGVmYXVsdDoK KyAgICAgICAgcmV0dXJuKC0yKTsKKyAgICB9Cit9CisKK2ludAorc2V0Z3VpZm9udCgpIHsJCQkJ LyogQXNzdW1lcyB0aGF0IENLRkxPQVQgaXMgZGVmaW5lZCEgKi8KKworICAgIGV4dGVybiBzdHJ1 Y3Qga2V5dGFiICogdGVybV9mb250OworICAgIGV4dGVybiBzdHJ1Y3Qga2V5dGFiICogX3Rlcm1f Zm9udDsKKyAgICBleHRlcm4gaW50IHR0X2ZvbnQsIHR0X2ZvbnRfc2l6ZSwgbnRlcm1mb250Owor ICAgIGludCB4LCB5LCB6OworICAgIGNoYXIgKnM7CisKKyAgICBpZiAobnRlcm1mb250ID09IDAp CisgICAgICBCdWlsZEZvbnRUYWJsZSgmdGVybV9mb250LCAmX3Rlcm1fZm9udCwgJm50ZXJtZm9u dCk7CisgICAgaWYgKCEodGVybV9mb250ICYmIF90ZXJtX2ZvbnQgJiYgbnRlcm1mb250ID4gMCkp IHsKKyAgICAgICAgcHJpbnRmKCI/SW50ZXJuYWwgZXJyb3I6IEZhaWx1cmUgdG8gZW51bWVyYXRl IGZvbnRzXG4iKTsKKyAgICAgICAgcmV0dXJuKC05KTsKKyAgICB9CisgICAgaWYgKCh4ID0gY21r ZXkoX3Rlcm1fZm9udCxudGVybWZvbnQsIiIsIiIseHhzdHJpbmcpKSA8IDApCisgICAgICByZXR1 cm4oeCk7CisgICAgaWYgKCh6ID0gY21mbGQoIkhlaWdodCBvZiBmb250IGluIHBvaW50cyIsIjEy Iiwmcyx4eHN0cmluZykpIDwgMCkKKyAgICAgIHJldHVybih6KTsKKyAgICBpZiAoaXNmbG9hdChz LDApIDwgMSkgewkJLyogKHNldHMgZmxvYXR2YWwpICovCisJcHJpbnRmKCI/SW50ZWdlciBvciBm bG9hdGluZy1wb2ludCBudW1iZXIgcmVxdWlyZWRcbiIpOworCXJldHVybigtOSk7CisgICAgfQor ICAgIGlmIChmbG9hdHZhbCA8IDAuNSkgeworCXByaW50ZigiP1Bvc2l0aXZlIG51bWJlciByZXF1 aXJlZFxuIik7CisJcmV0dXJuKC05KTsKKyAgICB9CisgICAgaWYgKCh6ID0gY21jZm0oKSkgPCAw KQorICAgICAgcmV0dXJuKHopOworICAgIHR0X2ZvbnQgPSB4OwkJCS8qIEZvbnQgaW5kZXggKi8K KyAgICB0dF9mb250X3NpemUgPSAoaW50KShmbG9hdHZhbCAqIDIpOwkvKiBGb250IHNpemUgaW4g aGFsZiBwb2ludHMgKi8KKyAgICBLdWlTZXRQcm9wZXJ0eShLVUlfVEVSTV9GT05ULCAobG9uZyl0 dF9mb250LCAobG9uZyl0dF9mb250X3NpemUpOworICAgIHJldHVybihzdWNjZXNzID0gMSk7Cit9 CisKK1ZPSUQKK3NldGd1aWRpYWxvZyh4KSBpbnQgeDsKK3sKKyAgICBleHRlcm4gaW50IGd1aV9k aWFsb2c7CisgICAgZ3VpX2RpYWxvZyA9IHg7CisgICAgS3VpU2V0UHJvcGVydHkoS1VJX0dVSV9E SUFMT0dTLCAobG9uZyl4LCAwTCk7Cit9CisKK1ZPSUQKK3NldGd1aW1lbnViYXIoeCkgaW50IHg7 Cit7CisgICAgS3VpU2V0UHJvcGVydHkoS1VJX0dVSV9NRU5VQkFSLCAobG9uZyl4LCAwTCk7Cit9 CisKK1ZPSUQKK3NldGd1aXRvb2xiYXIoeCkgaW50IHg7Cit7CisgICAgS3VpU2V0UHJvcGVydHko S1VJX0dVSV9UT09MQkFSLCAobG9uZyl4LCAwTCk7Cit9CisKK1ZPSUQKK3NldGd1aWNsb3NlKHgp IGludCB4OworeworICAgIEt1aVNldFByb3BlcnR5KEtVSV9HVUlfQ0xPU0UsIChsb25nKXgsIDBM KTsKK30KKworaW50CitzZXRndWkoKSB7CisgICAgaW50IGN4LCB4LCByYzsKKyAgICBpZiAoKGN4 ID0gY21rZXkoZ3VpdGFiLG5ndWl0YWIsIiIsIiIseHhzdHJpbmcpKSA8IDApCisgICAgICByZXR1 cm4oY3gpOworICAgIHN3aXRjaCAoY3gpIHsKKyAgICAgIGNhc2UgR1VJX0RJQToKKyAgICAgICAg cmMgPSBzZXRvbigmeCk7CisgICAgICAgIGlmIChyYyA+PSAwKQorICAgICAgICAgIHNldGd1aWRp YWxvZyh4KTsKKyAgICAgICAgcmV0dXJuKHJjKTsKKyAgICAgIGNhc2UgR1VJX0ZPTjoKKyAgICAg ICAgcmV0dXJuKHNldGd1aWZvbnQoKSk7CisgICAgICBjYXNlIEdVSV9SR0I6CisgICAgICAgIHJl dHVybihzZXRyZ2IoKSk7CisgICAgICBjYXNlIEdVSV9XSU46CisgICAgICAgIHJldHVybihzZXRn dWl3aW4oKSk7CisgICAgICBjYXNlIEdVSV9UTEI6CisgICAgICAgIHJjID0gc2V0b24oJngpOwor ICAgICAgICBpZiAocmMgPj0gMCkKKyAgICAgICAgICBzZXRndWl0b29sYmFyKHgpOworICAgICAg ICByZXR1cm4ocmMpOworICAgICAgY2FzZSBHVUlfTU5COgorICAgICAgICByYyA9IHNldG9uKCZ4 KTsKKyAgICAgICAgaWYgKHJjID49IDApCisgICAgICAgICAgc2V0Z3VpbWVudWJhcih4KTsKKyAg ICAgICAgcmV0dXJuKHJjKTsKKyAgICAgIGNhc2UgR1VJX0NMUzoKKyAgICAgICAgcmMgPSBzZXRv bigmeCk7CisgICAgICAgIGlmIChyYyA+PSAwKQorICAgICAgICAgIHNldGd1aWNsb3NlKHgpOwor ICAgICAgICByZXR1cm4ocmMpOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuKC0yKTsK KyAgICB9Cit9CisjZW5kaWYgLyogS1VJICovCisKK1ZPSUQKK3NldGV4aXR3YXJuKHgpIGludCB4 OyAKK3sKKyAgICB4aXR3YXJuID0geDsKKyNpZmRlZiBLVUkKKyAgICBLdWlTZXRQcm9wZXJ0eShL VUlfRVhJVF9XQVJOSU5HLCAobG9uZyl4LCAwTCk7CisjZW5kaWYgLyogS1VJICovCit9CisKKyNp Zm5kZWYgTk9MT0NBTAorVk9JRAorc2V0ZGVic2VzKHgpIGludCB4OyB7CisjaWZkZWYgT1MyCisg ICAgaWYgKChkZWJzZXMgIT0gMCkgJiYgKHggPT0gMCkpCS8qIEl0IHdhcyBvbiBhbmQgd2UgdHVy bmVkIGl0IG9mZj8gKi8KKyAgICAgIG9zMmRlYnVnb2ZmKCk7CQkJLyogRml4IE9TLzIgY29sb3Jh dGlvbiAqLworI2VuZGlmIC8qIE9TMiAqLworICAgIGRlYnNlcyA9IHg7CisjaWZkZWYgS1VJCisg ICAgS3VpU2V0UHJvcGVydHkoS1VJX1RFUk1fREVCVUcseCwwKTsKKyNlbmRpZiAvKiBLVUkgKi8K K30KKyNlbmRpZiAvKiBOT0xPQ0FMICovCisKKy8qICBEIE8gUCBSIE0gIC0tICBTZXQgYSBwYXJh bWV0ZXIuICAqLworLyoKKyBSZXR1cm5zOgorICAtMjogaWxsZWdhbCBpbnB1dAorICAtMTogcmVw YXJzZSBuZWVkZWQKKyAgIDA6IHN1Y2Nlc3MKKyovCitpbnQKK2RvcHJtKHh4LHJtc2ZsZykgaW50 IHh4LCBybXNmbGc7IHsKKyAgICBpbnQgaSA9IDAsIHggPSAwLCB5ID0gMCwgeiA9IDA7CisgICAg bG9uZyB6eiA9IDBMOworICAgIGNoYXIgKnMgPSBOVUxMLCAqcCA9IE5VTEw7CisjaWZkZWYgT1My CisgICAgY2hhciBwb3J0YnVmWzY0XTsKKyAgICBsb25nIHBvcnRzcGVlZCA9IDBMOworICAgIGlu dCBwb3J0cGFyaXR5ID0gMDsKKyAgICBpbnQgcG9ydGZsb3cgPSAwOworI2VuZGlmIC8qIE9TMiAq LworCisjaWZuZGVmIE5PU0VUS0VZCisjaWZkZWYgT1MyCisgICAgaWYgKHh4ID09IFhZTVNLKQor ICAgICAgcmV0dXJuKHNldG1zaygpKTsKKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBOT1NF VEtFWSAqLworCisgICAgaWYgKHh4ID09IFhZRkxBRykgeyAgICAgICAgICAgICAgICAgLyogU0VU IEZMQUcgKi8KKyAgICAgICAgZXh0ZXJuIGludCBvb2ZsYWc7CisgICAgICAgIHJldHVybihzdWNj ZXNzID0gc2V0b24oJm9vZmxhZykpOworICAgIH0KKyAgICBpZiAoeHggPT0gWFlQUlRSICAgICAg ICAgICAgICAgICAgICAvKiBTRVQgUFJJTlRFUiAob3IgQlBSSU5URVIpICovCisjaWZkZWYgQlBS SU5UCisgICAgICAgIHx8IHh4ID09IFhZQkRDUAorI2VuZGlmIC8qIEJQUklOVCAqLworICAgICAg ICApCisgICAgICByZXR1cm4oc2V0cHJpbnRlcih4eCkpOworCisgICAgc3dpdGNoICh4eCkgewor CisjaWZkZWYgQU5ZWDI1ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU0VUIFgyNSAuLi4g Ki8KK2Nhc2UgWFlYMjU6CisgICAgICAgIHJldHVybihzZXR4MjUoKSk7CisKKyNpZm5kZWYgSUJN WDI1CitjYXNlIFhZUEFEOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU0VUIFBBRCAu Li4gKi8KKyAgICAgICAgcmV0dXJuKHNldHBhZHAoKSk7CisjZW5kaWYgLyogSUJNWDI1ICovCisj ZW5kaWYgLyogQU5ZWDI1ICovCisKKyNpZm5kZWYgTk9YRkVSCisgICAgICBjYXNlIFhZRU9MOiAg ICAgICAvKiBUaGVzZSBoYXZlIGFsbCBiZWVuIG1vdmVkIHRvIHNldCBzZW5kL3JlY2VpdmUuLi4g Ki8KKyAgICAgIGNhc2UgWFlMRU46ICAgICAgIC8qIExldCB0aGUgdXNlciBrbm93IHdoYXQgdG8g ZG8uICovCisgICAgICBjYXNlIFhZTUFSSzoKKyAgICAgIGNhc2UgWFlOUEFEOgorICAgICAgY2Fz ZSBYWVBBREM6CisgICAgICBjYXNlIFhZVElNTzoKKyAgICAgICAgcHJpbnRmKCIuLi5Vc2UgU0VU IFNFTkQgb3IgU0VUIFJFQ0VJVkUgaW5zdGVhZC5cbiIpOworICAgICAgICBwcmludGYoIlR5cGUg SEVMUCBTRVQgU0VORCBvciBIRUxQIFNFVCBSRUNFSVZFIGZvciBtb3JlIGluZm8uXG4iKTsKKyAg ICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKworICAgICAgY2FzZSBYWUFUVFI6ICAgICAgICAg ICAgICAgICAgICAgIC8qIEZpbGUgQXR0cmlidXRlIHBhY2tldHMgKi8KKyAgICAgICAgcmV0dXJu KHNldGF0KHJtc2ZsZykpOworCisgICAgICBjYXNlIFhZSUZEOiAgICAgICAgICAgICAgICAgICAg ICAgLyogSW5jb21wbGV0ZSBmaWxlIGRpc3Bvc2l0aW9uICovCisgICAgICAgIGlmICgoeSA9IGNt a2V5KGlmZGF0YWIsMywiIiwiYXV0byIseHhzdHJpbmcpKSA8IDApIHJldHVybih5KTsKKyAgICAg ICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7CisgICAgICAgIGlmIChybXNmbGcp IHsKKyAgICAgICAgICAgIHNzdGF0ZSA9IHNldGdlbignUycsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIjMxMCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9PSAwID8gIjAi IDogKHkgPT0gMSA/ICIxIiA6ICIyIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgcmV0dXJuKChpbnQp IHNzdGF0ZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBrZWVwID0geTsKKyAgICAg ICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisgICAgICAgIH0KKyNlbmRpZiAvKiBOT1hGRVIg Ki8KKworICAgICAgY2FzZSBYWU1BVENIOgkJCS8qIFsgUkVNT1RFIF0gU0VUIE1BVENILi4uICAq LworI2lmbmRlZiBOT1hGRVIKKwlpZiAoKHogPSBjbWtleShtYXRjaHRhYixubWF0Y2h0YWIsIiIs IiIseHhzdHJpbmcpKSA8IDApCisJICByZXR1cm4oeik7CisJaWYgKHJtc2ZsZykgeworICAgICAg ICAgICAgaWYgKCh5ID0gY21rZXkob25vZmYsMiwiIiwib24iLHh4c3RyaW5nKSkgPCAwKSByZXR1 cm4oeSk7CisJICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOworCSAgICBzd2l0 Y2ggKHopIHsKKwkgICAgICBjYXNlIE1DSF9ET1RGOgorCQlyZXR1cm4oc3N0YXRlID0gc2V0Z2Vu KCdTJywiMzMwIiwgeSA9PSAwID8gIjAiIDogIjEiLCAiIikpOworCSAgICAgIGNhc2UgTUNIX0ZJ Rk86CisJCXJldHVybihzc3RhdGUgPSBzZXRnZW4oJ1MnLCIzMzEiLCB5ID09IDAgPyAiMCIgOiAi MSIsICIiKSk7CisJICAgICAgZGVmYXVsdDoKKwkJcmV0dXJuKC0yKTsKKwkgICAgICB9CisJICB9 CisjZW5kaWYgLyogTk9YRkVSICovCisJICBzd2l0Y2ggKHopIHsKKwkgICAgY2FzZSBNQ0hfRklG TzoKKwkgICAgICByZXR1cm4oc3VjY2VzcyA9IHNldG9uKCZtYXRjaGZpZm8pKTsKKwkgICAgY2Fz ZSBNQ0hfRE9URjoKKwkgICAgICB4ID0gc2V0b24oJm1hdGNoZG90KTsgCisJICAgICAgaWYgKHgg PCAwKSByZXR1cm4oeCk7CisJICAgICAgZGlyX2RvdHMgPSAtMTsKKwkgICAgICByZXR1cm4oc3Vj Y2VzcyA9IHgpOworCSAgICBkZWZhdWx0OgorCSAgICAgIHJldHVybigtMik7CisJICB9CisKKyNp Zm5kZWYgTk9TUEwKKyAgICAgIGNhc2UgWFlJTlBVOiAgICAgICAgICAgICAgICAgICAgICAvKiBT RVQgSU5QVVQgKi8KKyAgICAgICAgcmV0dXJuKHNldGlucCgpKTsKKyNlbmRpZiAvKiBOT1NQTCAq LworCisjaWZkZWYgTkVUQ09OTgorICAgICAgY2FzZSBYWU5FVDogeyAgICAgICAgICAgICAgICAg ICAgIC8qIFNFVCBORVRXT1JLICovCisKKyAgICAgICAgICBzdHJ1Y3QgRkRCIGsxLCBrMjsKKwor ICAgICAgICAgIGNtZmRiaSgmazEsX0NNS0VZLCIiLCIiLCIiLG5uZXRrZXksIDAsIHh4c3RyaW5n LCBuZXRrZXksICZrMik7CisgICAgICAgICAgY21mZGJpKCZrMixfQ01LRVksIiIsIiIsIiIsbm5l dHMsICAgMCwgeHhzdHJpbmcsIG5ldGNtZCwgTlVMTCk7CisKKyNpZmRlZiBPUzIgICAgIC8qIEhp ZGUgbmV0d29yay10eXBlIGtleXdvcmRzIGZvciBuZXR3b3JrcyBub3QgaW5zdGFsbGVkICovCisg ICAgICAgICAgZm9yICh6ID0gMDsgeiA8IG5uZXRzOyB6KyspIHsKKyAgICAgICAgICAgICAgaWYg KG5ldGNtZFt6XS5rd3ZhbCA9PSBORVRfVENQQiAmJiB0Y3BfYXZhaWwgPT0gMCkKKyAgICAgICAg ICAgICAgICBuZXRjbWRbel0uZmxncyA9ICBDTV9JTlY7CisjaWZkZWYgU1NIQlVJTFRJTgorICAg ICAgICAgICAgICBpZiAobmV0Y21kW3pdLmt3dmFsID09IE5FVF9TU0ggJiYKKyAgICAgICAgICAg ICAgICAgICAhY2tfc3NsZWF5X2lzX2luc3RhbGxlZCgpKQorICAgICAgICAgICAgICAgIG5ldGNt ZFt6XS5mbGdzID0gIENNX0lOVjsKKyNlbmRpZiAvKiBTU0hCVUlMVElOICovCisjaWZkZWYgREVD TkVUCisgICAgICAgICAgICAgIGVsc2UgaWYgKG5ldGNtZFt6XS5rd3ZhbCA9PSBORVRfREVDICAm JiBkbmV0X2F2YWlsID09IDApCisgICAgICAgICAgICAgICAgbmV0Y21kW3pdLmZsZ3MgPSAgQ01f SU5WOworI2VuZGlmIC8qIERFQ05FVCAqLworI2lmZGVmIENLX05FVEJJT1MKKyAgICAgICAgICAg ICAgZWxzZSBpZiAobmV0Y21kW3pdLmt3dmFsID09IE5FVF9CSU9TICYmIG5ldGJpb3NBdmFpbCA9 PSAwKQorICAgICAgICAgICAgICAgIG5ldGNtZFt6XS5mbGdzID0gIENNX0lOVjsKKyNlbmRpZiAv KiBDS19ORVRCSU9TICovCisjaWZkZWYgU1VQRVJMQVQKKyAgICAgICAgICAgICAgZWxzZSBpZiAo bmV0Y21kW3pdLmt3dmFsID09IE5FVF9TTEFUICAmJiBzbGF0X2F2YWlsID09IDApCisgICAgICAg ICAgICAgICAgbmV0Y21kW3pdLmZsZ3MgPSAgQ01fSU5WOworI2VuZGlmIC8qIFNVUEVSTEFUICov CisgICAgICAgICAgfQorICAgICAgICAgIGlmICh0Y3BfYXZhaWwpICAgICAgICAgICAgICAgIC8q IERlZmF1bHQgbmV0d29yayB0eXBlICovCisgICAgICAgICAgICBja3N0cm5jcHkodG1wYnVmLCJ0 Y3AvaXAiLFRNUEJVRlNJWik7CisjaWZkZWYgU1NIQlVJTFRJTgorICAgICAgICAgIGVsc2UgaWYg KCBja19zc2xlYXlfaXNfaW5zdGFsbGVkKCkgKQorICAgICAgICAgICAgY2tzdHJuY3B5KHRtcGJ1 Ziwic3NoIixUTVBCVUZTSVopOworI2VuZGlmIC8qIFNTSEJVSUxUSU4gKi8KKyNpZmRlZiBERUNO RVQKKyAgICAgICAgICBlbHNlIGlmIChkbmV0X2F2YWlsKQorICAgICAgICAgICAgY2tzdHJuY3B5 KHRtcGJ1ZiwiZGVjbmV0IixUTVBCVUZTSVopOworI2VuZGlmIC8qIERFQ05FVCAqLworI2lmZGVm IFNVUEVSTEFUCisgICAgICAgICAgZWxzZSBpZiAoc2xhdF9hdmFpbCkKKyAgICAgICAgICAgIGNr c3RybmNweSh0bXBidWYsInN1cGVybGF0IixUTVBCVUZTSVopOworI2VuZGlmIC8qIFNVUEVSTEFU ICovCisjaWZkZWYgQ0tfTkVUQklPUworICAgICAgICAgIGVsc2UgaWYgKG5ldGJpb3NBdmFpbCkK KyAgICAgICAgICAgIGNrc3RybmNweSh0bXBidWYsIm5ldGJpb3MiLFRNUEJVRlNJWik7CisjZW5k aWYgLyogQ0tfTkVUQklPUyAqLworICAgICAgICAgIGVsc2UgY2tzdHJuY3B5KHRtcGJ1ZiwibmFt ZWQtcGlwZSIsVE1QQlVGU0laKTsKKyNlbHNlICAvKiBPUzIgKi8KKyNpZmRlZiBUQ1BTT0NLRVQK KyAgICAgICAgICBja3N0cm5jcHkodG1wYnVmLCJ0Y3AvaXAiLFRNUEJVRlNJWik7CisjZWxzZQor I2lmZGVmIEFOWVgyNQorICAgICAgICAgIGNrc3RybmNweSh0bXBidWYsInguMjUiLFRNUEJVRlNJ Wik7CisjZWxzZQorICAgICAgICAgIGNrc3RybmNweSh0bXBidWYsIiIsVE1QQlVGU0laKTsKKyNl bmRpZiAvKiBBTllYMjUgKi8KKyNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KKyNlbmRpZiAvKiBPUzIg Ki8KKworICAgICAgICAgIHggPSBjbWZkYigmazEpOworICAgICAgICAgIGlmICh4IDwgMCkgeyAg ICAgICAgICAgICAgICAgIC8qIEVycm9yICovCisgICAgICAgICAgICAgIGlmICh4ID09IC0yIHx8 IHggPT0gLTkpCisgICAgICAgICAgICAgICAgcHJpbnRmKCI/Tm8ga2V5d29yZHMgbWF0Y2g6IFwi JXNcIlxuIixhdG1idWYpOworICAgICAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgICAgfQor ICAgICAgICAgIHogPSBjbXJlc3VsdC5ucmVzdWx0OyAgICAgICAgIC8qIEtleXdvcmQgdmFsdWUg Ki8KKyAgICAgICAgICBpZiAoY21yZXN1bHQuZmRiYWRkciA9PSAmazEpIHsgLyogV2hpY2ggdGFi bGU/ICovCisjaWZuZGVmIE5PU1BMCisjaWZuZGVmIE5PRElBTAorICAgICAgICAgICAgICBpZiAo eiA9PSBYWU5FVF9EKQorICAgICAgICAgICAgICAgIHJldHVybihwYXJzZGlyKDEpKTsKKyNlbmRp ZiAvKiBOT0RJQUwgKi8KKyNlbmRpZiAvKiBOT1NQTCAqLworICAgICAgICAgICAgICBpZiAoKHog PSBjbWtleShuZXRjbWQsbm5ldHMsIiIsdG1wYnVmLHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAg ICAgICAgIHJldHVybih6KTsKKyAgICAgICAgICB9CisKKyNpZmRlZiBORVRDTUQKKyAgICAgICAg ICBpZiAoeiA9PSBORVRfQ01EICYmIG5vcHVzaCkgeworICAgICAgICAgICAgICBwcmludGYoIlxu P1NvcnJ5LCBhY2Nlc3MgdG8gZXh0ZXJuYWwgY29tbWFuZHMgaXMgZGlzYWJsZWRcbiIpOworICAg ICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICAgIH0KKyNlbmRpZiAvKiBORVRDTUQgKi8K KworI2lmbmRlZiBOT1BVU0gKKyNpZmRlZiBORVRQVFkKKyAgICAgICAgICBpZiAoeiA9PSBORVRf UFRZICYmIG5vcHVzaCkgeworICAgICAgICAgICAgICBwcmludGYoIlxuP1NvcnJ5LCBhY2Nlc3Mg dG8gZXh0ZXJuYWwgY29tbWFuZHMgaXMgZGlzYWJsZWRcbiIpOworICAgICAgICAgICAgICByZXR1 cm4oLTkpOworICAgICAgICAgIH0KKyNlbmRpZiAvKiBORVRQVFkgKi8KKyNlbmRpZiAvKiBOT1BV U0ggKi8KKworI2lmZGVmIE9TMgorICAgICAgICAgIGlmICh6ID09IE5FVF9UQ1BCICYmIHRjcF9h dmFpbCA9PSAwKSB7CisgICAgICAgICAgICAgIHByaW50ZigKKyJcbj9Tb3JyeSwgZWl0aGVyIFRD UC9JUCBpcyBub3QgYXZhaWxhYmxlIG9uIHRoaXMgc3lzdGVtIG9yXG5cCituZWNlc3NhcnkgRExM cyBkaWQgbm90IGxvYWQuICBVc2UgU0hPVyBORVRXT1JLIHRvIGNoZWNrIG5ldHdvcmsgc3RhdHVz LlxuIik7CisgICAgICAgICAgICAgIHJldHVybigtOSk7CisjaWZkZWYgU1NIQlVJTFRJTgorICAg ICAgICAgIH0gZWxzZSBpZiAoeiA9PSBORVRfU1NIICYmICFja19zc2xlYXlfaXNfaW5zdGFsbGVk KCkpIHsKKyAgICAgICAgICAgIHByaW50ZigiXG4/U29ycnksIFNTSCBpcyBub3QgYXZhaWxhYmxl IG9uIHRoaXMgc3lzdGVtLlxuIikgOworICAgICAgICAgICAgcmV0dXJuKC05KTsKKyNlbmRpZiAv KiBTU0hCVUlMVElOICovCisjaWZkZWYgQ0tfTkVUQklPUworICAgICAgICAgIH0gZWxzZSBpZiAo eiA9PSBORVRfQklPUyAmJiBuZXRiaW9zQXZhaWwgPT0gMCkgeworICAgICAgICAgICAgICBwcmlu dGYoIlxuP1NvcnJ5LCBORVRCSU9TIGlzIG5vdCBhdmFpbGFibGUgb24gdGhpcyBzeXN0ZW0uXG4i KSA7CisgICAgICAgICAgICAgIHJldHVybigtOSk7CisjZW5kaWYgLyogQ0tfTkVUQklPUyAqLwor I2lmZGVmIERFQ05FVAorICAgICAgICAgIH0gZWxzZSBpZiAoeiA9PSBORVRfREVDICYmIGRuZXRf YXZhaWwgPT0gMCkgeworICAgICAgICAgICAgICBwcmludGYoIlxuP1NvcnJ5LCBERUNuZXQgaXMg bm90IGF2YWlsYWJsZSBvbiB0aGlzIHN5c3RlbS5cbiIpIDsKKyAgICAgICAgICAgICAgcmV0dXJu KC05KTsKKyNlbmRpZiAvKiBERUNORVQgKi8KKyNpZmRlZiBTVVBFUkxBVAorICAgICAgICAgIH0g ZWxzZSBpZiAoeiA9PSBORVRfU0xBVCAmJiBzbGF0X2F2YWlsID09IDApIHsKKyAgICAgICAgICAg ICAgcHJpbnRmKCJcbj9Tb3JyeSwgU3VwZXJMQVQgaXMgbm90IGF2YWlsYWJsZSBvbiB0aGlzIHN5 c3RlbS5cbiIpIDsKKyAgICAgICAgICAgICAgcmV0dXJuKC05KTsKKyNlbmRpZiAvKiBTVVBFUkxB VCAqLworICAgICAgICAgIH0KKyNlbmRpZiAvKiBPUzIgKi8KKworI2lmZGVmIE5QSVBFT1JCSU9T CisgICAgICAgICAgaWYgKHogPT0gTkVUX1BJUEUgfHwgICAgICAgICAgLyogTmFtZWQgcGlwZSAt LSBhbHNvIGdldCBwaXBlbmFtZSAqLworICAgICAgICAgICAgICB6ID09IE5FVF9CSU9TKSB7ICAg ICAgICAgIC8qIE5FVEJJT1MgLS0gYWxzbyBnZXQgbG9jYWwgbmFtZSAqLworICAgICAgICAgICAg ICBjaGFyICpkZWZuYW07CisjaWZkZWYgQ0tfTkVUQklPUworICAgICAgICAgICAgICBjaGFyIHRt cG5ibmFtW05FVEJJT1NfTkFNRV9MRU4rMV07CisjZW5kaWYgLyogQ0tfTkVUQklPUyAqLworICAg ICAgICAgICAgICAvKiBDb25zdHJ1Y3QgZGVmYXVsdCBuYW1lICAqLworICAgICAgICAgICAgICBp ZiAoeiA9PSBORVRfUElQRSkgeyAgICAgIC8qIE5hbWVkIHBpcGUgKi8KKyAgICAgICAgICAgICAg ICAgIGRlZm5hbSA9ICJrZXJtaXQiOyAgICAvKiBEZWZhdWx0IG5hbWUgaXMgYWx3YXlzICJrZXJt aXQiICovCisgICAgICAgICAgICAgIH0gCisjaWZkZWYgQ0tfTkVUQklPUworCSAgICAgIGVsc2Ug ewkJCS8qIE5ldEJJT1MgKi8KKyAgICAgICAgICAgICAgICAgIGlmIChOZXRCaW9zTmFtZVswXSAh PSBTUCkgeyAvKiBJZiB0aGVyZSBpcyBhbHJlYWR5IGEgbmFtZSwgKi8KKyAgICAgICAgICAgICAg ICAgICAgICBjaGFyICpwID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgICBpbnQgbjsgICAg ICAgICAgICAvKiB1c2UgaXQgYXMgdGhlIGRlZmF1bHQuICovCisgICAgICAgICAgICAgICAgICAg ICAgY2tzdHJuY3B5KHRtcG5ibmFtLE5ldEJpb3NOYW1lLE5FVEJJT1NfTkFNRV9MRU4rMSk7Cisg ICAgICAgICAgICAgICAgICAgICAgLyogY29udmVydCB0cmFpbGluZyBzcGFjZXMgdG8gTlVMcyAq LworICAgICAgICAgICAgICAgICAgICAgIHAgPSAmdG1wbmJuYW1bTkVUQklPU19OQU1FX0xFTi0x XTsKKyAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKnAgPT0gU1ApIHsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgKnAgPSBOVUw7CisgICAgICAgICAgICAgICAgICAgICAgICAgIHAtLTsK KyAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgZGVmbmFtID0g dG1wbmJuYW07CisgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCpteWhvc3QpICAgLyogT3Ro ZXJ3aXNlIHVzZSB0aGlzIFBDJ3MgaG9zdCBuYW1lICovCisgICAgICAgICAgICAgICAgICAgIGRl Zm5hbSA9IChjaGFyICopIG15aG9zdDsKKyAgICAgICAgICAgICAgICAgIGVsc2UgICAgICAgICAg ICAgICAgICAvKiBPdGhlcndpc2UgdXNlICJrZXJtaXQiICovCisgICAgICAgICAgICAgICAgICAg IGRlZm5hbSA9ICJrZXJtaXQiOworICAgICAgICAgICAgICB9CisjZW5kaWYgLyogQ0tfTkVUQklP UyAqLworICAgICAgICAgICAgICBpZiAoKHkgPSBjbXR4dCgoeiA9PSBORVRfUElQRSkgPyAibmFt ZSBvZiBuYW1lZC1waXBlIiA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsb2NhbCBO RVRCSU9TIG5hbWUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZuYW0sICZzLCB4 eHN0cmluZykpIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4oeSk7CisjaWZkZWYgTlBJUEUK KyAgICAgICAgICAgICAgcGlwZW5hbWVbMF0gPSBOVUw7CisjZW5kaWYgLyogTlBJUEUgKi8KKyAg ICAgICAgICAgICAgaWYgKCh5ID0gKGludCkgc3RybGVuKHMpKSA8IDEpIHsKKyAgICAgICAgICAg ICAgICAgIHByaW50ZigiP1lvdSBtdXN0IGFsc28gc3BlY2lmeSBhICVzIG5hbWVcbiIsCisgICAg ICAgICAgICAgICAgICAgICAgICAgKHogPT0gTkVUX1BJUEUpID8gInBpcGUiIDogImxvY2FsIE5F VEJJT1MiICk7CisgICAgICAgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICAgICAgICB9 CisjaWZkZWYgQ0tfTkVUQklPUworICAgICAgICAgICAgICBpZiAoeiA9PSBORVRfQklPUykgewor ICAgICAgICAgICAgICAgICAgaWYgKCFuZXRiaW9zQXZhaWwpIHsKKyAgICAgICAgICAgICAgICAg ICAgICBwcmludGYoIj9ORVRCSU9TIGlzIG5vdCBhdmFpbGFibGUgb24gdGhpcyBzeXN0ZW0uXG4i KSA7CisgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgICAgIGlmICh5IC0gTkVUQklPU19OQU1FX0xFTiA+IDApIHsKKyAg ICAgICAgICAgICAgICAgICAgICBwcmludGYoIj9ORVRCSU9TIG5hbWUgdG9vIGxvbmcsICVsZCBt YXhpbXVtXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRCSU9TX05BTUVfTEVO KTsKKyAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICAgICAgICAgICAg fSBlbHNlIGlmICggIXN0cmNtcChzLHRtcG5ibmFtKSApIHsKKyAgICAgICAgICAgICAgICAgICAg ICBuZXR0eXBlID0gejsgICAgICAvKiBSZXR1cm5pbmcgdG8gb2xkIGNvbm5lY3Rpb24uLi4gKi8K KyAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOyAvKiBEb25lICovCisg ICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcCgiICAgICAgICAgICAgICAgICIsTmV0 Qmlvc05hbWUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/TkVUQklPUyBuYW1l IGFscmVhZHkgYXNzaWduZWQgdG8gXCIlc1wiXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBOZXRCaW9zTmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAg ICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgTkNCIG5jYjsK KyAgICAgICAgICAgICAgICAgICAgICBBUElSRVQgcmM7CisgICAgICAgICAgICAgICAgICAgICAg Y2tzdHJuY3B5KE5ldEJpb3NOYW1lLHMsMTYpOworICAgICAgICAgICAgICAgICAgICAgIGZvciAo eCA9IHk7IHggPCBORVRCSU9TX05BTUVfTEVOOyB4KyspCisgICAgICAgICAgICAgICAgICAgICAg ICBOZXRCaW9zTmFtZVt4XSA9IFNQOworICAgICAgICAgICAgICAgICAgICAgIE5ldEJpb3NOYW1l W05FVEJJT1NfTkFNRV9MRU5dID0gTlVMOworICAgICAgICAgICAgICAgICAgICAgIHByaW50Zigi Q2hlY2tpbmcgXCIlc1wiIGFzIGEgdW5pcXVlIE5ldEJJT1MgbmFtZS4uLlxuIiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgTmV0Qmlvc05hbWUpOworICAgICAgICAgICAgICAgICAgICAg IHJjID0gTkNCQWRkTmFtZSggTmV0YmV1aUFQSSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJm5jYiwgTmV0Qmlvc0FkYXB0ZXIsIE5ldEJpb3NOYW1lICk7CisgICAgICAg ICAgICAgICAgICAgICAgaWYgKHJjKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50 ZigKKyAgICAgICAgICAgICAgICAiP1NvcnJ5LCBcIiVzXCIgaXMgYWxyZWFkeSBpbiB1c2UgYnkg YW5vdGhlciBOZXRCSU9TIG5vZGUuXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgTmV0Qmlvc05hbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHggPSAwOyB4 IDwgTkVUQklPU19OQU1FX0xFTjsgeCsrKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5l dEJpb3NOYW1lW3hdID0gU1A7CisgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybigtOSk7 CisgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICB9CisjZW5kaWYgLyogQ0tfTkVUQklPUyAqLworI2lmZGVmIE5QSVBFCisgICAgICAgICAg ICAgIGlmICh6ID09IE5FVF9QSVBFKQorICAgICAgICAgICAgICAgIGNrc3RybmNweShwaXBlbmFt ZSxzLFBJUEVOQU1MKTsKKyNlbmRpZiAvKiBOUElQRSAqLworICAgICAgICAgIH0gZWxzZQorI2Vu ZGlmIC8qIE5QSVBFT1JCSU9TICovCisjaWZkZWYgREVDTkVUCisgICAgICAgICAgICBpZiAoeiA9 PSBORVRfREVDKSB7CisgICAgICAgICAgICAgICAgLyogRGV0ZXJtaW5lIGlmIHdlIGFyZSB1c2lu ZyBMQVQgb3IgQ1RFUk0gKi8KKyAgICAgICAgICAgICAgICBpZiAoKHkgPSBjbWtleShkbmV0dGFi LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5kbmV0LCJERUNORVQgcHJvdG9jb2wi LCJsYXQiLHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgICAgICAgICAgcmV0dXJuKHkpOworICAg ICAgICAgICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOworICAgICAgICAg ICAgICAgIHR0bnByb3RvID0geTsKKyAgICAgICAgICAgIH0gZWxzZQorI2VuZGlmIC8qIERFQ05F VCAqLworI2lmZGVmIE5FVERMTAorICAgICAgICAgICAgICBpZiAoeiA9PSBORVRfRExMKSB7Cisg ICAgICAgICAgICAgICAgICAvKiBGaW5kIG91dCB3aGljaCBETEwgdGhleSBhcmUgdXNpbmcgKi8K KyAgICAgICAgICAgICAgICAgIGNoYXIgZGxsbmFtZVsyNTZdPSIiOworICAgICAgICAgICAgICAg ICAgY2hhciAqIHA9TlVMTDsKKyAgICAgICAgICAgICAgICAgIGlmICgoeCA9IGNtaWZpKCJEeW5h bWljIGxvYWQgbGlicmFyeSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIiwm cCwmeSx4eHN0cmluZykpIDwgMCkgeworICAgICAgICAgICAgICAgICAgICAgIGlmICh4ID09IC0z KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiP05hbWUgb2YgRExMIHJlcXVp cmVkXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHgpOworICAgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgY2tzdHJuY3B5KGRsbG5hbWUscCwyNTYp OworICAgICAgICAgICAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7CisK KyAgICAgICAgICAgICAgICAgIGlmIChuZXRkbGxfbG9hZChkbGxuYW1lKSA8IDApIC8qIFRyeSB0 byBsb2FkIHRoZSBkbGwgKi8KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAw KTsKKyAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgIG5ldHR5 cGUgPSB6OworICAgICAgICAgICAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisgICAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0gZWxzZQorI2VuZGlmIC8qIE5FVERMTCAq LworICAgICAgICAgICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOworICAg ICAgICAgIG5ldHR5cGUgPSB6OworICAgICAgICAgIGlmICgKKyNpZmRlZiBERUNORVQKKyAgICAg ICAgICAgICAgKG5ldHR5cGUgIT0gTkVUX0RFQykgICYmCisjZW5kaWYgLyogREVDTkVUICovCisj aWZkZWYgTlBJUEUKKyAgICAgICAgICAgICAgKG5ldHR5cGUgIT0gTkVUX1BJUEUpICYmCisjZW5k aWYgLyogTlBJUEUgKi8KKyNpZmRlZiBDS19ORVRCSU9TCisgICAgICAgICAgICAgIChuZXR0eXBl ICE9IE5FVF9CSU9TKSAmJgorI2VuZGlmIC8qIENLX05FVEJJT1MgKi8KKyNpZmRlZiBORVRGSUxF CisgICAgICAgICAgICAgIChuZXR0eXBlICE9IE5FVF9GSUxFKSAmJgorI2VuZGlmIC8qIE5FVEZJ TEUgKi8KKyNpZmRlZiBORVRDTUQKKyAgICAgICAgICAgICAgKG5ldHR5cGUgIT0gTkVUX0NNRCkg JiYKKyNlbmRpZiAvKiBORVRDTUQgKi8KKyNpZmRlZiBORVRQVFkKKyAgICAgICAgICAgICAgKG5l dHR5cGUgIT0gTkVUX1BUWSkgJiYKKyNlbmRpZiAvKiBORVRQVFkgKi8KKyNpZmRlZiBORVRETEwK KyAgICAgICAgICAgICAgKG5ldHR5cGUgIT0gTkVUX0RMTCkgJiYKKyNlbmRpZiAvKiBORVRETEwg Ki8KKyNpZmRlZiBTVVBFUkxBVAorICAgICAgICAgICAgICAobmV0dHlwZSAhPSBORVRfU0xBVCkg JiYKKyNlbmRpZiAvKiBTVVBFUkxBVCAqLworICAgICAgICAgICAgICAobmV0dHlwZSAhPSBORVRf U1gyNSkgJiYKKyAgICAgICAgICAgICAgKG5ldHR5cGUgIT0gTkVUX1ZYMjUpICYmCisjaWZkZWYg SUJNWDI1CisgICAgICAgICAgICAgIChuZXR0eXBlICE9IE5FVF9JWDI1KSAmJgorI2VuZGlmIC8q IElCTVgyNSAqLworI2lmZGVmIFNTSEJVSUxUSU4KKyAgICAgICAgICAgICAgKG5ldHR5cGUgIT0g TkVUX1NTSCkgJiYKKyNlbmRpZiAvKiBTU0hCVUlMVElOICovCisgICAgICAgICAgICAgIChuZXR0 eXBlICE9IE5FVF9UQ1BCKSkgeworICAgICAgICAgICAgICBwcmludGYoIj9OZXR3b3JrIHR5cGUg bm90IHN1cHBvcnRlZFxuIik7CisgICAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7Cisg ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKyAg ICAgICAgICB9CisgICAgICB9CisKKyNpZm5kZWYgTk9UQ1BPUFRTCisjaWZkZWYgVENQU09DS0VU CisgICAgICBjYXNlIFhZVENQOiB7CisgICAgICAgIGV4dGVybiBpbnQgdHR5ZmQ7CisKKyAgICAg ICAgaWYgKCh6ID0gY21rZXkodGNwb3B0LG50Y3BvcHQsIlRDUCBvcHRpb24iLCJub2RlbGF5Iix4 eHN0cmluZykpIDwgMCkKKyAgICAgICAgICByZXR1cm4oeik7CisKKyAgICAgICAgc3dpdGNoICh6 KSB7CisjaWZuZGVmIE5PSFRUUAorICAgICAgICAgIGNhc2UgWFlUQ1BfSFRUUF9QUk9YWTogewor CSAgICAgIHN0cnVjdCBGREIgc3csIHR4OworCSAgICAgIGludCBuLCB4OworCSAgICAgIGNoYXIg dWJ1ZltMT0dJTkxFTisxXSwgcGJ1ZltMT0dJTkxFTisxXSwgYWJ1ZlsyNTZdOworCSAgICAgIHVi dWZbMF0gPSBwYnVmWzBdID0gYWJ1ZlswXSA9IDA7CisKKwkgICAgICBjbWZkYmkoJnN3LAkJLyog Rmlyc3QgRkRCIC0gc3dpdGNoZXMgKi8KKwkJICAgICBfQ01LRVksCQkvKiBmY29kZSAqLworCQkg ICAgICJIVFRQIHByb3h5IHNlcnZlciBob3N0Wzpwb3J0XSBvciBzd2l0Y2giLAorCQkgICAgICIi LAkJLyogZGVmYXVsdCAqLworCQkgICAgICIiLAkJLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KKwkJ ICAgICBudXNlcnBhc3MsCQkvKiBhZGR0bCBudW1lcmljIGRhdGEgMTogdGJsIHNpemUgKi8KKwkJ ICAgICA0LAkJCS8qIGFkZHRsIG51bWVyaWMgZGF0YSAyOiA0ID0gY21zd2kgKi8KKwkJICAgICB4 eHN0cmluZywJCS8qIFByb2Nlc3NpbmcgZnVuY3Rpb24gKi8KKwkJICAgICB1c2VycGFzcywJCS8q IEtleXdvcmQgdGFibGUgKi8KKwkJICAgICAmdHgJCS8qIFBvaW50ZXIgdG8gbmV4dCBGREIgKi8K KwkJICAgICApOworCSAgICAgIGNtZmRiaSgmdHgsCisJCSAgICAgX0NNVFhULAkJLyogZmNvZGUg Ki8KKwkJICAgICAiSFRUUCBwcm94eSBzZXJ2ZXIgaG9zdFs6cG9ydF0iLAorCQkgICAgICIiLAkJ LyogZGVmYXVsdCAqLworCQkgICAgICIiLAkJLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KKwkJICAg ICAwLAkJCS8qIGFkZHRsIG51bWVyaWMgZGF0YSAxICovCisJCSAgICAgMCwJCQkvKiBhZGR0bCBu dW1lcmljIGRhdGEgMiAqLworCQkgICAgIHh4c3RyaW5nLAorCQkgICAgIE5VTEwsCisJCSAgICAg TlVMTAorCQkgICAgICk7CisJICAgICAgd2hpbGUgKDEpIHsKKwkJICBpZiAoKHggPSBjbWZkYigm c3cpKSA8IDApIHsKKwkJICAgICAgaWYgKHggPT0gLTMpIHsKKwkJCSAgeCA9IC05OworCQkJICBw cmludGYoIj9Ib3N0bmFtZSByZXF1aXJlZFxuIik7CisJCSAgICAgIH0KKwkJICAgICAgcmV0dXJu KHgpOworCQkgIH0KKwkJICBpZiAoY21yZXN1bHQuZmNvZGUgIT0gX0NNS0VZKQorCQkgICAgYnJl YWs7CisJCSAgbiA9IGNtcmVzdWx0Lm5yZXN1bHQ7CisJCSAgc3dpdGNoIChuKSB7CisJCSAgICBj YXNlIFVQV19VU0VSOgorCQkgICAgY2FzZSBVUFdfUEFTUzoKKwkJICAgIGNhc2UgVVBXX0FHRU5U OgorCQkgICAgICBpZiAoKHggPSBjbWZsZCgobiA9PSBVUFdfVVNFUikgPworCQkJCSAgICAgIlVz ZXJuYW1lIiA6CisJCQkJICAgICAoKG4gPT0gVVBXX1BBU1MpID8gIlBhc3N3b3JkIiA6ICJBZ2Vu dCIpLAorCQkJCSAgICAgIiIsICZzLCB4eHN0cmluZykpIDwgMCkgeworCQkJICBpZiAoeCAhPSAt MykKKwkJCSAgICByZXR1cm4oeCk7CisJCSAgICAgIH0KKwkJICAgICAgY2tzdHJuY3B5KChuID09 IFVQV19VU0VSKSA/IHVidWYgOgorICAgICAgICAgICAgICAgICAgICAgICAgKChuID09IFVQV19Q QVNTKSA/IHBidWYgOiBhYnVmKSwgcywgCisgICAgICAgICAgICAgICAgICAgICAgICAobiA9PSBV UFdfQUdFTlQpID8gMjU2IDogKExPR0lOTEVOKzEpKTsKKwkJICB9CisJICAgICAgfQorCSAgICAg IGlmIChjbXJlc3VsdC5mY29kZSAhPSBfQ01UWFQpCisJCXJldHVybigtMik7CisJICAgICAgcyA9 IGNtcmVzdWx0LnNyZXN1bHQ7CisJICAgICAgaWYgKHMpIGlmICghKnMpIHMgPSBOVUxMOworCisj aWZkZWYgSUtTRENPTkYKKwkgICAgICBpZiAoaWtzZGNmKQorCQlyZXR1cm4oc3VjY2VzcyA9IDAp OworI2VuZGlmIC8qIElLU0RDT05GICovCisJICAgICAgbWFrZXN0cigmdGNwX2h0dHBfcHJveHlf dXNlcix1YnVmWzBdP3VidWY6TlVMTCk7CisJICAgICAgbWFrZXN0cigmdGNwX2h0dHBfcHJveHlf cHdkLHBidWZbMF0/cGJ1ZjpOVUxMKTsKKwkgICAgICBtYWtlc3RyKCZ0Y3BfaHR0cF9wcm94eV9h Z2VudCxhYnVmWzBdP2FidWY6TlVMTCk7CisJICAgICAgbWFrZXN0cigmdGNwX2h0dHBfcHJveHks cyk7CisJICAgICAgbWVtc2V0KHBidWYsMCxzaXplb2YocGJ1ZikpOworCSAgICAgIHJldHVybihz dWNjZXNzID0gMSk7CisJICB9CisjZW5kaWYgLyogTk9IVFRQICovCisvKgorICBJdCB3b3VsZCBo YXZlIGJlZW4gZWFzeSB0byBjb21iaW5lIFhZVENQX1NPQ0tTX1NWUiB3aXRoIHRoZSBwcmV2aW91 cworICBvbmUgZXhjZXB0IGZvciB0aGUgI2lmZGVmcy4uLgorKi8KKyNpZmRlZiBOVAorI2lmZGVm IENLX1NPQ0tTCisgICAgICAgICAgY2FzZSBYWVRDUF9TT0NLU19TVlI6IHsKKwkgICAgICBjaGFy IHVidWZbTE9HSU5MRU4rMV0sIHBidWZbTE9HSU5MRU4rMV07CisJICAgICAgY2hhciAqIHAgPSBn ZXRlbnYoIlNPQ0tTX1NFUlZFUiIpOworCSAgICAgIHN0cnVjdCBGREIgc3csIHR4OworCSAgICAg IGludCBuLCB4OworCisJICAgICAgaWYgKCFwKSBwID0gIiI7CisKKwkgICAgICBjbWZkYmkoJnN3 LAkJLyogRmlyc3QgRkRCIC0gc3dpdGNoZXMgKi8KKwkJICAgICBfQ01LRVksCQkvKiBmY29kZSAq LworCQkgICAgICJTT0NLUyBzZXJ2ZXIgaG9zdFs6cG9ydF0gb3Igc3dpdGNoIiwKKwkJICAgICAi IiwJCS8qIGRlZmF1bHQgKi8KKwkJICAgICAiIiwJCS8qIGFkZHRsIHN0cmluZyBkYXRhICovCisJ CSAgICAgbnVzZXJwYXNzLAkJLyogYWRkdGwgbnVtZXJpYyBkYXRhIDE6IHRibCBzaXplICovCisJ CSAgICAgNCwJCQkvKiBhZGR0bCBudW1lcmljIGRhdGEgMjogNCA9IGNtc3dpICovCisJCSAgICAg eHhzdHJpbmcsCQkvKiBQcm9jZXNzaW5nIGZ1bmN0aW9uICovCisJCSAgICAgdXNlcnBhc3MsCQkv KiBLZXl3b3JkIHRhYmxlICovCisJCSAgICAgJnR4CQkvKiBQb2ludGVyIHRvIG5leHQgRkRCICov CisJCSAgICAgKTsKKwkgICAgICBjbWZkYmkoJnR4LAorCQkgICAgIF9DTVRYVCwJCS8qIGZjb2Rl ICovCisJCSAgICAgIlNPQ0tTIHNlcnZlciBob3N0Wzpwb3J0XSIsCisJCSAgICAgcCwJCQkvKiBk ZWZhdWx0ICovCisJCSAgICAgIiIsCQkvKiBhZGR0bCBzdHJpbmcgZGF0YSAqLworCQkgICAgIDAs CQkJLyogYWRkdGwgbnVtZXJpYyBkYXRhIDEgKi8KKwkJICAgICAwLAkJCS8qIGFkZHRsIG51bWVy aWMgZGF0YSAyICovCisJCSAgICAgeHhzdHJpbmcsCisJCSAgICAgTlVMTCwKKwkJICAgICBOVUxM CisJCSAgICAgKTsKKwkgICAgICB3aGlsZSAoMSkgeworCQkgIGlmICgoeCA9IGNtZmRiKCZzdykp IDwgMCkgeworCQkgICAgICBpZiAoeCA9PSAtMykgeworCQkJICB4ID0gLTk7CisJCQkgIHByaW50 ZigiP0hvc3RuYW1lIHJlcXVpcmVkXG4iKTsKKwkJICAgICAgfQorCQkgICAgICByZXR1cm4oeCk7 CisJCSAgfQorCQkgIGlmIChjbXJlc3VsdC5mY29kZSAhPSBfQ01LRVkpCisJCSAgICBicmVhazsK KwkJICBuID0gY21yZXN1bHQubnJlc3VsdDsKKwkJICBzd2l0Y2ggKG4pIHsKKwkJICAgIGNhc2Ug VVBXX1VTRVI6CisJCSAgICBjYXNlIFVQV19QQVNTOgorCQkgICAgICBpZiAoKHggPSBjbWZsZCgo biA9PSBVUFdfVVNFUikgPyAiVXNlcm5hbWUiIDogIlBhc3N3b3JkIiwKKwkJCQkgICAgICIiLCAm cywgeHhzdHJpbmcpKSA8IDApIHsKKwkJCSAgaWYgKHggIT0gLTMpCisJCQkgICAgcmV0dXJuKHgp OworCQkgICAgICB9CisJCSAgICAgIGNrc3RybmNweSgobiA9PSBVUFdfVVNFUikgPyB1YnVmIDog cGJ1ZiwgcywgTE9HSU5MRU4rMSk7CisJCSAgfQorCSAgICAgIH0KKwkgICAgICBpZiAoY21yZXN1 bHQuZmNvZGUgIT0gX0NNVFhUKQorCQlyZXR1cm4oLTIpOworCSAgICAgIHMgPSBjbXJlc3VsdC5z cmVzdWx0OworCSAgICAgIGlmIChzKSBpZiAoISpzKSBzID0gTlVMTDsKKworI2lmZGVmIElLU0RD T05GCisJICAgICAgaWYgKGlrc2RjZikKKwkJcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKyNlbmRpZiAv KiBJS1NEQ09ORiAqLworCSAgICAgIG1ha2VzdHIoJnRjcF9zb2Nrc191c2VyLHVidWYpOworICAg ICAgICAgICAgICBtZW1zZXQocGJ1ZiwwLHNpemVvZihwYnVmKSk7CisJICAgICAgbWFrZXN0cigm dGNwX3NvY2tzX3N2cixzKTsKKwkgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworCSAgfQorCisj aWZkZWYgQ0tfU09DS1NfTlMKKyAgICAgICAgICBjYXNlIFhZVENQX1NPQ0tTX05TOiB7CisgICAg ICAgICAgICBjaGFyICogcCA9IGdldGVudigiU09DS1NfTlMiKTsKKyAgICAgICAgICAgIGlmICgh cCkgcCA9ICIiOworICAgICAgICAgICAgaWYgKCh5ID0gY210eHQoImhvc3RuYW1lIG9yIElQIG9m IFNPQ0tTIE5hbWUgU2VydmVyIixwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzLHh4 c3RyaW5nKSkgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybih5KTsKKyNpZmRlZiBJS1NEQ09O RgorICAgICAgICAgICAgICBpZiAoaWtzZGNmKSByZXR1cm4oc3VjY2VzcyA9IDApOworI2VuZGlm IC8qIElLU0RDT05GICovCisgICAgICAgICAgICAgIGlmICh0Y3Bfc29ja3NfbnMpIHsKKyAgICAg ICAgICAgICAgICAgIGZyZWUodGNwX3NvY2tzX25zKTsgICAvKiBGcmVlIGFueSBwcmV2aW91cyBz dG9yYWdlICovCisgICAgICAgICAgICAgICAgICB0Y3Bfc29ja3NfbnMgPSBOVUxMOworICAgICAg ICAgICAgICB9CisgICAgICAgICAgICAgIGlmIChzID09IE5VTEwgfHwgKnMgPT0gTlVMKSB7IC8q IElmIG5vbmUgZ2l2ZW4gKi8KKyAgICAgICAgICAgICAgICAgIHRjcF9zb2Nrc19ucyA9IE5VTEw7 ICAvKiByZW1vdmUgdGhlIG92ZXJyaWRlIHN0cmluZyAqLworICAgICAgICAgICAgICAgICAgcmV0 dXJuKHN1Y2Nlc3MgPSAxKTsKKyAgICAgICAgICAgICAgfSBlbHNlIGlmICgodGNwX3NvY2tzX25z ID0gbWFsbG9jKHN0cmxlbihzKSsxKSkpIHsKKyAgICAgICAgICAgICAgICAgIHN0cmNweSh0Y3Bf c29ja3NfbnMscyk7CisgICAgICAgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworICAg ICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOwor ICAgICAgICAgIH0KKyNlbmRpZiAvKiBDS19TT0NLU19OUyAqLworI2VuZGlmIC8qIENLX1NPQ0tT ICovCisjZW5kaWYgLyogTlQgKi8KKyAgICAgICAgICBjYXNlIFhZVENQX0FERFJFU1M6CisgICAg ICAgICAgICBpZiAoKHkgPSBjbXR4dCgicHJlZmVycmVkIElQIEFkZHJlc3MgZm9yIFRDUCBjb25u ZWN0aW9ucyIsIiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmcyx4eHN0cmluZykpIDwg MCkKKyAgICAgICAgICAgICAgcmV0dXJuKHkpOworI2lmZGVmIElLU0RDT05GCisgICAgICAgICAg ICBpZiAoaWtzZGNmKSByZXR1cm4oc3VjY2VzcyA9IDApOworI2VuZGlmIC8qIElLU0RDT05GICov CisgICAgICAgICAgICBpZiAodGNwX2FkZHJlc3MpIHsKKyAgICAgICAgICAgICAgICBmcmVlKHRj cF9hZGRyZXNzKTsgICAgICAvKiBGcmVlIGFueSBwcmV2aW91cyBzdG9yYWdlICovCisgICAgICAg ICAgICAgICAgdGNwX2FkZHJlc3MgPSBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICAgICAg aWYgKHMgPT0gTlVMTCB8fCAqcyA9PSBOVUwpIHsgLyogSWYgbm9uZSBnaXZlbiAqLworICAgICAg ICAgICAgICAgIHRjcF9hZGRyZXNzID0gTlVMTDsgICAgIC8qIHJlbW92ZSB0aGUgb3ZlcnJpZGUg c3RyaW5nICovCisgICAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKyAgICAgICAg ICAgIH0gZWxzZSBpZiAoKHRjcF9hZGRyZXNzID0gbWFsbG9jKHN0cmxlbihzKSsxKSkpIHsKKyAg ICAgICAgICAgICAgICBzdHJjcHkodGNwX2FkZHJlc3Mscyk7CisgICAgICAgICAgICAgICAgcmV0 dXJuKHN1Y2Nlc3MgPSAxKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICByZXR1 cm4oc3VjY2VzcyA9IDApOworI2lmZGVmIFNPX0tFRVBBTElWRQorICAgICAgICAgIGNhc2UgWFlU Q1BfS0VFUEFMSVZFOgorICAgICAgICAgICAgaWYgKCh6ID0gY21rZXkob25vZmYsMiwiIiwib24i LHh4c3RyaW5nKSkgPCAwKSByZXR1cm4oeik7CisgICAgICAgICAgICBpZiAoKHkgPSBjbWNmbSgp KSA8IDApIHJldHVybih5KTsKKyNpZmRlZiBJS1NEQ09ORgorICAgICAgICAgICAgaWYgKGlrc2Rj ZikgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKyNlbmRpZiAvKiBJS1NEQ09ORiAqLworI2lmZGVmIFNT SEJVSUxUSU4KKyAgICAgICAgICAgIGlmIChuZXR3b3JrICYmIG5ldHR5cGUgPT0gTkVUX1NTSCAm JiBzc2hfc29jayAhPSAtMSkKKyAgICAgICAgICAgICAgc3VjY2VzcyA9IGtlZXBhbGl2ZShzc2hf c29jayx6KTsKKyAgICAgICAgICAgIGVsc2UKKyNlbmRpZiAvKiBTU0hCVUlMVElOICovCisJICAg ICAgc3VjY2VzcyA9IGtlZXBhbGl2ZSh0dHlmZCx6KTsKKyAgICAgICAgICAgIHJldHVybihzdWNj ZXNzKTsKKyNlbmRpZiAvKiBTT19LRUVQQUxJVkUgKi8KKyNpZmRlZiBTT19ET05UUk9VVEUKKyAg ICAgICAgICBjYXNlIFhZVENQX0RPTlRST1VURToKKyAgICAgICAgICAgIGlmICgoeiA9IGNta2V5 KG9ub2ZmLDIsIiIsIm9mZiIseHhzdHJpbmcpKSA8IDApIHJldHVybih6KTsKKyAgICAgICAgICAg IGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkpOworI2lmZGVmIElLU0RDT05GCisgICAg ICAgICAgICBpZiAoaWtzZGNmKSByZXR1cm4oc3VjY2VzcyA9IDApOworI2VuZGlmIC8qIElLU0RD T05GICovCisjaWZkZWYgU1NIQlVJTFRJTgorICAgICAgICAgICAgaWYgKG5ldHdvcmsgJiYgbmV0 dHlwZSA9PSBORVRfU1NIICYmIHNzaF9zb2NrICE9IC0xKQorICAgICAgICAgICAgICBzdWNjZXNz ID0gZG9udHJvdXRlKHNzaF9zb2NrLHopOworICAgICAgICAgICAgZWxzZQorI2VuZGlmIC8qIFNT SEJVSUxUSU4gKi8KKwkgICAgICBzdWNjZXNzID0gZG9udHJvdXRlKHR0eWZkLHopOworICAgICAg ICAgICAgcmV0dXJuKHN1Y2Nlc3MpOworI2VuZGlmIC8qIFNPX0RPTlRST1VURSAqLworI2lmZGVm IFRDUF9OT0RFTEFZCisgICAgICAgICAgY2FzZSBYWVRDUF9OT0RFTEFZOgorICAgICAgICAgICAg aWYgKCh6ID0gY21rZXkob25vZmYsMiwiIiwib2ZmIix4eHN0cmluZykpIDwgMCkgcmV0dXJuKHop OworICAgICAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeSk7CisjaWZkZWYg SUtTRENPTkYKKyAgICAgICAgICAgIGlmIChpa3NkY2YpIHJldHVybihzdWNjZXNzID0gMCk7Cisj ZW5kaWYgLyogSUtTRENPTkYgKi8KKyNpZmRlZiBTU0hCVUlMVElOCisgICAgICAgICAgICBpZiAo bmV0d29yayAmJiBuZXR0eXBlID09IE5FVF9TU0ggJiYgc3NoX3NvY2sgIT0gLTEpCisgICAgICAg ICAgICAgIHN1Y2Nlc3MgPSBub19kZWxheShzc2hfc29jayx6KTsKKyAgICAgICAgICAgIGVsc2UK KyNlbmRpZiAvKiBTU0hCVUlMVElOICovCisJICAgICAgc3VjY2VzcyA9IG5vX2RlbGF5KHR0eWZk LHopOworICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MpOworICAgICAgICAgIGNhc2UgWFlUQ1Bf TkFHTEU6ICAgICAgICAgICAgIC8qIFRoZSBpbnZlcnNlIG9mIE5PREVMQVkgKi8KKyAgICAgICAg ICAgIGlmICgoeiA9IGNta2V5KG9ub2ZmLDIsIiIsIm9uIix4eHN0cmluZykpIDwgMCkgcmV0dXJu KHopOworICAgICAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeSk7CisjaWZk ZWYgSUtTRENPTkYKKyAgICAgICAgICAgIGlmIChpa3NkY2YpIHJldHVybihzdWNjZXNzID0gMCk7 CisjZW5kaWYgLyogSUtTRENPTkYgKi8KKyNpZmRlZiBTU0hCVUlMVElOCisgICAgICAgICAgICBp ZiAobmV0d29yayAmJiBuZXR0eXBlID09IE5FVF9TU0ggJiYgc3NoX3NvY2sgIT0gLTEpCisgICAg ICAgICAgICAgIHN1Y2Nlc3MgPSBub19kZWxheShzc2hfc29jayx6KTsKKyAgICAgICAgICAgIGVs c2UKKyNlbmRpZiAvKiBTU0hCVUlMVElOICovCisJICAgICAgc3VjY2VzcyA9IG5vX2RlbGF5KHR0 eWZkLCF6KTsKKyAgICAgICAgICAgIHJldHVybihzdWNjZXNzKTsKKyNlbmRpZiAvKiBUQ1BfTk9E RUxBWSAqLworI2lmZGVmIFNPX0xJTkdFUgorICAgICAgICAgIGNhc2UgWFlUQ1BfTElOR0VSOgor ICAgICAgICAgICAgaWYgKCh6ID0gY21rZXkob25vZmYsMiwiIiwib24iLHh4c3RyaW5nKSkgPCAw KQorICAgICAgICAgICAgICByZXR1cm4oeik7CisgICAgICAgICAgICBpZiAoeikgeyAgICAgICAg ICAgICAgICAgICAgLyogaWYgb24sIHdlIG5lZWQgYSB0aW1lb3V0IHZhbHVlICovCisgICAgICAg ICAgICAgICAgaWYgKCh4ID0gY21udW0oIkxpbmdlciB0aW1lb3V0IGluIDEwdGggb2YgYSBtaWxs aXNlY29uZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjAiLDEwLCZ5LHh4c3Ry aW5nKSkgPCAwKQorICAgICAgICAgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICAgICAgfSBl bHNlCisgICAgICAgICAgICAgIHkgPSAwOworICAgICAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkg PCAwKQorICAgICAgICAgICAgICByZXR1cm4oeCk7CisjaWZkZWYgSUtTRENPTkYKKyAgICAgICAg ICAgIGlmIChpa3NkY2YpIHJldHVybihzdWNjZXNzID0gMCk7CisjZW5kaWYgLyogSUtTRENPTkYg Ki8KKyNpZmRlZiBTU0hCVUlMVElOCisgICAgICAgICAgICBpZiAobmV0d29yayAmJiBuZXR0eXBl ID09IE5FVF9TU0ggJiYgc3NoX3NvY2sgIT0gLTEpCisgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBj a19saW5nZXIoc3NoX3NvY2sseix5KTsKKyAgICAgICAgICAgIGVsc2UKKyNlbmRpZiAvKiBTU0hC VUlMVElOICovCisJICAgICAgc3VjY2VzcyA9IGNrX2xpbmdlcih0dHlmZCx6LHkpOworICAgICAg ICAgICAgcmV0dXJuKHN1Y2Nlc3MpOworI2VuZGlmIC8qIFNPX0xJTkdFUiAqLworI2lmZGVmIFNP X1NOREJVRgorICAgICAgICAgIGNhc2UgWFlUQ1BfU0VOREJVRjoKKyAgICAgICAgICAgIHggPSBj bW51bSgiU2VuZCBidWZmZXIgc2l6ZSwgYnl0ZXMiLCI4MTkyIiwxMCwmeix4eHN0cmluZyk7Cisg ICAgICAgICAgICBpZiAoeCA8IDApIHJldHVybih4KTsKKyAgICAgICAgICAgIGlmICgoeCA9IGNt Y2ZtKCkpIDwgMCkgcmV0dXJuKHgpOworI2lmZGVmIElLU0RDT05GCisgICAgICAgICAgICBpZiAo aWtzZGNmKSByZXR1cm4oc3VjY2VzcyA9IDApOworI2VuZGlmIC8qIElLU0RDT05GICovCisjaWZk ZWYgU1NIQlVJTFRJTgorICAgICAgICAgICAgaWYgKG5ldHdvcmsgJiYgbmV0dHlwZSA9PSBORVRf U1NIICYmIHNzaF9zb2NrICE9IC0xKQorICAgICAgICAgICAgICBzdWNjZXNzID0gc2VuZGJ1Zihz c2hfc29jayx6KTsKKyAgICAgICAgICAgIGVsc2UKKyNlbmRpZiAvKiBTU0hCVUlMVElOICovCisJ ICAgICAgc3VjY2VzcyA9IHNlbmRidWYodHR5ZmQseik7CisgICAgICAgICAgICByZXR1cm4oc3Vj Y2Vzcyk7CisjZW5kaWYgLyogU09fU05EQlVGICovCisjaWZkZWYgU09fUkNWQlVGCisgICAgICAg ICAgY2FzZSBYWVRDUF9SRUNWQlVGOgorICAgICAgICAgICAgeCA9IGNtbnVtKCJSZWNlaXZlIGJ1 ZmZlciBzaXplLCBieXRlcyIsIjgxOTIiLDEwLCZ6LHh4c3RyaW5nKTsKKyAgICAgICAgICAgIGlm ICh4IDwgMCkgcmV0dXJuKHgpOworICAgICAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSBy ZXR1cm4oeCk7CisjaWZkZWYgSUtTRENPTkYKKyAgICAgICAgICAgIGlmIChpa3NkY2YpIHJldHVy bihzdWNjZXNzID0gMCk7CisjZW5kaWYgLyogSUtTRENPTkYgKi8KKworLyogTm90ZTogVGhlIGZv bGxvd2luZyBpcyBub3QgMTYtYml0IHNhZmUgKi8KKworI2lmbmRlZiBRTlgxNgorICAgICAgICAg ICAgaWYgKHggPiA1MjI0OCkgeworICAgICAgICAgICAgICAgIHByaW50ZigiP1dhcm5pbmc6IHJl Y2VpdmUgYnVmZmVycyBsYXJnZXIgdGhhbiA1MjI0OCBieXRlc1xuIik7CisgICAgICAgICAgICAg ICAgcHJpbnRmKCIgbWF5IG5vdCBiZSB1bmRlcnN0b29kIGJ5IGFsbCBob3N0cy4gIFBlcmZvcm1h bmNlXG4iKTsKKyAgICAgICAgICAgICAgICBwcmludGYoIiBtYXkgc3VmZmVyLlxuIik7CisgICAg ICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBRTlgxNiAq LworI2lmZGVmIFNTSEJVSUxUSU4KKyAgICAgICAgICAgIGlmIChuZXR3b3JrICYmIG5ldHR5cGUg PT0gTkVUX1NTSCAmJiBzc2hfc29jayAhPSAtMSkKKyAgICAgICAgICAgICAgc3VjY2VzcyA9IHJl Y3ZidWYoc3NoX3NvY2sseik7CisgICAgICAgICAgICBlbHNlCisjZW5kaWYgLyogU1NIQlVJTFRJ TiAqLworCSAgICAgIHN1Y2Nlc3MgPSByZWN2YnVmKHR0eWZkLHopOworICAgICAgICAgICAgcmV0 dXJuKHN1Y2Nlc3MpOworI2VuZGlmIC8qIFNPX1JDVkJVRiAqLworCisjaWZkZWYgVk1TCisjaWZk ZWYgREVDX1RDUElQCisgICAgICAgICAgY2FzZSBYWVRDUF9VQ1g6IHsgICAgICAgICAgICAgLyog VUNYIDIuMCBwb3J0IHN3YWJiaW5nIGJ1ZyAqLworICAgICAgICAgICAgICBleHRlcm4gaW50IHVj eF9wb3J0X2J1ZzsKKyAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSBzZXRvbigmdWN4X3Bv cnRfYnVnKSk7CisgICAgICAgICAgfQorI2VuZGlmIC8qIERFQ19UQ1BJUCAqLworI2VuZGlmIC8q IFZNUyAqLworCisgICAgICAgICAgY2FzZSBYWVRDUF9SRE5TOiB7CisgICAgICAgICAgICAgIGV4 dGVybiBpbnQgdGNwX3JkbnM7CisgICAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gc2V0b25h dXQoJnRjcF9yZG5zKSk7CisgICAgICAgICAgfQorCisjaWZkZWYgQ0tfRE5TX1NSVgorICAgICAg ICAgIGNhc2UgWFlUQ1BfRE5TX1NSVjogeworICAgICAgICAgICAgICBleHRlcm4gaW50IHRjcF9k bnNfc3J2OworICAgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IHNldG9uKCZ0Y3BfZG5zX3Ny dikpOworICAgICAgICAgIH0KKyNlbmRpZiAvKiBDS19ETlNfU1JWICovCisKKyAgICAgICAgICBk ZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuKDApOworICAgICAgICB9CisgICAgICB9CisjZW5k aWYgLyogVENQU09DS0VUICovCisjZW5kaWYgLyogTk9UQ1BPUFRTICovCisjZW5kaWYgLyogTkVU Q09OTiAqLworICAgIH0KKworICAgIHN3aXRjaCAoeHgpIHsKKworI2lmbmRlZiBOT0xPQ0FMCisj aWZkZWYgTkVUQ09OTgorICAgICAgY2FzZSBYWUhPU1Q6IHsgICAgICAgICAgICAgICAgICAgIC8q IFNFVCBIT1NUICovCisgICAgICAgICAgeiA9IHR0bnByb3RvOyAgICAgICAgICAgICAgICAgLyog U2F2ZSBwcm90b2NvbCBpbiBjYXNlIG9mIGZhaWx1cmUgKi8KKyNpZmRlZiBERUNORVQKKyAgICAg ICAgICBpZiAobmV0dHlwZSAhPSBORVRfREVDKQorI2VuZGlmIC8qIERFQ05FVCAqLworICAgICAg ICAgICAgdHRucHJvdG8gPSBOUF9OT05FOworICAgICAgICAgIGlmICgoeSA9IHNldGxpbihYWUhP U1QsMSwwKSkgPD0gMCkgeyAvKiBTZXRzIHN1Y2Nlc3MgdG8gMSAqLworICAgICAgICAgICAgICBk ZWJ1ZyhGMTAxLCJTRVQgSE9TVCBmYWlsIG1kbXR5cCIsIiIsbWRtdHlwKTsKKyAgICAgICAgICAg ICAgdHRucHJvdG8gPSB6OyAgICAgICAgICAgICAvKiBGYWlsZWQsIHJlc3RvcmUgcHJvdG9jb2wg Ki8KKyAgICAgICAgICAgICAgc3VjY2VzcyA9IDA7CisgICAgICAgICAgfQorICAgICAgICAgIGRp ZHNldGxpbisrOworICAgICAgICAgIGRlYnVnKEYxMDEsIlNFVCBIT1NUIE9LIG1kbXR5cCIsIiIs bWRtdHlwKTsKKyAgICAgICAgICBkZWJ1ZyhGMTAxLCJTRVQgSE9TVCByZWxpYWJsZSIsIiIscmVs aWFibGUpOworICAgICAgICAgIHJldHVybih5KTsKKyAgICAgIH0KKyNlbmRpZiAvKiBORVRDT05O ICovCisKKyAgICAgIGNhc2UgWFlMSU5FOiAgICAgICAgICAgICAgICAgICAgICAvKiBTRVQgTElO RSAoPSBTRVQgUE9SVCkgKi8KKyAgICAgICAgZGVidWcoRjEwMSwic2V0bGluIGZsb3cgMSIsIiIs Zmxvdyk7CisgICAgICAgIHggPSBzZXRsaW4oeHgsMSwwKTsKKyAgICAgICAgaWYgKHggPiAtMSkg ZGlkc2V0bGluKys7CisgICAgICAgIGRlYnVnKEYxMDEsIlNFVCBMSU5FIHNldGxpbiIsIiIseCk7 CisgICAgICAgIGRlYnVnKEYxMDEsIlNFVCBMSU5FIGZsb3ciLCIiLGZsb3cpOworICAgICAgICBk ZWJ1ZyhGMTAxLCJTRVQgTElORSBsb2NhbCIsIiIsbG9jYWwpOworICAgICAgICBkZWJ1ZyhGMTAx LCJTRVQgTElORSByZWxpYWJsZSIsIiIscmVsaWFibGUpOworICAgICAgICByZXR1cm4oeCk7Cisj ZW5kaWYgLyogTk9MT0NBTCAqLworCisjaWZuZGVmIE5PU0VUS0VZCisgICAgICBjYXNlIFhZS0VZ OiAgICAgICAgICAgICAgICAgICAgICAgLyogU0VUIEtFWSAqLworICAgICAgICByZXR1cm4oZG9z ZXRrZXkoKSk7CisjZW5kaWYgLyogTk9TRVRLRVkgKi8KKworI2lmbmRlZiBOT0NTRVRTCisgICAg ICBjYXNlIFhZTEFORzogICAgICAgICAgICAgICAgICAgICAgLyogTGFuZ3VhZ2UgKi8KKyAgICAg ICAgaWYgKCh5ID0gY21rZXkobG5ndGFiLG5sbmcsIiIsIm5vbmUiLHh4c3RyaW5nKSkgPCAwKQor ICAgICAgICAgIHJldHVybih5KTsKKyAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1 cm4oeCk7CisKKyAgICAgICAgLyogTG9vayB1cCBsYW5ndWFnZSBhbmQgZ2V0IGFzc29jaWF0ZWQg Y2hhcmFjdGVyIHNldHMgKi8KKyAgICAgICAgZm9yIChpID0gMDsgKGkgPCBubGFuZ3MpICYmIChs YW5nc1tpXS5pZCAhPSB5KTsgaSsrKSA7CisgICAgICAgIGlmIChpID49IG5sYW5ncykgeworICAg ICAgICAgICAgcHJpbnRmKCI/aW50ZXJuYWwgZXJyb3IsIHNvcnJ5XG4iKTsKKyAgICAgICAgICAg IHJldHVybihzdWNjZXNzID0gMCk7CisgICAgICAgIH0gLyogICovCisgICAgICAgIGxhbmd1YWdl ID0gaTsgICAgICAgICAgICAgICAgICAgLyogQWxsIGdvb2QsIHNldCB0aGUgbGFuZ3VhZ2UsICov CisgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisjZW5kaWYgLyogTk9DU0VUUyAqLworCisj aWZuZGVmIE1BQworICAgICAgY2FzZSBYWUJBQ0s6ICAgICAgICAgICAgICAgICAgICAgIC8qIEJB Q0tHUk9VTkQgKi8KKyAgICAgICAgaWYgKCh6ID0gY21rZXkob25vZmYsMiwiIiwiIix4eHN0cmlu ZykpIDwgMCkgcmV0dXJuKHopOworICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVy bih5KTsKKyNpZmRlZiBDT01NRU5UCisgICAgICAgIGJnc2V0ID0gejsgICAgICAgICAgICAgICAg ICAgICAgLyogMCA9IG9mZiAoZm9yZWdyb3VuZCkgKi8KKyNpZmRlZiBWTVMgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiAxID0gb24gKGJhY2tncm91bmQpICovCisgICAgICAgIGlmIChi YXRjaCAmJiBiZ3NldCA9PSAwKSAgICAgICAgLyogVG8gZW5hYmxlIGVjaG9pbmcgb2YgY29tbWFu ZHMgKi8KKyAgICAgICAgICBja3hlY2ggPSAxOyAgICAgICAgICAgICAgICAgICAvKiBpbiBWTVMg YmF0Y2ggbG9ncyAqLworI2VuZGlmIC8qIFZNUyAqLworI2Vsc2UgIC8qIENPTU1FTlQgKi8KKyAg ICAgICAgaWYgKHopIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiAxID0gQmFja2dyb3VuZCAq LworICAgICAgICAgICAgYmdzZXQgPSAxOworICAgICAgICAgICAgYmFja2dyZCA9IDE7CisjaWZk ZWYgVk1TCisgICAgICAgICAgICBiYXRjaCA9IDE7CisjZW5kaWYgLyogVk1TICovCisgICAgICAg IH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogMCA9IEZvcmVncm91bmQgKi8KKyAg ICAgICAgICAgIGJnc2V0ID0gMDsKKyAgICAgICAgICAgIGJhY2tncmQgPSAwOworI2lmZGVmIFZN UworICAgICAgICAgICAgYmF0Y2ggPSAwOworI2VuZGlmIC8qIFZNUyAqLworICAgICAgICB9Cisj ZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAgICBzdWNjZXNzID0gMTsKKyAgICAgICAgYmdjaGso KTsKKyAgICAgICAgcmV0dXJuKHN1Y2Nlc3MpOworI2VuZGlmIC8qIE1BQyAqLworCisgICAgICBj YXNlIFhZUVVJRTogeyAgICAgICAgICAgICAgICAgICAgLyogUVVJRVQgKi8KKyNpZmRlZiBEQ01E QlVGCisgICAgICAgICAgZXh0ZXJuIGludCAqIHhxdWlldDsKKyNlbHNlCisgICAgICAgICAgZXh0 ZXJuIGludCB4cXVpZXRbXTsKKyNlbmRpZiAvKiBEQ01EQlVGICovCisgICAgICAgICAgeCA9IHNl dG9uKCZxdWlldCk7CisgICAgICAgICAgaWYgKHggPCAwKSByZXR1cm4oeCk7CisgICAgICAgICAg eHF1aWV0W2NtZGx2bF0gPSBxdWlldDsKKyAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IHgpOwor ICAgICAgfQorCisjaWZuZGVmIE5PWEZFUgorICAgICAgY2FzZSBYWUJVRjogeyAgICAgICAgICAg ICAgICAgICAgIC8qIEJVRkZFUlMgKi8KKyNpZmRlZiBEWU5BTUlDCisgICAgICAgICAgaW50IHNi LCByYjsKKyAgICAgICAgICBpZiAoKHkgPSBjbW51bSgiU2VuZCBidWZmZXIgc2l6ZSIsIiIsMTAs JnNiLHh4c3RyaW5nKSkgPCAwKSB7CisgICAgICAgICAgICAgIGlmICh5ID09IC0zKSBwcmludGYo Ij9CdWZmZXIgc2l6ZSByZXF1aXJlZFxuIik7CisgICAgICAgICAgICAgIHJldHVybih5KTsKKyAg ICAgICAgICB9CisgICAgICAgICAgaWYgKHNiIDwgMCkgeworICAgICAgICAgICAgICBpZiAoKmF0 bWJ1ZiA9PSAnLScpCisgICAgICAgICAgICAgICAgcHJpbnRmKCI/TmVnYXRpdmUgbnVtYmVycyBj YW4ndCBiZSB1c2VkIGhlcmVcbiIpOworICAgICAgICAgICAgICBlbHNlIHByaW50ZigiP0ludGVn ZXIgb3ZlcmZsb3csIHVzZSBhIHNtYWxsZXIgbnVtYmVyIHBsZWFzZVxuIik7CisgICAgICAgICAg ICAgIHJldHVybigtOSk7CisgICAgICAgICAgfSBlbHNlIGlmIChzYiA8IDgwKSB7CisgICAgICAg ICAgICAgIHByaW50ZigiP1RvbyBzbWFsbFxuIik7CisgICAgICAgICAgICAgIHJldHVybigtOSk7 CisgICAgICAgICAgfQorICAgICAgICAgIGlmICgoeT1jbW51bSgiUmVjZWl2ZSBidWZmZXIgc2l6 ZSIsY2tpdG9hKHNiKSwxMCwmcmIseHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgICByZXR1cm4o eSk7CisgICAgICAgICAgaWYgKHJiIDwgMCkgeworICAgICAgICAgICAgICBpZiAoKmF0bWJ1ZiA9 PSAnLScpCisgICAgICAgICAgICAgICAgcHJpbnRmKCI/TmVnYXRpdmUgbnVtYmVycyBjYW4ndCBi ZSB1c2VkIGhlcmVcbiIpOworICAgICAgICAgICAgICBlbHNlIHByaW50ZigiP0ludGVnZXIgb3Zl cmZsb3csIHVzZSBhIHNtYWxsZXIgbnVtYmVyIHBsZWFzZVxuIik7CisgICAgICAgICAgICAgIHJl dHVybigtOSk7CisgICAgICAgICAgfSBlbHNlIGlmIChyYiA8IDgwKSB7CisgICAgICAgICAgICAg IHByaW50ZigiP1RvbyBzbWFsbFxuIik7CisgICAgICAgICAgICAgIHJldHVybigtOSk7CisgICAg ICAgICAgfQorICAgICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkpOworICAg ICAgICAgIGlmICgoeSA9IGluaWJ1ZnMoc2IscmIpKSA8IDApIHJldHVybih5KTsKKyAgICAgICAg ICB5ID0gYWRqcGtsKHVycHNpeix3c2xvdHIsYmlncmJzaXopOyAvKiBNYXliZSBhZGp1c3QgcGFj a2V0IHNpemVzICovCisgICAgICAgICAgaWYgKHkgIT0gdXJwc2l6KSB1cnBzaXogPSB5OworICAg ICAgICAgIHkgPSBhZGpwa2woc3BzaXosd3Nsb3RyLGJpZ3Nic2l6KTsKKyAgICAgICAgICBpZiAo eSAhPSBzcHNpeikgc3BzaXogPSBzcG1heCA9IHNwc2l6ciA9IHk7CisgICAgICAgICAgcmV0dXJu KHN1Y2Nlc3MgPSAxKTsKKyNlbHNlCisgICAgICAgICAgcHJpbnRmKCI/U29ycnksIG5vdCBhdmFp bGFibGVcbiIpOworICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7CisjZW5kaWYgLyogRFlO QU1JQyAqLworICAgICAgfQorCisgICAgICBjYXNlIFhZQ0hLVDogICAgICAgICAgICAgICAgICAg ICAgLyogQkxPQ0stQ0hFQ0sgKi8KKyAgICAgICAgaWYgKCh4ID0gY21rZXkoY2hrdGFiLG5jaGt0 LCIiLCIzIix4eHN0cmluZykpIDwgMCkgcmV0dXJuKHgpOworICAgICAgICBpZiAoKHkgPSBjbWNm bSgpKSA8IDApIHJldHVybih5KTsKKwlpZiAoeCA9PSA1KSB7CisJICAgIGJjdGYgPSAxOworI2lm ZGVmIENPTU1FTlQKKwkgICAgcHJpbnRmKCI/NSAtIE5vdCBpbXBsZW1lbnRlZCB5ZXRcbiIpOwor CSAgICByZXR1cm4oc3VjY2VzcyA9IDApOworI2VuZGlmCS8qIENPTU1FTlQgKi8KKwl9CisgICAg ICAgIGJjdHIgPSB4OyAgICAgICAgICAgICAgICAgICAgICAgLyogU2V0IGxvY2FsIHRvbyBldmVu IGlmIFJFTU9URSBTRVQgKi8KKworICAgICAgICBpZiAocm1zZmxnKSB7CisgICAgICAgICAgICBp ZiAoeCA9PSA0KSB7CisgICAgICAgICAgICAgICAgdG1wYnVmWzBdID0gJ0InOworICAgICAgICAg ICAgICAgIHRtcGJ1ZlsxXSA9ICdcMCc7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg ICAgY2tzdHJuY3B5KHRtcGJ1Zixja2l0b2EoeCksVE1QQlVGU0laKTsKKyAgICAgICAgICAgIHNz dGF0ZSA9IHNldGdlbignUycsICI0MDAiLCB0bXBidWYsICIiKTsKKyAgICAgICAgICAgIHJldHVy bigoaW50KSBzc3RhdGUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuKHN1 Y2Nlc3MgPSAxKTsKKyAgICAgICAgfQorI2VuZGlmIC8qIE5PWEZFUiAqLworCisjaWZuZGVmIE5P TE9DQUwKKyNpZm5kZWYgTUFDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUaGUgTWFj IGhhcyBubyBSUy0yMzIgKi8KK2Nhc2UgWFlDQVJSOiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBDQVJSSUVSLVdBVENIICovCisgICAgICAgIHJldHVybihzZXRkY2QoKSk7CisjZW5kaWYg LyogTUFDICovCisjZW5kaWYgLyogTk9MT0NBTCAqLworICAgIH0KKworI2lmZGVmIFROQ09ERQor ICAgIHN3aXRjaCAoeHgpIHsgICAgICAgICAgICAgICAgICAgICAgIC8qIEF2b2lkIGxvbmcgc3dp dGNoIHN0YXRlbWVudHMuLi4gKi8KKyAgICAgIGNhc2UgWFlURUxPUDogeworICAgICAgICAgIGlu dCBjLCBuOyAgICAgICAgICAgICAgICAgICAgIC8qIFdvcmtlcnMgKi8KKyAgICAgICAgICBpbnQg Z2V0dmFsID0gMDsgICAgICAgICAgICAgICAvKiBXaGV0aGVyIHRvIGdldCBzd2l0Y2ggdmFsdWUg Ki8KKyAgICAgICAgICBpbnQgdG5zZXJ2ZXIgPSAwOyAgICAgICAgICAgICAvKiBDbGllbnQgYnkg ZGVmYXVsdCAqLworICAgICAgICAgIGludCBvcHQgPSAtMTsgICAgICAgICAgICAgICAgIC8qIFRl bG5ldCBPcHRpb24gKi8KKyAgICAgICAgICBzdHJ1Y3QgRkRCIHN3LCBvcDsgICAgICAgICAgICAv KiBGREJzIGZvciBlYWNoIHBhcnNlIGZ1bmN0aW9uICovCisjaWZkZWYgQ0tfQVVUSEVOVElDQVRJ T04KKyAgICAgICAgICBleHRlcm4gaW50IHNsX3RvcHRfYV9zX3NhdmVkOworICAgICAgICAgIGV4 dGVybiBpbnQgc2xfdG9wdF9hX2Nfc2F2ZWQ7CisgICAgICAgICAgZXh0ZXJuIGludCBzbF90b3B0 X2Vfc19zYXZlZDsKKyAgICAgICAgICBleHRlcm4gaW50IHNsX3RvcHRfZV9jX3NhdmVkOworI2Vu ZGlmIC8qIENLX0FVVEhFTlRJQ0FUSU9OICovCisjaWZkZWYgSUtTRAorICAgICAgICAgIGlmIChp bnNlcnZlcikgICAgICAgICAgICAgICAgIC8qIFNlcnZlciBieSBkZWZhdWx0IHdoZW4gSUtTRCAq LworICAgICAgICAgICAgdG5zZXJ2ZXIgPSAxOworI2VuZGlmIC8qIElLU0QgKi8KKworICAgICAg ICAgIC8qIFNldCB1cCBjaGFpbmVkIHBhcnNlIGZ1bmN0aW9ucy4uLiAqLworCisgICAgICAgICAg Y21mZGJpKCZvcCwgICAgICAgICAgICAgICAgICAgLyogRmlyc3QgZmRiIC0gdGVsb3B0cyovCisg ICAgICAgICAgICAgICAgIF9DTUtFWSwgICAgICAgICAgICAgICAgLyogZmNvZGUgKi8KKyAgICAg ICAgICAgICAgICAgIi9jbGllbnQsIC9zZXJ2ZXIgb3IiLCAvKiBobHBtc2cgKi8KKyAgICAgICAg ICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAvKiBkZWZhdWx0ICovCisgICAgICAgICAg ICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KKyAg ICAgICAgICAgICAgICAgbnRub3B0LCAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRh dGEgMSAqLworICAgICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRs IG51bWVyaWMgZGF0YSAyICovCisgICAgICAgICAgICAgICAgIHh4c3RyaW5nLAorICAgICAgICAg ICAgICAgICB0bm9wdHRhYiwKKyAgICAgICAgICAgICAgICAgJnN3CisgICAgICAgICAgICAgICAg ICk7CisgICAgICAgICAgY21mZGJpKCZzdywgICAgICAgICAgICAgICAgICAgLyogU2Vjb25kIEZE QiAtIGNvbW1hbmQgc3dpdGNoZXMgKi8KKyAgICAgICAgICAgICAgICAgX0NNS0VZLCAgICAgICAg ICAgICAgICAvKiBmY29kZSAqLworICAgICAgICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAg ICAgIC8qIGhscG1zZyAqLworICAgICAgICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAg IC8qIGRlZmF1bHQgKi8KKyAgICAgICAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAv KiBhZGR0bCBzdHJpbmcgZGF0YSAqLworICAgICAgICAgICAgICAgICBudG5vcHRzdywgICAgICAg ICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAxOiB0Ymwgc2l6ZSAqLworICAgICAgICAgICAg ICAgICA0LCAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAyOiA0ID0g Y21zd2kgKi8KKyAgICAgICAgICAgICAgICAgeHhzdHJpbmcsICAgICAgICAgICAgICAvKiBQcm9j ZXNzaW5nIGZ1bmN0aW9uICovCisgICAgICAgICAgICAgICAgIHRub3B0c3csICAgICAgICAgICAg ICAgLyogS2V5d29yZCB0YWJsZSAqLworICAgICAgICAgICAgICAgICBOVUxMICAgICAgICAgICAg ICAgICAgIC8qIFBvaW50ZXIgdG8gbmV4dCBGREIgKi8KKyAgICAgICAgICAgICAgICAgKTsKKwor ICAgICAgICAgIHdoaWxlIChvcHQgPCAwKSB7ICAgICAgICAgICAgIC8qIFBhcnNlIDAgb3IgbW9y ZSBzd2l0Y2hlcyAqLworICAgICAgICAgICAgICB4ID0gY21mZGIoJm9wKTsgICAgICAgICAgIC8q IFBhcnNlIHN3aXRjaCBvciBvdGhlciB0aGluZyAqLworICAgICAgICAgICAgICBkZWJ1ZyhGMTAx LCJYWVRFTE9QIGNtZmRiIiwiIix4KTsKKyAgICAgICAgICAgICAgaWYgKHggPCAwKSAgICAgICAg ICAgICAgICAvKiBFcnJvciAqLworICAgICAgICAgICAgICAgIHJldHVybih4KTsgICAgICAgICAg ICAgIC8qIG9yIHJlcGFyc2UgbmVlZGVkICovCisgICAgICAgICAgICAgIGlmIChjbXJlc3VsdC5m Y29kZSAhPSBfQ01LRVkpIC8qIEJyZWFrIG91dCBpZiBub3QgYSBzd2l0Y2ggKi8KKyAgICAgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgYyA9IGNtZ2JyaygpOyAgICAgICAgICAgICAv KiBHZXQgYnJlYWsgY2hhcmFjdGVyICovCisgICAgICAgICAgICAgIGdldHZhbCA9IChjID09ICc6 JyB8fCBjID09ICc9Jyk7IC8qIHNlZSBob3cgc3dpdGNoIGVuZGVkICovCisgICAgICAgICAgICAg IGlmIChnZXR2YWwgJiYgIShjbXJlc3VsdC5rZmxhZ3MgJiBDTV9BUkcpKSB7CisgICAgICAgICAg ICAgICAgICBwcmludGYoIj9UaGlzIHN3aXRjaCBkb2VzIG5vdCB0YWtlIGFyZ3VtZW50c1xuIik7 CisgICAgICAgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgIHogPSBjbXJlc3VsdC5ucmVzdWx0OyAgICAgLyogTnVtZXJpYyByZXN1bHQgPSBzd2l0 Y2ggdmFsdWUgKi8KKyAgICAgICAgICAgICAgZGVidWcoRjEwMSwiWFlURUxPUCBzd2l0Y2giLCIi LHopOworCisgICAgICAgICAgICAgIHN3aXRjaCAoeikgeyAgICAgICAgICAgICAgLyogUHJvY2Vz cyB0aGUgc3dpdGNoICovCisgICAgICAgICAgICAgICAgY2FzZSBDS19UTl9DTElFTlQ6CisgICAg ICAgICAgICAgICAgICB0bnNlcnZlciA9IDA7CisgICAgICAgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgICAgICAgICBjYXNlIENLX1ROX1NFUlZFUjoKKyAgICAgICAgICAgICAgICAgIHRuc2Vy dmVyID0gMTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2Fz ZSBDS19UTl9FQzoKKyAgICAgICAgICAgICAgICAgIG9wdCA9IFRFTE9QVF9FQ0hPOworICAgICAg ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBDS19UTl9UVDoKKyAgICAg ICAgICAgICAgICAgIG9wdCA9IFRFTE9QVF9UVFlQRTsKKyAgICAgICAgICAgICAgICAgIGJyZWFr OworICAgICAgICAgICAgICAgIGNhc2UgQ0tfVE5fQk06CisgICAgICAgICAgICAgICAgICBvcHQg PSBURUxPUFRfQklOQVJZOworICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg ICAgY2FzZSBDS19UTl9FTlY6CisgICAgICAgICAgICAgICAgICBvcHQgPSBURUxPUFRfTkVXRU5W SVJPTjsKKyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQ0tf VE5fTE9DOgorICAgICAgICAgICAgICAgICAgb3B0ID0gVEVMT1BUX1NORExPQzsKKyAgICAgICAg ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQ0tfVE5fQVU6CisgICAgICAg ICAgICAgICAgICBvcHQgPSBURUxPUFRfQVVUSEVOVElDQVRJT047CisgICAgICAgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIENLX1ROX0ZYOgorICAgICAgICAgICAgICAg ICAgb3B0ID0gVEVMT1BUX0ZPUldBUkRfWDsKKyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg ICAgICAgICAgICAgIGNhc2UgQ0tfVE5fRU5DOgorICAgICAgICAgICAgICAgICAgb3B0ID0gVEVM T1BUX0VOQ1JZUFRJT047CisgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg ICBjYXNlIENLX1ROX0lLUzoKKyAgICAgICAgICAgICAgICAgIG9wdCA9IFRFTE9QVF9LRVJNSVQ7 CisgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIENLX1ROX1RM UzoKKyAgICAgICAgICAgICAgICAgIG9wdCA9IFRFTE9QVF9TVEFSVF9UTFM7CisgICAgICAgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIENLX1ROX1hEOgorICAgICAgICAg ICAgICAgICAgb3B0ID0gVEVMT1BUX1hESVNQTE9DOworICAgICAgICAgICAgICAgICAgYnJlYWs7 CisgICAgICAgICAgICAgICAgY2FzZSBDS19UTl9OQVdTOgorICAgICAgICAgICAgICAgICAgb3B0 ID0gVEVMT1BUX05BV1M7CisgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg ICBjYXNlIENLX1ROX1NHQToKKyAgICAgICAgICAgICAgICAgIG9wdCA9IFRFTE9QVF9TR0E7Cisg ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIENLX1ROX1BIUjoK KyAgICAgICAgICAgICAgICAgIG9wdCA9IFRFTE9QVF9QUkFHTUFfSEVBUlRCRUFUOworICAgICAg ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBDS19UTl9QU1A6CisgICAg ICAgICAgICAgICAgICBvcHQgPSBURUxPUFRfU1NQSV9MT0dPTjsKKyAgICAgICAgICAgICAgICAg IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQ0tfVE5fUExHOgorICAgICAgICAgICAgICAg ICAgb3B0ID0gVEVMT1BUX1BSQUdNQV9MT0dPTjsKKyAgICAgICAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICAgICAgICAgIGNhc2UgQ0tfVE5fU0FLOgorICAgICAgICAgICAgICAgICAgb3B0ID0g VEVMT1BUX0lCTV9TQUs7CisgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg ICBjYXNlIENLX1ROX0NQQzoKKyAgICAgICAgICAgICAgICAgIG9wdCA9IFRFTE9QVF9DT01QT1JU OworICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBDS19UTl9M T0c6CisgICAgICAgICAgICAgICAgICBvcHQgPSBURUxPUFRfTE9HT1VUOworICAgICAgICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBDS19UTl9GTFc6CisgICAgICAgICAg ICAgICAgICBvcHQgPSBURUxPUFRfTEZMT1c7CisgICAgICAgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/VW5leHBl Y3RlZCB2YWx1ZSAtICVkXG4iLHopOworICAgICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAg ICAgICAgICAgICAgfQorI2lmZGVmIENPTU1FTlQKKyAgICAgICAgICAgICAgaWYgKGNtcmVzdWx0 LmZkYmFkZHIgPT0gJm9wKQorICAgICAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIENPTU1F TlQgKi8KKyAgICAgICAgICB9CisgICAgICAgICAgc3dpdGNoIChvcHQpIHsKKyAgICAgICAgICAg IGNhc2UgVEVMT1BUX0VDSE86ICAgICAgICAgICAvKiBPcHRpb25zIG9ubHkgdGhlIFNlcnZlciBX SUxMICovCisgICAgICAgICAgICBjYXNlIFRFTE9QVF9GT1JXQVJEX1g6CisgICAgICAgICAgICBj YXNlIFRFTE9QVF9TRU5EX1VSTDoKKyAgICAgICAgICAgIGNhc2UgVEVMT1BUX0lCTV9TQUs6Cisg ICAgICAgICAgICBjYXNlIFRFTE9QVF9MT0dPVVQ6CisgICAgICAgICAgICAgIGlmICgoeCA9IGNt a2V5KHRubmVndGFiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudG5uZWd0YWIsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNpcmVkIHNlcnZlciBzdGF0ZSIsCisgICBU RUxPUFRfTU9ERSh0bnNlcnZlcj9URUxPUFRfREVGX1NfTUVfTU9ERShvcHQpOlRFTE9QVF9ERUZf Q19VX01PREUob3B0KSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHh4c3RyaW5nKQor ICAgICAgICAgICAgICAgICAgICkgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybih4KTsKKyAg ICAgICAgICAgICAgaWYgKCh6ID0gY21jZm0oKSkgPCAwKQorICAgICAgICAgICAgICAgICAgcmV0 dXJuKHopOworICAgICAgICAgICAgICBpZiAodG5zZXJ2ZXIpIHsKKyAgICAgICAgICAgICAgICAg IFRFTE9QVF9ERUZfU19NRV9NT0RFKG9wdCkgPSB4OworICAgICAgICAgICAgICAgICAgVEVMT1BU X01FX01PREUob3B0KSA9IHg7CisgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg ICAgICBURUxPUFRfREVGX0NfVV9NT0RFKG9wdCkgPSB4OworICAgICAgICAgICAgICAgICAgVEVM T1BUX1VfTU9ERShvcHQpID0geDsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBicmVh azsKKworICAgICAgICAgICAgY2FzZSBURUxPUFRfVFRZUEU6ICAgICAgICAgIC8qIE9wdGlvbnMg b25seSB0aGUgQ2xpZW50IFdJTEwgKi8KKyAgICAgICAgICAgIGNhc2UgVEVMT1BUX05FV0VOVklS T046CisgICAgICAgICAgICBjYXNlIFRFTE9QVF9TTkRMT0M6CisgICAgICAgICAgICBjYXNlIFRF TE9QVF9BVVRIRU5USUNBVElPTjoKKyAgICAgICAgICAgIGNhc2UgVEVMT1BUX1NUQVJUX1RMUzoK KyAgICAgICAgICAgIGNhc2UgVEVMT1BUX1hESVNQTE9DOgorICAgICAgICAgICAgY2FzZSBURUxP UFRfTkFXUzoKKyAgICAgICAgICAgIGNhc2UgVEVMT1BUX0xGTE9XOgorICAgICAgICAgICAgY2Fz ZSBURUxPUFRfQ09NUE9SVDoKKyAgICAgICAgICAgICAgaWYgKCh4ID0gY21rZXkodG5uZWd0YWIs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG50bm5lZ3RhYiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgImRlc2lyZWQgY2xpZW50IHN0YXRlIiwKKyAgICBURUxPUFRfTU9ERSgh dG5zZXJ2ZXI/VEVMT1BUX0RFRl9TX1VfTU9ERShvcHQpOlRFTE9QVF9ERUZfQ19NRV9NT0RFKG9w dCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4eHN0cmluZykKKyAgICAgICAgICAg ICAgICAgICApIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgICAgICAg IGlmICgoeiA9IGNtY2ZtKCkpIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4oeik7CisgICAg ICAgICAgICAgIGlmICh0bnNlcnZlcikgeworICAgICAgICAgICAgICAgICAgVEVMT1BUX0RFRl9T X1VfTU9ERShvcHQpID0geDsKKyAgICAgICAgICAgICAgICAgIFRFTE9QVF9VX01PREUob3B0KSA9 IHg7CisjaWZkZWYgQ0tfQVVUSEVOVElDQVRJT04KKyAgICAgICAgICAgICAgICAgIGlmIChvcHQg PT0gVEVMT1BUX0FVVEhFTlRJQ0FUSU9OKQorICAgICAgICAgICAgICAgICAgICBzbF90b3B0X2Ff c19zYXZlZCA9IDA7CisjZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJT04gKi8KKyAgICAgICAgICAg ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgIFRFTE9QVF9ERUZfQ19NRV9NT0RFKG9wdCkg PSB4OworICAgICAgICAgICAgICAgICAgVEVMT1BUX01FX01PREUob3B0KSA9IHg7CisjaWZkZWYg Q0tfQVVUSEVOVElDQVRJT04KKyAgICAgICAgICAgICAgICAgIGlmIChvcHQgPT0gVEVMT1BUX0FV VEhFTlRJQ0FUSU9OKQorICAgICAgICAgICAgICAgICAgICBzbF90b3B0X2FfY19zYXZlZCA9IDA7 CisjZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJT04gKi8KKyAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICBicmVhazsKKworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgaWYg KCh4ID0gY21rZXkodG5uZWd0YWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG50bm5l Z3RhYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG5zZXJ2ZXIgPworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAiZGVzaXJlZCBzZXJ2ZXIgc3RhdGUiIDoKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgImRlc2lyZWQgY2xpZW50IHN0YXRlIiwKKyAgICBURUxPUFRfTU9E RSh0bnNlcnZlcj9URUxPUFRfREVGX1NfTUVfTU9ERShvcHQpOlRFTE9QVF9ERUZfQ19NRV9NT0RF KG9wdCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4eHN0cmluZworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgICAgKSA8IDApCisgICAgICAg ICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICAgICAgICBpZiAoKHkgPSBjbWtleSh0bm5lZ3Rh YiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnRubmVndGFiLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAhdG5zZXJ2ZXIgPyAiZGVzaXJlZCBzZXJ2ZXIgc3RhdGUiIDoKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2lyZWQgY2xpZW50IHN0YXRlIiwKKyAgICBU RUxPUFRfTU9ERSghdG5zZXJ2ZXI/VEVMT1BUX0RFRl9TX1VfTU9ERShvcHQpOlRFTE9QVF9ERUZf Q19VX01PREUob3B0KSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHh4c3RyaW5nCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICAgICApIDwgMCkK KyAgICAgICAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgICAgICAgIGlmICgoeiA9IGNtY2Zt KCkpIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4oeik7CisgICAgICAgICAgICAgIGlmICh0 bnNlcnZlcikgeworICAgICAgICAgICAgICAgICAgVEVMT1BUX0RFRl9TX01FX01PREUob3B0KSA9 IHg7CisgICAgICAgICAgICAgICAgICBURUxPUFRfTUVfTU9ERShvcHQpID0geDsKKyAgICAgICAg ICAgICAgICAgIFRFTE9QVF9ERUZfU19VX01PREUob3B0KSA9IHk7CisgICAgICAgICAgICAgICAg ICBURUxPUFRfVV9NT0RFKG9wdCkgPSB5OworI2lmZGVmIENLX0VOQ1JZUFRJT04KKyAgICAgICAg ICAgICAgICAgIGlmIChvcHQgPT0gVEVMT1BUX0VOQ1JZUFRJT04pCisgICAgICAgICAgICAgICAg ICAgIHNsX3RvcHRfZV9zX3NhdmVkID0gMDsKKyNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCisg ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICBURUxPUFRfREVGX0NfTUVf TU9ERShvcHQpID0geDsKKyAgICAgICAgICAgICAgICAgIFRFTE9QVF9NRV9NT0RFKG9wdCkgPSB4 OworICAgICAgICAgICAgICAgICAgVEVMT1BUX0RFRl9DX1VfTU9ERShvcHQpID0geTsKKyAgICAg ICAgICAgICAgICAgIFRFTE9QVF9VX01PREUob3B0KSA9IHk7CisjaWZkZWYgQ0tfRU5DUllQVElP TgorICAgICAgICAgICAgICAgICAgaWYgKG9wdCA9PSBURUxPUFRfRU5DUllQVElPTikKKyAgICAg ICAgICAgICAgICAgICAgc2xfdG9wdF9lX2Nfc2F2ZWQgPSAwOworI2VuZGlmIC8qIENLX0VOQ1JZ UFRJT04gKi8KKyAgICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgICByZXR1cm4o c3VjY2VzcyA9IDEpOworICAgICAgfQorCisgICAgICBjYXNlIFhZVEVMOiAgICAgICAgICAgICAg ICAgICAgICAgLyogVEVMTkVUICovCisgICAgICAgIGlmICgoeiA9IGNta2V5KHRudGFiLG50biwi cGFyYW1ldGVyIGZvciBURUxORVQgbmVnb3RpYXRpb25zIiwgIiIsCisgICAgICAgICAgICAgICAg ICAgICAgIHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgIHJldHVybih6KTsKKyAgICAgICAgc3dp dGNoICh6KSB7CisgICAgICAgICAgY2FzZSBDS19UTl9FQzogICAgICAgICAgICAgICAgLyogRUNI TyAqLworICAgICAgICAgICAgaWYgKCh4ID0gY21rZXkocmx0YWIsbnJsdCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICJpbml0aWFsIFRFTE5FVCBlY2hvaW5nIHN0YXRlIiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICJsb2NhbCIseHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgICAg IHJldHVybih4KTsKKyAgICAgICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkp OworICAgICAgICAgICAgdG5fZHVwbGV4ID0geDsKKyAgICAgICAgICAgIHJldHVybihzdWNjZXNz ID0gMSk7CisKKyAgICAgICAgICBjYXNlIENLX1ROX1JFOiAgICAgICAgICAgICAgICAvKiBSRU1P VEUtRUNITyAqLworICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSBzZXRvbigmdG5fcmVtX2Vj aG8pKTsKKworICAgICAgICAgIGNhc2UgQ0tfVE5fREI6ICAgICAgICAgICAgICAgIC8qIERFQlVH ICovCisgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IHNldG9uKCZ0bl9kZWIpKTsKKworICAg ICAgICAgIGNhc2UgQ0tfVE5fVFQ6ICAgICAgICAgICAgICAgIC8qIFRFUk1JTkFMIFRZUEUgKi8K KyAgICAgICAgICAgIGlmICgoeSA9IGNtdHh0KCJ0ZXJtaW5hbCB0eXBlIGZvciBURUxORVQgY29u bmVjdGlvbnMiLCIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJnMseHhzdHJpbmcpKSA8 IDApCisgICAgICAgICAgICAgIHJldHVybih5KTsKKyAgICAgICAgICAgIGlmICh0bl90ZXJtKSB7 CisgICAgICAgICAgICAgICAgZnJlZSh0bl90ZXJtKTsgICAgICAgICAgLyogRnJlZSBhbnkgcHJl dmlvdXMgc3RvcmFnZSAqLworICAgICAgICAgICAgICAgIHRuX3Rlcm0gPSBOVUxMOworICAgICAg ICAgICAgfQorICAgICAgICAgICAgaWYgKHMgPT0gTlVMTCB8fCAqcyA9PSBOVUwpIHsgLyogSWYg bm9uZSBnaXZlbiAqLworICAgICAgICAgICAgICAgIHRuX3Rlcm0gPSBOVUxMOyAgICAgICAgIC8q IHJlbW92ZSB0aGUgb3ZlcnJpZGUgc3RyaW5nICovCisgICAgICAgICAgICAgICAgcmV0dXJuKHN1 Y2Nlc3MgPSAxKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoKHRuX3Rlcm0gPSBtYWxsb2Moc3Ry bGVuKHMpKzEpKSkgeworICAgICAgICAgICAgICAgIHN0cmNweSh0bl90ZXJtLHMpOworICAgICAg ICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisgICAgICAgICAgICB9IGVsc2UgcmV0dXJu KHN1Y2Nlc3MgPSAwKTsKKworI2lmZGVmIENLX0ZPUldBUkRfWAorICAgICAgICAgIGNhc2UgQ0tf VE5fRlg6ICAgICAgICAgICAgICAgIC8qIEZPUldBUkQtWCAqLworICAgICAgICAgICAgaWYgKCh4 PWNta2V5KHRuZndkeHRhYixudG5md2R4LCIiLCJ4YXV0aG9yaXR5LWZpbGUiLHh4c3RyaW5nKSkg PCAwKQorICAgICAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgICAgICBzd2l0Y2ggKHgpIHsK KyAgICAgICAgICAgICAgY2FzZSAwOiB7ICAgICAgICAgICAgICAgICAvKiBYYXV0aG9yaXR5LUZp bGUgKi8KKyAgICAgICAgICAgICAgICAgIHggPSBjbWlmaSgiRnVsbCBwYXRoIG9mIC5YYXV0aG9y aXR5IGZpbGUiLCIiLCZzLCZ5LHh4c3RyaW5nKTsKKyAgICAgICAgICAgICAgICAgIGlmICh4IDwg MCAmJiB4ICE9IC0zKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgICAg ICAgICAgICBtYWtlc3RyKCZ0bl9md2R4X3hhdXRob3JpdHkscyk7CisgICAgICAgICAgICAgICAg ICByZXR1cm4oc3VjY2VzcyA9IDEpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGNh c2UgMTogeyAgICAgICAgICAgICAgICAgLyogTm8tRW5jcnlwdGlvbiAqLworICAgICAgICAgICAg ICAgICAgZXh0ZXJuIGludCBmd2R4X25vX2VuY3J5cHQ7CisgICAgICAgICAgICAgICAgICByZXR1 cm4oc3VjY2VzcyA9IHNldG9uKCZmd2R4X25vX2VuY3J5cHQpKTsKKyAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKyNlbmRpZiAv KiBDS19GT1JXQVJEX1ggKi8KKworICAgICAgICAgIGNhc2UgQ0tfVE5fTkw6ICAgICAgICAgICAg ICAgIC8qIFRFTE5FVCBORVdMSU5FLU1PREUgKi8KKyAgICAgICAgICAgIGlmICgoeCA9IGNta2V5 KHRuX25sbXRhYixudG5fbmxtLCIiLCJudnQiLHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgICAg ICByZXR1cm4oeCk7CisgICAgICAgICAgICBpZiAoeCA9PSBUTl9OTF9CSU4pIHsKKyAgICAgICAg ICAgICAgaWYgKCh4ID0gY21rZXkodG5sbXRhYixudG5sbSwiIiwicmF3Iix4eHN0cmluZykpIDwg MCkKKyAgICAgICAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgICAgICAgIGlmICgoeSA9IGNt Y2ZtKCkpIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgICAgICAgIHRu X2JfbmxtID0geDsKKyAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKyAgICAgICAg ICB9IGVsc2UgaWYgKHggPT0gVE5fTkxfTlZUKSB7CisgICAgICAgICAgICAgIGlmICgoeCA9IGNt a2V5KHRubG10YWIsbnRubG0sIiIsIm9uIix4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICAgICAg ICByZXR1cm4oeCk7CisgICAgICAgICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkKKyAgICAg ICAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgICAgICAgIHRuX25sbSA9IHg7CisgICAgICAg ICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg ICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybih5KTsK KyAgICAgICAgICAgICAgdG5fbmxtID0geDsKKyAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3Mg PSAxKTsKKyAgICAgICAgICB9CisKKyAgICAgICAgY2FzZSBDS19UTl9YRjogICAgICAgICAgICAg ICAgICAvKiBCSU5BUlktVFJBTlNGRVItTU9ERSAqLworICAgICAgICAgICAgaWYgKCh6ID0gY21r ZXkob25vZmYsMiwiIiwib24iLHh4c3RyaW5nKSkgPCAwKSByZXR1cm4oeik7CisgICAgICAgICAg ICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsKKyAgICAgICAgICAgIHRuX2JfeGZl ciA9IHo7CisgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworCisgICAgICAgIGNhc2Ug Q0tfVE5fTkU6ICAgICAgICAgICAgICAgICAgLyogTk8tRU5DUllQVC1EVVJJTkctWEZFUiAqLwor ICAgICAgICAgICAgaWYgKCh6ID0gY21rZXkob25vZmYsMiwiIiwib24iLHh4c3RyaW5nKSkgPCAw KSByZXR1cm4oeik7CisgICAgICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5 KTsKKyNpZmRlZiBDS19BUEMKKyAgICAgICAgICAgIC8qIERvbid0IGxldCB0aGlzIGJlIHNldCBy ZW1vdGVseSAqLworICAgICAgICAgICAgaWYgKGFwY2FjdGl2ZSA9PSBBUENfTE9DQUwgfHwKKyAg ICAgICAgICAgICAgICAoYXBjYWN0aXZlID09IEFQQ19SRU1PVEUgJiYgIShhcGNzdGF0dXMgJiBB UENfVU5DSCkpKQorICAgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOworI2VuZGlmIC8q IENLX0FQQyAqLworICAgICAgICAgICAgdG5fbm9fZW5jcnlwdF94ZmVyID0gejsKKyAgICAgICAg ICAgIHJldHVybihzdWNjZXNzID0gMSk7CisKKyAgICAgICAgICBjYXNlIENLX1ROX0JNOiAgICAg ICAgICAgICAgICAvKiBCSU5BUlktTU9ERSAqLworICAgICAgICAgICAgaWYgKCh4ID0gY21rZXko dG5uZWd0YWIsbnRubmVndGFiLCIiLCJyZWZ1c2VkIix4eHN0cmluZykpIDwgMCkKKyAgICAgICAg ICAgICAgcmV0dXJuKHgpOworICAgICAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKQorICAg ICAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgICAgICBURUxPUFRfREVGX1NfTUVfTU9ERShU RUxPUFRfQklOQVJZKSA9IHg7CisgICAgICAgICAgICBURUxPUFRfREVGX1NfVV9NT0RFKFRFTE9Q VF9CSU5BUlkpID0geDsKKyAgICAgICAgICAgIFRFTE9QVF9ERUZfQ19NRV9NT0RFKFRFTE9QVF9C SU5BUlkpID0geDsKKyAgICAgICAgICAgIFRFTE9QVF9ERUZfQ19VX01PREUoVEVMT1BUX0JJTkFS WSkgPSB4OworICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKworI2lmZGVmIElLU19P UFRJT04KKyAgICAgICAgICBjYXNlIENLX1ROX0lLUzogICAgICAgICAgICAgICAvKiBLRVJNSVQg Ki8KKyAgICAgICAgICAgIGlmICgoeCA9IGNta2V5KHRubmVndGFiLG50bm5lZ3RhYiwiRE8iLCJh Y2NlcHQiLHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAg ICAgICBpZiAoKHkgPSBjbWtleSh0bm5lZ3RhYixudG5uZWd0YWIsIldJTEwiLCJhY2NlcHQiLHh4 c3RyaW5nKSkgPCAwKQorICAgICAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgICAgICBpZiAo KHogPSBjbWNmbSgpKSA8IDApCisgICAgICAgICAgICAgIHJldHVybih6KTsKKyAgICAgICAgICAg IFRFTE9QVF9ERUZfU19NRV9NT0RFKFRFTE9QVF9LRVJNSVQpID0geTsKKyAgICAgICAgICAgIFRF TE9QVF9ERUZfU19VX01PREUoVEVMT1BUX0tFUk1JVCkgPSB4OworICAgICAgICAgICAgVEVMT1BU X0RFRl9DX01FX01PREUoVEVMT1BUX0tFUk1JVCkgPSB5OworICAgICAgICAgICAgVEVMT1BUX0RF Rl9DX1VfTU9ERShURUxPUFRfS0VSTUlUKSA9IHg7CisgICAgICAgICAgICByZXR1cm4oc3VjY2Vz cyA9IDEpOworI2VuZGlmIC8qIElLU19PUFRJT04gKi8KKworI2lmZGVmIENLX1NTTAorICAgICAg ICAgIGNhc2UgQ0tfVE5fVExTOiAgICAgICAgICAgICAgIC8qIFNUQVJUX1RMUyAqLworICAgICAg ICAgICAgaWYgKCh4ID0gY21rZXkodG5uZWd0YWIsbnRubmVndGFiLCJtZSIsImFjY2VwdCIseHhz dHJpbmcpKSA8IDApCisgICAgICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgICAgIGlmICgo eSA9IGNta2V5KHRubmVndGFiLG50bm5lZ3RhYiwidSIsImFjY2VwdCIseHhzdHJpbmcpKSA8IDAp CisgICAgICAgICAgICAgIHJldHVybih5KTsKKyAgICAgICAgICAgIGlmICgoeiA9IGNtY2ZtKCkp IDwgMCkKKyAgICAgICAgICAgICAgcmV0dXJuKHopOworICAgICAgICAgICAgVEVMT1BUX0RFRl9T X01FX01PREUoVEVMT1BUX1NUQVJUX1RMUykgPSB4OworICAgICAgICAgICAgVEVMT1BUX0RFRl9T X1VfTU9ERShURUxPUFRfU1RBUlRfVExTKSA9IHk7CisgICAgICAgICAgICBURUxPUFRfREVGX0Nf TUVfTU9ERShURUxPUFRfU1RBUlRfVExTKSA9IHg7CisgICAgICAgICAgICBURUxPUFRfREVGX0Nf VV9NT0RFKFRFTE9QVF9TVEFSVF9UTFMpID0geTsKKyAgICAgICAgICAgIHJldHVybihzdWNjZXNz ID0gMSk7CisjZW5kaWYgLyogQ0tfU1NMICovCisKKyNpZmRlZiBDS19OQVdTCisgICAgICAgICAg Y2FzZSBDS19UTl9OQVdTOiAgICAgICAgICAgICAgLyogTkFXUyAqLworICAgICAgICAgICAgaWYg KCh4ID0gY21rZXkodG5uZWd0YWIsbnRubmVndGFiLCJtZSIsImFjY2VwdCIseHhzdHJpbmcpKSA8 IDApCisgICAgICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgICAgIGlmICgoeSA9IGNta2V5 KHRubmVndGFiLG50bm5lZ3RhYiwidSIsImFjY2VwdCIseHhzdHJpbmcpKSA8IDApCisgICAgICAg ICAgICAgIHJldHVybih5KTsKKyAgICAgICAgICAgIGlmICgoeiA9IGNtY2ZtKCkpIDwgMCkKKyAg ICAgICAgICAgICAgcmV0dXJuKHopOworICAgICAgICAgICAgVEVMT1BUX0RFRl9TX01FX01PREUo VEVMT1BUX05BV1MpID0geDsKKyAgICAgICAgICAgIFRFTE9QVF9ERUZfU19VX01PREUoVEVMT1BU X05BV1MpID0geTsKKyAgICAgICAgICAgIFRFTE9QVF9ERUZfQ19NRV9NT0RFKFRFTE9QVF9OQVdT KSA9IHg7CisgICAgICAgICAgICBURUxPUFRfREVGX0NfVV9NT0RFKFRFTE9QVF9OQVdTKSA9IHk7 CisgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworI2VuZGlmIC8qIENLX05BV1MgKi8K KworI2lmZGVmIENLX0FVVEhFTlRJQ0FUSU9OCisgICAgICAgICAgY2FzZSBDS19UTl9BVTogICAg ICAgICAgICAgICAgLyogQVVUSEVOVElDQVRJT04gKi8KKyAgICAgICAgICAgIGlmICgoeCA9IGNt a2V5KHRuYXV0aHRhYixudG5hdXRoLCIiLCIiLHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgICAg ICByZXR1cm4oeCk7CisgICAgICAgICAgICBpZiAoeCA9PSBUTl9BVV9GV0QpIHsKKyAgICAgICAg ICAgICAgICBleHRlcm4gaW50IGZvcndhcmRfZmxhZzsKKyAgICAgICAgICAgICAgICByZXR1cm4o c3VjY2VzcyA9IHNldG9uKCZmb3J3YXJkX2ZsYWcpKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAo eCA9PSBUTl9BVV9UWVApIHsKKyAgICAgICAgICAgICAgICBleHRlcm4gaW50IGF1dGhfdHlwZV91 c2VyW107CisgICAgICAgICAgICAgICAgZXh0ZXJuIGludCBzbF9hdXRoX3R5cGVfdXNlcltdOwor ICAgICAgICAgICAgICAgIGV4dGVybiBpbnQgc2xfYXV0aF9zYXZlZDsKKyAgICAgICAgICAgICAg ICBpbnQgaSwgaiwgYXR5cGVzW0FVVEhUWVBMU1RTWl07CisKKyAgICAgICAgICAgICAgICBmb3Ig KGkgPSAwOyBpIDwgQVVUSFRZUExTVFNaOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg KCh5ID0gY21rZXkoYXV0eXB0YWIsbmF1dHlwLCIiLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpID09IDAgPyAiYXV0b21hdGljIiA6ICIiICwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgeHhzdHJpbmcpKSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAg ICAgIGlmICh5ID09IC0zKQorICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgICAgICAgICAgICAgICAgIHJldHVybih5KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICAgICAgICBpZiAoaSA+IDAgJiYgKHkgPT0gQVVUSFRZUEVfQVVUTyB8fCB5ID09 IEFVVEhUWVBFX05VTEwpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoCisgICAg ICAgICAgICAgICAgICAgICAgICAiXHJcbj9DaG9pY2UgbWF5IG9ubHkgYmUgdXNlZCBpbiBmaXJz dCBwb3NpdGlvbi5cclxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTkpOwor ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGog PCBpOyBqKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhdHlwZXNbal0gPT0geSkg eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiXHJcbj9DaG9pY2UgaGFzIGFs cmVhZHkgYmVlbiB1c2VkLlxyXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1 cm4oLTkpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgICAgICAgIGF0eXBlc1tpXSA9IHk7CisgICAgICAgICAgICAgICAgICAg IGlmICh5ID09IEFVVEhUWVBFX05VTEwgfHwgeSA9PSBBVVRIVFlQRV9BVVRPKSB7CisgICAgICAg ICAgICAgICAgICAgICAgICBpKys7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBp ZiAoaSA8IEFVVEhUWVBMU1RTWikKKyAgICAgICAgICAgICAgICAgIGF0eXBlc1tpXSA9IEFVVEhU WVBFX05VTEw7CisgICAgICAgICAgICAgICAgaWYgKCh6ID0gY21jZm0oKSkgPCAwKQorICAgICAg ICAgICAgICAgICAgcmV0dXJuKHopOworICAgICAgICAgICAgICAgIHNsX2F1dGhfc2F2ZWQgPSAw OworICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBBVVRIVFlQTFNUU1o7IGkrKykgewor ICAgICAgICAgICAgICAgICAgICBhdXRoX3R5cGVfdXNlcltpXSA9IGF0eXBlc1tpXTsKKyAgICAg ICAgICAgICAgICAgICAgc2xfYXV0aF90eXBlX3VzZXJbaV0gPSAwOworICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAoeCA9PSBUTl9BVV9IT1cpIHsKKyAgICAgICAgICAg ICAgICBpZiAoKHkgPSBjbWtleShhdWhvd3RhYixuYXVob3csIiIsImFueSIseHhzdHJpbmcpKSA8 IDApCisgICAgICAgICAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgICAgICAgICAgaWYgKCh6 ID0gY21jZm0oKSkgPCAwKQorICAgICAgICAgICAgICAgICAgcmV0dXJuKHopOworICAgICAgICAg ICAgICAgIHRuX2F1dGhfaG93ID0geTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoeCA9PSBUTl9B VV9FTkMpIHsKKyAgICAgICAgICAgICAgICBpZiAoKHkgPSBjbWtleShhdWVuY3RhYixuYXVlbmMs IiIsImVuY3J5cHQiLHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgICAgICAgICAgcmV0dXJuKHkp OworICAgICAgICAgICAgICAgIGlmICgoeiA9IGNtY2ZtKCkpIDwgMCkKKyAgICAgICAgICAgICAg ICAgIHJldHVybih6KTsKKyAgICAgICAgICAgICAgICB0bl9hdXRoX2VuYyA9IHk7CisgICAgICAg ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkKKyAg ICAgICAgICAgICAgICAgIHJldHVybih5KTsKKyAgICAgICAgICAgICAgICBURUxPUFRfREVGX0Nf TUVfTU9ERShURUxPUFRfQVVUSEVOVElDQVRJT04pID0geDsKKyAgICAgICAgICAgICAgICBURUxP UFRfREVGX1NfVV9NT0RFKFRFTE9QVF9BVVRIRU5USUNBVElPTikgPSB4OworICAgICAgICAgICAg fQorICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKyNlbmRpZiAvKiBDS19BVVRIRU5U SUNBVElPTiAqLworCisjaWZkZWYgQ0tfRU5DUllQVElPTgorICAgICAgICAgIGNhc2UgQ0tfVE5f RU5DOiB7ICAgICAgICAgICAgIC8qIEVOQ1JZUFRJT04gKi8KKyAgICAgICAgICAgICAgaW50IGMs IHRtcCA9IC0xOworICAgICAgICAgICAgICBpbnQgZ2V0dmFsID0gMDsKKyAgICAgICAgICAgICAg c3RhdGljIHN0cnVjdCBrZXl0YWIgKiB0bmV0YmwgPSBOVUxMOworICAgICAgICAgICAgICBzdGF0 aWMgaW50IG50bmV0YmwgPSAwOworCisgICAgICAgICAgICAgIGlmICgoeSA9IGNta2V5KHRuZW5j dGFiLG50bmVuYywiIiwiIix4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4o eSk7CisgICAgICAgICAgICAgIHN3aXRjaCAoeSkgeworICAgICAgICAgICAgICAgIGNhc2UgVE5f RU5fVFlQOgorICAgICAgICAgICAgICAgICAgeCA9IGNrX2dldF9jcnlwdF90YWJsZSgmdG5ldGJs LCZudG5ldGJsKTsKKyAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsImNrX2dldF9jcnlwdF90 YWJsZSB4IiwiIix4KTsKKyAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsImNrX2dldF9jcnlw dF90YWJsZSBuIiwiIixudG5ldGJsKTsKKyAgICAgICAgICAgICAgICAgIGlmICh4IDwgMSB8fCAh dG5ldGJsIHx8IG50bmV0YmwgPCAxKSAvKiBEaWRuJ3QgZ2V0IGl0ICovCisgICAgICAgICAgICAg ICAgICAgIHggPSAwOworICAgICAgICAgICAgICAgICAgaWYgKCF4KSB7CisgICAgICAgICAgICAg ICAgICAgICAgcHJpbnRmKCI/T29wcywgdHlwZXMgbm90IGxvYWRlZFxuIik7CisgICAgICAgICAg ICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg ICAgICAgIGlmICgoeCA9IGNta2V5KHRuZXRibCxudG5ldGJsLCJ0eXBlIG9mIGVuY3J5cHRpb24i LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImF1dG9tYXRpYyIseHhzdHJpbmcp KSA8IDApCisgICAgICAgICAgICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgICAgICAgICAg IGlmICgoeiA9IGNtY2ZtKCkpIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHopOwor ICAgICAgICAgICAgICAgICAgY3hfdHlwZSA9IHg7CisgICAgICAgICAgICAgICAgICBzbF9jeF90 eXBlID0gMDsKKyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2Ug VE5fRU5fU1RBUlQ6CisgICAgICAgICAgICAgICAgICBpZiAoKHogPSBjbWNmbSgpKSA8IDApCisg ICAgICAgICAgICAgICAgICAgIHJldHVybih6KTsKKyNpZmRlZiBDS19BUEMKKyAgICAgICAgICAg ICAgICAgIC8qIERvbid0IGxldCB0aGlzIGJlIHNldCByZW1vdGVseSAqLworICAgICAgICAgICAg ICAgICAgaWYgKGFwY2FjdGl2ZSA9PSBBUENfTE9DQUwgfHwKKyAgICAgICAgICAgICAgICAgICAg ICBhcGNhY3RpdmUgPT0gQVBDX1JFTU9URSAmJiAhKGFwY3N0YXR1cyAmIEFQQ19VTkNIKSkKKyAg ICAgICAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKyNlbmRpZiAvKiBDS19BUEMg Ki8KKyAgICAgICAgICAgICAgICAgIGNrX3RuX2VuY19zdGFydCgpOworICAgICAgICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBUTl9FTl9TVE9QOgorICAgICAgICAgICAg ICAgICAgaWYgKCh6ID0gY21jZm0oKSkgPCAwKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4o eik7CisjaWZkZWYgQ0tfQVBDCisgICAgICAgICAgICAgICAgICAvKiBEb24ndCBsZXQgdGhpcyBi ZSBzZXQgcmVtb3RlbHkgKi8KKyAgICAgICAgICAgICAgICAgIGlmIChhcGNhY3RpdmUgPT0gQVBD X0xPQ0FMIHx8CisgICAgICAgICAgICAgICAgICAgICAgYXBjYWN0aXZlID09IEFQQ19SRU1PVEUg JiYgIShhcGNzdGF0dXMgJiBBUENfVU5DSCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybihz dWNjZXNzID0gMCk7CisjZW5kaWYgLyogQ0tfQVBDICovCisgICAgICAgICAgICAgICAgICBja190 bl9lbmNfc3RvcCgpOworICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg ZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgIGlmICgoeiA9IGNtY2ZtKCkpIDwgMCkKKyAgICAg ICAgICAgICAgICAgICAgcmV0dXJuKHopOworICAgICAgICAgICAgICAgICAgVEVMT1BUX0RFRl9D X01FX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pID0geTsKKyAgICAgICAgICAgICAgICAgIFRFTE9Q VF9ERUZfQ19VX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pID0geTsKKyAgICAgICAgICAgICAgICAg IFRFTE9QVF9ERUZfU19NRV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9IHk7CisgICAgICAgICAg ICAgICAgICBURUxPUFRfREVGX1NfVV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9IHk7CisgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKyAgICAgICAg ICB9CisjZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLworCisgICAgICAgICAgY2FzZSBDS19UTl9C VUc6ICAgICAgICAgICAgICAgLyogQlVHICovCisgICAgICAgICAgICBpZiAoKHggPSBjbWtleSh0 bmJ1Z3RhYiw0LCIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImJpbmFyeS1tZS1tZWFu cy11LXRvbyIseHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgICAgIHJldHVybih4KTsKKyAgICAg ICAgICAgIGlmICgoeiA9IGNta2V5KG9ub2ZmLDIsIiIsIm9mZiIseHhzdHJpbmcpKSA8IDApIHJl dHVybih6KTsKKyAgICAgICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkpOwor ICAgICAgICAgICAgc3dpdGNoICh4KSB7CisgICAgICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAg ICAgICAgICB0bl9iX21ldSA9IHo7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg ICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICB0bl9iX3VtZSA9IHo7CisgICAgICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgICB0bl9pbmZp bml0ZSA9IHo7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgMzoK KyAgICAgICAgICAgICAgICB0bl9zYl9idWcgPSB6OworICAgICAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICAgICAgdG5fYXV0aF9rcmI1X2Rlc19i dWcgPSB6OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAg ICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKworI2lmZGVmIENLX0VOVklST05NRU5UCisgICAgICAg ICAgY2FzZSBDS19UTl9YRDogICAgICAgICAgICAgICAgLyogWERJU1BMT0MgKi8KKyAgICAgICAg ICAgIGlmICgoeCA9IGNta2V5KHRubmVndGFiLG50bm5lZ3RhYiwibWUiLCJhY2NlcHQiLHh4c3Ry aW5nKSkgPCAwKQorICAgICAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgICAgICBpZiAoKHkg PSBjbWtleSh0bm5lZ3RhYixudG5uZWd0YWIsInUiLCJhY2NlcHQiLHh4c3RyaW5nKSkgPCAwKQor ICAgICAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgICAgICBpZiAoKHogPSBjbWNmbSgpKSA8 IDApCisgICAgICAgICAgICAgIHJldHVybih6KTsKKyAgICAgICAgICAgIFRFTE9QVF9ERUZfU19N RV9NT0RFKFRFTE9QVF9YRElTUExPQykgPSB4OworICAgICAgICAgICAgVEVMT1BUX0RFRl9TX1Vf TU9ERShURUxPUFRfWERJU1BMT0MpID0geTsKKyAgICAgICAgICAgIFRFTE9QVF9ERUZfQ19NRV9N T0RFKFRFTE9QVF9YRElTUExPQykgPSB4OworICAgICAgICAgICAgVEVMT1BUX0RFRl9DX1VfTU9E RShURUxPUFRfWERJU1BMT0MpID0geTsKKyAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7 CisKKyAgICAgICAgICBjYXNlIENLX1ROX0VOVjogeworICAgICAgICAgICAgICBjaGFyICogbXNn ID0gInZhbHVlIG9mIHRlbG5ldCBlbnZpcm9ubWVudCB2YXJpYWJsZSI7CisgICAgICAgICAgICAg IGV4dGVybiBpbnQgdG5fZW52X2ZsZzsKKyAgICAgICAgICAgICAgZXh0ZXJuIGNoYXIgdG5fZW52 X2FjY3RbXSwgdG5fZW52X2Rpc3BbXSwgdG5fZW52X2pvYltdLAorICAgICAgICAgICAgICB0bl9l bnZfcHJudFtdLCB0bl9lbnZfc3lzW107CisgICAgICAgICAgICAgIGV4dGVybiBjaGFyICogdG5f bG9jOworICAgICAgICAgICAgICBpZiAoKHggPSBjbWtleSh0bmVudnRhYixudG5lbnYsIiIsIiIs eHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICAgICAg ICBpZiAoeCA9PSBUTl9FTlZfVVZBUikgeyAgIC8qIFVzZXIgdmFyaWFibGVzICovCisgICAgICAg ICAgICAgICAgICBjaGFyICogdXZhcj1OVUxMOworICAgICAgICAgICAgICAgICAgY2hhciAqIHV2 YWw9TlVMTDsKKyAgICAgICAgICAgICAgICAgIGNoYXIgKiBlbnY7CisgICAgICAgICAgICAgICAg ICBleHRlcm4gY2hhciAqIHRuX2Vudl91c2VydmFyWzhdWzJdOworCisgICAgICAgICAgICAgICAg ICAvKiBHZXQgdGhlIHVzZXIgdmFyaWFibGUgbmFtZSAqLworICAgICAgICAgICAgICAgICAgaWYg KCh4ID0gY21mbGQoIk5hbWUgb2YgRW52aXJvbm1lbnQgVmFyaWFibGUiLCIiLCZzLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgeHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgICAg ICAgICAgIHJldHVybih4KTsKKyAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJnV2YXIscyk7CisK KyAgICAgICAgICAgICAgICAgIGVudiA9IGdldGVudih1dmFyKTsKKyAgICAgICAgICAgICAgICAg IGlmICghZW52KSBlbnYgPSAiIjsKKworICAgICAgICAgICAgICAgICAgaWYgKCh4ID0gY210eHQo IlZhbHVlIG9mIEVudmlyb25tZW50IFZhcmlhYmxlIixlbnYsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAmcyx4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgcmV0 dXJuKHgpOworICAgICAgICAgICAgICAgICAgaWYgKCpzKQorICAgICAgICAgICAgICAgICAgICBt YWtlc3RyKCZ1dmFsLHMpOworCisgICAgICAgICAgICAgICAgICAvKiBOb3cgdGhhdCB3ZSBoYXZl IHRoZSB2YXJpYWJsZSBhbmQgcGVyaGFwcyBhIHZhbHVlICovCisgICAgICAgICAgICAgICAgICAv KiB0aGVyZSBhcmUgdGhyZWUgcG9zc2liaWxpdGllczogKDEpIG5ldyB2YXJpYWJsZSAgICovCisg ICAgICAgICAgICAgICAgICAvKiBhbmQgYXNzb2NpYXRlZCB2YWx1ZTsgKDIpIHZhcmlhYmxlIGFs cmVhZHkgZXhpc3RzICovCisgICAgICAgICAgICAgICAgICAvKiBidXQgd2UgaGF2ZSBhIG5ldyB2 YWx1ZTsgKDMpIHZhcmlhYmxlIGFscmVhZHkgICAgICovCisgICAgICAgICAgICAgICAgICAvKiBl eGlzdHMgYnV0IG5vIG5ldyB2YWx1ZSB0aGVyZWZvcmUgdGhlIHVzZXIgd2FudHMgICovCisgICAg ICAgICAgICAgICAgICAvKiB0byBjbGVhciB2YXJpYWJsZS4gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICovCisKKyAgICAgICAgICAgICAgICAgIC8qIFRyeSB0byBmaW5kIGFuIGV4aXN0 aW5nIHZhcmlhYmxlICovCisgICAgICAgICAgICAgICAgICBmb3IgKHggPSAwOyB4IDwgODsgeCsr KSB7CisgICAgICAgICAgICAgICAgICAgICAgaWYgKCFja3N0cmNtcCh0bl9lbnZfdXNlcnZhclt4 XVswXSx1dmFyLC0xLDApKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1dmFsKSB7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlKHRuX2Vudl91c2VydmFyW3hdWzFd KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRuX2Vudl91c2VydmFyW3hdWzFdID0g dXZhbDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyZWUodXZhcik7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworICAgICAgICAgICAg ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJl ZSh0bl9lbnZfdXNlcnZhclt4XVswXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0 bl9lbnZfdXNlcnZhclt4XVswXSA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBmcmVlKHRuX2Vudl91c2VydmFyW3hdWzFdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHRuX2Vudl91c2VydmFyW3hdWzFdID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGZyZWUodXZhcik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4o c3VjY2VzcyA9IDEpOworICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAvKiBD b3VsZG4ndCBmaW5kIG9uZTsgbG9vayBmb3IgZW1wdHkgbG9jYXRpb24gdG8gaW5zZXJ0ICovCisg ICAgICAgICAgICAgICAgICBmb3IgKHggPSAwOyB4IDwgODsgeCsrKSB7CisgICAgICAgICAgICAg ICAgICAgICAgaWYgKCF0bl9lbnZfdXNlcnZhclt4XVswXSkgeworICAgICAgICAgICAgICAgICAg ICAgICAgICB0bl9lbnZfdXNlcnZhclt4XVswXSA9IHV2YXI7CisgICAgICAgICAgICAgICAgICAg ICAgICAgIHRuX2Vudl91c2VydmFyW3hdWzFdID0gdXZhbDsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKyAgICAgICAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICBwcmludGYoIj9Tb3JyeSwgbm8gc3Bh Y2UgZm9yIHZhcmlhYmxlLlxuIik7CisgICAgICAgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9 IDApOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGlmICh4ID09IFROX0VOVl9PRkYg fHwgeCA9PSBUTl9FTlZfT04pIHsKKyAgICAgICAgICAgICAgICAgIGlmICgoeSA9IGNtY2ZtKCkp IDwgMCkgcmV0dXJuKHkpOworI2lmZGVmIElLU0QKKyAgICAgICAgICAgICAgICAgIGlmIChpbnNl cnZlcikgeworICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiP1NvcnJ5LCBjb21tYW5kIGRp c2FibGVkLlxyXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDAp OworICAgICAgICAgICAgICAgICAgfQorI2VuZGlmIC8qIElLU0QgKi8KKyAgICAgICAgICAgICAg ICAgIHRuX2Vudl9mbGcgPSB4ID09IFROX0VOVl9PRkYgPyAwIDogMTsKKyAgICAgICAgICAgICAg ICAgIHJldHVybihzdWNjZXNzID0gMSk7CisgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg ICAvKiBOb3QgT04vT0ZGIC0gR2V0IHRoZSB2YWx1ZSAqLworICAgICAgICAgICAgICB6ID0gY21k Z3F1bygpOworICAgICAgICAgICAgICBjbWRzcXVvKDApOworICAgICAgICAgICAgICBpZiAoKHkg PSBjbXR4dChtc2csICIiLCAmcywgeHhzdHJpbmcpKSA8IDApIHsKKyAgICAgICAgICAgICAgICAg IGNtZHNxdW8oeik7CisgICAgICAgICAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgY21kc3F1byh6KTsKKyNpZmRlZiBJS1NECisgICAgICAgICAgICAg IGlmIChpbnNlcnZlcikKKyAgICAgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOworI2Vu ZGlmIC8qIElLU0QgKi8KKyAgICAgICAgICAgICAgaWYgKChpbnQpc3RybGVuKHMpID4gNjMpIHsK KyAgICAgICAgICAgICAgICAgIHByaW50ZigiU29ycnksIHRvbyBsb25nXG4iKTsKKyAgICAgICAg ICAgICAgICAgIHJldHVybigtOSk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgc3dp dGNoICh4KSB7CisgICAgICAgICAgICAgICAgY2FzZSBUTl9FTlZfVVNSOgorICAgICAgICAgICAg ICAgICAgY2tzdHJuY3B5KHVpZGJ1ZixzLFVJREJVRkxFTik7CisgICAgICAgICAgICAgICAgICBz bF91aWRfc2F2ZWQgPSAwOworICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg ICAgY2FzZSBUTl9FTlZfQUNDVDoKKyAgICAgICAgICAgICAgICAgIGNrc3RybmNweSh0bl9lbnZf YWNjdCxzLDY0KTsKKyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNh c2UgVE5fRU5WX0RJU1A6CisgICAgICAgICAgICAgICAgICBja3N0cm5jcHkodG5fZW52X2Rpc3As cyw2NCk7CisgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFRO X0VOVl9KT0I6CisgICAgICAgICAgICAgICAgICBja3N0cm5jcHkodG5fZW52X2pvYixzLDY0KTsK KyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgVE5fRU5WX1BS TlQ6CisgICAgICAgICAgICAgICAgICBja3N0cm5jcHkodG5fZW52X3BybnQscyw2NCk7CisgICAg ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFROX0VOVl9TWVM6Cisg ICAgICAgICAgICAgICAgICBja3N0cm5jcHkodG5fZW52X3N5cyxzLDY0KTsKKyAgICAgICAgICAg ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgVE5fRU5WX0xPQzoKKyAgICAgICAg ICAgICAgICAgIGlmICghKnMpIHMgPSBOVUxMOworICAgICAgICAgICAgICAgICAgbWFrZXN0cigm dG5fbG9jLHMpOworICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2Fz ZSBUTl9FTlZfVVZBUjoKKyAgICAgICAgICAgICAgICAgIHByaW50ZigiXG4/Tm90IHlldCBpbXBs ZW1lbnRlZFxuIik7CisgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworICAgICAgICAgIH0KKyNlbmRpZiAv KiBDS19FTlZJUk9OTUVOVCAqLworCisjaWZkZWYgQ0tfU05ETE9DCisgICAgICAgICAgY2FzZSBD S19UTl9MT0M6IHsgICAgICAgICAgICAgLyogTE9DQVRJT04gKi8KKyAgICAgICAgICAgICAgZXh0 ZXJuIGNoYXIgKiB0bl9sb2M7CisgICAgICAgICAgICAgIGlmICgoeSA9IGNtdHh0KCJMb2NhdGlv biBzdHJpbmciLCIiLCZzLHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybih5 KTsKKyAgICAgICAgICAgICAgaWYgKCEqcykgcyA9IE5VTEw7CisgICAgICAgICAgICAgIG1ha2Vz dHIoJnRuX2xvYyxzKTsKKyAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKyAgICAg ICAgICB9CisjZW5kaWYgLyogQ0tfU05ETE9DICovCisgICAgICAgICAgY2FzZSBDS19UTl9TRlU6 ICAgICAgICAgICAgICAgLyogTWljcm9zb2Z0IFNGVSBjb21wYXRpYmlsaXR5ICovCisgICAgICAg ICAgICBpZiAoKHogPSBjbWtleShvbm9mZiwyLCIiLCJvbiIseHhzdHJpbmcpKSA8IDApIHJldHVy bih6KTsKKyAgICAgICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkpOworICAg ICAgICAgICAgdG5fc2Z1ID0gejsKKyAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Cisg ICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgQ0tfVE5fV0FJVDogICAgICAgICAg ICAgIC8qIFdBSVQtRk9SLU5FR09USUFUSU9OUyAqLworICAgICAgICAgICAgaWYgKCh6ID0gY21r ZXkob25vZmYsMiwiIiwib24iLHh4c3RyaW5nKSkgPCAwKSByZXR1cm4oeik7CisgICAgICAgICAg ICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsKKyNpZmRlZiBJS1NECisgICAgICAg ICAgICBpZiAoaW5zZXJ2ZXIgJiYKKyNpZmRlZiBJS1NEQ09ORgorICAgICAgICAgICAgICAgIGlr c2RjZgorI2Vsc2UKKyAgICAgICAgICAgICAgICAxCisjZW5kaWYgLyogSUtTRENPTkYgKi8KKyAg ICAgICAgICAgICAgICApIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIj9Tb3JyeSwgY29tbWFu ZCBkaXNhYmxlZC5cclxuIik7CisgICAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsK KyAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBJS1NEICovCisgICAgICAgICAgICB0bl93YWl0X2Zs ZyA9IHo7CisgICAgICAgICAgICBzbF90bl9zYXZlZCA9IDA7CisgICAgICAgICAgICByZXR1cm4o c3VjY2VzcyA9IDEpOworCisgICAgICAgICAgY2FzZSBDS19UTl9ETDogICAgICAgICAgICAgICAg LyogREVMQVkgU1VCTkVHT1RJQVRJT05TICovCisgICAgICAgICAgICBpZiAoKHogPSBjbWtleShv bm9mZiwyLCIiLCJvbiIseHhzdHJpbmcpKSA8IDApIHJldHVybih6KTsKKyAgICAgICAgICAgIGlm ICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkpOworI2lmZGVmIElLU0QKKyAgICAgICAgICAg IGlmIChpbnNlcnZlciAmJgorI2lmZGVmIElLU0RDT05GCisgICAgICAgICAgICAgICAgaWtzZGNm CisjZWxzZQorICAgICAgICAgICAgICAgIDEKKyNlbmRpZiAvKiBJS1NEQ09ORiAqLworICAgICAg ICAgICAgICAgICkgeworICAgICAgICAgICAgICAgIHByaW50ZigiP1NvcnJ5LCBjb21tYW5kIGRp c2FibGVkLlxyXG4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOworICAg ICAgICAgICAgfQorI2VuZGlmIC8qIElLU0QgKi8KKyAgICAgICAgICAgIHRuX2RlbGF5X3NiID0g ejsKKyAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisKKyAgICAgICAgICBjYXNlIENL X1ROX1BVSUQ6IHsgICAgICAgICAgICAvKiBQUk9NUFQtRk9SLVVTRVJJRCAqLworICAgICAgICAg ICAgICBpbnQgaSxsZW47CisgICAgICAgICAgICAgIGlmICgoeSA9IGNtdHh0KCJQcm9tcHQgc3Ry aW5nIiwiIiwmcyx4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4oeSk7CisJ ICAgICAgcyA9IGJyc3RyaXAocyk7CisgICAgICAgICAgICAgIC8qIHdlIG11c3QgY2hlY2sgdG8g bWFrZSBzdXJlIHRoZXJlIGFyZSBubyAlIGZpZWxkcyAqLworICAgICAgICAgICAgICBsZW4gPSBz dHJsZW4ocyk7CisgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworICAg ICAgICAgICAgICAgICAgaWYgKHNbaV0gPT0gJyUnKSB7CisgICAgICAgICAgICAgICAgICAgICAg aWYgKHNbaSsxXSAhPSAnJScpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIl JSBmaWVsZHMgYXJlIG5vdCB1c2VkIGluIHRoaXMgY29tbWFuZC5cbiIpOworICAgICAgICAgICAg ICAgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgICAgICAgICBpKys7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgbWFrZXN0cigmdG5fcHJfdWlkLHMpOworICAgICAgICAgICAgICBy ZXR1cm4oc3VjY2VzcyA9IDEpOworICAgICAgICAgIH0KKyAgICAgICAgICBkZWZhdWx0OgorICAg ICAgICAgICAgcmV0dXJuKC0yKTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBUTkNPREUg Ki8KKworICAgIHN3aXRjaCAoeHgpIHsKKyNpZm5kZWYgTk9TUEwKKyAgICAgIGNhc2UgWFlDT1VO OiAgICAgICAgICAgICAgICAgICAgICAvKiBTRVQgQ09VTlQgKi8KKyAgICAgICAgeCA9IGNtbnVt KCJQb3NpdGl2ZSBudW1iZXIiLCIwIiwxMCwmeix4eHN0cmluZyk7CisgICAgICAgIGlmICh4IDwg MCkgcmV0dXJuKHgpOworICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsK KyAgICAgICAgaWYgKHogPCAwKSB7CisgICAgICAgICAgICBwcmludGYoIj9BIHBvc2l0aXZlIG51 bWJlciwgcGxlYXNlXG4iKTsKKyAgICAgICAgICAgIHJldHVybigwKTsKKyAgICAgICAgfQorICAg ICAgICBkZWJ1ZyhGMTAxLCJYWUNPVU46IHoiLCIiLHopOworICAgICAgICByZXR1cm4oc3VjY2Vz cyA9IHNldG51bSgmY291bnRbY21kbHZsXSx6LDAsMTAwMDApKTsKKyNlbmRpZiAvKiBOT1NQTCAq LworCisjaWZuZGVmIE5PU1BMCisgICAgICBjYXNlIFhZQ0FTRToKKyAgICAgICAgcmV0dXJuKHN1 Y2Nlc3MgPSBzZXRvbigmaW5wY2FzW2NtZGx2bF0pKTsKKyNlbmRpZiAvKiBOT1NQTCAqLworCisg ICAgICBjYXNlIFhZQ01EOiAgICAgICAgICAgICAgICAgICAgICAgLyogQ09NTUFORCAuLi4gKi8K KyAgICAgICAgaWYgKCh5ID0gY21rZXkoc2NtZHRhYixuYnl0dCwiIiwiIix4eHN0cmluZykpIDwg MCkKKyAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgIHN3aXRjaCAoeSkgeworICAgICAgICAg IGNhc2UgU0NNRF9DQlI6CisgICAgICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApCisgICAg ICAgICAgICAgIHJldHVybih5KTsKKyAgICAgICAgICAgIGNvbmNiKChjaGFyKWVzY2FwZSk7Cisg ICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworCisgICAgICAgICAgY2FzZSBTQ01EX0JT WjoKKyAgICAgICAgICAgIGlmICgoeSA9IGNtbnVtKCJieXRlc2l6ZSBmb3IgY29tbWFuZCBjaGFy YWN0ZXJzLCA3IG9yIDgiLCI3IiwxMCwmeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHh4 c3RyaW5nKSkgPCAwKQorICAgICAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgICAgICBpZiAo eCAhPSA3ICYmIHggIT0gOCkgeworICAgICAgICAgICAgICAgIHByaW50ZigiXG4/VGhlIGNob2lj ZXMgYXJlIDcgYW5kIDhcbiIpOworICAgICAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7 CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVy bih5KTsKKyAgICAgICAgICAgIGlmICh4ID09IDcpIGNtZG1zayA9IDAxNzc7CisgICAgICAgICAg ICBlbHNlIGlmICh4ID09IDgpIGNtZG1zayA9IDAzNzc7CisgICAgICAgICAgICByZXR1cm4oc3Vj Y2VzcyA9IDEpOworI2lmZGVmIENLX1JFQ0FMTAorICAgICAgICAgIGNhc2UgU0NNRF9SQ0w6Cisg ICAgICAgICAgICBpZiAoKHkgPSBjbW51bSgibWF4aW11bSBudW1iZXIgb2YgY29tbWFuZHMgaW4g cmVjYWxsIGJ1ZmZlciIsIjEwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwLCZ4LHh4 c3RyaW5nKSkgPCAwKQorICAgICAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgICAgICBpZiAo KHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsKKyAgICAgICAgICAgIHJldHVybihzdWNjZXNz ID0gY21yaW5pKHgpKTsKKyNlbmRpZiAvKiBDS19SRUNBTEwgKi8KKyNpZmRlZiBDS19SRUNBTEwK KyAgICAgICAgICBjYXNlIFNDTURfUlRSOgorICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSBz ZXRvbigmY21fcmV0cnkpKTsKKyNlbmRpZiAvKiBDS19SRUNBTEwgKi8KKyAgICAgICAgICBjYXNl IFNDTURfTU9SOiAgICAgICAgICAgICAgICAvKiBNb3JlLXByb21wdGluZyAqLworICAgICAgICAg ICAgc3VjY2VzcyA9IHNldG9uKCZ4YXNrbW9yZSk7CisgICAgICAgICAgICBpZiAoc3VjY2VzcykK KyAgICAgICAgICAgICAgc2F2ZWFzayA9IHhhc2ttb3JlOworICAgICAgICAgICAgcmV0dXJuKHN1 Y2Nlc3MpOworICAgICAgICAgIGNhc2UgU0NNRF9RVU86CisgICAgICAgICAgICBpZiAoKHggPSBz ZXRvbigmeSkpIDwgMCkgcmV0dXJuKHgpOworICAgICAgICAgICAgY21kc3F1byh5KTsgICAgICAg ICAgICAgICAgIC8qIERvIGl0IHRoZSByaWdodCB3YXkgKi8KKyAgICAgICAgICAgIGNtZF9xdW90 aW5nID0geTsgICAgICAgICAgICAvKiBBbHNvIGtlZXAgYSBnbG9iYWwgY29weSAqLworICAgICAg ICAgICAgLyogU2V0IHN0cmluZy1wcm9jZXNzaW5nIGZ1bmN0aW9uICovCisjaWZkZWYgZGF0YWdl bmVyYWwKKyAgICAgICAgICAgIHh4c3RyaW5nID0geSA/IHp6c3RyaW5nIDogKHh4X3N0cnApIE5V TEw7CisjZWxzZQorI2lmZGVmIENLX0FOU0lDCisgICAgICAgICAgICB4eHN0cmluZyA9IHkgPyB6 enN0cmluZyA6ICh4eF9zdHJwKSBOVUxMOworI2Vsc2UKKyAgICAgICAgICAgIHh4c3RyaW5nID0g eSA/IHp6c3RyaW5nIDogKHh4X3N0cnApIE5VTEw7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKyNl bmRpZiAvKiBkYXRhZ2VuZXJhbCAqLworICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsK KworI2lmZGVmIE9TMgorI2lmbmRlZiBOT0xPQ0FMCisgICAgICAgICAgY2FzZSBTQ01EX0NPTDog eyAgICAgICAgICAgICAgLyogQ29tbWFuZC1zY3JlZW4gY29sb3JzICovCisgICAgICAgICAgICAg IGludCBmZywgYmc7CisgICAgICAgICAgICAgIGZnID0gY21rZXkodHR5Y2xydGFiLCBuY2xycywK KyAgICAgICAgICAgICAgICAgICAgICAgICAiZm9yZWdyb3VuZCBjb2xvciBhbmQgdGhlbiBiYWNr Z3JvdW5kIGNvbG9yIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAid2hpdGUiLAorICAgICAg ICAgICAgICAgICAgICAgICAgIHh4c3RyaW5nKTsKKyAgICAgICAgICAgICAgaWYgKGZnIDwgMCkK KyAgICAgICAgICAgICAgICByZXR1cm4oZmcpOworICAgICAgICAgICAgICBpZiAoKGJnID0gY21r ZXkodHR5Y2xydGFiLG5jbHJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJhY2tn cm91bmQgY29sb3IiLCJibGFjayIseHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgICAgICAgcmV0 dXJuKGJnKTsKKyAgICAgICAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKQorICAgICAgICAg ICAgICAgIHJldHVybih5KTsKKyAgICAgICAgICAgICAgY29sb3JjbWQgPSBmZyB8IGJnIDw8IDQ7 CisgICAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisgICAgICAgICAgfQorICAgICAg ICAgIGNhc2UgU0NNRF9TQ1I6ICAgICAgICAgICAgICAgIC8qIENvbW1hbmQgU2Nyb2xsYmFjayBz aXplICovCisgICAgICAgICAgICBpZiAoKHkgPSBjbW51bSgiQ09NTUFORCBzY3JvbGxiYWNrIGJ1 ZmZlciBzaXplLCBsaW5lcyIsIjUxMiIsMTAsJngsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICB4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICAgICAg LyogVGhlIG1heCBudW1iZXIgb2YgbGluZXMgaXMgdGhlIFJBTSAgKi8KKyAgICAgICAgICAgIC8q IHdlIGNhbiBhY3R1YWxseSBkZWRpY2F0ZSB0byBhICAgICAgICovCisgICAgICAgICAgICAvKiBz Y3JvbGxiYWNrIGJ1ZmZlciBnaXZlbiB0aGUgbWF4aW11bSAqLworICAgICAgICAgICAgLyogcHJv Y2VzcyBtZW1vcnkgc3BhY2Ugb2YgNTEyTUIgICAgICAgKi8KKyAgICAgICAgICAgIGlmICh4IDwg MjU2IHx8IHggPiAyMDAwMDAwTCkgeworICAgICAgICAgICAgICAgIHByaW50ZigiXG4/VGhlIHNp emUgbXVzdCBiZSBiZXR3ZWVuIDI1NiBhbmQgMiwwMDAsMDAwLlxuIik7CisgICAgICAgICAgICAg ICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgo eSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkpOworICAgICAgICAgICAgdHRfc2Nyc2l6ZVtWQ01E XSA9IHg7CisgICAgICAgICAgICBWc2NybkluaXQoIFZDTUQgKTsKKyAgICAgICAgICAgIHJldHVy bihzdWNjZXNzID0gMSk7CisKKyAgICAgICAgICBjYXNlIFNDTURfV0lEOiB7CisgICAgICAgICAg ICAgIGlmICgoeSA9IGNtbnVtKCJOdW1iZXIgb2YgY29sdW1ucyBpbiBkaXNwbGF5IHdpbmRvdyIs CisgICAgICAgICAgICAgICAgICAgICAgICAgIjgwIiwxMCwmeCx4eHN0cmluZykpIDwgMCkKKyAg ICAgICAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgICAgICAgIGlmICgoeSA9IGNtY2ZtKCkp IDwgMCkgcmV0dXJuKHkpOworCisgICAgICAgICAgICAgIG9zMl9zZXRjbWR3aWR0aCh4KTsKKyAg ICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKyAgICAgICAgICB9CisgICAgICAgICAg Y2FzZSBTQ01EX0hJRzoKKyAgICAgICAgICAgIGlmICgoeSA9IGNtbnVtKCJOdW1iZXIgb2Ygcm93 cyBpbiBkaXNwbGF5IHdpbmRvdyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjQiLDEw LCZ4LHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgICAg ICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsKKyAgICAgICAgICAgIG9zMl9zZXRj bWRoZWlnaHQoeCk7CisgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworCisgICAgICAg ICAgY2FzZSBTQ01EX1NUQTogeworICAgICAgICAgICAgICBleHRlcm4gaW50IG1hcmdpbmJvdDsK KyAgICAgICAgICAgICAgaWYgKCh5ID0gY21rZXkob25vZmYsMiwiIiwib24iLHh4c3RyaW5nKSkg PCAwKSByZXR1cm4oeSk7CisgICAgICAgICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0 dXJuKHgpOworICAgICAgICAgICAgICBpZiAoeSAhPSB0dF9zdGF0dXNbVkNNRF0pIHsKKyAgICAg ICAgICAgICAgICAgIC8qIE1pZ2h0IG5lZWQgdG8gZml4dXAgdGhlIG1hcmdpbnMgKi8KKyAgICAg ICAgICAgICAgICAgIHR0X3N0YXR1c1tWQ01EXSA9IHk7CisgICAgICAgICAgICAgICAgICBpZiAo eSkgeworICAgICAgICAgICAgICAgICAgICAgIHR0X3N6Y2huZ1tWQ01EXSA9IDI7CisgICAgICAg ICAgICAgICAgICAgICAgdHRfcm93c1tWQ01EXS0tOworICAgICAgICAgICAgICAgICAgICAgIGNt ZF9yb3dzLS07CisgICAgICAgICAgICAgICAgICAgICAgVnNjcm5Jbml0KFZDTUQpOyAgLyogSGVp Z2h0IHNldCBoZXJlICovCisgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJcbiIpOworICAg ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICB0dF9zemNobmdb VkNNRF0gPSAxOworICAgICAgICAgICAgICAgICAgICAgIHR0X3Jvd3NbVkNNRF0rKzsKKyAgICAg ICAgICAgICAgICAgICAgICBjbWRfcm93cysrOworICAgICAgICAgICAgICAgICAgICAgIFZzY3Ju SW5pdChWQ01EKTsgIC8qIEhlaWdodCBzZXQgaGVyZSAqLworICAgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisgICAg ICAgICAgfQorCisgICAgICAgICAgY2FzZSBTQ01EX0NVUjogeworICAgICAgICAgICAgICBpbnQg cm93LCBjb2w7CisgICAgICAgICAgICAgIHBvc2l0aW9uICogcHBvczsKKworICAgICAgICAgICAg ICBwcG9zID0gVnNjcm5HZXRDdXJQb3MoVkNNRCk7CisjaWZkZWYgTlQKKyNkZWZpbmUgaXRvYSBf aXRvYQorI2VuZGlmIC8qIE5UICovCisgICAgICAgICAgICAgIGl0b2EocHBvcy0+eSsxLCB0bXBi dWYsIDEwKTsKKyAgICAgICAgICAgICAgaWYgKCh5ID0gY21udW0oInJvdyAoMS1iYXNlZCkiLHRt cGJ1ZiwxMCwmcm93LHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybih5KTsK KworICAgICAgICAgICAgICBpdG9hKHBwb3MtPngrMSwgdG1wYnVmLCAxMCk7CisgICAgICAgICAg ICAgIGlmICgoeSA9IGNtbnVtKCJjb2wgKDEtYmFzZWQpIix0bXBidWYsMTAsJmNvbCx4eHN0cmlu ZykpIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgICAgICAgIGlmICgo eCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOworCisgICAgICAgICAgICAgIGxnb3RveHkoIFZD TUQsIGNvbCwgcm93ICkgOworICAgICAgICAgICAgICBWc2NybklzRGlydHkoIFZDTUQgKTsKKyAg ICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3M9MSk7CisgICAgICAgICAgfQorI2VuZGlmIC8qIE5P TE9DQUwgKi8KKyNlbHNlCisgICAgICAgICAgY2FzZSBTQ01EX1dJRDoKKyAgICAgICAgICAgIHkg PSBjbW51bSgiQ29tbWFuZCBzY3JlZW4gd2lkdGgsIGNoYXJhY3RlcnMiLCI4MCIsMTAsJngseHhz dHJpbmcpOworICAgICAgICAgICAgcmV0dXJuKHNldG51bSgmY21kX2NvbHMseCx5LDEwMjQpKTsK KworICAgICAgICAgIGNhc2UgU0NNRF9ISUc6CisgICAgICAgICAgICB5ID0gY21udW0oIkNvbW1h bmQgc2NyZWVuIGhlaWdodCwgcm93cyIsIjI0IiwxMCwmeCx4eHN0cmluZyk7CisgICAgICAgICAg ICByZXR1cm4oc2V0bnVtKCZjbWRfcm93cyx4LHksMTAyNCkpOworI2VuZGlmIC8qIE9TMiAqLwor CisgICAgICAgICAgY2FzZSBTQ01EX0lOVDoKKyAgICAgICAgICAgIHJldHVybihzZXRvbigmY21k aW50KSk7CisKKyNpZmRlZiBDS19BVVRPREwKKyAgICAgICAgICBjYXNlIFNDTURfQURMOgorICAg ICAgICAgICAgcmV0dXJuKHNldG9uKCZjbWRhZGwpKTsKKyNlbmRpZiAvKiBDS19BVVRPREwgKi8K KworI2lmZGVmIERPVUJMRVFVT1RJTkcKKyAgICAgICAgICBjYXNlIFNDTURfREJROiB7CisgICAg ICAgICAgICAgIGV4dGVybiBpbnQgZGJscXVvOworICAgICAgICAgICAgICByZXR1cm4oc2V0b24o JmRibHF1bykpOworICAgICAgICAgIH0KKyNlbmRpZiAvKiBET1VCTEVRVU9USU5HICovCisKKwkg IGNhc2UgU0NNRF9FUlI6CisgICAgICAgICAgICB5ID0gY21udW0oIkVycm9yIG1lc3NhZ2UgdmVy Ym9zaXR5IGxldmVsLCAwLTMiLCIxIiwxMCwmeCx4eHN0cmluZyk7CisgICAgICAgICAgICByZXR1 cm4oc2V0bnVtKCZjbWRfZXJyLHgseSwzKSk7CisKKwkgIGNhc2UgU0NNRF9WQVI6CisJICAgIHJl dHVybihzZXR2YXJldmFsKCkpOworCisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJl dHVybigtMik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzd2l0Y2ggKHh4KSB7CisKKyAgICAg IGNhc2UgWFlERkxUOiAgICAgICAgICAgICAgICAgICAgICAvKiBTRVQgREVGQVVMVCA9IENEICov CisgICAgICAgIHJldHVybihzdWNjZXNzID0gZG9jZChYWENXRCkpOworCitjYXNlIFhZREVCVTog ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU0VUIERFQlVHIHsgb24sIG9mZiwgc2Vzc2lv biB9ICovCisgICAgICAgIGlmICgoeSA9IGNta2V5KGRiZ3RhYixuZGJnLCIiLCIiLHh4c3RyaW5n KSkgPCAwKQorICAgICAgICAgIHJldHVybih5KTsKKyAgICAgICAgaWYgKHkgPT0gREVCX1RJTSkK KyNpZmRlZiBDT01NRU5UCisgICAgICAgICAgcmV0dXJuKHNldG9uKCZkZWJ0aW0pIDwgMCA/IHgg OiAoc3VjY2VzcyA9IDEpKTsKKyNlbHNlCisgICAgICAgICAgLyogd2h5IHRoaXMgY2hhbmdlPyAq LworICAgICAgICAgIHJldHVybihzdWNjZXNzID0gc2V0b24oJmRlYnRpbSkpOworI2VuZGlmIC8q IENPTU1FTlQgKi8KKworI2lmZGVmIElLU0QKKyAgICAgICAgaWYgKGluc2VydmVyICYmIGlzZ3Vl c3QpIHsKKyAgICAgICAgICAgIHByaW50ZigiP1NvcnJ5LCBjb21tYW5kIGRpc2FibGVkLlxyXG4i KTsKKyAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7CisgICAgfQorI2VuZGlmIC8qIElL U0QgKi8KKworICAgICAgICBzd2l0Y2ggKHkpIHsKKyAgICAgICAgICBjYXNlIERFQl9MRU46Cisg ICAgICAgICAgICB5ID0gY21udW0oIk1heCBsZW5ndGggZm9yIGRlYnVnIGxvZyBzdHJpbmdzIiwi IiwxMCwmeCx4eHN0cmluZyk7CisgICAgICAgICAgICBpZiAoKHogPSBzZXRudW0oJmRlYnhsZW4s eCx5LC0xKSkgPCAwKQorICAgICAgICAgICAgICByZXR1cm4oeik7CisgICAgICAgICAgICBpZiAo KHggPSBjbWNmbSgpKSA8IDApCisgICAgICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgICAg IHJldHVybihzdWNjZXNzID0gMSk7CisKKyAgICAgICAgICBjYXNlIERFQl9PRkY6CisgICAgICAg ICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApCisgICAgICAgICAgICAgIHJldHVybih4KTsKKyNp Zm5kZWYgTk9MT0NBTAorICAgICAgICAgICAgc2V0ZGVic2VzKDApOworI2VuZGlmIC8qIE5PTE9D QUwgKi8KKyNpZmRlZiBERUJVRworICAgICAgICAgICAgaWYgKGRlYmxvZykgZG9jbHNsb2coTE9H RCk7CisjZW5kaWYgLyogREVCVUcgKi8KKyAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7 CisKKyAgICAgICAgICBjYXNlIERFQl9PTjoKKyAgICAgICAgICAgIGlmICgoeCA9IGNtY2ZtKCkp IDwgMCkKKyAgICAgICAgICAgICAgcmV0dXJuKHgpOworI2lmZGVmIERFQlVHCisgICAgICAgICAg ICBkZWJsb2cgPSBkZWJvcG4oImRlYnVnLmxvZyIsIDApOworICAgICAgICAgICAgcmV0dXJuKHN1 Y2Nlc3MgPSBkZWJsb2cgPyAxIDogMCk7CisjZWxzZQorICAgICAgICAgICAgcHJpbnRmKCI/U29y cnksIGRlYnVnIGxvZyBmZWF0dXJlIG5vdCBlbmFibGVkXG4iKTsKKyAgICAgICAgICAgIHJldHVy bihzdWNjZXNzID0gMCk7CisjZW5kaWYgLyogREVCVUcgKi8KKyAgICAgICAgICBjYXNlIERFQl9T RVM6CisgICAgICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApCisgICAgICAgICAgICAgIHJl dHVybih4KTsKKyNpZm5kZWYgTk9MT0NBTAorICAgICAgICAgICAgc2V0ZGVic2VzKDEpOworI2Vu ZGlmIC8qIE5PTE9DQUwgKi8KKyAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisKKwkg IGNhc2UgREVCX01TRzoJCQkvKiBEZWJ1ZyBtZXNzYWdlcyAyMDEwLzAzLzEyICovCisJICAgIGlm ICgoeSA9IGNta2V5KG9vZXRhYixub29ldGFiLCIiLCJvbiIseHhzdHJpbmcpKSA8IDApIHJldHVy bih5KTsKKwkgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7CisJICAgIGRlYm1z ZyA9IHk7CisJICAgIHJldHVybigxKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworI2lm bmRlZiBOT1hGRVIKKyAgICAgIGNhc2UgWFlERUxBOiAgICAgICAgICAgICAgICAgICAgICAvKiBT RVQgREVMQVkgKi8KKyAgICAgICAgeSA9IGNtbnVtKCJOdW1iZXIgb2Ygc2Vjb25kcyBiZWZvcmUg c3RhcnRpbmcgdG8gc2VuZCIsCisgICAgICAgICAgICAgICAgICAiNSIsMTAsJngseHhzdHJpbmcp OworICAgICAgICBpZiAoeCA8IDApIHggPSAwOworICAgICAgICByZXR1cm4oc3VjY2VzcyA9IHNl dG51bSgmY2tkZWxheSx4LHksOTk5KSk7CisjZW5kaWYgLyogTk9YRkVSICovCisKKyAgICAgIGRl ZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHN3aXRjaCAoeHgpIHsKKyNpZmRl ZiBDS19UQVBJCisgICAgICBjYXNlIFhZVEFQSToKKyAgICAgICAgcmV0dXJuKHNldHRhcGkoKSk7 CisjZW5kaWYgLyogQ0tfVEFQSSAqLworI2lmbmRlZiBOT0RJQUwKKyAgICAgIGNhc2UgWFlESUFM OiAgICAgICAgICAgICAgICAgICAgICAvKiBTRVQgTU9ERU0gb3IgU0VUIERJQUwgKi8KKyAgICAg ICAgcmV0dXJuKHNldGRpYWwoLTEpKTsKKyAgICAgIGNhc2UgWFlNT0RNOgorICAgICAgICByZXR1 cm4oc2V0bW9kZW0oKSk7CisjaWZkZWYgQ09NTUVOVAorICAgICAgLyogbm90IGltcGxlbWVudGVk IHlldCAqLworICAgICAgY2FzZSBYWUFOU1dFUjogICAgICAgICAgICAgICAgICAgIC8qIFNFVCBB TlNXRVIgKi8KKyAgICAgICAgcmV0dXJuKHNldGFuc3dlcigpKTsKKyNlbmRpZiAvKiBDT01NRU5U ICovCisjZW5kaWYgLyogTk9ESUFMICovCisKKyNpZm5kZWYgTk9MT0NBTAorICAgICAgY2FzZSBY WURVUEw6ICAgICAgICAgICAgICAgICAgICAgIC8qIFNFVCBEVVBMRVggKi8KKyAgICAgICAgaWYg KCh5ID0gY21rZXkoZHB4dGFiLDIsIiIsImZ1bGwiLHh4c3RyaW5nKSkgPCAwKSByZXR1cm4oeSk7 CisgICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOworICAgICAgICBkdXBs ZXggPSB5OworICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworCisgICAgICBjYXNlIFhZTENM RTogICAgICAgICAgICAgICAgICAgICAgLyogTE9DQUwtRUNITyAoPSBEVVBMRVgpICovCisgICAg ICAgIHJldHVybihzdWNjZXNzID0gc2V0b24oJmR1cGxleCkpOworCisgICAgICBjYXNlIFhZRVND OiAgICAgICAgICAgICAgICAgICAgICAgLyogU0VUIEVTQ0FQRSAqLworICAgICAgICByZXR1cm4o c3VjY2VzcyA9IHNldGNjKGNraXRvYShERkVTQyksJmVzY2FwZSkpOworI2VuZGlmIC8qIE5PTE9D QUwgKi8KKworICAgICAgY2FzZSBYWUVYSVQ6ICAgICAgICAgICAgICAgICAgICAgIC8qIFNFVCBF WElUICovCisgICAgICAgIGlmICgoeiA9IGNta2V5KHhpdHRhYixuZXhpdCwiIiwiIix4eHN0cmlu ZykpIDwgMCkKKyAgICAgICAgICByZXR1cm4oeik7CisgICAgICAgIHN3aXRjaCAoeikgeworICAg ICAgICAgIGNhc2UgMDogICAgICAgICAgICAgICAgICAgICAgIC8qIFNUQVRVUyAqLworICAgICAg ICAgICAgeSA9IGNtbnVtKCJFWElUIHN0YXR1cyBjb2RlIiwiIiwxMCwmeCx4eHN0cmluZyk7Cisg ICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IHNldG51bSgmeGl0c3RhLHgseSwtMSkpOworICAg ICAgICAgIGNhc2UgMTogICAgICAgICAgICAgICAgICAgICAgIC8qIFdBUk5JTkcgKi8KKyAgICAg ICAgICAgIGlmICgoeiA9IGNta2V5KHhpdHd0YWIsbmV4aXR3LCIiLCIiLHh4c3RyaW5nKSkgPCAw KQorICAgICAgICAgICAgICByZXR1cm4oeik7CisgICAgICAgICAgICBpZiAoKHkgPSBjbWNmbSgp KSA8IDApIHJldHVybih5KTsKKyAgICAgICAgICAgIHNldGV4aXR3YXJuKHopOworICAgICAgICAg ICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKyAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICBz dWNjZXNzID0gc2V0b24oJmV4aXRvbmNsb3NlKTsKKyNpZmRlZiBUQ1BTT0NLRVQKKyAgICAgICAg ICAgIGlmIChzdWNjZXNzKSB0bl9leGl0ID0gZXhpdG9uY2xvc2U7CisjZW5kaWYgLyogVENQU09D S0VUICovCisgICAgICAgICAgICByZXR1cm4oc3VjY2Vzcyk7CisgICAgICAgICAgY2FzZSAzOiB7 CisgICAgICAgICAgICAgIGV4dGVybiBpbnQgZXhpdGhhbmd1cDsKKyAgICAgICAgICAgICAgcmV0 dXJuKChzdWNjZXNzID0gc2V0b24oJmV4aXRoYW5ndXApKSk7CisgICAgICAgICAgfQorICAgICAg ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4oLTIpOworICAgICAgICB9IC8qIEVuZCBv ZiBTRVQgRVhJVCBzd2l0Y2goKSAqLworICAgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7Cisg ICAgfQorCisgICAgc3dpdGNoICh4eCkgeworCisgICAgICBjYXNlIFhZRklMRTogICAgICAgICAg ICAgICAgICAgICAgLyogU0VUIEZJTEUgKi8KKyAgICAgICAgcmV0dXJuKHNldGZpbChybXNmbGcp KTsKKworICAgICAgY2FzZSBYWUZMT1c6IHsgICAgICAgICAgICAgICAgICAgIC8qIEZMT1ctQ09O VFJPTCAqLworICAgICAgICAgIGV4dGVybiBpbnQgY3hmbG93W107CisgICAgICAgICAgc3RydWN0 IEZEQiBrMSwgazI7CisgICAgICAgICAgaW50IHRuY29tcG9ydCA9IDA7CisgICAgICAgICAgY2hh ciAqIG07CisKKyNpZmRlZiBUTl9DT01QT1JUCisgICAgICAgICAgaWYgKG5ldHdvcmsgJiYgaXN0 bmNvbXBvcnQoKSkKKyAgICAgICAgICAgIHRuY29tcG9ydCA9IDE7CisjZW5kaWYgLyogVE5fQ09N UE9SVCAqLworCisgICAgICAgICAgaWYgKHRuY29tcG9ydCkgeworICAgICAgICAgICAgICBtID0g IkZsb3cgY29udHJvbCB0eXBlLCBvbmUgb2YgdGhlIGZvbGxvd2luZzpcblwKKyAgIGR0ci9jZCAg ICBkdHIvY3RzICAga2VlcCAgICBub25lICAgIHJ0cy9jdHMgICB4b24veG9mZlxuXAorIG9yIGNv bm5lY3Rpb24gdHlwZSI7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAvKiBBbGwgdGhp cyBpcyBiZWNhdXNlIGNoYWluZWQgRkRCJ3MgZG9uJ3QgZ2l2ZSBjaGFpbmVkIGhlbHAgeWV0ICov CisgICAgICAgICAgICAgIG0gPQorI2lmZGVmIFBsYW45CisjaWZkZWYgQ0tfUlRTQ1RTCisgICAg ICAgICAgICJGbG93IGNvbnRyb2wgdHlwZSwgb25lIG9mIHRoZSBmb2xsb3dpbmc6XG5cCisgICBr ZWVwICAgbm9uZSAgICBydHMvY3RzXG5cCisgb3IgY29ubmVjdGlvbiB0eXBlIiwKKyNlbHNlCisg ICAgICAgICAgICJGbG93IGNvbnRyb2wgdHlwZSwgb25lIG9mIHRoZSBmb2xsb3dpbmc6XG5cCisg ICBrZWVwICAgbm9uZVxuXAorIG9yIGNvbm5lY3Rpb24gdHlwZSI7CisjZW5kaWYgLyogQ0tfUlRT Q1RTICovCisjZWxzZQorI2lmZGVmIENLX1JUU0NUUworI2lmZGVmIENLX0RUUkNECisjaWZkZWYg Q0tfRFRSQ1RTCisgICAgICAgICAgICJGbG93IGNvbnRyb2wgdHlwZSwgb25lIG9mIHRoZSBmb2xs b3dpbmc6XG5cCisgICBkdHIvY2QgICAgZHRyL2N0cyAgIGtlZXAgICAgbm9uZSAgICBydHMvY3Rz ICAgeG9uL3hvZmZcblwKKyBvciBjb25uZWN0aW9uIHR5cGUiOworI2Vsc2UgLyogQ0tfRFRSQ1RT ICovCisgICAgICAgICAgICJGbG93IGNvbnRyb2wgdHlwZSwgb25lIG9mIHRoZSBmb2xsb3dpbmc6 XG5cCisgICBkdHIvY2QgICAga2VlcCAgICBub25lICAgIHJ0cy9jdHMgICB4b24veG9mZlxuXAor ICAgICAgICAgICAgb3IgY29ubmVjdGlvbiB0eXBlIjsKKyNlbmRpZiAvKiBDS19EVFJDVFMgKi8K KyNlbHNlIC8qIENLX0RUUkNEICovCisjaWZkZWYgQ0tfRFRSQ1RTCisgICAgICAgICAgICJGbG93 IGNvbnRyb2wgdHlwZSwgb25lIG9mIHRoZSBmb2xsb3dpbmc6XG5cCisgICBkdHIvY3RzICAga2Vl cCAgIG5vbmUgICAgcnRzL2N0cyAgIHhvbi94b2ZmXG5cCisgb3IgY29ubmVjdGlvbiB0eXBlIjsK KyNlbHNlIC8qIENLX0RUUkNUUyAqLworICAgICAgICAgICAiRmxvdyBjb250cm9sIHR5cGUsIG9u ZSBvZiB0aGUgZm9sbG93aW5nOlxuXAorICAga2VlcCAgIG5vbmUgICAgcnRzL2N0cyAgIHhvbi94 b2ZmXG5cCisgb3IgY29ubmVjdGlvbiB0eXBlIjsKKyNlbmRpZiAvKiBDS19EVFJDVFMgKi8KKyNl bmRpZiAvKiBDS19EVFJDRCAqLworI2Vsc2UKKyAgICAgICAgICAgIkZsb3cgY29udHJvbCB0eXBl LCBvbmUgb2YgdGhlIGZvbGxvd2luZzpcblwKKyAgIGtlZXAgICBub25lICAgIHhvbi94b2ZmXG5c Cisgb3IgY29ubmVjdGlvbiB0eXBlIjsKKyNlbmRpZiAvKiBDS19SVFNDVFMgKi8KKyNlbmRpZiAv KiBQbGFuOSAqLworICAgICAgICAgIH0KKyAgICAgICAgICBjbWZkYmkoJmsxLF9DTUtFWSxtLCIi LCIiLG5jeHR5cGVzdywgNCwgeHhzdHJpbmcsIGN4dHlwZXN3LCAmazIpOworICAgICAgICAgIGNt ZmRiaSgmazIsCisgICAgICAgICAgICAgICAgIF9DTUtFWSwKKyAgICAgICAgICAgICAgICAgIiIs CisgICAgICAgICAgICAgICAgICIiLAorICAgICAgICAgICAgICAgICAiIiwKKyNpZmRlZiBUTl9D T01QT1JUCisgICAgICAgICAgICAgICAgICh0bmNvbXBvcnQgPyBudG5mbG8gOiBuZmxvKSwKKyNl bHNlCisgICAgICAgICAgICAgICAgIG5mbG8sCisjZW5kaWYgLyogVE5fQ09NUE9SVCAqLworICAg ICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICB4eHN0cmluZywKKyNpZmRlZiBUTl9D T01QT1JUCisgICAgICAgICAgICAgICAgICh0bmNvbXBvcnQgPyB0bmZsb3RhYiA6IGZsb3RhYiks CisjZWxzZQorICAgICAgICAgICAgICAgICBmbG90YWIsCisjZW5kaWYgLyogVE5fQ09NUE9SVCAq LworICAgICAgICAgICAgICAgICBOVUxMCisgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAg eCA9IGNtZmRiKCZrMSk7CisgICAgICAgICAgaWYgKHggPCAwKSB7ICAgICAgICAgICAgICAgICAg LyogRXJyb3IgKi8KKyAgICAgICAgICAgICAgaWYgKHggPT0gLTIgfHwgeCA9PSAtOSkKKyAgICAg ICAgICAgICAgICBwcmludGYoIj9ObyBrZXl3b3JkcyBvciBzd2l0Y2hlcyBtYXRjaDogXCIlc1wi XG4iLGF0bWJ1Zik7CisgICAgICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgICB9CisgICAg ICAgICAgeiA9IGNtcmVzdWx0Lm5yZXN1bHQ7ICAgICAgICAgLyogS2V5d29yZCB2YWx1ZSAqLwor ICAgICAgICAgIGlmIChjbXJlc3VsdC5mZGJhZGRyID09ICZrMikgeyAvKiBGbG93LWNvbnRyb2wg dHlwZSBrZXl3b3JkIHRhYmxlICovCisgICAgICAgICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwg MCkgICAgLyogU2V0IGl0IGltbWVkaWF0ZWx5ICovCisgICAgICAgICAgICAgICAgcmV0dXJuKHgp OworICAgICAgICAgICAgICBmbG93ID0gejsKKyAgICAgICAgICAgICAgZGVidWcoRjEwMSwic2V0 IGZsb3ciLCIiLGZsb3cpOworI2lmZGVmIENLX1NQRUVECisgICAgICAgICAgICAgIGlmIChmbG93 ID09IEZMT19YT05YKSAgICAgLyogWG9uL1hvZmYgZm9yY2VzIHByZWZpeGluZyAqLworICAgICAg ICAgICAgICAgIGN0bHBbWE9OXSA9IGN0bHBbWE9GRl0gPSBjdGxwW1hPTisxMjhdID0gY3RscFtY T0ZGKzEyOF0gPSAxOworI2VuZGlmIC8qIENLX1NQRUVEICovCisgICAgICAgICAgICAgIGF1dG9m bG93ID0gKGZsb3cgPT0gRkxPX0FVVE8pOworICAgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9 IDEpOyAgICAgIC8qIERvbmUgKi8KKyAgICAgICAgICB9CisgICAgICAgICAgZGVidWcoRjEwMSwi c2V0IGZsb3cgL2JsYWggMSIsIiIseik7IC8qIFNFVCBGTE9XIC9mb3Itd2hhdCAqLworICAgICAg ICAgIGlmICgoeSA9IGNta2V5KGZsb3RhYixuZmxvLCJGbG93IGNvbnRyb2wgdHlwZSIsIm5vbmUi LHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICAgIGlmICgo eCA9IGNtY2ZtKCkpIDwgMCkKKyAgICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgICBkZWJ1 ZyhGMTAxLCJzZXQgZmxvdyAvYmxhaCAyIiwiIix5KTsKKyAgICAgICAgICBpZiAoeSA9PSBGTE9f QVVUTykgeworICAgICAgICAgICAgICBwcmludGYoCisgICI/U29ycnksIFwiYXV0b21hdGljXCIg Y2FuIG5vdCBiZSBhc3NpZ25lZCB0byBhIGNvbm5lY3Rpb24gdHlwZS5cbiIpOworICAgICAgICAg ICAgICByZXR1cm4oLTkpOworICAgICAgICAgIH0gZWxzZSBpZiAoeiA+PSAwICYmIHogPD0gQ1hU X01BWCkKKyAgICAgICAgICAgIGN4Zmxvd1t6XSA9IHk7CisgICAgICAgICAgZGVidWcoRjEwMSwi c2V0IGZsb3ciLCIiLGZsb3cpOworICAgICAgICAgIGRlYnVnKEYxMDEsInNldCBmbG93IGF1dG9m bG93IiwiIixhdXRvZmxvdyk7CisgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKyAgICAg IH0KKworICAgICAgY2FzZSBYWUhBTkQ6ICAgICAgICAgICAgICAgICAgICAgIC8qIEhBTkRTSEFL RSAqLworICAgICAgICBpZiAoKHkgPSBjbWtleShoc2h0YWIsbmhzaCwiIiwibm9uZSIseHhzdHJp bmcpKSA8IDApIHJldHVybih5KTsKKyAgICAgICAgaWYgKHkgPT0gOTk4KSB7CisgICAgICAgICAg ICBpZiAoKHggPSBjbW51bSgiQVNDSUkgdmFsdWUiLCIiLDEwLCZ5LHh4c3RyaW5nKSkgPCAwKQor ICAgICAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgICAgICBpZiAoKHkgPCAxKSB8fCAoKHkg PiAzMSkgJiYgKHkgIT0gMTI3KSkpIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIj9DaGFyYWN0 ZXIgbXVzdCBiZSBpbiBBU0NJSSBjb250cm9sIHJhbmdlXG4iKTsKKyAgICAgICAgICAgICAgICBy ZXR1cm4oLTkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICgoeCA9IGNt Y2ZtKCkpIDwgMCkgcmV0dXJuKHgpOworICAgICAgICB0dXJuID0gKHkgPiAwMTI3KSA/IDAgOiAx OworICAgICAgICB0dXJuY2ggPSB5OworICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworCisj aWZuZGVmIE5PU1BMCisgICAgICBjYXNlIFhZTUFDUjogICAgICAgICAgICAgICAgICAgICAgLyog U0VUIE1BQ1JPICovCisgICAgICAgIGlmICgoeSA9IGNta2V5KHNtYWN0YWIsMiwiIiwiIix4eHN0 cmluZykpIDwgMCkgcmV0dXJuKHkpOworICAgICAgICBzd2l0Y2ggKHkpIHsKKyAgICAgICAgICBj YXNlIDA6IHJldHVybihzdWNjZXNzID0gc2V0b24oJm1lY2hvKSk7CisgICAgICAgICAgY2FzZSAx OiByZXR1cm4oc3VjY2VzcyA9IHNldG9uKCZtZXJyb3JbY21kbHZsXSkpOworICAgICAgICAgIGRl ZmF1bHQ6IHJldHVybigtMik7CisgICAgICAgIH0KKyNlbmRpZiAvKiBOT1NQTCAqLworCisgICAg ICBjYXNlIFhZTVNHUzoKKyNpZmRlZiBWTVMKKyAgICAgICAgaWYgKCh6ID0gY21rZXkob25vZmYs MiwiIiwiIix4eHN0cmluZykpIDwgMCkgcmV0dXJuKHopOworICAgICAgICBpZiAoKHkgPSBjbWNm bSgpKSA8IDApIHJldHVybih5KTsKKyAgICAgICAgdm1zX21zZ3MgPSB6OworICAgICAgICBwcmlu dGYoIlNvcnJ5LCBTRVQgTUVTU0FHRVMgbm90IGltcGxlbWVudGVkIHlldFxuIik7CisgICAgICAg IHJldHVybihzdWNjZXNzID0gMCk7CisjZW5kaWYgLyogVk1TICovCisgICAgICBkZWZhdWx0Ogor ICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBzd2l0Y2ggKHh4KSB7CisKKyAgICAgIGNhc2Ug WFlQQVJJOiAgICAgICAgICAgICAgICAgICAgICAvKiBQQVJJVFkgKi8KKyAgICAgICAgaWYgKCh5 ID0gY21rZXkocGFydGJsLG5wYXIsIiIsIm5vbmUiLHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAg IHJldHVybih5KTsKKworICAgICAgICAvKiBJZiBwYXJpdHkgbm90IG5vbmUsIHRoZW4gd2UgYWxz byB3YW50IDh0aC1iaXQgcHJlZml4aW5nICovCisKKyNpZmRlZiBIV1BBUklUWQorICAgICAgICBp ZiAoeSA9PSAnSCcpIHsgICAgICAgICAgICAgICAgIC8qIEhhcmR3YXJlICovCisgICAgICAgICAg ICBpZiAoKHggPSBjbWtleShod3BhcnRibCxuaHdwYXIsIiIsImV2ZW4iLHh4c3RyaW5nKSkgPCAw KQorICAgICAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgIH0KKyNlbmRpZiAvKiBIV1BBUklU WSAqLworCisgICAgICAgIGlmICgoeiA9IGNtY2ZtKCkpIDwgMCkKKyAgICAgICAgICByZXR1cm4o eik7CisKKyNpZmRlZiBIV1BBUklUWQorICAgICAgICBpZiAoeSA9PSAnSCcpIHsgICAgICAgICAg ICAgICAgIC8qIDggZGF0YSBiaXRzIHBsdXMgaGFyZHdhcmUgcGFyaXR5ICovCisgICAgICAgICAg ICBwYXJpdHkgPSAwOworI2lmbmRlZiBOT1hGRVIKKyAgICAgICAgICAgIGVicWZsZyA9IDA7Cisj ZW5kaWYgLyogTk9YRkVSICovCisgICAgICAgICAgICBod3Bhcml0eSA9IHg7CisgICAgICAgIH0g ZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogNyBkYXRhIGJpdHMgKyBzb2Z0d2FyZSBw YXJpdHkgKi8KKyAgICAgICAgICAgIGh3cGFyaXR5ID0gMDsKKyNlbmRpZiAvKiBIV1BBUklUWSAq LworICAgICAgICAgICAgcGFyaXR5ID0geTsKKyNpZm5kZWYgTk9YRkVSCisgICAgICAgICAgICBl YnFmbGcgPSAocGFyaXR5KSA/IDEgOiAwOworI2VuZGlmIC8qIE5PWEZFUiAqLworI2lmZGVmIEhX UEFSSVRZCisgICAgICAgIH0KKyNlbmRpZiAvKiBIV1BBUklUWSAqLworCisjaWZkZWYgVE5fQ09N UE9SVAorICAgICAgICBpZiAobmV0d29yayAmJiBpc3RuY29tcG9ydCgpKQorICAgICAgICAgIHRu c2V0dGluZ3MocGFyaXR5LCAwKTsKKyNlbmRpZiAvKiBUTl9DT01QT1JUICovCisKKyAgICAgICAg cmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKworI2lmbmRlZiBOT0ZSSUxMUworICAgICAgY2FzZSBYWVBS T006ICAgICAgICAgICAgICAgICAgICAgIC8qIFNFVCBQUk9NUFQgKi8KKy8qCisgIE5vdGU6IHh4 c3RyaW5nIG5vdCBpbnZva2VkIGhlcmUuICBJbnN0ZWFkLCBpdCBpcyBpbnZva2VkIGV2ZXJ5IHRp bWUgdGhlCisgIHByb21wdCBpcyBpc3N1ZWQuICBUaGlzIGFsbG93cyB0aGUgcHJvbXB0IHN0cmlu ZyB0byBjb250YWluIHZhcmlhYmxlcworICB0aGF0IGNhbiBjaGFuZ2UsIGxpa2UgXHYoZGlyKSwg XHYodGltZSksIGV0Yy4KKyovCisgICAgICAgIGNrbWFrbXNnKGxpbmUsICAgICAgICAgICAgICAg ICAgLyogRGVmYXVsdCBtaWdodCBoYXZlIHRyYWlsaW5nIHNwYWNlICovCisgICAgICAgICAgICAg ICAgIExJTkJVRlNJWiwKKyAgICAgICAgICAgICAgICAgInsiLAorICAgICAgICAgICAgICAgICBp bnNlcnZlciA/IGlrcHJvbXB0IDogY2twcm9tcHQsCisgICAgICAgICAgICAgICAgICJ9IiwKKyAg ICAgICAgICAgICAgICAgTlVMTAorICAgICAgICAgICAgICAgICApOworICAgICAgICBpZiAoKHgg PSBjbXR4dCgiUHJvZ3JhbSdzIGNvbW1hbmQgcHJvbXB0IixsaW5lLCZzLE5VTEwpKSA8IDApCisg ICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICBzID0gYnJzdHJpcChzKTsgICAgICAgICAgICAg ICAgIC8qIFJlbW92ZSBlbmNsb3NpbmcgYnJhY2VzLCBpZiBhbnkgKi8KKyAgICAgICAgY21zZXRw KHMpOyAgICAgICAgICAgICAgICAgICAgICAvKiBTZXQgdGhlIHByb21wdCAqLworICAgICAgICBy ZXR1cm4oc3VjY2VzcyA9IDEpOworI2VuZGlmIC8qIE5PRlJJTExTICovCisKKyNpZm5kZWYgTk9Y RkVSCisgICAgICBjYXNlIFhZUkVUUjogICAgICAgICAgICAgICAgICAgICAgLyogUkVUUlk6IHBl ci1wYWNrZXQgcmV0cnkgbGltaXQgKi8KKyAgICAgICAgeSA9IGNtbnVtKCJNYXhpbXVtIHJldHJp ZXMgcGVyIHBhY2tldCIsIjEwIiwxMCwmeCx4eHN0cmluZyk7CisgICAgICAgIGlmICh4IDwgMCkg eCA9IDA7CisgICAgICAgIGlmICgoeCA9IHNldG51bSgmbWF4dHJ5LHgseSw5OTkpKSA8IDApIHJl dHVybih4KTsKKyNpZmRlZiBDT01NRU5UCisgICAgICAgIGlmIChtYXh0cnkgPD0gd3Nsb3RyKSB7 CisgICAgICAgICAgICBwcmludGYoIj9SZXRyeSBsaW1pdCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB3 aW5kb3cgc2l6ZVxuIik7CisgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOworICAgICAg ICB9CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAgICBpZiAocm1zZmxnKSB7CisgICAgICAg ICAgICBzc3RhdGUgPSBzZXRnZW4oJ1MnLCAiNDAzIiwgY2tpdG9hKG1heHRyeSksICIiKTsKKyAg ICAgICAgICAgIHJldHVybigoaW50KSBzc3RhdGUpOworICAgICAgICB9IGVsc2UgcmV0dXJuKHN1 Y2Nlc3MgPSB4KTsKKyNlbmRpZiAvKiBOT1hGRVIgKi8KKworI2lmbmRlZiBOT1NFUlZFUgorICAg ICAgY2FzZSBYWVNFUlY6ICAgICAgICAgICAgICAgICAgICAgIC8qIFNFVCBTRVJWRVIgaXRlbXMg Ki8KKyAgICAgICAgaWYgKCh5ID0gY21rZXkoc3J2dGFiLG5zcnZ0LCIiLCIiLHh4c3RyaW5nKSkg PCAwKSByZXR1cm4oeSk7CisgICAgICAgIHN3aXRjaCAoeSkgeworICAgICAgICAgIGNhc2UgWFlT RVJJOgorICAgICAgICAgICAgaWYgKCh5ID0gY21udW0oIk51bWJlciBvZiBzZWNvbmRzLCBvciAw IGZvciBubyBpZGxlIHRpbWVvdXQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIjAiLDEw LCZ4LHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgICAg ICBpZiAoeCA8IDApCisgICAgICAgICAgICAgIHggPSAwOworICAgICAgICAgICAgaWYgKCh5ID0g Y21jZm0oKSkgPCAwKQorICAgICAgICAgICAgICByZXR1cm4oeSk7CisjaWZuZGVmIE9TMgorICAg ICAgICAgICAgc3J2dGltID0gMDsKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAgICAgIHNydmlk bCA9IHg7CisgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworICAgICAgICAgIGNhc2Ug WFlTRVJUOgorICAgICAgICAgICAgaWYgKCh5ID0gY21udW0oIkludGVydmFsIGZvciBzZXJ2ZXIg TkFLcywgMCA9IG5vbmUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY2tpdG9hKERTUlZU SU0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAsJngsIHh4c3RyaW5nKSkgPCAwKQor ICAgICAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgICAgICBpZiAoeCA8IDApIHsKKyAgICAg ICAgICAgICAgICBwcmludGYoCisgICAgICAgICAgICAgICAgICAgIlxuP1NwZWNpZnkgYSBwb3Np dGl2ZSBudW1iZXIsIG9yIDAgZm9yIG5vIHNlcnZlciBOQUtzXG4iKTsKKyAgICAgICAgICAgICAg ICByZXR1cm4oMCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoKHkgPSBjbWNmbSgp KSA8IDApIHJldHVybih5KTsKKyAgICAgICAgICAgIGlmIChybXNmbGcpIHsKKyAgICAgICAgICAg ICAgICBzc3RhdGUgPSBzZXRnZW4oJ1MnLCAiNDA0IiwgY2tpdG9hKHgpLCAiIik7CisgICAgICAg ICAgICAgICAgcmV0dXJuKChpbnQpIHNzdGF0ZSk7CisgICAgICAgICAgICB9IGVsc2UgeworI2lm bmRlZiBPUzIKKyAgICAgICAgICAgICAgICBzcnZpZGwgPSAwOworI2VuZGlmIC8qIE9TMiAqLwor ICAgICAgICAgICAgICAgIHNydnRpbSA9IHg7ICAgICAgICAgICAgIC8qIFNldCB0aGUgc2VydmVy IHRpbWVvdXQgdmFyaWFibGUgKi8KKyAgICAgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEp OworICAgICAgICAgICAgfQorICAgICAgICAgIGNhc2UgWFlTRVJEOiAgICAgICAgICAgICAgICAg IC8qIFNFUlZFUiBESVNQTEFZICovCisgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IHNldG9u KCZzcnZkaXMpKTsgLyogT04gb3IgT0ZGLi4uICovCisKKyNpZm5kZWYgTk9TUEwKKyAgICAgICAg ICBjYXNlIFhZU0VSUDogICAgICAgICAgICAgICAgICAvKiBTRVJWRVIgR0VULVBBVEggKi8KKyAg ICAgICAgICAgIHJldHVybihwYXJzZGlyKDIpKTsKKyNlbmRpZiAvKiBOT1NQTCAqLworCisgICAg ICAgICAgY2FzZSBYWVNFUkw6ICAgICAgICAgICAgICAgICAgLyogU0VSVkVSIExPR0lOICovCisg ICAgICAgICAgICByZXR1cm4oY2tsb2dpbigpKTsKKworICAgICAgICAgIGNhc2UgWFlTRVJDOiAg ICAgICAgICAgICAgICAgIC8qIFNFUlZFUiBDRC1NRVNTQUdFICovCisgICAgICAgICAgICB4ID0g cm1zZmxnID8KKyAgICAgICAgICAgICAgY21rZXkob25vZmYsMiwiIiwiIix4eHN0cmluZykgOgor ICAgICAgICAgICAgICAgIGNta2V5KGNkbXNnLDMsIiIsIiIseHhzdHJpbmcpOworICAgICAgICAg ICAgaWYgKHggPCAwKQorICAgICAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgICAgICBpZiAo eCA9PSAyKSB7ICAgICAgICAgICAgICAgLyogQ0QtTUVTU0FHRSBGSUxFICovCisgICAgICAgICAg ICAgICAgaWYgKCh4ID0gY210eHQoIk5hbWUgb2YgZmlsZSIsIiIsJnMsTlVMTCkpIDwgMCkKKyAg ICAgICAgICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgICAgICAgICBpZiAoISpzKSB7Cisg ICAgICAgICAgICAgICAgICAgIHMgPSBOVUxMOworICAgICAgICAgICAgICAgICAgICBzcnZjZG1z ZyA9IDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1ha2VzdHIoJmNkbXNn c3RyLHMpOworICAgICAgICAgICAgICAgIG1ha2VsaXN0KGNkbXNnc3RyLGNkbXNnZmlsZSw4KTsK KyAgICAgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworICAgICAgICAgICAgfQorICAg ICAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSAgICAgIC8qIENELU1FU1NBR0UgT04vT0ZG ICovCisgICAgICAgICAgICAgIHJldHVybih5KTsKKyAgICAgICAgICAgIGlmIChybXNmbGcpIHsK KyAgICAgICAgICAgICAgICBzc3RhdGUgPSBzZXRnZW4oJ1MnLCAiNDIwIiwgeCA/ICIxIiA6ICIw IiwgIiIpOworICAgICAgICAgICAgICAgIHJldHVybigoaW50KSBzc3RhdGUpOworICAgICAgICAg ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoeCA+IDApCisgICAgICAgICAgICAgICAg ICBzcnZjZG1zZyB8PSAxOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAg IHNydmNkbXNnICY9IDI7CisgICAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgICBjYXNlIFhZU0VSSzogICAgICAgICAgICAgICAgICAvKiBT RVJWRVIgS0VFUEFMSVZFICovCisgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IHNldG9uKCZz cnZwaW5nKSk7IC8qIE9OIG9yIE9GRi4uLiAqLworCisgICAgICAgICAgZGVmYXVsdDoKKyAgICAg ICAgICAgIHJldHVybigtMik7CisgICAgICAgIH0KKyNlbmRpZiAvKiBOT1NFUlZFUiAqLworICAg IH0KKworICAgIHN3aXRjaCAoeHgpIHsKKyNpZmRlZiBVTklYCisjaWZuZGVmIE5PSkMKKyAgICAg IGNhc2UgWFlTVVNQOiAgICAgICAgICAgICAgICAgICAgICAvKiBTRVQgU1VTUEVORCAqLworICAg ICAgICBzZXRvbigmeHN1c3BlbmQpOwkJLyogb24gb3Igb2ZmLi4uICovCisgICAgICAgIHJldHVy bihzdWNjZXNzID0gMSk7CisjZW5kaWYgLyogTk9KQyAqLworI2VuZGlmIC8qIFVOSVggKi8KKwor ICAgICAgY2FzZSBYWVRBS0U6ICAgICAgICAgICAgICAgICAgICAgIC8qIFNFVCBUQUtFICovCisg ICAgICAgIGlmICgoeSA9IGNta2V5KHRha3RhYiw0LCIiLCIiLHh4c3RyaW5nKSkgPCAwKSByZXR1 cm4oeSk7CisgICAgICAgIHN3aXRjaCAoeSkgeworICAgICAgICAgIGNhc2UgMDogcmV0dXJuKHN1 Y2Nlc3MgPSBzZXRvbigmdGVjaG8pKTsKKyNpZm5kZWYgTk9TUEwKKyAgICAgICAgICBjYXNlIDE6 IHJldHVybihzdWNjZXNzID0gc2V0b24oJnRha2VycltjbWRsdmxdKSk7CisjZWxzZQorICAgICAg ICAgIGNhc2UgMTogcmV0dXJuKHN1Y2Nlc3MgPSBzZXRvbigmdGFrZXJyW3RsZXZlbF0pKTsKKyNl bmRpZiAvKiBOT1NQTCAqLworICAgICAgICAgIGNhc2UgMjogdGVjaG8gPSAwOyByZXR1cm4oc3Vj Y2VzcyA9IDEpOyAvKiBGb3IgY29tcGF0aWJpbGl0eSB3aXRoICovCisgICAgICAgICAgY2FzZSAz OiB0ZWNobyA9IDE7IHJldHVybihzdWNjZXNzID0gMSk7IC8qIE1TLURPUyBLZXJtaXQgKi8KKyAg ICAgICAgICBkZWZhdWx0OiByZXR1cm4oLTIpOworICAgICAgICB9CisKKyNpZm5kZWYgTk9TQ1JJ UFQKKyAgICAgIGNhc2UgWFlTQ1JJOiAgICAgICAgICAgICAgICAgICAgICAvKiBTRVQgU0NSSVBU ICovCisgICAgICAgIGlmICgoeSA9IGNta2V5KHNjcnRhYiwxLCIiLCJlY2hvIix4eHN0cmluZykp IDwgMCkgcmV0dXJuKHkpOworICAgICAgICBzd2l0Y2ggKHkpIHsKKyAgICAgICAgICBjYXNlIDA6 IHJldHVybihzdWNjZXNzID0gc2V0b24oJnNlY2hvKSk7CisgICAgICAgICAgZGVmYXVsdDogcmV0 dXJuKC0yKTsKKyAgICAgICAgfQorI2VuZGlmIC8qIE5PU0NSSVBUICovCisKKyAgICAgIGRlZmF1 bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworI2lmbmRlZiBOT0xPQ0FMCisgICAgc3dpdGNo ICh4eCkgeworICAgICAgY2FzZSBYWVRFUk06ICAgICAgICAgICAgICAgICAgICAgIC8qIFNFVCBU RVJNSU5BTCAqLworICAgICAgICB4ID0gc2V0dHJtKCk7CisgICAgICAgIHN1Y2Nlc3MgPSAoeCA+ IDApID8gMSA6IDA7CisgICAgICAgIHJldHVybih4KTsKKworI2lmZGVmIE5UCisgICAgICBjYXNl IFhZV0lOOTU6ICAgICAgICAgICAgICAgICAgICAgLyogU0VUIFdJTjk1IHdvcmthcm91bmRzICov CisgICAgICAgIHggPSBzZXR3aW45NSgpOworICAgICAgICBzdWNjZXNzID0gKHggPiAwID8gMSA6 IDApOworICAgICAgICByZXR1cm4oeCk7CisjZW5kaWYgLyogTlQgKi8KKworI2lmZGVmIE9TMgor ICAgICAgY2FzZSBYWURMUjogICAgICAgICAgICAgICAgICAgICAgIC8qIFNFVCBESUFMRVIgd29y a2Fyb3VuZHMgKi8KKyAgICAgICAgeCA9IHNldGRpYWxlcigpOworICAgICAgICBzdWNjZXNzID0g KHggPiAwID8gMSA6IDApOworICAgICAgICByZXR1cm4oeCk7CisKKyAgICAgIGNhc2UgWFlUSVRM RTogICAgICAgICAgICAgICAgICAgICAvKiBTRVQgVElUTEUgb2Ygd2luZG93ICovCisgICAgICAg IHggPSBzZXR0aXRsZSgpOworICAgICAgICBzdWNjZXNzID0gKHggPiAwID8gMSA6IDApOworICAg ICAgICByZXR1cm4oeCk7CisjZW5kaWYgLyogT1MyICovCisKKyNpZmRlZiBPUzJNT1VTRQorICAg ICAgY2FzZSBYWU1PVVNFOiAgICAgICAgICAgICAgICAgICAgIC8qIFNFVCBNT1VTRSAqLworICAg ICAgICByZXR1cm4oc3VjY2VzcyA9IHNldG1vdSgpKTsKKyNlbmRpZiAvKiBPUzJNT1VTRSAqLwor CisgICAgICBjYXNlIFhZQkVMTDogICAgICAgICAgICAgICAgICAgICAgLyogU0VUIEJFTEwgKi8K KyAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSBzZXRiZWxsKCkpOworCisjaWZkZWYgT1MyCisgICAg ICBjYXNlIFhZUFJUWToKKyAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSBzZXRwcnR5KCkgKTsKKyNl bmRpZiAvKiBPUzIgKi8KKworICAgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQor I2VuZGlmIC8qIE5PTE9DQUwgKi8KKworICAgIHN3aXRjaCAoeHgpIHsKKworLyogU0VUIFNFTkQv UkVDRUlWRSBwcm90b2NvbCBwYXJhbWV0ZXJzLiAqLworCisjaWZuZGVmIE5PWEZFUgorICAgICAg Y2FzZSBYWVJFQ1Y6CisgICAgICBjYXNlIFhZU0VORDoKKyAgICAgICAgcmV0dXJuKHNldHNyKHh4 LHJtc2ZsZykpOworI2VuZGlmIC8qIE5PWEZFUiAqLworCisjaWZuZGVmIE5PTE9DQUwKKyAgICAg IGNhc2UgWFlTRVNTOiAgICAgICAgICAgICAgICAgICAgICAvKiBTRVNTSU9OLUxPRyAqLworICAg ICAgICBpZiAoKHggPSBjbWtleShzZnR0YWIsbnNmdHRhYiwidHlwZSBvZiBmaWxlIiwKKyNpZmRl ZiBPUzIKKyAgICAgICAgICAgICAgICAgICAgICAgImJpbmFyeSIsCisjZWxzZSAvKiBPUzIgKi8K KyAgICAgICAgICAgICAgICAgICAgICAgInRleHQiLAorI2VuZGlmIC8qIE9TMiAqLworICAgICAg ICAgICAgICAgICAgICAgICB4eHN0cmluZworICAgICAgICAgICAgICAgICAgICAgICApCisgICAg ICAgICAgICAgKSA8IDApCisgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICBpZiAoKHkgPSBj bWNmbSgpKSA8IDApCisgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICBpZiAoeCA9PSA5OTkp IHsgICAgICAgICAgICAgICAgIC8qIFRJTUVTVEFNUEVELVRFWFQgKi8KKyAgICAgICAgICAgIHNl c3NmdCA9IFhZRlRfVDsgICAgICAgICAgICAvKiBJbXBsaWVzIHRleHQgKi8KKyAgICAgICAgICAg IHNsb2d0cyA9IDE7ICAgICAgICAgICAgICAgICAvKiBhbmQgdGltZXN0YW1wcyAqLworCX0gZWxz ZSBpZiAoeCA9PSA5OTgpIHsJCS8qIE5VTEwtUEFEREVELUxJTkVTICovCisgICAgICAgICAgICBz bG9nbnVsID0gMTsJCS8qIGFkZHMgTlVMIGFmdGVyIF5KICovCisgICAgICAgIH0gZWxzZSB7ICAg ICAgICAgICAgICAgICAgICAgICAgLyogQSByZWd1bGFyIHR5cGUgKi8KKyAgICAgICAgICAgIHNl c3NmdCA9IHg7ICAgICAgICAgICAgICAgICAvKiBUaGUgdHlwZSAqLworICAgICAgICAgICAgc2xv Z3RzID0gMDsgICAgICAgICAgICAgICAgIC8qIE5vIHRpbWVzdGFtcGVzICovCisgICAgICAgIH0K KyAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKworICAgICAgY2FzZSBYWVNQRUU6ICAgICAg ICAgICAgICAgICAgICAgIC8qIFNFVCBTUEVFRCAqLworICAgICAgICBscCA9IGxpbmU7CisgICAg ICAgIGlmIChsb2NhbCAmJiAhbmV0d29yaykgeworICAgICAgICAgIGNrbWFrbXNnKGxwLAorICAg ICAgICAgICAgICAgICAgIExJTkJVRlNJWiwKKyAgICAgICAgICAgICAgICAgICAiVHJhbnNtaXNz aW9uIHJhdGUgZm9yICIsCisgICAgICAgICAgICAgICAgICAgdHRuYW1lLAorICAgICAgICAgICAg ICAgICAgICIgKGJpdHMgcGVyIHNlY29uZCkiLAorICAgICAgICAgICAgICAgICAgIE5VTEwKKyAg ICAgICAgICAgICAgICAgICApOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGNrc3RybmNw eShscCwKKyAgICAgICAgICAgICAgICAgICAgIlNlcmlhbC1wb3J0IHNwZWVkIChiaXRzIHBlciBz ZWNvbmQpIiwKKyAgICAgICAgICAgICAgICAgICAgTElOQlVGU0laCisgICAgICAgICAgICAgICAg ICAgICk7CisgICAgICAgIH0KKyAgICAgICAgenogPSAtMUw7CisKKyNpZmRlZiBUTl9DT01QT1JU CisgICAgICAgIGlmIChuZXR3b3JrICYmIGlzdG5jb21wb3J0KCkpCisgICAgICAgICAgeCA9IGNt a2V5KHRuc3BkdGFiLG50bnNwZCxsaW5lLCIiLHh4c3RyaW5nKTsKKyAgICAgICAgZWxzZQorI2Vu ZGlmIC8qIFROX0NPTVBPUlQgKi8KKyAgICAgICAgICB4ID0gY21rZXkoc3BkdGFiLG5zcGQsbGlu ZSwiIix4eHN0cmluZyk7CisgICAgICAgIGlmICh4IDwgMCkgeworICAgICAgICAgICAgaWYgKHgg PT0gLTMpIHByaW50ZigiP3ZhbHVlIHJlcXVpcmVkXG4iKTsKKyNpZmRlZiBVU0VUQ1NFVFNQRUVE CisgICAgICAgICAgICAvKiBJbiB0aGlzIGNhc2UsIGFueSBudW1iZXIgY2FuIGJlIHRyaWVkICov CisgICAgICAgICAgICAvKiBUaGVyZSdzIGEgcGFyc2UgZXJyb3IgbWVzc2FnZSBidXQgdGhlIHJl cXVlc3Qgc3RpbGwgZ29lcyB0aHJ1ICovCisgICAgICAgICAgICBpZiAocmRpZ2l0cyhhdG1idWYp KQorICAgICAgICAgICAgICB6eiA9IGF0b2woYXRtYnVmKTsKKyAgICAgICAgICAgIGVsc2UKKyNl bmRpZiAvKiBVU0VUQ1NFVFNQRUVEICovCisgICAgICAgICAgICAgIHJldHVybih4KTsKKyAgICAg ICAgfQorICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsKKyNpZmRlZiBJ S1NECisgICAgICAgIGlmIChpbnNlcnZlcikgeworICAgICAgICAgICAgcHJpbnRmKCI/U29ycnks IGNvbW1hbmQgZGlzYWJsZWQuXHJcbiIpOworICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAw KTsKKyAgICAgICAgfQorI2VuZGlmIC8qIElLU0QgKi8KKyAgICAgICAgaWYgKCFsb2NhbCkgewor ICAgICAgICAgICAgcHJpbnRmKCI/U0VUIFNQRUVEIGhhcyBubyBlZmZlY3Qgd2l0aG91dCBwcmlv ciBTRVQgTElORVxuIik7CisgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOworICAgICAg ICB9IGVsc2UgaWYgKG5ldHdvcmsKKyNpZmRlZiBUTl9DT01QT1JUCisgICAgICAgICAgICAgICAg ICAgJiYgIWlzdG5jb21wb3J0KCkKKyNlbmRpZiAvKiBUTl9DT01QT1JUICovCisgICAgICAgICAg ICAgICAgICAgKSB7CisgICAgICAgICAgICBwcmludGYoIlxuP1NwZWVkIGNhbm5vdCBiZSBzZXQg Zm9yIG5ldHdvcmsgY29ubmVjdGlvbnNcbiIpOworICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3Mg PSAwKTsKKyAgICAgICAgfQorCisvKgorICBOb3RlOiBUaGlzIHdheSBvZiBoYW5kbGluZyBzcGVl ZHMgaXMgbm90IDE2LWJpdCBzYWZlIGZvciBzcGVlZHMgZ3JlYXRlcgorICB0aGFuIDIzMDQwMC4g IFRoZSBhcmd1bWVudCB0byB0dHNzcGQoKSBzaG91bGQgaGF2ZSBiZWVuIGEgbG9uZy4KKyovCisj aWZkZWYgVVNFVENTRVRTUEVFRAorICAgICAgICBpZiAoenogPiAtMUwpCisgICAgICAgICAgeCA9 IHp6IC8gMTBMOworI2VuZGlmIC8qIFVTRVRDU0VUU1BFRUQgKi8KKyAgICAgICAgenogPSAobG9u ZykgeCAqIDEwTDsKKyAgICAgICAgaWYgKHp6ID09IDEzMEwpIHp6ID0gMTM0TDsKKyAgICAgICAg aWYgKHp6ID09IDcwTCkgenogPSA3NUw7ICAgICAgICAvKiAoc2VlIHNwZHRhYltdIGRlZmluaXRp b24pICovCisgICAgICAgIGlmICh0dHNzcGQoeCkgPCAwKSAgeyAgICAgICAgICAgLyogQ2FsbCB0 dHNzcGQgd2l0aCBjcHMsIG5vdCBicHMhICovCisgICAgICAgICAgICBwcmludGYoIj9VbnN1cHBv cnRlZCBsaW5lIHNwZWVkIC0gJWxkXG4iLHp6KTsKKyAgICAgICAgICAgIHJldHVybihzdWNjZXNz ID0gMCk7CisgICAgICAgIH0gZWxzZSB7CisjaWZkZWYgQ0tfVEFQSQorICAgICAgICAgICAgaWYg KCF0dHRhcGkgfHwgdGFwaXBhc3MpCisgICAgICAgICAgICAgIHNwZWVkID0gdHRnc3BkKCk7ICAg ICAgICAgLyogUmVhZCBpdCBiYWNrICovCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg IHNwZWVkID0geno7CisjZWxzZSAvKiBDS19UQVBJICovCisgICAgICAgICAgICBzcGVlZCA9IHR0 Z3NwZCgpOyAgICAgICAgICAgLyogUmVhZCBpdCBiYWNrICovCisjZW5kaWYgLyogQ0tfVEFQSSAq LworICAgICAgICAgICAgaWYgKHNwZWVkICE9IHp6KSAgeyAgICAgICAgIC8qIENhbGwgdHRzc3Bk IHdpdGggY3BzLCBub3QgYnBzISAqLworICAgICAgICAgICAgICAgIHByaW50ZigiP1NFVCBTUEVF RCBmYWlscywgc3BlZWQgaXMgJWxkXG4iLHNwZWVkKTsKKyAgICAgICAgICAgICAgICByZXR1cm4o c3VjY2VzcyA9IDApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHBmbGFnICYmICF4 Y21kc3JjKSB7CisgICAgICAgICAgICAgICAgaWYgKHNwZWVkID09IDg4ODApCisgICAgICAgICAg ICAgICAgICBwcmludGYoIiVzLCA3NS8xMjAwIGJwc1xuIix0dG5hbWUpOworICAgICAgICAgICAg ICAgIGVsc2UgaWYgKHNwZWVkID09IDEzNCkKKyAgICAgICAgICAgICAgICAgIHByaW50ZigiJXMs IDEzNC41IGJwc1xuIix0dG5hbWUpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg ICAgICAgIHByaW50ZigiJXMsICVsZCBicHNcbiIsdHRuYW1lLHNwZWVkKTsKKyAgICAgICAgICAg IH0KKyAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisgICAgICAgIH0KKyNlbmRpZiAv KiBOT0xPQ0FMICovCisKKyNpZm5kZWYgTk9YRkVSCisgICAgICBjYXNlIFhZWEZFUjogICAgICAg ICAgICAgICAgICAgICAgLyogU0VUIFRSQU5TRkVSICovCisgICAgICAgIGlmICgoeSA9IGNta2V5 KHJtc2ZsZyA/IHJ0c3RhYiA6IHRzdGFiLCAvKiAob3IgUkVNT1RFIFNFVCBUUkFOU0ZFUikgKi8K KyAgICAgICAgICAgICAgICAgICAgICAgcm1zZmxnID8gbnJ0cyA6IG50cywKKyAgICAgICAgICAg ICAgICAgICAgICAgIiIsImNoYXJhY3Rlci1zZXQiLHh4c3RyaW5nKSkgPCAwKSByZXR1cm4oeSk7 CisgICAgICAgIHN3aXRjaCAoeSkgeworI2lmZGVmIFhGUkNBTgorICAgICAgICAgIGNhc2UgWFlY X0NBTjogICAgICAgICAgICAgICAgIC8qIENBTkNFTExBVElPTiAqLworICAgICAgICAgICAgaWYg KCh6ID0gY21rZXkob25vZmYsMiwiIiwiIix4eHN0cmluZykpIDwgMCkgcmV0dXJuKHopOworICAg ICAgICAgICAgaWYgKHogPT0gMCkgeyAgICAgICAgICAgICAgIC8qIE9GRiAqLworICAgICAgICAg ICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkpOworICAgICAgICAgICAgICAg IHhmcmNhbiA9IDA7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmICgo eSA9IGNtbnVtKCJBU0NJSSBjb2RlIGZvciBjYW5jZWxsYXRpb24gY2hhcmFjdGVyIiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAiMyIsMTAsJngsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgeHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgICAgICAgICByZXR1cm4oeSk7 CisgICAgICAgICAgICAgICAgaWYgKHggPiAzMSAmJiB4ICE9IDEyNykgeworICAgICAgICAgICAg ICAgICAgICBwcmludGYoIkNhbmNlbCBjaGFyYWN0ZXIgbXVzdCBiZSAwLTMxIG9yIDEyN1xuIik7 CisgICAgICAgICAgICAgICAgICAgIHJldHVybigtOSk7CisgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICAgIGlmICgoeSA9IGNtbnVtKCJIb3cgbWFueSByZXF1aXJlZCB0byBjYXVzZSBj YW5jZWxsYXRpb24iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyIiwxMCwmeiwg eHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgICAg ICAgICAgaWYgKHogPCAyKSB7CisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiTnVtYmVyIG11 c3QgYmUgMiBvciBncmVhdGVyXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC05KTsK KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAw KSByZXR1cm4oeSk7CisgICAgICAgICAgICAgICAgeGZyY2FuID0gMTsgICAgICAgICAgICAgLyog Q0FOQ0VMTEFUSU9OIE9OICovCisgICAgICAgICAgICAgICAgeGZyY2hyID0geDsgICAgICAgICAg ICAgLyogVXNpbmcgdGhpcyBjaGFyYWN0ZXIgKi8KKyAgICAgICAgICAgICAgICB4ZnJudW0gPSB6 OyAgICAgICAgICAgICAvKiBOZWVkaW5nIHRoaXMgbWFueSBvZiB0aGVtICovCisgICAgICAgICAg ICB9CisgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworI2VuZGlmIC8qIFhGUkNBTiAq LworCisjaWZuZGVmIE5PQ1NFVFMKKyAgICAgICAgICBjYXNlIFhZWF9DU0U6ICAgICAgICAgICAg ICAgICAvKiBDSEFSQUNURVItU0VUICovCisgICAgICAgICAgICBpZiAoKHkgPSBjbWtleSh0Y3N0 YWIsbnRjcywiIiwidHJhbnNwYXJlbnQiLHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgICAgICBy ZXR1cm4oeSk7CisgICAgICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsK KyAgICAgICAgICAgIGlmIChybXNmbGcpIHsKKyAgICAgICAgICAgICAgICBzc3RhdGUgPSBzZXRn ZW4oJ1MnLCAiNDA1IiwgdGNzaW5mb1t5XS5kZXNpZ25hdG9yLCAiIik7CisgICAgICAgICAgICAg ICAgcmV0dXJuKChpbnQpIHNzdGF0ZSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg ICAgICAgIGV4dGVybiBpbnQgc19jc2V0LCBmY2hhcnNldCwgYXhjc2V0W10sIHRjc19zYXZlOwor ICAgICAgICAgICAgICAgIHRzbGV2ZWwgPSAoeSA9PSBUQ19UUkFOU1ApID8gMCA6IDE7IC8qIHRy YW5zZmVyIHN5bnRheCBsZXZlbCAqLworCQl4ZnJ4bGEgPSB0c2xldmVsOworICAgICAgICAgICAg ICAgIHRjaGFyc2V0ID0geTsgICAgICAgICAgIC8qIHRyYW5zZmVyIGNoYXJhY3RlciBzZXQgKi8K KyAgICAgICAgICAgICAgICAvKiBTRU5EIENIQVJBQ1RFUi1TRVQgQVVUTyAqLworICAgICAgICAg ICAgICAgIGlmICh0c2xldmVsID4gMCAmJiBzX2NzZXQgPT0gWE1PREVfQSkKKyAgICAgICAgICAg ICAgICAgIGlmICh5ID4gLTEgJiYgeSA8PSBNQVhUQ1NFVFMpCisgICAgICAgICAgICAgICAgICAg IGlmIChheGNzZXRbeV0gPiAtMSAmJiBheGNzZXRbeV0gPiBNQVhGQ1NFVFMpCisgICAgICAgICAg ICAgICAgICAgICAgZmNoYXJzZXQgPSBheGNzZXRbeV07IC8qIEF1dG8tcGljayBmaWxlIGNoYXJz ZXQgKi8KKyAgICAgICAgICAgICAgICBzZXR4bGF0eXBlKHRjaGFyc2V0LGZjaGFyc2V0KTsgLyog VHJhbnNsYXRpb24gdHlwZSAqLworCQl0Y3Nfc2F2ZSA9IC0xOworICAgICAgICAgICAgICAgIHJl dHVybihzdWNjZXNzID0gMSk7CisgICAgICAgICAgICB9CisjZW5kaWYgLyogTk9DU0VUUyAqLwor CisgICAgICAgICAgY2FzZSBYWVhfTFNIOiAgICAgICAgICAgICAgICAgLyogTE9DS0lORy1TSElG VCAqLworICAgICAgICAgICAgaWYgKCh5ID0gY21rZXkobHN0YWIsbmxzLCIiLCJvbiIseHhzdHJp bmcpKSA8IDApCisgICAgICAgICAgICAgIHJldHVybih5KTsKKyAgICAgICAgICAgIGlmICgoeCA9 IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOworICAgICAgICAgICAgbHNjYXByID0gKHkgPT0gMSkg PyAxIDogMDsgIC8qIE9OOiByZXF1ZXN0ZWQgPSAxICovCisgICAgICAgICAgICBsc2NhcHUgPSAo eSA9PSAyKSA/IDIgOiAwOyAgLyogRk9SQ0VEOiAgdXNlZCA9IDEgKi8KKyAgICAgICAgICAgIHJl dHVybihzdWNjZXNzID0gMSk7CisKKy8qICNpZmRlZiBDS19YWVogKi8KKyAgICAgICAgICBjYXNl IFhZWF9QUk86ICAgICAgICAgICAgICAgICAvKiBQcm90b2NvbCAqLworI2lmbmRlZiBPUzIKKyAg ICAgICAgICAgIGlmIChpbnNlcnZlcikgeworICAgICAgICAgICAgICAgIHByaW50ZigiP1NvcnJ5 LCBvbmx5IEtlcm1pdCBwcm90b2NvbCBpcyBhdmFpbGFibGVcbiIpOworICAgICAgICAgICAgICAg IHJldHVybigtOSk7CisgICAgICAgICAgICB9CisjZW5kaWYgLyogT1MyICovCisgICAgICAgICAg ICByZXR1cm4oc2V0cHJvdG8oKSk7CisvKiAjZW5kaWYgKi8gLyogQ0tfWFlaICovCisKKyAgICAg ICAgICBjYXNlIFhZWF9NT0Q6ICAgICAgICAgICAgICAgICAvKiBNb2RlICovCisgICAgICAgICAg ICBpZiAoKHkgPSBjbWtleSh4ZnJtdGFiLDIsIiIsImF1dG9tYXRpYyIseHhzdHJpbmcpKSA8IDAp CisgICAgICAgICAgICAgIHJldHVybih5KTsKKyAgICAgICAgICAgIGlmICgoeCA9IGNtY2ZtKCkp IDwgMCkgcmV0dXJuKHgpOworICAgICAgICAgICAgaWYgKHJtc2ZsZykgeworICAgICAgICAgICAg ICAgIHNzdGF0ZSA9IHNldGdlbignUycsICI0MTAiLCB5ID09IFhNT0RFX0EgPyAiMCIgOiAiMSIs ICIiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4oKGludClzc3RhdGUpOworICAgICAgICAgICAg fQorICAgICAgICAgICAgZ194ZmVybW9kZSA9IHk7CisgICAgICAgICAgICB4ZmVybW9kZSA9IHk7 CisjaWZkZWYgTkVXRlRQCisJICAgIGlmIChmdHBpc29wZW4oKSkgewkJLyogSWYgYW4gRlRQIGNv bm5lY3Rpb24gaXMgb3BlbiAqLworCQlleHRlcm4gaW50IGZ0cF94ZmVybW9kZTsgLyogY2hhbmdl IGl0cyB0cmFuc2ZlciBtb2RlIHRvbyAqLworCQlmdHBfeGZlcm1vZGUgPSB4ZmVybW9kZTsKKwkg ICAgfQkgICAgICAKKyNlbmRpZgkvKiBORVdGVFAgKi8KKyAgICAgICAgICAgIHJldHVybihzdWNj ZXNzID0gMSk7CisKKyNpZm5kZWYgTk9MT0NBTAorICAgICAgICAgIGNhc2UgWFlYX0RJUzogICAg ICAgICAgICAgICAgIC8qIERpc3BsYXkgKi8KKyAgICAgICAgICAgIHJldHVybihkb3hkaXMoMSkp OwkJLyogMSA9PSBLZXJtaXQgKi8KKyNlbmRpZiAvKiBOT0xPQ0FMICovCisKKyAgICAgICAgICBj YXNlIFhZWF9TTE86ICAgICAgICAgICAgICAgICAvKiBTbG93LXN0YXJ0ICovCisgICAgICAgICAg ICByZXR1cm4oc2V0b24oJnNsb3N0YXJ0KSk7CisKKyNpZm5kZWYgTk9TUEwKKyAgICAgICAgICBj YXNlIFhZWF9DUkM6ICAgICAgICAgICAgICAgICAvKiBDUkMgKi8KKyAgICAgICAgICAgIHJldHVy bihzZXRvbigmZG9jcmMpKTsKKyNlbmRpZiAvKiBOT1NQTCAqLworCisgICAgICAgICAgY2FzZSBY WVhfQkVMOiAgICAgICAgICAgICAgICAgLyogQmVsbCAqLworICAgICAgICAgICAgcmV0dXJuKHNl dG9uKCZ4ZnJiZWwpKTsKKworI2lmZGVmIFBJUEVTRU5ECisgICAgICAgICAgY2FzZSBYWVhfUElQ OiAgICAgICAgICAgICAgICAgLyogUGlwZXMgKi8KKyNpZm5kZWYgTk9QVVNICisgICAgICAgICAg ICBpZiAobm9wdXNoKSB7CisjZW5kaWYgLyogTk9QVVNIICovCisgICAgICAgICAgICAgICAgcHJp bnRmKCJTb3JyeSwgYWNjZXNzIHRvIHBpcGVzIGlzIGRpc2FibGVkXG4iKTsKKyAgICAgICAgICAg ICAgICByZXR1cm4oLTkpOworI2lmbmRlZiBOT1BVU0gKKyAgICAgICAgICAgIH0gZWxzZQorI2Vu ZGlmIC8qIE5PUFVTSCAqLworICAgICAgICAgICAgICByZXR1cm4oc2V0b24oJnVzZXBpcGVzKSk7 CisjZW5kaWYgLyogUElQRVNFTkQgKi8KKworICAgICAgICAgIGNhc2UgWFlYX0lOVDogICAgICAg ICAgICAgICAgIC8qIEludGVycnVwdGlvbiAqLworICAgICAgICAgICAgcmV0dXJuKHNldG9uKCZ4 ZnJpbnQpKTsKKworICAgICAgICAgIGNhc2UgWFlYX1hMQToKKyAgICAgICAgICAgIHJldHVybihz ZXRvbigmeGZyeGxhKSk7ICAgICAvKiBUcmFuc2xhdGlvbiAqLworCisgICAgICAgICAgY2FzZSBY WVhfTVNHOiB7CisgICAgICAgICAgICAgIGV4dGVybiBjaGFyICogeGZybXNnOworICAgICAgICAg ICAgICBpZiAoKHggPSBjbXR4dCgiUHJvbXB0IHN0cmluZyIsIiIsJnMseHhzdHJpbmcpKSA8IDAp CisgICAgICAgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICAgICAgICBpZiAoISpzKSBzID0g TlVMTDsKKyAgICAgICAgICAgICAgbWFrZXN0cigmeGZybXNnLHMpOworICAgICAgICAgICAgICBy ZXR1cm4oc3VjY2VzcyA9IDEpOworCisJICB9CisJICBjYXNlIFhZWF9SUFQ6IHsKKwkgICAgICBl eHRlcm4gaW50IHdoZXJlZmxnOworCSAgICAgIHJldHVybihzZXRvbigmd2hlcmVmbGcpKTsKKyAg ICAgICAgICB9CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybigtMik7Cisg ICAgICAgIH0KKyNlbmRpZiAvKiBOT1hGRVIgKi8KKyAgICB9CisKKyAgICBzd2l0Y2ggKHh4KSB7 CisKKyNpZm5kZWYgTk9YTUlUCisgICAgICBjYXNlIFhZWE1JVDogICAgICAgICAgICAgICAgICAg ICAgLyogU0VUIFRSQU5TTUlUICovCisgICAgICAgIHJldHVybihzZXR4bWl0KCkpOworI2VuZGlm IC8qIE5PWE1JVCAqLworCisjaWZuZGVmIE5PWEZFUgorI2lmbmRlZiBOT0NTRVRTCisgICAgICBj YXNlIFhZVU5DUzogICAgICAgICAgICAgICAgICAgICAgLyogVU5LTk9XTi1DSEFSQUNURVItU0VU ICovCisgICAgICAgIGlmICgoeSA9IGNta2V5KGlmZHRhYiwyLCIiLCJkaXNjYXJkIix4eHN0cmlu ZykpIDwgMCkgcmV0dXJuKHkpOworICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVy bih4KTsKKyAgICAgICAgdW5rY3MgPSB5OworICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwor I2VuZGlmIC8qIE5PQ1NFVFMgKi8KKyNlbmRpZiAvKiBOT1hGRVIgKi8KKworI2lmbmRlZiBOT1BV U0gKKyNpZmRlZiBVTklYCisgICAgICBjYXNlIFhZV0lMRDogICAgICAgICAgICAgICAgICAgICAg LyogV0lMRENBUkQtRVhQQU5TSU9OICovCisgICAgICAgIGlmICgoeSA9IGNta2V5KHdpbGR0YWIs bndpbGQsCisgICAgICAgICAgICAgICAgICAgICAgICJXaWxkY2FyZCBleHBhbnNpb24gb3B0aW9u Iiwib24iLHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgIHJldHVybih5KTsKKyAgICAgICAgaWYg KCh6ID0gY21rZXkod2RvdHRhYiwKKyAgICAgICAgICAgICAgICAgICAgICAgMiwKKyAgICAgICAg ICAgICAgICAgICAgICAgIndoZXRoZXIgdG8gbWF0Y2ggZmlsZW5hbWVzIHRoYXQgc3RhcnQgd2l0 aCBcIi5cIiIsCisgICAgICAgICAgICAgICAgICAgICAgICIvbm8tbWF0Y2gtZG90LWZpbGVzIiwK KyAgICAgICAgICAgICAgICAgICAgICAgeHhzdHJpbmcpCisgICAgICAgICAgICAgKSA8IDApCisg ICAgICAgICAgcmV0dXJuKHopOworICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVy bih4KTsKKyAgICAgICAgaWYgKG5vcHVzaCkgeworICAgICAgICAgICAgaWYgKHkgPiAwKSB7Cisg ICAgICAgICAgICAgICAgcHJpbnRmKCJTaGVsbCBleHBhbnNpb24gaXMgZGlzYWJsZWRcbiIpOwor ICAgICAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7CisgICAgICAgICAgICB9CisgICAg ICAgIH0KKwlzd2l0Y2ggKHkpIHsKKwkgIGNhc2UgV0lMRF9PTjoKKwkgICAgd2lsZGVuYSA9IDE7 IAorCSAgICBicmVhazsKKwkgIGNhc2UgV0lMRF9PRkY6CisJICAgIHdpbGRlbmEgPSAwOyAKKwkg ICAgYnJlYWs7CisJICBjYXNlIFdJTERfS0VSOgorCSAgICB3aWxkeHBhbmQgPSAwOyAJCS8qIFRo ZXNlIGFyZSB0aGUgcHJldmlvdXMgKi8KKwkgICAgYnJlYWs7CQkJLyogaGFyZHdpcmVkIHZhbHVl cyAqLworCSAgY2FzZSBXSUxEX1NIRToKKwkgICAgd2lsZHhwYW5kID0gMTsgCisJICAgIGJyZWFr OworCX0KKyAgICAgICAgbWF0Y2hkb3QgPSB6OworICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEp OworI2VuZGlmIC8qIFVOSVggKi8KKyNlbmRpZiAvKiBOT1BVU0ggKi8KKworI2lmbmRlZiBOT1hG RVIKKyAgICAgIGNhc2UgWFlXSU5EOiAgICAgICAgICAgICAgICAgICAgICAvKiBXSU5ET1ctU0xP VFMgKi8KKyAgICAgICAgaWYgKHByb3RvY29sID09IFBST1RPX0spIHsKKyAgICAgICAgICAgIHkg PSBjbW51bSgiV2luZG93IHNpemUgZm9yIEtlcm1pdCBwcm90b2NvbCwgMSB0byAzMiIsCisgICAg ICAgICAgICAgICAgICAgICAgIjEiLCAxMCwgJngsIHh4c3RyaW5nKTsKKyAgICAgICAgICAgIHkg PSBzZXRudW0oJnoseCx5LE1BWFdTKTsgICAvKiA9PSAzMiAqLworICAgICAgICB9CisjaWZkZWYg Q0tfWFlaCisgICAgICAgIGVsc2UgaWYgKHByb3RvY29sID09IFBST1RPX1opIHsKKyAgICAgICAg ICAgIHkgPSBjbW51bSgiV2luZG93IHNpemUgZm9yIFpNT0RFTSBwcm90b2NvbCwgMCB0byA2NTUz NSIsCisgICAgICAgICAgICAgICAgICAgICAgIjAiLCAxMCwgJngsIHh4c3RyaW5nKTsKKyAgICAg ICAgICAgIHkgPSBzZXRudW0oJnoseCx5LDY1NTM1KTsKKyAgICAgICAgfQorI2VuZGlmIC8qIENL X1hZWiAqLworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHkgPSBjbW51bSgiV2luZG93IHNp emUgZm9yIGN1cnJlbnQgcHJvdG9jb2wiLAorICAgICAgICAgICAgICAgICAgICAgICIiLCAxMCwg JngsIHh4c3RyaW5nKTsKKyAgICAgICAgICAgIHkgPSBzZXRudW0oJnoseCx5LDY1NDcyKTsgICAv KiBEb2Vzbid0IG1hdHRlciAtIHdlIHdvbid0IHVzZSBpdCAqLworICAgICAgICB9CisgICAgICAg IGlmICh5IDwgMCkgcmV0dXJuKHkpOworICAgICAgICBpZiAocHJvdG9jb2wgPT0gUFJPVE9fSykg eworICAgICAgICAgICAgaWYgKHogPCAxKQorICAgICAgICAgICAgICB6ID0gMTsKKyAgICAgICAg fQorI2lmZGVmIENLX1hZWgorICAgICAgICBlbHNlIGlmIChwcm90b2NvbCA9PSBQUk9UT19aKSB7 CisgICAgICAgICAgICAvKiBabW9kZW0gd2luZG93aW5nIGlzIGNsb3NlciB0byBLZXJtaXQgcGFj a2V0IGxlbmd0aCAqLworICAgICAgICAgICAgLyogdGhhbiBLZXJtaXQgd2luZG93IHNpemUuICBJ ZiBXaW5kb3cgc2l6ZSBpcyB6ZXJvICAgKi8KKyAgICAgICAgICAgIC8qIGFuIGVuZCBvZiBmcmFt ZSBhbmQgQ1JDIGlzIHNlbnQgb25seSBhdCB0aGUgZW5kIG9mICovCisgICAgICAgICAgICAvKiB0 aGUgZmlsZSAoZGVmYXVsdCkuICBPdGhlcndpc2UsIGFuIEVuZCBvZiBGcmFtZSAgICAqLworICAg ICAgICAgICAgLyogYW5kIENSQyBhcmUgc2VudCBhZnRlciBXaW5kb3cgU2l6ZSBudW1iZXIgb2Yg Ynl0ZXMgKi8KKyAgICAgICAgICAgIGlmICh6IDwgMCkgICAgICAgICAgICAgICAgICAvKiBEaXNh YmxlIHdpbmRvd2luZyAgKi8KKyAgICAgICAgICAgICAgeiA9IDA7CisgICAgICAgIH0gZWxzZSB7 CisgICAgICAgICAgICBwcmludGYoIj9TRVQgV0lORE9XIGRvZXMgbm90IGFwcGx5IHRvICVzIHBy b3RvY29sXG4iLAorICAgICAgICAgICAgICAgICAgIHB0YWJbcHJvdG9jb2xdLnBfbmFtZQorICAg ICAgICAgICAgICAgICAgICk7CisgICAgICAgIH0KKyNlbmRpZiAvKiBDS19YWVogKi8KKworI2lm ZGVmIENPTU1FTlQKKyAgICAgICAgLyogVGhpcyBpcyB0YWtlbiBjYXJlIG9mIGF1dG9tYXRpY2Fs bHkgbm93IGluIHByb3RvY29sIG5lZ290aWF0aW9uICovCisgICAgICAgIGlmIChtYXh0cnkgPCB6 KSB7CisgICAgICAgICAgICBwcmludGYoIj9XaW5kb3cgc2xvdHMgbXVzdCBiZSBsZXNzIHRoYW4g cmV0cnkgbGltaXRcbiIpOworICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKyAgICAg ICAgfQorI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAgaWYgKHByb3RvY29sID09IFBST1RP X0sgJiYgcm1zZmxnKSB7IC8qIFNldCByZW1vdGUgd2luZG93IHNpemUgKi8KKyAgICAgICAgICAg IHdzbG90ciA9IHo7ICAgICAgICAgICAgICAgICAvKiBTZXQgbG9jYWwgd2luZG93IHNpemUgdG9v ICovCisgICAgICAgICAgICBwdGFiW3Byb3RvY29sXS53aW5zaXplID0gd3Nsb3RyOworICAgICAg ICAgICAgc3N0YXRlID0gc2V0Z2VuKCdTJywgIjQwNiIsIGNraXRvYSh6KSwgIiIpOworICAgICAg ICAgICAgcmV0dXJuKChpbnQpIHNzdGF0ZSk7CisgICAgICAgIH0KKyAgICAgICAgd3Nsb3RyID0g ejsgICAgICAgICAgICAgICAgICAgICAvKiBTZXQgcmVxdWVzdGVkIHdpbmRvdyBzaXplIGhlcmUg Ki8KKyAgICAgICAgcHRhYltwcm90b2NvbF0ud2luc2l6ZSA9IHdzbG90cjsgLyogYW5kIGluIHBy b3RvY29sLXNwZWNpZmljIHRhYmxlICovCisgICAgICAgIGlmIChwcm90b2NvbCA9PSBQUk9UT19L KSB7ICAgICAgLyogQW5kIGZvciBLZXJtaXQgb25seS4uLiAqLworICAgICAgICAgICAgc3djYXBy ID0gKHdzbG90ciA+IDEpID8gMSA6IDA7IC8qIHNldCB3aW5kb3cgYml0IGluIGNhcGFzIHdvcmQg Ki8KKyAgICAgICAgICAgIGlmICh3c2xvdHIgPiAxKSB7ICAgICAgICAgICAvKiBXaW5kb3cgc2l6 ZSA+IDE/ICovCisgICAgICAgICAgICAgICAgLyogTWF5YmUgYWRqdXN0IHBhY2tldCBzaXplICov CisgICAgICAgICAgICAgICAgeSA9IGFkanBrbCh1cnBzaXosd3Nsb3RyLGJpZ3Jic2l6KTsKKyAg ICAgICAgICAgICAgICBpZiAoeSAhPSB1cnBzaXopIHsgICAgICAvKiBEaWQgaXQgY2hhbmdlPyAq LworICAgICAgICAgICAgICAgICAgICB1cnBzaXogPSB5OworICAgICAgICAgICAgICAgICAgICBp ZiAobXNnZmxnKQorICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigKKyIgQWRqdXN0aW5nIHJl Y2VpdmUgcGFja2V0LWxlbmd0aCB0byAlZCBmb3IgJWQgd2luZG93IHNsb3RzXG4iLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB1cnBzaXosCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHdzbG90cgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4oc3VjY2VzcyA9 IDEpOworI2VuZGlmIC8qIE5PWEZFUiAqLworICAgIH0KKworICAgIHN3aXRjaCAoeHgpIHsKKwor I2lmbmRlZiBOT1NQTAorICAgICAgY2FzZSBYWU9VVFA6ICAgICAgICAgICAgICAgICAgICAgIC8q IE9VVFBVVCBjb21tYW5kIHBhcmFtZXRlcnMgKi8KKyAgICAgICAgaWYgKCh5ID0gY21rZXkob3V0 cHRhYixub3V0cHRhYiwiT1VUUFVUIGNvbW1hbmQgcGFyYW1ldGVyIiwicGFjaW5nIiwKKyAgICAg ICAgICAgICAgICAgICAgICAgeHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgcmV0dXJuKHkpOwor ICAgICAgICBzd2l0Y2goeSkgeyAgICAgICAgICAgICAgICAgICAgIC8qIFdoaWNoIHBhcmFtZXRl ciAqLworICAgICAgICAgIGNhc2UgT1VUX1BBQzogICAgICAgICAgICAgICAgIC8qIFBBQ0lORyAq LworICAgICAgICAgICAgeSA9IGNtbnVtKCJNaWxsaXNlY29uZHMgdG8gcGF1c2UgYmV0d2VlbiBl YWNoIE9VVFBVVCBjaGFyYWN0ZXIiLAorICAgICAgICAgICAgICAgICAgICAgICIxMDAiLCAxMCwm eCx4eHN0cmluZyk7CisgICAgICAgICAgICB5ID0gc2V0bnVtKCZ6LHgseSwxNjM4Myk7ICAgLyog VmVyaWZ5IGFuZCBnZXQgY29uZmlybWF0aW9uICovCisgICAgICAgICAgICBpZiAoeSA8IDApIHJl dHVybih5KTsKKyAgICAgICAgICAgIGlmICh6IDwgMCkgeiA9IDA7ICAgICAgICAgICAvKiAoc2F2 ZSBzb21lIHNwYWNlKSAqLworICAgICAgICAgICAgcGFjaW5nID0gejsKKyAgICAgICAgICAgIHJl dHVybihzdWNjZXNzID0gMSk7CisgICAgICAgICAgY2FzZSBPVVRfRVNDOiAgICAgICAgICAgICAg ICAgLyogU3BlY2lhbC1lc2NhcGVzICovCisgICAgICAgICAgICByZXR1cm4oc2V0b24oJm91dGVz YykpOworICAgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgIC8qIChzaG91bGRu J3QgaGFwcGVuKSAqLworICAgICAgICAgICAgcmV0dXJuKC0yKTsKKyAgICAgICAgfQorI2VuZGlm IC8qIE5PU1BMICovCisKKyNpZmRlZiBDS19TUEVFRAorICAgICAgY2FzZSBYWVFDVEw6IHsKKyAg ICAgICAgICBzaG9ydCAqcDsKKyAgICAgICAgICBpbnQgeno7CisgICAgICAgICAgaWYgKCh6ID0g Y21rZXkoY3RsdGFiLDIsICJjb250cm9sLWNoYXJhY3RlciBwcmVmaXhpbmcgb3B0aW9uIiwiIgor ICAgICAgICAgICAgICAgICAgICAgICAgICx4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICAgIHJl dHVybih6KTsKKyAgICAgICAgICAvKiBNYWtlIHNwYWNlIGZvciBhIHRlbXBvcmFyeSBjb3B5IG9m IHRoZSBwcmVmaXhpbmcgdGFibGUgKi8KKworICAgICAgICAgIHAgPSAoc2hvcnQgKiltYWxsb2Mo MjU2ICogc2l6ZW9mKHNob3J0KSk7CisgICAgICAgICAgaWYgKCFwKSB7CisgICAgICAgICAgICAg IHByaW50ZigiP0ludGVybmFsIGVycm9yIC0gbWFsbG9jIGZhaWx1cmVcbiIpOworICAgICAgICAg ICAgICByZXR1cm4oLTkpOworICAgICAgICAgIH0KKyAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwg MjU2OyBpKyspIHBbaV0gPSBjdGxwW2ldOyAvKiBDb3B5IGN1cnJlbnQgdGFibGUgKi8KKworICAg ICAgICAgIHN3aXRjaCAoeikgeworICAgICAgICAgICAgY2FzZSAwOiAgICAgICAgICAgICAgICAg ICAgIC8qIFVOUFJFRklYRUQgY29udHJvbCBjaGFyYWN0ZXIgKi8KKyAgICAgICAgICAgIGNhc2Ug MTogICAgICAgICAgICAgICAgICAgICAvKiBQUkVGSVhFRCBjb250cm9sIGNoYXJhY3RlciAqLwor ICAgICAgICAgICAgICB3aGlsZSAoMSkgeyAgICAgICAgICAgICAgIC8qIENvbGxlY3QgYSBsaXN0 IG9mIG51bWJlcnMgKi8KKyNpZm5kZWYgTk9TUEwKKyAgICAgICAgICAgICAgICAgIHhfaWZudW0g PSAxOyAgICAgICAgICAvKiBUdXJuIG9mZiBjb21wbGFpbnRzIGZyb20gZXZhbCgpICovCisjZW5k aWYgLyogTk9TUEwgKi8KKyAgICAgICAgICAgICAgICAgIGlmICgoeCA9IGNtbnVtKCh6ID09IDAp ID8KKyJcbiBOdW1lcmljIEFTQ0lJIHZhbHVlIG9mIGNvbnRyb2wgY2hhcmFjdGVyIHRoYXQgbmVl ZHMgTk8gcHJlZml4LFxuXAorIG9yIHRoZSB3b3JkIFwiYWxsXCIsIG9yIGNhcnJpYWdlIHJldHVy biB0byBjb21wbGV0ZSB0aGUgbGlzdCIgOgorIlxuIE51bWVyaWMgQVNDSUkgdmFsdWUgb2YgY29u dHJvbCBjaGFyYWN0ZXIgdGhhdCBNVVNUIEJFIHByZWZpeGVkLFxuXAorIG9yIHRoZSB3b3JkIFwi YWxsXCIsIG9yIGNhcnJpYWdlIHJldHVybiB0byBjb21wbGV0ZSB0aGUgbGlzdCIsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAiIiwxMCwmeSx4eHN0cmluZworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKSkgPCAwKSB7CisjaWZuZGVmIE5PU1BMCisgICAgICAgICAg ICAgICAgICAgICAgeF9pZm51bSA9IDA7CisjZW5kaWYgLyogTk9TUEwgKi8KKyAgICAgICAgICAg ICAgICAgICAgICBpZiAoeCA9PSAtMykgeworICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo KHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg YnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgIGlm ICh4ID09IC0yKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwKSB7IGZyZWUoKGNo YXIgKilwKTsgcCA9IE5VTEw7IH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEx MCwiU0VUIENPTlRST0wgYXRtYnVmIixhdG1idWYsMCk7CisgICAgICAgICAgICAgICAgICAgICAg ICAgIGlmICghY2tzdHJjbXAoYXRtYnVmLCJhbGwiLDMsMCkgfHwgLyogIkFMTCIgKi8KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICFja3N0cmNtcChhdG1idWYsImFsIiwyLDApIHx8Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhY2tzdHJjbXAoYXRtYnVmLCJhIiwxLDApKSB7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIC8q IEdldCBjb25maXJtYXRpb24gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0 dXJuKHgpOworCQkJICAgICAgcHJlZml4aW5nID0geiA/IFBYX0FMTCA6IFBYX05PTjsKKwkJCSAg ICAgIHNldHByZWZpeChwcmVmaXhpbmcpOworCQkJICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsJLyogTm90IG51bWJlciwgbm90IEFM TCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIj9QbGVhc2Ugc3BlY2lmeSBhIG51bWJlciBvciB0aGUgd29y ZCBBTExcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7 CisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwKSBmcmVlKChjaGFyICopcCk7CisgICAg ICAgICAgICAgICAgICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgICAgICB9CisjaWZuZGVmIE5PU1BMCisgICAgICAgICAgICAgICAgICB4 X2lmbnVtID0gMDsKKyNlbmRpZiAvKiBOT1NQTCAqLworI2lmZGVmIFVOUFJFRklYWkVSTworICAg ICAgICAgICAgICAgICAgenogPSAwOworI2Vsc2UKKyNpZm5kZWYgT1MyCisgICAgICAgICAgICAg ICAgICB6eiA9IDEgLSB6OworI2Vsc2UKKyAgICAgICAgICAgICAgICAgIHp6ID0gMDsgICAgICAg ICAgICAgICAvKiBBbGxvdyAwIChidXQgb25seSBmb3IgWm1vZGVtKSAqLworI2VuZGlmIC8qIE9T MiAqLworI2VuZGlmIC8qIFVOUFJFRklYWkVSTyAqLworCisgICAgICAgICAgICAvKiBwcmludGYo InggPSAlZCwgeSA9ICVkLCB6ID0gJWQsIHp6ID0gJWRcbiIsIHgseSx6LHp6KTsgKi8KKworICAg ICAgICAgICAgICAgICAgaWYgKCh5ID4gIDMxICYmIHkgPCAxMjcpIHx8IC8qIEEgc3BlY2lmaWMg bnVtZXJpYyB2YWx1ZSAqLworICAgICAgICAgICAgICAgICAgICAgICh5ID4gMTU5ICYmIHkgPCAy NTUpIHx8IC8qIENoZWNrIHRoYXQgaXQgaXMgYSB2YWxpZCAqLworICAgICAgICAgICAgICAgICAg ICAgICh5IDwgenopIHx8ICAgICAgIC8qIGNvbnRyb2wgY29kZS4gKi8KKyAgICAgICAgICAgICAg ICAgICAgICAoeSA+IDI1NSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIj9WYWx1 ZXMgYWxsb3dlZCBhcmU6ICVkLTMxLCAxMjctMTU5LCAyNTVcbiIsenopOworICAgICAgICAgICAg ICAgICAgICAgIGlmIChwKSBmcmVlKChjaGFyICopcCk7CisgICAgICAgICAgICAgICAgICAgICAg cmV0dXJuKC05KTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIHggPSB5 ICYgMTI3OyAgICAgICAgICAvKiBHZXQgNy1iaXQgdmFsdWUgKi8KKyAgICAgICAgICAgICAgICAg IGlmICh6ID09IDApIHsgICAgICAgICAvKiBJZiB0aGV5IGFyZSBzYXlpbmcgaXQgaXMgc2FmZS4u LiAqLworICAgICAgICAgICAgICAgICAgICAgIC8qIElmIGZsb3cgY29udHJvbCBpcyBYb24vWG9m ZiAqLworICAgICAgICAgICAgICAgICAgICAgIGlmICgoKGZsb3cgPT0gRkxPX1hPTlgpICYmCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBYT04gJiBYT0ZGIGNoYXJzIG5vdCBzYWZlLiAq LworICAgICAgICAgICAgICAgICAgICAgICAgICAgKHggPT0gWE9OIHx8IHggPT0gWE9GRikpCisg ICAgICAgICAgICAgICAgICAgICAgICAgICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICBp ZiAobXNnZmxnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICJTb3JyeSwgbm90IHdoaWxlIFhvbi9Yb2ZmIGlzIGluIGVm ZmVjdC5cbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocCkgZnJlZSgoY2hhciAq KXApOworICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICAgICAg ICAgICAgICAgIH0KKyNpZmRlZiBUTkNPREUKKyAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlm IChuZXR3b3JrICYmIElTX1RFTE5FVCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg JiYgKHkgPT0gQ1IgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2ln bmVkKSB5ID09ICh1bnNpZ25lZCkgMjU1KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICBp ZiAobXNnZmxnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiU29ycnksIG5v dCBvbiBhIFRFTE5FVCBjb25uZWN0aW9uLlxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAg IGlmIChwKSBmcmVlKChjaGFyICopcCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy bigtOSk7CisgICAgICAgICAgICAgICAgICAgICAgfQorI2VuZGlmIC8qIFROQ09ERSAqLworICAg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgcFt5XSA9IChjaGFyKSB6OyAgICAg IC8qIEFsbCBPSywgc2V0IGZsYWcgKi8KKyAgICAgICAgICAgICAgfSAvKiBFbmQgb2Ygd2hpbGUg bG9vcCAqLworLyoKKyAgR2V0IGhlcmUgb25seSBpZiB0aGV5IGhhdmUgbWFkZSBubyBtaXN0YWtl cy4gIENvcHkgdGVtcG9yYXJ5IHRhYmxlIGJhY2sgdG8KKyAgcGVybWFuZW50IG9uZSwgdGhlbiBm cmVlIHRlbXBvcmFyeSB0YWJsZSBhbmQgcmV0dXJuIHN1Y2Nlc3NmdWxseS4KKyovCisgICAgICAg ICAgICAgIGZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgY3RscFtpXSA9IHBbaV07CisgICAgICAg ICAgICAgIGlmIChwKSBmcmVlKChjaGFyICopcCk7CisgICAgICAgICAgICAgIGlmICh6ID4gMCkg Y2xlYXJycSA9IDA7ICAgLyogMTk5IChzZWUgU0VUIFBSRUZJWElORykgKi8KKyAgICAgICAgICAg ICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg ICAgIHJldHVybigtMik7CisgICAgICAgICAgfQorICAgICAgfQorI2VuZGlmIC8qIENLX1NQRUVE ICovCisgICAgfQorCisgICAgc3dpdGNoICh4eCkgeworCisjaWZuZGVmIE5PWEZFUgorICAgICAg Y2FzZSBYWVJFUFQ6CisgICAgICAgIGlmICgoeSA9IGNta2V5KHJwdHRhYiwyLAorICAgICAgICAg ICAgICAgICAgICAgICAicmVwZWF0LWNvdW50IGNvbXByZXNzaW9uIHBhcmFtZXRlciIsIiIseHhz dHJpbmcpKSA8IDApCisgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICBzd2l0Y2goeSkgewor ICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gc2V0b24oJnJw dGVuYSkpOyAvKiBSRVBFQVQgQ09VTlRTID0gT04sIE9GRiAqLworICAgICAgICAgIGNhc2UgMTog ICAgICAgICAgICAgICAgICAgICAgIC8qIFJFUEVBVCBNSU5JTlVNIG51bWJlciAqLworICAgICAg ICAgICAgcHJpbnRmKCIobm90IGltcGxlbWVudGVkIHlldCwgbm90aGluZyBoYXBwZW5zKVxuIik7 CisgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICAgIGNhc2UgMjogICAgICAgICAgICAg ICAgICAgICAgIC8qIFJFUEVBVCBQUkVGSVggY2hhciAqLworICAgICAgICAgICAgaWYgKCh4ID0g Y21udW0oIkFTQ0lJIHZhbHVlIiwiIiwxMCwmeix4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICAg ICAgcmV0dXJuKHgpOworICAgICAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4o eCk7CisgICAgICAgICAgICBpZiAoKHogPiAzMiAmJiB6IDwgNjMpIHx8ICh6ID4gOTUgJiYgeiA8 IDEyNykpIHsKKyAgICAgICAgICAgICAgICBpZiAoeSA9PSAxKSBycHRtaW4gPSAoQ0hBUikgejsg ZWxzZSBteXJwdHEgPSAoQ0hBUikgejsKKyAgICAgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9 IDEpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIj9JbGxl Z2FsIHZhbHVlIGZvciBwcmVmaXggY2hhcmFjdGVyXG4iKTsKKyAgICAgICAgICAgICAgICByZXR1 cm4oLTkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisjZW5kaWYgLyogTk9YRkVSICovCisK KyNpZm5kZWYgTk9TUEwKKyAgICAgIGNhc2UgWFlBTFJNOiB7CisjaWZuZGVmIENPTU1FTlQKKyAg ICAgICAgICBpbnQgeXk7CisgICAgICAgICAgbG9uZyB6ejsKKyAgICAgICAgICB6eiA9IC0xTDsK KyAgICAgICAgICB5eSA9IHhfaWZudW07CisgICAgICAgICAgeF9pZm51bSA9IDE7ICAgICAgICAg ICAgICAgICAgLyogVHVybiBvZmYgaW50ZXJuYWwgY29tcGxhaW50cyAqLworICAgICAgICAgIHkg PSBjbW51bSgiU2Vjb25kcyBmcm9tIG5vdywgb3IgdGltZSBvZiBkYXkgYXMgaGg6bW06c3MiLAor ICAgICAgICAgICAgICAgICAgICAiMCIgLDEwLCAmeCwgeHhzdHJpbmcpOworICAgICAgICAgIHhf aWZudW0gPSB5eTsKKyAgICAgICAgICBpZiAoeSA8IDApIHsKKyAgICAgICAgICAgICAgaWYgKHkg PT0gLTIpIHsgICAgICAgICAgICAvKiBJbnZhbGlkIG51bWJlciBvciBleHByZXNzaW9uICovCisg ICAgICAgICAgICAgICAgICB6eiA9IHRvZDJzZWMoYXRtYnVmKTsgLyogQ29udmVydCB0byBzZWNz IHNpbmNlIG1pZG5pZ2h0ICovCisgICAgICAgICAgICAgICAgICBpZiAoenogPCAwTCkgeworICAg ICAgICAgICAgICAgICAgICAgIHByaW50ZigiP051bWJlciwgZXhwcmVzc2lvbiwgb3IgdGltZSBv ZiBkYXkgcmVxdWlyZWRcbiIpOworICAgICAgICAgICAgICAgICAgICAgIHJldHVybigtOSk7Cisg ICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgIGNoYXIgbm93 WzMyXTsgICAgIC8qIEN1cnJlbnQgdGltZSAqLworICAgICAgICAgICAgICAgICAgICAgIGNoYXIg KnA7CisgICAgICAgICAgICAgICAgICAgICAgbG9uZyB0bm93OworICAgICAgICAgICAgICAgICAg ICAgIHAgPSBub3c7CisgICAgICAgICAgICAgICAgICAgICAgenRpbWUoJnApOworICAgICAgICAg ICAgICAgICAgICAgIHRub3cgPSBhdG9sKHArMTEpICogMzYwMEwgKworICAgICAgICAgICAgICAg ICAgICAgICAgYXRvbChwKzE0KSAqIDYwTCArIGF0b2wocCsxNyk7CisgICAgICAgICAgICAgICAg ICAgICAgaWYgKHp6IDwgdG5vdykgICAgLyogVXNlcidzIHRpbWUgYmVmb3JlIG5vdyAqLworICAg ICAgICAgICAgICAgICAgICAgICAgenogKz0gODY0MDBMOyAgIC8qIFNvIG1ha2UgaXQgdG9tb3Jy b3cgKi8KKyAgICAgICAgICAgICAgICAgICAgICB6eiAtPSB0bm93OyAgICAgICAvKiBTZWNvbmRz IGZyb20gbm93LiAqLworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9IGVsc2UK KyAgICAgICAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgICAgfQorICAgICAgICAgIGlmICh4 IDwgMCkgeworICAgICAgICAgICAgICBwcmludGYoIj9BbGFybSB0aW1lIGlzIGluIHRoZSBwYXN0 LlxuIik7CisgICAgICAgICAgICAgIHJldHVybigtOSk7CisgICAgICAgICAgfQorICAgICAgICAg IGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkpOworICAgICAgICAgIGlmICh6eiA+IC0x TCkgeyAgICAgICAgICAgICAgIC8qIFRpbWUgb2YgZGF5IGdpdmVuPyAqLworICAgICAgICAgICAg ICB4ID0geno7CisgICAgICAgICAgICAgIGlmICh6eiAhPSAobG9uZykgeCkgeworICAgICAgICAg ICAgICAgICAgcHJpbnRmKAorIlNvcnJ5LCBhcml0aG1ldGljIG92ZXJmbG93IC0gaGg6bW06c3Mg bm90IHVzYWJsZSBvbiB0aGlzIHBsYXRmb3JtLlxuIgorICAgICAgICAgICAgICAgICAgICAgICAg ICk7CisgICAgICAgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICAgICAgICB9CisgICAg ICAgICAgfQorICAgICAgICAgIHJldHVybihzZXRhbGFybSgobG9uZyl4KSk7CisgICAgICB9Cisj ZWxzZQorLyoKKyAgVGhpcyBpcyB0byBhbGxvdyBsb25nIHZhbHVlcyB3aGVyZSBpbnQgYW5kIGxv bmcgYXJlIG5vdCB0aGUgc2FtZSwgZS5nLgorICBvbiAxNi1iaXQgc3lzdGVtcy4gIEJ1dCBzb21l dGhpbmcgaXMgd3Jvbmcgd2l0aCBpdC4KKyovCisgICAgICAgIGlmICgoeSA9IGNtdHh0KCJzZWNv bmRzIGZyb20gbm93IiwgIjAiLCAmcywgeHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgcmV0dXJu KHkpOworICAgICAgICBpZiAocmRpZ2l0cyhzKSkgeworICAgICAgICAgICAgcmV0dXJuKHNldGFs YXJtKGF0b2wocykpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHByaW50ZigiJXMg LSBub3QgYSBudW1iZXJcbiIscyk7CisgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICB9 CisjZW5kaWYgLyogQ09NTUVOVCAqLworI2VuZGlmIC8qIE5PU1BMICovCisKKyNpZm5kZWYgTk9Y RkVSCisgICAgICBjYXNlIFhZUFJPVE86CisgICAgICAgIHJldHVybihzZXRwcm90bygpKTsKKyNl bmRpZiAvKiBOT1hGRVIgKi8KKworLyoKKyAgQy1LZXJtaXQgdW5wcmVmaXhlcyBjb250cm9sIGNo YXJhY3RlcnMgYXV0b21hdGljYWxseSBvbiBuZXR3b3JrIGNvbm5lY3Rpb25zCisgIGlmIENMRUFS LUNIQU5ORUwgaXMgT04sIHdoaWNoIGl0IGlzIGJ5IGRlZmF1bHQuICBCdXQgbm90IGFsbCBuZXR3 b3JrCisgIGNvbm5lY3Rpb25zIGFyZSB0cmFuc3BhcmVudCB0byBhbGwgY29udHJvbCBjaGFyYWN0 ZXJzLiAgRm9yIGV4YW1wbGUsIHRoZQorICBERUMtMjAsIGV2ZW4gd2hlbiB5b3UgVEVMTkVUIHRv IGl0LCBpcyBzZW5zaXRpdmUgdG8gQ3RybC1PIGFuZCBDdHJsLVQuCisgIElmIHlvdSB0ZWxsIEMt S2VybWl0IHRvIFNFVCBDT05UUk9MIFBSRUZJWCAxNSBhbmQvb3IgMjAsIGl0IGRvZXNuJ3QgaGVs cAorICBiZWNhdXNlIENMRUFSLUNIQU5ORUwgaXMgc3RpbGwgaW4gZWZmZWN0LiAgSWYgdGhlIHVz ZXIgZ29lcyB0byB0aGUgdHJvdWJsZQorICB0byBzZXQgdXAgc29tZSBwcmVmaXhpbmcsIHRoZW4g S2VybWl0IHNob3VsZCBkbyB3aGF0IHRoZSB1c2VyIHNhaWQuICBJbgorICBDLUtlcm1pdCA3LjEg QWxwaGEuMDMgd2UgY2hhbmdlIHRoZSBjb2RlIHRvIHNldCBjbGVhcnJxIHRvIDAgaWYgdGhlIHVz ZXIKKyAgZ2l2ZXMgYSBTRVQgUFJFRklYSU5HIG9yIFNFVCBDT05UUk9MIFBSRUZJWCBjb21tYW5k LgorKi8KKworI2lmZGVmIENLX1NQRUVECisgICAgICBjYXNlIFhZUFJFRklYOiB7CisjaWZkZWYg Q09NTUVOVAorICAgICAgICAgIGV4dGVybiBpbnQgY2xlYXJycTsKKyNlbmRpZiAvKiBDT01NRU5U ICovCisgICAgICAgICAgaWYgKCh6ID0gY21rZXkocGZ4dGFiLCA0LCAiY29udHJvbC1jaGFyYWN0 ZXIgcHJlZml4aW5nIG9wdGlvbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIiIsIHh4c3Ry aW5nKSkgPCAwKQorICAgICAgICAgICAgcmV0dXJuKHopOworICAgICAgICAgIGlmICgoeCA9IGNt Y2ZtKCkpIDwgMCkgcmV0dXJuKHgpOworICAgICAgICAgIGNsZWFycnEgPSAwOyAgICAgICAgICAg ICAgICAgIC8qIDE5OSAqLworICAgICAgICAgIHNldHByZWZpeCh6KTsKKyNpZmRlZiBDT01NRU5U CisgICAgICAgICAgaWYgKGhpbnRzICYmICh6ID09IFBYX0FMTCB8fCB6ID09IFBYX0NBVSkgJiYg Y2xlYXJycSkgeworICAgICAgICBwcmludGYoIkhpbnQ6IFVzZSBTRVQgQ0xFQVItQ0hBTk5FTCBP RkYgdG8gZGlzYWJsZSBuZWdvdGlhdGlvbiBvZlxuIik7CisgICAgICAgIHByaW50ZigiICAgICAg U0VUIFBSRUZJWElORyBOT05FIGR1cmluZyBmaWxlIHRyYW5zZmVycyBvbiByZWxpYWJsZVxuIik7 CisgICAgICAgIHByaW50ZigiICAgICAgY29ubmVjdGlvbnMuXG4iKTsKKyAgICAgICAgICB9Cisj ZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisgICAg ICB9CisjZW5kaWYgLyogQ0tfU1BFRUQgKi8KKworI2lmbmRlZiBOT1NQTAorICAgICAgY2FzZSBY WUxPR0lOOgorICAgICAgICBpZiAoKHogPSBjbWtleShsb2dpbnRhYiwgMywgInZhbHVlIGZvciBs b2dpbiBzY3JpcHQiLCJ1c2VyaWQiLAorICAgICAgICAgICAgICAgICAgICAgICB4eHN0cmluZykp IDwgMCkKKyAgICAgICAgICByZXR1cm4oeik7CisgICAgICAgIHggPSBjbWRncXVvKCk7CisgICAg ICAgIGlmICh6ID09IExPR0lfUFNXKQorICAgICAgICAgIGNtZHNxdW8oMCk7CisgICAgICAgIGlm ICgoeSA9IGNtdHh0KCJ0ZXh0IiwiIiwgJnMsIE5VTEwpKSA8IDApIHsKKyAgICAgICAgICAgIGNt ZHNxdW8oeCk7CisgICAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgIH0KKyAgICAgICAgY21k c3F1byh4KTsKKyNpZmRlZiBJS1NECisgICAgICAgIGlmIChpbnNlcnZlcikKKyAgICAgICAgICBy ZXR1cm4oc3VjY2VzcyA9IDApOworI2VuZGlmIC8qIElLU0QgKi8KKyAgICAgICAgcyA9IGJyc3Ry aXAocyk7CisgICAgICAgIGlmICgoaW50KXN0cmxlbihzKSA+IDYzKSB7CisgICAgICAgICAgICBw cmludGYoIlNvcnJ5LCB0b28gbG9uZ1xuIik7CisgICAgICAgICAgICByZXR1cm4oLTkpOworICAg ICAgICB9CisgICAgICAgIHN3aXRjaCh6KSB7CisgICAgICAgICAgY2FzZSBMT0dJX1VJRDoKKyAg ICAgICAgICAgIGNrc3RybmNweSh1aWRidWYscyxVSURCVUZMRU4pOworICAgICAgICAgICAgc2xf dWlkX3NhdmVkID0gMDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgTE9HSV9Q U1c6CisgICAgICAgICAgICBja3N0cm5jcHkocHdidWYscyxQV0JVRkwpOworICAgICAgICAgICAg aWYgKHB3YnVmWzBdKSB7CisgICAgICAgICAgICAgICAgcHdmbGcgPSAxOworI2lmZGVmIE9TMgor ICAgICAgICAgICAgICAgIHB3Y3J5cHQgPSAxOworI2Vsc2UgLyogT1MyICovCisgICAgICAgICAg ICAgICAgcHdjcnlwdCA9IDA7CisjZW5kaWYgLyogT1MyICovCisgICAgICAgICAgICB9CisgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIExPR0lfUFJNOgorICAgICAgICAgICAgY2tz dHJuY3B5KHBybWJ1ZixzLFBXQlVGTCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuKHN1Y2Nl c3MgPSAxKTsKKyNlbmRpZiAvKiBOT1NQTCAqLworICAgIH0KKworICAgIHN3aXRjaCAoeHgpIHsK KworICAgICAgY2FzZSBYWVNUQVJUVVA6CisgICAgICAgIGlmICgoeSA9IGNta2V5KGlmZHRhYiwy LCIiLCJkaXNjYXJkIix4eHN0cmluZykpIDwgMCkgcmV0dXJuKHkpOworICAgICAgICBpZiAoKHgg PSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKKyAgICAgICAgRGVsZXRlU3RhcnR1cEZpbGUgPSAo eSAhPSAwKSA/IDAgOiAxOworICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworCisgICAgICBj YXNlIFhZVE1QRElSOgorICAgICAgICB4ID0gY21kaXIoIk5hbWUgb2YgdGVtcG9yYXJ5IGRpcmVj dG9yeSIsIiIsJnMseHhzdHJpbmcpOworICAgICAgICBpZiAoeCA9PSAtMykKKyAgICAgICAgICBz ID0gIiI7CisgICAgICAgIGVsc2UgaWYgKHggPCAwKQorICAgICAgICAgIHJldHVybih4KTsKKyAg ICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7CisgICAgICAgIG1ha2VzdHIo JnRlbXBkaXIscyk7CisgICAgICAgIHJldHVybih0ZW1wZGlyID8gMSA6IDApOworCisjaWZuZGVm IE5PWEZFUgorICAgICAgY2FzZSBYWURFU1Q6ICAgICAgICAgICAgICAgICAgICAgIC8qIERFU1RJ TkFUSU9OICovCisgICAgICAgIHJldHVybihzZXRkZXN0KCkpOworI2VuZGlmIC8qIE5PWEZFUiAq LworCisjaWZuZGVmIE5PUFVTSAorI2lmbmRlZiBOT0ZSSUxMUworCisvKiBFZGl0b3IsIEJyb3dz ZXIsIGFuZCBGVFAgQ2xpZW50ICovCisKKyAgICAgIGNhc2UgWFlFRElUOiAgICAgICAgICAgICAg ICAgICAgICAvKiBFRElUT1IgKi8KKyNpZmRlZiBJS1NECisgICAgICAgIGlmIChpbnNlcnZlcikg eworICAgICAgICAgICAgcHJpbnRmKCI/U29ycnksIGNvbW1hbmQgZGlzYWJsZWQuXHJcbiIpOwor ICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKyAgICAgICAgfQorI2VuZGlmIC8qIElL U0QgKi8KKyNpZmRlZiBDS19BUEMKKyAgICAgICAgLyogRG9uJ3QgbGV0IHRoaXMgYmUgc2V0IHJl bW90ZWx5ICovCisgICAgICAgIGlmIChhcGNhY3RpdmUgPT0gQVBDX0xPQ0FMIHx8CisgICAgICAg ICAgICAoYXBjYWN0aXZlID09IEFQQ19SRU1PVEUgJiYgIShhcGNzdGF0dXMgJiBBUENfVU5DSCkp KQorICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7CisjZW5kaWYgLyogQ0tfQVBDICovCisK KyNpZmRlZiBPUzJPUlVOSVgKKyAgICAgICAgeworICAgICAgICAgICAgY2hhciAqcCA9IGdldGVu digiUEFUSCIpOworICAgICAgICAgICAgY2hhciAqZTsKKyAgICAgICAgICAgIGUgPSBlZGl0b3Jb MF0gPyAoY2hhciAqKSBlZGl0b3IgOiBnZXRlbnYoIkVESVRPUiIpOworICAgICAgICAgICAgaWYg KCFlKSBlID0gIiI7CisgICAgICAgICAgICBpZiAocCkKKyAgICAgICAgICAgICAgeCA9IGNtaWZp cCgiTmFtZSBvZiBwcmVmZXJyZWQgZWRpdG9yIixlLCZzLCZ5LDAscCx4eHN0cmluZyk7CisgICAg ICAgICAgICBlbHNlCisgICAgICAgICAgICAgIHggPSBjbWlmaSgiRnVsbCBwYXRoIG9mIHByZWZl cnJlZCBlZGl0b3IiLGUsJnMsJnkseHhzdHJpbmcpOworICAgICAgICAgICAgaWYgKHggPCAwICYm IHggIT0gLTMpCisgICAgICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgfQorI2Vsc2UKKyNp ZmRlZiBWTVMKKyAgICAgICAgaWYgKCh5ID0gY210eHQoIkRDTCBjb21tYW5kIGZvciBlZGl0aW5n IiwgImVkaXQiLCAmcywgTlVMTCkpIDwgMCkgeworICAgICAgICAgICAgaWYgKHggIT0gLTMpCisg ICAgICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgaWYgKCh4 ID0gY21pZmkoIkZ1bGwgcGF0aCBvZiBwcmVmZXJyZWQgZWRpdG9yIiwiIiwmcywmeSx4eHN0cmlu ZykpPDApIHsKKyAgICAgICAgICAgIGlmICh4ICE9IC0zKQorICAgICAgICAgICAgICByZXR1cm4o eCk7CisgICAgICAgIH0KKyNlbmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBPUzJPUlVOSVggKi8K KyNpZmRlZiBWTVMKKyAgICAgICAgY2tzdHJuY3B5KGVkaXRvcixzLENLTUFYUEFUSCk7CisgICAg ICAgIGVkaXRvcHRzWzBdID0gTlVMOworI2Vsc2UKKyAgICAgICAgaWYgKHkgIT0gMCkgeworICAg ICAgICAgICAgcHJpbnRmKCI/QSBzaW5nbGUgZmlsZSBwbGVhc2VcbiIpOworICAgICAgICAgICAg cmV0dXJuKC0yKTsKKyAgICAgICAgfQorICAgICAgICBja3N0cm5jcHkobGluZSxzLExJTkJVRlNJ Wik7CisgICAgICAgIGlmICgoeCA9IGNtdHh0KCJlZGl0b3IgY29tbWFuZC1saW5lIG9wdGlvbnMi LCIiLCZzLE5VTEwpKSA8IDApCisgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICBja3N0cm5j cHkodG1wYnVmLHMsVE1QQlVGU0laKTsKKyAgICAgICAgaWYgKCh6ID0gY21jZm0oKSkgPCAwKSBy ZXR1cm4oeik7CisgICAgICAgIGlmIChsaW5lWzBdKSB7CisgICAgICAgICAgICB6Zm5xZnAobGlu ZSxDS01BWFBBVEgsZWRpdG9yKTsKKyAgICAgICAgICAgIGNrc3RybmNweShlZGl0b3B0cyx0bXBi dWYsMTI4KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGVkaXRvclswXSA9IE5VTDsK KyAgICAgICAgICAgIGVkaXRvcHRzWzBdID0gTlVMOworICAgICAgICB9CisjZW5kaWYgLyogVk1T ICovCisgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisKKyNpZm5kZWYgTk9GVFAKKyNpZm5k ZWYgU1lTRlRQCisjaWZkZWYgVENQU09DS0VUCisgICAgICBjYXNlIFhZRlRQWDoKKyAgICAgICAg cmV0dXJuKGRvc2V0ZnRwKCkpOyAgICAgICAgICAgICAvKiBTRVQgRlRQICovCisjZW5kaWYgLyog VENQU09DS0VUICovCisjZW5kaWYgLyogU1lTRlRQICovCisjZW5kaWYgLyogTk9GVFAgKi8KKwor I2lmZGVmIEJST1dTRVIKKyNpZm5kZWYgTk9GVFAKKyNpZmRlZiBTWVNGVFAKKyAgICAgIGNhc2Ug WFlGVFA6ICAgICAgICAgICAgICAgICAgICAgICAvKiBTRVQgRlRQLUNMSUVOVCAqLworI2VuZGlm IC8qIFNZU0ZUUCAqLworI2VuZGlmIC8qIE5PRlRQICovCisgICAgICBjYXNlIFhZQlJPV1NFOiAg ICAgICAgICAgICAgICAgICAgLyogU0VUIEJST1dTRVIgKi8KKyAgICAgICAgeworICAgICAgICAg ICAgY2hhciAqcCA9IGdldGVudigiUEFUSCIpOworICAgICAgICAgICAgY2hhciAqYXBwID0gKGNo YXIgKikgYnJvd3NlciwgKm9wdHMgPSAoY2hhciAqKSBicm93c29wdHM7CisjaWZuZGVmIE5PRlRQ CisjaWZkZWYgU1lTRlRQCisgICAgICAgICAgICBleHRlcm4gY2hhciBmdHBhcHBbXSwgZnRwb3B0 c1tdOworICAgICAgICAgICAgaWYgKHh4ID09IFhZRlRQKSB7CisgICAgICAgICAgICAgICAgYXBw ID0gKGNoYXIgKilmdHBhcHA7CisgICAgICAgICAgICAgICAgb3B0cyA9IChjaGFyICopZnRwb3B0 czsKKyAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBTWVNGVFAgKi8KKyNlbmRpZiAvKiBOT0ZUUCAq LworI2lmZGVmIElLU0QKKyAgICAgICAgICAgIGlmIChpbnNlcnZlcikgeworICAgICAgICAgICAg ICAgIHByaW50ZigiP1NvcnJ5LCBjb21tYW5kIGRpc2FibGVkLlxyXG4iKTsKKyAgICAgICAgICAg ICAgICByZXR1cm4oc3VjY2VzcyA9IDApOworICAgICAgICAgICAgfQorI2VuZGlmIC8qIElLU0Qg Ki8KKyNpZmRlZiBDS19BUEMKKyAgICAgICAgICAgIC8qIERvbid0IGxldCB0aGlzIGJlIHNldCBy ZW1vdGVseSAqLworICAgICAgICAgICAgaWYgKGFwY2FjdGl2ZSA9PSBBUENfTE9DQUwgfHwKKyAg ICAgICAgICAgICAgICAoYXBjYWN0aXZlID09IEFQQ19SRU1PVEUgJiYgIShhcGNzdGF0dXMgJiBB UENfVU5DSCkpKQorICAgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOworI2VuZGlmIC8q IENLX0FQQyAqLworI2lmZGVmIE9TMk9SVU5JWAorICAgICAgICAgICAgaWYgKHApCisgICAgICAg ICAgICAgIHggPSBjbWlmaXAoeHggPT0gWFlCUk9XU0UgPworICAgICAgICAgICAgICAgICAgICAg ICAgICJOYW1lIG9mIHByZWZlcnJlZCBicm93c2VyIiA6CisgICAgICAgICAgICAgICAgICAgICAg ICAgIk5hbWUgb2YgcHJlZmVycmVkIGZ0cCBjbGllbnQiLAorI2lmZGVmIE9TMgorICAgICAgICAg ICAgICAgICAgICAgICAgIHh4ID09IFhZRlRQID8gImZ0cC5leGUiIDogIiIKKyNlbHNlCisgICAg ICAgICAgICAgICAgICAgICAgICAgeHggPT0gWFlGVFAgPyAiZnRwIiA6ICIiCisjZW5kaWYgLyog T1MyICovCisgICAgICAgICAgICAgICAgICAgICAgICAgLCZzLCZ5LDAscCx4eHN0cmluZworICAg ICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg IHggPSBjbWlmaSh4eCA9PSBYWUJST1dTRSA/CisgICAgICAgICAgICAgICAgICAgICAgICAiRnVs bCBwYXRoIG9mIHByZWZlcnJlZCBicm93c2VyIiA6CisgICAgICAgICAgICAgICAgICAgICAgICAi RnVsbCBwYXRoIG9mIHByZWZlcnJlZCBmdHAgY2xpZW50IiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICIiLCZzLCZ5LHh4c3RyaW5nCisgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAg ICAgICAgaWYgKHggPCAwICYmIHggIT0gLTMpCisgICAgICAgICAgICAgIHJldHVybih4KTsKKyNl bHNlCisjaWZkZWYgVk1TCisgICAgICAgICAgICBpZiAoKHggPSBjbXR4dCgiRENMIGNvbW1hbmQg dG8gc3RhcnQgeW91ciBwcmVmZXJyZWQgV2ViIGJyb3dzZXIiLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgIiIsICZzLCBOVUxMKSkgPCAwKSB7CisgICAgICAgICAgICAgICAgaWYgKHggIT0g LTMpCisgICAgICAgICAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgICAgICB9CisjZWxzZQor ICAgICAgICAgICAgaWYgKCh4ID0gY21pZmkoIkZ1bGwgcGF0aCBvZiBwcmVmZXJyZWQgYnJvd3Nl ciIsIiIsJnMsJnkseHhzdHJpbmcpCisgICAgICAgICAgICAgICAgICkgPCAwKSB7CisgICAgICAg ICAgICAgICAgaWYgKHggIT0gLTMpCisgICAgICAgICAgICAgICAgICByZXR1cm4oeCk7CisgICAg ICAgICAgICB9CisjZW5kaWYgLyogVk1TICovCisjZW5kaWYgLyogT1MyT1JVTklYICovCisjaWZk ZWYgVk1TCisgICAgICAgICAgICBja3N0cm5jcHkoYXBwLHMsQ0tNQVhQQVRIKTsKKyAgICAgICAg ICAgICpvcHRzID0gTlVMOworI2Vsc2UKKyAgICAgICAgICAgIGlmICh5ICE9IDApIHsKKyAgICAg ICAgICAgICAgICBwcmludGYoIj9BIHNpbmdsZSBmaWxlIHBsZWFzZVxuIik7CisgICAgICAgICAg ICAgICAgcmV0dXJuKC0yKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNrc3RybmNweShs aW5lLHMsTElOQlVGU0laKTsKKyAgICAgICAgICAgIGlmICgoeCA9IGNtdHh0KHh4ID09IFhZQlJP V1NFID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJicm93c2VyIGNvbW1hbmQtbGluZSBv cHRpb25zIiA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAiZnRwIGNsaWVudCBjb21tYW5k LWxpbmUgb3B0aW9ucyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiIiwmcyxOVUxMKQor ICAgICAgICAgICAgICAgICApIDwgMCkKKyAgICAgICAgICAgICAgcmV0dXJuKHgpOworICAgICAg ICAgICAgY2tzdHJuY3B5KHRtcGJ1ZixzLFRNUEJVRlNJWik7CisgICAgICAgICAgICBpZiAoKHog PSBjbWNmbSgpKSA8IDApIHJldHVybih6KTsKKyAgICAgICAgICAgIGlmIChsaW5lWzBdKSB7Cisg ICAgICAgICAgICAgICAgemZucWZwKGxpbmUsQ0tNQVhQQVRILGFwcCk7CisgICAgICAgICAgICAg ICAgY2tzdHJuY3B5KG9wdHMsIHRtcGJ1ZiwgMTI4KTsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg ICAgICAgICAgICAgICAgKmFwcCA9IE5VTDsKKyAgICAgICAgICAgICAgICAqb3B0cyA9IE5VTDsK KyAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBWTVMgKi8KKyAgICAgICAgICAgIHJldHVybihzdWNj ZXNzID0gMSk7CisgICAgICAgIH0KKyNlbmRpZiAvKiBCUk9XU0VSICovCisjZW5kaWYgLyogTk9G UklMTFMgKi8KKyNlbmRpZiAvKiBOT1BVU0ggKi8KKworI2lmZGVmIENLX0NUUkxaCisgICAgICBj YXNlIFhZRU9GOiB7ICAgICAgICAgICAgICAgICAgICAgLyogU0VUIEVPRiAqLworICAgICAgICAg IGV4dGVybiBpbnQgZW9mbWV0aG9kOyBleHRlcm4gc3RydWN0IGtleXRhYiBlb2Z0YWJbXTsKKyAg ICAgICAgICBpZiAoKHggPSBjbWtleShlb2Z0YWIsMywiZW5kLW9mLWZpbGUgZGV0ZWN0aW9uIG1l dGhvZCIsIiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgeHhzdHJpbmcpKSA8IDApCisgICAg ICAgICAgICByZXR1cm4oeCk7CisgICAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKQorICAg ICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICAgIGVvZm1ldGhvZCA9IHg7CisgICAgICAgICAg cmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKyAgICAgIH0KKyNlbmRpZiAvKiBDS19DVFJMWiAqLworCisj aWZkZWYgU0VTTElNSVQKKyAgICAgIGNhc2UgWFlMSU1JVDogeyAgLyogU2Vzc2lvbi1MaW1pdCAo bGVuZ3RoIG9mIHNlc3Npb24gaW4gc2Vjb25kcykgKi8KKyAgICAgICAgICBleHRlcm4gaW50IHNl c2xpbWl0OworI2lmZGVmIE9TMgorICAgICAgICAgIGV4dGVybiBpbnQgZG93bmxvYWRlZDsKKyNl bmRpZiAvKiBPUzIgKi8KKyAgICAgICAgICB5ID0gY21udW0oIk1heGltdW0gbGVuZ3RoIG9mIHNl c3Npb24sIHNlY29uZHMiLCIwIiwxMCwmeCx4eHN0cmluZyk7CisgICAgICAgICAgaWYgKGluc2Vy dmVyICYmCisjaWZkZWYgSUtTRENPTkYKKyAgICAgICAgICAgICAgaWtzZGNmCisjZWxzZQorICAg ICAgICAgICAgICAxCisjZW5kaWYgLyogSUtTRENPTkYgKi8KKyNpZmRlZiBPUzIKKyAgICAgICAg ICAgICAgIHx8IGRvd25sb2FkZWQKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAgICAgICAgKSB7 CisgICAgICAgICAgICAgIGlmICgoeiA9IGNtY2ZtKCkpIDwgMCkKKyAgICAgICAgICAgICAgICBy ZXR1cm4oeik7CisgICAgICAgICAgICAgIHByaW50ZigiP1NvcnJ5LCBjb21tYW5kIGRpc2FibGVk LlxyXG4iKTsKKyAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKyAgICAgICAgICB9 CisgICAgICAgICAgcmV0dXJuKHNldG51bSgmc2VzbGltaXQseCx5LDg2NDAwKSk7CisgICAgICB9 CisjZW5kaWYgLyogU0VTTElNSVQgKi8KKworICAgICAgY2FzZSBYWVJFTFk6IHsgICAgICAgICAg ICAgICAgICAgIC8qIFNFVCBSRUxJQUJMRSAqLworICAgICAgICAgIGlmICgoeCA9IGNta2V5KG9v YXRhYiwzLCIiLCJhdXRvbWF0aWMiLHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgICAgcmV0dXJu KHgpOworICAgICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkpOworICAgICAg ICAgIHJlbGlhYmxlID0geDsKKyAgICAgICAgICBzZXRyZWxpYWJsZSA9ICh4ICE9IFNFVF9BVVRP KTsKKyAgICAgICAgICBkZWJ1ZyhGMTAxLCJTRVQgUkVMSUFCTEUgcmVsaWFibGUiLCIiLHJlbGlh YmxlKTsKKyAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworICAgICAgfQorCisjaWZkZWYg U1RSRUFNSU5HCisgICAgICBjYXNlIFhZU1RSRUFNOiB7ICAgICAgICAgICAgICAgICAgLyogU0VU IFNUUkVBTUlORyAqLworICAgICAgICAgIGV4dGVybiBpbnQgc3RyZWFtcnE7CisgICAgICAgICAg aWYgKCh4ID0gY21rZXkob29hdGFiLDMsIiIsImF1dG9tYXRpYyIseHhzdHJpbmcpKSA8IDApCisg ICAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSBy ZXR1cm4oeSk7CisgICAgICAgICAgc3RyZWFtcnEgPSB4OworICAgICAgICAgIHJldHVybihzdWNj ZXNzID0gMSk7CisgICAgICB9CisjZW5kaWYgLyogU1RSRUFNSU5HICovCisKKyNpZmRlZiBDS1NZ U0xPRworICAgICAgY2FzZSBYWVNZU0w6IHsKKyAgICAgICAgICBpZiAoKHggPSBjbWtleShzeXNs b2d0YWIsbnN5c2xvZywiIiwiIix4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICAgIHJldHVybih4 KTsKKyAgICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsKKyNpZmRlZiBJ S1NECisgICAgICAgICAgaWYgKGluc2VydmVyICYmCisjaWZkZWYgSUtTRENPTkYKKyAgICAgICAg ICAgICAgaWtzZGNmCisjZWxzZQorICAgICAgICAgICAgICAxCisjZW5kaWYgLyogSUtTRENPTkYg Ki8KKyAgICAgICAgICAgICAgKSB7CisgICAgICAgICAgICAgIHByaW50ZigiP1NvcnJ5LCBjb21t YW5kIGRpc2FibGVkLlxuIik7CisgICAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7Cisg ICAgICAgICAgfQorI2VuZGlmIC8qIElLU0QgKi8KKyNpZmRlZiBDS19BUEMKKyAgICAgICAgICAv KiBEb24ndCBsZXQgdGhpcyBiZSBzZXQgcmVtb3RlbHkgKi8KKyAgICAgICAgICBpZiAoYXBjYWN0 aXZlID09IEFQQ19MT0NBTCB8fAorICAgICAgICAgICAgICAoYXBjYWN0aXZlID09IEFQQ19SRU1P VEUgJiYgIShhcGNzdGF0dXMgJiBBUENfVU5DSCkpKQorICAgICAgICAgICAgcmV0dXJuKHN1Y2Nl c3MgPSAwKTsKKyNlbmRpZiAvKiBDS19BUEMgKi8KKyAgICAgICAgICBja3hzeXNsb2cgPSB4Owor ICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisgICAgICB9CisjZW5kaWYgLyogQ0tTWVNM T0cgKi8KKworI2lmZGVmIFRMT0cKKyAgICAgIGNhc2UgWFlUTE9HOiB7ICAgICAgICAgICAgICAg ICAgICAvKiBTRVQgVFJBTlNBQ1RJT04tTE9HICovCisgICAgICAgICAgZXh0ZXJuIGludCB0bG9n c2VwOworICAgICAgICAgIGlmICgoeCA9IGNta2V5KHZidGFiLG52YiwiIiwidmVyYm9zZSIseHhz dHJpbmcpKSA8IDApCisgICAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgICAgaWYgKHggPT0g MCkgeworICAgICAgICAgICAgICBpZiAoKHkgPSBjbXR4dCgiZmllbGQgc2VwYXJhdG9yIiwiLCIs JnMsTlVMTCkpIDwgMCkgcmV0dXJuKHkpOworICAgICAgICAgICAgICBzID0gYnJzdHJpcChzKTsK KyAgICAgICAgICAgICAgaWYgKCpzKSB7CisgICAgICAgICAgICAgICAgICBpZiAoc1sxXSkgewor ICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiP0Egc2luZ2xlIGNoYXJhY3RlciwgcGxlYXNl LlxuIik7CisgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgICAgICAg ICAgIH0gZWxzZSBpZiAoKCpzID49ICcwJyAmJiAqcyA8PSAnOScpIHx8CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICgqcyA+PSAnQScgJiYgKnMgPD0gJ1onKSB8fAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoKnMgPj0gJ2EnICYmICpzIDw9ICd6JykpIHsKKyAgICAgICAgICAg ICAgICAgICAgICBwcmludGYoIj9BIG5vbi1hbHBoYW51bWVyaWMgY2hhcmFjdGVyLCBwbGVhc2Uu XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICAgICAgICAg ICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIHRsb2dzZXAgPSAqczsKKyAgICAgICAgICAg ICAgfQorICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIGlmICgoeSA9IGNtY2ZtKCkp IDwgMCkgcmV0dXJuKHkpOworICAgICAgICAgIH0KKyNpZmRlZiBJS1NECisgICAgICAgICAgaWYg KGluc2VydmVyICYmIGlzZ3Vlc3QpIHsKKyAgICAgICAgICAgICAgcHJpbnRmKCI/U29ycnksIGNv bW1hbmQgZGlzYWJsZWQuXG4iKTsKKyAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsK KyAgICAgICAgICB9CisjZW5kaWYgLyogSUtTRCAqLworI2lmZGVmIENLX0FQQworICAgICAgICAg IC8qIERvbid0IGxldCB0aGlzIGJlIHNldCByZW1vdGVseSAqLworICAgICAgICAgIGlmIChhcGNh Y3RpdmUgPT0gQVBDX0xPQ0FMIHx8CisgICAgICAgICAgICAgIChhcGNhY3RpdmUgPT0gQVBDX1JF TU9URSAmJiAhKGFwY3N0YXR1cyAmIEFQQ19VTkNIKSkpCisgICAgICAgICAgICByZXR1cm4oc3Vj Y2VzcyA9IDApOworI2VuZGlmIC8qIENLX0FQQyAqLworICAgICAgICAgIHRsb2dmbXQgPSB4Owor ICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisgICAgICB9CisjZW5kaWYgLyogVExPRyAq LworCisgICAgICBjYXNlIFhZQ0xFQVI6IHsgICAgICAgICAgICAgICAgICAgLyogU0VUIENMRUFS Q0hBTk5FTCAqLworICAgICAgICAgIGlmICgoeCA9IGNta2V5KG9vYXRhYiwzLCIiLCJhdXRvbWF0 aWMiLHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICAgIGlm ICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkpOworICAgICAgICAgIGNsZWFycnEgPSB4Owor ICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisgICAgICB9CisKKyNpZmRlZiBDS19BVVRI RU5USUNBVElPTgorICAgICAgY2FzZSBYWUFVVEg6IHsgICAgICAgICAgICAgICAgICAgIC8qIFNF VCBBVVRIRU5USUNBVElPTiAqLworI2lmZGVmIENLX0tFUkJFUk9TCisgICAgICAgICAgaW50IGt2 ID0gMDsKKyAgICAgICAgICBleHRlcm4gc3RydWN0IGtyYl9vcF9kYXRhIGtyYl9vcDsKKyNlbmRp ZiAvKiBDS19LRVJCRVJPUyAqLworICAgICAgICAgIGNoYXIgKiBwID0gTlVMTDsKKyAgICAgICAg ICBpZiAoKHggPQorICAgICAgICAgICAgICAgY21rZXkoc2V0YXV0aCxuc2V0YXV0aCwiYXV0aGVu dGljYXRpb24gdHlwZSIsIiIseHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgICByZXR1cm4oeCk7 CisgICAgICAgICAgc3dpdGNoICh4KSB7CisjaWZkZWYgQ0tfS0VSQkVST1MKKyAgICAgICAgICAg IGNhc2UgQVVUSF9LUkI0OiBrdiA9IDQ7IGJyZWFrOyAvKiBEb24ndCBhc3N1bWUgdmFsdWVzIGFy ZSBzYW1lICovCisgICAgICAgICAgICBjYXNlIEFVVEhfS1JCNToga3YgPSA1OyBicmVhazsKKyNl bmRpZiAvKiBDS19LRVJCRVJPUyAqLworI2lmZGVmIENLX1NSUAorICAgICAgICAgICAgY2FzZSBB VVRIX1NSUDogYnJlYWs7CisjZW5kaWYgLyogQ0tfU1JQICovCisjaWZkZWYgQ0tfU1NMCisgICAg ICAgICAgICBjYXNlIEFVVEhfU1NMOgorICAgICAgICAgICAgY2FzZSBBVVRIX1RMUzoKKyAgICAg ICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogQ0tfU1NMICovCisgICAgICAgICAgICBkZWZhdWx0 OgorICAgICAgICAgICAgICBwcmludGYoIj9BdXRob3JpemF0aW9uIHR5cGUgbm90IHN1cHBvcnRl ZCB5ZXQgLSBcIiVzXCJcbiIsCisgICAgICAgICAgICAgICAgICAgICBhdG1idWYpOworICAgICAg ICAgICAgICByZXR1cm4oLTkpOworICAgICAgICAgIH0KKyNpZmRlZiBJS1NECisgICAgICAgICAg aWYgKGluc2VydmVyICYmCisjaWZkZWYgSUtTRENPTkYKKyAgICAgICAgICAgICAgaWtzZGNmCisj ZWxzZQorICAgICAgICAgICAgICAxCisjZW5kaWYgLyogSUtTRENPTkYgKi8KKyAgICAgICAgICAg ICAgKSB7CisgICAgICAgICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkpOwor ICAgICAgICAgICAgICBwcmludGYoIj9Tb3JyeSwgY29tbWFuZCBkaXNhYmxlZC5cbiIpOworICAg ICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOworICAgICAgICAgIH0KKyNlbmRpZiAvKiBJ S1NEICovCisjaWZkZWYgQ0tfQVBDCisgICAgICAgICAgLyogRG9uJ3QgbGV0IHRoaXMgYmUgc2V0 IHJlbW90ZWx5ICovCisgICAgICAgICAgaWYgKGFwY2FjdGl2ZSA9PSBBUENfTE9DQUwgfHwKKyAg ICAgICAgICAgICAgYXBjYWN0aXZlID09IEFQQ19SRU1PVEUgJiYgIShhcGNzdGF0dXMgJiBBUENf VU5DSCkpIHsKKyAgICAgICAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeSk7 CisgICAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7CisgICAgICAgICAgfQorI2VuZGlm IC8qIENLX0FQQyAqLworCisgICAgICAgICAgc3dpdGNoKHgpIHsKKyNpZmRlZiBDS19LRVJCRVJP UworICAgICAgICAgICAgY2FzZSBBVVRIX0tSQjQ6CisgICAgICAgICAgICBjYXNlIEFVVEhfS1JC NTogeworICAgICAgICAgICAgICAgIGlmICgoeCA9IGNta2V5KGt2ID09IDQgPyBrNHRhYiA6IGs1 dGFiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt2ID09IDQgPyBuazR0YWIgOiBu azV0YWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIktlcmJlcm9zIHBhcmFtZXRl ciIsIiIseHhzdHJpbmcpKSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHgpOwor ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzID0gIiI7CisgICAgICAgICAgICAg ICAgc3dpdGNoICh4KSB7CisjaWZkZWYgS1JCNAorICAgICAgICAgICAgICAgICAgY2FzZSBYWUtS QkRCRzoKKyAgICAgICAgICAgICAgICAgICAgaWYgKGt2ID09IDQpIHsKKyAgICAgICAgICAgICAg ICAgICAgICAgIGlmICgoeSA9IHNldG9uKCZrNGRlYnVnKSkgPCAwKQorICAgICAgICAgICAgICAg ICAgICAgICAgICByZXR1cm4oeSk7CisjaWZkZWYgTlQKKyAgICAgICAgICAgICAgICAgICAgICAg IGNrX2tyYjRfZGVidWcoazRkZWJ1Zyk7CisjZW5kaWYgLyogTlQgKi8KKyAgICAgICAgICAgICAg ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybigtOSk7CisgICAg ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyog S1JCNCAqLworICAgICAgICAgICAgICAgICAgY2FzZSBYWUtSQkxJRjoKKyAgICAgICAgICAgICAg ICAgICAgaWYgKCh5ID0gY21udW0oIlRHVCBsaWZldGltZSIsIjYwMCIsMTAsJnoseHhzdHJpbmcp KSA8IDApCisgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICAgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgWFlLUkJQUkU6CisgICAgICAgICAg ICAgICAgICAgIGlmIChrdiA9PSA0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHkg PSBzZXRvbigma3JiNF9kX3ByZWF1dGgpKSA8IDApCisgICAgICAgICAgICAgICAgICAgICAgICAg IHJldHVybih5KTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg ICAgICAgICAgIHJldHVybigtOSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIFhZS1JCSU5TOgorICAgICAg ICAgICAgICAgICAgICBpZiAoKHkgPSBjbXR4dCgiSW5zdGFuY2UgbmFtZSIsIiIsJnMseHhzdHJp bmcpKSA8IDApCisgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICAgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgWFlLUkJGV0Q6CisgICAgICAg ICAgICAgICAgICAgIGlmIChrdiA9PSA1KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo KHkgPSBzZXRvbigma3JiNV9kX2ZvcndhcmRhYmxlKSkgPCAwKQorICAgICAgICAgICAgICAgICAg ICAgICAgICByZXR1cm4oeSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg ICAgICAgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSBYWUtSQlBSWDoK KyAgICAgICAgICAgICAgICAgICAgaWYgKGt2ID09IDUpIHsKKyAgICAgICAgICAgICAgICAgICAg ICAgIGlmICgoeSA9IHNldG9uKCZrcmI1X2RfcHJveGlhYmxlKSkgPCAwKQorICAgICAgICAgICAg ICAgICAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSBYWUtS QlJOVzoKKyAgICAgICAgICAgICAgICAgICAgaWYgKCh5ID0gY21udW0oIlRHVCByZW5ld2FibGUg bGlmZXRpbWUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMCIsMTAsJnos eHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHkpOworICAgICAg ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgWFlLUkJBRFI6Cisg ICAgICAgICAgICAgICAgICAgIGlmIChrdiA9PSA1KSB7CisgICAgICAgICAgICAgICAgICAgICAg ICBpZiAoKHkgPSBzZXRvbigma3JiNV9jaGVja2FkZHJzKSkgPCAwKQorICAgICAgICAgICAgICAg ICAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg ICAgICAgICAgICAgICAgICAgICBpZiAoKHkgPSBzZXRvbigma3JiNF9jaGVja2FkZHJzKSkgPCAw KQorICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNl IFhZS1JCTkFEOgorICAgICAgICAgICAgICAgICAgICBpZiAoa3YgPT0gNSkgeworICAgICAgICAg ICAgICAgICAgICAgICAgaWYgKCh5ID0gc2V0b24oJmtyYjVfZF9ub19hZGRyZXNzZXMpKSA8IDAp CisgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybih5KTsKKyAgICAgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2Ug WFlLUkJBREQ6CisgICAgICAgICAgICAgICAgICAgIGlmIChrdiA9PSA1KSB7CisgICAgICAgICAg ICAgICAgICAgICAgICBjaGFyICogdG1wYWRkcnNbS1JCNV9OVU1fT0ZfQUREUlNdOworICAgICAg ICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IEtSQjVfTlVNX09GX0FERFJTOyBpKysp CisgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcGFkZHJzW2ldID0gTlVMTDsKKworICAgICAg ICAgICAgICAgICAgICAgICAgaWYgKCh5ID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y21mbGQoIkxpc3Qgb2YgSVAgYWRkcmVzc2VzIiwiIiwmcyx4eHN0cmluZykpIDwgMCkKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICAgICAgICAgICAgICAgICAg bWFrZWxpc3Qocyx0bXBhZGRycyxLUkI1X05VTV9PRl9BRERSUyk7CisgICAgICAgICAgICAgICAg ICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICBmb3IgKGkgPSAwOyBpIDwgS1JCNV9OVU1fT0ZfQUREUlM7IGkrKykgeworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpZiAodG1wYWRkcnNbaV0gIT0gTlVMTCkKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlKHRtcGFkZHJzW2ldKTsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHkp OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZm9y IChpID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA8IEtSQjVfTlVNX09GX0FE RFJTICYmIHRtcGFkZHJzW2ldOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKyspIHsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5ldF9hZGRyKHRtcGFkZHJzW2ldKSA9 PSAweGZmZmZmZmZmKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50Zigi aW52YWxpZCBpcCBhZGRyZXNzOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHRtcGFkZHJzW2ldKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Zm9yIChpID0gMDsgaSA8IEtSQjVfTlVNX09GX0FERFJTOyBpKyspIHsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGlmICh0bXBhZGRyc1tpXSAhPSBOVUxMKQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlKHRtcGFkZHJzW2ldKTsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICByZXR1cm4oLTkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGkgPCBLUkI1X05VTV9PRl9BRERSUyAmJiBrcmI1X2Rf YWRkcnNbaV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkrKykgeworICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGlmIChrcmI1X2RfYWRkcnNbaV0pCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBmcmVlKGtyYjVfZF9hZGRyc1tpXSk7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAga3JiNV9kX2FkZHJzW2ldID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGkgPCBLUkI1X05VTV9PRl9BRERSUyAmJiB0bXBhZGRyc1tpXTsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAga3JiNV9kX2FkZHJzW2ldID0gdG1wYWRkcnNbaV07CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdG1wYWRkcnNbaV0gPSBOVUxMOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICAgICAgICAgICAga3JiNV9kX2FkZHJzW2ldID0gTlVMTDsKKyAgICAgICAgICAg ICAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisgICAgICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgIGNhc2UgWFlL UkJHRVQ6CisgICAgICAgICAgICAgICAgICAgIGlmIChrdiA9PSA1KSB7CisgICAgICAgICAgICAg ICAgICAgICAgICBpZiAoKHkgPSBzZXRvbigma3JiNV9hdXRvZ2V0KSkgPCAwKQorICAgICAgICAg ICAgICAgICAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7 CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHkgPSBzZXRvbigma3JiNF9hdXRvZ2V0KSkg PCAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBj YXNlIFhZS1JCREVMOgorICAgICAgICAgICAgICAgICAgICBpZiAoKHogPSBjbWtleShrZGVzdGFi LG5rZGVzdGFiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQXV0byBEZXN0 cm95IFRpY2tldHMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmV2ZXIi LHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgICAgICAgICAgICAgIHJldHVybih6KTsKKyAgICAg ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIFhZS1JCUFI6Cisg ICAgICAgICAgICAgICAgICAgIGlmICgoeSA9IGNtdHh0KCJVc2VyIElEIix1aWRidWYsJnMseHhz dHJpbmcpKSA8IDApCisgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICAg ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgWFlLUkJSTDoKKyAgICAg ICAgICAgICAgICAgICAgaWYgKCh5ID0gY210eHQoIk5hbWUgb2YgcmVhbG0iLCIiLCZzLHh4c3Ry aW5nKSkgPCAwKQorICAgICAgICAgICAgICAgICAgICAgIHJldHVybih5KTsKKyAgICAgICAgICAg ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIFhZS1JCS1RCOgorICAgICAg ICAgICAgICAgICAgICB5ID0gY21pZmkoIkZpbGVuYW1lIiwiIiwmcywmeix4eHN0cmluZyk7Cisg ICAgICAgICAgICAgICAgICAgIGlmICh5ICE9IC0zKSB7CisgICAgICAgICAgICAgICAgICAgICAg IGlmICh5IDwgMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAg ICAgICAgICAgICAgICAgIGlmICh6KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRm KCI/V2lsZGNhcmRzIG5vdCBhbGxvd2VkXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBy ZXR1cm4oLTkpOworICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIFhZ S1JCQ0M6CisgICAgICAgICAgICAgICAgICAgIGlmICgoeSA9IGNtb2ZpKCJGaWxlbmFtZSIsIiIs JnMseHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHkpOworICAg ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgWFlLUkJTUlY6 CisgICAgICAgICAgICAgICAgICAgIGlmICgoeSA9IGNtdHh0KCJOYW1lIG9mIHNlcnZpY2UgdG8g dXNlIGluIHRpY2tldCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrdiA9 PSA0ID8gInJjbWQiIDogImhvc3QiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHh4c3RyaW5nCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpIDwgMCkKKyAgICAgICAgICAgICAgICAg ICAgICByZXR1cm4oeSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg ICAgICAgY2FzZSBYWUtSQks1SzQ6CisgICAgICAgICAgICAgICAgICAgIGlmIChrdiA9PSA1KSB7 CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHkgPSBzZXRvbigma3JiNV9kX2dldGs0KSkg PCAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgICAgICAg ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTkpOworICAg ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg ICAgICAgICAgY2FzZSBYWUtSQlBSTTogICAgICAgIC8qIFByb21wdCAqLworICAgICAgICAgICAg ICAgICAgICBpZiAoKHogPSBjbWtleShrcmJwcm10YWIsMiwiIiwiIix4eHN0cmluZykpIDwgMCkK KyAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oeik7CisgICAgICAgICAgICAgICAgICAgIGlm ICgoeSA9IGNtdHh0KCh6ID09IEtSQl9QV19QUk0pID8KKyAgIlRleHQgb2YgcHJvbXB0O1xubWF5 IGNvbnRhaW4gXCIlc1wiIHRvIGJlIHJlcGxhY2VkIGJ5IHByaW5jaXBhbCBuYW1lIiA6CisgICJU ZXh0IG9mIHByb21wdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgeHhzdHJpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKQorICAgICAgICAgICAgICAgICAgICAgICAgICkgPCAwKQorICAgICAgICAgICAgICAg ICAgICAgIHJldHVybih5KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICAgIGNrc3RybmNweShsaW5lLHMsTElOQlVGU0laKTsKKyAg ICAgICAgICAgICAgICBzID0gbGluZTsKKyAgICAgICAgICAgICAgICBpZiAoKHkgPSBjbWNmbSgp KSA8IDApCisgICAgICAgICAgICAgICAgICByZXR1cm4oeSk7CisjaWZkZWYgSUtTRAorICAgICAg ICAgICAgICAgIGlmIChpbnNlcnZlciAmJgorI2lmZGVmIElLU0RDT05GCisgICAgICAgICAgICAg ICAgICAgIGlrc2RjZgorI2Vsc2UgLyogSUtTRENPTkYgKi8KKyAgICAgICAgICAgICAgICAgICAg MQorI2VuZGlmIC8qIElLU0RDT05GICovCisgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAg ICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7CisjZW5kaWYgLyogSUtTRCAqLworCisgICAg ICAgICAgICAgICAgc3dpdGNoICh4KSB7ICAgICAgICAgICAgLyogQ29weSB2YWx1ZSB0byByaWdo dCBwbGFjZSAqLworICAgICAgICAgICAgICAgICAgY2FzZSBYWUtSQkxJRjogICAgICAgIC8qIExp ZmV0aW1lICovCisgICAgICAgICAgICAgICAgICAgIGlmIChrdiA9PSA0KQorICAgICAgICAgICAg ICAgICAgICAgIGtyYjRfZF9saWZldGltZSA9IHo7CisgICAgICAgICAgICAgICAgICAgIGVsc2UK KyAgICAgICAgICAgICAgICAgICAgICBrcmI1X2RfbGlmZXRpbWUgPSB6OworICAgICAgICAgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgWFlLUkJSTlc6CisgICAgICAg ICAgICAgICAgICAgIGlmIChrdiA9PSA1KQorICAgICAgICAgICAgICAgICAgICAgIGtyYjVfZF9y ZW5ld2FibGUgPSB6OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg ICAgIGNhc2UgWFlLUkJQUjogICAgICAgICAvKiBQcmluY2lwYWwgKi8KKyAgICAgICAgICAgICAg ICAgICAgcyA9IGJyc3RyaXAocyk7CS8qIFN0cmlwIGJyYWNlcyBhcm91bmQuICovCisgICAgICAg ICAgICAgICAgICAgIGlmIChrdiA9PSA0KQorICAgICAgICAgICAgICAgICAgICAgIG1ha2VzdHIo JmtyYjRfZF9wcmluY2lwYWwscyk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAg ICAgICAgICAgICAgICBtYWtlc3RyKCZrcmI1X2RfcHJpbmNpcGFsLHMpOworICAgICAgICAgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgWFlLUkJJTlM6ICAgICAgICAv KiBJbnN0YW5jZSAqLworICAgICAgICAgICAgICAgICAgICBpZiAoa3YgPT0gNCkKKyAgICAgICAg ICAgICAgICAgICAgICBtYWtlc3RyKCZrcmI0X2RfaW5zdGFuY2Uscyk7CisgICAgICAgICAgICAg ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICBtYWtlc3RyKCZrcmI1X2RfaW5zdGFu Y2Uscyk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgY2Fz ZSBYWUtSQlJMOiAgICAgICAgIC8qIFJlYWxtICovCisgICAgICAgICAgICAgICAgICAgIGlmIChr diA9PSA0KQorICAgICAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJmtyYjRfZF9yZWFsbSxzKTsK KyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgIG1ha2VzdHIo JmtyYjVfZF9yZWFsbSxzKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg ICAgICAgICBjYXNlIFhZS1JCS1RCOiAgICAgICAgLyogS2V5IFRhYmxlICovCisgICAgICAgICAg ICAgICAgICAgIGlmIChrdiA9PSA0KQorICAgICAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJms0 X2tleXRhYixzKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAg ICAgIG1ha2VzdHIoJms1X2tleXRhYixzKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgICAgICAgICAgICBjYXNlIFhZS1JCQ0M6ICAgICAgICAgLyogQ3JlZGVudGlhbHMgY2Fj aGUgKi8KKyAgICAgICAgICAgICAgICAgICAgbWFrZXN0cigma3JiNV9kX2NjLHMpOworICAgICAg ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgWFlLUkJTUlY6ICAg ICAgICAvKiBTZXJ2aWNlIE5hbWUgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKGt2ID09IDQp CisgICAgICAgICAgICAgICAgICAgICAgbWFrZXN0cigma3JiNF9kX3NydixzKTsKKyAgICAgICAg ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJmtyYjVfZF9z cnYscyk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgY2Fz ZSBYWUtSQkRFTDoKKyAgICAgICAgICAgICAgICAgICAgaWYgKGt2ID09IDUpCisgICAgICAgICAg ICAgICAgICAgICAga3JiNV9hdXRvZGVsID0gejsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQor ICAgICAgICAgICAgICAgICAgICAgIGtyYjRfYXV0b2RlbCA9IHo7CisgICAgICAgICAgICAgICAg ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSBYWUtSQlBSTTogICAgICAgIC8qIFBy b21wdCAqLworCQkgICAgcyA9IGJyc3RyaXAocyk7CisgICAgICAgICAgICAgICAgICAgIHN3aXRj aCAoeikgeworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgS1JCX1BXX1BSTTogeyAvKiBQYXNz d29yZCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDaGVjayB0aGF0IHRoZXJlIGFy ZSBubyBtb3JlIHRoYW4gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHdvICUgZmll bGRzIGFuZCAlIG11c3QgZm9sbG93ZWQgYnkgJ3MnLiAqLworICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnQgaSxuLGxlbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuID0gc3RybGVu KHMpOworICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBuID0gMDsgaSA8IGxl bjsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc1tpXSA9PSAnJScp IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc1tpKzFdICE9ICclJykg eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc1tpKzFdICE9ICdz JykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJPbmx5ICUlcyBmaWVs ZHMgYXJlIHBlcm1pdHRlZC5cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcmV0dXJuKC05KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKytuID4gMikgeworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiT25seSB0d28gJSVzIGZpZWxkcyBhcmUgcGVy bWl0dGVkLlxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy ZXR1cm4oLTkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGkrKzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoa3YgPT0g NSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlc3RyKCZrNXB3cHJvbXB0LHMpOwor ICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbWFrZXN0cigmazRwd3Byb21wdCxzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl YWs7CisgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug S1JCX1BSX1BSTTogeyAvKiBQcmluY2lwYWwgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAg LyogQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyAlIGZpZWxkcyAqLworICAgICAgICAg ICAgICAgICAgICAgICAgICBpbnQgaSxsZW47CisgICAgICAgICAgICAgICAgICAgICAgICAgIGxl biA9IHN0cmxlbihzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8 IGxlbjsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc1tpXSA9PSAn JScpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc1tpKzFdICE9ICcl JykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiUlIGZpZWxkcyBhcmUgbm90IHVzZWQgaW4g dGhpcyBjb21tYW5kLlxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHJldHVybigtOSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg ICAgICAgICBpZiAoa3YgPT0gNSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlc3Ry KCZrNXBycHJvbXB0LHMpOworICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbWFrZXN0cigmazRwcnByb21wdCxzKTsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICAgICAgfQorI2VuZGlmIC8qIENLX0tFUkJFUk9TICovCisjaWZkZWYgQ0tfU1JQCisg ICAgICAgICAgICBjYXNlIEFVVEhfU1JQOiB7CisgICAgICAgICAgICAgICAgaWYgKCh4ID0gY21r ZXkoc3JwdGFiLCBuc3JwdGFiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTUlAg cGFyYW1ldGVyIiwiIix4eHN0cmluZykpIDwgMCkgeworICAgICAgICAgICAgICAgICAgICByZXR1 cm4oeCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHMgPSAiIjsKKyAgICAg ICAgICAgICAgICBzd2l0Y2ggKHgpIHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgWFlTUlBQUk06 ICAgICAgICAvKiBQcm9tcHQgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKCh6ID0gY21rZXko c3JwcHJtdGFiLDEsIiIsIiIseHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgICAgICAgICAgICAg cmV0dXJuKHopOworICAgICAgICAgICAgICAgICAgICBpZiAoKHkgPSBjbXR4dCgKKyAgIlRleHQg b2YgcHJvbXB0O1xubWF5IGNvbnRhaW4gb25lIFwiJXNcIiB0byBiZSByZXBsYWNlZCBieSB0aGUg dXNlcm5hbWUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnMsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHh4c3RyaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICkKKyAgICAgICAgICAgICAgICAgICAgICAgICApIDwgMCkKKyAgICAgICAgICAgICAgICAgICAg ICByZXR1cm4oeSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgICBja3N0cm5jcHkobGluZSxzLExJTkJVRlNJWik7CisgICAgICAg ICAgICAgICAgcyA9IGxpbmU7CisgICAgICAgICAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAw KQorICAgICAgICAgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICAgICAgICAgIHN3aXRjaCAo eCkgeyAgICAgICAgICAgIC8qIENvcHkgdmFsdWUgdG8gcmlnaHQgcGxhY2UgKi8KKyAgICAgICAg ICAgICAgICAgIGNhc2UgWFlTUlBQUk06ICAgICAgICAvKiBQcm9tcHQgKi8KKwkJICAgIHMgPSBi cnN0cmlwKHMpOworICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHopIHsKKyAgICAgICAgICAg ICAgICAgICAgICBjYXNlIFNSUF9QV19QUk06IHsgLyogUGFzc3dvcmQgKi8KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogQ2hlY2sgJXMgZmllbGRzICovCisgICAgICAgICAgICAgICAgICAg ICAgICAgIGludCBpLG4sbGVuOworICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4gPSBzdHJs ZW4ocyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIG4gPSAwOyBpIDwg bGVuOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzW2ldID09ICcl JykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzW2krMV0gIT0gJyUn KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzW2krMV0gIT0g J3MnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYo CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiT25seSAlJXMgZmll bGRzIGFyZSBwZXJtaXR0ZWQuXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHJldHVybigtOSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCsrbiA+IDEp IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJPbmx5IG9uZSAlJXMgZmllbGQg aXMgcGVybWl0dGVkLlxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICByZXR1cm4oLTkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtl c3RyKCZzcnBwd3Byb21wdCxzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorI2VuZGlmIC8q IENLX1NSUCAqLworI2lmZGVmIENLX1NTTAorICAgICAgICAgICAgY2FzZSBBVVRIX1NTTDoKKyAg ICAgICAgICAgIGNhc2UgQVVUSF9UTFM6IHsKKyAgICAgICAgICAgICAgICBpZiAoKHogPSBjbWtl eShzc2x0YWIsIG5zc2x0YWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoeCA9PSBBVVRI X1NTTCA/ICJTU0wgcGFyYW1ldGVyIiA6ICJUTFMgcGFyYW1ldGVyIiksCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAiIix4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICAgICAgICAgIHJldHVy bih6KTsKKyAgICAgICAgICAgICAgICBzID0gIiI7CisgICAgICAgICAgICAgICAgc3dpdGNoICh6 KSB7CisgICAgICAgICAgICAgICAgICBjYXNlIFhZU1NMUkNGTDogICAgICAgLyogU1NML1RMUyBS U0EgQ2VydHMgZmlsZSAqLworICAgICAgICAgICAgICAgICAgY2FzZSBYWVNTTFJDQ0Y6ICAgICAg IC8qIFNTTC9UTFMgUlNBIENlcnRzIENoYWluIGZpbGUgKi8KKyAgICAgICAgICAgICAgICAgIGNh c2UgWFlTU0xSS0ZMOiAgICAgICAvKiBTU0wvVExTIFJTQSBLZXkgRmlsZSAqLworICAgICAgICAg ICAgICAgICAgY2FzZSBYWVNTTERDRkw6ICAgICAgIC8qIFNTTC9UTFMgRFNBIENlcnRzIGZpbGUg Ki8KKyAgICAgICAgICAgICAgICAgIGNhc2UgWFlTU0xEQ0NGOiAgICAgICAvKiBTU0wvVExTIERT QSBDZXJ0cyBDaGFpbiBmaWxlICovCisgICAgICAgICAgICAgICAgICBjYXNlIFhZU1NMREtGTDog ICAgICAgLyogU1NML1RMUyBESCBLZXkgRmlsZSAqLworICAgICAgICAgICAgICAgICAgY2FzZSBY WVNTTERQRkw6ICAgICAgIC8qIFNTTC9UTFMgREggUGFyYW0gRmlsZSAqLworICAgICAgICAgICAg ICAgICAgY2FzZSBYWVNTTENSTDogICAgICAgIC8qIFNTTC9UTFMgQ1JMIEZpbGUgKi8KKyAgICAg ICAgICAgICAgICAgIGNhc2UgWFlTU0xWUkZGOiAgICAgICAvKiBTU0wvVExTIFZlcmlmeSBGaWxl ICovCisgICAgICAgICAgICAgICAgICBjYXNlIFhZU1NMUk5EOiAgICAgICAgLyogU1NML1RMUyBS YW5kb20gRmlsZSAqLworICAgICAgICAgICAgICAgICAgICB5ID0gY21pZmkoIkZpbGVuYW1lIiwi IiwmcywmeCx4eHN0cmluZyk7CisgICAgICAgICAgICAgICAgICAgIGlmICh5ICE9IC0zKSB7Cisg ICAgICAgICAgICAgICAgICAgICAgICBpZiAoeSA8IDApCisgICAgICAgICAgICAgICAgICAgICAg ICAgIHJldHVybih5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4KSB7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/V2lsZGNhcmRzIG5vdCBhbGxvd2VkXG4iKTsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICAgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGNr c3RybmNweShsaW5lLHMsTElOQlVGU0laKTsKKyAgICAgICAgICAgICAgICAgICAgcyA9IGxpbmU7 CisgICAgICAgICAgICAgICAgICAgIHMgPSBicnN0cmlwKHMpOworICAgICAgICAgICAgICAgICAg ICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApCisgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHkp OworICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHopIHsKKyAgICAgICAgICAgICAgICAgICAg ICBjYXNlIFhZU1NMUkNGTDogICAvKiBTU0wvVExTIFJTQSBDZXJ0cyBmaWxlICovCisgICAgICAg ICAgICAgICAgICAgICAgICBpZiAoIXNbMF0gJiYgc3NsX3JzYV9jZXJ0X2ZpbGUpIHsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICBmcmVlKHNzbF9yc2FfY2VydF9maWxlKTsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzc2xfcnNhX2NlcnRfZmlsZSA9IE5VTEw7CisgICAgICAgICAg ICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNbMF0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICBtYWtlc3RyKCZzc2xfcnNhX2NlcnRfZmlsZSxzKTsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpZiAoIXNzbF9yc2Ffa2V5X2ZpbGUpCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBtYWtlc3RyKCZzc2xfcnNhX2tleV9maWxlLHMpOworICAgICAgICAgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg ICAgY2FzZSBYWVNTTFJDQ0Y6ICAgLyogU1NML1RMUyBSU0EgQ2VydHMgQ2hhaW4gZmlsZSAqLwor ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNbMF0gJiYgc3NsX3JzYV9jZXJ0X2NoYWlu X2ZpbGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyZWUoc3NsX3JzYV9jZXJ0 X2NoYWluX2ZpbGUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsX3JzYV9jZXJ0 X2NoYWluX2ZpbGUgPSBOVUxMOworICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYg KHNbMF0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJnNzbF9yc2Ff Y2VydF9jaGFpbl9maWxlLHMpOworICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgWFlT U0xSS0ZMOiAgIC8qIFNTTC9UTFMgUlNBIEtleSBGaWxlICovCisgICAgICAgICAgICAgICAgICAg ICAgICBpZiAoIXNbMF0gJiYgc3NsX3JzYV9rZXlfZmlsZSkgeworICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGZyZWUoc3NsX3JzYV9rZXlfZmlsZSk7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc3NsX3JzYV9rZXlfZmlsZSA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgICAgICB9 IGVsc2UgaWYgKHNbMF0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlc3RyKCZz c2xfcnNhX2tleV9maWxlLHMpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSBYWVNTTERD Rkw6ICAgLyogU1NML1RMUyBEU0EgQ2VydHMgZmlsZSAqLworICAgICAgICAgICAgICAgICAgICAg ICAgaWYgKCFzWzBdICYmIHNzbF9kc2FfY2VydF9maWxlKSB7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZnJlZShzc2xfZHNhX2NlcnRfZmlsZSk7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc3NsX2RzYV9jZXJ0X2ZpbGUgPSBOVUxMOworICAgICAgICAgICAgICAgICAgICAgICAg fSBlbHNlIGlmIChzWzBdKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZXN0cigm c3NsX2RzYV9jZXJ0X2ZpbGUscyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFz c2xfZGhfa2V5X2ZpbGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlc3RyKCZz c2xfZGhfa2V5X2ZpbGUscyk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIFhZU1NMREND RjogICAvKiBTU0wvVExTIERTQSBDZXJ0cyBDaGFpbiBmaWxlICovCisgICAgICAgICAgICAgICAg ICAgICAgICAgIGlmICghc1swXSAmJiBzc2xfZHNhX2NlcnRfY2hhaW5fZmlsZSkgeworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZnJlZShzc2xfZHNhX2NlcnRfY2hhaW5fZmlsZSk7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2xfZHNhX2NlcnRfY2hhaW5fZmlsZSA9IE5V TEw7CisgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc1swXSkgeworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbWFrZXN0cigmc3NsX2RzYV9jZXJ0X2NoYWluX2ZpbGUs cyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSBYWVNTTERLRkw6ICAgLyogU1NM L1RMUyBESCBLZXkgRmlsZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzWzBdICYm IHNzbF9kaF9rZXlfZmlsZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyZWUoc3Ns X2RoX2tleV9maWxlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2xfZGhfa2V5X2Zp bGUgPSBOVUxMOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzWzBdKSB7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZXN0cigmc3NsX2RoX2tleV9maWxlLHMpOwor ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7 CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSBYWVNTTERQRkw6ICAgLyogU1NML1RMUyBESCBQ YXJhbSBGaWxlICovCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNbMF0gJiYgc3NsX2Ro X3BhcmFtX2ZpbGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlKHNzbF9kaF9w YXJhbV9maWxlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2xfZGhfcGFyYW1fZmls ZSA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNbMF0pIHsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlc3RyKCZzc2xfZGhfcGFyYW1fZmlsZSxzKTsK KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr OworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgWFlTU0xDUkw6ICAgIC8qIFNTTC9UTFMgQ1JM IEZpbGUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc1swXSAmJiBzc2xfY3JsX2Zp bGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlKHNzbF9jcmxfZmlsZSk7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsX2NybF9maWxlID0gTlVMTDsKKyAgICAgICAg ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc1swXSkgeworICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG1ha2VzdHIoJnNzbF9jcmxfZmlsZSxzKTsKKyAgICAgICAgICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAg IGNhc2UgWFlTU0xWUkZGOiAgIC8qIFNTTC9UTFMgVmVyaWZ5IEZpbGUgKi8KKyAgICAgICAgICAg ICAgICAgICAgICAgIGlmICghc1swXSAmJiBzc2xfdmVyaWZ5X2ZpbGUpIHsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICBmcmVlKHNzbF92ZXJpZnlfZmlsZSk7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc3NsX3ZlcmlmeV9maWxlID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAg ICAgIH0gZWxzZSBpZiAoc1swXSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2Vz dHIoJnNzbF92ZXJpZnlfZmlsZSxzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgWFlT U0xSTkQ6ICAgIC8qIFNTTC9UTFMgUmFuZG9tIEZpbGUgKi8KKyAgICAgICAgICAgICAgICAgICAg ICAgIGlmICghc1swXSAmJiBzc2xfcm5kX2ZpbGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICBmcmVlKHNzbF9ybmRfZmlsZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ns X3JuZF9maWxlID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc1sw XSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJnNzbF9ybmRfZmlsZSxz KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJy ZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor CisgICAgICAgICAgICAgICAgICBjYXNlIFhZU1NMQ1JMRDoKKyAgICAgICAgICAgICAgICAgIGNh c2UgWFlTU0xWUkZEOiB7CisgICAgICAgICAgICAgICAgICAgIGNoYXIgKiBkID0gTlVMTDsKKyAg ICAgICAgICAgICAgICAgICAgaWYgKHogPT0gWFlTU0xWUkZEKQorICAgICAgICAgICAgICAgICAg ICAgIGQ9IGdldGVudigiU1NMX0NFUlRfRElSIik7CisgICAgICAgICAgICAgICAgICAgIGlmIChk ID09IE5VTEwpCisgICAgICAgICAgICAgICAgICAgICAgICBkID0gIiI7CisgICAgICAgICAgICAg ICAgICAgIGlmICgoeSA9IGNtZGlyKCJEaXJlY3RvcnkiLGQsJnMseHhzdHJpbmcpKSA8IDApCisJ CSAgICAgIGlmICh5ICE9IC0zKQorCQkJcmV0dXJuKHkpOworICAgICAgICAgICAgICAgICAgICBj a3N0cm5jcHkobGluZSxzLExJTkJVRlNJWik7CisgICAgICAgICAgICAgICAgICAgIHMgPSBsaW5l OworICAgICAgICAgICAgICAgICAgICBzID0gYnJzdHJpcChzKTsKKyAgICAgICAgICAgICAgICAg ICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKQorICAgICAgICAgICAgICAgICAgICAgIHJldHVybih5 KTsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoKHopIHsKKyAgICAgICAgICAgICAgICAgICAg ICBjYXNlIFhZU1NMQ1JMRDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc1swXSAmJiBz c2xfY3JsX2RpcikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyZWUoc3NsX2NybF9k aXIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbF9jcmxfZGlyID0gTlVMTDsKKyAg ICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc1swXSkgeworICAgICAgICAgICAgICAg ICAgICAgICAgICAgIG1ha2VzdHIoJnNzbF9jcmxfZGlyLHMpOworICAgICAgICAgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg ICAgICAgY2FzZSBYWVNTTFZSRkQ6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNbMF0g JiYgc3NsX3ZlcmlmeV9kaXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlKHNz bF92ZXJpZnlfZGlyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2xfdmVyaWZ5X2Rp ciA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNbMF0pIHsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlc3RyKCZzc2xfdmVyaWZ5X2RpcixzKTsKKyAg ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgY2FzZSBYWVNTTENPSzogICAgICAgIC8q IFNTTC9UTFMgQ2VydHMtT2sgZmxhZyAqLworICAgICAgICAgICAgICAgICAgICBpZiAoKHkgPSBz ZXRvbigmc3NsX2NlcnRzb2tfZmxhZykpIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgICByZXR1 cm4oeSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgY2Fz ZSBYWVNTTERCRzogICAgICAgICAgICAgICAgLyogU1NML1RMUyBEZWJ1ZyBmbGFnICovCisgICAg ICAgICAgICAgICAgICAgIGlmICgoeSA9IHNldG9uKCZzc2xfZGVidWdfZmxhZykpIDwgMCkKKyAg ICAgICAgICAgICAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr OworICAgICAgICAgICAgICAgICAgY2FzZSBYWVNTTE9OOiAgICAgICAgIC8qIFNTTC9UTFMgT25s eSBmbGFnICovCisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoeCkgeworICAgICAgICAgICAg ICAgICAgICAgIGNhc2UgQVVUSF9TU0w6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHkg PSBzZXRvbigmc3NsX29ubHlfZmxhZykpIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg cmV0dXJuKHkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg ICAgICAgICAgY2FzZSBBVVRIX1RMUzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoeSA9 IHNldG9uKCZ0bHNfb25seV9mbGFnKSkgPCAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICBy ZXR1cm4oeSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNh c2UgWFlTU0xWUkI6ICAgICAgICAvKiBTU0wvVExTIFZlcmJvc2UgZmxhZyAqLworICAgICAgICAg ICAgICAgICAgICBpZiAoKHkgPSBzZXRvbigmc3NsX3ZlcmJvc2VfZmxhZykpIDwgMCkKKyAgICAg ICAgICAgICAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICAgICAgICAgICAgY2FzZSBYWVNTTFZSRjogICAgICAgIC8qIFNTTC9UTFMgVmVyaWZ5 IGZsYWcgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKCh4ID0gY21rZXkoc3NsdmVydGFiLCBu c3NsdmVydGFiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU1NML1RMUyB2 ZXJpZnkgbW9kZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwZWVyLWNl cnQiLHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgICAgICAgICAgICAgIHJldHVybih4KTsKKyAg ICAgICAgICAgICAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKQorICAgICAgICAgICAgICAg ICAgICAgIHJldHVybih5KTsKKyAgICAgICAgICAgICAgICAgICAgc3NsX3ZlcmlmeV9mbGFnID0g eDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIFhZ U1NMRFVNOgorICAgICAgICAgICAgICAgICAgICBpZiAoKHkgPSBzZXRvbigmc3NsX2R1bW15X2Zs YWcpKSA8IDApCisgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICAgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgWFlTU0xDTDogeyAgICAgICAg ICAgICAgIC8qIFNTTC9UTFMgQ2lwaGVyIExpc3QgKi8KKyNpZmRlZiBDT01NRU5UCisgICAgICAg ICAgICAgICAgICAgICAgLyogVGhpcyBjb2RlIGlzIHVzZWQgdG8gZ2VuZXJhdGUgYSBjb2xvbiBk ZWxpbWl0ZWQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAvKiBsaXN0IG9mIHRoZSBjaXBoZXJz IGN1cnJlbnRseSBpbiB1c2UgdG8gYmUgdXNlZCAqLworICAgICAgICAgICAgICAgICAgICAgIC8q IGFzIHRoZSBkZWZhdWx0IGZvciBjbXR4dCgpLiAgSG93ZXZlciwgYSBiZXR0ZXIgICovCisgICAg ICAgICAgICAgICAgICAgICAgLyogZGVmYXVsdCBpcyBzaW1wbHkgdGhlIG1hZ2ljIGtleXdvcmQg IkFMTCIuICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICBDSEFSIGRlZlsxMDI0XSA9ICIi OworICAgICAgICAgICAgICAgICAgICAgIGlmIChzc2xfY29uICE9IE5VTEwpIHsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgQ0hBUiAqIHAgPSBOVUxMLCAqcSA9IGRlZjsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgaW50IGksIGxlbjsKKworICAgICAgICAgICAgICAgICAgICAgICAgICBm b3IgKGkgPSAwOyA7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCA9IChD SEFSICopIFNTTF9nZXRfY2lwaGVyX2xpc3Qoc3NsX2NvbixpKTsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGlmIChwID09IE5VTEwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuID0gc3RybGVuKHAp OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHErbGVuKzEgPj0gZGVmKzEwMjQp CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaWYgKGkgIT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKnErKyA9ICc6JzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmNweShxLHAp OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcSArPSBsZW47CisgICAgICAgICAgICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICB9CisjZW5kaWYgLyogQ09NTUVO VCAqLworICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiBwID0gZ2V0ZW52KCJTU0xfQ0lQSEVS Iik7CisgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwKQorICAgICAgICAgICAgICAgICAgICAg ICAgcCA9ICJBTEwiOworICAgICAgICAgICAgICAgICAgICAgIGlmICgoeSA9IGNtdHh0KAorICAg ICAgICAgICAgICAgICAgICAiQ29sb24tZGVsaW1pdGVkIGxpc3Qgb2YgY2lwaGVycyBvciBBTEwg KGNhc2Utc2Vuc2l0aXZlKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcywKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB4eHN0cmluZworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICkgPCAwKQorICAg ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICAgICAgICAgICAgICAgIG1h a2VzdHIoJnNzbF9jaXBoZXJfbGlzdCxzKTsKKyAgICAgICAgICAgICAgICAgICAgICBpZiAoc3Ns X2NvbiA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgIFNTTF9saWJyYXJ5X2lu aXQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsX2N0eCA9IChTU0xfQ1RYICopCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgU1NMX0NUWF9uZXcoKFNTTF9NRVRIT0QgKilUTFN2 MV9tZXRob2QoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzc2xfY3R4ICE9IE5V TEwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsX2Nvbj0gKFNTTCAqKSBTU0xfbmV3 KHNzbF9jdHgpOworICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg ICBpZiAoc3NsX2NvbikgeworICAgICAgICAgICAgICAgICAgICAgICAgICBTU0xfc2V0X2NpcGhl cl9saXN0KHNzbF9jb24sc3NsX2NpcGhlcl9saXN0KTsKKyAgICAgICAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorI2Vu ZGlmIC8qIENLX1NTTCAqLworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgYnJl YWs7CisgICAgICAgICAgfQorICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisgICAgICB9 CisjZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJT04gKi8KKworI2lmbmRlZiBOT1NQTAorICAgICAg Y2FzZSBYWUZVTkM6CisgICAgICAgIGlmICgoeCA9IGNta2V5KGZ1bmN0YWIsbmZ1bmN0YWIsIiIs ImRpYWdub3N0aWNzIix4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICByZXR1cm4oeCk7CisgICAg ICAgIHN3aXRjaCAoeCkgeworICAgICAgICAgIGNhc2UgRlVOQ19ESTogcmV0dXJuKHNldG9uKCZm bmRpYWdzKSk7CisgICAgICAgICAgY2FzZSBGVU5DX0VSOiByZXR1cm4oc2V0b24oJmZuZXJyb3Ip KTsKKyAgICAgICAgICBkZWZhdWx0OiAgICAgIHJldHVybigtMik7CisgICAgICAgIH0KKyNlbmRp ZiAvKiBOT1NQTCAqLworCisgICAgICBjYXNlIFhZU0xFRVA6ICAgICAgICAgICAgICAgICAgICAg LyogU0VUIFNMRUVQIC8gUEFVU0UgKi8KKyAgICAgICAgaWYgKCh4ID0gY21rZXkoc2xlZXB0YWIs MSwiIiwiY2FuY2VsbGF0aW9uIix4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICByZXR1cm4oeCk7 CisgICAgICAgIHJldHVybihzZXRvbigmc2xlZXBjYW4pKTsKKworICAgICAgY2FzZSBYWUNEOiAg ICAgICAgICAgICAgICAgICAgICAgIC8qIFNFVCBDRCAqLworICAgICAgICBpZiAoKHggPSBjbWtl eShjZHRhYixuY2R0YWIsIiIsIiIseHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgcmV0dXJuKHgp OworICAgICAgICBzd2l0Y2ggKHgpIHsKKwkgIGNhc2UgWFlDRF9IOiB7CQkvKiBTRVQgQ0QgSE9N RSAqLworCSAgICAgIGV4dGVybiBjaGFyICogbXlob21lOworCSAgICAgIGlmICgoeSA9IGNtZGly KCJEaXJlY3RvcnkgbmFtZSIsemhvbWUoKSwmcyx4eHN0cmluZykpIDwgMCkKKwkJcmV0dXJuKHkp OworCSAgICAgIG1ha2VzdHIoJm15aG9tZSxzKTsKKwkgICAgICByZXR1cm4oc3VjY2VzcyA9IDEp OworCSAgfQorICAgICAgICAgIGNhc2UgWFlDRF9NOiAgICAgICAgICAgICAgICAgIC8qIFNFVCBD RCBNRVNTQUdFICovCisgICAgICAgICAgICBpZiAoKHggPSBjbWtleShjZG1zZyxuY2Rtc2csIiIs IiIseHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgICAg IGlmICh4ID09IDIpIHsgICAgICAgICAgICAgICAvKiBDRCBNRVNTQUdFIEZJTEUgKi8KKyAgICAg ICAgICAgICAgICBpZiAoKHggPSBjbXR4dCgiTmFtZSBvZiBmaWxlIiwiIiwmcyxOVUxMKSkgPCAw KQorICAgICAgICAgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICAgICAgICAgIGlmICghKnMp IHsKKyAgICAgICAgICAgICAgICAgICAgcyA9IE5VTEw7CisjaWZuZGVmIE5PWEZFUgorICAgICAg ICAgICAgICAgICAgICBzcnZjZG1zZyA9IDA7CisjZW5kaWYgLyogTk9YRkVSICovCisgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1ha2VzdHIoJmNkbXNnc3RyLHMpOworICAgICAg ICAgICAgICAgIG1ha2VsaXN0KGNkbXNnc3RyLGNkbXNnZmlsZSw4KTsKKyAgICAgICAgICAgICAg ICByZXR1cm4oc3VjY2VzcyA9IDEpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAo KHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsgLyogQ0QtTUVTU0FHRSBPTi9PRkYgKi8KKyNp Zm5kZWYgTk9YRkVSCisgICAgICAgICAgICBpZiAoeCA+IDApCisgICAgICAgICAgICAgIHNydmNk bXNnIHw9IDI7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIHNydmNkbXNnICY9IDE7 CisjZW5kaWYgLyogTk9YRkVSICovCisgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwor CisgICAgICAgICAgY2FzZSBYWUNEX1A6IHsgICAgICAgICAgICAgICAgLyogU0VUIENEIFBBVEgg Ki8KKyAgICAgICAgICAgICAgZXh0ZXJuIGNoYXIgKiBja2NkcGF0aDsKKyAgICAgICAgICAgICAg aWYgKCh4ID0gY210eHQoIkNEIFBBVEggc3RyaW5nIiwiIiwmcyx4eHN0cmluZykpIDwgMCkKKyAg ICAgICAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgICAgICAgIG1ha2VzdHIoJmNrY2RwYXRo LHMpOworICAgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworICAgICAgICAgIH0KKyAg ICAgICAgfQorCisjaWZuZGVmIE5PTE9DQUwKKyNpZmRlZiBTVE9QQklUUworICAgICAgY2FzZSBY WVNUT1A6ICAgICAgICAgICAgICAgICAgICAgIC8qIFNUT1AtQklUUyAqLworICAgICAgICBpZiAo KHggPSBjbWtleShzdG9wdGJsLDIsIlN0b3AgYml0cyBmb3Igc2VyaWFsIGRldmljZSIsIiIsCisg ICAgICAgICAgICAgICAgICAgICAgIHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgIHJldHVybih4 KTsKKyAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKQorICAgICAgICAgIHJldHVybih5KTsK KyAgICAgICAgaWYgKHggPiAwICYmIHggPCAzKSB7CisgICAgICAgICAgICBzdG9wYml0cyA9IHg7 CisjaWZkZWYgVE5fQ09NUE9SVAorICAgICAgICAgICAgaWYgKG5ldHdvcmsgJiYgaXN0bmNvbXBv cnQoKSkgeworICAgICAgICAgICAgICAgIHRuc2V0dGluZ3MoLTEsIHgpOworICAgICAgICAgICAg ICAgIHJldHVybihzdWNjZXNzID0gMSk7CisgICAgICAgICAgICB9CisjZW5kaWYgLyogVE5fQ09N UE9SVCAqLworI2lmZGVmIEhXUEFSSVRZCisgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEp OworI2Vsc2UgLyogSFdQQVJJVFkgKi8KKyAgICAgICAgICAgIHJldHVybigtMik7CisjZW5kaWYg LyogSFdQQVJJVFkgKi8KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgcmV0dXJuKC0yKTsKKyNl bmRpZiAvKiBTVE9QQklUUyAqLworCisgICAgICBjYXNlIFhZRElTQzogeworICAgICAgICAgIGV4 dGVybiBpbnQgY2xzb25kaXNjOworICAgICAgICAgIHJldHVybihzZXRvbigmY2xzb25kaXNjKSk7 CisgICAgICB9CisKKyAgICAgIGNhc2UgWFlTRVJJQUw6IHsKKyAgICAgICAgICAvKiBjaGFyIGM7 ICovCisgICAgICAgICAgZXh0ZXJuIGludCBjbWFzazsKKyAgICAgICAgICBpZiAoKHggPSBjbWtl eShzZXJ0YmwsbnNlcnRibCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiU2VyaWFsIGRldmlj ZSBjaGFyYWN0ZXIgc2l6ZSwgcGFyaXR5LCBhbmQgc3RvcCBiaXRzIiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAiOE4xIiwgeHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgICByZXR1cm4oeCk7 CisgICAgICAgICAgY2tzdHJuY3B5KGxpbmUsYXRtYnVmLExJTkJVRlNJWik7IC8qIEFzc29jaWF0 ZWQga2V5d29yZCBzdHJpbmcgKi8KKyAgICAgICAgICBzID0gbGluZTsKKyAgICAgICAgICBpZiAo KHkgPSBjbWNmbSgpKSA8IDApCisgICAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgICAgY2tz dHJuY3B5KGxpbmUsc2VybmFtW3hdLExJTkJVRlNJWik7CisgICAgICAgICAgcyA9IGxpbmU7Cisg ICAgICAgICAgaWYgKHNbMF0gIT0gJzgnICYmIHNbMF0gIT0gJzcnKSAvKiBDaGFyIHNpemUgKi8K KyAgICAgICAgICAgIHJldHVybigtMik7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeiA9 IHNbMF0gLSAnMCc7CisgICAgICAgICAgaWYgKGlzdXBwZXIoc1sxXSkpICAgICAgICAgICAgLyog UGFyaXR5ICovCisgICAgICAgICAgICBzWzFdID0gdG9sb3dlcihzWzFdKTsKKyAgICAgICAgICBp ZiAoc1syXSAhPSAnMScgJiYgc1syXSAhPSAnMicpIC8qIFN0b3AgYml0cyAqLworICAgICAgICAg ICAgcmV0dXJuKC0yKTsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBzdG9wYml0cyA9IHNb Ml0gLSAnMCc7CisgICAgICAgICAgaWYgKHogPT0gOCkgeyAgICAgICAgICAgICAgICAgLyogOCBi aXRzICsgcGFyaXR5IChvciBub3QpICovCisgICAgICAgICAgICAgIHBhcml0eSA9IDA7ICAgICAg ICAgICAgICAgLyogU2V0IHBhcml0eSAqLworICAgICAgICAgICAgICBod3Bhcml0eSA9IChzWzFd ID09ICduJykgPyAwIDogc1sxXTsKKyAgICAgICAgICAgICAgc2V0Y21hc2soOCk7ICAgICAgICAg ICAgICAvKiBBbHNvIHNldCBURVJNIEJZVEVTSVpFIHRvIDggKi8KKyAgICAgICAgICB9IGVsc2Ug eyAgICAgICAgICAgICAgICAgICAgICAvKiA3IGJpdHMgcGx1cyBwYXJpdHkgKi8KKyAgICAgICAg ICAgICAgcGFyaXR5ID0gKHNbMV0gPT0gJ24nKSA/IDAgOiBzWzFdOworICAgICAgICAgICAgICBo d3Bhcml0eSA9IDA7CisgICAgICAgICAgICAgIHNldGNtYXNrKDcpOyAgICAgICAgICAgICAgLyog QWxzbyBzZXQgVEVSTSBCWVRFU0laRSB0byA3ICovCisgICAgICAgICAgfQorI2lmZGVmIFROX0NP TVBPUlQKKyAgICAgICAgICBpZiAobmV0d29yayAmJiAhaXN0bmNvbXBvcnQoKSkKKyAgICAgICAg ICAgIHRuc2V0dGluZ3MocGFyaXR5LCBzdG9wYml0cyk7CisjZW5kaWYgLyogVE5fQ09NUE9SVCAq LworCisgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsgICAgICAgICAgLyogZnJvbSBTRVQg U0VSSUFMICovCisgICAgICB9CisKKyAgICAgIGNhc2UgWFlPUFRTOiB7ICAgICAgICAgICAgICAg ICAgICAvKiBTRVQgT1BUSU9OUyAqLworICAgICAgICAgIGV4dGVybiBpbnQgc2V0ZGlyb3B0cygp OworICAgICAgICAgIGV4dGVybiBpbnQgc2V0dHlwb3B0cygpOworI2lmZGVmIENLUFVSR0UKKyAg ICAgICAgICBleHRlcm4gaW50IHNldHB1cmdvcHRzKCk7CisjZW5kaWYgLyogQ0tQVVJHRSAqLwor ICAgICAgICAgIGlmICgoeCA9IGNta2V5KG9wdHN0YWIsbm9wdHN0YWIsImZvciBjb21tYW5kIiwi IiwgeHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgICAgc3dp dGNoICh4KSB7CisjaWZuZGVmIE5PRlJJTExTCisgICAgICAgICAgICBjYXNlIFhYREVMOgorICAg ICAgICAgICAgICByZXR1cm4oc2V0ZGVsb3B0cygpKTsKKyNlbmRpZiAvKiBOT0ZSSUxMUyAqLwor ICAgICAgICAgICAgY2FzZSBYWERJUjoKKyAgICAgICAgICAgICAgcmV0dXJuKHNldGRpcm9wdHMo KSk7CisgICAgICAgICAgICBjYXNlIFhYVFlQOgorICAgICAgICAgICAgICByZXR1cm4oc2V0dHlw b3B0cygpKTsKKyNpZmRlZiBDS1BVUkdFCisgICAgICAgICAgICBjYXNlIFhYUFVSR0U6CisgICAg ICAgICAgICAgIHJldHVybihzZXRwdXJnb3B0cygpKTsKKyNlbmRpZiAvKiBDS1BVUkdFICovCisg ICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICByZXR1cm4oLTIpOworICAgICAgICAg IH0KKyAgICAgIH0KKyNlbmRpZiAvKiBOT0xPQ0FMICovCisjaWZuZGVmIE5PWEZFUgorICAgICAg Y2FzZSBYWVE4RkxHOiB7CisgICAgICAgICAgZXh0ZXJuIGludCBxOGZsYWc7CisgICAgICAgICAg cmV0dXJuKHNldG9uKCZxOGZsYWcpKTsKKyAgICAgIH0KKyAgICAgIGNhc2UgWFlUSU1FUjogewor ICAgICAgICAgIGV4dGVybiBpbnQgYXNrdGltZXI7CisgICAgICAgICAgeSA9IGNtbnVtKCJUaW1l IGxpbWl0IGZvciBBU0sgY29tbWFuZCwgc2Vjb25kcyIsIjAiLDEwLCZ4LHh4c3RyaW5nKTsKKyNp ZmRlZiBRTlgxNgorICAgICAgICAgIHJldHVybihzZXRudW0oJmFza3RpbWVyLHgseSwzMjc2Nykp OworI2Vsc2UKKyAgICAgICAgICByZXR1cm4oc2V0bnVtKCZhc2t0aW1lcix4LHksODY0MDApKTsK KyNlbmRpZiAvKiBRTlgxNiAqLworICAgICAgfQorICAgICAgY2FzZSBYWUZBQ0tCOiB7CisgICAg ICAgICAgZXh0ZXJuIGludCBmYWNrYnVnOworICAgICAgICAgIHJldHVybihzZXRvbigmZmFja2J1 ZykpOworICAgICAgfQorI2VuZGlmIC8qIE5PWEZFUiAqLworCisgICAgICBjYXNlIFhZSElOVFM6 CisgICAgICAgIHJldHVybihzZXRvbigmaGludHMpKTsKKworI2lmbmRlZiBOT1NQTAorICAgICAg Y2FzZSBYWUVWQUw6IHsKKyAgICAgICAgICBleHRlcm4gaW50IG9sZGV2YWw7CisgICAgICAgICAg aWYgKCh4ID0gY21rZXkob2xkbmV3LDIsIiIsIiIsIHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAg ICAgcmV0dXJuKHgpOworICAgICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkKKyAgICAgICAg ICAgIHJldHVybih5KTsKKyAgICAgICAgICBvbGRldmFsID0geDsKKyAgICAgICAgICByZXR1cm4o c3VjY2VzcyA9IDEpOworICAgICAgfQorI2VuZGlmIC8qIE5PU1BMICovCisKKyNpZm5kZWYgTk9Y RkVSCisgICAgICBjYXNlIFhZRkFDS1A6IHsKKyAgICAgICAgICBleHRlcm4gaW50IGZhY2twYXRo OworICAgICAgICAgIHJldHVybihzZXRvbigmZmFja3BhdGgpKTsKKyAgICAgIH0KKyNlbmRpZiAv KiBOT1hGRVIgKi8KKworICAgICAgY2FzZSBYWVFOWFBMOiB7CisgICAgICAgICAgZXh0ZXJuIGlu dCBxbnhwb3J0bG9jazsKKyAgICAgICAgICByZXR1cm4oc2V0b24oJnFueHBvcnRsb2NrKSk7Cisg ICAgICB9CisKKyNpZm5kZWYgTk9DTURMCisjaWZkZWYgSUtTRAorICAgICAgY2FzZSBYWUlLUzog eworICAgICAgICAgIGludCBzZXRpa3MoKTsKKyAgICAgICAgICByZXR1cm4oc2V0aWtzKCkpOwor ICAgICAgfQorI2VuZGlmIC8qIElLU0QgKi8KKyNlbmRpZiAvKiBOT0NNREwgKi8KKworI2lmZGVm IENLUk9PVAorICAgICAgY2FzZSBYWVJPT1Q6CisgICAgICAgIHJldHVybihkb2Nocm9vdCgpKTsK KyNlbmRpZiAvKiBDS1JPT1QgKi8KKworI2lmbmRlZiBOT1NQTAorI2lmbmRlZiBOT1NFWFAKKyAg ICAgIGNhc2UgWFlTRVhQOiB7CisgICAgICAgICAgaWYgKCh4ID0gY21rZXkoc2V4cHRhYiwzLCIi LCIiLCB4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgICBz d2l0Y2ggKHgpIHsKKyAgICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICAgaWYgKCh4ID0g Y21rZXkob29hdGFiLDMsIiIsImF1dG9tYXRpYyIsIHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAg ICAgICAgIHJldHVybih4KTsKKyAgICAgICAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKQor ICAgICAgICAgICAgICAgIHJldHVybih5KTsKKyAgICAgICAgICAgICAgc2V4cGVjaG8gPSB4Owor ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMTogeworICAgICAgICAgICAg ICAgIGludCBpLCB4eDsKKyAgICAgICAgICAgICAgICB4eCA9IHNleHBtYXhkZXA7CisgICAgICAg ICAgICAgICAgaWYgKCh5ID0gY21udW0oIk1heGltdW0gcmVjdXJzaW9uIGRlcHRoIiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAiMTAwMCIsMTAsJngseHhzdHJpbmcpKSA8IDApCisg ICAgICAgICAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgICAgICAgICAgeiA9IHNldG51bSgm c2V4cG1heGRlcCx4LHksLTEpOworICAgICAgICAgICAgICAgIGlmICh6IDwgMCkKKyAgICAgICAg ICAgICAgICAgIHJldHVybih6KTsKKyAgICAgICAgICAgICAgICBpZiAoc3hyZXN1bHQpIHsgICAg ICAgICAvKiBGcmVlIG9sZCBzdGFjayBpZiBhbGxvY2F0ZWQgKi8KKyAgICAgICAgICAgICAgICAg ICAgZm9yIChpID0gMDsgaSA8IHh4OyBpKyspCisgICAgICAgICAgICAgICAgICAgICAgaWYgKHN4 cmVzdWx0W2ldKSBmcmVlKHN4cmVzdWx0W2ldKTsKKyAgICAgICAgICAgICAgICAgICAgZnJlZSgo Y2hhciAqKXN4cmVzdWx0KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN4cmxlbikgZnJlZSgo Y2hhciAqKXN4cmxlbik7CisgICAgICAgICAgICAgICAgICAgIHN4cmVzdWx0ID0gTlVMTDsKKyAg ICAgICAgICAgICAgICAgICAgc3hybGVuID0gTlVMTDsKKyAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisJICAgIGNhc2UgMjoKKwkgICAgICBy ZXR1cm4oc2V0b24oJnNleHB0cnVuYykpOworICAgICAgICAgIH0KKyAgICAgICAgICByZXR1cm4o c3VjY2VzcyA9IDEpOworICAgICAgfQorI2VuZGlmIC8qIE5PU0VYUEwgKi8KKyNlbmRpZiAvKiBO T1NQTCAqLworCisjaWZkZWYgTkVXRlRQCisgICAgICBjYXNlIFhZR1BSOiB7CisgICAgICAgICAg ZXh0ZXJuIHN0cnVjdCBrZXl0YWIgZ3BydGFiW107CisgICAgICAgICAgZXh0ZXJuIGludCBmdHBn ZXQ7CisgICAgICAgICAgaWYgKCh4ID0gY21rZXkoZ3BydGFiLDMsIiIsImtlcm1pdCIsIHh4c3Ry aW5nKSkgPCAwKQorICAgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICAgIGlmICgoeSA9IGNt Y2ZtKCkpIDwgMCkKKyAgICAgICAgICAgIHJldHVybih5KTsKKyAgICAgICAgICBmdHBnZXQgPSB4 OworICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisgICAgICB9CisjZW5kaWYgLyogTkVX RlRQICovCisKKyNpZmRlZiBBTllTU0gKKyAgICAgIGNhc2UgWFlTU0g6CisgICAgICAgIHJldHVy bihkb3NldHNzaCgpKTsKKyNlbmRpZiAvKiBBTllTSEggKi8KKworI2lmZGVmIFNGVFBfQlVJTFRJ TgorICAgICAgY2FzZSBYWVNGVFA6CisgICAgICAgIHJldHVybihkb3NldHNmdHAoKSk7CisjZW5k aWYgLyogU0ZUUF9CVUlMVElOICovCisKKyNpZmRlZiBMT0NVUworICAgICAgY2FzZSBYWUxPQ1VT OgorICAgICAgICAgIGlmICgoeCA9IGNta2V5KGxvY3VzdGFiLG5sb2N1c3RhYiwiIiwKKyNpZmRl ZiBLVUkKKwkJCSAiYXNrIgorI2Vsc2UKKwkJCSAiYXV0byIKKyNlbmRpZiAvKiBLVUkgKi8KKwkJ CSAseHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgICAgaWYg KCh5ID0gY21jZm0oKSkgPCAwKQorICAgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICAgIGlm ICh4ID09IDIgfHwgeCA9PSAzKSB7CS8qIEFVVE8gb3IgQVNLICovCisgICAgICAgICAgICAgIHNl dGF1dG9sb2N1cyh4IC0gMSk7CS8qIFR3byBmb3JtcyBvZiBhdXRvbWF0aWMgbG9jdXNpbmcgKi8K KwkgICAgICAvKiBzZXRsb2N1cygxLDApOyAqLyAgICAgIC8qIHdlJ3JlIG5vdCBjaGFuZ2luZyB0 aGUgbG9jdXMgaGVyZSAqLworICAgICAgICAgIH0gZWxzZSB7CQkJLyogTE9DQUwgb3IgUkVNT1RF ICovCisgICAgICAgICAgICAgIHNldGF1dG9sb2N1cygwKTsJCS8qIE5vIGF1dG9tYXRpYyBMb2N1 cyBjaGFuZ2luZyAqLworICAgICAgICAgICAgICBzZXRsb2N1cyh4LDApOwkJLyogU2V0IExvY3Vz IGFzIHJlcXVlc3RlZCAqLworICAgICAgICAgIH0KKyAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9 IDEpOworI2VuZGlmIC8qIExPQ1VTICovCisKKyNpZmRlZiBLVUkKKyAgICAgIGNhc2UgWFlHVUk6 CisgICAgICAgIHJldHVybihzZXRndWkoKSk7CisjZW5kaWYgLyogS1VJICovCisKKyNpZm5kZWYg Tk9GUklMTFMKKyNpZm5kZWYgTk9SRU5BTUUKKyAgICAgIGNhc2UgWFlfUkVOOgkJCS8qIFNFVCBS RU5BTUUgKi8KKwlyZXR1cm4oc2V0cmVuYW1lKCkpOworI2VuZGlmCS8qIE5PUkVOQU1FICovCisj ZW5kaWYJLyogTk9GUklMTFMgKi8KKworI2lmbmRlZiBOT1BVU0gKKyNpZmRlZiBDS19SRURJUgor I2lmbmRlZiBOT1hGRVIKKyAgICAgIGNhc2UgWFlFWFRSTjoJCQkvKiBTRVQgRVhURVJOQUwtUFJP VE9DT0wgKi8KKwlyZXR1cm4oc2V0ZXh0ZXJuKCkpOworI2VuZGlmCS8qIE5PWEZFUiAqLworI2Vu ZGlmCS8qIENLX1JFRElSICovCisjZW5kaWYJLyogTk9QVVNIICovCisKKyNpZm5kZWYgTk9TUEwK KyAgICAgIGNhc2UgWFlWQVJFVjoJCQkvKiBTRVQgVkFSSUFCTEUtRVZBTFVBVElPTiAqLworCXJl dHVybihzZXR2YXJldmFsKCkpOworI2VuZGlmCS8qIE5PU1BMICovCisKKyAgICAgIGRlZmF1bHQ6 CisgICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKKyAgICAgICAgIHBy aW50ZigiTm90IGltcGxlbWVudGVkIC0gJXNcbiIsY21kYnVmKTsKKyAgICAgICAgIHJldHVybihz dWNjZXNzID0gMCk7CisgICAgfQorfQorCisvKgorICBIIFUgUCBPIEsgIC0tICBJcyBIYW5ndXAg T0s/CisKKyAgSXNzdWVzIGEgd2FybmluZyBhbmQgZ2V0cyBPSyBmcm9tIHVzZXIgZGVwZW5kaW5n IG9uIHdoZXRoZXIgYSBjb25uZWN0aW9uCisgIHNlZW1zIHRvIGJlIG9wZW4gYW5kIHdoYXQgdGhl IFNFVCBFWElUIFdBUk5JTkcgc2V0dGluZyBpcy4gIFJldHVybnM6CisgICAgMCBpZiBub3QgT0sg dG8gaGFuZyB1cCBvciBleGl0IChpLmUuIHVzZXIgc2FpZCBObyk7CisgICAgbm9uemVybyBpZiBP Sy4KKyAgQXJndW1lbnQgeCBpcyB1c2VkIHRvIGRpZmZlcmVudGlhdGUgdGhlIEVYSVQgY29tbWFu ZCBmcm9tIFNFVCBMSU5FIC8gSE9TVC4KKyovCitpbnQKK2h1cG9rKHgpIGludCB4OyB7ICAgICAg ICAgICAgICAgICAgICAgICAvKiBSZXR1cm5zIDEgaWYgT0ssIDAgaWYgbm90IE9LICovCisgICAg aW50IHksIHogPSAxOworICAgIGV4dGVybiBpbnQgZXhpdGhhbmd1cDsKKyNpZmRlZiBWTVMKKyAg ICBleHRlcm4gaW50IGJhdGNoOworCisgICAgaWYgKGJhdGNoKSAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogTm8gd2FybmluZ3MgaW4gYmF0Y2ggKi8KKyAgICAgIHJldHVybigxKTsKKyNlbHNl CisjaWZkZWYgVU5JWAorICAgIGlmIChiYWNrZ3JkKSAgICAgICAgICAgICAgICAgICAgICAgIC8q IE5vIHdhcm5pbmdzIGluIGJhY2tncm91bmQgKi8KKyAgICAgIHJldHVybigxKTsKKyNlbmRpZiAv KiBVTklYICovCisjZW5kaWYgLyogVk1TICovCisKKyNpZm5kZWYgSzk1RworICAgIGRlYnVnKEYx MDEsImh1cG9rIGxvY2FsIiwiIixsb2NhbCk7CisKKyAgICBpZiAoIWxvY2FsKSAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBObyB3YXJuaW5ncyBpbiByZW1vdGUgbW9kZSAqLworICAgICAgcmV0 dXJuKDEpOworI2VuZGlmIC8qIEs5NUcgKi8KKworICAgIGlmICh4ID09IDAgJiYgZXhpdGhhbmd1 cCA9PSAwKSAgICAgIC8qIEVYSVQgYW5kIEVYSVQgSEFOR1VQIGlzIE9GRiAqLworICAgICAgcmV0 dXJuKDEpOworCisgICAgZGVidWcoRjEwMSwiaHVwb2sgeCIsIiIseCk7CisgICAgZGVidWcoRjEw MSwiaHVwb2sgeGl0d2FybiIsIiIseGl0d2Fybik7CisgICAgZGVidWcoRjEwMSwiaHVwb2sgbmV0 d29yayIsIiIsbmV0d29yayk7CisgICAgZGVidWcoRjEwMSwiaHVwb2sgaGF2ZWxpbmUiLCIiLGhh dmVsaW5lKTsKKworICAgIGlmICgobG9jYWwgJiYgeGl0d2FybikgfHwgICAgICAgICAgIC8qIElz IGEgY29ubmVjdGlvbiBvcGVuPyAqLworICAgICAgICAoIXggJiYgeGl0d2FybiA9PSAyKSkgeyAg ICAgICAgIC8qIE9yIEFsd2F5cyBnaXZlIHdhcm5pbmcgb24gRVhJVCAqLworICAgICAgICBpbnQg bmVlZHdhcm4gPSAwOworICAgICAgICBjaGFyIHdhcm5pbmdbMjU2XTsKKworICAgICAgICBpZiAo bmV0d29yaykgeworICAgICAgICAgICAgaWYgKHR0Y2hrKCkgPj0gMCkKKyAgICAgICAgICAgICAg bmVlZHdhcm4gPSAxOworICAgICAgICAgICAgLyogQSBjb25uZWN0aW9uIHNlZW1zIHRvIGJlIG9w ZW4gYnV0IGl0IGNhbid0IHBvc3NpYmx5IGJlICovCisgICAgICAgICAgICBpZiAoIWhhdmVsaW5l KQorICAgICAgICAgICAgICBuZWVkd2FybiA9IDA7CisgICAgICAgICAgICBpZiAobmVlZHdhcm4p IHsKKyAgICAgICAgICAgICAgICBpZiAoc3RyY21wKHR0bmFtZSwiKiIpKQorICAgICAgICAgICAg ICAgICAgICBja21ha21zZyh3YXJuaW5nLDI1NiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICIgQSBuZXR3b3JrIGNvbm5lY3Rpb24gdG8gIix0dG5hbWUsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAiIG1pZ2h0IHN0aWxsIGJlIGFjdGl2ZS5cbiIsTlVMTCk7CisgICAgICAg ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgY2tzdHJuY3B5KHdhcm5pbmcsCisgICAg ICAgICAgICAgICAgICAgIiBBbiBpbmNvbWluZyBuZXR3b3JrIGNvbm5lY3Rpb24gbWlnaHQgc3Rp bGwgYmUgYWN0aXZlLlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjU2KTsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBT ZXJpYWwgY29ubmVjdGlvbiAqLworICAgICAgICAgICAgaWYgKGNhcnJpZXIgPT0gQ0FSX09GRikg ICAgIC8qIFNFVCBDQVJSSUVSIE9GRiAqLworICAgICAgICAgICAgICBuZWVkd2FybiA9IDA7ICAg ICAgICAgICAgIC8qIHNvIHdlIGRvbid0IGNhcmUgYWJvdXQgY2Fycmllci4gKi8KKyAgICAgICAg ICAgIGVsc2UgaWYgKCh5ID0gdHRnbWRtKCkpID49IDApIC8qIGVsc2UsIGdldCBtb2RlbSBzaWdu YWxzICovCisgICAgICAgICAgICAgIG5lZWR3YXJuID0gKHkgJiBCTV9EQ0QpOyAgLyogQ2hlY2sg Zm9yIGNhcnJpZXIgKi8KKyAgICAgICAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAv KiBJZiB3ZSBjYW4ndCBnZXQgbW9kZW0gc2lnbmFscy4uLiAqLworICAgICAgICAgICAgICBuZWVk d2FybiA9ICh0dGNoaygpID49IDApOworICAgICAgICAgICAgLyogQSBjb25uZWN0aW9uIHNlZW1z IHRvIGJlIG9wZW4gYnV0IGl0IGNhbid0IHBvc3NpYmx5IGJlICovCisgICAgICAgICAgICBpZiAo IWhhdmVsaW5lIHx8ICFleGl0aGFuZ3VwKQorICAgICAgICAgICAgICBuZWVkd2FybiA9IDA7Cisg ICAgICAgICAgICBpZiAobmVlZHdhcm4pCisgICAgICAgICAgICAgICAgY2ttYWttc2cod2Fybmlu ZywyNTYsCisgICAgICAgICAgICAgICAgICAgICAiIEEgc2VyaWFsIGNvbm5lY3Rpb24gbWlnaHQg c3RpbGwgYmUgYWN0aXZlIG9uICIsCisgICAgICAgICAgICAgICAgICAgICB0dG5hbWUsIi5cbiIs TlVMTCk7CisgICAgICAgIH0KKworLyogSWYgYSB3YXJuaW5nIHdhcyBpc3N1ZWQsIGdldCB1c2Vy J3MgcGVybWlzc2lvbiB0byBFWElULiAqLworCisgICAgICAgIGlmIChuZWVkd2FybiB8fCAoIXgg JiYgeGl0d2FybiA9PSAyCisjaWZuZGVmIEs5NUcKKwkJCSYmIGxvY2FsCisjZW5kaWYgLyogSzk1 RyAqLworCQkJICkpIHsKKyAgICAgICAgICAgIGlmICggIW5lZWR3YXJuICkKKyAgICAgICAgICAg ICAgICBja3N0cm5jcHkod2FybmluZywgIk5vIGFjdGl2ZSBjb25uZWN0aW9ucyIsIDI1Nik7CisK KyNpZmRlZiBDT01NRU5UCisJICAgIHByaW50ZigiJXMiLHdhcm5pbmcpOworICAgICAgICAgICAg eiA9IGdldHllc25vKHggPyAiT0sgdG8gY2xvc2U/ICIgOiAiT0sgdG8gZXhpdD8gIiwwKTsKKyAg ICAgICAgICAgIGRlYnVnKEYxMDEsImh1cG9rIGdldHllc25vIiwiIix6KTsKKyAgICAgICAgICAg IGlmICh6IDwgLTMpIHogPSAwOworI2Vsc2UKKwkgICAgeiA9IHVxX29rKHdhcm5pbmcsCisJCSAg ICAgIHggPyAiT0sgdG8gY2xvc2U/ICIgOiAiT0sgdG8gZXhpdD8gIiwKKwkJICAgICAgMywKKwkJ ICAgICAgTlVMTCwKKwkJICAgICAgMAorCQkgICAgICApOworICAgICAgICAgICAgZGVidWcoRjEw MSwiaHVwb2sgdXFfb2siLCIiLHopOworCSAgICBpZiAoeiA8IDApIHogPSAwOworI2VuZGlmIC8q IENPTU1FTlQgKi8KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4oeik7Cit9CisKKyNpZm5k ZWYgTk9TSE9XCitWT0lECitzaG9jdGwoKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogU0hPVyBDT05UUk9MLVBSRUZJWElORyAqLworI2lmZGVmIENLX1NQRUVECisgICAgaW50IGk7 CisjaWZkZWYgT1MyCisgICAgaW50IHplcm87CisjZW5kaWYgLyogT1MyICovCisgICAgcHJpbnRm KAorIlxuY29udHJvbCBxdW90ZSA9ICVkLCBhcHBsaWVkIHRvICgwID0gdW5wcmVmaXhlZCwgMSA9 IHByZWZpeGVkKTpcblxuIiwKKyAgICAgICAgICAgbXljdGxxKTsKKyNpZmRlZiBPUzIKKyNpZm5k ZWYgVU5QUkVGSVhaRVJPCisgICAgemVybyA9IGN0bHBbMF07CisgICAgaWYgKHByb3RvY29sID09 IFBST1RPX0spICAgICAgICAgICAgLyogWmVybyBjYW4ndCBiZSB1bnByZWZpeGVkICovCisgICAg ICBjdGxwWzBdID0gMTsgICAgICAgICAgICAgICAgICAgICAgLyogZm9yIEtlcm1pdCAqLworI2Vu ZGlmIC8qIFVOUFJFRklYWkVSTyAqLworI2VuZGlmIC8qIE9TMiAqLworICAgIGZvciAoaSA9IDA7 IGkgPCAxNjsgaSsrKSB7CisgICAgICAgIHByaW50ZigiICAlM2Q6ICVkICAgJTNkOiAlZCAiLGks Y3RscFtpXSwgaSsxNiwgY3RscFtpKzE2XSk7CisgICAgICAgIGlmIChpID09IDE1KQorICAgICAg ICAgIHByaW50ZigiICAxMjc6ICVkIixjdGxwWzEyN10pOworICAgICAgICBlbHNlCisgICAgICAg ICAgcHJpbnRmKCIgICAgICAgICIpOworICAgICAgICBwcmludGYoIiAgJTNkOiAlZCAgICUzZDog JWQgIixpKzEyOCxjdGxwW2krMTI4XSwgaSsxNDQsIGN0bHBbaSsxNDRdKTsKKyAgICAgICAgaWYg KGkgPT0gMTUpICBwcmludGYoIiAgMjU1OiAlZCIsY3RscFsyNTVdKTsKKyAgICAgICAgcHJpbnRm KCJcbiIpOworICAgIH0KKyAgICBwcmludGYoIlxuIik7CisjaWZuZGVmIFVOUFJFRklYWkVSTwor I2lmZGVmIE9TMgorICAgIGN0bHBbMF0gPSB6ZXJvOworI2VuZGlmIC8qIE9TMiAqLworI2VuZGlm IC8qIFVOUFJFRklYWkVSTyAqLworCisjZW5kaWYgLyogQ0tfU1BFRUQgKi8KK30KKworI2lmbmRl ZiBOT1hGRVIKK1ZPSUQKK3Nob2RibCgpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBTSE9XIERPVUJMRS9JR05PUkUgKi8KKyNpZmRlZiBDS1hYQ0hBUgorICAgIGludCBpLCBuID0g MDsKKyAgICBwcmludGYoIlxuU0VUIFNFTkQgRE9VQkxFIGNoYXJhY3RlcnM6XG4iKTsKKyAgICBm b3IgKGkgPSAwOyBpIDwgMjU1OyBpKyspIHsKKyAgICAgICAgaWYgKGRibHRbaV0gJiAyKSB7Cisg ICAgICAgICAgICBuKys7CisgICAgICAgICAgICBwcmludGYoIiAlZCIsIGkpOworICAgICAgICB9 CisgICAgfQorICAgIGlmIChuID09IDApCisgICAgICBwcmludGYoIiAobm9uZSkiKTsKKyAgICBu ID0gMDsKKyAgICBwcmludGYoIlxuU0VUIFJFQ0VJVkUgSUdOT1JFIGNoYXJhY3RlcnM6XG4iKTsK KyAgICBmb3IgKGkgPSAwOyBpIDwgMjU1OyBpKyspIHsKKyAgICAgICAgaWYgKGRibHRbaV0gJiAx KSB7CisgICAgICAgICAgICBuKys7CisgICAgICAgICAgICBwcmludGYoIiAlZCIsIGkpOworICAg ICAgICB9CisgICAgfQorICAgIGlmIChuID09IDApCisgICAgICBwcmludGYoIiAobm9uZSkiKTsK KyAgICBwcmludGYoIlxuXG4iKTsKKyNlbmRpZiAvKiBDS1hYQ0hBUiAqLworfQorI2VuZGlmIC8q IE5PWEZFUiAqLworI2VuZGlmIC8qIE5PU0hPVyAqLworCisjaWZuZGVmIE5PUFVTSAorI2lmZGVm IENLX1JFWFgKKy8qCisgIFJleHggY29tbWFuZC4gIE5vdGUsIHRoaXMgaXMgbm90IE9TLzItc3Bl Y2lmaWMsIGJlY2F1c2UgUmV4eCBhbHNvIHJ1bnMKKyAgb24gb3RoZXIgc3lzdGVtcyB3aGVyZSBD LUtlcm1pdCBhbHNvIHJ1bnMsIGxpa2UgdGhlIEFtaWdhLgorKi8KKyNkZWZpbmUgUkVYQlVGTCAx MDAgICAgICAgICAgICAgICAgICAgICAvKiBDaGFuZ2UgdGhpcyBpZiBuZWNjZXNzYXJ5ICovCitj aGFyIHJleHhidWZbUkVYQlVGTF0gPSB7ICdcMCcgfTsgICAgICAgLyogUmV4eCdzIHJldHVybiB2 YWx1ZSAoc3RyaW5nKSAqLworCitpbnQKK2RvcmV4eCgpIHsKKyAgICBpbnQgeCwgeTsKKyAgICBj aGFyICpyZXh4Y21kOworCisgICAgICAgIGlmICgoeCA9IGNtdHh0KCJSZXh4IGNvbW1hbmQiLCIi LCZyZXh4Y21kLHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgIHJldHVybih4KTsKKworI2lmZGVm IElLU0QKKyAgICBpZiAoaW5zZXJ2ZXIpIHsKKyAgICAgICAgcHJpbnRmKCI/U29ycnksIGNvbW1h bmQgZGlzYWJsZWQuXHJcbiIpOworICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOworICAgIH0K KyNlbmRpZiAvKiBJS1NEICovCisjaWZkZWYgQ0tfQVBDCisgICAgLyogRG9uJ3QgbGV0IHRoaXMg YmUgc2V0IHJlbW90ZWx5ICovCisgICAgaWYgKGFwY2FjdGl2ZSA9PSBBUENfTE9DQUwgfHwKKyAg ICAgICAgYXBjYWN0aXZlID09IEFQQ19SRU1PVEUgJiYgIShhcGNzdGF0dXMgJiBBUENfVU5DSCkp CisgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOworI2VuZGlmIC8qIENLX0FQQyAqLworCisgICAg ICAgIGNrc3RybmNweShsaW5lLHJleHhjbWQsTElOQlVGU0laKTsKKyAgICAgICAgcmV4eGNtZCA9 IGxpbmU7CisjaWZkZWYgT1MyCisgICAgICAgIHJldHVybihvczJyZXh4KHJleHhjbWQscmV4eGJ1 ZixSRVhCVUZMKSk7CisjZWxzZSAvKiAhT1MyICovCisgICAgICAgIHByaW50ZigiU29ycnksIG5v dGhpbmcgaGFwcGVucy5cbiIpOworICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOworI2VuZGlm IC8qIE9TMiAqLworfQorI2VuZGlmIC8qIENLX1JFWFggKi8KKyNlbmRpZiAvKiBOT1BVU0ggKi8K KyNlbHNlICAvKiBOT0lDUCAqLworVk9JRAorZG9sb2dlbmQoKSB7CisgICAgLyogRHVtbXkgd3Jp dGUgcmVjb3JkIHRvIGNvbm5lY3Rpb24gbG9nICovCit9CisjZW5kaWYgLyogTk9JQ1AgKi8KCmRp ZmYgLS1naXQgYS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdXVzNC5j IGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3V1czQuYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDY2MDNhCi0tLSAvZGV2L251bGwKKysrIGIv Y2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3V1czQuYwpAQCAtMCwwICsx LDE1MDg3IEBACisjaW5jbHVkZSAiY2tjc3ltLmgiCisKKy8qICBDIEsgVSBVIFMgNCAtLSAgIlVz ZXIgSW50ZXJmYWNlIiBmb3IgQy1LZXJtaXQsIHBhcnQgNCAgKi8KKworLyoKKyAgQXV0aG9yczoK KyAgICBGcmFuayBkYSBDcnV6IDxmZGNAY29sdW1iaWEuZWR1PiwKKyAgICAgIFRoZSBLZXJtaXQg UHJvamVjdCwgQ29sdW1iaWEgVW5pdmVyc2l0eSwgTmV3IFlvcmsgQ2l0eQorICAgIEplZmZyZXkg RSBBbHRtYW4gPGphbHRtYW5Ac2VjdXJlLWVuZHBvaW50cy5jb20+CisgICAgICBTZWN1cmUgRW5k cG9pbnRzIEluYy4sIE5ldyBZb3JrIENpdHkKKworICBDb3B5cmlnaHQgKEMpIDE5ODUsIDIwMTEs CisgICAgVHJ1c3RlZXMgb2YgQ29sdW1iaWEgVW5pdmVyc2l0eSBpbiB0aGUgQ2l0eSBvZiBOZXcg WW9yay4KKyAgICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgU2VlIHRoZSBDLUtlcm1pdCBDT1BZSU5H LlRYVCBmaWxlIG9yIHRoZQorICAgIGNvcHlyaWdodCB0ZXh0IGluIHRoZSBja2NtYWkuYyBtb2R1 bGUgZm9yIGRpc2NsYWltZXIgYW5kIHBlcm1pc3Npb25zLgorKi8KKworLyoKKyAgRmlsZSBja3V1 czQuYyAtLSBGdW5jdGlvbnMgbW92ZWQgZnJvbSBvdGhlciBja3V1cyouYyBtb2R1bGVzIHRvIGV2 ZW4KKyAgb3V0IHRoZWlyIHNpemVzLgorKi8KKyNpbmNsdWRlICJja2NkZWIuaCIKKyNpbmNsdWRl ICJja2Nhc2MuaCIKKyNpbmNsdWRlICJja2NrZXIuaCIKKyNpbmNsdWRlICJja2NuZXQuaCIgICAg ICAgICAgICAgICAgICAgICAvKiBOZXR3b3JrIHN5bWJvbHMgKi8KKyNpbmNsdWRlICJja3V1c3Iu aCIKKyNpbmNsdWRlICJja3V2ZXIuaCIKKyNpbmNsdWRlICJja2N4bGEuaCIgICAgICAgICAgICAg ICAgICAgICAvKiBDaGFyYWN0ZXIgc2V0cyAqLworCisjaWZkZWYgQ0tfQVVUSEVOVElDQVRJT04K KyNpbmNsdWRlICJja3VhdGguaCIKKyNlbmRpZiAvKiBDS19BVVRIRU5USUNBVElPTiAqLworI2lm ZGVmIENLX1NTTAorI2luY2x1ZGUgImNrX3NzbC5oIgorI2VuZGlmIC8qIENLX1NTTCAqLworCisj aWZkZWYgVk1TCisjaW5jbHVkZSA8ZXJybm8uaD4gICAgICAgICAgICAgICAgICAgICAgLyogRm9y IFx2KGVycm5vKSAqLworZXh0ZXJuIGNoYXIgKiBja3Ztc2VycnN0cih1bnNpZ25lZCBsb25nKTsK KyNpZm5kZWYgT0xEX1ZNUworI2luY2x1ZGUgPGxpYiRyb3V0aW5lcy5oPiAgICAgICAgICAgICAg IC8qIE5vdCBmb3IgVkFYIEMgMi40ICovCisjZWxzZQorI2luY2x1ZGUgPGxpYmRlZi5oPgorI2Vu ZGlmIC8qIE9MRF9WTVMgKi8KK19QUk9UT1RZUChpbnQgdm1zdHR5ZmQsICh2b2lkKSApOworI2Vu ZGlmIC8qIFZNUyAqLworCisjaWZkZWYgT1MyCisjaWZuZGVmIE5UCisjZGVmaW5lIElOQ0xfTk9Q TQorI2RlZmluZSBJTkNMX1ZJTyAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5lZWRlZCBmb3Ig Y2tvY29uLmggKi8KKyNpbmNsdWRlIDxvczIuaD4KKyN1bmRlZiBDT01NRU5UCisjZWxzZQorI2lu Y2x1ZGUgPHdpbmRvd3MuaD4KKyNpbmNsdWRlIDx0YXBpLmg+CisjaW5jbHVkZSAiY2tudGFwLmgi CisjZGVmaW5lIEFQSVJFVCBVTE9ORworI2VuZGlmIC8qIE5UICovCisjaW5jbHVkZSAiY2tvY29u LmgiCisjaW5jbHVkZSAiY2tvZXRjLmgiCitpbnQgU3RhcnRlZEZyb21EaWFsZXIgPSAwOworSFdO RCBod25kRGlhbGVyID0gMDsKK0xPTkcgS2VybWl0RGlhbGVySUQgPSAwOworI2lmZGVmIHB1dGNo YXIKKyN1bmRlZiBwdXRjaGFyCisjZW5kaWYgLyogcHV0Y2hhciAqLworI2RlZmluZSBwdXRjaGFy KHgpIGNvbm9jKHgpCisjaWZkZWYgQ0tfUElECisjaW5jbHVkZSA8cHJvY2Vzcy5oPgorI2VuZGlm IC8qIENLX1BJRCAqLworI2VuZGlmIC8qIE9TMiAqLworCisjaWZkZWYgS1VJCitleHRlcm4gc3Ry dWN0IGtleXRhYiAqIHRlcm1fZm9udDsKK2V4dGVybiBpbnQgbnRlcm1mb250LCB0dF9mb250LCB0 dF9mb250X3NpemU7CisjZW5kaWYgLyogS1VJICovCisKK2V4dGVybiB4eF9zdHJwIHh4c3RyaW5n OworCisjaWZkZWYgREVDX1RDUElQCisjaW5jbHVkZSA8ZGVzY3JpcD4KKyNpbmNsdWRlIDxkdmlk ZWY+CisjaW5jbHVkZSA8ZGNkZWY+CisjZW5kaWYgLyogREVDX1RDUElQICovCisKKyNpZmRlZiBG TkZMT0FUCisjaW5jbHVkZSA8bWF0aC5oPiAgICAgICAgICAgICAgICAgICAgICAgLyogRmxvYXRp bmctcG9pbnQgZnVuY3Rpb25zICovCisjZW5kaWYgLyogRk5GTE9BVCAqLworCitleHRlcm4gaW50 IHF1aWV0LCBuZXR3b3JrLCB4aXRzdGEsIGVzY2FwZSwgbm9wdXNoLCB4ZmVyc3RhdCwKKyAgZXhp dG9uY2xvc2UsIHRuX2V4aXQsIHR0bnByb3RvLCBhdXRvZGwsIGZsb3csIGJ5dGVvcmRlciwgd2hh dCwgbGFzdHhmZXI7CisKK2V4dGVybiBpbnQgZmlsZXBlZWssIG5zY2FuZmlsZSwgbWFrZXN0cmxl bjsKK2V4dGVybiBjaGFyICoga19pbmZvX2RpcjsKKworI2lmbmRlZiBNQUMKKyNpZm5kZWYgQU1J R0EKK2V4dGVybiBpbnQgdHR5ZmQ7CisjZW5kaWYgLyogTUFDICovCisjZW5kaWYgLyogQU1JR0Eg Ki8KKworI2lmZGVmIFROQ09ERQorZXh0ZXJuIGludCB0bl9ubG0sIHRuX2JfbmxtLCB0bl9iX3hm ZXIsIHRuX3NiX2J1ZzsKK2V4dGVybiBpbnQgdG5fcmVtX2VjaG87CitleHRlcm4gaW50IHRuX2Jf bWV1LCB0bl9iX3VtZSwgdG5fYXV0aF9rcmI1X2Rlc19idWc7CisjZW5kaWYgLyogVE5DT0RFICov CisKK3N0YXRpYyBjaGFyICogbGFzdGt3dmFsID0gTlVMTDsKKworY2hhciAqIHhmZXJmaWxlID0g TlVMTDsKK2ludCB4ZmVybG9nID0gMDsKKworZXh0ZXJuIGludCBsb2NhbCwgeGFyZ2MsIHN0YXlm bGcsIHJjZmxhZywgYmdzZXQsIGJhY2tncmQsIGNmaWxlZiwKKyAgaW5zZXJ2ZXIsIHNydmNkbXNn LCBzdWNjZXNzOworCisjaWZkZWYgVk1TCitleHRlcm4gaW50IGJhdGNoOworI2VuZGlmIC8qIFZN UyAqLworCitleHRlcm4gY2hhciBjbWRmaWxbXSwgKnZlcnNpbywgKmNreHN5cywgKip4YXJndjsK KyNpZmRlZiBERUJVRworZXh0ZXJuIGNoYXIgZGViZmlsW107ICAgICAgICAgICAgICAgICAgIC8q IERlYnVnIGxvZyBmaWxlIG5hbWUgKi8KK2V4dGVybiBpbnQgZGVidGltOworI2VuZGlmIC8qIERF QlVHICovCisKK2V4dGVybiBpbnQgbm9pbml0OworCitzdGF0aWMgY2hhciBuZGF0YnVmWzEwXTsK KworY2hhciAqbW9udGhzW10gPSB7CisgICAgIkphbiIsICJGZWIiLCAiTWFyIiwgIkFwciIsICJN YXkiLCAiSnVuIiwKKyAgICAiSnVsIiwgIkF1ZyIsICJTZXAiLCAiT2N0IiwgIk5vdiIsICJEZWMi Cit9OworCitjaGFyICoKK3p6bmRhdGUoKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBSZXR1cm5zIHRvZGF5J3MgZGF0ZSBhcyB5eXl5bW1kZCAqLworICAgIGNoYXIgKiBwID0gTlVM TDsKKyAgICBpbnQgeDsKKworLyogV0FSTklORyAtIFRoaXMgd2lsbCBmYWlsIGlmIGFzY3RpbWUo KSByZXR1cm5zIG5vbi1FbmdsaXNoIG1vbnRoIG5hbWVzICovCisKKyAgICB6dGltZSgmcCk7ICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBHZXQgImFzY3RpbWUiIHN0cmluZyAqLworICAgIGlm IChwID09IE5VTEwgfHwgKnAgPT0gTlVMKSByZXR1cm4oIiIpOworICAgIGZvciAoeCA9IDIwOyB4 IDwgMjQ7IHgrKykgICAgICAgICAgIC8qIHl5eXkgKi8KKyAgICAgIG5kYXRidWZbeCAtIDIwXSA9 IHBbeF07CisgICAgbmRhdGJ1Zls2XSA9IChjaGFyKSAoKHBbOF0gPT0gJyAnKSA/ICcwJyA6IHBb OF0pOworICAgIG5kYXRidWZbN10gPSBwWzldOyAgICAgICAgICAgICAgICAgIC8qIGRkICovCisg ICAgZm9yICh4ID0gMDsgeCA8IDEyOyB4KyspICAgICAgICAgICAgLyogbW0gKi8KKyAgICAgIGlm ICghc3RybmNtcChwKzQsbW9udGhzW3hdLDMpKSBicmVhazsKKyAgICBpZiAoeCA9PSAxMikgewor ICAgICAgICBuZGF0YnVmWzRdID0gbmRhdGJ1Zls1XSA9ICc/JzsKKyAgICB9IGVsc2UgeworICAg ICAgICB4Kys7CisgICAgICAgIG5kYXRidWZbNF0gPSAoY2hhcikgKCh4IDwgMTApID8gJzAnIDog JzEnKTsKKyAgICAgICAgbmRhdGJ1Zls1XSA9IChjaGFyKSAoKHggJSAxMCkgKyA0OCk7CisgICAg fQorICAgIG5kYXRidWZbOF0gPSBOVUw7CisgICAgZGVidWcoRjExMCwienpuZGF0ZSByZXR1cm4i LG5kYXRidWYsMCk7CisgICAgcmV0dXJuKChjaGFyICopbmRhdGJ1Zik7Cit9CisKKyNpZmRlZiBE Q01EQlVGCitleHRlcm4gc3RydWN0IGNtZHB0ciAqY21kc3RrOworZXh0ZXJuIGNoYXIgKmxpbmUs ICp0bXBidWY7CisjZWxzZQorZXh0ZXJuIHN0cnVjdCBjbWRwdHIgY21kc3RrW107CitleHRlcm4g Y2hhciBsaW5lW10sIHRtcGJ1ZltdOworI2VuZGlmIC8qIERDTURCVUYgKi8KKworI2lmZGVmIE9T MgorZXh0ZXJuIGNoYXIgZXhlZGlyW107CisjZWxzZQorZXh0ZXJuIGNoYXIgKiBleGVkaXI7Cisj ZW5kaWYgLyogT1MyICovCisKK2V4dGVybiBpbnQgbmV0dHlwZTsKKworI2lmbmRlZiBOT0lDUCAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1vc3Qgb2YgdGhpcyBmaWxlLi4uICovCisjaWZk ZWYgQ0tMT0dESUFMCitleHRlcm4gY2hhciBkaWFmaWxbXTsKKyNlbmRpZiAvKiBDS0xPR0RJQUwg Ki8KKworI2lmbmRlZiBBTUlHQQorI2lmbmRlZiBNQUMKKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNl bmRpZiAvKiBNQUMgKi8KKyNlbmRpZiAvKiBBTUlHQSAqLworCisjaWZkZWYgU1Y2OAkJCQkvKiBK dWx5IDIwMDYgYmVsaWV2ZSBpdCBvciBub3QgKi8KKyNpZm5kZWYgU0VFS19DVVIKKyNpbmNsdWRl IDx1bmlzdGQuaD4KKyNlbmRpZgkvKiBTRUVLX0NVUiAqLworI2VuZGlmCS8qIFNWNjggKi8KKwor I2lmZGVmIFNDTzMyCQkJCS8qIEp1bmUgMjAxMSBiZWxpZXZlIGl0IG9yIG5vdC4uLiAqLworI2lm ZGVmIFhFTklYCisjaWZuZGVmIFNFRUtfQ1VSCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYJ LyogU0VFS19DVVIgKi8KKyNlbmRpZgkvKiBYRU5JWCAqLworI2VuZGlmCS8qIFNDTzMyICovCisK KyNpZmRlZiBTVFJBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTdHJhdHVzIENvbXB1 dGVyLCBJbmMuICBWT1MgKi8KKyNpZmRlZiBwdXRjaGFyCisjdW5kZWYgcHV0Y2hhcgorI2VuZGlm IC8qIHB1dGNoYXIgKi8KKyNkZWZpbmUgcHV0Y2hhcih4KSBjb25vYyh4KQorI2lmZGVmIGdldGNo YXIKKyN1bmRlZiBnZXRjaGFyCisjZW5kaWYgLyogZ2V0Y2hhciAqLworI2RlZmluZSBnZXRjaGFy KHgpIGNvbmluYygwKQorI2VuZGlmIC8qIFNUUkFUVVMgKi8KKworCisjaWZkZWYgQU5ZWDI1Citl eHRlcm4gaW50IHJldmNhbGwsIGNsb3NnciwgY3VkYXRhOworaW50IHgyNXZlcjsKK2V4dGVybiBj aGFyIHVkYXRhW107CisjaWZuZGVmIElCTVgyNQorZXh0ZXJuIGludCBucGFkeDM7CitleHRlcm4g Q0hBUiBwYWRwYXJtc1tdOworZXh0ZXJuIHN0cnVjdCBrZXl0YWIgcGFkeDN0YWJbXTsKKyNlbmRp ZiAvKiAhSUJNWDI1ICovCisjaWZkZWYgSUJNWDI1CisvKiBnbG9iYWwgdmFyaWFibGVzIG9ubHkg YXZhaWxhYmxlIGZvciBJQk0gWC4yNSAtIHBvc3NpYmx5IGludGVyZXN0aW5nIGZvcgorICogb3Ro ZXIgaW1wbGVtZW50YXRpb25zCisgKi8KK2V4dGVybiB4MjVhZGRyX3QgbG9jYWxfbnVhOworZXh0 ZXJuIHgyNWFkZHJfdCByZW1vdGVfbnVhOworI2VuZGlmIC8qIElCTVgyNSAqLworI2VuZGlmIC8q IEFOWVgyNSAqLworCisjaWZkZWYgTkVUQ09OTgorI2lmbmRlZiBOT0RJQUwKK2V4dGVybiBpbnQg bm5ldGRpcjsKK2V4dGVybiBjaGFyICpuZXRkaXJbXTsKKyNlbmRpZiAvKiBOT0RJQUwgKi8KK2V4 dGVybiBjaGFyIGlwYWRkcltdOworCisjaWZkZWYgQ0tfTkVUQklPUworZXh0ZXJuIHVuc2lnbmVk IHNob3J0IG5ldGJpb3NBdmFpbDsKK2V4dGVybiB1bnNpZ25lZCBsb25nIE5ldGJldWlBUEk7Citl eHRlcm4gdW5zaWduZWQgY2hhciBOZXRCaW9zTmFtZVtdOworZXh0ZXJuIHVuc2lnbmVkIGNoYXIg TmV0Qmlvc0FkYXB0ZXI7CitleHRlcm4gdW5zaWduZWQgY2hhciBOZXRCaW9zTFNOOworI2VuZGlm IC8qIENLX05FVEJJT1MgKi8KKworI2lmZGVmIFRDUFNPQ0tFVAorZXh0ZXJuIGNoYXIgbXlpcGFk ZHJbXTsKK2V4dGVybiBpbnQgdGNwX3JkbnM7CisjaWZkZWYgQ0tfRE5TX1NSVgorZXh0ZXJuIGlu dCB0Y3BfZG5zX3NydjsKKyNlbmRpZiAvKiBDS19ETlNfU1JWICovCitleHRlcm4gY2hhciAqIHRj cF9hZGRyZXNzOworI2lmbmRlZiBOT0hUVFAKK2V4dGVybiBjaGFyICogdGNwX2h0dHBfcHJveHk7 CisjZW5kaWYgLyogTk9IVFRQICovCisjaWZkZWYgTlQKKyNpZmRlZiBDS19TT0NLUworZXh0ZXJu IGNoYXIgKiB0Y3Bfc29ja3Nfc3ZyOworI2lmZGVmIENLX1NPQ0tTX05TCitleHRlcm4gY2hhciAq IHRjcF9zb2Nrc19uczsKKyNlbmRpZiAvKiBDS19TT0NLU19OUyAqLworI2VuZGlmIC8qIENLX1NP Q0tTICovCisjZW5kaWYgLyogTlQgKi8KKworI2lmbmRlZiBOT1RDUE9QVFMKKyNpZmRlZiBTT0xf U09DS0VUCisjaWZkZWYgU09fTElOR0VSCitleHRlcm4gaW50IHRjcF9saW5nZXI7CitleHRlcm4g aW50IHRjcF9saW5nZXJfdG1vOworI2VuZGlmIC8qIFNPX0xJTkdFUiAqLworI2lmZGVmIFNPX0RP TlRST1VURQorZXh0ZXJuIGludCB0Y3BfZG9udHJvdXRlOworI2VuZGlmIC8qIFNPX0RPTlRST1VU RSAqLworI2lmZGVmIFRDUF9OT0RFTEFZCitleHRlcm4gaW50IHRjcF9ub2RlbGF5OworI2VuZGlm IC8qIFRDUF9OT0RFTEFZICovCisjaWZkZWYgU09fU05EQlVGCitleHRlcm4gaW50IHRjcF9zZW5k YnVmOworI2VuZGlmIC8qIFNPX1NOREJVRiAqLworI2lmZGVmIFNPX1JDVkJVRgorZXh0ZXJuIGlu dCB0Y3BfcmVjdmJ1ZjsKKyNlbmRpZiAvKiBTT19SQ1ZCVUYgKi8KKyNpZmRlZiBTT19LRUVQQUxJ VkUKK2V4dGVybiBpbnQgdGNwX2tlZXBhbGl2ZTsKKyNlbmRpZiAvKiBTT19LRUVQQUxJVkUgKi8K KyNlbmRpZiAvKiBTT0xfU09DS0VUICovCisjZW5kaWYgLyogTk9UQ1BPUFRTICovCisjZW5kaWYg LyogVENQU09DS0VUICovCisjZW5kaWYgLyogTkVUQ09OTiAqLworCitleHRlcm4gY2hhciAqIGZs b25hbWVbXTsKKworI2lmbmRlZiBOT1NQTAorZXh0ZXJuIGludCB2YXJldmFsOwkJCS8qIFZhcmlh YmxlIGV2YWx1YXRpb24gbWV0aG9kICovCitleHRlcm4gaW50IGZuZGlhZ3M7ICAgICAgICAgICAg ICAgICAgICAgLyogRnVuY3Rpb24gZGlhZ25vc3RpY3Mgb24vb2ZmICovCitleHRlcm4gaW50IGRp dmJ5emVybzsKK2ludCBpdHNhcGF0dGVybiA9IDA7CitpbnQgaXNpbmJ1ZmxlbiA9IDA7CitpbnQg aXNqb2luID0gMDsKKyNpZmRlZiBDS19BUEMKK2V4dGVybiBpbnQgYXBjYWN0aXZlOyAgICAgICAg ICAgICAgICAgICAvKiBOb256ZXJvID0gQVBDIGNvbW1hbmQgd2FzIHJlYydkICovCitleHRlcm4g aW50IGFwY3N0YXR1czsgICAgICAgICAgICAgICAgICAgLyogQXJlIEFQQyBjb21tYW5kcyBiZWlu ZyBwcm9jZXNzZWQ/ICovCisjaWZkZWYgRENNREJVRgorZXh0ZXJuIGNoYXIgKmFwY2J1ZjsgICAg ICAgICAgICAgICAgICAgIC8qIEFQQyBjb21tYW5kIGJ1ZmZlciAqLworI2Vsc2UKK2V4dGVybiBj aGFyIGFwY2J1ZltdOworI2VuZGlmIC8qIERDTURCVUYgKi8KKyNlbmRpZiAvKiBDS19BUEMgKi8K KworZXh0ZXJuIGNoYXIgZXZhbGJ1ZltdOyAgICAgICAgICAgICAgICAgIC8qIEVWQUxVQVRFIHJl c3VsdCAqLworZXh0ZXJuIGNoYXIgdWlkYnVmW10sIHB3YnVmW10sIHBybWJ1ZltdOworX1BST1RP VFlQKCBzdGF0aWMgY2hhciAqIGZuZXZhbCwgKGNoYXIgKiwgY2hhciAqIFtdLCBpbnQsIGNoYXIg KiApICk7CitfUFJPVE9UWVAoIHN0YXRpYyBWT0lEIG15ZmxzaCwgKHZvaWQpICk7CitfUFJPVE9U WVAoIHN0YXRpYyBjaGFyICogZ2V0aXAsIChjaGFyICopICk7CitfUFJPVE9UWVAoIGludCBkZWx0 YTJzZWMsIChjaGFyICosIGxvbmcgKikgKTsKKworI2lmZGVmIE5FV0ZUUAorX1BST1RPVFlQKCBj aGFyICogZnRwX2NwbF9tb2RlLCAodm9pZCkgKTsKK19QUk9UT1RZUCggY2hhciAqIGZ0cF9kcGxf bW9kZSwgKHZvaWQpICk7CitfUFJPVE9UWVAoIGNoYXIgKiBmdHBfYXV0aHR5cGUsICh2b2lkKSAp OworI2VuZGlmIC8qIE5FV0ZUUCAqLworCisjaWZuZGVmIE5PSFRUUAorX1BST1RPVFlQKCBjaGFy ICogaHR0cF9ob3N0LCAodm9pZCkgKTsKK19QUk9UT1RZUCggaW50IGh0dHBfaXNjb25uZWN0ZWQs ICh2b2lkKSApOworX1BST1RPVFlQKCBjaGFyICogaHR0cF9zZWN1cml0eSwgKHZvaWQpICk7Cisj ZW5kaWYgLyogTk9IVFRQICovCisKKyNpZm5kZWYgTk9TRVhQCitfUFJPVE9UWVAoIGNoYXIgKiBk b3NleHAsIChjaGFyICopICk7CitpbnQgZnNleHBmbGFnID0gMDsKKyNlbmRpZiAvKiBOT1NFWFAg Ki8KKworc3RhdGljIGNoYXIgaGV4ZGlnaXRzWzE2XSA9IHsKKyAgICAnMCcsJzEnLCcyJywnMycs JzQnLCc1JywnNicsJzcnLCc4JywnOScsJ0EnLCdCJywnQycsJ0QnLCdFJywnRicKK307CitleHRl cm4gY2hhciAqIHRlbXBkaXI7CisKKyNpZmRlZiBDS19SRVhYCitleHRlcm4gY2hhciByZXh4YnVm W107CisjZW5kaWYgLyogQ0tfUkVYWCAqLworCitleHRlcm4gaW50IHRmbGluZVtdOworCitjaGFy ICp3a2RheXNbXSA9IHsKKyAgICAiU3VuIiwgIk1vbiIsICJUdWUiLCAiV2VkIiwgIlRodSIsICJG cmkiLCAiU2F0IgorfTsKKyNlbmRpZiAvKiBOT1NQTCAqLworCisjaWZkZWYgT1MyCitleHRlcm4g Y2hhciBzdGFydHVwZGlyW10sIGluaWRpcltdOworI2Vsc2UKKyNpZmRlZiBWTVNPUlVOSVgKK2V4 dGVybiBjaGFyIHN0YXJ0dXBkaXJbXTsKKyNlbmRpZiAvKiBWTVNPUlVOSVggKi8KKyNlbmRpZiAv KiBPUzIgKi8KKworI2lmZGVmIE9TMgorX1BST1RPVFlQIChpbnQgb3MyZ2V0Y3AsICh2b2lkKSAp OworI2lmZGVmIFRDUFNPQ0tFVAorZXh0ZXJuIGNoYXIgdGNwbmFtZVtdOworI2VuZGlmIC8qIFRD UFNPQ0tFVCAqLworZXh0ZXJuIGludCB0Y3BfYXZhaWw7CisjaWZkZWYgREVDTkVUCitleHRlcm4g aW50IGRuZXRfYXZhaWw7CisjZW5kaWYgLyogREVDTkVUICovCisjaWZkZWYgU1VQRVJMQVQKK2V4 dGVybiBpbnQgc2xhdF9hdmFpbDsKKyNlbmRpZiAvKiBTVVBFUkxBVCAqLworCisjaWZuZGVmIE5P VEVSTQorZXh0ZXJuIGludCB0dF90eXBlLCBtYXhfdHQ7CitleHRlcm4gc3RydWN0IHR0X2luZm9f cmVjIHR0X2luZm9bXTsKKyNlbmRpZiAvKiBOT1RFUk0gKi8KK2V4dGVybiBpbnQgdHRfcm93c1td LCB0dF9jb2xzW107CisjZWxzZSAvKiBPUzIgKi8KK2V4dGVybiBpbnQgdHRfcm93cywgdHRfY29s czsKKyNlbmRpZiAvKiBPUzIgKi8KKworI2lmZGVmIENLX1RBUEkKK2V4dGVybiBpbnQgdHR0YXBp OworZXh0ZXJuIGludCB0YXBpcGFzczsKK2V4dGVybiBzdHJ1Y3Qga2V5dGFiICogdGFwaWxpbmV0 YWI7CitleHRlcm4gc3RydWN0IGtleXRhYiAqIF90YXBpbGluZXRhYjsKK2V4dGVybiBpbnQgbnRh cGlsaW5lOworI2VuZGlmIC8qIENLX1RBUEkgKi8KKworZXh0ZXJuIHN0cnVjdCBrZXl0YWIgY29s eHRhYltdOworZXh0ZXJuIGludCBuY29seDsKKworZXh0ZXJuIGNoYXIgdHRuYW1lW10sICp6aW5w dHIsICprZXJtcmM7CitleHRlcm4gY2hhciBpbmlkaXJbXTsKKworZXh0ZXJuIGludCBhY3RpdmVj bWQsIHJlbW9ubHksIGNtZF9yb3dzLCBjbWRfY29scywgcGFyaXR5LCBzZXNsb2csCisgIHNlc3Nm dCwgc29zaSwgaHdwYXJpdHksIHRzZWNzLCB4YXJncywgemluY250LCB0bGV2ZWwsIGluc2lsZW5j ZSwgY21kbXNrLAorICB0aW1pbnQsIHRpbWVmLCBpbmJ1ZnNpemUsIGRpYWxvZywgYmluYXJ5LCBj YXJyaWVyLCBjZHRpbW8sIGNtYXNrLCBkdXBsZXgsCisgIGZtYXNrLCBpbmVjaG8sIG5tYWMsIHR1 cm5jaCwgdHVybiwga2JjaGFyOworCisjaWZuZGVmIE5PWEZFUgorZXh0ZXJuIENIQVIgZW9sLCAg bXlwYWRjLCBteXN0Y2gsIHBhZGNoLCBzZW9sLCBzdGNociwgKiBlcGt0bXNnLCBmZW9sOworZXh0 ZXJuIGNoYXIgKmNrc3lzaWQ7CitleHRlcm4gc3RydWN0IGNrX3AgcHRhYltdOworZXh0ZXJuIGlu dAorICBwcm90b2NvbCwgcHJlZml4aW5nLCB4ZnJiZWwsIHhmcmNhbiwgeGZyaW50LCB4ZnJjaHIs IHhmcm51bSwgcGt0cGF1cywKKyAgbHNjYXByLCBsc2NhcHUsIHhmZXJtb2RlLCBkZXN0LCBzbG9z dGFydCwgbWF4cnBzLCBtYXhzcHMsIG1heHRyeSwgbXlwYWRuLAorICBucGFkLCBwa3R0aW0sIGJp Z3Jic2l6LCBiaWdzYnNpeiwga2VlcCwgYXRjYXByLCBhdXRvcGFyLCBiY3RyLCBiY3R1LAorICBj cnVuY2hlZCwgY2tkZWxheSwgZWJxLCBlYnFmbGcsIHBrdGxvZywgcmV0cmFucywgcnBhY2tldHMs IHJwdGZsZywgcnB0cSwKKyAgcnRpbW8sIHNwYWNrZXRzLCBzcHNpeiwgc3BzaXpmLCBzcHNpenIs IHRpbWVvdXRzLCBmbmNhY3QsIGZuY252LCB1cnBzaXosCisgIHdtYXgsIHdzbG90biwgd3Nsb3Ry LCBmZGlzcGxhLCBzcG1heCwgZm5ycGF0aCwgZm5zcGF0aCwgY3JjMTY7CisjZW5kaWYgLyogTk9Y RkVSICovCisKKyNpZmRlZiBPUzIKK2V4dGVybiBpbnQgenhwbjsKK2V4dGVybiBpbnQgdmlld29u bHk7CisjZW5kaWYgLyogT1MyICovCisKKyNpZm5kZWYgTk9YRkVSCisjaWZkZWYgR0ZUSU1FUgor ZXh0ZXJuIENLRkxPQVQgZnB0c2VjcywgZnB4ZnNlY3M7CisjZW5kaWYgLyogR0ZUSU1FUiAqLwor ZXh0ZXJuIGxvbmcgeGZzZWNzLCB0ZmNwczsKKworI2lmZGVmIENLX1RNUERJUgorZXh0ZXJuIGNo YXIgKmRsZGlyOworI2VuZGlmIC8qIENLX1RNUERJUiAqLworI2VuZGlmIC8qIE5PWEZFUiAqLwor CisjaWZkZWYgUkVDVVJTSVZFCitleHRlcm4gaW50IHJlY3Vyc2l2ZTsKKyNlbmRpZiAvKiBSRUNV UlNJVkUgKi8KKworI2lmZGVmIFZNUworZXh0ZXJuIGludCBmcmVjbDsKKyNlbmRpZiAvKiBWTVMg Ki8KKworZXh0ZXJuIENLX09GRl9UIGZmYywgdGZjLCB0bGNpLCB0bGNvOworZXh0ZXJuIGxvbmcg ZmlsY250LCBycHRuLCBzcGVlZCwgIGNjdSwgY2NwLCB2ZXJudW0sIHh2ZXJudW07CisKKyNpZm5k ZWYgTk9TUEwKK2V4dGVybiBjaGFyIGZzcGVjW10sIG15aG9zdFtdOworI2VuZGlmIC8qIE5PU1BM ICovCisKK2V4dGVybiBjaGFyICp0Zm5hbVtdOyAgICAgICAgICAgICAgICAgICAvKiBDb21tYW5k IGZpbGUgbmFtZXMgKi8KKworZXh0ZXJuIGNoYXIgcGt0ZmlsW10sICAgICAgICAgICAgICAgICAg IC8qIFBhY2tldCBsb2cgZmlsZSBuYW1lICovCisjaWZkZWYgVExPRworICB0cmFmaWxbXSwgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRyYW5zYWN0aW9uIGxvZyBmaWxlIG5hbWUgKi8K KyNlbmRpZiAvKiBUTE9HICovCisgIHNlc2ZpbFtdOyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogU2Vzc2lvbiBsb2cgZmlsZSBuYW1lICovCisKKyNpZm5kZWYgTk9YTUlUICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBUUkFOU01JVCBjb21tYW5kIHZhcmlhYmxlcyAqLworZXh0ZXJu IGNoYXIgeG1pdGJ1ZltdOworZXh0ZXJuIGludCB4bWl0ZiwgeG1pdGwsIHhtaXR4LCB4bWl0cywg eG1pdHcsIHhtaXR0OworI2VuZGlmIC8qIE5PWE1JVCAqLworCitleHRlcm4gaW50IGNtZGx2bDsK KworI2lmbmRlZiBOT1NQTAorLyogU2NyaXB0IHByb2dyYW1taW5nIGxhbmd1YWdlIGl0ZW1zICov CitleHRlcm4gY2hhciAqKmFfcHRyW107ICAgICAgICAgICAgICAgICAgLyogQXJyYXlzICovCitl eHRlcm4gaW50IGFfZGltW107CitzdGF0aWMgY2hhciAqIGlucG1hdGNoID0gTlVMTDsKKyNpZmRl ZiBDS0ZMT0FUCitjaGFyICogaW5wc2NhbGUgPSBOVUxMOworI2VuZGlmCS8qIENLRkxPQVQgKi8K K2V4dGVybiBjaGFyICogaW5wYnVmLCBpbmNoYXJbXTsgICAgICAgICAvKiBCdWZmZXJzIGZvciBJ TlBVVCBhbmQgUkVJTlBVVCAqLworZXh0ZXJuIGNoYXIgKmlucGJwOyAgICAgICAgICAgICAgICAg ICAgIC8qIEFuZCBwb2ludGVyIHRvIHNhbWUgKi8KK3N0YXRpYyBjaGFyICpyMyA9IChjaGFyICop MDsKK2V4dGVybiBpbnQgaW5jb3VudDsgICAgICAgICAgICAgICAgICAgICAvKiBJTlBVVCBjaGFy YWN0ZXIgY291bnQgKi8KK2V4dGVybiBpbnQgbV9mb3VuZDsgICAgICAgICAgICAgICAgICAgICAv KiBNSU5QVVQgcmVzdWx0ICovCitleHRlcm4gaW50IG1hY2x2bDsgICAgICAgICAgICAgICAgICAg ICAgLyogTWFjcm8gaW52b2NhdGlvbiBsZXZlbCAqLworZXh0ZXJuIHN0cnVjdCBtdGFiICptYWN0 YWI7ICAgICAgICAgICAgIC8qIE1hY3JvIHRhYmxlICovCitleHRlcm4gY2hhciAqbXJ2YWxbXTsK K2V4dGVybiBpbnQgbWFjYXJnY1tdLCB0b3BhcmdjOworCisjaWZkZWYgQ09NTUVOVAorZXh0ZXJu IGNoYXIgKm1fbGluZVtdOworZXh0ZXJuIGNoYXIgKnRvcGxpbmU7CisjZW5kaWYgLyogQ09NTUVO VCAqLworCitleHRlcm4gY2hhciAqbV9hcmdbTUFDTEVWRUxdWzEwXTsgLyogWW91IGhhdmUgdG8g cHV0IGluIHRoZSBkaW1lbnNpb25zICovCitleHRlcm4gY2hhciAqZ192YXJbR1ZBUlNdOyAgICAg ICAgLyogZm9yIGV4dGVybmFsIDItZGltZW5zaW9uYWwgYXJyYXlzLiAqLworI2lmZGVmIERDTURC VUYKK2V4dGVybiBpbnQgKmNvdW50LCAqaW5wY2FzOworI2Vsc2UKK2V4dGVybiBpbnQgY291bnRb XSwgaW5wY2FzW107CisjZW5kaWYgLyogRENNREJVRiAqLworI2VuZGlmIC8qIE5PU1BMICovCisK KyNpZmRlZiBVTklYCitleHRlcm4gaW50IGhhc2xvY2s7ICAgICAgICAgICAgICAgICAgICAgLyog Rm9yIFVVQ1AgbG9ja3MgKi8KK2V4dGVybiBjaGFyIGZsZm5hbVtdOworI2lmbmRlZiBVU0VUVFlM T0NLCitleHRlcm4gY2hhciBsb2NrMltdOworI2VuZGlmIC8qIFVTRVRUWUxPQ0sgKi8KKyNlbmRp ZiAvKiBVTklYICovCisKKyNpZmRlZiBPUzJPUlVOSVgKK2V4dGVybiBpbnQgbWF4bmFtLCBtYXhw YXRoOyAgICAgICAgICAgICAvKiBMb25nZXN0IG5hbWUsIHBhdGggbGVuZ3RoICovCisjZW5kaWYg LyogT1MyT1JVTklYICovCisKK2V4dGVybiBpbnQgbWRtdHlwLCBtZG1zYXY7CisKKyNpZm5kZWYg Tk9ESUFMCisvKiBESUFMLXJlbGF0ZWQgdmFyaWFibGVzICovCitleHRlcm4gY2hhciBtb2RlbW1z Z1tdOworZXh0ZXJuIE1ETUlORiAqbW9kZW1wW107ICAgICAgICAgICAgICAgIC8qIFBvaW50ZXJz IHRvIG1vZGVtIGluZm8gc3RydWN0cyAqLworZXh0ZXJuIGludCBubWRtLCBkaWFsaG5nLCBkaWFs dG1vLCBkaWFsa3NwLCBkaWFsZHB5LCBkaWFsc3J0LCBkaWFsc3RhOworZXh0ZXJuIGludCBkaWFs cnRyLCBkaWFsaW50LCBkaWFscnN0ciwgZGlhbGNvbiwgZGlhbGNxLCBkaWFsZmxkOworZXh0ZXJu IGludCBtZG1zcGQsIGRpYWxlYywgZGlhbGRjLCBkaWFsbXRoLCBkaWFsbWF1dG8sIGRpYWxlc2M7 CitleHRlcm4gY2hhciAqZGlhbG51bSwgICAqZGlhbGluaSwgICpkaWFsZGlyW10sICpkaWFsY21k LCAgKmRpYWxucHIsCisgKmRpYWxkY29uLCAqZGlhbGRjb2ZmLCAqZGlhbGVjb24sICpkaWFsZWNv ZmYsICpkaWFsaGNtZCwgKmRpYWxsYWMsCisgKmRpYWxod2ZjLCAqZGlhbHN3ZmMsICAqZGlhbG5v ZmMsICpkaWFscHVsc2UsICpkaWFsdG9uZSwgKmRpYWxuYW1lLAorICpkaWFsYWFvbiwgKmRpYWxh YW9mZiwgKmRpYWxtYWM7CitleHRlcm4gY2hhciAqZGlhbGxjYywgICAqZGlhbGl4cCwgICpkaWFs aXhzLCAgICpkaWFsbGRwLCAgKmRpYWxsZHMsCisgKmRpYWxweGksICAqZGlhbHB4bywgICAqZGlh bHNmeCwgICpkaWFsdGZwOworZXh0ZXJuIGNoYXIgKmRpYWxsY3AsICAgKmRpYWxsY3M7CitleHRl cm4gaW50IG50b2xsZnJlZSwgbmRpYWxweHgsIG5sb2NhbGFjOworZXh0ZXJuIGNoYXIgKmRpYWx0 ZmNbXSwgKmRpYWxsY2FjW10sICpkaWFscHh4W10sICptYXRjaHB4eDsKK2V4dGVybiBpbnQgbmRp YWxwdWNjLCBuZGlhbHRvY2M7CitleHRlcm4gY2hhciAqZGlhbHRvY2NbXSwgKmRpYWxwdWNjW107 CitleHRlcm4gaW50IG5kaWFsZGlyLCBkaWFsY25mLCBkaWFsY3Z0LCBkaWFsaWR0LCBkaWFscGFj ZTsKK2V4dGVybiBsb25nIGRpYWxtYXgsIGRpYWxjYXBhczsKKworZXh0ZXJuIHN0cnVjdCBrZXl0 YWIgbWRtdGFiW107CisKKyNpZmRlZiBCSUdCVUZPSworI2RlZmluZSBBUkdCVUZTSVogODE5MQor I2Vsc2UKKyNkZWZpbmUgQVJHQlVGU0laIDEwMjMKKyNlbmRpZiAvKiBCSUdCVUZPSyAqLworCisj aWZkZWYgQklHQlVGT0sKK2V4dGVybiBjaGFyICogZGlhbG1zZ1tdOworI2VuZGlmIC8qIEJJR0JV Rk9LICovCisKKyNlbmRpZiAvKiBOT0RJQUwgKi8KKworI2lmbmRlZiBOT0NTRVRTCisvKiBUcmFu c2xhdGlvbiBzdHVmZiAqLworZXh0ZXJuIGludCBuZmlsYzsKK2V4dGVybiBzdHJ1Y3Qga2V5dGFi IGZjc3RhYltdOworZXh0ZXJuIGludCBmY2hhcnNldCwgdGNoYXJzZXQsIHRzbGV2ZWwsIGxhbmd1 YWdlLCBubG5nLCB0Y3NyLCB0Y3NsOworZXh0ZXJuIGludCBkY3NldDcsIGRjc2V0ODsKK2V4dGVy biBzdHJ1Y3Qga2V5dGFiIGxuZ3RhYltdOworZXh0ZXJuIHN0cnVjdCBjc2luZm8gZmNzaW5mb1td LCB0Y3NpbmZvW107CitleHRlcm4gc3RydWN0IGxhbmdpbmZvIGxhbmdzW107CisjaWZkZWYgQ0tf QU5TSUMKK2V4dGVybiBDSEFSICgqeGxzW01BWFRDU0VUUysxXVtNQVhGQ1NFVFMrMV0pKENIQVIp OyAvKiBDaGFyYWN0ZXIgc2V0ICovCitleHRlcm4gQ0hBUiAoKnhscltNQVhUQ1NFVFMrMV1bTUFY RkNTRVRTKzFdKShDSEFSKTsgLyogdHJhbnNsYXRpb24gZnVuY3Rpb25zICovCisjZWxzZQorZXh0 ZXJuIENIQVIgKCp4bHNbTUFYVENTRVRTKzFdW01BWEZDU0VUUysxXSkoKTsgLyogQ2hhcmFjdGVy IHNldCAqLworZXh0ZXJuIENIQVIgKCp4bHJbTUFYVENTRVRTKzFdW01BWEZDU0VUUysxXSkoKTsg LyogdHJhbnNsYXRpb24gZnVuY3Rpb25zLiAqLworI2VuZGlmIC8qIENLX0FOU0lDICovCisjaWZk ZWYgVU5JQ09ERQorICAgIGV4dGVybiBpbnQgdWNzYm9tLCB1Y3NvcmRlcjsKKyNlbmRpZiAvKiBV TklDT0RFICovCisjZW5kaWYgLyogTk9DU0VUUyAqLworCisjaWZuZGVmIE5PU1BMCisvKiBCdWls dC1pbiB2YXJpYWJsZSBuYW1lcywgbWF4aW11bSBsZW5ndGggVk5BTUwgKDIwIGNoYXJhY3RlcnMp ICovCisKK3N0cnVjdCBrZXl0YWIgdmFydGFiW10gPSB7CisgICAgeyAiX2xpbmUiLCAgICAgVk5f VEZMTiwgIENNX0lOVn0sICAgLyogMTkyICovCisjaWZkZWYgT1MyCisgICAgeyAiX3JlZ25hbWUi LCAgVk5fUkVHTiwgIENNX0lOVn0sICAgLyogMS4xLjEyICovCisgICAgeyAiX3JlZ29yZyIsICAg Vk5fUkVHTywgIENNX0lOVn0sICAgLyogMS4xLjEyICovCisgICAgeyAiX3JlZ251bSIsICAgVk5f UkVHUywgIENNX0lOVn0sICAgLyogMS4xLjEyICovCisjZW5kaWYgLyogT1MyICovCisgICAgeyAi YXBjYWN0aXZlIiwgVk5fQVBDLCAgIENNX0lOVn0sICAgLyogMTkyICovCisjaWZkZWYgTlQKKyAg ICB7ICJhcHBkYXRhIiwgICBWTl9BUFBEQVRBLCAwfSwgICAgICAvKiAyMDEgKi8KKyNlbmRpZiAv KiBOVCAqLworICAgIHsgImFyZ2MiLCAgICAgIFZOX0FSR0MsICAwfSwKKyAgICB7ICJhcmdzIiwg ICAgICBWTl9BUkdTLCAgMH0sCisgICAgeyAiYXV0aG5hbWUiLCAgVk5fQVVUSE4sIDB9LCAgICAg ICAgLyogMTk2ICovCisgICAgeyAiYXV0aHN0YXRlIiwgVk5fQVVUSFMsIDB9LCAgICAgICAgLyog MTk1ICovCisgICAgeyAiYXV0aHR5cGUiLCAgVk5fQVVUSFQsIDB9LCAgICAgICAgLyogMTk1ICov CisgICAgeyAiYml0cyIsICAgICAgVk5fQklUUywgIDB9LCAgICAgICAgLyogMjEyICovCisgICAg eyAiYmxvY2tjaGVjayIsVk5fQkxLLCAgIDB9LCAgICAgICAgLyogMTk1ICovCisjaWZkZWYgQlJP V1NFUgorICAgIHsgImJyb3dzZXIiLCAgIFZOX0JST1dTUiwwfSwgICAgICAgIC8qIDE5MyAqLwor ICAgIHsgImJyb3dzb3B0cyIsIFZOX0JST1BULCAwfSwgICAgICAgIC8qIDE5MyAqLworICAgIHsg ImJyb3dzdXJsIiwgIFZOX1VSTCwgICAwfSwgICAgICAgIC8qIDE5MyAqLworICAgIHsgImJ1aWxk aWQiLCAgIFZOX0JVSUxELCAwfSwgICAgICAgIC8qIDE5OSAqLworI2VuZGlmIC8qIEJST1dTRVIg Ki8KKyAgICB7ICJieXRlb3JkZXIiLCBWTl9CWVRFLCAgMH0sICAgICAgICAvKiAxOTUgKi8KKyNp Zm5kZWYgTk9DU0VUUworICAgIHsgImNoYXJzZXQiLCAgIFZOX0NTRVQsICAwfSwgICAgICAgIC8q IDE5MiAqLworI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKyAgICB7ICJjbWRidWZzaXplIixWTl9DTURC TCwgMH0sICAgICAgICAvKiAxOTUgKi8KKyAgICB7ICJjbWRmaWxlIiwgICBWTl9DTURGLCAgMH0s CisgICAgeyAiY21kbGV2ZWwiLCAgVk5fQ01ETCwgIDB9LAorICAgIHsgImNtZHNvdXJjZSIsIFZO X0NNRFMsICAwfSwKKyAgICB7ICJjb2xzIiwgICAgICBWTl9DT0xTLCAgMH0sICAgICAgICAvKiAx OTAgKi8KKyNpZmRlZiBOVAorICAgIHsgImNvbW1vbiIsICAgIFZOX0NPTU1PTiwgMH0sICAgICAg IC8qIDIwMSAqLworI2VuZGlmIC8qIE5UICovCisgICAgeyAiY29ubmVjdGlvbiIsVk5fQ09OTiwg IDB9LCAgICAgICAgLyogMTkwICovCisgICAgeyAiY291bnQiLCAgICAgVk5fQ09VTiwgIDB9LAor I2lmbmRlZiBOT1hGRVIKKyAgICB7ICJjcHMiLCAgICAgICBWTl9DUFMsICAgMH0sICAgICAgICAv KiAxOTAgKi8KKyNlbmRpZiAvKiBOT1hGRVIgKi8KKyAgICB7ICJjcHUiLCAgICAgICBWTl9DUFUs ICAgMH0sCisjaWZuZGVmIE5PWEZFUgorICAgIHsgImNyYzE2IiwgICAgIFZOX0NSQzE2LCAwfSwg ICAgICAgIC8qIDE5MiAqLworICAgIHsgImN0dHkiLCAgICAgIFZOX1RUWU5BTSwwfSwgICAgICAg IC8qIDE5NiAqLworI2VuZGlmIC8qIE5PWEZFUiAqLworI2lmbmRlZiBOT0xPR0RJQUwKKyNpZm5k ZWYgTk9MT0NBTAorICAgIHsgImN4X3RpbWUiLCAgIFZOX0NYVElNRSwwfSwgICAgICAgIC8qIDE5 NSAqLworICAgIHsgImN4X3N0YXR1cyIsIFZOX0NYX1NUQSwwfSwgICAgICAgIC8qIDE5OSAqLwor I2VuZGlmIC8qIE5PTE9DQUwgKi8KKyNlbmRpZiAvKiBOT0xPR0RJQUwgKi8KKyNpZm5kZWYgTk9E SUFMCisgICAgeyAiZCRhYyIsICAgICAgVk5fRF9BQywgIDB9LCAgICAgICAgLyogMTkyICovCisg ICAgeyAiZCRjYyIsICAgICAgVk5fRF9DQywgIDB9LCAgICAgICAgLyogMTkyICovCisgICAgeyAi ZCRpcCIsICAgICAgVk5fRF9JUCwgIDB9LCAgICAgICAgLyogMTkyICovCisgICAgeyAiZCRsYyIs ICAgICAgVk5fRF9MQ1AsIDB9LCAgICAgICAgLyogMTkzICovCisgICAgeyAiZCRsY3AiLCAgICAg Vk5fRF9MQ1AsIENNX0lOVn0sICAgLyogMTkzICovCisgICAgeyAiZCRscCIsICAgICAgVk5fRF9M UCwgIDB9LCAgICAgICAgLyogMTkyICovCisgICAgeyAiZCRweCIsICAgICAgVk5fRF9QWFgsIDB9 LCAgICAgICAgLyogMTk1ICovCisgICAgeyAiZCRweHgiLCAgICAgVk5fRF9QWFgsIENNX0lOVn0s ICAgLyogMTk1ICovCisjZW5kaWYgLyogTk9ESUFMICovCisgICAgeyAiZGF0ZSIsICAgICAgVk5f REFURSwgIDB9LAorICAgIHsgImRheSIsICAgICAgIFZOX0RBWSwgICAwfSwKKyNpZmRlZiBOVAor ICAgIHsgImRlc2t0b3AiLCAgIFZOX0RFU0tUT1AsIDB9LCAgICAgLyogMjAxICovCisjZW5kaWYg LyogTlQgKi8KKyNpZm5kZWYgTk9ESUFMCisgICAgeyAiZGlhbGNvdW50IiwgVk5fRFJUUiwgIDB9 LCAgICAgICAgLyogMTk1ICovCisgICAgeyAiZGlhbG1lc3NhZ2UiLFZOX0RNU0csIDB9LAkvKiAy MTIgKi8KKyAgICB7ICJkaWFsbnVtYmVyIixWTl9ETlVNLCAgMH0sICAgICAgICAvKiAxOTIgKi8K KyAgICB7ICJkaWFscmVzdWx0IixWTl9NRE1TRywgMH0sICAgICAgICAvKiAxOTIgKi8KKyAgICB7 ICJkaWFsc3RhdHVzIixWTl9ESUFMLCAgMH0sICAgICAgICAvKiAxOTAgKi8KKyAgICB7ICJkaWFs c3VmZml4IixWTl9QRFNGWCwgMH0sICAgICAgICAvKiAxOTMgKi8KKyAgICB7ICJkaWFsdHlwZSIs ICBWTl9EVFlQRSwgMH0sICAgICAgICAvKiAxOTMgKi8KKyNlbmRpZiAvKiBOT0RJQUwgKi8KKyAg ICB7ICJkaXJlY3RvcnkiLCBWTl9ESVJFLCAgMH0sCisjaWZuZGVmIE5PRElBTAorICAgIHsgImRt X2hmIiwgICAgIFZOX0RNX0hGLCAwfSwgICAgICAgIC8qIDE5OSAqLworICAgIHsgImRtX2xwIiwg ICAgIFZOX0RNX0xQLCAwfSwgICAgICAgIC8qIDE5NSAqLworICAgIHsgImRtX3NwIiwgICAgIFZO X0RNX1NQLCAwfSwgICAgICAgIC8qIDE5NSAqLworICAgIHsgImRtX3BkIiwgICAgIFZOX0RNX1BE LCAwfSwgICAgICAgIC8qIDE5NSAqLworICAgIHsgImRtX3RkIiwgICAgIFZOX0RNX1RELCAwfSwg ICAgICAgIC8qIDE5NSAqLworICAgIHsgImRtX3dhIiwgICAgIFZOX0RNX1dBLCAwfSwgICAgICAg IC8qIDE5NSAqLworICAgIHsgImRtX3diIiwgICAgIFZOX0RNX1dCLCAwfSwgICAgICAgIC8qIDE5 OSAqLworICAgIHsgImRtX3dkIiwgICAgIFZOX0RNX1dELCAwfSwgICAgICAgIC8qIDE5NSAqLwor ICAgIHsgImRtX3JjIiwgICAgIFZOX0RNX1JDLCAwfSwgICAgICAgIC8qIDE5NSAqLworI2VuZGlm IC8qIE5PRElBTCAqLworI2lmbmRlZiBOT1hGRVIKKyAgICB7ICJkb3dubG9hZCIsICBWTl9ETERJ UiwgMH0sICAgICAgICAvKiAxOTIgKi8KKyNlbmRpZiAvKiBOT1hGRVIgKi8KKyAgICB7ICJlZGl0 b3IiLCAgICBWTl9FRElUT1IsMH0sCisgICAgeyAiZWRpdGZpbGUiLCAgVk5fRURGSUxFLDB9LAor ICAgIHsgImVkaXRvcHRzIiwgIFZOX0VET1BULCAwfSwKKyAgICB7ICJlcnJubyIsICAgICBWTl9F UlJOTywgMH0sICAgICAgICAvKiAxOTIgKi8KKyAgICB7ICJlcnJzdHJpbmciLCBWTl9FUlNUUiwg MH0sICAgICAgICAvKiAxOTIgKi8KKyAgICB7ICJlc2NhcGUiLCAgICBWTl9FU0MsICAgMH0sICAg ICAgICAvKiAxOTMgKi8KKyAgICB7ICJldmFsdWF0ZSIsICBWTl9FVkFMLCAgMH0sICAgICAgICAv KiAxOTAgKi8KKyNpZmRlZiBPUzJPUlVOSVgKKyAgICB7ICJleGVkaXIiLCAgICBWTl9FWEVESVIs MH0sICAgICAgICAvKiAxOTIgKi8KKyNlbmRpZiAvKiBPUzJPUlVOSVggKi8KKyAgICB7ICJleGl0 c3RhdHVzIixWTl9FWElULCAgMH0sCisjaWZkZWYgQ0tDSEFOTkVMSU8KKyAgICB7ICJmX2NvdW50 IiwgICBWTl9GQ09VLCAgMH0sICAgICAgICAvKiAxOTUgKi8KKyAgICB7ICJmX2Vycm9yIiwgICBW Tl9GRVJSLCAgMH0sICAgICAgICAvKiAxOTUgKi8KKyAgICB7ICJmX21heCIsICAgICBWTl9GTUFY LCAgMH0sICAgICAgICAvKiAxOTUgKi8KKyAgICB7ICJmaWxlZXJyb3IiLCBWTl9GRVJSLCAgQ01f SU5WfSwgICAvKiAxOTUgKi8KKyAgICB7ICJmaWxlbWF4IiwgICBWTl9GRVJSLCAgQ01fSU5WfSwg ICAvKiAxOTUgKi8KKyNlbmRpZiAvKiBDS0NIQU5ORUxJTyAqLworICAgIHsgImZpbGVuYW1lIiwg IFZOX0ZOQU0sICAwfSwgICAgICAgIC8qIDE5MyAqLworICAgIHsgImZpbGVudW1iZXIiLFZOX0ZO VU0sICAwfSwgICAgICAgIC8qIDE5MyAqLworICAgIHsgImZpbGVzcGVjIiwgIFZOX0ZJTEUsICAw fSwKKyAgICB7ICJmc2l6ZSIsICAgICBWTl9GRkMsICAgMH0sICAgICAgICAvKiAxOTAgKi8KKyNp ZmRlZiBHRlRJTUVSCisgICAgeyAiZnRpbWUiLCAgICAgVk5fRlRJTUUsIDB9LCAgICAgICAgLyog MTk5ICovCisjZWxzZQorICAgIHsgImZ0aW1lIiwgICAgIFZOX05USU0sICBDTV9JTlZ9LAorI2Vu ZGlmIC8qIEdGVElNRVIgKi8KKyNpZm5kZWYgTk9GVFAKKyNpZm5kZWYgU1lTRlRQCisgICAgeyAi ZnRwX2NvZGUiLCAgICAgICAgIFZOX0ZUUF9DLCAwfSwgLyogMTk5ICovCisgICAgeyAiZnRwX2Nw bCIsICAgICAgICAgIFZOX0ZUUF9CLCAwfSwgLyogMTk5ICovCisgICAgeyAiZnRwX2Nvbm5lY3Rl ZCIsICAgIFZOX0ZUUF9YLCAwfSwgLyogMTk5ICovCisgICAgeyAiZnRwX2RwbCIsICAgICAgICAg IFZOX0ZUUF9ELCAwfSwgLyogMTk5ICovCisgICAgeyAiZnRwX2dldHB1dHJlbW90ZSIsIFZOX0ZU UF9HLCAwfSwgLyogMTk5ICovCisgICAgeyAiZnRwX2hvc3QiLCAgICAgICAgIFZOX0ZUUF9ILCAw fSwgLyogMTk5ICovCisgICAgeyAiZnRwX2xvZ2dlZGluIiwgICAgIFZOX0ZUUF9MLCAwfSwgLyog MTk5ICovCisgICAgeyAiZnRwX21lc3NhZ2UiLCAgICAgIFZOX0ZUUF9NLCAwfSwgLyogMTk5ICov CisgICAgeyAiZnRwX21zZyIsICAgICAgICAgIFZOX0ZUUF9NLCBDTV9JTlZ9LCAvKiAxOTkgKi8K KyAgICB7ICJmdHBfc2VjdXJpdHkiLCAgICAgVk5fRlRQX1osIDB9LCAvKiAxOTkgKi8KKyAgICB7 ICJmdHBfc2VydmVyIiwgICAgICAgVk5fRlRQX1MsIDB9LCAvKiAxOTkgKi8KKyNlbmRpZiAvKiBT WVNGVFAgKi8KKyNlbmRpZiAvKiBOT0ZUUCAqLworICAgIHsgImZ0eXBlIiwgICAgIFZOX01PREUs ICAwfSwgICAgICAgIC8qIDE5MCAqLworI2lmZGVmIEtVSQorICAgIHsgImd1aV9mb250bmFtZSIs IFZOX0dVSV9GTk0sIDB9LAkvKiAyMDUgKi8KKyAgICB7ICJndWlfZm9udHNpemUiLCBWTl9HVUlf RlNaLCAwfSwJLyogMjA1ICovCisgICAgeyAiZ3VpX3J1bm1vZGUiLCBWTl9HVUlfUlVOLCAwfSwg ICAgLyogMjA1ICovCisgICAgeyAiZ3VpX3hwb3MiLCAgICBWTl9HVUlfWFAsICAwfSwgICAgLyog MjA1ICovCisgICAgeyAiZ3VpX3hyZXMiLCAgICBWTl9HVUlfWFIsICAwfSwgICAgLyogMjA1ICov CisgICAgeyAiZ3VpX3lwb3MiLCAgICBWTl9HVUlfWVAsICAwfSwgICAgLyogMjA1ICovCisgICAg eyAiZ3VpX3lyZXMiLCAgICBWTl9HVUlfWVIsICAwfSwgICAgLyogMjA1ICovCisjZW5kaWYgLyog S1VJICovCisgICAgeyAiaGVyYWxkIiwgICAgVk5fSEVSQUxELCAwfSwKKyAgICB7ICJob21lIiwg ICAgICBWTl9IT01FLCAgIDB9LAorICAgIHsgImhvc3QiLCAgICAgIFZOX0hPU1QsICAgMH0sCisg ICAgeyAiaG91ciIsICAgICAgVk5fSE9VUiwgICAwfSwgICAgICAgLyogMjAwICovCisjaWZuZGVm IE5PSFRUUAorICAgIHsgImh0dHBfY29kZSIsICAgICAgVk5fSFRUUF9DLCAwfSwgIC8qIDE5OSAq LworICAgIHsgImh0dHBfY29ubmVjdGVkIiwgVk5fSFRUUF9OLCAwfSwgIC8qIDE5OSAqLworICAg IHsgImh0dHBfaG9zdCIsICAgICAgVk5fSFRUUF9ILCAwfSwgIC8qIDE5OSAqLworICAgIHsgImh0 dHBfbWVzc2FnZSIsICAgVk5fSFRUUF9NLCAwfSwgIC8qIDE5OSAqLworICAgIHsgImh0dHBfc2Vj dXJpdHkiLCAgVk5fSFRUUF9TLCAwfSwgIC8qIDE5OSAqLworI2VuZGlmIC8qIE5PSFRUUCAqLwor ICAgIHsgImh3cGFyaXR5IiwgIFZOX0hXUEFSLCAwfSwgICAgICAgIC8qIDE5NSAqLworICAgIHsg ImlucHV0IiwgICAgIFZOX0lCVUYsICAwfSwKKyAgICB7ICJpbmNoYXIiLCAgICBWTl9JQ0hSLCAg MH0sCisgICAgeyAiaW5jb3VudCIsICAgVk5fSUNOVCwgIDB9LAorICAgIHsgImluaWRpciIsICAg IFZOX0lOSSwgICAwfSwgICAgICAgIC8qIDE5MiAqLworICAgIHsgImlubWF0Y2giLCAgIFZOX01B VENILCAwfSwgICAgICAgIC8qIDE5NiAqLworICAgIHsgImlubWVzc2FnZSIsIFZOX0lOUE1TRyww fSwgICAgICAgIC8qIDIxMiAqLworICAgIHsgImluc2NhbGUiLCAgIFZOX0lTQ0FMRSwwfSwgICAg ICAgIC8qIDIxMCAqLworICAgIHsgImluc3RhdHVzIiwgIFZOX0lTVEFULCAwfSwgICAgICAgIC8q IDE5MiAqLworICAgIHsgImludGltZSIsICAgIFZOX0lOVElNRSwwfSwgICAgICAgIC8qIDE5MyAq LworICAgIHsgImlud2FpdCIsICAgIFZOX0lOVE1PLCAwfSwgICAgICAgIC8qIDE5NSAqLworICAg IHsgImlwIiwgICAgICAgIFZOX0lQQUREUiwgQ01fQUJSfENNX0lOVn0sCisgICAgeyAiaXBhZGRy ZXNzIiwgVk5fSVBBRERSLDB9LCAgICAgICAgLyogMTkyICovCisgICAgeyAiaXByb21wdCIsICAg Vk5fUFJPTVBULDB9LCAgICAgICAgLyogMTk5ICovCisgICAgeyAia2JjaGFyIiwgICAgVk5fS0JD SEFSLDB9LCAgICAgICAgLyogMTk2ICovCisjaWZuZGVmIE5PTE9DQUwKKyNpZmRlZiBPUzIKKyAg ICB7ICJrZXlib2FyZCIsICBWTl9LRVlCLCAgMH0sCisjZW5kaWYgLyogT1MyICovCisjZW5kaWYg LyogTk9MT0NBTCAqLworI2lmZGVmIENLX0tFUkJFUk9TCisgICAgeyAia3JiNGVycm1zZyIsICAg IFZOX0s0RU1TRywwfSwKKyAgICB7ICJrcmI0ZXJybm8iLCAgICAgVk5fSzRFTk8sIDB9LAorICAg IHsgImtyYjRwcmluY2lwYWwiLCBWTl9LNFBSTiwgMH0sCisgICAgeyAia3JiNHJlYWxtIiwgICAg IFZOX0s0UkxNLCAwfSwKKyAgICB7ICJrcmI0c2VydmljZSIsICAgVk5fSzRTUlYsIDB9LAorICAg IHsgImtyYjVjYyIsICAgICAgICBWTl9LNUNDLCAgMH0sCisgICAgeyAia3JiNWVycm1zZyIsICAg IFZOX0s1RU1TRywwfSwKKyAgICB7ICJrcmI1ZXJybm8iLCAgICAgVk5fSzVFTk8sIDB9LAorICAg IHsgImtyYjVwcmluY2lwYWwiLCBWTl9LNVBSTiwgMH0sCisgICAgeyAia3JiNXJlYWxtIiwgICAg IFZOX0s1UkxNLCAwfSwKKyAgICB7ICJrcmI1c2VydmljZSIsICAgVk5fSzVTUlYsIDB9LAorI2Vu ZGlmIC8qIENLX0tFUkJFUk9TICovCisgICAgeyAibGFzdGNvbW1hbmQiLCAgIFZOX1BSRVZDTUQs IDB9LAkvKiAyOTkgKi8KKyNpZm5kZWYgTk9MQVNURklMRQorICAgIHsgImxhc3RmaWxlc3BlYyIs ICBWTl9MQVNURklMLCAwfSwJLyogMjEyICovCisjZW5kaWYJLyogTk9MQVNURklMRSAqLworICAg IHsgImxhc3RrZXl3b3JkdmFsdWUiLCAgVk5fTEFTVEtXViwgMH0sIC8qIDIxMiAqLworICAgIHsg Imxhc3Rrd3ZhbHVlIiwgICBWTl9MQVNUS1dWLCBDTV9BQlJ8Q01fSU5WfSwgLyogMjEyICovCisg ICAgeyAibGluZSIsICAgICAgICAgIFZOX0xJTkUsICAwfSwKKyAgICB7ICJsb2NhbCIsICAgICAg ICAgVk5fTENMLCAgIDB9LAorI2lmZGVmIFVOSVgKKyAgICB7ICJsb2NrZGlyIiwgICAgICAgVk5f TENLRElSLDB9LAkvKiAxOTUgKi8KKyAgICB7ICJsb2NrcGlkIiwgICAgICAgVk5fTENLUElELDB9 LAkvKiAxOTUgKi8KKyNlbmRpZiAvKiBVTklYICovCisgICAgeyAibG9nX2Nvbm5lY3Rpb24iLCBW Tl9MT0dfQ09OLCAwfSwgLyogMjA2ICovCisgICAgeyAibG9nX2RlYnVnIiwgVk5fTE9HX0RFQiwg MH0sICAgICAgLyogMjA2ICovCisgICAgeyAibG9nX3BhY2tldCIsIFZOX0xPR19QS1QsIDB9LCAg ICAgLyogMjA2ICovCisgICAgeyAibG9nX3Nlc3Npb24iLCBWTl9MT0dfU0VTLCAwfSwgICAgLyog MjA2ICovCisgICAgeyAibG9nX3RyYW5zYWN0aW9uIiwgVk5fTE9HX1RSQSwgMH0sLyogMjA2ICov CisgICAgeyAibWFjbGV2ZWwiLCAgVk5fTUFDTFZMLDB9LCAgICAgICAgLyogMTk1ICovCisgICAg eyAibWFjcm8iLCAgICAgVk5fTUFDLCAgIDB9LAorI2lmZGVmIEZORkxPQVQKKyAgICB7ICJtYXRo X2UiLCAgICBWTl9NQV9FLCAgMH0sICAgICAgICAvKiAxOTUgKi8KKyAgICB7ICJtYXRoX3BpIiwg ICBWTl9NQV9QSSwgMH0sICAgICAgICAvKiAxOTUgKi8KKyAgICB7ICJtYXRoX3ByZWNpc2lvbiIs IFZOX01BX1BSLCAwfSwgICAvKiAxOTUgKi8KKyNlbmRpZiAvKiBGTkZMT0FUICovCisgICAgeyAi bWlucHV0IiwgICAgVk5fTUlOUCwgIDB9LCAgICAgICAgLyogMTkyICovCisgICAgeyAibW9kZWwi LCAgICAgVk5fTU9ETCwgIDB9LCAgICAgICAgLyogMTkzICovCisgICAgeyAibW9kZW0iLCAgICAg Vk5fTURNLCAgIDB9LAorI2lmbmRlZiBOT0xPQ0FMCisjaWZkZWYgT1MyCisgICAgeyAibW91c2Vj dXJ4IiwgVk5fTU9VX1gsIDB9LCAgICAgICAgLyogSzk1IDEuMS4xNCAqLworICAgIHsgIm1vdXNl Y3VyeSIsIFZOX01PVV9ZLCAwfSwgICAgICAgIC8qIEs5NSAxLjEuMTQgKi8KKyNlbmRpZiAvKiBP UzIgKi8KKyNlbmRpZiAvKiBOT0xPQ0FMICovCisjaWZuZGVmIE5PRElBTAorICAgIHsgIm1fYWFf b2ZmIiwgIFZOX01fQUFYLCAwfSwgICAgICAgIC8qIGFsbCAxOTIuLi4gKi8KKyAgICB7ICJtX2Fh X29uIiwgICBWTl9NX0FBTywgMH0sCisgICAgeyAibV9kY19vZmYiLCAgVk5fTV9EQ1gsIDB9LAor ICAgIHsgIm1fZGNfb24iLCAgIFZOX01fRENPLCAwfSwKKyAgICB7ICJtX2RpYWwiLCAgICBWTl9N X0RDTSwgMH0sCisgICAgeyAibV9lY19vZmYiLCAgVk5fTV9FQ1gsIDB9LAorICAgIHsgIm1fZWNf b24iLCAgIFZOX01fRUNPLCAwfSwKKyAgICB7ICJtX2ZjX2h3IiwgICBWTl9NX0hXRiwgMH0sCisg ICAgeyAibV9mY19ubyIsICAgVk5fTV9ORkMsIDB9LAorICAgIHsgIm1fZmNfc3ciLCAgIFZOX01f U1dGLCAwfSwKKyAgICB7ICJtX2h1cCIsICAgICBWTl9NX0hVUCwgMH0sCisgICAgeyAibV9pbml0 IiwgICAgVk5fTV9JTkksIDB9LAorICAgIHsgIm1fbmFtZSIsICAgIFZOX01fTkFNLCAwfSwgICAg ICAgIC8qIDE5NSAqLworICAgIHsgIm1fcHVsc2UiLCAgIFZOX01fUERNLCAwfSwKKyAgICB7ICJt X3NpZ19jZCIsICBWTl9NU19DRCwgMH0sICAgICAgICAvKiAxOTUgKi8KKyAgICB7ICJtX3NpZ19j dHMiLCBWTl9NU19DVFMsMH0sICAgICAgICAvKiAxOTUgKi8KKyAgICB7ICJtX3NpZ19kc3IiLCBW Tl9NU19EU1IsMH0sICAgICAgICAvKiAxOTUgKi8KKyAgICB7ICJtX3NpZ19kdHIiLCBWTl9NU19E VFIsMH0sICAgICAgICAvKiAxOTUgKi8KKyAgICB7ICJtX3NpZ19yaSIsICBWTl9NU19SSSwgMH0s ICAgICAgICAvKiAxOTUgKi8KKyAgICB7ICJtX3NpZ19ydHMiLCBWTl9NU19SVFMsMH0sICAgICAg ICAvKiAxOTUgKi8KKyAgICB7ICJtX3RvbmUiLCAgICBWTl9NX1RETSwgMH0sCisjZW5kaWYgLyog Tk9ESUFMICovCisgICAgeyAibmFtZSIsICAgICAgVk5fTkFNRSwgIDB9LAorICAgIHsgIm5kYXRl IiwgICAgIFZOX05EQVQsICAwfSwKKyAgICB7ICJuZGF5IiwgICAgICBWTl9OREFZLCAgMH0sCisg ICAgeyAibmV3bGluZSIsICAgVk5fTkVXTCwgIDB9LAorICAgIHsgIm50aW1lIiwgICAgIFZOX05U SU0sICAwfSwKKyAgICB7ICJvc25hbWUiLCAgICBWTl9PU05BTSwgMH0sICAgICAgICAvKiAxOTMg Ki8KKyAgICB7ICJvc3JlbGVhc2UiLCBWTl9PU1JFTCwgMH0sICAgICAgICAvKiAxOTMgKi8KKyAg ICB7ICJvc3ZlcnNpb24iLCBWTl9PU1ZFUiwgMH0sICAgICAgICAvKiAxOTMgKi8KKyNpZm5kZWYg Tk9YRkVSCisgICAgeyAicGFja2V0bGVuIiwgVk5fUlBTSVosIDB9LCAgICAgICAgLyogMTkyICov CisjZW5kaWYgLyogTk9YRkVSICovCisgICAgeyAicGFyaXR5IiwgICAgVk5fUFJUWSwgIDB9LCAg ICAgICAgLyogMTkwICovCisgICAgeyAicGFzc3dvcmQiLCAgVk5fUFdELCAgIENNX0lOVn0sICAg LyogMTkyICovCisjaWZkZWYgTlQKKyAgICB7ICJwZXJzb25hbCIsICBWTl9QRVJTT05BTCwgMH0s ICAgICAvKiAyMDEgKi8KKyNlbmRpZiAvKiBOVCAqLworI2lmZGVmIFBFWElUU1RBVAorICAgIHsg InBleGl0c3RhdCIsIFZOX1BFWElULCAwfSwgICAgICAgIC8qIDE5MyAqLworI2VuZGlmIC8qIFBF WElUU1RBVCAqLworI2lmZGVmIENLX1BJRAorICAgIHsgInBpZCIsICAgICAgIFZOX1BJRCwgICAw fSwgICAgICAgIC8qIDE5MyAqLworI2VuZGlmIC8qIENLX1BJRCAqLworICAgIHsgInBsYXRmb3Jt IiwgIFZOX1NZU1YsICAwfSwKKyAgICB7ICJwcmludGVyIiwgICBWTl9QUklOVCwgMH0sICAgICAg ICAvKiAxOTMgKi8KKyAgICB7ICJwcm9ncmFtIiwgICBWTl9QUk9HLCAgMH0sCisgICAgeyAicHJv bXB0IiwgICAgVk5fUFJNLCAgIENNX0lOVn0sICAgLyogMTkyICovCisjaWZuZGVmIE5PWEZFUgor ICAgIHsgInByb3RvY29sIiwgIFZOX1BST1RPLCAwfSwgICAgICAgIC8qIDE5MiAqLworICAgIHsg InBfOGJpdCIsICAgIFZOX1BfOEJJVCwwfSwgICAgICAgIC8qIDE5MyAqLworICAgIHsgInBfY3Rs IiwgICAgIFZOX1BfQ1RMLCAwfSwgICAgICAgIC8qIDE5MyAqLworICAgIHsgInBfcnB0IiwgICAg IFZOX1BfUlBULCAwfSwgICAgICAgIC8qIDE5MyAqLworICAgIHsgInF1ZXJ5IiwgICAgIFZOX1FV RSwgICAwfSwgICAgICAgIC8qIDE5MCAqLworI2VuZGlmIC8qIE5PWEZFUiAqLworICAgIHsgInJl bW90ZWlwIiwgIFZOX0hPU1RJUCwwfSwJLyogMjEyICovCisgICAgeyAicmV0dXJuIiwgICAgVk5f UkVULCAgIDB9LAorI2lmZGVmIENLX1JFWFgKKyAgICB7ICJyZXh4IiwgICAgICBWTl9SRVhYLCAg MH0sICAgICAgICAvKiAxOTAgKi8KKyNlbmRpZiAvKiBDS19SRVhYICovCisjaWZkZWYgVE5fQ09N UE9SVAorICAgIHsgInJmYzIyMTdfc2lnbmF0dXJlIiwgVk5fVE5DX1NJRywgMH0sIC8qIDIwMSAq LworICAgIHsgInJmYzI3MTdfc2lnbmF0dXJlIiwgVk5fVE5DX1NJRywgQ01fSU5WfSwgLyogMjAy ICovCisjZW5kaWYgLyogVE5fQ09NUE9SVCAqLworICAgIHsgInJvd3MiLCAgICAgIFZOX1JPV1Ms ICAwfSwgICAgICAgIC8qIDE5MCAqLworI2lmbmRlZiBOT1NFWFAKKyAgICB7ICJzZGVwdGgiLCAg ICBWTl9MU0VYUCwwfSwgICAgICAgICAvKiAxOTkgKi8KKyNlbmRpZiAvKiBOT1NFWFAgKi8KKyAg ICB7ICJzZWN1cmUiLCAgICBWTl9TRUNVUkUsIDB9LCAgICAgICAvKiAxOTkgKi8KKyNpZm5kZWYg Tk9MT0NBTAorI2lmZGVmIE9TMgorICAgIHsgInNlbGVjdCIsICAgIFZOX1NFTENULCAwfSwgICAg ICAgIC8qIDE5MiAqLworI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIE5PTE9DQUwgKi8KKyAg ICB7ICJzZW5kbGlzdCIsICBWTl9TTkRMLCAgMH0sCisgICAgeyAic2VyaWFsIiwgICAgVk5fU0VS SUFMLDB9LCAgICAgICAgLyogMTk1ICovCisgICAgeyAic2V0bGluZW1zZyIsVk5fU0xNU0csIDB9 LCAgICAgICAgLyogMTk1ICovCisjaWZuZGVmIE5PU0VYUAorICAgIHsgInNleHByZXNzaW9uIixW Tl9TRVhQLCAwfSwgICAgICAgIC8qIDE5OSAqLworI2VuZGlmIC8qIE5PU0VYUCAqLworICAgIHsg InNwZWVkIiwgICAgIFZOX1NQRUUsICAwfSwKKyNpZmRlZiBPUzIKKyAgICB7ICJzcGFjZSIsICAg ICBWTl9TUEEsICAgMH0sCisgICAgeyAic3RhcnR1cCIsICAgVk5fU1RBUiwgIDB9LCAgICAgICAg LyogMTkwICovCisjZWxzZQorI2lmZGVmIFVOSVgKKyAgICB7ICJzdGFydHVwIiwgICBWTl9TVEFS LCAgMH0sICAgICAgICAvKiAxOTMgKi8KKyNlbHNlCisjaWZkZWYgVk1TCisgICAgeyAic3RhcnR1 cCIsICAgVk5fU1RBUiwgIDB9LCAgICAgICAgLyogMTkzICovCisjZW5kaWYgLyogVk1TICovCisj ZW5kaWYgLyogVU5JWCAqLworI2VuZGlmIC8qIE9TMiAqLworICAgIHsgInN0YXR1cyIsICAgIFZO X1NVQ0MsICAwfSwKKyNpZm5kZWYgTk9TRVhQCisgICAgeyAic3ZhbHVlIiwgICAgVk5fVlNFWFAs IDB9LCAgICAgICAgLyogMTk5ICovCisjZW5kaWYgLyogTk9TRVhQICovCisjaWZuZGVmIE5PWEZF UgorICAgIHsgInN5c2lkIiwgICAgIFZOX1NZU0ksICAwfSwKKyNlbmRpZiAvKiBOT1hGRVIgKi8K KyAgICB7ICJzeXN0ZW0iLCAgICBWTl9TWVNULCAgMH0sCisgICAgeyAidGVybWluYWwiLCAgVk5f VFRZUCwgIDB9LAorI2lmZGVmIE9TMgorI2lmbmRlZiBOT0tWRVJCUworICAgIHsgInRlcm1rZXki LCAgIFZOX1RSTUssICBDTV9JTlZ9LCAgIC8qIDE5MiAqLworI2VuZGlmIC8qIE5PS1ZFUkJTICov CisjZW5kaWYgLyogT1MyICovCisgICAgeyAidGVzdCIsICAgICAgVk5fVEVTVCwgIDB9LCAgICAg ICAgLyogMTkzICovCisgICAgeyAidGV4dGRpciIsICAgVk5fVFhURElSLDB9LCAgICAgICAgLyog MTk1ICovCisjaWZuZGVmIE5PWEZFUgorICAgIHsgInRmc2l6ZSIsICAgIFZOX1RGQywgICAwfSwK KyAgICB7ICJ0ZnRpbWUiLCAgICBWTl9URlRJTSwgMH0sICAgICAgICAvKiAxOTUgKi8KKyNlbmRp ZiAvKiBOT1hGRVIgKi8KKyAgICB7ICJ0aW1lIiwgICAgICBWTl9USU1FLCAgMH0sCisgICAgeyAi dGltZXN0YW1wIiwgVk5fTk9XLCAgIDB9LCAgICAgICAgLyogMjAwICovCisgICAgeyAidG1wZGly IiwgICAgVk5fVEVNUCwgIDB9LCAgICAgICAgLyogMTkyICovCisjaWZkZWYgQ0tfVFJJR0dFUgor ICAgIHsgInRyaWdnZXIiLCAgIFZOX1RSSUcsICAwfSwgICAgICAgIC8qIDE5MyAqLworI2VuZGlm IC8qIENLX1RSSUdHRVIgKi8KKyNpZmRlZiBDS19UVFlGRAorICAgIHsgInR0eWZkIiwgICAgIFZO X1RUWUYsICAwfSwKKyNlbmRpZiAvKiBDS19UVFlGRCAqLworICAgIHsgInR5X2xuIiwgICAgIFZO X1RZX0xOLCAwfSwgICAgICAgIC8qIDE5NSAqLworICAgIHsgInR5X2xjIiwgICAgIFZOX1RZX0xD LCAwfSwgICAgICAgIC8qIDE5NSAqLworICAgIHsgInR5X2xtIiwgICAgIFZOX1RZX0xNLCAwfSwg ICAgICAgIC8qIDE5NSAqLworI2lmZGVmIEJST1dTRVIKKyAgICB7ICJ1cmwiLCAgICAgICBWTl9V UkwsICAgQ01fSU5WfSwgICAvKiAxOTMgKi8KKyNlbmRpZiAvKiBCUk9XU0VSICovCisgICAgeyAi dXNlcmlkIiwgICAgVk5fVUlELCAgIDB9LCAgICAgICAgLyogMTkyICovCisgICAgeyAidmFyZXZh bCIsICAgVk5fVkFSRVZBTCwgMH0sCS8qIDIxMiAqLworICAgIHsgInZlcnNpb24iLCAgIFZOX1ZF UlMsICAwfSwKKyNpZm5kZWYgTk9YRkVSCisgICAgeyAid2luZG93IiwgICAgVk5fV0lORE8sIDB9 LCAgICAgICAgLyogMTkyICovCisjZW5kaWYgLyogTk9YRkVSICovCisjaWZkZWYgSUJNWDI1Cisg ICAgeyAieDI1bG9jYWxfbnVhIiwgVk5fWDI1TEEsIDB9LCAgICAgLyogMTkzICovCisgICAgeyAi eDI1cmVtb3RlX251YSIsIFZOX1gyNVJBLCAwfSwgICAgLyogMTkzICovCisjZW5kaWYgLyogSUJN WDI1ICovCisjaWZkZWYgQ0tfU1NMCisgICAgeyAieDUwOV9pc3N1ZXIiLCAgVk5fWDUwOV9JLCAw fSwKKyAgICB7ICJ4NTA5X3N1YmplY3QiLCBWTl9YNTA5X1MsIDB9LAorI2VuZGlmIC8qIENLX1NT TCAqLworI2lmbmRlZiBOT1hGRVIKKyAgICB7ICJ4ZmVyc3RhdHVzIixWTl9YRlNUQVQsMH0sICAg ICAgICAvKiAxOTMgKi8KKyAgICB7ICJ4ZmVybXNnIiwgICBWTl9YRk1TRywgMH0sICAgICAgICAv KiAxOTMgKi8KKyAgICB7ICJ4ZmVyX2JhZHBhY2tldHMiLCBWTl9YRl9CQywgMH0sICAvKiAxOTUg Ki8KKyAgICB7ICJ4ZmVyX3RpbWVvdXRzIiwgICBWTl9YRl9UTSwgMH0sICAvKiAxOTUgKi8KKyAg ICB7ICJ4ZmVyX3JldHJhbnNtaXRzIixWTl9YRl9SWCwgMH0sICAvKiAxOTUgKi8KKyNlbmRpZiAv KiBOT1hGRVIgKi8KKyAgICB7ICJ4cHJvZ3JhbSIsICBWTl9YUFJPRywgMH0sICAgICAgICAvKiAx OTMgKi8KKyAgICB7ICJ4dmVyc2lvbiIsICBWTl9YVk5VTSwgMH0gICAgICAgICAvKiAxOTIgKi8K K307CitpbnQgbnZhcnMgPSAoc2l6ZW9mKHZhcnRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikp OworI2VuZGlmIC8qIE5PU1BMICovCisKKyNpZm5kZWYgTk9TUEwKK3N0cnVjdCBrZXl0YWIgZm5j dGFiW10gPSB7ICAgICAgICAgICAgICAvKiBGdW5jdGlvbiBuYW1lcyAqLworI2lmZGVmIE9TMgor ICAgIHsgIi5vb3giLCAgICAgICBGTl9PT1gsIENNX0lOVn0sICAgIC8qIC4uLiAqLworI2VuZGlm IC8qIE9TMiAqLworCisjaWZkZWYgQ0tDSEFOTkVMSU8KKyAgICB7ICJfZW9mIiwgICAgICAgRk5f RkVPRiwgICAwfSwKKyAgICB7ICJfZXJybXNnIiwgICAgRk5fRkVSTVNHLCAwfSwKKyAgICB7ICJf Z2V0YmxvY2siLCAgRk5fRkdCTEssICAwfSwKKyAgICB7ICJfZ2V0Y2hhciIsICAgRk5fRkdDSEFS LCAwfSwKKyAgICB7ICJfZ2V0bGluZSIsICAgRk5fRkdMSU5FLCAwfSwKKyAgICB7ICJfaGFuZGxl IiwgICAgRk5fRklMTk8sICAwfSwKKyAgICB7ICJfbGluZSIsICAgICAgRk5fTkxJTkUsICAwfSwK KyAgICB7ICJfcG9zIiwgICAgICAgRk5fRlBPUywgICAwfSwKKyAgICB7ICJfcHV0YmxvY2siLCAg Rk5fRlBCTEssICAwfSwKKyAgICB7ICJfcHV0Y2hhciIsICAgRk5fRlBDSEFSLCAwfSwKKyAgICB7 ICJfcHV0bGluZSIsICAgRk5fRlBMSU5FLCAwfSwKKyAgICB7ICJfc3RhdHVzIiwgICAgRk5fRlNU QVQsICAwfSwKKyNlbmRpZiAvKiBDS0NIQU5ORUxJTyAqLworCisgICAgeyAiYWFjb252ZXJ0Iiwg IEZOX0FBRFVNUCwgMH0sICAgICAgLyogQXNzb2NpYXRpdmUgQXJyYXkgY29udmVyc2lvbiAqLwor ICAgIHsgImFic29sdXRlIiwgICBGTl9BQlMsICAwfSwgICAgICAgIC8qIEFic29sdXRlIHZhbHVl ICovCisjaWZkZWYgVENQU09DS0VUCisgICAgeyAiYWRkcjJuYW1lIiwgIEZOX0hTVEFERCxDTV9J TlZ9LCAgLyogSVAgQWRkcmVzcyB0byBIb3N0bmFtZSAqLworICAgIHsgImFkZHJ0b25hbWUiLCBG Tl9IU1RBREQsQ01fSU5WfSwgIC8qIElQIEFkZHJlc3MgdG8gSG9zdG5hbWUgKi8KKyNlbmRpZiAv KiBUQ1BTT0NLRVQgKi8KKyAgICB7ICJhcnJheWxvb2siLCAgRk5fQUxPT0ssMH0sICAgICAgICAv KiBBcnJheSBsb29rdXAgKi8KKyAgICB7ICJiNjRkZWNvZGUiLCAgRk5fRk1CNjQsMH0sICAgICAg ICAvKiBCYXNlLTY0IGNvbnZlcnNpb24gKi8KKyAgICB7ICJiNjRlbmNvZGUiLCAgRk5fVE9CNjQs MH0sICAgICAgICAvKiAuLi4gKi8KKyAgICB7ICJiYXNlbmFtZSIsICAgRk5fQlNOLCAgMH0sICAg ICAgICAvKiBCYXNlbmFtZSAqLworICAgIHsgImJyZWFrIiwgICAgICBGTl9CUkssICAwfSwgICAg ICAgIC8qIEJyZWFrIChhcyBpbiBTbm9ib2wpICovCisgICAgeyAiY2EiLCAgICAgICAgIEZOX0NB UCwgIENNX0lOVnxDTV9BQlJ9LCAvKiBBYmJyZXZpYXRpb24gZm9yIGNhcGl0YWJsaXplICovCisg ICAgeyAiY2FwIiwgICAgICAgIEZOX0NBUCwgIENNX0lOVnxDTV9BQlJ9LCAvKiBBYmJyZXZpYXRp b24gZm9yIGNhcGl0YWJsaXplICovCisgICAgeyAiY2FwaXRhbGl6ZSIsIEZOX0NBUCwgIDB9LCAg ICAgICAgLyogRmlyc3QgTGV0dGVyIC0+IHVwcGVyY2FzZSAqLworICAgIHsgImNhcHMiLCAgICAg ICBGTl9DQVAsICBDTV9JTlZ9LCAgIC8qIGRpdHRvICovCisgICAgeyAiY2hhcmFjdGVyIiwgIEZO X0NIUiwgIDB9LCAgICAgICAgLyogQ2hhcmFjdGVyIGZyb20gY29kZSAqLworICAgIHsgImNoZWNr c3VtIiwgICBGTl9DSEssICAwfSwgICAgICAgIC8qIENoZWNrc3VtICovCisgICAgeyAiY21kc3Rh Y2siLCAgIEZOX0NNRFNUSywwfSwgICAgICAgLyogQ29tbWFuZCBzdGFjayAqLworICAgIHsgImNt cGRhdGVzIiwgICBGTl9DTVBEQVRFLDB9LCAgICAgIC8qIENvbXBhcmUgZGF0ZXMgKi8KKyAgICB7 ICJjb2RlIiwgICAgICAgRk5fQ09ELCAgMH0sICAgICAgICAvKiBDb2RlIGZyb20gY2hhcmFjdGVy ICovCisjaWZuZGVmIE5PUFVTSAorICAgIHsgImNvbW1hbmQiLCAgICBGTl9DTUQsICAwfSwgICAg ICAgIC8qIE91dHB1dCBmcm9tIGEgY29tbWFuZCAqLworI2VuZGlmIC8qIE5PUFVTSCAqLworICAg IHsgImNvbnRlbnRzIiwgICBGTl9DT04sICAwfSwgICAgICAgIC8qIERlZmluaXRpb24gKGNvbnRl bnRzKSBvZiB2YXJpYWJsZSAqLworICAgIHsgImNvdW50IiwgICAgICBGTl9DT1VOVCwgMH0sICAg ICAgIC8qIE9jY3VycmVuY2VzIG9mIHN0cmluZyBpbiBzdHJpbmcgKi8KKyAgICB7ICJjcmMxNiIs ICAgICAgRk5fQ1JDLCAgMH0sICAgICAgICAvKiBDUkMtMTYgKi8KKyNpZmRlZiBPUzIKKyAgICB7 ICJjcnlwdCIsICAgICAgRk5fQ1JZLCBDTV9JTlZ9LAorI2VuZGlmIC8qIE9TMiAqLworICAgIHsg ImN2dGNzZXQiLCAgICBGTl9YTEFURSwgMH0sCS8qIENvbnZlcnQgY2hhcmFjdGVyIHNldCAqLwor ICAgIHsgImN2dGRhdGUiLCAgICBGTl9EVElNLCAwfSwgICAgICAgIC8qIENvbnZlcnQgZnJlZSBk YXRlL3RpbWUgdG8gc3RkICovCisjaWZkZWYgWkZDREFUCisgICAgeyAiZGF0ZSIsICAgICAgIEZO X0ZELCAgIDB9LCAgICAgICAgLyogRmlsZSBtb2RpZmljYXRpb24vY3JlYXRpb24gZGF0ZSAqLwor I2VuZGlmIC8qIFpGQ0RBVCAqLworICAgIHsgImRheSIsICAgICAgICBGTl9EQVksICAwfSwgICAg ICAgIC8qIERheSBvZiB3ZWVrICovCisgICAgeyAiZGF5b2Z5ZWFyIiwgIEZOX0pEQVRFLDB9LCAg ICAgICAgLyogRGF0ZSB0byBEYXkgb2YgWWVhciAqLworICAgIHsgImRlY29kZWhleCIsICBGTl9V TlBDVCwgMH0sCS8qIERlY29kZSBzdHJpbmcgd2l0aCBoZXggZXNjYXBlcyAqLworICAgIHsgImRl ZmluaXRpb24iLCBGTl9ERUYsICAwfSwgICAgICAgIC8qIFJldHVybiBkZWZpbml0aW9uIG9mIGdp dmVuIG1hY3JvICovCisgICAgeyAiZGVsdGEyc2VjcyIsIEZOX0RFTFNFQywgMH0sICAgICAgLyog RGVsdGEgdGltZSB0byBzZWNvbmRzICovCisgICAgeyAiZGVsdGF0b3NlY3MiLCBGTl9ERUxTRUMs IENNX0lOVn0sIC8qIERlbHRhIHRpbWUgdG8gc2Vjb25kcyAqLworI2lmbmRlZiBOT0RJQUwKKyAg ICB7ICJkaWFsY29udmVydCIsRk5fUE5DVlQsMH0sICAgICAgICAvKiBDb252ZXJ0IHBvcnRhYmxl IHBob25lIG51bWJlciAqLworI2VuZGlmIC8qIE5PRElBTCAqLworICAgIHsgImRpZmZkYXRlcyIs ICBGTl9ESUZEQVRFLDB9LCAgICAgIC8qIERpZmZlcmVuY2Ugb2YgdHdvIGRhdGUtdGltZXMgKi8K KyAgICB7ICJkaW1lbnNpb24iLCAgRk5fRElNLCAgMH0sICAgICAgICAvKiBEaW1lbnNpb24gb2Yg YXJyYXkgKi8KKyAgICB7ICJkaXIiLCAgICAgICAgRk5fRElSLCAgQ01fSU5WfENNX0FCUn0sIC8q IEFiYnJldmlhdGlvbiBmb3IgZGlyZWN0Li4gKi8KKyAgICB7ICJkaXJlIiwgICAgICAgRk5fRElS LCAgQ01fSU5WfENNX0FCUn0sIC8qIEFiYnJldmlhdGlvbiBmb3IgZGlyZWN0Li4gKi8KKyAgICB7 ICJkaXJlYyIsICAgICAgRk5fRElSLCAgQ01fSU5WfENNX0FCUn0sIC8qIEFiYnJldmlhdGlvbiBm b3IgZGlyZWN0Li4gKi8KKyAgICB7ICJkaXJlY3QiLCAgICAgRk5fRElSLCAgQ01fSU5WfENNX0FC Un0sIC8qIEFiYnJldmlhdGlvbiBmb3IgZGlyZWN0Li4gKi8KKyAgICB7ICJkaXJlY3RvIiwgICAg Rk5fRElSLCAgQ01fSU5WfENNX0FCUn0sIC8qIEFiYnJldmlhdGlvbiBmb3IgZGlyZWN0Li4gKi8K KyAgICB7ICJkaXJlY3RvciIsICAgRk5fRElSLCAgQ01fSU5WfENNX0FCUn0sIC8qIEFiYnJldmlh dGlvbiBmb3IgZGlyZWN0Li4gKi8KKyAgICB7ICJkaXJlY3RvcmllcyIsRk5fRElSLCAgMH0sICAg ICAgICAvKiBMaXN0IG9mIGRpcmVjdG9yaWVzICovCisgICAgeyAiZGlyZWN0b3J5IiwgIEZOX0RJ UiwgIENNX0lOVn0sCS8qIExpc3Qgb2YgZGlyZWN0b3JpZXMgKi8KKyAgICB7ICJkaXJuYW1lIiwg ICAgRk5fRE5BTSwgMH0sICAgICAgICAvKiBEaXJlY3RvcnkgcGFydCBvZiBmaWxlbmFtZSAqLwor ICAgIHsgImRvczJ1bml4cGF0aCIsRk5fUENfRFUsIH0sICAgICAgIC8qIERPUyB0byBVTklYIHBh dGggKi8KKyAgICB7ICJkb3N0b3VuaXhwYXRoIixGTl9QQ19EVSwgQ01fSU5WfSwgLyogRE9TIHRv IFVOSVggcGF0aCAqLworICAgIHsgImRveSIsICAgICAgICBGTl9KREFURSxDTV9JTlZ9LCAgIC8q IERhdGUgdG8gRGF5IG9mIFllYXIgKi8KKyAgICB7ICJkb3kyZGF0ZSIsICAgRk5fREFURUosMH0s ICAgICAgICAvKiBEYXkgb2YgWWVhciB0byBkYXRlICovCisgICAgeyAiZG95dG9kYXRlIiwgIEZO X0RBVEVKLENNX0lOVn0sICAgLyogRGF5IG9mIFllYXIgdG8gZGF0ZSAqLworICAgIHsgImVtYWls YWRkcmVzcyIsRk5fRU1BSUwsIDB9LAkvKiBFbWFpbCBhZGRyZXNzICovCisjaWZkZWYgRk5fRVJS TVNHCisgICAgeyAiZXJyc3RyaW5nIiwgIEZOX0VSUk1TRywwfSwgICAgICAgLyogRXJyb3IgY29k ZSB0byBtZXNzYWdlICovCisjZW5kaWYgLyogRk5fRVJSTVNHICovCisgICAgeyAiZXZhbHVhdGUi LCAgIEZOX0VWQSwgIDB9LCAgICAgICAgLyogRXZhbHVhdGUgZ2l2ZW4gYXJpdGggZXhwcmVzc2lv biAqLworICAgIHsgImV4ZWN1dGUiLCAgICBGTl9FWEUsICAwfSwgICAgICAgIC8qIEV4ZWN1dGUg Z2l2ZW4gbWFjcm8gKi8KKyAgICB7ICJmaWxlcyIsICAgICAgRk5fRkMsICAgMH0sICAgICAgICAv KiBGaWxlIGNvdW50ICovCisjaWZkZWYgRk5GTE9BVAorICAgIHsgImZwYWJzb2x1dGUiLCBGTl9G UEFCUywgMH0sICAgICAgIC8qIEZsb2F0aW5nLXBvaW50IGFic29sdXRlIHZhbHVlICovCisgICAg eyAiZnBhZGQiLCAgICAgIEZOX0ZQQURELCAwfSwgICAgICAgLyogRlAgYWRkICovCisgICAgeyAi ZnBjb3NpbmUiLCAgIEZOX0ZQQ09TLCAwfSwgICAgICAgLyogRlAgY29zaW5lICovCisgICAgeyAi ZnBkaXZpZGUiLCAgIEZOX0ZQRElWLCAwfSwgICAgICAgLyogRlAgZGl2aWRlICovCisgICAgeyAi ZnBleHAiLCAgICAgIEZOX0ZQRVhQLCAwfSwgICAgICAgLyogRlAgZSB0byB0aGUgeCAqLworICAg IHsgImZwaW50IiwgICAgICBGTl9GUElOVCwgMH0sICAgICAgIC8qIEZQIHRvIGludGVnZXIgKi8K KyAgICB7ICJmcGxvZzEwIiwgICAgRk5fRlBMT0csIDB9LCAgICAgICAvKiBGUCBiYXNlLTEwIGxv Z2FyaXRobSAqLworICAgIHsgImZwbG9nbiIsICAgICBGTl9GUExOLCAgMH0sICAgICAgIC8qIEZQ IG5hdHVyYWwgbG9nYXJpdGhtICovCisgICAgeyAiZnBtYXhpbXVtIiwgIEZOX0ZQTUFYLCAwfSwg ICAgICAgLyogRlAgbWF4aW51bSAqLworICAgIHsgImZwbWluaW11bSIsICBGTl9GUE1JTiwgMH0s ICAgICAgIC8qIEZQIG1pbmludW0gKi8KKyAgICB7ICJmcG1vZHVsdXMiLCAgRk5fRlBNT0QsIDB9 LCAgICAgICAvKiBGUCBtb2R1bHVzICovCisgICAgeyAiZnBtdWx0aXBseSIsIEZOX0ZQTVVMLCAw fSwgICAgICAgLyogRlAgbXVsdGlwbHkgKi8KKyAgICB7ICJmcHJhaXNlIiwgICAgRk5fRlBQT1cs IDB9LCAgICAgICAvKiBGUCByYWlzZSB0byBhIHBvd2VyICovCisgICAgeyAiZnByb3VuZCIsICAg IEZOX0ZQUk9VLCAwfSwgICAgICAgLyogRlAgcm91bmQgKi8KKyAgICB7ICJmcHNpbmUiLCAgICAg Rk5fRlBTSU4sIDB9LCAgICAgICAvKiBGUCBzaW5lICovCisgICAgeyAiZnBzcXJ0IiwgICAgIEZO X0ZQU1FSLCAwfSwgICAgICAgLyogRlAgc3F1YXJlIHJvb3QgKi8KKyAgICB7ICJmcHN1YnRyYWN0 IiwgRk5fRlBTVUIsIDB9LCAgICAgICAvKiBGUCBzdWJ0cmFjdCAqLworICAgIHsgImZwdGFuZ2Vu dCIsICBGTl9GUFRBTiwgMH0sICAgICAgIC8qIEZQIHRhbmdlbnQgKi8KKyNlbmRpZiAvKiBGTkZM T0FUICovCisgICAgeyAiZnVuY3Rpb24iLCAgIEZOX0ZVTkMsIDAgfSwgICAgICAgLyogVGVzdCBm b3IgZXhpc3RlbmNlIG9mIGEgZnVuY3Rpb24gKi8KKyAgICB7ICJnZXRwaWRpbmZvIiwgRk5fUElE LCAwICB9LCAgICAgICAvKiBHZXQgUElEIGluZm8gKi8KKyAgICB7ICJoZXgyaXAiLCAgICAgRk5f SEVYMklQLDB9LCAgICAgICAvKiBIZXggdG8gSVAgYWRkcmVzcyAqLworICAgIHsgImhleHRvaXAi LCAgICBGTl9IRVgySVAsQ01fSU5WfSwgIC8qIEhleCB0byBJUCBhZGRyZXNzICovCisgICAgeyAi aGV4Mm4iLCAgICAgIEZOX0hFWDJOLCBDTV9JTlZ9LCAgLyogSGV4IHRvIGRlY2ltYWwgbnVtYmVy ICovCisgICAgeyAiaGV4aWZ5IiwgICAgIEZOX0hFWCwgICAwfSwgICAgICAgLyogSGV4aWZ5IChz dHJpbmcpICovCisgICAgeyAiaW5kZXgiLCAgICAgIEZOX0lORCwgICAwfSwgICAgICAgLyogSW5k ZXggKHN0cmluZyBzZWFyY2gpICovCisgICAgeyAiaXAyaGV4IiwgICAgIEZOX0lQMkhFWCwwfSwg ICAgICAgLyogSVAgYWRkcmVzcyB0byBoZXggKi8KKyAgICB7ICJpcHRvaGV4IiwgICAgRk5fSVAy SEVYLENNX0lOVn0sICAvKiBJUCBhZGRyZXNzIHRvIGhleCAqLworICAgIHsgImlwYWRkcmVzcyIs ICBGTl9JUEEsICAgMH0sICAgICAgIC8qIEZpbmQgYW5kIHJldHVybiBJUCBhZGRyZXNzICovCisg ICAgeyAiamRhdGUiLCAgICAgIEZOX0pEQVRFLCBDTV9JTlZ9LCAgLyogRGF0ZSB0byBEYXkgb2Yg WWVhciAqLworICAgIHsgImpvaW4iLCAgICAgICBGTl9KT0lOLCAgMH0sICAgICAgIC8qIEpvaW4g YXJyYXkgZWxlbWVudHMgKi8KKyAgICB7ICJrZXl3b3JkdmFsdWUiLCAgRk5fS1dWQUwsIDB9LCAg ICAvKiBLZXl3b3JkPVZhbHVlICovCisjaWZkZWYgQ0tfS0VSQkVST1MKKyAgICB7ICJrcmJmbGFn cyIsICAgICAgRk5fS1JCX0ZHLCAwfSwgICAvKiBLZXJiZXJvcyBmdW5jdGlvbnMgKi8KKyAgICB7 ICJrcmJpc3ZhbGlkIiwgICAgRk5fS1JCX0lWLCAwfSwKKyAgICB7ICJrcmJuZXh0dGlja2V0Iiwg Rk5fS1JCX05YLCAwfSwKKyAgICB7ICJrcmJ0aWNrZXRzIiwgICAgRk5fS1JCX1RLLCAwfSwKKyAg ICB7ICJrcmJ0aW1lbGVmdCIsICAgRk5fS1JCX1RULCAwfSwKKyNlbmRpZiAvKiBDS19LRVJCRVJP UyAqLworICAgIHsgImt3dmFsdWUiLCAgICBGTl9LV1ZBTCwgQ01fSU5WfSwJLyogS2V5d29yZD1W YWx1ZSAqLworICAgIHsgImxlZnQiLCAgICAgICBGTl9MRUYsICAwfSwgICAgICAgIC8qIExlZnRt b3N0IG4gY2hhcmFjdGVycyBvZiBzdHJpbmcgKi8KKyAgICB7ICJsZW5ndGgiLCAgICAgRk5fTEVO LCAgMH0sICAgICAgICAvKiBSZXR1cm4gbGVuZ3RoIG9mIGFyZ3VtZW50ICovCisgICAgeyAibGl0 ZXJhbCIsICAgIEZOX0xJVCwgIDB9LCAgICAgICAgLyogUmV0dXJuIGFyZ3VtZW50IGxpdGVyYWxs eSAqLworI2lmZGVmIE5UCisgICAgeyAibG9uZ3BhdGhuYW1lIixGTl9MTkFNRSwwfSwJLyogR2V0 TG9uZ1BhdGhOYW1lKCkgKi8KKyNlbHNlCisgICAgeyAibG9uZ3BhdGhuYW1lIixGTl9GRk4sQ01f SU5WfSwKKyNlbmRpZiAvKiBOVCAqLworICAgIHsgImxvcCIsICAgICAgICBGTl9TVEwsICAwfSwg ICAgICAgIC8qIExvcCAqLworICAgIHsgImxvcHgiLCAgICAgICBGTl9MT1BYLCAwfSwgICAgICAg IC8qIExvcHggKi8KKyAgICB7ICJsb3dlciIsICAgICAgRk5fTE9XLCAgMH0sICAgICAgICAvKiBS ZXR1cm4gbG93ZXJjYXNlZCBhcmd1bWVudCAqLworICAgIHsgImxwYWQiLCAgICAgICBGTl9MUEEs ICAwfSwgICAgICAgIC8qIFJldHVybiBsZWZ0LXBhZGRlZCBhcmd1bWVudCAqLworICAgIHsgImx0 cmltIiwgICAgICBGTl9MVFIsICAwfSwgICAgICAgIC8qIExlZnQtVHJpbSAqLworICAgIHsgIm1h eGltdW0iLCAgICBGTl9NQVgsICAwfSwgICAgICAgIC8qIFJldHVybiBtYXhpbXVtIG9mIHR3byBh cmd1bWVudHMgKi8KKyAgICB7ICJtaW5pbXVtIiwgICAgRk5fTUlOLCAgMH0sICAgICAgICAvKiBS ZXR1cm4gbWluaW11bSBvZiB0d28gYXJndW1lbnRzICovCisgICAgeyAibWpkIiwgICAgICAgIEZO X01KRCwgIDB9LCAgICAgICAgLyogRGF0ZSB0byBNb2RpZmllZCBKdWxpYW4gRGF0ZSAqLworICAg IHsgIm1qZDJkYXRlIiwgICBGTl9NSkQyLCAwfSwgICAgICAgIC8qIE1KRCB0byBEYXRlICovCisg ICAgeyAibWpkdG9kYXRlIiwgIEZOX01KRDIsIENNX0lOVn0sICAgLyogTUpEIHRvIERhdGUgKi8K KyAgICB7ICJtb2R1bHVzIiwgICAgRk5fTU9ELCAgMH0sICAgICAgICAvKiBSZXR1cm4gbW9kdWx1 cyBvZiB0d28gYXJndW1lbnRzICovCisjaWZkZWYgQ09NTUVOVAorICAgIHsgIm1zbGVlcCIsICAg ICBGTl9NU0xFRVAsMH0sICAgICAgIC8qIFNsZWVwIGZvciBuIG1pbGxpc2Vjb25kcyAqLworI2Vu ZGlmIC8qIENPTU1FTlQgKi8KKyAgICB7ICJuMmhleCIsICAgICAgRk5fMkhFWCwgQ01fSU5WfSwg ICAvKiBOdW1iZXIgdG8gaGV4ICovCisgICAgeyAibjJvY3RhbCIsICAgIEZOXzJPQ1QsIENNX0lO Vn0sICAgLyogTnVtYmVyIHRvIG9jdGFsICovCisgICAgeyAibjJ0aW1lIiwgICAgIEZOX04yVElN LDB9LCAgICAgICAgLyogTnVtYmVyIHRvIGhoOm1tOnNzICovCisjaWZkZWYgVENQU09DS0VUCisg ICAgeyAibmFtZTJhZGRyIiwgIEZOX0hTVE5BTSxDTV9JTlZ9LCAgLyogSG9zdG5hbWUgdG8gSVAg QWRkcmVzcyAqLworI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLworICAgIHsgIm5kYXkiLCAgICAgICBG Tl9OREFZLCAwfSwgICAgICAgIC8qIE51bWVyaWMgZGF5IG9mIHdlZWsgKi8KKyAgICB7ICJuZXh0 ZmlsZSIsICAgRk5fRklMLCAgMH0sICAgICAgICAvKiBOZXh0IGZpbGUgaW4gbGlzdCAqLworICAg IHsgIm50aW1lIiwgICAgICBGTl9OVElNLCAwfSwgICAgICAgIC8qIFRpbWUgdG8gc2Vjb25kcyBz aW5jZSBtaWRuaWdodCAqLworICAgIHsgIm50b2hleCIsICAgICBGTl8ySEVYLCBDTV9JTlZ9LCAg IC8qIE51bWJlciB0byBoZXggKi8KKyAgICB7ICJudG9vY3RhbCIsICAgRk5fMk9DVCwgQ01fSU5W fSwgICAvKiBOdW1iZXIgdG8gb2N0YWwgKi8KKyAgICB7ICJudG90aW1lIiwgICAgRk5fTjJUSU0s Q01fSU5WfSwgICAvKiBOdW1iZXIgdG8gaGg6bW06c3MgKi8KKyAgICB7ICJvY3QybiIsICAgICAg Rk5fT0NUMk4sQ01fSU5WfSwgICAvKiBPY3RhbCB0byBkZWNpbWFsIG51bWJlciAqLworICAgIHsg Im9jdHRvbiIsICAgICBGTl9PQ1QyTixDTV9JTlZ9LCAgIC8qIE9jdGFsIHRvIGRlY2ltYWwgbnVt YmVyICovCisgICAgeyAicGF0aG5hbWUiLCAgIEZOX0ZGTiwgIDB9LCAgICAgICAgLyogRnVsbCBm aWxlIG5hbWUgKi8KKyAgICB7ICJwYXR0ZXJuIiwgICAgRk5fUEFUVEVSTiwgMH0sICAgICAvKiBQ YXR0ZXJuIChmb3IgSU5QVVQpICovCisjaWZkZWYgQ0tfUEVSTVMKKyAgICB7ICJwZXJtaXNzaW9u cyIsRk5fUEVSTSwgMH0sICAgICAgICAvKiBQZXJtaXNzaW9ucyBvZiBmaWxlICovCisjZWxzZQor ICAgIHsgInBlcm1pc3Npb25zIixGTl9QRVJNLCBDTV9JTlZ9LCAgIC8qIFBlcm1pc3Npb25zIG9m IGZpbGUgKi8KKyNlbmRpZiAvKiBDS19QRVJNUyAqLworI2lmZGVmIFNFRUtfQ1VSCisgICAgeyAi cGljdHVyZWluZm8iLEZOX1BJQ1RVUkUsIDAgfSwJLyogUGljdHVyZSBvcmllbnRhdGlvbi9kaW1l bnNpb25zICovCisjZW5kaWYJLyogU0VFS19DVVIgKi8KKyAgICB7ICJyYWRpeCIsICAgICAgRk5f UkFESVgsIDAgfSwJLyogUmFkaXggY29udmVyc2lvbiAqLworI2lmbmRlZiBOT1JBTkRPTQorICAg IHsgInJhbmRvbSIsICAgICBGTl9SQU5ELCAwfSwgICAgICAgIC8qIFJhbmRvbSBudW1iZXIgKi8K KyNlbmRpZiAvKiBOT1JBTkRPTSAqLworI2lmbmRlZiBOT1BVU0gKKyAgICB7ICJyYXdjb21tYW5k IiwgRk5fUkFXLCAgMH0sICAgICAgICAvKiBPdXRwdXQgZnJvbSBhIGNvbW1hbmQgKHJhdykgKi8K KyNlbmRpZiAvKiBOT1BVU0ggKi8KKyNpZmRlZiBSRUNVUlNJVkUKKyAgICB7ICJyZGlyZWN0b3Jp ZXMiLCBGTl9SRElSLCAwfSwgICAgICAvKiBSZWN1cnNpdmUgZGlyZWN0b3J5IGxpc3QgKi8KKyNl bmRpZiAvKiBSRUNVUlNJVkUgKi8KKyAgICB7ICJyZWN1cnNlIiwgICAgRk5fUkVDVVJTRSwgMH0s CS8qIFJlY3Vyc2l2ZSB2YXJpYWJsZSBldmFsdWF0aW9uICovCisjaWZkZWYgUkVDVVJTSVZFCisg ICAgeyAicmZpbGVzIiwgICAgICAgRk5fUkZJTCwgMH0sICAgICAgLyogUmVjdXJzaXZlIGZpbGUg bGlzdCAqLworI2VuZGlmIC8qIFJFQ1VSU0lWRSAqLworICAgIHsgInJlcCIsICAgICAgICBGTl9S RVAsIENNX0lOVnxDTV9BQlJ9LAorICAgIHsgInJlcGVhdCIsICAgICBGTl9SRVAsICAwfSwgICAg ICAgIC8qIFJlcGVhdCBhcmd1bWVudCBnaXZlbiAjIG9mIHRpbWVzICovCisgICAgeyAicmVwbGFj ZSIsICAgIEZOX1JQTCwgIDB9LCAgICAgICAgLyogUmVwbGFjZSBjaGFyYWN0ZXJzIGluIHN0cmlu ZyAqLworICAgIHsgInJldmVyc2UiLCAgICBGTl9SRVYsICAwfSwgICAgICAgIC8qIFJldmVyc2Ug dGhlIGFyZ3VtZW50IHN0cmluZyAqLworICAgIHsgInJpZ2h0IiwgICAgICBGTl9SSUcsICAwfSwg ICAgICAgIC8qIFJpZ2h0bW9zdCBuIGNoYXJhY3RlcnMgb2Ygc3RyaW5nICovCisgICAgeyAicmlu ZGV4IiwgICAgIEZOX1JJWCwgIDB9LCAgICAgICAgLyogUmlnaHQgaW5kZXggKi8KKyAgICB7ICJy cGFkIiwgICAgICAgRk5fUlBBLCAgMH0sICAgICAgICAvKiBSaWdodC1wYWQgdGhlIGFyZ3VtZW50 ICovCisgICAgeyAicnNlYXJjaCIsICAgIEZOX1JTRUFSQ0gsIDB9LCAgICAgLyogUi1MIFNlYXJj aCBmb3IgcGF0dGVybiBpbiBzdHJpbmcgKi8KKyNpZmRlZiBPUzIKKyAgICB7ICJzY3JuY3VyeCIs ICAgRk5fU0NSTl9DWCwgIDB9LCAgICAvKiBTY3JlZW4gQ3Vyc29yIFggUG9zICovCisgICAgeyAi c2NybmN1cnkiLCAgIEZOX1NDUk5fQ1ksICAwfSwgICAgLyogU2NyZWVuIEN1cnNvciBZIFBvcyAq LworICAgIHsgInNjcm5zdHIiLCAgICBGTl9TQ1JOX1NUUiwgMH0sICAgIC8qIFNjcmVlbiBTdHJp bmcgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyAgICB7ICJzZWFyY2giLCAgICAgRk5fU0VBUkNILCAw fSwgICAgICAvKiBMLVIgU2VhcmNoIGZvciBwYXR0ZXJuIGluIHN0cmluZyAqLworI2lmbmRlZiBO T1NFWFAKKyAgICB7ICJzZXhwcmVzc2lvbiIsRk5fU0VYUCwgMH0sICAgICAgICAvKiBTLUV4cHJl c3Npb24gKi8KKyNlbmRpZiAvKiBOT1NFWFAgKi8KKyNpZmRlZiBOVAorICAgIHsgInNob3J0cGF0 aG5hbWUiLEZOX1NOQU1FLDB9LAkvKiBHZXRTaG9ydFBhdGhOYW1lKCkgKi8KKyNlbHNlCisgICAg eyAic2hvcnRwYXRobmFtZSIsRk5fRkZOLENNX0lOVn0sCisjZW5kaWYgLyogTlQgKi8KKyAgICB7 ICJzaXplIiwgICAgICAgRk5fRlMsICAgMH0sICAgICAgICAvKiBGaWxlIHNpemUgKi8KKyNpZmRl ZiBDT01NRU5UCisgICAgeyAic2xlZXAiLCAgICAgIEZOX1NMRUVQLDB9LCAgICAgICAgLyogU2xl ZXAgZm9yIG4gc2Vjb25kcyAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICB7ICJzcGFuIiwg ICAgICAgRk5fU1BOLCAgMH0sICAgICAgICAvKiBTcGFuIC0gbGlrZSBTbm9ib2wgKi8KKyAgICB7 ICJzcGxpdCIsICAgICAgRk5fU1BMSVQsMH0sICAgICAgICAvKiBTcGxpdCBzdHJpbmcgaW50byB3 b3JkcyAqLworICAgIHsgInNxdWVlemUiLCAgICBGTl9TUVVFRVpFLDB9LAkvKiBTcXVlZXplIHdo aXRlc3BhY2UgaW4gc3RyaW5nICovCisgICAgeyAic3RyY21wIiwgICAgIEZOX1NUUkNNUCwwfSwJ LyogU3RyaW5nIGNvbXBhcmlzb24gKi8KKyAgICB7ICJzdHJpbmd0eXBlIiwgRk5fU1RSSU5HVCww fSwJLyogU3RyaW5nIHR5cGUgKDctYml0LCA4LWJpdCwgVVRGLTgpICovCisgICAgeyAic3RyaXBi IiwgICAgIEZOX1NUQiwgIDB9LCAgICAgICAgLyogU3RyaXAgZW5jbG9zaW5nIGJyYWNlcy9icmFj a2V0cyAqLworICAgIHsgInN0cmlwbiIsICAgICBGTl9TVE4sICAwfSwgICAgICAgIC8qIFN0cmlw IG4gY2hhcnMgKi8KKyAgICB7ICJzdHJpcHgiLCAgICAgRk5fU1RYLCAgMH0sICAgICAgICAvKiBT dHJpcCBzdWZmaXggKi8KKyAgICB7ICJzdSIsICAgICAgICAgRk5fU1VCLCAgQ01fSU5WfENNX0FC Un0sCisgICAgeyAic3ViIiwgICAgICAgIEZOX1NVQiwgIENNX0lOVnxDTV9BQlJ9LAorICAgIHsg InN1YnMiLCAgICAgICBGTl9TVUIsICBDTV9JTlZ8Q01fQUJSfSwKKyAgICB7ICJzdWJzdCIsICAg ICAgRk5fU1VCLCAgQ01fSU5WfENNX0FCUn0sCisgICAgeyAic3Vic3RpdHV0ZSIsIEZOX1NVQlNU LDB9LCAgICAgICAgLyogU3Vic3RpdHV0ZSBjaGFycyAqLworICAgIHsgInN1YnN0cmluZyIsICBG Tl9TVUIsICAwfSwgICAgICAgIC8qIEV4dHJhY3Qgc3Vic3RyaW5nIGZyb20gYXJndW1lbnQgKi8K KyAgICB7ICJ0YWJsZWxvb2siLCAgRk5fVExPT0ssMH0sICAgICAgICAvKiBUYWJsZSBsb29rdXAg Ki8KKyAgICB7ICJ0aW1lIiwgICAgICAgRk5fVElNRSwgMH0sICAgICAgICAvKiBGcmVlLWZvcm1h dCB0aW1lIHRvIGhoOm1tOnNzICovCisgICAgeyAidG9kMnNlY3MiLCAgIEZOX05USU0sIENNX0lO Vn0sICAgLyogVGltZS1vZi1kYXktdG8tc2Vjcy1zaW5jZS1taWRuaXRlICovCisgICAgeyAidG9k dG9zZWNzIiwgIEZOX05USU0sIENNX0lOVn0sICAgLyogVGltZS1vZi1kYXktdG8tc2Vjcy1zaW5j ZS1taWRuaXRlICovCisgICAgeyAidHJpbSIsICAgICAgIEZOX1RSTSwgIDB9LCAgICAgICAgLyog VHJpbSAqLworICAgIHsgInVuaGV4aWZ5IiwgICBGTl9VTkgsICAwfSwgICAgICAgIC8qIFVuaGV4 aWZ5ICovCisgICAgeyAidW5peDJkb3NwYXRoIixGTl9QQ19VRCwgMH0sICAgICAgLyogVU5JWCB0 byBET1MgcGF0aCAqLworICAgIHsgInVuaXh0b2Rvc3BhdGgiLEZOX1BDX1VELCBDTV9JTlZ9LCAv KiBVTklYIHRvIERPUyBwYXRoICovCisgICAgeyAidW50YWJpZnkiLCAgIEZOX1VOVEFCLDB9LCAg ICAgICAgLyogVW50YWJpZnkgKi8KKyAgICB7ICJ1cHBlciIsICAgICAgRk5fVVBQLCAgMH0sICAg ICAgICAvKiBSZXR1cm4gdXBwZXJjYXNlZCBhcmd1bWVudCAqLworICAgIHsgInV0Y2RhdGUiLCAg ICBGTl9UT0dNVCwwfSwgICAgICAgIC8qIERhdGUtdGltZSB0byBVVEMgKEdNVCkgKi8KKyAgICB7 ICJ2ZXJpZnkiLCAgICAgRk5fVkVSLCAgMH0sICAgICAgICAvKiBWZXJpZnkgKi8KKyAgICB7ICJ3 b3JkIiwgICAgICAgRk5fV09SRCwgMH0sICAgICAgICAvKiBFeHRyYWN0IGEgd29yZCAqLworICAg IHsgIiIsIDAsIDB9Cit9OworaW50IG5mdW5jcyA9IChzaXplb2YoZm5jdGFiKSAvIHNpemVvZihz dHJ1Y3Qga2V5dGFiKSkgLSAxOworI2VuZGlmIC8qIE5PU1BMICovCisKKyNpZm5kZWYgTk9TUEwg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBCdWZmZXIgZm9yIGV4cGFuc2lvbiBvZiAqLwor I2lmZGVmIEJJR0JVRk9LICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGJ1aWx0LWluIHZhcmlh Ymxlcy4gKi8KKyNkZWZpbmUgVlZCVUZMIDEwMjQKKyNlbHNlCisjZGVmaW5lIFZWQlVGTCAyNTYK KyNlbmRpZiAvKiBCSUdCVUZPSyAqLworY2hhciB2dmJ1ZltWVkJVRkwrMV07CisjZW5kaWYgLyog Tk9TUEwgKi8KKworc3RydWN0IGtleXRhYiBkaXNwdGJbXSA9IHsgICAgICAgICAgICAgIC8qIExv ZyBmaWxlIGRpc3Bvc2l0aW9uICovCisgICAgeyAiYXBwZW5kIiwgICAgMSwgIDB9LAorICAgIHsg Im5ldyIsICAgICAgIDAsICAwfQorfTsKKworI2lmZGVmIENLRkxPQVQKKworLyogSSBOIEkgVCBG IEwgTyBBIFQgIC0tICBEZWR1Y2UgZmxvYXRpbmctcG9pbnQgcHJlY2lzaW9uIGJ5IGluc3BlY3Rp b24gKi8KKworaW50IGZwX3JvdW5kaW5nID0gMDsgICAgICAgICAgICAgICAgLyogTm9uemVybyBp ZiBwcmludGYoIiVmIikgcm91bmRzICovCitpbnQgZnBfZGlnaXRzID0gMDsgICAgICAgICAgICAg ICAgICAvKiBEaWdpdHMgb2YgZmxvYXRpbmcgcG9pbnQgcHJlY2lzaW9uICovCisKKyNpZmRlZiBD T01NRU5UCisvKiBGb3IgbG9va2luZyBhdCBpbnRlcm5hbCBmbG9hdGluZy1wb2ludCByZXByZXNl bnRhdGlvbnMgKi8KK3N0YXRpYyBjaGFyIGZwX3hidWZbMTI4XTsKK3N0YXRpYyBjaGFyICoKK3Rv aGV4KHMsIG4pIENIQVIgKiBzOyBpbnQgbjsgeworICAgIGludCB4OworICAgIGNoYXIgKiBwID0g ZnBfeGJ1ZjsKKyAgICB3aGlsZSAobi0tID4gMCkgeworICAgICAgICB4ID0gKCpzID4+IDQpICYg MHgwZjsKKyAgICAgICAgKnArKyA9IGhleGRpZ2l0c1t4XTsKKyAgICAgICAgeCA9ICpzKysgJiAw eDBmOworICAgICAgICAqcCsrID0gaGV4ZGlnaXRzW3hdOworICAgIH0KKyAgICAqcCA9IE5VTDsK KyAgICByZXR1cm4oKGNoYXIgKilmcF94YnVmKTsKK30KKyNlbmRpZiAvKiBDT01NRU5UICovCisK K2NoYXIgbWF0aF9waVtdID0gIjMuMTQxNTkyNjUzNTg5NzkzMjM4NDYyNjQzMzgzMjc5NSI7Citj aGFyIG1hdGhfZVtdID0gICIyLjcxODI4MTgyODQ1OTA0NTIzNTM2MDI4NzQ3MTM1MjciOworCitW T0lECitpbml0ZmxvYXQoKSB7CisgICAgY2hhciAqIGJ1ZiA9IE5VTEw7CisgICAgaW50IGksIHgs IHk7CisvKgorICBXZSBtYWxsb2MgYSBiaWcgdGVtcG9yYXJ5IGJ1ZmZlciBmb3Igc3ByaW50Zigp IHRvIG1pbmltaXplIGxpa2VsaWhvb2Qgb2YKKyAgKGFuZCBkYW1hZ2UgZnJvbSkgc3ByaW50ZiBi dWZmZXIgb3ZlcmZsb3dzLiAgSW4gYW55IGNhc2UsIHRoZSBvbmx5IHdheSB0aGlzCisgIGNvdWxk IGhhcHBlbiB3b3VsZCBiZSBpZiBzcHJpbnRmKCkgaXRzZWxmIGhhZCBidWdzLCBzaW5jZSB0aGUg Zm9ybWF0CisgIGRlc2NyaXB0b3Igc2F5cyB0byBjdXQgaXQgb2ZmIGF0IDI1MCBkZWNpbWFsIHBs YWNlcy4KKyovCisgICAgaWYgKChidWYgPSAoY2hhciAqKW1hbGxvYyg0MDk2KSkpIHsKKyAgICAg ICAgc3ByaW50ZihidWYsIiUwLjI1MGYiLCgxMC4wIC8gMy4wKSk7CisgICAgICAgIGZvciAoaSA9 IDI7IGkgPCAyNTAgJiYgYnVmW2ldID09ICczJzsgaSsrKSA7CisgICAgICAgIHggPSBpIC0gMTsK KyAgICAgICAgZGVidWcoRjExMSwiaW5pdGZsb2F0IDEwLjAvMy4wIixidWYseCk7CisgICAgICAg IHNwcmludGYoYnVmLCIlMC4yNTBmIiwoNC4wIC8gOS4wKSk7CisgICAgICAgIGZvciAoaSA9IDI7 IGkgPCAyNTAgJiYgYnVmW2ldID09ICc0JzsgaSsrKSA7CisgICAgICAgIHkgPSBpIC0gMTsKKyAg ICAgICAgZGVidWcoRjExMSwiaW5pdGZsb2F0IDQuMC85LjAiLGJ1Zix5KTsKKyAgICAgICAgZnBf ZGlnaXRzID0gKHggPCB5KSA/IHggOiB5OworICAgICAgICBpZiAoZnBfZGlnaXRzIDwgc2l6ZW9m KG1hdGhfcGkpIC0gMSkgeworICAgICAgICAgICAgbWF0aF9waVtmcF9kaWdpdHMrMV0gPSBOVUw7 CisgICAgICAgICAgICBtYXRoX2VbZnBfZGlnaXRzKzFdID0gTlVMOworICAgICAgICB9CisgICAg ICAgIHNwcmludGYoYnVmLCIlMC42ZiIsKDcuMCAvIDkuMCkpOworICAgICAgICBpZiAoYnVmWzdd ID09ICc4JykgZnBfcm91bmRpbmcgPSAxOworICAgICAgICBkZWJ1ZyhGMTExLCJpbml0ZmxvYXQg Ny4wLzkuMCIsYnVmLGZwX3JvdW5kaW5nKTsKKyAgICAgICAgZGVidWcoRjEwMSwiaW5pdGZsb2F0 IHByZWNpc2lvbiIsIiIsZnBfZGlnaXRzKTsKKyAgICAgICAgZnJlZShidWYpOworICAgIH0KK30K KyNlbmRpZiAvKiBDS0ZMT0FUICovCisKKy8qCisgIFAgUiBFIFMgQyBBIE4gLS0gQSBxdWljayBs b29rIHRocm91Z2ggdGhlIGNvbW1hbmQtbGluZSBvcHRpb25zIGZvcgorICBpdGVtcyB0aGF0IG11 c3QgYmUgaGFuZGxlZCBiZWZvcmUgdGhlIGluaXRpYWxpemF0aW9uIGZpbGUgaXMgZXhlY3V0ZWQu CisqLworI2lmZGVmIE5UCitleHRlcm4gaW50IFN0YXJ0ZWRGcm9tRGlhbGVyOworI2VuZGlmIC8q IE5UICovCisjaWZkZWYgT1MyCitleHRlcm4gaW50IGs5NXN0ZGlvOwordW5zaWduZWQgbG9uZyBz dGFydGZsYWdzID0gMEw7CisjZW5kaWYgLyogT1MyICovCisKK3N0YXRpYyBjaGFyICoKK2ZpbmRp bnBhdGgoYXJnKSBjaGFyICogYXJnOyB7CisjaWZkZWYgT1MyCisgICAgY2hhciAqIHNjcmlwdGVu diwgKiBrZXltYXBlbnY7CisgICAgaW50IGxlbjsKKyNlbmRpZiAvKiBPUzIgKi8KKyNpZmRlZiBE Q01EQlVGCisgICAgZXh0ZXJuIGNoYXIgKiBjbWRidWY7CisjZWxzZQorICAgIGV4dGVybiBjaGFy IGNtZGJ1ZltdOworI2VuZGlmIC8qIERDTURCVUYgKi8KKyAgICBjaGFyIHRha2VwYXRoWzQwOTZd OworICAgIGNoYXIgKiBzOworICAgIGludCB4LCB6OworCisgICAgLyogU2V0IHVwIHNlYXJjaCBw YXRoLi4uICovCisjaWZkZWYgT1MyCisgICAgY2hhciAqIGFwcGRhdGEwID0gTlVMTCwgKmFwcGRh dGExID0gTlVMTDsKKyNpZmRlZiBOVAorICAgIHNjcmlwdGVudiA9IGdldGVudigiSzk1U0NSSVBU UyIpOworICAgIGtleW1hcGVudiA9IGdldGVudigiSzk1S0VZTUFQUyIpOworICAgIG1ha2VzdHIo JmFwcGRhdGEwLChjaGFyICopR2V0QXBwRGF0YSgwKSk7CisgICAgbWFrZXN0cigmYXBwZGF0YTEs KGNoYXIgKilHZXRBcHBEYXRhKDEpKTsKKyNlbHNlIC8qIE5UICovCisgICAgc2NyaXB0ZW52ID0g Z2V0ZW52KCJLMlNDUklQVFMiKTsKKyAgICBrZXltYXBlbnYgPSBnZXRlbnYoIksyS0VZTUFQUyIp OworI2VuZGlmIC8qIE5UICovCisgICAgaWYgKCFzY3JpcHRlbnYpCisgICAgICBzY3JpcHRlbnYg PSBnZXRlbnYoIkNLX1NDUklQVFMiKTsKKyAgICBpZiAoIXNjcmlwdGVudikKKyAgICAgIHNjcmlw dGVudiA9ICIiOworICAgIGlmICgha2V5bWFwZW52KQorICAgICAga2V5bWFwZW52ID0gZ2V0ZW52 KCJDS19LRVlNQVBTIik7CisgICAgaWYgKCFrZXltYXBlbnYpCisgICAgICBrZXltYXBlbnYgPSAi IjsKKworICAgIGRlYnVnKEYxMTAsInN0YXJ0dXBkaXIiLHN0YXJ0dXBkaXIsMCk7CisgICAgZGVi dWcoRjExMCwiY29tbW9uIGFwcGRhdGEgZGlyZWN0b3J5IixhcHBkYXRhMSwwKTsKKyAgICBkZWJ1 ZyhGMTEwLCJhcHBkYXRhIGRpcmVjdG9yeSIsYXBwZGF0YTAsMCk7CisgICAgZGVidWcoRjExMCwi aW5pZGlyIixpbmlkaXIsMCk7CisgICAgZGVidWcoRjExMCwiaG9tZSIsemhvbWUoKSwwKTsKKyAg ICBkZWJ1ZyhGMTEwLCJleGVkaXIiLGV4ZWRpciwwKTsKKworICAgIGxlbiA9IHN0cmxlbihzY3Jp cHRlbnYpICsgc3RybGVuKGtleW1hcGVudikgKyAzKnN0cmxlbihzdGFydHVwZGlyKQorICAgICAg ICArIDMqc3RybGVuKGluaWRpcikgKyAzKnN0cmxlbih6aG9tZSgpKSArIDMqc3RybGVuKGV4ZWRp cikKKyAgICAgICAgKyAoYXBwZGF0YTAgPyAzKnN0cmxlbihhcHBkYXRhMCkgOiAwKSAKKyAgICAg ICAgKyAoYXBwZGF0YTEgPyAzKnN0cmxlbihhcHBkYXRhMSkgOiAwKQorICAgICAgICArIDYqc3Ry bGVuKCJTQ1JJUFRTLyIpICsgNipzdHJsZW4oIktFWU1BUFMvIikgKyAxNjsKKworICAgIGlmIChs ZW4gPj0gNDA5NikgeyAgICAgICAgICAgICAgICAgIC8qIFNBRkUgKGxlbmd0aCBpcyBjaGVja2Vk KSAqLworICAgICAgICB0YWtlcGF0aFswXSA9ICdcMCc7CisgICAgICAgIGRlYnVnKEYxMTEsImZp bmRpbnBhdGggZXJyb3IgLSBwYXRoIGxlbmd0aCB0b28gbG9uZyIsImxlbiIsbGVuKTsKKyAgICB9 IGVsc2UKKyAgICAgIHNwcmludGYodGFrZXBhdGgsCisgICAgICAgICAgICAgIC8qIHNlbWljb2xv bi1zZXBhcmF0ZWQgcGF0aCBsaXN0ICovCisgICAgIiVzJXMlcyVzJXM7JXMlczslcyVzOyVzJXMl cyVzJXMlcyVzJXMlcyVzJXMlcyVzOyVzJXM7JXMlczslczslcyVzOyVzJXMiLAorICAgICAgICAg ICAgICBzY3JpcHRlbnYsCisgICAgICAgICAgICAgIChzY3JpcHRlbnZbMF0gJiYgc2NyaXB0ZW52 W3N0cmxlbihzY3JpcHRlbnYpLTFdPT0nOycpPyIiOiI7IiwKKyAgICAgICAgICAgICAga2V5bWFw ZW52LAorICAgICAgICAgICAgICAoa2V5bWFwZW52WzBdICYmIGtleW1hcGVudltzdHJsZW4oa2V5 bWFwZW52KS0xXT09JzsnKT8iIjoiOyIsCisgICAgICAgICAgICAgIHN0YXJ0dXBkaXIsCisgICAg ICAgICAgICAgIHN0YXJ0dXBkaXIsICJTQ1JJUFRTLyIsCisgICAgICAgICAgICAgIHN0YXJ0dXBk aXIsICJLRVlNQVBTLyIsCisgICAgICAgICAgICAgIGFwcGRhdGExID8gYXBwZGF0YTEgOiAiIiwg CisgICAgICAgICAgICAgIGFwcGRhdGExID8gIktlcm1pdCA5NTsiIDogIiIsCisgICAgICAgICAg ICAgIGFwcGRhdGExID8gYXBwZGF0YTEgOiAiIiwKKyAgICAgICAgICAgICAgYXBwZGF0YTEgPyAi S2VybWl0IDk1L1NDUklQVFMvOyIgOiAiIiwKKyAgICAgICAgICAgICAgYXBwZGF0YTEgPyBhcHBk YXRhMSA6ICIiLAorICAgICAgICAgICAgICBhcHBkYXRhMSA/ICJLZXJtaXQgOTUvS0VZTUFQUy87 IiA6ICIiLAorICAgICAgICAgICAgICBhcHBkYXRhMCA/IGFwcGRhdGEwIDogIiIsCisgICAgICAg ICAgICAgIGFwcGRhdGEwID8gIktlcm1pdCA5NTsiIDogIiIsCisgICAgICAgICAgICAgIGFwcGRh dGEwID8gYXBwZGF0YTAgOiAiIiwKKyAgICAgICAgICAgICAgYXBwZGF0YTAgPyAiS2VybWl0IDk1 L1NDUklQVFMvOyIgOiAiIiwKKyAgICAgICAgICAgICAgYXBwZGF0YTAgPyBhcHBkYXRhMCA6ICIi LAorICAgICAgICAgICAgICBhcHBkYXRhMCA/ICJLZXJtaXQgOTUvS0VZTUFQUy87IiA6ICIiLAor ICAgICAgICAgICAgICBpbmlkaXIsCisgICAgICAgICAgICAgIGluaWRpciwgIlNDUklQVFMvIiwK KyAgICAgICAgICAgICAgaW5pZGlyLCAiS0VZTUFQUy8iLAorICAgICAgICAgICAgICB6aG9tZSgp LAorICAgICAgICAgICAgICB6aG9tZSgpLCAiU0NSSVBUUy8iLAorICAgICAgICAgICAgICB6aG9t ZSgpLCAiS0VZTUFQUy8iLAorICAgICAgICAgICAgICBleGVkaXIsCisgICAgICAgICAgICAgIGV4 ZWRpciwgIlNDUklQVFMvIiwKKyAgICAgICAgICAgICAgZXhlZGlyLCAiS0VZTUFQUy8iCisgICAg ICAgICAgICAgICk7CisgICAgZGVidWcoRjExMCwiZmluZGlucGF0aCB0YWtlcGF0aCIsdGFrZXBh dGgsMCk7CisjaWZkZWYgTlQKKyAgICBtYWtlc3RyKCZhcHBkYXRhMCxOVUxMKTsKKyAgICBtYWtl c3RyKCZhcHBkYXRhMSxOVUxMKTsKKyNlbmRpZiAvKiBOVCAqLworI2Vsc2UgLyogbm90IE9TMiAq LworI2lmbmRlZiBOT1NQTAorICAgIHogPSAxMDI0OyAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIExvb2sgaW4gaG9tZSBkaXJlY3RvcnkgKi8KKyAgICBzID0gdGFrZXBhdGg7CisgICAgenpz dHJpbmcoIlxcdihob21lKSIsJnMsJnopOworI2Vsc2UKKyAgICB0YWtlcGF0aFswXSA9ICdcMCc7 CisjZW5kaWYgLyogTk9TUEwgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKy8qCisgIEFsbCB0aGUgbG9n aWMgZm9yIHNlYXJjaGluZyB0aGUgdGFrZSBwYXRoIGlzIGluIHRoZSBjb21tYW5kIHBhcnNlci4K KyAgU28gZXZlbiB0aG91Z2ggd2UgYXJlbid0IHBhcnNpbmcgY29tbWFuZHMsIHdlIGluaXRpYWxp emUgYW5kIGNhbGwgdGhlCisgIHBhcnNlciBmcm9tIGhlcmUsIHdpdGggdGhlIHB1cnBvcnRlZCBm aWxlbmFtZSBzdHVmZmVkIGludG8gdGhlIGNvbW1hbmQKKyAgYnVmZmVyLCBmb2xsb3dlZCBieSBz b21lIGNhcnJpYWdlIHJldHVybnMgdG8gbWFrZSB0aGUgcGFyc2VyIHJldHVybi4KKyAgSWYgdGhl IGZpbGUgaXMgbm90IGZvdW5kLCBvciBvdGhlcndpc2Ugbm90IGFjY2Vzc2libGUsIHRoZSBwYXJz ZXIgcHJpbnRzCisgIGFuIGFwcHJvcHJpYXRlIG1lc3NhZ2UsIGFuZCB0aGVuIHdlIGp1c3QgZXhp dC4KKyovCisgICAgY21kaW5pKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQWxsb2Nh dGUgY29tbWFuZCBidWZmZXJzIGV0YyAqLworICAgIGNtaW5pKDApOyAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIEluaXRpYWxpemUgdGhlbSAqLworICAgIC8qIFN0dWZmIGZpbGVuYW1lIGlu dG8gY29tbWFuZCBidWYgd2l0aCBicmFjZXMgaW4gY2FzZSBvZiBzcGFjZXMgKi8KKyAgICBja21h a21zZyhjbWRidWYsQ01EQkwsInsiLGFyZywifSIsTlVMTCk7CisgICAgZGVidWcoRjExMCwiZmlu ZGlucGF0aCBjbWRidWYiLGNtZGJ1ZiwwKTsKKyAgICBja3N0cm5jYXQoY21kYnVmLCJcclxyIixD TURCTCk7ICAgICAvKiBBbmQgc29tZSBjYXJyaWFnZSByZXR1cm5zICovCisgICAgaWYgKGNtaWZp cCgiIiwiIiwmcywmeCwwLHRha2VwYXRoLHh4c3RyaW5nKSA8IDApCisgICAgICByZXR1cm4oTlVM TCk7CisgICAgY21yZXMoKTsKKyAgICByZXR1cm4ocyk7Cit9CisKK3N0YXRpYyBpbnQgdHJfaW50 OyAgICAgICAgICAgICAgICAgICAgICAvKiBGbGFnIGlmIFRSQU5TTUlUIGludGVycnVwdGVkICov CisKKyNpZm5kZWYgTUFDCitTSUdUWVAKKyNpZmRlZiBDS19BTlNJQwordHJ0cmFwKGludCBmb28p ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRSQU5TTUlUIGludGVycnVwdCB0cmFwICovCisj ZWxzZQordHJ0cmFwKGZvbykgaW50IGZvbzsgICAgICAgICAgICAgICAgICAgIC8qIFRSQU5TTUlU IGludGVycnVwdCB0cmFwICovCisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIHRydHJhcCAqLyB7 CisjaWZkZWYgX19FTVhfXworICAgIHNpZ25hbChTSUdJTlQsIFNJR19BQ0spOworI2VuZGlmCisg ICAgdHJfaW50ID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogKE5lZWQgYXJnIGZvciBB TlNJIEMpICovCisgICAgU0lHUkVUVVJOOworfQorI2VuZGlmIC8qIE1BQyAqLworI2VuZGlmIC8q IE5PSUNQICovCisKKyNpZmRlZiBVTklYCitWT0lECitnZXRleGVkaXIoKSB7CisgICAgZXh0ZXJu IGNoYXIgKiB4YXJnMDsKKyAgICBsb25nIHh4OworICAvKgorICAgIFVuaXggcHJvdmlkZXMgbm8g c3RhbmRhcmQgc2VydmljZSBmb3IgdGhpcy4gIFdlIGxvb2sgaW4gYXJndlswXSwgYW5kIGlmCisg ICAgd2UncmUgbHVja3kgdGhlcmUncyBhIGZ1bGwgcGF0aG5hbWUuICBJZiBub3Qgd2UgZG8gYSBQ QVRIIHNlYXJjaC4KKyAgKi8KKyAgICBpZiAoY2tzdHJjaHIoeGFyZzAsJy8nKSkgeyAgICAgICAg ICAvKiBHbG9iYWwgY29weSBvZiBhcmd2WzBdICovCisgICAgICAgIGludCBpLCBrOworICAgICAg ICBjaGFyICogcCA9IE5VTEw7CisgICAgICAgIGlmICgoayA9IGNrc3RybmNweSh0bXBidWYseGFy ZzAsVE1QQlVGU0laLTIpKSA+IDApIHsKKyAgICAgICAgICAgIHAgPSB0bXBidWY7CisgICAgICAg ICAgICAvKiBDb252ZXJ0IHRvIGZ1bGx5IHF1YWxpZmllZCBwYXRobmFtZSAqLworICAgICAgICAg ICAgaWYgKHRtcGJ1ZlswXSkgaWYgKHRtcGJ1ZlswXSAhPSAnLycpIHsKKyAgICAgICAgICAgICAg ICBsaW5lWzBdID0gTlVMOworICAgICAgICAgICAgICAgIHpmbnFmcCh0bXBidWYsTElOQlVGU0la LTIsKGNoYXIgKilsaW5lKTsKKyAgICAgICAgICAgICAgICBpZiAobGluZVswXSkKKyAgICAgICAg ICAgICAgICAgIHAgPSBsaW5lOworICAgICAgICAgICAgfQorICAgICAgICAgICAgeHggPSB6Y2hr aShwKTsKKyAgICAgICAgICAgIGlmICh4eCA+IC0xKSB7CQkvKiBJcyB0aGUgcmVzdWx0IGFuIGV4 aXN0aW5nIGZpbGU/ICovCisgICAgICAgICAgICAgICAgayA9IHN0cmxlbihwKTsKKyAgICAgICAg ICAgICAgICBmb3IgKGkgPSBrLTE7IGkgPiAwOyBpLS0pIHsgLyogWWVzLCBzdHJpcCBuYW1lIHBh cnQgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKHBbaV0gPT0gJy8nKSB7CisgICAgICAgICAg ICAgICAgICAgICAgICBpZiAoaSA8IGstMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcFtp KzFdID0gTlVMOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisJICAgIG1ha2VzdHIo JmV4ZWRpcixwKTsJCS8qIFNhdmUgdGhlIHJlc3VsdCAqLworICAgICAgICB9CisgICAgfQorICAg IGlmICghZXhlZGlyICYmIHhhcmcwKSB7ICAgICAgICAgICAgIC8qIE5vdCBmb3VuZD8gKi8KKyAg ICAgICAgY2hhciAqIHA7CisgICAgICAgIHAgPSBnZXRlbnYoIlBBVEgiKTsgICAgICAgICAgICAg LyogU2VhcmNoIHRoZSBQQVRIICovCisgICAgICAgIGlmIChwKSB7ICAgICAgICAgICAgICAgICAg ICAgICAgLyogSWYgdGhlcmUgaXMgb25lLi4uICovCisgICAgICAgICAgICBjaGFyICogcSwgKiBQ QVRIID0gTlVMTDsKKyAgICAgICAgICAgIGludCBrOworICAgICAgICAgICAgbWFrZXN0cigmUEFU SCxwKTsgICAgICAgICAgIC8qIFBva2VhYmxlIGNvcHkgb2YgUEFUSCBzdHJpbmcgKi8KKyAgICAg ICAgICAgIGlmIChQQVRIKSB7ICAgICAgICAgICAgICAgICAvKiBJZiBtYWxsb2Mgc3VjY2VlZGVk Li4uICovCisgICAgICAgICAgICAgICAgcCA9IFBBVEg7CisgICAgICAgICAgICAgICAgd2hpbGUg KHAgJiYgKnApIHsgICAgICAgIC8qIExvb3AgdGhyb3VnaCBzZWdtZW50cyAqLworICAgICAgICAg ICAgICAgICAgICBxID0gY2tzdHJjaHIocCwnOicpOyAvKiBFbmQgb2YgdGhpcyBzZWdtZW50ICov CisgICAgICAgICAgICAgICAgICAgIGlmIChxID09IHApIHsgICAgICAgLyogTnVsbCBQQVRIIHNl Z21lbnQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIHArKzsgICAgICAgICAgICAvKiBTa2lw IG92ZXIgY29sb24gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChxKSAgICAgICAgICAgICAg LyogSWYgbm90IGF0IGVuZCBvZiBQQVRIIHN0cmluZyAqLworICAgICAgICAgICAgICAgICAgICAg ICpxKysgPSBOVUw7ICAgICAgIC8qIHplcm8gb3V0IHRoZSBjb2xvbiAqLworICAgICAgICAgICAg ICAgICAgICBpZiAoKGsgPSBja3N0cm5jcHkodG1wYnVmLHAsVE1QQlVGU0laKSkgPiAwKSB7Cisg ICAgICAgICAgICAgICAgICAgICAgICBpZiAodG1wYnVmW2stMV0gIT0gJy8nKSB7IC8qIENvcHkg dGhpcyBQQVRIIHNlZ21lbnQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXBidWZb aysrXSA9ICcvJzsgICAgLyogQXBwZW5kICcvJyBpZiBuZWVkZWQgKi8KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICB0bXBidWZba10gPSBOVUw7CisgICAgICAgICAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgICAgICAgICAgICAvKiBBcHBlbmQgdGhlIGFyZ3ZbMF0gdmFsdWUgKi8K KyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChja3N0cm5jcHkoJnRtcGJ1ZltrXSx4YXJnMCxU TVBCVUZTSVopID4gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh6Y2hraSh0 bXBidWYpID4gLTEpIHsgLyogRmlsZSBleGlzdHM/ICovCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHRtcGJ1ZltrXSA9IE5VTDsgICAgICAvKiBZZXMsIHdlJ3JlIGRvbmUgKi8KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemZucWZwKHRtcGJ1ZixMSU5CVUZTSVosKGNo YXIgKilsaW5lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZXN0cigmZXhl ZGlyLGxpbmUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug YnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBicmVhazsKKyAgICAgICAgICAgICAg ICAgICAgcCA9IHE7ICAgICAgICAgICAgICAvKiBOb3QgZm91bmQsIGdvIHRvIG5leHQgc2VnbWVu dCAgKi8KKyAgICAgICAgICAgICAgICB9IC8qIHdoaWxlICovCisgICAgICAgICAgICAgICAgZnJl ZShQQVRIKTsgICAgICAgICAgICAgLyogRnJlZSBQQVRIIGNvcHkgKi8KKyAgICAgICAgICAgIH0K KyAgICAgICAgfQorICAgICAgICBpZiAoIWV4ZWRpcikgeyAgICAgICAgICAgICAgICAgIC8qIFN0 aWxsIG5vdGhpbmc/ICovCisgICAgICAgICAgICBpZiAoemNoa2koeGFyZzApID4gLTEpIHsgICAg LyogTWF5YmUgaXQncyBpbiB0aGUgY3VycmVudCBkaXIgKi8KKyAgICAgICAgICAgICAgICB6Zm5x ZnAoemd0ZGlyKCksTElOQlVGU0laLChjaGFyICopbGluZSk7CisgICAgICAgICAgICAgICAgbWFr ZXN0cigmZXhlZGlyLGxpbmUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAg IGlmICghZXhlZGlyKSB7ICAgICAgICAgICAgICAgICAgICAgIC8qIFN0aWxsIG5vdGhpbmc/ICov CisgICAgICAgIG1ha2VzdHIoJmV4ZWRpciwiLyIpOyAgICAgICAgICAgLyogRmFrZSBpdCB3aXRo IHdpdGggcm9vdC4gKi8KKyAgICB9Cit9CisjZW5kaWYgLyogVU5JWCAqLworCitpbnQgYXJnX3gg PSAwOworc3RhdGljIGludCB4X3ByZXNjYW4gPSAwOworCisvKgorICBUaGUgYXJndW1lbnQgeSBv bmNlIG1lYW50IHNvbWV0aGluZyBidXQgSSBjYW4ndCBpbWFnaW5lIHdoYXQgc28gbm93CisgIGl0 J3MgaWdub3JlZC4gIChQcmlvciB0byAyMiBBdWcgOTgsIHByZXNjYW4oKSB3YXMgY2FsbGVkIHR3 aWNlIGJ5IG1haW4oKSwKKyAgYW5kIHRoZSBhcmcgZGlmZmVyZW50aWF0ZWQgdGhlIHR3byBjYWxs cy4gIEJ1dCB0aGlzIGNhdXNlZCBhbGwgc29ydHMgb2YKKyAgcHJvYmxlbXMgJiBjb25mdXNpb24s IHNvIEkgY29tbWVudGVkIG91dCB0aGUgc2Vjb25kIGNhbGwuICBUaGlzIGlzc3VlIG1pZ2h0Cisg IG5lZWQgdG8gYmUgcmV2aXNpdGVkLikKKyovCitWT0lECitwcmVzY2FuKGR1bW15KSBpbnQgZHVt bXk7IHsgICAgICAgICAgICAgLyogQXJnIGlzIGlnbm9yZWQuICovCisgICAgZXh0ZXJuIGludCBo b3djYWxsZWQ7CisgICAgaW50IHlhcmdjOyBjaGFyICoqeWFyZ3Y7CisgICAgY2hhciB4OworICAg IGNoYXIgKnlwLCAqeXk7CisjaWZkZWYgREVCVUcKKyAgICBpbnQgZGViY291bnQgPSAwOworI2Vu ZGlmIC8qIERFQlVHICovCisgICAgaW50IHo7CisKKyAgICBpZiAoeF9wcmVzY2FuKSAgICAgICAg ICAgICAgICAgICAgICAvKiBPbmx5IHJ1biBvbmNlICovCisgICAgICByZXR1cm47CisgICAgeF9w cmVzY2FuID0gMTsKKworICAgIHlhcmdjID0geGFyZ2M7ICAgICAgICAgICAgICAgICAgICAgIC8q IE1ha2UgY29weSBvZiBhcmcgdmVjdG9yICovCisgICAgeWFyZ3YgPSB4YXJndjsKKworI2lmbmRl ZiBOT0lDUAorI2lmZGVmIERDTURCVUYKKyAgICBpZiAoIWtlcm1yYykKKyAgICAgIGlmICghKGtl cm1yYyA9IChjaGFyICopIG1hbGxvYyhLRVJNUkNMKzEpKSkKKyAgICAgICAgZmF0YWwoInByZXNj YW46IG5vIG1lbW9yeSBmb3Iga2VybXJjIik7CisjZW5kaWYgLyogRENNREJVRiAqLworICAgIGNr c3RybmNweShrZXJtcmMsS0VSTVJDLEtFUk1SQ0wpOyAgIC8qIERlZmF1bHQgaW5pdCBmaWxlIG5h bWUgKi8KKyNlbmRpZiAvKiBOT0lDUCAqLworCisjaWZkZWYgT1MyCisgICAgeXAgPSBnZXRlbnYo Iks5NVNUQVJURkxBR1MiKTsKKyAgICBpZiAoeXApIHsKKyAgICAgICAgc3RhcnRmbGFncyA9IGF0 b2koeXApOworICAgIH0KKyNlbmRpZiAvKiBPUzIgKi8KKworI2lmZGVmIElLU0QKKyAgICBpZiAo aG93Y2FsbGVkID09IElfQU1fSUtTRCkgICAgICAgICAvKiBJbnRlcm5ldCBLZXJtaXQgU2Vydmlj ZSBkYWVtb24gKi8KKyAgICAgIGluc2VydmVyID0gMTsgICAgICAgICAgICAgICAgICAgICAvKiAo U2VlIGluc2VydmVyIHNlY3Rpb24gb2YgY2tjbWFpKSAqLworI2VuZGlmIC8qIElLU0QgKi8KKwor LyogQ29tbWFuZCBsaW5lIG9wdGlvbnMgZm9yIEtlcm1pdCAqLworCisjaWZuZGVmIE5PQ01ETAor ICAgIGlmICh5YXJnYyA+IDEKKyAgICAgICAgJiYgKnlhcmd2WzFdICE9ICctJworICAgICAgICAm JiAoeWFyZ3ZbMV1bMF0gIT0gJz0nKQorI2lmZGVmIEtFUkJBTkcKKyAgICAgICAgJiYgKHlhcmd2 WzFdWzBdICE9ICcrJykKKyNlbmRpZiAvKiBLRVJCQU5HICovCisjaWZkZWYgSUtTRAorICAgICAg ICAmJiAoaG93Y2FsbGVkICE9IElfQU1fSUtTRCkKKyNlbmRpZiAvKiBJS1NEICovCisgICAgICAg ICkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRmlsZW5hbWUgYXMgMXN0IGFyZ3Vt ZW50ICovCisjaWZuZGVmIE5PSUNQCisgICAgICAgIGNoYXIgKnM7CisjZW5kaWYgLyogTk9JQ1Ag Ki8KKyNpZm5kZWYgTk9VUkwKKyAgICAgICAgZXh0ZXJuIGludCBoYXZldXJsOworICAgICAgICBl eHRlcm4gc3RydWN0IHVybGRhdGEgZ191cmw7CisgICAgICAgIGlmICh1cmxwYXJzZSh5YXJndlsx XSwmZ191cmwpKSB7CisgICAgICAgICAgICBpZiAoIWNrc3RyY21wKGdfdXJsLnN2YywiZnRwIiwt MSwwKSB8fAorICAgICAgICAgICAgICAgICFja3N0cmNtcChnX3VybC5zdmMsImZ0cHMiLC0xLDAp KSB7CisgICAgICAgICAgICAgICAgaGF2ZXVybCA9IDE7CisgICAgICAgICAgICAgICAgaG93Y2Fs bGVkID0gSV9BTV9GVFA7CisgICAgICAgICAgICB9IGVsc2UgaWYgKCFja3N0cmNtcChnX3VybC5z dmMsInRlbG5ldCIsLTEsMCkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgIWNrc3RyY21wKGdf dXJsLnN2YywidGVsbmV0cyIsLTEsMCkpIHsKKyAgICAgICAgICAgICAgICBoYXZldXJsID0gMTsK KyAgICAgICAgICAgICAgICBob3djYWxsZWQgPSBJX0FNX1RFTE5FVDsKKyAgICAgICAgICAgIH0g ZWxzZSBpZiAoIWNrc3RyY21wKGdfdXJsLnN2Yywic3NoIiwtMSwwKSkgeworICAgICAgICAgICAg ICAgIGhhdmV1cmwgPSAxOworICAgICAgICAgICAgICAgIGhvd2NhbGxlZCA9IElfQU1fU1NIOwor ICAgICAgICAgICAgfSBlbHNlIGlmICghY2tzdHJjbXAoZ191cmwuc3ZjLCJpa3NkIiwtMSwwKSB8 fAorICAgICAgICAgICAgICAgICAgICAgICAhY2tzdHJjbXAoZ191cmwuc3ZjLCJrZXJtaXQiLC0x LDApKSB7CisgICAgICAgICAgICAgICAgaGF2ZXVybCA9IDE7CisgICAgICAgICAgICAgICAgaG93 Y2FsbGVkID0gSV9BTV9LRVJNSVQ7CisgICAgICAgICAgICB9IGVsc2UgaWYgKCFja3N0cmNtcChn X3VybC5zdmMsImh0dHAiLC0xLDApIHx8CisgICAgICAgICAgICAgICAgICAgICAgICFja3N0cmNt cChnX3VybC5zdmMsImh0dHBzIiwtMSwwKSkgeworICAgICAgICAgICAgICAgIGhhdmV1cmwgPSAx OworICAgICAgICAgICAgICAgIGhvd2NhbGxlZCA9IElfQU1fSFRUUDsKKyAgICAgICAgICAgIH0K KyAgICAgICAgICAgIGlmIChoYXZldXJsKSB7CisgICAgICAgICAgICAgICAgd2hpbGUgKC0teWFy Z2MgPiAwKSB7ICAgLyogR28gdGhyb3VnaCBjb21tYW5kLWxpbmUgYXJncyAqLworICAgICAgICAg ICAgICAgICAgICB5YXJndisrOyAgICAgICAgICAgIC8qIGxvb2tpbmcgZm9yIC1ZIGFuZCAtZCAq LworICAgICAgICAgICAgICAgICAgICB5cCA9ICp5YXJndisxOworICAgICAgICAgICAgICAgICAg ICBpZiAoKip5YXJndiA9PSAnLScpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHggPSAqKCp5 YXJndisxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICh4KSB7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc3dpdGNoICh4KSB7CisjaWZuZGVmIE5PSUNQCisJCQkgICAgICBj YXNlICcrJzoKKwkJCSAgICAgIGNhc2UgJy0nOgorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpZiAoZG94YXJnKHlhcmd2LDEpIDwgMCkgeworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZmF0YWwoIkV4dGVuZGVkIGFyZ3VtZW50IGVycm9yIik7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg eXAgPSAiIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYg LyogTk9JQ1AgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1knOgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2luaXQrKzsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNh c2UgJ3EnOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWlldCA9IDE7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjYXNlICdoJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu b2luaXQgPSAxOworI2lmZGVmIE9TMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHN0YXJ0ZmxhZ3MgfD0gMjsgICAgLyogTm8gbmV0d29yayBETExzICovCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc3RhcnRmbGFncyB8PSA0OyAgICAvKiBObyBUQVBJIERMTHMg Ki8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydGZsYWdzIHw9IDg7ICAg IC8qIE5vIFNlY3VyaXR5IERMTHMgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzdGFydGZsYWdzIHw9IDE2OyAgIC8qIE5vIFptb2RlbSBETExzICovCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc3RhcnRmbGFncyB8PSAzMjsgICAvKiBTdGRpbiAqLworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ZmxhZ3MgfD0gNjQ7ICAgLyogU3Rk b3V0ICovCisjZW5kaWYgLyogT1MyICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdkJzogLyogPSBT RVQgREVCVUcgT04gKi8KKyNpZmRlZiBERUJVRworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpZiAoZGViY291bnQrKyA+IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZGVidGltID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFkZWJs b2cpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVibG9nID0gZGVib3BuKCJk ZWJ1Zy5sb2ciLDApOworI2VuZGlmIC8qIERFQlVHICovCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGJyZWFrOworI2lmZGVmIE9TMgorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY2FzZSAnVyc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgqKHlwKzEp KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhdGFsKCJpbnZhbGlkIGFyZ3Vt ZW50IGJ1bmRsaW5nIGFmdGVyIC1XIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHlhcmd2KyssIHlhcmdjLS07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5 YXJnYyA8IDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmF0YWwoIldpbmRv dyBoYW5kbGUgbWlzc2luZyIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBod25k RGlhbGVyID0gKEhXTkQpIGF0b2woKnlhcmd2KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgU3RhcnRlZEZyb21EaWFsZXIgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB5YXJndisrLCB5YXJnYy0tOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBL ZXJtaXREaWFsZXJJRCA9IGF0b2woKnlhcmd2KSA7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnIyc6IC8q IEs5NSBpbml0aWFsaXphdGlvbiBvcHRpb25zICovCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGlmICgqKHlwKzEpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBmYXRhbCgiaW52YWxpZCBhcmd1bWVudCBidW5kbGluZyIpOworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlhcmd2Kyss IHlhcmdjLS07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5YXJnYyA8IDEp CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmF0YWwoIi0jIGFyZ3VtZW50IG1p c3NpbmciKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRmbGFncyB8PSBh dG9sKCp5YXJndik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworI2Vu ZGlmIC8qIE9TMiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpZiAoIXlwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg YnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCA9ICorK3lwOworICAgICAgICAg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg fQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg ICAgICAvKiBhZnRlciB0aGlzIHBvaW50IG5vbi1LZXJtaXQgcGVyc29uYWxpdGllcyBtdXN0IHJl dHVybiAqLworICAgICAgICBzd2l0Y2ggKGhvd2NhbGxlZCkgeworCSAgY2FzZSBJX0FNX0tFUk1J VDoKKwkgIGNhc2UgSV9BTV9JS1NEOgorCSAgY2FzZSBJX0FNX1NTSFNVQjoKKyAgICAgICAgICAg IGJyZWFrOworCSAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorI2Vu ZGlmIC8qIE5PVVJMICovCisKKyNpZm5kZWYgTk9JQ1AKKyAgICAgICAgLyogSWYgaXQgaXMgbm90 IGEgVVJMIHRoYXQgd2UgcmVjb2duaXplLCB0cnkgdG8gdHJlYXQgaXQgYXMgYSBmaWxlICovCisK KyAgICAgICAgaWYgKCFpc2Fic29sdXRlKHlhcmd2WzFdKSkgICAgICAvKiBJZiBub3QgYWJzb2x1 dGUgKi8KKyAgICAgICAgICBzID0gZmluZGlucGF0aCh5YXJndlsxXSk7ICAgICAvKiBMb29rIGlu IFBBVEggKi8KKyAgICAgICAgZWxzZQorICAgICAgICAgIHMgPSB5YXJndlsxXTsKKyAgICAgICAg aWYgKCFzKQorICAgICAgICAgIGRvZXhpdChCQURfRVhJVCx4aXRzdGEpOworICAgICAgICB6Zm5x ZnAocyxDS01BWFBBVEgsY21kZmlsKTsgICAgIC8qIEluIGNhc2Ugb2YgQ0QgaW4gZmlsZSAqLwor ICAgICAgICB5YXJnYyAtPSAxOyAgICAgICAgICAgICAgICAgICAgIC8qIFNraXAgcGFzdCB0aGUg ZmlsZW5hbWUgKi8KKyAgICAgICAgeWFyZ3YgKz0gMTsgICAgICAgICAgICAgICAgICAgICAvKiBP dGhlcndpc2Ugd2UnbGwgZ2V0IGFuIGVycm9yICovCisjZW5kaWYgLyogTk9JQ1AgKi8KKyAgICB9 CisKKyNpZm5kZWYgTk9DTURMCisjaWZkZWYgTkVXRlRQCisgICAgaWYgKGhvd2NhbGxlZCA9PSBJ X0FNX0ZUUCkgeyAgICAgICAgLyogS2VybWl0J3MgRlRQIGNsaWVudCBwZXJzb25hbGl0eSAqLwor ICAgICAgICB3aGlsZSAoLS15YXJnYyA+IDApIHsgICAgICAgICAgIC8qIEdvIHRocm91Z2ggY29t bWFuZC1saW5lIGFyZ3MgKi8KKyAgICAgICAgICAgIHlhcmd2Kys7ICAgICAgICAgICAgICAgICAg ICAvKiBsb29raW5nIGZvciAtWSBhbmQgLWQgKi8KKyAgICAgICAgICAgIHlwID0gKnlhcmd2KzE7 CisgICAgICAgICAgICBpZiAoKip5YXJndiA9PSAnLScpIHsKKyAgICAgICAgICAgICAgICB4ID0g KigqeWFyZ3YrMSk7CisgICAgICAgICAgICAgICAgd2hpbGUgKHgpIHsKKyAgICAgICAgICAgICAg ICAgICAgc3dpdGNoICh4KSB7CisjaWZuZGVmIE5PSUNQCisJCSAgICAgIGNhc2UgJysnOgorCQkg ICAgICBjYXNlICctJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkb3hhcmcoeWFyZ3Ys MSkgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmF0YWwoIkV4dGVuZGVkIGFy Z3VtZW50IGVycm9yIik7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg ICAgICAgICAgICB5cCA9ICIiOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisjZW5k aWYgLyogTk9JQ1AgKi8KKyAgICAgICAgICAgICAgICAgICAgICBjYXNlICdZJzoKKyAgICAgICAg ICAgICAgICAgICAgICAgIG5vaW5pdCsrOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7 CisKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlICdxJzoKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgcXVpZXQgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAg ICAgICAgICAgICAgICAgICAgIGNhc2UgJ2gnOgorICAgICAgICAgICAgICAgICAgICAgICAgbm9p bml0ID0gMTsKKyNpZmRlZiBPUzIKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ZmxhZ3Mg fD0gMjsgICAgLyogTm8gbmV0d29yayBETExzICovCisgICAgICAgICAgICAgICAgICAgICAgICBz dGFydGZsYWdzIHw9IDQ7ICAgIC8qIE5vIFRBUEkgRExMcyAqLworICAgICAgICAgICAgICAgICAg ICAgICAgc3RhcnRmbGFncyB8PSA4OyAgICAvKiBObyBTZWN1cml0eSBETExzICovCisgICAgICAg ICAgICAgICAgICAgICAgICBzdGFydGZsYWdzIHw9IDE2OyAgIC8qIE5vIFptb2RlbSBETExzICov CisgICAgICAgICAgICAgICAgICAgICAgICBzdGFydGZsYWdzIHw9IDMyOyAgIC8qIFN0ZGluICov CisgICAgICAgICAgICAgICAgICAgICAgICBzdGFydGZsYWdzIHw9IDY0OyAgIC8qIFN0ZG91dCAq LworI2VuZGlmIC8qIE9TMiAqLworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICAgICAgICAgICAgICAgY2FzZSAnZCc6ICAgICAgICAgICAgIC8qID0gU0VUIERFQlVHIE9O ICovCisjaWZkZWYgREVCVUcKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZWJjb3VudCsr ID4gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidGltID0gMTsKKyAgICAgICAgICAg ICAgICAgICAgICAgIGlmICghZGVibG9nKQorICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJs b2cgPSBkZWJvcG4oImRlYnVnLmxvZyIsMCk7CisjZW5kaWYgLyogREVCVUcgKi8KKyAgICAgICAg ICAgICAgICAgICAgICAgIGJyZWFrOworI2lmZGVmIE9TMgorICAgICAgICAgICAgICAgICAgICAg IGNhc2UgJ1cnOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCooeXArMSkpCisgICAgICAg ICAgICAgICAgICAgICAgICAgIGZhdGFsKCJpbnZhbGlkIGFyZ3VtZW50IGJ1bmRsaW5nIGFmdGVy IC1XIik7CisgICAgICAgICAgICAgICAgICAgICAgICB5YXJndisrLCB5YXJnYy0tOworICAgICAg ICAgICAgICAgICAgICAgICAgaWYgKHlhcmdjIDwgMSkKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgZmF0YWwoIldpbmRvdyBoYW5kbGUgbWlzc2luZyIpOworICAgICAgICAgICAgICAgICAgICAg ICAgaHduZERpYWxlciA9IChIV05EKSBhdG9sKCp5YXJndik7CisgICAgICAgICAgICAgICAgICAg ICAgICBTdGFydGVkRnJvbURpYWxlciA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICB5YXJn disrLCB5YXJnYy0tOworICAgICAgICAgICAgICAgICAgICAgICAgS2VybWl0RGlhbGVySUQgPSBh dG9sKCp5YXJndikgOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg ICAgICAgICAgICAgY2FzZSAnIyc6ICAgICAgICAgLyogSzk1IGluaXRpYWxpemF0aW9uIG9wdGlv bnMgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgqKHlwKzEpKSB7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZmF0YWwoImludmFsaWQgYXJndW1lbnQgYnVuZGxpbmciKTsKKyAg ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHlhcmd2Kyss IHlhcmdjLS07CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeWFyZ2MgPCAxKQorICAgICAg ICAgICAgICAgICAgICAgICAgICBmYXRhbCgiLSMgYXJndW1lbnQgbWlzc2luZyIpOworICAgICAg ICAgICAgICAgICAgICAgICAgc3RhcnRmbGFncyB8PSBhdG9sKCp5YXJndik7CisgICAgICAgICAg ICAgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoIXlwKQorICAgICAgICAgICAgICAgICAgICAg IGJyZWFrOworICAgICAgICAgICAgICAgICAgICB4ID0gKisreXA7CisgICAgICAgICAgICAgICAg fQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5k aWYgLyogTkVXRlRQICovCisjZW5kaWYgLyogTk9DTURMICovCisKKyAgICB3aGlsZSAoLS15YXJn YyA+IDApIHsgICAgICAgICAgICAgICAvKiBHbyB0aHJvdWdoIGNvbW1hbmQtbGluZSBhcmdzICov CisgICAgICAgIHlhcmd2Kys7CisgICAgICAgIHlwID0gKnlhcmd2KzE7ICAgICAgICAgICAgICAg ICAgLyogUG9pbnRlciBmb3IgYnVuZGxlZCBhcmdzICovCisgICAgICAgIGlmICgqKnlhcmd2ID09 ICc9JykgICAgICAgICAgICAgLyogU2FtZSBydWxlcyBhcyBjbWRsaW4oKS4uLiAqLworICAgICAg ICAgIHJldHVybjsKKyAgICAgICAgZGVidWcoRjExMCwicHJlc2NhbiAqeWFyZ3YiLCp5YXJndiww KTsKKworI2lmbmRlZiBOT0lDUAorI2lmZGVmIEtFUkJBTkcKKyAgICAgICAgeXkgPSAqeWFyZ3Y7 CisgICAgICAgIGlmICghc3RyY21wKHl5LCIrIikgfHwgKCp5eSA9PSAnKycgJiYgKih5eSsxKSA8 IChjaGFyKTMzKSkgeworICAgICAgICAgICAgY2hhciAqIHM7CisgICAgICAgICAgICB5YXJndisr OworICAgICAgICAgICAgbm9pbml0ID0gMTsKKyAgICAgICAgICAgIGlmICghKnlhcmd2KQorICAg ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBjZmlsZWYgPSAxOworICAgICAgICAgICAg cyA9IGZpbmRpbnBhdGgoKnlhcmd2KTsKKyAgICAgICAgICAgIGlmIChzKSB7CisgICAgICAgICAg ICAgICAgemZucWZwKHMsQ0tNQVhQQVRILGNtZGZpbCk7CisgICAgICAgICAgICAgICAgcmV0dXJu OworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgIGRvZXhpdChCQURfRVhJVCx4aXRz dGEpOworICAgICAgICB9CisjZW5kaWYgLyogS0VSQkFORyAqLworI2VuZGlmIC8qIE5PSUNQICov CisgICAgICAgIGlmICghc3RyY21wKCp5YXJndiwiLS0iKSkgICAgICAgLyogZ2V0b3B0KCkgY29u Zm9ybWFuY2UgKi8KKyAgICAgICAgICByZXR1cm47CisjaWZkZWYgVk1TCisgICAgICAgIGVsc2Ug aWYgKCoqeWFyZ3YgPT0gJy8nKQorICAgICAgICAgIGNvbnRpbnVlOworI2VuZGlmIC8qIFZNUyAq LworICAgICAgICBlbHNlIGlmICgqKnlhcmd2ID09ICctJykgeyAgICAgIC8qIEdvdCBhbiBvcHRp b24gKGJlZ2lucyB3aXRoIGRhc2gpICovCisgICAgICAgICAgICB4ID0gKigqeWFyZ3YrMSk7ICAg ICAgICAgICAgLyogR2V0IG9wdGlvbiBsZXR0ZXIgKi8KKyAgICAgICAgICAgIHdoaWxlICh4KSB7 ICAgICAgICAgICAgICAgICAvKiBBbGxvdyBmb3IgYnVuZGxlZCBvcHRpb25zICovCisgICAgICAg ICAgICAgICAgZGVidWcoRjAwMCwicHJlc2NhbiBhcmciLCIiLHgpOworICAgICAgICAgICAgICAg IHN3aXRjaCAoeCkgeworI2lmbmRlZiBOT0lDUAorICAgICAgICAgICAgICAgICAgY2FzZSAnKyc6 CisgICAgICAgICAgICAgICAgICBjYXNlICctJzoKKyAgICAgICAgICAgICAgICAgICAgaWYgKGRv eGFyZyh5YXJndiwxKSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZhdGFsKCJFeHRl bmRlZCBhcmd1bWVudCBlcnJvciIpOworICAgICAgICAgICAgICAgICAgICB9CisjaWZuZGVmIENP TU1FTlQJCQkJLyogSmVmZiAyOCBBcHIgMjAwMyAqLworICAgICAgICAgICAgICAgICAgICB5cCA9 IE5VTEw7CQkvKiAobm90ICIiKSAqLworI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgeWFyZ3Yr KywgeWFyZ2MtLTsKKyAgICAgICAgICAgICAgICAgICAgeXAgPSAqeWFyZ3Y7CisjZW5kaWYgLyog Q09NTUVOVCAqLworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBOT0lDUCAq LworCisgICAgICAgICAgICAgICAgICBjYXNlICc3JzogICAgICAgICAgICAgLyogVW5kb2N1bWVu dGVkLi4uICovCisgICAgICAgICAgICAgICAgICAgIHNzdGVsbmV0ID0gMTsgICAgICAgLyogKGJl Y2F1c2UgaXQgZG9lc24ndCB3b3JrKSAqLworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyNp ZmRlZiBJS1NECisgICAgICAgICAgICAgICAgICBjYXNlICdBJzogeworICAgICAgICAgICAgICAg ICAgICAgIGNoYXIgKiBwOworICAgICAgICAgICAgICAgICAgICAgIGluc2VydmVyID0gMTsgICAg IC8qIEZsYWcgdGhhdCB3ZSBhcmUgZG9pbmcgdGhpcyAqLworICAgICAgICAgICAgICAgICAgICAg IHNydmNkbXNnID0gMjsgICAgIC8qIFByZXNldCB0aGlzICovCisgICAgICAgICAgICAgICAgICAg ICAgLyogU2VlIGluc2VydmVyIHNlY3Rpb24gb2YgY2tjbWFpLmMgZm9yIG1vcmUgc2V0dGluZ3Mg Ki8KKyNpZmRlZiBPUzIKKyAgICAgICAgICAgICAgICAgICAgICBpZiAoKih5cCsxKSkgeworICAg ICAgICAgICAgICAgICAgICAgICAgICBmYXRhbCgiaW52YWxpZCBhcmd1bWVudCBidW5kbGluZyBh ZnRlciAtQSIpOworICAgICAgICAgICAgICAgICAgICAgIH0KKyNpZmRlZiBOVAorICAgICAgICAg ICAgICAgICAgICAgIC8qIFN1cHBvcnQgZm9yIFByYWdtYSBTeXN0ZW1zIFRlbG5ldC9UZXJtaW5h bCBTZXJ2ZXJzICovCisgICAgICAgICAgICAgICAgICAgICAgcCA9IGdldGVudigiUFJBR01BU1lT X0lORVREX1NPQ0siKTsKKyAgICAgICAgICAgICAgICAgICAgICBpZiAocCAmJiBhdG9pKHApICE9 IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdHRuYW1lWzBdID0gJyQnOworICAgICAg ICAgICAgICAgICAgICAgICAgICBja3N0cm5jcHkoJnR0bmFtZVsxXSxwLFRUTkFNTEVOLTEpOwor ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICB9 CisjZW5kaWYgLyogTlQgKi8KKyAgICAgICAgICAgICAgICAgICAgICB5YXJndisrLCB5YXJnYy0t OworICAgICAgICAgICAgICAgICAgICAgIGlmICh5YXJnYyA8IDEgfHwgKip5YXJndiA9PSAnLScp IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZmF0YWwoIi1BIGFyZ3VtZW50IG1pc3Npbmci KTsKKyAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAg ICAgICB0dG5hbWVbMF0gPSAnJCc7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGNrc3RybmNw eSgmdHRuYW1lWzFdLCp5YXJndixUVE5BTUxFTi0xKTsKKyAgICAgICAgICAgICAgICAgICAgICB9 CisjZW5kaWYgLyogT1MyICovCisgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg ICAgICAgICAgICB9CisjZW5kaWYgLyogSUtTRCAqLworCisjaWZkZWYgT1MyCisgICAgICAgICAg ICAgICAgICBjYXNlICdXJzoKKyAgICAgICAgICAgICAgICAgICAgaWYgKCooeXArMSkpCisgICAg ICAgICAgICAgICAgICAgICAgZmF0YWwoImludmFsaWQgYXJndW1lbnQgYnVuZGxpbmcgYWZ0ZXIg LVciKTsKKyAgICAgICAgICAgICAgICAgICAgeWFyZ3YrKywgeWFyZ2MtLTsKKyAgICAgICAgICAg ICAgICAgICAgaWYgKHlhcmdjIDwgMSkKKyAgICAgICAgICAgICAgICAgICAgICBmYXRhbCgiV2lu ZG93IGhhbmRsZSBtaXNzaW5nIik7CisjaWZkZWYgQ09NTUVOVAorICAgICAgICAgICAgICAgICAg ICBpZiAoZHVtbXkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHlhcmd2KyssIHlhcmdjLS07 CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfSBl bHNlIHsKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgICAgICAgICAgICAgICAgICAgICBod25k RGlhbGVyID0gKEhXTkQpIGF0b2woKnlhcmd2KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0 YXJ0ZWRGcm9tRGlhbGVyID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHlhcmd2KyssIHlh cmdjLS07CisgICAgICAgICAgICAgICAgICAgICAgICBLZXJtaXREaWFsZXJJRCA9IGF0b2woKnlh cmd2KSA7CisjaWZkZWYgQ09NTUVOVAorICAgICAgICAgICAgICAgICAgICB9CisjZW5kaWYgLyog Q09NTUVOVCAqLworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAg ICAgY2FzZSAnIyc6ICAgICAgICAgICAgIC8qIEs5NSBpbml0aWFsaXphdGlvbiBvcHRpb25zICov CisgICAgICAgICAgICAgICAgICAgIGlmICgqKHlwKzEpKSB7CisgICAgICAgICAgICAgICAgICAg ICAgICBmYXRhbCgiaW52YWxpZCBhcmd1bWVudCBidW5kbGluZyIpOworICAgICAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgICAgICAgIHlhcmd2KyssIHlhcmdjLS07CisgICAgICAgICAg ICAgICAgICAgIGlmICh5YXJnYyA8IDEpCisgICAgICAgICAgICAgICAgICAgICAgZmF0YWwoIi0j IGFyZ3VtZW50IG1pc3NpbmciKTsKKyAgICAgICAgICAgICAgICAgICAgc3RhcnRmbGFncyB8PSBh dG9sKCp5YXJndik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIE9TMiAq LworCisjaWZuZGVmIE5PU1BMCisgICAgICAgICAgICAgICAgICBjYXNlICdNJzogICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIE15IFVzZXIgTmFtZSAqLworICAgICAgICAgICAgICAgICAg ICBpZiAoKih5cCsxKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZmF0YWwoImludmFsaWQg YXJndW1lbnQgYnVuZGxpbmciKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg ICAgICAgICB5YXJndisrLCB5YXJnYy0tOworICAgICAgICAgICAgICAgICAgICBpZiAoKHlhcmdj IDwgMSkgfHwgKCoqeWFyZ3YgPT0gJy0nKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZmF0 YWwoIm1pc3NpbmcgdXNlcm5hbWUiKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICAgICAgICBpZiAoKGludClzdHJsZW4oKnlhcmd2KSA+IFVJREJVRkxFTikgeworICAgICAg ICAgICAgICAgICAgICAgICAgZmF0YWwoInVzZXJuYW1lIHRvbyBsb25nIik7CisgICAgICAgICAg ICAgICAgICAgIH0KKyNpZmRlZiBDT01NRU5UCisvKgorICBUaGlzIGNhbid0IHdvcmsuICB1aWRi dWYgaXMgb3ZlcndyaXR0ZW4gaW4gc3lzaW5pdCgpIHdoaWNoIGhhcyB5ZXQgdG8gYmUKKyAgY2Fs bGVkLiAgVGhpcyBjYW5ub3QgYmUgc2V0IGluIHByZXNjYW4oKS4KKyovCisjaWZkZWYgSUtTRAor ICAgICAgICAgICAgICAgICAgICBpZiAoIWluc2VydmVyKQorI2VuZGlmIC8qIElLU0QgKi8KKyAg ICAgICAgICAgICAgICAgICAgICBja3N0cm5jcHkodWlkYnVmLCp5YXJndixVSURCVUZMRU4pOwor I2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYg LyogTk9TUEwgKi8KKyAgICAgICAgICAgICAgICAgIGNhc2UgJ1InOiAgICAgICAgICAgICAvKiBS ZW1vdGUtb25seSBhZHZpc29yeSAqLworI2lmZGVmIENLX0lGUk8KKyAgICAgICAgICAgICAgICAg ICAgcmVtb25seSA9IDE7CisjZW5kaWYgLyogQ0tfSUZSTyAqLworICAgICAgICAgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgJ1MnOiAgICAgICAgICAgICAvKiBTVEFZ ICovCisgICAgICAgICAgICAgICAgICAgIHN0YXlmbGcgPSAxOworICAgICAgICAgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgJ2gnOgorICAgICAgICAgICAgICAgICAg ICBub2luaXQgPSAxOworI2lmZGVmIE9TMgorICAgICAgICAgICAgICAgICAgICBzdGFydGZsYWdz IHw9IDI7ICAgIC8qIE5vIG5ldHdvcmsgRExMcyAqLworICAgICAgICAgICAgICAgICAgICBzdGFy dGZsYWdzIHw9IDQ7ICAgIC8qIE5vIFRBUEkgRExMcyAqLworICAgICAgICAgICAgICAgICAgICBz dGFydGZsYWdzIHw9IDg7ICAgIC8qIE5vIFNlY3VyaXR5IERMTHMgKi8KKyAgICAgICAgICAgICAg ICAgICAgc3RhcnRmbGFncyB8PSAxNjsgICAvKiBObyBabW9kZW0gRExMcyAqLworICAgICAgICAg ICAgICAgICAgICBzdGFydGZsYWdzIHw9IDMyOyAgIC8qIFN0ZGluICovCisgICAgICAgICAgICAg ICAgICAgIHN0YXJ0ZmxhZ3MgfD0gNjQ7ICAgLyogU3Rkb3V0ICovCisjZW5kaWYgLyogT1MyICov CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworI2lmbmRlZiBOT0lDUAorICAgICAgICAgICAg ICAgICAgY2FzZSAnWSc6ICAgICAgICAgICAgIC8qIE5vIGluaXQgZmlsZSAqLworICAgICAgICAg ICAgICAgICAgICBub2luaXQgPSAxOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyNlbmRp ZiAvKiBOT0lDUCAqLworCisgICAgICAgICAgICAgICAgICBjYXNlICdxJzoKKyAgICAgICAgICAg ICAgICAgICAgICBxdWlldCA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAg ICAgICAgICAgICAgICAgIGNhc2UgJ2QnOiAgICAgICAgICAgICAvKiA9IFNFVCBERUJVRyBPTiAq LworI2lmZGVmIERFQlVHCisgICAgICAgICAgICAgICAgICAgIGlmIChkZWJjb3VudCsrID4gMCkK KyAgICAgICAgICAgICAgICAgICAgICBkZWJ0aW0gPSAxOworICAgICAgICAgICAgICAgICAgICBp ZiAoIWRlYmxvZykKKyAgICAgICAgICAgICAgICAgICAgICBkZWJsb2cgPSBkZWJvcG4oImRlYnVn LmxvZyIsMCk7CisjZW5kaWYgLyogREVCVUcgKi8KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7 CisKKyAgICAgICAgICAgICAgICAgIGNhc2UgJ3gnOiAgICAgICAgICAgICAvKiBTZXJ2ZXIgKi8K KyAgICAgICAgICAgICAgICAgICAgYXJnX3ggPSAxOyAgICAgICAgICAvKiBOb3RlIGluIGFkdmFu Y2UgKi8KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisjaWZuZGVmIE5PSUNQCisgICAgICAg ICAgICAgICAgICBjYXNlICd5JzogICAgICAgICAgICAgLyogQWx0ZXJuYXRpdmUgaW5pdCBmaWxl ICovCisgICAgICAgICAgICAgICAgICAgIG5vaW5pdCA9IDA7CisgICAgICAgICAgICAgICAgICAg IHlhcmd2KyssIHlhcmdjLS07CisgICAgICAgICAgICAgICAgICAgIGlmICh5YXJnYyA8IDEpIGZh dGFsKCJtaXNzaW5nIG5hbWUgaW4gLXkiKTsKKyAgICAgICAgICAgICAgICAgICAgLyogUmVwbGFj ZSBpbml0IGZpbGUgbmFtZSAqLworICAgICAgICAgICAgICAgICAgICBja3N0cm5jcHkoa2VybXJj LCp5YXJndixLRVJNUkNMKTsKKyAgICAgICAgICAgICAgICAgICAgcmNmbGFnID0gMTsgICAgICAg ICAvKiBGbGFnIHRoYXQgdGhpcyBoYXMgYmVlbiBkb25lICovCisgICAgICAgICAgICAgICAgICAg IGRlYnVnKEYxMTEsInByZXNjYW4ga2VybXJjIixrZXJtcmMscmNmbGFnKTsKKyAgICAgICAgICAg ICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogTk9JQ1AgKi8KKyAgICAgICAgICAgICAgICAgIGNh c2UgJ3onOiAgICAgICAgICAgICAvKiA9IFNFVCBCQUNLR1JPVU5EIE9GRiAqLworICAgICAgICAg ICAgICAgICAgICBiZ3NldCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGJhY2tncmQgPSAwOwor I2lmZGVmIFZNUworICAgICAgICAgICAgICAgICAgICBiYXRjaCA9IDA7CisjZW5kaWYgLyogVk1T ICovCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICBjYXNl ICdCJzogICAgICAgICAgICAgLyogRm9yY2UgYmFja2dyb3VuZCAoYmF0Y2gpICovCisgICAgICAg ICAgICAgICAgICAgIGJnc2V0ID0gMTsKKyAgICAgICAgICAgICAgICAgICAgYmFja2dyZCA9IDE7 CisjaWZkZWYgVk1TCisgICAgICAgICAgICAgICAgICAgIGJhdGNoID0gMTsKKyNlbmRpZiAvKiBW TVMgKi8KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyNpZmRlZiBDS19ORVRCSU9TCisg ICAgICAgICAgICAgICAgICBjYXNlICdOJzoKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAg ICAgICAgICAgICAgICAgICAgaW50IG4gOworICAgICAgICAgICAgICAgICAgICAgICAgeWFyZ3Yr KywgeWFyZ2MtLTsKKyNpZmRlZiBDT01NRU5UCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo eSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogQ09NTUVOVCAq LworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmxlbigqeWFyZ3YpICE9IDEgfHwgKCp5 YXJndilbMF0gPT0gJ1gnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0Qmlvc0Fk YXB0ZXIgPSAtMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbiA9IGF0b2koKnlhcmd2KTsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpZiAobiA+PSAwICYmIG4gPD0gOSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIE5ldEJpb3NBZGFwdGVyID0gbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNl CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXRCaW9zQWRhcHRlciA9IC0xOworICAg ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIENLX05FVEJJT1MgKi8KKyAgICAgICAgICAgICAg ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgICBpZiAoIXlwKQorICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgICAgICAgICAgeCA9ICorK3lwOyAgICAgICAgICAgICAgLyogU2VlIGlmIG9wdGlvbnMg YXJlIGJ1bmRsZWQgKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAv KiBOT0NNREwgKi8KK30KKworLyogIEcgRSBUIFQgQyBTICAtLSAgR2V0IFRyYW5zZmVyIChJbnRl cm1lZGlhdGUpIENoYXJhY3RlciBTZXQgICovCisKKy8qCisgIEdpdmVuIHR3byBmaWxlIGNoYXJh Y3RlciBzZXRzLCB0aGlzIHJvdXRpbmUgcGlja3Mgb3V0IHRoZSBhcHByb3ByaWF0ZQorICAidHJh bnNmZXIiIGNoYXJhY3RlciBzZXQgdG8gdXNlIGZvciB0cmFuc2xhdGluZyBiZXR3ZWVuIHRoZW0u CisgIFRoZSB0cmFuc2ZlciBjaGFyYWN0ZXIgc2V0IG51bWJlciBpcyByZXR1cm5lZC4KKworICBU cmFuc2xhdGlvbiBiZXR3ZWVuIHR3byBmaWxlIGNoYXJhY3RlciBzZXRzIGlzIGRvbmUsIGZvciBl eGFtcGxlLAorICBieSB0aGUgQ09OTkVDVCwgVFJBTlNNSVQsIGFuZCBUUkFOU0xBVEUgY29tbWFu ZHMuCisKKyAgVHJhbnNsYXRpb24gYmV0d2VlbiBLYW5qaSBjaGFyYWN0ZXIgc2V0cyBpcyBub3Qg eWV0IHN1cHBvcnRlZC4KKyovCitpbnQKK2dldHRjcyhjczEsY3MyKSBpbnQgY3MxLCBjczI7IHsK KyNpZmRlZiBOT0NTRVRTICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBObyBjaGFyYWN0ZXIt c2V0IHN1cHBvcnQgKi8KKyAgICByZXR1cm4oMCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBzbyBubyB0cmFuc2xhdGlvbiAqLworI2Vsc2UKKyAgICBpbnQgdGNzID0gVENfVFJBTlNQOwor I2lmZGVmIEtBTkpJCisvKiBLYW5qaSBub3Qgc3VwcG9ydGVkIHlldCAqLworICAgIGlmIChmY3Np bmZvW2NzMV0uYWxwaGFiZXQgPT0gQUxfSkFQQU4gfHwKKyAgICAgICAgZmNzaW5mb1tjczJdLmFs cGhhYmV0ID09IEFMX0pBUEFOICkKKyAgICAgIHRjcyA9IFRDX1RSQU5TUDsKKyAgICBlbHNlCisj ZW5kaWYgLyogS0FOSkkgKi8KKyNpZmRlZiBDWVJJTExJQworLyoKKyAgSSBjYW4ndCByZW1lbWJl ciB3aHkgd2UgZG9uJ3QgdGVzdCBib3RoIHNldHMgaGVyZSwgYnV0IEkgdGhpbmsgdGhlcmUKKyAg bXVzdCBoYXZlIGJlZW4gYSByZWFzb24uLi4KKyovCisgICAgICBpZiAoZmNzaW5mb1tjczJdLmFs cGhhYmV0ID09IEFMX0NZUklMKQorICAgICAgICB0Y3MgPSBUQ19DWVJJTEw7CisgICAgICBlbHNl CisjZW5kaWYgLyogQ1lSSUxMSUMgKi8KKyNpZmRlZiBIRUJSRVcKKyAgICAgICAgICBpZiAoZmNz aW5mb1tjczFdLmFscGhhYmV0ID09IEFMX0hFQlJFVyB8fAorICAgICAgICAgICAgICBmY3NpbmZv W2NzMl0uYWxwaGFiZXQgPT0gQUxfSEVCUkVXICkKKyAgICAgICAgICAgIHRjcyA9IFRDX0hFQlJF VzsKKyAgICAgICAgICBlbHNlCisjZW5kaWYgLyogSEVCUkVXICovCisjaWZkZWYgR1JFRUsKKyAg ICAgICAgICBpZiAoZmNzaW5mb1tjczFdLmFscGhhYmV0ID09IEFMX0dSRUVLIHx8CisgICAgICAg ICAgICAgIGZjc2luZm9bY3MyXS5hbHBoYWJldCA9PSBBTF9HUkVFSyApCisgICAgICAgICAgICB0 Y3MgPSBUQ19HUkVFSzsKKyAgICAgICAgICBlbHNlCisjZW5kaWYgLyogR1JFRUsgKi8KKworICAg ICAgICAgICAgLyogUm9tYW4gc2V0cyAuLi4gKi8KKworI2lmZGVmIExBVElOMiAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIEVhc3QgRXVyb3BlYW4gKi8KKyAgICAgICAgaWYgKGNzMSA9PSBG Q18yTEFUSU4gIHx8IGNzMiA9PSBGQ18yTEFUSU4gfHwgLyogTGF0aW4tMiAqLworICAgICAgICAg ICAgY3MxID09IEZDX0NQODUyICAgfHwgY3MyID09IEZDX0NQODUyICB8fCAvKiBDUDg1MiAqLwor ICAgICAgICAgICAgY3MxID09IEZDX0NQMTI1MCAgfHwgY3MyID09IEZDX0NQMTI1MCB8fCAvKiBX aW5kb3dzIExhdGluLTIgKi8KKyAgICAgICAgICAgIGNzMSA9PSBGQ19NQVpPVklBIHx8IGNzMiA9 PSBGQ19NQVpPVklBKSAgLyogUG9saXNoIE1hem92aWEgKi8KKyAgICAgICAgICB0Y3MgPSBUQ18y TEFUSU47CisgICAgICAgIGVsc2UKKyNlbmRpZiAvKiBMQVRJTjIgKi8KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXZXN0IEV1cm9wZWFuIEV1cm8tYXdhcmUgKi8K KyAgICAgICAgICBpZiAoY3MxID09IEZDX0NQODU4IHx8IGNzMSA9PSBGQ185TEFUSU4gfHwKKyAg ICAgICAgICAgICAgY3MyID09IEZDX0NQODU4IHx8IGNzMiA9PSBGQ185TEFUSU4pCisgICAgICAg ICAgICB0Y3MgPSBUQ185TEFUSU47CisgICAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogVHJhZGl0aW9uYWwgV2VzdCBFdXJvcGVhbiAqLworICAgICAgICAgICAgdGNzID0g VENfMUxBVElOOworICAgIHJldHVybih0Y3MpOworI2VuZGlmIC8qIE5PQ1NFVFMgKi8KK30KKwor I2lmbmRlZiBOT0xPQ0FMCisvKiAgRCBPIEMgTyBOIEUgQyBUICAtLSAgRG8gdGhlIGNvbm5lY3Qg Y29tbWFuZCAgKi8KKy8qCisgIHEgPSAwIG1lYW5zIGlzc3VlIG5vcm1hbCBpbmZvcm1hdGlvbmFs IG1lc3NhZ2UgYWJvdXQgaG93IHRvIGdldCBiYWNrLCBldGMuCisgIHEgIT0gMCBtZWFucyB0byBz a2lwIHRoZSBtZXNzYWdlLgorKi8KKworaW50Citkb2NvbmVjdChxLGFzeW5jKSBpbnQgcSwgYXN5 bmM7IHsKKyAgICBpbnQgeDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXR1cm4g Y29kZSAqLworI2lmZGVmIENLX0FVVE9ETAorICAgIGV4dGVybiBDSEFSIGtzYnVmW107CisjZW5k aWYgLyogQ0tfQVVUT0RMICovCisjaWZuZGVmIE5PS1ZFUkJTICAgICAgICAgICAgICAgICAgICAg ICAgLyogS2V5Ym9hcmQgbWFjcm8gbWF0ZXJpYWwgKi8KKyAgICBleHRlcm4gaW50IGtleW1hYywg a2V5bWFjeDsKKyNlbmRpZiAvKiBOT0tWRVJCUyAqLworICAgIGV4dGVybiBpbnQganVzdG9uZSwg YWRsX2VycjsKKyAgICBpbnQgcXNhdmU7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGb3Ig cmVtZW1iZXJpbmcgInF1aWV0IiB2YWx1ZSAqLworI2lmZGVmIE9TMgorICAgIGV4dGVybiBpbnQg dGVybV9pbzsKKyAgICBleHRlcm4gaW50IGRpc3BsYXlfZGVtbzsKKyAgICBpbnQgdGVybV9pb19z YXZlOworI2lmZGVmIEtVSQorICAgIGV4dGVybiBpbnQga3VpX2FzeW5jOworI2VuZGlmIC8qIEtV SSAqLworI2VuZGlmIC8qIE9TMiAqLworICAgIGludCBpc190biA9IDA7CisKKyNpZmRlZiBJS1NE CisgICAgaWYgKGluc2VydmVyKSB7CisgICAgICAgIGlmICghcXVpZXQpCisgICAgICAgICAgcHJp bnRmKCI/U29ycnksIElLU0QgY2Fubm90IENPTk5FQ1QuXHJcbiIpOworICAgICAgICByZXR1cm4o c3VjY2VzcyA9IDApOworICAgIH0KKyNlbmRpZiAvKiBJS1NEICovCisKKyAgICBpc190biA9Cisj aWZkZWYgVE5DT0RFCisgICAgICAobG9jYWwgJiYgbmV0d29yayAmJiBJU19URUxORVQoKSkgfHwg KCFsb2NhbCAmJiBzc3RlbG5ldCkKKyNlbHNlCisgICAgICAgIDAKKyNlbmRpZiAvKiBUTkNPREUg Ki8KKyAgICAgICAgICA7CisvKgorICBTYXZpbmcsIGNoYW5naW5nLCBhbmQgcmVzdG9yaW5nIHRo ZSBnbG9iYWwgInF1aWV0IiB2YXJpYWJsZSBhcm91bmQgY2FsbHMKKyAgdG8gY29uZWN0KCkgdG8g Y29udHJvbCB3aGV0aGVyIHRoZSB2ZXJib3NlIENPTk5FQ1QgbWVzc2FnZSBpcyBwcmludGVkIGlz CisgIG9idmlvdXNseSBsZXNzIGVsZWdhbnQgdGhhbiBwYXNzaW5nIGEgcGFyYW1ldGVyIHRvIGNv bmVjdCgpLCBidXQgd2UgZG8gaXQKKyAgdGhpcyB3YXkgdG8gYXZvaWQgdGhlIG5lZWQgdG8gY2hh bmdlIGFsbCBvZiB0aGUgY2s/Y29uLmMgbW9kdWxlcy4gIE5PVEU6CisgIGl0IGlzIGltcG9ydGFu dCB0byByZXN0b3JlIHRoZSB2YWx1ZSBpbW1lZGlhdGVseSB1cG9uIHJldHVybiBpbiBjYXNlIHRo ZXJlCisgIGlzIGFuIGF1dG9kb3dubG9hZCBvciBBUEMuCisqLworICAgIHFzYXZlID0gcXVpZXQ7 ICAgICAgICAgICAgICAgICAgICAgIC8qIFNhdmUgaXQgKi8KKyAgICBpZiAoIXF1aWV0ICYmIHEg PiAtMSkKKyAgICAgIHF1aWV0ID0gcTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBVc2UgYXJn dW1lbnQgdGVtcG9yYXJpbHkgKi8KKyAgICBjb25yZXMoKTsgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBQdXQgY29uc29sZSBiYWNrIHRvIG5vcm1hbCAqLworICAgIGRlYnVnKEYxMDEsImRv Y29uZWN0IGp1c3RvbmUgMSIsIiIsanVzdG9uZSk7CisjaWZkZWYgQ0tfQVVUT0RMCisgICAga3Ni dWZbMF0gPSBOVUw7ICAgICAgICAgICAgICAgICAgICAgLyogQXV0b2Rvd25sb2FkIHBhY2tldCBi dWZmZXIgKi8KKyNlbmRpZiAvKiBDS19BVVRPREwgKi8KKyNpZmRlZiBPUzIKKyAgICBkaXNwbGF5 X2RlbW8gPSAxOyAgICAgICAgICAgICAgICAgICAvKiBSZW1lbWJlciB0byBkaXNwbGF5IGRlbW8g Ki8KKyNlbmRpZiAvKiBPUzIgKi8KKworI2lmZGVmIElLU19PUFRJT04KKyAgICBpZiAoaXNfdG4g JiYgVEVMT1BUX1UoVEVMT1BUX0tFUk1JVCkgJiYgdHRjaGsoKSA+PSAwCisjaWZkZWYgT1MyCisg ICAgICAgJiYgIXZpZXdvbmx5CisjZW5kaWYgLyogT1MyICovCisgICAgICAgICkgeworICAgICAg ICAvKiBJZiB0aGUgcmVtb3RlIHNpZGUgaXMgaW4gYSBzdGF0ZSBvZiBJS1MgU1RBUlQtU0VSVkVS ICAgICovCisgICAgICAgIC8qIHdlIHJlcXVlc3QgdGhhdCB0aGUgc3RhdGUgYmUgY2hhbmdlZC4g IFdlIHdpbGwgZGV0ZWN0ICAgKi8KKyAgICAgICAgLyogYSBmYWlsdXJlIHRvIGFkaGVyZSB0byB0 aGUgcmVxdWVzdCB3aGVuIHdlIGNhbGwgdHRpbmMoKSAqLworICAgICAgICBpZiAoIWlrc193YWl0 KEtFUk1JVF9SRVFfU1RPUCwwKSAmJiAhdGNwX2luY29taW5nKSB7CisgICAgICAgICAgICBpZiAo IXF1aWV0KSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCJcclxuRW50ZXIgQ2xpZW50L1NlcnZl ciBNb2RlLi4uICBVc2U6XHJcblxyXG4iKTsKKyAgICAgICAgICAgICAgICBwcmludGYoCisiIFJF TU9URSBMT0dJTiA8dXNlcj4gPHBhc3N3b3JkPiB0byBsb2cgaW4gdG8gdGhlIHNlcnZlciBpZiBu ZWNlc3NhcnkuXHJcbiIpOworICAgICAgICAgICAgICAgIHByaW50ZigiIFNFTkQgYW5kIEdFVCBm b3IgZmlsZSB0cmFuc2Zlci5cclxuIik7CisgICAgICAgICAgICAgICAgcHJpbnRmKCIgUkVNT1RF IGNvbW1hbmRzIGZvciBmaWxlIG1hbmFnZW1lbnQuXHJcbiIpOworICAgICAgICAgICAgICAgIHBy aW50ZigiIEZJTklTSCB0byB0ZXJtaW5hdGUgQ2xpZW50L1NlcnZlciBtb2RlLlxyXG4iKTsKKyAg ICAgICAgICAgICAgICBwcmludGYoIiBCWUUgdG8gdGVybWluYXRlIGFuZCBjbG9zZSBjb25uZWN0 aW9uLlxyXG4iKTsKKyAgICAgICAgICAgICAgICBwcmludGYoIiBSRU1PVEUgSEVMUCBmb3IgYWRk aXRpb25hbCBpbmZvcm1hdGlvbi5cclxuXHJcbiIpOworICAgICAgICAgICAgfQorICAgICAgICAg ICAgcXVpZXQgPSBxc2F2ZTsKKyAgICAgICAgICAgIHJldHVybigwKTsgICAgICAvKiBGYWlsdXJl ICovCisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBMZXQgb3VyIHBlZXIga25vdyBvdXIgc3Rh dGUuICovCisjaWZkZWYgQ0tfQVVUT0RMCisgICAgaWYgKGlzX3RuICYmIFRFTE9QVF9NRShURUxP UFRfS0VSTUlUKQorI2lmZGVmIE9TMgorICAgICAgICAmJiAhdmlld29ubHkKKyNlbmRpZiAvKiBP UzIgKi8KKyAgICAgICAgICkgeworICAgICAgICBpZiAoYXV0b2RsICYmICFURUxPUFRfU0IoVEVM T1BUX0tFUk1JVCkua2VybWl0Lm1lX3N0YXJ0KSB7CisgICAgICAgICAgICB0bl9zaWtzKEtFUk1J VF9TVEFSVCk7ICAgICAgLyogU2VuZCBLZXJtaXQtU2VydmVyIFN0YXJ0ICovCisgICAgICAgIH0g ZWxzZSBpZiAoIWF1dG9kbCAmJiBURUxPUFRfU0IoVEVMT1BUX0tFUk1JVCkua2VybWl0Lm1lX3N0 YXJ0KSB7CisgICAgICAgICAgICB0bl9zaWtzKEtFUk1JVF9TVE9QKTsKKyAgICAgICAgfQorICAg IH0KKyNlbHNlIC8qIENLX0FVVE9ETCAqLworICAgIGlmIChpc190biAmJiBURUxPUFRfTUUoVEVM T1BUX0tFUk1JVCkgJiYKKwlURUxPUFRfU0IoVEVMT1BUX0tFUk1JVCkua2VybWl0Lm1lX3N0YXJ0 KQorICAgICAgICB0bl9zaWtzKEtFUk1JVF9TVE9QKTsKKyNlbmRpZiAvKiBDS19BVVRPREwgKi8K KyNlbmRpZiAvKiBJS1NfT1BUSU9OICovCisKKyAgICBkZWJ1ZyhGMTAxLCJkb2NvbmVjdCBmbG93 IiwiIixmbG93KTsKKyNpZmRlZiBPUzIKKyAgICBkZWJ1ZyhGMTAxLCJkb2NvbmVjdCBhc3luYyIs IiIsYXN5bmMpOworI2lmZGVmIEtVSQorICAgIGlmIChrdWlfYXN5bmMpCisgICAgICBhc3luYyA9 IDE7OworI2VuZGlmIC8qIEtVSSAqLworICAgIHggPSBjb25lY3QoYXN5bmMpOyAgICAgICAgICAg ICAgICAgIC8qIENvbm5lY3QgdGhlIGZpcnN0IHRpbWUgKi8KKyNlbHNlIC8qIE9TMiAqLworICAg IHggPSBjb25lY3QoKTsKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICBkZWJvayA9IDE7CisKKyNpZmRl ZiBJS1NfT1BUSU9OCisgICAgaWYgKFRFTE9QVF9VKFRFTE9QVF9LRVJNSVQpICYmCisgICAgICAg IFRFTE9QVF9TQihURUxPUFRfS0VSTUlUKS5rZXJtaXQudV9zdGFydCAmJgorICAgICAgICAhdGNw X2luY29taW5nICYmICFxdWlldCAmJiB0dGNoaygpID49IDAKKyAgICAgICAgKSB7CisgICAgICAg IHByaW50ZigiXHJcbkVudGVyIENsaWVudC9TZXJ2ZXIgTW9kZS4uLiAgVXNlOlxyXG5cclxuIik7 CisgICAgICAgIHByaW50ZigKKyIgUkVNT1RFIExPR0lOIDx1c2VyPiA8cGFzc3dvcmQ+IHRvIGxv ZyBpbiB0byB0aGUgc2VydmVyIGlmIG5lY2Vzc2FyeS5cclxuIik7CisgICAgICAgIHByaW50Zigi IFNFTkQgYW5kIEdFVCBmb3IgZmlsZSB0cmFuc2Zlci5cclxuIik7CisgICAgICAgIHByaW50Zigi IFJFTU9URSBjb21tYW5kcyBmb3IgZmlsZSBtYW5hZ2VtZW50LlxyXG4iKTsKKyAgICAgICAgcHJp bnRmKCIgRklOSVNIIHRvIHRlcm1pbmF0ZSBDbGllbnQvU2VydmVyIG1vZGUuXHJcbiIpOworICAg ICAgICBwcmludGYoIiBCWUUgdG8gdGVybWluYXRlIGFuZCBjbG9zZSBjb25uZWN0aW9uLlxyXG4i KTsKKyAgICAgICAgcHJpbnRmKCIgUkVNT1RFIEhFTFAgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRp b24uXHJcblxyXG4iKTsKKyAgICB9CisjZW5kaWYgLyogSUtTX09QVElPTiAqLworCisgICAgcXVp ZXQgPSBxc2F2ZTsgICAgICAgICAgICAgICAgICAgICAgLyogUmVzdG9yZSAicXVpZXQiIHZhbHVl ICovCisgICAgZGVidWcoRjEwMSwiZG9jb25lY3QganVzdG9uZSAyIiwiIixqdXN0b25lKTsKKwor I2lmZGVmIE5FVENPTk4KKyAgICBpZiAobmV0d29yayAmJiB0bl9leGl0ICYmIHR0Y2hrKCkgPCAw KQorICAgICAgZG9leGl0KEdPT0RfRVhJVCx4aXRzdGEpOyAgICAgICAgIC8qIEV4aXQgd2l0aCBn b29kIHN0YXR1cyAqLworI2VuZGlmIC8qIE5FVENPTk4gKi8KKworI2lmZGVmIE9TMk9SVU5JWAor ICAgIC8qIEV4aXQgb24gZGlzY29ubmVjdCBpZiB0aGUgcG9ydCBpcyBub3Qgb3BlbiBvciBjYXJy aWVyIGRldGVjdCAqLworICAgIGlmIChleGl0b25jbG9zZSAmJiAodHRjaGsoKSA8IDApKQorICAg ICAgZG9leGl0KEdPT0RfRVhJVCx4aXRzdGEpOworI2VuZGlmIC8qIE9TMk9SVU5JWCAqLworCisj aWZkZWYgQ0tDT05JTlRCNENCCisgICAgLyogVGhlIG9yZGVyIG1ha2VzIGEgZGlmZmVyZW5jZSBp biBIUC1VWCA4LjAwLiAqLworICAgIC8qIFRoZSBvdGhlciBvcmRlciBtYWtlcyBpdCB0aGluayBp dCdzIGluIHRoZSBiYWNrZ3JvdW5kIHdoZW4gaXQgKi8KKyAgICAvKiByZXR1cm5zIGZyb20gQ09O TkVDVCAoQXByIDE5OTkpLiAqLworICAgIHNldGludCgpOworICAgIGNvbmNiKChjaGFyKWVzY2Fw ZSk7ICAgICAgICAgICAgICAgIC8qIFJlc3RvcmUgY29uc29sZSBmb3IgY29tbWFuZHMgKi8KKyNl bHNlCisgICAgLyogVGhpcyBpcyBob3cgaXQgaGFzIGFsd2F5cyBiZWVuIHNvIGJldHRlciBsZWF2 ZSBpdCAqLworICAgIC8qIHRoaXMgd2F5IGZvciBhbGwgbm9uLUhQLVVYLTguMDAgYnVpbGRzLiAq LworICAgIGNvbmNiKChjaGFyKWVzY2FwZSk7ICAgICAgICAgICAgICAgIC8qIFJlc3RvcmUgY29u c29sZSBmb3IgY29tbWFuZHMgKi8KKyAgICBzZXRpbnQoKTsKKyNlbmRpZiAvKiBDS0NPTklOVEI0 Q0IgKi8KKworI2lmZGVmIE9TMgorICAgIGlmICghYXN5bmMpIHsKKyAgICAgICAgdGVybV9pb19z YXZlID0gdGVybV9pbzsgICAgICAgICAvKiBEaXNhYmxlIEkvTyBieSBlbXVsYXRvciAqLworICAg ICAgICB0ZXJtX2lvID0gMDsKKyNlbmRpZiAvKiBPUzIgKi8KKworI2lmZGVmIENLX0FQQworLyoK KyAgSWYgYW4gQVBDIGNvbW1hbmQgd2FzIHJlY2VpdmVkIGR1cmluZyBDT05ORUNUIG1vZGUsIHdl IGRlZmluZSBpdCBub3cKKyAgYXMgYSBtYWNybywgZXhlY3V0ZSB0aGUgbWFjcm8sIGFuZCB0aGVu IHJldHVybiB0byBDT05ORUNUIG1vZGUuCisgIFdlIGRvIHRoaXMgaW4gYSBXSElMRSBsb29wIGlu IGNhc2UgYWRkaXRpb25hbCBBUENzIGNvbWUgZHVyaW5nIHN1YnNlcXVlbnQKKyAgQ09OTkVDVCBz ZXNzaW9ucy4KKyovCisgICAgICAgIGRlYnVnKEYxMDEsImRvY29uZWN0IGFwY2FjdGl2ZSIsIiIs YXBjYWN0aXZlKTsKKyAgICAgICAgZGVidWcoRjEwMSwiZG9jb25lY3Qgc3VjY2VzcyIsIiIsc3Vj Y2Vzcyk7CisKKyAgICAgICAgd2hpbGUgKHggPiAwICYmIChhcGNhY3RpdmUgPT0gQVBDX0xPQ0FM IHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgKGFwY2FjdGl2ZSA9PSBBUENfUkVNT1RFICYm IGFwY3N0YXR1cyAhPSBBUENfT0ZGKSkpIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMDEsImRvY29u ZWN0IGp1c3RvbmUgMyIsIiIsanVzdG9uZSk7CisgICAgICAgICAgICBpZiAobWxvb2sobWFjdGFi LCJfYXBjX2NvbW1hbmRzIixubWFjKSA9PSAtMSkgeworICAgICAgICAgICAgICAgIGRlYnVnKEYx MTAsImRvY29uZWN0IGFib3V0IHRvIGV4ZWN1dGUgQVBDIixhcGNidWYsMCk7CisgICAgICAgICAg ICAgICAgZG9tYWMoIl9hcGNfY29tbWFuZHMiLGFwY2J1ZixjbWRzdGtbY21kbHZsXS5jY2ZsZ3N8 Q0ZfQVBDKTsKKyAgICAgICAgICAgICAgICBkZWxtYWMoIl9hcGNfY29tbWFuZHMiLDEpOworI2lm ZGVmIERFQlVHCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGRlYnVnKEYx MDAsImRvY29uZWN0IEFQQyBpbiBwcm9ncmVzcyIsIiIsMCk7CisjZW5kaWYgLyogREVCVUcgKi8K KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlYnVnKEYxMDEsImRvY29uZWN0IGFwY2FjdGl2 ZSBhZnRlciBkb21hYyIsIiIsYXBjYWN0aXZlKTsKKyAgICAgICAgICAgIGlmICghYXBjYWN0aXZl KSB7ICAgICAgICAgICAgICAgLyogSW4gY2FzZSBDTEVBUiBBUEMgd2FzIGluIEFQQyAqLworICAg ICAgICAgICAgICAgIGRlYnVnKEYxMDEsImRvY29uZWN0IHF1aXQgQVBDIGxvb3A6IGFwY2FjdGl2 ZSIsIiIsYXBjYWN0aXZlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K KyAgICAgICAgICAgIC8qIEFsc28gZG9uJ3QgcmVjb25uZWN0IGlmIGF1dG9kb3dubG9hZCBmYWls ZWQgLSB2ZXJ5IGNvbmZ1c2luZyEgKi8KKyAgICAgICAgICAgIC8qIExldCB0aGVtIHZpZXcgdGhl IGxvY2FsIHNjcmVlbiB0byBzZWUgd2hhdCBoYXBwZW5lZC4gLSBmZGMgKi8KKworICAgICAgICAg ICAgLyogVGhpcyBzaG91bGQgYmUgY29uZGl0aW9uYWwuICBJZiBzb21lb25lIGlzIHJlbHlpbmcg b24gdGhlICovCisgICAgICAgICAgICAvKiBjb25uZWN0IG1vZGUgYXV0b2Rvd25sb2FkIGZvciB0 aGUga2VybWl0IHNlcnZlciB0byB1c2Ugd2l0aCAqLworICAgICAgICAgICAgLyogYSByZW1vdGVs eSBleGVjdXRlZCBzY3JpcHQgd2Ugc2hvdWxkIGJlIGFibGUgdG8gcmV0dXJuIHRvICovCisgICAg ICAgICAgICAvKiBjb25uZWN0IG1vZGUgb24gdGhlIGZhaWx1cmUuICBXaGF0IHdlIHJlYWxseSBu ZWVkIHRvIGRvIGlzICovCisgICAgICAgICAgICAvKiByZXBvcnQgdGhlIHN0YXR1cyBvZiB0aGUg dHJhbnNmZXIgYW5kIHRoZW4gcmV0dXJuIHRvIENPTk5FQ1QuICovCisgICAgICAgICAgICAvKiBJ biB1bml4IHRoaXMgd291bGQgc2ltcGx5IGJlIGEgcHJpbnRmKCksIGJ1dCBpbiBLOTUgaXQgY291 bGQgKi8KKyAgICAgICAgICAgIC8qIHVzZSBhIHBvcHVwIGRpYWxvZyB0byByZXBvcnQgdGhlIHN0 YXR1cy4gLSBKZWZmICovCisKKyNpZm5kZWYgTk9YRkVSCisgICAgICAgICAgICBkZWJ1ZyhGMTAx LCJkb2NvbmVjdCB4ZmVyc3RhdCIsIiIseGZlcnN0YXQpOworICAgICAgICAgICAgaWYgKGFwY2Fj dGl2ZSA9PSBBUENfTE9DQUwgJiYgIXhmZXJzdGF0ICYmIGFkbF9lcnIgIT0gMCkgeworICAgICAg ICAgICAgICAgIGRlYnVnKEYxMDEsImRvY29uZWN0IHF1aXQgQVBDIGxvb3A6IHhmZXJzdGF0Iiwi Iix4ZmVyc3RhdCk7CisgICAgICAgICAgICAgICAgYXBjYWN0aXZlID0gQVBDX0lOQUNUSVZFOwor ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorI2VuZGlmIC8qIE5PWEZFUiAq LworI2lmZGVmIE9TMgorICAgICAgICAgICAgbXNsZWVwKDI1MCk7CisjZW5kaWYgLyogT1MyICov CisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJkb2NvbmVjdCBqdXN0b25lIDQiLCIiLGp1c3RvbmUp OworICAgICAgICAgICAgcXNhdmUgPSBxdWlldDsgICAgICAgICAgICAgIC8qIERvIHRoaXMgYWdh aW4uLi4gKi8KKyAgICAgICAgICAgIGlmICghcXVpZXQgJiYgcSA+IC0xKQorICAgICAgICAgICAg ICBxdWlldCA9IHE7CisjaWZkZWYgQ0tfQVVUT0RMCisgICAgICAgICAgICBrc2J1ZlswXSA9IE5V TDsKKyNlbmRpZiAvKiBDS19BVVRPREwgKi8KKyNpZmRlZiBJS1NfT1BUSU9OCisjaWZkZWYgQ0tf QVVUT0RMCisgICAgICAgICAgICBpZiAoaXNfdG4gJiYKKyAgICAgICAgICAgICAgICBURUxPUFRf TUUoVEVMT1BUX0tFUk1JVCkgJiYKKyAgICAgICAgICAgICAgICAhVEVMT1BUX1NCKFRFTE9QVF9L RVJNSVQpLmtlcm1pdC5tZV9zdGFydCAmJgorICAgICAgICAgICAgICAgIGF1dG9kbAorI2lmZGVm IENLX0FQQworICAgICAgICAgICAgICAgICYmICFhcGNhY3RpdmUKKyNlbmRpZiAvKiBDS19BUEMg Ki8KKyNpZmRlZiBPUzIKKyAgICAgICAgICAgICAgICAmJiAhdmlld29ubHkKKyNlbmRpZiAvKiBP UzIgKi8KKyAgICAgICAgICAgICAgICApIHsKKyAgICAgICAgICAgICAgICB0bl9zaWtzKEtFUk1J VF9TVEFSVCk7ICAvKiBTZW5kIEtlcm1pdC1TZXJ2ZXIgU3RhcnQgKi8KKyAgICAgICAgICAgIH0K KyNlbmRpZiAvKiBDS19BVVRPREwgKi8KKyNlbmRpZiAvKiBJS1NfT1BUSU9OICovCisjaWZuZGVm IE9TMgorICAgICAgICAgICAgeCA9IGNvbmVjdCgpOyAgICAgICAgICAgICAgIC8qIFJlLUNPTk5F Q1QuICovCisjZWxzZSAvKiBPUzIgKi8KKyAgICAgICAgICAgIHggPSBjb25lY3QoMCk7CisgICAg ICAgICAgICB0ZXJtX2lvID0gdGVybV9pb19zYXZlOworI2VuZGlmIC8qIE9TMiAqLworICAgICAg ICAgICAgZGVib2sgPSAxOworICAgICAgICAgICAgcXVpZXQgPSBxc2F2ZTsKKyAgICAgICAgICAg IGRlYnVnKEYxMDEsImRvY29uZWN0IGp1c3RvbmUgNSIsIiIsanVzdG9uZSk7CisjaWZkZWYgTkVU Q09OTgorICAgICAgICAgICAgaWYgKG5ldHdvcmsgJiYgdHRjaGsoKSA8IDApIHsKKyAgICAgICAg ICAgICAgICBpZiAodG5fZXhpdCB8fCBleGl0b25jbG9zZSkKKyAgICAgICAgICAgICAgICAgIGRv ZXhpdChHT09EX0VYSVQseGl0c3RhKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBORVRDT05OICovCisKKyNp ZmRlZiBPUzJPUlVOSVgKKyAgICAgICAgICAgIC8qIElmIGNvbm5lY3Rpb24gZHJvcHBlZCAqLwor ICAgICAgICAgICAgaWYgKHR0Y2hrKCkgPCAwKSB7CisgICAgICAgICAgICAgICAgY29uY2IoKGNo YXIpZXNjYXBlKTsgICAgLyogUmVzdG9yZSBjb25zb2xlLiAqLworICAgICAgICAgICAgICAgIGlm IChleGl0b25jbG9zZSkKKyAgICAgICAgICAgICAgICAgIGRvZXhpdChHT09EX0VYSVQseGl0c3Rh KTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgICAgIH0KKyNlbmRpZiAvKiBPUzJPUlVOSVggKi8KKyAgICAgICAgfSAvKiBMb29wIGJhY2sg Zm9yIG1vcmUuICovCisjZW5kaWYgLyogQ0tfQVBDICovCisKKyNpZm5kZWYgTk9LVkVSQlMKKyAg ICAgICAgaWYgKChrZXltYWMgPiAwKSAmJiAoa2V5bWFjeCA+IC0xKSkgeyAvKiBFeGVjdXRpbmcg YSBrZXlib2FyZCBtYWNybz8gKi8KKyAgICAgICAgICAgIC8qIFNldCB1cCB0aGUgbWFjcm8gYW5k IHJldHVybiAqLworICAgICAgICAgICAgLyogRG8gbm90IGNsZWFyIHRoZSBrZXltYWMgZmxhZyAq LworI2lmZGVmIE9TMgorCSAgICB0ZXJtX2lvID0gdGVybV9pb19zYXZlOworI2VuZGlmIC8qIE9T MiAqLworICAgICAgICAgICAgcmV0dXJuKGRvZG8oa2V5bWFjeCxOVUxMLENGX0tNQUN8Y21kc3Rr W2NtZGx2bF0uY2NmbGdzKSk7CisgICAgICAgIH0KKyNlbmRpZiAvKiBOT0tWRVJCUyAqLworI2lm ZGVmIE9TMgorICAgICAgICB0ZXJtX2lvID0gdGVybV9pb19zYXZlOworICAgIH0gLyogaWYgKCFh c3luYykgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKworI2lmZGVmIENLQ09OSU5UQjRDQgorICAgIC8q IFRoZSBvcmRlciBtYWtlcyBhIGRpZmZlcmVuY2UgaW4gSFAtVVggOC4wMC4gKi8KKyAgICAvKiBU aGUgb3RoZXIgb3JkZXIgbWFrZXMgaXQgdGhpbmsgaXQncyBpbiB0aGUgYmFja2dyb3VuZCB3aGVu IGl0ICovCisgICAgLyogcmV0dXJucyBmcm9tIENPTk5FQ1QgKEFwciAxOTk5KS4gKi8KKyAgICBz ZXRpbnQoKTsKKyAgICBjb25jYigoY2hhcillc2NhcGUpOyAgICAgICAgICAgICAgICAvKiBSZXN0 b3JlIGNvbnNvbGUgZm9yIGNvbW1hbmRzICovCisjZWxzZQorICAgIC8qIFRoaXMgaXMgaG93IGl0 IGhhcyBhbHdheXMgYmVlbiBzbyBiZXR0ZXIgbGVhdmUgaXQgKi8KKyAgICAvKiB0aGlzIHdheSBm b3IgYWxsIG5vbi1IUC1VWC04LjAwIGJ1aWxkcy4gKi8KKyAgICBjb25jYigoY2hhcillc2NhcGUp OyAgICAgICAgICAgICAgICAvKiBSZXN0b3JlIGNvbnNvbGUgZm9yIGNvbW1hbmRzICovCisgICAg c2V0aW50KCk7CisjZW5kaWYgLyogQ0tDT05JTlRCNENCICovCisjaWZkZWYgT1MyCisgICAgaWYg KCFhc3luYykKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgIHdoYXQgPSBXX0NPTU1BTkQ7ICAgICAg ICAgICAgICAgICAvKiBCYWNrIGluIGNvbW1hbmQgbW9kZS4gKi8KKyAgICByZXR1cm4oeCk7ICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBEb25lLiAqLworfQorI2VuZGlmIC8qIE5PTE9DQUwg Ki8KKworI2lmbmRlZiBOT0lDUAorI2lmZGVmIENPTU1FTlQKKy8qCisgIEl0IHNlZW1lZCB0aGF0 IHRoaXMgd2FzIG5lZWRlZCBmb3IgT1MvMiwgaW4gd2hpY2ggXHYoY21kZmlsZSkgYW5kIG90aGVy CisgIGZpbGUtb3JpZW50ZWQgdmFyaWFibGVzIG9yIGZ1bmN0aW9ucyBjYW4gcmV0dXJuIGZpbGVu YW1lcyBjb250YWluaW5nCisgIGJhY2tzbGFzaGVzLCB3aGljaCBhcmUgc3Vic2VxdWVudGx5IGlu dGVycHJldGVkIGFzIHF1b3RlcyByYXRoZXIgdGhhbgorICBkaXJlY3Rvcnkgc2VwYXJhdG9ycyAo ZS5nLiBzZWUgY29tbWVudGVkIHNlY3Rpb24gZm9yIFZOX0NNREYgYmVsb3cpLgorICBCdXQgdGhl IHByb2JsZW0gY2FuJ3QgYmUgY3VyZWQgYXQgdGhpcyBsZXZlbC4gIEV4YW1wbGU6CisKKyAgICB0 eXBlIFx2KGNtZGZpbGUpCisKKyAgV2l0aG91dCBkb3VibGluZywgdGhlIGZpbGVuYW1lIGlzIHBh cnNlZCBjb3JyZWN0bHksIGJ1dCB0aGVuIHdoZW4gcGFzc2VkCisgIHRvIFVOSVggJ2NhdCcgdGhy b3VnaCB0aGUgc2hlbGwsIHRoZSBiYWNrc2xhc2ggaXMgcmVtb3ZlZCwgYW5kIHRoZW4gY2F0Cisg IGNhbid0IG9wZW4gdGhlIGZpbGUuICBXaXRoIGRvdWJsaW5nLCB0aGUgZmlsZW5hbWUgaXMgbm90 IHBhcnNlZCBjb3JyZWN0bHkKKyAgYW5kIHRoZSBUWVBFIGNvbW1hbmQgZmFpbHMgaW1tZWRpYXRl bHkgd2l0aCBhICJmaWxlIG5vdCBmb3VuZCIgZXJyb3IuCisqLworLyoKKyAgVXRpbGl0eSByb3V0 aW5lIHRvIGRvdWJsZSBhbGwgYmFja3NsYXNoZXMgaW4gYSBzdHJpbmcuCisgIHMxIGlzIHBvaW50 ZXIgdG8gc291cmNlIHN0cmluZywgczIgaXMgcG9pbnRlciB0byBkZXN0aW5hdGlvbiBzdHJpbmcs CisgIG4gaXMgbGVuZ3RoIG9mIGRlc3RpbmF0aW9uIHN0cmluZywgYm90aCBOVUwtdGVybWluYXRl ZC4KKyAgUmV0dXJucyAwIGlmIE9LLCAtMSBpZiBub3QgT0sgKGRlc3RpbmF0aW9uIHN0cmluZyB0 b28gc2hvcnQpLgorKi8KK2ludAorZGJsYnMoczEsczIsbikgY2hhciAqczEsICpzMjsgaW50IG47 IHsKKyAgICBpbnQgaSA9IDA7CisgICAgd2hpbGUgKCpzMSkgeworICAgICAgICBpZiAoKnMxID09 ICdcXCcpIHsKKyAgICAgICAgICAgIGlmICgrK2kgPiBuKSByZXR1cm4oLTEpOworICAgICAgICAg ICAgKnMyKysgPSAnXFwnOworICAgICAgICB9CisgICAgICAgIGlmICgrK2kgPiBuKSByZXR1cm4o LTEpOworICAgICAgICAqczIrKyA9ICpzMSsrOworICAgIH0KKyAgICAqczIgPSBOVUw7CisgICAg cmV0dXJuKDApOworfQorI2VuZGlmIC8qIENPTU1FTlQgKi8KKworY2hhciAqCitnbWRtdHlwKCkg eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogR2V0IG1vZGVtIHR5cGUgKi8KKyNpZm5k ZWYgTk9ESUFMCisgICAgaW50IGksIHg7CisKKyAgICBkZWJ1ZyhGMTExLCJnbWRtdHlwIiwibWRt dHlwIixtZG10eXApOworICAgIGRlYnVnKEYxMTEsImdtZG10eXAiLCJtZG1zYXYiLG1kbXNhdik7 CisKKyAgICB4ID0gbWRtdHlwOworICAgIGlmICh4IDwgMCkgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIEluIGNhc2Ugb2YgbmV0d29yayBkaWFsaW5nICovCisgICAgICB4ID0gbWRtc2F2Owor ICAgIGlmICh4IDwgMSkKKyAgICAgIHJldHVybigibm9uZSIpOworICAgIGVsc2UKKyAgICAgIGZv ciAoaSA9IDA7IGkgPCBubWRtOyBpKyspCisgICAgICAgIGlmICgobWRtdGFiW2ldLmt3dmFsID09 IHgpICYmIChtZG10YWJbaV0uZmxncyA9PSAwKSkKKyAgICAgICAgICByZXR1cm4obWRtdGFiW2ld Lmt3ZCk7CisjZW5kaWYgLyogTk9ESUFMICovCisgICAgcmV0dXJuKCJub25lIik7Cit9CisKKyNp Zm5kZWYgTk9YTUlUCisjaWZuZGVmIE5PTE9DQUwKKy8qICBUIFIgQSBOIFMgTSBJIFQgIC0tICBS YXcgdXBsb2FkICAqLworCisvKiAgT2JleSBjdXJyZW50IGxpbmUsIGR1cGxleCwgcGFyaXR5LCBm bG93LCB0ZXh0L2JpbmFyeSBzZXR0aW5ncy4gKi8KKy8qICBSZXR1cm5zIDAgdXBvbiBhcHBhcmVu dCBzdWNjZXNzLCAxIG9uIG9idmlvdXMgZmFpbHVyZS4gICovCisKKy8qKioKKyBUaGluZ3MgdG8g YWRkOgorIC4gTWFrZSBib3RoIHRleHQgYW5kIGJpbmFyeSBtb2RlIG9iZXkgc2V0IGZpbGUgYnl0 ZXNpemUuCisgLiBNYXliZSBhbGxvdyB1c2VyIHRvIHNwZWNpZnkgdGVybWluYXRvcnMgb3RoZXIg dGhhbiBDUj8KKyAuIE1heWJlIGFsbG93IHVzZXIgdG8gc3BlY2lmeSBwcm9tcHRzIG90aGVyIHRo YW4gc2luZ2xlIGNoYXJhY3RlcnM/CisgLiBNYWtlIFNUQVRJU1RJQ1MgYWxzbyB3b3JrIGZvciBU UkFOU01JVC4KKyAuIElmIFRSQU5TTUlUIGlzIGRvbmUgd2l0aG91dCBlY2hvLCBtYWtlIHNvbWUg a2luZCBvZiAob3B0aW9uYWwpIGRpc3BsYXkuCisgLiBNYWtlIHRoZSBzYW1lIG9wdGltaXphdGlv biBmb3IgYmluYXJ5LW1vZGUgdHJhbnNtaXQgdGhhdCB3YXMgZG9uZSBmb3IKKyAgIHRleHQtbW9k ZSAoaW4gdGhlIG5vLWVjaG8gLyBuby1wcm9tcHQgLyBuby1wYXVzZSBjYXNlKS4KKyoqKi8KKwor LyogIFQgUiBBIE4gUyBNIEkgVCAgLS0gIFJhdyB1cGxvYWQgICovCisKKy8qICBzIGlzIHRoZSBm aWxlbmFtZSwgdCBpcyB0aGUgdHVybmFyb3VuZCAocHJvbXB0KSBjaGFyYWN0ZXIgICovCisKKy8q CisgIE1heGltdW0gbnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gYnVmZmVyLgorICBNdXN0IGJlIGxl c3MgdGhhbiBMSU5CVUZTSVoKKyovCisjaWZkZWYgT1MyCisjZGVmaW5lIFhNQlVGUyA0MDk2ICAg ICAgICAgICAgICAgICAgICAgLyogRm9yIGNvbXBhdGliaWxpdHkgd2l0aCBYWVptb2RlbSAqLwor I2Vsc2UgLyogT1MyICovCisjZGVmaW5lIFhNQlVGUyAxMDI0CisjZW5kaWYgLyogT1MyICovCisK KyNpZmRlZiBUTkNPREUKKyNpZm5kZWYgSUFDCisjZGVmaW5lIElBQyAyNTUKKyNlbmRpZiAvKiBJ QUMgKi8KKyNlbmRpZiAvKiBUTkNPREUgKi8KKworI2RlZmluZSBPVVRYQlVGU0laIDE1CitzdGF0 aWMgQ0hBUiBpbnhidWZbT1VUWEJVRlNJWisxXTsgICAgICAgLyogSG9zdC10by1zY3JlZW4gZXhw YW5zaW9uIGJ1ZmZlciAqLworc3RhdGljIGludCBpbnhjb3VudCA9IDA7ICAgICAgICAgICAgICAg IC8qIGFuZCBjb3VudCAqLworc3RhdGljIENIQVIgb3V0eGJ1ZltPVVRYQlVGU0laKzFdOyAgICAg IC8qIEtleWJvYXJkLXRvLWhvc3QgZXhwYW5zaW9uIGJ1ZiAqLworc3RhdGljIGludCBvdXR4Y291 bnQgPSAwOyAgICAgICAgICAgICAgIC8qIGFuZCBjb3VudCAqLworCisvKiAgVCBSIEEgTiBTIE0g SSBUICAtLSAgVW5ndWFyZGVkIG5vbi1wcm90b2NvbCBmaWxlIHRyYW5zbWlzc2lvbiAgKi8KKy8q CisgIENhbGwgd2l0aDoKKyAgICBjaGFyICogczogICBOYW1lIG9mIGZpbGUgdG8gdHJhbnNtaXQu CisgICAgY2hhciB0OiAgICAgVHVybmFyb3VuZCBjaGFyIGZvciB0ZXh0LW1vZGUgdHJhbnNtaXNz aW9uIChub3JtYWxseSBMRikuCisgICAgaW50IHhsYXRlOiAgbm9uemVybyA9IGNoYXJzZXQgdHJh bnNsYXRpb24gZm9yIHRleHQtbW9kZSB4ZmVyLCAwID0gc2tpcC4KKyAgICBpbnQgYmluYXJ5OiBu b256ZXJvID0gdHJhbnNtaXQgaW4gYmluYXJ5IG1vZGUsIDAgPSBpbiB0ZXh0IG1vZGUuCisqLwor I2RlZmluZSBYQkJVRlNJWiA1MDgJCQkvKiBGb3IgYmluYXJ5IGJsYXN0aW5nICovCitzdGF0aWMg Q0hBUiB4YmJ1ZltYQkJVRlNJWis0XTsKKworaW50CisjaWZkZWYgQ0tfQU5TSUMKK3RyYW5zbWl0 KGNoYXIgKiBzLCBjaGFyIHQsIGludCB4bGF0ZSwgaW50IGJpbmFyeSwgaW50IHh4ZWNobykKKyNl bHNlCit0cmFuc21pdChzLHQseGxhdGUsYmluYXJ5LHh4ZWNobykgY2hhciAqczsgY2hhciB0OyBp bnQgeGxhdGUsIGJpbmFyeSwgeHhlY2hvOworI2VuZGlmIC8qIENLX0FOU0lDICovCisvKiB0cmFu c21pdCAqLyB7CisjaWZkZWYgTUFDCisgICAgZXh0ZXJuIGNoYXIgc3N0YXRlOworICAgIGludCBj b3VudCA9IDEwMDsKKyNlbHNlCisgICAgaW50IGNvdW50ID0gMDsKKyNpZmRlZiBPUzIKKyNpZmRl ZiBOVAorICAgIFNJR1RZUCAoKiBvbGRzaWcpKGludCk7ICAgICAgICAgICAgIC8qIEZvciBzYXZp bmcgb2xkIGludGVycnVwdCB0cmFwLiAqLworI2Vsc2UgLyogTlQgKi8KKyAgICBTSUdUWVAgKCog dm9sYXRpbGUgb2xkc2lnKShpbnQpOworI2VuZGlmIC8qIE5UICovCisKKyNlbHNlIC8qIE9TMiAq LworICAgIFNJR1RZUCAoKiBvbGRzaWcpKCk7CisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyog TUFDICovCisgICAgaW50IGVvZiA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgLyogRW5kIG9m IEZpbGUgZmxhZyAqLworICAgIGludCBlb2wgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgIC8q IEVuZCBvZiBMaW5lIGZsYWcgKi8KKyAgICBpbnQgcmMgPSAxOyAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBSZXR1cm4gY29kZS4gMD1mYWlsLCAxPXN1Y2NlZWQuICovCisgICAgaW50IG15Zmxv dzsgICAgICAgICAgICAgICAgICAgICAgICAgLyogTG9jYWwgY29weSBvZiBnbG9iYWwgZmxvdy4u LiAqLworICAgIGludCBpc190biA9IDA7ICAgICAgICAgICAgICAgICAgICAgIC8qIERvIFRlbG5l dCBuZWdvdGlhdGlvbnMgKi8KKyAgICBpbnQgeGJ1ZnNpeiA9IFhNQlVGUzsgICAgICAgICAgICAg ICAvKiBTaXplIG9mIFRSQU5TTUlUIGJ1ZmZlciAqLworICAgIGludCB4LCB5LCBjLCBpOyAgICAg ICAgICAgICAgICAgICAgIC8qIEludCB3b3JrZXJzLi4uICovCisgICAgaW50IGNvbnRyb2wgPSAw OyAgICAgICAgICAgICAgICAgICAgLyogRWNobyBsb29wIGNvbnRyb2wgKi8KKyAgICBsb25nIG5i eXRlcyA9IDA7ICAgICAgICAgICAgICAgICAgICAvKiBGaWxlIGJ5dGUgY291bnQgKi8KKyAgICBs b25nIHp6OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBMb25nIHdvcmtlciAqLworICAg IGNoYXIgKnA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENoYXIgKiB3b3JrZXIgKi8K KworI2lmZGVmIFBJUEVTRU5ECisgICAgZXh0ZXJuIGludCBwaXBlc2VuZDsKKyNlbmRpZiAvKiBQ SVBFU0VORCAqLworCisjaWZuZGVmIE5PQ1NFVFMKKyAgICBpbnQgdGNzID0gVENfVFJBTlNQOyAg ICAgICAgICAgICAgICAvKiBJbnRlcm1lZGlhdGUgKHhmZXIpIGNoYXIgc2V0ICovCisgICAgaW50 IGxhbmdzdiA9IExfVVNBU0NJSTsgICAgICAgICAgICAgLyogU2F2ZSBjdXJyZW50IGxhbmd1YWdl ICovCisgICAgaW50IHVuaWNvZGUgPSAwOworICAgIGludCB0Y3NzaXplID0gMDsKKworI2lmZGVm IENLX0FOU0lDIC8qIEFOU0kgQyBwcm90b3R5cGVzLi4uICovCisgICAgQ0hBUiAoKnN4bykoQ0hB Uik7CisgICAgQ0hBUiAoKnJ4bykoQ0hBUik7CisgICAgQ0hBUiAoKnN4aSkoQ0hBUik7CisgICAg Q0hBUiAoKnJ4aSkoQ0hBUik7CisjZWxzZSAvKiBOb3QgQU5TSSBDLi4uICovCisgICAgQ0hBUiAo KnN4bykoKTsKKyAgICBDSEFSICgqcnhvKSgpOworICAgIENIQVIgKCpzeGkpKCk7CisgICAgQ0hB UiAoKnJ4aSkoKTsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworI2lmZGVmIFVOSUNPREUKKyAgICB1 bmlvbiBja19zaG9ydCB1YzsKKyAgICBpbnQgYm9tb3JkZXIgPSAwOworI2lmZGVmIENLX0FOU0lD CisgICAgZXh0ZXJuIGludCAoKnhsX3VmY1tNQVhGQ1NFVFMrMV0pKFVTSE9SVCk7ICAvKiBVbmlj b2RlIHRvIEZDUyAqLworICAgIGV4dGVybiBVU0hPUlQgKCp4bF9mY3VbTUFYRkNTRVRTKzFdKShD SEFSKTsgLyogRkNTIHRvIFVuaWNvZGUgKi8KKyAgICBleHRlcm4gaW50ICgqeHVmKShVU0hPUlQp OworICAgIGV4dGVybiBVU0hPUlQgKCp4ZnUpKENIQVIpOworI2Vsc2UKKyAgICBleHRlcm4gaW50 ICgqeGxfdWZjW01BWEZDU0VUUysxXSkoKTsKKyAgICBleHRlcm4gVVNIT1JUICgqeGxfZmN1W01B WEZDU0VUUysxXSkoKTsKKyAgICBleHRlcm4gaW50ICgqeHVmKSgpOworICAgIGV4dGVybiBVU0hP UlQgKCp4ZnUpKCk7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKyNlbmRpZiAvKiBVTklDT0RFICov CisjZW5kaWYgLyogTk9DU0VUUyAqLworCisgICAgZGVidWcoRjEwMSwieG1pdCB0IiwiIix0KTsK KyAgICBkZWJ1ZyhGMTAxLCJ4bWl0IHhsYXRlIiwiIix4bGF0ZSk7CisgICAgZGVidWcoRjEwMSwi eG1pdCBiaW5hcnkiLCIiLGJpbmFyeSk7CisKKyNpZmRlZiBQSVBFU0VORAorICAgIGlmIChwaXBl c2VuZCkgeworICAgICAgICBpZiAobm9wdXNoKSByZXR1cm4oLTIpOworICAgICAgICBpZiAoenhj bWQoWklGSUxFLHMpIDwgMSkgeworICAgICAgICAgICAgcHJpbnRmKCI/Q2FuJ3Qgc3RhcnQgY29t bWFuZDogJXNcbiIscyk7CisgICAgICAgICAgICByZXR1cm4oMCk7CisgICAgICAgIH0KKyAgICB9 IGVsc2UKKyNlbmRpZiAvKiBQSVBFU0VORCAqLworICAgIGlmICh6b3BlbmkoWklGSUxFLHMpID09 IDApIHsgICAgICAgIC8qIE9wZW4gdGhlIGZpbGUgdG8gYmUgdHJhbnNtaXR0ZWQgKi8KKyAgICAg ICAgcHJpbnRmKCI/Q2FuJ3Qgb3BlbiBmaWxlICVzXG4iLHMpOworICAgICAgICByZXR1cm4oMCk7 CisgICAgfQorICAgIHggPSAtMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE9wZW4g dGhlIGNvbW11bmljYXRpb24gY2hhbm5lbCAqLworICAgIGlmICh0dG9wZW4odHRuYW1lLCZ4LG1k bXR5cCxjZHRpbW8pIDwgMCkgeyAgLyogKG5vIGhhcm0gaWYgYWxyZWFkeSBvcGVuKSAqLworICAg ICAgICBwcmludGYoIkNhbid0IG9wZW4gZGV2aWNlICVzXG4iLHR0bmFtZSk7CisgICAgICAgIHJl dHVybigwKTsKKyAgICB9CisgICAgenogPSB4ID8gc3BlZWQgOiAtMUw7CisgICAgaWYgKGJpbmFy eSkgeyAgICAgICAgICAgICAgICAgICAgICAgLyogQmluYXJ5IGZpbGUgdHJhbnNtaXNzaW9uICov CisgICAgICAgIG15ZmxvdyA9IChmbG93ID09IEZMT19YT05YKSA/IEZMT19OT05FIDogZmxvdzsK KworICAgICAgICBpZiAodHR2dCh6eixteWZsb3cpIDwgMCkgeyAgICAgIC8qIFNvIG5vIFhvbi9Y b2ZmISAqLworICAgICAgICAgICAgcHJpbnRmKCJDYW4ndCBjb25kaXRpb24gbGluZVxuIik7Cisg ICAgICAgICAgICByZXR1cm4oMCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBp ZiAodHRwa3QoenosZmxvdyxwYXJpdHkpIDwgMCkgeyAvKiBQdXQgdGhlIGxpbmUgaW4gInBhY2tl dCBtb2RlIiAqLworICAgICAgICAgICAgcHJpbnRmKCJDYW4ndCBjb25kaXRpb24gbGluZVxuIik7 IC8qIHNvIFhvbi9Yb2ZmIHdpbGwgd29yaywgZXRjLiAqLworICAgICAgICAgICAgcmV0dXJuKDAp OworICAgICAgICB9CisgICAgfQorICAgIGlzX3RuID0KKyNpZmRlZiBUTkNPREUKKyAgICAgIChs b2NhbCAmJiBuZXR3b3JrICYmIElTX1RFTE5FVCgpKSB8fCAoIWxvY2FsICYmIHNzdGVsbmV0KQor I2Vsc2UKKyAgICAgICAgMAorI2VuZGlmIC8qIFROQ09ERSAqLworICAgICAgICAgIDsKKworI2lm bmRlZiBOT0NTRVRTCisvKiBTZXQgdXAgY2hhcmFjdGVyIHNldCB0cmFuc2xhdGlvbnMgKi8KKwor ICAgIHRjcyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICJUcmFuc2ZlciIgb3Ig Ik90aGVyIiBjaGFyc2V0ICovCisgICAgc3hvID0gcnhvID0gTlVMTDsgICAgICAgICAgICAgICAg ICAgLyogSW5pdGlhbGl6ZSBieXRlLXRvLWJ5dGUgZnVuY3Rpb25zICovCisgICAgc3hpID0gcnhp ID0gTlVMTDsKKyAgICB1bmljb2RlID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBBc3N1 bWUgVW5pY29kZSB3b24ndCBiZSBpbnZvbHZlZCAqLworICAgIGlmICghYmluYXJ5ICYmIHhsYXRl KSB7ICAgICAgICAgICAgIC8qIFNldCB1cCBjaGFyc2V0IHRyYW5zbGF0aW9ucyAqLworLyoKKyAg SW4gdGhlIFNFTkRJTkcgZGlyZWN0aW9uLCB3ZSBhcmUgY29udmVydGluZyBmcm9tIHRoZSBsb2Nh bCBmaWxlJ3MKKyAgY2hhcmFjdGVyLXNldCAoZmNoYXJzZXQpIHRvIHRoZSByZW1vdGUgdGVybWlu YWwgY2hhcnNldCAodGNzcikuICBJbiB0aGUKKyAgUkVDRUlWSU5HIGRpcmVjdGlvbiAoZWNob2lu Zykgd2UgYXJlIGNvbnZlcnRpbmcgZnJvbSB0aGUgcmVtb3RlIGVuZCBvZiB0aGUKKyAgdGVybWlu YWwgY2hhcnNldCAodGNzcikgdG8gaXRzIGxvY2FsIGVuZCAodGNzbCksIHdoaWNoIGlzIG5vdCBu ZWNlc3NhcmlseQorICB0aGUgc2FtZSBhcyB0aGUgZmlsZSBjaGFyYWN0ZXItc2V0LiAgRXNwZWNp YWxseSB3aGVuIHRoZSBmaWxlIGNoYXJhY3RlcgorICBzZXQgaXMgVUNTLTIsIHdoaWNoIGlzIG5v dCBhIHZhbGlkIHRlcm1pbmFsIGNoYXJhY3RlciBzZXQuICBUaGUgdmFyaW91cworICBjb21iaW5h dGlvbnMgYXJlIHJlcHJlc2VudGVkIGluIHRoaXMgdGFibGU6CisKKyAgRkNTID0gRmlsZSBDaGFy YWN0ZXIgU2V0CisgIFJDUyA9IFJlbW90ZSBUZXJtaW5hbCBDaGFyYWN0ZXIgU2V0CisgIENDUyA9 IENvbnNvbGUgKExvY2FsIFRlcm1pbmFsKSBDaGFyYWN0ZXIgU2V0CisKKyAgIDggICA0ICAgMiAg IDEKKyAgRkNTIEZDUyBSQ1MgQ0NTCisgIFVDUyBVVEYgVVRGIFVURgorICAgMCAgIDAgICAwICAg MCAgID0gICAwICAgPSAgIE5vIHRyYW5zbGF0aW9uCisgICAwICAgMCAgIDAgICAxICAgPSAgIDEg ICA9ICAgRkNTIC0+IFJDUywgRWNobyBSQ1MgLT4gVVRGCisgICAwICAgMCAgIDEgICAwICAgPSAg IDIgICA9ICAgRkNTIC0+IFVURiwgRWNobyBVVEYgLT4gQ0NTCisgICAwICAgMCAgIDEgICAxICAg PSAgIDMgICA9ICAgRkNTIC0+IFVURiwgRWNobyBubyB0cmFuc2xhdGlvbgorCisgICAwICAgMSAg IDAgICAwICAgPSAgIDQgICA9ICAgVVRGIC0+IFJDUywgRWNobyBSQ1MgLT4gQ0NTCisgICAwICAg MSAgIDAgICAxICAgPSAgIDUgICA9ICAgVVRGIC0+IFJDUywgRWNobyBSQ1MgLT4gVVRGCisgICAw ICAgMSAgIDEgICAwICAgPSAgIDYgICA9ICAgVVRGIC0+IFVURiwgRWNobyBVVEYgLT4gQ0NTCisg ICAwICAgMSAgIDEgICAxICAgPSAgIDcgICA9ICAgTm8gdHJhbnNsYXRpb24KKworICAgMSAgIDAg ICAwICAgMCAgID0gICA4ICAgPSAgIFVDUyAtPiBSQ1MsIEVjaG8gUkNTIC0+IENDUworICAgMSAg IDAgICAwICAgMSAgID0gICA5ICAgPSAgIFVDUyAtPiBSQ1MsIEVjaG8gUkNTIC0+IFVURgorICAg MSAgIDAgICAxICAgMCAgID0gIDEwICAgPSAgIFVDUyAtPiBVVEYsIEVjaG8gVVRGIC0+IENDUwor ICAgMSAgIDAgICAxICAgMSAgID0gIDExICAgPSAgIFVDUyAtPiBVVEYsIEVjaG8gbm8gdHJhbnNs YXRpb24KKyovCisjaWZkZWYgVU5JQ09ERQorICAgICAgICB4ZnUgPSBOVUxMOyAgICAgICAgICAg ICAgICAgICAgIC8qIFVuaWNvZGUgdHJhbnNsYXRpb24gZnVuY3Rpb25zICovCisgICAgICAgIHh1 ZiA9IE5VTEw7CisgICAgICAgIGJvbW9yZGVyID0gdWNzb3JkZXI7ICAgICAgICAgICAgLyogVUNT LTIgYnl0ZSBvcmRlciAqLworCisgICAgICAgIGlmIChmY2hhcnNldCA9PSBGQ19VQ1MyKSAgICAg ICAgLyogRmlsZSBjaGFyc2V0IGlzIFVDUy0yICovCisgICAgICAgICAgdW5pY29kZSB8PSA4Owor ICAgICAgICBlbHNlIGlmIChmY2hhcnNldCA9PSBGQ19VVEY4KSAgIC8qIEZpbGUgY2hhcnNldCBp cyBVVEYtOCAqLworICAgICAgICAgIHVuaWNvZGUgfD0gNDsKKyAgICAgICAgaWYgKHRjc3IgPT0g RkNfVVRGOCkgICAgICAgICAgICAvKiBSZW1vdGUgdGVybSBjaGFyc2V0IGlzIFVURi04ICovCisg ICAgICAgICAgdW5pY29kZSB8PSAyOworICAgICAgICBpZiAodGNzbCA9PSBGQ19VVEY4KSAgICAg ICAgICAgIC8qIExvY2FsIHRlcm0gY2hhcnNldCBpcyBVVEYtOCAqLworICAgICAgICAgIHVuaWNv ZGUgfD0gMTsKKyNlbmRpZiAvKiBVTklDT0RFICovCisvKgorICBXaGVuIFVuaWNvZGUgbm90IGlu dm9sdmVkIC0tIFRDUyBpcyB0aGUgaW50ZXJtZWRpYXRlICh4ZmVyKSBzZXQsIGFuZDoKKyAgc3hv ID0gRmlsZS10by1JbnRlcm1lZGlhdGUgY2hhcnNldCBmdW5jdGlvbgorICByeG8gPSBJbnRlcm1l ZGlhdGUtdG8tUmVtb3RlLVRlcm1pbmFsIGNoYXJzZXQgZnVuY3Rpb24KKyAgc3hpID0gUmVtb3Rl LVRlcm1pbmFsLXRvLUludGVybWVkaWF0ZQorICByeGkgPSBJbnRlcm1lZGlhdGUtdG8tTG9jYWwt VGVybWluYWwKKyovCisgICAgICAgIHRjcyA9IGdldHRjcyh0Y3NyLGZjaGFyc2V0KTsgICAgLyog R2V0IGludGVybWVkaWF0ZSBzZXQuICovCisgICAgICAgIHN4byA9IHhsc1t0Y3NdW2ZjaGFyc2V0 XTsgICAgICAgLyogdHJhbnNsYXRpb24gZnVuY3Rpb24gKi8KKyAgICAgICAgcnhvID0geGxyW3Rj c11bdGNzcl07ICAgICAgICAgICAvKiBwb2ludGVycyBmb3Igb3V0cHV0IGZ1bmN0aW9ucyAqLwor ICAgICAgICBzeGkgPSB4bHNbdGNzXVt0Y3NyXTsgICAgICAgICAgIC8qIGFuZCBmb3IgaW5wdXQg ZnVuY3Rpb25zLiAqLworICAgICAgICByeGkgPSB4bHJbdGNzXVt0Y3NsXTsKKy8qCisgIEF0IHRo aXMgcG9pbnQgd2UgaGF2ZSB1bmljb2RlIG5vbnplcm8gaWYgVW5pY29kZSBpcyBpbnZvbHZlZCBp biB0aGUKKyAgY29udmVyc2lvbiwgYW5kIHRvIDAgaWYgaXQgaXMgbm90LgorICBUaGUgZm9sbG93 aW5nIGlzIHRvIHByZXZlbnQgdXNlIG9mIHptc3R1ZmYoKSBhbmQgemRzdHVmZigpIGJ5IHRyYW5z bGF0aW9uCisgIGZ1bmN0aW9ucyAoc3R1ZmZpbmcgd29ya3Mgd2l0aCBmaWxlIGkvbywgbm90IHdp dGggY29tbXVuaWNhdGlvbiBpL28pLgorKi8KKyAgICAgICAgbGFuZ3N2ID0gbGFuZ3VhZ2U7ICAg ICAgICAgICAgICAvKiBTYXZlIGN1cnJlbnQgU0VUIExBTkdVQUdFICovCisgICAgICAgIGxhbmd1 YWdlID0gTF9VU0FTQ0lJOyAgICAgICAgICAgLyogTm8gbGFuZ3VhZ2Utc3BlY2lmaWMgdHJhbnNs YXRpb25zICovCisgICAgfQorI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKworICAgIGkgPSAwOyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEJlZ2lubmluZyBvZiBidWZmZXIuICovCisjaWZu ZGVmIE1BQworI2lmbmRlZiBBTUlHQQorICAgIG9sZHNpZyA9IHNpZ25hbChTSUdJTlQsIHRydHJh cCk7ICAgIC8qIFNhdmUgY3VycmVudCBpbnRlcnJ1cHQgdHJhcC4gKi8KKyNlbmRpZiAvKiBBTUlH QSAqLworI2VuZGlmIC8qIE1BQyAqLworICAgIHRyX2ludCA9IDA7ICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIEhhdmUgbm90IGJlZW4gaW50ZXJydXB0ZWQgKHlldCkuICovCisgICAgcmMgPSAx OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmV0dXJuIGNvZGUgcHJlc3VtZWQgZ29v ZC4gKi8KKyNpZmRlZiBWTVMKKyAgICBjb25yZXMoKTsKKyNlbmRpZiAvKiBWTVMgKi8KKworI2lm bmRlZiBOT0NTRVRTCisgICAgZGVidWcoRjEwMSwiWE1JVCB1bmljb2RlIiwiIix1bmljb2RlKTsK KyNpZmRlZiBVTklDT0RFCisgICAgZGVidWcoRjEwMSwiWE1JVCBib21vcmRlciIsIiIsYm9tb3Jk ZXIpOworI2VuZGlmIC8qIFVOSUNPREUgKi8KKyNlbmRpZiAvKiBOT0NTRVRTICovCisKKyAgICBj ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJbml0aWFsIGNvbmRpdGlvbiAq LworICAgIHdoaWxlIChjID4gLTEgJiYgIWVvZikgeyAgICAgICAgICAgIC8qIExvb3AgZm9yIGFs bCBjaGFyYWN0ZXJzIGluIGZpbGUgKi8KKyAgICAgICAgZW9sID0gMDsKKyNpZmRlZiBNQUMKKyAg ICAgICAgLyoKKyAgICAgICAgICogSXQgaXMgZXhwZW5zaXZlIHRvIHJ1biB0aGUgbWluaXBhcnNl ciBzbyBkb24ndCBkbyBpdCBmb3IKKyAgICAgICAgICogZXZlcnkgY2hhcmFjdGVyLgorICAgICAg ICAgKi8KKyAgICAgICAgaWYgKC0tY291bnQgPCAwKSB7CisgICAgICAgICAgICBjb3VudCA9IDEw MDsKKyAgICAgICAgICAgIG1pbmlwYXJzZXIoMSk7CisgICAgICAgICAgICBpZiAoc3N0YXRlID09 ICdhJykgeworICAgICAgICAgICAgICAgIHNzdGF0ZSA9ICdcMCc7CisgICAgICAgICAgICAgICAg Z290byB4bWl0ZmFpbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorI2Vsc2UgLyogTm90IE1B QyAqLworICAgICAgICBpZiAodHJfaW50KSB7ICAgICAgICAgICAgICAgICAgIC8qIEludGVycnVw dGVkPyAqLworICAgICAgICAgICAgcHJpbnRmKCJeQy4uLlxuIik7ICAgICAgICAgIC8qIFByaW50 IG1lc3NhZ2UgKi8KKyAgICAgICAgICAgIGdvdG8geG1pdGZhaWw7CisgICAgICAgIH0KKyNlbmRp ZiAvKiBNQUMgKi8KKyAgICAgICAgYyA9IHptaW5jaGFyKCk7ICAgICAgICAgICAgICAgICAvKiBH ZXQgYSBmaWxlIGNoYXJhY3RlciAqLworI2lmZGVmIENPTU1FTlQKKy8qIHRvbyBtdWNoICovCisj aWZkZWYgREVCVUcKKyAgICAgICAgaWYgKGRlYmxvZykgeworICAgICAgICAgICAgaWYgKGMgPCAw KQorICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJYTUlUIHptaW5jaGFyIiwiIixjKTsKKyAgICAg ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgZGVidWcoRjAwMCwiWE1JVCB6bWluY2hhciIsIiIs Yyk7CisgICAgICAgIH0KKyNlbmRpZiAvKiBERUJVRyAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8K KyAgICAgICAgaWYgKGMgPCAtMSkgeyAgICAgICAgICAgICAgICAgICAvKiBPdGhlciBlcnJvciAq LworICAgICAgICAgICAgcHJpbnRmKCI/VFJBTlNNSVQgZmlsZSByZWFkIGVycm9yOiAlc1xuIixj a19lcnJzdHIoKSk7CisgICAgICAgICAgICBnb3RvIHhtaXRmYWlsOworICAgICAgICB9IGVsc2Ug aWYgKGMgPiAtMSkgeworICAgICAgICAgICAgbmJ5dGVzKys7CisgICAgICAgICAgICBjICY9IGZt YXNrOyAgICAgICAgICAgICAgICAgLyogQXBwbHkgU0VUIEZJTEUgQllURVNJWkUgbWFzayAqLwor ICAgICAgICB9IGVsc2UgaWYgKGMgPT0gLTEpIHsKKyAgICAgICAgICAgIGVvZiA9IDE7CisgICAg ICAgICAgICBkZWJ1ZyhGMTAxLCJYTUlUIGVvZiIsIiIsZW9mKTsKKyAgICAgICAgfQorICAgICAg ICBpZiAoYmluYXJ5KSB7ICAgICAgICAgICAgICAgICAgIC8qIEJpbmFyeS4uLiAqLworICAgICAg ICAgICAgaWYgKGMgPT0gLTEpIHsgICAgICAgICAgICAgIC8qIElmIEVPRiAqLworICAgICAgICAg ICAgICAgIHJjID0gMTsgICAgICAgICAgICAgICAgIC8qIFN1Y2Nlc3MgKi8KKyAgICAgICAgICAg ICAgICBlb2YgPSAxOworICAgICAgICAgICAgICAgIGdvdG8geG1pdGV4aXQ7ICAgICAgICAgIC8q IERvbmUgKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgheG1pdHcgJiYgIXh4ZWNo bykgeyAgICAvKiBTcGVjaWFsICJibGFzdCIgbW9kZSAqLworICAgICAgICAgICAgICAgIGlmIChj b3VudCA9PSBYQkJVRlNJWikgeyAvKiBGaWxlIGlucHV0IGJ1ZmZlciBmdWxsLi4uICovCisgICAg ICAgICAgICAgICAgICAgIHdoaWxlIChjb3VudCA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAg ICAgIGVycm5vID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHkgPSB0dG9sKHhiYnVmLGNv dW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5IDwgMCkgeyAgICAvKiB0cnkgdG8g c2VuZCBpdC4gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIj9UUkFOU01J VCBvdXRwdXQgZXJyb3I6ICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBja19lcnJzdHIoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoRjExMSwi WE1JVCBiaW5hcnkgdHRvbCBlcnJvciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY2tfZXJyc3RyKCksZXJybm8pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJjID0g MDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5IDwgMCkgYnJlYWs7CisgICAg ICAgICAgICAgICAgICAgICAgICBjb3VudCAtPSB5OworICAgICAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgICAgICAgIGNvdW50ID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgICAgeGJidWZbY291bnQrK10gPSBjOworI2lmZGVmIFROQ09ERQorICAgICAgICAgICAg ICAgIGlmIChjID09IElBQyAmJiBpc190bikgIC8qIFRlbG5ldCBJQUMgKi8KKyAgICAgICAgICAg ICAgICAgIHhiYnVmW2NvdW50KytdID0gSUFDOyAvKiBtdXN0IGJlIGRvdWJsZWQgKi8KKyNlbmRp ZiAvKiBUTkNPREUgKi8KKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0K KyAgICAgICAgICAgIGlmICh0dG9jKGRvcGFyKChjaGFyKSBjKSkgPCAwKSB7IC8qIGVsc2UganVz dCBzZW5kIHRoZSBjaGFyICovCisgICAgICAgICAgICAgICAgcHJpbnRmKCI/Q2FuJ3QgdHJhbnNt aXQgY2hhcmFjdGVyXG4iKTsKKyAgICAgICAgICAgICAgICBnb3RvIHhtaXRmYWlsOworICAgICAg ICAgICAgfQorI2lmZGVmIFROQ09ERQorICAgICAgICAgICAgaWYgKGMgPT0gSUFDICYmIGlzX3Ru KSAgICAgIC8qIFF1b3RlIFRlbG5ldCBJQUMgKi8KKyAgICAgICAgICAgICAgdHRvYygoY2hhcilJ QUMpOworI2VuZGlmIC8qIFROQ09ERSAqLworCisgICAgICAgICAgICBpZiAoeG1pdHcpICAgICAg ICAgICAgICAgICAgLyogUGF1c2UgaWYgcmVxdWVzdGVkICovCisgICAgICAgICAgICAgIG1zbGVl cCh4bWl0dyk7CisKKyAgICAgICAgICAgIGlmICh4eGVjaG8pIHsgICAgICAgICAgICAgICAvKiBT RVQgVFJBTlNNSVQgRUNITyBPTj8gKi8KKyAgICAgICAgICAgICAgICBpZiAoZHVwbGV4KSB7ICAg ICAgICAgICAvKiBZZXMsIGZvciBoYWxmIGR1cGxleCAqLworI2lmbmRlZiBOT0xPQ0FMCisjaWZk ZWYgT1MyCisgICAgICAgICAgICAgICAgICAgIC8qIEVjaG8gdG8gZW11bGF0b3IgKi8KKyAgICAg ICAgICAgICAgICAgICAgc2NyaXB0d3J0YnVmKChVU0hPUlQpKGMgJiBjbWRtc2spKTsKKyNlbmRp ZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBOT0xPQ0FMICovCisgICAgICAgICAgICAgICAgICAgIGlm IChjb25vYygoY2hhcikoYyAmIGNtZG1zaykpIDwgMCkgLyogZWNobyBsb2NhbGx5LiAqLworICAg ICAgICAgICAgICAgICAgICAgIGdvdG8geG1pdGZhaWw7CisgICAgICAgICAgICAgICAgfSBlbHNl IHsgICAgICAgICAgICAgICAgLyogRm9yIGZ1bGwgZHVwbGV4LCAqLworICAgICAgICAgICAgICAg ICAgICBpbnQgaSwgbjsgICAgICAgICAgIC8qIGRpc3BsYXkgd2hhdGV2ZXIgaXMgdGhlcmUuICov CisgICAgICAgICAgICAgICAgICAgIG4gPSB0dGNoaygpOyAgICAgICAgLyogU2VlIGhvdyBtYW55 IGNoYXJzIGFyZSB3YWl0aW5nICovCisgICAgICAgICAgICAgICAgICAgIGlmIChuIDwgMCkgeyAg ICAgICAgLyogQ29ubmVjdGlvbiBkcm9wcGVkPyAqLworICAgICAgICAgICAgICAgICAgICAgICAg cHJpbnRmKCI/Q29ubmVjdGlvbiBsb3N0XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdv dG8geG1pdGZhaWw7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg Zm9yIChpID0gMDsgaSA8IG47IGkrKykgeyAvKiBSZWFkIGFuZCBlY2hvIHRoYXQgbWFueS4gKi8K KyAgICAgICAgICAgICAgICAgICAgICAgIHggPSB0dGluYyh4bWl0dCk7IC8qIFRpbWVkIHJlYWQg anVzdCBpbiBjYXNlLiAqLworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHggPiAtMSkgeyAg IC8qIElmIG5vIHRpbWVvdXQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFy aXR5KSB4ICY9IDB4N2Y7IC8qIGRpc3BsYXkgdGhlIGNoYXIsICovCisjaWZuZGVmIE5PTE9DQUwK KyNpZmRlZiBPUzIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFY2hvIHRvIGVtdWxh dG9yICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0d3J0YnVmKChVU0hPUlQp eCk7CisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogTk9MT0NBTCAqLworICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGlmIChjb25vYygoY2hhcikoeCAmIGNtZG1zaykpIDwgMCkgeworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIj9PdXRwdXQgZXJyb3JcbiIpOwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHhtaXRmYWlsOworICAgICAgICAg ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo eCA9PSAtMikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiQ29ubmVjdGlv biBjbG9zZWQuXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dGNsb3MoMSk7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byB4bWl0ZmFpbDsKKyAgICAgICAgICAgICAg ICAgICAgICAgIH0gZWxzZSBpZiAoeCA9PSAtMykgeworICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHByaW50ZigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU2Vzc2lvbiBMaW1pdCBl eGNlZWRlZCAtIGNsb3NpbmcgY29ubmVjdGlvbi5cbiIKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dGNsb3MoMSk7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byB4bWl0ZmFpbDsKKyAgICAgICAgICAgICAg ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/ Q29tbXVuaWNhdGlvbnMgZXJyb3JcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdv dG8geG1pdGZhaWw7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgdHRmbHVpKCk7ICAg ICAgICAgICAgLyogTm90IGVjaG9pbmcsIGp1c3QgZmx1c2ggaW5wdXQuICovCisKKyAgICAgICAg fSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBUZXh0IG1vZGUsIGxpbmUgYXQgYSB0 aW1lLiAqLworI2lmZGVmIFVOSUNPREUKKyAgICAgICAgICAgIGlmIChmY2hhcnNldCA9PSBGQ19V Q1MyICYmIHhsYXRlKSB7IC8qIFNwZWNpYWwgZm9yIFVDUy0yICovCisgICAgICAgICAgICAgICAg Y2hhciB4YnVmWzhdOworICAgICAgICAgICAgICAgIHggPSAxIC0gKG5ieXRlcyAmIDEpOyAgIC8q IE9kZCBvciBldmVuIGJ5dGUgKi8KKyAgICAgICAgICAgICAgICBpZiAoeCA9PSAwKSAgICAgICAg ICAgICAvKiBOb3RlOiAxID0gdGhlIDFzdCwgMCA9IDJuZCwgZXRjICovCisgICAgICAgICAgICAg ICAgICB1Yy54X3Nob3J0ID0gMDsKKyAgICAgICAgICAgICAgICBpZiAoYm9tb3JkZXIpICAgICAg ICAgICAvKiBMaXR0bGUgRW5kaWFuICovCisgICAgICAgICAgICAgICAgICB4ID0gMSAtIHg7ICAg ICAgICAgICAgLyogU2F2ZSBieXRlIGluIGFwcHJvcHJpYXRlIGhhbGYgKi8KKyAgICAgICAgICAg ICAgICBkZWJ1ZyhGMTAxLCJYTUlUIFVDUzIgeCIsIiIseCk7CisgICAgICAgICAgICAgICAgdWMu eF9jaGFyW3hdID0gKENIQVIpIChjICYgMHhmZik7CisgICAgICAgICAgICAgICAgaWYgKG5ieXRl cyAmIDEpICAgICAgICAgLyogRmlyc3QgYnl0ZSwgZ28gYmFjayBmb3IgbmV4dCAqLworICAgICAg ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgaWYgKG5ieXRlcyA9PSAyKSB7 ICAgICAgLyogVUNTLTIgQnl0ZSBPcmRlciBNYXJrICovCisgICAgICAgICAgICAgICAgICAgIGlm ICh1Yy54X3Nob3J0ID09IChVU0hPUlQpIDB4ZmVmZikgeworICAgICAgICAgICAgICAgICAgICAg ICAgZGVidWcoRjEwMCwiWE1JVCBVQ1MyIEJPTSBGRUZGIiwiIixib21vcmRlcik7CisgICAgICAg ICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlm ICh1Yy54X3Nob3J0ID09IChVU0hPUlQpIDB4ZmZmZSkgeworICAgICAgICAgICAgICAgICAgICAg ICAgYm9tb3JkZXIgPSAxIC0gYm9tb3JkZXI7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1 ZyhGMTAwLCJYTUlUIFVDUzIgQk9NIEZGRkUgKHN3YXApIiwiIixib21vcmRlcik7CisgICAgICAg ICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzcHJpbnRmKHhidWYsIiUwNFgiLHVjLnhfc2hv cnQpOyAvKiBTQUZFICovCisgICAgICAgICAgICAgICAgZGVidWcoRjExMSwiWE1JVCBVQ1MyIix4 YnVmLHVjLnhfc2hvcnQpOworICAgICAgICAgICAgICAgIGlmIChuYnl0ZXMgJiAxKSAgICAgICAg IC8qIFNwZWNpYWwgZW9sIHRlc3QgZm9yIFVDUy0yICovCisgICAgICAgICAgICAgICAgICBpZiAo dWMueF9zaG9ydCA9PSAnXG4nKQorICAgICAgICAgICAgICAgICAgICBlb2wgPSAxOworI2lmZGVm IENPTU1FTlQKKyAgICAgICAgICAgICAgICBpZiAodWMueF9zaG9ydCA9PSAweDIwMjggfHwgdWMu eF9zaG9ydCA9PSAweDIwMjkpCisgICAgICAgICAgICAgICAgICAgIGVvbCA9IDE7CisjZW5kaWYg LyogQ09NTUVOVCAqLworICAgICAgICAgICAgfSBlbHNlCisjZW5kaWYgLyogVU5JQ09ERSAqLwor ICAgICAgICAgICAgICBpZiAoYyA9PSAnXG4nKSB7ICAgICAgICAgIC8qIE5vcm1hbCBlb2wgdGVz dCBvdGhlcndpc2UgKi8KKyAgICAgICAgICAgICAgICAgIGVvbCA9IDE7CisgICAgICAgICAgICB9 CisgICAgICAgICAgICBpZiAoZW9sKSB7ICAgICAgICAgICAgICAgICAgLyogRW5kIG9mIGxpbmU/ ICovCisgICAgICAgICAgICAgICAgaW50IHN0dWZmID0gLTE7CisgICAgICAgICAgICAgICAgZGVi dWcoRjEwMSwiWE1JVCBlb2wgbGVuZ3RoIiwiIixpKTsKKyAgICAgICAgICAgICAgICBpZiAoaSA9 PSAwKSB7ICAgICAgICAgICAvKiBCbGFuayBsaW5lPyAqLworICAgICAgICAgICAgICAgICAgICBp ZiAoeG1pdGYpICAgICAgICAgIC8qIFllcywgaW5zZXJ0IGZpbGwgaWYgYXNrZWQuICovCisgICAg ICAgICAgICAgICAgICAgICAgbGluZVtpKytdID0gZG9wYXIoKGNoYXIpIHhtaXRmKTsKKyAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGkgPT0gMCB8fCAoKGNoYXIpIGxpbmVb aS0xXSkgIT0gKChjaGFyKSBkb3BhcihDUikpKQorICAgICAgICAgICAgICAgICAgbGluZVtpKytd ID0gZG9wYXIoQ1IpOyAvKiBUZXJtaW5hdGUgaXQgd2l0aCBDUiAqLworICAgICAgICAgICAgICAg IGlmICh4bWl0bCkgeworICAgICAgICAgICAgICAgICAgICBzdHVmZiA9IExGOworI2lmZGVmIFRO Q09ERQorICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNfdG4gJiYgKHRuX25sbSAhPSBUTkxf Q1IpKSB7CisgICAgICAgICAgICAgICAgICAgIC8qIFRFTE5FVCBORVdMSU5FIE9OL09GRi9SQVcg Ki8KKyAgICAgICAgICAgICAgICAgICAgc3R1ZmYgPSAodG5fbmxtID09IFROTF9DUkxGKSA/IExG IDogTlVMOworI2VuZGlmIC8qIFROQ09ERSAqLworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgICAgICBpZiAoc3R1ZmYgPiAtMSkKKyAgICAgICAgICAgICAgICAgIGxpbmVbaSsrXSA9IGRv cGFyKChjaGFyKXN0dWZmKTsKKyAgICAgICAgICAgICAgICBsaW5lW2ldID0gTlVMOworICAgICAg ICAgICAgICAgIGRlYnVnKEYxMTEsIlhNSVQgZW9sIGxpbmUiLGxpbmUsaSk7CisKKyAgICAgICAg ICAgIH0gZWxzZSBpZiAoYyAhPSAtMSkgeyAgICAgICAvKiBOb3QgYSBuZXdsaW5lLCByZWd1bGFy IGNoYXJhY3RlciAqLworICAgICAgICAgICAgICAgIGludCBrLCB4OworICAgICAgICAgICAgICAg IG91dHhidWZbMF0gPSBjOyAgICAgICAgIC8qIEluIGNhc2Ugb2Ygbm8gdHJhbnNsYXRpb24gKi8K KyAgICAgICAgICAgICAgICBvdXR4Y291bnQgPSAxOyAgICAgICAgICAvKiBBc3N1bWUgcmVzdWx0 IGlzIG9uZSBieXRlICovCisjaWZuZGVmIE5PQ1NFVFMKKyAgICAgICAgICAgICAgICBzd2l0Y2gg KHVuaWNvZGUpIHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgMDogICAgICAgICAgICAgICAvKiBO byBVbmljb2RlIGludm9sdmVkICovCisgICAgICAgICAgICAgICAgICBjYXNlIDE6CisgICAgICAg ICAgICAgICAgICAgIGlmICh4bGF0ZSkgeyAgICAgICAgLyogSWYgbm90IC9UUkFOU1BBUkVOVCAq LworICAgICAgICAgICAgICAgICAgICAgICAgLyogTG9jYWwtdG8taW50ZXJtZWRpYXRlICovCisg ICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3hvKSBjID0gKCpzeG8pKChjaGFyKWMpOworICAg ICAgICAgICAgICAgICAgICAgICAgLyogSW50ZXJtZWRpYXRlLXRvLXJlbW90ZSAqLworICAgICAg ICAgICAgICAgICAgICAgICAgaWYgKHJ4bykgYyA9ICgqcnhvKSgoY2hhciljKTsKKyAgICAgICAg ICAgICAgICAgICAgICAgIG91dHhidWZbMF0gPSBjOworICAgICAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgICAgICAgIGJyZWFrOworI2lmZGVmIFVOSUNPREUKKyAgICAgICAgICAgICAg ICAgIGNhc2UgMjogICAgICAgICAgICAgICAvKiBMb2NhbCBieXRlIHRvIFVURi04ICovCisgICAg ICAgICAgICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgICAgICAgIHhmdSA9IHhsX2ZjdVtm Y2hhcnNldF07CisgICAgICAgICAgICAgICAgICAgIHRjc3NpemUgPSBmY3NpbmZvW2ZjaGFyc2V0 XS5zaXplOworICAgICAgICAgICAgICAgICAgICBvdXR4Y291bnQgPQorICAgICAgICAgICAgICAg ICAgICAgIGJfdG9fdSgoQ0hBUiljLG91dHhidWYsT1VUWEJVRlNJWix0Y3NzaXplKTsKKyAgICAg ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIDQ6ICAgICAgICAg ICAgICAgLyogTG9jYWwgVVRGLTggdG8gcmVtb3RlIGJ5dGUgKi8KKyAgICAgICAgICAgICAgICAg IGNhc2UgNToKKyAgICAgICAgICAgICAgICAgICAgeHVmID0geGxfdWZjW3Rjc3JdOworICAgICAg ICAgICAgICAgICAgICB4ID0gdV90b19iKChDSEFSKWMpOyAvKiBDb252ZXJ0IHRvIGJ5dGUgKi8K KyAgICAgICAgICAgICAgICAgICAgaWYgKHggPT0gLTEpIHsgICAgICAvKiBJZiBtb3JlIGlucHV0 IGJ5dGVzIG5lZWRlZCAqLworICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7ICAgICAg IC8qIGdvIGJhY2sgYW5kIGdldCB0aGVtICovCisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBp ZiAoeCA9PSAtMikgeyAvKiBMUyBvciBQUyAoc2hvdWxkbid0IGhhcHBlbikgKi8KKyAgICAgICAg ICAgICAgICAgICAgICAgIG91dHhidWZbMF0gPSBDUjsKKyAgICAgICAgICAgICAgICAgICAgfSBl bHNlIGlmICh4ID09IC05KSB7IC8qIFVURi04IGVycm9yICovCisgICAgICAgICAgICAgICAgICAg ICAgICBvdXR4YnVmWzBdID0gJz8nOyAvKiBJbnNlcnQgZXJyb3IgY2hhciAqLworICAgICAgICAg ICAgICAgICAgICAgICAgb3V0eGJ1ZlsxXSA9IHVfdG9fYjIoKTsgLyogSW5zZXJ0IG5leHQgY2hh ciAqLworICAgICAgICAgICAgICAgICAgICAgICAgb3V0eGNvdW50ID0gMjsKKyAgICAgICAgICAg ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dHhidWZbMF0gPSAg ICAvKiBPdGhlcndpc2Ugc3RvcmUgcmVzdWx0ICovCisgICAgICAgICAgICAgICAgICAgICAgICAg ICh1bnNpZ25lZCkoeCAmIDB4ZmYpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSA2OiAgICAgICAgICAgICAg IC8qIFVURi04IHRvIFVURi04ICovCisgICAgICAgICAgICAgICAgICBjYXNlIDc6CisgICAgICAg ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSA4OiAgICAgICAgICAg ICAgIC8qIFVDUy0yIHRvIGJ5dGUgKi8KKyAgICAgICAgICAgICAgICAgIGNhc2UgOToKKyAgICAg ICAgICAgICAgICAgICAgeHVmID0geGxfdWZjW3Rjc3JdOworICAgICAgICAgICAgICAgICAgICBv dXR4YnVmWzBdID0gKCp4dWYpKHVjLnhfc2hvcnQpOworICAgICAgICAgICAgICAgICAgICBicmVh azsKKyAgICAgICAgICAgICAgICAgIGNhc2UgMTA6CisgICAgICAgICAgICAgICAgICBjYXNlIDEx OiB7ICAgICAgICAgICAgLyogVUNTLTIgdG8gVVRGLTggKi8KKyAgICAgICAgICAgICAgICAgICAg ICBpbnQgajsKKyAgICAgICAgICAgICAgICAgICAgICBDSEFSICogYnVmID0gTlVMTDsKKyAgICAg ICAgICAgICAgICAgICAgICB4ID0gdWNzMl90b191dGY4KHVjLnhfc2hvcnQsJmJ1Zik7CisgICAg ICAgICAgICAgICAgICAgICAgaWYgKHggPCAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg IG91dHhidWZbMF0gPSAweGZmOyAvKiAoPSBVK0ZGRkQpICovCisgICAgICAgICAgICAgICAgICAg ICAgICAgIG91dHhidWZbMV0gPSAweGJkOworICAgICAgICAgICAgICAgICAgICAgICAgICB4ID0g MjsKKyAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgZm9yIChq ID0gMDsgaiA8IHg7IGorKykKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dHhidWZbal0gPSBi dWZbal07CisgICAgICAgICAgICAgICAgICAgICAgb3V0eGNvdW50ID0geDsKKyAgICAgICAgICAg ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBVTklDT0RF ICovCisgICAgICAgICAgICAgICAgfQorI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKyAgICAgICAgICAg ICAgICBvdXR4YnVmW291dHhjb3VudF0gPSBOVUw7CisgICAgICAgICAgICAgICAgZGVidWcoRjEx MSwiWE1JVCBvdXR4YnVmIixvdXR4YnVmLG91dHhjb3VudCk7CisvKgorICBOb3cgdGhlIGlucHV0 IGNoYXJhY3RlciAoMSBvciBtb3JlIGJ5dGVzKSBpcyB0cmFuc2xhdGVkIGludG8gdGhlIG91dHB1 dAorICBleHBhbnNpb24gYnVmZmVyICgxIG9yIG1vcmUgYnl0ZXMpOyBvdXR4Y291bnQgPSBudW1i ZXIgb2YgYnl0ZXMgdG8gYWRkIHRvCisgIHRoZSBUUkFOU01JVCBsaW5lIGJ1ZmZlciwgd2hpY2gg d2UgZG8gaGVyZSwgdGFraW5nIGNhcmUgb2YgcGFyaXR5LCBTSS9TTworICBwcm9jZXNzaW5nLCBh bmQgcXVvdGluZyBUZWxuZXQgSUFDcy4KKyovCisgICAgICAgICAgICAgICAgZm9yIChrID0gMDsg ayA8IG91dHhjb3VudDsgaysrKSB7CisgICAgICAgICAgICAgICAgICAgIGMgPSBvdXR4YnVmW2td OworICAgICAgICAgICAgICAgICAgICBpZiAoeG1pdHMgJiYgcGFyaXR5ICYmIChjICYgMDIwMCkp IHsgLyogSWYgc2hpZnRpbmcgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVbaSsrXSA9 IGRvcGFyKFNPKTsgLyogbmVlZHMgdG8gYmUgZG9uZSwgKi8KKyAgICAgICAgICAgICAgICAgICAg ICAgIGxpbmVbaSsrXSA9IGRvcGFyKChjaGFyKWMpOyAvKiBkbyBpdCBoZXJlLCAqLworICAgICAg ICAgICAgICAgICAgICAgICAgbGluZVtpKytdID0gZG9wYXIoU0kpOyAvKiBjcnVkZWx5LiAqLwor ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgbGlu ZVtpKytdID0gZG9wYXIoKGNoYXIpYyk7CisjaWZkZWYgVE5DT0RFCisgICAgICAgICAgICAgICAg ICAgICAgICBpZiAoYyA9PSAoQ0hBUilJQUMgJiYgaXNfdG4pCisgICAgICAgICAgICAgICAgICAg ICAgICAgIGxpbmVbaSsrXSA9IChDSEFSKUlBQzsKKyNlbmRpZiAvKiBUTkNPREUgKi8KKyAgICAg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKy8qCisg IFNlbmQgY2hhcmFjdGVycyBpZiBidWZmZXIgZnVsbCwgb3IgYXQgZW5kIG9mIGxpbmUsIG9yIGF0 IGVuZCBvZiBmaWxlLgorICAoRW5kIG9mIGxpbmUgb25seSBpZiBlY2hvaW5nLCB3YWl0aW5nIGZv ciBhIHByb21wdCwgb3IgcGF1c2luZy4pCisqLworICAgICAgICAgICAgZGVidWcoRjAwMCwiWE1J VCBjIixja2l0b2EoaSksYyk7CisgICAgICAgICAgICBpZiAoaSA+PSB4YnVmc2l6IHx8IGVvZiB8 fCAoZW9sICYmICh4eGVjaG8gfHwgeG1pdHcgfHwgdCkpKSB7CisgICAgICAgICAgICAgICAgcCA9 IGxpbmU7CisgICAgICAgICAgICAgICAgbGluZVtpXSA9ICdcMCc7CisgICAgICAgICAgICAgICAg ZGVidWcoRjExMSwidHJhbnNtaXQgYnVmIixwLGkpOworICAgICAgICAgICAgICAgIGlmICh0dG9s KChDSEFSICopcCxpKSA8IDApIHsgLyogdHJ5IHRvIHNlbmQgaXQuICovCisgICAgICAgICAgICAg ICAgICAgIHByaW50ZigiP1RSQU5TTUlUIG91dHB1dCBlcnJvcjogJXNcbiIsY2tfZXJyc3RyKCkp OworICAgICAgICAgICAgICAgICAgICByYyA9IDA7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpID0gMDsgICAgICAgICAgICAg ICAgICAvKiBSZXNldCBidWZmZXIgcG9pbnRlci4gKi8KKy8qCisgIE5vdyB3ZSBoYW5kbGUgdGhl IGVjaG8uICBJZiB0aGUgdXNlciB3YW50cyB0byBzZWUgaXQsIG9yIGlmIHdlIGhhdmUgdG8KKyAg d2FpdCBmb3IgdGhlIHR1cm5hcm91bmQgY2hhcmFjdGVyLCB0LiAgSWYgdGhlIGVjaG8gaXMgYmVp bmcgZGlzcGxheWVkLAorICBhbmQgdGVybWluYWwgY2hhcmFjdGVyLXNldCB0cmFuc2xhdGlvbiBp cyByZXF1aXJlZCwgd2UgZG8gaXQgaGVyZS4KKyovCisgICAgICAgICAgICAgICAgaWYgKGR1cGxl eCAmJiB4eGVjaG8pIHsgIC8qIElmIGxvY2FsIGVjaG8sIGVjaG8gaXQgKi8KKyAgICAgICAgICAg ICAgICAgICAgaWYgKHBhcml0eSB8fCBjbWRtc2sgPT0gMHg3ZikgeyAvKiBTdHJpcCBoaSBiaXRz ICovCisgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpzcyA9IGxpbmU7ICAgICAgICAgICAg IC8qIGlmIG5lY2Vzc2FyeSAqLworICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCpzcykg eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICpzcyAmPSAweDdmOworICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHNzKys7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgICAgICAgIH0KKyNpZm5kZWYgTk9MT0NBTAorI2lmZGVmIE9TMgorICAgICAgICAgICAg ICAgICAgICB7ICAgICAgICAgICAgICAgICAgIC8qIEVjaG8gdG8gZW11bGF0b3IgKi8KKyAgICAg ICAgICAgICAgICAgICAgICAgIGNoYXIgKnNzID0gcDsKKyAgICAgICAgICAgICAgICAgICAgICAg IHdoaWxlICgqc3MpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHR3cnRidWYo KFVTSE9SVCkqc3MpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzKys7CisgICAgICAg ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBPUzIg Ki8KKyNlbmRpZiAvKiBOT0xPQ0FMICovCisgICAgICAgICAgICAgICAgICAgIGlmIChjb25vbGwo cCkgPCAwKQorICAgICAgICAgICAgICAgICAgICAgIGdvdG8geG1pdGZhaWw7CisgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICAgIGlmICh4bWl0dykgICAgICAgICAgICAgIC8qIFNsZWVw IFRSQU5TTUlUIFBBVVNFIGludGVydmFsICovCisgICAgICAgICAgICAgICAgICBtc2xlZXAoeG1p dHcpOworCisgICAgICAgICAgICAgICAgY29udHJvbCA9IDA7ICAgICAgICAgICAgLyogUmVhZGJh Y2sgbG9vcCBjb250cm9sICovCisgICAgICAgICAgICAgICAgaWYgKHQgIT0gMCAmJiBlb2wpICAg ICAgLyogVFJBTlNNSVQgUFJPTVBUIGdpdmVuIGFuZCBhdCBFT0wgKi8KKyAgICAgICAgICAgICAg ICAgIGNvbnRyb2wgfD0gMTsKKyAgICAgICAgICAgICAgICBpZiAoeHhlY2hvICYmICFkdXBsZXgp ICAgLyogRWNobyBkZXNpcmVkIGFuZCBpcyByZW1vdGUgKi8KKyAgICAgICAgICAgICAgICAgIGNv bnRyb2wgfD0gMjsKKworICAgICAgICAgICAgICAgIGlmIChjb250cm9sKSB7ICAgICAgICAgIC8q IERvIHRoaXMgaWYgcmVhZGluZyBiYWNrIHRoZSBlY2hvICovCisgICAgICAgICAgICAgICAgICAg IGludCBuOworICAgICAgICAgICAgICAgICAgICB4ID0gMDsKKyAgICAgICAgICAgICAgICAgICAg d2hpbGUgKDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250cm9sICYgMSkgeyAv KiBUZXJtaW5hdGlvbiBjcml0ZXJpb24gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBp ZiAoeCA9PSB0KSAgICAvKiBmb3IgdHVybmFyb3VuZCAqLworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvbnRy b2wgJiAyKSB7IC8qIEFuZCBmb3IgZWNob2luZyAqLworICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGlmICgobiA9IHR0Y2hrKCkpIDwgMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg ICAgaWYgKCh4ID0gdHRpbmMoeG1pdHQpKSA8IDApIHsgLyogUmVhZCB3aXRoIHRpbWVvdXQgKi8K KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHgpIHsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNhc2UgLTI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHByaW50ZigiQ29ubmVjdGlvbiBjbG9zZWQuXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdHRjbG9zKDEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3Rv IHhtaXRmYWlsOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAtMzoKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIlNlc3Npb24gTGltaXQgZXhjZWVkZWQgLSBjbG9zaW5nIGNvbm5lY3Rpb24uXG4i CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB0dGNsb3MoMSk7IC8qIGZ1bGwgdGhydS4uLiAqLworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHhtaXRmYWlsOworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cHJpbnRmKCI/VGltZW91dFxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdv dG8geG1pdGZhaWw7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHggPiAtMSAmJiAoY29u dHJvbCAmIDIpKSB7IC8qIEVjaG8gYW55IGVjaG9lcyAqLworICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGlmIChwYXJpdHkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ICY9IDB4 N2Y7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYyA9IHg7CisjaWZuZGVmIE5PTE9DQUwK KyNpZmRlZiBPUzIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHR3cnRidWYoKFVT SE9SVCl4KTsKKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBOT0xPQ0FMICovCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW54YnVmWzBdID0gYzsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnhjb3VudCA9IDE7CisjaWZuZGVmIE5PQ1NFVFMKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzd2l0Y2ggKHVuaWNvZGUgJiAzKSB7IC8qIFJlbW90ZSBiaXRzICovCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGlmICh4bGF0ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaWYgKHN4aSkgYyA9ICgqc3hpKSgoQ0hBUiljKTsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGlmIChyeGkpIGMgPSAoKnJ4aSkoKENIQVIpYyk7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbnhidWZbMF0gPSBjOworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor I2lmZGVmIFVOSUNPREUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTogICAv KiBSZW1vdGUgQnl0ZSB0byBsb2NhbCBVVEYtOCAqLworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB4ZnUgPSB4bF9mY3VbdGNzcl07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHRjc3NpemUgPSBmY3NpbmZvW3Rjc3JdLnNpemU7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGlueGNvdW50ID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi X3RvX3UoKENIQVIpYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aW54YnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPVVRYQlVG U0laLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y3NzaXplCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y2FzZSAyOiAgIC8qIFJlbW90ZSBVVEYtOCB0byBsb2NhbCBCeXRlICovCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHh1ZiA9IHhsX3VmY1t0Y3NsXTsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgeCA9IHVfdG9fYigoQ0hBUiljKTsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaWYgKHggPCAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnhidWZbMF0gPSAo dW5zaWduZWQpKHggJiAweGZmKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl YWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6ICAgLyogVVRGLTggdG8g VVRGLTggKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYg LyogVU5JQ09ERSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBO T0NTRVRTICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW54YnVmW2lueGNvdW50XSA9 IE5VTDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29ueG8oaW54Y291bnQsKGNo YXIgKilpbnhidWYpIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8geG1p dGZhaWw7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgICB9IGVsc2UgICAgICAgICAgICAgICAgICAvKiBOb3QgZWNob2luZyAq LworICAgICAgICAgICAgICAgICAgdHRmbHVpKCk7ICAgICAgICAgICAgIC8qIEp1c3QgZmx1c2gg aW5wdXQgYnVmZmVyICovCisgICAgICAgICAgICB9IC8qIEVuZCBvZiBidWZmZXItZHVtcGluZyBi bG9jayAqLworICAgICAgICB9IC8qIEVuZCBvZiB0ZXh0IG1vZGUgKi8KKyAgICAgICAgaWYgKGVv ZikgeworICAgICAgICAgICAgcmMgPSAxOworICAgICAgICAgICAgZ290byB4bWl0ZXhpdDsKKyAg ICAgICAgfQorICAgIH0gLyogRW5kIG9mIGNoYXJhY3Rlci1yZWFkaW5nIGxvb3AgKi8KKworICB4 bWl0ZmFpbDogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZhaWx1cmUgZXhpdCBwb2lu dCAqLworICAgIHJjID0gMDsKKworICB4bWl0ZXhpdDogICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIEdlbmVyYWwgZXhpdCBwb2ludCAqLworICAgIGlmIChyYyA+IDApIHsKKyAgICAgICAg aWYgKGJpbmFyeSAmJiAheG1pdHcgJiYgIXh4ZWNobykgeyAvKiAiYmxhc3RpbmciPyAqLworICAg ICAgICAgICAgd2hpbGUgKGNvdW50ID4gMCkgeyAgICAgICAgICAgIC8qIFBhcnRpYWwgYnVmZmVy IHN0aWxsIHRvIGdvPyAqLworICAgICAgICAgICAgICAgIGVycm5vID0gMDsKKyAgICAgICAgICAg ICAgICB5ID0gdHRvbCh4YmJ1Zixjb3VudCk7CisgICAgICAgICAgICAgICAgaWYgKHkgPCAwKSB7 CisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiP1RSQU5TTUlUIG91dHB1dCBlcnJvcjogJXNc biIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBja19lcnJzdHIoKSk7CisgICAgICAgICAg ICAgICAgICAgIGRlYnVnKEYxMTEsIlhNSVQgYmluYXJ5IGVvZiB0dG9sIGVycm9yIiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgY2tfZXJyc3RyKCksZXJybm8pOworICAgICAgICAgICAgICAg ICAgICByYyA9IDA7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgICBjb3VudCAtPSB5OworICAgICAgICAgICAgfQorICAgICAgICB9 IGVsc2UgaWYgKCFiaW5hcnkgJiYgKnhtaXRidWYpIHsgLyogQW55dGhpbmcgdG8gc2VuZCBhdCBF T0Y/ICovCisgICAgICAgICAgICBwID0geG1pdGJ1ZjsgICAgICAgICAgICAgICAgLyogWWVzLCBw b2ludCB0byBzdHJpbmcuICovCisgICAgICAgICAgICB3aGlsZSAoKnApICAgICAgICAgICAgICAg ICAgLyogU2VuZCBpdC4gKi8KKyAgICAgICAgICAgICAgdHRvYyhkb3BhcigqcCsrKSk7ICAgICAg ICAvKiBEb24ndCB3b3JyeSBhYm91dCBlY2hvIGhlcmUuICovCisgICAgICAgIH0KKyAgICB9CisK KyNpZm5kZWYgQU1JR0EKKyNpZm5kZWYgTUFDCisgICAgc2lnbmFsKFNJR0lOVCxvbGRzaWcpOyAg ICAgICAgICAgICAgLyogUHV0IG9sZCBzaWduYWwgYWN0aW9uIGJhY2suICovCisjZW5kaWYgLyog TUFDICovCisjZW5kaWYgLyogQU1JR0EgKi8KKyNpZmRlZiBWTVMKKyAgICBjb25jYihlc2NhcGUp OyAgICAgICAgICAgICAgICAgICAgICAvKiBQdXQgdGVybWluYWwgYmFjaywgKi8KKyNlbmRpZiAv KiBWTVMgKi8KKyAgICB6Y2xvc2UoWklGSUxFKTsgICAgICAgICAgICAgICAgICAgICAvKiBDbG9z ZSBmaWxlLCAqLworI2lmbmRlZiBOT0NTRVRTCisgICAgbGFuZ3VhZ2UgPSBsYW5nc3Y7ICAgICAg ICAgICAgICAgICAgLyogcmVzdG9yZSBsYW5ndWFnZSwgKi8KKyNlbmRpZiAvKiBOT0NTRVRTICov CisgICAgdHRyZXMoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYW5kIHRlcm1pbmFs IG1vZGVzLCAqLworICAgIHJldHVybihyYyk7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFu ZCByZXR1cm4gc3VjY2Vzc2Z1bGx5LiAqLworfQorI2VuZGlmIC8qIE5PTE9DQUwgKi8KKyNlbmRp ZiAvKiBOT1hNSVQgKi8KKworI2lmbmRlZiBOT0NTRVRTCisKK19QUk9UT1RZUCggQ0hBUiAoKnN4 eCksIChDSEFSKSApOyAgICAgICAvKiBMb2NhbCB0cmFuc2xhdGlvbiBmdW5jdGlvbiAqLworX1BS T1RPVFlQKCBDSEFSICgqcnh4KSwgKENIQVIpICk7ICAgICAgIC8qIExvY2FsIHRyYW5zbGF0aW9u IGZ1bmN0aW9uICovCitfUFJPVE9UWVAoIENIQVIgemwxYXMsIChDSEFSKSApOyAgICAgICAgLyog TGF0aW4tMSB0byBhc2NpaSAqLworX1BST1RPVFlQKCBDSEFSIHhsMWFzLCAoQ0hBUikgKTsgICAg ICAgIC8qIGRpdHRvICovCisKKy8qICBYIEwgQSBUIEUgIC0tICBUcmFuc2xhdGUgYSBsb2NhbCBm aWxlIGZyb20gb25lIGNoYXJhY3RlciBzZXQgdG8gYW5vdGhlciAqLworCisvKgorICBUcmFuc2xh dGVzIGlucHV0IGZpbGUgKGZpbikgZnJvbSBjaGFyYWN0ZXIgc2V0IGNzaW4gdG8gY2hhcmFjdGVy IHNldCBjc291dAorICBhbmQgcHV0cyB0aGUgcmVzdWx0IGluIHRoZSBvdXRwdXQgZmlsZSAoZm91 dCkuICBUaGUgdHdvIGNoYXJhY3RlciBzZXRzIGFyZQorICBmaWxlIGNoYXJhY3RlciBzZXRzIGZy b20gZmNzdGFiLgorKi8KKworaW50Cit4bGF0ZShmaW4sIGZvdXQsIGNzaW4sIGNzb3V0KSBjaGFy ICpmaW4sICpmb3V0OyBpbnQgY3NpbiwgY3NvdXQ7IHsKKworI2lmbmRlZiBNQUMKKyNpZmRlZiBP UzIKKyAgICBleHRlcm4gaW50IGs5NXN0ZG91dDsKKyAgICBleHRlcm4gaW50IHdoZXJleFtdLCB3 aGVyZXlbXTsKKyAgICBleHRlcm4gdW5zaWduZWQgY2hhciBjb2xvcmNtZDsKKyNpZmRlZiBOVAor ICAgIFNJR1RZUCAoKiBvbGRzaWcpKGludCk7ICAgICAgICAgICAgIC8qIEZvciBzYXZpbmcgb2xk IGludGVycnVwdCB0cmFwLiAqLworI2Vsc2UgLyogTlQgKi8KKyAgICBTSUdUWVAgKCogdm9sYXRp bGUgb2xkc2lnKShpbnQpOyAgICAvKiBGb3Igc2F2aW5nIG9sZCBpbnRlcnJ1cHQgdHJhcC4gKi8K KyNlbmRpZiAvKiBOVCAqLworI2Vsc2UgLyogT1MyICovCisgICAgU0lHVFlQICgqIG9sZHNpZyko KTsKKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBNQUMgKi8KKyNpZmRlZiBDS19BTlNJQwor ICAgIGludCAoKmZuKShjaGFyKTsgICAgICAgICAgICAgICAgICAgIC8qIE91dHB1dCBmdW5jdGlv biBwb2ludGVyICovCisjZWxzZQorICAgIGludCAoKmZuKSgpOworI2VuZGlmIC8qIENLX0FOU0lD ICovCisgICAgZXh0ZXJuIGludCB4bGF0eXBlOworICAgIGludCBmaWxlY29kZTsgICAgICAgICAg ICAgICAgICAgICAgIC8qIENvZGUgZm9yIG91dHB1dCBmaWxlICovCisgICAgaW50IHNjcm5mbGcg PSAwOworCisgICAgaW50IHogPSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmV0dXJu IGNvZGUuICovCisgICAgaW50IHgsIGMsIGMyOyAgICAgICAgICAgICAgICAgICAgICAgLyogV29y a2VycyAqLworI2lmbmRlZiBVTklDT0RFCisgICAgaW50IHRjczsKKyNlbmRpZiAvKiBVTklDT0RF ICovCisKKyAgICBmZmMgPSAwTDsKKworICAgIGlmICh6b3BlbmkoWklGSUxFLGZpbikgPT0gMCkg eyAgICAgIC8qIE9wZW4gdGhlIGZpbGUgdG8gYmUgdHJhbnNsYXRlZCAqLworI2lmZGVmIENPTU1F TlQKKyAgICAgICAgLyogQW4gZXJyb3IgbWVzc2FnZSB3YXMgYWxyZWFkeSBwcmludGVkIGJ5IHpv cGVuaSgpICovCisgICAgICAgIHByaW50ZigiP0Nhbid0IG9wZW4gaW5wdXQgZmlsZSAlc1xuIixm aW4pOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAgcmV0dXJuKDApOworICAgIH0KKyNp ZmRlZiBNQUMKKy8qCisgIElmIHVzZXIgc3BlY2lmaWVkIG5vIG91dHB1dCBmaWxlLCBpdCBnb2Vz IHRvIHRoZSBzY3JlZW4uICBGb3IgdGhlIE1hYywKKyAgdGhpcyBtdXN0IGJlIGRvbmUgYSBzcGVj aWFsIHdheSAocmVzdWx0IGdvZXMgdG8gYSBuZXcgd2luZG93KTsgdGhlIE1hYworICBkb2Vzbid0 IGhhdmUgYSAiY29udHJvbGxpbmcgdGVybWluYWwiIGRldmljZSBuYW1lLgorKi8KKyAgICBmaWxl Y29kZSA9ICFzdHJjbXAoZm91dCxDVFROQU0pID8gWkNURVJNIDogWk9GSUxFOworI2Vsc2UKKyNp ZmRlZiBWTVMKKyAgICBmaWxlY29kZSA9ICFzdHJjbXAoZm91dCxDVFROQU0pID8gWkNURVJNIDog Wk1GSUxFOworI2Vsc2UKKyNpZmRlZiBPUzIKKyAgICBmaWxlY29kZSA9ICghc3RyaWNtcChmb3V0 LCJjb24iKSB8fCAhc3RyaWNtcChmb3V0LCJjb246IikpID8KKyAgICAgICAgWkNURVJNIDogWk1G SUxFOworICAgIGlmICgoZmlsZWNvZGUgPT0gWkNURVJNKSAmJiAhazk1c3Rkb3V0ICYmICFpbnNl cnZlcikKKyAgICAgICAgY3NvdXQgPSBGQ19VQ1MyOworI2Vsc2UgLyogT1MyICovCisgICAgZmls ZWNvZGUgPSBaT0ZJTEU7CisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogVk1TICovCisjZW5k aWYgLyogTUFDICovCisgICAgaWYgKHpvcGVubyhmaWxlY29kZSxmb3V0LE5VTEwsTlVMTCkgPT0g MCkgeyAvKiBBbmQgdGhlIG91dHB1dCBmaWxlICovCisgICAgICAgIHByaW50ZigiP0Nhbid0IG9w ZW4gb3V0cHV0IGZpbGUgJXNcbiIsZm91dCk7CisgICAgICAgIHJldHVybigwKTsKKyAgICB9Cisj aWZuZGVmIEFNSUdBCisjaWZuZGVmIE1BQworICAgIG9sZHNpZyA9IHNpZ25hbChTSUdJTlQsIHRy dHJhcCk7ICAgIC8qIFNhdmUgY3VycmVudCBpbnRlcnJ1cHQgdHJhcC4gKi8KKyNlbmRpZiAvKiBN QUMgKi8KKyNlbmRpZiAvKiBBTUlHQSAqLworCisgICAgc2NybmZsZyA9IChmaWxlY29kZSA9PSBa Q1RFUk0pOyAgICAgLyogU2V0IG91dHB1dCBmdW5jdGlvbiAqLworICAgIGlmIChzY3JuZmxnKQor ICAgICAgZm4gPSBOVUxMOworICAgIGVsc2UgaWYgKGZpbGVjb2RlID09IFpNRklMRSkKKyAgICAg IGZuID0gcHV0bWZpbDsKKyAgICBlbHNlCisgICAgICBmbiA9IHB1dGZpbDsKKworICAgIHRyX2lu dCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEhhdmUgbm90IGJlZW4gaW50ZXJydXB0 ZWQgKHlldCkuICovCisgICAgeiA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog UmV0dXJuIGNvZGUgcHJlc3VtZWQgZ29vZC4gKi8KKworICAgIGlmICghc2NybmZsZyAmJiAhcXVp ZXQpCisgICAgICBwcmludGYoIiAlcyAoJXMpID0+ICVzICglcylcbiIsICAgLyogU2F5IHdoYXQg d2UncmUgZG9pbmcuICovCisgICAgICAgICAgICAgZmluLCBmY3NpbmZvW2NzaW5dLmtleXdvcmQs CisgICAgICAgICAgICAgZm91dCxmY3NpbmZvW2Nzb3V0XS5rZXl3b3JkCisgICAgICAgICAgICAg KTsKKworI2lmbmRlZiBVTklDT0RFCisvKgorICBOb24tVW5pY29kZSBwaWNrcyB0aGUgIm1vc3Qg YXBwcm9wcmlhdGUiIHRyYW5zZmVyIGNoYXJhY3RlciBzZXQgYXMgdGhlCisgIGludGVybWVkaWF0 ZSBzZXQsIHdoaWNoIHJlc3VsdHMgaW4gbG9zcyBvZiBhbnkgY2hhcmFjdGVycyB0aGF0IHRoZSBz b3VyY2UKKyAgYW5kIHRhcmdldCBzZXRzIGhhdmUgaW4gY29tbW9uLCBidXQgYXJlIGxhY2tpbmcg ZnJvbSB0aGUgaW50ZXJtZWRpYXRlIHNldC4KKyovCisjaWZkZWYgS0FOSkkKKyAgICAvKiBTcGVj aWFsIGhhbmRsaW5nIGZvciBKYXBhbmVzZS4uLiAqLworCisgICAgaWYgKGZjc2luZm9bY3Npbl0u YWxwaGFiZXQgPT0gQUxfSkFQQU4gfHwKKyAgICAgICAgIGZjc2luZm9bY3NvdXRdLmFscGhhYmV0 ID09IEFMX0pBUEFOKSB7CisgICAgICAgIFVTSE9SVCBldTsKKyAgICAgICAgaW50IGMsIHgsIHk7 CisKKyAgICAgICAgeHBuYnl0ZSgtMSwwLDAsTlVMTCk7ICAgICAgICAgICAvKiBSZXNldCBvdXRw dXQgbWFjaGluZSAqLworICAgICAgICB4bGF0eXBlID0gWExBX0pBUEFOOworCisgICAgICAgIHdo aWxlICgoYyA9IHhnbmJ5dGUoRkNfSkVVQyxjc2luLE5VTEwpKSA+IC0xKSB7IC8qIEdldCBhbiBF VUMgYnl0ZSAqLworICAgICAgICAgICAgaWYgKHRyX2ludCkgeyAgICAgICAgICAgICAgIC8qIElu dGVycnVwdGVkPyAqLworICAgICAgICAgICAgICAgIHByaW50ZigiXkMuLi5cbiIpOyAgICAgIC8q IFByaW50IG1lc3NhZ2UgKi8KKyAgICAgICAgICAgICAgICB6ID0gMDsKKyAgICAgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8qIFNlbmQgRVVDIGJ5dGUgdG8g b3V0cHV0IG1hY2hpbmUgKi8KKyAgICAgICAgICAgIGlmICgoeCA9IHhwbmJ5dGUoYyxUQ19KRVVD LGNzb3V0LGZuKSkgPCAwKSB7CisgICAgICAgICAgICAgICAgeiA9IC0xOworICAgICAgICAgICAg ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGdvdG8geHhsYXRl OworICAgIH0KKyNlbmRpZiAvKiBLQU5KSSAqLworCisgICAgLyogUmVndWxhciBieXRld2lzZSBj b252ZXJzaW9uLi4uICovCisKKyAgICB0Y3MgPSBnZXR0Y3MoY3Npbixjc291dCk7ICAgICAgICAg ICAvKiBHZXQgaW50ZXJtZWRpYXRlIHNldC4gKi8KKyAgICBpZiAoY3NpbiA9PSBjc291dCkgeyAg ICAgICAgICAgICAgICAvKiBJbnB1dCBhbmQgb3V0cHV0IHNldHMgdGhlIHNhbWU/ICovCisgICAg ICAgIHN4eCA9IHJ4eCA9IE5VTEw7ICAgICAgICAgICAgICAgLyogSWYgc28sIG5vIHRyYW5zbGF0 aW9uLiAqLworICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE90aGVy d2lzZSwgc2V0IHVwICovCisgICAgICAgIGlmICh0Y3MgPCAwIHx8IHRjcyA+IE1BWFRDU0VUUyB8 fAorICAgICAgICAgICAgY3NpbiA8IDAgfHwgY3NpbiA+IE1BWEZDU0VUUyB8fAorICAgICAgICAg ICAgY3NvdXQgPCAwIHx8IGNzb3V0ID4gTUFYRkNTRVRTKSB7CisgICAgICAgICAgICBkZWJ1ZyhG MTAwLCJYTEFURSBjc2V0cyBvdXQgb2YgcmFuZ2UiLCIiLDApOworICAgICAgICAgICAgc3h4ID0g cnh4ID0gTlVMTDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHN4eCA9IHhsc1t0Y3Nd W2NzaW5dOyAgICAgICAvKiB0cmFuc2xhdGlvbiBmdW5jdGlvbiAqLworICAgICAgICAgICAgcnh4 ID0geGxyW3Rjc11bY3NvdXRdOyAgICAgIC8qIHBvaW50ZXJzLiAqLworICAgICAgICAgICAgaWYg KHJ4eCA9PSB6bDFhcykgcnh4ID0geGwxYXM7CisgICAgICAgIH0KKyAgICB9CisgICAgd2hpbGUg KChjID0gem1pbmNoYXIoKSkgIT0gLTEpIHsgLyogTG9vcCBmb3IgYWxsIGNoYXJhY3RlcnMgaW4g ZmlsZSAqLworICAgICAgICBpZiAodHJfaW50KSB7ICAgICAgICAgICAgICAgICAgIC8qIEludGVy cnVwdGVkPyAqLworICAgICAgICAgICAgcHJpbnRmKCJeQy4uLlxuIik7ICAgICAgICAgIC8qIFBy aW50IG1lc3NhZ2UgKi8KKyAgICAgICAgICAgIHogPSAwOworICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgIH0KKyAgICAgICAgaWYgKHN4eCkgYyA9ICgqc3h4KSgoQ0hBUiljKTsgICAvKiBGcm9t IGZjczEgdG8gdGNzICovCisgICAgICAgIGlmIChyeHgpIGMgPSAoKnJ4eCkoKENIQVIpYyk7ICAg LyogZnJvbSB0Y3MgdG8gZmNzMiAqLworICAgICAgICBpZiAoemNob3V0KGZpbGVjb2RlLChjaGFy KWMpIDwgMCkgeyAvKiBPdXRwdXQgeGxhdGVkIGNoYXJhY3RlciAqLworICAgICAgICAgICAgeiA9 IC0xOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgZ290byB4eGxh dGU7ICAgICAgICAgICAgICAgICAgICAgICAgLyogRG9uZS4gKi8KKworI2Vsc2UgIC8qIFVOSUNP REUgKi8KKy8qCisgICBVc2UgVW5pY29kZSBhcyB0aGUgaW50ZXJtZWRpYXRlIGNoYXJhY3RlciBz ZXQuICBJdCdzIHNpbXBsZSBhbmQgZ2l2ZXMKKyAgIGxpdHRsZSBvciBubyBsb3NzLCBidXQgdGhl IG92ZXJoZWFkIGlzIGEgYml0IGhpZ2hlci4KKyovCisgICAgaW5pdHhsYXRlKGNzaW4sY3NvdXQp OyAgICAgICAgICAgICAgLyogU2V0IHVwIHRyYW5zbGF0aW9uIGZ1bmN0aW9ucyAqLworCisgICAg aWYgKHhsYXR5cGUgPT0gWExBX05PTkUpIHsKKyAgICAgICAgd2hpbGUgKChjID0gem1pbmNoYXIo KSkgIT0gLTEpIHsgLyogTG9vcCBmb3IgYWxsIGNoYXJhY3RlcnMgaW4gZmlsZSAqLworICAgICAg ICAgICAgaWYgKHRyX2ludCkgeyAgICAgICAgICAgICAgIC8qIEludGVycnVwdGVkPyAqLworICAg ICAgICAgICAgICAgIHByaW50ZigiXkMuLi5cbiIpOyAgICAgIC8qIFByaW50IG1lc3NhZ2UgKi8K KyAgICAgICAgICAgICAgICB6ID0gMDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgICAgIGlmICh6Y2hvdXQoZmlsZWNvZGUsKGNoYXIpYykgPCAwKSB7IC8q IE91dHB1dCB4bGF0ZWQgY2hhcmFjdGVyICovCisgICAgICAgICAgICAgICAgeiA9IC0xOworICAg ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGdv dG8geHhsYXRlOyAgICAgICAgICAgICAgICAgICAgLyogRG9uZS4gKi8KKyAgICB9CisKKworI2lm bmRlZiBOT0xPQ0FMCisjaWZkZWYgT1MyCisgICAgaWYgKGNzb3V0ID09IEZDX1VDUzIgJiYgICAg ICAgICAgICAgLyogd2UncmUgdHJhbnNsYXRpbmcgdG8gVUNTLTIgKi8KKyAgICAgICAgZmlsZWNv ZGUgPT0gWkNURVJNICYmICAgICAgICAgICAvKiBmb3IgdGhlIHJlYWwgc2NyZWVuLi4uICovCisg ICAgICAgICFrOTVzdGRvdXQgJiYgIWluc2VydmVyCisgICAgICAgICkgeworICAgICAgICB1bmlv biB7CisgICAgICAgICAgICBVU0hPUlQgdWNzMjsKKyAgICAgICAgICAgIFVDSEFSICBieXRlc1sy XTsKKyAgICAgICAgfSBvdXRwdXQ7CisKKyAgICAgICAgd2hpbGUgKDEpIHsgICAgICAgICAgICAg ICAgICAgICAvKiBJbiB0aGlzIGNhc2Ugd2UgZ28gdHdvLWJ5LXR3by4gKi8KKyAgICAgICAgICAg IGlmICgoYyA9IHhnbmJ5dGUoRkNfVUNTMixjc2luLE5VTEwpKSA8IDApCisgICAgICAgICAgICAg IGJyZWFrOworICAgICAgICAgICAgb3V0cHV0LmJ5dGVzWzBdID0gYzsKKyAgICAgICAgICAgIGlm ICgoYyA9IHhnbmJ5dGUoRkNfVUNTMixjc2luLE5VTEwpKSA8IDApCisgICAgICAgICAgICAgIGJy ZWFrOworICAgICAgICAgICAgb3V0cHV0LmJ5dGVzWzFdID0gYzsKKworICAgICAgICAgICAgaWYg KHRyX2ludCkgeyAgICAgICAgICAgICAgIC8qIEludGVycnVwdGVkPyAqLworICAgICAgICAgICAg ICAgIHByaW50ZigiXkMuLi5cbiIpOyAgICAgIC8qIFByaW50IG1lc3NhZ2UgKi8KKyAgICAgICAg ICAgICAgICB6ID0gMDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKwor ICAgICAgICAgICAgVnNjcm5XcnRVQ1MyU3RyQXR0KFZDTUQsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJm91dHB1dC51Y3MyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmV5W1ZDTURdLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJleFtWQ01EXSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAmY29sb3JjbWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAp OworICAgICAgICB9CisgICAgfSBlbHNlCisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogTk9M T0NBTCAqLworCisgICAgICAvKiBHZW5lcmFsIGNhc2U6IEdldCBuZXh0IGJ5dGUgdHJhbnNsYXRl ZCBmcm9tIGZjcyB0byBVQ1MtMiAqLworCisjaWZkZWYgQ09NTUVOVAorICAgICAgd2hpbGUgKChj ID0geGduYnl0ZShGQ19VQ1MyLGNzaW4sTlVMTCkpID4gLTEgJiYKKyAgICAgICAgICAgICAgKGMy ID0geGduYnl0ZShGQ19VQ1MyLGNzaW4sTlVMTCkpID4gLTEpIHsKKyAgICAgICAgICBleHRlcm4g aW50IGZpbGVvcmRlcjsKKworICAgICAgICAgIGlmICh0cl9pbnQpIHsgICAgICAgICAgICAgICAg IC8qIEludGVycnVwdGVkPyAqLworICAgICAgICAgICAgICBwcmludGYoIl5DLi4uXG4iKTsgICAg ICAgIC8qIFByaW50IG1lc3NhZ2UgKi8KKyAgICAgICAgICAgICAgeiA9IDA7CisgICAgICAgICAg ICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgICBkZWJ1ZyhGMDAxLCJYTEFURSBjIiwi IixjKTsKKyAgICAgICAgICBkZWJ1ZyhGMDAxLCJYTEFURSBjMiIsIiIsYzIpOworCisgICAgICAg ICAgLyogQW5kIHRoZW4gc2VuZCBVQ1MtMiBieXRlIHRvIHRyYW5zbGF0ZS1hbmQtb3V0cHV0IG1h Y2hpbmUgKi8KKworICAgICAgICAgIGlmICgoeCA9IHhwbmJ5dGUoZmlsZW9yZGVyP2MyOmMsVENf VUNTMixjc291dCxmbikpIDwgMCkgeworICAgICAgICAgICAgICB6ID0gLTE7CisgICAgICAgICAg ICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgICBpZiAoKHggPSB4cG5ieXRlKGZpbGVv cmRlcj9jOmMyLFRDX1VDUzIsY3NvdXQsZm4pKSA8IDApIHsKKyAgICAgICAgICAgICAgeiA9IC0x OworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAgICB9CisjZWxzZQorICAg IHdoaWxlICgoYyA9IHhnbmJ5dGUoRkNfVUNTMixjc2luLE5VTEwpKSA+IC0xKSB7CisgICAgICAg ICAgaWYgKHRyX2ludCkgeyAgICAgICAgICAgICAgICAgLyogSW50ZXJydXB0ZWQ/ICovCisgICAg ICAgICAgICAgIHByaW50ZigiXkMuLi5cbiIpOyAgICAgICAgLyogUHJpbnQgbWVzc2FnZSAqLwor ICAgICAgICAgICAgICB6ID0gMDsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQor ICAgICAgICAgIGlmICgoeCA9IHhwbmJ5dGUoYyxUQ19VQ1MyLGNzb3V0LGZuKSkgPCAwKSB7Cisg ICAgICAgICAgICAgIHogPSAtMTsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQor ICAgICAgfQorI2VuZGlmIC8qIENPTU1FTlQgKi8KKworI2VuZGlmIC8qIFVOSUNPREUgKi8KKwor ICB4eGxhdGU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvbW1vbiBleGl0IHBv aW50ICovCisKKyNpZm5kZWYgQU1JR0EKKyNpZm5kZWYgTUFDCisgICAgc2lnbmFsKFNJR0lOVCxv bGRzaWcpOyAgICAgICAgICAgICAgLyogUHV0IG9sZCBzaWduYWwgYWN0aW9uIGJhY2suICovCisj ZW5kaWYgLyogTUFDICovCisjZW5kaWYgLyogQU1JR0EgKi8KKyAgICB0cl9pbnQgPSAwOworICAg IGlmICh6IDwgMCkgeworICAgICAgICBpZiAoeiA9PSAtMSkKKyAgICAgICAgICBwcmludGYoIj9G aWxlIG91dHB1dCBlcnJvcjogJXNcbiIsY2tfZXJyc3RyKCkpOworICAgICAgICB6ID0gMDsKKyAg ICB9CisgICAgemNsb3NlKFpJRklMRSk7ICAgICAgICAgICAgICAgICAgICAgLyogQ2xvc2UgZmls ZXMgKi8KKyAgICB6Y2xvc2UoZmlsZWNvZGUpOyAgICAgICAgICAgICAgICAgICAvKiAuLi4gKi8K KyAgICByZXR1cm4oc3VjY2VzcyA9IHopOyAgICAgICAgICAgICAgICAvKiBhbmQgcmV0dXJuIHN0 YXR1cy4gKi8KK30KKworaW50Citkb3hsYXRlKCkgeworI2lmZGVmIE9TMk9OTFkKKyAgICBleHRl cm4gaW50IHR0X2ZvbnQ7CisjZW5kaWYgLyogT1MyT05MWSAqLworI2lmZGVmIFVOSVgKKyAgICBl eHRlcm4gY2hhciAqKiBtdGNoczsgICAgICAgICAgICAgICAvKiB6eHBhbmQoKSBmaWxlIGxpc3Qg Ki8KKyNlbmRpZiAvKiBVTklYICovCisgICAgaW50IHgsIHksIGluY3MsIG91dGNzLCBtdWx0aXBs ZSA9IDAsIHdpbGQgPSAwLCBmYyA9IDAsIGxlbiA9IDA7CisgICAgaW50IG9maXNkaXIgPSAwOwor ICAgIGNoYXIgKiBzLCAqIHRvY3MgPSAiIjsKKworICAgIGlmICgoeCA9IGNtaWZpKCJGaWxlKHMp IHRvIHRyYW5zbGF0ZSIsIiIsJnMsJndpbGQseHhzdHJpbmcpKSA8IDApIHsKKyAgICAgICAgaWYg KHggPT0gLTMpIHsKKyAgICAgICAgICAgIHByaW50ZigiP05hbWUgb2YgYW4gZXhpc3RpbmcgZmls ZVxuIik7CisgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICB9IGVsc2UKKyAgICAgICAg ICByZXR1cm4oeCk7CisgICAgfQorICAgIGNrc3RybmNweShsaW5lLHMsTElOQlVGU0laKTsgICAg ICAgIC8qIFNhdmUgY29weSBvZiBzdHJpbmcganVzdCBwYXJzZWQuICovCisKKyAgICBpZiAoKGlu Y3MgPSBjbWtleShmY3N0YWIsbmZpbGMsImZyb20gY2hhcmFjdGVyLXNldCIsIiIseHhzdHJpbmcp KSA8IDApCisgICAgICByZXR1cm4oaW5jcyk7CisKKyNpZmRlZiBPUzIKKyAgICBpZiAoaXN1bmlj b2RlKCkpCisgICAgICB0b2NzID0gInVjczIiOworICAgIGVsc2UKKyNlbmRpZiAvKiBPUzIgKi8K KyAgICAgIHRvY3MgPSBnZXRkY3NldCgpOworCisgICAgaWYgKChvdXRjcyA9IGNta2V5KGZjc3Rh YixuZmlsYywidG8gY2hhcmFjdGVyLXNldCIsdG9jcyx4eHN0cmluZykpIDwgMCkKKyAgICAgIHJl dHVybihvdXRjcyk7CisgICAgaWYgKCh4ID0gY21vZmkoIm91dHB1dCBmaWxlIixDVFROQU0sJnMs eHhzdHJpbmcpKSA8IDApIHJldHVybih4KTsKKyAgICBpZiAoeCA+IDEpCisgICAgICBvZmlzZGly ID0gMTsKKworICAgIGxlbiA9IGNrc3RybmNweSh0bXBidWYscyxUTVBCVUZTSVopOworICAgIGlm ICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkpOyAgIC8qIENvbmZpcm0gdGhlIGNvbW1hbmQg Ki8KKworICAgIGlmIChsZW4gPCAxKQorICAgICAgcmV0dXJuKC0yKTsKKworICAgIGlmIChvZmlz ZGlyKQorICAgICAgbXVsdGlwbGUgPSAyOworICAgIGVsc2UgaWYgKHdpbGQpIHsKKyAgICAgICAg aWYgKGlzZGlyKHRtcGJ1ZikpCisgICAgICAgICAgbXVsdGlwbGUgPSAyOworICAgICAgICBlbHNl IGlmICghc3RyY21wKHRtcGJ1ZixDVFROQU0pKQorICAgICAgICAgIG11bHRpcGxlID0gMTsKKyNp ZmRlZiBPUzIKKyAgICAgICAgZWxzZSBpZiAoIXN0cmljbXAodG1wYnVmLCJjb24iKSB8fCAhc3Ry aWNtcCh0bXBidWYsImNvbjoiKSkKKyAgICAgICAgICBtdWx0aXBsZSA9IDE7CisjZWxzZQorI2lm ZGVmIFVOSVhPUk9TSworICAgICAgICBlbHNlIGlmICghc3RybmNtcCh0bXBidWYsIi9kZXYvIiw0 KSkKKyAgICAgICAgICBtdWx0aXBsZSA9IDE7CisjZW5kaWYgLyogVU5JWE9ST1NLICovCisjZW5k aWYgLyogT1MyICovCisgICAgICAgIGlmICghbXVsdGlwbGUpIHsKKyAgICAgICAgICAgIHByaW50 ZigiP0Egc2luZ2xlIGZpbGUgcGxlYXNlXG4iKTsKKyAgICAgICAgICAgIHJldHVybigtOSk7Cisg ICAgICAgIH0KKyAgICB9CisgICAgaWYgKCFtdWx0aXBsZSkgeyAgICAgICAgICAgICAgICAgICAg LyogSnVzdCBvbmUgZmlsZSAqLworICAgICAgICByZXR1cm4oc3VjY2VzcyA9IHhsYXRlKGxpbmUs dG1wYnVmLGluY3Msb3V0Y3MpKTsKKyAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBUcmFuc2xhdGUgbXVsdGlwbGUgZmlsZXMgKi8KKyAgICAgICAgY2hhciBkaXJidWZb Q0tNQVhQQVRIKzRdOworICAgICAgICBpbnQgazsKKyNpZm5kZWYgWlhSRVdJTkQKKyAgICAgICAg aW50IGZsYWdzID0gWlhfRklMT05MWTsKKyNlbmRpZiAvKiBaWFJFV0lORCAqLworCisgICAgICAg IGlmIChtdWx0aXBsZSA9PSAyKSB7ICAgICAgICAgICAgLyogVGFyZ2V0IGlzIGEgZGlyZWN0b3J5 ICovCisgICAgICAgICAgICBrID0gY2tzdHJuY3B5KGRpcmJ1Zix0bXBidWYsQ0tNQVhQQVRIKzEp IC0gMTsKKyAgICAgICAgICAgIGlmIChrIDwgMCkKKyAgICAgICAgICAgICAgcmV0dXJuKC0yKTsK KyNpZmRlZiBPUzJPUlVOSVgKKyAgICAgICAgICAgIGlmIChkaXJidWZba10gIT0gJy8nKSB7Cisg ICAgICAgICAgICAgICAgZGlyYnVmW2srMV0gPSAnLyc7CisgICAgICAgICAgICAgICAgZGlyYnVm W2srMl0gPSBOVUw7CisgICAgICAgICAgICB9CisjZWxzZQorI2lmZGVmIE9TSworICAgICAgICAg ICAgaWYgKGRpcmJ1ZltrXSAhPSAnLycpIHsKKyAgICAgICAgICAgICAgICBkaXJidWZbaysxXSA9 ICcvJzsKKyAgICAgICAgICAgICAgICBkaXJidWZbaysyXSA9IE5VTDsKKyAgICAgICAgICAgIH0K KyNlbHNlCisjaWZkZWYgVk1TCisgICAgICAgICAgICBpZiAoY2ttYXRjaCgiKi5ESVI7MSIscyww LDApKQorICAgICAgICAgICAgICBrID0gY3Z0ZGlyKHRtcGJ1ZixkaXJidWYsVE1QQlVGU0laKTsK KyAgICAgICAgICAgIGlmIChkaXJidWZba10gIT0gJ10nICYmCisgICAgICAgICAgICAgICAgZGly YnVmW2tdICE9ICc+JyAmJgorICAgICAgICAgICAgICAgIGRpcmJ1ZltrXSAhPSAnOicpCisgICAg ICAgICAgICAgIHJldHVybigtMik7CisjZWxzZQorI2lmZGVmIGRhdGFnZW5lcmFsCisgICAgICAg ICAgICBpZiAoZGlyYnVmW2tdICE9ICc6JykgeworICAgICAgICAgICAgICAgIGRpcmJ1ZltrKzFd ID0gJzonOworICAgICAgICAgICAgICAgIGRpcmJ1ZltrKzJdID0gTlVMOworICAgICAgICAgICAg fQorI2Vsc2UKKyNpZmRlZiBTVFJBVFVTCisgICAgICAgICAgICBpZiAoZGlyYnVmW2tdICE9ICc+ JykgeworICAgICAgICAgICAgICAgIGRpcmJ1ZltrKzFdID0gJz4nOworICAgICAgICAgICAgICAg IGRpcmJ1ZltrKzJdID0gTlVMOworICAgICAgICAgICAgfQorI2VuZGlmIC8qIFNUUkFUVVMgKi8K KyNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLworI2VuZGlmIC8qIFZNUyAqLworI2VuZGlmIC8qIE9T SyAqLworI2VuZGlmIC8qIE9TMk9SVU5JWCAqLworICAgICAgICB9CisKKyNpZmRlZiBaWFJFV0lO RAorICAgICAgICBmYyA9IHp4cmV3aW5kKCk7ICAgICAgICAgICAgICAgIC8qIFJld2luZCB0aGUg ZmlsZSBsaXN0ICovCisjZWxzZQorICAgICAgICBpZiAobWF0Y2hkb3QpICBmbGFncyB8PSBaWF9N QVRDSERPVDsKKyAgICAgICAgZmMgPSBuenhwYW5kKGxpbmUsZmxhZ3MpOworI2VuZGlmIC8qIFpY UkVXSU5EICovCisKKyAgICAgICAgaWYgKGZjIDwgMSkgeworICAgICAgICAgICAgcHJpbnRmKCI/ V2lsZGNhcmQgZXhwYW5zaW9uIGVycm9yXG4iKTsKKyAgICAgICAgICAgIHJldHVybigtOSk7Cisg ICAgICAgIH0KKyNpZmRlZiBVTklYCisgICAgICAgIHNoX3NvcnQobXRjaHMsTlVMTCxmYywwLDAs ZmlsZWNhc2UpOyAvKiBTb3J0IHRoZSBmaWxlIGxpc3QgKi8KKyNlbmRpZiAvKiBVTklYICovCisK KyAgICAgICAgd2hpbGUgKDEpIHsgICAgICAgICAgICAgICAgICAgICAvKiBMb29wIHRocm91Z2gg dGhlIGZpbGVzICovCisgICAgICAgICAgICB6bmV4dChsaW5lKTsKKyAgICAgICAgICAgIGlmICgh bGluZVswXSkKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAobXVsdGlwbGUg PT0gMikKKyAgICAgICAgICAgICAgY2ttYWttc2codG1wYnVmLFRNUEJVRlNJWixkaXJidWYsbGlu ZSxOVUxMLE5VTEwpOworICAgICAgICAgICAgaWYgKHhsYXRlKGxpbmUsdG1wYnVmLGluY3Msb3V0 Y3MpIDwgMSkKKyAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKyAgICAgICAgfQor ICAgIH0KKyAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworfQorI2VuZGlmIC8qIE5PQ1NFVFMgKi8K Kworc3RhdGljIGNoYXIgaG9tcHRoYnVmW0NLTUFYUEFUSCsxXTsKKworY2hhciAqCitob21lcGF0 aCgpIHsKKyAgICBpbnQgeDsKKyAgICBleHRlcm4gY2hhciAqIG15aG9tZTsKKyAgICBjaGFyICog aDsKKworICAgIGggPSBteWhvbWUgPyBteWhvbWUgOiB6aG9tZSgpOworICAgIGhvbXB0aGJ1Zlsw XSA9IE5VTDsKKyNpZmRlZiBVTklYT1JPU0sKKyAgICB4ID0gY2tzdHJuY3B5KGhvbXB0aGJ1Zixo LENLTUFYUEFUSCsxKTsKKyAgICBpZiAoeCA8PSAwKSB7CisgICAgICAgIGhvbXB0aGJ1ZlswXSA9 ICcvJzsKKyAgICAgICAgaG9tcHRoYnVmWzFdID0gTlVMOworICAgIH0gZWxzZSBpZiAoeCA8IENL TUFYUEFUSCAtIDIgJiYgaG9tcHRoYnVmW3gtMV0gIT0gJy8nKSB7CisgICAgICAgIGhvbXB0aGJ1 Zlt4XSA9ICcvJzsKKyAgICAgICAgaG9tcHRoYnVmW3grMV0gPSBOVUw7CisgICAgfQorICAgIHJl dHVybihob21wdGhidWYpOworI2Vsc2UKKyNpZmRlZiBTVFJBVFVTCisgICAgaWYgKHN0cmxlbiho KSA8IENLTUFYUEFUSCkKKyAgICAgIHNwcmludGYoaG9tcHRoYnVmLCIlcz4iLGgpOwkvKiBTQUZF ICovCisgICAgcmV0dXJuKGhvbXB0aGJ1Zik7CisjZWxzZQorICAgIHJldHVybihoKTsKKyNlbmRp ZiAvKiBTVFJBVFVTICovCisjZW5kaWYgLyogVU5JWE9ST1NLICovCit9CisKKy8qICBEIE8gTCBP IEcgIC0tICBEbyB0aGUgbG9nIGNvbW1hbmQgICovCisKK2ludAorZG9sb2coeCkgaW50IHg7IHsK KyAgICBpbnQgeSwgZGlzcDsgY2hhciAqcyA9IE5VTEwsICogcCA9IE5VTEwsICogcSA9IE5VTEw7 CisgICAgZXh0ZXJuIGludCBpc2d1ZXN0OworI2lmZGVmIFpGTlFGUAorICAgIHN0cnVjdCB6Zm5m cCAqIGZucDsKKyNlbmRpZiAvKiBaRk5RRlAgKi8KKworICAgIGlmIChpc2d1ZXN0KSB7CisgICAg ICAgIHByaW50ZigiP0Fub255bW91cyBsb2cgY3JlYXRpb24gbm90IGFsbG93ZWRcbiIpOworICAg ICAgICByZXR1cm4oLTkpOworICAgIH0KKyAgICBzd2l0Y2ggKHgpIHsgICAgICAgICAgICAgICAg ICAgICAgICAvKiBXaGljaCBsb2cuLi4gKi8KKworI2lmZGVmIERFQlVHCisgICAgICBjYXNlIExP R0Q6CisgICAgICAgIHEgPSAiZGVidWcubG9nIjsKKyAgICAgICAgeSA9IGNtb2ZpKCJOYW1lIG9m IGRlYnVnZ2luZyBsb2cgZmlsZSIscSwmcyx4eHN0cmluZyk7CisgICAgICAgIGJyZWFrOworI2Vu ZGlmIC8qIERFQlVHICovCisKKyAgICAgIGNhc2UgTE9HUDoKKyAgICAgICAgcSA9ICJwYWNrZXQu bG9nIjsKKyAgICAgICAgeSA9IGNtb2ZpKCJOYW1lIG9mIHBhY2tldCBsb2cgZmlsZSIscSwmcyx4 eHN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisjaWZuZGVmIE5PTE9DQUwKKyAgICAgIGNhc2Ug TE9HUzoKKyAgICAgICAgcSA9ICJzZXNzaW9uLmxvZyI7CisgICAgICAgIHkgPSBjbW9maSgiTmFt ZSBvZiBzZXNzaW9uIGxvZyBmaWxlIixxLCZzLHh4c3RyaW5nKTsKKyAgICAgICAgYnJlYWs7Cisj ZW5kaWYgLyogTk9MT0NBTCAqLworCisjaWZkZWYgVExPRworICAgICAgY2FzZSBMT0dUOgorICAg ICAgICBxID0gInRyYW5zYWN0LmxvZyI7CisgICAgICAgIHkgPSBjbW9maSgiTmFtZSBvZiB0cmFu c2FjdGlvbiBsb2cgZmlsZSIscSwmcyx4eHN0cmluZyk7CisgICAgICAgIGJyZWFrOworI2VuZGlm IC8qIFRMT0cgKi8KKworI2lmZGVmIENLTE9HRElBTAorICAgICAgY2FzZSBMT0dNOiB7CisgICAg ICAgICAgaW50IG0sIG47CisgICAgICAgICAgY2hhciBteXBhdGhbQ0tNQVhQQVRIKzFdOworICAg ICAgICAgIHEgPSBDWExPR0ZJTEU7CisgICAgICAgICAgbSA9IGNrc3RybmNweShteXBhdGgsaG9t ZXBhdGgoKSxDS01BWFBBVEgpOworICAgICAgICAgIG4gPSBzdHJsZW4oQ1hMT0dGSUxFKTsKKyAg ICAgICAgICBpZiAobSArIG4gPCBDS01BWFBBVEgpCisgICAgICAgICAgICBja3N0cm5jYXQobXlw YXRoLENYTE9HRklMRSxDS01BWFBBVEgpOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNr c3RybmNweShteXBhdGgsQ1hMT0dGSUxFLENLTUFYUEFUSCk7CisgICAgICAgICAgeSA9IGNtb2Zp KCJOYW1lIG9mIGNvbm5lY3Rpb24gbG9nIGZpbGUiLG15cGF0aCwmcyx4eHN0cmluZyk7CisgICAg ICAgICAgYnJlYWs7CisgICAgICB9CisjZW5kaWYgLyogQ0tMT0dESUFMICovCisKKyAgICAgIGRl ZmF1bHQ6CisgICAgICAgIHByaW50ZigiXG4/VW5rbm93biBsb2cgZGVzaWduYXRvciAtICVkXG4i LHgpOworICAgICAgICByZXR1cm4oLTIpOworICAgIH0KKyAgICBpZiAoeSA8IDApIHJldHVybih5 KTsKKyAgICBpZiAoeSA9PSAyKSB7ICAgICAgICAgICAgICAgICAgICAgICAvKiBJZiB0aGV5IGdh dmUgYSBkaXJlY3RvcnkgbmFtZSAqLworICAgICAgICBpbnQgazsKKyAgICAgICAgY2hhciAqIGRz ID0gIi8iOworICAgICAgICBrID0gc3RybGVuKHMpOworICAgICAgICBpZiAoayA+IDAgJiYgc1tr LTFdID09ICcvJykgZHMgPSAiIjsKKyAgICAgICAgY2ttYWttc2codG1wYnVmLFRNUEJVRlNJWixz LGRzLHEsTlVMTCk7CisgICAgICAgIHMgPSB0bXBidWY7CisgICAgfQorI2lmZGVmIFpGTlFGUAor I2lmZGVmIE9TMk9SVU5JWAorICAgIGlmICgqcyAhPSAnfCcpICAgICAgICAgICAgICAgICAgICAg IC8qIEFsbG93IGZvciBwaXBlcyAqLworI2Vsc2UKKyNpZmRlZiBPU0sKKyAgICBpZiAoKnMgIT0g J3wnKQorI2VuZGlmIC8qIE9TSyAqLworI2VuZGlmIC8qIE9TMk9SVU5JWCAqLworICAgICAgaWYg KChmbnAgPSB6Zm5xZnAocyxUTVBCVUZTSVogLSAxLHRtcGJ1ZikpKSB7CisgICAgICAgICAgaWYg KGZucC0+ZnBhdGgpCisgICAgICAgICAgICBpZiAoKGludCkgc3RybGVuKGZucC0+ZnBhdGgpID4g MCkKKyAgICAgICAgICAgICAgcyA9IGZucC0+ZnBhdGg7CisgICAgICB9IC8qIGVsc2UgaWYgZXJy b3Iga2VlcCBvcmlnaW5hbCBzdHJpbmcgKi8KKyNlbmRpZiAvKiBaRk5RRlAgKi8KKworICAgIGNr c3RybmNweShsaW5lLHMsTElOQlVGU0laKTsKKyAgICBzID0gbGluZTsKKyNpZmRlZiBNQUMKKyAg ICB5ID0gMDsKKyNlbHNlCisKKyAgICBwID0gIm5ldyI7CisjaWZkZWYgVExPRworICAgIGlmICgo eCA9PSBMT0dUICYmIHRsb2dmbXQgPT0gMikgfHwgeCA9PSBMT0dNKQorICAgICAgcCA9ICJhcHBl bmQiOworI2VuZGlmIC8qIFRMT0cgKi8KKworICAgIGlmICgoeSA9IGNta2V5KGRpc3B0YiwyLCJE aXNwb3NpdGlvbiIscCx4eHN0cmluZykpIDwgMCkKKyAgICAgIHJldHVybih5KTsKKyNlbmRpZiAv KiBNQUMgKi8KKyAgICBkaXNwID0geTsKKyAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVy bih5KTsKKworICAgIHN3aXRjaCAoeCkgeworCisjaWZkZWYgREVCVUcKKyAgICAgIGNhc2UgTE9H RDoKKyAgICAgICAgcmV0dXJuKGRlYmxvZyA9IGRlYm9wbihzLGRpc3ApKTsKKyNlbmRpZiAvKiBE RUJVRyAqLworCisjaWZuZGVmIE5PWEZFUgorICAgICAgY2FzZSBMT0dQOgorICAgICAgICByZXR1 cm4ocGt0bG9nID0gcGt0b3BuKHMsZGlzcCkpOworI2VuZGlmIC8qIE5PWEZFUiAqLworCisjaWZu ZGVmIE5PTE9DQUwKKyAgICAgIGNhc2UgTE9HUzoKKyAgICAgICAgc2V0c2VzbG9nKHNlc29wbihz LGRpc3ApKTsKKyAgICAgICAgcmV0dXJuKHNlc2xvZyk7CisjZW5kaWYgLyogTk9MT0NBTCAqLwor CisjaWZkZWYgVExPRworICAgICAgY2FzZSBMT0dUOgorICAgICAgICByZXR1cm4odHJhbG9nID0g dHJhb3BuKHMsZGlzcCkpOworI2VuZGlmIC8qIFRMT0cgKi8KKworI2lmZGVmIENLTE9HRElBTAor ICAgICAgY2FzZSBMT0dNOgorICAgICAgICByZXR1cm4oZGlhbG9nID0gZGlhb3BuKHMsZGlzcCww KSk7CisjZW5kaWYgLyogQ0tMT0dESUFMICovCisKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJl dHVybigtMik7CisgICAgfQorfQorCisjaWZuZGVmIE5PWEZFUgoraW50Citwa3RvcG4ocyxkaXNw KSBjaGFyICpzOyBpbnQgZGlzcDsgeworICAgIHN0YXRpYyBzdHJ1Y3QgZmlsaW5mbyB4eDsKKwor ICAgIGlmICghcykKKyAgICAgIHMgPSAiIjsKKyAgICBpZiAoISpzKQorICAgICAgcmV0dXJuKDAp OworCisgICAgZGVidWcoRjExMSwicGt0b3BuIixzLGRpc3ApOworCisgICAgemNsb3NlKFpQRklM RSk7CisKKyNpZmRlZiBPUzJPUlVOSVgKKyAgICBpZiAoc1swXSA9PSAnfCcpIHsgICAgICAgICAg ICAgICAgICAvKiBQaXBlICovCisgICAgICAgIGNoYXIgKiBwID0gcyArIDE7CisgICAgICAgIGRl YnVnKEYxMTAsInBrdG9wbiBwIixwLDApOworICAgICAgICB3aGlsZSAoKnApIHsKKyAgICAgICAg ICAgIGlmICgqcCAhPSAnICcpCisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZWxz ZQorICAgICAgICAgICAgICBwKys7CisgICAgICAgIH0KKyAgICAgICAgZGVidWcoRjExMCwicGt0 b3BuIHBpcGUiLHAsMCk7CisgICAgICAgIHBrdGxvZyA9IHp4Y21kKFpQRklMRSxwKTsKKyAgICAg ICAgZGVidWcoRjEwMSwicGt0b3BuIHNlc2xvZyIsIiIsc2VzbG9nKTsKKyAgICB9IGVsc2UgeyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGaWxlICovCisjZW5kaWYgLyogT1MyT1JVTklY ICovCisgICAgICAgIGlmIChkaXNwKSB7CisgICAgICAgICAgICB4eC5icyA9IDA7IHh4LmNzID0g MDsgeHgucmwgPSAwOyB4eC5vcmcgPSAwOyB4eC5jYyA9IDA7CisgICAgICAgICAgICB4eC50eXAg PSAwOyB4eC5kc3AgPSBYWUZaX0E7IHh4Lm9zX3NwZWNpZmljID0gIiI7CisgICAgICAgICAgICB4 eC5sYmxvcHRzID0gMDsKKyAgICAgICAgICAgIHBrdGxvZyA9IHpvcGVubyhaUEZJTEUscyxOVUxM LCZ4eCk7CisgICAgICAgIH0gZWxzZSBwa3Rsb2cgPSB6b3Blbm8oWlBGSUxFLHMsTlVMTCxOVUxM KTsKKyAgICAgICAgaWYgKCFwa3Rsb2cgJiYgIXF1aWV0KQorICAgICAgICAgIHByaW50ZigiPyVz IC0gJXNcbiIscyxja19lcnJzdHIoKSk7CisjaWZkZWYgT1MyT1JVTklYCisgICAgfQorI2VuZGlm IC8qIE9TMk9SVU5JWCAqLworICAgIGlmIChwa3Rsb2cgPiAwKQorICAgICAgY2tzdHJuY3B5KHBr dGZpbCxzLENLTUFYUEFUSCsxKTsKKyAgICBlbHNlCisgICAgICAqcGt0ZmlsID0gJ1wwJzsKKyAg ICByZXR1cm4ocGt0bG9nKTsKK30KKyNlbmRpZiAvKiBOT1hGRVIgKi8KKworaW50Cit0cmFvcG4o cyxkaXNwKSBjaGFyICpzOyBpbnQgZGlzcDsgeworI2lmZGVmIFRMT0cKKyAgICBzdGF0aWMgc3Ry dWN0IGZpbGluZm8geHg7CisKKyAgICBpZiAoIXMpCisgICAgICBzID0gIiI7CisgICAgaWYgKCEq cykKKyAgICAgIHJldHVybigwKTsKKworICAgIGRlYnVnKEYxMTEsInRyYW9wbiIscyxkaXNwKTsK KyAgICBkZWJ1ZyhGMTAxLCJ0cmFvcG4gdGxvZ2ZtdCIsIiIsdGxvZ2ZtdCk7CisKKyAgICB6Y2xv c2UoWlRGSUxFKTsKKworI2lmZGVmIE9TMk9SVU5JWAorICAgIGlmICh0bG9nZm10ID09IDIpIHsg ICAgICAgICAgICAgICAgIC8qIEZUUCBmb3JtYXQgaXMgc3BlY2lhbC4uLiAqLworICAgICAgICBW T0lEIGRvaWtsb2coKTsKKyAgICAgICAgaWYgKCFkaXNwKSAgICAgICAgICAgICAgICAgICAgICAv KiBBcHBlbmQ/ICovCisgICAgICAgICAgaWYgKHpjaGtpKHMpID4gLTEpICAgICAgICAgICAgLyog Tm8gLSBkb2VzIGZpbGUgZXhpc3Q/ICovCisgICAgICAgICAgICAoVk9JRCkgemRlbGV0KHMpOyAg ICAgICAgICAgLyogWWVzIC0gZGVsZXRlIGl0LiAqLworICAgICAgICB4ZmVybG9nID0gMTsKKyAg ICAgICAgY2tzdHJuY3B5KHRyYWZpbCxzLENLTUFYUEFUSCk7CisgICAgICAgIG1ha2VzdHIoJnhm ZXJmaWxlLHMpOworICAgICAgICBkb2lrbG9nKCk7CisgICAgICAgIHJldHVybigxKTsKKyAgICB9 CisgICAgaWYgKHNbMF0gPT0gJ3wnKSB7ICAgICAgICAgICAgICAgICAgLyogUGlwZSAqLworICAg ICAgICBjaGFyICogcCA9IHMgKyAxOworICAgICAgICBkZWJ1ZyhGMTEwLCJ0cmFvcG4gcCIscCww KTsKKyAgICAgICAgd2hpbGUgKCpwKSB7CisgICAgICAgICAgICBpZiAoKnAgIT0gJyAnKQorICAg ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgcCsrOwor ICAgICAgICB9CisgICAgICAgIGRlYnVnKEYxMTAsInRyYW9wbiBwaXBlIixwLDApOworICAgICAg ICB0cmFsb2cgPSB6eGNtZChaVEZJTEUscCk7CisgICAgICAgIGRlYnVnKEYxMDEsInRyYW9wbiB0 cmFsb2ciLCIiLHRyYWxvZyk7CisgICAgfQorI2VuZGlmIC8qIE9TMk9SVU5JWCAqLworCisgICAg aWYgKHNbMF0gIT0gJ3wnKSB7ICAgICAgICAgICAgICAgICAgLyogRmlsZSAqLworICAgICAgICBp ZiAoZGlzcCkgeworICAgICAgICAgICAgeHguYnMgPSAwOyB4eC5jcyA9IDA7IHh4LnJsID0gMDsg eHgub3JnID0gMDsgeHguY2MgPSAwOworICAgICAgICAgICAgeHgudHlwID0gMDsgeHguZHNwID0g WFlGWl9BOyB4eC5vc19zcGVjaWZpYyA9ICIiOworICAgICAgICAgICAgeHgubGJsb3B0cyA9IDA7 CisgICAgICAgICAgICB0cmFsb2cgPSB6b3Blbm8oWlRGSUxFLHMsTlVMTCwmeHgpOworICAgICAg ICB9IGVsc2UgdHJhbG9nID0gem9wZW5vKFpURklMRSxzLE5VTEwsTlVMTCk7CisgICAgfQorICAg IGlmICghdHJhbG9nICYmICFxdWlldCkKKyAgICAgIHByaW50ZigiPyVzIC0gJXNcbiIscyxja19l cnJzdHIoKSk7CisgICAgaWYgKHRyYWxvZyA+IDAgJiYgdGxvZ2ZtdCA+IDApIHsKKyAgICAgICAg Y2tzdHJuY3B5KHRyYWZpbCxzLENLTUFYUEFUSCk7CisgICAgICAgIHRsb2coRjExMCwiVHJhbnNh Y3Rpb24gTG9nOiIsdmVyc2lvLDBMKTsKKyNpZm5kZWYgTUFDCisgICAgICAgIHRsb2coRjEwMCxj a3hzeXMsIiIsMEwpOworI2VuZGlmIC8qIE1BQyAqLworICAgICAgICB6dGltZSgmcyk7CisgICAg ICAgIHRsb2coRjEwMCxzLCIiLDBMKTsKKyAgICB9IGVsc2UKKyAgICAgICp0cmFmaWwgPSAnXDAn OworICAgIHJldHVybih0cmFsb2cpOworI2Vsc2UKKyAgICByZXR1cm4oMCk7CisjZW5kaWYgLyog VExPRyAqLworfQorCisjaWZuZGVmIE5PTE9DQUwKK2ludAorc2Vzb3BuKHMsZGlzcCkgY2hhciAq IHM7IGludCBkaXNwOyB7CisgICAgc3RhdGljIHN0cnVjdCBmaWxpbmZvIHh4OworICAgIGV4dGVy biBpbnQgdHNzdGF0ZTsKKworICAgIHRzc3RhdGUgPSAwOyAgICAgICAgICAgICAgICAgICAgICAg IC8qIFNlc3Npb24gbG9nIHRpbWVzdGFtcCBzdGF0ZSAqLworCisgICAgaWYgKCFzKQorICAgICAg cyA9ICIiOworICAgIGlmICghKnMpCisgICAgICByZXR1cm4oMCk7CisKKyAgICBkZWJ1ZyhGMTEx LCJzZXNvcG4iLHMsZGlzcCk7CisKKyAgICB6Y2xvc2UoWlNGSUxFKTsKKworI2lmZGVmIE9TMk9S VU5JWAorICAgIGlmIChzWzBdID09ICd8JykgeyAgICAgICAgICAgICAgICAgIC8qIFBpcGUgKi8K KyAgICAgICAgY2hhciAqIHAgPSBzICsgMTsKKyAgICAgICAgZGVidWcoRjExMCwic2Vzb3BuIHAi LHAsMCk7CisgICAgICAgIHdoaWxlICgqcCkgeworICAgICAgICAgICAgaWYgKCpwICE9ICcgJykK KyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIHAr KzsKKyAgICAgICAgfQorICAgICAgICBkZWJ1ZyhGMTEwLCJzZXNvcG4gcGlwZSIscCwwKTsKKyAg ICAgICAgc2V0c2VzbG9nKHp4Y21kKFpTRklMRSxwKSk7CisgICAgICAgIGRlYnVnKEYxMDEsInNl c29wbiBzZXNsb2ciLCIiLHNlc2xvZyk7CisgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogRmlsZSAqLworI2VuZGlmIC8qIE9TMk9SVU5JWCAqLworICAgICAgICBpZiAo ZGlzcCkgeworICAgICAgICAgICAgeHguYnMgPSAwOyB4eC5jcyA9IDA7IHh4LnJsID0gMDsgeHgu b3JnID0gMDsgeHguY2MgPSAwOworICAgICAgICAgICAgeHgudHlwID0gMDsgeHguZHNwID0gWFlG Wl9BOyB4eC5vc19zcGVjaWZpYyA9ICIiOworICAgICAgICAgICAgeHgubGJsb3B0cyA9IDA7Cisg ICAgICAgICAgICBzZXRzZXNsb2coem9wZW5vKFpTRklMRSxzLE5VTEwsJnh4KSk7CisgICAgICAg IH0gZWxzZQorICAgICAgICAgIHNldHNlc2xvZyh6b3Blbm8oWlNGSUxFLHMsTlVMTCxOVUxMKSk7 CisgICAgICAgIGlmICghc2VzbG9nICYmICFxdWlldCkKKyAgICAgICAgICBwcmludGYoIj8lcyAt ICVzXG4iLHMsY2tfZXJyc3RyKCkpOworI2lmZGVmIE9TMk9SVU5JWAorICAgIH0KKyNlbmRpZiAv KiBPUzJPUlVOSVggKi8KKyAgICBpZiAoc2VzbG9nID4gMCkKKyAgICAgIGNrc3RybmNweShzZXNm aWwscyxDS01BWFBBVEgrMSk7CisgICAgZWxzZQorICAgICAgKnNlc2ZpbCA9ICdcMCc7CisgICAg cmV0dXJuKHNlc2xvZyk7Cit9CisjZW5kaWYgLyogTk9MT0NBTCAqLworI2VuZGlmIC8qIE5PSUNQ ICovCisKK2ludAorZGVib3BuKHMsZGlzcCkgY2hhciAqczsgaW50IGRpc3A7IHsKKyNpZmRlZiBE RUJVRworI2lmZGVmIENLX1VUU05BTUUKKyAgICBleHRlcm4gY2hhciB1bm1fbWNoW10sIHVubV9u YW1bXSwgdW5tX3JlbFtdLCB1bm1fdmVyW10sIHVubV9tb2RbXTsKKyNlbmRpZiAvKiBDS19VVFNO QU1FICovCisjaWZkZWYgT1MyCisgICAgZXh0ZXJuIGNoYXIgY2t4c3lzdGVtW107CisjZW5kaWYg LyogT1MyICovCisgICAgY2hhciAqdHA7CisgICAgc3RhdGljIHN0cnVjdCBmaWxpbmZvIHh4Owor CisgICAgaWYgKCFzKQorICAgICAgcyA9ICIiOworICAgIGlmICghKnMpCisgICAgICByZXR1cm4o MCk7CisKKyAgICB6Y2xvc2UoWkRGSUxFKTsKKworI2lmZGVmIE9TMk9SVU5JWAorICAgIGlmIChz WzBdID09ICd8JykgeyAgICAgICAgICAgICAgICAgIC8qIFBpcGUgKi8KKyAgICAgICAgY2hhciAq IHAgPSBzICsgMTsKKyAgICAgICAgZGVidWcoRjExMCwiZGVib3BuIHAiLHAsMCk7CisgICAgICAg IHdoaWxlICgqcCkgeworICAgICAgICAgICAgaWYgKCpwICE9ICcgJykKKyAgICAgICAgICAgICAg YnJlYWs7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIHArKzsKKyAgICAgICAgfQor ICAgICAgICBkZWJ1ZyhGMTEwLCJkZWJvcG4gcGlwZSIscCwwKTsKKyAgICAgICAgZGVibG9nID0g enhjbWQoWkRGSUxFLHApOworICAgICAgICBkZWJ1ZyhGMTAxLCJkZWJvcG4gZGVibG9nIiwiIixk ZWJsb2cpOworICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZpbGUg Ki8KKyNlbmRpZiAvKiBPUzJPUlVOSVggKi8KKyAgICAgICAgaWYgKGRpc3ApIHsKKyAgICAgICAg ICAgIHh4LmJzID0gMDsgeHguY3MgPSAwOyB4eC5ybCA9IDA7IHh4Lm9yZyA9IDA7IHh4LmNjID0g MDsKKyAgICAgICAgICAgIHh4LnR5cCA9IDA7IHh4LmRzcCA9IFhZRlpfQTsgeHgub3Nfc3BlY2lm aWMgPSAiIjsKKyAgICAgICAgICAgIHh4LmxibG9wdHMgPSAwOworICAgICAgICAgICAgZGVibG9n ID0gem9wZW5vKFpERklMRSxzLE5VTEwsJnh4KTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAg ZGVibG9nID0gem9wZW5vKFpERklMRSxzLE5VTEwsTlVMTCk7CisgICAgICAgIGlmICghZGVibG9n ICYmICFxdWlldCkKKyAgICAgICAgICBwcmludGYoIj8lcyAtICVzXG4iLHMsY2tfZXJyc3RyKCkp OworI2lmZGVmIE9TMk9SVU5JWAorICAgIH0KKyNlbmRpZiAvKiBPUzJPUlVOSVggKi8KKyAgICBp ZiAoZGVibG9nID4gMCkgeworICAgICAgICBja3N0cm5jcHkoZGViZmlsLHMsQ0tNQVhQQVRIKzEp OworICAgICAgICBkZWJ1ZyhGMTEwLCJEZWJ1ZyBMb2cgIix2ZXJzaW8sMCk7CisjaWZuZGVmIE1B QworI2lmZGVmIE9TMgorICAgICAgICBkZWJ1ZyhGMTEwLGNreHN5cyxja3hzeXN0ZW0sMCk7Cisj ZWxzZSAvKiBPUzIgKi8KKyAgICAgICAgZGVidWcoRjEwMCxja3hzeXMsIiIsMCk7CisjZW5kaWYg LyogT1MyICovCisjZW5kaWYgLyogTUFDICovCisjaWZkZWYgQ0tfVVRTTkFNRQorICAgICAgICBp ZiAodW5tX21jaFswXSkgeworICAgICAgICAgICAgZGVidWcoRjExMCwidW5hbWUgbWFjaGluZSIs dW5tX21jaCwwKTsKKyAgICAgICAgICAgIGlmICh1bm1fbW9kWzBdKQorICAgICAgICAgICAgICBk ZWJ1ZyhGMTEwLCJ1bmFtZSBtb2RlbCAgIix1bm1fbW9kLDApOworICAgICAgICAgICAgZGVidWco RjExMCwidW5hbWUgc3lzbmFtZSIsdW5tX25hbSwwKTsKKyAgICAgICAgICAgIGRlYnVnKEYxMTAs InVuYW1lIHJlbGVhc2UiLHVubV9yZWwsMCk7CisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJ1bmFt ZSB2ZXJzaW9uIix1bm1fdmVyLDApOworICAgICAgICB9CisjaWZkZWYgS1RBUkdFVAorICAgICAg ICB7CisgICAgICAgICAgICBjaGFyICogczsgICAgICAgICAgICAgICAgICAgLyogTWFrZWZpbGUg dGFyZ2V0ICovCisgICAgICAgICAgICBzID0gS1RBUkdFVDsKKyAgICAgICAgICAgIGlmICghcykg cyA9ICIiOworICAgICAgICAgICAgaWYgKCEqcykgcyA9ICIodW5rbm93bikiOworICAgICAgICAg ICAgZGVidWcoRjExMCwiYnVpbGQgdGFyZ2V0IixzLDApOworICAgICAgICB9CisjZW5kaWYgLyog S1RBUkdFVCAqLworICAgICAgICBkZWJsb2cgPSAwOworICAgICAgICB6dGltZSgmdHApOworICAg ICAgICBkZWJsb2cgPSAxOworICAgICAgICBkZWJ1ZyhGMTAwLHRwLCIiLDApOworI2VuZGlmIC8q IFVUU05BTUUgKi8KKyAgICAgICAgZGVidWcoRjEwMSwiYnl0ZW9yZGVyIiwiIixieXRlb3JkZXIp OworI2lmbmRlZiBOT0lDUAorI2lmbmRlZiBOT0xPQ0FMCisgICAgICAgIGlmIChsb2NhbCkgewor ICAgICAgICAgICAgZGVidWcoRjExMCwiQWN0aXZlIGNvbm5lY3Rpb246ICIsdHRuYW1lLDApOwor ICAgICAgICAgICAgaWYgKCFuZXR3b3JrKSB7CisgICAgICAgICAgICAgICAgZGVidWcoRjEwMSwi U3BlZWQiLCIiLHNwZWVkKTsKKyAgICAgICAgICAgICAgICBpZiAoaHdwYXJpdHkpCisgICAgICAg ICAgICAgICAgICBkZWJ1ZyhGMTEwLCJQYXJpdHlbaGFyZHdhcmVdIixwYXJuYW0oKGNoYXIpaHdw YXJpdHkpLDApOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgIGRlYnVn KEYxMTAsIlBhcml0eSIscGFybmFtKChjaGFyKXBhcml0eSksMCk7CisgICAgICAgICAgICAgICAg ZGVibG9nID0gMDsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJNb2RlbSIsZ21kbXR5cCgp LDApOworICAgICAgICAgICAgICAgIGRlYmxvZyA9IDE7CisgICAgICAgICAgICB9CisgICAgICAg IH0gZWxzZSB7CisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJBY3RpdmUgY29ubmVjdGlvbjogIiwi bm9uZSIsMCk7CisgICAgICAgIH0KKyNlbmRpZiAvKiBOT0xPQ0FMICovCisjZW5kaWYgLyogTk9J Q1AgKi8KKyAgICB9IGVsc2UgKmRlYmZpbCA9ICdcMCc7CisgICAgcmV0dXJuKGRlYmxvZyk7Cisj ZWxzZQorICAgIHJldHVybigwKTsKKyNlbmRpZiAvKiBNQUMgKi8KK30KKworCisvKiAgQyBLIEQg QSBUIEUgIC0tICBSZXR1cm5zIGN1cnJlbnQgZGF0ZS90aW1lIGluIHN0YW5kYXJkIGZvcm1hdCAg Ki8KKworc3RhdGljIGNoYXIgbm93YnVmWzE4XTsKKworY2hhciAqCitja2RhdGUoKSB7CisgICAg ZXh0ZXJuIHN0cnVjdCBrZXl0YWIgY21vbnRoc1tdOworICAgIGludCB4OworICAgIGNoYXIgKiB0 OyAgICAgICAgICAgICAgICAgICAvKiBTdWJzdGl0dXRlIHRvZGF5J3MgZGF0ZSAqLworICAgIGNo YXIgZGJ1ZlszMl07CisgICAgenRpbWUoJnQpOworCisvKiAgMDEyMzQ1Njc4OTAxMjM0NTY3ODkw MTIzICovCisvKiAgU2F0IEp1bCAgNCAxMjoxNjo0MyAxOTk4ICovCisKKyAgICBja3N0cm5jcHko ZGJ1Zix0LDMyKTsKKyAgICB0ID0gZGJ1ZjsKKyAgICBkZWJ1ZyhGMTEwLCJja2RhdGUgZGJ1ZiIs ZGJ1ZiwwKTsKKyAgICBub3didWZbMF0gPSB0WzIwXTsKKyAgICBub3didWZbMV0gPSB0WzIxXTsK KyAgICBub3didWZbMl0gPSB0WzIyXTsKKyAgICBub3didWZbM10gPSB0WzIzXTsKKworICAgIG5v d2J1Zls0XSA9IE5VTDsKKyAgICBkZWJ1ZyhGMTEwLCJja2RhdGUgbm93YnVmIixub3didWYsMCk7 CisKKyAgICB0WzddID0gTlVMOworICAgIGlmICgoeCA9IGxvb2t1cChjbW9udGhzLHQrNCwxMixO VUxMKSkgPCAwKSB7CisgICAgICAgIGRlYnVnKEYxMTAsImNrZGF0ZSBiYWQgbW9udGgiLHQsMCk7 CisgICAgICAgIHJldHVybigiPEJBRF9NT05USD4iKTsKKyAgICB9CisgICAgc3ByaW50Zihub3di dWYrNCwiJTAyZCIseCk7ICAgICAgICAgLyogU0FGRSAqLworICAgIG5vd2J1Zls2XSA9ICh0Wzhd ID09IFNQKSA/ICcwJyA6IHRbOF07CisgICAgbm93YnVmWzddID0gdFs5XTsKKyAgICBub3didWZb OF0gPSAnICc7CisKKyAgICBub3didWZbOV0gPSBOVUw7CisgICAgZGVidWcoRjExMCwiY2tkYXRl IG5vd2J1ZiIsbm93YnVmLDApOworCisgICAgZm9yICh4ID0gMTE7IHggPCAxOTsgeCsrKSBub3di dWZbeC0yXSA9IHRbeF07CisgICAgbm93YnVmWzE3XSA9IE5VTDsKKyAgICBkZWJ1ZyhGMTEwLCJj a2RhdGUgbm93YnVmIixub3didWYsMCk7CisKKyAgICByZXR1cm4oKGNoYXIgKilub3didWYpOwor fQorCisjaWZuZGVmIE5PSUNQCisjaWZkZWYgQ0tMT0dESUFMCisKKy8qCisgIGZjID0gMCBmb3Ig aW5pdGlhbCBvcGVuLCBtZWFuaW5nIG9wZW4sIHRoZW4gY2xvc2UgaW1tZWRpYXRlbHkuCisgIGZj ID4gMCBmb3Igc3Vic2VxdWVudCBvcGVucywgbWVhbmluZyBvcGVuIGZvciB1c2UsIGxlYXZlIG9w ZW4uCisqLworaW50CitkaWFvcG4ocyxkaXNwLGZjKSBjaGFyICpzOyBpbnQgZGlzcCwgZmM7IHsK KyAgICBzdGF0aWMgc3RydWN0IGZpbGluZm8geHg7CisKKyAgICBpZiAoIXMpCisgICAgICBzID0g IiI7CisgICAgaWYgKCEqcykKKyAgICAgIHJldHVybigwKTsKKworICAgIGRlYnVnKEYxMTAsImRp YW9wbiBsb2ciLHMsMCk7CisgICAgZGVidWcoRjEwMSwiZGlhb3BuIGZjIixzLGZjKTsKKyAgICBk ZWJ1ZyhGMTAxLCJkaWFvcG4gZGlzcCAxIixzLGRpc3ApOworICAgIGlmIChmYykgZGlzcCA9IDE7 ICAgICAgICAgICAgICAgICAgIC8qIEZvcmNlIGFwcGVuZCBpZiBvcGVuIGZvciB1c2UgKi8KKyAg ICBkZWJ1ZyhGMTAxLCJkaWFvcG4gZGlzcCAyIixzLGRpc3ApOworCisgICAgemNsb3NlKFpESUZJ TCk7ICAgICAgICAgICAgICAgICAgICAgLyogSW4gY2FzZSBhIGxvZyB3YXMgYWxyZWFkeSBvcGVu ICovCisKKyNpZmRlZiBPUzJPUlVOSVgKKyAgICBpZiAoc1swXSA9PSAnfCcpIHsgICAgICAgICAg ICAgICAgICAvKiBQaXBlICovCisgICAgICAgIGNoYXIgKiBwID0gcyArIDE7CisgICAgICAgIGRl YnVnKEYxMTAsImRpYW9wbiBwIixwLDApOworICAgICAgICB3aGlsZSAoKnApIHsKKyAgICAgICAg ICAgIGlmICgqcCAhPSAnICcpCisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZWxz ZQorICAgICAgICAgICAgICBwKys7CisgICAgICAgIH0KKyAgICAgICAgZGVidWcoRjExMCwiZGlh b3BuIHBpcGUiLHAsMCk7CisgICAgICAgIGRpYWxvZyA9IHp4Y21kKFpESUZJTCxwKTsKKyAgICAg ICAgZGVidWcoRjEwMSwiZGlhb3BuIGRpYWxvZyIsIiIsZGlhbG9nKTsKKyAgICB9IGVsc2UgeyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGaWxlICovCisjZW5kaWYgLyogT1MyT1JVTklY ICovCisgICAgICAgIGlmIChkaXNwKSB7CisgICAgICAgICAgICB4eC5icyA9IDA7IHh4LmNzID0g MDsgeHgucmwgPSAwOyB4eC5vcmcgPSAwOyB4eC5jYyA9IDA7CisgICAgICAgICAgICB4eC50eXAg PSAwOyB4eC5kc3AgPSBYWUZaX0E7IHh4Lm9zX3NwZWNpZmljID0gIiI7CisgICAgICAgICAgICB4 eC5sYmxvcHRzID0gMDsKKyAgICAgICAgICAgIGRpYWxvZyA9IHpvcGVubyhaRElGSUwscyxOVUxM LCZ4eCk7CisgICAgICAgIH0gZWxzZSBkaWFsb2cgPSB6b3Blbm8oWkRJRklMLHMsTlVMTCxOVUxM KTsKKyAgICAgICAgaWYgKCFkaWFsb2cpCisgICAgICAgICAgcHJpbnRmKCI/JXMgLSAlc1xuIixz LGNrX2VycnN0cigpKTsKKyNpZmRlZiBPUzJPUlVOSVgKKyAgICB9CisjZW5kaWYgLyogT1MyT1JV TklYICovCisgICAgaWYgKGRpYWxvZyA+IDApCisgICAgICBja3N0cm5jcHkoZGlhZmlsLHMsQ0tN QVhQQVRIKzEpOworICAgIGVsc2UKKyAgICAgICpkaWFmaWwgPSAnXDAnOworICAgIGlmIChmYyA9 PSAwKSAgICAgICAgICAgICAgICAgICAgICAgIC8qIEluaXRpYWwgb3BlbiAqLworICAgICAgemNs b3NlKFpESUZJTCk7ICAgICAgICAgICAgICAgICAgIC8qIGNsb3NlIGl0ICovCisgICAgcmV0dXJu KGRpYWxvZyk7Cit9CisjZW5kaWYgLyogQ0tMT0dESUFMICovCisKKyNpZm5kZWYgTk9TSE9XCisK Ky8qICBTSE9XIGNvbW1hbmQgcm91dGluZXMgKi8KKworY2hhciAqCitzaG94bSgpIHsKKyAgICBj aGFyICogczsKKyAgICBzd2l0Y2ggKGJpbmFyeSkgeworICAgICAgY2FzZSBYWUZUX1Q6IHMgPSAi dGV4dCI7ICAgICAgICAgYnJlYWs7CisjaWZkZWYgVk1TCisgICAgICBjYXNlIFhZRlRfQjogcyA9 ICJiaW5hcnkgZml4ZWQiOyBicmVhazsKKyAgICAgIGNhc2UgWFlGVF9JOiBzID0gImltYWdlIjsg ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBYWUZUX0w6IHMgPSAibGFiZWxlZCI7ICAgICAgYnJl YWs7CisgICAgICBjYXNlIFhZRlRfVTogcyA9ICJiaW5hcnkgdW5kZWYiOyBicmVhazsKKyNlbHNl CisjaWZkZWYgTUFDCisgICAgICBjYXNlIFhZRlRfQjogcyA9ICJiaW5hcnkiOyAgICAgICBicmVh azsKKyAgICAgIGNhc2UgWFlGVF9NOiBzID0gIm1hY2JpbmFyeSI7ICAgIGJyZWFrOworI2Vsc2UK KyAgICAgIGNhc2UgWFlGVF9COiBzID0gImJpbmFyeSI7ICAgICAgIGJyZWFrOworI2lmZGVmIENL X0xBQkVMRUQKKyAgICAgIGNhc2UgWFlGVF9MOiBzID0gImxhYmVsZWQiOyAgICAgIGJyZWFrOwor I2VuZGlmIC8qIENLX0xBQkVMRUQgKi8KKyNlbmRpZiAvKiBNQUMgKi8KKyNlbmRpZiAvKiBWTVMg Ki8KKyAgICAgIGRlZmF1bHQ6IHMgPSAidW5rbm93biI7IGJyZWFrOworICAgIH0KKyAgICByZXR1 cm4ocyk7Cit9CisKKyNpZm5kZWYgTk9YRkVSCitWT0lEICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogU0hPVyBUUkFOU0ZFUiAqLworc2hveGZlcigpIHsKKyAgICBleHRlcm4g aW50IGRvY3JjLCB1c2VwaXBlcywgeGZyeGxhLCB3aGVyZWZsZzsKKyAgICBleHRlcm4gY2hhciAq IHhmcm1zZzsKKyAgICBwcmludGYoIlxuIik7CisgICAgcHJpbnRmKCIgVHJhbnNmZXIgQmVsbDog JXNcbiIsc2hvd29mZih4ZnJiZWwpKTsKKyAgICBwcmludGYoIiBUcmFuc2ZlciBJbnRlcnJ1cHRp b246ICVzXG4iLHNob3dvZmYoeGZyaW50KSk7CisgICAgcHJpbnRmKCIgVHJhbnNmZXIgQ2FuY2Vs bGF0aW9uOiAlc1xuIixzaG93b2ZmKHhmcmNhbikpOworI2lmbmRlZiBOT0NTRVRTCisgICAgcHJp bnRmKCIgVHJhbnNmZXIgVHJhbnNsYXRpb246ICAlc1xuIixzaG93b2ZmKHhmcnhsYSkpOworICAg IHByaW50ZigiIFRyYW5zZmVyIENoYXJhY3Rlci1zZXQ6ICIpOworICAgIGlmICh0Y2hhcnNldCA9 PSBUQ19UUkFOU1ApCisgICAgICBwcmludGYoIlRyYW5zcGFyZW50XG4iKTsKKyAgICBlbHNlCisg ICAgICBwcmludGYoIiVzXG4iLHRjc2luZm9bdGNoYXJzZXRdLmtleXdvcmQpOworI2VuZGlmIC8q IE5PQ1NFVFMgKi8KKyAgICBwcmludGYoIiBUcmFuc2ZlciBDUkMtY2FsY3VsYXRpb246ICVzXG4i LHNob3dvZmYoZG9jcmMpKTsKKyAgICBwcmludGYoIiBUcmFuc2ZlciBEaXNwbGF5OiAiKTsKKyAg ICBzd2l0Y2ggKGZkaXNwbGEpIHsKKyAgICAgIGNhc2UgWFlGRF9OOiBwcmludGYoIiVzXG4iLCJu b25lIik7IGJyZWFrOworICAgICAgY2FzZSBYWUZEX1I6IHByaW50ZigiJXNcbiIsInNlcmlhbCIp OyBicmVhazsKKyAgICAgIGNhc2UgWFlGRF9DOiBwcmludGYoIiVzXG4iLCJmdWxsc2NyZWVuIik7 IGJyZWFrOworICAgICAgY2FzZSBYWUZEX1M6IHByaW50ZigiJXNcbiIsImNydCIpOyBicmVhazsK KyAgICAgIGNhc2UgWFlGRF9COiBwcmludGYoIiVzXG4iLCJicmllZiIpOyBicmVhazsKKyAgICAg IGNhc2UgWFlGRF9HOiBwcmludGYoIiVzXG4iLCJndWkiKTsgYnJlYWs7CisgICAgfQorICAgIHBy aW50ZigiIFRyYW5zZmVyIE1lc3NhZ2U6ICVzXG4iLCB4ZnJtc2cgPyB4ZnJtc2cgOiAiKG5vbmUp Iik7CisgICAgcHJpbnRmKCIgVHJhbnNmZXIgTG9ja2luZy1zaGlmdDogIik7CisgICAgaWYgKGxz Y2FwdSA9PSAyKSB7CisgICAgICAgIHByaW50ZigiZm9yY2VkIik7CisgICAgfSBlbHNlIHsKKyAg ICAgICAgcHJpbnRmKCIlcyIsIChsc2NhcHIgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKSk7Cisg ICAgICAgIGlmIChsc2NhcHIpIHByaW50ZigiLCVzJXMiLCAobHNjYXB1ID8gIiAiIDogIiBub3Qg IiksICJ1c2VkIik7CisgICAgfQorICAgIHByaW50ZigiXG4gVHJhbnNmZXIgTW9kZTogJXNcbiIs CisgICAgICAgICAgIHhmZXJtb2RlID09IFhNT0RFX0EgPworICAgICAgICAgICAiYXV0b21hdGlj IiA6CisgICAgICAgICAgICJtYW51YWwiCisgICAgICAgICAgICk7CisgICAgcHJpbnRmKCIgVHJh bnNmZXIgUGlwZXM6ICVzXG4iLCBzaG93b2ZmKHVzZXBpcGVzKSk7CisgICAgcHJpbnRmKCIgVHJh bnNmZXIgUHJvdG9jb2w6ICVzXG4iLHB0YWJbcHJvdG9jb2xdLnBfbmFtZSk7CisgICAgcHJpbnRm KCIgVHJhbnNmZXIgUmVwb3J0OiAlc1xuIixzaG93b2ZmKHdoZXJlZmxnKSk7CisgICAgcHJpbnRm KCIgVHJhbnNmZXIgU2xvdy1zdGFydDogJXNcbiIsc2hvd29mZihzbG9zdGFydCkpOworICAgIHBy aW50ZigiXG4iKTsKK30KKyNlbmRpZiAvKiBOT1hGRVIgKi8KKworVk9JRAorc2hvZmxvdygpIHsK KyAgICBpbnQgaSwgeDsKKyAgICBleHRlcm4gaW50IGN4Zmxvd1tdLCBjeHR5cGUsIG5jeG5hbWUs IG5mbG9uYW1lLCBhdXRvZmxvdzsKKyAgICBleHRlcm4gY2hhciAqIGN4bmFtZVtdOworICAgIHBy aW50ZigiXG5Db25uZWN0aW9uIHR5cGU6ICAgICAgICAlc1xuIixjeG5hbWVbY3h0eXBlXSk7Cisg ICAgaWYgKGF1dG9mbG93KSB7CisgICAgICAgIHByaW50ZigiQ3VycmVudCBmbG93LWNvbnRyb2w6 ICAgJXNcbiIsIGZsb25hbWVbY3hmbG93W2N4dHlwZV1dKTsKKyAgICAgICAgcHJpbnRmKCJTd2l0 Y2hlcyBhdXRvbWF0aWNhbGx5OiB5ZXNcbiIpOworICAgIH0gZWxzZSB7CisgICAgICAgIHByaW50 ZigiQ3VycmVudCBmbG93LWNvbnRyb2w6ICAgJXNcbiIsIGZsb25hbWVbZmxvd10pOworICAgICAg ICBwcmludGYoIlN3aXRjaGVzIGF1dG9tYXRpY2FsbHk6IG5vXG4iKTsKKyAgICB9CisgICAgcHJp bnRmKCJcbkRlZmF1bHRzIGJ5IGNvbm5lY3Rpb24gdHlwZTpcbiIpOworICAgIGRlYnVnKEYxMTEs InNob2Zsb3cgY3h0eXBlIixjeG5hbWVbY3h0eXBlXSxjeHR5cGUpOworICAgIGRlYnVnKEYxMDEs InNob2Zsb3cgZmxvdyIsIiIsZmxvdyk7CisgICAgZm9yIChpID0gMDsgaSA8IG5jeG5hbWU7IGkr KykgeworI2lmZGVmIE5PTE9DQUwKKyAgICAgICAgaWYgKGkgPiAwKSBicmVhazsKKyNlbmRpZiAv KiBOT0xPQ0FMICovCisjaWZuZGVmIE5FVENPTk4KKyAgICAgICAgaWYgKGkgPiAyKSBicmVhazsK KyNlbmRpZiAvKiBORVRDT05OICovCisjaWZuZGVmIERFQ05FVAorICAgICAgICBpZiAoaSA9PSBD WFRfREVDTkVUKSBjb250aW51ZTsKKyNlbmRpZiAvKiBERUNORVQgKi8KKyNpZm5kZWYgREVDTkVU CisjaWZuZGVmIFNVUEVSTEFUCisgICAgICAgIGlmIChpID09IENYVF9MQVQpIGNvbnRpbnVlOwor I2VuZGlmIC8qIFNVUEVSTEFUICovCisjZW5kaWYgLyogREVDTkVUICovCisjaWZuZGVmIENLX05F VEJJT1MKKyAgICAgICAgaWYgKGkgPT0gQ1hUX05FVEJJT1MpIGNvbnRpbnVlOworI2VuZGlmIC8q IENLX05FVEJJT1MgKi8KKyNpZm5kZWYgTlBJUEUKKyAgICAgICAgaWYgKGkgPT0gQ1hUX05QSVBF KSBjb250aW51ZTsKKyNlbmRpZiAvKiBOUElQRSAqLworI2lmbmRlZiBORVRDTUQKKyAgICAgICAg aWYgKGkgPT0gQ1hUX1BJUEUpIGNvbnRpbnVlOworI2VuZGlmIC8qIE5FVENNRCAqLworI2lmbmRl ZiBBTllYMjUKKyAgICAgICAgaWYgKGkgPT0gQ1hUX1gyNSkgY29udGludWU7CisjZW5kaWYgLyog QU5ZWDI1ICovCisgICAgICAgIHggPSBjeGZsb3dbaV07CisgICAgICAgIGRlYnVnKEYxMDEsInNo b2Zsb3cgeCIsIiIseCk7CisgICAgICAgIGlmICh4IDwgbmZsb25hbWUpCisgICAgICAgICAgcHJp bnRmKCIgICUtMTRzOiAlc1xuIixjeG5hbWVbaV0sZmxvbmFtZVt4XSk7CisgICAgICAgIGVsc2UK KyAgICAgICAgICBwcmludGYoIiAgJS0xNHM6ICglZClcbiIsY3huYW1lW2ldLHgpOworICAgIH0K KyAgICBwcmludGYoIlxuIik7Cit9CisKKyNpZm5kZWYgTk9MT0NBTAorI2lmZGVmIEFOWVgyNQor aW50CitzaG94MjUobikgaW50IG47IHsKKyAgICBpZiAobmV0dHlwZSA9PSBORVRfU1gyNSkgewor ICAgICAgICBwcmludGYoIlN1bkxpbmsgWC4yNSBWJWQuJWQiLHgyNXZlciAvIDEwLHgyNXZlciAl IDEwKTsKKyAgICAgICAgaWYgKHR0bnByb3RvID09IE5QX1gzKSBwcmludGYoIiwgUEFEIFguMywg WC4yOCwgWC4yOSBwcm90b2NvbCwiKTsKKyAgICAgICAgcHJpbnRmKCJcbiIpOworICAgICAgICBp ZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKC0xKTsgZWxzZSBu ID0gMDsKKyAgICAgICAgcHJpbnRmKCIgUmV2ZXJzZSBjaGFyZ2UgY2FsbCAlcyIsCisgICAgICAg ICAgICAgICByZXZjYWxsID8gInNlbGVjdGVkIiA6ICJub3Qgc2VsZWN0ZWQiKTsKKyAgICAgICAg cHJpbnRmICgiLCBDbG9zZWQgdXNlciBncm91cCAiKTsKKyAgICAgICAgaWYgKGNsb3NnciA+IC0x KQorICAgICAgICAgIHByaW50ZiAoIiVkIixjbG9zZ3IpOworICAgICAgICBlbHNlCisgICAgICAg ICAgcHJpbnRmICgibm90IHNlbGVjdGVkIik7CisgICAgICAgIHByaW50ZigiXG4iKTsKKyAgICAg ICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigtMSk7IGVs c2UgbiA9IDA7CisgICAgICAgIHByaW50ZigiIENhbGwgdXNlciBkYXRhICVzLlxuIiwgY3VkYXRh ID8gdWRhdGEgOiAibm90IHNlbGVjdGVkIik7CisgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAt IDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oLTEpOyBlbHNlIG4gPSAwOworICAgIH0gZWxzZSBp ZiAobmV0dHlwZSA9PSBORVRfVlgyNSkgeworICAgICAgICBpZiAodHRucHJvdG8gPT0gTlBfWDMp IHByaW50ZigiLCBQQUQgWC4zLCBYLjI4LCBYLjI5IHByb3RvY29sLCIpOworICAgICAgICBwcmlu dGYoIlxuIik7CisgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgp KSByZXR1cm4oLTEpOyBlbHNlIG4gPSAwOworICAgICAgICBwcmludGYoIiBSZXZlcnNlIGNoYXJn ZSBjYWxsICVzIiwKKyAgICAgICAgICAgICAgIHJldmNhbGwgPyAic2VsZWN0ZWQiIDogIm5vdCBz ZWxlY3RlZCIpOworICAgICAgICBwcmludGYgKCIsIENsb3NlZCB1c2VyIGdyb3VwIFt1bnN1cHBv cnRlZF0iKTsKKyAgICAgICAgaWYgKGNsb3NnciA+IC0xKQorICAgICAgICAgIHByaW50ZiAoIiVk IixjbG9zZ3IpOworICAgICAgICBlbHNlCisgICAgICAgICAgcHJpbnRmICgibm90IHNlbGVjdGVk Iik7CisgICAgICAgIHByaW50ZiAoIiwiKTsKKyAgICAgICAgcHJpbnRmKCJcbiIpOworICAgICAg ICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKC0xKTsgZWxz ZSBuID0gMDsKKyAgICAgICAgcHJpbnRmKCIgQ2FsbCB1c2VyIGRhdGEgJXMuXG4iLCBjdWRhdGEg PyB1ZGF0YSA6ICJub3Qgc2VsZWN0ZWQiKTsKKyAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0g MykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigtMSk7IGVsc2UgbiA9IDA7CisgICAgfSBlbHNlIGlm IChuZXR0eXBlID09IE5FVF9JWDI1KSB7CisgICAgICAgIHByaW50ZigiQUlYIE5QSSBYLjI1XG4i KTsKKyAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVy bigtMSk7IGVsc2UgbiA9IDA7CisgICAgICAgIHByaW50ZigiXG4gUmV2ZXJzZSBjaGFyZ2UgY2Fs bCAlcyIsCisgICAgICAgICAgICAgICByZXZjYWxsID8gInNlbGVjdGVkIiA6ICJub3Qgc2VsZWN0 ZWQiKTsKKyAgICAgICAgcHJpbnRmICgiLCBDbG9zZWQgdXNlciBncm91cCBbdW5zdXBwb3J0ZWRd Iik7CisgICAgICAgIGlmIChjbG9zZ3IgPiAtMSkKKyAgICAgICAgICBwcmludGYgKCIlZCIsY2xv c2dyKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIHByaW50ZiAoIm5vdCBzZWxlY3RlZCIpOwor ICAgICAgICBwcmludGYgKCIsIik7CisgICAgICAgIHByaW50ZigiXG4gQ2FsbCB1c2VyIGRhdGEg JXMuXG4iLCBjdWRhdGEgPyB1ZGF0YSA6ICJub3Qgc2VsZWN0ZWQiKTsKKyAgICB9CisgICAgcmV0 dXJuKG4pOworfQorCisjaWZuZGVmIElCTVgyNQoraW50CitzaG9wYWQobikgaW50IG47IHsKKyAg ICBpbnQgaTsKKyAgICBwcmludGYoIlxuWC4zIFBBRCBQYXJhbWV0ZXJzOlxuIik7CisgICAgaWYg KCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigtMSk7IGVsc2UgbiA9 IDA7CisgICAgZm9yIChpID0gMDsgaSA8IG5wYWR4MzsgaSsrKSB7CisgICAgICAgIHByaW50Zigi IFslZF0gJXMgJWRcbiIscGFkeDN0YWJbaV0ua3d2YWwscGFkeDN0YWJbaV0ua3dkLAorICAgICAg ICAgICAgICAgcGFkcGFybXNbcGFkeDN0YWJbaV0ua3d2YWxdKTsKKyAgICAgICAgaWYgKCsrbiA+ IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigtMSk7IGVsc2UgbiA9IDA7Cisg ICAgfQorICAgIHJldHVybihuKTsKK30KKyNlbmRpZiAvKiBJQk1YMjUgKi8KKyNlbmRpZiAvKiBB TllYMjUgKi8KKworVk9JRAorc2hvcGFyYygpIHsKKyAgICBleHRlcm4gaW50IHJlbGlhYmxlLCBz dG9wYml0cywgY2xzb25kaXNjOworICAgIGludCBpOyBjaGFyICpzOworICAgIGxvbmcgeno7CisK KyNpZmRlZiBORVdGVFAKKyAgICBpZiAoZnRwaXNjb25uZWN0ZWQoKSkgeworICAgICAgICBzaG9m dHAoMSk7CisgICAgICAgIHByaW50ZigiXG4iKTsKKyAgICB9CisjZW5kaWYgLyogTkVXRlRQICov CisKKyAgICBwcmludGYoIkNvbW11bmljYXRpb25zIFBhcmFtZXRlcnM6XG4iKTsKKworICAgIGlm IChuZXR3b3JrCisjaWZkZWYgSUtTRAorICAgICAgICAgfHwgaW5zZXJ2ZXIKKyNlbmRpZiAvKiBJ S1NEICovCisgICAgICAgICApIHsKKyAgICAgICAgcHJpbnRmKCIgTmV0d29yayBIb3N0OiAlcyVz Iix0dG5hbWUsCisgICAgICAgICAgICAgICAocmVsaWFibGUgPT0gU0VUX09OIHx8IChyZWxpYWJs ZSA9PSBTRVRfQVVUTyAmJiAhbG9jYWwpCisjaWZkZWYgVE5fQ09NUE9SVAorICAgICAgICAgICAg ICAgJiYgIWlzdG5jb21wb3J0KCkKKyNlbmRpZiAvKiBUTl9DT01QT1JUICovCisjaWZkZWYgSUtT RAorICAgICAgICAgICAgICAgfHwgaW5zZXJ2ZXIKKyNlbmRpZiAvKiBJS1NEICovCisgICAgICAg ICAgICAgICApID8gIiAocmVsaWFibGUpIiA6ICIiKTsKKyNpZmRlZiBUTl9DT01QT1JUCisgICAg ICAgIGlmIChpc3RuY29tcG9ydCgpKSB7CisgICAgICAgICAgICBpbnQgbW9kZW1zdGF0ZTsKKyAg ICAgICAgICAgIGNoYXIgKiBvZmxvdywgKiBpZmxvdyA9ICIiLCAqIHBhcml0eSwgKiBzdG9wc2l6 ZSwgKiBzaWduYXR1cmU7CisgICAgICAgICAgICBpbnQgYmF1ZCA9IHRuY19nZXRfYmF1ZCgpOwor CisgICAgICAgICAgICBzd2l0Y2ggKHRuY19nZXRfb2Zsb3coKSkgeworICAgICAgICAgICAgICBj YXNlIFROQ19DVExfT0ZMT1dfTk9ORToKKyAgICAgICAgICAgICAgICBvZmxvdyA9ICJub25lIjsK KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBUTkNfQ1RMX09GTE9X X1hPTl9YT0ZGOgorICAgICAgICAgICAgICAgIG9mbG93ID0gInhvbi94b2ZmIjsKKyAgICAgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBUTkNfQ1RMX09GTE9XX1JUU19DVFM6 CisgICAgICAgICAgICAgICAgb2Zsb3cgPSAicnRzL2N0cyI7CisgICAgICAgICAgICAgICAgYnJl YWs7CisgICAgICAgICAgICAgIGNhc2UgVE5DX0NUTF9PRkxPV19EQ0Q6CisgICAgICAgICAgICAg ICAgb2Zsb3cgPSAiZGNkIjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg Y2FzZSBUTkNfQ1RMX09GTE9XX0RTUjoKKyAgICAgICAgICAgICAgICBvZmxvdyA9ICJkc3IiOwor ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg ICAgICAgIG9mbG93ID0gIih1bmtub3duKSI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBz d2l0Y2ggKHRuY19nZXRfaWZsb3coKSkgeworICAgICAgICAgICAgICBjYXNlIFROQ19DVExfSUZM T1dfTk9ORToKKyAgICAgICAgICAgICAgICBpZmxvdyA9ICJub25lIjsKKyAgICAgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBUTkNfQ1RMX0lGTE9XX1hPTl9YT0ZGOgorICAg ICAgICAgICAgICAgIGlmbG93ID0gInhvbi94b2ZmIjsKKyAgICAgICAgICAgICAgICBicmVhazsK KyAgICAgICAgICAgICAgY2FzZSBUTkNfQ1RMX0lGTE9XX1JUU19DVFM6CisgICAgICAgICAgICAg ICAgaWZsb3cgPSAicnRzL2N0cyI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg ICAgIGNhc2UgVE5DX0NUTF9JRkxPV19EVFI6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgaWZsb3cgPSBvZmxvdzsKKyAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIHN3aXRjaCAodG5jX2dldF9wYXJpdHkoKSkgeworICAgICAg ICAgICAgICBjYXNlIFROQ19QQVJfTk9ORToKKyAgICAgICAgICAgICAgICBwYXJpdHkgPSAibm9u ZSI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgVE5DX1BBUl9P REQ6CisgICAgICAgICAgICAgICAgcGFyaXR5ID0gIm9kZCI7CisgICAgICAgICAgICAgICAgYnJl YWs7CisgICAgICAgICAgICAgIGNhc2UgVE5DX1BBUl9FVkVOOgorICAgICAgICAgICAgICAgIHBh cml0eSA9ICJldmVuIjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2Fz ZSBUTkNfUEFSX01BUks6CisgICAgICAgICAgICAgICAgcGFyaXR5ID0gIm1hcmsiOworICAgICAg ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIFROQ19QQVJfU1BBQ0U6CisgICAg ICAgICAgICAgICAgcGFyaXR5ID0gInNwYWNlIjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBwYXJpdHkgPSAiKHVua25vd24p IjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN3aXRjaCAodG5jX2dldF9zdG9wc2l6ZSgp KSB7CisgICAgICAgICAgICAgIGNhc2UgVE5DX1NCXzE6CisgICAgICAgICAgICAgICAgc3RvcHNp emUgPSAiMSI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgVE5D X1NCXzFfNToKKyAgICAgICAgICAgICAgICBzdG9wc2l6ZSA9ICIxLjUiOworICAgICAgICAgICAg ICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIFROQ19TQl8yOgorICAgICAgICAgICAgICAg IHN0b3BzaXplID0gIjIiOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBk ZWZhdWx0OgorICAgICAgICAgICAgICAgIHN0b3BzaXplID0gIih1bmtub3duKSI7CisgICAgICAg ICAgICB9CisJICAgIHNpZ25hdHVyZSA9IChjaGFyICopdG5jX2dldF9zaWduYXR1cmUoKTsKKyAg ICAgICAgICAgIHByaW50ZigiXG4gIFNpZ25hdHVyZSAgICAgICAgICAgIDogJXNcbiIsc2lnbmF0 dXJlP3NpZ25hdHVyZToiIik7CisgICAgICAgICAgICBpZiAoYmF1ZCA8PSAwKQorICAgICAgICAg ICAgICBwcmludGYoIiAgU3BlZWQgICAgICAgICAgICAgICAgOiAodW5rbm93bilcbiIpOworICAg ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBwcmludGYoIiAgU3BlZWQgICAgICAgICAgICAg ICAgOiAlZFxuIiwgYmF1ZCk7CisgICAgICAgICAgICBwcmludGYoIiAgT3V0Ym91bmQgRmxvdyBD b250cm9sOiAlc1xuIiwgb2Zsb3cpOworICAgICAgICAgICAgcHJpbnRmKCIgIEluYm91bmQgRmxv dyBDb250cm9sIDogJXNcbiIsIGlmbG93KTsKKyAgICAgICAgICAgIHByaW50ZigiICBQYXJpdHkg ICAgICAgICAgICAgICA6ICVzXG4iLCBwYXJpdHkpOworICAgICAgICAgICAgcHJpbnRmKCIgIERh dGEgU2l6ZSAgICAgICAgICAgIDogJWRcbiIsIHRuY19nZXRfZGF0YXNpemUoKSk7CisgICAgICAg ICAgICBwcmludGYoIiAgU3RvcCBCaXRzICAgICAgICAgICAgOiAlc1xuIiwgc3RvcHNpemUpOwor ICAgICAgICAgICAgcHJpbnRmKCIgIERUUiBTaWduYWwgICAgICAgICAgIDogJWRcbiIsIHRuY19n ZXRfZHRyX3N0YXRlKCkpOworICAgICAgICAgICAgcHJpbnRmKCIgIFJUUyBTaWduYWwgICAgICAg ICAgIDogJWRcbiIsIHRuY19nZXRfcnRzX3N0YXRlKCkpOworICAgICAgICAgICAgcHJpbnRmKCIg IE1vZGVtIFN0YXRlOlxuIik7CisgICAgICAgICAgICBtb2RlbXN0YXRlID0gdG5jX2dldF9tcygp OworICAgICAgICAgICAgaWYgKG1vZGVtc3RhdGUgJiBUTkNfTVNfRURHRV9SSU5HKQorICAgICAg ICAgICAgICBwcmludGYoIiAgICBUcmFpbGluZyBFZGdlIFJpbmcgRGV0ZWN0b3IgT25cbiIpOwor ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBwcmludGYoIiAgICBUcmFpbGluZyBFZGdl IFJpbmcgRGV0ZWN0b3IgT2ZmXG4iKTsKKyAgICAgICAgICAgIGlmIChtb2RlbXN0YXRlICYgVE5D X01TX0NUU19TSUcpCisgICAgICAgICAgICAgIHByaW50ZigiICAgIENUUyBTaWduYWwgT25cbiIp OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBwcmludGYoIiAgICBDVFMgU2lnbmFs IE9mZlxuIik7CisgICAgICAgICAgICBpZiAobW9kZW1zdGF0ZSAmIFROQ19NU19EU1JfU0lHKQor ICAgICAgICAgICAgICBwcmludGYoIiAgICBEU1IgU2lnbmFsIE9uXG4iKTsKKyAgICAgICAgICAg IGVsc2UKKyAgICAgICAgICAgICAgcHJpbnRmKCIgICAgRFNSIFNpZ25hbCBPZmZcbiIpOworICAg ICAgICAgICAgaWYgKG1vZGVtc3RhdGUgJiBUTkNfTVNfUklfU0lHKQorICAgICAgICAgICAgICBw cmludGYoIiAgICBSaW5nIEluZGljYXRvciBPblxuIik7CisgICAgICAgICAgICBlbHNlCisgICAg ICAgICAgICAgIHByaW50ZigiICAgIFJpbmcgSW5kaWNhdG9yIE9mZlxuIik7CisgICAgICAgICAg ICBpZiAobW9kZW1zdGF0ZSAmIFROQ19NU19STFNEX1NJRykKKyAgICAgICAgICAgICAgcHJpbnRm KCIgICAgUkxTRCAoQ0QpIFNpZ25hbCBPblxuIik7CisgICAgICAgICAgICBlbHNlCisgICAgICAg ICAgICAgIHByaW50ZigiICAgIFJMU0QgKENEKSBTaWduYWwgT2ZmXG4iKTsKKyAgICAgICAgICAg IHByaW50ZigiXG4iKTsKKyAgICAgICAgfQorI2VuZGlmIC8qIFROX0NPTVBPUlQgKi8KKyAgICB9 IGVsc2UgeworCisgICAgICAgIHByaW50ZigiICVzOiAlcyVzLCBzcGVlZDogIiwKKyNpZmRlZiBP UzIKKyAgICAgICAgICAgICAgICJQb3J0IiwKKyNlbHNlCisgICAgICAgICAgICAgICAiTGluZSIs CisjZW5kaWYgLyogT1MyICovCisgICAgICAgICAgICAgICB0dG5hbWUsCisjaWZkZWYgQ0tfVFRZ RkQKKyAgICAgICAgICAgICAgIChsb2NhbCAmJgorI2lmZGVmIFZNUworICAgICAgICAgICAgICAg IHZtc3R0eWZkKCkgPCAwCisjZWxzZQorICAgICAgICAgICAgICAgIHR0eWZkID09IC0xCisjZW5k aWYgLyogVk1TICovCisgICAgICAgICAgICAgICAgKSA/CisgICAgICAgICAgICAgICAgICIgKGNs b3NlZCkiIDoKKyAgICAgICAgICAgICAgICAgICAocmVsaWFibGUgPT0gU0VUX09OID8gIiAocmVs aWFibGUpIiA6ICIiKQorI2Vsc2UKKyAgICAgICAgICAgICAgICIiCisjZW5kaWYgLyogQ0tfVFRZ RkQgKi8KKyAgICAgICAgICAgICAgICk7CisgICAgICAgIGlmICgKKyNpZmRlZiBDS19UVFlGRAor I2lmZGVmIFZNUworICAgICAgICAgICAgdm1zdHR5ZmQoKSA8IDAKKyNlbHNlCisgICAgICAgICAg ICB0dHlmZCA9PSAtMQorI2VuZGlmIC8qIFZNUyAqLworICAgICAgICAgICAgfHwKKyNlbmRpZiAv KiBDS19UVFlGRCAqLworICAgICAgICAgICAgKHp6ID0gdHRnc3BkKCkpIDwgMCkgeworICAgICAg ICAgICAgcHJpbnRmKCJ1bmtub3duIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBp ZiAoc3BlZWQgPT0gODg4MCkgcHJpbnRmKCI3NS8xMjAwIik7CisgICAgICAgICAgICBlbHNlIGlm IChzcGVlZCA9PSAxMzQpIHByaW50ZigiMTM0LjUiKTsKKyAgICAgICAgICAgIGVsc2UgcHJpbnRm KCIlbGQiLHp6KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAobmV0d29yaworI2lmZGVmIElL U0QKKyAgICAgICAgIHx8IGluc2VydmVyCisjZW5kaWYgLyogSUtTRCAqLworICAgICAgICAgKQor ICAgICAgcHJpbnRmKCJcbiBNb2RlOiAiKTsKKyAgICBlbHNlCisgICAgICBwcmludGYoIiwgbW9k ZTogIik7CisgICAgaWYgKGxvY2FsKSBwcmludGYoImxvY2FsIik7IGVsc2UgcHJpbnRmKCJyZW1v dGUiKTsKKyAgICBpZiAobmV0d29yayA9PSAwCisjaWZkZWYgSUtTRAorICAgICAgICAgJiYgIWlu c2VydmVyCisjZW5kaWYvKiBJS1NEICovCisgICAgICAgICApIHsKKyNpZmRlZiBDS19UQVBJCisg ICAgICAgIGlmICh0dHRhcGkgJiYgIXRhcGlwYXNzICkKKyAgICAgICAgICBwcmludGYoIiwgbW9k ZW06ICVzIiwiVEFQSSIpOworICAgICAgICBlbHNlCisjZW5kaWYgLyogQ0tfVEFQSSAqLworICAg ICAgICBwcmludGYoIiwgbW9kZW06ICVzIixnbWRtdHlwKCkpOworICAgIH0gZWxzZSB7CisjaWZk ZWYgTkVUQ09OTgorICAgICAgIGlmIChuZXR0eXBlID09IE5FVF9UQ1BBKSBwcmludGYoIiwgVENQ L0lQIik7CisgICAgICAgaWYgKG5ldHR5cGUgPT0gTkVUX1RDUEIpIHByaW50ZigiLCBUQ1AvSVAi KTsKKyAgICAgICBpZiAobmV0dHlwZSA9PSBORVRfREVDKSB7CisgICAgICAgICAgIGlmICh0dG5w cm90byA9PSBOUF9MQVQpIHByaW50ZigiLCBERUNuZXQgTEFUIik7CisgICAgICAgICAgIGVsc2Ug aWYgKCB0dG5wcm90byA9PSBOUF9DVEVSTSApIHByaW50ZigiLCBERUNuZXQgQ1RFUk0iKTsKKyAg ICAgICAgICAgZWxzZSBwcmludGYoIiwgREVDbmV0Iik7CisgICAgICAgfQorICAgICAgIGlmIChu ZXR0eXBlID09IE5FVF9TTEFUKSBwcmludGYoIiwgTWVyaWRpYW4gVGVjaG5vbG9naWVzJyBTdXBl ckxBVCIpOworI2lmZGVmIE5FVEZJTEUKKyAgICAgICBpZiAobmV0dHlwZSA9PSBORVRfRklMRSkg cHJpbnRmKCIsIGxvY2FsIGZpbGUiKTsKKyNlbmRpZiAvKiBORVRGSUxFICovCisjaWZkZWYgTkVU Q01ECisgICAgICAgaWYgKG5ldHR5cGUgPT0gTkVUX0NNRCkgcHJpbnRmKCIsIHBpcGUiKTsKKyNl bmRpZiAvKiBORVRDTUQgKi8KKyNpZmRlZiBORVRQVFkKKyAgICAgICBpZiAobmV0dHlwZSA9PSBO RVRfUFRZKSBwcmludGYoIiwgcHNldWRvdGVybWluYWwiKTsKKyNlbmRpZiAvKiBORVRQVFkgKi8K KyNpZmRlZiBORVRETEwKKyAgICAgICBpZiAobmV0dHlwZSA9PSBORVRfRExMKSBwcmludGYoIiwg ZHluYW1pYyBsb2FkIGxpYnJhcnkiKTsKKyNlbmRpZiAvKiBORVRETEwgKi8KKyAgICAgICBpZiAo bmV0dHlwZSA9PSBORVRfUElQRSkgcHJpbnRmKCIsIE5hbWVkIFBpcGVzIik7CisjaWZkZWYgU1NI QlVJTFRJTgorICAgICAgIGlmIChuZXR0eXBlID09IE5FVF9TU0gpCisgICAgICAgICBwcmludGYo IiwgU2VjdXJlIFNoZWxsIHByb3RvY29sIChTRUNVUkUpIik7CisjZW5kaWYgLyogU1NIQlVJTFRJ TiAqLworI2lmZGVmIEFOWVgyNQorICAgICAgIGlmIChzaG94MjUoMCkgPCAwKSByZXR1cm47Cisj ZW5kaWYgLyogQU5ZWDI1ICovCisgICAgICAgaWYgKElTX1RFTE5FVCgpKSB7CisgICAgICAgICAg IHByaW50ZigiLCB0ZWxuZXQgcHJvdG9jb2wiKTsKKyAgICAgICAgICAgaWYgKDAKKyNpZmRlZiBD S19FTkNSWVBUSU9OCisgICAgICAgICAgICAgICB8fCBja190bl9lbmNyeXB0aW5nKCkgJiYgY2tf dG5fZGVjcnlwdGluZygpCisjZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLworI2lmZGVmIENLX1NT TAorICAgICAgICAgICAgICAgfHwgdGxzX2FjdGl2ZV9mbGFnIHx8IHNzbF9hY3RpdmVfZmxhZwor I2VuZGlmIC8qIENLX1NTTCAqLworICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgIHByaW50 ZigiIChTRUNVUkUpIik7CisgICAgICAgfQorI2lmZGVmIFJMT0dDT0RFCisgICAgICAgZWxzZSBp ZiAodHRucHJvdG8gPT0gTlBfUkxPR0lOIHx8IHR0bnByb3RvID09IE5QX0s0TE9HSU4gfHwKKyAg ICAgICAgICAgICAgICB0dG5wcm90byA9PSBOUF9LNUxPR0lOKQorICAgICAgICAgcHJpbnRmKCIs IHJsb2dpbiBwcm90b2NvbCIpOworICAgICAgIGVsc2UgaWYgKHR0bnByb3RvID09IE5QX0VLNExP R0lOIHx8IHR0bnByb3RvID09IE5QX0VLNUxPR0lOKQorICAgICAgICAgcHJpbnRmKCIsIHJsb2dp biBwcm90b2NvbCAoU0VDVVJFKSIpOworI2VuZGlmIC8qIFJMT0dDT0RFICovCisjaWZkZWYgQ0tf S0VSQkVST1MKKyNpZmRlZiBLUkI1CisgICAgICAgZWxzZSBpZiAodHRucHJvdG8gPT0gTlBfSzVV MlUpCisgICAgICAgICBwcmludGYoIiwgS2VyYmVyb3MgNSBVc2VyIHRvIFVzZXIgcHJvdG9jb2wg KFNFQ1VSRSkiKTsKKyNlbmRpZiAvKiBLUkI1ICovCisjZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8K KyNlbmRpZiAvKiBORVRDT05OICovCisgICAgfQorICAgIHByaW50ZigiXG4iKTsKKyAgICBpZiAo aHdwYXJpdHkgJiYgbG9jYWwgJiYgIW5ldHdvcmspCisgICAgICBzID0gcGFybmFtKChjaGFyKWh3 cGFyaXR5KTsKKyAgICBlbHNlCisgICAgICBzID0gcGFybmFtKChjaGFyKXBhcml0eSk7CisgICAg cHJpbnRmKCIgUGFyaXR5OiAlcyVzIixod3Bhcml0eSA/ICJoYXJkd2FyZSAiIDogIiIsIHMpOwor I2lmbmRlZiBOT0xPQ0FMCisgICAgaWYgKGxvY2FsICYmICFuZXR3b3JrKSB7CisgICAgICAgIGlu dCBzYjsKKyAgICAgICAgY2hhciBjOworICAgICAgICBjID0gc1swXTsKKyAgICAgICAgaWYgKGlz bG93ZXIoYykpIGMgPSB0b3VwcGVyKGMpOworICAgICAgICBzYiA9IHN0b3BiaXRzOworICAgICAg ICBpZiAoc2IgPCAxKSB7CisgICAgICAgICAgICBzYiA9IChzcGVlZCA+IDAgJiYgc3BlZWQgPD0g MTEwTCkgPyAyIDogMTsKKyAgICAgICAgICAgIHByaW50ZigiLCBzdG9wLWJpdHM6IChkZWZhdWx0 KSIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcHJpbnRmKCIsIHN0b3AtYml0czog JWQiLHNiKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaHdwYXJpdHkpCisgICAgICAgICAgcHJp bnRmKCIgKDglYyVkKSIsYyxzYik7CisgICAgICAgIGVsc2UgaWYgKHBhcml0eSkKKyAgICAgICAg ICBwcmludGYoIiAoNyVjJWQpIixjLHNiKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIHByaW50 ZigiICg4TiVkKSIsc2IpOworICAgICAgICBwcmludGYoIlxuIEQiKTsKKyAgICB9IGVsc2UKKyAg ICAgIHByaW50ZigiLCBkIik7CisjZW5kaWYgLyogTk9MT0NBTCAqLworCisgICAgcHJpbnRmKCJ1 cGxleDogJXMsICIsIGR1cGxleCA/ICJoYWxmIiA6ICJmdWxsIik7CisgICAgZGVidWcoRjEwMSwi c2hvcGFycCBmbG93IiwiIixmbG93KTsKKyAgICBwcmludGYoImZsb3c6ICVzIiwgZmxvbmFtZVtm bG93XSk7CisgICAgcHJpbnRmKCIsIGhhbmRzaGFrZTogIik7CisgICAgaWYgKHR1cm4pIHByaW50 ZigiJWRcbiIsdHVybmNoKTsgZWxzZSBwcmludGYoIm5vbmVcbiIpOworI2lmZGVmIENPTU1FTlQK KyAgICBpZiAobG9jYWwgJiYgIW5ldHdvcmspIHsgICAgICAgICAgICAvKiBTRVQgQ0FSUklFUi1X QVRDSCAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAgaWYgKGNhcnJpZXIgPT0gQ0FS X09GRikgcyA9ICJvZmYiOworICAgICAgICBlbHNlIGlmIChjYXJyaWVyID09IENBUl9PTikgcyA9 ICJvbiI7CisgICAgICAgIGVsc2UgaWYgKGNhcnJpZXIgPT0gQ0FSX0FVVCkgcyA9ICJhdXRvIjsK KyAgICAgICAgZWxzZSBzID0gInVua25vd24iOworICAgICAgICBwcmludGYoIiBDYXJyaWVyLXdh dGNoOiAlcyIsIHMpOworICAgICAgICBpZiAoY2FycmllciA9PSBDQVJfT04pIHsKKyAgICAgICAg ICAgIGlmIChjZHRpbW8pIHByaW50ZigiLCB0aW1lb3V0OiAlZCBzZWMiLCBjZHRpbW8pOworICAg ICAgICAgICAgZWxzZSBwcmludGYoIiwgdGltZW91dDogbm9uZSIpOworICAgICAgICB9CisjaWZk ZWYgQ09NTUVOVAorICAgIH0KKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgcHJpbnRmKCIsIGNs b3NlLW9uLWRpc2Nvbm5lY3Q6ICVzXG4iLHNob3dvZmYoY2xzb25kaXNjKSk7CisKKyNpZmRlZiBV TklYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVVUNQIGxvY2tmaWxlLCBVTklYIG9u bHkgKi8KKyAgICBpZiAobG9jYWwpIHsKKyNpZm5kZWYgTk9VVUNQCisgICAgICAgIGlmICghbmV0 d29yayAmJiBoYXNsb2NrICYmICpmbGZuYW0pCisgICAgICAgICAgcHJpbnRmKCIgTG9ja2ZpbGU6 ICVzIixmbGZuYW0pOworI2lmbmRlZiBVU0VUVFlMT0NLCisgICAgICAgIGlmICghbmV0d29yayAm JiBoYXNsb2NrICYmIGxvY2syWzBdKQorICAgICAgICAgIHByaW50ZigiXG4gU2Vjb25kYXJ5IGxv Y2tmaWxlOiAlcyIsbG9jazIpOworI2VuZGlmIC8qIFVTRVRUWUxPQ0sgKi8KKyNlbHNlCisjaWZk ZWYgUU5YCisgICAgICAgIHsKKyAgICAgICAgICAgIGV4dGVybiBpbnQgcW54cG9ydGxvY2ssIHFu eG9wZW5jb3VudCgpOworICAgICAgICAgICAgaWYgKGxvY2FsKQorICAgICAgICAgICAgICBwcmlu dGYoIiBRbngtcG9ydC1sb2NrOiAlcywgT3BlbiBjb3VudDogJWQiLAorICAgICAgICAgICAgICAg ICAgICAgc2hvd29mZihxbnhwb3J0bG9jayksCisgICAgICAgICAgICAgICAgICAgICBxbnhvcGVu Y291bnQoKQorICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg ICAgICAgICAgcHJpbnRmKCIgUW54LXBvcnQtbG9jazogJXMiLCBzaG93b2ZmKHFueHBvcnRsb2Nr KSk7CisgICAgICAgIH0KKyNlbmRpZiAvKiBRTlggKi8KKyNlbmRpZiAvKiBOT1VVQ1AgKi8KKyAg ICAgICAgcHJpbnRmKCJcbiIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGNoYXIgKiBzOworICAg ICAgICBzID0gdHRnbGNrZGlyKCk7CisgICAgICAgIGlmICghcykgcyA9ICIiOworICAgICAgICBw cmludGYoIiBMb2NrZmlsZSBkaXJlY3Rvcnk6ICVzXG4iLCAqcyA/IHMgOiAiKG5vbmUpIik7Cisg ICAgfQorI2VuZGlmIC8qIFVOSVggKi8KKyNpZm5kZWYgTUFDT1NYCisgICAgaWYgKCFsb2NhbCkg eworICAgICAgICBwcmludGYoIiBUeXBpY2FsIHBvcnQgZGV2aWNlIG5hbWU6ICVzXG4iLHR0Z3Rw bigpKTsKKyAgICB9CisjZW5kaWYJLyogTUFDT1NYICovCisgICAgaWYgKGxvY2FsKSB7CisgICAg ICAgIGludCBpOworICAgICAgICBpID0gcGFyaXR5ID8gNyA6IDg7CisgICAgICAgIGlmIChpID09 IDgpIGkgPSAoY21hc2sgPT0gMDE3NykgPyA3IDogODsKKyAgICAgICAgcHJpbnRmKCIgVGVybWlu YWwgYnl0ZXNpemU6ICVkLCIsaSk7CisgICAgICAgIHByaW50ZigiIGVzY2FwZSBjaGFyYWN0ZXI6 ICVkICheJWMpXG4iLGVzY2FwZSxjdGwoZXNjYXBlKSk7CisgICAgfQorfQorCitpbnQKK3Nob3Rj cChuKSBpbnQgbjsgeworI2lmZGVmIFRDUFNPQ0tFVAorICAgIGlmIChuZXR0eXBlID09IE5FVF9U Q1BBIHx8IG5ldHR5cGUgPT0gTkVUX1RDUEIpIHsKKyAgICAgICAgcHJpbnRmKCJTRVQgVENQIHBh cmFtZXRlcnM6XG4iKTsKKyAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2tt b3JlKCkpIHJldHVybigtMSk7IGVsc2UgbiA9IDA7CisgICAgICAgIHByaW50ZigiIFJldmVyc2Ug RE5TIGxvb2t1cDogJXNcbiIsIHNob3dvb2EodGNwX3JkbnMpKTsKKyAgICAgICAgaWYgKCsrbiA+ IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKKwor I2lmZGVmIENLX0ROU19TUlYKKyAgICAgICAgcHJpbnRmKCIgRE5TIFNlcnZpY2UgUmVjb3JkcyBs b29rdXA6ICVzXG4iLCBzaG93b29hKHRjcF9kbnNfc3J2KSk7CisgICAgICAgIGlmICgrK24gPiBj bWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7CisjZW5k aWYgLyogQ0tfRE5TX1NSViAqLworCisjaWZuZGVmIE5PVENQT1BUUworI2lmZGVmIFNPTF9TT0NL RVQKKyNpZmRlZiBTT19LRUVQQUxJVkUKKyAgICAgICAgcHJpbnRmKCIgS2VlcGFsaXZlOiAlc1xu Iiwgc2hvd29mZih0Y3Bfa2VlcGFsaXZlKSk7CisgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAt IDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7CisjZW5kaWYgLyogU09f S0VFUEFMSVZFICovCisKKyNpZmRlZiBTT19MSU5HRVIKKyAgICAgICAgcHJpbnRmKCIgTGluZ2Vy OiAlcyIsIHRjcF9saW5nZXIgPyAib24sICIgOiAib2ZmXG4iICk7CisgICAgICAgIGlmICh0Y3Bf bGluZ2VyKSB7CisgICAgICAgICAgICBpZiAodGNwX2xpbmdlcl90bW8pCisgICAgICAgICAgICAg IHByaW50ZigiJWQgeCAxMCBtaWxsaXNlY29uZHNcbiIsdGNwX2xpbmdlcl90bW8pOworICAgICAg ICAgICAgZWxzZQorICAgICAgICAgICAgICBwcmludGYoIm5vIHRpbWVvdXRcbiIpOworICAgICAg ICB9CisgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1 cm4oMCk7IGVsc2UgbiA9IDA7CisjZW5kaWYgLyogU09fTElOR0VSICovCisKKyNpZmRlZiBTT19E T05UUk9VVEUKKyAgICAgICAgcHJpbnRmKCIgRG9udFJvdXRlOiAlc1xuIiwgdGNwX2RvbnRyb3V0 ZSA/ICJvbiIgOiAib2ZmIiApOworICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAo IWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOworI2VuZGlmIC8qIFNPX0RPTlRST1VU RSAqLworCisjaWZkZWYgVENQX05PREVMQVkKKyAgICAgICAgcHJpbnRmKCIgTm9kZWxheTogJXNc biIsIHNob3dvZmYodGNwX25vZGVsYXkpKTsKKyAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0g MykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKKyNlbmRpZiAvKiBUQ1Bf Tk9ERUxBWSAqLworCisjaWZkZWYgU09fU05EQlVGCisgICAgICAgIGlmICh0Y3Bfc2VuZGJ1ZiA8 PSAwKQorICAgICAgICAgIHByaW50ZigiIFNlbmQgYnVmZmVyOiAoZGVmYXVsdCBzaXplKVxuIik7 CisgICAgICAgIGVsc2UKKyAgICAgICAgICBwcmludGYoIiBTZW5kIGJ1ZmZlcjogJWQgYnl0ZXNc biIsIHRjcF9zZW5kYnVmKTsKKyAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFh c2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKKyNlbmRpZiAvKiBTT19TTkRCVUYgKi8K KyNpZmRlZiBTT19SQ1ZCVUYKKyAgICAgICAgaWYgKHRjcF9yZWN2YnVmIDw9IDApCisgICAgICAg ICAgcHJpbnRmKCIgUmVjZWl2ZSBidWZmZXI6IChkZWZhdWx0IHNpemUpXG4iKTsKKyAgICAgICAg ZWxzZQorICAgICAgICAgIHByaW50ZigiIFJlY2VpdmUgYnVmZmVyOiAlZCBieXRlc1xuIiwgdGNw X3JlY3ZidWYpOworICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUo KSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOworI2VuZGlmIC8qIFNPX1JDVkJVRiAqLworI2VuZGlm IC8qIFNPTF9TT0NLRVQgKi8KKyNlbmRpZiAvKiBOT1RDUE9QVFMgKi8KKyAgICAgICAgcHJpbnRm KCIgYWRkcmVzczogJXNcbiIsdGNwX2FkZHJlc3MgPyB0Y3BfYWRkcmVzcyA6ICIobm9uZSkiKTsK KyAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigt MSk7IGVsc2UgbiA9IDA7CisjaWZuZGVmIE5PSFRUUAorICAgICAgICBwcmludGYoIiBodHRwLXBy b3h5OiAlc1xuIix0Y3BfaHR0cF9wcm94eSA/IHRjcF9odHRwX3Byb3h5IDogIihub25lKSIpOwor ICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKC0x KTsgZWxzZSBuID0gMDsKKyNlbmRpZiAvKiBOT0hUVFAgKi8KKyNpZmRlZiBOVAorI2lmZGVmIENL X1NPQ0tTCisgICAgICAgIHByaW50ZigiIHNvY2tzLXNlcnZlcjogJXNcbiIsdGNwX3NvY2tzX3N2 ciA/IHRjcF9zb2Nrc19zdnIgOiAiKG5vbmUpIik7CisgICAgICAgIGlmICgrK24gPiBjbWRfcm93 cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oLTEpOyBlbHNlIG4gPSAwOworI2lmZGVmIENL X1NPQ0tTX05TCisgICAgICAgIHByaW50ZigiIHNvY2tzLW5hbWUtc2VydmVyOiAlc1xuIiwKKyAg ICAgICAgICAgICAgIHRjcF9zb2Nrc19ucyA/IHRjcF9zb2Nrc19ucyA6ICIobm9uZSkiKTsKKyAg ICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigtMSk7 IGVsc2UgbiA9IDA7CisjZW5kaWYgLyogQ0tfU09DS1NfTlMgKi8KKyNlbmRpZiAvKiBDS19TT0NL UyAqLworI2VuZGlmIC8qIE5UICovCisgICAgfQorI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLworICAg IHJldHVybihuKTsKK30KKworI2lmZGVmIFROQ09ERQoraW50CitzaG90b3B0KG4pIGludCBuOyB7 CisgICAgaW50IG9wdDsKKworICAgIHByaW50ZigiJS0yMXMgJTEycyAlMTJzICUxMnMgJTEyc1xu XG4iLAorICAgICAgICAgICAiVGVsbmV0IE9wdGlvbiIsIk1lIChjbGllbnQpIiwiVSAoY2xpZW50 KSIsCisgICAgICAgICAgICJNZSAoc2VydmVyKSIsIlUgKHNlcnZlcikiKTsKKyAgICBuICs9IDI7 CisgICAgaWYgKG4gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oLTEpOyBl bHNlIG4gPSAwOworCisgICAgZm9yICggb3B0ID0gVEVMT1BUX0ZJUlNUOyBvcHQgPD0gVEVMT1BU X0xBU1Q7IG9wdCsrKSB7CisgICAgICAgIHN3aXRjaCAob3B0KSB7CisgICAgICAgICAgY2FzZSBU RUxPUFRfQVVUSEVOVElDQVRJT046CisgICAgICAgICAgY2FzZSBURUxPUFRfRU5DUllQVElPTjoK KyAgICAgICAgICBjYXNlIFRFTE9QVF9UVFlQRToKKyAgICAgICAgICBjYXNlIFRFTE9QVF9OQVdT OgorICAgICAgICAgIGNhc2UgVEVMT1BUX0JJTkFSWToKKyAgICAgICAgICBjYXNlIFRFTE9QVF9O RVdFTlZJUk9OOgorICAgICAgICAgIGNhc2UgVEVMT1BUX1NORExPQzoKKyAgICAgICAgICBjYXNl IFRFTE9QVF9YRElTUExPQzoKKyAgICAgICAgICBjYXNlIFRFTE9QVF9TR0E6CisgICAgICAgICAg Y2FzZSBURUxPUFRfRUNITzoKKyAgICAgICAgICBjYXNlIFRFTE9QVF9LRVJNSVQ6CisgICAgICAg ICAgY2FzZSBURUxPUFRfU1RBUlRfVExTOgorICAgICAgICAgIGNhc2UgVEVMT1BUX0ZPUldBUkRf WDoKKyAgICAgICAgICBjYXNlIFRFTE9QVF9DT01QT1JUOgorICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAg ICAgIHByaW50ZigiJTAzZCAlLTE3cyAiLAorICAgICAgICAgICAgICAgb3B0LCBURUxPUFQob3B0 KQorICAgICAgICAgICAgICAgKTsKKyAgICAgICAgcHJpbnRmKCIlMTJzICUxMnMgIiwKKyAgICAg ICAgICAgICAgIFRFTE9QVF9NT0RFKFRFTE9QVF9ERUZfQ19NRV9NT0RFKG9wdCkpLAorICAgICAg ICAgICAgICAgVEVMT1BUX01PREUoVEVMT1BUX0RFRl9DX1VfTU9ERShvcHQpKQorICAgICAgICAg ICAgICAgKTsKKyAgICAgICAgcHJpbnRmKCIlMTJzICUxMnNcbiIsCisgICAgICAgICAgICAgICBU RUxPUFRfTU9ERShURUxPUFRfREVGX1NfTUVfTU9ERShvcHQpKSwKKyAgICAgICAgICAgICAgIFRF TE9QVF9NT0RFKFRFTE9QVF9ERUZfU19VX01PREUob3B0KSkKKyAgICAgICAgICAgICAgICk7CisK KyAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigt MSk7IGVsc2UgbiA9IDA7CisgICAgICAgIGlmIChzc3RlbG5ldCkKKyAgICAgICAgICBwcmludGYo IiUyMXMgJTEycyAlMTJzICUxMnMgJTEyc1xuIiwKKyAgICAgICAgICAgICAgICAgIiIsCisgICAg ICAgICAgICAgICAgICIiLAorICAgICAgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgICAgICAg KFRFTE9QVF9NRShvcHQpPyJXSUxMIjoiV09OVCIpLAorICAgICAgICAgICAgICAgICAoVEVMT1BU X1Uob3B0KT8iRE8iOiJET05UIikKKyAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgZWxzZQor ICAgICAgICAgIHByaW50ZigiJTIxcyAlMTJzICUxMnMgJTEycyAlMTJzXG4iLAorICAgICAgICAg ICAgICAgICAiIiwKKyAgICAgICAgICAgICAgICAgKFRFTE9QVF9NRShvcHQpPyJXSUxMIjoiV09O VCIpLAorICAgICAgICAgICAgICAgICAoVEVMT1BUX1Uob3B0KT8iRE8iOiJET05UIiksCisgICAg ICAgICAgICAgICAgICIiLAorICAgICAgICAgICAgICAgICAiIgorICAgICAgICAgICAgICAgICAp OworICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJu KC0xKTsgZWxzZSBuID0gMDsKKyAgICB9CisgICAgcmV0dXJuKG4pOworfQorCitpbnQKK3Nob3Rl bChuKSBpbnQgbjsgeworICAgIGV4dGVybiBpbnQgdG5fZHVwbGV4OworI2lmZGVmIENLX0VOVklS T05NRU5UCisgICAgZXh0ZXJuIGludCB0bl9lbnZfZmxnOworICAgIGV4dGVybiBjaGFyIHRuX2Vu dl9hY2N0W107CisgICAgZXh0ZXJuIGNoYXIgdG5fZW52X2pvYltdOworICAgIGV4dGVybiBjaGFy IHRuX2Vudl9wcm50W107CisgICAgZXh0ZXJuIGNoYXIgdG5fZW52X3N5c1tdOworICAgIGV4dGVy biBjaGFyICogdG5fZW52X3VzZXJ2YXJbOF1bMl07CisgICAgaW50IHg7CisjZW5kaWYgLyogQ0tf RU5WSVJPTk1FTlQgKi8KKyNpZmRlZiBDS19TTkRMT0MKKyAgICBleHRlcm4gY2hhciAqIHRuX2xv YzsKKyNlbmRpZiAvKiBDS19TTkRMT0MgKi8KKyAgICBwcmludGYoIlNFVCBURUxORVQgcGFyYW1l dGVyczpcbiBlY2hvOiAlc1xuIE5WVCBuZXdsaW5lLW1vZGU6ICIsCisgICAgICAgICAgIHRuX2R1 cGxleCA/ICJsb2NhbCIgOiAicmVtb3RlIik7CisgICAgc3dpdGNoICh0bl9ubG0pIHsKKyAgICAg IGNhc2UgVE5MX0NSTlVMOiBwcmludGYoIiVzXG4iLCJvZmYgKGNyLW51bCkiKTsgYnJlYWs7Cisg ICAgICBjYXNlIFROTF9DUkxGOiAgcHJpbnRmKCIlc1xuIiwib24gKGNyLWxmKSIpOyBicmVhazsK KyAgICAgIGNhc2UgVE5MX0NSOiAgICBwcmludGYoIiVzXG4iLCJyYXcgKGNyKSIpOyBicmVhazsK KyAgICAgIGNhc2UgVE5MX0xGOiAgICBwcmludGYoIiVzXG4iLCIobGYpIik7IGJyZWFrOworICAg IH0KKyAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKC0x KTsgZWxzZSBuID0gMDsKKyNpZmRlZiBDS19BVVRIRU5USUNBVElPTgorICAgIHsKKyAgICAgICAg aW50IHR5cGUgPSBja190bl9hdXRoZW50aWNhdGVkKCk7CisgICAgICAgIHByaW50ZigiIGF1dGhl bnRpY2F0aW9uOiAiKTsKKyAgICAgICAgc3dpdGNoIChzc3RlbG5ldCA/CisgICAgICAgICAgICAg ICAgVEVMT1BUX1VfTU9ERShURUxPUFRfQVVUSEVOVElDQVRJT04pIDoKKyAgICAgICAgICAgICAg ICAgVEVMT1BUX01FX01PREUoVEVMT1BUX0FVVEhFTlRJQ0FUSU9OKQorICAgICAgICAgICAgICAg ICkgeworICAgICAgICAgIGNhc2UgVE5fTkdfQUM6IHByaW50ZiggImFjY2VwdGVkICIgKTsgYnJl YWs7CisgICAgICAgICAgY2FzZSBUTl9OR19SRjogcHJpbnRmKCAicmVmdXNlZCAgIiApOyBicmVh azsKKyAgICAgICAgICBjYXNlIFROX05HX1JROiBwcmludGYoICJyZXF1ZXN0ZWQiKTsgYnJlYWs7 CisgICAgICAgICAgY2FzZSBUTl9OR19NVTogcHJpbnRmKCAicmVxdWlyZWQgIik7IGJyZWFrOwor ICAgICAgICB9CisKKyNpZmRlZiBDS19TU0wKKyAgICAgICAgaWYgKChzc2xfYWN0aXZlX2ZsYWcg fHwgdGxzX2FjdGl2ZV9mbGFnKSAmJgorICAgICAgICAgICAgIGNrX3RuX2F1dGhfdmFsaWQoKSA9 PSBBVVRIX1ZBTElEICYmCisgICAgICAgICAgICAgKCFURUxPUFRfVShURUxPUFRfQVVUSEVOVElD QVRJT04pIHx8CisgICAgICAgICAgICAgICB0eXBlID09IEFVVEhUWVBFX05VTEwgfHwKKyAgICAg ICAgICAgICAgIHR5cGUgPT0gQVVUSFRZUEVfQVVUTykpCisgICAgICAgICAgICBwcmludGYoIiAg IGluIHVzZTogWC41MDkgY2VydGlmaWNhdGVcbiIpOworICAgICAgICBlbHNlCisjZW5kaWYgLyog Q0tfU1NMICovCisgICAgICAgICAgcHJpbnRmKCIgICBpbiB1c2U6ICVzXG4iLEFVVEhUWVBFX05B TUUodHlwZSkpOworICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUo KSkgcmV0dXJuKC0xKTsgZWxzZSBuID0gMDsKKyAgICAgICAgaWYgKGZvcndhcmRfZmxhZykKKyAg ICAgICAgICBwcmludGYoIiAgY3JlZGVudGlhbHMgZm9yd2FyZGluZyByZXF1ZXN0ZWQgJXNcbiIs CisgICAgICAgICAgICAgICAgIGZvcndhcmRlZF90aWNrZXRzID8gImFuZCBjb21wbGV0ZWQiIDoK KyAgICAgICAgICAgICAgICAgImJ1dCBub3QgY29tcGxldGVkIik7CisgICAgICAgIGVsc2UKKyAg ICAgICAgICBwcmludGYoIiAgY3JlZGVudGlhbHMgZm9yd2FyZGluZyBkaXNhYmxlZFxuIik7Cisg ICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oLTEp OyBlbHNlIG4gPSAwOworICAgIH0KKyNlbmRpZiAvKiBDS19BVVRIRU5USUNBVElPTiAqLworI2lm ZGVmIENLX0VOQ1JZUFRJT04KKyAgICB7CisgICAgICAgIGludCBpLHg7CisgICAgICAgIGludCBl X3R5cGUgPSBja190bl9lbmNyeXB0aW5nKCk7CisgICAgICAgIGludCBkX3R5cGUgPSBja190bl9k ZWNyeXB0aW5nKCk7CisgICAgICAgIGNoYXIgKiBlX3N0ciA9IE5VTEwsICogZF9zdHIgPSBOVUxM OworICAgICAgICBzdGF0aWMgc3RydWN0IGtleXRhYiAqIHRuZXRibCA9IE5VTEw7CisgICAgICAg IHN0YXRpYyBpbnQgbnRuZXRibCA9IDA7CisKKyAgICAgICAgeCA9IGNrX2dldF9jcnlwdF90YWJs ZSgmdG5ldGJsLCZudG5ldGJsKTsKKworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnRuZXRibDsg aSsrKSB7CisgICAgICAgICAgICBpZiAoZV90eXBlID09IHRuZXRibFtpXS5rd3ZhbCkKKyAgICAg ICAgICAgICAgZV9zdHIgPSB0bmV0YmxbaV0ua3dkOworICAgICAgICAgICAgaWYgKGRfdHlwZSA9 PSB0bmV0YmxbaV0ua3d2YWwpCisgICAgICAgICAgICAgIGRfc3RyID0gdG5ldGJsW2ldLmt3ZDsK KyAgICAgICAgfQorICAgICAgICBwcmludGYoIiBlbmNyeXB0aW9uOiAiKTsKKyAgICAgICAgc3dp dGNoIChURUxPUFRfTUVfTU9ERShURUxPUFRfRU5DUllQVElPTikpIHsKKyAgICAgICAgICAvKiBU aGlzIHNob3VsZCBiZSBjaGFuZ2VkIHRvIHJlcG9ydCBib3RoIE1FIGFuZCBVIG1vZGVzICovCisg ICAgICAgICAgY2FzZSBUTl9OR19BQzogcHJpbnRmKCAiYWNjZXB0ZWQgIiApOyBicmVhazsKKyAg ICAgICAgICBjYXNlIFROX05HX1JGOiBwcmludGYoICJyZWZ1c2VkICAiICk7IGJyZWFrOworICAg ICAgICAgIGNhc2UgVE5fTkdfUlE6IHByaW50ZiggInJlcXVlc3RlZCIpOyBicmVhazsKKyAgICAg ICAgICBjYXNlIFROX05HX01VOiBwcmludGYoICJyZXF1aXJlZCAiKTsgYnJlYWs7CisgICAgICAg IH0KKyAgICAgICAgcHJpbnRmKCIgICAgICAgaW4gdXNlOiAiKTsKKyAgICAgICAgc3dpdGNoICgo ZV90eXBlID8gMSA6IDApIHwgKGRfdHlwZSA/IDIgOiAwKSkgeworICAgICAgICAgIGNhc2UgMDoK KyAgICAgICAgICAgIHByaW50ZigicGxhaW4gdGV4dCBpbiBib3RoIGRpcmVjdGlvbnMiKTsKKyAg ICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIHByaW50Zigi JXMgb3V0cHV0LCBwbGFpbiB0ZXh0IGlucHV0IixlX3N0cik7CisgICAgICAgICAgICBicmVhazsK KyAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICBwcmludGYoInBsYWluIHRleHQgb3V0cHV0 LCAlcyBpbnB1dCIsZF9zdHIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSAz OgorICAgICAgICAgICAgcHJpbnRmKCIlcyBvdXRwdXQsICVzIGlucHV0IixlX3N0cixkX3N0cik7 CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBwcmludGYoIlxuIik7Cisg ICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oLTEp OyBlbHNlIG4gPSAwOworICAgIH0KKyNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCisjaWZkZWYg SUtTX09QVElPTgorICAgIHByaW50ZigiIGtlcm1pdDogIik7CisgICAgc3dpdGNoIChURUxPUFRf VV9NT0RFKFRFTE9QVF9LRVJNSVQpKSB7CisgICAgICBjYXNlIFROX05HX0FDOiBwcmludGYoICJ1 LCBhY2NlcHRlZDsgICIgKTsgYnJlYWs7CisgICAgICBjYXNlIFROX05HX1JGOiBwcmludGYoICJ1 LCByZWZ1c2VkOyAgICIgKTsgYnJlYWs7CisgICAgICBjYXNlIFROX05HX1JROiBwcmludGYoICJ1 LCByZXF1ZXN0ZWQ7ICIpOyBicmVhazsKKyAgICAgIGNhc2UgVE5fTkdfTVU6IHByaW50ZiggInUs IHJlcXVpcmVkOyAgIik7IGJyZWFrOworICAgIH0KKyAgICBzd2l0Y2ggKFRFTE9QVF9NRV9NT0RF KFRFTE9QVF9LRVJNSVQpKSB7CisgICAgICBjYXNlIFROX05HX0FDOiBwcmludGYoICJtZSwgYWNj ZXB0ZWQ7ICAiICk7IGJyZWFrOworICAgICAgY2FzZSBUTl9OR19SRjogcHJpbnRmKCAibWUsIHJl ZnVzZWQ7ICAgIiApOyBicmVhazsKKyAgICAgIGNhc2UgVE5fTkdfUlE6IHByaW50ZiggIm1lLCBy ZXF1ZXN0ZWQ7ICIpOyBicmVhazsKKyAgICAgIGNhc2UgVE5fTkdfTVU6IHByaW50ZiggIm1lLCBy ZXF1aXJlZDsgICIpOyBicmVhazsKKyAgICB9CisgICAgaWYgKFRFTE9QVF9VKFRFTE9QVF9LRVJN SVQpKQorICAgICAgcHJpbnRmKCIgdSwgJXMiLAorICAgICAgICAgICAgIFRFTE9QVF9TQihURUxP UFRfS0VSTUlUKS5rZXJtaXQudV9zdGFydCA/CisgICAgICAgICAgICAgInN0YXJ0ZWQiIDoKKyAg ICAgICAgICAgICAic3RvcHBlZCIKKyAgICAgICAgICAgICApOworICAgIGVsc2UKKyAgICAgIHBy aW50ZigiIHUsIG4vYSIpOworICAgIGlmIChURUxPUFRfTUUoVEVMT1BUX0tFUk1JVCkpCisgICAg ICBwcmludGYoIiBtZSwgJXM7IiwKKyAgICAgICAgICAgICBURUxPUFRfU0IoVEVMT1BUX0tFUk1J VCkua2VybWl0Lm1lX3N0YXJ0ID8KKyAgICAgICAgICAgICAic3RhcnRlZCIgOgorICAgICAgICAg ICAgICJzdG9wcGVkIgorICAgICAgICAgICAgICk7CisgICAgZWxzZQorICAgICAgcHJpbnRmKCIg bWUsIG4vYTsiKTsKKyAgICBwcmludGYoIlxuIik7CisgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0g MykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigtMSk7IGVsc2UgbiA9IDA7CisjZW5kaWYgLyogSUtT X09QVElPTiAqLworICAgIHByaW50ZigiIEJJTkFSWSBuZXdsaW5lLW1vZGU6ICIpOworICAgIHN3 aXRjaCAodG5fYl9ubG0pIHsKKyAgICAgIGNhc2UgVE5MX0NSTlVMOiBwcmludGYoIiVzXG4iLCJv ZmYgKGNyLW51bCkiKTsgYnJlYWs7CisgICAgICBjYXNlIFROTF9DUkxGOiAgcHJpbnRmKCIlc1xu Iiwib24gKGNyLWxmKSIpOyBicmVhazsKKyAgICAgIGNhc2UgVE5MX0NSOiAgICBwcmludGYoIiVz XG4iLCJyYXcgKGNyKSIpOyBicmVhazsKKyAgICAgIGNhc2UgVE5MX0xGOiAgICBwcmludGYoIiVz XG4iLCIobGYpIik7IGJyZWFrOworICAgIH0KKyAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBp ZiAoIWFza21vcmUoKSkgcmV0dXJuKC0xKTsgZWxzZSBuID0gMDsKKyAgICBwcmludGYoIiBiaW5h cnktbW9kZTogIik7CisgICAgc3dpdGNoIChURUxPUFRfVV9NT0RFKFRFTE9QVF9CSU5BUlkpKSB7 CisgICAgICBjYXNlIFROX05HX0FDOiBwcmludGYoICJ1LCBhY2NlcHRlZDsgICIgKTsgYnJlYWs7 CisgICAgICBjYXNlIFROX05HX1JGOiBwcmludGYoICJ1LCByZWZ1c2VkOyAgICIgKTsgYnJlYWs7 CisgICAgICBjYXNlIFROX05HX1JROiBwcmludGYoICJ1LCByZXF1ZXN0ZWQ7ICIpOyBicmVhazsK KyAgICAgIGNhc2UgVE5fTkdfTVU6IHByaW50ZiggInUsIHJlcXVpcmVkOyAgIik7IGJyZWFrOwor ICAgIH0KKyAgICBzd2l0Y2ggKFRFTE9QVF9NRV9NT0RFKFRFTE9QVF9CSU5BUlkpKSB7CisgICAg ICBjYXNlIFROX05HX0FDOiBwcmludGYoICJtZSwgYWNjZXB0ZWQ7ICIgKTsgYnJlYWsgOworICAg ICAgY2FzZSBUTl9OR19SRjogcHJpbnRmKCAibWUsIHJlZnVzZWQ7ICIgKTsgYnJlYWs7CisgICAg ICBjYXNlIFROX05HX1JROiBwcmludGYoICJtZSwgcmVxdWVzdGVkOyAiKTsgYnJlYWs7CisgICAg ICBjYXNlIFROX05HX01VOiBwcmludGYoICJtZSwgcmVxdWlyZWQ7ICAiKTsgYnJlYWs7CisgICAg fQorICAgIHByaW50ZigidSwgJXM7IG1lLCAlc1xuIiwKKyAgICAgICAgICAgVEVMT1BUX1UoVEVM T1BUX0JJTkFSWSkgPyAiQklOQVJZIiA6ICJOVlQiLAorICAgICAgICAgICBURUxPUFRfTUUoVEVM T1BUX0JJTkFSWSkgPyAiQklOQVJZIiA6ICJOVlQiCisgICAgICAgICAgICk7CisgICAgaWYgKCsr biA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigtMSk7IGVsc2UgbiA9IDA7 CisgICAgcHJpbnRmKCIgYmluYXJ5LXRyYW5zZmVyLW1vZGU6ICVzXG4iLHNob3dvZmYodG5fYl94 ZmVyKSk7CisgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVy bigtMSk7IGVsc2UgbiA9IDA7CisgICAgcHJpbnRmKCIgYnVnIGJpbmFyeS1tZS1tZWFucy11LXRv bzogJXNcbiIsc2hvd29mZih0bl9iX21ldSkpOworICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMp IGlmICghYXNrbW9yZSgpKSByZXR1cm4oLTEpOyBlbHNlIG4gPSAwOworICAgIHByaW50ZigiIGJ1 ZyBiaW5hcnktdS1tZWFucy1tZS10b286ICVzXG4iLHNob3dvZmYodG5fYl91bWUpKTsKKyAgICBp ZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKC0xKTsgZWxzZSBu ID0gMDsKKyAgICBwcmludGYoIiBidWcgc2ItaW1wbGllcy13aWxsLWRvOiAlc1xuIixzaG93b2Zm KHRuX3NiX2J1ZykpOworICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgp KSByZXR1cm4oLTEpOyBlbHNlIG4gPSAwOworICAgIHByaW50ZigiIGJ1ZyBhdXRoLWtyYjUtZGVz OiAlc1xuIixzaG93b2ZmKHRuX2F1dGhfa3JiNV9kZXNfYnVnKSk7CisgICAgaWYgKCsrbiA+IGNt ZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigtMSk7IGVsc2UgbiA9IDA7CisgICAg cHJpbnRmKCIgdGVybWluYWwtdHlwZTogIik7CisgICAgaWYgKHRuX3Rlcm0pIHsKKyAgICAgICAg cHJpbnRmKCIlc1xuIix0bl90ZXJtKTsKKyAgICB9IGVsc2UgeworICAgICAgICBjaGFyICpwOwor I2lmZGVmIE9TMgorICAgICAgICBwID0gKHR0X3R5cGUgPj0gMCAmJiB0dF90eXBlIDw9IG1heF90 dCkgPworICAgICAgICAgIHR0X2luZm9bdHRfdHlwZV0ueF9uYW1lIDoKKyAgICAgICAgICAgICJV TktOT1dOIjsKKyNlbHNlCisgICAgICAgIHAgPSBnZXRlbnYoIlRFUk0iKTsKKyNlbmRpZiAvKiBP UzIgKi8KKyAgICAgICAgaWYgKHApCisgICAgICAgICAgcHJpbnRmKCJub25lICglcyB3aWxsIGJl IHVzZWQpXG4iLHApOworICAgICAgICBlbHNlIHByaW50Zigibm9uZVxuIik7CisgICAgfQorICAg IGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oLTEpOyBlbHNl IG4gPSAwOworI2lmZGVmIENLX0VOVklST05NRU5UCisgICAgcHJpbnRmKCIgZW52aXJvbm1lbnQ6 ICVzXG4iLCBzaG93b2ZmKHRuX2Vudl9mbGcpKTsKKyAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAz KSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKC0xKTsgZWxzZSBuID0gMDsKKyAgICBwcmludGYoIiAg IEFDQ09VTlQ6ICVzXG4iLHRuX2Vudl9hY2N0KTsKKyAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAz KSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKC0xKTsgZWxzZSBuID0gMDsKKyAgICBwcmludGYoIiAg IERJU1BMQVk6ICVzXG4iLChjaGFyICopdG5fZ2V0X2Rpc3BsYXkoKSA/CisgICAgICAgICAgICAo Y2hhciAqKXRuX2dldF9kaXNwbGF5KCkgOiAiIik7CisgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0g MykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigtMSk7IGVsc2UgbiA9IDA7CisgICAgcHJpbnRmKCIg ICBKT0IgICAgOiAlc1xuIix0bl9lbnZfam9iKTsKKyAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAz KSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKC0xKTsgZWxzZSBuID0gMDsKKyAgICBwcmludGYoIiAg IFBSSU5URVI6ICVzXG4iLHRuX2Vudl9wcm50KTsKKyAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAz KSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKC0xKTsgZWxzZSBuID0gMDsKKyNpZm5kZWYgTk9TUEwK KyAgICBwcmludGYoIiAgIFVTRVIgICA6ICVzXG4iLHVpZGJ1Zik7CisgICAgaWYgKCsrbiA+IGNt ZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigtMSk7IGVsc2UgbiA9IDA7CisjZW5k aWYgLyogTk9TUEwgKi8KKyAgICBwcmludGYoIiAgIFNZU1RFTSA6ICVzXG4iLHRuX2Vudl9zeXMp OworICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oLTEp OyBlbHNlIG4gPSAwOworICAgIGZvciAoeCA9IDA7IHggPCA4OyB4KyspIHsKKyAgICAgICAgaWYg KHRuX2Vudl91c2VydmFyW3hdWzBdICYmIHRuX2Vudl91c2VydmFyW3hdWzFdKSB7CisgICAgICAg ICAgICBwcmludGYoIiAgICUtN3M6ICVzXG4iLHRuX2Vudl91c2VydmFyW3hdWzBdLAorICAgICAg ICAgICAgICAgICAgIHRuX2Vudl91c2VydmFyW3hdWzFdKTsKKyAgICAgICAgICAgIGlmICgrK24g PiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oLTEpOyBlbHNlIG4gPSAwOwor ICAgICAgICB9CisgICAgfQorI2VuZGlmIC8qIENLX0VOVklST05NRU5UICovCisjaWZkZWYgQ0tf U05ETE9DCisgICAgcHJpbnRmKCIgIExPQ0FUSU9OOiAlc1xuIiwgdG5fbG9jID8gdG5fbG9jIDog IiIpOworICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4o LTEpOyBlbHNlIG4gPSAwOworI2VuZGlmIC8qIENLX1NORExPQyAqLworI2lmZGVmIENLX0ZPUldB UkRfWAorICAgIHByaW50ZigiIC5YYXV0aG9yaXR5LWZpbGU6ICVzXG4iLCAoY2hhciAqKVhhdUZp bGVOYW1lKCkgPworICAgICAgICAgICAgKGNoYXIgKilYYXVGaWxlTmFtZSgpIDogIihub25lKSIp OworICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oLTEp OyBlbHNlIG4gPSAwOworI2VuZGlmIC8qIENLX0ZPUldBUkRfWCAqLworICAgIHJldHVybihuKTsK K30KKyNlbmRpZiAvKiBUTkNPREUgKi8KKworI2lmZGVmIENLX05FVEJJT1MKK3N0YXRpYyBpbnQK K3Nob25iKG4pIGludCBuOyB7CisgICAgcHJpbnRmKCJORVRCSU9TIHBhcmFtZXRlcnM6XG4iKTsK KyAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKC0xKTsg ZWxzZSBuID0gMDsKKyAgICBwcmludGYoIiBBUEkgICAgICAgOiAlc1xuIiwKKyAgICAgICAgICAg TmV0YmV1aUFQSSA/CisgICAgICAgICAgICJORVRBUEkuRExMIC0gSUJNIEV4dGVuZGVkIFNlcnZp Y2VzIG9yIE5vdmVsbCBOZXR3YXJlIFJlcXVlc3RlciIKKyAgICAgICAgICAgOiAiQUNTTkVUQi5E TEwgLSBJQk0gTmV0d29yayBUcmFuc3BvcnQgU2VydmljZXMvMiIgKSA7CisgICAgaWYgKCsrbiA+ IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigtMSk7IGVsc2UgbiA9IDA7Cisg ICAgcHJpbnRmKCIgTG9jYWwgTmFtZTogWyVzXVxuIiwgTmV0Qmlvc05hbWUpOworICAgIGlmICgr K24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oLTEpOyBlbHNlIG4gPSAw OworICAgIHByaW50ZigiIEFkYXB0ZXIgICA6ICVkXG4iLCBOZXRCaW9zQWRhcHRlcik7CisgICAg aWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigtMSk7IGVsc2Ug biA9IDA7CisgICAgaWYgKE5ldEJpb3NMU04gPiAweEZGKSB7CisgICAgICAgIHByaW50ZigiIFNl c3Npb24gICA6ICVkXG4iLCBOZXRCaW9zTFNOKTsKKyAgICB9IGVsc2UgeworICAgICAgICBwcmlu dGYoIiBTZXNzaW9uICAgOiBub25lIGFjdGl2ZVxuIik7CisgICAgfQorICAgIGlmICgrK24gPiBj bWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oLTEpOyBlbHNlIG4gPSAwOworICAg IHJldHVybihuKTsKK30KKyNlbmRpZiAvKiBDS19ORVRCSU9TICovCisKKyNpZm5kZWYgTk9ORVQK K2ludAorc2hvbmV0KCkgeworCisjaWZuZGVmIE5FVENPTk4KKyAgICBwcmludGYoIlxuTm8gbmV0 d29ya3MgYXJlIHN1cHBvcnRlZCBpbiB0aGlzIHZlcnNpb24gb2YgQy1LZXJtaXRcbiIpOworCisj ZWxzZQorI2lmZGVmIE5PTE9DQUwKKyAgICBwcmludGYoIlxuTm8gbmV0d29ya3MgYXJlIHN1cHBv cnRlZCBpbiB0aGlzIHZlcnNpb24gb2YgQy1LZXJtaXRcbiIpOworCisjZWxzZSAvKiByZXN0IG9m IHRoaXMgcm91dGluZSAqLworCisgICAgaW50IGksIG4gPSA0OworCisjaWZuZGVmIE5PRElBTAor ICAgIGlmIChubmV0ZGlyIDw9IDEpIHsKKyAgICAgICAgcHJpbnRmKCJcbk5ldHdvcmsgZGlyZWN0 b3J5OiAlc1xuIixuZXRkaXJbMF0gPyBuZXRkaXJbMF0gOiAiKG5vbmUpIik7CisgICAgICAgIG4r KzsKKyAgICB9IGVsc2UgeworICAgICAgICBpbnQgaTsKKyAgICAgICAgcHJpbnRmKCJcbk5ldHdv cmsgZGlyZWN0b3JpZXM6XG4iKTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IG5uZXRkaXI7IGkr KykgeworICAgICAgICAgICAgcHJpbnRmKCIlMmQuICVzXG4iLGksbmV0ZGlyW2ldKTsKKyAgICAg ICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7 IGVsc2UgbiA9IDA7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgLyogTk9ESUFMICovCisKKyNp ZmRlZiBTU0hDTUQKKyAgICB7CisgICAgICAgIGV4dGVybiBjaGFyICogc3NoY21kOworICAgICAg ICBwcmludGYoIlNTSCBDT01NQU5EOiAlc1xuIixzc2hjbWQgPyBzc2hjbWQgOiAic3NoIC1lIG5v bmUiKTsKKyAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJl dHVybigwKTsgZWxzZSBuID0gMDsKKyAgICB9CisjZW5kaWYgLyogU1NIQ01EICovCisKKyNpZmRl ZiBPUzIKKyAgICBwcmludGYoIlxuTmV0d29yayBhdmFpbGFiaWxpdHk6XG4iKTsKKyNlbHNlCisg ICAgcHJpbnRmKCJcblN1cHBvcnRlZCBuZXR3b3JrczpcbiIpOworI2VuZGlmIC8qIE9TMiAqLwor ICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVs c2UgbiA9IDA7CisKKyNpZmRlZiBWTVMKKworI2lmZGVmIFRDUFdBUkUKKyAgICBwcmludGYoIiBQ cm9jZXNzIFNvZnR3YXJlIENvcnBvcmF0aW9uIFRDUHdhcmUgZm9yIE9wZW5WTVMiKTsKKyNlbHNl CisjaWZkZWYgTVVMVElORVQKKyAgICBwcmludGYoIiBUR1YgTXVsdGlOZXQgVENQL0lQIik7Cisj ZWxzZQorI2lmZGVmIFdJTlRDUAorICAgIHByaW50ZigiIFdPTExPTkdPTkcgV0lOL1RDUCIpOwor I2Vsc2UKKyNpZmRlZiBERUNfVENQSVAKKyAgICB7CisgICAgICAgIHN0YXRpYyAkREVTQ1JJUFRP Uih0Y3BfZGVzYywiX1RDUDA6Iik7CisgICAgICAgIGludCBzdGF0dXM7CisgICAgICAgIGxvbmcg ZGV2Y2xhc3M7CisgICAgICAgIHN0YXRpYyBpbnQgaXRtY29kID0gRFZJJF9ERVZDTEFTUzsKKwor I2lmZGVmIENPTU1FTlQKKyAgICAgICAgc3RhdHVzID0gTElCJEdFVERWSSgmaXRtY29kLCAwLCAm dGNwX2Rlc2MsICZkZXZjbGFzcyk7CisjZWxzZQorICAgICAgICAvKiBNYXJ0aW4gWmluc2VyIDkv OTYgKi8KKyAgICAgICAgc3RhdHVzID0gbGliJGdldGR2aSgmaXRtY29kLCAwLCAmdGNwX2Rlc2Ms ICZkZXZjbGFzcyk7CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAgICBpZiAoKHN0YXR1cyAm IDEpICYmIChkZXZjbGFzcyA9PSBEQyRfU0NPTSkpCisgICAgICAgICAgcHJpbnRmKCIgUHJvY2Vz cyBTb2Z0d2FyZSBDb3Jwb3JhdGlvbiBUQ1B3YXJlIGZvciBPcGVuVk1TIik7CisgICAgICAgIGVs c2UKKyNpZmRlZiBVQ1g1MAorICAgICAgICAgIHByaW50ZigiIERFQyBUQ1AvSVAgU2VydmljZXMg Zm9yIChPcGVuKVZNUyA1LjAiKTsKKyNlbHNlCisgICAgICAgICAgcHJpbnRmKCIgREVDIFRDUC9J UCBTZXJ2aWNlcyBmb3IgKE9wZW4pVk1TIik7CisjZW5kaWYgLyogVUNYNTAgKi8KKyAgICB9Cisj ZWxzZQorI2lmZGVmIENNVV9UQ1BJUAorICAgIHByaW50ZigiIENNVS1PcGVuVk1TL0lQIik7Cisj ZWxzZQorICAgIHByaW50ZigiIE5vbmUiKTsKKyNlbmRpZiAvKiBDTVVfVENQSVAgKi8KKyNlbmRp ZiAvKiBERUNfVENQSVAgKi8KKyNlbmRpZiAvKiBXSU5UQ1AgKi8KKyNlbmRpZiAvKiBNVUxUSU5F VCAqLworI2VuZGlmIC8qIFRDUFdBUkUgKi8KKyAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBp ZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOworI2lmZGVmIFROQ09ERQorICAg IHByaW50ZigiLCBURUxORVQgcHJvdG9jb2xcblxuIik7CisgICAgaWYgKCsrbiA+IGNtZF9yb3dz IC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKKyAgICBuID0gc2hv dGVsKG4pOworICAgIGlmIChuIDwgMCkgcmV0dXJuKDApOworICAgIGlmICgrK24gPiBjbWRfcm93 cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7CisjZW5kaWYgLyog VE5DT0RFICovCisgICAgcHJpbnRmKCJcbiIpOworICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMp IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7CisgICAgcHJpbnRmKCJcbiIp OworICAgIG4gPSBzaG90Y3AoKytuKTsKKyAgICBpZiAobiA8IDApIHJldHVybigwKTsKKyNlbHNl IC8qIE5vdCBWTVMgKi8KKworI2lmZGVmIFNVTlgyNQorICAgIHByaW50ZigiIFN1bkxpbmsgWC4y NVxuIik7CisgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVy bigwKTsgZWxzZSBuID0gMDsKKyNlbmRpZiAvKiBTVU5YMjUgKi8KKworI2lmZGVmIFNUUkFUVVNY MjUKKyAgICBwcmludGYoIiBTdHJhdHVzIFZPUyBYLjI1XG4iKTsKKyAgICBpZiAoKytuID4gY21k X3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOworI2VuZGlm IC8qIFNUUkFUVVNYMjUgKi8KKworI2lmZGVmIElCTVgyNQorICAgIHByaW50ZigiIElCTSBBSVgg WC4yNVxuIik7CisgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJl dHVybigwKTsgZWxzZSBuID0gMDsKKyNlbmRpZiAvKiBJQk1YMjUgKi8KKworI2lmZGVmIEhQWDI1 CisgICAgcHJpbnRmKCIgSFAtVVggWC4yNVxuIik7CisgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0g MykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKKyNlbmRpZiAvKiBIUFgy NSAqLworCisjaWZkZWYgU1NIQlVJTFRJTgorICAgIGlmIChja19zc2xlYXlfaXNfaW5zdGFsbGVk KCkpCisgICAgICAgIHByaW50ZigiIFNTSCBWMSBhbmQgVjIgcHJvdG9jb2xzXG4iKTsKKyAgICBl bHNlCisgICAgICAgIHByaW50ZigiIFNTSCBWMSBhbmQgVjIgcHJvdG9jb2xzIC0gbm90IGF2YWls YWJsZVxuIik7CisjZW5kaWYgLyogU1NIQlVJTFRJTiAqLworCisjaWZkZWYgREVDTkVUCisjaWZk ZWYgT1MyCisjaWZkZWYgTlQKKyAgICBpZiAoZG5ldF9hdmFpbCkKKyAgICAgIHByaW50ZigiIERF Q25ldCwgTEFUIGFuZCBDVEVSTSBwcm90b2NvbHNcbiIpOworICAgIGVsc2UKKyAgICAgIHByaW50 ZigiIERFQ25ldCwgTEFUIGFuZCBDVEVSTSBwcm90b2NvbHMgLSBub3QgYXZhaWxhYmxlXG4iKTsK KyAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBl bHNlIG4gPSAwOworI2Vsc2UgLyogTlQgKi8KKyAgICBpZiAoZG5ldF9hdmFpbCkKKyAgICAgIHBy aW50ZigiIERFQ25ldCwgTEFUIHByb3RvY29sXG4iKTsKKyAgICBlbHNlCisgICAgICBwcmludGYo IiBERUNuZXQsIExBVCBwcm90b2NvbCAtIG5vdCBhdmFpbGFibGVcbiIpOworICAgIGlmICgrK24g PiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7Cisj ZW5kaWYgLyogTlQgKi8KKyNlbHNlCisgICAgcHJpbnRmKCIgREVDbmV0XG4iKTsKKyAgICBpZiAo KytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAw OworI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIERFQ05FVCAqLworCisjaWZkZWYgTlBJUEUK KyAgICBwcmludGYoIiBOYW1lZCBQaXBlc1xuIik7CisgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0g MykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKKyNlbmRpZiAvKiBOUElQ RSAqLworCisjaWZkZWYgQ0tfTkVUQklPUworICAgIGlmIChuZXRiaW9zQXZhaWwpCisgICAgICBw cmludGYoIiBORVRCSU9TXG4iKTsKKyAgICBlbHNlCisgICAgICBwcmludGYoIiBORVRCSU9TIC0g bm90IGF2YWlsYWJsZVxuIik7CisgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2tt b3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKKyNlbmRpZiAvKiBDS19ORVRCSU9TICovCisK KyNpZmRlZiBTVVBFUkxBVAorICAgIGlmIChzbGF0X2F2YWlsKQorICAgICAgcHJpbnRmKCIgU3Vw ZXJMQVRcbiIpOworICAgIGVsc2UKKyAgICAgIHByaW50ZigiIFN1cGVyTEFUIC0gbm90IGF2YWls YWJsZVxuIikgOworICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSBy ZXR1cm4oMCk7IGVsc2UgbiA9IDA7CisjZW5kaWYgLyogU1VQRVJMQVQgKi8KKworI2lmZGVmIFRD UFNPQ0tFVAorICAgIGlmICgKKyNpZmRlZiBPUzIKKyAgICAgICAgdGNwX2F2YWlsCisjZWxzZQor ICAgICAgICAxCisjZW5kaWYgLyogT1MyICovCisgICAgICAgICkgeworICAgICAgICBjaGFyIGlw YWRkclsxNl07CisKKyAgICAgICAgaWYgKGdldGxvY2FsaXBhZGRycyhpcGFkZHIsMTYsMCkgPCAw KSB7CisjaWZkZWYgT1MyT05MWQorICAgICAgICAgICAgcHJpbnRmKCIgVENQL0lQIHZpYSAlc1xu IiwgdGNwbmFtZSk7CisjZWxzZQorICAgICAgICAgICAgcHJpbnRmKCIgVENQL0lQXG4iKTsKKyNl bmRpZiAvKiBPUzJPTkxZICovCisgICAgICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBp ZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOworICAgICAgICB9IGVsc2Ugewor ICAgICAgICAgICAgaW50IGkgPSAxOworI2lmZGVmIE9TMk9OTFkKKyAgICAgICAgICBwcmludGYo IiBUQ1AvSVAgWyUxNnNdIHZpYSAlc1xuIiwgaXBhZGRyLCB0Y3BuYW1lKTsKKyNlbHNlCisgICAg ICAgICAgcHJpbnRmKCIgVENQL0lQIFslMTZzXVxuIixpcGFkZHIpOworI2VuZGlmIC8qIE9TMk9O TFkgKi8KKyAgICAgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgp KSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7CisKKyAgICAgICAgICAgIHdoaWxlIChnZXRsb2NhbGlw YWRkcnMoaXBhZGRyLDE2LGkrKykgPj0gMCkgeworICAgICAgICAgICAgICAgIHByaW50ZigiICAg ICAgICBbJTE2c11cbiIsaXBhZGRyKTsKKyAgICAgICAgICAgICAgICBpZiAoKytuID4gY21kX3Jv d3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOworICAgICAgICAg ICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChuZXR0eXBlID09IE5FVF9UQ1BCKSB7CisgICAg ICAgICAgICBwcmludGYoIlxuIik7CisgICAgICAgICAgICBuID0gc2hvdGNwKCsrbik7CisgICAg ICAgICAgICBpZiAobiA8IDApIHJldHVybigwKTsKKyNpZmRlZiBUTkNPREUKKyAgICAgICAgICAg IHByaW50ZigiXG4iKTsKKyAgICAgICAgICAgIG4gPSBzaG90ZWwoKytuKTsKKyAgICAgICAgICAg IGlmIChuIDwgMCkgcmV0dXJuKDApOworI2VuZGlmIC8qIFROQ09ERSAqLworICAgICAgICAgICAg aWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBu ID0gMDsKKyAgICAgICAgfQorI2lmZGVmIE9TMgorICAgIH0gZWxzZSB7CisgICAgICAgIHByaW50 ZigiIFRDUC9JUCAtIG5vdCBhdmFpbGFibGUlc1xuIix0Y3BuYW1lWzBdID8gdGNwbmFtZSA6ICIi ICk7CisgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1 cm4oMCk7IGVsc2UgbiA9IDA7CisjZW5kaWYgLyogT1MyICovCisgICAgfQorI2VuZGlmIC8qIFRD UFNPQ0tFVCAqLworCisjaWZkZWYgQ0tfTkVUQklPUworICAgIGlmIChuZXRiaW9zQXZhaWwgJiYg bmV0dHlwZSA9PSBORVRfQklPUykgeworICAgICAgIHByaW50ZigiXG4iKSA7CisgICAgICAgaWYg KChuID0gc2hvbmIoKytuKSkgPCAwKSByZXR1cm4oMCk7CisgICAgICAgaWYgKCsrbiA+IGNtZF9y b3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKKyAgICB9Cisj ZW5kaWYgLyogQ0tfTkVUQklPUyAqLworCisjZW5kaWYgLyogVk1TICovCisKKyAgICBwcmludGYo IlxuQWN0aXZlIG5ldHdvcmsgY29ubmVjdGlvbjpcbiIpOworICAgIGlmICgrK24gPiBjbWRfcm93 cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7CisKKyAgICBpZiAo bmV0d29yaykgeworICAgICAgICBwcmludGYoIiBIb3N0OiAlcyIsdHRuYW1lKTsKKyAgICAgICAg aWYgKChuZXR0eXBlID09IE5FVF9UQ1BBIHx8IG5ldHR5cGUgPT0gTkVUX1RDUEIpICYmICppcGFk ZHIpCisgICAgICAgICAgcHJpbnRmKCIgWyVzXSIsaXBhZGRyKTsKKyAgICB9IGVsc2UKKyAgICAg IHByaW50ZigiIEhvc3Q6IG5vbmUiKTsKKyAgICBwcmludGYoIiwgdmlhOiAiKTsKKyAgICBpZiAo bmV0dHlwZSA9PSBORVRfVENQQSB8fCBuZXR0eXBlID09IE5FVF9UQ1BCKQorICAgICAgcHJpbnRm KCJ0Y3AvaXBcbiIpOworICAgIGVsc2UgaWYgKG5ldHR5cGUgPT0gTkVUX1NYMjUpCisgICAgICBw cmludGYoIlN1bkxpbmsgWC4yNVxuIik7CisgICAgZWxzZSBpZiAobmV0dHlwZSA9PSBORVRfVlgy NSkKKyAgICAgIHByaW50ZigiU3RyYXR1cyBWT1MgWC4yNVxuIik7CisgICAgZWxzZSBpZiAobmV0 dHlwZSA9PSBORVRfSVgyNSkKKyAgICAgIHByaW50ZigiSUJNIEFJWCBYLjI1XG4iKTsKKyAgICBl bHNlIGlmIChuZXR0eXBlID09IE5FVF9IWDI1KQorICAgICAgcHJpbnRmKCJIUC1VWCBYLjI1XG4i KTsKKyAgICBlbHNlIGlmIChuZXR0eXBlID09IE5FVF9ERUMpIHsKKyAgICAgICAgaWYgKCB0dG5w cm90byA9PSBOUF9MQVQgKQorICAgICAgICAgIHByaW50ZigiREVDbmV0IExBVFxuIik7CisgICAg ICAgIGVsc2UgaWYgKCB0dG5wcm90byA9PSBOUF9DVEVSTSApCisgICAgICAgICAgcHJpbnRmKCJE RUNuZXQgQ1RFUk1cbiIpOworICAgICAgICBlbHNlCisgICAgICAgICAgcHJpbnRmKCJERUNuZXRc biIpOworICAgIH0gZWxzZSBpZiAobmV0dHlwZSA9PSBORVRfUElQRSkKKyAgICAgIHByaW50Zigi TmFtZWQgUGlwZXNcbiIpOworICAgIGVsc2UgaWYgKG5ldHR5cGUgPT0gTkVUX0JJT1MpCisgICAg ICBwcmludGYoIk5ldEJJT1NcbiIpOworICAgIGVsc2UgaWYgKG5ldHR5cGUgPT0gTkVUX1NMQVQp CisgICAgICBwcmludGYoIlN1cGVyTEFUXG4iKTsKKworI2lmZGVmIE5FVEZJTEUKKyAgICBlbHNl IGlmICggbmV0dHlwZSA9PSBORVRfRklMRSApCisgICAgICBwcmludGYoImxvY2FsIGZpbGVcbiIp OworI2VuZGlmIC8qIE5FVEZJTEUgKi8KKyNpZmRlZiBORVRDTUQKKyAgICBlbHNlIGlmICggbmV0 dHlwZSA9PSBORVRfQ01EICkKKyAgICAgIHByaW50ZigicGlwZVxuIik7CisjZW5kaWYgLyogTkVU Q01EICovCisjaWZkZWYgTkVUUFRZCisgICAgZWxzZSBpZiAoIG5ldHR5cGUgPT0gTkVUX1BUWSAp CisgICAgICAgIHByaW50ZigicHNldWRvdGVybWluYWxcbiIpOworI2VuZGlmIC8qIE5FVFBUWSAq LworI2lmZGVmIE5FVERMTAorICAgIGVsc2UgaWYgKCBuZXR0eXBlID09IE5FVF9ETEwgKQorICAg ICAgcHJpbnRmKCJkeW5hbWljIGxpbmsgbGlicmFyeVxuIik7CisjZW5kaWYgLyogTkVURExMICov CisgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsg ZWxzZSBuID0gMDsKKworI2lmZGVmIEFOWVgyNQorICAgIGlmICgobmV0dHlwZSA9PSBORVRfU1gy NSkgfHwKKyAgICAgICAgKG5ldHR5cGUgPT0gTkVUX1ZYMjUpIHx8CisgICAgICAgIChuZXR0eXBl ID09IE5FVF9JWDI1KSkKKyAgICAgIGlmICgobiA9IHNob3gyNShuKSkgPCAwKSByZXR1cm4oMCk7 CisjZW5kaWYgLyogQU5ZWDI1ICovCisKKyNpZmRlZiBTU0hCVUlMVElOCisgICAgaWYgKG5ldHR5 cGUgPT0gTkVUX1NTSCkgeworICAgICAgICBwcmludGYoIlNlY3VyZSBTaGVsbCBwcm90b2NvbFxu Iik7CisgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1 cm4oMCk7IGVsc2UgbiA9IDA7CisgICAgfQorI2VuZGlmIC8qIFNTSEJVSUxUSU4gKi8KKworICAg IGlmIChuZXR0eXBlID09IE5FVF9UQ1BBIHx8IG5ldHR5cGUgPT0gTkVUX1RDUEIpIHsKKyNpZmRl ZiBSTE9HQ09ERQorICAgICAgICBpZiAodHRucHJvdG8gPT0gTlBfUkxPR0lOKSB7CisgICAgICAg ICAgICBwcmludGYoIiBMT0dJTiAocmxvZ2luKSBwcm90b2NvbFxuIik7CisgICAgICAgICAgICBp ZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4g PSAwOworICAgICAgICB9CisjaWZkZWYgQ0tfS0VSQkVST1MKKyAgICAgICAgZWxzZSBpZiAodHRu cHJvdG8gPT0gTlBfSzRMT0dJTikgeworICAgICAgICAgICAgcHJpbnRmKCIgS2VyYmVyb3MgNCBM T0dJTiAoa2xvZ2luKSBwcm90b2NvbFxuIik7CisgICAgICAgICAgICBpZiAoKytuID4gY21kX3Jv d3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOworICAgICAgICB9 CisgICAgICAgIGVsc2UgaWYgKHR0bnByb3RvID09IE5QX0VLNExPR0lOKSB7CisgICAgICAgICAg ICBwcmludGYoIiBFbmNyeXB0ZWQgS2VyYmVyb3MgNCBMT0dJTiAoZWtsb2dpbikgcHJvdG9jb2xc biIpOworICAgICAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkp IHJldHVybigwKTsgZWxzZSBuID0gMDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICh0dG5w cm90byA9PSBOUF9LNUxPR0lOKSB7CisgICAgICAgICAgICBwcmludGYoIiBLZXJiZXJvcyA1IExP R0lOIChrbG9naW4pIHByb3RvY29sXG4iKTsKKyAgICAgICAgICAgIGlmICgrK24gPiBjbWRfcm93 cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7CisgICAgICAgIH0K KyAgICAgICAgZWxzZSBpZiAodHRucHJvdG8gPT0gTlBfRUs1TE9HSU4pIHsKKyAgICAgICAgICAg IHByaW50ZigiIEVuY3J5cHRlZCBLZXJiZXJvcyA1IExPR0lOIChla2xvZ2luKSBwcm90b2NvbFxu Iik7CisgICAgICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkg cmV0dXJuKDApOyBlbHNlIG4gPSAwOworICAgICAgICB9CisjZW5kaWYgLyogQ0tfS0VSQkVST1Mg Ki8KKyNlbmRpZiAvKiBSTE9HQ09ERSAqLworI2lmZGVmIENLX0tFUkJFUk9TCisgICAgICAgIGlm ICh0dG5wcm90byA9PSBOUF9LNVUyVSkgeworICAgICAgICAgICAgcHJpbnRmKCIgS2VyYmVyb3Mg NSBVc2VyIHRvIFVzZXIgcHJvdG9jb2xcbiIpOworICAgICAgICAgICAgaWYgKCsrbiA+IGNtZF9y b3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKKyAgICAgICAg fQorI2VuZGlmIC8qIENLX0tFUkJFUk9TICovCisKKyNpZmRlZiBUTkNPREUKKyAgICAgICAgaWYg KElTX1RFTE5FVCgpKSB7CisgICAgICAgICAgICBwcmludGYoIiBURUxORVQgcHJvdG9jb2xcbiIp OworICAgICAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJl dHVybigwKTsgZWxzZSBuID0gMDsKKyAgICAgICAgICAgIHByaW50ZigiIEVjaG9pbmcgaXMgY3Vy cmVudGx5ICVzXG4iLGR1cGxleCA/ICJsb2NhbCIgOiAicmVtb3RlIik7CisgICAgICAgICAgICBp ZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4g PSAwOworICAgICAgICB9CisjZW5kaWYgLyogVE5DT0RFICovCisgICAgICAgIGlmICh0dG5wcm90 byA9PSBOUF9UQ1BSQVcpIHsKKyAgICAgICAgICAgIHByaW50ZigiIFJhdyBUQ1Agc29ja2V0XG4i KTsKKyAgICAgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSBy ZXR1cm4oMCk7IGVsc2UgbiA9IDA7CisgICAgICAgIH0KKyAgICB9CisgICAgcHJpbnRmKCJcbiIp OworI2VuZGlmIC8qIE5PTE9DQUwgKi8KKyNlbmRpZiAvKiBORVRDT05OICovCisgICAgcmV0dXJu KDApOworfQorI2VuZGlmIC8qIE5PTkVUICovCisKKyNpZm5kZWYgTk9ESUFMCitWT0lECitzaG9k aWFsKCkgeworICAgIGlmIChtZG10eXAgPj0gMCB8fCBsb2NhbCAhPSAwKSBkb3Nob2RpYWwoKTsK K30KKworVk9JRAorc2hvZHMocykgY2hhciAqczsgeyAgICAgICAgICAgICAgICAgICAgIC8qIFNo b3cgYSBkaWFsLXJlbGF0ZWQgc3RyaW5nICovCisgICAgY2hhciBjOworICAgIGlmIChzID09IE5V TEwgfHwgISgqcykpIHsgICAgICAgICAgIC8qIEVtcHR5PyAqLworICAgICAgICBwcmludGYoIihu b25lKVxuIik7CisgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTm90 IGVtcHR5LiAqLworICAgICAgICB3aGlsZSAoKGMgPSAqcysrKSkgICAgICAgICAgICAgIC8qIENh biBjb250YWluIGNvbnRyb2xzICovCisgICAgICAgICAgaWYgKGMgPT0gJ1xcJykgICAgICAgICAg ICAgICAgLyogYSBiYWNrc2xhc2ggKi8KKyAgICAgICAgICAgIHByaW50ZigiXFxcXCIpOworICAg ICAgICAgIGVsc2UgaWYgKGMgPiAzMSAmJiBjIDwgMTI3KSB7CisgICAgICAgICAgICAgIHB1dGNo YXIoYyk7CisgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBwcmludGYoIlxceyVkfSIsYyk7 CisgICAgICAgIHByaW50ZigiXG4iKTsKKyAgICB9Cit9CisKK2ludAorZG9zaG9kaWFsKCkgewor CisgICAgaW50IGksIG4gPSAyOworCisgICAgcHJpbnRmKCIgRGlhbCBzdGF0dXM6ICAlZCIsIGRp YWxzdGEpOworCisjaWZkZWYgQklHQlVGT0sKKyAgICBpZiAoZGlhbHN0YSA+IDkwKQorICAgICAg cHJpbnRmKCIgPSBVbmtub3duIGVycm9yIik7CisgICAgZWxzZSBpZiAoZGlhbHN0YSA8IDApCisg ICAgICBwcmludGYoIiA9IChub25lKSIpOworICAgIGVsc2UgaWYgKGRpYWxzdGEgPCAzNSAmJiBk aWFsbXNnW2RpYWxzdGFdKQorICAgICAgcHJpbnRmKCIgPSAlcyIsIGRpYWxtc2dbZGlhbHN0YV0p OworI2VuZGlmIC8qIEJJR0JVRk9LICovCisgICAgbisrOworICAgIGlmIChuZGlhbGRpciA8PSAx KSB7CisgICAgICAgIHByaW50ZigiXG4gRGlhbCBkaXJlY3Rvcnk6ICVzXG4iLGRpYWxkaXJbMF0g PyBkaWFsZGlyWzBdIDogIihub25lKSIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGludCBpOwor ICAgICAgICBwcmludGYoIlxuIERpYWwgZGlyZWN0b3JpZXM6XG4iKTsKKyAgICAgICAgZm9yIChp ID0gMDsgaSA8IG5kaWFsZGlyOyBpKyspCisgICAgICAgICAgcHJpbnRmKCIlMmQuICVzXG4iLGkr MSxkaWFsZGlyW2ldKTsKKyAgICAgICAgbiArPSBuZGlhbGRpcjsKKyAgICB9CisgICAgcHJpbnRm KCIgRGlhbCBtZXRob2Q6ICAiKTsKKyAgICBpZiAgICAgIChkaWFsbWF1dG8pICAgICAgICAgcHJp bnRmKCJhdXRvICAgIik7CisgICAgZWxzZSBpZiAoZGlhbG10aCA9PSBYWURNX0QpIHByaW50Zigi ZGVmYXVsdCIpOworICAgIGVsc2UgaWYgKGRpYWxtdGggPT0gWFlETV9QKSBwcmludGYoInB1bHNl ICAiKTsKKyAgICBlbHNlIGlmIChkaWFsbXRoID09IFhZRE1fVCkgcHJpbnRmKCJ0b25lICAgIik7 CisgICAgcHJpbnRmKCIgICAgICAgICBEaWFsIHNvcnQ6ICVzXG4iLGRpYWxzcnQgPyAib24iIDog Im9mZiIpOworICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1 cm4oMCk7IGVsc2UgbiA9IDA7CisgICAgcHJpbnRmKCIgRGlhbCBoYW5ndXA6ICAlcyAgICAgICAg ICAgICBEaWFsIGRpc3BsYXk6ICVzXG4iLAorICAgICAgICAgICBkaWFsaG5nID8gIm9uICIgOiAi b2ZmIiwgZGlhbGRweSA/ICJvbiIgOiAib2ZmIik7CisgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0g MykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKKyAgICBpZiAoZGlhbHJ0 ciA+IDApIHsKKyAgICAgICAgcHJpbnRmKCIgRGlhbCByZXRyaWVzOiAlLTEyZCAgICBEaWFsIGlu dGVydmFsOiAlZFxuIiwKKyAgICAgICAgICAgICAgIGRpYWxydHIsIGRpYWxpbnQpOworICAgIH0g ZWxzZSB7CisgICAgICAgIHByaW50ZigiIERpYWwgcmV0cmllczogKGF1dG8pICAgICAgICAgIERp YWwgaW50ZXJ2YWw6ICVkXG4iLCBkaWFsaW50KTsKKyAgICB9CisgICAgaWYgKCsrbiA+IGNtZF9y b3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKKyAgICBwcmlu dGYoIiBEaWFsIHRpbWVvdXQ6ICIpOworI2lmZGVmIENLX1RBUEkKKyAgICBpZiAodHR0YXBpICYm ICF0YXBpcGFzcykKKyAgICAgICAgcHJpbnRmKCIodGFwaSkiKTsKKyAgICBlbHNlCisjZW5kaWYg LyogQ0tfVEFQSSAqLworICAgIGlmIChkaWFsdG1vID4gMCkKKyAgICAgIHByaW50ZigiJTRkIHNl YyIsIGRpYWx0bW8pOworICAgIGVsc2UKKyAgICAgIHByaW50ZigiMCAoYXV0bykiKTsKKyAgICBw cmludGYoIiAgICAgICAgUmVkaWFsIG51bWJlcjogJXNcbiIsZGlhbG51bSA/IGRpYWxudW0gOiAi KG5vbmUpIik7CisgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJl dHVybigwKTsgZWxzZSBuID0gMDsKKyAgICBwcmludGYoIiBEaWFsIGNvbmZpcm1hdGlvbjogJXMg ICAgICAgIERpYWwgY29udmVydC1kaXJlY3Rvcnk6ICVzXG4iLAorICAgICAgICAgICBkaWFsY25m ID8gIm9uICIgOiAib2ZmIiwKKyAgICAgICAgICAgZGlhbGN2dCA/ICgoZGlhbGN2dCA9PSAxKSA/ ICJvbiIgOiAiYXNrIikgOiAib2ZmIik7CisgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYg KCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKKyAgICBwcmludGYoIiBEaWFsIGln bm9yZS1kaWFsdG9uZTogJXMiLCBkaWFsaWR0ID8gIm9uICIgOiAib2ZmIik7CisgICAgcHJpbnRm KCIgICAgIERpYWwgcGFjaW5nOiAlZFxuIixkaWFscGFjZSk7CisgICAgaWYgKCsrbiA+IGNtZF9y b3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKKyAgICBwcmlu dGYoCisiIERpYWwgcHJlZml4OiAgICAgICAgICAgICAgICAgICVzXG4iLCBkaWFsbnByID8gZGlh bG5wciA6ICIobm9uZSkiKTsKKyAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21v cmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOworICAgIHByaW50ZigKKyIgRGlhbCBzdWZmaXg6 ICAgICAgICAgICAgICAgICAgJXNcbiIsIGRpYWxzZnggPyBkaWFsc2Z4IDogIihub25lKSIpOwor ICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVs c2UgbiA9IDA7CisgICAgcHJpbnRmKAorIiBEaWFsIGNvdW50cnktY29kZTogICAgICAgICAgICAl LTEycyIsIGRpYWxsY2MgPyBkaWFsbGNjIDogIihub25lKSIpOworICAgIHByaW50ZigiRGlhbCBj b25uZWN0OiAgJXMiLCBkaWFsY29uID8gKChkaWFsY29uID09IDEpID8gIm9uIiA6ICJhdXRvIikK KyAgICAgICAgICAgOiAib2ZmIik7CisgICAgaWYgKGRpYWxjb24gIT0gQ0FSX09GRikKKyAgICAg IHByaW50ZigiICVzIiwgZGlhbGNxID8gInF1aWV0IiA6ICJ2ZXJib3NlIik7CisgICAgcHJpbnRm KAorIlxuIERpYWwgYXJlYS1jb2RlOiAgICAgICAgICAgICAgICUtMTJzIiwgZGlhbGxhYyA/IGRp YWxsYWMgOiAiKG5vbmUpIik7CisgICAgbisrOworICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMp IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7CisgICAgcHJpbnRmKCJEaWFs IHJlc3RyaWN0OiAiKTsKKyAgICBpZiAoZGlhbHJzdHIgPT0gNSkgcHJpbnRmKCJpbnRlcm5hdGlv bmFsXG4iKTsKKyAgICBlbHNlIGlmIChkaWFscnN0ciA9PSA0KSBwcmludGYoImxvbmctZGlzdGFu Y2VcbiIpOworICAgIGVsc2UgaWYgKGRpYWxyc3RyID09IDIpIHByaW50ZigibG9jYWxcbiIpOwor ICAgIGVsc2UgaWYgKGRpYWxyc3RyID09IDYpIHByaW50Zigibm9uZVxuIik7CisgICAgZWxzZSBw cmludGYoIj9cbiIpOworICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgp KSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7CisgICAgcHJpbnRmKCIgRGlhbCBsYy1hcmVhLWNvZGVz OiAgICAgICAgICAgIik7CisgICAgaWYgKG5sb2NhbGFjID09IDApCisgICAgICBwcmludGYoIihu b25lKSIpOworICAgIGVsc2UKKyAgICAgIGZvciAoaSA9IDA7IGkgPCBubG9jYWxhYzsgaSsrKQor ICAgICAgICBwcmludGYoIiVzICIsIGRpYWxsY2FjW2ldKTsKKyAgICBwcmludGYoCisiXG4gRGlh bCBsYy1wcmVmaXg6ICAgICAgICAgICAgICAgJXNcbiIsIGRpYWxsY3AgPyBkaWFsbGNwIDogIihu b25lKSIpOworICAgIG4rKzsKKyAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21v cmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOworICAgIHByaW50ZigKKyIgRGlhbCBsYy1zdWZm aXg6ICAgICAgICAgICAgICAgJXNcbiIsIGRpYWxsY3MgPyBkaWFsbGNzIDogIihub25lKSIpOwor ICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVs c2UgbiA9IDA7CisgICAgcHJpbnRmKAorIiBEaWFsIGxkLXByZWZpeDogICAgICAgICAgICAgICAl c1xuIiwgZGlhbGxkcCA/IGRpYWxsZHAgOiAiKG5vbmUpIik7CisgICAgaWYgKCsrbiA+IGNtZF9y b3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKKyAgICBwcmlu dGYoCisiIERpYWwgbGQtc3VmZml4OiAgICAgICAgICAgICAgICVzXG4iLCBkaWFsbGRzID8gZGlh bGxkcyA6ICIobm9uZSkiKTsKKyAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21v cmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOworICAgIHByaW50ZigKKyIgRGlhbCBmb3JjZS1s b25nLWRpc3RhbmNlICAgICAgJXNcbiIsIHNob3dvZmYoZGlhbGZsZCkpOworICAgIGlmICgrK24g PiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7Cisg ICAgcHJpbnRmKAorIiBEaWFsIGludGwtcHJlZml4OiAgICAgICAgICAgICAlc1xuIiwgZGlhbGl4 cCA/IGRpYWxpeHAgOiAiKG5vbmUpIik7CisgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYg KCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKKyAgICBwcmludGYoCisiIERpYWwg aW50bC1zdWZmaXg6ICAgICAgICAgICAgICVzXG4iLCBkaWFsaXhzID8gZGlhbGl4cyA6ICIobm9u ZSkiKTsKKyAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJu KDApOyBlbHNlIG4gPSAwOworICAgIHByaW50ZigKKyIgRGlhbCB0b2xsLWZyZWUtYXJlYS1jb2Rl OiAgICAgIik7CisgICAgaWYgKG50b2xsZnJlZSA9PSAwKQorICAgICAgcHJpbnRmKCIobm9uZSki KTsKKyAgICBlbHNlCisgICAgICBmb3IgKGkgPSAwOyBpIDwgbnRvbGxmcmVlOyBpKyspCisgICAg ICAgIHByaW50ZigiJXMgIiwgZGlhbHRmY1tpXSk7CisgICAgcHJpbnRmKCJcbiIpOworICAgIGlm ICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9 IDA7CisKKyAgICBwcmludGYoCisiIERpYWwgcHVsc2UtY291bnRyaWVzOiAgICAgICAgICIpOwor ICAgIGlmIChuZGlhbHB1Y2MgPT0gMCkKKyAgICAgIHByaW50ZigiKG5vbmUpIik7CisgICAgZWxz ZQorICAgICAgZm9yIChpID0gMDsgaSA8IG5kaWFscHVjYzsgaSsrKQorICAgICAgICBwcmludGYo IiVzICIsIGRpYWxwdWNjW2ldKTsKKyAgICBwcmludGYoIlxuIik7CisgICAgaWYgKCsrbiA+IGNt ZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKKworICAg IHByaW50ZigKKyIgRGlhbCB0b25lLWNvdW50cmllczogICAgICAgICAgIik7CisgICAgaWYgKG5k aWFsdG9jYyA9PSAwKQorICAgICAgcHJpbnRmKCIobm9uZSkiKTsKKyAgICBlbHNlCisgICAgICBm b3IgKGkgPSAwOyBpIDwgbmRpYWx0b2NjOyBpKyspCisgICAgICAgIHByaW50ZigiJXMgIiwgZGlh bHRvY2NbaV0pOworICAgIHByaW50ZigiXG4iKTsKKyAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAz KSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOworCisgICAgcHJpbnRmKAor CSIgRGlhbCB0b2xsLWZyZWUtcHJlZml4OiAgICAgICAgJXNcbiIsCisJZGlhbHRmcCA/IGRpYWx0 ZnAgOgorCShkaWFsbGRwID8gZGlhbGxkcCA6ICIobm9uZSkiKQorCSk7CisgICAgaWYgKCsrbiA+ IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKKyAg ICBwcmludGYoIiBEaWFsIHBieC1leGNoYW5nZTogICAgICAgICAgICAiKTsKKyAgICBpZiAobmRp YWxweHggPT0gMCkKKyAgICAgIHByaW50ZigiKG5vbmUpIik7CisgICAgZWxzZQorICAgICAgZm9y IChpID0gMDsgaSA8IG5kaWFscHh4OyBpKyspCisgICAgICAgIHByaW50ZigiJXMgIiwgZGlhbHB4 eFtpXSk7CisgICAgcHJpbnRmKCJcbiIpOworCisgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykg aWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKKyAgICBwcmludGYoCisiIERp YWwgcGJ4LWluc2lkZS1wcmVmaXg6ICAgICAgICVzXG4iLCBkaWFscHhpID8gZGlhbHB4aSA6ICIo bm9uZSkiKTsKKyAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0 dXJuKDApOyBlbHNlIG4gPSAwOworICAgIHByaW50ZigKKyIgRGlhbCBwYngtb3V0c2lkZS1wcmVm aXg6ICAgICAgJXNcbiIsIGRpYWxweG8gPyBkaWFscHhvIDogIihub25lKSIpOworICAgIGlmICgr K24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7 CisgICAgcHJpbnRmKAorIiBEaWFsIG1hY3JvOiAgICAgICAgICAgICAgICAgICAlc1xuIiwgZGlh bG1hYyA/IGRpYWxtYWMgOiAiKG5vbmUpIik7CisgICAgcmV0dXJuKDApOworfQorI2VuZGlmIC8q IE5PRElBTCAqLworI2VuZGlmIC8qIE5PTE9DQUwgKi8KKworLyogIFNob3cgRmlsZSBQYXJhbWV0 ZXJzICovCisKK3N0YXRpYyBjaGFyICoKK3BhdGh2YWwoeCkgaW50IHg7IHsKKyAgICBzd2l0Y2gg KHgpIHsKKyAgICAgIGNhc2UgUEFUSF9PRkY6ICByZXR1cm4oIm9mZiIpOworICAgICAgY2FzZSBQ QVRIX0FCUzogIHJldHVybigiYWJzb2x1dGUiKTsKKyAgICAgIGNhc2UgUEFUSF9SRUw6ICByZXR1 cm4oInJlbGF0aXZlIik7CisgICAgICBjYXNlIFBBVEhfQVVUTzogcmV0dXJuKCJhdXRvIik7Cisg ICAgICBkZWZhdWx0OiByZXR1cm4oInVua25vd24iKTsKKyAgICB9Cit9CisKK1ZPSUQKK3Nob2Zp bCgpIHsKKyAgICBjaGFyICpzOyBpbnQgaSA9IDAsIG4gPSAxOworICAgIGV4dGVybiBjaGFyICog aWZkbmFtW107CisgICAgZXh0ZXJuIGludCB3aWxkZW5hOworI2lmZGVmIFVOSVgKKyAgICBleHRl cm4gaW50IHdpbGR4cGFuZDsKKyNlbmRpZiAvKiBVTklYICovCisgICAgZXh0ZXJuIGNoYXIgKiBz bmRfbW92ZSwgKiBzbmRfcmVuYW1lLCAqIHJjdl9tb3ZlLCAqIHJjdl9yZW5hbWU7CisjaWZkZWYg UEFUVEVSTlMKKyAgICBleHRlcm4gaW50IHBhdHRlcm5zOworI2VuZGlmIC8qIFBBVFRFUk5TICov CisgICAgZXh0ZXJuIGNoYXIgKiByZnNwZWMsICogc2ZzcGVjOworI2lmZGVmIFVOSVgKKyAgICBl eHRlcm4gaW50IHpvYnVmc2l6ZSwgem9mYnVmZmVyLCB6b2ZibG9jazsKKyNlbmRpZiAvKiBVTklY ICovCisjaWZkZWYgQ0tfQ1RSTFoKKyAgICBleHRlcm4gaW50IGVvZm1ldGhvZDsKKyNlbmRpZiAv KiBDS19DVFJMWiAqLworCisgICAgcHJpbnRmKCJcbiIpOworCisjaWZkZWYgVk1TCisgICAgcHJp bnRmKCIgRmlsZSByZWNvcmQtTGVuZ3RoOiAgICAgICU1ZFxuIixmcmVjbCk7CisgICAgbisrOwor I2VuZGlmIC8qIFZNUyAqLworCisjaWZuZGVmIE5PWEZFUgorICAgIHByaW50ZigiIFRyYW5zZmVy IG1vZGU6ICAgICAgICAgICAlc1xuIiwKKyAgICAgICAgICAgeGZlcm1vZGUgPT0gWE1PREVfQSA/ CisgICAgICAgICAgICJhdXRvbWF0aWMiIDoKKyAgICAgICAgICAgIm1hbnVhbCIKKyAgICAgICAg ICAgKTsKKyAgICBuKys7CisjaWZkZWYgUEFUVEVSTlMKKyAgICBwcmludGYoIiBGaWxlIHBhdHRl cm5zOiAgICAgICAgICAgJXMiLCBzaG93b29hKHBhdHRlcm5zKSk7CisgICAgaWYgKHhmZXJtb2Rl ID09IFhNT0RFX00gJiYgcGF0dGVybnMpCisgICAgICBwcmludGYoIiAoYnV0IGRpc2FibGVkIGJ5 IFRSQU5TRkVSLU1PREUgTUFOVUFMKSIpOworICAgIGVsc2UgaWYgKHBhdHRlcm5zKQorICAgICAg cHJpbnRmKCIgKFNIT1cgUEFUVEVSTlMgZm9yIGxpc3QpIik7CisgICAgcHJpbnRmKCJcbiIpOwor ICAgIG4rKzsKKyNlbmRpZiAvKiBQQVRURVJOUyAqLworICAgIGlmIChmaWxlcGVlaykKKyAgICAg IHByaW50ZigiIEZpbGUgc2NhbjogICAgICAgICAgICAgICBvbiAlZFxuIiwgbnNjYW5maWxlKTsK KyAgICBlbHNlCisgICAgICBwcmludGYoIiBGaWxlIHNjYW46ICAgICAgICAgICAgICAgb2ZmXG4i KTsKKyAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuOyBl bHNlIG4gPSAwOworICAgIGlmICh4ZmVybW9kZSA9PSBYTU9ERV9BKQorICAgICAgcHJpbnRmKCIg RGVmYXVsdCBmaWxlIHR5cGU6ICAgICAgICVzXG4iLHNob3htKCkpOworICAgIGVsc2UKKyAgICAg IHByaW50ZigiIEZpbGUgdHlwZTogICAgICAgICAgICAgICAlc1xuIixzaG94bSgpKTsKKyAgICBu Kys7CisgICAgaWYgKGZuY252ID09IFhZRk5fTCkKKyAgICAgIHMgPSAibGl0ZXJhbCI7CisgICAg ZWxzZSBpZiAoZm5jbnYgPT0gWFlGTl9DKQorICAgICAgcyA9ICJjb252ZXJ0ZWQiOworICAgIGVs c2UKKyAgICAgIHMgPSAiKHVua25vd24pIjsKKyAgICBwcmludGYoIiBGaWxlIG5hbWVzOiAgICAg ICAgICAgICAgJXNcbiIscyk7CisgICAgbisrOworICAgIHByaW50ZigiIFNlbmQgcGF0aG5hbWVz OiAgICAgICAgICAlc1xuIiwgcGF0aHZhbChmbnNwYXRoKSk7CisgICAgbisrOworICAgIHByaW50 ZigiIFJlY2VpdmUgcGF0aG5hbWVzOiAgICAgICAlc1xuIiwgcGF0aHZhbChmbnJwYXRoKSk7Cisg ICAgbisrOworI2lmZGVmIFVOSVhPUk9TSworICAgIHByaW50ZigiIE1hdGNoIGRvdCBmaWxlczog ICAgICAgICAlc1xuIiwgbWF0Y2hkb3QgPyAieWVzIiA6ICJubyIpOworICAgIG4rKzsKKyNpZmRl ZiBVTklYCisgICAgcHJpbnRmKCIgV2lsZGNhcmQtZXhwYW5zaW9uOiAgICAgICVzICglcylcbiIs IHNob3dvZmYod2lsZGVuYSksCisJICAgd2lsZHhwYW5kID8gInNoZWxsIiA6ICJrZXJtaXQiKTsK KyAgICBuKys7CisjZW5kaWYgLyogVU5JWCAqLworI2VuZGlmIC8qIFVOSVhPUk9TSyAqLworICAg IHByaW50ZigiIEZpbGUgY29sbGlzaW9uOiAgICAgICAgICAiKTsKKyAgICBmb3IgKGkgPSAwOyBp IDwgbmNvbHg7IGkrKykKKyAgICAgIGlmIChjb2x4dGFiW2ldLmt3dmFsID09IGZuY2FjdCkgYnJl YWs7CisgICAgcHJpbnRmKCIlc1xuIiwgKGkgPT0gbmNvbHgpID8gInVua25vd24iIDogY29seHRh YltpXS5rd2QpOworICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSBy ZXR1cm47IGVsc2UgbiA9IDA7CisgICAgcHJpbnRmKCIgRmlsZSBkZXN0aW5hdGlvbjogICAgICAg ICVzXG4iLAorICAgICAgICAgICAoZGVzdCA9PSBERVNUX0QpID8gImRpc2siIDoKKyAgICAgICAg ICAgKChkZXN0ID09IERFU1RfUykgPyAic2NyZWVuIiA6CisgICAgICAgICAgICAoKGRlc3QgPT0g REVTVF9OKSA/ICJub3doZXJlIiA6CisgICAgICAgICAgICAicHJpbnRlciIpKQorICAgICAgICAg ICApOworICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm47 IGVsc2UgbiA9IDA7CisgICAgcyA9IChrZWVwID49IDAgJiYga2VlcCA8PSAyKSA/IGlmZG5hbVtr ZWVwXSA6ICJrZWVwIjsKKyAgICBwcmludGYoIiBGaWxlIGluY29tcGxldGU6ICAgICAgICAgJXNc biIscyk7CisgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVy bjsgZWxzZSBuID0gMDsKKyAgICBwcmludGYoIiBGaWxlIGJ5dGVzaXplOiAgICAgICAgICAgJWRc biIsKGZtYXNrID09IDAxNzcpID8gNyA6IDgpOworICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMp IGlmICghYXNrbW9yZSgpKSByZXR1cm47IGVsc2UgbiA9IDA7CisjaWZuZGVmIE5PQ1NFVFMKKyAg ICBwcmludGYoIiBGaWxlIGNoYXJhY3Rlci1zZXQ6ICAgICAgJXNcbiIsZmNzaW5mb1tmY2hhcnNl dF0ua2V5d29yZCk7CisgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkp IHJldHVybjsgZWxzZSBuID0gMDsKKyAgICBwcmludGYoIiBGaWxlIGRlZmF1bHQgNy1iaXQ6ICAg ICAgJXNcbiIsZmNzaW5mb1tkY3NldDddLmtleXdvcmQpOworICAgIGlmICgrK24gPiBjbWRfcm93 cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm47IGVsc2UgbiA9IDA7CisgICAgcHJpbnRmKCIg RmlsZSBkZWZhdWx0IDgtYml0OiAgICAgICVzXG4iLGZjc2luZm9bZGNzZXQ4XS5rZXl3b3JkKTsK KyAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuOyBlbHNl IG4gPSAwOworI2lmZGVmIFVOSUNPREUKKyAgICBwcmludGYoIiBGaWxlIFVDUyBib206ICAgICAg ICAgICAgJXNcbiIsc2hvd29mZih1Y3Nib20pKTsKKyAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAz KSBpZiAoIWFza21vcmUoKSkgcmV0dXJuOyBlbHNlIG4gPSAwOworICAgIHByaW50ZigiIEZpbGUg VUNTIGJ5dGUtb3JkZXI6ICAgICAlcy1lbmRpYW5cbiIsCisgICAgICAgICAgIHVjc29yZGVyID8g ImxpdHRsZSIgOiAiYmlnIik7CisgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2tt b3JlKCkpIHJldHVybjsgZWxzZSBuID0gMDsKKyAgICBwcmludGYoIiBDb21wdXRlciBieXRlb3Jk ZXI6ICAgICAgJXMtZW5kaWFuXG4iLAorICAgICAgICAgICBieXRlb3JkZXIgPyAibGl0dGxlIiA6 ICJiaWciKTsKKyAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0 dXJuOyBlbHNlIG4gPSAwOworI2VuZGlmIC8qIFVOSUNPREUgKi8KKyNlbmRpZiAvKiBOT0NTRVRT ICovCisKKyAgICBwcmludGYoIiBGaWxlIGVuZC1vZi1saW5lOiAgICAgICAgIik7CisgICAgaSA9 IGZlb2w7CisgICAgc3dpdGNoIChmZW9sKSB7CisgICAgICBjYXNlIFhZRkFfQzogcHJpbnRmKCIl c1xuIiwiY3IiKTsgYnJlYWs7CisgICAgICBjYXNlIFhZRkFfTDogcHJpbnRmKCIlc1xuIiwibGYi KTsgYnJlYWs7CisgICAgICBjYXNlIFhZRkFfMjogcHJpbnRmKCIlc1xuIiwiY3JsZiIpOyBicmVh azsKKyAgICAgIGRlZmF1bHQ6IHByaW50ZigiJWRcbiIsaSk7CisgICAgfQorICAgIGlmICgrK24g PiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm47IGVsc2UgbiA9IDA7CisjZW5k aWYgLyogTk9YRkVSICovCisKKyNpZmRlZiBDS19DVFJMWgorICAgIHByaW50ZigiIEZpbGUgZW9m OiAgICAgICAgICAgICAgICAlc1xuIiwgZW9mbWV0aG9kID8gImN0cmwteiIgOiAibGVuZ3RoIik7 CisgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybjsgZWxz ZSBuID0gMDsKKyNlbmRpZiAvKiBDS19DVFJMWiAqLworI2lmbmRlZiBOT1hGRVIKKyNpZmRlZiBD S19UTVBESVIKKyAgICBwcmludGYoIiBGaWxlIGRvd25sb2FkLWRpcmVjdG9yeTogJXNcbiIsIGRs ZGlyID8gZGxkaXIgOiAiKG5vbmUpIik7CisgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYg KCFhc2ttb3JlKCkpIHJldHVybjsgZWxzZSBuID0gMDsKKyNpZmRlZiBDT01NRU5UCisgICAgaSA9 IDI1NjsKKyAgICBzID0gbGluZTsKKyAgICB6enN0cmluZygiXFx2KHRtcGRpcikiLCZzLCZpKTsK KyAgICBwcmludGYoIiBUZW1wb3JhcnkgZGlyZWN0b3J5OiAgICAgJXNcbiIsIGxpbmUpOworICAg IGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm47IGVsc2UgbiA9 IDA7CisjZW5kaWYgLyogQ09NTUVOVCAqLworI2VuZGlmIC8qIENLX1RNUERJUiAqLworI2lmZGVm IFZNUworICAgIHsKKyAgICAgICAgZXh0ZXJuIGludCB2bXNzdmVyc2lvbnMsIHZtc3J2ZXJzaW9u czsKKyAgICAgICAgcHJpbnRmKCIgU2VuZCB2ZXJzaW9uLW51bWJlcnM6ICAgICVzXG4iLHNob3dv ZmYodm1zc3ZlcnNpb25zKSk7CisgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICgh YXNrbW9yZSgpKSByZXR1cm47IGVsc2UgbiA9IDA7CisgICAgICAgIHByaW50ZigiIFJlY2VpdmUg dmVyc2lvbi1udW1iZXJzOiAlc1xuIixzaG93b2ZmKHZtc3J2ZXJzaW9ucykpOworICAgICAgICBp ZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuOyBlbHNlIG4gPSAw OworICAgIH0KKyNlbmRpZiAvKiBWTVMgKi8KKyAgICBwcmludGYoIiBTZW5kIG1vdmUtdG86ICAg ICAgICAgICAgJXNcbiIsCisgICAgICAgICAgIHNuZF9tb3ZlID8gc25kX21vdmUgOiAiKG5vbmUp Iik7CisgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybjsg ZWxzZSBuID0gMDsKKyAgICBwcmludGYoIiBTZW5kIHJlbmFtZS10bzogICAgICAgICAgJXNcbiIs CisgICAgICAgICAgIHNuZF9yZW5hbWUgPyBzbmRfcmVuYW1lIDogIihub25lKSIpOworICAgIGlm ICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm47IGVsc2UgbiA9IDA7 CisgICAgcHJpbnRmKCIgUmVjZWl2ZSBtb3ZlLXRvOiAgICAgICAgICVzXG4iLAorICAgICAgICAg ICByY3ZfbW92ZSA/IHJjdl9tb3ZlIDogIihub25lKSIpOworICAgIGlmICgrK24gPiBjbWRfcm93 cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm47IGVsc2UgbiA9IDA7CisgICAgcHJpbnRmKCIg UmVjZWl2ZSByZW5hbWUtdG86ICAgICAgICVzXG4iLAorICAgICAgICAgICByY3ZfcmVuYW1lID8g cmN2X3JlbmFtZSA6ICIobm9uZSkiKTsKKyAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAo IWFza21vcmUoKSkgcmV0dXJuOyBlbHNlIG4gPSAwOworI2VuZGlmIC8qIE5PWEZFUiAqLworI2lm ZGVmIEtFUk1SQworICAgIHByaW50ZigiIEluaXRpYWxpemF0aW9uIGZpbGU6ICAgICAlc1xuIiwg bm9pbml0ID8gIihub25lKSIgOgorI2lmZGVmIENLX1NZU0lOSQorICAgICAgICAgICBDS19TWVNJ TkkKKyNlbHNlCisgICAgICAgICAgIGtlcm1yYworI2VuZGlmIC8qIENLX1NZU0lOSSAqLworICAg ICAgICAgICApOworI2VuZGlmIC8qIEtFUk1SQyAqLworICAgIGlmICgrK24gPiBjbWRfcm93cyAt IDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm47IGVsc2UgbiA9IDA7CisKKyAgICBpZiAoa19pbmZv X2RpcikgeworICAgICAgICBwcmludGYoIiBLZXJtaXQgZG9jIGZpbGVzOiAgICAgICAgJXNcbiIs IGtfaW5mb19kaXIpOworICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21v cmUoKSkgcmV0dXJuOyBlbHNlIG4gPSAwOworICAgIH0KKworI2lmZGVmIENLUk9PVAorICAgIHMg PSB6Z2V0cm9vdCgpOworICAgIHByaW50ZigiIFJvb3Qgc2V0OiAgICAgICAgICAgICAgICAlc1xu IiwgcyA/IHMgOiAiKG5vbmUpIik7CisjZW5kaWYgLyogQ0tST09UICovCisKKyNpZmRlZiBVTklY CisgICAgcHJpbnRmKCIgRGlzayBvdXRwdXQgYnVmZmVyOiAgICAgICVkICh3cml0ZXMgYXJlICVz LCAlcylcbiIsCisgICAgICAgICAgIHpvYnVmc2l6ZSwKKyAgICAgICAgICAgem9mYnVmZmVyID8g ImJ1ZmZlcmVkIiA6ICJ1bmJ1ZmZlcmVkIiwKKyAgICAgICAgICAgem9mYmxvY2sgPyAiYmxvY2tp bmciIDogIm5vbmJsb2NraW5nIgorICAgICAgICAgICApOworICAgIGlmICgrK24gPiBjbWRfcm93 cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm47IGVsc2UgbiA9IDA7CisjaWZkZWYgRFlOQU1J QworICAgIHByaW50ZigiIFN0cmluZ3NwYWNlOiAgICAgICAgICAgICAlZFxuIiwgenNldGZpbCgw LDIpKTsKKyAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJu OyBlbHNlIG4gPSAwOworICAgIHByaW50ZigiIExpc3RzaXplOiAgICAgICAgICAgICAgICAlZFxu IiwgenNldGZpbCgwLDQpKTsKKyAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21v cmUoKSkgcmV0dXJuOyBlbHNlIG4gPSAwOworI2VuZGlmIC8qIERZTkFNSUMgKi8KKyNlbmRpZiAv KiBVTklYICovCisjaWZkZWYgT1MyT1JVTklYCisgICAgcHJpbnRmKCIgTG9uZ2VzdCBmaWxlbmFt ZTogICAgICAgICVkXG4iLCBtYXhuYW0pOworICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlm ICghYXNrbW9yZSgpKSByZXR1cm47IGVsc2UgbiA9IDA7CisgICAgcHJpbnRmKCIgTG9uZ2VzdCBw YXRobmFtZTogICAgICAgICVkXG4iLCBtYXhwYXRoKTsKKyAgICBpZiAoKytuID4gY21kX3Jvd3Mg LSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuOyBlbHNlIG4gPSAwOworI2VuZGlmIC8qIE9TMk9S VU5JWCAqLworCisgICAgcHJpbnRmKCIgTGFzdCBmaWxlIHNlbnQ6ICAgICAgICAgICVzXG4iLCBz ZnNwZWMgPyBzZnNwZWMgOiAiKG5vbmUpIik7CisgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykg aWYgKCFhc2ttb3JlKCkpIHJldHVybjsgZWxzZSBuID0gMDsKKyAgICBwcmludGYoIiBMYXN0IGZp bGUgcmVjZWl2ZWQ6ICAgICAgJXNcbiIsIHJmc3BlYyA/IHJmc3BlYyA6ICIobm9uZSkiKTsKKyAg ICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuOyBlbHNlIG4g PSAwOworICAgIHByaW50ZigiXG4gQWxzbyBzZWU6XG4iKTsKKyAgICBuKys7CisgICAgaWYgKCsr biA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybjsgZWxzZSBuID0gMDsKKyAg ICBwcmludGYoIiBTSE9XIFBST1RPQ09MLCBTSE9XIFhGRVIiKTsKKyNpZmRlZiBDS19MQUJFTEVE CisgICAgcHJpbnRmKCIsIFNIT1cgTEFCRUxFRCIpOworI2VuZGlmIC8qIENLX0xBQkVMRUQgKi8K KyNpZmRlZiBQQVRURVJOUworICAgIHByaW50ZigiLCBTSE9XIFBBVFRFUk5TIik7CisjZW5kaWYg LyogUEFUVEVSTlMgKi8KKyNpZmRlZiBTVFJFQU1JTkcKKyAgICBwcmludGYoIiwgU0hPVyBTVFJF QU1JTkciKTsKKyNlbmRpZiAvKiBTVFJFQU1JTkcgKi8KKyNpZm5kZWYgTk9DU0VUUworICAgIHBy aW50ZigiLCBTSE9XIENIQVJBQ1RFUi1TRVRTIik7CisjZW5kaWYgLyogTk9DU0VUUyAqLworICAg IHByaW50ZigiXG5cbiIpOworfQorCisjaWZuZGVmIE5PWEZFUgorVk9JRAorc2hvcGFycCgpIHsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFByb3RvY29sICovCisgICAgZXh0ZXJuIGlu dCBkb2NyYywgc2tpcGJ1cDsKKyAgICBjaGFyICpzOworCisjaWZkZWYgQ0tfVElNRVJTCisgICAg ZXh0ZXJuIGludCBydHRmbGc7CisjZW5kaWYgLyogQ0tfVElNRVJTICovCisKKyAgICBwcmludGYo IlByb3RvY29sOiAlc1xuIixwdGFiW3Byb3RvY29sXS5wX25hbWUpOworCisgICAgaWYgKHByb3Rv Y29sID09IFBST1RPX0spIHsKKyAgICAgICAgcHJpbnRmKCJcblByb3RvY29sIFBhcmFtZXRlcnM6 ICAgU2VuZCAgICBSZWNlaXZlIik7CisgICAgICAgIGlmICh0aW1lZikKKyAgICAgICAgICBwcmlu dGYoIlxuIFRpbWVvdXQgKHVzZWQ9JTJkKTolN2QqJThkICIsIHRpbWludCwgcnRpbW8sIHBrdHRp bSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBwcmludGYoIlxuIFRpbWVvdXQgKHVzZWQ9JTJk KTolN2QlOWQgIiwgIHRpbWludCwgcnRpbW8sIHBrdHRpbSk7CisjaWZkZWYgWEZSQ0FOCisgICAg ICAgIHByaW50ZigiICAgICAgIENhbmNlbGxhdGlvbjogICAgJXMiLHNob3dvZmYoeGZyY2FuKSk7 CisgICAgICAgIGlmICh4ZnJjYW4pCisgICAgICAgICAgcHJpbnRmKCIgJWQgJWQiLCB4ZnJjaHIs IHhmcm51bSk7CisjZW5kaWYgLyogWEZSQ0FOICovCisgICAgICAgIHByaW50ZigiXG4gUGFkZGlu ZzogICAgICAlMTFkJTlkIiwgbnBhZCwgICBteXBhZG4pOworICAgICAgICBpZiAoYmN0ciA9PSA0 KQorICAgICAgICAgIHByaW50ZigiICAgICAgICBCbG9jayBDaGVjazogYmxhbmstZnJlZS0yXG4i KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIHByaW50ZigiICAgICAgICBCbG9jayBDaGVjazog JTZkXG4iLGJjdHIpOworICAgICAgICBwcmludGYoICAiIFBhZCBDaGFyYWN0ZXI6JTExZCU5ZCIs IHBhZGNoLCAgbXlwYWRjKTsKKyAgICAgICAgcHJpbnRmKCIgICAgICAgIERlbGF5OiAgICAgICAl NmRcbiIsY2tkZWxheSk7CisgICAgICAgIHByaW50ZiggICIgUGF1c2U6ICAgICAgICAlMTFkJTlk IiwgcGt0cGF1cywgcGt0cGF1cyk7CisgICAgICAgIHByaW50ZigiICAgICAgICBBdHRyaWJ1dGVz OiAgICAgICVzXG4iLHNob3dvZmYoYXRjYXByKSk7CisgICAgICAgIHByaW50ZiggICIgUGFja2V0 IFN0YXJ0OiAlMTFkJTlkIiwgbXlzdGNoLCBzdGNocik7CisgICAgICAgIHByaW50ZigiICAgICAg ICBNYXggUmV0cmllczogJTZkJXNcbiIsCisgICAgICAgICAgICAgICBtYXh0cnksCisgICAgICAg ICAgICAgICAobWF4dHJ5ID09IDApID8gIiAodW5saW1pdGVkKSIgOiAiIgorICAgICAgICAgICAg ICAgKTsKKyAgICAgICAgcHJpbnRmKCAgIiBQYWNrZXQgRW5kOiAgICUxMWQlOWQiLCBzZW9sLCAg IGVvbCk7CisgICAgICAgIGlmIChlYnFmbGcpCisgICAgICAgICAgcHJpbnRmKCIgICAgICAgIDh0 aC1CaXQgUHJlZml4OiAnJWMnIixlYnEpOworICAgICAgICBlbHNlCisgICAgICAgICAgcHJpbnRm KCIgICAgICAgIDh0aC1CaXQgUHJlZml4OiAoJyVjJyBidXQgbm90IHVzZWQpIixlYnEpOworICAg ICAgICBwcmludGYoICAiXG4gUGFja2V0IExlbmd0aDolMTFkICIsIHNwbWF4KTsKKyAgICAgICAg cHJpbnRmKCIlOGQgICAgICIsICB1cnBzaXopOworICAgICAgICBpZiAocnB0ZmxnKQorICAgICAg ICAgIHByaW50ZigiICAgUmVwZWF0IFByZWZpeDogICclYyciLHJwdHEpOworICAgICAgICBlbHNl CisgICAgICAgICAgcHJpbnRmKCIgICBSZXBlYXQgUHJlZml4OiAgKCclYycgYnV0IG5vdCB1c2Vk KSIscnB0cSk7CisgICAgICAgIHByaW50ZiggICJcbiBNYXhpbXVtIExlbmd0aDogJTlkJTlkIiwg bWF4c3BzLCBtYXhycHMpOworICAgICAgICBwcmludGYoIiAgICAgICAgV2luZG93IFNpemU6JTdk IHNldCwgJWQgdXNlZFxuIix3c2xvdHIsd21heCk7CisgICAgICAgIHByaW50ZiggICAgIiBCdWZm ZXIgU2l6ZTogICUxMWQlOWQiLCBiaWdzYnNpeiwgYmlncmJzaXopOworICAgICAgICBwcmludGYo IiAgICAgICAgTG9ja2luZy1TaGlmdDogICAgIik7CisgICAgICAgIGlmIChsc2NhcHUgPT0gMikg eworICAgICAgICAgICAgcHJpbnRmKCJmb3JjZWQiKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg ICAgICAgIHByaW50ZigiJXMiLCAobHNjYXByID8gImVuYWJsZWQiIDogImRpc2FibGVkIikpOwor ICAgICAgICAgICAgaWYgKGxzY2FwcikgcHJpbnRmKCIsJXMlcyIsIChsc2NhcHUgPyAiICIgOiAi IG5vdCAiKSwgInVzZWQiKTsKKyAgICAgICAgfQorICAgICAgICBwcmludGYoIlxuXG4iKTsKKwor ICAgICAgICBpZiAoIShzID0gcHRhYltwcm90b2NvbF0uaF9iX2luaXQpKSBzID0gIiI7CisgICAg ICAgIHByaW50ZigiIEF1dG8tdXBsb2FkIGNvbW1hbmQgKGJpbmFyeSk6ICIpOworICAgICAgICBp ZiAoKnMpIHsKKyAgICAgICAgICAgIHNob3N0cmRlZigoQ0hBUiAqKXMpOworICAgICAgICAgICAg cHJpbnRmKCJcbiIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcHJpbnRmKCIobm9u ZSlcbiIpOworICAgICAgICB9CisgICAgICAgIGlmICghKHMgPSBwdGFiW3Byb3RvY29sXS5oX3Rf aW5pdCkpIHMgPSAiIjsKKyAgICAgICAgcHJpbnRmKCIgQXV0by11cGxvYWQgY29tbWFuZCAodGV4 dCk6ICAgIik7CisgICAgICAgIGlmICgqcykgeworICAgICAgICAgICAgc2hvc3RyZGVmKChDSEFS ICopcyk7CisgICAgICAgICAgICBwcmludGYoIlxuIik7CisgICAgICAgIH0gZWxzZSB7CisgICAg ICAgICAgICBwcmludGYoIihub25lKVxuIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCEocyA9 IHB0YWJbcHJvdG9jb2xdLmhfeF9pbml0KSkgcyA9ICIiOworICAgICAgICBwcmludGYoIiBBdXRv LXNlcnZlciBjb21tYW5kOiAgICAgICAgICAiKTsKKyAgICAgICAgaWYgKCpzKSB7CisgICAgICAg ICAgICBzaG9zdHJkZWYoKENIQVIgKilzKTsKKyAgICAgICAgICAgIHByaW50ZigiXG4iKTsKKyAg ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHByaW50ZigiKG5vbmUpXG4iKTsKKyAgICAgICAg fQorICAgICAgICB0bXBidWZbMF0gPSBOVUw7CisjaWZkZWYgQ0tfVElNRVJTCisgICAgICAgIGlm IChydHRmbGcpIHsKKyAgICAgICAgICAgIGV4dGVybiBpbnQgbWludGltZSwgbWF4dGltZTsKKyAg ICAgICAgICAgIHNwcmludGYodG1wYnVmLCIgUGFja2V0IHRpbWVvdXRzOiBkeW5hbWljICVkOiVk IiwgLyogU0FGRSAqLworICAgICAgICAgICAgICAgICAgICBtaW50aW1lLAorICAgICAgICAgICAg ICAgICAgICBtYXh0aW1lKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNwcmludGYo dG1wYnVmLCIgUGFja2V0IHRpbWVvdXRzOiBmaXhlZCIpOyAvKiBTQUZFICovCisgICAgICAgIH0K KyNlbmRpZiAvKiBDS19USU1FUlMgKi8KKyAgICAgICAgaWYgKHRtcGJ1ZlswXSkKKyAgICAgICAg ICBwcmludGYoIiUtMzFzIix0bXBidWYpOworICAgICAgICBwcmludGYoIlNlbmQgYmFja3VwOiAl c1xuIixzaG93b2ZmKCFza2lwYnVwKSk7CisKKyAgICAgICAgcHJpbnRmKCIgVHJhbnNmZXIgbW9k ZTogICAlcyIsIHhmZXJtb2RlID09IFhNT0RFX0EgPworICAgICAgICAgICAgICAgImF1dG9tYXRp YyAgICIgOgorICAgICAgICAgICAgICAgIm1hbnVhbCAgICAgICIKKyAgICAgICAgICAgICAgICk7 CisgICAgICAgIHByaW50ZigiIFRyYW5zZmVyIHNsb3ctc3RhcnQ6ICVzLCBjcmM6ICVzXG4iLAor ICAgICAgICAgICAgICAgc2hvd29mZihzbG9zdGFydCksCisgICAgICAgICAgICAgICBzaG93b2Zm KGRvY3JjKQorICAgICAgICAgICAgICAgKTsKKyNpZmRlZiBQSVBFU0VORAorICAgICAgICB7Cisg ICAgICAgICAgICBleHRlcm4gaW50IHVzZXBpcGVzOworICAgICAgICAgICAgcHJpbnRmKCIgVHJh bnNmZXIgcGlwZXM6ICAlcyAgICAgICAgICIsdXNlcGlwZXMgPyAib24gIiA6ICJvZmYiKTsKKyAg ICAgICAgfQorI2VuZGlmIC8qIFBJUEVTRU5EICovCisjaWZuZGVmIE5PQ1NFVFMKKyAgICAgICAg cHJpbnRmKCIgVHJhbnNmZXIgY2hhcmFjdGVyLXNldDogIik7CisgICAgICAgIGlmICh0Y2hhcnNl dCA9PSBUQ19UUkFOU1ApCisgICAgICAgICAgcHJpbnRmKCJ0cmFuc3BhcmVudFxuIik7CisgICAg ICAgIGVsc2UKKyAgICAgICAgICBwcmludGYoIiVzXG4iLCB0Y3NpbmZvW3RjaGFyc2V0XS5rZXl3 b3JkICk7CisjZW5kaWYgLyogTk9DU0VUUyAqLworI2lmZGVmIFBJUEVTRU5ECisgICAgICAgIHsK KyAgICAgICAgICAgIGV4dGVybiBjaGFyICogc25kZmlsdGVyLCAqIHJjdmZpbHRlcjsKKyAgICAg ICAgICAgIHByaW50ZigiIFNlbmQgZmlsdGVyOiAgICAgJXNcbiIsIHNuZGZpbHRlciA/IHNuZGZp bHRlciA6ICIobm9uZSkiKTsKKyAgICAgICAgICAgIHByaW50ZigiIFJlY2VpdmUgZmlsdGVyOiAg JXNcbiIsIHJjdmZpbHRlciA/IHJjdmZpbHRlciA6ICIobm9uZSkiKTsKKyAgICAgICAgfQorI2Vu ZGlmIC8qIFBJUEVTRU5EICovCisgICAgICAgIHByaW50ZigiXG5BbHNvIHNlZTpcbiIpOworICAg ICAgICBwcmludGYoIiBTSE9XIEZJTEUsIFNIT1cgWEZFUiIpOworCisjaWZkZWYgQ0tfTEFCRUxF RAorICAgICAgICBwcmludGYoIiwgU0hPVyBMQUJFTEVEIik7CisjZW5kaWYgLyogQ0tfTEFCRUxF RCAqLworI2lmZGVmIFBBVFRFUk5TCisgICAgICAgIHByaW50ZigiLCBTSE9XIFBBVFRFUk5TIik7 CisjZW5kaWYgLyogUEFUVEVSTlMgKi8KKyNpZmRlZiBTVFJFQU1JTkcKKyAgICAgICAgcHJpbnRm KCIsIFNIT1cgU1RSRUFNSU5HIik7CisjZW5kaWYgLyogU1RSRUFNSU5HICovCisjaWZuZGVmIE5P Q1NFVFMKKyAgICAgICAgcHJpbnRmKCIsIFNIT1cgQ0hBUkFDVEVSLVNFVFMiKTsKKyNlbmRpZiAv KiBOT0NTRVRTICovCisgICAgfQorCisjaWZkZWYgQ0tfWFlaCisjaWZkZWYgWFlaX0lOVEVSTkFM CisgICAgaWYgKHByb3RvY29sICE9IFBST1RPX0spIHsKKyAgICAgICAgaW50IGk7CisgICAgICAg IGludCB4OworICAgICAgICBwcmludGYoIiBGaWxlIHR5cGU6ICVzXG4iLCBiaW5hcnkgPyAiYmlu YXJ5IiA6ICJ0ZXh0Iik7CisgICAgICAgIGlmIChwcm90b2NvbCA9PSBQUk9UT19aKSB7ICAgICAg ICAgICAgICAvKiBabW9kZW0gKi8KKyAgICAgICAgICAgIHByaW50ZigiIFdpbmRvdyBzaXplOiAg ICIpOworICAgICAgICAgICAgaWYgKHB0YWJbcHJvdG9jb2xdLndpbnNpemUgPCAxKQorICAgICAg ICAgICAgICBwcmludGYoIm5vbmVcbiIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg ICBwcmludGYoIiVkXG4iLHdzbG90cik7CisjaWZkZWYgQ09NTUVOVAorICAgICAgICAgICAgcHJp bnRmKCIgUGFja2V0IChmcmFtZSkgbGVuZ3RoOiAiKTsKKyAgICAgICAgICAgIGlmIChwdGFiW3By b3RvY29sXS5zcGt0bGVuIDwgMCkKKyAgICAgICAgICAgICAgcHJpbnRmKCJub25lXG4iKTsKKyAg ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgcHJpbnRmKCIlZFxuIixzcG1heCk7CisjZW5k aWYgLyogQ09NTUVOVCAqLworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKHB0YWJb cHJvdG9jb2xdLnNwa3RsZW4gPj0gMTAwMCkKKyAgICAgICAgICAgICAgcHJpbnRmKCIgMUsgcGFj a2V0c1xuIik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIHByaW50ZigiIDEyOC1i eXRlIHBhY2tldHNcbiIpOworICAgICAgICB9CisgICAgICAgIHByaW50ZigiIFBhdGhuYW1lIHN0 cmlwcGluZyB3aGVuIHNlbmRpbmc6ICAgJXNcbiIsCisgICAgICAgICAgICAgICBzaG93b2ZmKHB0 YWJbcHJvdG9jb2xdLmZuc3ApCisgICAgICAgICAgICAgICApOworICAgICAgICBwcmludGYoIiBQ YXRobmFtZSBzdHJpcHBpbmcgd2hlbiByZWNlaXZpbmc6ICVzXG4iLAorICAgICAgICAgICAgICAg c2hvd29mZihwdGFiW3Byb3RvY29sXS5mbnJwKQorICAgICAgICAgICAgICAgKTsKKyAgICAgICAg cHJpbnRmKCIgRmlsZW5hbWUgY29sbGlzaW9uIGFjdGlvbjogICAgICAgICAiKTsKKyAgICAgICAg Zm9yIChpID0gMDsgaSA8IG5jb2x4OyBpKyspCisgICAgICAgICAgaWYgKGNvbHh0YWJbaV0ua3d2 YWwgPT0gZm5jYWN0KSBicmVhazsKKyAgICAgICAgcHJpbnRmKCIlLTEycyIsIChpID09IG5jb2x4 KSA/ICJ1bmtub3duIiA6IGNvbHh0YWJbaV0ua3dkKTsKKworICAgICAgICBwcmludGYoIlxuIEVz Y2FwZSBjb250cm9sIGNoYXJhY3RlcnM6ICAgICAgICAgICIpOworICAgICAgICB4ID0gcHRhYltw cm90b2NvbF0ucHJlZml4OworICAgICAgICBpZiAoeCA9PSBQWF9BTEwpCisgICAgICAgICAgcHJp bnRmKCJhbGxcbiIpOworICAgICAgICBlbHNlIGlmICh4ID09IFBYX0NBVSB8fCB4PT1QWF9XSUwp CisgICAgICAgICAgcHJpbnRmKCJtaW5pbWFsXG4iKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg IHByaW50Zigibm9uZVxuIik7CisgICAgICAgIGlmICghKHMgPSBwdGFiW3Byb3RvY29sXS5oX2Jf aW5pdCkpCisgICAgICAgICAgcyA9ICIiOworICAgICAgICBwcmludGYoIiBBdXRvcmVjZWl2ZSBj b21tYW5kIChiaW5hcnkpOiAlc1xuIiwgKnMgPyBzIDogIihub25lKSIpOworICAgICAgICBpZiAo IShzID0gcHRhYltwcm90b2NvbF0uaF90X2luaXQpKQorICAgICAgICAgIHMgPSAiIjsKKyAgICAg ICAgcHJpbnRmKCIgQXV0b3JlY2VpdmUgY29tbWFuZCAodGV4dCk6ICAgJXNcbiIsICpzID8gcyA6 ICIobm9uZSkiKTsKKyAgICB9CisjZWxzZQorI2lmbmRlZiBOT1BVU0gKKyAgICBpZiAocHJvdG9j b2wgIT0gUFJPVE9fSykgeworCV9QUk9UT1RZUCggVk9JRCBzaG9leHRlcm4sICh2b2lkKSApOwor ICAgICAgICBwcmludGYoIlxuRXhlY3V0ZWQgYnkgZXh0ZXJuYWwgY29tbWFuZHM6XG5cbiIpOwor ICAgICAgICBzID0gcHRhYltwcm90b2NvbF0ucF9iX3NjbWQ7CisgICAgICAgIGlmICghcykgcyA9 ICIiOworICAgICAgICBwcmludGYoIiBTRU5EIGNvbW1hbmQgKGJpbmFyeSk6ICAgICAgICAlc1xu IiwgKnMgPyBzIDogIihub25lKSIpOworICAgICAgICBzID0gcHRhYltwcm90b2NvbF0ucF90X3Nj bWQ7CisgICAgICAgIGlmICghcykgcyA9ICIiOworICAgICAgICBwcmludGYoIiBTRU5EIGNvbW1h bmQgKHRleHQpOiAgICAgICAgICAlc1xuIiwgKnMgPyBzIDogIihub25lKSIpOworICAgICAgICBz ID0gcHRhYltwcm90b2NvbF0ucF9iX3JjbWQ7CisgICAgICAgIGlmICghcykgcyA9ICIiOworICAg ICAgICBwcmludGYoIiBSRUNFSVZFIGNvbW1hbmQgKGJpbmFyeSk6ICAgICAlc1xuIiwgKnMgPyBz IDogIihub25lKSIpOworICAgICAgICBzID0gcHRhYltwcm90b2NvbF0ucF90X3JjbWQ7CisgICAg ICAgIGlmICghcykgcyA9ICIiOworICAgICAgICBwcmludGYoIiBSRUNFSVZFIGNvbW1hbmQgKHRl eHQpOiAgICAgICAlc1xuIiwgKnMgPyBzIDogIihub25lKSIpOworICAgICAgICBzID0gcHRhYltw cm90b2NvbF0uaF9iX2luaXQ7CisgICAgICAgIGlmICghcykgcyA9ICIiOworICAgICAgICBwcmlu dGYoIiBBdXRvcmVjZWl2ZSBjb21tYW5kIChiaW5hcnkpOiAlc1xuIiwgKnMgPyBzIDogIihub25l KSIpOworICAgICAgICBzID0gcHRhYltwcm90b2NvbF0uaF90X2luaXQ7CisgICAgICAgIGlmICgh cykgcyA9ICIiOworICAgICAgICBwcmludGYoIiBBdXRvcmVjZWl2ZSBjb21tYW5kICh0ZXh0KTog ICAlc1xuIiwgKnMgPyBzIDogIihub25lKSIpOworCShWT0lEKSBzaG9leHRlcm4oKTsKKyAgICB9 CisjZW5kaWYgLyogTk9QVVNIICovCisjZW5kaWYgLyogWFlaX0lOVEVSTkFMICovCisjZW5kaWYg LyogQ0tfWFlaICovCit9CisjZW5kaWYgLyogTk9YRkVSICovCisKKyNpZm5kZWYgTk9DU0VUUwor LyogQ2hhcmFjdGVyLXNldCBpdGVtcyAqLworCitleHRlcm4gaW50IHNfY3NldCwgcl9jc2V0LCBh eGNzZXRbXSwgYWZjc2V0W107CitleHRlcm4gc3RydWN0IGtleXRhYiB4ZnJtdGFiW107CisKK1ZP SUQKK3Nob3BhcmwoKSB7CisjaWZkZWYgQ09NTUVOVAorICAgIGludCBpOworLyogTWlzbGVhZGlu Zy4uLiAqLworICAgIHByaW50ZigiXG5BdmFpbGFibGUgTGFuZ3VhZ2VzOlxuIik7CisgICAgZm9y IChpID0gMDsgaSA8IE1BWExBTkc7IGkrKykgeworICAgICAgICBwcmludGYoIiAlc1xuIixsYW5n c1tpXS5kZXNjcmlwdGlvbik7CisgICAgfQorI2Vsc2UKKyAgICBwcmludGYoIlxuTGFuZ3VhZ2Ut c3BlY2lmaWMgdHJhbnNsYXRpb24gcnVsZXM6ICVzXG4iLAorICAgICAgICAgICBsYW5ndWFnZSA9 PSBMX1VTQVNDSUkgPyAibm9uZSIgOiBsYW5nc1tsYW5ndWFnZV0uZGVzY3JpcHRpb24pOworICAg IHNob2NoYXJzZXQoKTsKKyAgICBwcmludGYoIlxuXG4iKTsKKyNlbmRpZiAvKiBDT01NRU5UICov Cit9CisKK1ZPSUQKK3Nob2NoYXJzZXQoKSB7CisgICAgaW50IHg7CisjaWZkZWYgQ09NTUVOVAor ICAgIGNoYXIgKiBzID0gIlVua25vd24iOworICAgIGV4dGVybiBpbnQgeGxhdHlwZTsKKyNlbmRp ZiAvKiBDT01NRU5UICovCisKKyNpZm5kZWYgTk9YRkVSCisgICAgZXh0ZXJuIGludCB4ZnJ4bGE7 CisjZW5kaWYgLyogTk9YRkVSICovCisKKyAgICBkZWJ1ZyhGMTAxLCJTSE9XIEZJTEUgQ0hBUiIs IiIsZmNoYXJzZXQpOworICAgIHByaW50ZigiXG4iKTsKKyNpZm5kZWYgTk9YRkVSCisgICAgcHJp bnRmKCIgVHJhbnNmZXIgVHJhbnNsYXRpb246ICVzXG4iLCBzaG93b2ZmKHhmcnhsYSkpOworICAg IGlmICgheGZyeGxhKSB7CisgICAgICAgIHByaW50ZigKKyAgICAgICIgQmVjYXVzZSB0cmFuc2Zl ciB0cmFuc2xhdGlvbiBpcyBvZmYsIHRoZSBmb2xsb3dpbmcgYXJlIGlnbm9yZWQ6XG5cbiIpOwor ICAgIH0KKyNlbmRpZiAvKiBOT1hGRVIgKi8KKyAgICBwcmludGYoIiBGaWxlIENoYXJhY3Rlci1T ZXQ6ICVzICglcyksICIsCisgICAgICAgICAgIGZjc2luZm9bZmNoYXJzZXRdLmtleXdvcmQsCisg ICAgICAgICAgIGZjc2luZm9bZmNoYXJzZXRdLm5hbWUKKyAgICAgICAgICAgKTsKKyAgICBpZiAo KHggPSBmY3NpbmZvW2ZjaGFyc2V0XS5zaXplKSA9PSAxMjgpCisgICAgICBwcmludGYoIjctYml0 Iik7CisgICAgZWxzZSBpZiAoeCA9PSAyNTYpCisgICAgICBwcmludGYoIjgtYml0Iik7CisgICAg ZWxzZQorICAgICAgcHJpbnRmKCJtdWx0aWJ5dGUiKTsKKyAgICBwcmludGYoIlxuIik7CisgICAg cHJpbnRmKCIgRmlsZSBTY2FuOiAlc1xuIixzaG93b2ZmKGZpbGVwZWVrKSk7CisgICAgcHJpbnRm KCIgICBEZWZhdWx0IDdiaXQtQ2hhcmFjdGVyLVNldDogJXNcbiIsZmNzaW5mb1tkY3NldDddLmtl eXdvcmQpOworICAgIHByaW50ZigiICAgRGVmYXVsdCA4Yml0LUNoYXJhY3Rlci1TZXQ6ICVzXG4i LGZjc2luZm9bZGNzZXQ4XS5rZXl3b3JkKTsKKyAgICBwcmludGYoIiBUcmFuc2ZlciBDaGFyYWN0 ZXItU2V0Iik7CisjaWZkZWYgQ09NTUVOVAorICAgIGlmICh0c2xldmVsID09IFRTX0wyKQorICAg ICAgcHJpbnRmKCI6IChpbnRlcm5hdGlvbmFsKSIpOworICAgIGVsc2UKKyNlbmRpZiAvKiBDT01N RU5UICovCisgICAgaWYgKHRjaGFyc2V0ID09IFRDX1RSQU5TUCkKKyAgICAgIHByaW50ZigiOiBU cmFuc3BhcmVudCIpOworICAgIGVsc2UKKyAgICAgIHByaW50ZigiOiAlcyAoJXMpIix0Y3NpbmZv W3RjaGFyc2V0XS5rZXl3b3JkLCB0Y3NpbmZvW3RjaGFyc2V0XS5uYW1lKTsKKyAgICBwcmludGYo IlxuIik7CisjaWZkZWYgQ09NTUVOVAorICAgIHN3aXRjaCAoeGxhdHlwZSkgeworICAgICAgY2Fz ZSBYTEFfTk9ORTogcyA9ICJOb25lIjsgYnJlYWs7CisgICAgICBjYXNlIFhMQV9CWVRFOiBzID0g IkJ5dGUiOyBicmVhazsKKyAgICAgIGNhc2UgWExBX0pBUEFOOiBzID0gIkphcGFuZXNlIjsgYnJl YWs7CisgICAgICBjYXNlIFhMQV9VTklDT0RFOiBzID0gIlVuaWNvZGUiOyBicmVhazsKKyAgICB9 CisgICAgcHJpbnRmKCJcbiBUcmFuc2xhdGlvbiB0eXBlOiAlc1xuIixzKTsKKyNlbmRpZiAvKiBD T01NRU5UICovCisgICAgcHJpbnRmKCIgU0VORCBjaGFyYWN0ZXItc2V0LXNlbGVjdGlvbjogJXNc biIseGZybXRhYltzX2NzZXRdLmt3ZCk7CisgICAgcHJpbnRmKCIgUkVDRUlWRSBjaGFyYWN0ZXIt c2V0LXNlbGVjdGlvbjogJXNcbiIseGZybXRhYltyX2NzZXRdLmt3ZCk7CisgICAgaWYgKHNfY3Nl dCA9PSBYTU9ERV9BIHx8IHJfY3NldCA9PSBYTU9ERV9BKQorICAgICAgcHJpbnRmKAorICAgICAg IiAoVXNlIFNIT1cgQVNTT0NJQVRJT05TIHRvIGxpc3QgYXV0b21hdGljIGNoYXJhY3Rlci1zZXQg c2VsZWN0aW9ucy4pXG4iCisgICAgICAgICAgICAgKTsKK30KKworVk9JRAorc2hvd2Fzc29jKCkg eworICAgIGludCBpLCBrLCBuID0gNDsKKyAgICBjaGFyICogczsKKyAgICBwcmludGYoIlxuRm9y IGluY29taW5nIGZpbGVzOlxuXG4iKTsKKyAgICBwcmludGYoIlRyYW5zZmVyIENoYXJhY3Rlci1T ZXQgICBGaWxlIENoYXJhY3Rlci1TZXRcbiIpOworICAgIGZvciAoaSA9IDE7IGkgPD0gTUFYVENT RVRTOyBpKyspIHsKKyAgICAgICAgayA9IGF4Y3NldFtpXTsKKyAgICAgICAgaWYgKGsgPCAwIHx8 IGsgPiBNQVhGQ1NFVFMpCisgICAgICAgICAgcyA9ICIobm9uZSkiOworICAgICAgICBlbHNlCisg ICAgICAgICAgcyA9IGZjc2luZm9ba10ua2V5d29yZDsKKyAgICAgICAgaWYgKCFzKSBzID0gIiI7 CisgICAgICAgIGlmICghKnMpIHMgPSAiKG5vbmUpIjsKKyAgICAgICAgcHJpbnRmKCIgJS0yNXMl c1xuIix0Y3NpbmZvW2ldLmtleXdvcmQscyk7CisgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAt IDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm47IGVsc2UgbiA9IDA7CisgICAgfQorICAgIHByaW50 ZigiXG5Gb3Igb3V0Ym91bmQgZmlsZXM6XG5cbiIpOworICAgIG4gKz0gMjsKKyAgICBpZiAoKytu ID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuOyBlbHNlIG4gPSAwOworICAg IHByaW50ZigiRmlsZSBDaGFyYWN0ZXItU2V0ICAgICAgIFRyYW5zZmVyIENoYXJhY3Rlci1TZXRc biIpOworICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm47 IGVsc2UgbiA9IDA7CisgICAgZm9yIChpID0gMDsgaSA8PSBNQVhGQ1NFVFM7IGkrKykgeworICAg ICAgICBrID0gYWZjc2V0W2ldOworICAgICAgICBpZiAoayA8IDAgfHwgayA+IE1BWFRDU0VUUykK KyAgICAgICAgICBzID0gIihub25lKSI7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBzID0gdGNz aW5mb1trXS5rZXl3b3JkOworICAgICAgICBpZiAoIXMpIHMgPSAiIjsKKyAgICAgICAgaWYgKCEq cykgcyA9ICIobm9uZSkiOworICAgICAgICBwcmludGYoIiAlLTI1cyVzXG4iLGZjc2luZm9baV0u a2V5d29yZCxzKTsKKyAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3Jl KCkpIHJldHVybjsgZWxzZSBuID0gMDsKKyAgICB9Cit9CisjZW5kaWYgLyogTk9DU0VUUyAqLwor CitWT0lECitzaG9wYXIoKSB7CisgICAgcHJpbnRmKCJTaG93IHdoYXQ/ICAoVHlwZSBcInNob3cg P1wiIGZvciBhIGxpc3Qgb2YgcG9zc2liaWxpdGllcy4pXG4iKTsKK30KKyNlbmRpZiAvKiBOT1NI T1cgKi8KKworI2lmbmRlZiBOT1hGRVIKKy8qICBEIE8gUyBUIEEgVCAgLS0gIERpc3BsYXkgZmls ZSB0cmFuc2ZlciBzdGF0aXN0aWNzLiAgKi8KKworaW50Citkb3N0YXQoYnJpZWYpIGludCBicmll ZjsgeworICAgIGV4dGVybiBsb25nIGZpbHJlaiwgcGVha2NwczsKKyAgICBleHRlcm4gaW50IGxh c3RzcG1heCwgc3RyZWFtZWQsIGNsZWFyZWQsIHN0cmVhbW9rOworICAgIGV4dGVybiBjaGFyIHdo b2FyZXVbXTsKKyAgICBpbnQgbiA9IDAsIGZ0cCA9IDA7CisgICAgZXh0ZXJuIGludCBkb2NyYywg aW50ZXJydXB0ZWQsIGZhdGFsaW87CisKKyAgICBmdHAgPSBsYXN0eGZlciAmIFdfRlRQOworCisj aWZkZWYgQ0tfVFRHV1NJWgorI2lmZGVmIE9TMgorICAgIGlmICh0dF9jb2xzW1ZURVJNXSA8IDAg fHwgdHRfcm93c1tWVEVSTV0gPCAwKQorICAgICAgdHRnd3NpeigpOworI2Vsc2UgLyogT1MyICov CisgICAgaWYgKHR0Z3dzaXooKSA+IDApIHsKKyAgICAgICAgaWYgKHR0X3Jvd3MgPiAwICYmIHR0 X2NvbHMgPiAwKSB7CisgICAgICAgICAgICBjbWRfcm93cyA9IHR0X3Jvd3M7CisgICAgICAgICAg ICBjbWRfY29scyA9IHR0X2NvbHM7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgLyogT1MyICov CisjZW5kaWYgLyogQ0tfVFRHV1NJWiAqLworCisgICAgZGVidWcoRjEwMSwiZG9zdGF0IHhmZXJz dGF0IiwiIix4ZmVyc3RhdCk7CisgICAgaWYgKHhmZXJzdGF0IDwgMCkgeworICAgICAgICBwcmlu dGYoIiBObyBmaWxlIHRyYW5zZmVycyB5ZXQuXG4iKTsKKyAgICAgICAgcmV0dXJuKDEpOworICAg IH0KKyAgICBuID0gMDsKKyAgICBpZiAoYnJpZWYpIHsgcHJpbnRmKCJcbiIpOyBuKys7IH07Cisg ICAgcHJpbnRmKCIgcHJvdG9jb2wgICAgICAgICAgICAgICA6ICVzXG4iLAorICAgICAgICAgICBm dHAgPyAiZnRwIiA6IHB0YWJbcHJvdG9jb2xdLnBfbmFtZSk7CisgICAgbisrOworICAgIHByaW50 ZigiIHN0YXR1cyAgICAgICAgICAgICAgICAgOiAiKTsKKyAgICBpZiAoeGZlcnN0YXQpIHByaW50 ZigiU1VDQ0VTU1xuIik7CisgICAgZWxzZSBpZiAoaW50ZXJydXB0ZWQpIHByaW50ZigiRkFJTFVS RSAoaW50ZXJydXB0ZWQpXG4iKTsKKyAgICBlbHNlIGlmIChmYXRhbGlvKSBwcmludGYoIkZBSUxV UkUgKGkvbyBlcnJvcilcbiIpOworICAgIGVsc2UgcHJpbnRmKCJGQUlMVVJFXG4iKTsKKyNpZm5k ZWYgWFlaX0lOVEVSTkFMCisgICAgaWYgKCFmdHAgJiYgcHJvdG9jb2wgIT0gUFJPVE9fSykgewor ICAgICAgICBwcmludGYoIlxuIGV4dGVybmFsIHByb3RvY29sIHN0YXRpc3RpY3Mgbm90IGF2YWls YWJsZVxuIik7CisgICAgICAgIHJldHVybigxKTsKKyAgICB9CisjZW5kaWYgLyogWFlaX0lOVEVS TkFMICovCisgICAgbisrOworICAgIGlmICghZnRwKSB7CisgICAgICAgIGlmICgheGZlcnN0YXQg PiAwKSB7CisgICAgICAgICAgICBpZiAoZG9jcmMpCisgICAgICAgICAgICAgIHByaW50ZigiIGNy Yy0xNiBvZiBmaWxlKHMpICAgICAgOiAlbGRcbiIsIGNyYzE2KTsKKyAgICAgICAgICAgIGVsc2UK KyAgICAgICAgICAgICAgcHJpbnRmKCIgY3JjLTE2IG9mIGZpbGUocykgICAgICA6IChkaXNhYmxl ZClcbiIpOworICAgICAgICAgICAgbisrOworICAgICAgICB9CisgICAgICAgIGlmICgheGZlcnN0 YXQgJiYgKmVwa3Rtc2cpIHsKKyAgICAgICAgICAgIHByaW50ZigiIHJlYXNvbiAgICAgICAgICAg ICAgICAgOiAlc1xuIiwgZXBrdG1zZyk7CisgICAgICAgICAgICBuKys7CisgICAgICAgIH0KKyAg ICB9CisgICAgaWYgKCFicmllZikgeworI2lmZGVmIE5FV0ZUUAorICAgICAgICBpZiAoZnRwKSB7 CisgICAgICAgICAgICBleHRlcm4gY2hhciBmdHBfc3J2dHlwW107CisgICAgICAgICAgICBwcmlu dGYoIiByZW1vdGUgc3lzdGVtIHR5cGUgICAgIDogJXNcbiIsZnRwX3NydnR5cCk7CisgICAgICAg IH0gZWxzZQorI2VuZGlmIC8qIE5FV0ZUUCAqLworICAgICAgICAgIGlmICh3aG9hcmV1WzBdKSB7 CisgICAgICAgICAgICBwcmludGYoIiByZW1vdGUgc3lzdGVtIHR5cGUgICAgIDogJXNcbiIsCisg ICAgICAgICAgICAgICAgICAgZ2V0c3lzaWQoKGNoYXIgKil3aG9hcmV1KSk7CisgICAgICAgICAg ICBuKys7CisgICAgICAgIH0KKyAgICAgICAgcHJpbnRmKCIgZmlsZXMgdHJhbnNmZXJyZWQgICAg ICA6ICVsZFxuIixmaWxjbnQgLSBmaWxyZWopOworICAgICAgICBpZiAoIWZ0cCkKKyAgICAgICAg ICBwcmludGYoIiBmaWxlcyBub3QgdHJhbnNmZXJyZWQgIDogJWxkXG4iLGZpbHJlaik7CisgICAg ICAgIHByaW50ZigiIGNoYXJhY3RlcnMgbGFzdCBmaWxlICAgOiAlc1xuIixja2ZzdG9hKGZmYykp OworICAgICAgICBwcmludGYoIiB0b3RhbCBmaWxlIGNoYXJhY3RlcnMgIDogJXNcbiIsY2tmc3Rv YSh0ZmMpKTsKKyAgICAgICAgbiArPSBmdHAgPyAzIDogNDsKKyAgICAgICAgaWYgKCFmdHApIHsK KyAgICAgICAgICAgIHByaW50ZigiIGNvbW11bmljYXRpb24gbGluZSBpbiAgOiAlc1xuIixja2Zz dG9hKHRsY2kpKTsKKyAgICAgICAgICAgIHByaW50ZigiIGNvbW11bmljYXRpb24gbGluZSBvdXQg OiAlc1xuIixja2ZzdG9hKHRsY28pKTsKKyAgICAgICAgICAgIHByaW50ZigiIHBhY2tldHMgc2Vu dCAgICAgICAgICAgOiAlZFxuIiwgc3BhY2tldHMpOworICAgICAgICAgICAgcHJpbnRmKCIgcGFj a2V0cyByZWNlaXZlZCAgICAgICA6ICVkXG4iLCBycGFja2V0cyk7CisgICAgICAgICAgICBuICs9 IDQ7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGZ0cCkgZ290byBkb3RpbWVzOworCisgICAg cHJpbnRmKCIgZGFtYWdlZCBwYWNrZXRzIHJlYydkICA6ICVkXG4iLCBjcnVuY2hlZCk7CisgICAg cHJpbnRmKCIgdGltZW91dHMgICAgICAgICAgICAgICA6ICVkXG4iLCB0aW1lb3V0cyk7CisgICAg cHJpbnRmKCIgcmV0cmFuc21pc3Npb25zICAgICAgICA6ICVkXG4iLCByZXRyYW5zKTsKKyAgICBu ICs9IDM7CisKKyAgICBpZiAoIWJyaWVmKSB7CisgICAgICAgIGlmIChmaWxjbnQgPiAwKSB7Cisg ICAgICAgICAgICBwcmludGYoIiBwYXJpdHkgICAgICAgICAgICAgICAgIDogJXMiLHBhcm5hbSgo Y2hhcilwYXJpdHkpKTsKKyAgICAgICAgICAgIG4rKzsKKyAgICAgICAgICAgIGlmIChhdXRvcGFy KSB7IHByaW50ZigiIChkZXRlY3RlZCBhdXRvbWF0aWNhbGx5KSIpOyBuKys7IH0KKyAgICAgICAg ICAgIHByaW50ZigKKyAgICAgICAgICAgICAgICAgIlxuIGNvbnRyb2wgY2hhcmFjdGVycyAgICAg OiAlbGQgcHJlZml4ZWQsICVsZCB1bnByZWZpeGVkXG4iLAorICAgICAgICAgICAgICAgICAgIGNj cCwgY2N1KTsKKyAgICAgICAgICAgIG4rKzsKKyAgICAgICAgICAgIHByaW50ZigiIDh0aCBiaXQg cHJlZml4aW5nICAgICAgOiAiKTsKKyAgICAgICAgICAgIG4rKzsKKyAgICAgICAgICAgIGlmIChl YnFmbGcpIHByaW50ZigieWVzIFslY11cbiIsZWJxKTsgZWxzZSBwcmludGYoIm5vXG4iKTsKKyAg ICAgICAgICAgIG4rKzsKKyAgICAgICAgICAgIHByaW50ZigiIGxvY2tpbmcgc2hpZnRzICAgICAg ICAgOiAlc1xuIiwgbHNjYXB1ID8gInllcyIgOiAibm8iKTsKKyAgICAgICAgICAgIG4rKzsKKyAg ICAgICAgfQorICAgIH0KKyAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9y ZSgpKSByZXR1cm4oMSk7IGVsc2UgbiA9IDA7IH0KKyAgICBpZiAoc3RyZWFtZWQgPiAwKQorICAg ICAgcHJpbnRmKCIgd2luZG93IHNsb3RzIHVzZWQgICAgICA6IChzdHJlYW1pbmcpXG4iKTsKKyAg ICBlbHNlCisgICAgICBwcmludGYoIiB3aW5kb3cgc2xvdHMgdXNlZCAgICAgIDogJWQgb2YgJWRc biIsIHdtYXgsIHdzbG90cik7CisgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFz a21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIG4gPSAwOyB9CisgICAgcHJpbnRmKCIgcmVsaWFibGU6 ICAgICAgICAgICAgICA6ICVzJXNcbiIsCisgICAgICAgICAgIHN0cmVhbW9rID8gIiIgOiAibm90 ICIsICJuZWdvdGlhdGVkIik7CisgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFz a21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIG4gPSAwOyB9CisgICAgcHJpbnRmKCIgY2xlYXJjaGFu bmVsOiAgICAgICAgICA6ICVzJXNcbiIsCisgICAgICAgICAgIGNsZWFyZWQgID8gIiIgOiAibm90 ICIsICJuZWdvdGlhdGVkIik7CisgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFz a21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIG4gPSAwOyB9CisKKyAgICBpZiAoIWJyaWVmKSB7Cisg ICAgICAgIHByaW50ZigiIHBhY2tldCBsZW5ndGggICAgICAgICAgOiAlZCAoc2VuZCksICVkIChy ZWNlaXZlKVxuIiwKKyAgICAgICAgICAgICAgIGxhc3RzcG1heCwgdXJwc2l6KTsKKyAgICAgICAg aWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNl IG4gPSAwOyB9CisgICAgICAgIHByaW50ZigiIGNvbXByZXNzaW9uICAgICAgICAgICAgOiAiKTsK KyAgICAgICAgaWYgKHJwdGZsZykKKyAgICAgICAgICBwcmludGYoInllcyBbJWNdICglbGQpXG4i LChjaGFyKSBycHRxLHJwdG4pOworICAgICAgICBlbHNlCisgICAgICAgICAgcHJpbnRmKCJub1xu Iik7CisgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJl dHVybigxKTsgZWxzZSBuID0gMDsgfQorICAgICAgICBpZiAoYmN0dSA9PSA0KQorICAgICAgICAg IHByaW50ZigiIGJsb2NrIGNoZWNrIHR5cGUgdXNlZCAgOiBibGFuay1mcmVlLTJcbiIpOworICAg ICAgICBlbHNlCisgICAgICAgICAgcHJpbnRmKCIgYmxvY2sgY2hlY2sgdHlwZSB1c2VkICA6ICVk XG4iLGJjdHUpOworICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9y ZSgpKSByZXR1cm4oMSk7IGVsc2UgbiA9IDA7IH0KKyAgICB9CisKKyAgZG90aW1lczoKKworI2lm ZGVmIEdGVElNRVIKKyNpZmRlZiBDT01NRU5UCisgICAgcHJpbnRmKCIgZWxhcHNlZCB0aW1lICAg ICAgICAgICA6ICUwLjNmIHNlYywgJXNcbiIsIGZwdHNlY3MsaGhtbXNzKHRzZWNzKSk7CisjZW5k aWYgLyogQ09NTUVOVCAqLworICAgIHByaW50ZigiIGVsYXBzZWQgdGltZSAgICAgICAgICAgOiAl cyAoJTAuM2Ygc2VjKVxuIiwKKyAgICAgICAgICAgaGhtbXNzKChsb25nKShmcHRzZWNzICsgMC41 KSksZnB0c2Vjcyk7CisjZWxzZQorI2lmZGVmIENPTU1FTlQKKyAgICBwcmludGYoIiBlbGFwc2Vk IHRpbWUgICAgICAgICAgIDogJXMgKCVkIHNlYylcbiIsaGhtbXNzKHRzZWNzKSx0c2Vjcyk7Cisj ZW5kaWYgLyogQ09NTUVOVCAqLworICAgIHByaW50ZigiIGVsYXBzZWQgdGltZSAgICAgICAgICAg OiAlZCBzZWMsICVzXG4iLHRzZWNzLGhobW1zcyh0c2VjcykpOworI2VuZGlmIC8qIEdGVElNRVIg Ki8KKyAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4o MSk7IGVsc2UgbiA9IDA7IH0KKyAgICBpZiAoIWZ0cCAmJiBsb2NhbCAmJiAhbmV0d29yayAmJiAh YnJpZWYpIHsKKyAgICAgICAgaWYgKHNwZWVkIDw9IDBMKSBzcGVlZCA9IHR0Z3NwZCgpOworICAg ICAgICBpZiAoc3BlZWQgPiAwTCkgeworICAgICAgICAgICAgaWYgKHNwZWVkID09IDg4ODApCisg ICAgICAgICAgICAgIHByaW50ZigiIHRyYW5zbWlzc2lvbiByYXRlICAgICAgOiA3NS8xMjAwIGJw c1xuIik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIHByaW50ZigiIHRyYW5zbWlz c2lvbiByYXRlICAgICAgOiAlbGQgYnBzXG4iLHNwZWVkKTsKKyAgICAgICAgICAgIGlmICgrK24g PiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBuID0gMDsg fQorICAgICAgICB9CisgICAgfQorICAgIGlmICghZnRwICYmIGxvY2FsICYmICFuZXR3b3JrICYm ICAgIC8qIE9ubHkgbWFrZXMgc2Vuc2UgZm9yICovCisgICAgICAgIG1kbXR5cCA9PSAwICYmICAg ICAgICAgICAgICAgICAgLyogZGlyZWN0IHNlcmlhbCBjb25uZWN0aW9ucyAqLworICAgICAgICBz cGVlZCA+IDk5TCAmJiAgICAgICAgICAgICAgICAgIC8qIHdoZW4gd2UgcmVhbGx5IGtub3cgdGhl IHNwZWVkICovCisgICAgICAgIHNwZWVkICE9IDg4ODBMCisgICAgICAgICkgeworICAgICAgICBp bnQgZWZmOworICAgICAgICBlZmYgPSAoKCh0ZmNwcyAqIDEwMEwpIC8gKHNwZWVkIC8gMTAwTCkp ICsgNUwpIC8gMTBMOworICAgICAgICBwcmludGYoIiBlZmZlY3RpdmUgZGF0YSByYXRlICAgIDog JWxkIGNwcyAoJWQlJSlcbiIsdGZjcHMsZWZmKTsKKyAgICB9IGVsc2UKKyAgICAgIHByaW50Zigi IGVmZmVjdGl2ZSBkYXRhIHJhdGUgICAgOiAlbGQgY3BzXG4iLCB0ZmNwcyk7CisgICAgaWYgKCFm dHAgJiYgcGVha2NwcyA+IDBMICYmIHBlYWtjcHMgPiB0ZmNwcykKKyAgICAgIHByaW50ZigiIHBl YWsgZGF0YSByYXRlICAgICAgICAgOiAlbGQgY3BzXG4iLCBwZWFrY3BzKTsKKyAgICBpZiAoYnJp ZWYpCisgICAgICBwcmludGYoIlxuVXNlIFNUQVRJU1RJQ1MgL1ZFUkJPU0UgZm9yIGdyZWF0ZXIg ZGV0YWlsLlxuXG4iKTsKKyAgICByZXR1cm4oMSk7Cit9CisjZW5kaWYgLyogTk9YRkVSICovCisK KyNpZm5kZWYgTk9TUEwKKworLyogVGhlIElOUFVUIGNvbW1hbmQgKi8KKworLyoKKyAgTk9URTog QW4gSU5QVVQgdGltZW91dCBvZiAwIG1lYW5zIHRvIHBlcmZvcm0gYSBub25ibG9ja2luZyByZWFk IG9mIHRoZQorICBtYXRlcmlhbCB0aGF0IGhhcyBhbHJlYWR5IGFycml2ZWQgYW5kIGlzIHdhaXRp bmcgdG8gYmUgcmVhZCwgYW5kIHBlcmZvcm0KKyAgbWF0Y2hlcyBhZ2FpbnN0IGl0LCB3aXRob3V0 IGRvaW5nIGFueSBmdXJ0aGVyIHJlYWRzLiAgSXQgc2hvdWxkIHN1Y2NlZWQKKyAgb3IgZmFpbCBp bnN0YW50YW5lb3VzbHkuCisqLworCisvKiBPdXRwdXQgYnVmZmVyaW5nIGZvciAiZG9pbnB1dCIg Ki8KKworI2lmZGVmIHBkcDExCisjZGVmaW5lIE1BWEJVUlNUIDE2ICAgICAgICAgICAgIC8qIE1h eGltdW0gc2l6ZSBvZiBpbnB1dCBidXJzdCAqLworI2Vsc2UKKyNkZWZpbmUgTUFYQlVSU1QgMTAy NAorI2VuZGlmIC8qIHBkcDExICovCisjaWZkZWYgT1NLCitzdGF0aWMgQ0hBUiAqY29uYnVmOyAg ICAgICAgICAgIC8qIEJ1ZmZlciB0byBob2xkIG91dHB1dCBmb3IgY29uc29sZSAqLworI2Vsc2UK K3N0YXRpYyBDSEFSIGNvbmJ1ZltNQVhCVVJTVF07ICAgLyogQnVmZmVyIHRvIGhvbGQgb3V0cHV0 IGZvciBjb25zb2xlICovCisjZW5kaWYgLyogT1NLICovCitzdGF0aWMgaW50IGNvbmNudCA9IDA7 ICAgICAgICAgIC8qIE51bWJlciBvZiBjaGFyYWN0ZXJzIGJ1ZmZlcmVkICovCisjaWZkZWYgT1NL CitzdGF0aWMgQ0hBUiAqc2VzYnVmOyAgICAgICAgICAgIC8qIEJ1ZmZlciB0byBob2xkIG91dHB1 dCBmb3Igc2Vzc2lvbiBsb2cgKi8KKyNlbHNlCitzdGF0aWMgQ0hBUiBzZXNidWZbTUFYQlVSU1Rd OyAgIC8qIEJ1ZmZlciB0byBob2xkIG91dHB1dCBmb3Igc2Vzc2lvbiBsb2cgKi8KKyNlbmRpZiAv KiBPU0sgKi8KK3N0YXRpYyBpbnQgc2VzY250ID0gMDsgICAgICAgICAgLyogTnVtYmVyIG9mIGNo YXJhY3RlcnMgYnVmZmVyZWQgKi8KKworZXh0ZXJuIGludCBkZWJzZXM7ICAgICAgICAgICAgICAg ICAgICAgIC8qIFRFUk1JTkFMIERFQlVHIE9OL09GRiAqLworCitzdGF0aWMgVk9JRCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogRmx1c2ggSU5QVVQgZWNob2luZyAqLworbXlmbHNoKCkg eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFuZCBzZXNzaW9uIGxvZyBvdXRwdXQu ICovCisgICAgaWYgKGNvbmNudCA+IDApIHsKKyAgICAgICAgaWYgKGRlYnNlcykgeyAgICAgICAg ICAgICAgICAgICAvKiBUZXJtaW5hbCBkZWJ1Z2dpbmc/ICovCisgICAgICAgICAgICBpbnQgaTsK KyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb25jbnQ7IGkrKykKKyAgICAgICAgICAgICAg Y29ub2woZGJjaHIoY29uYnVmW2ldKSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgIGNvbnhv KGNvbmNudCwgKGNoYXIgKikgY29uYnVmKTsKKyAgICAgICAgY29uY250ID0gMDsKKyAgICB9Cisg ICAgaWYgKHNlc2NudCA+IDApIHsKKyAgICAgICAgbG9nc3RyKChjaGFyICopIHNlc2J1Ziwgc2Vz Y250KTsKKyAgICAgICAgc2VzY250ID0gMDsKKyAgICB9Cit9CisKKy8qIEV4ZWN1dGUgdGhlIElO UFVUIGFuZCBNSU5QVVQgY29tbWFuZHMgKi8KKworaW50IGluc3RhdHVzID0gLTE7Citsb25nIGlu ZXRpbWUgPSAtMUw7CitpbnQgaW53YWl0ID0gMDsKK2ludCBub3dyYXAgPSAwOworCisvKiBGb3Ig cmV0dXJuaW5nIHRoZSBpbnB1dCBzZXF1ZW5jZSB0aGF0IG1hdGNoZWQgKi8KKworI2lmZGVmIEJJ R0JVRk9LCisjZGVmaW5lIE1BVENIQlVGU0laIDgxOTEKKyNlbHNlCisjZGVmaW5lIE1BVENIQlVG U0laIDEwMjMKKyNlbmRpZiAvKiBCSUdCVUZPSyAqLworc3RhdGljIGNoYXIgKiBtYXRjaGJ1ZiA9 IE5VTEw7CitzdGF0aWMgaW50IG1hdGNoaW5kZXggPSAwOworc3RhdGljIGludCBidXJzdCA9IDA7 ICAgICAgICAgICAgICAgICAgICAgIC8qIENoYXJzIHJlbWFpbmluZyBpbiBpbnB1dCBidXJzdCAq LworLyoKKyAgdGltbyA9IEhvdyBsb25nIHRvIHdhaXQ6CisgICAgICAgICA8IDAgPSBXYWl0IGZv cmV2ZXIKKyAgICAgICAgICAgMCA9IERvbid0IHdhaXQgYXQgYWxsIC0gbWF0ZXJpYWwgbXVzdCBh bHJlYWR5IGhhdmUgYXJyaXZlZAorICAgICAgICAgPiAwID0gV2FpdCB0aGlzIG1hbnkgc2Vjb25k cworICBtcyAgID0gQXJyYXkgb2Ygc3RyaW5ncyB0byB3YWl0IGZvci4KKyAgbXAgICA9IEFycmF5 IG9mIGZsYWdzLgorICAgICAgICAgSWYgbXBbaV0gPT0gMCwgbXNbaV0gaXMgbGl0ZXJhbCwgZWxz ZSBpdCdzIGEgcGF0dGVybi4KKyAgZmxhZ3MgPSBiaXQgbWFzaworICAgIElOUFNXX05PTSA9IC9O T01BVENIID0gMQorICAgIElOUFNXX0NMUiA9IC9DTEVBUiAgID0gMgorICAgIElOUFNXX05PVyA9 IC9OT1dSQVAgID0gNAorICAgIElOUFNXX0NPVSA9IC9DT1VOVCAgID0gOAorICBjb3VudCA9IC9D T1VOVDogdmFsdWUgaWYgYSAvQ09VTlQgc3dpdGNoIHdhcyBnaXZlbi4KKworIFJldHVybnM6Cisg ICAgMCBvbiBmYWlsdXJlLCAxIG9uIHN1Y2Nlc3MuCisqLworI2lmbmRlZiBFU19OT1JNQUwKKyNk ZWZpbmUgRVNfTk9STUFMIDAKKyNlbmRpZgkvKiBFU19OT1JNQUwgKi8KK2V4dGVybiBpbnQgaW5l c2NbXSwgb2xkZXNjW107CisKK2ludAorZG9pbnB1dCh0aW1vLG1zLG1wLGZsYWdzLGNvdW50KQor ICAgIGludCB0aW1vOyBjaGFyICptc1tdOyBpbnQgbXBbXTsgaW50IGZsYWdzOyBpbnQgY291bnQ7 IHsKKyAgICBleHRlcm4gaW50IGluaW50cjsKKyNpZmRlZiBDS19BVVRPREwKKyAgICBleHRlcm4g aW50IGluYXV0b2RsOworI2VuZGlmIC8qIENLX0FVVE9ETCAqLworICAgIGludCB4LCB5LCBpLCB0 LCBydCwgaWNuLCBhbnljaGFyID0gMCwgbWlbTUlOUE1BWF07CisjaWZkZWYgR0ZUSU1FUgorICAg IENLRkxPQVQgZnB0ID0gMC4wOworI2VuZGlmIC8qIEdGVElNRVIgKi8KKyAgICBpbnQgc2F2ZWNv dW50ID0gMDsKKyAgICBpbnQgbm9tYXRjaCA9IDA7CisgICAgaW50IGNsZWFyZmlyc3QgPSAwOwor ICAgIGludCBsYXN0Y2hhciA9IDA7CisgICAgaW50IHdhaXRpbmcgPSAwOworICAgIGludCBpbWFz ayA9IDA7CisgICAgY2hhciBjaCwgKnhwLCAqczsKKyAgICBDSEFSIGM7CisjaWZuZGVmIE5PTE9D QUwKKyNpZmRlZiBPUzIKKyAgICBleHRlcm4gaW50IHRlcm1faW87CisgICAgaW50IHRlcm1faW9f c2F2ZTsKKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBOT0xPQ0FMICovCisjaWZkZWYgVE5D T0RFCisgICAgc3RhdGljIGludCBjciA9IDA7CisjZW5kaWYgLyogVE5DT0RFICovCisgICAgaW50 IGlzX3RuID0gMDsKKyNpZmRlZiBTU0hCVUlMVElOCisgICAgZXh0ZXJuIGludCBzc2hfY2FzOwor ICAgIGV4dGVybiBjaGFyICogc3NoX2NtZDsKKyNlbmRpZiAvKiBTU0hCVUlMVElOICovCisgICAg aW50IG5vZXNjc2VxID0gMDsJCQkvKiBGaWx0ZXIgZXNjYXBlIHNlcXVlbmNlcyAqLworCisgICAg ZGVidWcoRjEwMSwiaW5wdXQgY291bnQiLCIiLGNvdW50KTsKKyAgICBkZWJ1ZyhGMTAxLCJpbnB1 dCBmbGFncyIsIiIsZmxhZ3MpOworCisvKgorICBDS19CVVJTVCBlbmFibGVzIHRoZSBJTlBVVCBz cGVlZHVwIGNvZGUsIHdoaWNoIGRlcGVuZHMgb24gdHRjaGsoKSByZXR1cm5pbmcKKyAgYWNjdXJh dGUgaW5mb3JtYXRpb24uICBJZiBJTlBVVCBmYWlscyB3aXRoIHRoaXMgY29kZSBlbmFibGVkLCBj aGFuZ2UgdGhlCisgIGFib3ZlICIjZGVmaW5lIiB0byAiI3VuZGVmIi4KKyovCisjZGVmaW5lIENL X0JVUlNUCisKKy8qKioqKiBDSEFOR0UgVEhJUyBUTyBBIFNFVCBJTlBVVCBQQVJBTUVURVIgKioq KiovCisKKyAgICBub2VzY3NlcSA9IChzZXNzZnQgPT0gWFlGVF9UKTsJLyogRmlsdGVyIGVzY2Fw ZSBzZXF1ZW5jZXMgKi8KKworICAgIGltYXNrID0gY21hc2s7CisgICAgaWYgKHBhcml0eSkgaW1h c2sgPSAweDdmOworICAgIGlud2FpdCA9IHRpbW87ICAgICAgICAgICAgICAgICAgICAgIC8qIEZv ciBcdihpbndhaXQpICovCisKKyAgICAvKiBPcHRpb25zIGZyb20gY29tbWFuZCBzd2l0Y2hlcyAq LworCisgICAgbm93cmFwID0gZmxhZ3MgJiBJTlBTV19OT1c7CQkvKiA0ID0gL05PV1JBUCAqLwor ICAgIG5vbWF0Y2ggPSBmbGFncyAmIElOUFNXX05PTTsJLyogMSA9IC9OT01BVENIICovCisgICAg Y2xlYXJmaXJzdCA9IGZsYWdzICYgSU5QU1dfQ0xSOwkvKiAyID0gL0NMRUFSICovCisgICAgc2F2 ZWNvdW50ID0gY291bnQ7CisKKyAgICBtYWtlc3RyKCZpbnBtYXRjaCxOVUxMKTsKKyAgICBpZiAo IW1hdGNoYnVmKSB7CisgICAgICAgIG1hdGNoYnVmID0gbWFsbG9jKE1BVENIQlVGU0laKzEpOwor ICAgICAgICBtYXRjaGJ1ZlswXSA9IE5VTDsKKyAgICB9CisgICAgbWF0Y2hpbmRleCA9IDA7CisK KyAgICAvKiBJZiBsYXN0IHRpbWUgdGhyb3VnaCB3ZSByZXR1cm5lZCBiZWNhdXNlIG9mIC9OT1dS QVAgYW5kIGJ1ZmZlciBmdWxsICovCisgICAgLyogbm93IHdlIGhhdmUgdG8gY2xlYXIgdGhlIGJ1 ZmZlciB0byBtYWtlIHJvb20gZm9yIGFub3RoZXIgbG9hZC4gKi8KKworICAgIGlmIChub3dyYXAg JiYgaW5zdGF0dXMgPT0gSU5QX0JGKQorICAgICAgY2xlYXJmaXJzdCA9IDE7CisKKyAgICBpZiAo Y2xlYXJmaXJzdCkgewkJCS8qIElOUFVUIC9DTEVBUiAqLworCWludCBpOworCW15ZmxzaCgpOwkJ CS8qIEZsdXNoIHNjcmVlbiBhbmQgbG9nIGJ1ZmZlcnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgaW5i dWZzaXplOyBpKyspCisJICBpbnBidWZbaV0gPSBOVUw7CisJaW5wYnAgPSBpbnBidWY7CisgICAg fQorICAgIGlzX3RuID0KKyNpZmRlZiBUTkNPREUKKyAgICAgICAgKGxvY2FsICYmIG5ldHdvcmsg JiYgSVNfVEVMTkVUKCkpIHx8ICghbG9jYWwgJiYgc3N0ZWxuZXQpCisjZWxzZQorICAgICAgICAg MAorI2VuZGlmIC8qIFROQ09ERSAqLworICAgICAgICAgIDsKKworI2lmZGVmIENLX1NTTAorICAg IGlmIChpc190bikgaWYgKHNzbF9yYXdfZmxhZyB8fCB0bHNfcmF3X2ZsYWcpIGlzX3RuID0gMDsK KyNlbmRpZgkvKiBDS19TU0wgKi8KKworICAgIGluc3RhdHVzID0gSU5QX0lFOyAgICAgICAgICAg ICAgICAgIC8qIDMgPSBpbnRlcm5hbCBlcnJvciAqLworICAgIGtiY2hhciA9IDA7CisKKyNpZmRl ZiBPU0sKKyAgICBpZiAoY29uYnVmID09IE5VTEwpIHsKKyAgICAgICAgaWYgKChjb25idWYgPSAo Q0hBUiAqKW1hbGxvYyhNQVhCVVJTVCoyKSkgPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJu KDApOworICAgICAgICB9CisgICAgICAgIHNlc2J1ZiA9IGNvbmJ1ZiArIE1BWEJVUlNUOworICAg IH0KKyNlbmRpZiAvKiBPU0sgKi8KKworI2lmbmRlZiBOT0xPQ0FMCisgICAgaWYgKGxvY2FsKSB7 ICAgICAgICAgICAgICAgICAgICAgICAgLyogSW4gbG9jYWwgbW9kZS4uLiAqLworICAgICAgICBp ZiAoKHdhaXRpbmcgPSB0dGNoaygpKSA8IDApIHsgIC8qIGNoZWNrIHRoYXQgY29ubmVjdGlvbiBp cyBvcGVuICovCisJICAgIGlmICghcXVpZXQpIHsKKwkJaWYgKCghbmV0d29yayAKKyNpZmRlZiBU Tl9DT01QT1JUCisJCSAgICAgIHx8IGlzdG5jb21wb3J0KCkKKyNlbmRpZiAvKiBUTl9DT01QT1JU ICovCisJCSAgICAgICkgJiYgY2FycmllciAhPSBDQVJfT0ZGKQorCQkgICAgcHJpbnRmKCI/Q2Fy cmllciBkZXRlY3QgZmFpbHVyZSBvbiAlcy5cbiIsIHR0bmFtZSk7CisJCWVsc2UKKwkJICAgIHBy aW50ZigiP0Nvbm5lY3Rpb24gJXMgJXMgaXMgbm90IG9wZW4uXG4iLAorCQkgICAgICAgbmV0d29y ayA/ICJ0byIgOiAib24iLAorCQkgICAgICAgdHRuYW1lCisJCSAgICAgICApOworCSAgICB9Cisg ICAgICAgICAgICBpbnN0YXR1cyA9IElOUF9JTzsKKyAgICAgICAgICAgIHJldHVybigwKTsKKyAg ICAgICAgfQorICAgICAgICBkZWJ1ZyhGMTAxLCJkb2lucHV0IHdhaXRpbmciLCIiLHdhaXRpbmcp OworICAgICAgICB5ID0gdHR2dChzcGVlZCxmbG93KTsgICAgICAgICAgIC8qIFB1dCBsaW5lIGlu ICJ0dHZ0IiBtb2RlICovCisgICAgICAgIGlmICh5IDwgMCkgeworICAgICAgICAgICAgcHJpbnRm KCI/SU5QVVQgaW5pdGlhbGl6YXRpb24gZXJyb3JcbiIpOworICAgICAgICAgICAgaW5zdGF0dXMg PSBJTlBfSU87CisgICAgICAgICAgICByZXR1cm4oMCk7ICAgICAgICAgICAgICAgICAgLyogV2F0 Y2ggb3V0IGZvciBmYWlsdXJlLiAqLworICAgICAgICB9CisgICAgfQorI2VuZGlmIC8qIE5PTE9D QUwgKi8KKworI2lmZGVmIFNTSEJVSUxUSU4KKyAgICBpZiAoIG5ldHdvcmsgJiYgbmV0dHlwZSA9 PSBORVRfU1NIICYmIHNzaF9jYXMgJiYgc3NoX2NtZCAmJiAKKyAgICAgICAgICEoc3RyY21wKHNz aF9jbWQsImtlcm1pdCIpICYmIHN0cmNtcChzc2hfY21kLCJzZnRwIikpKSB7CisgICAgICAgIGlm ICghcXVpZXQpCisJICBwcmludGYoIj9TU0ggU3Vic3lzdGVtIGFjdGl2ZTogJXNcbiIsIHNzaF9j bWQpOworICAgICAgICBpbnN0YXR1cyA9IElOUF9JS1M7CisgICAgICAgIHJldHVybigwKTsKKyAg ICB9CisjZW5kaWYgLyogU1NIQlVJTFRJTiAqLworCisgICAgZGVidWcoRjExMSwiZG9pbnB1dCBt c1swXSIsbXNbMF0sd2FpdGluZyk7CisKKyAgICBpZiAoIW1zWzBdIHx8IGlzZW1wdHlzdHJpbmco bXNbMF0pKSB7IC8qIE5vIHNlYXJjaCBzdHJpbmcgd2FzIGdpdmVuIG5vciAqLworCWlmIChjb3Vu dCA8IDIpCQkJICAvKiBhIC9DT1VOVDogc3dpdGNoIHNvIHdlIGp1c3QgKi8KKwkgIGFueWNoYXIg PSAxOwkJCSAgLyogd2FpdCBmb3IgdGhlIGZpcnN0IGNoYXJhY3RlciAqLworICAgIH0KKyAgICBp ZiAobm9tYXRjaCkgYW55Y2hhciA9IDA7CQkvKiBEb24ndCBtYXRjaCBhbnl0aGluZyAqLworCisg ICAgaWYgKCFhbnljaGFyICYmIHdhaXRpbmcgPT0gMCAmJiB0aW1vID09IDApCisgICAgICByZXR1 cm4oMCk7CisKKyNpZm5kZWYgTk9ERUJVRworICAgIGlmIChkZWJsb2cpIHsKKyAgICAgICAgY2hh ciB4YnVmWzI0XTsKKyAgICAgICAgZGVidWcoRjEwMSwiZG9pbnB1dCBhbnljaGFyIiwiIixhbnlj aGFyKTsKKyAgICAgICAgZGVidWcoRjEwMSwiZG9pbnB1dCB0aW1vIiwiIix0aW1vKTsKKyAgICAg ICAgZGVidWcoRjEwMSwiZG9pbnB1dCBlY2hvIiwiIixpbmVjaG8pOworI2lmZGVmIENLX0JVUlNU CisgICAgICAgIGRlYnVnKEYxMDEsImRvaW5wdXQgYnVyc3QiLCIiLGJ1cnN0KTsKKyNlbmRpZgkv KiBDS19CVVJTVCAqLworICAgICAgICB5ID0gLTE7CisgICAgICAgIHdoaWxlIChtc1srK3ldKSB7 CisgICAgICAgICAgICBzcHJpbnRmKHhidWYsImRvaW5wdXQgc3RyaW5nICUyZCIseSk7IC8qIFNB RkUgKDI0KSAqLworICAgICAgICAgICAgZGVidWcoRjExMSx4YnVmLG1zW3ldLG1wW3ldKTsKKyAg ICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBOT0RFQlVHICovCisKKyNpZmRlZiBJS1NfT1BUSU9O CisgICAgaWYgKGlzX3RuKSB7CisgICAgICAgIC8qIElmIHRoZSByZW1vdGUgc2lkZSBpcyBpbiBh IHN0YXRlIG9mIElLUyBTVEFSVC1TRVJWRVIgICAgKi8KKyAgICAgICAgLyogd2UgcmVxdWVzdCB0 aGF0IHRoZSBzdGF0ZSBiZSBjaGFuZ2VkLiAgV2Ugd2lsbCBkZXRlY3QgICAqLworICAgICAgICAv KiBhIGZhaWx1cmUgdG8gYWRoZXJlIHRvIHRoZSByZXF1ZXN0IHdoZW4gd2UgY2FsbCB0dGluYygp ICovCisgICAgICAgIGlmIChURUxPUFRfVShURUxPUFRfS0VSTUlUKSAmJgorICAgICAgICAgICAg VEVMT1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1pdC51X3N0YXJ0KQorICAgICAgICAgIGlrc193 YWl0KEtFUk1JVF9SRVFfU1RPUCwwKTsgIC8qIFNlbmQgUmVxdWVzdC1TdG9wICovCisjaWZkZWYg Q0tfQVVUT0RMCisgICAgICAgIC8qIElmIHdlIGFyZSBwcm9jZXNzaW5nIHBhY2tldHMgZHVyaW5n IElOUFVUIGFuZCB3ZSBoYXZlIG5vdCAqLworICAgICAgICAvKiBzZW50IGEgU1RBUlQgbWVzc2Fn ZSwgZG8gc28gbm93LiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgaWYgKGlu YXV0b2RsICYmIFRFTE9QVF9NRShURUxPUFRfS0VSTUlUKSAmJgorCQkJIVRFTE9QVF9TQihURUxP UFRfS0VSTUlUKS5rZXJtaXQubWVfc3RhcnQpIHsKKyAgICAgICAgICAgIHRuX3Npa3MoS0VSTUlU X1NUQVJUKTsgICAgICAvKiBTZW5kIEtlcm1pdC1TZXJ2ZXIgU3RhcnQgKi8KKyAgICAgICAgfQor I2VuZGlmIC8qIENLX0FVVE9ETCAqLworICAgIH0KKyNlbmRpZiAvKiBJS1NfT1BUSU9OICovCisg ICAgeCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmV0dXJuIGNvZGUsIGFz c3VtZSBmYWlsdXJlICovCisgICAgaW5zdGF0dXMgPSBJTlBfVE87ICAgICAgICAgICAgICAgICAg LyogU3RhdHVzLCBhc3N1bWUgdGltZW91dCAqLworCisgICAgZm9yICh5ID0gMDsgeSA8IE1JTlBN QVg7IHkrKykJLyogSW5pdGlhbGl6ZS4uLiAqLworICAgICAgbWlbeV0gPSAwOyAgICAgICAgICAg ICAgICAgICAgICAgIC8qICAuLnN0cmluZyBwYXR0ZXJuIG1hdGNoIHBvc2l0aW9uICovCisKKyAg ICBpZiAoIWlucGNhc1tjbWRsdmxdKSB7ICAgICAgICAgICAgICAvKiBJTlBVVCBDQVNFID0gSUdO T1JFPyAgKi8KKyAgICAgICAgeSA9IC0xOworICAgICAgICB3aGlsZSAoKHhwID0gbXNbKyt5XSkp IHsJLyogQ29udmVydCBlYWNoIHRhcmdldCB0byBsb3dlcmNhc2UgKi8KKyAgICAgICAgICAgIHdo aWxlICgqeHApIHsKKyAgICAgICAgICAgICAgICBpZiAoaXN1cHBlcigqeHApKSAqeHAgPSAoY2hh cikgdG9sb3dlcigqeHApOworICAgICAgICAgICAgICAgIHhwKys7CisgICAgICAgICAgICB9Cisg ICAgICAgIH0KKyAgICB9CisgICAgcnRpbWVyKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogUmVzZXQgdGltZXIuICovCisjaWZkZWYgR0ZUSU1FUgorICAgIHJmdGltZXIoKTsgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIEZsb2F0aW5nLXBvaW50IHRpbWVyIHRvby4gKi8KKyNlbmRp ZiAvKiBHRlRJTUVSICovCisgICAgaW5ldGltZSA9IC0xTDsgICAgICAgICAgICAgICAgICAgICAg LyogSW5pdGlhbGl6ZSBlbGFwc2VkIHRpbWUuICovCisgICAgdCA9IDA7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogVGltZSBub3cgaXMgMC4gKi8KKyAgICBtX2ZvdW5kID0gMDsgICAg ICAgICAgICAgICAgICAgICAgICAvKiBEZWZhdWx0IHRvIHRpbWVkLW91dCAqLworICAgIGluY291 bnQgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIENoYXJhY3RlciBjb3VudGVyICovCisg ICAgcnQgPSAodGltbyA9PSAwKSA/IDAgOiAxOyAgICAgICAgICAgLyogQ2hhcmFjdGVyLXJlYWQg dGltZW91dCBpbnRlcnZhbCAqLworCisjaWZuZGVmIE5PTE9DQUwKKyNpZmRlZiBPUzIKKyAgICB0 ZXJtX2lvX3NhdmUgPSB0ZXJtX2lvOyAgICAgICAgICAgICAvKiBEaXNhYmxlIEkvTyBieSBlbXVs YXRvciAqLworICAgIHRlcm1faW8gPSAwOworI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIE5P TE9DQUwgKi8KKworICAgIHdoaWxlICgxKSB7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENo YXJhY3Rlci1nZXR0aW5nIGxvb3AgKi8KKyNpZmRlZiBDS19BUEMKKyAgICAgICAgLyogQ2hlY2sg dG8gc2VlIGlmIHRoZXJlIGlzIGFuIEF1dG9kb3duIG9yIG90aGVyIEFQQyBjb21tYW5kICovCisg ICAgICAgIGlmIChhcGNhY3RpdmUgPT0gQVBDX0xPQ0FMIHx8CisgICAgICAgICAgICAoYXBjYWN0 aXZlID09IEFQQ19SRU1PVEUgJiYgYXBjc3RhdHVzICE9IEFQQ19PRkYpKSB7CisgICAgICAgICAg ICBpZiAobWxvb2sobWFjdGFiLCJfYXBjX2NvbW1hbmRzIixubWFjKSA9PSAtMSkgeworICAgICAg ICAgICAgICAgIGRlYnVnKEYxMTAsImRvaW5wdXQgYWJvdXQgdG8gZXhlY3V0ZSBBUEMiLGFwY2J1 ZiwwKTsKKyAgICAgICAgICAgICAgICBkb21hYygiX2FwY19jb21tYW5kcyIsYXBjYnVmLGNtZHN0 a1tjbWRsdmxdLmNjZmxnc3xDRl9BUEMpOworICAgICAgICAgICAgICAgIGRlbG1hYygiX2FwY19j b21tYW5kcyIsMSk7CisgICAgICAgICAgICAgICAgYXBjYWN0aXZlID0gQVBDX0lOQUNUSVZFOwor I2lmZGVmIERFQlVHCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGRlYnVn KEYxMDAsImRvaW5wdXQgQVBDIGluIHByb2dyZXNzIiwiIiwwKTsKKyNlbmRpZiAvKiBERUJVRyAq LworICAgICAgICAgICAgfQorICAgICAgICB9CisjZW5kaWYgLyogQ0tfQVBDICovCisKKyAgICAg ICAgaWYgKHRpbW8gPT0gMCAmJiB3YWl0aW5nIDwgMSkgeyAvKiBTcGVjaWFsIGV4aXQgY3JpdGVy aW9uICovCisgICAgICAgICAgICBpbnN0YXR1cyA9IElOUF9UTzsgICAgICAgICAgLyogZm9yIHRp bWVvdXQgPT0gMCAqLworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYg KGxvY2FsKSB7ICAgICAgICAgICAgICAgICAgICAvKiBPbmUgY2FzZSBmb3IgbG9jYWwgKi8KKyAg ICAgICAgICAgIHkgPSB0dGluYyhydCk7ICAgICAgICAgICAgICAvKiBHZXQgY2hhcmFjdGVyIGZy b20gY29tbSBkZXZpY2UgKi8KKyAgICAgICAgICAgIGRlYnVnKEYxMDEsImRvaW5wdXQgdHRpbmMo cnQpIHJldHVybnMiLCIiLHkpOworICAgICAgICAgICAgaWYgKHkgPCAtMSkgeyAgICAgICAgICAg ICAgIC8qIENvbm5lY3Rpb24gZmFpbGVkLiAqLworICAgICAgICAgICAgICAgIGluc3RhdHVzID0g SU5QX0lPOyAgICAgIC8qIFN0YXR1cyA9IGkvbyBlcnJvciAqLworI2lmbmRlZiBOT0xPQ0FMCisj aWZkZWYgT1MyCisgICAgICAgICAgICAgICAgdGVybV9pbyA9IHRlcm1faW9fc2F2ZTsKKyNlbmRp ZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBOT0xPQ0FMICovCisgICAgICAgICAgICAgICAgc3dpdGNo ICh5KSB7CisgICAgICAgICAgICAgICAgICBjYXNlIC0yOiAgICAgICAgICAgICAgLyogQ29ubmVj dGlvbiBsb3N0ICovCisgICAgICAgICAgICAgICAgICAgIGlmIChsb2NhbCAmJiAhbmV0d29yayAm JiBjYXJyaWVyICE9IENBUl9PRkYpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvbG9nZW5k KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIkNvbm5lY3Rpb24gY2xvc2VkLlxu Iik7CisgICAgICAgICAgICAgICAgICAgICAgICB0dGNsb3MoMSk7CisgICAgICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNl IC0zOgorICAgICAgICAgICAgICAgICAgICBkb2xvZ2VuZCgpOworICAgICAgICAgICAgICAgICAg ICBwcmludGYoIlNlc3Npb24gTGltaXQgZXhjZWVkZWQgLSBjbG9zaW5nIGNvbm5lY3Rpb24uXG4i KTsKKyAgICAgICAgICAgICAgICAgICAgdHRjbG9zKDEpOworICAgICAgICAgICAgICAgICAgZGVm YXVsdDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICAgIGRlYnVnKEYxMTEsImRvaW5wdXQgQ29ubmVjdGlvbiBmYWlsZWQiLCJyZXR1 cm5pbmcgMCIseSk7CisgICAgICAgICAgICAgICAgcmV0dXJuKDApOworICAgICAgICAgICAgfQor ICAgICAgICAgICAgaWYgKGluaW50cikgeworICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsImRv aW5wdXQiLCJpbmludHIiLGluaW50cik7CisgICAgICAgICAgICAgICAgaWYgKChpY24gPSBjb25j aGsoKSkgPiAwKSB7IC8qIEludGVycnVwdGVkIGZyb20ga2V5Ym9hcmQ/ICovCisgICAgICAgICAg ICAgICAgICAgIGRlYnVnKEYxMDEsImlucHV0IGludGVycnVwdGVkIGZyb20ga2V5Ym9hcmQiLCIi LGljbik7CisgICAgICAgICAgICAgICAgICAgIGtiY2hhciA9IGNvbmluYygwKTsKKyAgICAgICAg ICAgICAgICAgICAgaWYgKGtiY2hhciA+PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB3 aGlsZSAoLS1pY24gPiAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEx MCwiZG9pbnB1dCIsImFic29yYmluZyIsMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uaW5jKDApOyAgICAgIC8qIFllcywgYWJzb3JiIHdoYXQgd2FzIHR5cGVkLiAqLworICAgICAg ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGF0dXMgPSBJ TlBfVUk7ICAvKiBGYWlsIGFuZCByZW1lbWJlciB3aHkuICovCisgICAgICAgICAgICAgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBB bm90aGVyIGZvciByZW1vdGUgKi8KKyAgICAgICAgICAgIHkgPSBjb25pbmMocnQpOworICAgICAg ICAgICAgZGVidWcoRjEwMSwiZG9pbnB1dCBjb25pbmMocnQpIHJldHVybnMiLCIiLHkpOworICAg ICAgICB9CisgICAgICAgIGlmICh5ID4gLTEpIHsgICAgICAgICAgICAgICAgICAgLyogQSBjaGFy YWN0ZXIgYXJyaXZlZCAqLworICAgICAgICAgICAgZGVidWcoRjExMSwiZG9pbnB1dCIsImEgY2hh cmFjdGVyIGFycml2ZWQiLHkpOworICAgICAgICAgICAgaWYgKHRpbW8gPT0gMCkKKyAgICAgICAg ICAgICAgd2FpdGluZy0tOworI2lmbmRlZiBPUzIKKyNkZWZpbmUgVE5fTk9MTworI2VuZGlmIC8q IE9TMiAqLworI2lmZGVmIE5PTE9DQUwKKyNkZWZpbmUgVE5fTk9MTworI2VuZGlmIC8qIE5PTE9D QUwgKi8KKworI2lmZGVmIFROX05PTE8KKyAgICAgICAgICAgIGRlYnVnKEYxMDAsImRvaW5wdXQg VE5fTk9MTyIsIiIsMCk7CisjaWZkZWYgVE5DT0RFCisgICAgICAgICAgICAvKiBDaGVjayBmb3Ig dGVsbmV0IHByb3RvY29sIG5lZ290aWF0aW9uICovCisgICAgICAgICAgICBpZiAoaXNfdG4pIHsK KyAgICAgICAgICAgICAgICBzd2l0Y2ggKHkgJiAweGZmKSB7CisgICAgICAgICAgICAgICAgICBj YXNlIElBQzoKKyAgICAgICAgICAgICAgICAgICAgY3IgPSAwOworICAgICAgICAgICAgICAgICAg ICBteWZsc2goKTsgICAvKiBCcmVhayBmcm9tIGlucHV0IGJ1cnN0IGZvciB0bl9kb29wKCkgKi8K KyNpZmRlZiBDS19CVVJTVAorICAgICAgICAgICAgICAgICAgICBidXJzdCA9IDA7CisjZW5kaWYg LyogQ0tfQlVSU1QgKi8KKyAgICAgICAgICAgICAgICAgICAgd2FpdGluZyAtPSAyOyAgICAgICAv KiAobm90IG5lY2Vzc2FyaWx5Li4uKSAqLworICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHRu X2Rvb3AoKENIQVIpKHkgJiAweGZmKSxkdXBsZXgsdHRpbmMpKSB7CisgICAgICAgICAgICAgICAg ICAgICAgY2FzZSAyOiBkdXBsZXggPSAwOyBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAg ICBjYXNlIDE6IGR1cGxleCA9IDE7IGNvbnRpbnVlOworI2lmZGVmIElLU19PUFRJT04KKyAgICAg ICAgICAgICAgICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoVEVM T1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1pdC51X3N0YXJ0ICYmCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICF0Y3BfaW5jb21pbmcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpbnN0YXR1cyA9IElOUF9JS1M7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRm KAorICIgSW50ZXJuZXQgS2VybWl0IFNlcnZpY2UgaW4gU0VSVkVSIG1vZGUuXG4gUGxlYXNlIHVz ZSBSRU1PVEUgY29tbWFuZHMuXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyNlbmRpZiAvKiBJ S1NfT1BUSU9OICovCisgICAgICAgICAgICAgICAgICAgICAgY2FzZSA2OiAgICAgICAgICAgLyog VEVMTkVUIERPIExPR09VVCByZWNlaXZlZCAqLworCQkJY29udGludWU7CisJCSAgICAgIGNhc2Ug NzoKKwkJICAgICAgY2FzZSAzOgkJLyogQSBxdW90ZWQgSUFDICovCisJCQlicmVhazsKKyAgICAg ICAgICAgICAgICAgICAgICBkZWZhdWx0OgorCQkJY29udGludWU7CisgICAgICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICAgIGNhc2UgQ1I6CisgICAgICAgICAgICAgICAgICAgIGNy ID0gMTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNl IE5VTDoKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFURUxPUFRfVShURUxPUFRfQklOQVJZKSAm JiBjcikgeworICAgICAgICAgICAgICAgICAgICAgICAgY3IgPSAwOworICAgICAgICAgICAgICAg ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ICAgICAgY3IgPSAwOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGNyID0gMDsKKyAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICAgICAgLyogSSdtIGVjaG9pbmcgcmVtb3RlIGNoYXJzICovCisgICAg ICAgICAgICAgICAgaWYgKFRFTE9QVF9NRShURUxPUFRfRUNITykgJiYgdG5fcmVtX2VjaG8pCisg ICAgICAgICAgICAgICAgICB0dG9jKChjaGFyKXkpOworICAgICAgICAgICAgfQorI2VuZGlmIC8q IFROQ09ERSAqLworI2lmZGVmIENLX0FVVE9ETAorICAgICAgICAgICAgLyogQ2hlY2sgZm9yIGZp bGUgdHJhbnNmZXIgcGFja2V0cyAqLworICAgICAgICAgICAgaWYgKGluYXV0b2RsKSBhdXRvZG93 bih5KTsKKyNlbmRpZiAvKiBDS19BVVRPREwgKi8KKyNlbHNlICAvKiBUTl9OT0xPICovCisgICAg ICAgICAgICBkZWJ1ZyhGMTAwLCJkb2lucHV0ICFUTl9OT0xPIiwiIiwwKTsKKyNpZmRlZiBUTkNP REUKKyAgICAgICAgICAgIC8qIENoZWNrIGZvciB0ZWxuZXQgcHJvdG9jb2wgbmVnb3RpYXRpb24g Ki8KKyAgICAgICAgICAgIGlmIChpc190bikgeworICAgICAgICAgICAgICAgIGludCB0eDsKKyAg ICAgICAgICAgICAgICBzd2l0Y2ggKHkgJiAweGZmKSB7CisgICAgICAgICAgICAgICAgICBjYXNl IElBQzoKKyAgICAgICAgICAgICAgICAgICAgbXlmbHNoKCk7ICAgLyogQnJlYWsgZnJvbSBpbnB1 dCBidXJzdCBmb3IgdG5fZG9vcCgpICovCisjaWZkZWYgQ0tfQlVSU1QKKyAgICAgICAgICAgICAg ICAgICAgYnVyc3QgPSAwOworI2VuZGlmIC8qIENLX0JVUlNUICovCisjaWZkZWYgSUtTX09QVElP TgorICAgICAgICAgICAgICAgICAgICB0eCA9IHNjcmlwdHdydGJ1ZigoVVNIT1JUKXkpOworICAg ICAgICAgICAgICAgICAgICBpZiAodHggPT0gNCkgeworICAgICAgICAgICAgICAgICAgICAgICAg aWYgKFRFTE9QVF9VKFRFTE9QVF9LRVJNSVQpICYmIAorCQkJICAgIFRFTE9QVF9TQihURUxPUFRf S0VSTUlUKS5rZXJtaXQudV9zdGFydCAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICF0 Y3BfaW5jb21pbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbnN0YXR1cyA9IElOUF9JS1M7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcHJpbnRmKAorICAiIEludGVybmV0IEtlcm1pdCBTZXJ2aWNlIGluIFNFUlZFUiBt b2RlLlxuIFBsZWFzZSB1c2UgUkVNT1RFIGNvbW1hbmRzLlxuIgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYg KHR4ID09IDYpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRFTE5FVCBETyBMT0dPVVQg cmVjZWl2ZWQgKi8KKworICAgICAgICAgICAgICAgICAgICB9CisjZWxzZSAvKiBJS1NfT1BUSU9O ICovCisgICAgICAgICAgICAgICAgICAgIC8qIEhhbmRsZXMgVGVsbmV0IG5lZ290aWF0aW9ucyAq LworICAgICAgICAgICAgICAgICAgICB0eCA9IHNjcmlwdHdydGJ1ZigoVVNIT1JUKXkpOworICAg ICAgICAgICAgICAgICAgICBpZiAodHggPT0gNikgeworICAgICAgICAgICAgICAgICAgICAgICAg LyogVEVMTkVUIERPIExPR09VVCByZWNlaXZlZCAqLworICAgICAgICAgICAgICAgICAgICB9Cisj ZW5kaWYgLyogSUtTX09QVElPTiAqLworICAgICAgICAgICAgICAgICAgICB3YWl0aW5nIC09IDI7 ICAgICAgIC8qIChub3QgbmVjZXNzYXJpbHkuLi4pICovCisgICAgICAgICAgICAgICAgICAgIGNy ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7ICAgICAgICAgICAvKiBhbmQgYXV0 b2Rvd25sb2FkIGNoZWNrICovCisgICAgICAgICAgICAgICAgICBjYXNlIENSOgorICAgICAgICAg ICAgICAgICAgICBjciA9IDE7CisgICAgICAgICAgICAgICAgICAgIHR4ID0gc2NyaXB0d3J0YnVm KChVU0hPUlQpeSk7CisgICAgICAgICAgICAgICAgICAgIGlmICh0eCA9PSA2KSB7CisgICAgICAg ICAgICAgICAgICAgICAgICAvKiBURUxORVQgRE8gTE9HT1VUIHJlY2VpdmVkICovCisgICAgICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg ICAgICBjYXNlIE5VTDoKKyAgICAgICAgICAgICAgICAgICAgY3IgPSAwOworICAgICAgICAgICAg ICAgICAgICBpZiAoIVRFTE9QVF9VKFRFTE9QVF9CSU5BUlkpICYmIGNyKQorICAgICAgICAgICAg ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICB0eCA9IHNjcmlwdHdydGJ1 ZigoVVNIT1JUKXkpOworICAgICAgICAgICAgICAgICAgICBpZiAodHggPT0gNikgeworICAgICAg ICAgICAgICAgICAgICAgICAgLyogVEVMTkVUIERPIExPR09VVCByZWNlaXZlZCAqLworICAgICAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgY3IgPSAwOworICAgICAgICAgICAg ICAgICAgICB0eCA9IHNjcmlwdHdydGJ1ZigoVVNIT1JUKXkpOworICAgICAgICAgICAgICAgICAg ICBpZiAodHggPT0gNikgeworICAgICAgICAgICAgICAgICAgICAgICAgLyogVEVMTkVUIERPIExP R09VVCByZWNlaXZlZCAqLworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg fQorICAgICAgICAgICAgICAgIC8qIEknbSBlY2hvaW5nIHJlbW90ZSBjaGFycyAqLworICAgICAg ICAgICAgICAgIGlmIChURUxPUFRfTUUoVEVMT1BUX0VDSE8pICYmIHRuX3JlbV9lY2hvKQorICAg ICAgICAgICAgICAgICAgdHRvYygoQ0hBUil5KTsKKyAgICAgICAgICAgIH0gZWxzZQorI2VuZGlm IC8qIFROQ09ERSAqLworICAgICAgICAgICAgICAvKiBIYW5kbGVzIHRlcm1pbmFsIGVtdWxhdGlv biByZXNwb25zZXMgKi8KKyAgICAgICAgICAgICAgc2NyaXB0d3J0YnVmKChVU0hPUlQpeSk7Cisj ZW5kaWYgLyogVE5fTk9MTyAqLworCisgICAgICAgICAgICAvKiBSZWFsIGlucHV0IGNoYXJhY3Rl ciB0byBiZSBjaGVja2VkICovCisKKyNpZmRlZiBDS19CVVJTVAorICAgICAgICAgICAgYnVyc3Qt LTsgICAgICAgICAgICAgICAgICAgIC8qIE9uZSBsZXNzIGNoYXJhY3RlciB3YWl0aW5nICovCisg ICAgICAgICAgICBkZWJ1ZyhGMTAxLCJkb2lucHV0IGJ1cnN0IiwiIixidXJzdCk7CisjZW5kaWYg LyogQ0tfQlVSU1QgKi8KKyAgICAgICAgICAgIGMgPSAoQ0hBUikgKGltYXNrICYgKENIQVIpIHkp OyAvKiBNYXNrIG9mZiBhbnkgcGFyaXR5ICovCisgICAgICAgICAgICBpbmNoYXJbMF0gPSBjOyAg ICAgICAgICAgICAgLyogUmVtZW1iZXIgY2hhcmFjdGVyIGZvciBcdihpbmNoYXIpICovCisjaWZk ZWYgQ09NTUVOVAorI2lmZGVmIENLX0JVUlNUCisgICAgICAgICAgICAvKiBVcGRhdGUgImxhc3Rj aGFyIiB0aW1lIG9ubHkgb25jZSBkdXJpbmcgaW5wdXQgYnVyc3QgKi8KKyAgICAgICAgICAgIGlm IChidXJzdCA8PSAwKQorI2VuZGlmIC8qIENLX0JVUlNUICovCisjZW5kaWYgLyogQ09NTUVOVCAq LworICAgICAgICAgICAgICBsYXN0Y2hhciA9IGd0aW1lcigpOyAgICAgIC8qIFJlbWVtYmVyIHdo ZW4gaXQgY2FtZSAqLworCisgICAgICAgICAgICBpZiAoYyA9PSAnXDAnKSB7ICAgICAgICAgICAg LyogTlVMLCB3ZSBjYW4ndCB1c2UgaXQgKi8KKyAgICAgICAgICAgICAgICBpZiAoYW55Y2hhcikg eyAgICAgICAgICAvKiBFeGNlcHQgaWYgYW55IGNoYXJhY3RlciB3aWxsIGRvPyAqLworICAgICAg ICAgICAgICAgICAgICB4ID0gMTsgICAgICAgICAgICAgIC8qIFllcywgZG9uZS4gKi8KKwkJICAg IGluc3RhdHVzID0gSU5QX09LOworICAgICAgICAgICAgICAgICAgICBpbmNvdW50ID0gMTsgICAg ICAgIC8qIFRoaXMgbXVzdCBiZSB0aGUgZmlyc3QgYW5kIG9ubHkuICovCisgICAgICAgICAgICAg ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0gZWxzZSBnb3RvIHJlZmlsbDsJLyogT3Ro ZXJ3aXNlIGNvbnRpbnVlIElOUFVUdGluZyAqLworICAgICAgICAgICAgfQorICAgICAgICAgICAg KmlucGJwKysgPSBjOyAgICAgICAgICAgICAgIC8qIFN0b3JlIGNoYXIgaW4gY2lyY3VsYXIgYnVm ZmVyICovCisgICAgICAgICAgICBpbmNvdW50Kys7ICAgICAgICAgICAgICAgICAgLyogQ291bnQg aXQgZm9yIFx2KGluY291bnQpICovCisKKwkgICAgaWYgKGZsYWdzICYgSU5QU1dfQ09VKSB7CS8q IElOUFVUIC9DT1VOVCAqLworCQlpZiAoLS1jb3VudCA8IDEpIHsKKwkJICAgIHggPSAxOworCQkg ICAgaW5zdGF0dXMgPSBJTlBfT0s7CisgICAgICAgICAgICAgICAgICAgIGluY291bnQgPSBzYXZl Y291bnQ7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCQl9CisJICAgIH0KKyAgICAgICAg ICAgIGlmIChtYXRjaGJ1ZikgeworICAgICAgICAgICAgICAgIGlmIChtYXRjaGluZGV4IDwgTUFU Q0hCVUZTSVopIHsKKyAgICAgICAgICAgICAgICAgICAgbWF0Y2hidWZbbWF0Y2hpbmRleCsrXSA9 IGM7CisgICAgICAgICAgICAgICAgICAgIG1hdGNoYnVmW21hdGNoaW5kZXhdID0gTlVMOworICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyNpZmRlZiBNQUMKKyAgICAgICAgICAgIHsK KyAgICAgICAgICAgICAgICBleHRlcm4gY2hhciAqdHRlcm13OyAgICAvKiBmYWtlIHBvaW50ZXIg Y2FzdCAqLworICAgICAgICAgICAgICAgIGlmIChpbmVjaG8pIHsKKyAgICAgICAgICAgICAgICAg ICAgb3V0Y2hhcih0dGVybXcsIGMpOyAvKiBlY2hvIHRvIHRlcm1pbmFsIHdpbmRvdyAqLworICAg ICAgICAgICAgICAgICAgICAvKiB0aGlzIG1pZ2h0IGJlIHRvbyBtdWNoIG92ZXJoZWFkIHRvIGRv IGhlcmUgPyAqLworICAgICAgICAgICAgICAgICAgICB1cGRhdGVjb21tYW5kKHR0ZXJtdyk7Cisg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorI2Vsc2UgLyogTm90IE1BQyAqLworICAg ICAgICAgICAgaWYgKGluZWNobykgeyAgICAgICAgICAgICAgIC8qIEJ1ZmZlciBjb25zb2xlIG91 dHB1dCAqLworICAgICAgICAgICAgICAgIGNvbmJ1Zltjb25jbnQrK10gPSBjOworICAgICAgICAg ICAgfQorI2VuZGlmIC8qIE1BQyAqLworI2lmbmRlZiBPUzIKKyAgICAgICAgICAgIGlmIChzZXNs b2cpIHsKKwkJaW50IGR1bW15ID0gMCwgc2tpcCA9IDA7CisjaWZuZGVmIE5PTE9DQUwKKwkJaWYg KG5vZXNjc2VxKSB7CisJCSAgICBkdW1teSA9IGNoa2FlcyhjLDApOworCQkgICAgaWYgKGluZXNj WzBdICE9IEVTX05PUk1BTCB8fCBvbGRlc2NbMF0gIT0gRVNfTk9STUFMKQorCQkgICAgICBza2lw ID0gMTsKKwkJfQorI2VuZGlmCS8qIE5PTE9DQUwgKi8KKyNpZmRlZiBVTklYT1JPU0sKKwkJaWYg KHNlc3NmdCA9PSBYWUZUX1QpIHsKKyNpZmRlZiBVTklYCisJCSAgICBpZiAoYyA9PSAnXHInKQor I2Vsc2UKKyNpZmRlZiBPU0sKKwkJICAgIGlmIChjID09ICdcMDEyJykKKyNlbmRpZiAvKiBPU0sg Ki8KKyNlbmRpZiAvKiBVTklYICovCisJCSAgICAgIHNraXAgPSAxOworCQl9CisjZW5kaWYJLyog VU5JWE9ST1NLICovCisJCWlmICghc2tpcCkKKyAgICAgICAgICAgICAgICAgIHNlc2J1ZltzZXNj bnQrK10gPSBjOyAvKiBCdWZmZXIgc2Vzc2lvbiBsb2cgb3V0cHV0ICovCisgICAgICAgICAgICB9 CisjZW5kaWYgLyogT1MyICovCisgICAgICAgICAgICBpZiAoYW55Y2hhcikgeyAgICAgICAgICAg ICAgLyogQW55IGNoYXJhY3RlciB3aWxsIGRvPyAqLworICAgICAgICAgICAgICAgIHggPSAxOwor CQlpbnN0YXR1cyA9IElOUF9PSzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg IH0KKyAgICAgICAgICAgIGlmICghaW5wY2FzW2NtZGx2bF0pIHsgICAgICAvKiBJZ25vcmUgYWxw aGFiZXRpYyBjYXNlPyAqLworICAgICAgICAgICAgICAgIGlmIChpc3VwcGVyKGMpKSAgICAgICAg IC8qIFllcywgY29udmVydCBpbnB1dCBjaGFyIHRvIGxvd2VyICovCisgICAgICAgICAgICAgICAg ICBjID0gKENIQVIpIHRvbG93ZXIoYyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWJ1 ZyhGMDAwLCJkb2lucHV0IGNoYXIiLCIiLGMpOworCisgICAgICAgICAgICAvKiBIZXJlIGlzIHRo ZSBtYXRjaGluZyBzZWN0aW9uICovCisKKyAgICAgICAgICAgIHkgPSAtMTsgICAgICAgICAgICAg ICAgICAgICAvKiBMb29wIHRocnUgc2VhcmNoIHN0cmluZ3MgKi8KKyAgICAgICAgICAgIHdoaWxl ICghbm9tYXRjaCAmJiAocyA9IG1zWysreV0pKSB7CS8qIC4uLmFzIG1hbnkgYXMgd2UgaGF2ZS4g Ki8KKyAgICAgICAgICAgICAgICBpZiAobXBbeV0pIHsgICAgICAgICAgICAvKiBQYXR0ZXJuIG1h dGNoPyAqLworI2lmZGVmIENPTU1FTlQKKyAgICAgICAgICAgICAgICAgICAgaW50IGo7CisgICAg ICAgICAgICAgICAgICAgIC8qIFRoaXMgaXMgZ3Jvc3MgYnV0IGl0IHdvcmtzLi4uICovCisgICAg ICAgICAgICAgICAgICAgIC8qIFdlIGNvdWxkIGp1c3QgYXMgZWFzaWx5IGhhdmUgcHJlcGVuZGVk ICcqJyB0byB0aGUgICovCisgICAgICAgICAgICAgICAgICAgIC8qIHBhdHRlcm4gYW5kIHNraXBw ZWQgdGhlIGxvb3AsIGV4Y2VwdCB0aGVuIHdlIHdvdWxkICovCisgICAgICAgICAgICAgICAgICAg IC8qIG5vdCBoYXZlIGFueSB3YXkgdG8gaWRlbnRpZnkgdGhlIG1hdGNoaW5nIHN0cmluZy4gICov CisgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBtYXRjaGluZGV4OyBqKyspIHsK KyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChja21hdGNoKHMsJm1hdGNoYnVmW2pdLDEsMSkp IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGluZGV4ID0gajsKKwkJCSAgICBp bnN0YXR1cyA9IElOUF9PSzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ID0gMTsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoeCA+IDAp CisgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisjZWxzZQorICAgICAgICAgICAgICAgICAg ICAvKiBKdWx5IDIwMDEgLSBja21hdGNoKCkgcmV0dXJucyBtYXRjaCBwb3NpdGlvbi4gKi8KKyAg ICAgICAgICAgICAgICAgICAgLyogSXQgd29ya3MgYW5kIGl0J3Mgbm90IGdyb3NzLiAqLworCQkg ICAgLyogKDQgPSBmbG9hdGluZyBwYXR0ZXJuKSAqLworICAgICAgICAgICAgICAgICAgICB4ID0g Y2ttYXRjaChzLG1hdGNoYnVmLGlucGNhc1tjbWRsdmxdLDErNCk7CisgICAgICAgICAgICAgICAg ICAgIGlmICh4ID4gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hpbmRleCA9IHgg LSAxOworCQkJaW5zdGF0dXMgPSBJTlBfT0s7CisgICAgICAgICAgICAgICAgICAgICAgICB4ID0g MTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9 CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg ICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAvKiBMaXRlcmFsIG1hdGNoLiAq LworICAgICAgICAgICAgICAgIGkgPSBtaVt5XTsgICAgICAgICAgICAgIC8qIE1hdGNoLXBvc2l0 aW9uIGluIHNlYXJjaCBzdHJpbmcuICovCisgICAgICAgICAgICAgICAgZGVidWcoRjAwMCwiY29t cGFyZSBjaGFyIiwiIiwoQ0hBUilzW2ldKTsKKyAgICAgICAgICAgICAgICBpZiAoYyA9PSAoQ0hB Uikgc1tpXSkgeyAvKiBDaGVjayBmb3IgbWF0Y2ggKi8KKyAgICAgICAgICAgICAgICAgICAgaSsr OyAgICAgICAgICAgICAgICAvKiBHb3Qgb25lLCBnbyB0byBuZXh0IGNoYXJhY3RlciAqLworICAg ICAgICAgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgIC8qIERvbid0IGhhdmUgYSBtYXRj aCAqLworICAgICAgICAgICAgICAgICAgICBpbnQgajsKKyAgICAgICAgICAgICAgICAgICAgZm9y IChqID0gaTsgaSA+IDA7ICkgeyAvKiBCYWNrIHVwIGluIHNlYXJjaCBzdHJpbmcgKi8KKyAgICAg ICAgICAgICAgICAgICAgICAgIGktLTsgLyogKERvIHRoaXMgaGVyZSB0byBwcmV2ZW50IGNvbXBp bGVyIGZvdWx1cCkgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGogaXMgdGhlIGxlbmd0 aCBvZiB0aGUgc3Vic3RyaW5nIHRoYXQgbWF0Y2hlZCAqLworICAgICAgICAgICAgICAgICAgICAg ICAgaWYgKGMgPT0gKENIQVIpIHNbaV0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBp ZiAoIXN0cm5jbXAocywmc1tqLWldLGkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGkrKzsgICAgICAgICAgLyogYyBhY3R1YWxseSBtYXRjaGVzIC0tIGNmayAqLworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKChDSEFSKSBzW2ldID09IChD SEFSKSAnXDAnKSB7IC8qIE1hdGNoZWQgdG8gZW5kPyAqLworICAgICAgICAgICAgICAgICAgICBj a3N0cm5jcHkobWF0Y2hidWYsbXNbeV0sTUFUQ0hCVUZTSVopOworICAgICAgICAgICAgICAgICAg ICBtYXRjaGluZGV4ID0gMDsKKwkJICAgIGluc3RhdHVzID0gSU5QX09LOyAgLyogWWVzLCAqLwor ICAgICAgICAgICAgICAgICAgICB4ID0gMTsgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAg ICAgYnJlYWs7ICAgICAgICAgICAgICAvKiBkb25lLiAqLworICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgICBtaVt5XSA9IGk7ICAgICAgICAgICAgICAvKiBObywgcmVtZW1iZXIgbWF0 Y2gtcG9zaXRpb24gKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh4ID09IDEpIHsg ICAgICAgICAgICAgICAvKiBTZXQgXHYobWlucHV0KSByZXN1bHQgKi8KKwkJaW5zdGF0dXMgPSBJ TlBfT0s7CisgICAgICAgICAgICAgICAgbV9mb3VuZCA9IHkgKyAxOworICAgICAgICAgICAgICAg IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGlucGJwID49IGlucGJ1ZiAr IGluYnVmc2l6ZSkgeyAvKiBSZWFjaGVkIGVuZCBvZiBidWZmZXI/ICovCisJCWlmIChub3dyYXAp IHsJCS8qIElmIC9OT1dSQVAuLi4qLworCQkgICAgaW5zdGF0dXMgPSBJTlBfQkY7CS8qIC4uLnJl dHVybiBpbmRpY2F0aW5nIGJ1ZmZlciBmdWxsLiAqLworCQkgICAgKmlucGJwID0gTlVMOworCQkg ICAgZ290byB4aW5wdXQ7CisJCX0KKyAgICAgICAgICAgICAgICAqaW5wYnAgPSBOVUw7ICAgICAg ICAgICAvKiBNYWtlIGl0IG51bGwtdGVybWluYXRlZCAqLworICAgICAgICAgICAgICAgIGlucGJw ID0gaW5wYnVmOyAgICAgICAgIC8qIFllcy4gKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor I2lmZGVmIENLX0JVUlNUCisgICAgICAgIGVsc2UgaWYgKHkgPD0gLTEgJiYgYnVyc3QgPiAwKSB7 CisgICAgICAgICAgICBkZWJ1ZyhGMTExLCJkb2lucHV0ICh5PD0tMSYmYnVyc3Q+MCkiLCJidXJz dCIsYnVyc3QpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEEg dGltZW91dCBvY2N1cnJlZCBzbyB0aGVyZSBjYW4ndCAqLworICAgICAgICAgICAgYnVyc3QgPSAw OyAgICAgICAgICAgICAgICAgIC8qIGJlIGRhdGEgd2FpdGluZzsgbXVzdCBjaGVjayB0aW1vICov CisgICAgICAgIH0KKyAgICAgIHJlZmlsbDoKKyAgICAgICAgaWYgKGJ1cnN0IDw9IDApIHsgICAg ICAgICAgICAgICAvKiBObyBidWZmZXJlZCBjaGFycyByZW1haW5pbmcuLi4gKi8KKyAgICAgICAg ICAgIG15ZmxzaCgpOyAgICAgICAgICAgICAgICAgICAvKiBGbHVzaCBidWZmZXJlZCBvdXRwdXQg Ki8KKyAgICAgICAgICAgIGlmIChsb2NhbCkgeyAgICAgICAgICAgICAgICAvKiBHZXQgc2l6ZSBv ZiBuZXh0IGlucHV0IGJ1cnN0ICovCisgICAgICAgICAgICAgICAgYnVyc3QgPSB0dGNoaygpOwor ICAgICAgICAgICAgICAgIGlmIChidXJzdCA8IDApIHsgICAgICAgIC8qIHR0Y2hrKCkgc2F5cyBj b25uZWN0aW9uIGlzIGNsb3NlZCAqLworICAgICAgICAgICAgICAgICAgICBpbnN0YXR1cyA9IElO UF9JTzsgIC8qIFN0YXR1cyA9IGkvbyBlcnJvciAqLworI2lmbmRlZiBOT0xPQ0FMCisjaWZkZWYg T1MyCisgICAgICAgICAgICAgICAgICAgIHRlcm1faW8gPSB0ZXJtX2lvX3NhdmU7CisjZW5kaWYg LyogT1MyICovCisjZW5kaWYgLyogTk9MT0NBTCAqLworCisJCSAgICBpZiAoKCFuZXR3b3JrIAor I2lmZGVmIFROX0NPTVBPUlQKKwkJICAgICAgICAgfHwgaXN0bmNvbXBvcnQoKQorI2VuZGlmIC8q IFROX0NPTVBPUlQgKi8KKwkJCSApICYmIGNhcnJpZXIgIT0gQ0FSX09GRikgeworCS8qIFRoZSB0 ZXN0IGlzIHdyaXR0ZW4gdGhpcyB3YXkgYmVjYXVzZSB0aGUgTWljcm9zb2Z0IGNvbXBpbGVyCisJ ICogaXMgcHJvZHVjaW5nIGJhZCBjb2RlIGlmIHdyaXR0ZW46CisJICoKKwkgKiAgaWYgKG5ldHdv cmsgJiYgKCFpc3RuY29tcG9ydCgpIHx8IGNhcnJpZXIgPT0gQ0FSX09GRikgKQorCSAqLworCQkJ YnJlYWs7CisgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworCQkJIHByaW50ZigiRmF0YWwg ZXJyb3IgLSBkaXNjb25uZWN0ZWQuXG4iKTsKKwkJCSB0dGNsb3MoMSk7CisJCQkgYnJlYWs7CisJ CSAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoaW5pbnRyKSB7 CisgICAgICAgICAgICAgICAgICAgIGlmICgoaWNuID0gY29uY2hrKCkpID4gMCkgeyAvKiBJbnRl cnJ1cHQgZnJvbSBrZXlib2FyZD8gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGtiY2hhciA9 IGNvbmluYygwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsImlucHV0IGlu dGVycnVwdGVkIGZyb20ga2V5Ym9hcmQiLCIiLGljbik7CisgICAgICAgICAgICAgICAgICAgICAg ICB3aGlsZSAoLS1pY24gPiAwKSBjb25pbmMoMCk7IC8qIFllcywgYWJzb3JiIGNoYXJzLiAqLwor ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgIC8qIEFuZCBmYWlsLiAqLwor ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBl bHNlIHsKKyAgICAgICAgICAgICAgICBidXJzdCA9IGNvbmNoaygpOworICAgICAgICAgICAgfQor ICAgICAgICAgICAgZGVidWcoRjEwMSwiZG9pbnB1dCBidXJzdCIsIiIsYnVyc3QpOworICAgICAg ICAgICAgLyogUHJldmVudCBvdmVyZmxvdyBvZiAiY29uYnVmIiBhbmQgInNlc2J1ZiIgKi8KKyAg ICAgICAgICAgIGlmIChidXJzdCA+IE1BWEJVUlNUKQorICAgICAgICAgICAgICBidXJzdCA9IE1B WEJVUlNUOworCisgICAgICAgICAgICAvKiBEaWQgbm90IG1hdGNoLCB0aW1lciBleGNlZWRlZD8g Ki8KKyAgICAgICAgICAgIHQgPSBndGltZXIoKTsKKyAgICAgICAgICAgIGRlYnVnKEYxMTEsImRv aW5wdXQgZ3RpbWVyIiwiYnVyc3QiLHQpOworICAgICAgICAgICAgZGVidWcoRjEwMSwiZG9pbnB1 dCB0aW1vIiwiIix0aW1vKTsKKyAgICAgICAgICAgIGlmICgodCA+PSB0aW1vKSAmJiAodGltbyA+ IDApKQorICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGVsc2UgaWYgKGluc2lsZW5j ZSA+IDAgJiYgKHQgLSBsYXN0Y2hhcikgPiBpbnNpbGVuY2UpCisgICAgICAgICAgICAgIGJyZWFr OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZGVidWcoRjExMSwiZG9pbnB1dCAoYnVy c3QgPiAwKSIsImJ1cnN0IixidXJzdCk7CisgICAgICAgIH0KKyNlbHNlICAvKiBDS19CVVJTVCAq LworICAgICAgcmVmaWxsOgorICAgICAgICBteWZsc2goKTsgICAgICAgICAgICAgICAgICAgICAg IC8qIEZsdXNoIGJ1ZmZlcmVkIG91dHB1dCAqLworICAgICAgICAvKiBEaWQgbm90IG1hdGNoLCB0 aW1lciBleGNlZWRlZD8gKi8KKyAgICAgICAgdCA9IGd0aW1lcigpOworICAgICAgICBkZWJ1ZyhG MTExLCJkb2lucHV0IGd0aW1lciIsIm5vIGJ1cnN0Iix0KTsKKyAgICAgICAgZGVidWcoRjEwMSwi ZG9pbnB1dCB0aW1vIiwiIix0aW1vKTsKKyAgICAgICAgaWYgKCh0ID49IHRpbW8pICYmICh0aW1v ID4gLTEpKQorICAgICAgICAgIGJyZWFrOworICAgICAgICBlbHNlIGlmIChpbnNpbGVuY2UgPiAw ICYmICh0IC0gbGFzdGNoYXIpID4gaW5zaWxlbmNlKQorICAgICAgICAgIGJyZWFrOworI2VuZGlm IC8qIENLX0JVUlNUICovCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogU3RpbGwgaGF2ZSB0aW1lIGxlZnQsIGNvbnRpbnVlLiAqLworICB4aW5wdXQ6CisgICAgbXlm bHNoKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRmx1c2ggYnVmZmVyZWQgb3V0cHV0 ICovCisgICAgaWYgKGluc3RhdHVzID09IElOUF9CRikgewkJLyogQnVmZmVyIGZ1bGwgYW5kIC9O T1dBSVQgKi8KKwl4ID0gMDsJCQkJLyogTXVzdCBub3Qgc3VjY2VlZCAqLworICAgIH0gZWxzZSB7 CQkJCS8qIEJ1ZmZlciBmdWxsIGFuZCAvTk9XQUlUICovCisJaWYgKG5vbWF0Y2gpIHggPSAxOwkJ LyogU3VjY2VlZCBpZiBub21hdGNoIGFuZCB0aW1lZCBvdXQgKi8KKwlpZiAoeCA+IDAgJiYgIW5v bWF0Y2gpCisJICBpbnN0YXR1cyA9IDA7CisgICAgfQorI2lmbmRlZiBOT0xPQ0FMCisjaWZkZWYg T1MyCisgICAgdGVybV9pbyA9IHRlcm1faW9fc2F2ZTsKKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRp ZiAvKiBOT0xPQ0FMICovCisjaWZkZWYgQ09NTUVOVAorI2lmZGVmIElLU19PUFRJT04KKyNpZmRl ZiBDS19BVVRPREwKKyAgICBpZiAoaXNfdG4gJiYgVEVMT1BUX01FKFRFTE9QVF9LRVJNSVQpICYm IGluYXV0b2RsKSB7CisgICAgICAgIHRuX3Npa3MoS0VSTUlUX1NUT1ApOyAgICAgICAgICAgLyog U2VuZCBLZXJtaXQtU2VydmVyIFN0b3AgKi8KKyAgICB9CisjZW5kaWYgLyogQ0tfQVVUT0RMICov CisjZW5kaWYgLyogSUtTX09QVElPTiAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKworI2lmZGVm IEdGVElNRVIKKyAgICBmcHQgPSBnZnRpbWVyKCk7ICAgICAgICAgICAgICAgICAgICAvKiBHZXQg ZWxhcHNlZCB0aW1lICovCisKKy8qIElmIGEgbG9uZyBpcyAzMiBiaXRzLCBpdCB3b3VsZCB0YWtl IGFib3V0IDUwIGRheXMgZm9yIHRoaXMgdG8gb3ZlcmZsb3cuICovCisKKyAgICBpbmV0aW1lID0g KGludCkoZnB0ICogKENLRkxPQVQpMTAwMC4wKTsKKyNlbHNlCisgICAgaW5ldGltZSA9IChpbnQp KGd0aW1lcigpICogMTAwMCk7CisjZW5kaWYgLyogR0ZUSU1FUiAqLworCisgICAgaWYgKHggPiAw KQorICAgICAgbWFrZXN0cigmaW5wbWF0Y2gsJm1hdGNoYnVmW21hdGNoaW5kZXhdKTsgLyogXHYo aW5tYXRjaCkgKi8KKyAgICByZXR1cm4oeCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBS ZXR1cm4gdGhlIHJldHVybiBjb2RlLiAqLworfQorI2VuZGlmIC8qIE5PU1BMICovCisKKyNpZm5k ZWYgTk9TUEwKKy8qIFJFSU5QVVQgQ29tbWFuZCAqLworCisvKgorICBOb3RlLCB0aGUgdGltZW91 dCBwYXJhbWV0ZXIgaXMgcmVxdWlyZWQsIGJ1dCBpZ25vcmVkLiAgU3ludGF4IGlzIGNvbXBhdGli bGUKKyAgd2l0aCBNUy1ET1MgS2VybWl0IGV4Y2VwdCB0aW1lb3V0IGNhbid0IGJlIG9taXR0ZWQu ICBUaGlzIGZ1bmN0aW9uIG9ubHkKKyAgbG9va3MgYXQgdGhlIGNoYXJhY3RlcnMgYWxyZWFkeSBy ZWNlaXZlZCBhbmQgZG9lcyBub3QgcmVhZCBhbnkgbmV3CisgIGNoYXJhY3RlcnMgZnJvbSB0aGUg Y29ubmVjdGlvbi4KKyovCitpbnQKK2RvcmVpbnAodGltbyxzLHBhdCkgaW50IHRpbW87IGNoYXIg KnM7IGludCBwYXQ7IHsKKyAgICBpbnQgeCwgeSwgaTsKKyAgICBjaGFyICp4eCwgKnhwLCAqeHEg PSAoY2hhciAqKTA7CisgICAgQ0hBUiBjOworCisgICAgaWYgKCFzKSBzID0gIiI7CisgICAgZGVi dWcoRjEwMSwiZG9yZWlucHV0IHBhdCIsIiIscGF0KTsKKworICAgIHkgPSAoaW50KXN0cmxlbihz KTsKKyAgICBkZWJ1ZyhGMTExLCJkb3JlaW5wdXQgc2VhcmNoIixzLHkpOworCisgICAgaWYgKHkg PiBpbmJ1ZnNpemUpIHsgICAgICAgICAgICAgICAgLyogSWYgc2VhcmNoIHN0cmluZyBsb25nZXIg dGhhbiAqLworICAgICAgICBkZWJ1ZyhGMTAxLCJkb3JlaW5wdXQgaW5idWZzaXplIiwiIixpbmJ1 ZnNpemUpOworICAgICAgICByZXR1cm4oMCk7ICAgICAgICAgICAgICAgICAgICAgIC8qIGlucHV0 IGJ1ZmZlciwgZmFpbC4gKi8KKyAgICB9CisgICAgbWFrZXN0cigmaW5wbWF0Y2gsTlVMTCk7Cisg ICAgaWYgKCFtYXRjaGJ1ZikKKyAgICAgIG1hdGNoYnVmID0gbWFsbG9jKE1BVENIQlVGU0laKzEp OworICAgIG1hdGNoaW5kZXggPSAwOworCisgICAgeCA9IDA7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogUmV0dXJuIGNvZGUsIGFzc3VtZSBmYWlsdXJlICovCisgICAgaSA9IDA7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU3RyaW5nIHBhdHRlcm4gbWF0Y2ggcG9zaXRp b24gKi8KKworICAgIGlmICghaW5wY2FzW2NtZGx2bF0pIHsgICAgICAgICAgICAgIC8qIElOUFVU IENBU0UgPSBJR05PUkU/ICAqLworICAgICAgICB4cCA9IG1hbGxvYyh5KzIpOyAgICAgICAgICAg ICAgIC8qIE1ha2UgYSBzZXBhcmF0ZSBjb3B5IG9mIHRoZSAqLworICAgICAgICBpZiAoIXhwKSB7 ICAgICAgICAgICAgICAgICAgICAgIC8qIHNlYXJjaCBzdHJpbmcuICovCisgICAgICAgICAgICBw cmludGYoIj9tYWxsb2MgZXJyb3IgNlxuIik7CisgICAgICAgICAgICByZXR1cm4oeCk7CisgICAg ICAgIH0gZWxzZSB4cSA9IHhwOyAgICAgICAgICAgICAgICAgLyogS2VlcCBwb2ludGVyIHRvIGJl Z2lubmluZy4gKi8KKyAgICAgICAgd2hpbGUgKCpzKSB7ICAgICAgICAgICAgICAgICAgICAvKiBZ ZXMsIGNvbnZlcnQgdG8gbG93ZXJjYXNlICovCisgICAgICAgICAgICAqeHAgPSAqczsKKyAgICAg ICAgICAgIGlmIChpc3VwcGVyKCp4cCkpICp4cCA9IChjaGFyKSB0b2xvd2VyKCp4cCk7CisgICAg ICAgICAgICB4cCsrOyBzKys7CisgICAgICAgIH0KKyAgICAgICAgKnhwID0gTlVMOyAgICAgICAg ICAgICAgICAgICAgICAvKiBUZXJtaW5hdGUgaXQhICovCisgICAgICAgIHMgPSB4cTsgICAgICAg ICAgICAgICAgICAgICAgICAgLyogTW92ZSBzZWFyY2ggcG9pbnRlciB0byBpdC4gKi8KKyAgICB9 CisgICAgeHggPSAqaW5wYnAgPyBpbnBicCA6IGlucGJ1ZjsgICAgICAgLyogQ3VycmVudCBJTlBV VCBidWZmZXIgcG9pbnRlciAqLworICAgIGRvIHsKKyAgICAgICAgYyA9ICp4eCsrOyAgICAgICAg ICAgICAgICAgICAgICAvKiBHZXQgbmV4dCBjaGFyYWN0ZXIgKi8KKyAgICAgICAgaWYgKCFjKSBi cmVhazsKKyAgICAgICAgaWYgKHh4ID49IGlucGJ1ZiArIGluYnVmc2l6ZSkgICAvKiBXcmFwIGFy b3VuZCBpZiBuZWNlc3NhcnkgKi8KKyAgICAgICAgICB4eCA9IGlucGJ1ZjsKKyAgICAgICAgaWYg KCFpbnBjYXNbY21kbHZsXSkgeyAgICAgICAgICAvKiBJZ25vcmUgYWxwaGFiZXRpYyBjYXNlPyAq LworICAgICAgICAgICAgaWYgKGlzdXBwZXIoYykpIGMgPSAoQ0hBUikgdG9sb3dlcihjKTsgLyog WWVzICovCisgICAgICAgIH0KKyAgICAgICAgaWYgKHBhdCkgeworICAgICAgICAgICAgaW50IGo7 CisgICAgICAgICAgICBpZiAobWF0Y2hidWYpIHsKKyAgICAgICAgICAgICAgICBpZiAobWF0Y2hp bmRleCA8IE1BVENIQlVGU0laKSB7CisgICAgICAgICAgICAgICAgICAgIG1hdGNoYnVmW21hdGNo aW5kZXgrK10gPSBjOworICAgICAgICAgICAgICAgICAgICBtYXRjaGJ1ZlttYXRjaGluZGV4XSA9 IE5VTDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8 IG1hdGNoaW5kZXg7IGorKykgeyAvKiBHcm9zcyBidXQgZWZmZWN0aXZlICovCisgICAgICAgICAg ICAgICAgICAgIGlmIChja21hdGNoKHMsJm1hdGNoYnVmW2pdLDEsMSkpIHsKKyAgICAgICAgICAg ICAgICAgICAgICAgIGRlYnVnKEYxMDEsIkdPVCBJVCIsIiIsaik7CisgICAgICAgICAgICAgICAg ICAgICAgICBtYXRjaGluZGV4ID0gajsKKyAgICAgICAgICAgICAgICAgICAgICAgIHggPSAxOwor ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoeCA+IDApCisg ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAg ICAgICAgZGVidWcoRjAwMCwiZG9yZWlucCBjaGFyIiwiIixjKTsKKyAgICAgICAgZGVidWcoRjAw MCwiY29tcGFyZSBjaGFyIiwiIiwoQ0hBUikgc1tpXSk7CisgICAgICAgIGlmICgoKGNoYXIpIGMp ID09ICgoY2hhcikgc1tpXSkpIHsgLyogQ2hlY2sgZm9yIG1hdGNoICovCisgICAgICAgICAgICBp Kys7ICAgICAgICAgICAgICAgICAgICAgICAgLyogR290IG9uZSwgZ28gdG8gbmV4dCBjaGFyYWN0 ZXIgKi8KKyAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBEb24ndCBo YXZlIGEgbWF0Y2ggKi8KKyAgICAgICAgICAgIGludCBqOworICAgICAgICAgICAgZm9yIChqID0g aTsgaSA+IDA7ICkgeyAgICAgIC8qIFtqcnNdIHNlYXJjaCBiYWNrd2FyZHMgZm9yIGl0ICAqLwor ICAgICAgICAgICAgICAgIGktLTsKKyAgICAgICAgICAgICAgICBpZiAoKChjaGFyKSBjKSA9PSAo KGNoYXIpIHNbaV0pKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghc3RybmNtcChzLCZzW2ot aV0saSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICAgICAgICAg ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgfQorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IFtqcnNdIG9yIHJldHVybiB0byB6ZXJvIGZyb20gLTEgKi8KKyAgICAgICAgaWYgKHNbaV0gPT0g J1wwJykgeyAgICAgICAgICAgICAvKiBNYXRjaGVkIGFsbCB0aGUgd2F5IHRvIGVuZD8gKi8KKyAg ICAgICAgICAgIGNrc3RybmNweShtYXRjaGJ1ZixzLE1BVENIQlVGU0laKTsKKyAgICAgICAgICAg IG1hdGNoaW5kZXggPSAwOworICAgICAgICAgICAgeCA9IDE7ICAgICAgICAgICAgICAgICAgICAg IC8qIFllcywgKi8KKyAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAvKiBk b25lLiAqLworICAgICAgICB9CisgICAgfSB3aGlsZSAoeHggIT0gaW5wYnAgJiYgeCA8IDEpOyAg ICAgLyogVW50aWwgYmFjayB3aGVyZSB3ZSBzdGFydGVkLiAqLworCisgICAgaWYgKCFpbnBjYXNb Y21kbHZsXSkgaWYgKHhxKSBmcmVlKHhxKTsgLyogRnJlZSB0aGlzIGlmIGl0IHdhcyBtYWxsb2Mn ZC4gKi8KKyAgICBtYWtlc3RyKCZpbnBtYXRjaCwmbWF0Y2hidWZbbWF0Y2hpbmRleF0pOyAvKiBc dihpbm1hdGNoKSAqLworICAgIHJldHVybih4KTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IFJldHVybiBzZWFyY2ggcmVzdWx0LiAqLworfQorCisvKiAgWCBYIFMgVCBSIEkgTiBHICAtLSAg SW50ZXJwcmV0IHN0cmluZ3MgY29udGFpbmluZyBiYWNrc2xhc2ggZXNjYXBlcyAgKi8KKy8qICBa IFogUyBUIFIgSSBOIEcgIC0tICAobmV3IG5hbWUuLi4pICAqLworLyoKKyBDb3BpZXMgcmVzdWx0 IHRvIG5ldyBzdHJpbmcuCisgIHN0cmlwcyBlbmNsb3NpbmcgYnJhY2VzIG9yIGRvdWJsZXF1b3Rl cy4KKyAgaW50ZXJwcmV0cyBiYWNrc2xhc2ggZXNjYXBlcy4KKyAgcmV0dXJucyAwIG9uIHN1Y2Nl c3MsIG5vbnplcm8gb24gZmFpbHVyZS4KKyAgdHJpZXMgdG8gYmUgY29tcGF0aWJsZSB3aXRoIE1T LURPUyBLZXJtaXQuCisKKyBTeW50YXggb2YgaW5wdXQgc3RyaW5nOgorICBzdHJpbmcgPSBjaGFy cyB8ICJjaGFycyIgfCB7Y2hhcnN9CisgIGNoYXJzID0gKGMqZSopKgorICB3aGVyZSBjID0gYW55 IHByaW50YWJsZSBjaGFyYWN0ZXIsIGFzY2lpIDMyLTEyNgorICBhbmQgZSA9IGEgYmFja3NsYXNo IGVzY2FwZQorICBhbmQgKiBtZWFucyAwIG9yIG1vcmUgcmVwZXRpdGlvbnMgb2YgcHJlY2VkaW5n IHF1YW50aXR5CisgIGJhY2tzbGFzaCBlc2NhcGUgPSBcb3BlcmFuZAorICBvcGVyYW5kID0ge251 bWJlcn0gfCBudW1iZXIgfCBmbmFtZShvcGVyYW5kKSB8IHYobmFtZSkgfCAkKG5hbWUpIHwgbShu YW1lKQorICBudW1iZXIgPSBbcl1uW25bbl1dXSwgaS5lLiBhbiBvcHRpb25hbCByYWRpeCBjb2Rl IGZvbGxvd2VkIGJ5IDEtMyBkaWdpdHMKKyAgcmFkaXggY29kZSBpcyBvTyAob2N0YWwpLCB4WCAo aGV4KSwgZEQgb3Igbm9uZSAoZGVjaW1hbCkgKHNlZSB4eGVzYygpKS4KKyovCisKKyNpZm5kZWYg Tk9GUklMTFMKK2ludAoreXlzdHJpbmcocyxzMikgY2hhciAqczsgY2hhciAqKnMyOyB7ICAgIC8q IFJldmVyc2UgYSBzdHJpbmcgKi8KKyAgICBpbnQgeDsKKyAgICBzdGF0aWMgY2hhciAqbmV3Owor ICAgIG5ldyA9ICpzMjsKKyAgICBpZiAoIXMgfHwgIW5ldykgcmV0dXJuKC0xKTsgICAgICAgICAv KiBXYXRjaCBvdXQgZm9yIG51bGwgcG9pbnRlcnMuICovCisgICAgaWYgKCh4ID0gKGludClzdHJs ZW4ocykpID09IDApIHsgICAgLyogUmVjdXJzaW9uIGRvbmUuICovCisgICAgICAgICpuZXcgPSAn XDAnOworICAgICAgICByZXR1cm4oMCk7CisgICAgfQorICAgIHgtLTsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIE90aGVyd2lzZSwgY2FsbCBzZWxmICovCisgICAgKm5ldysrID0g c1t4XTsgICAgICAgICAgICAgICAgICAgICAgLyogdG8gcmV2ZXJzZSByZXN0IG9mIHN0cmluZy4g Ki8KKyAgICBzW3hdID0gMDsKKyAgICByZXR1cm4oeXlzdHJpbmcocywmbmV3KSk7Cit9CisjZW5k aWYgLyogTk9GUklMTFMgKi8KKworc3RhdGljIGNoYXIgaXBhYnVmWzE2XSA9IHsgTlVMIH07ICAg ICAgIC8qIElQIGFkZHJlc3MgYnVmZmVyICovCisKK3N0YXRpYyBjaGFyICoKK2dldGlwKHMpIGNo YXIgKnM7IHsKKyAgICBjaGFyIGM9TlVMOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXb3Jr ZXJzLi4uICovCisgICAgaW50IGk9MCwgcD0wLCBkPTA7CisgICAgaW50IHN0YXRlID0gMDsgICAg ICAgICAgICAgICAgICAgICAgLyogU3RhdGUgb2YgMi1zdGF0ZSBGU0EgKi8KKworICAgIHdoaWxl ICgoYyA9ICpzKyspKSB7CisgICAgICAgIHN3aXRjaChzdGF0ZSkgeworICAgICAgICAgIGNhc2Ug MDogICAgICAgICAgICAgICAgICAgICAgIC8qIEZpbmQgZmlyc3QgZGlnaXQgKi8KKyAgICAgICAg ICAgIGkgPSAwOyAgICAgICAgICAgICAgICAgICAgICAvKiBPdXRwdXQgYnVmZmVyIGluZGV4ICov CisgICAgICAgICAgICBpcGFidWZbaV0gPSBOVUw7ICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSBv dXRwdXQgYnVmZmVyICovCisgICAgICAgICAgICBwID0gMDsgICAgICAgICAgICAgICAgICAgICAg LyogUGVyaW9kIGNvdW50ZXIgKi8KKyAgICAgICAgICAgIGQgPSAwOyAgICAgICAgICAgICAgICAg ICAgICAvKiBEaWdpdCBjb3VudGVyICovCisgICAgICAgICAgICBpZiAoaXNkaWdpdChjKSkgeyAg ICAgICAgICAgLyogSGF2ZSBmaXJzdCBkaWdpdCAqLworICAgICAgICAgICAgICAgIGQgPSAxOyAg ICAgICAgICAgICAgICAgIC8qIENvdW50IGl0ICovCisgICAgICAgICAgICAgICAgaXBhYnVmW2kr K10gPSBjOyAgICAgICAgLyogQ29weSBpdCAqLworICAgICAgICAgICAgICAgIHN0YXRlID0gMTsg ICAgICAgICAgICAgIC8qIENoYW5nZSBzdGF0ZSAqLworICAgICAgICAgICAgfQorICAgICAgICAg ICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIDE6ICAgICAgICAgICAgICAgICAgICAgICAvKiBJ biBudW1lcmljIGZpZWxkICovCisgICAgICAgICAgICBpZiAoaXNkaWdpdChjKSkgeyAgICAgICAg ICAgLyogSGF2ZSBkaWdpdCAqLworICAgICAgICAgICAgICAgIGlmICgrK2QgPiAzKSAgICAgICAg ICAgIC8qIFRvbyBtYW55ICovCisgICAgICAgICAgICAgICAgICBzdGF0ZSA9IDA7ICAgICAgICAg ICAgLyogU3RhcnQgb3ZlciAqLworICAgICAgICAgICAgICAgIGVsc2UgICAgICAgICAgICAgICAg ICAgIC8qIE5vdCB0b28gbWFueSAqLworICAgICAgICAgICAgICAgICAgaXBhYnVmW2krK10gPSBj OyAgICAgIC8qIEtlZXAgaXQgKi8KKyAgICAgICAgICAgIH0gZWxzZSBpZiAoYyA9PSAnLicgJiYg cCA8IDMpIHsgLyogSGF2ZSBhIHBlcmlvZCAqLworICAgICAgICAgICAgICAgIHArKzsgICAgICAg ICAgICAgICAgICAgIC8qIENvdW50IGl0ICovCisgICAgICAgICAgICAgICAgaWYgKGQgPT0gMCkg ICAgICAgICAgICAgLyogTm90IHByZWNlZGVkIGJ5IGEgZGlnaXQgKi8KKyAgICAgICAgICAgICAg ICAgIHN0YXRlID0gMDsgICAgICAgICAgICAvKiBTdGFydCBvdmVyICovCisgICAgICAgICAgICAg ICAgZWxzZSAgICAgICAgICAgICAgICAgICAgLyogT0sgKi8KKyAgICAgICAgICAgICAgICAgIGlw YWJ1ZltpKytdID0gYzsgICAgICAvKiBLZWVwIGl0ICovCisgICAgICAgICAgICAgICAgZCA9IDA7 ICAgICAgICAgICAgICAgICAgLyogUmVzZXQgZGlnaXQgY291bnRlciAqLworICAgICAgICAgICAg fSBlbHNlIGlmIChwID09IDMgJiYgZCA+IDApIHsgLyogTm90IHBhcnQgb2YgYWRkcmVzcyAqLwor ICAgICAgICAgICAgICAgIGlwYWJ1ZltpXSA9IE5VTDsgICAgICAgIC8qIElmIHdlIGhhdmUgZnVs bCBJUCBhZGRyZXNzICovCisgICAgICAgICAgICAgICAgcmV0dXJuKChjaGFyICopaXBhYnVmKTsg LyogUmV0dXJuIGl0ICovCisgICAgICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAg LyogT3RoZXJ3aXNlICovCisgICAgICAgICAgICAgICAgc3RhdGUgPSAwOyAgICAgICAgICAgICAg LyogU3RhcnQgb3ZlciAqLworICAgICAgICAgICAgICAgIGlwYWJ1ZlswXSA9IE5VTDsgICAgICAg IC8qIChpbiBjYXNlIG5vIG1vcmUgY2hhcnMgbGVmdCkgKi8KKyAgICAgICAgICAgIH0KKyAgICAg ICAgfQorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZhbGwgdGhy dSBhdCBlbmQgb2Ygc3RyaW5nICovCisgICAgaXBhYnVmW2ldID0gTlVMOyAgICAgICAgICAgICAg ICAgICAgLyogTWF5YmUgd2UgaGF2ZSBvbmUgKi8KKyAgICByZXR1cm4oKHAgPT0gMyAmJiBkID4g MCkgPyAoY2hhciAqKWlwYWJ1ZiA6ICIiKTsKK30KKyNlbmRpZiAvKiBOT1NQTCAqLworCisvKiBE YXRlIFJvdXRpbmVzICovCisKKy8qIFogSiBEIEEgVCBFICAtLSAgQ29udmVydCB5eXl5bW1kZCBk YXRlIHRvIERheSBvZiBZZWFyICovCisKK3N0YXRpYyBpbnQgamRheXNbMTJdID0geyAgMCwzMSw1 OSw5MCwxMjAsMTUxLDE4MSwyMTIsMjQzLDI3MywzMDQsMzM0IH07CitzdGF0aWMgaW50IGxkYXlz WzEyXSA9IHsgIDAsMzEsNjAsOTEsMTIxLDE1MiwxODIsMjEzLDI0NCwyNzQsMzA1LDMzNSB9Owor c3RhdGljIGNoYXIgempkYnVmWzEyXSA9IHsgTlVMLCBOVUwgfTsKKy8qCisgIERlaW5kZSwgbmUg aW4gcG9zdGVydW0gYSBYSUkga2FsZW5kYXMgYXByaWxpcyBhZXF1aW5vY3RpdW0gcmVjZWRhdCwK KyAgc3RhdHVpbXVzIGJpc3NleHR1bSBxdWFydG8gcXVvcXVlIGFubm8gKHV0aSBtb3MgZXN0KSBj b250aW51YXJpIGRlYmVyZSwKKyAgcHJhZXRlcnF1YW0gaW4gY2VudGVzaW1pcyBhbm5pczsgcXVp LCBxdWFtdmlzIGJpc3NleHRpbGVzIGFudGVhIHNlbXBlcgorICBmdWVyaW50LCBxdWFsZW0gZXRp YW0gZXNzZSB2b2x1bXVzIGFubnVtIE1EQywgcG9zdCBldW0gdGFtZW4gcXVpIGRlaW5jZXBzCisg IGNvbnNlcXVlbnR1ciBjZW50ZXNpbWkgbm9uIG9tbmVzIGJpc3NleHRpbGVzIHNpbnQsIHNlZCBp biBxdWFkcmluZ2VudGlzCisgIHF1aWJ1c3F1ZSBhbm5pcyBwcmltaSBxdWlxdWUgdHJlcyBjZW50 ZXNpbWkgc2luZSBiaXNzZXh0byB0cmFuc2lnYW50dXIsCisgIHF1YXJ0dXMgdmVybyBxdWlzcXVl IGNlbnRlc2ltdXMgYmlzc2V4dGlsaXMgc2l0LCBpdGEgdXQgYW5udXMgTURDQywgTURDQ0MsCisg IE1EQ0NDQyBiaXNzZXh0aWxlcyBub24gc2ludC4gQW5ubyB2ZXJvIE1NLCBtb3JlIGNvbnN1ZXRv IGRpZXMgYmlzc2V4dHVzCisgIGludGVyY2FsZXR1ciwgZmVicnVhcmlvIGRpZXMgWFhJWCBjb250 aW5lbnRlLCBpZGVtcXVlIG9yZG8gaW50ZXJtaXR0ZW5kaQorICBpbnRlcmNhbGFuZGlxdWUgYmlz c2V4dHVtIGRpZW0gaW4gcXVhZHJpbmdlbnRpcyBxdWlidXNxdWUgYW5uaXMgcGVycGV0dW8KKyAg Y29uc2VydmV0dXIuICAtIEdyZWdvcml1cyBYSUlJLCBBbm5vIERvbWluaSBNRExYWFhJSS4KKyov CitjaGFyICoKK3pqZGF0ZShkYXRlKSBjaGFyICogZGF0ZTsgeyAgICAgICAgICAgICAvKiBkYXRl ID0geXl5eW1tZGQgKi8KKyAgICBjaGFyIHllYXJbNV07CisgICAgY2hhciBtb250aFszXTsKKyAg ICBjaGFyIGRheVszXTsKKyAgICBpbnQgZCwgbSwgeCwgeTsKKyAgICBpbnQgbGVhcGRheSwgajsK KyAgICBjaGFyICogdGltZSA9IE5VTEw7CisKKyAgICBpZiAoIWRhdGUpIGRhdGUgPSAiIjsgICAg ICAgICAgICAgICAvKiBWYWxpZGF0ZSBhcmcgKi8KKyAgICB4ID0gc3RybGVuKGRhdGUpOworICAg IGlmICh4IDwgMSkgcmV0dXJuKCIwIik7CisgICAgaWYgKHggPCA4KSByZXR1cm4oIi0xIik7Cisg ICAgZm9yICh4ID0gMDsgeCA8IDg7IHgrKykKKyAgICAgIGlmICghaXNkaWdpdChkYXRlW3hdKSkK KyAgICAgICAgcmV0dXJuKCItMSIpOworCisgICAgaWYgKGRhdGVbOF0pIGlmIChkYXRlWzldKQor ICAgICAgdGltZSA9IGRhdGUgKyA5OworCisgICAgeWVhclswXSA9IGRhdGVbMF07ICAgICAgICAg ICAgICAgICAgLyogSXNvbGF0ZSB5ZWFyICovCisgICAgeWVhclsxXSA9IGRhdGVbMV07CisgICAg eWVhclsyXSA9IGRhdGVbMl07CisgICAgeWVhclszXSA9IGRhdGVbM107CisgICAgeWVhcls0XSA9 ICdcMCc7CisKKyAgICBtb250aFswXSA9IGRhdGVbNF07ICAgICAgICAgICAgICAgICAvKiBNb250 aCAqLworICAgIG1vbnRoWzFdID0gZGF0ZVs1XTsKKyAgICBtb250aFsyXSA9ICdcMCc7OworCisg ICAgZGF5WzBdID0gZGF0ZVs2XTsgICAgICAgICAgICAgICAgICAgLyogQW5kIGRheSAqLworICAg IGRheVsxXSA9IGRhdGVbN107CisgICAgZGF5WzJdID0gJ1wwJzsKKworICAgIGxlYXBkYXkgPSAw OyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFzc3VtZSBubyBsZWFwIGRheSAqLworICAgIHkg PSBhdG9pKHllYXIpOworICAgIG0gPSBhdG9pKG1vbnRoKTsKKyAgICBkID0gYXRvaShkYXkpOwor ICAgIGlmIChtID4gMikgeyAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vIExlYXAgZGF5IGJl Zm9yZSBNYXJjaCAqLworICAgICAgICBpZiAoeSAlIDQgPT0gMCkgeyAgICAgICAgICAgICAgIC8q IElmIHllYXIgaXMgZGl2aXNpYmxlIGJ5IDQgKi8KKyAgICAgICAgICAgIGxlYXBkYXkgPSAxOyAg ICAgICAgICAgICAgICAvKiBJdCdzIGEgTGVhcCB5ZWFyICovCisgICAgICAgICAgICBpZiAoeSAl IDEwMCA9PSAwKSB7ICAgICAgICAgLyogRXhjZXB0IGlmIGRpdmlzaWJsZSBieSAxMDAgKi8KKyAg ICAgICAgICAgICAgICBpZiAoeSAlIDQwMCAhPSAwKSAgICAgICAvKiBidXQgbm90IGJ5IDQwMCAq LworICAgICAgICAgICAgICAgICAgbGVhcGRheSA9IDA7CisgICAgICAgICAgICB9CisgICAgICAg IH0KKyAgICB9CisgICAgaiA9IGpkYXlzW20gLSAxXSArIGQgKyBsZWFwZGF5OyAgICAgLyogRGF5 IG9mIHllYXIgKi8KKyAgICBpZiAodGltZSkKKyAgICAgIHNwcmludGYoempkYnVmLCIlMDRkJTAz ZCAlcyIseSxqLHRpbWUpOyAvKiBTQUZFICovCisgICAgZWxzZQorICAgICAgc3ByaW50Zih6amRi dWYsIiUwNGQlMDNkIix5LGopOyAgIC8qIFNBRkUgKi8KKyAgICByZXR1cm4oKGNoYXIgKil6amRi dWYpOworfQorCitzdGF0aWMgY2hhciBqemRidWZbMzJdOworCisvKiBKIFogRCBBIFQgRSAgLS0g IENvbnZlcnQgRGF5IG9mIFllYXIgdG8geXl5eWRkbW0gZGF0ZSAqLworCitjaGFyICoKK2p6ZGF0 ZShkYXRlKSBjaGFyICogZGF0ZTsgeyAgICAgICAgICAgICAvKiBkYXRlID0geXl5eWRkZCAqLwor ICAgIGNoYXIgeWVhcls1XTsgICAgICAgICAgICAgICAgICAgICAgIC8qIHdpdGggb3B0aW9uYWwg dGltZSAqLworICAgIGNoYXIgZGF5WzRdOworICAgIGNoYXIgKiB0aW1lID0gTlVMTCwgKiBwOwor ICAgIGludCBkLCBtLCB4LCB5OworICAgIGludCBsZWFwZGF5LCBqOworICAgIGludCAqIHp6Owor CisgICAgaWYgKCFkYXRlKSBkYXRlID0gIiI7ICAgICAgICAgICAgICAgLyogVmFsaWRhdGUgYXJn ICovCisgICAgeCA9IHN0cmxlbihkYXRlKTsKKworICAgIGRlYnVnKEYxMTEsImp6ZGF0ZSBsZW4i LGRhdGUseCk7CisKKyAgICBpZiAoeCA8IDEpIHJldHVybigiMCIpOworICAgIGlmICh4IDwgNykg cmV0dXJuKCItMSIpOworICAgIGlmICh4ID4gOCkgdGltZSA9IGRhdGUgKyA4OworCisgICAgZm9y ICh4ID0gMDsgeCA8IDc7IHgrKykKKyAgICAgIGlmICghaXNkaWdpdChkYXRlW3hdKSkKKyAgICAg ICAgcmV0dXJuKCItMSIpOworCisgICAgeWVhclswXSA9IGRhdGVbMF07ICAgICAgICAgICAgICAg ICAgLyogSXNvbGF0ZSB5ZWFyICovCisgICAgeWVhclsxXSA9IGRhdGVbMV07CisgICAgeWVhclsy XSA9IGRhdGVbMl07CisgICAgeWVhclszXSA9IGRhdGVbM107CisgICAgeWVhcls0XSA9ICdcMCc7 CisKKyAgICBkZWJ1ZyhGMTEwLCJqemRhdGUgeWVhciIseWVhciwwKTsKKworICAgIGRheVswXSA9 IGRhdGVbNF07ICAgICAgICAgICAgICAgICAgIC8qIEFuZCBkYXkgKi8KKyAgICBkYXlbMV0gPSBk YXRlWzVdOworICAgIGRheVsyXSA9IGRhdGVbNl07CisgICAgZGF5WzNdID0gJ1wwJzsKKworICAg IGRlYnVnKEYxMTAsImp6ZGF0ZSBkYXkiLGRheSwwKTsKKworICAgIGogPSBhdG9pKGRheSk7Cisg ICAgaWYgKGogPiAzNjYpCisgICAgICByZXR1cm4oIi0xIik7CisKKyAgICBsZWFwZGF5ID0gMDsg ICAgICAgICAgICAgICAgICAgICAgICAvKiBBc3N1bWUgbm8gbGVhcCBkYXkgKi8KKyAgICB5ID0g YXRvaSh5ZWFyKTsKKyAgICBpZiAoeSAlIDQgPT0gMCkgeyAgICAgICAgICAgICAgICAgICAvKiBJ ZiB5ZWFyIGlzIGRpdmlzaWJsZSBieSA0ICovCisgICAgICAgIGxlYXBkYXkgPSAxOyAgICAgICAg ICAgICAgICAgICAgLyogSXQncyBhIExlYXAgeWVhciAqLworICAgICAgICBpZiAoeSAlIDEwMCA9 PSAwKSB7ICAgICAgICAgICAgIC8qIEV4Y2VwdCBpZiBkaXZpc2libGUgYnkgMTAwICovCisgICAg ICAgICAgICBpZiAoeSAlIDQwMCAhPSAwKSAgICAgICAgICAgLyogYnV0IG5vdCBieSA0MDAgKi8K KyAgICAgICAgICAgICAgbGVhcGRheSA9IDA7CisgICAgICAgIH0KKyAgICB9CisgICAgZGVidWco RjEwMSwianpkYXRlIGxlYXBkYXkiLCIiLGxlYXBkYXkpOworICAgIHp6ID0gbGVhcGRheSA/IGxk YXlzIDogamRheXM7CisKKyAgICBmb3IgKHggPSAwOyB4IDwgMTE7IHgrKykKKyAgICAgIGlmIChq ID4genpbeF0gJiYgaiA8PSB6elt4KzFdKQorICAgICAgICBicmVhazsKKyAgICBtID0geCArIDE7 CisKKyAgICBkZWJ1ZyhGMTAxLCJqemRhdGUgbSIsIiIsbSk7CisKKyAgICBkID0gaiAtIHp6W3hd OworCisgICAgZGVidWcoRjEwMSwianpkYXRlIGQiLCIiLGQpOworCisgICAgaWYgKHRpbWUpCisg ICAgICBzcHJpbnRmKGp6ZGJ1ZiwiJTA0ZCUwMmQlMDJkICVzIix5LG0sZCx0aW1lKTsgLyogU0FG RSAqLworICAgIGVsc2UKKyAgICAgIHNwcmludGYoanpkYnVmLCIlMDRkJTAyZCUwMmQiLHksbSxk KTsgLyogU0FGRSAqLworCisgICAgZGVidWcoRjEwMSwianpkYXRlIGp6ZGJ1ZiIsanpkYnVmLDAp OworCisgICAgcCA9IGNrY3Z0ZGF0ZSgoY2hhciAqKWp6ZGJ1ZiwgMCk7ICAgLyogQ29udmVydCB0 byBzdGFuZGFyZCBmb3JtICovCisgICAgY2tzdHJuY3B5KGp6ZGJ1ZixwLDMyKTsKKyAgICBpZiAo IXRpbWUpIGp6ZGJ1Zls4XSA9IE5VTDsgICAgICAgICAvKiBSZW1vdmUgdGltZSBpZiBub3Qgd2Fu dGVkICovCisgICAgcmV0dXJuKChjaGFyICopanpkYnVmKTsKK30KKworLyogTSBKIEQgIC0tICBN b2RpZmllZCBKdWxpYW4gRGF0ZSAqLworLyoKKyAgQ2FsbCB3aXRoOgorICAgIFN0YW5kYXJkLWZv cm1hdCBkYXRlLXRpbWUgc3RyaW5nOiB5eXl5bW1kZFsgaGg6bW06c3NdLgorICAgIFRoZSB0aW1l LCBpZiBhbnksIGlzIGlnbm9yZWQuCisKKyAgUmV0dXJuczoKKyAgICAtMUwgb24gZXJyb3IsIG90 aGVyd2lzZToKKyAgICBUaGUgbnVtYmVyIG9mIGRheXMgc2luY2UgMTcgTm92IDE4NTggYXMgYSB3 aG9sZSBudW1iZXI6CisgICAgMTYgTm92IDE4NTggPSAtMSwgMTcgTm92IDE4NTggPSAwLCAxOCBO b3YgMTg1OCA9IDEsIDE5IE5vdiAxODU4ID0gMiwgLi4uCisKKyAgVGhlIE1vZGlmaWVkIEp1bGlh biBEYXRlIGlzIGRlZmluZWQgYnkgdGhlIEludGVybmF0aW9uYWwgQXN0cm9ub21pY2FsCisgIFVu aW9uIGFzIHRoZSB0cnVlIEp1bGlhbiBkYXRlIG1pbnVzIDI0MDAwMDAuNSBkYXlzLiAgVGhlIHRy dWUgSnVsaWFuCisgIGRhdGUgaXMgdGhlIG51bWJlciBkYXlzIHNpbmNlIHNpbmNlIG5vb24gb2Yg MSBKYW51YXJ5IDQ3MTMgQkNFIG9mIHRoZQorICBKdWxpYW4gcHJvbGVwdGljIGNhbGVuZGFyLiAg Q29udmVyc2lvbnMgYmV0d2VlbiBjYWxlbmRhciBkYXRlcyBhbmQKKyAgSnVsaWFuIGRhdGVzLCBo b3dldmVyLCBhc3N1bWUgR3JlZ29yaWFuIGRhdGluZy4KKyovCitsb25nCittamQoZGF0ZSkgY2hh ciAqIGRhdGU7IHsKKyAgICBjaGFyIHllYXJbNV07CisgICAgY2hhciBtb250aFszXTsKKyAgICBj aGFyIGRheVszXTsKKyAgICBpbnQgeCwgYSwgZCwgbSwgeTsKKyAgICBsb25nIHo7CisKKyAgICBp ZiAoIWRhdGUpIGRhdGUgPSAiIjsgICAgICAgICAgICAgICAvKiBWYWxpZGF0ZSBhcmcgKi8KKyAg ICB4ID0gc3RybGVuKGRhdGUpOworICAgIGlmICh4IDwgMSkgcmV0dXJuKDBMKTsKKyAgICBpZiAo eCA8IDgpIHJldHVybigtMUwpOworICAgIGZvciAoeCA9IDA7IHggPCA4OyB4KyspCisgICAgICBp ZiAoIWlzZGlnaXQoZGF0ZVt4XSkpCisgICAgICAgIHJldHVybigtMUwpOworCisgICAgeWVhclsw XSA9IGRhdGVbMF07ICAgICAgICAgICAgICAgICAgLyogSXNvbGF0ZSB5ZWFyICovCisgICAgeWVh clsxXSA9IGRhdGVbMV07CisgICAgeWVhclsyXSA9IGRhdGVbMl07CisgICAgeWVhclszXSA9IGRh dGVbM107CisgICAgeWVhcls0XSA9ICdcMCc7CisKKyAgICBtb250aFswXSA9IGRhdGVbNF07ICAg ICAgICAgICAgICAgICAvKiBNb250aCAqLworICAgIG1vbnRoWzFdID0gZGF0ZVs1XTsKKyAgICBt b250aFsyXSA9ICdcMCc7OworICAgIG0gPSBhdG9pKG1vbnRoKTsKKworICAgIGRheVswXSA9IGRh dGVbNl07ICAgICAgICAgICAgICAgICAgIC8qIEFuZCBkYXkgKi8KKyAgICBkYXlbMV0gPSBkYXRl WzddOworICAgIGRheVsyXSA9ICdcMCc7CisgICAgZCA9IGF0b2koZGF5KTsKKworICAgIGEgPSAo MTQtbSkvMTI7ICAgICAgICAgICAgICAgICAgICAgIC8qIENhbGN1bGF0ZSB0cnVlIEp1bGlhbiBk YXRlICovCisgICAgeSA9IGF0b2koeWVhcikgKyA0ODAwIC0gYTsKKyAgICBtID0gbSArIDEyICog YSAtIDM7CisgICAgeiA9IGQgKyAobG9uZykoMzA2Km0rNSkvMTAgKyAobG9uZykoeSozNjUpICsg eS80IC0geS8xMDAgKyB5LzQwMCAtIDMyMDQ1TDsKKworICAgIHogLT0gMjQwMDAwMUw7ICAgICAg ICAgICAgICAgICAgICAgIC8qIENvbnZlcnQgSkQgdG8gTUpEICovCisKKyAgICByZXR1cm4oeik7 Cit9CisKK3N0YXRpYyBjaGFyIG1qZDJkYnVmWzMyXTsKKworLyogIE0gSiBEIDIgRCBBIFQgRSAg LS0gIENvbnZlcnRzIE1KRCB0byB5eXl5bW1kZCAgKi8KKworY2hhciAqCisjaWZkZWYgQ0tfQU5T SUMKK21qZDJkYXRlKGxvbmcgbWpkKQorI2Vsc2UKK21qZDJkYXRlKG1qZCkgbG9uZyBtamQ7Cisj ZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIG1qZDJkYXRlICovIHsKKyAgICBsb25nIGpkLCBsLCBu OworICAgIGludCBkLCBtLCB5OworICAgIGpkID0gKGxvbmcpKG1qZCArIDI0MDAwMDFMKTsKKyAg ICBsID0gamQgKyA2ODU2OTsKKyAgICBuID0gNCAqIGwgLyAxNDYwOTdMOworICAgIGwgPSBsIC0g KDE0NjA5NyAqIG4gKyAzKSAvIDQ7CisgICAgeSA9IDQwMDAgKiAobCArIDEpIC8gMTQ2MTAwMUw7 CisgICAgbCA9IGwgLSAxNDYxICogeSAvIDQgKyAzMTsKKyAgICBtID0gODAgKiBsIC8gMjQ0NzsK KyAgICBkID0gbCAtIDI0NDcgKiBtIC8gODA7CisgICAgbCA9IG0gLyAxMTsKKyAgICBtID0gbSAr IDIgLSAxMiAqIGw7CisgICAgeSA9IDEwMCAqIChuIC0gNDkpICsgeSArIGw7CisgICAgc3ByaW50 ZihtamQyZGJ1ZiwiJTA0ZCUwMmQlMDJkIix5LG0sZCk7IC8qIFNBRkUgKi8KKyAgICByZXR1cm4o KGNoYXIgKiltamQyZGJ1Zik7Cit9CisKKyNpZm5kZWYgTk9TUEwKK3N0YXRpYyBjaGFyICoqIGZs aXN0ID0gKGNoYXIgKiopIE5VTEw7ICAvKiBGaWxlIGxpc3QgZm9yIFxmbmV4dGZpbGUoKSAqLwor c3RhdGljIGludCBmbGlzdG4gPSAwOyAgICAgICAgICAgICAgICAgIC8qIE51bWJlciBvZiBpdGVt cyBpbiBmaWxlIGxpc3QgKi8KKworLyoKKyAgVGhlIGZ1bmN0aW9uIHJldHVybi12YWx1ZSBidWZm ZXIgbXVzdCBiZSBnbG9iYWwsIHNpbmNlIGZuZXZhbCgpIHJldHVybnMgYQorICBwb2ludGVyIHRv IGl0LiAgZm5ldmFsKCkgaXMgY2FsbGVkIG9ubHkgYnkgenpzdHJpbmcoKSwgd2hpY2ggYWx3YXlz IGNvcGllcworICB0aGUgcmVzdWx0IG91dCBvZiB0aGlzIGJ1ZmZlciB0byBzb21ld2hlcmUgZWxz ZSwgc28gaXQncyBPSyB0byBoYXZlIG9ubHkKKyAgb25lIGJ1ZmZlciBmb3IgdGhpcyBpbiBtb3N0 IGNhc2VzLiAgSG93ZXZlciwgc2luY2UgZnVuY3Rpb24gY2FsbHMgY2FuIGJlCisgIG5lc3RlZCAt LSBlLmcuIGZ1bmN0aW9ucyB3aG9zZSBhcmd1bWVudHMgYXJlIGZ1bmN0aW9ucywgb3IgcmVjdXJz aXZlCisgIGZ1bmN0aW9ucywgYXQgc29tZSBwb2ludCB3ZSBzaG91bGQgY29udmVydCB0aGlzIHRv IGFuIGFycmF5IG9mIGJ1ZmZlcnMsCisgIGluZGV4ZWQgYnkgZnVuY3Rpb24gZGVwdGggKHdoaWNo IG1pZ2h0IG9yIG1pZ2h0IG5vdCBiZSB0aGUgc2FtZSBhcyB0aGUKKyAgImRlcHRoIiB2YXJpYWJs ZSkuICBBbHNvLCBzaW5jZSBmdW5jdGlvbiByZXN1bHRzIGFyZSBwb3RlbnRpYWxseSBxdWl0ZSBi aWcsCisgIHdlJ2QgbmVlZCB0byBhbGxvY2F0ZSBhbmQgZGVhbGxvY2F0ZSBkeW5hbWljYWxseSBh cyB3ZSBkZXNjZW5kIGFuZCBhc2NlbmQKKyAgZnVuY3Rpb24gZGVwdGguICBMZWZ0IGZvciBhIGZ1 dHVyZSByZWxlYXNlLi4uCisqLworY2hhciBmbnZhbFtGTlZBTEwrMl07ICAgICAgICAgICAgICAg ICAgIC8qIEZ1bmN0aW9uIHJldHVybiB2YWx1ZSAgKi8KK3N0YXRpYyBpbnQgZm5kZXB0aCA9IDA7 ICAgICAgICAgICAgICAgICAvKiAod2UgZG9uJ3QgYWN0dWFsbHkgdXNlIHRoaXMgeWV0KSAqLwor aW50IGZuc3VjY2VzcyA9IDE7CitleHRlcm4gaW50IGZuZXJyb3I7CisKKy8qIGYgcCBmIG8gciBt IGEgdCAgLS0gIEZsb2F0aW5nLXBvaW50IG51bWJlciBuaWNlbHkgZm9ybWF0dGVkLiAgKi8KKy8q CisgICBSZXR1cm5zIHJlc3VsdHMgZnJvbSBhIGNpcmN1bGFyIDFLIGJ1ZmZlci4KKyAgIERvbid0 IGNvdW50IG9uIHRvbyBtYW55IHJlc3VsdHMgcmVtYWluaW5nIGF2YWlsYWJsZSBhdCBvbmNlOyBp dCBjb3VsZAorICAgYmUgYW55d2hlcmUgZnJvbSA1IHRvIG1heWJlIDEwMCwgZGVwZW5kaW5nIG9u IHRoZSBzaXplcyBvZiB0aGUgcmVzdWx0cy4KKyovCisjaWZkZWYgQ0tGTE9BVAorI2RlZmluZSBG UEZNVFNJWiAxMDI0CitzdGF0aWMgY2hhciBmcGZtdGJ1ZltGUEZNVFNJWl0gPSB7IE5VTCwgTlVM IH07CitzdGF0aWMgaW50IGZwZmJ1ZnBvcyA9IDA7ICAgICAgICAgICAgICAgLyogKHdoeSB3YXMg dGhpcyBjaGFyIGJlZm9yZT8pICovCisKK2NoYXIgKgorZnBmb3JtYXQoZnByZXN1bHQscGxhY2Vz LHJvdW5kKSBDS0ZMT0FUIGZwcmVzdWx0OyBpbnQgcGxhY2VzLCByb3VuZDsgeworICAgIGNoYXIg ZmJ1ZlsxNl07ICAgICAgICAgICAgICAgICAgICAgIC8qIEZvciBjcmVhdGluZyBwcmludGYgZm9y bWF0ICovCisgICAgaW50IG5pbmVzID0gMCwgc2lnbiA9IDAsIHgsIHksIGksIGosIHNpemUgPSAw OworICAgIGNoYXIgKiBidWY7CisgICAgQ0tGTE9BVCBmdG1wOworCisgICAgeCA9IHBsYWNlcyA/ IHBsYWNlcyA6IChmcF9kaWdpdHMgPyBmcF9kaWdpdHMgOiA2KTsKKworICAgIGRlYnVnKEYxMDEs ImZwZm9ybWF0IGZwcmVzdWx0IiwiIixmcHJlc3VsdCk7CisgICAgZGVidWcoRjEwMSwiZnBmb3Jt YXQgcGxhY2VzIiwiIixwbGFjZXMpOworICAgIGRlYnVnKEYxMDEsImZwZm9ybWF0IGZwZmJ1ZnBv cyAxIiwiIixmcGZidWZwb3MpOworCisgICAgZnRtcCA9IGZwcmVzdWx0OworICAgIGlmIChmdG1w IDwgMC4wKSBmdG1wID0gMC4wIC0gZnByZXN1bHQ7CisKKyNpZmRlZiBGTkZMT0FUCisgICAgaWYg KCFmcF9yb3VuZGluZyAmJiAgICAgICAgICAgICAgICAgLyogSWYgcHJpbnRmIGRvZXNuJ3Qgcm91 bmQsICovCisgICAgICAgIChwbGFjZXMgPiAwIHx8ICAgICAgICAgICAgICAgICAgLyogcm91bmQg cmVzdWx0IHRvIGRlY2ltYWwgcGxhY2VzLiAqLworICAgICAgICAgKHBsYWNlcyA9PSAwICYmIHJv dW5kKSkpCisgICAgICBmcHJlc3VsdCArPSAoMC41IC8gcG93KDEwLjAsKENLRkxPQVQpcGxhY2Vz KSk7CisgICAgeSA9IChmdG1wID09IDAuMCkgPyAxIDogKGludClsb2cxMChmdG1wKTsKKyAgICBz aXplID0geSArIHggKyAzOyAgICAgICAgICAgICAgICAgICAvKiBFc3RpbWF0ZWQgbGVuZ3RoIG9m IHJlc3VsdCAqLworICAgIGlmIChmcHJlc3VsdCA8IDAuMCkgc2l6ZSsrOworI2Vsc2UKKyAgICBz aXplID0gMjAwOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBObyB3YXkgdG8gZXN0aW1hdGUs IGJlIGdlbmVyb3VzICovCisjZW5kaWYgLyogRk5GTE9BVCAqLworCisgICAgZGVidWcoRjEwMSwi ZnBmb3JtYXQgc2l6ZSIsIiIsc2l6ZSk7CisKKyAgICBpZiAoZnBmYnVmcG9zID4gKEZQRk1UU0la IC0gc2l6ZSkpICAvKiBXcmFwIGFyb3VuZCBpZiBuZWNlc3NhcnkgKi8KKyAgICAgIGZwZmJ1ZnBv cyA9IDA7CisgICAgZGVidWcoRjEwMSwiZnBmb3JtYXQgZnBmYnVmcG9zIDEiLCIiLGZwZmJ1ZnBv cyk7CisKKyAgICBidWYgPSAmZnBmbXRidWZbZnBmYnVmcG9zXTsKKworICAgIGlmIChwbGFjZXMg PiAwKSB7ICAgICAgICAgICAgICAgICAgIC8qIElmIHBsYWNlcyBzcGVjaWZpZWQgKi8KKyAgICAg ICAgLyogdXNlIHNwZWNpZmllZCBwbGFjZXMgdG8gd3JpdGUgZ2l2ZW4gbnVtYmVyIG9mIGRpZ2l0 cyAqLworICAgICAgICBzcHJpbnRmKGZidWYsIiUlMC4lZGYiLHBsYWNlcyk7IC8qIFNBRkUgKi8K KyAgICAgICAgc3ByaW50ZihidWYsZmJ1ZixmcHJlc3VsdCk7ICAgICAvKiBTQUZFICovCisgICAg fSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogT3RoZXJ3aXNlLi4uICovCisg ICAgICAgIC8qIEdvIGZvciBtYXggcHJlY2lzaW9uICovCisgICAgICAgIHNwcmludGYoZmJ1Ziwi JSUwLiVkZiIsZnBfZGlnaXRzKTsgLyogU0FGRSAqLworICAgICAgICBzcHJpbnRmKGJ1ZixmYnVm LGZwcmVzdWx0KTsgICAgIC8qIFNBRkUgKi8KKyAgICB9CisgICAgaWYgKGJ1ZlswXSA9PSAnLScp IHNpZ24gPSAxOworICAgIGRlYnVnKEYxMTEsImZwcmVzdWx0IDEgZXJybm8iLGJ1ZixlcnJubyk7 IC8qIENoZWNrIGZvciBvdmVyL3VuZGVyZmxvdyAqLworICAgIGRlYnVnKEYxMTEsImZwcmVzdWx0 IDEgZnBmYnVmcG9zIixidWYsZnBmYnVmcG9zKTsKKyAgICAvKiBHaXZlIHJlcXVlc3RlZCBkZWNp bWFsIHBsYWNlcyAqLworICAgIGZvciAoaSA9IHNpZ247IGkgPCBGUEZNVFNJWiAmJiBidWZbaV07 IGkrKykgeworICAgICAgICBpZiAoYnVmW2ldID09ICcuJykgICAgICAgICAgICAgIC8qIEZpcnN0 IGZpbmQgdGhlIGRlY2ltYWwgcG9pbnQgKi8KKyAgICAgICAgICBicmVhazsKKyAgICAgICAgZWxz ZSBpZiAoaSA+IGZwX2RpZ2l0cyArIHNpZ24gLSAxKSAvKiByZXBsYWNpbmcgZ2FyYmFnZSAqLwor ICAgICAgICAgIGJ1ZltpXSA9ICcwJzsgICAgICAgICAgICAgICAgIC8qIGRpZ2l0cyB3aXRoIDAu Li4gKi8KKyAgICB9CisgICAgaWYgKGJ1ZltpXSA9PSAnLicpIHsgICAgICAgICAgICAgICAgLyog SGF2ZSBkZWNpbWFsIHBvaW50ICovCisgICAgICAgIGludCBnb3RlbmQgPSAwOworICAgICAgICAv KiBwbGFjZXMgPCAwIHNvIHRydW5jYXRlIGZyYWN0aW9uICovCisgICAgICAgIGlmIChwbGFjZXMg PCAwIHx8IChwbGFjZXMgPT0gMCAmJiByb3VuZCkpIHsKKyAgICAgICAgICAgIGJ1ZltpXSA9IE5V TDsKKyAgICAgICAgfSBlbHNlIGlmIChwbGFjZXMgPiAwKSB7ICAgICAgICAvKiBkID4gMCBzbyB0 aGlzIG1hbnkgZGVjaW1hbCBwbGFjZXMgKi8KKyAgICAgICAgICAgIGkrKzsgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBGaXJzdCBkaWdpdCBhZnRlciBkZWNpbWFsICovCisgICAgICAgICAg ICBmb3IgKGogPSAwOyBqIDwgcGxhY2VzOyBqKyspIHsgLyogVHJ1bmNhdGUgYWZ0ZXIgZCBkZWNp bWFsICovCisgICAgICAgICAgICAgICAgaWYgKCFidWZbaitpXSkgICAgICAgIC8qIHBsYWNlcyBv ciBleHRlbmQgdG8gZCAgKi8KKyAgICAgICAgICAgICAgICAgIGdvdGVuZCA9IDE7ICAgICAgICAg ICAgICAvKiBkZWNpbWFsIHBsYWNlcy4gKi8KKyAgICAgICAgICAgICAgICBpZiAoZ290ZW5kIHx8 IGoraStzaWduID4gZnBfZGlnaXRzKQorICAgICAgICAgICAgICAgICAgYnVmW2oraV0gPSAnMCc7 CisgICAgICAgICAgICB9CisgICAgICAgICAgICBidWZbaitpXSA9IE5VTDsKKyAgICAgICAgfSBl bHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBwbGFjZXMgPT0gMCBzbyBEbyBUaGUgUmln aHQgVGhpbmcgKi8KKyAgICAgICAgICAgIGZvciAoaiA9IChpbnQpc3RybGVuKGJ1ZikgLSAxOyBq ID4gaSsxOyBqLS0pIHsKKyAgICAgICAgICAgICAgICBpZiAoKGogLSBzaWduKSA+IGZwX2RpZ2l0 cykKKyAgICAgICAgICAgICAgICAgIGJ1ZltqXSA9ICcwJzsKKyAgICAgICAgICAgICAgICBpZiAo YnVmW2pdID09ICcwJykKKyAgICAgICAgICAgICAgICAgIGJ1ZltqXSA9IE5VTDsgLyogU3RyaXAg dXNlbGVzcyB0cmFpbGluZyAwJ3MuICovCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZnBm bXRidWZbRlBGTVRTSVotMV0gPSBOVUw7CisgICAgaiA9IHN0cmxlbihidWYpOworICAgIHNpZ24g PSAwOworICAgIGZvciAoaSA9IGotMTsgaSA+PSAwOyBpLS0pIHsKKyAgICAgICAgaWYgKGJ1Zltp XSA9PSAnOScpCisgICAgICAgICAgbmluZXMrKzsKKyAgICAgICAgZWxzZQorICAgICAgICAgIGJy ZWFrOworICAgIH0KKyAgICAvKiBEbyBzb21ldGhpbmcgYWJvdXQgeHgueHg5OTk5OTk5OS4uLiAq LworICAgIGlmIChuaW5lcyA+IDUpIHsKKyAgICAgICAgaWYgKGlzZGlnaXQoYnVmW2ldKSAmJiBp IDwgRlBGTVRTSVogLSAyKSB7CisgICAgICAgICAgICBidWZbaV0gPSBidWZbaV0gKyAxOworICAg ICAgICAgICAgYnVmW2krMV0gPSAnMCc7CisgICAgICAgICAgICBidWZbaSsyXSA9ICdcMCc7Cisg ICAgICAgIH0KKyAgICB9CisgICAgaWYgKCFzdHJuY21wKGJ1ZiwiLTAuMCIsRlBGTVRTSVopKQor ICAgICAgY2tzdHJuY3B5KGJ1ZiwiMC4wIixGUEZNVFNJWik7CisgICAgZnBmYnVmcG9zICs9IChp bnQpc3RybGVuKGJ1ZikgKyAxOworICAgIHJldHVybigoY2hhciAqKWJ1Zik7Cit9CisjZW5kaWYg LyogQ0tGTE9BVCAqLworCitzdGF0aWMgVk9JRAorZXZhbGVycihmbikgY2hhciAqIGZuOyB7Cisg ICAgaWYgKGZuZGlhZ3MpIHsKKyAgICAgICAgaWYgKGRpdmJ5emVybykKKyAgICAgICAgICBja21h a21zZyhmbnZhbCxGTlZBTEwsIjxFUlJPUjpESVZJREVfQllfWkVSTzpcXGYiLGZuLCIoKT4iLE5V TEwpOworICAgICAgICBlbHNlCisgICAgICAgICAgY2ttYWttc2coZm52YWwsRk5WQUxMLCI8RVJS T1I6QVJHX05PVF9OVU1FUklDOlxcZiIsZm4sIigpPiIsTlVMTCk7CisgICAgfQorfQorCisKK3N0 YXRpYyBpbnQKK2NrY2luZGV4KGMscykgY2hhciBjLCAqczsgeworICAgIGludCByYzsKKyAgICBp ZiAoIWMgfHwgIXMpIHJldHVybigwKTsKKyAgICBmb3IgKHJjID0gMDsgc1tyY107IHJjKyspIHsK KwlpZiAoYyA9PSBzW3JjXSkgcmV0dXJuKHJjKzEpOworICAgIH0KKyAgICByZXR1cm4oMCk7Cit9 CisKK3N0YXRpYyBjaGFyICoKK2Rva3d2YWwocyxzZXApIGNoYXIgKiBzLCAqIHNlcDsgeworICAg IGNoYXIgYyA9ICdcMCcsICogcCwgKiBrdyA9IE5VTEwsICogdnAgPSBOVUxMOworICAgIGNoYXIg KiByYyA9ICIwIjsJCQkvKiBSZXR1cm4gY29kZSAqLworICAgIGludCB4ID0gMDsKKyAgICBpZiAo IXMpIHJldHVybihyYyk7CisgICAgaWYgKCEqcykgcmV0dXJuKHJjKTsKKyAgICBkZWJ1ZyhGMTEw LCJrd3ZhbCBhcmciLHMsMCk7CisgICAgZGVidWcoRjExMCwia3d2YWwgc2VwIixzZXAsMCk7Cisg ICAgcCA9IChjaGFyICopbWFsbG9jKChpbnQpc3RybGVuKHMpKzEpOworICAgIGlmICghcCkgZ290 byB4ZG9rd3ZhbDsKKyAgICBzdHJjcHkocCxzKTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBT QUZFICovCisgICAgcyA9IHA7CisgICAgd2hpbGUgKCpzIDwgJyEnICYmICpzID4gJ1wwJykgICAg ICAgLyogR2V0IGZpcnN0IG5vbmJsYW5rICovCisgICAgICBzKys7CisgICAgaWYgKCEqcykgZ290 byB4ZG9rd3ZhbDsKKyAgICBpZiAoY2tjaW5kZXgoKnMsc2VwKSkJCS8qIFNlcGFyYXRvciBidXQg bm8ga2V5d29yZCAqLworICAgICAgZ290byB4ZG9rd3ZhbDsKKyAgICBrdyA9IHM7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBLZXl3b3JkICovCisgICAgd2hpbGUgKCpzID4gJyAnKSB7 CisJaWYgKGNrY2luZGV4KCpzLHNlcCkpIHsJCS8qIGtleXdvcmQ9Li4uICovCisgICAgICAgICAg ICBjID0gKnM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBzKys7Cisg ICAgfQorICAgIGlmICgqa3cpIHJjID0gIjEiOwkJCS8qIEhhdmUga2V5d29yZCwgcHJvbW90ZSBy ZXR1cm4gY29kZSAqLworICAgICpzKysgPSBOVUw7ICAgICAgICAgICAgICAgICAgICAgICAgIC8q IFRlcm1pbmF0ZSBrZXl3b3JkICovCisgICAgd2hpbGUgKCpzIDwgJyEnICYmICpzID4gJ1wwJykg ICAgICAgLyogU2tpcCBibGFua3MgKi8KKyAgICAgIHMrKzsKKyAgICBpZiAoIWMgJiYgY2tjaW5k ZXgoKnMsc2VwKSkgeworICAgICAgICBjID0gKnMrKzsgICAgICAgICAgICAgICAgICAgICAgIC8q IEhhdmUgc2VwYXJhdG9yICovCisgICAgICAgIHdoaWxlICgqcyA8ICchJyAmJiAqcyA+ICdcMCcp ICAgLyogU2tpcCBibGFua3MgKi8KKyAgICAgICAgICBzKys7CisgICAgfQorICAgIGlmIChjKSB7 CisgICAgICAgIHZwID0gczsKKwlpZiAoKnZwKSByYyA9ICIyIjsJCS8qIEhhdmUgdmFsdWUsIGFu b3RoZXIgcHJvbW90aW9uICovCisjaWZkZWYgQ09NTUVOVAorICAgICAgICB3aGlsZSAoKnMgPiAn ICcpICAgICAgICAgICAgICAgIC8qIFNraXAgdG8gZW5kICovCisgICAgICAgICAgcysrOworICAg ICAgICAqcyA9IE5VTDsgICAgICAgICAgICAgICAgICAgICAgIC8qIFRlcm1pbmF0ZSB2YWx1ZSAq LworI2VuZGlmCS8qIENPTU1FTlQgKi8KKyAgICB9CisgICAgZGVidWcoRjExMCwia3d2YWwgYyIs Y2tjdG9hKGMpLDApOworICAgIGRlYnVnKEYxMTAsImt3dmFsIGtleXdvcmQiLGt3LDApOworICAg IGRlYnVnKEYxMTAsImt3dmFsIHZhbHVlIix2cCwwKTsKKyAgICBtYWtlc3RyKCZsYXN0a3d2YWws a3cpOworICAgIHZwID0gYnJzdHJpcCh2cCk7CisgICAgZGVidWcoRjExMCwia3d2YWwgdmFsdWUi LHZwLDApOworICAgIHggPSBhZGRtYWMoa3csdnApOworICAgIGRlYnVnKEYxMTEsImt3dmFsIGFk ZG1hYyIsa3cseCk7CisgIHhkb2t3dmFsOiAKKyAgICBpZiAocCkgZnJlZShwKTsKKyAgICByZXR1 cm4oKHggPCAwKSA/ICItMSIgOiByYyk7Cit9CisKK3N0YXRpYyBpbnQKK2lzYWFycmF5KHMpIGNo YXIgKiBzOyB7CQkJLyogSXMgcyBhbiBhc3NvY2lhdGl2ZSBhcnJheSBlbGVtZW50ICovCisgICAg aW50IHN0YXRlID0gMDsKKyAgICBDSEFSIGM7CisgICAgaWYgKCFzKSByZXR1cm4oMCk7CisgICAg d2hpbGUgKChjID0gKnMrKykpIHsKKwlpZiAoIWlzcHJpbnQoYykpIHsKKwkgICAgcmV0dXJuKDAp OworCX0gZWxzZSBpZiAoYyA9PSAnPCcpIHsKKwkgICAgaWYgKHN0YXRlICE9IDApCisJICAgICAg cmV0dXJuKDApOworCSAgICBzdGF0ZSA9IDE7CisJfSBlbHNlIGlmIChjID09ICc+JykgeworCSAg ICByZXR1cm4oKHN0YXRlICE9IDEgfHwgKnMpID8gMCA6IDEpOworCX0KKyAgICB9CisgICAgcmV0 dXJuKDApOworfQorCitzdGF0aWMgY2hhciAqICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog RXZhbHVhdGUgYnVpbHRpbiBmdW5jdGlvbnMgKi8KK2ZuZXZhbChmbixhcmdwLGFyZ24seHApIGNo YXIgKmZuLCAqYXJncFtdOyBpbnQgYXJnbjsgY2hhciAqIHhwOyB7CisgICAgaW50IGk9MCwgaj0w LCBrPTAsIGxlbjE9MCwgbGVuMj0wLCBsZW4zPTAsIG49MCwgdD0wLCB4PTAsIHk9MDsKKyAgICBp bnQgY3gsIGZhaWxlZCA9IDA7ICAgICAgICAgICAgICAgICAvKiBSZXR1cm4gY29kZSwgMCA9IG9r ICovCisgICAgbG9uZyB6ID0gMEw7CisgICAgY2hhciAqYnBbRk5BUkdTICsgMV07ICAgICAgICAg ICAgICAgLyogUG9pbnRlcnMgdG8gbWFsbG9jJ2Qgc3RyaW5ncyAqLworICAgIGNoYXIgYyA9IE5V TDsKKyAgICBjaGFyICpwID0gTlVMTCwgKnMgPSBOVUxMOworICAgIGNoYXIgKnZhbDEgPSBOVUxM LCAqdmFsMiA9IE5VTEw7ICAgIC8qIFBvaW50ZXJzIHRvIG51bWVyaWMgc3RyaW5nIHZhbHVlcyAq LworCisjaWZkZWYgUkVDVVJTSVZFCisgICAgaW50IHJzYXZlID0gcmVjdXJzaXZlOworI2VuZGlm IC8qIFJFQ1VSU0lWRSAqLworI2lmZGVmIE9TMgorICAgIGludCB6c2F2ZSA9IHp4cG47CisjZW5k aWYgLyogT1MyICovCisKKyAgICBpZiAoIWZuKSBmbiA9ICIiOyAgICAgICAgICAgICAgICAgICAv KiBQcm90ZWN0IGFnYWluc3QgbnVsbCBwb2ludGVycyAqLworICAgIGlmICghKmZuKSByZXR1cm4o IiIpOworCisgICAgZm9yIChpID0gMDsgaSA8IEZOQVJHUzsgaSsrKSAgICAgICAgLyogSW5pdGlh bGl6ZSBhcmd1bWVudCBwb2ludGVycyAqLworICAgICAgYnBbaV0gPSBOVUxMOworLyoKKyAgSU1Q T1JUQU5UOiBOb3RlIHRoYXQgYXJnbiBpcyBub3QgYW4gYWNjdXJhdGUgY291bnQgb2YgdGhlIG51 bWJlciBvZgorICBhcmd1bWVudHMuICBXZSBjYW4ndCByZWFsbHkgdGVsbCBpZiBhbiBhcmd1bWVu dCBpcyBudWxsIHVudGlsIGFmdGVyIHdlCisgIGV4ZWN1dGUgdGhlIGNvZGUgYmVsb3cuICBTbyBh cmduIGlzIHJlYWxseSB0aGUgbWF4aW11bSBudW1iZXIgb2YgYXJndW1lbnRzCisgIHdlIG1pZ2h0 IGhhdmUuICBBcmduIHNob3VsZCBhbHdheXMgYmUgYXQgbGVhc3QgMSwgZXZlbiBpZiB0aGUgZnVu Y3Rpb24gaXMKKyAgY2FsbGVkIHdpdGggZW1wdHkgcGFyZW50aGVzZXMgKGJ1dCBkb24ndCBjb3Vu dCBvbiBpdCkuCisqLworICAgIGRlYnVnKEYxMTEsImZuZXZhbCIsZm4sYXJnbik7CisgICAgZGVi dWcoRjExMCwiZm5ldmFsIixhcmdwWzBdLDApOworICAgIGlmIChhcmduID4gRk5BUkdTKSAgICAg ICAgICAgICAgICAgIC8qIERpc2NhcmQgZXhjZXNzIGFyZ3VtZW50cyAqLworICAgICAgYXJnbiA9 IEZOQVJHUzsKKworICAgIGZuZGVwdGgrKzsKKyAgICBkZWJ1ZyhGMTAxLCJmbmV2YWwgZm5kZXB0 aCIsIiIsZm5kZXB0aCk7CisgICAgcCA9IGZudmFsOworICAgIGZudmFsWzBdID0gTlVMOworICAg IHkgPSBsb29rdXAoZm5jdGFiLGZuLG5mdW5jcywmeCk7ICAgIC8qIExvb2sgdXAgdGhlIGZ1bmN0 aW9uIG5hbWUgKi8KKyAgICBjeCA9IHk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBC ZWNhdXNlIHkgaXMgdG9vIGdlbmVyaWMuLi4gKi8KKyAgICBpZiAoY3ggPCAwKSB7ICAgICAgICAg ICAgICAgICAgICAgICAgLyogTm90IGZvdW5kICovCisgICAgICAgIGZhaWxlZCA9IDE7CisgICAg ICAgIGlmIChmbmRpYWdzKSB7ICAgICAgICAgICAgICAgICAgLyogRlVOQ1RJT04gRElBR05PU1RJ QyBPTiAqLworICAgICAgICAgICAgaW50IHg7CisgICAgICAgICAgICB4ID0gc3RybGVuKGZuKTsK KyAgICAgICAgICAgIC8qIFRoZSBmb2xsb3dpbmcgc3ByaW50ZidzIGFyZSBzYWZlICovCisgICAg ICAgICAgICBzd2l0Y2ggKGN4KSB7CisgICAgICAgICAgICAgIGNhc2UgLTE6CisgICAgICAgICAg ICAgICAgaWYgKHggKyAzMiA8IEZOVkFMTCkKKyAgICAgICAgICAgICAgICAgIHNwcmludGYoZm52 YWwsIjxFUlJPUjpOT19TVUNIX0ZVTkNUSU9OOlxcZiVzKCk+Iixmbik7CisgICAgICAgICAgICAg ICAgZWxzZQorICAgICAgICAgICAgICAgICAgc3ByaW50ZihmbnZhbCwiPEVSUk9SOk5PX1NVQ0hf RlVOQ1RJT04+Iik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2Ug LTI6CisgICAgICAgICAgICAgICAgaWYgKHggKyAyNiA8IEZOVkFMTCkKKyAgICAgICAgICAgICAg ICAgIHNwcmludGYoZm52YWwsIjxFUlJPUjpOQU1FX0FNQklHVU9VUzpcXGYlcygpPiIsZm4pOwor ICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgIHNwcmludGYoZm52YWwsIjxF UlJPUjpOQU1FX0FNQklHVU9VUz4iKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg ICAgICAgY2FzZSAtMzoKKyAgICAgICAgICAgICAgICBzcHJpbnRmKGZudmFsLCI8RVJST1I6RlVO Q1RJT05fTkFNRV9NSVNTSU5HOlxcZigpPiIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg ICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGlmICh4ICsgMjYgPCBGTlZBTEwp CisgICAgICAgICAgICAgICAgICBzcHJpbnRmKGZudmFsLCI8RVJST1I6TE9PS1VQX0ZBSUxVUkU6 XFxmJXMoKT4iLGZuKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICBz cHJpbnRmKGZudmFsLCI8RVJST1I6TE9PS1VQX0ZBSUxVUkU+Iik7CisgICAgICAgICAgICAgICAg YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZ290byBmbmVuZDsgICAg ICAgICAgICAgICAgICAgICAvKiBBbHdheXMgbGVhdmUgdmlhIGNvbW1vbiBleGl0ICovCisgICAg fQorICAgIGZuID0gZm5jdGFiW3hdLmt3ZDsgICAgICAgICAgICAgICAgIC8qIEZ1bGwgbmFtZSBv ZiBmdW5jdGlvbiAqLworCisgICAgaWYgKGFyZ24gPCAwKSB7CisgICAgICAgIGZhaWxlZCA9IDE7 CisgICAgICAgIHAgPSBmbnZhbDsKKyAgICAgICAgaWYgKGZuZGlhZ3MpCisgICAgICAgICAgc3By aW50ZihmbnZhbCwiPEVSUk9SOk1JU1NJTkdfQVJHOlxcZiVzKCk+Iixmbik7CisgICAgICAgIGdv dG8gZm5lbmQ7CisgICAgfQorICAgIGlmIChjeCA9PSBGTl9MSVQpIHsgICAgICAgICAgICAgICAg IC8qIGxpdGVyYWwoYXJnMSkgKi8KKyAgICAgICAgZGVidWcoRjAxMCwiZmxpdCIseHAsMCk7Cisg ICAgICAgIHAgPSB4cCA/IHhwIDogIiI7ICAgICAgICAgICAgICAgLyogUmV0dXJuIGEgcG9pbnRl ciB0byBhcmcgaXRzZWxmICovCisgICAgICAgIGdvdG8gZm5lbmQ7CisgICAgfQorCisjaWZkZWYg REVCVUcKKyAgICBpZiAoZGVibG9nKSB7CisgICAgICAgIGludCBqOworICAgICAgICBmb3IgKGog PSAwOyBqIDwgYXJnbjsgaisrKQorCSAgZGVidWcoRjExMSwiZm5ldmFsIGFyZyIsYXJncFtqXSxq KTsKKyAgICB9CisjZW5kaWYgLyogREVCVUcgKi8KKyAgICBmb3IgKGogPSBhcmduLTE7IGogPj0g MDsgai0tKSB7ICAgICAvKiBVbmNvdW50IGVtcHR5IHRyYWlsaW5nIGFyZ3MgKi8KKyAgICAgICAg aWYgKCFhcmdwW2pdKQorICAgICAgICAgIGFyZ24tLTsKKyAgICAgICAgZWxzZSBpZiAoISooYXJn cFtqXSkpCisgICAgICAgICAgYXJnbi0tOworICAgICAgICBlbHNlIGJyZWFrOworICAgIH0KKyAg ICBkZWJ1ZyhGMTExLCJmbmV2YWwgYXJnbiIsZm4sYXJnbik7CisvKgorICBcZmxpdGVyYWwoKSBh bmQgXGZjb250ZW50cygpIGFyZSBzcGVjaWFsIGZ1bmN0aW9ucyB0aGF0IGRvIG5vdCBldmFsdWF0 ZQorICB0aGVpciBhcmd1bWVudHMsIGFuZCBhcmUgdHJlYXRlZCBzcGVjaWFsbHkgaGVyZS4gIEFm dGVyIHRoZXNlIGNvbWUgdGhlCisgIGZ1bmN0aW9ucyB3aG9zZSBhcmd1bWVudHMgYXJlIGV2YWx1 YXRlZCBpbiB0aGUgbm9ybWFsIHdheS4KKyovCisjaWZkZWYgQ09NTUVOVAorICAgIC8qIChtb3Zl ZCB1cCkgKi8KKyAgICBpZiAoY3ggPT0gRk5fTElUKSB7ICAgICAgICAgICAgICAgICAvKiBsaXRl cmFsKGFyZzEpICovCisgICAgICAgIGRlYnVnKEYxMTAsImZsaXQiLHhwLDApOworICAgICAgICBw ID0geHAgPyB4cCA6ICIiOyAgICAgICAgICAgICAgIC8qIFJldHVybiBhIHBvaW50ZXIgdG8gYXJn IGl0c2VsZiAqLworICAgICAgICBnb3RvIGZuZW5kOworICAgIH0KKyNlbmRpZiAvKiBDT01NRU5U ICovCisgICAgaWYgKGN4ID09IEZOX0NPTikgeyAgICAgICAgICAgICAgICAgLyogQ29udGVudHMg b2YgdmFyaWFibGUsIHVuZXhwYW5kZWQuICovCisgICAgICAgIGNoYXIgYzsKKyAgICAgICAgaW50 IHN1YnNjcmlwdCA9IDA7ICAgICAgICAKKyAgICAgICAgaWYgKCEocCA9IGFyZ3BbMF0pIHx8ICEq cCkgeworICAgICAgICAgICAgZmFpbGVkID0gMTsKKyAgICAgICAgICAgIHAgPSBmbnZhbDsKKyAg ICAgICAgICAgIGlmIChmbmRpYWdzKQorICAgICAgICAgICAgICBzcHJpbnRmKGZudmFsLCI8RVJS T1I6TUlTU0lOR19BUkc6XFxmY29udGVudHMoKT4iKTsKKyAgICAgICAgICAgIGdvdG8gZm5lbmQ7 CisgICAgICAgIH0KKyAgICAgICAgcCA9IGJyc3RyaXAocCk7CisgICAgICAgIGlmICgqcCA9PSBD TURRKSBwKys7CisgICAgICAgIGlmICgoYyA9ICpwKSA9PSAnJScpIHsgICAgICAgICAgLyogU2Nh bGFyIHZhcmlhYmxlLiAqLworICAgICAgICAgICAgYyA9ICorK3A7ICAgICAgICAgICAgICAgICAg IC8qIEdldCBJRCBjaGFyYWN0ZXIuICovCisgICAgICAgICAgICBwID0gIiI7ICAgICAgICAgICAg ICAgICAgICAgLyogQXNzdW1lIGRlZmluaXRpb24gaXMgZW1wdHkgKi8KKyAgICAgICAgICAgIGlm ICghYykgeyAgICAgICAgICAgICAgICAgICAvKiBEb3VibGUgcGFyYW5vaWEgKi8KKyAgICAgICAg ICAgICAgICBmYWlsZWQgPSAxOworICAgICAgICAgICAgICAgIHAgPSBmbnZhbDsKKyAgICAgICAg ICAgICAgICBpZiAoZm5kaWFncykKKyAgICAgICAgICAgICAgICAgIHNwcmludGYoZm52YWwsIjxF UlJPUjpBUkdfQkFEX1ZBUklBQkxFOlxcZmNvbnRlbnRzKCk+Iik7CisgICAgICAgICAgICAgICAg Z290byBmbmVuZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjID49ICcwJyAmJiBj IDw9ICc5JykgeyAvKiBEaWdpdCBmb3IgbWFjcm8gYXJnICovCisgICAgICAgICAgICAgICAgaWYg KG1hY2x2bCA8IDApICAgICAgICAgLyogRGlnaXQgdmFyaWFibGVzIGFyZSBnbG9iYWwgKi8KKyAg ICAgICAgICAgICAgICAgIHAgPSBnX3ZhcltjXTsgICAgICAgICAvKiBpZiBubyBtYWNybyBpcyBh Y3RpdmUgKi8KKyAgICAgICAgICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAvKiBvdGhl cndpc2UgKi8KKyAgICAgICAgICAgICAgICAgIHAgPSBtX2FyZ1ttYWNsdmxdW2MgLSAnMCddOyAv KiB0aGV5J3JlIG9uIHRoZSBzdGFjayAqLworICAgICAgICAgICAgfSBlbHNlIGlmIChjID09ICcq JykgeworI2lmZGVmIENPTU1FTlQKKyAgICAgICAgICAgICAgICBwID0gKG1hY2x2bCA+IC0xKSA/ IG1fbGluZVttYWNsdmxdIDogdG9wbGluZTsKKyAgICAgICAgICAgICAgICBpZiAoIXApIHAgPSAi IjsKKyNlbHNlCisgICAgICAgICAgICAgICAgaW50IG54ID0gRk5WQUxMOworICAgICAgICAgICAg ICAgIGNoYXIgKiBzeCA9IGZudmFsOworICAgICAgICAgICAgICAgIHAgPSBmbnZhbDsKKyNpZmRl ZiBDT01NRU5UCisgICAgICAgICAgICAgICAgaWYgKGNtZHNyYygpID09IDAgJiYgdG9wbGluZSkK KyAgICAgICAgICAgICAgICAgIHAgPSB0b3BsaW5lOworICAgICAgICAgICAgICAgIGVsc2UKKyNl bmRpZiAvKiBDT01NRU5UICovCisgICAgICAgICAgICAgICAgICBpZiAoenpzdHJpbmcoIlxcZmpv aW4oJl9bXSx7IH0sMSkiLCZzeCwmbngpIDwgMCkgeworICAgICAgICAgICAgICAgICAgICBmYWls ZWQgPSAxOworICAgICAgICAgICAgICAgICAgICBwID0gZm52YWw7CisgICAgICAgICAgICAgICAg ICAgIGlmIChmbmRpYWdzKQorICAgICAgICAgICAgICAgICAgICAgIHNwcmludGYoZm52YWwsIjxF UlJPUjpPVkVSRkxPVzpcXGZjb250ZW50cygpPiIpOworCQkgICAgZGVidWcoRjExMCwienpzdHJp bmcgZmNvbnRlbnRzKFxcJSopIixwLDApOworICAgICAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBD T01NRU5UICovCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChpc3Vw cGVyKGMpKSBjIC09ICgnYSctJ0EnKTsKKyAgICAgICAgICAgICAgICBwID0gZ192YXJbY107ICAg ICAgICAgICAvKiBMZXR0ZXIgZm9yIGdsb2JhbCB2YXJpYWJsZSAqLworICAgICAgICAgICAgfQor ICAgICAgICAgICAgaWYgKCFwKSBwID0gIiI7CisgICAgICAgICAgICBnb3RvIGZuZW5kOworICAg ICAgICB9IGVsc2UgaWYgKGMgPT0gJyYnKSB7ICAgICAgICAgIC8qIEFycmF5IHJlZmVyZW5jZS4g Ki8KKyAgICAgICAgICAgIGludCB2YmksIGQ7CisgICAgICAgICAgICBpZiAoYXJyYXluYW0ocCwm dmJpLCZkKSA8IDApIHsgLyogR2V0IG5hbWUgYW5kIHN1YnNjcmlwdCAqLworICAgICAgICAgICAg ICAgIGZhaWxlZCA9IDE7CisgICAgICAgICAgICAgICAgcCA9IGZudmFsOworICAgICAgICAgICAg ICAgIGlmIChmbmRpYWdzKQorICAgICAgICAgICAgICAgICAgc3ByaW50ZihmbnZhbCwiPEVSUk9S OkFSR19CQURfQVJSQVk6XFxmY29udGVudHMoKT4iKTsKKyAgICAgICAgICAgICAgICBnb3RvIGZu ZW5kOworICAgICAgICAgICAgfQorCSAgICBzdWJzY3JpcHQgPSBjaGthcnJheSh2YmksZCk7IC8q IENoZWNrIHRoZSBhcnJheSAqLworICAgICAgICAgICAgaWYgKHN1YnNjcmlwdCA+PSAwKSB7CS8q IEFycmF5IGlzIGRlY2xhcmVkPyAqLworICAgICAgICAgICAgICAgIHZiaSAtPSBBUlJBWUJBU0U7 ICAgICAgIC8qIENvbnZlcnQgbmFtZSB0byBpbmRleCAqLworICAgICAgICAgICAgICAgIGlmIChh X2RpbVt2YmldID49IGQpIHsgIC8qIElmIHN1YnNjcmlwdCBpbiByYW5nZSAqLworICAgICAgICAg ICAgICAgICAgICBjaGFyICoqYXA7CisgICAgICAgICAgICAgICAgICAgIGFwID0gYV9wdHJbdmJp XTsgICAgLyogZ2V0IGRhdGEgcG9pbnRlciAqLworICAgICAgICAgICAgICAgICAgICBpZiAoYXAp IHsgICAgICAgICAgIC8qIGFuZCBpZiB0aGVyZSBpcyBvbmUgKi8KKyAgICAgICAgICAgICAgICAg ICAgICAgIHAgPSBhcFtkXTsJLyogcmV0dXJuIGl0ICovCisgICAgICAgICAgICAgICAgICAgICAg ICBnb3RvIGZuZW5kOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgfSBlbHNlIHsJCQkvKiBBcnJheSBub3QgZGVjbGFyZWQgb3IgZWxlbWVudCAq LworICAgICAgICAgICAgICAgIGZudmFsWzBdID0gTlVMOwkJLyogb3V0IG9mIHJhbmdlIC0gcmV0 dXJuIG51bGwgc3RyaW5nICovCisgICAgICAgICAgICAgICAgcCA9IGZudmFsOwkJLyogZmRjIDIw MTAtMTItMzAgKi8KKyAgICAgICAgICAgICAgICBnb3RvIGZuZW5kOwkKKyAgICAgICAgICAgIH0K KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZhaWxlZCA9IDE7CisgICAgICAgICAgICBw ID0gZm52YWw7CisgICAgICAgICAgICBpZiAoZm5kaWFncykKKyAgICAgICAgICAgICAgc3ByaW50 ZihmbnZhbCwiPEVSUk9SOkFSR19OT1RfVkFSSUFCTEU6XFxmY29udGVudHMoKT4iKTsKKyAgICAg ICAgICAgIGdvdG8gZm5lbmQ7CisgICAgICAgIH0KKyAgICB9CisgICAgcCA9IGZudmFsOyAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogRGVmYXVsdCByZXN1bHQgcG9pbnRlciAqLworICAgIGZu dmFsWzBdID0gTlVMOyAgICAgICAgICAgICAgICAgICAgIC8qIERlZmF1bHQgcmVzdWx0ID0gZW1w dHkgc3RyaW5nICovCisKKyAgICBmb3IgKGkgPSAwOyBpIDwgYXJnbjsgaSsrKSB7ICAgICAgICAv KiBMb29wIHRvIGV4cGFuZCBlYWNoIGFyZ3VtZW50ICovCisgICAgICAgIG4gPSBNQVhBUkdMRU47 ICAgICAgICAgICAgICAgICAgLyogQWxsb3cgcGxlbnR5IG9mIHNwYWNlICovCisgICAgICAgIGJw W2ldID0gcyA9IG1hbGxvYyhuKzEpOyAgICAgICAgLyogQWxsb2NhdGUgc3BhY2UgZm9yIHRoaXMg YXJndW1lbnQgKi8KKyAgICAgICAgaWYgKGJwW2ldID09IE5VTEwpIHsgICAgICAgICAgICAvKiBI YW5kbGUgZmFpbHVyZSB0byBnZXQgc3BhY2UgKi8KKyAgICAgICAgICAgIGZhaWxlZCA9IDE7Cisg ICAgICAgICAgICBpZiAoZm5kaWFncykKKyAgICAgICAgICAgICAgY2ttYWttc2coZm52YWwsRk5W QUxMLCI8RVJST1I6TUFMTE9DX0ZBSUxVUkU6XFxmIixmbiwiKCk+IixOVUxMKTsKKyAgICAgICAg ICAgIGdvdG8gZm5lbmQ7CisgICAgICAgIH0KKyAgICAgICAgcCA9IGFyZ3BbaV0gPyBhcmdwW2ld IDogIiI7ICAgICAvKiBQb2ludCB0byB0aGlzIGFyZ3VtZW50ICovCisKKy8qCisgIFRyaW0gbGVh ZGluZyBhbmQgdHJhaWxpbmcgc3BhY2VzIGZyb20gdGhlIG9yaWdpbmFsIGFyZ3VtZW50LCBiZWZv cmUKKyAgZXZhbHVhdGlvbi4gIFRoaXMgY29kZSBuZXcgdG8gZWRpdCAxODQuICBGaXhlZCBpbiBl ZGl0IDE5OSB0byB0cmltCisgIGJsYW5rcyBCRUZPUkUgc3RyaXBwaW5nIGJyYWNlcy4KKworKi8K KyAgICAgICAgeworICAgICAgICAgICAgaW50IHgsIGo7CisgICAgICAgICAgICB4ID0gc3RybGVu KHApOworICAgICAgICAgICAgaiA9IHggLSAxOyAgICAgICAgICAgICAgICAgIC8qIFRyaW0gdHJh aWxpbmcgd2hpdGVzcGFjZSAqLworICAgICAgICAgICAgd2hpbGUgKGogPiAwICYmICgqKHAgKyBq KSA9PSBTUCB8fCAqKHAgKyBqKSA9PSBIVCkpCisgICAgICAgICAgICAgICoocCArIGotLSkgPSBO VUw7CisgICAgICAgICAgICB3aGlsZSAoKnAgPT0gU1AgfHwgKnAgPT0gSFQpIC8qIFN0cmlwIGxl YWRpbmcgd2hpdGVzcGFjZSAqLworICAgICAgICAgICAgICBwKys7CisgICAgICAgICAgICB4ID0g c3RybGVuKHApOworICAgICAgICAgICAgaWYgKCpwID09ICd7JyAmJiAqKHAreC0xKSA9PSAnfScp IHsgLyogTk9XIHN0cmlwIGJyYWNlcyAqLworICAgICAgICAgICAgICAgIHBbeC0xXSA9IE5VTDsK KyAgICAgICAgICAgICAgICBwKys7CisgICAgICAgICAgICAgICAgeCAtPSAyOworICAgICAgICAg ICAgfQorICAgICAgICB9CisKKy8qIE5vdyBldmFsdWF0ZSB0aGUgYXJndW1lbnQgKi8KKworICAg ICAgICBkZWJ1ZyhGMTExLCJmbmV2YWwgY2FsbGluZyB6enN0cmluZyIscCxuKTsKKyAgICAgICAg dCA9IHp6c3RyaW5nKHAsJnMsJm4pOyAgICAgICAgICAvKiBFeHBhbmQgYXJnIGludG8gbmV3IHNw YWNlICovCisgICAgICAgIGRlYnVnKEYxMDEsImZuZXZhbCB6enN0cmluZyIsIiIsdCk7CisgICAg ICAgIGRlYnVnKEYxMDEsImZuZXZhbCB6enN0cmluZyIsIiIsbik7CisgICAgICAgIGlmICh0IDwg MCkgeworICAgICAgICAgICAgZGVidWcoRjEwMSwiZm5ldmFsIHp6c3RyaW5nIGZhaWxzLCBhcmci LCIiLGkpOworICAgICAgICAgICAgZmFpbGVkID0gMTsKKyAgICAgICAgICAgIGlmIChmbmRpYWdz KSB7CisgICAgICAgICAgICAgICAgaWYgKG4gPT0gMCkKKyAgICAgICAgICAgICAgICAgIGNrbWFr bXNnKGZudmFsLEZOVkFMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICI8RVJST1I6QVJH X1RPT19MT05HOlxcZiIsZm4sIigpPiIsTlVMTCk7CisgICAgICAgICAgICAgICAgZWxzZQorICAg ICAgICAgICAgICAgICAgY2ttYWttc2coZm52YWwsRk5WQUxMLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgIjxFUlJPUjpBUkdfRVZBTF9GQUlMVVJFOlxcZiIsZm4sIigpPiIsTlVMTCk7Cisg ICAgICAgICAgICB9CisgICAgICAgICAgICBnb3RvIGZuZW5kOworICAgICAgICB9CisgICAgICAg IGRlYnVnKEYxMTEsImZuZXZhbCBhcmciLGJwW2ldLGkpOworICAgIH0KKworI2lmZGVmIERFQlVH CisgICAgaWYgKGRlYmxvZykgeworICAgICAgICBpbnQgajsKKyAgICAgICAgZm9yIChqID0gMDsg aiA8IGFyZ247IGorKykgeworICAgICAgICAgICAgZGVidWcoRjExMSwiZm5ldmFsIGFyZyBwb3N0 IGV2YWwiLGFyZ3Bbal0saik7CisgICAgICAgICAgICBkZWJ1ZyhGMTExLCJmbmV2YWwgZXZhbHVh dGVkIGFyZyIsYnBbal0saik7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgLyogREVCVUcgKi8K KyAgICB7CisJLyogQWRqdXN0IGFyZ24gZm9yIGVtcHR5IHRyYWlsaW5nIGFyZ3VtZW50cy4gKi8K KwkvKiBGb3IgZXhhbXBsZSB3aGVuIGFuIGFyZyBpcyBhIHZhcmlhYmxlIG5hbWUgYnV0IHRoZSAq LworCS8qIHZhcmlhYmxlIGhhcyBubyB2YWx1ZS4gICBKdWx5IDIwMDYuICovCisJaW50IGosIG9s ZDsgY2hhciAqcDsKKwlvbGQgPSBhcmduOworCWZvciAoaiA9IGFyZ24gLSAxOyBqID49IDA7IGot LSkgeworCSAgICBwID0gYnBbal07CisJICAgIGlmICghcCkKKwkgICAgICBhcmduLS07CisJICAg IGVsc2UgaWYgKCEqcCkKKwkgICAgICBhcmduLS07CisJICAgIGVsc2UKKwkgICAgICBicmVhazsK Kwl9CisjaWZkZWYgREVCVUcKKwlpZiAoYXJnbiAhPSBvbGQpCisJICBkZWJ1ZyhGMTAxLCJmbmV2 YWwgYWRqdXN0ZWQgYXJnbiIsIiIsYXJnbik7CisjZW5kaWYJLyogREVCVUcgKi8KKyAgICB9CQor CisvKgorICBGcm9tIHRoaXMgcG9pbnQgb24sIGJwWzAuLmFyZ24tMV0gYXJlIG5vdCBOVUxMIGFu ZCBhbGwgbXVzdCBiZSBmcmVlZAorICBiZWZvcmUgcmV0dXJuaW5nLgorKi8KKyAgICBpZiAoYXJn biA8IDEpIHsgICAgICAgICAgICAgICAgICAgICAvKiBDYXRjaCByZXF1aXJlZCBhcmdzIG1pc3Np bmcgKi8KKyAgICAgICAgc3dpdGNoIChjeCkgeworICAgICAgICAgIGNhc2UgRk5fREVGOgorICAg ICAgICAgIGNhc2UgRk5fRVZBOgorICAgICAgICAgIGNhc2UgRk5fRVhFOgorICAgICAgICAgIGNh c2UgRk5fQ0hSOgorICAgICAgICAgIGNhc2UgRk5fQ09EOgorICAgICAgICAgIGNhc2UgRk5fTUFY OgorICAgICAgICAgIGNhc2UgRk5fTUlOOgorICAgICAgICAgIGNhc2UgRk5fTU9EOgorICAgICAg ICAgIGNhc2UgRk5fRkQ6CisgICAgICAgICAgY2FzZSBGTl9GUzoKKyAgICAgICAgICBjYXNlIEZO X1RPRDoKKyAgICAgICAgICBjYXNlIEZOX0ZGTjoKKyAgICAgICAgICBjYXNlIEZOX0JTTjoKKyAg ICAgICAgICBjYXNlIEZOX1JBVzoKKyAgICAgICAgICBjYXNlIEZOX0NNRDoKKyAgICAgICAgICBj YXNlIEZOXzJIRVg6CisgICAgICAgICAgY2FzZSBGTl8yT0NUOgorICAgICAgICAgIGNhc2UgRk5f RE5BTToKKyNpZmRlZiBGTl9FUlJNU0cKKyAgICAgICAgICBjYXNlIEZOX0VSUk1TRzoKKyNlbmRp ZiAvKiBGTl9FUlJNU0cgKi8KKyNpZmRlZiBDS19LRVJCRVJPUworICAgICAgICAgIGNhc2UgRk5f S1JCX1RLOgorICAgICAgICAgIGNhc2UgRk5fS1JCX05YOgorICAgICAgICAgIGNhc2UgRk5fS1JC X0lWOgorICAgICAgICAgIGNhc2UgRk5fS1JCX1RUOgorICAgICAgICAgIGNhc2UgRk5fS1JCX0ZH OgorI2VuZGlmIC8qIENLX0tFUkJFUk9TICovCisgICAgICAgICAgY2FzZSBGTl9NSkQyOgorICAg ICAgICAgIGNhc2UgRk5fTjJUSU06CisgICAgICAgICAgY2FzZSBGTl9ESU06CisgICAgICAgICAg Y2FzZSBGTl9EQVRFSjoKKyAgICAgICAgICBjYXNlIEZOX1BOQ1ZUOgorICAgICAgICAgIGNhc2Ug Rk5fUEVSTToKKyAgICAgICAgICBjYXNlIEZOX0FMT09LOgorICAgICAgICAgIGNhc2UgRk5fVExP T0s6CisgICAgICAgICAgY2FzZSBGTl9BQlM6CisgICAgICAgICAgY2FzZSBGTl9BQURVTVA6Cisg ICAgICAgICAgY2FzZSBGTl9KT0lOOgorI2lmZGVmIENLRkxPQVQKKyAgICAgICAgICBjYXNlIEZO X0ZQQUJTOgorICAgICAgICAgIGNhc2UgRk5fRlBFWFA6CisgICAgICAgICAgY2FzZSBGTl9GUExP RzoKKyAgICAgICAgICBjYXNlIEZOX0ZQTE46CisgICAgICAgICAgY2FzZSBGTl9GUE1PRDoKKyAg ICAgICAgICBjYXNlIEZOX0ZQU1FSOgorICAgICAgICAgIGNhc2UgRk5fRlBBREQ6CisgICAgICAg ICAgY2FzZSBGTl9GUERJVjoKKyAgICAgICAgICBjYXNlIEZOX0ZQTVVMOgorICAgICAgICAgIGNh c2UgRk5fRlBQT1c6CisgICAgICAgICAgY2FzZSBGTl9GUFNVQjoKKyAgICAgICAgICBjYXNlIEZO X0ZQSU5UOgorICAgICAgICAgIGNhc2UgRk5fRlBST1U6CisgICAgICAgICAgY2FzZSBGTl9GUFNJ TjoKKyAgICAgICAgICBjYXNlIEZOX0ZQQ09TOgorICAgICAgICAgIGNhc2UgRk5fRlBUQU46Cisj ZW5kaWYgLyogQ0tGTE9BVCAqLworI2lmZGVmIFRDUFNPQ0tFVAorICAgICAgICAgIGNhc2UgRk5f SFNUQUREOgorICAgICAgICAgIGNhc2UgRk5fSFNUTkFNOgorI2VuZGlmIC8qIFRDUFNPQ0tFVCAq LworICAgICAgICAgIGNhc2UgRk5fREVMU0VDOgorI2lmZGVmIENPTU1FTlQKKyAgICAgICAgICBj YXNlIEZOX0tXVkFMOgorICAgICAgICAgIGNhc2UgRk5fU0xFRVA6CisgICAgICAgICAgY2FzZSBG Tl9NU0xFRVA6CisjZW5kaWYgLyogQ09NTUVOVCAqLworI2lmZGVmIE5UCisgICAgICAgICAgY2Fz ZSBGTl9TTkFNRToKKyAgICAgICAgICBjYXNlIEZOX0xOQU1FOgorI2VuZGlmIC8qIE5UICovCisg ICAgICAgICAgICBmYWlsZWQgPSAxOworICAgICAgICAgICAgcCA9IGZudmFsOworICAgICAgICAg ICAgaWYgKGZuZGlhZ3MpCisgICAgICAgICAgICAgIGNrbWFrbXNnKGZudmFsLEZOVkFMTCwiPEVS Uk9SOk1JU1NJTkdfQVJHOlxcZiIsZm4sIigpPiIsTlVMTCk7CisgICAgICAgICAgICBnb3RvIGZu ZW5kOworICAgICAgICB9CisgICAgfQorICAgIHAgPSBmbnZhbDsgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIFJlc2V0IHRoZXNlIGFnYWluLiAqLworICAgIGZudmFsWzBdID0gTlVMOworCisg ICAgc3dpdGNoIChjeCkgeyAgICAgICAgICAgICAgICAgICAgICAgLyogRG8gZnVuY3Rpb24gb24g ZXhwYW5kZWQgYXJncy4gKi8KKyNpZmRlZiBUQ1BTT0NLRVQKKyAgICAgIGNhc2UgRk5fSFNUQURE OgorICAgICAgICBwID0gY2thZGRyMm5hbWUoYnBbMF0pOworICAgICAgICBnb3RvIGZuZW5kOwor ICAgICAgY2FzZSBGTl9IU1ROQU06CisgICAgICAgIHAgPSBja25hbWUyYWRkcihicFswXSk7Cisg ICAgICAgIGdvdG8gZm5lbmQ7CisjZW5kaWYgLyogVENQU09DS0VUICovCisKKyAgICAgIGNhc2Ug Rk5fREVGOiAgICAgICAgICAgICAgICAgICAgICAvKiBcZmRlZmluaXRpb24oYXJnMSkgKi8KKyAg ICAgICAgayA9IGlzYWFycmF5KGJwWzBdKSA/CisJICAgIG14eGxvb2sobWFjdGFiLGJwWzBdLG5t YWMpIDoKKwkJbXhsb29rKG1hY3RhYixicFswXSxubWFjKTsKKyAgICAgICAgcCA9IChrID4gLTEp ID8gbWFjdGFiW2tdLm12YWwgOiAiIjsKKyAgICAgICAgZ290byBmbmVuZDsKKworICAgICAgY2Fz ZSBGTl9FVkE6ICAgICAgICAgICAgICAgICAgICAgIC8qIFxmZXZhbHVhdGUoYXJnMSkgKi8KKyAg ICAgICAgcCA9ICooYnBbMF0pID8gZXZhbHgoYnBbMF0pIDogIiI7CisgICAgICAgIGlmICghKnAg JiYgZm5kaWFncykgeworICAgICAgICAgICAgZmFpbGVkID0gMTsKKyAgICAgICAgICAgIHAgPSBm bnZhbDsKKyAgICAgICAgICAgIGV2YWxlcnIoZm4pOworICAgICAgICB9CisgICAgICAgIGdvdG8g Zm5lbmQ7CisKKyAgICAgIGNhc2UgRk5fRVhFOiAgICAgICAgICAgICAgICAgICAgICAvKiBcZmV4 ZWN1dGUoYXJnMSkgKi8KKyAgICAgICAgaiA9IChpbnQpc3RybGVuKHMgPSBicFswXSk7ICAgICAv KiBMZW5ndGggb2YgbWFjcm8gaW52b2NhdGlvbiAqLworICAgICAgICBwID0gIiI7ICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIEluaXRpYWxpemUgcmV0dXJuIHZhbHVlIHRvIG51bGwgKi8KKyAg ICAgICAgaWYgKGopIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBJZiB0aGVyZSBpcyBhIG1h Y3JvIHRvIGV4ZWN1dGUgKi8KKyAgICAgICAgICAgIHdoaWxlICgqcyA9PSBTUCkgcysrLGotLTsg ICAvKiBzdHJpcCBsZWFkaW5nIHNwYWNlcyAqLworICAgICAgICAgICAgcCA9IHM7ICAgICAgICAg ICAgICAgICAgICAgIC8qIHJlbWVtYmVyIGJlZ2lubmluZyBvZiBtYWNybyBuYW1lICovCisgICAg ICAgICAgICBmb3IgKGkgPSAwOyBpIDwgajsgaSsrKSB7ICAgLyogZmluZCBlbmQgb2YgbWFjcm8g bmFtZSAqLworICAgICAgICAgICAgICAgIGlmICgqcyA9PSBTUCkKKyAgICAgICAgICAgICAgICAg IGJyZWFrOworICAgICAgICAgICAgICAgIHMrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg IGlmICgqcyA9PSBTUCkgICAgICAgeyAgICAgICAvKiBpZiB0aGVyZSB3YXMgYSBzcGFjZSBhZnRl ciAqLworICAgICAgICAgICAgICAgICpzKysgPSBOVUw7ICAgICAgICAgICAgIC8qIHRlcm1pbmF0 ZSB0aGUgbWFjcm8gbmFtZSAqLworICAgICAgICAgICAgICAgIHdoaWxlICgqcyA9PSBTUCkgcysr OyAgIC8qIHNraXAgcGFzdCBhbnkgZXh0cmEgc3BhY2VzICovCisgICAgICAgICAgICB9IGVsc2UK KyAgICAgICAgICAgICAgcyA9ICIiOyAgICAgICAgICAgICAgICAgICAvKiBtYXliZSB0aGVyZSBh cmUgbm8gYXJndW1lbnRzICovCisgICAgICAgICAgICBpZiAocCAmJiAqcCkgeworICAgICAgICAg ICAgICAgIGsgPSBtbG9vayhtYWN0YWIscCxubWFjKTsgLyogTG9vayB1cCB0aGUgbWFjcm8gbmFt ZSAqLworICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsImZleGVjIG1sb29rIixwLGspOworICAg ICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgIGsgPSAtMTsKKyAgICAgICAgICAgIGlmIChr IDwgMCkgeworICAgICAgICAgICAgICAgIGNoYXIgKiBwMiA9IHA7CisgICAgICAgICAgICAgICAg ZmFpbGVkID0gMTsKKyAgICAgICAgICAgICAgICBwID0gZm52YWw7CisgICAgICAgICAgICAgICAg aWYgKGZuZGlhZ3MpCisgICAgICAgICAgICAgICAgICBja21ha3htc2coZm52YWwsRk5WQUxMLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8RVJST1I6Tk9fU1VDSF9NQUNSTzpcXGYiLGZu LCIoIixwMiwiKT4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsTlVMTCxOVUxM LE5VTEwsTlVMTCxOVUxMLE5VTEwpOworICAgICAgICAgICAgICAgIGdvdG8gZm5lbmQ7CisgICAg ICAgICAgICB9CisvKgorICBUaGlzIGlzIGp1c3QgYSBXRUUgYml0IGRhbmdlcm91cyBiZWNhdXNl IHdlIGFyZSBjb3B5aW5nIHVwIHRvIDkgYXJndW1lbnRzCisgIGludG8gdGhlIHNwYWNlIHJlc2Vy dmVkIGZvciBvbmUuICBJdCB3b24ndCBvdmVycnVuIHRoZSBidWZmZXIsIGJ1dCBpZiB0aGVyZQor ICBhcmUgbG90cyBvZiBsb25nIGFyZ3VtZW50cyB3ZSBtaWdodCBsb3NlIHNvbWUuICBUaGUgb3Ro ZXIgcHJvYmxlbSBpcyB0aGF0IGlmCisgIHRoZSBtYWNybyBoYXMgbW9yZSB0aGFuIDMgYXJndW1l bnRzLCB0aGUgNHRoIHRocm91Z2ggbGFzdCBhcmUgYWxsCisgIGNvbmNhdGVuYXRlZCBvbnRvIHRo ZSB0aGlyZC4gIChUaGUgd29ya2Fyb3VuZCBpcyB0byB1c2Ugc3BhY2VzIHJhdGhlciB0aGFuCisg IGNvbW1hcyB0byBzZXBhcmF0ZSB0aGVtLikgIExlYXZpbmcgaXQgbGlrZSB0aGlzIHRvIGF2b2lk IGhhdmluZyB0byBhbGxvY2F0ZQorICB0b25zIG1vcmUgYnVmZmVycy4KKyovCisgICAgICAgICAg ICBpZiAoYXJnbiA+IDEpIHsgICAgICAgICAgICAgLyogQ29tbWFzIHVzZWQgaW5zdGVhZCBvZiBz cGFjZXMgKi8KKyAgICAgICAgICAgICAgICBpbnQgaTsKKyAgICAgICAgICAgICAgICBjaGFyICpw ID0gYnBbMF07ICAgICAgICAvKiBSZXVzZSB0aGlzIHNwYWNlICovCisgICAgICAgICAgICAgICAg KnAgPSBOVUw7ICAgICAgICAgICAgICAgLyogTWFrZSBpbnRvIGRvZG8oKSBhcmcgbGlzdCAqLwor ICAgICAgICAgICAgICAgIGZvciAoaSA9IDE7IGkgPCBhcmduOyBpKyspIHsKKyAgICAgICAgICAg ICAgICAgICAgY2tzdHJuY2F0KHAsYnBbaV0sTUFYQVJHTEVOKTsKKyAgICAgICAgICAgICAgICAg ICAgY2tzdHJuY2F0KHAsIiAiLE1BWEFSR0xFTik7CisgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICAgIHMgPSBicFswXTsgICAgICAgICAgICAgIC8qIFBvaW50IHRvIG5ldyBsaXN0ICov CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwID0gIiI7ICAgICAgICAgICAgICAgICAgICAg LyogSW5pdGlhbGl6ZSByZXR1cm4gdmFsdWUgKi8KKyAgICAgICAgICAgIGlmIChrID49IDApIHsg ICAgICAgICAgICAgICAvKiBJZiBtYWNybyBmb3VuZCBpbiB0YWJsZSAqLworICAgICAgICAgICAg ICAgIC8qIEdvIHNldCBpdCB1cCAobGlrZSBETyBjbWQpICovCisgICAgICAgICAgICAgICAgaWYg KChqID0gZG9kbyhrLHMsY21kc3RrW2NtZGx2bF0uY2NmbGdzKSkgPiAwKSB7CisgICAgICAgICAg ICAgICAgICAgIGlmIChjbXB1c2goKSA+IC0xKSB7IC8qIFB1c2ggY29tbWFuZCBwYXJzZXIgc3Rh dGUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVybiBpbnQgaWZjOworICAgICAgICAg ICAgICAgICAgICAgICAgaW50IGlmY3NhdiA9IGlmYzsgLyogUHVzaCBJRiBjb25kaXRpb24gb24g c3RhY2sgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGsgPSBwYXJzZXIoMSk7ICAvKiBDYWxs IHBhcnNlciB0byBleGVjdXRlIHRoZSBtYWNybyAqLworICAgICAgICAgICAgICAgICAgICAgICAg Y21wb3AoKTsgICAgICAgIC8qIFBvcCBjb21tYW5kIHBhcnNlciAqLworICAgICAgICAgICAgICAg ICAgICAgICAgaWZjID0gaWZjc2F2OyAgIC8qIFJlc3RvcmUgSUYgY29uZGl0aW9uICovCisgICAg ICAgICAgICAgICAgICAgICAgICBpZiAoayA9PSAwKSB7ICAgLyogTm8gZXJyb3JzLCBpZ25vcmUg YWN0aW9uIGNtZHMuICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCA9IG1ydmFsW21h Y2x2bCsxXTsgLyogSWYgT0ssIHNldCByZXR1cm4gdmFsdWUuICovCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaWYgKHAgPT0gTlVMTCkgcCA9ICIiOworICAgICAgICAgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgIC8qIENhbid0IHB1 c2ggYW55IG1vcmUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDAsInp6c3Ry aW5nIGZuZXZhbCBmZXhlYyBmYWlsdXJlIiwiIiwwKTsKKyAgICAgICAgICAgICAgICAgICAgICAg IHByaW50ZigiXG4/XFxmZXhlYygpIHRvbyBkZWVwbHkgbmVzdGVkXG4iKTsKKyAgICAgICAgICAg ICAgICAgICAgICAgIHdoaWxlIChjbXBvcCgpID4gLTEpIDsKKyAgICAgICAgICAgICAgICAgICAg ICAgIHAgPSAiIjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBkZWJ1ZyhGMTEwLCJ6enN0cmluZyBmbmV2 YWwgZmV4ZWN1dGUgZmluYWwgcCIscCwwKTsKKyAgICAgICAgZ290byBmbmVuZDsKKworI2lmZGVm IFJFQ1VSU0lWRQorICAgICAgY2FzZSBGTl9SRElSOiAgICAgICAgICAgICAgICAgICAgIC8qIFxm cmRpci4uKCkgLSBSZWN1cnNpdmUgZGlyIGNvdW50ICovCisgICAgICBjYXNlIEZOX1JGSUw6ICAg ICAgICAgICAgICAgICAgICAgLyogXGZyZmlsZXMoKSAtIFJlY3Vyc2l2ZSBmaWxlIGNvdW50ICov CisgICAgICAgIC8qIHJlY3Vyc2l2ZSA9IDI7ICovICAgICAgICAgICAgLyogZmFsbCB0aHJ1Li4u ICovCisjZW5kaWYgLyogUkVDVVJTSVZFICovCisgICAgICBjYXNlIEZOX0ZDOiAgICAgICAgICAg ICAgICAgICAgICAgLyogXGZmaWxlcygpIC0gRmlsZSBjb3VudC4gKi8KKyAgICAgIGNhc2UgRk5f RElSOiB7ICAgICAgICAgICAgICAgICAgICAvKiBcZmZkaXIuKCkgLSBEaXJlY3RvcnkgY291bnQu ICovCisgICAgICAgICAgY2hhciBhYnVmWzE2XSwgKnM7CisgICAgICAgICAgY2hhciAqKiBhcCA9 IE5VTEw7CisgICAgICAgICAgaW50IHgsIHhmbGFncyA9IDA7CisgICAgICAgICAgaWYgKG1hdGNo ZG90KQorICAgICAgICAgICAgeGZsYWdzIHw9IFpYX01BVENIRE9UOworICAgICAgICAgIGlmIChj eCA9PSBGTl9SRElSIHx8IGN4ID09IEZOX1JGSUwpIHsKKyAgICAgICAgICAgICAgeGZsYWdzIHw9 IFpYX1JFQ1VSU0U7CisjaWZkZWYgQ0tTWU1MSU5LCisgICAgICAgICAgICAgIC8qIFJlY3Vyc2l2 ZSAtIGRvbid0IGZvbGxvdyBzeW1saW5rcyAqLworICAgICAgICAgICAgICB4ZmxhZ3MgfD0gWlhf Tk9MSU5LUzsKKyNlbmRpZiAvKiBDS1NZTUxJTksgKi8KKyAgICAgICAgICB9CisgICAgICAgICAg ZmFpbGVkID0gMDsKKyAgICAgICAgICBpZiAoYXJnbiA8IDEpIHsKKyAgICAgICAgICAgICAgcCA9 ICIwIjsKKyAgICAgICAgICAgICAgZ290byBmbmVuZDsKKyAgICAgICAgICB9CisgICAgICAgICAg aWYgKGN4ID09IEZOX0RJUiB8fCBjeCA9PSBGTl9SRElSKSB7IC8qIE9ubHkgbGlzdCBkaXJlY3Rv cmllcyAqLworCSAgICAgIGRlYnVnKEYxMDAsIkZOX0RJUiBvciBGTl9SRElSIiwiIiwwKTsKKyAg ICAgICAgICAgICAgeGZsYWdzIHw9IFpYX0RJUk9OTFk7CisjaWZkZWYgT1MyCisgICAgICAgICAg ICAgIHp4cG4gPSAxOyAgICAgICAgICAgICAgICAgLyogVXNlIHRoZSBhbHRlcm5hdGUgbGlzdCAq LworI2VuZGlmIC8qIE9TMiAqLworICAgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAg ICAgIC8qIExpc3Qgb25seSBmaWxlcyAqLworCSAgICAgIGRlYnVnKEYxMDAsIk5vdCBGTl9ESVIg b3IgRk5fUkRJUiIsIiIsMCk7CisgICAgICAgICAgICAgIHhmbGFncyB8PSBaWF9GSUxPTkxZOwor I2lmZGVmIE9TMgorICAgICAgICAgICAgICB6eHBuID0gMTsgICAgICAgICAgICAgICAgIC8qIFVz ZSB0aGUgYWx0ZXJuYXRlIGxpc3QgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAgICB9Cisg ICAgICAgICAgaWYgKCooYnBbMF0pKSB7CisgICAgICAgICAgICAgIGsgPSBuenhwYW5kKGJwWzBd LHhmbGFncyk7CisgICAgICAgICAgICAgIGlmIChrIDwgMCkgayA9IDA7CisgICAgICAgICAgICAg IHNwcmludGYoZm52YWwsIiVkIixrKTsgICAgLyogU0FGRSAqLworICAgICAgICAgICAgICBwID0g Zm52YWw7CisgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBwID0gIjAiOworCisgICAgICAg ICAgaWYgKGFyZ24gPiAxKSB7ICAgICAgICAgICAgICAgLyogQXNzaWduIGxpc3QgdG8gYXJyYXkg Ki8KKyAgICAgICAgICAgICAgZm52YWxbMF0gPSBOVUw7ICAgICAgICAgICAvKiBJbml0aWFsIHJl dHVybiB2YWx1ZSAqLworICAgICAgICAgICAgICBja3N0cm5jcHkoYWJ1ZixicFsxXSwxNik7IC8q IEdldCBhcnJheSByZWZlcmVuY2UgKi8KKyAgICAgICAgICAgICAgcyA9IGFidWY7CisgICAgICAg ICAgICAgIGlmICgqcyA9PSBDTURRKSBzKys7CisgICAgICAgICAgICAgIGZhaWxlZCA9IDE7ICAg ICAgICAgICAgICAgLyogQXNzdW1lIGl0J3MgYmFkICovCisgICAgICAgICAgICAgIHAgPSBmbnZh bDsgICAgICAgICAgICAgICAgLyogUG9pbnQgdG8gcmVzdWx0ICovCisgICAgICAgICAgICAgIGlm IChmbmRpYWdzKSAgICAgICAgICAgICAgLyogRGVmYXVsdCBpcyB0aGlzIGVycm9yIG1lc3NhZ2Ug Ki8KKyAgICAgICAgICAgICAgICBja21ha21zZyhmbnZhbCxGTlZBTEwsCisgICAgICAgICAgICAg ICAgICAgICAgICAgIjxFUlJPUjpBUkdfQkFEX0FSUkFZOlxcZiIsZm4sIigpPiIsTlVMTCk7Cisg ICAgICAgICAgICAgIGlmIChzWzBdICE9ICcmJykgICAgICAgICAgLyogIkFkZHJlc3MiIG9mIGFy cmF5ICovCisgICAgICAgICAgICAgICAgZ290byBmbmVuZDsKKyAgICAgICAgICAgICAgaWYgKHNb Ml0pCisgICAgICAgICAgICAgICAgaWYgKHNbMl0gIT0gJ1snIHx8IHNbM10gIT0gJ10nKQorICAg ICAgICAgICAgICAgICAgZ290byBmbmVuZDsKKyAgICAgICAgICAgICAgaWYgKHNbMV0gPj0gNjQg JiYgc1sxXSA8IDkxKSAvKiBDb252ZXJ0IHVwcGVyIHRvIGxvd2VyICovCisgICAgICAgICAgICAg ICAgc1sxXSArPSAzMjsKKyAgICAgICAgICAgICAgaWYgKCh4ID0gZGNsYXJyYXkoc1sxXSxrKSkg PCAwKSAvKiBGaWxlIGxpc3QgcGx1cyBjb3VudCAqLworICAgICAgICAgICAgICAgIGdvdG8gZm5l bmQ7CisgICAgICAgICAgICAgIGZhaWxlZCA9IDA7ICAgICAgICAgICAgICAgLyogVW5zZXQgZmFp bHVyZSBmbGFnICovCisgICAgICAgICAgICAgIGFwID0gYV9wdHJbeF07ICAgICAgICAgICAgLyog UG9pbnQgdG8gYXJyYXkgd2UganVzdCBkZWNsYXJlZCAqLworICAgICAgICAgICAgICBzcHJpbnRm KGZudmFsLCIlZCIsayk7ICAgIC8qIFNBRkUgKi8KKyAgICAgICAgICB9CisjaWZkZWYgT1MyCisg ICAgICAgICAgaWYgKGFwKSB7ICAgICAgICAgICAgICAgICAgICAgLyogV2UgYXJlIG1ha2luZyBh biBhcnJheSAqLworICAgICAgICAgICAgICBpbnQgaTsKKyAgICAgICAgICAgICAgY2hhciB0bXBb MTZdOworICAgICAgICAgICAgICBhcFswXSA9IE5VTEw7ICAgICAgICAgICAgIC8qIENvbnRhaW5p bmcgbnVtYmVyIG9mIGZpbGVzICAgICovCisgICAgICAgICAgICAgIG1ha2VzdHIoJihhcFswXSks Y2tpdG9hKGspKTsKKworICAgICAgICAgICAgICBja3N0cm5jcHkodG1wLGZudmFsLDE2KTsgIC8q IFNhdmUgcmV0dXJuIHZhbHVlICovCisKKyAgICAgICAgICAgICAgZm9yIChpID0gMTsgaSA8PSBr OyBpKyspIHsgLyogRmlsbCBpdCAqLworICAgICAgICAgICAgICAgICAgYXBbaV0gPSBOVUxMOwor ICAgICAgICAgICAgICAgICAgem5leHQoZm52YWwpOyAgICAgICAgIC8qIE5leHQgZmlsZW5hbWUg Ki8KKyAgICAgICAgICAgICAgICAgIGlmICghKmZudmFsKSAgICAgICAgICAvKiBObyBtb3JlLCBk b25lICovCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgLyogSW4gY2Fz ZSBhIHByZW1hdHVyZSBlbmQgKi8KKyAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJihhcFtpXSks Zm52YWwpOworICAgICAgICAgICAgICB9CisjaWZkZWYgWlhSRVdJTkQKKyAgICAgICAgICAgICAg ayA9IHp4cmV3aW5kKCk7ICAgICAgICAgICAvKiBSZXNldCB0aGUgZmlsZSBleHBhbnNpb24gKi8K KyNlbHNlCisgICAgICAgICAgICAgIGsgPSBuenhwYW5kKGJwWzBdLHhmbGFncyk7CisjZW5kaWYg LyogWlhSRVdJTkQgKi8KKyAgICAgICAgICAgICAgY2tzdHJuY3B5KGZudmFsLHRtcCxGTlZBTEwp OyAvKiBSZXN0b3JlIHJldHVybiB2YWx1ZSAqLworICAgICAgICAgIH0KKyNlbHNlIC8qIE9TMiAq LworICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1ha2UgY29waWVz IG9mIHRoZSBsaXN0ICovCisgICAgICAgICAgICAgIGludCBpOyBjaGFyIHRtcFsxNl07CisgICAg ICAgICAgICAgIGlmIChmbGlzdCkgeyAgICAgICAgICAgICAgLyogRnJlZSBvbGQgZmlsZSBsaXN0 LCBpZiBhbnkgKi8KKyAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGZsaXN0W2ldOyBpKysp IHsgLyogYW5kIGVhY2ggc3RyaW5nICovCisgICAgICAgICAgICAgICAgICAgICAgZnJlZShmbGlz dFtpXSk7CisgICAgICAgICAgICAgICAgICAgICAgZmxpc3RbaV0gPSBOVUxMOworICAgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgZnJlZSgoY2hhciAqKWZsaXN0KTsKKyAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgICBja3N0cm5jcHkodG1wLGZudmFsLDE2KTsgIC8qIFNh dmUgb3VyIHJldHVybiB2YWx1ZSAqLworICAgICAgICAgICAgICBmbGlzdCA9IChjaGFyICoqKSBt YWxsb2MoKGsrMSkgKiBzaXplb2YoY2hhciAqKSk7IC8qIE5ldyBhcnJheSAqLworICAgICAgICAg ICAgICBpZiAoZmxpc3QpIHsKKyAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPD0gazsg aSsrKSB7IC8qIEZpbGwgaXQgKi8KKyAgICAgICAgICAgICAgICAgICAgICBmbGlzdFtpXSA9IE5V TEw7CisgICAgICAgICAgICAgICAgICAgICAgem5leHQoZm52YWwpOyAgICAgLyogTmV4dCBmaWxl bmFtZSAqLworICAgICAgICAgICAgICAgICAgICAgIGlmICghKmZudmFsKSAgICAgIC8qIE5vIG1v cmUsIGRvbmUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg ICAgICAgICAgIG1ha2VzdHIoJihmbGlzdFtpXSksZm52YWwpOworICAgICAgICAgICAgICAgICAg fQorICAgICAgICAgICAgICAgICAgaWYgKGFwKSB7ICAgICAgICAgICAgIC8qIElmIGFycmF5IHBv aW50ZXIgZ2l2ZW4gKi8KKyAgICAgICAgICAgICAgICAgICAgICBhcFswXSA9IE5VTEw7CisgICAg ICAgICAgICAgICAgICAgICAgbWFrZXN0cigmKGFwWzBdKSxja2l0b2EoaykpOworICAgICAgICAg ICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBrOyBpKyspIHsgLyogQ29weSBmaWxlIGxpc3Qg dG8gYXJyYXkgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgYXBbaSsxXSA9IE5VTEw7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJihhcFtpKzFdKSxmbGlzdFtpXSk7Cisg ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg ICB9CisgICAgICAgICAgICAgIGNrc3RybmNweShmbnZhbCx0bXAsRk5WQUxMKTsgLyogUmVzdG9y ZSByZXR1cm4gdmFsdWUgKi8KKyAgICAgICAgICAgICAgZmxpc3RuID0gMDsgICAgICAgICAgICAg ICAvKiBSZXNldCBnbG9iYWwgbGlzdCBwb2ludGVyICovCisgICAgICAgICAgfQorI2VuZGlmIC8q IE9TMiAqLworI2lmZGVmIFJFQ1VSU0lWRQorICAgICAgICAgIHJlY3Vyc2l2ZSA9IHJzYXZlOwor I2VuZGlmIC8qIFJFQ1VSU0lWRSAqLworI2lmZGVmIE9TMgorICAgICAgICAgIHp4cG4gPSB6c2F2 ZTsKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgIH0KKyAgICAgIGdvdG8gZm5lbmQ7CisKKyAgICAg IGNhc2UgRk5fRklMOiAgICAgICAgICAgICAgICAgICAgICAvKiBcZm5leHRmaWxlKCkgLSBOZXh0 IGZpbGUgaW4gbGlzdC4gKi8KKyAgICAgICAgcCA9IGZudmFsOyAgICAgICAgICAgICAgICAgICAg ICAvKiAobm8gYXJncykgKi8KKyAgICAgICAgKnAgPSBOVUw7CisjaWZkZWYgT1MyCisgICAgICAg IHp4cG4gPSAxOyAgICAgICAgICAgICAgICAgICAgICAgLyogT1MvMiAtIHVzZSB0aGUgYWx0ZXJu YXRlIGxpc3QgKi8KKyAgICAgICAgem5leHQocCk7ICAgICAgICAgICAgICAgICAgICAgICAvKiBD YWxsIHN5c3RlbS1kZXBlbmRlbnQgZnVuY3Rpb24gKi8KKyAgICAgICAgenhwbiA9IHpzYXZlOyAg ICAgICAgICAgICAgICAgICAvKiBSZXN0b3JlIG9yaWdpbmFsIGxpc3QgKi8KKyNlbHNlCisgICAg ICAgIGlmIChmbGlzdCkgICAgICAgICAgICAgICAgICAgICAgLyogT3RoZXJzLCB1c2Ugb3VyIG93 biBsaXN0LiAqLworICAgICAgICAgIGlmIChmbGlzdFtmbGlzdG5dKQorCSAgICBwID0gZmxpc3Rb Zmxpc3RuKytdOworI2VuZGlmIC8qIE9TMiAqLworICAgICAgICBnb3RvIGZuZW5kOworCisgICAg fSAvKiBCcmVhayB1cCBiaWcgc3dpdGNoLi4uICovCisKKyAgICBzd2l0Y2ggKGN4KSB7CisgICAg ICBjYXNlIEZOX0lORDogICAgICAgICAgICAgICAgICAgICAgLyogXGZpbmRleChzMSxzMixzdGFy dCxvY2N1cnJlbmNlKSAqLworICAgICAgY2FzZSBGTl9SSVg6ICAgICAgICAgICAgICAgICAgICAg IC8qIFxmcmluZGV4KHMxLHMyLHN0YXJ0LG9jY3VycmVuY2UpICovCisgICAgICBjYXNlIEZOX1NF QVJDSDogICAgICAgICAgICAgICAgICAgLyogXGZzZWFyY2gocGF0LHN0cmluZyxzdGFydCxvY2Mp ICovCisgICAgICBjYXNlIEZOX1JTRUFSQ0g6CQkJLyogXGZyc2VhcmNoKHBhdCxzdHJpbmcsc3Rh cnQsb2NjKSAqLworICAgICAgY2FzZSBGTl9DT1VOVDogewkJCS8qIFxmY291bnQoczEsczIsc3Rh cnQpICovCisJaW50IGkgPSAwLCByaWdodCA9IDAsIHNlYXJjaCA9IDAsIGNvdW50ID0gMDsKKwlp bnQgZGVzaXJlZCA9IDE7CisgICAgICAgIHJpZ2h0ID0gKGN4ID09IEZOX1JJWCB8fCBjeCA9PSBG Tl9SU0VBUkNIKTsKKyAgICAgICAgc2VhcmNoID0gKGN4ID09IEZOX1NFQVJDSCB8fCBjeCA9PSBG Tl9SU0VBUkNIKTsKKwljb3VudCA9IChjeCA9PSBGTl9DT1VOVCk7CisgICAgICAgIHAgPSAiMCI7 CisgICAgICAgIGlmIChhcmduID4gMSkgeyAgICAgICAgICAgICAgICAgLyogT25seSB3b3JrcyBp ZiB3ZSBoYXZlIDIgb3IgMyBhcmdzICovCisgICAgICAgICAgICBpbnQgc3RhcnQgPSAwOworICAg ICAgICAgICAgY2hhciAqIHBhdCA9IE5VTEw7CisgICAgICAgICAgICBsZW4xID0gKGludClzdHJs ZW4ocGF0ID0gYnBbMF0pOyAvKiBsZW5ndGggb2Ygc3RyaW5nIHRvIGxvb2sgZm9yICovCisgICAg ICAgICAgICBsZW4yID0gKGludClzdHJsZW4ocyA9IGJwWzFdKTsgLyogbGVuZ3RoIG9mIHN0cmlu ZyB0byBsb29rIGluICovCisgICAgICAgICAgICBpZiAobGVuMSA8IDEgfHwgbGVuMiA8IDEpICAg LyogV2F0Y2ggb3V0IGZvciBlbXB0eSBzdHJpbmdzICovCisgICAgICAgICAgICAgIGdvdG8gZm5l bmQ7CisgICAgICAgICAgICBzdGFydCA9IHJpZ2h0ID8gLTEgOiAwOyAgICAgLyogRGVmYXVsdCBz dGFydGluZyBwb3NpdGlvbiAqLworICAgICAgICAgICAgaWYgKGFyZ24gPiAyKSB7CisgICAgICAg ICAgICAgICAgdmFsMSA9ICooYnBbMl0pID8gZXZhbHgoYnBbMl0pIDogIjEiOworCQlpZiAoYXJn biA+IDMpIHsKKwkJICAgIHZhbDIgPSAqKGJwWzNdKSA/IGV2YWx4KGJwWzNdKSA6ICIxIjsKKwkJ ICAgIGlmIChjaGtudW0odmFsMikpIGRlc2lyZWQgPSBhdG9pKHZhbDIpOworCQkgICAgaWYgKGRl c2lyZWQgKiBsZW4xID4gbGVuMikgZ290byBmbmVuZDsKKwkJfQorICAgICAgICAgICAgICAgIGlm IChjaGtudW0odmFsMSkpIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IHQ7CisgICAgICAgICAg ICAgICAgICAgIHQgPSBhdG9pKHZhbDEpOworICAgICAgICAgICAgICAgICAgICBpZiAoIXNlYXJj aCkgeyAgICAgIC8qIEluZGV4IG9yIFJpbmRleCAqLworICAgICAgICAgICAgICAgICAgICAgICAg aiA9IGxlbjIgLSBsZW4xOyAvKiBMZW5ndGggZGlmZmVyZW5jZSAqLworICAgICAgICAgICAgICAg ICAgICAgICAgdC0tOyAgICAgICAgICAgICAvKiBDb252ZXJ0IHBvc2l0aW9uIHRvIDAtYmFzZWQg Ki8KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0IDwgMCkgdCA9IDA7CisgICAgICAgICAg ICAgICAgICAgICAgICBzdGFydCA9IHQ7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJp Z2h0ICYmIHN0YXJ0IDwgMCkgc3RhcnQgPSAwOworICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug eyAgICAgICAgICAgIC8qIFNlYXJjaCBvciBSc2VhcmNoICovCisgICAgICAgICAgICAgICAgICAg ICAgICBpbnQgeDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0IDwgMCkgdCA9IDA7Cisg ICAgICAgICAgICAgICAgICAgICAgICBpZiAocmlnaHQpIHsgICAgLyogUmlnaHQgdG8gbGVmdCAq LworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID4gbGVuMikgdCA9IGxlbjI7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSBsZW4yIC0gdCAtIDE7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXJ0IDwgMCkKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGdvdG8gZm5lbmQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCA9IGxl bjIgLSB0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNbeF0gPSBOVUw7CisgICAgICAg ICAgICAgICAgICAgICAgICB9IGVsc2UgeyAgICAgICAgLyogTGVmdCB0byByaWdodCAqLworICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gdCAtIDE7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaWYgKHN0YXJ0IDwgMCkgc3RhcnQgPSAwOworICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGlmIChzdGFydCA+PSBsZW4yKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZ290byBmbmVuZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGZh aWxlZCA9IDE7CisgICAgICAgICAgICAgICAgICAgIGV2YWxlcnIoZm4pOworICAgICAgICAgICAg ICAgICAgICBwID0gZm52YWw7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gZm5lbmQ7CisgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCSAgICBpZiAoY291bnQpIHsJCS8qIFxmY291 bnQoKSAqLworCQlpbnQgajsKKwkJZm9yIChpID0gMDsgc3RhcnQgPCBsZW4yOyBpKyspIHsKKwkJ ICAgIGogPSBja2luZGV4KHBhdCxicFsxXSxzdGFydCwwLGlucGNhc1tjbWRsdmxdKTsKKwkJICAg IGlmIChqID09IDApIGJyZWFrOworCQkgICAgc3RhcnQgPSBqOworCQl9CisKKwkgICAgfSBlbHNl IGlmIChzZWFyY2gpIHsJLyogXGZzZWFyY2goKSBvciBcZnJzZWFyY2goKSAqLworCisgICAgICAg ICAgICAgICAgaWYgKHJpZ2h0ICYmIHBhdFswXSA9PSAnXicpIHsKKyAgICAgICAgICAgICAgICAg ICAgcmlnaHQgPSAwOworICAgICAgICAgICAgICAgICAgICBzdGFydCA9IDA7CisgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChyaWdodCkgewkJLyogRnJvbSByaWdodCAqLwor CQkgICAgaW50IGssIGogPSAxOworICAgICAgICAgICAgICAgICAgICBpZiAoc3RhcnQgPCAwKQor CQkgICAgICBzdGFydCA9IGxlbjIgLSAxOworCQkgICAgaSA9IDA7CisJCSAgICB3aGlsZSAoc3Rh cnQgPj0gMCAmJiBqIDw9IGRlc2lyZWQpIHsKKwkJCWZvciAoaSA9IHN0YXJ0OworCQkJICAgICAo aSA+PSAwKSAmJiAKKwkJCQkgIShrID0gY2ttYXRjaChwYXQscytpLGlucGNhc1tjbWRsdmxdLDEr NCkpOworCQkJICAgICBpLS0pIDsKKwkJCWlmIChrIDwgMSkgewkvKiBObyBtYXRjaCAqLworCQkJ ICAgIGkgPSAwOworCQkJICAgIGJyZWFrOworCQkJfQorCQkJaWYgKGogPT0gZGVzaXJlZCkgeyAv KiBUaGUgbWF0Y2ggd2Ugd2FudD8gKi8KKwkJCSAgICBpICs9IGs7CS8qIFllcywgcmV0dXJuIHN0 cmluZyBpbmRleCAqLworCQkJICAgIGJyZWFrOworCQkJfQorCQkJaisrOwkJLyogTm8sIGNvdW50 IHRoaXMgbWF0Y2ggKi8KKwkJCXNbaV0gPSBOVUw7CS8qIG51bGwgaXQgb3V0ICovCisJCQlzdGFy dCA9IGktMTsJLyogbW92ZSBsZWZ0IGFuZCBsb29rIGFnYWluICovCisJCSAgICB9CisKKyAgICAg ICAgICAgICAgICB9IGVsc2UgewkJLyogRnJvbSBsZWZ0ICovCisJCSAgICBpbnQgajsKKwkJICAg IGkgPSAwOworCQkgICAgZm9yIChqID0gMTsgaiA8PSBkZXNpcmVkICYmIHN0YXJ0IDwgbGVuMjsg aisrKSB7CisJCQlpID0gY2ttYXRjaChwYXQsJnNbc3RhcnRdLGlucGNhc1tjbWRsdmxdLDErNCk7 CisJCQlpZiAoaSA9PSAwIHx8IGogPT0gZGVzaXJlZCkgYnJlYWs7CisJCQlzdGFydCArPSBpICsg MTsKKwkJICAgIH0JCQkKKwkJICAgIGlmIChqID09IGRlc2lyZWQgJiYgaSAhPSAwKQorCQkgICAg ICBpICs9IHN0YXJ0OworCQkgICAgZWxzZQorCQkgICAgICBpID0gMDsKKyAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICB9IGVsc2UgewkJCS8qIGluZGV4IG9yIHJpbmRleCAqLworCQlpbnQg aiA9IDA7CisJCWkgPSAwOworCQlmb3IgKGogPSAxOyBqIDw9IGRlc2lyZWQgJiYgc3RhcnQgPCBs ZW4yOyBqKyspIHsKKwkJICAgIGkgPSBja2luZGV4KHBhdCxicFsxXSxzdGFydCxyaWdodCxpbnBj YXNbY21kbHZsXSk7CisJCSAgICBpZiAoaSA9PSAwIHx8IGogPT0gZGVzaXJlZCkgYnJlYWs7CisJ CSAgICBzdGFydCA9IChyaWdodCkgPyBsZW4yIC0gaSArIDEgOiBpOworCQl9CisJCWlmIChqICE9 IGRlc2lyZWQpCisJCSAgaSA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzcHJpbnRm KGZudmFsLCIlZCIsaSk7ICAgICAgLyogU0FGRSAqLworICAgICAgICAgICAgcCA9IGZudmFsOwor ICAgICAgICB9CisgICAgICAgIGdvdG8gZm5lbmQ7CisgICAgICB9CisKKyAgICAgIGNhc2UgRk5f UlBMOiAgICAgICAgICAgICAgICAgICAgICAvKiBcZnJlcGxhY2UoczEsczIsczMpICovCisgICAg ICAvKgorICAgICAgICBzID0gYnBbMF0gPSBzb3VyY2Ugc3RyaW5nCisgICAgICAgICAgICBicFsx XSA9IG1hdGNoIHN0cmluZworICAgICAgICAgICAgYnBbMl0gPSByZXBsYWNlbWVudCBzdHJpbmcK KyAgICAgICAgICAgIGJwWzNdID0gd2hpY2ggb2NjdXJyZW5jZSAoZGVmYXVsdCA9IGFsbCk7Cisg ICAgICAgIHAgPSBmbnZhbCA9IGRlc3RpbmF0aW9uIChyZXN1bHQpIHN0cmluZworICAgICAgKi8K KyAgICAgICAgaWYgKGFyZ24gPCAxKSAgICAgICAgICAgICAgICAgICAvKiBOb3RoaW5nICovCisg ICAgICAgICAgZ290byBmbmVuZDsKKyAgICAgICAgaWYgKGFyZ24gPCAyKSB7ICAgICAgICAgICAg ICAgICAvKiBPbmx5IHdvcmtzIGlmIHdlIGhhdmUgMiBvciAzIGFyZ3MgKi8KKyAgICAgICAgICAg IGNrc3RybmNweShwLGJwWzBdLEZOVkFMTCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg ICBpbnQgb2NjdXIgPSAwLCB4eCA9IDAsIGoyOworICAgICAgICAgICAgbGVuMSA9IChpbnQpc3Ry bGVuKGJwWzBdKTsgIC8qIGxlbmd0aCBvZiBzdHJpbmcgdG8gbG9vayBpbiAqLworICAgICAgICAg ICAgbGVuMiA9IChpbnQpc3RybGVuKGJwWzFdKTsgIC8qIGxlbmd0aCBvZiBzdHJpbmcgdG8gbG9v ayBmb3IgKi8KKyAgICAgICAgICAgIGxlbjMgPSAoYXJnbiA8IDMpID8gMCA6IChpbnQpc3RybGVu KGJwWzJdKTsgLyogTGVuIG9mIHJlcGxhY2VtbnQgKi8KKyAgICAgICAgICAgIGogPSBsZW4xIC0g bGVuMiArIDE7CisgICAgICAgICAgICBqMiA9IGo7CisgICAgICAgICAgICBpZiAoYXJnbiA+IDMp IHsKKyAgICAgICAgICAgICAgICBpZiAoY2hrbnVtKGJwWzNdKSkgeworICAgICAgICAgICAgICAg ICAgICBvY2N1ciA9IGF0b2koYnBbM10pOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg ICAgICAgICAgICAgICAgIGZhaWxlZCA9IDE7CisgICAgICAgICAgICAgICAgICAgIGlmIChmbmRp YWdzKQorICAgICAgICAgICAgICAgICAgICAgIGNrbWFrbXNnKGZudmFsLEZOVkFMTCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAiPEVSUk9SOkFSR19OT1RfTlVNRVJJQzpcXGYiLGZu LCIoKT4iLE5VTEwpOworICAgICAgICAgICAgICAgICAgICBnb3RvIGZuZW5kOworICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8qIElmIGFyZ3Mgb3V0IG9mIHdo YWNrLi4uICovCisgICAgICAgICAgICBpZiAoaiA8IDEgfHwgbGVuMSA9PSAwIHx8IGxlbjIgPT0g MCkgeworICAgICAgICAgICAgICAgIGNrc3RybmNweShwLGJwWzBdLEZOVkFMTCk7IC8qIGp1c3Qg cmV0dXJuIG9yaWdpbmFsIHN0cmluZyAqLworICAgICAgICAgICAgICAgIHBbRk5WQUxMXSA9IE5V TDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIHJhZ2FpbjoKKyAgICAgICAg ICAgICAgICBzID0gYnBbMF07ICAgICAgICAgICAgICAvKiBQb2ludCB0byBiZWdpbm5pbmcgb2Yg c3RyaW5nICovCisgICAgICAgICAgICAgICAgd2hpbGUgKGotLSA+IDApIHsgICAgICAgLyogRm9y IGVhY2ggY2hhcmFjdGVyICovCisgICAgICAgICAgICAgICAgICAgIGlmICghY2tzdHJjbXAoYnBb MV0scyxsZW4yLGlucGNhc1tjbWRsdmxdKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgKG9j Y3VyID09IDAgfHwgb2NjdXIgPT0gKyt4eCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm IChsZW4zKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2tzdHJuY3B5KHAsYnBbMl0s Rk5WQUxMKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwICs9IGxlbjM7CisgICAgICAg ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBzICs9IGxlbjI7ICAg ICAgLyogYW5kIHNraXAgcGFzdCBpdC4gKi8KKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsg ICAgICAgICAgICAvKiBObywgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICpwKysgPSAqcysr OyAgICAvKiBqdXN0IGNvcHkgdGhpcyBjaGFyYWN0ZXIgKi8KKyAgICAgICAgICAgICAgICAgICAg fQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAqcCA9IE5VTDsKKyAgICAgICAg ICAgICAgICB3aGlsZSAoKCpwKysgPSAqcysrKSk7CisgICAgICAgICAgICAgICAgaWYgKG9jY3Vy IDwgMCkgeyAgICAgICAgLyogY2hlYXAuLi4gKi8KKyAgICAgICAgICAgICAgICAgICAgb2NjdXIg PSB4eCArIG9jY3VyICsgMTsKKyAgICAgICAgICAgICAgICAgICAgeHggPSAwOworICAgICAgICAg ICAgICAgICAgICBwID0gZm52YWw7CisgICAgICAgICAgICAgICAgICAgIGogPSBqMjsKKyAgICAg ICAgICAgICAgICAgICAgaWYgKG9jY3VyID4gMCkKKyAgICAgICAgICAgICAgICAgICAgICBnb3Rv IHJhZ2FpbjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg ICAgICAgcCA9IGZudmFsOworICAgICAgICBnb3RvIGZuZW5kOworCisgICAgICBjYXNlIEZOX0NI UjogICAgICAgICAgICAgICAgICAgICAgLyogXGZjaGFyYWN0ZXIoYXJnMSkgKi8KKyAgICAgICAg dmFsMSA9ICooYnBbMF0pID8gZXZhbHgoYnBbMF0pIDogIiI7CisgICAgICAgIGlmIChjaGtudW0o dmFsMSkpIHsgICAgICAgICAgICAgLyogTXVzdCBiZSBudW1lcmljICovCisgICAgICAgICAgICBp ID0gYXRvaSh2YWwxKTsKKyAgICAgICAgICAgIGlmIChpID49IDAgJiYgaSA8IDI1NikgeyAgICAv KiBNdXN0IGJlIGFuIDgtYml0IHZhbHVlICovCisgICAgICAgICAgICAgICAgcCA9IGZudmFsOwor ICAgICAgICAgICAgICAgICpwKysgPSAoY2hhcikgaTsKKyAgICAgICAgICAgICAgICAqcCA9IE5V TDsKKyAgICAgICAgICAgICAgICBwID0gZm52YWw7CisgICAgICAgICAgICB9IGVsc2UgeworICAg ICAgICAgICAgICAgIGZhaWxlZCA9IDE7CisgICAgICAgICAgICAgICAgaWYgKGZuZGlhZ3MpCisg ICAgICAgICAgICAgICAgICBja21ha21zZyhmbnZhbCxGTlZBTEwsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAiPEVSUk9SOkFSR19PVVRfT0ZfUkFOR0U6XFxmIixmbiwiKCk+IixOVUxMKTsK KyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZhaWxlZCA9IDE7 CisgICAgICAgICAgICBldmFsZXJyKGZuKTsKKyAgICAgICAgfQorICAgICAgICBnb3RvIGZuZW5k OworCisgICAgICBjYXNlIEZOX0NPRDogICAgICAgICAgICAgICAgICAgICAgLyogXGZjb2RlKGNo YXIpICovCisgICAgICAgIGlmICgoaW50KXN0cmxlbihicFswXSkgPiAwKSB7CisgICAgICAgICAg ICBwID0gZm52YWw7CisgICAgICAgICAgICBpID0gKmJwWzBdOworICAgICAgICAgICAgc3ByaW50 ZihwLCIlZCIsKGkgJiAweGZmKSk7IC8qIFNBRkUgKi8KKyAgICAgICAgfSBlbHNlIHAgPSAiMCI7 CQkJLyogQ2FuJ3QgaGFwcGVuICovCisgICAgICAgIGdvdG8gZm5lbmQ7CisKKyAgICAgIGNhc2Ug Rk5fTEVOOiAgICAgICAgICAgICAgICAgICAgICAvKiBcZmxlbmd0aChhcmcxKSAqLworICAgICAg ICBpZiAoYXJnbiA+IDApIHsKKyAgICAgICAgICAgIHAgPSBmbnZhbDsKKyAgICAgICAgICAgIHNw cmludGYocCwiJWQiLChpbnQpc3RybGVuKGJwWzBdKSk7IC8qIFNBRkUgKi8KKyAgICAgICAgfSBl bHNlIHAgPSAiMCI7CisgICAgICAgIGdvdG8gZm5lbmQ7CisKKyAgICAgIGNhc2UgRk5fTE9XOiAg ICAgICAgICAgICAgICAgICAgICAvKiBcZmxvd2VyKGFyZzEpICovCisgICAgICAgIHMgPSBicFsw XSA/IGJwWzBdIDogIiI7CisgICAgICAgIHAgPSBmbnZhbDsKKyAgICAgICAgd2hpbGUgKCpzKSB7 CisgICAgICAgICAgICBpZiAoaXN1cHBlcigqcykpCisgICAgICAgICAgICAgICpwID0gKGNoYXIp IHRvbG93ZXIoKnMpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAqcCA9ICpzOwor ICAgICAgICAgICAgcCsrOyBzKys7CisgICAgICAgIH0KKyAgICAgICAgKnAgPSBOVUw7CisgICAg ICAgIHAgPSBmbnZhbDsKKyAgICAgICAgZ290byBmbmVuZDsKKworICAgICAgY2FzZSBGTl9NQVg6 ICAgICAgICAgICAgICAgICAgICAgIC8qIFxmbWF4KGFyZzEsYXJnMikgKi8KKyAgICAgIGNhc2Ug Rk5fTUlOOiAgICAgICAgICAgICAgICAgICAgICAvKiBcZm1pbihhcmcxLGFyZzIpICovCisgICAg ICBjYXNlIEZOX01PRDogICAgICAgICAgICAgICAgICAgICAgLyogXGZtb2QoYXJnMSxhcmcyKSAq LworICAgICAgICB2YWwxID0gKihicFswXSkgPyBldmFseChicFswXSkgOiAiIjsKKyNpZmRlZiBD T01NRU5UCisgICAgICAgIC8qIE5vIGxvbmdlciBuZWNlc3NhcnkgYmVjYXVzZSBldmFseCgpIG5v IGxvbmdlciBvdmVyd3JpdGVzIGl0cyAqLworICAgICAgICAvKiByZXN1bHQgZXZlcnkgdGltZSBp dCdzIGNhbGxlZCAoMjAwMC8wOS8yMykuICovCisgICAgICAgIGZyZWUoYnBbMF0pOworICAgICAg ICBicFswXSA9IE5VTEw7CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAgICBpZiAoYXJnbiA+ IDEpIHsKKyNpZmRlZiBDT01NRU5UCisgICAgICAgICAgICAvKiBEaXR0by4uLiAqLworICAgICAg ICAgICAgYnBbMF0gPSBtYWxsb2MoKGludClzdHJsZW4odmFsMSkrMSk7CisgICAgICAgICAgICBp ZiAoYnBbMF0pCisgICAgICAgICAgICAgIHN0cmNweShicFswXSx2YWwxKTsgICAgICAgLyogc2Fm ZSAqLworICAgICAgICAgICAgdmFsMSA9IGJwWzBdOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAg ICAgICAgICAgIHZhbDIgPSAqKGJwWzFdKSA/IGV2YWx4KGJwWzFdKSA6ICIiOworICAgICAgICAg ICAgaWYgKGNoa251bSh2YWwxKSAmJiBjaGtudW0odmFsMikpIHsKKyAgICAgICAgICAgICAgICBp ID0gYXRvaSh2YWwxKTsKKyAgICAgICAgICAgICAgICBqID0gYXRvaSh2YWwyKTsKKyAgICAgICAg ICAgICAgICBzd2l0Y2ggKHkpIHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgRk5fTUFYOgorICAg ICAgICAgICAgICAgICAgICBpZiAoaiA8IGkpIGogPSBpOworICAgICAgICAgICAgICAgICAgICBi cmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgRk5fTUlOOgorICAgICAgICAgICAgICAgICAg ICBpZiAoaiA+IGkpIGogPSBpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg ICAgICAgICAgIGNhc2UgRk5fTU9EOgorICAgICAgICAgICAgICAgICAgICBpZiAoaiA9PSAwKSB7 CisgICAgICAgICAgICAgICAgICAgICAgICBmYWlsZWQgPSAxOworICAgICAgICAgICAgICAgICAg ICAgICAgaWYgKGZuZGlhZ3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNrbWFrbXNnKGZu dmFsLEZOVkFMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxFUlJPUjpE SVZJREVfQllfWkVSTzpcXGYiLGZuLCIoKT4iLE5VTEwpOworICAgICAgICAgICAgICAgICAgICAg ICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICBmbnZhbFswXSA9IE5VTDsKKyAgICAg ICAgICAgICAgICAgICAgICAgIGdvdG8gZm5lbmQ7CisgICAgICAgICAgICAgICAgICAgIH0gZWxz ZQorICAgICAgICAgICAgICAgICAgICAgIGogPSBpICUgajsKKyAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgICAgcCA9IGZudmFsOworICAgICAgICAgICAgICAgIHNwcmludGYocCwiJWQi LGopOyAgICAgIC8qIFNBRkUgKi8KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg ICAgZmFpbGVkID0gMTsKKyAgICAgICAgICAgICAgICBldmFsZXJyKGZuKTsKKyAgICAgICAgICAg IH0KKyAgICAgICAgfSBlbHNlIHAgPSB2YWwxOworICAgICAgICBnb3RvIGZuZW5kOworICAgIH0g LyogQnJlYWsgdXAgYmlnIHN3aXRjaC4uLiAqLworCisgICAgc3dpdGNoICh5KSB7CisgICAgICBj YXNlIEZOX1NVQjogICAgICAgICAgICAgICAgICAgICAgLyogXGZzdWJzdHIoYXJnMSxhcmcyLGFy ZzMpICovCisgICAgICBjYXNlIEZOX1JJRzogICAgICAgICAgICAgICAgICAgICAgLyogXGZyaWdo dChhcmcxLGFyZzIpICovCisgICAgICBjYXNlIEZOX0xFRjogICAgICAgICAgICAgICAgICAgICAg LyogXGZsZWZ0KGFyZzEsYXJnMikgKi8KKyAgICAgICAgaWYgKGFyZ24gPCAxKQorICAgICAgICAg IGdvdG8gZm5lbmQ7CisgICAgICAgIHZhbDEgPSAiIjsKKyAgICAgICAgaWYgKGFyZ24gPiAxKQor ICAgICAgICAgIGlmICgqKGJwWzFdKSkKKyAgICAgICAgICAgIHZhbDEgPSAgZXZhbHgoYnBbMV0p OworI2lmZGVmIENPTU1FTlQKKyAgICAgICAgaWYgKGJwWzFdKSBmcmVlKGJwWzFdKTsgICAgICAg ICAvKiBIYXZlIHRvIGNvcHkgdGhpcyAqLworICAgICAgICBicFsxXSA9IG1hbGxvYygoaW50KXN0 cmxlbih2YWwxKSsxKTsKKyAgICAgICAgaWYgKCFicFsxXSkgeworICAgICAgICAgICAgZmFpbGVk ID0gMTsKKyAgICAgICAgICAgIGlmIChmbmRpYWdzKSB7CisgICAgICAgICAgICAgICAgcCA9IGZu dmFsOworICAgICAgICAgICAgICAgIGNrbWFrbXNnKGZudmFsLEZOVkFMTCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAiPEVSUk9SOk1BTExPQ19GQUlMVVJFOlxcZiIsZm4sIigpPiIsTlVMTCk7 CisgICAgICAgICAgICB9CisgICAgICAgICAgICBnb3RvIGZuZW5kOworICAgICAgICB9CisgICAg ICAgIHN0cmNweShicFsxXSx2YWwxKTsgICAgICAgICAgICAgLyogc2FmZSAqLworICAgICAgICB2 YWwxID0gYnBbMV07CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAgICB2YWwyID0gIiI7Cisg ICAgICAgIGlmIChhcmduID4gMikKKyAgICAgICAgICBpZiAoKihicFsyXSkpCisgICAgICAgICAg ICB2YWwyID0gZXZhbHgoYnBbMl0pOworICAgICAgICBpZiAoCisgICAgICAgICAgICAoKGFyZ24g PiAxKSAmJiAoaW50KXN0cmxlbih2YWwxKSAmJiAhcmRpZ2l0cyh2YWwxKSkgfHwKKyAgICAgICAg ICAgICgoY3ggPT0gRk5fU1VCKSAmJgorICAgICAgICAgICAgICAoKGFyZ24gPiAyKSAmJiAoaW50 KXN0cmxlbih2YWwyKSAmJiAhcmRpZ2l0cyh2YWwyKSkpCisgICAgICAgICAgICApIHsKKyAgICAg ICAgICAgIGZhaWxlZCA9IDE7CisgICAgICAgICAgICBldmFsZXJyKGZuKTsKKyAgICAgICAgfSBl bHNlIHsKKyAgICAgICAgICAgIGludCBseDsKKyAgICAgICAgICAgIHAgPSBmbnZhbDsgICAgICAg ICAgICAgICAgICAvKiBwb2ludGVyIHRvIHJlc3VsdCAqLworICAgICAgICAgICAgbHggPSBzdHJs ZW4oYnBbMF0pOyAgICAgICAgIC8qIGxlbmd0aCBvZiBhcmcxICovCisgICAgICAgICAgICBpZiAo Y3ggPT0gRk5fU1VCKSB7ICAgICAgICAgLyogc3Vic3RyaW5nICovCisgICAgICAgICAgICAgICAg ayA9IChhcmduID4gMikgPyBhdG9pKHZhbDIpIDogTUFYQVJHTEVOOyAvKiBsZW5ndGggKi8KKyAg ICAgICAgICAgICAgICBqID0gKGFyZ24gPiAxKSA/IGF0b2kodmFsMSkgOiAxOyAvKiBzdGFydCBw b3MgZm9yIHN1YnN0ciAqLworICAgICAgICAgICAgfSBlbHNlIGlmIChjeCA9PSBGTl9MRUYpIHsg IC8qIGxlZnQgKi8KKyAgICAgICAgICAgICAgICBrID0gKGFyZ24gPiAxKSA/IGF0b2kodmFsMSkg OiBseDsKKyAgICAgICAgICAgICAgICBqID0gMTsKKyAgICAgICAgICAgIH0gZWxzZSB7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiByaWdodCAqLworICAgICAgICAgICAgICAgIGsgPSAo YXJnbiA+IDEpID8gYXRvaSh2YWwxKSA6IGx4OyAvKiBsZW5ndGggKi8KKyAgICAgICAgICAgICAg ICBqID0gbHggLSBrICsgMTsgICAgICAgICAgICAgICAgICAvKiBzdGFydCBwb3MgZm9yIHJpZ2h0 ICovCisgICAgICAgICAgICAgICAgaWYgKGogPCAxKSBqID0gMTsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIGlmIChrID4gMCAmJiBqIDw9IGx4KSB7ICAgICAgICAgICAgICAvKiBpZiBzdGFy dCBwb3MgaW4gcmFuZ2UgKi8KKyAgICAgICAgICAgICAgICBzID0gYnBbMF0rai0xOyAgICAgICAg ICAgICAgICAgICAvKiBwb2ludCB0byBzb3VyY2Ugc3RyaW5nICovCisgICAgICAgICAgICAgICAg Zm9yIChpID0gMDsgKGkgPCBrKSAmJiAoKnArKyA9ICpzKyspOyBpKyspIDsgIC8qIGNvcHkgKi8K KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICpwID0gTlVMOyAgICAgICAgICAgICAgICAgICAv KiB0ZXJtaW5hdGUgdGhlIHJlc3VsdCAqLworICAgICAgICAgICAgcCA9IGZudmFsOyAgICAgICAg ICAgICAgICAgIC8qIGFuZCBwb2ludCB0byBpdC4gKi8KKyAgICAgICAgfQorICAgICAgICBnb3Rv IGZuZW5kOworCisgICAgICBjYXNlIEZOX1VQUDogICAgICAgICAgICAgICAgICAgICAgLyogXGZ1 cHBlcihhcmcxKSAqLworICAgICAgICBzID0gYnBbMF0gPyBicFswXSA6ICIiOworICAgICAgICBw ID0gZm52YWw7CisgICAgICAgIHdoaWxlICgqcykgeworICAgICAgICAgICAgaWYgKGlzbG93ZXIo KnMpKQorICAgICAgICAgICAgICAqcCA9IChjaGFyKSB0b3VwcGVyKCpzKTsKKyAgICAgICAgICAg IGVsc2UKKyAgICAgICAgICAgICAgKnAgPSAqczsKKyAgICAgICAgICAgIHArKzsgcysrOworICAg ICAgICB9CisgICAgICAgICpwID0gTlVMOworICAgICAgICBwID0gZm52YWw7CisgICAgICAgIGdv dG8gZm5lbmQ7CisKKyAgICAgIGNhc2UgRk5fUkVQOiAgICAgICAgICAgICAgICAgICAgICAvKiBc ZnJlcGVhdCh0ZXh0LG51bWJlcikgKi8KKyAgICAgICAgaWYgKGFyZ24gPCAxKQorICAgICAgICAg IGdvdG8gZm5lbmQ7CisgICAgICAgIHZhbDEgPSAiMSI7CisgICAgICAgIGlmIChhcmduID4gMSkK KyAgICAgICAgICBpZiAoKihicFsxXSkpCisgICAgICAgICAgICB2YWwxID0gZXZhbHgoYnBbMV0p OworICAgICAgICBpZiAoY2hrbnVtKHZhbDEpKSB7ICAgICAgICAgICAgIC8qIFJlcGVhdCBjb3Vu dCAqLworICAgICAgICAgICAgbiA9IGF0b2kodmFsMSk7CisgICAgICAgICAgICBkZWJ1ZyhGMTEx LCJTVU5EQVkgZnJlcGVhdCBuIix2YWwxLG4pOworICAgICAgICAgICAgaWYgKG4gPiAwKSB7ICAg ICAgICAgICAgICAgIC8qIE1ha2UgbiBjb3BpZXMgKi8KKyAgICAgICAgICAgICAgICBwID0gZm52 YWw7CisgICAgICAgICAgICAgICAgKnAgPSAnXDAnOworICAgICAgICAgICAgICAgIGsgPSAoaW50 KXN0cmxlbihicFswXSk7IC8qIE1ha2Ugc3VyZSBzdHJpbmcgaGFzIHNvbWUgbGVuZ3RoICovCisg ICAgICAgICAgICAgICAgZGVidWcoRjExMSwiU1VOREFZIGZyZXBlYXQgayIsIiIsayk7CisgICAg ICAgICAgICAgICAgZGVidWcoRjExMSwiU1VOREFZIGZyZXBlYXQgRk5WQUxMIiwiIixGTlZBTEwp OworICAgICAgICAgICAgICAgIGlmIChrICogbiA+PSBGTlZBTEwpIHsgIC8qIEJ1dCBub3QgdG9v IG11Y2guLi4gKi8KKyAgICAgICAgICAgICAgICAgICAgZmFpbGVkID0gMTsKKyAgICAgICAgICAg ICAgICAgICAgaWYgKGZuZGlhZ3MpCisgICAgICAgICAgICAgICAgICAgICAgY2ttYWttc2coZm52 YWwsRk5WQUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8RVJST1I6UkVTVUxU X1RPT19MT05HOlxcZiIsZm4sIigpPiIsTlVMTCk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UK KyAgICAgICAgICAgICAgICAgICAgICBmbnZhbFswXSA9IE5VTDsKKyAgICAgICAgICAgICAgICAg ICAgcCA9IGZudmFsOworICAgICAgICAgICAgICAgICAgICBnb3RvIGZuZW5kOworICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoayA+IDApIHsgICAgICAgICAgICAvKiBJZiB0 aGVyZSBpcyBzb21ldGhpbmcgdG8gY29weSAqLworICAgICAgICAgICAgICAgICAgICBmb3IgKGkg PSAwOyBpIDwgbjsgaSsrKSB7IC8qIENvcHkgbG9vcCAqLworICAgICAgICAgICAgICAgICAgICAg ICAgcyA9IGJwWzBdOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGs7 IGorKykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgocCAtIGZudmFsKSA+PSBG TlZBTEwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsgICAgLyogc2hvdWxk bid0IGhhcHBlbi4uLiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICpwKysgPSAqcysrOworICAgICAgICAgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICpwID0g TlVMOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsK KyAgICAgICAgICAgIGZhaWxlZCA9IDE7CisgICAgICAgICAgICBldmFsZXJyKGZuKTsKKyAgICAg ICAgfQorICAgICAgICBwID0gZm52YWw7CisgICAgICAgIGdvdG8gZm5lbmQ7CisKKyNpZm5kZWYg Tk9GUklMTFMKKyAgICAgIGNhc2UgRk5fUkVWOiAgICAgICAgICAgICAgICAgICAgICAvKiBcZnJl dmVyc2UoKSAqLworICAgICAgICBpZiAoYXJnbiA8IDEpCisgICAgICAgICAgZ290byBmbmVuZDsK KyAgICAgICAgeXlzdHJpbmcoYnBbMF0sJnApOworICAgICAgICBnb3RvIGZuZW5kOworI2VuZGlm IC8qIE5PRlJJTExTICovCisKKyAgICAgIGNhc2UgRk5fUlBBOiAgICAgICAgICAgICAgICAgICAg ICAvKiBcZnJwYWQoKSBhbmQgXGZscGFkKCkgKi8KKyAgICAgIGNhc2UgRk5fTFBBOgorICAgICAg ICBpZiAoYXJnbiA8IDEpCisgICAgICAgICAgZ290byBmbmVuZDsKKyAgICAgICAgdmFsMSA9ICIi OworICAgICAgICBpZiAoYXJnbiA+IDEpCisgICAgICAgICAgaWYgKCooYnBbMV0pKQorICAgICAg ICAgICAgdmFsMSA9IGV2YWx4KGJwWzFdKTsKKyAgICAgICAgaWYgKGFyZ24gPT0gMSkgeyAgICAg ICAgICAgICAgICAvKiBJZiBhIG51bWJlciB3YXNuJ3QgZ2l2ZW4gKi8KKyAgICAgICAgICAgIHAg PSBmbnZhbDsgICAgICAgICAgICAgICAgICAvKiBqdXN0IHJldHVybiB0aGUgb3JpZ2luYWwgc3Ry aW5nICovCisgICAgICAgICAgICBja3N0cm5jcHkocCxicFswXSxGTlZBTEwpOworICAgICAgICB9 IGVsc2UgaWYgKGFyZ24gPiAxICYmICAhKnZhbDEpIHsKKyAgICAgICAgICAgIGZhaWxlZCA9IDE7 CisgICAgICAgICAgICBldmFsZXJyKGZuKTsKKyAgICAgICAgfSBlbHNlIC8qIGlmIChjaGtudW0o dmFsMSkpICovIHsgLyogUmVwZWF0IGNvdW50ICovCisgICAgICAgICAgICBjaGFyIHBjOworICAg ICAgICAgICAgbiA9IGF0b2kodmFsMSk7CisgICAgICAgICAgICBpZiAobiA+PSAwKSB7CisgICAg ICAgICAgICAgICAgcCA9IGZudmFsOworICAgICAgICAgICAgICAgIGsgPSAoaW50KXN0cmxlbihi cFswXSk7IC8qIExlbmd0aCBvZiBzdHJpbmcgdG8gYmUgcGFkZGVkICovCisgICAgICAgICAgICAg ICAgaWYgKGsgPj0gbikgeyAgICAgICAgICAgLyogSXQncyBhbHJlYWR5IGxvbmcgZW5vdWdoICov CisgICAgICAgICAgICAgICAgICAgIGNrc3RybmNweShwLGJwWzBdLEZOVkFMTCk7CisgICAgICAg ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG4gKyBrIDw9IEZOVkFM TCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcGMgPSAoY2hhcikgKChhcmduIDwgMykgPyBT UCA6ICpicFsyXSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXBjKSBwYyA9IFNQOwor ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN4ID09IEZOX1JQQSkgeyAvKiBSUEFEICovCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybmNweShwLGJwWzBdLGspOyAvKiAobGVhdmUg aXQgbGlrZSB0aGlzKSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBba10gPSBOVUw7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCArPSBrOworICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGZvciAoaSA9IGs7IGkgPCBuOyBpKyspCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAqcCsrID0gcGM7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeyAgICAg ICAgLyogTFBBRCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gLT0gazsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKnArKyA9IHBjOworICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHN0cm5jcHkocCxicFswXSxrKTsgLyogKGxlYXZlIGl0IGxpa2UgdGhpcykgKi8KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICBwW2tdID0gTlVMOworICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHAgKz0gazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAqcCA9IE5VTDsKKyAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcCA9IGZudmFsOworICAgICAgICBn b3RvIGZuZW5kOworCisjaWZkZWYgWkZDREFUCisgICAgICBjYXNlIEZOX0ZEOiAgICAgICAgICAg ICAgICAgICAgICAgLyogXGZkYXRlKGZpbGVuYW1lKSAqLworICAgICAgICBwID0gZm52YWw7Cisg ICAgICAgIHMgPSB6ZmNkYXQoYnBbMF0pOworICAgICAgICBpZiAoIXMpIHMgPSAiIjsKKyAgICAg ICAgaWYgKCEqcykgeworICAgICAgICAgICAgZmFpbGVkID0gMTsKKyAgICAgICAgICAgIGlmIChm bmRpYWdzKQorICAgICAgICAgICAgICBja21ha21zZyhmbnZhbCxGTlZBTEwsIjxFUlJPUjpGSUxF X05PVF9GT1VORDpcXGYiLGZuLCIoKT4iLE5VTEwpOworICAgICAgICAgICAgZ290byBmbmVuZDsK KyAgICAgICAgfQorICAgICAgICBja3N0cm5jcHkoZm52YWwscyxGTlZBTEwpOworI2VuZGlmIC8q IFpGQ0RBVCAqLworICAgICAgICBnb3RvIGZuZW5kOworCisgICAgfSAvKiBCcmVhayB1cCBiaWcg c3dpdGNoLi4uICovCisKKyAgICBzd2l0Y2ggKHkpIHsKKyAgICAgIGNhc2UgRk5fRlM6IHsJCQkv KiBcZnNpemUoZmlsZW5hbWUpICovCisJICBDS19PRkZfVCB6OworCSAgcCA9IGZudmFsOworCSAg eiA9IHpjaGtpKGJwWzBdKTsKKwkgIGlmICh6IDwgKENLX09GRl9UKTApIHsKKwkgICAgICBmYWls ZWQgPSAxOworCSAgICAgIGlmIChmbmRpYWdzKSB7CisJCSAgaWYgKHogPT0gKENLX09GRl9UKS0x KQorCQkgICAgY2ttYWttc2coZm52YWwsRk5WQUxMLAorCQkJICAgICAiPEVSUk9SOkZJTEVfTk9U X0ZPVU5EOlxcZiIsZm4sIigpPiIsTlVMTCk7CisJCSAgZWxzZSBpZiAoeiA9PSAoQ0tfT0ZGX1Qp LTIpCisJCSAgICBja21ha21zZyhmbnZhbCxGTlZBTEwsCisJCQkgICAgICI8RVJST1I6RklMRV9O T1RfUkVBREFCTEU6XFxmIixmbiwiKCk+IixOVUxMKTsKKwkJICBlbHNlIGlmICh6ID09IChDS19P RkZfVCktMykKKwkJICAgIGNrbWFrbXNnKGZudmFsLEZOVkFMTCwKKwkJCSAgICAgIjxFUlJPUjpG SUxFX05PVF9BQ0NFU1NJQkxFOlxcZiIsZm4sIigpPiIsTlVMTCk7CisJCSAgZWxzZQorCQkgICAg Y2ttYWttc2coZm52YWwsRk5WQUxMLAorCQkJICAgICAiPEVSUk9SOkZJTEVfRVJST1I6XFxmIixm biwiKCk+IixOVUxMKTsKKwkgICAgICB9CisJICAgICAgZ290byBmbmVuZDsKKwkgIH0KKwkgIGNr c3RybmNweShmbnZhbCxja2ZzdG9hKHopLEZOVkFMTCk7CisJICBnb3RvIGZuZW5kOworICAgICAg fQorICAgICAgY2FzZSBGTl9WRVI6ICAgICAgICAgICAgICAgICAgICAgIC8qIFxmdmVyaWZ5KCkg Ki8KKwlwID0gIi0xIjsKKwlpZiAoYXJnbiA9PSAxKQkJCS8qIE5vIHNlY29uZCBhcmcgKi8KKwkg IGdvdG8gZm5lbmQ7CisJZWxzZSBpZiAoIWJwWzFdKQkJLyogT3Igc2Vjb25kIGFyZyBudWxsICov CisJICBnb3RvIGZuZW5kOworCWVsc2UgaWYgKCEqKGJwWzFdKSkJCS8qIG9yIGVtcHR5LiAqLwor CSAgZ290byBmbmVuZDsKKyAgICAgICAgcCA9ICIwIjsKKyAgICAgICAgaWYgKGFyZ24gPiAxKSB7 ICAgICAgICAgICAgICAgICAvKiBPbmx5IHdvcmtzIGlmIHdlIGhhdmUgMiBvciAzIGFyZ3MgKi8K KyAgICAgICAgICAgIGludCBzdGFydDsKKyAgICAgICAgICAgIGNoYXIgKnMyLCBjaDEsIGNoMjsK KyAgICAgICAgICAgIHN0YXJ0ID0gMDsKKyAgICAgICAgICAgIGlmIChhcmduID4gMikgeyAgICAg ICAgICAgICAvKiBTdGFydGluZyBwb3NpdGlvbiBzcGVjaWZpZWQgKi8KKyAgICAgICAgICAgICAg ICB2YWwxID0gKihicFsyXSkgPyBldmFseChicFsyXSkgOiAiMCI7CisgICAgICAgICAgICAgICAg aWYgKGNoa251bSh2YWwxKSkgeworICAgICAgICAgICAgICAgICAgICBzdGFydCA9IGF0b2kodmFs MSkgLyogLSAxICovOworICAgICAgICAgICAgICAgICAgICBpZiAoc3RhcnQgPCAwKSBzdGFydCA9 IDA7CisgICAgICAgICAgICAgICAgICAgIGlmIChzdGFydCA+IChpbnQpc3RybGVuKGJwWzFdKSkK KyAgICAgICAgICAgICAgICAgICAgICBnb3RvIHZlcmZpbjsKKyAgICAgICAgICAgICAgICB9IGVs c2UgeworICAgICAgICAgICAgICAgICAgICBmYWlsZWQgPSAxOworICAgICAgICAgICAgICAgICAg ICBldmFsZXJyKGZuKTsKKyAgICAgICAgICAgICAgICAgICAgZ290byBmbmVuZDsKKyAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpID0gc3RhcnQ7CisgICAgICAg ICAgICBwID0gIjAiOworICAgICAgICAgICAgZm9yIChzID0gYnBbMV0gKyBzdGFydDsgKnM7IHMr KyxpKyspIHsKKyAgICAgICAgICAgICAgICBjaDEgPSAqczsKKyAgICAgICAgICAgICAgICBpZiAo IWlucGNhc1tjbWRsdmxdKSBpZiAoaXNsb3dlcihjaDEpKSBjaDEgPSB0b3VwcGVyKGNoMSk7Cisg ICAgICAgICAgICAgICAgaiA9IDA7CisgICAgICAgICAgICAgICAgZm9yIChzMiA9IGJwWzBdOyAq czI7IHMyKyspIHsKKyAgICAgICAgICAgICAgICAgICAgY2gyID0gKnMyOworICAgICAgICAgICAg ICAgICAgICBpZiAoIWlucGNhc1tjbWRsdmxdKSBpZiAoaXNsb3dlcihjaDIpKSBjaDIgPSB0b3Vw cGVyKGNoMik7CisgICAgICAgICAgICAgICAgICAgIGlmIChjaDEgPT0gY2gyKSB7CisgICAgICAg ICAgICAgICAgICAgICAgICBqID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg IGlmIChqID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgc3ByaW50ZihmbnZhbCwiJWQiLGkr MSk7IC8qIFNBRkUgKi8KKyAgICAgICAgICAgICAgICAgICAgcCA9IGZudmFsOworICAgICAgICAg ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg ICAgIH0KKyAgICAgIHZlcmZpbjoKKyAgICAgICAgZ290byBmbmVuZDsKKworICAgICAgY2FzZSBG Tl9JUEE6ICAgICAgICAgICAgICAgICAgICAgIC8qIEZpbmQgYW5kIHJldHVybiBJUCBhZGRyZXNz ICovCisgICAgICAgIGlmIChhcmduID4gMCkgeyAgICAgICAgICAgICAgICAgLyogaW4gYXJndW1l bnQgc3RyaW5nLiAqLworICAgICAgICAgICAgaW50IHN0YXJ0ID0gMDsKKyAgICAgICAgICAgIGlm IChhcmduID4gMSkgeyAgICAgICAgICAgICAvKiBTdGFydGluZyBwb3NpdGlvbiBzcGVjaWZpZWQg Ki8KKyAgICAgICAgICAgICAgICBpZiAoY2hrbnVtKGJwWzFdKSkgeworICAgICAgICAgICAgICAg ICAgICBzdGFydCA9IGF0b2koYnBbMV0pIC0gMTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0 YXJ0IDwgMCkgc3RhcnQgPSAwOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg ICAgICAgICAgIGZhaWxlZCA9IDE7CisgICAgICAgICAgICAgICAgICAgIGlmIChmbmRpYWdzKQor ICAgICAgICAgICAgICAgICAgICAgIGNrbWFrbXNnKGZudmFsLEZOVkFMTCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAiPEVSUk9SOkFSR19OT1RfTlVNRVJJQzpcXGYiLGZuLCIoKT4i LE5VTEwpOworICAgICAgICAgICAgICAgICAgICBnb3RvIGZuZW5kOworICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHAgPSBnZXRpcChicFswXStzdGFydCk7Cisg ICAgICAgIH0gZWxzZSBwID0gIiI7CisgICAgICAgIGdvdG8gZm5lbmQ7CisKKyNpZmRlZiBPUzIK KyAgICAgIGNhc2UgRk5fQ1JZOgorICAgICAgICBwID0gIiI7CisgICAgICAgIGlmIChhcmduID4g MCkgeworICAgICAgICAgICAgcCA9IGZudmFsOworICAgICAgICAgICAgY2tzdHJuY3B5KHAsYnBb MF0sRk5WQUxMKTsKKyAgICAgICAgICAgIGNrX2VuY3J5cHQocCk7CisgICAgICAgIH0KKyAgICAg ICAgZ290byBmbmVuZDsKKworICAgICAgY2FzZSBGTl9PT1g6CisgICAgICAgIHAgPSAiIjsKKyAg ICAgICAgaWYgKGFyZ24gPiAwKQorICAgICAgICAgIHAgPSAoY2hhciAqKSBja19vb3goYnBbMF0s IChhcmduID4gMSkgPyBicFsxXSA6ICIiKTsKKyAgICAgICAgZ290byBmbmVuZDsKKyNlbmRpZiAv KiBPUzIgKi8KKworICAgICAgY2FzZSBGTl9IRVg6ICAgICAgICAgICAgICAgICAgICAgIC8qIFxm aGV4aWZ5KGFyZzEpICovCisgICAgICAgIGlmIChhcmduIDwgMSkKKyAgICAgICAgICBnb3RvIGZu ZW5kOworICAgICAgICBpZiAoKGludClzdHJsZW4oYnBbMF0pIDwgKEZOVkFMTCAvIDIpKSB7Cisg ICAgICAgICAgICBzID0gYnBbMF07CisgICAgICAgICAgICBwID0gZm52YWw7CisgICAgICAgICAg ICB3aGlsZSAoKnMpIHsKKyAgICAgICAgICAgICAgICB4ID0gKCpzID4+IDQpICYgMHgwZjsKKyAg ICAgICAgICAgICAgICAqcCsrID0gaGV4ZGlnaXRzW3hdOworICAgICAgICAgICAgICAgIHggPSAq cysrICYgMHgwZjsKKyAgICAgICAgICAgICAgICAqcCsrID0gaGV4ZGlnaXRzW3hdOworICAgICAg ICAgICAgfQorICAgICAgICAgICAgKnAgPSBOVUw7CisgICAgICAgICAgICBwID0gZm52YWw7Cisg ICAgICAgIH0KKyAgICAgICAgZ290byBmbmVuZDsKKworICAgICAgY2FzZSBGTl9VTlRBQjoJCQkv KiBcZnVudGFiKGFyZzEpICovCisJaWYgKGFyZ24gPCAxKQorCSAgZ290byBmbmVuZDsKKwlpZiAo KGludClzdHJsZW4oYnBbMF0pIDwgKEZOVkFMTCAqIDIpKSB7CisJICAgIHMgPSBicFswXTsKKwkg ICAgcCA9IGZudmFsOworCSAgICBpZiAodW50YWJpZnkoYnBbMF0scCxGTlZBTEwpIDwgMCkgewor CQlmYWlsZWQgPSAxOworCQlpZiAoZm5kaWFncykKKwkJICBja21ha21zZyhmbnZhbCxGTlZBTEws CisJCQkgICAiPEVSUk9SOk9WRVJGTE9XOlxcZiIsZm4sIigpPiIsTlVMTCk7CisJICAgIH0KKwkg ICAgZ290byBmbmVuZDsKKwl9CisKKyAgICAgIGNhc2UgRk5fVU5IOiB7ICAgICAgICAgICAgICAg ICAgICAvKiBcZnVuaGV4KGFyZzEpICovCisgICAgICAgICAgaW50IGNbMl0sIGk7CisgICAgICAg ICAgaWYgKGFyZ24gPCAxKQorICAgICAgICAgICAgZ290byBmbmVuZDsKKyAgICAgICAgICBpZiAo KGludClzdHJsZW4oYnBbMF0pIDwgKEZOVkFMTCAqIDIpKSB7CisgICAgICAgICAgICAgIHMgPSBi cFswXTsKKyAgICAgICAgICAgICAgcCA9IGZudmFsOworICAgICAgICAgICAgICB3aGlsZSAoKnMp IHsKKyAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKyAgICAgICAg ICAgICAgICAgICAgICBjW2ldID0gKnMrKzsKKyAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNb aV0pIHsgcCA9ICIiOyBnb3RvIHVuaGV4ZmluOyB9CisgICAgICAgICAgICAgICAgICAgICAgaWYg KGlzbG93ZXIoY1tpXSkpIGNbaV0gPSB0b3VwcGVyKGNbaV0pOworICAgICAgICAgICAgICAgICAg ICAgIGlmIChjW2ldID49ICcwJyAmJiBjW2ldIDw9ICc5JykgeworICAgICAgICAgICAgICAgICAg ICAgICAgICBjW2ldIC09IDB4MzA7CisgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChj W2ldID49ICdBJyAmJiBjW2ldIDw9ICdGJykgeworICAgICAgICAgICAgICAgICAgICAgICAgICBj W2ldIC09IDB4Mzc7CisgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgZmFpbGVkID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg KGZuZGlhZ3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ttYWttc2coZm52YWwsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRk5WQUxMLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICI8RVJST1I6QVJHX09VVF9PRl9SQU5HRTpcXGYiLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZuLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICIoKT4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIE5VTEwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwor ICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGZuZW5kOworICAgICAgICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICpwKysgPSAoKGNb MF0gPDwgNCkgJiAweGYwKSB8IChjWzFdICYgMHgwZik7CisgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgKnAgPSBOVUw7CisgICAgICAgICAgICAgIHAgPSBmbnZhbDsKKyAgICAgICAgICB9 CisgICAgICAgIHVuaGV4ZmluOgorICAgICAgICAgIGdvdG8gZm5lbmQ7CisgICAgICB9CisKKyAg ICAgIGNhc2UgRk5fQlJLOiB7ICAgICAgICAgICAgICAgICAgICAvKiBcZmJyZWFrKCkgKi8KKyAg ICAgICAgICBjaGFyICogYzsgICAgICAgICAgICAgICAgICAgICAvKiBDaGFyYWN0ZXJzIHRvIGJy ZWFrIG9uICovCisgICAgICAgICAgY2hhciBjMiwgczI7CisgICAgICAgICAgaW50IHN0YXJ0ID0g MDsKKyAgICAgICAgICBpbnQgZG9uZSA9IDA7CisgICAgICAgICAgaWYgKGFyZ24gPCAxKQorICAg ICAgICAgICAgZ290byBmbmVuZDsKKyAgICAgICAgICBpZiAoYXJnbiA+IDIpIHsKKyAgICAgICAg ICAgICAgcyA9IGJwWzJdID8gYnBbMl0gOiAiMCI7CisgICAgICAgICAgICAgIGlmIChjaGtudW0o cykpIHsKKyAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gYXRvaShzKTsKKyAgICAgICAgICAgICAg ICAgIGlmIChzdGFydCA8IDApIHN0YXJ0ID0gMDsKKyAgICAgICAgICAgICAgICAgIGlmIChzdGFy dCA+IChpbnQpc3RybGVuKGJwWzBdKSkKKyAgICAgICAgICAgICAgICAgICAgZ290byBicmtmaW47 CisgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICBmYWlsZWQgPSAxOwor ICAgICAgICAgICAgICAgICAgaWYgKGZuZGlhZ3MpCisgICAgICAgICAgICAgICAgICAgIGNrbWFr bXNnKGZudmFsLEZOVkFMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxFUlJPUjpB UkdfTk9UX05VTUVSSUM6XFxmIixmbiwiKCk+IixOVUxMKTsKKyAgICAgICAgICAgICAgICAgIGdv dG8gZm5lbmQ7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgICAgcyA9IGJw WzBdICsgc3RhcnQ7ICAgICAgICAgICAgLyogU291cmNlIHBvaW50ZXIgKi8KKworICAgICAgICAg IHdoaWxlICgqcyAmJiAhZG9uZSkgeworICAgICAgICAgICAgICBzMiA9ICpzOworICAgICAgICAg ICAgICBpZiAoIWlucGNhc1tjbWRsdmxdICYmIGlzbG93ZXIoczIpKSBzMiA9IHRvdXBwZXIoczIp OworICAgICAgICAgICAgICBjID0gYnBbMV0gPyBicFsxXSA6ICIiOyAgIC8qIENoYXJhY3RlciB0 byBicmVhayBvbiAqLworICAgICAgICAgICAgICB3aGlsZSAoKmMpIHsKKyAgICAgICAgICAgICAg ICAgIGMyID0gKmM7CisgICAgICAgICAgICAgICAgICBpZiAoIWlucGNhc1tjbWRsdmxdICYmIGlz bG93ZXIoYzIpKSBjMiA9IHRvdXBwZXIoYzIpOworICAgICAgICAgICAgICAgICAgaWYgKGMyID09 IHMyKSB7CisgICAgICAgICAgICAgICAgICAgICAgZG9uZSA9IDE7CisgICAgICAgICAgICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICBjKys7 CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgaWYgKGRvbmUpIGJyZWFrOworICAgICAg ICAgICAgICAqcCsrID0gKnMrKzsKKyAgICAgICAgICB9CisgICAgICAgICAgKnAgPSBOVUw7ICAg ICAgICAgICAgICAgICAgICAgLyogdGVybWluYXRlIHRoZSByZXN1bHQgKi8KKyAgICAgICAgICBw ID0gZm52YWw7ICAgICAgICAgICAgICAgICAgICAvKiBhbmQgcG9pbnQgdG8gaXQuICovCisgICAg ICAgIGJya2ZpbjoKKyAgICAgICAgICBnb3RvIGZuZW5kOworICAgICAgfQorCisgICAgICBjYXNl IEZOX1NQTjogeyAgICAgICAgICAgICAgICAgICAgLyogXGZzcGFuKCkgKi8KKyAgICAgICAgICBj aGFyICpxOworICAgICAgICAgIGNoYXIgYzEsIGMyOworICAgICAgICAgIGludCBzdGFydCA9IDA7 CisgICAgICAgICAgaWYgKGFyZ24gPCAxKQorICAgICAgICAgICAgZ290byBmbmVuZDsKKyAgICAg ICAgICBpZiAoYXJnbiA+IDIpIHsgICAgICAgICAgICAgICAvKiBTdGFydGluZyBwb3NpdGlvbiAq LworICAgICAgICAgICAgICBzID0gYnBbMl0gPyBicFsyXSA6ICIwIjsKKyAgICAgICAgICAgICAg aWYgKGNoa251bShzKSkgeworICAgICAgICAgICAgICAgICAgc3RhcnQgPSBhdG9pKHMpOworICAg ICAgICAgICAgICAgICAgaWYgKHN0YXJ0IDwgMCkgc3RhcnQgPSAwOworICAgICAgICAgICAgICB9 IGVsc2UgeworICAgICAgICAgICAgICAgICAgZmFpbGVkID0gMTsKKyAgICAgICAgICAgICAgICAg IGlmIChmbmRpYWdzKQorICAgICAgICAgICAgICAgICAgICBja21ha21zZyhmbnZhbCxGTlZBTEws CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8RVJST1I6QVJHX05PVF9OVU1FUklDOlxc ZiIsZm4sIigpPiIsTlVMTCk7CisgICAgICAgICAgICAgICAgICBnb3RvIGZuZW5kOworICAgICAg ICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAgIHMgPSBicFswXSArIHN0YXJ0OyAgICAg ICAgICAgIC8qIFNvdXJjZSBwb2ludGVyICovCisgICAgICAgICAgaWYgKGFyZ24gPiAxICYmCisg ICAgICAgICAgICAgIChpbnQpc3RybGVuKGJwWzFdKSA+IDAgJiYKKyAgICAgICAgICAgICAgc3Rh cnQgPD0gKGludClzdHJsZW4oYnBbMF0pKSB7CisgICAgICAgICAgICAgIHdoaWxlICgqcykgeyAg ICAgICAgICAgICAgLyogTG9vcCB0aHJ1IHNvdXJjZSBzdHJpbmcgKi8KKyAgICAgICAgICAgICAg ICAgIHEgPSBicFsxXTsgICAgICAgICAgICAvKiBTcGFuIHN0cmluZyAqLworICAgICAgICAgICAg ICAgICAgYzEgPSAqczsKKyAgICAgICAgICAgICAgICAgIGlmICghaW5wY2FzW2NtZGx2bF0pCisg ICAgICAgICAgICAgICAgICAgIGlmIChpc2xvd2VyKGMxKSkgYzEgPSB0b3VwcGVyKGMxKTsKKyAg ICAgICAgICAgICAgICAgIHggPSAwOworICAgICAgICAgICAgICAgICAgd2hpbGUgKChjMiA9ICpx KyspKSB7CisgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpbnBjYXNbY21kbHZsXSkKKyAgICAg ICAgICAgICAgICAgICAgICAgIGlmIChpc2xvd2VyKGMyKSkgYzIgPSB0b3VwcGVyKGMyKTsKKyAg ICAgICAgICAgICAgICAgICAgICBpZiAoYzEgPT0gYzIpIHsgeCA9IDE7IGJyZWFrOyB9CisgICAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICBpZiAoIXgpIGJyZWFrOworICAgICAg ICAgICAgICAgICAgKnArKyA9ICpzKys7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg KnAgPSBOVUw7ICAgICAgICAgICAgICAgICAvKiBUZXJtaW5hdGUgYW5kIHJldHVybiB0aGUgcmVz dWx0ICovCisgICAgICAgICAgICAgIHAgPSBmbnZhbDsKKyAgICAgICAgICB9CisgICAgICAgICAg Z290byBmbmVuZDsKKyAgICAgIH0KKyAgICB9IC8qIEJyZWFrIHVwIGJpZyBzd2l0Y2guLi4gKi8K KworICAgIHN3aXRjaCAoeSkgeworICAgICAgY2FzZSBGTl9UUk06ICAgICAgICAgICAgICAgICAg ICAgIC8qIFxmdHJpbShzMVssczJdKSAqLworICAgICAgY2FzZSBGTl9MVFI6ICAgICAgICAgICAg ICAgICAgICAgIC8qIFxmbHRyaW0oczFbLHMyXSkgKi8KKyAgICAgICAgaWYgKGFyZ24gPCAxKQor ICAgICAgICAgIGdvdG8gZm5lbmQ7CisgICAgICAgIGlmICgobGVuMSA9IChpbnQpc3RybGVuKGJw WzBdKSkgPiAwKSB7CisgICAgICAgICAgICBpZiAobGVuMSA+IEZOVkFMTCkKKyAgICAgICAgICAg ICAgbGVuMSA9IEZOVkFMTDsKKyAgICAgICAgICAgIHMgPSAiIFx0XHJcbiI7CisgICAgICAgICAg ICBpZiAoYXJnbiA+IDEpICAgICAgICAgICAgICAgLyogVHJpbSBsaXN0IGdpdmVuICovCisgICAg ICAgICAgICAgIHMgPSBicFsxXTsKKyAgICAgICAgICAgIGxlbjIgPSAoaW50KXN0cmxlbihzKTsK KyAgICAgICAgICAgIGlmIChsZW4yIDwgMSkgeyAgICAgICAgICAgICAvKiBvciBub3QuLi4gKi8K KyAgICAgICAgICAgICAgICBzID0gIiBcdFxyXG4iOyAgICAgICAgICAvKiBEZWZhdWx0IGlzIHRv IHRyaW0gd2hpdGVzcGFjZSAqLworICAgICAgICAgICAgICAgIGxlbjIgPSAyOworICAgICAgICAg ICAgfQorICAgICAgICAgICAgaWYgKGN4ID09IEZOX1RSTSkgeyAgICAgICAgIC8qIFRyaW0gZnJv bSByaWdodCAqLworICAgICAgICAgICAgICAgIGNoYXIgKiBxLCBwMiwgcTI7CisgICAgICAgICAg ICAgICAgY2tzdHJuY3B5KGZudmFsLGJwWzBdLEZOVkFMTCk7IC8qIENvcHkgc3RyaW5nIHRvIG91 dHB1dCAqLworICAgICAgICAgICAgICAgIHAgPSBmbnZhbCArIGxlbjEgLSAxOyAgIC8qIFBvaW50 IHRvIGxhc3QgY2hhcmFjdGVyICovCisKKyAgICAgICAgICAgICAgICB3aGlsZSAocCA+PSAoY2hh ciAqKWZudmFsKSB7IC8qIEdvIGJhY2t3YXJkcyAqLworICAgICAgICAgICAgICAgICAgICBxID0g czsgICAgICAgICAgICAgIC8qIFBvaW50IHRvIHRyaW0gbGlzdCAqLworICAgICAgICAgICAgICAg ICAgICBwMiA9ICpwOworICAgICAgICAgICAgICAgICAgICBpZiAoIWlucGNhc1tjbWRsdmxdKQor ICAgICAgICAgICAgICAgICAgICAgIGlmIChpc2xvd2VyKHAyKSkgcDIgPSB0b3VwcGVyKHAyKTsK KyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCpxKSB7ICAgICAgICAvKiBJcyB0aGlzIGNoYXIg aW4gdHJpbSBsaXN0PyAqLworICAgICAgICAgICAgICAgICAgICAgICAgcTIgPSAqcTsKKyAgICAg ICAgICAgICAgICAgICAgICAgIGlmICghaW5wY2FzW2NtZGx2bF0pCisgICAgICAgICAgICAgICAg ICAgICAgICAgIGlmIChpc2xvd2VyKHEyKSkgcTIgPSB0b3VwcGVyKHEyKTsKKyAgICAgICAgICAg ICAgICAgICAgICAgIGlmIChwMiA9PSBxMikgeyAvKiBZZXMsIG51bGwgaXQgb3V0ICovCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKnAgPSBOVUw7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg ICAgICAgICBxKys7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg aWYgKCEqcSkgICAgICAgICAgICAvKiBUcmltIGxpc3QgZXhoYXVzdGVkICovCisgICAgICAgICAg ICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgLyogU28gd2UncmUgZG9uZS4gKi8KKyAgICAg ICAgICAgICAgICAgICAgcC0tOyAgICAgICAgICAgICAgICAvKiBFbHNlIGtlZXAgdHJpbW1pbmcg Ki8KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAg ICAgICAgLyogVHJpbSBmcm9tIGxlZnQgKi8KKyAgICAgICAgICAgICAgICBjaGFyICogcSwgcDIs IHEyOworICAgICAgICAgICAgICAgIHAgPSBicFswXTsgICAgICAgICAgICAgIC8qIFNvdXJjZSAq LworICAgICAgICAgICAgICAgIHdoaWxlICgqcCkgeworICAgICAgICAgICAgICAgICAgICBwMiA9 ICpwOworICAgICAgICAgICAgICAgICAgICBpZiAoIWlucGNhc1tjbWRsdmxdKQorICAgICAgICAg ICAgICAgICAgICAgIGlmIChpc2xvd2VyKHAyKSkgcDIgPSB0b3VwcGVyKHAyKTsKKyAgICAgICAg ICAgICAgICAgICAgcSA9IHM7CisgICAgICAgICAgICAgICAgICAgIHdoaWxlICgqcSkgeyAgICAg ICAgLyogSXMgdGhpcyBjaGFyIGluIHRyaW0gbGlzdD8gKi8KKyAgICAgICAgICAgICAgICAgICAg ICAgIHEyID0gKnE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlucGNhc1tjbWRsdmxd KQorICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNsb3dlcihxMikpIHEyID0gdG91cHBl cihxMik7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocDIgPT0gcTIpIHsgLyogWWVzLCBw b2ludCBwYXN0IGl0ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCsrOyAgICAgICAg LyogYW5kIHRyeSBuZXh0IHNvdXJjZSBjaGFyYWN0ZXIgKi8KKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ICAgICAgICAgIHErKzsgICAgICAgICAgICAvKiBObywgdHJ5IG5leHQgdHJpbSBjaGFyYWN0ZXIg Ki8KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoISpxKSAg ICAgICAgICAgIC8qIFRyaW0gbGlzdCBleGhhdXN0ZWQgKi8KKyAgICAgICAgICAgICAgICAgICAg ICBicmVhazsgICAgICAgICAgICAvKiBTbyB3ZSdyZSBkb25lLiAqLworICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgICBja3N0cm5jcHkoZm52YWwscCxGTlZBTEwpOworICAgICAgICAg ICAgfQorICAgICAgICAgICAgcCA9IGZudmFsOworICAgICAgICB9IGVsc2UgcCA9ICIiOworICAg ICAgICBnb3RvIGZuZW5kOworCisgICAgICBjYXNlIEZOX0NBUDogICAgICAgICAgICAgICAgICAg ICAgLyogXGZjYXBpdGFsaXplKGFyZzEpICovCisgICAgICAgIGlmIChhcmduIDwgMSkKKyAgICAg ICAgICBnb3RvIGZuZW5kOworICAgICAgICBzID0gYnBbMF07CisgICAgICAgIHAgPSBmbnZhbDsK KyAgICAgICAgeCA9IDA7CisgICAgICAgIHdoaWxlICgoYyA9ICpzKyspKSB7CisgICAgICAgICAg ICBpZiAoaXNhbHBoYShjKSkgeworICAgICAgICAgICAgICAgIGlmICh4ID09IDApIHsKKyAgICAg ICAgICAgICAgICAgICAgeCA9IDE7CisgICAgICAgICAgICAgICAgICAgIGlmIChpc2xvd2VyKGMp KQorICAgICAgICAgICAgICAgICAgICAgIGMgPSB0b3VwcGVyKGMpOworICAgICAgICAgICAgICAg IH0gZWxzZSBpZiAoaXN1cHBlcihjKSkKKyAgICAgICAgICAgICAgICAgIGMgPSB0b2xvd2VyKGMp OworICAgICAgICAgICAgfQorICAgICAgICAgICAgKnArKyA9IGM7CisgICAgICAgIH0KKyAgICAg ICAgKnAgPSBOVUw7CisgICAgICAgIHAgPSBmbnZhbDsKKyAgICAgICAgZ290byBmbmVuZDsKKwor I2lmZGVmIENPTU1FTlQKKyAgICAgIGNhc2UgRk5fVE9EOiAgICAgICAgICAgICAgICAgICAgICAv KiBUaW1lIG9mIGRheSB0byBzZWNzIHNpbmNlIG1pZG5pdGUgKi8KKyAgICAgICAgc3ByaW50Zihm bnZhbCwiJWxkIix0b2Qyc2VjKGJwWzBdKSk7IC8qIFNBRkUgKi8KKyAgICAgICAgZ290byBmbmVu ZDsKKyNlbmRpZiAvKiBDT01NRU5UICovCisKKyAgICAgIGNhc2UgRk5fRkZOOiAgICAgICAgICAg ICAgICAgICAgICAvKiBGdWxsIHBhdGhuYW1lIG9mIGZpbGUgKi8KKyAgICAgICAgemZucWZwKGJw WzBdLEZOVkFMTCxwKTsKKyAgICAgICAgaWYgKCFwKSBwID0gIiI7CisgICAgICAgIGdvdG8gZm5l bmQ7CisKKyAgICAgIGNhc2UgRk5fQ0hLOiB7ICAgICAgICAgICAgICAgICAgICAvKiBcZmNoZWNr c3VtKCkgKi8KKyAgICAgICAgICBsb25nIGNoayA9IDA7CisgICAgICAgICAgcCA9IChhcmduID4g MCkgPyBicFswXSA6ICIiOworICAgICAgICAgIHdoaWxlICgqcCkgY2hrICs9ICpwKys7CisgICAg ICAgICAgc3ByaW50ZihmbnZhbCwiJWx1IixjaGspOyAgICAgLyogU0FGRSAqLworICAgICAgICAg IHAgPSBmbnZhbDsKKyAgICAgICAgICBnb3RvIGZuZW5kOworICAgICAgfQorCisjaWZuZGVmIE5P WEZFUgorICAgICAgY2FzZSBGTl9DUkM6ICAgICAgICAgICAgICAgICAgICAgIC8qIFxmY3JjMTYo KSAqLworICAgICAgICBpZiAoYXJnbiA+IDApCisgICAgICAgICAgc3ByaW50ZihmbnZhbCwiJXUi LCAgICAgICAgICAgLyogU0FGRSAqLworICAgICAgICAgICAgICAgICAgY2hrMygoQ0hBUiAqKWJw WzBdLChpbnQpc3RybGVuKGJwWzBdKSkpOworICAgICAgICBlbHNlCisgICAgICAgICAgcCA9ICIw IjsKKyAgICAgICAgZ290byBmbmVuZDsKKyNlbmRpZiAvKiBOT1hGRVIgKi8KKworICAgICAgY2Fz ZSBGTl9CU046ICAgICAgICAgICAgICAgICAgICAgIC8qIFxmYmFzZW5hbWUoKSAqLworICAgICAg ICB6c3RyaXAoYnBbMF0sJnApOworICAgICAgICBnb3RvIGZuZW5kOworCisjaWZuZGVmIE5PTE9D QUwKKyNpZmRlZiBPUzIKKyAgICAgIGNhc2UgRk5fU0NSTl9DWDogICAgICAgICAgICAgICAgICAv KiBcZnNjcm5jdXJ4KCkgKi8KKyAgICAgICAgcCA9IGZudmFsOworICAgICAgICBzcHJpbnRmKHAs IiVkIiwoaW50KVZzY3JuR2V0Q3VyUG9zKFZURVJNKS0+eCk7IC8qIFNBRkUgKi8KKyAgICAgICAg Z290byBmbmVuZDsKKworICAgICAgY2FzZSBGTl9TQ1JOX0NZOiAgICAgICAgICAgICAgICAgIC8q IFxmc2NybmN1cnkoKSAqLworICAgICAgICBwID0gZm52YWw7CisgICAgICAgIHNwcmludGYocCwi JWQiLChpbnQpVnNjcm5HZXRDdXJQb3MoVlRFUk0pLT55KTsgLyogU0FGRSAqLworICAgICAgICBn b3RvIGZuZW5kOworCisgICAgICBjYXNlIEZOX1NDUk5fU1RSOiB7ICAgICAgICAgICAgICAgLyog XGZzY3Juc3RyKCkgKi8KKyAgICAgICAgICB2aWRlb2xpbmUgKiBsaW5lID0gTlVMTDsKKyAgICAg ICAgICB2aW9jZWxsICogY2VsbHMgPSBOVUxMOworICAgICAgICAgIGludCByb3cgPSAwLCBjb2wg PSAwLCBsZW4gPSAwOworICAgICAgICAgIC8qIE5PVEU6IE9uIFVuaWNvZGUgc3lzdGVtcywgdGhl IHNjcmVlbiBjb250ZW50cyBhcmUgc3RvcmVkIGluICovCisgICAgICAgICAgLyogaW4gVW5pY29k ZS4gIFRoZXJlZm9yZSwgd2Ugc2hvdWxkIHJlYWxseSBiZSBwZXJmb3JtaW5nIGEgICAgKi8KKyAg ICAgICAgICAvKiBjb252ZXJzaW9uIHRvIHRoZSBsb2NhbCBjaGFyYWN0ZXIgc2V0LiAgICAgICAg ICAgICAgICAgICAgICAqLworCisgICAgICAgICAgLyogNi8xOC8yMDAwIC0gYWRkZWQgdGhlIHRy YW5zbGF0aW9uIHRvIGxjcyAqLworCisgICAgICAgICAgaWYgKGJwWzBdID09IE5VTEwgfHwgYnBb MF1bMF0gPT0gJ1wwJykgeworICAgICAgICAgICAgICByb3cgPSAwOworICAgICAgICAgIH0gZWxz ZSB7CisgICAgICAgICAgICAgIGlmIChjaGtudW0oYnBbMF0pKSB7CisgICAgICAgICAgICAgICAg ICByb3cgPSBhdG9pKGJwWzBdKTsKKyAgICAgICAgICAgICAgICAgIGlmIChyb3cgPCAwKQorICAg ICAgICAgICAgICAgICAgICByb3cgPSAwOworICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAg ICAgICAgICAgICAgZmFpbGVkID0gMTsKKyAgICAgICAgICAgICAgICAgIGlmIChmbmRpYWdzKQor ICAgICAgICAgICAgICAgICAgICBja21ha21zZyhmbnZhbCxGTlZBTEwsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICI8RVJST1I6QVJHX05PVF9OVU1FUklDOlxcZiIsZm4sIigpPiIsTlVM TCk7CisgICAgICAgICAgICAgICAgICBnb3RvIGZuZW5kOworICAgICAgICAgICAgICB9CisgICAg ICAgICAgfQorICAgICAgICAgIGxpbmUgPSBWc2NybkdldExpbmVGcm9tVG9wKCBWVEVSTSwgKFVT SE9SVCkgcm93ICk7CisgICAgICAgICAgaWYgKGxpbmUgIT0gTlVMTCkgeworICAgICAgICAgICAg ICBpZiAoYnBbMV0gPT0gTlVMTCB8fCBicFsxXVswXSA9PSAnXDAnKQorICAgICAgICAgICAgICAg IGNvbCA9IDA7CisgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgaWYgKGNo a251bShicFswXSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICBjb2wgPSBhdG9pKGJwWzFdKTsK KyAgICAgICAgICAgICAgICAgICAgICBpZiAoY29sIDwgMCB8fCBjb2wgPj0gbGluZS0+d2lkdGgp CisgICAgICAgICAgICAgICAgICAgICAgICBjb2wgPSAwOworICAgICAgICAgICAgICAgICAgfSBl bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICBmYWlsZWQgPSAxOworICAgICAgICAgICAgICAg ICAgICAgIGlmIChmbmRpYWdzKQorICAgICAgICAgICAgICAgICAgICAgICAgY2ttYWttc2coZm52 YWwsRk5WQUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxFUlJPUjpBUkdf Tk9UX05VTUVSSUM6XFxmIixmbiwiKCk+IixOVUxMKTsKKyAgICAgICAgICAgICAgICAgICAgICBn b3RvIGZuZW5kOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgIGlmIChicFsyXSA9PSBOVUxMIHx8IGJwWzJdWzBdID09ICdcMCcpIHsKKyAgICAgICAg ICAgICAgICAgIGxlbiA9IGxpbmUtPndpZHRoIC0gKGNvbCsxKTsKKyAgICAgICAgICAgICAgfSBl bHNlIHsKKyAgICAgICAgICAgICAgICAgIGlmICghY2hrbnVtKGJwWzJdKSkgeworICAgICAgICAg ICAgICAgICAgICAgIGZhaWxlZCA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgaWYgKGZuZGlh Z3MpCisgICAgICAgICAgICAgICAgICAgICAgICBja21ha21zZyhmbnZhbCxGTlZBTEwsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPEVSUk9SOkFSR19OT1RfTlVNRVJJQzpcXGYi LGZuLCIoKT4iLE5VTEwpOworICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZm5lbmQ7CisgICAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICBsZW4gPSBhdG9pKGJwWzJdKTsKKyAg ICAgICAgICAgICAgICAgIGlmIChsZW4gPCAwIHx8IGxlbiA+IGxpbmUtPndpZHRoKQorICAgICAg ICAgICAgICAgICAgICBsZW4gPSBsaW5lLT53aWR0aDsKKyAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICBjZWxscyA9IGxpbmUtPmNlbGxzOworICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBp IDwgbGVuOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgIGludCBwb3MgPSBpICsgY29sOworICAg ICAgICAgICAgICAgICAgaWYgKHBvcyA8IGxpbmUtPndpZHRoKSB7CisgICAgICAgICAgICAgICAg ICAgICAgaWYgKGlzdW5pY29kZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgZm52YWxbaV0g PSAoQ0hBUikgdXRvbHhsYXQoY2VsbHNbcG9zXS5jKTsKKyAgICAgICAgICAgICAgICAgICAgICBl bHNlCisgICAgICAgICAgICAgICAgICAgICAgICBmbnZhbFtpXSA9IChDSEFSKSAoY2VsbHNbcG9z XS5jICYgMHhGRik7CisgICAgICAgICAgICAgICAgICAgICAgaWYgKGZudmFsW2ldID09IDApCisg ICAgICAgICAgICAgICAgICAgICAgICBmbnZhbFtpXSA9IFNQOworICAgICAgICAgICAgICAgICAg fSBlbHNlCisgICAgICAgICAgICAgICAgICAgIGZudmFsW2ldID0gU1A7CisgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgZm52YWxbaV0gPSAnXDAnOworICAgICAgICAgIH0gZWxzZSB7Cisg ICAgICAgICAgICAgIGZudmFsWzBdID0gJ1wwJzsKKyAgICAgICAgICB9CisgICAgICAgICAgcCA9 IGZudmFsOworICAgICAgICAgIGdvdG8gZm5lbmQ7CisgICAgICB9CisjZW5kaWYgLyogT1MyICov CisjZW5kaWYgLyogTk9MT0NBTCAqLworCisjaWZuZGVmIE5PUFVTSAorICAgICAgY2FzZSBGTl9S QVc6ICAgICAgICAgICAgICAgICAgICAgIC8qIFxmcmF3Y29tbWFuZCgpICovCisgICAgICBjYXNl IEZOX0NNRDogeyAgICAgICAgICAgICAgICAgICAgLyogXGZjb21tYW5kKCkgKi8KKyAgICAgICAg ICBpbnQgeCwgYywgbiA9IEZOVkFMTDsKKyAgICAgICAgICB4ID0gMDsgICAgICAgICAgICAgICAg ICAgICAgICAvKiBDb21wbGV0aW9uIGZsYWcgKi8KKy8qCisgIFpJRklMRSBjYW4gYmUgc2FmZWx5 IHVzZWQgYmVjYXVzZSB3ZSBjYW4ndCBwb3NzaWJseSBiZSB0cmFuc2ZlcnJpbmcgYSBmaWxlCisg IHdoaWxlIGV4ZWN1dGluZyB0aGlzIGZ1bmN0aW9uLgorKi8KKyAgICAgICAgICBpZiAoIW5vcHVz aCAmJiB6eGNtZChaSUZJTEUsYnBbMF0pID4gMCkgeyAvKiBPcGVuIHRoZSBjb21tYW5kICovCisg ICAgICAgICAgICAgIHdoaWxlIChuLS0gPiAtMSkgeyAgICAgICAgLyogUmVhZCBmcm9tIGl0ICov CisgICAgICAgICAgICAgICAgICBpZiAoKGMgPSB6bWluY2hhcigpKSA8IDApIHsKKyAgICAgICAg ICAgICAgICAgICAgICB4ID0gMTsgICAgICAgICAgICAgLyogRU9GIC0gc2V0IGNvbXBsZXRpb24g ZmxhZyAqLworICAgICAgICAgICAgICAgICAgICAgIGlmIChjeCA9PSBGTl9DTUQpIHsgLyogSWYg bm90ICJyYXdjb21tYW5kIiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICBwLS07ICAgICAg ICAgICAvKiByZW1vdmUgdHJhaWxpbmcgbmV3bGluZXMgKi8KKyAgICAgICAgICAgICAgICAgICAg ICAgICAgd2hpbGUgKCpwID09IENSIHx8ICpwID09IExGKQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHAtLTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcCsrOworICAgICAgICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAqcCA9IE5VTDsgICAgICAgICAvKiBU ZXJtaW5hdGUgdGhlIHN0cmluZyAqLworICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg ICAgICAgICAgICAgICAgfSBlbHNlICAgICAgICAgICAgICAgIC8qIENvbW1hbmQgc3RpbGwgcnVu bmluZyAqLworICAgICAgICAgICAgICAgICAgICAqcCsrID0gYzsgICAgICAgICAgIC8qIENvcHkg dGhlIGJ5dGVzICovCisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgemNsb3NlKFpJRklM RSk7ICAgICAgICAgICAvKiBDbG9zZSB0aGUgY29tbWFuZCAqLworICAgICAgICAgIH0KKyAgICAg ICAgICAvKiBSZXR1cm4gbnVsbCBzdHJpbmcgaWYgY29tbWFuZCdzIG91dHB1dCB3YXMgdG9vIGxv bmcuICovCisgICAgICAgICAgcCA9IGZudmFsOworICAgICAgICAgIGlmICgheCkgeworICAgICAg ICAgICAgICBmYWlsZWQgPSAxOworICAgICAgICAgICAgICBpZiAoZm5kaWFncykKKyAgICAgICAg ICAgICAgICBja21ha21zZyhmbnZhbCxGTlZBTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAg IjxFUlJPUjpSRVNVTFRfVE9PX0xPTkc6XFxmIixmbiwiKCk+IixOVUxMKTsKKyAgICAgICAgICB9 CisgICAgICAgICAgZ290byBmbmVuZDsKKyAgICAgIH0KKyNlbmRpZiAvKiBOT1BVU0ggKi8KKyAg ICB9IC8qIEJyZWFrIHVwIGJpZyBzd2l0Y2guLi4gKi8KKworICAgIHN3aXRjaCAoeSkgeworICAg ICAgY2FzZSBGTl9TVFg6ICAgICAgICAgICAgICAgICAgICAgIC8qIFxmc3RyaXB4KHN0cmluZyxj KSAqLworICAgICAgICBpZiAoIShzID0gYnBbMF0pKSAgICAgICAgICAgICAgIC8qIE1ha2Ugc3Vy ZSB0aGVyZSBpcyBhIHN0cmluZyAqLworICAgICAgICAgIGdvdG8gZm5lbmQ7CisgICAgICAgIGMg PSAnLic7ICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2hhcmFjdGVyIHRvIHN0cmlwIGZyb20g Ki8KKyAgICAgICAgaWYgKGFyZ24gPiAxKSBpZiAoKmJwWzFdKSBjID0gKmJwWzFdOworICAgICAg ICBuID0gY2tzdHJuY3B5KGZudmFsLGJwWzBdLEZOVkFMTCk7CisgICAgICAgIHdoaWxlICgtLW4g Pj0gMCkgeworICAgICAgICAgICAgaWYgKGZudmFsW25dID09IGMpIHsKKyAgICAgICAgICAgICAg ICBmbnZhbFtuXSA9IE5VTDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K KyAgICAgICAgfQorICAgICAgICBwID0gZm52YWw7CisgICAgICAgIGdvdG8gZm5lbmQ7CisKKyAg ICAgIGNhc2UgRk5fU1RMOiAgICAgICAgICAgICAgICAgICAgICAvKiBcZmxvcChzdHJpbmcsYykg Ki8KKyAgICAgIGNhc2UgRk5fTE9QWDogewkJCS8qIFxmbG9weChzdHJpbmcsYykgKi8KKwkgIGlu dCBuID0gMTsKKwkgIGlmICghKHMgPSBicFswXSkpCQkvKiBNYWtlIHN1cmUgdGhlcmUgaXMgYSBz dHJpbmcgKi8KKwkgICAgZ290byBmbmVuZDsKKwkgIGMgPSAnLic7CQkJLyogQ2hhcmFjdGVyIHRv IHN0cmlwIHRvICovCisJICBpZiAoYXJnbiA+IDEpIGlmICgqYnBbMV0pIGMgPSAqYnBbMV07CisJ ICBpZiAoYXJnbiA+IDIpIGlmICgqYnBbMl0pIHsKKyNpZm5kZWYgTk9GTE9BVAorCSAgICAgIG4g PSAwOworCSAgICAgIGlmIChpc2Zsb2F0KGJwWzJdLDApKSB7CisJCSAgbiA9IChpbnQpZmxvYXR2 YWw7CisJCSAgaWYgKG4gPCAwKSBuID0gMDsKKwkgICAgICB9IGVsc2UKKyNlbmRpZgkvKiBOT0ZM T0FUICovCisJCW4gPSBhdG9pKGJwWzJdKTsKKwkgIH0KKwkgIHggPSAwOworCSAgaWYgKGN4ID09 IEZOX0xPUFgpIHsJCS8qIExvcHggKGZyb20gcmlnaHQpICovCisJICAgICAgaWYgKG4gPT0gMCkK KwkJZ290byBmbmVuZDsKKwkgICAgICBzICs9IHN0cmxlbihzKSAtIDE7CS8qIFdlIGFscmVhZHkg a25vdyBpdCdzID4gMCAqLworCSAgICAgIHdoaWxlIChzLS0gPj0gYnBbMF0pIHsKKwkJICBpZiAo KnMgPT0gYykgeworCQkgICAgICBuLS07CisJCSAgICAgIGlmIChuID09IDApIHsKKwkJCSAgcysr OworCQkJICB4ID0gMTsKKwkJCSAgYnJlYWs7CisJCSAgICAgIH0KKwkJICB9CisJICAgICAgfQor CSAgICAgIGlmICgheCkgcyA9ICIiOworCSAgfSBlbHNlIHsJCQkvKiBMb3AgKGZyb20gbGVmdCkg Ki8KKwkgICAgICBpZiAobiA9PSAwKSB7CisJCSAgcCA9IGJwWzBdOworCQkgIGdvdG8gZm5lbmQ7 CisJICAgICAgfQorCSAgICAgIHdoaWxlICgqcysrKSB7CisJCSAgaWYgKCoocy0xKSA9PSBjKSB7 CisJCSAgICAgIGlmICgtLW4gPT0gMCkgeworCQkJICB4ID0gMTsKKwkJCSAgYnJlYWs7CisJCSAg ICAgIH0KKwkJICB9CisJICAgICAgfQorCSAgICAgIGlmICgheCkgcyA9IGJwWzBdOworCSAgfQor CSAgY2tzdHJuY3B5KGZudmFsLHMsRk5WQUxMKTsKKwkgIHAgPSBmbnZhbDsKKwkgIGdvdG8gZm5l bmQ7CisgICAgICB9CisgICAgICBjYXNlIEZOX1NUTjogICAgICAgICAgICAgICAgICAgICAgLyog XGZzdHJpcG4oc3RyaW5nLG4pICovCisgICAgICAgIGlmIChhcmduIDwgMSkgICAgICAgICAgICAg ICAgICAgLyogUmVtb3ZlIG4gY2hhcnMgZnJvbSByaWdodCAqLworICAgICAgICAgIGdvdG8gZm5l bmQ7CisgICAgICAgIHZhbDEgPSAiMCI7CisgICAgICAgIGlmIChhcmduID4gMSkKKyAgICAgICAg ICBpZiAoKihicFsxXSkpCisgICAgICAgICAgICB2YWwxID0gZXZhbHgoYnBbMV0pOworICAgICAg ICBpZiAoIWNoa251bSh2YWwxKSkgeworICAgICAgICAgICAgZmFpbGVkID0gMTsKKyAgICAgICAg ICAgIGV2YWxlcnIoZm4pOworICAgICAgICAgICAgZ290byBmbmVuZDsKKyAgICAgICAgfQorICAg ICAgICBuID0gYXRvaSh2YWwxKTsKKyAgICAgICAgaWYgKG4gPCAwKSBuID0gMDsKKyAgICAgICAg ayA9IChpbnQpc3RybGVuKHMgPSBicFswXSkgLSBuOworICAgICAgICBpZiAoayA8IDApIGsgPSAw OworICAgICAgICBwID0gZm52YWw7CisgICAgICAgIHdoaWxlIChrLS0gPiAwKQorICAgICAgICAg ICpwKysgPSAqcysrOworICAgICAgICAqcCA9IE5VTDsKKyAgICAgICAgcCA9IGZudmFsOworICAg ICAgICBnb3RvIGZuZW5kOworCisgICAgICBjYXNlIEZOX1NUQjogeyAgICAgICAgICAgICAgICAg ICAgLyogXGZzdHJpcGIoc3RyaW5nLGMpICovCisgICAgICAgICAgY2hhciBjMiA9IE5VTDsKKyAg ICAgICAgICBpbnQgaSwgayA9IDA7CisgICAgICAgICAgY2hhciAqIGdyX29wbiA9ICJcInsnKFs8 IjsgICAgLyogR3JvdXAgb3BlbiBicmFja2V0cyAqLworICAgICAgICAgIGNoYXIgKiBncl9jbHMg PSAiXCJ9JyldPiI7ICAgIC8qIEdyb3VwIGNsb3NlIGJyYWNrZXRzICovCisKKyAgICAgICAgICBw ID0gZm52YWw7CisgICAgICAgICAgKnAgPSBOVUw7CisgICAgICAgICAgaWYgKCEocyA9IGJwWzBd KSkgICAgICAgICAgICAgLyogTWFrZSBzdXJlIHRoZXJlIGlzIGEgc3RyaW5nICovCisgICAgICAg ICAgICBnb3RvIGZuZW5kOworICAgICAgICAgIGlmICgoeCA9IHN0cmxlbihzKSkgPCAxKQorICAg ICAgICAgICAgZ290byBmbmVuZDsKKyAgICAgICAgICBjID0gTlVMOyAgICAgICAgICAgICAgICAg ICAgICAvKiBCcmFjZS9icmFja2V0IGtpbmQgKi8KKyAgICAgICAgICBpZiAoYXJnbiA+IDEpIHsK KyAgICAgICAgICAgICAgaWYgKCpicFsxXSkgeworICAgICAgICAgICAgICAgICAgaWYgKGNoa251 bShicFsxXSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICBrID0gYXRvaShicFsxXSk7CisgICAg ICAgICAgICAgICAgICAgICAgaWYgKGsgPCAwKSBrID0gNjM7CisgICAgICAgICAgICAgICAgICAg ICAgZm9yIChpID0gMDsgaSA8IDY7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgICBp ZiAoayAmICgxPDxpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNbMF0g PT0gZ3Jfb3BuW2ldICYmIHNbeC0xXSA9PSBncl9jbHNbaV0pIHsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBja3N0cm5jcHkoZm52YWwscysxLEZOVkFMTCk7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZm52YWxbeC0yXSA9IE5VTDsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBnb3RvIGZuZW5kOworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICAgICAgICAgIGNrc3RybmNweShmbnZhbCxzLEZOVkFMTCk7IC8q IE5vIG1hdGNoICovCisgICAgICAgICAgICAgICAgICAgICAgZ290byBmbmVuZDsKKyAgICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfQorICAgICAgICAgIH0KKwkgIGMgPSAhYnBbMV0g PyAwIDogKmJwWzFdOworICAgICAgICAgIGlmICghYykgYyA9IHNbMF07CisgICAgICAgICAgaWYg KGFyZ24gPiAyKSBpZiAoKmJwWzJdKSBjMiA9ICpicFsyXTsKKyAgICAgICAgICBpZiAoKnMgPT0g YykgeworICAgICAgICAgICAgICBpZiAoIWMyKSB7CisgICAgICAgICAgICAgICAgICBzd2l0Y2gg KGMpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAnKCc6IGMyID0gJyknOyBicmVhazsKKyAg ICAgICAgICAgICAgICAgICAgY2FzZSAnWyc6IGMyID0gJ10nOyBicmVhazsKKyAgICAgICAgICAg ICAgICAgICAgY2FzZSAneyc6IGMyID0gJ30nOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg Y2FzZSAnPCc6IGMyID0gJz4nOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAnIic6 IGMyID0gJyInOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAzOTogIGMyID0gMzk7 ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA5NjogIGMyID0gMzk7ICBicmVhazsK KyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICBpZiAo YXJnbiA9PSAyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGMyID0gYzsKKyAgICAgICAg ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJuY3B5 KGZudmFsLHMseCk7IC8qIExlYXZlIGl0IGxpa2UgdGhpcyAqLworICAgICAgICAgICAgICAgICAg ICAgICAgICBmbnZhbFt4XSA9IE5VTDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBm bmVuZDsKKyAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgaWYgKHNbeC0xXSA9PSBjMikgeworICAgICAgICAg ICAgICAgICAgc3RybmNweShmbnZhbCxzKzEseC0yKTsgLyogTGVhdmUgaXQgbGlrZSB0aGlzICov CisgICAgICAgICAgICAgICAgICBmbnZhbFt4LTJdID0gTlVMOworICAgICAgICAgICAgICAgICAg Z290byBmbmVuZDsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgICBzdHJu Y3B5KGZudmFsLHMseCk7CisgICAgICAgICAgZm52YWxbeF0gPSBOVUw7CisgICAgICAgICAgZ290 byBmbmVuZDsKKyAgICAgIH0KKworICAgICAgY2FzZSBGTl8ySEVYOiAgICAgICAgICAgICAgICAg ICAgIC8qIE51bWJlciB0byBoZXggKi8KKyAgICAgIGNhc2UgRk5fMk9DVDogICAgICAgICAgICAg ICAgICAgICAvKiBOdW1iZXIgdG8gb2N0YWwgKi8KKyAgICAgICAgdmFsMSA9IGV2YWx4KGJwWzBd KTsKKyAgICAgICAgaWYgKCEqdmFsMSkgeworICAgICAgICAgICAgZmFpbGVkID0gMTsKKyAgICAg ICAgICAgIGV2YWxlcnIoZm4pOworICAgICAgICAgICAgZ290byBmbmVuZDsKKyAgICAgICAgfQor ICAgICAgICBzcHJpbnRmKGZudmFsLCBjeCA9PSBGTl8ySEVYID8gIiVseCIgOiAiJWxvIiwgYXRv bCh2YWwxKSk7IC8qIFNBRkUgKi8KKyAgICAgICAgaWYgKGN4ID09IEZOXzJIRVggJiYgKGludCko c3RybGVuKGZudmFsKSYxKSkKKyAgICAgICAgICBzcHJpbnRmKGZudmFsLCIwJWx4IixhdG9sKHZh bDEpKTsgLyogU0FGRSAqLworICAgICAgICBwID0gZm52YWw7CisgICAgICAgIGdvdG8gZm5lbmQ7 CisKKyAgICAgIGNhc2UgRk5fRE5BTTogeyAgICAgICAgICAgICAgICAgICAvKiBEaXJlY3Rvcnkg cGFydCBvZiBmaWxlIG5hbWUgKi8KKyAgICAgICAgICBjaGFyICpzOworICAgICAgICAgIHpmbnFm cChicFswXSxGTlZBTEwscCk7ICAgICAgIC8qIEdldCBmdWxsIG5hbWUgKi8KKyAgICAgICAgICBp ZiAoIWlzZGlyKHApKSB7ICAgICAgICAgICAgICAvKiBJcyBpdCBhbHJlYWR5IGEgZGlyZWN0b3J5 PyAqLworICAgICAgICAgICAgICB6c3RyaXAocCwmcyk7ICAgICAgICAgICAgIC8qIE5vIGdldCBi YXNlbmFtZSAqLworICAgICAgICAgICAgICBpZiAoKnMpIHsKKyAgICAgICAgICAgICAgICAgIHgg PSBja2luZGV4KHMscCwwLDAsMCk7IC8qIFBvcyBvZiBsYXR0ZXIgaW4gZm9ybWVyICovCisgICAg ICAgICAgICAgICAgICBpZiAoeCA+IDApIHBbeC0xXSA9IE5VTDsKKyAgICAgICAgICAgICAgfQor ICAgICAgICAgIH0KKyAgICAgICAgICBpZiAoIXApIHAgPSAiIjsKKyAgICAgICAgICBnb3RvIGZu ZW5kOworICAgICAgfQorCisjaWZuZGVmIE5PUkFORE9NCisgICAgICBjYXNlIEZOX1JBTkQ6ICAg ICAgICAgICAgICAgICAgICAgLyogUmFuZG9tIG51bWJlciAqLworI2lmZGVmIENLX1NTTAorICAg ICAgICBpZiAoUkFORF9ieXRlcygodW5zaWduZWQgY2hhciAqKSZrLHNpemVvZihrKSkgPCAwKQor I2VuZGlmIC8qIENLX1NTTCAqLworICAgICAgICAgIGsgPSByYW5kKCk7CisgICAgICAgIHggPSAw OworICAgICAgICBpZiAoYXJnbiA+IDApIHsKKyAgICAgICAgICAgIGlmICghY2hrbnVtKGJwWzBd KSkgeworICAgICAgICAgICAgICAgIGZhaWxlZCA9IDE7CisgICAgICAgICAgICAgICAgaWYgKGZu ZGlhZ3MpCisgICAgICAgICAgICAgICAgICBja21ha21zZyhmbnZhbCxGTlZBTEwsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAiPEVSUk9SOkFSR19OT1RfTlVNRVJJQzpcXGYiLGZuLCIoKT4i LE5VTEwpOworICAgICAgICAgICAgICAgIGdvdG8gZm5lbmQ7CisgICAgICAgICAgICB9CisgICAg ICAgICAgICB4ID0gYXRvaShicFswXSk7CisgICAgICAgIH0KKyNpZmRlZiBDT01NRU5UCisgICAg ICAgIHNwcmludGYoZm52YWwsIiVkIiwgKHggPiAwICYmIGsgPiAwKSB8fCAoeCA8IDAgJiYgayA8 IDApID8gayAlIHggOiAKKyAgICAgICAgICAgICAgICAoeCA9PSAwID8gMCA6ICgwIC0gKGsgJSAo LXgpKSkpKTsKKyNlbHNlCisgICAgICAgIGRlYnVnKEYxMTEsInJhbmQiLGNraXRvYSh4KSxrKTsK KyNpZmRlZiBTVU5PUzQKKy8qIFRoaXMgaXMgcmVhbGx5IHN0cmFuZ2UgYnV0IG9uIFN1bk9TLCBp ZiB3ZSBhcmUgcmVxdWVzdGluZyByYW5kb20gbnVtYmVycyAqLworLyogYmV0d2VlbiAwIGFuZCA0 IG9yIGxlc3MsIHRoZXkgYWx3YXlzIGNvbWUgb3V0IGluIHNlcXVlbmNlOiAwIDEgMiAzIDAgMSAy ICovCisvKiBTaGlmdGluZyB0aGUgcmVzdWx0IG9mIHJhbmQoKSBpbiB0aGlzIGNhc2UgZ2l2ZXMg YSBtb3JlIHJhbmRvbSByZXN1bHQuICAgKi8KKyAgICAgICAgaWYgKHggPCA1KQorICAgICAgICAg IGsgPSBrID4+IDU7CisjZW5kaWYgLyogU1VOT1M0ICovCisgICAgICAgIGlmICgoeCA+IDAgJiYg ayA+IDApIHx8ICh4IDwgMCAmJiBrIDwgMCkpCisgICAgICAgICAgeCA9IGsgJSB4OworICAgICAg ICBlbHNlIGlmICh4ID09IDApCisgICAgICAgICAgeCA9IDA7CisgICAgICAgIGVsc2UKKyAgICAg ICAgICB4ID0gMCAtIChrICUgKC14KSk7CisgICAgICAgIGRlYnVnKEYxMDEsInJhbmQgeCIsIiIs eCk7CisgICAgICAgIHNwcmludGYoZm52YWwsIiVkIiwgeCk7ICAgICAgICAgLyogU0FGRSAqLwor I2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAgcCA9IGZudmFsOworICAgICAgICBnb3RvIGZu ZW5kOworI2VuZGlmIC8qIE5PUkFORE9NICovCisgICAgfSAvKiBCcmVhayB1cCBiaWcgc3dpdGNo Li4uICovCisKKyAgICBzd2l0Y2ggKHkpIHsKKyAgICAgIGNhc2UgRk5fU1BMSVQ6ICAgICAgICAg ICAgICAgICAgICAvKiBcZnNwbGl0KHMxLGEsczIsczMsbWFzaykgKi8KKyAgICAgIGNhc2UgRk5f V09SRDogeyAgICAgICAgICAgICAgICAgICAvKiBcZndvcmQoczEsbixzMixzMyxtYXNrKSAqLwor ICAgICAgICAgIGludCB3b3JkbnVtID0gMDsKKyAgICAgICAgICBpbnQgc3BsaXR0aW5nID0gMDsK KyAgICAgICAgICBpbnQgeDsKKyAgICAgICAgICBpbnQgYXJyYXkgPSAwOworICAgICAgICAgIGlu dCBncm91cGluZyA9IDA7CisgICAgICAgICAgaW50IG5vY29sbGFwc2UgPSAwOworICAgICAgICAg IGNoYXIgKiBzZXAgPSAiIjsKKyAgICAgICAgICBjaGFyICogbm90c2VwID0gIiI7CisgICAgICAg ICAgY2hhciAqIGJwMCA9IE5VTEw7CisgICAgICAgICAgY2hhciAqIGJwMSA9IE5VTEw7CisgICAg ICAgICAgY2hhciAgIGFidWZbMTZdOworICAgICAgICAgIHN0cnVjdCBzdHJpbmdhcnJheSAqIHEg PSBOVUxMOworCisgICAgICAgICAgc3BsaXR0aW5nID0gKGN4ID09IEZOX1NQTElUKTsgLyogT3Vy IGpvYiAqLworCSAgZGVidWcoRjEwMSwiRk5fU1BMSVQgc3BsaXR0aW5nIiwiIixzcGxpdHRpbmcp OworCisgICAgICAgICAgZm52YWxbMF0gPSBzcGxpdHRpbmcgPyAnMCcgOiBOVUw7IC8qIEluaXRp YWwgcmV0dXJuIHZhbHVlICovCisgICAgICAgICAgZm52YWxbMV0gPSBOVUw7CisgICAgICAgICAg cCA9IGZudmFsOworICAgICAgICAgIGJwMCA9IGJwWzBdOyAgICAgICAgICAgICAgICAgIC8qIFNv dXJjZSBzdHJpbmcgKi8KKyAgICAgICAgICBpZiAoIWJwMCkgYnAwID0gIiI7CisgICAgICAgICAg ZGVidWcoRjExMSwiZnNwbGl0IGJwWzBdIixicDAsYXJnbik7CisgICAgICAgICAgaWYgKGFyZ24g PCAxIHx8ICEqYnAwKSAgICAgICAgLyogSWYgbm9uZSwgcmV0dXJuIGRlZmF1bHQgdmFsdWUgKi8K KyAgICAgICAgICAgIGdvdG8gZm5lbmQ7CisKKyAgICAgICAgICBicDEgPSBicFsxXTsgICAgICAg ICAgICAgICAgICAvKiBGdW5jdGlvbi1kZXBlbmRlbnQgYXJnICovCisgICAgICAgICAgaWYgKCFi cDEpIGJwMSA9ICIiOyAgICAgICAgICAgLyogKGFycmF5IG9yIG51bWJlcikgKi8KKyAgICAgICAg ICBkZWJ1ZyhGMTEwLCJmc3BsaXQgYnBbMV0iLGJwMSwwKTsKKyAgICAgICAgICBpZiAoYnBbNV0p IHsKKyAgICAgICAgICAgICAgaWYgKCFjaGtudW0oYnBbNV0pKSB7CisgICAgICAgICAgICAgICAg ICBmYWlsZWQgPSAxOworICAgICAgICAgICAgICAgICAgY2ttYWttc2coZm52YWwsRk5WQUxMLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxFUlJPUjpBUkdfTk9UX05VTUVSSUM6XFxmIixm biwiKCk+IixOVUxMKTsKKyAgICAgICAgICAgICAgICAgIGdvdG8gZm5lbmQ7CisgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgeCA9IGF0b2koYnBbNV0pOworICAgICAgICAgICAgICBub2Nv bGxhcHNlID0geDsKKyAgICAgICAgICB9CisgICAgICAgICAgaWYgKCFzcGxpdHRpbmcpIHsgICAg ICAgICAgICAgLyogXGZ3b3JkKCk6IG4gPSBkZXNpcmVkIHdvcmQgbnVtYmVyICovCisgICAgICAg ICAgICAgIHZhbDEgPSAiMSI7ICAgICAgICAgICAgICAgLyogRGVmYXVsdCBpcyBmaXJzdCB3b3Jk ICovCisgICAgICAgICAgICAgIGlmIChhcmduID4gMSkgICAgICAgICAgICAgLyogV29yZCBudW1i ZXIgc3VwcGxpZWQgKi8KKyAgICAgICAgICAgICAgICBpZiAoKmJwMSkKKyAgICAgICAgICAgICAg ICAgIHZhbDEgPSBldmFseChicDEpOworICAgICAgICAgICAgICBpZiAoIWNoa251bSh2YWwxKSkg eworICAgICAgICAgICAgICAgICAgZmFpbGVkID0gMTsKKyAgICAgICAgICAgICAgICAgIGNrbWFr bXNnKGZudmFsLEZOVkFMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICI8RVJST1I6QVJH X05PVF9OVU1FUklDOlxcZiIsZm4sIigpPiIsTlVMTCk7CisgICAgICAgICAgICAgICAgICBnb3Rv IGZuZW5kOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIG4gPSBhdG9pKHZhbDEpOwor ICAgICAgICAgIH0gZWxzZSBpZiAoYXJnbiA+IDEgJiYgKmJwMSkgeyAvKiBcZnNwbGl0KCk6IG4g PSB3b3JkIGNvdW50ICovCisgICAgICAgICAgICAgIGNrc3RybmNweShhYnVmLGJwMSwxNik7ICAg LyogR2V0IGFycmF5IHJlZmVyZW5jZSAqLworICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJmc3Bs aXQgYWJ1ZiAxIixhYnVmLDApOworICAgICAgICAgICAgICBmYWlsZWQgPSAxOyAgICAgICAgICAg ICAgIC8qIEFzc3VtZSBpdCdzIGJhZCAqLworICAgICAgICAgICAgICBpZiAoZm5kaWFncykgICAg ICAgICAgICAgIC8qIERlZmF1bHQgaXMgdGhpcyBlcnJvciBtZXNzYWdlICovCisgICAgICAgICAg ICAgICAgY2ttYWttc2coZm52YWwsRk5WQUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICI8 RVJST1I6QVJHX0JBRF9BUlJBWTpcXGYiLGZuLCIoKT4iLE5VTEwpOworICAgICAgICAgICAgICBp ZiAoYWJ1ZlswXSAhPSAnJicpICAgICAgIC8qICJBZGRyZXNzIiBvZiBhcnJheSAqLworICAgICAg ICAgICAgICAgIGdvdG8gZm5lbmQ7ICAgICAgICAgICAgIC8qIEl0J3MgYmFkICovCisgICAgICAg ICAgICAgIGlmIChhYnVmWzJdKSB7ICAgICAgICAgICAgLyogQ2hlY2sgZm9yIGJyYWNrZXRzICov CisgICAgICAgICAgICAgICAgICBpZiAoYWJ1ZlsyXSAhPSAnWycgfHwgYWJ1ZlszXSAhPSAnXScp IHsKKyAgICAgICAgICAgICAgICAgICAgICBnb3RvIGZuZW5kOyAgICAgICAvKiBCYWQgKi8KKyAg ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBkZWJ1ZyhG MTEwLCJmc3BsaXQgYWJ1ZiAyIixhYnVmLDApOworICAgICAgICAgICAgICBpZiAoYWJ1ZlsxXSA+ IDY0ICYmIGFidWZbMV0gPCA5MSkgLyogQ29udmVydCB1cHBlciB0byBsb3dlciAqLworICAgICAg ICAgICAgICAgIGFidWZbMV0gKz0gMzI7CisgICAgICAgICAgICAgIGlmIChhYnVmWzFdIDwgOTcg fHwgYWJ1ZlsxXSA+IDEyMikgeyAvKiBDaGVjayBmb3IgYS16ICovCisgICAgICAgICAgICAgICAg ICBnb3RvIGZuZW5kOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGRlYnVnKEYxMTAs ImZzcGxpdCBhYnVmIDMiLGFidWYsMCk7CisgICAgICAgICAgICAgIGFycmF5ID0gMTsKKyAgICAg ICAgICAgICAgZm52YWxbMF0gPSBOVUw7ICAgICAgICAgICAvKiBObyBlcnJvciwgZXJhc2UgbWVz c2FnZSAqLworICAgICAgICAgICAgICBmYWlsZWQgPSAwOyAgICAgICAgICAgICAgIC8qIFVuc2V0 IGZhaWx1cmUgZmxhZyAqLworICAgICAgICAgICAgICBuID0gMDsgICAgICAgICAgICAgICAgICAg IC8qIEluaXRpYWxpemUgd29yZCBjb3VudGVyICovCisgICAgICAgICAgfQorICAgICAgICAgIGlm IChhcmduID4gMikgICAgICAgICAgICAgICAgIC8qIEhhdmUgYnJlYWsgc2V0PyAqLworICAgICAg ICAgICAgc2VwID0gYnBbMl07CisgICAgICAgICAgZGVidWcoRjExMSwiZnNwbGl0IHNlcCIsc2Vw LGFyZ24pOworICAgICAgICAgIGlmIChhcmduID4gMykgICAgICAgICAgICAgICAgIC8qIEhhdmUg aW5jbHVkZSBzZXQ/ICovCisgICAgICAgICAgICBub3RzZXAgPSBicFszXTsKKyAgICAgICAgICBk ZWJ1ZyhGMTExLCJmc3BsaXQgbm90c2VwIixub3RzZXAsYXJnbik7CisgICAgICAgICAgaWYgKGFy Z24gPiA0KSB7ICAgICAgICAgICAgICAgLyogSGF2ZSBncm91cGluZyBzZXQ/ICovCisgICAgICAg ICAgICAgIGNoYXIgKiBicDQgPSBicFs0XTsKKyAgICAgICAgICAgICAgZGVidWcoRjExMSwiZnNw bGl0IGJwNCIsYnA0LGFyZ24pOworICAgICAgICAgICAgICBpZiAoIWJwNCkgYnA0ID0gIjAiOwor ICAgICAgICAgICAgICBpZiAoISpicDQpIGJwNCA9ICIwIjsKKyAgICAgICAgICAgICAgaWYgKGNo a251bShicDQpKSB7CisgICAgICAgICAgICAgICAgICBncm91cGluZyA9IGF0b2koYnA0KTsKKyAg ICAgICAgICAgICAgICAgIGlmIChncm91cGluZyA9PSAtMSkKKyAgICAgICAgICAgICAgICAgICAg Z3JvdXBpbmcgPSAxMjc7CisgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg ICBmYWlsZWQgPSAxOworICAgICAgICAgICAgICAgICAgaWYgKGZuZGlhZ3MpCisgICAgICAgICAg ICAgICAgICAgIGNrbWFrbXNnKGZudmFsLEZOVkFMTCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIjxFUlJPUjpBUkdfTk9UX05VTUVSSUM6XFxmIixmbiwiKCk+IixOVUxMKTsKKyAgICAg ICAgICAgICAgICAgIGdvdG8gZm5lbmQ7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICB9Cisg ICAgICAgICAgLyogQXJncyBwYXJzZWQsIG5vdyBkbyB0aGUgd29yayAqLworCisgICAgICAgICAg ZGVidWcoRjExMSwiZnNwbGl0IGJwMCIsYnAwLG4pOworICAgICAgICAgIHEgPSBja3NwbGl0KHNw bGl0dGluZyxuLGJwMCxzZXAsbm90c2VwLGdyb3VwaW5nLDAsbm9jb2xsYXBzZSk7CisKKyAgICAg ICAgICB3b3JkbnVtID0gcSA/IHEtPmFfc2l6ZSA6IC0xOyAvKiBDaGVjayByZXN1bHQgKi8KKyAg ICAgICAgICBpZiAod29yZG51bSA8IDApIHsKKyAgICAgICAgICAgICAgZmFpbGVkID0gMTsgICAg ICAgICAgICAgICAvKiBGYWlsdXJlICovCisgICAgICAgICAgICAgIGlmIChmbmRpYWdzKQorICAg ICAgICAgICAgICAgIGNrbWFrbXNnKGZudmFsLEZOVkFMTCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAod29yZG51bSA9PSAtMSkgPworICAgICAgICAgICAgICAgICAgICAgICAgICI8RVJST1I6 TUFMTE9DX0ZBSUxVUkU6XFxmIiA6CisgICAgICAgICAgICAgICAgICAgICAgICAgIjxFUlJPUjpU T09fTUFOWV9XT1JEUzpcXGYiLAorICAgICAgICAgICAgICAgICAgICAgICAgIGZuLAorICAgICAg ICAgICAgICAgICAgICAgICAgICIoKT4iLAorICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwK KyAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICBnb3RvIGZuZW5kOwor ICAgICAgICAgIH0KKyAgICAgICAgICBpZiAoc3BsaXR0aW5nKSB7ICAgICAgICAgICAgICAvKiBc ZnNwbGl0KCkgcmVzdWx0ICovCisgICAgICAgICAgICAgIGNrc3RybmNweShmbnZhbCxja2l0b2Eo d29yZG51bSksRk5WQUxMKTsKKyAgICAgICAgICAgICAgaWYgKGFycmF5KSB7ICAgICAgICAgICAg ICAvKiBBcnJheSB3YXMgbm90IGRlY2xhcmVkLiAqLworICAgICAgICAgICAgICAgICAgaW50IGk7 CisgICAgICAgICAgICAgICAgICBpZiAoKHggPSBkY2xhcnJheShhYnVmWzFdLHdvcmRudW0pKSA8 IDApIHsgLyogRGVjbGFyZSBpdC4gKi8KKyAgICAgICAgICAgICAgICAgICAgICBmYWlsZWQgPSAx OworICAgICAgICAgICAgICAgICAgICAgIGlmIChmbmRpYWdzKQorICAgICAgICAgICAgICAgICAg ICAgICAgY2ttYWttc2coZm52YWwsRk5WQUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIjxFUlJPUjpNQUxMT0NfRkFJTFVSRTpcXGYiLGZuLCIoKT4iLE5VTEwpOworICAgICAg ICAgICAgICAgICAgICAgIGdvdG8gZm5lbmQ7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgICAgICBmb3IgKGkgPSAxOyBpIDw9IHdvcmRudW07IGkrKykgeyAvKiBDb3B5IHJlc3Vs dHMgKi8KKyAgICAgICAgICAgICAgICAgICAgICBtYWtlc3RyKCYoYV9wdHJbeF1baV0pLHEtPmFf aGVhZFtpXSk7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICBhX3B0clt4 XVswXSA9IE5VTEw7ICAgLyogQXJyYXkgaXMgMS1iYXNlZCAqLworICAgICAgICAgICAgICAgICAg bWFrZXN0cigmKGFfcHRyW3hdWzBdKSxmbnZhbCk7IC8qIEVsZW1lbnQgPSBzaXplICovCisgICAg ICAgICAgICAgIH0KKyAgICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAvKiBc ZndvcmQoKSByZXN1bHQgKi8KKyAgICAgICAgICAgICAgY2hhciAqIHM7CisgICAgICAgICAgICAg IHMgPSBxLT5hX2hlYWRbMV07CisgICAgICAgICAgICAgIGlmICghcykgcyA9ICIiOworICAgICAg ICAgICAgICBja3N0cm5jcHkoZm52YWwscyxGTlZBTEwpOworICAgICAgICAgIH0KKyAgICAgICAg ICBnb3RvIGZuZW5kOyAgICAgICAgICAgICAgICAgICAvKiBEb25lICovCisgICAgICB9CisKKyAg ICB9IC8qIEJyZWFrIHVwIGJpZyBzd2l0Y2guLi4gKi8KKworICAgIHN3aXRjaCAoeSkgeworCisj aWZkZWYgQ0tfS0VSQkVST1MKKyAgICAgIGNhc2UgRk5fS1JCX1RLOiAgICAgICAgICAgICAgICAg ICAvKiBLZXJiZXJvcyB0aWNrZXRzICovCisgICAgICBjYXNlIEZOX0tSQl9OWDogICAgICAgICAg ICAgICAgICAgLyogS2VyYmVyb3MgbmV4dCB0aWNrZXQgKi8KKyAgICAgIGNhc2UgRk5fS1JCX0lW OiAgICAgICAgICAgICAgICAgICAvKiBLZXJiZXJvcyB0aWNrZXQgaXMgdmFsaWQgKi8KKyAgICAg IGNhc2UgRk5fS1JCX0ZHOiAgICAgICAgICAgICAgICAgICAvKiBLZXJiZXJvcyBUaWNrZXQgZmxh Z3MgKi8KKyAgICAgIGNhc2UgRk5fS1JCX1RUOiB7ICAgICAgICAgICAgICAgICAvKiBLZXJiZXJv cyB0aWNrZXQgdGltZSAqLworICAgICAgICAgIGludCBrdiA9IDA7ICAgICAgICAgICAgICAgICAg IC8qIEtlcmJlcm9zIHZlcnNpb24gKi8KKyAgICAgICAgICBpbnQgbiA9IDA7CisgICAgICAgICAg Y2hhciAqIHMgPSBOVUxMOworICAgICAgICAgIGlmIChyZGlnaXRzKGJwWzBdKSkgeworICAgICAg ICAgICAgICBrdiA9IGF0b2koYnBbMF0pOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg ICAgIGZhaWxlZCA9IDE7CisgICAgICAgICAgICAgIGlmIChmbmRpYWdzKQorICAgICAgICAgICAg ICAgIGNrbWFrbXNnKGZudmFsLEZOVkFMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiPEVS Uk9SOkFSR19OT1RfTlVNRVJJQzpcXGYiLGZuLCIoKT4iLE5VTEwpOworICAgICAgICAgICAgICBn b3RvIGZuZW5kOworICAgICAgICAgIH0KKyAgICAgICAgICBpZiAoa3YgIT0gNCAmJiBrdiAhPSA1 KSB7CisgICAgICAgICAgICAgIGZhaWxlZCA9IDE7CisgICAgICAgICAgICAgIGlmIChmbmRpYWdz KQorICAgICAgICAgICAgICAgIGNrbWFrbXNnKGZudmFsLEZOVkFMTCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAiPEVSUk9SOkFSR19PVVRfT0ZfUkFOR0U6XFxmIixmbiwiKCk+IixOVUxMKTsK KyAgICAgICAgICAgICAgZ290byBmbmVuZDsKKyAgICAgICAgICB9CisgICAgICAgICAgaWYgKChj eCA9PSBGTl9LUkJfSVYgfHwgY3ggPT0gRk5fS1JCX1RUIHx8IGN4ID09IEZOX0tSQl9GRykgJiYK KyAgICAgICAgICAgICAgIGFyZ24gPCAyKSB7CisgICAgICAgICAgICAgIGZhaWxlZCA9IDE7Cisg ICAgICAgICAgICAgIGlmIChmbmRpYWdzKQorICAgICAgICAgICAgICAgIGNrbWFrbXNnKGZudmFs LEZOVkFMTCwiPEVSUk9SOk1JU1NJTkdfQVJHOlxcZiIsZm4sIigpPiIsTlVMTCk7CisgICAgICAg ICAgICAgIGdvdG8gZm5lbmQ7CisgICAgICAgICAgfQorICAgICAgICAgIHN3aXRjaCAoeSkgewor ICAgICAgICAgICAgY2FzZSBGTl9LUkJfVEs6ICAgICAgICAgICAgIC8qIE51bWJlciBvZiBLZXJi ZXJvcyB0aWNrZXRzICovCisjaWZkZWYgQ0tfQVVUSEVOVElDQVRJT04KKyAgICAgICAgICAgICAg c3dpdGNoIChrdikgeworICAgICAgICAgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgICAgICAg IG4gPSBja19rcmI0X2dldF90a3RzKCk7CisgICAgICAgICAgICAgICAgICBzcHJpbnRmKGZudmFs LCAiJWQiLCAobiA+PSAwKSA/IG4gOiAwKTsgLyogU0FGRSAqLworICAgICAgICAgICAgICAgICAg Z290byBmbmVuZDsKKyAgICAgICAgICAgICAgICBjYXNlIDU6IHsKKyAgICAgICAgICAgICAgICAg ICAgZXh0ZXJuIGNoYXIgKiBrcmI1X2RfY2M7CisgICAgICAgICAgICAgICAgICAgIG4gPSBja19r cmI1X2dldF90a3RzKGtyYjVfZF9jYyk7CisgICAgICAgICAgICAgICAgICAgIHNwcmludGYoZm52 YWwsICIlZCIsIChuID49IDApID8gbiA6IDApOyAvKiBTQUZFICovCisgICAgICAgICAgICAgICAg ICAgIGdvdG8gZm5lbmQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9CisjZWxz ZQorICAgICAgICAgICAgICBzcHJpbnRmKGZudmFsLCIlZCIsMCk7ICAgIC8qIFNBRkUgKi8KKyNl bmRpZiAvKiBDS19BVVRIRU5USUNBVElPTiAqLworICAgICAgICAgICAgICBnb3RvIGZuZW5kOwor CisgICAgICAgICAgICBjYXNlIEZOX0tSQl9OWDogICAgICAgICAgICAgLyogS2VyYmVyb3MgbmV4 dCB0aWNrZXQgKi8KKyNpZmRlZiBDS19BVVRIRU5USUNBVElPTgorICAgICAgICAgICAgICBzd2l0 Y2ggKGt2KSB7CisgICAgICAgICAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgICAgICAgcyA9 IGNrX2tyYjRfZ2V0X25leHRfdGt0KCk7CisgICAgICAgICAgICAgICAgICBja3N0cm5jcHkoZm52 YWwsIHMgPyBzIDogIiIsRk5WQUxMKTsKKyAgICAgICAgICAgICAgICAgIGdvdG8gZm5lbmQ7Cisg ICAgICAgICAgICAgICAgY2FzZSA1OgorICAgICAgICAgICAgICAgICAgcyA9IGNrX2tyYjVfZ2V0 X25leHRfdGt0KCk7CisgICAgICAgICAgICAgICAgICBja3N0cm5jcHkoZm52YWwsIHMgPyBzIDog IiIsRk5WQUxMKTsKKyAgICAgICAgICAgICAgICAgIGdvdG8gZm5lbmQ7CisgICAgICAgICAgICAg IH0KKyNlbHNlCisgICAgICAgICAgICAgIHNwcmludGYoZm52YWwsImslZCBuZXh0LXRpY2tldC1z dHJpbmciLGt2KTsgLyogU0FGRSAqLworI2VuZGlmIC8qIENLX0FVVEhFTlRJQ0FUSU9OICovCisg ICAgICAgICAgICAgIGdvdG8gZm5lbmQ7CisKKyAgICAgICAgICAgIGNhc2UgRk5fS1JCX0lWOiAg ICAgICAgICAgICAvKiBLZXJiZXJvcyB0aWNrZXQgaXMgdmFsaWQgKi8KKyNpZmRlZiBDS19BVVRI RU5USUNBVElPTgorICAgICAgICAgICAgICAvKiBSZXR1cm4gMSBpZiB2YWxpZCwgMCBpZiBub3Qg Ki8KKyAgICAgICAgICAgICAgc3dpdGNoIChrdikgeworICAgICAgICAgICAgICAgIGNhc2UgNDoK KyAgICAgICAgICAgICAgICAgIG4gPSBja19rcmI0X3RrdF9pc3ZhbGlkKGJwWzFdKTsKKyAgICAg ICAgICAgICAgICAgIHNwcmludGYoZm52YWwsICIlZCIsIG4gPiAwID8gMSA6IDApOyAvKiBTQVZF ICovCisgICAgICAgICAgICAgICAgICBnb3RvIGZuZW5kOworICAgICAgICAgICAgICAgIGNhc2Ug NTogeworICAgICAgICAgICAgICAgICAgICBleHRlcm4gY2hhciAqIGtyYjVfZF9jYzsKKyAgICAg ICAgICAgICAgICAgICAgbiA9IGNrX2tyYjVfdGt0X2lzdmFsaWQoa3JiNV9kX2NjLGJwWzFdKTsK KyAgICAgICAgICAgICAgICAgICAgc3ByaW50ZihmbnZhbCwiJWQiLCBuID4gMCA/IDEgOiAwKTsg LyogU0FGRSAqLworICAgICAgICAgICAgICAgICAgICBnb3RvIGZuZW5kOworICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgICAgICAgc3ByaW50ZihmbnZh bCwiJWQiLDApOyAgICAvKiBTQUZFICovCisjZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJT04gKi8K KyAgICAgICAgICAgICAgZ290byBmbmVuZDsKKworICAgICAgICAgICAgY2FzZSBGTl9LUkJfVFQ6 ICAgICAgICAgICAgIC8qIEtlcmJlcm9zIHRpY2tldCB0aW1lICovCisjaWZkZWYgQ0tfQVVUSEVO VElDQVRJT04KKyAgICAgICAgICAgICAgc3dpdGNoIChrdikgeworICAgICAgICAgICAgICAgIGNh c2UgNDoKKyAgICAgICAgICAgICAgICAgIG4gPSBja19rcmI0X3RrdF90aW1lKGJwWzFdKTsKKyAg ICAgICAgICAgICAgICAgIHNwcmludGYoZm52YWwsIiVkIiwgbiA+PSAwID8gbiA6IDApOyAvKiBT QUZFICovCisgICAgICAgICAgICAgICAgICBnb3RvIGZuZW5kOworICAgICAgICAgICAgICAgIGNh c2UgNTogeworICAgICAgICAgICAgICAgICAgICBleHRlcm4gY2hhciAqIGtyYjVfZF9jYzsKKyAg ICAgICAgICAgICAgICAgICAgbiA9IGNrX2tyYjVfdGt0X3RpbWUoa3JiNV9kX2NjLGJwWzFdKTsK KyAgICAgICAgICAgICAgICAgICAgc3ByaW50ZihmbnZhbCwiJWQiLCBuID49IDAgPyBuIDogMCk7 IC8qIFNBRkUgKi8KKyAgICAgICAgICAgICAgICAgICAgZ290byBmbmVuZDsKKyAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgIH0KKyNlbHNlCisgICAgICAgICAgICAgIGNrc3RybmNweShm bnZhbCwiNjAwIixGTlZBTEwpOyAvKiBTb21lIHRpbWUgKi8KKyNlbmRpZiAvKiBDS19BVVRIRU5U SUNBVElPTiAqLworICAgICAgICAgICAgICBnb3RvIGZuZW5kOworCisgICAgICAgICAgICBjYXNl IEZOX0tSQl9GRzogICAgICAgICAgICAgLyogS2VyYmVyb3MgdGlja2V0IGZsYWdzICovCisjaWZk ZWYgQ0tfQVVUSEVOVElDQVRJT04KKyAgICAgICAgICAgICAgc3dpdGNoIChrdikgeworICAgICAg ICAgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgICAgICAgIGZudmFsWzBdID0gJ1wwJzsKKyAg ICAgICAgICAgICAgICAgIGdvdG8gZm5lbmQ7CisgICAgICAgICAgICAgICAgY2FzZSA1OiB7Cisg ICAgICAgICAgICAgICAgICAgIGV4dGVybiBjaGFyICoga3JiNV9kX2NjOworICAgICAgICAgICAg ICAgICAgICBja3N0cm5jcHkoZm52YWwsY2tfa3JiNV90a3RfZmxhZ3Moa3JiNV9kX2NjLGJwWzFd KSxGTlZBTEwpOworICAgICAgICAgICAgICAgICAgICBnb3RvIGZuZW5kOworICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgICAgICAgZm52YWxbMF0gPSAn XDAnOworI2VuZGlmIC8qIENLX0FVVEhFTlRJQ0FUSU9OICovCisgICAgICAgICAgICAgIGdvdG8g Zm5lbmQ7CisgICAgICAgICAgfQorICAgICAgICAgIHAgPSBmbnZhbDsKKyAgICAgICAgICBnb3Rv IGZuZW5kOworICAgICAgfQorI2VuZGlmIC8qIENLX0tFUkJFUk9TICovCisKKyNpZmRlZiBGTl9F UlJNU0cKKyAgICAgIGNhc2UgRk5fRVJSTVNHOgorICAgICAgICBpZiAocmRpZ2l0cyhicFswXSkp IHsKKyAgICAgICAgICAgIGsgPSBhdG9pKGJwWzBdKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg ICAgICAgIGZhaWxlZCA9IDE7CisgICAgICAgICAgICBpZiAoZm5kaWFncykKKyAgICAgICAgICAg ICBja21ha21zZyhmbnZhbCxGTlZBTEwsIjxFUlJPUjpBUkdfTk9UX05VTUVSSUM6XFxmIixmbiwi KCk+IixOVUxMKTsKKyAgICAgICAgICAgIGdvdG8gZm5lbmQ7CisgICAgICAgIH0KKyNpZmRlZiBW TVMKKyAgICAgICAgY2tzdHJuY3B5KGZudmFsLGNrdm1zZXJyc3RyKGspLEZOVkFMTCk7CisjZWxz ZQorICAgICAgICB4ID0gZXJybm87CisgICAgICAgIGVycm5vID0gazsKKyAgICAgICAgY2tzdHJu Y3B5KGZudmFsLGNrX2VycnN0cigpLEZOVkFMTCk7CisgICAgICAgIGVycm5vID0geDsKKyNlbmRp ZiAvKiBWTVMgKi8KKyAgICAgICAgcCA9IGZudmFsOworICAgICAgICBnb3RvIGZuZW5kOworI2Vu ZGlmIC8qIEZOX0VSUk1TRyAqLworCisgICAgICBjYXNlIEZOX0RJTTogeworICAgICAgICAgIGlu dCBtYXg7CisgICAgICAgICAgY2hhciBhYnVmWzE2XSwgKnM7CisgICAgICAgICAgZm52YWxbMF0g PSBOVUw7ICAgICAgICAgICAgICAgLyogSW5pdGlhbCByZXR1cm4gdmFsdWUgKi8KKyAgICAgICAg ICBja3N0cm5jcHkoYWJ1ZixicFswXSwxNik7ICAgICAvKiBHZXQgYXJyYXkgcmVmZXJlbmNlICov CisgICAgICAgICAgcyA9IGFidWY7CisgICAgICAgICAgaWYgKCpzID09IENNRFEpIHMrKzsKKyAg ICAgICAgICBmYWlsZWQgPSAxOyAgICAgICAgICAgICAgICAgICAvKiBBc3N1bWUgaXQncyBiYWQg Ki8KKyAgICAgICAgICBwID0gZm52YWw7ICAgICAgICAgICAgICAgICAgICAvKiBQb2ludCB0byBy ZXN1bHQgKi8KKyAgICAgICAgICBpZiAoZm5kaWFncykgICAgICAgICAgICAgICAgICAvKiBEZWZh dWx0IGlzIHRoaXMgZXJyb3IgbWVzc2FnZSAqLworICAgICAgICAgICAgY2ttYWttc2coZm52YWws Rk5WQUxMLCI8RVJST1I6QVJHX0JBRF9BUlJBWTpcXGYiLGZuLCIoKT4iLE5VTEwpOworICAgICAg ICAgIGlmIChzWzBdICE9ICcmJykgeyAgICAgICAgICAgIC8qICJBZGRyZXNzIiBvZiBhcnJheSAq LworICAgICAgICAgICAgICBnb3RvIGZuZW5kOworICAgICAgICAgIH0KKyAgICAgICAgICBpZiAo c1syXSkgeworICAgICAgICAgICAgICBpZiAoc1syXSAhPSAnWycgfHwgc1szXSAhPSAnXScpIHsK KyAgICAgICAgICAgICAgICAgIGdvdG8gZm5lbmQ7CisgICAgICAgICAgICAgIH0KKyAgICAgICAg ICB9CisgICAgICAgICAgaWYgKHNbMV0gPj0gNjQgJiYgc1sxXSA8IDkxKSAgLyogQ29udmVydCB1 cHBlciB0byBsb3dlciAqLworICAgICAgICAgICAgc1sxXSArPSAzMjsKKyAgICAgICAgICBpZiAo c1sxXSA8IDk1IHx8IHNbMV0gPiAxMjIpIHsgLyogQ2hlY2sgZm9yIGEteiAqLworICAgICAgICAg ICAgICBnb3RvIGZuZW5kOwkgCSAvKiBCYWQgKi8KKyAgICAgICAgICB9CisgICAgICAgICAgaWYg KChtYXggPSBjaGthcnJheShzWzFdLDEpKSA8IDEpIC8qIChzZWNvbmQgYXJnIHdhcyAxKSAqLwor ICAgICAgICAgICAgbWF4ID0gMDsKKyAgICAgICAgICBmYWlsZWQgPSAwOyAgICAgICAgICAgICAg ICAgICAvKiBVbnNldCBmYWlsdXJlIGZsYWcgKi8KKyAgICAgICAgICBzcHJpbnRmKGZudmFsLCIl ZCIsbWF4KTsgICAgICAvKiBTQUZFICovCisgICAgICAgICAgZ290byBmbmVuZDsKKyAgICAgIH0K KworICAgIH0gLyogQnJlYWsgdXAgYmlnIHN3aXRjaC4uLiAqLworCisgICAgc3dpdGNoICh5KSB7 CisgICAgICBjYXNlIEZOX0pEQVRFOgorICAgICAgICBpZiAoYXJnbiA8IDEpICAgICAgICAgICAg ICAgICAgIC8qIENoZWNrIG51bWJlciBvZiBhcmdzICovCisgICAgICAgICAgcCA9IGNrZGF0ZSgp OyAgICAgICAgICAgICAgICAgLyogTm9uZSwgZ2V0IHRvZGF5J3MgZGF0ZS10aW1lICovCisgICAg ICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU29tZSAqLworICAgICAgICAg IHAgPSBicFswXTsgICAgICAgICAgICAgICAgICAgIC8qIFVzZSBmaXJzdCAqLworICAgICAgICBw ID0gY2tjdnRkYXRlKHAsMCk7ICAgICAgICAgICAgIC8qIENvbnZlcnQgdG8gc3RhbmRhcmQgZm9y bSAqLworICAgICAgICBja3N0cm5jcHkoZm52YWwsempkYXRlKHApLEZOVkFMTCk7IC8qIENvbnZl cnQgdG8gSnVsaWFuICovCisgICAgICAgIHAgPSBmbnZhbDsgICAgICAgICAgICAgICAgICAgICAg LyogUG9pbnQgdG8gcmVzdWx0ICovCisgICAgICAgIGZhaWxlZCA9IDA7CisgICAgICAgIGlmICgq cCA9PSAnLScpIHsKKyAgICAgICAgICAgIGZhaWxlZCA9IDE7CisgICAgICAgICAgICBpZiAoZm5k aWFncykgICAgICAgICAgICAgICAgLyogRGVmYXVsdCBpcyB0aGlzIGVycm9yIG1lc3NhZ2UgKi8K KyAgICAgICAgICAgICAgY2ttYWttc2coZm52YWwsRk5WQUxMLCI8RVJST1I6QVJHX0JBRF9EQVRF OlxcZiIsZm4sIigpPiIsTlVMTCk7CisgICAgICAgIH0KKyAgICAgICAgZ290byBmbmVuZDsKKwor ICAgICAgY2FzZSBGTl9EQVRFSjoKKyAgICAgICAgY2tzdHJuY3B5KGZudmFsLGp6ZGF0ZShicFsw XSksRk5WQUxMKTsgLyogQ29udmVydCB0byB5eXl5PGRheW9meWVhcj4gKi8KKyAgICAgICAgcCA9 IGZudmFsOyAgICAgICAgICAgICAgICAgICAgICAvKiBQb2ludCB0byByZXN1bHQgKi8KKyAgICAg ICAgZmFpbGVkID0gMDsKKyAgICAgICAgaWYgKCpwID09ICctJykgeworICAgICAgICAgICAgZmFp bGVkID0gMTsKKyAgICAgICAgICAgIGlmIChmbmRpYWdzKSAgICAgICAgICAgICAgICAvKiBEZWZh dWx0IGlzIHRoaXMgZXJyb3IgbWVzc2FnZSAqLworICAgICAgICAgICAgICBja21ha21zZyhmbnZh bCxGTlZBTEwsIjxFUlJPUjpBUkdfQkFEX0RBVEU6XFxmIixmbiwiKCk+IixOVUxMKTsKKyAgICAg ICAgfQorICAgICAgICBnb3RvIGZuZW5kOworCisgICAgICBjYXNlIEZOX0RUSU06ICAgICAgICAg ICAgICAgICAgICAgLyogXGZjdnRkYXRlKCkgKi8KKyAgICAgIGNhc2UgRk5fVElNRTogICAgICAg ICAgICAgICAgICAgICAvKiBGcmVlLWZvcm1hdCB0aW1lIHRvIGhoOm1tOnNzICovCisgICAgICBj YXNlIEZOX05USU06ICAgICAgICAgICAgICAgICAgICAgLyogVGltZSB0byBzZWMgc2luY2UgbWlk bmlnaHQgKi8KKyAgICAgICAgcyA9IChhcmduID4gMCkgPyBicFswXSA6ICIiOworICAgICAgICBp ZiAoIXMpIHMgPSAiIjsKKyAgICAgICAgaWYgKCEqcykKKyAgICAgICAgICBwID0gY2tkYXRlKCk7 ICAgICAgICAgICAgICAgICAvKiBOb25lLCBnZXQgdG9kYXkncyBkYXRlICovCisgICAgICAgIGVs c2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU29tZSAqLworICAgICAgICAgIHAgPSBi cFswXTsgICAgICAgICAgICAgICAgICAgIC8qIFVzZSBmaXJzdCAqLworCXsKKwkgICAgY2hhciAq IHM7CisJICAgIHMgPSBwOworCSAgICB3aGlsZSAoKnMpIHsKKwkJaWYgKCpzIDwgMzIpIHsKKwkJ ICAgICpzID0gTlVMOworCQkgICAgYnJlYWs7CisJCX0KKwkJcysrOworCSAgICB9CisJICAgIC8q IGRvIHsgaWYgKCpzIDwgJyEnKSAqcyA9IE5VTDsgYnJlYWs7IH0gd2hpbGUgKCpzKyspOyAqLwor CX0KKyAgICAgICAgcCA9IGNrY3Z0ZGF0ZShwLDIpOyAgICAgICAgICAgICAvKiBDb252ZXJ0IHRv IHN0YW5kYXJkIGZvcm0gKi8KKyAgICAgICAgaWYgKCpwID09ICc8JykgeworICAgICAgICAgICAg ZmFpbGVkID0gMTsKKyAgICAgICAgICAgIGlmIChmbmRpYWdzKSAgICAgICAgICAgICAgICAvKiBE ZWZhdWx0IGlzIHRoaXMgZXJyb3IgbWVzc2FnZSAqLworICAgICAgICAgICAgICBja21ha21zZyhm bnZhbCxGTlZBTEwsCisgICAgICAgICAgICAgICAgICAgICAgICI8RVJST1I6QVJHX0JBRF9EQVRF X09SX1RJTUU6XFxmIixmbiwiKCk+IixOVUxMKTsKKyAgICAgICAgICAgIHAgPSBmbnZhbDsKKyAg ICAgICAgICAgIGdvdG8gZm5lbmQ7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGFyZ24gPiAxKSB7 CQkJLyogRm9ybWF0IGNvZGUgKi8KKyAgICAgICAgICAgIHMgPSBicFsxXTsKKyAgICAgICAgICAg IGlmICghcykgcyA9ICIiOworICAgICAgICAgICAgaWYgKCEqcykgcyA9ICIwIjsKKyAgICAgICAg ICAgIGlmICghY2hrbnVtKHMpKSB7CisgICAgICAgICAgICAgICAgZmFpbGVkID0gMTsKKyAgICAg ICAgICAgICAgICBpZiAoZm5kaWFncykKKyAgICAgICAgICAgICAgICAgIGNrbWFrbXNnKGZudmFs LEZOVkFMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICI8RVJST1I6QVJHX05PVF9OVU1F UklDOlxcZiIsZm4sIigpPiIsTlVMTCk7CisgICAgICAgICAgICAgICAgcCA9IGZudmFsOworICAg ICAgICAgICAgICAgIGdvdG8gZm5lbmQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB4ID0g YXRvaShzKTsKKyAgICAgICAgICAgIC8qIGlmICh4KSAqLyBwID0gc2h1ZmZsZWRhdGUocCx4KTsK KyAgICAgICAgfQorICAgICAgICBpZiAoY3ggPT0gRk5fVElNRSkgeworICAgICAgICAgICAgcCAr PSA5OworICAgICAgICB9IGVsc2UgaWYgKGN4ID09IEZOX05USU0pIHsKKyAgICAgICAgICAgIGxv bmcgc2VjID0gMEw7CisgICAgICAgICAgICBwWzExXSA9IE5VTDsKKyAgICAgICAgICAgIHBbMTRd ID0gTlVMOworICAgICAgICAgICAgc2VjID0gYXRvbChwKzkpICogMzYwMEwgKyBhdG9sKHArMTIp ICogNjBMICsgYXRvbChwKzE1KTsKKyAgICAgICAgICAgIHNwcmludGYoZm52YWwsIiVsZCIsc2Vj KTsgICAvKiBTQUZFICovCisgICAgICAgICAgICBwID0gZm52YWw7CisgICAgICAgIH0KKyAgICAg ICAgZ290byBmbmVuZDsKKworICAgICAgY2FzZSBGTl9NSkQ6ICAgICAgICAgICAgICAgICAgICAg IC8qIE1vZGlmaWVkIEp1bGlhbiBEYXRlICovCisgICAgICAgIGlmIChhcmduIDwgMSkgICAgICAg ICAgICAgICAgICAgLyogQ2hlY2sgbnVtYmVyIG9mIGFyZ3MgKi8KKyAgICAgICAgICBwID0genpu ZGF0ZSgpOyAgICAgICAgICAgICAgICAvKiBOb25lLCBnZXQgdG9kYXkncyBkYXRlLXRpbWUgKi8K KyAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTb21lICovCisgICAg ICAgICAgcCA9IGJwWzBdOyAgICAgICAgICAgICAgICAgICAgLyogVXNlIGZpcnN0ICovCisgICAg ICAgIHAgPSBja2N2dGRhdGUocCwwKTsgICAgICAgICAgICAgLyogQ29udmVydCB0byBzdGFuZGFy ZCBmb3JtICovCisgICAgICAgIGlmICgqcCA9PSAnLScpIHsKKyAgICAgICAgICAgIGZhaWxlZCA9 IDE7CisgICAgICAgICAgICBpZiAoZm5kaWFncykgICAgICAgICAgICAgICAgLyogRGVmYXVsdCBp cyB0aGlzIGVycm9yIG1lc3NhZ2UgKi8KKyAgICAgICAgICAgICAgY2ttYWttc2coZm52YWwsRk5W QUxMLCI8RVJST1I6QVJHX0JBRF9EQVRFOlxcZiIsZm4sIigpPiIsTlVMTCk7CisgICAgICAgICAg ICBnb3RvIGZuZW5kOworICAgICAgICB9CisgICAgICAgIC8qIENvbnZlcnQgdG8gbW9kaWZpZWQg SnVsaWFuIGRhdGUgKi8KKyAgICAgICAgc3ByaW50ZihmbnZhbCwiJWxkIixtamQocCkpOyAgICAv KiBTQUZFICovCisgICAgICAgIHAgPSBmbnZhbDsgICAgICAgICAgICAgICAgICAgICAgLyogUG9p bnQgdG8gcmVzdWx0ICovCisgICAgICAgIGdvdG8gZm5lbmQ7CisKKyAgICAgIGNhc2UgRk5fTUpE MjogeworICAgICAgICAgIGxvbmcgayA9IDBMOworICAgICAgICAgIGludCBuID0gMDsKKyAgICAg ICAgICBwID0gZXZhbHgoYnBbMF0pOworICAgICAgICAgIGlmICgqcCA9PSAnLScpIHsKKyAgICAg ICAgICAgICAgcCsrOworICAgICAgICAgICAgICBuID0gMTsKKyAgICAgICAgICB9CisgICAgICAg ICAgaWYgKCFyZGlnaXRzKHApKSB7CisgICAgICAgICAgICAgIGZhaWxlZCA9IDE7CisgICAgICAg ICAgICAgIGV2YWxlcnIoZm4pOworICAgICAgICAgICAgICBwID0gZm52YWw7CisgICAgICAgICAg ICAgIGdvdG8gZm5lbmQ7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgayA9IGF0 b2wocCk7CisgICAgICAgICAgICAgIGlmIChuKSBrID0gLWs7CisgICAgICAgICAgfQorICAgICAg ICAgIGNrc3RybmNweShmbnZhbCxtamQyZGF0ZShrKSxGTlZBTEwpOyAvKiBDb252ZXJ0IHRvIERh dGUgKi8KKyAgICAgICAgICBwID0gZm52YWw7ICAgICAgICAgICAgICAgICAgICAvKiBQb2ludCB0 byByZXN1bHQgKi8KKyAgICAgICAgICBmYWlsZWQgPSAwOworICAgICAgICAgIGdvdG8gZm5lbmQ7 CisgICAgICB9CisKKyNpZm5kZWYgTk9ESUFMCisgICAgICBjYXNlIEZOX1BOQ1ZUOiB7ICAgICAg ICAgICAgICAgICAgLyogQ29udmVydCBwaG9uZSBudW1iZXIgKi8KKyAgICAgICAgICBleHRlcm4g Y2hhciAqIHBuY3Z0KCk7CisgICAgICAgICAgZmFpbGVkID0gMDsKKyAgICAgICAgICBwID0gcG5j dnQoYnBbMF0pOworICAgICAgICAgIGlmICghcCkgcCA9ICIiOworICAgICAgICAgIGlmICghKnAp IHsKKyAgICAgICAgICAgIGZhaWxlZCA9IDE7CisgICAgICAgICAgICBpZiAoZm5kaWFncykgICAg ICAgICAgICAgICAgLyogRGVmYXVsdCBpcyB0aGlzIGVycm9yIG1lc3NhZ2UgKi8KKyAgICAgICAg ICAgICAgY2ttYWttc2coZm52YWwsRk5WQUxMLAorICAgICAgICAgICAgICAgICAgICAgICAiPEVS Uk9SOkFSR19CQURfUEhPTkVOVU06XFxmIixmbiwiKCk+IixOVUxMKTsKKyAgICAgICAgfQorICAg ICAgICBnb3RvIGZuZW5kOworICAgICAgfQorI2VuZGlmIC8qIE5PRElBTCAqLworCisgICAgICBj YXNlIEZOX0RBWToKKyAgICAgIGNhc2UgRk5fTkRBWToKKyAgICAgICAgaWYgKGFyZ24gPCAxKSAg ICAgICAgICAgICAgICAgICAvKiBDaGVjayBudW1iZXIgb2YgYXJncyAqLworICAgICAgICAgIHAg PSB6em5kYXRlKCk7ICAgICAgICAgICAgICAgIC8qIE5vbmUsIGdldCB0b2RheSdzIGRhdGUtdGlt ZSAqLworICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNvbWUgKi8K KyAgICAgICAgICBwID0gYnBbMF07ICAgICAgICAgICAgICAgICAgICAvKiBVc2UgZmlyc3QgKi8K KyAgICAgICAgcCA9IGNrY3Z0ZGF0ZShwLDApOyAgICAgICAgICAgICAvKiBDb252ZXJ0IHRvIHN0 YW5kYXJkIGZvcm0gKi8KKyAgICAgICAgaWYgKCpwID09ICctJykgeworICAgICAgICAgICAgZmFp bGVkID0gMTsKKyAgICAgICAgICAgIGlmIChmbmRpYWdzKSAgICAgICAgICAgICAgICAvKiBEZWZh dWx0IGlzIHRoaXMgZXJyb3IgbWVzc2FnZSAqLworICAgICAgICAgICAgICBja21ha21zZyhmbnZh bCxGTlZBTEwsIjxFUlJPUjpBUkdfQkFEX0RBVEU6XFxmIixmbiwiKCk+IixOVUxMKTsKKyAgICAg ICAgICAgIGdvdG8gZm5lbmQ7CisgICAgICAgIH0KKyAgICAgICAgZmFpbGVkID0gMDsKKyAgICAg ICAgeiA9IG1qZChwKTsgICAgICAgICAgICAgICAgICAgICAvKiBDb252ZXJ0IHRvIG1vZGlmaWVk IEp1bGlhbiBkYXRlICovCisgICAgICAgIHogPSB6ICUgN0w7CisgICAgICAgIGlmICh6IDwgMCkg eworICAgICAgICAgICAgeiA9IDAgLSB6OworICAgICAgICAgICAgayA9IDYgLSAoKGludCl6ICsg MykgJSA3OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgayA9ICgoaW50KXogKyAzKSAl IDc7CS8qIERheSBvZiB3ZWVrICovCisgICAgICAgIH0KKyAgICAgICAgcCA9IGZudmFsOyAgICAg ICAgICAgICAgICAgICAgICAvKiBQb2ludCB0byByZXN1bHQgKi8KKyAgICAgICAgaWYgKGN4ID09 IEZOX05EQVkpCisgICAgICAgICAgc3ByaW50ZihmbnZhbCwiJWQiLGspOyAgICAgICAgLyogU0FG RSAqLworICAgICAgICBlbHNlCisgICAgICAgICAgY2tzdHJuY3B5KGZudmFsLHdrZGF5c1trXSxG TlZBTEwpOworICAgICAgICBnb3RvIGZuZW5kOworCisgICAgICBjYXNlIEZOX04yVElNOiB7ICAg ICAgICAgICAgICAgICAgLyogU2VjIHNpbmNlIG1pZG5pZ2h0IHRvIGhoOm1tOnNzICovCisgICAg ICAgICAgbG9uZyBrID0gMEw7CisgICAgICAgICAgaW50IG4gPSAwLCBoaCwgbW0sIHNzOworICAg ICAgICAgIGNoYXIgKiBzID0gYnBbMF07CisgICAgICAgICAgaWYgKGFyZ24gPCAxKSAgICAgICAg ICAgICAgICAgLyogSWYgbm8gYXJnIHN1YnN0aXR1dGUgMCAqLworICAgICAgICAgICAgcyA9ICIw IjsKKyAgICAgICAgICBwID0gZXZhbHgocyk7ICAgICAgICAgICAgICAgICAvKiBFdmFsdWF0ZSBl eHByZXNzaW9uIHNpbGVudGx5ICovCisgICAgICAgICAgaWYgKCpwID09ICctJykgeyAgICAgICAg ICAgICAgLyogQ2hlY2sgcmVzdWx0IGZvciBtaW51cyBzaWduICovCisgICAgICAgICAgICAgIHAr KzsKKyAgICAgICAgICAgICAgbiA9IDE7CisgICAgICAgICAgfQorICAgICAgICAgIGlmICghcmRp Z2l0cyhwKSkgeyAvKiBDaGVjayBmb3IgbnVtZXJpYyAqLworICAgICAgICAgICAgICBmYWlsZWQg PSAxOworICAgICAgICAgICAgICBja21ha21zZyhmbnZhbCxGTlZBTEwsCisgICAgICAgICAgICAg ICAgICAgICAgICI8RVJST1I6QVJHX05PVF9OVU1FUklDOlxcZiIsZm4sIigpPiIsTlVMTCk7Cisg ICAgICAgICAgICAgIHAgPSBmbnZhbDsKKyAgICAgICAgICAgICAgZ290byBmbmVuZDsKKyAgICAg ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICBrID0gYXRvbChwKTsKKyAgICAgICAgICAgICAg aWYgKG4pIGsgPSAtazsKKyAgICAgICAgICB9CisgICAgICAgICAgaWYgKGsgPCAwKSB7ICAgICAg ICAgICAgICAgICAgLyogQ2hlY2sgZm9yIG5lZ2F0aXZlICovCisgICAgICAgICAgICAgIGZhaWxl ZCA9IDE7CisgICAgICAgICAgICAgIGlmIChmbmRpYWdzKQorICAgICAgICAgICAgICAgIGNrbWFr bXNnKGZudmFsLEZOVkFMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiPEVSUk9SOkFSR19P VVRfT0ZfUkFOR0U6XFxmIixmbiwiKCk+IixOVUxMKTsKKyAgICAgICAgICAgICAgcCA9IGZudmFs OworICAgICAgICAgICAgICBnb3RvIGZuZW5kOworICAgICAgICAgIH0KKyAgICAgICAgICBoaCA9 IGsgLyAzNjAwTDsgICAgICAgICAgICAgICAvKiBIYXZlIHBvc2l0aXZlIG51bWJlciAqLworICAg ICAgICAgIG1tID0gKGsgJSAzNjAwTCkgLyA2MEw7ICAgICAgIC8qIGJyZWFrIGl0IGRvd24uLi4g Ki8KKyAgICAgICAgICBzcyA9ICgoayAlIDM2MDBMKSAlIDYwTCk7CisKKyAgICAgICAgICBzcHJp bnRmKGZudmFsLCIlMDJkOiUwMmQ6JTAyZCIsaGgsbW0sc3MpOyAvKiBTQUZFICovCisgICAgICAg ICAgcCA9IGZudmFsOworICAgICAgICAgIGZhaWxlZCA9IDA7CisgICAgICAgICAgZ290byBmbmVu ZDsKKyAgICAgIH0KKworICAgICAgY2FzZSBGTl9QRVJNOiB7ICAgICAgICAgICAgICAgICAgIC8q IEZpbGUgcGVybWlzc2lvbnMgKi8KKyAgICAgICAgICBwID0gZm52YWw7CisgICAgICAgICAgeiA9 IHpjaGtpKGJwWzBdKTsKKyAgICAgICAgICBpZiAoeiA8IDApIHsKKyAgICAgICAgICAgICAgZmFp bGVkID0gMTsKKyAgICAgICAgICAgICAgaWYgKGZuZGlhZ3MpIHsKKyAgICAgICAgICAgICAgICAg IGlmICh6ID09IC0xKQorICAgICAgICAgICAgICAgICAgICBja21ha21zZyhmbnZhbCxGTlZBTEws CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8RVJST1I6RklMRV9OT1RfRk9VTkQ6XFxm IixmbiwiKCk+IixOVUxMKTsKKyAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHogPT0gLTIpCisg ICAgICAgICAgICAgICAgICAgIGNrbWFrbXNnKGZudmFsLEZOVkFMTCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIjxFUlJPUjpGSUxFX05PVF9SRUFEQUJMRTpcXGYiLGZuLCIoKT4iLE5V TEwpOworICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoeiA9PSAtMykKKyAgICAgICAgICAgICAg ICAgICAgY2ttYWttc2coZm52YWwsRk5WQUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAiPEVSUk9SOkZJTEVfTk9UX0FDQ0VTU0lCTEU6XFxmIixmbiwiKCk+IixOVUxMKTsKKyAgICAg ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgY2ttYWttc2coZm52YWwsRk5W QUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPEVSUk9SOkZJTEVfRVJST1I6XFxm IixmbiwiKCk+IixOVUxMKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBnb3RvIGZu ZW5kOworICAgICAgICAgIH0KKyNpZmRlZiBDS19QRVJNUworICAgICAgICAgIGNrc3RybmNweShm bnZhbCx6aXBlcm0oYnBbMF0pLEZOVkFMTCk7CisjZWxzZQorICAgICAgICAgIGNrc3RybmNweShm bnZhbCwiKHVua25vd24pIixGTlZBTEwpOworI2VuZGlmIC8qIENLX1BFUk1TICovCisgICAgICAg ICAgZ290byBmbmVuZDsKKyAgICAgIH0KKyAgICAgIGNhc2UgRk5fVExPT0s6ICAgICAgICAgICAg ICAgICAgICAvKiB0YWJsZWxvb2soKSAqLworICAgICAgY2FzZSBGTl9BTE9PSzogeyAgICAgICAg ICAgICAgICAgIC8qIGFycmF5bG9vaygpICovCisgICAgICAgICAgaW50IGksIHgsIGhpLCBsbywg bWF4LCBjbWRsZW47CisgICAgICAgICAgY2hhciBhYnVmWzE2XSwgKnMsICpwYXQ7CisgICAgICAg ICAgY2hhciBrd2J1ZlsyNTZdOworICAgICAgICAgIGNoYXIgZGVsaW0gPSAnOic7CisgICAgICAg ICAgZmFpbGVkID0gMTsgICAgICAgICAgICAgICAgICAgLyogQXNzdW1lIGZhaWx1cmUgKi8KKyAg ICAgICAgICBja3N0cm5jcHkoZm52YWwsIi0xIixGTlZBTEwpOworICAgICAgICAgIHBhdCA9IGJw WzBdOyAgICAgICAgICAgICAgICAgIC8qIFBvaW50IHRvIHNlYXJjaCBwYXR0ZXJuICovCisgICAg ICAgICAgaWYgKCFwYXQpIHBhdCA9ICIiOyAgICAgICAgICAgLyogV2F0Y2ggb3V0IGZvciBOVUxM IHBvaW50ZXIgKi8KKyAgICAgICAgICBjbWRsZW4gPSBzdHJsZW4ocGF0KTsgICAgICAgICAvKiBH ZXQgcGF0dGVybiBsZW5ndGggKi8KKyAgICAgICAgICBpZiAoYXJnbiA8IDIgLyogfHwgY21kbGVu IDwgMSAqLyApIHsgLyogTmVlZCB0d28gYXJncyAqLworICAgICAgICAgICAgICBpZiAoZm5kaWFn cykKKyAgICAgICAgICAgICAgICBja21ha21zZyhmbnZhbCxGTlZBTEwsIjxFUlJPUjpNSVNTSU5H X0FSRzpcXGYiLGZuLCIoKT4iLE5VTEwpOworICAgICAgICAgICAgICBnb3RvIGZuZW5kOworICAg ICAgICAgIH0KKyAgICAgICAgICBja3N0cm5jcHkoYWJ1ZixicFsxXSwxNik7ICAgICAvKiBHZXQg YXJyYXkgcmVmZXJlbmNlICovCisgICAgICAgICAgaWYgKGFyZ24gPiAyKQorICAgICAgICAgICAg ZGVsaW0gPSAqKGJwWzJdKTsKKyAgICAgICAgICBzID0gYWJ1ZjsKKyAgICAgICAgICBpZiAoKHgg PSBhcnJheWJvdW5kcyhzLCZsbywmaGkpKSA8IDApIHsgLyogR2V0IGluZGV4IGFuZCBib3VuZHMg Ki8KKyAgICAgICAgICAgICAgaWYgKGZuZGlhZ3MpCisgICAgICAgICAgICAgICBja21ha21zZyhm bnZhbCxGTlZBTEwsIjxFUlJPUjpBUkdfQkFEX0FSUkFZOlxcZiIsZm4sIigpPiIsTlVMTCk7Cisg ICAgICAgICAgICAgIGdvdG8gZm5lbmQ7CisgICAgICAgICAgfQorICAgICAgICAgIHAgPSBmbnZh bDsgICAgICAgICAgICAgICAgICAgIC8qIFBvaW50IHRvIHJlc3VsdCAqLworICAgICAgICAgIG1h eCA9IGFfZGltW3hdOyAgICAgICAgICAgICAgIC8qIFNpemUgb2YgYXJyYXkgKi8KKyAgICAgICAg ICBpZiAobG8gPCAwKSBsbyA9IDA7ICAgICAgICAgICAvKiBVc2UgZ2l2ZW4gcmFuZ2UgaWYgYW55 ICovCisgICAgICAgICAgaWYgKGxvID4gbWF4KSBsbyA9IG1heDsKKyAgICAgICAgICBpZiAoaGkg PCAwKSBoaSA9IG1heDsKKyAgICAgICAgICBpZiAoaGkgPiBtYXgpIGhpID0gbWF4OworICAgICAg ICAgIGZhaWxlZCA9IDA7ICAgICAgICAgICAgICAgICAgIC8qIFVuc2V0IGZhaWx1cmUgZmxhZyAq LworICAgICAgICAgIGlmIChtYXggPCAxKQorICAgICAgICAgICAgZ290byBmbmVuZDsKKyAgICAg ICAgICBrd2J1ZlsyNTVdID0gTlVMOworICAgICAgICAgIGZvciAoaSA9IGxvOyBpIDw9IGhpOyBp KyspIHsKKyAgICAgICAgICAgICAgaWYgKCFhX3B0clt4XVtpXSkKKyAgICAgICAgICAgICAgICBj b250aW51ZTsKKyAgICAgICAgICAgICAgaWYgKGN4ID09IEZOX0FMT09LKSB7CisgICAgICAgICAg ICAgICAgICBpZiAoY2ttYXRjaChwYXQsYV9wdHJbeF1baV0saW5wY2FzW2NtZGx2bF0sMSs0KSkg eworICAgICAgICAgICAgICAgICAgICAgIHNwcmludGYoZm52YWwsIiVkIixpKTsgLyogU0FGRSAq LworICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZm5lbmQ7CisgICAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY3ggPT0gRk5fVExPT0spIHsKKyAgICAgICAgICAg ICAgICAgIGNoYXIgKiBhYTsKKyAgICAgICAgICAgICAgICAgIGludCBqID0gMCwgdiA9IDAsIGxl bjsKKyAgICAgICAgICAgICAgICAgIGlmIChpID09IGhpKQorICAgICAgICAgICAgICAgICAgICBi cmVhazsKKyAgICAgICAgICAgICAgICAgIGFhID0gYV9wdHJbeF1baV07ICAgICAvKiBQb2ludCB0 byB0aGlzIGFycmF5IGVsZW1lbnQgKi8KKyAgICAgICAgICAgICAgICAgIGlmICghYWEpIGFhID0g IiI7CisgICAgICAgICAgICAgICAgICB3aGlsZSAoaiA8IDI1NCAmJiAqYWEpIHsgLyogSXNvbGF0 ZSBrZXl3b3JkICovCisgICAgICAgICAgICAgICAgICAgICAgaWYgKCphYSA9PSBkZWxpbSkKKyAg ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgIGt3YnVm W2orK10gPSAqYWErKzsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIGt3 YnVmW2pdID0gTlVMOworICAgICAgICAgICAgICAgICAgbGVuID0gajsKKyAgICAgICAgICAgICAg ICAgIHYgPSAwOworICAgICAgICAgICAgICAgICAgaWYgKChsZW4gPT0gY21kbGVuICYmICFja3N0 cmNtcChrd2J1ZixwYXQsbGVuLDApKSB8fAorICAgICAgICAgICAgICAgICAgICAgICgodiA9ICFj a3N0cmNtcChrd2J1ZixwYXQsY21kbGVuLDApKSAmJgorICAgICAgICAgICAgICAgICAgICAgICBj a3N0cmNtcChhX3B0clt4XVtpKzFdLHBhdCxjbWRsZW4sMCkpKSB7CisgICAgICAgICAgICAgICAg ICAgICAgc3ByaW50ZihmbnZhbCwiJWQiLGkpOyAvKiBTQUZFICovCisgICAgICAgICAgICAgICAg ICAgICAgZ290byBmbmVuZDsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg IGlmICh2KSB7ICAgICAgICAgICAgICAvKiBBbWJpZ3VvdXMgKi8KKyAgICAgICAgICAgICAgICAg ICAgICBja3N0cm5jcHkoZm52YWwsIi0yIixGTlZBTEwpOworICAgICAgICAgICAgICAgICAgICAg IGdvdG8gZm5lbmQ7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAg ICAgICB9CisgICAgICAgICAgaWYgKGN4ID09IEZOX1RMT09LKSB7ICAgICAgICAgLyogdGFibGVs b29rKCkgbGFzdCBlbGVtZW50ICovCisgICAgICAgICAgICAgIGNrc3RybmNweShmbnZhbCwiLTEi LEZOVkFMTCk7CisgICAgICAgICAgICAgIGlmICghY2tzdHJjbXAoYV9wdHJbeF1baGldLHBhdCxj bWRsZW4sMCkpCisgICAgICAgICAgICAgICAgc3ByaW50ZihmbnZhbCwiJWQiLGhpKTsgLyogU0FG RSAqLworICAgICAgICAgIH0KKyAgICAgICAgICBnb3RvIGZuZW5kOworICAgICAgfQorICAgICAg Y2FzZSBGTl9UT0I2NDogICAgICAgICAgICAgICAgICAgIC8qIEJhc2UtNjQgY29udmVyc2lvbiAq LworICAgICAgY2FzZSBGTl9GTUI2NDoKKyAgICAgICAgcCA9IGZudmFsOworICAgICAgICAqcCA9 IE5VTDsKKyAgICAgICAgaWYgKGFyZ24gPCAxKQorICAgICAgICAgIGdvdG8gZm5lbmQ7CisgICAg ICAgIGlmIChjeCA9PSBGTl9UT0I2NCkgeworICAgICAgICAgICAgeCA9IGI4dG9iNjQoYnBbMF0s LTEsZm52YWwsRk5WQUxMKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHggPSBzdHJs ZW4oYnBbMF0pOworICAgICAgICAgICAgaWYgKHggJSA0KSB7ICAgICAgICAgICAgICAgIC8qIGxl bmd0aCBtdXN0IGJlIG11bHRpcGxlIG9mIDQgKi8KKyAgICAgICAgICAgICAgICBmYWlsZWQgPSAx OworICAgICAgICAgICAgICAgIGNrbWFrbXNnKGZudmFsLEZOVkFMTCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAiPEVSUk9SOkFSR19JTkNPTVBMRVRFOlxcZiIsZm4sIigpPiIsTlVMTCk7Cisg ICAgICAgICAgICAgICAgZ290byBmbmVuZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGI2 NHRvYjgoTlVMTCwwLE5VTEwsMCk7ICAgICAvKiBSZXNldCAqLworICAgICAgICAgICAgeCA9IGI2 NHRvYjgoYnBbMF0sLTEsZm52YWwsRk5WQUxMKTsKKyAgICAgICAgICAgIGI2NHRvYjgoTlVMTCww LE5VTEwsMCk7ICAgICAvKiBSZXNldCBhZ2FpbiAqLworICAgICAgICB9CisgICAgICAgIGlmICh4 IDwgMCkgeworICAgICAgICAgICAgZmFpbGVkID0gMTsKKyAgICAgICAgICAgIGlmIChmbmRpYWdz KSB7CisgICAgICAgICAgICAgICAgY2hhciAqIG0gPSAiSU5URVJOQUxfRVJST1IiOworICAgICAg ICAgICAgICAgIHN3aXRjaCAoeCkgeworICAgICAgICAgICAgICAgICAgY2FzZSAtMTogbSA9ICJB UkdfVE9PX0xPTkciOyBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgLTI6IG0gPSAiQVJH X09VVF9PRl9SQU5HRSI7IGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ICBpZiAoY2ttYWttc2coZm52YWwsRk5WQUxMLCI8RVJST1I6IixtLCJcXGYiLGZuKSA+IDApCisg ICAgICAgICAgICAgICAgICBja3N0cm5jYXQoZm52YWwsIigpPiIsRk5WQUxMKTsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgfQorICAgICAgICBnb3RvIGZuZW5kOworCisgICAgICBjYXNlIEZOX0FC UzogeworICAgICAgICAgIGNoYXIgKiBzOworICAgICAgICAgIHMgPSBicFswXTsKKyAgICAgICAg ICBpZiAoKnMgPT0gJy0nIHx8ICpzID09ICcrJykKKyAgICAgICAgICAgIHMrKzsKKyAgICAgICAg ICBpZiAoIXJkaWdpdHMocykpIHsKKyAgICAgICAgICAgICAgaWYgKGZuZGlhZ3MpCisgICAgICAg ICAgICAgICAgY2ttYWttc2coZm52YWwsRk5WQUxMLAorICAgICAgICAgICAgICAgICAgICAgICAg ICI8RVJST1I6QVJHX05PVF9OVU1FUklDOlxcZiIsZm4sIigpPiIsTlVMTCk7CisgICAgICAgICAg ICAgIGdvdG8gZm5lbmQ7CisgICAgICAgICAgfQorICAgICAgICAgIGNrc3RybmNweShmbnZhbCxz LEZOVkFMTCk7CisgICAgICAgICAgZ290byBmbmVuZDsKKyAgICAgIH0KKworICAgICAgY2FzZSBG Tl9BQURVTVA6IHsKKyAgICAgICAgICBjaGFyIGFidWZbMTZdLCAqcyA9IE5VTEwsICoqYXAgPSBO VUxMLCAqKnZwID0gTlVMTDsKKyAgICAgICAgICBjaGFyIHBhdHRlcm5bVk5BTUxdOworICAgICAg ICAgIGludCBzbGVuLCBpLCBqLCBrLCBmaXJzdCA9IC0xOworICAgICAgICAgIGV4dGVybiBpbnQg eGRlbG1hYygpOworICAgICAgICAgIHAgPSBmbnZhbDsKKyAgICAgICAgICBpZiAoYXJnbiA8IDIp IHsKKyAgICAgICAgICAgICAgaWYgKGZuZGlhZ3MpCisgICAgICAgICAgICAgICAgY2ttYWttc2co Zm52YWwsRk5WQUxMLCI8RVJST1I6TUlTU0lOR19BUkcyOlxcZiIsZm4sIigpPiIsTlVMTCk7Cisg ICAgICAgICAgICAgIGdvdG8gZm5lbmQ7CisgICAgICAgICAgfQorICAgICAgICAgIGRlYnVnKEYx MDEsImFhY29udmVydCBhcmduIiwiIixhcmduKTsKKyAgICAgICAgICBzID0gYnBbMF07CisgICAg ICAgICAgc2xlbiA9IHN0cmxlbihzKTsKKworICAgICAgICAgIC8qIENvdW50IGVsZW1lbnRzIHNv IHdlIGNhbiBjcmVhdGUgdGhlIGFycmF5ICovCisKKyAgICAgICAgICBja21ha21zZyhwYXR0ZXJu LFZOQU1MLHMsIjwqPiIsTlVMTCxOVUxMKTsKKyAgICAgICAgICBmb3IgKGsgPSAwLCBpID0gMDsg aSA8IG5tYWM7IGkrKykgeworICAgICAgICAgICAgICBpZiAoY2ttYXRjaChwYXR0ZXJuLG1hY3Rh YltpXS5rd2QsMCwxKSkgeworICAgICAgICAgICAgICAgICAgaWYgKGZpcnN0IDwgMCkgICAgICAg IC8qIFJlbWVtYmVyIGxvY2F0aW9uIG9mIGZpcnN0IG1hdGNoICovCisgICAgICAgICAgICAgICAg ICAgIGZpcnN0ID0gaTsKKyAgICAgICAgICAgICAgICAgIGsrKzsKKyAgICAgICAgICAgICAgfQor ICAgICAgICAgIH0KKyAgICAgICAgICBkZWJ1ZyhGMTAxLCJhYWNvbnZlcnQgbWF0Y2hlcyIsIiIs ayk7CisgICAgICAgICAgZGVidWcoRjEwMSwiYWFjb252ZXJ0IGZpcnN0IiwiIixmaXJzdCk7Cisg ICAgICAgICAgZm52YWxbMF0gPSBOVUw7ICAgICAgICAgICAgICAgLyogSW5pdGlhbCByZXR1cm4g dmFsdWUgKi8KKyAgICAgICAgICBja3N0cm5jcHkoYWJ1ZixicFsxXSwxNik7ICAgICAvKiBHZXQg YXJyYXkgcmVmZXJlbmNlICovCisgICAgICAgICAgcyA9IGFidWY7CisgICAgICAgICAgaWYgKCpz ID09IENNRFEpIHMrKzsKKyAgICAgICAgICBwID0gZm52YWw7ICAgICAgICAgICAgICAgICAgICAv KiBQb2ludCB0byByZXN1bHQgKi8KKyAgICAgICAgICBpZiAoZm5kaWFncykgICAgICAgICAgICAg ICAgICAvKiBEZWZhdWx0IGlzIHRoaXMgZXJyb3IgbWVzc2FnZSAqLworICAgICAgICAgICAgY2tt YWttc2coZm52YWwsRk5WQUxMLCI8RVJST1I6QVJHX0JBRF9BUlJBWTpcXGYiLGZuLCIoKT4iLE5V TEwpOworICAgICAgICAgIGlmIChzWzBdICE9ICcmJykgICAgICAgICAgICAgIC8qIEFkZHJlc3Mg b2YgYXJyYXkgKi8KKyAgICAgICAgICAgIGdvdG8gZm5lbmQ7CisgICAgICAgICAgaWYgKHNbMl0p CisgICAgICAgICAgICBpZiAoc1syXSAhPSAnWycgfHwgc1szXSAhPSAnXScpCisgICAgICAgICAg ICAgIGdvdG8gZm5lbmQ7CisgICAgICAgICAgaWYgKHNbMV0gPj0gNjQgJiYgc1sxXSA8IDkxKSAg LyogQ29udmVydCB1cHBlciB0byBsb3dlciAqLworICAgICAgICAgICAgc1sxXSArPSAzMjsKKyAg ICAgICAgICBpZiAoKHggPSBkY2xhcnJheShzWzFdLGspKSA8IDApIC8qIERlY2xhcmUgYXJyYXkg dG8gc2l6ZSAqLworICAgICAgICAgICAgZ290byBmbmVuZDsKKyAgICAgICAgICBhcCA9IGFfcHRy W3hdOyAgICAgICAgICAgICAgICAvKiBQb2ludCB0byBhcnJheSB3ZSBqdXN0IGRlY2xhcmVkICov CisgICAgICAgICAgLyogZGVidWcoRjExMSwiYWFjb252ZXJ0IGFycmF5IDEiLGFidWYsYXApOyAq LworICAgICAgICAgIGFidWZbMF0gPSBOVUw7CisgICAgICAgICAgaWYgKGFyZ24gPiAyKSB7Cisg ICAgICAgICAgICAgIGNrc3RybmNweShhYnVmLGJwWzJdLDE2KTsgLyogR2V0IHZhbHVlIGFycmF5 IHJlZmVyZW5jZSAqLworICAgICAgICAgICAgICBzID0gYWJ1ZjsKKyAgICAgICAgICAgICAgaWYg KCpzID09IENNRFEpIHMrKzsKKyAgICAgICAgICAgICAgaWYgKHNbMF0gIT0gJyYnKSAgICAgICAg ICAvKiBBZGRyZXNzIG9mIGFycmF5ICovCisgICAgICAgICAgICAgICAgZ290byBmbmVuZDsKKyAg ICAgICAgICAgICAgaWYgKHNbMl0pCisgICAgICAgICAgICAgICAgaWYgKHNbMl0gIT0gJ1snIHx8 IHNbM10gIT0gJ10nKQorICAgICAgICAgICAgICAgICAgZ290byBmbmVuZDsKKyAgICAgICAgICAg ICAgaWYgKHNbMV0gPj0gNjQgJiYgc1sxXSA8IDkxKSAvKiBDb252ZXJ0IHVwcGVyIHRvIGxvd2Vy ICovCisgICAgICAgICAgICAgICAgc1sxXSArPSAzMjsKKyAgICAgICAgICAgICAgaWYgKCh4ID0g ZGNsYXJyYXkoc1sxXSxrKSkgPCAwKQorICAgICAgICAgICAgICAgIGdvdG8gZm5lbmQ7CisgICAg ICAgICAgICAgIHZwID0gYV9wdHJbeF07ICAgICAgICAgICAgLyogUG9pbnQgdG8gYXJyYXkgd2Ug anVzdCBkZWNsYXJlZCAqLworICAgICAgICAgIH0KKyAgICAgICAgICAvKiBkZWJ1ZyhGMTExLCJh YWNvbnZlcnQgYXJyYXkgMiIsYWJ1Zix2cCk7ICovCisgICAgICAgICAgbWFrZXN0cigmYXBbMF0s Y2tpdG9hKGspKTsKKyAgICAgICAgICBpZiAodnApIG1ha2VzdHIoJnZwWzBdLGNraXRvYShrKSk7 CisgICAgICAgICAgaWYgKGZuZGlhZ3MpCisgICAgICAgICAgIGNrbWFrbXNnKGZudmFsLEZOVkFM TCwiPEVSUk9SOkFTU09DSUFUSVZFX0FSUkFZOlxcZiIsZm4sIigpPiIsTlVMTCk7CisKKyAgICAg ICAgICAvKiBDb3B5IG1hY3JvIGluZGV4ICYgdmFsdWUgdG8gdGhlIGFycmF5cyBhbmQgdGhlbiBy ZW1vdmUgdGhlICovCisgICAgICAgICAgLyogbWFjcm8sIHNvIHRoZSAnZmlyc3QnIHBvaW50ZXIg a2VlcHMgaW5kaWNhdGluZyB0aGUgbmV4dCBvbmUuICovCisgICAgICAgICAgLyogV2UgY291bGQg Y29tYmluZSB0aGUgaW5pdGlhbCBjb3VudGluZyBsb29wIHdpdGggdGhpcyBvbmUgYnV0ICovCisg ICAgICAgICAgLyogdGhlbiBpdCB3b3VsZCBiZSBoYXJkZXIgdG8gY3JlYXRlIHRoZSBhcnJheSBh bmQgYW55d2F5IHRoaXMgKi8KKyAgICAgICAgICAvKiBmdW5jdGlvbiBpcyBwbGVudHkgZmFzdCBh cyBpdCBpcy4gKi8KKworICAgICAgICAgIGZvciAoaSA9IDE7IGkgPD0gazsgKSB7CisgICAgICAg ICAgICAgIGlmICghY2ttYXRjaChwYXR0ZXJuLG1hY3RhYltmaXJzdF0ua3dkLDAsMSkpIHsKKyAg ICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsImFhY29udmVydCBvZGRiYWxsIixtYWN0YWJbZmly c3RdLmt3ZCxmaXJzdCk7CisgICAgICAgICAgICAgICAgICBmaXJzdCsrOworICAgICAgICAgICAg ICAgICAgY29udGludWU7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgY2tzdHJuY3B5 KHRtcGJ1ZixtYWN0YWJbZmlyc3RdLmt3ZCxUTVBCVUZTSVopOyAvKiBNYWNybyBuYW1lICovCisg ICAgICAgICAgICAgIHMgPSB0bXBidWY7ICAgICAgICAgICAgICAgICAgICAgICAvKiBNYWtlIHdy aXRlYWJsZSBjb3B5ICovCisgICAgICAgICAgICAgIHMgKz0gc2xlbjsgICAgICAgICAgICAgICAg ICAgICAgICAvKiBJc29sYXRlICJpbmRleCIgKi8KKyAgICAgICAgICAgICAgaiA9IHN0cmxlbihz KSAtIDE7CisgICAgICAgICAgICAgIGlmICgqcyAhPSAnPCcgfHwgKihzK2opICE9ICc+JykgeyAv KiBDaGVjayBzeW50YXggKi8KKyAgICAgICAgICAgICAgICAgIC8qIFRoaXMgc2hvdWxkbid0IGhh cHBlbiAqLworICAgICAgICAgICAgICAgICAgZGVidWcoRjExMSwiYWFjb252ZXJ0IEVSUk9SIixt YWN0YWJbZmlyc3RdLmt3ZCxmaXJzdCk7CisgICAgICAgICAgICAgICAgICBnb3RvIGZuZW5kOwor ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICoocytqKSA9IE5VTDsgICAgICAgICAgICAg LyogUmVtb3ZlIGZpbmFsICc+JyAqLworICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJhYWNvbnZl cnQiLHMrMSxpKTsKKyAgICAgICAgICAgICAgbWFrZXN0cigmKGFwW2ldKSxzKzEpOyAgICAvKiBT ZXQgZmlyc3QgYXJyYXkgdG8gaW5kZXggKi8KKyAgICAgICAgICAgICAgaWYgKHZwKQorICAgICAg ICAgICAgICAgIG1ha2VzdHIoJih2cFtpXSksbWFjdGFiW2ZpcnN0XS5tdmFsKTsgLyogMm5kIHRv IHZhbHVlICovCisgICAgICAgICAgICAgIGlmICh4ZGVsbWFjKGZpcnN0KSA8IDApCisgICAgICAg ICAgICAgICAgZ290byBmbmVuZDsKKyAgICAgICAgICAgICAgaSsrOworICAgICAgICAgIH0KKyAg ICAgICAgICBzcHJpbnRmKGZudmFsLCIlZCIsayk7ICAgICAgICAvKiBTQUZFICovCisgICAgICAg ICAgcCA9IGZudmFsOyAgICAgICAgICAgICAgICAgICAgLyogUmV0dXJuIHNpemUgb2YgYXJyYXkg Ki8KKyAgICAgICAgICBkZWJ1ZyhGMTEwLCJhYWNvbnZlcnQgcmV0dXJuIixwLDApOworICAgICAg ICAgIGZhaWxlZCA9IDA7ICAgICAgICAgICAgICAgICAgIC8qIFVuc2V0IGZhaWx1cmUgZmxhZyAq LworICAgICAgICAgIGdvdG8gZm5lbmQ7CisgICAgICB9CisKKyAgICB9IC8qIEVuZCBvZiBzd2l0 Y2goKSAqLworCisjaWZkZWYgRk5GTE9BVAorLyoKKyAgRmxvYXRpbmctcG9pbnQgZnVuY3Rpb25z LiAgVG8gYmUgaW5jbHVkZWQgb25seSBpZiBGTkZMT0FUIGlzIGRlZmluZWQsIHdoaWNoCisgIHNo b3VsZCBoYXBwZW4gb25seSBpZiBDS0ZMT0FUIGlzIGFsc28gZGVmaW5lZCwgYW5kIGlmIHRoZSBt YXRoIGxpYnJhcnkgaXMKKyAgbGlua2VkIGluLiAgRXZlbiB0aGVuLCB3ZSBtaWdodCBoYXZlIGZs b2F0LXZzLWRvdWJsZSBjb25mdXNpb24gYXMgd2VsbCBhcworICBjb25mdXNpb24gYWJvdXQgd2hh dCB0aGUgZmluYWwgIiVmIiBmb3JtYXQgZWZmZWN0b3IgaXMgc3VwcG9zZWQgdG8gcmVmZXJlbmNl CisgICgzMiBiaXRzLCA2NCBiaXRzLCBldGMpLiAgRXhwZWN0IHRyb3VibGUgaWYgQ0tGTE9BVCBk b2VzIG5vdCBtYXRjaCB0aGUgZGF0YQorICB0eXBlIG9mIG1hdGggbGlicmFyeSBmdW5jdGlvbnMg b3IgYXJncy4KKyovCisgICAgaWYgKGN4ID09IEZOX0ZQQUJTIHx8ICAgICAgICAgICAgICAgLyog RmxvYXRpbmctcG9pbnQgZnVuY3Rpb25zICovCisgICAgICAgIGN4ID09IEZOX0ZQQUREIHx8Cisg ICAgICAgIGN4ID09IEZOX0ZQRElWIHx8CisgICAgICAgIGN4ID09IEZOX0ZQRVhQIHx8CisgICAg ICAgIGN4ID09IEZOX0ZQTE9HIHx8CisgICAgICAgIGN4ID09IEZOX0ZQTE4gIHx8CisgICAgICAg IGN4ID09IEZOX0ZQTU9EIHx8CisgICAgICAgIGN4ID09IEZOX0ZQTUFYIHx8CisgICAgICAgIGN4 ID09IEZOX0ZQTUlOIHx8CisgICAgICAgIGN4ID09IEZOX0ZQTVVMIHx8CisgICAgICAgIGN4ID09 IEZOX0ZQUE9XIHx8CisgICAgICAgIGN4ID09IEZOX0ZQU1FSIHx8CisgICAgICAgIGN4ID09IEZO X0ZQSU5UIHx8CisgICAgICAgIGN4ID09IEZOX0ZQU1VCIHx8CisgICAgICAgIGN4ID09IEZOX0ZQ Uk9VIHx8CisgICAgICAgIGN4ID09IEZOX0ZQU0lOIHx8CisgICAgICAgIGN4ID09IEZOX0ZQQ09T IHx8CisgICAgICAgIGN4ID09IEZOX0ZQVEFOKSB7CisgICAgICAgIENLRkxPQVQgZmFyZ1syXSwg ZnByZXN1bHQgPSAwLjA7CisgICAgICAgIGNoYXIgZnBidWZbNjRdLCAqIGJwMDsKKyAgICAgICAg ZG91YmxlIGR1bW15OworICAgICAgICAvKiBpbnQgc2lnbiA9IDA7ICovCisgICAgICAgIGludCBp LCBqLCBwbGFjZXMgPSAwOworICAgICAgICBpbnQgYXJnY291bnQgPSAxOworCisgICAgICAgIGZh aWxlZCA9IDE7CisgICAgICAgIHAgPSBmbnZhbDsKKyAgICAgICAgYnAwID0gYnBbMF07CisgICAg ICAgIGlmICghYnAwKQorICAgICAgICAgIGJwMCA9ICIwIjsKKyAgICAgICAgZWxzZSBpZiAoISpi cDApCisgICAgICAgICAgYnAwID0gIjAiOworICAgICAgICBpZiAoIWlzZmxvYXQoYnAwLDApKSB7 CisgICAgICAgICAgICBrID0gbXhsb29rKG1hY3RhYixicDAsbm1hYyk7CisgICAgICAgICAgICBi cDAgPSAoayA+IC0xKSA/IG1hY3RhYltrXS5tdmFsIDogTlVMTDsKKyAgICAgICAgICAgIGlmIChi cDApIHsKKyAgICAgICAgICAgICAgICBpZiAoIWlzZmxvYXQoYnAwLDApKSB7CisgICAgICAgICAg ICAgICAgICAgIGlmIChmbmRpYWdzKQorICAgICAgICAgICAgICAgICAgICAgIGNrbWFrbXNnKGZu dmFsLEZOVkFMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPEVSUk9SOkFSR19O T1RfRkxPQVQ6XFxmIixmbiwiKCk+IixOVUxMKTsKKyAgICAgICAgICAgICAgICAgICAgZ290byBm bmVuZDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg ICAgaWYgKGN4ID09IEZOX0ZQSU5UKSB7ICAgICAgICAgICAvKiBGbG9hdCB0byBpbnQgKi8KKyAg ICAgICAgICAgIGZhaWxlZCA9IDA7CisgICAgICAgICAgICBja3N0cm5jcHkoZm52YWwsYnAwLEZO VkFMTCk7CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBmbnZhbFtpXTsgaSsrKSB7CisgICAgICAg ICAgICAgICAgaWYgKGZudmFsW2ldID09ICcuJykgeworICAgICAgICAgICAgICAgICAgICBmbnZh bFtpXSA9IE5VTDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg fQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZ290byBmbmVuZDsKKyAgICAgICAgfQorICAg ICAgICBzd2l0Y2ggKHkpIHsgICAgICAgICAgICAgICAgICAgIC8qIFRoZXNlIG5lZWQgMiBhcmdz ICovCisgICAgICAgICAgY2FzZSBGTl9GUEFERDoKKyAgICAgICAgICBjYXNlIEZOX0ZQRElWOgor ICAgICAgICAgIGNhc2UgRk5fRlBNT0Q6CisgICAgICAgICAgY2FzZSBGTl9GUE1BWDoKKyAgICAg ICAgICBjYXNlIEZOX0ZQTUlOOgorICAgICAgICAgIGNhc2UgRk5fRlBNVUw6CisgICAgICAgICAg Y2FzZSBGTl9GUFBPVzoKKyAgICAgICAgICBjYXNlIEZOX0ZQU1VCOgorICAgICAgICAgICAgYXJn Y291bnQgPSAyOworICAgICAgICB9CisgICAgICAgIC8qIE1pc3NpbmcgYXJndW1lbnRzIGFyZSBz dXBwbGllZCBhcyAwLjAgKi8KKworICAgICAgICBkZWJ1ZyhGMTExLGZuLCJhcmdjb3VudCIsYXJn Y291bnQpOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYXJnY291bnQ7IGkrKykgeyAvKiBHZXQg ZmxvYXRpbmctcG9pbnQgYXJncyAqLworI2lmZGVmIERFQlVHCisgICAgICAgICAgICBpZiAoZGVi bG9nKSB7CisgICAgICAgICAgICAgICAgY2ttYWttc2coZnBidWYsCisgICAgICAgICAgICAgICAg ICAgICAgICAgNjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgImJwWyIsCisgICAgICAgICAg ICAgICAgICAgICAgICAgY2tpdG9hKGkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGJwW2ld ID8gYnBbaV0gOiAiKG51bGwpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiXSIKKyAgICAg ICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgIGRlYnVnKEYxMDAsZnBidWYs IiIsMCk7CisgICAgICAgICAgICB9CisjZW5kaWYgLyogREVCVUcgKi8KKyAgICAgICAgICAgIGlm ICghYnBbaV0pIHsKKyAgICAgICAgICAgICAgICBmYXJnW2ldID0gMC4wOworICAgICAgICAgICAg fSBlbHNlIGlmICghKihicFtpXSkpIHsKKyAgICAgICAgICAgICAgICBmYXJnW2ldID0gMC4wOwor ICAgICAgICAgICAgfSBlbHNlIGlmICghaXNmbG9hdChicFtpXSwwKSkgeworICAgICAgICAgICAg ICAgIGNoYXIgKiB0bXA7CisgICAgICAgICAgICAgICAgayA9IG14bG9vayhtYWN0YWIsYnBbaV0s bm1hYyk7CisgICAgICAgICAgICAgICAgdG1wID0gKGsgPiAtMSkgPyBtYWN0YWJba10ubXZhbCA6 IE5VTEw7CisgICAgICAgICAgICAgICAgaWYgKHRtcCkgeworICAgICAgICAgICAgICAgICAgICBp ZiAoIWlzZmxvYXQodG1wLDApKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm5kaWFn cykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2ttYWttc2coZm52YWwsRk5WQUxMLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPEVSUk9SOkFSR19OT1RfRkxPQVQ6XFxm IixmbiwiKCk+IixOVUxMKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZm5lbmQ7Cisg ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg ICAgICAgICAgICBmYXJnW2ldID0gZmxvYXR2YWw7CisKKyNpZmRlZiBERUJVRworICAgICAgICAg ICAgaWYgKGRlYmxvZykgeworICAgICAgICAgICAgICAgIHNwcmludGYoZnBidWYsImZhcmdbJWRd PSVmIixpLGZhcmdbaV0pOyAvKiBTQUZFICovCisgICAgICAgICAgICAgICAgZGVidWcoRjEwMCxm cGJ1ZiwiIiwwKTsKKyAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBERUJVRyAqLworICAgICAgICB9 CisgICAgICAgIGlmIChicFthcmdjb3VudF0pIHsgICAgICAgICAgICAgLyogR2V0IGRlY2ltYWwg cGxhY2VzICovCisgICAgICAgICAgICBjaGFyICogczsKKyAgICAgICAgICAgIHMgPSBicFthcmdj b3VudF07CisgICAgICAgICAgICBpZiAoIXMpIHMgPSAiIjsKKyAgICAgICAgICAgIGlmICghKnMp IHMgPSAiMCI7CisgICAgICAgICAgICBzID0gZXZhbHgocyk7CisgICAgICAgICAgICBpZiAoIXMp IHMgPSAiIjsKKyAgICAgICAgICAgIGlmICghKnMpIHsKKyAgICAgICAgICAgICAgICBldmFsZXJy KGZuKTsKKyAgICAgICAgICAgICAgICBnb3RvIGZuZW5kOworICAgICAgICAgICAgfQorICAgICAg ICAgICAgcGxhY2VzID0gYXRvaShzKTsKKyAgICAgICAgfQorICAgICAgICBlcnJubyA9IDA7Cisg ICAgICAgIGZhaWxlZCA9IDA7CisgICAgICAgIHN3aXRjaCAoeSkgeyAgICAgICAgICAgICAgICAg ICAgLyogTm93IGRvIHRoZSByZXF1ZXN0ZWQgZnVuY3Rpb24gKi8KKyAgICAgICAgICBjYXNlIEZO X0ZQQUJTOiAgICAgICAgICAgICAgICAvKiBGbG9hdGluZy1wb2ludCBhYnNvbHV0ZSB2YWx1ZSAq LworI2lmbmRlZiBDT01NRU5UCisgICAgICAgICAgICBmcHJlc3VsdCA9IGZhYnMoZmFyZ1swXSk7 CisjZWxzZQorICAgICAgICAgICAgaWYgKGZhcmdbMF0gPCAwLjApCisgICAgICAgICAgICAgIGZw cmVzdWx0ID0gMC4wIC0gZmFyZ1swXTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgICBjYXNlIEZOX0ZQQUREOiAgICAgICAgICAgICAgICAvKiBGUCBh ZGQgKi8KKyAgICAgICAgICAgIGZwcmVzdWx0ID0gZmFyZ1swXSArIGZhcmdbMV07CisgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEZOX0ZQRElWOiAgICAgICAgICAgICAgICAvKiBG UCBkaXZpZGUgKi8KKyAgICAgICAgICBjYXNlIEZOX0ZQTU9EOiAgICAgICAgICAgICAgICAvKiBG UCBtb2R1bHVzICovCisgICAgICAgICAgICBpZiAoIWZhcmdbMV0pIHsKKyAgICAgICAgICAgICAg ICBmYWlsZWQgPSAxOworICAgICAgICAgICAgICAgIGlmIChmbmRpYWdzKQorICAgICAgICAgICAg ICAgICAgY2ttYWttc2coZm52YWwsRk5WQUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg IjxFUlJPUjpESVZJREVfQllfWkVSTzpcXGYiLGZuLCIoKT4iLE5VTEwpOworICAgICAgICAgICAg fSBlbHNlCisgICAgICAgICAgICAgIGZwcmVzdWx0ID0gKGN4ID09IEZOX0ZQRElWKSA/CisgICAg ICAgICAgICAgICAgKGZhcmdbMF0gLyBmYXJnWzFdKSA6CisgICAgICAgICAgICAgICAgICBmbW9k KGZhcmdbMF0sZmFyZ1sxXSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEZO X0ZQRVhQOiAgICAgICAgICAgICAgICAvKiBGUCBlIHRvIHRoZSB4ICovCisgICAgICAgICAgICBm cHJlc3VsdCA9IChDS0ZMT0FUKSBleHAoZmFyZ1swXSk7CisgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgICBjYXNlIEZOX0ZQTE9HOiAgICAgICAgICAgICAgICAvKiBGUCBiYXNlLTEwIGxvZ2Fy aXRobSAqLworICAgICAgICAgIGNhc2UgRk5fRlBMTjogICAgICAgICAgICAgICAgIC8qIEZQIG5h dHVyYWwgbG9nYXJpdGhtICovCisgICAgICAgICAgICBpZiAoZmFyZ1swXSA8IDAuMCkgeworICAg ICAgICAgICAgICAgIGZhaWxlZCA9IDE7CisgICAgICAgICAgICAgICAgaWYgKGZuZGlhZ3MpCisg ICAgICAgICAgICAgICAgICBja21ha21zZyhmbnZhbCxGTlZBTEwsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAiPEVSUk9SOkFSR19PVVRfT0ZfUkFOR0U6XFxmIixmbiwiKCk+IixOVUxMKTsK KyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICBmcHJlc3VsdCA9IChjeCA9PSBGTl9G UExPRykgPyBsb2cxMChmYXJnWzBdKSA6IGxvZyhmYXJnWzBdKTsKKyAgICAgICAgICAgIGJyZWFr OworICAgICAgICAgIGNhc2UgRk5fRlBNVUw6ICAgICAgICAgICAgICAgIC8qIEZQIG11bHRpcGx5 ICovCisgICAgICAgICAgICBmcHJlc3VsdCA9IGZhcmdbMF0gKiBmYXJnWzFdOworICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBGTl9GUFBPVzogICAgICAgICAgICAgICAgLyogRlAg cmFpc2UgdG8gYSBwb3dlciAqLworICAgICAgICAgICAgZnByZXN1bHQgPSBtb2RmKGZhcmdbMV0s JmR1bW15KTsKKyAgICAgICAgICAgIGlmICgoIWZhcmdbMF0gJiYgZmFyZ1sxXSA8PSAwLjApIHx8 CisgICAgICAgICAgICAgICAgKGZhcmdbMF0gPCAwLjAgJiYgZnByZXN1bHQpKSB7CisgICAgICAg ICAgICAgICAgZmFpbGVkID0gMTsKKyAgICAgICAgICAgICAgICBpZiAoZm5kaWFncykKKyAgICAg ICAgICAgICAgICAgIGNrbWFrbXNnKGZudmFsLEZOVkFMTCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICI8RVJST1I6QVJHX09VVF9PRl9SQU5HRTpcXGYiLGZuLCIoKT4iLE5VTEwpOworICAg ICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgIGZwcmVzdWx0ID0gcG93KGZhcmdbMF0sZmFy Z1sxXSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEZOX0ZQU1FSOiAgICAg ICAgICAgICAgICAvKiBGUCBzcXVhcmUgcm9vdCAqLworICAgICAgICAgICAgaWYgKGZhcmdbMF0g PCAwLjApIHsKKyAgICAgICAgICAgICAgICBmYWlsZWQgPSAxOworICAgICAgICAgICAgICAgIGlm IChmbmRpYWdzKQorICAgICAgICAgICAgICAgICAgY2ttYWttc2coZm52YWwsRk5WQUxMLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgIjxFUlJPUjpBUkdfT1VUX09GX1JBTkdFOlxcZiIsZm4s IigpPiIsTlVMTCk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgZnByZXN1bHQg PSBzcXJ0KGZhcmdbMF0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBGTl9G UFNVQjogICAgICAgICAgICAgICAgLyogRlAgc3VidHJhY3QgKi8KKyAgICAgICAgICAgIGZwcmVz dWx0ID0gZmFyZ1swXSAtIGZhcmdbMV07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBj YXNlIEZOX0ZQUk9VOiAgICAgICAgICAgICAgICAvKiBGUCByb3VuZCAqLworICAgICAgICAgICAg ZnByZXN1bHQgPSBmYXJnWzBdOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBG Tl9GUFNJTjogICAgICAgICAgICAgICAgLyogRlAgc2luZSAqLworICAgICAgICAgICAgZnByZXN1 bHQgPSAoQ0tGTE9BVCkgc2luKGZhcmdbMF0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg ICAgY2FzZSBGTl9GUENPUzogICAgICAgICAgICAgICAgLyogRlAgY29zaW5lICovCisgICAgICAg ICAgICBmcHJlc3VsdCA9IChDS0ZMT0FUKSBjb3MoZmFyZ1swXSk7CisgICAgICAgICAgICBicmVh azsKKyAgICAgICAgICBjYXNlIEZOX0ZQVEFOOiAgICAgICAgICAgICAgICAvKiBGUCB0YW5nZW50 ICovCisgICAgICAgICAgICBmcHJlc3VsdCA9IChDS0ZMT0FUKSB0YW4oZmFyZ1swXSk7CisgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEZOX0ZQTUFYOgorICAgICAgICAgICAgZnBy ZXN1bHQgPSAoZmFyZ1swXSA+IGZhcmdbMV0pID8gZmFyZ1swXSA6IGZhcmdbMV07CisgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEZOX0ZQTUlOOgorICAgICAgICAgICAgZnByZXN1 bHQgPSAoZmFyZ1swXSA8IGZhcmdbMV0pID8gZmFyZ1swXSA6IGZhcmdbMV07CisgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8qIEdldCBoZXJlIHdpdGggZnByZXN1bHQg PSBmdW5jdGlvbiByZXN1bHQgKi8KKworICAgICAgICBpZiAoZXJybm8pIHsgICAgICAgICAgICAg ICAgICAgIC8qIElmIHJhbmdlIG9yIGRvbWFpbiBlcnJvciAqLworICAgICAgICAgICAgZmFpbGVk ID0gMTsKKyAgICAgICAgICAgIGlmIChmbmRpYWdzKQorICAgICAgICAgICAgICBja21ha21zZyhm bnZhbCxGTlZBTEwsCisgICAgICAgICAgICAgICAgICAgICAgICI8RVJST1I6RkxPQVRJTkctUE9J TlQtT1A6XFxmIixmbiwiKCk+IixOVUxMKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZmFpbGVk KSAgICAgICAgICAgICAgICAgICAgIC8qIGFuZC9vciBhbnkgb3RoZXIga2luZCBvZiBlcnJvciwg Ki8KKyAgICAgICAgICBnb3RvIGZuZW5kOyAgICAgICAgICAgICAgICAgICAvKiBmYWlsLiAqLwor I2lmbmRlZiBDT01NRU5UCisgICAgICAgIC8qIENhbGwgcm91dGluZSBjb250YWluaW5nIGNvZGUg dGhhdCB3YXMgZm9ybWVybHkgaW5saW5lICovCisgICAgICAgIGNrc3RybmNweShmbnZhbCxmcGZv cm1hdChmcHJlc3VsdCxwbGFjZXMsY3ggPT0gRk5fRlBST1UpLEZOVkFMTCk7CisjZWxzZQorICAg ICAgICB7CisgICAgICAgICAgICBjaGFyIGZidWZbMTZdOyAgICAgICAgICAgICAgLyogRm9yIGNy ZWF0aW5nIHByaW50ZiBmb3JtYXQgKi8KKyAgICAgICAgICAgIGlmICghZnBfcm91bmRpbmcgJiYg ICAgICAgICAvKiBJZiBwcmludGYgZG9lc24ndCByb3VuZCwgKi8KKyAgICAgICAgICAgICAgICAo cGxhY2VzID4gMCB8fCAgICAgICAgICAvKiByb3VuZCByZXN1bHQgdG8gZGVjaW1hbCBwbGFjZXMu ICovCisgICAgICAgICAgICAgICAgIChwbGFjZXMgPT0gMCAmJiBjeCA9PSBGTl9GUFJPVSkpKQor ICAgICAgICAgICAgICBmcHJlc3VsdCArPSAoMC41IC8gcG93KDEwLjAsKENLRkxPQVQpcGxhY2Vz KSk7CisgICAgICAgICAgICBpZiAocGxhY2VzID4gMCkgeyAgICAgICAgICAgICAgICAgICAvKiBJ ZiBwbGFjZXMgc3BlY2lmaWVkICovCisgICAgICAgICAgICAgICAgLyogdXNlIHNwZWNpZmllZCBw bGFjZXMgdG8gd3JpdGUgZ2l2ZW4gbnVtYmVyIG9mIGRpZ2l0cyAqLworICAgICAgICAgICAgICAg IHNwcmludGYoZmJ1ZiwiJSUwLiVkZiIscGxhY2VzKTsgLyogU0FGRSAqLworICAgICAgICAgICAg ICAgIHNwcmludGYoZm52YWwsZmJ1ZixmcHJlc3VsdCk7ICAgLyogU0FGRSAqLworICAgICAgICAg ICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogT3RoZXJ3aXNlLi4uICov CisjaWZkZWYgQ09NTUVOVAorLyoKKyAgSGVyZSB3ZSB3YW50IHRvIHByaW50IGV4YWN0bHkgZnBf ZGlnaXRzIHNpZ25pZmljYW50IGRpZ2l0cywgbm8gbWF0dGVyIHdoaWNoCisgIHNpZGUgb2YgdGhl IGRlY2ltYWwgcG9pbnQgdGhleSBhcmUgb24uICBUaGF0IGlzLCB3ZSB3YW50IHdhbnQgdGhlIGRl ZmF1bHQKKyAgZm9ybWF0IHRvIHNob3cgdGhlIG1heGltdW0gbnVtYmVyIG9mIG5vbi1nYXJiYWdl IGRpZ2l0cywgQU5EIHdlIHdhbnQgdGhlIGxhc3QKKyAgc3VjaCBkaWdpdCB0byBiZSByb3VuZGVk LiAgT2YgY291cnNlIHRoZXJlIGlzIG5vIHdheSB0byBkbyB0aGF0LCBzaW5jZSB0aGUKKyAgZGln aXQgYWZ0ZXIgdGhlIGxhc3Qgbm9uLWdhcmJhZ2UgZGlnaXQgaXMsIHdlbGwsIGdhcmJhZ2UuICBT byB0aGUgZm9sbG93aW5nCisgIGNsZXZlciBydXNlIGRvZXMgbm8gZ29vZC4KKyovCisgICAgICAg ICAgICAgICAgaW50IHNpZ24gPSAwLCBtID0gMDsKKyAgICAgICAgICAgICAgICBzcHJpbnRmKGZu dmFsLCIlZiIsZnByZXN1bHQpOworICAgICAgICAgICAgICAgIGlmIChmbnZhbFswXSA9PSAnLScp IHNpZ24gPSAxOworICAgICAgICAgICAgICAgIGZvciAoaSA9IHNpZ247IGkgPCBGTlZBTEw7IGkr KykgeworICAgICAgICAgICAgICAgICAgICBpZiAoaXNkaWdpdChmbnZhbFtpXSkpCisgICAgICAg ICAgICAgICAgICAgICAgbSsrOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlm IChtID4gMSkgeworICAgICAgICAgICAgICAgICAgICBpbnQgZCA9IGZwX2RpZ2l0cyAtIG07Cisg ICAgICAgICAgICAgICAgICAgIGlmIChkIDwgMSkgZCA9IDE7CisgICAgICAgICAgICAgICAgICAg IHNwcmludGYoZmJ1ZiwiJSUlZC4lZGYiLGZwX2RpZ2l0cytzaWduKzEsZCk7CisgICAgICAgICAg ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgc3ByaW50ZihmYnVmLCIlJTAuJWRm IixmcF9kaWdpdHMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzcHJpbnRm KGZudmFsLGZidWYsZnByZXN1bHQpOworI2Vsc2UKKyAgICAgICAgICAgICAgICAvKiBHbyBmb3Ig bWF4IHByZWNpc2lvbiAqLworICAgICAgICAgICAgICAgIHNwcmludGYoZmJ1ZiwiJSUwLiVkZiIs ZnBfZGlnaXRzKTsgLyogU0FGRSAqLworICAgICAgICAgICAgICAgIHNwcmludGYoZm52YWwsZmJ1 ZixmcHJlc3VsdCk7IC8qIFNBRkUgKi8KKworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAg ICAgIH0KKyAgICAgICAgICAgIGlmIChmbnZhbFswXSA9PSAnLScpIHNpZ24gPSAxOworICAgICAg ICB9CisgICAgICAgIGRlYnVnKEYxMTEsImZwcmVzdWx0IDEiLGZudmFsLGVycm5vKTsgLyogQ2hl Y2sgZm9yIG92ZXIvdW5kZXJmbG93ICovCisgICAgICAgIGZvciAoaSA9IHNpZ247IGZudmFsW2ld OyBpKyspIHsgLyogR2l2ZSByZXF1ZXN0ZWQgZGVjaW1hbCBwbGFjZXMgKi8KKyAgICAgICAgICAg IGlmIChmbnZhbFtpXSA9PSAnLicpICAgICAgICAvKiBGaXJzdCBmaW5kIHRoZSBkZWNpbWFsIHBv aW50ICovCisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZWxzZSBpZiAoaSA+IGZw X2RpZ2l0cyArIHNpZ24gLSAxKSAvKiByZXBsYWNpbmcgZ2FyYmFnZSAqLworICAgICAgICAgICAg ICBmbnZhbFtpXSA9ICcwJzsgICAgICAgICAgIC8qIGRpZ2l0cyB3aXRoIDAuLi4gKi8KKyAgICAg ICAgfQorICAgICAgICBpZiAoZm52YWxbaV0gPT0gJy4nKSB7ICAgICAgICAgIC8qIEhhdmUgZGVj aW1hbCBwb2ludCAqLworICAgICAgICAgICAgaW50IGdvdGVuZCA9IDA7CisgICAgICAgICAgICAv KiBkIDwgMCBzbyB0cnVuY2F0ZSBmcmFjdGlvbiAqLworICAgICAgICAgICAgaWYgKHBsYWNlcyA8 IDAgfHwgKHBsYWNlcyA9PSAwICYmIGN4ID09IEZOX0ZQUk9VKSkgeworICAgICAgICAgICAgICAg IGZudmFsW2ldID0gTlVMOworICAgICAgICAgICAgfSBlbHNlIGlmIChwbGFjZXMgPiAwKSB7ICAg IC8qIGQgPiAwIHNvIHRoaXMgbWFueSBkZWNpbWFsIHBsYWNlcyAqLworICAgICAgICAgICAgICAg IGkrKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGaXJzdCBkaWdpdCBhZnRlciBkZWNp bWFsICovCisgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHBsYWNlczsgaisrKSB7IC8q IFRydW5jYXRlIGFmdGVyIGQgZGVjaW1hbCAqLworICAgICAgICAgICAgICAgICAgICBpZiAoIWZu dmFsW2oraV0pICAgICAgICAgICAvKiBwbGFjZXMgb3IgZXh0ZW5kIHRvIGQgICovCisgICAgICAg ICAgICAgICAgICAgICAgZ290ZW5kID0gMTsgICAgICAgICAgICAgIC8qIGRlY2ltYWwgcGxhY2Vz LiAqLworICAgICAgICAgICAgICAgICAgICBpZiAoZ290ZW5kIHx8IGoraStzaWduID4gZnBfZGln aXRzKQorICAgICAgICAgICAgICAgICAgICAgIGZudmFsW2oraV0gPSAnMCc7CisgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICAgIGZudmFsW2oraV0gPSBOVUw7CisgICAgICAgICAgICB9 IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgLyogZCA9PSAwIHNvIERvIFRoZSBSaWdodCBUaGlu ZyAqLworICAgICAgICAgICAgICAgIGZvciAoaiA9IChpbnQpc3RybGVuKGZudmFsKSAtIDE7IGog PiBpKzE7IGotLSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoKGogLSBzaWduKSA+IGZwX2Rp Z2l0cykKKyAgICAgICAgICAgICAgICAgICAgICBmbnZhbFtqXSA9ICcwJzsKKyAgICAgICAgICAg ICAgICAgICAgaWYgKGZudmFsW2pdID09ICcwJykKKyAgICAgICAgICAgICAgICAgICAgICBmbnZh bFtqXSA9IE5VTDsgICAvKiBTdHJpcCB1c2VsZXNzIHRyYWlsaW5nIDAncy4gKi8KKyAgICAgICAg ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorI2VuZGlmIC8qIENPTU1FTlQgKi8K KyAgICAgICAgZGVidWcoRjExMSwiZnByZXN1bHQgMiIsZm52YWwsZXJybm8pOworICAgICAgICBn b3RvIGZuZW5kOworCisgICAgfQorI2VuZGlmIC8qIEZORkxPQVQgKi8KKworI2lmZGVmIENLQ0hB Tk5FTElPCisgICAgaWYgKGN4ID09IEZOX0ZTVEFUICB8fCAgICAgICAgICAgICAgLyogRmlsZSBm dW5jdGlvbnMgKi8KKyAgICAgICAgY3ggPT0gRk5fRlBPUyAgIHx8CisgICAgICAgIGN4ID09IEZO X0ZFT0YgICB8fAorICAgICAgICBjeCA9PSBGTl9GR0NIQVIgfHwKKyAgICAgICAgY3ggPT0gRk5f RkdMSU5FIHx8CisgICAgICAgIGN4ID09IEZOX0ZHQkxLICB8fAorICAgICAgICBjeCA9PSBGTl9G UENIQVIgfHwKKyAgICAgICAgY3ggPT0gRk5fRlBMSU5FIHx8CisgICAgICAgIGN4ID09IEZOX0ZQ QkxLICB8fAorICAgICAgICBjeCA9PSBGTl9OTElORSAgfHwKKyAgICAgICAgY3ggPT0gRk5fRkVS TVNHIHx8CisgICAgICAgIGN4ID09IEZOX0ZJTE5PKSB7CisgICAgICAgIGludCB4ID0gMCwgdCA9 IDAsIGNoYW5uZWw7CisgICAgICAgIGxvbmcgejsKKyAgICAgICAgZXh0ZXJuIGludCB6X21heGNo YW47CisKKyAgICAgICAgZmFpbGVkID0gMTsgICAgICAgICAgICAgICAgICAgICAvKiBBc3N1bWUg ZmFpbHVyZSAqLworICAgICAgICBwID0gZm52YWw7ICAgICAgICAgICAgICAgICAgICAgIC8qIHVu dGlsIHdlIHZhbGlkYXRlIGFyZ3MgKi8KKyAgICAgICAgaWYgKGN4ID09IEZOX0ZFUk1TRykgewor ICAgICAgICAgICAgZXh0ZXJuIGludCB6X2Vycm9yOworICAgICAgICAgICAgaWYgKGFyZ24gPCAx KSB7CisgICAgICAgICAgICAgICAgeCA9IHpfZXJyb3I7CisgICAgICAgICAgICB9IGVsc2UgaWYg KGNoa251bShicFswXSkpIHsKKyAgICAgICAgICAgICAgICB4ID0gYXRvaShicFswXSk7CisgICAg ICAgICAgICB9IGVsc2UgaWYgKGZuZGlhZ3MpCisgICAgICAgICAgICAgIGNrbWFrbXNnKGZudmFs LEZOVkFMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgIjxFUlJPUjpBUkdfTk9UX05VTUVSSUM6 XFxmIixmbiwiKCk+IixOVUxMKTsKKyAgICAgICAgICAgIGZhaWxlZCA9IDA7CisgICAgICAgICAg ICBja3N0cm5jcHkoZm52YWwsY2tmZXJyb3IoeCksRk5WQUxMKTsKKyAgICAgICAgICAgIGdvdG8g Zm5lbmQ7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGFyZ24gPCAxKSB7ICAgICAgICAgICAgICAg ICAvKiBBbGwgZmlsZSBmdW5jdGlvbnMgbmVlZCBjaGFubmVsICovCisJICAgIGlmIChjeCA9PSBG Tl9GU1RBVCkgewkvKiBFeGNlcHQgZl9zdGF0dXMoKSwgZS5nLiB3aGVuICovCisJCWZudmFsWzBd ID0gJzAnOwkJLyogY2FsbGVkIHdpdGggYSB2YXJpYWJsZSB0aGF0ICovCisJCWZudmFsWzFdID0g TlVMOwkJLyogaGFzbid0IGJlZW4gZGVmaW5lZCB5ZXQuICovCisJCWZhaWxlZCA9IDA7CisJICAg IH0gZWxzZSB7CisJCWlmIChmbmRpYWdzKQorCQkgY2ttYWttc2coZm52YWwsRk5WQUxMLCI8RVJS T1I6TUlTU0lOR19BUkc6XFxmIixmbiwiKCk+IixOVUxMKTsKKwkgICAgfQorICAgICAgICAgICAg Z290byBmbmVuZDsKKyAgICAgICAgfQorICAgICAgICBpZiAocmRpZ2l0cyhicFswXSkpIHsgICAg ICAgICAgIC8qIENoYW5uZWwgbXVzdCBiZSBudW1lcmljICovCisgICAgICAgICAgICBjaGFubmVs ID0gYXRvaShicFswXSk7CisgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAg LyogRmFpbCBpZiBpdCBpc24ndCAqLworICAgICAgICAgICAgaWYgKGZuZGlhZ3MpCisgICAgICAg ICAgICAgIGNrbWFrbXNnKGZudmFsLEZOVkFMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgIjxF UlJPUjpBUkdfTk9UX05VTUVSSUM6XFxmIixmbiwiKCk+IixOVUxMKTsKKyAgICAgICAgICAgIGdv dG8gZm5lbmQ7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNoYW5uZWwgPCAwIHx8IGNoYW5uZWwg PiB6X21heGNoYW4pIHsgLyogQ2hlY2sgY2hhbm5lbCByYW5nZSAqLworICAgICAgICAgICAgaWYg KGZuZGlhZ3MpCisgICAgICAgICAgICAgIGNrbWFrbXNnKGZudmFsLEZOVkFMTCwKKyAgICAgICAg ICAgICAgICAgICAgICAgIjxFUlJPUjpBUkdfT1VUX09GX1JBTkdFOlxcZiIsZm4sIigpPiIsTlVM TCk7CisgICAgICAgICAgICBnb3RvIGZuZW5kOworICAgICAgICB9CisgICAgICAgIHggPSB6X2dl dG1vZGUoY2hhbm5lbCk7ICAgICAgICAgLyogRmluZCBvdXQgYWJvdXQgdGhlIGNoYW5uZWwgKi8K KworICAgICAgICBmYWlsZWQgPSAwOyAgICAgICAgICAgICAgICAgICAgIC8qIEFzc3VtZSBzdWNj ZXNzIGZyb20gaGVyZSBkb3duICovCisgICAgICAgIGlmIChjeCA9PSBGTl9GU1RBVCkgeyAgICAg ICAgICAgLyogU3RhdHVzIC8gbW9kZXMgb2YgY2hhbm5lbCAqLworICAgICAgICAgICAgaWYgKHgg PiAtMSkKKyAgICAgICAgICAgICAgeCAmPSBGTV9SV0I7ICAgICAgICAgICAgICAvKiBNYXNrIG91 dCBpcnJlbGV2YW50IGJpdHMgKi8KKyAgICAgICAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAg ICAgICAvKiBJbiB0aGlzIGNhc2Ugbm90IG9wZW4gaXMgT0sgKi8KKyAgICAgICAgICAgICAgeCA9 IDA7ICAgICAgICAgICAgICAgICAgICAvKiAwIGlmIG5vdCBvcGVuLCAxLTcgaWYgb3BlbiAqLwor ICAgICAgICAgICAgc3ByaW50ZihmbnZhbCwiJWQiLHgpOyAgICAgIC8qIFNBRkUgKi8KKyAgICAg ICAgICAgIGdvdG8gZm5lbmQ7CisgICAgICAgIH0gZWxzZSBpZiAoeCA8IDEpIHsgICAgICAgICAg ICAgLyogTm90IFxmX3N0YXR1cygpIHNvIG11c3QgYmUgb3BlbiAqLworICAgICAgICAgICAgZmFp bGVkID0gMTsKKyAgICAgICAgICAgIGlmIChmbmRpYWdzKQorICAgICAgICAgICAgICBja21ha21z ZyhmbnZhbCxGTlZBTEwsIjxFUlJPUjpGSUxFX05PVF9PUEVOOlxcZiIsZm4sIigpPiIsTlVMTCk7 CisgICAgICAgICAgICBnb3RvIGZuZW5kOworICAgICAgICB9CisgICAgICAgIHN3aXRjaCAoeSkg eyAgICAgICAgICAgICAgICAgICAgLyogRG8gdGhlIHJlcXVlc3RlZCBmdW5jdGlvbiAqLworICAg ICAgICAgIGNhc2UgRk5fRlBPUzogICAgICAgICAgICAgICAgIC8qIEdldCBwb3NpdGlvbiAqLwor ICAgICAgICAgICAgeiA9IHpfZ2V0cG9zKGNoYW5uZWwpOwkvKiBGSVggVEhJUyAqLworICAgICAg ICAgICAgc3ByaW50ZihmbnZhbCwiJWxkIix6KTsgICAgIC8qIFNBRkUgKi8KKyAgICAgICAgICAg IGdvdG8gZm5lbmQ7CisKKyAgICAgICAgICBjYXNlIEZOX05MSU5FOiAgICAgICAgICAgICAgICAv KiBHZXQgbGluZSBudW1iZXIgKi8KKyAgICAgICAgICAgIHogPSB6X2dldGxpbmUoY2hhbm5lbCk7 CS8qIEZJWCBUSElTICovCisgICAgICAgICAgICBzcHJpbnRmKGZudmFsLCIlbGQiLHopOyAgICAg LyogU0FGRSAqLworICAgICAgICAgICAgZ290byBmbmVuZDsKKworICAgICAgICAgIGNhc2UgRk5f RkVPRjogICAgICAgICAgICAgICAgIC8qIENoZWNrIEVPRiAqLworICAgICAgICAgICAgdCA9IDA7 CisgICAgICAgICAgICBpZiAoeCAmIEZNX0VPRikgdCA9IDE7CisgICAgICAgICAgICBzcHJpbnRm KGZudmFsLCIlZCIsdCk7ICAgICAgLyogU0FGRSAqLworICAgICAgICAgICAgZ290byBmbmVuZDsK KworICAgICAgICAgIGNhc2UgRk5fRklMTk86ICAgICAgICAgICAgICAgIC8qIEdldCBmaWxlIGhh bmRsZSAqLworICAgICAgICAgICAgeCA9IHpfZ2V0Zm51bShjaGFubmVsKTsKKyAgICAgICAgICAg IHNwcmludGYoZm52YWwsIiVkIix4KTsgICAgICAvKiBTQUZFICovCisgICAgICAgICAgICBnb3Rv IGZuZW5kOworCisgICAgICAgICAgY2FzZSBGTl9GUEJMSzogICAgICAgICAgICAgICAgLyogUmVh ZCBvciB3cml0ZSBibG9jayAqLworICAgICAgICAgIGNhc2UgRk5fRkdCTEs6CisgICAgICAgICAg ICBpZiAoYXJnbiA8IDIpIHsKKyAgICAgICAgICAgICAgICBpZiAoZm5kaWFncykKKyAgICAgICAg ICAgICAgICAgIGNrbWFrbXNnKGZudmFsLEZOVkFMTCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICI8RVJST1I6TUlTU0lOR19BUkc6XFxmIixmbiwiKCk+IixOVUxMKTsKKyAgICAgICAgICAg ICAgICBnb3RvIGZuZW5kOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHJkaWdpdHMo YnBbMV0pKSB7CisgICAgICAgICAgICAgICAgdCA9IGF0b2koYnBbMV0pOworICAgICAgICAgICAg fSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoZm5kaWFncykKKyAgICAgICAgICAgICAgICAg IGNrbWFrbXNnKGZudmFsLEZOVkFMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICI8RVJS T1I6QVJHX05PVF9OVU1FUklDOlxcZiIsZm4sIigpPiIsTlVMTCk7CisgICAgICAgICAgICAgICAg Z290byBmbmVuZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBjYXNlIEZOX0ZHQ0hBUjogICAg ICAgICAgICAgICAvKiBSZWFkIG9yIHdyaXRlIGNoYXJhY3RlciBvciBsaW5lICovCisgICAgICAg ICAgY2FzZSBGTl9GUENIQVI6CisgICAgICAgICAgY2FzZSBGTl9GR0xJTkU6CisgICAgICAgICAg Y2FzZSBGTl9GUExJTkU6CisgICAgICAgICAgICBmbnZhbFswXSA9IE5VTDsKKyAgICAgICAgICAg IHN3aXRjaCAoeSkgeworICAgICAgICAgICAgICBjYXNlIEZOX0ZHQ0hBUjogdCA9IHpfaW4oY2hh bm5lbCxmbnZhbCxGTlZBTEwsMSwxKTsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRk5fRkdM SU5FOiB0ID0gel9pbihjaGFubmVsLGZudmFsLEZOVkFMTCxGTlZBTEwtMSwwKTsgYnJlYWs7Cisg ICAgICAgICAgICAgIGNhc2UgRk5fRkdCTEs6CisgICAgICAgICAgICAgICAgaWYgKHQgPj0gRk5W QUxMKSB0ID0gRk5WQUxMIC0gMTsKKyAgICAgICAgICAgICAgICB0ID0gel9pbihjaGFubmVsLGZu dmFsLEZOVkFMTCx0LDEpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBj YXNlIEZOX0ZQQ0hBUjogdCA9IHpfb3V0KGNoYW5uZWwsYnBbMV0sMSwxKTsgIGJyZWFrOworICAg ICAgICAgICAgICBjYXNlIEZOX0ZQTElORTogdCA9IHpfb3V0KGNoYW5uZWwsYnBbMV0sLTEsMCk7 IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEZOX0ZQQkxLOiAgdCA9IHpfb3V0KGNoYW5uZWws YnBbMV0sLTEsMSk7IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHQgPCAw KSB7ICAgICAgICAgICAgICAgIC8qIEhhbmRsZSByZWFkL3dyaXRlIGVycm9yICovCisgICAgICAg ICAgICAgICAgZmFpbGVkID0gMTsKKyAgICAgICAgICAgICAgICBpZiAoZm5kaWFncyAmJiB0ICE9 IEZYX0VPRikKKyAgICAgICAgICAgICAgICAgIGNrbWFrbXNnKGZudmFsLEZOVkFMTCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICI8RVJST1I6RklMRV9FUlJPUl8lZDpcXGYiLGZuLCIoKT4i LE5VTEwpOworICAgICAgICAgICAgICAgIGdvdG8gZm5lbmQ7CisgICAgICAgICAgICB9CisgICAg ICAgICAgICBpZiAoY3ggPT0gRk5fRkdDSEFSKSAgICAgICAgLyogTnVsbCB0ZXJtaW5hdGUgY2hh ciAqLworICAgICAgICAgICAgICBmbnZhbFsxXSA9IE5VTDsKKyAgICAgICAgICAgIC8qIFdyaXRl IChwdXQpIGZ1bmN0aW9ucyByZXR1cm4gbnVtZXJpYyBzdGF0dXMgY29kZSAqLworICAgICAgICAg ICAgaWYgKGN4ID09IEZOX0ZQQ0hBUiB8fCBjeCA9PSBGTl9GUExJTkUgfHwgY3ggPT0gRk5fRlBC TEspCisgICAgICAgICAgICAgIHNwcmludGYoZm52YWwsIiVkIix0KTsgICAgLyogU0FGRSAqLwor ICAgICAgICAgICAgZ290byBmbmVuZDsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBDS0NI QU5ORUxJTyAqLworCisgICAgaWYgKGN4ID09IEZOX1NRVUVFWkUpIHsJCS8qIFN0cmluZyBmdW5j dGlvbiBcZnNxdWVlemUoKSAqLworCS8qIFNxdWVlemUgb3V0IHdoaXRlc3BhY2UgKi8KKwkvKiBB ZGQgb3B0aW9ucyBsYXRlciBmb3Igd2hldGhlciB0byB0cmltIGxlYWRpbmcgYW5kIHRyYWlsaW5n IGJsYW5rcyAqLworICAgICAgICAvKiBhbmQgd2hhdCB0byBkbyBhYm91dCBjb250cm9sIGNoYXJh Y3RlcnMsIDgtYml0IHdoaXRlc3BhY2UsIGV0YyAqLworCWludCBzdGFydGVkID0gMDsJCS8qIEZs YWcgZm9yIGZpcnN0IG5vbi13aGl0ZXNwYWNlICovCisJaW50IG4gPSAwOwkJCS8qIEJsYW5rL1Rh YiBjb3VudGVyICovCisgICAgICAgIHMgPSBicFswXSA/IGJwWzBdIDogIiI7CisgICAgICAgIHAg PSBmbnZhbDsJCQkvKiBSZXN1bHQgYnVmZmVyICovCisJd2hpbGUgKCpzKSB7CQkJLyogV2hpbGUg dGhlcmUgaXMgaW5wdXQgKi8KKwkgICAgaWYgKCFzdGFydGVkICYmICgqcyA9PSAnICcgfHwgKnMg PT0gJ1wwMTEnKSkgeworCQlzKys7CQkJLyogU2tpcCBwYXN0IGxlYWRpbmcgd2hpdGVzcGFjZSAq LworCQljb250aW51ZTsKKwkgICAgfQorCSAgICBzdGFydGVkKys7CQkJLyogTGVhZGluZyB3aGl0 ZXNwYWNlIHdhcyBza2lwcGVkICovCisJICAgIGlmICgqcyAhPSAnICcgJiYgKnMgIT0gJ1wwMTEn KSB7IC8qIEhhdmUgYSBub25zcGFjZSBjaGFyICovCisJCW4gPSAwOwkJCS8qIHJlc2V0IHNwYWNl IGNvdW50ZXIgKi8KKwkJKnArKyA9ICpzKys7CQkvKiBjb3B5IGNoYXIgdG8gZGVzdGluYXRpb24g Ki8KKwkJY29udGludWU7CisJICAgIH0JCSAgICAKKwkgICAgaWYgKG4rKyA+IDApIHsJCS8qIEhh dmUgYmxhbmsgb3IgdGFiICovCisJCXMrKzsJCQkvKiBkb24ndCBjb3B5IG1vcmUgdGhhbiBvbmUg Ki8KKwkJY29udGludWU7CisJICAgIH0KKwkgICAgKnArKyA9ICcgJzsJCQkvKiBEZXBvc2l0IG9u ZSBzcGFjZSAqLworCSAgICBzKys7CQkJLyogYW5kIGdvIHRvIG5leHQgc291cmNlIGNoYXIgKi8K Kwl9CisJaWYgKCoocC0xKSA9PSAnICcpIHAtLTsJCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSAq LworICAgICAgICAqcCA9IE5VTDsJCQkvKiBUZXJtaW5hdGUgc3RyaW5nICovCisgICAgICAgIHAg PSBmbnZhbDsJCQkvKiBwb2ludCB0byBiZWdpbm5pbmcgKi8KKyAgICAgICAgZ290byBmbmVuZDsJ CQkvKiBEb25lLiAqLworICAgIH0KKyAgICBpZiAoY3ggPT0gRk5fUEFUVEVSTikgeyAgICAgICAg ICAgICAvKiBcZnBhdHRlcm4oKSBmb3IgSU5QVVQgKi8KKyAgICAgICAgaXRzYXBhdHRlcm4gPSAx OworICAgICAgICBpZiAoYXJnbiA+IDApIHsKKyAgICAgICAgICAgIHAgPSBmbnZhbDsKKyAgICAg ICAgICAgIGNrc3RybmNweShmbnZhbCxicFswXSxGTlZBTEwpOworICAgICAgICB9IGVsc2UgcCA9 ICIiOworICAgICAgICBnb3RvIGZuZW5kOworICAgIH0KKyAgICBpZiAoY3ggPT0gRk5fSEVYMk4g fHwgY3ggPT0gRk5fT0NUMk4pIHsgLyogXGZoZXgybigpLCBcZm9jdDJuKCkgKi8KKyAgICAgICAg cCA9ICIwIjsKKyAgICAgICAgaWYgKGFyZ24gPCAxKQorICAgICAgICAgIGdvdG8gZm5lbmQ7Cisg ICAgICAgIHAgPSBja3JhZGl4KGJwWzBdLCAoKGN4ID09IEZOX0hFWDJOKSA/IDE2IDogOCksIDEw KTsKKyAgICAgICAgaWYgKCFwKSB7CisgICAgICAgICAgICBpZiAoZm5kaWFncykKKyAgICAgICAg ICAgICAgY2ttYWttc2coZm52YWwsRk5WQUxMLAorICAgICAgICAgICAgICAgICAgICAgICAiPEVS Uk9SOkFSR19PVVRfT0ZfUkFOR0U6XFxmIixmbiwiKCk+IixOVUxMKTsKKyAgICAgICAgICAgIGdv dG8gZm5lbmQ7CisgICAgICAgIH0KKyAgICAgICAgZmFpbGVkID0gMDsKKyAgICAgICAgY2tzdHJu Y3B5KGZudmFsLHAsRk5WQUxMKTsKKyAgICAgICAgcCA9IGZudmFsOworICAgICAgICBnb3RvIGZu ZW5kOworICAgIH0KKworICAgIGlmIChjeCA9PSBGTl9IRVgySVApIHsKKyAgICAgICAgaW50IGNb Ml0sIGlwWzRdLCBpLCBrOworICAgICAgICBwID0gIjAiOworICAgICAgICBpZiAoYXJnbiA8IDEp CisgICAgICAgICAgZ290byBmbmVuZDsKKyAgICAgICAgcyA9IGJwWzBdOworICAgICAgICBpZiAo KGludClzdHJsZW4ocykgIT0gOCkgeworICAgICAgICAgICAgZmFpbGVkID0gMTsKKyAgICAgICAg ICAgIGlmIChmbmRpYWdzKQorICAgICAgICAgICAgICBja21ha21zZyhmbnZhbCxGTlZBTEwsCisg ICAgICAgICAgICAgICAgICAgICAgICI8RVJST1I6QVJHX09VVF9PRl9SQU5HRTpcXGYiLGZuLCIo KT4iLE5VTEwpOworICAgICAgICAgICAgZ290byBmbmVuZDsKKyAgICAgICAgfQorICAgICAgICBw ID0gZm52YWw7CisgICAgICAgIGZvciAoayA9IDA7IGsgPCA4OyBrICs9IDIpIHsKKyAgICAgICAg ICAgIGZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKyAgICAgICAgICAgICAgICBjW2ldID0gKnMr KzsKKyAgICAgICAgICAgICAgICBpZiAoaXNsb3dlcihjW2ldKSkgY1tpXSA9IHRvdXBwZXIoY1tp XSk7CisgICAgICAgICAgICAgICAgaWYgKGNbaV0gPj0gJzAnICYmIGNbaV0gPD0gJzknKSB7Cisg ICAgICAgICAgICAgICAgICAgIGNbaV0gLT0gMHgzMDsKKyAgICAgICAgICAgICAgICB9IGVsc2Ug aWYgKGNbaV0gPj0gJ0EnICYmIGNbaV0gPD0gJ0YnKSB7CisgICAgICAgICAgICAgICAgICAgIGNb aV0gLT0gMHgzNzsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAg ICBmYWlsZWQgPSAxOworICAgICAgICAgICAgICAgICAgICBpZiAoZm5kaWFncykKKyAgICAgICAg ICAgICAgICAgICAgICBja21ha21zZyhmbnZhbCxGTlZBTEwsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIjxFUlJPUjpBUkdfT1VUX09GX1JBTkdFOlxcZiIsZm4sIigpPiIsTlVMTCk7 CisgICAgICAgICAgICAgICAgICAgIGdvdG8gZm5lbmQ7CisgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICAgIGlwW2svMl0gPSBjWzBdIDw8IDQgfCBjWzFdOworICAgICAgICAgICAgfQor ICAgICAgICAgICAgc3ByaW50ZihwLCIlZC4lZC4lZC4lZCIsaXBbMF0saXBbMV0saXBbMl0saXBb M10pOyAvKiBTQUZFICovCisgICAgICAgIH0KKyAgICAgICAgZ290byBmbmVuZDsKKyAgICB9Cisg ICAgaWYgKGN4ID09IEZOX0lQMkhFWCkgeworICAgICAgICBpbnQgaXBbNF0sIGk7CisgICAgICAg IGNoYXIgKiBxOworICAgICAgICBwID0gIjAwMDAwMDAwIjsKKyAgICAgICAgaWYgKGFyZ24gPCAx KQorICAgICAgICAgIGdvdG8gZm5lbmQ7CisgICAgICAgIHMgPSBicFswXTsKKyAgICAgICAgcCA9 IGZudmFsOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisgICAgICAgICAgICBx ID0gY2tzdHJjaHIocywnLicpOworICAgICAgICAgICAgaWYgKHEpIHsKKyAgICAgICAgICAgICAg ICAqcSsrID0gTlVMOworICAgICAgICAgICAgICAgIGlwW2ldID0gYXRvaShzKTsKKyAgICAgICAg ICAgICAgICBzID0gcTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZmFp bGVkID0gMTsKKyAgICAgICAgICAgICAgICBpZiAoZm5kaWFncykKKyAgICAgICAgICAgICAgICAg IGNrbWFrbXNnKGZudmFsLEZOVkFMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICI8RVJS T1I6QVJHX09VVF9PRl9SQU5HRTpcXGYiLGZuLCIoKT4iLE5VTEwpOworICAgICAgICAgICAgICAg IGdvdG8gZm5lbmQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaXBbM10gPSBh dG9pKHMpOworICAgICAgICBzcHJpbnRmKHAsIiUwMnglMDJ4JTAyeCUwMngiLGlwWzBdLGlwWzFd LGlwWzJdLGlwWzNdKTsgLyogU0FGRSAqLworICAgICAgICBnb3RvIGZuZW5kOworICAgIH0KKyAg ICBpZiAoY3ggPT0gRk5fUkFESVgpIHsKKyAgICAgICAgZmFpbGVkID0gMTsKKyAgICAgICAgcCA9 IGZudmFsOworICAgICAgICBpZiAoYXJnbiA8IDMpIHsKKyAgICAgICAgICAgIGlmIChmbmRpYWdz KQorICAgICAgICAgICAgICBja21ha21zZyhmbnZhbCxGTlZBTEwsIjxFUlJPUjpNSVNTSU5HX0FS RzpcXGYiLGZuLCIoKT4iLE5VTEwpOworICAgICAgICAgICAgZ290byBmbmVuZDsKKyAgICAgICAg fQorICAgICAgICBpZiAoIXJkaWdpdHMoYnBbMV0pIHx8ICFyZGlnaXRzKGJwWzJdKSkgeworICAg ICAgICAgICAgaWYgKGZuZGlhZ3MpCisgICAgICAgICAgICAgIGNrbWFrbXNnKGZudmFsLEZOVkFM TCwKKyAgICAgICAgICAgICAgICAgICAgICAgIjxFUlJPUjpBUkdfTk9UX05VTUVSSUM6XFxmIixm biwiKCk+IixOVUxMKTsKKyAgICAgICAgICAgIGdvdG8gZm5lbmQ7CisgICAgICAgIH0KKyAgICAg ICAgcCA9IGNrcmFkaXgoYnBbMF0sYXRvaShicFsxXSksYXRvaShicFsyXSkpOworICAgICAgICBp ZiAoIXApIHsKKyAgICAgICAgICAgIGlmIChmbmRpYWdzKQorICAgICAgICAgICAgICBja21ha21z ZyhmbnZhbCxGTlZBTEwsCisgICAgICAgICAgICAgICAgICAgICAgICI8RVJST1I6QVJHX09VVF9P Rl9SQU5HRTpcXGYiLGZuLCIoKT4iLE5VTEwpOworICAgICAgICAgICAgZ290byBmbmVuZDsKKyAg ICAgICAgfQorICAgICAgICBmYWlsZWQgPSAwOworICAgICAgICBja3N0cm5jcHkoZm52YWwscCxG TlZBTEwpOworICAgICAgICBwID0gZm52YWw7CisgICAgICAgIGdvdG8gZm5lbmQ7CisgICAgfQor ICAgIGlmIChjeCA9PSBGTl9KT0lOKSB7CisgICAgICAgIGludCBpLCB4LCB5LCB6LCBmbGFnLCBm bGFnMiwgaGksIGxvLCBtYXgsIHNlcGxlbiwgZ3JvdXBpbmcgPSAwOworICAgICAgICBjaGFyIGFi dWZbMTZdLCBjLCAqcywgKnEsICpzZXAgPSBOVUxMOworICAgICAgICBjaGFyICogZ3Jfb3BuID0g IlwieycoWzwiOyAgICAgIC8qIEdyb3VwIG9wZW4gYnJhY2tldHMgKi8KKyAgICAgICAgY2hhciAq IGdyX2NscyA9ICJcIn0nKV0+IjsgICAgICAvKiBHcm91cCBjbG9zZSBicmFja2V0cyAqLworICAg ICAgICBjaGFyIGxiWzJdLCByYlsyXTsgICAgICAgICAgICAgIC8qIFNlbGVjdGVkIGxlZnQgYW5k IHJpZ2h0IGJyYWNrZXRzICovCisJaW50IGNzdiA9IDAsIHRzdiA9IDA7CQkvKiBGdW5jdGlvbiBm bGFncyAqLworCWNoYXIgc3BlY2lhbGNoYXIgPSAwOwkJLyogRmllbGQgY2hhciB0aGF0IHRyaWdn ZXJzIGdyb3VwaW5nICovCisJY2hhciAqczIgPSBOVUxMOwkJLyogQWRkcmVzcyBvZiBtYWxsb2Mn ZCBzdG9yYWdlICovCisKKyAgICAgICAgZmFpbGVkID0gMTsgICAgICAgICAgICAgICAgICAgICAv KiBBc3N1bWUgZmFpbHVyZSAqLworICAgICAgICBmbnZhbFswXSA9IE5VTDsKKyAgICAgICAgZGVi dWcoRjEwMSwiRk5KT0lOIEFSR04iLCIiLGFyZ24pOworCisgICAgICAgIGNrc3RybmNweShhYnVm LGJwWzBdLDE2KTsgICAgICAgLyogR2V0IGFycmF5IHJlZmVyZW5jZSAqLworICAgICAgICBzID0g YWJ1ZjsKKyAgICAgICAgaWYgKCh4ID0gYXJyYXlib3VuZHMocywmbG8sJmhpKSkgPCAwKSB7ICAv KiBHZXQgaW5kZXggYW5kIGJvdW5kcyAqLworICAgICAgICAgICAgaWYgKGZuZGlhZ3MpCisgICAg ICAgICAgICAgIGNrbWFrbXNnKGZudmFsLEZOVkFMTCwiPEVSUk9SOkFSR19CQURfQVJSQVk6XFxm IixmbiwiKCk+IixOVUxMKTsKKyAgICAgICAgICAgIGdvdG8gZm5lbmQ7CisgICAgICAgIH0KKyAg ICAgICAgcCA9IGZudmFsOyAgICAgICAgICAgICAgICAgICAgICAvKiBQb2ludCB0byByZXN1bHQg Ki8KKyAgICAgICAgbWF4ID0gYV9kaW1beF07ICAgICAgICAgICAgICAgICAvKiBTaXplIG9mIGFy cmF5ICovCisgICAgICAgIGlmIChsbyA8IDApIGxvID0gMTsgICAgICAgICAgICAgLyogVXNlIGdp dmVuIHJhbmdlIGlmIGFueSAqLworICAgICAgICBpZiAobG8gPiBtYXgpIGxvID0gbWF4OworI2lm ZGVmIENPTU1FTlQKKwloaSA9IG1heDsKKyNlbHNlCisvKgorICBUaGlzIGlzIGEgd29ya2Fyb3Vu ZCBmb3IgdGhlIHByb2JsZW0gaW4gd2hpY2ggdGhlIGRpbWVuc2lvbiBvZiB0aGUgXCZfW10KKyAg YXJyYXkgKGJ1dCBub3QgaXRzIGNvbnRlbnRzKSBncm93cyB1cG9uIGVudHJ5IHRvIGEgU1dJVENI IGJsb2NrLiAgQnV0IHRoaXMKKyAgY29kZSBwcmV2ZW50cyB0aGUgZGltZW5zaW9uIGZyb20gZ3Jv d2luZy4gIEdvIGZpZ3VyZS4KKyovCisgICAgICAgIGlmIChoaSA8IDApIHsJCQkvKiBCb3VuZHMg bm90IGdpdmVuICovCisgICAgICAgICAgICBpZiAoeCkJCQkvKiBSZWd1bGFyIGFycmF5ICovCisJ ICAgICAgaGkgPSBtYXg7CisJICAgIGVsc2UJCQkvKiBBcmd1bWVudCB2ZWN0b3IgYXJyYXkgKi8K KwkgICAgICBmb3IgKGhpID0gbWF4OyBoaSA+PSBsbzsgaGktLSkgeyAvKiBpZ25vcmUgYW55IHRy YWlsaW5nICovCisJCSAgaWYgKCFhX3B0clt4XVtoaV0pIGNvbnRpbnVlOyAvKiBlbXB0eSBlbGVt ZW50cyAqLworCQkgIGlmICghKihhX3B0clt4XVtoaV0pKSBjb250aW51ZTsKKwkJICBicmVhazsK KwkgICAgICB9CisJfQorI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAgaWYgKGhpID4gbWF4 KSBoaSA9IG1heDsKKyAgICAgICAgZmFpbGVkID0gMDsgICAgICAgICAgICAgICAgICAgICAvKiBV bnNldCBmYWlsdXJlIGZsYWcgKi8KKyAgICAgICAgaWYgKG1heCA8IDEpCisgICAgICAgICAgZ290 byBmbmVuZDsKKyAgICAgICAgc2VwID0gIiAiOyAgICAgICAgICAgICAgICAgICAgICAvKiBTZXBh cmF0b3IgKi8KKyAgICAgICAgbGJbMF0gPSBOVUw7CQkJLyogR3JvdXAgc3RhcnQgY2hhciAoYXMg c3RyaW5nKSAqLworICAgICAgICByYlswXSA9IE5VTDsKKyAgICAgICAgbGJbMV0gPSBOVUw7CQkJ LyogR3JvdXAgZW5kIGNoYXIgYXMgc3RyaW5nICovCisgICAgICAgIHJiWzFdID0gTlVMOworCisg ICAgICAgIGlmIChhcmduID4gMSkgeworCSAgICBpZiAoYnBbMV0pIGlmICgqYnBbMV0pIHsJLyog SWYgYXJnMSBnaXZlbiBhbmQgbm90IGVtcHR5ICovCisJCWlmICghc3RyY21wKGJwWzFdLCJDU1Yi KSkgeyAvKiBTcGVjaWFsICJDU1YiIHN5bWJvbGljIGFyZyAqLworCQkgICAgY3N2Kys7CQkvKiBN YWtlIGEgY29tbWEgc2VwYXJhdGVkIGxpc3QgKi8KKwkJICAgIHNlcCA9ICIsIjsJCS8qIENvbW1h ICovCisJCSAgICBzcGVjaWFsY2hhciA9ICpzZXA7CS8qIFNlcGFyYXRvciBpcyBzcGVjaWFsIGNo YXJhY3RlciAqLworCQkgICAgZ3JvdXBpbmcgPSAxOwkvKiBHcm91cCB3aXRoIGRvdWJsZXF1b3Rl cyAqLworCQkgICAgbGJbMF0gPSAnIic7CS8qIGFuZCBoZXJlICovCisJCSAgICByYlswXSA9ICci JzsJLyogdGhleSBhcmUgKi8KKwkJfSBlbHNlIGlmICghc3RyY21wKGJwWzFdLCJUU1YiKSkgeyAv KiAiVFNWIiBzeW1ib2xpYyBhcmcgKi8KKwkJICAgIHRzdisrOwkJLyogTWFrZSBhIFRhYiBzZXBh cmF0ZWQgbGlzdCAqLworCQkgICAgc2VwID0gIlwwMTEiOwkvKiBUYWIgKi8KKwkJICAgIHNwZWNp YWxjaGFyID0gKnNlcDsKKwkJICAgIGdyb3VwaW5nID0gMDsJLyogTm8gZ3JvdXBpbmcgKi8KKwkJ fSBlbHNlCQkJLyogTm9ybWFsIGNhc2UgKi8KKwkJICBzZXAgPSBicFsxXTsJCS8qIHVzZSB0aGUg c2VwYXJhdG9yIGNoYXIgc3BlY2lmaWVkICovCisJICAgIH0KKwl9CisgICAgICAgIGlmIChhcmdu ID4gMiAmJiAhY3N2ICYmICF0c3YpIHsJLyogR3JvdXBpbmc/ICovCisgICAgICAgICAgICBjaGFy ICogYnAyID0gYnBbMl07CisgICAgICAgICAgICBpZiAoIWJwMikgYnAyID0gIjAiOworICAgICAg ICAgICAgaWYgKCEqYnAyKSBicDIgPSAiMCI7CisgICAgICAgICAgICBpZiAoY2hrbnVtKGJwMikp IHsKKyAgICAgICAgICAgICAgICBncm91cGluZyA9IGF0b2koYnAyKTsKKyAgICAgICAgICAgICAg ICBpZiAoZ3JvdXBpbmcgPCAwIHx8IGdyb3VwaW5nID4gNjMpCisgICAgICAgICAgICAgICAgICBn cm91cGluZyA9IDE7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGZhaWxl ZCA9IDE7CisgICAgICAgICAgICAgICAgaWYgKGZuZGlhZ3MpCisgICAgICAgICAgICAgICAgICBj a21ha21zZyhmbnZhbCxGTlZBTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiPEVSUk9S OkFSR19OT1RfTlVNRVJJQzpcXGYiLGZuLCIoKT4iLE5VTEwpOworICAgICAgICAgICAgICAgIGdv dG8gZm5lbmQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZ3JvdXBpbmcpIHsgICAg ICAgICAgICAgLyogVGFrZSBsb3dlc3Qtb3JkZXIgb25lICovCisgICAgICAgICAgICAgICAgaW50 IGosIGs7ICAgICAgICAgICAgICAgLyogYW5kIHNldCB0aGUgb3RoZXJzIHRvIDAgKi8KKyAgICAg ICAgICAgICAgICBmb3IgKGsgPSAwOyBrIDwgNjsgaysrKSB7CisgICAgICAgICAgICAgICAgICAg IGogPSAxIDw8IGs7CisgICAgICAgICAgICAgICAgICAgIGlmIChncm91cGluZyAmIGopIHsKKyAg ICAgICAgICAgICAgICAgICAgICAgIGxiWzBdID0gZ3Jfb3BuW2tdOworICAgICAgICAgICAgICAg ICAgICAgICAgcmJbMF0gPSBncl9jbHNba107CisgICAgICAgICAgICAgICAgICAgICAgICBicmVh azsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg IH0KKyAgICAgICAgfQorCWlmICghY3N2ICYmICF0c3YpIHsJCS8qIE5vcm1hbCBjYXNlLCBub3Qg Q1NWIG9yIFRTViAqLworCSAgICBzcGVjaWFsY2hhciA9IFNQOwkJLyogU3BlY2lhbCBjaGFyYWN0 ZXIgaXMgc3BhY2UgKi8KKwkgICAgaWYgKGFyZ24gPiAzKQkJLyogTm9uemVybyA0dGggYXJnIGZv ciBubyBzZXBhcmF0b3IgKi8KKwkgICAgICBpZiAoY2hrbnVtKGJwWzNdKSkKKwkJaWYgKGF0b2ko YnBbM10pID4gMCkKKwkJICBzZXAgPSBOVUxMOworCSAgICBpZiAoIXNlcCkgeworCQlzZXAgPSAi IjsKKwkJc2VwbGVuID0gMDsKKwkgICAgfSBlbHNlCisJICAgICAgc2VwbGVuID0gc3RybGVuKHNl cCk7CisJfQorICAgICAgICBmb3IgKGkgPSBsbzsgaSA8PSBoaTsgaSsrKSB7ICAgIC8qIExvb3Ag dGhydSBzZWxlY3RlZCBhcnJheSBlbGVtZW50cyAqLworICAgICAgICAgICAgcyA9IGFfcHRyW3hd W2ldOyAgICAgICAgICAgIC8qIEdldCBuZXh0IGVsZW1lbnQgKi8KKyAgICAgICAgICAgIGlmICgh cykKKyAgICAgICAgICAgICAgcyA9ICIiOworICAgICAgICAgICAgZmxhZyA9IDA7ICAgICAgICAg ICAgICAgICAgIC8qIEZsYWcgdG8gaW5kaWNhdGUgZ3JvdXBpbmcgbmVlZGVkICovCisJICAgIGZs YWcyID0gMDsJCQkvKiBGbGFnIGZvciBpbnRlcm5hbCBkb3VibGVxdW90ZXMgKi8KKyAgICAgICAg ICAgIGlmIChncm91cGluZykgeyAgICAgICAgICAgICAvKiBEb2VzIHRoaXMgZWxlbWVudCBuZWVk IHF1b3Rpbmc/ICovCisgICAgICAgICAgICAgICAgcSA9IHM7ICAgICAgICAgICAgICAgICAgLyog TG9vayBmb3Igc3BlY2lhbCBjaGFyYWN0ZXIgKi8KKyAgICAgICAgICAgICAgICB3aGlsZSAoKGMg PSAqcSsrKSkgewkvKiBJZiBmb3VuZCAqLworCQkgICAgaWYgKGMgPT0gc3BlY2lhbGNoYXIpIC8q IGdyb3VwaW5nIGlzIHJlcXVpcmVkICovCisJCSAgICAgIGZsYWcrKzsKKwkJICAgIGlmIChjc3Yg JiYgKGMgPT0gJyInKSkgLyogQ2hhcmFjdGVyIHRoYXQgbmVlZHMgZG91YmxpbmcgKi8KKwkJICAg ICAgZmxhZzIrKzsJCSAgIC8qIGluIGNvbW1hLXNlcGFyYXRlZCBsaXN0ICovCisJCSAgICBpZiAo ZmxhZyAmJiAhY3N2KQkvKiBFeGl0IGVhcmx5IGlmIG5vIG1vcmUgdG8gZG8gKi8KKwkJICAgICAg YnJlYWs7CisJCX0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHkgPSBzdHJsZW4ocyk7ICAg ICAgICAgICAgICAvKiBHZXQgbGVuZ3RoIG9mIHRoaXMgZWxlbWVudCAqLworCSAgICBpZiAoKHkg PiAwKSAmJiBjc3YgJiYgIWZsYWcpIHsgLyogQ1NWIGl0ZW0gbmVlZHMgZ3JvdXBpbmcgKi8KKwkJ aWYgKHNbMF0gPT0gU1AgfHwgc1t5LTFdID09IFNQIHx8IC8qIGlmIGl0IGhhcyBsZWFkaW5nICov CisJCSAgICBzWzBdID09IEhUIHx8IHNbeS0xXSA9PSBIVCkJLyogb3IgdHJhaWxpbmcgd2hpdGVz cGFjZSAqLworCQkgIGZsYWcrKzsJCS8qIHRoZW4gaXQgbmVlZHMgZ3JvdXBpbmcgKi8KKwkgICAg fQorCSAgICBpZiAoZmxhZyB8fCBmbGFnMikgewkvKiBTdHJpbmcgbmVlZHMgZ3JvdXBpbmcgb3Ig cXVvdGluZyAqLworCQljaGFyICpzcyA9IHM7CisgICAgICAgICAgICAgICAgcSA9IChjaGFyICop bWFsbG9jKHkgKyBmbGFnMiArIDMpOyAvKiBNYWtlIG5ldyBidWZmZXIgKi8KKwkJaWYgKHEpIHsK KwkJICAgIHMyID0gcTsJCS8qIGFuZCB0aGlzIGlzIHdoYXQgdG8gZnJlZSAqLworCQkgICAgaWYg KGZsYWcpCQkvKiBJZiBncm91cGluZyAqLworCQkgICAgICAqcSsrID0gbGJbMF07CS8qIHB1dCBv cGVuaW5nIGdyb3VwIHF1b3RlICovCisJCSAgICB3aGlsZSAoKnNzKSB7CS8qIExvb3AgdGhyb3Vn aCBzdHJpbmcgKi8KKwkJCWlmIChmbGFnMiAmJiAoKnNzID09ICciJykpIC8qIElmIENTViBhbmQg dGhpcyBhICciJyAqLworCQkJICAqcSsrID0gKnNzOwkgICAgICAgICAgIC8qIGRvdWJsZSBpdC4g Ki8KKwkJCSpxKysgPSAqc3MrKzsJLyogQ29weSB0aGUgY2hhcmFjdGVyICovCisJCSAgICB9CisJ CSAgICBpZiAoZmxhZykJCS8qIElmIGdyb3VwaW5nICovCisJCSAgICAgICpxKysgPSByYlswXTsJ LyogYWRkIGNsb3NpbmcgZ3JvdXAgcXVvdGUgKi8KKwkJICAgICpxID0gTlVMOwkJLyogdGVybWlu YXRlIHRoZSByZXN1bHQuICovCisJCSAgICBzID0gczI7CisJCSAgICB5ID0gc3RybGVuKHMpOwor CQl9CisJICAgIH0KKyAgICAgICAgICAgIHogPSAwOyAgICAgICAgICAgICAgICAgICAgICAvKiBO dW1iZXIgb2YgY2hhcnMgY29waWVkICovCisgICAgICAgICAgICBmbGFnID0gMDsgICAgICAgICAg ICAgICAgICAgLyogZmxhZyBpcyBub3cgYnVmZmVyLW92ZXJydW4gZmxhZyAqLworICAgICAgICAg ICAgaWYgKHkgPiAwKSAgICAgICAgICAgICAgICAgIC8qIElmIHRoaXMgc3RyaW5nIGlzIG5vdCBl bXB0eSAqLworICAgICAgICAgICAgICB6ID0gY2tzdHJuY2F0KGZudmFsLHMsRk5WQUxMKTsgLyog Y29weSBpdC4gKi8KKwkgICAgaWYgKHMyKSBmcmVlKHMyKTsJCS8qIEZyZWUgdGVtcCBzdG9yYWdl ICovCisgICAgICAgICAgICBpZiAoeiA8IHkpICAgICAgICAgICAgICAgICAgLyogTm93IGNoZWNr IGZvciBidWZmZXIgb3ZlcnJ1bi4gKi8KKyAgICAgICAgICAgICAgZmxhZysrOworICAgICAgICAg ICAgaWYgKCFmbGFnICYmICpzZXAgJiYgaSA8IGhpKSB7IC8qIElmIGJ1ZmZlciBzdGlsbCBoYXMg cm9vbSAqLworICAgICAgICAgICAgICAgIHogPSBja3N0cm5jYXQoZm52YWwsc2VwLEZOVkFMTCk7 IC8qIGNvcHkgZGVsaW1pdGVyICovCisgICAgICAgICAgICAgICAgaWYgKHogPCBzZXBsZW4pCisg ICAgICAgICAgICAgICAgICBmbGFnKys7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo ZmxhZykgeworICAgICAgICAgICAgICAgIGZhaWxlZCA9IDE7CisgICAgICAgICAgICAgICAgaWYg KGZuZGlhZ3MpCisgICAgICAgICAgICAgICAgICBja21ha21zZyhmbnZhbCxGTlZBTEwsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAiPEVSUk9SOlJFU1VMVF9UT09fTE9ORzpcXGYiLGZuLCIo KT4iLE5VTEwpOworICAgICAgICAgICAgICAgIGdvdG8gZm5lbmQ7CisgICAgICAgICAgICB9Cisg ICAgICAgIH0KKwlpc2pvaW4gPSAxOworICAgICAgICBnb3RvIGZuZW5kOworICAgIH0KKyAgICBp ZiAoY3ggPT0gRk5fU1VCU1QpIHsgICAgICAgICAgICAgICAvKiBcZnN1YnN0aXR1dGUoKSAqLwor ICAgICAgICBDSEFSIGMsICogcywgKiByLCAqIHRwWzJdLCBidWYxWzI1Nl0sIGJ1ZjJbMjU2XSwg YnVmM1syNTZdOworICAgICAgICBpbnQgbGVuLCBpLCBqLCBzdGF0ZSA9IDAsIGxvID0gMCwgaGkg PSAwOworCisgICAgICAgIGZhaWxlZCA9IDA7CisgICAgICAgIHAgPSBmbnZhbDsgICAgICAgICAg ICAgICAgICAgICAgLyogUmVzdWx0IHBvaW50ZXIgKi8KKyAgICAgICAgKnAgPSBOVUw7CisgICAg ICAgIGlmICghYnBbMF0pICAgICAgICAgICAgICAgICAgICAgLyogTm8gdGFyZ2V0LCBubyByZXN1 bHQqLworICAgICAgICAgIGdvdG8gZm5lbmQ7CisKKyAgICAgICAgbGVuID0gc3RybGVuKGJwWzBd KTsgICAgICAgICAgICAvKiBMZW5ndGggb2Ygc291cmNlICovCisgICAgICAgIGlmIChsZW4gPT0g MCkKKyAgICAgICAgICBnb3RvIGZuZW5kOworICAgICAgICBpZiAobGVuID4gRk5WQUxMKSB7Cisg ICAgICAgICAgICBmYWlsZWQgPSAxOworICAgICAgICAgICAgaWYgKGZuZGlhZ3MpCisgICAgICAg ICAgICAgIGNrbWFrbXNnKGZudmFsLEZOVkFMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgIjxF UlJPUjpSRVNVTFRfVE9PX0xPTkc6XFxmIixmbiwiKCk+IixOVUxMKTsKKyAgICAgICAgICAgIGdv dG8gZm5lbmQ7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFicFsxXSkgeworICAgICAgICAgICAg Y2tzdHJuY3B5KGJwWzBdLGZudmFsLEZOVkFMTCk7CisgICAgICAgICAgICBnb3RvIGZuZW5kOwor ICAgICAgICB9CisgICAgICAgIHRwWzBdID0gYnVmMTsgICAgICAgICAgICAgICAgICAgLyogRm9y IHMyLXMzIGludGVycHJldGF0aW9uIGxvb3AgKi8KKyAgICAgICAgdHBbMV0gPSBidWYyOworCisg ICAgICAgIGZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgeyAgICAgLyogSW5pdGlhbGl6ZSB3b3Jr aW5nIGJ1ZmZlcnMgKi8KKyAgICAgICAgICAgIGJ1ZjFbaV0gPSAwOyAgICAgICAgICAgICAgICAv KiBzMiBleHBhbnNpb24gYnVmZmVyICovCisgICAgICAgICAgICBidWYyW2ldID0gMDsgICAgICAg ICAgICAgICAgLyogczMgZXhwYW5zaW9uIGJ1ZmZlciAqLworICAgICAgICAgICAgYnVmM1tpXSA9 IGk7ICAgICAgICAgICAgICAgIC8qIFRyYW5zbGF0aW9uIHRhYmxlICovCisgICAgICAgIH0KKyAg ICAgICAgZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeyAgICAgICAvKiBJbnRlcnByZXQgczIgYW5k IHMzICovCisgICAgICAgICAgICBzID0gKENIQVIgKilicFtpKzFdOyAgICAgICAgLyogQXJnIHBv aW50ZXIgKi8KKyAgICAgICAgICAgIGlmICghcykgcyA9IChDSEFSICopIiI7CisgICAgICAgICAg ICByID0gdHBbaV07ICAgICAgICAgICAgICAgICAgLyogVG8gY29uc3RydWN0IGludGVycHJldGVk IGFyZyAqLworICAgICAgICAgICAgaiA9IDA7ICAgICAgICAgICAgICAgICAgICAgIC8qIE91dHB1 dCBidWYgcG9pbnRlciAqLworICAgICAgICAgICAgc3RhdGUgPSAwOyAgICAgICAgICAgICAgICAg IC8qIEluaXRpYWwgc3RhdGUgKi8KKyAgICAgICAgICAgIHdoaWxlIChjID0gKnMrKykgeyAgICAg ICAgICAvKiBMb29wIHRocnUgYXJnIGNoYXJzICovCisgICAgICAgICAgICAgICAgaWYgKGogPiAy NTUpICAgICAgICAgICAgLyogT3V0cHV0IGJ1ZiBmdWxsICovCisgICAgICAgICAgICAgICAgICBi cmVhazsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHN0YXRlKSB7CisgICAgICAgICAgICAgICAg ICBjYXNlIDA6ICAgICAgICAgICAgICAgLyogTm9ybWFsIHN0YXRlICovCisgICAgICAgICAgICAg ICAgICAgIHN3aXRjaCAoYykgeworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1xcJzogICAg ICAgIC8qIEhhdmUgcXVvdGUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gMTsK KyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgIGNh c2UgJ1snOiAgICAgICAgIC8qIEhhdmUgcmFuZ2Ugc3RhcnRlciAqLworICAgICAgICAgICAgICAg ICAgICAgICAgc3RhdGUgPSAyOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICAgICAgICAgICAgICAgZGVmYXVsdDogICAgICAgICAgLyogQW55dGhpbmcgZWxzZSAqLwor ICAgICAgICAgICAgICAgICAgICAgICAgcltqKytdID0gYzsKKyAgICAgICAgICAgICAgICAgICAg ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGNv bnRpbnVlOworICAgICAgICAgICAgICAgICAgY2FzZSAxOiAgICAgICAgICAgICAgIC8qIFF1b3Rl ZCBjaGFyICovCisgICAgICAgICAgICAgICAgICAgIHJbaisrXSA9IGM7CisgICAgICAgICAgICAg ICAgICAgIHN0YXRlID0gMDsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg ICAgICAgICAgICBjYXNlIDI6ICAgICAgICAgICAgICAgLyogUmFuZ2UgYm90dG9tICovCisgICAg ICAgICAgICAgICAgICAgIGxvID0gYzsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUrKzsKKyAg ICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICBjYXNlIDM6ICAg ICAgICAgICAgICAgLyogUmFuZ2Ugc2VwYXJhdGVyICovCisgICAgICAgICAgICAgICAgICAgIGlm IChjICE9ICctJykgeworICAgICAgICAgICAgICAgICAgICAgICAgZmFpbGVkID0gMTsKKyAgICAg ICAgICAgICAgICAgICAgICAgIGlmIChmbmRpYWdzKQorICAgICAgICAgICAgICAgICAgICAgICAg ICBja21ha21zZyhmbnZhbCxGTlZBTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICI8RVJST1I6QkFEX1JBTkdFOlxcZiIsZm4sIigpPiIsTlVMTCk7CisgICAgICAgICAgICAg ICAgICAgICAgICBnb3RvIGZuZW5kOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgICAgICAgIHN0YXRlKys7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg ICAgICAgICAgICAgY2FzZSA0OiAgICAgICAgICAgICAgIC8qIFJhbmdlIHRvcCAqLworICAgICAg ICAgICAgICAgICAgICBoaSA9IGM7CisgICAgICAgICAgICAgICAgICAgIHN0YXRlKys7CisgICAg ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgY2FzZSA1OiAgICAg ICAgICAgICAgIC8qIFJhbmdlIGVuZCAqLworICAgICAgICAgICAgICAgICAgICBpZiAoYyAhPSAn XScpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZhaWxlZCA9IDE7CisgICAgICAgICAgICAg ICAgICAgICAgICBpZiAoZm5kaWFncykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2ttYWtt c2coZm52YWwsRk5WQUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPEVS Uk9SOkJBRF9SQU5HRTpcXGYiLGZuLCIoKT4iLE5VTEwpOworICAgICAgICAgICAgICAgICAgICAg ICAgZ290byBmbmVuZDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg ICBmb3IgKGsgPSBsbzsgayA8PSBoaSAmJiBqIDwgMjU1OyBrKyspIC8qIEZpbGwgaW4gKi8KKyAg ICAgICAgICAgICAgICAgICAgICByW2orK10gPSBrOworICAgICAgICAgICAgICAgICAgICBsbyA9 IDA7IGhpID0gMDsgICAgIC8qIFJlc2V0ICovCisgICAgICAgICAgICAgICAgICAgIHN0YXRlID0g MDsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCAyNTYgJiYgYnVm MVtpXTsgaSsrKSB7ICAvKiBDcmVhdGUgdHJhbnNsYXRpb24gdGFibGUgKi8KKyAgICAgICAgICAg IGsgPSAodW5zaWduZWQpYnVmMVtpXTsKKyAgICAgICAgICAgIGJ1ZjNba10gPSBidWYyW2ldOwor ICAgICAgICB9CisgICAgICAgIHMgPSAoQ0hBUiAqKWJwWzBdOyAgICAgICAgICAgICAgLyogUG9p bnQgdG8gc291cmNlIHN0cmluZyAqLworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKysp IHsgICAgIC8qIFRyYW5zbGF0aW9uIGxvb3AgKi8KKyAgICAgICAgICAgIGsgPSAodW5zaWduZWQp c1tpXTsgICAgICAgICAvKiBHZXQgbmV4dCBjaGFyICovCisgICAgICAgICAgICBpZiAoIWJ1ZjNb a10pICAgICAgICAgICAgICAgLyogUmVtb3ZlIHRoaXMgY2hhciAqLworICAgICAgICAgICAgICBj b250aW51ZTsKKyAgICAgICAgICAgICpwKysgPSBidWYzW2tdOyAgICAgICAgICAgICAvKiBTdWJz dGl0dXRlIHRoaXMgY2hhciAqLworICAgICAgICB9CisgICAgICAgICpwID0gTlVMOworICAgICAg ICBwID0gZm52YWw7CisgICAgICAgIGdvdG8gZm5lbmQ7CisgICAgfQorCisjaWZuZGVmIE5PU0VY UAorICAgIGlmIChjeCA9PSBGTl9TRVhQKSB7ICAgICAgICAgICAgICAgIC8qIFxmc2V4cHJlc3Np b24oYXJnMSkgKi8KKyAgICAgICAgY2hhciAqIHAyOworICAgICAgICBmc2V4cGZsYWcrKzsKKyAg ICAgICAgcCA9IChhcmduID4gMCkgPyBkb3NleHAoYnBbMF0pIDogIiI7CisgICAgICAgIGZzZXhw ZmxhZy0tOworICAgICAgICBwMiA9IGZudmFsOworICAgICAgICB3aGlsZSAoKCpwMisrID0gKnAr KykpIDsKKyAgICAgICAgcCA9IGZudmFsOworICAgICAgICBnb3RvIGZuZW5kOworICAgIH0KKyNl bmRpZiAvKiBOT1NFWFAgKi8KKworICAgIGlmIChjeCA9PSBGTl9DTURTVEspIHsgICAgICAgICAg ICAgIC8qIFxmY21kc3RhY2sobjEsbjIpICovCisgICAgICAgIGludCBpLCBqLCBrOworICAgICAg ICBjaGFyICogczsKKworICAgICAgICBpZiAoYnBbMF0pCisgICAgICAgICAgdmFsMSA9ICooYnBb MF0pID8gZXZhbHgoYnBbMF0pIDogY2tpdG9hKGNtZGx2bCk7CisgICAgICAgIGVsc2UKKyAgICAg ICAgICB2YWwxID0gY2tpdG9hKGNtZGx2bCk7CisjaWZkZWYgQ09NTUVOVAorICAgICAgICBmcmVl KGJwWzBdKTsgICAgICAgICAgICAgICAgICAgIC8qIChldmFseCgpIGFsd2F5cyB1c2VzIHNhbWUg YnVmZmVyKSAqLworICAgICAgICBicFswXSA9IE5VTEw7ICAgICAgICAgICAgICAgICAgIC8qIChu b3QgYW55IG1vcmUhKSAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAgZmFpbGVkID0g MTsKKyAgICAgICAgaWYgKGFyZ24gPiAxKSB7CisjaWZkZWYgQ09NTUVOVAorICAgICAgICAgICAg bWFrZXN0cigmKGJwWzBdKSx2YWwxKTsKKyAgICAgICAgICAgIHZhbDEgPSBicFswXTsKKyNlbmRp ZiAvKiBDT01NRU5UICovCisgICAgICAgICAgICB2YWwyID0gKihicFsxXSkgPyBldmFseChicFsx XSkgOiAiMCI7CisgICAgICAgICAgICBpZiAoIShjaGtudW0odmFsMSkgJiYgY2hrbnVtKHZhbDIp KSkgeworICAgICAgICAgICAgICAgIGlmIChmbmRpYWdzKQorICAgICAgICAgICAgICAgICAgY2tt YWttc2coZm52YWwsRk5WQUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxFUlJPUjpB UkdfTk9UX05VTUVSSUM6XFxmIixmbiwiKCk+IixOVUxMKTsKKyAgICAgICAgICAgICAgICBnb3Rv IGZuZW5kOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdmFs MSA9IGNraXRvYShjbWRsdmwpOworICAgICAgICAgICAgdmFsMiA9ICIwIjsKKyAgICAgICAgfQor ICAgICAgICBpID0gYXRvaSh2YWwxKTsgICAgICAgICAgICAgICAgIC8qIExldmVsICovCisgICAg ICAgIGogPSBhdG9pKHZhbDIpOyAgICAgICAgICAgICAgICAgLyogRmxhZ3MgKi8KKyAgICAgICAg aWYgKGkgPCAwIHx8IGkgPiBjbWRsdmwpIHsKKyAgICAgICAgICAgIGlmIChmbmRpYWdzKQorICAg ICAgICAgICAgICBja21ha21zZyhmbnZhbCxGTlZBTEwsCisgICAgICAgICAgICAgICAgICAgICAg ICI8RVJST1I6QVJHX09VVF9PRl9SQU5HRTpcXGYiLGZuLCIoKT4iLE5VTEwpOworICAgICAgICAg ICAgZ290byBmbmVuZDsKKyAgICAgICAgfQorICAgICAgICBmYWlsZWQgPSAwOworICAgICAgICBw ID0gZm52YWw7CisgICAgICAgIGsgPSBjbWRzdGtbaV0uc3JjOyAgICAgICAgICAgICAgLyogV2hh dCAocHJvbXB0LCBmaWxlLCBtYWNybykgKi8KKyAgICAgICAgaWYgKGopIHsKKyAgICAgICAgICAg IGNrc3RybmNweShmbnZhbCxja2l0b2EoayksRk5WQUxMKTsKKyAgICAgICAgICAgIGdvdG8gZm5l bmQ7CisgICAgICAgIH0KKyAgICAgICAgc3dpdGNoIChrKSB7CisgICAgICAgICAgY2FzZSBDTURf S0I6CisgICAgICAgICAgICBja3N0cm5jcHkoZm52YWwsIihwcm9tcHQpIixGTlZBTEwpOworICAg ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBDTURfVEY6CisgICAgICAgICAgICBzID0g dGZuYW1bY21kc3RrW2ldLmx2bF07CisgICAgICAgICAgICBpZiAoIXpmbnFmcChzLEZOVkFMTCxm bnZhbCkpCisgICAgICAgICAgICAgIGNrc3RybmNweShmbnZhbCxzLEZOVkFMTCk7CisgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIENNRF9NRDoKKyAgICAgICAgICAgIGNrc3RybmNw eShmbnZhbCxtX2FyZ1tjbWRzdGtbaV0ubHZsXVswXSxGTlZBTEwpOworICAgICAgICAgICAgYnJl YWs7CisgICAgICAgIH0KKyAgICAgICAgZ290byBmbmVuZDsKKyAgICB9CisjaWZkZWYgQ0tGTE9B VAorICAgIGlmIChjeCA9PSBGTl9ESUZEQVRFKSB7ICAgICAgICAgICAgIC8qIFxmZGlmZmRhdGVz KGQxLGQyKSAqLworICAgICAgICBjaGFyICogZDEsICogZDI7CisgICAgICAgIGQxID0gYnBbMF0g PyBicFswXSA6IGNrZGF0ZSgpOworICAgICAgICBkMiA9IGJwWzFdID8gYnBbMV0gOiBja2RhdGUo KTsKKyAgICAgICAgcCA9IChjaGFyICopY21kaWZmZGF0ZShkMSxkMik7CisgICAgICAgIGlmICgh cCkgeworICAgICAgICAgICAgZmFpbGVkID0gMTsKKyAgICAgICAgICAgIGlmIChmbmRpYWdzKSB7 CisgICAgICAgICAgICAgICAgY2ttYWttc2coZm52YWwsRk5WQUxMLCI8RVJST1I6QkFEX0RBVEU6 XFxmIixmbiwiKCk+IixOVUxMKTsKKyAgICAgICAgICAgICAgICBwID0gZm52YWw7CisgICAgICAg ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZ290byBmbmVuZDsKKyAgICB9CisjZW5kaWYgLyog Q0tGTE9BVCAqLworICAgIGlmIChjeCA9PSBGTl9DTVBEQVRFKSB7ICAgICAgICAgICAgIC8qIFxm Y21kZGF0ZXMoZDEsZDIpICovCisgICAgICAgIGludCB4ID0gMDsKKyAgICAgICAgY2hhciBkMVsx OF0sIGQyWzE4XSwgKiBkcDsKKyAgICAgICAgZmFpbGVkID0gMDsKKyAgICAgICAgZDFbMF0gPSBO VUw7CisgICAgICAgIGQyWzBdID0gTlVMOworICAgICAgICBwID0gZm52YWw7CisgICAgICAgIGRw ID0gY21jdnRkYXRlKGJwWzBdLDEpOworICAgICAgICBpZiAoZHApIHsKKyAgICAgICAgICAgIGNr c3RybmNweShkMSxkcCwxOCk7CisgICAgICAgICAgICBpZiAoKGRwID0gY21jdnRkYXRlKGJwWzFd LDEpKSkgeworICAgICAgICAgICAgICAgIGNrc3RybmNweShkMixkcCwxOCk7CisgICAgICAgICAg ICAgICAgeCA9IDE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHggPT0g MCkgeworICAgICAgICAgICAgZmFpbGVkID0gMTsKKyAgICAgICAgICAgIGlmIChmbmRpYWdzKQor ICAgICAgICAgICAgICBja21ha21zZyhmbnZhbCxGTlZBTEwsIjxFUlJPUjpCQURfREFURTpcXGYi LGZuLCIoKT4iLE5VTEwpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgeCA9IHN0cmNt cChkMSxkMik7CisgICAgICAgICAgICBpZiAoeCA+IDApCisgICAgICAgICAgICAgIHggPSAxOwor ICAgICAgICAgICAgZWxzZSBpZiAoeCA8IDApCisgICAgICAgICAgICAgIHggPSAtMTsKKyAgICAg ICAgICAgIHNwcmludGYoZm52YWwsIiVkIix4KTsKKyAgICAgICAgfQorICAgICAgICBnb3RvIGZu ZW5kOworICAgIH0KKyAgICBpZiAoY3ggPT0gRk5fVE9HTVQpIHsgICAgICAgICAgICAgICAvKiBc ZnV0Y2RhdGUoZDEpICovCisgICAgICAgIGNoYXIgKiBkMSwgKiBkcDsKKyAgICAgICAgY2hhciBk YXRlYnVmWzMyXTsKKyAgICAgICAgY2hhciBkMlszMl07CisgICAgICAgIHAgPSBmbnZhbDsKKyAg ICAgICAgZmFpbGVkID0gMTsKKyAgICAgICAgaWYgKChkcCA9IGNtY3Z0ZGF0ZShicFswXSwxKSkp IHsgLyogVGhlIGdpdmVuIGRhdGUgKi8KKyAgICAgICAgICAgIGNrc3RybmNweShkYXRlYnVmLGRw LDE4KTsKKyAgICAgICAgICAgIGNrc3RybmNweShkMixkcCwxOCk7ICAgICAgICAvKiBsb2NhbCB0 aW1lICovCisgICAgICAgICAgICBja3N0cm5jYXQoZGF0ZWJ1ZiwiWiIsMTkpOyAgLyogU2FtZSB0 aW1lIEdNVCAqLworICAgICAgICAgICAgaWYgKChkcCA9IGNtY3Z0ZGF0ZShkYXRlYnVmLDEpKSkg LyogY29udmVydGVkIHRvIGxvY2FsIHRpbWUgKi8KKyAgICAgICAgICAgICAgY2tzdHJuY3B5KGRh dGVidWYsZHAsMTgpOworICAgICAgICAgICAgaWYgKChwID0gKGNoYXIgKiljbWRpZmZkYXRlKGQy LGRhdGVidWYpKSkgeyAvKiBHZXQgb2Zmc2V0ICovCisgICAgICAgICAgICAgICAgY2tzdHJuY2F0 KGQyLHAsMzIpOyAgICAgLyogQXBwZW5kIG9mZnNldCB0byBsb2NhbCB0aW1lICovCisgICAgICAg ICAgICAgICAgaWYgKChkcCA9IGNtY3Z0ZGF0ZShkMiwxKSkpIHsKKyAgICAgICAgICAgICAgICAg ICAgZmFpbGVkID0gMDsKKyAgICAgICAgICAgICAgICAgICAgY2tzdHJuY3B5KGZudmFsLGRwLEZO VkFMTCk7CisgICAgICAgICAgICAgICAgICAgIHAgPSBmbnZhbDsKKyAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZhaWxlZCAmJiBmbmRpYWdz KQorICAgICAgICAgIGNrbWFrbXNnKGZudmFsLEZOVkFMTCwiPEVSUk9SOkJBRF9EQVRFOlxcZiIs Zm4sIigpPiIsTlVMTCk7CisgICAgICAgIGdvdG8gZm5lbmQ7CisgICAgfQorICAgIGlmIChjeCA9 PSBGTl9ERUxTRUMpIHsgICAgICAgICAgICAgIC8qIFxmZGVsdGEyc2VjcyhkZWx0YS10aW1lKSAq LworICAgICAgICBsb25nIHNlY3M7CisgICAgICAgIHAgPSBmbnZhbDsKKyAgICAgICAgaWYgKCh4 ID0gZGVsdGEyc2VjKGJwWzBdLCZzZWNzKSkgPCAwKSB7CisgICAgICAgICAgICBmYWlsZWQgPSAx OworICAgICAgICAgICAgaWYgKGZuZGlhZ3MpCisgICAgICAgICAgICAgIGNrbWFrbXNnKGZudmFs LEZOVkFMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgKHggPT0gLTEpID8KKyAgICAgICAgICAg ICAgICAgICAgICAgICAiPEVSUk9SOkJBRF9ERUxUQV9USU1FOlxcZiIgOgorICAgICAgICAgICAg ICAgICAgICAgICAgICI8RVJST1I6T1ZFUkZMT1c6XFxmIiwKKyAgICAgICAgICAgICAgICAgICAg ICAgZm4sCisgICAgICAgICAgICAgICAgICAgICAgICIoKT4iLAorICAgICAgICAgICAgICAgICAg ICAgICBOVUxMCisgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICBnb3RvIGZu ZW5kOworICAgICAgICB9CisgICAgICAgIHNwcmludGYocCwiJWxkIixzZWNzKTsKKyAgICAgICAg Z290byBmbmVuZDsKKyAgICB9CisgICAgaWYgKGN4ID09IEZOX1BDX0RVKSB7CisgICAgICAgIGNo YXIgYywgKiBzID0gYnBbMF07CisgICAgICAgIGlmICghcykgcyA9ICIiOworICAgICAgICBwID0g Zm52YWw7CisgICAgICAgIHdoaWxlICgoYyA9ICpzKyspKSB7CisgICAgICAgICAgICBpZiAoYyA9 PSAnOicpIHsKKyAgICAgICAgICAgICAgICBpZiAoKnMgIT0gJ1xcJykKKyAgICAgICAgICAgICAg ICAgICpwKysgPSAnLyc7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGMgPT0gJ1xcJykgeworICAg ICAgICAgICAgICAgICpwKysgPSAnLyc7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg ICAgICAgICpwKysgPSBjOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgICpwID0g TlVMOworICAgICAgICBwID0gZm52YWw7CisgICAgICAgIGdvdG8gZm5lbmQ7CisgICAgfQorICAg IGlmIChjeCA9PSBGTl9QQ19VRCkgeyAgICAgICAgICAgICAgIC8qIFVuaXggdG8gRE9TIHBhdGgg Ki8KKyAgICAgICAgY2hhciBjLCAqIHMgPSBicFswXTsKKyAgICAgICAgaWYgKCFzKSBzID0gIiI7 CisgICAgICAgIGlmICgqcyA9PSAnficpIHsgICAgICAgICAgICAgICAgLyogU2tpcCBsZWFkaW5n IHRpbGRlICovCisgICAgICAgICAgICBzKys7CisgICAgICAgICAgICBpZiAoKnMgPT0gJy8nKQor ICAgICAgICAgICAgICBzKys7CisgICAgICAgIH0KKyAgICAgICAgcCA9IGZudmFsOworICAgICAg ICB3aGlsZSAoKGMgPSAqcysrKSkKKyAgICAgICAgICAqcCArKyA9IChjID09ICcvJykgPyAnXFwn IDogYzsKKyAgICAgICAgKnAgPSBOVUw7CisgICAgICAgIHAgPSBmbnZhbDsKKyAgICAgICAgZ290 byBmbmVuZDsKKyAgICB9CisgICAgaWYgKGN4ID09IEZOX0tXVkFMKSB7ICAgICAgICAgICAgICAg LyogS2V5d29yZD1WYWx1ZSAqLworICAgICAgICBwID0gZG9rd3ZhbChicFswXSxicFsxXT9icFsx XToiPSIpOworICAgICAgICBnb3RvIGZuZW5kOworICAgIH0KKyNpZmRlZiBDT01NRU5UCisvKiBD dXRlIGlkZWEgYnV0IGRvZXNuJ3Qgd29yayAqLworICAgIGlmIChjeCA9PSBGTl9TTEVFUCB8fCBj eCA9PSBGTl9NU0xFRVApIHsKKyAgICAgICAgcCA9ICIiOworICAgICAgICBpZiAoY2hrbnVtKGJw WzBdKSkgeworICAgICAgICAgICAgeCA9IGF0b2koYnBbMF0pOworICAgICAgICB9IGVsc2Ugewor ICAgICAgICAgICAgZmFpbGVkID0gMTsKKyAgICAgICAgICAgIGlmIChmbmRpYWdzKSB7CisgICAg ICAgICAgICAgICAgY2ttYWttc2coZm52YWwsRk5WQUxMLAorICAgICAgICAgICAgICAgICAgICAg ICAgICI8RVJST1I6QVJHX05PVF9OVU1FUklDOlxcZiIsZm4sIigpPiIsTlVMTCk7CisgICAgICAg ICAgICAgICAgcCA9IGZudmFsOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZ290byBmbmVu ZDsKKyAgICAgICAgfQorICAgICAgICBpZiAoY3ggPT0gRk5fU0xFRVApCisgICAgICAgICAgeCAq PSAxMDAwOworICAgICAgICBtc2xlZXAoeCk7CisgICAgICAgIGdvdG8gZm5lbmQ7CisgICAgfQor I2VuZGlmIC8qIENPTU1FTlQgKi8KKworI2lmZGVmIE5UCisgICAgaWYgKGN4ID09IEZOX1NOQU1F KSB7CisgICAgICAgIEdldFNob3J0UGF0aE5hbWUoYnBbMF0sZm52YWwsRk5WQUxMKTsKKyAgICAg ICAgZ290byBmbmVuZDsKKyAgICB9CisgICAgaWYgKGN4ID09IEZOX0xOQU1FKSB7CisgICAgICAg IGNrR2V0TG9uZ1BhdGhOYW1lKGJwWzBdLGZudmFsLEZOVkFMTCk7CisgICAgICAgIGdvdG8gZm5l bmQ7CisgICAgfQorI2VuZGlmIC8qIE5UICovCisKKy8qCisgIFxmZW1haWxhZGRyZXNzKCk6Cisg IFBpY2tzIHRoZSBlbWFpbCBhZGRyZXNzIG91dCBvZiBhbiBSRkMgMjgyMiBGcm9tOiBvciBTZW5k ZXI6IGhlYWRlci4KKyAgQWRkZWQgMjYgTm92IDIwMDUuICBIYW5kbGVzIGFsbCBjb21tb24sIGFu ZCBzb21lIHVuY29tbW9uLCBjYXNlcyBidXQKKyAgZG9lc24ndCB0b3RhbGx5IGJvdGhlciBhYm91 dCBuZXN0ZWQgY29tbWVudHMuICBOZWVkZWQgdGhpcyBmb3IgZmV0Y2hpbmcKKyAgZW1haWwgZnJv bSBhIFBPUCBzZXJ2ZXIgYW5kIHRoZW4gY29uc3RydWN0aW5nIHRoZSBCU0QgIkZyb20gIiBsaW5l LgorICBXb3JrcyB3aXRoIG9yIHdpdGhvdXQgdGhlICJGcm9tOiAiIG9yICJTZW5kZXI6ICIgdGFn LgorKi8KKyAgICBpZiAoY3ggPT0gRk5fRU1BSUwpIHsKKyAgICAgICAgY2hhciBjLCAqIHMgPSBi cFswXSwgKiBzMiwgKiBzMywgKiBhcCA9ICIiOworCWludCBrLCBzdGF0ZSA9IDAsIHF1b3RlID0g MCwgaW5maWVsZCA9IDA7CisJaW50IHBjID0gMDsJCQkvKiBGb3IgbmVzdGVkIGNvbW1lbnRzICov CisgICAgICAgIGlmICghcykgcyA9ICIiOworCWlmICghKnMpIGdvdG8geGVtYWlsOworCisJaWYg KGNraW5kZXgoIkZyb206ICIscywwLDAsMCkgPT0gMSkgcyArPSA1OworCWlmIChja2luZGV4KCJT ZW5kZXI6ICIscywwLDAsMCkgPT0gMSkgcyArPSA3OworCisJayA9IHN0cmxlbihzKTsJCQkvKiBT dHJpcCBqdW5rIGZyb20gZW5kICovCisJaWYgKGsgPCAxKSBnb3RvIHhlbWFpbDsKKwlrLS07CisJ d2hpbGUgKGsgPj0gMCAmJiBzW2tdID09IENSIHx8IHNba10gPT0gTEYpCisJICBzW2stLV0gPSBO VUw7CisJd2hpbGUgKGsgPj0gMCAmJiBzW2tdID09IFNQIHx8IHNba10gPT0gSFQpCisJICBzW2st LV0gPSBOVUw7CisJaWYgKGsgPT0gMCkKKwkgIGdvdG8geGVtYWlsOworCisjaWZuZGVmIENPTU1F TlQJCQkgICAgIC8qIFNpbXBsZSBtZXRob2QgaWYgbm90IDEwMCUgZm9vbHByb29mICovCisJayA9 IDA7CisJZm9yIChzMiA9IHM7ICpzMjsgczIrKykgewkvKiBGaW5kIGF0LXNpZ24gKi8KKwkgICAg aWYgKCpzMiA9PSAnQCcpIHsKKwkJaysrOwkJCS8qIElmIG1vcmUgdGhhbiBvbmUgdXNlIHJpZ2h0 bW9zdCAqLworCQlzMyA9IHMyOworCSAgICB9CisJfQorCWlmIChrIDwgMSkJCQkvKiBObyBhdC1z aWduICovCisJICBnb3RvIHhlbWFpbDsKKworCWZvciAoYXAgPSBzMy0xOyBhcCA+PSBzOyBhcC0t KSB7IC8qIEJhY2sgdXAgdG8gYmVnaW5uaW5nIG9mIGFkZHJlc3MgKi8KKwkgICAgaWYgKGlzc3Bh Y2UoKmFwKSB8fCAqYXAgPT0gJzwnKSB7CisJCWFwKys7CisgCQlicmVhazsKKwkgICAgfQorCSAg ICBpZiAoYXAgPT0gcykKKwkgICAgICBicmVhazsKKwl9CisJZm9yIChzMiA9IHMzKzE7ICpzMjsg czIrKykgewkvKiBGaW5kIGVuZCBvZiBhZGRyZXNzICovCisJICAgIGlmIChpc3NwYWNlKCpzMikg fHwgKnMyID09ICc+JykKKwkgICAgICBicmVhazsKKwl9CisJKnMyLS0gPSBOVUw7CisJaWYgKCph cCA9PSAnWycgJiYgKnMyID09ICddJykgewkvKiBIYW5kbGUgW2JsYWhAYmxhaC5ibGFoXSAqLwor CSAgICBhcCsrOworCSAgICAqczIgPSBOVUw7CisJfQorCWlmICghY2tzdHJjbXAoYXAsIm1haWx0 bzoiLDcsMCkpIC8qIEhhbmRsZSBtYWlsdG86IFVSTHMgKi8KKwkgIGFwICs9IDc7CisKKyNlbHNl ICAvKiBUb28gY29tcGxpY2F0ZWQgYW5kIGVycm9yLXByb25lICovCisKKwlrID0gMDsKKwlmb3Ig KHMyID0gczsgKnMyOyBzMisrKSB7CS8qIFN0cmlwIGxlYWRpbmcgd2hpdGVzcGFjZSAqLworCSAg ICBpZiAoKnMyID09IFNQIHx8ICpzMiA9PSBIVCkgeworCQlrID0gMTsKKwkJYnJlYWs7CisJICAg IH0KKwl9CisJaWYgKCFrKSB7CQkJLyogU2ltcGxlIGFkZHJlc3MgKi8KKwkgICAgYXAgPSBzOwor CSAgICBnb3RvIHhlbWFpbDsKKwl9CisJZG8gewkJCQkvKiBOb3Qgc2ltcGxlLCBoYXZlIHRvIGV4 dHJhY3QgaXQgKi8KKwkgICAgaWYgKHF1b3RlKSB7CisJCXF1b3RlID0gMDsKKwkJY29udGludWU7 CisJICAgIH0gZWxzZSBpZiAoKnMgPT0gJ1xcJykgeworCQlxdW90ZSA9IDE7CisJCWNvbnRpbnVl OworCSAgICB9CisJICAgIHN3aXRjaCAoc3RhdGUpIHsKKwkgICAgICBjYXNlIDA6CisJCWlmICgh aW5maWVsZCAmJiAqcyA9PSAnIicpIHsgLyogUXVvdGVkIHN0cmluZyAqLworCQkgICAgaW5maWVs ZCA9IDE7CisJCSAgICBjID0gJyInOworCQkgICAgc3RhdGUgPSAxOworCQl9IGVsc2UgaWYgKCFp bmZpZWxkICYmICpzID09ICcoJykgeyAvKiBDb21tZW50IGluIHBhcmVucyAqLworCQkgICAgcGMr KzsKKwkJICAgIGluZmllbGQgPSAxOworCQkgICAgYyA9ICcpJzsKKwkJICAgIGlmICgqYXApICpz ID0gTlVMOworCQkgICAgc3RhdGUgPSAxOworCQl9IGVsc2UgaWYgKCFpbmZpZWxkICYmICpzID09 ICc8JykgeyAvKiBBZGRyZXNzICovCisJCSAgICBpbmZpZWxkID0gMTsKKwkJICAgIGMgPSAnPic7 CisJCSAgICBhcCA9IHMrMTsKKwkJICAgIHN0YXRlID0gMjsKKwkJfSBlbHNlIGlmIChpbmZpZWxk ICYmICgqcyA9PSBTUCB8fCAqcyA9PSBIVCkpIHsKKwkJICAgIGluZmllbGQgPSAwOworCQl9IGVs c2UgewkJLyogT25lIG9yIG1vcmUgYmFyZSB3b3JkcyAqLworCQkgICAgaW5maWVsZCA9IDE7CS8q IENvdWxkIGJlIGFuIGFkZHJlc3MgKi8KKwkJICAgIGlmICghKmFwKSBhcCA9IHM7CS8qIENvdWxk IGJlIGNvbW1lbnRzICovCisJCX0KKwkJY29udGludWU7CisJICAgICAgY2FzZSAxOgkJCS8qIElu IFF1b3RlZCBzdHJpbmcgb3IgQ29tbWVudCAqLworCQlpZiAoaW5maWVsZCAmJiAqcyA9PSBjKSB7 IC8qIExvb2sgZm9yIGVuZCAqLworCQkgICAgaW5maWVsZCA9IDA7CisJCSAgICAqcysrID0gTlVM OworCQkgICAgd2hpbGUgKCpzID09IFNQIHx8ICpzID09IEhUKSBzKys7CisJCSAgICBpZiAoISph cCkKKwkJICAgICAgYXAgPSBzOworCQkgICAgc3RhdGUgPSAwOworCQl9CisJCWNvbnRpbnVlOwor CSAgICAgIGNhc2UgMjoJCQkvKiBJbiBhZGRyZXNzICovCisJCWlmIChpbmZpZWxkICYmICpzID09 IGMpIHsgLyogTG9va2luZyBmb3IgZW5kICovCisJCSAgICBpbmZpZWxkID0gMDsKKwkJICAgICpz ID0gTlVMOworCQkgICAgYnJlYWs7CisJCX0KKwkgICAgfQorCX0gd2hpbGUgKCpzKyspOworCisg ICAgICB4ZW1haWw6CisJaWYgKCphcCkgeworCSAgICB3aGlsZSAoKmFwID09IFNQIHx8ICphcCA9 PSBIVCkgYXArKzsKKwl9CisJayA9IHN0cmxlbihhcCkgLSAxOworCXdoaWxlIChrID49IDAgJiYg KGFwW2tdID09IFNQIHx8IGFwW2tdID09IEhUKSkKKwkgIGFwW2stLV0gPSBOVUw7CisJaWYgKCph cCkgeworCSAgICBmYWlsZWQgPSAwOworCSAgICBpZiAoKmFwID09ICc8JykgeworCQlrID0gc3Ry bGVuKGFwKTsKKwkJaWYgKCooYXAray0xKSA9PSAnPicpIHsKKwkJICAgIGFwW2stMV0gPSBOVUw7 CisJCSAgICBhcCsrOworCQl9CisJICAgIH0KKwl9IGVsc2UKKwkgIGZhaWxlZCA9IDE7CisJLyog SGVyZSB3ZSBtaWdodCBhbHNvIHdhbnQgY2hlY2sgYWdhaW5zdCAiKkAqLioiICovCisjZW5kaWYJ LyogQ09NTUVOdCAqLworICAgICAgeGVtYWlsOgorCWNrc3RybmNweShmbnZhbCxhcCxGTlZBTEwp OworCWdvdG8gZm5lbmQ7CisgICAgfQorCisjaWZkZWYgU0VFS19DVVIKKy8qCisgICBcZnBpY3R1 cmUoKTogICBHZXQgZGltZW5zaW9ucyBvZiBHSUYgb3IgSlBHIGltYWdlLgorICAgZmRjIEp1bmUg MjAwNgorKi8KKyAgICBpZiAoY3ggPT0gRk5fUElDVFVSRSkgeworCUZJTEUgKmZwID0gTlVMTDsK KwlpbnQgYywgeCwgdyA9IDAsIGggPSAwLCBlb2YgPSAwOworCXVuc2lnbmVkIGludCBpLCBqLCBr OworCXVuc2lnbmVkIGNoYXIgYnVmWzEwMjRdOworCWNoYXIgYWJ1ZlsxNl0sICogcCwgKiBzOwor CWNoYXIgKiogYXAgPSBOVUxMOworCisJcCA9IGZudmFsOwkJCS8qIFBvaW50IHRvIHJlc3VsdCAq LworCWZhaWxlZCA9IDE7CQkJLyogQXNzdW1lIGZhaWx1cmUgKi8KKwlpZiAoYXJnbiA+IDEpIHsK KwkgICAgaW50IHhpOworCSAgICBja3N0cm5jcHkoYWJ1ZixicFsxXSwxNik7CS8qIEdldCBhcnJh eSByZWZlcmVuY2UgKi8KKwkgICAgcyA9IGFidWY7CisJICAgIGlmICgqcyA9PSBDTURRKSBzKys7 CisJICAgIGlmIChmbmRpYWdzKQkJLyogRGVmYXVsdCBpcyB0aGlzIGVycm9yIG1lc3NhZ2UgKi8K KwkgICAgICBja21ha21zZyhmbnZhbCxGTlZBTEwsCisJCSAgICAgICAiPEVSUk9SOkFSR19CQURf QVJSQVk6XFxmIixmbiwiKCk+IixOVUxMKTsKKwkgICAgaWYgKHNbMF0gIT0gJyYnKQkJLyogIkFk ZHJlc3MiIG9mIGFycmF5ICovCisJICAgICAgZ290byBmbmVuZDsKKwkgICAgaWYgKHNbMl0pCisJ ICAgICAgaWYgKHNbMl0gIT0gJ1snIHx8IHNbM10gIT0gJ10nKQorCQlnb3RvIGZuZW5kOworCSAg ICBpZiAoc1sxXSA+PSA2NCAmJiBzWzFdIDwgOTEpIC8qIENvbnZlcnQgdXBwZXIgdG8gbG93ZXIg Ki8KKwkgICAgICBzWzFdICs9IDMyOworCSAgICBpZiAoKHhpID0gZGNsYXJyYXkoc1sxXSwyKSkg PCAwKSAvKiBUd28gZWxlbWVudHMgKi8KKwkgICAgICBnb3RvIGZuZW5kOworCSAgICBhcCA9IGFf cHRyW3hpXTsJCS8qIFBvaW50IHRvIGFycmF5IHdlIGp1c3QgZGVjbGFyZWQgKi8KKwl9CisJcyA9 IGJwWzBdOwkJCS8qIEZpbGVuYW1lICovCisJZmFpbGVkID0gMDsJCQkvKiBGcm9tIGhlcmUgb24g d2UgZG9uJ3QgZmFpbCAqLworCXBbMF0gPSAnMCc7CQkJLyogRGVmYXVsdCByZXR1cm4gdmFsdWUg Ki8KKwlwWzFdID0gTlVMOworCWlmICghY2ttYXRjaCgiKi57anBnLGpwZWcsZ2lmfSQiLHMsMCwx KzQpKSAvKiBBcHByb3ByaWF0ZSBuYW1lPyAqLworCSAgZ290byBmbmVuZDsJCQkvKiBObywgZmFp bCAqLworCWZwID0gZm9wZW4ocywgInIiKTsJCS8qIE9wZW4gaXQgKi8KKwlpZiAoZnAgPT0gTlVM TCkgewkJLyogQ2FuJ3QsIGZhaWwgKi8KKwkgICAgcFswXSA9ICctJzsKKwkgICAgcFsxXSA9ICcx JzsKKwkgICAgcFsyXSA9IE5VTDsJCQkvKiBSZXR1cm4gLTEgKi8KKwkgICAgZ290byBmbmVuZDsK Kwl9CisJayA9IHN0cmxlbihzKTsKKwlpZiAoIWNrc3RyY21wKCZzW2stNF0sIi5naWYiLDQsMCkp IHsgLyogR0lGIGZpbGUgKi8KKwkgICAgaWYgKGZyZWFkKGJ1ZiwxLDEwLGZwKSAhPSAxMCkgewor CQlmY2xvc2UoZnApOworCQlnb3RvIGZuZW5kOworCSAgICB9CisJICAgIC8qIENoZWNrIHNpZ25h dHVyZSAqLworCSAgICBpZiAoY2tzdHJjbXAoKGNoYXIgKilidWYsIkdJRjg3YSIsNiwwKSAmJgor CQlja3N0cmNtcCgoY2hhciAqKWJ1ZiwiR0lGODlhIiw2LDApKSB7CisJCWZjbG9zZShmcCk7CisJ CWdvdG8gZm5lbmQ7CisJICAgIH0KKwkgICAgdyA9IGJ1Zls2XSArIDI1NiAqIGJ1Zls3XTsKKwkg ICAgaCA9IGJ1Zls4XSArIDI1NiAqIGJ1Zls5XTsKKwkgICAgZ290byBwaWNlbmQ7CisJfSBlbHNl IGlmICghY2tzdHJjbXAoJnNbay00XSwiLmpwZyIsNCwwKSB8fCAvKiBKUEVHIGZpbGUgKi8KKwkJ ICAgIWNrc3RyY21wKCZzW2stNV0sIi5qcGVnIiw1LDApKSB7CisJICAgIGlmIChmcmVhZChidWYs MSwyLGZwKSAhPSAyKSB7CisJCWZjbG9zZShmcCk7CisJCWdvdG8gZm5lbmQ7CisJICAgIH0KKwkg ICAgaWYgKGJ1ZlswXSAhPSAweGZmIHx8IGJ1ZlsxXSAhPSAweGQ4KSB7IC8qIENoZWNrIHNpZ25h dHVyZSAqLworCQlmY2xvc2UoZnApOworCQlnb3RvIGZuZW5kOworCSAgICB9CisJICAgIGVvZiA9 IDA7CisJICAgIHdoaWxlICghZW9mKSB7CQkvKiBMb29wIGZvciBlYWNoIG1hcmtlciAqLworCQl3 aGlsZSAoIWVvZikgewkJLyogRmluZCBuZXh0IG1hcmtlciAqLworCQkgICAgYyA9IGdldGMoZnAp OworCQkgICAgaWYgKGMgPT0gKHVuc2lnbmVkIGludClFT0YpIHsKKwkJCWVvZisrOworCQkJYnJl YWs7CisJCSAgICB9CisJCSAgICBpZiAoYyA9PSAweGZmKSB7CisJCQlidWZbMF0gPSBjOworCQkJ YyA9IGdldGMoZnApOworCQkJaWYgKGMgPT0gKHVuc2lnbmVkIGludClFT0YpIHsKKwkJCSAgICBl b2YrKzsKKwkJCSAgICBicmVhazsKKwkJCX0KKwkJCWJ1ZlsxXSA9IGM7CisJCQlpZiAoYyA9PSAw eGQ5KQorCQkJICBlb2YrKzsKKwkJCWlmIChjID49IDB4YzAgJiYgYyA8PSAweGZlKQorCQkJICBi cmVhazsKKwkJICAgIH0KKwkJfQorCQlpZiAoZW9mKSBicmVhazsKKwkJeCA9IGJ1ZlsxXTsKKwkJ aWYgKHggPT0gMHhjMCB8fCB4ID09IDB4YzEgfHwgeCA9PSAweGMyIHx8IHggPT0gMHhjMyB8fAor CQkgICAgeCA9PSAweGM5IHx8IHggPT0gMHhjYSB8fCB4ID09IDB4Y2IpIHsKKwkJICAgIGlmIChm cmVhZChidWYsMSw3LGZwKSAhPSA3KSB7CisJCQlmY2xvc2UoZnApOworCQkJZ290byBmbmVuZDsK KwkJICAgIH0KKwkJICAgIGggPSBidWZbM10gKiAyNTYgKyBidWZbNF07CisJCSAgICB3ID0gYnVm WzVdICogMjU2ICsgYnVmWzZdOworCQkgICAgZ290byBwaWNlbmQ7CisJCX0gZWxzZSB7CQkvKiBO b3QgYSBkZXNpcmVkIGZpZWxkICovCisJCSAgICBpZiAoZmVvZihmcCkpIHsKKwkJCWVvZisrOwor CQkJYnJlYWs7CisJCSAgICB9CisJCSAgICBpZiAoZnJlYWQoYnVmLDEsMixmcCkgIT0gMikgeyAv KiBMZW5ndGggb2YgdGhpcyBmaWVsZCAqLworCQkJZmNsb3NlKGZwKTsKKwkJCWdvdG8gZm5lbmQ7 CisJCSAgICB9CisJCSAgICBqID0gMjU2ICogYnVmWzBdICsgYnVmWzFdIC0gMjsgLyogU2tpcCBu ZXh0IGZpZWxkICovCisJCSAgICBpZiAoQ0tGU0VFSyhmcCwoQ0tfT0ZGX1QpaixTRUVLX0NVUikg IT0gMCkgeworCQkJZmNsb3NlKGZwKTsKKwkJCWdvdG8gZm5lbmQ7CisJCSAgICB9CisJCX0KKwkg ICAgfSAKKwl9CisgICAgICBwaWNlbmQ6CisJZmNsb3NlKGZwKTsKKwlpZiAoYXApIHsKKwkgICAg bWFrZXN0cigmKGFwWzBdKSwiMiIpOworCSAgICBtYWtlc3RyKCYoYXBbMV0pLGNraXRvYSh3KSk7 CisJICAgIG1ha2VzdHIoJihhcFsyXSksY2tpdG9hKGgpKTsKKwl9CisJaWYgKHcgPiAwICYmIGgg PiAwKSB7CisJICAgIGlmICh3ID4gaCkgcFswXSA9ICcxJzsKKwkgICAgaWYgKGggPj0gdykgcFsw XSA9ICcyJzsKKwl9CisJZ290byBmbmVuZDsKKyAgICB9CisjZW5kaWYJLyogU0VFS19DVVIgKi8K KworICAgIGlmIChjeCA9PSBGTl9QSUQpIHsKKwlpbnQgeCA9IC0xOworCWlmIChjaGtudW0oYnBb MF0pKSB7CQkvKiBOZWVkIG51bWVyaWMgYXJndW1lbnQgKi8KKwkgICAgaW50IHBpZDsKKwkgICAg cGlkID0gYXRvaShicFswXSk7CQkvKiBDb252ZXJ0IHRvIGludCAqLworI2lmZGVmIFVOSVgKKwkg ICAgaWYgKGtpbGwocGlkLDApIDwgMCkgewkvKiBUZXN0IGl0ICovCisJCWlmIChlcnJubyA9PQor I2lmZGVmIEVTUkNICisJCSAgICBFU1JDSAkJLyogTm8gc3VjaCBwcm9jZXNzICovCisjZWxzZQor CQkgICAgMworI2VuZGlmCS8qIEVTUkNIICovCisJCSAgICApCisJCSAgeCA9IDA7CisJICAgIH0g ZWxzZQkJCS8qIFByb2Nlc3MgZXhpc3RzICovCisJICAgICAgeCA9IDE7CisjZW5kaWYJLyogVU5J WCAqLworCX0KKwlzcHJpbnRmKGZudmFsLCIlZCIseCk7CQkvKiBTQUZFICovCisJZ290byBmbmVu ZDsKKyAgICB9CisKKyAgICBpZiAoY3ggPT0gRk5fRlVOQykgeworCWNoYXIgKiBzID0gYnBbMF07 CisJcCA9ICIwIjsKKyAgICAgICAgZGVidWcoRjExMSwiZmZ1bmMiLHMsYXJnbik7CisJaWYgKGFy Z24gPiAwKSB7CisJICAgIGludCB4LCB5OworCSAgICBmb3IgKHAgPSBzOyAqcDsgcCsrKSB7CS8q IENob3Agb2ZmIHRyYWlsaW5nIHBhcmVucyBpZiBhbnkgKi8KKwkJaWYgKCpwID09ICcoJykgewor CQkgICAgKnAgPSBOVUw7CisJCSAgICBicmVhazsKKwkJfQorCSAgICB9CisJICAgIC8qIENob3Ag b2ZmIGxlYWRpbmcgIlxcZiIgb3IgIlxmIiBvciAiZiIgKi8KKwkgICAgcCA9IHM7CisJICAgIGlm ICgqcCA9PSBDTURRKQkJLyogQWxsb3cgZm9yIFxcZi4uLiAqLworCSAgICAgIHArKzsKKwkgICAg aWYgKCpwID09IENNRFEgJiYgKCoocCsxKSA9PSAnZicgfHwgKihwKzEpID09ICdGJykpIHsgLyog b3IgXGYgKi8KKwkJcCArPSAyOworCSAgICB9IGVsc2UgaWYgKCpwID09ICdmJyB8fCAqcCA9PSAn RicpIHsgLyogb3IganVzdCBmICovCisJCXArKzsKKwkgICAgfQorCSAgICB5ID0gbG9va3VwKGZu Y3RhYixwLG5mdW5jcywmeCk7IC8qIExvb2sgdXAgdGhlIHJlc3VsdCAqLworCSAgICBkZWJ1ZyhG MTExLCJmZnVuYyIscCx5KTsKKwkgICAgcCA9ICh5ID4gLTEpID8gIjEiIDogIjAiOworCX0KKwln b3RvIGZuZW5kOworICAgIH0KKyAgICBpZiAoY3ggPT0gRk5fUkVDVVJTRSkgeworCWludCB0LCBu OworCWNoYXIgKiBzOworCWZudmFsWzBdID0gTlVMOwkJCS8qIERlZmF1bHQgcmVzdWx0IGlzIGVt cHR5IHN0cmluZyAqLworCXMgPSBicFswXTsJCQkvKiBDaGVjayBmb3IgbnVsbCBhcmd1bWVudCAq LworCWlmICghcykgcyA9ICIiOwkJCS8qIG9yIGVtcHR5IGFyZ3VtZW50ICovCisJaWYgKCEqcykg Z290byBmbmVuZDsJCS8qIGluIHdoaWNoIGNhc2UgcmV0dXJuIGVtcHR5IHN0cmluZyAqLworICAg ICAgICBuID0gRk5WQUxMOwkJCS8qIE5vdCBlbXB0eSwgbWF4IHNpemUgZm9yIHJlc3VsdCAqLwor ICAgICAgICBzID0gZm52YWw7CQkJLyogTG9jYXRpb24gb2YgcmVzdWx0ICovCisJeworCSAgICAv KiBGb3JjZSBWQVJJQUJMRS1FVkFMVUFUSU9OIFNJTVBMRSBSRUNVUlNJVkUgKi8KKwkgICAgLyog Tk9URTogVGhpcyBpcyB2dWxuZXJhYmxlIHRvIFNJR0lOVCBhbmQgd2hhdG5vdC4uLiAqLworCSAg ICBpbnQgdG1wID0gdmFyZXZhbDsJCS8qIFNhdmUgVkFSSUFCTEUtRVZBTFVBVElPTiBzZXR0aW5n ICovCisJICAgIHZhcmV2YWwgPSAxOwkJLyogRm9yY2UgaXQgdG8gUkVDVVJTSVZFICovCisJICAg IHp6c3RyaW5nKGJwWzBdLCZzLCZuKTsJLyogRXhwYW5kIGFyZyBpbnRvIHJlc3VsdCBzcGFjZSAq LyAKKwkgICAgdmFyZXZhbCA9IHRtcDsJCS8qIFJlc3RvcmUgVkFSSUFCTEUtRVZBTFVBVElPTiAq LworCX0KKwlnb3RvIGZuZW5kOworICAgIH0KKworICAgIGlmIChjeCA9PSBGTl9YTEFURSkgewkJ LyogZl9jdnRjc2V0KCkgKi8KKyNpZmRlZiBOT0ZSSUxMUworCWNrc3RybmNweShmbnZhbCxicFsw XSxGTlZBTEwpOwkKKyNlbHNlCisjaWZuZGVmIE5PVU5JQ09ERQorCV9QUk9UT1RZUCggY2hhciAq IGN2dHN0cmluZywgKGNoYXIgKiwgaW50LCBpbnQpICk7CisgICAgICAgIGNoYXIgKiBzdHJpbmcs ICogY3NldDEsICogY3NldDI7CisJaW50IGlkMSwgaWQyOworI2VuZGlmCS8qIE5PVU5JQ09ERSAq LworICAgICAgICBmbnZhbFswXSA9IE5VTDsJCisjaWZkZWYgTk9VTklDT0RFCisJY2tzdHJuY3B5 KGZudmFsLGJwWzBdLEZOVkFMTCk7CQorI2Vsc2UKKyAgICAgICAgc3RyaW5nID0gYnBbMF0gPyBi cFswXSA6ICIiOwkvKiBTdHJpbmcgdG8gY29udmVydCAqLworCWlmICghKnN0cmluZykgZ290byBm bmVuZDsJLyogSXQncyBlbXB0eSAqLworCisgICAgICAgIGNzZXQxID0gYnBbMV0gPyBicFsxXSA6 ICJhc2NpaSI7IC8qIEN1cnJlbnQgY2hhcnNldCBvZiBzdHJpbmcgKi8KKyAgICAgICAgY3NldDIg PSBicFsyXSA/IGJwWzJdIDogImFzY2lpIjsgLyogQ2hhcnNldCB0byBjb252ZXJ0IHRvICovCisK KwlpZDEgPSBsb29rdXAoZmNzdGFiLGNzZXQxLG5maWxjLE5VTEwpOyAvKiBMb29rdXAgJ2Zyb20n IHNldCAqLworCWlmIChpZDEgPCAwKSB7CisgICAgICAgICAgICBmYWlsZWQgPSAxOworCSAgICBj a21ha21zZyhmbnZhbCxGTlZBTEwsIjxFUlJPUjpVTktOT1dOX0NIQVJTRVQ6XFxmIixmbiwiKCk+ IixOVUxMKTsKKwkgICAgZ290byBmbmVuZDsKKyAgICAgICAgfQorCWlkMiA9IGxvb2t1cChmY3N0 YWIsY3NldDIsbmZpbGMsTlVMTCk7IC8qIExvb2t1cCAndG8nIHNldCAqLworCWlmIChpZDIgPCAw KSB7CisgICAgICAgICAgICBmYWlsZWQgPSAxOworCSAgICBja21ha21zZyhmbnZhbCxGTlZBTEws IjxFUlJPUjpVTktOT1dOX0NIQVJTRVQ6XFxmIixmbiwiKCk+IixOVUxMKTsKKwkgICAgZ290byBm bmVuZDsKKyAgICAgICAgfQorCXN0cmluZyA9IGN2dHN0cmluZyhzdHJpbmcsaWQxLGlkMik7CisJ Y2tzdHJuY3B5KGZudmFsLHN0cmluZyxGTlZBTEwpOworI2VuZGlmCS8qIE5PVU5JQ09ERSAqLwor I2VuZGlmCS8qIE5PRlJJTExTICovCisJZ290byBmbmVuZDsKKyAgICB9CisKKy8qIERlY29kZSBz dHJpbmdzIGNvbnRhaW5pbmcgaGV4IGVzY2FwZXMgKi8KKworICAgIGlmIChjeCA9PSBGTl9VTlBD VCkgewkJLyogXGZkZWNvZGVoZXgoKSAqLworICAgICAgICBjaGFyICpzMSwgKnMyOworCWNoYXIg KnByZWZpeDsJCQkvKiBDYW4gYmUgMSBvciAyIGNoYXJzICovCisJY2hhciBidWZbM107CisJaW50 IG4gPSAwLCBrOworCisJcCA9IGZudmFsOworCSpwID0gTlVMOworICAgICAgICBpZiAoYXJnbiA8 IDEpIGdvdG8gZm5lbmQ7CS8qIEVtcHR5IHN0cmluZyAqLworCisJczEgPSBicFswXSA/IGJwWzBd IDogIiI7CS8qIE9yaWdpbmFsIHN0cmluZyAqLworCXByZWZpeCA9IGJwWzFdID8gYnBbMV0gOiAi JSUiOwkvKiBIZXggYnl0ZSBwcmVmaXggKi8KKwluID0gKGludClzdHJsZW4ocHJlZml4KTsJLyog TGVuZ3RoIG9mIHByZWZpeCAqLworCWlmIChuIDwgMSB8fCBuID4gMikgewkJLyogbXVzdCBiZSAx IG9yIDIgKi8KKwkgICAgY2ttYWttc2coZm52YWwsRk5WQUxMLAorCQkgICAgICAgIjxFUlJPUjpJ TlZBTElEX0hFWF9QUkVGSVg6XFxmIixmbiwiKCk+IixOVUxMKTsKKwkgICAgZ290byB4dW5wY3Q7 CisJfQorICAgICAgICB3aGlsZSAoKnMxKSB7CisJICAgIGlmICghY2tzdHJjbXAoczEscHJlZml4 LG4sMCkpIHsgLyogQ2FzZS1pbmRlcGVuZGVudCAqLworCQlpZiAoISooczErbikpIHsKKwkJICAg IGNrbWFrbXNnKGZudmFsLEZOVkFMTCwKKwkJCSAgICAgIjxFUlJPUjpJTkNPTVBMRVRFX1NFUVVF TkNFOlxcZiIsZm4sIigpPiIsTlVMTCk7CisJCSAgICBnb3RvIHh1bnBjdDsKKwkJfQorCQlidWZb MF0gPSAqKHMxK24pOwkvKiBGaXJzdCBoZXggY2hhcmFjdGVyICovCisJCWJ1ZlsxXSA9ICooczEr bisxKTsJLyogU2Vjb25kIGhleCBjaGFyYWN0ZXIgKi8KKwkJYnVmWzJdID0gTlVMOworCQlpZiAo KGsgPSBja2hleGJ5dGV0b2ludCgoY2hhciAqKWJ1ZikpID4gLTEpIHsKKwkJICAgICpwKysgPSAo Y2hhcikgazsJLyogRGVwb3NpdCBkZWNvZGVkIHJlc3VsdCAqLworCQkgICAgczEgKz0gMituOwkJ LyogYW5kIGFkdmFuY2UgdGhlIHNvdXJjZSBwb2ludGVyICovCisJCX0gZWxzZSB7CQkvKiBGYWls IG9uIGNvbnZlcnNpb24gZXJyb3IgKi8KKwkJICAgIGNrbWFrbXNnKGZudmFsLEZOVkFMTCwKKwkJ CSAgICAgIjxFUlJPUjpOT05fSEVYX0NIQVJTOlxcZiIsZm4sIigpPiIsTlVMTCk7CisJCSAgICBn b3RvIHh1bnBjdDsKKwkJfQorCSAgICB9IGVsc2UgewkJCS8qIE5vdCBhIGhleCBlc2NhcGUgc2Vx dWVuY2UgKi8KKwkJKnArKyA9ICpzMSsrOwkJLyogSnVzdCBjb3B5IHRoZSBjaGFyYWN0ZXIgKi8K KwkgICAgfQorICAgICAgICB9CisJKnAgPSBOVUw7CQkJLyogVGVybWluYXRlIHRoZSByZXN1bHQg c3RyaW5nICovCisgICAgICAgIGZhaWxlZCA9IDA7CQkJLyogU2F5IHdlIGRpZG4ndCBmYWlsICov CisgICAgICAgIHAgPSBmbnZhbDsJCQkvKiBTZXQgdXAgcmVzdWx0IHBvaW50ZXIgKi8KKyAgICAg ICAgZ290byBmbmVuZDsJCQkvKiBhbmQgZmluaXNoICovCisKKyAgICAgIHh1bnBjdDoJCQkJLyog RXJyb3IgZXhpdCAqLworCXAgPSBmbnZhbDsKKwlmYWlsZWQgPSAxOworCWdvdG8gZm5lbmQ7Cisg ICAgfQorCisvKiBDaGVjayBhIHN0cmluZyBmb3IgZW5jb2RpbmcgZmFtaWx5ICovCisKKyAgICBp ZiAoY3ggPT0gRk5fU1RSSU5HVCkgewkJLyogXGZzdHJpbmd0eXBlKCkgKi8KKwlwID0gIlVOSyI7 CisJc3dpdGNoIChzY2Fuc3RyaW5nKGJwWzBdKSkgeworCSAgY2FzZSBGVF83QklUOiBwID0gIjdC SVQiOyBicmVhazsKKwkgIGNhc2UgRlRfOEJJVDogcCA9ICI4QklUIjsgYnJlYWs7CisJICBjYXNl IEZUX1VURjg6IHAgPSAiVVRGOCI7IGJyZWFrOworCSAgY2FzZSBGVF9VQ1MyOiBwID0gIlVDUzIi OyBicmVhazsKKwkgIGNhc2UgRlRfVEVYVDogcCA9ICJURVhUIjsgYnJlYWs7CisJICBjYXNlIEZU X0JJTjogIHAgPSAiQklOQVJZIjsgYnJlYWs7CisJfQorCWNrc3RybmNweShmbnZhbCxwLEZOVkFM TCk7CisJcCA9IGZudmFsOworCWdvdG8gZm5lbmQ7CisgICAgfQorCisvKiBTdHJpbmcgY29tcGFy ZSBzMSwgczIsIFsgY2FzZSBdLCBbIHN0YXJ0IF0gLCBbIGxlbiBdICovCisKKyAgICBpZiAoY3gg PT0gRk5fU1RSQ01QKSB7CisgICAgICAgIGludCBkb2Nhc2UgPSAwOwkJCS8qIENhc2UgbWF0dGVy cyBvciBub3QgKi8KKyAgICAgICAgaW50IHN0YXJ0ID0gMDsJCQkvKiBTdGFydCBvZiBzdWJzdHJp bmcgKi8KKwlpbnQgbGVuID0gLTE7CQkJLyogTGVuZ3RoIG9mIHN1YnN0cmluZyB0byBjb21wYXJl ICovCisJaW50IHg7IGNoYXIgKiBzMSwgKiBzMjsJCS8qIHdvcmtlcnMgKi8KKworICAgICAgICBw ID0gIjAiOwkJCS8qIFJldHVybiB2YWx1ZSAqLworICAgICAgICBpZiAoYXJnbiA9PSAwKSB7CQkv KiBUd28gbnVsbCBzdHJpbmdzIGFyZSBlcXVhbCAqLworCSAgICBja3N0cm5jcHkoZm52YWwscCxG TlZBTEwpOworCSAgICBwID0gZm52YWw7CisJICAgIGdvdG8gZm5lbmQ7CisJfQorICAgICAgICBp ZiAoYXJnbiA9PSAxKSB7CQkvKiBOb24tbnVsbCBzdHJpbmcgPiBudWxsIHN0cmluZyAqLworCSAg ICBwID0gIjEiOworCSAgICBja3N0cm5jcHkoZm52YWwscCxGTlZBTEwpOworCSAgICBwID0gZm52 YWw7CisJICAgIGdvdG8gZm5lbmQ7CisJfQorCWlmIChhcmduID4gMikgeworCSAgICBzID0gKihi cFsyXSkgPyBldmFseChicFsyXSkgOiAiMCI7IC8qIDAgPSBjYXNlbGVzcyAqLworCSAgICBpZiAo Y2hrbnVtKHMpKSBkb2Nhc2UgPSBhdG9pKHMpOworCSAgICBpZiAoYXJnbiA+IDMpIHsKKwkJcyA9 ICooYnBbM10pID8gZXZhbHgoYnBbM10pIDogIjEiOyAvKiBzdGFydCBpcyAxLWJhc2VkICovCisJ CWlmIChjaGtudW0ocykpIHN0YXJ0ID0gYXRvaShzKTsKKwkJaWYgKGFyZ24gPiA0KSB7CisJCSAg ICBzID0gKihicFs0XSkgPyBldmFseChicFs0XSkgOiAiLTEiOwkvKiAtMSA9IHdob2xlIHRoaW5n ICovCisJCSAgICBpZiAoY2hrbnVtKHMpKSBsZW4gPSBhdG9pKHMpOworCQl9CQkKKwkgICAgfSAg ICAgICAgCisJfQorCWlmIChzdGFydCA+IDApIHN0YXJ0LS07IAkvKiBzdGFydCBpcyAwLWJhc2Vk IGludGVybmFsbHkgKi8KKwlzMSA9IGJwWzBdOwkJCS8qIEdldCBsZW5ndGggb2YgZmlyc3QgYXJn ICovCisJeCA9IChpbnQpc3RybGVuKHMxKTsKKwlpZiAoeCA+IHN0YXJ0KQkJCS8qIFBvaW50IHRv IHN0YXJ0IHBvc2l0aW9uIG9mIHMxICovCisJICBzMSArPSBzdGFydDsKKwllbHNlCisJICBzMSA9 ICIiOworCXMyID0gYnBbMV07CQkJLyogR2V0IGxlbmd0aCBvZiBzZWNvbmQgYXJnICovCisJeCA9 IChpbnQpc3RybGVuKHMyKTsKKwlpZiAoeCA+IHN0YXJ0KQkJCS8qIFBvaW50IHRvIHN0YXJ0IHBv c2l0aW9uIG9mIHMyICovCisJICBzMiArPSBzdGFydDsKKwllbHNlCisJICBzMiA9ICIiOworCXgg PSBja3N0cmNtcChzLHMyLGxlbixkb2Nhc2UpOworCXAgPSBja2l0b2EoeCk7CisJY2tzdHJuY3B5 KGZudmFsLHAsRk5WQUxMKTsKKwlwID0gZm52YWw7CisJZ290byBmbmVuZDsKKyAgICB9CisKKy8q IE5vdGU6IHdoZW4gYWRkaW5nIG5ldyBmdW5jdGlvbnMgcmVtZW1iZXIgdG8gdXBkYXRlIGRvaGZ1 bmMgaW4gY2t1dXMyLmMuICovCisKKyAgICBmYWlsZWQgPSAxOworICAgIGlmIChmbmRpYWdzKQor ICAgICAgY2ttYWttc2coZm52YWwsRk5WQUxMLCI8RVJST1I6VU5LTk9XTl9GVU5DVElPTjpcXGYi LGZuLCIoKT4iLE5VTEwpOworCisgIGZuZW5kOgorICAgIC8qIEZyZWUgdGVtcG9yYXJ5IHN0b3Jh Z2UgZm9yIGFndW1lbnRzICovCisgICAgZm9yIChrID0gMDsgayA8IGFyZ247IGsrKykgaWYgKGJw W2tdKSBmcmVlKGJwW2tdKTsKKyAgICBmbmRlcHRoLS07CisgICAgaWYgKGZhaWxlZCkgeyAgICAg ICAgICAgICAgICAgICAgICAgLyogSGFuZGxlIGZhaWx1cmUgKi8KKyAgICAgICAgZGVidWcoRjEx MSwiZm5lbmQiLGZudmFsLGVycm5vKTsKKyAgICAgICAgaWYgKCFwKSBwID0gIiI7CisgICAgICAg IGlmIChwWzBdKSB7CisgICAgICAgICAgICAvKiBJbiBjYXNlIHRoaXMgd2Fzbid0IGNhdWdodCBh Ym92ZS4uLiAqLworICAgICAgICAgICAgayA9IHN0cmxlbihwKTsKKyAgICAgICAgICAgIGlmIChw WzBdICE9ICc8JyAmJiBwW2stMV0gIT0gJz4nKSB7CisgICAgICAgICAgICAgICAgY2ttYWttc2co Zm52YWwsRk5WQUxMLCI8RVJST1I6QkFEX0FSRzpcXGYiLGZuLCIoKT4iLE5VTEwpOworICAgICAg ICAgICAgICAgIHAgPSBmbnZhbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAg ICAgICAgICAgIGNrbWFrbXNnKGZudmFsLEZOVkFMTCwiPEVSUk9SOlVOS05PV046XFxmIixmbiwi KCk+IixOVUxMKTsKKyAgICAgICAgICAgIHAgPSBmbnZhbDsKKyAgICAgICAgfQorICAgICAgICBp ZiAoZm5lcnJvcikgICAgICAgICAgICAgICAgICAgIC8qIFNFVCBGVU5DVElPTiBFUlJPUiBPTiAq LworICAgICAgICAgIGZuc3VjY2VzcyA9IDA7ICAgICAgICAgICAgICAgIC8qIE1ha2UgY29tbWFu ZCBmYWlsIChzZWUgY2t1dXM1LmMpICovCisgICAgICAgIGRlYnVnKEYxMTEsImZuZXZhbCBmYWls ZWQiLHAsZm5zdWNjZXNzKTsKKyAgICAgICAgaWYgKGZuZGlhZ3MpICAgICAgICAgICAgICAgICAg ICAvKiBTRVQgRlVOQ1RJT04gRElBR05PU1RJQ1MgT04gKi8KKyAgICAgICAgICBwcmludGYoIj8l c1xuIixwKTsgICAgICAgICAgICAvKiBQcmludCBlcnJvciBtZXNzYWdlIG5vdy4gKi8KKyAgICAg ICAgZWxzZQorICAgICAgICAgIHJldHVybigiIik7ICAgICAgICAgICAgICAgICAgIC8qIFJldHVy biBub3RoaW5nLiAqLworICAgIH0KKyAgICByZXR1cm4ocCk7Cit9CisjZW5kaWYgLyogTk9TUEwg Ki8KKworc3RhdGljIGNoYXIgY2twaWRidWZbMzJdID0gIj8/Pz8iOworCisjaWZkZWYgVk1TCitf UFJPVE9UWVAobG9uZyB6Z3BpZCwodm9pZCkpOworI2VuZGlmIC8qIFZNUyAqLworCitjaGFyICoK K2NrZ2V0cGlkKCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXR1cm4gcGlkIGFz IHN0cmluZyAqLworI2lmZGVmIENLX1BJRAorI2lmZGVmIE9TMgorI2RlZmluZSBnZXRwaWQgX2dl dHBpZAorICAgIHVuc2lnbmVkIGxvbmcgeno7CisjZWxzZQorICAgIGxvbmcgeno7CisjZW5kaWYg LyogT1MyICovCisjaWZkZWYgVk1TCisgICAgenogPSB6Z3BpZCgpOworI2Vsc2UKKyAgICB6eiA9 IGdldHBpZCgpOworI2VuZGlmIC8qIFZNUyAqLworICAgIHNwcmludGYoY2twaWRidWYsIiVsZCIs enopOyAgICAgICAgIC8qIFNBRkUgKi8KKyNlbmRpZiAvKiBDS19QSUQgKi8KKyAgICByZXR1cm4o KGNoYXIgKilja3BpZGJ1Zik7Cit9CisKKyNpZm5kZWYgTk9TUEwKKyNkZWZpbmUgRU1CVUZMRU4g MTI4ICAgICAgICAgICAgICAgICAgICAvKiBFcnJvciBtZXNzYWdlIGJ1ZmZlciBsZW5ndGggKi8K Kworc3RhdGljIGNoYXIgZW1idWZbRU1CVUZMRU4rMV07CisKK2NoYXIgKiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBFdmFsdWF0ZSBidWlsdGluIHZhcmlhYmxlICovCitudmxv b2socykgY2hhciAqczsgeworICAgIGludCB4LCB5LCBjeDsKKyAgICBsb25nIHo7CisgICAgY2hh ciAqcDsKKyNpZm5kZWYgTk9ESUFMCisgICAgTURNSU5GICogbTsKKyNlbmRpZiAvKiBOT0RJQUwg Ki8KKyNpZm5kZWYgTk9LVkVSQlMgICAgICAgICAgICAgICAgICAgICAgICAvKiBLZXlib2FyZCBt YWNybyBtYXRlcmlhbCAqLworICAgIGV4dGVybiBpbnQga2V5bWFjLCBrZXltYWN4OworI2VuZGlm IC8qIE5PS1ZFUkJTICovCisjaWZkZWYgQ0tfTE9HSU4KKyAgICBleHRlcm4gaW50IGlzZ3Vlc3Q7 CisjZW5kaWYgLyogQ0tfTE9HSU4gKi8KKyAgICBpZiAoIXMpIHMgPSAiIjsKKyAgICB4ID0gc3Ry bGVuKHMpOworICAgIGlmIChmbmRpYWdzKSB7ICAgICAgICAgICAgICAgICAgICAgIC8qIEZVTkNU SU9OIERJQUdOT1NUSUMgT04gKi8KKyAgICAgICAgaWYgKHggKyAzMiA8IEVNQlVGTEVOKQorICAg ICAgICAgIHNwcmludGYoZW1idWYsIjxFUlJPUjpOT19TVUNIX1ZBUklBQkxFOlxcdiglcyk+Iixz KTsgLyogU0FGRSAqLworICAgICAgICBlbHNlCisgICAgICAgICAgc3ByaW50ZihlbWJ1ZiwiPEVS Uk9SOk5PX1NVQ0hfVkFSSUFCTEU+Iik7IC8qIFNBRkUgKi8KKyAgICB9IGVsc2UgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBGVU5DVElPTiBESUFHTk9TVElDIE9GRiAqLworICAgICAg ZW1idWZbMF0gPSBOVUw7CisgICAgeCA9IFZWQlVGTDsKKyAgICBwID0gdnZidWY7CisgICAgaWYg KHp6c3RyaW5nKHMsJnAsJngpIDwgMCkgeyAgICAgICAgLyogZS5nLiBmb3IgXHYoXCVhKSAqLwor ICAgICAgICB5ID0gLTE7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcyA9IHZ2YnVmOworICAgICAg ICB5ID0gbG9va3VwKHZhcnRhYixzLG52YXJzLCZ4KTsKKyAgICB9CisgICAgY3ggPSB5OyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogeSBpcyB0b28gZ2VuZXJpYyAqLworI2lmbmRlZiBO T0RJQUwKKyAgICBtID0gKG1kbXR5cCA+IDApID8gbW9kZW1wW21kbXR5cF0gOiBOVUxMOyAvKiBG b3IgXHYobV94eHgpIHZhcmlhYmxlcyAqLworI2VuZGlmIC8qIE5PRElBTCAqLworCisgICAgZGVi dWcoRjEwMSwibnZsb29rIHkiLCIiLHkpOworCisgICAgc3dpdGNoICh5KSB7CisgICAgICBjYXNl IFZOX0FSR0M6ICAgICAgICAgICAgICAgICAgICAgLyogQVJHQyAqLworICAgICAgICBzcHJpbnRm KHZ2YnVmLCIlZCIsbWFjbHZsIDwgMCA/IHRvcGFyZ2MgOiBtYWNhcmdjW21hY2x2bF0pOyAvKiBT QUZFICovCisgICAgICAgIHJldHVybih2dmJ1Zik7CisKKyAgICAgIGNhc2UgVk5fQVJHUzogICAg ICAgICAgICAgICAgICAgICAvKiBBUkdTICovCisgICAgICAgIHNwcmludGYodnZidWYsIiVkIix4 YXJncyk7ICAgICAgLyogU0FGRSAqLworICAgICAgICByZXR1cm4odnZidWYpOworCisgICAgICBj YXNlIFZOX0NPVU46ICAgICAgICAgICAgICAgICAgICAgLyogQ09VTlQgKi8KKyAgICAgICAgc3By aW50Zih2dmJ1ZiwiJWQiLGNvdW50W2NtZGx2bF0pOyAvKiBTQUZFICovCisgICAgICAgIHJldHVy bih2dmJ1Zik7CisKKyAgICAgIGNhc2UgVk5fREFURTogICAgICAgICAgICAgICAgICAgICAvKiBE QVRFICovCisgICAgICAgIHp0aW1lKCZwKTsgICAgICAgICAgICAgICAgICAgICAgLyogR2V0ICJh c2N0aW1lIiBzdHJpbmcgKi8KKyAgICAgICAgaWYgKHAgPT0gTlVMTCB8fCAqcCA9PSBOVUwpIHJl dHVybihOVUxMKTsKKyAgICAgICAgdnZidWZbMF0gPSBwWzhdOyAgICAgICAgICAgICAgICAvKiBk ZCAqLworICAgICAgICB2dmJ1ZlsxXSA9IHBbOV07CisgICAgICAgIHZ2YnVmWzJdID0gU1A7Cisg ICAgICAgIHZ2YnVmWzNdID0gcFs0XTsgICAgICAgICAgICAgICAgLyogbW1tICovCisgICAgICAg IHZ2YnVmWzRdID0gcFs1XTsKKyAgICAgICAgdnZidWZbNV0gPSBwWzZdOworICAgICAgICB2dmJ1 Zls2XSA9IFNQOworICAgICAgICBmb3IgKHggPSAyMDsgeCA8IDI0OyB4KyspICAgICAgIC8qIHl5 eXkgKi8KKyAgICAgICAgICB2dmJ1Zlt4IC0gMTNdID0gcFt4XTsKKyAgICAgICAgdnZidWZbMTFd ID0gTlVMOworICAgICAgICByZXR1cm4odnZidWYpOworCisgICAgICBjYXNlIFZOX05EQVQ6ICAg ICAgICAgICAgICAgICAgICAgLyogTnVtZXJpYyBkYXRlICovCisgICAgICAgIGNrc3RybmNweSh2 dmJ1Zix6em5kYXRlKCksVlZCVUZMKTsKKyAgICAgICAgcmV0dXJuKHZ2YnVmKTsKKworICAgICAg Y2FzZSBWTl9ESVJFOiAgICAgICAgICAgICAgICAgICAgIC8qIERJUkVDVE9SWSAqLworICAgICAg ICBzID0gemd0ZGlyKCk7ICAgICAgICAgICAgICAgICAgIC8qIEdldCBjdXJyZW50IGRpcmVjdG9y eSAqLworICAgICAgICBpZiAoIXMpCisjaWZkZWYgVU5JWE9ST1NLCisgICAgICAgICAgcyA9ICIu LyI7CisjZWxzZQorI2lmZGVmIFZNUworICAgICAgICAgIHMgPSAiW10iOworI2Vsc2UKKyAgICAg ICAgICBzID0gIiI7CisjZW5kaWYgLyogVk1TICovCisjZW5kaWYgLyogVU5JWE9ST1NLICovCisg ICAgICAgIGNrc3RybmNweSh2dmJ1ZixzLFZWQlVGTCk7CisgICAgICAgIHMgPSB2dmJ1ZjsKKyNp ZmRlZiBVTklYT1JPU0sKKyAgICAgICAgeCA9IHN0cmxlbihzKTsKKyAgICAgICAgaWYgKHggPCBW VkJVRkwgLSAxKSB7CisgICAgICAgICAgICBpZiAoc1t4LTFdICE9ICcvJykgeworICAgICAgICAg ICAgICAgIHNbeF0gPSAnLyc7CisgICAgICAgICAgICAgICAgc1t4KzFdID0gTlVMOworICAgICAg ICAgICAgfQorICAgICAgICB9CisjZW5kaWYgLyogVU5JWE9ST1NLICovCisgICAgICAgIHJldHVy bihzKTsKKworICAgICAgY2FzZSBWTl9GSUxFOiAgICAgICAgICAgICAgICAgICAgIC8qIGZpbGVz cGVjICovCisgICAgICAgIHJldHVybihmc3BlYyk7CisKKyAgICAgIGNhc2UgVk5fSE9TVDogICAg ICAgICAgICAgICAgICAgICAvKiBob3N0IG5hbWUgKi8KKyAgICAgICAgaWYgKCpteWhvc3QpIHsg ICAgICAgICAgICAgICAgICAvKiBJZiBrbm93biAqLworICAgICAgICAgICAgcmV0dXJuKG15aG9z dCk7ICAgICAgICAgICAgIC8qIHJldHVybiBpdC4gKi8KKyAgICAgICAgfSBlbHNlIHsgICAgICAg ICAgICAgICAgICAgICAgICAvKiBPdGhlcndpc2UgKi8KKyAgICAgICAgICAgIGNrc3RybmNweSh2 dmJ1ZiwidW5rbm93biIsVlZCVUZMKTsgLyoganVzdCBzYXkgInVua25vd24iICovCisgICAgICAg ICAgICByZXR1cm4odnZidWYpOworICAgICAgICB9CisKKyAgICAgIGNhc2UgVk5fU1lTVDogICAg ICAgICAgICAgICAgICAgICAvKiBTeXN0ZW0gdHlwZSAqLworI2lmZGVmIFVOSVgKKyAgICAgICAg Y2tzdHJuY3B5KHZ2YnVmLCJVTklYIixWVkJVRkwpOworI2Vsc2UKKyNpZmRlZiBWTVMKKyAgICAg ICAgY2tzdHJuY3B5KHZ2YnVmLCJWTVMiLFZWQlVGTCk7CisjZWxzZQorI2lmZGVmIE9TSworICAg ICAgICBja3N0cm5jcHkodnZidWYsIk9TOS82OEsiLFZWQlVGTCk7CisjZWxzZQorI2lmZGVmIEFN SUdBCisgICAgICAgIGNrc3RybmNweSh2dmJ1ZiwiQW1pZ2EiLFZWQlVGTCk7CisjZWxzZQorI2lm ZGVmIE1BQworICAgICAgICBja3N0cm5jcHkodnZidWYsIk1hY2ludG9zaCIsVlZCVUZMKTsKKyNl bHNlCisjaWZkZWYgT1MyCisjaWZkZWYgTlQKKyAgICAgICAgY2tzdHJuY3B5KHZ2YnVmLCJXSU4z MiIsVlZCVUZMKSA7CisjZWxzZSAvKiBOVCAqLworICAgICAgICBja3N0cm5jcHkodnZidWYsIk9T LzIiLFZWQlVGTCk7CisjZW5kaWYgLyogTlQgKi8KKyNlbHNlCisjaWZkZWYgZGF0YWdlbmVyYWwK KyAgICAgICAgY2tzdHJuY3B5KHZ2YnVmLCJBT1MvVlMiLFZWQlVGTCk7CisjZWxzZQorI2lmZGVm IEdFTURPUworICAgICAgICBja3N0cm5jcHkodnZidWYsIkF0YXJpX1NUIixWVkJVRkwpOworI2Vs c2UKKyNpZmRlZiBTVFJBVFVTCisgICAgICAgIGNrc3RybmNweSh2dmJ1ZiwiU3RyYXR1c19WT1Mi LFZWQlVGTCk7CisjZWxzZQorICAgICAgICBja3N0cm5jcHkodnZidWYsInVua25vd24iLFZWQlVG TCk7CisjZW5kaWYgLyogU1RSQVRVUyAqLworI2VuZGlmIC8qIEdFTURPUyAqLworI2VuZGlmIC8q IGRhdGFnZW5lcmFsICovCisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogTUFDICovCisjZW5k aWYgLyogQU1JR0EgKi8KKyNlbmRpZiAvKiBPU0sgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKyNlbmRp ZiAvKiBVTklYICovCisgICAgICAgIHJldHVybih2dmJ1Zik7CisKKyAgICAgIGNhc2UgVk5fU1lT VjogICAgICAgICAgICAgICAgICAgICAvKiBTeXN0ZW0gaGVyYWxkICovCisjaWZkZWYgSUtTRAor I2lmZGVmIENLX0xPR0lOCisgICAgICAgIGlmIChpbnNlcnZlciAmJiBpc2d1ZXN0KQorICAgICAg ICAgIHJldHVybigiIik7CisjZW5kaWYgLyogQ0tfTE9HSU4gKi8KKyNlbmRpZiAvKiBJS1NEICov CisgICAgICAgIGZvciAoeCA9IHkgPSAwOyB4IDwgVlZCVUZMOyB4KyspIHsKKyAgICAgICAgICAg IGlmIChja3hzeXNbeF0gPT0gU1AgJiYgeSA9PSAwKSBjb250aW51ZTsKKyAgICAgICAgICAgIHZ2 YnVmW3krK10gPSAoY2hhcikgKChja3hzeXNbeF0gPT0gU1ApID8gJ18nIDogY2t4c3lzW3hdKTsK KyAgICAgICAgfQorICAgICAgICB2dmJ1Zlt5XSA9IE5VTDsKKyAgICAgICAgcmV0dXJuKHZ2YnVm KTsKKyAgICB9IC8qIEJyZWFrIHVwIGxvbmcgc3dpdGNoIHN0YXRlbWVudHMuLi4gKi8KKworICAg IHN3aXRjaCh5KSB7CisgICAgICBjYXNlIFZOX1RJTUU6ICAgICAgICAgICAgICAgICAgICAgLyog VElNRS4gQXNzdW1lcyB0aGF0IHp0aW1lIHJldHVybnMgKi8KKyAgICAgICAgenRpbWUoJnApOyAg ICAgICAgICAgICAgICAgICAgICAvKiAiVGh1IEZlYiAgOCAxMjowMDowMCAxOTkwIiAqLworICAg ICAgICBpZiAocCA9PSBOVUxMIHx8ICpwID09IE5VTCkgICAgIC8qIGxpa2UgYXNjdGltZSgpISAq LworICAgICAgICAgIHJldHVybigiIik7CisgICAgICAgIGZvciAoeCA9IDExOyB4IDwgMTk7IHgr KykgICAgICAgLyogY29weSBoaDptbTpzcyAqLworICAgICAgICAgIHZ2YnVmW3ggLSAxMV0gPSBw W3hdOyAgICAgICAgIC8qIHRvIHZ2YnVmICovCisgICAgICAgIHZ2YnVmWzhdID0gTlVMOyAgICAg ICAgICAgICAgICAgLyogdGVybWluYXRlICovCisgICAgICAgIHJldHVybih2dmJ1Zik7ICAgICAg ICAgICAgICAgICAgLyogYW5kIHJldHVybiBpdCAqLworCisgICAgICBjYXNlIFZOX05USU06ICAg ICAgICAgICAgICAgICAgICAgLyogTnVtZXJpYyB0aW1lICovCisgICAgICAgIHp0aW1lKCZwKTsg ICAgICAgICAgICAgICAgICAgICAgLyogIlRodSBGZWIgIDggMTI6MDA6MDAgMTk5MCIgKi8KKyAg ICAgICAgaWYgKHAgPT0gTlVMTCB8fCAqcCA9PSBOVUwpICAgICAvKiBsaWtlIGFzY3RpbWUoKSEg Ki8KKyAgICAgICAgICByZXR1cm4oTlVMTCk7CisgICAgICAgIHogPSBhdG9sKHArMTEpICogMzYw MEwgKyBhdG9sKHArMTQpICogNjBMICsgYXRvbChwKzE3KTsKKyAgICAgICAgc3ByaW50Zih2dmJ1 ZiwiJWxkIix6KTsgICAgICAgICAvKiBTQUZFICovCisgICAgICAgIHJldHVybih2dmJ1Zik7CisK KyNpZmRlZiBDS19UVFlGRAorICAgICAgY2FzZSBWTl9UVFlGOiAgICAgICAgICAgICAgICAgICAg IC8qIFRUWSBmaWxlIGRlc2NyaXB0b3IgKi8KKyAgICAgICAgc3ByaW50Zih2dmJ1ZiwiJWQiLCAg ICAgICAgICAgICAvKiBTQUZFICovCisjaWZkZWYgVk1TCisgICAgICAgICAgICAgICAgdm1zdHR5 ZmQoKQorI2Vsc2UKKyAgICAgICAgICAgICAgICB0dHlmZAorI2VuZGlmIC8qIFZNUyAqLworICAg ICAgICAgICAgICAgICk7CisgICAgICAgIHJldHVybih2dmJ1Zik7CisjZW5kaWYgLyogQ0tfVFRZ RkQgKi8KKworICAgICAgY2FzZSBWTl9WRVJTOiAgICAgICAgICAgICAgICAgICAgIC8qIE51bWVy aWMgS2VybWl0IHZlcnNpb24gbnVtYmVyICovCisgICAgICAgIHNwcmludGYodnZidWYsIiVsZCIs dmVybnVtKTsgICAgLyogU0FGRSAqLworICAgICAgICByZXR1cm4odnZidWYpOworCisgICAgICBj YXNlIFZOX1hWTlVNOiAgICAgICAgICAgICAgICAgICAgLyogUHJvZHVjdC1zcGVjaWZpYyB2ZXJz aW9uIG51bWJlciAqLworICAgICAgICBzcHJpbnRmKHZ2YnVmLCIlbGQiLHh2ZXJudW0pOyAgIC8q IFNBRkUgKi8KKyAgICAgICAgcmV0dXJuKHZ2YnVmKTsKKworICAgICAgY2FzZSBWTl9IT01FOiAg ICAgICAgICAgICAgICAgICAgIC8qIEhvbWUgZGlyZWN0b3J5ICovCisgICAgICAgIHJldHVybiho b21lcGF0aCgpKTsKKworICAgICAgY2FzZSBWTl9JQlVGOiAgICAgICAgICAgICAgICAgICAgIC8q IElOUFVUIGJ1ZmZlciAqLworICAgICAgICByZXR1cm4oKGNoYXIgKilpbnBidWYpOworCisgICAg ICBjYXNlIFZOX0lDSFI6ICAgICAgICAgICAgICAgICAgICAgLyogSU5QVVQgY2hhcmFjdGVyICov CisgICAgICAgIGluY2hhclsxXSA9IE5VTDsKKyAgICAgICAgcmV0dXJuKChjaGFyICopaW5jaGFy KTsKKworICAgICAgY2FzZSBWTl9JQ05UOiAgICAgICAgICAgICAgICAgICAgIC8qIElOUFVUIGNo YXJhY3RlciBjb3VudCAqLworICAgICAgICBzcHJpbnRmKHZ2YnVmLCIlZCIsaW5jb3VudCk7ICAg IC8qIFNBRkUgKi8KKyAgICAgICAgcmV0dXJuKHZ2YnVmKTsKKworICAgICAgY2FzZSBWTl9TUEVF OiB7ICAgICAgICAgICAgICAgICAgIC8qIFRyYW5zbWlzc2lvbiBTUEVFRCAqLworICAgICAgICAg IGxvbmcgdDsKKyAgICAgICAgICB0ID0gdHRnc3BkKCk7CisgICAgICAgICAgaWYgKHQgPCAwTCkK KyAgICAgICAgICAgIHNwcmludGYodnZidWYsInVua25vd24iKTsgICAvKiBTQUZFICovCisgICAg ICAgICAgZWxzZQorICAgICAgICAgICAgc3ByaW50Zih2dmJ1ZiwiJWxkIix0KTsgICAgIC8qIFNB RkUgKi8KKyAgICAgICAgICByZXR1cm4odnZidWYpOworICAgICAgfQorCisgICAgICBjYXNlIFZO X1NVQ0M6ICAgICAgICAgICAgICAgICAgICAgLyogU1VDQ0VTUyBmbGFnICovCisgICAgICAgIC8q IE5vdGUgaW52ZXJ0ZWQgc2Vuc2UgKi8KKyAgICAgICAgc3ByaW50Zih2dmJ1ZiwiJWQiLChzdWNj ZXNzID09IDApID8gMSA6IDApOyAvKiBTQUZFICovCisgICAgICAgIHJldHVybih2dmJ1Zik7CisK KyAgICAgIGNhc2UgVk5fTElORTogeyAgICAgICAgICAgICAgICAgICAvKiBMSU5FICovCisjaWZk ZWYgREVCVUcKKyAgICAgICAgICBpZiAoZGVibG9nKSB7CisgICAgICAgICAgICAgIGRlYnVnKEYx MTEsIlxcdihsaW5lKSBsb2NhbCIsdHRuYW1lLGxvY2FsKTsKKyAgICAgICAgICAgICAgZGVidWco RjExMSwiXFx2KGxpbmUpIGluc2VydmVyIiwiIixpbnNlcnZlcik7CisjaWZkZWYgVE5DT0RFCisg ICAgICAgICAgICAgIGRlYnVnKEYxMTEsIlxcdihsaW5lKSB0Y3BfaW5jb21pbmciLCIiLHRjcF9p bmNvbWluZyk7CisjZW5kaWYgLyogVE5DT0RFICovCisjaWZkZWYgQ0tfVEFQSQorICAgICAgICAg ICAgICBkZWJ1ZyhGMTExLCJcXHYobGluZSkgdHR0YXBpIiwiIix0dHRhcGkpOworI2VuZGlmIC8q IENLX1RBUEkgKi8KKyAgICAgICAgICB9CisjZW5kaWYgLyogREVCVUcgKi8KKworI2lmZGVmIENL X1RBUEkKKyAgICAgICAgICBpZiAodHR0YXBpKSB7ICAgICAgICAgICAgICAgICAvKiBJZiBJIGhh dmUgbWFkZSBhIFRBUEkgY29ubmVjdGlvbiAqLworICAgICAgICAgICAgICBpbnQgaTsgICAgICAg ICAgICAgICAgICAgIC8qIHJldHVybiB0aGUgVEFQSSBkZXZpY2UgbmFtZSAqLworICAgICAgICAg ICAgICBmb3IgKGkgPSAwOyBpIDwgbnRhcGlsaW5lOyBpKyspIHsKKyAgICAgICAgICAgICAgICAg IGlmICghc3RyY21wKHR0bmFtZSx0YXBpbGluZXRhYltpXS5rd2QpKSB7CisgICAgICAgICAgICAg ICAgICAgICAgcCA9IF90YXBpbGluZXRhYltpXS5rd2Q7CisgICAgICAgICAgICAgICAgICAgICAg cmV0dXJuKHApOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9CisgICAgICAg ICAgfQorI2VuZGlmIC8qIENLX1RBUEkgKi8KKyNpZm5kZWYgTk9YRkVSCisgICAgICAgICAgaWYg KGluc2VydmVyICAgICAgICAgICAgICAgICAgLyogSWYgSSBhbSBhIFRDUCBzZXJ2ZXIgKi8KKyNp ZmRlZiBUTkNPREUKKyAgICAgICAgICAgICAgfHwgdGNwX2luY29taW5nCisjZW5kaWYgLyogVE5D T0RFICovCisgICAgICAgICAgICAgICkKKyNpZmRlZiBUQ1BTT0NLRVQKKyAgICAgICAgICAgIHAg PSBja2dldHBlZXIoKTsgICAgICAgICAgICAvKiByZXR1cm4gcGVlciBuYW1lICovCisgICAgICAg ICAgZWxzZQorI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLworI2VuZGlmIC8qIE5PWEZFUiAqLworICAg ICAgICAgIGlmIChsb2NhbCkgICAgICAgICAgICAgICAgICAgIC8qIE90aGVyd2lzZSBpZiBpbiBs b2NhbCBtb2RlICovCisgICAgICAgICAgICBwID0gKGNoYXIgKikgdHRuYW1lOyAgICAgICAgLyog cmV0dXJuIFNFVCBMSU5FIC8gU0VUIEhPU1QgbmFtZSAqLworICAgICAgICAgIGVsc2UgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIE90aGVyd2lzZSAqLworICAgICAgICAgICAgcCA9ICIiOyAg ICAgICAgICAgICAgICAgICAgIC8qIHJldHVybiBlbXB0eSBzdHJpbmcgKi8KKyAgICAgICAgICBp ZiAoIXApICAgICAgICAgICAgICAgICAgICAgICAvKiBJbiBjYXNlIGNrZ2V0cGVlcigpIHJldHVy bnMgKi8KKyAgICAgICAgICAgIHAgPSAiIjsgICAgICAgICAgICAgICAgICAgICAvKiBudWxsIHBv aW50ZXIuLi4gKi8KKyAgICAgICAgICBkZWJ1ZyhGMTEwLCJcXHYobGluZSkgcCIscCwwKTsKKyAg ICAgICAgICBpZiAoISpwKQorICAgICAgICAgICAgcCA9IChjaGFyICopIHR0bmFtZTsKKyAgICAg ICAgICByZXR1cm4ocCk7CisgICAgICB9CisgICAgICBjYXNlIFZOX1BST0c6ICAgICAgICAgICAg ICAgICAgICAgLyogUHJvZ3JhbSBuYW1lICovCisgICAgICAgIHJldHVybigiQy1LZXJtaXQiKTsK KworICAgIH0gLyogQnJlYWsgdXAgbG9uZyBzd2l0Y2ggc3RhdGVtZW50cy4uLiAqLworCisgICAg c3dpdGNoKHkpIHsKKyAgICAgIGNhc2UgVk5fUkVUOiAgICAgICAgICAgICAgICAgICAgICAvKiBW YWx1ZSBvZiBtb3N0IHJlY2VudCBSRVRVUk4gKi8KKyAgICAgICAgZGVidWcoRjExMSwiXFx2KHJl dHVybikiLG1ydmFsW21hY2x2bCsxXSxtYWNsdmwrMSk7CisgICAgICAgIHAgPSBtcnZhbFttYWNs dmwrMV07CisgICAgICAgIGlmIChwID09IE5VTEwpIHAgPSAiIjsKKyAgICAgICAgcmV0dXJuKHAp OworCisgICAgICBjYXNlIFZOX0ZGQzogICAgICAgICAgICAgICAgICAgICAgLyogU2l6ZSBvZiBt b3N0IHJlY2VudCBmaWxlICovCisgICAgICAgIHNwcmludGYodnZidWYsICIlcyIsIGNrZnN0b2Eo ZmZjKSk7IC8qIFNBRkUgKi8KKyAgICAgICAgcmV0dXJuKHZ2YnVmKTsKKworICAgICAgY2FzZSBW Tl9URkM6ICAgICAgICAgICAgICAgICAgICAgIC8qIFNpemUgb2YgbW9zdCByZWNlbnQgZmlsZSBn cm91cCAqLworICAgICAgICBzcHJpbnRmKHZ2YnVmLCAiJXMiLCBja2ZzdG9hKHRmYykpOyAvKiBT QUZFICovCisgICAgICAgIHJldHVybih2dmJ1Zik7CisKKyAgICAgIGNhc2UgVk5fQ1BVOiAgICAg ICAgICAgICAgICAgICAgICAvKiBDUFUgdHlwZSAqLworI2lmZGVmIElLU0QKKyNpZmRlZiBDS19M T0dJTgorICAgICAgICBpZiAoaW5zZXJ2ZXIgJiYgaXNndWVzdCkKKyAgICAgICAgICByZXR1cm4o IiIpOworI2VuZGlmIC8qIENLX0xPR0lOICovCisjZW5kaWYgLyogSUtTRCAqLworI2lmZGVmIE9T MgorICAgICAgICAgeworICAgICAgICAgICAgY2hhciAqIGdldGNwdSh2b2lkKSA7CisgICAgICAg ICAgICByZXR1cm4gZ2V0Y3B1KCk7CisgICAgICAgICB9CisjZWxzZSAvKiBPUzIgKi8KKyNpZmRl ZiBDS0NQVQorICAgICAgICByZXR1cm4oQ0tDUFUpOyAgICAgICAgICAgICAgICAgIC8qIFRyYWRp dGlvbmFsbHksIGNvbXBpbGUtdGltZSB2YWx1ZSAqLworI2Vsc2UKKyNpZmRlZiBDS19VVFNOQU1F CisgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQnV0IGlmIG5vbmUs IHRyeSBydW50aW1lIHZhbHVlICovCisgICAgICAgICAgICBleHRlcm4gY2hhciB1bm1fbWNoW107 CisgICAgICAgICAgICByZXR1cm4oKGNoYXIgKil1bm1fbWNoKTsKKyAgICAgICAgfQorI2Vsc2UK KyAgICAgICAgcCA9IGdldGVudigiSE9TVFRZUEUiKTsJCS8qIDIwMDkxMTE2ICovCisJaWYgKHAp IGlmICgqcCkgcmV0dXJuKHApOworICAgICAgICByZXR1cm4oInVua25vd24iKTsKKyNlbmRpZiAv KiBDS19VVFNOQU1FICovCisjZW5kaWYgLyogQ0tDUFUgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKwor ICAgICAgY2FzZSBWTl9DTURMOiAgICAgICAgICAgICAgICAgICAgIC8qIENvbW1hbmQgbGV2ZWwg Ki8KKyAgICAgICAgc3ByaW50Zih2dmJ1ZiwgIiVkIiwgY21kbHZsKTsgICAvKiBTQUZFICovCisg ICAgICAgIHJldHVybih2dmJ1Zik7CisKKyAgICAgIGNhc2UgVk5fREFZOiAgICAgICAgICAgICAg ICAgICAgICAvKiBEYXkgb2Ygd2VlayAqLworICAgICAgICB6dGltZSgmcCk7CisgICAgICAgIGlm IChwICE9IE5VTEwgJiYgKnAgIT0gTlVMKSAgICAgLyogenRpbWUoKSBzdWNjZWVkZWQuICovCisg ICAgICAgICAgY2tzdHJuY3B5KHZ2YnVmLHAsNCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICB2 dmJ1ZlswXSA9IE5VTDsgICAgICAgICAgICAgICAvKiB6dGltZSgpIGZhaWxlZC4gKi8KKyAgICAg ICAgcmV0dXJuKHZ2YnVmKTsgICAgICAgICAgICAgICAgICAvKiBSZXR1cm4gd2hhdCB3ZSBnb3Qu ICovCisKKyAgICAgIGNhc2UgVk5fTkRBWTogeyAgICAgICAgICAgICAgICAgICAvKiBOdW1lcmlj IGRheSBvZiB3ZWVrICovCisgICAgICAgICAgbG9uZyBrOworICAgICAgICAgIHogPSBtamQoenpu ZGF0ZSgpKTsgICAgICAgICAgIC8qIEdldCBtb2RpZmllZCBKdWxpYW4gZGF0ZSAqLworICAgICAg ICAgIGsgPSAoKChpbnQpKHogJSA3TCkpICsgMykgJSA3OyAvKiBHZXQgZGF5IG51bWJlciAqLwor ICAgICAgICAgIHNwcmludGYodnZidWYsIiVsZCIsayk7ICAgICAgIC8qIFNBRkUgKi8KKyAgICAg ICAgICByZXR1cm4odnZidWYpOworICAgICAgfQorCisgICAgICBjYXNlIFZOX0xDTDogICAgICAg ICAgICAgICAgICAgICAgLyogTG9jYWwgKHZzIHJlbW90ZSkgbW9kZSAqLworICAgICAgICBja3N0 cm5jcHkodnZidWYsIGxvY2FsID8gIjEiIDogIjAiLFZWQlVGTCk7CisgICAgICAgIHJldHVybih2 dmJ1Zik7CisKKyAgICAgIGNhc2UgVk5fQ01EUzogICAgICAgICAgICAgICAgICAgICAvKiBDb21t YW5kIHNvdXJjZSAqLworICAgICAgICBpZiAoY21kc3RrW2NtZGx2bF0uc3JjID09IENNRF9LQikK KyAgICAgICAgICBja3N0cm5jcHkodnZidWYsInByb21wdCIsVlZCVUZMKTsKKyAgICAgICAgZWxz ZSBpZiAoY21kc3RrW2NtZGx2bF0uc3JjID09IENNRF9NRCkKKyAgICAgICAgICBja3N0cm5jcHko dnZidWYsIm1hY3JvIixWVkJVRkwpOworICAgICAgICBlbHNlIGlmIChjbWRzdGtbY21kbHZsXS5z cmMgPT0gQ01EX1RGKQorICAgICAgICAgIGNrc3RybmNweSh2dmJ1ZiwiZmlsZSIsVlZCVUZMKTsK KyAgICAgICAgZWxzZQorICAgICAgICAgIGNrc3RybmNweSh2dmJ1ZiwidW5rbm93biIsVlZCVUZM KTsKKyAgICAgICAgcmV0dXJuKHZ2YnVmKTsKKworICAgICAgY2FzZSBWTl9DTURGOiAgICAgICAg ICAgICAgICAgICAgIC8qIEN1cnJlbnQgY29tbWFuZCBmaWxlIG5hbWUgKi8KKyNpZmRlZiBDT01N RU5UICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAoc2VlIGNvbW1lbnRzIGFib3ZlKSAqLwor ICAgICAgICBpZiAodGZuYW1bdGxldmVsXSkgeyAgICAgICAgICAgIC8qIChuZWFyIGRibGJzIGRl Y2xhcmF0aW9uKSAqLworICAgICAgICAgICAgZGJsYnModGZuYW1bdGxldmVsXSx2dmJ1ZixWVkJV RkwpOworICAgICAgICAgICAgcmV0dXJuKHZ2YnVmKTsKKyAgICAgICAgfSBlbHNlIHJldHVybigi Iik7CisjZWxzZQorICAgICAgICBpZiAodGxldmVsIDwgMCkKKyAgICAgICAgICByZXR1cm4oIiIp OworICAgICAgICBlbHNlCisgICAgICAgICAgcmV0dXJuKHRmbmFtW3RsZXZlbF0gPyB0Zm5hbVt0 bGV2ZWxdIDogIiIpOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKworICAgICAgY2FzZSBWTl9NQUM6 ICAgICAgICAgICAgICAgICAgICAgIC8qIEN1cnJlbnQgbWFjcm8gbmFtZSAqLworICAgICAgICBy ZXR1cm4oKG1hY2x2bCA+IC0xKSA/IG1fYXJnW21hY2x2bF1bMF0gOiAiIik7CisKKyAgICAgIGNh c2UgVk5fRVhJVDoKKyAgICAgICAgc3ByaW50Zih2dmJ1ZiwiJWQiLHhpdHN0YSk7ICAgICAvKiBT QUZFICovCisgICAgICAgIHJldHVybih2dmJ1Zik7CisKKyAgICB9IC8qIEJyZWFrIHVwIGxvbmcg c3dpdGNoIHN0YXRlbWVudHMuLi4gKi8KKworICAgIHN3aXRjaCh5KSB7CisgICAgICBjYXNlIFZO X1BSVFk6IHsgICAgICAgICAgICAgICAgICAgLyogUGFyaXR5ICovCisgICAgICAgICAgY2hhciAq c3M7CisgICAgICAgICAgc3dpdGNoIChwYXJpdHkpIHsKKyAgICAgICAgICAgIGNhc2UgMDogICBz cyA9ICJub25lIjsgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAnZSc6IHNzID0gImV2ZW4iOyAg YnJlYWs7CisgICAgICAgICAgICBjYXNlICdtJzogc3MgPSAibWFyayI7ICBicmVhazsKKyAgICAg ICAgICAgIGNhc2UgJ28nOiBzcyA9ICJvZGQiOyAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAn cyc6IHNzID0gInNwYWNlIjsgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OiAgc3MgPSAidW5r bm93biI7IGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgICBja3N0cm5jcHkodnZidWYsc3Ms VlZCVUZMKTsKKyAgICAgICAgICByZXR1cm4odnZidWYpOworICAgICAgfQorCisgICAgICBjYXNl IFZOX0RJQUw6CisgICAgICAgIHNwcmludGYodnZidWYsIiVkIiwgICAgICAgICAgICAgLyogU0FG RSAqLworI2lmbmRlZiBOT0RJQUwKKyAgICAgICAgICAgICAgICBkaWFsc3RhCisjZWxzZQorICAg ICAgICAgICAgICAgIC0xCisjZW5kaWYgLyogTk9ESUFMICovCisgICAgICAgICAgICAgICAgKTsK KyAgICAgICAgcmV0dXJuKHZ2YnVmKTsKKworI2lmbmRlZiBOT0RJQUwKKyAgICAgIGNhc2UgVk5f RE1TRzoKKyNpZmRlZiBCSUdCVUZPSworCWNrc3RybmNweSh2dmJ1ZixkaWFsbXNnW2RpYWxzdGFd LFZWQlVGTCk7IC8qIFNhZmUgaWYgc3JjID09IE5VTEwgKi8KKyNlbmRpZgkvKiBCSUdCVUZPSyAq LworCXJldHVybigoY2hhciAqKXZ2YnVmKTsKKyNlbmRpZgkvKiBOT0RJQUwgKi8KKworI2lmZGVm IE9TMgorICAgICAgY2FzZSBWTl9LRVlCOgorICAgICAgICBja3N0cm5jcHkodnZidWYsY29ua2Jn KCksVlZCVUZMKTsKKyAgICAgICAgcmV0dXJuKHZ2YnVmKTsKKyAgICAgIGNhc2UgVk5fU0VMQ1Q6 IHsKKyNpZm5kZWYgTk9MT0NBTAorICAgICAgICAgIGNvbnN0IGNoYXIgKiBzZWxlY3Rpb24gPSBH ZXRTZWxlY3Rpb24oKTsKKyAgICAgICAgICByZXR1cm4oIChjaGFyICopIChzZWxlY3Rpb24gPyBz ZWxlY3Rpb24gOiAiIiApKSA7CisjZWxzZQorICAgICAgICAgIHJldHVybigiIik7CisjZW5kaWYg LyogTk9MT0NBTCAqLworICAgICAgfQorI2VuZGlmIC8qIE9TMiAqLworCisjaWZuZGVmIE5PWEZF UgorICAgICAgY2FzZSBWTl9DUFM6CisgICAgICAgIHNwcmludGYodnZidWYsIiVsZCIsdGZjcHMp OyAgICAgLyogU0FGRSAqLworICAgICAgICByZXR1cm4odnZidWYpOworI2VuZGlmIC8qIE5PWEZF UiAqLworCisgICAgICBjYXNlIFZOX01PREU6ICAgICAgICAgICAgICAgICAgICAgLyogRmlsZSB0 cmFuc2ZlciBtb2RlICovCisgICAgICAgIHN3aXRjaCAoYmluYXJ5KSB7CisgICAgICAgICAgY2Fz ZSBYWUZUX1Q6IGNrc3RybmNweSh2dmJ1ZiwidGV4dCIsVlZCVUZMKTsgYnJlYWs7CisgICAgICAg ICAgY2FzZSBYWUZUX0I6CisgICAgICAgICAgY2FzZSBYWUZUX1U6IGNrc3RybmNweSh2dmJ1Ziwi YmluYXJ5IixWVkJVRkwpOyBicmVhazsKKyAgICAgICAgICBjYXNlIFhZRlRfSTogY2tzdHJuY3B5 KHZ2YnVmLCJpbWFnZSIsVlZCVUZMKTsgYnJlYWs7CisgICAgICAgICAgY2FzZSBYWUZUX0w6IGNr c3RybmNweSh2dmJ1ZiwibGFiZWxlZCIsVlZCVUZMKTsgYnJlYWs7CisgICAgICAgICAgY2FzZSBY WUZUX006IGNrc3RybmNweSh2dmJ1ZiwibWFjYmluYXJ5IixWVkJVRkwpOyBicmVhazsKKyAgICAg ICAgICBkZWZhdWx0OiAgICAgY2tzdHJuY3B5KHZ2YnVmLCJ1bmtub3duIixWVkJVRkwpOworICAg ICAgICB9CisgICAgICAgIHJldHVybih2dmJ1Zik7CisKKyNpZmRlZiBDS19SRVhYCisgICAgICBj YXNlIFZOX1JFWFg6CisgICAgICAgIHJldHVybihyZXh4YnVmKTsKKyNlbmRpZiAvKiBDS19SRVhY ICovCisKKyAgICAgIGNhc2UgVk5fTkVXTDogICAgICAgICAgICAgICAgICAgICAvKiBTeXN0ZW0g bmV3bGluZSBjaGFyIG9yIHNlcXVlbmNlICovCisjaWZkZWYgVU5JWAorICAgICAgICBja3N0cm5j cHkodnZidWYsIlxuIixWVkJVRkwpOworI2Vsc2UKKyNpZmRlZiBkYXRhZ2VuZXJhbAorICAgICAg ICBja3N0cm5jcHkodnZidWYsIlxuIixWVkJVRkwpOworI2Vsc2UKKyNpZmRlZiBPU0sKKyAgICAg ICAgY2tzdHJuY3B5KHZ2YnVmLCJcMTUiLFZWQlVGTCk7ICAvKiBSZW1lbWJlciwgdGhlc2UgYXJl IG9jdGFsLi4uICovCisjZWxzZQorI2lmZGVmIE1BQworICAgICAgICBja3N0cm5jcHkodnZidWYs IlwxNSIsVlZCVUZMKTsKKyNlbHNlCisjaWZkZWYgT1MyCisgICAgICAgIGNrc3RybmNweSh2dmJ1 ZiwiXDE1XDEyIixWVkJVRkwpOworI2Vsc2UKKyNpZmRlZiBTVFJBVFVTCisgICAgICAgIGNrc3Ry bmNweSh2dmJ1ZiwiXG4iLFZWQlVGTCk7CisjZWxzZQorI2lmZGVmIFZNUworICAgICAgICBja3N0 cm5jcHkodnZidWYsIlwxNVwxMiIsVlZCVUZMKTsKKyNlbHNlCisjaWZkZWYgQU1JR0EKKyAgICAg ICAgY2tzdHJuY3B5KHZ2YnVmLCJcbiIsVlZCVUZMKTsKKyNlbHNlCisjaWZkZWYgR0VNRE9TCisg ICAgICAgIGNrc3RybmNweSh2dmJ1ZiwiXG4iLFZWQlVGTCk7CisjZWxzZQorICAgICAgICBja3N0 cm5jcHkodnZidWYsIlxuIixWVkJVRkwpOworI2VuZGlmIC8qIEdFTURPUyAqLworI2VuZGlmIC8q IEFNSUdBICovCisjZW5kaWYgLyogVk1TICovCisjZW5kaWYgLyogU1RSQVRVUyAqLworI2VuZGlm IC8qIE9TMiAqLworI2VuZGlmIC8qIE1BQyAqLworI2VuZGlmIC8qIE9TSyAqLworI2VuZGlmIC8q IGRhdGFnZW5lcmFsICovCisjZW5kaWYgLyogVU5JWCAqLworICAgICAgICByZXR1cm4odnZidWYp OworCisgICAgICBjYXNlIFZOX1JPV1M6ICAgICAgICAgICAgICAgICAgICAgLyogUk9XUyAqLwor ICAgICAgY2FzZSBWTl9DT0xTOiAgICAgICAgICAgICAgICAgICAgIC8qIENPTFMgKi8KKyAgICAg ICAgY2tzdHJuY3B5KHZ2YnVmLChjeCA9PSBWTl9ST1dTKSA/ICIyNCIgOiAiODAiLFZWQlVGTCk7 IC8qIERlZmF1bHQgKi8KKyNpZmRlZiBDS19UVEdXU0laCisjaWZkZWYgT1MyCisgICAgICAgIGlm ICh0dF9jb2xzW1ZURVJNXSA8IDAgfHwgdHRfcm93c1tWVEVSTV0gPCAwKQorICAgICAgICAgIHR0 Z3dzaXooKTsKKyAgICAgICAgc3ByaW50Zih2dmJ1ZiwiJWQiLCAgICAgICAgICAgICAvKiBTQUZF ICovCisgICAgICAgICAgICAgICAgKGN4ID09IFZOX1JPV1MpID8gdHRfcm93c1tWVEVSTV0gOiB0 dF9jb2xzW1ZURVJNXSk7CisjZWxzZSAvKiBPUzIgKi8KKyAgICAgICAgaWYgKHR0Z3dzaXooKSA+ IDApICAgICAgICAgICAgICAvKiBHZXQgd2luZG93IHNpemUgKi8KKyAgICAgICAgICBpZiAodHRf Y29scyA+IDAgJiYgdHRfcm93cyA+IDApIC8qIHNldHMgdHRfcm93cywgdHRfY29scyAqLworICAg ICAgICAgICAgc3ByaW50Zih2dmJ1ZiwiJWQiLCAgICAgICAgIC8qIFNBRkUgKi8KKyAgICAgICAg ICAgICAgICAgICAgKGN4ID09IFZOX1JPV1MpID8gdHRfcm93cyA6IHR0X2NvbHMpOworI2VuZGlm IC8qIE9TMiAqLworI2VuZGlmIC8qIENLX1RUR1dTSVogKi8KKyAgICAgICAgcmV0dXJuKHZ2YnVm KTsKKworICAgICAgY2FzZSBWTl9UVFlQOgorI2lmZGVmIE5PVEVSTQorICAgICAgICBja3N0cm5j cHkodnZidWYsInVua25vd24iLFZWQlVGTCk7CisjZWxzZQorI2lmZGVmIE9TMgorICAgICAgICBz cHJpbnRmKHZ2YnVmLCAiJXMiLCAgICAgICAgICAgIC8qIFNBRkUgKi8KKyAgICAgICAgICAgICAg ICAodHRfdHlwZSA+PSAwICYmIHR0X3R5cGUgPD0gbWF4X3R0KSA/CisgICAgICAgICAgICAgICAg dHRfaW5mb1t0dF90eXBlXS54X25hbWUgOgorICAgICAgICAgICAgICAgICJ1bmtub3duIgorICAg ICAgICAgICAgICAgICk7CisjZWxzZQorI2lmZGVmIE1BQworICAgICAgICBja3N0cm5jcHkodnZi dWYsInZ0MzIwIixWVkJVRkwpOworI2Vsc2UKKyAgICAgICAgcCA9IGdldGVudigiVEVSTSIpOwor ICAgICAgICBja3N0cm5jcHkodnZidWYscCA/IHAgOiAidW5rbm93biIsVlZCVUZMKzEpOworI2Vu ZGlmIC8qIE1BQyAqLworI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIE5PVEVSTSAqLworICAg ICAgICByZXR1cm4odnZidWYpOworCisgICAgICBjYXNlIFZOX01JTlA6ICAgICAgICAgICAgICAg ICAgICAgLyogTUlOUFVUICovCisgICAgICAgIHNwcmludGYodnZidWYsICIlZCIsIG1fZm91bmQp OyAgLyogU0FGRSAqLworICAgICAgICByZXR1cm4odnZidWYpOworICAgIH0gLyogQnJlYWsgdXAg bG9uZyBzd2l0Y2ggc3RhdGVtZW50cy4uLiAqLworCisgICAgc3dpdGNoKHkpIHsKKyAgICAgIGNh c2UgVk5fQ09OTjogICAgICAgICAgICAgICAgICAgICAvKiBDT05ORUNUSU9OICovCisgICAgICAg IGlmICghbG9jYWwpIHsKKyAgICAgICAgICBja3N0cm5jcHkodnZidWYsInJlbW90ZSIsVlZCVUZM KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICghbmV0d29yaykKKyAgICAgICAg ICAgICAgY2tzdHJuY3B5KHZ2YnVmLCJzZXJpYWwiLFZWQlVGTCk7CisjaWZkZWYgVENQU09DS0VU CisgICAgICAgICAgICBlbHNlIGlmIChuZXR0eXBlID09IE5FVF9UQ1BCIHx8IG5ldHR5cGUgPT0g TkVUX1RDUEEpIHsKKyAgICAgICAgICAgICAgICBpZiAodHRucHJvdG8gPT0gTlBfVEVMTkVUKQor ICAgICAgICAgICAgICAgICAgY2tzdHJuY3B5KHZ2YnVmLCJ0Y3AvaXBfdGVsbmV0IixWVkJVRkwp OworI2lmZGVmIENLX1NTTAorICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR0bnByb3RvID09IE5Q X1NTTCB8fCB0dG5wcm90byA9PSBOUF9TU0xfUkFXKQorICAgICAgICAgICAgICAgICAgY2tzdHJu Y3B5KHZ2YnVmLCJ0Y3AvaXBfc3NsIixWVkJVRkwpOworICAgICAgICAgICAgICAgIGVsc2UgaWYg KHR0bnByb3RvID09IE5QX1RMUyB8fCB0dG5wcm90byA9PSBOUF9TU0xfUkFXKQorICAgICAgICAg ICAgICAgICAgY2tzdHJuY3B5KHZ2YnVmLCJ0Y3AvaXBfdGxzIixWVkJVRkwpOworI2VuZGlmIC8q IENLX1NTTCAqLworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgIGNrc3Ry bmNweSh2dmJ1ZiwidGNwL2lwIixWVkJVRkwpOworICAgICAgICAgICAgfQorI2VuZGlmIC8qIFRD UFNPQ0tFVCAqLworI2lmZGVmIFNTSEJVSUxUSU4KKyAgICAgICAgICAgIGVsc2UgaWYgKG5ldHR5 cGUgPT0gTkVUX1NTSCkKKyAgICAgICAgICAgICAgICAgIGNrc3RybmNweSh2dmJ1ZiwidGNwL2lw X3NzaCIsVlZCVUZMKTsKKyNlbmRpZiAvKiBTU0hCVUlMVElOICovCisjaWZkZWYgQU5ZWDI1Cisg ICAgICAgICAgICBlbHNlIGlmIChuZXR0eXBlID09IE5FVF9TWDI1IHx8CisgICAgICAgICAgICAg ICAgICAgICBuZXR0eXBlID09IE5FVF9WWDI1IHx8CisgICAgICAgICAgICAgICAgICAgICBuZXR0 eXBlID09IE5FVF9JWDI1CisgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgIGNr c3RybmNweSh2dmJ1ZiwieC4yNSIsVlZCVUZMKTsKKyNlbmRpZiAvKiBBTllYMjUgKi8KKyNpZmRl ZiBERUNORVQKKyAgICAgICAgICAgIGVsc2UgaWYgKG5ldHR5cGUgPT0gTkVUX0RFQykgeworICAg ICAgICAgICAgICAgIGlmICh0dG5wcm90byA9PSBOUF9MQVQpCisgICAgICAgICAgICAgICAgICBj a3N0cm5jcHkodnZidWYsImRlY25ldF9sYXQiLFZWQlVGTCk7CisgICAgICAgICAgICAgICAgZWxz ZSBpZiAoIHR0bnByb3RvID09IE5QX0NURVJNICkKKyAgICAgICAgICAgICAgICAgIGNrc3RybmNw eSh2dmJ1ZiwiZGVjbmV0X2N0ZXJtIixWVkJVRkwpOworICAgICAgICAgICAgICAgIGVsc2UKKyAg ICAgICAgICAgICAgICAgIGNrc3RybmNweSh2dmJ1ZiwiZGVjbmV0IixWVkJVRkwpOworICAgICAg ICAgICAgfQorI2VuZGlmIC8qIERFQ05FVCAqLworI2lmZGVmIFNVUEVSTEFUCisgICAgICAgICAg ICBlbHNlIGlmIChuZXR0eXBlID09IE5FVF9TTEFUKQorICAgICAgICAgICAgICBja3N0cm5jcHko dnZidWYsInN1cGVybGF0IixWVkJVRkwpOworI2VuZGlmIC8qIFNVUEVSTEFUICovCisjaWZkZWYg TkVURklMRQorICAgICAgICAgICAgZWxzZSBpZiAobmV0dHlwZSA9PSBORVRfRklMRSkKKyAgICAg ICAgICAgICAgY2tzdHJuY3B5KHZ2YnVmLCJsb2NhbF9maWxlIixWVkJVRkwpOworI2VuZGlmIC8q IE5FVEZJTEUgKi8KKyNpZmRlZiBORVRDTUQKKyAgICAgICAgICAgIGVsc2UgaWYgKG5ldHR5cGUg PT0gTkVUX0NNRCkKKyAgICAgICAgICAgICAgY2tzdHJuY3B5KHZ2YnVmLCJwaXBlIixWVkJVRkwp OworI2VuZGlmIC8qIE5FVENNRCAqLworI2lmZGVmIE5FVFBUWQorICAgICAgICAgICAgZWxzZSBp ZiAobmV0dHlwZSA9PSBORVRfUFRZKQorICAgICAgICAgICAgICBja3N0cm5jcHkodnZidWYsInBz ZXVkb3Rlcm1pbmFsIixWVkJVRkwpOworI2VuZGlmIC8qIE5FVFBUWSAqLworI2lmZGVmIE5FVERM TAorICAgICAgICAgICAgZWxzZSBpZiAobmV0dHlwZSA9PSBORVRfRExMKQorICAgICAgICAgICAg ICBja3N0cm5jcHkodnZidWYsImR5bmFtaWNfbGlua19saWJyYXJ5IixWVkJVRkwpOworI2VuZGlm IC8qIE5FVERMTCAqLworCisjaWZkZWYgTlBJUEUKKyAgICAgICAgICAgIGVsc2UgaWYgKG5ldHR5 cGUgPT0gTkVUX1BJUEUpCisgICAgICAgICAgICAgIGNrc3RybmNweSh2dmJ1ZiwibmFtZWRfcGlw ZSIsVlZCVUZMKTsKKyNlbmRpZiAvKiBOUElQRSAqLworI2lmZGVmIENLX05FVEJJT1MKKyAgICAg ICAgICAgIGVsc2UgaWYgKG5ldHR5cGUgPT0gTkVUX0JJT1MpCisgICAgICAgICAgICAgIGNrc3Ry bmNweSh2dmJ1ZiwibmV0YmlvcyIsVlZCVUZMKTsKKyNlbmRpZiAvKiBDS19ORVRCSU9TICovCisg ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIGNrc3RybmNweSh2dmJ1ZiwidW5rbm93biIs VlZCVUZMKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4odnZidWYpOworCisjaWZuZGVmIE5P WEZFUgorICAgICAgY2FzZSBWTl9TWVNJOiAgICAgICAgICAgICAgICAgICAgIC8qIFN5c3RlbSBJ RCwgS2VybWl0IGNvZGUgKi8KKyAgICAgICAgcmV0dXJuKChjaGFyICopY2tzeXNpZCk7CisjZW5k aWYgLyogTk9YRkVSICovCisKKyNpZmRlZiBPUzIKKyAgICAgIGNhc2UgVk5fU1BBOiB7CisgICAg ICAgICAgdW5zaWduZWQgbG9uZyBzcGFjZSA9IHpkc2tzcGFjZSgwKTsKKyAgICAgICAgICBpZiAo c3BhY2UgPiAwICYmIHNwYWNlIDwgMTAyNCkKKyAgICAgICAgICAgIHNwcmludGYodnZidWYsIi0x Iik7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgc3ByaW50Zih2dmJ1ZiwiJWx1IixzcGFj ZSk7IC8qIFNBRkUgKi8KKyAgICAgICAgICByZXR1cm4odnZidWYpOworICAgICAgfQorI2VuZGlm IC8qIE9TMiAqLworCisjaWZuZGVmIE5PWEZFUgorICAgICAgY2FzZSBWTl9RVUU6IHsKKyAgICAg ICAgICBleHRlcm4gY2hhciBxdWVyeWJ1ZltdOworICAgICAgICAgIHJldHVybihxdWVyeWJ1Zik7 CisgICAgICB9CisjZW5kaWYgLyogTk9YRkVSICovCisKKyNpZm5kZWYgTk9DU0VUUworICAgICAg Y2FzZSBWTl9DU0VUOgorI2lmZGVmIE9TMgorICAgICAgICBzcHJpbnRmKHZ2YnVmLCJjcCVkIixv czJnZXRjcCgpKTsgLyogU0FGRSAqLworI2Vsc2UKKyAgICAgICAgY2tzdHJuY3B5KHZ2YnVmLGZj c2luZm9bZmNoYXJzZXRdLmtleXdvcmQsVlZCVUZMKzEpOworI2VuZGlmIC8qIE9TMiAqLworICAg ICAgICByZXR1cm4odnZidWYpOworI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKworI2lmZGVmIE9TMgor ICAgICAgY2FzZSBWTl9FWEVESVI6CisgICAgICAgIHJldHVybihleGVkaXIpOworICAgICAgY2Fz ZSBWTl9TVEFSOgorICAgICAgICByZXR1cm4oc3RhcnR1cGRpcik7CisjZWxzZQorICAgICAgY2Fz ZSBWTl9FWEVESVI6CisgICAgICAgIHJldHVybihleGVkaXIgPyBleGVkaXIgOiAiIik7CisjaWZk ZWYgVk1TT1JVTklYCisgICAgICBjYXNlIFZOX1NUQVI6CisgICAgICAgIHJldHVybihzdGFydHVw ZGlyKTsKKyNlbmRpZiAvKiBWTVNPUlVOSVggKi8KKyNlbmRpZiAvKiBPUzIgKi8KKworICAgICAg Y2FzZSBWTl9JTkk6CisgICAgICAgIHJldHVybihpbmlkaXIpOworCisgICAgICBjYXNlIFZOX01E TToKKyAgICAgICAgcmV0dXJuKGdtZG10eXAoKSk7CisKKyAgICAgIGNhc2UgVk5fRVZBTDoKKyAg ICAgICAgcmV0dXJuKGV2YWxidWYpOworCisjaWZuZGVmIE5PRElBTAorICAgICAgY2FzZSBWTl9E X0NDOiAgICAgICAgICAgICAgICAgICAgIC8qIERJQUwgQ09VTlRSWS1DT0RFICovCisgICAgICAg IHJldHVybihkaWFsbGNjID8gZGlhbGxjYyA6ICIiKTsKKworICAgICAgY2FzZSBWTl9EX0FDOiAg ICAgICAgICAgICAgICAgICAgIC8qIERJQUwgQVJFQS1DT0RFICovCisgICAgICAgIHJldHVybihk aWFsbGFjID8gZGlhbGxhYyA6ICIiKTsKKworICAgICAgY2FzZSBWTl9EX0lQOiAgICAgICAgICAg ICAgICAgICAgIC8qIERJQUwgSU5URVJOQVRJT05BTC1QUkVGSVggKi8KKyAgICAgICAgcmV0dXJu KGRpYWxpeHAgPyBkaWFsaXhwIDogIiIpOworCisgICAgICBjYXNlIFZOX0RfTFA6ICAgICAgICAg ICAgICAgICAgICAgLyogRElBTCBMRC1QUkVGSVggKi8KKyAgICAgICAgcmV0dXJuKGRpYWxsZHAg PyBkaWFsbGRwIDogIiIpOworCisgICAgICBjYXNlIFZOX0RfTENQOiAgICAgICAgICAgICAgICAg ICAgLyogRElBTCBMT0NBTC1QUkVGSVggKi8KKyAgICAgICAgcmV0dXJuKGRpYWxsY3AgPyBkaWFs bGNwIDogIiIpOworCisgICAgICBjYXNlIFZOX0RfUFhYOiAgICAgICAgICAgICAgICAgICAgLyog RElBTCBQQlgtRVhDSEFOR0UgdGhhdCBtYXRjaGVkICovCisgICAgICAgIHJldHVybihtYXRjaHB4 eCA/IG1hdGNocHh4IDogIiIpOworI2Vsc2UKKyAgICAgIGNhc2UgVk5fRF9DQzogICAgICAgICAg ICAgICAgICAgICAvKiBESUFMIENPVU5UUlktQ09ERSAqLworICAgICAgY2FzZSBWTl9EX0FDOiAg ICAgICAgICAgICAgICAgICAgIC8qIERJQUwgQVJFQS1DT0RFICovCisgICAgICBjYXNlIFZOX0Rf SVA6ICAgICAgICAgICAgICAgICAgICAgLyogRElBTCBJTlRFUk5BVElPTkFMLVBSRUZJWCAqLwor ICAgICAgY2FzZSBWTl9EX0xQOiAgICAgICAgICAgICAgICAgICAgIC8qIERJQUwgTEQtUFJFRklY ICovCisgICAgICBjYXNlIFZOX0RfTENQOiAgICAgICAgICAgICAgICAgICAgLyogRElBTCBMT0NB TC1QUkVGSVggKi8KKyAgICAgIGNhc2UgVk5fRF9QWFg6ICAgICAgICAgICAgICAgICAgICAvKiBE SUFMIFBCWC1FWENIQU5HRSAqLworICAgICAgICByZXR1cm4oIiIpOworI2VuZGlmIC8qIE5PRElB TCAqLworICAgICAgY2FzZSBWTl9VSUQ6CisjaWZkZWYgVU5JWAorICAgICAgICB7CisjaWZkZWYg SUtTRAorICAgICAgICAgICAgaWYgKGluc2VydmVyKQorICAgICAgICAgICAgICByZXR1cm4oKGNo YXIgKil1aWRidWYpOworICAgICAgICAgICAgZWxzZQorI2VuZGlmIC8qIElLU0QgKi8KKyAgICAg ICAgICAgICAgaWYgKHVpZGJ1ZlswXSkKKyAgICAgICAgICAgICAgICByZXR1cm4oKGNoYXIgKil1 aWRidWYpOworICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuKHdob2Ft aSgpKTsKKyAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgcmV0dXJuKChjaGFyICopdWlkYnVmKTsK KyNlbmRpZiAvKiBVTklYICovCisgICAgfSAvKiBCcmVhayB1cCBsb25nIHN3aXRjaCBzdGF0ZW1l bnRzLi4uICovCisKKyAgICBzd2l0Y2goeSkgeworICAgICAgY2FzZSBWTl9QV0Q6CisjaWZkZWYg T1MyCisgICAgICAgIGlmIChhY3RpdmVjbWQgPT0gWFhPVVQgfHwgYWN0aXZlY21kID09IFhYTE5P VVQpIHsKKyAgICAgICAgICAgIGNrc3RybmNweSh2dmJ1Zixwd2J1ZixWVkJVRkwpOworICAgICAg ICAgICAgY2tfZW5jcnlwdCgoY2hhciAqKXZ2YnVmKTsKKyAgICAgICAgICAgIHJldHVybigoY2hh ciAqKXZ2YnVmKTsKKyAgICAgICAgfSBlbHNlCisjZW5kaWYgLyogT1MyICovCisgICAgICAgICAg cmV0dXJuKChjaGFyICopcHdidWYpOworCisgICAgICBjYXNlIFZOX1BSTToKKyAgICAgICAgcmV0 dXJuKChjaGFyICopcHJtYnVmKTsKKworICAgICAgY2FzZSBWTl9QUk9UTzoKKyNpZmRlZiBOT1hG RVIKKyAgICAgICAgcmV0dXJuKCJub25lIik7CisjZWxzZQorI2lmZGVmIENLX1hZWgorICAgICAg ICByZXR1cm4ocHRhYltwcm90b2NvbF0ucF9uYW1lKTsKKyNlbHNlCisgICAgICAgIHJldHVybigi a2VybWl0Iik7CisjZW5kaWYgLyogQ0tfWFlaICovCisjZW5kaWYgLyogTk9YRkVSICovCisKKyNp Zm5kZWYgTk9YRkVSCisjaWZkZWYgQ0tfVE1QRElSCisgICAgICBjYXNlIFZOX0RMRElSOgorICAg ICAgICByZXR1cm4oZGxkaXIgPyBkbGRpciA6ICIiKTsKKyNlbmRpZiAvKiBDS19UTVBESVIgKi8K KyNlbmRpZiAvKiBOT1hGRVIgKi8KKworI2lmbmRlZiBOT0RJQUwKKyAgICAgIGNhc2UgVk5fTV9J Tkk6ICAgICAgICAgICAgICAgICAgICAvKiBNb2RlbSBpbml0IHN0cmluZyAqLworICAgICAgICBy ZXR1cm4oZGlhbGluaSA/IGRpYWxpbmkgOiAobSA/IG0tPndha2Vfc3RyIDogIiIpKTsKKworICAg ICAgY2FzZSBWTl9NX0RDTTogICAgICAgICAgICAgICAgICAgIC8qIE1vZGVtIGRpYWwgY29tbWFu ZCAqLworICAgICAgICByZXR1cm4oZGlhbGNtZCA/IGRpYWxjbWQgOiAobSA/IG0tPmRpYWxfc3Ry IDogIiIpKTsKKworICAgICAgY2FzZSBWTl9NX0RDTzogICAgICAgICAgICAgICAgICAgIC8qIE1v ZGVtIGRhdGEgY29tcHJlc3Npb24gb24gKi8KKyAgICAgICAgcmV0dXJuKGRpYWxkY29uID8gZGlh bGRjb24gOiAobSA/IG0tPmRjX29uX3N0ciA6ICIiKSk7CisKKyAgICAgIGNhc2UgVk5fTV9EQ1g6 ICAgICAgICAgICAgICAgICAgICAvKiBNb2RlbSBkYXRhIGNvbXByZXNzaW9uIG9mZiAqLworICAg ICAgICByZXR1cm4oZGlhbGRjb2ZmID8gZGlhbGRjb2ZmIDogKG0gPyBtLT5kY19vZmZfc3RyIDog IiIpKTsKKworICAgICAgY2FzZSBWTl9NX0VDTzogICAgICAgICAgICAgICAgICAgIC8qIE1vZGVt IGVycm9yIGNvcnJlY3Rpb24gb24gKi8KKyAgICAgICAgcmV0dXJuKGRpYWxlY29uID8gZGlhbGVj b24gOiAobSA/IG0tPmVjX29uX3N0ciA6ICIiKSk7CisKKyAgICAgIGNhc2UgVk5fTV9FQ1g6ICAg ICAgICAgICAgICAgICAgICAvKiBNb2RlbSBlcnJvciBjb3JyZWN0aW9uIG9mZiAqLworICAgICAg ICByZXR1cm4oZGlhbGVjb2ZmID8gZGlhbGVjb2ZmIDogKG0gPyBtLT5lY19vZmZfc3RyIDogIiIp KTsKKworICAgICAgY2FzZSBWTl9NX0FBTzogICAgICAgICAgICAgICAgICAgIC8qIE1vZGVtIGF1 dG9hbnN3ZXIgb24gKi8KKyAgICAgICAgcmV0dXJuKGRpYWxhYW9uID8gZGlhbGFhb24gOiAobSA/ IG0tPmFhX29uX3N0ciA6ICIiKSk7CisKKyAgICAgIGNhc2UgVk5fTV9BQVg6ICAgICAgICAgICAg ICAgICAgICAvKiBNb2RlbSBhdXRvYW5zd2VyIG9mZiAqLworICAgICAgICByZXR1cm4oZGlhbGFh b2ZmID8gZGlhbGFhb2ZmIDogKG0gPyBtLT5hYV9vZmZfc3RyIDogIiIpKTsKKworICAgICAgY2Fz ZSBWTl9NX0hVUDogICAgICAgICAgICAgICAgICAgIC8qIE1vZGVtIGhhbmd1cCBjb21tYW5kICov CisgICAgICAgIHJldHVybihkaWFsaGNtZCA/IGRpYWxoY21kIDogKG0gPyBtLT5odXBfc3RyIDog IiIpKTsKKworICAgICAgY2FzZSBWTl9NX0hXRjogICAgICAgICAgICAgICAgICAgIC8qIE1vZGVt IGhhcmR3YXJlIGZsb3cgY29tbWFuZCAqLworICAgICAgICByZXR1cm4oZGlhbGh3ZmMgPyBkaWFs aHdmYyA6IChtID8gbS0+aHdmY19zdHIgOiAiIikpOworCisgICAgICBjYXNlIFZOX01fU1dGOiAg ICAgICAgICAgICAgICAgICAgLyogTW9kZW0gc29mdHdhcmUgZmxvdyBjb21tYW5kICovCisgICAg ICAgIHJldHVybihkaWFsc3dmYyA/IGRpYWxzd2ZjIDogKG0gPyBtLT5zd2ZjX3N0ciA6ICIiKSk7 CisKKyAgICAgIGNhc2UgVk5fTV9ORkM6ICAgICAgICAgICAgICAgICAgICAvKiBNb2RlbSBubyBm bG93LWNvbnRyb2wgY29tbWFuZCAqLworICAgICAgICByZXR1cm4oZGlhbG5vZmMgPyBkaWFsbm9m YyA6IChtID8gbS0+bm9mY19zdHIgOiAiIikpOworCisgICAgICBjYXNlIFZOX01fUERNOiAgICAg ICAgICAgICAgICAgICAgLyogTW9kZW0gcHVsc2UgZGlhbGluZyBtb2RlICovCisgICAgICAgIHJl dHVybihkaWFscHVsc2UgPyBkaWFscHVsc2UgOiAobSA/IG0tPnB1bHNlIDogIiIpKTsKKworICAg ICAgY2FzZSBWTl9NX1RETTogICAgICAgICAgICAgICAgICAgIC8qIE1vZGVtIHRvbmUgZGlhbGlu ZyBtb2RlICovCisgICAgICAgIHJldHVybihkaWFsdG9uZSA/IGRpYWx0b25lIDogKG0gPyBtLT50 b25lIDogIiIpKTsKKworICAgICAgY2FzZSBWTl9NX05BTTogICAgICAgICAgICAgICAgICAgIC8q IE1vZGVtIGZ1bGwgbmFtZSAqLworICAgICAgICByZXR1cm4oZGlhbG5hbWUgPyBkaWFsbmFtZSA6 IChtID8gbS0+bmFtZSA6ICIiKSk7CisjZWxzZQorICAgICAgY2FzZSBWTl9NX0lOSTogICAgICAg ICAgICAgICAgICAgIC8qIE1vZGVtIGluaXQgc3RyaW5nICovCisgICAgICBjYXNlIFZOX01fRENN OiAgICAgICAgICAgICAgICAgICAgLyogTW9kZW0gZGlhbCBjb21tYW5kICovCisgICAgICBjYXNl IFZOX01fRENPOiAgICAgICAgICAgICAgICAgICAgLyogTW9kZW0gZGF0YSBjb21wcmVzc2lvbiBv biAqLworICAgICAgY2FzZSBWTl9NX0RDWDogICAgICAgICAgICAgICAgICAgIC8qIE1vZGVtIGRh dGEgY29tcHJlc3Npb24gb2ZmICovCisgICAgICBjYXNlIFZOX01fRUNPOiAgICAgICAgICAgICAg ICAgICAgLyogTW9kZW0gZXJyb3IgY29ycmVjdGlvbiBvbiAqLworICAgICAgY2FzZSBWTl9NX0VD WDogICAgICAgICAgICAgICAgICAgIC8qIE1vZGVtIGVycm9yIGNvcnJlY3Rpb24gb2ZmICovCisg ICAgICBjYXNlIFZOX01fQUFPOiAgICAgICAgICAgICAgICAgICAgLyogTW9kZW0gYXV0b2Fuc3dl ciBvbiAqLworICAgICAgY2FzZSBWTl9NX0FBWDogICAgICAgICAgICAgICAgICAgIC8qIE1vZGVt IGF1dG9hbnN3ZXIgb2ZmICovCisgICAgICBjYXNlIFZOX01fSFVQOiAgICAgICAgICAgICAgICAg ICAgLyogTW9kZW0gaGFuZ3VwIGNvbW1hbmQgKi8KKyAgICAgIGNhc2UgVk5fTV9IV0Y6ICAgICAg ICAgICAgICAgICAgICAvKiBNb2RlbSBoYXJkd2FyZSBmbG93IGNvbW1hbmQgKi8KKyAgICAgIGNh c2UgVk5fTV9TV0Y6ICAgICAgICAgICAgICAgICAgICAvKiBNb2RlbSBzb2Z0d2FyZSBmbG93IGNv bW1hbmQgKi8KKyAgICAgIGNhc2UgVk5fTV9ORkM6ICAgICAgICAgICAgICAgICAgICAvKiBNb2Rl bSBubyBmbG93LWNvbnRyb2wgY29tbWFuZCAqLworICAgICAgY2FzZSBWTl9NX1BETTogICAgICAg ICAgICAgICAgICAgIC8qIE1vZGVtIHB1bHNlIGRpYWxpbmcgbW9kZSAqLworICAgICAgY2FzZSBW Tl9NX1RETTogICAgICAgICAgICAgICAgICAgIC8qIE1vZGVtIHRvbmUgZGlhbGluZyBtb2RlICov CisgICAgICBjYXNlIFZOX01fTkFNOgorICAgICAgICByZXR1cm4oIiIpOworI2VuZGlmIC8qIE5P RElBTCAqLworCisgICAgICBjYXNlIFZOX0lTVEFUOiAgICAgICAgICAgICAgICAgICAgLyogSU5Q VVQgc3RhdHVzICovCisgICAgICAgIHNwcmludGYodnZidWYsICIlZCIsIGluc3RhdHVzKTsgLyog U0FGRSAqLworICAgICAgICByZXR1cm4odnZidWYpOworCisgICAgICBjYXNlIFZOX1RFTVA6ICAg ICAgICAgICAgICAgICAgICAgLyogVGVtcG9yYXJ5IGRpcmVjdG9yeSAqLworICAgICAgICBpZiAo dGVtcGRpcikgeworICAgICAgICAgICAgcCA9IHRlbXBkaXI7CisgICAgICAgIH0gZWxzZSB7Cisj aWZkZWYgT1MyCisjaWZkZWYgTlQKKyAgICAgICAgICAgIHAgPSBnZXRlbnYoIks5NVRNUCIpOwor I2Vsc2UKKyAgICAgICAgICAgIHAgPSBnZXRlbnYoIksyVE1QIik7CisjZW5kaWYgLyogTlQgKi8K KyAgICAgICAgICAgIGlmICggIXAgKQorI2VuZGlmIC8qIE9TMiAqLworICAgICAgICAgICAgICBw ID0gZ2V0ZW52KCJDS19UTVAiKTsKKyAgICAgICAgICAgIGlmICghcCkgcCA9IGdldGVudigiVE1Q RElSIik7CisgICAgICAgICAgICBpZiAoIXApIHAgPSBnZXRlbnYoIlRFTVAiKTsKKyAgICAgICAg ICAgIGlmICghcCkgcCA9IGdldGVudigiVE1QIik7CisKKyNpZmRlZiBPUzJPUlVOSVgKKyAgICAg ICAgICAgIGlmIChwKSB7CisgICAgICAgICAgICAgICAgaW50IGxlbiA9IHN0cmxlbihwKTsKKyAg ICAgICAgICAgICAgICBpZiAocFtsZW4tMV0gIT0gJy8nCisjaWZkZWYgT1MyCisgICAgICAgICAg ICAgICAgICAgICYmIHBbbGVuLTFdICE9ICdcXCcKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAg ICAgICAgICAgICAgICkgeworICAgICAgICAgICAgICAgICAgICBzdGF0aWMgY2hhciBmb29bQ0tN QVhQQVRIXTsKKyAgICAgICAgICAgICAgICAgICAgY2tzdHJuY3B5KGZvbyxwLENLTUFYUEFUSCk7 CisgICAgICAgICAgICAgICAgICAgIGNrc3RybmNhdChmb28sIi8iLENLTUFYUEFUSCk7CisgICAg ICAgICAgICAgICAgICAgIHAgPSBmb287CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg fSBlbHNlCisjZWxzZSAvKiBPUzJPUlVOSVggKi8KKyAgICAgICAgICAgIGlmICghcCkKKyNlbmRp ZiAvKiBPUzJPUlVOSVggKi8KKyNpZmRlZiBVTklYICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBTeXN0ZW1zIHRoYXQgaGF2ZSBhIHN0YW5kYXJkICovCisgICAgICAgICAgICAgIHAgPSAi L3RtcC8iOyAgICAgICAgICAgICAgLyogdGVtcG9yYXJ5IGRpcmVjdG9yeS4uLiAqLworI2Vsc2UK KyNpZmRlZiBkYXRhZ2VuZXJhbAorICAgICAgICAgICAgICBwID0gIjpUTVA6IjsKKyNlbHNlCisg ICAgICAgICAgICAgIHAgPSAiIjsKKyNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLworI2VuZGlmIC8q IFVOSVggKi8KKyAgICAgICAgfQorICAgICAgICBja3N0cm5jcHkodnZidWYscCxWVkJVRkwpOwor ICAgICAgICBwID0gdnZidWY7CisKKy8qIFRoaXMgbmVlZHMgZ2VuZXJhbGl6aW5nIGZvciBWT1Ms IEFPUy9WUywgZXRjLi4uICovCisKKyAgICAgICAgd2hpbGUgKCpwKSB7CisjaWZkZWYgT1MyCisg ICAgICAgICAgICBpZiAoKnAgPT0gJ1xcJykgKnAgPSAnLyc7CisjZW5kaWYgLyogT1MyICovCisg ICAgICAgICAgICBwKys7CisgICAgICAgIH0KKyNpZm5kZWYgVk1TCisgICAgICAgIGlmIChwID4g dnZidWYpIHsKKyAgICAgICAgICAgIGNoYXIgYyA9ICAgICAgICAgICAgICAgICAgICAvKiBEaXJl Y3RvcnkgdGVybWluYXRpb24gY2hhcmFjdGVyICovCisjaWZkZWYgTUFDCisgICAgICAgICAgICAg ICc6JworI2Vsc2UKKyNpZmRlZiBkYXRhZ2VuZXJhbAorICAgICAgICAgICAgICAnOicKKyNlbHNl CisjaWZkZWYgU1RSQVRVUworICAgICAgICAgICAgICAnPicKKyNlbHNlCisgICAgICAgICAgICAg ICcvJworI2VuZGlmIC8qIFNUUkFUVVMgKi8KKyNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLworI2Vu ZGlmIC8qIE1BQyAqLworICAgICAgICAgICAgICAgIDsKKworICAgICAgICAgICAgaWYgKCoocC0x KSAhPSBjKSB7CisgICAgICAgICAgICAgICAgKnArKyA9IGM7CisgICAgICAgICAgICAgICAgKnAg PSBOVUw7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyNlbmRpZiAvKiBWTVMgKi8KKyAgICAg ICAgcmV0dXJuKHZ2YnVmKTsKKyAgICB9IC8qIEJyZWFrIHVwIGxvbmcgc3dpdGNoIHN0YXRlbWVu dHMuLi4gKi8KKworICAgIHN3aXRjaCh5KSB7CisgICAgICBjYXNlIFZOX0VSUk5POiAgICAgICAg ICAgICAgICAgICAgLyogRXJyb3IgbnVtYmVyICovCisjaWZkZWYgVk1TCisgICAgICAgIHsKKyAg ICAgICAgICAgIGV4dGVybiBpbnQgdm1zX2xhc3RlcnI7CisgICAgICAgICAgICBzcHJpbnRmKHZ2 YnVmLCAiJWQiLCB2bXNfbGFzdGVycik7IC8qIFNBRkUgKi8KKyAgICAgICAgfQorI2Vsc2UKKyAg ICAgICAgc3ByaW50Zih2dmJ1ZiwgIiVkIiwgZXJybm8pOyAgICAvKiBTQUZFICovCisjZW5kaWYg LyogVk1TICovCisgICAgICAgIHJldHVybih2dmJ1Zik7CisKKyAgICAgIGNhc2UgVk5fRVJTVFI6 ICAgICAgICAgICAgICAgICAgICAvKiBFcnJvciBzdHJpbmcgKi8KKyAgICAgICAgY2tzdHJuY3B5 KHZ2YnVmLGNrX2VycnN0cigpLFZWQlVGTCk7CisgICAgICAgIHJldHVybih2dmJ1Zik7CisKKyNp Zm5kZWYgTk9YRkVSCisgICAgICBjYXNlIFZOX1JQU0laOiAgICAgICAgICAgICAgICAgICAgLyog UkVDRUlWRSBwYWNrZXQtbGVuZ3RoICovCisgICAgICAgIHNwcmludGYodnZidWYsIiVkIix1cnBz aXopOyAgICAgLyogU0FGRSAqLworICAgICAgICByZXR1cm4odnZidWYpOworCisgICAgICBjYXNl IFZOX1dJTkRPOiAgICAgICAgICAgICAgICAgICAgLyogV0lORE9XIHNsb3RzICovCisgICAgICAg IHNwcmludGYodnZidWYsIiVkIix3c2xvdHIpOyAgICAgLyogU0FGRSAqLworICAgICAgICByZXR1 cm4odnZidWYpOworI2VuZGlmIC8qIE5PWEZFUiAqLworCisgICAgICBjYXNlIFZOX1RGTE46ICAg ICAgICAgICAgICAgICAgICAgLyogVEFLRS1maWxlIGxpbmUgbnVtYmVyICovCisgICAgICAgIGlm ICh0bGV2ZWwgPiAtMSkgeworICAgICAgICAgICAgc3ByaW50Zih2dmJ1ZiwgIiVkIiwgdGZsaW5l W3RsZXZlbF0pOyAvKiBTQUZFICovCisgICAgICAgICAgICByZXR1cm4odnZidWYpOworICAgICAg ICB9IGVsc2UKKyAgICAgICAgICByZXR1cm4oIjAiKTsKKworICAgICAgY2FzZSBWTl9NRE1TRzog ICAgICAgICAgICAgICAgICAgIC8qIERJQUxSRVNVTFQgKi8KKyNpZm5kZWYgTk9ESUFMCisgICAg ICAgIHJldHVybigoY2hhciAqKW1vZGVtbXNnKTsKKyNlbHNlCisgICAgICAgIHJldHVybigiIik7 CisjZW5kaWYgLyogTk9ESUFMICovCisKKyAgICAgIGNhc2UgVk5fRE5VTTogICAgICAgICAgICAg ICAgICAgICAvKiBESUFMTlVNQkVSICovCisjaWZuZGVmIE5PRElBTAorICAgICAgICByZXR1cm4o ZGlhbG51bSA/IChjaGFyICopIGRpYWxudW0gOiAiIik7CisjZWxzZQorICAgICAgICByZXR1cm4o IiIpOworI2VuZGlmIC8qIE5PRElBTCAqLworCisgICAgICBjYXNlIFZOX0FQQzoKKyAgICAgICAg c3ByaW50Zih2dmJ1ZiwgIiVkIiwgICAgICAgICAgICAvKiBTQUZFICovCisjaWZkZWYgQ0tfQVBD CisgICAgICAgICAgICAgICAgYXBjYWN0aXZlCisjZWxzZQorICAgICAgICAgICAgICAgIDAKKyNl bmRpZiAvKiBDS19BUEMgKi8KKyAgICAgICAgICAgICAgICApOworICAgICAgICByZXR1cm4oKGNo YXIgKil2dmJ1Zik7CisKKyNpZmRlZiBPUzIKKyNpZm5kZWYgTk9LVkVSQlMKKyAgICAgIGNhc2Ug Vk5fVFJNSzoKKyAgICAgICAgICBzcHJpbnRmKHZ2YnVmLCAiJWQiLCBrZXltYWMpOyAvKiBTQUZF ICovCisgICAgICAgIHJldHVybigoY2hhciAqKXZ2YnVmKTsKKyNlbmRpZiAvKiBOT0tWRVJCUyAq LworI2VuZGlmIC8qIE9TMiAqLworCisgICAgICBjYXNlIFZOX0lQQUREUjoKKyNpZmRlZiBUQ1BT T0NLRVQKKyNpZm5kZWYgT1NLCisgICAgICAvKiBUaGlzIGR1bXBzIGNvcmUgb24gT1MtOSBmb3Ig c29tZSByZWFzb24sIGJ1dCBvbmx5IGlmIGV4ZWN1dGVkICovCisgICAgICAvKiBiZWZvcmUgd2Ug aGF2ZSBtYWRlIGEgVENQIGNvbm5lY3Rpb24uICBUaGlzIGlzIG9idmlvdXNseSBub3QgKi8KKyAg ICAgIC8qIHRoZSBpZGVhbCBmaXguICovCisgICAgICAgIGlmICghbXlpcGFkZHJbMF0pCisgICAg ICAgICAgZ2V0bG9jYWxpcGFkZHIoKTsKKyNlbmRpZiAvKiBPU0sgKi8KKyNlbmRpZiAvKiBUQ1BT T0NLRVQgKi8KKyAgICAgICAgY2tzdHJuY3B5KHZ2YnVmLAorI2lmZGVmIFRDUFNPQ0tFVAorICAg ICAgICAgICAgICAgIChjaGFyICopbXlpcGFkZHIsCisjZWxzZQorICAgICAgICAgICAgICAgICIi LAorI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLworICAgICAgICAgICAgICAgIFZWQlVGTCk7CisgICAg ICAgIHJldHVybigoY2hhciAqKXZ2YnVmKTsKKworI2lmbmRlZiBOT1hGRVIKKyAgICAgIGNhc2Ug Vk5fQ1JDMTY6ICAgICAgICAgICAgICAgICAgICAvKiBDUkMtMTYgb2YgbW9zdCByZWNlbnQgdHJh bnNmZXIgKi8KKyAgICAgICAgc3ByaW50Zih2dmJ1ZiwiJWQiLGNyYzE2KTsgICAgICAvKiBTQUZF ICovCisgICAgICAgIHJldHVybih2dmJ1Zik7CisjZW5kaWYgLyogTk9YRkVSICovCisKKyNpZmRl ZiBDS19QSUQKKyAgICAgIGNhc2UgVk5fUElEOgorI2lmZGVmIElLU0QKKyNpZmRlZiBDS19MT0dJ TgorICAgICAgICBpZiAoaW5zZXJ2ZXIgJiYgaXNndWVzdCkKKyAgICAgICAgICByZXR1cm4oIiIp OworI2VuZGlmIC8qIENLX0xPR0lOICovCisjZW5kaWYgLyogSUtTRCAqLworICAgICAgICByZXR1 cm4oY2tnZXRwaWQoKSk7CisjZW5kaWYgLyogQ0tfUElEICovCisKKyNpZm5kZWYgTk9YRkVSCisg ICAgICBjYXNlIFZOX0ZOQU06IHsgICAgICAgICAgICAgICAgICAgLyogXHYoZmlsZW5hbWUpICov CisgICAgICAgICAgZXh0ZXJuIGNoYXIgZmlsbmFtW10sIG9mbjFbXSwgKnNmc3BlYywgKnJyZnNw ZWM7CisgICAgICAgICAgY2hhciAqIHRtcDsKKyAgICAgICAgICBzd2l0Y2ggKHdoYXQpIHsgICAg ICAgICAgICAgICAvKiBGaWxlIHRyYW5zZmVyIGlzIGluIHByb2dyZXNzICovCisjaWZkZWYgTkVX RlRQCisgICAgICAgICAgICBjYXNlIChXX0ZUUHxXX1JFQ1YpOgorICAgICAgICAgICAgY2FzZSAo V19GVFB8V19TRU5EKToKKyAgICAgICAgICAgICAgcmV0dXJuKChjaGFyICopZmlsbmFtKTsKKyNl bmRpZiAvKiBORVdGVFAgKi8KKyAgICAgICAgICAgIGNhc2UgV19SRUNWOgorICAgICAgICAgICAg Y2FzZSBXX1JFTU86CisgICAgICAgICAgICAgIHJldHVybigoY2hhciAqKW9mbjEpOworICAgICAg ICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgIC8qIE1vc3QgcmVjZW50IGZpbGUgdHJh bnNmZXJyZWQgKi8KKyAgICAgICAgICAgICAgaWYgKGZpbG5hbVswXSkgeyAgICAgICAgICAvKiAo aWYgYW55KSAqLworICAgICAgICAgICAgICAgICAgcmV0dXJuKChjaGFyICopZmlsbmFtKTsKKyAg ICAgICAgICAgICAgfSBlbHNlIGlmIChsYXN0eGZlciAmIFdfU0VORCAmJiBzZnNwZWMpIHsKKyAg ICAgICAgICAgICAgICAgIGlmIChmbnNwYXRoID09IFBBVEhfT0ZGKQorICAgICAgICAgICAgICAg ICAgICB6c3RyaXAoc2ZzcGVjLCZ0bXApOworICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAg ICAgICAgICAgICAgICB0bXAgPSBzZnNwZWM7CisgICAgICAgICAgICAgICAgICByZXR1cm4odG1w KTsKKyAgICAgICAgICAgICAgfSBlbHNlIGlmIChsYXN0eGZlciAmIFdfUkVDViAmJiBycmZzcGVj KSB7CisgICAgICAgICAgICAgICAgICBpZiAoZm5ycGF0aCA9PSBQQVRIX09GRikKKyAgICAgICAg ICAgICAgICAgICAgenN0cmlwKHJyZnNwZWMsJnRtcCk7CisgICAgICAgICAgICAgICAgICBlbHNl CisgICAgICAgICAgICAgICAgICAgIHRtcCA9IHJyZnNwZWM7CisgICAgICAgICAgICAgICAgICBy ZXR1cm4odG1wKTsKKyAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJu KCIiKTsKKyAgICAgICAgICB9CisgICAgICB9CisgICAgICBjYXNlIFZOX0ZOVU06ICAgICAgICAg ICAgICAgICAgICAgLyogXHYoZmlsZW51bSkgKi8KKyAgICAgICAgc3ByaW50Zih2dmJ1ZiwiJWxk IixmaWxjbnQpOyAgICAvKiBTQUZFICovCisgICAgICAgIHJldHVybigoY2hhciAqKXZ2YnVmKTsK KyNlbmRpZiAvKiBOT1hGRVIgKi8KKworI2lmZGVmIFBFWElUU1RBVAorICAgICAgY2FzZSBWTl9Q RVhJVDogeworICAgICAgICAgIGV4dGVybiBpbnQgcGV4aXRzdGF0OworICAgICAgICAgIHNwcmlu dGYodnZidWYsIiVkIixwZXhpdHN0YXQpOyAvKiBTQUZFICovCisgICAgICAgICAgcmV0dXJuKChj aGFyICopdnZidWYpOworICAgICAgfQorI2VuZGlmIC8qIFBFWElUU1RBVCAqLworCisjaWZuZGVm IE5PWEZFUgorICAgICAgY2FzZSBWTl9QXzhCSVQ6CisgICAgICAgIHZ2YnVmWzBdID0gcGFyaXR5 ID8gZWJxIDogTlVMOworICAgICAgICB2dmJ1ZlsxXSA9IE5VTDsKKyAgICAgICAgcmV0dXJuKChj aGFyICopdnZidWYpOworCisgICAgICBjYXNlIFZOX1BfQ1RMOiB7CisgICAgICAgICAgZXh0ZXJu IENIQVIgbXljdGxxOworICAgICAgICAgIHZ2YnVmWzBdID0gbXljdGxxOworICAgICAgICAgIHZ2 YnVmWzFdID0gTlVMOworICAgICAgICAgIHJldHVybigoY2hhciAqKXZ2YnVmKTsKKyAgICAgIH0K KyAgICAgIGNhc2UgVk5fUF9SUFQ6IHsKKyAgICAgICAgICBleHRlcm4gaW50IHJwdGVuYTsKKyAg ICAgICAgICB2dmJ1ZlswXSA9IHJwdGVuYSA/IHJwdHEgOiBOVUw7CisgICAgICAgICAgdnZidWZb MV0gPSBOVUw7CisgICAgICAgICAgcmV0dXJuKChjaGFyICopdnZidWYpOworICAgICAgfQorI2Vu ZGlmIC8qIE5PWEZFUiAqLworCisjaWZkZWYgT1MyCisgICAgICBjYXNlIFZOX1JFR046CisgICAg ICAgIHJldHVybihnZXRfcmVnX25hbWUoKSk7CisgICAgICBjYXNlIFZOX1JFR086CisgICAgICAg IHJldHVybihnZXRfcmVnX2NvcnAoKSk7CisgICAgICBjYXNlIFZOX1JFR1M6CisgICAgICAgIHJl dHVybihnZXRfcmVnX3NuKCkpOworI2VuZGlmIC8qIE9TMiAqLworICAgIH0gLyogQnJlYWsgdXAg bG9uZyBzd2l0Y2ggc3RhdGVtZW50cy4uLiAqLworCisgICAgc3dpdGNoKHkpIHsKKyAgICAgIGNh c2UgVk5fWFBST0c6CisjaWZkZWYgT1MyCisjaWZkZWYgTlQKKyNpZmRlZiBLVUkKKyAgICAgICAg cmV0dXJuKCJLLTk1RyIpOworI2Vsc2UKKyAgICAgICAgcmV0dXJuKCJLLTk1Iik7CisjZW5kaWYg LyogS1VJICovCisjZWxzZQorICAgICAgICByZXR1cm4oIksvMiIpOworI2VuZGlmIC8qIE5UICov CisjZWxzZQorICAgICAgICByZXR1cm4oIkMtS2VybWl0Iik7CisjZW5kaWYgLyogT1MyICovCisK KyAgICAgIGNhc2UgVk5fRURJVE9SOgorI2lmZGVmIE5PRlJJTExTCisgICAgICAgIHJldHVybigi Iik7CisjZWxzZQorI2lmZGVmIE5PUFVTSAorICAgICAgICByZXR1cm4oIiIpOworI2Vsc2UKKyAg ICAgICAgeworICAgICAgICAgICAgZXh0ZXJuIGNoYXIgZWRpdG9yW107CisgICAgICAgICAgICBj aGFyICpzczsKKyAgICAgICAgICAgIGlmICghZWRpdG9yWzBdKSB7CisgICAgICAgICAgICAgICAg c3MgPSBnZXRlbnYoIkVESVRPUiIpOworICAgICAgICAgICAgICAgIGlmIChzcykgeworICAgICAg ICAgICAgICAgICAgICBja3N0cm5jcHkoZWRpdG9yLHNzLENLTUFYUEFUSCk7CisgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVidWcoRjExMCwiXFx2KGVkaXRv cikiLGVkaXRvciwwKTsKKyAgICAgICAgICAgIHJldHVybihlZGl0b3JbMF0gPyAoY2hhciAqKWVk aXRvciA6ICIiKTsKKyAgICAgICAgfQorI2VuZGlmIC8qIE5PUFVTSCAqLworI2VuZGlmIC8qIE5P RlJJTExTICovCisKKyAgICAgIGNhc2UgVk5fRURPUFQ6CisjaWZkZWYgTk9GUklMTFMKKyAgICAg ICAgcmV0dXJuKCIiKTsKKyNlbHNlCisjaWZkZWYgTk9QVVNICisgICAgICAgIHJldHVybigiIik7 CisjZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBleHRlcm4gY2hhciBlZGl0b3B0c1tdOwor ICAgICAgICAgICAgcmV0dXJuKGVkaXRvcHRzWzBdID8gKGNoYXIgKillZGl0b3B0cyA6ICIiKTsK KyAgICAgICAgfQorI2VuZGlmIC8qIE5PUFVTSCAqLworI2VuZGlmIC8qIE5PRlJJTExTICovCisK KyAgICAgIGNhc2UgVk5fRURGSUxFOgorI2lmZGVmIE5PRlJJTExTCisgICAgICAgIHJldHVybigi Iik7CisjZWxzZQorI2lmZGVmIE5PUFVTSAorICAgICAgICByZXR1cm4oIiIpOworI2Vsc2UKKyAg ICAgICAgeworICAgICAgICAgICAgZXh0ZXJuIGNoYXIgZWRpdGZpbGVbXTsKKyAgICAgICAgICAg IHJldHVybihlZGl0ZmlsZVswXSA/IChjaGFyICopZWRpdGZpbGUgOiAiIik7CisgICAgICAgIH0K KyNlbmRpZiAvKiBOT1BVU0ggKi8KKyNlbmRpZiAvKiBOT0ZSSUxMUyAqLworCisjaWZkZWYgQlJP V1NFUgorICAgICAgY2FzZSBWTl9CUk9XU1I6IHsKKyAgICAgICAgICBleHRlcm4gY2hhciBicm93 c2VyW107CisgICAgICAgICAgaWYgKCFicm93c2VyWzBdKSB7CisgICAgICAgICAgICAgIHMgPSBn ZXRlbnYoIkJST1dTRVIiKTsKKyAgICAgICAgICAgICAgaWYgKHMpIGNrc3RybmNweShicm93c2Vy LHMsQ0tNQVhQQVRIKTsKKyAgICAgICAgICB9CisgICAgICAgICAgcmV0dXJuKGJyb3dzZXJbMF0g PyAoY2hhciAqKWJyb3dzZXIgOiAiIik7CisgICAgICB9CisgICAgICBjYXNlIFZOX0JST1BUOiB7 CisgICAgICAgICAgZXh0ZXJuIGNoYXIgYnJvd3NvcHRzW107CisgICAgICAgICAgcmV0dXJuKGJy b3dzb3B0c1swXSA/IChjaGFyICopYnJvd3NvcHRzIDogIiIpOworICAgICAgfQorICAgICAgY2Fz ZSBWTl9VUkw6IHsKKyAgICAgICAgICBleHRlcm4gY2hhciBicm93c3VybFtdOworICAgICAgICAg IHJldHVybihicm93c3VybFswXSA/IChjaGFyICopYnJvd3N1cmwgOiAiIik7CisgICAgICB9Cisj ZW5kaWYgLyogQlJPV1NFUiAqLworICAgICAgY2FzZSBWTl9IRVJBTEQ6CisgICAgICAgIHJldHVy bigoY2hhciAqKXZlcnNpbyk7CisKKyAgICAgIGNhc2UgVk5fVEVTVDogeyAgICAgICAgICAgICAg ICAgICAvKiB0ZXN0ICovCisgICAgICAgICAgZXh0ZXJuIGNoYXIgKiBja19zX3Rlc3QsICogY2tf c190dmVyOworICAgICAgICAgIGlmICghY2tfc190ZXN0KSBja19zX3Rlc3QgPSAiIjsKKyAgICAg ICAgICBpZiAoIWNrX3NfdHZlcikgY2tfc190dmVyID0gIiI7CisgICAgICAgICAgaWYgKCpja19z X3Rlc3QpIHsKKyAgICAgICAgICAgICAgY2tzdHJuY3B5KHZ2YnVmLGNrX3NfdGVzdCxWVkJVRkwp OworICAgICAgICAgICAgICBpZiAoKmNrX3NfdHZlcikgeworICAgICAgICAgICAgICAgICAgY2tz dHJuY2F0KHZ2YnVmLCIuIixWVkJVRkwpOworICAgICAgICAgICAgICAgICAgY2tzdHJuY2F0KHZ2 YnVmLGNrX3NfdHZlcixWVkJVRkwpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgfSBlbHNl CisgICAgICAgICAgICBja3N0cm5jcHkodnZidWYsIjAiLFZWQlVGTCk7CisgICAgICAgICAgcmV0 dXJuKChjaGFyICopdnZidWYpOworICAgICAgfQorCisjaWZuZGVmIE5PWEZFUgorICAgICAgY2Fz ZSBWTl9YRlNUQVQ6ICAgICAgICAgICAgICAgICAgIC8qIHhmZXJzdGF0dXMgKi8KKyAgICAgICAg eCA9IHhmZXJzdGF0OyAgICAgICAgICAgICAgICAgICAvKiBMaWtlIHN1Y2Nlc3MgKi8KKyAgICAg ICAgaWYgKHggPiAtMSkgeCA9ICh4ID09IDApID8gMSA6IDA7IC8qIEV4dGVybmFsIHZhbHVlIGlz IHJldmVyc2VkICovCisgICAgICAgIHNwcmludGYodnZidWYsIiVkIix4KTsgICAgICAgICAgLyog U0FGRSAqLworICAgICAgICByZXR1cm4oKGNoYXIgKil2dmJ1Zik7CisKKyAgICAgIGNhc2UgVk5f WEZNU0c6ICAgICAgICAgICAgICAgICAgICAvKiB4ZmVybXNnICovCisgICAgICAgIHJldHVybigo Y2hhciAqKWVwa3Rtc2cpOworCisjaWZuZGVmIE5PTVNFTkQKKyAgICAgIGNhc2UgVk5fU05ETDog eyAgICAgICAgICAgICAgICAgICAvKiBzZW5kbGlzdCAqLworICAgICAgICAgIGV4dGVybiBpbnQg ZmlsZXNpbmxpc3Q7CisgICAgICAgICAgc3ByaW50Zih2dmJ1ZiwiJWQiLGZpbGVzaW5saXN0KTsg LyogU0FGRSAqLworICAgICAgICAgIHJldHVybigoY2hhciAqKXZ2YnVmKTsKKyAgICAgIH0KKyNl bmRpZiAvKiBOT01TRU5EICovCisjZW5kaWYgLyogTk9YRkVSICovCisKKyNpZmRlZiBDS19UUklH R0VSCisgICAgICBjYXNlIFZOX1RSSUc6IHsKKyAgICAgICAgICBleHRlcm4gY2hhciAqIHRyaWdn ZXJ2YWw7CisgICAgICAgICAgcmV0dXJuKHRyaWdnZXJ2YWwgPyB0cmlnZ2VydmFsIDogIiIpOwor ICAgICAgfQorI2VuZGlmIC8qIENLX1RSSUdHRVIgKi8KKyNpZmRlZiBPUzJNT1VTRQorI2lmZGVm IE9TMgorICAgICAgY2FzZSBWTl9NT1VfWDogeworICAgICAgICAgIGV4dGVybiBpbnQgTW91c2VD dXJYOworICAgICAgICAgIHNwcmludGYodnZidWYsIiVkIixNb3VzZUN1clgpOyAvKiBTQUZFICov CisgICAgICAgICAgcmV0dXJuKChjaGFyICopdnZidWYpOworICAgICAgfQorICAgICAgY2FzZSBW Tl9NT1VfWTogeworICAgICAgICAgIGV4dGVybiBpbnQgTW91c2VDdXJZOworICAgICAgICAgIHNw cmludGYodnZidWYsIiVkIixNb3VzZUN1clkpOyAvKiBTQUZFICovCisgICAgICAgICAgcmV0dXJu KChjaGFyICopdnZidWYpOworICAgICAgfQorI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIE9T Mk1PVVNFICovCisgICAgICBjYXNlIFZOX1BSSU5UOiB7CisgICAgICAgICAgZXh0ZXJuIGludCBw cmludHBpcGU7CisgICAgICAgICAgZXh0ZXJuIGNoYXIgKiBwcmludGVybmFtZTsKKyNpZmRlZiBQ UklOVFNXSQorICAgICAgICAgIGV4dGVybiBpbnQgbm9wcmludGVyOworICAgICAgICAgIGlmIChu b3ByaW50ZXIpIHJldHVybigiIik7CisjZW5kaWYgLyogUFJJTlRTV0kgKi8KKyAgICAgICAgICBj a21ha21zZyh2dmJ1ZixWVkJVRkwsCisgICAgICAgICAgICAgICAgICAgcHJpbnRwaXBlID8gInwi IDogIiIsCisgICAgICAgICAgICAgICAgICAgcHJpbnRlcm5hbWUgPyBwcmludGVybmFtZSA6Cisj aWZkZWYgT1MyCisgICAgICAgICAgICAgICAgICAgIlBSTiIsCisjZWxzZQorICAgICAgICAgICAg ICAgICAgICIoZGVmYXVsdCkiLAorI2VuZGlmIC8qIE9TMiAqLworICAgICAgICAgICAgICAgICAg IE5VTEwsCisgICAgICAgICAgICAgICAgICAgTlVMTAorICAgICAgICAgICAgICAgICAgICk7Cisg ICAgICAgICAgcmV0dXJuKChjaGFyICopdnZidWYpOworICAgICAgfQorICAgIH0gLyogQnJlYWsg dXAgbG9uZyBzd2l0Y2ggc3RhdGVtZW50cy4uLiAqLworCisgICAgc3dpdGNoKHkpIHsKKyAgICAg IGNhc2UgVk5fRVNDOiAgICAgICAgICAgICAgICAgICAgICAvKiBFc2NhcGUgY2hhcmFjdGVyICov CisgICAgICAgIHNwcmludGYodnZidWYsIiVkIixlc2NhcGUpOyAgICAgLyogU0FGRSAqLworICAg ICAgICByZXR1cm4oKGNoYXIgKil2dmJ1Zik7CisKKyAgICAgIGNhc2UgVk5fSU5USU1FOgorICAg ICAgICBzcHJpbnRmKHZ2YnVmLCIlbGQiLGluZXRpbWUpOyAgIC8qIFNBRkUgKi8KKyAgICAgICAg cmV0dXJuKChjaGFyICopdnZidWYpOworCisgICAgICBjYXNlIFZOX0lOVE1POgorICAgICAgICBz cHJpbnRmKHZ2YnVmLCIlZCIsaW53YWl0KTsgICAgIC8qIFNBRkUgKi8KKyAgICAgICAgcmV0dXJu KChjaGFyICopdnZidWYpOworCisgICAgICBjYXNlIFZOX1NFQ1VSRToKKyAgICAgICAgaWYgKDAK KyNpZmRlZiBTU0hCVUlMVElOCisgICAgICAgICAgICB8fCBJU19TU0goKQorI2VuZGlmIC8qIFNT SEJVSUxUSU4gKi8KKyNpZmRlZiBDS19FTkNSWVBUSU9OCisgICAgICAgICAgICB8fCBja190bl9l bmNyeXB0aW5nKCkgJiYgY2tfdG5fZGVjcnlwdGluZygpCisjZW5kaWYgLyogQ0tfRU5DUllQVElP TiAqLworI2lmZGVmIENLX1NTTAorICAgICAgICAgICAgfHwgdGxzX2FjdGl2ZV9mbGFnIHx8IHNz bF9hY3RpdmVfZmxhZworI2VuZGlmIC8qIENLX1NTTCAqLworICAgICAgICAgICAgKQorICAgICAg ICAgIHJldHVybigiMSIpOworICAgICAgICBlbHNlCisgICAgICAgICAgcmV0dXJuKCIwIik7CisK KyAgICAgIGNhc2UgVk5fQVVUSE46CisjaWZkZWYgQ0tfQVVUSEVOVElDQVRJT04KKyAgICAgICAg eworICAgICAgICAgICAgZXh0ZXJuIGNoYXIgc3pVc2VyTmFtZUF1dGhlbnRpY2F0ZWRbXTsKKyAg ICAgICAgICAgIHJldHVybigoY2hhciAqKXN6VXNlck5hbWVBdXRoZW50aWNhdGVkKTsKKyAgICAg ICAgfQorI2Vsc2UgLyogQ0tfQVVUSEVOVElDQVRJT04gKi8KKyAgICAgICAgcmV0dXJuKChjaGFy ICopIiIpOworI2VuZGlmIC8qIENLX0FVVEhFTlRJQ0FUSU9OICovCisKKyAgICAgIGNhc2UgVk5f QVVUSFM6CisjaWZkZWYgQ0tfQVVUSEVOVElDQVRJT04KKyAgICAgICAgc3dpdGNoIChja190bl9h dXRoX3ZhbGlkKCkpIHsKKyAgICAgICAgICBjYXNlIEFVVEhfVU5LTk9XTjoKKyAgICAgICAgICAg IHJldHVybigoY2hhciAqKSJ1bmtub3duIik7CisgICAgICAgICAgY2FzZSBBVVRIX09USEVSOgor ICAgICAgICAgICAgcmV0dXJuKChjaGFyICopIm90aGVyIik7CisgICAgICAgICAgY2FzZSBBVVRI X1VTRVI6CisgICAgICAgICAgICByZXR1cm4oKGNoYXIgKikidXNlciIpOworICAgICAgICAgIGNh c2UgQVVUSF9WQUxJRDoKKyAgICAgICAgICAgIHJldHVybigoY2hhciAqKSJ2YWxpZCIpOworICAg ICAgICAgIGNhc2UgQVVUSF9SRUpFQ1Q6CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg IHJldHVybigoY2hhciAqKSJyZWplY3RlZCIpOworICAgICAgICB9CisjZWxzZSAvKiBDS19BVVRI RU5USUNBVElPTiAqLworICAgICAgICByZXR1cm4oKGNoYXIgKikicmVqZWN0ZWQiKTsKKyNlbmRp ZiAvKiBDS19BVVRIRU5USUNBVElPTiAqLworCisgICAgICBjYXNlIFZOX0FVVEhUOgorI2lmZGVm IENLX0FVVEhFTlRJQ0FUSU9OCisjaWZkZWYgQ0tfU1NMCisgICAgICAgIGlmICgoc3NsX2FjdGl2 ZV9mbGFnIHx8IHRsc19hY3RpdmVfZmxhZykgJiYKKyAgICAgICAgICAgIGNrX3RuX2F1dGhfdmFs aWQoKSA9PSBBVVRIX1ZBTElEICYmCisgICAgICAgICAgICAoc3N0ZWxuZXQgPyAoIVRFTE9QVF9V KFRFTE9QVF9BVVRIRU5USUNBVElPTikpIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICghVEVM T1BUX01FKFRFTE9QVF9BVVRIRU5USUNBVElPTikpKSB8fAorICAgICAgICAgICAgIGNrX3RuX2F1 dGhlbnRpY2F0ZWQoKSA9PSBBVVRIVFlQRV9OVUxMIHx8CisgICAgICAgICAgICAgY2tfdG5fYXV0 aGVudGljYXRlZCgpID09IEFVVEhUWVBFX0FVVE8pCisgICAgICAgICAgcmV0dXJuKCJYXzUwOV9D RVJUSUZJQ0FURSIpOworICAgICAgICBlbHNlCisjZW5kaWYgLyogQ0tfU1NMICovCisgICAgICAg ICAgcmV0dXJuKEFVVEhUWVBFX05BTUUoY2tfdG5fYXV0aGVudGljYXRlZCgpKSk7CisjZWxzZSAv KiBDS19BVVRIRU5USUNBVElPTiAqLworICAgICAgICByZXR1cm4oKGNoYXIgKikiTlVMTCIpOwor I2VuZGlmIC8qIENLX0FVVEhFTlRJQ0FUSU9OICovCisKKyNpZmRlZiBDS19LRVJCRVJPUworICAg ICAgY2FzZSBWTl9LNFBSTjogeworICAgICAgICAgIGV4dGVybiBjaGFyICoga3JiNF9kX3ByaW5j aXBhbDsKKyAgICAgICAgICBpZiAoa3JiNF9kX3ByaW5jaXBhbCkKKyAgICAgICAgICAgIGNrc3Ry bmNweSh2dmJ1ZixrcmI0X2RfcHJpbmNpcGFsLFZWQlVGTCsxKTsKKyAgICAgICAgICBlbHNlCisg ICAgICAgICAgICAqdnZidWYgPSBOVUw7CisgICAgICAgICAgcmV0dXJuKChjaGFyICopdnZidWYp OworICAgICAgfQorICAgICAgY2FzZSBWTl9LNVBSTjogeworICAgICAgICAgIGV4dGVybiBjaGFy ICoga3JiNV9kX3ByaW5jaXBhbDsKKyAgICAgICAgICBpZiAoa3JiNV9kX3ByaW5jaXBhbCkKKyAg ICAgICAgICAgIGNrc3RybmNweSh2dmJ1ZixrcmI1X2RfcHJpbmNpcGFsLFZWQlVGTCsxKTsKKyAg ICAgICAgICBlbHNlCisgICAgICAgICAgICAqdnZidWYgPSBOVUw7CisgICAgICAgICAgcmV0dXJu KChjaGFyICopdnZidWYpOworICAgICAgfQorICAgICAgY2FzZSBWTl9LNFJMTTogeworICAgICAg ICAgIGV4dGVybiBjaGFyICoga3JiNF9kX3JlYWxtOworICAgICAgICAgIGlmIChrcmI0X2RfcmVh bG0pIHsKKyAgICAgICAgICAgICAgY2tzdHJuY3B5KHZ2YnVmLGtyYjRfZF9yZWFsbSxWVkJVRkwr MSk7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgY2hhciAqIHMgPSBja19rcmI0 X2dldHJlYWxtKCk7CisgICAgICAgICAgICAgIGNrc3RybmNweSh2dmJ1ZixzID8gcyA6ICIiLFZW QlVGTCsxKTsKKyAgICAgICAgICB9CisgICAgICAgICAgcmV0dXJuKChjaGFyICopdnZidWYpOwor ICAgICAgfQorICAgICAgY2FzZSBWTl9LNFNSVjogeworICAgICAgICAgIGV4dGVybiBjaGFyICog a3JiNF9kX3NydjsKKyAgICAgICAgICBpZiAoa3JiNF9kX3NydikKKyAgICAgICAgICAgIGNrc3Ry bmNweSh2dmJ1ZixrcmI0X2Rfc3J2LFZWQlVGTCsxKTsKKyAgICAgICAgICBlbHNlCisgICAgICAg ICAgICBja3N0cm5jcHkodnZidWYsInJjbWQiLFZWQlVGTCk7CisgICAgICAgICAgcmV0dXJuKChj aGFyICopdnZidWYpOworICAgICAgfQorICAgICAgY2FzZSBWTl9LNVJMTTogeworICAgICAgICAg IGV4dGVybiBjaGFyICoga3JiNV9kX3JlYWxtOworICAgICAgICAgIGV4dGVybiBjaGFyICoga3Ji NV9kX2NjOworICAgICAgICAgIGlmIChrcmI1X2RfcmVhbG0pIHsKKyAgICAgICAgICAgICAgY2tz dHJuY3B5KHZ2YnVmLGtyYjVfZF9yZWFsbSxWVkJVRkwrMSk7CisgICAgICAgICAgfSBlbHNlIHsK KyAgICAgICAgICAgICAgY2hhciAqIHMgPSBja19rcmI1X2dldHJlYWxtKGtyYjVfZF9jYyk7Cisg ICAgICAgICAgICAgIGNrc3RybmNweSh2dmJ1ZixzLFZWQlVGTCsxKTsKKyAgICAgICAgICB9Cisg ICAgICAgICAgcmV0dXJuKChjaGFyICopdnZidWYpOworICAgICAgfQorICAgICAgY2FzZSBWTl9L NUNDOiB7CisgICAgICAgICAgZXh0ZXJuIGNoYXIgKiBrcmI1X2RfY2M7CisgICAgICAgICAgaWYg KGtyYjVfZF9jYykKKyAgICAgICAgICAgIGNrc3RybmNweSh2dmJ1ZixrcmI1X2RfY2MsVlZCVUZM KzEpOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNrc3RybmNweSh2dmJ1Zixja19rcmI1 X2dldF9jY19uYW1lKCksVlZCVUZMKzEpOworICAgICAgICAgIHJldHVybigoY2hhciAqKXZ2YnVm KTsKKyAgICAgIH0KKyAgICAgIGNhc2UgVk5fSzVTUlY6IHsKKyAgICAgICAgICBleHRlcm4gY2hh ciAqIGtyYjVfZF9zcnY7CisgICAgICAgICAgaWYgKGtyYjVfZF9zcnYpCisgICAgICAgICAgICBj a3N0cm5jcHkodnZidWYsa3JiNV9kX3NydixWVkJVRkwrMSk7CisgICAgICAgICAgZWxzZQorICAg ICAgICAgICAgY2tzdHJuY3B5KHZ2YnVmLCJob3N0IixWVkJVRkwpOworICAgICAgICAgIHJldHVy bigoY2hhciAqKXZ2YnVmKTsKKyAgICAgIH0KKyAgICAgIGNhc2UgVk5fSzRFTk86IHsKKyAgICAg ICAgZXh0ZXJuIGludCBrcmI0X2Vycm5vOworICAgICAgICBzcHJpbnRmKHZ2YnVmLCIlZCIsa3Ji NF9lcnJubyk7IC8qIFNBRkUgKi8KKyAgICAgICAgcmV0dXJuKChjaGFyICopdnZidWYpOworICAg ICAgfQorICAgICAgY2FzZSBWTl9LNUVOTzogeworICAgICAgICBleHRlcm4gaW50IGtyYjVfZXJy bm87CisgICAgICAgIHNwcmludGYodnZidWYsIiVkIixrcmI1X2Vycm5vKTsgLyogU0FGRSAqLwor ICAgICAgICByZXR1cm4oKGNoYXIgKil2dmJ1Zik7CisgICAgICB9CisgICAgICBjYXNlIFZOX0s0 RU1TRzogeworICAgICAgICBleHRlcm4gY2hhciAqIGtyYjRfZXJybXNnOworICAgICAgICBja3N0 cm5jcHkodnZidWYsa3JiNF9lcnJtc2c/a3JiNF9lcnJtc2c6IiIsVlZCVUZMKzEpOworICAgICAg ICByZXR1cm4oKGNoYXIgKil2dmJ1Zik7CisgICAgICB9CisgICAgICBjYXNlIFZOX0s1RU1TRzog eworICAgICAgICBleHRlcm4gY2hhciAqIGtyYjVfZXJybXNnOworICAgICAgICBja3N0cm5jcHko dnZidWYsa3JiNV9lcnJtc2csVlZCVUZMKzEpOworICAgICAgICByZXR1cm4oKGNoYXIgKil2dmJ1 Zik7CisgICAgICB9CisjZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KKyNpZmRlZiBDS19TU0wKKyAg ICAgIGNhc2UgVk5fWDUwOV9TOgorICAgICAgICBpZiAoc3NsX2FjdGl2ZV9mbGFnKQorICAgICAg ICAgIGNrc3RybmNweSh2dmJ1Zixzc2xfZ2V0X3N1YmplY3RfbmFtZShzc2xfY29uKSxWVkJVRkwr MSk7CisgICAgICAgIGVsc2UgaWYgKHRsc19hY3RpdmVfZmxhZykKKyAgICAgICAgICBja3N0cm5j cHkodnZidWYsc3NsX2dldF9zdWJqZWN0X25hbWUodGxzX2NvbiksVlZCVUZMKzEpOworICAgICAg ICBlbHNlCisgICAgICAgICAgY2tzdHJuY3B5KHZ2YnVmLCIiLFZWQlVGTCsxKTsKKyAgICAgICAg cmV0dXJuKChjaGFyICopdnZidWYpOworICAgICAgY2FzZSBWTl9YNTA5X0k6CisgICAgICAgIGlm IChzc2xfYWN0aXZlX2ZsYWcpCisgICAgICAgICAgY2tzdHJuY3B5KHZ2YnVmLHNzbF9nZXRfaXNz dWVyX25hbWUoc3NsX2NvbiksVlZCVUZMKzEpOworICAgICAgICBlbHNlIGlmICh0bHNfYWN0aXZl X2ZsYWcpCisgICAgICAgICAgY2tzdHJuY3B5KHZ2YnVmLHNzbF9nZXRfaXNzdWVyX25hbWUodGxz X2NvbiksVlZCVUZMKzEpOworICAgICAgICBlbHNlCisgICAgICAgICAgY2tzdHJuY3B5KHZ2YnVm LCIiLFZWQlVGTCsxKTsKKyAgICAgICAgcmV0dXJuKChjaGFyICopdnZidWYpOworI2VuZGlmIC8q IENLX1NTTCAqLworCisgICAgICBjYXNlIFZOX09TTkFNOgorI2lmZGVmIElLU0QKKyNpZmRlZiBD S19MT0dJTgorICAgICAgICBpZiAoaW5zZXJ2ZXIgJiYgaXNndWVzdCkKKyAgICAgICAgICByZXR1 cm4oIiIpOworI2VuZGlmIC8qIENLX0xPR0lOICovCisjZW5kaWYgLyogSUtTRCAqLworI2lmZGVm IENLX1VUU05BTUUKKyAgICAgICAgeworICAgICAgICAgICAgZXh0ZXJuIGNoYXIgdW5tX25hbVtd OworICAgICAgICAgICAgcmV0dXJuKChjaGFyICopdW5tX25hbSk7CisgICAgICAgIH0KKyNlbHNl CisgICAgICAgIGZvciAoeCA9IHkgPSAwOyB4IDwgVlZCVUZMOyB4KyspIHsKKyAgICAgICAgICAg IGlmIChja3hzeXNbeF0gPT0gU1AgJiYgY3ggPT0gMCkgY29udGludWU7CisgICAgICAgICAgICB2 dmJ1Zlt5KytdID0gKGNoYXIpICgoY2t4c3lzW3hdID09IFNQKSA/ICdfJyA6IGNreHN5c1t4XSk7 CisgICAgICAgIH0KKyAgICAgICAgdnZidWZbeV0gPSBOVUw7CisgICAgICAgIHJldHVybih2dmJ1 Zik7CisjZW5kaWYgLyogQ0tfVVRTTkFNRSAqLworCisgICAgICBjYXNlIFZOX09TVkVSOiB7Cisj aWZkZWYgQ0tfVVRTTkFNRQorICAgICAgICAgIGV4dGVybiBjaGFyIHVubV92ZXJbXTsKKyNpZmRl ZiBJS1NECisjaWZkZWYgQ0tfTE9HSU4KKyAgICAgICAgICBpZiAoaW5zZXJ2ZXIgJiYgaXNndWVz dCkKKyAgICAgICAgICAgIHJldHVybigiIik7CisjZW5kaWYgLyogQ0tfTE9HSU4gKi8KKyNlbmRp ZiAvKiBJS1NEICovCisgICAgICAgICAgcmV0dXJuKChjaGFyICopdW5tX3Zlcik7CisjZWxzZQor ICAgICAgICAgIHJldHVybigiIik7CisjZW5kaWYgLyogQ0tfVVRTTkFNRSAqLworICAgICAgfQor CisgICAgICBjYXNlIFZOX09TUkVMOiB7CisjaWZkZWYgQ0tfVVRTTkFNRQorICAgICAgICAgIGV4 dGVybiBjaGFyIHVubV9yZWxbXTsKKyNpZmRlZiBJS1NECisjaWZkZWYgQ0tfTE9HSU4KKyAgICAg ICAgICBpZiAoaW5zZXJ2ZXIgJiYgaXNndWVzdCkKKyAgICAgICAgICAgIHJldHVybigiIik7Cisj ZW5kaWYgLyogQ0tfTE9HSU4gKi8KKyNlbmRpZiAvKiBJS1NEICovCisgICAgICAgICAgcmV0dXJu KChjaGFyICopdW5tX3JlbCk7CisjZWxzZQorICAgICAgICAgIHJldHVybigiIik7CisjZW5kaWYg LyogQ0tfVVRTTkFNRSAqLworICAgICAgfQorICAgIH0gLyogQnJlYWsgdXAgbG9uZyBzd2l0Y2gg c3RhdGVtZW50cy4uLiAqLworCisgICAgc3dpdGNoKHkpIHsKKyAgICAgIGNhc2UgVk5fTkFNRTog eworICAgICAgICAgIGV4dGVybiBjaGFyICogbXluYW1lOworICAgICAgICAgIHJldHVybihteW5h bWUpOworICAgICAgfQorCisgICAgICBjYXNlIFZOX01PREw6IHsKKyNpZmRlZiBDS19VVFNOQU1F CisgICAgICAgICAgZXh0ZXJuIGNoYXIgdW5tX21vZFtdLCB1bm1fbWNoW107CisgICAgICAgICAg aW50IHkgPSBWVkJVRkwgLSAxOworICAgICAgICAgIGNoYXIgKiBzID0gdW5tX21vZDsKKyNlbmRp ZiAvKiBDS19VVFNOQU1FICovCisjaWZkZWYgSUtTRAorI2lmZGVmIENLX0xPR0lOCisgICAgICAg ICAgaWYgKGluc2VydmVyICYmIGlzZ3Vlc3QpCisgICAgICAgICAgICByZXR1cm4oIiIpOworI2Vu ZGlmIC8qIENLX0xPR0lOICovCisjZW5kaWYgLyogSUtTRCAqLworCisjaWZkZWYgQ09NTUVOVCAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogd2FzIEhQVVggKi8KKyAgICAgICAgICBpZiAoIXVu bV9tb2RbMF0gJiYgIW5vcHVzaCkKKyAgICAgICAgICAgIHp6c3RyaW5nKCJcXGZjb21tYW5kKG1v ZGVsKSIsJnMsJnkpOworLyoKKyAgIEFub3RoZXIgcG9zc2liaWxpdHkgd291bGQgYmU6CisgICAg ICJcXGZjb21tYW5kKGtzaCAtYyAnd2hlbmNlIG1vZGVsIDE+Ji0gJiYgbW9kZWwgfHwgdW5hbWUg LW0nKSIKKyAgIEJ1dCB0aGF0IHdvdWxkIGRlcGVuZCBvbiBoYXZpbmcga3NoLgorKi8KKyNlbHNl CisjaWZkZWYgT1NGMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRGlnaXRhbCBVTklY IDMuMiBhbmQgaGlnaGVyLi4uICovCisvKiBOb3RlOiBVbHRyaXggaGFzIC9ldGMvc2l6ZXIsIGJ1 dCBpdCBpcyBub3QgcHVibGljbHkgZXhlY3V0YWJsZS4gKi8KKy8qIHNpemVyIC1jIG91dHB1dHMg J2NwdTo8dGFiPjx0YWI+IkRFQ3h4eHgiJyAqLworICAgICAgICAgIGlmICghdW5tX21vZFswXSkg eworICAgICAgICAgICAgICBjaGFyICogcDsKKyAgICAgICAgICAgICAgaW50IGZsYWcgPSAwOwor ICAgICAgICAgICAgICB6enN0cmluZygiXFxmY29tbWFuZCgvdXNyL3NiaW4vc2l6ZXIgLWMpIiwm cywmeSk7CisgICAgICAgICAgICAgIGRlYnVnKEYxMTAsIkRVIG1vZGVsIix1bm1fbW9kLDApOwor ICAgICAgICAgICAgICBzID0gdW5tX21vZDsKKyAgICAgICAgICAgICAgcCA9IHVubV9tb2Q7Cisg ICAgICAgICAgICAgIHdoaWxlICgqcCkgeyAgICAgICAgICAgICAgLyogRXh0cmFjdCB0aGUgcGFy dCBpbiBxdW90ZXMgKi8KKyAgICAgICAgICAgICAgICAgIGlmICgqcCA9PSAnIicpIHsKKyAgICAg ICAgICAgICAgICAgICAgICBpZiAoZmxhZykKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr OworICAgICAgICAgICAgICAgICAgICAgIGZsYWcgPSAxOworICAgICAgICAgICAgICAgICAgICAg IHArKzsKKyAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgICAgIGlmIChmbGFnKQorICAgICAgICAgICAgICAgICAgICAqcysr ID0gKnA7CisgICAgICAgICAgICAgICAgICBwKys7CisgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgICAgKnMgPSBOVUw7CisgICAgICAgICAgfQorI2VuZGlmIC8qIE9TRjMyICovCisjZW5kaWYg LyogQ09NTUVOVCAqLworCisjaWZkZWYgQ0tfVVRTTkFNRQorICAgICAgICAgIGlmICh1bm1fbW9k WzBdKQorICAgICAgICAgICAgcmV0dXJuKChjaGFyICopdW5tX21vZCk7CisgICAgICAgICAgZWxz ZQorICAgICAgICAgICAgcmV0dXJuKChjaGFyICopdW5tX21jaCk7CisjZWxzZQorICAgICAgICAg IHJldHVybigiIik7CisjZW5kaWYgLyogQ0tfVVRTTkFNRSAqLworICAgICAgfQorCisjaWZkZWYg SUJNWDI1CisgICAgICAvKiBYLjI1IHZhcmlhYmxlcyAobG9jYWwgYW5kIHJlbW90ZSBhZGRyZXNz KSAqLworICAgICAgY2FzZSBWTl9YMjVMQToKKyAgICAgICAgaWYgKCFsb2NhbF9udWFbMF0gJiYg IXgyNWxvY2FsX251YShsb2NhbF9udWEpKQorICAgICAgICAgICp2dmJ1ZiA9IE5VTEw7CisgICAg ICAgIGVsc2UKKyAgICAgICAgICBja3N0cm5jcHkodnZidWYsbG9jYWxfbnVhLFZWQlVGTCsxKTsK KyAgICAgICAgcmV0dXJuKChjaGFyICopdnZidWYpOworCisgICAgICBjYXNlIFZOX1gyNVJBOgor ICAgICAgICBpZiAoIXJlbW90ZV9udWFbMF0pCisgICAgICAgICAgKnZ2YnVmID0gTlVMTDsKKyAg ICAgICAgZWxzZQorICAgICAgICAgIGNrc3RybmNweSh2dmJ1ZixyZW1vdGVfbnVhLFZWQlVGTCsx KTsKKyAgICAgICAgcmV0dXJuKChjaGFyICopdnZidWYpOworI2VuZGlmIC8qIElCTVgyNSAqLwor CisjaWZuZGVmIE5PRElBTAorICAgICAgY2FzZSBWTl9QRFNGWDogeworICAgICAgICAgIGV4dGVy biBjaGFyIHBkc2Z4W107CisgICAgICAgICAgcmV0dXJuKChjaGFyICopcGRzZngpOworICAgICAg fQorICAgICAgY2FzZSBWTl9EVFlQRTogeworICAgICAgICAgIGV4dGVybiBpbnQgZGlhbHR5cGU7 CisgICAgICAgICAgc3ByaW50Zih2dmJ1ZiwiJWQiLGRpYWx0eXBlKTsgLyogU0FGRSAqLworICAg ICAgICAgIHJldHVybigoY2hhciAqKXZ2YnVmKTsKKyAgICAgIH0KKyNlbmRpZiAvKiBOT0RJQUwg Ki8KKworI2lmZGVmIFVOSVgKKyAgICAgIGNhc2UgVk5fTENLUElEOiB7CisgICAgICAgICAgZXh0 ZXJuIGNoYXIgbG9ja3BpZFtdOworICAgICAgICAgIHJldHVybigoY2hhciAqKWxvY2twaWQpOwor ICAgICAgfQorI2VuZGlmIC8qIFVOSVggKi8KKworI2lmbmRlZiBOT1hGRVIKKyAgICAgIGNhc2Ug Vk5fQkxLOgorICAgICAgICBzcHJpbnRmKHZ2YnVmLCIlZCIsYmN0cik7ICAgICAgIC8qIFNBRkUg Ki8KKyAgICAgICAgcmV0dXJuKChjaGFyICopdnZidWYpOworCisgICAgICBjYXNlIFZOX1RGVElN OgorICAgICAgICBzcHJpbnRmKHZ2YnVmLCAgICAgICAgICAgICAgICAgIC8qIFNBRkUgKi8KKyNp ZmRlZiBHRlRJTUVSCisgICAgICAgICAgICAgICAgIiVsZCIsIChsb25nKShmcHRzZWNzICsgMC41 KQorI2Vsc2UKKyAgICAgICAgICAgICAgICAiJWQiLCB0c2VjcworI2VuZGlmIC8qIEdGVElNRVIg Ki8KKyAgICAgICAgICAgICAgICApOworICAgICAgICByZXR1cm4oKGNoYXIgKil2dmJ1Zik7Cisj ZW5kaWYgLyogTk9YRkVSICovCisKKyAgICAgIGNhc2UgVk5fSFdQQVI6CisgICAgICBjYXNlIFZO X1NFUklBTDogeworICAgICAgICAgIGludCBzYjsKKyAgICAgICAgICBjaGFyIGMsICogc3M7Cisg ICAgICAgICAgZXh0ZXJuIGludCBzdG9wYml0czsKKyAgICAgICAgICB2dmJ1ZlswXSA9IE5VTDsK KyAgICAgICAgICBpZiAoaHdwYXJpdHkgJiYgbG9jYWwgJiYgIW5ldHdvcmspCisgICAgICAgICAg ICBzcyA9IHBhcm5hbSgoY2hhcilod3Bhcml0eSk7CisgICAgICAgICAgZWxzZQorICAgICAgICAg ICAgc3MgPSBwYXJuYW0oKGNoYXIpcGFyaXR5KTsKKyAgICAgICAgICBpZiAoY3ggPT0gVk5fSFdQ QVIpIHsKKyAgICAgICAgICAgICAgY2tzdHJuY3B5KHZ2YnVmLHNzLFZWQlVGTCk7CisgICAgICAg ICAgICAgIHJldHVybigoY2hhciAqKXZ2YnVmKTsKKyAgICAgICAgICB9CisgICAgICAgICAgYyA9 IHNzWzBdOworICAgICAgICAgIGlmIChpc2xvd2VyKGMpKSBjID0gdG91cHBlcihjKTsKKyAgICAg ICAgICBzYiA9IHN0b3BiaXRzOworICAgICAgICAgIGlmIChzYiA8IDEpCisgICAgICAgICAgICBz YiA9IChzcGVlZCA+IDAgJiYgc3BlZWQgPD0gMTEwTCkgPyAyIDogMTsKKyAgICAgICAgICBpZiAo aHdwYXJpdHkpCisgICAgICAgICAgICBzcHJpbnRmKHZ2YnVmLCIgOCVjJWQiLGMsc2IpOyAvKiBT QUZFICovCisgICAgICAgICAgZWxzZSBpZiAocGFyaXR5KQorICAgICAgICAgICAgc3ByaW50Zih2 dmJ1ZiwiIDclYyVkIixjLHNiKTsgLyogU0FGRSAqLworICAgICAgICAgIGVsc2UKKyAgICAgICAg ICAgIHNwcmludGYodnZidWYsIiA4TiVkIixzYik7ICAvKiBTQUZFICovCisgICAgICAgICAgcmV0 dXJuKChjaGFyICopdnZidWYpOworICAgICAgfQorCisjaWZkZWYgVU5JWAorICAgICAgY2FzZSBW Tl9MQ0tESVI6IHsKKyNpZm5kZWYgTk9VVUNQCisgICAgICAgICAgZXh0ZXJuIGNoYXIgKiB1dWNw bG9ja2RpcjsKKyAgICAgICAgICBja3N0cm5jcHkodnZidWYsdXVjcGxvY2tkaXIsVlZCVUZMKTsK KyAgICAgICAgICB4ID0gc3RybGVuKHZ2YnVmKTsKKyAgICAgICAgICBpZiAoeCA+IDApIHsKKyAg ICAgICAgICAgICAgaWYgKHZ2YnVmW3gtMV0gIT0gJy8nKSB7CisgICAgICAgICAgICAgICAgICB2 dmJ1Zlt4XSA9ICcvJzsKKyAgICAgICAgICAgICAgICAgIHZ2YnVmW3grMV0gPSBOVUw7CisgICAg ICAgICAgICAgIH0KKyAgICAgICAgICB9CisjZWxzZQorICAgICAgICAgIHZ2YnVmWzBdID0gTlVM OworI2VuZGlmIC8qIE5PVVVDUCAqLworICAgICAgICAgIHJldHVybigoY2hhciAqKXZ2YnVmKTsK KyAgICAgIH0KKyNlbmRpZiAvKiBVTklYICovCisgICAgfSAvKiBCcmVhayB1cCBsb25nIHN3aXRj aCBzdGF0ZW1lbnRzLi4uICovCisKKyAgICBzd2l0Y2goeSkgeworI2lmbmRlZiBOT0RJQUwKKyAg ICAgIGNhc2UgVk5fRE1fTFA6CisgICAgICBjYXNlIFZOX0RNX1NQOgorICAgICAgY2FzZSBWTl9E TV9QRDoKKyAgICAgIGNhc2UgVk5fRE1fVEQ6CisgICAgICBjYXNlIFZOX0RNX1dBOgorICAgICAg Y2FzZSBWTl9ETV9XRDoKKyAgICAgIGNhc2UgVk5fRE1fSEY6CisgICAgICBjYXNlIFZOX0RNX1dC OgorICAgICAgY2FzZSBWTl9ETV9SQzogeworICAgICAgICAgIGV4dGVybiBjaGFyICogZ2V0ZG0o KTsKKyAgICAgICAgICBja3N0cm5jcHkodnZidWYsZ2V0ZG0oeSksVlZCVUZMKTsKKyAgICAgICAg ICByZXR1cm4oKGNoYXIgKil2dmJ1Zik7CisgICAgICB9CisjZW5kaWYgLyogTk9ESUFMICovCisK KyAgICAgIGNhc2UgVk5fVFlfTE46CisgICAgICBjYXNlIFZOX1RZX0xDOiB7CisgICAgICAgICAg ZXh0ZXJuIGludCB0eXBfbGluZXM7CisgICAgICAgICAgc3ByaW50Zih2dmJ1ZiwiJWQiLHR5cF9s aW5lcyk7IC8qIFNBRkUgKi8KKyAgICAgICAgICByZXR1cm4oKGNoYXIgKil2dmJ1Zik7CisgICAg ICB9CisgICAgICBjYXNlIFZOX1RZX0xNOiB7CisgICAgICAgICAgZXh0ZXJuIGludCB0eXBfbXRj aHM7CisgICAgICAgICAgc3ByaW50Zih2dmJ1ZiwiJWQiLHR5cF9tdGNocyk7IC8qIFNBRkUgKi8K KyAgICAgICAgICByZXR1cm4oKGNoYXIgKil2dmJ1Zik7CisgICAgICB9CisgICAgICBjYXNlIFZO X01BQ0xWTDoKKyAgICAgICAgc3ByaW50Zih2dmJ1ZiwiJWQiLG1hY2x2bCk7ICAgICAvKiBTQUZF ICovCisgICAgICAgIHJldHVybigoY2hhciAqKXZ2YnVmKTsKKyAgICB9IC8qIEJyZWFrIHVwIGxv bmcgc3dpdGNoIHN0YXRlbWVudHMuLi4gKi8KKworICAgIHN3aXRjaCh5KSB7CisjaWZuZGVmIE5P TEFTVEZJTEUKKyAgICAgIGNhc2UgVk5fTEFTVEZJTDogeworCSAgZXh0ZXJuIGNoYXIgKiBsYXN0 ZmlsZTsKKwkgIHJldHVybihsYXN0ZmlsZSA/IGxhc3RmaWxlIDogIiIpOworICAgICAgfQorI2Vu ZGlmCS8qIE5PTEFTVEZJTEUgKi8KKyNpZm5kZWYgTk9YRkVSCisgICAgICBjYXNlIFZOX1hGX0JD OgorICAgICAgICBzcHJpbnRmKHZ2YnVmLCIlZCIsY3J1bmNoZWQpOyAgIC8qIFNBRkUgKi8KKyAg ICAgICAgcmV0dXJuKChjaGFyICopdnZidWYpOworCisgICAgICBjYXNlIFZOX1hGX1RNOgorICAg ICAgICBzcHJpbnRmKHZ2YnVmLCIlZCIsdGltZW91dHMpOyAgIC8qIFNBRkUgKi8KKyAgICAgICAg cmV0dXJuKChjaGFyICopdnZidWYpOworCisgICAgICBjYXNlIFZOX1hGX1JYOgorICAgICAgICBz cHJpbnRmKHZ2YnVmLCIlZCIscmV0cmFucyk7ICAgIC8qIFNBRkUgKi8KKyAgICAgICAgcmV0dXJu KChjaGFyICopdnZidWYpOworI2VuZGlmIC8qIE5PWEZFUiAqLworCisgICAgICBjYXNlIFZOX01T X0NEOiAgICAgICAgICAgICAgICAgICAgLyogTW9kZW0gc2lnbmFscyAqLworICAgICAgY2FzZSBW Tl9NU19DVFM6CisgICAgICBjYXNlIFZOX01TX0RTUjoKKyAgICAgIGNhc2UgVk5fTVNfRFRSOgor ICAgICAgY2FzZSBWTl9NU19SSToKKyAgICAgIGNhc2UgVk5fTVNfUlRTOiB7CisgICAgICAgICAg aW50IHgsIHogPSAtMTsKKyAgICAgICAgICB4ID0gdHRnbWRtKCk7ICAgICAgICAgICAgICAgICAv KiBUcnkgdG8gZ2V0IHRoZW0gKi8KKyAgICAgICAgICBpZiAoeCA+IC0xKSB7CisgICAgICAgICAg ICAgIHN3aXRjaCAoeSkgeworICAgICAgICAgICAgICAgIGNhc2UgVk5fTVNfQ0Q6ICB6ID0gKHgg JiBCTV9EQ0QpID8gMSA6IDA7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgVk5fTVNfRFNS OiB6ID0gKHggJiBCTV9EU1IpID8gMSA6IDA7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2Ug Vk5fTVNfQ1RTOiB6ID0gKHggJiBCTV9DVFMpID8gMSA6IDA7IGJyZWFrOworI2lmZGVmIE1BQwor ICAgICAgICAgICAgICAgIGNhc2UgVk5fTVNfRFRSOiB6ID0gKHggJiBCTV9EVFIpID8gMSA6IDA7 IGJyZWFrOworI2Vsc2UKKyNpZm5kZWYgU1RSQVRVUworICAgICAgICAgICAgICAgIGNhc2UgVk5f TVNfUkk6ICB6ID0gKHggJiBCTV9STkcpID8gMSA6IDA7IGJyZWFrOworI2lmbmRlZiBOVAorICAg ICAgICAgICAgICAgIGNhc2UgVk5fTVNfRFRSOiB6ID0gKHggJiBCTV9EVFIpID8gMSA6IDA7IGJy ZWFrOworICAgICAgICAgICAgICAgIGNhc2UgVk5fTVNfUlRTOiB6ID0gKHggJiBCTV9SVFMpID8g MSA6IDA7IGJyZWFrOworI2VuZGlmIC8qIE5UICovCisjZW5kaWYgLyogU1RSQVRVUyAqLworI2Vu ZGlmIC8qIE1BQyAqLworICAgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAgIHNw cmludGYodnZidWYsIiVkIix6KTsgICAgICAgIC8qIFNBRkUgKi8KKyAgICAgICAgICByZXR1cm4o KGNoYXIgKil2dmJ1Zik7CisgICAgICB9CisgICAgICBjYXNlIFZOX01BVENIOiAgICAgICAgICAg ICAgICAgICAgLyogSU5QVVQgTUFUQ0ggKi8KKyAgICAgICAgcmV0dXJuKGlucG1hdGNoID8gaW5w bWF0Y2ggOiAiIik7CisKKyNpZmRlZiBDS0ZMT0FUCisgICAgICBjYXNlIFZOX0lTQ0FMRToJCQkv KiBJTlBVVCBTQ0FMRS1GQUNUT1IgKi8KKyAgICAgICAgcmV0dXJuKGlucHNjYWxlID8gaW5wc2Nh bGUgOiAiMS4wIik7CisjZW5kaWYJLyogQ0tGTE9BVCAqLworCisgICAgICBjYXNlIFZOX1NMTVNH OiB7ICAgICAgICAgICAgICAgICAgLyogU0VUIExJTkUgLyBIT1NUIG1lc3NhZ2UgKi8KKyAgICAg ICAgICBleHRlcm4gY2hhciAqIHNsbXNnOworICAgICAgICAgIHZ2YnVmWzBdID0gTlVMOworICAg ICAgICAgIGlmIChzbG1zZykKKyAgICAgICAgICAgIGNrc3RybmNweSh2dmJ1ZixzbG1zZyxWVkJV RkwpOworICAgICAgICAgcmV0dXJuKHZ2YnVmKTsKKyAgICAgIH0KKworICAgICAgY2FzZSBWTl9U WFRESVI6ICAgICAgICAgICAgICAgICAgIC8qIFRFWFRESVIgKi8KKyAgICAgICAgcmV0dXJuKGtf aW5mb19kaXIgPyBrX2luZm9fZGlyIDogIiIpOworCisjaWZkZWYgRk5GTE9BVAorICAgICAgY2Fz ZSBWTl9NQV9QSToKKyAgICAgICAgcmV0dXJuKG1hdGhfcGkpOworCisgICAgICBjYXNlIFZOX01B X0U6CisgICAgICAgIHJldHVybihtYXRoX2UpOworCisgICAgICBjYXNlIFZOX01BX1BSOgorICAg ICAgICBzcHJpbnRmKHZ2YnVmLCIlZCIsZnBfZGlnaXRzKTsgIC8qIFNBRkUgKi8KKyAgICAgICAg cmV0dXJuKHZ2YnVmKTsKKyNlbmRpZiAvKiBGTkZMT0FUICovCisKKyAgICAgIGNhc2UgVk5fQ01E Qkw6CisgICAgICAgIHNwcmludGYodnZidWYsIiVkIixDTURCTCk7ICAgICAgLyogU0FGRSAqLwor ICAgICAgICByZXR1cm4odnZidWYpOworCisjaWZkZWYgQ0tDSEFOTkVMSU8KKyAgICAgIGNhc2Ug Vk5fRkVSUjogeworICAgICAgICAgIGV4dGVybiBpbnQgel9lcnJvcjsKKyAgICAgICAgICBzcHJp bnRmKHZ2YnVmLCIlZCIsel9lcnJvcik7ICAvKiBTQUZFICovCisgICAgICAgICAgcmV0dXJuKHZ2 YnVmKTsKKyAgICAgIH0KKyAgICAgIGNhc2UgVk5fRk1BWDogeworICAgICAgICAgIGV4dGVybiBp bnQgel9tYXhjaGFuOworICAgICAgICAgIHNwcmludGYodnZidWYsIiVkIix6X21heGNoYW4pOyAv KiBTQUZFICovCisgICAgICAgICAgcmV0dXJuKHZ2YnVmKTsKKyAgICAgIH0KKyAgICAgIGNhc2Ug Vk5fRkNPVTogeworICAgICAgICAgIGV4dGVybiBpbnQgel9maWxjb3VudDsKKyAgICAgICAgICBz cHJpbnRmKHZ2YnVmLCIlZCIsel9maWxjb3VudCk7IC8qIFNBRkUgKi8KKyAgICAgICAgICByZXR1 cm4odnZidWYpOworICAgICAgfQorI2VuZGlmIC8qIENLQ0hBTk5FTElPICovCisKKyNpZm5kZWYg Tk9ESUFMCisgICAgICBjYXNlIFZOX0RSVFI6IHsKKyAgICAgICAgICBleHRlcm4gaW50IGRpYWxj b3VudDsKKyAgICAgICAgICBzcHJpbnRmKHZ2YnVmLCIlZCIsZGlhbGNvdW50KTsgLyogU0FGRSAq LworICAgICAgICAgIHJldHVybih2dmJ1Zik7CisgICAgICB9CisjZW5kaWYgLyogTk9ESUFMICov CisKKyNpZm5kZWYgTk9MT0dESUFMCisjaWZuZGVmIE5PTE9DQUwKKyAgICAgIGNhc2UgVk5fQ1hU SU1FOgorICAgICAgICBzcHJpbnRmKHZ2YnVmLCIlbGQiLGRvbG9nc2hvdygwKSk7IC8qIFNBRkUg Ki8KKyAgICAgICAgcmV0dXJuKHZ2YnVmKTsKKyNlbmRpZiAvKiBOT0xPQ0FMICovCisjZW5kaWYg LyogTk9MT0dESUFMICovCisKKyAgICAgIGNhc2UgVk5fQllURToKKyAgICAgICAgc3ByaW50Zih2 dmJ1ZiwiJWQiLGJ5dGVvcmRlcik7ICAvKiBTQUZFICovCisgICAgICAgIHJldHVybih2dmJ1Zik7 CisKKyAgICAgIGNhc2UgVk5fS0JDSEFSOgorICAgICAgICB2dmJ1ZlswXSA9IE5VTDsKKyAgICAg ICAgdnZidWZbMV0gPSBOVUw7CisgICAgICAgIGlmIChrYmNoYXIgPiAwKQorICAgICAgICAgIHZ2 YnVmWzBdID0gKGtiY2hhciAmIDB4ZmYpOworICAgICAgICByZXR1cm4odnZidWYpOworCisgICAg ICBjYXNlIFZOX1RUWU5BTTogeworI2lmZGVmIEhBVkVDVFROQU0KKyAgICAgICAgICBleHRlcm4g Y2hhciBjdHRuYW1bXTsKKyAgICAgICAgICByZXR1cm4oKGNoYXIgKiljdHRuYW0pOworI2Vsc2UK KyAgICAgICAgICByZXR1cm4oQ1RUTkFNKTsKKyNlbmRpZiAvKiBIQVZFQ1RUTkFNICovCisgICAg ICB9CisKKyAgICAgIGNhc2UgVk5fUFJPTVBUOgorICAgICAgICByZXR1cm4oY21nZXRwKCkpOwor CisgICAgICBjYXNlIFZOX0JVSUxEOiB7CisgICAgICAgICAgZXh0ZXJuIGNoYXIgKiBidWlsZGlk OworICAgICAgICAgIHJldHVybihidWlsZGlkKTsKKyAgICAgIH0KKworI2lmbmRlZiBOT1NFWFAK KyAgICAgIGNhc2UgVk5fU0VYUDogeworICAgICAgICAgIGV4dGVybiBjaGFyICogbGFzdHNleHA7 CisgICAgICAgICAgcmV0dXJuKGxhc3RzZXhwID8gbGFzdHNleHAgOiAiIik7CisgICAgICB9Cisg ICAgICBjYXNlIFZOX1ZTRVhQOiB7CisgICAgICAgICAgZXh0ZXJuIGNoYXIgKiBzZXhwdmFsOwor ICAgICAgICAgIHJldHVybihzZXhwdmFsID8gc2V4cHZhbCA6ICIiKTsKKyAgICAgIH0KKyAgICAg IGNhc2UgVk5fTFNFWFA6IHsKKyAgICAgICAgICBleHRlcm4gaW50IHNleHBkZXA7CisgICAgICAg ICAgY2tzdHJuY3B5KHZ2YnVmLGNraXRvYShzZXhwZGVwKSxWVkJVRkwpOworICAgICAgICAgIHJl dHVybih2dmJ1Zik7CisgICAgICB9CisjZW5kaWYgLyogTk9TRVhQICovCisKKyNpZmRlZiBHRlRJ TUVSCisgICAgICBjYXNlIFZOX0ZUSU1FOiB7CisgICAgICAgICAgQ0tGTE9BVCBmOworICAgICAg ICAgIHp0aW1lKCZwKTsKKyAgICAgICAgICBpZiAocCA9PSBOVUxMIHx8ICpwID09IE5VTCkKKyAg ICAgICAgICAgIHJldHVybihOVUxMKTsKKyAgICAgICAgICB6ID0gYXRvbChwKzExKSAqIDM2MDBM ICsgYXRvbChwKzE0KSAqIDYwTCArIGF0b2wocCsxNyk7CisgICAgICAgICAgZiA9IChDS0ZMT0FU KXogKyAoKENLRkxPQVQpenR1c2VjKSAvIDEwMDAwMDAuMDsKKyAgICAgICAgICBzcHJpbnRmKHZ2 YnVmLCIlZiIsZik7ICAgICAgICAvKiBTQUZFICovCisgICAgICAgICAgcmV0dXJuKHZ2YnVmKTsK KyAgICAgIH0KKyNlbmRpZiAvKiBHRlRJTUVSICovCisKKyNpZm5kZWYgTk9IVFRQCisgICAgICBj YXNlIFZOX0hUVFBfQzogeyAgICAgICAgICAgICAgICAgLyogSFRUUCBDb2RlICovCisgICAgICAg ICAgZXh0ZXJuIGludCBodHRwX2NvZGU7CisgICAgICAgICAgcmV0dXJuKGNraXRvYShodHRwX2Nv ZGUpKTsKKyAgICAgIH0KKyAgICAgIGNhc2UgVk5fSFRUUF9OOiAgICAgICAgICAgICAgICAgICAv KiBIVFRQIENvbm5lY3RlZCAqLworICAgICAgICByZXR1cm4oIGh0dHBfaXNjb25uZWN0ZWQoKSA/ ICIxIiA6ICIwIik7CisgICAgICBjYXNlIFZOX0hUVFBfSDogICAgICAgICAgICAgICAgICAgLyog SFRUUCBIb3N0ICovCisgICAgICAgIHJldHVybiggKGNoYXIgKilodHRwX2hvc3QoKSApOworICAg ICAgY2FzZSBWTl9IVFRQX006IHsgICAgICAgICAgICAgICAgIC8qIEhUVFAgTWVzc2FnZSAqLwor ICAgICAgICAgIGV4dGVybiBjaGFyIGh0dHBfcmVwbHlfc3RyW107CisgICAgICAgICAgcmV0dXJu KChjaGFyICopaHR0cF9yZXBseV9zdHIpOworICAgICAgfQorICAgICAgY2FzZSBWTl9IVFRQX1M6 ICAgICAgICAgICAgICAgICAgIC8qIEhUVFAgU2VjdXJpdHkgKi8KKyAgICAgICAgcmV0dXJuKChj aGFyICopaHR0cF9zZWN1cml0eSgpKTsKKyNlbmRpZiAvKiBOT0hUVFAgKi8KKworI2lmZGVmIE5F V0ZUUAorICAgICAgY2FzZSBWTl9GVFBfQjoKKyAgICAgICAgcmV0dXJuKChjaGFyICopZnRwX2Nw bF9tb2RlKCkpOworICAgICAgY2FzZSBWTl9GVFBfRDoKKyAgICAgICAgcmV0dXJuKChjaGFyICop ZnRwX2RwbF9tb2RlKCkpOworICAgICAgY2FzZSBWTl9GVFBfWjoKKyAgICAgICAgcmV0dXJuKChj aGFyICopZnRwX2F1dGh0eXBlKCkpOworICAgICAgY2FzZSBWTl9GVFBfQzogeworICAgICAgICAg IGV4dGVybiBpbnQgZnRwY29kZTsKKyAgICAgICAgICByZXR1cm4oY2tpdG9hKGZ0cGNvZGUpKTsK KyAgICAgIH0KKyAgICAgIGNhc2UgVk5fRlRQX006IHsKKyAgICAgICAgICBleHRlcm4gY2hhciBm dHBfcmVwbHlfc3RyW107CisgICAgICAgICAgaWYgKGlzZGlnaXQoZnRwX3JlcGx5X3N0clswXSkg JiYKKyAgICAgICAgICAgICAgaXNkaWdpdChmdHBfcmVwbHlfc3RyWzFdKSAmJgorICAgICAgICAg ICAgICBpc2RpZ2l0KGZ0cF9yZXBseV9zdHJbMl0pICYmCisgICAgICAgICAgICAgIGZ0cF9yZXBs eV9zdHJbM10gPT0gJyAnKQorICAgICAgICAgICAgcmV0dXJuKCZmdHBfcmVwbHlfc3RyWzRdKTsK KyAgICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4oZnRwX3JlcGx5X3N0cik7CisgICAg ICB9CisgICAgICBjYXNlIFZOX0ZUUF9TOiB7CisgICAgICAgICAgZXh0ZXJuIGNoYXIgZnRwX3Ny dnR5cFtdOworICAgICAgICAgIHJldHVybigoY2hhciAqKWZ0cF9zcnZ0eXApOworICAgICAgfQor ICAgICAgY2FzZSBWTl9GVFBfSDogeworICAgICAgICAgIGV4dGVybiBjaGFyICogZnRwX2hvc3Q7 CisgICAgICAgICAgcmV0dXJuKGZ0cF9ob3N0ID8gZnRwX2hvc3QgOiAiIik7CisgICAgICB9Cisg ICAgICBjYXNlIFZOX0ZUUF9YOiB7ICAgICAgICAgICAgICAgICAgLyogRlRQIENvbm5lY3RlZCAq LworICAgICAgICAgIHJldHVybihmdHBpc2Nvbm5lY3RlZCgpID8gIjEiIDogIjAiKTsKKyAgICAg IH0KKyAgICAgIGNhc2UgVk5fRlRQX0w6IHsgICAgICAgICAgICAgICAgICAvKiBGVFAgTG9nZ2Vk IGluICovCisgICAgICAgICAgcmV0dXJuKGZ0cGlzbG9nZ2VkaW4oKSA/ICIxIiA6ICIwIik7Cisg ICAgICB9CisgICAgICBjYXNlIFZOX0ZUUF9HOiB7ICAgICAgICAgICAgICAgICAgLyogRlRQIEdF VC1QVVQtUkVNT1RFICovCisgICAgICAgICAgZXh0ZXJuIGludCBmdHBnZXQ7CisgICAgICAgICAg Y2hhciAqIHMgPSAiIjsKKyAgICAgICAgICBzd2l0Y2ggKGZ0cGdldCkgeworICAgICAgICAgICAg Y2FzZSAwOiBzID0gImtlcm1pdCI7IGJyZWFrOworICAgICAgICAgICAgY2FzZSAxOiBzID0gImZ0 cCI7IGJyZWFrOworICAgICAgICAgICAgY2FzZSAyOiBzID0gImF1dG8iOyBicmVhazsKKyAgICAg ICAgICB9CisgICAgICAgICAgcmV0dXJuKHMpOworICAgICAgfQorI2VuZGlmIC8qIE5FV0ZUUCAq LworCisjaWZuZGVmIE5PTE9DQUwKKyAgICAgIGNhc2UgVk5fQ1hfU1RBOiB7ICAgICAgICAgICAg ICAgICAvKiBDT05ORUNUIHN0YXR1cyAqLworICAgICAgICAgIGV4dGVybiBpbnQgY3hfc3RhdHVz OworICAgICAgICAgIHJldHVybihja2l0b2EoY3hfc3RhdHVzKSk7CisgICAgICB9CisjZW5kaWYg LyogTk9MT0NBTCAqLworICAgICAgY2FzZSBWTl9OT1c6ICAgICAgICAgICAgICAgICAgICAgIC8q IFRpbWVzdGFtcCAqLworICAgICAgICByZXR1cm4oY2tjdnRkYXRlKHAsMCkpOworCisgICAgICBj YXNlIFZOX0hPVVI6ICAgICAgICAgICAgICAgICAgICAgLyogSG91ciBvZiB0aGUgZGF5ICovCisg ICAgICAgIHp0aW1lKCZwKTsgICAgICAgICAgICAgICAgICAgICAgLyogIlRodSBGZWIgIDggMTI6 MDA6MDAgMTk5MCIgKi8KKyAgICAgICAgaWYgKCFwKSBwID0gIiI7CisgICAgICAgIGlmICghKnAp IHJldHVybihwKTsKKyAgICAgICAgdnZidWZbMF0gPSBwWzExXTsKKyAgICAgICAgdnZidWZbMV0g PSBwWzEyXTsKKyAgICAgICAgdnZidWZbMl0gPSBOVUw7CisgICAgICAgIHJldHVybih2dmJ1Zik7 ICAgICAgICAgICAgICAgICAgLyogYW5kIHJldHVybiBpdCAqLworCisgICAgICBjYXNlIFZOX0JJ VFM6CQkJLyogQml0cyAoMTYsIDMyLCA2NCkgKi8KKwlpZiAoc2l6ZW9mKGxvbmcpID4gNCkKKwkg IHJldHVybihja2l0b2EoOCpzaXplb2YobG9uZykpKTsKKwllbHNlCisJICByZXR1cm4oY2tpdG9h KDgqc2l6ZW9mKGludCkpKTsKKworICAgICAgY2FzZSBWTl9MQVNUS1dWOgkJCS8qIDIxMiAqLwor CXJldHVybihsYXN0a3d2YWwgPyBsYXN0a3d2YWwgOiAiIik7CisKKyAgICAgIGNhc2UgVk5fSE9T VElQOiB7CQkJLyogMjEyICovCisjaWZkZWYgVENQU09DS0VUCisJICBleHRlcm4gY2hhciBob3N0 aXBhZGRyW107CisJICByZXR1cm4oKGNoYXIgKilob3N0aXBhZGRyKTsKKyNlbHNlCisJICByZXR1 cm4oIiIpOworI2VuZGlmCS8qIFRDUFNPQ0tFVCAqLworICAgICAgfQorICAgICAgY2FzZSBWTl9J TlBNU0c6CisJc3dpdGNoIChpbnN0YXR1cykgeworCSAgY2FzZSBJTlBfT0s6ICByZXR1cm4oIlNV Q0NFU1MiKTsKKwkgIGNhc2UgSU5QX1RPOiAgcmV0dXJuKCJUaW1lZCBvdXQiKTsKKwkgIGNhc2Ug SU5QX1VJOiAgcmV0dXJuKCJLZXlib2FyZCBpbnRlcnJ1cHQiKTsKKwkgIGNhc2UgSU5QX0lFOiAg cmV0dXJuKCJJbnRlcm5hbCBlcnJvciIpOworCSAgY2FzZSBJTlBfSU86ICByZXR1cm4oIkkvTyBl cnJvciBvciBjb25uZWN0aW9uIGxvc3QiKTsKKwkgIGNhc2UgSU5QX0lLUzogcmV0dXJuKCJJTlBV VCBkaXNhYmxlZCIpOworCSAgY2FzZSBJTlBfQkY6ICByZXR1cm4oIkJ1ZmZlciBmaWxsZWQgYW5k IC9OT1dSQVAgc2V0Iik7CisJICBkZWZhdWx0OiAgICAgIHJldHVybigiVW5rbm93biIpOworCX0K KworICAgICAgY2FzZSBWTl9WQVJFVkFMOgkJCS8qIDIxMiAqLworCXJldHVybih2YXJldmFsID8g InJlY3Vyc2l2ZSIgOiAic2ltcGxlIik7CisKKyAgICAgIGNhc2UgVk5fTE9HX0NPTjoJCQkvKiBc diguLi4pIGZvciBsb2cgZmlsZXMgKi8KKyNpZmRlZiBDS0xPR0RJQUwKKyAgICAgICAgcmV0dXJu KGRpYWZpbCk7CisjZWxzZSAKKyAgICAgICAgcmV0dXJuKCIiKTsKKyNlbmRpZgorICAgICAgY2Fz ZSBWTl9MT0dfUEtUOgorI2lmbmRlZiBOT1hGRVIKKyAgICAgICAgcmV0dXJuKHBrdGZpbCk7Cisj ZWxzZQorICAgICAgICByZXR1cm4oIiIpOworI2VuZGlmCisgICAgICBjYXNlIFZOX0xPR19TRVM6 CisjaWZuZGVmIE5PTE9DQUwKKyAgICAgICAgcmV0dXJuKHNlc2ZpbCk7CisjZWxzZQorICAgICAg ICByZXR1cm4oIiIpOworI2VuZGlmCisgICAgICBjYXNlIFZOX0xPR19UUkE6CisjaWZkZWYgVExP RworICAgICAgICByZXR1cm4odHJhZmlsKTsKKyNlbHNlCisgICAgICAgIHJldHVybigiIik7Cisj ZW5kaWYKKyAgICAgIGNhc2UgVk5fTE9HX0RFQjoKKyNpZmRlZiBERUJVRworICAgICAgICByZXR1 cm4oZGViZmlsKTsKKyNlbHNlCisgICAgICAgIHJldHVybigiIik7CisjZW5kaWYKKyAgICAgIGNh c2UgVk5fUFJFVkNNRDogeworCSAgZXh0ZXJuIGNoYXIgKiBwcmV2Y21kOworCSAgcmV0dXJuKHBy ZXZjbWQgPyAgcHJldmNtZCA6ICIiKTsKKyAgICAgIH0KKyAgICB9CisKKyNpZm5kZWYgTk9ESUFM CisgICAgc3dpdGNoICh5KSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2FsbGVyIElEIHZh bHVlcyAqLworICAgICAgZXh0ZXJuIGNoYXIKKyAgICAgICAgKiBjYWxsaWRfZGF0ZSwgKiBjYWxs aWRfdGltZSwgKiBjYWxsaWRfbmFtZSwKKyAgICAgICAgKiBjYWxsaWRfbm1iciwgKiBjYWxsaWRf bWVzZzsKKworICAgICAgY2FzZSBWTl9DSV9EQToKKyAgICAgICAgcmV0dXJuKGNhbGxpZF9kYXRl ID8gY2FsbGlkX2RhdGUgOiAiIik7CisKKyAgICAgIGNhc2UgVk5fQ0lfVEk6CisgICAgICAgIHJl dHVybihjYWxsaWRfdGltZSA/IGNhbGxpZF90aW1lIDogIiIpOworCisgICAgICBjYXNlIFZOX0NJ X05BOgorICAgICAgICByZXR1cm4oY2FsbGlkX25hbWUgPyBjYWxsaWRfbmFtZSA6ICIiKTsKKwor ICAgICAgY2FzZSBWTl9DSV9OVToKKyAgICAgICAgcmV0dXJuKGNhbGxpZF9ubWJyID8gY2FsbGlk X25tYnIgOiAiIik7CisKKyAgICAgIGNhc2UgVk5fQ0lfTUU6CisgICAgICAgIHJldHVybihjYWxs aWRfbWVzZyA/IGNhbGxpZF9tZXNnIDogIiIpOworCisgICAgfSAvKiBFbmQgb2YgdmFyaWFibGUt bmFtZSBzd2l0Y2hlcyAqLworI2VuZGlmIC8qIE5PRElBTCAqLworCisjaWZkZWYgTlQKKyAgICBz d2l0Y2ggKHkpIHsKKyAgICAgIGNhc2UgVk5fUEVSU09OQUw6CisgICAgICAgIHAgPSAoY2hhciAq KUdldFBlcnNvbmFsKCk7CisgICAgICAgIGlmIChwKSB7CisgICAgICAgICAgICBHZXRTaG9ydFBh dGhOYW1lKHAsdnZidWYsVlZCVUZMKTsKKyAgICAgICAgICAgIHJldHVybih2dmJ1Zik7CisgICAg ICAgIH0KKyAgICAgICAgcmV0dXJuKCIiKTsKKyAgICAgIGNhc2UgVk5fREVTS1RPUDoKKyAgICAg ICAgICBwID0gKGNoYXIgKilHZXREZXNrdG9wKCk7CisgICAgICAgICAgaWYgKHApIHsKKyAgICAg ICAgICAgICAgR2V0U2hvcnRQYXRoTmFtZShwLHZ2YnVmLFZWQlVGTCk7CisgICAgICAgICAgICAg IHJldHVybih2dmJ1Zik7CisgICAgICAgICAgfQorICAgICAgICAgIHJldHVybigiIik7CisgICAg ICBjYXNlIFZOX0NPTU1PTjoKKyAgICAgICAgcCA9IChjaGFyICopR2V0QXBwRGF0YSgxKTsKKyAg ICAgICAgaWYgKHApIHsKKyAgICAgICAgICAgIGNrbWFrbXNnKHZ2YnVmLFZWQlVGTCxwLCJLZXJt aXQgOTUvIixOVUxMLE5VTEwpOworICAgICAgICAgICAgR2V0U2hvcnRQYXRoTmFtZSh2dmJ1Zix2 dmJ1ZixWVkJVRkwpOworICAgICAgICAgICAgcmV0dXJuKHZ2YnVmKTsKKyAgICAgICAgfQorICAg ICAgICByZXR1cm4oIiIpOworICAgICAgY2FzZSBWTl9BUFBEQVRBOgorICAgICAgICBwID0gKGNo YXIgKilHZXRBcHBEYXRhKDApOworICAgICAgICBpZiAocCkgeworICAgICAgICAgICAgY2ttYWtt c2codnZidWYsVlZCVUZMLHAsIktlcm1pdCA5NS8iLE5VTEwsTlVMTCk7CisgICAgICAgICAgICBH ZXRTaG9ydFBhdGhOYW1lKHZ2YnVmLHZ2YnVmLFZWQlVGTCk7CisgICAgICAgICAgICByZXR1cm4o dnZidWYpOworICAgICAgICB9CisgICAgICAgIHJldHVybigiIik7CisgICAgfQorI2VuZGlmIC8q IE5UICovCisKKyNpZmRlZiBUTl9DT01QT1JUCisgICAgc3dpdGNoICh5KSB7CisgICAgICBjYXNl IFZOX1ROQ19TSUc6IHsKKyAgICAgICAgcCA9IChjaGFyICopIHRuY19nZXRfc2lnbmF0dXJlKCk7 CisgICAgICAgIGNrc3RybmNweSh2dmJ1ZixwID8gcCA6ICIiLFZWQlVGTCk7CisgICAgICAgIHJl dHVybih2dmJ1Zik7CisgICAgICB9CisgICAgfQorI2VuZGlmIC8qIFROX0NPTVBPUlQgKi8KKwor I2lmZGVmIEtVSQorICAgIHN3aXRjaCAoeSkgeworICAgICAgY2FzZSBWTl9HVUlfUlVOOiB7CisJ ICBleHRlcm4gSFdORCBnZXRId25kS1VJKCk7CisJICBpZiAoIElzSWNvbmljKGdldEh3bmRLVUko KSkgKQorICAgICAgICAgICAgcmV0dXJuKCJtaW5pbWl6ZWQiKTsKKwkgIGlmICggSXNab29tZWQo Z2V0SHduZEtVSSgpKSApCisgICAgICAgICAgICByZXR1cm4oIm1heGltaXplZCIpOworCSAgcmV0 dXJuKCJyZXN0b3JlZCIpOworICAgICAgfQorICAgICAgY2FzZSBWTl9HVUlfWFA6CisgICAgICAg IHNwcmludGYodnZidWYsIiVkIixnZXRfZ3VpX3dpbmRvd19wb3NfeCgpKTsgIC8qIFNBRkUgKi8K KyAgICAgICAgcmV0dXJuKHZ2YnVmKTsKKyAgICAgIGNhc2UgVk5fR1VJX1lQOgorICAgICAgICBz cHJpbnRmKHZ2YnVmLCIlZCIsZ2V0X2d1aV93aW5kb3dfcG9zX3koKSk7ICAvKiBTQUZFICovCisg ICAgICAgIHJldHVybih2dmJ1Zik7CisgICAgICBjYXNlIFZOX0dVSV9YUjoKKyAgICAgICAgc3By aW50Zih2dmJ1ZiwiJWQiLEdldFN5c3RlbU1ldHJpY3MoU01fQ1hTQ1JFRU4pKTsgIC8qIFNBRkUg Ki8KKyAgICAgICAgcmV0dXJuKHZ2YnVmKTsKKyAgICAgIGNhc2UgVk5fR1VJX1lSOgorICAgICAg ICBzcHJpbnRmKHZ2YnVmLCIlZCIsR2V0U3lzdGVtTWV0cmljcyhTTV9DWVNDUkVFTikpOyAgLyog U0FGRSAqLworICAgICAgICByZXR1cm4odnZidWYpOworICAgICAgY2FzZSBWTl9HVUlfRk5NOgor ICAgICAgICAgIGlmICggbnRlcm1mb250ID4gMCApIHsKKyAgICAgICAgICAgICAgaW50IGk7Cisg ICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBudGVybWZvbnQ7IGkrKykgeworICAgICAgICAg ICAgICAgICAgaWYgKHR0X2ZvbnQgPT0gdGVybV9mb250W2ldLmt3dmFsKSB7CisgICAgICAgICAg ICAgICAgICAgICAgY2tzdHJuY3B5KHZ2YnVmLHRlcm1fZm9udFtpXS5rd2QsVlZCVUZMKTsKKyAg ICAgICAgICAgICAgICAgICAgICByZXR1cm4odnZidWYpOworICAgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAgIHJldHVybigiKHVua25vd24p Iik7CisgICAgICBjYXNlIFZOX0dVSV9GU1o6CisgICAgICAgICAgY2tzdHJuY3B5KHZ2YnVmLGNr aXRvYSh0dF9mb250X3NpemUvMiksVlZCVUZMKTsKKyAgICAgICAgICBpZiAoIHR0X2ZvbnRfc2l6 ZSAlIDIgKQorICAgICAgICAgICAgICBja3N0cm5jYXQodnZidWYsIi41IixWVkJVRkwpOworICAg ICAgICAgIHJldHVybih2dmJ1Zik7CisgICAgfQorI2VuZGlmIC8qIEtVSSAqLworCisgICAgZm5z dWNjZXNzID0gMDsKKyAgICBpZiAoZm5lcnJvcikgeworICAgICAgICBmbnN1Y2Nlc3MgPSAwOwor ICAgIH0KKyAgICBpZiAoZm5kaWFncykgeworICAgICAgICBpZiAoIWVtYnVmWzBdKQorICAgICAg ICAgIGNrc3RybmNweShlbWJ1ZiwiPEVSUk9SOk5PX1NVQ0hfVkFSSUFCTEU+IixFTUJVRkxFTik7 CisgICAgICAgIHByaW50ZigiPyVzXG4iLGVtYnVmKTsKKyAgICAgICAgcmV0dXJuKChjaGFyICop ZW1idWYpOworICAgIH0gZWxzZQorICAgICAgcmV0dXJuKCIiKTsKK30KKyNlbmRpZiAvKiBOT1NQ TCAqLworCisKKy8qCisgIFggWCBTIFQgUiBJIE4gRyAgLS0gIEV4cGFuZCB2YXJpYWJsZXMgYW5k IGJhY2tzbGFzaCBjb2Rlcy4KKworICAgIGludCB4eHRzdHJpbmcocywmczIsJm4pOworCisgIEV4 cGFuZHMgXCBlc2NhcGVzIHZpYSByZWN1cnNpdmUgZGVzY2VudC4KKyAgQXJndW1lbnQgcyBpcyBh IHBvaW50ZXIgdG8gc3RyaW5nIHRvIGV4cGFuZCAoc291cmNlKS4KKyAgQXJndW1lbnQgczIgaXMg dGhlIGFkZHJlc3Mgb2Ygd2hlcmUgdG8gcHV0IHJlc3VsdCAoZGVzdGluYXRpb24pLgorICBBcmd1 bWVudCBuIGlzIHRoZSBsZW5ndGggb2YgdGhlIGRlc3RpbmF0aW9uIHN0cmluZyAodG8gcHJldmVu dCBvdmVycnVucykuCisgIFJldHVybnMgLTEgb24gZmFpbHVyZSwgMCBvbiBzdWNjZXNzLAorICAg IHdpdGggZGVzdGluYXRpb24gc3RyaW5nIG51bGwtdGVybWluYXRlZCBhbmQgczIgcG9pbnRpbmcg dG8gdGhlCisgICAgdGVybWluYXRpbmcgbnVsbCwgc28gdGhhdCBzdWJzZXF1ZW50IGNoYXJhY3Rl cnMgY2FuIGJlIGFkZGVkLgorICAgIEZhaWx1cmUgcmVhc29ucyBpbmNsdWRlIGRlc3RpbmF0aW9u IGJ1ZmZlciBpcyBmaWxsZWQgdXAuCisqLworCisjZGVmaW5lIFhYREVQTElNIDEwMCAgICAgICAg ICAgICAgICAgICAgLyogUmVjdXJzaW9uIGRlcHRoIGxpbWl0ICovCisvKgorICBJbiBXaW5kb3dz IHRoZSBzdGFjayBpcyBsaW1pdGVkIHRvIDI1Nksgc28gYmlnIGNoYXJhY3RlciBhcnJheXMgbGlr ZQorICB2bmFtYnVmIGNhbid0IGJlIG9uIHRoZSBzdGFjayBpbiByZWN1cnNpdmUgZnVuY3Rpb25z IGxpa2UgenpzdHJpbmcoKS4KKyAgQnV0IHRoYXQncyBubyByZWFzb24gdXNlIG1hbGxvYygpIGlu IFVuaXggb3IgVk1TLCB3aGljaCBkb24ndCBoYXZlCisgIHRoaXMga2luZCBvZiByZXN0cmljdGlv bi4KKyovCisjaWZkZWYgRFZOQU1CVUYJCQkJLyogRHluYW1pYyB2bmFtYnVmW10gKi8KKyN1bmRl ZiBEVk5BTUJVRgkJCQkvKiBDbGVhbiBzbGF0ZSAqLworI2VuZGlmIC8qIERWTkFNQlVGICovCisK KyNpZm5kZWYgTk9TUEwJCQkJLyogT25seSBpZiBTUEwgaW5jbHVkZWQgKi8KKyNpZmRlZiBPUzIJ CQkJLyogT25seSBmb3IgSzk1ICovCisjZGVmaW5lIERWTkFNQlVGCisjZW5kaWYgLyogT1MyICov CisjZW5kaWYgLyogTk9TUEwgKi8KKworaW50Cit6enN0cmluZyhzLHMyLG4pIGNoYXIgKnM7IGNo YXIgKipzMjsgaW50ICpuOyB7CisgICAgaW50IHgsICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogQ3VycmVudCBjaGFyYWN0ZXIgKi8KKyAgICAgICAgeSwgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBXb3JrZXIgKi8KKyAgICAgICAgcHAsICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBQYXJlbiBsZXZlbCAqLworICAgICAgICBrcCwgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIEJyYWNlIGxldmVsICovCisgICAgICAgIGFyZ24sICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogRnVuY3Rpb24gYXJndW1lbnQgY291bnRlciAqLworICAgICAgICBuMiwg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExvY2FsIGNvcHkgb2YgbiAqLworICAgICAg ICBkLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFycmF5IGRpbWVuc2lvbiAqLwor ICAgICAgICB2YmksICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFZhcmlhYmxlIGlkIChp bnRlZ2VyIGZvcm0pICovCisgICAgICAgIGFyZ2wsICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogU3RyaW5nIGFyZ3VtZW50IGxlbmd0aCAqLworICAgICAgICBueCwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIFNhdmUgb3JpZ2luYWwgbGVuZ3RoICovCisJcXVvdGluZyA9IDA7CQkJ LyogMjk5ICovCisKKyAgICBjaGFyIHZiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBW YXJpYWJsZSBpZCAoY2hhciBmb3JtKSAqLworICAgICAgICAqdnAsICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIFBvaW50ZXIgdG8gdmFyaWFibGUgZGVmaW5pdGlvbiAqLworICAgICAgICAq bmV3LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExvY2FsIHBvaW50ZXIgdG8gdGFyZ2V0 IHN0cmluZyAqLworI2lmZGVmIENPTU1FTlQKKyAgICAgICAgKm9sZCwgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBTYXZlIG9yaWdpbmFsIHRhcmdldCBwb2ludGVyICovCisjZW5kaWYgLyog Q09NTUVOVCAqLworICAgICAgICAqcCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdv cmtlciAqLworICAgICAgICAqcSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdvcmtl ciAqLworICAgICAgICAqczM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdvcmtlciAq LworICAgIGludCAgeDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdvcmtlciAqLwor ICAgIGNoYXIgKnIgID0gKGNoYXIgKikwOyAgICAgICAgICAgICAgIC8qIEZvciBob2xkaW5nIGZ1 bmN0aW9uIGFyZ3MgKi8KKyAgICBjaGFyICpyMiA9IChjaGFyICopMDsKKyAgICBjaGFyICpyM3A7 CisKKyNpZm5kZWYgTk9TUEwKKyNpZmRlZiBEVk5BTUJVRgorICAgIGNoYXIgKiB2bmFtYnVmID0g TlVMTDsgICAgICAgICAgICAgIC8qIEJ1ZmZlciBmb3IgdmFyaWFibGUvZnVuY3Rpb24gbmFtZSAq LworI2Vsc2UgLyogRFZOQU1CVUYgKi8KKyAgICBjaGFyIHZuYW1idWZbVk5BTUxdOyAgICAgICAg ICAgICAgICAvKiBCdWZmZXIgZm9yIHZhcmlhYmxlL2Z1bmN0aW9uIG5hbWUgKi8KKyNlbmRpZiAv KiBEVk5BTUJVRiAqLworICAgIGNoYXIgKmFyZ3BbRk5BUkdTXTsgICAgICAgICAgICAgICAgIC8q IFBvaW50ZXJzIHRvIGZ1bmN0aW9uIGFyZ3MgKi8KKyNlbmRpZiAvKiBOT1NQTCAqLworCisgICAg c3RhdGljIGludCBkZXB0aCA9IDA7ICAgICAgICAgICAgICAgLyogQ2FsbCBkZXB0aCwgYXZvaWQg b3ZlcmZsb3cgKi8KKworICAgIG4yID0gKm47ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IE1ha2UgbG9jYWwgY29waWVzIG9mIGFyZ3MgKi8KKyAgICBueCA9IG4yOworCisjaWZkZWYgQ09N TUVOVAorICAgIC8qIFRoaXMgaXMgYWx3YXlzIDMySyBpbiBCSUdCVUZPSyBidWlsZHMgKi8KKyAg ICBpZiAoZGVwdGggPT0gMCkKKyAgICAgIGRlYnVnKEYxMDEsInp6c3RyaW5nIHRvcC1sZXZlbCBu IiwiIixuMik7CisjZW5kaWYJLyogQ09NTUVOVCAqLworCisgICAgbmV3ID0gKnMyOyAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogZm9yIG9uZSBsZXNzIGxldmVsIG9mIGluZGlyZWN0aW9uICov CisjaWZkZWYgQ09NTUVOVAorICAgIG9sZCA9IG5ldzsKKyNlbmRpZiAvKiBDT01NRU5UICovCisK KyNpZm5kZWYgTk9TUEwKKyAgICBpdHNhcGF0dGVybiA9IDA7CQkJLyogRm9yIFxmcGF0dGVybigp ICovCisgICAgaXNqb2luID0gMDsJCQkJLyogRm9yIFxmam9pbigpICovCisjZW5kaWYgLyogTk9T UEwgKi8KKyAgICBkZXB0aCsrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTaW5rIHRv IGEgbmV3IGRlcHRoICovCisgICAgaWYgKGRlcHRoID4gWFhERVBMSU0pIHsgICAgICAgICAgICAg LyogVG9vIGRlZXA/ICovCisgICAgICAgIHByaW50ZigiP2RlZmluaXRpb24gaXMgY2lyY3VsYXIg b3IgdG9vIGRlZXBcbiIpOworICAgICAgICBkZWJ1ZyhGMTAxLCJ6enN0cmluZyBmYWlsIiwiIixk ZXB0aCk7CisgICAgICAgIGRlcHRoID0gMDsKKyAgICAgICAgKm5ldyA9IE5VTDsKKyAgICAgICAg cmV0dXJuKC0xKTsKKyAgICB9CisgICAgaWYgKCFzIHx8ICFuZXcpIHsgICAgICAgICAgICAgICAg ICAgLyogV2F0Y2ggb3V0IGZvciBudWxsIHBvaW50ZXJzICovCisgICAgICAgIGRlYnVnKEYxMDEs Inp6c3RyaW5nIGZhaWwgMiIsIiIsZGVwdGgpOworICAgICAgICBpZiAobmV3KQorICAgICAgICAg ICpuZXcgPSBOVUw7CisgICAgICAgIGRlcHRoID0gMDsKKyAgICAgICAgcmV0dXJuKC0xKTsKKyAg ICB9CisgICAgczMgPSBzOworICAgIGFyZ2wgPSAwOworICAgIHdoaWxlICgqczMrKykgYXJnbCsr OyAgICAgICAgICAgICAgLyogR2V0IGxlbmd0aCBvZiBzb3VyY2Ugc3RyaW5nICovCisgICAgZGVi dWcoRjAxMCwienpzdHJpbmcgZW50cnkiLHMsMCk7CisgICAgaWYgKGFyZ2wgPT0gMCkgeyAgICAg ICAgICAgICAgICAgICAgLyogRW1wdHkgc3RyaW5nICovCisgICAgICAgIGRlYnVnKEYxMTEsInp6 c3RyaW5nIGVtcHR5IGFyZyIscyxhcmdsKTsKKyAgICAgICAgZGVwdGggPSAwOworICAgICAgICAq bmV3ID0gTlVMOworICAgICAgICByZXR1cm4oMCk7CisgICAgfQorICAgIGlmIChhcmdsIDwgMCkg eyAgICAgICAgICAgICAgICAgICAgIC8qIFdhdGNoIG91dCBmb3IgZ2FyYmFnZSAqLworICAgICAg ICBkZWJ1ZyhGMTAxLCJ6enN0cmluZyBmYWlsIDMiLCIiLGRlcHRoKTsKKyAgICAgICAgKm5ldyA9 IE5VTDsKKyAgICAgICAgZGVwdGggPSAwOworICAgICAgICByZXR1cm4oLTEpOworICAgIH0KKyNp ZmRlZiBEVk5BTUJVRgorICAgIGRlYnVnKEYxMDAsInZuYW1idWYgbWFsbG9jLi4uIiwiIiwwKTsK KyAgICB2bmFtYnVmID0gbWFsbG9jKFZOQU1MKTsKKyAgICBpZiAodm5hbWJ1ZiA9PSBOVUxMKSB7 CisgICAgICAgIHByaW50ZigiP091dCBvZiBtZW1vcnkiKTsKKyAgICAgICAgcmV0dXJuKC0xKTsK KyAgICB9CisgICAgZGVidWcoRjEwMCwidm5hbWJ1ZiBtYWxsb2Mgb2siLCIiLDApOworI2VuZGlm IC8qIERWTkFNQlVGICovCisKKyAgICB3aGlsZSAoKHggPSAqcykpIHsgICAgICAgICAgICAgICAg ICAvKiBMb29wIGZvciBhbGwgY2hhcmFjdGVycyAqLworICAgICAgICBpZiAoeCAhPSBDTURRKSB7 ICAgICAgICAgICAgICAgIC8qIElzIGl0IHRoZSBjb21tYW5kLXF1b3RlIGNoYXI/ICovCisgICAg ICAgICAgICAqbmV3KysgPSAqcysrOyAgICAgICAgICAgICAgLyogTm8sIG5vcm1hbCBjaGFyLCBq dXN0IGNvcHkgKi8KKyAgICAgICAgICAgIGlmICgtLW4yIDwgMCkgeyAgICAgICAgICAgICAvKiBh bmQgY291bnQgaXQsIGNhcmVmdWwgb2Ygb3ZlcmZsb3cgKi8KKyAgICAgICAgICAgICAgICBkZWJ1 ZyhGMTAxLCJ6enN0cmluZyBvdmVyZmxvdyAxIiwiIixkZXB0aCk7CisgICAgICAgICAgICAgICAg ZGVwdGggPSAwOworI2lmZGVmIERWTkFNQlVGCisgICAgICAgICAgICAgICAgaWYgKHZuYW1idWYp IGZyZWUodm5hbWJ1Zik7CisjZW5kaWYgLyogRFZOQU1CVUYgKi8KKyAgICAgICAgICAgICAgICBy ZXR1cm4oLTEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAg IH0KKworLyogV2UgaGF2ZSB0aGUgY29tbWFuZC1xdW90ZSBjaGFyYWN0ZXIuICovCisKKyAgICAg ICAgeCA9ICoocysxKTsgICAgICAgICAgICAgICAgICAgICAvKiBHZXQgdGhlIGZvbGxvd2luZyBj aGFyYWN0ZXIuICovCisgICAgICAgIGlmIChpc3VwcGVyKHgpKSB4ID0gdG9sb3dlcih4KTsKKyAg ICAgICAgc3dpdGNoICh4KSB7ICAgICAgICAgICAgICAgICAgICAvKiBBY3QgYWNjb3JkaW5nIHRv IHZhcmlhYmxlIHR5cGUgKi8KKyNpZm5kZWYgTk9TUEwKKyAgICAgICAgICBjYXNlIDA6ICAgICAg ICAgICAgICAgICAgICAgICAvKiBJdCdzIGEgbG9uZSBiYWNrc2xhc2ggKi8KKyAgICAgICAgICAg ICpuZXcrKyA9ICpzKys7CisgICAgICAgICAgICBpZiAoLS1uMiA8IDApIHsKKyAgICAgICAgICAg ICAgICBkZWJ1ZyhGMTAxLCJ6enN0cmluZyBvdmVyZmxvdyAyIiwiIiwwKTsKKyNpZmRlZiBEVk5B TUJVRgorICAgICAgICAgICAgICAgIGlmICh2bmFtYnVmKSBmcmVlKHZuYW1idWYpOworI2VuZGlm IC8qIERWTkFNQlVGICovCisgICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgICAg IH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgJyUnOiAgICAgICAgICAgICAg ICAgICAgIC8qIFZhcmlhYmxlICovCisgICAgICAgICAgICBzICs9IDI7ICAgICAgICAgICAgICAg ICAgICAgLyogR2V0IHRoZSBsZXR0ZXIgb3IgZGlnaXQgKi8KKyAgICAgICAgICAgIHZiID0gKnMr KzsgICAgICAgICAgICAgICAgICAvKiBhbmQgbW92ZSBzb3VyY2UgcG9pbnRlciBwYXN0IGl0ICov CisgICAgICAgICAgICB2cCA9IE5VTEw7ICAgICAgICAgICAgICAgICAgLyogQXNzdW1lIGRlZmlu aXRpb24gaXMgZW1wdHkgKi8KKyAgICAgICAgICAgIGlmICh2YiA+PSAnMCcgJiYgdmIgPD0gJzkn KSB7IC8qIERpZ2l0IGZvciBtYWNybyBhcmcgKi8KKyAgICAgICAgICAgICAgICBpZiAobWFjbHZs IDwgMCkgICAgICAgICAvKiBEaWdpdCB2YXJpYWJsZXMgYXJlIGdsb2JhbCAqLworICAgICAgICAg ICAgICAgICAgdnAgPSBnX3Zhclt2Yl07ICAgICAgIC8qIGlmIG5vIG1hY3JvIGlzIGFjdGl2ZSAq LworICAgICAgICAgICAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgIC8qIG90aGVyd2lzZSAq LworICAgICAgICAgICAgICAgICAgdnAgPSBtX2FyZ1ttYWNsdmxdW3ZiIC0gJzAnXTsgLyogdGhl eSdyZSBvbiB0aGUgc3RhY2sgKi8KKyAgICAgICAgICAgIH0gZWxzZSBpZiAodmIgPT0gJyonKSB7 ICAgICAvKiBNYWNybyBhcmdzIHN0cmluZyAqLworI2lmZGVmIENPTU1FTlQKKyAgICAgICAgICAg ICAgICAvKiBUaGlzIGRvZXNuJ3QgdGFrZSBjaGFuZ2VzIGludG8gYWNjb3VudCAqLworICAgICAg ICAgICAgICAgIHZwID0gKG1hY2x2bCA+PSAwKSA/IG1fbGluZVttYWNsdmxdIDogdG9wbGluZTsK KyAgICAgICAgICAgICAgICBpZiAoIXZwKSB2cCA9ICIiOworI2Vsc2UKKwkJY2hhciAqIHNzID0g bmV3OworICAgICAgICAgICAgICAgIGlmICh6enN0cmluZygiXFxmam9pbigmX1tdLCwxKSIsJm5l dywmbjIpIDwgMCkgeworI2lmZGVmIERWTkFNQlVGCisJCSAgICBpZiAodm5hbWJ1ZikgZnJlZSh2 bmFtYnVmKTsKKyNlbmRpZiAvKiBEVk5BTUJVRiAqLworCQkgICAgcmV0dXJuKC0xKTsKKwkJfQor CQlkZWJ1ZyhGMTEwLCJ6enN0cmluZyBcXCUqIixzcywwKTsKKyAgICAgICAgICAgICAgICBicmVh azsKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg ICAgICAgIGlmIChpc3VwcGVyKHZiKSkgdmIgKz0gKCdhJy0nQScpOworICAgICAgICAgICAgICAg IHZwID0gZ192YXJbdmJdOyAgICAgICAgIC8qIExldHRlciBmb3IgZ2xvYmFsIHZhcmlhYmxlICov CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIXZwKSB2cCA9ICIiOworI2lmZGVmIENP TU1FTlQKKyAgICAgICAgICAgIGlmICh2cCkgeyAgICAgICAgICAgICAgICAgICAvKiBJZiBkZWZp bml0aW9uIG5vdCBlbXB0eSAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKwkJaWYgKHZhcmV2YWwp IHsKKwkJICAgIGRlYnVnKEYwMTAsInp6c3RyaW5nICVuIHZwIix2cCwwKTsKKwkJICAgIC8qIGNh bGwgc2VsZiB0byBldmFsdWF0ZSBpdCAqLworCQkgICAgaWYgKHp6c3RyaW5nKHZwLCZuZXcsJm4y KSA8IDApIHsKKwkJCWRlYnVnKEYxMDEsInp6c3RyaW5nIGZhaWwgNiIsIiIsZGVwdGgpOworI2lm ZGVmIERWTkFNQlVGCisJCQlpZiAodm5hbWJ1ZikgZnJlZSh2bmFtYnVmKTsKKyNlbmRpZiAvKiBE Vk5BTUJVRiAqLworCQkJcmV0dXJuKC0xKTsJLyogUGFzcyBhbG9uZyBmYWlsdXJlICovCisJCSAg ICB9CisJCX0gZWxzZSB7CisJCSAgICB3aGlsZSAoKCpuZXcrKyA9ICp2cCsrKSkgLyogY29weSBp dCB0byBvdXRwdXQgc3RyaW5nLiAqLworCQkgICAgICBpZiAoLS1uMiA8IDApIHsKKwkJCSAgaWYg KHEpIGZyZWUocSk7CisJCQkgIGRlYnVnKEYxMDEsInp6c3RyaW5nIG92ZXJmbG93IDQuNSIsIiIs ZGVwdGgpOworI2lmZGVmIERWTkFNQlVGCisJCQkgIGlmICh2bmFtYnVmKSBmcmVlKHZuYW1idWYp OworI2VuZGlmIC8qIERWTkFNQlVGICovCisJCQkgIHJldHVybigtMSk7CisJCSAgICAgIH0KKwkJ ICAgIG5ldy0tOwkJLyogQmFjayB1cCBvdmVyIHRlcm1pbmF0aW5nIG51bGwgKi8KKwkJICAgIG4y Kys7CQkvKiB0byBhbGxvdyBmb3IgZnVydGhlciBkZXBvc2l0cy4gKi8KKwkJfQorI2lmZGVmIENP TU1FTlQKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZGVidWcoRjExMCwi enpzdHJpbmcgJW4gdnAiLCIoTlVMTCkiLDApOworICAgICAgICAgICAgICAgIG4yID0gbng7Cisg ICAgICAgICAgICAgICAgbmV3ID0gb2xkOworICAgICAgICAgICAgICAgICpuZXcgPSBOVUw7Cisg ICAgICAgICAgICB9CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgICAgY2FzZSAnJic6ICAgICAgICAgICAgICAgICAgICAgLyogQW4gYXJyYXkgcmVmZXJl bmNlICovCisgICAgICAgICAgICB4ID0gYXJyYXluYW0ocywmdmJpLCZkKTsgICAgLyogR2V0IG5h bWUgYW5kIHN1YnNjcmlwdCAqLworICAgICAgICAgICAgZGVidWcoRjExMSwienpzdHJpbmcgYXJy YXluYW0iLHMseCk7CisgICAgICAgICAgICBpZiAoeCA8IDApIHsKKyAgICAgICAgICAgICAgICBk ZWJ1ZyhGMTAxLCJ6enN0cmluZyBmYWlsIDciLCIiLGRlcHRoKTsKKyNpZmRlZiBEVk5BTUJVRgor ICAgICAgICAgICAgICAgIGlmICh2bmFtYnVmKSBmcmVlKHZuYW1idWYpOworI2VuZGlmIC8qIERW TkFNQlVGICovCisgICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIHBwID0gMDsgICAgICAgICAgICAgICAgICAgICAvKiBCcmFja2V0IGNvdW50ZXIg Ki8KKyAgICAgICAgICAgIHdoaWxlICgqcykgeyAgICAgICAgICAgICAgICAvKiBBZHZhbmNlIHNv dXJjZSBwb2ludGVyLi4uICovCisgICAgICAgICAgICAgICAgaWYgKCpzID09ICdbJykgcHArKzsK KyAgICAgICAgICAgICAgICBpZiAoKnMgPT0gJ10nICYmIC0tcHAgPT0gMCkgYnJlYWs7CisgICAg ICAgICAgICAgICAgcysrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCpzID09ICdd JykgcysrOyAgICAgICAgIC8qIC4uLnBhc3QgdGhlIGNsb3NpbmcgYnJhY2tldC4gKi8KKworICAg ICAgICAgICAgeCA9IGNoa2FycmF5KHZiaSxkKTsgICAgICAgIC8qIEFycmF5IGlzIGRlY2xhcmVk PyAqLworICAgICAgICAgICAgZGVidWcoRjEwMSwienpzdHJpbmcgY2hrYXJyYXkiLCIiLHgpOwor ICAgICAgICAgICAgaWYgKHggPiAtMSkgeworI2lmZGVmIENPTU1FTlQKKyAgICAgICAgICAgICAg ICBjaGFyICogczEgPSBOVUxMOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAgICAgICAg ICB2YmkgLT0gQVJSQVlCQVNFOyAgICAgICAvKiBDb252ZXJ0IG5hbWUgdG8gaW5kZXggKi8KKwor ICAgICAgICAgICAgICAgICAgaWYgKGFfZGltW3ZiaV0gPj0gZCkgeyAvKiBJZiBzdWJzY3JpcHQg aW4gcmFuZ2UgKi8KKyAgICAgICAgICAgICAgICAgICAgY2hhciAqKmFwOworICAgICAgICAgICAg ICAgICAgICBhcCA9IGFfcHRyW3ZiaV07ICAgIC8qIGdldCBkYXRhIHBvaW50ZXIgKi8KKyAgICAg ICAgICAgICAgICAgICAgaWYgKGFwKSB7ICAgICAgICAgICAvKiBhbmQgaWYgdGhlcmUgaXMgb25l ICovCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXBbZF0pIHsgICAgLyogSWYgZGVmaW5p dGlvbiBub3QgZW1wdHkgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEx LCJ6enN0cmluZyBhcFtkXSIsYXBbZF0sZCk7CisJCQkgICAgaWYgKHZhcmV2YWwpIHsKKwkJCQlp ZiAoenpzdHJpbmcoYXBbZF0sJm5ldywmbjIpIDwgMCkgeworCQkJCSAgICBkZWJ1ZyhGMTAxLCJ6 enN0cmluZyBmYWlsIDgiLCIiLGRlcHRoKTsKKyNpZmRlZiBEVk5BTUJVRgorCQkJCSAgICBpZiAo dm5hbWJ1ZikgZnJlZSh2bmFtYnVmKTsKKyNlbmRpZiAvKiBEVk5BTUJVRiAqLworCQkJCSAgICBy ZXR1cm4oLTEpOyAvKiBQYXNzIGFsb25nIGZhaWx1cmUgKi8KKwkJCQl9CisJCQkgICAgfSBlbHNl IHsKKwkJCQl2cCA9IGFwW2RdOworCQkJCXdoaWxlICgoKm5ldysrID0gKnZwKyspKSAvKiBjb3B5 IHRvIHJlc3VsdCAqLworCQkJCSAgaWYgKC0tbjIgPCAwKSB7CisJCQkJICAgICAgaWYgKHEpIGZy ZWUocSk7CisJCQkJICAgICAgZGVidWcoRjEwMSwKKwkJCQkJICAgICJ6enN0cmluZyBvdmVyZmxv dyA4LjUiLCIiLGRlcHRoKTsKKyNpZmRlZiBEVk5BTUJVRgorCQkJCSAgICAgIGlmICh2bmFtYnVm KSBmcmVlKHZuYW1idWYpOworI2VuZGlmIC8qIERWTkFNQlVGICovCisJCQkJICAgICAgcmV0dXJu KC0xKTsKKwkJCQkgIH0KKwkJCQluZXctLTsJLyogQmFjayB1cCBvdmVyIHRlcm1pbmF0aW5nIG51 bGwgKi8KKwkJCQluMisrOwkvKiB0byBhbGxvdyBmb3IgZnVydGhlciBkZXBvc2l0cy4gKi8KKwkJ CSAgICB9CisJCQl9CisKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg ICAgICAgICAgICAgIC8qIG9sZCA9IG5ldzsgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIG4y ID0gbng7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisJICAgIH0K KyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSAnZic6ICAgICAgICAgICAgICAg ICAgICAgLyogQSBidWlsdGluIGZ1bmN0aW9uICovCisgICAgICAgICAgICBxID0gdm5hbWJ1Zjsg ICAgICAgICAgICAgICAgLyogQ29weSB0aGUgbmFtZSAqLworICAgICAgICAgICAgeSA9IDA7ICAg ICAgICAgICAgICAgICAgICAgIC8qIGludG8gYSBzZXBhcmF0ZSBidWZmZXIgKi8KKyAgICAgICAg ICAgIHMgKz0gMjsgICAgICAgICAgICAgICAgICAgICAvKiBwb2ludCBwYXN0ICdGJyAqLworICAg ICAgICAgICAgd2hpbGUgKHkrKyA8IFZOQU1MKSB7CisgICAgICAgICAgICAgICAgaWYgKCpzID09 ICcoJykgeyBzKys7IGJyZWFrOyB9IC8qIExvb2sgZm9yIG9wZW4gcGFyZW4gKi8KKyAgICAgICAg ICAgICAgICBpZiAoKCpxID0gKnMpID09IE5VTCkgYnJlYWs7ICAgLyogb3IgZW5kIG9mIHN0cmlu ZyAqLworICAgICAgICAgICAgICAgIHMrKzsgcSsrOworICAgICAgICAgICAgfQorICAgICAgICAg ICAgKnEgPSBOVUw7ICAgICAgICAgICAgICAgICAgIC8qIFRlcm1pbmF0ZSBmdW5jdGlvbiBuYW1l ICovCisgICAgICAgICAgICBpZiAoeSA+PSBWTkFNTCkgeyAgICAgICAgICAgLyogSGFuZGxlIHBh dGhvbG9naWNhbCBjYXNlICovCisgICAgICAgICAgICAgICAgd2hpbGUgKCpzICYmICgqcyAhPSAn KCcpKSAvKiBvZiB2ZXJ5IGxvbmcgc3RyaW5nIGVudGVyZWQgKi8KKyAgICAgICAgICAgICAgICAg IHMrKzsgICAgICAgICAgICAgICAgICAgIC8qIGFzIGZ1bmN0aW9uIG5hbWUuICovCisgICAgICAg ICAgICAgICAgaWYgKCpzID09ICcpJykgcysrOyAgICAgICAvKiBTa2lwIHBhc3QgaXQuICovCisg ICAgICAgICAgICB9CisgICAgICAgICAgICByID0gcjIgPSBtYWxsb2MoYXJnbCsyKTsgICAgLyog QW5kIG1ha2UgYSBwbGFjZSB0byBjb3B5IGFyZ3MgKi8KKyAgICAgICAgICAgIC8qIGRlYnVnKEYx MDEsInp6c3RyaW5nIHIyIiwiIixyMik7ICovCisgICAgICAgICAgICBpZiAoIXIyKSB7ICAgICAg ICAgICAgICAgICAgLyogV2F0Y2ggb3V0IGZvciBtYWxsb2MgZmFpbHVyZSAqLworICAgICAgICAg ICAgICAgIGRlYnVnKEYxMDEsInp6c3RyaW5nIGZhaWwgOSIsIiIsZGVwdGgpOworICAgICAgICAg ICAgICAgICpuZXcgPSBOVUw7CisgICAgICAgICAgICAgICAgZGVwdGggPSAwOworI2lmZGVmIERW TkFNQlVGCisgICAgICAgICAgICAgICAgaWYgKHZuYW1idWYpIGZyZWUodm5hbWJ1Zik7CisjZW5k aWYgLyogRFZOQU1CVUYgKi8KKyAgICAgICAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICAg ICAgfQorICAgICAgICAgICAgaWYgKHIzKSBmcmVlKHIzKTsgLyogQW5kIGFub3RoZXIgdG8gY29w eSBsaXRlcmFsIGFyZyBzdHJpbmcgKi8KKyAgICAgICAgICAgIHIzID0gbWFsbG9jKGFyZ2wrMik7 CisgICAgICAgICAgICAvKiBkZWJ1ZyhGMTAxLCJ6enN0cmluZyByMyIsIiIscjMpOyAqLworICAg ICAgICAgICAgaWYgKCFyMykgeworICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsInp6c3RyaW5n IGZhaWwgMTAiLCIiLGRlcHRoKTsKKyAgICAgICAgICAgICAgICBkZXB0aCA9IDA7CisgICAgICAg ICAgICAgICAgKm5ldyA9IE5VTDsKKyAgICAgICAgICAgICAgICBpZiAocjIpIGZyZWUocjIpOwor I2lmZGVmIERWTkFNQlVGCisgICAgICAgICAgICAgICAgaWYgKHZuYW1idWYpIGZyZWUodm5hbWJ1 Zik7CisjZW5kaWYgLyogRFZOQU1CVUYgKi8KKyAgICAgICAgICAgICAgICByZXR1cm4oLTEpOwor ICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgIHIzcCA9IHIzOworICAgICAgICAgICAg YXJnbiA9IDA7ICAgICAgICAgICAgICAgICAgIC8qIEFyZ3VtZW50IGNvdW50ZXIgKi8KKyAgICAg ICAgICAgIGFyZ3BbYXJnbisrXSA9IHI7ICAgICAgICAgICAvKiBQb2ludCB0byBmaXJzdCBhcmd1 bWVudCAqLworICAgICAgICAgICAgeSA9IDA7ICAgICAgICAgICAgICAgICAgICAgIC8qIENvbXBs ZXRpb24gZmxhZyAqLworICAgICAgICAgICAgcHAgPSAxOyAgICAgICAgICAgICAgICAgICAgIC8q IFBhcmVuIGxldmVsIChhbHJlYWR5IGhhdmUgb25lKS4gKi8KKyAgICAgICAgICAgIGtwID0gMDsK KyAgICAgICAgICAgIHdoaWxlICgxKSB7ICAgICAgICAgICAgICAgICAvKiBDb3B5IGVhY2ggYXJn dW1lbnQsIGNoYXIgYnkgY2hhci4gKi8KKyAgICAgICAgICAgICAgICAqcjNwKysgPSAqczsgICAg ICAgICAgICAvKiBUaGlzIGlzIGEgbGl0ZXJhbCBjb3B5IGZvciBcZmxpdCAqLworICAgICAgICAg ICAgICAgIGlmICghKnMpIGJyZWFrOworCisgICAgICAgICAgICAgICAgaWYgKCpzID09ICd7Jykg eyAgICAgICAgLyogTGVmdCBicmFjZSAqLworICAgICAgICAgICAgICAgICAgICBrcCsrOworICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoKnMgPT0gJ30nKSB7ICAgICAgICAv KiBSaWdodCBicmFjZSAqLworICAgICAgICAgICAgICAgICAgICBrcC0tOworICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoKnMgPT0gJygnICYmIGtwIDw9IDApIHsgLyogT3Bl biBwYXJlbiBub3QgaW4gYnJhY2UgKi8KKyAgICAgICAgICAgICAgICAgICAgcHArKzsgICAgICAg ICAgICAgICAvKiBDb3VudCBpdCAqLworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ICAqciA9ICpzOyAgICAgICAgICAgICAgICAvKiBOb3cgY29weSByZXN1bHRpbmcgYnl0ZSAqLwor ICAgICAgICAgICAgICAgIGlmICghKnIpICAgICAgICAgICAgICAgIC8qIElmIE5VTCwgZG9uZS4g Ki8KKyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGlmICgqciA9PSAn KScgJiYga3AgPD0gMCkgeyAvKiBDbG9zaW5nIHBhcmVuLCBjb3VudCBpdC4gKi8KKyAgICAgICAg ICAgICAgICAgICAgaWYgKC0tcHAgPT0gMCkgeyAgICAvKiBGaW5hbCBvbmU/ICovCisgICAgICAg ICAgICAgICAgICAgICAgICAqciA9IE5VTDsgICAgICAgLyogTWFrZSBpdCBhIHRlcm1pbmF0aW5n IG51bGwgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICoocjNwIC0gMSkgPSBOVUw7CisgICAg ICAgICAgICAgICAgICAgICAgICBzKys7ICAgICAgICAgICAgLyogUG9pbnQgcGFzdCBpdCBpbiBz b3VyY2Ugc3RyaW5nICovCisgICAgICAgICAgICAgICAgICAgICAgICB5ID0gMTsgICAgICAgICAg LyogRmxhZyB3ZSd2ZSBnb3QgYWxsIHRoZSBhcmdzICovCisgICAgICAgICAgICAgICAgICAgICAg ICBicmVhazsgICAgICAgICAgLyogRG9uZSB3aXRoIHdoaWxlIGxvb3AgKi8KKyAgICAgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoKnIgPT0g JywnICYmIGtwIDw9IDApIHsgLyogQ29tbWEgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKHBw ID09IDEpIHsgICAgICAgICAgLyogSWYgbm90IHdpdGhpbiAoKSdzLCAqLworICAgICAgICAgICAg ICAgICAgICAgICAgaWYgKGFyZ24gPj0gRk5BUkdTKSB7IC8qIFRvbyBtYW55IGFyZ3MgKi8KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzKys7IHIrKzsgICAvKiBLZWVwIGNvbGxlY3Rpbmcg ZmxpdCgpIHN0cmluZyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgKnIgPSBO VUw7ICAgICAgICAgICAvKiBOZXcgYXJnLCBza2lwIHBhc3QgY29tbWEgKi8KKyAgICAgICAgICAg ICAgICAgICAgICAgIGFyZ3BbYXJnbisrXSA9IHIrMTsgLyogSW4gcmFuZ2UsIHBvaW50IHRvIG5l dyBhcmcgKi8KKyAgICAgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAvKiBPdGhl cndpc2UganVzdCBza2lwIHBhc3QgICovCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg ICAgIHMrKzsgcisrOyAgICAgICAgICAgICAgIC8qIEFkdmFuY2UgcG9pbnRlcnMgKi8KKyAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIGlmICgheSkgICAgICAgICAgICAgICAgICAgICAvKiBJZiB3 ZSBkaWRuJ3QgZmluZCBjbG9zaW5nIHBhcmVuICovCisgICAgICAgICAgICAgIGFyZ24gPSAtMTsK KyNpZmRlZiBERUJVRworICAgICAgICAgICAgaWYgKGRlYmxvZykgeworICAgICAgICAgICAgICAg IGNoYXIgYnVmWzI0XTsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJ6enN0cmluZyBmdW5j dGlvbiBuYW1lIix2bmFtYnVmLHkpOworICAgICAgICAgICAgICAgIGRlYnVnKEYwMTAsInp6c3Ry aW5nIGZ1bmN0aW9uIHIzIixyMywwKTsKKyAgICAgICAgICAgICAgICBmb3IgKHkgPSAwOyB5IDwg YXJnbjsgeSsrKSB7CisgICAgICAgICAgICAgICAgICAgIHNwcmludGYoYnVmLCJhcmcgJTJkICIs eSk7CisgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYwMTAsYnVmLGFyZ3BbeV0sMCk7CisgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorI2VuZGlmIC8qIERFQlVHICovCisJICAgIHsK KwkgICAgIC8qIEluIGNhc2UgdGhlIGZ1bmN0aW9uIG5hbWUgaXRzZWxmIGlzIGNvbnN0cnVjdGVk ICovCisJCWNoYXIgYnVmWzY0XTsgY2hhciAqIHAgPSBidWY7IGludCBuID0gNjQ7IAorCQlpZiAo enpzdHJpbmcodm5hbWJ1ZiwmcCwmbikgPiAtMSkKKwkJICBja3N0cm5jcHkodm5hbWJ1ZixidWYs NjQpOworCSAgICB9CisgICAgICAgICAgICB2cCA9IGZuZXZhbCh2bmFtYnVmLGFyZ3AsYXJnbixy Myk7IC8qIEV2YWx1YXRlIHRoZSBmdW5jdGlvbi4gKi8KKyAgICAgICAgICAgIGlmICh2cCkgeyAg ICAgICAgICAgICAgICAgICAgICAvKiBJZiBkZWZpbml0aW9uIG5vdCBlbXB0eSAqLworICAgICAg ICAgICAgICAgIHdoaWxlICgoKm5ldysrID0gKnZwKyspKSB7IC8qIGNvcHkgaXQgdG8gb3V0cHV0 IHN0cmluZyAqLworICAgICAgICAgICAgICAgICAgICBpZiAoLS1uMiA8IDApIHsgICAgICAgIC8q IHdhdGNoIG91dCBmb3Igb3ZlcmZsb3cgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVn KEYxMDEsInp6c3RyaW5nIGZhaWwgMTIiLCIiLGRlcHRoKTsKKyAgICAgICAgICAgICAgICAgICAg ICAgIGlmIChyMikgeyBmcmVlKHIyKTsgcjIgPSBOVUxMOyB9CisgICAgICAgICAgICAgICAgICAg ICAgICBpZiAocjMpIHsgZnJlZShyMyk7IHIzID0gTlVMTDsgfQorI2lmZGVmIERWTkFNQlVGCisg ICAgICAgICAgICAgICAgICAgICAgICBpZiAodm5hbWJ1ZikgZnJlZSh2bmFtYnVmKTsKKyNlbmRp ZiAvKiBEVk5BTUJVRiAqLworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAg ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBu ZXctLTsgICAgICAgICAgICAgICAgICAvKiBCYWNrIHVwIG92ZXIgdGVybWluYXRpbmcgbnVsbCAq LworICAgICAgICAgICAgICAgIG4yKys7ICAgICAgICAgICAgICAgICAgIC8qIHRvIGFsbG93IGZv ciBmdXJ0aGVyIGRlcG9zaXRzLiAqLworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHIy KSB7IGZyZWUocjIpOyByMiA9IE5VTEw7IH0KKyAgICAgICAgICAgIGlmIChyMykgeyBmcmVlKHIz KTsgcjMgPSBOVUxMOyB9CisgICAgICAgICAgICBicmVhazsKKwkgIGNhc2UgJ3EnOgkJCS8qIDI5 OSBTdHJpbmcgdG8gYmUgdGFrZSBsaXRlcmFsbHkgKi8KKwkgICAgcXVvdGluZyA9IDE7CQkvKiAy OTkgKi8KKyAgICAgICAgICBjYXNlICckJzogICAgICAgICAgICAgICAgICAgICAvKiBBbiBlbnZp cm9ubWVudCB2YXJpYWJsZSAqLworICAgICAgICAgIGNhc2UgJ3YnOiAgICAgICAgICAgICAgICAg ICAgIC8qIE9yIGEgbmFtZWQgYnVpbHRpbiB2YXJpYWJsZS4gKi8KKyAgICAgICAgICBjYXNlICdt JzogICAgICAgICAgICAgICAgICAgICAvKiBPciBhIG1hY3JvIC9sb25nIHZhcmlhYmxlICovCisg ICAgICAgICAgY2FzZSAncyc6ICAgICAgICAgICAgICAgICAgICAgLyogMTk2IE1hY3JvIHN1YnN0 cmluZyAqLworICAgICAgICAgIGNhc2UgJzonOiAgICAgICAgICAgICAgICAgICAgIC8qIDE5NiBc LXZhcmlhYmxlIHN1YnN0cmluZyAqLworICAgICAgICAgICAgcHAgPSAwOworICAgICAgICAgICAg cCA9IHMrMjsgICAgICAgICAgICAgICAgICAgIC8qICQvVi9NIG11c3QgYmUgZm9sbG93ZWQgYnkg KG5hbWUpICovCisgICAgICAgICAgICBpZiAoKnAgIT0gJygnKSB7ICAgICAgICAgICAgLyogYXMg aW4gXCQoSE9NRSkgb3IgXFYoY291bnQpICovCisgICAgICAgICAgICAgICAgKm5ldysrID0gKnMr KzsgICAgICAgICAgLyogSWYgbm90LCBqdXN0IGNvcHkgaXQgKi8KKyAgICAgICAgICAgICAgICBp ZiAoLS1uMiA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEwMSwienpzdHJpbmcg b3ZlcmZsb3cgMyIsIiIsZGVwdGgpOworI2lmZGVmIERWTkFNQlVGCisgICAgICAgICAgICAgICAg ICAgIGlmICh2bmFtYnVmKSBmcmVlKHZuYW1idWYpOworI2VuZGlmIC8qIERWTkFNQlVGICovCisg ICAgICAgICAgICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcHArKzsKKyAgICAg ICAgICAgIHArKzsgICAgICAgICAgICAgICAgICAgICAgICAvKiBQb2ludCB0byAxc3QgY2hhciBv ZiBuYW1lICovCisgICAgICAgICAgICBxID0gdm5hbWJ1ZjsgICAgICAgICAgICAgICAgLyogQ29w eSB0aGUgbmFtZSAqLworICAgICAgICAgICAgeSA9IDA7ICAgICAgICAgICAgICAgICAgICAgIC8q IGludG8gYSBzZXBhcmF0ZSBidWZmZXIgKi8KKwkgICAgZGVidWcoRjExMCwiPj4+PiBcXHEoQVJH KSIscCwwKTsKKyAgICAgICAgICAgIHdoaWxlICh5KysgPCBWTkFNTCkgeyAgICAgICAvKiBXYXRj aCBvdXQgZm9yIG5hbWUgdG9vIGxvbmcgKi8KKyAgICAgICAgICAgICAgICBpZiAoKnAgPT0gJygn KSB7ICAgICAgICAvKiBQYXJlbnMgY2FuIGJlIG5lc3RlZC4uLiAqLworCQkgICAgaWYgKCoocC0x KSAhPSBDTURRKQkvKiAyOTkgKi8KKwkJICAgICAgcHArKzsKKyAgICAgICAgICAgICAgICB9IGVs c2UgaWYgKCpwID09ICcpJykgeyAvKiBOYW1lIHByb3Blcmx5IHRlcm1pbmF0ZWQgd2l0aCAnKScg Ki8KKwkJICAgIGlmICgqKHAtMSkgIT0gQ01EUSkJLyogMjk5ICovCisJCSAgICAgIHBwLS07Cisg ICAgICAgICAgICAgICAgICAgIGlmIChwcCA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAg ICBwKys7ICAgICAgICAgICAgLyogTW92ZSBzb3VyY2UgcG9pbnRlciBwYXN0ICcpJyAqLworICAg ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCgqcSA9ICpwKSA9PSBOVUwpICAgLyog U3RyaW5nIGVuZHMgYmVmb3JlICcpJyAqLworICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICAgICAgICAgcCsrOyBxKys7ICAgICAgICAgICAgICAgLyogQWR2YW5jZSBwb2ludGVycyAq LworICAgICAgICAgICAgfQorICAgICAgICAgICAgKnEgPSBOVUw7ICAgICAgICAgICAgICAgICAg IC8qIFRlcm1pbmF0ZSB0aGUgdmFyaWFibGUgbmFtZSAqLworICAgICAgICAgICAgaWYgKHkgPj0g Vk5BTUwpIHsgICAgICAgICAgIC8qIEhhbmRsZSBwYXRob2xvZ2ljYWwgY2FzZSAqLworICAgICAg ICAgICAgICAgIHdoaWxlICgqcCAmJiAoKnAgIT0gJyknKSkgLyogb2YgdmVyeSBsb25nIHN0cmlu ZyBlbnRlcmVkICovCisgICAgICAgICAgICAgICAgICBwKys7ICAgICAgICAgICAgICAgICAgICAv KiBhcyB2YXJpYWJsZSBuYW1lLiAqLworICAgICAgICAgICAgICAgIGlmICgqcCA9PSAnKScpIHAr KzsgICAgICAgLyogU2tpcCBhaGVhZCB0byB0aGUgZW5kIG9mIGl0LiAqLworICAgICAgICAgICAg fQorICAgICAgICAgICAgcyA9IHA7ICAgICAgICAgICAgICAgICAgICAgIC8qIEFkanVzdCBnbG9i YWwgc291cmNlIHBvaW50ZXIgKi8KKyAgICAgICAgICAgIHMzID0gdm5hbWJ1ZjsKKyAgICAgICAg ICAgIHgzID0gMDsKKyAgICAgICAgICAgIHdoaWxlICgqczMrKykgeDMrKzsKKyAgICAgICAgICAg IHAgPSBtYWxsb2MoeDMgKyAxKTsgICAgICAgICAvKiBNYWtlIHRlbXBvcmFyeSBzcGFjZSAqLwor ICAgICAgICAgICAgaWYgKHAgJiYgIXF1b3RpbmcpIHsJLyogSWYgd2UgZ290IHRoZSBzcGFjZSAq LworICAgICAgICAgICAgICAgIHZwID0gdm5hbWJ1ZjsgICAgICAgICAgIC8qIFBvaW50IHRvIG9y aWdpbmFsICovCisgICAgICAgICAgICAgICAgc3RyY3B5KHAsdnApOyAgICAgICAgICAgLyogKHNh ZmUpIE1ha2UgYSBjb3B5IG9mIGl0ICovCisgICAgICAgICAgICAgICAgeSA9IFZOQU1MOyAgICAg ICAgICAgICAgLyogTGVuZ3RoIG9mIG5hbWUgYnVmZmVyICovCisgICAgICAgICAgICAgICAgenpz dHJpbmcocCwmdnAsJnkpOyAgICAgLyogRXZhbHVhdGUgdGhlIGNvcHkgKi8KKyAgICAgICAgICAg ICAgICBmcmVlKHApOyAgICAgICAgICAgICAgICAvKiBGcmVlIHRoZSB0ZW1wb3Jhcnkgc3BhY2Ug Ki8KKyAgICAgICAgICAgICAgICBwID0gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg IGRlYnVnKEYxMTAsInp6c3RyaW5nIHZuYW1lIix2bmFtYnVmLDApOworICAgICAgICAgICAgcSA9 IE5VTEw7CisJICAgIGlmICh4ID09ICdxJykgewkJLyogMjk5IFF1b3RpbmcgdGhpcyBzdHJpbmcg Ki8KKwkJdnAgPSB2bmFtYnVmOwkJLyogMjk5ICovCisJCWRlYnVnKEYxMTAsIj4+PiBWUCIsdnAs MCk7CisJICAgIH0gZWxzZSBpZiAoeCA9PSAnJCcpIHsJLyogTG9vayB1cCBpdHMgdmFsdWUgKi8K KyAgICAgICAgICAgICAgICB2cCA9IGdldGVudih2bmFtYnVmKTsgICAvKiBUaGlzIHdheSBmb3Ig ZW52aXJvbm1lbnQgdmFyaWFibGUgKi8KKyAgICAgICAgICAgIH0gZWxzZSBpZiAoeCA9PSAnbScg fHwgeCA9PSAncycgfHwgeCA9PSAnOicpIHsgLyogTWFjcm8gLyBzdWJzdHIgKi8KKyAgICAgICAg ICAgICAgICBpbnQgaywgeDEgPSAtMSwgeDIgPSAtMTsKKwkJY2hhciBjID0gTlVMOyAKKyAgICAg ICAgICAgICAgICBrID0gc3RybGVuKHZuYW1idWYpOworICAgICAgICAgICAgICAgIC8qIFxzKG5h bWVbbjptXSkgLS0gQ29tcGFjdCBzdWJzdHJpbmcgbm90YXRpb24gKi8KKyAgICAgICAgICAgICAg ICBpZiAoKHggPT0gJ3MnIHx8IHggPT0gJzonKSAmJiAoayA+IDEpKSB7IC8qIFN1YnN0cmluZyB3 YW50ZWQgKi8KKwkJICAgIGludCBicHJjOworICAgICAgICAgICAgICAgICAgICBpZiAodm5hbWJ1 ZltrLTFdID09ICddJykgeworICAgICAgICAgICAgICAgICAgICAgICAgaW50IGk7CisgICAgICAg ICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgay0xOyBpKyspIHsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpZiAodm5hbWJ1ZltpXSA9PSAnWycpIHsKKwkJCQlicHJjID0gYm91 bmRzcGFpcih2bmFtYnVmLCI6Xy4iLCZ4MSwmeDIsJmMpOworCQkJCWRlYnVnKEYxMTEsInp6c3Ry aW5nIGJvdW5kc3BhaXIiLHZuYW1idWYsYnByYyk7CisJCQkJZGVidWcoRjAwMCwienpzdHJpbmcg Ym91bmRzcGFpciBjIiwiIixjKTsKKwkJCQlpZiAoYnByYyA+IC0xKSB7CisJCQkJICAgIHZuYW1i dWZbaV0gPSBOVUw7CisJCQkJICAgIGlmICh4MSA8IDEpCisJCQkJICAgICAgeDEgPSAxOworCQkJ CSAgICB4MS0tOwkvKiBBZGp1c3QgdG8gMC1iYXNlICovCisJCQkJfQorCQkJCWJyZWFrOworICAg ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKwkJ ICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHggPT0gJzonKSB7 CQkvKiBWYXJpYWJsZSB0eXBlIChzIG9yIDopICovCisgICAgICAgICAgICAgICAgICAgIHZwID0g dm5hbWJ1ZjsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworCQkgICAgeSA9IGlzYWFycmF5KHZu YW1idWYpID8KKwkJCW14eGxvb2sobWFjdGFiLHZuYW1idWYsbm1hYykgOgorCQkJbXhsb29rKG1h Y3RhYix2bmFtYnVmLG5tYWMpOworICAgICAgICAgICAgICAgICAgICBpZiAoeSA+IC0xKSB7CS8q IEdvdCBkZWZpbml0aW9uICovCisgICAgICAgICAgICAgICAgICAgICAgICB2cCA9IG1hY3RhYlt5 XS5tdmFsOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAg ICAgICAgdnAgPSBOVUxMOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg fQorCQlkZWJ1ZyhGMTExLCJ6enN0cmluZyB2cCIsdnAsKHZwPT1OVUxMKT8wOnN0cmxlbih2cCkp OworCisgICAgICAgICAgICAgICAgaWYgKHZwKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICgo eCA9PSAncycgfHwgeCA9PSAnOicpICYmIChrID4gMSkpIHsKKyAgICAgICAgICAgICAgICAgICAg ICAgIC8qIENvbXBhY3Qgc3Vic3RyaW5nIG5vdGF0aW9uICovCisgICAgICAgICAgICAgICAgICAg ICAgICBpZiAoeDIgPT0gMCkgeyAgLyogTGVuZ3RoICovCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdnAgPSBOVUxMOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh4MSA+ IC0xKSB7IC8qIFN0YXJ0ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgayA9IHN0cmxl bih2cCk7CisJCQkgICAgZGVidWcoRjEwMSwiPj4+IGsiLCIiLGspOworCQkJICAgIC8qIElmIGl0 J3Mgb2ZmIHRoZSBlbmQsIHJlc3VsdCBpcyBlbXB0eSAqLworICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGlmICh4MSA+IGspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnAg PSBOVUxMOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoayA+IDApIHsK KwkJCQkvKiBTdGF5IGluIGJvdW5kcyAqLworCQkJCWlmIChjID09ICdfJyAmJiB4MiA+IGspCS8q IHN0YXJ0cG9zX2VuZHBvcyAqLworCQkJCSAgeDIgPSBrOworCQkJCWlmIChjID09ICc6JyAmJiB4 MSArIHgyID4gaykgLyogc3RhcnQ6bGVuZ3RoICovCisJCQkJICB4MiA9IC0xOworCQkJCWRlYnVn KEYxMDEsIj4+PiB4MiIsIiIseDIpOworCQkJCWRlYnVnKEYwMDAsIj4+PiBjIiwiIixjKTsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChxID0gbWFsbG9jKGsrMSkpKSB7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJjcHkocSx2cCk7IC8qIHNhZmUg Ki8KKwkJCQkgICAgaWYgKGMgPT0gJy4nKSB7CisJCQkJCXFbeDErMV0gPSBOVUw7CisJCQkJCWRl YnVnKEYwMDAsIlhYWC4gcSIscSxjKTsKKwkJCQkgICAgfQorCQkJCSAgICBpZiAoYyA9PSAnOicp IHsgLyogc3RhcnQ6bGVuZ3RoICovCisJCQkJCWlmICgoeDIgPiAtMSkgJiYgKCh4MSArIHgyKSA8 PSBrKSkgeworCQkJCQkgICAgcVt4MSt4Ml0gPSBOVUw7CisJCQkJCX0KKwkJCQkJZGVidWcoRjAw MCwiWFhYOiBxIixxLGMpOworCQkJCSAgICB9IGVsc2UgaWYgKGMgPT0gJ18nKSB7IC8qIHN0YXJ0 X2VuZHBvcyAqLworCQkJCQlpZiAoeDEgPj0geDIpIHsKKwkJCQkJICAgIHFbeDEgPSAwXSA9IE5V TDsKKwkJCQkJfSBlbHNlIGlmICh4MiA8IGsgJiYgeDIgPiAtMSkgeworCQkJCQkgICAgcVt4Ml0g PSBOVUw7CisJCQkJCX0KKwkJCQkJZGVidWcoRjAwMCwiWFhYXyBxIixxLGMpOworCQkJCSAgICB9 CisJCQkJICAgIHZwID0gcSt4MTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBl bHNlIHZwID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgdnAgPSBO VUxMOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisJCQlkZWJ1ZyhGMTEwLCJYWFggdm5h bWJ1ZiIsdm5hbWJ1ZiwwKTsKKwkJCWRlYnVnKEYwMDAsIlhYWCBjIiwiIixjKTsKKwkJCWRlYnVn KEYxMDEsIlhYWCB4MSIsIiIseDEpOworCQkJZGVidWcoRjEwMSwiWFhYIHgyIiwiIix4Mik7CisJ CQlkZWJ1ZyhGMTEwLCJYWFggcmVzdWx0Iix2cCwwKTsKKyNpZmRlZiBERUJVRworICAgICAgICAg ICAgICAgICAgICAgICAgaWYgKGRlYmxvZykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg IGlmICghdnApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBrID0gc3RybGVuKHZwKTsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisjZW5kaWYgLyogREVC VUcgKi8KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAvKiBvciAqLworICAgICAgICAgICAgICAg IHZwID0gbnZsb29rKHZuYW1idWYpOyAgIC8qIHRoaXMgd2F5IGZvciBidWlsdGluIHZhcmlhYmxl ICovCisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodnApIHsgICAgICAgICAgICAgICAg ICAgLyogSWYgZGVmaW5pdGlvbiBub3QgZW1wdHkgKi8KKyAgICAgICAgICAgICAgICB3aGlsZSAo KCpuZXcrKyA9ICp2cCsrKSkgLyogY29weSBpdCB0byBvdXRwdXQgc3RyaW5nLiAqLworICAgICAg ICAgICAgICAgICAgaWYgKC0tbjIgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgaWYgKHEp IGZyZWUocSk7CisgICAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEwMSwienpzdHJpbmcgb3Zl cmZsb3cgNCIsIiIsZGVwdGgpOworI2lmZGVmIERWTkFNQlVGCisgICAgICAgICAgICAgICAgICAg ICAgaWYgKHZuYW1idWYpIGZyZWUodm5hbWJ1Zik7CisjZW5kaWYgLyogRFZOQU1CVUYgKi8KKyAg ICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICAgIG5ldy0tOyAgICAgICAgICAgICAgICAgIC8qIEJhY2sgdXAgb3ZlciB0ZXJt aW5hdGluZyBudWxsICovCisgICAgICAgICAgICAgICAgbjIrKzsgICAgICAgICAgICAgICAgICAg LyogdG8gYWxsb3cgZm9yIGZ1cnRoZXIgZGVwb3NpdHMuICovCisgICAgICAgICAgICB9CisgICAg ICAgICAgICBpZiAocSkgeworICAgICAgICAgICAgICAgIGZyZWUocSk7CisgICAgICAgICAgICAg ICAgcSA9IE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAv KiBOT1NQTCAqLyAgICAgICAgICAgICAgICAgICAgICAvKiBIYW5kbGUgXG5ubiBldmVuIGlmIE5P U1BMLiAqLworCisjaWZuZGVmIE5PS1ZFUkJTCisgICAgICAgIGNhc2UgJ0snOgorICAgICAgICBj YXNlICdrJzogeworICAgICAgICAgICAgZXh0ZXJuIHN0cnVjdCBrZXl0YWIga3ZlcmJzW107Cisg ICAgICAgICAgICBleHRlcm4gaW50IG5rdmVyYnM7CisjZGVmaW5lIEtfQlVGTEVOIDMwCisgICAg ICAgICAgICBjaGFyIGtidWZbS19CVUZMRU4gKyAxXTsgICAgLyogS2V5IHZlcmIgbmFtZSBidWZm ZXIgKi8KKyAgICAgICAgICAgIGludCB4LCB5LCB6LCBicmFjZSA9IDA7CisgICAgICAgICAgICBz ICs9IDI7CisvKgorICBXZSBhc3N1bWUgdGhhdCB0aGUgdmVyYiBuYW1lIGlzIHticmFjZWR9LCBv ciBpdCBleHRlbmRzIHRvIHRoZSBlbmQgb2YgdGhlCisgIHN0cmluZywgcywgb3IgaXQgZW5kcyB3 aXRoIGEgc3BhY2UsIGNvbnRyb2wgY2hhcmFjdGVyLCBvciBiYWNrc2xhc2guCisqLworICAgICAg ICAgICAgcCA9IGtidWY7ICAgICAgICAgICAgICAgICAgIC8qIENvcHkgdmVyYiBuYW1lIGludG8g bG9jYWwgYnVmZmVyICovCisgICAgICAgICAgICB4ID0gMDsKKyAgICAgICAgICAgIGlmICgqcyA9 PSAneycpICB7CisgICAgICAgICAgICAgICAgcysrOworICAgICAgICAgICAgICAgIGJyYWNlKys7 CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3aGlsZSAoKHgrKyA8IEtfQlVGTEVOKSAmJiAo KnMgPiBTUCkgJiYgKCpzICE9IENNRFEpKSB7CisgICAgICAgICAgICAgICAgaWYgKGJyYWNlICYm ICpzID09ICd9JykgeworICAgICAgICAgICAgICAgICAgICBzKys7CisgICAgICAgICAgICAgICAg ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAqcCsrID0gKnMr KzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyYWNlID0gMDsKKyAgICAgICAgICAgICpw ID0gTlVMOyAgICAgICAgICAgICAgICAgICAvKiBUZXJtaW5hdGUuICovCisgICAgICAgICAgICBw ID0ga2J1ZjsgICAgICAgICAgICAgICAgICAgLyogUG9pbnQgYmFjayB0byBiZWdpbm5pbmcgKi8K KyAgICAgICAgICAgIGRlYnVnKEYxMTAsInp6c3RyaW5nIGt2ZXJiIixwLDApOworICAgICAgICAg ICAgeSA9IHhsb29rdXAoa3ZlcmJzLHAsbmt2ZXJicywmeCk7IC8qIExvb2sgaXQgdXAgKi8KKyAg ICAgICAgICAgIGRlYnVnKEYxMDEsInp6c3RyaW5nIGxvb2t1cCIsMCx5KTsKKyAgICAgICAgICAg IGlmICh5ID4gLTEpIHsKKyAgICAgICAgICAgICAgICBkb2t2ZXJiKFZDTUQseSk7CisjaWZuZGVm IE5PU1BMCisgICAgICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgLyogSXMgaXQg YSBtYWNybz8gKi8KKyAgICAgICAgICAgICAgICB5ID0gbXhsb29rKG1hY3RhYixwLG5tYWMpOwor ICAgICAgICAgICAgICAgIGlmICh5ID4gLTEpIHsKKyAgICAgICAgICAgICAgICAgICAgZGVidWco RjExMSwienpzdHJpbmcgbXhsb29rIixwLHkpOworICAgICAgICAgICAgICAgICAgICBpZiAoKHog PSBkb2RvKHksTlVMTCxjbWRzdGtbY21kbHZsXS5jY2ZsZ3MpKSA+IDApIHsKKyAgICAgICAgICAg ICAgICAgICAgICAgIGlmIChjbXB1c2goKSA+IC0xKSB7ICAvKiBQdXNoIGNvbW1hbmQgcGFyc2Vy IHN0YXRlICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZXJuIGludCBpZmM7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlmY3NhdiA9IGlmYzsgLyogUHVzaCBJRiBj b25kaXRpb24gb24gc3RhY2sgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gcGFy c2VyKDEpOyAgICAvKiBOZXcgcGFyc2VyIHRvIGV4ZWN1dGUgbWFjcm8gKi8KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjbXBvcCgpOyAgICAgICAgICAvKiBQb3AgY29tbWFuZCBwYXJzZXIg Ki8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmMgPSBpZmNzYXY7ICAgICAvKiBSZXN0 b3JlIElGIGNvbmRpdGlvbiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5ID09 IDApIHsgICAgIC8qIE5vIGVycm9ycywgaWdub3JlIGFjdGlvbnMgKi8KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcCA9IG1ydmFsW21hY2x2bCsxXTsgLyogSWYgT0sgc2V0IHJldHVy biB2YWwgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHAgPT0gTlVMTCkg cCA9ICIiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg ICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgIC8qIENhbid0IHB1c2ggYW55IG1vcmUgKi8K KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJ6enN0cmluZyBwdXNoZWQg dG9vIGRlZXAiLCIiLGRlcHRoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYo CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlxuP0ludGVybmFsIGVycm9yOiB6enN0 cmluZyBzdGFjayBvdmVyZmxvd1xuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChjbXBvcCgpID4gLTEpOwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAgPSAiIjsKKyAgICAgICAgICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyNlbmRpZiAv KiBOT1NQTCAqLworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K KyNlbmRpZiAvKiBOT0tWRVJCUyAqLworCisgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAg ICAgICAgICAgLyogTWF5YmUgaXQncyBhIGJhY2tzbGFzaCBjb2RlICovCisgICAgICAgICAgeSA9 IHh4ZXNjKCZzKTsgICAgICAgICAgICAgICAgLyogR28gaW50ZXJwcmV0IGl0ICovCisgICAgICAg ICAgaWYgKHkgPCAwKSB7ICAgICAgICAgICAgICAgICAgLyogVXBvbiBmYWlsdXJlICovCisgICAg ICAgICAgICAgICpuZXcrKyA9IChjaGFyKSB4OyAgICAgICAgLyogSnVzdCBxdW90ZSB0aGUgbmV4 dCBjaGFyYWN0ZXIgKi8KKyAgICAgICAgICAgICAgcyArPSAyOyAgICAgICAgICAgICAgICAgICAv KiBNb3ZlIHBhc3QgdGhlIHBhaXIgKi8KKyAgICAgICAgICAgICAgbjIgLT0gMjsKKyAgICAgICAg ICAgICAgaWYgKG4yIDwgMCkgeworICAgICAgICAgICAgICAgICAgZGVidWcoRjEwMSwienpzdHJp bmcgb3ZlcmZsb3cgNSIsIiIsZGVwdGgpOworI2lmZGVmIERWTkFNQlVGCisgICAgICAgICAgICAg ICAgICBpZiAodm5hbWJ1ZikgZnJlZSh2bmFtYnVmKTsKKyNlbmRpZiAvKiBEVk5BTUJVRiAqLwor ICAgICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICBjb250aW51ZTsgICAgICAgICAgICAgICAgIC8qIGFuZCBnbyBiYWNrIGZvciBtb3JlICov CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgKm5ldysrID0gKGNoYXIpIHk7ICAg ICAgICAvKiBlbHNlIGRlcG9zaXQgaW50ZXJwcmV0ZWQgdmFsdWUgKi8KKyAgICAgICAgICAgICAg aWYgKC0tbjIgPCAwKSB7CisgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJ6enN0cmluZyBv dmVyZmxvdyA2IiwiIixkZXB0aCk7CisjaWZkZWYgRFZOQU1CVUYKKyAgICAgICAgICAgICAgICAg IGlmICh2bmFtYnVmKSBmcmVlKHZuYW1idWYpOworI2VuZGlmIC8qIERWTkFNQlVGICovCisgICAg ICAgICAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgfQor ICAgICAgICB9CisgICAgfQorICAgICpuZXcgPSBOVUw7ICAgICAgICAgICAgICAgICAgICAgICAg IC8qIFRlcm1pbmF0ZSB0aGUgbmV3IHN0cmluZyAqLworICAgIGRlYnVnKEYwMTAsInp6c3RyaW5n IHdoaWxlIGV4aXQiLCpzMiwwKTsKKworICAgIGRlcHRoLS07ICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIEFkanVzdCBzdGFjayBkZXB0aCBnYXVnZSAqLworICAgICpzMiA9IG5ldzsgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIENvcHkgcmVzdWx0cyBiYWNrIGludG8gKi8KKyAgICAq biA9IG4yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0aGUgYXJndW1lbnQgYWRkcmVz c2VzICovCisgICAgZGVidWcoRjEwMSwienpzdHJpbmcgb2siLCIiLGRlcHRoKTsKKyNpZmRlZiBE Vk5BTUJVRgorICAgIGlmICh2bmFtYnVmKSBmcmVlKHZuYW1idWYpOworI2VuZGlmIC8qIERWTkFN QlVGICovCisgICAgcmV0dXJuKDApOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYW5kIHJl dHVybi4gKi8KK30KKyNlbmRpZiAvKiBOT0lDUCAqLwoKZGlmZiAtLWdpdCBhL2NrZXJtaXQtOS4w LjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1dXM1LmMgYi9ja2VybWl0LTkuMC4zMDItYnVp bGQvY2tlcm1pdC05LjAuMzAyL2NrdXVzNS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAuLmM0Yzg3ODIKLS0tIC9kZXYvbnVsbAorKysgYi9ja2VybWl0LTkuMC4zMDItYnVpbGQv Y2tlcm1pdC05LjAuMzAyL2NrdXVzNS5jCkBAIC0wLDAgKzEsMTI0MjcgQEAKKyNpbmNsdWRlICJj a2NzeW0uaCIKKworaW50IHhjbWRzcmMgPSAwOworCisjaWZkZWYgTk9JQ1AKK2ludCBjbWRzcmMo KSB7IHJldHVybigwKTsgfQorI2VuZGlmIC8qIE5PSUNQICovCisKKy8qICBDIEsgVSBVIFMgNSAt LSAgIlVzZXIgSW50ZXJmYWNlIiBmb3IgQy1LZXJtaXQsIHBhcnQgNSAgKi8KKworLyoKKyAgQXV0 aG9yczoKKyAgICBGcmFuayBkYSBDcnV6IDxmZGNAY29sdW1iaWEuZWR1PiwKKyAgICAgIFRoZSBL ZXJtaXQgUHJvamVjdCwgQ29sdW1iaWEgVW5pdmVyc2l0eSwgTmV3IFlvcmsgQ2l0eQorICAgIEpl ZmZyZXkgRSBBbHRtYW4gPGphbHRtYW5Ac2VjdXJlLWVuZHBvaW50cy5jb20+CisgICAgICBTZWN1 cmUgRW5kcG9pbnRzIEluYy4sIE5ldyBZb3JrIENpdHkKKworICBDb3B5cmlnaHQgKEMpIDE5ODUs IDIwMTEsCisgICAgVHJ1c3RlZXMgb2YgQ29sdW1iaWEgVW5pdmVyc2l0eSBpbiB0aGUgQ2l0eSBv ZiBOZXcgWW9yay4KKyAgICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgU2VlIHRoZSBDLUtlcm1pdCBD T1BZSU5HLlRYVCBmaWxlIG9yIHRoZQorICAgIGNvcHlyaWdodCB0ZXh0IGluIHRoZSBja2NtYWku YyBtb2R1bGUgZm9yIGRpc2NsYWltZXIgYW5kIHBlcm1pc3Npb25zLgorKi8KKworLyogSW5jbHVk ZXMgKi8KKworI2luY2x1ZGUgImNrY2RlYi5oIgorI2luY2x1ZGUgImNrY2FzYy5oIgorI2luY2x1 ZGUgImNrY2tlci5oIgorI2luY2x1ZGUgImNrdXVzci5oIgorCisjaWZkZWYgRENNREJVRgorY2hh ciAqbGluZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENoYXJhY3RlciBidWZmZXIg Zm9yIGFueXRoaW5nICovCitjaGFyICp0bXBidWY7CisjZWxzZQorY2hhciBsaW5lW0xJTkJVRlNJ WisxXTsKK2NoYXIgdG1wYnVmW1RNUEJVRlNJWisxXTsgICAgICAgICAgICAgICAvKiBUZW1wb3Jh cnkgYnVmZmVyICovCisjZW5kaWYgLyogRENNREJVRiAqLworCisjaWZuZGVmIE5PSUNQCisKKyNp bmNsdWRlICJja2NuZXQuaCIKKyNpZm5kZWYgTk9DU0VUUworI2luY2x1ZGUgImNrY3hsYS5oIgor I2VuZGlmIC8qIE5PQ1NFVFMgKi8KKyNpZmRlZiBNQUMKKyNpbmNsdWRlICJja21hc20uaCIKKyNl bmRpZiAvKiBNQUMgKi8KKyNpZmRlZiBDS19TU0wKKyNpbmNsdWRlICJja19zc2wuaCIKKyNlbmRp ZiAvKiBDS19TU0wgKi8KKworZXh0ZXJuIGNoYXIgKiBja19jcnllYXI7ICAgICAgIC8qIChja2Nt YWkuYykgTGF0ZXN0IEMtS2VybWl0IGNvcHlyaWdodCB5ZWFyICovCisKKyNpZmRlZiBPUzIKKyNp bmNsdWRlICJja29ldGMuaCIKKyNpZm5kZWYgTlQKKyNkZWZpbmUgSU5DTF9OT1BNCisjZGVmaW5l IElOQ0xfVklPIC8qIE5lZWRlZCBmb3IgY2tvY29uLmggKi8KKyNpbmNsdWRlIDxvczIuaD4KKyN1 bmRlZiBDT01NRU5UCisjZWxzZSAvKiBOVCAqLworI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNkZWZp bmUgVEFQSV9DVVJSRU5UX1ZFUlNJT04gMHgwMDAxMDAwNAorI2luY2x1ZGUgPHRhcGkuaD4KKyNp bmNsdWRlIDxtY3guaD4KKyNpbmNsdWRlICJja250YXAuaCIKKyNkZWZpbmUgQVBJUkVUIFVMT05H CitleHRlcm4gaW50IERpYWxlckhhbmRsZTsKK2V4dGVybiBpbnQgU3RhcnRlZEZyb21EaWFsZXI7 CisjZW5kaWYgLyogTlQgKi8KKyNpbmNsdWRlICJja29jb24uaCIKKyNpbmNsdWRlICJja29rZXku aCIKKyNpZmRlZiBLVUkKKyNpbmNsdWRlICJpa3VpLmgiCisjZW5kaWYgLyogS1VJICovCisjaWZk ZWYgcHV0Y2hhcgorI3VuZGVmIHB1dGNoYXIKKyNlbmRpZiAvKiBwdXRjaGFyICovCisjZGVmaW5l IHB1dGNoYXIoeCkgY29ub2MoeCkKK2V4dGVybiBpbnQgY3Vyc29yX3NhdmUgOworZXh0ZXJuIGJv b2wgY3Vyc29yZW5hW10gOworI2VuZGlmIC8qIE9TMiAqLworCisvKiAyMDEwLTAzLTA5IFNNUy4g IFZBWCBDIFYzLjEtMDUxIG5lZWRzIDxzdGF0Lmg+IGZvciBvZmZfdC4gKi8KKyNpZmRlZiBWTVMK KyNpbmNsdWRlIDxzdGF0Lmg+CisjZW5kaWYgLyogZGVmIFZNUyAqLworCisvKiBGb3IgZm9ybWF0 dGVkIHNjcmVlbnMsICJtb3JlPyIgcHJvbXB0aW5nLCBldGMuICovCisKKyNpZmRlZiBGVDE4Cisj ZGVmaW5lIGlzeGRpZ2l0KGMpIGlzZGlnaXQoYykKKyNlbmRpZiAvKiBGVDE4ICovCisKKyNpZmRl ZiBTVFJBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTdHJhdHVzIENvbXB1dGVyLCBJ bmMuICBWT1MgKi8KKyNpZmRlZiBwdXRjaGFyCisjdW5kZWYgcHV0Y2hhcgorI2VuZGlmIC8qIHB1 dGNoYXIgKi8KKyNkZWZpbmUgcHV0Y2hhcih4KSBjb25vYyh4KQorI2lmZGVmIGdldGNoYXIKKyN1 bmRlZiBnZXRjaGFyCisjZW5kaWYgLyogZ2V0Y2hhciAqLworI2RlZmluZSBnZXRjaGFyKHgpIGNv bmluYygwKQorI2VuZGlmIC8qIFNUUkFUVVMgKi8KKworLyogRXh0ZXJuYWwgdmFyaWFibGVzICov CisKK2V4dGVybiBpbnQgY2FycmllciwgY2R0aW1vLCBsb2NhbCwgcXVpZXQsIGJhY2tncmQsIGJn c2V0LCBzb3NpLCB4c3VzcGVuZCwKKyAgYmluYXJ5LCBlc2NhcGUsIHhhcmdzLCBmbG93LCBjbWRt c2ssIGR1cGxleCwgY2t4ZWNoLCBzZXNsb2csIHdoYXQsCisgIGluc2VydmVyLCBkaXJhY3RpdmUs IHRsZXZlbCwgY3dkZiwgbmZ1bmNzLCBtc2dmbGcsIHJlbWFwcGQsIGhpbnRzLCBtZG10eXAsCisg IHppbmNudCwgY21hc2ssIHJjZmxhZywgc3VjY2VzcywgeGl0c3RhLCBwZmxhZywgdG5sbSwgdG5f bmxtLCB4aXR3YXJuLAorICBkZWJzZXMsIHhhc2ttb3JlLCBwYXJpdHksIHNhdmVhc2ssIHdhc2Ns b3NlZCwgd2h5Y2xvc2VkLCBjZGFjdGl2ZSwKKyAgcmNkYWN0aXZlLCBrZWVwYWxsY2hhcnMsIGNt ZF9lcnI7CisKKyNpZmRlZiBMT0NVUworZXh0ZXJuIGludCBsb2N1cywgYXV0b2xvY3VzOworI2Vu ZGlmIC8qIExPQ1VTICovCisKKyNpZm5kZWYgTk9NU0VORAorZXh0ZXJuIGludCBhZGRsaXN0Owor I2VuZGlmIC8qIE5PTVNFTkQgKi8KKworI2lmZGVmIENLX1NQRUVECitleHRlcm4gaW50IHByZWZp eGluZzsKKyNlbmRpZiAvKiBDS19TUEVFRCAqLworCitleHRlcm4gaW50IGdfbWF0Y2hkb3Q7CisK KyNpZmRlZiBSRUNVUlNJVkUKK2V4dGVybiBpbnQgcmVjdXJzaXZlOworI2VuZGlmIC8qIFJFQ1VS U0lWRSAqLworZXh0ZXJuIGludCB4ZmlsZXR5cGU7CisKKyNpZmRlZiBJS1NEQ09ORgorZXh0ZXJu IGNoYXIgKiBpa3NkY29uZjsKK2V4dGVybiBpbnQgaWtzZGNmOworI2VuZGlmIC8qIElLU0RDT05G ICovCisKKyNpZmRlZiBDS19SRUNBTEwKK2V4dGVybiBpbnQgb25fcmVjYWxsOworI2VuZGlmIC8q IENLX1JFQ0FMTCAqLworCitleHRlcm4gaW50IG5nZXRwYXRoLCBleGl0b25jbG9zZTsKK2V4dGVy biBjaGFyICogZ2V0cGF0aFtdOworZXh0ZXJuIENIQVIgKiBlcGt0bXNnOworCitleHRlcm4gY2hh ciAqIHNuZF9tb3ZlOworZXh0ZXJuIGNoYXIgKiBzbmRfcmVuYW1lOworZXh0ZXJuIGNoYXIgKiBy Y3ZfbW92ZTsKK2V4dGVybiBjaGFyICogcmN2X3JlbmFtZTsKK2V4dGVybiBjaGFyICogZ19zbmRf bW92ZTsKK2V4dGVybiBjaGFyICogZ19zbmRfcmVuYW1lOworZXh0ZXJuIGNoYXIgKiBnX3Jjdl9t b3ZlOworZXh0ZXJuIGNoYXIgKiBnX3Jjdl9yZW5hbWU7CisKK2V4dGVybiBjaGFyICogbm1bXTsK KworI2lmZGVmIENLX1VUU05BTUUKK2V4dGVybiBjaGFyIHVubV9tY2hbXTsKK2V4dGVybiBjaGFy IHVubV9tb2RbXTsKK2V4dGVybiBjaGFyIHVubV9uYW1bXTsKK2V4dGVybiBjaGFyIHVubV9yZWxb XTsKK2V4dGVybiBjaGFyIHVubV92ZXJbXTsKKyNlbmRpZiAvKiBDS19VVFNOQU1FICovCisKKyNp Zm5kZWYgTk9QVVNICisjaWZuZGVmIE5PRlJJTExTCitleHRlcm4gY2hhciBlZGl0b3JbXTsKK2V4 dGVybiBjaGFyIGVkaXRmaWxlW107CitleHRlcm4gY2hhciBlZGl0b3B0c1tdOworI2lmZGVmIEJS T1dTRVIKK2V4dGVybiBjaGFyIGJyb3dzZXJbXTsKK2V4dGVybiBjaGFyIGJyb3dzb3B0c1tdOwor ZXh0ZXJuIGNoYXIgYnJvd3N1cmxbXTsKKyNlbmRpZiAvKiBCUk9XU0VSICovCisjZW5kaWYgLyog IE5PRlJJTExTICovCisjZW5kaWYgLyogTk9QVVNIICovCisKKyNpZm5kZWYgTk9GUklMTFMKKyNp Zm5kZWYgTk9SRU5BTUUKK19QUk9UT1RZUChWT0lEIHNob3JlbmFtZSwgKHZvaWQpKTsKKyNlbmRp ZgkvKiBOT1JFTkFNRSAqLworI2VuZGlmCS8qIE5PRlJJTExTICovCisKKyNpZm5kZWYgTk9TRVJW RVIKK2V4dGVybiBjaGFyICogeF91c2VyLCAqIHhfcGFzc3dkLCAqIHhfYWNjdDsKKyNlbmRpZiAv KiBOT1NFUlZFUiAqLworCisjaWZkZWYgQ0tMT0dESUFMCitleHRlcm4gaW50IGRpYWxvZzsKK2V4 dGVybiBjaGFyIGRpYWZpbFtdOworI2VuZGlmIC8qIENLTE9HRElBTCAqLworCisjaWZkZWYgQ0tS T09UCitleHRlcm4gaW50IGNrcm9vdGVycjsKKyNlbmRpZiAvKiBDS1JPT1QgKi8KKworI2lmbmRl ZiBOT1NQTAorZXh0ZXJuIGludCBjZmlsZWYsIHh4ZG90LCB2YXJldmFsOworZXh0ZXJuIGNoYXIg Y21kZmlsW107CisKK3N0cnVjdCBsb2NhbHZhciAqIGxvY2FsaGVhZFtDTURTVEtMXTsKK3N0cnVj dCBsb2NhbHZhciAqIGxvY2FsdGFpbCA9IE5VTEw7CitzdHJ1Y3QgbG9jYWx2YXIgKiBsb2NhbG5l eHQgPSBOVUxMOworCitfUFJPVE9UWVAoIFZPSUQgc2hvc2V4cCwgKHZvaWQpICk7CitfUFJPVE9U WVAoIHN0YXRpYyBWT0lEIHNob2lucHV0LCAodm9pZCkgKTsKK19QUk9UT1RZUCggc3RhdGljIGNo YXIgZ2V0dG9rLCAgICh2b2lkKSApOworX1BST1RPVFlQKCBzdGF0aWMgVk9JRCBmYWN0b3IsICAg KHZvaWQpICk7CitfUFJPVE9UWVAoIHN0YXRpYyBWT0lEIHRlcm0sICAgICAodm9pZCkgKTsKK19Q Uk9UT1RZUCggc3RhdGljIFZPSUQgdGVybXAsICAgICh2b2lkKSApOworX1BST1RPVFlQKCBzdGF0 aWMgVk9JRCBleHBycCwgICAgKHZvaWQpICk7CitfUFJPVE9UWVAoIHN0YXRpYyBWT0lEIGV4cHIs ICAgICAodm9pZCkgKTsKK19QUk9UT1RZUCggc3RhdGljIFZPSUQgc2ltcGxlLCAgICh2b2lkKSAp OworX1BST1RPVFlQKCBzdGF0aWMgVk9JRCBzaW1wbGVyLCAgKHZvaWQpICk7CitfUFJPVE9UWVAo IHN0YXRpYyBWT0lEIHNpbXBsZXN0LCAodm9pZCkgKTsKK19QUk9UT1RZUCggc3RhdGljIENLX09G Rl9UIHhwYXJzZSwgICAodm9pZCkgKTsKKyNlbmRpZiAvKiBOT1NQTCAqLworI2lmbmRlZiBOT1NI T1cKK19QUk9UT1RZUCggaW50IHNob19pa3MsICh2b2lkKSApOworI2VuZGlmIC8qIE5PU0hPVyAq LworCisjaWZkZWYgTUFDCitjaGFyICogY2twcm9tcHQgPSAiTWFjLUtlcm1pdD4iOyAgICAgICAg LyogRGVmYXVsdCBwcm9tcHQgZm9yIE1hY2ludG9zaCAqLworY2hhciAqIGlrcHJvbXB0ID0gIklL U0Q+IjsKKyNlbHNlICAvKiBOb3QgTUFDICovCisjaWZkZWYgTk9TUEwKKyNpZmRlZiBPUzIKK2No YXIgKiBja3Byb21wdCA9ICJLLTk1PiAiOyAgICAgICAgICAgICAvKiBEZWZhdWx0IHByb21wdCBm b3IgV2luMzIgKi8KK2NoYXIgKiBpa3Byb21wdCA9ICJJS1NEPiAiOworI2Vsc2UKK2NoYXIgKiBj a3Byb21wdCA9ICJDLUtlcm1pdD4iOworY2hhciAqIGlrcHJvbXB0ID0gIklLU0Q+IjsKKyNlbmRp ZiAvKiBOVCAqLworI2Vsc2UgIC8qIE5PU1BMICovCisjaWZkZWYgT1MyCisvKiBEZWZhdWx0IHBy b21wdCBmb3IgT1MvMiBhbmQgV2luMzIgKi8KKyNpZmRlZiBOVAorY2hhciAqIGNrcHJvbXB0ID0g IltcXGZyZXBsYWNlKFxcZmxvbmdwYXRoKFxcdihkaXIpKSwvLFxcXFwpXSBLLTk1PiAiOworY2hh ciAqIGlrcHJvbXB0ID0gIltcXGZyZXBsYWNlKFxcZmxvbmdwYXRoKFxcdihkaXIpKSwvLFxcXFwp XSBJS1NEPiAiOworI2Vsc2UgIC8qIE5UICovCitjaGFyICogY2twcm9tcHQgPSAiW1xcZnJlcGxh Y2UoXFx2KGRpciksLyxcXFxcKV0gSy05NT4gIjsKK2NoYXIgKiBpa3Byb21wdCA9ICJbXFxmcmVw bGFjZShcXHYoZGlyKSwvLFxcXFwpXSBJS1NEPiAiOworI2VuZGlmIC8qIE5UICovCisjZWxzZSAg LyogT1MyICovCisjaWZkZWYgVk1TCitjaGFyICogY2twcm9tcHQgPSAiXFx2KGRpcikgQy1LZXJt aXQ+IjsgLyogRGVmYXVsdCBwcm9tcHQgVk1TICovCitjaGFyICogaWtwcm9tcHQgPSAiXFx2KGRp cikgSUtTRD4iOworI2Vsc2UKK2NoYXIgKiBja3Byb21wdCA9ICIoXFx2KGRpcikpIEMtS2VybWl0 PiI7IC8qIERlZmF1bHQgcHJvbXB0IGZvciBvdGhlcnMgKi8KK2NoYXIgKiBpa3Byb21wdCA9ICIo XFx2KGRpcikpIElLU0Q+IjsKKyNlbmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBOVCAqLworI2Vu ZGlmIC8qIE5PU1BMICovCisjZW5kaWYgLyogTUFDICovCisKKyNpZm5kZWYgQ0NITUFYUEFUSAor I2RlZmluZSBDQ0hNQVhQQVRIIDI1NworI2VuZGlmIC8qIENDSE1BWFBBVEggKi8KK2NoYXIgaW5p ZGlyW0NDSE1BWFBBVEhdID0geyBOVUwsIE5VTCB9OyAvKiBEaXJlY3RvcnkgSU5JIGZpbGUgZXhl Y3V0ZWQgZnJvbSAqLworCisjaWZkZWYgVE5DT0RFCitleHRlcm4gaW50IHRuX2JfbmxtOyAgICAg ICAgICAgICAgICAgICAgLyogVEVMTkVUIEJJTkFSWSBuZXdsaW5lIG1vZGUgKi8KKyNlbmRpZiAv KiBUTkNPREUgKi8KKworI2lmbmRlZiBOT0tWRVJCUworZXh0ZXJuIHN0cnVjdCBrZXl0YWIga3Zl cmJzW107ICAgICAgICAgIC8qIFRhYmxlIG9mIFxLdmVyYnMgKi8KK2V4dGVybiBpbnQgbmt2ZXJi czsgICAgICAgICAgICAgICAgICAgICAvKiBOdW1iZXIgb2YgXEt2ZXJicyAqLworI2VuZGlmIC8q IE5PS1ZFUkJTICovCisKKyNpZm5kZWYgTk9QVVNICitleHRlcm4gaW50IG5vcHVzaDsKKyNlbmRp ZiAvKiBOT1BVU0ggKi8KKworI2lmZGVmIENLX1JFQ0FMTAorZXh0ZXJuIGludCBjbV9yZWNhbGw7 CisjZW5kaWYgLyogQ0tfUkVDQUxMICovCisKK2V4dGVybiBjaGFyICpjY250YWJbXTsKKworLyog UHJpbnRlciBzdHVmZiAqLworCitleHRlcm4gY2hhciAqcHJpbnRlcm5hbWU7CitleHRlcm4gaW50 IHByaW50cGlwZTsKKyNpZmRlZiBCUFJJTlQKK2V4dGVybiBpbnQgcHJpbnRiaWRpLCBwcG9ydHBh cml0eSwgcHBvcnRmbG93OworZXh0ZXJuIGxvbmcgcHBvcnRzcGVlZDsKKyNlbmRpZiAvKiBCUFJJ TlQgKi8KKworI2lmZGVmIE9TMgorX1BST1RPVFlQIChpbnQgb3MyZ2V0Y3AsICh2b2lkKSApOwor X1BST1RPVFlQIChpbnQgb3MyZ2V0Y3BsaXN0LCAoaW50ICosIGludCkgKTsKKyNpZmRlZiBPUzJN T1VTRQorZXh0ZXJuIGludCB0dF9tb3VzZTsKKyNlbmRpZiAvKiBPUzJNT1VTRSAqLworZXh0ZXJu IGludCB0dF91cGRhdGUsIHR0X3VwZG1vZGUsIHVwZG1vZGUsIHR0X3V0Zjg7CisjaWZuZGVmIElL U0RPTkxZCitleHRlcm4gaW50IHR0X3N0YXR1c1tdOworI2VuZGlmIC8qIElLU0RPTkxZICovCisj aWZkZWYgUENGT05UUworZXh0ZXJuIHN0cnVjdCBrZXl0YWIgdGVybV9mb250W107CisjZWxzZQor I2lmZGVmIEtVSQorZXh0ZXJuIHN0cnVjdCBrZXl0YWIgKiB0ZXJtX2ZvbnQ7CisjZW5kaWYgLyog S1VJICovCisjZW5kaWYgLyogUENGT05UUyAqLworZXh0ZXJuIGludCBudGVybWZvbnQsIHR0X2Zv bnQsIHR0X2ZvbnRfc2l6ZTsKK2V4dGVybiB1bnNpZ25lZCBjaGFyIGNvbG9ybm9ybWFsLCBjb2xv cnVuZGVybGluZSwgY29sb3JzdGF0dXMsCisgICAgY29sb3JoZWxwLCBjb2xvcnNlbGVjdCwgY29s b3Jib3JkZXIsIGNvbG9yZ3JhcGhpYywgY29sb3JkZWJ1ZywKKyAgICBjb2xvcnJldmVyc2UsIGNv bG9yY21kLCBjb2xvcml0YWxpYzsKK2V4dGVybiBpbnQgcHJpb3JpdHk7CitleHRlcm4gc3RydWN0 IGtleXRhYiBwcnR5dGFiW107CitleHRlcm4gaW50IG5wcnR5OworY2hhciAqIGNtZG1hYyA9IE5V TEw7CisjZW5kaWYgLyogT1MyICovCisKKyNpZmRlZiBWTVMKK19QUk9UT1RZUCAoaW50IHprZXJt aW5pLCAoY2hhciAqLCBpbnQsIGNoYXIgKikgKTsKKyNlbmRpZiAvKiBWTVMgKi8KKworZXh0ZXJu IGxvbmcgdmVybnVtOworZXh0ZXJuIGludCBpbmVjaG8sIGluc2lsZW5jZSwgaW5idWZzaXplLCBu dmFycywgaW5pbnRyOworZXh0ZXJuIGNoYXIgKnByb3R2LCAqZm5zdiwgKmNtZHYsICp1c2Vydiwg KmNreHYsICpja3p2LCAqY2t6c3lzLCAqeGxhdiwKKyAqY2tuZXR2LCAqY2xjbWRzOworI2lmZGVm IE9TMgorZXh0ZXJuIGNoYXIgKmNreXY7CisjZW5kaWYgLyogT1MyICovCisjaWZkZWYgQ0tfQVVU SEVOVElDQVRJT04KK2V4dGVybiBjaGFyICogY2thdGh2OworI2VuZGlmIC8qIENLX0FVVEhFTlRJ Q0FUSU9OICovCisjaWZkZWYgQ0tfU1NMCitleHRlcm4gY2hhciAqIGNrc3NsdjsKKyNlbmRpZiAv KiBDS19TU0wgKi8KKyNpZmRlZiBDS19FTkNSWVBUSU9OCisjaWZuZGVmIENSWVBUX0RMTAorZXh0 ZXJuIGNoYXIgKiBja2NycHY7CisjZW5kaWYgLyogQ1JZUFRfRExMICovCisjZW5kaWYgLyogQ0tf RU5DUllQVElPTiAqLworCisjaWZkZWYgU1NIQlVJTFRJTgorZXh0ZXJuIGNoYXIgKmNrc3NodjsK KyNpZmRlZiBTRlRQX0JVSUxUSU4KK2V4dGVybiBjaGFyICpja3NmdHB2OworI2VuZGlmIC8qIFNG VFBfQlVJTFRJTiAqLworI2VuZGlmIC8qIFNTSEJVSUxUSU4gKi8KKworI2lmZGVmIFROQ09ERQor ZXh0ZXJuIGNoYXIgKmNrdGVsdjsKKyNlbmRpZiAvKiBUTkNPREUgKi8KKyNpZm5kZWYgTk9GVFAK KyNpZm5kZWYgU1lTRlRQCitleHRlcm4gY2hhciAqIGNrZnRwdjsKKyNlbmRpZiAvKiBTWVNGVFAg Ki8KKyNlbmRpZiAvKiBOT0ZUUCAqLworCitleHRlcm4gaW50IHNydmlkbDsKKworI2lmZGVmIE9T MgorZXh0ZXJuIGNoYXIgKmNrb25ldHY7CitleHRlcm4gaW50IGludGVybTsKKyNpZmRlZiBDS19O RVRCSU9TCitleHRlcm4gY2hhciAqY2tvbmJpdjsKKyNlbmRpZiAvKiBDS19ORVRCSU9TICovCisj aWZkZWYgT1MyTU9VU0UKK2V4dGVybiBjaGFyICpja29tb3V2OworI2VuZGlmIC8qIE9TMk1PVVNF ICovCisjZW5kaWYgLyogT1MyICovCisKKyNpZm5kZWYgTk9MT0NBTAorZXh0ZXJuIGNoYXIgKmNv bm52OworI2VuZGlmIC8qIE5PTE9DQUwgKi8KKyNpZm5kZWYgTk9ESUFMCitleHRlcm4gY2hhciAq ZGlhbHY7CisjZW5kaWYgLyogTk9ESUFMICovCisjaWZuZGVmIE5PU0NSSVBUCitleHRlcm4gY2hh ciAqbG9naW52OworZXh0ZXJuIGludCBzZWNobzsKKyNlbmRpZiAvKiBOT1NDUklQVCAqLworCisj aWZuZGVmIE5PRElBTAorZXh0ZXJuIGludCBubWRtLCBkaXJsaW5lOworZXh0ZXJuIHN0cnVjdCBr ZXl0YWIgbWRtdGFiW107CisjZW5kaWYgLyogTk9ESUFMICovCisKK2V4dGVybiBpbnQgbmV0d29y aywgbmV0dHlwZSwgdHRucHJvdG87CisKKyNpZmRlZiBPUzIKKyNpZm5kZWYgTk9URVJNCisvKiBT RVQgVEVSTUlOQUwgaXRlbXMuLi4gKi8KK2V4dGVybiBpbnQgdHRfdHlwZSwgdHRfYXJyb3csIHR0 X2tleXBhZCwgdHRfd3JhcCwgdHRfYW5zd2VyLCB0dF9zY3JzaXplW107CitleHRlcm4gaW50IHR0 X2JlbGwsIHR0X3JvbGxbXSwgdHRfY3RzdG1vLCB0dF9jdXJzb3IsIHR0X3BhY2luZywgdHRfdHlw ZV9tb2RlOworZXh0ZXJuIGNoYXIgYW5zd2VyYmFja1tdOworZXh0ZXJuIHN0cnVjdCB0dF9pbmZv X3JlYyB0dF9pbmZvW107ICAgIC8qIEluZGV4ZWQgYnkgdGVybWluYWwgdHlwZSAqLworZXh0ZXJu IGludCBtYXhfdHQ7CisjZW5kaWYgLyogTk9URVJNICovCisjZW5kaWYgLyogT1MyICovCisKK19Q Uk9UT1RZUCggVk9JRCBzaG90cm0sICh2b2lkKSApOworX1BST1RPVFlQKCBpbnQgc2hvZmVhLCAo dm9pZCkgKTsKKworI2lmZGVmIE9TMgorZXh0ZXJuIGludCB0dF9yb3dzW10sIHR0X2NvbHNbXTsK KyNlbHNlIC8qIE9TMiAqLworZXh0ZXJuIGludCB0dF9yb3dzLCB0dF9jb2xzOworI2VuZGlmIC8q IE9TMiAqLworZXh0ZXJuIGludCBjbWRfcm93cywgY21kX2NvbHM7CisKKyNpZmRlZiBDS19UTVBE SVIKK2V4dGVybiBpbnQgZl90bXBkaXI7ICAgICAgICAgICAgICAgICAgICAvKiBEaXJlY3Rvcnkg Y2hhbmdlZCB0ZW1wb3JhcmlseSAqLworZXh0ZXJuIGNoYXIgc2F2ZGlyW107ICAgICAgICAgICAg ICAgICAgIC8qIFRlbXBvcmFyeSBkaXJlY3RvcnkgKi8KKyNlbmRpZiAvKiBDS19UTVBESVIgKi8K KworI2lmbmRlZiBOT0xPQ0FMCitleHRlcm4gaW50IHR0X2NyZCwgdHRfbGZkLCB0dF9lc2NhcGU7 CisjZW5kaWYgLyogTk9MT0NBTCAqLworCisjaWZuZGVmIE5PQ1NFVFMKK2V4dGVybiBpbnQgbGFu Z3VhZ2UsIG5maWxjLCB0Y3NyLCB0Y3NsLCB0Y3NfdHJhbnNwLCBmY2hhcnNldDsKK2V4dGVybiBz dHJ1Y3Qga2V5dGFiIGZjc3RhYltdOworZXh0ZXJuIHN0cnVjdCBjc2luZm8gZmNzaW5mb1tdOwor I2lmbmRlZiBNQUMKK2V4dGVybiBzdHJ1Y3Qga2V5dGFiIHR0Y3N0YWJbXTsKKyNlbmRpZiAvKiBN QUMgKi8KKyNlbmRpZiAvKiBOT0NTRVRTICovCisKK2V4dGVybiBsb25nIHNwZWVkOworCisjaWZu ZGVmIE5PWE1JVAorZXh0ZXJuIGludCB4bWl0ZiwgeG1pdGwsIHhtaXRwLCB4bWl0eCwgeG1pdHMs IHhtaXR3LCB4bWl0dDsKK2V4dGVybiBjaGFyIHhtaXRidWZbXTsKKyNlbmRpZiAvKiBOT1hNSVQg Ki8KKworZXh0ZXJuIGNoYXIgKip4YXJndiwgKnZlcnNpbywgKmNreHN5cywgKmRmdHR5LCAqbHA7 CisKKyNpZmRlZiBEQ01EQlVGCitleHRlcm4gY2hhciAqY21kYnVmLCAqYXRtYnVmOyAgICAgICAg ICAgLyogQ29tbWFuZCBidWZmZXJzICovCisjaWZuZGVmIE5PU1BMCitleHRlcm4gY2hhciAqc2F2 YnVmOyAgICAgICAgICAgICAgICAgICAgLyogQ29tbWFuZCBidWZmZXJzICovCisjZW5kaWYgLyog Tk9TUEwgKi8KKyNlbHNlCitleHRlcm4gY2hhciBjbWRidWZbXSwgYXRtYnVmW107ICAgICAgICAg LyogQ29tbWFuZCBidWZmZXJzICovCisjaWZuZGVmIE5PU1BMCitleHRlcm4gY2hhciBzYXZidWZb XTsgICAgICAgICAgICAgICAgICAgLyogQ29tbWFuZCBidWZmZXJzICovCisjZW5kaWYgLyogTk9T UEwgKi8KKyNlbmRpZiAvKiBEQ01EQlVGICovCisKK2V4dGVybiBjaGFyIHRva3RhYltdLCB0dG5h bWVbXSwgcHNhdmVbXTsKK2V4dGVybiBDSEFSIHNzdGF0ZSwgZmVvbDsKK2V4dGVybiBpbnQgY21m bGdzLCB0ZWNobywgcmVwYXJzLCBuY21kOworZXh0ZXJuIHN0cnVjdCBrZXl0YWIgY21kdGFiW107 CisKKyNpZm5kZWYgTk9TRVRLRVkKK0tFWSAqa2V5bWFwOworI2lmbmRlZiBPUzIKKyNkZWZpbmUg bWFwa2V5KHgpIGtleW1hcFt4XQorI2VuZGlmIC8qIE9TMiAqLworTUFDUk8gKm1hY3JvdGFiOwor X1BST1RPVFlQKCBWT0lEIHNob3N0cmRlZiwgKENIQVIgKikgKTsKKyNlbmRpZiAvKiBOT1NFVEtF WSAqLworCitleHRlcm4gaW50IGNtZGx2bDsKKworI2lmbmRlZiBOT1NQTAorZXh0ZXJuIHN0cnVj dCBtdGFiICptYWN0YWI7CitleHRlcm4gc3RydWN0IGtleXRhYiBtYWNrZXlbXTsKK2V4dGVybiBz dHJ1Y3Qga2V5dGFiIHZhcnRhYltdLCBmbmN0YWJbXSwgaWZ0YWJbXTsKK2V4dGVybiBpbnQgbWFj bHZsLCBubWFjLCBtZWNobywgZm5kaWFncywgZm5lcnJvciwgZm5zdWNjZXNzLCBuaWY7CisjZW5k aWYgLyogTk9TUEwgKi8KKworRklMRSAqdGZpbGVbTUFYVEFLRV07ICAgICAgICAgICAgICAgICAg IC8qIFRBS0UgZmlsZSBzdGFjayAqLworY2hhciAqdGZuYW1bTUFYVEFLRV07CitpbnQgdGZsaW5l W01BWFRBS0VdOworCitpbnQgdG9wY21kID0gLTE7ICAgICAgICAgICAgICAgICAgICAgICAgLyog Y21kdGFiIGluZGV4IG9mIGN1cnJlbnQgY29tbWFuZCAqLworaW50IGhhdmV0b2tlbiA9IDA7Citl eHRlcm4gaW50IGRibHF1bzsgICAgICAgICAgICAgICAgICAgICAgLyogRG91YmxlcXVvdGluZyBl bmFibGVkICovCisKKyNpZmRlZiBEQ01EQlVGICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJ bml0aWFsaXphdGlvbiBmaWxlc3BlYyAqLworY2hhciAqa2VybXJjID0gTlVMTDsKKyNlbHNlCitj aGFyIGtlcm1yY2JbS0VSTVJDTF07CitjaGFyICprZXJtcmMgPSBrZXJtcmNiOworI2VuZGlmIC8q IERDTURCVUYgKi8KKworaW50IG5vaGVyYWxkID0gMDsKK2ludCBjbV9yZXRyeSA9IDE7ICAgICAg ICAgICAgICAgICAgICAgICAvKiBDb21tYW5kIHJldHJ5IGVuYWJsZWQgKi8KK3h4X3N0cnAgeHhz dHJpbmcgPSB6enN0cmluZzsKKworI2lmbmRlZiBOT1hGRVIKK2V4dGVybiBpbnQgZGlzcGxhLCBi eWVfYWN0aXZlLCBwcm90b2NvbCwgcGt0bG9nLCByZW1maWxlLCByZW1waXBlLCB1bmtjcywKKyAg a2VlcCwgbGZfb3B0cywgZm5jbnYsIHBrdHBhdXMsIGF1dG9kbCwgeGZyY2FuLCB4ZnJjaHIsIHhm cm51bSwgc3J2dGltLAorICBzcnZkaXMsIHF1ZXJ5LCByZXRyYW5zLCBzdHJlYW1lZCwgcmVsaWFi bGUsIGNydW5jaGVkLCB0aW1lb3V0cywKKyAgZm5ycGF0aCwgYXV0b3BhdGgsIHJwYWNrZXRzLCBz cGFja2V0cywgZXBrdHJjdmQsIHNydnBpbmc7CisKKyNpZmRlZiBDS19BVVRPREwKK2V4dGVybiBp bnQgaW5hdXRvZGwsIGNtZGFkbDsKKyNlbmRpZiAvKiBDS19BVVRPREwgKi8KKworI2lmbmRlZiBO T1NFUlZFUgorZXh0ZXJuIGludCBlbl9hc2csIGVuX2N3ZCwgZW5fY3B5LCBlbl9kZWwsIGVuX2Rp ciwgZW5fZmluLCBlbl9ieWUsIGVuX3JldCwKKyAgZW5fZ2V0LCBlbl9ob3MsIGVuX3F1ZSwgZW5f cmVuLCBlbl9zZW4sIGVuX3NldCwgZW5fc3BhLCBlbl90eXAsIGVuX3dobywKKyAgZW5fbWFpLCBl bl9wcmksIGVuX21rZCwgZW5fcm1kLCBlbl94aXQsIGVuX2VuYTsKKyNlbmRpZiAvKiBOT1NFUlZF UiAqLworCitleHRlcm4gaW50IGF0Y2FwciwKKyAgYXRlbmNpLCBhdGVuY28sIGF0ZGF0aSwgYXRk YXRvLCBhdGxlbmksIGF0bGVubywgYXRibGtpLCBhdGJsa28sCisgIGF0dHlwaSwgYXR0eXBvLCBh dHNpZGksIGF0c2lkbywgYXRzeXNpLCBhdHN5c28sIGF0ZGlzaSwgYXRkaXNvOworCisjaWZkZWYg U1RSQVRVUworZXh0ZXJuIGludCBhdGZybWksIGF0ZnJtbywgYXRjcmVpLCBhdGNyZW8sIGF0YWN0 aSwgYXRhY3RvOworI2VuZGlmIC8qIFNUUkFUVVMgKi8KKworI2lmZGVmIENLX1BFUk1TCitleHRl cm4gaW50IGF0bHByaSwgYXRscHJvLCBhdGdwcmksIGF0Z3BybzsKKyNlbmRpZiAvKiBDS19QRVJN UyAqLworCisjaWZkZWYgQ0tfTE9HSU4KK2V4dGVybiBjaGFyICogYW5vbmZpbGU7ICAgICAgICAg ICAgICAgICAvKiBBbm9ueW1vdXMgbG9naW4gaW5pdCBmaWxlICovCitleHRlcm4gY2hhciAqIGFu b25yb290OyAgICAgICAgICAgICAgICAgLyogQW5vbnltb3VzIGZpbGUtc3lzdGVtIHJvb3QgKi8K K2V4dGVybiBjaGFyICogdXNlcmZpbGU7ICAgICAgICAgICAgICAgICAvKiBGb3JiaWRkZW4gdXNl ciBmaWxlICovCitleHRlcm4gaW50IGlzZ3Vlc3Q7ICAgICAgICAgICAgICAgICAgICAgLyogRmxh ZyBmb3IgYW5vbnltb3VzIHVzZXIgKi8KKyNlbmRpZiAvKiBDS19MT0dJTiAqLworI2VuZGlmIC8q IE5PWEZFUiAqLworCisjaWZkZWYgRENNREJVRgoraW50ICp4cXVpZXQgPSBOVUxMOworaW50ICp4 dmFyZXYgPSBOVUxMOworI2Vsc2UKK2ludCB4cXVpZXRbQ01EU1RLTF07CitpbnQgeHZhcmV2W0NN RFNUS0xdOworI2VuZGlmIC8qIERDTURCVUYgKi8KKworY2hhciAqIHByc3RyaW5nW0NNRFNUS0xd OworCisjaWZuZGVmIE5PU1BMCisKK2V4dGVybiBsb25nIGNrX2FsYXJtOworZXh0ZXJuIGNoYXIg YWxybV9kYXRlW10sIGFscm1fdGltZVtdOworCisvKiBMb2NhbCBkZWNsYXJhdGlvbnMgKi8KKwor c3RhdGljIGludCBudWxjbWQgPSAwOyAgICAgICAgICAgICAgICAgIC8qIEZsYWcgZm9yIG5leHQg Y21kIHRvIGJlIGlnbm9yZWQgKi8KKworLyogRGVmaW5pdGlvbnMgZm9yIHByZWRlZmluZWQgbWFj cm9zICovCisKKy8qIEZpcnN0LCB0aGUgc2luZ2xlLWxpbmUgbWFjcm9zLCBpbnN0YWxsZWQgd2l0 aCBhZGRtYWMoKS4uLiAqLworCisvKiBJQk0tTElORU1PREUgbWFjcm8gKi8KK2NoYXIgKm1faWJt ID0gInNldCBwYXJpdHkgbWFyaywgc2V0IGR1cGwgaGFsZiwgc2V0IGhhbmRzaCB4b24sIHNldCBm bG93IG5vbmUiOworCisvKiBGQVRBTCBtYWNybyAqLworY2hhciAqbV9mYXQgPSAiaWYgZGVmIFxc JTEgZWNobyBcXCUxLCBpZiBub3QgPSBcXHYobG9jYWwpIDAgaGFuZ3VwLCBzdG9wIDEiOworCisj aWZkZWYgQ0tfU1BFRUQKKyNpZmRlZiBJUklYNjUKK2NoYXIgKm1fZmFzdCA9ICJzZXQgd2luIDMw LCBzZXQgcmVjIHBhY2sgNDAwMCwgc2V0IHByZWZpeCBjYXV0aW91cyI7CisjZWxzZQorI2lmZGVm IElSSVgKKy8qIEJlY2F1c2Ugb2YgYnVnIGluIHRlbG5ldCBzZXJ2ZXIgKi8KK2NoYXIgKm1fZmFz dCA9ICJzZXQgd2luZG93IDMwLCBzZXQgcmVjIHBhY2sgNDAwMCwgc2V0IHNlbmQgcGFjayA0MDAw LFwKKyBzZXQgcHJlZiBjYXV0aW91cyI7CisjZWxzZQorI2lmZGVmIHBkcDExCitjaGFyICptX2Zh c3QgPSAic2V0IHdpbiAzLCBzZXQgcmVjIHBhY2sgMTAyNCwgc2V0IHByZWZpeCBjYXV0aW91cyI7 CisjZWxzZQorI2lmZGVmIEJJR0JVRk9LCitjaGFyICptX2Zhc3QgPSAic2V0IHdpbiAzMCwgc2V0 IHJlYyBwYWNrIDQwMDAsIHNldCBwcmVmaXggY2F1dGlvdXMiOworI2Vsc2UKK2NoYXIgKm1fZmFz dCA9ICJzZXQgd2luIDQsIHNldCByZWMgcGFjayAyMjAwLCBzZXQgcHJlZml4IGNhdXRpb3VzIjsK KyNlbmRpZiAvKiBCSUdCVUZPSyAqLworI2VuZGlmIC8qIElSSVggKi8KKyNlbmRpZiAvKiBJUklY NjUgKi8KKyNlbmRpZiAvKiBwZHAxMSAqLworI2lmZGVmIHBkcDExCitjaGFyICptX2NhdXRpb3Vz ID0gInNldCB3aW4gMiwgc2V0IHJlYyBwYWNrIDUxMiwgc2V0IHByZWZpeGluZyBjYXV0aW91cyI7 CisjZWxzZQorY2hhciAqbV9jYXV0aW91cyA9ICJzZXQgd2luIDQsIHNldCByZWMgcGFjayAxMDAw LCBzZXQgcHJlZml4aW5nIGNhdXRpb3VzIjsKKyNlbmRpZiAvKiBwZHAxMSAqLworY2hhciAqbV9y b2J1c3QgPSAic2V0IHdpbiAxLCBzZXQgcmVjIHBhY2sgOTAsIHNldCBwcmVmaXhpbmcgYWxsLCBc CitzZXQgcmVsaWFibGUgb2ZmLCBzZXQgY2xlYXJjaGFubmVsIG9mZiI7CisjZWxzZQorI2lmZGVm IEJJR0JVRk9LCisjaWZkZWYgSVJJWDY1CitjaGFyICptX2Zhc3QgPSAic2V0IHdpbiAzMCwgc2V0 IHJlYyBwYWNrIDQwMDAiOworI2Vsc2UKKyNpZmRlZiBJUklYCitjaGFyICptX2Zhc3QgPSAic2V0 IHdpbiAzMCwgc2V0IHJlYyBwYWNrIDQwMDAsIHNldCBzZW5kIHBhY2sgNDAwMCI7CisjZWxzZQor Y2hhciAqbV9mYXN0ID0gInNldCB3aW4gMzAsIHNldCByZWMgcGFjayA0MDAwIjsKKyNlbmRpZiAv KiBJUklYICovCisjZW5kaWYgLyogSVJJWDY1ICovCisjZWxzZSAvKiBOb3QgQklHQlVGT0sgKi8K K2NoYXIgKm1fZmFzdCA9ICJzZXQgd2luIDQsIHNldCByZWMgcGFjayAyMjAwIjsKKyNlbmRpZiAv KiBCSUdCVUZPSyAqLworY2hhciAqbV9jYXV0aW91cyA9ICJzZXQgd2luIDQsIHNldCByZWMgcGFj ayAxMDAwIjsKK2NoYXIgKm1fcm9idXN0ID0gInNldCB3aW4gMSwgc2V0IHJlYyBwYWNrIDkwLCBz ZXQgcmVsaWFibGUgb2ZmIjsKKyNlbmRpZiAvKiBDS19TUEVFRCAqLworCisjaWZkZWYgVk1TCitj aGFyICptX3B1cmdlID0gInJ1biBwdXJnZSBcXCUqIjsKKyNlbmRpZiAvKiBWTVMgKi8KKworI2lm ZGVmIE9TMgorY2hhciAqbV9tYW51YWwgPSAiYnJvd3NlIFxcdihleGVkaXIpZG9jcy9tYW51YWwv a2VybWl0OTUuaHRtIjsKKyNlbmRpZiAvKiBPUzIgKi8KKworLyogTm93IHRoZSBtdWx0aWxpbmUg bWFjcm9zLCBkZWZpbmVkIHdpdGggYWRkbW1hYygpLi4uICovCisKKy8qIEZPUiBtYWNybyBmb3Ig XCVpLXN0eWxlIGxvb3AgdmFyaWFibGVzIChzZWUgZG9mb3IoKS4uLikgKi8KKworY2hhciAqZm9y X2RlZltdID0geyAiX2Fzc2lnbiBfZm9yXFx2KGNtZGxldmVsKSB7IF9nZXRhcmdzLCIsCisiZGVm IFxcXFxcXCUxIFxcZmV2YWwoXFwlMiksOl8uLnRvcCxpZiBcXCU1IFxcXFxcXCUxIFxcJTMgZ290 byBfLi5ib3QsIiwKKyJcXCU2LDpfLi5pbmMsaW5jciBcXFxcXFwlMSBcXCU0LGdvdG8gXy4udG9w LDpfLi5ib3QsX3B1dGFyZ3N9LCIsCisiZGVmIGJyZWFrIGdvdG8gXy4uYm90LCBkZWYgY29udGlu dWUgZ290byBfLi5pbmMsIiwKKyJkbyBfZm9yXFx2KGNtZGxldmVsKSBcXCUxIFxcJTIgXFwlMyBc XCU0IHsgXFwlNSB9LF9hc3NpZ24gX2ZvclxcdihjbWRsZXZlbCkiLAorIiJ9OworCisvKiBUaGlz IGlzIHRoZSBGT1IgbWFjcm8gd2hlbiB0aGUgbG9vcCB2YXJpYWJsZSBpcyBpdHNlbGYgYSBtYWNy byAqLworCitjaGFyICpmb3pfZGVmW10gPSB7ICJfYXNzaWduIF9mb3JcXHYoY21kbGV2ZWwpIHsg X2dldGFyZ3MsIiwKKyJkZWYgXFwlMSBcXGZldmFsKFxcJTIpLDpfLi50b3AsaWYgXFwlNSBcXCUx IFxcJTMgZ290byBfLi5ib3QsIiwKKyJcXCU2LDpfLi5pbmMsaW5jciBcXCUxIFxcJTQsZ290byBf Li50b3AsOl8uLmJvdCxfcHV0YXJnc30sIiwKKyJkZWYgYnJlYWsgZ290byBfLi5ib3QsIGRlZiBj b250aW51ZSBnb3RvIF8uLmluYywiLAorImRvIF9mb3JcXHYoY21kbGV2ZWwpIFxcJTEgXFwlMiBc XCUzIFxcJTQgeyBcXCU1IH0sX2Fzc2lnbiBfZm9yXFx2KGNtZGxldmVsKSIsCisiIn07CisKKy8q IFdISUxFIG1hY3JvICovCitjaGFyICp3aGlsX2RlZltdID0geyAiX2Fzc2lnbiBfd2hpXFx2KGNt ZGxldmVsKSB7X2dldGFyZ3MsIiwKKyI6Xy4uaW5jLFxcJTEsXFwlMixnb3RvIF8uLmluYyw6Xy4u Ym90LF9wdXRhcmdzfSwiLAorIl9kZWYgYnJlYWsgZ290byBfLi5ib3QsIF9kZWYgY29udGludWUg Z290byBfLi5pbmMsIiwKKyJkbyBfd2hpXFx2KGNtZGxldmVsKSxfYXNzaWduIF93aGlcXHYoY21k bGV2ZWwpIiwKKyIifTsKKworLyogU1dJVENIIG1hY3JvICovCitjaGFyICpzd19kZWZbXSA9IHsg Il9hc3NpZ24gX3N3X1xcdihjbWRsZXZlbCkge19nZXRhcmdzLCIsCisiX2ZvcndhcmQge1xcJTF9 LFxcJTIsOmRlZmF1bHQsOl8uLmJvdCxfcHV0YXJnc30sX2RlZiBicmVhayBnb3RvIF8uLmJvdCwi LAorImRvIF9zd19cXHYoY21kbGV2ZWwpLF9hc3NpZ24gX3N3X1xcdihjbWRsZXZlbCkiLAorIiJ9 OworCisvKiBYSUYgbWFjcm8gKi8KK2NoYXIgKnhpZl9kZWZbXSA9IHsKKyJfYXNzaWduIF9pZlxc dihjbWRsZXZlbCkge19nZXRhcmdzLFxcJTEsX3B1dGFyZ3N9LCIsCisiZG8gX2lmXFx2KGNtZGxl dmVsKSxfYXNzaWduIF9pZlxcdihjbWRsZXZlbCkiLAorIiJ9OworCisvKgorICBWYXJpYWJsZXMg ZGVjbGFyZWQgaGVyZSBmb3IgdXNlIGJ5IG90aGVyIGNrdXVzKi5jIG1vZHVsZXMuCisgIFNwYWNl IGlzIGFsbG9jYXRlZCBoZXJlIHRvIHNhdmUgcm9vbSBpbiBja3V1c3IuYy4KKyovCisjaWZkZWYg RENNREJVRgorc3RydWN0IGNtZHB0ciAqY21kc3RrOworaW50CisgICppZmNtZCAgPSBOVUxMLAor ICAqY291bnQgID0gTlVMTCwKKyAgKmlmdGVzdCA9IE5VTEwsCisgICppbnRpbWUgPSBOVUxMLAor ICAqaW5wY2FzID0gTlVMTCwKKyAgKnRha2VyciA9IE5VTEwsCisgICptZXJyb3IgPSBOVUxMOwor I2Vsc2UKK3N0cnVjdCBjbWRwdHIgY21kc3RrW0NNRFNUS0xdOworaW50IGlmY21kW0NNRFNUS0xd LCBjb3VudFtDTURTVEtMXSwgaWZ0ZXN0W0NNRFNUS0xdLCBpbnRpbWVbQ01EU1RLTF0sCisgIGlu cGNhc1tDTURTVEtMXSwgdGFrZXJyW0NNRFNUS0xdLCBtZXJyb3JbQ01EU1RLTF07CisjZW5kaWYg LyogRENNREJVRiAqLworCisvKiBNYWNybyBzdGFjayAqLworCisjaWZkZWYgQ09NTUVOVAorY2hh ciAqdG9wbGluZSA9IE5VTEw7ICAgICAgICAgICAgICAgICAgIC8qIFByb2dyYW0gaW52b2NhdGlv biBhcmcgbGluZSAqLworY2hhciAqbV9saW5lW01BQ0xFVkVMXSA9IHsgTlVMTCwgTlVMTCB9OyAv KiBTdGFjayBvZiBtYWNybyBpbnZvY2F0aW9uIGxpbmVzICovCisjZW5kaWYgLyogQ09NTUVOVCAq LworCitjaGFyICoqbV94YXJnW01BQ0xFVkVMXTsgICAgICAgICAgICAgICAgLyogUG9pbnRlcnMg dG8gYXJnIHZlY3RvciBhcnJheXMgKi8KK2ludCBuX3hhcmdbTUFDTEVWRUxdOyAgICAgICAgICAg ICAgICAgICAvKiBTaXplcyBvZiBhcmcgdmVjdG9yIGFycmF5cyAqLworY2hhciAqbV9hcmdbTUFD TEVWRUxdW05BUkdTXTsgICAgICAgICAgIC8qIEFyZ3Mgb2YgZWFjaCBsZXZlbCAqLworaW50IG1h Y2FyZ2NbTUFDTEVWRUxdOyAgICAgICAgICAgICAgICAgIC8qIEFyZ2Mgb2YgZWFjaCBsZXZlbCAq LworY2hhciAqbWFjcFtNQUNMRVZFTF07ICAgICAgICAgICAgICAgICAgIC8qIEN1cnJlbnQgcG9z aXRpb24gaW4gZWFjaCBtYWNybyAqLworY2hhciAqbWFjeFtNQUNMRVZFTF07ICAgICAgICAgICAg ICAgICAgIC8qIEJlZ2lubmluZyBvZiBlYWNoIG1hY3JvIGRlZiAqLworY2hhciAqbXJ2YWxbTUFD TEVWRUxdOyAgICAgICAgICAgICAgICAgIC8qIFJFVFVSTiB2YWx1ZSBhdCBlYWNoIGxldmVsICov CitpbnQgbGFzdGNtZFtNQUNMRVZFTF07ICAgICAgICAgICAgICAgICAgLyogTGFzdCBjb21tYW5k IGF0IGVhY2ggbGV2ZWwgKi8KK2ludCB0b3BhcmdjID0gMDsgICAgICAgICAgICAgICAgICAgICAg ICAvKiBBcmdjIGF0IHRvcCBsZXZlbCAqLworY2hhciAqKnRvcHhhcmcgPSBOVUxMOyAgICAgICAg ICAgICAgICAgIC8qIEFyZ3YgYXQgdG9wIGxldmVsICovCitjaGFyICp0b3BhcmdbTUFYQVJHTElT VCsyXTsKKworLyogR2xvYmFsIFZhcmlhYmxlcyAqLworCitjaGFyICpnX3ZhcltHVkFSUysxXTsg ICAgICAgICAgICAgICAgICAgLyogR2xvYmFsIFwlYS4ueiBwb2ludGVycyAqLworZXh0ZXJuIGNo YXIgdmFybmFtW107ICAgICAgICAgICAgICAgICAgIC8qIFwleCB2YXJpYWJsZSBuYW1lIGJ1ZmZl ciAqLworCisvKiBBcnJheXMgLS0gRGltZW5zaW9uIG11c3QgYmUgJ3onIC0gQVJSQVlCQVNFICsg MSAqLworLyogTm90ZTogYV9saW5rW3hdIDwgMCBtZWFucyBubyBsaW5rOyA+PSAwIGlzIGEgbGlu ayAqLworCitjaGFyICoqYV9wdHJbMzJdOyAgICAgICAgICAgICAgICAgICAgICAgLyogQXJyYXkg cG9pbnRlcnMsIGZvciBhcnJheXMgYS16ICovCitpbnQgYV9kaW1bMzJdOyAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogRGltZW5zaW9ucyBmb3IgZWFjaCBhcnJheSAqLworaW50IGFfbGlua1sz Ml07ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExpbmsgKGluZGV4IG9mIGxpbmtlZC10by1h cnJheSkgKi8KKworY2hhciAqKmFhX3B0cltDTURTVEtMXVszMl07ICAgICAgICAgICAgIC8qIEFy cmF5IHN0YWNrIGZvciBhdXRvbWF0aWMgYXJyYXlzICovCitpbnQgYWFfZGltW0NNRFNUS0xdWzMy XTsgICAgICAgICAgICAgICAgLyogRGltZW5zaW9ucyBmb3IgZWFjaCBhcnJheSAqLworCisvKiBJ TlBVVCBjb21tYW5kIGJ1ZmZlcnMgYW5kIHZhcmlhYmxlcyAqLworCitjaGFyICogaW5wYnVmID0g TlVMTDsgICAgICAgICAgICAgICAgICAgLyogQnVmZmVyIGZvciBJTlBVVCBhbmQgUkVJTlBVVCAq LworZXh0ZXJuIGNoYXIgKiBpbnBicDsgICAgICAgICAgICAgICAgICAgIC8qIEdsb2JhbC9zdGF0 aWMgcG9pbnRlciB0byBpdCAgKi8KK2NoYXIgaW5jaGFyWzJdID0geyBOVUwsIE5VTCB9OyAgICAg ICAgICAvKiBMYXN0IGNoYXJhY3RlciB0aGF0IHdhcyBJTlBVVCAqLworaW50ICBpbmNvdW50ID0g MDsgICAgICAgICAgICAgICAgICAgICAgIC8qIElOUFVUIGNoYXJhY3RlciBjb3VudCAqLworZXh0 ZXJuIGludCBpbnN0YXR1czsgICAgICAgICAgICAgICAgICAgIC8qIElOUFVUIHN0YXR1cyAqLwor c3RhdGljIGNoYXIgKiBpX3RleHRbXSA9IHsgICAgICAgICAgICAgIC8qIElOUFVUIHN0YXR1cyB0 ZXh0ICovCisgICAgInN1Y2Nlc3MiLCAidGltZW91dCIsICJpbnRlcnJ1cHRlZCIsICJpbnRlcm5h bCBlcnJvciIsICJpL28gZXJyb3IiCit9OworCitjaGFyIGxibGJ1ZltMQkxTSVpdOyAgICAgICAg ICAgICAgICAgICAgLyogQnVmZmVyIGZvciBsYWJlbHMgKi8KKworI2Vsc2UgIC8qIE5PU1BMICov CisKK2ludCB0YWtlcnJbTUFYVEFLRV07CisjZW5kaWYgLyogTk9TUEwgKi8KKworc3RhdGljIGNo YXIgKnByZXZkaXIgPSBOVUxMOworCitpbnQgcGFjaW5nID0gMDsgICAgICAgICAgICAgICAgICAg ICAgICAgLyogT1VUUFVUIHBhY2luZyAqLworCitjaGFyICp0cDsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogVGVtcG9yYXJ5IGJ1ZmZlciBwb2ludGVyICovCisKK2ludCB0aW1lbGlt aXQgPSAwLCBhc2t0aW1lciA9IDA7ICAgICAgICAvKiBUaW1lcnMgZm9yIHRpbWUtbGltaXRlZCBj b21tYW5kcyAqLworCisjaWZkZWYgQ0tfQVBDICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog QXBwbGljYXRpb24gUHJvZ3JhbSBDb21tYW5kIChBUEMpICovCitpbnQgYXBjYWN0aXZlID0gQVBD X0lOQUNUSVZFOworaW50IGFwY3N0YXR1cyA9IEFQQ19PRkY7ICAgICAgICAgICAgICAgIC8qIE9G RiBieSBkZWZhdWx0IGV2ZXJ5d2hlcmUgKi8KKyNpZmRlZiBEQ01EQlVGCitjaGFyICphcGNidWY7 CisjZWxzZQorY2hhciBhcGNidWZbQVBDQlVGTEVOXTsKKyNlbmRpZiAvKiBEQ01EQlVGICovCisj ZW5kaWYgLyogQ0tfQVBDICovCisKK2V4dGVybiBjaGFyIHBrdGZpbFtdLAorI2lmZGVmIERFQlVH CisgIGRlYmZpbFtdLAorI2VuZGlmIC8qIERFQlVHICovCisjaWZkZWYgVExPRworICB0cmFmaWxb XSwKKyNlbmRpZiAvKiBUTE9HICovCisgIHNlc2ZpbFtdOworCisjaWZuZGVmIE5PRlJJTExTCitl eHRlcm4gaW50IHJtYWlsZiwgcnByaW50ZjsgICAgICAgICAgICAgLyogUkVNT1RFIE1BSUwgJiBQ UklOVCBpdGVtcyAqLworZXh0ZXJuIGNoYXIgb3B0YnVmW107CisjZW5kaWYgLyogTk9GUklMTFMg Ki8KKworZXh0ZXJuIGludCBub2luaXQ7CQkJLyogRmxhdCB0byBza2lwIGluaXQgZmlsZSAqLwor CisjaWZuZGVmIE5PU1BMCitzdGF0aWMgc3RydWN0IGtleXRhYiBrY2R0YWJbXSA9IHsJLyogU3lt Ym9saWMgZGlyZWN0b3J5IG5hbWVzICovCisjaWZkZWYgTlQKKyAgICB7ICJhcHBkYXRhIiwgIFZO X0FQUERBVEEsICAgMCB9LAorICAgIHsgImNvbW1vbiIsICAgVk5fQ09NTU9OLCAgICAwIH0sCisg ICAgeyAiZGVza3RvcCIsICBWTl9ERVNLVE9QLCAgIDAgfSwKKyNlbmRpZiAvKiBOVCAqLworICAg IHsgImRvd25sb2FkIiwgVk5fRExESVIsICAgICAwIH0sCisjaWZkZWYgT1MyT1JVTklYCisgICAg eyAiZXhlZGlyIiwgICBWTl9FWEVESVIsICAgIDAgfSwKKyNlbmRpZiAvKiBPUzJPUlVOSVggKi8K KyAgICB7ICJob21lIiwgICAgIFZOX0hPTUUsICAgICAgMCB9LAorICAgIHsgImluaWRpciIsICAg Vk5fSU5JLCAgICAgICAwIH0sCisjaWZkZWYgVU5JWAorICAgIHsgImxvY2tkaXIiLCAgVk5fTENL RElSLCAgICAwIH0sCisjZW5kaWYgLyogVU5JWCAqLworI2lmZGVmIE5UCisgICAgeyAibXlfZG9j dW1lbnRzIixWTl9QRVJTT05BTCwgIDAgfSwKKyAgICB7ICJwZXJzb25hbCIsIFZOX1BFUlNPTkFM LCAgQ01fSU5WIH0sCisjZW5kaWYgLyogTlQgKi8KKyAgICB7ICJzdGFydHVwIiwgIFZOX1NUQVIs ICAgICAgMCB9LAorICAgIHsgInRleHRkaXIiLCAgVk5fVFhURElSLCAgICAwIH0sCisgICAgeyAi dG1wZGlyIiwgICBWTl9URU1QLCAgICAgIDAgfQorfTsKK3N0YXRpYyBpbnQgbmtjZHRhYiA9IChz aXplb2Yoa2NkdGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7CisjZW5kaWYgLyogTk9TUEwg Ki8KKworI2lmbmRlZiBOT1NQTAorX1BST1RPVFlQKCBWT0lEIGZyZWVsb2NhbCwgKGludCkgKTsK K19QUk9UT1RZUCggc3RhdGljIENLX09GRl9UIGV4cG9uLCAoQ0tfT0ZGX1QsIENLX09GRl9UKSAp OworX1BST1RPVFlQKCBzdGF0aWMgQ0tfT0ZGX1QgZ2NkLCAoQ0tfT0ZGX1QsIENLX09GRl9UKSAp OworX1BST1RPVFlQKCBzdGF0aWMgQ0tfT0ZGX1QgZmFjdCwgKENLX09GRl9UKSApOworCitpbnQg ICAgICAgICAgICAgICAgICAgICAvKiBJbml0aWFsaXplIG1hY3JvIGRhdGEgc3RydWN0dXJlcy4g Ki8KK21hY2luaSgpIHsgICAgICAgICAgICAgIC8qIEFsbG9jYXRlIG1hY3RhYiBhbmQgcHJlc2V0 IHRoZSBmaXJzdCBlbGVtZW50LiAqLworICAgIGludCBpOworICAgIGlmICghKG1hY3RhYiA9IChz dHJ1Y3QgbXRhYiAqKSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBtdGFiKSAqIE1BQ19NQVgpKSkKKyAg ICAgIHJldHVybigtMSk7CisgICAgbWFjdGFiWzBdLmt3ZCA9IE5VTEw7CisgICAgbWFjdGFiWzBd Lm12YWwgPSBOVUxMOworICAgIG1hY3RhYlswXS5mbGdzID0gMDsKKyAgICBmb3IgKGkgPSAwOyBp IDwgTUFDTEVWRUw7IGkrKykKKyAgICAgIGxvY2FsaGVhZFtpXSA9IE5VTEw7CisgICAgcmV0dXJu KDApOworfQorI2VuZGlmIC8qIE5PU1BMICovCisKKy8qICBDIE0gRCBTIFIgQyAgLS0gIFJldHVy bnMgY3VycmVudCBjb21tYW5kIHNvdXJjZSAgKi8KKworLyogIDAgPSB0b3AgbGV2ZWwsIDEgPSBm aWxlLCAyID0gbWFjcm8sIC0xID0gZXJyb3IgKHNob3VsZG4ndCBoYXBwZW4pICovCisKKy8qCisg IEFzIG9mIDE5IEF1ZyAyMDAwIHRoaXMgcm91dGluZSBpcyBvYnNvbGV0ZS4gIFRoZSBzY2FsYXIg Z2xvYmFsIHZhcmlhYmxlCisgIHhjbWRzcmMgY2FuIGJlIGNoZWNrZWQgaW5zdGVhZCB0byBzYXZl IHRoZSBvdmVyaGVhZCBvZiBhIGZ1bmN0aW9uIGNhbGwuCisqLworaW50CitjbWRzcmMoKSB7Cisj aWZkZWYgQ09NTUVOVAorICAgIHJldHVybih4Y21kc3JjKTsKKyNlbHNlCisjaWZuZGVmIE5PU1BM CisgICAgaWYgKGNtZGx2bCA9PSAwKQorICAgICAgcmV0dXJuKDApOworICAgIGVsc2UgaWYgKGNt ZHN0a1tjbWRsdmxdLnNyYyA9PSBDTURfTUQpCisgICAgICByZXR1cm4oMik7CisgICAgZWxzZSBp ZiAoY21kc3RrW2NtZGx2bF0uc3JjID09IENNRF9URikKKyAgICAgIHJldHVybigxKTsKKyAgICBl bHNlCisgICAgICByZXR1cm4oLTEpOworI2Vsc2UKKyAgICBpZiAodGxldmVsIDwgMCkKKyAgICAg IHJldHVybigwKTsKKyAgICBlbHNlCisgICAgICByZXR1cm4oMSk7CisjZW5kaWYgLyogTk9TUEwg Ki8KKyNlbmRpZiAvKiBDT01NRU5UICovCit9CisKKy8qICBDIE0gRCBJIE4gSSAgLS0gIEluaXRp YWxpemUgdGhlIGludGVyYWN0aXZlIGNvbW1hbmQgcGFyc2VyICAqLworCitzdGF0aWMgaW50IGNt ZGluaXRlZCA9IDA7ICAgICAgICAgICAgICAgLyogQ29tbWFuZCBwYXJzZXIgaW5pdGlhbGl6ZWQg Ki8KK2V4dGVybiBpbnQgY21kaW50OyAgICAgICAgICAgICAgICAgICAgICAvKiBJbnRlcnJ1cHRz IGFyZSBhbGxvd2VkICovCisjaWZkZWYgQ0tfQVVUT0RMCitpbnQgY21kYWRsID0gMTsgICAgICAg ICAgICAgICAgICAgICAgICAgLyogQXV0b2Rvd25sb2FkICovCisjZWxzZQoraW50IGNtZGFkbCA9 IDA7CisjZW5kaWYgLyogQ0tfQVVUT0RMICovCisKK2NoYXIgKiBrX2luZm9fZGlyID0gTlVMTDsg ICAgICAgICAgICAgICAvKiBXaGVyZSB0byBmaW5kIHRleHQgZmlsZXMgKi8KKyNpZmRlZiBVTklY CitzdGF0aWMgY2hhciAqIHR4dGRpcltdID0geworICAgICIvdXNyL2xvY2FsL2RvYy8iLCAgICAg ICAgICAgICAgICAgIC8qIExpbnV4LCBTdW5PUywgLi4uICovCisgICAgIi91c3Ivc2hhcmUvbGli LyIsICAgICAgICAgICAgICAgICAgLyogSFAtVVggMTAueHguLi4gKi8KKyAgICAiL3Vzci9zaGFy ZS9kb2MvIiwgICAgICAgICAgICAgICAgICAvKiBPdGhlciBwb3NzaWJpbGl0aWVzLi4uICovCisg ICAgIi91c3IvbG9jYWwvbGliLyIsICAgICAgICAgICAgICAgICAgLyogTk9URTogRWFjaCBvZiB0 aGVzZSBpcyB0cmllZCAqLworICAgICIvdXNyL2xvY2FsL3NoYXJlLyIsICAgICAgICAgICAgICAg IC8qIGFzIGlzLCBhbmQgYWxzbyB3aXRoIGEga2VybWl0ICovCisgICAgIi91c3IvbG9jYWwvc2hh cmUvZG9jLyIsICAgICAgICAgICAgLyogc3ViZGlyZWN0b3J5LiAqLworICAgICIvdXNyL2xvY2Fs L3NoYXJlL2xpYi8iLAorICAgICIvb3B0L2tlcm1pdC8iLCAgICAgICAgICAgICAgICAgICAgIC8q IFNvbGFyaXMgKi8KKyAgICAiL29wdC9rZXJtaXQvZG9jLyIsCisgICAgIi9vcHQvIiwKKyAgICAi L3Vzci9kb2MvIiwKKyAgICAiL2RvYy8iLAorICAgICIiCit9OworI2VuZGlmIC8qIFVOSVggKi8K KworLyoKKyAgbG9va3VwKCkgY2FjaGUgdG8gc3BlZWQgdXAgc2NyaXB0IGV4ZWN1dGlvbi4KKwor ICBUaGlzIGlzIGEgc3RhdGljIGNhY2hlLiAgSXRlbXMgYXJlIHN0b3JlZCBpbiBkZWNyZWFzaW5n IGZyZXF1ZW5jeSBvZgorICByZWZlcmVuY2UgYmFzZWQgb24gc3RhdGlzdGljcyBmcm9tIGEgcmFu Z2Ugb2Ygc2NyaXB0cy4gIFRoaXMgZ2l2ZXMKKyAgYmV0dGVyIHBlcmZvcm1hbmNlIHRoYW4gYSBk eW5hbWljIGNhY2hlLCB3aGljaCB3b3VsZCByZXF1aXJlIGEgbG90IG1vcmUKKyAgY29kZSBhbmQg YWxzbyB3b3VsZCByZXF1aXJlIHN5c3RlbS1kZXBlbmRlbnQgZWxlbWVudHMgaW5jbHVkaW5nIHN5 c3RlbQorICBjYWxscyAoZS5nLiB0byBnZXQgc3Vic2Vjb25kIHRpbWVzIGZvciBlbnRyeSBhZ2lu ZykuCisqLworI2lmZGVmIFVTRV9MVUNBQ0hFICAgICAgICAgICAgICAgICAgICAgIC8qIFNldCBp biBja3V1c3IuaCAqLworI2RlZmluZSBMVUNBQ0hFIDMyICAgICAgICAgICAgICAgICAgICAgIC8q IENoYW5nZSB0aGlzIHRvIHJlZHVjZSBjYWNoZSBzaXplICovCitpbnQgbHVzaXplID0gMDsKK2No YXIgKiBsdWNtZFtMVUNBQ0hFXTsKK2ludCBsdXZhbFtMVUNBQ0hFXTsKK2ludCBsdWlkeFtMVUNB Q0hFXTsKK3N0cnVjdCBrZXl0YWIgKiBsdXRhYltMVUNBQ0hFXTsKKyNlbmRpZiAvKiBVU0VfTFVD QUNIRSAqLworCitzdGF0aWMgVk9JRAorbHVpbml0KCkgeyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIEluaXRpYWxpemUgbG9va3VwKCkgY2FjaGUgKi8KKyAgICBpbnQgeCwgeTsKKwor I2lmZGVmIFVTRV9MVUNBQ0hFCisgICAgeCA9IGxvb2t1cChjbWR0YWIsImlmIixuY21kLCZ5KTsK KyAgICBsdWNtZFtsdXNpemVdID0gImlmIjsKKyAgICBsdXZhbFtsdXNpemVdID0geDsKKyAgICBs dWlkeFtsdXNpemVdID0geTsKKyAgICBsdXRhYltsdXNpemVdID0gY21kdGFiOworICAgIGlmICgr K2x1c2l6ZSA+IExVQ0FDSEUpIHJldHVybjsKKworICAgIHggPSBsb29rdXAoaWZ0YWIsIm5vdCIs bmlmLCZ5KTsKKyAgICBsdWNtZFtsdXNpemVdID0gIm5vdCI7CisgICAgbHV2YWxbbHVzaXplXSA9 IHg7CisgICAgbHVpZHhbbHVzaXplXSA9IHk7CisgICAgbHV0YWJbbHVzaXplXSA9IGlmdGFiOwor ICAgIGlmICgrK2x1c2l6ZSA+IExVQ0FDSEUpIHJldHVybjsKKworICAgIHggPSBsb29rdXAodmFy dGFiLCJjbWRsZXZlbCIsbnZhcnMsJnkpOworICAgIGx1Y21kW2x1c2l6ZV0gPSAiY21kbGV2ZWwi OworICAgIGx1dmFsW2x1c2l6ZV0gPSB4OworICAgIGx1aWR4W2x1c2l6ZV0gPSB5OworICAgIGx1 dGFiW2x1c2l6ZV0gPSB2YXJ0YWI7CisgICAgaWYgKCsrbHVzaXplID4gTFVDQUNIRSkgcmV0dXJu OworCisgICAgeCA9IGxvb2t1cChjbWR0YWIsImdvdG8iLG5jbWQsJnkpOworICAgIGx1Y21kW2x1 c2l6ZV0gPSAiZ290byI7CisgICAgbHV2YWxbbHVzaXplXSA9IHg7CisgICAgbHVpZHhbbHVzaXpl XSA9IHk7CisgICAgbHV0YWJbbHVzaXplXSA9IGNtZHRhYjsKKyAgICBpZiAoKytsdXNpemUgPiBM VUNBQ0hFKSByZXR1cm47CisKKyAgICB4ID0gbG9va3VwKGlmdGFiLCI+IixuaWYsJnkpOworICAg IGx1Y21kW2x1c2l6ZV0gPSAiPiI7CisgICAgbHV2YWxbbHVzaXplXSA9IHg7CisgICAgbHVpZHhb bHVzaXplXSA9IHk7CisgICAgbHV0YWJbbHVzaXplXSA9IGlmdGFiOworICAgIGlmICgrK2x1c2l6 ZSA+IExVQ0FDSEUpIHJldHVybjsKKworICAgIHggPSBsb29rdXAoY21kdGFiLCJpbmNyIixuY21k LCZ5KTsKKyAgICBsdWNtZFtsdXNpemVdID0gImluY3IiOworICAgIGx1dmFsW2x1c2l6ZV0gPSB4 OworICAgIGx1aWR4W2x1c2l6ZV0gPSB5OworICAgIGx1dGFiW2x1c2l6ZV0gPSBjbWR0YWI7Cisg ICAgaWYgKCsrbHVzaXplID4gTFVDQUNIRSkgcmV0dXJuOworCisgICAgeCA9IGxvb2t1cChjbWR0 YWIsImRlZiIsbmNtZCwmeSk7CisgICAgbHVjbWRbbHVzaXplXSA9ICJkZWYiOworICAgIGx1dmFs W2x1c2l6ZV0gPSB4OworICAgIGx1aWR4W2x1c2l6ZV0gPSB5OworICAgIGx1dGFiW2x1c2l6ZV0g PSBjbWR0YWI7CisgICAgaWYgKCsrbHVzaXplID4gTFVDQUNIRSkgcmV0dXJuOworCisgICAgeCA9 IGxvb2t1cChjbWR0YWIsIl9hc3NpZ24iLG5jbWQsJnkpOworICAgIGx1Y21kW2x1c2l6ZV0gPSAi X2Fzc2lnbiI7CisgICAgbHV2YWxbbHVzaXplXSA9IHg7CisgICAgbHVpZHhbbHVzaXplXSA9IHk7 CisgICAgbHV0YWJbbHVzaXplXSA9IGNtZHRhYjsKKyAgICBpZiAoKytsdXNpemUgPiBMVUNBQ0hF KSByZXR1cm47CisKKyAgICB4ID0gbG9va3VwKGNtZHRhYiwiZWNobyIsbmNtZCwmeSk7CisgICAg bHVjbWRbbHVzaXplXSA9ICJlY2hvIjsKKyAgICBsdXZhbFtsdXNpemVdID0geDsKKyAgICBsdWlk eFtsdXNpemVdID0geTsKKyAgICBsdXRhYltsdXNpemVdID0gY21kdGFiOworICAgIGlmICgrK2x1 c2l6ZSA+IExVQ0FDSEUpIHJldHVybjsKKworICAgIHggPSBsb29rdXAoZm5jdGFiLCJldmFsIixu ZnVuY3MsJnkpOworICAgIGx1Y21kW2x1c2l6ZV0gPSAiZXZhbCI7CisgICAgbHV2YWxbbHVzaXpl XSA9IHg7CisgICAgbHVpZHhbbHVzaXplXSA9IHk7CisgICAgbHV0YWJbbHVzaXplXSA9IGZuY3Rh YjsKKyAgICBpZiAoKytsdXNpemUgPiBMVUNBQ0hFKSByZXR1cm47CisKKyAgICB4ID0gbG9va3Vw KGZuY3RhYiwibGl0IixuZnVuY3MsJnkpOworICAgIGx1Y21kW2x1c2l6ZV0gPSAibGl0IjsKKyAg ICBsdXZhbFtsdXNpemVdID0geDsKKyAgICBsdWlkeFtsdXNpemVdID0geTsKKyAgICBsdXRhYlts dXNpemVdID0gZm5jdGFiOworICAgIGlmICgrK2x1c2l6ZSA+IExVQ0FDSEUpIHJldHVybjsKKwor ICAgIHggPSBsb29rdXAoY21kdGFiLCJkbyIsbmNtZCwmeSk7CisgICAgbHVjbWRbbHVzaXplXSA9 ICJkbyI7CisgICAgbHV2YWxbbHVzaXplXSA9IHg7CisgICAgbHVpZHhbbHVzaXplXSA9IHk7Cisg ICAgbHV0YWJbbHVzaXplXSA9IGNtZHRhYjsKKyAgICBpZiAoKytsdXNpemUgPiBMVUNBQ0hFKSBy ZXR1cm47CisKKyAgICB4ID0gbG9va3VwKGNtZHRhYiwiX2dldGFyZ3MiLG5jbWQsJnkpOworICAg IGx1Y21kW2x1c2l6ZV0gPSAiX2dldGFyZ3MiOworICAgIGx1dmFsW2x1c2l6ZV0gPSB4OworICAg IGx1aWR4W2x1c2l6ZV0gPSB5OworICAgIGx1dGFiW2x1c2l6ZV0gPSBjbWR0YWI7CisgICAgaWYg KCsrbHVzaXplID4gTFVDQUNIRSkgcmV0dXJuOworCisgICAgeCA9IGxvb2t1cChpZnRhYiwiPCIs bmlmLCZ5KTsKKyAgICBsdWNtZFtsdXNpemVdID0gIjwiOworICAgIGx1dmFsW2x1c2l6ZV0gPSB4 OworICAgIGx1aWR4W2x1c2l6ZV0gPSB5OworICAgIGx1dGFiW2x1c2l6ZV0gPSBpZnRhYjsKKyAg ICBpZiAoKytsdXNpemUgPiBMVUNBQ0hFKSByZXR1cm47CisKKyAgICB4ID0gbG9va3VwKGNtZHRh YiwiX3B1dGFyZ3MiLG5jbWQsJnkpOworICAgIGx1Y21kW2x1c2l6ZV0gPSAiX3B1dGFyZ3MiOwor ICAgIGx1dmFsW2x1c2l6ZV0gPSB4OworICAgIGx1aWR4W2x1c2l6ZV0gPSB5OworICAgIGx1dGFi W2x1c2l6ZV0gPSBjbWR0YWI7CisgICAgaWYgKCsrbHVzaXplID4gTFVDQUNIRSkgcmV0dXJuOwor CisgICAgeCA9IGxvb2t1cChjbWR0YWIsImFzZyIsbmNtZCwmeSk7CisgICAgbHVjbWRbbHVzaXpl XSA9ICJhc2ciOworICAgIGx1dmFsW2x1c2l6ZV0gPSB4OworICAgIGx1aWR4W2x1c2l6ZV0gPSB5 OworICAgIGx1dGFiW2x1c2l6ZV0gPSBjbWR0YWI7CisgICAgaWYgKCsrbHVzaXplID4gTFVDQUNI RSkgcmV0dXJuOworCisgICAgeCA9IGxvb2t1cChjbWR0YWIsImVsc2UiLG5jbWQsJnkpOworICAg IGx1Y21kW2x1c2l6ZV0gPSAiZWxzZSI7CisgICAgbHV2YWxbbHVzaXplXSA9IHg7CisgICAgbHVp ZHhbbHVzaXplXSA9IHk7CisgICAgbHV0YWJbbHVzaXplXSA9IGNtZHRhYjsKKyNlbmRpZiAvKiBV U0VfTFVDQUNIRSAqLworfQorCitWT0lECitjbWRpbmkoKSB7CisgICAgaW50IGkgPSAwLCB4ID0g MCwgeSA9IDAsIHogPSAwLCBza2lwID0gMDsKKyAgICBjaGFyICogcDsKKyNpZmRlZiBUVFNQRExJ U1QKKyAgICBsb25nICogc3MgPSBOVUxMOworICAgIGV4dGVybiBpbnQgbnNwZDsKKyAgICBleHRl cm4gc3RydWN0IGtleXRhYiAqIHNwZHRhYjsKKyNlbmRpZiAvKiBUVFNQRExJU1QgKi8KKworI2lm bmRlZiBOT1NQTAorLyoKKyAgT24gc3RhY2sgdG8gYWxsb3cgcmVjdXJzaW9uIQorKi8KKyAgICBj aGFyIHZuYW1idWZbVk5BTUxdOyAgICAgICAgICAgICAgICAvKiBCdWZmZXIgZm9yIHZhcmlhYmxl IG5hbWVzICovCisjZW5kaWYgLyogTk9TUEwgKi8KKworICAgIGlmIChjbWRpbml0ZWQpICAgICAg ICAgICAgICAgICAgICAgIC8qIEFscmVhZHkgaW5pdGlhbGl6ZWQgKi8KKyAgICAgIHJldHVybjsg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEb24ndCBkbyBpdCBhZ2FpbiAqLworCisgICAg Zm9yIChpID0gMDsgaSA8IENNRFNUS0w7IGkrKykgICAgICAgLyogUHJvbXB0IHN0cmluZ3MgZm9y IGVhY2ggKi8KKyAgICAgIHByc3RyaW5nW2ldID0gTlVMTDsgICAgICAgICAgICAgICAvKiBjb21t YW5kIGxldmVsICovCisKKyNpZm5kZWYgTk9DU0VUUworICAgIHAgPSBnZXRlbnYoIktfQ0hBUlNF VCIpOyAgICAgICAgICAgIC8qIFNldCBkZWZhdWx0IGZpbGUgY2hhcmFjdGVyIHNldCAqLworICAg IGlmIChwKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZyb20gZW52aXJvbm1lbnQg Ki8KKyAgICAgICAgeCA9IGxvb2t1cChmY3N0YWIscCxuZmlsYywmeSk7CisgICAgICAgIGlmICh4 ID4gLTEpCisgICAgICAgICAgZmNoYXJzZXQgPSB4OworICAgIH0KKyNlbmRpZiAvKiBOT0NTRVRT ICovCisKKyAgICBwID0gZ2V0ZW52KCJLX0lORk9fRElSRUNUT1JZIik7ICAgICAvKiBGaW5kIEtl cm1pdCBpbmZvIGRpcmVjdG9yeSAqLworICAgIGlmIChwICYmICpwICYmIHN0cmxlbihwKSA8PSBD S01BWFBBVEgpCisgICAgICBtYWtlc3RyKCZrX2luZm9fZGlyLHApOworICAgIGlmICgha19pbmZv X2RpcikgeworICAgICAgICBwID0gZ2V0ZW52KCJLX0lORk9fRElSIik7CisgICAgICAgIGlmIChw ICYmICpwICYmIHN0cmxlbihwKSA8PSBDS01BWFBBVEgpCisgICAgICAgICAgbWFrZXN0cigma19p bmZvX2RpcixwKTsKKyAgICB9CisjaWZkZWYgVU5JWAorICAgIGlmIChrX2luZm9fZGlyKSB7ICAg ICAgICAgICAgICAgICAgIC8qIExvb2sgZm9yIEtlcm1pdCBkb2NzIGRpcmVjdG9yeSAqLworICAg ICAgICBpZiAoemNoa2koa19pbmZvX2RpcikgPT0gLTIpIHsKKyAgICAgICAgICAgIGNoYXIgeGJ1 ZltDS01BWFBBVEgrMzJdLCAqcyA9ICIiOworICAgICAgICAgICAgaWYgKGNrcmNoYXIoa19pbmZv X2RpcikgIT0gJy8nKQorICAgICAgICAgICAgICBzID0gIi8iOworICAgICAgICAgICAgY2ttYWtt c2coeGJ1ZixDS01BWFBBVEgrMzIsa19pbmZvX2RpcixzLCJja3Vid3IudHh0IixOVUxMKTsKKyAg ICAgICAgICAgIGlmICh6Y2hraSh4YnVmKSA8IDApCisgICAgICAgICAgICAgIG1ha2VzdHIoJmtf aW5mb19kaXIsTlVMTCk7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKCFrX2luZm9fZGlyKSB7 CisgICAgICAgIGNoYXIgeGJ1ZltDS01BWFBBVEgrMzJdOworICAgICAgICBpbnQgaTsKKyAgICAg ICAgZm9yIChpID0gMDsgKih0eHRkaXJbaV0pOyBpKyspIHsKKyAgICAgICAgICAgIGNrbWFrbXNn KHhidWYsQ0tNQVhQQVRIKzMyLHR4dGRpcltpXSwiY2t1YndyLnR4dCIsTlVMTCxOVUxMKTsKKyAg ICAgICAgICAgIGlmICh6Y2hraSh4YnVmKSA+IDApIHsKKyAgICAgICAgICAgICAgICBtYWtlc3Ry KCZrX2luZm9fZGlyLHR4dGRpcltpXSk7CisgICAgICAgICAgICAgICAgZGVidWcoRjExMCwia19p bmZvX2RpciAxIixrX2luZm9fZGlyLDApOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg ICAgICAgfQorICAgICAgICAgICAgY2ttYWttc2coeGJ1ZixDS01BWFBBVEgrMzIsCisgICAgICAg ICAgICAgICAgICAgICB0eHRkaXJbaV0sImtlcm1pdC8iLCJja3Vid3IudHh0IixOVUxMKTsKKyAg ICAgICAgICAgIGlmICh6Y2hraSh4YnVmKSA+IDApIHsKKyAgICAgICAgICAgICAgICBja21ha21z Zyh4YnVmLENLTUFYUEFUSCszMix0eHRkaXJbaV0sImtlcm1pdC8iLE5VTEwsTlVMTCk7CisgICAg ICAgICAgICAgICAgbWFrZXN0cigma19pbmZvX2Rpcix4YnVmKTsKKyAgICAgICAgICAgICAgICBk ZWJ1ZyhGMTEwLCJrX2luZm9fZGlyIDIiLGtfaW5mb19kaXIsMCk7CisgICAgICAgICAgICAgICAg YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBja21ha21zZyh4YnVmLENLTUFYUEFU SCszMiwKKyAgICAgICAgICAgICAgICAgICAgIHR4dGRpcltpXSwiY2tlcm1pdC8iLCJja3Vid3Iu dHh0IixOVUxMKTsKKyAgICAgICAgICAgIGlmICh6Y2hraSh4YnVmKSA+IDApIHsKKyAgICAgICAg ICAgICAgICBja21ha21zZyh4YnVmLENLTUFYUEFUSCszMix0eHRkaXJbaV0sImNrZXJtaXQvIixO VUxMLE5VTEwpOworICAgICAgICAgICAgICAgIG1ha2VzdHIoJmtfaW5mb19kaXIseGJ1Zik7Cisg ICAgICAgICAgICAgICAgZGVidWcoRjExMCwia19pbmZvX2RpciAzIixrX2luZm9fZGlyLDApOwor ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg IGlmIChrX2luZm9fZGlyKSB7ICAgICAgICAgICAgICAgLyogTWFrZSBzdXJlIGl0IGVuZHMgd2l0 aCAiLyIgKi8KKyAgICAgICAgICAgIGlmIChja3JjaGFyKGtfaW5mb19kaXIpICE9ICcvJykgewor ICAgICAgICAgICAgICAgIGNoYXIgeGJ1ZltDS01BWFBBVEgrMzJdOworICAgICAgICAgICAgICAg IGNrbWFrbXNnKHhidWYsQ0tNQVhQQVRIKzMyLGtfaW5mb19kaXIsIi8iLE5VTEwsTlVMTCk7Cisg ICAgICAgICAgICAgICAgbWFrZXN0cigma19pbmZvX2Rpcix4YnVmKTsKKyAgICAgICAgICAgIH0K KyAgICAgICAgfQorICAgIH0KKyNlbHNlCisjaWZkZWYgT1MyCisgICAgeworICAgICAgICBjaGFy IHhkaXJbQ0tNQVhQQVRIKzhdLCAqcyA9ICIiOworICAgICAgICBleHRlcm4gY2hhciBzdGFydHVw ZGlyW107CisgICAgICAgIHhkaXJbMF0gPSBOVUw7CisgICAgICAgIGlmIChja3JjaGFyKHN0YXJ0 dXBkaXIpICE9ICcvJykKKyAgICAgICAgICBzID0gIi8iOworICAgICAgICBpZiAoc3RybGVuKHMp ICsgc3RybGVuKHN0YXJ0dXBkaXIpICsgNSA8IENLTUFYUEFUSCArIDggKQorICAgICAgICAgIGNr bWFrbXNnKHhkaXIsQ0tNQVhQQVRIKzgscyxzdGFydHVwZGlyLCJET0MvIixOVUxMKTsKKyAgICAg ICAgbWFrZXN0cigma19pbmZvX2Rpcix4ZGlyKTsKKyAgICB9CisjZW5kaWYgLyogT1MyICovCisj ZW5kaWYgLyogVU5JWCAqLworCisjaWZkZWYgVFRTUERMSVNUCisgICAgaWYgKCFzcGR0YWIgJiYg KHNzID0gdHRzcGRsaXN0KCkpKSB7IC8qIEdldCBzcGVlZCBsaXN0IGlmIG5lY2Vzc2FyeSAqLwor ICAgICAgICBpbnQgaiwgaywgbSA9IDAsIG47ICAgICAgICAgICAgIC8qIENyZWF0ZSBzb3J0ZWQg a2V5d29yZCB0YWJsZSAqLworICAgICAgICBjaGFyIGJ1ZlsxNl07CisgICAgICAgIGNoYXIgKiBw OworICAgICAgICBpZiAoKHNwZHRhYiA9CisgICAgICAgICAgICAgKHN0cnVjdCBrZXl0YWIgKikg bWFsbG9jKHNpemVvZihzdHJ1Y3Qga2V5dGFiKSAqIHNzWzBdKSkpIHsKKyAgICAgICAgICAgIGZv ciAoaSA9IDE7IGkgPD0gc3NbMF07IGkrKykgeyAvKiBzc1swXSA9IG51bWJlciBvZiBlbGVtZW50 cyAqLworICAgICAgICAgICAgICAgIGlmIChzc1tpXSA8IDFMKSBicmVhazsgICAgIC8qIFNob3Vs ZG4ndCBoYXBwZW4gKi8KKyAgICAgICAgICAgICAgICBidWZbMF0gPSBOVUw7ICAgICAgICAgICAg ICAvKiBNYWtlIHN0cmluZyAqLworICAgICAgICAgICAgICAgIHNwcmludGYoYnVmLCIlbGQiLHNz W2ldKTsgIC8qIFNBRkUgKi8KKyAgICAgICAgICAgICAgICBpZiAoc3NbaV0gPT0gODg4MEwpCisg ICAgICAgICAgICAgICAgICBja3N0cm5jcHkoYnVmLCI3NS8xMjAwIixzaXplb2YoYnVmKSk7Cisg ICAgICAgICAgICAgICAgaWYgKHNzW2ldID09IDEzNEwpCisgICAgICAgICAgICAgICAgICBja3N0 cm5jYXQoYnVmLCIuNSIsMTYpOworICAgICAgICAgICAgICAgIG4gPSBzdHJsZW4oYnVmKTsKKyAg ICAgICAgICAgICAgICBpZiAoKG4gPiAwKSAmJiAocCA9IChjaGFyICopbWFsbG9jKG4rMSkpKSB7 CisgICAgICAgICAgICAgICAgICAgIGlmIChtID4gMCkgeyAgICAgICAgLyogSGF2ZSBhdCBsZWFz dCBvbmUgaW4gbGlzdCAqLworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgICAg IC8qIEZpbmQgc2xvdCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqIDwgbSAmJiBz dHJjbXAoYnVmLHNwZHRhYltqXS5rd2QpID4gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaisrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGogPCBtKSB7ICAgIC8qIE11 c3QgaW5zZXJ0ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChrID0gbS0xOyBr ID49IGo7IGstLSkgeyAvKiBNb3ZlIG90aGVycyBkb3duICovCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHNwZHRhYltrKzFdLmt3ZCA9IHNwZHRhYltrXS5rd2Q7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHNwZHRhYltrKzFdLmZsZ3MgPSBzcGR0YWJba10uZmxnczsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BkdGFiW2srMV0ua3d2YWwgPSBzcGR0 YWJba10ua3d2YWw7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9IGVsc2UgICAgICAgICAgICAgIC8q IEZpcnN0IG9uZSAqLworICAgICAgICAgICAgICAgICAgICAgIGogPSAwOworICAgICAgICAgICAg ICAgICAgICBja3N0cm5jcHkocCxidWYsbisxKTsgLyogQWRkIG5ldyBzcGVlZCAqLworICAgICAg ICAgICAgICAgICAgICBzcGR0YWJbal0ua3dkID0gcDsKKyAgICAgICAgICAgICAgICAgICAgc3Bk dGFiW2pdLmZsZ3MgPSAwOworICAgICAgICAgICAgICAgICAgICBzcGR0YWJbal0ua3d2YWwgPSAo aW50KSBzc1tpXSAvIDEwOworICAgICAgICAgICAgICAgICAgICBtKys7ICAgICAgICAgICAgICAg IC8qIENvdW50IHRoaXMgb25lICovCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor ICAgICAgICB9CisgICAgICAgIG5zcGQgPSBtOworICAgIH0KKyNlbmRpZiAvKiBUVFNQRExJU1Qg Ki8KKworI2lmbmRlZiBOT1NQTAorICAgIC8qIEFsbG9jYXRlIElOUFVUIGNvbW1hbmQgYnVmZmVy ICovCisgICAgaWYgKCFpbnBidWYpIHsKKyAgICAgICAgaWYgKCEoaW5wYnVmID0gKGNoYXIgKikg bWFsbG9jKElOUEJVRlNJWis4KSkpCisgICAgICAgICAgZmF0YWwoImNtZGluaTogbm8gbWVtb3J5 IGZvciBJTlBVVCBidWZmZXIiKTsKKyAgICB9CisgICAgZm9yICh4ID0gMDsgeCA8IElOUEJVRlNJ WjsgeCsrKSAgICAgLyogSW5pdGlhbGl6ZSBpdCAqLworICAgICAgaW5wYnVmW3hdID0gTlVMOwor ICAgIGlucGJwID0gaW5wYnVmOyAgICAgICAgICAgICAgICAgICAgIC8qIEluaXRpYWxpemUgcG9p bnRlciAqLworICAgIGluYnVmc2l6ZSA9IElOUEJVRlNJWjsgICAgICAgICAgICAgIC8qIGFuZCBz aXplLiAqLworI2VuZGlmIC8qIE5PU1BMICovCisKKyNpZmRlZiBEQ01EQlVGCisgICAgaWYgKGNt c2V0dXAoKSA8IDApIGZhdGFsKCJDYW4ndCBhbGxvY2F0ZSBjb21tYW5kIGJ1ZmZlcnMhIik7CisK KyNpZm5kZWYgTk9TUEwKKyAgICAvKiBBbGxvY2F0ZSBjb21tYW5kIHN0YWNrIGFsbG93aW5nIGNv bW1hbmQgcGFyc2VyIHRvIGNhbGwgaXRzZWxmICovCisKKyAgICBpZiAoIShjbWRzdGsgPSAoc3Ry dWN0IGNtZHB0ciAqKSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBjbWRwdHIpKkNNRFNUS0wpKSkKKyAg ICAgIGZhdGFsKCJjbWRpbmk6IG5vIG1lbW9yeSBmb3IgY21kc3RrIik7CisgICAgaWYgKCEoaWZj bWQgPSAoaW50ICopIG1hbGxvYyhzaXplb2YoaW50KSpDTURTVEtMKSkpCisgICAgICBmYXRhbCgi Y21kaW5pOiBubyBtZW1vcnkgZm9yIGlmY21kIik7CisgICAgaWYgKCEoY291bnQgPSAoaW50ICop IG1hbGxvYyhzaXplb2YoaW50KSpDTURTVEtMKSkpCisgICAgICBmYXRhbCgiY21kaW5pOiBubyBt ZW1vcnkgZm9yIGNvdW50Iik7CisgICAgaWYgKCEoaWZ0ZXN0ID0gKGludCAqKSBtYWxsb2Moc2l6 ZW9mKGludCkqQ01EU1RLTCkpKQorICAgICAgZmF0YWwoImNtZGluaTogbm8gbWVtb3J5IGZvciBp ZnRlc3QiKTsKKyAgICBpZiAoIShpbnRpbWUgPSAoaW50ICopIG1hbGxvYyhzaXplb2YoaW50KSpD TURTVEtMKSkpCisgICAgICBmYXRhbCgiY21kaW5pOiBubyBtZW1vcnkgZm9yIGludGltZSIpOwor ICAgIGlmICghKGlucGNhcyA9IChpbnQgKikgbWFsbG9jKHNpemVvZihpbnQpKkNNRFNUS0wpKSkK KyAgICAgIGZhdGFsKCJjbWRpbmk6IG5vIG1lbW9yeSBmb3IgaW5wY2FzIik7CisgICAgaWYgKCEo dGFrZXJyID0gKGludCAqKSBtYWxsb2Moc2l6ZW9mKGludCkqQ01EU1RLTCkpKQorICAgICAgZmF0 YWwoImNtZGluaTogbm8gbWVtb3J5IGZvciB0YWtlcnIiKTsKKyAgICBpZiAoIShtZXJyb3IgPSAo aW50ICopIG1hbGxvYyhzaXplb2YoaW50KSpDTURTVEtMKSkpCisgICAgICBmYXRhbCgiY21kaW5p OiBubyBtZW1vcnkgZm9yIG1lcnJvciIpOworICAgIGlmICghKHhxdWlldCA9IChpbnQgKikgbWFs bG9jKHNpemVvZihpbnQpKkNNRFNUS0wpKSkKKyAgICAgIGZhdGFsKCJjbWRpbmk6IG5vIG1lbW9y eSBmb3IgeHF1aWV0Iik7CisgICAgaWYgKCEoeHZhcmV2ID0gKGludCAqKSBtYWxsb2Moc2l6ZW9m KGludCkqQ01EU1RLTCkpKQorICAgICAgZmF0YWwoImNtZGluaTogbm8gbWVtb3J5IGZvciB4dmFy ZXYiKTsKKyAgICBpZiAoIWtlcm1yYykKKyAgICAgIGlmICghKGtlcm1yYyA9IChjaGFyICopIG1h bGxvYyhLRVJNUkNMKzEpKSkKKyAgICAgICAgZmF0YWwoImNtZGluaTogbm8gbWVtb3J5IGZvciBr ZXJtcmMiKTsKKyNpZmRlZiBDS19BUEMKKy8qIEFwcGxpY2F0aW9uIFByb2dyYW0gQ29tbWFuZCBi dWZmZXIgKi8KKyAgICBpZiAoIShhcGNidWYgPSBtYWxsb2MoQVBDQlVGTEVOICsgMSkpKQorICAg ICAgICBmYXRhbCgiY21kaW5pOiBubyBtZW1vcnkgZm9yIGFwY2J1ZiIpOworI2VuZGlmIC8qIENL X0FQQyAqLworI2VuZGlmIC8qIE5PU1BMICovCisKKy8qIGxpbmVbXSBhbmQgdG1wYnVmW10gYXJl IHRoZSB0d28gc3RyaW5nIGJ1ZmZlcnMgdXNlZCBieSB0aGUgY29tbWFuZCBwYXJzZXIgKi8KKwor ICAgIGlmICghKGxpbmUgPSBtYWxsb2MoTElOQlVGU0laICsgMSkpKQorICAgICAgICBmYXRhbCgi Y21kaW5pOiBubyBtZW1vcnkgZm9yIGxpbmUiKTsKKyAgICBpZiAoISh0bXBidWYgPSBtYWxsb2Mo TElOQlVGU0laICsgMSkpKQorICAgICAgICBmYXRhbCgiY21kaW5pOiBubyBtZW1vcnkgZm9yIHRt cGJ1ZiIpOworI2VuZGlmIC8qIERDTURCVUYgKi8KKworI2lmbmRlZiBOT1NQTAorI2lmZGVmIENL X01JTlBVVAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEluaXRp YWxpemUgTUlOUFVUIHBvaW50ZXJzICovCisgICAgICAgIGludCBpOworICAgICAgICBleHRlcm4g Y2hhciAqbXNbXTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IE1JTlBNQVg7IGkrKykKKyAgICAg ICAgICBtc1tpXSA9IE5VTEw7CisgICAgfQorI2VuZGlmIC8qIENLX01JTlBVVCAqLworCisgICAg aWYgKG1hY2luaSgpIDwgMCkgICAgICAgICAgICAgICAgICAgLyogQWxsb2NhdGUgbWFjcm8gYnVm ZmVycyAqLworICAgICAgZmF0YWwoIkNhbid0IGFsbG9jYXRlIG1hY3JvIGJ1ZmZlcnMhIik7CisK KyAgICBpZmNtZFswXSA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAvKiBDb21tYW5kLWxldmVs IHJlbGF0ZWQgdmFyaWFibGVzLiAqLworICAgIGlmdGVzdFswXSA9IDA7ICAgICAgICAgICAgICAg ICAgICAgIC8qIEluaXRpYWxpemUgdmFyaWFibGVzIGF0IHRvcCBsZXZlbCAqLworICAgIGNvdW50 WzBdID0gMDsgICAgICAgICAgICAgICAgICAgICAgIC8qIG9mIHN0YWNrLi4uICovCisgICAgaW50 aW1lWzBdID0gMDsKKyAgICBpbnBjYXNbMF0gPSAwOworICAgIHRha2VyclswXSA9IDA7CisgICAg bWVycm9yWzBdID0gMDsKKyAgICB4cXVpZXRbMF0gPSBxdWlldDsKKyAgICB4dmFyZXZbMF0gPSB2 YXJldmFsOworI2VuZGlmIC8qIE5PU1BMICovCisKKyNpZm5kZWYgTk9TUEwKKyAgICBjbWRsdmwg PSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJbml0aWFsaXplIHRoZSBjb21tYW5kIHN0 YWNrICovCisgICAgeGNtZHNyYyA9IENNRF9LQjsKKyAgICBjbWRzdGtbY21kbHZsXS5zcmMgPSBD TURfS0I7ICAgICAgICAvKiBTb3VyY2UgaXMgY29uc29sZSAqLworICAgIGNtZHN0a1tjbWRsdmxd Lmx2bCA9IDA7ICAgICAgICAgICAgIC8qIExldmVsIGlzIDAgKi8KKyAgICBjbWRzdGtbY21kbHZs XS5jY2ZsZ3MgPSAwOyAgICAgICAgICAvKiBObyBmbGFncyAqLworI2VuZGlmIC8qIE5PU1BMICov CisKKyAgICB0bGV2ZWwgPSAtMTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBUYWtlIGZpbGUg bGV2ZWwgPSBrZXlib2FyZCAqLworICAgIGZvciAoaSA9IDA7IGkgPCBNQVhUQUtFOyBpKyspICAg ICAgIC8qIEluaXRpYWxpemUgY29tbWFuZCBmaWxlIG5hbWVzICovCisgICAgICB0Zm5hbVtpXSA9 IE5VTEw7CisKKyAgICBjbXNldHAoY2twcm9tcHQpOyAgICAgICAgICAgICAgICAgICAvKiBTZXQg dXAgQy1LZXJtaXQncyBwcm9tcHQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBDYW4ndCBzZXQgSUtTRCBwcm9tcHQgaGVyZSBzaW5jZSAqLworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHdlIGRvIG5vdCB5ZXQga25vdyBpZiB3 ZSBhcmUgSUtTRCAqLworI2lmbmRlZiBOT1NQTAorCisgICAgaW5pdG1hYygpOyAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSBtYWNybyB0YWJsZSAqLworCisvKiBQcmVkZWZp bmUgYnVpbHQtaW4gb25lLWxpbmUgbWFjcm9zICovCisKKyAgICBhZGRtYWMoImlibS1saW5lbW9k ZSIsbV9pYm0pOyAgICAgICAvKiBJQk0tTElORU1PREUgKi8KKyAgICBhZGRtYWMoImZhdGFsIixt X2ZhdCk7ICAgICAgICAgICAgICAvKiBGQVRBTCBtYWNybyAqLworICAgIHkgPSBhZGRtYWMoImZh c3QiLG1fZmFzdCk7ICAgICAgICAgIC8qIEZBU1QgbWFjcm8gKi8KKyAgICBhZGRtYWMoImNhdXRp b3VzIixtX2NhdXRpb3VzKTsgICAgICAvKiBDQVVUSU9VUyBtYWNybyAqLworICAgIGFkZG1hYygi cm9idXN0IixtX3JvYnVzdCk7ICAgICAgICAgIC8qIFJPQlVTVCBtYWNybyAqLworI2lmZGVmIE9T MgorICAgIGFkZG1hYygibWFudWFsIixtX21hbnVhbCk7ICAgICAgICAgIC8qIE1BTlVBTCBtYWNy byAqLworI2VuZGlmIC8qIE9TMiAqLworI2lmZGVmIFZNUworICAgIGFkZG1hYygicHVyZ2UiLG1f cHVyZ2UpOyAgICAgICAgICAgIC8qIFBVUkdFIG1hY3JvICovCisjZW5kaWYgLyogVk1TICovCisK Ky8qCisgIFByZWRlZmluZSBidWlsdC1pbiBtdWx0aWxpbmUgbWFjcm9zOyB0aGVzZSBhcmUgdG9w LWxldmVsIGNvbW1hbmRzCisgIHRoYXQgYXJlIGltcGxlbWVudGVkIGludGVybmFsbHkgYXMgbWFj cm9zLiAgTk9URTogV2hlbiBhZGRpbmcgYSBuZXcKKyAgb25lIG9mIHRoZXNlLCByZW1lbWJlciB0 byB1cGRhdGUgdGhlIEVORCBhbmQgUkVUVVJOIGNvbW1hbmRzIHRvCisgIGFjY291bnQgZm9yIGl0 LCBvciBlbHNlIEVORCBhbmQgUkVUVVJOIGZyb20gd2l0aGluIGl0IHdvbid0IHdvcmsgcmlnaHQu CisqLworICAgIHggPSBhZGRtbWFjKCJfZm9yeCIsZm9yX2RlZik7ICAgICAgIC8qIEZPUiBtYWNy byAqLworICAgIGlmICh4ID4gLTEpIG1hY3RhYlt4XS5mbGdzID0gQ01fSU5WOworICAgIHggPSBh ZGRtbWFjKCJfZm9yeiIsZm96X2RlZik7ICAgICAgIC8qIE90aGVyIEZPUiBtYWNybyAqLworICAg IGlmICh4ID4gLTEpIG1hY3RhYlt4XS5mbGdzID0gQ01fSU5WOworICAgIHggPSBhZGRtbWFjKCJf eGlmIix4aWZfZGVmKTsgICAgICAgIC8qIFhJRiBtYWNybyAqLworICAgIGlmICh4ID4gLTEpIG1h Y3RhYlt4XS5mbGdzID0gQ01fSU5WOworICAgIHggPSBhZGRtbWFjKCJfd2hpbGUiLHdoaWxfZGVm KTsgICAgIC8qIFdISUxFIG1hY3JvICovCisgICAgaWYgKHggPiAtMSkgbWFjdGFiW3hdLmZsZ3Mg PSBDTV9JTlY7CisgICAgeCA9IGFkZG1tYWMoIl9zd2l0eCIsc3dfZGVmKTsgICAgICAgLyogU1dJ VENIIG1hY3JvICovCisgICAgaWYgKHggPiAtMSkgbWFjdGFiW3hdLmZsZ3MgPSBDTV9JTlY7CisK Ky8qIEZpbGwgaW4gY29tbWFuZC1saW5lIGFyZ3VtZW50IHZlY3RvciAqLworCisgICAgc3ByaW50 Zih2bmFtYnVmLCJcXCZAWyVkXSIseGFyZ3MpOyAgLyogU0FGRSAqLworICAgIGlmIChpbnNlcnZl cikgeyAgICAgICAgICAgICAgICAgICAgIC8qIEJ1dCBoaWRkZW4gaW4gSUtTRCAqLworICAgICAg ICB5ID0gLTE7CisgICAgICAgIHhhcmdzID0gMDsKKyAgICB9IGVsc2UKKyAgICAgIHkgPSBhcnJh eW5hbSh2bmFtYnVmLCZ4LCZ6KTsgICAgICAvKiBnb2VzIGluIGFycmF5IFwmQFtdICovCisKKyAg ICB0bXBidWZbMF0gPSBOVUw7CisgICAgaWYgKHkgPiAtMSkgeworICAgICAgICBpbnQgaiA9IC0x OworICAgICAgICBpbnQgeXkgPSAwOworICAgICAgICBkY2xhcnJheSgoY2hhcil4LHopOyAgICAg ICAgICAgIC8qIERlY2xhcmUgdGhlIGFycmF5ICovCisjaWZuZGVmIE5PVEFLRUFSR1MKKyAgICAg ICAgLyogTWFjcm8gYXJndW1lbnQgdmVjdG9yICovCisgICAgICAgIHNwcmludGYodm5hbWJ1Ziwi XFwmX1slZF0iLHopOyAgLyogU0FGRSAqLworICAgICAgICB5eSA9IGFycmF5bmFtKHZuYW1idWYs JngsJnopOyAgIC8qIGdvZXMgaW4gYXJyYXkgXCZfW10gKi8KKyAgICAgICAgaWYgKHl5ID4gLTEp ICAgICAgICAgICAgICAgICAgICAvKiBOYW1lIGlzIE9LICovCisgICAgICAgICAgZGNsYXJyYXko KGNoYXIpeCx6KTsgICAgICAgICAgLyogRGVjbGFyZSB0aGUgYXJyYXkgKi8KKyNlbmRpZiAvKiBO T1RBS0VBUkdTICovCisgICAgICAgIHNraXAgPSAwOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwg eGFyZ3M7IGkrKykgeyAgIC8qIEZpbGwgdGhlIGFycmF5cyAqLworICAgICAgICAgICAgc3ByaW50 Zih2bmFtYnVmLCJcXCZAWyVkXSIsaSk7IC8qIFNBRkUgKi8KKyAgICAgICAgICAgIGFkZG1hYyh2 bmFtYnVmLHhhcmd2W2ldKTsKKyAgICAgICAgICAgIGlmIChjZmlsZWYgJiYgaSA9PSAwKQorICAg ICAgICAgICAgICBjb250aW51ZTsKKyNpZmRlZiBLRVJCQU5HCisgICAgICAgICAgICBpZiAoc2tp cCkgeworICAgICAgICAgICAgICAgIGogPSAwOworICAgICAgICAgICAgICAgIHNraXAgPSAwOwor ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorI2VuZGlmIC8qIEtFUkJB TkcgKi8KKyAgICAgICAgICAgIGlmIChqIDwgMCAmJiAgICAgICAgICAgICAgICAvKiBBc3NpZ24g aXRlbXMgYWZ0ZXIgIj0iIG9yICItLSIqLworICAgICAgICAgICAgICAgICghc3RyY21wKHhhcmd2 W2ldLCI9IikgfHwgIXN0cmNtcCh4YXJndltpXSwiLS0iKSkKKyAgICAgICAgICAgICAgICApIHsK KyAgICAgICAgICAgICAgICBqID0gMDsgICAgICAgICAgICAgICAgICAvKiB0byBcJTEuLlwlOSAq LworI2lmZGVmIEtFUkJBTkcKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoaiA8IDAgJiYKKyAgICAg ICAgICAgICAgICAgICAgICAgKCFzdHJjbXAoeGFyZ3ZbaV0sIisiKSB8fAorICAgICAgICAgICAg ICAgICAgICAgICAgIXN0cm5jbXAoeGFyZ3ZbaV0sIisgIiwyKSB8fAorICAgICAgICAgICAgICAg ICAgICAgICAgIXN0cm5jbXAoeGFyZ3ZbaV0sIitcdCIsMikpCisgICAgICAgICAgICAgICAgICAg ICAgICApIHsKKyAgICAgICAgICAgICAgICBza2lwID0gMTsKKyAgICAgICAgICAgICAgICBjb250 aW51ZTsKKyNlbmRpZiAvKiBLRVJCQU5HICovCisgICAgICAgICAgICB9IGVsc2UgaWYgKGogPiAt MSkgeworICAgICAgICAgICAgICAgIGorKzsKKyAgICAgICAgICAgICAgICBpZiAoaiA8PSA5KSB7 CisgICAgICAgICAgICAgICAgICAgIHZuYW1idWZbMF0gPSAnXFwnOworICAgICAgICAgICAgICAg ICAgICB2bmFtYnVmWzFdID0gJyUnOworICAgICAgICAgICAgICAgICAgICB2bmFtYnVmWzJdID0g KGNoYXIpKGorJzAnKTsKKyAgICAgICAgICAgICAgICAgICAgdm5hbWJ1ZlszXSA9IE5VTDsKKyAg ICAgICAgICAgICAgICAgICAgYWRkbWFjKHZuYW1idWYseGFyZ3ZbaV0pOworICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoeXkgPiAtMSkgeworICAgICAgICAgICAgICAgICAg ICBjaGFyIGMsICogcDsKKyAgICAgICAgICAgICAgICAgICAgaW50IGZsYWcgPSAwOworICAgICAg ICAgICAgICAgICAgICBwID0geGFyZ3ZbaV07CisgICAgICAgICAgICAgICAgICAgIG1ha2VzdHIo Jih0b3Bhcmdbal0pLHApOworICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKGMgPSAqcCsrKSkg eyBpZiAoYyA9PSBTUCkgeyBmbGFnKys7IGJyZWFrOyB9IH0KKyAgICAgICAgICAgICAgICAgICAg aWYgKGZsYWcpCisgICAgICAgICAgICAgICAgICAgICAgY2tzdHJuY2F0KHRtcGJ1ZiwiXCIiLFRN UEJVRlNJWik7CisgICAgICAgICAgICAgICAgICAgIGNrc3RybmNhdCh0bXBidWYseGFyZ3ZbaV0s VE1QQlVGU0laKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGZsYWcpCisgICAgICAgICAgICAg ICAgICAgICAgY2tzdHJuY2F0KHRtcGJ1ZiwiXCIiLFRNUEJVRlNJWik7CisgICAgICAgICAgICAg ICAgICAgIGNrc3RybmNhdCh0bXBidWYsIiAiLFRNUEJVRlNJWik7CisgICAgICAgICAgICAgICAg fQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChjZmlsZWYpIHsKKyAgICAg ICAgICAgIGFkZG1hYygiXFwlMCIsY21kZmlsKTsKKyAgICAgICAgICAgIGlmICh5eSA+IC0xKQor ICAgICAgICAgICAgICBtYWtlc3RyKCYodG9wYXJnWzBdKSxjbWRmaWwpOworICAgICAgICB9IGVs c2UgeworICAgICAgICAgICAgYWRkbWFjKCJcXCUwIix4YXJndlswXSk7CisgICAgICAgICAgICBp ZiAoeXkgPiAtMSkKKyAgICAgICAgICAgICAgbWFrZXN0cigmKHRvcGFyZ1swXSkseGFyZ3ZbMF0p OworICAgICAgICB9CisgICAgICAgIGlmICh5eSA+IC0xKSB7CisgICAgICAgICAgICB0b3Bhcmdj ID0gKGogPCAwKSA/IDEgOiBqICsgMTsKKyAgICAgICAgICAgIHRvcHhhcmcgPSB0b3Bhcmc7Cisj aWZkZWYgQ09NTUVOVAorICAgICAgICAgICAgLyogVGhpcyBuZWVkcyB3b3JrICovCisgICAgICAg ICAgICBpZiAoIWNmaWxlZikKKyAgICAgICAgICAgICAgbWFrZXN0cigmdG9wbGluZSx0bXBidWYp OworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRv cGFyZ2MgPSAwOworICAgICAgICAgICAgdG9weGFyZyA9IE5VTEw7CisgICAgICAgIH0KKyAgICAg ICAgYV9kaW1bMF0gPSB0b3BhcmdjIC0gMTsKKyAgICAgICAgYV9wdHJbMF0gPSB0b3B4YXJnOwor CWRlYnVnKEYxMTEsImFfZGltWzBdIiwiQSIsYV9kaW1bMF0pOworICAgIH0KKyAgICAqdm5hbWJ1 ZiA9IE5VTDsKKyNlbmRpZiAvKiBOT1NQTCAqLworCisgICAgbHVpbml0KCk7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSBsb29rdXAoKSBjYWNoZSAqLworCisvKiBHZXQg b3VyIGhvbWUgZGlyZWN0b3J5IG5vdy4gIFRoaXMgbmVlZGVkIGluIGxvdHMgb2YgcGxhY2VzLiAq LworCisgICAgY21kaW5pdGVkID0gMTsKK30KKworI2lmZGVmIE5UCitfUFJPVE9UWVAoY2hhciAq IEdldEFwcERhdGEsKGludCkpOworI2VuZGlmIC8qIE5UICovCisKK1ZPSUQKK2RvaW5pdCgpIHsK KyNpZmRlZiBDS1JPT1QKK2V4dGVybiBpbnQgY2tyb290ZXJyOworI2VuZGlmIC8qIENLUk9PVCAq LworICAgIGludCB4ID0gMCwgb2sgPSAwOworI2lmZGVmIE9TMgorICAgIGNoYXIgKiBwdHIgPSAw OworI2VuZGlmIC8qIE9TMiAqLworCisgICAgaWYgKCFjbWRpbml0ZWQpCisgICAgICBjbWRpbmko KTsKKworI2lmZGVmIE1BQworICAgIHJldHVybjsgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIE1hYyBLZXJtaXQgaGFzIG5vIGluaXQgZmlsZSAqLworCisjZWxzZSAvKiAhTUFDICovCisK Ky8qIElmIHNraXBwaW5nIGluaXQgZmlsZSAoJy1ZJyBvbiBLZXJtaXQgY29tbWFuZCBsaW5lKSwg cmV0dXJuIG5vdy4gKi8KKworICAgIGlmIChub2luaXQpIHsKKyAgICAgICAga2VybXJjWzBdID0g J1wwJzsKKyAgICAgICAgaW5pZGlyWzBdID0gJ1wwJzsKKy8qCisgIEJ1dCByZXR1cm5pbmcgZnJv bSBoZXJlIHJlc3VsdHMgaW4gaW5pZGlyW10gbmV2ZXIgYmVpbmcgc2V0IHRvIGFueXRoaW5nLgor ICBJbnN0ZWFkIGl0IHNob3VsZCBiZSBzZXQgdG8gd2hlcmV2ZXIgdGhlIGluaXQgZmlsZSAqd291 bGQqIGhhdmUgYmVlbgorICBleGVjdXRlZCBmcm9tLiAgU28gdGhpcyBiaXQgb2YgY29kZSBzaG91 bGQgYmUgcmVtb3ZlZCwgYW5kIHRoZW4gd2Ugc2hvdWxkCisgIHNwcmlua2xlICJpZiAobm9pbml0 KSIgdGVzdHMgdGhyb3VnaG91dCB0aGUgZm9sbG93aW5nIGNvZGUgdW50aWwgd2UgaGF2ZQorICBz ZXQgaW5pZGlyW10sIGFuZCB0aGVuIHJldHVybiB3aXRob3V0IGFjdHVhbGx5IHRha2luZyB0aGUg aW5pdCBmaWxlLgorKi8KKyAgICAgICAgcmV0dXJuOworICAgIH0KKworI2lmZGVmIE9TMgorLyoK KyAgVGhlIC15IGluaXQgZmlsZSBtdXN0IGJlIGZ1bGx5IHNwZWNpZmllZCBvciBpbiB0aGUgY3Vy cmVudCBkaXJlY3RvcnkuCisgIEtFUk1SQyBpcyBsb29rZWQgZm9yIHZpYSBJTklULCBEUEFUSCBh bmQgUEFUSCBpbiB0aGF0IG9yZGVyLiAgRmluYWxseSwgb3VyCisgIG93biBleGVjdXRhYmxlIGZp bGUgcGF0aCBpcyB0YWtlbiBhbmQgdGhlIC5FWEUgc3VmZml4IGlzIHJlcGxhY2VkIGJ5IC5JTkkK KyAgYW5kIHRoaXMgaXMgdHJpZWQgYXMgdGhlIGluaXRpYWxpemF0aW9uIGZpbGUuCisqLworI2lm ZGVmIENLX0xPR0lOCisgICAgZGVidWcoRjEwMSwiZG9pbml0IGluc2VydmVyIiwiIixpbnNlcnZl cik7CisgICAgZGVidWcoRjEwMSwiZG9pbml0IGlzZ3Vlc3QiLCIiLGlzZ3Vlc3QpOworICAgIGRl YnVnKEYxMTAsImRvaW5pdCBhbm9uZmlsZSIsYW5vbmZpbGUsMCk7CisKKyAgICBpZiAoaXNndWVz dCAmJiBhbm9uZmlsZSkgeworICAgICAgY2tzdHJuY3B5KGxpbmUsIGFub25maWxlLCBMSU5CVUZT SVorMSk7CisgICAgfSBlbHNlCisjZW5kaWYgLyogQ0tfTE9HSU4gKi8KKyAgICAgIGlmIChyY2Zs YWcpIHsKKyAgICAgICAgICBja3N0cm5jcHkobGluZSxrZXJtcmMsTElOQlVGU0laKzEpOworI2lm ZGVmIENLX0xPR0lOCisgICAgICB9IGVsc2UgaWYgKGluc2VydmVyKSB7CisgICAgICAgICAgY2hh ciAqIGFwcGRhdGEgPSBOVUxMOworI2lmZGVmIE5UCisgICAgICAgICAgYXBwZGF0YSA9IEdldEFw cERhdGEoMSk7CisgICAgICAgICAgaWYgKCBhcHBkYXRhICkgeworICAgICAgICAgICAgICBja21h a21zZyhsaW5lLExJTkJVRlNJWisxLGFwcGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAi S2VybWl0IDk1L2s5NS5pbmkiLE5VTEwsTlVMTCk7CisgICAgICAgICAgICAgIGlmICggemNoa2ko bGluZSkgPCAwICkKKyAgICAgICAgICAgICAgICAgIGxpbmVbMF0gPSAnXDAnOworICAgICAgICAg IH0KKyAgICAgICAgICBpZiAobGluZVswXSA9PSAwKSB7CisgICAgICAgICAgICAgIGFwcGRhdGEg PSBHZXRBcHBEYXRhKDApOworICAgICAgICAgICAgICBpZiAoIGFwcGRhdGEgKSB7CisgICAgICAg ICAgICAgICAgICBja21ha21zZyhsaW5lLExJTkJVRlNJWisxLGFwcGRhdGEsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIktlcm1pdCA5NS9rOTUuaW5pIixOVUxMLE5VTEwpOworICAgICAg ICAgICAgICAgICAgaWYgKCB6Y2hraShsaW5lKSA8IDAgKQorICAgICAgICAgICAgICAgICAgICAg IGxpbmVbMF0gPSAnXDAnOworICAgICAgICAgICAgICB9CisgICAgICAgICAgfQorI2VuZGlmIC8q IE5UICovCisgICAgICAgICAgaWYgKGxpbmVbMF0gPT0gMCkgeworICAgICAgICAgICAgICBhcHBk YXRhID0gemhvbWUoKTsKKyAgICAgICAgICAgICAgaWYgKCBhcHBkYXRhICkgeworICAgICAgICAg ICAgICAgICAgY2ttYWttc2cobGluZSxMSU5CVUZTSVorMSxhcHBkYXRhLAorI2lmZGVmIE5UCisg ICAgICAgICAgICAgICAgICAgICAgICAgICJrOTUuaW5pIiwKKyNlbHNlIC8qIE5UICovCisgICAg ICAgICAgICAgICAgICAgICAgICAgICJrMi5pbmkiLAorI2VuZGlmIC8qIE5UICovCisgICAgICAg ICAgICAgICAgICAgICAgICAgICBOVUxMLE5VTEwpOworICAgICAgICAgICAgICAgICAgaWYgKCB6 Y2hraShsaW5lKSA8IDAgKQorICAgICAgICAgICAgICAgICAgICAgIGxpbmVbMF0gPSAnXDAnOwor ICAgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAgIGRlYnVnKEYxMTAsImRvaW5p dCBpbnNlcnZlciBpbmlmaWxlIixsaW5lLDApOworI2VuZGlmIC8qIENLX0xPR0lOICovCisgICAg fSBlbHNlIHsKKyAgICAgICAgY2hhciAqIGVudiA9IDA7CisjaWZkZWYgTlQKKyAgICAgICAgZW52 ID0gZ2V0ZW52KCJLOTUuS1NDIik7CisjZWxzZQorICAgICAgICBlbnYgPSBnZXRlbnYoIksyLktT QyIpOworI2VuZGlmIC8qIE5UICovCisgICAgICAgIGlmICghZW52KSB7CisjaWZkZWYgTlQKKyAg ICAgICAgICAgIGVudiA9IGdldGVudigiSzk1LklOSSIpOworI2Vsc2UKKyAgICAgICAgICAgIGVu diA9IGdldGVudigiSzIuSU5JIik7CisjZW5kaWYgLyogTlQgKi8KKyAgICAgICAgfQorICAgICAg ICBpZiAoIWVudikKKyAgICAgICAgICBlbnYgPSBnZXRlbnYoIkNLRVJNSVQuSU5JIik7CisgICAg ICAgIGlmICghZW52KQorICAgICAgICAgIGVudiA9IGdldGVudigiQ0tFUk1JVF9JTkkiKTsKKyAg ICAgICAgbGluZVswXSA9ICdcMCc7CisKKyAgICAgICAgZGVidWcoRjExMCwiZG9pbml0IGVudiIs ZW52LDApOworICAgICAgICBpZiAoZW52KQorICAgICAgICAgIGNrc3RybmNweShsaW5lLGVudixM SU5CVUZTSVorMSk7CisKKyNpZmRlZiBOVAorICAgICAgICBpZiAobGluZVswXSA9PSAwKSB7Cisg ICAgICAgICAgICBlbnYgPSBHZXRBcHBEYXRhKDEpOworICAgICAgICAgICAgaWYgKCBlbnYgKSB7 CisgICAgICAgICAgICAgICAgY2ttYWttc2cobGluZSxMSU5CVUZTSVorMSxlbnYsIktlcm1pdCA5 NS9rOTUuaW5pIixOVUxMLE5VTEwpOworICAgICAgICAgICAgICAgIGlmICggemNoa2kobGluZSkg PCAwICkKKyAgICAgICAgICAgICAgICAgICAgbGluZVswXSA9ICdcMCc7CisgICAgICAgICAgICB9 CisgICAgICAgIH0KKyAgICAgICAgaWYgKGxpbmVbMF0gPT0gMCkgeworICAgICAgICAgICAgZW52 ID0gR2V0QXBwRGF0YSgwKTsKKyAgICAgICAgICAgIGlmICggZW52ICkgeworICAgICAgICAgICAg ICAgIGNrbWFrbXNnKGxpbmUsTElOQlVGU0laKzEsZW52LCJLZXJtaXQgOTUvazk1LmluaSIsTlVM TCxOVUxMKTsKKyAgICAgICAgICAgICAgICBpZiAoIHpjaGtpKGxpbmUpIDwgMCApCisgICAgICAg ICAgICAgICAgICAgIGxpbmVbMF0gPSAnXDAnOworICAgICAgICAgICAgfQorICAgICAgICB9Cisj ZW5kaWYgLyogTlQgKi8KKworICAgICAgICBpZiAobGluZVswXSA9PSAwKSB7CisgICAgICAgICAg ICBlbnYgPSB6aG9tZSgpOworICAgICAgICAgICAgaWYgKCBlbnYgKSB7CisgICAgICAgICAgICAg ICAgY2ttYWttc2cobGluZSxMSU5CVUZTSVorMSxlbnYsCisjaWZkZWYgTlQKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgIms5NS5pbmkiLAorI2Vsc2UgLyogTlQgKi8KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgImsyLmluaSIsCisjZW5kaWYgLyogTlQgKi8KKyAgICAgICAgICAgICAgICAg ICAgICAgICAgTlVMTCxOVUxMKTsKKyAgICAgICAgICAgICAgICBpZiAoIHpjaGtpKGxpbmUpIDwg MCApCisgICAgICAgICAgICAgICAgICAgIGxpbmVbMF0gPSAnXDAnOworICAgICAgICAgICAgfQor ICAgICAgICB9CisKKyAgICAgICAgaWYgKGxpbmVbMF0gPT0gMCkKKyAgICAgICAgICBfc2VhcmNo ZW52KGtlcm1yYywiSU5JVCIsbGluZSk7CisgICAgICAgIGlmIChsaW5lWzBdID09IDApCisgICAg ICAgICAgX3NlYXJjaGVudihrZXJtcmMsIkRQQVRIIixsaW5lKTsKKyAgICAgICAgaWYgKGxpbmVb MF0gPT0gMCkKKyAgICAgICAgICBfc2VhcmNoZW52KGtlcm1yYywiUEFUSCIsbGluZSk7CisgICAg ICAgIGlmIChsaW5lWzBdID09IDApIHsKKyAgICAgICAgICAgIGNoYXIgKnBnbXB0ciA9IEdldExv YWRQYXRoKCk7CisgICAgICAgICAgICBpZiAocGdtcHRyICYmIHN0cmxlbihwZ21wdHIpIDwgTElO QlVGU0laLTgpIHsKKyAgICAgICAgICAgICAgICBscCA9IHN0cnJjaHIocGdtcHRyLCAnXFwnKTsK KyAgICAgICAgICAgICAgICBpZiAobHApIHsKKyAgICAgICAgICAgICAgICAgICAgc3RybmNweShs aW5lLCBwZ21wdHIsIGxwIC0gcGdtcHRyKTsKKyNpZmRlZiBOVAorICAgICAgICAgICAgICAgICAg ICBzdHJjcHkobGluZSArIChscCAtIHBnbXB0ciksICIvazk1LmluaSIpOworI2Vsc2UgLyogTlQg Ki8KKyAgICAgICAgICAgICAgICAgICAgc3RyY3B5KGxpbmUgKyAobHAgLSBwZ21wdHIpLCAiL2sy LmluaSIpOworI2VuZGlmIC8qIE5UICovCisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg ICAgICAgICAgICAgICAgbHAgPSBzdHJyY2hyKHBnbXB0ciwgJy4nKTsKKyAgICAgICAgICAgICAg ICAgICAgaWYgKGxwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJuY3B5KGxpbmUsIHBn bXB0ciwgbHAgLSBwZ21wdHIpOworICAgICAgICAgICAgICAgICAgICAgICAgc3RyY3B5KGxpbmUg KyAobHAgLSBwZ21wdHIpLCAiLmluaSIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisjaWZkZWYgQ0tS T09UCisgICAgaWYgKCF6aW5yb290KGxpbmUpKSB7CisgICAgICAgIGRlYnVnKEYxMTAsImRvaW5p dCBzZXRyb290IHZpb2xhdGlvbiIsbGluZSwwKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNl bmRpZiAvKiBDS1JPT1QgKi8KKworICAgIGRlYnVnKEYxMTAsImRvaW5pdCBmb3BlbigpIixsaW5l LDApOworICAgIGlmICgodGZpbGVbMF0gPSBmb3BlbihsaW5lLCJyIikpICE9IE5VTEwpIHsKKyAg ICAgICAgb2sgPSAxOworICAgICAgICB0bGV2ZWwgPSAwOworICAgICAgICB0ZmxpbmVbdGxldmVs XSA9IDA7CisgICAgICAgIGlmICh0Zm5hbVt0bGV2ZWxdID0gbWFsbG9jKHN0cmxlbihsaW5lKSsx KSkKKyAgICAgICAgICBzdHJjcHkodGZuYW1bdGxldmVsXSxsaW5lKTsgICAvKiBzYWZlICovCisj aWZuZGVmIE5PU1BMCisgICAgICAgIGNtZGx2bCsrOworICAgICAgICB4Y21kc3JjID0gQ01EX1RG OworICAgICAgICBjbWRzdGtbY21kbHZsXS5zcmMgPSBDTURfVEY7CisgICAgICAgIGNtZHN0a1tj bWRsdmxdLmx2bCA9IHRsZXZlbDsKKyAgICAgICAgY21kc3RrW2NtZGx2bF0uY2NmbGdzID0gMDsK KyAgICAgICAgaWZjbWRbY21kbHZsXSA9IDA7CisgICAgICAgIGlmdGVzdFtjbWRsdmxdID0gMDsK KyAgICAgICAgY291bnRbY21kbHZsXSA9ICBjb3VudFtjbWRsdmwtMV07IC8qIEluaGVyaXQgZnJv bSBwcmV2aW91cyBsZXZlbCAqLworICAgICAgICBpbnRpbWVbY21kbHZsXSA9IGludGltZVtjbWRs dmwtMV07CisgICAgICAgIGlucGNhc1tjbWRsdmxdID0gaW5wY2FzW2NtZGx2bC0xXTsKKyAgICAg ICAgdGFrZXJyW2NtZGx2bF0gPSB0YWtlcnJbY21kbHZsLTFdOworICAgICAgICBtZXJyb3JbY21k bHZsXSA9IG1lcnJvcltjbWRsdmwtMV07CisgICAgICAgIHhxdWlldFtjbWRsdmxdID0gcXVpZXQ7 CisgICAgICAgIHh2YXJldltjbWRsdmxdID0gdmFyZXZhbDsKKyNlbmRpZiAvKiBOT1NQTCAqLwor ICAgICAgICBkZWJ1ZyhGMTEwLCJkb2luaXQgaW5pdCBmaWxlIixsaW5lLDApOworICAgIH0gZWxz ZSB7CisgICAgICAgIGRlYnVnKEYxMDAsImRvaW5pdCBubyBpbml0IGZpbGUiLCIiLDApOworICAg IH0KKyAgICBja3N0cm5jcHkoa2VybXJjLGxpbmUsS0VSTVJDTCk7CisgICAgZm9yIChwdHIgPSBr ZXJtcmM7ICpwdHI7IHB0cisrKSAgICAgLyogQ29udmVydCBiYWNrc2xhc2hlcyB0byBzbGFzaGVz ICovCisgICAgICAgaWYgKCpwdHIgPT0gJ1xcJykKKyAgICAgICAgICpwdHIgPSAnLyc7CisjZWxz ZSAvKiBub3QgT1MyICovCisgICAgbHAgPSBsaW5lOworICAgIGxwWzBdID0gJ1wwJzsKKyAgICBk ZWJ1ZyhGMTAxLCJkb2luaXQgcmNmbGFnIiwiIixyY2ZsYWcpOworI2lmZGVmIEdFTURPUworICAg IHprZXJtaW5pKGxpbmUsIHJjZmxhZywga2VybXJjKTsKKyNlbHNlCisjaWZkZWYgVk1TCisgICAg eworCWludCB4OworCXggPSB6a2VybWluaShsaW5lLExJTkJVRlNJWixrZXJtcmMpOworCWRlYnVn KEYxMTEsIkNVU1RPTSB6a2VybWluaSIsbGluZSx4KTsKKwlpZiAoeCA9PSAwKQorCSAgbGluZVsw XSA9IE5VTDsKKyAgICB9CisjZWxzZSAvKiBub3QgVk1TICovCisjaWZkZWYgQ0tfTE9HSU4KKyAg ICBkZWJ1ZyhGMTAxLCJkb2luaXQgaXNndWVzdCIsIiIsaXNndWVzdCk7CisgICAgaWYgKGlzZ3Vl c3QpCisgICAgICBja3N0cm5jcHkobHAsIGFub25maWxlID8gYW5vbmZpbGUgOiBrZXJtcmMsIExJ TkJVRlNJWik7CisgICAgZWxzZQorI2VuZGlmIC8qIENLX0xPR0lOICovCisgICAgICBpZiAocmNm bGFnKSB7ICAgICAgICAgICAgICAgICAgICAgLyogSWYgaW5pdCBmaWxlIG5hbWUgZnJvbSBjbWQg bGluZSAqLworICAgICAgICAgIGNrc3RybmNweShscCxrZXJtcmMsTElOQlVGU0laKTsgLyogdXNl IGl0LCAqLworICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG90aGVy d2lzZS4uLiAqLworI2lmZGVmIENLX0lOSV9BICAgICAgICAgICAgICAgICAgICAgICAgIC8qIElm IHdlJ3ZlIGEgc3lzdGVtLXdpZGUgaW5pdCBmaWxlICovCisgICAgICAgICAgLyogQW5kIGl0IHRh a2VzIHByZWNlZGVuY2Ugb3ZlciB0aGUgdXNlcidzLi4uICovCisgICAgICAgICAgY2tzdHJuY3B5 KGxwLENLX1NZU0lOSSxLRVJNUkNMKTsgLyogVXNlIGl0ICovCisgICAgICAgICAgaWYgKHpjaGtp KGxwKSA8IDApIHsgICAgICAgICAgLyogKGlmIGl0IGV4aXN0cy4uLikgKi8KKyNlbmRpZiAvKiBD S19JTklfQSAqLworICAgICAgICAgICAgICBjaGFyICogaG9tZGlyOworICAgICAgICAgICAgICBj aGFyICogZW52ID0gMDsKKyAgICAgICAgICAgICAgbGluZVswXSA9IE5VTDsKKworICAgICAgICAg ICAgICAvKiBBZGQgc3VwcG9ydCBmb3IgZW52aXJvbm1lbnQgdmFyaWFibGUgKi8KKyAgICAgICAg ICAgICAgZW52ID0gZ2V0ZW52KCJDS0VSTUlULklOSSIpOworICAgICAgICAgICAgICBpZiAoIWVu dikKKyAgICAgICAgICAgICAgICBlbnYgPSBnZXRlbnYoIkNLRVJNSVRfSU5JIik7CisgICAgICAg ICAgICAgIGlmIChlbnYpCisgICAgICAgICAgICAgICAgY2tzdHJuY3B5KGxwLGVudixLRVJNUkNM KTsKKworICAgICAgICAgICAgICBpZiAobHBbMF0gPT0gMCkgeworICAgICAgICAgICAgICAgICAg aG9tZGlyID0gemhvbWUoKTsKKyAgICAgICAgICAgICAgICAgIGlmIChob21kaXIpIHsgICAgICAg ICAvKiBIb21lIGRpcmVjdG9yeSBmb3IgaW5pdCBmaWxlLiAqLworICAgICAgICAgICAgICAgICAg ICAgIGNrc3RybmNweShscCxob21kaXIsS0VSTVJDTCk7CisjaWZkZWYgU1RSQVRVUworICAgICAg ICAgICAgICAgICAgICAgIGNrc3RybmNhdChscCwiPiIsS0VSTVJDTCk7LyogVk9TIGRpcnNlcCAq LworI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgICBpZiAobHBbMF0gPT0gJy8nKSBja3N0cm5j YXQobHAsIi8iLEtFUk1SQ0wpOworI2VuZGlmIC8qIFNUUkFUVVMgKi8KKyAgICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICAgIGNrc3RybmNhdChscCxrZXJtcmMsS0VSTVJDTCk7Lyog QXBwZW5kIGRlZmF1bHQgZmlsZSBuYW1lICovCisgICAgICAgICAgICAgIH0KKyNpZmRlZiBDS19J TklfQQorICAgICAgICAgIH0KKyNlbmRpZiAvKiBDS19JTklfQSAqLworI2lmZGVmIENLX0lOSV9C ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFN5c3RlbS13aWRlIGluaXQgZGVmaW5lZD8gKi8K KyAgICAgICAgICAvKiBCdXQgdXNlcidzIGluaSBmaWxlIHRha2VzIHByZWNlZGVuY2UgKi8KKyAg ICAgICAgICBpZiAoemNoa2kobHApIDwgMCkgICAgICAgICAgICAvKiBJZiB1c2VyIGRvZXNuJ3Qg aGF2ZSBoZXIgb3duLCAqLworICAgICAgICAgICAgY2tzdHJuY3B5KGxwLENLX1NZU0lOSSxLRVJN UkNMKTsgLyogdXNlIHN5c3RlbS13aWRlIG9uZS4gKi8KKyNlbmRpZiAvKiBDS19JTklfQiAqLwor ICAgICAgfQorI2VuZGlmIC8qIFZNUyAqLworI2VuZGlmIC8qIEdFTURPUyAqLworCisjaWZkZWYg QU1JR0EKKyAgICByZXFvZmYoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEaXNhYmxl IHJlcXVlc3RvcnMgKi8KKyNlbmRpZiAvKiBBTUlHQSAqLworCisjaWZkZWYgVVNFX0NVU1RPTQor ICAgIC8qIElmIG5vIGluaXQgZmlsZSB3YXMgZm91bmQsIGV4ZWN1dGUgdGhlIGN1c3RvbWl6YXRp b24gZmlsZSAqLworICAgIGRlYnVnKEYxMTEsIkNVU1RPTSAxIixsaW5lLHJjZmxhZyk7CisgICAg aWYgKCghbGluZVswXSB8fCB6Y2hraShsaW5lKSA8IDApICYmICFyY2ZsYWcpIHsKKwlpbnQgeDsK KyNpZmRlZiBPUzIKKwl4ID0gY2ttYWtlc3RyKGxpbmUsTElOQlVGU0laLEdldEFwcERhdGEoMSks Ii8iLCJLOTVDVVNUT00uSU5JIixOVUxMKTsKKwlkZWJ1ZyhGMTExLCJDVVNUT00gMiIsbGluZSx4 KTsKKwlpZiAoemNoa2kobGluZSkgPCAwKSB7CisJICAgIHggPSBja21ha2VzdHIobGluZSxMSU5C VUZTSVosR2V0QXBwRGF0YSgwKSwiLyIsIks5NVVTRVIuSU5JIixOVUxMKTsKKwkgICAgZGVidWco RjExMSwiQ1VTVE9NIDMiLGxpbmUseCk7CisJfQorI2Vsc2UgIC8qIE9TMiAqLworCXggPSBja3N0 cm5jcHkobGluZSx6aG9tZSgpLExJTkJVRlNJWik7CisjaWZuZGVmIFZNUworCS8qIFZNUyB6aG9t ZSgpIHJldHVybnMgIlNZUyRMT0dJTjoiICovCisJaWYgKGxpbmVbeC0xXSAhPSBESVJTRVApIHsK KwkgICAgbGluZVt4KytdID0gRElSU0VQOworCSAgICBsaW5lW3hdID0gTlVMOworCX0KKyNlbmRp ZiAvKiBWTVMgKi8KKwl4ID0gY2tzdHJuY2F0KGxpbmUsTVlDVVNUT00sTElOQlVGU0laKTsKKwlk ZWJ1ZyhGMTExLCJDVVNUT00gNCIsbGluZSx4KTsKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICB9Cisg ICAgZGVidWcoRjExMCwiQ1VTVE9NIDUiLGxpbmUsMCk7CisjZW5kaWYgLyogVVNFX0NVU1RPTSAq LworCisjaWZkZWYgQ0tST09UCisgICAgaWYgKCF6aW5yb290KGxpbmUpKSB7CisgICAgICAgIGRl YnVnKEYxMTAsImRvaW5pdCBzZXRyb290IHZpb2xhdGlvbiIsbGluZSwwKTsKKyAgICAgICAgcmV0 dXJuOworICAgIH0KKyNlbmRpZiAvKiBDS1JPT1QgKi8KKworICAgIGRlYnVnKEYxMTAsImRvaW5p dCBpbmkgZmlsZSBpcyIsbGluZSwwKTsKKyAgICBpZiAoKHRmaWxlWzBdID0gZm9wZW4obGluZSwi ciIpKSAhPSBOVUxMKSB7IC8qIFRyeSB0byBvcGVuIGluaXQgZmlsZS4gKi8KKyAgICAgICAgb2sg PSAxOworICAgICAgICB0bGV2ZWwgPSAwOworICAgICAgICB0ZmxpbmVbdGxldmVsXSA9IDA7Cisg ICAgICAgIGlmICgodGZuYW1bdGxldmVsXSA9IG1hbGxvYyhzdHJsZW4obGluZSkrMSkpKQorICAg ICAgICAgIHN0cmNweSh0Zm5hbVt0bGV2ZWxdLGxpbmUpOyAgIC8qIHNhZmUgKi8KKworICAgICAg ICBja3N0cm5jcHkoa2VybXJjLGxpbmUsS0VSTVJDTCk7CisKKyNpZm5kZWYgTk9TUEwKKyAgICAg ICAgY21kbHZsKys7CisgICAgICAgIGlmY21kW2NtZGx2bF0gPSAwOworICAgICAgICBpZnRlc3Rb Y21kbHZsXSA9IDA7CisgICAgICAgIGNvdW50W2NtZGx2bF0gPSAgY291bnRbY21kbHZsLTFdOyAv KiBJbmhlcml0IGZyb20gcHJldmlvdXMgbGV2ZWwgKi8KKyAgICAgICAgaW50aW1lW2NtZGx2bF0g PSBpbnRpbWVbY21kbHZsLTFdOworICAgICAgICBpbnBjYXNbY21kbHZsXSA9IGlucGNhc1tjbWRs dmwtMV07CisgICAgICAgIHRha2VycltjbWRsdmxdID0gdGFrZXJyW2NtZGx2bC0xXTsKKyAgICAg ICAgbWVycm9yW2NtZGx2bF0gPSBtZXJyb3JbY21kbHZsLTFdOworICAgICAgICB4cXVpZXRbY21k bHZsXSA9IHF1aWV0OworICAgICAgICB4dmFyZXZbY21kbHZsXSA9IHZhcmV2YWw7CisgICAgICAg IGRlYnVnKEYxMDEsImRvaW5pdCBvcGVuIG9rIiwiIixjbWRsdmwpOworICAgICAgICB4Y21kc3Jj ID0gQ01EX1RGOworICAgICAgICBjbWRzdGtbY21kbHZsXS5zcmMgPSBDTURfVEY7CisgICAgICAg IGNtZHN0a1tjbWRsdmxdLmx2bCA9IHRsZXZlbDsKKyAgICAgICAgY21kc3RrW2NtZGx2bF0uY2Nm bGdzID0gMDsKKyNlbmRpZiAvKiBOT1NQTCAqLworICAgIH0gZWxzZSBpZiAocmNmbGFnKSB7Cisg ICAgICAgIC8qIFByaW50IGFuIGVycm9yIG1lc3NhZ2Ugb25seSBpZiBhIHNwZWNpZmljIGZpbGUg d2FzIGFza2VkIGZvci4gKi8KKyAgICAgICAgcHJpbnRmKCI/JXMgLSAlc1xuIiwgY2tfZXJyc3Ry KCksIGxpbmUpOworICAgIH0KKworI2lmZGVmIGRhdGFnZW5lcmFsCisvKiBJZiBDS0VSTUlULklO SSBub3QgZm91bmQgaW4gaG9tZSBkaXJlY3RvcnksIGxvb2sgaW4gc2VhcmNobGlzdCAqLworICAg IGlmICgvKiBob21kaXIgJiYgKi8gKHRsZXZlbCA8IDApKSB7CisgICAgICAgIGNrc3RybmNweShs cCxrZXJtcmMsTElOQlVGU0laKTsKKyAgICAgICAgaWYgKCh0ZmlsZVswXSA9IGZvcGVuKGxpbmUs InIiKSkgIT0gTlVMTCkgeworICAgICAgICAgICAgb2sgPSAxOworICAgICAgICAgICAgdGxldmVs ID0gMDsKKyAgICAgICAgICAgIHRmbGluZVt0bGV2ZWxdID0gMDsKKyAgICAgICAgICAgIGlmICh0 Zm5hbVt0bGV2ZWxdID0gbWFsbG9jKHN0cmxlbihsaW5lKSsxKSkKKyAgICAgICAgICAgICAgc3Ry Y3B5KHRmbmFtW3RsZXZlbF0sbGluZSk7IC8qIHNhZmUgKi8KKyNpZm5kZWYgTk9TUEwKKyAgICAg ICAgICAgIGNtZGx2bCsrOworICAgICAgICAgICAgeGNtZHNyYyA9IENNRF9URjsKKyAgICAgICAg ICAgIGNtZHN0a1tjbWRsdmxdLnNyYyA9IENNRF9URjsKKyAgICAgICAgICAgIGNtZHN0a1tjbWRs dmxdLmx2bCA9IHRsZXZlbDsKKyAgICAgICAgICAgIGNtZHN0a1tjbWRsdmxdLmNjZmxncyA9IDA7 CisgICAgICAgICAgICBpZmNtZFtjbWRsdmxdID0gMDsKKyAgICAgICAgICAgIGlmdGVzdFtjbWRs dmxdID0gMDsKKyAgICAgICAgICAgIGNvdW50W2NtZGx2bF0gPSAgY291bnRbY21kbHZsLTFdOyAv KiBJbmhlcml0IGZyb20gcHJldmlvdXMgbGV2ZWwgKi8KKyAgICAgICAgICAgIGludGltZVtjbWRs dmxdID0gaW50aW1lW2NtZGx2bC0xXTsKKyAgICAgICAgICAgIGlucGNhc1tjbWRsdmxdID0gaW5w Y2FzW2NtZGx2bC0xXTsKKyAgICAgICAgICAgIHRha2VycltjbWRsdmxdID0gdGFrZXJyW2NtZGx2 bC0xXTsKKyAgICAgICAgICAgIG1lcnJvcltjbWRsdmxdID0gbWVycm9yW2NtZGx2bC0xXTsKKyAg ICAgICAgICAgIHhxdWlldFtjbWRsdmxdID0gcXVpZXQ7CisJICAgIHh2YXJldltjbWRsdmxdID0g dmFyZXZhbDsKKyNlbmRpZiAvKiBOT1NQTCAqLworICAgICAgICB9CisgICAgfQorI2VuZGlmIC8q IGRhdGFnZW5lcmFsICovCisKKyNpZmRlZiBBTUlHQSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBBbWlnYS4uLiAqLworICAgIHJlcXBvcCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIFJlc3RvcmUgcmVxdWVzdG9ycyAqLworI2VuZGlmIC8qIEFNSUdBICovCisjZW5kaWYgLyog T1MyICovCisjZW5kaWYgLyogTUFDICovCisKKyAgICAvKiBBc3NpZ24gdmFsdWUgdG8gaW5pZGly ICovCisKKyAgICBpZiAoIW9rKSB7CisgICAgICAgIGluaWRpclswXSA9IE5VTDsKKyAgICB9IGVs c2UgeworICAgICAgICBja3N0cm5jcHkoaW5pZGlyLCBrZXJtcmMsIENDSE1BWFBBVEgpOworICAg ICAgICB4ID0gc3RybGVuKGluaWRpcik7CisgICAgICAgIGlmICh4ID4gMCkgeworICAgICAgICAg ICAgaW50IGk7CisgICAgICAgICAgICBmb3IgKGkgPSB4IC0gMTsgaSA+IDA7IGktLSApIHsKKyAg ICAgICAgICAgICAgICBpZiAoSVNESVJTRVAoaW5pZGlyW2ldKSkgeworICAgICAgICAgICAgICAg ICAgICBpbmlkaXJbaSsxXSA9IE5VTDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisjaWZkZWYgTlQKKyAgICAg ICAgR2V0U2hvcnRQYXRoTmFtZShpbmlkaXIsaW5pZGlyLENDSE1BWFBBVEgpOworI2VuZGlmIC8q IE5UICovCisgICAgfQorfQorCitWT0lECitkb2lrc2Rpbml0KCkgeworI2lmZGVmIENLX1NTTAor ICAgIC8qIElLU0QgZG9lc24ndCByZXF1ZXN0IGNsaWVudCBjZXJ0cyAqLworICAgIHNzbF92ZXJp ZnlfZmxhZyA9IFNTTF9WRVJJRllfTk9ORTsKKyNlbmRpZiAvKiBDS19TU0wgKi8KKworICAgIGlm ICghY21kaW5pdGVkKQorICAgICAgY21kaW5pKCk7CisKKyNpZmRlZiBJS1NEQ09ORgorI2lmZGVm IE9TMgorICAgIGxpbmVbMF0gPSAnXDAnOworICAgIF9zZWFyY2hlbnYoaWtzZGNvbmYsIklOSVQi LGxpbmUpOworICAgIGlmIChsaW5lWzBdID09IDApCisgICAgICBfc2VhcmNoZW52KGlrc2Rjb25m LCJEUEFUSCIsbGluZSk7CisgICAgaWYgKGxpbmVbMF0gPT0gMCkKKyAgICAgIF9zZWFyY2hlbnYo aWtzZGNvbmYsIlBBVEgiLGxpbmUpOworICAgIGlmIChsaW5lWzBdID09IDApIHsKKyAgICAgICAg Y2hhciAqcGdtcHRyID0gR2V0TG9hZFBhdGgoKTsKKyAgICAgICAgaWYgKHBnbXB0ciAmJiBzdHJs ZW4ocGdtcHRyKSA8IExJTkJVRlNJWi04KSB7CisgICAgICAgICAgICBscCA9IHN0cnJjaHIocGdt cHRyLCAnXFwnKTsKKyAgICAgICAgICAgIGlmIChscCkgeworICAgICAgICAgICAgICAgIHN0cm5j cHkobGluZSwgcGdtcHRyLCBscCAtIHBnbXB0cik7CisgICAgICAgICAgICAgICAgc3RyY3B5KGxp bmUgKyAobHAgLSBwZ21wdHIpLCAiXFwiKTsKKyAgICAgICAgICAgICAgICBzdHJjcHkobGluZSAr IChscCAtIHBnbXB0ciArIDEpLCBpa3NkY29uZik7CisgICAgICAgICAgICB9IGVsc2UgeworICAg ICAgICAgICAgICAgIGxwID0gc3RycmNocihwZ21wdHIsICcuJyk7CisgICAgICAgICAgICAgICAg aWYgKGxwKSB7CisgICAgICAgICAgICAgICAgICAgIHN0cm5jcHkobGluZSwgcGdtcHRyLCBscCAt IHBnbXB0cik7CisgICAgICAgICAgICAgICAgICAgIHN0cmNweShsaW5lICsgKGxwIC0gcGdtcHRy KSwgIi5rc2MiKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0K KyAgICB9CisgICAgZGVidWcoRjExMCwiZG9pa3NkaW5pdCgpIGxpbmUiLGxpbmUsMCk7CisgICAg dGZpbGVbMF0gPSBmb3BlbihsaW5lLCJyIik7CisjZWxzZSAvKiBPUzIgKi8KKyAgICB0ZmlsZVsw XSA9IGZvcGVuKGlrc2Rjb25mLCJyIik7CisjZW5kaWYgLyogT1MyICovCisgICAgaWYgKHRmaWxl WzBdICE9IE5VTEwpIHsKKyAgICAgICAgdGxldmVsID0gMDsKKyAgICAgICAgdGZsaW5lW3RsZXZl bF0gPSAwOworI2lmZGVmIE9TMgorICAgICAgICBpZiAodGZuYW1bdGxldmVsXSA9IG1hbGxvYyhz dHJsZW4obGluZSkrMSkpCisgICAgICAgICAgc3RyY3B5KHRmbmFtW3RsZXZlbF0sbGluZSk7Cisj ZWxzZSAvKiBPUzIgKi8KKyAgICAgICAgaWYgKCh0Zm5hbVt0bGV2ZWxdID0gbWFsbG9jKHN0cmxl bihpa3NkY29uZikrMSkpKQorICAgICAgICAgIHN0cmNweSh0Zm5hbVt0bGV2ZWxdLGlrc2Rjb25m KTsKKyNlbmRpZiAvKiBPUzIgKi8KKyNpZm5kZWYgTk9TUEwKKyAgICAgICAgY21kbHZsKys7Cisg ICAgICAgIHhjbWRzcmMgPSBDTURfVEY7CisgICAgICAgIGNtZHN0a1tjbWRsdmxdLnNyYyA9IENN RF9URjsKKyAgICAgICAgY21kc3RrW2NtZGx2bF0ubHZsID0gdGxldmVsOworICAgICAgICBjbWRz dGtbY21kbHZsXS5jY2ZsZ3MgPSAwOworICAgICAgICBpZmNtZFtjbWRsdmxdICA9IDA7CisgICAg ICAgIGlmdGVzdFtjbWRsdmxdID0gMDsKKyAgICAgICAgY291bnRbY21kbHZsXSAgPSBjb3VudFtj bWRsdmwtMV07IC8qIEluaGVyaXQgZnJvbSBwcmV2aW91cyBsZXZlbCAqLworICAgICAgICBpbnRp bWVbY21kbHZsXSA9IGludGltZVtjbWRsdmwtMV07CisgICAgICAgIGlucGNhc1tjbWRsdmxdID0g aW5wY2FzW2NtZGx2bC0xXTsKKyAgICAgICAgdGFrZXJyW2NtZGx2bF0gPSB0YWtlcnJbY21kbHZs LTFdOworICAgICAgICBtZXJyb3JbY21kbHZsXSA9IG1lcnJvcltjbWRsdmwtMV07CisgICAgICAg IHhxdWlldFtjbWRsdmxdID0gcXVpZXQ7CisJeHZhcmV2W2NtZGx2bF0gPSB2YXJldmFsOworI2Vu ZGlmIC8qIE5PU1BMICovCisgICAgICAgIGRlYnVnKEYxMTAsImRvaWtzZGluaXQgZmlsZSBvayIs dGZuYW1bdGxldmVsXSwwKTsKKyAgICB9IGVsc2UgeworICAgICAgICBkZWJ1ZyhGMTEwLCJkb2lr c2Rpbml0IG9wZW4gZmFpbGVkIix0Zm5hbVt0bGV2ZWxdLDApOworICAgIH0KKyNlbmRpZiAvKiBJ S1NEQ09ORiAqLworfQorCisjaWZuZGVmIE5PU1BMCisvKgorICBHIEUgVCBOIEMgTQorCisgIEdl dCBuZXh0IGNvbW1hbmQgZnJvbSBjdXJyZW50IG1hY3JvIGRlZmluaXRpb24uICBDb21tYW5kIGlz IGNvcGllZAorICBpbnRvIHN0cmluZyBwb2ludGVkIHRvIGJ5IGFyZ3VtZW50IHMsIG1heCBsZW5n dGggbi4gICBSZXR1cm5zOgorICAgMCBpZiBhIHN0cmluZyB3YXMgY29waWVkOworICAtMSBpZiB0 aGVyZSB3YXMgbm8gc3RyaW5nIHRvIGNvcHkuCisqLworaW50CitnZXRuY20ocyxuKSBjaGFyICpz OyBpbnQgbjsgeworICAgIGludCB5ID0gMDsJCQkJLyogQ2hhcmFjdGVyIGNvdW50ZXIgKi8KKyAg ICBpbnQgcXVvdGUgPSAwOworICAgIGludCBrcCA9IDA7CQkJCS8qIEJyYWNlIHVwLWRvd24gY291 bnRlciAqLworICAgIGludCBwcCA9IDA7CQkJCS8qIFBhcmVudGhlc2lzIHVwLWRvd24gY291bnRl ciAqLworI2lmbmRlZiBOT0RRTUFDUk8KKyAgICBpbnQgZHEgPSAwOwkJCQkvKiBEb3VibGVxdW90 ZSBjb3VudGVyICovCisjZW5kaWYgLyogTk9EUU1BQ1JPICovCisgICAgY2hhciAqczI7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogQ29weSBvZiBkZXN0aW5hdGlvbiBwb2ludGVyICovCisK KyAgICBzMiA9IHM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJbml0aWFsaXplIHN0 cmluZyBwb2ludGVycyAqLworICAgICpzID0gTlVMOyAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIGFuZCBkZXN0aW5hdGlvbiBidWZmZXIgKi8KKworICAgIC8qIGRlYnVnKEYwMTAsImdldG5j bSBlbnRyeSIsbWFjcFttYWNsdmxdLDApOyAqLworCisgICAgZm9yICh5ID0gMDsgICAgICAgICAg ICAgICAgICAgICAgICAgLyogTG9vcCBmb3IgbiBieXRlcyBtYXggKi8KKyAgICAgICAgIG1hY3Bb bWFjbHZsXSAmJiAqbWFjcFttYWNsdmxdICYmIHkgPCBuOworICAgICAgICAgeSsrLCBzKyssIG1h Y3BbbWFjbHZsXSsrKSB7CisKKyAgICAgICAgKnMgPSAqbWFjcFttYWNsdmxdOyAgICAgICAgICAg ICAvKiBHZXQgbmV4dCBjaGFyIGZyb20gbWFjcm8gZGVmICovCisKKyNpZm5kZWYgQ09NTUVOVAor LyoKKyAgVGhpcyBpcyB0byBhbGxvdyBxdW90aW5nIG9mIHBhcmVudGhlc2VzLCBjb21tYXMsIGV0 YywgaW4gZnVuY3Rpb24KKyAgYXJndW1lbnRzLCBidXQgaXQgYnJlYWtzIGp1c3QgYWJvdXQgZXZl cnl0aGluZyBlbHNlLiAgRE9OJ1QgUkVNT1ZFIFRISVMKKyAgQ09NTUVOVCEgIChPdGhlcndpc2Ug eW91J2xsIHdpbmQgdXAgYWRkaW5nIHRoZSBzYW1lIGNvZGUgYWdhaW4gYW5kIGJyZWFraW5nCisg IGV2ZXJ5dGhpbmcgYWdhaW4uKSAgPC0tIFRoZSBwcmVjZWRpbmcgd2FybmluZyBzaG91bGQgYmUg b2Jzb2xldGUgc2luY2UgdGhlCisgIHN0YXRlbWVudHMgYmVsb3cgaGF2ZSBiZWVuIGZpeGVkLCBi dXQgaW4gY2FzZSBvZiBmaXJlLCByZW1vdmUgdGhlICJuIiBmcm9tCisgIHRoZSA8Iz5pZm5kZWYg YWJvdmUuICBORVcgV0FSTklORzogY29kZSBhZGRlZCAxMiBBcHIgMjAwMiB0byBleGVtcHQgdGhl CisgIG9wZW5pbmcgYnJhY2UgaW4gXHtubm59IGZyb20gYmVpbmcgdHJlYXRlZCBhcyBhIHF1b3Rl ZCBicmFjZS4KKyovCisgICAgICAgIGlmICghcXVvdGUgJiYgKnMgPT0gQ01EUSkgeworICAgICAg ICAgICAgcXVvdGUgPSAxOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAg ICAgaWYgKHF1b3RlKSB7CisJICAgIGludCBub3RxdW90ZSA9IDA7CisgICAgICAgICAgICBxdW90 ZSA9IDA7CisJICAgIGlmICgqcyA9PSAneycpIHsJCS8qIENoZWNrIGZvciBce25ubn0gKDguMC4y MDMpICovCisJCWNoYXIgYywgKiBwOworCQlwID0gbWFjcFttYWNsdmxdICsgMTsKKwkJd2hpbGUg KChjID0gKnArKykpIHsKKwkJICAgIGlmIChpc2RpZ2l0KGMpKQorCQkgICAgICBjb250aW51ZTsK KwkJICAgIGVsc2UgaWYgKGMgPT0gJ30nKSB7CisJCQlub3RxdW90ZSsrOworCQkJYnJlYWs7CisJ CSAgICB9IGVsc2UgeworCQkJYnJlYWs7CisJCSAgICB9CisJCX0KKwkgICAgfQorCSAgICBpZiAo bm90cXVvdGUgPT0gMCkKKwkgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorI2VuZGlmIC8qIENP TU1FTlQgKi8KKworLyoKKyAgQWxsb3cgYnJhY2VzIGFyb3VuZCBtYWNybyBkZWZpbml0aW9uIHRv IHByZXZlbnQgY29tbWFzIGZyb20gYmVpbmcgdHVybmVkIHRvCisgIGVuZC1vZi1saW5lcyBhbmQg YWxzbyB0cmVhdCBhbnkgY29tbWFzIHdpdGhpbiBwYXJlbnMgYXMgdGV4dCBzbyB0aGF0CisgIG11 bHRpcGxlLWFyZ3VtZW50IGZ1bmN0aW9ucyB3b24ndCBjYXVzZSB0aGUgY29tbWFuZCB0byBicmVh ayBwcmVtYXR1cmVseS4KKyAgMTkgT2N0IDIwMDE6IFNpbWlsYXIgdHJlYXRtZW50IHdhcyBhZGRl ZCBmb3IgZG91YmxlcXVvdGVzLCBzbworCisgICAgIGRlZmluZSBmb28geyBlY2hvICJvbmUsIHR3 bywgdGhyZWUiIH0KKworICB3b3VsZCB3b3JrIGFzIGV4cGVjdGVkLiAgVGhpcyBkb2Vzbid0IHNl ZW0gdG8gaGF2ZSBicm9rZW4gYW55dGhpbmcgYnV0CisgIGlmIHNvbWV0aGluZyBjb21lcyB1cCBs YXRlciwgcmVidWlsZCB3aXRoIE5PRFFNQUNSTyBkZWZpbmVkLgorKi8KKyAgICAgICAgaWYgKCpz ID09ICd7Jykga3ArKzsgICAgICAgICAgICAvKiBDb3VudCBicmFjZXMgKi8KKyAgICAgICAgaWYg KCpzID09ICd9JyAmJiBrcCA+IDApIGtwLS07CisgICAgICAgIGlmICgqcyA9PSAnKCcpIHBwKys7 ICAgICAgICAgICAgLyogQ291bnQgcGFyZW50aGVzZXMuICovCisgICAgICAgIGlmICgqcyA9PSAn KScgJiYgcHAgPiAwKSBwcC0tOworI2lmbmRlZiBOT0RRTUFDUk8KKyNpZm5kZWYgQ09NTUVOVAor CS8qIFRvbyBtYW55IGZhbHNlIHBvc2l0aXZlcyAqLworCS8qIE5vLCBub3QgcmVhbGx5IC0tIHRo aXMgaXMgaW5kZWVkIHRoZSBiZXN0IHdlIGNhbiBkbyAqLworCS8qIFJldmVydGVkIHRvIHRoaXMg bWV0aG9kIFN1biBNYXkgMTEgMTg6NDM6NDUgMjAwMyAqLworCWlmICgqcyA9PSAnIicpIGRxID0g MSAtIGRxOyAgICAgLyogQWNjb3VudCBmb3IgZG91YmxlcXVvdGVzICovCisjZWxzZSAgLyogRnJp IEFwciAgNCAxMzoyMToyOSAyMDAzICovCisJLyogVGhlIGNvZGUgYmVsb3cgYnJlYWtzIHRoZSBT V0lUQ0ggc3RhdGVtZW50ICovCisJLyogVGhlcmUgaXMgbm8gd2F5IHRvIG1ha2UgdGhpcyB3b3Jr IC0tIGl0IHdvdWxkIHJlcXVpcmUgKi8KKwkvKiBidWlsZGluZyBpbiBhbGwgdGhlIGtub3dsZWRn ZSBvZiBjb21tYW5kIHBhcnNlci4gKi8KKyAgICAgICAgaWYgKGRibHF1byAmJiAoKnMgPT0gJyIn KSkgeyAgICAvKiBIYXZlIGRvdWJsZXF1b3RlICovCisgICAgICAgICAgICBpZiAoZHEgPT0gMSkg ewkJLyogQ2xvc2UgcXVvdGUgb25seSBpZi4uLiAqLworICAgICAgICAgICAgICAgIGlmICgoKiht YWNwW21hY2x2bF0rMSkgPT0gU1ApIHx8IC8qIGZvbGxvd2VkIGJ5IHNwYWNlIG9yLi4uICovCisJ CSAgICAoISoobWFjcFttYWNsdmxdKzEpKSB8fCAgICAgIC8qIGF0IGVuZCBvciAuLi4gKi8KKwkJ ICAgIC8qIE5leHQgY2hhciBpcyBjb21tYW5kIHNlcGFyYXRvci4uLiAqLworCQkgICAgLyogU3Vu IE1heSAxMSAxNzoyNDoxMiAyMDAzICovCisJCSAgICAoa3AgPCAxICYmIHBwIDwgMSAmJiAoKiht YWNwW21hY2x2bF0rMSkgPT0gJywnKSkKKwkJICAgICkJCSAgICAgCisgICAgICAgICAgICAgICAg ICBkcSA9IDA7CQkvKiBDbG9zZSB0aGUgcXVvdGUgKi8KKyAgICAgICAgICAgIH0gZWxzZSBpZiAo ZHEgPT0gMCkgeworICAgICAgICAgICAgICAgIC8qIE9wZW4gcXVvdGUgb25seSBpZiBhdCBiZWdp bm5pbmcgb3IgcHJlY2VkZWQgYnkgc3BhY2UgKi8KKyAgICAgICAgICAgICAgICBpZiAocyA+IHMy KSB7CisgICAgICAgICAgICAgICAgICAgIGlmICgqKHMtMSkgPT0gU1ApCisgICAgICAgICAgICAg ICAgICAgICAgZHEgPSAxOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocyA9PSBzMikgewor ICAgICAgICAgICAgICAgICAgICAgIGRxID0gMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICB9CisgICAgICAgIH0KKyNlbmRpZiAvKiBDT01NRU5UICovCisjZW5kaWYgLyogTk9EUU1B Q1JPICovCisgICAgICAgIGlmICgqcyA9PSAnLCcgJiYgcHAgPD0gMCAmJiBrcCA8PSAwCisjaWZu ZGVmIE5PRFFNQUNSTworICAgICAgICAgICAgJiYgZHEgPT0gMAorI2VuZGlmIC8qIE5PRFFNQUNS TyAqLworICAgICAgICAgICAgKSB7CisgICAgICAgICAgICBtYWNwW21hY2x2bF0rKzsgICAgICAg ICAgICAgLyogQ29tbWEgbm90IGluIHt9IG9yICgpICovCisgICAgICAgICAgICAvKiBkZWJ1ZyhG MTEwLCJuZXh0IGNtZCIscywwKTsgKi8KKyAgICAgICAgICAgIGtwID0gcHAgPSAwOyAgICAgICAg ICAgICAgICAvKiBzbyB3ZSBoYXZlIHRoZSBuZXh0IGNvbW1hbmQgKi8KKyAgICAgICAgICAgIGJy ZWFrOworICAgICAgICB9CisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogUmVhY2hlZCBlbmQuICovCisjaWZkZWYgQ09NTUVOVAorICAgIC8qIERPTidUIERPIFRISVMg LSBJVCBCUkVBS1MgRVZFUllUSElORyAqLworICAgICpzID0gTlVMOworI2VuZGlmIC8qIENPTU1F TlQgKi8KKyAgICBpZiAoKnMyID09IE5VTCkgeyAgICAgICAgICAgICAgICAgICAvKiBJZiBub3Ro aW5nIHdhcyBjb3BpZWQsICovCisgICAgICAgIC8qIGRlYnVnKEYxMDAsIlhYWCBnZXRuY20gZW9t IiwiIiwwKTsgKi8KKyAgICAgICAgcG9wY2x2bCgpOyAgICAgICAgICAgICAgICAgICAgICAvKiBw b3AgY29tbWFuZCBsZXZlbC4gKi8KKyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9IGVsc2UgeyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBvdGhlcndpc2UsIHRhY2sgQ1Igb250byBlbmQg Ki8KKyAgICAgICAgKnMrKyA9IENSOworICAgICAgICAqcyA9ICdcMCc7CisgICAgICAgIC8qIGRl YnVnKEYxMTAsIlhYWCBnZXRuY20gT0siLHMsMCk7ICovCisgICAgICAgIGlmIChtZWNobyAmJiBw ZmxhZykgICAgICAgICAgICAgLyogSWYgTUFDUk8gRUNITyBPTiwgZWNobyB0aGUgY21kICovCisg ICAgICAgICAgcHJpbnRmKCIlc1xuIixzMik7CisgICAgfQorICAgIHJldHVybigwKTsKK30KKwor LyogIEQgTyBNIEEgQyAgLS0gIERlZmluZSBhbmQgdGhlbiBleGVjdXRlIGEgbWFjcm8gKi8KKwor aW50Citkb21hYyhuYW1lLCBkZWYsIGZsYWdzKSBjaGFyICpuYW1lLCAqZGVmOyBpbnQgZmxhZ3M7 IHsKKyAgICBpbnQgeCwgbTsKKyNpZm5kZWYgTk9MT0NBTAorI2lmZGVmIE9TMgorICAgIGV4dGVy biBpbnQgdGVybV9pbzsKKyAgICBpbnQgdGVybV9pb19zYXYgPSB0ZXJtX2lvOworICAgIHRlcm1f aW8gPSAwOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIERpc2FibGUgVGVybWluYWwgRW11bGF0 b3IgSS9PICovCisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogTk9MT0NBTCAqLworICAgIG0g PSBtYWNsdmw7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEN1cnJlbnQgbWFjcm8gc3RhY2sg bGV2ZWwgKi8KKyAgICB4ID0gYWRkbWFjKG5hbWUsIGRlZik7ICAgICAgICAgICAgICAvKiBEZWZp bmUgYSBuZXcgbWFjcm8gKi8KKyAgICBpZiAoeCA+IC0xKSB7ICAgICAgICAgICAgICAgICAgICAg ICAvKiBJZiBzdWNjZXNzZnVsLCAqLworICAgICAgICBkb2RvKHgsTlVMTCxmbGFncyk7ICAgICAg ICAgICAgIC8qIHN0YXJ0IGl0IChpbmNyZW1lbnRzIG1hY2x2bCkuICovCisgICAgICAgIHdoaWxl IChtYWNsdmwgPiBtKSB7ICAgICAgICAgICAgLyogS2VlcCBnb2luZyB0aWxsIGRvbmUgd2l0aCBp dCwgKi8KKyAgICAgICAgICAgIGRlYnVnKEYxMDEsImRvbWFjIGxvb3AgbWFjbHZsIDEiLCIiLG1h Y2x2bCk7CisgICAgICAgICAgICBzc3RhdGUgPSAoQ0hBUikgcGFyc2VyKDEpOyAgLyogcGFyc2lu ZyAmIGV4ZWN1dGluZyBlYWNoIGNvbW1hbmQsICovCisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJk b21hYyBsb29wIG1hY2x2bCAyIiwiIixtYWNsdmwpOworICAgICAgICAgICAgaWYgKHNzdGF0ZSkg cHJvdG8oKTsgICAgICAgIC8qIGluY2x1ZGluZyBwcm90b2NvbCBjb21tYW5kcy4gKi8KKyAgICAg ICAgfQorICAgICAgICBkZWJ1ZyhGMTAxLCJkb21hYyBsb29wIGV4aXQgbWFjbHZsIiwiIixtYWNs dmwpOworICAgIH0KKyNpZm5kZWYgTk9MT0NBTAorI2lmZGVmIE9TMgorICAgIHRlcm1faW8gPSB0 ZXJtX2lvX3NhdjsKKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBOT0xPQ0FMICovCisgICAg cmV0dXJuKHN1Y2Nlc3MpOworfQorI2VuZGlmIC8qIE5PU1BMICovCisKKy8qCisgIEcgRSBUIE4g QyBUCisKKyAgR2V0IG5leHQgY29tbWFuZCBmcm9tIFRBS0UgKGNvbW1hbmQpIGZpbGUuCisKKyAg Q2FsbCB3aXRoOgorICAgcyAgICAgUG9pbnRlciB0byBidWZmZXIgdG8gcmVhZCBpbnRvCisgICBu ICAgICBMZW5ndGggb2YgYnVmZmVyCisgICBmICAgICBGaWxlIGRlc2NyaXB0b3Igb2YgZmlsZSB0 byByZWFkIGZyb20KKyAgIGZsYWcgIDAgPT0ga2VlcCBsaW5lIHRlcm1pbmF0b3Igb24gYW5kIGFs bG93IGNvbnRpbnVhdGlvbgorICAgICAgICAgMSA9PSBkaXNjYXJkIGxpbmUgdGVybWluYXRvciBh bmQgZG9uJ3QgYWxsb3cgY29udGludWF0aW9uCisKKyAgQ2FsbCB3aXRoIGZsYWcgPT0gMCB0byBy ZWFkIGEgY29tbWFuZCBmcm9tIGEgVEFLRSBmaWxlOworICBDYWxsIHdpdGggZmxhZyAhPSAwIHRv IHJlYWQgYSBsaW5lIGZyb20gYSBkaWFsaW5nIG9yIG5ldHdvcmsgZGlyZWN0b3J5LgorCisgIElu IGJvdGggY2FzZXMsIHRyYWlsaW5nIGNvbW1lbnRzIGFuZC9vciB0cmFpbGluZyB3aGl0ZXNwYWNl IGlzL2FyZSBzdHJpcHBlZC4KKyAgSWYgZmxhZyA9PSAwLCBjb250aW51ZWQgbGluZXMgYXJlIGNv bWJpbmVkIGludG8gb25lIGxpbmUuICBBIGNvbnRpbnVlZCBsaW5lCisgIGlzIG9uZSB0aGF0IGVu ZHMgaW4gaHlwZW4sIG9yIGFueSBsaW5lIGluIGEgImJsb2NrIiwgd2hpY2ggc3RhcnRzIHdpdGgg InsiCisgIGF0IHRoZSBlbmQgb2YgYSBsaW5lIGFuZCBlbmRzIHdpdGggYSBtYXRjaGluZyAifSIg YXQgdGhlIGJlZ2lubmluZyBvZiBhCisgIHN1YnNlcXVlbnQgbGluZTsgYmxvY2tzIG1heSBiZSBu ZXN0ZWQuCisKKyAgUmV0dXJuczoKKyAgIDAgaWYgYSBzdHJpbmcgd2FzIGNvcGllZCwKKyAgLTEg b24gRU9GLAorICAtMiBvbiBtYWxsb2MgZmFpbHVyZQorICAtMyBpZiBsaW5lIGlzIG5vdCBwcm9w ZXJseSB0ZXJtaW5hdGVkCisgIC00IGlmIChwb3NzaWJseSBjb250aW51ZWQpIGxpbmUgaXMgdG9v IGxvbmcuCisqLworc3RhdGljIGludCBscHhsZW4gPSAwOworCitpbnQKK2dldG5jdChzLG4sZixm bGFnKSBjaGFyICpzOyBpbnQgbjsgRklMRSAqZjsgaW50IGZsYWc7IHsKKyAgICBpbnQgaSA9IDAs IGxlbiA9IDAsIGJ1ZmxlbiA9IDA7CisgICAgY2hhciBjID0gTlVMLCBjYyA9IE5VTCwgY2NsID0g TlVMLCBjY3ggPSBOVUwsICpzMiA9IE5VTEw7CisgICAgY2hhciAqbHAgPSBOVUxMLCAqbHB4ID0g TlVMTCwgKmxwMiA9IE5VTEwsICpscDMgPSBOVUxMLCAqbGFzdGNvbW1hID0gTlVMTDsKKyAgICBj aGFyICogcHJldiA9IE5VTEw7CisgICAgaW50IGJjID0gMDsgICAgICAgICAgICAgICAgICAgICAg ICAgLyogQmxvY2sgY291bnRlciAqLworCisgICAgczIgPSBzOyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogUmVtZW1iZXIgb3JpZ2luYWwgcG9pbnRlciAqLworICAgIHByZXYgPSBzMjsJ CQkJLyogSGVyZSB0b28gKi8KKyAgICBidWZsZW4gPSBuOyAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBSZW1lbWJlciBvcmlnaW5hbCBidWZmZXIgbGVuZ3RoICovCisKKyAgICBpZiAobiA8IDAp CisgICAgICByZXR1cm4oLTIpOworCisgICAgLyogQWxsb2NhdGUgYSBsaW5lIGJ1ZmZlciBvbmx5 IGlmIHdlIGRvbid0IGhhdmUgb25lIHRoYXQncyBiaWcgZW5vdWdoICovCisKKyAgICBkZWJ1ZyhG MTExLCJnZXRuY3QiLGNraXRvYShscHhsZW4pLG4pOworCisgICAgaWYgKGxweCAmJiAobiA+IGxw eGxlbikpIHsgICAgICAgICAgLyogSGF2ZSBvbmUgYWxyZWFkeSAqLworICAgICAgICBkZWJ1ZyhG MTAxLCJnZXRuY3QgbmV3IGJ1ZmZlciIsIiIsbHB4bGVuKTsKKyAgICAgICAgZnJlZShscHgpOyAg ICAgICAgICAgICAgICAgICAgICAvKiBCdXQgaXQncyBub3QgYmlnIGVub3VnaCAqLworICAgICAg ICBscHggPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgIC8qIEZyZWUgY3VycmVudCBvbmUgKi8K KyAgICAgICAgbHB4bGVuID0gMDsKKyAgICB9CisgICAgaWYgKCFscHgpIHsgICAgICAgICAgICAg ICAgICAgICAgICAgLyogR2V0IG5ldyBvbmUgKi8KKyAgICAgICAgaWYgKCEobHB4ID0gKGNoYXIg KikgbWFsbG9jKG4pKSkgeworICAgICAgICAgICAgZGVidWcoRjEwMSwiZ2V0bmN0IG1hbGxvYyBm YWlsdXJlIiwiIiwwKTsKKyAgICAgICAgICAgIHByaW50ZigiP01lbW9yeSBhbGxvY2F0aW9uIGZh aWx1cmUgW2dldG5jdDolZF1cbiIsbik7CisgICAgICAgICAgICByZXR1cm4oLTIpOworICAgICAg ICB9CisgICAgICAgIGxweGxlbiA9IG47CisgICAgfQorICAgIGxwMiA9IGxweDsKKyNpZmRlZiBL TFVER0UKKyAgICAvKiBOT1RFOiBObyBsb25nZXIgdXNlZCBhcyBvZiAxNCBBdWcgMjAwMCAqLwor ICAgIGxwMisrOworI2VuZGlmIC8qIEtMVURHRSAqLworCisgICAgd2hpbGUgKDEpIHsgICAgICAg ICAgICAgICAgICAgICAgICAgLyogTG9vcCB0byByZWFkIGxpbmVzIGZyb20gZmlsZSAqLworICAg ICAgICBkZWJ1ZyhGMTAxLCJnZXRuY3Qgd2hpbGUgKDEpIiwiIixuKTsKKyAgICAgICAgaWYgKGZn ZXRzKGxwMixuLGYpID09IE5VTEwpIHsgICAvKiBSZWFkIGEgbGluZSBpbnRvIGxwMiAqLworICAg ICAgICAgICAgZGVidWcoRjExMCwiZ2V0bmN0IEVPRiIsczIsMCk7IC8qIEVPRiAqLworICAgICAg ICAgICAgZnJlZShscHgpOyAgICAgICAgICAgICAgICAgIC8qIEZyZWUgdGVtcG9yYXJ5IHN0b3Jh Z2UgKi8KKyAgICAgICAgICAgIGxweCA9IE5VTEw7CisgICAgICAgICAgICAqcyA9IE5VTDsgICAg ICAgICAgICAgICAgICAgLyogTWFrZSBkZXN0aW5hdGlvbiBiZSBlbXB0eSAqLworICAgICAgICAg ICAgcmV0dXJuKC0xKTsgICAgICAgICAgICAgICAgIC8qIFJldHVybiBmYWlsdXJlIGNvZGUgKi8K KyAgICAgICAgfQorCisjaWZuZGVmIE5PRElBTAorICAgICAgICBpZiAoZmxhZykgICAgICAgICAg ICAgICAgICAgICAgIC8qIENvdW50IHRoaXMgbGluZSAqLworICAgICAgICAgIGRpcmxpbmUrKzsK KyAgICAgICAgZWxzZQorI2VuZGlmIC8qIE5PRElBTCAqLworICAgICAgICAgIHRmbGluZVt0bGV2 ZWxdKys7CisgICAgICAgIGxlbiA9IHN0cmxlbihscDIpIC0gMTsgICAgICAgICAgLyogUG9zaXRp b24gb2YgbGluZSB0ZXJtaW5hdG9yICovCisgICAgICAgIGlmIChsZW4gPT0gMCAmJiBscDJbMF0g IT0gJ1xuJykgeyAvKiBMYXN0IGxpbmUgaW4gZmlsZSBoYXMgb25lIGNoYXIgKi8KKyAgICAgICAg ICAgIGxwMlsrK2xlbl0gPSAnXG4nOyAgICAgICAgICAvKiB0aGF0IGlzIG5vdCBhIG5ld2xpbmUg Ki8KKyAgICAgICAgICAgIGxwMltsZW5dID0gTlVMOworICAgICAgICB9CisgICAgICAgIGRlYnVn KEYwMTAsImdldG5jdCIsbHAyLDApOworICAgICAgICBpZiAobGVuIDwgMCkKKyAgICAgICAgICBs ZW4gPSAwOworICAgICAgICBpZiAodGVjaG8gJiYgcGZsYWcpICAgICAgICAgICAgIC8qIElmIFRB S0UgRUNITyBPTiwgKi8KKyAgICAgICAgICBwcmludGYoIiUzZC4gJXMiLCAgICAgICAgICAgICAv KiBlY2hvIGl0IHRoaXMgbGluZS4gKi8KKyNpZm5kZWYgTk9ESUFMCisgICAgICAgICAgICAgICAg IGZsYWcgPyBkaXJsaW5lIDoKKyNlbmRpZiAvKiBOT0RJQUwgKi8KKyAgICAgICAgICAgICAgICAg dGZsaW5lW3RsZXZlbF0sCisgICAgICAgICAgICAgICAgIGxwMgorICAgICAgICAgICAgICAgICAp OworICAgICAgICBscDMgPSBscDI7ICAgICAgICAgICAgICAgICAgICAgIC8qIFdvcmtpbmcgcG9p bnRlciAqLworICAgICAgICBpID0gbGVuOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEdldCBm aXJzdCBub253aGl0ZXNwYWNlIGNoYXJhY3RlciAqLworICAgICAgICB3aGlsZSAoaSA+IDAgJiYg KCpscDMgPT0gU1AgfHwgKmxwMyA9PSBIVCkpIHsKKyAgICAgICAgICAgIGktLTsKKyAgICAgICAg ICAgIGxwMysrOworICAgICAgICB9CisgICAgICAgIGlmIChpID09IDAgJiYgYmMgPiAwKSAgICAg ICAgICAgLyogQmxhbmsgbGluZSBpbiB7Li4ufSBibG9jayAqLworICAgICAgICAgIGNvbnRpbnVl OworCisgICAgICAgIC8qIElzb2xhdGUsIHJlbW92ZSwgYW5kIGNoZWNrIHRlcm1pbmF0b3IgKi8K KworICAgICAgICBjID0gbHAyW2xlbl07ICAgICAgICAgICAgICAgICAgIC8qIFZhbHVlIG9mIGxp bmUgdGVybWluYXRvciAqLworICAgICAgICAvKiBkZWJ1ZyhGMTAxLCJnZXRuY3QgdGVybWluYXRv ciIsIiIsYyk7ICovCisgICAgICAgIGlmIChjIDwgTEYgfHwgYyA+IENSKSB7ICAgICAgICAgLyog SXQncyBub3QgYSB0ZXJtaW5hdG9yICovCisgICAgICAgICAgICAvKiBkZWJ1ZyhGMTExLCJnZXRu Y3QgYmFkIGxpbmUiLGxwMixjKTsgKi8KKyAgICAgICAgICAgIGlmIChmZW9mKGYpICYmIGxlbiA+ IDAgJiYgbGVuIDwgbikgeworICAgICAgICAgICAgICAgIC8qIEtsdWRnZSBBbGVydC4uLiAqLwor ICAgICAgICAgICAgICAgIGlmICghcXVpZXQpCisgICAgICAgICAgICAgICAgICBwcmludGYoIldB Uk5JTkc6IExhc3QgbGluZSBvZiAlcyBsYWNrcyB0ZXJtaW5hdG9yXG4iLAorICAgICAgICAgICAg ICAgICAgICAgICAgIHMyID09IGNtZGJ1ZiA/ICJjb21tYW5kIGZpbGUiIDogImRpcmVjdG9yeSBm aWxlIik7CisgICAgICAgICAgICAgICAgYyA9IGxwMlsrK2xlbl0gPSAnXG4nOyAgLyogTm8gYmln IGRlYWwgLSBzdXBwbHkgb25lLiAqLworICAgICAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAg ICAgICAgIC8qIFNvbWV0aGluZydzIHdyb25nLCBmYWlsLiAqLworICAgICAgICAgICAgICAgIGZy ZWUobHB4KTsKKyAgICAgICAgICAgICAgICBscHggPSBOVUxMOworICAgICAgICAgICAgICAgIHJl dHVybigtMyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLyogVHJpbSB0cmFp bGluZyB3aGl0ZXNwYWNlICovCisKKyAgICAgICAgZm9yIChpID0gbGVuIC0gMTsgaSA+IC0xICYm IGxwMltpXSA8PSBTUDsgaS0tKSAvKiBUcmltICovCisgICAgICAgICAgOworICAgICAgICAvKiBk ZWJ1ZyhGMTAxLCJnZXRuY3QgaSIsIiIsaSk7ICovCisgICAgICAgIGxwMltpKzFdID0gTlVMOyAg ICAgICAgICAgICAgICAgLyogVGVybWluYXRlIHRoZSBzdHJpbmcgKi8KKyAgICAgICAgLyogZGVi dWcoRjExMCwiZ2V0bmN0IGxwMiIsbHAyLDApOyAqLworICAgICAgICBscCA9IGxwMjsgICAgICAg ICAgICAgICAgICAgICAgIC8qIE1ha2UgYSB3b3JraW5nIHBvaW50ZXIgKi8KKworICAgICAgICAv KiBSZW1vdmUgdHJhaWxpbmcgb3IgZnVsbC1saW5lIGNvbW1lbnQgKi8KKworICAgICAgICB3aGls ZSAoKGNjID0gKmxwKSkgeworICAgICAgICAgICAgaWYgKGNjID09ICc7JyB8fCBjYyA9PSAnIycp IHsgLyogQ29tbWVudCBpbnRyb2R1Y2VyPyAqLworICAgICAgICAgICAgICAgIGlmIChscCA9PSBs cDIpIHsgICAgICAgIC8qIEZpcnN0IGNoYXIgb24gbGluZSAqLworICAgICAgICAgICAgICAgICAg ICAqbHAgPSBOVUw7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg IH0gZWxzZSBpZiAoKihscCAtIDEpID09IFNQIHx8ICoobHAgLSAxKSA9PSBIVCkgeworICAgICAg ICAgICAgICAgICAgICBscC0tOworICAgICAgICAgICAgICAgICAgICAqbHAgPSBOVUw7ICAvKiBP ciBwcmVjZWRlZCBieSB3aGl0ZXNwYWNlICovCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxwKys7CisgICAg ICAgIH0KKyAgICAgICAgaWYgKGxwID4gbHAyKQorICAgICAgICAgIGxwLS07ICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIEJhY2sgdXAgb3ZlciB0aGUgTlVMICovCisKKyAgICAgICAgLyogTm93 IHRyaW0gYW55IHNwYWNlIHRoYXQgcHJlY2VkZWQgdGhlIGNvbW1lbnQgKi8KKworICAgICAgICB3 aGlsZSAoKCpscCA9PSBTUCB8fCAqbHAgPT0gSFQpICYmIGxwID49IGxwMikgeworICAgICAgICAg ICAgKmxwID0gTlVMOworICAgICAgICAgICAgaWYgKGxwIDw9IGxwMikKKyAgICAgICAgICAgICAg YnJlYWs7CisgICAgICAgICAgICBscC0tOworICAgICAgICB9CisgICAgICAgIC8qIGRlYnVnKEYx MTAsImdldG5jdCBjb21tZW50IHRyaW1tZWQiLGxwMiwwKTsgKi8KKworICAgICAgICBsZW4gPSBz dHJsZW4obHAyKTsgICAgICAgICAgICAgIC8qIExlbmd0aCBhZnRlciB0cmltbWluZyAqLworCisg ICAgICAgIGlmIChuIC0gbGVuIDwgMikgeyAgICAgICAgICAgICAgLyogQ2hlY2sgcmVtYWluaW5n IHNwYWNlICovCisgICAgICAgICAgICBkZWJ1ZyhGMTExLCJnZXRuY3QgY29tbWFuZCB0b28gbG9u ZyIsczIsYnVmbGVuKTsKKyAgICAgICAgICAgIHByaW50ZigiP0xpbmUgdG9vIGxvbmcsIG1heGlt dW0gbGVuZ3RoOiAlZC5cbiIsYnVmbGVuKTsKKyAgICAgICAgICAgIGZyZWUobHB4KTsKKyAgICAg ICAgICAgIHJldHVybigtNCk7CisgICAgICAgIH0KKyAgICAgICAgY2NsID0gKGxlbiA+IDApID8g bHAyW2xlbi0xXSA6IDA7ICAgICAvKiBMYXN0IGNoYXJhY3RlciBpbiBsaW5lICovCisgICAgICAg IGNjeCA9IChsZW4gPiAxKSA/IGxwMltsZW4tMl0gOiAwOyAgICAgLyogUGVudWx0aW1hdGUgY2hh ciBpbiBsaW5lICovCisKKyNpZmRlZiBDT01NRU5UCisgICAgICAgIC8qIExpbmUgY29udGFpbmlu ZyBvbmx5IHdoaXRlc3BhY2UgYW5kICwtICovCisgICAgICAgIGlmICgobGVuID4gMSkgJiYgKGxw MyA9PSBscDIrbGVuLTIpICYmIChjY2wgPT0gJy0nKSAmJiAoY2N4ID09ICcsJykpCisgICAgICAg ICAgY29udGludWU7CisjZW5kaWYgLyogQ09NTUVOVCAqLworCisjaWZkZWYgS0xVREdFCisvKgor ICBJZiBpdCBpcyBhIGNvbW1hbmQgYW5kIGl0IGJlZ2lucyB3aXRoIGEgdG9rZW4gKGxpa2UgISBv ciAuKSB0aGF0IGlzIG5vdAorICBmb2xsb3dlZCBieSBhIHNwYWNlLCBpbnNlcnQgYSBzcGFjZSBu b3c7IG90aGVyd2lzZSBjbWtleSgpIGNhbiBnZXQgbWlnaHR5CisgIGNvbmZ1c2VkLgorKi8KKyAg ICAgICAgaWYgKHMgPT0gczIgJiYgIWZsYWcpIHsKKyAgICAgICAgICAgIGNoYXIgKnAgPSB0b2t0 YWI7CisgICAgICAgICAgICB3aGlsZSAoKnApIHsKKyAgICAgICAgICAgICAgICBpZiAoKnAgPT0g KmxwMyAmJiAqKHArMSkgIT0gU1ApIHsKKyAgICAgICAgICAgICAgICAgICAgZGVidWcoRjExMCwi Z2V0bmN0IHRva2VuIixwLDApOworICAgICAgICAgICAgICAgICAgICAqbHAzLS0gPSBTUDsKKyAg ICAgICAgICAgICAgICAgICAgKmxwMyA9ICpwOworICAgICAgICAgICAgICAgICAgICBpZiAobHAz IDwgbHAyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBscDItLTsKKyAgICAgICAgICAgICAg ICAgICAgICAgIGxlbisrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgcCsr OworICAgICAgICAgICAgfQorICAgICAgICB9CisjZW5kaWYgLyogS0xVREdFICovCisgICAgICAg IGxwID0gbHAyOworCisgICAgICAgIHdoaWxlICgoKnMrKyA9ICpscCsrKSkgICAgICAgICAgLyog Q29weSByZXN1bHQgdG8gdGFyZ2V0IGJ1ZmZlciAqLworICAgICAgICAgIG4tLTsgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIGFjY291bnRpbmcgZm9yIGxlbmd0aCAqLworICAgICAgICBzLS07 ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEJhY2sgdXAgb3ZlciB0aGUgTlVMICovCisK KyAgICAgICAgLyogQ2hlY2sgd2hldGhlciB0aGlzIGxpbmUgaXMgY29udGludWVkICovCisKKyAg ICAgICAgaWYgKGZsYWcpICAgICAgICAgICAgICAgICAgICAgICAvKiBObyBsaW5lIGNvbnRpbnVh dGlvbiB3aGVuIGZsYWc9MSAqLworICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAg ICAgIC8qIFNvIGJyZWFrIG91dCBvZiByZWFkLWxpbmVzIGxvb3AgKi8KKworI2lmZGVmIENPTU1F TlQKKyAgICAgICAgZGVidWcoRjAwMCwiZ2V0bmN0IGZpcnN0IGNoYXIiLCIiLCpscDMpOworICAg ICAgICBkZWJ1ZyhGMDAwLCJnZXRuY3QgbGFzdCBjaGFyIiwiIixjY2wpOworICAgICAgICBkZWJ1 ZyhGMDAwLCJnZXRuY3QgbmV4dC10by1sYXN0IGNoYXIiLCIiLGNjeCk7CisjZW5kaWYgLyogQ09N TUVOVCAqLworCisgICAgICAgIGlmIChiYyA+IDAgJiYgKmxwMyA9PSAnfScpIHsgICAgLyogRmly c3QgY2hhciBvbiBsaW5lIGlzICd9JyAqLworICAgICAgICAgICAgYmMtLTsJCQkvKiBEZWNyZW1l bnQgYmxvY2sgY291bnRlciAqLworICAgICAgICB9CisKKyAgICAgICAgaWYgKGJjID09IDAgJiYg ICAgICAgICAgICAgICAgICAvKiBMaW5lIGlzIGNvbnRpbnVlZCBpZiBiYyA+IDAgKi8KKyNpZmRl ZiBDT01NRU5UCisgICAgICAgICAgICAvKiBOb3Qgc3VwcG9ydGVkIGFzIG9mIEMtS2VybWl0IDYu MCAqLworICAgICAgICAgICAgY2NsICE9IENNRFEgJiYgICAgICAgICAgICAgIC8qIG9yIGxpbmUg ZW5kcyB3aXRoIENNRFEgKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgICAgICAgICBjY2wg IT0gJy0nICAmJiAgICAgICAgICAgICAgLyogb3IgbGluZSBlbmRzIHdpdGggZGFzaCAqLworICAg ICAgICAgICAgY2NsICE9ICd7JykgICAgICAgICAgICAgICAgIC8qIG9yIGxpbmUgZW5kcyB3aXRo IG9wZW5pbmcgYnJhY2UgKi8KKyAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAg ICAvKiBOb25lIG9mIHRob3NlLCB3ZSdyZSBkb25lLiAqLworCisgICAgICAgIGlmIChjY2wgPT0g Jy0nIHx8IGNjbCA9PSAneycpICAgLyogQ29udGludWF0aW9uIGNoYXJhY3RlciAqLworICAgICAg ICAgIGlmIChjY3ggPT0gQ01EUSkgICAgICAgICAgICAgIC8qIEJ1dCBpdCdzIHF1b3RlZCAqLwor ICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgIC8qIHNvIGlnbm9yZSBpdCAq LworCisgICAgICAgIGlmIChjY2wgPT0gJ3snKSB7ICAgICAgICAgICAgICAgLyogTGFzdCBjaGFy IG9uIGxpbmUgaXMgJ3snPyAqLworICAgICAgICAgICAgYmMrKzsgICAgICAgICAgICAgICAgICAg ICAgIC8qIENvdW50IHRoZSBibG9jayBvcGVuZXIuICovCisgICAgICAgIH0gZWxzZSBpZiAoY2Ns ID09ICctJykgeyAgICAgICAgLyogRXhwbGljaXQgY29udGludWU/ICovCisgICAgICAgICAgICBj aGFyIGMsICogc3M7CisgICAgICAgICAgICBpbnQgc3RhdGUgPSAwLCBubjsKKyAgICAgICAgICAg IHMtLTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBZZXMsIGJhY2sgdXAgb3ZlciB0ZXJtaW5h dG9ycyAqLworICAgICAgICAgICAgbisrOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFuZCBv dmVyIGNvbnRpbnVhdGlvbiBjaGFyYWN0ZXIgKi8KKyAgICAgICAgICAgIG5uID0gbjsgICAgICAg ICAgICAgICAgICAgICAvKiBTYXZlIGN1cnJlbnQgY291bnQgKi8KKyAgICAgICAgICAgIHNzID0g czsgICAgICAgICAgICAgICAgICAgICAvKiBhbmQgcG9pbnRlciAqLworICAgICAgICAgICAgcy0t OyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEJhY2sgdXAgb3ZlciBkYXNoICovCisgICAgICAg ICAgICBuKys7CisgICAgICAgICAgICB3aGlsZSAoc3RhdGUgPCAyICYmIHMgPj0gcHJldikgeyAv KiBDaGVjayBmb3IgInssLSIgKi8KKyAgICAgICAgICAgICAgICBuKys7CisgICAgICAgICAgICAg ICAgYyA9ICpzLS07CisgICAgICAgICAgICAgICAgaWYgKGMgPD0gU1ApCisgICAgICAgICAgICAg ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBpZiAoYyAhPSAnLCcgJiYgYyAhPSAneycp CisgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHN0YXRl KSB7CisgICAgICAgICAgICAgICAgICBjYXNlIDA6ICAgICAgICAgICAgICAgLyogTG9va2luZyBm b3IgY29tbWEgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT0gJywnKQorICAgICAgICAg ICAgICAgICAgICAgIHN0YXRlID0gMTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICAgICAgICAgICBjYXNlIDE6ICAgICAgICAgICAgICAgLyogTG9va2luZyBmb3IgbGVmdCBi cmFjZSAqLworICAgICAgICAgICAgICAgICAgICBpZiAoYyA9PSAneycpIHsKKyAgICAgICAgICAg ICAgICAgICAgICAgIHN0YXRlID0gMjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHMgKz0gMjsK KyAgICAgICAgICAgICAgICAgICAgICAgICpzID0gTlVMOworICAgICAgICAgICAgICAgICAgICAg ICAgYmMrKzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVh azsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc3Rh dGUgIT0gMikgeyBzID0gc3M7IG4gPSBubjsgfQorICAgICAgICAgICAgKnMgPSBOVUw7CisgICAg ICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogTm9uZSBvZiB0aG9zZSBidXQg KGJjID4gMCkgKi8KKyAgICAgICAgICAgIGxhc3Rjb21tYSA9IHM7CisgICAgICAgICAgICAqcysr ID0gJywnOyAgICAgICAgICAgICAgICAgLyogYW5kIGluc2VydCBhIGNvbW1hICovCisgICAgICAg ICAgICBuLS07CisgICAgICAgIH0KKyNpZmRlZiBDT01NRU5UCisgICAgICAgIGRlYnVnKEYxMDEs ImdldG5jdCBiYyIsIiIsYmMpOworICAgICAgICBkZWJ1ZyhGMTAwLCJnZXRuY3QgY29udGludWVk IiwiIiwwKTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisKKyAgICAgICAgKnMgPSBOVUw7CisgICAg ICAgIHByZXYgPSBzOworCisgICAgfSAvKiByZWFkLWxpbmVzIHdoaWxlIGxvb3AgKi8KKworICAg IGlmIChsYXN0Y29tbWEpCisgICAgICAqbGFzdGNvbW1hID0gU1A7CisgICAgaWYgKCFmbGFnKSAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogVGFjayBsaW5lIHRlcm1pbmF0b3IgYmFjayBvbiAq LworICAgICAgKnMrKyA9IGM7CisgICAgKnMrKyA9IE5VTDsgICAgICAgICAgICAgICAgICAgICAg ICAgLyogVGVybWluYXRlIHRoZSBzdHJpbmcgKi8KKyAgICB1bnRhYihzMik7ICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBEb25lLCBjb252ZXJ0IHRhYnMgdG8gc3BhY2VzICovCisjaWZkZWYg REVCVUcKKyAgICBpZiAoIWZsYWcpIHsKKyAgICAgICAgZGVidWcoRjAxMCwiQ01EKEYpIixzMiww KTsKKyAgICB9CisjZW5kaWYgLyogREVCVUcgKi8KKyAgICBmcmVlKGxweCk7ICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBGcmVlIHRlbXBvcmFyeSBzdG9yYWdlICovCisgICAgcmV0dXJuKDAp OyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmV0dXJuIHN1Y2Nlc3MgKi8KK30KKworVk9J RAorc2hvc3RhY2soKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIER1bXAgdGhlIGNv bW1hbmQgc3RhY2sgKi8KKyAgICBpbnQgaTsKKyAgICBjaGFyICpwOworI2lmbmRlZiBOT1NQTAor ICAgIGZvciAoaSA9IGNtZGx2bDsgaSA+IDA7IGktLSkgeworICAgICAgICBpZiAoY21kc3RrW2ld LnNyYyA9PSBDTURfVEYpIHsKKyAgICAgICAgICAgIHAgPSB0Zm5hbVtjbWRzdGtbaV0ubHZsXTsK KyAgICAgICAgICAgIGlmICh6Zm5xZnAocCxUTVBCVUZTSVosdG1wYnVmKSkKKyAgICAgICAgICAg ICAgcCA9IHRtcGJ1ZjsKKyAgICAgICAgICAgIHByaW50ZigiICUyZC4gRmlsZSAgOiAlcyAobGlu ZSAlZClcbiIsCisgICAgICAgICAgICAgICAgICAgaSwKKyAgICAgICAgICAgICAgICAgICBwLAor ICAgICAgICAgICAgICAgICAgIHRmbGluZVtjbWRzdGtbaV0ubHZsXQorICAgICAgICAgICAgICAg ICAgICk7CisgICAgICAgIH0gZWxzZSBpZiAoY21kc3RrW2ldLnNyYyA9PSBDTURfTUQpIHsKKyAg ICAgICAgICAgIGNoYXIgKiBtOworICAgICAgICAgICAgbSA9IG1fYXJnW2NtZHN0a1tpXS5sdmxd WzBdOyAvKiBOYW1lIG9mIHRoaXMgbWFjcm8gKi8KKyAgICAgICAgICAgIGlmIChpID4gMCkgeyAg ICAgICAgICAgICAgICAgLyogU3BlY2lhbCBoYW5kbGluZyBmb3IgMi1sZXZlbCAqLworICAgICAg ICAgICAgICAgIGNoYXIgKnM7ICAgICAgICAgICAgICAgICAvKiBidWlsdC1pbiBtYWNyb3MuLi4g Ki8KKyAgICAgICAgICAgICAgICBzID0gbV9hcmdbY21kc3RrW2ktMV0ubHZsXVswXTsgLyogTmFt ZSBuZXh0IGxldmVsIHVwICovCisgICAgICAgICAgICAgICAgaWYgKHMgJiYgY21kc3RrW2ktMV0u c3JjID09IENNRF9NRCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIXN0cmNtcChzLCJfZm9y eCIpKQorICAgICAgICAgICAgICAgICAgICAgIG0gPSAiRk9SIjsKKyAgICAgICAgICAgICAgICAg ICAgZWxzZSBpZiAoIXN0cmNtcChzLCJfeGlmIikpCisgICAgICAgICAgICAgICAgICAgICAgbSA9 ICJYSUYiOworICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICghc3RyY21wKHMsIl93aGlsZSIp KQorICAgICAgICAgICAgICAgICAgICAgIG0gPSAiV0hJTEUiOworICAgICAgICAgICAgICAgICAg ICBlbHNlIGlmICghc3RyY21wKHMsIl9zd2l0eCIpKQorICAgICAgICAgICAgICAgICAgICAgIG0g PSAiU1dJVENIIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAg ICBwcmludGYoIiAlMmQuIE1hY3JvIDogJXNcbiIsaSxtKTsKKyAgICAgICAgfSBlbHNlIGlmIChj bWRzdGtbaV0uc3JjID09IENNRF9LQikgeworICAgICAgICAgICAgcHJpbnRmKCIgJTJkLiBQcm9t cHQ6XG4iLGkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcHJpbnRmKCIgJTJkLiBF UlJPUiA6IENvbW1hbmQgc291cmNlIHVua25vd25cbiIsaSk7CisgICAgICAgIH0KKyAgICB9Cisj ZWxzZQorICAgIGZvciAoaSA9IHRsZXZlbDsgaSA+IC0xOyBpLS0pIHsKKyAgICAgICAgcCA9IHRm bmFtW2ldOworICAgICAgICBpZiAoemZucWZwKHAsVE1QQlVGU0laLHRtcGJ1ZikpCisgICAgICAg ICAgcCA9IHRtcGJ1ZjsKKyAgICAgICAgcHJpbnRmKCIgJTJkLiBGaWxlICA6ICVzIChsaW5lICVk KVxuIiwKKyAgICAgICAgICAgICAgIGksCisgICAgICAgICAgICAgICBwLAorICAgICAgICAgICAg ICAgdGZsaW5lW2ldCisgICAgICAgICAgICAgICApOworICAgIH0KKyNlbmRpZiAvKiBOT1NQTCAq LworICAgIGlmIChpID09IDApCisgICAgICBwcmludGYoIiAlMmQuIFByb21wdDogKHRvcCBsZXZl bClcbiIsMCk7Cit9CisKKy8qIEZvciBjb21tYW5kIGVycm9yIG1lc3NhZ2VzIC0gYXZvaWQgZHVt cGluZyBvdXQgdGhlIGNvbnRlbnRzIG9mIHNvbWUgKi8KKy8qIHNvbWUgaHVnZSBGT1IgbG9vcCBp ZiBpdCBjb250YWlucyBhIHN5bnRheCBlcnJvci4gKi8KKworc3RhdGljIGNoYXIgKgorY21kZGlz cGxheShzLCBjeCkgY2hhciAqIHM7IGludCBjeDsgeworICAgIHN0YXRpYyBjaGFyIGJ1Zls4MF07 CisgICAgaWYgKChpbnQpc3RybGVuKHMpID4gNzApIHsKKwlzcHJpbnRmKGJ1ZiwiJS42NHMuLi4i LHMpOwkvKiBTQUZFICovCisJcyA9IGJ1ZjsKKyAgICB9CisgICAgcmV0dXJuKHMpOworfQorCitz dGF0aWMgVk9JRAorY21kZXJyKCkgeworICAgIGlmICh4Y21kc3JjID4gMCkgeworCXN3aXRjaCAo Y21kX2VycikgewkJLyogU0VUIENPTU1BTkQgRVJST1ItRElTUExBWSAqLworCSAgY2FzZSAwOgor CSAgICBicmVhazsKKwkgIGNhc2UgMToKKwkgIGNhc2UgMjoKKwkgICAgaWYgKHRsZXZlbCA+IC0x KSB7CisjaWZuZGVmIE5PU1BMCisJCWlmICh4Y21kc3JjID09IDIpCisJCSAgcHJpbnRmKAorIklu IG1hY3JvIG9yIGJsb2NrIGRlZmluZWQgaW4gZmlsZTogJXMgc3RhcnRpbmcgYWJvdXQgbGluZSAl ZFxuIiwKKwkJCSB0Zm5hbVt0bGV2ZWxdID8gdGZuYW1bdGxldmVsXSA6ICIiLCB0ZmxpbmVbdGxl dmVsXQorCQkJICk7CisJCWVsc2UKKyNlbmRpZiAvKiBOT1NQTCAqLworCQkgIHByaW50ZigiRmls ZTogJXMsIExpbmU6ICVkXG4iLAorCQkJIHRmbmFtW3RsZXZlbF0gPyB0Zm5hbVt0bGV2ZWxdIDog IiIsIHRmbGluZVt0bGV2ZWxdCisJCQkgKTsKKwkgICAgfQorI2lmbmRlZiBOT1NQTAorCSAgICBp ZiAoY21kX2VyciA9PSAyKSB7CisJCWlmIChjbWRzdGtbY21kbHZsXS5zcmMgPT0gQ01EX01EKSB7 IC8qIEV4ZWN1dGluZyBhIG1hY3JvPyAqLworCQkgICAgaW50IG07CisJCSAgICBtID0gY21kc3Rr W2NtZGx2bF0ubHZsOworCQkgICAgaWYgKG1sb29rKG1hY3RhYixtX2FyZ1ttXVswXSxubWFjKSA+ PSAwKQorCQkgICAgICBwcmludGYoIk1hY3JvIG5hbWU6ICVzXG4iLCBtX2FyZ1ttXVswXSk7CisJ CX0KKwkgICAgfQorI2VuZGlmIC8qIE5PU1BMICovCisJICAgIGJyZWFrOworCisJICBjYXNlIDM6 CisJICAgIHByaW50ZigiQ29tbWFuZCBzdGFjazpcbiIpOworCSAgICBzaG9zdGFjaygpOwkJCSAg ICAKKwl9CisgICAgfQorfQorCisvKiAgUCBBIFIgUyBFIFIgIC0tICBUb3AtbGV2ZWwgaW50ZXJh Y3RpdmUgY29tbWFuZCBwYXJzZXIuICAqLworCisvKgorICBDYWxsIHdpdGg6CisgICAgbSA9IDAg Zm9yIG5vcm1hbCBiZWhhdmlvcjoga2VlcCBwYXJzaW5nIGFuZCBleGVjdXRpbmcgY29tbWFuZHMK KyAgICAgICAgICB1bnRpbCBhbiBhY3Rpb24gY29tbWFuZCBpcyBwYXJzZWQsIHRoZW4gcmV0dXJu IHdpdGggYQorICAgICAgICAgIEtlcm1pdCBzdGFydC1zdGF0ZSBhcyB0aGUgdmFsdWUgb2YgdGhp cyBmdW5jdGlvbi4KKyAgICBtID0gMSB0byBwYXJzZSBvbmx5IG9uZSBjb21tYW5kLCBjYW4gYWxz byBiZSB1c2VkIHRvIGNhbGwgcGFyc2VyKCkKKyAgICAgICAgICByZWN1cnNpdmVseS4KKyAgICBt ID0gMiB0byByZWFkIGJ1dCBkbyBub3QgZXhlY3V0ZSBvbmUgY29tbWFuZC4KKyAgSW4gYWxsIGNh c2VzLCBwYXJzZXIoKSByZXR1cm5zOgorICAgIDAgICAgIGlmIG5vIEtlcm1pdCBwcm90b2NvbCBh Y3Rpb24gcmVxdWlyZWQKKyAgICA+IDAgICB3aXRoIGEgS2VybWl0IHByb3RvY29sIHN0YXJ0LXN0 YXRlLgorICAgIDwgMCAgIHVwb24gZXJyb3IuCisqLworaW50CitwYXJzZXIobSkgaW50IG07IHsK KyAgICBpbnQgdGZjb2RlLCB4eCwgeXksIHp6OyAgICAgICAgICAgICAvKiBXb3JrZXJzICovCisg ICAgaW50IGlzX3RuID0gMDsKKyAgICBpbnQgY2Rsb3N0ID0gMDsKKworI2lmbmRlZiBOT1NQTAor ICAgIGludCBpbmxldmVsOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIExldmVsIHdlIHdlcmUg Y2FsbGVkIGF0ICovCisgICAgZXh0ZXJuIGludCBhc2tmbGFnLCBlY2hvc3RhcnM7CisjZW5kaWYg LyogTk9TUEwgKi8KKyAgICBjaGFyICpjYnA7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBD b21tYW5kIGJ1ZmZlciBwb2ludGVyICovCisjaWZkZWYgTUFDCisgICAgZXh0ZXJuIGNoYXIgKmxm aWxlczsgICAgICAgICAgICAgICAgLyogRmFrZSBleHRlcm4gY2FzdCAqLworI2VuZGlmIC8qIE1B QyAqLworICAgIGV4dGVybiBpbnQgaW50ZXJydXB0ZWQ7CisjaWZuZGVmIE5PWEZFUgorICAgIGV4 dGVybiBpbnQgc25kY21kLCBnZXRjbWQsIGZhdGFsaW8sIGNsZWFycnE7CisjZW5kaWYgLyogTk9Y RkVSICovCisKKyNpZmRlZiBBTUlHQQorICAgIHJlcXJlcygpOyAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIFJlc3RvcmUgQW1pZ2FET1MgcmVxdWVzdG9ycyAqLworI2VuZGlmIC8qIEFNSUdB ICovCisKKyNpZmRlZiBPUzIKKyAgICBpZiAoY3Vyc29yX3NhdmUgPiAtMSkgeyAgICAgICAgICAg ICAvKiBSZXN0b3JlIGN1cnNvciBpZiBpdCB3YXMgKi8KKyAgICAgICAgY3Vyc29yZW5hW1ZDTURd ID0gY3Vyc29yX3NhdmU7ICAvKiB0dXJuZWQgb2ZmIGR1cmluZyBmaWxlIHRyYW5zZmVyICovCisg ICAgICAgIGN1cnNvcl9zYXZlID0gLTE7CisgICAgfQorI2VuZGlmIC8qIE9TMiAqLworCisjaWZk ZWYgSUtTREIKKyAgICBpZiAoaWtkYm9wZW4pIHNsb3RzdGF0ZSh3aGF0LCJDT01NQU5EIFBST01Q VCIsIiIsIiIpOyAvKiBJS1NEIGRhdGFiYXNlICovCisjZW5kaWYgLyogSUtTREIgKi8KKworICAg IGlzX3RuID0gKGxvY2FsICYmIG5ldHdvcmsgJiYgSVNfVEVMTkVUKCkpIHx8CisgICAgICAoIWxv Y2FsICYmIHNzdGVsbmV0KTsKKworICAgIGlmICgheGNtZHNyYykgICAgICAgICAgICAgICAgICAg ICAgIC8qIElmIGF0IHRvcCAoaW50ZXJhY3RpdmUpIGxldmVsIC4uLiAqLworICAgICAgY29uY2Io KGNoYXIpZXNjYXBlKTsgICAgICAgICAgICAgIC8qIHB1dCBjb25zb2xlIGluICdjYnJlYWsnIG1v ZGUuICovCisKKyNpZmRlZiBDS19UTVBESVIKKy8qIElmIHdlIHdlcmUgY2QnZCB0ZW1wb3Jhcmls eSB0byBhbm90aGVyIGRldmljZSBvciBkaXJlY3RvcnkgLi4uICovCisgICAgaWYgKGZfdG1wZGly KSB7CisgICAgICAgIGludCB4OworICAgICAgICB4ID0gemNoZGlyKChjaGFyICopIHNhdmRpcik7 ICAgIC8qIC4uLiByZXN0b3JlIHByZXZpb3VzIGRpcmVjdG9yeSAqLworICAgICAgICBmX3RtcGRp ciA9IDA7ICAgICAgICAgICAgICAgICAgIC8qIGFuZCByZW1lbWJlciB3ZSBkaWQgaXQuICovCisg ICAgICAgIGRlYnVnKEYxMTEsInBhcnNlciB0bXBkaXIgcmVzdG9yaW5nIixzYXZkaXIseCk7Cisg ICAgfQorI2VuZGlmIC8qIENLX1RNUERJUiAqLworCisjaWZuZGVmIE5PU1BMCisgICAgaW5sZXZl bCA9IGNtZGx2bDsgICAgICAgICAgIC8qIEN1cnJlbnQgbWFjcm8gbGV2ZWwgKi8KKyNpZmRlZiBE RUJVRworICAgIGlmIChkZWJsb2cpIHsKKyAgICAgICAgZGVidWcoRjEwMSwiJnBhcnNlciBlbnRy eSBtYWNsdmwiLCIiLG1hY2x2bCk7CisgICAgICAgIGRlYnVnKEYxMDEsIiZwYXJzZXIgZW50cnkg aW5sZXZlbCIsIiIsaW5sZXZlbCk7CisgICAgICAgIGRlYnVnKEYxMDEsIiZwYXJzZXIgZW50cnkg dGxldmVsIiwiIix0bGV2ZWwpOworICAgICAgICBkZWJ1ZyhGMTAxLCImcGFyc2VyIGVudHJ5IGNt ZGx2bCIsIiIsY21kbHZsKTsKKyAgICAgICAgZGVidWcoRjEwMSwiJnBhcnNlciBlbnRyeSBtIiwi IixtKTsKKyAgICB9CisjZW5kaWYgLyogREVCVUcgKi8KKyNlbmRpZiAvKiBOT1NQTCAqLworCisj aWZuZGVmIE5PWEZFUgorICAgIGZ0cmVzZXQoKTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IFJlc2V0IGdsb2JhbCBmaWxlIHNldHRpbmdzICovCisjZW5kaWYgLyogTk9YRkVSICovCisvKgor ICBzc3RhdGUgYmVjb21lcyBub256ZXJvIHdoZW4gYSBjb21tYW5kIGhhcyBiZWVuIHBhcnNlZCB0 aGF0IHJlcXVpcmVzIHNvbWUKKyAgYWN0aW9uIGZyb20gdGhlIHByb3RvY29sIG1vZHVsZS4gIEFu eSBub24tcHJvdG9jb2wgYWN0aW9ucywgc3VjaCBhcyBsb2NhbAorICBkaXJlY3RvcnkgbGlzdGlu ZyBvciB0ZXJtaW5hbCBlbXVsYXRpb24sIGFyZSBpbnZva2VkIGRpcmVjdGx5IGZyb20gYmVsb3cu CisqLworICAgIHNzdGF0ZSA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFN0YXJ0IHdp dGggbm8gc3RhcnQgc3RhdGUuICovCisKKyNpZm5kZWYgTk9YRkVSCisjaWZuZGVmIE5PU1BMCisg ICAgcXVlcnkgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUVVFUlkgbm90IGFjdGl2 ZSAqLworI2VuZGlmIC8qIE5PU1BMICovCisjaWZuZGVmIE5PSElOVFMKKyAgICBpZiAoIXN1Y2Nl c3MpIHsKKyAgICAgICAgaWYgKGxvY2FsICYmICFuZXR3b3JrICYmIGNhcnJpZXIgIT0gQ0FSX09G RikgeworICAgICAgICAgICAgaW50IHg7ICAgICAgICAgICAgICAgICAgICAgIC8qIFNlcmlhbCBj b25uZWN0aW9uICovCisgICAgICAgICAgICB4ID0gdHRnbWRtKCk7ICAgICAgICAgICAgICAgLyog d2l0aCBjYXJyaWVyIGNoZWNraW5nICovCisgICAgICAgICAgICBpZiAoeCA+IC0xKSB7CisgICAg ICAgICAgICAgICAgaWYgKCEoeCAmIEJNX0RDRCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2Rs b3N0ID0gMTsKKyAgICAgICAgICAgICAgICAgICAgZmF0YWxpbyA9IDE7CisgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorI2lmZGVmIERFQlVHCisgICAg aWYgKGRlYmxvZykgeworICAgICAgICBkZWJ1ZyhGMTAxLCJwYXJzZXIgdG9wIHdoYXQiLCIiLHdo YXQpOworICAgICAgICBkZWJ1ZyhGMTAxLCJwYXJzZXIgdG9wIGludGVycnVwdGVkIiwiIixpbnRl cnJ1cHRlZCk7CisgICAgICAgIGRlYnVnKEYxMDEsInBhcnNlciB0b3AgY2Rsb3N0IiwiIixjZGxv c3QpOworICAgICAgICBkZWJ1ZyhGMTAxLCJwYXJzZXIgdG9wIHNuZGNtZCIsIiIsc25kY21kKTsK KyAgICAgICAgZGVidWcoRjEwMSwicGFyc2VyIHRvcCBnZXRjbWQiLCIiLGdldGNtZCk7CisgICAg fQorI2VuZGlmIC8qIERFQlVHICovCisgICAgaWYgKGNkbG9zdCAmJiAhaW50ZXJydXB0ZWQgJiYg KHNuZGNtZCB8fCBnZXRjbWQpKSB7CisgICAgICAgIHByaW50ZigiP0Nvbm5lY3Rpb24gYnJva2Vu IChjYXJyaWVyIHNpZ25hbCBsb3N0KVxuIik7CisgICAgfQorICAgIGlmIChzbmRjbWQgJiYgcHJv dG9jb2wgPT0gUFJPVE9fSyAmJgorCSFzdWNjZXNzICYmIGhpbnRzICYmICFpbnRlcnJ1cHRlZCAm JiAhZmF0YWxpbyAmJiAheGNtZHNyYykgeworICAgICAgICBpbnQgeCA9IDAsIG4gPSAwOworICAg ICAgICBwcmludGYoIlxuKioqKioqKioqKioqKioqKioqKioqKioqKlxuIik7CisgICAgICAgIHBy aW50ZigiU0VORC1jbGFzcyBjb21tYW5kIGZhaWxlZC5cbiIpOworICAgICAgICBwcmludGYoIiBQ YWNrZXRzIHNlbnQ6ICVkXG4iLCBzcGFja2V0cyk7CisgICAgICAgIHByaW50ZigiIFJldHJhbnNt aXNzaW9uczogJWRcbiIscmV0cmFucyk7CisgICAgICAgIHByaW50ZigiIFRpbWVvdXRzOiAlZFxu IiwgdGltZW91dHMpOworICAgICAgICBwcmludGYoIiBEYW1hZ2VkIHBhY2tldHM6ICVkXG4iLCBj cnVuY2hlZCk7CisgICAgICAgIGlmIChlcGt0cmN2ZCkgeworICAgICAgICAgICAgcHJpbnRmKCIg VHJhbnNmZXIgY2FuY2VsZWQgYnkgcmVjZWl2ZXIuXG4iKTsKKyAgICAgICAgICAgIHByaW50Zigi IFJlY2VpdmVyJ3MgbWVzc2FnZTogXCIlc1wiXG4iLChjaGFyICopZXBrdG1zZyk7CisgICAgICAg ICAgICBuKys7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoZXBrdG1zZykgaWYg KCplcGt0bXNnKSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCIgRmF0YWwgS2VybWl0IFByb3Rv Y29sIEVycm9yOiAlc1xuIixlcGt0bXNnKTsKKyAgICAgICAgICAgICAgICBuKys7CisgICAgICAg ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGxvY2FsICYmICFuZXR3b3JrICYmIGNhcnJp ZXIgIT0gQ0FSX09GRikgeworICAgICAgICAgICAgaW50IHh4OyAgICAgICAgICAgICAgICAgICAg IC8qIFNlcmlhbCBjb25uZWN0aW9uICovCisgICAgICAgICAgICB4eCA9IHR0Z21kbSgpOyAgICAg ICAgICAgICAgLyogd2l0aCBjYXJyaWVyIGNoZWNraW5nICovCisgICAgICAgICAgICBpZiAoeHgg PiAtMSkgeworICAgICAgICAgICAgICAgIGlmICghKHh4ICYgQk1fRENEKSkKKyAgICAgICAgICAg ICAgICAgIGNkbG9zdCA9IDE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworI2lmZGVmIFVO SVgKKyAgICAgICAgaWYgKGVycm5vICE9IDApCisjZW5kaWYgLyogVU5JWCAqLworICAgICAgICAg IHsKKyAgICAgICAgICAgICAgcHJpbnRmKCIgTW9zdCByZWNlbnQgbG9jYWwgT1MgZXJyb3I6IFwi JXNcIlxuIixja19lcnJzdHIoKSk7CisgICAgICAgICAgICAgIG4rKzsKKyAgICAgICAgICB9Cisg ICAgICAgIHByaW50ZigKKyAgICJcbkhJTlRTLi4uIElmIHRoZSBwcmVjZWRpbmcgZXJyb3IgbWVz c2FnZSVzIG5vdCBleHBsYWluIHRoZSBmYWlsdXJlOlxuIiwKKyAgICAgICAgICAgICAgIChuID4g MSkgPyAicyBkbyIgOiAiIGRvZXMiCisgICAgICAgICAgICAgICApOworI2lmbmRlZiBOT0xPQ0FM CisgICAgICAgIGlmIChsb2NhbCkgeworICAgICAgICAgICAgaWYgKHJwYWNrZXRzID09IDApIHsK KyAgICAgICAgICAgICAgICBwcmludGYoIiAuIERpZCB5b3Ugc3RhcnQgYSBLZXJtaXQgcmVjZWl2 ZXIgb24gdGhlIGZhciBlbmQ/XG4iKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg ICAgICAgcHJpbnRmKAorICAgICAgICAgICAgICAgICIgLiBUcnkgY2hhbmdpbmcgdGhlIHJlbW90 ZSBLZXJtaXQncyBGTE9XLUNPTlRST0wgc2V0dGluZy5cbiIpOworICAgICAgICAgICAgICAgIGlm ICghbmV0d29yayAmJiBtZG10eXAgPiAwKQorICAgICAgICAgICAgICAgICAgaWYgKCgzICogY3J1 bmNoZWQpID4gc3BhY2tldHMpCisgICAgICAgICAgICAgICAgICAgIHByaW50ZigKKyAgICAgICAg ICAgICAgICAiIC4gVHJ5IHBsYWNpbmcgYSBuZXcgY2FsbCB0byBnZXQgYSBjbGVhbmVyIGNvbm5l Y3Rpb24uXG4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChycGFja2V0cyA+ IDApIHsKKyAgICAgICAgICAgIGlmIChmbG93ID09IEZMT19OT05FKQorICAgICAgICAgICAgIHBy aW50ZigiIC4gR2l2ZSBtZSBhIFNFVCBGTE9XIFhPTi9YT0ZGIGNvbW1hbmQgYW5kIHRyeSBhZ2Fp bi5cbiIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgIHByaW50ZigiIC4gR2l2ZSBt ZSBhIFNFVCBGTE9XIE5PTkUgY29tbWFuZCBhbmQgdHJ5IGFnYWluLlxuIik7CisgICAgICAgIH0K KyAgICAgICAgeCsrOworI2VuZGlmIC8qIE5PTE9DQUwgKi8KKworICAgICAgICBpZiAoKDMgKiB0 aW1lb3V0cykgPiBzcGFja2V0cykKKyAgICAgICAgICBwcmludGYoIiAuIEFkanVzdCB0aGUgdGlt ZW91dCBtZXRob2QgKHNlZSBIRUxQIFNFVCBTRU5EKS5cbiIpOworICAgICAgICBpZiAoKDMgKiBy ZXRyYW5zKSA+IHNwYWNrZXRzKQorICAgICAgICAgIHByaW50ZigiIC4gSW5jcmVhc2UgdGhlIHJl dHJ5IGxpbWl0IChzZWUgSEVMUCBTRVQgUkVUUlkpLlxuIik7CisKKyNpZmRlZiBDS19TUEVFRAor ICAgICAgICBpZiAocHJlZml4aW5nICE9IFBYX0FMTCAmJiBycGFja2V0cyA+IDIpIHsKKyAgICAg ICAgICAgIHByaW50ZigiIC4gVHJ5IGl0IGFnYWluIHdpdGg6IFNFVCBQUkVGSVhJTkcgQUxMXG4i KTsKKyAgICAgICAgICAgIHgrKzsKKyAgICAgICAgfQorI2VuZGlmIC8qIENLX1NQRUVEICovCisj aWZkZWYgU1RSRUFNSU5HCisgICAgICAgIGlmIChzdHJlYW1lZCkgeworICAgICAgICAgICAgcHJp bnRmKCIgLiBUcnkgaXQgYWdhaW4gd2l0aDogU0VUIFNUUkVBTUlORyBPRkZcbiIpOworICAgICAg ICAgICAgeCsrOworICAgICAgICB9IGVsc2UgaWYgKHJlbGlhYmxlKSB7CisgICAgICAgICAgICBw cmludGYoIiAuIFRyeSBpdCBhZ2FpbiB3aXRoOiBTRVQgUkVMSUFCTEUgT0ZGXG4iKTsKKyAgICAg ICAgICAgIHgrKzsKKyAgICAgICAgfQorI2VuZGlmIC8qIFNUUkVBTUlORyAqLworCisjaWZkZWYg Q0tfU1BFRUQKKyAgICAgICAgaWYgKGNsZWFycnEgPiAwICYmIHByZWZpeGluZyA9PSBQWF9OT04p IHsKKyAgICAgICAgICAgIHByaW50ZigiIC4gVHJ5IGl0IGFnYWluIHdpdGg6IFNFVCBDTEVBUi1D SEFOTkVMIE9GRlxuIik7CisgICAgICAgICAgICB4Kys7CisgICAgICAgIH0KKyNlbmRpZiAvKiBD S19TUEVFRCAqLworICAgICAgICBpZiAoIXBhcml0eSkgeworICAgICAgICAgICAgcHJpbnRmKCIg LiBUcnkgaXQgYWdhaW4gd2l0aDogU0VUIFBBUklUWSBTUEFDRVxuIik7CisgICAgICAgICAgICB4 Kys7CisgICAgICAgIH0KKyAgICAgICAgcHJpbnRmKCIgLiAlc2l2ZSBhIFJPQlVTVCBjb21tYW5k IGFuZCB0cnkgYWdhaW4uXG4iLAorICAgICAgICAgICAgICAgKHggPiAwKSA/ICJBcyBhIGxhc3Qg cmVzb3J0LCBnIiA6ICJHIgorICAgICAgICAgICAgICAgKTsKKyAgICAgICAgcHJpbnRmKCJBbHNv OlxuIik7CisgICAgICAgIHByaW50ZigiIC4gQmUgc3VyZSB0aGUgc291cmNlIGZpbGUgaGFzIHJl YWQgcGVybWlzc2lvbi5cbiIpOworICAgICAgICBwcmludGYoIiAuIEJlIHN1cmUgdGhlIHRhcmdl dCBkaXJlY3RvcnkgaGFzIHdyaXRlIHBlcm1pc3Npb24uXG4iKTsKKy8qCisgICAgICAgIGlmIHRo ZSBmaWxlIHdhcyAyRyBvciBsYXJnZXIgbWFrZSBzdXJlIG90aGVyIEtlcm1pdCBzdXBwb3J0cyBM RnMuLi4KKyovCisgICAgICAgIHByaW50ZigiIC4gQmUgc3VyZSB0aGUgdGFyZ2V0IGRpc2sgaGFz IHN1ZmZpY2llbnQgc3BhY2UuXG4iKTsKKyAgICAgICAgcHJpbnRmKCIoVXNlIFNFVCBISU5UUyBP RkYgdG8gc3VwcHJlc3MgaGludHMuKVxuIik7CisgICAgICAgIHByaW50ZigiKioqKioqKioqKioq KioqKioqKioqKioqKlxuXG4iKTsKKyAgICB9CisgICAgZGVidWcoRjEwMSwidG9wY21kIiwiIix0 b3BjbWQpOworICAgIGlmIChnZXRjbWQgJiYgcHJvdG9jb2wgPT0gUFJPVE9fSyAmJgorCSFzdWNj ZXNzICYmIGhpbnRzICYmICFpbnRlcnJ1cHRlZCAmJiAhZmF0YWxpbyAmJiAheGNtZHNyYykgewor ICAgICAgICBpbnQgeCA9IDA7CisgICAgICAgIGV4dGVybiBpbnQgdXJwc2l6LCB3c2xvdHI7Cisg ICAgICAgIHByaW50ZigiXG4qKioqKioqKioqKioqKioqKioqKioqKioqXG4iKTsKKyAgICAgICAg cHJpbnRmKCJSRUNFSVZFLSBvciBHRVQtY2xhc3MgY29tbWFuZCBmYWlsZWQuXG4iKTsKKyAgICAg ICAgcHJpbnRmKCIgUGFja2V0cyByZWNlaXZlZDogJWRcbiIsIHJwYWNrZXRzKTsKKyAgICAgICAg cHJpbnRmKCIgRGFtYWdlZCBwYWNrZXRzOiAlZFxuIiwgY3J1bmNoZWQpOworICAgICAgICBwcmlu dGYoIiBUaW1lb3V0czogJWRcbiIsIHRpbWVvdXRzKTsKKyAgICAgICAgaWYgKHJwYWNrZXRzID4g MCkKKyAgICAgICAgICBwcmludGYoIiBQYWNrZXQgbGVuZ3RoOiAlZFxuIiwgdXJwc2l6KTsKKyAg ICAgICAgaWYgKGVwa3RyY3ZkKSB7CisgICAgICAgICAgICBwcmludGYoIiBUcmFuc2ZlciBjYW5j ZWxlZCBieSBzZW5kZXIuXG4iKTsKKyAgICAgICAgICAgIHByaW50ZigiIFNlbmRlcidzIG1lc3Nh Z2U6IFwiJXNcIlxuIiwoY2hhciAqKWVwa3Rtc2cpOworICAgICAgICB9CisjaWZkZWYgVU5JWAor ICAgICAgICBpZiAoZXJybm8gIT0gMCkKKyNlbmRpZiAvKiBVTklYICovCisgICAgICAgICAgcHJp bnRmKCIgTW9zdCByZWNlbnQgbG9jYWwgZXJyb3I6IFwiJXNcIlxuIixja19lcnJzdHIoKSk7Cisg ICAgICAgIHByaW50ZigKKyAgICJcbkhJTlRTLi4uIElmIHRoZSBwcmVjZWRpbmcgZXJyb3IgbWVz c2FnZSVzIG5vdCBleHBsYWluIHRoZSBmYWlsdXJlOlxuIiwKKyAgICAgICAgICAgICAgIGVwa3Ry Y3ZkID8gInMgZG8iIDogIiBkb2VzIgorICAgICAgICAgICAgICAgKTsKKyNpZm5kZWYgTk9MT0NB TAorICAgICAgICBpZiAobG9jYWwpIHsKKyAgICAgICAgICAgIGlmICh0b3BjbWQgPT0gWFhHRVQp CisgICAgICAgICAgICAgIHByaW50ZigiIC4gRGlkIHlvdSBzdGFydCBhIEtlcm1pdCBTRVJWRVIg b24gdGhlIGZhciBlbmQ/XG4iKTsKKyAgICAgICAgICAgIGlmIChycGFja2V0cyA9PSAwKSB7Cisg ICAgICAgICAgICAgICAgaWYgKHRvcGNtZCAhPSBYWEdFVCkKKyAgICAgICAgICAgICAgICAgIHBy aW50ZigiIC4gRGlkIHlvdSBzdGFydCBhIEtlcm1pdCBTRU5EZXIgb24gdGhlIGZhciBlbmQ/XG4i KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKAorICAgICAg ICAgICAgICAgICIgLiBDaG9vc2UgYSBkaWZmZXJlbnQgRkxPVy1DT05UUk9MIHNldHRpbmcgYW5k IHRyeSBhZ2Fpbi5cbiIpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHRvcGNt ZCA9PSBYWEdFVCkKKyAgICAgICAgICBwcmludGYoIiAuIElzIHRoZSBvdGhlciBLZXJtaXQgaW4g KG9yIGRvZXMgaXQgaGF2ZSkgU0VSVkVSIG1vZGU/XG4iKTsKKyAgICAgICAgaWYgKHJwYWNrZXRz ID4gMCAmJiB1cnBzaXogPiA5MCkKKyAgICAgICAgICBwcmludGYoIiAuIFRyeSBzbWFsbGVyIHBh Y2tldHMgKFNFVCBSRUNFSVZFIFBBQ0tFVC1MRU5HVEgpLlxuIik7CisgICAgICAgIGlmIChycGFj a2V0cyA+IDAgJiYgd3Nsb3RyID4gMSAmJiAhc3RyZWFtZWQpCisgICAgICAgICAgcHJpbnRmKCIg LiBUcnkgYSBzbWFsbGVyIHdpbmRvdyBzaXplIChTRVQgV0lORE9XKS5cbiIpOworICAgICAgICBp ZiAoIWxvY2FsICYmIHJwYWNrZXRzID4gMCkgeworICAgICAgICAgICAgaWYgKGZsb3cgPT0gRkxP X05PTkUpCisgICAgICAgICAgICAgcHJpbnRmKCIgLiBHaXZlIG1lIGEgU0VUIEZMT1cgWE9OL1hP RkYgY29tbWFuZCBhbmQgdHJ5IGFnYWluLlxuIik7CisgICAgICAgICAgICBlbHNlCisgICAgICAg ICAgICAgcHJpbnRmKCIgLiBHaXZlIG1lIGEgU0VUIEZMT1cgTk9ORSBjb21tYW5kIGFuZCB0cnkg YWdhaW4uXG4iKTsKKyAgICAgICAgfQorICAgICAgICB4Kys7CisjZW5kaWYgLyogTk9MT0NBTCAq LworI2lmZGVmIFNUUkVBTUlORworICAgICAgICBpZiAoc3RyZWFtZWQpIHsKKyAgICAgICAgICAg IHByaW50ZigiIC4gVHJ5IGl0IGFnYWluIHdpdGg6IFNFVCBTVFJFQU1JTkcgT0ZGXG4iKTsKKyAg ICAgICAgICAgIHgrKzsKKyAgICAgICAgfSBlbHNlIGlmIChyZWxpYWJsZSAmJiBsb2NhbCkgewor ICAgICAgICAgICAgcHJpbnRmKCIgLiBUcnkgaXQgYWdhaW4gd2l0aDogU0VUIFJFTElBQkxFIE9G RlxuIik7CisgICAgICAgICAgICB4Kys7CisgICAgICAgIH0gZWxzZQorI2VuZGlmIC8qIFNUUkVB TUlORyAqLworICAgICAgICBpZiAoIXBhcml0eSkgeworICAgICAgICAgICAgcHJpbnRmKCIgLiBU cnkgaXQgYWdhaW4gd2l0aDogU0VUIFBBUklUWSBTUEFDRVxuIik7CisgICAgICAgICAgICB4Kys7 CisgICAgICAgIH0KKyAgICAgICAgcHJpbnRmKCh4ID4gMCkgPworICAgICAgICAgICAgICAgIiAu IEFzIGEgbGFzdCByZXNvcnQsIGdpdmUgYSBST0JVU1QgY29tbWFuZCBhbmQgdHJ5IGFnYWluLlxu IiA6CisgICAgICAgICAgICAgICAiIC4gR2l2ZSBhIFJPQlVTVCBjb21tYW5kIGFuZCB0cnkgYWdh aW4uXG4iCisgICAgICAgICAgICAgICApOworICAgICAgICBwcmludGYoIkFsc286XG4iKTsKKyAg ICAgICAgcHJpbnRmKCIgLiBCZSBzdXJlIHRoZSB0YXJnZXQgZGlyZWN0b3J5IGhhcyB3cml0ZSBw ZXJtaXNzaW9uLlxuIik7CisgICAgICAgIHByaW50ZigiIC4gQmUgc3VyZSB0aGUgdGFyZ2V0IGRp c2sgaGFzIHN1ZmZpY2llbnQgc3BhY2UuXG4iKTsKKyAgICAgICAgcHJpbnRmKCIgLiBUcnkgdGVs bGluZyB0aGUgJXMgdG8gU0VUIFBSRUZJWElORyBBTEwuXG4iLAorICAgICAgICAgICAgICAgdG9w Y21kID09IFhYR0VUID8gInNlcnZlciIgOiAic2VuZGVyIgorICAgICAgICAgICAgICAgKTsKKyAg ICAgICAgcHJpbnRmKCIgLiBUcnkgZ2l2aW5nIGEgUk9CVVNUIGNvbW1hbmQgdG8gdGhlICVzLlxu IiwKKyAgICAgICAgICAgICAgIHRvcGNtZCA9PSBYWEdFVCA/ICJzZXJ2ZXIiIDogInNlbmRlciIK KyAgICAgICAgICAgICAgICk7CisgICAgICAgIHByaW50ZigiKFVzZSBTRVQgSElOVFMgT0ZGIHRv IHN1cHByZXNzIGhpbnRzLilcbiIpOworICAgICAgICBwcmludGYoIioqKioqKioqKioqKioqKioq KioqKioqKipcblxuIik7CisgICAgfQorI2VuZGlmIC8qIE5PSElOVFMgKi8KKyAgICBnZXRjbWQg PSAwOworICAgIHNuZGNtZCA9IDA7CisgICAgaW50ZXJydXB0ZWQgPSAwOworI2VuZGlmIC8qIE5P WEZFUiAqLworCisgICAgd2hpbGUgKHNzdGF0ZSA9PSAwKSB7ICAgICAgICAgICAgICAgLyogUGFy c2UgY21kcyB1bnRpbCBhY3Rpb24gcmVxdWVzdGVkICovCisgICAgICAgIGRlYnVnKEYxMDAsInBh cnNlIHRvcCIsIiIsMCk7CisJd2hhdCA9IFdfQ09NTUFORDsJCS8qIE5vdyB3ZSdyZSBwYXJzaW5n IGNvbW1hbmRzLiAqLworCXJjZGFjdGl2ZSA9IDA7CQkJLyogUkVNT1RFIENEIG5vdCBhY3RpdmUg Ki8KKwlrZWVwYWxsY2hhcnMgPSAwOwkJLyogTUlOUFVUIG5vdCBhY3RpdmUgKi8KKworI2lmZGVm IE9TMgorICAgICAgICBpZiAoYXBjYWN0aXZlID09IEFQQ19JTkFDVElWRSkKKyAgICAgICAgICBX YWl0Q29tbWFuZE1vZGVTZW0oLTEpOworI2VuZGlmIC8qIE9TMiAqLworI2lmZGVmIElLU19PUFRJ T04KKyAgICAgICAgaWYgKChsb2NhbCAmJgorICAgICAgICAgICAgICF4Y21kc3JjICYmCisgICAg ICAgICAgICAgaXNfdG4gJiYKKyAgICAgICAgICAgICBURUxPUFRfTUUoVEVMT1BUX0tFUk1JVCkg JiYKKyAgICAgICAgICAgICBURUxPUFRfU0IoVEVMT1BUX0tFUk1JVCkua2VybWl0Lm1lX3N0YXJ0 KSB8fAorICAgICAgICAgICAgKCFsb2NhbCAmJgorICAgICAgICAgICAgICFjbWRhZGwgJiYKKyAg ICAgICAgICAgICBURUxPUFRfTUUoVEVMT1BUX0tFUk1JVCkgJiYKKyAgICAgICAgICAgICBURUxP UFRfU0IoVEVMT1BUX0tFUk1JVCkua2VybWl0Lm1lX3N0YXJ0KQorICAgICAgICAgICAgKSB7Cisg ICAgICAgICAgICB0bl9zaWtzKEtFUk1JVF9TVE9QKTsKKyAgICAgICAgfQorI2VuZGlmIC8qIElL U19PUFRJT04gKi8KKworI2lmbmRlZiBOT1hGRVIKKyAgICAgICAgaWYgKGF1dG9wYXRoKSB7Cisg ICAgICAgICAgICBmbnJwYXRoID0gUEFUSF9BVVRPOworICAgICAgICAgICAgYXV0b3BhdGggPSAw OworICAgICAgICB9CisgICAgICAgIHJlbWZpbGUgPSAwOyAgICAgICAgICAgICAgICAgICAgLyog Q2xlYXIgdGhlc2UgaW4gY2FzZSBSRU1PVEUgKi8KKyAgICAgICAgcmVtYXBwZCA9IDA7ICAgICAg ICAgICAgICAgICAgICAvKiBjb21tYW5kIHdhcyBpbnRlcnJ1cHRlZC4uLiAqLworICAgICAgICBy ZW1waXBlID0gMDsKKyAgICAgICAgbWFrZXN0cigmc25kX21vdmUsZ19zbmRfbW92ZSk7ICAvKiBS ZXN0b3JlIHRoZXNlICovCisgICAgICAgIG1ha2VzdHIoJnJjdl9tb3ZlLGdfcmN2X21vdmUpOwor ICAgICAgICBtYWtlc3RyKCZzbmRfcmVuYW1lLGdfc25kX3JlbmFtZSk7CisgICAgICAgIG1ha2Vz dHIoJnJjdl9yZW5hbWUsZ19yY3ZfcmVuYW1lKTsKKyNlbmRpZiAvKiBOT1hGRVIgKi8KKworICAg IC8qIFRha2UgcmVxdWVzdGVkIGFjdGlvbiBpZiB0aGVyZSB3YXMgYW4gZXJyb3IgaW4gdGhlIHBy ZXZpb3VzIGNvbW1hbmQgKi8KKworICAgICAgICBzZXRpbnQoKTsKKyAgICAgICAgZGVidWcoRjEw MSwicGFyc2VyIHRsZXZlbCIsIiIsdGxldmVsKTsKKyAgICAgICAgZGVidWcoRjEwMSwicGFyc2Vy IGNtZF9yb3dzIiwiIixjbWRfcm93cyk7CisKKyNpZm5kZWYgTk9MT0NBTAorICAgICAgICBkZWJ1 ZyhGMTAxLCJwYXJzZXIgd2FzY2xvc2VkIiwiIix3YXNjbG9zZWQpOworICAgICAgICBpZiAod2Fz Y2xvc2VkKSB7ICAgICAgICAgICAgICAgIC8qIElmIGNvbm5lY3Rpb24gd2FzIGp1c3QgY2xvc2Vk ICovCisjaWZuZGVmIE5PU1BMCisgICAgICAgICAgICBpbnQgazsKKyAgICAgICAgICAgIGsgPSBt bG9vayhtYWN0YWIsIm9uX2Nsb3NlIixubWFjKTsgLyogTG9vayB1cCAib25fY2xvc2UiICovCisg ICAgICAgICAgICBpZiAoayA+PSAwKSB7ICAgICAgICAgICAgICAgLyogSWYgZm91bmQsICovCisg ICAgICAgICAgICAgICAgLyogcHJpbnRmKCJPTl9DTE9TRSBDTUQgTE9PUFxuIik7ICovCisgICAg ICAgICAgICAgICAgZG9kbyhrLGNraXRvYSh3aHljbG9zZWQpLDApOyAvKiBTZXQgaXQgdXAgKi8K KyAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBOT1NQTCAqLworICAgICAgICAgICAgd2h5Y2xvc2Vk ID0gV0NfUkVNTzsKKyAgICAgICAgICAgIHdhc2Nsb3NlZCA9IDA7CisgICAgICAgIH0KKyNlbmRp ZiAvKiBOT0xPQ0FMICovCisKKyNpZm5kZWYgTk9TUEwKKyAgICAgICAgeHhkb3QgPSAwOyAgICAg ICAgICAgICAgICAgICAgICAvKiBDbGVhciB0aGlzLi4uICovCisKKyAgICAgICAgZGVidWcoRjEw MSwicGFyc2VyIHN1Y2Nlc3MiLCIiLHN1Y2Nlc3MpOworICAgICAgICBpZiAoc3VjY2VzcyA9PSAw KSB7CisgICAgICAgICAgICBpZiAoY21kc3RrW2NtZGx2bF0uc3JjID09IENNRF9URiAmJiB0YWtl cnJbY21kbHZsXSkgeworICAgICAgICAgICAgICAgIHByaW50ZigiQ29tbWFuZCBmaWxlIHRlcm1p bmF0ZWQgYnkgZXJyb3IuXG4iKTsKKyAgICAgICAgICAgICAgICBwb3BjbHZsKCk7CisgICAgICAg ICAgICAgICAgaWYgKGNtZGx2bCA9PSAwKSByZXR1cm4oMCk7CisgICAgICAgICAgICB9CisgICAg ICAgICAgICBpZiAoY21kc3RrW2NtZGx2bF0uc3JjID09IENNRF9NRCAmJiBtZXJyb3JbY21kbHZs XSkgeworICAgICAgICAgICAgICAgIHByaW50ZigiQ29tbWFuZCBlcnJvcjogbWFjcm8gdGVybWlu YXRlZC5cbiIpOworICAgICAgICAgICAgICAgIHBvcGNsdmwoKTsKKyAgICAgICAgICAgICAgICBp ZiAobSAmJiAoY21kbHZsIDwgaW5sZXZlbCkpCisgICAgICAgICAgICAgICAgICByZXR1cm4oKGlu dCkgc3N0YXRlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBudWxjbWQgPSAo bSA9PSAyKTsKKyAgICAgICAgZGVidWcoRjEwMSwicGFyc2VyIG51bGNtZCIsIiIsbnVsY21kKTsK KyNlbHNlCisgICAgICAgIGlmIChzdWNjZXNzID09IDAgJiYgdGxldmVsID4gLTEgJiYgdGFrZXJy W3RsZXZlbF0pIHsKKyAgICAgICAgICAgIHByaW50ZigiQ29tbWFuZCBmaWxlIHRlcm1pbmF0ZWQg YnkgZXJyb3IuXG4iKTsKKyAgICAgICAgICAgIHBvcGNsdmwoKTsKKyAgICAgICAgICAgIGNtaW5p KGNreGVjaCk7ICAgICAgICAgICAgICAvKiBDbGVhciB0aGUgY21kIGJ1ZmZlci4gKi8KKyAgICAg ICAgICAgIGlmICh0bGV2ZWwgPCAwKSAgICAgICAgICAgICAvKiBKdXN0IHBvcHBlZCBvdXQgb2Yg Y21kIGZpbGVzPyAqLworICAgICAgICAgICAgICByZXR1cm4oMCk7ICAgICAgICAgICAgICAgIC8q IEVuZCBvZiBpbml0IGZpbGUgb3Igd2hhdGV2ZXIuICovCisgICAgICAgIH0KKyNlbmRpZiAvKiBO T1NQTCAqLworCisjaWZkZWYgTUFDCisgICAgICAgIC8qIENoZWNrIGZvciBUQUtFIGluaXRpYXRl ZCBieSBtZW51LiAqLworICAgICAgICBpZiAoKHRsZXZlbCA9PSAtMSkgJiYgbGZpbGVzKQorICAg ICAgICAgICAgc3RhcnRsZmlsZSgpOworI2VuZGlmIC8qIE1BQyAqLworCisgICAgICAgIC8qIElm IGluIFRBS0UgZmlsZSwgY2hlY2sgZm9yIEVPRiAqLworI2lmbmRlZiBOT1NQTAorI2lmZGVmIE1B QworICAgICAgICBpZgorI2Vsc2UKKyAgICAgICAgd2hpbGUKKyNlbmRpZiAvKiBNQUMgKi8KKyAg ICAgICAgICAoKGNtZHN0a1tjbWRsdmxdLnNyYyA9PSBDTURfVEYpICAvKiBJZiBlbmQgb2YgdGFr ZSBmaWxlICovCisgICAgICAgICAgICAgICAmJiAodGxldmVsID4gLTEpCisgICAgICAgICAgICAg ICAmJiBmZW9mKHRmaWxlW3RsZXZlbF0pKSB7CisgICAgICAgICAgICBwb3BjbHZsKCk7ICAgICAg ICAgICAgICAgICAgLyogcG9wIGNvbW1hbmQgbGV2ZWwgKi8KKyAgICAgICAgICAgIGNtaW5pKGNr eGVjaCk7ICAgICAgICAgICAgICAvKiBhbmQgY2xlYXIgdGhlIGNtZCBidWZmZXIuICovCisgICAg ICAgICAgICBpZiAoY21kbHZsID09IDApIHsgICAgICAgICAgLyogSnVzdCBwb3BwZWQgb3V0IG9m IGFsbCBjbWQgZmlsZXM/ICovCisgICAgICAgICAgICAgICAgcmV0dXJuKDApOyAgICAgICAgICAg ICAgLyogRW5kIG9mIGluaXQgZmlsZSBvciB3aGF0ZXZlci4gKi8KKyAgICAgICAgICAgIH0KKyAg ICAgICAgfQorI2lmZGVmIE1BQworICAgICAgICBtaW5pcGFyc2VyKDEpOworICAgICAgICBpZiAo c3N0YXRlID09ICdhJykgeyAgICAgICAgICAgIC8qIGlmIGNtZC0uIGNhbmNlbCAqLworICAgICAg ICAgICAgZGVidWcoRjEwMCwgInBhcnNlcjogY2FuY2VsIHRha2UgZHVlIHRvIHNzdGF0ZSIsICIi LCBzc3RhdGUpOworICAgICAgICAgICAgc3N0YXRlID0gJ1wwJzsKKyAgICAgICAgICAgIGRvc3Rv cCgpOworICAgICAgICAgICAgcmV0dXJuKDApOyAgICAgICAgICAgICAgICAgIC8qIEVuZCBvZiBp bml0IGZpbGUgb3Igd2hhdGV2ZXIuICovCisgICAgICAgIH0KKyNlbmRpZiAvKiAgTUFDICovCisK KyNlbHNlIC8qIE5PU1BMICovCisgICAgICAgIGlmICgodGxldmVsID4gLTEpICYmIGZlb2YodGZp bGVbdGxldmVsXSkpIHsgLyogSWYgZW5kIG9mIHRha2UgKi8KKyAgICAgICAgICAgIHBvcGNsdmwo KTsgICAgICAgICAgICAgICAgICAvKiBQb3AgdXAgb25lIGxldmVsLiAqLworICAgICAgICAgICAg Y21pbmkoY2t4ZWNoKTsgICAgICAgICAgICAgIC8qIGFuZCBjbGVhciB0aGUgY21kIGJ1ZmZlci4g Ki8KKyAgICAgICAgICAgIGlmICh0bGV2ZWwgPCAwKSAgICAgICAgICAgICAvKiBKdXN0IHBvcHBl ZCBvdXQgb2YgY21kIGZpbGVzPyAqLworICAgICAgICAgICAgICByZXR1cm4oMCk7ICAgICAgICAg ICAgICAgIC8qIEVuZCBvZiBpbml0IGZpbGUgb3Igd2hhdGV2ZXIuICovCisgICAgICAgIH0KKyNl bmRpZiAvKiBOT1NQTCAqLworCisKKyNpZm5kZWYgTk9TUEwKKyAgICAgICAgZGVidWcoRjEwMSwi cGFyc2VyIGNtZGx2bCIsIiIsY21kbHZsKTsKKyAgICAgICAgZGVidWcoRjEwMSwicGFyc2VyIGNt ZHNyYyIsIiIsY21kc3RrW2NtZGx2bF0uc3JjKTsKKworICAgICAgICBpZiAoY21kc3RrW2NtZGx2 bF0uc3JjID09IENNRF9NRCkgeyAvKiBFeGVjdXRpbmcgYSBtYWNybz8gKi8KKyAgICAgICAgICAg IGRlYnVnKEYxMDAsInBhcnNlciBtYWNybyIsIiIsMCk7CisgICAgICAgICAgICBtYWNsdmwgPSBj bWRzdGtbY21kbHZsXS5sdmw7IC8qIEdldCBjdXJyZW50IGxldmVsICovCisgICAgICAgICAgICBk ZWJ1ZyhGMTAxLCJwYXJzZXIgbWFjbHZsIiwiIixtYWNsdmwpOworICAgICAgICAgICAgY2JwID0g Y21kYnVmOyAgICAgICAgICAgICAgIC8qIENvcHkgbmV4dCBjbWQgdG8gY29tbWFuZCBidWZmZXIu ICovCisgICAgICAgICAgICAqY2JwID0gTlVMOworICAgICAgICAgICAgaWYgKCpzYXZidWYpIHsg ICAgICAgICAgICAgIC8qIEluIGNhc2UgdGhlbi1wYXJ0IG9mICdpZicgY29tbWFuZCAqLworICAg ICAgICAgICAgICAgIGNrc3RybmNweShjYnAsc2F2YnVmLENNREJMKTsgLyogd2FzIHNhdmVkLCBy ZXN0b3JlIGl0LiAqLworICAgICAgICAgICAgICAgICpzYXZidWYgPSAnXDAnOworICAgICAgICAg ICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgIC8qIEVsc2UgZ2V0IG5leHQgY21kIGZyb20g bWFjcm8gZGVmICovCisgICAgICAgICAgICAgICAgaWYgKGdldG5jbShjYnAsQ01EQkwpIDwgMCkg eworI2lmZGVmIERFQlVHCisgICAgICAgICAgICAgICAgICAgIGlmIChkZWJsb2cpIHsKKyAgICAg ICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsInBhcnNlciBlbmQgb2YgbWFjcm8gbSIsIiIs bSk7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJwYXJzZXIgZW5kIG9mIG1h Y3JvIGNtZGx2bCIsIiIsY21kbHZsKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYx MDEsInBhcnNlciBlbmQgb2YgbWFjcm8gaW5sZXZlbCIsIiIsaW5sZXZlbCk7CisgICAgICAgICAg ICAgICAgICAgIH0KKyNlbmRpZiAvKiBERUJVRyAqLworICAgICAgICAgICAgICAgICAgICBpZiAo bSAmJiAoY21kbHZsIDwgaW5sZXZlbCkpCisgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKChp bnQpIHNzdGF0ZSk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgLyogaWYgKCFtKSAqLyBjb250 aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWJ1 ZyhGMDEwLCJDTUQoTSkiLGNtZGJ1ZiwwKTsKKworICAgICAgICB9IGVsc2UgaWYgKGNtZHN0a1tj bWRsdmxdLnNyYyA9PSBDTURfVEYpCisjZWxzZQorICAgICAgICAgIGlmICh0bGV2ZWwgPiAtMSkK KyNlbmRpZiAvKiBOT1NQTCAqLworICAgICAgICAgIHsKKyNpZm5kZWYgTk9TUEwKKyAgICAgICAg ICAgIGRlYnVnKEYxMTEsInBhcnNlciBzYXZidWYiLHNhdmJ1Zix0bGV2ZWwpOworICAgICAgICAg ICAgaWYgKCpzYXZidWYpIHsgICAgICAgICAgICAgIC8qIEluIGNhc2UgVEhFTi1wYXJ0IG9mIElG IGNvbW1hbmQgKi8KKyAgICAgICAgICAgICAgICBja3N0cm5jcHkoY21kYnVmLHNhdmJ1ZixDTURC TCk7IC8qIHdhcyBzYXZlZCwgcmVzdG9yZSBpdC4gKi8KKyAgICAgICAgICAgICAgICAqc2F2YnVm ID0gJ1wwJzsKKyAgICAgICAgICAgIH0gZWxzZQorI2VuZGlmIC8qIE5PU1BMICovCisKKyAgICAg ICAgICAgICAgLyogR2V0IG5leHQgbGluZSBmcm9tIFRBS0UgZmlsZSAqLworCisgICAgICAgICAg ICAgIGlmICgodGZjb2RlID0gZ2V0bmN0KGNtZGJ1ZixDTURCTCx0ZmlsZVt0bGV2ZWxdLDApKSA8 IDApIHsKKyAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsInBhcnNlciB0ZmNvZGUiLHRmaWxl W3RsZXZlbF0sdGZjb2RlKTsKKyAgICAgICAgICAgICAgICAgIGlmICh0ZmNvZGUgPCAtMSkgeyAg ICAvKiBFcnJvciAqLworICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiP0Vycm9yIGluIFRB S0UgY29tbWFuZCBmaWxlOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRm Y29kZSA9PSAtMikgPyAiTWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSIgOgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAiTGluZSB0b28gbG9uZyBvciBjb250YWlucyBOVUwgY2hhcmFjdGVy cyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICAgICAg ICBkb3N0b3AoKTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIGNvbnRp bnVlOyAgICAgICAgICAgICAvKiAtMSBtZWFucyBFT0YgKi8KKyAgICAgICAgICAgICAgfQorCisg ICAgICAgIC8qIElmIGludGVyYWN0aXZlLCBnZXQgbmV4dCBjb21tYW5kIGZyb20gdXNlci4gKi8K KworICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVzZXIgdHlwZXMg aXQgaW4uICovCisgICAgICAgICAgICBpZiAocGZsYWcpIHByb21wdCh4eHN0cmluZyk7CisgICAg ICAgICAgICBjbWluaShja3hlY2gpOworICAgICAgICB9CisKKyAgICAvKiBOb3cgd2Uga25vdyB3 aGVyZSBuZXh0IGNvbW1hbmQgaXMgY29taW5nIGZyb20uIFBhcnNlIGFuZCBleGVjdXRlIGl0LiAq LworCisgICAgICAgIHJlcGFycyA9IDE7ICAgICAgICAgICAgICAgICAgICAgLyogMSA9IGNvbW1h bmQgbmVlZHMgcGFyc2luZyAqLworI2lmbmRlZiBOT1hGRVIKKyAgICAgICAgZGlzcGxhID0gMDsg ICAgICAgICAgICAgICAgICAgICAvKiBBc3N1bWUgbm8gZmlsZSB0cmFuc2ZlciBkaXNwbGF5ICov CisjZW5kaWYgLyogTk9YRkVSICovCisKKyAgICAgICAgd2hpbGUgKHJlcGFycykgeyAgICAgICAg ICAgICAgICAvKiBQYXJzZSB0aGlzIGNtZCB1bnRpbCBlbnRlcmVkLiAqLworCisgICAgICAgICAg ICBkZWJ1ZyhGMTAxLCJwYXJzZXIgdG9wIG9mIHdoaWxlIGxvb3AiLCIiLDApOworCSAgICB4YXNr bW9yZSA9IHNhdmVhc2s7CQkvKiBSZXN0b3JlIGdsb2JhbCBtb3JlLXByb21wdGluZyAqLworCSAg ICBkaXJhY3RpdmUgPSAwOwkJLyogRElSIGNvbW1hbmQgbm90IGFjdGl2ZSAqLworCSAgICBjZGFj dGl2ZSA9IDA7CQkvKiBDRCBjb21tYW5kIG5vdCBhY3RpdmUgKi8KKyNpZm5kZWYgTk9TUEwKKwkg ICAgYXNrZmxhZyA9IDA7CQkvKiBBU0sgY29tbWFuZCBub3QgYWN0aXZlICovCisJICAgIGVjaG9z dGFycyA9IDA7CQkvKiBOb3IgQVNLUSAqLworCSAgICBkZWJvayA9IDE7CQkJLyogVW5kaXNhYmxl IGRlYnVnZ2luZyAqLworI2VuZGlmIC8qIE5PU1BMICovCisKKyNpZmRlZiBSRUNVUlNJVkUKKyAg ICAgICAgICAgIC8qIEluIGNhc2Ugb2YgInNlbmQgL3JlY3Vyc2l2ZSAuLz88Q3RybC1VPiIgZXRj ICovCisgICAgICAgICAgICByZWN1cnNpdmUgPSAwOyAgICAgICAgICAgICAgLyogVGhpcyBpcyBu ZXZlciBzdGlja3kgKi8KKyNlbmRpZiAvKiBSRUNVUlNJVkUgKi8KKyAgICAgICAgICAgIHhmaWxl dHlwZSA9IC0xOyAgICAgICAgICAgICAvKiBSZXNldCB0aGlzIGJldHdlZW4gZWFjaCBjb21tYW5k ICovCisjaWZuZGVmIE5PTVNFTkQKKyAgICAgICAgICAgIGFkZGxpc3QgPSAwOworI2VuZGlmIC8q IE5PTVNFTkQgKi8KKyNpZmRlZiBDS19SRUNBTEwKKyAgICAgICAgICAgIG9uX3JlY2FsbCA9IDE7 CisjZW5kaWYgLyogQ0tfUkVDQUxMICovCisgICAgICAgICAgICAvKiBUaGlzIG1pZ2h0IGhhdmUg YmVlbiBjaGFuZ2VkIGJ5IGEgc3dpdGNoICovCisgICAgICAgICAgICBpZiAoZ19tYXRjaGRvdCA+ IC0xKSB7CisgICAgICAgICAgICAgICAgbWF0Y2hkb3QgPSBnX21hdGNoZG90OworICAgICAgICAg ICAgICAgIGdfbWF0Y2hkb3QgPSAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNtcmVz KCk7ICAgICAgICAgICAgICAgICAgICAvKiBSZXNldCBidWZmZXIgcG9pbnRlcnMuICovCisKKyNp ZmRlZiBPUzIKKyNpZmRlZiBDT01NRU5UCisgICAgICAgICAgICAvKiB3ZSBjaGVjayB0byBzZWUg aWYgYSBtYWNybyBpcyB3YWl0aW5nIHRvIGJlIGV4ZWN1dGVkICovCisgICAgICAgICAgICAvKiBp ZiBzbywgd2UgY2FsbCBkb21hYyBvbiBpdCAqLworICAgICAgICAgICAgaWYgKGNtZG1hYykgewor ICAgICAgICAgICAgICAgIGNrc3RybmNweShjbWRidWYsIGNtZG1hYywgQ01EQkwpOworICAgICAg ICAgICAgICAgIGZyZWUoY21kbWFjKTsKKyAgICAgICAgICAgICAgICBjbWRtYWMgPSBOVUxMOwor ICAgICAgICAgICAgfQorI2VuZGlmIC8qIENPTU1FTlQgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyNp Zm5kZWYgTk9YRkVSCisgICAgICAgICAgICBieWVfYWN0aXZlID0gMDsKKyNlbmRpZiAvKiBOT1hG RVIgKi8KKyAgICAgICAgICAgIGhhdmV0b2tlbiA9IDA7CisgICAgICAgICAgICB4eCA9IGNta2V5 MihjbWR0YWIsbmNtZCwiQ29tbWFuZCIsIiIsdG9rdGFiLHh4c3RyaW5nLDEpOworICAgICAgICAg ICAgZGVidWcoRjEwMSwidG9wLWxldmVsIGNta2V5MiIsIiIseHgpOworICAgICAgICAgICAgaWYg KHh4ID09IC01KSB7CisgICAgICAgICAgICAgICAgeXkgPSBjaGt0b2sodG9rdGFiKTsKKyAgICAg ICAgICAgICAgICBkZWJ1ZyhGMTAxLCJ0b3AtbGV2ZWwgY21rZXkgdG9rZW4iLCIiLHl5KTsKKyNp Zm5kZWYgQ09NTUVOVAorICAgICAgICAgICAgICAgIC8qIEVpdGhlciB3YXkgbWFrZXMgYWJzb2x1 dGVseSBubyBkaWZmZXJlbmNlICovCisgICAgICAgICAgICAgICAgZGVidWcoRjExMCwiTk8gVU5H V09SRCIsYXRtYnVmLDApOworICAgICAgICAgICAgICAgIC8qIHVuZ3dvcmQoKTsgKi8KKyNlbHNl CisgICAgICAgICAgICAgICAgZGVidWcoRjExMCwiVE9LRU4gVU5HV09SRCIsYXRtYnVmLDApOwor ICAgICAgICAgICAgICAgIHVuZ3dvcmQoKTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgICAg ICAgICAgICAgc3dpdGNoICh5eSkgeworICAgICAgICAgICAgICAgICAgY2FzZSAnIyc6IHh4ID0g WFhDT007IGJyZWFrOyAvKiBDb21tZW50ICovCisgICAgICAgICAgICAgICAgICBjYXNlICc7Jzog eHggPSBYWENPTTsgYnJlYWs7IC8qIENvbW1lbnQgKi8KKyNpZm5kZWYgTk9TUEwKKyAgICAgICAg ICAgICAgICAgIGNhc2UgJy4nOiB4eCA9IFhYREVGOyB4eGRvdCA9IDE7IGJyZWFrOyAvKiBBc3Np Z25tZW50ICovCisgICAgICAgICAgICAgICAgICBjYXNlICc6JzogeHggPSBYWExCTDsgYnJlYWs7 IC8qIEdPVE8gbGFiZWwgKi8KKyNlbmRpZiAvKiBOT1NQTCAqLworCisjaWZuZGVmIE5PUFVTSAor I2lmZGVmIENLX1JFRElSCisgICAgICAgICAgICAgICAgICBjYXNlICc8JzoKKyNlbmRpZiAvKiBD S19SRURJUiAqLworICAgICAgICAgICAgICAgICAgY2FzZSAnQCc6CisgICAgICAgICAgICAgICAg ICBjYXNlICchJzoKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vcHVzaCkgeworICAgICAgICAg ICAgICAgICAgICAgICAgY2hhciAqczsgaW50IHg7CisgICAgICAgICAgICAgICAgICAgICAgICBp ZiAoKHggPSBjbXR4dCgiVGV4dCB0byBiZSBpZ25vcmVkIiwiIiwmcyxOVUxMKSkgPCAwKQorICAg ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgICAgICAgICAgICAgICAg ICBzdWNjZXNzID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHh4ID0gWFhDT007CisgICAg ICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2go eXkpIHsKKyNpZmRlZiBDS19SRURJUgorICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICc8 JzogeHggPSBYWEZVTjsgYnJlYWs7IC8qIFJFRElSRUNUICovCisjZW5kaWYgLyogQ0tfUkVESVIg Ki8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnQCc6CisgICAgICAgICAgICAgICAg ICAgICAgICAgIGNhc2UgJyEnOiB4eCA9IFhYU0hFOyBicmVhazsgLyogU2hlbGwgZXNjYXBlICov CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogTk9QVVNIICovCisjaWZkZWYgQ0tfUkVD QUxMCisgICAgICAgICAgICAgICAgICBjYXNlICdeJzogeHggPSBYWFJFRE87ICBicmVhazsKKyNl bmRpZiAvKiBDS19SRUNBTEwgKi8KKyNpZm5kZWYgTk9TUEwKKyAgICAgICAgICAgICAgICAgIGNh c2UgJ3snOiB4eCA9IFhYTUFDUk87IGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSAnKCc6 IHh4ID0gWFhTRVhQOyAgYnJlYWs7CisjZW5kaWYgLyogTk9TUEwgKi8KKworICAgICAgICAgICAg ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFxdWlldCAmJiAhY21kX2Vy cikgeworICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJcbj9JbnZhbGlkIC0gXCIlc1wi XG4iLAorCQkJICAgICAgIGNtZGRpc3BsYXkoKGNoYXIgKiljbWRidWYseHgpCisJCQkgICAgICAg KTsKKwkJCWNtZGVycigpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg ICAgIHh4ID0gLTI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGhhdmV0b2tl biA9IDE7CisgICAgICAgICAgICAgICAgZGVidWcoRjEwMSwiSEFWRSBUT0tFTiIsIiIseHgpOwor ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHh4ID4gLTEpIHsKKyAgICAgICAgICAgICAg ICB0b3BjbWQgPSB4eDsgICAgICAgICAgICAvKiBUb3AtbGV2ZWwgY29tbWFuZCBpbmRleCAqLwor I2lmbmRlZiBOT1NQTAorICAgICAgICAgICAgICAgIGlmIChtYWNsdmwgPiAtMSkKKyAgICAgICAg ICAgICAgICAgIGxhc3RjbWRbbWFjbHZsXSA9IHh4OworI2VuZGlmIC8qIE5PU1BMICovCisgICAg ICAgICAgICAgICAgZGVidWcoRjEwMSwidG9wY21kIiwiIix0b3BjbWQpOworICAgICAgICAgICAg ICAgIGRlYnVnKEYxMDEsImNtZmxncyIsIiIsY21mbGdzKTsKKyAgICAgICAgICAgIH0KKworI2lm bmRlZiBOT1NQTAorICAgICAgICAgICAgLyogU3BlY2lhbCBoYW5kbGluZyBmb3IgSUYuLkVMU0Ug Ki8KKworICAgICAgICAgICAgZGVidWcoRjEwMSwiY21kbHZsIiwiIixjbWRsdmwpOworICAgICAg ICAgICAgZGVidWcoRjEwMSwiaWZjbWRbY21kbHZsXSIsIiIsaWZjbWRbY21kbHZsXSk7CisKKyAg ICAgICAgICAgIGlmIChpZmNtZFtjbWRsdmxdKSAgICAgICAgICAvKiBDb3VudCBzdG10cyBhZnRl ciBJRiAqLworICAgICAgICAgICAgICBpZmNtZFtjbWRsdmxdKys7CisgICAgICAgICAgICBpZiAo aWZjbWRbY21kbHZsXSA+IDIgJiYgeHggIT0gWFhFTFMgJiYgeHggIT0gWFhDT00pCisgICAgICAg ICAgICAgIGlmY21kW2NtZGx2bF0gPSAwOworCisgICAgICAgICAgICAvKiBFeGVjdXRlIHRoZSBj b21tYW5kIGFuZCB0YWtlIGFjdGlvbiBiYXNlZCBvbiByZXR1cm4gY29kZS4gKi8KKworICAgICAg ICAgICAgaWYgKG51bGNtZCkgeyAgICAgICAgICAgICAgIC8qIElnbm9yaW5nIHRoaXMgY29tbWFu ZD8gKi8KKyAgICAgICAgICAgICAgICB4eCA9IFhYQ09NOyAgICAgICAgICAgICAvKiBNYWtlIHRo aXMgY29tbWFuZCBhIGNvbW1lbnQuICovCisgICAgICAgICAgICB9CisgICAgICAgICAgICBmbnN1 Y2Nlc3MgPSAxOyAgICAgICAgICAgICAgLyogRm9yIGNhdGNoaW5nIFxmdW5jdGlvbigpIGVycm9y cyAqLworI2VuZGlmIC8qIE5PU1BMICovCisKKyAgICAgICAgICAgIGRlYnVnKEYxMDEsImNhbGxp bmcgZG9jbWQoKSIsIiIseHgpOworICAgICAgICAgICAgenogPSBkb2NtZCh4eCk7ICAgICAgICAg ICAgIC8qIFBhcnNlIHJlc3Qgb2YgY29tbWFuZCAmIGV4ZWN1dGUuICovCisKKyNpZm5kZWYgTk9T UEwKKwkgICAgewkJCQkvKiBGb3IgXHYobGFzdGNvbW1hbmQpICovCisJCWV4dGVybiBjaGFyICog cHJldmNtZDsKKwkJLyogVGhlIGV4Y2VwdGlvbiBsaXN0IGtpbmQgb2YgYSBoYWNrIGJ1dCBsZXQn cyB0cnkgaXQuLi4gKi8KKwkJaWYgKGNrc3RyY21wKGNtZGJ1ZiwiX2dldGFyZyIsNywwKSAmJgor CQkgICAgY2tzdHJjbXAoY21kYnVmLCJpZiAiLDMsMCkgJiYKKwkJICAgIGNrc3RyY21wKGNtZGJ1 ZiwieGlmICIsNCwwKSAmJgorCQkgICAgY2tzdHJjbXAoY21kYnVmLCJkbyBfaWYiLDYsMCkgJiYK KwkJICAgIGNrc3RyY21wKGNtZGJ1ZiwiX2Fzc2lnbiBfaWYiLDExLDApKQorCQkgIGNrc3RybmNw eShwcmV2Y21kLGNtZGJ1ZixDTURCTCk7CisJICAgIH0KKyNlbmRpZgkvKiBOT1NQTCAqLworCisj aWZuZGVmIE5PU1BMCisgICAgICAgICAgICBpZiAoZm5lcnJvciAmJiAhZm5zdWNjZXNzKQorICAg ICAgICAgICAgICBzdWNjZXNzID0gMDsKKyNlbmRpZiAvKiBOT1NQTCAqLworICAgICAgICAgICAg ZGVidWcoRjEwMSwiZG9jbWQgcmV0dXJucyIsIiIsenopOworICAgICAgICAgICAgLyogZGVidWco RjAxMSwiY21kYnVmIixjbWRidWYsMzApOyAqLworICAgICAgICAgICAgLyogZGVidWcoRjAxMSwi YXRtYnVmIixhdG1idWYsMzApOyAqLworI2lmZGVmIE1BQworICAgICAgICAgICAgaWYgKHRsZXZl bCA+IC0xKSB7CisgICAgICAgICAgICAgICAgaWYgKHNzdGF0ZSA9PSAnYScpIHsgICAgLyogaWYg Y21kLS4gY2FuY2VsICovCisgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsICJwYXJzZXI6 IGNhbmNlbCB0YWtlLCBzc3RhdGU6IiwgImEiLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgc3N0 YXRlID0gJ1wwJzsKKyAgICAgICAgICAgICAgICAgICAgZG9zdG9wKCk7CisgICAgICAgICAgICAg ICAgICAgIHJldHVybigwKTsgICAgICAgICAgLyogRW5kIG9mIGluaXQgZmlsZSBvciB3aGF0ZXZl ci4gKi8KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisjZW5kaWYgLyogTUFDICov CisgICAgICAgICAgICBzd2l0Y2ggKHp6KSB7CisgICAgICAgICAgICAgIGNhc2UgLTQ6ICAgICAg ICAgICAgICAgICAgLyogRU9GIChlLmcuIG9uIHJlZGlyZWN0ZWQgc3RkaW4pICovCisgICAgICAg ICAgICAgICAgZG9leGl0KEdPT0RfRVhJVCx4aXRzdGEpOyAvKiAuLi5leGl0IHN1Y2Nlc3NmdWxs eSAqLworICAgICAgICAgICAgICBjYXNlIC0xOiAgICAgICAgICAgICAgICAgIC8qIFJlcGFyc2Ug bmVlZGVkICovCisgICAgICAgICAgICAgICAgcmVwYXJzID0gMTsgICAgICAgICAgICAgLyogSnVz dCBzZXQgcmVwYXJzZSBmbGFnIGFuZC4uLiAqLworICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor I2lmZGVmIE9TMgorICAgICAgICAgICAgICBjYXNlIC03OiAgICAgICAgICAgICAgICAgIC8qIFRo ZXkgdHlwZWQgYSBkaXNrIGxldHRlciAqLworICAgICAgICAgICAgICAgIGlmICghemNoZGlyKChj aGFyICopY21kYnVmKSkgeworICAgICAgICAgICAgICAgICAgICBwZXJyb3IoKGNoYXIgKiljbWRi dWYpOworICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gMDsKKyAgICAgICAgICAgICAgICB9 IGVsc2Ugc3VjY2VzcyA9IDE7CisgICAgICAgICAgICAgICAgcmVwYXJzID0gMDsKKyAgICAgICAg ICAgICAgICBjb250aW51ZTsKKworI2VuZGlmIC8qIE9TMiAqLworICAgICAgICAgICAgICBjYXNl IC02OiAgICAgICAgICAgICAgICAgIC8qIEludmFsaWQgY29tbWFuZCBnaXZlbiB3L25vIGFyZ3Mg Ki8KKyAgICAgICAgICAgICAgY2FzZSAtMjogewkJLyogSW52YWxpZCBjb21tYW5kIGdpdmVuIHcv YXJncyAqLworCQkgIGludCB4ID0gMDsKKwkJICBjaGFyICogZW9sID0gIiI7CisJCSAgeCA9IHN0 cmxlbihjbWRidWYpOwkvKiBBdm9pZCBibGFuayBsaW5lICovCisJCSAgaWYgKHggPiAwKSB7CisJ CSAgICAgIGlmIChjbWRidWZbeC0xXSAhPSBMRikKKwkJCWVvbCA9ICJcbiI7CisJCSAgICAgIHBy aW50ZigiP0ludmFsaWQ6ICVzJXMiLAorCQkJICAgICBjbWRkaXNwbGF5KGNtZGJ1Zix4eCksZW9s CisJCQkgICAgICk7CisJCSAgfSBlbHNlCisJCSAgICBwcmludGYoIj9JbnZhbGlkXG4iKTsKKwkg ICAgICB9CisJICAgICAgY2FzZSAtOToJCQkvKiBCYWQsIGVycm9yIG1lc3NhZ2UgYWxyZWFkeSBk b25lICovCisJCXN1Y2Nlc3MgPSAwOworCQlkZWJ1ZyhGMTEwLCJ0b3AtbGV2ZWwgY21rZXkgZmFp bGVkIixjbWRidWYsMCk7CisJCS8qIElmIGluIGJhY2tncm91bmQgdy8gY29tbWFuZHMgY29taW5n IHN0ZGluLCB0ZXJtaW5hdGUgKi8KKwkJaWYgKHBmbGFnID09IDAgJiYgdGxldmVsIDwgMCkKKwkJ ICBmYXRhbCgiS2VybWl0IGNvbW1hbmQgZXJyb3IgaW4gYmFja2dyb3VuZCBleGVjdXRpb24iKTsK Ky8qCisgIENvbW1hbmQgcmV0cnkgZmVhdHVyZSwgZWRpdCAxOTAuICBJZiB3ZSdyZSBhdCBpbnRl cmFjdGl2ZSBwcm9tcHRpbmcgbGV2ZWwsCisgIHJlcHJvbXB0IHRoZSB1c2VyIHdpdGggYXMgbXVj aCBvZiB0aGUgY29tbWFuZCBhcyBkaWRuJ3QgZmFpbC4KKyovCisjaWZkZWYgQ0tfUkVDQUxMCisJ CWlmIChjbV9yZXRyeSAmJiAheGNtZHNyYykgeyAvKiBJZiBhdCB0b3AgbGV2ZWwgKi8KKwkJICAg IGludCBsZW47CisJCSAgICBjaGFyICpwLCAqczsKKwkJICAgIGxlbiA9IHN0cmxlbihjbWRidWYp OyAvKiBMZW5ndGggb2YgY29tbWFuZCBidWZmZXIgKi8KKwkJICAgIHAgPSBtYWxsb2MobGVuICsg MSk7ICAvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgY29weSAqLworCQkgICAgaWYgKHApIHsgICAgICAg ICAgICAgIC8qIElmIHdlIGdvdCB0aGUgc3BhY2UgY29weSAqLworCQkJc3RyY3B5KHAsY21kYnVm KTsgLyogdGhlIGNvbW1hbmQgYnVmZmVyIChTQUZFKS4gKi8KKwkJCS8qIENob3Agb2ZmIGZpbmFs IGZpZWxkLCB0aGUgb25lIHRoYXQgZmFpbGVkLiAqLworCQkJcyA9IHAgKyBsZW4gLSAxOyAgICAg ICAgICAvKiBQb2ludCB0byBlbmQgKi8KKwkJCXdoaWxlICgqcyA9PSBTUCAmJiBzID4gcCkgLyog VHJpbSBibGFua3MgKi8KKwkJCSAgcy0tOworCQkJd2hpbGUgKCpzICE9IFNQICYmIHMgPiBwKSAv KiBUcmltIGxhc3QgZmllbGQgKi8KKwkJCSAgcy0tOworCQkJaWYgKHMgPiBwKSAgICAgICAgLyog S2VlcCB0aGUgc3BhY2UgKi8KKwkJCSAgcysrOyAgICAgICAgICAgIC8qIGFmdGVyIGxhc3QgZ29v ZCBmaWVsZCAqLworCQkJaWYgKHMgPj0gcCkgICAgICAgLyogQ3V0IG9mZiByZW1haW5kZXIgKi8K KwkJCSAgKnMgPSBOVUw7CisJCQljbWluaShja3hlY2gpOyAgICAvKiBSZWluaXRpYWxpemUgdGhl IHBhcnNlciAqLworCQkJY2tzdHJuY3B5KGNtZGJ1ZixwLENNREJMKTsgLyogQ29weSByZXN1bHQg YmFjayAqLworCQkJZnJlZShwKTsgICAgICAgICAgLyogRnJlZSB0ZW1wb3Jhcnkgc3RvcmFnZSAq LworCQkJcCA9IE5VTEw7CisJCQlwcm9tcHQoeHhzdHJpbmcpOyAvKiBSZXByaW50IHRoZSBwcm9t cHQgKi8KKwkJCXByaW50ZigiJXMiLGNtZGJ1Zik7IC8qIFJlcHJpbnQgcGFydGlhbCBjb21tYW5k ICovCisJCQlyZXBhcnMgPSAxOyAgICAgICAgICAvKiBGb3JjZSByZXBhcnNlICovCisJCQljb250 aW51ZTsKKwkJICAgIH0KKwkJfSBlbHNlCisjZW5kaWYgLyogQ0tfUkVDQUxMICovCisJCSAgY21k ZXJyKCk7CisKKwkJY21pbmkoY2t4ZWNoKTsJCS8qIChmYWxsIHRocnUpICovCisKKwkgICAgICBj YXNlIC0zOgkJCS8qIEVtcHR5IGNvbW1hbmQgT0sgYXQgdG9wIGxldmVsICovCisJCXJlcGFycyA9 IDA7CQkvKiBEb24ndCBuZWVkIHRvIHJlcGFyc2UuICovCisJCWNvbnRpbnVlOwkJLyogR28gYmFj ayBhbmQgZ2V0IGFub3RoZXIgY29tbWFuZC4gKi8KKworCSAgICAgIGRlZmF1bHQ6CQkJLyogQ29t bWFuZCB3YXMgc3VjY2Vzc2Z1bC4gKi8KKyNpZm5kZWYgTk9TUEwKKwkJZGVidWcoRjEwMSwicGFy c2VyIHByZXBhcmluZyB0byBjb250aW51ZSIsIiIsbWFjbHZsKTsKKyNlbmRpZiAvKiBOT1NQTCAq LworCQlkZWJ1ZyhGMTAxLCJwYXJzZXIgc3VjY2VzcyIsIiIsc3VjY2Vzcyk7CisJCXJlcGFycyA9 IDA7CQkvKiBEb24ndCBuZWVkIHRvIHJlcGFyc2UuICovCisJCWNvbnRpbnVlOwkJLyogR28gYmFj ayBhbmQgZ2V0IGFub3RoZXIgY29tbWFuZC4gKi8KKwkgICAgfQorICAgICAgICB9CisjaWZuZGVm IE5PU1BMCisgICAgICAgIGRlYnVnKEYxMDEsInBhcnNlciBicmVha3Mgb3V0IG9mIHdoaWxlIGxv b3AiLCIiLG1hY2x2bCk7CisgICAgICAgIGlmIChtICYmIChjbWRsdmwgPCBpbmxldmVsKSkgIHJl dHVybigoaW50KSBzc3RhdGUpOworI2VuZGlmIC8qIE5PU1BMICovCisgICAgfQorCisvKiBHb3Qg YW4gYWN0aW9uIGNvbW1hbmQsIHJldHVybiBzdGFydCBzdGF0ZS4gKi8KKworICAgIHJldHVybigo aW50KSBzc3RhdGUpOworfQorCisjaWZuZGVmIE5PU1BMCisvKgorICBPVVRQVVQgY29tbWFuZC4K KyAgQnVmZmVyaW5nIGFuZCBwYWNpbmcgYWRkZWQgYnkgTC5JLiBLaXJieSwgNUEoMTg5KSwgSnVu ZSAxOTkzLgorKi8KKyNkZWZpbmUgT0JTSVpFIDgwICAgICAgICAgICAgICAgICAgICAgICAvKiBT aXplIG9mIGxvY2FsIGNoYXJhY3RlciBidWZmZXIgKi8KKworc3RhdGljIGludCBvYm47ICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIEJ1ZmZlciBvZmZzZXQgKGhpZ2ggd2F0ZXIgbWFyaykgKi8K K3N0YXRpYyBjaGFyIG9idWZbT0JTSVpFKzFdOyAgICAgICAgICAgICAvKiBPVVRQVVQgYnVmZmVy LiAqLworc3RhdGljIGNoYXIgKm9icDsgICAgICAgICAgICAgICAgICAgICAgIC8qIFBvaW50ZXIg dG8gb3V0cHV0IGJ1ZmZlci4gKi8KK19QUk9UT1RZUCggc3RhdGljIGludCBvYm9jLCAoY2hhcikg KTsKK19QUk9UT1RZUCggc3RhdGljIGludCB4eG91dCwgKGNoYXIgKiwgaW50KSApOworCitzdGF0 aWMgaW50CisjaWZkZWYgQ0tfQU5TSUMKK3h4b3V0KGNoYXIgKm9idWYsIGludCBvYnNpemUpCisj ZWxzZQoreHhvdXQob2J1Ziwgb2JzaXplKSBjaGFyICpvYnVmOyBpbnQgb2JzaXplOworI2VuZGlm IC8qIENLX0FOU0lDICovCisvKiB4eG91dCAqLyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogT1VUUFVUIGNvbW1hbmQncyBvdXRwdXQgZnVuY3Rpb24gKi8KKyAgICBpbnQgaSwgcmM7CisK KyAgICBkZWJ1ZyhGMTAxLCJ4eG91dCBvYnNpemUiLCIiLG9ic2l6ZSk7CisgICAgZGVidWcoRjEw MSwieHhvdXQgcGFjaW5nIiwiIixwYWNpbmcpOworICAgIGRlYnVnKEYxMTEsInh4b3V0IHN0cmlu ZyIsb2J1ZixzdHJsZW4ob2J1ZikpOworCisgICAgcmMgPSAwOyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogSW5pdGlhbCByZXR1cm4gY29kZS4gKi8KKyAgICBpZiAoIW9idWYgfHwgKG9i c2l6ZSA8PSAwKSkgICAgICAgICAvKiBOb3RoaW5nIHRvIG91dHB1dC4gKi8KKyAgICAgIGdvdG8g eHhvdXRfeDsgICAgICAgICAgICAgICAgICAgICAvKiBSZXR1cm4gc3VjY2Vzc2Z1bGx5ICovCisK KyAgICByYyA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vdyBhc3N1bWUg ZmFpbHVyZSAqLworICAgIGlmIChwYWNpbmcgPT0gMCkgeyAgICAgICAgICAgICAgICAgICAgLyog SXMgcGFjaW5nIGVuYWJsZWQ/ICovCisgICAgICAgIGlmICgobG9jYWwgPyAgICAgICAgICAgICAg ICAgICAgICAvKiBObywgd3JpdGUgZW50aXJlIHN0cmluZyBhdCBvbmNlICovCisgICAgICAgICAg ICAgdHRvbCgoQ0hBUiAqKW9idWYsIG9ic2l6ZSkgOiAvKiB0byBjb21tdW5pY2F0aW9ucyBkZXZp Y2UgKi8KKyAgICAgICAgICAgICBjb254byhvYnNpemUsIG9idWYpKSAgICAgICAgIC8qIG9yIHRv IGNvbnNvbGUgKi8KKyAgICAgICAgICAgICE9IG9ic2l6ZSkKKyAgICAgICAgICBnb3RvIHh4b3V0 X3g7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IG9ic2l6ZTsgaSsrKSB7 ICAvKiBXcml0ZSBpbmRpdmlkdWFsIGNoYXJzICovCisgICAgICAgICAgICBpZiAoKGxvY2FsID8g dHRvYyhvYnVmW2ldKSA6IGNvbm9jKG9idWZbaV0pKSA8IDApCisgICAgICAgICAgICAgIGdvdG8g eHhvdXRfeDsKKyAgICAgICAgICAgIG1zbGVlcChwYWNpbmcpOworICAgICAgICB9CisgICAgfQor ICAgIGlmIChkdXBsZXgpIHsKKyNpZmRlZiBPUzIKKyAgICAgICAgaWYgKGluZWNobyAmJiBsb2Nh bCkgeworI2lmbmRlZiBOT0xPQ0FMCisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgb2JzaXpl OyBpKyspIHsgLyogV3JpdGUgdG8gZW11bGF0b3IgKi8KKyAgICAgICAgICAgICAgICBzY3JpcHR3 cnRidWYoKFVTSE9SVClvYnVmW2ldKTsgLyogd2hpY2ggYWxzbyBsb2dzIHNlc3Npb24gKi8KKyAg ICAgICAgICAgIH0KKyNlbmRpZiAvKiBOT0xPQ0FMICovCisgICAgICAgICAgICBjb254byhvYnNp emUsb2J1Zik7CisgICAgICAgIH0gZWxzZSBpZiAoc2VzbG9nKSB7ICAgICAgICAgICAgLyogb3Ig bG9nIHNlc3Npb24gaGVyZSAqLworICAgICAgICAgICAgbG9nc3RyKChjaGFyICopIG9idWYsIG9i c2l6ZSk7CisgICAgICAgIH0KKyNlbHNlIC8qIE9TMiAqLworICAgICAgICBpZiAoc2VzbG9nKSB7 CisgICAgICAgICAgICBsb2dzdHIoKGNoYXIgKikgb2J1Ziwgb2JzaXplKTsKKyAgICAgICAgfQor ICAgICAgICBpZiAoaW5lY2hvICYmIGxvY2FsKSB7CisgICAgICAgICAgICBjb254byhvYnNpemUs b2J1Zik7CisgICAgICAgIH0KKyNlbmRpZiAvKiBPUzIgKi8KKyAgICB9CisgICAgcmMgPSAwOyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU3VjY2VzcyAqLworICB4eG91dF94OgorICAg IG9ibiA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlc2V0IGNvdW50ICovCisg ICAgb2JwID0gb2J1ZjsgICAgICAgICAgICAgICAgICAgICAgICAgLyogYW5kIHBvaW50ZXJzICov CisgICAgcmV0dXJuKHJjKTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogcmV0dXJuIG91ciBy ZXR1cm4gY29kZSAqLworfQorCisjaWZkZWYgQ09NTUVOVAorLyoKKyAgTWFjcm9zIGZvciBPVVRQ VVQgY29tbWFuZCBleGVjdXRpb24sIHRvIG1ha2UgaXQgZ28gZmFzdGVyLgorKi8KKyNkZWZpbmUg b2JmbHMoKSAoKHh4b3V0KG9idWYsb2JuKTwwKT8tMTowKQorI2RlZmluZSBvYm9jKGMpICgoKm9i cCsrPShjaGFyKShjKSksKm9icD0wLCgoKCsrb2JuKT49T0JTSVpFKT9vYmZscygpOjApKQorCisj ZWxzZSAvKiBUaGUgbWFjcm9zIGNhdXNlIHNvbWUgY29tcGlsZXJzIHRvIGdlbmVyYXRlIGJhZCBj b2RlLiAqLworCitzdGF0aWMgaW50CisjaWZkZWYgQ0tfQU5TSUMKK29ib2MoY2hhciBjKQorI2Vs c2UKK29ib2MoYykgY2hhciBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCisvKiBvYm9jICovIHsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogT1VUUFVUIGNvbW1hbmQncyBvdXRwdXQgZnVu Y3Rpb24gKi8KKworICAgICpvYnArKyA9IGM7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERl cG9zaXQgY2hhcmFjdGVyICovCisgICAgKm9icCA9IE5VTDsgICAgICAgICAgICAgICAgICAgICAg ICAgLyogRmx1c2ggYnVmZmVyIGlmIGl0J3Mgbm93IGZ1bGwgKi8KKworICAgIHJldHVybigoKCsr b2JuKSA+PSBPQlNJWkUpID8geHhvdXQob2J1ZixvYm4pIDogMCk7Cit9CisjZW5kaWYgLyogQ09N TUVOVCAqLworCisvKiAgUm91dGluZXMgZm9yIGhhbmRsaW5nIGxvY2FsIHZhcmlhYmxlcyAtLSBh bHNvIHNlZSBwb3BjbHZsKCkuICAqLworCitWT0lECitmcmVlbG9jYWwobSkgaW50IG07IHsgICAg ICAgICAgICAgICAgICAgLyogRnJlZSBsb2NhbCB2YXJpYWJsZXMgKi8KKyAgICBzdHJ1Y3QgbG9j YWx2YXIgKiB2LCAqIHR2OyAgICAgICAgICAvKiBhdCBtYWNybyBsZXZlbCBtLi4uICovCisgICAg ZGVidWcoRjEwMSwiZnJlZWxvY2FsIGxldmVsIiwiIixtKTsKKyAgICBpZiAobSA8IDApIHJldHVy bjsKKyAgICB2ID0gbG9jYWxoZWFkW21dOyAgICAgICAgICAgICAgICAgICAvKiBMaXN0IGhlYWQg Zm9yIGxldmVsIG0gKi8KKyAgICB3aGlsZSAodikgeworICAgICAgICBpZiAodi0+bHZfbmFtZSkg ICAgICAgICAgICAgICAgIC8qIFZhcmlhYmxlIG5hbWUgKi8KKyAgICAgICAgICBmcmVlKHYtPmx2 X25hbWUpOworICAgICAgICBpZiAodi0+bHZfdmFsdWUpICAgICAgICAgICAgICAgIC8qIFZhbHVl ICovCisgICAgICAgICAgZnJlZSh2LT5sdl92YWx1ZSk7CisgICAgICAgIHR2ID0gdjsgICAgICAg ICAgICAgICAgICAgICAgICAgLyogU2F2ZSBwb2ludGVyIHRvIHRoaXMgbm9kZSAqLworICAgICAg ICB2ID0gdi0+bHZfbmV4dDsgICAgICAgICAgICAgICAgIC8qIEdldCBuZXh0IG9uZSAqLworICAg ICAgICBpZiAodHYpICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZyZWUgdGhpcyBvbmUgKi8K KyAgICAgICAgICBmcmVlKChjaGFyICopdHYpOworICAgIH0KKyAgICBsb2NhbGhlYWRbbV0gPSAo c3RydWN0IGxvY2FsdmFyICopIE5VTEw7IC8qIERvbmUsIHNldCBsaXN0IGhlYWQgdG8gTlVMTCAq LworfQorCisjZGVmaW5lIE1BWExPQ0FMVkFSIDY0CisKKy8qIFJldHVybiBhIHBvaW50ZXIgdG8g dGhlIGRlZmluaXRpb24gb2YgYSB1c2VyLWRlZmluZWQgdmFyaWFibGUgKi8KKworc3RhdGljIGNo YXIgKgordmFyZGVmKHMsaXNhcnJheSx4MSx4MikgY2hhciAqIHM7IGludCAqIGlzYXJyYXksICog eDEsICogeDI7IHsKKyAgICBjaGFyICogcDsKKyAgICBjaGFyIGM7CisgICAgKmlzYXJyYXkgPSAw OworICAgIGlmICghcykgcmV0dXJuKE5VTEwpOworICAgIGlmICghKnMpIHJldHVybihOVUxMKTsK KyAgICBwID0gczsKKyAgICBpZiAoKnMgPT0gQ01EUSkgeworICAgICAgICBwKys7CisgICAgICAg IGlmICghKnApCisgICAgICAgICAgcmV0dXJuKE5VTEwpOworICAgICAgICBpZiAoKGMgPSAqcCkg PT0gJyUnKSB7ICAgICAgICAgIC8qIFNjYWxhciB2YXJpYWJsZS4gKi8KKyAgICAgICAgICAgIGMg PSAqKytwOyAgICAgICAgICAgICAgICAgICAvKiBHZXQgSUQgY2hhcmFjdGVyLiAqLworICAgICAg ICAgICAgcCA9ICIiOyAgICAgICAgICAgICAgICAgICAgIC8qIEFzc3VtZSBkZWZpbml0aW9uIGlz IGVtcHR5ICovCisgICAgICAgICAgICBpZiAoIWMpCisgICAgICAgICAgICAgIHJldHVybihOVUxM KTsKKyAgICAgICAgICAgIGlmIChjID49ICcwJyAmJiBjIDw9ICc5JykgeyAvKiBEaWdpdCBmb3Ig bWFjcm8gYXJnICovCisgICAgICAgICAgICAgICAgaWYgKG1hY2x2bCA8IDApICAgICAgICAgLyog RGlnaXQgdmFyaWFibGVzIGFyZSBnbG9iYWwgKi8KKyAgICAgICAgICAgICAgICAgIHJldHVybihn X3ZhcltjXSk7ICAgICAvKiBpZiBubyBtYWNybyBpcyBhY3RpdmUgKi8KKyAgICAgICAgICAgICAg ICBlbHNlICAgICAgICAgICAgICAgICAgICAvKiBvdGhlcndpc2UgKi8KKyAgICAgICAgICAgICAg ICAgIHJldHVybihtX2FyZ1ttYWNsdmxdW2MgLSAnMCddKTsgLyogdGhleSdyZSBvbiB0aGUgc3Rh Y2sgKi8KKyAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNhbHBoYShjKSkgeworICAgICAgICAgICAg ICAgIGlmIChpc3VwcGVyKGMpKSBjIC09ICgnYSctJ0EnKTsKKyAgICAgICAgICAgICAgICByZXR1 cm4oZ192YXJbY10pOyAgICAgICAgICAgLyogTGV0dGVyIGZvciBnbG9iYWwgdmFyaWFibGUgKi8K KyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICByZXR1cm4oTlVMTCk7CisgICAgICAg IH0gZWxzZSBpZiAoYyA9PSAnJicpIHsgICAgICAgICAgLyogQXJyYXkgcmVmZXJlbmNlLiAqLwor ICAgICAgICAgICAgaW50IHgsIHZiaSwgZDsKKyAgICAgICAgICAgIHggPSBhcnJheW5hbShwLCZ2 YmksJmQpOyAgICAvKiBHZXQgbmFtZSBhbmQgc3Vic2NyaXB0ICovCisgICAgICAgICAgICBpZiAo eCA+IC0xIHx8IGQgPT0gLTE3KSB7CisgICAgICAgICAgICAgICAgKmlzYXJyYXkgPSAxOworICAg ICAgICAgICAgICAgICp4MSA9IHZiaTsKKyAgICAgICAgICAgICAgICAqeDIgPSAoZCA9PSAtMTcp ID8gMCA6IGQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoeCA8IDApCisgICAgICAg ICAgICAgIHJldHVybihOVUxMKTsKKyAgICAgICAgICAgIGlmIChjaGthcnJheSh2YmksZCkgPj0g MCkgewkvKiBBcnJheSBpcyBkZWNsYXJlZD8gKi8KKyAgICAgICAgICAgICAgICB2YmkgLT0gQVJS QVlCQVNFOyAgICAgICAvKiBDb252ZXJ0IG5hbWUgdG8gaW5kZXggKi8KKyAgICAgICAgICAgICAg ICBpZiAoYV9kaW1bdmJpXSA+PSBkKSB7ICAvKiBJZiBzdWJzY3JpcHQgaW4gcmFuZ2UgKi8KKyAg ICAgICAgICAgICAgICAgICAgY2hhciAqKmFwOworICAgICAgICAgICAgICAgICAgICBhcCA9IGFf cHRyW3ZiaV07CisgICAgICAgICAgICAgICAgICAgIHJldHVybigoYXApID8gYXBbZF0gOiBOVUxM KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg cmV0dXJuKE5VTEwpOworICAgIH0gZWxzZSB7CisgICAgICAgIGludCBrOworICAgICAgICBrID0g bXhsb29rKG1hY3RhYixzLG5tYWMpOworICAgICAgICByZXR1cm4oKGsgPiAtMSkgPyBtYWN0YWJb a10ubXZhbCA6IE5VTEwpOworICAgIH0KK30KKworCitpbnQKK2FkZGxvY2FsKHApIGNoYXIgKiBw OyB7CisgICAgaW50IHgsIHosIGlzYXJyYXkgPSAwOworICAgIGNoYXIgKiBzOworICAgIHN0cnVj dCBsb2NhbHZhciAqIHYsICpwcmV2ID0gKHN0cnVjdCBsb2NhbHZhciAqKU5VTEw7CisgICAgZXh0 ZXJuIGludCB0cmFfYXNnOyBpbnQgdHJhX3RtcDsKKworICAgIHRyYV90bXAgPSB0cmFfYXNnOwor CisgICAgcyA9IHZhcmRlZihwLCZpc2FycmF5LCZ4LCZ6KTsgICAgICAgLyogR2V0IGRlZmluaXRp b24gb2YgdmFyaWFibGUgKi8KKyAgICBpZiAoaXNhcnJheSkgeyAgICAgICAgICAgICAgICAgICAg ICAvKiBBcnJheXMgYXJlIGhhbmRsZWQgc3BlY2lhbGx5ICovCisgICAgICAgIHB1c2hhcnJheSh4 LHopOworICAgICAgICByZXR1cm4oMCk7CisgICAgfQorICAgIGlmICghcykgcyA9ICIiOworICAg IGlmICgodiA9IGxvY2FsaGVhZFtjbWRsdmxdKSkgeyAgICAgIC8qIEFscmVhZHkgaGF2ZSBzb21l IGF0IHRoaXMgbGV2ZWw/ICovCisgICAgICAgIHdoaWxlICh2KSB7ICAgICAgICAgICAgICAgICAg ICAgLyogRmluZCBlbmQgb2YgbGlzdCAqLworICAgICAgICAgICAgcHJldiA9IHY7CisgICAgICAg ICAgICB2ID0gdi0+bHZfbmV4dDsKKyAgICAgICAgfQorICAgIH0KKyAgICB2ID0gKHN0cnVjdCBs b2NhbHZhciAqKSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBsb2NhbHZhcikpOworICAgIGlmICghdikg eworICAgICAgICBwcmludGYoIj9GYWlsdXJlIHRvIGFsbG9jYXRlIHN0b3JhZ2UgZm9yIGxvY2Fs IHZhcmlhYmxlcyIpOworICAgICAgICByZXR1cm4oLTkpOworICAgIH0KKyAgICBpZiAoIWxvY2Fs aGVhZFtjbWRsdmxdKSAgICAgICAgICAgICAvKiBJZiBmaXJzdCwgc2V0IGxpc3QgaGVhZCAqLwor ICAgICAgbG9jYWxoZWFkW2NtZGx2bF0gPSB2OworICAgIGVsc2UgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIE90aGVyd2lzZSBsaW5rIHByZXZpb3VzIHRvIHRoaXMgKi8KKyAgICAg IHByZXYtPmx2X25leHQgPSB2OworICAgIHByZXYgPSB2OyAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIEFuZCBtYWtlIHRoaXMgcHJldmlvdXMgKi8KKyAgICB2LT5sdl9uZXh0ID0gKHN0cnVj dCBsb2NhbHZhciAqKSBOVUxMOyAvKiBObyBuZXh0IHlldCAqLworCisgICAgaWYgKCEodi0+bHZf bmFtZSA9IChjaGFyICopIG1hbGxvYygoaW50KSBzdHJsZW4ocCkgKyAxKSkpCisgICAgICByZXR1 cm4oLTEpOworICAgIHN0cmNweSh2LT5sdl9uYW1lLCBwKTsgICAgICAgICAgICAgIC8qIENvcHkg bmFtZSBpbnRvIG5ldyBub2RlIChTQUZFKSAqLworCisgICAgaWYgKCpzKSB7CisgICAgICAgIGlm ICghKHYtPmx2X3ZhbHVlID0gKGNoYXIgKikgbWFsbG9jKChpbnQpIHN0cmxlbihzKSArIDEpKSkK KyAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICBzdHJjcHkodi0+bHZfdmFsdWUsIHMpOyAg ICAgICAgIC8qIENvcHkgdmFsdWUgaW50byBuZXcgbm9kZSAoU0FGRSkgKi8KKyAgICB9IGVsc2UK KyAgICAgIHYtPmx2X3ZhbHVlID0gTlVMTDsKKworICAgIHRyYV9hc2cgPSAwOworICAgIGRlbG1h YyhwLDEpOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIERlbGV0ZSB0aGUgb3JpZ2luYWwgbWFj cm8gKi8KKyAgICB0cmFfYXNnID0gdHJhX3RtcDsKKyAgICByZXR1cm4oMCk7Cit9CisKK2ludAor ZG9sb2NhbCgpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERvIHRoZSBMT0NBTCBj b21tYW5kICovCisgICAgaW50IGksIHg7CisgICAgY2hhciAqIHM7CisgICAgY2hhciAqIGxpc3Rb TUFYTE9DQUxWQVIrMl07ICAgICAgICAgLyogVXAgdG8gNjQgdmFyaWFibGVzIHBlciBsaW5lICov CisKKyAgICBpZiAoKHggPSBjbXR4dCgiVmFyaWFibGUgbmFtZShzKSIsIiIsJnMsTlVMTCkpIDwg MCkKKyAgICAgIHJldHVybih4KTsKKworICAgIHh3b3JkcyhzLE1BWExPQ0FMVkFSLGxpc3QsMCk7 ICAgICAgIC8qIEJyZWFrIHVwIGxpbmUgaW50byAid29yZHMiICovCisKKyAgICAvKiBOb3RlOiBB cnJheXMgZG8gbm90IHVzZSB0aGUgbG9jYWxoZWFkIGxpc3QsIGJ1dCBoYXZlIHRoZWlyIG93biBz dGFjayAqLworCisgICAgZm9yIChpID0gMTsgaSA8IE1BWExPQ0FMVkFSICYmIGxpc3RbaV07IGkr KykgeyAvKiBHbyB0aHJvdWdoIHRoZSBsaXN0ICovCisgICAgICAgIGlmIChhZGRsb2NhbChsaXN0 W2ldKSA8IDApCisgICAgICAgICAgZ290byBsb2NhbGJhZDsKKyAgICB9CisgICAgcmV0dXJuKHN1 Y2Nlc3MgPSAxKTsKKworICBsb2NhbGJhZDoKKyAgICBwcmludGYoIj9GYWlsdXJlIHRvIGFsbG9j YXRlIHN0b3JhZ2UgZm9yIGxvY2FsIHZhcmlhYmxlcyIpOworICAgIGZyZWVsb2NhbChjbWRsdmwp OworICAgIHJldHVybigtOSk7Cit9CisKKy8qICBEIE8gTyBVIFQgUCBVIFQgIC0tICBSZXR1cm5z IDAgb24gZmFpbHVyZSwgMSBvbiBzdWNjZXNzICovCisKKyNpZm5kZWYgTk9LVkVSQlMKKyNkZWZp bmUgS19CVUZMRU4gMzAKKyNkZWZpbmUgU0VORF9CVUZMRU4gMjU1CisjZGVmaW5lIHNlbmRidWZk KHgpIHsgb3NlbmRidWZbc2VuZG5keCsrXSA9IHg7XAorIGlmIChzZW5kbmR4ID09IFNFTkRfQlVG TEVOKSB7ZG9vdXRwdXQocyxjeCk7IHNlbmRuZHggPSAwO319CisjZW5kaWYgLyogTk9LVkVSQlMg Ki8KKworaW50IG91dGVzYyA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFByb2Nlc3Mg c3BlY2lhbCBPVVRQVVQgZXNjYXBlcyAqLworCitpbnQKK2Rvb3V0cHV0KHMsIGN4KSBjaGFyICpz OyBpbnQgY3g7IHsKKyNpZmRlZiBTU0hCVUlMVElOCisgICAgZXh0ZXJuIGludCBzc2hfY2FzOwor ICAgIGV4dGVybiBjaGFyICogc3NoX2NtZDsKKyNlbmRpZiAvKiBTU0hCVUlMVElOICovCisgICAg aW50IHgsIHh4LCB5LCBxdW90ZTsgICAgICAgICAgICAgICAgLyogV29ya2VycyAqLworICAgIGlu dCBpc190biA9IDA7CisKKyAgICBpc190biA9IChsb2NhbCAmJiBuZXR3b3JrICYmIElTX1RFTE5F VCgpKSB8fAorICAgICAgKCFsb2NhbCAmJiBzc3RlbG5ldCk7CisKKyAgICBkZWJ1ZyhGMTExLCJk b291dHB1dCBzIixzLChpbnQpc3RybGVuKHMpKTsKKworICAgIGlmIChsb2NhbCkgeyAgICAgICAg ICAgICAgICAgICAgICAgIC8qIENvbmRpdGlvbiBleHRlcm5hbCBsaW5lICovCisjaWZkZWYgTk9M T0NBTAorICAgICAgICBnb3RvIG91dGVycjsKKyNlbHNlCisJaWYgKHR0Y2hrKCkgPCAwKSB7CisJ ICAgIGlmICghbmV0d29yaykgeworCQlpZiAoY2FycmllciAhPSBDQVJfT0ZGKSB7CisJCSAgICBp bnQgeDsKKwkJICAgIHggPSB0dGdtZG0oKTsKKwkJICAgIGlmICgoeCA+IC0xKSAmJiAoKHggJiBC TV9EQ0QpID09IDApKSB7CisJCQlwcmludGYoCisiP0NhcnJpZXIgc2lnbmFsIHJlcXVpcmVkIGJ1 dCBub3QgcHJlc2VudCAtIFRyeSBTRVQgQ0FSUklFUi1XQVRDSCBPRkYuXG4iCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICApOworCQkJcmV0dXJuKDApOworCQkgICAgfQorCQl9IGVsc2Ug eworCQkgICAgcHJpbnRmKAorIj9Qcm9ibGVtIHdpdGggc2VyaWFsIHBvcnQgb3IgbW9kZW0gb3Ig Y2FibGUgLSBUcnkgU0hPVyBDT01NVU5JQ0FUSU9OUy5cbiIKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgKTsKKwkJICAgIHJldHVybigwKTsKKwkJfQorCSAgICB9CisJICAgIHByaW50ZigiP0Nv bm5lY3Rpb24gJXMgJXMgaXMgbm90IG9wZW4gb3Igbm90IGZ1bmN0aW9uaW5nLlxuIiwKKwkJICAg bmV0d29yayA/ICJ0byIgOiAib24iLAorCQkgICB0dG5hbWUKKwkJICAgKTsKKwkgICAgcmV0dXJu KDApOworCX0KKyAgICAgICAgaWYgKHR0dnQoc3BlZWQsZmxvdykgPCAwKSB7CisgICAgICAgICAg ICBwcmludGYoIj9PVVRQVVQgaW5pdGlhbGl6YXRpb24gZXJyb3JcbiIpOworICAgICAgICAgICAg cmV0dXJuKDApOworICAgICAgICB9CisjZW5kaWYgLyogTk9MT0NBTCAqLworICAgIH0KKyNpZmRl ZiBTU0hCVUlMVElOCisgICAgaWYgKCBuZXR3b3JrICYmIG5ldHR5cGUgPT0gTkVUX1NTSCAmJiBz c2hfY2FzICYmIHNzaF9jbWQgJiYgCisgICAgICAgICAhKHN0cmNtcChzc2hfY21kLCJrZXJtaXQi KSAmJiBzdHJjbXAoc3NoX2NtZCwic2Z0cCIpKSkgeworICAgICAgICBpZiAoIXF1aWV0KQorICAg ICAgICAgICAgcHJpbnRmKCI/U1NIIFN1YnN5c3RlbSBhY3RpdmU6ICVzXG4iLCBzc2hfY21kKTsK KyAgICAgICAgcmV0dXJuKDApOworICAgIH0KKyNlbmRpZiAvKiBTU0hCVUlMVElOICovCisKKyAg ICBpZiAoIWNtZGdxdW8oKSkgeyAgICAgICAgICAgICAgICAgICAvKiBDT01NQU5EIFFVT1RJTkcg T0ZGICovCisgICAgICAgIHggPSBzdHJsZW4ocyk7ICAgICAgICAgICAgICAgICAgLyogSnVzdCBz ZW5kIHRoZSBzdHJpbmcgbGl0ZXJhbGx5ICovCisgICAgICAgIHh4ID0gbG9jYWwgPyB0dG9sKChD SEFSICopcyx4KSA6IGNvbnhvKHgscyk7CisgICAgICAgIHJldHVybihzdWNjZXNzID0gKHh4ID09 IHgpID8gMSA6IDApOworICAgIH0KKyAgICBxdW90ZSA9IDA7ICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBJbml0aWFsaXplIGJhY2tzbGFzaCAoXCkgcXVvdGUgKi8KKyAgICBvYm4gPSAwOyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXNldCBjb3VudCAqLworICAgIG9icCA9IG9i dWY7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFuZCBwb2ludGVycyAqLworCisgIG91dGFn YWluOgorICAgIHdoaWxlICgoeCA9ICpzKyspKSB7ICAgICAgICAgICAgICAgIC8qIExvb3AgdGhy b3VnaCB0aGUgc3RyaW5nICovCisgICAgICAgIHkgPSAwOyAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogRXJyb3IgY29kZSwgMCA9IG5vIGVycm9yLiAqLworICAgICAgICBkZWJ1ZyhGMDAwLCJk b291dHB1dCIsIiIseCk7CisgICAgICAgIGlmIChxdW90ZSkgeyAgICAgICAgICAgICAgICAgICAg LyogVGhpcyBjaGFyYWN0ZXIgaXMgcXVvdGVkICovCisjaWZuZGVmIE5PS1ZFUkJTCisgICAgICAg ICAgIGlmICh4ID09ICdrJyB8fCB4ID09ICdLJykgeyAgLyogXGsgb3IgXEsgKi8KKyAgICAgICAg ICAgICAgIGV4dGVybiBzdHJ1Y3Qga2V5dGFiIGt2ZXJic1tdOworICAgICAgICAgICAgICAgZXh0 ZXJuIGludCBua3ZlcmJzOworICAgICAgICAgICAgICAgZXh0ZXJuIGNoYXIgKiBrZXlkZWZwdHI7 CisgICAgICAgICAgICAgICBleHRlcm4gaW50IGtleW1hYzsKKyAgICAgICAgICAgICAgIGV4dGVy biBpbnQga2V5bWFjeDsKKyAgICAgICAgICAgICAgIGludCB4LCB5LCBicmFjZSA9IDA7CisgICAg ICAgICAgICAgICBpbnQgcGF1c2U7CisgICAgICAgICAgICAgICBjaGFyICogcCwgKiBiOworICAg ICAgICAgICAgICAgY2hhciBrYnVmW0tfQlVGTEVOICsgMV07IC8qIEtleSB2ZXJiIG5hbWUgYnVm ZmVyICovCisgICAgICAgICAgICAgICBjaGFyIG9zZW5kYnVmW1NFTkRfQlVGTEVOICsxXTsKKyAg ICAgICAgICAgICAgIGludCAgc2VuZG5keCA9IDA7CisKKyAgICAgICAgICAgICAgIGlmICh4eG91 dChvYnVmLG9ibikgPCAwKSAvKiBGbHVzaCBidWZmZXIgKi8KKyAgICAgICAgICAgICAgICAgZ290 byBvdXRlcnI7CisgICAgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJPVVRQVVQgS1ZFUkIiLCIiLDAp OyAvKiBTZW5kIGEgS1ZFUkIgKi8KKyAgICAgICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAg ICAgICAvKiBIYXZlIEsgdmVyYj8gKi8KKyAgICAgICAgICAgICAgICAgICBpZiAoISpzKSB7Cisg ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgIH0KKy8qCisg IFdlIGFzc3VtZSB0aGF0IHRoZSB2ZXJiIG5hbWUgaXMge2JyYWNlZH0sIG9yIGl0IGV4dGVuZHMg dG8gdGhlIGVuZCBvZiB0aGUKKyAgc3RyaW5nLCBzLCBvciBpdCBlbmRzIHdpdGggYSBzcGFjZSwg Y29udHJvbCBjaGFyYWN0ZXIsIG9yIGJhY2tzbGFzaC4KKyovCisgICAgICAgICAgICAgICAgICAg cCA9IGtidWY7ICAgICAgICAgICAgLyogQ29weSB2ZXJiIG5hbWUgaW50byBsb2NhbCBidWZmZXIg Ki8KKyAgICAgICAgICAgICAgICAgICB4ID0gMDsKKyAgICAgICAgICAgICAgICAgICB3aGlsZSAo KHgrKyA8IEtfQlVGTEVOKSAmJiAoKnMgPiBTUCkgJiYgKCpzICE9IENNRFEpKSB7CisgICAgICAg ICAgICAgICAgICAgICAgIGlmIChicmFjZSAmJiAqcyA9PSAnfScpIHsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgICAgICAgICAgICpwKysgPSAqcysrOworICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgICAgICAgICBpZiAoKnMgJiYgIWJyYWNlKSAgICAvKiBJZiB3ZSBicm9rZSBiZWNhdXNlIG9m IFwsIGV0YywgKi8KKyAgICAgICAgICAgICAgICAgICAgIHMtLTsgICAgICAgICAgICAgICAvKiAg YmFjayB1cCBzbyB3ZSBnZXQgYW5vdGhlciBsb29rLiAqLworICAgICAgICAgICAgICAgICAgIGJy YWNlID0gMDsKKyAgICAgICAgICAgICAgICAgICAqcCA9IE5VTDsgICAgICAgICAgICAvKiBUZXJt aW5hdGUuICovCisgICAgICAgICAgICAgICAgICAgcCA9IGtidWY7ICAgICAgICAgICAgLyogUG9p bnQgYmFjayB0byBiZWdpbm5pbmcgKi8KKyAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJk b291dHB1dCBrdmVyYiIscCwwKTsKKyAgICAgICAgICAgICAgICAgICB5ID0geGxvb2t1cChrdmVy YnMscCxua3ZlcmJzLCZ4KTsgLyogTG9vayBpdCB1cCAqLworICAgICAgICAgICAgICAgICAgIGRl YnVnKEYxMDEsImRvb3V0cHV0IGxvb2t1cCIsMCx5KTsKKyAgICAgICAgICAgICAgICAgICBpZiAo eSA+IC0xKSB7CisgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZW5kbmR4KSB7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICBkb291dHB1dChvc2VuZGJ1ZixjeCk7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICBzZW5kbmR4ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICAgICAgICAgICBkb2t2ZXJiKFZDTUQseSk7CisjaWZuZGVmIE5PU1BMCisgICAg ICAgICAgICAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgLyogSXMgaXQgYSBtYWNybz8gKi8K KyAgICAgICAgICAgICAgICAgICAgICAgeSA9IG14bG9vayhtYWN0YWIscCxubWFjKTsKKyAgICAg ICAgICAgICAgICAgICAgICAgaWYgKHkgPiAtMSkgeworICAgICAgICAgICAgICAgICAgICAgICAg ICAgY21wdXNoKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXltYWMgPSAxOyAgLyog RmxhZyBmb3Iga2V5IG1hY3JvIGFjdGl2ZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAg a2V5bWFjeCA9IHk7IC8qIEtleSBtYWNybyBpbmRleCAqLworICAgICAgICAgICAgICAgICAgICAg ICAgICAga2V5ZGVmcHRyID0gczsgLyogV2hlcmUgdG8gcmVzdW1lIG5leHQgdGltZSAqLworICAg ICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoRjExMSwiZG9vdXRwdXQgbXhsb29rIixrZXlk ZWZwdHIseSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXIoMSk7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICBjbXBvcCgpOworICAgICAgICAgICAgICAgICAgICAgICB9Cisj ZW5kaWYgLyogTk9TUEwgKi8KKyAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgICBxdW90ZSA9IDA7CisgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg ICAgICAgICAgfSBlbHNlCisjZW5kaWYgLyogTk9LVkVSQlMgKi8KKyAgICAgICAgICAgICBpZiAo b3V0ZXNjICYmICh4ID09ICduJyB8fCB4ID09ICdOJykpIHsgLyogXG4gb3IgXE4gKi8KKyAgICAg ICAgICAgICAgICAgaWYgKHh4b3V0KG9idWYsb2JuKSA8IDApIC8qIEZsdXNoIGJ1ZmZlciAqLwor ICAgICAgICAgICAgICAgICAgIGdvdG8gb3V0ZXJyOworICAgICAgICAgICAgICAgICBkZWJ1ZyhG MTAwLCJPVVRQVVQgTlVMIiwiIiwwKTsgLyogU2VuZCBhIE5VTCAqLworICAgICAgICAgICAgICAg ICBpZiAobG9jYWwpCisgICAgICAgICAgICAgICAgICAgdHRvYyhOVUwpOworICAgICAgICAgICAg ICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgY29ub2MoTlVMKTsKKyAgICAgICAgICAgICAg ICAgcXVvdGUgPSAwOworICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAg IH0gZWxzZSBpZiAob3V0ZXNjICYmICh4ID09ICdiJyB8fCB4ID09ICdCJykpIHsgLyogXGIgb3Ig XEIgKi8KKworICAgICAgICAgICAgICAgIGlmICh4eG91dChvYnVmLG9ibikgPCAwKSAvKiBGbHVz aCBidWZmZXIgZmlyc3QgKi8KKyAgICAgICAgICAgICAgICAgIGdvdG8gb3V0ZXJyOworICAgICAg ICAgICAgICAgIGRlYnVnKEYxMDAsIk9VVFBVVCBCUkVBSyIsIiIsMCk7CisjaWZuZGVmIE5PTE9D QUwKKyAgICAgICAgICAgICAgICB0dHNuZGIoKTsgICAgICAgICAgICAgICAvKiBTZW5kIEJSRUFL IHNpZ25hbCAqLworI2Vsc2UKKyAgICAgICAgICAgICAgICAgaWYgKGxvY2FsKQorICAgICAgICAg ICAgICAgICAgIHR0b2MoTlVMKTsKKyAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg ICAgICAgIGNvbm9jKE5VTCk7CisjZW5kaWYgLyogTk9MT0NBTCAqLworICAgICAgICAgICAgICAg IHF1b3RlID0gMDsgICAgICAgICAgICAgIC8qIFR1cm4gb2ZmIHF1b3RlIGZsYWcgKi8KKyAgICAg ICAgICAgICAgICBjb250aW51ZTsgICAgICAgICAgICAgICAvKiBhbmQgbm90IHRoZSBiIG9yIEIg Ki8KKyNpZmRlZiBDS19MQlJLCisgICAgICAgICAgICAgfSBlbHNlIGlmIChvdXRlc2MgJiYgKHgg PT0gJ2wnIHx8IHggPT0gJ0wnKSkgeyAvKiBcbCBvciBcTCAqLworICAgICAgICAgICAgICAgICBp ZiAoeHhvdXQob2J1ZixvYm4pIDwgMCkgLyogRmx1c2ggYnVmZmVyIGZpcnN0ICovCisgICAgICAg ICAgICAgICAgICAgZ290byBvdXRlcnI7CisgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDAsIk9V VFBVVCBMb25nIEJSRUFLIiwiIiwwKTsKKyNpZm5kZWYgTk9MT0NBTAorICAgICAgICAgICAgICAg ICB0dHNuZGxiKCk7ICAgICAgICAgICAgIC8qIFNlbmQgTG9uZyBCUkVBSyBzaWduYWwgKi8KKyNl bHNlCisgICAgICAgICAgICAgICAgIGlmIChsb2NhbCkKKyAgICAgICAgICAgICAgICAgICB0dG9j KE5VTCk7CisgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICBjb25vYyhO VUwpOworI2VuZGlmIC8qIE5PTE9DQUwgKi8KKyAgICAgICAgICAgICAgICAgcXVvdGUgPSAwOyAg ICAgICAgICAgICAvKiBUdXJuIG9mZiBxdW90ZSBmbGFnICovCisgICAgICAgICAgICAgICAgIGNv bnRpbnVlOyAgICAgICAgICAgICAgLyogYW5kIG5vdCB0aGUgbCBvciBMICovCisjZW5kaWYgLyog Q0tfTEJSSyAqLworCisgICAgICAgICAgICAgfSBlbHNlIGlmICh4ID09IENNRFEpIHsgICAgLyog QmFja3NsYXNoIGl0c2VsZiAqLworICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJPVVRQVVQg Q01EUSIsIiIsMCk7CisgICAgICAgICAgICAgICAgIHh4ID0gb2JvYyhkb3BhcihDTURRKSk7IC8q IE91dHB1dCB0aGUgYmFja3NsYXNoLiAqLworICAgICAgICAgICAgICAgICBpZiAoeHggPCAwKQor ICAgICAgICAgICAgICAgICAgIGdvdG8gb3V0ZXJyOworICAgICAgICAgICAgICAgICBxdW90ZSA9 IDA7CisgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAgfSBlbHNlIHsg ICAgICAgICAgICAgICAgICAgLyogaWYgXCBub3QgZm9sbG93ZWQgYnkgc3BlY2lhbCBlc2MgKi8K KyAgICAgICAgICAgICAgICAvKiBOb3RlOiBBdGFyaSBTVCBjb21waWxlciB3b24ndCBhbGxvdyBt YWNybyBjYWxsIGluICJpZiAoKSIgKi8KKyAgICAgICAgICAgICAgICAgeHggPSBvYm9jKGRvcGFy KENNRFEpKTsgLyogT3V0cHV0IHRoZSBiYWNrc2xhc2guICovCisgICAgICAgICAgICAgICAgIGlm ICh4eCA8IDApCisgICAgICAgICAgICAgICAgICAgZ290byBvdXRlcnI7CisgICAgICAgICAgICAg ICAgIHF1b3RlID0gMDsgICAgICAgICAgICAgLyogVHVybiBvZmYgcXVvdGUgZmxhZyAqLworICAg ICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICh4ID09IENNRFEpIHsgICAgICAgICAvKiBU aGlzIGlzIHRoZSBxdW90ZSBjaGFyYWN0ZXIgKi8KKyAgICAgICAgICAgIHF1b3RlID0gMTsgICAg ICAgICAgICAgICAgICAvKiBHbyBiYWNrIGFuZCBnZXQgbmV4dCBjaGFyYWN0ZXIgKi8KKyAgICAg ICAgICAgIGNvbnRpbnVlOyAgICAgICAgICAgICAgICAgICAvKiB3aGljaCBpcyBxdW90ZWQgKi8K KyAgICAgICAgfQorICAgICAgICB4eCA9IG9ib2MoZG9wYXIoKGNoYXIpeCkpOyAgICAgIC8qIE91 dHB1dCB0aGlzIGNoYXJhY3RlciAqLworICAgICAgICBkZWJ1ZyhGMTExLCJkb291dHB1dCIsb2J1 ZixvYm4pOworICAgICAgICBpZiAoeHggPCAwKQorICAgICAgICAgIGdvdG8gb3V0ZXJyOworI2lm ZGVmIENPTU1FTlQKKyAgICAgICAgaWYgKHNlc2xvZyAmJiBkdXBsZXgpIHsgICAgICAgICAvKiBM b2cgdGhlIGNoYXJhY3RlciBpZiBsb2cgaXMgb24gKi8KKyAgICAgICAgICAgIGxvZ2NoYXIoKGNo YXIpeCk7CisgICAgICAgIH0KKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgICAgIGlmICh4ID09 ICdcMDE1JykgeyAgICAgICAgICAgICAgLyogU3RyaW5nIGNvbnRhaW5zIGNhcnJpYWdlIHJldHVy biAqLworICAgICAgICAgICAgaW50IHN0dWZmID0gLTEsIHN0dWZmMiA9IC0xOworICAgICAgICAg ICAgaWYgKHRubG0pIHsgICAgICAgICAgICAgICAgIC8qIFRFUk1JTkFMIE5FV0xJTkUgT04gKi8K KyAgICAgICAgICAgICAgICBzdHVmZiA9IExGOyAgICAgICAgICAgICAvKiBTdHVmZiBMRiAqLwor ICAgICAgICAgICAgfQorI2lmZGVmIFROQ09ERQorICAgICAgICAgICAgLyogVEVMTkVUIE5FV0xJ TkUgT04vT0ZGL1JBVyAqLworICAgICAgICAgICAgaWYgKGlzX3RuKSB7CisgICAgICAgICAgICAg ICAgc3dpdGNoIChURUxPUFRfTUUoVEVMT1BUX0JJTkFSWSkgPyAvKiBOVlQgb3IgQklOQVJZICov CisgICAgICAgICAgICAgICAgICAgICAgICB0bl9iX25sbSA6CisgICAgICAgICAgICAgICAgICAg ICAgICB0bl9ubG0KKyAgICAgICAgICAgICAgICAgICAgICAgICkgeworICAgICAgICAgICAgICAg ICAgY2FzZSBUTkxfQ1I6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg ICAgICAgY2FzZSBUTkxfQ1JOVUw6CisgICAgICAgICAgICAgICAgICAgIHN0dWZmMiA9IHN0dWZm OworICAgICAgICAgICAgICAgICAgICBzdHVmZiAgPSBOVUw7CisgICAgICAgICAgICAgICAgICAg IGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSBUTkxfQ1JMRjoKKyAgICAgICAgICAgICAg ICAgICAgc3R1ZmYyID0gc3R1ZmY7CisgICAgICAgICAgICAgICAgICAgIHN0dWZmID0gTEY7Cisg ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg IH0KKyNlbmRpZiAvKiBUTkNPREUgKi8KKyAgICAgICAgICAgIGlmIChzdHVmZiA+IC0xKSB7ICAg ICAgICAgICAvKiBTdHVmZmluZyBhbm90aGVyIGNoYXJhY3Rlci4uLiAqLworICAgICAgICAgICAg ICAgIHh4ID0gb2JvYyhkb3BhcigoQ0hBUilzdHVmZikpOworICAgICAgICAgICAgICAgIGlmICh4 eCA8IDApCisgICAgICAgICAgICAgICAgICBnb3RvIG91dGVycjsKKyNpZmRlZiBDT01NRU5UCisg ICAgICAgICAgICAgICAgaWYgKHNlc2xvZyAmJiBkdXBsZXgpIHsgLyogTG9nIHN0dWZmZWQgY2hh ciBpZiBhcHByb3ByaWF0ZSAqLworICAgICAgICAgICAgICAgICAgICBsb2djaGFyKChjaGFyKXN0 dWZmKTsKKyAgICAgICAgICAgICAgICB9CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAgICAg ICAgfQorICAgICAgICAgICAgaWYgKHN0dWZmMiA+IC0xKSB7ICAgICAgICAgIC8qIFN0dWZmaW5n IGFub3RoZXIgY2hhcmFjdGVyLi4uICovCisgICAgICAgICAgICAgICAgeHggPSBvYm9jKGRvcGFy KChDSEFSKXN0dWZmMikpOworICAgICAgICAgICAgICAgIGlmICh4eCA8IDApCisgICAgICAgICAg ICAgICAgICBnb3RvIG91dGVycjsKKyNpZmRlZiBDT01NRU5UCisgICAgICAgICAgICAgICAgaWYg KHNlc2xvZyAmJiBkdXBsZXgpIHsgLyogTG9nIHN0dWZmZWQgY2hhciBpZiBhcHByb3ByaWF0ZSAq LworICAgICAgICAgICAgICAgICAgICBsb2djaGFyKChjaGFyKXN0dWZmMik7CisgICAgICAgICAg ICAgICAgfQorI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg IGlmICh4eG91dChvYnVmLG9ibikgPCAwKSAgICAvKiBGbHVzaGluZyBpcyByZXF1aXJlZCBoZXJl ISAqLworICAgICAgICAgICAgICBnb3RvIG91dGVycjsKKyAgICAgICAgfQorICAgIH0KKyAgICBp ZiAoY3ggPT0gWFhMTk9VVCkgeworICAgICAgICBzID0gIlwwMTUiOworICAgICAgICBjeCA9IDA7 CisgICAgICAgIGdvdG8gb3V0YWdhaW47CisgICAgfQorICAgIGlmIChxdW90ZSA9PSAxKSAgICAg ICAgICAgICAgICAgICAgIC8qIFN0cmluZyBlbmRlZCB3aXRoIGJhY2tzbGFzaCAqLworICAgICAg eHggPSBvYm9jKGRvcGFyKENNRFEpKTsKKworICAgIGlmIChvYm4gPiAwKSAgICAgICAgICAgICAg ICAgICAgICAgIC8qIE9VVFBVVCBkb25lICovCisgICAgICBpZiAoeHhvdXQob2J1ZixvYm4pIDwg MCkgICAgICAgICAgLyogRmx1c2ggdGhlIGJ1ZmZlciBpZiBuZWNlc3NhcnkuICovCisgICAgICAg IGdvdG8gb3V0ZXJyOworICAgIHJldHVybigxKTsKKworb3V0ZXJyOiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIE9VVFBVVCBjb21tYW5kIGVycm9yIGhhbmRsZXIgKi8KKyAgICBp ZiAobXNnZmxnKSBwcmludGYoIj9PVVRQVVQgZXhlY3V0aW9uIGVycm9yXG4iKTsKKyAgICByZXR1 cm4oMCk7CisKKy8qIFJlbW92ZSAibG9jYWwiIE9VVFBVVCBtYWNybyBkZWZpbmluaXRpb25zICov CisKKyNpZmRlZiBDT01NRU5UCisvKiBObyBtb3JlIG1hY3JvcyAuLi4gKi8KKyN1bmRlZiBvYm9j CisjdW5kZWYgb2JmbHMKKyNlbmRpZiAvKiBDT01NRU5UICovCit9CisjZW5kaWYgLyogTk9TUEwg Ki8KKworLyogRGlzcGxheSB2ZXJzaW9uIGhlcmFsZCBhbmQgaW5pdGlhbCBwcm9tcHQgKi8KKwor Vk9JRAoraGVyYWxkKCkgeworICAgIGludCB4ID0gMCwgaTsKKyAgICBleHRlcm4gaW50IHNydmNk bXNnOworICAgIGV4dGVybiBjaGFyICogY2Rtc2dmaWxlW107CisgICAgY2hhciAqIHNzbDsKKyAg ICBjaGFyICoga3JiNDsKKyAgICBjaGFyICoga3JiNTsKKworI2lmbmRlZiBOT0NNREwKKyAgICBl eHRlcm4gY2hhciAqIGJhbm5lcmZpbGU7CisgICAgZGVidWcoRjExMCwiaGVyYWxkIGJhbm5lcmZp bGUiLGJhbm5lcmZpbGUsMCk7CisgICAgaWYgKGJhbm5lcmZpbGUpIHsKKyAgICAgICAgY29uY2Io KGNoYXIpZXNjYXBlKTsKKyAgICAgICAgaWYgKGRvdHlwZShiYW5uZXJmaWxlLDEsMCwwLE5VTEws MCxOVUxMLDAsMCxOVUxMLDApID4gMCkgeworICAgICAgICAgICAgZGVidWcoRjExMSwiaGVyYWxk Iiwic3J2Y2Rtc2ciLHNydmNkbXNnKTsKKyAgICAgICAgICAgIGlmIChzcnZjZG1zZykgeworICAg ICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKKyAgICAgICAgICAgICAgICAg ICAgZGVidWcoRjExMSwiaGVyYWxkIGNkbXNnZmlsZVtpXSIsY2Rtc2dmaWxlW2ldLGkpOworICAg ICAgICAgICAgICAgICAgICBpZiAoemNoa2koY2Rtc2dmaWxlW2ldKSA+IC0xKSB7CisgICAgICAg ICAgICAgICAgICAgICAgICBwcmludGYoIlxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICBk b3R5cGUoY2Rtc2dmaWxlW2ldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhhc2tt b3JlLDAsMCxOVUxMLDAsTlVMTCwwLDAsTlVMTCwwKTsKKyAgICAgICAgICAgICAgICAgICAgICAg IGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgfQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorI2VuZGlmIC8q IE5PQ01ETCAqLworCisjaWZkZWYgQ09NTUVOVAorICAgIC8qIFRoZSBmb2xsb3dpbmcgZ2VuZXJh dGVzIGJhZCBjb2RlIGluIFNDTyBjb21waWxlcnMuICovCisgICAgLyogT2JzZXJ2ZWQgaW4gYm90 aCBPU1I1IGFuZCBVbml4d2FyZSAyIC0tIGFmdGVyIGV4ZWN1dGluZyB0aGlzICovCisgICAgLyog c3RhdGVtZW50IHdoZW4gYWxsIGNvbmRpdGlvbnMgYXJlIGZhbHNlLCB4IGhhcyBhIHZhbHVlIG9m IC0zMi4gKi8KKyAgICBpZiAobm9oZXJhbGQgfHwgcXVpZXQgfHwgYmdzZXQgPiAwIHx8IChiZ3Nl dCAhPSAwICYmIGJhY2tncmQgIT0gMCkpCisgICAgICB4ID0gMTsKKyNlbHNlCisgICAgeCA9IDA7 CisgICAgaWYgKG5vaGVyYWxkIHx8IHF1aWV0KQorICAgICAgeCA9IDE7CisgICAgZWxzZSBpZiAo YmdzZXQgPiAwKQorICAgICAgeCA9IDE7CisgICAgZWxzZSBpZiAoYmdzZXQgPCAwICYmIGJhY2tn cmQgPiAwKQorICAgICAgeCA9IDE7CisjZW5kaWYgLyogQ09NTUVOVCAqLworCisgICAgc3NsID0g IiI7CisgICAga3JiNCA9ICIiOworICAgIGtyYjUgPSAiIjsKKyNpZmRlZiBDS19BVVRIRU5USUNB VElPTgorI2lmZGVmIENLX1NTTCAgICAKKyAgICBzc2wgPSAiK1NTTCI7CisjZW5kaWYJLyogQ0tf U1NMICovCisjaWZkZWYgS1JCNAorICAgIGtyYjQgPSAiK0tSQjQiOworI2VuZGlmCS8qIEtSQjQg Ki8KKyNpZmRlZiBLUkI1CisgICAga3JiNSA9ICIrS1JCNSI7CisjZW5kaWYJLyogS1JCNSAqLwor I2VuZGlmCS8qIENLX0FVVEhFTlRJQ0FUSU9OICovCisKKyAgICBpZiAoeCA9PSAwKSB7CisjaWZk ZWYgZGF0YWdlbmVyYWwKKyAgICAgICAgcHJpbnRmKCIlcywgZm9yJXNcbiIsdmVyc2lvLGNreHN5 cyk7CisjZWxzZQorI2lmZGVmIE9TSworICAgICAgICBwcmludGYoIiVzLCBmb3Ilc1xuIix2ZXJz aW8sY2t4c3lzKTsKKyNlbHNlCisjaWZkZWYgQ0tfNjRCSVQKKyAgICAgICAgcHJpbnRmKCIlcywg Zm9yJXMlcyVzJXMgKDY0LWJpdClcblxyIix2ZXJzaW8sY2t4c3lzLHNzbCxrcmI0LGtyYjUpOwor I2Vsc2UKKyAgICAgICAgcHJpbnRmKCIlcywgZm9yJXMlcyVzJXNcblxyIix2ZXJzaW8sY2t4c3lz LHNzbCxrcmI0LGtyYjUpOworI2VuZGlmLyogQ0tfNjRCSVQgKi8KKyNlbmRpZiAvKiBPU0sgKi8K KyNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLworICAgICAgICBwcmludGYoIiBDb3B5cmlnaHQgKEMp IDE5ODUsICVzLFxuIiwgY2tfY3J5ZWFyKTsKKyAgICAgICAgcHJpbnRmKCIgIFRydXN0ZWVzIG9m IENvbHVtYmlhIFVuaXZlcnNpdHkgaW4gdGhlIENpdHkgb2YgTmV3IFlvcmsuXG4iKTsKKyNpZmRl ZiBPUzIKKyAgICAgICBzaG9yZWcoKTsKKyNlbmRpZiAvKiBPUzIgKi8KKworICAgICAgICBpZiAo IXF1aWV0ICYmICFiYWNrZ3JkKSB7CisjaWZkZWYgQ09NTUVOVAorLyogIkRlZmF1bHQgZmlsZS10 cmFuc2ZlciBtb2RlIGlzIEFVVE9NQVRJQyIgaXMgdXNlbGVzcyBpbmZvcm1hdGlvbi4uLiAqLwor ICAgICAgICAgICAgY2hhciAqIHM7CisgICAgICAgICAgICBleHRlcm4gaW50IHhmZXJtb2RlOwor I2lmZGVmIFZNUworICAgICAgICAgICAgcyA9ICJBVVRPTUFUSUMiOworI2Vsc2UKKyAgICAgICAg ICAgIGlmICh4ZmVybW9kZSA9PSBYTU9ERV9BKSB7CisgICAgICAgICAgICAgICAgcyA9ICJBVVRP TUFUSUMiOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzID0gZ2Ztb2Rl KGJpbmFyeSwxKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghcykgcyA9ICIiOwor I2VuZGlmIC8qIFZNUyAqLworICAgICAgICAgICAgaWYgKCpzKQorICAgICAgICAgICAgICBwcmlu dGYoIkRlZmF1bHQgZmlsZS10cmFuc2ZlciBtb2RlIGlzICVzXG4iLCBzKTsKKyNlbmRpZiAvKiBD T01NRU5UICovCisKKyAgICAgICAgICAgIGRlYnVnKEYxMTEsImhlcmFsZCIsInNydmNkbXNnIixz cnZjZG1zZyk7CisgICAgICAgICAgICBpZiAoc3J2Y2Rtc2cpIHsKKyAgICAgICAgICAgICAgICBm b3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEs ImhlcmFsZCBjZG1zZ2ZpbGVbaV0iLGNkbXNnZmlsZVtpXSxpKTsKKyAgICAgICAgICAgICAgICAg ICAgaWYgKHpjaGtpKGNkbXNnZmlsZVtpXSkgPiAtMSkgeworICAgICAgICAgICAgICAgICAgICAg ICAgcHJpbnRmKCJcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgZG90eXBlKGNkbXNnZmls ZVtpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4YXNrbW9yZSwwLDAsTlVMTCww LE5VTEwsMCwwLE5VTEwsMCk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg ICAgICAgIHByaW50ZigiVHlwZSA/IG9yIEhFTFAgZm9yIGhlbHAuXG4iKTsKKyAgICAgICAgfQor ICAgIH0KK30KKworLyogIEcgRiBNIE8gRCBFICAtLSAgR2V0IEZpbGUgKHRyYW5zZmVyKSBNb2Rl ICAqLworCitjaGFyICoKK2dmbW9kZShiaW5hcnksdXBjYXNlKSBpbnQgYmluYXJ5LCB1cGNhc2U7 IHsKKyAgICBjaGFyICogczsKKyAgICBzd2l0Y2ggKGJpbmFyeSkgeworICAgICAgY2FzZSBYWUZU X1Q6IHMgPSB1cGNhc2UgPyAiVEVYVCIgOiAidGV4dCI7IGJyZWFrOworI2lmZGVmIFZNUworICAg ICAgY2FzZSBYWUZUX0I6IHMgPSB1cGNhc2UgPyAiQklOQVJZIEZJWEVEIiA6ICJiaW5hcnkgZml4 ZWQiOyBicmVhazsKKyAgICAgIGNhc2UgWFlGVF9JOiBzID0gdXBjYXNlID8gIklNQUdFIiA6ICJp bWFnZSI7IGJyZWFrOworICAgICAgY2FzZSBYWUZUX0w6IHMgPSB1cGNhc2UgPyAiTEFCRUxFRCIg OiAibGFiZWxlZCI7IGJyZWFrOworICAgICAgY2FzZSBYWUZUX1U6IHMgPSB1cGNhc2UgPyAiQklO QVJZIFVOREVGIiA6ICJiaW5hcnkgdW5kZWYiOyBicmVhazsKKyNlbHNlCisjaWZkZWYgTUFDCisg ICAgICBjYXNlIFhZRlRfQjogcyA9IHVwY2FzZSA/ICJCSU5BUlkiIDogImJpbmFyeSI7IGJyZWFr OworICAgICAgY2FzZSBYWUZUX006IHMgPSB1cGNhc2UgPyAiTUFDQklOQVJZIiA6ICJtYWNiaW5h cnkiOyBicmVhazsKKyNlbHNlCisgICAgICBjYXNlIFhZRlRfQjogcyA9IHVwY2FzZSA/ICJCSU5B UlkiIDogImJpbmFyeSI7IGJyZWFrOworI2lmZGVmIENLX0xBQkVMRUQKKyAgICAgIGNhc2UgWFlG VF9MOiBzID0gdXBjYXNlID8gIkxBQkVMRUQiIDogImxhYmVsZWQiOyBicmVhazsKKyNlbmRpZiAv KiBDS19MQUJFTEVEICovCisjZW5kaWYgLyogTUFDICovCisjZW5kaWYgLyogVk1TICovCisgICAg ICBjYXNlIFhZRlRfWDogcyA9IHVwY2FzZSA/ICJURU5FWCIgOiAidGVuZXgiOyBicmVhazsKKyAg ICAgIGRlZmF1bHQ6IHMgPSAiIjsKKyAgICB9CisgICAgcmV0dXJuKHMpOworfQorCisjaWZuZGVm IE5PU1BMCitzdGF0aWMgaW50Citpc2FhKHMpIGNoYXIgKiBzOyB7ICAgICAgICAgICAgICAgICAg ICAgLyogSXMgYXNzb2NpYXRpdmUgYXJyYXkgKi8KKyAgICBjaGFyIGM7CisgICAgaW50IHg7Cisg ICAgaWYgKCFzKSBzID0gIiI7CisgICAgaWYgKCEqcykgcmV0dXJuKDApOworICAgIHMrKzsKKyAg ICB3aGlsZSAoKGMgPSAqcysrKSkgeworICAgICAgICBpZiAoYyA9PSAnPCcpIHsKKyAgICAgICAg ICAgIHggPSBzdHJsZW4ocyk7CisgICAgICAgICAgICByZXR1cm4gKCgqKHMreC0xKSA9PSAnPicp ID8gMSA6IDApOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybigwKTsKK30KKworLyogIE0g TCBPIE8gSyAgLS0gIExvb2t1cCB0aGUgbWFjcm8gbmFtZSBpbiB0aGUgbWFjcm8gdGFibGUgICov CisKKy8qCisgIENhbGwgdGhpcyB3YXk6ICB2ID0gbWxvb2sodGFibGUsd29yZCxuKTsKKworICAg IHRhYmxlIC0gYSAnc3RydWN0IG10YWInIHRhYmxlLgorICAgIHdvcmQgIC0gdGhlIHRhcmdldCBz dHJpbmcgdG8gbG9vayB1cCBpbiB0aGUgdGFibGUuCisgICAgbiAgICAgLSB0aGUgbnVtYmVyIG9m IGVsZW1lbnRzIGluIHRoZSB0YWJsZS4KKworICBUaGUga2V5d29yZCB0YWJsZSBtdXN0IGJlIGFy cmFuZ2VkIGluIGFzY2VuZGluZyBhbHBoYWJldGljYWwgb3JkZXIsIGFuZAorICBhbGwgbGV0dGVy cyBtdXN0IGJlIGxvd2VyY2FzZS4KKworICBSZXR1cm5zIHRoZSB0YWJsZSBpbmRleCwgMCBvciBn cmVhdGVyLCBpZiB0aGUgbmFtZSB3YXMgZm91bmQsIG9yOgorCisgICAtMyBpZiBub3RoaW5nIHRv IGxvb2sgdXAgKHRhcmdldCB3YXMgbnVsbCksCisgICAtMiBpZiBhbWJpZ3VvdXMsCisgICAtMSBp ZiBub3QgZm91bmQuCisKKyAgQSBtYXRjaCBpcyBzdWNjZXNzZnVsIGlmIHRoZSB0YXJnZXQgbWF0 Y2hlcyBhIGtleXdvcmQgZXhhY3RseSwgb3IgaWYKKyAgdGhlIHRhcmdldCBpcyBhIHByZWZpeCBv ZiBleGFjdGx5IG9uZSBrZXl3b3JkLiAgSXQgaXMgYW1iaWd1b3VzIGlmIHRoZQorICB0YXJnZXQg bWF0Y2hlcyB0d28gb3IgbW9yZSBrZXl3b3JkcyBmcm9tIHRoZSB0YWJsZS4KKyovCitpbnQKK21s b29rKHRhYmxlLGNtZCxuKSBzdHJ1Y3QgbXRhYiB0YWJsZVtdOyBjaGFyICpjbWQ7IGludCBuOyB7 CisgICAgcmVnaXN0ZXIgaW50IGk7CisgICAgaW50IHYsIHcsIGNtZGxlbiA9IDA7CisgICAgY2hh ciBjID0gMCwgYzEsICogczsKKyAgICBpZiAoIWNtZCkgY21kID0gIiI7CisKKyAgICBmb3IgKHMg PSBjbWQ7ICpzOyBzKyspIGNtZGxlbisrOyAgICAvKiAoaW5zdGVhZCBvZiBzdHJsZW4pICovCisg ICAgZGVidWcoRjExMSwiTUxPT0siLGNtZCxjbWRsZW4pOworCisgICAgYzEgPSAqY21kOworICAg IGlmIChpc3VwcGVyKGMxKSkKKyAgICAgIGMxID0gdG9sb3dlcihjMSk7CisgICAgaWYgKGNtZGxl biA8IDEpCisgICAgICByZXR1cm4oLTMpOworCisvKiBOb3QgbnVsbCwgbG9vayBpdCB1cCAqLwor CisgICAgaWYgKG4gPCAxMikgeyAgICAgICAgICAgICAgICAgICAgICAgLyogTm90IHdvcnRoIGl0 IGZvciBzbWFsbCB0YWJsZXMgKi8KKyAgICAgICAgaSA9IDA7CisgICAgfSBlbHNlIHsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogQmluYXJ5IHNlYXJjaCBmb3Igd2hlcmUgdG8gc3RhcnQg Ki8KKyAgICAgICAgaW50IGxvID0gMDsKKyAgICAgICAgaW50IGhpID0gbjsKKyAgICAgICAgaW50 IGNvdW50ID0gMDsKKyAgICAgICAgd2hpbGUgKGxvKzIgPCBoaSAmJiArK2NvdW50IDwgMTIpIHsK KyAgICAgICAgICAgIGkgPSBsbyArICgoaGkgLSBsbykgLyAyKTsKKyAgICAgICAgICAgIGMgPSAq KHRhYmxlW2ldLmt3ZCk7CisgICAgICAgICAgICBpZiAoaXN1cHBlcihjKSkgYyA9IHRvbG93ZXIo Yyk7CisgICAgICAgICAgICBpZiAoYyA8IGMxKSB7CisgICAgICAgICAgICAgICAgbG8gPSBpOwor ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBoaSA9IGk7CisgICAgICAgICAg ICB9CisgICAgICAgIH0KKyAgICAgICAgaSA9IChjIDwgYzEpID8gbG8rMSA6IGxvOworICAgIH0K KyAgICBmb3IgKCA7IGkgPCBuLTE7IGkrKykgeworICAgICAgICBzID0gdGFibGVbaV0ua3dkOwor ICAgICAgICBpZiAoIXMpIHMgPSAiIjsKKyAgICAgICAgaWYgKCEqcykgY29udGludWU7ICAgICAg ICAgICAgICAvKiBFbXB0eSB0YWJsZSBlbnRyeSAqLworICAgICAgICBjID0gKnM7CisgICAgICAg IGlmIChpc3VwcGVyKGMpKSBjID0gdG9sb3dlcihjKTsKKyAgICAgICAgaWYgKGMxICE9IGMpIGNv bnRpbnVlOyAgICAgICAgICAvKiBGaXJzdCBjaGFyIGRvZXNuJ3QgbWF0Y2ggKi8KKyAgICAgICAg aWYgKCFja3N0cmNtcChzLGNtZCwtMSwwKSkgICAgICAvKiBIYXZlIGV4YWN0IG1hdGNoPyAqLwor ICAgICAgICAgIHJldHVybihpKTsKKyAgICAgICAgdiA9ICFja3N0cmNtcChzLGNtZCxjbWRsZW4s MCk7CisgICAgICAgIHcgPSBja3N0cmNtcCh0YWJsZVtpKzFdLmt3ZCxjbWQsY21kbGVuLDApOwor ICAgICAgICBpZiAodiAmJiB3KSAgICAgICAgICAgICAgICAgICAgIC8qIEhhdmUgYWJicmV2aWF0 ZWQgbWF0Y2g/ICovCisgICAgICAgICAgcmV0dXJuKGkpOworICAgICAgICBpZiAodikgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIEFtYmlndW91cz8gKi8KKyAgICAgICAgICByZXR1cm4oLTIp OworICAgICAgICBpZiAodyA+IDApICAgICAgICAgICAgICAgICAgICAgIC8qIFBhc3Qgb3VyIGFs cGhhYmV0aWMgYXJlYT8gKi8KKyAgICAgICAgICByZXR1cm4oLTEpOworICAgIH0KKworLyogTGFz dCAob3Igb25seSkgZWxlbWVudCAqLworCisgICAgaWYgKCFja3N0cmNtcCh0YWJsZVtuLTFdLmt3 ZCxjbWQsY21kbGVuLDApKQorICAgICAgcmV0dXJuKG4tMSk7CisKKyAgICByZXR1cm4oLTEpOwor fQorCisvKiBteGxvb2sgaXMgbGlrZSBtbG9vaywgYnV0IGFuIGV4YWN0IGZ1bGwtbGVuZ3RoIG1h dGNoIGlzIHJlcXVpcmVkICovCisKK2ludAorbXhsb29rKHRhYmxlLGNtZCxuKSBjaGFyICpjbWQ7 IHN0cnVjdCBtdGFiIHRhYmxlW107IGludCBuOyB7CisgICAgcmVnaXN0ZXIgaW50IGk7CisgICAg aW50IHcsIGNtZGxlbiA9IDAsIG9uZSA9IDA7CisgICAgcmVnaXN0ZXIgY2hhciBjID0gMCwgYzEs ICogczsKKworICAgIGlmICghY21kKSBjbWQgPSAiIjsgICAgICAgICAgICAgICAgIC8qIENoZWNr IGFyZ3MgKi8KKworICAgIGZvciAocyA9IGNtZDsgKnM7IHMrKykgY21kbGVuKys7ICAgIC8qIChp bnN0ZWFkIG9mIHN0cmxlbikgKi8KKyAgICBkZWJ1ZyhGMTExLCJNWExPT0siLGNtZCxjbWRsZW4p OworCisgICAgYzEgPSAqY21kOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRmlyc3QgY2hh ciBvZiBzdHJpbmcgdG8gbG9vayB1cCAqLworICAgIGlmIChpc3VwcGVyKGMxKSkKKyAgICAgIGMx ID0gdG9sb3dlcihjMSk7CisgICAgaWYgKCEqKGNtZCsxKSkgICAgICAgICAgICAgICAgICAgICAg LyogU3BlY2lhbCBoYW5kbGluZyBmb3IgMS1jaGFyIG5hbWVzICovCisgICAgICBvbmUgPSAxOwor CisgICAgaWYgKGNtZGxlbiA8IDEpICAgICAgICAgICAgICAgICAgICAgLyogTm90aGluZyB0byBs b29rIHVwICovCisgICAgICByZXR1cm4oLTMpOworCisgICAgaWYgKG4gPCAxMikgeyAgICAgICAg ICAgICAgICAgICAgICAgLyogTm90IHdvcnRoIGl0IGZvciBzbWFsbCB0YWJsZXMgKi8KKyAgICAg ICAgaSA9IDA7CisgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQmlu YXJ5IHNlYXJjaCBmb3Igd2hlcmUgdG8gc3RhcnQgKi8KKyAgICAgICAgaW50IGxvID0gMDsKKyAg ICAgICAgaW50IGhpID0gbjsKKyAgICAgICAgaW50IGNvdW50ID0gMDsKKyAgICAgICAgd2hpbGUg KGxvKzIgPCBoaSAmJiArK2NvdW50IDwgMTIpIHsKKyAgICAgICAgICAgIGkgPSBsbyArICgoaGkg LSBsbykgLyAyKTsKKyAgICAgICAgICAgIGMgPSAqKHRhYmxlW2ldLmt3ZCk7CisgICAgICAgICAg ICBpZiAoaXN1cHBlcihjKSkgYyA9IHRvbG93ZXIoYyk7CisgICAgICAgICAgICBpZiAoYyA8IGMx KSB7CisgICAgICAgICAgICAgICAgbG8gPSBpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg ICAgICAgICAgICBoaSA9IGk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaSA9 IChjIDwgYzEpID8gbG8rMSA6IGxvOworICAgIH0KKyAgICBmb3IgKCA7IGkgPCBuOyBpKyspIHsg ICAgICAgICAgICAgICAvKiBMb29rIHRocnUgdGFibGUgKi8KKyAgICAgICAgcyA9IHRhYmxlW2ld Lmt3ZDsgICAgICAgICAgICAgICAvKiBUaGlzIGVudHJ5ICovCisgICAgICAgIGlmICghcykgcyA9 ICIiOworICAgICAgICBpZiAoISpzKSBjb250aW51ZTsgICAgICAgICAgICAgIC8qIEVtcHR5IHRh YmxlIGVudHJ5ICovCisgICAgICAgIGMgPSAqczsKKyAgICAgICAgaWYgKGlzdXBwZXIoYykpIGMg PSB0b2xvd2VyKGMpOworICAgICAgICBpZiAoYzEgIT0gYykgY29udGludWU7ICAgICAgICAgIC8q IEZpcnN0IGNoYXIgZG9lc24ndCBtYXRjaCAqLworICAgICAgICBpZiAob25lKSB7ICAgICAgICAg ICAgICAgICAgICAgIC8qIE5hbWUgaXMgb25lIGNoYXIgbG9uZyAqLworICAgICAgICAgICAgaWYg KCEqKHMrMSkpCisgICAgICAgICAgICAgIHJldHVybihpKTsgICAgICAgICAgICAgICAgLyogU28g aXMgdGFibGUgZW50cnkgKi8KKyAgICAgICAgfQorI2lmZGVmIENPTU1FTlQKKyAgICAgICAgaWYg KCgoaW50KXN0cmxlbihzKSA9PSBjbWRsZW4pICYmCisgICAgICAgICAgICAoIWNrc3RyY21wKHMs Y21kLGNtZGxlbiwwKSkpIHJldHVybihpKTsKKyNlbHNlCisgICAgICAgIHcgPSBja3N0cmNtcChz LGNtZCwtMSwwKTsKKyAgICAgICAgaWYgKCF3KSByZXR1cm4oaSk7CisgICAgICAgIGlmICh3ID4g MCkgcmV0dXJuKC0xKTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgfQorICAgIHJldHVybigt MSk7Cit9CisKKy8qIG14eGxvb2sgaXMgbGlrZSBteGxvb2ssIGJ1dCBjYXNlLXNlbnNpdGl2ZSAq LworCitpbnQKK214eGxvb2sodGFibGUsY21kLG4pIGNoYXIgKmNtZDsgc3RydWN0IG10YWIgdGFi bGVbXTsgaW50IG47IHsKKyAgICBpbnQgaSwgY21kbGVuOworICAgIGlmICghY21kKSBjbWQgPSAi IjsKKyAgICBpZiAoKChjbWRsZW4gPSBzdHJsZW4oY21kKSkgPCAxKSB8fCAobiA8IDEpKSByZXR1 cm4oLTMpOworICAgIC8qIGRlYnVnKEYxMTEsIm14eGxvb2sgdGFyZ2V0IixjbWQsbik7ICovCisg ICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworICAgICAgICBpZiAoKChpbnQpc3RybGVuKHRh YmxlW2ldLmt3ZCkgPT0gY21kbGVuKSAmJgorICAgICAgICAgICAgKCFzdHJuY21wKHRhYmxlW2ld Lmt3ZCxjbWQsY21kbGVuKSkpCisgICAgICAgICAgcmV0dXJuKGkpOworICAgIH0KKyAgICByZXR1 cm4oLTEpOworfQorCitzdGF0aWMgaW50Cit0cmFjZXZhbChuYW0sIHZhbCkgY2hhciAqIG5hbSwg KiB2YWw7IHsgLyogRm9yIFRSQUNFIGNvbW1hbmQgKi8KKyAgICBpZiAodmFsKQorICAgICAgcHJp bnRmKCI+Pj4gJXM6IFwiJXNcIlxuIiwgbmFtLCB2YWwpOworICAgIGVsc2UKKyAgICAgIHByaW50 ZigiPj4+ICVzOiAodW5kZWYpXG4iLCBuYW0pOworICAgIHJldHVybigwKTsKK30KKworI2lmZGVm IFVTRV9WQVJMRU4gICAgICAgICAgICAgICAgICAgICAgIC8qIE5vdCB1c2VkICovCisKKy8qICBW IEEgUiBMIEUgTiAgLS0gIEdldCBsZW5ndGggb2YgdmFyaWFibGUncyB2YWx1ZS4KKworICBHaXZl biBhIHZhcmlhYmxlIG5hbWUsIHJldHVybiB0aGUgbGVuZ3RoIG9mIGl0cyBkZWZpbml0aW9uIG9y IDAgaWYgdGhlCisgIHZhcmlhYmxlIGlzIG5vdCBkZWZpbmVkLiAgSWYgaXQgaXMgZGVmaW5lZCwg c2V0IGFyZ3VtZW50IHMgdG8gcG9pbnQgdG8gaXRzCisgIGRlZmluaXRpb24uICBPdGhlcndpc2Ug c2V0IHMgdG8gTlVMTC4KKyovCitpbnQKK3ZhcmxlbihuYW0scykgY2hhciAqbmFtOyBjaGFyICoq czsgeyAgICAvKiBMZW5ndGggb2YgdmFsdWUgb2YgdmFyaWFibGUgKi8KKyAgICBpbnQgeCwgejsK KyAgICBjaGFyICpwID0gTlVMTCwgYzsKKworICAgICpzID0gTlVMTDsKKyAgICBpZiAoIW5hbSkg cmV0dXJuKDApOyAgICAgICAgICAgICAgICAvKiBXYXRjaCBvdXQgZm9yIG51bGwgcG9pbnRlciAq LworICAgIGlmICgqbmFtID09IENNRFEpIHsKKyAgICAgICAgbmFtKys7CisgICAgICAgIGlmICgq bmFtID09ICclJykgeyAgICAgICAgICAgICAgLyogSWYgaXQncyBhIHZhcmlhYmxlIG5hbWUgKi8K KyAgICAgICAgICAgIGlmICghKGMgPSAqKG5hbSsxKSkpIHJldHVybigwKTsgLyogR2V0IGxldHRl ciBvciBkaWdpdCAqLworICAgICAgICAgICAgcCA9IChjaGFyICopMDsgICAgICAgICAgICAgIC8q IEluaXRpYWxpemUgdmFsdWUgcG9pbnRlciAqLworICAgICAgICAgICAgaWYgKG1hY2x2bCA+IC0x ICYmIGMgPj0gJzAnICYmIGMgPD0gJzknKSB7IC8qIERpZ2l0PyAqLworICAgICAgICAgICAgICAg IHAgPSBtX2FyZ1ttYWNsdmxdW2MgLSAnMCddOyAvKiBQb2ludGVyIGZyb20gbWFjcm8tYXJnIHRh YmxlICovCisgICAgICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgLyogSXQncyBh IGdsb2JhbCB2YXJpYWJsZSAqLworICAgICAgICAgICAgICAgIGlmIChjIDwgMzMgfHwgYyA+IEdW QVJTKSByZXR1cm4oMCk7CisgICAgICAgICAgICAgICAgcCA9IGdfdmFyW2NdOyAgICAgICAgICAg LyogR2V0IHBvaW50ZXIgZnJvbSBnbG9iYWwtdmFyIHRhYmxlICovCisgICAgICAgICAgICB9Cisg ICAgICAgIH0gZWxzZSBpZiAoKm5hbSA9PSAnJicpIHsgICAgICAgICAgICAgICAvKiBBbiBhcnJh eSByZWZlcmVuY2U/ICovCisgICAgICAgICAgICBjaGFyICoqcTsKKyAgICAgICAgICAgIGlmIChh cnJheW5hbShuYW0sJngsJnopIDwgMCkgLyogSWYgc3ludGF4IGlzIGJhZCAqLworICAgICAgICAg ICAgICByZXR1cm4oLTEpOyAgICAgICAgICAgICAgIC8qIHJldHVybiAtMS4gKi8KKyAgICAgICAg ICAgIHggLT0gQVJSQVlCQVNFOyAgICAgICAgICAgICAvKiBDb252ZXJ0IG5hbWUgdG8gbnVtYmVy LiAqLworICAgICAgICAgICAgaWYgKChxID0gYV9wdHJbeF0pID09IE5VTEwpIC8qIElmIGFycmF5 IG5vdCBkZWNsYXJlZCwgKi8KKyAgICAgICAgICAgICAgcmV0dXJuKDApOyAgICAgICAgICAgICAg ICAvKiByZXR1cm4gLTIuICovCisgICAgICAgICAgICBpZiAoeiA+IGFfZGltW3hdKSAgICAgICAg ICAgLyogSWYgc3Vic2NyaXB0IG91dCBvZiByYW5nZSwgKi8KKyAgICAgICAgICAgICAgcmV0dXJu KDApOyAgICAgICAgICAgICAgICAvKiByZXR1cm4gLTMuICovCisgICAgICAgICAgICBwID0gcVt6 XTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IE1hY3JvICovCisgICAgICAgIHogPSBpc2FhKG5hbSk7CisgICAgICAgIHggPSB6ID8gbXh4bG9v ayhtYWN0YWIsbmFtLG5tYWMpIDogbWxvb2sobWFjdGFiLG5hbSxubWFjKTsKKyAgICAgICAgaWYg KHggPCAwKQorICAgICAgICAgIHJldHVybigwKTsKKyAgICAgICAgcCA9IG1hY3RhYlt4XS5tdmFs OworICAgIH0KKyAgICBpZiAocCkKKyAgICAgICpzID0gcDsKKyAgICBlbHNlCisgICAgICBwID0g IiI7CisgICAgcmV0dXJuKChpbnQpc3RybGVuKHApKTsKK30KKyNlbmRpZiAvKiBVU0VfVkFSTEVO ICovCisKKy8qCisgIFRoaXMgcm91dGluZSBpcyBmb3IgdGhlIGJlbmVmaXQgb2YgdGhvc2UgY29t cGlsZXJzIHRoYXQgY2FuJ3QgaGFuZGxlCisgIGxvbmcgc3RyaW5nIGNvbnN0YW50cyBvciBjb250 aW51ZWQgbGluZXMgd2l0aGluIHRoZW0uICBMb25nIHByZWRlZmluZWQKKyAgbWFjcm9zIGxpa2Ug Rk9SLCBXSElMRSwgYW5kIFhJRiBoYXZlIHRoZWlyIGNvbnRlbnRzIGJyb2tlbiB1cCBpbnRvCisg IGFycmF5cyBvZiBzdHJpbmcgcG9pbnRlcnMuICBUaGlzIHJvdXRpbmUgY29uY2F0ZW5hdGVzIHRo ZW0gYmFjayBpbnRvIGEKKyAgc2luZ2xlIHN0cmluZyBhZ2FpbiwgYW5kIHRoZW4gY2FsbHMgdGhl IHJlYWwgYWRkbWFjKCkgcm91dGluZSB0byBlbnRlcgorICB0aGUgZGVmaW5pdGlvbiBpbnRvIHRo ZSBtYWNybyB0YWJsZS4KKyovCitpbnQKK2FkZG1tYWMobmFtLHMpIGNoYXIgKm5hbSwgKnNbXTsg eyAgICAgICAvKiBBZGQgYSBtdWx0aWxpbmUgbWFjcm8gZGVmaW5pdGlvbiAqLworICAgIGludCBp LCB4LCB5OyBjaGFyICpwOworICAgIHggPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIExlbmd0aCBjb3VudGVyICovCisgICAgZm9yIChpID0gMDsgKHkgPSAoaW50KXN0cmxlbihz W2ldKSkgPiAwOyBpKyspIHsgLyogQWRkIHVwIHRvdGFsIGxlbmd0aCAqLworICAgICAgICBkZWJ1 ZyhGMTExLCJhZGRtbWFjIGxpbmUiLHNbaV0seSk7CisgICAgICAgIHggKz0geTsKKyAgICB9Cisg ICAgZGVidWcoRjEwMSwiYWRkbW1hYyBsaW5lcyIsIiIsaSk7CisgICAgZGVidWcoRjEwMSwiYWRk bW1hYyBsb29wIGV4aXQiLCIiLHkpOworICAgIGRlYnVnKEYxMTEsImFkZG1tYWMgbGVuZ3RoIixu YW0seCk7CisgICAgaWYgKHggPCAwKSByZXR1cm4oLTEpOworCisgICAgcCA9IG1hbGxvYyh4KzEp OyAgICAgICAgICAgICAgICAgICAgLyogQWxsb2NhdGUgc3BhY2UgZm9yIGFsbCBvZiBpdC4gKi8K KyAgICBpZiAoIXApIHsKKyAgICAgICAgcHJpbnRmKCI/YWRkbW1hYyBtYWxsb2MgZXJyb3I6ICVz XG4iLG5hbSk7CisgICAgICAgIGRlYnVnKEYxMTAsImFkZG1tYWMgbWFsbG9jIGVycm9yIixuYW0s MCk7CisgICAgICAgIHJldHVybigtMSk7CisgICAgfQorICAgICpwID0gJ1wwJzsgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIFN0YXJ0IG9mZiB3aXRoIG51bGwgc3RyaW5nLiAqLworICAgIGZv ciAoaSA9IDA7ICpzW2ldOyBpKyspICAgICAgICAgICAgIC8qIENvbmNhdGVuYXRlIHRoZW0gYWxs IHRvZ2V0aGVyLiAqLworICAgICAgY2tzdHJuY2F0KHAsc1tpXSx4KzEpOworICAgIHkgPSAoaW50 KXN0cmxlbihwKTsgICAgICAgICAgICAgICAgIC8qIEZpbmFsIHByZWNhdXRpb24uICovCisgICAg ZGVidWcoRjExMSwiYWRkbW1hYyBjb25zdHJ1Y3RlZCBzdHJpbmciLHAseSk7CisgICAgaWYgKHkg PT0geCkgeworICAgICAgICB5ID0gYWRkbWFjKG5hbSxwKTsgICAgICAgICAgICAgIC8qIEFkZCBy ZXN1bHQgdG8gdGhlIG1hY3JvIHRhYmxlLiAqLworICAgIH0gZWxzZSB7CisgICAgICAgIGRlYnVn KEYxMDAsImFkZG1tYWMgbGVuZ3RoIG1pc21hdGNoIiwiIiwwKTsKKyAgICAgICAgcHJpbnRmKCJc biFhZGRtbWFjIGludGVybmFsIGVycm9yIVxuIik7CisgICAgICAgIHkgPSAtMTsKKyAgICB9Cisg ICAgZnJlZShwKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRnJlZSB0aGUgdGVtcG9y YXJ5IGNvcHkuICovCisgICAgcmV0dXJuKHkpOworfQorCisvKiBIZXJlIGlzIHRoZSByZWFsIGFk ZG1hYyByb3V0aW5lLiAqLworCisvKiBSZXR1cm5zIC0xIG9uIGZhaWx1cmUsIG1hY3JvIHRhYmxl IGluZGV4ID49IDAgb24gc3VjY2Vzcy4gKi8KKworaW50IG10Y2hhbmdlZCA9IDA7CisKK2ludAor YWRkbWFjKG5hbSxkZWYpIGNoYXIgKm5hbSwgKmRlZjsgeyAgICAgIC8qIEFkZCBhIG1hY3JvIHRv IHRoZSBtYWNybyB0YWJsZSAqLworICAgIGludCBpLCB4LCB5LCB6LCBuYW1sZW4sIGRlZmxlbiwg ZmxhZyA9IDA7CisgICAgaW50IHJlcGxhY2luZyA9IDAsIGRlbGV0aW5nID0gMDsKKyAgICBjaGFy ICogcCA9IE5VTEwsIGMsICpzOworICAgIGV4dGVybiBpbnQgdHJhX2FzZzsgaW50IHRyYV90bXA7 CisKKyAgICBpZiAoIW5hbSkgcmV0dXJuKC0xKTsKKyAgICBpZiAoISpuYW0pIHJldHVybigtMSk7 CisKKyNpZmRlZiBJS1NECisgICAgaWYgKGluc2VydmVyICYmCisjaWZkZWYgSUtTRENPTkYKKyAg ICAgICAgaWtzZGNmCisjZWxzZSAvKiBJS1NEQ09ORiAqLworICAgICAgICAxCisjZW5kaWYgLyog SUtTRENPTkYgKi8KKyAgICAgICAgKSB7CisgICAgICAgIGlmICghY2tzdHJjbXAoIm9uX2V4aXQi LG5hbSwtMSwwKSB8fAorICAgICAgICAgICAgIWNrc3RyY21wKCJvbl9sb2dvdXQiLG5hbSwtMSww KSkKKyAgICAgICAgICByZXR1cm4oLTEpOworICAgIH0KKyNlbmRpZiAvKiBJS1NEICovCisKKyAg ICBuYW1sZW4gPSAwOworICAgIHAgPSBuYW07CisgICAgd2hpbGUgKCpwKyspIG5hbWxlbisrOyAg ICAgICAgICAgICAgLyogKGluc3RlYWQgb2Ygc3RybGVuKSAqLworCisgICAgdHJhX3RtcCA9IHRy YV9hc2c7ICAgICAgICAgICAgICAgICAgLyogdHJhY2UuLi4gKi8KKyAgICBkZWJ1ZyhGMTExLCJh ZGRtYWMgbmFtIixuYW0sbmFtbGVuKTsKKyAgICBpZiAoIWRlZikgeyAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBXYXRjaCBvdXQgZm9yIG51bGwgcG9pbnRlciAqLworICAgICAgICBkZWZsZW4g PSAwOworICAgICAgICBkZWJ1ZyhGMTExLCJhZGRtYWMgZGVmIiwiKG51bGwgcG9pbnRlcikiLGRl Zmxlbik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZGVmbGVuID0gMDsKKyAgICAgICAgcCA9IGRl ZjsKKyAgICAgICAgd2hpbGUgKCpwKyspIGRlZmxlbisrOyAgICAgICAgICAvKiAoaW5zdGVhZCBv ZiBzdHJsZW4pICovCisgICAgICAgIGRlYnVnKEYwMTAsImFkZG1hYyBkZWYiLGRlZiwwKTsKKyAg ICB9CisjaWZkZWYgVVNFX1ZBUkxFTiAgICAgICAgICAgICAgICAgICAgICAgLyogTk9UIFVTRUQg Ki8KKyAgICAvKiBUaGlzIGRvZXMgbm90IGJvb3N0IHBlcmZvcm1hbmNlIG11Y2ggYmVjYXVzZSB2 YXJsZW4oKSBkb2VzIGEgbG90ICovCisgICAgeCA9IHZhcmxlbihuYW0sJnMpOworICAgIGlmICh4 ID4gMCAmJiB4ID49IGRlZmxlbikgeworICAgICAgICBzdHJjcHkocyxkZWYpOyAgICAgICAgICAg ICAgICAgIC8qIE5PVCBVU0VEICovCisgICAgICAgIGZsYWcgPSAxOworICAgICAgICBwID0gczsK KyAgICB9CisjZW5kaWYgLyogVVNFX1ZBUkxFTiAqLworCisgICAgaWYgKCpuYW0gPT0gQ01EUSkg bmFtKys7ICAgICAgICAgICAgLyogQmFja3NsYXNoIHF1b3RlPyAqLworICAgIGlmICgqbmFtID09 ICclJykgeyAgICAgICAgICAgICAgICAgIC8qIFllcywgaWYgaXQncyBhIHZhcmlhYmxlIG5hbWUs ICovCisgICAgICAgIGlmICghKGMgPSAqKG5hbSArIDEpKSkgcmV0dXJuKC0xKTsgLyogVmFyaWFi bGUgbmFtZSBsZXR0ZXIgb3IgZGlnaXQgKi8KKyAgICAgICAgaWYgKCFmbGFnKSB7CisgICAgICAg ICAgICB0cmFfYXNnID0gMDsKKyAgICAgICAgICAgIGRlbG1hYyhuYW0sMCk7ICAgICAgICAgICAg ICAvKiBEZWxldGUgYW55IG9sZCB2YWx1ZS4gKi8KKyAgICAgICAgICAgIHRyYV9hc2cgPSB0cmFf dG1wOworICAgICAgICB9CisgICAgICAgIGlmIChkZWZsZW4gPCAxKSB7ICAgICAgICAgICAgICAg LyogTnVsbCBkZWZpbml0aW9uICovCisgICAgICAgICAgICBwID0gTlVMTDsgICAgICAgICAgICAg ICAgICAgLyogQmV0dGVyIG5vdCBtYWxsb2Mgb3Igc3RyY3B5ISAqLworICAgICAgICB9IGVsc2Ug aWYgKCFmbGFnKSB7ICAgICAgICAgICAgIC8qIEEgc3Vic3RhbnRpYWwgZGVmaW5pdGlvbiAqLwor ICAgICAgICAgICAgcCA9IG1hbGxvYyhkZWZsZW4gKyAxKTsgICAgIC8qIEFsbG9jYXRlIHNwYWNl IGZvciBpdCAqLworICAgICAgICAgICAgaWYgKCFwKSB7CisgICAgICAgICAgICAgICAgcHJpbnRm KCI/YWRkbWFjIG1hbGxvYyBlcnJvciAyXG4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4oLTEp OworICAgICAgICAgICAgfSBlbHNlIHN0cmNweShwLGRlZik7ICAgICAgIC8qIENvcHkgZGVmIGlu dG8gbmV3IHNwYWNlIChTQUZFKSAqLworICAgICAgICB9CisKKyAgICAgICAgLyogTm93IHAgcG9p bnRzIHRvIHRoZSBkZWZpbml0aW9uLCBvciBpcyBhIG51bGwgcG9pbnRlciAqLworCisgICAgICAg IGlmIChjID49ICcwJyAmJiBjIDw9ICc5JykgeyAgICAgLyogXCUwLTkgdmFyaWFibGUgKi8KKyAg ICAgICAgICAgIGlmIChtYWNsdmwgPCAwKSB7ICAgICAgICAgICAvKiBBcmUgd2UgY2FsbGluZyBv ciBpbiBhIG1hY3JvPyAqLworICAgICAgICAgICAgICAgIGdfdmFyW2NdID0gcDsgICAgICAgICAg IC8qIE5vLCBpdCdzIHRvcCBsZXZlbCBvbmUgKi8KKyAgICAgICAgICAgICAgICBtYWtlc3RyKCYo dG9wYXJnW2MgLSAnMCddKSxwKTsgLyogVGFrZSBjYXJlIFwmX1tdIHRvbyAqLworICAgICAgICAg ICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgIC8qIFllcywgaXQncyBhIG1hY3JvIGFyZ3Vt ZW50ICovCisgICAgICAgICAgICAgICAgbV9hcmdbbWFjbHZsXVtjIC0gJzAnXSA9IHA7IC8qIEFz c2lnbiB0aGUgdmFsdWUgKi8KKyAgICAgICAgICAgICAgICBtYWtlc3RyKCYobV94YXJnW21hY2x2 bF1bYyAtICcwJ10pLHApOyAvKiBBbmQgYSBjb3B5IGhlcmUgKi8KKyAgICAgICAgICAgIH0KKyAg ICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBJdCdzIGEgXCVhLXogdmFy aWFibGUgKi8KKyAgICAgICAgICAgIGlmIChjIDwgMzMgfHwgKHVuc2lnbmVkIGludCljID4gR1ZB UlMpIHJldHVybigtMSk7CisgICAgICAgICAgICBpZiAoaXN1cHBlcihjKSkgYyA9IChjaGFyKSB0 b2xvd2VyKGMpOworICAgICAgICAgICAgZ192YXJbY10gPSBwOyAgICAgICAgICAgICAgIC8qIFB1 dCBwb2ludGVyIGluIGdsb2JhbC12YXIgdGFibGUgKi8KKyAgICAgICAgfQorICAgICAgICBpZiAo dHJhX2FzZykgdHJhY2V2YWwobmFtLHApOworICAgICAgICByZXR1cm4oMCk7CisgICAgfSBlbHNl IGlmICgqbmFtID09ICcmJykgeyAgICAgICAgICAgLyogQW4gYXJyYXkgcmVmZXJlbmNlPyAqLwor ICAgICAgICBjaGFyICoqcSA9IE5VTEw7CisgICAgICAgIGludCByYyA9IDA7CisgICAgICAgIGlm ICgoeSA9IGFycmF5bmFtKG5hbSwmeCwmeikpIDwgMCkgLyogSWYgc3ludGF4IGlzIGJhZCAqLwor ICAgICAgICAgIHJldHVybigtMSk7ICAgICAgICAgICAgICAgICAgIC8qIHJldHVybiAtMS4gKi8K KyAgICAgICAgaWYgKGNoa2FycmF5KHgseikgPCAwKSAgICAgICAgICAvKiBJZiBhcnJheSBub3Qg ZGVjbGFyZWQgb3IgKi8KKyAgICAgICAgICByYyA9IC0yOyAgICAgICAgICAgICAgICAgICAgICAv KiBzdWJzY3JpcHQgb3V0IG9mIHJhbmdlLCByZXQgLTIgKi8KKyAgICAgICAgaWYgKCFmbGFnKSB7 CisgICAgICAgICAgICB0cmFfYXNnID0gMDsKKyAgICAgICAgICAgIGRlbG1hYyhuYW0sMCk7ICAg ICAgICAgICAgICAvKiBEZWxldGUgYW55IG9sZCB2YWx1ZS4gKi8KKyAgICAgICAgICAgIHRyYV9h c2cgPSB0cmFfdG1wOworICAgICAgICB9CisgICAgICAgIHggLT0gQVJSQVlCQVNFOyAgICAgICAg ICAgICAgICAgLyogQ29udmVydCBuYW1lIGxldHRlciB0byBpbmRleC4gKi8KKyAgICAgICAgaWYg KHggPiAneicgLSBBUlJBWUJBU0UgKyAxKQorICAgICAgICAgIHJjID0gLTE7CisgICAgICAgIGlm IChyYyAhPSAtMSkgeworICAgICAgICAgICAgaWYgKChxID0gYV9wdHJbeF0pID09IE5VTEwpIC8q IElmIGFycmF5IG5vdCBkZWNsYXJlZCwgKi8KKyAgICAgICAgICAgICAgcmV0dXJuKC0zKTsgICAg ICAgICAgICAgICAvKiByZXR1cm4gLTMuICovCisgICAgICAgIH0KKyAgICAgICAgaWYgKHJjIDwg MCkKKyAgICAgICAgICByZXR1cm4ocmMpOworICAgICAgICBpZiAoIWZsYWcpIHsKKyAgICAgICAg ICAgIGlmIChkZWZsZW4gPiAwKSB7CisgICAgICAgICAgICAgICAgaWYgKChwID0gbWFsbG9jKGRl ZmxlbisxKSkgPT0gTlVMTCkgeyAvKiBBbGxvY2F0ZSBzcGFjZSAqLworICAgICAgICAgICAgICAg ICAgICBwcmludGYoImFkZG1hYyBtYWNybyBlcnJvciA3OiAlc1xuIixuYW0pOworICAgICAgICAg ICAgICAgICAgICByZXR1cm4oLTQpOyAgICAgICAgIC8qIGZvciBuZXcgZGVmLCByZXR1cm4gLTQg b24gZmFpbC4gKi8KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc3RyY3B5KHAs ZGVmKTsgICAgICAgICAgLyogQ29weSBkZWYgaW50byBuZXcgc3BhY2UgKFNBRkUpLiAqLworICAg ICAgICAgICAgfSBlbHNlIHAgPSBOVUxMOworICAgICAgICB9CisgICAgICAgIHFbel0gPSBwOyAg ICAgICAgICAgICAgICAgICAgICAgLyogU3RvcmUgcG9pbnRlciB0byBpdC4gKi8KKyAgICAgICAg aWYgKHggPT0gMCkgeyAgICAgICAgICAgICAgICAgICAvKiBBcmcgdmVjdG9yIGFycmF5ICovCisg ICAgICAgICAgICBpZiAoeiA+PSAwICYmIHogPD0gOSkgeyAgICAgLyogQ29weSB2YWx1ZXMgdG8g Y29ycmVzcG9uZGluZyAgKi8KKyAgICAgICAgICAgICAgICBpZiAobWFjbHZsIDwgMCkgeyAgICAg ICAvKiBcJTEuLjkgdmFyaWFibGVzLiAqLworICAgICAgICAgICAgICAgICAgICBtYWtlc3RyKCYo dG9wYXJnW3pdKSxwKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg ICAgICBtYWtlc3RyKCYobV9hcmdbbWFjbHZsXVt6XSkscCk7CisgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICh0cmFfYXNnKSB0cmFjZXZhbChu YW0scCk7CisgICAgICAgIHJldHVybigwKTsgICAgICAgICAgICAgICAgICAgICAgLyogRG9uZS4g Ki8KKyAgICB9CisKKy8qIE5vdCBhIG1hY3JvIGFyZ3VtZW50IG9yIGEgdmFyaWFibGUsIHNvIGl0 J3MgYSBtYWNybyBkZWZpbml0aW9uICovCisKKyNpZmRlZiBVU0VfVkFSTEVOCisgICAgaWYgKGZs YWcpIHsKKyAgICAgICAgaWYgKHRyYV9hc2cpIHRyYWNldmFsKG5hbSxwKTsKKyAgICAgICAgcmV0 dXJuKDApOworICAgIH0KKyNlbmRpZiAvKiBVU0VfVkFSTEVOICovCisgICAgeCA9IGlzYWEobmFt KSA/ICAgICAgICAgICAgICAgICAgICAgLyogSWYgaXQncyBhbiBhc3NvY2lhdGl2ZSBhcnJheSAq LworICAgICAgbXh4bG9vayhtYWN0YWIsbmFtLG5tYWMpIDogICAgICAgIC8qIGxvb2sgaXQgdXAg dGhpcyB3YXkgKi8KKyAgICAgICAgbXhsb29rKG1hY3RhYixuYW0sbm1hYyk7ICAgICAgICAvKiBv dGhlcndpc2UgdGhpcyB3YXkuICovCisgICAgaWYgKHggPiAtMSkgeyAgICAgICAgICAgICAgICAg ICAgICAgLyogSWYgZm91bmQuLi4gKi8KKyAgICAgICAgaWYgKGRlZmxlbiA+IDApICAgICAgICAg ICAgICAgICAvKiBhbmQgYSBuZXcgZGVmaW5pdGlvbiB3YXMgZ2l2ZW4gKi8KKyAgICAgICAgICBy ZXBsYWNpbmcgPSAxOyAgICAgICAgICAgICAgICAvKiB3ZSdyZSByZXBsYWNpbmcgKi8KKyAgICAg ICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBvdGhlcndpc2UgKi8KKyAgICAg ICAgICBkZWxldGluZyA9IDE7ICAgICAgICAgICAgICAgICAvKiB3ZSdyZSBkZWxldGluZyAqLwor ICAgIH0KKyAgICBpZiAoZGVsZXRpbmcpIHsgICAgICAgICAgICAgICAgICAgICAvKiBEZWxldGlu Zy4uLiAqLworICAgICAgICBpZiAoZGVsbWFjKG5hbSwwKSA8IDApCisgICAgICAgICAgcmV0dXJu KC0xKTsKKyAgICAgICAgbXRjaGFuZ2VkKys7CisgICAgICAgIGlmICh0cmFfYXNnKSB0cmFjZXZh bChuYW0scCk7CisgICAgICAgIHJldHVybigwKTsKKyAgICB9IGVsc2UgaWYgKGRlZmxlbiA8IDEp ICAgICAgICAgICAgICAvKiBOZXcgbWFjcm8gd2l0aCBubyBkZWZpbml0aW9uICovCisgICAgICBy ZXR1cm4oMCk7ICAgICAgICAgICAgICAgICAgICAgICAgLyogTm90aGluZyB0byBkby4gKi8KKwor ICAgIGlmIChyZXBsYWNpbmcpIHsgICAgICAgICAgICAgICAgICAgIC8qIFJlcGxhY2luZyBhbiBl eGlzdGluZyBtYWNybyAqLworICAgICAgICBpZiAobWFjdGFiW3hdLm12YWwpIHsgICAgICAgICAg IC8qIElmIGl0IGN1cnJlbnRseSBoYXMgYSBkZWZpbml0aW9uLCAqLworICAgICAgICAgICAgZnJl ZShtYWN0YWJbeF0ubXZhbCk7ICAgICAgIC8qIGZyZWUgaXQuICovCisgICAgICAgICAgICBtYWN0 YWJbeF0ubXZhbCA9IE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgbXRjaGFuZ2VkKys7CisgICAg ICAgIHkgPSB4OyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVwbGFjZW1lbnQgaW5kZXgu ICovCisKKyAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBZGRpbmcg YSBuZXcgbWFjcm8uLi4gKi8KKyAgICAgICAgY2hhciBjMSwgYzI7ICAgICAgICAgICAgICAgICAg ICAvKiBVc2UgZmFzdCBsb29rdXAgdG8gZmluZCB0aGUgKi8KKyAgICAgICAgYzEgPSAqbmFtOyAg ICAgICAgICAgICAgICAgICAgICAvKiBhbHBoYWJldGljYWwgc2xvdC4gKi8KKyAgICAgICAgaWYg KGlzdXBwZXIoYzEpKSBjMSA9IChjaGFyKSB0b2xvd2VyKGMxKTsKKworICAgICAgICBpZiAobm1h YyA8IDUpIHsgICAgICAgICAgICAgICAgIC8qIE5vdCB3b3J0aCBpdCBmb3Igc21hbGwgdGFibGVz ICovCisgICAgICAgICAgICB5ID0gMDsKKyAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAg ICAgICAgICAvKiBGaXJzdCBiaW5hcnkgc2VhcmNoIHRvIGZpbmQgKi8KKyAgICAgICAgICAgIGlu dCBsbyA9IDA7ICAgICAgICAgICAgICAgICAvKiB3aGVyZSB0byBzdGFydCAqLworICAgICAgICAg ICAgaW50IGhpID0gbm1hYzsKKyAgICAgICAgICAgIGludCBjb3VudCA9IDA7CisgICAgICAgICAg ICBjaGFyIGMgPSAwOworICAgICAgICAgICAgd2hpbGUgKGxvKzIgPCBoaSAmJiArK2NvdW50IDwg MTIpIHsKKyAgICAgICAgICAgICAgICB5ID0gbG8gKyAoKGhpIC0gbG8pIC8gMik7CisgICAgICAg ICAgICAgICAgYyA9ICoobWFjdGFiW3ldLmt3ZCk7CisgICAgICAgICAgICAgICAgaWYgKGlzdXBw ZXIoYykpIGMgPSAoY2hhcikgdG9sb3dlcihjKTsKKyAgICAgICAgICAgICAgICBpZiAoYyA8IGMx KSB7CisgICAgICAgICAgICAgICAgICAgIGxvID0geTsKKyAgICAgICAgICAgICAgICB9IGVsc2Ug eworICAgICAgICAgICAgICAgICAgICBoaSA9IHk7CisgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgfQorICAgICAgICAgICAgeSA9IChjIDwgYzEpID8gbG8rMSA6IGxvOworICAgICAgICB9 CisgICAgICAgIC8qIE5vdyBzZWFyY2ggbGluZWFybHkgZnJvbSBzdGFydGluZyBsb2NhdGlvbiAq LworICAgICAgICBmb3IgKCA7IHkgPCBNQUNfTUFYICYmIG1hY3RhYlt5XS5rd2QgIT0gTlVMTDsg eSsrKSB7CisgICAgICAgICAgICBjMiA9ICoobWFjdGFiW3ldLmt3ZCk7CisgICAgICAgICAgICBp ZiAoaXN1cHBlcihjMikpIGMyID0gKGNoYXIpIHRvbG93ZXIoYzIpOworICAgICAgICAgICAgaWYg KGMxID4gYzIpCisgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKGMxIDwg YzIpCisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKGNrc3RyY21wKG5hbSxt YWN0YWJbeV0ua3dkLC0xLDApIDw9IDApCisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9 CisgICAgICAgIGlmICh5ID09IE1BQ19NQVgpIHsgICAgICAgICAgICAgLyogTWFjcm8gdGFibGUg aXMgZnVsbC4gKi8KKyAgICAgICAgICAgIGRlYnVnKEYxMDEsImFkZG1hYyB0YWJsZSBvdmVyZmxv dyIsIiIseSk7CisgICAgICAgICAgICBwcmludGYoIj9NYWNybyB0YWJsZSBvdmVyZmxvd1xuIik7 CisgICAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICB9CisgICAgICAgIGlmIChtYWN0YWJb eV0ua3dkICE9IE5VTEwpIHsgICAgLyogTXVzdCBpbnNlcnQgKi8KKyAgICAgICAgICAgIGZvciAo aSA9IG5tYWM7IGkgPiB5OyBpLS0pIHsgLyogTW92ZSB0aGUgcmVzdCBkb3duIG9uZSBzbG90ICov CisgICAgICAgICAgICAgICAgbWFjdGFiW2ldLmt3ZCA9IG1hY3RhYltpLTFdLmt3ZDsKKyAgICAg ICAgICAgICAgICBtYWN0YWJbaV0ubXZhbCA9IG1hY3RhYltpLTFdLm12YWw7CisgICAgICAgICAg ICAgICAgbWFjdGFiW2ldLmZsZ3MgPSBtYWN0YWJbaS0xXS5mbGdzOworICAgICAgICAgICAgfQor ICAgICAgICB9CisgICAgICAgIG10Y2hhbmdlZCsrOworICAgICAgICBwID0gbWFsbG9jKG5hbWxl biArIDEpOyAgICAgICAgIC8qIEFsbG9jYXRlIHNwYWNlIGZvciBuYW1lICovCisgICAgICAgIGlm ICghcCkgeworICAgICAgICAgICAgcHJpbnRmKCI/QWRkbWFjOiBPdXQgb2YgbWVtb3J5IC0gXCIl c1wiXG4iLG5hbSk7CisgICAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICB9CisgICAgICAg IHN0cmNweShwLG5hbSk7ICAgICAgICAgICAgICAgICAgLyogQ29weSBuYW1lIGludG8gbmV3IHNw YWNlIChTQUZFKSAqLworICAgICAgICBtYWN0YWJbeV0ua3dkID0gcDsgICAgICAgICAgICAgIC8q IEFkZCBwb2ludGVyIHRvIHRhYmxlICovCisgICAgfQorICAgIGlmIChkZWZsZW4gPiAwKSB7ICAg ICAgICAgICAgICAgICAgIC8qIElmIHdlIGhhdmUgYSBkZWZpbml0aW9uICovCisgICAgICAgIHAg PSBtYWxsb2MoZGVmbGVuICsgMSk7ICAgICAgICAgLyogR2V0IHNwYWNlICovCisgICAgICAgIGlm IChwID09IE5VTEwpIHsKKyAgICAgICAgICAgIHByaW50ZigiP1NwYWNlIGV4aGF1c3RlZCAtIFwi JXNcIlxuIiwgbmFtKTsKKyAgICAgICAgICAgIGlmIChtYWN0YWJbeV0ua3dkKSB7CisgICAgICAg ICAgICAgICAgZnJlZShtYWN0YWJbeV0ua3dkKTsKKyAgICAgICAgICAgICAgICBtYWN0YWJbeV0u a3dkID0gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybigtMSk7CisgICAg ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzdHJjcHkocCxkZWYpOyAgICAgICAgICAgICAgLyog Q29weSB0aGUgZGVmaW5pdGlvbiAoU0FGRSkgKi8KKyAgICAgICAgfQorICAgIH0gZWxzZSB7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRlZmluaXRpb24gaXMgZW1wdHkgKi8KKyAgICAg ICAgcCA9IE5VTEw7CisgICAgfQorICAgIG1hY3RhYlt5XS5tdmFsID0gcDsgICAgICAgICAgICAg ICAgIC8qIE1hY3JvIHBvaW50cyB0byBkZWZpbml0aW9uICovCisgICAgbWFjdGFiW3ldLmZsZ3Mg PSAwOyAgICAgICAgICAgICAgICAgLyogTm8gZmxhZ3MgKi8KKyAgICBpZiAoIXJlcGxhY2luZykg ICAgICAgICAgICAgICAgICAgICAvKiBJZiBuZXcgbWFjcm8gKi8KKyAgICAgIG5tYWMrKzsgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBjb3VudCBpdCAqLworICAgIGlmICh0cmFfYXNnKSB0 cmFjZXZhbChuYW0scCk7CisgICAgcmV0dXJuKHkpOworfQorCitpbnQKK3hkZWxtYWMoeCkgaW50 IHg7IHsgICAgICAgICAgICAgICAgICAgICAvKiBEZWxldGUgYSBtYWNybyBnaXZlbiBpdHMgaW5k ZXggKi8KKyAgICBpbnQgaTsKKyAgICBleHRlcm4gaW50IHRyYV9hc2c7CisgICAgaWYgKHggPCAw KSByZXR1cm4oeCk7CisgICAgaWYgKHRyYV9hc2cpCisgICAgICB0cmFjZXZhbChtYWN0YWJbeF0u a3dkLE5VTEwpOworCisgICAgaWYgKG1hY3RhYlt4XS5rd2QpIHsgICAgICAgICAgICAgICAgLyog RnJlZSB0aGUgc3RvcmFnZSBmb3IgdGhlIG5hbWUgKi8KKyAgICAgICAgZnJlZShtYWN0YWJbeF0u a3dkKTsKKyAgICAgICAgbWFjdGFiW3hdLmt3ZCA9IE5VTEw7CisgICAgfQorICAgIGlmIChtYWN0 YWJbeF0ubXZhbCkgeyAgICAgICAgICAgICAgIC8qIGFuZCBmb3IgdGhlIGRlZmluaXRpb24gKi8K KyAgICAgICAgZnJlZShtYWN0YWJbeF0ubXZhbCk7CisgICAgICAgIG1hY3RhYlt4XS5tdmFsID0g TlVMTDsKKyAgICB9CisgICAgZm9yIChpID0geDsgaSA8IG5tYWM7IGkrKykgeyAgICAgICAgLyog Tm93IG1vdmUgdXAgdGhlIG90aGVycy4gKi8KKyAgICAgICAgbWFjdGFiW2ldLmt3ZCA9IG1hY3Rh YltpKzFdLmt3ZDsKKyAgICAgICAgbWFjdGFiW2ldLm12YWwgPSBtYWN0YWJbaSsxXS5tdmFsOwor ICAgICAgICBtYWN0YWJbaV0uZmxncyA9IG1hY3RhYltpKzFdLmZsZ3M7CisgICAgfQorICAgIG5t YWMtLTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE9uZSBsZXNzIG1hY3JvICovCisK KyAgICBtYWN0YWJbbm1hY10ua3dkID0gTlVMTDsgICAgICAgICAgICAvKiBEZWxldGUgbGFzdCBp dGVtIGZyb20gdGFibGUgKi8KKyAgICBtYWN0YWJbbm1hY10ubXZhbCA9IE5VTEw7CisgICAgbWFj dGFiW25tYWNdLmZsZ3MgPSAwOworICAgIG10Y2hhbmdlZCsrOworICAgIHJldHVybigwKTsKK30K KworaW50CitkZWxtYWMobmFtLGV4YWN0KSBjaGFyICpuYW07IGludCBleGFjdDsgeyAvKiBEZWxl dGUgdGhlIG5hbWVkIG1hY3JvICovCisgICAgaW50IHgsIHo7CisgICAgY2hhciAqcCwgYzsKKyAg ICBleHRlcm4gaW50IHRyYV9hc2c7CisKKyAgICBpZiAoIW5hbSkgcmV0dXJuKDApOyAgICAgICAg ICAgICAgICAvKiBXYXRjaCBvdXQgZm9yIG51bGwgcG9pbnRlciAqLworICAgIGRlYnVnKEYxMTAs ImRlbG1hYyBuYW0iLG5hbSwwKTsKKyNpZmRlZiBJS1NECisgICAgaWYgKCBpbnNlcnZlciAmJgor I2lmZGVmIElLU0RDT05GCisgICAgICAgIGlrc2RjZgorI2Vsc2UgLyogSUtTRENPTkYgKi8KKyAg ICAgICAgMQorI2VuZGlmIC8qIElLU0RDT05GICovCisgICAgICAgICkgeworICAgICAgICBpZiAo IWNrc3RyY21wKCJvbl9leGl0IixuYW0sLTEsMCkgfHwKKyAgICAgICAgICAgICFja3N0cmNtcCgi b25fbG9nb3V0IixuYW0sLTEsMCkpCisgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9CisjZW5k aWYgLyogSUtTRCAqLworCisgICAgaWYgKCpuYW0gPT0gQ01EUSkgbmFtKys7CisgICAgaWYgKCpu YW0gPT0gJyUnKSB7ICAgICAgICAgICAgICAgICAgLyogSWYgaXQncyBhIHZhcmlhYmxlIG5hbWUg Ki8KKyAgICAgICAgaWYgKCEoYyA9ICoobmFtKzEpKSkgcmV0dXJuKDApOyAvKiBHZXQgdmFyaWFi bGUgbmFtZSBsZXR0ZXIgb3IgZGlnaXQgKi8KKyAgICAgICAgcCA9IChjaGFyICopMDsgICAgICAg ICAgICAgICAgICAvKiBJbml0aWFsaXplIHZhbHVlIHBvaW50ZXIgKi8KKyAgICAgICAgaWYgKG1h Y2x2bCA8IDAgJiYgYyA+PSAnMCcgJiYgYyA8PSAnOScpIHsgLyogVG9wLWxldmVsIGRpZ2l0PyAq LworICAgICAgICAgICAgcCA9IHRvcGFyZ1tjIC0gJzAnXTsKKyAgICAgICAgICAgIGlmIChwKSBp ZiAocCAhPSBnX3ZhcltjXSkgeworICAgICAgICAgICAgICAgIGZyZWUocCk7CisgICAgICAgICAg ICAgICAgdG9wYXJnW2MgLSAnMCddID0gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg IHAgPSBnX3ZhcltjXTsKKyAgICAgICAgICAgIGdfdmFyW2NdID0gTlVMTDsgICAgICAgICAgICAv KiBaZXJvIHRoZSB0YWJsZSBlbnRyeSAqLworICAgICAgICB9IGVsc2UgaWYgKG1hY2x2bCA+IC0x ICYmIGMgPj0gJzAnICYmIGMgPD0gJzknKSB7IC8qIERpZ2l0PyAqLworICAgICAgICAgICAgcCA9 IG1feGFyZ1ttYWNsdmxdW2MgLSAnMCddOworICAgICAgICAgICAgaWYgKHApIGlmIChwICE9IGdf dmFyW2NdKSB7CisgICAgICAgICAgICAgICAgZnJlZShwKTsKKyAgICAgICAgICAgICAgICBtX3hh cmdbbWFjbHZsXVtjIC0gJzAnXSA9IE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBw ID0gbV9hcmdbbWFjbHZsXVtjIC0gJzAnXTsgLyogR2V0IHBvaW50ZXIgZnJvbSBtYWNyby1hcmcg dGFibGUgKi8KKyAgICAgICAgICAgIG1fYXJnW21hY2x2bF1bYyAtICcwJ10gPSBOVUxMOyAvKiBa ZXJvIHRoZSB0YWJsZSBwb2ludGVyICovCisgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAg ICAgICAgICAgLyogSXQncyBhIGdsb2JhbCB2YXJpYWJsZSAqLworICAgICAgICAgICAgaWYgKGMg PCAzMyB8fCAodW5zaWduZWQgaW50KWMgPiBHVkFSUykgcmV0dXJuKDApOworICAgICAgICAgICAg cCA9IGdfdmFyW2NdOyAgICAgICAgICAgICAgIC8qIEdldCBwb2ludGVyIGZyb20gZ2xvYmFsLXZh ciB0YWJsZSAqLworICAgICAgICAgICAgZ192YXJbY10gPSBOVUxMOyAgICAgICAgICAgIC8qIFpl cm8gdGhlIHRhYmxlIGVudHJ5ICovCisgICAgICAgIH0KKyAgICAgICAgaWYgKHApIHsKKyAgICAg ICAgICAgIGRlYnVnKEYwMTAsImRlbG1hYyBkZWYiLHAsMCk7CisgICAgICAgICAgICBmcmVlKHAp OyAgICAgICAgICAgICAgICAgICAgLyogRnJlZSB0aGUgc3RvcmFnZSAqLworICAgICAgICAgICAg cCA9IE5VTEw7CisgICAgICAgIH0gZWxzZSBkZWJ1ZyhGMTEwLCJkZWxtYWMgZGVmIiwiKG51bGwg cG9pbnRlcikiLDApOworICAgICAgICBpZiAodHJhX2FzZykgdHJhY2V2YWwobmFtLE5VTEwpOwor ICAgICAgICByZXR1cm4oMCk7CisgICAgfQorICAgIGlmICgqbmFtID09ICcmJykgeyAgICAgICAg ICAgICAgICAgIC8qIEFuIGFycmF5IHJlZmVyZW5jZT8gKi8KKyAgICAgICAgY2hhciAqKnE7Cisg ICAgICAgIGlmIChhcnJheW5hbShuYW0sJngsJnopIDwgMCkgICAgLyogSWYgc3ludGF4IGlzIGJh ZCAqLworICAgICAgICAgIHJldHVybigtMSk7ICAgICAgICAgICAgICAgICAgIC8qIHJldHVybiAt MS4gKi8KKyAgICAgICAgeCAtPSBBUlJBWUJBU0U7ICAgICAgICAgICAgICAgICAvKiBDb252ZXJ0 IG5hbWUgdG8gbnVtYmVyLiAqLworICAgICAgICBpZiAoKHEgPSBhX3B0clt4XSkgPT0gTlVMTCkg ICAgIC8qIElmIGFycmF5IG5vdCBkZWNsYXJlZCwgKi8KKyAgICAgICAgICByZXR1cm4oLTIpOyAg ICAgICAgICAgICAgICAgICAvKiByZXR1cm4gLTIuICovCisgICAgICAgIGlmICh6ID4gYV9kaW1b eF0pICAgICAgICAgICAgICAgLyogSWYgc3Vic2NyaXB0IG91dCBvZiByYW5nZSwgKi8KKyAgICAg ICAgICByZXR1cm4oLTMpOyAgICAgICAgICAgICAgICAgICAvKiByZXR1cm4gLTMuICovCisgICAg ICAgIGlmIChxW3pdKSB7ICAgICAgICAgICAgICAgICAgICAgLyogSWYgdGhlcmUgaXMgYW4gb2xk IHZhbHVlLCAqLworICAgICAgICAgICAgZGVidWcoRjAxMCwiZGVsbWFjIGRlZiIscVt6XSwwKTsK KyAgICAgICAgICAgIGlmICh4ICE9IDApICAgICAgICAgICAgICAgICAvKiBNYWNybyBhcmcgdmVj dG9yIGlzIGp1c3QgYSBjb3B5ICovCisgICAgICAgICAgICAgIGZyZWUocVt6XSk7ICAgICAgICAg ICAgICAgLyogT3RoZXJzIGFyZSByZWFsIHNvIGZyZWUgdGhlbSAqLworICAgICAgICAgICAgcVt6 XSA9IE5VTEw7CisgICAgICAgICAgICBpZiAoeCA9PSAwKSB7ICAgICAgICAgICAgICAgLyogQXJn IHZlY3RvciBhcnJheSAqLworICAgICAgICAgICAgICAgIGlmICh6ID49IDAgJiYgeiA8PSA5KSB7 IC8qIENvcHkgdmFsdWVzIHRvIGNvcnJlc3BvbmRpbmcgICovCisgICAgICAgICAgICAgICAgICAg IGlmIChtYWNsdmwgPCAwKSB7ICAgLyogXCUxLi45IHZhcmlhYmxlcy4gKi8KKyAgICAgICAgICAg ICAgICAgICAgICAgIG1ha2VzdHIoJih0b3Bhcmdbel0pLE5VTEwpOworICAgICAgICAgICAgICAg ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgbWFrZXN0cigmKG1fYXJnW21h Y2x2bF1bel0pLE5VTEwpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg fQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHRyYV9hc2cpIHRyYWNldmFsKG5hbSxO VUxMKTsKKyAgICAgICAgfSBlbHNlIGRlYnVnKEYwMTAsImRlbG1hYyBkZWYiLCIobnVsbCBwb2lu dGVyKSIsMCk7CisgICAgfQorCisgICAvKiBOb3QgYSB2YXJpYWJsZSBvciBhbiBhcnJheSwgc28g aXQgbXVzdCBiZSBhIG1hY3JvLiAqLworCisgICAgeiA9IGlzYWEobmFtKTsKKyAgICBkZWJ1ZyhG MTExLCJkZWxtYWMgaXNhYSIsbmFtLHopOworICAgIGRlYnVnKEYxMTEsImRlbG1hYyBleGFjdCIs bmFtLGV4YWN0KTsKKyAgICB4ID0geiA/IG14eGxvb2sobWFjdGFiLG5hbSxubWFjKSA6CisgICAg ICBleGFjdCA/IG14bG9vayhtYWN0YWIsbmFtLG5tYWMpIDoKKyAgICAgICAgbWxvb2sobWFjdGFi LG5hbSxubWFjKTsKKyAgICBpZiAoeCA8IDApIHsKKyAgICAgICAgZGVidWcoRjExMSwiZGVsbWFj IG1sb29rIixuYW0seCk7CisgICAgICAgIHJldHVybih4KTsKKyAgICB9CisgICAgcmV0dXJuKHhk ZWxtYWMoeCkpOworfQorCitWT0lECitpbml0bWFjKCkgeyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogSW5pdCBtYWNybyAmIHZhcmlhYmxlIHRhYmxlcyAqLworICAgIGludCBpLCBqLCB4 OworCisgICAgbm1hYyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTm8gbWFjcm9z ICovCisgICAgZm9yIChpID0gMDsgaSA8IE1BQ19NQVg7IGkrKykgeyAgICAgLyogSW5pdGlhbGl6 ZSB0aGUgbWFjcm8gdGFibGUgKi8KKyAgICAgICAgbWFjdGFiW2ldLmt3ZCA9IE5VTEw7CisgICAg ICAgIG1hY3RhYltpXS5tdmFsID0gTlVMTDsKKyAgICAgICAgbWFjdGFiW2ldLmZsZ3MgPSAwOwor ICAgIH0KKyAgICBtdGNoYW5nZWQrKzsKKyAgICB4ID0gKE1BWEFSR0xJU1QgKyAxKSAqIHNpemVv ZihjaGFyICoqKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgTUFDTEVWRUw7IGkrKykgeyAgICAvKiBJ bml0IHRoZSBtYWNybyBhcmd1bWVudCB0YWJsZXMgKi8KKyAgICAgICAgbV94YXJnW2ldID0gKGNo YXIgKiopIG1hbGxvYyh4KTsKKyAgICAgICAgbXJ2YWxbaV0gPSBOVUxMOyAgICAgICAgICAgICAg ICAvKiBNYWNybyByZXR1cm4gdmFsdWUgKi8KKyAgICAgICAgLyogUG9pbnRlciB0byBlbnRpcmUg YXJndW1lbnQgdmVjdG9yLCBsZXZlbCBpLCBmb3IgXCZfW10gYXJyYXkgKi8KKyAgICAgICAgZm9y IChqID0gMDsgaiA8PSBNQVhBUkdMSVNUOyBqKyspIHsgLyogTWFjcm8gYXJndW1lbnQgbGlzdCAq LworICAgICAgICAgICAgaWYgKGogPCAxMCkgICAgICAgICAgICAgICAgIC8qIEZvciB0aGUgXCUw Li5cJTkgdmFyaWFibGVzICovCisgICAgICAgICAgICAgIG1fYXJnW2ldW2pdID0gTlVMTDsgICAg ICAgLyogUG9pbnRlciB0byBhcmcgaiwgbGV2ZWwgaS4gKi8KKyAgICAgICAgICAgIGlmIChtX3hh cmdbaV0pICAgICAgICAgICAgICAvKiBGb3IgXCZfW10gLSBhbGwgYXJncy4gKi8KKyAgICAgICAg ICAgICAgbV94YXJnW2ldW2pdID0gTlVMTDsKKyAgICAgICAgfQorICAgIH0KKyAgICBmb3IgKGkg PSAwOyBpIDwgR1ZBUlM7IGkrKykgeyAgICAgICAvKiBBbmQgdGhlIGdsb2JhbCB2YXJpYWJsZXMg dGFibGUgKi8KKyAgICAgICAgZ192YXJbaV0gPSBOVUxMOworICAgIH0KKyAgICAvKiBBbmQgdGhl IHRhYmxlIG9mIGFycmF5cyAqLworICAgIGZvciAoaSA9IDA7IGkgPCAoaW50KSAneicgLSBBUlJB WUJBU0UgKyAxOyBpKyspIHsKKyAgICAgICAgYV9wdHJbaV0gPSAoY2hhciAqKikgTlVMTDsgICAg ICAvKiBOdWxsIHBvaW50ZXIgZm9yIGVhY2ggKi8KKyAgICAgICAgYV9kaW1baV0gPSAwOyAgICAg ICAgICAgICAgICAgICAvKiBhbmQgYSBkaW1lbnNpb24gb2YgemVybyAqLworICAgICAgICBhX2xp bmtbaV0gPSAtMTsKKyAgICAgICAgZm9yIChqID0gMDsgaiA8IENNRFNUS0w7IGorKykgeworICAg ICAgICAgICAgYWFfcHRyW2pdW2ldID0gKGNoYXIgKiopIE5VTEw7CisgICAgICAgICAgICBhYV9k aW1bal1baV0gPSAwOworICAgICAgICB9CisgICAgfQorfQorCitpbnQKK3BvcGNsdmwoKSB7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQb3AgY29tbWFuZCBsZXZlbCwgcmV0dXJuIGNt ZGx2bCAqLworICAgIGV4dGVybiBpbnQgdHJhX2NtZDsKKyAgICBzdHJ1Y3QgbG9jYWx2YXIgKiB2 OworICAgIGludCBpLCB0b3BjbWQ7CisgICAgZGVidWcoRjEwMSwicG9wY2x2bCBjbWRsdmwiLCIi LGNtZGx2bCk7CisgICAgaWYgKGNtZGx2bCA+IDApIHsKKyAgICAgICAgaWYgKCh2ID0gbG9jYWxo ZWFkW2NtZGx2bF0pKSB7ICAvKiBEaWQgd2Ugc2F2ZSBhbnkgdmFyaWFibGVzPyAqLworICAgICAg ICAgICAgd2hpbGUgKHYpIHsgICAgICAgICAgICAgICAgIC8qIFllcyAqLworICAgICAgICAgICAg ICAgIGlmICh2LT5sdl92YWx1ZSkgICAgICAgIC8qIENvcHkgb2xkIG9uZXMgYmFjayAqLworICAg ICAgICAgICAgICAgICAgYWRkbWFjKHYtPmx2X25hbWUsdi0+bHZfdmFsdWUpOworICAgICAgICAg ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgIGRlbG1hYyh2LT5sdl9uYW1lLDEpOworICAg ICAgICAgICAgICAgIHYgPSB2LT5sdl9uZXh0OworICAgICAgICAgICAgfQorICAgICAgICAgICAg ZnJlZWxvY2FsKGNtZGx2bCk7ICAgICAgICAgIC8qIEZyZWUgbG9jYWwgc3RvcmFnZSAqLworICAg ICAgICB9CisgICAgICAgIC8qIEF1dG9tYXRpYyBhcnJheXMgZG8gbm90IHVzZSB0aGUgbG9jYWxo ZWFkIGxpc3QgKi8KKworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMjg7IGkrKykgeyAgICAgIC8q IEZyZWUgYW55IGxvY2FsIGFycmF5cyAqLworICAgICAgICAgICAgaWYgKGFhX3B0cltjbWRsdmxd W2ldKSB7CS8qIERvZXMgdGhpcyBvbmUgZXhpc3Q/ICovCisgICAgICAgICAgICAgICAgZGNsYXJy YXkoKGNoYXIpKGkrQVJSQVlCQVNFKSwtMSk7IC8qIERlc3Ryb3kgZ2xvYmFsIG9uZSAqLworICAg ICAgICAgICAgICAgIGFfcHRyW2ldID0gYWFfcHRyW2NtZGx2bF1baV07CisgICAgICAgICAgICAg ICAgYV9kaW1baV0gPSBhYV9kaW1bY21kbHZsXVtpXTsKKyAgICAgICAgICAgICAgICBhYV9wdHJb Y21kbHZsXVtpXSA9IChjaGFyICoqKU5VTEw7CisgICAgICAgICAgICAgICAgYWFfZGltW2NtZGx2 bF1baV0gPSAwOworICAgICAgICAgICAgfSBlbHNlIGlmIChhYV9kaW1bY21kbHZsXVtpXSA9PSAt MjMpIHsgLyogU2VjcmV0IGNvZGUgKi8KKyAgICAgICAgICAgICAgICBkY2xhcnJheSgoY2hhciko aStBUlJBWUJBU0UpLC0xKTsgLyogKHNlZSBwdXNoYXJyYXkoKSkgKi8KKyAgICAgICAgICAgICAg ICBhYV9wdHJbY21kbHZsXVtpXSA9IChjaGFyICoqKU5VTEw7CisgICAgICAgICAgICAgICAgYWFf ZGltW2NtZGx2bF1baV0gPSAwOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBPdGhl cndpc2UgZG8gbm90aGluZyAtIGl0IGlzIGEgbG9jYWwgYXJyYXkgdGhhdCB3YXMgZGVjbGFyZWQg Ki8KKyAgICAgICAgICAgIC8qIGF0IGEgbGV2ZWwgYWJvdmUgdGhpcyBvbmUgc28gbGVhdmUgaXQg YWxvbmUuICovCisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGNtZGx2bCA8IDEpIHsgICAgICAg ICAgICAgICAgICAgLyogSWYgd2UncmUgYWxyZWFkeSBhdCB0b3AgbGV2ZWwgKi8KKyAgICAgICAg Y21kbHZsID0gMDsgICAgICAgICAgICAgICAgICAgICAvKiBqdXN0IG1ha2Ugc3VyZSBhbGwgdGhl ICovCisgICAgICAgIHRsZXZlbCA9IC0xOyAgICAgICAgICAgICAgICAgICAgLyogc3RhY2sgcG9p bnRlcnMgYXJlIHNldCByaWdodCAqLworICAgICAgICBtYWNsdmwgPSAtMTsgICAgICAgICAgICAg ICAgICAgIC8qIGFuZCByZXR1cm4gKi8KKyAgICB9IGVsc2UgaWYgKGNtZHN0a1tjbWRsdmxdLnNy YyA9PSBDTURfVEYpIHsgLyogUmVhZGluZyBmcm9tIFRBS0UgZmlsZT8gKi8KKyAgICAgICAgZGVi dWcoRjEwMSwicG9wY2x2bCB0bGV2ZWwiLCIiLHRsZXZlbCk7CisgICAgICAgIGlmICh0bGV2ZWwg PiAtMSkgeyAgICAgICAgICAgICAgLyogWWVzLCAqLworICAgICAgICAgICAgZmNsb3NlKHRmaWxl W3RsZXZlbF0pOyAgICAgIC8qIGNsb3NlIGl0ICovCisKKyAgICAgICAgICAgIGlmICh0cmFfY21k KQorICAgICAgICAgICAgICBwcmludGYoIlslZF0gLUY6IFwiJXNcIlxuIixjbWRsdmwsdGZuYW1b dGxldmVsXSk7CisgICAgICAgICAgICBkZWJ1ZyhGMTExLCJDTUQgLUYiLHRmbmFtW3RsZXZlbF0s Y21kbHZsKTsKKyAgICAgICAgICAgIGlmICh0Zm5hbVt0bGV2ZWxdKSB7ICAgICAgICAvKiBmcmVl IHN0b3JhZ2UgZm9yIG5hbWUgKi8KKyAgICAgICAgICAgICAgICBmcmVlKHRmbmFtW3RsZXZlbF0p OworICAgICAgICAgICAgICAgIHRmbmFtW3RsZXZlbF0gPSBOVUxMOworICAgICAgICAgICAgfQor ICAgICAgICAgICAgdGxldmVsLS07ICAgICAgICAgICAgICAgICAgIC8qIGFuZCBwb3AgdGFrZSBs ZXZlbCAqLworICAgICAgICAgICAgY21kbHZsLS07ICAgICAgICAgICAgICAgICAgIC8qIGFuZCBj b21tYW5kIGxldmVsICovCisgICAgICAgICAgICBxdWlldCA9IHhxdWlldFtjbWRsdmxdOworICAg ICAgICAgICAgdmFyZXZhbCA9IHh2YXJldltjbWRsdmxdOworICAgICAgICB9IGVsc2UKKyAgICAg ICAgICB0bGV2ZWwgPSAtMTsKKyAgICB9IGVsc2UgaWYgKGNtZHN0a1tjbWRsdmxdLnNyYyA9PSBD TURfTUQpIHsgLyogSW4gYSBtYWNybz8gKi8KKyAgICAgICAgdG9wY21kID0gbGFzdGNtZFttYWNs dmxdOworICAgICAgICBkZWJ1ZyhGMTAxLCJwb3BjbHZsIG1hY2x2bCIsIiIsbWFjbHZsKTsKKyAg ICAgICAgaWYgKG1hY2x2bCA+IC0xKSB7ICAgICAgICAgICAgICAvKiBZZXMsICovCisjaWZkZWYg Q09NTUVOVAorICAgICAgICAgICAgaW50IGk7CisgICAgICAgICAgICBjaGFyICoqcTsKKyNlbmRp ZiAvKiBDT01NRU5UICovCisgICAgICAgICAgICBtYWNwW21hY2x2bF0gPSAiIjsgICAgICAgICAg Lyogc2V0IG1hY3JvIHBvaW50ZXIgdG8gbnVsbCBzdHJpbmcgKi8KKyAgICAgICAgICAgICpjbWRi dWYgPSAnXDAnOyAgICAgICAgICAgICAvKiBjbGVhciB0aGUgY29tbWFuZCBidWZmZXIgKi8KKwor ICAgICAgICAgICAgaWYgKChtYWNsdmwgPiAwKSAmJiAgICAgICAgIC8qIDIgTWF5IDE5OTkgKi8K KyAgICAgICAgICAgICAgICAobV9hcmdbbWFjbHZsLTFdWzBdKSAmJgorICAgICAgICAgICAgICAg ICghc3RybmNtcChtX2FyZ1ttYWNsdmwtMV1bMF0sIl94aWYiLDQpIHx8CisgICAgICAgICAgICAg ICAgICFzdHJuY21wKG1fYXJnW21hY2x2bC0xXVswXSwiX2ZvciIsNCkgfHwKKyAgICAgICAgICAg ICAgICAgIXN0cm5jbXAobV9hcmdbbWFjbHZsLTFdWzBdLCJfc3dpIiw0KSB8fAorICAgICAgICAg ICAgICAgICAhc3RybmNtcChtX2FyZ1ttYWNsdmwtMV1bMF0sIl93aGkiLDQpKSAmJgorICAgICAg ICAgICAgICAgIG1ydmFsW21hY2x2bCsxXSkgeworICAgICAgICAgICAgICAgIG1ha2VzdHIoJiht cnZhbFttYWNsdmwtMV0pLG1ydmFsW21hY2x2bCsxXSk7CisgICAgICAgICAgICB9CisgICAgICAg ICAgICBpZiAobWFjbHZsKzEgPCBNQUNMRVZFTCkgeworICAgICAgICAgICAgICAgIGlmIChtcnZh bFttYWNsdmwrMV0pIHsgIC8qIEZyZWUgYW55IGRlZXBlciByZXR1cm4gdmFsdWVzLiAqLworICAg ICAgICAgICAgICAgICAgICBmcmVlKG1ydmFsW21hY2x2bCsxXSk7CisgICAgICAgICAgICAgICAg ICAgIG1ydmFsW21hY2x2bCsxXSA9IE5VTEw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgfQorICAgICAgICAgICAgaWYgKHRyYV9jbWQpCisgICAgICAgICAgICAgIHByaW50ZigiWyVk XSAtTTogXCIlc1wiXG4iLGNtZGx2bCxtX2FyZ1tjbWRzdGtbY21kbHZsXS5sdmxdWzBdKTsKKyAg ICAgICAgICAgIGRlYnVnKEYxMTEsIkNNRCAtTSIsbV9hcmdbY21kc3RrW2NtZGx2bF0ubHZsXVsw XSxjbWRsdmwpOworCisgICAgICAgICAgICBtYWNsdmwtLTsgICAgICAgICAgICAgICAgICAgLyog UG9wIG1hY3JvIGxldmVsICovCisgICAgICAgICAgICBjbWRsdmwtLTsgICAgICAgICAgICAgICAg ICAgLyogYW5kIGNvbW1hbmQgbGV2ZWwgKi8KKyAgICAgICAgICAgIGRlYnVnKEYxMDEsInBvcGNs dmwgbWFjIG5ldyBtYWNsdmwiLCIiLG1hY2x2bCk7CisgICAgICAgICAgICBkZWJ1ZyhGMDEwLCJw b3BjbHZsIG1hYyBtcnZhbFttYWNsdmwrMV0iLG1ydmFsW21hY2x2bCsyXSwwKTsKKworICAgICAg ICAgICAgcXVpZXQgPSB4cXVpZXRbY21kbHZsXTsKKwkgICAgdmFyZXZhbCA9IHh2YXJldltjbWRs dmxdOworICAgICAgICAgICAgaWYgKG1hY2x2bCA+IC0xKSB7CisgICAgICAgICAgICAgICAgYV9w dHJbMF0gPSBtX3hhcmdbbWFjbHZsXTsKKyAgICAgICAgICAgICAgICBhX2RpbVswXSA9IG5feGFy Z1ttYWNsdmxdIC0gMTsKKwkJZGVidWcoRjExMSwiYV9kaW1bMF0iLCJCIixhX2RpbVswXSk7Cisg ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGFfcHRyWzBdID0gdG9weGFyZzsK KyAgICAgICAgICAgICAgICBhX2RpbVswXSA9IHRvcGFyZ2MgLSAxOworCQlkZWJ1ZyhGMTExLCJh X2RpbVswXSIsIkMiLGFfZGltWzBdKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsK KyAgICAgICAgICAgIG1hY2x2bCA9IC0xOworICAgICAgICB9CisjaWZuZGVmIE5PU0VYUAorICAg ICAgICBkZWJ1ZyhGMTAxLCJwb3BjbHZsIHRvcGNtZCIsIiIsdG9wY21kKTsKKyAgICAgICAgaWYg KHRvcGNtZCA9PSBYWFNFWFApIHsKKyAgICAgICAgICAgIGV4dGVybiBjaGFyICogc2V4cHZhbDsK KyAgICAgICAgICAgIG1ha2VzdHIoJihtcnZhbFttYWNsdmwrMV0pLHNleHB2YWwpOworICAgICAg ICB9CisjZW5kaWYgLyogTk9TRVhQICovCisgICAgfSBlbHNlIHsKKyAgICAgICAgY21kbHZsLS07 CisgICAgfQorICAgIGRlYnVnKEYxMDEsInBvcGNsdmwgY21kbHZsIiwiIixjbWRsdmwpOworICAg IGlmIChwcnN0cmluZ1tjbWRsdmxdKSB7CisgICAgICAgIGNtc2V0cChwcnN0cmluZ1tjbWRsdmxd KTsKKyAgICAgICAgbWFrZXN0cigmKHByc3RyaW5nW2NtZGx2bF0pLE5VTEwpOworICAgIH0KKyNp Zm5kZWYgTUFDCisgICAgaWYgKGNtZGx2bCA8IDEgfHwgeGNtZHNyYyA9PSBDTURfS0IpIHsgLyog SWYgYXQgcHJvbXB0ICovCisgICAgICAgIHNldGludCgpOworICAgICAgICBjb25jYigoY2hhcill c2NhcGUpOyAgICAgICAgICAgIC8qIEdvIGludG8gY2JyZWFrIG1vZGUgKi8KKyAgICB9CisjZW5k aWYgLyogTUFDICovCisgICAgeGNtZHNyYyA9IGNtZHN0a1tjbWRsdmxdLnNyYzsKKyAgICBkZWJ1 ZyhGMTAxLCJwb3BjbHZsIHhjbWRzcmMiLCIiLHhjbWRzcmMpOworICAgIGRlYnVnKEYxMDEsInBv cGNsdmwgdGxldmVsIiwiIix0bGV2ZWwpOworICAgIHJldHVybihjbWRsdmwgPCAxID8gMCA6IGNt ZGx2bCk7ICAgIC8qIFJldHVybiBjb21tYW5kIGxldmVsICovCit9CisjZWxzZSAvKiBObyBzY3Jp cHQgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UgKi8KK2ludCBwb3BjbHZsKCkgeyAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBKdXN0IGNsb3NlIGN1cnJlbnQgdGFrZSBmaWxlLiAqLworICAgIGlmICh0 bGV2ZWwgPiAtMSkgeyAgICAgICAgICAgICAgICAgIC8qIGlmIGFueS4uLiAqLworICAgICAgICBp ZiAodGZuYW1bdGxldmVsXSkgeworICAgICAgICAgICAgZnJlZSh0Zm5hbVt0bGV2ZWxdKTsKKyAg ICAgICAgICAgIHRmbmFtW3RsZXZlbF0gPSBOVUxMOworICAgICAgICB9CisgICAgICAgIGZjbG9z ZSh0ZmlsZVt0bGV2ZWwtLV0pOworICAgIH0KKyAgICBpZiAodGxldmVsID09IC0xKSB7ICAgICAg ICAgICAgICAgICAvKiBBbmQgaWYgYmFjayBhdCB0b3AgbGV2ZWwgKi8KKyAgICAgICAgc2V0aW50 KCk7CisgICAgICAgIGNvbmNiKChjaGFyKWVzY2FwZSk7ICAgICAgICAgICAgLyogYW5kIGdvIGJh Y2sgaW50byBjYnJlYWsgbW9kZS4gKi8KKyAgICB9CisgICAgeGNtZHNyYyA9IHRsZXZlbCA+IC0x ID8gQ01EX1RGIDogMDsKKyAgICByZXR1cm4odGxldmVsICsgMSk7Cit9CisjZW5kaWYgLyogTk9T UEwgKi8KKworCisjaWZuZGVmIE5PU1BMCitzdGF0aWMgaW50Citpc2VvbShtKSBjaGFyICogbTsg eyAgICAgICAgICAgICAgICAgICAgLyogVGVzdCBpZiBhdCBlbmQgb2YgbWFjcm8gZGVmICovCisg ICAgaWYgKCFtKQorICAgICAgbSA9ICIiOworICAgIGRlYnVnKEYxMTEsImlzZW9tIixtLG1hY2x2 bCk7CisgICAgd2hpbGUgKCptKSB7CisgICAgICAgIC8qIEFueXRoaW5nIGJ1dCBTcGFjZSBhbmQg Q29tbWEgbWVhbnMgbW9yZSBtYWNybyBpcyBsZWZ0ICovCisgICAgICAgIGlmICgoKm0gPiBTUCkg JiYgKCptICE9ICcsJykpIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMTEsImlzZW9tIHJldHVybiIs bSwwKTsKKyAgICAgICAgICAgIHJldHVybigwKTsKKyAgICAgICAgfQorICAgICAgICBtKys7Cisg ICAgfQorICAgIGRlYnVnKEYxMTEsImlzZW9tIHJldHVybiIsbSwxKTsKKyAgICByZXR1cm4oMSk7 ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOb3RoaW5nIGxlZnQgKi8KK30KKyNlbmRpZiAv KiBOT1NQTCAqLworCisvKiBQb3AgYWxsIGNvbW1hbmQgbGV2ZWxzIHRoYXQgY2FuIGJlIHBvcHBl ZCAqLworCitpbnQKK3ByZXBvcCgpIHsKKyAgICBpZiAoY21kbHZsID4gMCkgeyAgICAgICAgICAg ICAgICAgICAvKiBJZiBjb21tYW5kIGxldmVsIGlzID4gMCBhbmQuLi4gKi8KKyAgICAgICAgd2hp bGUgKAorI2lmbmRlZiBOT1NQTAorICAgICAgICAgICAgICAgKChjbWRzdGtbY21kbHZsXS5zcmMg PT0gQ01EX1RGKSAmJiAvKiBDb21tYW5kIHNvdXJjZSBpcyBmaWxlICovCisjZW5kaWYgLyogTk9T UEwgKi8KKyAgICAgICAgICAgICh0bGV2ZWwgPiAtMSkgJiYKKyAgICAgICAgICAgIGZlb2YodGZp bGVbdGxldmVsXSkpICAgICAgICAvKiBBbmQgYXQgZW5kIG9mIGZpbGUuLi4gKi8KKyNpZm5kZWYg Tk9TUEwKKyAgICAgICAgICAgICAgIC8qIE9yIGNvbW1hbmQgc291cmNlIGlzIG1hY3JvLi4uICov CisgICAgICAgICAgICAgICB8fCAoKGNtZHN0a1tjbWRsdmxdLnNyYyA9PSBDTURfTUQpICYmCisg ICAgICAgICAgICAgICAgKG1hY2x2bCA+IC0xKSAmJgorICAgICAgICAgICAgICAgIGlzZW9tKG1h Y3BbbWFjbHZsXSkpKSAgLyogYW5kIGF0IGVuZCBvZiBtYWNybywgdGhlbi4uLiAqLworI2VuZGlm IC8qIE5PU1BMICovCisgICAgICAgIHsKKyAgICAgICAgICAgICAgcG9wY2x2bCgpOyAgICAgICAg ICAgICAgICAvKiBwb3AgY29tbWFuZCBsZXZlbC4gKi8KKyAgICAgICAgfQorICAgIH0KKyAgICBy ZXR1cm4oY21kbHZsIDwgMSA/IDAgOiBjbWRsdmwpOyAgICAvKiBSZXR1cm4gY29tbWFuZCBsZXZl bCAqLworfQorCisvKiBTVE9QIC0gZ2V0IGJhY2sgdG8gQy1LZXJtaXQgcHJvbXB0LCBubyBtYXR0 ZXIgd2hlcmUgZnJvbS4gKi8KKworaW50Citkb3N0b3AoKSB7CisgICAgZXh0ZXJuIGludCBjbWRk ZXA7CisgICAgd2hpbGUgKHBvcGNsdmwoKSkgOyAgICAgICAgIC8qIFBvcCBhbGwgbWFjcm9zICYg dGFrZSBmaWxlcyAqLworI2lmbmRlZiBOT1NQTAorICAgIGlmIChjbWRkZXAgPiAtMSkgICAgICAg ICAgICAvKiBBbmQgYWxsIHJlY3Vyc2l2ZSBjbWQgcGtnIGludm9jYXRpb25zICovCisgICAgICB3 aGlsZSAoY21wb3AoKSA+IC0xKSA7CisjZW5kaWYgLyogTk9TUEwgKi8KKyAgICBjbWluaShja3hl Y2gpOyAgICAgICAgICAgICAgLyogQ2xlYXIgdGhlIGNvbW1hbmQgYnVmZmVyLiAqLworICAgIHJl dHVybigwKTsKK30KKworLyogQ2xvc2UgdGhlIGdpdmVuIGxvZyAqLworCitpbnQKK2RvY2xzbG9n KHgpIGludCB4OyB7CisgICAgaW50IHk7CisgICAgc3dpdGNoICh4KSB7CisjaWZkZWYgREVCVUcK KyAgICAgIGNhc2UgTE9HRDoKKyAgICAgICAgaWYgKGRlYmxvZyA8PSAwKSB7CisgICAgICAgICAg ICBwcmludGYoIj9EZWJ1Z2dpbmcgbG9nIHdhc24ndCBvcGVuXG4iKTsKKyAgICAgICAgICAgIHJl dHVybigwKTsKKyAgICAgICAgfQorICAgICAgICBkZWJ1ZyhGMTAwLCJEZWJ1ZyBMb2cgQ2xvc2Vk IiwiIiwwTCk7CisgICAgICAgICpkZWJmaWwgPSAnXDAnOworICAgICAgICBkZWJsb2cgPSAwOwor ICAgICAgICByZXR1cm4oemNsb3NlKFpERklMRSkpOworI2VuZGlmIC8qIERFQlVHICovCisKKyNp Zm5kZWYgTk9YRkVSCisgICAgICBjYXNlIExPR1A6CisgICAgICAgIGlmIChwa3Rsb2cgPD0gMCkg eworICAgICAgICAgICAgcHJpbnRmKCI/UGFja2V0IGxvZyB3YXNuJ3Qgb3BlblxuIik7CisgICAg ICAgICAgICByZXR1cm4oMCk7CisgICAgICAgIH0KKyAgICAgICAgKnBrdGZpbCA9ICdcMCc7Cisg ICAgICAgIHBrdGxvZyA9IDA7CisgICAgICAgIHJldHVybih6Y2xvc2UoWlBGSUxFKSk7CisjZW5k aWYgLyogTk9YRkVSICovCisKKyNpZm5kZWYgTk9MT0NBTAorICAgICAgY2FzZSBMT0dTOgorICAg ICAgICBpZiAoc2VzbG9nIDw9IDApIHsKKyAgICAgICAgICAgIHByaW50ZigiP1Nlc3Npb24gbG9n IHdhc24ndCBvcGVuXG4iKTsKKyAgICAgICAgICAgIHJldHVybigwKTsKKyAgICAgICAgfQorICAg ICAgICAqc2VzZmlsID0gJ1wwJzsKKyAgICAgICAgc2V0c2VzbG9nKDApOworICAgICAgICByZXR1 cm4oemNsb3NlKFpTRklMRSkpOworI2VuZGlmIC8qIE5PTE9DQUwgKi8KKworI2lmZGVmIFRMT0cK KyAgICAgIGNhc2UgTE9HVDogeworI2lmZGVmIElLU0QKKyAgICAgICAgICBleHRlcm4gaW50IGlr bG9nb3BlbiwgeGZlcmxvZzsKKyNlbmRpZiAvKiBJS1NEICovCisgICAgICAgICAgaWYgKHRyYWxv ZyA8PSAwCisjaWZkZWYgSUtTRAorICAgICAgICAgICAgICAmJiAhaWtsb2dvcGVuCisjZW5kaWYg LyogSUtTRCAqLworICAgICAgICAgICAgICApIHsKKyAgICAgICAgICAgICAgaWYgKG1zZ2ZsZykK KyAgICAgICAgICAgICAgICBwcmludGYoIj9UcmFuc2FjdGlvbiBsb2cgd2Fzbid0IG9wZW5cbiIp OworICAgICAgICAgICAgICByZXR1cm4oMCk7CisgICAgICAgICAgfQorI2lmZGVmIElLU0QKKyAg ICAgICAgICBpZiAoaWtsb2dvcGVuICYmICFpbnNlcnZlcikgeworICAgICAgICAgICAgICBjbG9z ZSh4ZmVybG9nKTsKKyAgICAgICAgICAgICAgaWtsb2dvcGVuID0gMDsKKyAgICAgICAgICB9Cisj ZW5kaWYgLyogSUtTRCAqLworICAgICAgICAgIGlmICh0cmFsb2cpIHsKKyAgICAgICAgICAgICAg dGxvZyhGMTAwLCJUcmFuc2FjdGlvbiBMb2cgQ2xvc2VkIiwiIiwwTCk7CisgICAgICAgICAgICAg IHpjbG9zZShaVEZJTEUpOworICAgICAgICAgIH0KKyAgICAgICAgICAqdHJhZmlsID0gJ1wwJzsK KyAgICAgICAgICB0cmFsb2cgPSAwOworICAgICAgICAgIHJldHVybigxKTsKKyAgICAgIH0KKyNl bmRpZiAvKiBUTE9HICovCisKKyNpZmRlZiBDS0xPR0RJQUwKKyAgICAgIGNhc2UgTE9HTToKKyAg ICAgICAgaWYgKGRpYWxvZyA8PSAwKSB7CisgICAgICAgICAgICBpZiAobXNnZmxnKSBwcmludGYo Ij9Db25uZWN0aW9uIGxvZyB3YXNuJ3Qgb3BlblxuIik7CisgICAgICAgICAgICByZXR1cm4oMCk7 CisgICAgICAgIH0KKyAgICAgICAgKmRpYWZpbCA9ICdcMCc7CisgICAgICAgIGRpYWxvZyA9IDA7 CisgICAgICAgIHJldHVybih6Y2xvc2UoWkRJRklMKSk7CisjZW5kaWYgLyogQ0tMT0dESUFMICov CisKKyNpZm5kZWYgTk9TUEwKKyAgICAgIGNhc2UgTE9HVzogICAgICAgICAgICAgICAgICAgICAg ICAvKiBXUklURSBmaWxlICovCisgICAgICBjYXNlIExPR1I6ICAgICAgICAgICAgICAgICAgICAg ICAgLyogUkVBRCBmaWxlICovCisgICAgICAgIHkgPSAoeCA9PSBMT0dSKSA/IFpSRklMRSA6IFpX RklMRTsKKyAgICAgICAgaWYgKGNoa2ZuKHkpIDwgMSkgICAgICAgICAgICAgICAvKiBJZiBubyBm aWxlIHRvIGNsb3NlICovCisgICAgICAgICAgcmV0dXJuKDEpOyAgICAgICAgICAgICAgICAgICAg Lyogc3VjY2VlZCBzaWxlbnRseS4gKi8KKyAgICAgICAgcmV0dXJuKHpjbG9zZSh5KSk7ICAgICAg ICAgICAgICAvKiBPdGhlcndpc2UsIGNsb3NlIHRoZSBmaWxlLiAqLworI2VuZGlmIC8qIE5PU1BM ICovCisKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHByaW50ZigiXG4/VW5leHBlY3RlZCBsb2cg ZGVzaWduYXRvciAtICVkXG4iLCB4KTsKKyAgICAgICAgcmV0dXJuKDApOworICAgIH0KK30KKwor c3RhdGljIGludCBzbGMgPSAwOyAgICAgICAgICAgICAgICAgICAgIC8qIFNjcmVlbiBsaW5lIGNv dW50ICovCisKK2NoYXIgKgorc2hvd3N0cmluZyhzKSBjaGFyICogczsgeworICAgIHJldHVybihz ID8gcyA6ICIobnVsbCkiKTsKK30KKworY2hhciAqCitzaG93b2ZmKHgpIGludCB4OyB7CisgICAg cmV0dXJuKHggPyAib24iIDogIm9mZiIpOworfQorCitjaGFyICoKK3Nob3dvb2EoeCkgaW50IHg7 IHsKKyAgICBzd2l0Y2ggKHgpIHsKKyAgICAgIGNhc2UgU0VUX09GRjogIHJldHVybigib2ZmIik7 CisgICAgICBjYXNlIFNFVF9PTjogICByZXR1cm4oIm9uIik7CisgICAgICBjYXNlIFNFVF9BVVRP OiByZXR1cm4oImF1dG9tYXRpYyIpOworICAgICAgZGVmYXVsdDogICAgICAgcmV0dXJuKCIodW5r bm93bikiKTsKKyAgICB9Cit9CisKKyNpZmRlZiBHRU1ET1MKK2lzeGRpZ2l0KGMpIGludCBjOyB7 CisgICAgcmV0dXJuKGlzZGlnaXQoYykgfHwKKyAgICAgICAgICAgKGMgPj0gJ2EnICYmIGMgPD0g J2YnKSB8fAorICAgICAgICAgICAoYyA+PSAnQScgJiYgYyA8PSAnRicpKTsKK30KKyNlbmRpZiAv KiBHRU1ET1MgKi8KKworI2lmbmRlZiBOT1NFVEtFWQorI2lmZGVmIE9TMgorc3RhdGljIHN0cnVj dCBrZXl0YWIgc2hva2V5dGFiW10gPSB7ICAgIC8qIFNIT1cgS0VZIG1vZGVzICovCisgICAgImFs bCIsICAgIDEsIDAsCisgICAgIm9uZSIsICAgIDAsIDAKK307CitzdGF0aWMgaW50IG5zaG9rZXkg PSAoc2l6ZW9mKHNob2tleXRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpOworCisjZGVmaW5l IFNIS0VZREVGIFRUX01BWCs1CitzdHJ1Y3Qga2V5dGFiIHNob2tleW10YWJbXSA9IHsKKyAgICAi YWFhIiwgICAgICAgVFRfQUFBLCAgICAgQ01fSU5WLCAgICAvKiBBbm5BcmJvciAqLworICAgICJh ZG0zYSIsICAgICBUVF9BRE0zQSwgICAwLCAgICAgICAgIC8qIExTSSBBRE0tM0EgKi8KKyAgICAi YWRtNSIsICAgICAgVFRfQURNNSwgICAgMCwgICAgICAgICAvKiBMU0kgQURNLTUgKi8KKyAgICAi YWl4dGVybSIsICAgVFRfQUlYVEVSTSwgMCwgICAgICAgICAvKiBJQk0gQUlYdGVybSAqLworICAg ICJhbm5hcmJvciIsICBUVF9BQUEsICAgICAwLCAgICAgICAgIC8qIEFubkFyYm9yICovCisgICAg ImFuc2ktYmJzIiwgIFRUX0FOU0ksICAgIDAsICAgICAgICAgLyogQU5TSS5TWVMgKEJCUykgKi8K KyAgICAiYXQzODYiLCAgICAgVFRfQVQzODYsICAgMCwgICAgICAgICAvKiBVbml4d2FyZSBBTlNJ ICovCisgICAgImF2YXRhci8wKyIsIFRUX0FOU0ksICAgIDAsICAgICAgICAgLyogQVZBVEFSLzAr ICovCisgICAgImJhODAiLCAgICAgIFRUX0JBODAsICAgIDAsICAgICAgICAgLyogTml4ZG9yZiBC QTgwICovCisgICAgImJlIiwgICAgICAgIFRUX0JFT1MsICAgIENNX0lOVnxDTV9BQlIsCisgICAg ImJlb3MtYW5zaSIsIFRUX0JFT1MsICAgIENNX0lOViwgICAgLyogQmVPUyBBTlNJICovCisgICAg ImJldGVybSIsICAgIFRUX0JFT1MsICAgIDAsICAgICAgICAgLyogQmVPUyBDb25zb2xlICovCisg ICAgImQyMDAiLCAgICAgIFRUX0RHMjAwLCAgIENNX0lOVnxDTV9BQlIsIC8qIERhdGEgR2VuZXJh bCBEQVNIRVIgMjAwICovCisgICAgImQyMTAiLCAgICAgIFRUX0RHMjEwLCAgIENNX0lOVnxDTV9B QlIsIC8qIERhdGEgR2VuZXJhbCBEQVNIRVIgMjEwICovCisgICAgImQyMTciLCAgICAgIFRUX0RH MjE3LCAgIENNX0lOVnxDTV9BQlIsIC8qIERhdGEgR2VuZXJhbCBEQVNIRVIgMjE3ICovCisgICAg ImRlZmF1bHQiLCAgIFNIS0VZREVGLCAgIDAsCisgICAgImRnMjAwIiwgICAgIFRUX0RHMjAwLCAg IDAsICAgICAgICAgLyogRGF0YSBHZW5lcmFsIERBU0hFUiAyMDAgKi8KKyAgICAiZGcyMTAiLCAg ICAgVFRfREcyMTAsICAgMCwgICAgICAgICAvKiBEYXRhIEdlbmVyYWwgREFTSEVSIDIxMCAqLwor ICAgICJkZzIxNyIsICAgICBUVF9ERzIxNywgICAwLCAgICAgICAgIC8qIERhdGEgR2VuZXJhbCBE QVNIRVIgMjE3ICovCisgICAgImVtYWNzIiwgICAgIFRUX0tCTV9FTUFDUywgICAwLCAgICAgLyog RW1hY3MgbW9kZSAqLworICAgICJoMTkiLCAgICAgICBUVF9IMTksICAgICBDTV9JTlYsICAgIC8q IEhlYXRoLTE5ICovCisgICAgImhlYXRoMTkiLCAgIFRUX0gxOSwgICAgIDAsICAgICAgICAgLyog SGVhdGgtMTkgKi8KKyAgICAiaGVicmV3IiwgICAgVFRfS0JNX0hFQlJFVywgMCwgICAgICAvKiBI ZWJyZXcgbW9kZSAqLworICAgICJoZnQiLCAgICAgICBUVF9IRlQsICAgICAwLCAgICAgICAgIC8q IElCTSBIRlQgKi8KKyAgICAiaHAyNjIxYSIsICAgVFRfSFAyNjIxLCAgMCwgICAgICAgICAvKiBI UCAyNjIxQSAqLworICAgICJocHRlcm0iLCAgICBUVF9IUFRFUk0sICAwLCAgICAgICAgIC8qIEhQ IFRFUk0gKi8KKyAgICAiaHoxNTAwIiwgICAgVFRfSFpMMTUwMCwgMCwgICAgICAgICAvKiBIYXpl bHRpbmUgMTUwMCAqLworICAgICJpYm0zMTUxIiwgICBUVF9JQk0zMSwgICAwLCAgICAgICAgIC8q IElCTSAzMTAxLXh4LDMxNjEgKi8KKyAgICAibGludXgiLCAgICAgVFRfTElOVVgsICAgMCwgICAg ICAgICAvKiBMaW51eCAqLworICAgICJxYW5zaSIsICAgICBUVF9RQU5TSSwgICAwLCAgICAgICAg IC8qIFFOWCBBTlNJICovCisgICAgInFueCIsICAgICAgIFRUX1FOWCwgICAgIDAsICAgICAgICAg LyogUU5YICovCisgICAgInJ1c3NpYW4iLCAgIFRUX0tCTV9SVVNTSUFOLCAwLCAgICAgLyogUnVz c2lhbiBtb2RlICovCisgICAgInNjb2Fuc2kiLCAgIFRUX1NDT0FOU0ksIDAsICAgICAgICAgLyog U0NPIEFOU0kgKi8KKyAgICAic25pLTk3ODAxIiwgVFRfOTc4MDEsICAgMCwgICAgICAgICAvKiBT aW5peCA5NzgwMSAqLworICAgICJzdW4iLCAgICAgICBUVF9TVU4sICAgICAwLCAgICAgICAgIC8q IFN1biBDb25zb2xlICovCisjaWZkZWYgT1MyUE0KKyNpZmRlZiBDT01NRU5UCisgICAgInRlazQw MTQiLCBUVF9URUs0MCwgMCwKKyNlbmRpZiAvKiBDT01NRU5UICovCisjZW5kaWYgLyogT1MyUE0g Ki8KKyAgICAidHR5IiwgICAgIFRUX05PTkUsICAwLAorICAgICJ0dmk5MTArIiwgVFRfVFZJOTEw LCAwLAorICAgICJ0dmk5MjUiLCAgVFRfVFZJOTI1LCAwLAorICAgICJ0dmk5NTAiLCAgVFRfVFZJ OTUwLCAwLAorICAgICJ2YzQwNCIsICAgVFRfVkM0NDA0LCAwLAorICAgICJ2YzQ0MDQiLCAgVFRf VkM0NDA0LCBDTV9JTlYsCisgICAgInZpcDc4MDkiLCBUVF9WSVA3ODA5LCAwLAorICAgICJ2dDEw MCIsICAgVFRfVlQxMDAsIDAsCisgICAgInZ0MTAyIiwgICBUVF9WVDEwMiwgMCwKKyAgICAidnQy MjAiLCAgIFRUX1ZUMjIwLCAwLAorICAgICJ2dDIyMHBjIiwgVFRfVlQyMjBQQywgMCwKKyAgICAi dnQzMjAiLCAgIFRUX1ZUMzIwLCAwLAorICAgICJ2dDMyMHBjIiwgVFRfVlQzMjBQQywgMCwKKyAg ICAidnQ1MiIsICAgIFRUX1ZUNTIsICAwLAorICAgICJ3cCIsICAgICAgVFRfS0JNX1dQLCAwLAor ICAgICJ3eTE2MCIsICAgVFRfV1kxNjAsICAwLAorICAgICJ3eTMwIiwgICAgVFRfV1kzMCwgIDAs CisgICAgInd5MzcwIiwgICBUVF9XWTM3MCwgMCwKKyAgICAid3k1MCIsICAgIFRUX1dZNTAsICAw LAorICAgICJ3eTYwIiwgICAgVFRfV1k2MCwgIDAsCisgICAgInd5c2UzMCIsICBUVF9XWTMwLCAg Q01fSU5WLAorICAgICJ3eXNlMzcwIiwgVFRfV1kzNzAsIENNX0lOViwKKyAgICAid3lzZTUwIiwg IFRUX1dZNTAsICBDTV9JTlYsCisgICAgInd5c2U2MCIsICBUVF9XWTYwLCAgQ01fSU5WCit9Owor aW50IG5zaG9rZXltID0gKHNpemVvZihzaG9rZXltdGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFi KSk7CisjZW5kaWYgLyogT1MyICovCisKK1ZPSUQKKyNpZmRlZiBPUzIKK3Nob2tleWNvZGUoYyxt KSBpbnQgYywgbTsKKyNlbHNlCitzaG9rZXljb2RlKGMpIGludCBjOworI2VuZGlmCisvKiBzaG9r ZXljb2RlICovIHsKKyAgICBLRVkgY2g7CisgICAgQ0hBUiAqczsKKyNpZmRlZiBPUzIKKyAgICBp bnQgaTsKKyAgICBjb25fZXZlbnQga207CisjZWxzZSAvKiBPUzIgKi8KKyAgICBpbnQga207Cisj ZW5kaWYgLyogT1MyICovCisKKyNpZmRlZiBPUzIKKyAgICBleHRlcm4gaW50IG1za2tleXM7Cisg ICAgY2hhciAqIG1zdHIgPSAiIjsKKworICAgIGlmIChjID49IEtNU0laRSkgeworICAgICAgICBi bGVlcChCUF9GQUlMKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbHNlIC8qIE9TMiAqLwor ICAgIHByaW50ZigiIEtleSBjb2RlIFxcJWQgPT4gIiwgYyk7CisjZW5kaWYgLyogT1MyICovCisK KyNpZm5kZWYgT1MyCisgICAga20gPSBtYXBrZXkoYyk7CisKKyNpZm5kZWYgTk9LVkVSQlMKKyAg ICBpZiAoSVNfS1ZFUkIoa20pKSB7ICAgICAgICAgICAgICAgICAvKiBcS3ZlcmI/ICovCisgICAg ICAgIGludCBpLCBrdjsKKyAgICAgICAga3YgPSBrbSAmIH4oRl9LVkVSQik7CisgICAgICAgIHBy aW50ZigiVmVyYjogIik7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBua3ZlcmJzOyBpKyspCisg ICAgICAgICAgaWYgKGt2ZXJic1tpXS5rd3ZhbCA9PSBrdikgeworICAgICAgICAgICAgICBwcmlu dGYoIlxcSyVzIixrdmVyYnNbaV0ua3dkKTsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg ICAgfQorICAgICAgICBwcmludGYoIlxuIik7CisgICAgfSBlbHNlCisjZW5kaWYgLyogTk9LVkVS QlMgKi8KKyAgICAgIGlmIChJU19DU0koa20pKSB7CisgICAgICAgICAgaW50IHhrbSA9IGttICYg MHhGRjsKKyAgICAgICAgICBpZiAoeGttIDw9IDMyIHx8IHhrbSA+PSAxMjcpCisgICAgICAgICAg ICBwcmludGYoIlN0cmluZzogXFx7Mjd9W1xceyVkfVxuIix4a20pOworICAgICAgICAgIGVsc2UK KyAgICAgICAgICAgIHByaW50ZigiU3RyaW5nOiBcXHsyN31bJWNcbiIseGttKTsKKyAgICAgIH0g ZWxzZSBpZiAoSVNfRVNDKGttKSkgeworICAgICAgICAgIGludCB4a20gPSBrbSAmIDB4RkY7Cisg ICAgICAgICAgaWYgKHhrbSA8PSAzMiB8fCB4a20gPj0gMTI3KQorICAgICAgICAgICAgcHJpbnRm KCJTdHJpbmc6IFxcezI3fVxceyVkfVxuIix4a20pOworICAgICAgICAgIGVsc2UKKyAgICAgICAg ICAgIHByaW50ZigiU3RyaW5nOiBcXHsyN30lY1xuIix4a20pOworICAgICAgfSBlbHNlIGlmICht YWNyb3RhYltjXSkgeyAgICAgICAgIC8qIFNlZSBpZiB0aGVyZSdzIGEgbWFjcm8gKi8KKyAgICAg ICAgICBwcmludGYoIlN0cmluZzogIik7ICAgICAgICAgICAvKiBJZiBzbywgZGlzcGxheSBpdHMg ZGVmaW5pdGlvbiAqLworICAgICAgICAgIHMgPSBtYWNyb3RhYltjXTsKKyAgICAgICAgICBzaG9z dHJkZWYocyk7CisgICAgICAgICAgcHJpbnRmKCJcbiIpOworI2lmbmRlZiBOT0tWRVJCUworICAg IH0gZWxzZSBpZiAoa20gPj0gMHgxMDApIHsgICAgICAgICAgIC8qIFRoaXMgbWVhbnMgInVuZGVm aW5lZCIgKi8KKyAgICAgICAgcHJpbnRmKCJVbmRlZmluZWRcbiIpOworI2VuZGlmIC8qIE5PS1ZF UkJTICovCisgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTm8gbWFj cm8sIHNob3cgc2luZ2xlIGNoYXJhY3RlciAqLworICAgICAgICBwcmludGYoIkNoYXJhY3Rlcjog Iik7CisgICAgICAgIGNoID0ga207CisgICAgICAgIGlmIChjaCA8IDMyIHx8IGNoID09IDEyNwor I2lmZGVmIE9TMgorICAgICAgICAgICAgfHwgY2ggPiAyNTUKKyNlbmRpZiAvKiBPUzIgKi8KKyNp Zm5kZWYgTkVYVAorI2lmbmRlZiBBVVgKKyNpZm5kZWYgWEVOSVgKKyNpZm5kZWYgT1MyCisgICAg ICAgICAgICB8fCAoY2ggPiAxMjcgJiYgY2ggPCAxNjApCisjZW5kaWYgLyogT1MyICovCisjZW5k aWYgLyogWEVOSVggKi8KKyNlbmRpZiAvKiBBVVggKi8KKyNlbmRpZiAvKiBORVhUICovCisgICAg ICAgICAgICApCisvKgorICBUaGVzZSB1c2VkIHRvIGJlICVkLCBidXQgZ2NjIDEuOTMgJiBsYXRl ciBjb21wbGFpbiBhYm91dCB0eXBlIG1pc21hdGNoZXMuCisgICV1IGlzIHN1cHBvc2VkIHRvIGJl IHRvdGFsbHkgcG9ydGFibGUuCisqLworICAgICAgICAgIHByaW50ZigiXFwldSIsKHVuc2lnbmVk IGludCkgY2gpOworICAgICAgICBlbHNlIHByaW50ZigiJWMgXFwldSIsKENIQVIpIChjaCAmIDB4 ZmYpLCh1bnNpZ25lZCBpbnQpIGNoKTsKKyAgICAgICAgaWYgKGNoID09IChLRVkpIGMpCisgICAg ICAgICAgcHJpbnRmKCIgKHNlbGYsIG5vIHRyYW5zbGF0aW9uKVxuIik7CisgICAgICAgIGVsc2UK KyAgICAgICAgICBwcmludGYoIlxuIik7CisgICAgfQorI2Vsc2UgLyogT1MyICovCisgICAgaWYg KG0gPCAwKSB7CisgICAgICAgIGttID0gbWFwa2V5KGMpOworICAgICAgICBtc3RyID0gImRlZmF1 bHQiOworICAgIH0gZWxzZSB7CisgICAgICAgIGttID0gbWFwdGVybWtleShjLG0pOworICAgICAg ICBmb3IgKGkgPSAwOyBpIDwgbnNob2tleW07IGkrKykgeworICAgICAgICAgICAgaWYgKG0gPT0g c2hva2V5bXRhYltpXS5rd3ZhbCkgeworICAgICAgICAgICAgICAgIG1zdHIgPSBzaG9rZXltdGFi W2ldLmt3ZDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg fQorICAgIH0KKyAgICBzID0ga2V5bmFtZShjKTsKKyAgICBkZWJ1ZyhGMTExLCJzaG9rZXljb2Rl IG1zdHIiLG1zdHIsbSk7CisgICAgZGVidWcoRjExMSwic2hva2V5Y29kZSBrZXluYW1lIixzLGMp OworICAgIHByaW50ZigiICVzS2V5IGNvZGUgXFwlZCAlcyAoJXMpID0+ICIsCisgICAgICAgICAg ICBtc2trZXlzID8gIm1za2VybWl0ICIgOiAiIiwKKyAgICAgICAgICAgIG1za2tleXMgPyBja3Rv bXNrKGMpIDogYywKKyAgICAgICAgICAgIHMgPT0gTlVMTCA/ICIiIDogcywgbXN0cik7CisKKyAg ICBzd2l0Y2ggKGttLnR5cGUpIHsKKyNpZm5kZWYgTk9LVkVSQlMKKyAgICAgIGNhc2Uga3ZlcmI6 IHsKKyAgICAgICAgICBpbnQgaSwga3Y7CisgICAgICAgICAga3YgPSBrbS5rdmVyYi5pZCAmIH4o Rl9LVkVSQik7CisgICAgICAgICAgcHJpbnRmKCJWZXJiOiAiKTsKKyAgICAgICAgICBmb3IgKGkg PSAwOyBpIDwgbmt2ZXJiczsgaSsrKSB7CisgICAgICAgICAgICAgIGlmIChrdmVyYnNbaV0ua3d2 YWwgPT0ga3YpIHsKKyAgICAgICAgICAgICAgICAgIHByaW50ZigiXFxLJXMiLGt2ZXJic1tpXS5r d2QpOworICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIH0KKyAgICAgICAg ICB9CisgICAgICAgICAgcHJpbnRmKCJcbiIpOworICAgICAgICAgIGJyZWFrOworICAgICAgfQor I2VuZGlmIC8qIE5PS1ZFUkJTICovCisgICAgICBjYXNlIGNzaTogeworICAgICAgICAgIGludCB4 a20gPSBrbS5jc2kua2V5ICYgMHhGRjsKKyAgICAgICAgICBpZiAoeGttIDw9IDMyIHx8IHhrbSA+ PSAxMjcpCisgICAgICAgICAgICBwcmludGYoIlN0cmluZzogXFx7Mjd9W1xceyVkfVxuIix4a20p OworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHByaW50ZigiU3RyaW5nOiBcXHsyN31bJWNc biIseGttKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGNhc2UgZXNjOiB7Cisg ICAgICAgICAgaW50IHhrbSA9IGttLmVzYy5rZXkgJiAweEZGOworICAgICAgICAgIGlmICh4a20g PD0gMzIgfHwgeGttID49IDEyNykKKyAgICAgICAgICAgIHByaW50ZigiU3RyaW5nOiBcXHslZH1c XHslZH1cbiIsSVNERzIwMCh0dF90eXBlKT8zMDoyNyx4a20pOworICAgICAgICAgIGVsc2UKKyAg ICAgICAgICAgIHByaW50ZigiU3RyaW5nOiBcXHslZH0lY1xuIixJU0RHMjAwKHR0X3R5cGUpPzMw OjI3LHhrbSk7CisgICAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBjYXNlIG1hY3JvOiB7 CisgICAgICAgICAgcHJpbnRmKCJTdHJpbmc6ICIpOyAgICAgICAgICAgLyogTWFjcm8sIGRpc3Bs YXkgaXRzIGRlZmluaXRpb24gKi8KKyAgICAgICAgICBzaG9zdHJkZWYoa20ubWFjcm8uc3RyaW5n KTsKKyAgICAgICAgICBwcmludGYoIlxuIik7CisgICAgICAgICAgYnJlYWs7CisgICAgICB9Cisg ICAgICBjYXNlIGxpdGVyYWw6IHsKKyAgICAgICAgICBwcmludGYoIkxpdGVyYWwgc3RyaW5nOiAi KTsgICAvKiBMaXRlcmFsLCBkaXNwbGF5IGl0cyBkZWZpbml0aW9uICovCisgICAgICAgICAgc2hv c3RyZGVmKGttLmxpdGVyYWwuc3RyaW5nKTsKKyAgICAgICAgICBwcmludGYoIlxuIik7CisgICAg ICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBjYXNlIGVycm9yOiB7CisgICAgICAgICAgaWYg KGMgPj0gMHgxMDApIHsKKyAgICAgICAgICAgICAgcHJpbnRmKCJVbmRlZmluZWRcbiIpOworICAg ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIHByaW50ZigiQ2hhcmFjdGVyOiAiKTsKKyAg ICAgICAgICAgICAgY2ggPSBjOworICAgICAgICAgICAgICBpZiAoY2ggPCAzMiB8fCBjaCA9PSAx MjcgfHwgY2ggPiAyNTUKKyNpZm5kZWYgTkVYVAorI2lmbmRlZiBBVVgKKyNpZm5kZWYgWEVOSVgK KyNpZm5kZWYgT1MyCisgICAgICAgICAgICAgICAgICAgfHwgKGNoID4gMTI3ICYmIGNoIDwgMTYw KQorI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIFhFTklYICovCisjZW5kaWYgLyogQVVYICov CisjZW5kaWYgLyogTkVYVCAqLworICAgICAgICAgICAgICAgICAgICkKKy8qCisgIFRoZXNlIHVz ZWQgdG8gYmUgJWQsIGJ1dCBnY2MgMS45MyAmIGxhdGVyIGNvbXBsYWluIGFib3V0IHR5cGUgbWlz bWF0Y2hlcy4KKyAgJXUgaXMgc3VwcG9zZWQgdG8gYmUgdG90YWxseSBwb3J0YWJsZS4KKyovCisg ICAgICAgICAgICAgICAgICBwcmludGYoIlxcJXUiLCh1bnNpZ25lZCBpbnQpIGNoKTsKKyAgICAg ICAgICAgICAgZWxzZSBwcmludGYoIiVjIFxcJXUiLChDSEFSKSAoY2ggJiAweGZmKSwodW5zaWdu ZWQgaW50KSBjaCk7CisgICAgICAgICAgICAgIHByaW50ZigiIChzZWxmLCBubyB0cmFuc2xhdGlv bilcbiIpOworICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGNh c2Uga2V5OiB7CisgICAgICAgICAgcHJpbnRmKCJDaGFyYWN0ZXI6ICIpOworICAgICAgICAgIGNo ID0ga20ua2V5LnNjYW5jb2RlOworICAgICAgICAgIGlmIChjaCA8IDMyIHx8IGNoID09IDEyNyB8 fCBjaCA+IDI1NQorI2lmbmRlZiBORVhUCisjaWZuZGVmIEFVWAorI2lmbmRlZiBYRU5JWAorI2lm bmRlZiBPUzIKKyAgICAgICAgICAgICAgfHwgKGNoID4gMTI3ICYmIGNoIDwgMTYwKQorI2Vsc2UK KyAgICAgICAgICAgICAgIHx8IChjaCA+IDEyNykKKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAv KiBYRU5JWCAqLworI2VuZGlmIC8qIEFVWCAqLworI2VuZGlmIC8qIE5FWFQgKi8KKyAgICAgICAg ICAgICAgKQorLyoKKyAgVGhlc2UgdXNlZCB0byBiZSAlZCwgYnV0IGdjYyAxLjkzICYgbGF0ZXIg Y29tcGxhaW4gYWJvdXQgdHlwZSBtaXNtYXRjaGVzLgorICAldSBpcyBzdXBwb3NlZCB0byBiZSB0 b3RhbGx5IHBvcnRhYmxlLgorKi8KKyAgICAgICAgICAgIHByaW50ZigiXFwldSIsKHVuc2lnbmVk IGludCkgY2gpOworICAgICAgICAgIGVsc2UgcHJpbnRmKCIlYyBcXCV1IiwoQ0hBUikgKGNoICYg MHhmZiksKHVuc2lnbmVkIGludCkgY2gpOworICAgICAgICAgIGlmIChjaCA9PSAoS0VZKSBjKQor ICAgICAgICAgICAgcHJpbnRmKCIgKHNlbGYsIG5vIHRyYW5zbGF0aW9uKVxuIik7CisgICAgICAg ICAgZWxzZQorICAgICAgICAgICAgcHJpbnRmKCJcbiIpOworICAgICAgICAgIGJyZWFrOworICAg ICAgfQorICAgIH0KKyNlbmRpZiAvKiBPUzIgKi8KK30KKyNlbmRpZiAvKiBOT1NFVEtFWSAqLwor CitWT0lECitzaG9zdHJkZWYocykgQ0hBUiAqIHM7IHsKKyAgICBDSEFSIGNoOworICAgIGlmICgh cykgcyA9IChDSEFSICopIiI7CisgICAgd2hpbGUgKChjaCA9ICpzKyspKSB7CisgICAgICAgIGlm IChjaCA8IDMyIHx8IGNoID09IDEyNyB8fCBjaCA9PSAyNTUKKy8qCisgIFN5c3RlbXMgd2hvc2Ug bmF0aXZlIGNoYXJhY3RlciBzZXRzIGhhdmUgZ3JhcGhpYyBjaGFyYWN0ZXJzIGluIEMxLi4uCisq LworI2lmbmRlZiBORVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5lWFQgKi8KKyNp Zm5kZWYgQVVYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBNYWNpbnRvc2ggKi8KKyNp Zm5kZWYgWEVOSVggICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJQk0gUEMgKi8KKyNpZmRl ZiBPUzIKKy8qCisgIEl0IGRvZXNuJ3QgbWF0dGVyIHdoZXRoZXIgdGhlIGxvY2FsIGhvc3QgY2Fu IGRpc3BsYXkgOC1iaXQgY2hhcmFjdGVyczsKKyAgdGhleSBhcmUgbm90IHBvcnRhYmxlIGFtb25n IGNoYXJhY3Rlci1zZXRzIGFuZCBmb250cy4gIFdobyBrbm93cyB3aGF0CisgIHdvdWxkIGJlIGRp c3BsYXllZC4uLgorKi8KKyAgICAgICAgICAgIHx8IChjaCA+IDEyNykKKyNlbHNlIC8qIE9TMiAq LworICAgICAgICAgICAgfHwgKGNoID4gMTI3ICYmIGNoIDwgMTYwKQorI2VuZGlmIC8qIE9TMiAq LworI2VuZGlmIC8qIFhFTklYICovCisjZW5kaWYgLyogQVVYICovCisjZW5kaWYgLyogTkVYVCAq LworICAgICAgICAgICAgKQorICAgICAgICAgIHByaW50ZigiXFx7JWR9IixjaCk7ICAgICAgICAg IC8qIERpc3BsYXkgY29udHJvbCBjaGFyYWN0ZXJzICovCisgICAgICAgIGVsc2UgcHV0Y2hhcigo Y2hhcikgY2gpOyAgICAgICAgLyogaW4gYmFja3NsYXNoIG5vdGF0aW9uICovCisgICAgfQorfQor CisjZGVmaW5lIHh4ZGlmZih2LHN5cykgc3RybmNtcCh2LHN5cyxzdHJsZW4oc3lzKSkKKworI2lm bmRlZiBOT1NIT1cKK1ZPSUQKK3Nob3ZlcigpIHsKKyNpZmRlZiBPUzIKKyAgICBleHRlcm4gY2hh ciBja3hzeXN0ZW1bXTsKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICBleHRlcm4gY2hhciAqY2tfcGF0 Y2gsICogY2tsaWJ2OworICAgIHByaW50ZigiXG5WZXJzaW9uczpcbiAlc1xuIix2ZXJzaW8pOwor ICAgIHByaW50ZigiIE51bWVyaWM6ICVsZFxuIix2ZXJudW0pOworI2lmZGVmIE9TMgorICAgIHBy aW50ZigiIE9wZXJhdGluZyBTeXN0ZW06ICVzXG4iLCBja3hzeXN0ZW0pOworI2Vsc2UgLyogT1My ICovCisgICAgcHJpbnRmKCIgQnVpbHQgZm9yOiAlc1xuIiwgY2t4c3lzKTsKKyNpZmRlZiBDS19V VFNOQU1FCisgICAgaWYgKHVubV9uYW1bMF0pCisgICAgICBwcmludGYoIiBSdW5uaW5nIG9uOiAl cyAlcyAlcyAlc1xuIiwgdW5tX25hbSx1bm1fdmVyLHVubV9yZWwsdW5tX21jaCk7CisjZW5kaWYg LyogQ0tfVVRTTkFNRSAqLworICAgIHByaW50ZigiIFBhdGNoZXM6ICVzXG4iLCAqY2tfcGF0Y2gg PyBja19wYXRjaCA6ICIobm9uZSkiKTsKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICBpZiAoeHhkaWZm KGNreHYsY2t4c3lzKSkKKyAgICAgIHByaW50ZigiICVzIGZvciVzXG4iLGNreHYsY2t4c3lzKTsK KyAgICBlbHNlCisgICAgICBwcmludGYoIiAlc1xuIixja3h2KTsKKyAgICBpZiAoeHhkaWZmKGNr enYsY2t6c3lzKSkKKyAgICAgIHByaW50ZigiICVzIGZvciVzXG4iLGNrenYsY2t6c3lzKTsKKyAg ICBlbHNlCisgICAgICBwcmludGYoIiAlc1xuIixja3p2KTsKKyAgICBwcmludGYoIiAlc1xuIixj a2xpYnYpOworICAgIHByaW50ZigiICVzXG4iLHByb3R2KTsKKyAgICBwcmludGYoIiAlc1xuIixm bnN2KTsKKyAgICBwcmludGYoIiAlc1xuICVzXG4iLGNtZHYsdXNlcnYpOworI2lmbmRlZiBOT0NT RVRTCisgICAgcHJpbnRmKCIgJXNcbiIseGxhdik7CisjZW5kaWYgLyogTk9DU0VUUyAqLworI2lm bmRlZiBNQUMKKyNpZm5kZWYgTk9MT0NBTAorICAgIHByaW50ZigiICVzXG4iLGNvbm52KTsKKyNp ZmRlZiBPUzIKKyAgICBwcmludGYoIiAlc1xuIixja3l2KTsKKyNlbmRpZiAvKiBPUzIgKi8KKyNl bmRpZiAvKiBOT0xPQ0FMICovCisjZW5kaWYgLyogTUFDICovCisjaWZuZGVmIE5PRElBTAorICAg IHByaW50ZigiICVzXG4iLGRpYWx2KTsKKyNlbmRpZiAvKiBOT0RJQUwgKi8KKyNpZm5kZWYgTk9T Q1JJUFQKKyAgICBwcmludGYoIiAlc1xuIixsb2dpbnYpOworI2VuZGlmIC8qIE5PU0NSSVBUICov CisjaWZkZWYgTkVUQ09OTgorICAgIHByaW50ZigiICVzXG4iLGNrbmV0dik7CisjaWZkZWYgT1My CisgICAgcHJpbnRmKCIgJXNcbiIsY2tvbmV0dik7CisjaWZkZWYgQ0tfTkVUQklPUworICAgIHBy aW50ZigiICVzXG4iLGNrb25iaXYpOworI2VuZGlmIC8qIENLX05FVEJJT1MgKi8KKyNlbmRpZiAv KiBPUzIgKi8KKyNlbmRpZiAvKiBORVRDT05OICovCisjaWZkZWYgVE5DT0RFCisgICAgcHJpbnRm KCIgJXNcbiIsY2t0ZWx2KTsKKyNlbmRpZiAvKiBUTkNPREUgKi8KKyNpZmRlZiBTU0hCVUlMVElO CisgICAgcHJpbnRmKCIgJXNcbiIsY2tzc2h2KTsKKyNpZmRlZiBTRlRQX0JVSUxUSU4KKyAgICBw cmludGYoIiAlc1xuIixja3NmdHB2KTsKKyNlbmRpZiAvKiBTRlRQX0JVSUxUSU4gKi8KKyNlbmRp ZiAvKiBTU0hCVUlMVElOICovCisjaWZkZWYgT1MyCisjaWZkZWYgT1MyTU9VU0UKKyAgICBwcmlu dGYoIiAlc1xuIixja29tb3V2KTsKKyNlbmRpZiAvKiBPUzJNT1VTRSAqLworI2VuZGlmIC8qIE9T MiAqLworI2lmZGVmIE5FV0ZUUAorICAgIHByaW50ZigiICVzXG4iLGNrZnRwdik7CisjZW5kaWYg LyogTkVXRlRQICovCisjaWZkZWYgQ0tfQVVUSEVOVElDQVRJT04KKyAgICBwcmludGYoIiAlc1xu Iixja2F0aHYpOworI2VuZGlmIC8qIENLX0FVVEhFTlRJQ0FUSU9OICovCisjaWZkZWYgQ0tfRU5D UllQVElPTgorI2lmZGVmIENSWVBUX0RMTAorICAgIHByaW50ZigiICVzXG4iLGNrX2NyeXB0X2Rs bF92ZXJzaW9uKCkpOworI2Vsc2UgLyogQ1JZUFRfRExMICovCisgICAgcHJpbnRmKCIgJXNcbiIs Y2tjcnB2KTsKKyNlbmRpZiAvKiBDUllQVF9ETEwgKi8KKyNlbmRpZiAvKiBDS19FTkNSWVBUSU9O ICovCisjaWZkZWYgQ0tfU1NMCisgICAgcHJpbnRmKCIgJXNcbiIsY2tzc2x2KTsKKyNlbmRpZiAv KiBDS19TU0wgKi8KKyAgICBwcmludGYoIlxuIik7Cit9CisKKyNpZmRlZiBDS19MQUJFTEVECitW T0lECitzaG9sYmwoKSB7CisjaWZkZWYgVk1TCisgICAgcHJpbnRmKCJWTVMgTGFiZWxlZCBGaWxl IEZlYXR1cmVzOlxuIik7CisgICAgcHJpbnRmKCIgYWNsICVzIChBQ0wgaW5mbyAlcylcbiIsCisg ICAgICAgICAgIHNob3dvZmYobGZfb3B0cyAmIExCTF9BQ0wpLAorICAgICAgICAgICBsZl9vcHRz ICYgTEJMX0FDTCA/ICJwcmVzZXJ2ZWQiIDogImRpc2NhcmRlZCIpOworICAgIHByaW50ZigiIGJh Y2t1cC1kYXRlICVzIChiYWNrdXAgZGF0ZS90aW1lICVzKVxuIiwKKyAgICAgICAgICAgc2hvd29m ZihsZl9vcHRzICYgTEJMX0JDSyksCisgICAgICAgICAgIGxmX29wdHMgJiBMQkxfQkNLID8gInBy ZXNlcnZlZCIgOiAiZGlzY2FyZGVkIik7CisgICAgcHJpbnRmKCIgbmFtZSAlcyAob3JpZ2luYWwg ZmlsZW5hbWUgJXMpXG4iLAorICAgICAgICAgICBzaG93b2ZmKGxmX29wdHMgJiBMQkxfTkFNKSwK KyAgICAgICAgICAgbGZfb3B0cyAmIExCTF9OQU0gPyAicHJlc2VydmVkIiA6ICJkaXNjYXJkZWQi KTsKKyAgICBwcmludGYoIiBvd25lciAlcyAob3JpZ2luYWwgZmlsZSBvd25lciBpZCAlcylcbiIs CisgICAgICAgICAgIHNob3dvZmYobGZfb3B0cyAmIExCTF9PV04pLAorICAgICAgICAgICBsZl9v cHRzICYgTEJMX09XTiA/ICJwcmVzZXJ2ZWQiIDogImRpc2NhcmRlZCIpOworICAgIHByaW50Zigi IHBhdGggJXMgKG9yaWdpbmFsIGZpbGUncyBkaXNrOltkaXJlY3RvcnldICVzKVxuIiwKKyAgICAg ICAgICAgc2hvd29mZihsZl9vcHRzICYgTEJMX1BUSCksCisgICAgICAgICAgIGxmX29wdHMgJiBM QkxfUFRIID8gInByZXNlcnZlZCIgOiAiZGlzY2FyZGVkIik7CisjZWxzZQorI2lmZGVmIE9TMgor ICAgIHByaW50ZigiT1MvMiBMYWJlbGVkIEZpbGUgZmVhdHVyZXMgKGF0dHJpYnV0ZXMpOlxuIik7 CisgICAgcHJpbnRmKCIgYXJjaGl2ZTogICAlc1xuIiwgc2hvd29mZihsZl9vcHRzICYgTEJMX0FS QykpOworICAgIHByaW50ZigiIGV4dGVuZGVkOiAgJXNcbiIsIHNob3dvZmYobGZfb3B0cyAmIExC TF9FWFQpKTsKKyAgICBwcmludGYoIiBoaWRkZW46ICAgICVzXG4iLCBzaG93b2ZmKGxmX29wdHMg JiBMQkxfSElEKSk7CisgICAgcHJpbnRmKCIgcmVhZC1vbmx5OiAlc1xuIiwgc2hvd29mZihsZl9v cHRzICYgTEJMX1JPICkpOworICAgIHByaW50ZigiIHN5c3RlbTogICAgJXNcbiIsIHNob3dvZmYo bGZfb3B0cyAmIExCTF9TWVMpKTsKKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBWTVMgKi8K K30KKyNlbmRpZiAvKiBDS19MQUJFTEVEICovCisKK1ZPSUQKK3Nob3Rjcyhjc2wsY3NyKSBpbnQg Y3NsLCBjc3I7IHsgICAgICAgICAvKiBTaG93IHRlcm1pbmFsIGNoYXJhY3RlciBzZXQgKi8KKyNp Zm5kZWYgTk9DU0VUUworI2lmZGVmIE9TMgorI2lmbmRlZiBOT1RFUk0KKyAgICBleHRlcm4gc3Ry dWN0IF92dEcgR1s0XSwgKkdMLCAqR1I7CisgICAgZXh0ZXJuIGludCBkZWNucmNtLCBzbmlfY2hj b2RlOworICAgIGV4dGVybiBpbnQgdHRfdXRmOCwgZGVjX25yYywgZGVjX2tiZCwgZGVjX2xhbmc7 CisgICAgZXh0ZXJuIHBybmNzOworCisgICAgcHJpbnRmKCIgVGVybWluYWwgY2hhcmFjdGVyLXNl dHM6XG4iKTsKKyAgICBpZiAoSVM5NzgwMSh0dF90eXBlX21vZGUpKSB7CisgICAgICAgIGlmIChj bWFzayA9PSAwMzc3KQorICAgICAgICAgIHByaW50ZigiICAgICBNb2RlOiA4LWJpdCBNb2RlXG4i KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIHByaW50ZigiICAgICBNb2RlOiA3LWJpdCBNb2Rl XG4iKTsKKyAgICAgICAgcHJpbnRmKCIgICAgIENILkNPREUgaXMgJXNcbiIsc25pX2NoY29kZT8i T24iOiJPZmYiKTsKKyAgICB9IGVsc2UgaWYgKElTVlQxMDAodHRfdHlwZV9tb2RlKSkgeworICAg ICAgICBpZiAoZGVjbnJjbSkKKyAgICAgICAgICBwcmludGYoIiAgICAgTW9kZTogNy1iaXQgTmF0 aW9uYWwgTW9kZVxuIik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBwcmludGYoIiAgICAgTW9k ZTogOC1iaXQgTXVsdGluYXRpb25hbCBNb2RlXG4iKTsKKyAgICB9CisgICAgaWYgKCBpc3VuaWNv ZGUoKSApCisgICAgICAgIHByaW50ZigiICAgIExvY2FsOiBVbmljb2RlIGRpc3BsYXkgLyAlcyBp bnB1dFxuIiwKKyAgICAgICAgICAgICAgICBjc2wgPT0gVFhfVFJBTlNQID8gInRyYW5zcGFyZW50 IiA6CisgICAgICAgICAgICAgICAgY3NsID09IFRYX1VOREVGID8gInVuZGVmaW5lZCIgOiB0eHJp bmZvW2NzbF0tPmtleXdkKTsKKyAgICBlbHNlCisgICAgICAgIHByaW50ZigiICAgIExvY2FsOiAl c1xuIiwKKyAgICAgICAgICAgICAgICBjc2wgPT0gVFhfVFJBTlNQID8gInRyYW5zcGFyZW50IiA6 CisgICAgICAgICAgICAgICAgY3NsID09IFRYX1VOREVGID8gInVuZGVmaW5lZCIgOiB0eHJpbmZv W2NzbF0tPmtleXdkKTsKKworICAgIGlmICggdHRfdXRmOCApIHsKKyAgICAgICAgcHJpbnRmKCIg ICBSZW1vdGU6IFVURi04XG4iKTsKKyAgICB9IGVsc2UgeworICAgICAgICBwcmludGYoIiAgIFJl bW90ZTogJXNHMDogJXMgKCVzKVxuIiwKKyAgICAgICAgICAgR0wgPT0gJkdbMF0gPyAiR0wtPiIg OiBHUiA9PSAmR1swXSA/ICJHUi0+IiA6ICIgICAgIiwKKyAgICAgICAgICAgdHhyaW5mb1tHWzBd LmRlc2lnbmF0aW9uXS0+a2V5d2QsCisgICAgICAgICAgIEdbMF0uZGVzaWduYXRpb24gPT0gVFhf VFJBTlNQID8gIiIgOgorICAgICAgICAgICBHWzBdLnNpemUgPT0gY3M5NCA/ICI5NCBjaGFycyIg OgorICAgICAgICAgICBHWzBdLnNpemUgPT0gY3M5NiA/ICI5NiBjaGFycyIgOiAibXVsdGktYnl0 ZSIpOworICAgICAgICBwcmludGYoIiAgICAgICAgICAgJXNHMTogJXMgKCVzKVxuIiwKKyAgICAg ICAgICAgR0wgPT0gJkdbMV0gPyAiR0wtPiIgOiBHUiA9PSAmR1sxXSA/ICJHUi0+IiA6ICIgICAg IiwKKyAgICAgICAgICAgdHhyaW5mb1tHWzFdLmRlc2lnbmF0aW9uXS0+a2V5d2QsCisgICAgICAg ICAgIEdbMV0uZGVzaWduYXRpb24gPT0gVFhfVFJBTlNQID8gIiIgOgorICAgICAgICAgICBHWzFd LnNpemUgPT0gY3M5NCA/ICI5NCBjaGFycyIgOgorICAgICAgICAgICBHWzFdLnNpemUgPT0gY3M5 NiA/ICI5NiBjaGFycyIgOiAibXVsdGktYnl0ZSIpOworICAgICAgICBwcmludGYoIiAgICAgICAg ICAgJXNHMjogJXMgKCVzKVxuIiwKKyAgICAgICAgICAgR0wgPT0gJkdbMl0gPyAiR0wtPiIgOiBH UiA9PSAmR1syXSA/ICJHUi0+IiA6ICIgICAgIiwKKyAgICAgICAgICAgdHhyaW5mb1tHWzJdLmRl c2lnbmF0aW9uXS0+a2V5d2QsCisgICAgICAgICAgIEdbMl0uZGVzaWduYXRpb24gPT0gVFhfVFJB TlNQID8gIiIgOgorICAgICAgICAgICBHWzJdLnNpemUgPT0gY3M5NCA/ICI5NCBjaGFycyIgOgor ICAgICAgICAgICBHWzJdLnNpemUgPT0gY3M5NiA/ICI5NiBjaGFycyIgOiAibXVsdGktYnl0ZSIp OworICAgICAgICBwcmludGYoIiAgICAgICAgICAgJXNHMzogJXMgKCVzKVxuIiwKKyAgICAgICAg ICAgR0wgPT0gJkdbM10gPyAiR0wtPiIgOiBHUiA9PSAmR1szXSA/ICJHUi0+IiA6ICIgICAgIiwK KyAgICAgICAgICAgdHhyaW5mb1tHWzNdLmRlc2lnbmF0aW9uXS0+a2V5d2QsCisgICAgICAgICAg IEdbM10uZGVzaWduYXRpb24gPT0gVFhfVFJBTlNQID8gIiIgOgorICAgICAgICAgICBHWzNdLnNp emUgPT0gY3M5NCA/ICI5NCBjaGFycyIgOgorICAgICAgICAgICBHWzNdLnNpemUgPT0gY3M5NiA/ ICI5NiBjaGFycyIgOiAibXVsdGktYnl0ZSIpOworICAgIH0KKyAgICBwcmludGYoIlxuIik7Cisg ICAgcHJpbnRmKCIgS2V5Ym9hcmQgY2hhcmFjdGVyLXNldHM6XG4iKTsKKyAgICBwcmludGYoIiAg IE11bHRpbmF0aW9uYWw6ICVzXG4iLHR4cmluZm9bZGVjX2tiZF0tPmtleXdkKTsKKyAgICBwcmlu dGYoIiAgICAgICAgTmF0aW9uYWw6ICVzXG4iLHR4cmluZm9bZGVjX25yY10tPmtleXdkKTsKKyAg ICBwcmludGYoIlxuIik7CisgICAgcHJpbnRmKCIgUHJpbnRlciBjaGFyYWN0ZXItc2V0OiAlc1xu Iix0eHJpbmZvW3BybmNzXS0+a2V5d2QpOworI2VuZGlmIC8qIE5PVEVSTSAqLworI2Vsc2UgLyog T1MyICovCisjaWZuZGVmIE1BQworICAgIGNoYXIgKnM7CisKKyAgICBkZWJ1ZyhGMTAxLCJURVJN IExPQ0FMIENTRVQiLCIiLGNzbCk7CisgICAgZGVidWcoRjEwMSwiVEVSTSBSRU1PVEUgQ1NFVCIs IiIsY3NyKTsKKyAgICBwcmludGYoIiBUZXJtaW5hbCBjaGFyYWN0ZXItc2V0OiAiKTsKKyAgICBp ZiAodGNzX3RyYW5zcCkgeyAgICAgICAgICAgICAgICAgICAvKiBObyB0cmFuc2xhdGlvbiAqLwor ICAgICAgICBwcmludGYoInRyYW5zcGFyZW50XG4iKTsKKyAgICB9IGVsc2UgeyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBUcmFuc2xhdGlvbiAqLworICAgICAgICBwcmludGYoIiVzIChy ZW1vdGUpICVzIChsb2NhbClcbiIsCisgICAgICAgICAgICAgICBmY3NpbmZvW2Nzcl0ua2V5d29y ZCxmY3NpbmZvW2NzbF0ua2V5d29yZCk7CisgICAgICAgIGlmIChjc3IgIT0gY3NsKSB7CisgICAg ICAgICAgICBzd2l0Y2goZ2V0dGNzKGNzcixjc2wpKSB7CisgICAgICAgICAgICAgIGNhc2UgVENf VVNBU0NJSTogIHMgPSAiYXNjaWkiOyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2Ug VENfMUxBVElOOiAgIHMgPSAibGF0aW4xLWlzbyI7ICAgYnJlYWs7CisgICAgICAgICAgICAgIGNh c2UgVENfMkxBVElOOiAgIHMgPSAibGF0aW4yLWlzbyI7ICAgYnJlYWs7CisgICAgICAgICAgICAg IGNhc2UgVENfQ1lSSUxMOiAgIHMgPSAiY3lyaWxsaWMtaXNvIjsgYnJlYWs7CisgICAgICAgICAg ICAgIGNhc2UgVENfSkVVQzogICAgIHMgPSAiamFwYW5lc2UtZXVjIjsgYnJlYWs7CisgICAgICAg ICAgICAgIGNhc2UgVENfSEVCUkVXOiAgIHMgPSAiaGVicmV3LWlzbyI7ICAgYnJlYWs7CisgICAg ICAgICAgICAgIGNhc2UgVENfR1JFRUs6ICAgIHMgPSAiZ3JlZWstaXNvIjsgICAgYnJlYWs7Cisg ICAgICAgICAgICAgIGNhc2UgVENfOUxBVElOOiAgIHMgPSAibGF0aW45LWlzbyI7ICAgYnJlYWs7 CisgICAgICAgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgIHMgPSAidHJhbnNwYXJlbnQiOyAgYnJl YWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc3RyY21wKHMsZmNzaW5mb1tjc2xd LmtleXdvcmQpICYmCisgICAgICAgICAgICAgICAgc3RyY21wKHMsZmNzaW5mb1tjc3JdLmtleXdv cmQpKQorICAgICAgICAgICAgICBwcmludGYoIiAgICAgICAgICAgICAgICAgICAgICAgICAodmlh ICVzKVxuIixzKTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBNQUMgKi8KKyNlbmRpZiAv KiBPUzIgKi8KKyNlbmRpZiAvKiBOT0NTRVRTICovCit9CisKKyNpZm5kZWYgTk9MT0NBTAorI2lm ZGVmIE9TMgorZXh0ZXJuIGNoYXIgaHRhYltdOworVk9JRAorc2hvdGFicygpIHsKKyAgICBpbnQg aSxqLGssbjsKKworICAgIHByaW50ZigiVGFiIFN0b3BzOlxuXG4iKTsKKyAgICBmb3IgKGkgPSAw LCBqID0gMSwgayA9IFZzY3JuR2V0V2lkdGgoVkNNRCk7IGkgPCBNQVhURVJNQ09MOyApIHsKKyAg ICAgICAgZG8geworICAgICAgICAgICAgcHJpbnRmKCIlYyIsaHRhYlsrK2ldPT0nVCc/J1QnOict Jyk7CisgICAgICAgIH0gd2hpbGUgKGkgJSBrICYmIGkgPCBNQVhURVJNQ09MKTsKKyAgICAgICAg cHJpbnRmKCJcbiIpOworICAgICAgICBmb3IgKCA7IGogPD0gaTsgaisrKSB7CisgICAgICAgICAg ICBzd2l0Y2ggKCBqJTEwICkgeworCSAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICBwcmlu dGYoIiVjIixqID09IDEgPyAnMScgOiAnLicpOworICAgICAgICAgICAgICAgIGJyZWFrOworCSAg ICAgIGNhc2UgMjoKKwkgICAgICBjYXNlIDM6CisJICAgICAgY2FzZSA0OgorCSAgICAgIGNhc2Ug NToKKwkgICAgICBjYXNlIDY6CisJICAgICAgY2FzZSA3OgorICAgICAgICAgICAgICAgIHByaW50 ZigiJWMiLCcuJyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisJICAgICAgY2FzZSA4OgorICAg ICAgICAgICAgICAgIG4gPSAoaisyKS8xMDA7CisgICAgICAgICAgICAgICAgaWYgKG4pCisJCSAg cHJpbnRmKCIlZCIsbik7CisgICAgICAgICAgICAgICAgZWxzZSAKKwkJICBwcmludGYoIiVjIiwn LicpOworICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICAgIGNhc2UgOToKKyAgICAgICAgICAg ICAgICBuID0gKGorMSklMTAwLzEwOworICAgICAgICAgICAgICAgIGlmIChuKQorCQkgIHByaW50 ZigiJWQiLG4pOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGo+OTApCisJCSAgcHJpbnRmKCIw Iik7CisgICAgICAgICAgICAgICAgZWxzZSAKKwkJICBwcmludGYoIiVjIiwnLicpOworICAgICAg ICAgICAgICAgIGJyZWFrOworCSAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICAgICBwcmludGYo IjAiKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor ICAgICAgICBwcmludGYoIlxuIik7CisgICAgfQorI2lmZGVmIENPTU1FTlQKKyAgICBmb3IgKGkg PSAxOyBpIDw9IDcwOyBpKyspCisgICAgICBwcmludGYoIiVjIixodGFiW2ldPT0nVCc/J1QnOict Jyk7CisgICAgcHJpbnRmKCJcbjEuLi4uLi4uMTAuLi4uLi4uLjIwLi4uLi4uLi4zMC4uLi4uLi4u NDAuLi4uLi4uLjUwLi4uLi4uLi42MFwKKy4uLi4uLi4uNzBcblxuIik7CisgICAgZm9yICg7IGkg PD0gMTQwOyBpKyspCisgICAgICBwcmludGYoIiVjIixodGFiW2ldPT0nVCc/J1QnOictJyk7Cisg ICAgcHJpbnRmKCJcbi4uLi4uLi4uODAuLi4uLi4uLjkwLi4uLi4uLjEwMC4uLi4uLi4xMTAuLi4u Li4uMTIwLi4uLi4uLjEzMFwKKy4uLi4uLi4xNDBcblxuIik7CisgICAgZm9yICg7IGkgPD0gMjEw OyBpKyspCisgICAgICBwcmludGYoIiVjIixodGFiW2ldPT0nVCc/J1QnOictJyk7CisgICAgcHJp bnRmKCJcbi4uLi4uLi4xNTAuLi4uLi4uMTYwLi4uLi4uLjE3MC4uLi4uLi4xODAuLi4uLi4uMTkw Li4uLi4uLjIwMFwKKy4uLi4uLi4yMTBcblxuIik7CisgICAgZm9yICg7IGkgPD0gMjU1OyBpKysp CisgICAgICBwcmludGYoIiVjIixodGFiW2ldPT0nVCc/J1QnOictJyk7CisgICAgcHJpbnRmKCJc bi4uLi4uLi4yMjAuLi4uLi4uMjMwLi4uLi4uLjI0MC4uLi4uLi4yNTAuLjI1NVxuIik7CisjZW5k aWYKKworfQorI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIE5PTE9DQUwgKi8KKworI2lmZGVm IE9TMk1PVVNFCitWT0lECitzaG9tb3UoKSB7CisgICAgaW50IGJ1dHRvbiwgZXZlbnQsIGlkLCBp OworICAgIGNoYXIgKiBuYW1lID0gIiI7CisKKyAgICBwcmludGYoIk1vdXNlIHNldHRpbmdzOlxu Iik7CisgICAgcHJpbnRmKCIgICBCdXR0b24gQ291bnQ6ICAgJWRcbiIsbW91c2VidXR0b25jb3Vu dCgpKTsKKyAgICBwcmludGYoIiAgIEFjdGl2ZTogICAgICAgICAlc1xuXG4iLHNob3dvZmYodHRf bW91c2UpKTsKKworICAgIGZvciAoYnV0dG9uID0gMDsgYnV0dG9uIDwgTU1CVVRUT05NQVg7IGJ1 dHRvbisrKQorICAgICAgZm9yIChldmVudCA9IDA7IGV2ZW50IDwgTU1FVkVOVFNJWkU7IGV2ZW50 KyspCisgICAgICAgIGlmIChtb3VzZW1hcFtidXR0b25dW2V2ZW50XS50eXBlICE9IGVycm9yKQor ICAgICAgICAgIHN3aXRjaCAobW91c2VtYXBbYnV0dG9uXVtldmVudF0udHlwZSkgeworICAgICAg ICAgICAgY2FzZSBrZXk6CisgICAgICAgICAgICAgIHByaW50ZigiICAgJXMgPSBDaGFyYWN0ZXI6 ICVjIFxcJWRcbiIsCisgICAgICAgICAgICAgICAgICAgICBtb3VzZW5hbWUoYnV0dG9uLGV2ZW50 KSwKKyAgICAgICAgICAgICAgICAgICAgIG1vdXNlbWFwW2J1dHRvbl1bZXZlbnRdLmtleS5zY2Fu Y29kZSwKKyAgICAgICAgICAgICAgICAgICAgIG1vdXNlbWFwW2J1dHRvbl1bZXZlbnRdLmtleS5z Y2FuY29kZSApOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Uga3ZlcmI6 CisgICAgICAgICAgICAgIGlkID0gbW91c2VtYXBbYnV0dG9uXVtldmVudF0ua3ZlcmIuaWQgJiB+ KEZfS1ZFUkIpOworICAgICAgICAgICAgICBpZiAoaWQgIT0gS19JR05PUkUpIHsKKyAgICAgICAg ICAgICAgICAgIGZvciAoaSA9IDA7IGk8IG5rdmVyYnM7IGkrKykKKyAgICAgICAgICAgICAgICAg ICAgaWYgKGlkID09IGt2ZXJic1tpXS5rd3ZhbCkgeworICAgICAgICAgICAgICAgICAgICAgICAg bmFtZSA9IGt2ZXJic1tpXS5rd2Q7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgcHJpbnRmKCIgICAlcyA9IEt2 ZXJiOiBcXEslc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBtb3VzZW5hbWUoYnV0dG9u LGV2ZW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lCisgICAgICAgICAgICAgICAg ICAgICAgICAgKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgICAgIGNhc2UgbWFjcm86CisgICAgICAgICAgICAgIHByaW50ZigiICAgJXMgPSBNYWNybzog IiwKKyAgICAgICAgICAgICAgICAgICAgIG1vdXNlbmFtZShidXR0b24sZXZlbnQpICk7CisgICAg ICAgICAgICAgIHNob3N0cmRlZihtb3VzZW1hcFtidXR0b25dW2V2ZW50XS5tYWNyby5zdHJpbmcp OworICAgICAgICAgICAgICBwcmludGYoIlxuIik7CisgICAgICAgICAgICAgIGJyZWFrOworICAg ICAgICAgIH0KK30KKyNlbmRpZiAvKiBPUzJNT1VTRSAqLworCisjaWZuZGVmIE5PTE9DQUwKK1ZP SUQKK3Nob3RybSgpIHsKKyAgICBjaGFyICpzOworICAgIGV4dGVybiBjaGFyICogZ2V0aWFjdCgp OworICAgIGV4dGVybiBpbnQgdHRfcHJpbnQsIGFkbF9lcnI7CisjaWZuZGVmIE5PVFJJR0dFUgor ICAgIGV4dGVybiBjaGFyICogdHRfdHJpZ2dlcltdOworI2VuZGlmIC8qIE5PVFJJR0dFUiAqLwor I2lmZGVmIENLVElETEUKKyAgICBleHRlcm4gY2hhciAqIHR0X2lkbGVzbmRfc3RyOworICAgIGV4 dGVybiBpbnQgdHRfaWRsZXNuZF90bW87CisgICAgZXh0ZXJuIGludCB0dF9pZGxlbGltaXQsIHR0 X2lkbGVhY3Q7CisjZW5kaWYgLyogQ0tUSURMRSAqLworI2lmZGVmIE9TMgorICAgIGV4dGVybiBp bnQgd3lfYXV0b3BhZ2UsIGF1dG9zY3JvbGwsIHNncmNvbG9ycywgY29sb3JyZXNldCwgdXNlcl9l cmFzZW1vZGUsCisgICAgICBkZWNzY25tLCBkZWNzY25tX3VzciwgdHRfZGlmZl91cGQsIHR0X3Nl bmRkYXRhLAorICAgICAgd3lfYmxvY2tlbmQsIG1hcmdpbmJlbGwsIG1hcmdpbmJlbGxjb2wsIHR0 X21vZGVjaGcsIGRndW5peDsKKyAgICBpbnQgbGluZXMgPSAwOworI2lmZGVmIEtVSQorICAgIGV4 dGVybiBDS0ZMT0FUIHR0X2xpbmVzcGFjaW5nW107CisgICAgZXh0ZXJuIHR0X2N1cnNvcl9ibGlu azsKKyNlbmRpZiAvKiBLVUkgKi8KKyNpZmRlZiBQQ0ZPTlRTCisgICAgaW50IGk7CisgICAgY2hh ciAqZm9udDsKKworICAgIGlmIChJc09TMkZ1bGxTY3JlZW4oKSkgeyAgICAgICAgICAgIC8qIERl dGVybWluZSB0aGUgZm9udCBuYW1lICovCisgICAgICAgIGlmICghb3MyTG9hZFBDRm9udHMoKSkg eworICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG50ZXJtZm9udDsgaSsrKSB7CisgICAgICAg ICAgICAgICAgaWYgKHR0X2ZvbnQgPT0gdGVybV9mb250W2ldLmt3dmFsKSB7CisgICAgICAgICAg ICAgICAgICAgIGZvbnQgPSB0ZXJtX2ZvbnRbaV0ua3dkOworICAgICAgICAgICAgICAgICAgICBi cmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7 CisgICAgICAgICAgICBmb250ID0gIihETEwgbm90IGF2YWlsYWJsZSkiOworICAgICAgICB9Cisg ICAgfSBlbHNlIHsKKyAgICAgICAgZm9udCA9ICAgICAiKGZ1bGwgc2NyZWVuIG9ubHkpIjsKKyAg ICB9CisjZW5kaWYgLyogUENGT05UUyAqLworI2lmZGVmIEtVSQorICAgIGNoYXIgZm9udFs2NF0g PSAiKHVua25vd24pIjsKKyAgICBpZiAoIG50ZXJtZm9udCA+IDAgKSB7CisgICAgICAgIGludCBp OworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnRlcm1mb250OyBpKyspIHsKKyAgICAgICAgICAg IGlmICh0dF9mb250ID09IHRlcm1fZm9udFtpXS5rd3ZhbCkgeworICAgICAgICAgICAgICAgIGNr c3RybmNweShmb250LHRlcm1fZm9udFtpXS5rd2QsNTkpOworICAgICAgICAgICAgICAgIGNrc3Ry bmNhdChmb250LCIgIiw2NCk7CisgICAgICAgICAgICAgICAgY2tzdHJuY2F0KGZvbnQsY2tpdG9h KHR0X2ZvbnRfc2l6ZS8yKSw2NCk7CisgICAgICAgICAgICAgICAgaWYgKCB0dF9mb250X3NpemUg JSAyICkKKyAgICAgICAgICAgICAgICAgICAgY2tzdHJuY2F0KGZvbnQsIi41Iiw2NCk7CisgICAg ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisjZW5k aWYgLyogS1VJICovCisKKyAgICBwcmludGYoIlRlcm1pbmFsIHBhcmFtZXRlcnM6XG4iKTsKKyAg ICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuOyBl bHNlIGxpbmVzID0gMDsgfQorICAgIHByaW50ZigiICUxOXM6ICUxZCUtMTJzICAlMTNzOiAlMWQl LTE0c1xuIiwKKyAgICAgICAgICAgIkJ5dGVzaXplOiBDb21tYW5kIiwKKyAgICAgICAgICAgKGNt ZG1zayA9PSAwMzc3KSA/IDggOiA3LAorICAgICAgICAgICAiIGJpdHMiLCJUZXJtaW5hbCIsCisg ICAgICAgICAgIChjbWFzayA9PSAwMzc3KSA/IDggOiA3LCIgYml0cyIpOworICAgIGlmICgrK2xp bmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm47IGVsc2UgbGluZXMg PSAwOyB9CisgICAgcHJpbnRmKCIgJTE5czogJS0xM3MiLCJUeXBlIiwKKyAgICAgICAgICAgKHR0 X3R5cGUgPj0gMCAmJiB0dF90eXBlIDw9IG1heF90dCkgPworICAgICAgICAgICB0dF9pbmZvW3R0 X3R5cGVdLnhfbmFtZSA6CisgICAgICAgICAgICJ1bmtub3duIiApOworICAgIGlmICh0dF90eXBl ID49IDAgJiYgdHRfdHlwZSA8PSBtYXhfdHQpCisgICAgICBpZiAoc3RybGVuKHR0X2luZm9bdHRf dHlwZV0ueF9pZCkpCisgICAgICAgIHByaW50ZigiICAlMTNzOiA8RVNDPiVzIiwiSUQiLHR0X2lu Zm9bdHRfdHlwZV0ueF9pZCk7CisgICAgcHJpbnRmKCJcbiIpOworICAgIGlmICgrK2xpbmVzID4g Y21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm47IGVsc2UgbGluZXMgPSAwOyB9 CisgICAgcHJpbnRmKCIgJTE5czogJS0xM3MgICUxM3M6ICUtMTVzXG4iLCJFY2hvIiwKKyAgICAg ICAgICAgZHVwbGV4ID8gImxvY2FsIiA6ICJyZW1vdGUiLCJMb2NraW5nLXNoaWZ0IixzaG93b2Zm KHNvc2kpKTsKKyAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUo KSkgcmV0dXJuOyBlbHNlIGxpbmVzID0gMDsgfQorICAgIHByaW50ZigiICUxOXM6ICUtMTNzICAl MTNzOiAlLTE1c1xuIiwiTmV3bGluZS1tb2RlIiwgc2hvd29mZih0bmxtKSwKKwkgICAiQ3ItZGlz cGxheSIsdHRfY3JkID8gImNybGYiIDogIm5vcm1hbCIpOworICAgIGlmICgrK2xpbmVzID4gY21k X3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm47IGVsc2UgbGluZXMgPSAwOyB9Cisg ICAgcHJpbnRmKCIgJTE5czogJS0xM3MgICUxM3M6ICUtMTVzXG4iLCJDdXJzb3IiLAorI2lmZGVm IEtVSQorCSAgICAodHRfY3Vyc29yID09IDIpID8gKHR0X2N1cnNvcl9ibGluayA/IAorCQkJCSAi ZnVsbCAoKikiIDogImZ1bGwgKC4pIikgOgorCSAgICAodHRfY3Vyc29yID09IDEpID8gKHR0X2N1 cnNvcl9ibGluayA/IAorCQkJCSAiaGFsZiAoKikiIDogImhhbGYgKC4pIikgOgorCSAgICAodHRf Y3Vyc29yX2JsaW5rID8gInVuZGVybGluZSAoKikiIDogInVuZGVybGluZSAoLikiKSwKKyNlbHNl IC8qIEtVSSAqLworICAgICAgICAgICAodHRfY3Vyc29yID09IDIpID8gImZ1bGwiIDoKKyAgICAg ICAgICAgKHR0X2N1cnNvciA9PSAxKSA/ICJoYWxmIiA6ICJ1bmRlcmxpbmUiLAorI2VuZGlmIC8q IEtVSSAqLworI2lmZGVmIENLX0FVVE9ETAorICAgICAgICAgICAiYXV0b2Rvd25sb2FkIixhdXRv ZGwgPT0gVEFEX09OID8KKyAgICAgICAgICAgKGFkbF9lcnIgPyAib24sIGVycm9yIHN0b3AiIDog Im9uLCBlcnJvciBjb250aW51ZSIpIDogCisgICAgICAgICAgIGF1dG9kbCA9PSBUQURfQVNLID8g CisgICAgICAgICAgIChhZGxfZXJyID8gImFzaywgZXJyb3Igc3RvcCIgOiAiYXNrLCBlcnJvciBj b250aW51ZSIpIDoKKyAgICAgICAgICAgIm9mZiIKKyNlbHNlIC8qIENLX0FVVE9ETCAqLworICAg ICAgICAgICAiIiwgIiIKKyNlbmRpZiAvKiBDS19BVVRPREwgKi8KKyAgICAgICAgICAgKTsKKyAg ICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuOyBl bHNlIGxpbmVzID0gMDsgfQorICAgIHByaW50ZigiICUxOXM6ICUtMTNzICAlMTNzOiAlLTE1c1xu IiwiQXJyb3cta2V5cyIsCisgICAgICAgICAgIHR0X2Fycm93ID8gImFwcGxpY2F0aW9uIiA6ICJj dXJzb3IiLAorICAgICAgICAgICAiS2V5cGFkLW1vZGUiLCB0dF9rZXlwYWQgPyAiYXBwbGljYXRp b24iIDogIm51bWVyaWMiCisgICAgICAgICAgICk7CisKKyAgICBpZiAoKytsaW5lcyA+IGNtZF9y b3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuOyBlbHNlIGxpbmVzID0gMDsgfQorCisg ICAgLyogSnVzdCB0byBtYWtlIHN1cmUgd2UgYXJlIHVzaW5nIGN1cnJlbnQgaW5mbyAqLworICAg IHVwZGFuc3dlcmJrKCk7CisKKyAgICAvKgorICAgICAgIFRoaXMgbGluZSBkb2Vzbid0IGVuZCB3 aXRoICdcbicgYmVjYXVzZSB0aGUgYW5zd2VyYmFjayBzdHJpbmcKKyAgICAgICBpcyB0ZXJtaW5h dGVkIHdpdGggYSBuZXdsaW5lCisgICAgKi8KKyAgICBwcmludGYoIiAlMTlzOiAlLTEzcyAgJTEz czogJS0xNXMiLCJBbnN3ZXJiYWNrIiwKKyAgICAgICAgICAgc2hvd29mZih0dF9hbnN3ZXIpLCJy ZXNwb25zZSIsYW5zd2VyYmFjayk7CisgICAgc3dpdGNoICh0dF9iZWxsKSB7CisgICAgICBjYXNl IFhZQl9OT05FOgorICAgICAgICBzID0gIm5vbmUiOworICAgICAgICBicmVhazsKKyAgICAgIGNh c2UgWFlCX1ZJUzoKKyAgICAgICAgcz0gInZpc2libGUiOworICAgICAgICBicmVhazsKKyAgICAg IGNhc2UgWFlCX0FVRCB8IFhZQl9CRUVQOgorICAgICAgICBzPSJiZWVwIjsKKyAgICAgICAgYnJl YWs7CisgICAgICBjYXNlIFhZQl9BVUQgfCBYWUJfU1lTOgorICAgICAgICBzPSJzeXN0ZW0gc291 bmRzIjsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICBzPSIodW5rbm93 bikiOworICAgIH0KKyAgICBwcmludGYoIiAlMTlzOiAlLTEzcyAgJTEzczogJS0xNXNcbiIsIkJl bGwiLHMsCisgICAgICAgICAgICJXcmFwIixzaG93b2ZmKHR0X3dyYXApKTsKKyAgICBpZiAoKyts aW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuOyBlbHNlIGxpbmVz ID0gMDsgfQorICAgIHByaW50ZigiICUxOXM6ICUtMTNzICAlMTNzOiAlLTE1c1xuIiwiQXV0b3Bh Z2UiLHNob3dvZmYod3lfYXV0b3BhZ2UpLAorICAgICAgICAgICAiQXV0b3Njcm9sbCIsc2hvd29m ZihhdXRvc2Nyb2xsKSk7CisgICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFh c2ttb3JlKCkpIHJldHVybjsgZWxzZSBsaW5lcyA9IDA7IH0KKyAgICBwcmludGYoIiAlMTlzOiAl LTEzcyAgJTEzczogJS0xNXNcbiIsIlNHUiBDb2xvcnMiLHNob3dvZmYoc2dyY29sb3JzKSwKKyAg ICAgICAgICAgIkVTQ1swbSBjb2xvciIsY29sb3JyZXNldD8iZGVmYXVsdC1jb2xvciI6ImN1cnJl bnQtY29sb3IiKTsKKyAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21v cmUoKSkgcmV0dXJuOyBlbHNlIGxpbmVzID0gMDsgfQorICAgIHByaW50ZigiICUxOXM6ICUtMTNz ICAlMTNzOiAlLTE1c1xuIiwKKyAgICAgICAgICAgICJFcmFzZSBjb2xvciIsdXNlcl9lcmFzZW1v ZGU/ImRlZmF1bHQtY29sb3IiOiJjdXJyZW50LWNvbG9yIiwKKyAgICAgICAgICAgIlNjcmVlbiBt b2RlIixkZWNzY25tPyJyZXZlcnNlIjoibm9ybWFsIik7CisgICAgaWYgKCsrbGluZXMgPiBjbWRf cm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybjsgZWxzZSBsaW5lcyA9IDA7IH0KKwor ICAgIHByaW50ZigiICUxOXM6ICUtMTNkICAlMTNzOiAlLTE1ZFxuIiwiVHJhbnNtaXQtdGltZW91 dCIsdHRfY3RzdG1vLAorICAgICAgICAgICAiT3V0cHV0LXBhY2luZyIsdHRfcGFjaW5nKTsKKyAg ICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuOyBl bHNlIGxpbmVzID0gMDsgfQorCisgICAgcHJpbnRmKCIgJTE5czogJS0xM2QgICUxM3M6ICVzXG4i LCJJZGxlLXRpbWVvdXQiLHR0X2lkbGVsaW1pdCwKKyAgICAgICAgICAgIklkbGUtYWN0aW9uIiwg Z2V0aWFjdCgpKTsKKworICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNr bW9yZSgpKSByZXR1cm47IGVsc2UgbGluZXMgPSAwOyB9CisgICAgcHJpbnRmKCIgJTE5czogJS0x M3MgICUxM3M6ICUtMTVzXG4iLCJTZW5kIGRhdGEiLAorICAgICAgICAgIHNob3dvZmYodHRfc2Vu ZGRhdGEpLCJFbmQgb2YgQmxvY2siLCB3eV9ibG9ja2VuZD8iY3JsZi9ldHgiOiJ1cy9jciIpOwor ICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm47 IGVsc2UgbGluZXMgPSAwOyB9CisjaWZuZGVmIE5PVFJJR0dFUgorICAgIHByaW50ZigiICUxOXM6 ICUtMTNzICAlMTNzOiAlZCBzZWNvbmRzXG4iLCJBdXRvLWV4aXQgdHJpZ2dlciIsCisgICAgICAg ICAgIHR0X3RyaWdnZXJbMF0sIk91dHB1dCBwYWNpbmciLHR0X3BhY2luZyApOworICAgIGlmICgr K2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm47IGVsc2UgbGlu ZXMgPSAwOyB9CisjZW5kaWYgLyogTk9UUklHR0VSICovCisgICAgcHJpbnRmKCIgJTE5czogJS0x M3MgICUxM3M6ICUtMTVkXG4iLCJNYXJnaW4gYmVsbCIsCisgICAgICAgICAgIHNob3dvZmYobWFy Z2luYmVsbCksImF0IGNvbHVtbiIsIG1hcmdpbmJlbGxjb2wpOworICAgIGlmICgrK2xpbmVzID4g Y21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm47IGVsc2UgbGluZXMgPSAwOyB9 CisgICAgc3dpdGNoICh0dF9tb2RlY2hnKSB7CisgICAgICBjYXNlIFRWQ19ESVM6IHMgPSAiZGlz YWJsZWQiOyBicmVhazsKKyAgICAgIGNhc2UgVFZDX0VOQTogcyA9ICJlbmFibGVkIjsgIGJyZWFr OworICAgICAgY2FzZSBUVkNfVzk1OiBzID0gIndpbjk1LXJlc3RyaWN0ZWQiOyBicmVhazsKKyAg ICAgIGRlZmF1bHQ6IHMgPSAiKHVua25vd24pIjsKKyAgICB9CisgICAgcHJpbnRmKCIgJTE5czog JS0xM3MgICUxM3M6ICUtMTVzXG4iLCJERyBVbml4IG1vZGUiLAorICAgICAgICAgICBzaG93b2Zm KGRndW5peCksIlZpZGVvIGNoYW5nZSIsIHMpOworICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3Mg LSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm47IGVsc2UgbGluZXMgPSAwOyB9CisKKyNpZmRl ZiBDS19BUEMKKyAgICBpZiAoYXBjc3RhdHVzID09IEFQQ19PTikgcyA9ICJvbiI7CisgICAgZWxz ZSBpZiAoYXBjc3RhdHVzID09IEFQQ19PRkYpIHMgPSAib2ZmIjsKKyAgICBlbHNlIGlmIChhcGNz dGF0dXMgPT0gQVBDX09OfEFQQ19VTkNIKSBzID0gInVuY2hlY2tlZCI7CisgICAgZWxzZSBpZiAo YXBjc3RhdHVzID09IEFQQ19PTnxBUENfTk9JTlApIHMgPSAibm8taW5wdXQiOworICAgIGVsc2Ug aWYgKGFwY3N0YXR1cyA9PSBBUENfT058QVBDX1VOQ0h8QVBDX05PSU5QKSBzID0gInVuY2hlY2tl ZC1uby1pbnB1dCI7CisgICAgcHJpbnRmKCIgJTE5czogJS0xM3MgICUxM3M6ICUtMTVzXG4iLAor ICAgICAgICAgICAiQVBDIiwgcywKKyNpZmRlZiBQQ0ZPTlRTCisgICAgICAgICAgICJGb250IChW R0EpIixmb250CisjZWxzZSAvKiBQQ0ZPTlRTICovCisjaWZkZWYgS1VJCisgICAgICAgICAgICJG b250Iixmb250CisjZWxzZQorICAgICAgICAgICAiRm9udCIsIihub3Qgc3VwcG9ydGVkKSIKKyNl bmRpZiAvKiBLVUkgKi8KKyNlbmRpZiAvKiBQQ0ZPTlRTICovCisKKyAgICAgICAgICAgKTsKKyNl bmRpZiAvKiBDS19BUEMgKi8KKyAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAo IWFza21vcmUoKSkgcmV0dXJuOyBlbHNlIGxpbmVzID0gMDsgfQorCisjaWZkZWYgQ0tfVFRHV1NJ WiAgICAgICAgICAgICAgICAgICAgICAgLyogQ29uc29sZSB0ZXJtaW5hbCBzY3JlZW4gc2l6ZSAq LworICAgIGlmICh0dF9jb2xzW1ZURVJNXSA8IDAgfHwgdHRfcm93c1tWVEVSTV0gPCAwKQorICAg ICAgdHRnd3NpeigpOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRyeSB0byBnZXQgbGF0ZXN0 IHNpemUgKi8KKyNlbmRpZiAvKiBDS19UVEdXU0laICovCisgICAgcHJpbnRmKCIgJTE5czogJS0x M2QgICUxM3M6ICUtMTVkXG4iLCJIZWlnaHQiLHR0X3Jvd3NbVlRFUk1dLAorICAgICAgICAgICAi V2lkdGgiLHR0X2NvbHNbVlRFUk1dKTsKKyAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykg eyBpZiAoIWFza21vcmUoKSkgcmV0dXJuOyBlbHNlIGxpbmVzID0gMDsgfQorI2lmZGVmIEtVSQor ICAgIHByaW50ZigiICUxOXM6ICUtMTJmICAlMTRzOiAlLTE1ZFxuIiwiTGluZSBzcGFjaW5nIix0 dF9saW5lc3BhY2luZ1tWVEVSTV0sCisgICAgICAgICAgICJEaXNwbGF5IEhlaWdodCIsVnNjcm5H ZXREaXNwbGF5SGVpZ2h0KFZURVJNKSk7CisgICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMp IHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybjsgZWxzZSBsaW5lcyA9IDA7IH0KKyNlbmRpZiAvKiBL VUkgKi8KKyAgICBwcmludGYoIiAlMTlzOiAlLTEzcyAgJTEzczogJWQgbGluZXNcbiIsIlJvbGwt bW9kZSIsCisgICAgICAgICAgdHRfcm9sbFtWVEVSTV0/Imluc2VydCI6Im92ZXJ3cml0ZSIsIlNj cm9sbGJhY2siLCB0dF9zY3JzaXplW1ZURVJNXSk7CisgICAgaWYgKCsrbGluZXMgPiBjbWRfcm93 cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybjsgZWxzZSBsaW5lcyA9IDA7IH0KKworICAg IGlmICh1cGRtb2RlID09IHR0X3VwZG1vZGUpCisgICAgICBpZiAodXBkbW9kZSA9PSBUVFVfRkFT VCkKKyAgICAgICAgcyA9ICJmYXN0IChmYXN0KSI7CisgICAgICBlbHNlCisgICAgICAgIHMgPSAi c21vb3RoIChzbW9vdGgpIjsKKyAgICBlbHNlCisgICAgICBpZiAodXBkbW9kZSA9PSBUVFVfRkFT VCkKKyAgICAgICAgcyA9ICJmYXN0IChzbW9vdGgpIjsKKyAgICAgIGVsc2UKKyAgICAgICAgcyA9 ICJzbW9vdGggKGZhc3QpIjsKKworICAgIHByaW50ZigiICUxOXM6ICUtMTNzICAlMTNzOiAlZCBt c1xuIiwiU2NyZWVuLXVwZGF0ZTogbW9kZSIscywKKyAgICAgICAgICAgImludGVydmFsIix0dF91 cGRhdGUpOworICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgp KSByZXR1cm47IGVsc2UgbGluZXMgPSAwOyB9CisgICAgcHJpbnRmKCIgJTE5czogJS0xM3MgICUx M3M6ICUtMTVzXG4iLAorICAgICAgICAgICAiU2NyZWVuLW9wdGltaXphdGlvbiIsc2hvd29mZih0 dF9kaWZmX3VwZCksCisgICAgICAgICAgICJTdGF0dXMgbGluZSIsc2hvd29mZih0dF9zdGF0dXNb VlRFUk1dKSk7CisgICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3Jl KCkpIHJldHVybjsgZWxzZSBsaW5lcyA9IDA7IH0KKyAgICBwcmludGYoIiAlMTlzOiAlLTEzcyAg JTEzczogJS0xNXNcbiIsIkRlYnVnIiwKKyAgICAgICAgICAgc2hvd29mZihkZWJzZXMpLCJTZXNz aW9uIGxvZyIsIHNlc2xvZz8gc2VzZmlsIDogIihub25lKSIgKTsKKyAgICBpZiAoKytsaW5lcyA+ IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuOyBlbHNlIGxpbmVzID0gMDsg fQorCisgICAgLyogRGlzcGxheSBjb2xvcnMgKHNob3VsZCBiZWNvbWUgU0hPVyBDT0xPUlMpICov CisgICAgeworICAgICAgICBVU0hPUlQgcm93LCBjb2w7CisgICAgICAgIGNoYXIgKiBjb2xvcnNb MTZdID0geworICAgICAgICAgICAgImJsYWNrIiwiYmx1ZSIsImdyZWVuIiwiY3lhbiIsInJlZCIs Im1hZ2VudGEiLCJicm93biIsImxncmF5IiwKKyAgICAgICAgICAgICJkZ3JheSIsImxibHVlIiwi bGdyZWVuIiwibGN5YW4iLCJscmVkIiwibG1hZ2VudCIsInllbGxvdyIsIndoaXRlIgorICAgICAg ICB9OworICAgICAgICBwcmludGYoIlxuIik7CisgICAgICAgIGlmICgrK2xpbmVzID4gY21kX3Jv d3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm47IGVsc2UgbGluZXMgPSAwOyB9CisKKyAg ICAgICAgcHJpbnRmKCIgQ29sb3I6Iik7CisjaWZuZGVmIE9ORVRFUk1VUEQKKyAgICAgICAgR2V0 Q3VyUG9zKCZyb3csICZjb2wpOworICAgICAgICBXcnRDaGFyU3RyQXR0KCJib3JkZXIiLCAgICA2 LCByb3csIDksICZjb2xvcmJvcmRlciApOworICAgICAgICBXcnRDaGFyU3RyQXR0KCJkZWJ1ZyIs ICAgICA1LCByb3csIDE3LCAmY29sb3JkZWJ1ZyApOworICAgICAgICBXcnRDaGFyU3RyQXR0KCJo ZWxwdGV4dCIsICA4LCByb3csIDI1LCAmY29sb3JoZWxwICk7CisgICAgICAgIFdydENoYXJTdHJB dHQoInJldmVyc2UiLCAgIDcsIHJvdywgMzQsICZjb2xvcnJldmVyc2UgKTsKKyAgICAgICAgV3J0 Q2hhclN0ckF0dCgic2VsZWN0IiwgICAgNiwgcm93LCA0MiwgJmNvbG9yc2VsZWN0ICk7CisgICAg ICAgIFdydENoYXJTdHJBdHQoInN0YXR1cyIsICAgIDYsIHJvdywgNTAsICZjb2xvcnN0YXR1cyAp OworICAgICAgICBXcnRDaGFyU3RyQXR0KCJ0ZXJtaW5hbCIsICA4LCByb3csIDU4LCAmY29sb3Ju b3JtYWwgKTsKKyAgICAgICAgV3J0Q2hhclN0ckF0dCgidW5kZXJsaW5lIiwgOSwgcm93LCA2Nywg JmNvbG9ydW5kZXJsaW5lICk7CisjZW5kaWYgLyogT05FVEVSTVVQRCAqLworICAgICAgICByb3cg PSBWc2NybkdldEN1clBvcyhWQ01EKS0+eSsxOworICAgICAgICBWc2NybldydENoYXJTdHJBdHQo VkNNRCwgImJvcmRlciIsICAgIDYsIHJvdywgOSwgJmNvbG9yYm9yZGVyICk7CisgICAgICAgIFZz Y3JuV3J0Q2hhclN0ckF0dChWQ01ELCAiZGVidWciLCAgICAgNSwgcm93LCAxNywgJmNvbG9yZGVi dWcgKTsKKyAgICAgICAgVnNjcm5XcnRDaGFyU3RyQXR0KFZDTUQsICJoZWxwdGV4dCIsICA4LCBy b3csIDI1LCAmY29sb3JoZWxwICk7CisgICAgICAgIFZzY3JuV3J0Q2hhclN0ckF0dChWQ01ELCAi cmV2ZXJzZSIsICAgNywgcm93LCAzNCwgJmNvbG9ycmV2ZXJzZSApOworICAgICAgICBWc2Nybldy dENoYXJTdHJBdHQoVkNNRCwgInNlbGVjdCIsICAgIDYsIHJvdywgNDIsICZjb2xvcnNlbGVjdCAp OworICAgICAgICBWc2NybldydENoYXJTdHJBdHQoVkNNRCwgInN0YXR1cyIsICAgIDYsIHJvdywg NTAsICZjb2xvcnN0YXR1cyApOworICAgICAgICBWc2NybldydENoYXJTdHJBdHQoVkNNRCwgInRl cm1pbmFsIiwgIDgsIHJvdywgNTgsICZjb2xvcm5vcm1hbCApOworICAgICAgICBWc2NybldydENo YXJTdHJBdHQoVkNNRCwgInVuZGVybGluZSIsICA5LCByb3csIDY3LCAmY29sb3J1bmRlcmxpbmUg KTsKKyAgICAgICAgcHJpbnRmKCJcbiIpOworICAgICAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dz IC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuOyBlbHNlIGxpbmVzID0gMDsgfQorCisgICAg ICAgIC8qIEZvcmVncm91bmQgY29sb3IgbmFtZXMgKi8KKyAgICAgICAgcHJpbnRmKCIlNnM6ICUt OHMlLThzJS05cyUtOHMlLThzJS04cyUtOXMlLTlzXG4iLCJmb3JlIiwKKyAgICAgICAgICAgICAg ICAiIiwKKyAgICAgICAgICAgICAgICBjb2xvcnNbY29sb3JkZWJ1ZyYweDBGXSwKKyAgICAgICAg ICAgICAgICBjb2xvcnNbY29sb3JoZWxwJjB4MEZdLAorICAgICAgICAgICAgICAgIGNvbG9yc1tj b2xvcnJldmVyc2UmMHgwRl0sCisgICAgICAgICAgICAgICAgY29sb3JzW2NvbG9yc2VsZWN0JjB4 MEZdLAorICAgICAgICAgICAgICAgIGNvbG9yc1tjb2xvcnN0YXR1cyYweDBGXSwKKyAgICAgICAg ICAgICAgICBjb2xvcnNbY29sb3Jub3JtYWwmMHgwRl0sCisgICAgICAgICAgICAgICAgY29sb3Jz W2NvbG9ydW5kZXJsaW5lJjB4MEZdKTsKKyAgICAgICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAt IDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybjsgZWxzZSBsaW5lcyA9IDA7IH0KKworICAgICAg ICAvKiBCYWNrZ3JvdW5kIGNvbG9yIG5hbWVzICovCisgICAgICAgIHByaW50ZigiJTZzOiAlLThz JS04cyUtOXMlLThzJS04cyUtOHMlLTlzJS05c1xuIiwiYmFjayIsCisgICAgICAgICAgICAgICAg Y29sb3JzW2NvbG9yYm9yZGVyXSwKKyAgICAgICAgICAgICAgICBjb2xvcnNbY29sb3JkZWJ1Zz4+ NF0sCisgICAgICAgICAgICAgICAgY29sb3JzW2NvbG9yaGVscD4+NF0sCisgICAgICAgICAgICAg ICAgY29sb3JzW2NvbG9ycmV2ZXJzZT4+NF0sCisgICAgICAgICAgICAgICAgY29sb3JzW2NvbG9y c2VsZWN0Pj40XSwKKyAgICAgICAgICAgICAgICBjb2xvcnNbY29sb3JzdGF0dXM+PjRdLAorICAg ICAgICAgICAgICAgIGNvbG9yc1tjb2xvcm5vcm1hbD4+NF0sCisgICAgICAgICAgICAgICAgY29s b3JzW2NvbG9ydW5kZXJsaW5lPj40XSApOworICAgICAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dz IC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuOyBlbHNlIGxpbmVzID0gMDsgfQorICAgICAg ICBwcmludGYoIlxuIik7CisgICAgICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlm ICghYXNrbW9yZSgpKSByZXR1cm47IGVsc2UgbGluZXMgPSAwOyB9CisgICAgICAgIHByaW50Zigi IENvbG9yOiIpOworI2lmbmRlZiBPTkVURVJNVVBECisgICAgICAgIEdldEN1clBvcygmcm93LCAm Y29sKTsKKyAgICAgICAgV3J0Q2hhclN0ckF0dCgiZ3JhcGhpYyIsICAgNywgcm93LCA5LCAmY29s b3JncmFwaGljICk7CisgICAgICAgIFdydENoYXJTdHJBdHQoImNvbW1hbmQiLCAgIDcsIHJvdywg MTcsICZjb2xvcmNtZCApOworICAgICAgICBXcnRDaGFyU3RyQXR0KCJpdGFsaWMiLCAgICA2LCBy b3csIDI2LCAmY29sb3JpdGFsaWMgKTsKKyNlbmRpZiAvKiBPTkVURVJNVVBEICovCisgICAgICAg IHJvdyA9IFZzY3JuR2V0Q3VyUG9zKFZDTUQpLT55KzE7CisgICAgICAgIFZzY3JuV3J0Q2hhclN0 ckF0dChWQ01ELCAiZ3JhcGhpYyIsICAgNywgcm93LCA5LCAgJmNvbG9yZ3JhcGhpYyApOworICAg ICAgICBWc2NybldydENoYXJTdHJBdHQoVkNNRCwgImNvbW1hbmQiLCAgIDcsIHJvdywgMTcsICZj b2xvcmNtZCApOworICAgICAgICBWc2NybldydENoYXJTdHJBdHQoVkNNRCwgIml0YWxpYyIsICAg IDYsIHJvdywgMjYsICZjb2xvcml0YWxpYyApOworICAgICAgICBwcmludGYoIlxuIik7CisgICAg ICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm47 IGVsc2UgbGluZXMgPSAwOyB9CisKKyAgICAgICAgLyogRm9yZWdyb3VuZCBjb2xvciBuYW1lcyAq LworICAgICAgICBwcmludGYoIiU2czogJS04cyUtOHMlLThzXG4iLCJmb3JlIiwKKyAgICAgICAg ICAgICAgICBjb2xvcnNbY29sb3JncmFwaGljJjB4MEZdLAorICAgICAgICAgICAgICAgIGNvbG9y c1tjb2xvcmNtZCYweDBGXSwKKyAgICAgICAgICAgICAgICBjb2xvcnNbY29sb3JpdGFsaWMmMHgw Rl0pOworICAgICAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUo KSkgcmV0dXJuOyBlbHNlIGxpbmVzID0gMDsgfQorCisgICAgICAgIC8qIEJhY2tncm91bmQgY29s b3IgbmFtZXMgKi8KKyAgICAgICAgcHJpbnRmKCIlNnM6ICUtOHMlLThzJS04c1xuIiwiYmFjayIs CisgICAgICAgICAgICAgICAgY29sb3JzW2NvbG9yZ3JhcGhpYz4+NF0sCisgICAgICAgICAgICAg ICAgY29sb3JzW2NvbG9yY21kPj40XSwKKyAgICAgICAgICAgICAgICBjb2xvcnNbY29sb3JpdGFs aWM+PjRdKTsKKyAgICAgICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2tt b3JlKCkpIHJldHVybjsgZWxzZSBsaW5lcyA9IDA7IH0KKyAgICB9CisgICAgcHJpbnRmKCJcbiIp OworICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1 cm47IGVsc2UgbGluZXMgPSAwOyB9CisgICAgeworICAgICAgICBleHRlcm4gaW50IHRydWVibGlu aywgdHJ1ZWRpbSwgdHJ1ZXJldmVyc2UsIHRydWV1bmRlcmxpbmUsIHRydWVpdGFsaWM7CisgICAg ICAgIHByaW50ZigKKwkgICAgIiBBdHRyaWJ1dGU6ICBcCitibGluazogJS0zcyAgZGltOiAlLTNz ICBpdGFsaWM6ICUtM3MgIHJldmVyc2U6ICUtM3MgIHVuZGVybGluZTogJS0zc1xuIiwKKwkgICAg dHJ1ZWJsaW5rPyJvbiI6Im9mZiIsIHRydWVkaW0/Im9uIjoib2ZmIiwgdHJ1ZWl0YWxpYz8ib24i OiJvZmYiLCAKKwkgICAgdHJ1ZXJldmVyc2U/Im9uIjoib2ZmIiwgdHJ1ZXVuZGVybGluZT8ib24i OiJvZmYiKTsKKyAgICAgICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2tt b3JlKCkpIHJldHVybjsgZWxzZSBsaW5lcyA9IDA7IH0KKyAgICB9CisgICAgeworICAgICAgICBl eHRlcm4gdnRhdHRyaWIgV1BhdHRyaWI7CisgICAgICAgIHByaW50ZigiIEFTQ0lJIFByb3RlY3Rl ZCBjaGFyczogJXMlcyVzJXMlcyVzJXNcbiIsCisgICAgICAgICAgICAgICAgV1BhdHRyaWIuYmxp bmtpbmc/ImJsaW5rICI6IiIsCisgICAgICAgICAgICAgICAgV1BhdHRyaWIuaXRhbGljPyJpdGFs aWMgIjoiIiwKKyAgICAgICAgICAgICAgICBXUGF0dHJpYi5yZXZlcnNlZD8icmV2ZXJzZSAiOiIi LAorICAgICAgICAgICAgICAgIFdQYXR0cmliLnVuZGVybGluZWQ/InVuZGVybGluZSAiOiIiLAor ICAgICAgICAgICAgICAgIFdQYXR0cmliLmJvbGQ/ImJvbGQgIjoiIiwKKyAgICAgICAgICAgICAg ICBXUGF0dHJpYi5kaW0/ImRpbSAiOiIiLAorICAgICAgICAgICAgICAgIFdQYXR0cmliLmludmlz aWJsZT8iaW52aXNpYmxlICI6IiIpOworICAgICAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0g MykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuOyBlbHNlIGxpbmVzID0gMDsgfQorICAgIH0KKwor ICAgIHByaW50ZigiXG4iKTsKKyAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAo IWFza21vcmUoKSkgcmV0dXJuOyBlbHNlIGxpbmVzID0gMDsgfQorICAgIChWT0lEKSBzaG9lc2Mo ZXNjYXBlKTsKKyAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUo KSkgcmV0dXJuOyBlbHNlIGxpbmVzID0gMDsgfQorICAgIHByaW50ZigiIFNlZSBTSE9XIENIQVJB Q1RFUi1TRVRTIGZvciBjaGFyYWN0ZXItc2V0IGluZm9cbiIpOworICAgIGlmICgrK2xpbmVzID4g Y21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm47IGVsc2UgbGluZXMgPSAwOyB9 CisKKyNlbHNlIC8qIE9TMiAqLyAgIC8qIEJlZ2lubmluZyBvZiBuZXcgbm9uLU9TMiB2ZXJzaW9u ICovCisKKyAgICBwcmludGYoIlxuIik7CisgICAgcHJpbnRmKCJUZXJtaW5hbCBwYXJhbWV0ZXJz OlxuIik7CisgICAgcHJpbnRmKCIgJTE5czogJTFkJS0xMnMgICUxM3M6ICUxZCUtMTRzXG4iLAor ICAgICAgICAgICAiQnl0ZXNpemU6IENvbW1hbmQiLAorICAgICAgICAgICAoY21kbXNrID09IDAz NzcpID8gOCA6IDcsCisgICAgICAgICAgICIgYml0cyIsIlRlcm1pbmFsIiwKKyAgICAgICAgICAg KGNtYXNrID09IDAzNzcpID8gOCA6IDcsIiBiaXRzIik7CisgICAgcyA9IGdldGVudigiVEVSTSIp OworI2lmZGVmIFhQUklOVAorICAgIHByaW50ZigiICUxOXM6ICUtMTNzICAlMTNzOiAlLTE1c1xu IiwKKyAgICAgICAgICAgIlR5cGUiLAorICAgICAgICAgICBzID8gcyA6ICIodW5rbm93bikiLAor ICAgICAgICAgICAiUHJpbnQiLAorICAgICAgICAgICBzaG93b2ZmKHR0X3ByaW50KQorICAgICAg ICAgICApOworI2Vsc2UKKyAgICBwcmludGYoIiAlMTlzOiAlLTEzc1xuIiwiVHlwZSIsIHMgPyBz IDogIih1bmtub3duKSIpOworI2VuZGlmIC8qIFhQUklOVCAqLworICAgIHByaW50ZigiICUxOXM6 ICUtMTNzICAlMTNzOiAlLTE1c1xuIiwiRWNobyIsCisgICAgICAgICAgIGR1cGxleCA/ICJsb2Nh bCIgOiAicmVtb3RlIiwiTG9ja2luZy1zaGlmdCIsc2hvd29mZihzb3NpKSk7CisgICAgcHJpbnRm KCIgJTE5czogJS0xM3MgICUxM3M6ICUtMTVzXG4iLCJOZXdsaW5lLW1vZGUiLAorICAgICAgICAg ICBzaG93b2ZmKHRubG0pLCJDci1kaXNwbGF5Iix0dF9jcmQgPyAiY3JsZiIgOiAibm9ybWFsIik7 CisKKyNpZmRlZiBDS19BUEMKKyAgICBpZiAoYXBjc3RhdHVzID09IEFQQ19PTikgcyA9ICJvbiI7 CisgICAgZWxzZSBpZiAoYXBjc3RhdHVzID09IEFQQ19PRkYpIHMgPSAib2ZmIjsKKyAgICBlbHNl IGlmIChhcGNzdGF0dXMgPT0gKEFQQ19PTnxBUENfVU5DSCkpIHMgPSAidW5jaGVja2VkIjsKKyAg ICBlbHNlIGlmIChhcGNzdGF0dXMgPT0gKEFQQ19PTnxBUENfTk9JTlApKSBzID0gIm5vLWlucHV0 IjsKKyAgICBlbHNlIGlmIChhcGNzdGF0dXMgPT0gKEFQQ19PTnxBUENfVU5DSHxBUENfTk9JTlAp KQorICAgICAgcyA9ICJ1bmNoZWNrZWQtbm8taW5wdXQiOworICAgIHByaW50ZigiICUxOXM6ICUt MTNzICAlMTNzOiAlLTE1c1xuIiwKKyAgICAgICAgICAgIkFQQyIsIHMsCisjaWZkZWYgQ0tfQVVU T0RMCisgICAgICAgICAgICJBdXRvZG93bmxvYWQiLCBhdXRvZGwgPworICAgICAgICAgICAoYWRs X2VyciA/ICJvbiwgZXJyb3Igc3RvcCIgOiAib24sIGVycm9yIGNvbnRpbnVlIikgOiAib2ZmIgor I2Vsc2UKKyAgICAgICAgICAgIiIsIiIKKyNlbmRpZiAvKiBDS19BVVRPREwgKi8KKyAgICAgICAg ICAgKTsKKyNlbmRpZiAvKiBDS19BUEMgKi8KKworI2lmZGVmIENLX1RUR1dTSVogICAgICAgICAg ICAgICAgICAgICAgIC8qIENvbnNvbGUgdGVybWluYWwgc2NyZWVuIHNpemUgKi8KKyAgICB0dGd3 c2l6KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUcnkgdG8gZ2V0IGxhdGVzdCBzaXpl ICovCisgICAgcHJpbnRmKCIgJTE5czogJS0xM2QgICUxM3M6ICUtMTVkXG4iLCJIZWlnaHQiLHR0 X3Jvd3MsICJXaWR0aCIsIHR0X2NvbHMpOworI2VuZGlmIC8qIENLX1RUR1dTSVogKi8KKworICAg IHByaW50ZigiICUxOXM6ICUtMTNzICAlMTNzOiAlLTE1c1xuIiwiRGVidWciLAorICAgICAgICAg ICBzaG93b2ZmKGRlYnNlcyksIlNlc3Npb24gbG9nIiwgc2VzbG9nPyBzZXNmaWwgOiAiKG5vbmUp IiApOworCisjaWZkZWYgQ0tUSURMRQorICAgIHByaW50ZigiICUxOXM6ICUtMTNkICAlMTNzOiAl c1xuIiwiSWRsZS10aW1lb3V0Iix0dF9pZGxlbGltaXQsCisgICAgICAgICAgICJJZGxlLWFjdGlv biIsIGdldGlhY3QoKSk7CisjZW5kaWYgLyogQ0tUSURMRSAqLworCisgICAgcHJpbnRmKCIgJTE5 czogJS0xM3MgICIsIkxmLWRpc3BsYXkiLCB0dF9sZmQgPyAiY3JsZiIgOiAibm9ybWFsIik7Cisj aWZkZWYgVU5JWAorI2lmbmRlZiBOT0pDCisgICAgcHJpbnRmKCIlMTNzOiAlLTE1cyIsIlN1c3Bl bmQiLCBzaG93b2ZmKHhzdXNwZW5kKSk7CisjZW5kaWYgLyogTk9KQyAqLworI2VuZGlmIC8qIFVO SVggKi8KKyAgICBwcmludGYoIlxuIik7CisKKyNpZm5kZWYgTk9UUklHR0VSCisgICAgcHJpbnRm KCIgJTE5czogJS0xM3NcbiIsIlRyaWdnZXIiLAorICAgICAgICAgICB0dF90cmlnZ2VyWzBdID8g dHRfdHJpZ2dlclswXSA6ICIobm9uZSkiKTsKKyNlbmRpZiAvKiBOT1RSSUdHRVIgKi8KKyAgICBw cmludGYoIlxuIik7CisKKyAgICAoVk9JRCkgc2hvZXNjKGVzY2FwZSk7CisjaWZuZGVmIE5PQ1NF VFMKKyAgICBzaG90Y3ModGNzbCx0Y3NyKTsgICAgICAgICAgLyogU2hvdyB0ZXJtaW5hbCBjaGFy YWN0ZXIgc2V0cyAqLworI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKworI2VuZGlmIC8qIE9TMiAqLwor fQorCitWT0lECitzaG1kbWxpbigpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQnJp ZWZseSBzaG93IG1vZGVtICYgbGluZSAqLworI2lmbmRlZiBOT0RJQUwKKyNpZm5kZWYgTUlOSURJ QUwKKyNpZmRlZiBPTERUQkNPREUKKyAgICBleHRlcm4gaW50IHRibW9kZWw7CisgICAgX1BST1RP VFlQKCBjaGFyICogZ3RibW9kZWwsICh2b2lkKSApOworI2VuZGlmIC8qIE9MRFRCQ09ERSAqLwor I2VuZGlmIC8qIE1JTklESUFMICovCisjZW5kaWYgLyogTk9ESUFMICovCisgICAgaWYgKGxvY2Fs KQorI2lmZGVmIE9TMgorICAgICAgcHJpbnRmKCIgUG9ydDogJXMsIE1vZGVtIHR5cGU6ICIsdHRu YW1lKTsKKyNlbHNlCisgICAgICBwcmludGYoIiBMaW5lOiAlcywgTW9kZW0gdHlwZTogIix0dG5h bWUpOworI2VuZGlmIC8qIE9TMiAqLworICAgIGVsc2UKKyAgICAgIHByaW50ZigKKyNpZmRlZiBP UzIKKyIgQ29tbXVuaWNhdGlvbiBkZXZpY2Ugbm90IHlldCBzZWxlY3RlZCB3aXRoIFNFVCBQT1JU XG4gTW9kZW0gdHlwZTogIgorI2Vsc2UKKyIgQ29tbXVuaWNhdGlvbiBkZXZpY2Ugbm90IHlldCBz ZWxlY3RlZCB3aXRoIFNFVCBMSU5FXG4gTW9kZW0gdHlwZTogIgorI2VuZGlmIC8qIE9TMiAqLwor ICAgICAgICAgICAgICk7CisjaWZuZGVmIE5PRElBTAorICAgIHByaW50ZigiJXMiLGdtZG10eXAo KSk7CisjaWZuZGVmIE1JTklESUFMCisjaWZkZWYgT0xEVEJDT0RFCisgICAgaWYgKHRibW9kZWwp IHByaW50ZigiICglcykiLGd0Ym1vZGVsKCkpOyAvKiBUZWxlYml0IG1vZGVsIGluZm8gKi8KKyNl bmRpZiAvKiBPTERUQkNPREUgKi8KKyNlbmRpZiAvKiBNSU5JRElBTCAqLworI2Vsc2UKKyAgICBw cmludGYoIihkaXNhYmxlZCkiKTsKKyNlbmRpZiAvKiBOT0RJQUwgKi8KK30KKworI2lmZGVmIENL X1RBUEkKK3ZvaWQKK3Nob3RhcGkoaW50IG9wdGlvbikgeworICAgIGludCByYz0wLGsgOworICAg IGNoYXIgKnM9TlVMTDsKKyAgICBMUERFVkNGRyAgICAgICAgbHBEZXZDZmcgPSBOVUxMOworICAg IExQQ09NTUNPTkZJRyAgICBscENvbW1Db25maWcgPSBOVUxMOworICAgIExQTU9ERU1TRVRUSU5H UyBscE1vZGVtU2V0dGluZ3MgPSBOVUxMOworICAgIERDQiAqICAgICAgICAgICBscERDQiA9IE5V TEw7CisgICAgZXh0ZXJuIHN0cnVjdCBrZXl0YWIgKiB0YXBpbG9jdGFiOyAgLyogTWljcm9zb2Z0 IFRBUEkgTG9jYXRpb25zICovCisgICAgZXh0ZXJuIGludCBudGFwaWxvYzsKKyAgICBleHRlcm4g c3RydWN0IGtleXRhYiAqIHRhcGlsaW5ldGFiOyAvKiBNaWNyb3NvZnQgVEFQSSBMaW5lIERldmlj ZXMgKi8KKyAgICBleHRlcm4gaW50IG50YXBpbGluZTsKKyAgICBleHRlcm4gaW50IHR0dGFwaTsg ICAgICAgICAgICAgICAgICAvKiBUQVBJIGluIHVzZSAqLworICAgIGV4dGVybiBpbnQgdGFwaXBh c3M7ICAgICAgICAgICAgICAgIC8qIFRBUEkgUGFzc3Rocm91Z2ggbW9kZSAqLworICAgIGV4dGVy biBpbnQgdGFwaWNvbnY7ICAgICAgICAgICAgICAgIC8qIFRBUEkgQ29udmVyc2lvbiBtb2RlICov CisgICAgZXh0ZXJuIGludCB0YXBpbGlnaHRzOworICAgIGV4dGVybiBpbnQgdGFwaXByZXRlcm07 CisgICAgZXh0ZXJuIGludCB0YXBpcG9zdHRlcm07CisgICAgZXh0ZXJuIGludCB0YXBpbWFudWFs OworICAgIGV4dGVybiBpbnQgdGFwaWluYWN0aXZpdHk7CisgICAgZXh0ZXJuIGludCB0YXBpYm9u ZzsKKyAgICBleHRlcm4gaW50IHRhcGl1c2VjZmc7CisgICAgZXh0ZXJuIGNoYXIgdGFwaWxvY1td OworICAgIGV4dGVybiBpbnQgdGFwaWxvY2lkOworICAgIGV4dGVybiBpbnQgVEFQSUF2YWlsOwor CisgICAgaWYgKCFUQVBJQXZhaWwpIHsKKyAgICAgICAgcHJpbnRmKCJUQVBJIFN1cHBvcnQgbm90 IGVuYWJsZWRcclxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgc3dpdGNoIChvcHRp b24pIHsKKyAgICAgIGNhc2UgMDoKKyAgICAgICAgcHJpbnRmKCJUQVBJIFNldHRpbmdzOlxuIik7 CisgICAgICAgIHByaW50ZigiICBMaW5lOiAgICAgICAgICAgICAgICAgICAgICAlc1xuIiwKKyAg ICAgICAgICAgICAgIHR0dGFwaSA/IHR0bmFtZSA6ICIobm9uZSBpbiB1c2UpIik7CisKKyAgICAg ICAgY2t0YXBpQnVpbGRMb2NhdGlvblRhYmxlKCZ0YXBpbG9jdGFiLCAmbnRhcGlsb2MpOworICAg ICAgICBpZiAodGFwaWxvY2lkID09IC0xKQorICAgICAgICAgIHRhcGlsb2NpZCA9IGNrdGFwaUdl dEN1cnJlbnRMb2NhdGlvbklEKCk7CisKKyAgICAgICAgLyogRmluZCB0aGUgY3VycmVudCB0YXBp bG9jIGVudHJ5ICovCisgICAgICAgIC8qIGFuZCB1c2UgaXQgYXMgdGhlIGRlZmF1bHQuICovCisg ICAgICAgIGZvciAoayA9IDA7IGsgPCBudGFwaWxvYzsgaysrKSB7CisgICAgICAgICAgICBpZiAo dGFwaWxvY3RhYltrXS5rd3ZhbCA9PSB0YXBpbG9jaWQpCisgICAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICB9CisgICAgICAgIGlmIChrID49IDAgJiYgayA8IG50YXBpbG9jKQorICAgICAgICAg IHMgPSB0YXBpbG9jdGFiW2tdLmt3ZDsKKyAgICAgICAgZWxzZQorICAgICAgICAgIHMgPSAiKHVu a25vd24pIjsKKyAgICAgICAgcHJpbnRmKCIgIExvY2F0aW9uOiAgICAgICAgICAgICAgICAgICVz XG4iLHMpOworICAgICAgICBwcmludGYoIiAgTW9kZW0tZGlhbGluZzogICAgICAgICAgICAgJXNc biIsdGFwaXBhc3M/Im9mZiI6Im9uIik7CisgICAgICAgIHByaW50ZigiICBQaG9uZS1udW1iZXIt Y29udmVyc2lvbnM6ICAlc1xuIiwKKyAgICAgICAgICAgICAgICB0YXBpY29udj09Q0tfT04/Im9u Ijp0YXBpY29udj09Q0tfQVVUTz8iYXV0byI6Im9mZiIpOworICAgICAgICBwcmludGYoIiAgTW9k ZW0tbGlnaHRzOiAgICAgICAgICAgICAgJXMgJXNcbiIsdGFwaWxpZ2h0cz8ib24gIjoib2ZmIiwK KyAgICAgICAgICAgICAgICB0YXBpcGFzcz8iKG4vYSkiOiIiKTsKKyAgICAgICAgcHJpbnRmKCIg IFByZWRpYWwtdGVybWluYWw6ICAgICAgICAgICVzICVzXG4iLHRhcGlwcmV0ZXJtPyJvbiAiOiJv ZmYiLAorICAgICAgICAgICAgICAgIHRhcGlwYXNzPyIobi9hKSI6IiIpOworICAgICAgICBwcmlu dGYoIiAgUG9zdGRpYWwtdGVybWluYWw6ICAgICAgICAgJXMgJXNcbiIsdGFwaXBvc3R0ZXJtPyJv biAiOiJvZmYiLAorICAgICAgICAgICAgICAgIHRhcGlwYXNzPyIobi9hKSI6IiIpOworICAgICAg ICBwcmludGYoIiAgTWFudWFsLWRpYWw6ICAgICAgICAgICAgICAgJXMgJXNcbiIsdGFwaW1hbnVh bD8ib24gIjoib2ZmIiwKKyAgICAgICAgICAgICAgICB0YXBpcGFzcz8iKG4vYSkiOiIiKTsKKyAg ICAgICAgcHJpbnRmKCIgIEluYWN0aXZpdHktdGltZW91dDogICAgICAgICVkIHNlY29uZHMgJXNc biIsdGFwaWluYWN0aXZpdHksCisgICAgICAgICAgICAgICAgdGFwaXBhc3M/IihuL2EpIjoiIik7 CisgICAgICAgIHByaW50ZigiICBXYWl0LWZvci1ib25nOiAgICAgICAgICAgICAlZCBzZWNvbmRz ICVzXG4iLHRhcGlib25nLAorICAgICAgICAgICAgICAgIHRhcGlwYXNzPyIobi9hKSI6IiIpOwor ICAgICAgICBwcmludGYoIiAgVXNlLXdpbmRvd3MtY29uZmlndXJhdGlvbjogJXMgJXNcbiIsCisg ICAgICAgICAgICAgICAgdGFwaXVzZWNmZz8ib24gIjoib2ZmIiwgdGFwaXBhc3M/IihuL2EpIjoi Iik7CisgICAgICAgIHByaW50ZigiXG4iKTsKKworI2lmZGVmIEJFVEFURVNUCisgICAgICAgIGlm ICh0YXBpcGFzcykgeworcHJpbnRmKCJLLTk1IHVzZXMgdGhlIFRBUEkgTGluZSBpbiBhbiBleGNs dXNpdmUgbW9kZS4gIE90aGVyIGFwcGxpY2F0aW9uc1xuIik7CitwcmludGYoIm1heSBvcGVuIHRo ZSBkZXZpY2UgYnV0IG1heSBub3QgcGxhY2UgY2FsbHMgbm9yIGFuc3dlciBjYWxscy5cbiIpOwor cHJpbnRmKCJEaWFsaW5nIGlzIHBlcmZvcm1lZCB1c2luZyB0aGUgSy05NSBkaWFsaW5nIHByb2Nl ZHVyZXMuICBTRVQgTU9ERU1cbiIpOworcHJpbnRmKCJUWVBFIFRBUEkgYWZ0ZXIgdGhlIFNFVCBU QVBJIExJTkUgY29tbWFuZCB0byBhY3RpdmF0ZSB0aGUgbW9kZW1cbiIpOworcHJpbnRmKCJkZWZp bml0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUgYWN0aXZlIFRBUEkgTElORSBkZXZpY2UuXG5cbiIp OworCisgICAgICAgIH0gZWxzZSB7CisKK3ByaW50ZigiSy05NSB1c2VzIHRoZSBUQVBJIExpbmUg aW4gYSBjb29wZXJhdGl2ZSBtb2RlLiAgT3RoZXIgYXBwbGljYXRpb25zXG4iKTsKK3ByaW50Zigi bWF5IG9wZW4gdGhlIGRldmljZSwgcGxhY2UgYW5kIGFuc3dlciBjYWxscy4gIERpYWxpbmcgaXMg cGVyZm9ybWVkXG4iKTsKK3ByaW50ZigiYnkgVEFQSS4gIEstOTUgU0VUIE1PREVNIGNvbW1hbmRz IGFyZSBub3QgdXNlZC5cblxuIik7CisgICAgICAgIH0KKworICAgICAgICBpZiAodGFwaWNvbnYg PT0gQ0tfT04gfHwKKyAgICAgICAgICAgIHRhcGljb252ID09IENLX0FVVE8gJiYgIXRhcGlwYXNz KSB7CitwcmludGYoCisiUGhvbmUgbnVtYmVycyBhcmUgY29udmVydGVkIGZyb20gY2Fub25pY2Fs IHRvIGRpYWxhYmxlIGZvcm0gYnkgVEFQSVxuIik7CitwcmludGYoInVzaW5nIHRoZSBkaWFsaW5n IHJ1bGVzIHNwZWNpZmllZCBpbiB0aGUgVEFQSSBEaWFsaW5nIFByb3BlcnRpZXNcbiIpOworcHJp bnRmKCJkaWFsb2cuXG5cbiIpOworCisgICAgICAgIH0gZWxzZSB7CisKK3ByaW50ZigKKyJQaG9u ZSBudW1iZXJzIGFyZSBjb252ZXJ0ZWQgZnJvbSBjYW5vbmljYWwgdG8gZGlhbGFibGUgZm9ybSBi eSBLLTk1XG4iKTsKK3ByaW50ZigKKyJ1c2luZyB0aGUgZGlhbGluZyBydWxlcyBzcGVjaWZpZWQg d2l0aCB0aGUgU0VUIERJQUwgY29tbWFuZHMuICBUQVBJXG4iKTsKK3ByaW50ZigKKyJEaWFsaW5n IFByb3BlcnRpZXMgYXJlIGltcG9ydGVkIGF1dG9tYXRpY2x5IHVwb24gc3RhcnR1cCBhbmQgd2hl bmV2ZXJcbiIpOworcHJpbnRmKCJ0aGUgVEFQSSBEaWFsaW5nIFByb3BlcnRpZXMgYXJlIGFsdGVy ZWQgb3Igd2hlbiB0aGUgVEFQSSBMb2NhdGlvblxuIik7CitwcmludGYoImlzIGNoYW5nZWQuXG5c biIpOworICAgICAgICB9CisjZW5kaWYgLyogQkVUQVRFU1QgKi8KKworICAgICAgICBpZiAodGFw aXBhc3MpIHsKKyAgICAgICAgICAgIHByaW50ZigiVHlwZSBTSE9XIE1PREVNIHRvIHNlZSBNT0RF TSBjb25maWd1cmF0aW9uLlxuIik7CisgICAgICAgICAgICBpZiAodGFwaWNvbnYgPT0gQ0tfT04p CisgICAgICAgICAgICAgIHByaW50ZigiVHlwZSBTSE9XIERJQUwgdG8gc2VlIERJQUwtcmVsYXRl ZCBpdGVtcy5cbiIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKHRhcGljb252 ID09IENLX09OIHx8IHRhcGljb252ID09IENLX0FVVE8pCisgICAgICAgICAgICAgIHByaW50Zigi VHlwZSBTSE9XIERJQUwgdG8gc2VlIERJQUwtcmVsYXRlZCBpdGVtcy5cbiIpOworICAgICAgICB9 CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAxOgorICAgICAgICBja3RhcGlEaXNwbGF5VGFw aUxvY2F0aW9uSW5mbygpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgMjoKKyAgICAgICAg cmMgPSBja3RhcGlHZXRNb2RlbVNldHRpbmdzKCZscERldkNmZywmbHBNb2RlbVNldHRpbmdzLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZscENvbW1Db25maWcsJmxwRENC KTsKKyAgICAgICAgaWYgKHJjKSB7CisgICAgICAgICAgICBja3RhcGlEaXNwbGF5TW9kZW1TZXR0 aW5ncyhscERldkNmZyxscE1vZGVtU2V0dGluZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGxwQ29tbUNvbmZpZyxscERDQik7CisgICAgICAgIH0gZWxzZSB7Cisg ICAgICAgICAgICBwcmludGYoIj9VbmFibGUgdG8gcmV0cmlldmUgTW9kZW0gU2V0dGluZ3NcbiIp OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAzOiB7CisgICAgICAgICAg SEFORExFIGhNb2RlbSA9IEdldE1vZGVtSGFuZGxlRnJvbUxpbmUoKEhMSU5FKTApOworICAgICAg ICAgIGlmIChoTW9kZW0pCisgICAgICAgICAgICBEaXNwbGF5Q29tbVByb3BlcnRpZXMoaE1vZGVt KTsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBwcmludGYoIj9VbmFibGUgdG8gcmV0cmll dmUgYSB2YWxpZCBNb2RlbSBIYW5kbGVcbiIpOworICAgICAgICAgIENsb3NlSGFuZGxlKGhNb2Rl bSk7CisgICAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgfQorICAgIHByaW50ZigiXG4iKTsK K30KKyNlbmRpZiAvKiBDS19UQVBJICovCisjZW5kaWYgLyogTk9MT0NBTCAqLworCisjaWZkZWYg UEFUVEVSTlMKK3N0YXRpYyBWT0lECitzaG9wYXQoKSB7CisgICAgZXh0ZXJuIGNoYXIgKiBiaW5w YXR0ZXJuc1tdLCAqIHR4dHBhdHRlcm5zW107CisgICAgZXh0ZXJuIGludCBwYXR0ZXJucywgZmls ZXBlZWs7CisgICAgY2hhciAqKnAsICpzOworICAgIGludCBpLCBqLCBrLCBuLCBmbGFnLCB3aWR0 aDsKKyNpZmRlZiBDS19UVEdXU0laCisgICAgdHRnd3NpeigpOyAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogVHJ5IHRvIGdldCBsYXRlc3Qgc2l6ZSAqLworI2lmZGVmIE9TMgorICAgIHdpZHRo ID0gdHRfY29sc1tWQ01EXTsKKyNlbHNlIC8qIE9TMiAqLworICAgIHdpZHRoID0gdHRfY29sczsK KyNlbmRpZiAvKiBPUzIgKi8KKyAgICBpZiAod2lkdGggPCAxKQorI2VuZGlmIC8qIENLX1RUR1dT SVogKi8KKyAgICAgIHdpZHRoID0gODA7CisgICAgcHJpbnRmKCJcbiIpOworICAgIHByaW50Zigi IFNldCBmaWxlIHR5cGU6ICAgICAgICAgICAgJXNcbiIsZ2Ztb2RlKGJpbmFyeSwxKSk7CisgICAg cHJpbnRmKCIgU2V0IGZpbGUgcGF0dGVybnM6ICAgICAgICAlcyIsIHNob3dvb2EocGF0dGVybnMp KTsKKyNpZmRlZiBDS19MQUJFTEVECisgICAgaWYgKGJpbmFyeSA9PSBYWUZUX0wpCisgICAgICBw cmludGYoIiAoYnV0IFNFVCBGSUxFIFRZUEUgTEFCRUxFRCBvdmVycmlkZXMpXG4iKTsKKyAgICBl bHNlCisjZW5kaWYgLyogQ0tfTEFCRUxFRCAqLworI2lmZGVmIFZNUworICAgIGlmIChiaW5hcnkg PT0gWFlGVF9JKQorICAgICAgcHJpbnRmKCIgKGJ1dCBTRVQgRklMRSBUWVBFIElNQUdFIG92ZXJy aWRlcylcbiIpOworICAgIGVsc2UKKyNlbmRpZiAvKiBWTVMgKi8KKyAgICBpZiAoZmlsZXBlZWsp CisgICAgICBwcmludGYoIiAoYnV0IFNFVCBGSUxFIFNDQU4gT04gb3ZlcnJpZGVzKVxuIik7Cisg ICAgZWxzZQorICAgICAgcHJpbnRmKCJcbiIpOworICAgIHByaW50ZigiIE1heGltdW0gcGF0dGVy bnMgYWxsb3dlZDogJWRcbiIsIEZUUEFUVEVSTlMpOworICAgIGZvciAoayA9IDA7IGsgPCAyOyBr KyspIHsgICAgICAgICAgIC8qIEZvciBlYWNoIGtpbmQgb2YgcGF0dGVyICovCisgICAgICAgIHBy aW50ZigiXG4iKTsKKyAgICAgICAgaWYgKGsgPT0gMCkgeyAgICAgICAgICAgICAgICAgICAvKiBi aW5hcnkuLi4gKi8KKyAgICAgICAgICAgIHByaW50ZigiIEZpbGUgYmluYXJ5LXBhdHRlcm5zOiAi KTsKKyAgICAgICAgICAgIHAgPSBiaW5wYXR0ZXJuczsKKyAgICAgICAgfSBlbHNlIHsgICAgICAg ICAgICAgICAgICAgICAgICAvKiB0ZXh0Li4uICovCisgICAgICAgICAgICBwcmludGYoIiBGaWxl IHRleHQtcGF0dGVybnM6ICAgIik7CisgICAgICAgICAgICBwID0gdHh0cGF0dGVybnM7CisgICAg ICAgIH0KKyAgICAgICAgaWYgKCFwWzBdKSB7CisgICAgICAgICAgICBwcmludGYoIihub25lKVxu Iik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwcmludGYoIlxuICIpOworICAgICAg ICAgICAgbiA9IDI7CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgRlRQQVRURVJOUzsgaSsr KSB7IC8qIEZvciBlYWNoIHBhdHRlcm4gKi8KKyAgICAgICAgICAgICAgICBpZiAoIXBbaV0pICAg ICAgICAgICAgICAvKiBEb25lICovCisgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg ICAgICAgICBzID0gcFtpXTsgICAgICAgICAgICAgICAvKiBMb29rIGZvciBlbWJlZGRlZCBzcGFj ZSAqLworICAgICAgICAgICAgICAgIGZvciAoaiA9IDAsIGZsYWcgPSAxOyAqczsgcysrLCBqKysp IC8qIGFuZCBhbHNvIGdldCBsZW5ndGggKi8KKyAgICAgICAgICAgICAgICAgIGlmICgqcyA9PSBT UCkKKyAgICAgICAgICAgICAgICAgICAgZmxhZyA9IDM7CisgICAgICAgICAgICAgICAgbiArPSBq ICsgZmxhZzsgICAgICAgICAgLyogTGVuZ3RoIG9mIHRoaXMgbGluZSAqLworICAgICAgICAgICAg ICAgIGlmIChuID49IHdpZHRoIC0gMSkgeworICAgICAgICAgICAgICAgICAgICBwcmludGYoIlxu ICIpOworICAgICAgICAgICAgICAgICAgICBuID0gaisyOworICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgICBwcmludGYoZmxhZyA9PSAzID8gIiB7JXN9IiA6ICIgJXMiLCBwW2ldKTsK KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChuID4gMikKKyAgICAgICAgICAgICAgcHJp bnRmKCJcbiIpOworICAgICAgICB9CisgICAgfQorICAgIHByaW50ZigiXG4iKTsKK30KKyNlbmRp ZiAvKiBQQVRURVJOUyAqLworCisjaWZuZGVmIE5PU1BMCitzdGF0aWMgVk9JRAorc2hvb3V0cHV0 KCkgeworICAgIHByaW50ZigiIE91dHB1dCBwYWNpbmc6ICAgICAgICAgICVkIChtaWxsaXNlY29u ZHMpXG4iLHBhY2luZyk7CisgICAgcHJpbnRmKCIgT3V0cHV0IHNwZWNpYWwtZXNjYXBlczogJXNc biIsIHNob3dvZmYob3V0ZXNjKSk7Cit9CisKK3N0YXRpYyBWT0lECitzaG9pbnB1dCgpIHsKKyNp ZmRlZiBDS0ZMT0FUCisgICAgZXh0ZXJuIGNoYXIgKiBpbnBzY2FsZTsKKyNlbmRpZgkvKiBDS0ZM T0FUICovCisKKyNpZmRlZiBDS19BVVRPREwKKyAgICBwcmludGYoIiBJbnB1dCBhdXRvZG93bmxv YWQ6ICAgICAlc1xuIiwgc2hvd29mZihpbmF1dG9kbCkpOworI2VuZGlmIC8qIENLX0FVVE9ETCAq LworICAgIHByaW50ZigiIElucHV0IGNhbmNlbGxhdGlvbjogICAgICVzXG4iLCBzaG93b2ZmKGlu aW50cikpOworICAgIHByaW50ZigiIElucHV0IGNhc2U6ICAgICAgICAgICAgICVzXG4iLCBpbnBj YXNbY21kbHZsXSA/CisgICAgICAgICAgICJvYnNlcnZlIiA6ICJpZ25vcmUiKTsKKyAgICBwcmlu dGYoIiBJbnB1dCBidWZmZXItbGVuZ3RoOiAgICAlZFxuIiwgaW5idWZzaXplKTsKKyAgICBwcmlu dGYoIiBJbnB1dCBlY2hvOiAgICAgICAgICAgICAlc1xuIiwgc2hvd29mZihpbmVjaG8pKTsKKyAg ICBwcmludGYoIiBJbnB1dCBzaWxlbmNlOiAgICAgICAgICAlZCAoc2Vjb25kcylcbiIsIGluc2ls ZW5jZSk7CisjaWZkZWYgT1MyCisgICAgcHJpbnRmKCIgSW5wdXQgdGVybWluYWw6ICAgICAgICAg JXNcbiIsIHNob3dvZmYoaW50ZXJtKSk7CisjZW5kaWYgLyogT1MyICovCisgICAgcHJpbnRmKCIg SW5wdXQgdGltZW91dDogICAgICAgICAgJXNcbiIsIGludGltZVtjbWRsdmxdID8KKyAgICAgICAg ICAgInF1aXQiIDogInByb2NlZWQiKTsKKyNpZmRlZiBDS0ZMT0FUCisgICAgcHJpbnRmKCIgSW5w dXQgc2NhbGUtZmFjdG9yOiAgICAgJXNcbiIsIGlucHNjYWxlID8gaW5wc2NhbGUgOiAiMS4wIik7 CisjZW5kaWYJLyogQ0tGTE9BVCAqLworCisgICAgaWYgKGluc3RhdHVzIDwgMCkKKyAgICAgIHBy aW50ZigiIExhc3QgSU5QVVQ6ICAgICAgICAgICAgIC0xIChJTlBVVCBjb21tYW5kIG5vdCB5ZXQg Z2l2ZW4pXG4iKTsKKyAgICBlbHNlCisgICAgICBwcmludGYoIiBMYXN0IElOUFVUOiAgICAgICAg ICAgICAlZCAoJXMpXG4iLCBpbnN0YXR1cyxpX3RleHRbaW5zdGF0dXNdKTsKK30KKyNlbmRpZiAv KiBOT1NQTCAqLworCisjaWZuZGVmIE5PU1BMCitpbnQKK3Nob3dhcnJheSgpIHsKKyNpZmRlZiBD T01NRU5UCisgICAgY2hhciAqIHAsICogcSwgKiogYXA7CisgICAgaW50IGk7CisjZW5kaWYgLyog Q09NTUVOVCAqLworICAgIGNoYXIgKnM7IGludCB4ID0gMCwgeTsKKyAgICBpbnQgcmFuZ2VbMl07 CisKKyAgICBpZiAoKHkgPSBjbWZsZCgiQXJyYXkgbmFtZSIsIiIsJnMsTlVMTCkpIDwgMCkKKyAg ICAgIGlmICh5ICE9IC0zKQorICAgICAgICByZXR1cm4oeSk7CisgICAgY2tzdHJuY3B5KGxpbmUs cyxMSU5CVUZTSVopOworICAgIHMgPSBsaW5lOworICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkK KyAgICAgIHJldHVybih5KTsKKyAgICBpZiAoKnMpIHsKKyAgICAgICAgY2hhciAqKiBhcDsKKyAg ICAgICAgaWYgKCh4ID0gYXJyYXlib3VuZHMocywmKHJhbmdlWzBdKSwmKHJhbmdlWzFdKSkpIDwg MCkgeworICAgICAgICAgICAgcHJpbnRmKCI/QmFkIGFycmF5OiAlc1xuIixzKTsKKyAgICAgICAg ICAgIHJldHVybigtOSk7CisgICAgICAgIH0KKyAgICAgICAgYXAgPSBhX3B0clt4XTsKKyAgICAg ICAgaWYgKCFhcCkgeworICAgICAgICAgICAgcHJpbnRmKCJBcnJheSBub3QgZGVjbGFyZWQ6ICVz XG4iLCBzKTsKKyAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisgICAgICAgIH0gZWxz ZSB7CisgICAgICAgICAgICBpbnQgaSwgbiwgbWF4OworICAgICAgICAgICAgbWF4ID0gKHJhbmdl WzFdID4gMCkgPworICAgICAgICAgICAgICByYW5nZVsxXSA6CisgICAgICAgICAgICAgICAgKChy YW5nZVswXSA+IDApID8gcmFuZ2VbMF0gOiBhX2RpbVt4XSk7CisgICAgICAgICAgICBpZiAocmFu Z2VbMF0gPCAwKQorICAgICAgICAgICAgICByYW5nZVswXSA9IDA7CisgICAgICAgICAgICBpZiAo bWF4ID4gYV9kaW1beF0pCisgICAgICAgICAgICAgIG1heCA9IGFfZGltW3hdOworICAgICAgICAg ICAgbiA9IDE7CisgICAgICAgICAgICBwcmludGYoIlxcJiVjW106IERpbWVuc2lvbiA9ICVkIixh cnJheWl0b2EoeCksYV9kaW1beF0pOworICAgICAgICAgICAgaWYgKGFfbGlua1t4XSA+IC0xKQor ICAgICAgICAgICAgICBwcmludGYoIiAoTGluayB0byBcXCYlY1tdKSIsYXJyYXlpdG9hKGFfbGlu a1t4XSkpOworICAgICAgICAgICAgcHJpbnRmKCJcbiIpOworICAgICAgICAgICAgZm9yIChpID0g cmFuZ2VbMF07IGkgPD0gbWF4OyBpKyspIHsKKyAgICAgICAgICAgICAgICBpZiAoYXBbaV0pIHsK KyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIlM2QuICVzXG4iLGksYXBbaV0pOworICAgICAg ICAgICAgICAgICAgICBpZiAoeGFza21vcmUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm IChjbWRfY29scyA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ID0gc3RybGVu KGFwW2ldKSArIDU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9ICh4ICUgY21kX2Nv bHMpID8gMSA6IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiArPSAoeCAvIGNtZF9j b2xzKSArIHk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG4rKzsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgICAgICAgICAgICAgIGlmIChuID4gKGNtZF9yb3dzIC0gMykpIHsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpZiAoIWFza21vcmUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG4gPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg ICAgICB9CisgICAgICAgIHJldHVybigxKTsKKyAgICB9CisKKyAgICAvKiBBbGwgYXJyYXlzIC0g anVzdCBzaG93IG5hbWUgYW5kIGRpbWVuc2lvbiAqLworCisgICAgZm9yICh5ID0gMDsgeSA8IChp bnQpICd6JyAtIEFSUkFZQkFTRSArIDE7IHkrKykgeworICAgICAgICBpZiAoYV9wdHJbeV0pIHsK KyAgICAgICAgICAgIGlmICh4ID09IDApIHByaW50ZigiRGVjbGFyZWQgYXJyYXlzOlxuIik7Cisg ICAgICAgICAgICB4ID0gMTsKKyAgICAgICAgICAgIHByaW50ZigiIFxcJiVjWyVkXSIsCisgICAg ICAgICAgICAgICAgICAgKHkgPT0gMSkgPyA2NCA6IHkgKyBBUlJBWUJBU0UsIGFfZGltW3ldKTsK KyAgICAgICAgICAgIGlmIChhX2xpbmtbeV0gPiAtMSkKKyAgICAgICAgICAgICAgcHJpbnRmKCIg PT4gXFwmJWNbXSIsYXJyYXlpdG9hKGFfbGlua1t5XSkpOworICAgICAgICAgICAgcHJpbnRmKCJc biIpOworICAgICAgICB9CisgICAgICAgIGlmICgheCkgcHJpbnRmKCIgTm8gYXJyYXlzIGRlY2xh cmVkXG4iKTsKKyAgICB9CisgICAgcmV0dXJuKDEpOworfQorI2VuZGlmIC8qIE5PU1BMICovCisK K2ludAorZG9zaG93KHgpIGludCB4OyB7CisgICAgaW50IHksIHosIGk7IGxvbmcgeno7CisgICAg ZXh0ZXJuIGludCBvcHRsaW5lczsKKyAgICBjaGFyICpzOworI2lmZGVmIE9TMgorICAgIGV4dGVy biBpbnQgb3MyZ2tzOworICAgIGV4dGVybiBpbnQgdHRfa2JfbW9kZTsKKyNlbmRpZiAvKiBPUzIg Ki8KKyAgICBleHRlcm4gaW50IHNydmNkbXNnOworICAgIGV4dGVybiBjaGFyICogY2Rtc2dzdHIs ICogY2tjZHBhdGg7CisKKyNpZm5kZWYgTk9TRVRLRVkKKyAgICBpZiAoeCA9PSBTSEtFWSkgeyAg ICAgICAgICAgICAgICAgICAvKiBTSE9XIEtFWSAqLworICAgICAgICBpbnQgYzsKKyNpZmRlZiBP UzIKKyAgICAgICAgaWYgKCh4ID0gY21rZXkoc2hva2V5dGFiLG5zaG9rZXksIkhvdyBtYW55IGtl eXMgc2hvdWxkIGJlIHNob3duPyIsCisgICAgICAgICAgICAgICAgICAgICAgICAib25lIix4eHN0 cmluZykpIDwgMCkgcmV0dXJuKHgpOworICAgICAgICBzd2l0Y2ggKHR0X2tiX21vZGUpIHsKKyAg ICAgICAgICBjYXNlIEtCTV9FTToKKyAgICAgICAgICAgIHMgPSAiZW1hY3MiOworICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBLQk1fSEU6CisgICAgICAgICAgICBzID0gImhlYnJl dyI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEtCTV9SVToKKyAgICAgICAg ICAgIHMgPSAicnVzc2lhbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEtC TV9FTjoKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcyA9ICJkZWZhdWx0IjsKKyAg ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmICgoeiA9IGNta2V5KHNob2tl eW10YWIsbnNob2tleW0sIldoaWNoIGRlZmluaXRpb24gc2hvdWxkIGJlIHNob3duPyIsCisgICAg ICAgICAgICAgICAgICAgICAgICBzLHh4c3RyaW5nKSkgPCAwKSByZXR1cm4oeik7CisgICAgICAg IGlmICh6ID09IFNIS0VZREVGKQorICAgICAgICAgIHogPSAtMTsKKyNlbmRpZiAvKiBPUzIgKi8K KyAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeSk7CisjaWZkZWYgSUtTRAor ICAgICAgICBpZiAoaW5zZXJ2ZXIpIHsKKyAgICAgICAgICAgIHByaW50ZigiU29ycnksIGNvbW1h bmQgZGlzYWJsZWQuXHJcbiIpOworICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKyAg ICAgICAgfQorI2VuZGlmIC8qIElLU0QgKi8KKworI2lmZGVmIE1BQworICAgICAgICBwcmludGYo Ik5vdCBpbXBsZW1lbnRlZFxuIik7CisgICAgICAgIHJldHVybigwKTsKKyNlbHNlIC8qIE5vdCBN QUMgKi8KKyNpZmRlZiBPUzIKKyAgICAgICAgaWYgKHgpIHsKKyAgICAgICAgICAgIGNvbl9ldmVu dCBldnQ7CisgICAgICAgICAgICBmb3IgKGMgPSAwOyBjIDwgS01TSVpFOyBjKyspIHsKKyAgICAg ICAgICAgICAgICBldnQgPSAoeiA8IDApID8gbWFwa2V5KGMpIDogbWFwdGVybWtleShjLHopOwor ICAgICAgICAgICAgICAgIGlmIChldnQudHlwZSAhPSBlcnJvcikgeworICAgICAgICAgICAgICAg ICAgICBzaG9rZXljb2RlKGMseik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor ICAgICAgICB9IGVsc2UgeworI2VuZGlmIC8qIE9TMiAqLworICAgICAgICAgICAgcHJpbnRmKCIg UHJlc3Mga2V5OiAiKTsKKyNpZmRlZiBVTklYCisjaWZkZWYgTk9TRVRCVUYKKyAgICAgICAgICAg IGZmbHVzaChzdGRvdXQpOworI2VuZGlmIC8qIE5PU0VUQlVGICovCisjZW5kaWYgLyogVU5JWCAq LworICAgICAgICAgICAgY29uYmluKChjaGFyKWVzY2FwZSk7ICAgICAgIC8qIFB1dCB0ZXJtaW5h bCBpbiBiaW5hcnkgbW9kZSAqLworI2lmZGVmIE9TMgorICAgICAgICAgICAgb3MyZ2tzID0gMDsg ICAgICAgICAgICAgICAgIC8qIFJhdyBzY2FuY29kZSBwcm9jZXNzaW5nICovCisjZW5kaWYgLyog T1MyICovCisgICAgICAgICAgICBjID0gY29uZ2tzKDApOyAgICAgICAgICAgICAgLyogR2V0IGNo YXJhY3RlciBvciBzY2FuIGNvZGUgKi8KKyNpZmRlZiBPUzIKKyAgICAgICAgICAgIG9zMmdrcyA9 IDE7ICAgICAgICAgICAgICAgICAvKiBDb29rZWQgc2NhbmNvZGUgcHJvY2Vzc2luZyAqLworI2Vu ZGlmIC8qIE9TMiAqLworICAgICAgICAgICAgY29uY2IoKGNoYXIpZXNjYXBlKTsgICAgICAgIC8q IFJlc3RvcmUgdGVybWluYWwgdG8gY2JyZWFrIG1vZGUgKi8KKyAgICAgICAgICAgIGlmIChjIDwg MCkgeyAgICAgICAgICAgICAgICAvKiBDaGVjayBmb3IgZXJyb3IgKi8KKyAgICAgICAgICAgICAg ICBwcmludGYoIj9FcnJvciByZWFkaW5nIGtleVxuIik7CisgICAgICAgICAgICAgICAgcmV0dXJu KDApOworICAgICAgICAgICAgfQorI2lmbmRlZiBPUzIKKy8qCisgIERvIE5PVCBtYXNrIHdoZW4g aXQgY2FuIGJlIGEgcmF3IHNjYW4gY29kZSwgcGVyaGFwcyA+IDI1NQorKi8KKyAgICAgICAgICAg IGMgJj0gY21kbXNrOyAgICAgICAgICAgICAgICAvKiBBcHBseSBjb21tYW5kIG1hc2sgKi8KKyNl bmRpZiAvKiBPUzIgKi8KKyAgICAgICAgICAgIHByaW50ZigiXG4iKTsKKyNpZmRlZiBPUzIKKyAg ICAgICAgICAgIHNob2tleWNvZGUoYyx6KTsKKyNlbHNlIC8qIE9TMiAqLworICAgICAgICAgICAg c2hva2V5Y29kZShjKTsKKyNlbmRpZiAvKiBPUzIgKi8KKyNpZmRlZiBPUzIKKyAgICAgICAgfQor I2VuZGlmIC8qIE9TMiAqLworICAgICAgICByZXR1cm4oMSk7CisjZW5kaWYgLyogTUFDICovCisg ICAgfQorI2lmbmRlZiBOT0tWRVJCUworICAgIGlmICh4ID09IFNIS1ZCKSB7ICAgICAgICAgICAg ICAgICAgIC8qIFNIT1cgS1ZFUkJTICovCisgICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkg cmV0dXJuKHkpOworI2lmZGVmIElLU0QKKyAgICAgICAgaWYgKGluc2VydmVyKSB7CisgICAgICAg ICAgICBwcmludGYoIlNvcnJ5LCBjb21tYW5kIGRpc2FibGVkLlxyXG4iKTsKKyAgICAgICAgICAg IHJldHVybihzdWNjZXNzID0gMCk7CisgICAgICAgIH0KKyNlbmRpZiAvKiBJS1NEICovCisgICAg ICAgIHByaW50ZigiXG5UaGUgZm9sbG93aW5nICVkIGtleWJvYXJkIHZlcmJzIGFyZSBhdmFpbGFi bGU6XG5cbiIsbmt2ZXJicyk7CisgICAgICAgIGt3ZGhlbHAoa3ZlcmJzLG5rdmVyYnMsIiIsIlxc SyIsIiIsMywwKTsKKyAgICAgICAgcHJpbnRmKCJcbiIpOworICAgICAgICByZXR1cm4oMSk7Cisg ICAgfQorI2lmZGVmIE9TMgorICAgIGlmICh4ID09IFNIVURLKSB7ICAgICAgICAgICAgICAgICAg IC8qIFNIT1cgVURLcyAqLworICAgICAgICBleHRlcm4gdm9pZCBzaG93dWRrKHZvaWQpOworICAg ICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsKKyNpZmRlZiBJS1NECisgICAg ICAgIGlmIChpbnNlcnZlcikgeworICAgICAgICAgICAgcHJpbnRmKCJTb3JyeSwgY29tbWFuZCBk aXNhYmxlZC5cclxuIik7CisgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOworICAgICAg ICB9CisjZW5kaWYgLyogSUtTRCAqLworICAgICAgICBzaG93dWRrKCk7CisgICAgICAgIHJldHVy bigxKTsKKyAgICB9CisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogTk9LVkVSQlMgKi8KKyNl bmRpZiAvKiBOT1NFVEtFWSAqLworCisjaWZuZGVmIE5PU1BMCisgICAgaWYgKHggPT0gU0hNQUMp IHsgICAgICAgICAgICAgICAgICAgLyogU0hPVyBNQUNSTyAqLworICAgICAgICBzdHJ1Y3QgRkRC IGt3LCBmbCwgY207CisgICAgICAgIGludCBpLCBrLCBuID0gMCwgbGVmdCwgZmxhZywgY29uZmly bWVkID0gMDsKKyAgICAgICAgY2hhciAqIHAsICpxWzY0XTsKKyAgICAgICAgZm9yIChpID0gMDsg aSA8IG5tYWM7IGkrKykgeyAgICAvKiBjb3B5IHRoZSBtYWNybyB0YWJsZSAqLworICAgICAgICAg ICAgbWFja2V5W2ldLmt3ZCA9IG1hY3RhYltpXS5rd2Q7IC8qIGludG8gYSByZWd1bGFyIGtleXdv cmQgdGFibGUgKi8KKyAgICAgICAgICAgIG1hY2tleVtpXS5rd3ZhbCA9IGk7ICAgICAgICAvKiB3 aXRoIHZhbHVlID0gcG9pbnRlciB0byBtYWNybyB0YmwgKi8KKyAgICAgICAgICAgIG1hY2tleVtp XS5mbGdzID0gbWFjdGFiW2ldLmZsZ3M7CisgICAgICAgIH0KKyAgICAgICAgcCA9IGxpbmU7Cisg ICAgICAgIGxlZnQgPSBMSU5CVUZTSVo7CisgICAgICAgIHdoaWxlICghY29uZmlybWVkICYmIG4g PCA2NCkgeworICAgICAgICAgICAgY21mZGJpKCZrdywgICAgICAgICAgICAgICAgIC8qIEZpcnN0 IEZEQiAtIG1hY3JvIHRhYmxlICovCisgICAgICAgICAgICAgICAgICAgX0NNS0VZLCAgICAgICAg ICAgICAgLyogZmNvZGUgKi8KKyAgICAgICAgICAgICAgICAgICAiTWFjcm8gbmFtZSIsICAgICAg ICAvKiBobHBtc2cgKi8KKyAgICAgICAgICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAv KiBkZWZhdWx0ICovCisgICAgICAgICAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgLyog YWRkdGwgc3RyaW5nIGRhdGEgKi8KKyAgICAgICAgICAgICAgICAgICBubWFjLCAgICAgICAgICAg ICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMTogdGJsIHNpemUgKi8KKyAgICAgICAgICAgICAg ICAgICAwLCAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMjogNCA9IGNt c3dpICovCisgICAgICAgICAgICAgICAgICAgeHhzdHJpbmcsICAgICAgICAgICAgLyogUHJvY2Vz c2luZyBmdW5jdGlvbiAqLworICAgICAgICAgICAgICAgICAgIG1hY2tleSwgICAgICAgICAgICAg IC8qIEtleXdvcmQgdGFibGUgKi8KKyAgICAgICAgICAgICAgICAgICAmZmwgICAgICAgICAgICAg ICAgICAvKiBQb2ludGVyIHRvIG5leHQgRkRCICovCisgICAgICAgICAgICAgICAgICAgKTsKKyAg ICAgICAgICAgIGNtZmRiaSgmZmwsICAgICAgICAgICAgICAgICAvKiAybmQgRkRCIC0gc29tZXRo aW5nIG5vdCBpbiBtYWN0YWIgKi8KKyAgICAgICAgICAgICAgICAgICBfQ01GTEQsICAgICAgICAg ICAgICAvKiBmY29kZSAqLworICAgICAgICAgICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAg IC8qIGhscG1zZyAqLworICAgICAgICAgICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgIC8q IGRlZmF1bHQgKi8KKyAgICAgICAgICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAvKiBh ZGR0bCBzdHJpbmcgZGF0YSAqLworICAgICAgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICAg ICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAxICovCisgICAgICAgICAgICAgICAgICAgMCwgICAg ICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDIgKi8KKyAgICAgICAgICAgICAg ICAgICB4eHN0cmluZywKKyAgICAgICAgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgICAg ICAgICZjbQorICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICBjbWZkYmkoJmNtLCAg ICAgICAgICAgICAgICAgLyogM3JkIEZEQiAtIENvbmZpcm1hdGlvbiAqLworICAgICAgICAgICAg ICAgICAgIF9DTUNGTSwgICAgICAgICAgICAgIC8qIGZjb2RlICovCisgICAgICAgICAgICAgICAg ICAgIiIsICAgICAgICAgICAgICAgICAgLyogaGxwbXNnICovCisgICAgICAgICAgICAgICAgICAg IiIsICAgICAgICAgICAgICAgICAgLyogZGVmYXVsdCAqLworICAgICAgICAgICAgICAgICAgICIi LCAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIHN0cmluZyBkYXRhICovCisgICAgICAgICAgICAg ICAgICAgMCwgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDEgKi8KKyAg ICAgICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRh dGEgMiAqLworICAgICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgICAgTlVM TCwKKyAgICAgICAgICAgICAgICAgICBOVUxMCisgICAgICAgICAgICAgICAgICAgKTsKKyAgICAg ICAgICAgIHggPSBjbWZkYigma3cpOyAgICAgICAgICAgICAvKiBQYXJzZSBzb21ldGhpbmcgKi8K KyAgICAgICAgICAgIGlmICh4IDwgMCkKKyAgICAgICAgICAgICAgcmV0dXJuKHgpOworICAgICAg ICAgICAgcyA9IGF0bWJ1ZjsgICAgICAgICAgICAgICAgIC8qIFdoYXQgdGhlIHVzZXIgdHlwZWQg Ki8KKyAgICAgICAgICAgIHN3aXRjaCAoY21yZXN1bHQuZmNvZGUpIHsKKyAgICAgICAgICAgICAg Y2FzZSBfQ01LRVk6ICAgICAgICAgICAgICAvKiBJZiBpdCB3YXMgYSBrZXl3b3JkICovCisgICAg ICAgICAgICAgICAgeSA9IG1sb29rKG1hY3RhYixhdG1idWYsbm1hYyk7IC8qIGdldCBmdWxsIG5h bWUgKi8KKyAgICAgICAgICAgICAgICBpZiAoeSA+IC0xKQorICAgICAgICAgICAgICAgICAgcyA9 IG1hY3RhYlt5XS5rd2Q7ICAgIC8qIChmYWxsIHRocnUgb24gcHVycG9zZS4uLikgKi8KKyAgICAg ICAgICAgICAgY2FzZSBfQ01GTEQ6CisgICAgICAgICAgICAgICAgayA9IGNrc3RybmNweShwLHMs bGVmdCkgKyAxOyAvKiBDb3B5IHJlc3VsdCB0byBsaXN0ICovCisgICAgICAgICAgICAgICAgbGVm dCAtPSBrOworICAgICAgICAgICAgICAgIGlmIChsZWZ0IDw9IDApIHsKKyAgICAgICAgICAgICAg ICAgICAgKnAgPSBOVUw7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICBxW24rK10gPSBwOyAgICAgICAgICAgICAvKiBQb2ludCB0 byB0aGlzIGl0ZW0gKi8KKyAgICAgICAgICAgICAgICBwICs9IGs7ICAgICAgICAgICAgICAgICAv KiBNb3ZlIGJ1ZmZlciBwb2ludGVyIHBhc3QgaXQgKi8KKyAgICAgICAgICAgICAgICBicmVhazsK KyAgICAgICAgICAgICAgY2FzZSBfQ01DRk06ICAgICAgICAgICAgICAvKiBFbmQgb2YgY29tbWFu ZCAqLworICAgICAgICAgICAgICAgIGNvbmZpcm1lZCsrOworICAgICAgICAgICAgICBkZWZhdWx0 OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg ICAgIGlmIChuID09IDApIHsKKyAgICAgICAgICAgIHByaW50ZigiTWFjcm9zOlxuIik7CisgICAg ICAgICAgICBzbGMgPSAxOworICAgICAgICAgICAgZm9yICh5ID0gMDsgeSA8IG5tYWM7IHkrKykK KyAgICAgICAgICAgICAgaWYgKHNob21hYyhtYWN0YWJbeV0ua3dkLG1hY3RhYlt5XS5tdmFsKSA8 IDApIGJyZWFrOworICAgICAgICAgICAgcmV0dXJuKDEpOworICAgICAgICB9CisgICAgICAgIHNs YyA9IDA7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKyAgICAgICAgICAgIGZs YWcgPSAwOworICAgICAgICAgICAgcyA9IHFbaV07CisgICAgICAgICAgICBpZiAoIXMpIHMgPSAi IjsKKyAgICAgICAgICAgIGlmICghKnMpIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKGlzd2ls ZChzKSkgeyAgICAgICAgICAgIC8qIFBhdHRlcm4gbWF0Y2ggKi8KKyAgICAgICAgICAgICAgICBm b3IgKGsgPSAwLCB4ID0gMDsgeCA8IG5tYWM7IHgrKykgeworICAgICAgICAgICAgICAgICAgICBp ZiAoY2ttYXRjaChzLG1hY3RhYlt4XS5rd2QsMCwxKSkgeworICAgICAgICAgICAgICAgICAgICAg ICAgc2hvbWFjKG1hY3RhYlt4XS5rd2QsbWFjdGFiW3hdLm12YWwpOworICAgICAgICAgICAgICAg ICAgICAgICAgaysrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICAgIGlmICghaykKKyAgICAgICAgICAgICAgICAgIHggPSAtMTsKKyAgICAg ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg IH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAvKiBFeGFjdCBtYXRjaCAqLworICAgICAgICAg ICAgICAgIHggPSBteGxvb2sobWFjdGFiLHMsbm1hYyk7CisgICAgICAgICAgICAgICAgZmxhZyA9 IDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZmxhZyAmJiB4ID09IC0xKQorICAg ICAgICAgICAgICB4ID0gbWxvb2sobWFjdGFiLHMsbm1hYyk7CisgICAgICAgICAgICBzd2l0Y2gg KHgpIHsKKyAgICAgICAgICAgICAgY2FzZSAtMzogICAgICAgICAgICAgICAgICAvKiBOb3RoaW5n IHRvIGxvb2sgdXAgKi8KKyAgICAgICAgICAgICAgY2FzZSAtMTogICAgICAgICAgICAgICAgICAv KiBOb3QgZm91bmQgKi8KKyAgICAgICAgICAgICAgICBwcmludGYoIiVzIC0gKG5vdCBkZWZpbmVk KVxuIixzKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSAtMjog ICAgICAgICAgICAgICAgICAvKiBBbWJpZ3VvdXMsIG1hdGNoZXMgbW9yZSB0aGFuIG9uZSAqLwor ICAgICAgICAgICAgICAgIHByaW50ZigiJXMgLSBhbWJpZ3VvdXNcbiIscyk7CisgICAgICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgLyog TWF0Y2hlcyBvbmUgZXhhY3RseSAqLworICAgICAgICAgICAgICAgIHNob21hYyhtYWN0YWJbeF0u a3dkLG1hY3RhYlt4XS5tdmFsKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg IH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4oMSk7CisgICAgfQorI2VuZGlmIC8qIE5PU1BM ICovCisKKy8qCisgIE90aGVyIFNIT1cgY29tbWFuZHMgb25seSBoYXZlIHR3byBmaWVsZHMuICBH ZXQgY29tbWFuZCBjb25maXJtYXRpb24gaGVyZSwKKyAgdGhlbiBoYW5kbGUgd2l0aCBiaWcgc3dp dGNoKCkgc3RhdGVtZW50LgorKi8KKyNpZm5kZWYgTk9TUEwKKyAgICBpZiAoeCAhPSBTSEJVSSAm JiB4ICE9IFNIQVJSKQorI2VuZGlmIC8qIE5PU1BMICovCisgICAgICBpZiAoKHkgPSBjbWNmbSgp KSA8IDApCisgICAgICAgIHJldHVybih5KTsKKworI2lmZGVmIENPTU1FTlQKKyAgICAvKiBUaGlz IHJlc3RyaWN0aW9uIGlzIHRvbyBnZW5lcmFsLiAqLworI2lmZGVmIElLU0QKKyAgICBpZiAoaW5z ZXJ2ZXIgJiYKKyNpZmRlZiBDS19MT0dJTgorICAgICAgICBpc2d1ZXN0CisjZWxzZQorICAgICAg ICAwCisjZW5kaWYgLyogQ0tfTE9HSU4gKi8KKyAgICAgICAgKSB7CisgICAgICAgIHByaW50Zigi U29ycnksIGNvbW1hbmQgZGlzYWJsZWQuXHJcbiIpOworICAgICAgICByZXR1cm4oc3VjY2VzcyA9 IDApOworICAgIH0KKyNlbmRpZiAvKiBJS1NEICovCisjZW5kaWYgLyogQ09NTUVOVCAqLworCisg ICAgc3dpdGNoICh4KSB7CisKKyNpZmRlZiBBTllYMjUKKyNpZm5kZWYgSUJNWDI1CisgICAgICBj YXNlIFNIUEFEOgorICAgICAgICBzaG9wYWQoMCk7CisgICAgICAgIGJyZWFrOworI2VuZGlmIC8q IElCTVgyNSAqLworI2VuZGlmIC8qIEFOWVgyNSAqLworCisgICAgICBjYXNlIFNITkVUOgorI2lm ZGVmIE5PTE9DQUwKKyAgICAgICAgcHJpbnRmKCIgTm8gbmV0d29yayBzdXBwb3J0IGluIHRoaXMg dmVyc2lvbiBvZiBDLUtlcm1pdC5cbiIpOworI2Vsc2UKKyNpZm5kZWYgTkVUQ09OTgorICAgICAg ICBwcmludGYoIiBObyBuZXR3b3JrIHN1cHBvcnQgaW4gdGhpcyB2ZXJzaW9uIG9mIEMtS2VybWl0 LlxuIik7CisjZWxzZQorICAgICAgICBzaG9uZXQoKTsKKyNlbmRpZiAvKiBORVRDT05OICovCisj ZW5kaWYgLyogTk9MT0NBTCAqLworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBTSFBBUjoK KyAgICAgICAgc2hvcGFyKCk7CisgICAgICAgIGJyZWFrOworCisjaWZuZGVmIE5PWEZFUgorICAg ICAgY2FzZSBTSEFUVDoKKyAgICAgICAgc2hvYXR0KCk7CisgICAgICAgIGJyZWFrOworI2VuZGlm IC8qIE5PWEZFUiAqLworCisjaWZuZGVmIE5PU1BMCisgICAgICBjYXNlIFNIQ09VOgorICAgICAg ICBwcmludGYoIiAlZFxuIixjb3VudFtjbWRsdmxdKTsKKyAgICAgICAgYnJlYWs7CisjZW5kaWYg LyogTk9TUEwgKi8KKworI2lmbmRlZiBOT1NFUlZFUgorICAgICAgY2FzZSBTSFNFUjogICAgICAg ICAgICAgICAgICAgICAgIC8qIFNob3cgU2VydmVyICovCisgICAgICAgIGkgPSAwOworI2lmbmRl ZiBOT0ZSSUxMUworICAgICAgICBwcmludGYoIkZ1bmN0aW9uOiAgICAgICAgICBTdGF0dXM6XG4i KTsKKyAgICAgICAgaSsrOworICAgICAgICBwcmludGYoIiBHRVQgICAgICAgICAgICAgICAgJXNc biIsbm1bZW5fZ2V0XSk7CisgICAgICAgIGkrKzsKKyAgICAgICAgcHJpbnRmKCIgU0VORCAgICAg ICAgICAgICAgICVzXG4iLG5tW2VuX3Nlbl0pOworICAgICAgICBpKys7CisgICAgICAgIHByaW50 ZigiIE1BSUwgICAgICAgICAgICAgICAlc1xuIixubVtpbnNlcnZlciA/IDAgOiBlbl9tYWldKTsK KyAgICAgICAgaSsrOworICAgICAgICBwcmludGYoIiBQUklOVCAgICAgICAgICAgICAgJXNcbiIs bm1baW5zZXJ2ZXIgPyAwIDogZW5fcHJpXSk7CisgICAgICAgIGkrKzsKKyNpZm5kZWYgTk9TUEwK KyAgICAgICAgcHJpbnRmKCIgUkVNT1RFIEFTU0lHTiAgICAgICVzXG4iLG5tW2VuX2FzZ10pOwor ICAgICAgICBpKys7CisjZW5kaWYgLyogTk9TUEwgKi8KKyAgICAgICAgcHJpbnRmKCIgUkVNT1RF IENEL0NXRCAgICAgICVzXG4iLG5tW2VuX2N3ZF0pOworICAgICAgICBpKys7CisjaWZkZWYgWkNP UFkKKyAgICAgICAgcHJpbnRmKCIgUkVNT1RFIENPUFkgICAgICAgICVzXG4iLG5tW2VuX2NweV0p OworICAgICAgICBpKys7CisjZW5kaWYgLyogWkNPUFkgKi8KKyAgICAgICAgcHJpbnRmKCIgUkVN T1RFIERFTEVURSAgICAgICVzXG4iLG5tW2VuX2RlbF0pOworICAgICAgICBwcmludGYoIiBSRU1P VEUgRElSRUNUT1JZICAgJXNcbiIsbm1bZW5fZGlyXSk7CisgICAgICAgIHByaW50ZigiIFJFTU9U RSBIT1NUICAgICAgICAlc1xuIixubVtpbnNlcnZlciA/IDAgOiBlbl9ob3NdKTsKKyAgICAgICAg aSArPSAzOworI2lmbmRlZiBOT1NQTAorICAgICAgICBwcmludGYoIiBSRU1PVEUgUVVFUlkgICAg ICAgJXNcbiIsbm1bZW5fcXVlXSk7CisgICAgICAgIGkrKzsKKyNlbmRpZiAvKiBOT1NQTCAqLwor ICAgICAgICBwcmludGYoIiBSRU1PVEUgTUtESVIgICAgICAgJXNcbiIsbm1bZW5fbWtkXSk7Cisg ICAgICAgIHByaW50ZigiIFJFTU9URSBSTURJUiAgICAgICAlc1xuIixubVtlbl9ybWRdKTsKKyAg ICAgICAgcHJpbnRmKCIgUkVNT1RFIFJFTkFNRSAgICAgICVzXG4iLG5tW2VuX3Jlbl0pOworICAg ICAgICBwcmludGYoIiBSRU1PVEUgU0VUICAgICAgICAgJXNcbiIsbm1bZW5fc2V0XSk7CisgICAg ICAgIHByaW50ZigiIFJFTU9URSBTUEFDRSAgICAgICAlc1xuIixubVtlbl9zcGFdKTsKKyAgICAg ICAgcHJpbnRmKCIgUkVNT1RFIFRZUEUgICAgICAgICVzXG4iLG5tW2VuX3R5cF0pOworICAgICAg ICBwcmludGYoIiBSRU1PVEUgV0hPICAgICAgICAgJXNcbiIsbm1baW5zZXJ2ZXIgPyAwIDogZW5f d2hvXSk7CisgICAgICAgIHByaW50ZigiIEJZRSAgICAgICAgICAgICAgICAlc1xuIixubVtlbl9i eWVdKTsKKyAgICAgICAgcHJpbnRmKCIgRklOSVNIICAgICAgICAgICAgICVzXG4iLG5tW2VuX2Zp bl0pOworICAgICAgICBwcmludGYoIiBFWElUICAgICAgICAgICAgICAgJXNcbiIsbm1bZW5feGl0 XSk7CisgICAgICAgIHByaW50ZigiIEVOQUJMRSAgICAgICAgICAgICAlc1xuIixubVtlbl9lbmFd KTsKKyAgICAgICAgaSArPSAxMTsKKyNlbmRpZiAvKiBOT0ZSSUxMUyAqLworICAgICAgICBpZiAo aSA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGkgPSAw OyB9CisgICAgICAgIHByaW50ZigiU2VydmVyIHRpbWVvdXQ6ICAgICAgJWRcbiIsc3J2dGltKTsK KyAgICAgICAgaWYgKCsraSA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJu KDEpOyBlbHNlIGkgPSAwOyB9CisgICAgICAgIHByaW50ZigiU2VydmVyIGlkbGUtdGltZW91dDog JWRcbiIsc3J2aWRsKTsKKyAgICAgICAgaWYgKCsraSA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFz a21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGkgPSAwOyB9CisgICAgICAgIHByaW50ZigiU2VydmVy IGtlZXBhbGl2ZSAgICAgJXNcbiIsIHNob3dvZmYoc3J2cGluZykpOworICAgICAgICBpZiAoKytp ID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgaSA9IDA7 IH0KKyAgICAgICAgcHJpbnRmKCJTZXJ2ZXIgY2QtbWVzc2FnZSAgICAlc1xuIiwgc2hvd29mZihz cnZjZG1zZykpOworICAgICAgICBpZiAoc3J2Y2Rtc2cgJiYgY2Rtc2dzdHIpCisgICAgICAgICAg cHJpbnRmKCJTZXJ2ZXIgY2QtbWVzc2FnZSAgICAlc1xuIiwgY2Rtc2dzdHIpOworICAgICAgICBp ZiAoKytpID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2Ug aSA9IDA7IH0KKyAgICAgICAgcHJpbnRmKCJTZXJ2ZXIgZGlzcGxheTogICAgICAlc1xuIiwgc2hv d29mZihzcnZkaXMpKTsKKyAgICAgICAgaWYgKCsraSA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFz a21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGkgPSAwOyB9CisgICAgICAgIHByaW50ZigiU2VydmVy IGxvZ2luOiAgICAgICAgIik7CisgICAgICAgIGlmICgheF91c2VyKSB7CisgICAgICAgICAgICBw cmludGYoIihub25lKVxuIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwcmludGYo IlwiJXNcIiwgXCIlc1wiLCBcIiVzXCJcbiIsCisgICAgICAgICAgICAgICAgICAgeF91c2VyLAor ICAgICAgICAgICAgICAgICAgIHhfcGFzc3dkID8geF9wYXNzd2QgOiAiIiwKKyAgICAgICAgICAg ICAgICAgICB4X2FjY3QgPyB4X2FjY3QgOiAiIgorICAgICAgICAgICAgICAgICAgICk7CisgICAg ICAgIH0KKyAgICAgICAgaWYgKCsraSA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkg cmV0dXJuKDEpOyBlbHNlIGkgPSAwOyB9CisgICAgICAgIHByaW50ZigiU2VydmVyIGdldC1wYXRo OiAiKTsKKyAgICAgICAgaWYgKG5nZXRwYXRoID09IDApIHsKKyAgICAgICAgICAgIHByaW50Zigi ICAgIChub25lKVxuIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwcmludGYoIlxu Iik7CisgICAgICAgICAgICBpICs9IDM7CisgICAgICAgICAgICBmb3IgKHggPSAwOyB4IDwgbmdl dHBhdGg7IHgrKykgeworICAgICAgICAgICAgICAgIGlmIChnZXRwYXRoW3hdKSBwcmludGYoIiAl ZC4gJXNcbiIsIHgsIGdldHBhdGhbeF0pOworICAgICAgICAgICAgICAgIGlmICgrK2kgPiAoY21k X3Jvd3MgLSAzKSkgeyAvKiBNb3JlIHRoYW4gYSBzY3JlZW5mdWwuLi4gKi8KKyAgICAgICAgICAg ICAgICAgICAgaWYgKCFhc2ttb3JlKCkpCisgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICBpID0gMDsKKyAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7 CisjZW5kaWYgLyogTk9TRVJWRVIgKi8KKworICAgICAgY2FzZSBTSFNUQTogICAgICAgICAgICAg ICAgICAgICAgIC8qIFN0YXR1cyBvZiBsYXN0IGNvbW1hbmQgKi8KKyAgICAgICAgcHJpbnRmKCIg JXNcbiIsIHN1Y2Nlc3MgPyAiU1VDQ0VTUyIgOiAiRkFJTFVSRSIpOworICAgICAgICByZXR1cm4o MCk7ICAgICAgICAgICAgICAgICAgICAgIC8qIERvbid0IGNoYW5nZSBpdCAqLworCisgICAgICBj YXNlIFNIU1RLOiB7ICAgICAgICAgICAgICAgICAgICAgLyogU3RhY2sgZm9yIE1BQyBkZWJ1Z2dp bmcgKi8KKyNpZmRlZiBNQUMKKyAgICAgICAgICBsb25nIHNwOworICAgICAgICAgIHNwID0gLTE7 CisgICAgICAgICAgbG9hZEEwICgoY2hhciAqKSZzcCk7ICAgICAgICAgLyogc2V0IGRlc3RpbmF0 aW9uIGFkZHJlc3MgKi8KKyAgICAgICAgICBTUHRvYUEwKCk7ICAgICAgICAgICAgICAgICAgICAv KiBtb3ZlIFNQIHRvIGRlc3RpbmF0aW9uICovCisgICAgICAgICAgcHJpbnRmKCJTdGFjayBhdCAw eCV4XG4iLCBzcCk7CisgICAgICAgICAgc2hvd19xdWV1ZSgpOyAgICAgICAgICAgICAgICAgLyog bW9yZSBkZWJ1Z2dpbmcgKi8KKyAgICAgICAgICBicmVhazsKKyNlbHNlCisgICAgICAgICAgc2hv c3RhY2soKTsKKyNlbmRpZiAvKiBNQUMgKi8KKyAgICAgICAgICBicmVhazsKKyAgICAgIH0KKwor CisjaWZuZGVmIE5PTE9DQUwKKyNpZmRlZiBPUzIKKyAgICAgIGNhc2UgU0hUQUI6ICAgICAgICAg ICAgICAgICAgICAgICAvKiBTSE9XIFRBQlMgKi8KKyNpZmRlZiBJS1NECisgICAgICAgIGlmIChp bnNlcnZlcikgeworICAgICAgICAgICAgcHJpbnRmKCJTb3JyeSwgY29tbWFuZCBkaXNhYmxlZC5c clxuIik7CisgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOworICAgICAgICB9CisjZW5k aWYgLyogSUtTRCAqLworICAgICAgICBzaG90YWJzKCk7CisgICAgICAgIGJyZWFrOworI2VuZGlm IC8qIE9TMiAqLworCisgICAgICBjYXNlIFNIVEVSOiAgICAgICAgICAgICAgICAgICAgICAgLyog U0hPVyBURVJNSU5BTCAqLworI2lmZGVmIElLU0QKKyAgICAgICAgaWYgKGluc2VydmVyKSB7Cisg ICAgICAgICAgICBwcmludGYoIlNvcnJ5LCBjb21tYW5kIGRpc2FibGVkLlxyXG4iKTsKKyAgICAg ICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7CisgICAgICAgIH0KKyNlbmRpZiAvKiBJS1NEICov CisgICAgICAgIHNob3RybSgpOworICAgICAgICBicmVhazsKKworI2lmZGVmIE9TMgorICAgICAg Y2FzZSBTSFZTQ1JOOiAgICAgICAgICAgICAgICAgICAgIC8qIFNIT1cgVmlydHVhbCBTY3JlZW4g LSBmb3IgZGVidWcgKi8KKyAgICAgICAgc2hvdnNjcm4oKTsKKyAgICAgICAgYnJlYWs7CisjZW5k aWYgLyogT1MyICovCisjZW5kaWYgLyogTk9MT0NBTCAqLworCisjaWZkZWYgT1MyTU9VU0UKKyAg ICAgIGNhc2UgU0hNT1U6ICAgICAgICAgICAgICAgICAgICAgICAvKiBTSE9XIE1PVVNFICovCisj aWZkZWYgSUtTRAorICAgICAgICBpZiAoaW5zZXJ2ZXIpIHsKKyAgICAgICAgICAgIHByaW50Zigi U29ycnksIGNvbW1hbmQgZGlzYWJsZWQuXHJcbiIpOworICAgICAgICAgICAgcmV0dXJuKHN1Y2Nl c3MgPSAwKTsKKyAgICAgICAgfQorI2VuZGlmIC8qIElLU0QgKi8KKyAgICAgICAgc2hvbW91KCk7 CisgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIE9TMk1PVVNFICovCisKKyNpZm5kZWYgTk9GUklM TFMKKyAgICAgIGNhc2UgU0hWRVI6CisgICAgICAgIHNob3ZlcigpOworICAgICAgICBicmVhazsK KyNlbmRpZiAvKiBOT0ZSSUxMUyAqLworCisjaWZuZGVmIE5PU1BMCisgICAgICBjYXNlIFNIQlVJ OiAgICAgICAgICAgICAgICAgICAgICAgLyogQnVpbHQtaW4gdmFyaWFibGVzICovCisJbGluZVsw XSA9IE5VTDsKKyAgICAgICAgaWYgKCh5ID0gY210eHQoIlZhcmlhYmxlIG5hbWUgb3IgcGF0dGVy biIsIiIsJnMseHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICBj a3N0cm5jcHkobGluZSxzLExJTkJVRlNJWik7CisgICAgICAgIC8qIGlmIChsaW5lWzBdKSBja3N0 cm5jYXQobGluZSwiKiIsTElOQlVGU0laKTsgKi8KKworICAgICAgY2FzZSBTSEZVTjogICAgICAg ICAgICAgICAgICAgICAgIC8qIG9yIGJ1aWx0LWluIGZ1bmN0aW9ucyAqLworI2lmZGVmIENLX1RU R1dTSVoKKyNpZmRlZiBPUzIKKyAgICAgICAgaWYgKHR0X2NvbHNbVlRFUk1dIDwgMCB8fCB0dF9y b3dzW1ZURVJNXSA8IDApCisgICAgICAgICAgdHRnd3NpeigpOworI2Vsc2UgLyogT1MyICovCisg ICAgICAgIGlmICh0dGd3c2l6KCkgPiAwKSB7ICAgICAgICAgICAgLyogR2V0IGN1cnJlbnQgc2Ny ZWVuIHNpemUgKi8KKyAgICAgICAgICAgIGlmICh0dF9yb3dzID4gMCAmJiB0dF9jb2xzID4gMCkg eworICAgICAgICAgICAgICAgIGNtZF9yb3dzID0gdHRfcm93czsKKyAgICAgICAgICAgICAgICBj bWRfY29scyA9IHR0X2NvbHM7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyNlbmRpZiAvKiBP UzIgKi8KKyNlbmRpZiAvKiBDS19UVEdXU0laICovCisKKyAgICAgICAgaWYgKHggPT0gU0hGVU4p IHsgICAgICAgICAgICAgICAvKiBGdW5jdGlvbnMgKi8KKyAgICAgICAgICAgIHByaW50ZigiXG5U aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgYXZhaWxhYmxlOlxuXG4iKTsKKyAgICAgICAgICAg IGt3ZGhlbHAoZm5jdGFiLG5mdW5jcywiIiwiXFxGIiwiKCkiLDMsMCk7CisgICAgICAgICAgICBw cmludGYoIlxuIik7CisjaWZuZGVmIE5PSEVMUAorICAgICAgICAgICAgcHJpbnRmKAorIkhFTFAg RlVOQ1RJT04gPG5hbWU+IGdpdmVzIHRoZSBjYWxsaW5nIGNvbnZlbnRpb25zIG9mIHRoZSBnaXZl biBmdW5jdGlvbi5cblxuIgorICAgICAgICAgICAgICAgICAgICk7CisjZW5kaWYgLyogTk9IRUxQ ICovCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAg ICAgICAgICAvKiBWYXJpYWJsZXMgKi8KKwkgICAgaW50IGosIGZsYWcgPSAwLCBoYXZlYXJnID0g MDsKKwkgICAgc3RydWN0IHN0cmluZ2FycmF5ICogcSA9IE5VTEw7CisJICAgIGNoYXIgKiogcHA7 CisJICAgIGlmIChsaW5lWzBdKSB7CQkvKiBIYXZlIHNvbWV0aGluZyB0byBzZWFyY2ggZm9yICov CisJCWhhdmVhcmcgPSAxOwkJLyogTWF5YmUgYSBsaXN0IG9mIHRoaW5ncyAqLworCQlxID0gY2tz cGxpdCgxLDAsbGluZSxOVUxMLCJfLV4kKj9bXXt9IiwwLDAsMCk7CisJCWlmICghcSkgYnJlYWs7 CisJCXBwID0gcS0+YV9oZWFkOworCSAgICB9CisJICAgIGkgPSAwOworCSAgICBmb3IgKHkgPSAw OyB5IDwgbnZhcnM7IHkrKykgeworCQlpZiAoKHZhcnRhYlt5XS5mbGdzICYgQ01fSU5WKSkKKwkJ ICBjb250aW51ZTsKKwkJaWYgKGhhdmVhcmcpIHsJCS8qIElmIEkgaGF2ZSBzb21ldGhpbmcgdG8g bWF0Y2ggKi8KKwkJICAgIGNoYXIgKiBzMjsKKwkJICAgIGZvciAoZmxhZyA9IDAsIGogPSAxOyBq IDw9IHEtPmFfc2l6ZSAmJiAhZmxhZzsgaisrKSB7CisJCQlzMiA9IHBwW2pdID8gcHBbal0gOiAi IjsKKyNpZmRlZiBDT01NRU5UCisvKiBUaGlzIGlzIG5vdCBuZWVkZWQgYmVjYXVzZSBpdCdzIHdo YXQgdGhlIDQgYXJnIGRvZXMgaW4gY2ttYXRjaCgpICovCisJCQlsZW4gPSBzdHJsZW4oczIpOwor CQkJaWYgKGxlbiA+IDApIHsKKwkJCSAgICBpZiAoczJbbGVuLTFdICE9ICckJykgey8qIFRvIGFs bG93IGFuY2hvcnMgKi8KKwkJCQlja21ha21zZyhsaW5lLExJTkJVRlNJWixwcFtqXSwiKiIsTlVM TCxOVUxMKTsKKwkJCQlzMiA9IGxpbmU7CisJCQkgICAgfQorCQkJfQorI2VuZGlmIC8qIENPTU1F TlQgKi8KKwkJCWlmIChja21hdGNoKHMyLHZhcnRhYlt5XS5rd2QsMCw0KSA+IDApIHsKKwkJCSAg ICBmbGFnID0gMTsJLyogTWF0Y2hlcyAqLworCQkJICAgIGJyZWFrOworCQkJfQorCQkgICAgfQor CQkgICAgaWYgKCFmbGFnKQkJLyogRG9lc24ndCBtYXRjaCAqLworCQkgICAgICBjb250aW51ZTsK KwkJfQorCQlzID0gbnZsb29rKHZhcnRhYlt5XS5rd2QpOworCQlwcmludGYoIiBcXHYoJXMpID0g Iix2YXJ0YWJbeV0ua3dkKTsKKwkJaWYgKHZhcnRhYlt5XS5rd3ZhbCA9PSBWTl9ORVdMKSB7IC8q IFx2KG5ld2xpbmUpICovCisJCSAgICB3aGlsZSAoKnMpCQkvKiBTaG93IGNvbnRyb2wgY2hhcnMg c3ltYm9saWNhbGx5ICovCisJCSAgICAgIHByaW50ZigiXFx7JWR9IiwqcysrKTsKKwkJICAgIHBy aW50ZigiXG4iKTsKKwkJfSBlbHNlIGlmICh2YXJ0YWJbeV0ua3d2YWwgPT0gVk5fSUJVRiAgfHwg LyogXHYoaW5wdXQpICovCisJCQkgICB2YXJ0YWJbeV0ua3d2YWwgPT0gVk5fUVVFICAgfHwgLyog XHYocXVlcnkpICovCisjaWZkZWYgT1MyCisJCQkgICB2YXJ0YWJbeV0ua3d2YWwgPT0gVk5fU0VM Q1QgfHwgLyogXHYoc2VsZWN0KSAqLworI2VuZGlmIC8qIE9TMiAqLworCQkJICAgKHZhcnRhYlt5 XS5rd3ZhbCA+PSBWTl9NX0FBQSAmJiAvKiBtb2RlbSBvbmVzICovCisJCQkgICAgdmFydGFiW3ld Lmt3dmFsIDw9IFZOX01fWlpaKQorCQkJICAgKSB7CisJCSAgICBpbnQgciA9IDEyOwkJLyogVGhp cyBvbmUgY2FuIHdyYXAgYXJvdW5kICovCisJCSAgICBjaGFyIGJ1ZlsxMF07CisJCSAgICB3aGls ZSAoKnMpIHsKKwkJCWlmIChpc3ByaW50KCpzKSkgeworCQkJICAgIGJ1ZlswXSA9ICpzOworCQkJ ICAgIGJ1ZlsxXSA9IE5VTDsKKwkJCSAgICByKys7CisJCQl9IGVsc2UgeworCQkJICAgIHNwcmlu dGYoYnVmLCJcXHslZH0iLCpzKTsgLyogU0FGRSAqLworCQkJICAgIHIgKz0gKGludCkgc3RybGVu KGJ1Zik7CisJCQl9CisJCQlpZiAociA+PSBjbWRfY29scyAtIDEpIHsKKwkJCSAgICBwcmludGYo IlxuIik7CisJCQkgICAgciA9IDA7CisJCQkgICAgaSsrOworCQkJfQorCQkJcHJpbnRmKCIlcyIs YnVmKTsKKwkJCXMrKzsKKwkJICAgIH0KKwkJICAgIHByaW50ZigiXG4iKTsKKwkJfSBlbHNlCisJ CSAgcHJpbnRmKCIlc1xuIixzKTsKKwkJaWYgKCsraSA+IChjbWRfcm93cyAtIDMpKSB7IC8qIE1v cmUgdGhhbiBhIHNjcmVlbmZ1bC4uLiAqLworCQkgICAgaWYgKCh5ID49IG52YXJzIC0gMSkgfHwg IWFza21vcmUoKSkKKwkJICAgICAgYnJlYWs7CisJCSAgICBlbHNlCisJCSAgICAgIGkgPSAwOwor CQl9CisJICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBTSFZB UjogICAgICAgICAgICAgICAgICAgICAgIC8qIEdsb2JhbCB2YXJpYWJsZXMgKi8KKyAgICAgICAg eCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBWYXJpYWJsZSBjb3VudCAqLworICAg ICAgICBzbGMgPSAxOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNjcmVlbiBsaW5lIGNvdW50 IGZvciAibW9yZT8iICovCisgICAgICAgIGZvciAoeSA9IDMzOyB5IDwgR1ZBUlM7IHkrKykKKyAg ICAgICAgICBpZiAoZ192YXJbeV0pIHsKKyAgICAgICAgICAgICAgaWYgKHgrKyA9PSAwKSBwcmlu dGYoIkdsb2JhbCB2YXJpYWJsZXM6XG4iKTsKKyAgICAgICAgICAgICAgc3ByaW50ZihsaW5lLCIg XFwlJSVjIix5KTsgLyogU0FGRSAqLworICAgICAgICAgICAgICBpZiAoc2hvbWFjKGxpbmUsZ192 YXJbeV0pIDwgMCkgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgICBpZiAoIXgpIHByaW50Zigi IE5vIHZhcmlhYmxlcyBkZWZpbmVkXG4iKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2Ug U0hBUkc6IHsgICAgICAgICAgICAgICAgICAgICAvKiBBcmdzICovCisgICAgICAgICAgY2hhciAq IHMxLCAqIHMyOworICAgICAgICAgIGlmIChtYWNsdmwgPiAtMSkgeworICAgICAgICAgICAgICBw cmludGYoIk1hY3JvIGFyZ3VtZW50cyBhdCBsZXZlbCAlZCAoXFx2KGFyZ2MpID0gJWQpOlxuIiwK KyAgICAgICAgICAgICAgICAgICAgIG1hY2x2bCwKKyAgICAgICAgICAgICAgICAgICAgIG1hY2Fy Z2NbbWFjbHZsXQorICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgZm9yICh5 ID0gMDsgeSA8IG1hY2FyZ2NbbWFjbHZsXTsgeSsrKSB7CisgICAgICAgICAgICAgICAgICBzMSA9 IG1fYXJnW21hY2x2bF1beV07CisgICAgICAgICAgICAgICAgICBpZiAoIXMxKSBzMSA9ICIoTlVM TCkiOworICAgICAgICAgICAgICAgICAgczIgPSBtX3hhcmdbbWFjbHZsXVt5XTsKKyAgICAgICAg ICAgICAgICAgIGlmICghczIpIHMyID0gIihOVUxMKSI7CisgICAgICAgICAgICAgICAgICBpZiAo eSA8IDEwKQorICAgICAgICAgICAgICAgICAgICBwcmludGYoIiBcXCUlJWQgPSAlc1xuIix5LHMx KTsKKyAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIg XFwmX1slZF0gPSAlc1xuIix5LHMyKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgIH0gZWxz ZSB7CisgICAgICAgICAgICAgIHByaW50ZigiVG9wLWxldmVsIGFyZ3VtZW50cyAoXFx2KGFyZ2Mp ID0gJWQpOlxuIiwgdG9wYXJnYyk7CisgICAgICAgICAgICAgIGZvciAoeSA9IDA7IHkgPCB0b3Bh cmdjOyB5KyspIHsKKyAgICAgICAgICAgICAgICAgIHMxID0gZ192YXJbeSArICcwJ107CisgICAg ICAgICAgICAgICAgICBpZiAoIXMxKSBzMSA9ICIoTlVMTCkiOworICAgICAgICAgICAgICAgICAg czIgPSB0b3BhcmdbeV07CisgICAgICAgICAgICAgICAgICBpZiAoIXMyKSBzMiA9ICIoTlVMTCki OworICAgICAgICAgICAgICAgICAgaWYgKHkgPCAxMCAmJiBnX3Zhclt5XSkKKyAgICAgICAgICAg ICAgICAgICAgcHJpbnRmKCIgXFwlJSVkID0gJXNcbiIseSxzMSk7CisgICAgICAgICAgICAgICAg ICBpZiAodG9wYXJnW3ldKQorICAgICAgICAgICAgICAgICAgICBwcmludGYoIiBcXCZfWyVkXSA9 ICVzXG4iLHksczIpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9Cisg ICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIFNIQVJSOiAgICAgICAgICAgICAgICAgICAgICAg LyogQXJyYXlzICovCisgICAgICAgIHJldHVybihzaG93YXJyYXkoKSk7CisjZW5kaWYgLyogTk9T UEwgKi8KKworI2lmbmRlZiBOT1hGRVIKKyAgICAgIGNhc2UgU0hQUk86ICAgICAgICAgICAgICAg ICAgICAgICAvKiBQcm90b2NvbCBwYXJhbWV0ZXJzICovCisgICAgICAgIHNob3BhcnAoKTsKKyAg ICAgICAgcHJpbnRmKCJcbiIpOworICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBOT1hGRVIgKi8K KworI2lmbmRlZiBOT0xPQ0FMCisgICAgICBjYXNlIFNIQ09NOiAgICAgICAgICAgICAgICAgICAg ICAgLyogQ29tbXVuaWNhdGlvbiBwYXJhbWV0ZXJzICovCisgICAgICAgIHByaW50ZigiXG4iKTsK KyAgICAgICAgc2hvcGFyYygpOworI2lmZGVmIE9TMgorICAgICAgICB7CisgICAgICAgICAgICBp bnQgaTsKKyAgICAgICAgICAgIGNoYXIgKnMgPSAiKHVua25vd24pIjsKKyAgICAgICAgICAgIGZv ciAoaSA9IDA7IGkgPCBucHJ0eTsgaSsrKQorICAgICAgICAgICAgICBpZiAocHJ0eXRhYltpXS5r d3ZhbCA9PSBwcmlvcml0eSkgeworICAgICAgICAgICAgICAgICAgcyA9IHBydHl0YWJbaV0ua3dk OworICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg IHByaW50ZigiIFByaW9yaXR5OiAlc1xuIiwgcyApOworICAgICAgICB9CisjZW5kaWYgLyogT1My ICovCisKKyAgICAgICAgcHJpbnRmKCJcbiIpOworI2lmZGVmIE5FVENPTk4KKyAgICAgICAgaWYg KCFuZXR3b3JrCisjaWZkZWYgSUtTRAorICAgICAgICAgICAgICYmICFpbnNlcnZlcgorI2VuZGlm IC8qIElLU0QgKi8KKyAgICAgICAgICAgICApIHsKKyNlbmRpZiAvKiBORVRDT05OICovCisgICAg ICAgICAgICBzaG9tZG0oKTsKKyAgICAgICAgICAgIHByaW50ZigiXG4iKTsKKyNpZmRlZiBORVRD T05OCisgICAgICAgIH0KKyNlbmRpZiAvKiBORVRDT05OICovCisKKyNpZm5kZWYgTk9ESUFMCisj aWZkZWYgSUtTRAorICAgICAgICBpZiAoICFpbnNlcnZlciApCisjZW5kaWYgLyogSUtTRCAqLwor ICAgICAgICB7CisgICAgICAgICAgICBwcmludGYoIlR5cGUgU0hPVyBESUFMIHRvIHNlZSBESUFM LXJlbGF0ZWQgaXRlbXMuXG4iKTsKKyAgICAgICAgICAgIHByaW50ZigiVHlwZSBTSE9XIE1PREVN IHRvIHNlZSBtb2RlbS1yZWxhdGVkIGl0ZW1zLlxuIik7CisjaWZkZWYgQ0tfVEFQSQorICAgICAg ICAgICAgcHJpbnRmKCJUeXBlIFNIT1cgVEFQSSB0byBzZWUgVEFQSS1yZWxhdGVkIGl0ZW1zLlxu Iik7CisjZW5kaWYgLyogQ0tfVEFQSSAqLworICAgICAgICAgICAgcHJpbnRmKCJcbiIpOworICAg ICAgICB9CisjZW5kaWYgLyogTk9ESUFMICovCisgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIE5P TE9DQUwgKi8KKworICAgICAgY2FzZSBTSEZJTDogICAgICAgICAgICAgICAgICAgICAgIC8qIEZp bGUgcGFyYW1ldGVycyAqLworICAgICAgICBzaG9maWwoKTsKKyAgICAgICAgLyogcHJpbnRmKCJc biIpOyAqLyAgICAgICAgICAgICAvKiAob3V0IG8nIHNwYWNlKSAqLworICAgICAgICBicmVhazsK KworI2lmbmRlZiBOT0NTRVRTCisgICAgICBjYXNlIFNITE5HOiAgICAgICAgICAgICAgICAgICAg ICAgLyogTGFuZ3VhZ2VzICovCisgICAgICAgIHNob3BhcmwoKTsKKyAgICAgICAgYnJlYWs7Cisj ZW5kaWYgLyogTk9DU0VUUyAqLworCisjaWZuZGVmIE5PU1BMCisgICAgICBjYXNlIFNIU0NSOiAg ICAgICAgICAgICAgICAgICAgICAgLyogU2NyaXB0cyAqLworICAgICAgICBwcmludGYoIiBDb21t YW5kIHF1b3Rpbmc6ICAgICAgICAlc1xuIiwgc2hvd29mZihjbWRncXVvKCkpKTsKKyAgICAgICAg cHJpbnRmKCIgVGFrZSAgZWNobzogICAgICAgICAgICAgJXNcbiIsIHNob3dvZmYodGVjaG8pKTsK KyAgICAgICAgcHJpbnRmKCIgVGFrZSAgZXJyb3I6ICAgICAgICAgICAgJXNcbiIsIHNob3dvZmYo dGFrZXJyW2NtZGx2bF0pKTsKKyAgICAgICAgcHJpbnRmKCIgTWFjcm8gZWNobzogICAgICAgICAg ICAgJXNcbiIsIHNob3dvZmYobWVjaG8pKTsKKyAgICAgICAgcHJpbnRmKCIgTWFjcm8gZXJyb3I6 ICAgICAgICAgICAgJXNcbiIsIHNob3dvZmYobWVycm9yW2NtZGx2bF0pKTsKKyAgICAgICAgcHJp bnRmKCIgUXVpZXQ6ICAgICAgICAgICAgICAgICAgJXNcbiIsIHNob3dvZmYocXVpZXQpKTsKKyAg ICAgICAgcHJpbnRmKCIgVmFyaWFibGUgZXZhbHVhdGlvbjogICAgJXMgW1xcJSV4IGFuZCBcXCZ4 W10gdmFyaWFibGVzXVxuIiwKKwkgICAgICAgdmFyZXZhbCA/ICJyZWN1cnNpdmUiIDogInNpbXBs ZSIpOworICAgICAgICBwcmludGYoIiBGdW5jdGlvbiBkaWFnbm9zdGljczogICAlc1xuIiwgc2hv d29mZihmbmRpYWdzKSk7CisgICAgICAgIHByaW50ZigiIEZ1bmN0aW9uIGVycm9yOiAgICAgICAg ICVzXG4iLCBzaG93b2ZmKGZuZXJyb3IpKTsKKyNpZmRlZiBDS0xFQVJOCisgICAgICAgIHsKKyAg ICAgICAgICAgIGV4dGVybiBjaGFyICogbGVhcm5maWxlOworICAgICAgICAgICAgZXh0ZXJuIGlu dCBsZWFybmluZzsKKyAgICAgICAgICAgIGlmIChsZWFybmZpbGUpIHsKKyAgICAgICAgICAgICAg ICBwcmludGYoIiBMRUFSTiBmaWxlOiAgICAgICAgICAgICAlcyAoJXMpXG4iLAorICAgICAgICAg ICAgICAgICAgICAgICBsZWFybmZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgIGxlYXJuaW5n ID8gIk9OIiA6ICJPRkYiCisgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICB9 IGVsc2UKKyAgICAgICAgICAgICAgcHJpbnRmKCIgTEVBUk4gZmlsZTogICAgICAgICAgICAgKG5v bmUpXG4iKTsKKyAgICAgICAgfQorI2VuZGlmIC8qIENLTEVBUk4gKi8KKyAgICAgICAgc2hvaW5w dXQoKTsKKyAgICAgICAgc2hvb3V0cHV0KCk7CisjaWZuZGVmIE5PU0NSSVBUCisgICAgICAgIHBy aW50ZigiIFNjcmlwdCBlY2hvOiAgICAgICAgICAgICVzXG4iLCBzaG93b2ZmKHNlY2hvKSk7Cisj ZW5kaWYgLyogTk9TQ1JJUFQgKi8KKyAgICAgICAgcHJpbnRmKCIgQ29tbWFuZCBidWZmZXIgbGVu Z3RoOiAgJWRcbiIsIENNREJMKTsKKyAgICAgICAgcHJpbnRmKCIgQXRvbSBidWZmZXIgbGVuZ3Ro OiAgICAgJWRcbiIsIEFUTUJMKTsKKyAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogTk9TUEwgKi8K KworI2lmbmRlZiBOT1hNSVQKKyAgICAgIGNhc2UgU0hYTUk6CisgICAgICAgIHByaW50ZigiXG4i KTsKKyAgICAgICAgcHJpbnRmKCIgRmlsZSB0eXBlOiAgICAgICAgICAgICAgICAgICAgICAgJXNc biIsCisgICAgICAgICAgICAgICBiaW5hcnkgPyAiYmluYXJ5IiA6ICJ0ZXh0Iik7CisjaWZuZGVm IE5PQ1NFVFMKKyAgICAgICAgcHJpbnRmKCIgRmlsZSBjaGFyYWN0ZXItc2V0OiAgICAgICAgICAg ICAgJXNcbiIsCisgICAgICAgICAgICAgICBmY3NpbmZvW2ZjaGFyc2V0XS5rZXl3b3JkKTsKKyNp ZmRlZiBPUzIKKyAgICAgICAgaWYgKCBpc3VuaWNvZGUoKSApIHsKKyAgICAgICAgcHJpbnRmKCIg VGVybWluYWwgQ2hhcmFjdGVyIChyZW1vdGUpOiAgICAgJXNcbiIsCisgICAgICAgICAgICAgIHR0 X3V0ZjggPyAidXRmLTgiIDogdGNzciA9PSBUWF9UUkFOU1AgPyAidHJhbnNwYXJlbnQiIDoKKyAg ICAgICAgICAgICAgdGNzciA9PSBUWF9VTkRFRiA/ICJ1bmRlZmluZWQiIDogdHhyaW5mb1t0Y3Ny XS0+a2V5d2QpOworICAgICAgICBwcmludGYoIiBUZXJtaW5hbCBDaGFyYWN0ZXIgKGxvY2FsKTog ICAgICAlc1xuIiwKKyAgICAgICAgICAgICAgdGNzbCA9PSBUWF9UUkFOU1AgPyAidHJhbnNwYXJl bnQiIDoKKyAgICAgICAgICAgICAgdGNzbCA9PSBUWF9VTkRFRiA/ICJ1bmRlZmluZWQiIDogdHhy aW5mb1t0Y3NsXS0+a2V5d2QpOworICAgICAgICB9IGVsc2UgeworICAgICAgICBwcmludGYoIiBU ZXJtaW5hbCBDaGFyYWN0ZXIgKHJlbW90ZSk6ICAgICAlc1xuIiwKKyAgICAgICAgICAgICAgdHRf dXRmOCA/ICJ1dGYtOCIgOiB0Y3NyID09IFRYX1RSQU5TUCA/ICJ0cmFuc3BhcmVudCIgOgorICAg ICAgICAgICAgICB0Y3NyID09IFRYX1VOREVGID8gInVuZGVmaW5lZCIgOiB0eHJpbmZvW3Rjc3Jd LT5rZXl3ZCk7CisgICAgICAgIHByaW50ZigiIFRlcm1pbmFsIENoYXJhY3RlciAobG9jYWwpOiAg ICAgICVzXG4iLAorICAgICAgICAgICAgICB0Y3NsID09IFRYX1RSQU5TUCA/ICJ0cmFuc3BhcmVu dCIgOgorICAgICAgICAgICAgICB0Y3NsID09IFRYX1VOREVGID8gInVuZGVmaW5lZCIgOiB0eHJp bmZvW3Rjc2xdLT5rZXl3ZCk7CisgICAgICAgIH0KKyNlbHNlIC8qIE9TMiAqLworICAgICAgICBw cmludGYoIiBUZXJtaW5hbCBjaGFyYWN0ZXItc2V0IChyZW1vdGUpOiAlc1xuIiwKKyAgICAgICAg ICAgICAgIGZjc2luZm9bdGNzcl0ua2V5d29yZCk7CisgICAgICAgIHByaW50ZigiIFRlcm1pbmFs IGNoYXJhY3Rlci1zZXQgKGxvY2FsKTogICVzXG4iLAorICAgICAgICAgICAgICAgZmNzaW5mb1t0 Y3NsXS5rZXl3b3JkKTsKKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBOT0NTRVRTICovCisg ICAgICAgIHByaW50ZigiIFRlcm1pbmFsIGJ5dGVzaXplOiAgICAgICAgICAgICAgICVkXG4iLAor ICAgICAgICAgICAgICAgKGNtYXNrID09IDB4ZmYpID8gOCA6IDcpOworICAgICAgICBwcmludGYo IiBUZXJtaW5hbCBlY2hvOiAgICAgICAgICAgICAgICAgICAlc1xuIiwKKyAgICAgICAgICAgICAg IGR1cGxleCA/ICJsb2NhbCIgOiAicmVtb3RlIik7CisgICAgICAgIHByaW50ZigiIFRyYW5zbWl0 IEVPRjogICAgICAgICAgICAgICAgICAgICIpOworICAgICAgICBpZiAoKnhtaXRidWYgPT0gTlVM KSB7CisgICAgICAgICAgICBwcmludGYoIihub25lKVxuIik7CisgICAgICAgIH0gZWxzZSB7Cisg ICAgICAgICAgICBjaGFyICpwOworICAgICAgICAgICAgcCA9IHhtaXRidWY7CisgICAgICAgICAg ICB3aGlsZSAoKnApIHsKKyAgICAgICAgICAgICAgICBpZiAoKnAgPCBTUCkKKyAgICAgICAgICAg ICAgICAgIHByaW50ZigiXiVjIixjdGwoKnApKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAg ICAgICAgICAgICAgICBwcmludGYoIiVjIiwqcCk7CisgICAgICAgICAgICAgICAgcCsrOworICAg ICAgICAgICAgfQorICAgICAgICAgICAgcHJpbnRmKCJcbiIpOworICAgICAgICB9CisgICAgICAg IGlmICh4bWl0ZikKKyAgICAgICAgICBwcmludGYoIiBUcmFuc21pdCBGaWxsOiAgICAgICAgICAg ICAgICAgICAlZFxuIiwgeG1pdGYpOworICAgICAgICBlbHNlCisgICAgICAgICAgcHJpbnRmKCIg VHJhbnNtaXQgRmlsbDogICAgICAgICAgICAgICAgICAgKG5vbmUpXG4iKTsKKyAgICAgICAgcHJp bnRmKCIgVHJhbnNtaXQgTGluZWZlZWQ6ICAgICAgICAgICAgICAgJXNcbiIsc2hvd29mZih4bWl0 bCkpOworICAgICAgICBpZiAoeG1pdHApCisgICAgICAgICAgcHJpbnRmKCIgVHJhbnNtaXQgUHJv bXB0OiAgICAgICAgICAgICAgICAgJWQgKCVzKVxuIiwKKyAgICAgICAgICAgICAgICAgeG1pdHAs CisgICAgICAgICAgICAgICAgIGNoYXJ0b3N0cih4bWl0cCkKKyAgICAgICAgICAgICAgICAgKTsK KyAgICAgICAgZWxzZQorICAgICAgICAgIHByaW50ZigiIFRyYW5zbWl0IFByb21wdDogICAgICAg ICAgICAgICAgIChub25lKVxuIik7CisgICAgICAgIHByaW50ZigiIFRyYW5zbWl0IEVjaG86ICAg ICAgICAgICAgICAgICAgICVzXG4iLCBzaG93b2ZmKHhtaXR4KSk7CisgICAgICAgIHByaW50Zigi IFRyYW5zbWl0IExvY2tpbmctU2hpZnQ6ICAgICAgICAgICVzXG4iLCBzaG93b2ZmKHhtaXRzKSk7 CisgICAgICAgIHByaW50ZigiIFRyYW5zbWl0IFBhdXNlOiAgICAgICAgICAgICAgICAgICVkICht aWxsaXNlY29uZCVzKVxuIiwKKyAgICAgICAgICAgICAgIHhtaXR3LAorICAgICAgICAgICAgICAg KHhtaXR3ID09IDEpID8gIiIgOiAicyIKKyAgICAgICAgICAgICAgICk7CisgICAgICAgIHByaW50 ZigiIFRyYW5zbWl0IFRpbWVvdXQ6ICAgICAgICAgICAgICAgICVkIChzZWNvbmQlcylcbiIsCisg ICAgICAgICAgICAgICB4bWl0dCwKKyAgICAgICAgICAgICAgICh4bWl0dCA9PSAxKSA/ICIiIDog InMiCisgICAgICAgICAgICAgICApOworICAgICAgICBwcmludGYoIlxuIik7CisgICAgICAgIGJy ZWFrOworI2VuZGlmIC8qIE5PWE1JVCAqLworCisjaWZuZGVmIE5PRElBTAorICAgICAgY2FzZSBT SE1PRDogICAgICAgICAgICAgICAgICAgICAgIC8qIFNIT1cgTU9ERU0gKi8KKyNpZmRlZiBJS1NE CisgICAgICAgIGlmIChpbnNlcnZlcikgeworICAgICAgICAgICAgcHJpbnRmKCJTb3JyeSwgY29t bWFuZCBkaXNhYmxlZC5cclxuIik7CisgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOwor ICAgICAgICB9CisjZW5kaWYgLyogSUtTRCAqLworICAgICAgICBzaG9tb2RlbSgpOyAgICAgICAg ICAgICAgICAgICAgIC8qIFNob3cgU0VUIE1PREVNIGl0ZW1zICovCisgICAgICAgIGJyZWFrOwor I2VuZGlmIC8qIE5PRElBTCAqLworCisjaWZuZGVmIE1BQworICAgICAgY2FzZSBTSERGTFQ6Cisg ICAgICAgIHByaW50ZigiJXNcbiIsemd0ZGlyKCkpOworICAgICAgICBicmVhazsKKyNlbmRpZiAv KiBNQUMgKi8KKworI2lmbmRlZiBOT0xPQ0FMCisgICAgICBjYXNlIFNIRVNDOgorI2lmZGVmIElL U0QKKyAgICAgICAgaWYgKGluc2VydmVyKSB7CisgICAgICAgICAgICBwcmludGYoIlNvcnJ5LCBj b21tYW5kIGRpc2FibGVkLlxyXG4iKTsKKyAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7 CisgICAgICAgIH0KKyNlbmRpZiAvKiBJS1NEICovCisgICAgICAgIHJldHVybihzaG9lc2MoZXNj YXBlKSk7CisKKyNpZm5kZWYgTk9ESUFMCisgICAgICBjYXNlIFNIRElBOiAgICAgICAgICAgICAg ICAgICAgICAgLyogU0hPVyBESUFMICovCisjaWZkZWYgSUtTRAorICAgICAgICBpZiAoaW5zZXJ2 ZXIpIHsKKyAgICAgICAgICAgIHByaW50ZigiU29ycnksIGNvbW1hbmQgZGlzYWJsZWQuXHJcbiIp OworICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKyAgICAgICAgfQorI2VuZGlmIC8q IElLU0QgKi8KKyAgICAgICAgc2htZG1saW4oKTsKKyAgICAgICAgcHJpbnRmKCIsIHNwZWVkOiAi KTsKKyAgICAgICAgaWYgKCh6eiA9IHR0Z3NwZCgpKSA8IDApIHsKKyAgICAgICAgICAgIHByaW50 ZigidW5rbm93biIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKHp6ID09IDg4 ODApIHByaW50ZigiNzUvMTIwMCIpOyBlbHNlIHByaW50ZigiJWxkIix6eik7CisgICAgICAgIH0K KyAgICAgICAgaWYgKGNhcnJpZXIgPT0gQ0FSX09GRikgcyA9ICJvZmYiOworICAgICAgICBlbHNl IGlmIChjYXJyaWVyID09IENBUl9PTikgcyA9ICJvbiI7CisgICAgICAgIGVsc2UgaWYgKGNhcnJp ZXIgPT0gQ0FSX0FVVCkgcyA9ICJhdXRvIjsKKyAgICAgICAgZWxzZSBzID0gInVua25vd24iOwor ICAgICAgICBwcmludGYoIiwgY2FycmllcjogJXMiLCBzKTsKKyAgICAgICAgaWYgKGNhcnJpZXIg PT0gQ0FSX09OKSB7CisgICAgICAgICAgICBpZiAoY2R0aW1vKSBwcmludGYoIiwgdGltZW91dDog JWQgc2VjIiwgY2R0aW1vKTsKKyAgICAgICAgICAgIGVsc2UgcHJpbnRmKCIsIHRpbWVvdXQ6IG5v bmUiKTsKKyAgICAgICAgfQorICAgICAgICBwcmludGYoIlxuIik7CisgICAgICAgIGRvc2hvZGlh bCgpOworICAgICAgICBpZiAobG9jYWwKKyNpZmRlZiBORVRDT05OCisgICAgICAgICAgICAmJiAh bmV0d29yaworI2VuZGlmIC8qIE5FVENPTk4gKi8KKyAgICAgICAgICAgICkgeworICAgICAgICAg ICAgcHJpbnRmKCJUeXBlIFNIT1cgTU9ERU0gdG8gc2VlIG1vZGVtIHNldHRpbmdzLlxuIik7Cisj aWZkZWYgQ0tfVEFQSQorICAgICAgICAgICAgcHJpbnRmKCJUeXBlIFNIT1cgVEFQSSB0byBzZWUg VEFQSS1yZWxhdGVkIGl0ZW1zXG4iKTsKKyNlbmRpZiAvKiBDS19UQVBJICovCisgICAgICAgICAg ICBwcmludGYoIlR5cGUgU0hPVyBDT01NVU5JQ0FUSU9OUyB0byBzZWUgbW9kZW0gc2lnbmFscy5c biIpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIE5PRElBTCAqLworI2Vu ZGlmIC8qIE5PTE9DQUwgKi8KKworI2lmbmRlZiBOT1hGRVIKKyNpZmRlZiBDS19MQUJFTEVECisg ICAgICBjYXNlIFNITEJMOiAgICAgICAgICAgICAgICAgICAgICAgLyogTGFiZWxlZCBmaWxlIGlu Zm8gKi8KKyAgICAgICAgc2hvbGJsKCk7CisgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIENLX0xB QkVMRUQgKi8KKyNlbmRpZiAvKiBOT1hGRVIgKi8KKworICAgICAgY2FzZSBTSENTRTogICAgICAg ICAgICAgICAgICAgICAgIC8qIENoYXJhY3RlciBzZXRzICovCisjaWZkZWYgTk9DU0VUUworICAg ICAgICBwcmludGYoCisiIENoYXJhY3RlciBzZXQgdHJhbnNsYXRpb24gaXMgbm90IHN1cHBvcnRl ZCBpbiB0aGlzIHZlcnNpb24gb2YgQy1LZXJtaXRcbiIpOworI2Vsc2UKKyAgICAgICAgc2hvY2hh cnNldCgpOworI2lmbmRlZiBOT1hGRVIKKyAgICAgICAgcHJpbnRmKCJcbiBVbmtub3duLUNoYXIt U2V0OiAlc1xuIiwKKyAgICAgICAgICAgICAgIHVua2NzID8gIktlZXAiIDogIkRpc2NhcmQiKTsK KyNlbmRpZiAvKiBOT1hGRVIgKi8KKyNpZmRlZiBPUzIKKyAgICAgICAgcHJpbnRmKCJcbiIpOwor I2VuZGlmIC8qIE9TMiAqLworICAgICAgICBzaG90Y3ModGNzbCx0Y3NyKTsKKyAgICAgICAgcHJp bnRmKCJcbiIpOworI2lmZGVmIE9TMgorICAgICAgICAvKiBQQyBDb2RlIFBhZ2UgaW5mb3JtYXRp b24gKi8KKyAgICAgICAgeworICAgICAgICAgICAgY2hhciBjcGJ1ZlsxMjhdOworICAgICAgICAg ICAgaW50IGNwbGlzdFsxNl0sIGNwczsKKyAgICAgICAgICAgIGludCBhY3RpdmVjcDsKKyAgICAg ICAgICAgIGNwcyA9IG9zMmdldGNwbGlzdChjcGxpc3QsIHNpemVvZihjcGxpc3QpKTsKKworICAg ICAgICAgICAgc3ByaW50ZihjcGJ1ZiwgICAgICAgICAgICAgIC8qIFNBRkUgKi8KKyAgICAgICAg ICAgICAgICAgICAgIiUzZCwlM2QsJTNkLCUzZCwlM2QsJTNkLCUzZCwlM2QsJTNkLCUzZCwlM2Qs JTNkIiwKKyAgICAgICAgICAgICAgICAgICAgIGNwcyA+IDEgPyBjcGxpc3RbMV0gOiAwLAorICAg ICAgICAgICAgICAgICAgICAgY3BzID4gMiA/IGNwbGlzdFsyXSA6IDAsIGNwcyA+IDMgPyBjcGxp c3RbM10gOiAwLAorICAgICAgICAgICAgICAgICAgICAgY3BzID4gNCA/IGNwbGlzdFs0XSA6IDAs IGNwcyA+IDUgPyBjcGxpc3RbNV0gOiAwLAorICAgICAgICAgICAgICAgICAgICAgY3BzID4gNiA/ IGNwbGlzdFs2XSA6IDAsIGNwcyA+IDcgPyBjcGxpc3RbN10gOiAwLAorICAgICAgICAgICAgICAg ICAgICAgY3BzID4gOCA/IGNwbGlzdFs4XSA6IDAsIGNwcyA+IDkgPyBjcGxpc3RbOV0gOiAwLAor ICAgICAgICAgICAgICAgICAgICAgY3BzID4gMTAgPyBjcGxpc3RbMTBdIDogMCwgY3BzID4gMTEg PyBjcGxpc3RbMTFdIDogMCwKKyAgICAgICAgICAgICAgICAgICAgIGNwcyA+IDEyID8gY3BsaXN0 WzEyXSA6IDAKKyAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICBwcmludGYoIiBD b2RlIFBhZ2VzOlxuIik7CisgICAgICAgICAgICBhY3RpdmVjcCA9IG9zMmdldGNwKCk7CisgICAg ICAgICAgICBpZiAoIGFjdGl2ZWNwICkgeworICAgICAgICAgICAgICBwcmludGYoIiAgICAgQWN0 aXZlOiAlZFxuIixhY3RpdmVjcCk7CisgICAgICAgICAgICAgIGlmICghaXNXaW45NSgpKQorICAg ICAgICAgICAgICAgIHByaW50ZigiICBBdmFpbGFibGU6ICVzXG4iLGNwYnVmKTsKKyAgICAgICAg ICAgIH0gZWxzZQorICAgICAgICAgICAgICBwcmludGYoIiAgICAgQWN0aXZlOiBuL2FcbiIpOwor ICAgICAgICAgICAgcHJpbnRmKCJcbiIpOworICAgICAgICB9CisjZW5kaWYgLyogT1MyICovCisj ZW5kaWYgLyogTk9DU0VUUyAqLworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBTSEZFQTog ICAgICAgICAgICAgICAgICAgICAgIC8qIEZlYXR1cmVzICovCisgICAgICAgIHNob2ZlYSgpOwor ICAgICAgICBicmVhazsKKworI2lmZGVmIENLX1NQRUVECisgICAgICBjYXNlIFNIQ1RMOiAgICAg ICAgICAgICAgICAgICAgICAgLyogQ29udHJvbC1QcmVmaXggdGFibGUgKi8KKyAgICAgICAgc2hv Y3RsKCk7CisgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIENLX1NQRUVEICovCisKKyAgICAgIGNh c2UgU0hFWEk6IHsKKyAgICAgICAgICBleHRlcm4gaW50IGV4aXRoYW5ndXA7CisgICAgICAgICAg cHJpbnRmKCJcbiBFeGl0IHdhcm5pbmcgJXNcbiIsIHhpdHdhcm4gPworICAgICAgICAgICAgICAg ICAoeGl0d2FybiA9PSAxID8gIm9uIiA6ICJhbHdheXMiKSA6ICJvZmYiKTsKKyAgICAgICAgICBw cmludGYoIiBFeGl0IG9uLWRpc2Nvbm5lY3Q6ICVzXG4iLCBzaG93b2ZmKGV4aXRvbmNsb3NlKSk7 CisgICAgICAgICAgcHJpbnRmKCIgRXhpdCBoYW5ndXA6ICVzXG4iLCBzaG93b2ZmKGV4aXRoYW5n dXApKTsKKyAgICAgICAgICBwcmludGYoIiBDdXJyZW50IGV4aXQgc3RhdHVzOiAlZFxuXG4iLCB4 aXRzdGEpOworICAgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgY2FzZSBTSFBSVDogewor I2lmZGVmIFBSSU5UU1dJCisgICAgICAgICAgZXh0ZXJuIGludCBwcmludHRpbW8sIHByaW50ZXJ0 eXBlLCBub3ByaW50ZXI7CisgICAgICAgICAgZXh0ZXJuIGNoYXIgKiBwcmludHRlcm0sICogcHJp bnRzZXA7CisgICAgICAgICAgZXh0ZXJuIGludCBwcm5jczsKKyNpZmRlZiBCUFJJTlQKKyAgICAg ICAgICBleHRlcm4gaW50IHByaW50YmlkaTsKKyNlbmRpZiAvKiBCUFJJTlQgKi8KKyNlbmRpZiAv KiBQUklOVFNXSSAqLworCisjaWZkZWYgSUtTRAorICAgICAgICBpZiAoaW5zZXJ2ZXIgJiYKKyNp ZmRlZiBDS19MT0dJTgorICAgICAgICAgICAgaXNndWVzdAorI2Vsc2UgLyogQ0tfTE9HSU4gKi8K KyAgICAgICAgICAgIDAKKyNlbmRpZiAvKiBDS19MT0dJTiAqLworICAgICAgICAgICAgICkgewor ICAgICAgICAgICAgcHJpbnRmKCJTb3JyeSwgY29tbWFuZCBkaXNhYmxlZC5cclxuIik7CisgICAg ICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOworICAgICAgICB9CisjZW5kaWYgLyogSUtTRCAq LworI2lmZGVmIFBSSU5UU1dJCisgICAgICAgICAgaWYgKG5vcHJpbnRlcikgeworICAgICAgICAg ICAgICBwcmludGYoIlByaW50ZXI6IChub25lKVxuXG4iKTsKKyAgICAgICAgICAgICAgYnJlYWs7 CisgICAgICAgICAgfQorI2VuZGlmIC8qIFBSSU5UU1dJICovCisKKyAgICAgICAgICBwcmludGYo IlByaW50ZXI6ICVzJXNcbiIsCisKKyAgICAgICAgICAgICAgICAgcHJpbnRwaXBlID8gInwgIiA6 ICIiLAorICAgICAgICAgICAgICAgICBwcmludGVybmFtZSA/IHByaW50ZXJuYW1lIDoKKyNpZmRl ZiBPUzIKKyAgICAgICAgICAgICAgICAgIlBSTiIKKyNlbHNlCisgICAgICAgICAgICAgICAgICIo ZGVmYXVsdCkiCisjZW5kaWYgLyogT1MyICovCisgICAgICAgICAgICAgICAgICk7CisjaWZkZWYg UFJJTlRTV0kKKyNpZmRlZiBCUFJJTlQKKyAgICAgICAgICBpZiAocHJpbnRiaWRpKSB7CisgICAg ICAgICAgICAgIHByaW50ZigiIC9CSURJUkVDVElPTkFMXG4iKTsKKyAgICAgICAgICAgICAgaWYg KHBwb3J0c3BlZWQgPiAwKQorICAgICAgICAgICAgICAgIHByaW50ZigiIC9TUEVFRDolbGRcbiIs cHBvcnRzcGVlZCk7CisgICAgICAgICAgICAgIHByaW50ZigiIC9QQVJJVFk6JXNcbiIscGFybmFt KChjaGFyKXBwb3J0cGFyaXR5KSk7CisgICAgICAgICAgICAgIHByaW50ZigiIC9GTE9XOiVzXG4i LAorICAgICAgICAgICAgICAgICAgICAgcHBvcnRmbG93ID09IEZMT19OT05FID8gIk5PTkUiIDoK KyAgICAgICAgICAgICAgICAgICAgIChwcG9ydGZsb3cgPT0gRkxPX1JUU0MgPyAiUlRTL0NUUyIg OiAiWE9OL1hPRkYiKQorICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICB9IGVsc2UK KyAgICAgICAgICAgIHByaW50ZigiIC9PVVRQVVQtT05MWVxuIik7CisjZW5kaWYgLyogQlBSSU5U ICovCisgICAgICAgICAgc3dpdGNoIChwcmludGVydHlwZSkgeworICAgICAgICAgICAgY2FzZSBQ UlRfTk9OOiBwcmludGYoIiAvTk9ORVxuIik7IGJyZWFrOworICAgICAgICAgICAgY2FzZSBQUlRf RklMOiBwcmludGYoIiAvRklMRVxuIik7IGJyZWFrOworICAgICAgICAgICAgY2FzZSBQUlRfUElQ OiBwcmludGYoIiAvUElQRVxuIik7IGJyZWFrOworICAgICAgICAgICAgY2FzZSBQUlRfRE9TOiBw cmludGYoIiAvRE9TLURFVklDRVxuIik7IGJyZWFrOworICAgICAgICAgICAgY2FzZSBQUlRfV0lO OiBwcmludGYoIiAvV0lORE9XUy1RVUVVRVxuIik7IGJyZWFrOworICAgICAgICAgIH0KKyAgICAg ICAgICBwcmludGYoIiAvVElNRU9VVDolZFxuIixwcmludHRpbW8pOworICAgICAgICAgIGlmIChw cmludHRlcm0pIHsKKyAgICAgICAgICAgICAgcHJpbnRmKCIgL0VORC1PRi1KT0ItU1RSSU5HOiIp OworICAgICAgICAgICAgICBzaG9zdHJkZWYocHJpbnR0ZXJtKTsKKyAgICAgICAgICAgICAgcHJp bnRmKCJcbiIpOworICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcHJpbnRmKCIgL0VORC1P Ri1KT0ItU1RSSU5HOihub25lKVxuIik7CisgICAgICAgICAgcHJpbnRmKCIgL0pPQi1IRUFERVIt RklMRTolc1xuIixwcmludHNlcCA/IHByaW50c2VwIDogIihub25lKSIpOworICAgICAgICAgIHBy aW50ZigiIC9DSEFSQUNURVItU0VUOiAlc1xuIix0eHJpbmZvW3BybmNzXS0+a2V5d2QpOworI2Vu ZGlmIC8qIFBSSU5UU1dJICovCisgICAgICAgICAgcHJpbnRmKCJcbiIpOworICAgICAgICAgIGJy ZWFrOworICAgICAgfQorCisgICAgICBjYXNlIFNIQ01EOiB7CisjaWZkZWYgRE9VQkxFUVVPVElO RworICAgICAgICAgIGV4dGVybiBpbnQgZGJscXVvOworI2VuZGlmIC8qIERPVUJMRVFVT1RJTkcg Ki8KKyNpZmRlZiBDS19BVVRPREwKKyAgICAgICAgICBwcmludGYoIiBDb21tYW5kIGF1dG9kb3du bG9hZDogJXNcbiIsc2hvd29mZihjbWRhZGwpKTsKKyNlbHNlCisgICAgICAgICAgcHJpbnRmKCIg Q29tbWFuZCBhdXRvZG93bmxvYWQ6IChub3QgYXZhaWxhYmxlKVxuIik7CisjZW5kaWYgLyogQ0tf QVVUT0RMICovCisgICAgICAgICAgcHJpbnRmKCIgQ29tbWFuZCBieXRlc2l6ZTogJWQgYml0c1xu IiwgKGNtZG1zayA9PSAwMzc3KSA/IDggOiA3KTsKKyAgICAgICAgICBwcmludGYoIiBDb21tYW5k IGVycm9yLWRpc3BsYXk6ICVkXG4iLCBjbWRfZXJyKTsKKyNpZmRlZiBDS19SRUNBTEwKKyAgICAg ICAgICBwcmludGYoIiBDb21tYW5kIHJlY2FsbC1idWZmZXItc2l6ZTogJWRcbiIsY21fcmVjYWxs KTsKKyNlbHNlCisgICAgICAgICAgcHJpbnRmKCIgQ29tbWFuZCByZWNhbGwtYnVmZmVyIG5vdCBh dmFpbGFibGUgaW4gdGhpcyB2ZXJzaW9uXG4iKTsKKyNlbmRpZiAvKiBDS19SRUNBTEwgKi8KKyNp ZmRlZiBDS19SRUNBTEwKKyAgICAgICAgICBwcmludGYoIiBDb21tYW5kIHJldHJ5OiAlc1xuIixz aG93b2ZmKGNtX3JldHJ5KSk7CisjZWxzZQorICAgICAgICAgIHByaW50ZigiIENvbW1hbmQgcmV0 cnkgbm90IGF2YWlsYWJsZSBpbiB0aGlzIHZlcnNpb25cbiIpOworI2VuZGlmIC8qIENLX1JFQ0FM TCAqLworICAgICAgICAgIHByaW50ZigiIENvbW1hbmQgaW50ZXJydXB0aW9uOiAlc1xuIiwgc2hv d29mZihjbWRpbnQpKTsKKyAgICAgICAgICBwcmludGYoIiBDb21tYW5kIHF1b3Rpbmc6ICVzXG4i LCBzaG93b2ZmKGNtZGdxdW8oKSkpOworI2lmZGVmIERPVUJMRVFVT1RJTkcKKyAgICAgICAgICBw cmludGYoIiBDb21tYW5kIGRvdWJsZXF1b3Rpbmc6ICVzXG4iLCBzaG93b2ZmKGRibHF1bykpOwor I2VuZGlmIC8qIERPVUJMRVFVT1RJTkcgKi8KKyAgICAgICAgICBwcmludGYoIiBDb21tYW5kIG1v cmUtcHJvbXB0aW5nOiAlc1xuIiwgc2hvd29mZih4YXNrbW9yZSkpOworICAgICAgICAgIHByaW50 ZigiIENvbW1hbmQgaGVpZ2h0OiAlZFxuIiwgY21kX3Jvd3MpOworICAgICAgICAgIHByaW50Zigi IENvbW1hbmQgd2lkdGg6ICAlZFxuIiwgY21kX2NvbHMpOworI2lmbmRlZiBJS1NET05MWQorI2lm ZGVmIE9TMgorICAgICAgICAgIHByaW50ZigiIENvbW1hbmQgc3RhdHVzbGluZTogJXNcbiIsc2hv d29mZih0dF9zdGF0dXNbVkNNRF0pKTsKKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBJS1NE T05MWSAqLworI2lmZGVmIExPQ1VTCisgICAgICAgICAgcHJpbnRmKCIgTG9jdXM6ICAgICAgICAg ICVzIiwKKyAgICAgICAgICAgICAgICAgYXV0b2xvY3VzID8gKGF1dG9sb2N1cyA9PSAyID8gImFz ayIgOiAiYXV0byIpIDoKKwkJIChsb2N1cyA/ICJsb2NhbCIgOiAicmVtb3RlIikpOworICAgICAg ICAgIGlmIChhdXRvbG9jdXMpCisgICAgICAgICAgICBwcmludGYoIiAoJXMpIiwgbG9jdXMgPyAi bG9jYWwiIDogInJlbW90ZSIpOworICAgICAgICAgIHByaW50ZigiXG4iKTsKKyNlbmRpZiAvKiBM T0NVUyAqLworICAgICAgICAgIHByaW50ZigiIEhpbnRzOiAgICAgICAgICAlc1xuIiwgc2hvd29m ZihoaW50cykpOworICAgICAgICAgIHByaW50ZigiIFF1aWV0OiAgICAgICAgICAlc1xuIiwgc2hv d29mZihxdWlldCkpOworICAgICAgICAgIHByaW50ZigiIE1heGltdW0gY29tbWFuZCBsZW5ndGg6 ICVkXG4iLCBDTURCTCk7CisjaWZuZGVmIE5PU1BMCisgICAgICAgICAgeworICAgICAgICAgICAg ICBjaGFyICogczsKKyAgICAgICAgICAgICAgaW50IGs7CisgICAgICAgICAgICAgIHByaW50Zigi IE1heGltdW0gbnVtYmVyIG9mIG1hY3JvczogJWRcbiIsIE1BQ19NQVgpOworICAgICAgICAgICAg ICBwcmludGYoIiBNYWNyb3MgZGVmaW5lZDogJWRcbiIsIG5tYWMpOworICAgICAgICAgICAgICBw cmludGYoIiBNYXhpbXVtIG1hY3JvIGRlcHRoOiAlZFxuIiwgTUFDTEVWRUwpOworICAgICAgICAg ICAgICBwcmludGYoIiBNYXhpbXVtIFRBS0UgZGVwdGg6ICVkXG4iLCBNQVhUQUtFKTsKKyAgICAg ICAgICAgICAgcyA9ICIobm90IGRlZmluZWQpIjsKKyAgICAgICAgICAgICAgayA9IG1sb29rKG1h Y3RhYiwib25fdW5rbm93bl9jb21tYW5kIixubWFjKTsKKyAgICAgICAgICAgICAgaWYgKGsgPiAt MSkgaWYgKG1hY3RhYltrXS5tdmFsKSBzID0gbWFjdGFiW2tdLm12YWw7CisgICAgICAgICAgICAg IHByaW50ZigiIE9OX1VOS05PV05fQ09NTUFORDogJXNcbiIscyk7CisgICAgICAgICAgfQorI2Vu ZGlmIC8qIE5PU1BMICovCisjaWZkZWYgVU5JWAorI2lmbmRlZiBOT0pDCisgICAgICAgICAgcHJp bnRmKCIgU3VzcGVuZDogJXNcbiIsIHNob3dvZmYoeHN1c3BlbmQpKTsKKyNlbmRpZiAvKiBOT0pD ICovCisjZW5kaWYgLyogVU5JWCAqLworICAgICAgICAgIHByaW50ZigiIEFjY2VzcyB0byBleHRl cm5hbCBjb21tYW5kcyBhbmQgcHJvZ3JhbXMlcyBhbGxvd2VkXG4iLAorI2lmbmRlZiBOT1BVU0gK KyAgICAgICAgICAgICAgICAgIW5vcHVzaCA/ICIiIDoKKyNlbmRpZiAvKiBOT1BVU0ggKi8KKyAg ICAgICAgICAgICAgICAgICIgbm90Iik7CisgICAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyNp Zm5kZWYgTk9TUEwKKyAgICAgIGNhc2UgU0hBTFJNOgorICAgICAgICBpZiAoY2tfYWxhcm0pCisg ICAgICAgICAgcHJpbnRmKCJBbGFybSBhdCAlcyAlc1xuIixhbHJtX2RhdGUsYWxybV90aW1lKTsK KyAgICAgICAgZWxzZQorICAgICAgICAgIHByaW50ZigiKG5vIGFsYXJtIHNldClcbiIpOworICAg ICAgICBicmVhazsKKyNlbmRpZiAvKiBOT1NQTCAqLworCisjaWZuZGVmIE5PTVNFTkQKKyAgICAg IGNhc2UgU0hTRkw6IHsKKyAgICAgICAgICBleHRlcm4gc3RydWN0IGZpbGVsaXN0ICogZmlsZWhl YWQ7CisgICAgICAgICAgaWYgKCFmaWxlaGVhZCkgeworICAgICAgICAgICAgICBwcmludGYoInNl bmQtbGlzdCBpcyBlbXB0eVxuIik7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg c3RydWN0IGZpbGVsaXN0ICogZmxwOworICAgICAgICAgICAgICBjaGFyICogczsKKyAgICAgICAg ICAgICAgZmxwID0gZmlsZWhlYWQ7CisgICAgICAgICAgICAgIHdoaWxlIChmbHApIHsKKyAgICAg ICAgICAgICAgICAgIHMgPSBmbHAtPmZsX2FsaWFzOworICAgICAgICAgICAgICAgICAgaWYgKCFz KSBzID0gIihub25lKSI7CisgICAgICAgICAgICAgICAgICBwcmludGYoIiVzLCBtb2RlOiAlcywg YWxpYXM6ICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgIGZscC0+ZmxfbmFtZSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICBnZm1vZGUoZmxwLT5mbF9tb2RlLDApLAorICAgICAgICAg ICAgICAgICAgICAgICAgIHMKKyAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAg ICAgICAgICAgZmxwID0gZmxwLT5mbF9uZXh0OworICAgICAgICAgICAgICB9CisgICAgICAgICAg fQorICAgICAgfQorICAgICAgYnJlYWs7CisjZW5kaWYgLyogTk9NU0VORCAqLworCisjaWZkZWYg Q0tYWENIQVIKKyAgICAgIGNhc2UgU0hEQkw6CisgICAgICAgIHNob2RibCgpOworICAgICAgICBi cmVhazsKKyNlbmRpZiAvKiBDS1hYQ0hBUiAqLworCisjaWZuZGVmIE5PUFVTSAorI2lmbmRlZiBO T0ZSSUxMUworICAgICAgY2FzZSBTSEVESVQ6CisgICAgICAgIGlmICghZWRpdG9yWzBdKSB7Cisg ICAgICAgICAgICBzID0gZ2V0ZW52KCJFRElUT1IiKTsKKyAgICAgICAgICAgIGlmIChzKSBja3N0 cm5jcHkoZWRpdG9yLHMsQ0tNQVhQQVRIKTsKKyAgICAgICAgfQorICAgICAgICBwcmludGYoIlxu IGVkaXRvcjogICVzXG4iLCBlZGl0b3JbMF0gPyBlZGl0b3IgOiAiKG5vbmUpIik7CisgICAgICAg IGlmIChlZGl0b3JbMF0pIHsKKyAgICAgICAgICAgIHByaW50ZigiIG9wdGlvbnM6ICVzXG4iLCBl ZGl0b3B0c1swXSA/IGVkaXRvcHRzIDogIihub25lKSIpOworICAgICAgICAgICAgcHJpbnRmKCIg ZmlsZTogICAgJXNcbiIsIGVkaXRmaWxlWzBdID8gZWRpdGZpbGUgOiAiKG5vbmUpIik7CisgICAg ICAgIH0KKyAgICAgICAgcHJpbnRmKCJcbiIpOworICAgICAgICBicmVhazsKKworI2lmZGVmIEJS T1dTRVIKKyAgICAgIGNhc2UgU0hCUk9XU0U6CisgICAgICAgIGlmICghYnJvd3NlclswXSkgewor ICAgICAgICAgICAgcyA9IGdldGVudigiQlJPV1NFUiIpOworICAgICAgICAgICAgaWYgKHMpIGNr c3RybmNweShicm93c2VyLHMsQ0tNQVhQQVRIKTsKKyAgICAgICAgfQorICAgICAgICBwcmludGYo IlxuIGJyb3dzZXI6ICVzXG4iLCBicm93c2VyWzBdID8gYnJvd3NlciA6ICIobm9uZSkiKTsKKyAg ICAgICAgaWYgKGJyb3dzZXJbMF0pIHsKKyAgICAgICAgICAgIHByaW50ZigiIG9wdGlvbnM6ICVz XG4iLCBicm93c29wdHNbMF0gPyBicm93c29wdHMgOiAiKG5vbmUpIik7CisgICAgICAgICAgICBw cmludGYoIiB1cmw6ICAgICAlc1xuIiwgYnJvd3N1cmxbMF0gPyBicm93c3VybCA6ICIobm9uZSki KTsKKyAgICAgICAgfQorICAgICAgICBwcmludGYoIlxuIik7CisgICAgICAgIGJyZWFrOworI2Vu ZGlmIC8qIEJST1dTRVIgKi8KKyNlbmRpZiAvKiAgTk9GUklMTFMgKi8KKyNlbmRpZiAvKiBOT1BV U0ggKi8KKworI2lmbmRlZiBOT0xPQ0FMCisjaWZkZWYgQ0tfVEFQSQorICAgICAgY2FzZSBTSFRB UEk6ICAgICAgICAgICAgICAgICAgICAgIC8qIFRBUEkgb3B0aW9ucyAqLworI2lmZGVmIElLU0QK KyAgICAgICAgaWYgKGluc2VydmVyKSB7CisgICAgICAgICAgICBwcmludGYoIlNvcnJ5LCBjb21t YW5kIGRpc2FibGVkLlxyXG4iKTsKKyAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7Cisg ICAgICAgIH0KKyNlbmRpZiAvKiBJS1NEICovCisgICAgICAgIHNob3RhcGkoMCk7CisgICAgICAg IGJyZWFrOworICAgICAgY2FzZSBTSFRBUElfTDogICAgICAgICAgICAgICAgICAgIC8qIFRBUEkg TG9jYXRpb25zICovCisjaWZkZWYgSUtTRAorICAgICAgICBpZiAoaW5zZXJ2ZXIpIHsKKyAgICAg ICAgICAgIHByaW50ZigiU29ycnksIGNvbW1hbmQgZGlzYWJsZWQuXHJcbiIpOworICAgICAgICAg ICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKyAgICAgICAgfQorI2VuZGlmIC8qIElLU0QgKi8KKyAg ICAgICAgc2hvdGFwaSgxKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIFNIVEFQSV9NOiAg ICAgICAgICAgICAgICAgICAgLyogVEFQSSBNb2RlbSAqLworI2lmZGVmIElLU0QKKyAgICAgICAg aWYgKGluc2VydmVyKSB7CisgICAgICAgICAgICBwcmludGYoIlNvcnJ5LCBjb21tYW5kIGRpc2Fi bGVkLlxyXG4iKTsKKyAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7CisgICAgICAgIH0K KyNlbmRpZiAvKiBJS1NEICovCisgICAgICAgIHNob3RhcGkoMik7CisgICAgICAgIGJyZWFrOwor ICAgICAgY2FzZSBTSFRBUElfQzogICAgICAgICAgICAgICAgICAgIC8qIFRBUEkgQ29tbSAqLwor I2lmZGVmIElLU0QKKyAgICAgICAgaWYgKGluc2VydmVyKSB7CisgICAgICAgICAgICBwcmludGYo IlNvcnJ5LCBjb21tYW5kIGRpc2FibGVkLlxyXG4iKTsKKyAgICAgICAgICAgIHJldHVybihzdWNj ZXNzID0gMCk7CisgICAgICAgIH0KKyNlbmRpZiAvKiBJS1NEICovCisgICAgICAgIHNob3RhcGko Myk7CisgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIENLX1RBUEkgKi8KKworICAgICAgY2FzZSBT SFRDUDogICAgICAgICAgICAgICAgICAgICAgIC8qIFNIT1RDUCAqLworICAgICAgICBwcmludGYo IlxuIik7CisgICAgICAgIHNob3RjcCgwKTsKKyAgICAgICAgcHJpbnRmKCJcbiIpOworICAgICAg ICBicmVhazsKKworI2lmZGVmIFROQ09ERQorICAgICAgY2FzZSBTSFRFTDogICAgICAgICAgICAg ICAgICAgICAgIC8qIFRFTE5FVCAqLworICAgICAgICBwcmludGYoIlxuIik7CisgICAgICAgIHNo b3RlbCgwKTsKKyAgICAgICAgcHJpbnRmKCJcbiIpOworICAgICAgICBicmVhazsKKworICAgICAg Y2FzZSBTSFRPUFQ6ICAgICAgICAgICAgICAgICAgICAgIC8qIFRFTE5FVCBPUFRJT05TICovCisg ICAgICAgIHByaW50ZigiXG4iKTsKKyAgICAgICAgc2hvdG9wdCgwKTsKKyAgICAgICAgcHJpbnRm KCJcbiIpOworICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBUTkNPREUgKi8KKworI2lmZGVmIENL X1RSSUdHRVIKKyAgICAgIGNhc2UgU0hUUklHOiB7CisgICAgICAgICAgZXh0ZXJuIGNoYXIgKiB0 dF90cmlnZ2VyW10sICogdHJpZ2dlcnZhbDsKKyAgICAgICAgICBpbnQgaTsKKyAgICAgICAgICBp ZiAoIXR0X3RyaWdnZXJbMF0pIHsKKyAgICAgICAgICAgICAgcHJpbnRmKCIgVHJpZ2dlcnM6IChu b25lKVxuIik7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgcHJpbnRmKCIgVHJp Z2dlcnM6XG4iKTsKKyAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IFRSSUdHRVJTOyBpKysp IHsKKyAgICAgICAgICAgICAgICAgIGlmICghdHRfdHJpZ2dlcltpXSkKKyAgICAgICAgICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBwcmludGYoIiAgXCIlc1wiXG4iLHR0X3Ry aWdnZXJbaV0pOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIHByaW50ZigiIE1vc3Qg cmVjZW50IHRyaWdnZXIgZW5jb3VudGVyZWQ6ICIpOworICAgICAgICAgICAgICBpZiAodHJpZ2dl cnZhbCkKKyAgICAgICAgICAgICAgICBwcmludGYoIlwiJXNcIlxuIix0cmlnZ2VydmFsKTsKKyAg ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHByaW50ZigiKG5vbmUpXG4iKTsKKyAg ICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisgICAgICB9CisjZW5kaWYgLyogQ0tfVFJJR0dF UiAqLworI2VuZGlmIC8qIE5PTE9DQUwgKi8KKworI2lmbmRlZiBOT1NQTAorICAgICAgY2FzZSBT SElOUDoKKyAgICAgICAgc2hvaW5wdXQoKTsKKyAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogTk9T UEwgKi8KKworICAgICAgY2FzZSBTSExPRzogeworI2lmbmRlZiBNQUMKKyNpZmRlZiBJS1NECisg ICAgICAgICAgaWYgKGluc2VydmVyICYmCisjaWZkZWYgQ0tfTE9HSU4KKyAgICAgICAgICAgICAg aXNndWVzdAorI2Vsc2UgLyogQ0tfTE9HSU4gKi8KKyAgICAgICAgICAgICAgMAorI2VuZGlmIC8q IENLX0xPR0lOICovCisgICAgICAgICAgICAgKSB7CisgICAgICAgICAgICBwcmludGYoIlNvcnJ5 LCBjb21tYW5kIGRpc2FibGVkLlxyXG4iKTsKKyAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0g MCk7CisgICAgICAgIH0KKyNlbmRpZiAvKiBJS1NEICovCisjaWZkZWYgREVCVUcKKyAgICAgICAg ICBwcmludGYoIlxuIERlYnVnIGxvZzogICAgICAgJXMiLCBkZWJsb2cgPyBkZWJmaWwgOiAiKG5v bmUpIik7CisJICB7CisJICAgICAgZXh0ZXJuIGludCBkZWJ0aW07CisJICAgICAgaWYgKGRlYnRp bSkgcHJpbnRmKCIgKHRpbWVzdGFtcHMpIik7CisJICAgICAgcHJpbnRmKCJcbiIpOworCSAgfQor I2VuZGlmIC8qIERFQlVHICovCisjaWZuZGVmIE5PWEZFUgorICAgICAgICAgIHByaW50ZigiIFBh Y2tldCBsb2c6ICAgICAgJXNcbiIsICAgcGt0bG9nID8gcGt0ZmlsIDogIihub25lKSIpOworI2Vu ZGlmIC8qIE5PWEZFUiAqLworI2lmbmRlZiBOT0xPQ0FMCisgICAgICAgICAgcHJpbnRmKCIgU2Vz c2lvbiBsb2c6ICAgICAlcyIsICAgc2VzbG9nID8gc2VzZmlsIDogIihub25lKSIpOworCSAgewor CSAgICAgIGV4dGVybiBpbnQgc2Vzc2Z0LCBzbG9ndHMsIHNsb2dudWw7CisJICAgICAgc3dpdGNo IChzZXNzZnQpIHsKKwkJY2FzZSBYWUZUX1Q6IHByaW50ZigiICh0ZXh0KSIpOyBicmVhazsKKwkJ Y2FzZSBYWUZUX0I6IHByaW50ZigiIChiaW5hcnkpIik7IGJyZWFrOworCQljYXNlIFhZRlRfRDog cHJpbnRmKCIgKGRlYnVnKSIpOyBicmVhazsKKwkgICAgICB9CisJICAgICAgaWYgKHNsb2d0cykg cHJpbnRmKCIodGltZXN0YW1wZWQpIik7CisJICAgICAgaWYgKHNsb2dudWwpIHByaW50ZigiKG51 bGwtcGFkZGVkKSIpOworCSAgICAgIHByaW50ZigiXG4iKTsKKwkgIH0KKworI2VuZGlmIC8qIE5P TE9DQUwgKi8KKyNpZmRlZiBUTE9HCisgICAgICAgICAgcHJpbnRmKCIgVHJhbnNhY3Rpb24gbG9n OiAlcyAoJXMpXG4iLAorICAgICAgICAgICAgICAgICAodHJhbG9nID8gKCp0cmFmaWwgPyB0cmFm aWwgOiAiKG5vbmUpIikgOiAiKG5vbmUpIiksCisgICAgICAgICAgICAgICAgICh0bG9nZm10ID8g KCh0bG9nZm10ID09IDIpID8gImZ0cCIgOiAidmVyYm9zZSIpIDogImJyaWVmIikKKyAgICAgICAg ICAgICAgICAgKTsKKyNlbmRpZiAvKiBUTE9HICovCisjaWZkZWYgQ0tMT0dESUFMCisgICAgICAg ICAgICBwcmludGYoIiBDb25uZWN0aW9uIGxvZzogICVzXG4iLCBkaWFsb2cgPyBkaWFmaWwgOiAi KG5vbmUpIik7CisjZW5kaWYgLyogQ0tMT0dESUFMICovCisgICAgICAgICAgcHJpbnRmKCJcbiIp OworI2VuZGlmIC8qIE1BQyAqLworICAgICAgICAgIGJyZWFrOworICAgICAgfQorCisjaWZuZGVm IE5PU1BMCisgICAgICBjYXNlIFNIT1VUUDogICAgICAgICAgICAgICAgICAgICAgLyogT1VUUFVU ICovCisgICAgICAgIHNob291dHB1dCgpOworICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBOT1NQ TCAqLworCisjaWZkZWYgUEFUVEVSTlMKKyAgICAgIGNhc2UgU0hPUEFUOiAgICAgICAgICAgICAg ICAgICAgICAvKiBQQVRURVJOUyAqLworICAgICAgICBzaG9wYXQoKTsKKyAgICAgICAgYnJlYWs7 CisjZW5kaWYgLyogUEFUVEVSTlMgKi8KKworI2lmZGVmIFNUUkVBTUlORworICAgICAgY2FzZSBT SE9TVFI6IHsgICAgICAgICAgICAgICAgICAgIC8qIFNUUkVBTUlORyAqLworICAgICAgICAgIGV4 dGVybiBpbnQgc3RyZWFtcnEsIGNsZWFycnEsIGNsZWFyZWQ7CisgICAgICAgICAgZXh0ZXJuIGxv bmcgdGZjcHM7CisgICAgICAgICAgZGVidWcoRjEwMSwiU0hPVyBSRUxJQUJMRSByZWxpYWJsZSIs IiIscmVsaWFibGUpOworICAgICAgICAgIHByaW50ZigiXG4gUmVsaWFibGU6ICAgICAlc1xuIixz aG93b29hKHJlbGlhYmxlKSk7CisgICAgICAgICAgcHJpbnRmKCIgQ2xlYXJjaGFubmVsOiAlc1xu IixzaG93b29hKGNsZWFycnEpKTsKKyAgICAgICAgICBwcmludGYoIiBTdHJlYW1pbmc6ICAgICVz XG5cbiIsc2hvd29vYShzdHJlYW1ycSkpOworICAgICAgICAgIGlmICgoIWxvY2FsICYmIChzdHJl YW1ycSA9PSBTRVRfT04pKSB8fAorICAgICAgICAgICAgICAoc3RyZWFtcnEgPT0gU0VUX0FVVE8g JiYgcmVsaWFibGUpKQorICAgICAgICAgICAgcHJpbnRmKCIgU3RyZWFtaW5nIHdpbGwgYmUgZG9u ZSBpZiByZXF1ZXN0ZWQuXG4iKTsKKyAgICAgICAgICBlbHNlIGlmICgoc3RyZWFtcnEgPT0gU0VU X09GRikgfHwKKyAgICAgICAgICAgICAgICAgICAoKHN0cmVhbXJxID09IFNFVF9BVVRPKSAmJiAh cmVsaWFibGUpKQorICAgICAgICAgICAgcHJpbnRmKCIgU3RyZWFtaW5nIHdpbGwgbm90IGJlIHJl cXVlc3RlZCBhbmQgd2lsbCBub3QgYmUgZG9uZS5cbiIpOworICAgICAgICAgIGVsc2UgaWYgKChz dHJlYW1ycSA9PSBTRVRfT04pIHx8CisgICAgICAgICAgICAgICAgICAgKChzdHJlYW1ycSA9PSBT RVRfQVVUTykgJiYgcmVsaWFibGUpKQorICAgICAgICAgICAgcHJpbnRmKAorIiBTdHJlYW1pbmcg d2lsbCBiZSByZXF1ZXN0ZWQgYW5kIHdpbGwgYmUgZG9uZSBpZiB0aGUgb3RoZXIgS2VybWl0IGFn cmVlcy5cbiIpOworICAgICAgICAgIHByaW50ZigiIExhc3QgdHJhbnNmZXI6ICVzc3RyZWFtaW5n JXMsICVsZCBjcHMuXG4iLAorICAgICAgICAgICAgICAgICBzdHJlYW1lZCA+IDAgPyAiIiA6ICJu byAiLAorICAgICAgICAgICAgICAgICBjbGVhcmVkID8gIiwgY2xlYXJjaGFubmVsIiA6ICIiLAor ICAgICAgICAgICAgICAgICB0ZmNwcworICAgICAgICAgICAgICAgICApOworICAgICAgICAgIHBy aW50ZigiXG4iKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgIH0KKyNlbmRpZiAvKiBTVFJFQU1J TkcgKi8KKworICAgICAgY2FzZSBTSE9JS1M6CisgICAgICAgIHJldHVybihzaG9faWtzKCkpOwor ICAgICAgICBicmVhazsKKworI2lmZGVmIENLX0FVVEhFTlRJQ0FUSU9OCisgICAgICBjYXNlIFNI T0FVVEg6CisgICAgICAgIHJldHVybihzaG9fYXV0aCgwKSk7CisjZW5kaWYgLyogQ0tfQVVUSEVO VElDQVRJT04gKi8KKworI2lmbmRlZiBOT0ZUUAorICAgICAgY2FzZSBTSE9GVFA6IHsKKyNpZmRl ZiBJS1NECisgICAgICAgIGlmIChpbnNlcnZlcikgeworICAgICAgICAgICAgcHJpbnRmKCJTb3Jy eSwgY29tbWFuZCBkaXNhYmxlZC5cclxuIik7CisgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9 IDApOworICAgICAgICB9CisjZW5kaWYgLyogSUtTRCAqLworI2lmZGVmIFNZU0ZUUAorICAgICAg ICB7CisgICAgICAgICAgICBleHRlcm4gY2hhciBmdHBhcHBbXSwgZnRwb3B0c1tdOworICAgICAg ICAgICAgcHJpbnRmKCIgZnRwLWNsaWVudDogICVzXG4iLCBmdHBhcHBbMF0gPyBmdHBhcHAgOiAi KG5vbmUpIik7CisgICAgICAgICAgICBpZiAoZnRwYXBwWzBdKQorICAgICAgICAgICAgICBwcmlu dGYoIiBmdHAgb3B0aW9uczogJXNcbiIsIGZ0cG9wdHNbMF0gPyBmdHBvcHRzIDogIihub25lKSIp OworICAgICAgICB9CisjZWxzZQorI2lmZGVmIE5FV0ZUUAorICAgICAgICBzaG9mdHAoMCk7Cisj ZWxzZQorICAgICAgICBwcmludGYoIihObyBGVFAgY2xpZW50IGluY2x1ZGVkIGluIHRoaXMgdmVy c2lvbiBvZiBLZXJtaXQuKVxuIik7CisjZW5kaWYgLyogTkVXRlRQICovCisjZW5kaWYgLyogU1lT RlRQICovCisgICAgICAgIGJyZWFrOworICAgICAgfQorI2VuZGlmIC8qIE5PRlRQICovCisKKyNp Zm5kZWYgTk9DTURMCisgICAgICBjYXNlIFNIWE9QVDogeworI2lmZGVmIElLU0RCCisgICAgICAg ICAgZXh0ZXJuIGludCBkYmVuYWJsZWQ7CisgICAgICAgICAgZXh0ZXJuIGNoYXIgKiBkYmZpbGUs ICogZGJkaXI7CisjZW5kaWYgLyogSUtTREIgKi8KKyNpZmRlZiBDS1dUTVAKKyAgICAgICAgICBl eHRlcm4gaW50IGNreHd0bXA7CisgICAgICAgICAgZXh0ZXJuIGNoYXIgKiB3dG1wZmlsZTsKKyNl bmRpZiAvKiBDS1dUTVAgKi8KKyNpZmRlZiBDS19MT0dJTgorICAgICAgICAgIGV4dGVybiBpbnQg Y2t4YW5vbiwgeGZlcmxvZywgbG9naW50aW1vOworICAgICAgICAgIGV4dGVybiBjaGFyICogeGZl cmZpbGU7CisjaWZkZWYgVU5JWAorICAgICAgICAgIGV4dGVybiBpbnQgY2t4cHJpdjsKKyNlbmRp ZiAvKiBVTklYICovCisjaWZkZWYgQ0tfUEVSTVMKKyAgICAgICAgICBleHRlcm4gaW50IGNreHBl cm1zOworI2VuZGlmIC8qIENLX1BFUk1TICovCisjZW5kaWYgLyogQ0tfTE9HSU4gKi8KKyAgICAg ICAgICBleHRlcm4gY2hhciAqIGJhbm5lcmZpbGUsICogaGVscGZpbGU7CisKKyNpZmRlZiBJS1NE CisgICAgICAgICAgaWYgKGluc2VydmVyICYmCisjaWZkZWYgQ0tfTE9HSU4KKyAgICAgICAgICAg ICAgaXNndWVzdAorI2Vsc2UgLyogQ0tfTE9HSU4gKi8KKyAgICAgICAgICAgICAgMAorI2VuZGlm IC8qIENLX0xPR0lOICovCisgICAgICAgICAgICAgICkgeworICAgICAgICAgICAgICBwcmludGYo IlNvcnJ5LCBjb21tYW5kIGRpc2FibGVkLlxyXG4iKTsKKyAgICAgICAgICAgICAgcmV0dXJuKHN1 Y2Nlc3MgPSAwKTsKKyAgICAgICAgICB9CisjZW5kaWYgLyogSUtTRCAqLworICAgICAgICAgIHBy aW50ZigiXG4iKTsKKyAgICAgICAgICBpZiAoIWNtZGludCkKKyAgICAgICAgICAgIHByaW50Zigi IC0tbm9pbnRlcnJ1cHRzXG4iKTsKKyAgICAgICAgICBwcmludGYoIiAtLWJhbm5lcmZpbGU9JXNc biIsYmFubmVyZmlsZSA/IGJhbm5lcmZpbGUgOiAiKG51bGwpIik7CisgICAgICAgICAgcHJpbnRm KCIgLS1jZGZpbGU6JXNcbiIsY2Rtc2dzdHIgPyBjZG1zZ3N0ciA6ICIobnVsbCkiKTsKKyAgICAg ICAgICBwcmludGYoIiAtLWNkbWVzc2FnZTolZFxuIixzcnZjZG1zZyk7CisgICAgICAgICAgcHJp bnRmKCIgLS1oZWxwZmlsZTolZFxuIixoZWxwZmlsZSk7CisgICAgICAgICAgaWYgKGluc2VydmVy KSB7CisgICAgICAgICAgICAgIHByaW50ZigiXG4iKTsKKyAgICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgICAgfQorI2lmZGVmIENLU1lTTE9HCisjaWZkZWYgU1lTTE9HTEVWRUwKKyAgICAgICAg ICBwcmludGYoIiAtLXN5c2xvZzolZCAoZm9yY2VkKVxuIixja3hzeXNsb2cpOworI2Vsc2UKKyAg ICAgICAgICBwcmludGYoIiAtLXN5c2xvZzolZFxuIixja3hzeXNsb2cpOworI2VuZGlmIC8qIFNZ U0xPR0xFVkVMICovCisjZW5kaWYgLyogQ0tTWVNMT0cgKi8KKyNpZmRlZiBDS1dUTVAKKyAgICAg ICAgICBwcmludGYoIiAtLXd0bXBsb2c6JWRcbiIsY2t4d3RtcCk7CisgICAgICAgICAgcHJpbnRm KCIgLS13dG1wZmlsZT0lc1xuIix3dG1wZmlsZSA/IHd0bXBmaWxlIDogIihudWxsKSIpOworI2Vu ZGlmIC8qIENLV1RNUCAqLworI2lmZGVmIElLU0QKKyNpZmRlZiBDS19MT0dJTgorICAgICAgICAg IHByaW50ZigiIC0tYW5vbnltb3VzOiVkXG4iLGNreGFub24pOworI2lmZGVmIFVOSVgKKyAgICAg ICAgICBwcmludGYoIiAtLXByaXZpZDolZFxuIixja3hwcml2KTsKKyNlbmRpZiAvKiBVTklYICov CisjaWZkZWYgQ0tfUEVSTVMKKyAgICAgICAgICBwcmludGYoIiAtLXBlcm1pc3Npb246JTA0b1xu Iixja3hwZXJtcyk7CisjZW5kaWYgLyogQ0tfUEVSTVMgKi8KKyAgICAgICAgICBwcmludGYoIiAt LWluaXRmaWxlOiVzXG4iLGFub25maWxlID8gYW5vbmZpbGUgOiAiKG51bGwpIik7CisgICAgICAg ICAgcHJpbnRmKCIgLS11c2VyZmlsZTolc1xuIix1c2VyZmlsZSA/IHVzZXJmaWxlIDogIihudWxs KSIpOworICAgICAgICAgIHByaW50ZigiIC0tcm9vdDolc1xuIixhbm9ucm9vdCA/IGFub25yb290 IDogIihudWxsKSIpOworICAgICAgICAgIHByaW50ZigiIC0teGZlcmxvZz0lZFxuIix4ZmVybG9n KTsKKyAgICAgICAgICBwcmludGYoIiAtLXhmZXJmaWxlPSVzXG4iLHhmZXJmaWxlID8geGZlcmZp bGUgOiAiKG51bGwpIik7CisgICAgICAgICAgcHJpbnRmKCIgLS10aW1lb3V0PSVkXG4iLGxvZ2lu dGltbyk7CisjZW5kaWYgLyogQ0tfTE9HSU4gKi8KKyNpZmRlZiBJS1NEQgorICAgICAgICAgIHBy aW50ZigiIC0tZGF0YWJhc2U9JWRcbiIsZGJlbmFibGVkKTsKKyAgICAgICAgICBwcmludGYoIiAt LWRiZmlsZT0lc1xuIixkYmZpbGUgPyBkYmZpbGUgOiAiKG51bGwpIik7CisgICAgICAgICAgaWYg KGRiZGlyKQorICAgICAgICAgICAgcHJpbnRmKCIgICAoZGIgZGlyZWN0b3J5PVslc10pXG4iLGRi ZGlyKTsKKyNlbmRpZiAvKiBJS1NEQiAqLworI2lmZGVmIElLU0RDT05GCisgICAgICAgICAgcHJp bnRmKCIgSUtTRCBjb25mPSVzXG4iLGlrc2Rjb25mKTsKKyNlbmRpZiAvKiBJS1NEQ09ORiAqLwor I2VuZGlmIC8qIElLU0QgKi8KKyAgICAgICAgICBwcmludGYoIlxuIik7CisgICAgICAgICAgYnJl YWs7CisgICAgICB9CisjZW5kaWYgLyogTk9DTURMICovCisKKyAgICAgIGNhc2UgU0hDRDogewor CSAgZXh0ZXJuIGNoYXIgKiBteWhvbWU7CisJICBzID0gZ2V0ZW52KCJDRFBBVEgiKTsKKwkgIGlm ICghcykgcyA9ICIobm9uZSkiOworCSAgcHJpbnRmKCJcbiBjdXJyZW50IGRpcmVjdG9yeTogICVz XG4iLCB6Z3RkaXIoKSk7CisJICBwcmludGYoIiBwcmV2aW91cyBkaXJlY3Rvcnk6ICVzXG4iLCBw cmV2ZGlyID8gcHJldmRpciA6ICIobm9uZSkiKTsKKwkgIHByaW50ZigiIGNkIGhvbWU6ICAgICAg ICAgICAgJXNcbiIsIGhvbWVwYXRoKCkpOworCSAgcHJpbnRmKCIgY2QgcGF0aDogICAgICAgICAg ICAlc1xuIiwgY2tjZHBhdGggPyBja2NkcGF0aCA6IHMpOworCSAgcHJpbnRmKCIgY2QgbWVzc2Fn ZTogICAgICAgICAlc1xuIiwgc2hvd29mZihzcnZjZG1zZyAmIDIpKTsKKwkgIHByaW50ZigiIHNl cnZlciBjZC1tZXNzYWdlOiAgJXNcbiIsIHNob3dvZmYoc3J2Y2Rtc2cgJiAxKSk7CisJICBwcmlu dGYoIiBjZCBtZXNzYWdlIGZpbGU6ICAgICVzXG5cbiIsY2Rtc2dzdHIgPyBjZG1zZ3N0ciA6ICIo bm9uZSkiKTsKKwkgIGJyZWFrOworICAgICAgfQorI2lmbmRlZiBOT0NTRVRTCisgICAgICBjYXNl IFNIQVNTT0M6CisgICAgICAgIChWT0lEKSBzaG93YXNzb2MoKTsKKyAgICAgICAgYnJlYWs7Cisj ZW5kaWYgLyogTk9DU0VUUyAqLworCisjaWZkZWYgQ0tMT0dESUFMCisgICAgICBjYXNlIFNIQ09O Tlg6CisjaWZkZWYgTkVXRlRQCisgICAgICAgIGlmIChmdHBpc2Nvbm5lY3RlZCgpKSB7CisgICAg ICAgICAgICBleHRlcm4gY2hhciBjeGxvZ2J1ZltdOworICAgICAgICAgICAgZG9sb2dzaG93KFdf RlRQIHwgMSk7CisgICAgICAgICAgICBpZiAoY3hsb2didWZbMF0pCisgICAgICAgICAgICAgIGRv bG9nc2hvdygxKTsKKyAgICAgICAgfSBlbHNlIHsKKyNlbmRpZiAvKiBORVdGVFAgKi8KKyAgICAg ICAgICAgIGRvbG9nc2hvdygxKTsKKyNpZmRlZiBORVdGVFAKKyAgICAgICAgfQorI2VuZGlmIC8q IE5FV0ZUUCAqLworICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBDS0xPR0RJQUwgKi8KKworICAg ICAgY2FzZSBTSE9QVFM6CisgICAgICAgIG9wdGxpbmVzID0gMDsKKyNpZm5kZWYgTk9GUklMTFMK KyAgICAgICAgKFZPSUQpIHNob3dkZWxvcHRzKCk7CisjZW5kaWYgLyogTk9GUklMTFMgKi8KKyNp ZmRlZiBET01ZRElSCisgICAgICAgIChWT0lEKSBzaG93ZGlyb3B0cygpOworI2VuZGlmIC8qIERP TVlESVIgKi8KKyNpZmRlZiBDS1BVUkdFCisgICAgICAgIChWT0lEKSBzaG93cHVyZ29wdHMoKTsK KyNlbmRpZiAvKiBDS1BVUkdFICovCisgICAgICAgIChWT0lEKSBzaG93dHlwb3B0cygpOworICAg ICAgICBicmVhazsKKworI2lmbmRlZiBOT0xPQ0FMCisgICAgICBjYXNlIFNIT0ZMTzoKKyAgICAg ICAgKFZPSUQpIHNob2Zsb3coKTsKKyAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogTk9MT0NBTCAq LworCisjaWZuZGVmIE5PWEZFUgorICAgICAgY2FzZSBTSE9YRkVSOgorICAgICAgICAoVk9JRCkg c2hveGZlcigpOworICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBOT1hGRVIgKi8KKworI2lmZGVm IENLX1JFQ0FMTAorICAgICAgY2FzZSBTSEhJU1RPUlk6CisgICAgICAgIChWT0lEKSBjbWhpc3Rv cnkoKTsKKyAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogQ0tfUkVDQUxMICovCisKKyNpZm5kZWYg Tk9TRVhQCisjaWZuZGVmIE5PU1BMCisgICAgICBjYXNlIFNIU0VYUDoKKyAgICAgICAgKFZPSUQp IHNob3NleHAoKTsKKyAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogTk9TUEwgKi8KKyNlbmRpZiAv KiBOT1NFWFAgKi8KKworI2lmZGVmIEFOWVNTSAorICAgICAgY2FzZSBTSE9TU0g6CisgICAgICAg IChWT0lEKSBzaG9zc2goKTsKKyAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogQU5ZU1NIICovCisK KyNpZmRlZiBLVUkKKyAgICAgIGNhc2UgU0hPR1VJOgorICAgICAgICAoVk9JRCkgc2hvZ3VpKCk7 CisgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIEtVSSAqLworCisjaWZuZGVmIE5PRlJJTExTCisj aWZuZGVmIE5PUkVOQU1FCisgICAgICBjYXNlIFNIT1JFTjoKKyAgICAgICAgKFZPSUQpIHNob3Jl bmFtZSgpOworICAgICAgICBicmVhazsKKyNlbmRpZgkvKiBOT1JFTkFNRSAqLworI2VuZGlmCS8q IE5PRlJJTExTICovCisKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHByaW50ZigiXG5Ob3RoaW5n IHRvIHNob3cuLi5cbiIpOworICAgICAgICByZXR1cm4oLTIpOworICAgIH0KKyAgICByZXR1cm4o c3VjY2VzcyA9IDEpOworfQorCisjaWZuZGVmIE5PWEZFUgoraW50CitzaG9hdHQoKSB7CisgICAg cHJpbnRmKCJBdHRyaWJ1dGVzOiAlc1xuIiwgc2hvd29mZihhdGNhcHIpKTsKKyAgICBpZiAoIWF0 Y2FwcikgcmV0dXJuKDApOworICAgIHByaW50ZigiIEJsb2Nrc2l6ZTogJXNcbiIsIHNob3dvZmYo YXRibGtpKSk7CisgICAgcHJpbnRmKCIgRGF0ZTogJXNcbiIsIHNob3dvZmYoYXRkYXRpKSk7Cisg ICAgcHJpbnRmKCIgRGlzcG9zaXRpb246ICVzXG4iLCBzaG93b2ZmKGF0ZGlzaSkpOworICAgIHBy aW50ZigiIEVuY29kaW5nIChDaGFyYWN0ZXIgU2V0KTogJXNcbiIsIHNob3dvZmYoYXRlbmNpKSk7 CisgICAgcHJpbnRmKCIgTGVuZ3RoOiAlc1xuIiwgc2hvd29mZihhdGxlbmkpKTsKKyAgICBwcmlu dGYoIiBUeXBlICh0ZXh0L2JpbmFyeSk6ICVzXG4iLCBzaG93b2ZmKGF0dHlwaSkpOworICAgIHBy aW50ZigiIFN5c3RlbSBJRDogJXNcbiIsIHNob3dvZmYoYXRzaWRpKSk7CisgICAgcHJpbnRmKCIg U3lzdGVtIEluZm86ICVzXG4iLCBzaG93b2ZmKGF0c3lzaSkpOworI2lmZGVmIENLX1BFUk1TCisg ICAgcHJpbnRmKCIgUGVybWlzc2lvbnMgSW46ICAlc1xuIiwgc2hvd29mZihhdGxwcmkpKTsKKyAg ICBwcmludGYoIiBQZXJtaXNzaW9ucyBPdXQ6ICVzXG4iLCBzaG93b2ZmKGF0bHBybykpOworI2Vu ZGlmIC8qIENLX1BFUk1TICovCisjaWZkZWYgU1RSQVRVUworICAgIHByaW50ZigiIEZvcm1hdDog JXNcbiIsIHNob3dvZmYoYXRmcm1pKSk7CisgICAgcHJpbnRmKCIgQ3JlYXRvcjogJXNcbiIsIHNo b3dvZmYoYXRjcmVpKSk7CisgICAgcHJpbnRmKCIgQWNjb3VudDogJXNcbiIsIHNob3dvZmYoYXRh Y3RpKSk7CisjZW5kaWYgLyogU1RSQVRVUyAqLworICAgIHJldHVybigwKTsKK30KKyNlbmRpZiAv KiBOT1hGRVIgKi8KKworI2lmbmRlZiBOT1NQTAoraW50ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIFNIT1cgTUFDUk9TICovCitzaG9tYWMoczEsIHMyKSBjaGFyICpzMSwg KnMyOyB7CisgICAgaW50IHgsIG4sIHBwOworICAgIHBwID0gMDsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIFBhcmVudGhlc2lzIGNvdW50ZXIgKi8KKworICAgIGRlYnVnKEYxMTAsInNo b21hYyBzMSIsczEsMCk7CisgICAgZGVidWcoRjExMCwic2hvbWFjIHMyIixzMiwwKTsKKworI2lm ZGVmIElLU0QKKyAgICBpZiAoIGluc2VydmVyICYmCisjaWZkZWYgSUtTRENPTkYKKyAgICAgICAg aWtzZGNmCisjZWxzZSAvKiBJS1NEQ09ORiAqLworICAgICAgICAxCisjZW5kaWYgLyogSUtTRENP TkYgKi8KKyAgICAgICAgKSB7CisgICAgICAgIGlmICghY2tzdHJjbXAoIm9uX2V4aXQiLHMxLC0x LDApIHx8CisgICAgICAgICAgICAhY2tzdHJjbXAoIm9uX2xvZ291dCIsczEsLTEsMCkpCisgICAg ICAgICAgcmV0dXJuKDApOworICAgIH0KKyNlbmRpZiAvKiBJS1NEICovCisKKyAgICBpZiAoIXMx KQorICAgICAgcmV0dXJuKDApOworICAgIGVsc2UKKyAgICAgIHByaW50ZigiJXMgPSAiLHMxKTsg ICAgICAgICAgICAgICAvKiBQcmludCBibGFuayBsaW5lIGFuZCBtYWNybyBuYW1lICovCisgICAg biA9IChpbnQpc3RybGVuKHMxKSArIDQ7ICAgICAgICAgICAgLyogV2lkdGggb2YgY3VycmVudCBs aW5lICovCisgICAgaWYgKCFzMikgczIgPSAiKG5vdCBkZWZpbmVkKSI7CisKKyAgICB3aGlsZSAo KHggPSAqczIrKykpIHsgICAgICAgICAgICAgICAvKiBMb29wIHRocnUgZGVmaW5pdGlvbiAqLwor ICAgICAgICBpZiAoeCA9PSAnKCcpIHBwKys7ICAgICAgICAgICAgIC8qIFRyZWF0IGNvbW1hcyB3 aXRoaW4gcGFyZW5zICovCisgICAgICAgIGlmICh4ID09ICcpJykgcHAtLTsgICAgICAgICAgICAg LyogYXMgb3JkaW5hcnkgdGV4dCAqLworICAgICAgICBpZiAocHAgPCAwKSBwcCA9IDA7ICAgICAg ICAgICAgIC8qIE91dHNpZGUgcGFyZW5zLCAqLworICAgICAgICBpZiAoeCA9PSAnLCcgJiYgcHAg PT0gMCkgeyAgICAgIC8qIGNvbW1hIGJlY29tZXMgY29tbWEtZGFzaC1OTC4gKi8KKyAgICAgICAg ICAgIHB1dGNoYXIoJywnKTsKKyAgICAgICAgICAgIHB1dGNoYXIoJy0nKTsKKyAgICAgICAgICAg IHggPSAnXG4nOworICAgICAgICB9CisgICAgICAgIGlmIChpbnNlcnZlciAmJiAoeCA9PSAnXG4n KSkgICAgLyogU2VuZCBDUiBiZWZvcmUgTEYgKi8KKyAgICAgICAgICBwdXRjaGFyKENSKTsKKyAg ICAgICAgcHV0Y2hhcigoQ0hBUil4KTsgICAgICAgICAgICAgICAvKiBPdXRwdXQgdGhlIGNoYXJh Y3RlciAqLworICAgICAgICBpZiAoeCA9PSAnXG4nKSB7ICAgICAgICAgICAgICAgIC8qIElmIGl0 IHdhcyBhIG5ld2xpbmUgKi8KKyNpZmRlZiBVTklYCisjaWZkZWYgTk9TRVRCVUYKKyAgICAgICAg ICAgIGZmbHVzaChzdGRvdXQpOworI2VuZGlmIC8qIE5PU0VUQlVGICovCisjZW5kaWYgLyogVU5J WCAqLworICAgICAgICAgICAgcHV0Y2hhcignICcpOyAgICAgICAgICAgICAgIC8qIEluZGVudCB0 aGUgbmV4dCBsaW5lIDEgc3BhY2UgKi8KKyAgICAgICAgICAgIHdoaWxlKCpzMiA9PSAnICcpIHMy Kys7ICAgICAvKiBza2lwIHBhc3QgbGVhZGluZyBibGFua3MgKi8KKyAgICAgICAgICAgIG4gPSAy OyAgICAgICAgICAgICAgICAgICAgICAvKiByZXN0YXJ0IHRoZSBjaGFyYWN0ZXIgY291bnRlciAq LworICAgICAgICAgICAgc2xjKys7ICAgICAgICAgICAgICAgICAgICAgIC8qIGFuZCBpbmNyZW1l bnQgdGhlIGxpbmUgY291bnRlci4gKi8KKyAgICAgICAgfSBlbHNlIGlmICgrK24gPiAoY21kX2Nv bHMgLSAxKSkgeyAvKiBJZiBsaW5lIGlzIHRvbyB3aWRlICovCisgICAgICAgICAgICBwdXRjaGFy KCctJyk7ICAgICAgICAgICAgICAgLyogb3V0cHV0IGEgZGFzaCAqLworICAgICAgICAgICAgaWYg KGluc2VydmVyKQorICAgICAgICAgICAgICBwdXRjaGFyKENSKTsgICAgICAgICAgICAgIC8qIGFu ZCBhIGNhcnJpYWdlIHJldHVybiAqLworICAgICAgICAgICAgcHV0Y2hhcihOTCk7ICAgICAgICAg ICAgICAgIC8qIGFuZCBhIG5ld2xpbmUgKi8KKyNpZmRlZiBVTklYCisjaWZkZWYgTk9TRVRCVUYK KyAgICAgICAgICAgIGZmbHVzaChzdGRvdXQpOworI2VuZGlmIC8qIE5PU0VUQlVGICovCisjZW5k aWYgLyogVU5JWCAqLworICAgICAgICAgICAgbiA9IDE7ICAgICAgICAgICAgICAgICAgICAgIC8q IGFuZCByZXN0YXJ0IHRoZSBjaGFyIGNvdW50ZXIgKi8KKyAgICAgICAgICAgIHNsYysrOyAgICAg ICAgICAgICAgICAgICAgICAvKiBhbmQgaW5jcmVtZW50IHRoZSBsaW5lIGNvdW50ZXIgKi8KKyAg ICAgICAgfQorICAgICAgICBpZiAobiA8IDMgJiYgc2xjID4gKGNtZF9yb3dzIC0gMykpIHsgLyog SWYgbmV3IGxpbmUgYW5kIHNjcmVlbiBmdWxsICovCisgICAgICAgICAgICBpZiAoIWFza21vcmUo KSkgcmV0dXJuKC0xKTsgLyogYXNrIGlmIHRoZXkgd2FudCBtb3JlLiAqLworICAgICAgICAgICAg biA9IDE7ICAgICAgICAgICAgICAgICAgICAgIC8qIFRoZXkgZG8sIHN0YXJ0IGEgbmV3IGxpbmUg Ki8KKyAgICAgICAgICAgIHNsYyA9IDA7ICAgICAgICAgICAgICAgICAgICAvKiBhbmQgcmVzdGFy dCBsaW5lIGNvdW50ZXIgKi8KKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoaW5zZXJ2ZXIpCisg ICAgICBwdXRjaGFyKENSKTsKKyAgICBwdXRjaGFyKE5MKTsgICAgICAgICAgICAgICAgICAgICAg ICAvKiBFbmQgb2YgZGVmaW5pdGlvbiAqLworICAgIGlmICgrK3NsYyA+IChjbWRfcm93cyAtIDMp KSB7CisgICAgICAgIGlmICghYXNrbW9yZSgpKSByZXR1cm4oLTEpOworICAgICAgICBzbGMgPSAw OworICAgIH0KKyAgICByZXR1cm4oMCk7Cit9CisjZW5kaWYgLyogTk9TUEwgKi8KKyNlbmRpZiAv KiBOT1NIT1cgKi8KKworaW50IHhfaWZudW0gPSAwOyAgICAgICAgICAgICAgICAgICAgICAgIC8q IEZsYWcgZm9yIElGIE5VTUVSSUMgYWN0aXZlICovCisKKyNpZm5kZWYgTk9TUEwKKy8qIEV2YWx1 YXRlIGFuIGFyaXRobWV0aWMgZXhwcmVzc2lvbi4gKi8KKy8qIENvZGUgYWRhcHRlZCBmcm9tIGV2 LCBieSBIb3dpZSBLYXllIG9mIENvbHVtYmlhIFUgJiBvdGhlcnMuICovCisKK3N0YXRpYyBpbnQg eGVycm9yID0gMDsKK2ludCBkaXZieXplcm8gPSAwOworc3RhdGljIGNoYXIgKmNwOworc3RhdGlj IENLX09GRl9UIHRva3ZhbDsKK3N0YXRpYyBjaGFyIGN1cnRvazsKK3N0YXRpYyBDS19PRkZfVCBl eHB2YWw7CisKKyNkZWZpbmUgTE9OR0JJVFMgKDgqc2l6ZW9mIChDS19PRkZfVCkpCisjZGVmaW5l IE5VTUJFUiAnTicKKyNkZWZpbmUgTl9FT1QgJ0UnCisKKy8qCisgUmVwbGFjZW1lbnQgZm9yIHN0 cmNocigpIGFuZCBpbmRleCgpLCBuZWl0aGVyIG9mIHdoaWNoIHNlZW0gdG8gYmUgdW5pdmVyc2Fs LgorKi8KKworc3RhdGljIGNoYXIgKgorI2lmZGVmIENLX0FOU0lDCit3aW5kZXgoY2hhciAqIHMs IGNoYXIgYykKKyNlbHNlCit3aW5kZXgocyxjKSBjaGFyICpzLCBjOworI2VuZGlmIC8qIENLX0FO U0lDICovCisvKiB3aW5kZXggKi8geworICAgIHdoaWxlICgqcyAhPSBOVUwgJiYgKnMgIT0gYykg cysrOworICAgIGlmICgqcyA9PSBjKSByZXR1cm4ocyk7IGVsc2UgcmV0dXJuKE5VTEwpOworfQor CisKKy8qCisgZyBlIHQgdCBvIGsKKworIFJldHVybnMgdGhlIG5leHQgdG9rZW4uICBJZiB0b2tl biBpcyBhIE5VTUJFUiwgc2V0cyB0b2t2YWwgYXBwcm9wcmlhdGVseS4KKyovCitzdGF0aWMgY2hh cgorZ2V0dG9rKCkgeworICAgIGNoYXIgdGJ1Zls4MF0gLyogLCp0cCAqLyA7ICAgICAgICAgIC8q IEJ1ZmZlciB0byBhY2N1bXVsYXRlIG51bWJlciAqLworCisgICAgd2hpbGUgKGlzc3BhY2UoKmNw KSkgICAgICAgICAgICAgICAgLyogU2tpcCBwYXN0IGxlYWRpbmcgc3BhY2VzICovCisgICAgICBj cCsrOworCisgICAgZGVidWcoRjExMCwiR0VUVE9LIixjcCwwKTsKKworICAgIHN3aXRjaCAoKmNw KSB7CisgICAgICBjYXNlICckJzogICAgICAgICAgICAgICAgICAgICAgICAgLyogPz8/ICovCisg ICAgICBjYXNlICcrJzogICAgICAgICAgICAgICAgICAgICAgICAgLyogQWRkICovCisgICAgICBj YXNlICctJzogICAgICAgICAgICAgICAgICAgICAgICAgLyogU3VidHJhY3Qgb3IgTmVnYXRlICov CisgICAgICBjYXNlICdAJzogICAgICAgICAgICAgICAgICAgICAgICAgLyogR3JlYXRlc3QgQ29t bW9uIERpdmlzb3IgKi8KKyAgICAgIGNhc2UgJyonOiAgICAgICAgICAgICAgICAgICAgICAgICAv KiBNdWx0aXBseSAqLworICAgICAgY2FzZSAnLyc6ICAgICAgICAgICAgICAgICAgICAgICAgIC8q IERpdmlkZSAqLworICAgICAgY2FzZSAnJSc6ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1v ZHVsdXMgKi8KKyAgICAgIGNhc2UgJzwnOiAgICAgICAgICAgICAgICAgICAgICAgICAvKiBMZWZ0 IHNoaWZ0ICovCisgICAgICBjYXNlICc+JzogICAgICAgICAgICAgICAgICAgICAgICAgLyogUmln aHQgc2hpZnQgKi8KKyAgICAgIGNhc2UgJyYnOiAgICAgICAgICAgICAgICAgICAgICAgICAvKiBB bmQgKi8KKyAgICAgIGNhc2UgJ3wnOiAgICAgICAgICAgICAgICAgICAgICAgICAvKiBPciAqLwor ICAgICAgY2FzZSAnIyc6ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEV4Y2x1c2l2ZSBPciAq LworICAgICAgY2FzZSAnfic6ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vdCAqLworICAg ICAgY2FzZSAnXic6ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEV4cG9uZW50ICovCisgICAg ICBjYXNlICchJzogICAgICAgICAgICAgICAgICAgICAgICAgLyogRmFjdG9yaWFsICovCisgICAg ICBjYXNlICcoJzogICAgICAgICAgICAgICAgICAgICAgICAgLyogUGFyZW5zIGZvciBncm91cGlu ZyAqLworICAgICAgY2FzZSAnKSc6IHJldHVybigqY3ArKyk7ICAgICAgICAgIC8qIG9wZXJhdG9y LCBqdXN0IHJldHVybiBpdCAqLworICAgICAgY2FzZSAnXG4nOgorICAgICAgY2FzZSAnXDAnOiBy ZXR1cm4oTl9FT1QpOyAgICAgICAgIC8qIEVuZCBvZiBsaW5lLCByZXR1cm4gdGhhdCAqLworICAg IH0KKyNpZmRlZiBDT01NRU5UCisvKiBUaGlzIGlzIHRoZSBvcmlnaW5hbCBjb2RlLCB3aGljaCBh bGxvd3Mgb25seSBpbnRlZ2VyIG51bWJlcnMuICovCisKKyAgICBpZiAoaXN4ZGlnaXQoKmNwKSkg eyAgICAgICAgICAgICAgICAvKiBEaWdpdCwgbXVzdCBiZSBhIG51bWJlciAqLworICAgICAgICBp bnQgcmFkaXggPSAxMDsgICAgICAgICAgICAgICAgIC8qIERlZmF1bHQgcmFkaXggKi8KKyAgICAg ICAgZm9yICh0cCA9IHRidWY7IGlzeGRpZ2l0KCpjcCk7IGNwKyspCisgICAgICAgICAgKnRwKysg PSAoY2hhcikgKGlzdXBwZXIoKmNwKSA/IHRvbG93ZXIoKmNwKSA6ICpjcCk7CisgICAgICAgICp0 cCA9ICdcMCc7ICAgICAgICAgICAgICAgICAgICAgLyogRW5kIG51bWJlciAqLworICAgICAgICBz d2l0Y2goaXN1cHBlcigqY3ApID8gdG9sb3dlcigqY3ApIDogKmNwKSB7IC8qIEV4YW1pbmUgYnJl YWsgY2hhciAqLworICAgICAgICAgIGNhc2UgJ2gnOgorICAgICAgICAgIGNhc2UgJ3gnOiByYWRp eCA9IDE2OyBjcCsrOyBicmVhazsgLyogaWYgcmFkaXggc2lnbmlmaWVyLi4uICovCisgICAgICAg ICAgY2FzZSAnbyc6CisgICAgICAgICAgY2FzZSAncSc6IHJhZGl4ID0gODsgY3ArKzsgYnJlYWs7 CisgICAgICAgICAgY2FzZSAndCc6IHJhZGl4ID0gMjsgY3ArKzsgYnJlYWs7CisgICAgICAgIH0K KyAgICAgICAgZm9yICh0cCA9IHRidWYsIHRva3ZhbCA9IDA7ICp0cCAhPSAnXDAnOyB0cCsrKSAg eworICAgICAgICAgICAgaW50IGRpZzsKKyAgICAgICAgICAgIGRpZyA9ICp0cCAtICcwJzsgICAg ICAgICAgICAvKiBDb252ZXJ0IG51bWJlciAqLworICAgICAgICAgICAgaWYgKGRpZyA+IDEwKSBk aWcgLT0gJ2EnLScwJy0xMDsKKyAgICAgICAgICAgIGlmIChkaWcgPj0gcmFkaXgpIHsKKyAgICAg ICAgICAgICAgICBpZiAoY21kbHZsID09IDAgJiYgIXhfaWZudW0gJiYgIXhlcnJvcikKKyAgICAg ICAgICAgICAgICAgIHByaW50ZigiP0ludmFsaWQgZGlnaXQgJyVjJyBpbiBudW1iZXJcbiIsKnRw KTsKKyAgICAgICAgICAgICAgICB4ZXJyb3IgPSAxOworICAgICAgICAgICAgICAgIHJldHVybihO VU1CRVIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdG9rdmFsID0gcmFkaXgqdG9rdmFs ICsgZGlnOworICAgICAgICB9CisgICAgICAgIHJldHVybihOVU1CRVIpOworICAgIH0KKyAgICBp ZiAoY21kbHZsID09IDAgJiYgIXhfaWZudW0gJiYgIXhlcnJvcikKKyAgICAgIHByaW50ZigiSW52 YWxpZCBjaGFyYWN0ZXIgJyVjJyBpbiBpbnB1dFxuIiwqY3ApOworICAgIHhlcnJvciA9IDE7Cisg ICAgY3ArKzsKKyAgICByZXR1cm4oZ2V0dG9rKCkpOworI2Vsc2UKKy8qIFRoaXMgY29kZSBhbGxv d3Mgbm9uLW51bWJlcnMgdG8gYmUgdHJlYXRlZCBhcyBtYWNybyBuYW1lcyAqLworICAgIHsKKyAg ICAgICAgaW50IGksIHg7CisgICAgICAgIGNoYXIgKiBzLCAqIGNwMTsKKyAgICAgICAgY3AxID0g Y3A7CisgICAgICAgIHRwID0gdGJ1ZjsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IDgwOyBpKysp IHsKKyAgICAgICAgICAgIC8qIExvb2sgYWhlYWQgdG8gbmV4dCBicmVhayBjaGFyYWN0ZXIgKi8K KyAgICAgICAgICAgIC8qIHByZXR0eSBtdWNoIGFueXRoaW5nIHRoYXQgaXMgbm90IGluIHRoZSBz d2l0Y2goKSBhYm92ZS4gKi8KKyAgICAgICAgICAgIGlmIChpc2FscGhhKCpjcCkgfHwgaXNkaWdp dCgqY3ApIHx8CisgICAgICAgICAgICAgICAgKmNwID09ICdfJyB8fCAqY3AgPT0gJzonIHx8ICpj cCA9PSAnLicgfHwKKyAgICAgICAgICAgICAgICAqY3AgPT0gJ1snIHx8ICpjcCA9PSAnXScgfHwK KyAgICAgICAgICAgICAgICAqY3AgPT0gJ3snIHx8ICpjcCA9PSAnfScKKyAgICAgICAgICAgICAg ICApCisgICAgICAgICAgICAgIHRidWZbaV0gPSAqY3ArKzsKKyAgICAgICAgICAgIGVsc2UKKyAg ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGkgPj0gODApIHsKKyAg ICAgICAgICAgIHByaW50ZigiVG9vIGxvbmcgLSBcIiVzXCJcbiIsIGNwMSk7CisgICAgICAgICAg ICB4ZXJyb3IgPSAxOworICAgICAgICAgICAgY3ArKzsKKyAgICAgICAgICAgIHJldHVybihnZXR0 b2soKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHhlcnJvcikgcmV0dXJuKE5VTUJFUik7CisK KyAgICAgICAgdGJ1ZltpXSA9IE5VTDsKKyAgICAgICAgcyA9IHRidWY7CisgICAgICAgIGlmICgh aXNkaWdpdCh0YnVmWzBdKSkgeworICAgICAgICAgICAgY2hhciAqIHMyID0gTlVMTDsKKyAgICAg ICAgICAgIHggPSBteGxvb2sobWFjdGFiLHRidWYsbm1hYyk7CisgICAgICAgICAgICBkZWJ1ZyhG MTExLCJnZXR0b2sgbXhsb29rIix0YnVmLHgpOworICAgICAgICAgICAgaWYgKHggPCAwKSB7Cisg ICAgICAgICAgICAgICAgaWYgKGNtZGx2bCA9PSAwICYmICF4X2lmbnVtICYmICF4ZXJyb3IpCisg ICAgICAgICAgICAgICAgICBwcmludGYoIkJhZCBudW1iZXIgLSBcIiVzXCJcbiIsdGJ1Zik7Cisg ICAgICAgICAgICAgICAgeGVycm9yID0gMTsKKyAgICAgICAgICAgICAgICBjcCsrOworICAgICAg ICAgICAgICAgIHJldHVybihnZXR0b2soKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBz MiA9IG1hY3RhYlt4XS5tdmFsOworICAgICAgICAgICAgaWYgKCFzMikgczIgPSAiIjsKKyAgICAg ICAgICAgIGlmICgqczIpIHMgPSBzMjsKKyAgICAgICAgfQorI2lmZGVmIENLRkxPQVQKKyAgICAg ICAgeCA9IGlzZmxvYXQocywwKTsKKyNlbHNlCisgICAgICAgIHggPSBjaGtudW0ocyk7CisjZW5k aWYgLyogQ0tGTE9BVCAqLworICAgICAgICBpZiAoeCA+IDApIHsKKyAgICAgICAgICAgIHRva3Zh bCA9IGNrYXRvZnMocyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoY21kbHZs ID09IDAgJiYgIXhfaWZudW0gJiYgIXhlcnJvcikKKyAgICAgICAgICAgICAgcHJpbnRmKCJCYWQg bnVtYmVyIC0gXCIlc1wiXG4iLHRidWYpOworICAgICAgICAgICAgeGVycm9yID0gMTsKKyAgICAg ICAgICAgIGNwKys7CisgICAgICAgICAgICByZXR1cm4oZ2V0dG9rKCkpOworICAgICAgICB9Cisg ICAgICAgIHJldHVybihOVU1CRVIpOworICAgIH0KKyNlbmRpZiAvKiBDT01NRU5UICovCit9CisK K3N0YXRpYyBDS19PRkZfVAorI2lmZGVmIENLX0FOU0lDCitleHBvbihDS19PRkZfVCB4LCBDS19P RkZfVCB5KQorI2Vsc2UKK2V4cG9uKHgseSkgQ0tfT0ZGX1QgeCx5OworI2VuZGlmIC8qIENLX0FO U0lDICovCisvKiBleHBvbiAqLyB7CisgICAgQ0tfT0ZGX1QgcmVzdWx0ID0gMTsKKyAgICBpbnQg c2lnbiA9IDE7CisgICAgaWYgKHkgPCAwKSByZXR1cm4oMCk7CisgICAgaWYgKHggPCAwKSB7Cisg ICAgICAgIHggPSAteDsKKyAgICAgICAgaWYgKHkgJiAxKSBzaWduID0gLTE7CisgICAgfQorICAg IHdoaWxlICh5ICE9IDApIHsKKyAgICAgICAgaWYgKHkgJiAxKSByZXN1bHQgKj0geDsKKyAgICAg ICAgeSA+Pj0gMTsKKyAgICAgICAgaWYgKHkgIT0gMCkgeCAqPSB4OworICB9CisgIHJldHVybihy ZXN1bHQgKiBzaWduKTsKK30KKworLyoKKyAqIGZhY3RvciA6Oj0gc2ltcGxlIHwgc2ltcGxlIF4g ZmFjdG9yCisgKgorICovCitzdGF0aWMgVk9JRAorZmFjdG9yKCkgeworICAgIENLX09GRl9UIG9s ZHZhbDsKKyAgICBzaW1wbGUoKTsKKyAgICBpZiAoY3VydG9rID09ICdeJykgeworICAgICAgICBv bGR2YWwgPSBleHB2YWw7CisgICAgICAgIGN1cnRvayA9IGdldHRvaygpOworICAgICAgICBmYWN0 b3IoKTsKKyAgICAgICAgZXhwdmFsID0gZXhwb24ob2xkdmFsLGV4cHZhbCk7CisgICAgfQorfQor CisvKgorICogdGVybXAgOjo9IE5VTEwgfCB7KiwvLCUsJn0gZmFjdG9yIHRlcm1wCisgKgorICov CitzdGF0aWMgVk9JRAordGVybXAoKSB7CisgICAgd2hpbGUgKGN1cnRvayA9PSAnKicgfHwgY3Vy dG9rID09ICcvJyB8fCBjdXJ0b2sgPT0gJyUnIHx8IGN1cnRvayA9PSAnJicpIHsKKyAgICAgICAg Q0tfT0ZGX1Qgb2xkdmFsOworICAgICAgICBjaGFyIG9wOworICAgICAgICBvcCA9IGN1cnRvazsK KyAgICAgICAgY3VydG9rID0gZ2V0dG9rKCk7ICAgICAgICAgICAgICAvKiBza2lwIHBhc3Qgb3Bl cmF0b3IgKi8KKyAgICAgICAgb2xkdmFsID0gZXhwdmFsOworICAgICAgICBmYWN0b3IoKTsKKyAg ICAgICAgc3dpdGNoKG9wKSB7CisgICAgICAgICAgY2FzZSAnKic6IGV4cHZhbCA9IG9sZHZhbCAq IGV4cHZhbDsgYnJlYWs7CisgICAgICAgICAgY2FzZSAnLyc6CisgICAgICAgICAgY2FzZSAnJSc6 CisgICAgICAgICAgICBpZiAoZXhwdmFsID09IDApIHsKKyAgICAgICAgICAgICAgICBpZiAoIXhf aWZudW0pCisgICAgICAgICAgICAgICAgICBwcmludGYoIj9EaXZpZGUgYnkgemVyb1xuIik7Cisg ICAgICAgICAgICAgICAgeGVycm9yID0gMTsKKyAgICAgICAgICAgICAgICBkaXZieXplcm8gPSAx OworICAgICAgICAgICAgICAgIGV4cHZhbCA9IC0xOworICAgICAgICAgICAgfSBlbHNlCisgICAg ICAgICAgICAgIGV4cHZhbCA9IChvcCA9PSAnLycpID8gKG9sZHZhbCAvIGV4cHZhbCkgOiAob2xk dmFsICUgZXhwdmFsKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgJyYnOgor ICAgICAgICAgICAgZXhwdmFsID0gb2xkdmFsICYgZXhwdmFsOyBicmVhazsKKyAgICAgICAgfQor ICAgIH0KK30KKworc3RhdGljIENLX09GRl9UCisjaWZkZWYgQ0tfQU5TSUMKK2ZhY3QoQ0tfT0ZG X1QgeCkKKyNlbHNlCitmYWN0KHgpIENLX09GRl9UIHg7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8K Ky8qIGZhY3QgKi8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmYWN0b3JpYWwgKi8K KyAgICBDS19PRkZfVCByZXN1bHQgPSAxOworICAgIHdoaWxlICh4ID4gMSkKKyAgICAgIHJlc3Vs dCAqPSB4LS07CisgICAgcmV0dXJuKHJlc3VsdCk7Cit9CisKKy8qCisgKiB0ZXJtIDo6PSBmYWN0 b3IgdGVybXAKKyAqCisgKi8KK3N0YXRpYyBWT0lECit0ZXJtKCkgeworICAgIGZhY3RvcigpOwor ICAgIHRlcm1wKCk7Cit9CisKK3N0YXRpYyBDS19PRkZfVAorI2lmZGVmIENLX0FOU0lDCitnY2Qo Q0tfT0ZGX1QgeCwgQ0tfT0ZGX1QgeSkKKyNlbHNlCitnY2QoeCx5KSBDS19PRkZfVCB4LHk7Cisj ZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIGdjZCAqLyB7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBHcmVhdGVzdCBDb21tb24gRGl2aXNvciAqLworICAgIGludCBuc2hpZnQgPSAwOwor ICAgIGlmICh4IDwgMCkgeCA9IC14OworICAgIGlmICh5IDwgMCkgeSA9IC15OyAgICAgICAgICAg ICAgICAgIC8qIHZhbGlkYXRlIGFyZ3VtZW50cyAqLworICAgIGlmICh4ID09IDAgfHwgeSA9PSAw KSByZXR1cm4oeCArIHkpOyAgICAvKiB0aGlzIGlzIGJvZ3VzICovCisKKyAgICB3aGlsZSAoISgo eCAmIDEpIHwgKHkgJiAxKSkpIHsgICAgICAvKiBnZXQgcmlkIG9mIHBvd2VycyBvZiAyICovCisg ICAgICAgIG5zaGlmdCsrOworICAgICAgICB4ID4+PSAxOworICAgICAgICB5ID4+PSAxOworICAg IH0KKyAgICB3aGlsZSAoeCAhPSAxICYmIHkgIT0gMSAmJiB4ICE9IDAgJiYgeSAhPSAwKSB7Cisg ICAgICAgIHdoaWxlICghKHggJiAxKSkgeCA+Pj0gMTsgICAgICAgLyogZWxpbWluYXRlIHVubmVj ZXNzYXJ5ICovCisgICAgICAgIHdoaWxlICghKHkgJiAxKSkgeSA+Pj0gMTsgICAgICAgLyogcG93 ZXJzIG9mIDIgKi8KKyAgICAgICAgaWYgKHggPCB5KSB7ICAgICAgICAgICAgICAgICAgICAvKiBm b3JjZSB4IHRvIGJlIGxhcmdlciAqLworICAgICAgICAgICAgQ0tfT0ZGX1QgdDsKKyAgICAgICAg ICAgIHQgPSB4OworICAgICAgICAgICAgeCA9IHk7CisgICAgICAgICAgICB5ID0gdDsKKyAgICAg ICAgfQorICAgICAgICB4IC09IHk7CisgICAgfQorICAgIGlmICh4ID09IDAgfHwgeSA9PSAwKSBy ZXR1cm4oKHggKyB5KSA8PCBuc2hpZnQpOyAvKiBnY2QgaXMgbm9uLXplcm8gb25lICovCisgICAg ZWxzZSByZXR1cm4oKENLX09GRl9UKSAxIDw8IG5zaGlmdCk7ICAgIC8qIGVsc2UgZ2NkIGlzIDEg Ki8KK30KKworLyoKKyAqIGV4cHJwIDo6PSBOVUxMIHwgeyssLSx8LC4uLn0gdGVybSBleHBycAor ICoKKyAqLworc3RhdGljIFZPSUQKK2V4cHJwKCkgeworICAgIHdoaWxlICh3aW5kZXgoIistfDw+ I0AiLGN1cnRvaykgIT0gTlVMTCkgeworICAgICAgICBDS19PRkZfVCBvbGR2YWw7CisgICAgICAg IGNoYXIgb3A7CisgICAgICAgIG9wID0gY3VydG9rOworICAgICAgICBjdXJ0b2sgPSBnZXR0b2so KTsgICAgICAgICAgICAgIC8qIHNraXAgcGFzdCBvcGVyYXRvciAqLworICAgICAgICBvbGR2YWwg PSBleHB2YWw7CisgICAgICAgIHRlcm0oKTsKKyAgICAgICAgc3dpdGNoKG9wKSB7CisgICAgICAg ICAgY2FzZSAnKycgOiBleHB2YWwgPSBvbGR2YWwgKyBleHB2YWw7IGJyZWFrOworICAgICAgICAg IGNhc2UgJy0nIDogZXhwdmFsID0gb2xkdmFsIC0gZXhwdmFsOyBicmVhazsKKyAgICAgICAgICBj YXNlICd8JyA6IGV4cHZhbCA9IG9sZHZhbCB8IGV4cHZhbDsgYnJlYWs7CisgICAgICAgICAgY2Fz ZSAnIycgOiBleHB2YWwgPSBvbGR2YWwgXiBleHB2YWw7IGJyZWFrOworICAgICAgICAgIGNhc2Ug J0AnIDogZXhwdmFsID0gZ2NkKG9sZHZhbCxleHB2YWwpOyBicmVhazsKKyAgICAgICAgICBjYXNl ICc8JyA6IGV4cHZhbCA9IG9sZHZhbCA8PCBleHB2YWw7IGJyZWFrOworICAgICAgICAgIGNhc2Ug Jz4nIDogZXhwdmFsID0gb2xkdmFsID4+IGV4cHZhbDsgYnJlYWs7CisgICAgICAgIH0KKyAgICB9 Cit9CisKKy8qCisgKiBleHByIDo6PSB0ZXJtIGV4cHJwCisgKgorICovCitzdGF0aWMgVk9JRAor ZXhwcigpIHsKKyAgICB0ZXJtKCk7CisgICAgZXhwcnAoKTsKK30KKworc3RhdGljIENLX09GRl9U Cit4cGFyc2UoKSB7CisgICAgY3VydG9rID0gZ2V0dG9rKCk7CisgICAgZXhwcigpOworI2lmZGVm IENPTU1FTlQKKyAgICBpZiAoY3VydG9rID09ICckJykgeworICAgICAgICBjdXJ0b2sgPSBnZXR0 b2soKTsKKyAgICAgICAgaWYgKGN1cnRvayAhPSBOVU1CRVIpIHsKKyAgICAgICAgICAgIGlmIChj bWRsdmwgPT0gMCAmJiAheF9pZm51bSkKKyAgICAgICAgICAgICAgcHJpbnRmKCI/SWxsZWdhbCBy YWRpeFxuIik7CisgICAgICAgICAgICB4ZXJyb3IgPSAxOworICAgICAgICAgICAgcmV0dXJuKDAp OworICAgICAgICB9CisgICAgICAgIGN1cnRvayA9IGdldHRvaygpOworICAgIH0KKyNlbmRpZiAv KiBDT01NRU5UICovCisgICAgaWYgKGN1cnRvayAhPSBOX0VPVCkgeworICAgICAgICBpZiAoY21k bHZsID09IDAgJiYgIXhfaWZudW0gJiYgIXhlcnJvcikKKyAgICAgICAgICBwcmludGYoIj9FeHRy YSBjaGFyYWN0ZXJzIGFmdGVyIGV4cHJlc3Npb25cbiIpOworICAgICAgICB4ZXJyb3IgPSAxOwor ICAgIH0KKyAgICByZXR1cm4oZXhwdmFsKTsKK30KKworY2hhciAqICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIFNpbGVudCBmcm9udCBlbmQgZm9yIGV2YWxhKCkgKi8KK2V2YWx4 KHMpIGNoYXIgKnM7IHsKKyAgICBjaGFyICogcDsKKyAgICBpbnQgdDsKKyAgICB0ID0geF9pZm51 bTsKKyAgICB4X2lmbnVtID0gMTsKKyAgICBwID0gZXZhbGEocyk7CisgICAgeF9pZm51bSA9IHQ7 CisgICAgcmV0dXJuKHApOworfQorCitjaGFyICoKK2V2YWxhKHMpIGNoYXIgKnM7IHsKKyAgICBD S19PRkZfVCB2OwkJCQkvKiBOdW1lcmljIHZhbHVlICovCisgICAgaWYgKCFzKSByZXR1cm4oIiIp OworICAgIHhlcnJvciA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFN0YXJ0IG91dCB3 aXRoIG5vIGVycm9yICovCisgICAgZGl2Ynl6ZXJvID0gMDsKKyAgICBjcCA9IHM7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBNYWtlIHRoZSBhcmd1bWVudCBnbG9iYWwgKi8KKyAgICB2 ID0geHBhcnNlKCk7ICAgICAgICAgICAgICAgICAgICAgICAvKiBQYXJzZSB0aGUgc3RyaW5nICov CisgICAgcmV0dXJuKHhlcnJvciA/ICIiIDogY2tmc3RvYSh2KSk7CS8qIFJldHVybiBlbXB0eSBz dHJpbmcgb24gZXJyb3IgKi8KK30KKworLyoKKyAqIHNpbXBsZXN0IDo6PSBOVU1CRVIgfCAoIGV4 cHIgKQorICoKKyAqLworc3RhdGljIFZPSUQKK3NpbXBsZXN0KCkgeworICAgIGNoYXIgKiBwOwor ICAgIHAgPSBjcDsKKyAgICBpZiAoY3VydG9rID09IE5VTUJFUikKKyAgICAgIGV4cHZhbCA9IHRv a3ZhbDsKKyAgICBlbHNlIGlmIChjdXJ0b2sgPT0gJygnKSB7CisgICAgICAgIGN1cnRvayA9IGdl dHRvaygpOyAgICAgICAgICAgICAgLyogc2tpcCBvdmVyIHBhcmVuICovCisgICAgICAgIGV4cHIo KTsKKyAgICAgICAgaWYgKGN1cnRvayAhPSAnKScpIHsKKyAgICAgICAgICAgIGlmIChjbWRsdmwg PT0gMCAmJiAheF9pZm51bSAmJiAheGVycm9yKQorICAgICAgICAgICAgICBwcmludGYoIj9NaXNz aW5nIHJpZ2h0IHBhcmVudGhlc2lzXG4iKTsKKyAgICAgICAgICAgIHhlcnJvciA9IDE7CisgICAg ICAgIH0KKyAgICAgICAgZGVidWcoRjExMCwiR0VUVE9LIFNJTVBMRVNUICgpIixwLDApOworCisg ICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGNtZGx2bCA9PSAwICYmICF4X2lmbnVtICYmICF4ZXJy b3IpCisgICAgICAgICAgcHJpbnRmKCI/T3BlcmF0b3IgdW5leHBlY3RlZFxuIik7CisgICAgICAg IHhlcnJvciA9IDE7CisgICAgfQorICAgIGN1cnRvayA9IGdldHRvaygpOworfQorCisvKgorICog c2ltcGxlciA6Oj0gc2ltcGxlc3QgfCBzaW1wbGVzdCAhCisgKgorICovCitzdGF0aWMgVk9JRAor c2ltcGxlcigpIHsKKyAgICBzaW1wbGVzdCgpOworICAgIGlmIChjdXJ0b2sgPT0gJyEnKSB7Cisg ICAgICAgIGN1cnRvayA9IGdldHRvaygpOworICAgICAgICBleHB2YWwgPSBmYWN0KGV4cHZhbCk7 CisgICAgfQorfQorCisvKgorICogc2ltcGxlIDo6PSB7LSx+LCF9IHNpbXBsZXIgfCBzaW1wbGVy CisgKgorICovCisKK3N0YXRpYyBWT0lECitzaW1wbGUoKSB7CisgICAgaWYgKGN1cnRvayA9PSAn LScgfHwgY3VydG9rID09ICd+JyB8fCBjdXJ0b2sgPT0gJyEnIHx8IGN1cnRvayA9PSAnKycpIHsK KyAgICAgICAgaW50IG9wID0gY3VydG9rOworICAgICAgICBjdXJ0b2sgPSBnZXR0b2soKTsgICAg ICAgICAgICAgIC8qIHNraXAgb3ZlciAtIHNpZ24gKi8KKyAgICAgICAgc2ltcGxlcigpOyAgICAg ICAgICAgICAgICAgICAgICAvKiBwYXJzZSB0aGUgZmFjdG9yIGFnYWluICovCisgICAgICAgIGlm IChvcCAhPSAnKycpCisgICAgICAgICAgZXhwdmFsID0gKG9wID09ICctJykgPyAtZXhwdmFsIDog KChvcCA9PSAnIScpID8gIWV4cHZhbCA6IH5leHB2YWwpOworICAgIH0gZWxzZSBzaW1wbGVyKCk7 Cit9CisKKy8qICBEIEMgTCBBIFIgUiBBIFkgIC0tICBEZWNsYXJlIGFuIGFycmF5ICAqLworLyoK KyAgQ2FsbCB3aXRoOgorICAgY2hhciBhID0gc2luZ2xlIGNoYXJhY3RlciBkZXNpZ25hdG9yIGZv ciB0aGUgYXJyYXksIGUuZy4gImEiLgorICAgaW50ICBuID0gc2l6ZSBvZiBhcnJheS4gIC0xIG1l YW5zIHRvIHVuZGVjbGFyZSB0aGUgYXJyYXkuCisgIFJldHVybnM6CisgICAwIG9yIGdyZWF0ZXIg b24gc3VjY2VzcywgaGF2aW5nIGNyZWF0ZWQgdGhlIHJlcXVlc3RlZCBhcnJheSB3aXRoCisgICAg IHdpdGggbisxIGVsZW1lbnRzLCAwLi5uLiAgSWYgYW4gYXJyYXkgb2YgdGhlIHNhbWUgbmFtZSBl eGlzdGVkCisgICAgIHByZXZpb3VzbHksIGl0IGlzIGRlc3Ryb3llZC4gIFRoZSBuZXcgYXJyYXkg aGFzIGFsbCBpdHMgZWxlbWVudHMKKyAgICAgaW5pdGlhbGl6ZWQgdG8gTlVMTCBwb2ludGVycy4g IFdoZW4gYW4gYXJyYXkgaXMgc3VjY2Vzc2Z1bGx5IGNyZWF0ZWQsCisgICAgIHRoZSByZXR1cm4g dmFsdWUgaXMgaXRzIGluZGV4ICgwID0gJ2EnLCAxID0gJ2InLCBhbmQgc28gb24uKQorICAtMSBv biBmYWlsdXJlIChiZWNhdXNlICdhJyBvdXQgb2YgcmFuZ2Ugb3IgbWFsbG9jIGZhaWx1cmUpLgor Ki8KK2ludAorI2lmZGVmIENLX0FOU0lDCitkY2xhcnJheShjaGFyIGEsIGludCBuKQorI2Vsc2UK K2RjbGFycmF5KGEsbikgY2hhciBhOyBpbnQgbjsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyog ZGNsYXJyYXkgKi8geworICAgIGNoYXIgYywgKipwOyBpbnQgaSwgbjIsIHJjOworCisgICAgaWYg KGEgPiA2MyAmJiBhIDwgOTEpIGEgKz0gMzI7ICAgICAgLyogQ29udmVydCBsZXR0ZXJzIHRvIGxv d2VyY2FzZSAqLworICAgIGlmIChhIDwgQVJSQVlCQVNFIHx8IGEgPiAxMjIpICAgICAgIC8qIFZl cmlmeSBuYW1lICovCisgICAgICByZXR1cm4oLTEpOworCisgICAgaWYgKG4gPCAwKSAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogQ2hlY2sgYXJnICovCisgICAgICByZXR1cm4oLTEpOworICAg IGlmIChuKzEgPCAwKSAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1BWElOVCsxIHdyYXBzIGFy b3VuZCAqLworICAgICAgcmV0dXJuKC0xKTsKKworICAgIGMgPSBhOworICAgIGEgLT0gQVJSQVlC QVNFOyAgICAgICAgICAgICAgICAgICAgIC8qIENvbnZlcnQgbmFtZSB0byBudW1iZXIgKi8KKyAg ICByYyA9IGE7CQkJCS8qIEFycmF5IGluZGV4IHdpbGwgYmUgcmV0dXJuIGNvZGUgKi8KKyAgICBp ZiAoKHAgPSBhX3B0clthXSkgIT0gTlVMTCkgeyAgICAgICAvKiBEZWxldGUgb2xkIGFycmF5IG9m IHNhbWUgbmFtZSAqLworICAgICAgICBpZiAoYV9saW5rW2FdID4gLTEpIHsgICAgICAgICAgIC8q IElzIGl0IGEgbGluaz8gKi8KKyAgICAgICAgICAgIGlmIChuID09IDApIHsgICAgICAgICAgICAg ICAvKiBJZiB3ZSdyZSBqdXN0IGRlbGV0aW5nIGl0ICovCisgICAgICAgICAgICAgICAgYV9wdHJb YV0gPSAoY2hhciAqKikgTlVMTDsgLyogY2xlYXIgYWxsIHRoZSBpbmZvLiAqLworICAgICAgICAg ICAgICAgIGFfZGltW2FdID0gMDsKKyAgICAgICAgICAgICAgICBhX2xpbmtbYV0gPSAtMTsKKyAg ICAgICAgICAgICAgICByZXR1cm4oMCk7CisgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogTm90IGRlbGV0aW5nICovCisgICAgICAgICAgICBhID0gYV9saW5rW2FdOyAg ICAgICAgICAgICAgLyogU3dpdGNoIHRvIGxpbmtlZC10byBhcnJheSAqLworICAgICAgICB9Cisg ICAgICAgIG4yID0gYV9kaW1bYV07ICAgICAgICAgICAgICAgICAgLyogUmVhbCBhcnJheSAqLwor ICAgICAgICBmb3IgKGkgPSAwOyBpIDw9IG4yOyBpKyspIHsgICAgIC8qIEZpcnN0IGRlbGV0ZSBp dHMgZWxlbWVudHMgKi8KKyAgICAgICAgICAgIGlmIChwW2ldKSB7CisgICAgICAgICAgICAgICAg ZnJlZShwW2ldKTsKKyAgICAgICAgICAgICAgICBwW2ldID0gTlVMTDsKKyAgICAgICAgICAgIH0K KyAgICAgICAgfQorICAgICAgICBmcmVlKChjaGFyICopYV9wdHJbYV0pOyAgICAgICAgIC8qIFRo ZW4gdGhlIGVsZW1lbnQgbGlzdCAqLworICAgICAgICBpZiAobiA9PSAwKSB7ICAgICAgICAgICAg ICAgICAgIC8qIElmIHVuZGVjbGFyaW5nIHRoaXMgYXJyYXkuLi4gKi8KKyAgICAgICAgICAgIGZv ciAoaSA9IDA7IGkgPCAxMjIgLSBBUlJBWUJBU0U7IGkrKykgeyAvKiBBbnkgbGlua2VkIGFycmF5 cz8gKi8KKyAgICAgICAgICAgICAgICBpZiAoaSAhPSBhICYmIGFfbGlua1tpXSA9PSBhKSB7ICAg ICAvKiBGaW5kIHRoZW0gKi8KKyAgICAgICAgICAgICAgICAgICAgYV9wdHJbaV0gPSAoY2hhciAq KikgTlVMTDsgICAgICAvKiBhbmQgcmVtb3ZlIHRoZW0gKi8KKyAgICAgICAgICAgICAgICAgICAg YV9kaW1baV0gPSAwOworICAgICAgICAgICAgICAgICAgICBhX2xpbmtbaV0gPSAtMTsKKyAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYV9wdHJbYV0g PSAoY2hhciAqKikgTlVMTDsgICAgICAvKiBSZW1vdmUgcG9pbnRlciB0byBlbGVtZW50IGxpc3Qg Ki8KKyAgICAgICAgYV9kaW1bYV0gPSAwOyAgICAgICAgICAgICAgICAgICAvKiBTZXQgZGltZW5z aW9uIGF0IHplcm8uICovCisgICAgICAgIGFfbGlua1thXSA9IC0xOyAgICAgICAgICAgICAgICAg LyogVW5zZXQgbGluayB3b3JkICovCisgICAgfQorICAgIGlmIChuIDwgMCkJCQkJLyogSWYgb25s eSB1bmRlY2xhcmluZywgKi8KKyAgICAgIHJldHVybigwKTsJCQkvKiAgd2UncmUgZG9uZS4gKi8K KyAgICBwID0gKGNoYXIgKiopIG1hbGxvYygobisxKSAqIHNpemVvZihjaGFyICoqKSk7IC8qIEFs bG9jYXRlIGZvciBuZXcgYXJyYXkgKi8KKyAgICBpZiAocCA9PSBOVUxMKSByZXR1cm4oLTEpOyAg ICAgICAgICAvKiBDaGVjayAqLworICAgIGFfcHRyW2FdID0gcDsgICAgICAgICAgICAgICAgICAg ICAgIC8qIFNhdmUgcG9pbnRlciB0byBtZW1iZXIgbGlzdCAqLworICAgIGFfZGltW2FdID0gbjsg ICAgICAgICAgICAgICAgICAgICAgIC8qIFNhdmUgZGltZW5zaW9uICovCisgICAgZm9yIChpID0g MDsgaSA8PSBuOyBpKyspICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSBtZW1iZXJzIHRvIG51bGwg Ki8KKyAgICAgIHBbaV0gPSBOVUxMOworICAgIGZvciAoaSA9IDA7IGkgPCAoaW50KSAneicgLSBB UlJBWUJBU0U7IGkrKykgeyAvKiBBbnkgbGlua2VkIGFycmF5cz8gKi8KKyAgICAgICAgaWYgKGkg IT0gYSAmJiBhX2xpbmtbaV0gPT0gYSkgeyAvKiBGaW5kIGFuZCB1cGRhdGUgdGhlbSAqLworICAg ICAgICAgICAgYV9wdHJbaV0gPSBwOworICAgICAgICAgICAgYV9kaW1baV0gPSBuOworICAgICAg ICB9CisgICAgfQorICAgIHJldHVybihyYyk7Cit9CisKKy8qICBYIEEgUiBSIEEgWSAgLS0gQ29u dmVydCBhcnJheSBuYW1lIHRvIGFycmF5IGluZGV4ICAqLworCitpbnQKK3hhcnJheShzKSBjaGFy ICogczsgeworICAgIGNoYXIgYnVmWzhdOworICAgIGludCB4OworICAgIGNoYXIgYzsKKworICAg IGlmICghcykgcyA9ICIiOworICAgIGRlYnVnKEYxMTAsInhhcnJheSIscywwKTsKKyAgICBpZiAo ISpzKQorICAgICAgcmV0dXJuKC0xKTsKKyAgICB4ID0gc3RybGVuKHMpOworCisgICAgYnVmWzBd ID0gTlVMOworICAgIGJ1ZlsxXSA9IE5VTDsKKyAgICBidWZbMl0gPSBzWzBdOworICAgIGJ1Zlsz XSA9ICh4ID4gMCkgPyBzWzFdIDogTlVMOworICAgIGJ1Zls0XSA9ICh4ID4gMSkgPyBzWzJdIDog TlVMOworICAgIGJ1Zls1XSA9ICh4ID4gMikgPyBzWzNdIDogTlVMOworICAgIGJ1Zls2XSA9IE5V TDsKKyAgICBkZWJ1ZyhGMTEwLCJ4YXJyYXkgYnVmWzNdIiwmYnVmWzNdLDApOworICAgIHMgPSBi dWYrMjsKKyAgICBpZiAoKnMgPT0gJyYnKSB7CisgICAgICAgIGJ1ZlsxXSA9IENNRFE7CisgICAg ICAgIHMtLTsKKyAgICB9IGVsc2UgaWYgKCpzICE9IENNRFEpIHsKKyAgICAgICAgYnVmWzBdID0g Q01EUTsKKyAgICAgICAgYnVmWzFdID0gJyYnOworICAgICAgICBzID0gYnVmOworICAgIH0KKyAg ICBkZWJ1ZyhGMTEwLCJ4YXJyYXkgcyIscywwKTsKKyAgICBjID0gKihzKzIpOworICAgIGlmIChp c3VwcGVyKGMpKQorICAgICAgYyA9IHRvbG93ZXIoYyk7CisgICAgaWYgKGMgPT0gJ0AnKQorICAg ICAgYyA9IDk2OworICAgIHggPSAoaW50KWMgLSBBUlJBWUJBU0U7CisgICAgaWYgKCoocyszKSA9 PSAnWycpCisgICAgICAqKHMrMykgPSBOVUw7CisgICAgaWYgKHggPCAwKSB7CisJcmV0dXJuKC0x KTsKKyAgICB9CisgICAgaWYgKHggPiAoJ3onIC0gQVJSQVlCQVNFKSkgeworCWRlYnVnKEYxMDEs InhhcnJheSB4IG91dCBvZiByYW5nZSIsIiIseCk7CisJcmV0dXJuKC0xKTsKKyAgICB9CisgICAg aWYgKCoocyszKSkgeworCWRlYnVnKEYxMTAsInhhcnJheSBzeW50YXgiLHMsMCk7CisJcmV0dXJu KC0xKTsKKyAgICB9CisgICAgcmV0dXJuKHgpOworfQorCisvKgorICBib3VuZHNwYWlyKCkgLS0g cGFyc2VzIGJsYWhbbjptXQorCisgIEZvciB1c2Ugd2l0aCBhcnJheSBzZWdtZW50IHNwZWNpZmll cnMgYW5kIGNvbXBhY3Qgc3Vic3RyaW5nIG5vdGF0aW9uLgorICBJZ25vcmVzIHRoZSAiYmxhaCIg cGFydCwgZ2V0cyB0aGUgdmFsdWVzIG9mIG4gYW5kIG0sIHdoaWNoIGNhbiBiZQorICBudW1iZXJz LCB2YXJpYWJsZXMsIG9yIGFyaXRobWV0aWMgZXhwcmVzc2lvbnM7IGFueXRoaW5nIHRoYXQgcmVz b2x2ZXMKKyAgdG8gYSBudW1iZXIuCisKKyAgQ2FsbCB3aXRoOgorICAgcyAgICAtIHN0cmluZyB0 byBwYXJzZQorICAgc2VwICAtIGFycmF5IG9mIHBlcm1pc3NpYmxlIGJvdW5kcyBzZXBhcmF0b3Ig Y2hhcnMKKyAgIGxvICAgLSBwb2ludGVyIHRvIGxvdy1ib3VuZCByZXN1bHQgKG9yIC0xKQorICAg aGkgICAtIHBvaW50ZXIgdG8gaGktYm91bmQgcmVzdWx0IChvciAtMSkKKyAgIHp6ICAgLSBwb2lu dGVyIHRvIHNlcGFyYXRvciBjaGFyIHRoYXQgd2FzIGVuY291bnRlcmVkIChvciBOVUwpCisgIFJl dHVybnM6CisgICAtMSBvbiBmYWlsdXJlCisgICAgMCBvbiBzdWNjZXNzCisqLyAgICAgIAorCitp bnQKKyNpZmRlZiBDS19BTlNJQworYm91bmRzcGFpcihjaGFyICpzLCBjaGFyICpzZXAsIGludCAq bG8sIGludCAqaGksIGNoYXIgKnp6KQorI2Vsc2UKK2JvdW5kc3BhaXIocyxzZXAsbG8saGksenop IGNoYXIgKnMsICpzZXAsICp6ejsgaW50ICpsbywgKmhpOworI2VuZGlmIC8qIENLX0FOU0lDICov Cit7CisgICAgaW50IGksIHgsIHksIHJhbmdlWzJdLCBiYyA9IDA7CisgICAgY2hhciBjID0gTlVM LCAqczIgPSBOVUxMLCBidWZbMjU2XSwgKnAsICpxLCAqciwgKmVbMl0sICp0bXAgPSBOVUxMOwor CisgICAgZGVidWcoRjExMCwiYm91bmRzcGFpciBzIixzLDApOworICAgIGRlYnVnKEYxMTAsImJv dW5kc3BhaXIgc2VwIixzZXAsMCk7CisKKyAgICAqbG8gPSAtMTsgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBEZWZhdWx0IGJvdW5kcyAqLworICAgICpoaSA9IC0xOworICAgICp6eiA9IDA7 CQkJCS8qIERlZmF1bHQgYm91bmRzIHNlcGFyYXRvciAqLworCisgICAgcmFuZ2VbMF0gPSAtMTsg ICAgICAgICAgICAgICAgICAgICAgLyogSXQncyBPSyAtLSBnZXQgY29udGVudHMgKi8KKyAgICBy YW5nZVsxXSA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAvKiBvZiBzdWJzY3JpcHQgYnJhY2tl dHMgKi8KKyAgICBpZiAoIXMpIHMgPSAiIjsKKyAgICBpZiAoISpzKQorICAgICAgcmV0dXJuKC0x KTsKKyAgICBtYWtlc3RyKCZ0bXAscyk7ICAgICAgICAgICAgICAgICAgICAvKiBNYWtlIGEgcG9r ZWFibGUgY29weSAqLworICAgIHAgPSB0bXA7CisgICAgcSA9IE5VTEw7CisgICAgciA9IE5VTEw7 CisgICAgZm9yIChwID0gczsgKnA7IHArKykgewkJLyogR2V0IHRoZSB0d28gZWxlbWVudHMgKi8K KwlpZiAoKnAgPT0gJ1snKSB7CisJICAgIGJjKys7CQkJLyogQnJhY2tldCBjb3VudGVyICovCisJ ICAgIGlmIChiYyA9PSAxICYmICFxKSBxID0gcCsxOworCX0gZWxzZSBpZiAoKnAgPT0gJ10nKSB7 CisJICAgIGJjLS07CisJICAgIGlmIChiYyA9PSAwICYmIHEpICpwID0gTlVMOworCX0gZWxzZSBp ZiAoYmMgPT0gMSkgewkJLyogSWYgd2l0aGluIGJyYWNrZXJzICovCisJICAgIHMyID0gY2tzdHJj aHIoc2VwLCpwKTsJLyogQ2hlY2sgZm9yIHNlcGFyYXRvciAqLworCSAgICBpZiAoczIpIHsKKwkJ ZGVidWcoRjAwMCwiYm91bmRzcGFpciAqczIiLCIiLCpzMik7CisJCWlmIChjKSB7ICAgICAgICAK KwkJICAgIGRlYnVnKEYwMDAsImJvdW5kc3BhaXIiLCJUb28gbWFueSBzZXBhcmF0b3JzIiwqczIp OworCQkgICAgbWFrZXN0cigmdG1wLE5VTEwpOworCQkgICAgcmV0dXJuKC0xKTsKKwkJfQorCQlj ID0gKnMyOwkJLyogU2VwYXJhdG9yIGNoYXJhY3RlciAqLworCQkqcCA9IE5VTDsKKwkJciA9IHAr MTsKKwkgICAgfQorCX0KKyAgICB9CisgICAgaWYgKGJjID09IDAgJiYgIXEpIHsKKwkvKiBUaGlz IGFsbG93cyBzdWNoIGNvbnN0cnVjdGlvbnMgYXMgInNob3cgYXJyYXkgYSIgKi8KKwlkZWJ1ZyhG MTEwLCJib3VuZHNwYWlyIiwibm8gYnJhY2tldHMiLDApOworCW1ha2VzdHIoJnRtcCxOVUxMKTsK KwlyZXR1cm4oMCk7CisgICAgfQorICAgIGlmIChiYyAhPSAwIHx8ICFxKSB7CisJZGVidWcoRjEx MCwiYm91bmRzcGFpciIsInVuYmFsYW5jZWQgb3IgbWlzc2luZyBicmFja2V0cyIsMCk7CisJbWFr ZXN0cigmdG1wLE5VTEwpOworCXJldHVybigtMSk7CisgICAgfQorICAgIGlmICghcSkgcSA9ICIi OworICAgIGlmICghKnEpIHEgPSAiLTEiOworICAgIGlmICghcikgciA9ICIiOworICAgIGlmICgh KnIpIHIgPSAiLTEiOworCisgICAgZVswXSA9IHE7CisgICAgZVsxXSA9IHI7CisKKyAgICBkZWJ1 ZyhGMDAwLCJib3VuZHNwYWlyIGMiLCIiLGMpOworICAgIGRlYnVnKEYxMTAsImJvdW5kc3BhaXIg cSIscSwwKTsKKyAgICBkZWJ1ZyhGMTEwLCJib3VuZHNwYWlyIHIiLHIsMCk7CisKKyAgICBmb3Ig KGkgPSAwOyBpIDwgMiAmJiBlW2ldOyBpKyspIHsKKwl5ID0gMjU1OwkJCS8qIEV4cGFuZCB2YXJp YWJsZXMsIGV0Yy4gKi8KKwlzID0gYnVmOworCXp6c3RyaW5nKGVbaV0sJnMsJnkpOworCXMgPSBl dmFseChidWYpOwkJCS8qIEV2YWx1YXRlIGl0IGFyaXRobWV0aWNhbGx5ICovCisJaWYgKHMpIGlm ICgqcykKKwkgIGNrc3RybmNweShidWYscywyNTYpOworCWlmICghY2hrbnVtKGJ1ZikpIHsJCS8q IERpZCB3ZSBnZXQgYSBudW1iZXI/ICovCisJICAgIGRlYnVnKEYxMTAsImJvdW5kc3BhaXIgZWxl bWVudCBub3QgbnVtZXJpYyIsYnVmLDApOworCSAgICBtYWtlc3RyKCZ0bXAsTlVMTCk7CQkvKiBO bywgZmFpbC4gKi8KKwkgICAgcmV0dXJuKC0xKTsKKwl9CisJcmFuZ2VbaV0gPSBhdG9pKGJ1Zik7 CisgICAgfQorICAgIG1ha2VzdHIoJnRtcCxOVUxMKTsgICAgICAgICAgICAgICAgIC8qIEZyZWUg dGVtcG9yYXJ5IHBva2VkIHN0cmluZyAqLworICAgICpsbyA9IHJhbmdlWzBdOyAgICAgICAgICAg ICAgICAgICAgIC8qIFJldHVybiB3aGF0IHdlIGdvdCAqLworICAgICpoaSA9IHJhbmdlWzFdOwor ICAgICp6eiA9IGM7CisgICAgZGVidWcoRjEwMSwiYm91bmRzcGFpciBsbyIsIiIsKmxvKTsKKyAg ICBkZWJ1ZyhGMTAxLCJib3VuZHNwYWlyIGhpIiwiIiwqaGkpOworICAgIHJldHVybigwKTsKK30K KworLyogIEEgUiBSIEEgWSBCIE8gVSBOIEQgUyAgLS0gIFBhcnNlIGFycmF5IHNlZ21lbnQgbm90 YXRpb24gXCZhW246bV0gICovCisKKy8qCisgIENhbGwgd2l0aCBzID0gYXJyYXkgcmVmZXJlbmNl LCBwbHVzIHR3byBwb2ludGVycyB0byBpbnRzLgorICBSZXR1cm5zIC0xIG9uIGVycm9yLCBvciBh cnJheSBpbmRleCwgd2l0aCB0aGUgdHdvIGludHMgc2V0IGFzIGZvbGxvd3M6CisgICBcJmFbXSAg ICAgLTEsIC0xCisgICBcJmFbM10gICAgIDMsIC0xCisgICBcJmFbMzoxN10gIDMsIDE3CisgIFRo ZSBhcnJheSBuZWVkIG5vdCBiZSBkZWNsYXJlZCAtLSB0aGlzIHJvdXRpbmUgaXMganVzdCBmb3Ig cGFyc2luZy4KKyovCitpbnQKK2FycmF5Ym91bmRzKHMsbG8saGkpIGNoYXIgKiBzOyBpbnQgKiBs bywgKiBoaTsgeworICAgIGludCBpLCB4LCB5LCByYW5nZVsyXTsKKyAgICBjaGFyIHp6LCBidWZb MjU2XSwgKiBwLCAqIHE7CisgICAgY2hhciAqIHRtcCA9IE5VTEw7CisKKyAgICAqbG8gPSAtMTsg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEZWZhdWx0IGJvdW5kcyAqLworICAgICpoaSA9 IC0xOworCisgICAgaWYgKCFzKSBzID0gIiI7ICAgICAgICAgICAgICAgICAgICAgLyogRGVmZW5z ZSBkZSBudWxsIGFyZ3MgKi8KKyAgICBpZiAoISpzKQorICAgICAgcmV0dXJuKC0xKTsKKworICAg IHggPSB4YXJyYXkocyk7ICAgICAgICAgICAgICAgICAgICAgIC8qIENoZWNrIGJhc2ljIHN0cnVj dHVyZSAqLworICAgIGRlYnVnKEYxMTEsImFycmF5Ym91bmRzIHhhcnJheSIscyx4KTsKKyAgICBp ZiAoeCA8IDApICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOb3QgT0ssIGZhaWwuICovCisg ICAgICByZXR1cm4oLTEpOworICAgIHkgPSBib3VuZHNwYWlyKHMsIjoiLGxvLGhpLCZ6eik7Cisg ICAgZGVidWcoRjExMSwiYXJyYXlib3VuZHMgYm91bmRzcGFpciIscyx5KTsKKyAgICBkZWJ1ZyhG MTAxLCJhcnJheWJvdW5kcyBsbyIsIiIsKmxvKTsKKyAgICBkZWJ1ZyhGMTAxLCJhcnJheWJvdW5k cyBoaSIsIiIsKmhpKTsKKyAgICBpZiAoeSA8IDApCQkJCS8qIEdldCBib3VuZHMgKi8KKyAgICAg IHJldHVybigtMSk7CisgICAgcmV0dXJuKHgpOworfQorCisvKiAgQSBSIFIgQSBZIE4gQSBNICAt LSAgUGFyc2UgYW4gYXJyYXkgbmFtZSAgKi8KKworLyoKKyAgQ2FsbCB3aXRoIHBvaW50ZXIgdG8g c3RyaW5nIHRoYXQgc3RhcnRzIHdpdGggdGhlIGFycmF5IHJlZmVyZW5jZS4KKyAgU3RyaW5nIG1h eSBiZWdpbiB3aXRoIGVpdGhlciBcJiBvciBqdXN0ICYuCisgIE9uIHN1Y2Nlc3MsCisgICAgUmV0 dXJucyBsZXR0ZXIgSUQgKGFsd2F5cyBsb3dlcmNhc2UpIGluIGFyZ3VtZW50IGMsCisgICAgICB3 aGljaCBjYW4gYWxzbyBiZSBhY2NlbnQgZ3JhdmUgKGAgPSA5NjsgJ0AnIGlzIGNvbnZlcnRlZCB0 byBncmF2ZSk7CisgICAgRGltZW5zaW9uIG9yIHN1YnNjcmlwdCBpbiBhcmd1bWVudCBuOworICAg IElNUE9SVEFOVDogVGhlc2UgYXJndW1lbnRzIG11c3QgYmUgcHJvdmlkZWQgYnkgdGhlIGNhbGxl ciBhcyBhZGRyZXNzZXMKKyAgICBvZiBpbnRzIChub3QgY2hhcnMpLCBmb3IgZXhhbXBsZToKKyAg ICAgIGNoYXIgKnM7IGludCB4LCB5OworICAgICAgYXJyYXluYW0ocywmeCwmeSk7CisgIE9uIGZh aWx1cmUsIHJldHVybnMgYSBuZWdhdGl2ZSBudW1iZXIsIHdpdGggYXJncyBuIGFuZCBjIHNldCB0 byB6ZXJvLgorKi8KK2ludAorYXJyYXluYW0oc3MsYyxuKSBjaGFyICpzczsgaW50ICpjOyBpbnQg Km47IHsKKyAgICBpbnQgaSwgeSwgcHAsIGxlbjsKKyAgICBjaGFyIHg7CisgICAgY2hhciAqcywg KnAsICpzeCwgKnZucDsKKyAgICAvKiBPbiBzdGFjayB0byBhbGxvdyBmb3IgcmVjdXJzaXZlIGNh bGxzLi4uICovCisgICAgY2hhciB2bmJ1ZltBUlJBWVJFRkxFTisxXTsgICAgICAgICAgLyogRW50 aXJlIGFycmF5IHJlZmVyZW5jZSAqLworICAgIGNoYXIgc3NidWZbQVJSQVlSRUZMRU4rMV07ICAg ICAgICAgIC8qIFN1YnNjcmlwdCBpbiAicGxhaW4gdGV4dCIgKi8KKyAgICBjaGFyIHN4YnVmWzE2 XTsgICAgICAgICAgICAgICAgICAgICAvKiBFdmFsdWF0ZWQgc3Vic2NyaXB0ICovCisKKyAgICAq YyA9ICpuID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBJbml0aWFsaXplIHJldHVybiB2 YWx1ZXMgKi8KKyAgICBsZW4gPSBzdHJsZW4oc3MpOworICAgIGZvciAocHAgPSAwLGkgPSAwOyBp IDwgbGVuOyBpKyspIHsgICAgICAgICAgLyogQ2hlY2sgbGVuZ3RoICovCisgICAgICAgIGlmIChz c1tpXSA9PSAnWycpIHsKKyAgICAgICAgICAgIHBwKys7CisgICAgICAgIH0gZWxzZSBpZiAoc3Nb aV0gPT0gJ10nKSB7CisgICAgICAgICAgICBpZiAoLS1wcCA9PSAwKQorICAgICAgICAgICAgICBi cmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoaSA+IEFSUkFZUkVGTEVOKSB7CisgICAg ICAgIHByaW50ZigiP0FycmF5IHJlZmVyZW5jZSB0b28gbG9uZyAtICVzXG4iLHNzKTsKKyAgICAg ICAgcmV0dXJuKC05KTsKKyAgICB9CisgICAgY2tzdHJuY3B5KHZuYnVmLHNzLEFSUkFZUkVGTEVO KTsKKyAgICB2bnAgPSB2bmJ1ZjsKKyAgICBpZiAodm5idWZbMF0gPT0gQ01EUSAmJiB2bmJ1Zlsx XSA9PSAnJicpIHZucCsrOworICAgIGlmICgqdm5wICE9ICcmJykgeworICAgICAgICBwcmludGYo Ij9Ob3QgYW4gYXJyYXkgLSAlc1xuIix2bmJ1Zik7CisgICAgICAgIHJldHVybigtOSk7CisgICAg fQorICAgIHggPSAqKHZucCArIDEpOyAgICAgICAgICAgICAgICAgICAgIC8qIEZvbGQgY2FzZSBv ZiBhcnJheSBuYW1lICovCisKKyAgICAvKiBXZSBkb24ndCB1c2UgaXN1cHBlciAmIHRvbG93ZXIg aGVyZSBvbiBwdXJwb3NlIGJlY2F1c2UgdGhlc2UgKi8KKyAgICAvKiB3b3VsZCBwcm9kdWNlIHVu ZGVzaXJlZCBlZmZlY3RzIHdpdGggYWNjZW50ZWQgbGV0dGVycy4gKi8KKyAgICBpZiAoeCA+IDYz ICYmIHggPCA5MSkgeCAgPSAqKHZucCArIDEpID0gKGNoYXIpICh4ICsgMzIpOworICAgIGlmICgo eCA8IEFSUkFZQkFTRSkgfHwgKHggPiAxMjIpIHx8ICgqKHZucCsyKSAhPSAnWycpKSB7CisgICAg ICAgIGlmIChtc2dmbGcpIHsKKyAgICAgICAgICAgIHByaW50ZigiP0ludmFsaWQgZm9ybWF0IGZv ciBhcnJheSBuYW1lIC0gJXNcbiIsdm5idWYpOworICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAg ICAgICAgfSBlbHNlCisgICAgICAgICAgcmV0dXJuKC0yKTsKKyAgICB9CisgICAgKmMgPSB4OyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmV0dXJuIHRoZSBhcnJheSBuYW1lICovCisg ICAgcyA9IHZucCszOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogR2V0IGRpbWVuc2lvbiAq LworICAgIHAgPSBzc2J1ZjsKKyAgICBwcCA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBCcmFja2V0IGNvdW50ZXIgKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgQVJSQVlSRUZMRU4g JiYgKnMgIT0gTlVMOyBpKyspIHsgLyogQ29weSB1cCB0byBdICovCisgICAgICAgIGlmICgqcyA9 PSAnWycpIHBwKys7CisgICAgICAgIGlmICgqcyA9PSAnXScgJiYgLS1wcCA9PSAwKSBicmVhazsK KyAgICAgICAgKnArKyA9ICpzKys7CisgICAgfQorICAgIGlmICgqcyAhPSAnXScpIHsKKyAgICAg ICAgcHJpbnRmKCI/Tm8gY2xvc2luZyBicmFja2V0IG9uIGFycmF5IGRpbWVuc2lvbiAtICVzXG4i LHZuYnVmKTsKKyAgICAgICAgcmV0dXJuKC05KTsKKyAgICB9CisgICAgcC0tOyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogVHJpbSB3aGl0ZXNwYWNlIGZyb20gZW5kICovCisgICAg d2hpbGUgKCpwID09IFNQIHx8ICpwID09IEhUKQorICAgICAgcC0tOworICAgIHArKzsKKyAgICAq cCA9IE5VTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUZXJtaW5hdGUgc3Vic2NyaXB0 IHdpdGggbnVsbCAqLworICAgIHAgPSBzc2J1ZjsgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IFBvaW50IHRvIGJlZ2lubmluZyBvZiBzdWJzY3JpcHQgKi8KKyAgICB3aGlsZSAoKnAgPT0gU1Ag fHwgKnAgPT0gSFQpICAgICAgICAvKiBUcmltIHdoaXRlc3BhY2UgZnJvbSBiZWdpbm5pbmcgKi8K KyAgICAgIHArKzsKKyAgICBzeCA9IHN4YnVmOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBX aGVyZSB0byBwdXQgZXhwYW5kZWQgc3Vic2NyaXB0ICovCisgICAgeSA9IDE2OworICAgIHsKKwkv KiBFdmVuIGlmIFZBUklBQkxFLUVWQUxVQVRJT04gU0lNUExFIHVzZSBSRUNVUlNJVkUgZm9yIHN1 YnNjcmlwdHMgKi8KKwkvKiBOT1RFOiBUaGlzIGlzIHZ1bG5lcmFibGUgdG8gU0lHSU5UIGFuZCB3 aGF0bm90Li4uICovCisJaW50IHRtcCA9IHZhcmV2YWw7CQkvKiBTYXZlIFZBUklBQkxFLUVWQUxV QVRJT04gc2V0dGluZyAqLworCXZhcmV2YWwgPSAxOwkJCS8qIEZvcmNlIGl0IHRvIFJFQ1VSU0lW RSAqLworCXp6c3RyaW5nKHAsJnN4LCZ5KTsJCS8qIENvbnZlcnQgdmFyaWFibGVzLCBldGMuICov CisJdmFyZXZhbCA9IHRtcDsJCQkvKiBSZXN0b3JlIFZBUklBQkxFLUVWQUxVQVRJT04gKi8KKyAg ICB9CisgICAgc3ggPSBzeGJ1ZjsKKyAgICB3aGlsZSAoKnN4ID09IFNQKSBzeCsrOworICAgIC8q IGRlYnVnKEYxMTAsImFycmF5bmFtIHN4IiwiIixzeCk7ICovCisgICAgaWYgKCEqc3gpIHsgICAg ICAgICAgICAgICAgICAgICAgICAgLyogRW1wdHkgYnJhY2tldHMuLi4gKi8KKyAgICAgICAgKm4g PSAtMTc7ICAgICAgICAgICAgICAgICAgICAgICAvKiAoU2VjcmV0IGNvZGUgOi0pICovCisgICAg ICAgIHJldHVybigtMik7CisgICAgfQorICAgIHAgPSBldmFsYShzeCk7ICAgICAgICAgICAgICAg ICAgICAgIC8qIFJ1biBpdCB0aHJ1IFxmbmV2YWwoKS4uLiAqLworICAgIGlmIChwKSBpZiAoKnAp IGNrc3RybmNweShzeGJ1ZixwLDE2KTsgLyogV2Uga25vdyBpdCBoYXMgdG8gYmUgYSBudW1iZXIu ICovCisKKyAgICBpZiAoIWNoa251bShzeGJ1ZikpIHsgICAgICAgICAgICAgICAvKiBNYWtlIHN1 cmUgaXQncyBhbGwgZGlnaXRzICovCisgICAgICAgIGlmIChtc2dmbGcpIHsKKyAgICAgICAgICAg IHByaW50ZigiP0FycmF5IGRpbWVuc2lvbiBvciBzdWJzY3JpcHQgbWlzc2luZyBvciBub3QgbnVt ZXJpY1xuIik7CisgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICB9IGVsc2UKKyAgICAg ICAgICByZXR1cm4oLTIpOworICAgIH0KKyAgICBpZiAoKHkgPSBhdG9pKHN4YnVmKSkgPCAwKSB7 CisgICAgICAgIGlmIChjbWZsZ3MgPT0gMCkgcHJpbnRmKCJcbiIpOworICAgICAgICBpZiAobXNn ZmxnKSB7CisgICAgICAgICAgICBwcmludGYoIj9BcnJheSBkaW1lbnNpb24gb3Igc3Vic2NyaXB0 IG5vdCBwb3NpdGl2ZSBvciB6ZXJvXG4iKTsKKyAgICAgICAgICAgIHJldHVybigtOSk7CisgICAg ICAgIH0gZWxzZQorICAgICAgICAgIHJldHVybigtMik7CisgICAgfQorICAgICpuID0geTsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJldHVybiB0aGUgc3Vic2NyaXB0IG9yIGRpbWVu c2lvbiAqLworICAgIHJldHVybigwKTsKK30KKworLyogY2hrYXJyYXkgcmV0dXJucyAwIG9yIGdy ZWF0ZXIgaWYgYXJyYXkgZXhpc3RzLCBuZWdhdGl2ZSBvdGhlcndpc2UgKi8KKworaW50CitjaGth cnJheShhLGkpIGludCBhLCBpOyB7ICAgICAgICAgICAgICAgLyogQ2hlY2sgaWYgYXJyYXkgaXMg ZGVjbGFyZWQgKi8KKyAgICBpbnQgeDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBh bmQgaWYgc3Vic2NyaXB0IGlzIGluIHJhbmdlICovCisgICAgaWYgKGEgPT0gNjQpIGEgPSA5Njsg ICAgICAgICAgICAgICAgLyogQ29udmVydCBhdHNpZ24gdG8gZ3JhdmUgYWNjZW50ICovCisgICAg eCA9IGEgLSBBUlJBWUJBU0U7ICAgICAgICAgICAgICAgICAgLyogVmFsdWVzIG11c3QgYmUgaW4g cmFuZ2UgOTUtMTIyICovCisjaWZkZWYgQ09NTUVOVAorICAgIGlmICh4ID09IDAgJiYgbWFjbHZs IDwgMCkgICAgICAgICAgIC8qIE1hY3JvIGFyZyB2ZWN0b3IgYnV0IG5vIG1hY3JvICovCisgICAg ICByZXR1cm4oMCk7CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgIGlmICh4IDwgMCB8fCB4ID4g J3onIC0gQVJSQVlCQVNFKSAgIC8qIE5vdCBpbiByYW5nZSAqLworICAgICAgcmV0dXJuKC0yKTsK KyAgICBpZiAoYV9wdHJbeF0gPT0gTlVMTCkgcmV0dXJuKC0xKTsgICAvKiBOb3QgZGVjbGFyZWQg Ki8KKyAgICBpZiAoaSA+IGFfZGltW3hdKSByZXR1cm4oLTIpOyAgICAgICAvKiBEZWNsYXJlZCBi dXQgb3V0IG9mIHJhbmdlLiAqLworICAgIHJldHVybihhX2RpbVt4XSk7ICAgICAgICAgICAgICAg ICAgIC8qIEFsbCBvaywgcmV0dXJuIGRpbWVuc2lvbiAqLworfQorCisjaWZkZWYgQ09NTUVOVCAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogVGhpcyBpc24ndCB1c2VkLiAqLworY2hhciAqCith cnJheXZhbChhLGkpIGludCBhLCBpOyB7ICAgICAgICAgICAgICAgLyogUmV0dXJuIHZhbHVlIG9m IFwmYVtpXSAqLworICAgIGludCB4OyBjaGFyICoqcDsgICAgICAgICAgICAgICAgICAgIC8qIChw b3NzaWJseSBOVUxMKSAqLworICAgIGlmIChhID09IDY0KSBhID0gOTY7ICAgICAgICAgICAgICAg IC8qIENvbnZlcnQgYXRzaWduIHRvIGdyYXZlIGFjY2VudCAqLworICAgIHggPSBhIC0gQVJSQVlC QVNFOyAgICAgICAgICAgICAgICAgIC8qIFZhbHVlcyBtdXN0IGJlIGluIHJhbmdlIDk1LTEyMiAq LworICAgIGlmICh4IDwgMCB8fCB4ID4gMjcpIHJldHVybihOVUxMKTsgIC8qIE5vdCBpbiByYW5n ZSAqLworICAgIGlmICgoeCA+IDApICYmIChwID0gYV9wdHJbeF0pID09IE5VTEwpIC8qIEFycmF5 IG5vdCBkZWNsYXJlZCAqLworICAgICAgcmV0dXJuKE5VTEwpOworICAgIGlmIChpID4gYV9kaW1b eF0pICAgICAgICAgICAgICAgICAgIC8qIFN1YnNjcmlwdCBvdXQgb2YgcmFuZ2UuICovCisgICAg ICByZXR1cm4oTlVMTCk7CisgICAgcmV0dXJuKHBbaV0pOyAgICAgICAgICAgICAgICAgICAgICAg LyogQWxsIG9rLCByZXR1cm4gcG9pbnRlciB0byB2YWx1ZS4gKi8KK30KKyNlbmRpZiAvKiBDT01N RU5UICovCisKKy8qCisgIHB1c2hhcnJheSgpIGlzIGNhbGxlZCB3aGVuIGFuIGFycmF5IG5hbWUg aXMgaW5jbHVkZWQgaW4gYSBMT0NBTCBzdGF0ZW1lbnQuCisgIEl0IG1vdmVzIHRoZSBwb2ludGVy cyBmcm9tIHRoZSBnbG9iYWwgZGVmaW5pdGlvbiB0byB0aGUgc3RhY2ssIGFuZCByZW1vdmVzCisg IHRoZSBnbG9iYWwgZGVmaW5pdGlvbi4gIExhdGVyLCBpZiB0aGUgc2FtZSBhcnJheSBpcyBkZWNs YXJlZCBpbiB0aGUgbG9jYWwKKyAgY29udGV4dCwgaXQgb2NjdXBpZXMgdGhlIGdsb2JhbCBkZWZp bml0aW9uIGluIHRoZSBub3JtYWwgd2F5LiAgQnV0IHdoZW4KKyAgcG9wY2x2bCgpIGlzIGNhbGxl ZCwgaXQgcmVwbGFjZXMgdGhlIGdsb2JhbCBkZWZpbml0aW9uIHdpdGggdGhlIG9uZSBzYXZlZAor ICBoZXJlLiAgVGhlICJzZWNyZXQgY29kZSIgaXMgdXNlZCB0byBpbmRpY2F0ZSB0byBwb3BjbHYo KSB0aGF0IGl0IHNob3VsZAorICByZW1vdmUgdGhlIGdsb2JhbCBhcnJheSB3aGVuIHBvcHBpbmcg dGhyb3VnaCB0aGlzIGxldmVsIC0tIG90aGVyd2lzZSBpZiBhCisgIGxvY2FsIGFycmF5IHdlcmUg ZGVjbGFyZWQgdGhhdCBoYWQgbm8gY291bnRlcnBhcnQgYXQgYW55IGhpZ2hlciBsZXZlbCwgaXQK KyAgd291bGQgbmV2ZXIgYmUgZGVsZXRlZC4gIFRoaXMgYWxsb3dzIEFsZ29sLWxpa2UgaW5oZXJp dGFuY2UgdG8gd29yayBib3RoCisgIG9uIHRoZSB3YXkgZG93biBhbmQgb24gdGhlIHdheSBiYWNr IHVwLgorKi8KK2ludAorcHVzaGFycmF5KHgseikgaW50IHgsIHo7IHsKKyAgICBpbnQgeTsKKyAg ICBkZWJ1ZyhGMDAwLCJwdXNoYXJyYXkgeCIsIiIseCk7CisgICAgZGVidWcoRjEwMSwicHVzaGFy cmF5IHoiLCIiLHopOworICAgIHkgPSBjaGthcnJheSh4LHopOworICAgIGRlYnVnKEYxMDEsInB1 c2hhcnJheSB5IiwiIix5KTsKKyAgICB4IC09IEFSUkFZQkFTRTsgICAgICAgICAgICAgICAgICAg ICAvKiBDb252ZXJ0IG5hbWUgbGV0dGVyIHRvIGluZGV4LiAqLworICAgIGlmICh4IDwgMCB8fCB4 ID4gMjcpCisgICAgICByZXR1cm4oLTEpOworICAgIGlmICh5IDwgMCkgeworICAgICAgICBhYV9w dHJbY21kbHZsXVt4XSA9IChjaGFyICoqKSBOVUxMOworICAgICAgICBhYV9kaW1bY21kbHZsXVt4 XSA9IC0yMzsgICAgICAgIC8qIFNlY3JldCBjb2RlIChzZWUgcG9wY2x2bCgpKSAqLworICAgIH0g ZWxzZSB7CisgICAgICAgIGFhX3B0cltjbWRsdmxdW3hdID0gYV9wdHJbeF07CisgICAgICAgIGFh X2RpbVtjbWRsdmxdW3hdID0geTsKKyAgICB9CisgICAgYV9wdHJbeF0gPSAoY2hhciAqKikgTlVM TDsKKyAgICBhX2RpbVt4XSA9IDA7CisgICAgcmV0dXJuKDApOworfQorCisvKiAgUCBBIFIgUyBF IFYgQSBSICAtLSAgUGFyc2UgYSB2YXJpYWJsZSBuYW1lIG9yIGFycmF5IHJlZmVyZW5jZS4gICov CisvKgorIENhbGwgd2l0aDoKKyAgIHMgID0gcG9pbnRlciB0byBjYW5kaWRhdGUgdmFyaWFibGUg bmFtZSBvciBhcnJheSByZWZlcmVuY2UuCisgICAqYyA9IGFkZHJlc3Mgb2YgaW50ZWdlciBpbiB3 aGljaCB0byByZXR1cm4gdmFyaWFibGUgSUQuCisgICAqaSA9IGFkZHJlc3Mgb2YgaW50ZWdlciBp biB3aGljaCB0byByZXR1cm4gYXJyYXkgc3Vic2NyaXB0LgorIFJldHVybnM6CisgICAtMjogIHN5 bnRheCBlcnJvciBpbiB2YXJpYWJsZSBuYW1lIG9yIGFycmF5IHJlZmVyZW5jZS4KKyAgICAxOiAg c3VjY2Vzc2Z1bCBwYXJzZSBvZiBhIHNpbXBsZSB2YXJpYWJsZSwgd2l0aCBJRCBpbiBjLgorICAg IDI6ICBzdWNjZXNzZnVsIHBhcnNlIG9mIGFuIGFycmF5IHJlZmVyZW5jZSwgdy9JRCBpbiBjIGFu ZCBzdWJzY3JpcHQgaW4gaS4KKyovCitpbnQKK3BhcnNldmFyKHMsYyxpKSBjaGFyICpzOyBpbnQg KmMsICppOyB7CisgICAgY2hhciAqcDsKKyAgICBpbnQgeCx5LHo7CisKKyAgICBwID0gczsKKyAg ICBpZiAoKnMgPT0gQ01EUSkgcysrOyAgICAgICAgICAgICAgICAvKiBQb2ludCBhZnRlciBiYWNr c2xhc2ggKi8KKworICAgIGlmICgqcyAhPSAnJScgJiYgKnMgIT0gJyYnKSB7ICAgICAgIC8qIE1h a2Ugc3VyZSBpdCdzICUgb3IgJiAqLworICAgICAgICBwcmludGYoIj9Ob3QgYSB2YXJpYWJsZSBu YW1lIC0gJXNcbiIscCk7CisgICAgICAgIHJldHVybigtOSk7CisgICAgfQorICAgIGlmICgoaW50 KXN0cmxlbihzKSA8IDIpIHsKKyAgICAgICAgcHJpbnRmKCI/SW5jb21wbGV0ZSB2YXJpYWJsZSBu YW1lIC0gJXNcbiIscCk7CisgICAgICAgIHJldHVybigtOSk7CisgICAgfQorICAgIGlmICgqcyA9 PSAnJScgJiYgKihzKzIpICE9ICdcMCcpIHsKKyAgICAgICAgcHJpbnRmKCI/T25seSBvbmUgY2hh cmFjdGVyIGFmdGVyICclJScgaW4gdmFyaWFibGUgbmFtZSwgcGxlYXNlXG4iKTsKKyAgICAgICAg cmV0dXJuKC05KTsKKyAgICB9CisgICAgaWYgKCpzID09ICcmJyAmJiAqKHMrMikgIT0gJ1snKSB7 CisgICAgICAgIHByaW50ZigiP0FycmF5IHN1YnNjcmlwdCBleHBlY3RlZCAtICVzXG4iLHApOwor ICAgICAgICByZXR1cm4oLTkpOworICAgIH0KKyAgICBpZiAoKnMgPT0gJyUnKSB7ICAgICAgICAg ICAgICAgICAgICAvKiBTaW1wbGUgdmFyaWFibGUuICovCisgICAgICAgIHkgPSAqKHMrMSk7ICAg ICAgICAgICAgICAgICAgICAgLyogR2V0IHZhcmlhYmxlIElEIGxldHRlci9jaGFyICovCisgICAg ICAgIGlmIChpc3VwcGVyKHkpKSB5IC09ICgnYSctJ0EnKTsgLyogQ29udmVydCB1cHBlciB0byBs b3dlciBjYXNlICovCisgICAgICAgICpjID0geTsgICAgICAgICAgICAgICAgICAgICAgICAgLyog U2V0IHRoZSByZXR1cm4gdmFsdWVzLiAqLworICAgICAgICAqaSA9IC0xOyAgICAgICAgICAgICAg ICAgICAgICAgIC8qIE5vIGFycmF5IHN1YnNjcmlwdC4gKi8KKyAgICAgICAgcmV0dXJuKDEpOyAg ICAgICAgICAgICAgICAgICAgICAvKiBSZXR1cm4gMSA9IHNpbXBsZSB2YXJpYWJsZSAqLworICAg IH0KKyAgICBpZiAoKnMgPT0gJyYnKSB7ICAgICAgICAgICAgICAgICAgICAvKiBBcnJheSByZWZl cmVuY2UuICovCisgICAgICAgIHkgPSBhcnJheW5hbShzLCZ4LCZ6KTsgICAgICAgICAgLyogR28g cGFyc2UgaXQuICovCisgICAgICAgIGRlYnVnKEYxMDEsInBhcnNldmFyIGFycmF5bmFtIiwiIix5 KTsKKyAgICAgICAgaWYgKCh5KSA8IDApIHsKKyAgICAgICAgICAgIGlmICh5ID09IC0yKQorICAg ICAgICAgICAgICByZXR1cm4ocHVzaGFycmF5KHgseikpOworICAgICAgICAgICAgaWYgKHkgIT0g LTkpCisgICAgICAgICAgICAgIHByaW50ZigiP0ludmFsaWQgYXJyYXkgcmVmZXJlbmNlIC0gJXNc biIscCk7CisgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICB9CisgICAgICAgIGlmIChj aGthcnJheSh4LHopIDwgMCkgeyAgICAgICAgLyogQ2hlY2sgaWYgZGVjbGFyZWQsIGV0Yy4gKi8K KyAgICAgICAgICAgIHByaW50ZigiP0FycmF5IG5vdCBkZWNsYXJlZCBvciBzdWJzY3JpcHQgb3V0 IG9mIHJhbmdlXG4iKTsKKyAgICAgICAgICAgIHJldHVybigtOSk7CisgICAgICAgIH0KKyAgICAg ICAgKmMgPSB4OyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXR1cm4gYXJyYXkgbGV0dGVy ICovCisgICAgICAgICppID0gejsgICAgICAgICAgICAgICAgICAgICAgICAgLyogYW5kIHN1YnNj cmlwdC4gKi8KKyAgICAgICAgcmV0dXJuKDIpOworICAgIH0KKyAgICByZXR1cm4oLTIpOyAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBOb25lIG9mIHRoZSBhYm92ZS4gKi8KK30KKworCisjZGVm aW5lIFZBTE4gMzIKKworLyogR2V0IHRoZSBudW1lcmljIHZhbHVlIG9mIGEgdmFyaWFibGUgKi8K Ky8qCisgIENhbGwgd2l0aCBwb2ludGVyIHRvIHZhcmlhYmxlIG5hbWUsIHBvaW50ZXIgdG8gaW50 IGZvciByZXR1cm4gdmFsdWUuCisgIFJldHVybnM6CisgICAgMCBvbiBzdWNjZXNzIHdpdGggc2Vj b25kIGFyZyBjb250YWluaW5nIHRoZSB2YWx1ZS4KKyAgIC0xIG9uIGZhaWx1cmUgKGJhZCB2YXJp YWJsZSBzeW50YXgsIHZhcmlhYmxlIG5vdCBkZWZpbmVkIG9yIG5vdCBudW1lcmljKS4KKyovCitp bnQKK3ZhcnZhbChzLHYpIGNoYXIgKnM7IENLX09GRl9UICp2OyB7CisgICAgY2hhciB2YWxidWZb VkFMTisxXTsgICAgICAgICAgICAgICAgLyogcyBpcyBwb2ludGVyIHRvIHZhcmlhYmxlIG5hbWUg Ki8KKyAgICBjaGFyIG5hbWVbMjU2XTsKKyAgICBjaGFyICpwOworICAgIGludCB5OworCisgICAg aWYgKCpzICE9IENNRFEpIHsgICAgICAgICAgICAgICAgICAgLyogSGFuZGxlIG1hY3JvIG5hbWVz IHRvbyAqLworICAgICAgICBja21ha21zZyhuYW1lLDI1NiwiXFxtKCIscywiKSIsTlVMTCk7Cisg ICAgICAgIHMgPSBuYW1lOworICAgIH0KKyAgICBwID0gdmFsYnVmOyAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBFeHBhbmQgdmFyaWFibGUgaW50byB2YWxidWYuICovCisgICAgeSA9IFZBTE47 CisgICAgaWYgKHp6c3RyaW5nKHMsJnAsJnkpIDwgMCkgcmV0dXJuKC0xKTsKKyAgICBwID0gdmFs YnVmOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBNYWtlIHN1cmUgdmFsdWUgaXMgbnVtZXJp YyAgKi8KKyAgICBpZiAoISpwKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBCZSBuaWNl IC0tIGxldCBhbiB1bmRlZmluZWQgKi8KKyAgICAgICAgdmFsYnVmWzBdID0gJzAnOyAgICAgICAg ICAgICAgICAvKiB2YXJpYWJsZSBiZSB0cmVhdGVkIGFzIDAuICAgKi8KKyAgICAgICAgdmFsYnVm WzFdID0gTlVMOworICAgIH0KKyAgICBpZiAoY2hrbnVtKHApKSB7ICAgICAgICAgICAgICAgICAg ICAvKiBDb252ZXJ0IG51bWVyaWMgc3RyaW5nIHRvIGludCAqLworICAgICAgICAqdiA9IGNrYXRv ZnMocCk7CQkvKiBPSyAqLworICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIE5vdCBPSyAqLworICAgICAgICBwID0gZXZhbGEocCk7ICAgICAgICAgICAgICAgICAgIC8q IE1heWJlIGl0J3MgYW4gZXhwcmVzc2lvbiAqLworICAgICAgICBpZiAoIWNoa251bShwKSkgICAg ICAgICAgICAgICAgIC8qIERpZCBpdCBldmFsdWF0ZT8gKi8KKyAgICAgICAgICByZXR1cm4oLTEp OyAgICAgICAgICAgICAgICAgICAvKiBObywgZmFpbHVyZS4gKi8KKyAgICAgICAgZWxzZSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBZZXMsICovCisgICAgICAgICAgKnYgPSBja2F0b2Zz KHApOwkJLyogc3VjY2VzcyAqLworICAgIH0KKyAgICByZXR1cm4oMCk7Cit9CisKKy8qIEluY3Jl bWVudCBvciBkZWNyZW1lbnQgYSB2YXJpYWJsZSAqLworLyogUmV0dXJucyAtMSBvbiBmYWlsdXJl LCAwIG9uIHN1Y2Nlc3MgKi8KKworaW50CitpbmN2YXIocyx4LHopIGNoYXIgKnM7IENLX09GRl9U IHg7IGludCB6OyB7ICAvKiBJbmNyZW1lbnQgYSBudW1lcmljIHZhcmlhYmxlICovCisgICAgQ0tf T0ZGX1QgbjsJCQkJLyogcyBpcyBwb2ludGVyIHRvIHZhcmlhYmxlIG5hbWUgKi8KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB4IGlzIGFtb3VudCB0byBpbmNyZW1l bnQgYnkgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB6ICE9 IDAgbWVhbnMgYWRkICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogeiA9IDAgbWVhbnMgc3VidHJhY3QgKi8KKyAgICBpZiAodmFydmFsKHMsJm4pIDwgMCkgICAg ICAgICAgICAgICAvKiBDb252ZXJ0IG51bWVyaWMgc3RyaW5nIHRvIGludCAqLworICAgICAgcmV0 dXJuKC0xKTsKKyAgICBpZiAoeikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJbmNy ZW1lbnQgaXQgYnkgdGhlIGdpdmVuIGFtb3VudCAqLworICAgICAgbiArPSB4OworICAgIGVsc2Ug ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG9yIGRlY3JlbWVudCBhcyByZXF1ZXN0 ZWQuICovCisgICAgICBuIC09IHg7CisgICAgYWRkbWFjKHMsY2tmc3RvYShuKSk7CQkvKiBSZXBs YWNlIG9sZCB2YXJpYWJsZSAqLworICAgIHJldHVybigwKTsKK30KKworLyogRCBPIEQgTyAgLS0g IERvIGEgbWFjcm8gKi8KKworLyoKKyAgQ2FsbCB3aXRoIHggPSBtYWNybyB0YWJsZSBpbmRleCwg cyA9IHBvaW50ZXIgdG8gYXJndW1lbnRzLgorICBSZXR1cm5zIDAgb24gZmFpbHVyZSwgMSBvbiBz dWNjZXNzLgorKi8KKworaW50Citkb2RvKHgscyxmbGFncykgaW50IHg7IGNoYXIgKnM7IGludCBm bGFnczsgeworICAgIGludCB5OworICAgIGV4dGVybiBpbnQgdHJhX2FzZywgdHJhX2NtZDsgaW50 IHRyYV90bXA7CisjaWZuZGVmIE5PTE9DQUwKKyNpZmRlZiBPUzIKKyAgICBleHRlcm4gaW50IHRl cm1faW87CisgICAgaW50IHRlcm1faW9fc2F2ID0gdGVybV9pbzsKKyNlbmRpZiAvKiBPUzIgKi8K KyNlbmRpZiAvKiBOT0xPQ0FMICovCisKKyAgICBpZiAoeCA8IDApICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBJdCBjYW4gaGFwcGVuISAqLworICAgICAgcmV0dXJuKC0xKTsKKworICAgIHRy YV90bXAgPSB0cmFfYXNnOworCisgICAgaWYgKCsrbWFjbHZsID49IE1BQ0xFVkVMKSB7ICAgICAg ICAgLyogTWFrZSBzdXJlIHdlIGhhdmUgc3RvcmFnZSAqLworICAgICAgICBkZWJ1ZyhGMTAxLCJk b2RvIG1hY2x2bCB0b28gZGVlcCIsIiIsbWFjbHZsKTsKKyAgICAgICAgLS1tYWNsdmw7CisgICAg ICAgIHByaW50ZigiTWFjcm9zIG5lc3RlZCB0b28gZGVlcGx5XG4iKTsKKyAgICAgICAgcmV0dXJu KDApOworICAgIH0KKyAgICBtYWNwW21hY2x2bF0gPSBtYWN0YWJbeF0ubXZhbDsgICAgICAvKiBQ b2ludCB0byB0aGUgbWFjcm8gYm9keSAqLworICAgIG1hY3hbbWFjbHZsXSA9IG1hY3RhYlt4XS5t dmFsOyAgICAgIC8qIFJlbWVtYmVyIHdoZXJlIHRoZSBiZWdpbm5pbmcgaXMgKi8KKworI2lmZGVm IENPTU1FTlQKKyAgICBtYWtlc3RyKCYobV9saW5lW21hY2x2bF0pLHMpOyAgICAgICAvKiBFbnRp cmUgYXJnIHN0cmluZyBmb3IgIlwlKiIgKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisKKyAgICBj bWRsdmwrKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFbnRlcmluZyBhIG5ldyBjb21t YW5kIGxldmVsICovCisgICAgaWYgKGNtZGx2bCA+PSBDTURTVEtMKSB7ICAgICAgICAgICAgLyog VG9vIG1hbnkgbWFjcm9zICsgVEFLRSBmaWxlcz8gKi8KKyAgICAgICAgZGVidWcoRjEwMSwiZG9k byBjbWRsdmwgdG9vIGRlZXAiLCIiLGNtZGx2bCk7CisgICAgICAgIGNtZGx2bC0tOworICAgICAg ICBwcmludGYoIj9UQUtFIGZpbGVzIGFuZCBETyBjb21tYW5kcyBuZXN0ZWQgdG9vIGRlZXBseVxu Iik7CisgICAgICAgIHJldHVybigwKTsKKyAgICB9CisjaWZkZWYgREVCVUcKKyAgICBpZiAoZGVi bG9nKSB7CisgICAgICAgIGRlYnVnKEYxMTEsIkNNRCArTSIsbWFjdGFiW3hdLmt3ZCxjbWRsdmwp OworICAgICAgICBkZWJ1ZyhGMDEwLCJDTUQgLT4iLHMsMCk7CisgICAgfQorI2VuZGlmIC8qIERF QlVHICovCisKKyNpZmRlZiBWTVMKKyAgICBjb25yZXMoKTsgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBTbyBDdHJsLUMsIGV0Yywgd2lsbCB3b3JrLiAqLworI2VuZGlmIC8qIFZNUyAqLwor I2lmbmRlZiBOT0xPQ0FMCisjaWZkZWYgT1MyCisgICAgdGVybV9pbyA9IDA7ICAgICAgICAgICAg ICAgICAgICAgICAgLyogRGlzYWJsZSB0ZXJtaW5hbCBlbXVsYXRvciBJL08gKi8KKyNlbmRpZiAv KiBPUzIgKi8KKyNlbmRpZiAvKiBOT0xPQ0FMICovCisgICAgaWZjbWRbY21kbHZsXSA9IDA7Cisg ICAgaWZ0ZXN0W2NtZGx2bF0gPSAwOworICAgIGNvdW50W2NtZGx2bF0gPSBjb3VudFtjbWRsdmwt MV07ICAgIC8qIEluaGVyaXQgQ09VTlQgZnJvbSBwcmV2aW91cyBsZXZlbCAqLworICAgIGludGlt ZVtjbWRsdmxdID0gaW50aW1lW2NtZGx2bC0xXTsgIC8qIEluaGVyaXQgcHJldmlvdXMgSU5QVVQg VElNRU9VVCAqLworICAgIGlucGNhc1tjbWRsdmxdID0gaW5wY2FzW2NtZGx2bC0xXTsgIC8qICAg YW5kIElOUFVUIENBU0UgKi8KKyAgICB0YWtlcnJbY21kbHZsXSA9IHRha2VycltjbWRsdmwtMV07 ICAvKiAgIGFuZCBUQUtFIEVSUk9SICovCisgICAgbWVycm9yW2NtZGx2bF0gPSBtZXJyb3JbY21k bHZsLTFdOyAgLyogICBhbmQgTUFDUk8gRVJST1IgKi8KKyAgICB4cXVpZXRbY21kbHZsXSA9IHF1 aWV0OworICAgIHh2YXJldltjbWRsdmxdID0gdmFyZXZhbDsKKyAgICB4Y21kc3JjID0gQ01EX01E OworICAgIGNtZHN0a1tjbWRsdmxdLnNyYyA9IENNRF9NRDsgICAgICAgIC8qIFNheSB3ZSdyZSBp biBhIG1hY3JvICovCisgICAgY21kc3RrW2NtZGx2bF0ubHZsID0gbWFjbHZsOyAgICAgICAgLyog YW5kIHJlbWVtYmVyIHRoZSBtYWNybyBsZXZlbCAqLworICAgIGNtZHN0a1tjbWRsdmxdLmNjZmxn cyA9IGZsYWdzICYgfkNGX0lNQUM7IC8qIFNldCBmbGFncyAqLworCisgICAgLyogSW5pdGlhbGl6 ZSByZXR1cm4gdmFsdWUgZXhjZXB0IGluIEZPUiwgV0hJTEUsIElGLCBhbmQgU1dJVENIIG1hY3Jv cyAqLworCisgICAgaWYgKCEoZmxhZ3MgJiBDRl9JTUFDKSAmJiBtcnZhbFttYWNsdmxdKSB7Cisg ICAgICAgIGZyZWUobXJ2YWxbbWFjbHZsXSk7CisgICAgICAgIG1ydmFsW21hY2x2bF0gPSBOVUxM OworICAgIH0KKworICAgIC8qIENsZWFyIG9sZCAlMC4uJTkgYXJndW1lbnRzICovCisKKyAgICBh ZGRtYWMoIiUwIixtYWN0YWJbeF0ua3dkKTsgICAgICAgICAvKiBEZWZpbmUgJTAgPSBuYW1lIG9m IG1hY3JvICovCisgICAgbWFrZXN0cigmKG1feGFyZ1ttYWNsdmxdWzBdKSxtYWN0YWJbeF0ua3dk KTsKKyAgICB2YXJuYW1bMF0gPSAnJSc7CisgICAgdmFybmFtWzJdID0gJ1wwJzsKKyAgICB0cmFf YXNnID0gMDsKKyAgICBmb3IgKHkgPSAxOyB5IDwgMTA7IHkrKykgeyAgICAgICAgICAvKiBDbGVh ciBhcmdzICUxLi4lOSAqLworICAgICAgICBpZiAobV9hcmdbbWFjbHZsXVt5XSkgeyAgICAgICAg IC8qIERvbid0IGNhbGwgZGVsbWFjKCkgdW5sZXNzICovCisgICAgICAgICAgICB2YXJuYW1bMV0g PSAoY2hhcikgKHkgKyAnMCcpOyAvKiB3ZSBoYXZlIHRvLi4uICovCisgICAgICAgICAgICBkZWxt YWModmFybmFtLDApOworICAgICAgICB9CisgICAgfQorICAgIHRyYV9hc2cgPSB0cmFfdG1wOwor CisvKiBBc3NpZ24gdGhlIG5ldyBhcmdzIG9uZSB3b3JkIHBlciBhcmcsIGFsbG93aW5nIGJyYWNl cyB0byBncm91cCB3b3JkcyAqLworCisgICAgeHdvcmRzKHMsTUFYQVJHTElTVCxOVUxMLDApOwor CisjaWZuZGVmIE5PTE9DQUwKKyNpZmRlZiBPUzIKKyAgICB0ZXJtX2lvID0gdGVybV9pb19zYXY7 CisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogTk9MT0NBTCAqLworICAgIGlmICh0cmFfY21k KQorICAgICAgcHJpbnRmKCJbJWRdICtNOiBcIiVzXCJcbiIsY21kbHZsLG1hY3RhYlt4XS5rd2Qp OworICAgIHJldHVybigxKTsKK30KKworLyogSW5zZXJ0ICJsaXRlcmFsIiBxdW90ZSBhcm91bmQg ZWFjaCBjb21tYS1zZXBhcmF0ZWQgY29tbWFuZCB0byBwcmV2ZW50ICovCisvKiBpdHMgcHJlbWF0 dXJlIGV4cGFuc2lvbi4gIE9ubHkgZG8gdGhpcyBpZiBvYmplY3QgY29tbWFuZCBpcyBzdXJyb3Vu ZGVkICovCisvKiBieSBicmFjZXMuICovCisKK3N0YXRpYyBjaGFyKiBmbGl0ID0gIlxcZmxpdCgi OworCitpbnQKK2xpdGNtZChzcmMsZGVzdCxuKSBjaGFyICoqc3JjLCAqKmRlc3Q7IGludCBuOyB7 CisgICAgaW50IGJjID0gMCwgcHAgPSAwOworICAgIGNoYXIgYywgKnMsICpscCwgKnNzOworCisg ICAgcyA9ICpzcmM7CisgICAgbHAgPSAqZGVzdDsKKworICAgIGRlYnVnKEYwMTAsImxpdGNtZCIs cywwKTsKKworICAgIHdoaWxlICgqcyA9PSBTUCkgcysrOyAgICAgICAgICAgICAgIC8qIFN0cmlw IGV4dHJhIGxlYWRpbmcgc3BhY2VzICovCisKKyAgICBpZiAoKnMgPT0gJ3snKSB7ICAgICAgICAg ICAgICAgICAgICAvKiBTdGFydHMgd2l0aCBicmFjZSAqLworICAgICAgICBwcCA9IDA7ICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIFBhcmVuIGNvdW50ZXIgKi8KKyAgICAgICAgYmMgPSAxOyAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBDb3VudCBsZWFkaW5nIGJyYWNlICovCisgICAgICAg ICpscCsrID0gKnMrKzsgICAgICAgICAgICAgICAgICAgLyogQ29weSBpdCAqLworICAgICAgICBp ZiAoLS1uIDwgMSkgcmV0dXJuKC0xKTsgICAgICAgIC8qIENoZWNrIHNwYWNlICovCisgICAgICAg IHdoaWxlICgqcyA9PSBTUCkgcysrOyAgICAgICAgICAgLyogU3RyaXAgaW50ZXJpb3IgbGVhZGlu ZyBzcGFjZXMgKi8KKyAgICAgICAgc3MgPSBmbGl0OyAgICAgICAgICAgICAgICAgICAgICAvKiBQ b2ludCB0byAiXGZsaXQoIiAqLworICAgICAgICB3aGlsZSAoKCpscCsrID0gKnNzKyspKSAgICAg ICAgIC8qIENvcHkgaXQgKi8KKyAgICAgICAgICBpZiAoLS1uIDwgMSkgICAgICAgICAgICAgICAg ICAvKiBhbmQgY2hlY2sgc3BhY2UgKi8KKyAgICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAg IGxwLS07ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQmFjayB1cCBvdmVyIG51bGwgKi8K KworICAgICAgICB3aGlsZSAoKnMpIHsgICAgICAgICAgICAgICAgICAgIC8qIEdvIHRocnUgcmVz dCBvZiB0ZXh0ICovCisgICAgICAgICAgICBjID0gKnM7CisgICAgICAgICAgICBpZiAoYyA9PSAn eycpIGJjKys7ICAgICAgICAgLyogQ291bnQgYnJhY2tldHMgKi8KKyAgICAgICAgICAgIGlmIChj ID09ICcoJykgcHArKzsgICAgICAgICAvKiBhbmQgcGFyZW5zICovCisgICAgICAgICAgICBpZiAo YyA9PSAnKScpIHsgICAgICAgICAgICAgLyogUmlnaHQgcGFyZW50aGVzaXMuICovCisgICAgICAg ICAgICAgICAgcHAtLTsgICAgICAgICAgICAgICAgICAgLyogQ291bnQgaXQuICovCisgICAgICAg ICAgICAgICAgaWYgKHBwIDwgMCkgeyAgICAgICAgICAgLyogQW4gdW5iYWxhbmNlZCByaWdodCBw YXJlbi4uLiAqLworI2lmZGVmIENPTU1FTlQKKy8qCisgIFRoZSBwcm9ibGVtIGhlcmUgaXMgdGhh dCAiXHsiIGFwcGVhcnMgdG8gYmUgYSBxdW90ZWQgYnJhY2UgYW5kIHRoZXJlZm9yZQorICBpc24n dCBjb3VudGVkOyB0aGVuIHRoZSAifSIgbWF0Y2hlcyBhbiBlYXJsaWVyIG9wZW5pbmcgYnJhY2Us IGNhdXNpbmcKKyAgKGUuZy4pIHRydW5jYXRpb24gb2YgbWFjcm9zIGJ5IGdldG5jbSgpLgorKi8K KyAgICAgICAgICAgICAgICAgICAgaWYgKG4gPCA1KSAgICAgICAgICAvKiBPdXQgb2Ygc3BhY2Ug aW4gZGVzdCBidWZmZXI/ICovCisgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsgICAg ICAgLyogSWYgc28sIGdpdmUgdXAuICovCisgICAgICAgICAgICAgICAgICAgICpscCsrID0gQ01E UTsgICAgICAgLyogTXVzdCBiZSBxdW90ZWQgdG8gcHJldmVudCAqLworICAgICAgICAgICAgICAg ICAgICAqbHArKyA9ICd9JzsgICAgICAgIC8qIHByZW1hdHVyZSB0ZXJtaW5hdGlvbiBvZiAqLwor ICAgICAgICAgICAgICAgICAgICAqbHArKyA9ICc0JzsgICAgICAgIC8qIFxmbGl0KC4uLikgKi8K KyAgICAgICAgICAgICAgICAgICAgKmxwKysgPSAnMSc7CisgICAgICAgICAgICAgICAgICAgICps cCsrID0gJ30nOworICAgICAgICAgICAgICAgICAgICBuIC09IDU7CisjZWxzZQorLyogSGVyZSB3 ZSByZWx5IG9uIHRoZSBmYWN0IHRoZSBcbm5uIG5ldmVyIHRha2VzIG1vcmUgdGhhbiAzIGRpZ2l0 cyAqLworICAgICAgICAgICAgICAgICAgICBpZiAobiA8IDQpICAgICAgICAgIC8qIE91dCBvZiBz cGFjZSBpbiBkZXN0IGJ1ZmZlcj8gKi8KKyAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTEp OyAgICAgICAvKiBJZiBzbywgZ2l2ZSB1cC4gKi8KKyAgICAgICAgICAgICAgICAgICAgKmxwKysg PSBDTURROyAgICAgICAvKiBNdXN0IGJlIHF1b3RlZCB0byBwcmV2ZW50ICovCisgICAgICAgICAg ICAgICAgICAgICpscCsrID0gJzAnOyAgICAgICAgLyogcHJlbWF0dXJlIHRlcm1pbmF0aW9uIG9m ICovCisgICAgICAgICAgICAgICAgICAgICpscCsrID0gJzQnOyAgICAgICAgLyogXGZsaXQoLi4u KSAqLworICAgICAgICAgICAgICAgICAgICAqbHArKyA9ICcxJzsKKyAgICAgICAgICAgICAgICAg ICAgbiAtPSA0OworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAgICAgICAgICAgICAgcHAr KzsgICAgICAgICAgICAgICAvKiBVbmNvdW50IGl0LiAqLworICAgICAgICAgICAgICAgICAgICBz Kys7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjID09ICd9JykgeyAgICAgICAgICAgICAvKiBD bG9zaW5nIGJyYWNlLiAqLworICAgICAgICAgICAgICAgIGlmICgtLWJjID09IDApIHsgICAgICAg IC8qIEZpbmFsIG9uZT8gKi8KKyAgICAgICAgICAgICAgICAgICAgKmxwKysgPSAnKSc7ICAgICAg ICAvKiBBZGQgY2xvc2luZyBwYXJlbiBmb3IgIlxmbGl0KCkiICovCisgICAgICAgICAgICAgICAg ICAgIGlmICgtLW4gPCAxKSByZXR1cm4oLTEpOworICAgICAgICAgICAgICAgICAgICAqbHArKyA9 IGM7CisgICAgICAgICAgICAgICAgICAgIGlmICgtLW4gPCAxKSByZXR1cm4oLTEpOworICAgICAg ICAgICAgICAgICAgICBzKys7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICpscCsrID0gYzsgICAgICAgICAg ICAgICAgICAvKiBHZW5lcmFsIGNhc2UgKi8KKyAgICAgICAgICAgIGlmICgtLW4gPCAxKSByZXR1 cm4oLTEpOworICAgICAgICAgICAgcysrOworICAgICAgICB9CisgICAgICAgICpscCA9IE5VTDsK KyAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBObyBicmFja2V0cyBh cm91bmQsICovCisgICAgICAgIHdoaWxlICgoKmxwKysgPSAqcysrKSkgICAgICAgICAgLyoganVz dCBjb3B5LiAqLworICAgICAgICAgIGlmICgtLW4gPCAxKQorICAgICAgICAgICAgcmV0dXJuKC0x KTsKKyAgICAgICAgbHAtLTsKKyAgICB9CisgICAgKnNyYyA9IHM7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogUmV0dXJuIHVwZGF0ZWQgc291cmNlICovCisgICAgKmRlc3QgPSBscDsgICAg ICAgICAgICAgICAgICAgICAgICAgLyogYW5kIGRlc3RpbmF0aW9uIHBvaW50ZXJzICovCisgICAg aWYgKGJjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRmFpbCBpZiBicmFjZXMgdW5i YWxhbmNlZCAqLworICAgICAgcmV0dXJuKC0xKTsKKyAgICBlbHNlICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBPdGhlcndpc2Ugc3VjY2VlZC4gKi8KKyAgICAgIHJldHVybigwKTsK K30KKyNlbmRpZiAvKiBOT1NQTCAqLworCisvKiBGdW5jdGlvbnMgbW92ZWQgaGVyZSBmcm9tIGNr dXVzci5jIHRvIGV2ZW4gb3V0IHRoZSBtb2R1bGUgc2l6ZXMuLi4gKi8KKworLyoKKyAgQnJlYWtz IHVwIHN0cmluZyBzIC0tIElOIFBMQUNFISAtLSBpbnRvIGEgbGlzdCBvZiB1cCB0byBtYXggd29y ZHMuCisgIFBvaW50ZXJzIHRvIGVhY2ggd29yZCBnbyBpbnRvIHRoZSBhcnJheSBsaXN0W10uCisg IG1heCBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2Ygd29yZHMgKHBvaW50ZXJzKS4KKyAgSWYgbGlz dCBpcyBOVUxMLCB0aGVuIHRoZXkgYXJlIGFkZGVkIHRvIHRoZSBtYWNybyB0YWJsZS4KKyAgZmxh ZyA9IDAgbWVhbnMgdGhlIGxhc3QgZmllbGQgaXMgdG8gYmUgb25lIHdvcmQsIGxpa2UgYWxsIHRo ZSBvdGhlciBmaWVsZHMsCisgICAgICAgICBzbyBhbnl0aGluZyBhZnRlciBpdCBpcyBkaXNjYXJk ZWQuCisgIGZsYWcgPSAxIG1lYW5zIHRoZSBsYXN0IGZpZWxkIGV4dGVuZHMgdG8gdGhlIGVuZCBv ZiB0aGUgc3RyaW5nLCBldmVuIGlmCisgICAgICAgICB0aGVyZSBhcmUgbG90cyBvZiB3b3JkcyBs ZWZ0LCBzbyB0aGUgbGFzdCBmaWVsZCBjb250YWlucyB0aGUKKyAgICAgICAgIHJlbWFpbmRlciBv ZiB0aGUgc3RyaW5nLgorKi8KK1ZPSUQKK3h3b3JkcyhzLG1heCxsaXN0LGZsYWcpIGNoYXIgKnM7 IGludCBtYXg7IGNoYXIgKmxpc3RbXTsgaW50IGZsYWc7IHsKKyAgICBjaGFyICpwOworICAgIGlu dCBiLCBpLCBrLCBxLCB5LCB6OworI2lmbmRlZiBOT1NQTAorICAgIGludCBtYWNybzsKKyAgICBt YWNybyA9IChsaXN0ID09IE5VTEwpOworICAgIGRlYnVnKEYwMTAsInh3b3JkcyIscywwKTsKKyNl bmRpZiAvKiBOT1NQTCAqLworCisjaWZkZWYgWFdPUkRTREVCVUcKKyAgICBwcmludGYoIlhXT1JE UyBzdHJpbmc9JXNcbiIscyk7CisgICAgcHJpbnRmKCJYV09SRFMgbWF4PSVkXG4iLG1heCk7Cisj ZW5kaWYgLyogWFdPUkRTREVCVUcgKi8KKyAgICBwID0gczsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBQb2ludGVyIHRvIGJlZ2lubmluZyBvZiBzdHJpbmcgKi8KKyAgICBxID0gMDsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGbGFnIGZvciBkb3VibGVxdW90ZSByZW1v dmFsICovCisgICAgYiA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRmxhZyBm b3Igb3V0ZXIgYnJhY2UgcmVtb3ZhbCAqLworICAgIGsgPSAwOyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIEZsYWcgZm9yIGluLXdvcmQgKi8KKyAgICB5ID0gMDsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBCcmFjZSBuZXN0aW5nIGxldmVsICovCisgICAgeiA9IDA7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIldvcmQiIGNvdW50ZXIsIDAgdGhydSBtYXgg Ki8KKworICAgIGlmIChsaXN0KQorICAgICAgZm9yIChpID0gMDsgaSA8PSBtYXg7IGkrKykgICAg ICAgIC8qIEluaXRpYWxpemUgcG9pbnRlcnMgKi8KKyAgICAgICAgbGlzdFtpXSA9IE5VTEw7CisK KyAgICBpZiAoZmxhZykgbWF4LS07CisKKyAgICB3aGlsZSAoMSkgeyAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBHbyB0aHJ1IHdvcmQgbGlzdCAqLworICAgICAgICBpZiAoIXMgfHwgKCpzID09 ICdcMCcpKSB7ICAgICAgIC8qIE5vIG1vcmUgY2hhcmFjdGVycz8gKi8KKyAgICAgICAgICAgIGlm IChrICE9IDApIHsgICAgICAgICAgICAgICAvKiBXYXMgSSBpbiBhIHdvcmQ/ICovCisgICAgICAg ICAgICAgICAgaWYgKHogPT0gbWF4KSBicmVhazsgICAgLyogWWVzLCBvbmx5IGdvIHVwIHRvIG1h eC4gKi8KKyAgICAgICAgICAgICAgICB6Kys7ICAgICAgICAgICAgICAgICAgICAvKiBDb3VudCB0 aGlzIHdvcmQuICovCisjaWZkZWYgWFdPUkRTREVCVUcKKyAgICAgICAgICAgICAgICBwcmludGYo IjEgeisrID0gJWRcbiIsIHopOworI2VuZGlmIC8qIFhXT1JEU0RFQlVHICovCisjaWZuZGVmIE5P U1BMCisgICAgICAgICAgICAgICAgaWYgKG1hY3JvKSB7ICAgICAgICAgICAgLyogRG9pbmcgbWFj cm8gYXJncyAqLworICAgICAgICAgICAgICAgICAgICBpZiAoeiA8IDEwKSB7CisgICAgICAgICAg ICAgICAgICAgICAgICB2YXJuYW1bMV0gPSAoY2hhcikgKHogKyAnMCcpOyAvKiBBc3NpZ24gbGFz dCBhcmcgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZG1hYyh2YXJuYW0scCk7CisgICAg ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHogPD0gbWF4KSB7Cisj aWZkZWYgQ09NTUVOVAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hY2x2bCA8IDApCisg ICAgICAgICAgICAgICAgICAgICAgICAgIGFkZG1hYyh2YXJuYW0scCk7CisgICAgICAgICAgICAg ICAgICAgICAgICBlbHNlCisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAgICAgICAgICAgICAg ICAgICAgICBtYWtlc3RyKCYobV94YXJnW21hY2x2bF1bel0pLHApOworICAgICAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgLyogTm90IGRv aW5nIG1hY3JvIGFyZ3MgKi8KKyNlbmRpZiAvKiBOT1NQTCAqLworICAgICAgICAgICAgICAgICAg ICBsaXN0W3pdID0gcDsgICAgICAgIC8qIEFzc2lnbiBwb2ludGVyLiAqLworI2lmZGVmIFhXT1JE U0RFQlVHCisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiWzFdTElTVFslZF09XCIlc1wiXG4i LHosbGlzdFt6XSk7CisjZW5kaWYgLyogWFdPUkRTREVCVUcgKi8KKyNpZm5kZWYgTk9TUEwKKyAg ICAgICAgICAgICAgICB9CisjZW5kaWYgLyogTk9TUEwgKi8KKyAgICAgICAgICAgICAgICBicmVh azsgICAgICAgICAgICAgICAgICAvKiBBbmQgZ2V0IG91dC4gKi8KKyAgICAgICAgICAgIH0gZWxz ZSBicmVhazsgICAgICAgICAgICAgICAvKiBXYXMgbm90IGluIGEgd29yZCAqLworICAgICAgICB9 CisgICAgICAgIGlmIChrID09IDAgJiYgKCpzID09IFNQIHx8ICpzID09IEhUKSkgeyAvKiBFYXQg bGVhZGluZyBibGFua3MgKi8KKyAgICAgICAgICAgIHMrKzsKKyAgICAgICAgICAgIGNvbnRpbnVl OworICAgICAgICB9IGVsc2UgaWYgKHEgPT0gMCAmJiAqcyA9PSAneycpIHsgLyogQW4gb3Blbmlu ZyBicmFjZSAqLworICAgICAgICAgICAgaWYgKGsgPT0gMCAmJiB5ID09IDApIHsgICAgIC8qIElm IGxlYWRpbmcgYnJhY2UgKi8KKyAgICAgICAgICAgICAgICBwID0gcysxOyAgICAgICAgICAgICAg ICAvKiBwb2ludCBwYXN0IGl0ICovCisgICAgICAgICAgICAgICAgYiA9IDE7ICAgICAgICAgICAg ICAgICAgLyogYW5kIGZsYWcgdGhhdCB3ZSBkaWQgdGhpcyAqLworICAgICAgICAgICAgfQorICAg ICAgICAgICAgayA9IDE7ICAgICAgICAgICAgICAgICAgICAgIC8qIEZsYWcgdGhhdCB3ZSdyZSBp biBhIHdvcmQgKi8KKyAgICAgICAgICAgIHkrKzsgICAgICAgICAgICAgICAgICAgICAgICAvKiBD b3VudCB0aGUgYnJhY2UuICovCisgICAgICAgIH0gZWxzZSBpZiAocSA9PSAwICYmICpzID09ICd9 JykgeyAvKiBBIGNsb3NpbmcgYnJhY2UuICovCisgICAgICAgICAgICB5LS07ICAgICAgICAgICAg ICAgICAgICAgICAgLyogQ291bnQgaXQuICovCisgICAgICAgICAgICBpZiAoeSA8PSAwICYmIGIg IT0gMCkgeyAgICAgLyogSWYgaXQgbWF0Y2hlcyB0aGUgbGVhZGluZyBicmFjZSAqLworICAgICAg ICAgICAgICAgIGNoYXIgYzsKKyAgICAgICAgICAgICAgICBjID0gKihzKzEpOworICAgICAgICAg ICAgICAgIGlmICghYyB8fCBjID09IFNQIHx8IGMgPT0gSFQpIHsgLyogYXQgRU9MIG9yIGZvbGxv d2VkIGJ5IFNQICovCisgICAgICAgICAgICAgICAgICAgICpzID0gU1A7ICAgICAgICAgICAgLyog Y2hhbmdlIGl0IHRvIGEgc3BhY2UgKi8KKyAgICAgICAgICAgICAgICAgICAgYiA9IDA7ICAgICAg ICAgICAgICAvKiBhbmQgd2UncmUgbm90IGluIGJyYWNlcyBhbnkgbW9yZSAqLworICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyNpZmRlZiBET1VCTEVRVU9USU5HCisgICAgICAgIC8q IE9wZW5pbmcgZG91YmxlcXVvdGUgKi8KKyAgICAgICAgfSBlbHNlIGlmIChrID09IDAgJiYgYiA9 PSAwICYmICpzID09ICciJyAmJiBkYmxxdW8pIHsKKyAgICAgICAgICAgIHkrKzsKKyAgICAgICAg ICAgIHAgPSBzKzE7ICAgICAgICAgICAgICAgICAgICAvKiBwb2ludCBwYXN0IGl0ICovCisgICAg ICAgICAgICBxID0gMTsgICAgICAgICAgICAgICAgICAgICAgLyogYW5kIGZsYWcgdGhhdCB3ZSBk aWQgdGhpcyAqLworICAgICAgICAgICAgayA9IDE7ICAgICAgICAgICAgICAgICAgICAgIC8qIEZs YWcgdGhhdCB3ZSdyZSBpbiBhIHdvcmQgKi8KKyAgICAgICAgLyogQ2xvc2luZyBkb3VibGUgcXVv dGUgKi8KKyAgICAgICAgfSBlbHNlIGlmIChxID4gMCAmJiBrID4gMCAmJiBiID09IDAgJiYgKnMg PT0gJyInICYmIGRibHF1bykgeworICAgICAgICAgICAgY2hhciBjOworICAgICAgICAgICAgYyA9 ICoocysxKTsKKyAgICAgICAgICAgIGlmICghYyB8fCBjID09IFNQIHx8IGMgPT0gSFQpIHsgLyog YXQgRU9MIG9yIGZvbGxvd2VkIGJ5IFNQICovCisgICAgICAgICAgICAgICAgeS0tOworICAgICAg ICAgICAgICAgICpzID0gU1A7ICAgICAgICAgICAgICAgIC8qIGNoYW5nZSBpdCB0byBhIHNwYWNl ICovCisgICAgICAgICAgICAgICAgcSA9IDA7ICAgICAgICAgICAgICAgICAgLyogYW5kIHdlJ3Jl IG5vdCBpbiBxdW90ZXMgYW55IG1vcmUgKi8KKyAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBET1VC TEVRVU9USU5HICovCisKKyAgICAgICAgfSBlbHNlIGlmICgqcyAhPSBTUCAmJiAqcyAhPSBIVCkg eyAvKiBOb25zcGFjZSBtZWFucyB3ZSdyZSBpbiBhIHdvcmQgKi8KKyAgICAgICAgICAgIGlmIChr ID09IDApIHsgICAgICAgICAgICAgICAvKiBJZiB3ZSB3ZXJlbid0IGluIGEgd29yZCBiZWZvcmUs ICovCisgICAgICAgICAgICAgICAgcCA9IHM7ICAgICAgICAgICAgICAgICAgLyogTWFyayB0aGUg YmVnaW5uaW5nICovCisgICAgICAgICAgICAgICAgaWYgKGZsYWcgJiYgeiA9PSBtYXgpIHsgLyog V2FudCBsYXN0IHdvcmQgdG8gYmUgcmVtYWluZGVyPyAqLworICAgICAgICAgICAgICAgICAgICB6 Kys7CisjaWZkZWYgWFdPUkRTREVCVUcKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIxIHor KyA9ICVkXG4iLCB6KTsKKyNlbmRpZiAvKiBYV09SRFNERUJVRyAqLworICAgICAgICAgICAgICAg ICAgICBsaXN0W3pdID0gcDsgICAgICAgIC8qIFllcywgcG9pbnQgdG8gaXQgKi8KKyNpZmRlZiBY V09SRFNERUJVRworICAgICAgICAgICAgICAgICAgICBwcmludGYoIls0XUxJU1RbJWRdPVwiJXNc IlxuIix6LGxpc3Rbel0pOworI2VuZGlmIC8qIFhXT1JEU0RFQlVHICovCisgICAgICAgICAgICAg ICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgLyogYW5kIHF1aXQgKi8KKyAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICAgICAgayA9IDE7ICAgICAgICAgICAgICAgICAgLyogU2V0IGluLXdv cmQgZmxhZyAqLworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8qIElmIHdlJ3Jl IG5vdCBpbnNpZGUgYSBicmFjZWQgcXVhbnRpdHksIGFuZCB3ZSBhcmUgaW4gYSB3b3JkLCBhbmQg Ki8KKyAgICAgICAgLyogd2UgaGF2ZSBoaXQgd2hpdGVzcGFjZSwgdGhlbiB3ZSBoYXZlIGEgd29y ZC4gKi8KKyAgICAgICAgaWYgKCh5IDwgMSkgJiYgKGsgIT0gMCkgJiYgKCpzID09IFNQIHx8ICpz ID09IEhUKSAmJiAhYikgeworICAgICAgICAgICAgaWYgKCFmbGFnIHx8IHogPCBtYXgpICAgICAg IC8qIGlmIHdlIGRvbid0IHdhbnQgdG8ga2VlcCByZXN0ICovCisgICAgICAgICAgICAgICpzID0g J1wwJzsgICAgICAgICAgICAgICAgLyogdGVybWluYXRlIHRoZSBhcmcgd2l0aCBudWxsICovCisg ICAgICAgICAgICBrID0gMDsgICAgICAgICAgICAgICAgICAgICAgLyogc2F5IHdlJ3JlIG5vdCBp biBhIHdvcmQgYW55IG1vcmUgKi8KKyAgICAgICAgICAgIHkgPSAwOyAgICAgICAgICAgICAgICAg ICAgICAvKiBzdGFydCBicmFjZXMgb2ZmIGNsZWFuIGFnYWluICovCisgICAgICAgICAgICBpZiAo eiA9PSBtYXgpIGJyZWFrOyAgICAgICAgLyogT25seSBnbyB1cCB0byBtYXguICovCisgICAgICAg ICAgICB6Kys7ICAgICAgICAgICAgICAgICAgICAgICAgLyogY291bnQgdGhpcyBhcmcgKi8KKyNp ZmRlZiBYV09SRFNERUJVRworICAgICAgICAgICAgcHJpbnRmKCIxIHorKyA9ICVkXG4iLCB6KTsK KyNlbmRpZiAvKiBYV09SRFNERUJVRyAqLworCisjaWZuZGVmIE5PU1BMCisgICAgICAgICAgICBp ZiAobWFjcm8pIHsKKyAgICAgICAgICAgICAgICBpZiAoeiA8IDEwKSB7CisgICAgICAgICAgICAg ICAgICAgIHZhcm5hbVsxXSA9IChjaGFyKSAoeiArICcwJyk7IC8qIGNvbXB1dGUgaXRzIG5hbWUg Ki8KKyAgICAgICAgICAgICAgICAgICAgYWRkbWFjKHZhcm5hbSxwKTsgICAvKiBhZGQgaXQgdG8g dGhlIG1hY3JvIHRhYmxlICovCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlm ICh6IDw9IG1heCkgeworI2lmZGVmIENPTU1FTlQKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1h Y2x2bCA8IDApCisgICAgICAgICAgICAgICAgICAgICAgYWRkbWFjKHZhcm5hbSxwKTsKKyAgICAg ICAgICAgICAgICAgICAgZWxzZQorI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAgICAgICAg ICAgICAgICBtYWtlc3RyKCYobV94YXJnW21hY2x2bF1bel0pLHApOworICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisjZW5kaWYgLyogTk9TUEwgKi8KKyAgICAgICAgICAg ICAgICBsaXN0W3pdID0gcDsKKyNpZmRlZiBYV09SRFNERUJVRworICAgICAgICAgICAgICAgIHBy aW50ZigiWzJdTElTVFslZF09XCIlc1wiXG4iLHosbGlzdFt6XSk7CisjZW5kaWYgLyogWFdPUkRT REVCVUcgKi8KKyNpZm5kZWYgTk9TUEwKKyAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBOT1NQTCAq LworICAgICAgICAgICAgcCA9IHMrMTsKKyAgICAgICAgfQorICAgICAgICBzKys7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIFBvaW50IHBhc3QgdGhpcyBjaGFyYWN0ZXIgKi8KKyAgICB9 CisgICAgaWYgKCh6ID09IDApICYmICh5ID4gMSkpIHsgICAgICAgICAgLyogRXh0cmEgY2xvc2lu ZyBicmFjZShzKSBhdCBlbmQgKi8KKyAgICAgICAgeisrOworI2lmbmRlZiBOT1NQTAorICAgICAg ICBpZiAobWFjcm8pIHsKKyAgICAgICAgICAgIGlmICh6IDwgMTApIHsKKyAgICAgICAgICAgICAg ICB2YXJuYW1bMV0gPSB6ICsgJzAnOyAgICAvKiBjb21wdXRlIGl0cyBuYW1lICovCisgICAgICAg ICAgICAgICAgYWRkbWFjKHZhcm5hbSxwKTsgICAgICAgLyogQWRkIHJlc3Qgb2YgbGluZSB0byBs YXN0IGFyZyAqLworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHogPD0gbWF4KSB7Cisj aWZkZWYgQ09NTUVOVAorICAgICAgICAgICAgICAgIGlmIChtYWNsdmwgPCAwKQorICAgICAgICAg ICAgICAgICAgYWRkbWFjKHZhcm5hbSxwKTsKKyAgICAgICAgICAgICAgICBlbHNlCisjZW5kaWYg LyogQ09NTUVOVCAqLworICAgICAgICAgICAgICAgICAgbWFrZXN0cigmKG1feGFyZ1ttYWNsdmxd W3pdKSxwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyNlbmRpZiAvKiBOT1NQ TCAqLworICAgICAgICAgICAgbGlzdFt6XSA9IHA7CisjaWZkZWYgWFdPUkRTREVCVUcKKyAgICAg ICAgICAgIHByaW50ZigiWzNdTElTVFslZF09XCIlc1wiXG4iLHosbGlzdFt6XSk7CisjZW5kaWYg LyogWFdPUkRTREVCVUcgKi8KKyNpZm5kZWYgTk9TUEwKKyAgICAgICAgfQorI2VuZGlmIC8qIE5P U1BMICovCisgICAgfQorI2lmbmRlZiBOT1NQTAorICAgIGlmIChtYWNybykgeyAgICAgICAgICAg ICAgICAgICAgICAgIC8qIE1hY3JvICovCisgICAgICAgIGlmIChtYWNsdmwgPCAwKSB7CisgICAg ICAgICAgICBhX2RpbVswXSA9IHo7ICAgICAgICAgICAgICAgLyogQXJyYXkgZGltZW5zaW9uIGlz IG9uZSBsZXNzICovCisgICAgICAgICAgICB0b3BhcmdjID0geiArIDE7ICAgICAgICAgICAgLyog dGhhbiBcdihhcmdjKSAqLworCSAgICBkZWJ1ZyhGMTExLCJhX2RpbVswXSIsIkQiLGFfZGltWzBd KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1hY2FyZ2NbbWFjbHZsXSA9IHogKyAx OyAgICAvKiBTZXQgXHYoYXJnYykgdmFyaWFibGUgKi8KKyAgICAgICAgICAgIG5feGFyZ1ttYWNs dmxdID0geiArIDE7ICAgICAvKiBUaGlzIGlzIHRoZSBhY3R1YWwgbnVtYmVyICovCisgICAgICAg ICAgICBhX3B0clswXSA9IG1feGFyZ1ttYWNsdmxdOyAgLyogUG9pbnQgXCZfW10gYXQgdGhlIGFy Z3MgKi8KKyAgICAgICAgICAgIGFfZGltWzBdID0gejsgICAgICAgICAgICAgICAvKiBBbmQgZ2l2 ZSBpdCB0aGlzIGRpbWVuc2lvbiAqLworCSAgICBkZWJ1ZyhGMTExLCJhX2RpbVswXSIsIkUiLGFf ZGltWzBdKTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBOT1NQTCAqLworICAgIHJldHVy bjsKK30KKworI2lmbmRlZiBOT1NQTAorCisvKiAgRCBPIFMgSCBJIEYgVCAgLS0gIERvIHRoZSBT SElGVCBDb21tYW5kOyBzaGlmdCBtYWNybyBhcmdzIGxlZnQgYnkgbiAqLworCisvKiAgTm90ZTog YXQgc29tZSBwb2ludCBsZXQncyBjb25zb2xpZGF0ZSBtX2FyZ1tdW10gYW5kIG1feGFyZ1tdW10u ICovCisKK2ludAorZG9zaGlmdChuKSBpbnQgbjsgeyAgICAgICAgICAgICAgICAgICAgIC8qIG4g PSBzaGlmdCBjb3VudCAqLworICAgIGludCBpLCB0b3AsIGxldmVsOworICAgIGNoYXIgLyogKnMs ICptLCAqLyBidWZbNl07ICAgICAgICAgIC8qIEJ1ZmZlciB0byBidWlsZCBzY2FsYXIgbmFtZXMg Ki8KKyAgICBjaGFyICogc3ggPSB0bXBidWY7CisgICAgaW50IG54ID0gVE1QQlVGU0laOworCisg ICAgZGVidWcoRjEwMSwiU0hJRlQgY291bnQiLCIiLG4pOworICAgIGRlYnVnKEYxMDEsIlNISUZU IHRvcGFyZ2MiLCIiLHRvcGFyZ2MpOworCisgICAgaWYgKG4gPCAxKSAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogU3RheSBpbiByYW5nZSAqLworICAgICAgcmV0dXJuKG4gPT0gMCA/IDEgOiAw KTsKKworICAgIGxldmVsID0gbWFjbHZsOworICAgIHRvcCA9IChsZXZlbCA8IDApID8gdG9wYXJn YyA6IG1hY2FyZ2NbbGV2ZWxdOworCisgICAgaWYgKG4gPj0gdG9wKQorICAgICAgbiA9IHRvcCAt IDE7CisKKyNpZmRlZiBERUJVRworICAgIGlmIChkZWJsb2cpIHsKKyAgICAgICAgZGVidWcoRjEw MSwiU0hJRlQgY291bnQgMiIsIiIsbik7CisgICAgICAgIGRlYnVnKEYxMDEsIlNISUZUIGxldmVs IiwiIixsZXZlbCk7CisgICAgICAgIGlmIChsZXZlbCA+IC0xKQorICAgICAgICAgIGRlYnVnKEYx MDEsIlNISUZUIG1hY2FyZ2NbbGV2ZWxdIiwiIixtYWNhcmdjW2xldmVsXSk7CisgICAgfQorI2Vu ZGlmIC8qIERFQlVHICovCisKKyAgICBidWZbMF0gPSAnXFwnOyAgICAgICAgICAgICAgICAgICAg ICAvKiBJbml0aWFsaXplIG5hbWUgdGVtcGxhdGUgKi8KKyAgICBidWZbMV0gPSAnJSc7CisgICAg YnVmWzJdID0gTlVMOworICAgIGJ1ZlszXSA9IE5VTDsKKworICAgIGZvciAoaSA9IDE7IGkgPD0g bjsgaSsrKSB7ICAgICAgICAgIC8qIEZyZWUgc2hpZnRlZC1vdmVyIGFyZ3MgKi8KKyAgICAgICAg aWYgKGxldmVsIDwgMCkgeworICAgICAgICAgICAgbWFrZXN0cigmKHRvcGFyZ1tpXSksTlVMTCk7 CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtYWtlc3RyKCYobV94YXJnW2xldmVsXVtp XSksTlVMTCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGkgPCAxMCkgeyAgICAgICAgICAgICAg ICAgICAvKiBJcyB0aGlzIG5lY2Vzc2FyeT8gKi8KKyAgICAgICAgICAgIGJ1ZlsyXSA9IChjaGFy KShpKycwJyk7CisgICAgICAgICAgICBkZWxtYWMoYnVmLDApOworICAgICAgICB9CisgICAgfQor ICAgIGZvciAoaSA9IDE7IGkgPD0gdG9wLW47IGkrKykgeyAgICAgIC8qIFNoaWZ0IHJlbWFpbmlu ZyBhcmdzICovCisgICAgICAgIGlmIChsZXZlbCA8IDApIHsKKyNpZmRlZiBDT01NRU5UCisgICAg ICAgICAgICB0b3BhcmdbaV0gPSB0b3BhcmdbaStuXTsgICAgLyogRnVsbCB2ZWN0b3IgKi8KKyNl bHNlCisgICAgICAgICAgICBtYWtlc3RyKCYodG9wYXJnW2ldKSx0b3BhcmdbaStuXSk7IC8qIEZ1 bGwgdmVjdG9yICovCisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAgICAgICAgaWYgKGkgPCAx MCkgICAgICAgICAgICAgICAgIC8qIFNjYWxhcnMuLi4gKi8KKyAgICAgICAgICAgICAgbWFrZXN0 cigmKGdfdmFyW2krJzAnXSksdG9wYXJnW2krbl0pOworICAgICAgICB9IGVsc2UgeworI2lmZGVm IENPTU1FTlQKKyAgICAgICAgICAgIG1feGFyZ1tsZXZlbF1baV0gPSBtX3hhcmdbbGV2ZWxdW2kr bl07CisjZWxzZQorICAgICAgICAgICAgbWFrZXN0cigmKG1feGFyZ1tsZXZlbF1baV0pLG1feGFy Z1tsZXZlbF1baStuXSk7CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAgICAgICAgaWYgKGkg PCAxMCkgeworICAgICAgICAgICAgICAgIGJ1ZlsyXSA9IChjaGFyKShpKycwJyk7CisgICAgICAg ICAgICAgICAgZGVidWcoRjAxMCwiU0hJRlQgYnVmIixidWYsMCk7CisgICAgICAgICAgICAgICAg YWRkbWFjKGJ1ZixtX3hhcmdbbGV2ZWxdW2krbl0pOworICAgICAgICAgICAgfQorICAgICAgICB9 CisgICAgfQorICAgIGZvciAoaSA9IHRvcC1uOyBpIDw9IHRvcDsgaSsrKSB7ICAgIC8qIENsZWFy IG4gYXJncyBmcm9tIHRoZSBlbmQgKi8KKyAgICAgICAgaWYgKGxldmVsIDwgMCkgeworI2lmZGVm IENPTU1FTlQKKyAgICAgICAgICAgIHRvcGFyZ1tpXSA9IE5VTEw7CisjZWxzZQorICAgICAgICAg ICAgbWFrZXN0cigmKHRvcGFyZ1tpXSksTlVMTCk7CisjZW5kaWYgLyogQ09NTUVOdCAqLworICAg ICAgICAgICAgaWYgKGkgPCAxMCkKKyAgICAgICAgICAgICAgbWFrZXN0cigmKGdfdmFyW2krJzAn XSksTlVMTCk7CisgICAgICAgIH0gZWxzZSB7CisjaWZkZWYgQ09NTUVOVAorICAgICAgICAgICAg bV94YXJnW2xldmVsXVtpXSA9IE5VTEw7CisjZWxzZQorICAgICAgICAgICAgbWFrZXN0cigmKG1f eGFyZ1tsZXZlbF1baV0pLE5VTEwpOworI2VuZGlmIC8qIENPTU1FTnQgKi8KKyAgICAgICAgICAg IGlmIChpIDwgMTApIHsKKyAgICAgICAgICAgICAgICBidWZbMl0gPSAoY2hhcikoaSsnMCcpOwor ICAgICAgICAgICAgICAgIGRlbG1hYyhidWYsMCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K KyAgICB9CisgICAgaWYgKGxldmVsID4gLTEpIHsgICAgICAgICAgICAgICAgICAgLyogTWFjcm8g YXJncyAqLworICAgICAgICBtYWNhcmdjW2xldmVsXSAtPSBuOyAgICAgICAgICAgIC8qIEFkanVz dCBjb3VudCAqLworICAgICAgICBuX3hhcmdbbWFjbHZsXSA9IG1hY2FyZ2NbbGV2ZWxdOyAvKiBI ZXJlIHRvbyAqLworICAgICAgICBhX2RpbVswXSA9IG1hY2FyZ2NbbGV2ZWxdIC0gMTsgIC8qIEFk anVzdCBhcnJheSBkaW1lbnNpb24gKi8KKwlkZWJ1ZyhGMTExLCJhX2RpbVswXSIsIkYiLGFfZGlt WzBdKTsKKyAgICAgICAgenpzdHJpbmcoIlxcZmpvaW4oJl9bXSx7IH0sMSkiLCZzeCwmbngpOyAv KiBIYW5kbGUgXCUqICovCisjaWZkZWYgQ09NTUVOVAorICAgICAgICBtYWtlc3RyKCYobV9saW5l W2xldmVsXSksdG1wYnVmKTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgfSBlbHNlIHsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogRGl0dG8gZm9yIHRvcCBsZXZlbCAqLworICAgICAg ICB0b3BhcmdjIC09IG47CisgICAgICAgIGFfZGltWzBdID0gdG9wYXJnYyAtIDE7CisJZGVidWco RjExMSwiYV9kaW1bMF0iLCJHIixhX2RpbVswXSk7CisgICAgICAgIHp6c3RyaW5nKCJcXGZqb2lu KCZfW10seyB9LDEpIiwmc3gsJm54KTsKKyNpZmRlZiBDT01NRU5UCisgICAgICAgIG1ha2VzdHIo JnRvcGxpbmUsdG1wYnVmKTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgfQorICAgIHJldHVy bigxKTsKK30KKyNlbmRpZiAvKiBOT1NQTCAqLworCitpbnQKK2RvY2QoY3gpIGludCBjeDsgeyAg ICAgICAgICAgICAgICAgICAgICAvKiBEbyB0aGUgQ0QgY29tbWFuZCAqLworICAgIGludCB4Owor ICAgIGV4dGVybiBpbnQgc2VydmVyLCBzcnZjZG1zZywgY2RhY3RpdmU7CisgICAgZXh0ZXJuIGNo YXIgKiBjZG1zZ2ZpbGVbXSwgKiBja2NkcGF0aDsKKyAgICBjaGFyICpzLCAqcDsKKyNpZmRlZiBN QUMKKyAgICBjaGFyIHRlbXBbMzRdOworI2VuZGlmIC8qIE1BQyAqLworI2lmZGVmIElLU0RDT05G CitleHRlcm4gaW50IGlrc2RjZjsKKyNlbmRpZiAvKiBJS1NEQ09ORiAqLworCisjaWZuZGVmIE5P RlJJTExTCisgICAgaWYgKGN4ID09IFhYQkFDSykgeworICAgICAgICBpZiAoKHggPSBjbWNmbSgp KSA8IDApCisgICAgICAgIGN3ZGYgPSAxOworICAgICAgICBpZiAocHJldmRpcikgeworICAgICAg ICAgICAgcyA9IHpndGRpcigpOworICAgICAgICAgICAgaWYgKCF6Y2hkaXIocHJldmRpcikpIHsK KyAgICAgICAgICAgICAgICBjd2RmID0gMDsKKyAgICAgICAgICAgICAgICBwZXJyb3Iocyk7Cisg ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1ha2VzdHIoJnByZXZkaXIscyk7 CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuKGN3ZGYpOworICAgIH0K KyNlbmRpZiAvKiBOT0ZSSUxMUyAqLworCisgICAgaWYgKGN4ID09IFhYQ0RVUCkgeworI2lmZGVm IFZNUworICAgICAgICBzID0gIlstXSI7CisjZWxzZQorI2lmZGVmIGRhdGFnZW5lcmFsCisgICAg ICAgIHMgPSAiXiI7CisjZWxzZQorICAgICAgICBzID0gIi4uIjsKKyNlbmRpZiAvKiBkYXRhZ2Vu ZXJhbCAqLworI2VuZGlmIC8qIFZNUyAqLworICAgICAgICBja3N0cm5jcHkobGluZSxzLExJTkJV RlNJWik7CisgICAgICAgIGdvdG8gZ29jZDsKKyAgICB9CisjaWZuZGVmIE5PU1BMCisgICAgaWYg KGN4ID09IFhYS0NEKSB7CQkJLyogU3ltYm9saWMgKEtlcm1pdCkgQ0QgKi8KKwljaGFyICogcDsK KwlpbnQgbiwgazsKKwl4ID0gY21rZXkoa2NkdGFiLG5rY2R0YWIsIlN5bWJvbGljIGRpcmVjdG9y eSBuYW1lIiwiaG9tZSIseHhzdHJpbmcpOworCWlmICh4IDwgMCkKKwkgIHJldHVybih4KTsKKwl4 ID0gbG9va3VwKGtjZHRhYixhdG1idWYsbmtjZHRhYiwmayk7IC8qIEdldCBjb21wbGV0ZSBrZXl3 b3JkICovCisJaWYgKHggPCAwKSB7CisJICAgIHByaW50ZigiP0xvb2t1cCBlcnJvclxuIik7CS8q IHNob3VsZG4ndCBoYXBwZW4gKi8KKwkgICAgcmV0dXJuKC05KTsKKwl9CisgICAgICAgIGlmICgo eCA9IGNtY2ZtKCkpIDwgMCkKKwkgIHJldHVybih4KTsKKwlpZiAoayA9PSBWTl9IT01FKSB7CQkv KiBIT01FOiBhbGxvdyBTRVQgSE9NRSB0byBvdmVycmlkZSAqLworCSAgICBja3N0cm5jcHkobGlu ZSxob21lcGF0aCgpLExJTkJVRlNJWik7CisJfSBlbHNlIHsJCQkvKiBPdGhlciBzeW1ib2xpYyBu YW1lICovCisJICAgIC8qIENvbnZlcnQgdG8gdmFyaWFibGUgc3ludGF4ICovCisJICAgIGNrbWFr bXNnKHRtcGJ1ZixUTVBCVUZTSVosIlxcdigiLGtjZHRhYltrXS5rd2QsIikiLE5VTEwpOworCSAg ICBwID0gbGluZTsJCQkvKiBFeHBhbmQgdGhlIHZhcmlhYmxlICovCisJICAgIG4gPSBMSU5CVUZT SVo7CisJICAgIHp6c3RyaW5nKHRtcGJ1ZiwmcCwmbik7CisJICAgIGlmICghbGluZVswXSkgewkJ LyogRmFpbCBpZiB2YXJpYWJsZSBub3QgZGVmaW5lZCAqLworCQlwcmludGYoIj8lcyAtIG5vdCBk ZWZpbmVkXG4iLHRtcGJ1Zik7CisJCXJldHVybihzdWNjZXNzID0gMCk7CisJICAgIH0KKwl9CisJ cyA9IGxpbmU7CQkJLyogQWxsIE9LLCBnbyB0cnkgdG8gQ0QuLi4gKi8KKwlnb3RvIGdvY2Q7Cisg ICAgfQorI2VuZGlmIC8qIE5PU1BMICovCisKKyAgICBjZGFjdGl2ZSA9IDE7CisjaWZkZWYgR0VN RE9TCisgICAgaWYgKCh4ID0gY21kaXIoIk5hbWUgb2YgbG9jYWwgZGlyZWN0b3J5LCBvciBjYXJy aWFnZSByZXR1cm4iLAorICAgICAgICAgICAgICAgICAgIGhvbWVwYXRoKCksCisgICAgICAgICAg ICAgICAgICAgJnMsCisgICAgICAgICAgICAgICAgICAgTlVMTAorICAgICAgICAgICAgICAgICAg ICkKKyAgICAgICAgICkgPCAwICkKKyAgICAgIHJldHVybih4KTsKKyNlbHNlCisjaWZkZWYgT1My CisgICAgaWYgKCh4ID0gY21kaXJwKCJOYW1lIG9mIFBDIGRpc2sgYW5kL29yIGRpcmVjdG9yeSxc blwKKyAgICAgICBvciBwcmVzcyB0aGUgRW50ZXIga2V5IGZvciB0aGUgZGVmYXVsdCIsCisgICAg ICAgICAgICAgICAgICAgIGhvbWVwYXRoKCksCisgICAgICAgICAgICAgICAgICAgICZzLAorICAg ICAgICAgICAgICAgICAgICBja2NkcGF0aCA/IGNrY2RwYXRoIDogZ2V0ZW52KCJDRFBBVEgiKSwK KyAgICAgICAgICAgICAgICAgICAgeHhzdHJpbmcKKyAgICAgICAgICAgICAgICAgICAgKQorICAg ICAgICAgKSA8IDAgKQorICAgICAgcmV0dXJuKHgpOworI2Vsc2UKKyNpZmRlZiBNQUMKKyAgICB4 ID0gY2tzdHJuY3B5KHRlbXAsaG9tZXBhdGgoKSwzMik7CisgICAgaWYgKHggPiAwKSBpZiAodGVt cFt4LTFdICE9ICc6JykgeyB0ZW1wW3hdID0gJzonOyB0ZW1wW3grMV0gPSBOVUw7IH0KKyAgICBp ZiAoKHggPSBjbXR4dCgiTmFtZSBvZiBNYWNpbnRvc2ggdm9sdW1lIGFuZC9vciBmb2xkZXIsXG5c Cisgb3IgcHJlc3MgdGhlIFJldHVybiBrZXkgZm9yIHRoZSBkZXNrdG9wIG9uIHRoZSBib290IGRp c2siLAorICAgICAgICAgICAgICAgICAgIHRlbXAsJnMsIHh4c3RyaW5nKSkgPCAwICkKKyAgICAg IHJldHVybih4KTsKKyNlbHNlCisgICAgaWYgKCh4ID0gY21kaXJwKCJDYXJyaWFnZSByZXR1cm4g Zm9yIGhvbWUgZGlyZWN0b3J5LFxuXAorb3IgbmFtZSBvZiBkaXJlY3Rvcnkgb24gdGhpcyBjb21w dXRlciIsCisjaWZkZWYgVk1TCisgICAgICAgICAgICAgICAgICAgICJTWVMkTE9HSU4iLCAgICAg ICAgLyogV2l0aCBubyBjb2xvbiAqLworI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgaG9tZXBh dGgoKSwJCS8qIEluIFZNUyB0aGlzIGlzICJTWVMkTE9HSU46IiAqLworI2VuZGlmIC8qIFZNUyAq LworICAgICAgICAgICAgICAgICAgICAmcywKKyAgICAgICAgICAgICAgICAgICAgY2tjZHBhdGgg PyBja2NkcGF0aCA6IGdldGVudigiQ0RQQVRIIiksCisgICAgICAgICAgICAgICAgICAgIHh4c3Ry aW5nCisgICAgICAgICAgICAgICAgICAgICkpIDwgMCkKKyAgICAgIHJldHVybih4KTsKKyNlbmRp ZiAvKiBNQUMgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBHRU1ET1MgKi8KKyAgICBj a3N0cm5jcHkobGluZSxzLExJTkJVRlNJWik7ICAgICAgICAvKiBNYWtlIGEgc2FmZSBjb3B5ICov CisgICAgcyA9IGxpbmU7CisjaWZkZWYgVk1TCisgICAgaWYgKGNrbWF0Y2goIiouRElSOzEkIixz LDAsMCkpCisgICAgICBpZiAoY3Z0ZGlyKHMsdG1wYnVmLFRNUEJVRlNJWikgPiAwKQorICAgICAg ICBzID0gdG1wYnVmOworI2VuZGlmIC8qIFZNUyAqLworICAgIGRlYnVnKEYxMTAsImRvY2QiLHMs MCk7CisjaWZuZGVmIE1BQworICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgICAgICAgICAgICAg IC8qIEdldCBjb25maXJtYXRpb24gKi8KKyAgICAgIHJldHVybih4KTsKKyNlbmRpZiAvKiBNQUMg Ki8KKworICBnb2NkOgorCisjaWZkZWYgZGF0YWdlbmVyYWwKKyAgICB4ID0gc3RybGVuKGxpbmUp OyAgICAgICAgICAgICAgICAgICAvKiBob21kaXIgZW5kcyBpbiBjb2xvbiwgKi8KKyAgICBpZiAo eCA+IDEgJiYgbGluZVt4LTFdID09ICc6JykgICAgICAvKiBhbmQgImRpciIgZG9lc24ndCBsaWtl IHRoYXQuLi4gKi8KKyAgICAgIGxpbmVbeC0xXSA9IE5VTDsKKyNlbmRpZiAvKiBkYXRhZ2VuZXJh bCAqLworCisjaWZkZWYgTUFDCisgICAgY3dkZiA9IDE7CisgICAgaWYgKCF6Y2hkaXIocykpIHsK KyAgICAgICAgY3dkZiA9IDA7CisgICAgICAgIGlmICgqcyAhPSAnOicpIHsgICAgICAgICAgICAg ICAgLyogSWYgaXQgZmFpbGVkLCAqLworICAgICAgICAgICAgY2hhciAqcDsgICAgICAgICAgICAg ICAgICAgIC8qIHN1cHBseSBsZWFkaW5nIGNvbG9uICovCisgICAgICAgICAgICBpbnQgbGVuID0g KGludClzdHJsZW4ocykgKyAyOworICAgICAgICAgICAgcCA9IG1hbGxvYyhsZW4pOyAgICAgICAg ICAgIC8qIGFuZCB0cnkgYWdhaW4uLi4gKi8KKyAgICAgICAgICAgIGlmIChwKSB7CisgICAgICAg ICAgICAgICAgc3RyY3B5KHAsIjoiKTsgICAgICAgICAgLyogc2FmZSAqLworICAgICAgICAgICAg ICAgIHN0cmNhdChwLHMpOyAgICAgICAgICAgIC8qIHNhZmUgKi8KKyAgICAgICAgICAgICAgICBp ZiAoemNoZGlyKHApKQorICAgICAgICAgICAgICAgICAgY3dkZiA9IDE7CisgICAgICAgICAgICAg ICAgZnJlZShwKTsKKyAgICAgICAgICAgICAgICBwID0gTlVMTDsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgfQorICAgIH0KKyAgICBpZiAoIWN3ZGYpCisgICAgICBwZXJyb3Iocyk7CisjZWxzZQor ICAgIHAgPSB6Z3RkaXIoKTsKKyAgICBpZiAoIXpjaGRpcihzKSkgeworICAgICAgICBjd2RmID0g MDsKKyNpZmRlZiBDS1JPT1QKKyAgICAgICAgaWYgKGNrcm9vdGVycikKKyAgICAgICAgICBwcmlu dGYoIj9PZmYgbGltaXRzOiBcIiVzXCJcbiIscyk7CisgICAgICAgIGVsc2UKKyNlbmRpZiAvKiBD S1JPT1QgKi8KKyAgICAgICAgICBwZXJyb3Iocyk7CisgICAgfSBlbHNlIGN3ZGYgPSAxOworI2Vu ZGlmIC8qIE1BQyAqLworCisgICAgeCA9IDA7CisgICAgaWYgKGN3ZGYpIHsKKyAgICAgICAgbWFr ZXN0cigmcHJldmRpcixwKTsKKyAgICAgICAgZGVidWcoRjExMSwiZG9jZCIsInNydmNkbXNnIixz cnZjZG1zZyk7CisgICAgICAgIGlmIChzcnZjZG1zZworI2lmZGVmIElLU0RDT05GCisgICAgICAg ICAgICAmJiAhKGluc2VydmVyICYmICFpa3NkY2YpCisjZW5kaWYgLyogSUtTRENPTkYgKi8KKyAg ICAgICAgICAgICkgeworICAgICAgICAgICAgaW50IGk7CisgICAgICAgICAgICBmb3IgKGkgPSAw OyBpIDwgODsgaSsrKSB7CisgICAgICAgICAgICAgICAgZGVidWcoRjExMSwiZG9jZCBjZG1zZ2Zp bGVbaV0iLGNkbXNnZmlsZVtpXSxpKTsKKyAgICAgICAgICAgICAgICBpZiAoemNoa2koY2Rtc2dm aWxlW2ldKSA+IC0xKSB7CisgICAgICAgICAgICAgICAgICAgIHggPSAxOworICAgICAgICAgICAg ICAgICAgICBkb3R5cGUoY2Rtc2dmaWxlW2ldLHhhc2ttb3JlLDAsMCxOVUxMLDAsTlVMTCwwLDAs TlVMTCwwKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorLyogeGRvY2Q6ICovCisgICAgaWYgKCF4 ICYmIHNydmNkbXNnICYmICFzZXJ2ZXIKKyNpZmRlZiBJS1NEQ09ORgorICAgICAgICAmJiAhKGlu c2VydmVyICYmICFpa3NkY2YpCisjZW5kaWYgLyogSUtTRENPTkYgKi8KKyAgICAgICAgJiYgIXF1 aWV0ICYmICF4Y21kc3JjKQorICAgICAgcHJpbnRmKCIlc1xuIiwgemd0ZGlyKCkpOworCisgICAg cmV0dXJuKGN3ZGYpOworfQorCitzdGF0aWMgaW50IG9uX2N0cmxjID0gMDsKKworVk9JRAorZml4 Y21kKCkgeyAgICAgICAgICAgICAgICAgICAgICAvKiBGaXggY29tbWFuZCBwYXJzZXIgYWZ0ZXIg aW50ZXJydXB0aW9uICovCisjaWZuZGVmIE5PU1BMCisjaWZuZGVmIE5PT05DVFJMQworICAgIGlm IChubWFjKSB7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFueSBtYWNyb3MgZGVmaW5lZD8g Ki8KKyAgICAgICAgaW50IGs7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBZZXMgKi8KKyAg ICAgICAgY2hhciAqIHMgPSAib25fY3RybGMiOyAgICAgICAgICAvKiBOYW1lIG9mIEN0cmwtQyBo YW5kbGluZyBtYWNybyAqLworICAgICAgICBrID0gbWxvb2sobWFjdGFiLHMsbm1hYyk7ICAgICAg IC8qIExvb2sgaXQgdXAuICovCisgICAgICAgIGlmIChrID49IDApIHsgICAgICAgICAgICAgICAg ICAgLyogSWYgZm91bmQsICovCisgICAgICAgICAgICBpZiAob25fY3RybGMrKyA9PSAwKSB7ICAg ICAgLyogaWYgbm90IGFscmVhZHkgZXhlY3V0aW5nLCAqLworICAgICAgICAgICAgICAgIGlmIChk b2RvKGssIiIsMCkgPiAtMSkgIC8qIHNldCBpdCB1cCwgKi8KKyAgICAgICAgICAgICAgICAgIHBh cnNlcigxKTsgICAgICAgICAgICAvKiBleGVjdXRlIGl0LCAqLworICAgICAgICAgICAgfQorICAg ICAgICAgICAgZGVsbWFjKHMsMSk7ICAgICAgICAgICAgICAgIC8qIGFuZCB1bmRlZmluZSBpdC4g Ki8KKyAgICAgICAgfQorICAgIH0KKyAgICBvbl9jdHJsYyA9IDA7CisjZW5kaWYgLyogTk9PTkNU UkxDICovCisjZW5kaWYgLyogTk9TUEwgKi8KKyAgICBkb3N0b3AoKTsgICAgICAgICAgICAgICAg ICAgLyogQmFjayB0byB0b3AgbGV2ZWwgKGFsc28gY2FsbHMgY29uaW50KCkpLiAqLworICAgIGJn Y2hrKCk7ICAgICAgICAgICAgICAgICAgICAvKiBDaGVjayBiYWNrZ3JvdW5kIHN0YXR1cyAqLwor ICAgIGlmICgqcHNhdmUpIHsgICAgICAgICAgICAgICAvKiBJZiBvbGQgcHJvbXB0IHNhdmVkLCAq LworICAgICAgICBjbXNldHAocHNhdmUpOyAgICAgICAgICAvKiByZXN0b3JlIGl0LiAqLworICAg ICAgICAqcHNhdmUgPSBOVUw7CisgICAgfQorICAgIHN1Y2Nlc3MgPSAwOyAgICAgICAgICAgICAg ICAvKiBUZWxsIHBhcnNlciBsYXN0IGNvbW1hbmQgZmFpbGVkICovCit9CisKKyNpZm5kZWYgTk9T SE9XICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTSE9XIEZFQVRVUkVTICovCisvKgorICBO b3RlLCBwcmVzZW50bHkgb3B0bGlzdFtdIGluZGV4IG92ZXJmbG93IGlzIG5vdCBjaGVja2VkLgor ICBUaGVyZSBpcyBwbGVudHkgb2Ygcm9vbSAobGVzcyB0aGFuIDM2MCBlbnRyaWVzIGZvciAxMDAw IHNsb3RzKS4KKyAgV2hlbiBzcGFjZSBzdGFydHMgdG8gZ2V0IHRpZ2h0LCBjaGVjayBmb3Igbm9w dGxpc3QgPj0gTk9QVExJU1QKKyAgZXZlcnkgdGltZSBub3B0bGlzdCBpcyBpbmNyZW1lbnRlZC4K KyovCisjZGVmaW5lIE5PUFRMSVNUIDEwMjQKK3N0YXRpYyBpbnQgbm9wdGxpc3QgPSAwOworc3Rh dGljIGNoYXIgKiBvcHRsaXN0W05PUFRMSVNUKzFdOworc3RhdGljIGludCBocG9zID0gMDsKKwor aW50CitwcnRvcHQobGluZXMscykgaW50ICogbGluZXM7IGNoYXIgKnM7IHsgLyogUHJpbnQgYW4g b3B0aW9uICovCisgICAgaW50IHksIGk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRG9l cyB3b3JkIHdyYXAuICovCisgICAgaWYgKCFzKSBzID0gIiI7CisgICAgaSA9ICpsaW5lczsKKyAg ICBpZiAoISpzKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFbXB0eSBhcmd1bWVudCAq LworICAgICAgICBpZiAoaHBvcyA+IDApIHsgICAgICAgICAgICAgICAgIC8qIG1lYW5zIHRvIGVu ZCB0aGlzIGxpbmUuICovCisgICAgICAgICAgICBwcmludGYoIlxuIik7ICAgICAgICAgICAgICAg LyogTm90IG5lZWRlZCBpZiBhbHJlYWR5IGF0ICovCisgICAgICAgICAgICBpZiAoKytpID4gKGNt ZF9yb3dzIC0gMykpIHsgLyogYmVnaW5uaW5nIG9mIG5ldyBsaW5lLiAqLworICAgICAgICAgICAg ICAgIGlmICghYXNrbW9yZSgpKQorICAgICAgICAgICAgICAgICAgcmV0dXJuKDApOworICAgICAg ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgIGkgPSAwOworICAgICAgICAgICAgfQor ICAgICAgICB9CisgICAgICAgIHByaW50ZigiXG4iKTsgICAgICAgICAgICAgICAgICAgLyogQW5k IHRoZW4gbWFrZSBhIGJsYW5rIGxpbmUgKi8KKyAgICAgICAgaWYgKCsraSA+IChjbWRfcm93cyAt IDMpKSB7CisgICAgICAgICAgICBpZiAoIWFza21vcmUoKSkKKyAgICAgICAgICAgICAgcmV0dXJu KDApOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBpID0gMDsKKyAgICAgICAgfQor ICAgICAgICBocG9zID0gMDsKKyAgICAgICAgKmxpbmVzID0gaTsKKyAgICAgICAgcmV0dXJuKDEp OworICAgIH0KKyAgICB5ID0gKGludClzdHJsZW4ocykgKyAxOworICAgIGhwb3MgKz0geTsKKyAg ICBkZWJ1ZyhGMTAxLCJwcnRvcHQgaHBvcyIsIiIsaHBvcyk7CisgICAgZGVidWcoRjEwMSwicHJ0 b3B0IGNtZF9jb2xzIiwiIixjbWRfY29scyk7CisKKyAgICBpZiAoCisjaWZkZWYgT1MyCisgICAg ICAgIGhwb3MgPiAoKGNtZF9jb2xzID4gNDApID8gKGNtZF9jb2xzIC0gMSkgOiA3OSkKKyNlbHNl IC8qIE9TMiAqLworICAgICAgICBocG9zID4gKCh0dF9jb2xzID4gNDApID8gKHR0X2NvbHMgLSAx KSA6IDc5KQorI2VuZGlmIC8qIE9TMiAqLworICAgICAgICApIHsKKyAgICAgICAgcHJpbnRmKCJc biIpOworICAgICAgICBpZiAoKytpID4gKGNtZF9yb3dzIC0gMykpIHsKKyAgICAgICAgICAgIGlm ICghYXNrbW9yZSgpKQorICAgICAgICAgICAgICByZXR1cm4oMCk7CisgICAgICAgICAgICBlbHNl CisgICAgICAgICAgICAgIGkgPSAwOworICAgICAgICB9CisgICAgICAgIHByaW50ZigiICVzIixz KTsKKyAgICAgICAgaHBvcyA9IHk7CisgICAgfSBlbHNlCisgICAgICBwcmludGYoIiAlcyIscyk7 CisgICAgKmxpbmVzID0gaTsKKyAgICByZXR1cm4oMSk7Cit9CisKK3N0YXRpYyBWT0lECitpbml0 b3B0bGlzdCgpIHsKKyAgICBpbnQgaTsKKyAgICBpZiAobm9wdGxpc3QgPiAwKQorICAgICAgcmV0 dXJuOworICAgIGZvciAoaSA9IDA7IGkgPCBOT1BUTElTVDsgaSsrKQorICAgICAgb3B0bGlzdFtp XSA9IE5VTEw7CisKKyNpZmRlZiBNQUMKKyNpZmRlZiBNUFcKKyAgICBtYWtlc3RyKCYob3B0bGlz dFtub3B0bGlzdCsrXSksIk1QVyIpOworI2VuZGlmIC8qIE1QVyAqLworI2VuZGlmIC8qIE1BQyAq LworCisjaWZkZWYgTUFDCisjaWZkZWYgVEhJTktfQworICAgIG1ha2VzdHIoJihvcHRsaXN0W25v cHRsaXN0KytdKSwiVEhJTktfQyIpOworI2VuZGlmIC8qIFRISU5LX0MgKi8KKyNlbmRpZiAvKiBN QUMgKi8KKworI2lmZGVmIF9fMzg2X18KKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsr XSksIl9fMzg2X18iKTsKKyNlbmRpZiAvKiBfXzM4Nl9fICovCisKKy8qIE1lbW9yeSBtb2RlbHMu Li4gKi8KKworI2lmZGVmIF9fRkxBVF9fCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3Qr K10pLCJfX0ZMQVRfXyIpOworI2VuZGlmIC8qIF9fRkxBVF9fICovCisjaWZkZWYgX19TTUFMTF9f CisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJfX1NNQUxMX18iKTsKKyNlbmRp ZiAvKiBfX1NNQUxMX18gKi8KKyNpZmRlZiBfX01FRElVTV9fCisgICAgbWFrZXN0cigmKG9wdGxp c3Rbbm9wdGxpc3QrK10pLCJfX01FRElVTV9fIik7CisjZW5kaWYgLyogX19NRURJVU1fXyAqLwor I2lmZGVmIF9fQ09NUEFDVF9fCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJf X0NPTVBBQ1RfXyIpOworI2VuZGlmIC8qIF9fQ09NUEFDVF9fICovCisjaWZkZWYgX19MQVJHRV9f CisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJfX0xBUkdFX18iKTsKKyNlbmRp ZiAvKiBfX0xBUkdFX18gKi8KKworI2lmZGVmIERFQlVHCisjaWZkZWYgSUZERUJVRworICAgIG1h a2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiSUZERUJVRyIpOworI2Vsc2UKKyAgICBtYWtl c3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkRFQlVHIik7CisjZW5kaWYgLyogSUZERUJVRyAq LworI2VuZGlmIC8qIERFQlVHICovCisjaWZkZWYgVExPRworICAgIG1ha2VzdHIoJihvcHRsaXN0 W25vcHRsaXN0KytdKSwiVExPRyIpOworI2VuZGlmIC8qIFRMT0cgKi8KKyNpZmRlZiBCSUdCVUZP SworICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiQklHQlVGT0siKTsKKyNlbmRp ZiAvKiBCSUdCVUZPSyAqLworI2lmZGVmIElOUEJVRlNJWgorICAgIHNwcmludGYobGluZSwiSU5Q QlVGU0laPSVkIixJTlBCVUZTSVopOyAvKiBTQUZFICovCisgICAgbWFrZXN0cigmKG9wdGxpc3Rb bm9wdGxpc3QrK10pLGxpbmUpOworI2VuZGlmIC8qIElOUEJVRlNJWkUgKi8KKyNpZmRlZiBMSU5C VUZTSVoKKyAgICBzcHJpbnRmKGxpbmUsIkxJTkJVRlNJWj0lZCIsTElOQlVGU0laKTsgLyogU0FG RSAqLworICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSxsaW5lKTsKKyNlbmRpZiAv KiBMSU5CVUZTSVpFICovCisjaWZkZWYgSU5CVUZTSVpFCisgICAgc3ByaW50ZihsaW5lLCJJTkJV RlNJWkU9JWQiLElOQlVGU0laRSk7IC8qIFNBRkUgKi8KKyAgICBtYWtlc3RyKCYob3B0bGlzdFtu b3B0bGlzdCsrXSksbGluZSk7CisjZW5kaWYgLyogSU5CVUZTSVpFICovCisjaWZkZWYgT0JVRlNJ WkUKKyAgICBzcHJpbnRmKGxpbmUsIk9CVUZTSVpFPSVkIixPQlVGU0laRSk7IC8qIFNBRkUgKi8K KyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksbGluZSk7CisjZW5kaWYgLyogT0JV RlNJWkUgKi8KKyNpZmRlZiBGRF9TRVRTSVpFCisgICAgc3ByaW50ZihsaW5lLCJGRF9TRVRTSVpF PSVkIixGRF9TRVRTSVpFKTsgLyogU0FGRSAqLworICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRs aXN0KytdKSxsaW5lKTsKKyNlbmRpZiAvKiBGRF9TRVRTSVpFICovCisjaWZkZWYgWEZSQ0FOCisg ICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJYRlJDQU4iKTsKKyNlbmRpZiAvKiBY RlJDQU4gKi8KKyNpZmRlZiBYUFJJTlQKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsr XSksIlhQUklOVCIpOworI2VuZGlmIC8qIFhQUklOVCAqLworI2lmZGVmIFBJUEVTRU5ECisgICAg bWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJQSVBFU0VORCIpOworI2VuZGlmIC8qIFBJ UEVTRU5EICovCisjaWZkZWYgQ0tfU1BFRUQKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlz dCsrXSksIkNLX1NQRUVEIik7CisjZW5kaWYgLyogQ0tfU1BFRUQgKi8KKyNpZmRlZiBDS19GQVNU CisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJDS19GQVNUIik7CisjZW5kaWYg LyogQ0tfRkFTVCAqLworI2lmZGVmIENLX0FQQworICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRs aXN0KytdKSwiQ0tfQVBDIik7CisjZW5kaWYgLyogQ0tfQVBDICovCisjaWZkZWYgQ0tfQVVUT0RM CisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJDS19BVVRPREwiKTsKKyNlbmRp ZiAvKiBDS19BVVRPREwgKi8KKyNpZmRlZiBDS19NS0RJUgorICAgIG1ha2VzdHIoJihvcHRsaXN0 W25vcHRsaXN0KytdKSwiQ0tfTUtESVIiKTsKKyNlbmRpZiAvKiBDS19NS0RJUiAqLworI2lmZGVm IE5PTUtESVIKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIk5PTUtESVIiKTsK KyNlbmRpZiAvKiBOT01LRElSICovCisjaWZkZWYgQ0tfTEFCRUxFRAorICAgIG1ha2VzdHIoJihv cHRsaXN0W25vcHRsaXN0KytdKSwiQ0tfTEFCRUxFRCIpOworI2VuZGlmIC8qIENLX0xBQkVMRUQg Ki8KKyNpZmRlZiBOT0RJQUwKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIk5P RElBTCIpOworI2VuZGlmIC8qIE5PRElBTCAqLworI2lmZGVmIE1JTklESUFMCisgICAgbWFrZXN0 cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJNSU5JRElBTCIpOworI2VuZGlmIC8qIE1JTklESUFM ICovCisjaWZkZWYgV0hBVEFNSQorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwi V0hBVEFNSSIpOworI2VuZGlmIC8qIFdIQVRBTUkgKi8KKyNpZmRlZiBEWU5BTUlDCisgICAgbWFr ZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJEWU5BTUlDIik7CisjZW5kaWYgLyogRFlOQU1J QyAqLworI2lmbmRlZiBOT1NQTAorICAgIHNwcmludGYobGluZSwiQ01EREVQPSVkIixDTURERVAp OyAgIC8qIFNBRkUgKi8KKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksbGluZSk7 CisjZW5kaWYgLyogTk9TUEwgKi8KKworI2lmZGVmIE1BWFBBVEhMRU4KKyAgICBzcHJpbnRmKGxp bmUsIk1BWFBBVEhMRU49JWQiLE1BWFBBVEhMRU4pOyAvKiBTQUZFICovCisgICAgbWFrZXN0cigm KG9wdGxpc3Rbbm9wdGxpc3QrK10pLGxpbmUpOworI2VuZGlmIC8qIE1BWFBBVEhMRU4gKi8KKwor I2lmZGVmIERFVk5BTUxFTgorICAgIHNwcmludGYobGluZSwiREVWTkFNTEVOPSVkIixERVZOQU1M RU4pOyAvKiBTQUZFICovCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLGxpbmUp OworI2VuZGlmIC8qIERFVk5BTUxFTiAqLworCisjaWZkZWYgTk9fUEFSQU1fSAorICAgIG1ha2Vz dHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiTk9fUEFSQU1fSCIpOworI2VuZGlmIC8qIE5PX1BB UkFNX0ggKi8KKworI2lmZGVmIElOQ0xfUEFSQU1fSAorICAgIG1ha2VzdHIoJihvcHRsaXN0W25v cHRsaXN0KytdKSwiSU5DTF9QQVJBTV9IIik7CisjZW5kaWYgLyogSU5DTF9QQVJBTV9IICovCisK KyAgICBzcHJpbnRmKGxpbmUsIkNLTUFYUEFUSD0lZCIsQ0tNQVhQQVRIKTsgLyogU0FGRSAqLwor ICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSxsaW5lKTsKKworICAgIHNwcmludGYo bGluZSwiQ0tNQVhPUEVOPSVkIixDS01BWE9QRU4pOyAvKiBTQUZFICovCisgICAgbWFrZXN0cigm KG9wdGxpc3Rbbm9wdGxpc3QrK10pLGxpbmUpOworCisgICAgc3ByaW50ZihsaW5lLCJaX01BWENI QU49JWQiLFpfTUFYQ0hBTik7IC8qIFNBRkUgKi8KKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0 bGlzdCsrXSksbGluZSk7CisKKyNpZmRlZiBPUEVOX01BWAorICAgIHNwcmludGYobGluZSwiT1BF Tl9NQVg9JWQiLE9QRU5fTUFYKTsgLyogU0FGRSAqLworICAgIG1ha2VzdHIoJihvcHRsaXN0W25v cHRsaXN0KytdKSxsaW5lKTsKKyNlbmRpZiAvKiBPUEVOX01BWCAqLworCisjaWZkZWYgX1BPU0lY X09QRU5fTUFYCisgICAgc3ByaW50ZihsaW5lLCJfUE9TSVhfT1BFTl9NQVg9JWQiLF9QT1NJWF9P UEVOX01BWCk7IC8qIFNBRkUgKi8KKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSks bGluZSk7CisjZW5kaWYgLyogX1BPU0lYX09QRU5fTUFYICovCisKKyNpZmRlZiBDS0NIQU5ORUxJ TworICAgIHsKKyAgICAgICAgZXh0ZXJuIGludCB6X21heGNoYW47CisjaWZkZWYgVU5JWAorICAg ICAgICBleHRlcm4gaW50IGNrbWF4ZmlsZXM7CisgICAgICAgIHNwcmludGYobGluZSwiY2ttYXhm aWxlcz0lZCIsY2ttYXhmaWxlcyk7IC8qIFNBRkUgKi8KKyAgICAgICAgbWFrZXN0cigmKG9wdGxp c3Rbbm9wdGxpc3QrK10pLGxpbmUpOworI2VuZGlmIC8qIFVOSVggKi8KKyAgICAgICAgc3ByaW50 ZihsaW5lLCJ6X21heGNoYW49JWQiLHpfbWF4Y2hhbik7IC8qIFNBRkUgKi8KKyAgICAgICAgbWFr ZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLGxpbmUpOworICAgIH0KKyNlbmRpZiAvKiBDS0NI QU5ORUxJTyAqLworCisjaWZkZWYgRk9QRU5fTUFYCisgICAgc3ByaW50ZihsaW5lLCJGT1BFTl9N QVg9JWQiLEZPUEVOX01BWCk7IC8qIFNBRkUgKi8KKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0 bGlzdCsrXSksbGluZSk7CisjZW5kaWYgLyogRk9QRU5fTUFYICovCisKKyNpZmRlZiBNQVhHRVRQ QVRICisgICAgc3ByaW50ZihsaW5lLCJNQVhHRVRQQVRIPSVkIixNQVhHRVRQQVRIKTsgLyogU0FG RSAqLworICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSxsaW5lKTsKKyNlbmRpZiAv KiBNQVhHRVRQQVRIICovCisKKyNpZmRlZiBDTURCTAorICAgIHNwcmludGYobGluZSwiQ01EQkw9 JWQiLENNREJMKTsgICAgIC8qIFNBRkUgKi8KKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlz dCsrXSksbGluZSk7CisjZW5kaWYgLyogQ01EQkwgKi8KKworI2lmZGVmIFZOQU1MCisgICAgc3By aW50ZihsaW5lLCJWTkFNTD0lZCIsVk5BTUwpOyAgICAgLyogU0FGRSAqLworICAgIG1ha2VzdHIo JihvcHRsaXN0W25vcHRsaXN0KytdKSxsaW5lKTsKKyNlbmRpZiAvKiBWTkFNTCAqLworCisjaWZk ZWYgQVJSQVlSRUZMRU4KKyAgICBzcHJpbnRmKGxpbmUsIkFSUkFZUkVGTEVOPSVkIixBUlJBWVJF RkxFTik7IC8qIFNBRkUgKi8KKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksbGlu ZSk7CisjZW5kaWYgLyogQVJSQVlSRUZMRU4gKi8KKworI2lmZGVmIFVJREJVRkxFTgorICAgIHNw cmludGYobGluZSwiVUlEQlVGTEVOPSVkIixVSURCVUZMRU4pOyAvKiBTQUZFICovCisgICAgbWFr ZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLGxpbmUpOworI2VuZGlmIC8qIFVJREJVRkxFTiAq LworCisjaWZkZWYgRk9SREVQVEgKKyAgICBzcHJpbnRmKGxpbmUsIkZPUkRFUFRIPSVkIixGT1JE RVBUSCk7IC8qIFNBRkUgKi8KKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksbGlu ZSk7CisjZW5kaWYgLyogRk9SREVQVEggKi8KKworI2lmZGVmIE1BWFRBS0UKKyAgICBzcHJpbnRm KGxpbmUsIk1BWFRBS0U9JWQiLE1BWFRBS0UpOyAvKiBTQUZFICovCisgICAgbWFrZXN0cigmKG9w dGxpc3Rbbm9wdGxpc3QrK10pLGxpbmUpOworI2VuZGlmIC8qIE1BWFRBS0UgKi8KKworI2lmZGVm IE1BQ0xFVkVMCisgICAgc3ByaW50ZihsaW5lLCJNQUNMRVZFTD0lZCIsTUFDTEVWRUwpOyAvKiBT QUZFICovCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLGxpbmUpOworI2VuZGlm IC8qIE1BQ0xFVkVMICovCisKKyNpZmRlZiBNQUNfTUFYCisgICAgc3ByaW50ZihsaW5lLCJNQUNf TUFYPSVkIixNQUNfTUFYKTsgLyogU0FGRSAqLworICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRs aXN0KytdKSxsaW5lKTsKKyNlbmRpZiAvKiBNQUNfTUFYICovCisKKyNpZmRlZiBfTEFSR0VGSUxF X1NPVVJDRQorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiX0xBUkdFRklMRV9T T1VSQ0UiKTsKKyNlbmRpZgkvKiBfTEFSR0VGSUxFX1NPVVJDRSAqLworCisjaWZkZWYgX0ZJTEVf T0ZGU0VUX0JJVFMKKyAgICBzcHJpbnRmKGxpbmUsIl9GSUxFX09GRlNFVF9CSVRTPSVkIixfRklM RV9PRkZTRVRfQklUUyk7IC8qIFNBRkUgKi8KKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlz dCsrXSksbGluZSk7CisjZW5kaWYJLyogX0ZJTEVfT0ZGU0VUX0JJVFMgKi8KKworI2lmZGVmIF9f VVNFX0ZJTEVfT0ZGU0VUNjQKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIl9f VVNFX0ZJTEVfT0ZGU0VUNjQiKTsKKyNlbmRpZgkvKiBfX1VTRV9GSUxFX09GRlNFVDY0ICovCisK KyNpZmRlZiBfX1VTRV9MQVJHRUZJTEU2NAorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0 KytdKSwiX19VU0VfTEFSR0VGSUxFNjQiKTsKKyNlbmRpZgkvKiBfX1VTRV9MQVJHRUZJTEU2NCAq LworCisjaWZkZWYgQ09NTUVOVAorI2lmZGVmIENIQVJfTUFYCisgICAgc3ByaW50ZihsaW5lLCJD SEFSX01BWD0lbGx4IixDSEFSX01BWCk7IC8qIFNBRkUgKi8KKyAgICBtYWtlc3RyKCYob3B0bGlz dFtub3B0bGlzdCsrXSksbGluZSk7CisjZW5kaWYgLyogQ0hBUl9NQVggKi8KKyNpZmRlZiBVQ0hB Ul9NQVgKKyAgICBzcHJpbnRmKGxpbmUsIlVDSEFSX01BWD0lbGx4IixVQ0hBUl9NQVgpOyAvKiBT QUZFICovCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLGxpbmUpOworI2VuZGlm IC8qIFVDSEFSX01BWCAqLworI2lmZGVmIFNIUlRfTUFYCisgICAgc3ByaW50ZihsaW5lLCJTSFJU X01BWD0lbGx4IixTSFJUX01BWCk7IC8qIFNBRkUgKi8KKyAgICBtYWtlc3RyKCYob3B0bGlzdFtu b3B0bGlzdCsrXSksbGluZSk7CisjZW5kaWYgLyogU0hSVF9NQVggKi8KKyNpZmRlZiBVU0hSVF9N QVgKKyAgICBzcHJpbnRmKGxpbmUsIlVTSFJUX01BWD0lbGx4IixVU0hSVF9NQVgpOyAvKiBTQUZF ICovCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLGxpbmUpOworI2VuZGlmIC8q IFVTSFJUX01BWCAqLworI2lmZGVmIElOVF9NQVgKKyAgICBzcHJpbnRmKGxpbmUsIklOVF9NQVg9 JWxseCIsSU5UX01BWCk7IC8qIFNBRkUgKi8KKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlz dCsrXSksbGluZSk7CisjZW5kaWYgLyogSU5UX01BWCAqLworI2lmZGVmIFVJTlRfTUFYCisgICAg c3ByaW50ZihsaW5lLCJVSU5UX01BWD0lbGx4IixVSU5UX01BWCk7IC8qIFNBRkUgKi8KKyAgICBt YWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksbGluZSk7CisjZW5kaWYgLyogVUlOVF9NQVgg Ki8KKyNpZmRlZiBNQVhfTE9ORworICAgIHNwcmludGYobGluZSwiTUFYX0xPTkc9JWxseCIsTUFY X0xPTkcpOyAvKiBTQUZFICovCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLGxp bmUpOworI2VuZGlmIC8qIE1BWF9MT05HICovCisjaWZkZWYgTE9OR19NQVgKKyAgICBzcHJpbnRm KGxpbmUsIkxPTkdfTUFYPSVsbHgiLExPTkdfTUFYKTsgLyogU0FGRSAqLworICAgIG1ha2VzdHIo JihvcHRsaXN0W25vcHRsaXN0KytdKSxsaW5lKTsKKyNlbmRpZiAvKiBMT05HX01BWCAqLworI2lm ZGVmIFVMT05HX01BWAorICAgIHNwcmludGYobGluZSwiVUxPTkdfTUFYPSVsbHgiLFVMT05HX01B WCk7IC8qIFNBRkUgKi8KKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksbGluZSk7 CisjZW5kaWYgLyogVUxPTkdfTUFYICovCisjaWZkZWYgTUFYSU5UCisgICAgc3ByaW50ZihsaW5l LCJNQVhJTlQ9JWxseCIsTUFYSU5UKTsgLyogU0FGRSAqLworICAgIG1ha2VzdHIoJihvcHRsaXN0 W25vcHRsaXN0KytdKSxsaW5lKTsKKyNlbmRpZiAvKiBNQVhJTlQgKi8KKyNpZmRlZiBNQVhMT05H CisgICAgc3ByaW50ZihsaW5lLCJNQVhMT05HPSVsbHgiLE1BWExPTkcpOyAvKiBTQUZFICovCisg ICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLGxpbmUpOworI2VuZGlmIC8qIE1BWExP TkcgKi8KKyNpZmRlZiBOVAorI2lmZGVmIExMT05HX01BWAorICAgIHNwcmludGYobGluZSwiTExP TkdfTUFYPSVJNjR4IixMTE9OR19NQVgpOyAvKiBTQUZFICovCisgICAgbWFrZXN0cigmKG9wdGxp c3Rbbm9wdGxpc3QrK10pLGxpbmUpOworI2VuZGlmIC8qIExMT05HX01BWCAqLworI2lmZGVmIFVM TE9OR19NQVgKKyAgICBzcHJpbnRmKGxpbmUsIlVMTE9OR19NQVg9JUk2NHgiLFVMTE9OR19NQVgp OyAvKiBTQUZFICovCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLGxpbmUpOwor I2VuZGlmIC8qIFVMTE9OR19NQVggKi8KKyNpZmRlZiBNQVhMT05HTE9ORworICAgIHNwcmludGYo bGluZSwiTUFYTE9OR0xPTkc9JUk2NHgiLE1BWExPTkdMT05HKTsgIC8qIFNBRkUgKi8KKyAgICBt YWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksbGluZSk7CisjZW5kaWYgLyogTUFYTE9OR0xP TkcgKi8KKyNlbHNlCisjaWZkZWYgTExPTkdfTUFYCisgICAgc3ByaW50ZihsaW5lLCJMTE9OR19N QVg9JWxseCIsTExPTkdfTUFYKTsgLyogU0FGRSAqLworICAgIG1ha2VzdHIoJihvcHRsaXN0W25v cHRsaXN0KytdKSxsaW5lKTsKKyNlbmRpZiAvKiBMTE9OR19NQVggKi8KKyNpZmRlZiBVTExPTkdf TUFYCisgICAgc3ByaW50ZihsaW5lLCJVTExPTkdfTUFYPSVsbHgiLFVMTE9OR19NQVgpOyAvKiBT QUZFICovCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLGxpbmUpOworI2VuZGlm IC8qIFVMTE9OR19NQVggKi8KKyNpZmRlZiBNQVhMT05HTE9ORworICAgIHNwcmludGYobGluZSwi TUFYTE9OR0xPTkc9JWxseCIsTUFYTE9OR0xPTkcpOyAgLyogU0FGRSAqLworICAgIG1ha2VzdHIo JihvcHRsaXN0W25vcHRsaXN0KytdKSxsaW5lKTsKKyNlbmRpZiAvKiBNQVhMT05HTE9ORyAqLwor I2VuZGlmCisjaWZkZWYgX0lOVEVHUkFMX01BWF9CSVRTCisgICAgc3ByaW50ZihsaW5lLCJfSU5U RUdSQUxfTUFYX0JJVFM9JWQiLF9JTlRFR1JBTF9NQVhfQklUUyk7ICAvKiBTQUZFICovCisgICAg bWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLGxpbmUpOworI2VuZGlmIC8qIF9JTlRFR1JB TF9NQVhfQklUUyAqLworI2VuZGlmCS8qIENPTU1FTlQgKi8KKworI2lmZGVmIE1JTlBVVE1BWAor ICAgIHNwcmludGYobGluZSwiTUlOUFVUTUFYPSVkIixNSU5QVVRNQVgpOyAvKiBTQUZFICovCisg ICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLGxpbmUpOworI2VuZGlmIC8qIE1JTlBV VE1BWCAqLworCisjaWZkZWYgTUFYV0xECisgICAgc3ByaW50ZihsaW5lLCJNQVhXTEQ9JWQiLE1B WFdMRCk7IC8qIFNBRkUgKi8KKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksbGlu ZSk7CisjZWxzZQorI2lmZGVmIE9TMgorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0Kytd KSwiTUFYV0xEPXVubGltaXRlZCIpOworI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIE1BWFdM RCAqLworCisjaWZkZWYgTVNFTkRNQVgKKyAgICBzcHJpbnRmKGxpbmUsIk1TRU5ETUFYPSVkIixN U0VORE1BWCk7IC8qIFNBRkUgKi8KKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSks bGluZSk7CisjZW5kaWYgLyogTVNFTkRNQVggKi8KKworI2lmZGVmIE1BWERESVIKKyAgICBzcHJp bnRmKGxpbmUsIk1BWERESVI9JWQiLE1BWERESVIpOyAvKiBTQUZFICovCisgICAgbWFrZXN0cigm KG9wdGxpc3Rbbm9wdGxpc3QrK10pLGxpbmUpOworI2VuZGlmIC8qIE1BWERESVIgKi8KKworI2lm ZGVmIE1BWEROVU1TCisgICAgc3ByaW50ZihsaW5lLCJNQVhETlVNUz0lZCIsTUFYRE5VTVMpOyAv KiBTQUZFICovCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLGxpbmUpOworI2Vu ZGlmIC8qIE1BWEROVU1TICovCisKKyNpZmRlZiBVTklYCisgICAgbWFrZXN0cigmKG9wdGxpc3Rb bm9wdGxpc3QrK10pLCJVTklYIik7CisjZW5kaWYgLyogVU5JWCAqLworCisjaWZkZWYgVk1TCisg ICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJWTVMiKTsKKyNpZmRlZiBfX1ZNU19W RVIKKyAgICBzcHJpbnRmKGxpbmUsIl9fVk1TX1ZFUj0lZCIsX19WTVNfVkVSKTsgLyogU0FGRSAq LworICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSxsaW5lKTsKKyNlbmRpZiAvKiBf X1ZNU19WRVIgKi8KKyNpZmRlZiBWTVNWNzAKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlz dCsrXSksIlZNU1Y3MCIpOworI2VuZGlmIC8qIFZNU1Y3MCAqLworI2lmZGVmIE9MRF9WTVMKKyAg ICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIk9MRF9WTVMiKTsKKyNlbmRpZiAvKiBP TERfVk1TICovCisjaWZkZWYgdm1zCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10p LCJ2bXMiKTsKKyNlbmRpZiAvKiB2bXMgKi8KKyNpZmRlZiBWTVNWNjAKKyAgICBtYWtlc3RyKCYo b3B0bGlzdFtub3B0bGlzdCsrXSksIlZNU1Y2MCIpOworI2VuZGlmIC8qIFZNU1Y2MCAqLworI2lm ZGVmIFZNU1Y4MAorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiVk1TVjgwIik7 CisjZW5kaWYgLyogVk1TVjgwICovCisjaWZkZWYgVk1TU0hBUkUKKyAgICBtYWtlc3RyKCYob3B0 bGlzdFtub3B0bGlzdCsrXSksIlZNU1NIQVJFIik7CisjZW5kaWYgLyogVk1TU0hBUkUgKi8KKyNp ZmRlZiBOT1ZNU1NIQVJFCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJOT1ZN U1NIQVJFIik7CisjZW5kaWYgLyogTk9WTVNTSEFSRSAqLworI2VuZGlmIC8qIFZNUyAqLworCisj aWZkZWYgZGF0YWdlbmVyYWwKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksImRh dGFnZW5lcmFsIik7CisjZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KKyNpZmRlZiBhcG9sbG8KKyAg ICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksImFwb2xsbyIpOworI2VuZGlmIC8qIGFw b2xsbyAqLworI2lmZGVmIGFlZ2lzCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10p LCJhZWdpcyIpOworI2VuZGlmIC8qIGFlZ2lzICovCisjaWZkZWYgQTk4NgorICAgIG1ha2VzdHIo JihvcHRsaXN0W25vcHRsaXN0KytdKSwiQTk4NiIpOworI2VuZGlmIC8qIEE5ODYgKi8KKyNpZmRl ZiBBTUlHQQorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiQU1JR0EiKTsKKyNl bmRpZiAvKiBBTUlHQSAqLworI2lmZGVmIENPTlZFWDkKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtu b3B0bGlzdCsrXSksIkNPTlZFWDkiKTsKKyNlbmRpZiAvKiBDT05WRVg5ICovCisjaWZkZWYgQ09O VkVYMTAKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkNPTlZFWDEwIik7Cisj ZW5kaWYgLyogQ09OVkVYOSAqLworI2lmZGVmIE1BQworICAgIG1ha2VzdHIoJihvcHRsaXN0W25v cHRsaXN0KytdKSwiTUFDIik7CisjZW5kaWYgLyogTUFDICovCisjaWZkZWYgQVVYCisgICAgbWFr ZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJBVVgiKTsKKyNlbmRpZiAvKiBBVVggKi8KKwor I2lmZGVmIE9TMgorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiT1MyIik7Cisj aWZkZWYgTlQKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIk5UIik7CisjZW5k aWYgLyogTlQgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKworI2lmZGVmIE9TSworICAgIG1ha2VzdHIo JihvcHRsaXN0W25vcHRsaXN0KytdKSwiT1M5Iik7CisjZW5kaWYgLyogT1NLICovCisKKyNpZmRl ZiBNU0RPUworICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiTVNET1MiKTsKKyNl bmRpZiAvKiBNU0RPUyAqLworCisjaWZkZWYgRElSRU5UCisgICAgbWFrZXN0cigmKG9wdGxpc3Rb bm9wdGxpc3QrK10pLCJESVJFTlQiKTsKKyNlbmRpZiAvKiBESVJFTlQgKi8KKworI2lmZGVmIFNE SVJFTlQKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIlNESVJFTlQiKTsKKyNl bmRpZiAvKiBTRElSRU5UICovCisKKyNpZmRlZiBORElSCisgICAgbWFrZXN0cigmKG9wdGxpc3Rb bm9wdGxpc3QrK10pLCJORElSIik7CisjZW5kaWYgLyogTkRJUiAqLworCisjaWZkZWYgWE5ESVIK KyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIlhORElSIik7CisjZW5kaWYgLyog WE5ESVIgKi8KKworI2lmZGVmIFNBVkVEVUlECisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxp c3QrK10pLCJTQVZFRFVJRCIpOworI2VuZGlmIC8qIFNBVkVEVUlEICovCisKKyNpZmRlZiBSRU5B TUUKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIlJFTkFNRSIpOworI2VuZGlm IC8qIFJFTkFNRSAqLworCisjaWZkZWYgQ0tfVE1QRElSCisgICAgbWFrZXN0cigmKG9wdGxpc3Rb bm9wdGxpc3QrK10pLCJDS19UTVBESVIiKTsKKyNlbmRpZiAvKiBDS19UTVBESVIgKi8KKworI2lm ZGVmIE5PQ0NUUkFQCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJOT0NDVFJB UCIpOworI2VuZGlmIC8qIE5PQ0NUUkFQICovCisKKyNpZmRlZiBOT0NPVEZNQworICAgIG1ha2Vz dHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiTk9DT1RGTUMiKTsKKyNlbmRpZiAvKiBOT0NPVEZN QyAqLworCisjaWZkZWYgTk9GUklMTFMKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsr XSksIk5PRlJJTExTIik7CisjZW5kaWYgLyogTk9GUklMTFMgKi8KKworI2lmZGVmIFBBUlNFTlNF CisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJQQVJTRU5TRSIpOworI2VuZGlm IC8qIFBBUlNFTlNFICovCisKKyNpZmRlZiBUSU1FSAorICAgIG1ha2VzdHIoJihvcHRsaXN0W25v cHRsaXN0KytdKSwiVElNRUgiKTsKKyNlbmRpZiAvKiBUSU1FSCAqLworCisjaWZkZWYgTk9USU1F SAorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiVElNRUgiKTsKKyNlbmRpZiAv KiBOT1RJTUVIICovCisKKyNpZmRlZiBTWVNUSU1FSAorICAgIG1ha2VzdHIoJihvcHRsaXN0W25v cHRsaXN0KytdKSwiU1lTVElNRUgiKTsKKyNlbmRpZiAvKiBTWVNUSU1FSCAqLworCisjaWZkZWYg Tk9TWVNUSU1FSAorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiU1lTVElNRUgi KTsKKyNlbmRpZiAvKiBOT1NZU1RJTUVIICovCisKKyNpZmRlZiBTWVNUSU1FQkgKKyAgICBtYWtl c3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIlNZU1RJTUVCSCIpOworI2VuZGlmIC8qIFNZU1RJ TUVCSCAqLworCisjaWZkZWYgTk9TWVNUSU1FQkgKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0 bGlzdCsrXSksIlNZU1RJTUVCSCIpOworI2VuZGlmIC8qIE5PU1lTVElNRUJIICovCisKKyNpZmRl ZiBVVElNRUgKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIlVUSU1FSCIpOwor I2VuZGlmIC8qIFVUSU1FSCAqLworCisjaWZkZWYgU1lTVVRJTUVICisgICAgbWFrZXN0cigmKG9w dGxpc3Rbbm9wdGxpc3QrK10pLCJTWVNVVElNRUgiKTsKKyNlbmRpZiAvKiBTWVNVVElNRUggKi8K KworI2lmZGVmIENLX05FRURfU0lHCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10p LCJDS19ORUVEX1NJRyIpOworI2VuZGlmIC8qIENLX05FRURfU0lHICovCisKKyNpZmRlZiBDS19U VFlGRAorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiQ0tfVFRZRkQiKTsKKyNl bmRpZiAvKiBDS19UVFlGRCAqLworCisjaWZkZWYgTkVUQ09OTgorICAgIG1ha2VzdHIoJihvcHRs aXN0W25vcHRsaXN0KytdKSwiTkVUQ09OTiIpOworI2VuZGlmIC8qIE5FVENPTk4gKi8KKworI2lm ZGVmIFRDUFNPQ0tFVAorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiVENQU09D S0VUIik7CisjaWZkZWYgTk9UQ1BPUFRTCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3Qr K10pLCJOT1RDUE9QVFMiKTsKKyNlbmRpZiAvKiBOT1RDUE9QVFMgKi8KKyNpZmRlZiBDS19ETlNf U1JWCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJDS19ETlNfU1JWIik7Cisj ZW5kaWYgLyogQ0tfRE5TX1NSViAqLworI2lmZGVmIE5PX0ROU19TUlYKKyAgICBtYWtlc3RyKCYo b3B0bGlzdFtub3B0bGlzdCsrXSksIk5PX0ROU19TUlYiKTsKKyNlbmRpZiAvKiBOT19ETlNfU1JW ICovCisjaWZkZWYgQ0tHSE5MSE9TVAorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0Kytd KSwiQ0tHSE5MSE9TVCIpOworI2VuZGlmIC8qIENLR0hOTEhPU1QgKi8KKyNpZmRlZiBOT0xJU1RF TgorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiTk9MSVNURU4iKTsKKyNlbmRp ZiAvKiBOT0xJU1RFTiAqLworI2lmZGVmIFNPTF9TT0NLRVQKKyAgICBtYWtlc3RyKCYob3B0bGlz dFtub3B0bGlzdCsrXSksIlNPTF9TT0NLRVQiKTsKKyNlbmRpZiAvKiBTT0xfU09DS0VUICovCisj aWZkZWYgU09fT09CSU5MSU5FCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJT T19PT0JJTkxJTkUiKTsKKyNlbmRpZiAvKiBTT19PT0JJTkxORSAqLworI2lmZGVmIFNPX0RPTlRS T1VURQorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiU09fRE9OVFJPVVRFIik7 CisjZW5kaWYgLyogU09fRE9OVFJPVVRFICovCisjaWZkZWYgU09fS0VFUEFMSVZFCisgICAgbWFr ZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJTT19LRUVQQUxJVkUiKTsKKyNlbmRpZiAvKiBT T19LRUVQQUxJVkUgKi8KKyNpZmRlZiBTT19MSU5HRVIKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtu b3B0bGlzdCsrXSksIlNPX0xJTkdFUiIpOworI2VuZGlmIC8qIFNPX0xJTkdFUiAqLworI2lmZGVm IFRDUF9OT0RFTEFZCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJUQ1BfTk9E RUxBWSIpOworI2VuZGlmIC8qIFRDUF9OT0RFTEFZICovCisjaWZkZWYgU09fU05EQlVGCisgICAg bWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJTT19TTkRCVUYiKTsKKyNlbmRpZiAvKiBT T19TTkRCVUYgKi8KKyNpZmRlZiBTT19SQ1ZCVUYKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0 bGlzdCsrXSksIlNPX1JDVkJVRiIpOworI2VuZGlmIC8qIFNPX1JDVkJVRiAqLworI2lmZGVmIGhf YWRkcgorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiaF9hZGRyIik7CisjZW5k aWYgLyogaF9hZGRyICovCisjaWZkZWYgSEFERFJMSVNUCisgICAgbWFrZXN0cigmKG9wdGxpc3Rb bm9wdGxpc3QrK10pLCJIQUREUkxJU1QiKTsKKyNlbmRpZiAvKiBIQUREUkxJU1QgKi8KKyNpZmRl ZiBDS19TT0NLUworICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiQ0tfU09DS1Mi KTsKKyNpZmRlZiBDS19TT0NLUzUKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSks IkNLX1NPQ0tTNSIpOworI2VuZGlmIC8qIENLX1NPQ0tTNSAqLworI2lmZGVmIENLX1NPQ0tTX05T CisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJDS19TT0NLU19OUyIpOworI2Vu ZGlmIC8qIENLX1NPQ0tTX05TICovCisjZW5kaWYgLyogQ0tfU09DS1MgKi8KKyNpZmRlZiBSTE9H Q09ERQorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiUkxPR0NPREUiKTsKKyNl bmRpZiAvKiBSTE9HQ09ERSAqLworI2lmZGVmIE5FVENNRAorICAgIG1ha2VzdHIoJihvcHRsaXN0 W25vcHRsaXN0KytdKSwiTkVUQ01EIik7CisjZW5kaWYgLyogTkVUQ01EICovCisjaWZkZWYgTk9O RVRDTUQKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIk5PTkVUQ01EIik7Cisj ZW5kaWYgLyogTk9ORVRDTUQgKi8KKyNpZmRlZiBORVRQVFkKKyAgICBtYWtlc3RyKCYob3B0bGlz dFtub3B0bGlzdCsrXSksIk5FVFBUWSIpOworI2VuZGlmIC8qIE5FVFBUWSAqLworI2lmZGVmIENL X0VOVklST05NRU5UCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJDS19FTlZJ Uk9OTUVOVCIpOworI2VuZGlmIC8qIENLX0VOVklST05NRU5UICovCisjZW5kaWYgLyogVENQU09D S0VUICovCisjaWZkZWYgVE5DT0RFCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10p LCJUTkNPREUiKTsKKyNlbmRpZiAvKiBUTkNPREUgKi8KKyNpZmRlZiBDS19GT1JXQVJEX1gKKyAg ICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkNLX0ZPUldBUkRfWCIpOworI2VuZGlm IC8qIENLX0ZPUldBUkRfWCAqLworI2lmZGVmIFROX0NPTVBPUlQKKyAgICBtYWtlc3RyKCYob3B0 bGlzdFtub3B0bGlzdCsrXSksIlROX0NPTVBPUlQiKTsKKyNlbmRpZiAvKiBUTl9DT01QT1JUICov CisjaWZkZWYgTVVMVElORVQKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIk1V TFRJTkVUIik7CisjZW5kaWYgLyogTVVMVElORVQgKi8KKyNpZmRlZiBERUNfVENQSVAKKyAgICBt YWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkRFQ19UQ1BJUCIpOworI2VuZGlmIC8qIERF Q19UQ1BJUCAqLworI2lmZGVmIFRDUFdBUkUKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlz dCsrXSksIlRDUFdBUkUiKTsKKyNlbmRpZiAvKiBUQ1BXQVJFICovCisjaWZkZWYgVUNYNTAKKyAg ICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIlVDWDUwIik7CisjZW5kaWYgLyogVUNY NTAgKi8KKyNpZmRlZiBDTVVfVENQSVAKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsr XSksIkNNVV9UQ1BJUCIpOworI2VuZGlmIC8qIENNVV9UQ1BJUCAqLworI2lmZGVmIFRUTEVCVUYK KyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIlRUTEVCVUYiKTsKKyNlbmRpZiAv KiBUVExFQlVGICovCisjaWZkZWYgTkVUTEVCVUYKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0 bGlzdCsrXSksIk5FVExFQlVGIik7CisjZW5kaWYgLyogTkVUTEVCVUYgKi8KKyNpZmRlZiBJS1Nf T1BUSU9OCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJJS1NfT1BUSU9OIik7 CisjZW5kaWYgLyogSUtTX09QVElPTiAqLworI2lmZGVmIElLU0RCCisgICAgbWFrZXN0cigmKG9w dGxpc3Rbbm9wdGxpc3QrK10pLCJJS1NEQiIpOworI2VuZGlmIC8qIElLU0RCICovCisjaWZkZWYg SUtTRENPTkYKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIklLU0RDT05GIik7 CisjZW5kaWYgLyogSUtTRENPTkYgKi8KKyNpZmRlZiBDS19MT0dJTgorICAgIG1ha2VzdHIoJihv cHRsaXN0W25vcHRsaXN0KytdKSwiQ0tfTE9HSU4iKTsKKyNlbmRpZiAvKiBDS19MT0dJTiAqLwor I2lmZGVmIENLX1BBTQorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiQ0tfUEFN Iik7CisjZW5kaWYgLyogQ0tfUEFNICovCisjaWZkZWYgQ0tfU0hBRE9XCisgICAgbWFrZXN0cigm KG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJDS19TSEFET1ciKTsKKyNlbmRpZiAvKiBDS19TSEFET1cg Ki8KKyNpZmRlZiBDT05HU1BECisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJD T05HU1BEIik7CisjZW5kaWYgLyogQ09OR1NQRCAqLworI2lmZGVmIFNVTlgyNQorICAgIG1ha2Vz dHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiU1VOWDI1Iik7CisjZW5kaWYgLyogU1VOWDI1ICov CisjaWZkZWYgSUJNWDI1CisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJJQk1Y MjUiKTsKKyNlbmRpZiAvKiBJQk1YMjUgKi8KKyNpZmRlZiBIUFgyNQorICAgIG1ha2VzdHIoJihv cHRsaXN0W25vcHRsaXN0KytdKSwiSFBYMjUiKTsKKyNlbmRpZiAvKiBIUFgyNSAqLworI2lmZGVm IERFQ05FVAorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiREVDTkVUIik7Cisj ZW5kaWYgLyogREVDTkVUICovCisjaWZkZWYgU1VQRVJMQVQKKyAgICBtYWtlc3RyKCYob3B0bGlz dFtub3B0bGlzdCsrXSksIlNVUEVSTEFUIik7CisjZW5kaWYgLyogU1VQRVJMQVQgKi8KKyNpZmRl ZiBOUElQRQorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiTlBJUEUiKTsKKyNl bmRpZiAvKiBOUElQRSAqLworI2lmZGVmIENLX05FVEJJT1MKKyAgICBtYWtlc3RyKCYob3B0bGlz dFtub3B0bGlzdCsrXSksIkNLX05FVEJJT1MiKTsKKyNlbmRpZiAvKiBDS19ORVRCSU9TICovCisj aWZkZWYgQVRUNzMwMAorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiQVRUNzMw MCIpOworI2VuZGlmIC8qIEFUVDczMDAgKi8KKyNpZmRlZiBBVFQ2MzAwCisgICAgbWFrZXN0cigm KG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJBVFQ2MzAwIik7CisjZW5kaWYgLyogQVRUNjMwMCAqLwor I2lmZGVmIEhEQlVVQ1AKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkhEQlVV Q1AiKTsKKyNlbmRpZiAvKiBIREJVVUNQICovCisjaWZkZWYgVVNFVFRZTE9DSworICAgIG1ha2Vz dHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiVVNFVFRZTE9DSyIpOworI2VuZGlmIC8qIFVTRVRU WUxPQ0sgKi8KKyNpZmRlZiBVU0VfVVVfTE9DSworICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRs aXN0KytdKSwiVVNFX1VVX0xPQ0siKTsKKyNlbmRpZiAvKiBVU0VfVVVfTE9DSyAqLworI2lmZGVm IEhBVkVfTE9DS0RFVgorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiSEFWRV9M T0NLREVWIik7CisjZW5kaWYgLyogSEFWRV9MT0NLREVWICovCisjaWZkZWYgSEFWRV9CQVVEQk9Z CisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJIQVZFX0JBVURCT1kiKTsKKyNl bmRpZiAvKiBIQVZFX0JBVURCT1kgKi8KKyNpZmRlZiBIQVZFX09QRU5QVFkKKyAgICBtYWtlc3Ry KCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkhBVkVfT1BFTlBUWSIpOworI2VuZGlmIC8qIEhBVkVf T1BFTlBUWSAqLworI2lmZGVmIFRUUFRZQ01ECisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxp c3QrK10pLCJUVFBUWUNNRCIpOworI2VuZGlmIC8qIFRUUFRZQ01EICovCisjaWZkZWYgTk9VVUNQ CisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJOT1VVQ1AiKTsKKyNlbmRpZiAv KiBOT1VVQ1AgKi8KKyNpZmRlZiBMT05HRk4KKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlz dCsrXSksIkxPTkdGTiIpOworI2VuZGlmIC8qIExPTkdGTiAqLworI2lmZGVmIFJEQ0hLCisgICAg bWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJSRENISyIpOworI2VuZGlmIC8qIFJEQ0hL ICovCisjaWZkZWYgU0VMRUNUCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJT RUxFQ1QiKTsKKyNlbmRpZiAvKiBTRUxFQ1QgKi8KKyNpZmRlZiBVU0xFRVAKKyAgICBtYWtlc3Ry KCYob3B0bGlzdFtub3B0bGlzdCsrXSksIlVTTEVFUCIpOworI2VuZGlmIC8qIFVTTEVFUCAqLwor I2lmZGVmIE5BUAorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiTkFQIik7Cisj ZW5kaWYgLyogTkFQICovCisjaWZkZWYgTkFQSEFDSworICAgIG1ha2VzdHIoJihvcHRsaXN0W25v cHRsaXN0KytdKSwiTkFQSEFDSyIpOworI2VuZGlmIC8qIE5BUEhBQ0sgKi8KKyNpZmRlZiBDS19Q T0xMCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJDS19QT0xMIik7CisjZW5k aWYgLyogQ0tfUE9MTCAqLworI2lmZGVmIE5PSUVYVEVOCisgICAgbWFrZXN0cigmKG9wdGxpc3Rb bm9wdGxpc3QrK10pLCJOT0lFWFRFTiIpOworI2VuZGlmIC8qIE5PSUVYVEVOICovCisjaWZkZWYg RVhDRUxBTgorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiRVhDRUxBTiIpOwor I2VuZGlmIC8qIEVYQ0VMQU4gKi8KKyNpZmRlZiBJTlRFUkxBTgorICAgIG1ha2VzdHIoJihvcHRs aXN0W25vcHRsaXN0KytdKSwiSU5URVJMQU4iKTsKKyNlbmRpZiAvKiBJTlRFUkxBTiAqLworI2lm ZGVmIE5PRklMRUgKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIk5PRklMRUgi KTsKKyNlbmRpZiAvKiBOT0ZJTEVIICovCisjaWZkZWYgTk9TWVNJT0NUTEgKKyAgICBtYWtlc3Ry KCYob3B0bGlzdFtub3B0bGlzdCsrXSksIk5PU1lTSU9DVExIIik7CisjZW5kaWYgLyogTk9TWVNJ T0NUTEggKi8KKyNpZmRlZiBEQ0xQT1BFTgorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0 KytdKSwiRENMUE9QRU4iKTsKKyNlbmRpZiAvKiBEQ0xQT1BFTiAqLworI2lmZGVmIE5PU0VUQlVG CisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJOT1NFVEJVRiIpOworI2VuZGlm IC8qIE5PU0VUQlVGICovCisjaWZkZWYgTk9YRkVSCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9w dGxpc3QrK10pLCJOT1hGRVIiKTsKKyNlbmRpZiAvKiBOT1hGRVIgKi8KKyNpZmRlZiBOT0NVUlNF UworICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiTk9DVVJTRVMiKTsKKyNlbmRp ZiAvKiBOT0NVUlNFUyAqLworI2lmZGVmIE5PU0VSVkVSCisgICAgbWFrZXN0cigmKG9wdGxpc3Rb bm9wdGxpc3QrK10pLCJOT1NFUlZFUiIpOworI2VuZGlmIC8qIE5PU0VSVkVSICovCisjaWZkZWYg Tk9QQVRURVJOUworICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiTk9QQVRURVJO UyIpOworI2Vsc2UKKyNpZmRlZiBQQVRURVJOUworICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRs aXN0KytdKSwiUEFUVEVSTlMiKTsKKyNlbmRpZiAvKiBQQVRURVJOUyAqLworI2VuZGlmIC8qIE5P UEFUVEVSTlMgKi8KKyNpZmRlZiBOT0NLRVhFQworICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRs aXN0KytdKSwiTk9DS0VYRUMiKTsKKyNlbHNlCisjaWZkZWYgQ0tFWEVDCisgICAgbWFrZXN0cigm KG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJDS0VYRUMiKTsKKyNlbmRpZiAvKiBDS0VYRUMgKi8KKyNl bmRpZiAvKiBOT0NLRVhFQyAqLworI2lmZGVmIE5PQVVUT0RMCisgICAgbWFrZXN0cigmKG9wdGxp c3Rbbm9wdGxpc3QrK10pLCJOT0FVVE9ETCIpOworI2VuZGlmIC8qIE5PQVVUT0RMICovCisjaWZk ZWYgTk9NU0VORAorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiTk9NU0VORCIp OworI2VuZGlmIC8qIE5PTVNFTkQgKi8KKyNpZmRlZiBOT0ZEWkVSTworICAgIG1ha2VzdHIoJihv cHRsaXN0W25vcHRsaXN0KytdKSwiTk9GRFpFUk8iKTsKKyNlbmRpZiAvKiBOT0ZEWkVSTyAqLwor I2lmZGVmIE5PUE9QRU4KKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIk5PUE9Q RU4iKTsKKyNlbmRpZiAvKiBOT1BPUEVOICovCisjaWZkZWYgTk9QQVJUSUFMCisgICAgbWFrZXN0 cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJOT1BBUlRJQUwiKTsKKyNlbmRpZiAvKiBOT1BBUlRJ QUwgKi8KKyNpZmRlZiBOT0tWRVJCUworICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0Kytd KSwiTk9LVkVSQlMiKTsKKyNlbmRpZiAvKiBOT0tWRVJCUyAqLworI2lmZGVmIE5PU0VUUkVVCisg ICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJOT1NFVFJFVSIpOworI2VuZGlmIC8q IE5PU0VUUkVVICovCisjaWZkZWYgTENLRElSCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxp c3QrK10pLCJMQ0tESVIiKTsKKyNlbmRpZiAvKiBMQ0tESVIgKi8KKyNpZmRlZiBBQ1VDTlRSTAor ICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiQUNVQ05UUkwiKTsKKyNlbmRpZiAv KiBBQ1VDTlRSTCAqLworI2lmZGVmIEJTRDQKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlz dCsrXSksIkJTRDQiKTsKKyNlbmRpZiAvKiBCU0Q0ICovCisjaWZkZWYgQlNENDQKKyAgICBtYWtl c3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkJTRDQ0Iik7CisjZW5kaWYgLyogQlNENDQgKi8K KyNpZmRlZiBCU0Q0MQorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiQlNENDEi KTsKKyNlbmRpZiAvKiBCU0Q0MSAqLworI2lmZGVmIEJTRDQzCisgICAgbWFrZXN0cigmKG9wdGxp c3Rbbm9wdGxpc3QrK10pLCJCU0Q0MyIpOworI2VuZGlmIC8qIEJTRDQzICovCisjaWZkZWYgQlNE MjkKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkJTRDI5Iik7CisjZW5kaWYg LyogQlNEMjkgKi8KKyNpZmRlZiBCU0RJCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3Qr K10pLCJCU0RJIik7CisjZW5kaWYgLyogQlNESSAqLworI2lmZGVmIF9fYnNkaV9fCisgICAgbWFr ZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJfX2JzZGlfXyIpOworI2VuZGlmIC8qIF9fYnNk aV9fICovCisjaWZkZWYgX19OZXRCU0RfXworICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0 KytdKSwiX19OZXRCU0RfXyIpOworI2VuZGlmIC8qIF9fTmV0QlNEX18gKi8KKyNpZmRlZiBfX09w ZW5CU0RfXworICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiX19PcGVuQlNEX18i KTsKKyNlbmRpZiAvKiBfX09wZW5CU0RfXyAqLworI2lmZGVmIF9fRnJlZUJTRF9fCisgICAgbWFr ZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJfX0ZyZWVCU0RfXyIpOworI2VuZGlmIC8qIF9f RnJlZUJTRF9fICovCisjaWZkZWYgRlJFRUJTRDQKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0 bGlzdCsrXSksIkZSRUVCU0Q0Iik7CisjZW5kaWYgLyogRlJFRUJTRDQgKi8KKyNpZmRlZiBGUkVF QlNEOAorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiRlJFRUJTRDgiKTsKKyNl bmRpZiAvKiBGUkVFQlNEOCAqLworI2lmZGVmIEZSRUVCU0Q5CisgICAgbWFrZXN0cigmKG9wdGxp c3Rbbm9wdGxpc3QrK10pLCJGUkVFQlNEOSIpOworI2VuZGlmIC8qIEZSRUVCU0Q5ICovCisjaWZk ZWYgX19saW51eF9fCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJfX2xpbnV4 X18iKTsKKyNlbmRpZiAvKiBfX2xpbnV4X18gKi8KKyNpZmRlZiBMSU5VWF9ISV9TUEQKKyAgICBt YWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkxJTlVYX0hJX1NQRCIpOworI2VuZGlmIC8q IExJTlVYX0hJX1NQRCAqLworI2lmZGVmIExZTlhPUworICAgIG1ha2VzdHIoJihvcHRsaXN0W25v cHRsaXN0KytdKSwiTFlOWE9TIik7CisjZW5kaWYgLyogTFlOWE9TICovCisjaWZkZWYgVjcKKyAg ICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIlY3Iik7CisjZW5kaWYgLyogVjcgKi8K KyNpZmRlZiBBSVgzNzAKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkFJWDM3 MCIpOworI2VuZGlmIC8qIEFJWDM3MCAqLworI2lmZGVmIFJUQUlYCisgICAgbWFrZXN0cigmKG9w dGxpc3Rbbm9wdGxpc3QrK10pLCJSVEFJWCIpOworI2VuZGlmIC8qIFJUQUlYICovCisjaWZkZWYg SFBVWAorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiSFBVWCIpOworI2VuZGlm IC8qIEhQVVggKi8KKyNpZmRlZiBIUFVYOQorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0 KytdKSwiSFBVWDkiKTsKKyNlbmRpZiAvKiBIUFVYOSAqLworI2lmZGVmIEhQVVgxMAorICAgIG1h a2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiSFBVWDEwIik7CisjZW5kaWYgLyogSFBVWDEw ICovCisjaWZkZWYgSFBVWDEwMDAKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSks IkhQVVgxMDAwIik7CisjZW5kaWYgLyogSFBVWDEwMDAgKi8KKyNpZmRlZiBIUFVYMTEwMAorICAg IG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiSFBVWDExMDAiKTsKKyNlbmRpZiAvKiBI UFVYMTEwMCAqLworI2lmZGVmIEhQVVhQUkU2NQorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRs aXN0KytdKSwiSFBVWFBSRTY1Iik7CisjZW5kaWYgLyogSFBVWFBSRTY1ICovCisjaWZkZWYgREdV WAorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiREdVWCIpOworI2VuZGlmIC8q IERHVVggKi8KKyNpZmRlZiBER1VYNDMwCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3Qr K10pLCJER1VYNDMwIik7CisjZW5kaWYgLyogREdVWDQzMCAqLworI2lmZGVmIERHVVg1NDAKKyAg ICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkRHVVg1NDAiKTsKKyNlbmRpZiAvKiBE R1VYNTQwICovCisjaWZkZWYgREdVWDU0MworICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0 KytdKSwiREdVWDU0MyIpOworI2VuZGlmIC8qIERHVVg1NDMgKi8KKyNpZmRlZiBER1VYNTQ0MTAK KyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkRHVVg1NDQxMCIpOworI2VuZGlm IC8qIERHVVg1NDQxMCAqLworI2lmZGVmIERHVVg1NDQxMQorICAgIG1ha2VzdHIoJihvcHRsaXN0 W25vcHRsaXN0KytdKSwiREdVWDU0NDExIik7CisjZW5kaWYgLyogREdVWDU0NDExICovCisjaWZk ZWYgc29ueV9uZXdzCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJzb255X25l d3MiKTsKKyNlbmRpZiAvKiBzb255X25ld3MgKi8KKyNpZmRlZiBDSUUKKyAgICBtYWtlc3RyKCYo b3B0bGlzdFtub3B0bGlzdCsrXSksIkNJRSIpOworI2VuZGlmIC8qIENJRSAqLworI2lmZGVmIFhF TklYCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJYRU5JWCIpOworI2VuZGlm IC8qIFhFTklYICovCisjaWZkZWYgU0NPX1hFTklYCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9w dGxpc3QrK10pLCJTQ09fWEVOSVgiKTsKKyNlbmRpZiAvKiBTQ09fWEVOSVggKi8KKyNpZmRlZiBJ U0lJSQorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiSVNJSUkiKTsKKyNlbmRp ZiAvKiBJU0lJSSAqLworI2lmZGVmIEkzODZJWAorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRs aXN0KytdKSwiSTM4NklYIik7CisjZW5kaWYgLyogSTM4NklYICovCisjaWZkZWYgUlRVCisgICAg bWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJSVFUiKTsKKyNlbmRpZiAvKiBSVFUgKi8K KyNpZmRlZiBQUk9WWDEKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIlBST1ZY MSIpOworI2VuZGlmIC8qIFBST1ZYMSAqLworI2lmZGVmIFBZUkFNSUQKKyAgICBtYWtlc3RyKCYo b3B0bGlzdFtub3B0bGlzdCsrXSksIlBZUkFNSUQiKTsKKyNlbmRpZiAvKiBQWVJBTUlEICovCisj aWZkZWYgVE9XRVIxCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJUT1dFUjEi KTsKKyNlbmRpZiAvKiBUT1dFUjEgKi8KKyNpZmRlZiBVVEVLCisgICAgbWFrZXN0cigmKG9wdGxp c3Rbbm9wdGxpc3QrK10pLCJVVEVLIik7CisjZW5kaWYgLyogVVRFSyAqLworI2lmZGVmIFpJTE9H CisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJaSUxPRyIpOworI2VuZGlmIC8q IFpJTE9HICovCisjaWZkZWYgVFJTMTYKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsr XSksIlRSUzE2Iik7CisjZW5kaWYgLyogVFJTMTYgKi8KKyNpZmRlZiBNSU5JWAorICAgIG1ha2Vz dHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiTUlOSVgiKTsKKyNlbmRpZiAvKiBNSU5JWCAqLwor I2lmZGVmIE1JTklYMgorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiTUlOSVgy Iik7CisjZW5kaWYgLyogTUlOSVgyICovCisjaWZkZWYgTUlOSVgzCisgICAgbWFrZXN0cigmKG9w dGxpc3Rbbm9wdGxpc3QrK10pLCJNSU5JWDMiKTsKKyNlbmRpZiAvKiBNSU5JWDMgKi8KKyNpZmRl ZiBNSU5JWDMxNQorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiTUlOSVgzMTUi KTsKKyNlbmRpZiAvKiBNSU5JWDMxNSAqLworI2lmZGVmIEM3MAorICAgIG1ha2VzdHIoJihvcHRs aXN0W25vcHRsaXN0KytdKSwiQzcwIik7CisjZW5kaWYgLyogQzcwICovCisjaWZkZWYgQUlYUFMy CisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJBSVhQUzIiKTsKKyNlbmRpZiAv KiBBSVhQUzIgKi8KKyNpZmRlZiBBSVhSUworICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0 KytdKSwiQUlYUlMiKTsKKyNlbmRpZiAvKiBBSVhSUyAqLworI2lmZGVmIFVUU1YKKyAgICBtYWtl c3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIlVUU1YiKTsKKyNlbmRpZiAvKiBVVFNWICovCisj aWZkZWYgQVRUU1YKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkFUVFNWIik7 CisjZW5kaWYgLyogQVRUU1YgKi8KKyNpZmRlZiBTVlIzCisgICAgbWFrZXN0cigmKG9wdGxpc3Rb bm9wdGxpc3QrK10pLCJTVlIzIik7CisjZW5kaWYgLyogU1ZSMyAqLworI2lmZGVmIFNWUjQKKyAg ICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIlNWUjQiKTsKKyNlbmRpZiAvKiBTVlI0 ICovCisjaWZkZWYgREVMTF9TVlI0CisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10p LCJERUxMX1NWUjQiKTsKKyNlbmRpZiAvKiBERUxMX1NWUjQgKi8KKyNpZmRlZiBJQ0xfU1ZSNAor ICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiSUNMX1NWUjQiKTsKKyNlbmRpZiAv KiBJQ0xfU1ZSNCAqLworI2lmZGVmIE9TRgorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0 KytdKSwiT1NGIik7CisjZW5kaWYgLyogT1NGICovCisjaWZkZWYgT1NGMQorICAgIG1ha2VzdHIo JihvcHRsaXN0W25vcHRsaXN0KytdKSwiT1NGMSIpOworI2VuZGlmIC8qIE9TRjEgKi8KKyNpZmRl ZiBfX09TRgorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiX19PU0YiKTsKKyNl bmRpZiAvKiBfX09TRiAqLworI2lmZGVmIF9fT1NGX18KKyAgICBtYWtlc3RyKCYob3B0bGlzdFtu b3B0bGlzdCsrXSksIl9fT1NGX18iKTsKKyNlbmRpZiAvKiBfX09TRl9fICovCisjaWZkZWYgX19v c2ZfXworICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiX19vc2ZfXyIpOworI2Vu ZGlmIC8qIF9fb3NmX18gKi8KKyNpZmRlZiBfX09TRjEKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtu b3B0bGlzdCsrXSksIl9fT1NGMSIpOworI2VuZGlmIC8qIF9fT1NGMSAqLworI2lmZGVmIF9fT1NG MV9fCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJfX09TRjFfXyIpOworI2Vu ZGlmIC8qIF9fT1NGMV9fICovCisjaWZkZWYgUFRYCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9w dGxpc3QrK10pLCJQVFgiKTsKKyNlbmRpZiAvKiBQVFggKi8KKyNpZmRlZiBQT1NJWAorICAgIG1h a2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiUE9TSVgiKTsKKyNlbmRpZiAvKiBQT1NJWCAq LworI2lmZGVmIEJTRDQ0T1JQT1NJWAorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0Kytd KSwiQlNENDRPUlBPU0lYIik7CisjZW5kaWYgLyogQlNENDRPUlBPU0lYICovCisjaWZkZWYgU1ZP UlBPU0lYCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJTVk9SUE9TSVgiKTsK KyNlbmRpZiAvKiBTVk9SUE9TSVggKi8KKyNpZmRlZiBTVlI0T1JQT1NJWAorICAgIG1ha2VzdHIo JihvcHRsaXN0W25vcHRsaXN0KytdKSwiU1ZSNE9SUE9TSVgiKTsKKyNlbmRpZiAvKiBTVlI0T1JQ T1NJWCAqLworI2lmZGVmIE9TMk9SVk1TCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3Qr K10pLCJPUzJPUlZNUyIpOworI2VuZGlmIC8qIE9TMk9SVk1TICovCisjaWZkZWYgT1MyT1JVTklY CisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJPUzJPUlVOSVgiKTsKKyNlbmRp ZiAvKiBPUzJPUlVOSVggKi8KKyNpZmRlZiBWTVNPUlVOSVgKKyAgICBtYWtlc3RyKCYob3B0bGlz dFtub3B0bGlzdCsrXSksIlZNU09SVU5JWCIpOworI2VuZGlmIC8qIFZNU09SVU5JWCAqLworI2lm ZGVmIFZNUzY0QklUCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJWTVM2NEJJ VCIpOwkvKiBWTVMgb24gQWxwaGEgb3IgSUE2NCAqLworI2VuZGlmIC8qIFZNUzY0QklUICovCisj aWZkZWYgVk1TSTY0CisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJWTVNJNjQi KTsgLyogVk1TIG9uIElBNjQgKi8KKyNlbmRpZiAvKiBWTVNJNjQgKi8KKyNpZmRlZiBfUE9TSVhf U09VUkNFCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJfUE9TSVhfU09VUkNF Iik7CisjZW5kaWYgLyogX1BPU0lYX1NPVVJDRSAqLworI2lmZGVmIF9YT1BFTl9TT1VSQ0UKKyAg ICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIl9YT1BFTl9TT1VSQ0UiKTsKKyNlbmRp ZgorI2lmZGVmIF9BTExfU09VUkNFCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10p LCJfQUxMX1NPVVJDRSIpOworI2VuZGlmCisjaWZkZWYgX1NWSUQzCisgICAgbWFrZXN0cigmKG9w dGxpc3Rbbm9wdGxpc3QrK10pLCJfU1ZJRDMiKTsKKyNlbmRpZiAvKiBfU1ZJRDMgKi8KKyNpZmRl ZiBQbGFuOQorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiUGxhbjkiKTsKKyNl bmRpZiAvKiBQbGFuOSAqLworI2lmZGVmIFNPTEFSSVMKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtu b3B0bGlzdCsrXSksIlNPTEFSSVMiKTsKKyNpZmRlZiBTT0xBUklTMjQKKyAgICBtYWtlc3RyKCYo b3B0bGlzdFtub3B0bGlzdCsrXSksIlNPTEFSSVMyNCIpOworI2VuZGlmIC8qIFNPTEFSSVMyNCAq LworI2lmZGVmIFNPTEFSSVMyNQorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwi U09MQVJJUzI1Iik7CisjZW5kaWYgLyogU09MQVJJUzI1ICovCisjaWZkZWYgU09MQVJJUzI2Cisg ICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJTT0xBUklTMjYiKTsKKyNlbmRpZiAv KiBTT0xBUklTMjYgKi8KKyNpZmRlZiBTT0xBUklTNworICAgIG1ha2VzdHIoJihvcHRsaXN0W25v cHRsaXN0KytdKSwiU09MQVJJUzciKTsKKyNlbmRpZiAvKiBTT0xBUklTNyAqLworI2lmZGVmIFNP TEFSSVM4CisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJTT0xBUklTOCIpOwor I2VuZGlmIC8qIFNPTEFSSVM4ICovCisjaWZkZWYgU09MQVJJUzkKKyAgICBtYWtlc3RyKCYob3B0 bGlzdFtub3B0bGlzdCsrXSksIlNPTEFSSVM5Iik7CisjZW5kaWYgLyogU09MQVJJUzkgKi8KKyNp ZmRlZiBTT0xBUklTMTAKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIlNPTEFS SVMxMCIpOworI2VuZGlmIC8qIFNPTEFSSVMxMCAqLworI2VuZGlmIC8qIFNPTEFSSVMgKi8KKwor I2lmZGVmIFNVTk9TNAorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiU1VOT1M0 Iik7CisjZW5kaWYgLyogU1VOT1M0ICovCisjaWZkZWYgU1VONFM1CisgICAgbWFrZXN0cigmKG9w dGxpc3Rbbm9wdGxpc3QrK10pLCJTVU40UzUiKTsKKyNlbmRpZiAvKiBTVU40UzUgKi8KKyNpZmRl ZiBJUklYCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJJUklYIik7CisjZW5k aWYgLyogSVJJWCAqLworI2lmZGVmIEVOQ09SRQorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRs aXN0KytdKSwiRU5DT1JFIik7CisjZW5kaWYgLyogRU5DT1JFICovCisjaWZkZWYgdWx0cml4Cisg ICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJ1bHRyaXgiKTsKKyNlbmRpZgorI2lm ZGVmIHN4YUU1MAorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwic3hhRTUwIik7 CisjZW5kaWYKKyNpZmRlZiBtaXBzCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10p LCJtaXBzIik7CisjZW5kaWYKKyNpZmRlZiBNSVBTCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9w dGxpc3QrK10pLCJNSVBTIik7CisjZW5kaWYKKyNpZmRlZiB2YXgKKyAgICBtYWtlc3RyKCYob3B0 bGlzdFtub3B0bGlzdCsrXSksInZheCIpOworI2VuZGlmCisjaWZkZWYgVkFYCisgICAgbWFrZXN0 cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJWQVgiKTsKKyNlbmRpZgorI2lmZGVmIGFscGhhCisg ICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJhbHBoYSIpOworI2VuZGlmCisjaWZk ZWYgQUxQSEEKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkFMUEhBIik7Cisj ZW5kaWYKKyNpZmRlZiBfX0FMUEhBCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10p LCJfX0FMUEhBIik7CisjZW5kaWYKKyNpZmRlZiBfX2FscGhhCisgICAgbWFrZXN0cigmKG9wdGxp c3Rbbm9wdGxpc3QrK10pLCJfX2FscGhhIik7CisjZW5kaWYKKyNpZmRlZiBfX0FYUAorICAgIG1h a2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiX19BWFAiKTsKKyNlbmRpZgorI2lmZGVmIEFY UAorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiQVhQIik7CisjZW5kaWYKKyNp ZmRlZiBheHAKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksImF4cCIpOworI2Vu ZGlmCisjaWZkZWYgX19BTFBIQV9fCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10p LCJfX0FMUEhBX18iKTsKKyNlbmRpZgorI2lmZGVmIF9fYWxwaGFfXworICAgIG1ha2VzdHIoJihv cHRsaXN0W25vcHRsaXN0KytdKSwiX19hbHBoYV9fIik7CisjZW5kaWYKKyNpZmRlZiBzdW4KKyAg ICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksInN1biIpOworI2VuZGlmCisjaWZkZWYg c3VuMworICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwic3VuMyIpOworI2VuZGlm CisjaWZkZWYgc3VuMzg2CisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJzdW4z ODYiKTsKKyNlbmRpZgorI2lmZGVmIF9TVU4KKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlz dCsrXSksIl9TVU4iKTsKKyNlbmRpZgorI2lmZGVmIHN1bjQKKyAgICBtYWtlc3RyKCYob3B0bGlz dFtub3B0bGlzdCsrXSksInN1bjQiKTsKKyNlbmRpZgorI2lmZGVmIHNwYXJjCisgICAgbWFrZXN0 cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJzcGFyYyIpOworI2VuZGlmCisjaWZkZWYgX0NSQVkK KyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIl9DUkFZIik7CisjZW5kaWYgLyog X0NSQVkgKi8KKyNpZmRlZiBORVhUMzMKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsr XSksIk5FWFQzMyIpOworI2VuZGlmCisjaWZkZWYgTkVYVAorICAgIG1ha2VzdHIoJihvcHRsaXN0 W25vcHRsaXN0KytdKSwiTkVYVCIpOworI2VuZGlmCisjaWZkZWYgTmVYVAorICAgIG1ha2VzdHIo JihvcHRsaXN0W25vcHRsaXN0KytdKSwiTmVYVCIpOworI2VuZGlmCisjaWZkZWYgTUFDSAorICAg IG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiTUFDSCIpOworI2VuZGlmCisKKyNpZmRl ZiBNQUNPU1gKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIk1BQ09TWCIpOwor I2VuZGlmCisjaWZkZWYgTUFDT1NYMTAKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsr XSksIk1BQ09TWDEwIik7CisjZW5kaWYKKyNpZmRlZiBNQUNPU1gxMDMKKyAgICBtYWtlc3RyKCYo b3B0bGlzdFtub3B0bGlzdCsrXSksIk1BQ09TWDEwZSIpOworI2VuZGlmCisjaWZkZWYgQ09NTUVO VAorLyogbm90IHVzZWQgKi8KKyNpZmRlZiBNQUNPU1gxMDMKKyAgICBtYWtlc3RyKCYob3B0bGlz dFtub3B0bGlzdCsrXSksIk1BQ09TWDEwMyIpOworI2VuZGlmCisjZW5kaWYJLyogQ09NTUVOVCAq LworCisjaWZkZWYgc2dpCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJzZ2ki KTsKKyNlbmRpZgorI2lmZGVmIE1fU1lTNQorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0 KytdKSwiTV9TWVM1Iik7CisjZW5kaWYKKyNpZmRlZiBfX1NZU1RFTV9GSVZFCisgICAgbWFrZXN0 cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJfX1NZU1RFTV9GSVZFIik7CisjZW5kaWYKKyNpZmRl ZiBzeXNWCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJzeXNWIik7CisjZW5k aWYKKyNpZmRlZiBNX1hFTklYICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTQ08gWGVuaXgg ViBhbmQgVU5JWC8zODYgKi8KKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIk1f WEVOSVgiKTsKKyNlbmRpZgorI2lmZGVmIE1fVU5JWCAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIFNDTyBVTklYICovCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJNX1VO SVgiKTsKKyNlbmRpZgorI2lmZGVmIF9NX1VOSVggICAgICAgICAgICAgICAgICAgICAgICAgIC8q IFNDTyBVTklYIDMuMnY0ID0gT0RUIDIuMCAqLworICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRs aXN0KytdKSwiX01fVU5JWCIpOworI2VuZGlmCisjaWZkZWYgQ0tfU0NPVjUKKyAgICBtYWtlc3Ry KCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkNLX1NDT1Y1Iik7CisjZW5kaWYKKyNpZmRlZiBTQ09f T1NSNTA0CisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJTQ09fT1NSNTA0Iik7 CisjZW5kaWYKKyNpZmRlZiBNX0lBNjQKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsr XSksIk1fSUE2NCIpOworI2VuZGlmCisjaWZkZWYgX01fSUE2NAorICAgIG1ha2VzdHIoJihvcHRs aXN0W25vcHRsaXN0KytdKSwiX01fSUE2NCIpOworI2VuZGlmCisjaWZkZWYgaWE2NAorICAgIG1h a2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiaWE2NCIpOworI2VuZGlmCisjaWZkZWYgX2lh NjQKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIl9pYTY0Iik7CisjZW5kaWYK KyNpZmRlZiBfaWE2NF8KKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIl9pYTY0 XyIpOworI2VuZGlmCisjaWZkZWYgX19pYTY0CisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxp c3QrK10pLCJfX2lhNjQiKTsKKyNlbmRpZgorI2lmZGVmIE1fSTY4NgorICAgIG1ha2VzdHIoJihv cHRsaXN0W25vcHRsaXN0KytdKSwiTV9JNjg2Iik7CisjZW5kaWYKKyNpZmRlZiBfTV9JNjg2Cisg ICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJfTV9JNjg2Iik7CisjZW5kaWYKKyNp ZmRlZiBpNjg2CisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJpNjg2Iik7Cisj ZW5kaWYKKyNpZmRlZiBNX0k1ODYKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSks Ik1fSTU4NiIpOworI2VuZGlmCisjaWZkZWYgX01fSTU4NgorICAgIG1ha2VzdHIoJihvcHRsaXN0 W25vcHRsaXN0KytdKSwiX01fSTU4NiIpOworI2VuZGlmCisjaWZkZWYgaTU4NgorICAgIG1ha2Vz dHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiaTU4NiIpOworI2VuZGlmCisjaWZkZWYgTV9JNDg2 CisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJNX0k0ODYiKTsKKyNlbmRpZgor I2lmZGVmIF9NX0k0ODYKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIl9NX0k0 ODYiKTsKKyNlbmRpZgorI2lmZGVmIGk0ODYKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlz dCsrXSksImk0ODYiKTsKKyNlbmRpZgorI2lmZGVmIE1fSTM4NgorICAgIG1ha2VzdHIoJihvcHRs aXN0W25vcHRsaXN0KytdKSwiTV9JMzg2Iik7CisjZW5kaWYKKyNpZmRlZiBfTV9JMzg2CisgICAg bWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJfTV9JMzg2Iik7CisjZW5kaWYKKyNpZmRl ZiBpMzg2CisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJpMzg2Iik7CisjZW5k aWYKKyNpZmRlZiBfX2kzODYKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIl9f aTM4NiIpOworI2VuZGlmCisjaWZkZWYgX194ODYKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0 bGlzdCsrXSksIl9feDg2Iik7CisjZW5kaWYKKyNpZmRlZiBfX2FtZDY0CisgICAgbWFrZXN0cigm KG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJfX2FtZDY0Iik7CisjZW5kaWYKKyNpZmRlZiBfSUxQMzIK KyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIl9JTFAzMiIpOworI2VuZGlmCisj aWZkZWYgX0lMUDY0CisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJfSUxQNjQi KTsKKyNlbmRpZgorI2lmZGVmIF9MUDMyCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3Qr K10pLCJfTFAzMiIpOworI2VuZGlmCisjaWZkZWYgX0xQNjQKKyAgICBtYWtlc3RyKCYob3B0bGlz dFtub3B0bGlzdCsrXSksIl9MUDY0Iik7CisjZW5kaWYKKyNpZmRlZiBfX0xQMzJfXworICAgIG1h a2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiX19MUDMyX18iKTsKKyNlbmRpZgorI2lmZGVm IF9fTFA2NF9fCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJfX0xQNjRfXyIp OworI2VuZGlmCisjaWZkZWYgX1hHUDRfMgorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0 KytdKSwiX1hHUDRfMiIpOworI2VuZGlmCisjaWZkZWYgX19wcGNfXworICAgIG1ha2VzdHIoJihv cHRsaXN0W25vcHRsaXN0KytdKSwiX19wcGNfXyIpOworI2VuZGlmCisjaWZkZWYgX19wcGMzMl9f CisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJfX3BwYzMyX18iKTsKKyNlbmRp ZgorI2lmZGVmIF9fcHBjNjRfXworICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwi X19wcGM2NF9fIik7CisjZW5kaWYKKyNpZmRlZiBDS182NEJJVAorICAgIG1ha2VzdHIoJihvcHRs aXN0W25vcHRsaXN0KytdKSwiQ0tfNjRCSVQiKTsKKyNlbmRpZgorI2lmZGVmIGkyODYKKyAgICBt YWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksImkyODYiKTsKKyNlbmRpZgorI2lmZGVmIE1f STI4NgorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiTV9JMjg2Iik7CisjZW5k aWYKKyNpZmRlZiBfX3NwYXJjCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJf X3NwYXJjIik7CisjZW5kaWYKKyNpZmRlZiBfX3NwYXJjdjgKKyAgICBtYWtlc3RyKCYob3B0bGlz dFtub3B0bGlzdCsrXSksIl9fc3BhcmN2OCIpOworI2VuZGlmCisjaWZkZWYgX19zcGFyY3Y5Cisg ICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJfX3NwYXJjdjkiKTsKKyNlbmRpZgor I2lmZGVmIG1jNjgwMDAKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIm1jNjgw MDAiKTsKKyNlbmRpZgorI2lmZGVmIG1jNjgwMTAKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0 bGlzdCsrXSksIm1jNjgwMTAiKTsKKyNlbmRpZgorI2lmZGVmIG1jNjgwMjAKKyAgICBtYWtlc3Ry KCYob3B0bGlzdFtub3B0bGlzdCsrXSksIm1jNjgwMjAiKTsKKyNlbmRpZgorI2lmZGVmIG1jNjgw MzAKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIm1jNjgwMzAiKTsKKyNlbmRp ZgorI2lmZGVmIG1jNjgwNDAKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIm1j NjgwNDAiKTsKKyNlbmRpZgorI2lmZGVmIE1fNjgwMDAKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtu b3B0bGlzdCsrXSksIk1fNjgwMDAiKTsKKyNlbmRpZgorI2lmZGVmIE1fNjgwMTAKKyAgICBtYWtl c3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIk1fNjgwMTAiKTsKKyNlbmRpZgorI2lmZGVmIE1f NjgwMjAKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIk1fNjgwMjAiKTsKKyNl bmRpZgorI2lmZGVmIE1fNjgwMzAKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSks Ik1fNjgwMzAiKTsKKyNlbmRpZgorI2lmZGVmIE1fNjgwNDAKKyAgICBtYWtlc3RyKCYob3B0bGlz dFtub3B0bGlzdCsrXSksIk1fNjgwNDAiKTsKKyNlbmRpZgorI2lmZGVmIG02OGsKKyAgICBtYWtl c3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIm02OGsiKTsKKyNlbmRpZgorI2lmZGVmIG04OGsK KyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIm04OGsiKTsKKyNlbmRpZgorI2lm ZGVmIHBkcDExCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJwZHAxMSIpOwor I2VuZGlmCisjaWZkZWYgaUFQWAorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwi aUFQWCIpOworI2VuZGlmCisjaWZkZWYgaHB1eAorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRs aXN0KytdKSwiaHB1eCIpOworI2VuZGlmCisjaWZkZWYgX19ocHV4CisgICAgbWFrZXN0cigmKG9w dGxpc3Rbbm9wdGxpc3QrK10pLCJfX2hwdXgiKTsKKyNlbmRpZgorI2lmZGVmIF9faHA5MDAwczgw MAorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiX19ocDkwMDBzODAwIik7Cisj ZW5kaWYKKyNpZmRlZiBfX2hwOTAwMHM3MDAKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlz dCsrXSksIl9faHA5MDAwczcwMCIpOworI2VuZGlmCisjaWZkZWYgX19ocDkwMDBzNTAwCisgICAg bWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJfX2hwOTAwMHM1MDAiKTsKKyNlbmRpZgor I2lmZGVmIF9faHA5MDAwczMwMAorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwi X19ocDkwMDBzMzAwIik7CisjZW5kaWYKKyNpZmRlZiBfX2hwOTAwMHMyMDAKKyAgICBtYWtlc3Ry KCYob3B0bGlzdFtub3B0bGlzdCsrXSksIl9faHA5MDAwczIwMCIpOworI2VuZGlmCisjaWZkZWYg QUlYCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJBSVgiKTsKKyNlbmRpZgor I2lmZGVmIF9BSVhGUworICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiX0FJWEZT Iik7CisjZW5kaWYKKyNpZmRlZiB1MzcwCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3Qr K10pLCJ1MzcwIik7CisjZW5kaWYKKyNpZmRlZiB1M2IKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtu b3B0bGlzdCsrXSksInUzYiIpOworI2VuZGlmCisjaWZkZWYgdTNiMgorICAgIG1ha2VzdHIoJihv cHRsaXN0W25vcHRsaXN0KytdKSwidTNiMiIpOworI2VuZGlmCisjaWZkZWYgbXVsdGltYXgKKyAg ICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIm11bHRpbWF4Iik7CisjZW5kaWYKKyNp ZmRlZiBiYWxhbmNlCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJiYWxhbmNl Iik7CisjZW5kaWYKKyNpZmRlZiBpYm1ydAorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0 KytdKSwiaWJtcnQiKTsKKyNlbmRpZgorI2lmZGVmIF9JQk1SVAorICAgIG1ha2VzdHIoJihvcHRs aXN0W25vcHRsaXN0KytdKSwiX0lCTVJUIik7CisjZW5kaWYKKyNpZmRlZiBpYm1yczYwMDAKKyAg ICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksImlibXJzNjAwMCIpOworI2VuZGlmCisj aWZkZWYgX0FJWAorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiX0FJWCIpOwor I2VuZGlmIC8qIF9BSVggKi8KKyNpZmRlZiBfSUJNUjIKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtu b3B0bGlzdCsrXSksIl9JQk1SMiIpOworI2VuZGlmCisjaWZkZWYgVU5JWFdBUkUKKyAgICBtYWtl c3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIlVOSVhXQVJFIik7CisjZW5kaWYKKyNpZmRlZiBR TlgKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIlFOWCIpOworI2lmZGVmIF9f UU5YX18KKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIl9fUU5YX18iKTsKKyNp ZmRlZiBfXzE2QklUX18KKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIl9fMTZC SVRfXyIpOworI2VuZGlmCisjaWZkZWYgQ0tfUU5YMTYKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtu b3B0bGlzdCsrXSksIkNLX1FOWDE2Iik7CisjZW5kaWYKKyNpZmRlZiBfXzMyQklUX18KKyAgICBt YWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIl9fMzJCSVRfXyIpOworI2VuZGlmCisjaWZk ZWYgQ0tfUU5YMzIKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkNLX1FOWDMy Iik7CisjZW5kaWYKKyNlbmRpZiAvKiBfX1FOWF9fICovCisjZW5kaWYgLyogUU5YICovCisKKyNp ZmRlZiBRTlg2CisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJRTlg2Iik7Cisj ZW5kaWYgLyogUU5YNiAqLworCisjaWZkZWYgTkVVVFJJTk8KKyAgICBtYWtlc3RyKCYob3B0bGlz dFtub3B0bGlzdCsrXSksIk5FVVRSSU5PIik7CisjZW5kaWYgLyogTkVVVFJJTk8gKi8KKworI2lm ZGVmIF9fU1RSSUNUX0JTRF9fCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJf X1NUUklDVF9CU0RfXyIpOworI2VuZGlmCisjaWZkZWYgX19TVFJJQ1RfQU5TSV9fCisgICAgbWFr ZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJfX1NUUklDVF9BTlNJX18iKTsKKyNlbmRpZgor I2lmZGVmIF9BTlNJX0NfU09VUkNFCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10p LCJfQU5TSV9DX1NPVVJDRSIpOworI2VuZGlmCisjaWZkZWYgX19TVERDX18KKyAgICBtYWtlc3Ry KCYob3B0bGlzdFtub3B0bGlzdCsrXSksIl9fU1REQ19fIik7CisjZW5kaWYKKyNpZmRlZiBjcGx1 c3BsdXMKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksImNwbHVzcGx1cyIpOwor I2VuZGlmCisjaWZkZWYgX19ERUNDCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10p LCJfX0RFQ0MiKTsKKyNpZmRlZiBfX0RFQ0NfVkVSCisgICAgc3ByaW50ZihsaW5lLCJfX0RFQ0Nf VkVSPSVkIixfX0RFQ0NfVkVSKTsgLyogU0FGRSAqLworICAgIG1ha2VzdHIoJihvcHRsaXN0W25v cHRsaXN0KytdKSxsaW5lKTsKKyNlbmRpZiAvKiBfX0RFQ0NfVkVSICovCisjZW5kaWYgLyogX19E RUNDICovCisjaWZkZWYgX19DUlRMX1ZFUgorICAgIHNwcmludGYobGluZSwiX19DUlRMX1ZFUj0l ZCIsX19DUlRMX1ZFUik7IC8qIFNBRkUgKi8KKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlz dCsrXSksbGluZSk7CisjZW5kaWYgLyogX19DUlRMX1ZFUiAqLworI2lmZGVmIF9fR05VQ19fICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIGdjYyBpbiBhbnNpIG1vZGUgKi8KKyAgICBtYWtlc3Ry KCYob3B0bGlzdFtub3B0bGlzdCsrXSksIl9fR05VQ19fIik7CisjZW5kaWYKKyNpZmRlZiBHTlVD ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBnY2MgaW4gdHJhZGl0aW9uYWwgbW9kZSAq LworICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiR05VQyIpOworI2VuZGlmCisj aWZkZWYgX19FR0NTX18gICAgICAgICAgICAgICAgICAgICAgICAgLyogZWdjcyBpbiBhbnNpIG1v ZGUgKi8KKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIl9fRUdDU19fIik7Cisj ZW5kaWYKKyNpZmRlZiBfX2VnY3NfXyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBlZ2NzIGlu IGFuc2kgbW9kZSAqLworICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiX19lZ2Nz X18iKTsKKyNlbmRpZgorI2lmZGVmIF9fV0FUQ09NQ19fCisgICAgbWFrZXN0cigmKG9wdGxpc3Rb bm9wdGxpc3QrK10pLCJfX1dBVENPTUNfXyIpOworI2VuZGlmCisjaWZkZWYgQ0tfQU5TSUMKKyAg ICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkNLX0FOU0lDIik7CisjZW5kaWYKKyNp ZmRlZiBDS19BTlNJTElCUworICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiQ0tf QU5TSUxJQlMiKTsKKyNlbmRpZgorI2lmZGVmIENLQ09OSU5UQjRDQgorICAgIG1ha2VzdHIoJihv cHRsaXN0W25vcHRsaXN0KytdKSwiQ0tDT05JTlRCNENCIik7CisjZW5kaWYgLyogQ0tDT05JTlRC NENCICovCisjaWZkZWYgTk9URVJNQ0FQCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3Qr K10pLCJOT1RFUk1DQVAiKTsKKyNlbmRpZiAvKiBOT1RFUk1DQVAgKi8KKyNpZmRlZiBfX0dMSUJD X18KKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIl9fR0xJQkNfXyIpOworI2Vu ZGlmCisjaWZkZWYgX1NDX0pPQl9DT05UUk9MCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxp c3QrK10pLCJfU0NfSk9CX0NPTlRST0wiKTsKKyNlbmRpZgorI2lmZGVmIF9QT1NJWF9KT0JfQ09O VFJPTAorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiX1BPU0lYX0pPQl9DT05U Uk9MIik7CisjZW5kaWYKKyNpZmRlZiBTSUdfSQorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRs aXN0KytdKSwiU0lHX0kiKTsKKyNlbmRpZiAvKiBTSUdfSSAqLworI2lmZGVmIFNJR19WCisgICAg bWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJTSUdfViIpOworI2VuZGlmIC8qIFNJR19W ICovCisjaWZkZWYgQ0tfUE9TSVhfU0lHCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3Qr K10pLCJDS19QT1NJWF9TSUciKTsKKyNlbmRpZgorI2lmZGVmIFNWUjNKQworICAgIG1ha2VzdHIo JihvcHRsaXN0W25vcHRsaXN0KytdKSwiU1ZSM0pDIik7CisjZW5kaWYKKyNpZmRlZiBfMzg2QlNE CisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJfMzg2QlNEIik7CisjZW5kaWYK KyNpZmRlZiBfQlNECisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJfQlNEIik7 CisjZW5kaWYKKyNpZmRlZiBVU0VfTUVNQ1BZCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxp c3QrK10pLCJVU0VfTUVNQ1BZIik7CisjZW5kaWYgLyogVVNFX01FTUNQWSAqLworI2lmZGVmIFVT RV9MU1RBVAorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiVVNFX0xTVEFUIik7 CisjZW5kaWYgLyogVVNFX0xTVEFUICovCisjaWZkZWYgVEVSTUlPWAorICAgIG1ha2VzdHIoJihv cHRsaXN0W25vcHRsaXN0KytdKSwiVEVSTUlPWCIpOworI2VuZGlmIC8qIFRFUk1JT1ggKi8KKyNp ZmRlZiBTVEVSTUlPWAorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiU1RFUk1J T1giKTsKKyNlbmRpZiAvKiBTVEVSTUlPWCAqLworI2lmZGVmIENLX0NVUlNFUworICAgIG1ha2Vz dHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiQ0tfQ1VSU0VTIik7CisjZW5kaWYgLyogQ0tfQ1VS U0VTICovCisjaWZkZWYgQ0tfTkVXVEVSTQorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0 KytdKSwiQ0tfTkVXVEVSTSIpOworI2VuZGlmIC8qIENLX05FV1RFUk0gKi8KKyNpZmRlZiBDS19X UkVGUkVTSAorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiQ0tfV1JFRlJFU0gi KTsKKyNlbmRpZiAvKiBDS19XUkVGUkVTSCAqLworI2lmZGVmIENLX1BDVF9CQVIKKyAgICBtYWtl c3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkNLX1BDVF9CQVIiKTsKKyNlbmRpZiAvKiBDS19Q Q1RfQkFSICovCisjaWZkZWYgQ0tfRFRSQ0QKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlz dCsrXSksIkNLX0RUUkNEIik7CisjZW5kaWYgLyogQ0tfRFRSQ0QgKi8KKyNpZmRlZiBDS19EVFJD VFMKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkNLX0RUUkNUUyIpOworI2Vu ZGlmIC8qIENLX0RUUkNUUyAqLworI2lmZGVmIENLX1JUU0NUUworICAgIG1ha2VzdHIoJihvcHRs aXN0W25vcHRsaXN0KytdKSwiQ0tfUlRTQ1RTIik7CisjZW5kaWYgLyogQ0tfUlRTQ1RTICovCisj aWZkZWYgUE9TSVhfQ1JUU0NUUworICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwi UE9TSVhfQ1JUU0NUUyIpOworI2VuZGlmIC8qIFBPU0lYX0NSVFNDVFMgKi8KKyNpZmRlZiBGSVhD UlRTQ1RTCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJGSVhDUlRTQ1RTIik7 CisjZW5kaWYgLyogRklYQ1JUU0NUUyAqLworI2lmZGVmIEhXUEFSSVRZCisgICAgbWFrZXN0cigm KG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJIV1BBUklUWSIpOworI2VuZGlmIC8qIEhXUEFSSVRZICov CisjaWZkZWYgQ0tfU1lTSU5JCisjaWZkZWYgQ0tfSU5JX0EKKyAgICBtYWtlc3RyKCYob3B0bGlz dFtub3B0bGlzdCsrXSksIkNLX0lOSV9BIik7CisgICAgY2ttYWttc2cobGluZSxMSU5CVUZTSVos IkNLX1NZU0lOST1cIiIsQ0tfU1lTSU5JLCJcIiIsTlVMTCk7CisgICAgbWFrZXN0cigmKG9wdGxp c3Rbbm9wdGxpc3QrK10pLGxpbmUpOworI2Vsc2UKKyNpZmRlZiBDS19JTklfQgorICAgIG1ha2Vz dHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiQ0tfSU5JX0IiKTsKKyAgICBja21ha21zZyhsaW5l LExJTkJVRlNJWiwiQ0tfU1lTSU5JPVwiIixDS19TWVNJTkksIlwiIixOVUxMKTsKKyAgICBtYWtl c3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksbGluZSk7CisjZWxzZQorICAgIG1ha2VzdHIoJihv cHRsaXN0W25vcHRsaXN0KytdKSwiQ0tfU1lTSU5JIik7CisjZW5kaWYgLyogQ0tfSU5JX0IgKi8K KyNlbmRpZiAvKiBDS19JTklfQSAqLworI2VuZGlmIC8qIENLX0RTWVNJTkkgKi8KKyNpZmRlZiBD S19EU1lTSU5JCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJDS19EU1lTSU5J Iik7CisjZW5kaWYgLyogQ0tfRFNZU0lOSSAqLworI2lmZGVmIENLX1RUR1dTSVoKKyAgICBtYWtl c3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkNLX1RUR1dTSVoiKTsKKyNlbmRpZiAvKiBDS19U VEdXU0laICovCisjaWZkZWYgQ0tfTkFXUworICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0 KytdKSwiQ0tfTkFXUyIpOworI2VuZGlmIC8qIENLX05BV1MgKi8KKyNpZmRlZiBNRE1IVVAKKyAg ICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIk1ETUhVUCIpOworI2VuZGlmIC8qIE1E TUhVUCAqLworI2lmZGVmIEhVUF9DTE9TRV9QT1NJWAorICAgIG1ha2VzdHIoJihvcHRsaXN0W25v cHRsaXN0KytdKSwiSFVQX0NMT1NFX1BPU0lYIik7CisjZW5kaWYgLyogSFVQX0NMT1NFX1BPU0lY ICovCisjaWZkZWYgTk9fSFVQX0NMT1NFX1BPU0lYCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9w dGxpc3QrK10pLCJOT19IVVBfQ0xPU0VfUE9TSVgiKTsKKyNlbmRpZiAvKiBOT19IVVBfQ0xPU0Vf UE9TSVggKi8KKyNpZmRlZiBEQ01EQlVGCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3Qr K10pLCJEQ01EQlVGIik7CisjZW5kaWYgLyogRENNREJVRiAqLworI2lmZGVmIENLX1JFQ0FMTAor ICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiQ0tfUkVDQUxMIik7CisjZW5kaWYg LyogQ0tfUkVDQUxMICovCisjaWZkZWYgQlJPV1NFUgorICAgIG1ha2VzdHIoJihvcHRsaXN0W25v cHRsaXN0KytdKSwiQlJPV1NFUiIpOworI2VuZGlmIC8qIEJST1dTRVIgKi8KKyNpZmRlZiBDTFNP UE4KKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkNMU09QTiIpOworI2VuZGlm IC8qIENMU09QTiAqLworI2lmZGVmIFNUUkFUVVMKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0 bGlzdCsrXSksIlNUUkFUVVMiKTsKKyNlbmRpZiAvKiBTVFJBVFVTICovCisjaWZkZWYgX19WT1Nf XworICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiX19WT1NfXyIpOworI2VuZGlm IC8qIF9fVk9TX18gKi8KKyNpZmRlZiBTVFJBVFVTWDI1CisgICAgbWFrZXN0cigmKG9wdGxpc3Rb bm9wdGxpc3QrK10pLCJTVFJBVFVTWDI1Iik7CisjZW5kaWYgLyogU1RSQVRVU1gyNSAqLworI2lm ZGVmIE9TMk1PVVNFCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJPUzJNT1VT RSIpOworI2VuZGlmIC8qIE9TMk1PVVNFICovCisjaWZkZWYgQ0tfUkVYWAorICAgIG1ha2VzdHIo JihvcHRsaXN0W25vcHRsaXN0KytdKSwiQ0tfUkVYWCIpOworI2VuZGlmIC8qIENLX1JFWFggKi8K KyNpZmRlZiBDS19USU1FUlMKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkNL X1RJTUVSUyIpOworI2VuZGlmIC8qIENLX1RJTUVSUyAqLworI2lmZGVmIFRUU1BETElTVAorICAg IG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiVFRTUERMSVNUIik7CisjZW5kaWYgLyog VFRTUERMSVNUICovCisjaWZkZWYgQ0tfUEVSTVMKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0 bGlzdCsrXSksIkNLX1BFUk1TIik7CisjZW5kaWYgLyogQ0tfUEVSTVMgKi8KKyNpZmRlZiBDS1RV TklORworICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiQ0tUVU5JTkciKTsKKyNl bmRpZiAvKiBDS1RVTklORyAqLworI2lmZGVmIE5FV0ZUUAorICAgIG1ha2VzdHIoJihvcHRsaXN0 W25vcHRsaXN0KytdKSwiTkVXRlRQIik7CisjZW5kaWYgLyogTkVXRlRQICovCisjaWZkZWYgU1lT RlRQCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJTWVNGVFAiKTsKKyNlbmRp ZiAvKiBTWVNGVFAgKi8KKyNpZmRlZiBOT0ZUUAorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRs aXN0KytdKSwiTk9GVFAiKTsKKyNlbmRpZiAvKiBOT0ZUUCAqLworI2lmZGVmIENLSFRUUAorICAg IG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiQ0tIVFRQIik7CisjZW5kaWYgLyogQ0tI VFRQICovCisjaWZkZWYgTk9IVFRQCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10p LCJOT0hUVFAiKTsKKyNlbmRpZiAvKiBOT0hUVFAgKi8KKyNpZmRlZiBDS1JPT1QKKyAgICBtYWtl c3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkNLUk9PVCIpOworI2VuZGlmIC8qIENLUk9PVCAq LworI2lmZGVmIENLUkVBTFBBVEgKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSks IkNLUkVBTFBBVEgiKTsKKyNlbmRpZiAvKiBDS1JFQUxQQVRIICovCisjaWZkZWYgU1RSRUFNSU5H CisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJTVFJFQU1JTkciKTsKKyNlbmRp ZiAvKiBTVFJFQU1JTkcgKi8KKyNpZmRlZiBVTlBSRUZJWFpFUk8KKyAgICBtYWtlc3RyKCYob3B0 bGlzdFtub3B0bGlzdCsrXSksIlVOUFJFRklYWkVSTyIpOworI2VuZGlmIC8qIFVOUFJFRklYWkVS TyAqLworI2lmZGVmIENLUkVHRVgKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSks IkNLUkVHRVgiKTsKKyNlbmRpZiAvKiBDS1JFR0VYICovCisjaWZkZWYgWlhSRVdJTkQKKyAgICBt YWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIlpYUkVXSU5EIik7CisjZW5kaWYgLyogWlhS RVdJTkQgKi8KKyNpZmRlZiBDS1NZU0xPRworICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0 KytdKSwiQ0tTWVNMT0ciKTsKKyNlbmRpZiAvKiBDS1NZU0xPRyAqLworI2lmZGVmIFNZU0xPR0xF VkVMCisgICAgc3ByaW50ZihsaW5lLCJTWVNMT0dMRVZFTD0lZCIsU1lTTE9HTEVWRUwpOyAvKiBT QUZFICovCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLGxpbmUpOworI2VuZGlm IC8qIFNZU0xPR0xFVkVMICovCisjaWZkZWYgTk9TRVhQCisgICAgbWFrZXN0cigmKG9wdGxpc3Rb bm9wdGxpc3QrK10pLCJOT1NFWFAiKTsKKyNlbmRpZiAvKiBOT1NFWFAgKi8KKyNpZmRlZiBDS0xF QVJOCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJDS0xFQVJOIik7CisjZWxz ZQorI2lmZGVmIE5PTE9FQVJOCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJO T0xPRUFSTiIpOworI2VuZGlmIC8qIE5PTE9FQVJOICovCisjZW5kaWYgLyogQ0tMRUFSTiAqLwor CisjaWZkZWYgTk9GTE9BVAorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiTk9G TE9BVCIpOworI2Vsc2UKKyNpZmRlZiBGTkZMT0FUCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9w dGxpc3QrK10pLCJGTkZMT0FUIik7CisjZW5kaWYgLyogRk5GTE9BVCAqLworI2lmZGVmIENLRkxP QVQKKyNpZmRlZiBHRlRJTUVSCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJH RlRJTUVSIik7CisjZW5kaWYgLyogR0ZUSU1FUiAqLworI2lmZGVmIENLRkxPQVRfUworICAgIGNr bWFrbXNnKGxpbmUsTElOQlVGU0laLCJDS0ZMT0FUPSIsQ0tGTE9BVF9TLE5VTEwsTlVMTCk7Cisg ICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLGxpbmUpOworI2Vsc2UKKyAgICBtYWtl c3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkNLRkxPQVQiKTsKKyNlbmRpZiAvKiBDS0ZMT0FU X1MgKi8KKyNlbmRpZiAvKiBDS0ZMT0FUICovCisjZW5kaWYgLyogTk9GTE9BVCAqLworCisjaWZk ZWYgU1NICisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJTU0giKTsKKyNlbmRp ZiAvKiBTU0ggKi8KKyNpZmRlZiBORVRETEwKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlz dCsrXSksIk5FVERMTCIpOworI2VuZGlmIC8qIE5FVERMTCAqLworI2lmZGVmIE5FVEZJTEUKKyAg ICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIk5FVEZJTEUiKTsKKyNlbmRpZiAvKiBO RVRGSUxFICovCisjaWZkZWYgQ0tfVEFQSQorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0 KytdKSwiQ0tfVEFQSSIpOworI2VuZGlmIC8qIENLX1RBUEkgKi8KKyNpZmRlZiBDS19TU0wKKyAg ICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkNLX1NTTCIpOworI2lmZGVmIE9QRU5T U0xfVkVSU0lPTl9URVhUCisgICAgY2ttYWttc2cobGluZSxMSU5CVUZTSVosCisJICAgICAiT1BF TlNTTF9WRVJTSU9OX1RFWFQ9IiwiXCIiLE9QRU5TU0xfVkVSU0lPTl9URVhULCJcIiIpOworICAg IG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSxsaW5lKTsKKyNlbmRpZgkvKiBPUEVOU1NM X1ZFUlNJT05fVEVYVCAqLworI2VuZGlmIC8qIENLX1NTTCAqLworICAgIGRlYnVnKEYxMDEsImlu aXRvcHRsaXN0IG5vcHRsaXN0IiwiIixub3B0bGlzdCk7CisgICAgc2hfc29ydChvcHRsaXN0LE5V TEwsbm9wdGxpc3QsMCwwLDApOworfQorCitpbnQKK3Nob2ZlYSgpIHsKKyAgICBpbnQgaTsKKyAg ICBpbnQgZmxhZyA9IDA7CisgICAgaW50IGxpbmVzID0gMTsKKyNpZmRlZiBGTkZMT0FUCisgICAg ZXh0ZXJuIGludCBmcF9kaWdpdHMsIGZwX3JvdW5kaW5nOworI2VuZGlmIC8qIEZORkxPQVQgKi8K KyAgICBleHRlcm4gaW50IGJ5dGVvcmRlcjsKKyAgICBwcmludGYoIiVzXG4iLHZlcnNpbyk7Cisg ICAgaWYgKGluc2VydmVyKQorICAgICAgcmV0dXJuKDEpOworCisgICAgZGVidWcoRjEwMSwic2hv ZmVhIE5PUFRMSVNUIiwiIixOT1BUTElTVCk7CisgICAgaW5pdG9wdGxpc3QoKTsKKyAgICBkZWJ1 ZyhGMTAxLCJzaG9mZWEgbm9wdGxpc3QiLCIiLG5vcHRsaXN0KTsKKyNpZmRlZiBPUzIKKyNpZmRl ZiBOVAorI2lmZGVmIF9NX0FMUEhBCisgICAgcHJpbnRmKCJNaWNyb3NvZnQgV2luZG93cyBPcGVy YXRpbmcgU3lzdGVtcyBmb3IgQWxwaGEgQ1BVcy5cbiIpOworI2Vsc2UgLyogX01fQUxQSEEgKi8K KyNpZmRlZiBfTV9QUEMKKyAgICBwcmludGYoIk1pY3Jvc29mdCBXaW5kb3dzIE9wZXJhdGluZyBT eXN0ZW1zIGZvciBQb3dlclBDIENQVXMuXG4iKTsKKyNlbHNlIC8qIF9NX1BQQyAqLworI2lmZGVm IF9NX01SWDAwMAorICAgIHByaW50ZigiTWljcm9zb2Z0IFdpbmRvd3MgT3BlcmF0aW5nIFN5c3Rl bXMgZm9yIE1JUFMgQ1BVcy5cbiIpOworI2Vsc2UgLyogX01fTVJYMDAwICovCisjaWZkZWYgX01f SVg4NgorICAgIHByaW50ZigiTWljcm9zb2Z0IFdpbmRvd3MgT3BlcmF0aW5nIFN5c3RlbXMgZm9y IDMyLWJpdCBJbnRlbCBDUFVzLlxuIik7CisjZWxzZSAvKiBfTV9JWDg2ICovCisgICAgVU5LTk9X TiBXSU5ET1dTIFBMQVRGT1JNCisjZW5kaWYgLyogX01fSVg4NiAqLworI2VuZGlmIC8qIF9NX01S WDAwMCAqLworI2VuZGlmIC8qIF9NX1BQQyAqLworI2VuZGlmIC8qIF9NX0FMUEhBICovCisjZWxz ZSAvKiBOVCAqLworI2lmZGVmIE1fSTI4NgorICAgIHByaW50ZigiSUJNIE9TLzIgMTYtYml0Llxu Iik7CisjZWxzZQorICAgIHByaW50ZigiSUJNIE9TLzIgMzItYml0LlxuIik7CisjZW5kaWYgLyog TV9JMjg2ICovCisjZW5kaWYgLyogTlQgKi8KKyAgICBsaW5lcysrOworI2VuZGlmIC8qIE9TMiAq LworICAgIHByaW50ZigiXG4iKTsKKyAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBp ZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsgfQorICAgIHByaW50Zigi TWFqb3Igb3B0aW9uYWwgZmVhdHVyZXMgaW5jbHVkZWQ6XG4iKTsKKyAgICBpZiAoKytsaW5lcyA+ IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0g MDsgfQorCisgICAgaWYgKHNpemVvZihDS19PRkZfVCkgPT0gOCkgeworCXByaW50ZigiIExhcmdl IGZpbGVzIGFuZCBsYXJnZSBpbnRlZ2VycyAoNjQgYml0cylcbiIpOworICAgICAgICBpZiAoKyts aW5lcyA+IGNtZF9yb3dzIC0gMykgeworCSAgICBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBl bHNlIGxpbmVzID0gMDsKKwl9CisgICAgfQorI2lmZGVmIE5FVENPTk4KKyAgICBwcmludGYoIiBO ZXR3b3JrIHN1cHBvcnQgKHR5cGUgU0hPVyBORVQgZm9yIGZ1cnRoZXIgaW5mbylcbiIpOworICAg IGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7 IGVsc2UgbGluZXMgPSAwOyB9CisjaWZkZWYgSUtTX09QVElPTgorICAgIHByaW50ZigiIFRlbG5l dCBLZXJtaXQgT3B0aW9uXG4iKTsKKyAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBp ZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsgfQorI2VuZGlmIC8qIElL U19PUFRJT04gKi8KKyNpZmRlZiBDS19BVVRIRU5USUNBVElPTgorICAgIHByaW50ZigiIFRlbG5l dCBBdXRoZW50aWNhdGlvbiBPcHRpb25cbiIpOworICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3Mg LSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9CisjaWZk ZWYgQ0tfS0VSQkVST1MKKyNpZmRlZiBLUkI0CisjaWZkZWYgS1JCNQorICAgIHByaW50ZigiIEtl cmJlcm9zKFRNKSBJViBhbmQgS2VyYmVyb3MgViBhdXRoZW50aWNhdGlvblxuIik7CisgICAgaWYg KCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxz ZSBsaW5lcyA9IDA7IH0KKyNlbHNlIC8qIEtSQjUgKi8KKyAgICBwcmludGYoIiBLZXJiZXJvcyhU TSkgSVYgYXV0aGVudGljYXRpb25cbiIpOworICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAz KSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9CisjZW5kaWYg LyogS1JCNSAqLworI2Vsc2UgLyogS1JCNCAqLworI2lmZGVmIEtSQjUKKyAgICBwcmludGYoIiBL ZXJiZXJvcyhUTSkgViBhdXRoZW50aWNhdGlvblxuIik7CisgICAgaWYgKCsrbGluZXMgPiBjbWRf cm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBsaW5lcyA9IDA7IH0K KyNlbmRpZiAvKiBLUkI1ICovCisjZW5kaWYgLyogS1JCNCAqLworI2VuZGlmIC8qIENLX0tFUkJF Uk9TICovCisjaWZkZWYgQ0tfU1JQCisgICAgcHJpbnRmKCIgU1JQKFRNKSAoU2VjdXJlIFJlbW90 ZSBQYXNzd29yZCkgYXV0aGVudGljYXRpb25cbiIpOworICAgIGlmICgrK2xpbmVzID4gY21kX3Jv d3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9Cisj ZW5kaWYgLyogQ0tfU1JQICovCisjaWZkZWYgQ0tfU1NMCisgICAgcHJpbnRmKCIgU2VjdXJlIFNv Y2tldHMgTGF5ZXIgKFNTTClcbiIpOworICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7 IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9CisgICAgcHJpbnRm KCIgVHJhbnNwb3J0IExheWVyIFNlY3VyaXR5IChUTFMpXG4iKTsKKyAgICBpZiAoKytsaW5lcyA+ IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0g MDsgfQorI2VuZGlmIC8qIENLX1NTTCAqLworI2lmZGVmIFNTSEJVSUxUSU4KKyAgICBwcmludGYo IiBTZWN1cmUgU2hlbGwgKFNTSCkgW2ludGVybmFsXVxuIik7CisgICAgaWYgKCsrbGluZXMgPiBj bWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBsaW5lcyA9IDA7 IH0KKyNlbmRpZiAvKiBTU0hCVUlMVElOICovCisjaWZkZWYgU1NIQ01ECisgICAgcHJpbnRmKCIg U2VjdXJlIFNoZWxsIChTU0gpIFtleHRlcm5hbF1cbiIpOworICAgIGlmICgrK2xpbmVzID4gY21k X3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9 CisjZW5kaWYgLyogU1NIQ01EICovCisjaWZkZWYgQ0tfRU5DUllQVElPTgorICAgIHByaW50Zigi IFRlbG5ldCBFbmNyeXB0aW9uIE9wdGlvblxuIik7CisgICAgaWYgKCsrbGluZXMgPiBjbWRfcm93 cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBsaW5lcyA9IDA7IH0KKyNp ZmRlZiBDS19ERVMKKyAgICBwcmludGYoIiBUZWxuZXQgREVTIEVuY3J5cHRpb25cbiIpOworICAg IGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7 IGVsc2UgbGluZXMgPSAwOyB9CisjZW5kaWYgLyogQ0tfREVTICovCisjaWZkZWYgQ0tfQ0FTVAor ICAgIHByaW50ZigiIFRlbG5ldCBDQVNUIEVuY3J5cHRpb25cbiIpOworICAgIGlmICgrK2xpbmVz ID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMg PSAwOyB9CisjZW5kaWYgLyogQ0tfQ0FTVCAqLworCisjaWZkZWYgQ0tfS0VSQkVST1MKKyNpZmRl ZiBLUkI1CisjaWZkZWYgQUxMT1dfS1JCXzNERVNfRU5DUllQVAorICAgIHByaW50ZigiIEtlcmJl cm9zIDNERVMvQUVTIFRlbG5ldCBFbmNyeXB0aW9uXG4iKTsKKyAgICBpZiAoKytsaW5lcyA+IGNt ZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsg fQorI2VuZGlmIC8qIEFMTE9XX0tSQl8zREVTX0VOQ1JZUFQgKi8KKyNlbmRpZiAvKiBLUkI1ICov CisjZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KKworI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8K KyNlbmRpZiAvKiBDS19BVVRIRU5USUNBVElPTiAqLworI2lmZGVmIENLX0ZPUldBUkRfWAorICAg IHByaW50ZigiIFggV2luZG93cyBmb3J3YXJkaW5nXG4iKTsKKyAgICBpZiAoKytsaW5lcyA+IGNt ZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsg fQorI2VuZGlmIC8qIENLX0ZPUldBUkRfWCAqLworI2lmZGVmIFROX0NPTVBPUlQKKyAgICBwcmlu dGYoIiBUZWxuZXQgUmVtb3RlIENvbSBQb3J0IENvbnRyb2wgT3B0aW9uXG4iKTsKKyAgICBpZiAo KytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNl IGxpbmVzID0gMDsgfQorI2VuZGlmIC8qIFROX0NPTVBPUlQgKi8KKyNpZmRlZiBDS19TT0NLUwor I2lmZGVmIENLX1NPQ0tTNQorICAgIHByaW50ZigiIFNPQ0tTIDVcbiIpOworICAgIGlmICgrK2xp bmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGlu ZXMgPSAwOyB9CisjZWxzZSAvKiBDS19TT0NLUzUgKi8KKyAgICBwcmludGYoIiBTT0NLUyA0XG4i KTsKKyAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0 dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsgfQorI2VuZGlmIC8qIENLX1NPQ0tTNSAqLworI2VuZGlm IC8qIENLX1NPQ0tTICovCisjaWZkZWYgTkVXRlRQCisgICAgcHJpbnRmKCIgQnVpbHQtaW4gRlRQ IGNsaWVudFxuIik7CisgICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2tt b3JlKCkpIHJldHVybigxKTsgZWxzZSBsaW5lcyA9IDA7IH0KKyNlbmRpZiAvKiBORVdGVFAgKi8K KyNpZmRlZiBDS0hUVFAKKyAgICBwcmludGYoIiBCdWlsdC1pbiBIVFRQIGNsaWVudFxuIik7Cisg ICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigx KTsgZWxzZSBsaW5lcyA9IDA7IH0KKyNlbmRpZiAvKiBDS0hUVFAgKi8KKyNlbmRpZiAvKiBORVRD T05OICovCisKKyNpZmRlZiBDS19SVFNDVFMKKyAgICBwcmludGYoIiBIYXJkd2FyZSBmbG93IGNv bnRyb2xcbiIpOworICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9y ZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9CisjZW5kaWYgLyogQ0tfUlRTQ1RTICov CisKKyNpZmRlZiBDS19YWVoKKyNpZmRlZiBYWVpfSU5URVJOQUwKKyAgICBwcmludGYoIiBCdWls dC1pbiBYWVpNT0RFTSBwcm90b2NvbHNcbiIpOworI2Vsc2UKKyAgICBwcmludGYoIiBFeHRlcm5h bCBYWVpNT0RFTSBwcm90b2NvbCBzdXBwb3J0XG4iKTsKKyNlbmRpZiAvKiBYWVpfSU5URVJOQUwg Ki8KKyAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0 dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsgfQorI2VuZGlmIC8qIENLX1hZWiAqLworCisjaWZuZGVm IE5PQ1NFVFMKKyAgICBwcmludGYoIiBMYXRpbi0xIChXZXN0IEV1cm9wZWFuKSBjaGFyYWN0ZXIt c2V0IHRyYW5zbGF0aW9uXG4iKTsKKyAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBp ZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsgfQorI2lmZGVmIExBVElO MgorICAgIHByaW50ZigiIExhdGluLTIgKEVhc3QgRXVyb3BlYW4pIGNoYXJhY3Rlci1zZXQgdHJh bnNsYXRpb25cbiIpOworICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNr bW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9CisjZW5kaWYgLyogTEFUSU4yICov CisjaWZkZWYgQ1lSSUxMSUMKKyAgICBwcmludGYoIiBDeXJpbGxpYyAoUnVzc2lhbiwgVWtyYWlu aWFuLCBldGMpIGNoYXJhY3Rlci1zZXQgdHJhbnNsYXRpb25cbiIpOworICAgIGlmICgrK2xpbmVz ID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMg PSAwOyB9CisjZW5kaWYgLyogQ1lSSUxMSUMgKi8KKyNpZmRlZiBHUkVFSworICAgIHByaW50Zigi IEdyZWVrIGNoYXJhY3Rlci1zZXQgdHJhbnNsYXRpb25cbiIpOworICAgIGlmICgrK2xpbmVzID4g Y21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAw OyB9CisjZW5kaWYgLyogR1JFRUsgKi8KKyNpZmRlZiBIRUJSRVcKKyAgICBwcmludGYoIiBIZWJy ZXcgY2hhcmFjdGVyLXNldCB0cmFuc2xhdGlvblxuIik7CisgICAgaWYgKCsrbGluZXMgPiBjbWRf cm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBsaW5lcyA9IDA7IH0K KyNlbmRpZiAvKiBIRUJSRVcgKi8KKyNpZmRlZiBLQU5KSQorICAgIHByaW50ZigiIEphcGFuZXNl IGNoYXJhY3Rlci1zZXQgdHJhbnNsYXRpb25cbiIpOworICAgIGlmICgrK2xpbmVzID4gY21kX3Jv d3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9Cisj ZW5kaWYgLyogS0FOSkkgKi8KKyNpZmRlZiBVTklDT0RFCisgICAgcHJpbnRmKCIgVW5pY29kZSBj aGFyYWN0ZXItc2V0IHRyYW5zbGF0aW9uXG4iKTsKKyAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dz IC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsgfQorI2Vu ZGlmIC8qIFVOSUNPREUgKi8KKyNpZmRlZiBDS09VTkkKKyAgICBpZiAoaXN1bmljb2RlKCkpCisg ICAgICBwcmludGYoIiBVbmljb2RlIHN1cHBvcnQgZm9yIElTTy0yMDIyIFRlcm1pbmFsIEVtdWxh dGlvblxuIik7CisgICAgZWxzZQorICAgICAgcHJpbnRmKCIgVW5pY29kZSB0cmFuc2xhdGlvbiBm b3IgVGVybWluYWwgQ2hhcmFjdGVyLVNldHNcbiIpOworICAgIGlmICgrK2xpbmVzID4gY21kX3Jv d3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9Cisj ZW5kaWYgLyogQ0tPVU5JICovCisjZW5kaWYgLyogTk9DU0VUUyAqLworCisjaWZkZWYgTkVUUFRZ CisgICAgcHJpbnRmKCIgUHNldWRvdGVybWluYWwgY29udHJvbFxuIik7CisgICAgaWYgKCsrbGlu ZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBsaW5l cyA9IDA7IH0KKyNlbmRpZiAvKiBORVRQVFkgKi8KKworI2lmZGVmIENLX1JFRElSCisgICAgcHJp bnRmKCIgUkVESVJFQ1QgY29tbWFuZFxuIik7CisgICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAt IDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBsaW5lcyA9IDA7IH0KKyNlbmRp ZiAvKiBDS19SRURJUiAqLworCisjaWZkZWYgQ0tfUkVTRU5ECisgICAgcHJpbnRmKCIgUkVTRU5E IGNvbW1hbmRcbiIpOworICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNr bW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9CisjZW5kaWYgLyogQ0tfUkVTRU5E ICovCisKKyNpZm5kZWYgTk9YRkVSCisjaWZkZWYgQ0tfQ1VSU0VTCisgICAgcHJpbnRmKCIgRnVs bHNjcmVlbiBmaWxlIHRyYW5zZmVyIGRpc3BsYXlcbiIpOworICAgIGlmICgrK2xpbmVzID4gY21k X3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9 CisjZW5kaWYgLyogQ0tfQ1VSU0VTICovCisjZW5kaWYgLyogTk9YRkVSICovCisKKyNpZmRlZiBD S19TUEVFRAorICAgIHByaW50ZigiIENvbnRyb2wtY2hhcmFjdGVyIHVucHJlZml4aW5nXG4iKTsK KyAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJu KDEpOyBlbHNlIGxpbmVzID0gMDsgfQorI2VuZGlmIC8qIENLX1NQRUVEICovCisKKyNpZmRlZiBT VFJFQU1JTkcKKyAgICBwcmludGYoIiBTdHJlYW1pbmdcbiIpOworICAgIGlmICgrK2xpbmVzID4g Y21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAw OyB9CisjZW5kaWYgLyogU1RSRUFNSU5HICovCisKKyNpZmRlZiBDS19BVVRPREwKKyAgICBwcmlu dGYoIiBBdXRvZG93bmxvYWRcbiIpOworICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7 IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9CisjZW5kaWYgLyog Q0tfQVVUT0RMICovCisKKyNpZmRlZiBPUzJNT1VTRQorICAgIHByaW50ZigiIE1vdXNlIHN1cHBv cnRcbiIpOworICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgp KSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9CisjZW5kaWYgLyogT1MyTU9VU0UgKi8KKwor I2lmZGVmIENLX1JFWFgKKyAgICBwcmludGYoIiBSRVhYIHNjcmlwdCBsYW5ndWFnZSBpbnRlcmZh Y2VcbiIpOworICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgp KSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9CisjZW5kaWYgLyogQ0tfUkVYWCAqLworCisj aWZkZWYgSUtTRAorI2lmZGVmIENLX0xPR0lOCisgICAgcHJpbnRmKCIgSW50ZXJuZXQgS2VybWl0 IFNlcnZpY2Ugd2l0aCB1c2VyIGxvZ2luIHN1cHBvcnRcbiIpOworI2Vsc2UgLyogQ0tfTE9HSU4g Ki8KKyAgICBwcmludGYoIiBJbnRlcm5ldCBLZXJtaXQgU2VydmljZSB3aXRob3V0IHVzZXIgbG9n aW4gc3VwcG9ydFxuIik7CisjZW5kaWYgLyogQ0tfTE9HSU4gKi8KKyAgICBpZiAoKytsaW5lcyA+ IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0g MDsgfQorI2VuZGlmIC8qIElLU0QgKi8KKworICAgIHByaW50ZigiXG4iKTsKKyAgICBpZiAoKyts aW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxp bmVzID0gMDsgfQorICAgIHByaW50ZigiTWFqb3Igb3B0aW9uYWwgZmVhdHVyZXMgbm90IGluY2x1 ZGVkOlxuIik7CisgICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3Jl KCkpIHJldHVybigxKTsgZWxzZSBsaW5lcyA9IDA7IH0KKworICAgIGlmIChzaXplb2YoQ0tfT0ZG X1QpIDw9IDQpIHsKKwlwcmludGYoIiBObyBsYXJnZSBmaWxlcyBvciBsYXJnZSBpbnRlZ2Vyc1xu Iik7CisgICAgICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7CisJICAgIGlmICghYXNr bW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOworCX0KKyAgICB9CisKKyNpZmRlZiBO T1hGRVIKKyAgICBwcmludGYoIiBObyBmaWxlLXRyYW5zZmVyIHByb3RvY29sc1xuIik7CisgICAg aWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsg ZWxzZSBsaW5lcyA9IDA7IH0KKyAgICBmbGFnID0gMTsKKyNlbHNlCisjaWZuZGVmIENLX0NVUlNF UworI2lmbmRlZiBNQUMKKyAgICBwcmludGYoIiBObyBmdWxsc2NyZWVuIGZpbGUgdHJhbnNmZXIg ZGlzcGxheVxuIik7CisgICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2tt b3JlKCkpIHJldHVybigxKTsgZWxzZSBsaW5lcyA9IDA7IH0KKyAgICBmbGFnID0gMTsKKyNlbmRp ZiAvKiBNQUMgKi8KKyNlbmRpZiAvKiBDS19DVVJTRVMgKi8KKworI2lmZGVmIE5PU0VSVkVSCisg ICAgcHJpbnRmKCIgTm8gc2VydmVyIG1vZGVcbiIpOworICAgIGlmICgrK2xpbmVzID4gY21kX3Jv d3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9Cisg ICAgZmxhZyA9IDE7CisjZW5kaWYgLyogTk9TRVJWRVIgKi8KKworI2lmbmRlZiBDS19TUEVFRAor ICAgIHByaW50ZigiIE5vIGNvbnRyb2wtY2hhcmFjdGVyIHVucHJlZml4aW5nXG4iKTsKKyAgICBp ZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBl bHNlIGxpbmVzID0gMDsgfQorICAgIGZsYWcgPSAxOworI2VuZGlmIC8qIENLX1NQRUVEICovCisK KyNpZm5kZWYgU1RSRUFNSU5HCisgICAgcHJpbnRmKCIgTm8gc3RyZWFtaW5nXG4iKTsKKyAgICBp ZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBl bHNlIGxpbmVzID0gMDsgfQorICAgIGZsYWcgPSAxOworI2VuZGlmIC8qIFNUUkVBTUlORyAqLwor CisjaWZuZGVmIENLX0FVVE9ETAorICAgIHByaW50ZigiIE5vIGF1dG9kb3dubG9hZFxuIik7Cisg ICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigx KTsgZWxzZSBsaW5lcyA9IDA7IH0KKyAgICBmbGFnID0gMTsKKyNlbmRpZiAvKiBDS19BVVRPREwg Ki8KKworI2lmbmRlZiBDS19YWVoKKyAgICBwcmludGYoIiBObyBidWlsdC1pbiBYWVpNT0RFTSBw cm90b2NvbHNcbiIpOworICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNr bW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9CisgICAgZmxhZyA9IDE7CisjZW5k aWYgLyogQ0tfWFlaICovCisKKyNpZmRlZiBOT0ZMT0FUCisgICAgcHJpbnRmKCIgTm8gZmxvYXRp bmctcG9pbnQgYXJpdGhtZXRpY1xuIik7CisgICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMp IHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBsaW5lcyA9IDA7IH0KKyAgICBmbGFn ID0gMTsKKyAgICBwcmludGYoIiBObyBTLUV4cHJlc3Npb25zIChMSVNQIGludGVycHJldGVyKVxu Iik7CisgICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJl dHVybigxKTsgZWxzZSBsaW5lcyA9IDA7IH0KKyAgICBmbGFnID0gMTsKKyNlbHNlCisjaWZkZWYg Tk9TRVhQCisgICAgcHJpbnRmKCIgTm8gUy1FeHByZXNzaW9ucyAoTElTUCBpbnRlcnByZXRlcilc biIpOworICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSBy ZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9CisgICAgZmxhZyA9IDE7CisjZW5kaWYJLyogTk9T RVhQICovCisjZW5kaWYJLyogTk9GTE9BVCAqLworCisjaWZkZWYgTk9UTE9HCisgICAgcHJpbnRm KCIgTm8gdHJhbnNhY3Rpb24gbG9nXG4iKTsKKyAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0g MykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsgfQorICAgIGZs YWcgPSAxOworI2VuZGlmIC8qIE5PVExPRyAqLworI2VuZGlmIC8qIE5PWEZFUiAqLworCisjaWZk ZWYgTk9ERUJVRworICAgIHByaW50ZigiIE5vIGRlYnVnZ2luZ1xuIik7CisgICAgaWYgKCsrbGlu ZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBsaW5l cyA9IDA7IH0KKyAgICBmbGFnID0gMTsKKyNlbmRpZiAvKiBOT0RFQlVHICovCisKKyNpZmRlZiBO T0hFTFAKKyAgICBwcmludGYoIiBObyBidWlsdC1pbiBoZWxwXG4iKTsKKyAgICBpZiAoKytsaW5l cyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVz ID0gMDsgfQorICAgIGZsYWcgPSAxOworI2VuZGlmIC8qIE5PSEVMUCAqLworCisjaWZkZWYgTk9M T0NBTAorICAgIHByaW50ZigiIE5vIG1ha2luZyBjb25uZWN0aW9uc1xuIik7CisgICAgaWYgKCsr bGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBs aW5lcyA9IDA7IH0KKyAgICBmbGFnID0gMTsKKyNlbHNlCisjaWZuZGVmIE5FVENPTk4KKyAgICBw cmludGYoIiBObyBuZXR3b3JrIHN1cHBvcnRcbiIpOworICAgIGlmICgrK2xpbmVzID4gY21kX3Jv d3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9Cisg ICAgZmxhZyA9IDE7CisjZWxzZSAvKiBORVRDT05OICovCisjaWZuZGVmIElLU19PUFRJT04KKyAg ICBwcmludGYoIiBObyBUZWxuZXQgS2VybWl0IE9wdGlvblxuIik7CisgICAgaWYgKCsrbGluZXMg PiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBsaW5lcyA9 IDA7IH0KKyAgICBmbGFnID0gMTsKKyNlbmRpZiAvKiBJS1NfT1BUSU9OICovCisjZW5kaWYgLyog TkVUQ09OTiAqLworCisjaWZkZWYgTk9TU0gKKyAgICBwcmludGYoIiBObyBTZWN1cmUgU2hlbGwg KFNTSClcbiIpOworICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9y ZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9CisjZW5kaWYgLyogTk9TU0ggKi8KKyNp Zm5kZWYgQ0tfQVVUSEVOVElDQVRJT04KKyAgICBwcmludGYoIiBObyBLZXJiZXJvcyhUTSkgYXV0 aGVudGljYXRpb25cbiIpOworICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICgh YXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9CisgICAgcHJpbnRmKCIgTm8g U1JQKFRNKSAoU2VjdXJlIFJlbW90ZSBQYXNzd29yZCkgcHJvdG9jb2xcbiIpOworICAgIGlmICgr K2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2Ug bGluZXMgPSAwOyB9CisgICAgcHJpbnRmKCIgTm8gU2VjdXJlIFNvY2tldHMgTGF5ZXIgKFNTTCkg cHJvdG9jb2xcbiIpOworICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNr bW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9CisgICAgcHJpbnRmKCIgTm8gVHJh bnNwb3J0IExheWVyIFNlY3VyaXR5IChUTFMpIHByb3RvY29sXG4iKTsKKyAgICBpZiAoKytsaW5l cyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVz ID0gMDsgfQorICAgIHByaW50ZigiIE5vIGVuY3J5cHRpb25cbiIpOworICAgIGlmICgrK2xpbmVz ID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMg PSAwOyB9CisgICAgZmxhZyA9IDE7CisjZWxzZSAvKiBDS19BVVRIRU5USUNBVElPTiAqLworI2lm bmRlZiBDS19LRVJCRVJPUworICAgIHByaW50ZigiIE5vIEtlcmJlcm9zKFRNKSBhdXRoZW50aWNh dGlvblxuIik7CisgICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3Jl KCkpIHJldHVybigxKTsgZWxzZSBsaW5lcyA9IDA7IH0KKyAgICBmbGFnID0gMTsKKyNlbHNlIC8q IENLX0tFUkJFUk9TICovCisjaWZuZGVmIEtSQjQKKyAgICBwcmludGYoIiBObyBLZXJiZXJvcyhU TSkgSVYgYXV0aGVudGljYXRpb25cbiIpOworICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAz KSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9CisgICAgZmxh ZyA9IDE7CisjZW5kaWYgLyogS1JCNCAqLworI2lmbmRlZiBLUkI1CisgICAgcHJpbnRmKCIgTm8g S2VyYmVyb3MoVE0pIFYgYXV0aGVudGljYXRpb25cbiIpOworICAgIGlmICgrK2xpbmVzID4gY21k X3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9 CisgICAgZmxhZyA9IDE7CisjZW5kaWYgLyogS1JCNSAqLworI2VuZGlmIC8qIENLX0tFUkJFUk9T ICovCisjaWZuZGVmIENLX1NSUAorICAgIHByaW50ZigiIE5vIFNSUChUTSkgKFNlY3VyZSBSZW1v dGUgUGFzc3dvcmQpIGF1dGhlbnRpY2F0aW9uXG4iKTsKKyAgICBpZiAoKytsaW5lcyA+IGNtZF9y b3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsgfQor ICAgIGZsYWcgPSAxOworI2VuZGlmIC8qIENLX1NSUCAqLworI2lmbmRlZiBDS19TU0wKKyAgICBw cmludGYoIiBObyBTZWN1cmUgU29ja2V0cyBMYXllciAoU1NMKSBwcm90b2NvbFxuIik7CisgICAg aWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsg ZWxzZSBsaW5lcyA9IDA7IH0KKyAgICBwcmludGYoIiBObyBUcmFuc3BvcnQgTGF5ZXIgU2VjdXJp dHkgKFRMUykgcHJvdG9jb2xcbiIpOworICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7 IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9CisgICAgZmxhZyA9 IDE7CisjZW5kaWYgLyogQ0tfU1NMICovCisjaWZuZGVmIENLX0VOQ1JZUFRJT04KKyAgICBwcmlu dGYoIiBObyBUZWxuZXQgRW5jcnlwdGlvbiBPcHRpb25cbiIpOworICAgIGlmICgrK2xpbmVzID4g Y21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAw OyB9CisgICAgZmxhZyA9IDE7CisjZWxzZSAvKiBDS19FTkNSWVBUSU9OICovCisjaWZuZGVmIE9T MgorI2lmbmRlZiBDS19ERVMKKyAgICBwcmludGYoIiBObyBUZWxuZXQgREVTIGVuY3J5cHRpb25c biIpOworICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSBy ZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9CisgICAgZmxhZyA9IDE7CisjZW5kaWYgLyogQ0tf REVTICovCisjaWZuZGVmIENLX0NBU1QKKyAgICBwcmludGYoIiBObyBUZWxuZXQgQ0FTVCBlbmNy eXB0aW9uXG4iKTsKKyAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21v cmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsgfQorICAgIGZsYWcgPSAxOworI2VuZGlm IC8qIENLX0NBU1QgKi8KKworI2lmZGVmIENPTU1FTlQKKyNpZmRlZiBDS19LRVJCRVJPUworI2lm ZGVmIEtSQjUKKyNpZm5kZWYgQUxMT1dfS1JCXzNERVNfRU5DUllQVAorICAgIHByaW50ZigiIE5v IEtlcmJlcm9zIDNERVMvQUVTIFRlbG5ldCBFbmNyeXB0aW9uXG4iKTsKKyAgICBpZiAoKytsaW5l cyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVz ID0gMDsgfQorI2VuZGlmIC8qIEFMTE9XX0tSQl8zREVTX0VOQ1JZUFQgKi8KKyNlbmRpZiAvKiBL UkI1ICovCisjZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisK KyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCisjZW5kaWYgLyog Q0tfQVVUSEVOVElDQVRJT04gKi8KKyNpZm5kZWYgQ0tfRk9SV0FSRF9YCisgICAgcHJpbnRmKCIg Tm8gWCBXaW5kb3dzIGZvcndhcmRpbmdcbiIpOworICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3Mg LSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9CisjZW5k aWYgLyogQ0tfRk9SV0FSRF9YICovCisjaWZuZGVmIFROX0NPTVBPUlQKKyAgICBwcmludGYoIiBO byBUZWxuZXQgUmVtb3RlIENvbSBQb3J0IENvbnRyb2wgT3B0aW9uXG4iKTsKKyAgICBpZiAoKyts aW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxp bmVzID0gMDsgfQorI2VuZGlmIC8qIFROX0NPTVBPUlQgKi8KKyNpZm5kZWYgQ0tfU09DS1MKKyAg ICBwcmludGYoIiBObyBTT0NLU1xuIik7CisgICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMp IHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBsaW5lcyA9IDA7IH0KKyNlbmRpZiAv KiBDS19TT0NLUyAqLworI2lmbmRlZiBORVdGVFAKKyAgICBwcmludGYoIiBObyBidWlsdC1pbiBG VFAgY2xpZW50XG4iKTsKKyAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFz a21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsgfQorI2VuZGlmIC8qIE5FV0ZUUCAq LworI2lmZGVmIE5PSFRUUAorICAgIHByaW50ZigiIE5vIGJ1aWx0LWluIEhUVFAgY2xpZW50XG4i KTsKKyAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0 dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsgfQorI2VuZGlmIC8qIE5PSFRUUCAqLworCisjaWZkZWYg Tk9ESUFMCisgICAgcHJpbnRmKCIgTm8gRElBTCBjb21tYW5kXG4iKTsKKyAgICBpZiAoKytsaW5l cyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVz ID0gMDsgfQorICAgIGZsYWcgPSAxOworI2Vsc2UKKyNpZmRlZiBNSU5JRElBTAorICAgIHByaW50 ZigiIFN1cHBvcnQgZm9yIG1vc3QgbW9kZW0gdHlwZXMgZXhjbHVkZWRcbiIpOworICAgIGlmICgr K2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2Ug bGluZXMgPSAwOyB9CisgICAgZmxhZyA9IDE7CisjZW5kaWYgLyogTUlOSURJQUwgKi8KKyNlbmRp ZiAvKiBOT0RJQUwgKi8KKyNlbmRpZiAvKiBOT0xPQ0FMICovCisKKyNpZm5kZWYgQ0tfUlRTQ1RT CisjaWZuZGVmIE1BQworICAgIHByaW50ZigiIE5vIGhhcmR3YXJlIGZsb3cgY29udHJvbFxuIik7 CisgICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVy bigxKTsgZWxzZSBsaW5lcyA9IDA7IH0KKyAgICBmbGFnID0gMTsKKyNlbmRpZiAvKiBNQUMgKi8K KyNlbmRpZiAvKiBDS19SVFNDVFMgKi8KKworI2lmZGVmIE5PWE1JVAorICAgIHByaW50ZigiIE5v IFRSQU5TTUlUIGNvbW1hbmRcbiIpOworICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7 IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9CisgICAgZmxhZyA9 IDE7CisjZW5kaWYgLyogTk9YTUlUICovCisKKyNpZmRlZiBOT1NDUklQVAorICAgIHByaW50Zigi IE5vIFNDUklQVCBjb21tYW5kXG4iKTsKKyAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykg eyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsgfQorICAgIGZsYWcg PSAxOworI2VuZGlmIC8qIE5PU0NSSVBUICovCisKKyNpZmRlZiBOT1NQTAorICAgIHByaW50Zigi IE5vIHNjcmlwdCBwcm9ncmFtbWluZyBmZWF0dXJlc1xuIik7CisgICAgaWYgKCsrbGluZXMgPiBj bWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBsaW5lcyA9IDA7 IH0KKyAgICBmbGFnID0gMTsKKyNlbmRpZiAvKiBOT1NQTCAqLworCisjaWZkZWYgTk9DU0VUUwor ICAgIHByaW50ZigiIE5vIGNoYXJhY3Rlci1zZXQgdHJhbnNsYXRpb25cbiIpOworICAgIGlmICgr K2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2Ug bGluZXMgPSAwOyB9CisgICAgZmxhZyA9IDE7CisjZWxzZQorCisjaWZuZGVmIExBVElOMgorICAg IHByaW50ZigiIE5vIExhdGluLTIgY2hhcmFjdGVyLXNldCB0cmFuc2xhdGlvblxuIik7CisgICAg aWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsg ZWxzZSBsaW5lcyA9IDA7IH0KKyAgICBmbGFnID0gMTsKKyNlbmRpZiAvKiBMQVRJTjIgKi8KKwor I2lmZGVmIE5PR1JFRUsKKyAgICBwcmludGYoIiBObyBHcmVlayBjaGFyYWN0ZXItc2V0IHRyYW5z bGF0aW9uXG4iKTsKKyAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21v cmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsgfQorICAgIGZsYWcgPSAxOworI2VuZGlm IC8qIE5PR1JFRUsgKi8KKworI2lmZGVmIE5PSEVCUkVXCisgICAgcHJpbnRmKCIgTm8gSGVicmV3 IGNoYXJhY3Rlci1zZXQgdHJhbnNsYXRpb25cbiIpOworICAgIGlmICgrK2xpbmVzID4gY21kX3Jv d3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9Cisg ICAgZmxhZyA9IDE7CisjZW5kaWYgLyogTk9IRUJSRVcgKi8KKworI2lmZGVmIE5PVU5JQ09ERQor ICAgIHByaW50ZigiIE5vIFVuaWNvZGUgY2hhcmFjdGVyLXNldCB0cmFuc2xhdGlvblxuIik7Cisg ICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigx KTsgZWxzZSBsaW5lcyA9IDA7IH0KKyAgICBmbGFnID0gMTsKKyNlbmRpZiAvKiBOT1VOSUNPREUg Ki8KKworI2lmZGVmIE5PQ1lSSUwKKyAgICBwcmludGYoIiBObyBDeXJpbGxpYyBjaGFyYWN0ZXIt c2V0IHRyYW5zbGF0aW9uXG4iKTsKKyAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBp ZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsgfQorICAgIGZsYWcgPSAx OworI2VuZGlmIC8qIE5PQ1lSSUwgKi8KKworI2lmbmRlZiBLQU5KSQorICAgIHByaW50ZigiIE5v IEthbmppIGNoYXJhY3Rlci1zZXQgdHJhbnNsYXRpb25cbiIpOworICAgIGlmICgrK2xpbmVzID4g Y21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAw OyB9CisgICAgZmxhZyA9IDE7CisjZW5kaWYgLyogS0FOSkkgKi8KKyNlbmRpZiAvKiBOT0NTRVRT ICovCisKKyNpZmRlZiBOT0NNREwKKyAgICBwcmludGYoIiBObyBjb21tYW5kLWxpbmUgYXJndW1l bnRzXG4iKTsKKyAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUo KSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsgfQorICAgIGZsYWcgPSAxOworI2VuZGlmIC8q IE5PQ01ETCAqLworCisjaWZkZWYgTk9QVVNICisgICAgcHJpbnRmKCIgTm8gZXNjYXBlIHRvIHN5 c3RlbVxuIik7CisgICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3Jl KCkpIHJldHVybigxKTsgZWxzZSBsaW5lcyA9IDA7IH0KKyAgICBmbGFnID0gMTsKKyNlbmRpZiAv KiBOT1BVU0ggKi8KKworI2lmZGVmIE5PSkMKKyNpZmRlZiBVTklYCisgICAgcHJpbnRmKCIgTm8g VU5JWCBqb2IgY29udHJvbFxuIik7CisgICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsg aWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBsaW5lcyA9IDA7IH0KKyAgICBmbGFnID0g MTsKKyNlbmRpZiAvKiBVTklYICovCisjZW5kaWYgLyogTk9KQyAqLworCisjaWZkZWYgTk9TRVRL RVkKKyAgICBwcmludGYoIiBObyBTRVQgS0VZIGNvbW1hbmRcbiIpOworICAgIGlmICgrK2xpbmVz ID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMg PSAwOyB9CisgICAgZmxhZyA9IDE7CisjZW5kaWYgLyogTk9TRVRLRVkgKi8KKworI2lmbmRlZiBD S19SRURJUgorICAgIHByaW50ZigiIE5vIFJFRElSRUNUIG9yIFBJUEUgY29tbWFuZFxuIik7Cisg ICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigx KTsgZWxzZSBsaW5lcyA9IDA7IH0KKyAgICBmbGFnID0gMTsKKyNlbmRpZiAvKiBDS19SRURJUiAq LworCisjaWZkZWYgVU5JWAorI2lmbmRlZiBORVRQVFkKKyAgICBwcmludGYoIiBObyBwc2V1ZG90 ZXJtaW5hbCBjb250cm9sXG4iKTsKKyAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBp ZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsgfQorICAgIGZsYWcgPSAx OworI2VuZGlmIC8qIE5FVFBUWSAqLworI2VuZGlmIC8qIFVOSVggKi8KKworI2lmbmRlZiBDS19S RVNFTkQKKyAgICBwcmludGYoIiBObyBSRVNFTkQgY29tbWFuZFxuIik7CisgICAgaWYgKCsrbGlu ZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBsaW5l cyA9IDA7IH0KKyAgICBmbGFnID0gMTsKKyNlbmRpZiAvKiBDS19SRVNFTkQgKi8KKworI2lmZGVm IE9TMgorI2lmZGVmIF9fMzJCSVRfXworI2lmbmRlZiBPUzJNT1VTRQorICAgIHByaW50ZigiIE5v IE1vdXNlIHN1cHBvcnRcbiIpOworICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlm ICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9CisgICAgZmxhZyA9IDE7 CisjZW5kaWYgLyogX18zMkJJVF9fICovCisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogT1My TU9VU0UgKi8KKworI2lmZGVmIE9TMgorI2lmbmRlZiBOVAorI2lmbmRlZiBDS19SRVhYCisgICAg cHJpbnRmKCIgTm8gUkVYWCBzY3JpcHQgbGFuZ3VhZ2UgaW50ZXJmYWNlXG4iKTsKKyAgICBpZiAo KytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNl IGxpbmVzID0gMDsgfQorICAgIGZsYWcgPSAxOworI2VuZGlmIC8qIENLX1JFWFggKi8KKyNlbmRp ZiAvKiBOVCAqLworI2VuZGlmIC8qIE9TMiAqLworCisjaWZuZGVmIElLU0QKKyAgICBwcmludGYo IiBObyBJbnRlcm5ldCBLZXJtaXQgU2VydmljZVxuIik7CisgICAgaWYgKCsrbGluZXMgPiBjbWRf cm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBsaW5lcyA9IDA7IH0K KyAgICBmbGFnID0gMTsKKyNlbmRpZiAvKiBJS1NEICovCisKKyAgICBpZiAoZmxhZyA9PSAwKSB7 CisgICAgICAgIHByaW50ZigiIE5vbmVcbiIpOworICAgICAgICBpZiAoKytsaW5lcyA+IGNtZF9y b3dzIC0gMykKKyAgICAgICAgICB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGlu ZXMgPSAwOyB9CisgICAgfQorICAgIHByaW50ZigiXG4iKTsKKyAgICBpZiAoKytsaW5lcyA+IGNt ZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsg fQorCisjaWZkZWYgQ0tfVVRTTkFNRQorICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7 IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9CisgICAgcHJpbnRm KCJIb3N0IGluZm86XG4iKTsKKyAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAo IWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsgfQorICAgIHByaW50ZigiIE1h Y2hpbmU6ICAgICVzXG4iLHVubV9tY2hbMF0gPyB1bm1fbWNoIDogIih1bmtub3duKSIpOworICAg IGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7 IGVsc2UgbGluZXMgPSAwOyB9CisgICAgcHJpbnRmKCIgTW9kZWw6ICAgICAgJXNcbiIsdW5tX21v ZFswXSA/IHVubV9tb2QgOiAiKHVua25vd24pIik7CisgICAgaWYgKCsrbGluZXMgPiBjbWRfcm93 cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBsaW5lcyA9IDA7IH0KKyAg ICBwcmludGYoIiBPUzogICAgICAgICAlc1xuIix1bm1fbmFtWzBdID8gdW5tX25hbSA6ICIodW5r bm93bikiKTsKKyAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUo KSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsgfQorICAgIHByaW50ZigiIE9TIFJlbGVhc2U6 ICVzXG4iLHVubV9yZWxbMF0gPyB1bm1fcmVsIDogIih1bmtub3duKSIpOworICAgIGlmICgrK2xp bmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGlu ZXMgPSAwOyB9CisgICAgcHJpbnRmKCIgT1MgVmVyc2lvbjogJXNcbiIsdW5tX3ZlclswXSA/IHVu bV92ZXIgOiAiKHVua25vd24pIik7CisgICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsg aWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBsaW5lcyA9IDA7IH0KKyAgICBwcmludGYo IlxuIik7CisgICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkp IHJldHVybigxKTsgZWxzZSBsaW5lcyA9IDA7IH0KKyNlbmRpZiAvKiBDS19VVFNOQU1FICovCisK Ky8qCisgIFByaW50IGNvbXBpbGUtdGltZSAoLUQpIG9wdGlvbnMsIGFzIHdlbGwgYXMgQyBwcmVw cm9jZXNzb3IKKyAgcHJlZGVmaW5lZCBzeW1ib2xzIHRoYXQgbWlnaHQgYWZmZWN0IHVzLi4uCisq LworI2lmZGVmIEtUQVJHRVQKKyAgICB7CisgICAgICAgIGNoYXIgKiBzOyAgICAgICAgICAgICAg ICAgICAgICAgLyogTWFrZWZpbGUgdGFyZ2V0ICovCisgICAgICAgIHMgPSBLVEFSR0VUOworICAg ICAgICBpZiAoIXMpIHMgPSAiIjsKKyAgICAgICAgaWYgKCEqcykgcyA9ICIodW5rbm93bikiOwor ICAgICAgICBwcmludGYoIlxuIik7CisgICAgICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAz KSB7CisgICAgICAgICAgICBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0g MDsKKyAgICAgICAgfQorICAgICAgICBwcmludGYoIlRhcmdldDogJXNcbiIsIHMpOworICAgICAg ICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeworICAgICAgICAgICAgaWYgKCFhc2ttb3Jl KCkpIHJldHVybigxKTsgZWxzZSBsaW5lcyA9IDA7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYg LyogS1RBUkdFVCAqLworCisjaWZkZWYgX19WRVJTSU9OX18KKyNpZmRlZiBfX0dOVUNfXworICAg IHByaW50ZigiR0NDIHZlcnNpb246ICVzXG4iLCBfX1ZFUlNJT05fXyk7CisjZWxzZQorICAgIHBy aW50ZigiQ29tcGlsZXIgdmVyc2lvbjogJXNcbiIsIF9fVkVSU0lPTl9fKTsKKyNlbmRpZiAvKiBf X0dOVUNfXyAqLworICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9y ZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9CisjZW5kaWYgLyogX19WRVJTSU9OX18g Ki8KKworI2lmZGVmIF9fREFURV9fICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEdOVSBhbmQg b3RoZXIgQU5TSSAqLworI2lmZGVmIF9fVElNRV9fCisgICAgcHJpbnRmKCJDb21waWxlZCAlcyAl cywgb3B0aW9uczpcbiIsIF9fREFURV9fLCBfX1RJTUVfXyk7CisjZWxzZQorICAgIHByaW50Zigi Q29tcGlsZWQgJXMsIG9wdGlvbnM6XG4iLCBfX0RBVEVfXyk7CisjZW5kaWYgLyogX19USU1FX18g Ki8KKyNlbHNlIC8qICFfX0RBVEVfXyAqLworICAgIHByaW50ZigiQ29tcGlsZXIgb3B0aW9uczpc biIpOworI2VuZGlmIC8qIF9fREFURV9fICovCisgICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAt IDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBsaW5lcyA9IDA7IH0KKworICAg IGZvciAoaSA9IDA7IGkgPCBub3B0bGlzdDsgaSsrKSAgICAgIC8qIFByaW50IHNvcnRlZCBvcHRp b24gbGlzdCAqLworICAgICAgaWYgKCFwcnRvcHQoJmxpbmVzLG9wdGxpc3RbaV0pKQorICAgICAg ICByZXR1cm4oMCk7CisKKyAgICBpZiAoIXBydG9wdCgmbGluZXMsIiIpKSByZXR1cm4oMCk7ICAv KiBTdGFydCBhIG5ldyBzZWN0aW9uICovCisKKy8qIFNpemVzIG9mIGRhdGEgdHlwZXMgKi8KKwor ICAgIGNrbWFrbXNnKGxpbmUsCisgICAgICAgICAgICAgTElOQlVGU0laLAorICAgICAgICAgICAg ICJieXRlIG9yZGVyOiAiLAorICAgICAgICAgICAgIGJ5dGVvcmRlciA/ICJsaXR0bGUiIDogImJp ZyIsCisgICAgICAgICAgICAgIiBlbmRpYW4iLAorICAgICAgICAgICAgIE5VTEwKKyAgICAgICAg ICAgICApOworICAgIHsKKy8qIFdoZXRoZXIgdG8gdXNlICVkIG9yICVsZCB3aXRoIHNpemVvZiBp cyBhIHBvcnRhYmlsaXR5IGlzc3VlLCBzby4uLiAqLworCWludCBzaXplID0gMDsKKworCWlmICgh cHJ0b3B0KCZsaW5lcyxsaW5lKSkgcmV0dXJuKDApOworCWlmICghcHJ0b3B0KCZsaW5lcywiIikp IHJldHVybigwKTsgIC8qIFN0YXJ0IGEgbmV3IHNlY3Rpb24gKi8KKworCXNpemUgPSAoaW50KXNp emVvZihpbnQpOworCXNwcmludGYobGluZSwic2l6ZW9mczogaW50PSVkIixzaXplKTsgLyogU0FG RSAqLworCWlmICghcHJ0b3B0KCZsaW5lcyxsaW5lKSkgcmV0dXJuKDApOworCisJc2l6ZSA9IChp bnQpc2l6ZW9mKGxvbmcpOworCXNwcmludGYobGluZSwibG9uZz0lZCIsc2l6ZSk7IC8qIFNBRkUg Ki8KKwlpZiAoIXBydG9wdCgmbGluZXMsbGluZSkpIHJldHVybigwKTsKKworI2lmbmRlZiBPUzIK KwkvKiBXaW5kb3dzIGRvZXNuJ3QgaGF2ZSBvZmZfdCAqLworCXNpemUgPSAoaW50KXNpemVvZihv ZmZfdCk7CisJc3ByaW50ZihsaW5lLCJvZmZfdD0lZCIsc2l6ZSk7IC8qIFNBRkUgKi8KKwlpZiAo IXBydG9wdCgmbGluZXMsbGluZSkpIHJldHVybigwKTsKKyNlbmRpZiAvKiBPUzIgKi8KKworCXNp emUgPSAoaW50KXNpemVvZihDS19PRkZfVCk7CisJc3ByaW50ZihsaW5lLCJDS19PRkZfVD0lZCIs c2l6ZSk7IC8qIFNBRkUgKi8KKwlpZiAoIXBydG9wdCgmbGluZXMsbGluZSkpIHJldHVybigwKTsK KworI2lmZGVmIEJJR0JVRk9LCisJc2l6ZSA9IChpbnQpc2l6ZW9mKHNpemVfdCk7CisJc3ByaW50 ZihsaW5lLCJzaXplX3Q9JWQiLHNpemUpOyAvKiBTQUZFICovCisJaWYgKCFwcnRvcHQoJmxpbmVz LGxpbmUpKSByZXR1cm4oMCk7CisjZW5kaWYgLyogQklHQlVGT0sgKi8KKworCXNpemUgPSAoaW50 KXNpemVvZihzaG9ydCk7CisJc3ByaW50ZihsaW5lLCJzaG9ydD0lZCIsc2l6ZSk7IC8qIFNBRkUg Ki8KKwlpZiAoIXBydG9wdCgmbGluZXMsbGluZSkpIHJldHVybigwKTsKKworCXNpemUgPSAoaW50 KXNpemVvZihjaGFyKTsKKwlzcHJpbnRmKGxpbmUsImNoYXI9JWQiLHNpemUpOyAvKiBTQUZFICov CisJaWYgKCFwcnRvcHQoJmxpbmVzLGxpbmUpKSByZXR1cm4oMCk7CisKKwlzaXplID0gKGludClz aXplb2YoY2hhciAqKTsKKwlzcHJpbnRmKGxpbmUsImNoYXIqPSVkIixzaXplKTsgLyogU0FGRSAq LworCWlmICghcHJ0b3B0KCZsaW5lcyxsaW5lKSkgcmV0dXJuKDApOworCisJc2l6ZSA9IChpbnQp c2l6ZW9mKGZsb2F0KTsKKwlzcHJpbnRmKGxpbmUsImZsb2F0PSVkIixzaXplKTsgLyogU0FGRSAq LworCWlmICghcHJ0b3B0KCZsaW5lcyxsaW5lKSkgcmV0dXJuKDApOworCisJc2l6ZSA9IChpbnQp c2l6ZW9mKGRvdWJsZSk7CisJc3ByaW50ZihsaW5lLCJkb3VibGU9JWQiLHNpemUpOyAvKiBTQUZF ICovCisJaWYgKCFwcnRvcHQoJmxpbmVzLGxpbmUpKSByZXR1cm4oMCk7CisgICAgfQorCisjaWZk ZWYgRk5GTE9BVAorICAgIGlmICghcHJ0b3B0KCZsaW5lcywiIikpIHJldHVybigwKTsgIC8qIFN0 YXJ0IGEgbmV3IHNlY3Rpb24gKi8KKyAgICBpZiAoIXBydG9wdCgmbGluZXMsImZsb2F0aW5nLXBv aW50OiIpKSByZXR1cm4oMCk7CisgICAgc3ByaW50ZihsaW5lLCJwcmVjaXNpb249JWQiLGZwX2Rp Z2l0cyk7IC8qIFNBRkUgKi8KKyAgICBpZiAoIXBydG9wdCgmbGluZXMsbGluZSkpIHJldHVybigw KTsKKyAgICBzcHJpbnRmKGxpbmUsInJvdW5kaW5nPSVkIixmcF9yb3VuZGluZyk7IC8qIFNBRkUg Ki8KKyAgICBpZiAoIXBydG9wdCgmbGluZXMsbGluZSkpIHJldHVybigwKTsKKyNlbmRpZiAvKiBG TkZMT0FUICovCisKKyAgICBwcnRvcHQoJmxpbmVzLCIiKTsKKyAgICByZXR1cm4oMCk7Cit9Cisj ZW5kaWYgLyogTk9TSE9XICovCisjZW5kaWYgLyogTk9JQ1AgKi8KCmRpZmYgLS1naXQgYS9ja2Vy bWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdXVzNi5jIGIvY2tlcm1pdC05LjAu MzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3V1czYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwLi5hNDk5MGM2Ci0tLSAvZGV2L251bGwKKysrIGIvY2tlcm1pdC05LjAuMzAy LWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3V1czYuYwpAQCAtMCwwICsxLDEyMDA5IEBACisjaW5j bHVkZSAiY2tjc3ltLmgiCisjaWZuZGVmIE5PSUNQCisKKy8qCisgIEF1dGhvcnM6CisgICAgRnJh bmsgZGEgQ3J1eiA8ZmRjQGNvbHVtYmlhLmVkdT4sCisgICAgICBUaGUgS2VybWl0IFByb2plY3Qs IENvbHVtYmlhIFVuaXZlcnNpdHksIE5ldyBZb3JrIENpdHkKKyAgICBKZWZmcmV5IEUgQWx0bWFu IDxqYWx0bWFuQHNlY3VyZS1lbmRwb2ludHMuY29tPgorICAgICAgU2VjdXJlIEVuZHBvaW50cyBJ bmMuLCBOZXcgWW9yayBDaXR5CisKKyAgQ29weXJpZ2h0IChDKSAxOTg1LCAyMDExLAorICAgIFRy dXN0ZWVzIG9mIENvbHVtYmlhIFVuaXZlcnNpdHkgaW4gdGhlIENpdHkgb2YgTmV3IFlvcmsuCisg ICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFNlZSB0aGUgQy1LZXJtaXQgQ09QWUlORy5UWFQgZmls ZSBvciB0aGUKKyAgICBjb3B5cmlnaHQgdGV4dCBpbiB0aGUgY2tjbWFpLmMgbW9kdWxlIGZvciBk aXNjbGFpbWVyIGFuZCBwZXJtaXNzaW9ucy4KKyovCisKKy8qIEluY2x1ZGVzICovCisKKyNpbmNs dWRlICJja2NkZWIuaCIKKyNpbmNsdWRlICJja2Nhc2MuaCIKKyNpbmNsdWRlICJja2NrZXIuaCIK KyNpbmNsdWRlICJja3V1c3IuaCIKKyNpbmNsdWRlICJja2N4bGEuaCIKKyNpbmNsdWRlICJja2Nu ZXQuaCIgICAgICAgICAgICAgICAgICAgICAvKiBOZXR3b3JrIHN5bWJvbHMgKi8KKyNpbmNsdWRl IDxzaWduYWwuaD4KKworI2lmbmRlZiBOT1NUQVQKKyNpZmRlZiBWTVMKKy8qIDIwMTAtMDMtMDkg U01TLiAgVkFYIEMgbmVlZHMgaGVscCB0byBmaW5kICJzeXMiLiAgSXQncyBlYXNpZXIgbm90IHRv IHRyeS4gKi8KKyNpbmNsdWRlIDxzdGF0Lmg+CisjZWxzZSAvKiBkZWYgVk1TICovCisjaW5jbHVk ZSA8c3lzL3N0YXQuaD4KKyNlbmRpZiAvKiBkZWYgVk1TIFtlbHNlXSAqLworI2VuZGlmIC8qIE5P U1RBVCAqLworCisjaWZkZWYgVk1TCisjaWZuZGVmIFRDUFNPQ0tFVAorI2luY2x1ZGUgPGVycm5v Lmg+CisjZW5kaWYgLyogVENQU09DS0VUICovCisjZW5kaWYgLyogVk1TICovCisKKyNpZmRlZiBk YXRhZ2VuZXJhbAorI2RlZmluZSBmZ2V0cyhzdHJpbmdidWYsbWF4LGZkKSBkZ19mZ2V0cyhzdHJp bmdidWYsbWF4LGZkKQorI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCisKKyNpZmRlZiBRTlg2Cisj ZGVmaW5lIHJlYWRibG9jayBrcmVhZGJsb2NrCisjZW5kaWYgLyogUU5YNiAqLworCisvKiBFeHRl cm5hbCBLZXJtaXQgVmFyaWFibGVzLCBzZWUgY2ttYWluLmMgZm9yIGRlc2NyaXB0aW9uLiAqLwor CitleHRlcm4geHhfc3RycCB4eHN0cmluZzsKKworZXh0ZXJuIGludCBsb2NhbCwgeGl0c3RhLCBi aW5hcnksIHBhcml0eSwgZXNjYXBlLCBmbG93LCBjbWRfcm93cywgdHVybiwKKyAgdHVybmNoLCBk dXBsZXgsIGNreGVjaCwgc2VzbG9nLCBkZmxvYywgY25mbGcsIHRsZXZlbCwgcGZsYWcsIG1zZ2Zs ZywgbWRtdHlwLAorICB6aW5jbnQsIHF1aWV0LCByZXBhcnMsIHRlY2hvLCBuZXR3b3JrLCBuenhv cHRzLCB3aGF0LCBmaWxlcGVlaywgcmVjdXJzaXZlOworCitleHRlcm4gaW50IHhhc2ttb3JlLCB0 dF9yb3dzLCB0dF9jb2xzLCBjbWRfY29scywgZ19tYXRjaGRvdCwgZGlyYWN0aXZlLAorICB4Y21k c3JjLCBuc2NhbmZpbGUsIHJlbGlhYmxlLCBub2xpbmtzLCBjbWZsZ3M7CisKKyNpZmRlZiBWTVNP UlVOSVgKK2V4dGVybiBpbnQgemdmc19kaXIsIHpnZnNfbGluazsKKyNlbmRpZiAvKiBWTVNPUlVO SVggKi8KKworI2lmZGVmIENLX0lGUk8KKyAgZXh0ZXJuIGludCByZW1vbmx5OworI2VuZGlmIC8q IENLX0lGUk8gKi8KKworI2lmZGVmIE9TMgorZXh0ZXJuIGludCBTdGFydGVkRnJvbURpYWxlciA7 CitleHRlcm4gaW50IHZtb2RlOworZXh0ZXJuIGludCBrOTVzdGRvdXQ7CisjaWZuZGVmIE5UCisj ZGVmaW5lIElOQ0xfTk9QTQorI2RlZmluZSBJTkNMX1ZJTyAgICAgICAgICAgICAgICAgICAgICAg IC8qIE5lZWRlZCBmb3IgY2tvY29uLmggKi8KKyNpbmNsdWRlIDxvczIuaD4KKyN1bmRlZiBDT01N RU5UCisjZWxzZQorI2RlZmluZSBBUElSRVQgVUxPTkcKKyNpbmNsdWRlIDx3aW5kb3dzLmg+Cisj aW5jbHVkZSA8dGFwaS5oPgorI2luY2x1ZGUgImNrbnRhcC5oIgorI2VuZGlmIC8qIE5UICovCisj aW5jbHVkZSAiY2tvY29uLmgiCisjZW5kaWYgLyogT1MyICovCisKK2V4dGVybiBsb25nIHZlcm51 bSwgc3BlZWQ7CitleHRlcm4gY2hhciAqdmVyc2lvLCAqcHJvdHYsICpja3h2LCAqY2t6diwgKmZu c3YsICpjb25udiwgKmRmdHR5LCAqY21kdjsKK2V4dGVybiBjaGFyICpkaWFsdiwgKmxvZ2ludiwg KmZvcl9kZWZbXSwgKndoaWxfZGVmW10sICp4aWZfZGVmW10sICpzd19kZWZbXTsKK2V4dGVybiBj aGFyICpmb3pfZGVmW107CitleHRlcm4gY2hhciAqY2t4c3lzLCAqY2t6c3lzOworI2lmbmRlZiBP UzIKK2V4dGVybiBjaGFyICpESVJDTUQ7CisjaWZuZGVmIFVOSVgKK2V4dGVybiBjaGFyICpERUxD TUQ7CisjZW5kaWYgLyogVU5JWCAqLworI2VuZGlmIC8qIE9TMiAqLworZXh0ZXJuIGNoYXIgdHRu YW1lW10sIGZpbG5hbVtdOworZXh0ZXJuIENIQVIgc3N0YXRlLCBmZW9sOworZXh0ZXJuIGNoYXIg KnppbnB0cjsKKworI2lmZGVmIFVOSVgKK2V4dGVybiBjaGFyICoqIG10Y2hzOyAgICAgICAgICAg ICAgICAgICAvKiB6eHBhbmQoKSBmaWxlIGxpc3QgKi8KKyNlbmRpZiAvKiBVTklYICovCisKKyNp Zm5kZWYgTk9YRkVSCitleHRlcm4gaW50IG9vcHRzLCBvbW9kZSwgb25hbWUsIG9wYXRoOyAgLyog Ty1QYWNrZXQgb3B0aW9ucyAqLworCitleHRlcm4gaW50IHN0ZGluZiwgc25kc3JjLCBzaXplLCBy cHNpeiwgdXJwc2l6LCBmbmNudiwgZm5ycGF0aCwgZGlzcGxhLAorICBzdGRvdWYsIGlzZ3Vlc3Qs IHBrdGxvZywgbmZpbHMsIGtlZXAsIG1heHJwcywgZmJsa3NpeiwgZnJlY2wsIGZyZWNmbSwKKyAg YXRjYXByLCBhdGRpc28sIHNwc2l6Ziwgc3BzaXosIHNwc2l6ciwgc3BtYXgsIHdzbG90ciwgcHJl Zml4aW5nLAorICBmbmNhY3QsIGZuc3BhdGgsIG5wcm90b3MsIGdfcHJvdG8sIGdfdXJwc2l6LCBn X3Nwc2l6ZiwKKyAgZ19zcHNpeiwgZ19zcHNpenIsIGdfc3BtYXgsIGdfd3Nsb3RyLCBnX3ByZWZp eGluZywgZ19mbmNhY3QsIGdfZm5jbnYsCisgIGdfZm5zcGF0aCwgZ19mbnJwYXRoLCB4ZnJ4bGEs IGdfeGZyeGxhOworCitleHRlcm4gY2hhciAqY21hcmcsICpjbWFyZzI7CisKKyNpZm5kZWYgTk9N U0VORCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBNdWx0aXBsZSBTRU5EICovCitleHRlcm4g Y2hhciAqbXNmaWxlc1tdOworI2VuZGlmIC8qIE5PTVNFTkQgKi8KK2V4dGVybiBjaGFyIGZzcGVj W107ICAgICAgICAgICAgICAgICAgICAvKiBNb3N0IHJlY2VudCBmaWxlc3BlYyAqLworZXh0ZXJu IGludCBmc3BlY2xlbjsKKworI2lmZGVmIENLX1RNUERJUgorZXh0ZXJuIGludCBmX3RtcGRpcjsg ICAgICAgICAgICAgICAgICAgIC8qIERpcmVjdG9yeSBjaGFuZ2VkIHRlbXBvcmFyaWx5ICovCitl eHRlcm4gY2hhciBzYXZkaXJbXTsgICAgICAgICAgICAgICAgICAgLyogRm9yIHNhdmluZyBjdXJy ZW50IGRpcmVjdG9yeSAqLworI2VuZGlmIC8qIENLX1RNUERJUiAqLworCitleHRlcm4gc3RydWN0 IGtleXRhYiBwcm90b3NbXTsgICAgICAgICAgLyogRmlsZSB0cmFuc2ZlciBwcm90b2NvbHMgKi8K K2V4dGVybiBzdHJ1Y3QgY2tfcCBwdGFiW05QUk9UT1NdOworI2VuZGlmIC8qIE5PWEZFUiAqLwor CisjaWZkZWYgRENNREJVRiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRGVjbGFyYXRpb25z IGZyb20gY21kIHBhY2thZ2UgKi8KK2V4dGVybiBjaGFyICpjbWRidWYsICphdG1idWY7ICAgICAg ICAgICAvKiBDb21tYW5kIGJ1ZmZlcnMgKi8KKyNlbHNlCitleHRlcm4gY2hhciBjbWRidWZbXSwg YXRtYnVmW107ICAgICAgICAgLyogQ29tbWFuZCBidWZmZXJzICovCisjZW5kaWYgLyogRENNREJV RiAqLworCitleHRlcm4gaW50IG5vcHVzaDsKKworI2lmbmRlZiBOT1NQTAoraW50IGFza2ZsYWcg PSAwOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFTSy1jbGFzcyBjb21tYW5kIGFjdGl2ZSAq LworaW50IGVjaG9zdGFycyA9IDA7CQkJLyogQVNLUSBzaG91bGQgZWNobyBhc3Rlcmlza3MgKi8K K2V4dGVybiBjaGFyICoqYV9wdHJbXTsKK2V4dGVybiBpbnQgYV9kaW1bXTsKK2V4dGVybiBjaGFy ICoqbV94YXJnW107CitleHRlcm4gaW50IG5feGFyZ1tdOworZXh0ZXJuIHN0cnVjdCBtdGFiICpt YWN0YWI7CitleHRlcm4gaW50IG5tYWM7CitleHRlcm4gbG9uZyBja19hbGFybTsKK2V4dGVybiBj aGFyIGFscm1fZGF0ZVtdLCBhbHJtX3RpbWVbXTsKK2V4dGVybiBpbnQgeF9pZm51bTsKKyNlbmRp ZiAvKiBOT1NQTCAqLworCitleHRlcm4gaW50IGluc2VydmVyOyAgICAgICAgICAgICAgICAgICAg LyogSSBhbSBJS1NEICovCitleHRlcm4gaW50IGJhY2tncmQ7ICAgICAgICAgICAgICAgICAgICAg LyogS2VybWl0IGV4ZWN1dGluZyBpbiBiYWNrZ3JvdW5kICovCitleHRlcm4gY2hhciBwc2F2ZVtd OyAgICAgICAgICAgICAgICAgICAgLyogRm9yIHNhdmluZyAmIHJlc3RvcmluZyBwcm9tcHQgKi8K K2V4dGVybiBjaGFyICp0cDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBUZW1wb3JhcnkgYnVm ZmVyICovCisKK2ludCByZWFkYmxvY2sgPSA0MDk2OyAgICAgICAgICAgICAgICAgICAvKiBSRUFE IGJ1ZmZlciBzaXplICovCitDSEFSICogcmVhZGJ1ZiA9IE5VTEw7ICAgICAgICAgICAgICAgICAg LyogUG9pbnRlciB0byByZWFkIGJ1ZmZlciAqLworaW50IHJlYWRzaXplID0gMDsgICAgICAgICAg ICAgICAgICAgICAgIC8qIE51bWJlciBvZiBjaGFycyBhY3R1YWxseSByZWFkICovCitpbnQgZ2V0 Y21kID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogR0VULWNsYXNzIGNvbW1hbmQgd2Fz IGdpdmVuICovCisKK2V4dGVybiBpbnQgemNoa29kLCB6Y2hraWQ7CisKKy8qICBDIEsgVSBVIFMg NiAtLSAgIlVzZXIgSW50ZXJmYWNlIiBmb3IgVW5peCBLZXJtaXQgKFBhcnQgNikgICovCisKK3N0 cnVjdCBrZXl0YWIgZGVsdGFiW10gPSB7ICAgICAgICAgICAgICAvKiBERUxFVEUgQ29tbWFuZCBP cHRpb25zICovCisgICAgeyAiL2FsbCIsICAgICAgICAgICBERUxfQUxMLCAgQ01fSU5WIH0sCisg ICAgeyAiL2FmdGVyIiwgICAgICAgICBERUxfQUZULCAgQ01fQVJHIH0sCisgICAgeyAiL2FzayIs ICAgICAgICAgICBERUxfQVNLLCAgMCB9LAorICAgIHsgIi9iZWZvcmUiLCAgICAgICAgREVMX0JF RiwgIENNX0FSRyB9LAorICAgIHsgIi9kaXJlY3RvcmllcyIsICAgREVMX0RJUiwgIDAgfSwKKyAg ICB7ICIvZG90ZmlsZXMiLCAgICAgIERFTF9ET1QsICAwIH0sCisgICAgeyAiL2V4Y2VwdCIsICAg ICAgICBERUxfRVhDLCAgQ01fQVJHIH0sCisgICAgeyAiL2hlYWRpbmciLCAgICAgICBERUxfSERH LCAgMCB9LAorICAgIHsgIi9sIiwgICAgICAgICAgICAgREVMX0xJUywgIENNX0lOVnxDTV9BQlIg fSwKKyAgICB7ICIvbGFyZ2VyLXRoYW4iLCAgIERFTF9MQVIsICBDTV9BUkcgfSwKKyAgICB7ICIv bGlzdCIsICAgICAgICAgIERFTF9MSVMsICAwIH0sCisgICAgeyAiL2xvZyIsICAgICAgICAgICBE RUxfTElTLCAgQ01fSU5WIH0sCisgICAgeyAiL25vYXNrIiwgICAgICAgICBERUxfTkFTLCAgMCB9 LAorICAgIHsgIi9ub2RvdGZpbGVzIiwgICAgREVMX05PRCwgIDAgfSwKKyAgICB7ICIvbm9oZWFk aW5nIiwgICAgIERFTF9OT0gsICAwIH0sCisgICAgeyAiL25vbCIsICAgICAgICAgICBERUxfTk9M LCAgQ01fSU5WfENNX0FCUiB9LAorICAgIHsgIi9ub2xpc3QiLCAgICAgICAgREVMX05PTCwgIDAg fSwKKyAgICB7ICIvbm9sb2ciLCAgICAgICAgIERFTF9OT0wsICBDTV9JTlYgfSwKKyAgICB7ICIv bm9wYWdlIiwgICAgICAgIERFTF9OT1AsICAwIH0sCisgICAgeyAiL25vdC1hZnRlciIsICAgICBE RUxfTkFGLCAgQ01fQVJHIH0sCisgICAgeyAiL25vdC1iZWZvcmUiLCAgICBERUxfTkJGLCAgQ01f QVJHIH0sCisgICAgeyAiL25vdC1zaW5jZSIsICAgICBERUxfTkFGLCAgQ01fSU5WfENNX0FSRyB9 LAorICAgIHsgIi9wYWdlIiwgICAgICAgICAgREVMX1BBRywgIDAgfSwKKyAgICB7ICIvcXVpZXQi LCAgICAgICAgIERFTF9RVUksICBDTV9JTlYgfSwKKyAgICB7ICIvcmVjdXJzaXZlIiwgICAgIERF TF9SRUMsICAwIH0sCisgICAgeyAiL3NpbXVsYXRlIiwgICAgICBERUxfU0lNLCAgMCB9LAorICAg IHsgIi9zaW5jZSIsICAgICAgICAgREVMX0FGVCwgIENNX0FSR3xDTV9JTlYgfSwKKyAgICB7ICIv c21hbGxlci10aGFuIiwgIERFTF9TTUEsICBDTV9BUkcgfSwKKyAgICB7ICIvc3VtbWFyeSIsICAg ICAgIERFTF9TVU0sICAwIH0sCisgICAgeyAiL3RyZWUiLCAgICAgICAgICBERUxfQUxMLCAgMCB9 LAorICAgIHsgIi90eXBlIiwgICAgICAgICAgREVMX1RZUCwgIENNX0FSRyB9LAorICAgIHsgIi92 ZXJib3NlIiwgICAgICAgREVMX1ZSQiwgIENNX0lOViB9Cit9OworaW50IG5kZWx0YWIgPSBzaXpl b2YoZGVsdGFiKS9zaXplb2Yoc3RydWN0IGtleXRhYik7CisKKy8qIC9RVUlFVC0vVkVSQk9TRSAo L0xJU1QtL05PTElTVCkgKC9MT0ctL05PTE9HKSB0YWJsZSAqLworCitzdHJ1Y3Qga2V5dGFiIHF2 c3d0YWJbXSA9IHsKKyAgICB7ICIvbCIsICAgICAgICAgICBERUxfTElTLCAgQ01fSU5WfENNX0FC UiB9LAorICAgIHsgIi9saXN0IiwgICAgICAgIERFTF9MSVMsICAwIH0sCisgICAgeyAiL2xvZyIs ICAgICAgICAgREVMX0xJUywgIENNX0lOViB9LAorICAgIHsgIi9ub2wiLCAgICAgICAgIERFTF9O T0wsICBDTV9JTlZ8Q01fQUJSIH0sCisgICAgeyAiL25vbGlzdCIsICAgICAgREVMX05PTCwgIDAg fSwKKyAgICB7ICIvbm9sb2ciLCAgICAgICBERUxfTk9MLCAgQ01fSU5WIH0sCisgICAgeyAiL3F1 aWV0IiwgICAgICAgREVMX1FVSSwgIENNX0lOViB9LAorICAgIHsgIi92ZXJib3NlIiwgICAgIERF TF9WUkIsICBDTV9JTlYgfQorfTsKK2ludCBucXZzd3RhYiA9IHNpemVvZihxdnN3dGFiKS9zaXpl b2Yoc3RydWN0IGtleXRhYik7CisKK3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIHJlbmFtc3dbXSA9IHsK KyAgICB7ICIvY29sbGlzaW9uIiwgICBSRU5fT1ZXLCAgQ01fQVJHIH0sCisjaWZuZGVmIE5PVU5J Q09ERQorICAgIHsgIi9jb252ZXJ0IiwgICAgIFJFTl9YTEEsICBDTV9BUkcgfSwKKyNlbmRpZgkv KiBOT1VOSUNPREUgKi8KKyAgICB7ICIvZml4c3BhY2VzIiwgICBSRU5fU1BBLCAgQ01fQVJHIH0s CisgICAgeyAiL2wiLCAgICAgICAgICAgREVMX0xJUywgIENNX0lOVnxDTV9BQlIgfSwKKyAgICB7 ICIvbGlzdCIsICAgICAgICBERUxfTElTLCAgMCAgICAgIH0sCisgICAgeyAiL2xvZyIsICAgICAg ICAgREVMX0xJUywgIENNX0lOViB9LAorICAgIHsgIi9sb3dlciIsICAgICAgIFJFTl9MT1csICBD TV9BUkcgfSwKKyAgICB7ICIvbm9sIiwgICAgICAgICBERUxfTk9MLCAgQ01fSU5WfENNX0FCUiB9 LAorICAgIHsgIi9ub2xpc3QiLCAgICAgIERFTF9OT0wsICAwICAgICAgfSwKKyAgICB7ICIvbm9s b2ciLCAgICAgICBERUxfTk9MLCAgQ01fSU5WIH0sCisgICAgeyAiL3F1aWV0IiwgICAgICAgREVM X1FVSSwgIENNX0lOViB9LAorICAgIHsgIi9yZXBsYWNlIiwgICAgIFJFTl9SUEwsICBDTV9BUkcg fSwKKyAgICB7ICIvc2ltdWxhdGUiLCAgICBERUxfU0lNLCAgMCAgICAgIH0sCisgICAgeyAiL3Vw cGVyIiwgICAgICAgUkVOX1VQUCwgIENNX0FSRyB9LAorICAgIHsgIi92ZXJib3NlIiwgICAgIERF TF9WUkIsICBDTV9JTlYgfQorfTsKK3N0YXRpYyBpbnQgbnJlbmFtc3cgPSBzaXplb2YocmVuYW1z dykvc2l6ZW9mKHN0cnVjdCBrZXl0YWIpOworCitzdGF0aWMgc3RydWN0IGtleXRhYiByZW5hbXNl dFtdID0geworICAgIHsgImNvbGxpc2lvbiIsICAgIFJFTl9PVlcsICAwIH0sCisgICAgeyAibGlz dCIsICAgICAgICAgREVMX0xJUywgIDAgfQorfTsKK3N0YXRpYyBpbnQgbnJlbmFtc2V0ID0gc2l6 ZW9mKHJlbmFtc2V0KS9zaXplb2Yoc3RydWN0IGtleXRhYik7CisKKy8qIEFyZ3MgZm9yIFJFTkFN RSAvTE9XRVI6IGFuZCAvVVBQRVI6ICovCisKK3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIHJfdXBwZXJb XSA9IHsKKyAgICB7ICJhbGwiLCAgIDEsIDAgfSwKKyAgICB7ICJsb3dlciIsIDAsIDAgfQorfTsK Kworc3RhdGljIHN0cnVjdCBrZXl0YWIgcl9sb3dlcltdID0geworICAgIHsgImFsbCIsICAgMSwg MCB9LAorICAgIHsgInVwcGVyIiwgMCwgMCB9Cit9OworCisvKiBBcmdzIGZvciBSRU5BTUUgL0NP TExJU0lPTi4uLiAqLworCisjZGVmaW5lIFJFTlhfRkFJTCAwCisjZGVmaW5lIFJFTlhfT1ZXUiAx CisjZGVmaW5lIFJFTlhfU0tJUCAyCisKK3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIHJfY29sbGlzaW9u W10gPSB7CisgICAgeyAiZmFpbCIsICAgICAgUkVOWF9GQUlMLCAwIH0sCisgICAgeyAib3Zlcndy aXRlIiwgUkVOWF9PVldSLCAwIH0sCisgICAgeyAicHJvY2VlZCIsICAgUkVOWF9TS0lQLCBDTV9J TlYgfSwKKyAgICB7ICJza2lwIiwgICAgICBSRU5YX1NLSVAsIDAgfQorfTsKK3N0YXRpYyBpbnQg bnJfY29sbGlzaW9uID0gc2l6ZW9mKHJfY29sbGlzaW9uKS9zaXplb2Yoc3RydWN0IGtleXRhYik7 CisKK3N0cnVjdCBrZXl0YWIgY29weXRhYltdID0geworICAgIHsgIi9hcHBlbmQiLCAgICAgIDk5 OCwgICAgICAwIH0sCisjaWZuZGVmIE5PU1BMCisgICAgeyAiL2Zyb21iNjQiLCAgICAgOTk3LCAg ICAgIDAgfSwKKyNlbmRpZiAvKiBOT1NQTCAqLworICAgIHsgIi9sIiwgICAgICAgICAgIERFTF9M SVMsICBDTV9JTlZ8Q01fQUJSIH0sCisgICAgeyAiL2xpc3QiLCAgICAgICAgREVMX0xJUywgIDAg fSwKKyAgICB7ICIvbG9nIiwgICAgICAgICBERUxfTElTLCAgQ01fSU5WIH0sCisgICAgeyAiL25v bCIsICAgICAgICAgREVMX05PTCwgIENNX0lOVnxDTV9BQlIgfSwKKyAgICB7ICIvbm9saXN0Iiwg ICAgICBERUxfTk9MLCAgMCB9LAorICAgIHsgIi9ub2xvZyIsICAgICAgIERFTF9OT0wsICBDTV9J TlYgfSwKKyAgICB7ICIvb3ZlcndyaXRlIiwgICA5OTQsICAgICAgQ01fQVJHIH0sCisjaWZuZGVm IE5PWEZFUgorICAgIHsgIi9wcmVzZXJ2ZSIsICAgIDk5NSwgICAgICAwIH0sCisjZW5kaWYJLyog Tk9YRkVSICovCisgICAgeyAiL3F1aWV0IiwgICAgICAgREVMX1FVSSwgIENNX0lOViB9LAorICAg IHsgIi9zd2FwLWJ5dGVzIiwgIDk5OSwgICAgICAwIH0sCisjaWZuZGVmIE5PU1BMCisgICAgeyAi L3RvYjY0IiwgICAgICAgOTk2LCAgICAgIDAgfSwKKyNlbmRpZiAvKiBOT1NQTCAqLworICAgIHsg Ii92ZXJib3NlIiwgICAgIERFTF9WUkIsICBDTV9JTlYgfQorfTsKK2ludCBuY29weXRhYiA9IHNp emVvZihjb3B5dGFiKS9zaXplb2Yoc3RydWN0IGtleXRhYik7CisKKyNkZWZpbmUgT1ZXX0FMV0FZ UyAwCisjZGVmaW5lIE9WV19ORVZFUiAgMQorI2RlZmluZSBPVldfT0xERVIgIDIKKyNkZWZpbmUg T1ZXX05FV0VSICAzCisKK3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIG92d3RhYltdID0geworICAgIHsg ImFsd2F5cyIsIE9WV19BTFdBWVMsIDAgfSwKKyAgICB7ICJuZXZlciIsICBPVldfTkVWRVIsIDAg fSwKKyAgICB7ICJuZXdlciIsICBPVldfTkVXRVIsIDAgfSwKKyAgICB7ICJvbGRlciIsICBPVldf T0xERVIsIDAgfQorfTsKK3N0YXRpYyBpbnQgbm92d3RhYiA9IDQ7CisKKyNpZm5kZWYgTk9YRkVS CitzdGF0aWMgc3RydWN0IGtleXRhYiBnZXR0YWJbXSA9IHsgICAgICAgLyogR0VUIG9wdGlvbnMg Ki8KKyAgICB7ICIvYXMtbmFtZSIsICAgICAgICAgU05EX0FTTiwgQ01fQVJHIH0sCisgICAgeyAi L2JpbmFyeSIsICAgICAgICAgIFNORF9CSU4sIDAgfSwKKyNpZmRlZiBDQUxJQlJBVEUKKyAgICB7 ICIvY2FsaWJyYXRlIiwgICAgICAgU05EX0NBTCwgQ01fSU5WIH0sCisjZW5kaWYgLyogQ0FMSUJS QVRFICovCisjaWZkZWYgUElQRVNFTkQKKyAgICB7ICIvY29tbWFuZCIsICAgICAgICAgU05EX0NN RCwgQ01fUFNIIH0sCisjZW5kaWYgLyogUElQRVNFTkQgKi8KKyAgICB7ICIvZGVsZXRlIiwgICAg ICAgICAgU05EX0RFTCwgMCB9LAorICAgIHsgIi9leGNlcHQiLCAgICAgICAgICBTTkRfRVhDLCBD TV9BUkcgfSwKKyAgICB7ICIvZmlsZW5hbWVzIiwgICAgICAgU05EX05BTSwgQ01fQVJHIH0sCisj aWZkZWYgUElQRVNFTkQKKyAgICB7ICIvZmlsdGVyIiwgICAgICAgICAgU05EX0ZMVCwgQ01fQVJH fENNX1BTSCB9LAorI2VuZGlmIC8qIFBJUEVTRU5EICovCisjaWZkZWYgVk1TCisgICAgeyAiL2lt YWdlIiwgICAgICAgICAgIFNORF9JTUcsIDAgfSwKKyAgICB7ICIvbGFiZWxlZCIsICAgICAgICAg U05EX0xCTCwgMCB9LAorI2Vsc2UKKyAgICB7ICIvaW1hZ2UiLCAgICAgICAgICAgU05EX0JJTiwg Q01fSU5WIH0sCisjZW5kaWYgLyogVk1TICovCisjaWZkZWYgQ0tfVE1QRElSCisgICAgeyAiL21v dmUtdG8iLCAgICAgICAgIFNORF9NT1YsIENNX0FSRyB9LAorI2VuZGlmIC8qIENLX1RNUERJUiAq LworICAgIHsgIi9wYXRobmFtZXMiLCAgICAgICBTTkRfUFRILCBDTV9BUkcgfSwKKyAgICB7ICIv cGlwZXMiLCAgICAgICAgICAgU05EX1BJUCwgQ01fQVJHfENNX1BTSCB9LAorICAgIHsgIi9xdWll dCIsICAgICAgICAgICBTTkRfU0hILCAwIH0sCisjaWZkZWYgQ0tfUkVTRU5ECisgICAgeyAiL3Jl Y292ZXIiLCAgICAgICAgIFNORF9SRVMsIDAgfSwKKyNlbmRpZiAvKiBDS19SRVNFTkQgKi8KKyAg ICB7ICIvcmVjdXJzaXZlIiwgICAgICAgU05EX1JFQywgMCB9LAorICAgIHsgIi9yZW5hbWUtdG8i LCAgICAgICBTTkRfUkVOLCBDTV9BUkcgfSwKKyNpZmRlZiBDT01NRU5UCisgICAgeyAiL3NtYWxs ZXItdGhhbiIsICAgIFNORF9TTUEsIENNX0FSRyB9LAorI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAg ICB7ICIvc3ViZGlyZWN0b3JpZXMiLCAgU05EX1JFQywgQ01fSU5WIH0sCisgICAgeyAiL3RleHQi LCAgICAgICAgICAgIFNORF9UWFQsIDAgfSwKKyAgICB7ICIvdHJhbnNwYXJlbnQiLCAgICAgU05E X1hQQSwgMCB9Cit9OworI2RlZmluZSBOR0VUVEFCIHNpemVvZihnZXR0YWIpL3NpemVvZihzdHJ1 Y3Qga2V5dGFiKQorc3RhdGljIGludCBuZ2V0dGFiID0gTkdFVFRBQjsKKworc3RhdGljIHN0cnVj dCBrZXl0YWIgcmN2dGFiW10gPSB7ICAgICAgIC8qIFJFQ0VJVkUgb3B0aW9ucyAqLworICAgIHsg Ii9hcy1uYW1lIiwgICAgICAgICBTTkRfQVNOLCBDTV9BUkcgfSwKKyAgICB7ICIvYmluYXJ5Iiwg ICAgICAgICAgU05EX0JJTiwgMCB9LAorI2lmZGVmIENBTElCUkFURQorICAgIHsgIi9jYWxpYnJh dGUiLCAgICAgICBTTkRfQ0FMLCBDTV9JTlYgfSwKKyNlbmRpZiAvKiBDQUxJQlJBVEUgKi8KKyNp ZmRlZiBQSVBFU0VORAorICAgIHsgIi9jb21tYW5kIiwgICAgICAgICBTTkRfQ01ELCBDTV9QU0gg fSwKKyNlbmRpZiAvKiBQSVBFU0VORCAqLworICAgIHsgIi9leGNlcHQiLCAgICAgICAgICBTTkRf RVhDLCBDTV9BUkcgfSwKKyAgICB7ICIvZmlsZW5hbWVzIiwgICAgICAgU05EX05BTSwgQ01fQVJH IH0sCisjaWZkZWYgUElQRVNFTkQKKyAgICB7ICIvZmlsdGVyIiwgICAgICAgICAgU05EX0ZMVCwg Q01fQVJHfENNX1BTSCB9LAorI2VuZGlmIC8qIFBJUEVTRU5EICovCisjaWZkZWYgVk1TCisgICAg eyAiL2ltYWdlIiwgICAgICAgICAgIFNORF9JTUcsIDAgfSwKKyAgICB7ICIvbGFiZWxlZCIsICAg ICAgICAgU05EX0xCTCwgMCB9LAorI2Vsc2UKKyAgICB7ICIvaW1hZ2UiLCAgICAgICAgICAgU05E X0JJTiwgQ01fSU5WIH0sCisjZW5kaWYgLyogVk1TICovCisjaWZkZWYgQ0tfVE1QRElSCisgICAg eyAiL21vdmUtdG8iLCAgICAgICAgIFNORF9NT1YsIENNX0FSRyB9LAorI2VuZGlmIC8qIENLX1RN UERJUiAqLworICAgIHsgIi9wYXRobmFtZXMiLCAgICAgICBTTkRfUFRILCBDTV9BUkcgfSwKKyAg ICB7ICIvcGlwZXMiLCAgICAgICAgICAgU05EX1BJUCwgQ01fQVJHfENNX1BTSCB9LAorI2lmZGVm IENLX1hZWgorICAgIHsgIi9wcm90b2NvbCIsICAgICAgICBTTkRfUFJPLCBDTV9BUkcgfSwKKyNl bHNlCisgICAgeyAiL3Byb3RvY29sIiwgICAgICAgIFNORF9QUk8sIENNX0FSR3xDTV9JTlYgfSwK KyNlbmRpZiAvKiBDS19YWVogKi8KKyAgICB7ICIvcXVpZXQiLCAgICAgICAgICAgU05EX1NISCwg MCB9LAorICAgIHsgIi9yZWN1cnNpdmUiLCAgICAgICBTTkRfUkVDLCAwIH0sCisgICAgeyAiL3Jl bmFtZS10byIsICAgICAgIFNORF9SRU4sIENNX0FSRyB9LAorICAgIHsgIi90ZXh0IiwgICAgICAg ICAgICBTTkRfVFhULCAwIH0sCisgICAgeyAiL3RyYW5zcGFyZW50IiwgICAgIFNORF9YUEEsIDAg fQorfTsKKyNkZWZpbmUgTlJDVlRBQiBzaXplb2YocmN2dGFiKS9zaXplb2Yoc3RydWN0IGtleXRh YikKK3N0YXRpYyBpbnQgbnJjdnRhYiA9IE5SQ1ZUQUI7CisjZW5kaWYgLyogTk9YRkVSICovCisK Ky8qIFdBSVQgdGFibGUgKi8KKworI2RlZmluZSBXQUlUX0ZJTCA5OTcKKyNkZWZpbmUgV0FJVF9N RE0gOTk4CisKK3N0cnVjdCBrZXl0YWIgd2FpdHRhYltdID0geworICAgIHsgImNkIiwgICAgICAg ICAgICBCTV9EQ0QsICAgQ01fSU5WIH0sIC8qIChDYXJyaWVyIERldGVjdCkgKi8KKyAgICB7ICJj dHMiLCAgICAgICAgICAgQk1fQ1RTLCAgIENNX0lOViB9LCAvKiAoQ2xlYXIgVG8gU2VuZCkgICov CisgICAgeyAiZHNyIiwgICAgICAgICAgIEJNX0RTUiwgICBDTV9JTlYgfSwgLyogKERhdGEgU2V0 IFJlYWR5KSAqLworICAgIHsgImZpbGUiLCAgICAgICAgICBXQUlUX0ZJTCwgMCB9LCAgICAgIC8q IE5ldyBjYXRlZ29yeSBzZWxlY3RvciBrZXl3b3JkcyAqLworICAgIHsgIm1vZGVtLXNpZ25hbHMi LCBXQUlUX01ETSwgMCB9LCAgICAgIC8qIC4uLiAqLworICAgIHsgInJpIiwgICAgICAgICAgICBC TV9STkcsICAgQ01fSU5WIH0gIC8qIChSaW5nIEluZGljYXRvcikgKi8KK307CitpbnQgbndhaXR0 YWIgPSAoc2l6ZW9mKHdhaXR0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKKworLyogTW9k ZW0gc2lnbmFsIHRhYmxlICovCisKK3N0cnVjdCBrZXl0YWIgbXN0YWJbXSA9IHsKKyAgICB7ICJj ZCIsICAgIEJNX0RDRCwgMCB9LCAgICAgICAgICAgICAvKiBDYXJyaWVyIERldGVjdCAqLworICAg IHsgImN0cyIsICAgQk1fQ1RTLCAwIH0sICAgICAgICAgICAgIC8qIENsZWFyIFRvIFNlbmQgICov CisgICAgeyAiZHNyIiwgICBCTV9EU1IsIDAgfSwgICAgICAgICAgICAgLyogRGF0YSBTZXQgUmVh ZHkgKi8KKyAgICB7ICJyaSIsICAgIEJNX1JORywgMCB9ICAgICAgICAgICAgICAvKiBSaW5nIElu ZGljYXRvciAqLworfTsKK2ludCBubXMgPSAoc2l6ZW9mKG1zdGFiKSAvIHNpemVvZihzdHJ1Y3Qg a2V5dGFiKSk7CisKKyNkZWZpbmUgV0ZfTU9EIDEKKyNkZWZpbmUgV0ZfREVMIDIKKyNkZWZpbmUg V0ZfQ1JFIDMKKworc3RydWN0IGtleXRhYiB3ZnN3aVtdID0geyAgICAgICAgICAgICAgIC8qIFdB SVQgRklMRSBzd2l0Y2hlcyAqLworICAgIHsgImNyZWF0aW9uIiwgICAgIFdGX0NSRSwgMCB9LCAg ICAgIC8qIFdhaXQgZm9yIGZpbGUgdG8gYmUgY3JlYXRlZCAqLworICAgIHsgImRlbGV0aW9uIiwg ICAgIFdGX0RFTCwgMCB9LCAgICAgIC8qIFdhaXQgZm9yIGZpbGUgdG8gYmUgZGVsZXRlZCAqLwor ICAgIHsgIm1vZGlmaWNhdGlvbiIsIFdGX01PRCwgMCB9ICAgICAgIC8qIFdhaXQgZm9yIGZpbGUg dG8gYmUgbW9kaWZpZWQgKi8KK307CitpbnQgbndmc3dpID0gKHNpemVvZih3ZnN3aSkgLyBzaXpl b2Yoc3RydWN0IGtleXRhYikpOworCisjaWZuZGVmIE5PU1BMCitzdHJ1Y3Qga2V5dGFiIGFzZ3Rh YltdID0geyAgICAgICAgICAgICAgLyogQXNzaWdubWVudCBvcGVyYXRvcnMgZm9yICIuIiAqLwor ICAgIHsgIjo6PSIsIDIsIDAgfSwgICAgICAgICAgICAgICAgICAgIC8qIEFTU0lHTiBhbmQgRVZB TFVBVEUgKi8KKyAgICB7ICI6PSIsICAxLCAwIH0sICAgICAgICAgICAgICAgICAgICAvKiBBU1NJ R04gKi8KKyAgICB7ICI9IiwgICAwLCAwIH0gICAgICAgICAgICAgICAgICAgICAvKiBERUZJTkUg Ki8KK307CitpbnQgbmFzZ3RhYiA9IChzaXplb2YoYXNndGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5 dGFiKSk7CisKK3N0cnVjdCBrZXl0YWIgb3BudGFiW10gPSB7CisjaWZuZGVmIE5PUFVTSAorICAg IHsgIiFyZWFkIiwgIE9QTl9QSV9SLCBDTV9JTlYgfSwKKyAgICB7ICIhd3JpdGUiLCBPUE5fUElf VywgQ01fSU5WIH0sCisjZW5kaWYgLyogTk9QVVNIICovCisgICAgeyAiYXBwZW5kIiwgT1BOX0ZJ X0EsIDAgfSwKKyAgICB7ICJob3N0IiwgICBPUE5fTkVULCAgMCB9LAorI2lmZGVmIE9TMgorICAg IHsgImxpbmUiLCAgIE9QTl9TRVIsICBDTV9JTlYgfSwKKyAgICB7ICJwb3J0IiwgICBPUE5fU0VS LCAgMCB9LAorI2Vsc2UKKyAgICB7ICJsaW5lIiwgICBPUE5fU0VSLCAgMCB9LAorICAgIHsgInBv cnQiLCAgIE9QTl9TRVIsICBDTV9JTlYgfSwKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICB7ICJyZWFk IiwgICBPUE5fRklfUiwgMCB9LAorICAgIHsgIndyaXRlIiwgIE9QTl9GSV9XLCAwIH0KK307Citp bnQgbm9wbiA9IChzaXplb2Yob3BudGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7CisKKy8q IElGIGNvbmRpdGlvbnMgKi8KKworI2RlZmluZSAgWFhJRkNPIDAgICAgICAgLyogSUYgQ09VTlQg Ki8KKyNkZWZpbmUgIFhYSUZFUiAxICAgICAgIC8qIElGIEVSUk9STEVWRUwgKi8KKyNkZWZpbmUg IFhYSUZFWCAyICAgICAgIC8qIElGIEVYSVNUICovCisjZGVmaW5lICBYWElGRkEgMyAgICAgICAv KiBJRiBGQUlMVVJFICovCisjZGVmaW5lICBYWElGU1UgNCAgICAgICAvKiBJRiBTVUNDRVNTICov CisjZGVmaW5lICBYWElGTk8gNSAgICAgICAvKiBJRiBOT1QgKi8KKyNkZWZpbmUgIFhYSUZERSA2 ICAgICAgIC8qIElGIERFRklORUQgKi8KKyNkZWZpbmUgIFhYSUZFUSA3ICAgICAgIC8qIElGIEVR VUFMIChzdHJpbmdzKSAqLworI2RlZmluZSAgWFhJRkFFIDggICAgICAgLyogSUYgPSAobnVtYmVy cykgKi8KKyNkZWZpbmUgIFhYSUZMVCA5ICAgICAgIC8qIElGIDwgKG51bWJlcnMpICovCisjZGVm aW5lICBYWElGR1QgMTAgICAgICAvKiBJRiA+IChudW1iZXJzKSAqLworI2RlZmluZSAgWFhJRkxM IDExICAgICAgLyogSUYgTGV4aWNhbGx5IExlc3MgVGhhbiAoc3RyaW5ncykgKi8KKyNkZWZpbmUg IFhYSUZMRyAxMiAgICAgIC8qIElGIExleGljYWxseSBHcmVhdGVyIFRoYW4gKHN0cmluZ3MpICov CisjZGVmaW5lICBYWElGRU8gMTMgICAgICAvKiBJRiBFT0YgKFJFQUQgZmlsZSkgKi8KKyNkZWZp bmUgIFhYSUZCRyAxNCAgICAgIC8qIElGIEJBQ0tHUk9VTkQgKi8KKyNkZWZpbmUgIFhYSUZOVSAx NSAgICAgIC8qIElGIE5VTUVSSUMgKi8KKyNkZWZpbmUgIFhYSUZGRyAxNiAgICAgIC8qIElGIEZP UkVHUk9VTkQgKi8KKyNkZWZpbmUgIFhYSUZESSAxNyAgICAgIC8qIElGIERJUkVDVE9SWSAqLwor I2RlZmluZSAgWFhJRk5FIDE4ICAgICAgLyogSUYgTkVXRVIgKi8KKyNkZWZpbmUgIFhYSUZSTyAx OSAgICAgIC8qIElGIFJFTU9URS1PTkxZICovCisjZGVmaW5lICBYWElGQUwgMjAgICAgICAvKiBJ RiBBTEFSTSAqLworI2RlZmluZSAgWFhJRlNEIDIxICAgICAgLyogSUYgU1RBUlRFRC1GUk9NLURJ QUxFUiAqLworI2RlZmluZSAgWFhJRlRSIDIyICAgICAgLyogSUYgVFJVRSAqLworI2RlZmluZSAg WFhJRk5UIDIzICAgICAgLyogSUYgRkFMU0UgKi8KKyNkZWZpbmUgIFhYSUZUTSAyNCAgICAgIC8q IElGIFRFUk1JTkFMLU1BQ1JPICovCisjZGVmaW5lICBYWElGRU0gMjUgICAgICAvKiBJRiBFTVVM QVRJT04gKi8KKyNkZWZpbmUgIFhYSUZPUCAyNiAgICAgIC8qIElGIE9QRU4gKi8KKyNkZWZpbmUg IFhYSUZMRSAyNyAgICAgIC8qIElGIDw9ICovCisjZGVmaW5lICBYWElGR0UgMjggICAgICAvKiBJ RiA+PSAqLworI2RlZmluZSAgWFhJRklQIDI5ICAgICAgLyogSUYgSU5QQVRIICovCisjZGVmaW5l ICBYWElGVEEgMzAgICAgICAvKiBJRiBUQVBJICovCisjZGVmaW5lICBYWElGTUEgMzEgICAgICAv KiBJRiBNQVRDSCAqLworI2RlZmluZSAgWFhJRkZMIDMyICAgICAgLyogSUYgRkxBRyAqLworI2Rl ZmluZSAgWFhJRkFCIDMzICAgICAgLyogSUYgQUJTT0xVVEUgKi8KKyNkZWZpbmUgIFhYSUZBViAz NCAgICAgIC8qIElGIEFWQUlMQUJMRSAqLworI2RlZmluZSAgWFhJRkFUIDM1ICAgICAgLyogSUYg QVNLVElNRU9VVCAqLworI2RlZmluZSAgWFhJRlJEIDM2ICAgICAgLyogSUYgUkVBREFCTEUgKi8K KyNkZWZpbmUgIFhYSUZXUiAzNyAgICAgIC8qIElGIFdSSVRFQUJMRSAqLworI2RlZmluZSAgWFhJ RkFOIDM4ICAgICAgLyogSUYgLi4uIEFORCAuLi4gKi8KKyNkZWZpbmUgIFhYSUZPUiAzOSAgICAg IC8qIElGIC4uLiBPUiAuLi4gKi8KKyNkZWZpbmUgIFhYSUZMUCA0MCAgICAgIC8qIElGIGxlZnQg cGFyZW50aGVzaXMgKi8KKyNkZWZpbmUgIFhYSUZSUCA0MSAgICAgIC8qIElGIHJpZ2h0IHBhcmVu dGhlc2lzICovCisjZGVmaW5lICBYWElGTlEgNDIgICAgICAvKiBJRiAhPSAoPT0gIk5PVCA9Iikg Ki8KKyNkZWZpbmUgIFhYSUZRVSA0MyAgICAgIC8qIElGIFFVSUVUICovCisjZGVmaW5lICBYWElG Q0sgNDQgICAgICAvKiBJRiBDLUtFUk1JVCAqLworI2RlZmluZSAgWFhJRks5IDQ1ICAgICAgLyog SUYgSy05NSAqLworI2RlZmluZSAgWFhJRk1TIDQ2ICAgICAgLyogSUYgTVMtS0VSTUlUICovCisj ZGVmaW5lICBYWElGV0kgNDcgICAgICAvKiBJRiBXSUxEICovCisjZGVmaW5lICBYWElGTE8gNDgg ICAgICAvKiBJRiBMT0NBTCAqLworI2RlZmluZSAgWFhJRkNNIDQ5ICAgICAgLyogSUYgQ09NTUFO RCAqLworI2RlZmluZSAgWFhJRkZQIDUwICAgICAgLyogSUYgRkxPQVQgKi8KKyNkZWZpbmUgIFhY SUZJSyA1MSAgICAgIC8qIElGIElLUyAqLworI2RlZmluZSAgWFhJRktCIDUyICAgICAgLyogSUYg S0JISVQgKi8KKyNkZWZpbmUgIFhYSUZLRyA1MyAgICAgIC8qIElGIEtFUkJBTkcgKi8KKyNkZWZp bmUgIFhYSUZWRSA1NCAgICAgIC8qIElGIFZFUlNJT04gKi8KKyNkZWZpbmUgIFhYSUZEQyA1NSAg ICAgIC8qIElGIERFQ0xBUkVEICovCisjZGVmaW5lICBYWElGR1UgNTYgICAgICAvKiBJRiBHVUkg Ki8KKyNkZWZpbmUgIFhYSUZMTiA1NwkvKiBJRiBMSU5LICovCisjZGVmaW5lICBYWElGREIgNTgJ LyogSUYgREVCVUcgKi8KKworc3RydWN0IGtleXRhYiBpZnRhYltdID0geyAgICAgICAgICAgICAg IC8qIElGIGNvbW1hbmRzICovCisgICAgeyAiISIsICAgICAgICAgIFhYSUZOTywgMCB9LAorICAg IHsgIiE9IiwgICAgICAgICBYWElGTlEsIDAgfSwKKyAgICB7ICImJiIsICAgICAgICAgWFhJRkFO LCAwIH0sCisgICAgeyAiKCIsICAgICAgICAgIFhYSUZMUCwgMCB9LAorICAgIHsgIikiLCAgICAg ICAgICBYWElGUlAsIDAgfSwKKyAgICB7ICI8IiwgICAgICAgICAgWFhJRkxULCAwIH0sCisgICAg eyAiPD0iLCAgICAgICAgIFhYSUZMRSwgMCB9LAorICAgIHsgIj0iLCAgICAgICAgICBYWElGQUUs IDAgfSwKKyAgICB7ICI9PSIsICAgICAgICAgWFhJRkFFLCBDTV9JTlYgfSwKKyAgICB7ICI+Iiwg ICAgICAgICAgWFhJRkdULCAwIH0sCisgICAgeyAiPj0iLCAgICAgICAgIFhYSUZHRSwgMCB9LAor ICAgIHsgImFic29sdXRlIiwgICBYWElGQUIsIDAgfSwKKyAgICB7ICJhbGFybSIsICAgICAgWFhJ RkFMLCAwIH0sCisgICAgeyAiYW5kIiwgICAgICAgIFhYSUZBTiwgMCB9LAorICAgIHsgImFza3Rp bWVvdXQiLCBYWElGQVQsIDAgfSwKKyAgICB7ICJhdmFpbGFibGUiLCAgWFhJRkFWLCAwIH0sCisg ICAgeyAiYmFja2dyb3VuZCIsIFhYSUZCRywgMCB9LAorICAgIHsgImMta2VybWl0IiwgICBYWElG Q0ssIDAgfSwKKyAgICB7ICJjb21tYW5kIiwgICAgWFhJRkNNLCAwIH0sCisgICAgeyAiY291bnQi LCAgICAgIFhYSUZDTywgMCB9LAorICAgIHsgImRjbCIsICAgICAgICBYWElGREMsIENNX0lOViB9 LAorICAgIHsgImRlYnVnIiwgICAgICBYWElGREIsIDAgfSwKKyAgICB7ICJkZWNsYXJlZCIsICAg WFhJRkRDLCAwIH0sCisgICAgeyAiZGVmaW5lZCIsICAgIFhYSUZERSwgMCB9LAorI2lmZGVmIENL X1RNUERJUgorICAgIHsgImRpcmVjdG9yeSIsICBYWElGREksIDAgfSwKKyNlbmRpZiAvKiBDS19U TVBESVIgKi8KKyAgICB7ICJlbXVsYXRpb24iLCAgWFhJRkVNLCAwIH0sCisjaWZkZWYgQ09NTUVO VAorICAgIHsgImVvZiIsICAgICAgICBYWElGRU8sIDAgfSwKKyNlbmRpZiAvKiBDT01NRU5UICov CisgICAgeyAiZXF1YWwiLCAgICAgIFhYSUZFUSwgMCB9LAorICAgIHsgImVycm9yIiwgICAgICBY WElGRkEsIENNX0lOViB9LAorICAgIHsgImV4aXN0IiwgICAgICBYWElGRVgsIDAgfSwKKyAgICB7 ICJmYWlsdXJlIiwgICAgWFhJRkZBLCAwIH0sCisgICAgeyAiZmFsc2UiLCAgICAgIFhYSUZOVCwg MCB9LAorICAgIHsgImZsYWciLCAgICAgICBYWElGRkwsIDAgfSwKKyNpZmRlZiBDS0ZMT0FUCisg ICAgeyAiZmxvYXQiLCAgICAgIFhYSUZGUCwgMCB9LAorI2VuZGlmIC8qIENLRkxPQVQgKi8KKyAg ICB7ICJmb3JlZ3JvdW5kIiwgWFhJRkZHLCAwIH0sCisjaWZkZWYgT1MyCisgICAgeyAiZ3VpIiwg ICAgICAgIFhYSUZHVSwgMCB9LAorI2Vsc2UKKyAgICB7ICJndWkiLCAgICAgICAgWFhJRkdVLCBD TV9JTlYgfSwKKyNlbmRpZiAvKiBPUzIgKi8KKyNpZmRlZiBJS1NECisgICAgeyAiaWtzZCIsICAg ICAgIFhYSUZJSywgMCB9LAorI2Vsc2UKKyAgICB7ICJpa3NkIiwgICAgICAgWFhJRklLLCBDTV9J TlYgfSwKKyNlbmRpZiAvKiBJS1NEICovCisgICAgeyAiaW50ZWdlciIsICAgIFhYSUZOVSwgQ01f SU5WIH0sCisgICAgeyAiay05NSIsICAgICAgIFhYSUZLOSwgMCB9LAorICAgIHsgImtiaGl0Iiwg ICAgICBYWElGS0IsIDAgfSwKKyNpZmRlZiBVTklYCisgICAgeyAia2VyYmFuZyIsICAgIFhYSUZL RywgMCB9LAorI2Vsc2UKKyAgICB7ICJrZXJiYW5nIiwgICAgWFhJRktHLCBDTV9JTlYgfSwKKyNl bmRpZiAvKiBVTklYICovCisgICAgeyAibGd0IiwgICAgICAgIFhYSUZMRywgMCB9LAorI2lmZGVm IFVOSVgKKyAgICB7ICJsaW5rIiwgICAgICAgWFhJRkxOLCAwIH0sCisjZW5kaWYgLyogVU5JWCAq LworICAgIHsgImxsdCIsICAgICAgICBYWElGTEwsIDAgfSwKKyAgICB7ICJsb2NhbCIsICAgICAg WFhJRkxPLCAwIH0sCisgICAgeyAibWF0Y2giLCAgICAgIFhYSUZNQSwgMCB9LAorICAgIHsgIm1z LWtlcm1pdCIsICBYWElGTVMsIENNX0lOViB9LAorI2lmZGVmIFpGQ0RBVAorICAgIHsgIm5ld2Vy IiwgICAgICBYWElGTkUsIDAgfSwKKyNlbmRpZiAvKiBaRkNEQVQgKi8KKyAgICB7ICJub3QiLCAg ICAgICAgWFhJRk5PLCAwIH0sCisgICAgeyAibnVtZXJpYyIsICAgIFhYSUZOVSwgMCB9LAorICAg IHsgIm9rIiwgICAgICAgICBYWElGU1UsIENNX0lOViB9LAorICAgIHsgIm9wZW4iLCAgICAgICBY WElGT1AsIDAgfSwKKyAgICB7ICJvciIsICAgICAgICAgWFhJRk9SLCAwIH0sCisgICAgeyAicXVp ZXQiLCAgICAgIFhYSUZRVSwgMCB9LAorICAgIHsgInJlYWRhYmxlIiwgICBYWElGUkQsIDAgfSwK KyAgICB7ICJyZW1vdGUtb25seSIsWFhJRlJPLCAwIH0sCisgICAgeyAic3RhcnRlZC1mcm9tLWRp YWxlciIsWFhJRlNELCBDTV9JTlYgfSwKKyAgICB7ICJzdWNjZXNzIiwgICAgWFhJRlNVLCAwIH0s CisgICAgeyAidGFwaSIsICAgICAgIFhYSUZUQSwgMCB9LAorI2lmZGVmIE9TMgorICAgIHsgInRl cm1pbmFsLW1hY3JvIiwgWFhJRlRNLCAwIH0sCisjZWxzZQorICAgIHsgInRlcm1pbmFsLW1hY3Jv IiwgWFhJRlRNLCBDTV9JTlYgfSwKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICB7ICJ0cnVlIiwgICAg ICAgWFhJRlRSLCAwIH0sCisgICAgeyAidmVyc2lvbiIsICAgIFhYSUZWRSwgMCB9LAorICAgIHsg IndpbGQiLCAgICAgICBYWElGV0ksIDAgfSwKKyAgICB7ICJ3cml0ZWFibGUiLCAgWFhJRldSLCAw IH0sCisgICAgeyAifHwiLCAgICAgICAgIFhYSUZPUiwgMCB9LAorICAgIHsgIiIsIDAsIDAgfQor fTsKK2ludCBuaWYgPSAoc2l6ZW9mKGlmdGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSkgLSAx OworCitzdHJ1Y3Qga2V5dGFiIGlvdGFiW10gPSB7ICAgICAgICAgICAgICAgLyogS2V5d29yZHMg Zm9yIElGIE9QRU4gKi8KKyAgICB7ICIhcmVhZC1maWxlIiwgICAgICBaUkZJTEUsIENNX0lOViB9 LAorICAgIHsgIiF3cml0ZS1maWxlIiwgICAgIFpXRklMRSwgQ01fSU5WIH0sCisgICAgeyAiYXBw ZW5kLWZpbGUiLCAgICAgWldGSUxFLCBDTV9JTlYgfSwKKyAgICB7ICJjb25uZWN0aW9uIiwgICAg ICA4ODg4LCAgIDAgfSwKKyNpZmRlZiBDS0xPR0RJQUwKKyAgICB7ICJjeC1sb2ciLCAgICAgICAg ICA3Nzc3LCAgIDAgfSwKKyNlbmRpZiAvKiBDS0xPR0RJQUwgKi8KKyAgICB7ICJkZWJ1Zy1sb2ci LCAgICAgICBaREZJTEUsIDAgfSwKKyAgICB7ICJlcnJvciIsICAgICAgICAgICA5OTk5LCAgIDAg fSwKKyAgICB7ICJwYWNrZXQtbG9nIiwgICAgICBaUEZJTEUsIDAgfSwKKyAgICB7ICJyZWFkLWZp bGUiLCAgICAgICBaUkZJTEUsIDAgfSwKKyAgICB7ICJzY3JlZW4iLCAgICAgICAgICBaU1RESU8s IDAgfSwKKyAgICB7ICJzZXNzaW9uLWxvZyIsICAgICBaU0ZJTEUsIDAgfSwKKyAgICB7ICJ0cmFu c2FjdGlvbi1sb2ciLCBaVEZJTEUsIDAgfSwKKyAgICB7ICJ3cml0ZS1maWxlIiwgICAgICBaV0ZJ TEUsIDAgfQorfTsKK2ludCBuaW90ID0gKHNpemVvZihpb3RhYikgLyBzaXplb2Yoc3RydWN0IGtl eXRhYikpOworI2VuZGlmIC8qIE5PU1BMICovCisKKy8qIFZhcmlhYmxlcyBhbmQgcHJvdG90eXBl cyAqLworCitfUFJPVE9UWVAoc3RhdGljIGludCBkb3ltZGlyLChpbnQpKTsKK19QUk9UT1RZUChz dGF0aWMgaW50IHJlbmFtZW9uZSwoY2hhciAqLGNoYXIgKiwKKwkJCQlpbnQsaW50LGludCxpbnQs aW50LGludCxpbnQsaW50LGludCxpbnQsaW50KSk7CisKKyNpZmRlZiBORVRDT05OCitleHRlcm4g aW50IG5uZXRkaXI7ICAgICAgICAgICAgICAgICAgICAgLyogSG93IG1hbnkgbmV0d29yayBkaXJl Y3RvcmllcyAqLworI2VuZGlmIC8qIE5FVENPTk4gKi8KKyNpZmRlZiBDS19TRUNVUklUWQorX1BS T1RPVFlQKGludCBja19rcmI0X2lzX2luc3RhbGxlZCwodm9pZCkpOworX1BST1RPVFlQKGludCBj a19rcmI1X2lzX2luc3RhbGxlZCwodm9pZCkpOworX1BST1RPVFlQKGludCBja19udGxtX2lzX2lu c3RhbGxlZCwodm9pZCkpOworX1BST1RPVFlQKGludCBja19zcnBfaXNfaW5zdGFsbGVkLCh2b2lk KSk7CitfUFJPVE9UWVAoaW50IGNrX3NzbGVheV9pc19pbnN0YWxsZWQsKHZvaWQpKTsKK19QUk9U T1RZUChpbnQgY2tfc3NoX2lzX2luc3RhbGxlZCwodm9pZCkpOworX1BST1RPVFlQKGludCBja19j cnlwdF9pc19pbnN0YWxsZWQsKHZvaWQpKTsKKyNlbHNlCisjZGVmaW5lIGNrX2tyYjRfaXNfaW5z dGFsbGVkKCkgKDApCisjZGVmaW5lIGNrX2tyYjVfaXNfaW5zdGFsbGVkKCkgKDApCisjZGVmaW5l IGNrX250bG1faXNfaW5zdGFsbGVkKCkgKDApCisjZGVmaW5lIGNrX3NycF9pc19pbnN0YWxsZWQo KSAoMCkKKyNkZWZpbmUgY2tfc3NsZWF5X2lzX2luc3RhbGxlZCgpICgwKQorI2RlZmluZSBja19z c2hfaXNfaW5zdGFsbGVkKCkgKDApCisjZGVmaW5lIGNrX2NyeXB0X2lzX2luc3RhbGxlZCgpICgw KQorI2VuZGlmIC8qIENLX1NFQ1VSSVRZICovCisKKyNkZWZpbmUgQVZfS1JCNCAgIDEKKyNkZWZp bmUgQVZfS1JCNSAgIDIKKyNkZWZpbmUgQVZfTlRMTSAgIDMKKyNkZWZpbmUgQVZfU1JQICAgIDQK KyNkZWZpbmUgQVZfU1NMICAgIDUKKyNkZWZpbmUgQVZfQ1JZUFRPIDYKKyNkZWZpbmUgQVZfU1NI ICAgIDcKKworc3RydWN0IGtleXRhYiBhdmFpbHRhYltdID0geyAgICAgICAgICAgICAvKiBBdmFp bGFibGUgYXV0aGVudGljYXRpb24gdHlwZXMgKi8KKyAgICB7ICJjcnlwdG8iLCAgICAgQVZfQ1JZ UFRPLCBDTV9JTlYgfSwgLyogYW5kIGVuY3J5cHRpb24gKi8KKyAgICB7ICJlbmNyeXB0aW9uIiwg QVZfQ1JZUFRPLCAwIH0sCisgICAgeyAiazQiLCAgICAgICAgIEFWX0tSQjQsICAgQ01fSU5WIH0s CisgICAgeyAiazUiLCAgICAgICAgIEFWX0tSQjUsICAgQ01fSU5WIH0sCisgICAgeyAia2VyYmVy b3M0IiwgIEFWX0tSQjQsICAgMCB9LAorICAgIHsgImtlcmJlcm9zNSIsICBBVl9LUkI1LCAgIDAg fSwKKyAgICB7ICJrcmI0IiwgICAgICAgQVZfS1JCNCwgICBDTV9JTlYgfSwKKyAgICB7ICJrcmI1 IiwgICAgICAgQVZfS1JCNSwgICBDTV9JTlYgfSwKKyAgICB7ICJudGxtIiwgICAgICAgQVZfTlRM TSwgICAwIH0sCisgICAgeyAic3JwIiwgICAgICAgIEFWX1NSUCwgICAgMCB9LAorICAgIHsgInNz aCIsICAgICAgICBBVl9TU0gsICAgIDAgfSwKKyAgICB7ICJzc2wiLCAgICAgICAgQVZfU1NMLCAg ICAwIH0sCisgICAgeyAidGxzIiwgICAgICAgIEFWX1NTTCwgICAgMCB9LAorICAgIHsgIiIsICAg ICAgICAgICAwLCAgICAgICAgIDAgfQorfTsKK2ludCBhdmFpbHRhYm4gPSBzaXplb2YoYXZhaWx0 YWIpL3NpemVvZihzdHJ1Y3Qga2V5dGFiKS0xOworCisjaWZuZGVmIE5PRElBTAorX1BST1RPVFlQ KHN0YXRpYyBpbnQgZGRjdnQsIChjaGFyICosIEZJTEUgKiwgaW50KSApOworX1BST1RPVFlQKHN0 YXRpYyBpbnQgZG5jdnQsIChpbnQsIGludCwgaW50LCBpbnQpICk7CitfUFJPVE9UWVAoY2hhciAq IGdldGRuYW1lLCAodm9pZCkgKTsKKworc3RhdGljIGludCBwYXJ0aWFsICA9IDA7ICAgICAgICAg ICAgICAgIC8qIEZvciBwYXJ0aWFsIGRpYWwgKi8KK3N0YXRpYyBjaGFyICpkc2NvcHkgPSBOVUxM OworaW50IGRpYWx0eXBlID0gLTE7CisKK2NoYXIgKmRpYWxudW0gPSAoY2hhciAqKTA7ICAgICAg ICAgICAgICAvKiBSZW1lbWJlciBESUFMIG51bWJlciBmb3IgUkVESUFMICovCitpbnQgZGlybGlu ZSA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgLyogRGlhbCBkaXJlY3RvcnkgbGluZSBudW1i ZXIgKi8KK2V4dGVybiBjaGFyICogZGlhbGRpcltdOyAgICAgICAgICAgICAgICAvKiBEaWFsIGRp cmVjdG9yeSBmaWxlIG5hbWVzICovCitleHRlcm4gaW50IGRpYWxkcHk7ICAgICAgICAgICAgICAg ICAgICAgLyogRElBTCBESVNQTEFZIG9uL29mZiAqLworZXh0ZXJuIGludCBuZGlhbGRpcjsgICAg ICAgICAgICAgICAgICAgIC8qIEhvdyBtYW55IGRpYWwgZGlyZWN0b3JpZXMgKi8KK2V4dGVybiBp bnQgbnRvbGxmcmVlOyAgICAgICAgICAgICAgICAgICAvKiBUb2xsLWZyZWUgY2FsbCBpbmZvICov CitleHRlcm4gaW50IG5kaWFscHh4OyAgICAgICAgICAgICAgICAgICAgLyogTGlzdCBvZiBQQlgg ZXhjaGFuZ2VzICovCitleHRlcm4gY2hhciAqZGlhbHRmY1tdOworY2hhciAqIG1hdGNocHh4ID0g TlVMTDsgICAgICAgICAgICAgICAgIC8qIFBCWCBleGNoYW5nZSB0aGF0IG1hdGNoZWQgKi8KK2V4 dGVybiBpbnQgbmxvY2FsYWM7ICAgICAgICAgICAgICAgICAgICAvKiBMb2NhbCBhcmVhLWNvZGUg bGlzdCAqLworZXh0ZXJuIGNoYXIgKiBkaWFsbGNhY1tdOworZXh0ZXJuIGludCB0dHRhcGk7Cisj aWZkZWYgQ0tfVEFQSQorZXh0ZXJuIGludCB0YXBpY29udjsgICAgICAgICAgICAgICAgICAgIC8q IFRBUEkgQ29udmVyc2lvbnMgKi8KK2V4dGVybiBpbnQgdGFwaXBhc3M7ICAgICAgICAgICAgICAg ICAgICAvKiBUQVBJIFBhc3N0aHJvdWdoICovCisjZW5kaWYgLyogQ0tfVEFQSSAqLworZXh0ZXJu IGludCBkaWFsYXRtbzsKK2V4dGVybiBjaGFyICogZGlhbG5wciwgKiBkaWFsc2Z4OworZXh0ZXJu IGNoYXIgKiBkaWFsaXhwLCAqIGRpYWxpeHMsICogZGlhbG1hYzsKK2V4dGVybiBjaGFyICogZGlh bGxkcCwgKiBkaWFsbGRzLCAqIGRpYWx0ZnA7CitleHRlcm4gY2hhciAqIGRpYWxweGksICogZGlh bHB4bywgKiBkaWFsbGFjOworZXh0ZXJuIGNoYXIgKiBkaWFsbGNwLCAqIGRpYWxsY3MsICogZGlh bGxjYzsKK2V4dGVybiBjaGFyICogZGlhbHB4eFtdOworCitleHRlcm4gaW50IGRpYWxjbmY7ICAg ICAgICAgICAgICAgICAgICAgLyogRElBTCBDT05GSVJNQVRJT04gKi8KK2ludCBkaWFsZmxkID0g MDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBESUFMIEZPUkNFLUxPTkctRElTVEFOQ0UgKi8K K2ludCBkaWFsc3J0ID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBESUFMIFNPUlQgT04g Ki8KK2ludCBkaWFscnN0ciA9IDY7ICAgICAgICAgICAgICAgICAgICAgICAvKiBESUFMIFJFU1RS SUNUSU9OICovCitpbnQgZGlhbHRlc3QgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgLyogRElB TCBURVNUICovCitpbnQgZGlhbGNvdW50ID0gMDsgICAgICAgICAgICAgICAgICAgICAgLyogXHYo ZGlhbGNvdW50KSAqLworCitleHRlcm4gaW50IGRpYWxzdGE7ICAgICAgICAgICAgICAgICAgICAg LyogRGlhbCBzdGF0dXMgKi8KK2ludCBkaWFscnRyID0gLTEsICAgICAgICAgICAgICAgICAgICAg ICAvKiBEaWFsIHJldHJpZXMgKi8KKyAgICBkaWFsaW50ID0gMTA7ICAgICAgICAgICAgICAgICAg ICAgICAvKiBEaWFsIHJldHJ5IGludGVydmFsICovCitleHRlcm4gbG9uZyBkaWFsY2FwYXM7ICAg ICAgICAgICAgICAgICAgLyogTW9kZW0gY2FwYWJpbGl0aWVzICovCitleHRlcm4gaW50IGRpYWxj dnQ7ICAgICAgICAgICAgICAgICAgICAgLyogRElBTCBDT05WRVJULURJUkVDVE9SWSAqLworI2Vu ZGlmIC8qIE5PRElBTCAqLworCisjaWZuZGVmIE5PU1BMCisjZGVmaW5lIElGQ09ORExFTiAyNTYK K2ludCBpZmMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJRiBjYXNlICovCisg ICAgbm90ID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRmxhZyBmb3IgSUYgTk9U ICovCisgICAgaWZhcmdzID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ291bnQgb2Yg SUYgY29uZGl0aW9uIHdvcmRzICovCitjaGFyIGlmY29uZFtJRkNPTkRMRU5dOyAgICAgICAgICAg ICAgICAgLyogSUYgY29uZGl0aW9uIHRleHQgKi8KK2NoYXIgKmlmY3A7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBQb2ludGVyIHRvIElGIGNvbmRpdGlvbiB0ZXh0ICovCitleHRlcm4g aW50IHZhcmV2YWw7CisjaWZkZWYgRENNREJVRgorZXh0ZXJuIGludAorICppZmNtZCwgICpjb3Vu dCwgICppZnRlc3QsICppbnRpbWUsCisgICAgKmlucGNhcywgKnRha2VyciwgKm1lcnJvciwgKnhx dWlldCwgKnh2YXJldjsKKyNlbHNlCitleHRlcm4gaW50IGlmY21kW107ICAgICAgICAgICAgICAg ICAgICAgLyogTGFzdCBjb21tYW5kIHdhcyBJRiAqLworZXh0ZXJuIGludCBpZnRlc3RbXTsgICAg ICAgICAgICAgICAgICAgIC8qIExhc3QgSUYgd2FzIHRydWUgKi8KK2V4dGVybiBpbnQgY291bnRb XTsgICAgICAgICAgICAgICAgICAgICAvKiBGb3IgSUYgQ09VTlQsIG9uZSBmb3IgZWFjaCBjbWRs dmwgKi8KK2V4dGVybiBpbnQgaW50aW1lW107ICAgICAgICAgICAgICAgICAgICAvKiBEaXR0byBm b3Igb3RoZXIgc3RhY2thYmxlcy4uLiAqLworZXh0ZXJuIGludCBpbnBjYXNbXTsKK2V4dGVybiBp bnQgdGFrZXJyW107CitleHRlcm4gaW50IG1lcnJvcltdOworZXh0ZXJuIGludCB4cXVpZXRbXTsK K2V4dGVybiBpbnQgeHZhcmV2W107CisjZW5kaWYgLyogRENNREJVRiAqLworI2Vsc2UKK2V4dGVy biBpbnQgdGFrZXJyW107CisjZW5kaWYgLyogTk9TUEwgKi8KKworI2lmZGVmIERDTURCVUYKK2V4 dGVybiBjaGFyICpsaW5lOyAgICAgICAgICAgICAgICAgICAgICAvKiBDaGFyYWN0ZXIgYnVmZmVy IGZvciBhbnl0aGluZyAqLworZXh0ZXJuIGNoYXIgKnRtcGJ1ZjsKKyNlbHNlCitleHRlcm4gY2hh ciBsaW5lW10sIHRtcGJ1ZltdOworI2VuZGlmIC8qIERDTURCVUYgKi8KK2V4dGVybiBjaGFyICps cDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBQb2ludGVyIHRvIGxpbmUgYnVmZmVyICovCisK K2ludCBjd2RmID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDV0QgaGFzIGJlZW4g ZG9uZSAqLworCisvKiBGbGFncyBmb3IgRU5BQkxFL0RJU0FCTEUgKi8KK2V4dGVybiBpbnQgZW5f Y3dkLCBlbl9jcHksIGVuX2RlbCwgZW5fZGlyLCBlbl9maW4sCisgICBlbl9nZXQsIGVuX2hvcywg ZW5fcmVuLCBlbl9zZW4sIGVuX3NldCwgZW5fc3BhLCBlbl90eXAsIGVuX3dobywgZW5fYnllLAor ICAgZW5fYXNnLCBlbl9xdWUsIGVuX3JldCwgZW5fbWFpLCBlbl9wcmksIGVuX21rZCwgZW5fcm1k LCBlbl94aXQsIGVuX2VuYTsKKworZXh0ZXJuIEZJTEUgKnRmaWxlW107ICAgICAgICAgICAgICAg ICAgIC8qIEZpbGUgcG9pbnRlcnMgZm9yIFRBS0UgY29tbWFuZCAqLworZXh0ZXJuIGNoYXIgKnRm bmFtW107ICAgICAgICAgICAgICAgICAgIC8qIE5hbWVzIG9mIFRBS0UgZmlsZXMgKi8KK2V4dGVy biBpbnQgdGZsaW5lW107ICAgICAgICAgICAgICAgICAgICAvKiBUQUtFLWZpbGUgbGluZSBudW1i ZXIgKi8KKworZXh0ZXJuIGludCBzdWNjZXNzOyAgICAgICAgICAgICAgICAgICAgIC8qIENvbW1h bmQgc3VjY2Vzcy9mYWlsdXJlIGZsYWcgKi8KK2V4dGVybiBpbnQgY21kbHZsOyAgICAgICAgICAg ICAgICAgICAgICAvKiBDdXJyZW50IHBvc2l0aW9uIGluIGNvbW1hbmQgc3RhY2sgKi8KKworI2lm bmRlZiBOT1NQTAorZXh0ZXJuIGludCBtYWNsdmw7ICAgICAgICAgICAgICAgICAgICAgIC8qIE1h Y3JvIHRvIGV4ZWN1dGUgKi8KK2V4dGVybiBjaGFyICptYWN4W107ICAgICAgICAgICAgICAgICAg ICAvKiBJbmRleCBvZiBjdXJyZW50IG1hY3JvICovCitleHRlcm4gY2hhciAqbXJ2YWxbXTsgICAg ICAgICAgICAgICAgICAgLyogTWFjcm8gcmV0dXJuIHZhbHVlICovCitleHRlcm4gY2hhciAqbWFj cFtdOyAgICAgICAgICAgICAgICAgICAgLyogUG9pbnRlciB0byBtYWNybyAqLworZXh0ZXJuIGlu dCBtYWNhcmdjW107ICAgICAgICAgICAgICAgICAgIC8qIEFSR0MgZnJvbSBtYWNybyBpbnZvY2F0 aW9uICovCisKKyNpZmRlZiBDT01NRU5UCitleHRlcm4gY2hhciAqbV9saW5lW107CisjZW5kaWYg LyogQ09NTUVOVCAqLworCitleHRlcm4gY2hhciAqbV9hcmdbTUFDTEVWRUxdW05BUkdTXTsgICAg LyogU3RhY2sgb2YgbWFjcm8gYXJndW1lbnRzICovCitleHRlcm4gY2hhciAqZ192YXJbXTsgICAg ICAgICAgICAgICAgICAgLyogR2xvYmFsIHZhcmlhYmxlcyAlYSwgJWIsIGV0YyAqLworCisjaWZk ZWYgRENNREJVRgorZXh0ZXJuIHN0cnVjdCBjbWRwdHIgKmNtZHN0azsgICAgICAgICAgIC8qIFRo ZSBjb21tYW5kIHN0YWNrIGl0c2VsZiAqLworI2Vsc2UKK2V4dGVybiBzdHJ1Y3QgY21kcHRyIGNt ZHN0a1tdOyAgICAgICAgICAvKiBUaGUgY29tbWFuZCBzdGFjayBpdHNlbGYgKi8KKyNlbmRpZiAv KiBEQ01EQlVGICovCisjZW5kaWYgLyogTk9TUEwgKi8KKworI2RlZmluZSB4c3lzdGVtKHMpIHpz eXNjbWQocykKKworc3RhdGljIGludCB4LCB5LCB6ID0gMDsKK3N0YXRpYyBjaGFyICpzLCAqcDsK KworI2lmZGVmIE9TMgorX1BST1RPVFlQKCBpbnQgb3Myc2V0dGl0bGUsIChjaGFyICosIGludCkg KTsKKyNlbmRpZiAvKiBPUzIgKi8KKworZXh0ZXJuIHN0cnVjdCBrZXl0YWIgeWVzbm9bXSwgb25v ZmZbXSwgZm50YWJbXTsKK2V4dGVybiBpbnQgbnllc25vLCBuZm50YWI7CisKKyNpZm5kZWYgTk9T UEwKKworLyogRG8gdGhlIEFTSywgQVNLUSwgR0VUT0ssIGFuZCBSRUFEIGNvbW1hbmRzICovCisK K2ludCBhc2t0aW1lZG91dCA9IDA7CisKKyNkZWZpbmUgQVNLX1BVUCAxCisjZGVmaW5lIEFTS19U TU8gMgorI2RlZmluZSBBU0tfR1VJIDMKKyNkZWZpbmUgQVNLX1FVSSA0CisjZGVmaW5lIEFTS19E RUYgNQorI2RlZmluZSBBU0tfRUNIIDYKKworc3RhdGljIHN0cnVjdCBrZXl0YWIgYXNrdGFiW10g PSB7CisgICAgeyAgIi9kZWZhdWx0IiwgQVNLX0RFRiwgQ01fQVJHIH0sCisgICAgeyAgIi9ndWki LCAgICAgQVNLX0dVSSwgICAgICAKKyNpZmRlZiBLVUkKKyAgICAgICAgICAgMAorI2Vsc2UgLyog S1VJICovCisgICAgICAgICAgIENNX0lOVgorI2VuZGlmIC8qIEtVSSAqLworICAgIH0sCisgICAg eyAiL3BvcHVwIiwgICAgQVNLX1BVUCwgICAKKyNpZmRlZiBPUzIKKyAgICAgICAgICAgMAorI2Vs c2UgLyogT1MyICovCisgICAgICAgICAgIENNX0lOVgorI2VuZGlmIC8qIE9TMiAqLworICAgIH0s CisgICAgeyAiL3F1aWV0IiwgICAgQVNLX1FVSSwgMCB9LAorICAgIHsgIi90aW1lb3V0IiwgIEFT S19UTU8sIENNX0FSRyB9LAorICAgIHsgIiIsIDAsIDAgfQorfTsKK3N0YXRpYyBpbnQgbmFza3Rh YiA9IHNpemVvZihhc2t0YWIpL3NpemVvZihzdHJ1Y3Qga2V5dGFiKS0xOworCitzdGF0aWMgc3Ry dWN0IGtleXRhYiBhc2txdGFiW10gPSB7CisgICAgeyAiL2RlZmF1bHQiLCAgQVNLX0RFRiwgQ01f QVJHIH0sCisgICAgeyAiL2VjaG8iLCAgICAgQVNLX0VDSCwgQ01fQVJHIH0sCisgICAgeyAiL2d1 aSIsICAgICAgQVNLX0dVSSwgICAgICAKKyNpZmRlZiBLVUkKKyAgICAgICAgICAgMAorI2Vsc2Ug LyogS1VJICovCisgICAgICAgICAgIENNX0lOVgorI2VuZGlmIC8qIEtVSSAqLworICAgIH0sCisg ICAgeyAiL25vZWNobyIsICAgQVNLX1FVSSwgQ01fSU5WIH0sCisgICAgeyAiL3BvcHVwIiwgICAg QVNLX1BVUCwgICAKKyNpZmRlZiBPUzIKKyAgICAgICAgICAgMAorI2Vsc2UgLyogT1MyICovCisg ICAgICAgICAgIENNX0lOVgorI2VuZGlmIC8qIE9TMiAqLworICAgIH0sCisgICAgeyAiL3F1aWV0 IiwgICAgQVNLX1FVSSwgMCB9LAorICAgIHsgIi90aW1lb3V0IiwgIEFTS19UTU8sIENNX0FSRyB9 LAorICAgIHsgIiIsIDAsIDAgfQorfTsKK3N0YXRpYyBpbnQgbmFza3F0YWIgPSBzaXplb2YoYXNr cXRhYikvc2l6ZW9mKHN0cnVjdCBrZXl0YWIpLTE7CisKK2ludAorZG9hc2soY3gpIGludCBjeDsg eworICAgIGV4dGVybiBpbnQgYXNrdGltZXIsIHRpbWVsaW1pdDsKKyNpZmRlZiBDS19SRUNBTEwK KyAgICBleHRlcm4gaW50IG9uX3JlY2FsbDsKKyNlbmRpZiAvKiBDS19SRUNBTEwgKi8KKyAgICBp bnQgZWNob2NoYXIgPSAwOworICAgIGludCBwb3B1cGZsZyA9IDA7CisgICAgaW50IGd1aWZsZyA9 IDA7CisgICAgaW50IG5vbXNnID0gMDsKKyAgICBpbnQgbXl0aW1lciA9IDA7CisjaWZkZWYgQ0tf QVBDCisgICAgZXh0ZXJuIGludCBhcGNhY3RpdmUsIGFwY3N0YXR1czsKKyNlbmRpZiAvKiBDS19B UEMgKi8KKworICAgIGNoYXIgZGZidWZbMTAyNF07CQkJLyogQnVmZmVyIGZvciBkZWZhdWx0IGFu c3dlciAqLworICAgIGNoYXIgKiBkZmFuc3dlciA9IE5VTEw7CQkvKiBQb2ludGVyIHRvIGl0ICov CisKKyAgICBjaGFyIHZuYW1idWZbVk5BTUwrMV07ICAgICAgICAgICAgICAvKiBCdWZmZXIgZm9y IHZhcmlhYmxlIG5hbWVzICovCisgICAgY2hhciAqdm5wID0gTlVMTDsgICAgICAgICAgICAgICAg ICAgLyogUG9pbnRlciB0byBzYW1lICovCisgICAgCisgICAgZGZidWZbMF0gPSBOVUw7CisgICAg dm5hbWJ1ZlswXSA9IE5VTDsKKworI2lmZGVmIENLX0FQQworICAgIGlmICggYXBjYWN0aXZlICE9 IEFQQ19JTkFDVElWRSAmJiAoYXBjc3RhdHVzICYgQVBDX05PSU5QKSApIHsKKyAgICAgICAgcmV0 dXJuKHN1Y2Nlc3MgPSAwKTsKKyAgICB9CisjZW5kaWYgLyogQ0tfQVBDICovCisKKyAgICBteXRp bWVyID0gYXNrdGltZXI7ICAgICAgICAgICAgICAgICAvKiBJbmhlcml0IGdsb2JhbCBBU0sgdGlt ZXIgKi8KKyAgICBlY2hvc3RhcnMgPSAwOwkJCS8qIEZvciBBU0tRICovCisKKyAgICBpZiAoY3gg PT0gWFhBU0sgfHwgY3ggPT0gWFhBU0tRKSB7CisgICAgICAgIHN0cnVjdCBGREIgc3csIGZsOwor ICAgICAgICBpbnQgZ2V0dmFsOworICAgICAgICBjaGFyIGM7CisgICAgICAgIGlmIChjeCA9PSBY WEFTS1EpICAgICAgICAgICAgICAgLyogRG9uJ3QgbG9nIEFTS1EgcmVzcG9uc2UgKi8KKyAgICAg ICAgICBkZWJvayA9IDA7CisgICAgICAgIGNtZmRiaSgmc3csICAgICAgICAgICAgICAgICAgICAg LyogRmlyc3QgRkRCIC0gY29tbWFuZCBzd2l0Y2hlcyAqLworICAgICAgICAgICAgICAgX0NNS0VZ LCAgICAgICAgICAgICAgICAgIC8qIGZjb2RlICovCisgICAgICAgICAgICAgICAiVmFyaWFibGUg bmFtZSBvciBzd2l0Y2giLAorICAgICAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAg IC8qIGRlZmF1bHQgKi8KKyAgICAgICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAv KiBhZGR0bCBzdHJpbmcgZGF0YSAqLworCSAgICAgICAoKGN4ID09IFhYQVNLKSA/IG5hc2t0YWIg OiBuYXNrcXRhYiksIC8qIFRhYmxlIHNpemUgKi8KKyAgICAgICAgICAgICAgIDQsICAgICAgICAg ICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMjogNCA9IGNtc3dpICovCisgICAg ICAgICAgICAgICB4eHN0cmluZywgICAgICAgICAgICAgICAgLyogUHJvY2Vzc2luZyBmdW5jdGlv biAqLworCSAgICAgICAoKGN4ID09IFhYQVNLKSA/IGFza3RhYiA6IGFza3F0YWIpLCAvKiBLZXl3 b3JkIHRhYmxlICovCisgICAgICAgICAgICAgICAmZmwgICAgICAgICAgICAgICAgICAgICAgLyog UG9pbnRlciB0byBuZXh0IEZEQiAqLworICAgICAgICAgICAgICAgKTsKKyAgICAgICAgY21mZGJp KCZmbCwgICAgICAgICAgICAgICAgICAgICAvKiBBbnl0aGluZyB0aGF0IGRvZXNuJ3QgbWF0Y2gg Ki8KKyAgICAgICAgICAgICAgIF9DTUZMRCwgICAgICAgICAgICAgICAgICAvKiBmY29kZSAqLwor ICAgICAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgIC8qIGhscG1zZyAqLworICAg ICAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgIC8qIGRlZmF1bHQgKi8KKyAgICAg ICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBzdHJpbmcgZGF0YSAq LworICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVy aWMgZGF0YSAxICovCisgICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgLyog YWRkdGwgbnVtZXJpYyBkYXRhIDIgKi8KKyAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAg ICAgICBOVUxMLAorICAgICAgICAgICAgICAgTlVMTAorICAgICAgICAgICAgICAgKTsKKyAgICAg ICAgd2hpbGUgKDEpIHsgICAgICAgICAgICAgICAgICAgICAvKiBQYXJzZSAwIG9yIG1vcmUgc3dp dGNoZXMgKi8KKyAgICAgICAgICAgIHggPSBjbWZkYigmc3cpOyAgICAgICAgICAgICAvKiBQYXJz ZSBzb21ldGhpbmcgKi8KKyAgICAgICAgICAgIGlmICh4IDwgMCkKKyAgICAgICAgICAgICAgcmV0 dXJuKHgpOworICAgICAgICAgICAgaWYgKGNtcmVzdWx0LmZjb2RlICE9IF9DTUtFWSkgLyogQnJl YWsgb3V0IGlmIG5vdCBhIHN3aXRjaCAqLworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg ICAgIGMgPSBjbWdicmsoKTsKKyAgICAgICAgICAgIGlmICgoZ2V0dmFsID0gKGMgPT0gJzonIHx8 IGMgPT0gJz0nKSkgJiYgIShjbWdrd2ZsZ3MoKSAmIENNX0FSRykpIHsKKyAgICAgICAgICAgICAg ICBwcmludGYoIj9UaGlzIHN3aXRjaCBkb2VzIG5vdCB0YWtlIGFuIGFyZ3VtZW50XG4iKTsKKyAg ICAgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg KCFnZXR2YWwgJiYgKGNtZ2t3ZmxncygpICYgQ01fQVJHKSkgeworICAgICAgICAgICAgICAgIHBy aW50ZigiP1RoaXMgc3dpdGNoIHJlcXVpcmVzIGFuIGFyZ3VtZW50XG4iKTsKKyAgICAgICAgICAg ICAgICByZXR1cm4oLTkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3dpdGNoIChjbXJl c3VsdC5ucmVzdWx0KSB7CisJICAgICAgY2FzZSBBU0tfUVVJOgorCQlub21zZyA9IDE7CisJCWlm IChjeCA9PSBYWEFTS1EpCisJCSAgZWNob3N0YXJzID0gMDsKKwkJYnJlYWs7CisgICAgICAgICAg ICAgIGNhc2UgQVNLX1BVUDoKKyAgICAgICAgICAgICAgICBwb3B1cGZsZyA9IDE7CisgICAgICAg ICAgICAgICAgYnJlYWs7CisJICAgICAgY2FzZSBBU0tfR1VJOgorCQlndWlmbGcgPSAxOworCQli cmVhazsKKyAgICAgICAgICAgICAgY2FzZSBBU0tfVE1POiB7CisgICAgICAgICAgICAgICAgICBp ZiAoKHkgPSBjbW51bSgic2Vjb25kcyIsIjEiLDEwLCZ4LHh4c3RyaW5nKSkgPCAwKQorICAgICAg ICAgICAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgICAgICAgICAgICBpZiAoeCA8IDApCisg ICAgICAgICAgICAgICAgICAgIHggPSAwOworICAgICAgICAgICAgICAgICAgbXl0aW1lciA9IHg7 CisgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAg ICBjYXNlIEFTS19FQ0g6IHsKKyAgICAgICAgICAgICAgICAgIGlmICgoeSA9IGNtZmxkKCJDaGFy YWN0ZXIgdG8gZWNobyIsIioiLCZzLHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgICAgICAgICAg ICByZXR1cm4oeSk7CisJCSAgZWNob2NoYXIgPSAqczsKKyAgICAgICAgICAgICAgICAgIGJyZWFr OworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGNhc2UgQVNLX0RFRjogeworICAgICAg ICAgICAgICAgICAgaWYgKCh5ID0gY21mbGQoIlRleHQgdG8gc3VwcGx5IGlmIHJlcGx5IGlzIGVt cHR5IiwKKwkJCQkgIiIsJnMseHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgICAgICAgICAgIHJl dHVybih5KTsKKwkJICBja3N0cm5jcHkoZGZidWYscywxMDI0KTsKKwkJICBkZmFuc3dlciA9IGRm YnVmOworICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgICAgZGVmYXVsdDogcmV0dXJuKC0yKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg ICAgICAvKiBIYXZlIHZhcmlhYmxlIG5hbWUsIG1ha2UgY29weS4gKi8KKyAgICAgICAgY2tzdHJu Y3B5KHZuYW1idWYsY21yZXN1bHQuc3Jlc3VsdCxWTkFNTCk7CisgICAgICAgIHZucCA9IHZuYW1i dWY7CisgICAgICAgIGlmICh2bmFtYnVmWzBdID09IENNRFEgJiYKKyAgICAgICAgICAgICh2bmFt YnVmWzFdID09ICclJyB8fCB2bmFtYnVmWzFdID09ICcmJykpCisgICAgICAgICAgdm5wKys7Cisg ICAgICAgIHkgPSAwOworICAgICAgICBpZiAoKnZucCA9PSAnJScgfHwgKnZucCA9PSAnJicpIHsK KyAgICAgICAgICAgIGlmICgoeSA9IHBhcnNldmFyKHZucCwmeCwmeikpIDwgMCkKKwkgICAgICBy ZXR1cm4oeSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGN4ICE9IFhYR09LICYmIGN4ICE9 IFhYUkRCTCkgeyAvKiBHZXQgdmFyaWFibGUgbmFtZSAqLworICAgICAgICBpZiAoKHkgPSBjbWZs ZCgiVmFyaWFibGUgbmFtZSIsIiIsJnMsTlVMTCkpIDwgMCkgeworICAgICAgICAgICAgaWYgKHkg PT0gLTMpIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIj9WYXJpYWJsZSBuYW1lIHJlcXVpcmVk XG4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICAgICAgfSBlbHNlIHJl dHVybih5KTsKKyAgICAgICAgfQorICAgICAgICBja3N0cm5jcHkodm5hbWJ1ZixzLFZOQU1MKTsg ICAgIC8qIE1ha2UgYSBjb3B5LiAqLworICAgICAgICB2bnAgPSB2bmFtYnVmOworICAgICAgICBp ZiAodm5hbWJ1ZlswXSA9PSBDTURRICYmCisgICAgICAgICAgICAodm5hbWJ1ZlsxXSA9PSAnJScg fHwgdm5hbWJ1ZlsxXSA9PSAnJicpKQorICAgICAgICAgIHZucCsrOworICAgICAgICB5ID0gMDsK KyAgICAgICAgaWYgKCp2bnAgPT0gJyUnIHx8ICp2bnAgPT0gJyYnKSB7CisgICAgICAgICAgICBp ZiAoKHkgPSBwYXJzZXZhcih2bnAsJngsJnopKSA8IDApCisgICAgICAgICAgICAgIHJldHVybih5 KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoY3ggPT0gWFhSRUEgfHwgY3ggPT0gWFhSREJM KSB7ICAvKiBSRUFEIG9yIFJFQURCTE9DSyBjb21tYW5kICovCisgICAgICAgIGlmICgoeSA9IGNt Y2ZtKCkpIDwgMCkgICAgICAgICAgLyogR2V0IGNvbmZpcm1hdGlvbiAqLworICAgICAgICAgIHJl dHVybih5KTsKKyAgICAgICAgaWYgKGNoa2ZuKFpSRklMRSkgPCAxKSB7ICAgICAgICAvKiBGaWxl IG9wZW4/ICovCisgICAgICAgICAgICBwcmludGYoIj9SZWFkIGZpbGUgbm90IG9wZW5cbiIpOwor ICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKyAgICAgICAgfQorICAgICAgICBpZiAo IShzID0gKGNoYXIgKilyZWFkYnVmKSkgeyAgICAgICAgICAgLyogV2hlcmUgdG8gcmVhZCBpbnRv LiAqLworICAgICAgICAgICAgcHJpbnRmKCI/T29wcywgbm8gUkVBRCBidWZmZXIhXG4iKTsKKyAg ICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7CisgICAgICAgIH0KKyAgICAgICAgeSA9IHpz aW5sKFpSRklMRSwgcywgcmVhZGJsb2NrKTsgLyogUmVhZCBhIGxpbmUuICovCisgICAgICAgIGRl YnVnKEYxMTEsInJlYWQgenNpbmwiLHMseSk7CisgICAgICAgIGlmICh5IDwgMCkgeyAgICAgICAg ICAgICAgICAgICAgLyogT24gRU9GIG9yIG90aGVyIGVycm9yLCAqLworICAgICAgICAgICAgemNs b3NlKFpSRklMRSk7ICAgICAgICAgICAgIC8qIGNsb3NlIHRoZSBmaWxlLCAqLworICAgICAgICAg ICAgZGVsbWFjKHZucCwwKTsgICAgICAgICAgICAgIC8qIGRlbGV0ZSB0aGUgdmFyaWFibGUsICov CisgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOyAgICAgICAgLyogYW5kIHJldHVybiBm YWlsdXJlLiAqLworICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJl YWQgd2FzIE9LLiAqLworICAgICAgICAgICAgcmVhZHNpemUgPSAoaW50KSBzdHJsZW4ocyk7Cisg ICAgICAgICAgICBzdWNjZXNzID0gKGFkZG1hYyh2bnAscykgPCAwID8gMCA6IDEpOyAvKiBEZWZp bmUgdmFyaWFibGUgKi8KKyAgICAgICAgICAgIGRlYnVnKEYxMTEsInJlYWQgYWRkbWFjIix2bnAs c3VjY2Vzcyk7CisgICAgICAgICAgICByZXR1cm4oc3VjY2Vzcyk7ICAgICAgICAgICAgLyogUmV0 dXJuIHN1Y2Nlc3MuICovCisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBBU0ssIEFTS1EsIEdF VE9LLCBvciBHRVRDICovCisKKyAgICBpZiAoY3ggPT0gWFhHT0spIHsJCQkvKiBHRVRPSyBjYW4g dGFrZSBzd2l0Y2hlcyAqLworICAgICAgICBzdHJ1Y3QgRkRCIHN3LCBmbDsKKyAgICAgICAgaW50 IGdldHZhbDsKKyAgICAgICAgY2hhciBjOworICAgICAgICBjbWZkYmkoJnN3LCAgICAgICAgICAg ICAgICAgICAgIC8qIEZpcnN0IEZEQiAtIGNvbW1hbmQgc3dpdGNoZXMgKi8KKyAgICAgICAgICAg ICAgIF9DTUtFWSwgICAgICAgICAgICAgICAgICAvKiBmY29kZSAqLworICAgICAgICAgICAgICAg IlZhcmlhYmxlIG5hbWUgb3IgcXVlc3Rpb24gcHJvbXB0IiwKKyAgICAgICAgICAgICAgICIiLCAg ICAgICAgICAgICAgICAgICAgICAvKiBkZWZhdWx0ICovCisgICAgICAgICAgICAgICAiIiwgICAg ICAgICAgICAgICAgICAgICAgLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KKyAgICAgICAgICAgICAg IG5hc2t0YWIsICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMTogdGJsIHNp emUgKi8KKyAgICAgICAgICAgICAgIDQsICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBu dW1lcmljIGRhdGEgMjogNCA9IGNtc3dpICovCisgICAgICAgICAgICAgICB4eHN0cmluZywgICAg ICAgICAgICAgICAgLyogUHJvY2Vzc2luZyBmdW5jdGlvbiAqLworICAgICAgICAgICAgICAgYXNr dGFiLCAgICAgICAgICAgICAgICAgIC8qIEtleXdvcmQgdGFibGUgKi8KKyAgICAgICAgICAgICAg ICZmbCAgICAgICAgICAgICAgICAgICAgICAvKiBQb2ludGVyIHRvIG5leHQgRkRCICovCisgICAg ICAgICAgICAgICApOworICAgICAgICBjbWZkYmkoJmZsLCAgICAgICAgICAgICAgICAgICAgIC8q IEFueXRoaW5nIHRoYXQgZG9lc24ndCBtYXRjaCAqLworICAgICAgICAgICAgICAgX0NNVFhULCAg ICAgICAgICAgICAgICAgIC8qIGZjb2RlICovCisgICAgICAgICAgICAgICAiIiwgICAgICAgICAg ICAgICAgICAgICAgLyogaGxwbXNnICovCisgICAgICAgICAgICAgICAiIiwgICAgICAgICAgICAg ICAgICAgICAgLyogZGVmYXVsdCAqLworICAgICAgICAgICAgICAgIiIsICAgICAgICAgICAgICAg ICAgICAgIC8qIGFkZHRsIHN0cmluZyBkYXRhICovCisgICAgICAgICAgICAgICAwLCAgICAgICAg ICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDEgKi8KKyAgICAgICAgICAgICAg IDAsICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMiAqLworICAg ICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICBO VUxMCisgICAgICAgICAgICAgICApOworICAgICAgICB3aGlsZSAoMSkgeyAgICAgICAgICAgICAg ICAgICAgIC8qIFBhcnNlIDAgb3IgbW9yZSBzd2l0Y2hlcyAqLworICAgICAgICAgICAgeCA9IGNt ZmRiKCZzdyk7ICAgICAgICAgICAgIC8qIFBhcnNlIHNvbWV0aGluZyAqLworICAgICAgICAgICAg aWYgKHggPCAwKQorICAgICAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgICAgICBpZiAoY21y ZXN1bHQuZmNvZGUgIT0gX0NNS0VZKSAvKiBCcmVhayBvdXQgaWYgbm90IGEgc3dpdGNoICovCisg ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgYyA9IGNtZ2JyaygpOworICAgICAgICAg ICAgaWYgKChnZXR2YWwgPSAoYyA9PSAnOicgfHwgYyA9PSAnPScpKSAmJiAhKGNtZ2t3Zmxncygp ICYgQ01fQVJHKSkgeworICAgICAgICAgICAgICAgIHByaW50ZigiP1RoaXMgc3dpdGNoIGRvZXMg bm90IHRha2UgYW4gYXJndW1lbnRcbiIpOworICAgICAgICAgICAgICAgIHJldHVybigtOSk7Cisg ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIWdldHZhbCAmJiAoY21na3dmbGdzKCkgJiBD TV9BUkcpKSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCI/VGhpcyBzd2l0Y2ggcmVxdWlyZXMg YW4gYXJndW1lbnRcbiIpOworICAgICAgICAgICAgICAgIHJldHVybigtOSk7CisgICAgICAgICAg ICB9CisgICAgICAgICAgICBzd2l0Y2ggKGNtcmVzdWx0Lm5yZXN1bHQpIHsKKyAgICAgICAgICAg ICAgY2FzZSBBU0tfUFVQOgorICAgICAgICAgICAgICAgIHBvcHVwZmxnID0gMTsKKyAgICAgICAg ICAgICAgICBicmVhazsKKwkgICAgICBjYXNlIEFTS19HVUk6CisJCWd1aWZsZyA9IDE7CisJCWJy ZWFrOworICAgICAgICAgICAgICBjYXNlIEFTS19UTU86IHsKKyAgICAgICAgICAgICAgICAgIGlm ICgoeSA9IGNtbnVtKCJzZWNvbmRzIiwiMSIsMTAsJngseHhzdHJpbmcpKSA8IDApCisgICAgICAg ICAgICAgICAgICAgIHJldHVybih5KTsKKyAgICAgICAgICAgICAgICAgIGlmICh4IDwgMCkKKyAg ICAgICAgICAgICAgICAgICAgeCA9IDA7CisgICAgICAgICAgICAgICAgICBteXRpbWVyID0geDsK KyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg IGNhc2UgQVNLX0RFRjogeworICAgICAgICAgICAgICAgICAgaWYgKCh5ID0gY21mbGQoIlRleHQg dG8gc3VwcGx5IGlmIHJlcGx5IGlzIGVtcHR5IiwKKwkJCQkgIiIsJnMseHhzdHJpbmcpKSA8IDAp CisgICAgICAgICAgICAgICAgICAgIHJldHVybih5KTsKKwkJICBja3N0cm5jcHkoZGZidWYscywx MDI0KTsKKwkJICBkZmFuc3dlciA9IGRmYnVmOworICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgICAgICAgIH0KKwkgICAgICBjYXNlIEFTS19RVUk6CisJCW5vbXNnID0gMTsKKwkJYnJl YWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IHJldHVybigtMik7CisgICAgICAgICAgICB9CisJ fQorCXAgPSBjbXJlc3VsdC5zcmVzdWx0OworICAgIH0gZWxzZQorICAgICAgaWYgKCh5ID0gY210 eHQoCisiUHJvbXB0LFxuXAorIGVuY2xvc2UgaW4geyBicmFjZXMgfSBvciBcIiBxdW90ZXMgXCIg dG8gcHJlc2VydmUgbGVhZGluZyBhbmQgdHJhaWxpbmdcblwKKyBzcGFjZXMsIHByZWNlZGUgcXVl c3Rpb24gbWFyayB3aXRoIGJhY2tzbGFzaCAoXFwpLiIsCisgICAgICAgICAgICAgICAgICAgIiIs JnAseHhzdHJpbmcpKSA8IDApCisgICAgICAgIHJldHVybih5KTsKKworICAgIGlmICghcCkgcCA9 ICIiOworI2lmbmRlZiBOT0xPQ0FMCisjaWZkZWYgT1MyCisgICAgaWYgKHBvcHVwZmxnKSB7ICAg ICAgICAgICAgICAgICAgICAgLyogUG9wdXAgcmVxdWVzdGVkICovCisgICAgICAgIGludCBsZW4g PSAtMTsKKyAgICAgICAgY2tzdHJuY3B5KHRtcGJ1ZixicnN0cmlwKHApLFRNUEJVRlNJWik7Cisg ICAgICAgIHAgPSB0bXBidWY7CisgICAgICAgIGlmIChjeCA9PSBYWEFTSyB8fCBjeCA9PSBYWEFT S1EpIHsKKyAgICAgICAgICAgIGlmIChjeCA9PSBYWEFTSykKKyAgICAgICAgICAgICAgbGVuID0g cG9wdXBfcmVhZHRleHQodm1vZGUsTlVMTCxwLGxpbmUsTElOQlVGU0laLG15dGltZXIpOworICAg ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBsZW4gPSBwb3B1cF9yZWFkcGFzcyh2bW9kZSxO VUxMLHAsbGluZSxMSU5CVUZTSVosbXl0aW1lcik7CisgICAgICAgICAgICBhc2t0aW1lZG91dCA9 ICggbGVuIDwgMCAmJiBteXRpbWVyICk7CisgICAgICAgIH0gZWxzZSBpZiAoY3ggPT0gWFhHT0sp IHsKKwkgICAgcHJpbnRmKCI/U29ycnksIEdFVE9LIC9QT1BVUCBub3QgaW1wbGVtZW50ZWQgeWV0 XG4iKTsKKwkgICAgdGltZWxpbWl0ID0gMDsKKwkgICAgcmV0dXJuKC05KTsKKwl9CisgICAgICAg IGlmIChsZW4gPj0gMCkgeworCSAgICB5ID0gYWRkbWFjKHZucCwoY2hhciAqKWxpbmUpOyAvKiBB ZGQgaXQgdG8gdGhlIG1hY3JvIHRhYmxlLiAqLworICAgICAgICB9IGVsc2UgaWYgKCBhc2t0aW1l ZG91dCAmJiBkZmFuc3dlciApIHsKKyAgICAgICAgICAgIHkgPSBhZGRtYWModm5wLGRmYW5zd2Vy KTsJICAgIC8qIEFkZCBpdCB0byB0aGUgbWFjcm8gdGFibGUuICovCisgICAgICAgICAgICBhc2t0 aW1lZG91dCA9IDA7CisgICAgICAgICAgICBsZW4gPSAwOworICAgICAgICB9CisgICAgICAgIHRp bWVsaW1pdCA9IDA7CisgICAgICAgIHJldHVybihzdWNjZXNzID0gKChsZW4gPj0gMCkgJiYgKHkg Pj0gMCkpICYmICFhc2t0aW1lZG91dCk7CisgICAgfQorI2lmZGVmIEtVSQorICAgIGlmIChndWlm bGcpIHsgICAgICAgICAgICAgICAgICAgICAgIC8qIEdVSSByZXF1ZXN0ZWQgKi8KKyAgICAgICAg aW50IHJjLCBuOworCWNoYXIgKiBzMTsKKwlzMSA9IHRtcGJ1ZjsKKwluID0gVE1QQlVGU0laLTE7 CisJenpzdHJpbmcoYnJzdHJpcChwKSwmczEsJm4pOworICAgICAgICBwID0gdG1wYnVmOworICAg ICAgICBpZiAoY3ggPT0gWFhBU0sgfHwgY3ggPT0gWFhBU0tRKSB7CisgICAgICAgICAgICByYyA9 IGd1aV90eHRfZGlhbG9nKE5VTEwscCwoY3ggPT0gWFhBU0spLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBsaW5lLExJTkJVRlNJWixkZmFuc3dlcixteXRpbWVyKTsKKyAgICAgICAg ICAgIGFza3RpbWVkb3V0ID0gKHJjID09IC0xICYmIG15dGltZXIpOworICAgICAgICAgICAgaWYg KHJjID09IDEpIHsKKyAgICAgICAgICAgICAgICB5ID0gYWRkbWFjKHZucCwoY2hhciAqKWxpbmUp OyAvKiBBZGQgaXQgdG8gdGhlIG1hY3JvIHRhYmxlLiAqLworICAgICAgICAgICAgfSBlbHNlIGlm ICggYXNrdGltZWRvdXQgJiYgZGZhbnN3ZXIgKSB7CisgICAgICAgICAgICAgICAgeSA9IGFkZG1h Yyh2bnAsZGZhbnN3ZXIpOyAvKiBBZGQgZGVmYXVsdCB0byBtYWNybyB0YWJsZS4gKi8KKyAgICAg ICAgICAgICAgICBhc2t0aW1lZG91dCA9IDA7CisgICAgICAgICAgICAgICAgcmMgPSAxOworICAg ICAgICAgICAgfQorCSAgICB0aW1lbGltaXQgPSAwOworCSAgICByZXR1cm4oc3VjY2VzcyA9IChy YyA9PSAxICYmICh5ID49IDApKSAmJiAhYXNrdGltZWRvdXQpOworCX0gZWxzZSBpZiAoY3ggPT0g WFhHT0spIHsKKwkgICAgaW50IHg7CisJICAgIHggPSBsb29rdXAoeWVzbm8sZGZhbnN3ZXIsbnll c25vLE5VTEwpOworCSAgICBpZiAoeCAhPSAxKSB4ID0gMjsKKwkgICAgcmMgPSB1cV9vayhOVUxM LCBwLCAzLCBOVUxMLCB4KTsKKwkgICAgcmV0dXJuKHN1Y2Nlc3MgPSAocmMgPT0gMSkpOworCX0K KyAgICB9CisjZW5kaWYgLyogS1VJICovCisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogTk9M T0NBTCAqLworCisgICAgY29uY2IoKGNoYXIpZXNjYXBlKTsgICAgICAgICAgICAgICAgLyogRW50 ZXIgQ0JSRUFLIG1vZGUgKi8KKyAgICBjbXNhdnAocHNhdmUsUFJPTVBUTCk7ICAgICAgICAgICAg ICAvKiBTYXZlIG9sZCBwcm9tcHQgKi8KKyAgICBjbXNldHAoYnJzdHJpcChwKSk7ICAgICAgICAg ICAgICAgICAvKiBNYWtlIG5ldyBwcm9tcHQgKi8KKworcmVwcm9tcHQ6CisgICAgaWYgKGN4ID09 IFhYQVNLUSkgeyAgICAgICAgICAgICAgICAgLyogRm9yIEFTS1EsICovCisgICAgICAgIGNtaW5p KDApOyAgICAgICAgICAgICAgICAgICAgICAgLyogbm8tZWNobyBtb2RlLiAqLworCWlmIChlY2hv Y2hhcikKKwkgIGVjaG9zdGFycyA9IGVjaG9jaGFyOworICAgIH0gZWxzZSB7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIEZvciBvdGhlcnMsIHJlZ3VsYXIgZWNob2luZy4gKi8KKyAgICAg ICAgY21pbmkoY2t4ZWNoKTsKKwllY2hvc3RhcnMgPSAwOworICAgIH0KKyAgICBhc2tmbGFnID0g MTsKKyAgICB4ID0gLTE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUaGlzIG1lYW5z IHRvIHJlcGFyc2UuICovCisgICAgY21mbGdzID0gMDsKKyAgICBpZiAocGZsYWcpCisgICAgICBw cm9tcHQoeHhzdHJpbmcpOyAgICAgICAgICAgICAgICAgLyogSXNzdWUgcHJvbXB0LiAqLworCisg ICAgYXNrdGltZWRvdXQgPSAwOyAgICAgICAgICAgICAgICAgICAgLyogSGFuZGxlIHRpbWVkIHJl c3BvbnNlcy4gKi8KKyAgICB0aW1lbGltaXQgPSBteXRpbWVyOworcmVwYXJzZToKKyAgICBjbXJl cygpOworICAgIGlmIChjeCA9PSBYWEdPSykgeyAgICAgICAgICAgICAgICAgIC8qIEdFVE9LICov CisjaWZkZWYgQ0tfUkVDQUxMCisgICAgICAgIG9uX3JlY2FsbCA9IDA7CisjZW5kaWYgLyogQ0tf UkVDQUxMICovCisgICAgICAgIGFza2ZsYWcgPSAwOworCS8qIEdFVE9LIHVzZXMga2V5d29yZCB0 YWJsZSAqLworICAgICAgICB4ID0gY21rZXkoeWVzbm8sbnllc25vLCIiLGRmYW5zd2VyLHh4c3Ry aW5nKTsKKyAgICAgICAgaWYgKHggPCAwKSB7ICAgICAgICAgICAgICAgICAgICAvKiBQYXJzZSBl cnJvciAqLworICAgICAgICAgICAgaWYgKHggPT0gLTEwKSB7CisJCWNoYXIgKiBkczsKKwkJZHMg PSBkZmFuc3dlciA/IGRmYW5zd2VyIDogIk5vIjsKKwkJaWYgKCFub21zZykKKwkJICBwcmludGYo Ij9UaW1lZCBvdXQsIGFzc3VtaW5nIFwiJXNcIiIsZHMpOworCQlwcmludGYoIlxuIik7CisgICAg ICAgICAgICAgICAgYXNrdGltZWRvdXQgPSAxOworCQl4ID0gbG9va3VwKHllc25vLGRzLG55ZXNu byxOVUxMKTsKKwkJaWYgKHggIT0gMSkgeCA9IDA7CisgICAgICAgICAgICAgICAgZ290byBnb2tk b25lOworICAgICAgICAgICAgfSBlbHNlIGlmICh4ID09IC0zKSB7ICAgICAgIC8qIE5vIGFuc3dl cj8gKi8KKyAgICAgICAgICAgICAgICBwcmludGYoIlBsZWFzZSByZXNwb25kIFllcyBvciBOb1xu Iik7IC8qIE1ha2UgdGhlbSBhbnN3ZXIgKi8KKyAgICAgICAgICAgICAgICBjbWluaShja3hlY2gp OworICAgICAgICAgICAgICAgIGdvdG8gcmVwcm9tcHQ7CisgICAgICAgICAgICB9IGVsc2UgaWYg KHggPT0gLTEpIHsKKyAgICAgICAgICAgICAgICBnb3RvIHJlcGFyc2U7CisgICAgICAgICAgICB9 IGVsc2UKKyAgICAgICAgICAgICAgZ290byByZXByb21wdDsKKyAgICAgICAgfQorICAgICAgICBp ZiAoY21jZm0oKSA8IDApICAgICAgICAgICAgICAgIC8qIEdldCBjb25maXJtYXRpb24gKi8KKyAg ICAgICAgICBnb3RvIHJlcGFyc2U7CisgIGdva2RvbmU6CisgICAgICAgIGFza2ZsYWcgPSAwOwor ICAgICAgICBjbXNldHAocHNhdmUpOyAgICAgICAgICAgICAgICAgIC8qIFJlc3RvcmUgcHJvbXB0 ICovCisjaWZkZWYgVk1TCisgICAgICAgIGlmIChjbWRsdmwgPiAwKSAgICAgICAgICAgICAgICAg LyogSW4gVk1TIGFuZCBub3QgYXQgdG9wIGxldmVsLCAqLworICAgICAgICAgIGNvbnJlcygpOyAg ICAgICAgICAgICAgICAgICAgIC8qICByZXN0b3JlIGNvbnNvbGUgYWdhaW4uICovCisjZW5kaWYg LyogVk1TICovCisgICAgICAgIHRpbWVsaW1pdCA9IDA7CisgICAgICAgIHJldHVybih4KTsgICAg ICAgICAgICAgICAgICAgICAgLyogUmV0dXJuIHN1Y2Nlc3Mgb3IgZmFpbHVyZSAqLworICAgIH0g ZWxzZSBpZiAoY3ggPT0gWFhHRVRDICAgICAgICAgICAgIC8qIEdFVEMgKi8KKyNpZmRlZiBPUzIK KyAgICAgICAgICAgICAgIHx8IGN4ID09IFhYR0VUSyAgICAgICAgICAvKiBvciBHRVRLRVlDT0RF ICovCisjZW5kaWYgLyogT1MyICovCisgICAgICAgICAgICAgICApIHsgICAgICAgICAgICAgICAg ICAgICAgLyogR0VUQyAqLworICAgICAgICBjaGFyIHRtcFsxNl07CisgICAgICAgIGNvbmJpbigo Y2hhcillc2NhcGUpOyAgICAgICAgICAgLyogUHV0IGtleWJvYXJkIGluIHJhdyBtb2RlICovCisj aWZuZGVmIE5PU0VUS0VZCisjaWZkZWYgT1MyCisgICAgICAgIGlmIChjeCA9PSBYWEdFVEspIHsg ICAgICAgICAgICAgLyogR0VUS0VZQ09ERSAqLworICAgICAgICAgICAgZXh0ZXJuIGludCBvczJn a3M7CisgICAgICAgICAgICBpbnQgdDsKKyAgICAgICAgICAgIHQgPSBvczJna3M7ICAgICAgICAg ICAgICAgICAvKiBUdXJuIG9mZiBrdmVyYiByZWNvZ25pdGlvbiAqLworICAgICAgICAgICAgb3My Z2tzID0gMDsKKyAgICAgICAgICAgIHggPSBjb25na3ModGltZWxpbWl0KTsgICAgICAvKiBSZWFk IGEga2V5IGV2ZW50LCBibG9ja2luZyAqLworICAgICAgICAgICAgb3MyZ2tzID0gdDsgICAgICAg ICAgICAgICAgIC8qIFB1dCBiYWNrIGt2ZXJiIHJlY29nbml0aW9uICovCisgICAgICAgIH0gZWxz ZSAgICAgICAgICAgICAgICAgICAgICAgICAgLyogR0VUQyAqLworI2VuZGlmIC8qIE9TMiAqLwor I2VuZGlmIC8qIE5PU0VUS0VZICovCisgICAgICAgIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMDEs IkdFVEMgY29uY2hrIiwiIixjb25jaGsoKSk7CisgICAgICAgICAgICB4ID0gY29uaW5jKHRpbWVs aW1pdCk7ICAgICAgLyogSnVzdCByZWFkIG9uZSBjaGFyYWN0ZXIgKi8KKyAgICAgICAgICAgIGRl YnVnKEYxMDEsIkdFVEMgY29uaW5jIiwiIix4KTsKKyAgICAgICAgfQorICAgICAgICBjb25jYigo Y2hhcillc2NhcGUpOyAgICAgICAgICAgIC8qIFB1dCBrZXlib2FyZCBiYWNrIGluIGNicmVhayBt b2RlICovCisgICAgICAgIGlmICh4ID4gLTEpIHsKKyAgICAgICAgICAgIGlmICh4Y21kc3JjID09 IDApCisgICAgICAgICAgICAgIHByaW50ZigiXHJcbiIpOworI2lmZGVmIE9TMgorICAgICAgICAg ICAgaWYgKGN4ID09IFhYR0VUSykgeyAgICAgICAgIC8qIEdFVEtFWUNPREUgKi8KKyAgICAgICAg ICAgICAgICBzcHJpbnRmKHRtcCwiJWQiLHgpOyAgICAvKiBTQUZFICovCisgICAgICAgICAgICB9 IGVsc2UgeworI2VuZGlmIC8qIE9TMiAqLworICAgICAgICAgICAgICAgIHRtcFswXSA9IChjaGFy KSAoeCAmIDB4ZmYpOworICAgICAgICAgICAgICAgIHRtcFsxXSA9IE5VTDsKKyNpZmRlZiBPUzIK KyAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAgICAgIHkgPSBhZGRtYWMo dm5wLHRtcCk7ICAgICAgICAvKiBBZGQgaXQgdG8gdGhlIG1hY3JvIHRhYmxlLiAqLworICAgICAg ICAgICAgZGVidWcoRjExMSwiZ2V0Yy9nZXRrIGFkZG1hYyIsdm5wLHkpOworICAgICAgICB9IGVs c2UgeSA9IC0xOworICAgICAgICBjbXNldHAocHNhdmUpOyAgICAgICAgICAgICAgICAgIC8qIFJl c3RvcmUgb2xkIHByb21wdC4gKi8KKyAgICAgICAgaWYgKHggPCAtMSkgeworICAgICAgICAgICAg YXNrdGltZWRvdXQgPSAxOworICAgICAgICAgICAgaWYgKCFxdWlldCAmJiAhbm9tc2cpCisgICAg ICAgICAgICAgIHByaW50ZigiP1RpbWVkIG91dCIpOworCSAgICBwcmludGYoIlxuIik7CisgICAg ICAgIH0KKyAgICAgICAgdGltZWxpbWl0ID0gMDsKKyAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAo KHkgPCAwID8gMCA6IDEpICYmIChhc2t0aW1lZG91dCA9PSAwKSkpOworICAgIH0gZWxzZSB7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFTSyBvciBBU0tRICovCisjaWZkZWYgQ0tfUkVD QUxMCisgICAgICAgIG9uX3JlY2FsbCA9IDA7CQkJLyogRG9uJ3QgcHV0IHJlc3BvbnNlIGluIHJl Y2FsbCBidWYgKi8KKyNlbmRpZiAvKiBDS19SRUNBTEwgKi8KKwlhc2tmbGFnID0gMTsJCQkvKiBB U0tbUV0gYWx3YXlzIGdvZXMgdG8gdGVybWluYWwgKi8KKyAgICAgICAgeSA9IGNtZGdxdW8oKTsg ICAgICAgICAgICAgICAgICAvKiBHZXQgY3VycmVudCBxdW90aW5nICovCisgICAgICAgIGNtZHNx dW8oMCk7ICAgICAgICAgICAgICAgICAgICAgLyogVHVybiBvZmYgcXVvdGluZyAqLworICAgICAg ICB3aGlsZSAoeCA9PSAtMSkgeyAgICAgICAgICAgICAgIC8qIFByb21wdCB0aWxsIHRoZXkgYW5z d2VyICovCisgICAgICAgICAgICB4ID0gY210eHQoIlBsZWFzZSByZXNwb25kLiIsZGZhbnN3ZXIs JnMsTlVMTCk7CisgICAgICAgICAgICBkZWJ1ZyhGMTExLCJBU0sgY210eHQiLHMseCk7CisgICAg ICAgICAgICBjbXJlcygpOworICAgICAgICB9CisgICAgICAgIGNtZHNxdW8oeSk7ICAgICAgICAg ICAgICAgICAgICAgLyogUmVzdG9yZSBwcmV2aW91cyBxdW90aW5nICovCisgICAgICAgIGlmIChj eCA9PSBYWEFTS1EpICAgICAgICAgICAgICAgLyogQVNLUSBtdXN0IGVjaG8gQ1JMRiBoZXJlICov CisgICAgICAgICAgcHJpbnRmKCJcclxuIik7CisJaWYgKHggPT0gLTEwICYmIGRmYW5zd2VyKSB7 CS8qIERvbid0IGZhaWwgb24gdGltZW91dCBpZiAqLworCSAgICBzID0gZGZhbnN3ZXI7CQkvKiBh IGRlZmF1bHQgd2FzIHNwZWNpZmllZCAqLworCSAgICBhc2t0aW1lZG91dCA9IDA7CQkvKiBhbmQg ZG9uJ3QgZmFpbCAqLworCSAgICB4ID0gMDsKKwl9CisgICAgICAgIGlmICh4IDwgMCkgeyAgICAg ICAgICAgICAgICAgICAgLyogSWYgY210eHQgcGFyc2UgZXJyb3IsICovCisgICAgICAgICAgICBj bXNldHAocHNhdmUpOyAgICAgICAgICAgICAgLyogcmVzdG9yZSBvcmlnaW5hbCBwcm9tcHQgKi8K KyNpZmRlZiBWTVMKKyAgICAgICAgICAgIGlmIChjbWRsdmwgPiAwKSAgICAgICAgICAgICAvKiBJ biBWTVMgYW5kIG5vdCBhdCB0b3AgbGV2ZWwsICovCisgICAgICAgICAgICAgIGNvbnJlcygpOyAg ICAgICAgICAgICAgICAgLyogIHJlc3RvcmUgY29uc29sZSBhZ2Fpbi4gKi8KKyNlbmRpZiAvKiBW TVMgKi8KKyAgICAgICAgICAgIGlmICh4ID09IC0xMCkgewkJLyogVGltZWQgb3V0IHdpdGggbm8g cmVzcG9uc2UgKi8KKwkJaWYgKCFub21zZykKKwkJICBwcmludGYoIj9UaW1lZCBvdXQiKTsKKwkJ cHJpbnRmKCJcbiIpOworICAgICAgICAgICAgICAgIGFza3RpbWVkb3V0ID0gMTsKKwkJaWYgKGRm YW5zd2VyKQkJLyogU3VwcGx5IGRlZmF1bHQgYW5zd2VyIGlmIGFueSAqLworCQkgIHMgPSBkZmFu c3dlcjsKKyAgICAgICAgICAgICAgICBzdWNjZXNzID0geCA9IDA7CS8qICh3YXMgInggPSAtOTsi KSAqLworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGltZWxpbWl0ID0gMDsKKyAgICAgICAg ICAgIHJldHVybih4KTsgICAgICAgICAgICAgICAgICAvKiBhbmQgcmV0dXJuIGNtdHh0J3MgZXJy b3IgY29kZS4gKi8KKyAgICAgICAgfQorICAgICAgICBpZiAoIXMgfHwgKnMgPT0gTlVMKSB7CQkv KiBJZiB1c2VyIHR5cGVkIGEgYmFyZSBDUiwgKi8KKyAgICAgICAgICAgIGNtc2V0cChwc2F2ZSk7 ICAgICAgICAgICAgICAvKiBSZXN0b3JlIG9sZCBwcm9tcHQsICovCisgICAgICAgICAgICBkZWxt YWModm5wLDApOyAgICAgICAgICAgICAgLyogZGVsZXRlIHZhcmlhYmxlIGlmIGl0IGV4aXN0cywg Ki8KKyNpZmRlZiBWTVMKKyAgICAgICAgICAgIGlmIChjbWRsdmwgPiAwKSAgICAgICAgICAgICAv KiBJbiBWTVMgYW5kIG5vdCBhdCB0b3AgbGV2ZWwsICovCisgICAgICAgICAgICAgIGNvbnJlcygp OyAgICAgICAgICAgICAgICAgLyogIHJlc3RvcmUgY29uc29sZSBhZ2Fpbi4gKi8KKyNlbmRpZiAv KiBWTVMgKi8KKyAgICAgICAgICAgIHRpbWVsaW1pdCA9IDA7CisgICAgICAgICAgICByZXR1cm4o c3VjY2VzcyA9IDEpOyAgICAgICAgLyogYW5kIHJldHVybi4gKi8KKyAgICAgICAgfQorICAgICAg ICB5ID0gYWRkbWFjKHZucCxzKTsgICAgICAgICAgICAgIC8qIEFkZCBpdCB0byB0aGUgbWFjcm8g dGFibGUuICovCisgICAgICAgIGRlYnVnKEYxMTEsImFzayBhZGRtYWMiLHZucCx5KTsKKyAgICAg ICAgY21zZXRwKHBzYXZlKTsgICAgICAgICAgICAgICAgICAvKiBSZXN0b3JlIG9sZCBwcm9tcHQu ICovCisjaWZkZWYgVk1TCisgICAgICAgIGlmIChjbWRsdmwgPiAwKSAgICAgICAgICAgICAgICAg LyogSW4gVk1TIGFuZCBub3QgYXQgdG9wIGxldmVsLCAqLworICAgICAgICAgIGNvbnJlcygpOyAg ICAgICAgICAgICAgICAgICAgIC8qICByZXN0b3JlIGNvbnNvbGUgYWdhaW4uICovCisjZW5kaWYg LyogVk1TICovCisgICAgICAgIHRpbWVsaW1pdCA9IDA7CisgICAgICAgIHJldHVybihzdWNjZXNz ID0gKHkgPCAwID8gMCA6IDEpICYmIChhc2t0aW1lZG91dCA9PSAwKSk7CisgICAgfQorfQorI2Vu ZGlmIC8qIE5PU1BMICovCisKKyNpZm5kZWYgTk9TUEwKK2ludAorZG9pbmNyKGN4KSBpbnQgY3g7 IHsgICAgICAgICAgICAgICAgICAgIC8qIElOQ1JFTUVOVCwgREVDUkVNRU5UICovCisgICAgY2hh ciB2bmFtYnVmW1ZOQU1MKzFdOyAgICAgICAgICAgICAgLyogQnVmZmVyIGZvciB2YXJpYWJsZSBu YW1lcyAqLworICAgIGludCBldmFsID0gMDsKKyAgICBDS19PRkZfVCB4OworICAgIGV2YWwgPSAo Y3ggPT0gWFhfREVDUiB8fCBjeCA9PSBYWF9JTkNSKTsKKworICAgIGlmICgoeSA9IGNtZmxkKCJW YXJpYWJsZSBuYW1lIiwiIiwmcywgZXZhbCA/IHh4c3RyaW5nIDogTlVMTCkpIDwgMCkgeworICAg ICAgICBpZiAoeSA9PSAtMykgeworICAgICAgICAgICAgcHJpbnRmKCI/VmFyaWFibGUgbmFtZSBy ZXF1aXJlZFxuIik7CisgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICB9IGVsc2UgcmV0 dXJuKHkpOworICAgIH0KKyAgICBja3N0cm5jcHkodm5hbWJ1ZixzLFZOQU1MKTsKKyAgICBpZiAo KHkgPSBjbW51bXcoImJ5IGFtb3VudCIsIjEiLDEwLCZ4LHh4c3RyaW5nKSkgPCAwKQorICAgICAg cmV0dXJuKHkpOworICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkKKyAgICAgIHJldHVybih5KTsK KworICAgIHogPSAoY3ggPT0gWFhfSU5DUiB8fCBjeCA9PSBYWElOQykgPyAxIDogMDsgLyogSW5j cmVtZW50IG9yIGRlY3JlbWVudD8gKi8KKworICAgIGlmIChpbmN2YXIodm5hbWJ1Zix4LHopIDwg MCkgeworICAgICAgICBwcmludGYoIj9WYXJpYWJsZSAlcyBub3QgZGVmaW5lZCBvciBub3QgbnVt ZXJpY1xuIix2bmFtYnVmKTsKKyAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKyAgICB9Cisg ICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKK30KKworLyogVXNlZCBieSBkb3VuZGVmKCkgKi8KK3N0 YXRpYyBpbnQKK3h4dW5kZWYocyx2ZXJib3NlLHNpbXVsYXRlKSBjaGFyICogczsgaW50IHZlcmJv c2UsIHNpbXVsYXRlOyB7CisgICAgaW50IHJjID0gMDsKKyAgICBpZiAoIXMpIHJldHVybigwKTsK KyAgICBpZiAoKnMgPT0gQ01EUSAmJiAqKHMrMSkgPT0gJyUnKSB7CisgICAgICAgIGNoYXIgYyA9 ICoocysyKSwgKiBwID0gTlVMTDsKKyAgICAgICAgaWYgKGMgPj0gJzAnICYmIGMgPD0gJzknKSB7 CisgICAgICAgICAgICBpZiAobWFjbHZsIDwgMCkKKyAgICAgICAgICAgICAgcCA9IGdfdmFyW2Nd OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBwID0gbV9hcmdbbWFjbHZsXVtjIC0g JzAnXTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChpc3VwcGVyKGMpKSBjICs9 ICgnYSctJ0EnKTsKKyAgICAgICAgICAgIGlmIChjID49ICdhJyAmJiBjIDw9ICd6JykKKyAgICAg ICAgICAgICAgcCA9IGdfdmFyW2NdOworICAgICAgICB9CisgICAgICAgIGlmICghcCkgcmV0dXJu KC0xKTsKKyAgICB9CisgICAgaWYgKHZlcmJvc2UpCisgICAgICBwcmludGYoIiAlcyAiLHMpOwor ICAgIGlmIChzaW11bGF0ZSkgeworICAgICAgICBwcmludGYoIihTRUxFQ1RFRClcbiIpOworICAg IH0gZWxzZSBpZiAoKHggPSBkZWxtYWMocywxKSkgPiAtMSkgeyAvKiBGdWxsIG5hbWUgcmVxdWly ZWQgKi8KKyAgICAgICAgcmMgPSAxOworICAgICAgICBpZiAodmVyYm9zZSkgcHJpbnRmKCIoT0sp XG4iKTsKKyAgICB9IGVsc2UgaWYgKHZlcmJvc2UpCisgICAgICBwcmludGYoIihGQUlMRUQpXG4i KTsKKyAgICByZXR1cm4ocmMpOworfQorCisvKiBEbyB0aGUgKF8pREVGSU5FLCAoXylBU1NJR04s IGFuZCBVTkRFRklORSBjb21tYW5kcyAqLworCisjZGVmaW5lIFVORF9NQVQgMQorI2RlZmluZSBV TkRfVlJCIDIKKyNkZWZpbmUgVU5EX0VYQyAzCisjZGVmaW5lIFVORF9TSU0gMworCitzdGF0aWMg c3RydWN0IGtleXRhYiB1bmRlZnN3aVtdID0geworICAgIHsgIi9saXN0IiwgICAgIFVORF9WUkIs IDAgfSwKKyNpZmRlZiBDT01NRU5UCisgICAgeyAiL2V4Y2VwdCIsICAgVU5EX0VYQywgQ01fQVJH IH0sCisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgIHsgIi9tYXRjaGluZyIsIFVORF9NQVQsIDAg fSwKKyAgICB7ICIvc2ltdWxhdGUiLCBVTkRfU0lNLCAwIH0sCisgICAgeyAiL3ZlcmJvc2UiLCAg VU5EX1ZSQiwgQ01fSU5WIH0KK307CitzdGF0aWMgaW50IG51bmRlZnN3aSA9IHNpemVvZih1bmRl ZnN3aSkgLyBzaXplb2Yoc3RydWN0IGtleXRhYik7CisKKyNkZWZpbmUgVU5ERUZNQVggNjQKK3N0 YXRpYyBjaGFyICoqIHVuZGVmbGlzdCA9IE5VTEw7CitpbnQKK2RvdW5kZWYoY3gpIGludCBjeDsg eyAgICAgICAgICAgICAgICAgICAvKiBVTkRFRiwgX1VOREVGICovCisgICAgaW50IGksIGosIG4s IHJjID0gMCwgYXJyYXltc2cgPSAwOworICAgIGludCBkb21hdGNoID0gMCwgdmVyYm9zZSA9IDAs IGVycm9ycyA9IDAsIHNpbXVsYXRlID0gMCwgZmxhZyA9IDA7CisgICAgY2hhciAqdm5wLCB2bmJ1 Zls0XTsKKyNpZmRlZiBDT01NRU5UCisgICAgY2hhciAqZXhjZXB0ID0gTlVMTDsKKyNlbmRpZiAv KiBDT01NRU5UICovCisgICAgc3RydWN0IEZEQiBzdywgZmw7CisgICAgaW50IGdldHZhbDsKKyAg ICBjaGFyIGM7CisKKyAgICBpZiAoIXVuZGVmbGlzdCkgeyAgICAgICAgICAgICAgICAgICAvKiBB bGxvY2F0ZSBsaXN0IGlmIG5lY2Vzc2FyeSAqLworICAgICAgICB1bmRlZmxpc3QgPSAoY2hhciAq KiltYWxsb2MoVU5ERUZNQVggKiBzaXplb2YoY2hhciAqKSk7CisgICAgICAgIGlmICghdW5kZWZs aXN0KSB7CisgICAgICAgICAgICBwcmludGYoIj9NZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlXG4i KTsKKyAgICAgICAgICAgIHJldHVybigtOSk7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChpID0g MDsgaSA8IFVOREVGTUFYOyBpKyspCisgICAgICAgICAgdW5kZWZsaXN0W2ldID0gTlVMTDsKKyAg ICB9CisgICAgY21mZGJpKCZzdywgICAgICAgICAgICAgICAgICAgICAgICAgLyogRmlyc3QgRkRC IC0gY29tbWFuZCBzd2l0Y2hlcyAqLworICAgICAgICAgICBfQ01LRVksICAgICAgICAgICAgICAg ICAgICAgIC8qIGZjb2RlICovCisgICAgICAgICAgICJWYXJpYWJsZSBuYW1lIG9yIHN3aXRjaCIs CisgICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGVmYXVsdCAqLwor ICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIHN0cmluZyBk YXRhICovCisgICAgICAgICAgIG51bmRlZnN3aSwgICAgICAgICAgICAgICAgICAgLyogYWRkdGwg bnVtZXJpYyBkYXRhIDE6IHRibCBzaXplICovCisgICAgICAgICAgIDQsICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDI6IDQgPSBjbXN3aSAqLworICAgICAg ICAgICB4eHN0cmluZywgICAgICAgICAgICAgICAgICAgIC8qIFByb2Nlc3NpbmcgZnVuY3Rpb24g Ki8KKyAgICAgICAgICAgdW5kZWZzd2ksICAgICAgICAgICAgICAgICAgICAvKiBLZXl3b3JkIHRh YmxlICovCisgICAgICAgICAgICZmbCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUG9pbnRl ciB0byBuZXh0IEZEQiAqLworICAgICAgICAgICApOworICAgIGNtZmRiaSgmZmwsICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIEFueXRoaW5nIHRoYXQgZG9lc24ndCBtYXRjaCAqLworICAgICAg ICAgICBfQ01GTEQsICAgICAgICAgICAgICAgICAgICAgIC8qIGZjb2RlICovCisgICAgICAgICAg ICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaGxwbXNnICovCisgICAgICAgICAgICIi LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGVmYXVsdCAqLworICAgICAgICAgICAiIiwg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIHN0cmluZyBkYXRhICovCisgICAgICAg ICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDEg Ki8KKyAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1l cmljIGRhdGEgMiAqLworICAgICAgICAgICAoY3ggPT0gWFhVTkRFRikgPyBOVUxMIDogeHhzdHJp bmcsCisgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgIE5VTEwKKyAgICAgICAgICAgKTsKKyAg ICB3aGlsZSAoMSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQYXJzZSAwIG9yIG1vcmUg c3dpdGNoZXMgKi8KKyAgICAgICAgeCA9IGNtZmRiKCZzdyk7ICAgICAgICAgICAgICAgICAvKiBQ YXJzZSBzb21ldGhpbmcgKi8KKyAgICAgICAgaWYgKHggPCAwKQorICAgICAgICAgIHJldHVybih4 KTsKKyAgICAgICAgaWYgKGNtcmVzdWx0LmZjb2RlICE9IF9DTUtFWSkgICAvKiBCcmVhayBvdXQg aWYgbm90IGEgc3dpdGNoICovCisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGMgPSBjbWdicmso KTsKKyAgICAgICAgaWYgKChnZXR2YWwgPSAoYyA9PSAnOicgfHwgYyA9PSAnPScpKSAmJiAhKGNt Z2t3ZmxncygpICYgQ01fQVJHKSkgeworICAgICAgICAgICAgcHJpbnRmKCI/VGhpcyBzd2l0Y2gg ZG9lcyBub3QgdGFrZSBhbiBhcmd1bWVudFxuIik7CisgICAgICAgICAgICByZXR1cm4oLTkpOwor ICAgICAgICB9CisgICAgICAgIHN3aXRjaCAoY21yZXN1bHQubnJlc3VsdCkgeworICAgICAgICAg IGNhc2UgVU5EX01BVDogZG9tYXRjaCAgPSAxOyBicmVhazsKKyAgICAgICAgICBjYXNlIFVORF9T SU06IHNpbXVsYXRlID0gMTsgLyogZmFsbCB0aHJ1IG9uIHB1cnBvc2UgKi8KKyAgICAgICAgICBj YXNlIFVORF9WUkI6IHZlcmJvc2UgID0gMTsgYnJlYWs7CisKKyNpZmRlZiBDT01NRU5UCisgICAg ICAgICAgY2FzZSBVTkRfRVhDOgorICAgICAgICAgICAgaWYgKCFnZXR2YWwpIGJyZWFrOworICAg ICAgICAgICAgaWYgKCh4ID0gY21mbGQoIlBhdHRlcm4iLCIiLCZzLHh4c3RyaW5nKSkgPCAwKSB7 CisgICAgICAgICAgICAgICAgaWYgKHggPT0gLTMpIHsKKyAgICAgICAgICAgICAgICAgICAgcHJp bnRmKCI/UGF0dGVybiByZXF1aXJlZFxuIik7CisgICAgICAgICAgICAgICAgICAgIHggPSAtOTsK KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZ290byB4Z2V0eDsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgICAgIG1ha2VzdHIoJmV4Y2VwdCxjbXJlc3VsdC5zcmVzdWx0KTsKKyAg ICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKworICAgICAgICAgIGRlZmF1 bHQ6CisgICAgICAgICAgICByZXR1cm4oLTIpOworICAgICAgICB9CisgICAgfQorICAgIG4gPSAw OworICAgIG1ha2VzdHIoJih1bmRlZmxpc3RbbisrXSksY21yZXN1bHQuc3Jlc3VsdCk7CisgICAg Zm9yIChpID0gMTsgaSA8IFVOREVGTUFYOyBpKyspIHsKKyAgICAgICAgeCA9IGNtZmxkKCJNYWNy byBvciB2YXJpYWJsZSBuYW1lIiwiIiwmcywKKyAgICAgICAgICAgICAgICAgICgoY3ggPT0gWFhV TkRFRikgPyBOVUxMIDogeHhzdHJpbmcpCisgICAgICAgICAgICAgICAgICApOworICAgICAgICBp ZiAoeCA9PSAtMykgeworICAgICAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKQorICAgICAg ICAgICAgICByZXR1cm4oeSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfSBlbHNlIGlm ICh5IDwgMCkgeworICAgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICB9CisgICAgICAgIG1h a2VzdHIoJih1bmRlZmxpc3RbbisrXSkscyk7CisgICAgfQorICAgIC8qIE5vdyB3ZSBoYXZlIGEg bGlzdCBvZiBuIHZhcmlhYmxlcyBvciBwYXR0ZXJucyB0byB1bmRlZmluZSAqLworCisgICAgZm9y IChpID0gMDsgaSA8IG47IGkrKykgeworICAgICAgICBmbGFnID0gMDsKKyAgICAgICAgaWYgKCEo dm5wID0gdW5kZWZsaXN0W2ldKSkKKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKHZu cFswXSA9PSBDTURRICYmICh2bnBbMV0gPT0gJyUnIHx8IHZucFsxXSA9PSAnJicpKSB7CisgICAg ICAgICAgICBmbGFnKys7CisgICAgICAgICAgICB2bnArKzsKKyAgICAgICAgfQorICAgICAgICBp ZiAoIWRvbWF0Y2gpIHsgICAgICAgICAgICAgICAgIC8qIFBhdHRlcm4gbWF0Y2ggbm90IHJlcXVl c3RlZCAqLworICAgICAgICAgICAgaWYgKGZsYWcpIHsKKyAgICAgICAgICAgICAgICBpZiAoKHkg PSBwYXJzZXZhcih2bnAsJngsJnopKSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgdm5wLS07 CisgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKSBwcmludGYoIiAlcy4uLmVycm9yXG4i LHZucCk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgICB2bnAtLTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHggPSB4 eHVuZGVmKHZucCx2ZXJib3NlLHNpbXVsYXRlKTsKKyAgICAgICAgICAgIGlmICh4ID4gLTEpIHsK KyAgICAgICAgICAgICAgICBpZiAoIXggJiYgIXNpbXVsYXRlKSBlcnJvcnMrKzsKKyAgICAgICAg ICAgICAgICByYyArPSB4OworICAgICAgICAgICAgfQorICAgICAgICAgICAgY29udGludWU7Cisg ICAgICAgIH0KKyAgICAgICAgLyogUGF0dGVybiBtYXRjaCByZXF1ZXN0ZWQgKi8KKworICAgICAg ICBpZiAoIWZsYWcpIHsgICAgICAgICAgICAgICAgICAgIC8qIEl0J3MgYSBtYWNybyAqLworICAg ICAgICAgICAgZm9yIChqID0gMDsgaiA8IG5tYWM7IGorKykgeworICAgICAgICAgICAgICAgIGlm IChja21hdGNoKHZucCxtYWN0YWJbal0ua3dkLDAsMSkpIHsKKyAgICAgICAgICAgICAgICAgICAg eCA9IHh4dW5kZWYobWFjdGFiW2pdLmt3ZCx2ZXJib3NlLHNpbXVsYXRlKTsKKyAgICAgICAgICAg ICAgICAgICAgaWYgKHggPiAtMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmMgKz0geDsK KyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgheCkgZXJyb3JzKys7CisgICAgICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKCFzaW11bGF0ZSkKKyAgICAgICAgICAg ICAgICAgICAgICBqLS07ICAgICAgICAgICAgICAvKiBCZWNhdXNlIG1hY3RhYiBzaGlmdGVkIHVw ICovCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYg KHZucFswXSA9PSAnJScpIHsgICAgIC8qIEl0J3MgYSBcJXggdmFyaWFibGUgKi8KKyAgICAgICAg ICAgIHZuYnVmWzBdID0gQ01EUTsKKyAgICAgICAgICAgIHZuYnVmWzFdID0gJyUnOworICAgICAg ICAgICAgdm5idWZbM10gPSBOVUw7CisgICAgICAgICAgICBmb3IgKGogPSAnMCc7IGogPD0gJ3on OyBqKyspIHsgLyogMC4uOSBhLi56ICovCisgICAgICAgICAgICAgICAgdm5idWZbMl0gPSBqOwor ICAgICAgICAgICAgICAgIGlmIChja21hdGNoKHZucCwmdm5idWZbMV0sMCwxKSkgeworICAgICAg ICAgICAgICAgICAgICB4ID0geHh1bmRlZih2bmJ1Zix2ZXJib3NlLHNpbXVsYXRlKTsKKyAgICAg ICAgICAgICAgICAgICAgaWYgKHggPiAtMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYg KCF4KSBlcnJvcnMrKzsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJjICs9IHg7CisgICAgICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGog PT0gJzknKSBqID0gKGludCknYScgLSAxOyAvKiA5IC0+IGEgKi8KKyAgICAgICAgICAgIH0KKyAg ICAgICAgfSBlbHNlIGlmICh2bnBbMF0gPT0gJyYnKSB7CisgICAgICAgICAgICBpZiAoIWFycmF5 bXNnICYmICFxdWlldCkgeworICAgICAgICAgICAgICAgIHByaW50ZigiP1VOREVGSU5FIC9NQVRD SCBjYW4ndCBiZSB1c2VkIHdpdGggYXJyYXlzLlxuIik7CisgICAgICAgICAgICAgICAgcHJpbnRm KCIoVHlwZSBIRUxQIEFSUkFZIHRvIHNlZSBvdGhlciBtZXRob2RzLilcbiIpOworICAgICAgICAg ICAgfQorICAgICAgICAgICAgYXJyYXltc2crKzsKKyAgICAgICAgICAgIGVycm9ycysrOworICAg ICAgICB9CisgICAgfQorICAgIGlmICh2ZXJib3NlKQorICAgICAgcHJpbnRmKCJ1bmRlZmluZWQ6 ICVkLCBlcnJvcnM6ICVkXG4iLHJjLGVycm9ycyk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgVU5E RUZNQVg7IGkrKykgeyAgICAvKiBDaGVjayB0aGVtIGFsbCAqLworICAgICAgICBpZiAodW5kZWZs aXN0W2ldKSB7ICAgICAgICAgICAgIC8qIGluIGNhc2Ugd2Ugd2VyZSBpbnRlcnJ1cHRlZCAqLwor ICAgICAgICAgICAgZnJlZSh1bmRlZmxpc3RbaV0pOyAgICAgICAgIC8qIHByZXZpb3VzbHkuLi4g Ki8KKyAgICAgICAgICAgIHVuZGVmbGlzdFtpXSA9IE5VTEw7CisgICAgICAgIH0KKyAgICB9Cisg ICAgcmV0dXJuKHN1Y2Nlc3MgPSAoZXJyb3JzID09IDApID8gMSA6IDApOworfQorCitpbnQKK2Rv ZGVmKGN4KSBpbnQgY3g7IHsKKyAgICBleHRlcm4gaW50IHh4ZG90OworICAgIGV4dGVybiBjaGFy IHBwdm5hbWJ1ZltdOworICAgIGludCBkb2V2YWwgPSAwOworICAgIGNoYXIgdm5hbWJ1ZltWTkFN TCsxXTsgICAgICAgICAgICAgIC8qIEJ1ZmZlciBmb3IgdmFyaWFibGUgbmFtZXMgKi8KKyAgICBj aGFyICp2bnA7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQb2ludGVyIHRvIHNhbWUgKi8K KyAgICBpbnQgaywgbXlkb3Q7CisgICAgbXlkb3QgPSB4eGRvdDsgICAgICAgICAgICAgICAgICAg ICAgLyogQ29weSAqLworICAgIHh4ZG90ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IGFuZCByZXNldCAqLworLyoKKyAgSW4gY2FzZSB3ZSBnb3QgaGVyZSBmcm9tIGEgY29tbWFuZCB0 aGF0IGJlZ2lucyBsaWtlICIuXCVhIiwgY21rZXkoKSBoYXMKKyAgYWxyZWFkeSBldmFsdWF0ZWQg XCVhLCBidXQgd2UgZG9uJ3Qgd2FudCB0aGF0LCBzbyB3ZSByZXRyaWV2ZSB0aGUgdmFyaWFibGUK KyAgbmFtZSBmcm9tIGEgc3BlY2lhbCBwcmUtZXZhbHVhdGlvbiBidWZmZXIgaW4gdGhlIGNvbW1h bmQgbW9kdWxlLCBhbmQgd2UKKyAgdW5kbyB0aGUgInVuZ2V0IHdvcmQiIHRoYXQgd291bGQgYmUg ZG9uZSBiZWNhdXNlIG9mIHRoZSB0b2tlbiwgYmVjYXVzZSBpZgorICB0aGUgdmFyaWFibGUgd2Fz IGRlZmluZWQsIGl0IHdpbGwgdW5nZXQgaXRzIHZhbHVlIHJhdGhlciB0aGFuIGl0cyBuYW1lLgor Ki8KKyAgICBzID0gTlVMTDsKKworICAgIGlmIChteWRvdCAmJiBwcHZuYW1idWZbMF0gPT0gJy4n ICYmIHBwdm5hbWJ1ZlsxXSkgeworICAgICAgICBzID0gcHB2bmFtYnVmKzE7CisgICAgICAgIHVu dW5ndygpOworICAgIH0KKyAgICBpZiAoIXMpIHsKKyAgICAgICAgaWYgKGN4ID09IFhYREZYIHx8 IGN4ID09IFhYQVNYKQorICAgICAgICAgIC8qIEV2YWx1YXRlIHZhcmlhYmxlIG5hbWUgKi8KKyAg ICAgICAgICB5ID0gY21mbGQoIk1hY3JvIG9yIHZhcmlhYmxlIG5hbWUiLCIiLCZzLHh4c3RyaW5n KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIC8qIERvbid0IGV2YWx1YXRlIHRoZSB2YXJpYWJs ZSBuYW1lICovCisgICAgICAgICAgeSA9IGNtZmxkKCJNYWNybyBvciB2YXJpYWJsZSBuYW1lIiwi IiwmcyxOVUxMKTsKKyAgICAgICAgaWYgKHkgPCAwKSB7CisgICAgICAgICAgICBpZiAoeSA9PSAt MykgeworICAgICAgICAgICAgICAgIHByaW50ZigiP1ZhcmlhYmxlIG5hbWUgcmVxdWlyZWRcbiIp OworICAgICAgICAgICAgICAgIHJldHVybigtOSk7CisgICAgICAgICAgICB9IGVsc2UgcmV0dXJu KHkpOworICAgICAgICB9CisgICAgfQorICAgIGsgPSBzdHJsZW4ocyk7CisgICAgaWYgKGsgPiBW TkFNTCkgeworICAgICAgICBwcmludGYoIj9OYW1lIHRvbyBsb25nOiBcIiVzXCJcbiIscyk7Cisg ICAgICAgIHJldHVybigtOSk7CisgICAgfQorICAgIGNrc3RybmNweSh2bmFtYnVmLHMsVk5BTUwp OworICAgIHZuYW1idWZbVk5BTUxdID0gTlVMOworICAgIHZucCA9IHZuYW1idWY7CisgICAgaWYg KHZuYW1idWZbMF0gPT0gQ01EUSAmJiAodm5hbWJ1ZlsxXSA9PSAnJScgfHwgdm5hbWJ1ZlsxXSA9 PSAnJicpKSB2bnArKzsKKyAgICBpZiAoKnZucCA9PSAnJScgfHwgKnZucCA9PSAnJicpIHsKKyAg ICAgICAgaWYgKCh5ID0gcGFyc2V2YXIodm5wLCZ4LCZ6KSkgPCAwKSByZXR1cm4oeSk7CisjaWZk ZWYgQ09NTUVOVAorICAgICAgICBpZiAoY3ggPT0gWFhVTkRFRikgeyAgICAgICAgICAgIC8qIFVu ZGVmaW5lICovCisgICAgICAgICAgICBpZiAoKHkgPSBjbXR4dCgiVGV4dCB0byBiZSBpZ25vcmVk IiwiIiwmcyxOVUxMKSkgPCAwKSByZXR1cm4oeSk7CisgICAgICAgICAgICBkZWxtYWModm5wLDAp OworICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKyAgICAgICAgfQorI2VuZGlmIC8q IENPTU1FTlQgKi8KKyAgICAgICAgZGVidWcoRjEwMSwiZG9kZWYgcGFyc2V2YXIgeCIsIiIseCk7 CisgICAgICAgIGlmIChteWRvdCkgeworICAgICAgICAgICAgaWYgKChkb2V2YWwgPSBjbWtleShh c2d0YWIsbmFzZ3RhYiwib3BlcmF0b3IiLCI9IixOVUxMKSkgPCAwKQorICAgICAgICAgICAgICBy ZXR1cm4oZG9ldmFsKTsKKyAgICAgICAgICAgIGlmIChkb2V2YWwgPiAwKSAgICAgICAgICAgICAv KiBUeXBlIG9mIGFzc2lnbm1lbnQgKi8KKyAgICAgICAgICAgICAgY3ggPSBYWEFTUzsKKyAgICAg ICAgfQorICAgICAgICBpZiAoeSA9PSAxKSB7ICAgICAgICAgICAgICAgICAgIC8qIFNpbXBsZSB2 YXJpYWJsZSAqLworICAgICAgICAgICAgaWYgKCh5ID0gY210eHQoIkRlZmluaXRpb24gb2YgdmFy aWFibGUiLCIiLCZzLE5VTEwpKSA8IDApCisgICAgICAgICAgICAgIHJldHVybih5KTsKKyAgICAg ICAgICAgIHMgPSBicnN0cmlwKHMpOworICAgICAgICAgICAgZGVidWcoRjExMCwieHhkZWYgdmFy IG5hbWUiLHZucCwwKTsKKyAgICAgICAgICAgIGRlYnVnKEYxMTAsInh4ZGVmIHZhciBkZWYiLHMs MCk7CisgICAgICAgIH0gZWxzZSBpZiAoeSA9PSAyKSB7ICAgICAgICAgICAgLyogQXJyYXkgZWxl bWVudCAqLworICAgICAgICAgICAgaWYgKCh5ID0gYXJyYXluYW0odm5wLCZ4LCZ6KSkgPCAwKSBy ZXR1cm4oeSk7CisgICAgICAgICAgICBpZiAoeCA9PSA5NikgeworICAgICAgICAgICAgICAgIHBy aW50ZigiP0FyZ3VtZW50IHZlY3RvciBhcnJheSBpcyByZWFkLW9ubHlcbiIpOworICAgICAgICAg ICAgICAgIHJldHVybigtOSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoY2hrYXJy YXkoeCx6KSA8IDApIHJldHVybigtMik7CisgICAgICAgICAgICBpZiAoKHkgPSBjbXR4dCgiRGVm aW5pdGlvbiBvZiBhcnJheSBlbGVtZW50IiwiIiwmcyxOVUxMKSkgPCAwKQorICAgICAgICAgICAg ICByZXR1cm4oeSk7CisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJ4eGRlZiBhcnJheSByZWYiLHZu cCwwKTsKKyAgICAgICAgICAgIGRlYnVnKEYxMTAsInh4ZGVmIGFycmF5IGRlZiIscywwKTsKKyAg ICAgICAgfQorICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1hY3Jv ICovCisjaWZkZWYgQ09NTUVOVAorICAgICAgICBpZiAoY3ggPT0gWFhVTkRFRikgeyAgICAgICAg ICAgIC8qIFVuZGVmaW5lICovCisgICAgICAgICAgICBpZiAoKHkgPSBjbXR4dCgiVGV4dCB0byBi ZSBpZ25vcmVkIiwiIiwmcyxOVUxMKSkgPCAwKSByZXR1cm4oeSk7CisgICAgICAgICAgICBkZWxt YWModm5wLDApOworICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKyAgICAgICAgfQor I2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAgaWYgKG15ZG90KSB7CisgICAgICAgICAgICBp ZiAoKGRvZXZhbCA9IGNta2V5KGFzZ3RhYixuYXNndGFiLCJvcGVyYXRvciIsIj0iLE5VTEwpKSA8 IDApCisgICAgICAgICAgICAgIHJldHVybihkb2V2YWwpOworICAgICAgICAgICAgaWYgKGRvZXZh bCA+IDApCisgICAgICAgICAgICAgIGN4ID0gWFhBU1M7CisgICAgICAgIH0KKyAgICAgICAgaWYg KCh5ID0gY210eHQoIkRlZmluaXRpb24gb2YgbWFjcm8iLCIiLCZzLE5VTEwpKSA8IDApIHJldHVy bih5KTsKKyNpZmRlZiBERUJVRworICAgICAgICBpZiAoZGVibG9nKSB7CisgICAgICAgICAgICBk ZWJ1ZyhGMTEwLCJ4eGRlZiBtYWNybyBuYW1lIix2bnAsMCk7CisgICAgICAgICAgICBkZWJ1ZyhG MDEwLCJ4eGRlZiBtYWNybyBkZWYiLHMsMCk7CisgICAgICAgIH0KKyNlbmRpZiAvKiBERUJVRyAq LworICAgICAgICBzID0gYnJzdHJpcChzKTsKKyAgICB9CisgICAgaWYgKCpzID09IE5VTCkgeyAg ICAgICAgICAgICAgICAgICAgLyogTm8gYXJnIGdpdmVuLCB1bmRlZmluZSAqLworICAgICAgICBk ZWxtYWModm5wLDEpOyAgICAgICAgICAgICAgICAgIC8qIHNpbGVudGx5Li4uICovCisgICAgICAg IHJldHVybihzdWNjZXNzID0gMSk7ICAgICAgICAgICAgLyogZXZlbiBpZiBpdCBkb2Vzbid0IGV4 aXN0Li4uICovCisgICAgfQorICAgIC8qIERlZmluaW5nIGEgbmV3IG1hY3JvIG9yIHZhcmlhYmxl ICovCisKKyAgICBpZiAoY3ggPT0gWFhBU1MgfHwgY3ggPT0gWFhBU1gpIHsgICAvKiBBU1NJR04g cmF0aGVyIHRoYW4gREVGSU5FPyAqLworICAgICAgICBpbnQgdDsKKyAgICAgICAgdCA9IExJTkJV RlNJWi0xOworICAgICAgICBscCA9IGxpbmU7ICAgICAgICAgICAgICAgICAgICAgIC8qIElmIHNv LCBleHBhbmQgaXRzIHZhbHVlIG5vdyAqLworICAgICAgICB6enN0cmluZyhzLCZscCwmdCk7Cisg ICAgICAgIHMgPSBsaW5lOworICAgIH0KKyAgICBpZiAoZG9ldmFsID09IDIpIHsgICAgICAgICAg ICAgICAgICAvKiBBcml0aG1ldGljIGV2YWx1YXRpb24gd2FudGVkIHRvbz8gKi8KKyAgICAgICAg Y2tzdHJuY3B5KGxpbmUsZXZhbGEocyksTElOQlVGU0laKTsKKyAgICAgICAgbGluZVtMSU5CVUZT SVpdID0gTlVMOworICAgIH0KKyAgICAvKiBkZWJ1ZyhGMTExLCJjYWxsaW5nIGFkZG1hYyIscywo aW50KXN0cmxlbihzKSk7ICovCisKKyAgICB5ID0gYWRkbWFjKHZucCxzKTsgICAgICAgICAgICAg ICAgICAvKiBBZGQgaXQgdG8gdGhlIGFwcHJvcHJpYXRlIHRhYmxlLiAqLworICAgIGlmICh5IDwg MCkgeworICAgICAgICBwcmludGYoIj8lcyBmYWlsZWRcbiIsKGN4ID09IFhYQVNTIHx8IGN4ID09 IFhYQVNYKSA/CisgICAgICAgICAgICAgICAiQVNTSUdOIiA6ICJERUZJTkUiKTsKKyAgICAgICAg cmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKyAgICB9IGVsc2UgaWYgKGN4ID09IFhYQVNYIHx8IGN4ID09 IFhYREZYKSAvKiBGb3IgX0FTRyBvciBfREVGLCAqLworICAgICAgcmV0dXJuKDEpOyAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIGRvbid0IGNoYW5nZSBzdWNjZXNzIHZhcmlhYmxlICovCisg ICAgZWxzZQorICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKK30KKyNlbmRpZiAvKiBOT1NQTCAq LworCisKKyNpZm5kZWYgTk9ESUFMCisvKgorICAgTCBVIEQgSSBBIEwgIC0tICBMb29rdXAgdXAg ZGlhbGluZyBkaXJlY3RvcnkgZW50cnkuCisKKyAgIENhbGwgd2l0aCBzdHJpbmcgdG8gbG9vayB1 cCBhbmQgZmlsZSBkZXNjcmlwdG9yIG9mIG9wZW4gZGlhbGluZyBkaXJlY3RvcnkKKyAgIGZpbGUu ICBPbiBzdWNjZXNzLCByZXR1cm5zIG51bWJlciBvZiBtYXRjaGVzIGZvdW5kLCB3aXRoIG51bWJl cnMgc3RvcmVkCisgICBpbiBhbiBhcnJheSBhY2Nlc3NpYmxlIHZpYSBnZXRkbnVtKCkuCisqLwor c3RhdGljIGNoYXIgKmRuX3BbTUFYRE5VTVMgKyAxXTsgICAgICAgIC8qIERpYWwgTnVtYmVyIHBv aW50ZXJzICovCitzdGF0aWMgY2hhciAqZG5fcDJbTUFYRE5VTVMgKyAxXTsgICAgICAgLyogQ29u dmVydGVkIGRpYWwgbnVtYmVyIHBvaW50ZXJzICovCitzdGF0aWMgaW50IGRuX3hbTUFYRE5VTVMg KyAxXTsgICAgICAgICAgLyogVHlwZSBvZiBjYWxsICovCitzdGF0aWMgaW50IGRuY291bnQgPSAw OworY2hhciAqIGRfbmFtZSA9IE5VTEw7ICAgICAgICAgICAgICAgICAgIC8qIERpYWwgbmFtZSBw b2ludGVyICovCisKK2NoYXIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBH ZXQgZGlhbCBkaXJlY3RvcnkgZW50cnkgbmFtZSAqLworZ2V0ZG5hbWUoKSB7CisgICAgcmV0dXJu KGRfbmFtZSA/IGRfbmFtZSA6ICIiKTsKK30KKworY2hhciAqCitnZXRkbnVtKG4pIGludCBuOyB7 ICAgICAgICAgICAgICAgICAgICAgLyogR2V0IGRpYWwgbnVtYmVyIG4gZnJvbSBkaXJlY3Rvcnkg Ki8KKyAgICBpZiAobiA8IDAgfHwgbiA+IGRuY291bnQgfHwgbiA+IE1BWEROVU1TKQorICAgICAg cmV0dXJuKCIiKTsKKyAgICBlbHNlCisgICAgICByZXR1cm4oZG5fcFtuXSk7Cit9CisKK2NoYXIg KiAgICAgICAgICAgICAgICAgIC8qIENoZWNrIGFyZWEgY29kZSBmb3Igc3B1cmlvdXMgbGVhZGlu ZyBkaWdpdCAqLworY2hrX2FjKGksYnVmKSBpbnQgaTsgY2hhciBidWZbXTsgeworICAgIGNoYXIg KnA7CisgICAgaWYgKCFidWYpCisgICAgICByZXR1cm4oIiIpOworICAgIHAgPSAoY2hhciAqKSBi dWY7ICAgICAgICAgICAgICAgICAgIC8qIENvdW50cnkgd2UgYXJlIGNhbGxpbmc6ICovCisgICAg aWYgKGkgPT0gIDQ0IHx8ICAgICAgICAgICAgICAgICAgICAgLyogVUsgKi8KKyAgICAgICAgaSA9 PSAgNDkgfHwgICAgICAgICAgICAgICAgICAgICAvKiBHZXJtYW55ICovCisgICAgICAgIGkgPT0g IDM5IHx8ICAgICAgICAgICAgICAgICAgICAgLyogSXRhbHkgKi8KKyAgICAgICAgaSA9PSAgMzEg fHwgICAgICAgICAgICAgICAgICAgICAvKiBOZXRoZXJsYW5kcyAqLworICAgICAgICBpID09IDM1 MSB8fCAgICAgICAgICAgICAgICAgICAgIC8qIFBvcnR1Z2FsICovCisgICAgICAgIGkgPT0gIDU1 IHx8ICAgICAgICAgICAgICAgICAgICAgLyogQnJhemlsICovCisgICAgICAgIGkgPT0gOTcyIHx8 ICAgICAgICAgICAgICAgICAgICAgLyogSXNyYWVsICovCisgICAgICAgIGkgPT0gIDQxIHx8ICAg ICAgICAgICAgICAgICAgICAgLyogU3dpdHplcmxhbmQgKi8KKyAgICAgICAgaSA9PSAgNDMgfHwg ICAgICAgICAgICAgICAgICAgICAvKiBBdXN0cmlhICovCisgICAgICAgIGkgPT0gIDQyIHx8ICAg ICAgICAgICAgICAgICAgICAgLyogQ3plY2ggUmVwdWJsaWMgKi8KKyAgICAgICAgaSA9PSAgMzYg fHwgICAgICAgICAgICAgICAgICAgICAvKiBIdW5nYXJ5ICovCisgICAgICAgIGkgPT0gIDMwIHx8 ICAgICAgICAgICAgICAgICAgICAgLyogR3JlZWNlICovCisgICAgICAgIGkgPT0gMzUyIHx8ICAg ICAgICAgICAgICAgICAgICAgLyogTHV4ZW1ib3VyZyAqLworICAgICAgICBpID09ICA0OCB8fCAg ICAgICAgICAgICAgICAgICAgIC8qIFBvbGFuZCAqLworICAgICAgICBpID09ICAyNyB8fCAgICAg ICAgICAgICAgICAgICAgIC8qIFNvdXRoIEFmcmljYSAqLworICAgICAgICBpID09ICAzMyB8fCAg ICAgICAgICAgICAgICAgICAgIC8qIEZyYW5jZSAoYXMgb2YgMTk5NykgKi8KKyAgICAgICAgaSA9 PSAgMzU4ICAgICAgICAgICAgICAgICAgICAgICAvKiBGaW5sYW5kIChkaXR0bykgKi8KKyAgICAg ICAgKSB7CisgICAgICAgIGlmIChidWZbMF0gPT0gJzAnKQorICAgICAgICAgIHArKzsKKyAgICB9 CisgICAgcmV0dXJuKHApOworfQorCisvKiBDYWxsIElzIExvbmcgRGlzdGFuY2UgLS0gRXhwYW5k IHRoaXMgdG8gY292ZXIgMTAtZGlnaXQgbG9jYWwgZGlhbGluZyBldGMgKi8KKy8qCisgICBzcmMg ID0gYXJlYSBjb2RlIG9mIGNhbGxlcgorICAgZGVzdCA9IGFyZWEgY29kZSBvZiBjYWxsZWUKKyAg IFJldHVybnM6CisgICAgIDAgaWYgY2FsbCBpcyBsb2NhbAorICAgICAxIGlmIGNhbGwgaXMgbG9u ZyBkaXN0YW5jZQorICAgICAyIGlmIGNhbGwgaXMgbG9jYWwgYnV0IGFyZWEgY29kZSBtdXN0IGJl IGRpYWxlZCBhbnl3YXkKKyovCitzdGF0aWMgaW50CitjYWxsaXNsZChzcmMsIGRlc3QpIGNoYXIg KiBzcmMsICogZGVzdDsgeworICAgIGludCBpOworICAgIGlmIChkaWFsZmxkKSAgICAgICAgICAg ICAgICAgICAgICAgIC8qIEZvcmNlIGxvbmcgZGlzdGFuY2U/ICovCisgICAgICByZXR1cm4oMSk7 CisgICAgaWYgKCFzdHJjbXAoc3JjLGRlc3QpKSB7ICAgICAgICAgICAgLyogQXJlYSBjb2RlcyBh cmUgdGhlIHNhbWUgKi8KKyAgICAgICAgZm9yIChpID0gMDsgaSA8IG5sb2NhbGFjOyBpKyspICAv KiBJcyBBQyBpbiB0aGUgbGMtYXJlYS1jb2RlcyBsaXN0PyAqLworICAgICAgICAgIGlmICghc3Ry Y21wKHNyYyxkaWFsbGNhY1tpXSkpCisgICAgICAgICAgICByZXR1cm4oMik7ICAgICAgICAgICAg ICAgICAgLyogWWVzIHNvIG11c3QgYmUgZGlhbGVkICovCisgICAgICAgIHJldHVybigwKTsgICAg ICAgICAgICAgICAgICAgICAgLyogTm8gc28gZG9uJ3QgZGlhbCBpdC4gKi8KKyAgICB9CisgICAg Zm9yIChpID0gMDsgaSA8IG5sb2NhbGFjOyBpKyspICAgICAgLyogQUNzIG5vdCB0aGUgc2FtZSBz byBsb29rIGluIGxpc3QgKi8KKyAgICAgIGlmICghc3RyY21wKGRlc3QsZGlhbGxjYWNbaV0pKSAg ICAvKiBNYXRjaCAqLworICAgICAgICByZXR1cm4oMik7ICAgICAgICAgICAgICAgICAgICAgIC8q IFNvIGxvY2FsIGNhbGwgd2l0aCBhcmVhIGNvZGUgKi8KKyAgICByZXR1cm4oMSk7ICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBOb3QgbG9jYWwgc28gbG9uZy1kaXN0YW5jZSAqLworfQorCitj aGFyIHBkc2Z4WzY0XSA9IHsgTlVMLCBOVUwgfTsKKworI2lmbmRlZiBOT1NQTAorc3RhdGljIGNo YXIgKgoreGRpYWwocykgY2hhciAqczsgeyAgICAgICAgICAgICAgICAgICAgIC8qIFJ1biBkaWFs IHN0cmluZyB0aHJ1IG1hY3JvICovCisgICAgaW50IHgsIG07CisgICAgY2hhciAqIHMyOworICAg IHMyID0gTlVMTDsKKyAgICBtYWtlc3RyKCZzMixzKTsJCQkvKiBDb3B5IHRoZSBhcmd1bWVudCAq LworICAgIGlmICghZGlhbG1hYykgICAgICAgICAgICAgICAgICAgICAgIC8qIERpYWwgbWFjcm8g bmFtZSBnaXZlbj8gKi8KKyAgICAgIHJldHVybihOVUxMKTsKKyAgICBpZiAoKHggPSBteGxvb2so bWFjdGFiLGRpYWxtYWMsbm1hYykpIDwgMCkgLyogSXMgdGhlIG1hY3JvIGRlZmluZWQ/ICovCisg ICAgICByZXR1cm4oTlVMTCk7CisgICAgbSA9IG1hY2x2bDsKKyAgICB4ID0gZG9kbyh4LHMyLDAp OwkJCS8qIFNldCB1cCB0aGUgbWFjcm8gKi8KKyAgICBpZiAoczIpIGZyZWUoczIpOworICAgIGlm ICh4ID4gMCkgeworICAgICAgICB3aGlsZSAobWFjbHZsID4gbSkgICAgICAgICAgICAgIC8qIEV4 ZWN1dGUgdGhlIHBhcnNlciAqLworICAgICAgICAgIHBhcnNlcigxKTsKKyAgICAgICAgcmV0dXJu KG1ydmFsW21hY2x2bCsxXSk7ICAgICAgICAvKiBSZXR1cm4gdGhlIHJlc3VsdCAqLworICAgIH0K KyAgICByZXR1cm4oTlVMTCk7Cit9CisjZW5kaWYgLyogTk9TUEwgKi8KKworc3RhdGljIGludAor ZG5jdnQoayxjeCwgcHJlZml4LCBzdWZmaXgpCisgICAgaW50IGssIGN4LCBwcmVmaXgsIHN1ZmZp eDsgeyAgICAgICAgLyogRGlhbCBOdW1iZXIgQ29udmVydCAqLworICAgIGludCBpLCBqLCBuLCB3 aGF0OyAgICAgICAgICAgICAgICAgIC8qIGN4IGlzIHRvcC1sZXZlbCBjb21tYW5kIGluZGV4ICov CisgICAgY2hhciAqc3M7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcHJlZml4IC0gYWRk IHByZWZpeGVzPyAqLworICAgIGNoYXIgKnAsICpwMiwgKnB4bzsgICAgICAgICAgICAgICAgIC8q IHN1ZmZpeCAtIGFkZCBzdWZmaXhlcz8gKi8KKyAgICBjaGFyICpsYWM7CisgICAgY2hhciAqbnBy OworICAgIGNoYXIgKnNmeDsKKyAgICAvKiBjaGFyICpwc2Z4OyAqLworICAgIGNoYXIgY2NidWZb MTI4XTsKKyAgICBpbnQgY2M7CisgICAgY2hhciBhY2J1ZlsyNF07CisgICAgY2hhciAqYWNwdHI7 CisgICAgY2hhciBvdXRidWZbMjU2XTsKKy8qCisgIEZpcnN0IHBhc3MgZm9yIHN0cmljdCAocHVu Y3R1YXRpb24tYmFzZWQpIGludGVycHJldGF0aW9uLgorICBJZiBpdCBmYWlscywgd2UgdHJ5IHRo ZSBsb29zZXIgKGxlbmd0aC1iYXNlZCkgb25lLgorKi8KKyAgICBkaWFsdHlwZSA9IC0xOworICAg IHdoYXQgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFR5cGUgb2YgY2FsbCAqLwor ICAgIHMgPSBkbl9wW2tdOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIE51bWJlciB0byBiZSBj b252ZXJ0ZWQuICovCisgICAgZGVidWcoRjExMSwiZG5jdnQiLHMsayk7CisgICAgaWYgKGRuX3Ay W2tdKSB7CisgICAgICAgIGZyZWUoZG5fcDJba10pOworICAgICAgICBkbl9wMltrXSA9IE5VTEw7 CisgICAgfQorICAgIGlmICghcykgeworICAgICAgICBwcmludGYoIkVycm9yIC0gTm8gcGhvbmUg bnVtYmVyIHRvIGNvbnZlcnRcbiIpOworICAgICAgICByZXR1cm4oLTEpOworICAgIH0KKyAgICBp ZiAoKGludClzdHJsZW4ocykgPiAyMDApIHsKKyAgICAgICAgY2tzdHJuY3B5KG91dGJ1ZixzLDQw KTsKKyAgICAgICAgcHJpbnRmKCI/VG9vIGxvbmc6IFwiJXMuLi5cIlxuIixvdXRidWYpOworICAg ICAgICByZXR1cm4oLTEpOworICAgIH0KKyAgICBucHIgPSAocHJlZml4ICYmIGRpYWxucHIpID8g ZGlhbG5wciA6ICIiOworICAgIHNmeCA9IChzdWZmaXggJiYgZGlhbHNmeCkgPyBkaWFsc2Z4IDog IiI7CisgICAgLyogaWYgKHBhcnRpYWwpIHBzZnggPSBkaWFsc2Z4ID8gZGlhbHNmeCA6ICIiOyAq LworICAgIHB4byA9IChwcmVmaXggJiYgZGlhbHB4bykgPyBkaWFscHhvIDogIiI7CisgICAgbGFj ID0gZGlhbGxhYyA/IGRpYWxsYWMgOiAiIjsgICAgICAgLyogTG9jYWwgYXJlYSBjb2RlICovCisK KyAgICBvdXRidWZbMF0gPSBOVUw7ICAgICAgICAgICAgICAgICAgICAvKiBJbml0aWFsaXplIGNv bnZlcnNpb24gYnVmZmVyICovCisgICAgc3MgPSBzOyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogUmVtZW1iZXIgb3JpZ2luYWwgc3RyaW5nICovCisKKyAgICBpZiAoKnMgIT0gJysnKSB7 ICAgICAgICAgICAgICAgICAgICAvKiBMaXRlcmFsIG51bWJlciAqLworICAgICAgICBkbl94W2td ID0gRE5fVU5LOyAgICAgICAgICAgICAgIC8qIFNvcnQga2V5IGlzICJ1bmtub3duIi4gKi8KKyAg ICAgICAgY2ttYWttc2cob3V0YnVmLDI1NiwgICAgICAgICAgICAvKiBTYW5kd2ljaCBpdCBiZXR3 ZWVuICovCisgICAgICAgICAgICAgICAgIHB4byxucHIscyxzZnggICAgICAgICAgLyogRElBTCBQ UkVGSVggYW5kIFNVRkZJWCAqLworICAgICAgICAgICAgICAgICk7CisjaWZkZWYgQ0tfVEFQSQor ICAgICAgICBpZiAodHR0YXBpICYmICAgICAgICAgICAgICAgICAgIC8qIFRBUEkgZG9lcyBpdHMg b3duIGNvbnZlcnNpb25zICovCisgICAgICAgICAgICAhdGFwaXBhc3MgJiYgICAgICAgICAgICAg ICAgLyogaWYgbm90IGluIHBhc3N0aHJ1IG1vZGUgKi8KKyAgICAgICAgICAgIHRhcGljb252ID09 IENLX0FVVE8gfHwgICAgICAvKiBhbmQgVEFQSSBjb252ZXJzaW9ucyBhcmUgQVVUTyAqLworICAg ICAgICAgICAgdGFwaWNvbnYgPT0gQ0tfT04gICAgICAgICAgIC8qIE9SIGlmIFRBUEkgY29udmVy c2lvbnMgYXJlIE9OICovCisgICAgICAgICAgICApIHsKKyAgICAgICAgICAgIGNoYXIgKiBwID0g TlVMTDsKKyAgICAgICAgICAgIGRpYWx0eXBlID0gLTI7CisgICAgICAgICAgICBpZiAoIWNrdGFw aUNvbnZlcnRQaG9uZU51bWJlcihkbl9wW2tdLCAmcCkpCisgICAgICAgICAgICAgIHJldHVybigt MSk7CisgICAgICAgICAgICBtYWtlc3RyKCZkbl9wMltrXSwgcCk7CisgICAgICAgICAgICBpZiAo cCkgZnJlZShwKTsKKyAgICAgICAgICAgIHJldHVybigwKTsKKyAgICAgICAgfSBlbHNlCisjZW5k aWYgLyogQ0tfVEFQSSAqLworICAgICAgICAgIG1ha2VzdHIoJmRuX3AyW2tdLCBvdXRidWYpOyAg IC8qIE5vdCBUQVBJICovCisgICAgICAgIGRpYWx0eXBlID0gd2hhdDsKKyAgICAgICAgcmV0dXJu KDApOyAgICAgICAgICAgICAgICAgICAgICAvKiBEb25lLiAqLworICAgIH0KKyAgICBpID0gMDsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQb3J0YWJsZSBudW1iZXIgKi8KKyAgICBz Kys7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUaXB0b2UgcGFzdCB0aGUgcGx1 cyBzaWduICovCisgICAgY2NidWZbMF0gPSBOVUw7ICAgICAgICAgICAgICAgICAgICAgLyogRG8g Y291bnRyeSBjb2RlIGZpcnN0ICovCisKKyAgICBpZiAoIWRpYWxsY2MpIHsgICAgICAgICAgICAg ICAgICAgICAvKiBEbyB3ZSBrbm93IG91ciBvd24/ICovCisgICAgICAgIGlmIChjeCAhPSBYWExP T0spCisgICAgICAgICAgcHJpbnRmKCJFcnJvciAtIHByaW9yIFNFVCBESUFMIENPVU5UUlktQ09E RSBjb21tYW5kIHJlcXVpcmVkXG4iKTsKKyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9CisKKyAg ICAvKiBQYXJzZSB0aGUgbnVtYmVyICovCisKKyAgICB3aGlsZSAoMSkgeyAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBHZXQgdGhlIGNvdW50cnkgY29kZSAqLworICAgICAgICB3aGlsZSAoKnMg PT0gSFQgfHwgKnMgPT0gU1ApCisgICAgICAgICAgcysrOworICAgICAgICBpZiAoIXMpICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIE5vdCBpbiBzdGFuZGFyZCBmb3JtYXQgKi8KKyAgICAgICAg ICBicmVhazsKKyAgICAgICAgaWYgKCpzID09ICcoJykgeyAgICAgICAgICAgICAgICAvKiBCZWdp bm5pbmcgb2YgYXJlYSBjb2RlICAqLworICAgICAgICAgICAgcysrOyAgICAgICAgICAgICAgICAg ICAgICAgIC8qIFNraXAgcGFzdCBwYXJlbnRoZXNpcyAgICovCisgICAgICAgICAgICBjY2J1Zltp XSA9IE5VTDsgICAgICAgICAgICAgLyogRW5kIG9mIGNvdW50cnkgY29kZSAqLworICAgICAgICAg ICAgaWYgKCFzKSB7ICAgICAgICAgICAgICAgICAgIC8qIENoZWNrIGZvciBlbmQgb2Ygc3RyaW5n ICovCisgICAgICAgICAgICAgICAgcHJpbnRmKCJFcnJvciAtIHBob25lIG51bWJlciBlbmRzIHBy ZW1hdHVyZWx5OiBcIiVzXCJcbiIsc3MpOworICAgICAgICAgICAgICAgIHJldHVybigtMSk7Cisg ICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfSBlbHNlIHsgICAgICAg ICAgICAgICAgICAgICAgICAvKiBDb2xsZWN0IGNvdW50cnkgY29kZSAqLworICAgICAgICAgICAg aWYgKGlzZGlnaXQoKnMpKQorICAgICAgICAgICAgICBjY2J1ZltpKytdID0gKnM7ICAgICAgICAg IC8qIGNvcHkgdGhpcyBjaGFyYWN0ZXIgKi8KKyAgICAgICAgICAgIHMrKzsKKyAgICAgICAgICAg IGlmICghKnMgfHwgaSA+IDEyNykgICAgICAgICAvKiB3YXRjaCBvdXQgZm9yIG1lbW9yeSBsZWFr ICovCisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIGNjID0gYXRv aShjY2J1Zik7ICAgICAgICAgICAgICAgICAgIC8qIE51bWVyaWMgdmVyc2lvbiBvZiBjb3VudHJ5 IGNvZGUgKi8KKworICAgIGkgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5v dyBnZXQgYXJlYSBjb2RlICovCisgICAgYWNidWZbMF0gPSBOVUw7ICAgICAgICAgICAgICAgICAg ICAgLyogSW5pdGlhbGl6ZSBhcmVhLWNvZGUgYnVmZmVyICovCisgICAgYWNwdHIgPSBhY2J1Zjsg ICAgICAgICAgICAgICAgICAgICAgLyogYW5kIHBvaW50ZXIuICovCisgICAgd2hpbGUgKDEpIHsK KyAgICAgICAgd2hpbGUgKCpzID09IEhUIHx8ICpzID09IFNQKSAgICAvKiBJZ25vcmUgd2hpdGVz cGFjZSAqLworICAgICAgICAgIHMrKzsKKyAgICAgICAgaWYgKCFzKSAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBTdHJpbmcgZmluaXNoZWQgKi8KKyAgICAgICAgICBicmVhazsKKyAgICAgICAg aWYgKCpzID09ICcpJykgeyAgICAgICAgICAgICAgICAvKiBFbmQgb2YgYXJlYSBjb2RlICAqLwor ICAgICAgICAgICAgcysrOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNraXAgcGFzdCBwYXJl bnRoZXNpcyAgICovCisgICAgICAgICAgICBhY2J1ZltpXSA9IE5VTDsgICAgICAgICAgICAgLyog VGVybWluYXRlIGFyZWEtY29kZSBidWZmZXIgKi8KKyAgICAgICAgICAgIGJyZWFrOworICAgICAg ICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBhcnQgb2YgYXJlYSBjb2RlICov CisgICAgICAgICAgICBpZiAoaXNkaWdpdCgqcykpICAgICAgICAgICAgLyogSWYgaXQncyBhIGRp Z2l0LCAqLworICAgICAgICAgICAgICBhY2J1ZltpKytdID0gKnM7ICAgICAgICAgIC8qIGNvcHkg dGhpcyBjaGFyYWN0ZXIgKi8KKyAgICAgICAgICAgIHMrKzsgICAgICAgICAgICAgICAgICAgICAg ICAvKiBQb2ludCB0byBuZXh0ICovCisgICAgICAgICAgICBpZiAoISpzIHx8IGkgPiAyMykgICAg ICAgICAgLyogV2F0Y2ggb3V0IGZvciBvdmVyZmxvdyAqLworICAgICAgICAgICAgICBicmVhazsK KyAgICAgICAgfQorICAgIH0KKworLyoKKyAgIEhlcmUgd2Ugc3RyaXAgYW55IGxlYWRpbmcgMCBm b3IgY291bnRyaWVzIHRoYXQgd2Uga25vdyBoYXZlCisgICAwIGFzIGEgbG9uZy1kaXN0YW5jZSBw cmVmaXggYW5kIGRvIG5vdCBoYXZlIGFueSBhcmVhIGNvZGVzIHRoYXQKKyAgIHN0YXJ0IHdpdGgg MCAoZm9ybWVybHkgYWxzbyBkaXR0byBmb3IgIjkiIGluIEZpbmxhbmQuLi4pCisqLworICAgIGkg PSBhdG9pKGNjYnVmKTsKKyAgICBhY3B0ciA9IGNoa19hYyhpLGFjYnVmKTsKKworICAgIHdoaWxl ICgqcyA9PSBIVCB8fCAqcyA9PSBTUCkgICAgICAgIC8qIFNraXAgd2hpdGVzcGFjZSAqLworICAg ICAgcysrOworCisvKiBwcmludGYoIlM9WyVzXSwgQUNQVFI9WyVzXVxuIixzLGFjcHRyKTsgKi8K KworICAgIGlmICgqcyAmJiAqYWNwdHIpIHsgICAgICAgICAgICAgICAgIC8qIEFyZWEgY29kZSB3 YXMgZGVsaW1pdGVkICovCisKKyAgICAgICAgd2hpbGUgKCpzID09ICctJyB8fCAqcyA9PSAnLicp ICAvKiBTa2lwIHBhc3QgZ3JhdHVpdGlvdXMgcHVuY3R1YXRpb24gKi8KKyAgICAgICAgICBzKys7 CisgICAgICAgIGlmICghKnMpIHMtLTsgICAgICAgICAgICAgICAgICAgLyogQnV0IG5vdCB0byBl bmQgb2Ygc3RyaW5nICovCisKKyAgICAgICAgaWYgKHN0cmNtcChkaWFsbGNjLGNjYnVmKSkgeyAg ICAvKiBPdXQgb2YgY291bnRyeT8gKi8KKyAgICAgICAgICAgIGlmICghZGlhbGl4cCkgeyAgICAg ICAgICAgICAvKiBOZWVkIGludGwtcHJlZml4ICovCisgICAgICAgICAgICAgICAgaWYgKGN4ICE9 IFhYTE9PSykKKyAgICAgICAgICAgICAgICAgIHByaW50ZigiRXJyb3IgLSBObyBpbnRlcm5hdGlv bmFsIGRpYWxpbmcgcHJlZml4IGRlZmluZWRcbiIpOworICAgICAgICAgICAgICAgIHJldHVybigt MSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3aGF0ID0gZG5feFtrXSA9IEROX0lOVEw7 CisgICAgICAgICAgICBwICA9IChwcmVmaXggJiYgZGlhbGl4cCkgPyBkaWFsaXhwIDogIiI7IC8q IEludGwtcHJlZml4ICovCisgICAgICAgICAgICBwMiA9IChzdWZmaXggJiYgZGlhbGl4cykgPyBk aWFsaXhzIDogIiI7IC8qIEludGwtc3VmZml4ICovCisKKyAgICAgICAgICAgIC8qIEZvcm0gdGhl IGZpbmFsIHBob25lIG51bWJlciAqLworI2lmZGVmIENPTU1FTlQKKyAgICAgICAgICAgIHNwcmlu dGYocGRzZngsIiVzJXMiLHAyLHNmeCk7IC8qIFVOU0FGRSAqLworICAgICAgICAgICAgc3ByaW50 ZihvdXRidWYsCisgICAgICAgICAgICAgICAgICAgICIlcyVzJXMlcyVzJXMlcyVzIiwKKyAgICAg ICAgICAgICAgICAgICAgcHhvLG5wcixwLGNjYnVmLGFjcHRyLHMscDIsc2Z4CisgICAgICAgICAg ICAgICAgICAgICk7CisjZWxzZQorICAgICAgICAgICAgY2ttYWttc2cocGRzZngsNjQscDIsc2Z4 LE5VTEwsTlVMTCk7CisgICAgICAgICAgICBja21ha3htc2cob3V0YnVmLDI1NixweG8sbnByLHAs Y2NidWYsYWNwdHIscyxwMixzZngsCisgICAgICAgICAgICAgICAgICAgICAgTlVMTCxOVUxMLE5V TEwsTlVMTCk7CisjZW5kaWYgLyogQ09NTUVOVCAqLworCisgICAgICAgIH0gZWxzZSBpZiAoKHgg PSBjYWxsaXNsZChsYWMsYWNwdHIpKSA+PSAxKSB7IC8qIEluLWNvdW50cnkgTEQgKi8KKyAgICAg ICAgICAgIGlmICghZGlhbGxhYyAmJiBjeCAhPSBYWExPT0spIHsgLyogRG9uJ3Qga25vdyBteSBv d24gYXJlYSBjb2RlICovCisgICAgICAgICAgICAgICAgaWYgKGNjID09IDEpCisgICAgICAgICAg ICAgICAgICBwcmludGYoIldBUk5JTkcgLSBQcmlvciBTRVQgRElBTCBBUkVBLUNPREUgbmVlZGVk XG4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh4ID09IDIpIHsgICAgICAgICAg ICAgICAvKiBMb2NhbCBjYWxsIHdpdGggYXJlYSBjb2RlICovCisgICAgICAgICAgICAgICAgd2hh dCA9IGRuX3hba10gPSBETl9MT0NBTDsgICAgICAvKiBMb2NhbC1jYWxsICovCisgICAgICAgICAg ICAgICAgcCAgPSAocHJlZml4ICYmIGRpYWxsY3ApID8gZGlhbGxjcCA6ICIiOyAvKiBsb2NhbC1w cmVmaXggKi8KKyAgICAgICAgICAgICAgICBwMiA9IChzdWZmaXggJiYgZGlhbGxjcykgPyBkaWFs bGNzIDogIiI7IC8qIGxvY2FsLXN1ZmZpeCAqLworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg ICAgICAgICAgICB3aGF0ID0gZG5feFtrXSA9IEROX0xPTkc7ICAgICAgIC8qIExvbmctZGlzdGFu Y2UgKi8KKyAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnRvbGxmcmVlOyBpKyspIHsg LyogQnV0IHRvbGwtZnJlZSB0b28/ICovCisgICAgICAgICAgICAgICAgICAgIGlmICghc3RyY21w KGFjcHRyLGRpYWx0ZmNbaV0pKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB3aGF0ID0gZG5f eFtrXSA9IEROX0ZSRUU7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAod2hh dCA9PSBETl9GUkVFKSB7ICAvKiBUb2xsLWZyZWUgY2FsbCAqLworICAgICAgICAgICAgICAgICAg ICBwID0gKHByZWZpeCAmJiBkaWFsdGZwKSA/IGRpYWx0ZnAgOgorICAgICAgICAgICAgICAgICAg ICAgICAgKChwcmVmaXggJiYgZGlhbGxkcCkgPyBkaWFsbGRwIDogIiIpOworICAgICAgICAgICAg ICAgICAgICBwMiA9ICIiOyAgICAgICAgICAgIC8qIG5vIHN1ZmZpeCAqLworICAgICAgICAgICAg ICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogbm9ybWFsIGxvbmcgZGlzdGFu Y2UgKi8KKyAgICAgICAgICAgICAgICAgICAgcCAgPSAocHJlZml4ICYmIGRpYWxsZHApID8gZGlh bGxkcCA6ICIiOyAvKiBsZC1wcmVmaXggKi8KKyAgICAgICAgICAgICAgICAgICAgcDIgPSAoc3Vm Zml4ICYmIGRpYWxsZHMpID8gZGlhbGxkcyA6ICIiOyAvKiBsZC1zdWZmaXggKi8KKyAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvKiBGb3JtIHRoZSBudW1iZXIg dG8gYmUgZGlhbGVkICovCisjaWZkZWYgQ09NTUVOVAorICAgICAgICAgICAgc3ByaW50ZihvdXRi dWYsIiVzJXMlcyVzJXMlcyVzIiwKKyAgICAgICAgICAgICAgICAgICAgcHhvLG5wcixwLGFjcHRy LHMscDIsc2Z4CisgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICBzcHJpbnRmKHBk c2Z4LCIlcyVzIixwMixzZngpOworI2Vsc2UKKyAgICAgICAgICAgIGNrbWFreG1zZyhvdXRidWYs MjU2LAorICAgICAgICAgICAgICAgICAgICAgIHB4byxucHIscCxhY3B0cixzLHAyLHNmeCwKKyAg ICAgICAgICAgICAgICAgICAgICBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwpOworICAgICAgICAg ICAgY2ttYWttc2cocGRzZngsNjQscDIsc2Z4LE5VTEwsTlVMTCk7CisjZW5kaWYgLyogQ09NTUVO VCAqLworICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNhbWUgY291 bnRyeSwgc2FtZSBhcmVhIGNvZGUgKi8KKyAgICAgICAgICAgIHdoYXQgPSBkbl94W2tdID0gRE5f TE9DQUw7ICAvKiBTbyBpdCdzIGEgbG9jYWwgY2FsbC4gKi8KKyAgICAgICAgICAgIGlmICghcHJl Zml4IHx8ICEoZGlhbHB4byB8fCBuZGlhbHB4eCkpIHsgLyogTm90IGRpYWxpbmcgZnJvbSBQQlgg Ki8KKyAgICAgICAgICAgICAgICBwICA9IChwcmVmaXggJiYgZGlhbGxjcCkgPyBkaWFsbGNwIDog IiI7IC8qIGxvY2FsLXByZWZpeCAqLworICAgICAgICAgICAgICAgIHAyID0gKHN1ZmZpeCAmJiBk aWFsbGNzKSA/IGRpYWxsY3MgOiAiIjsgLyogbG9jYWwtc3VmZml4ICovCisjaWZkZWYgQ09NTUVO VAorICAgICAgICAgICAgICAgIGlmICh4ID09IDIpCisgICAgICAgICAgICAgICAgICBzcHJpbnRm KG91dGJ1ZiwiJXMlcyVzJXMlcyVzIixucHIscCxhY3B0cixzLHAyLHNmeCk7CisgICAgICAgICAg ICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgc3ByaW50ZihvdXRidWYsIiVzJXMlcyVzJXMi LG5wcixwLHMscDIsc2Z4KTsKKyAgICAgICAgICAgICAgICBzcHJpbnRmKHBkc2Z4LCIlcyVzIixw MixzZngpOworI2Vsc2UKKyAgICAgICAgICAgICAgICBpZiAoeCA9PSAyKQorICAgICAgICAgICAg ICAgICAgY2ttYWt4bXNnKG91dGJ1ZiwyNTYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg bnByLHAsYWNwdHIscyxwMixzZngsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCxO VUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAg ICAgICAgICAgIGNrbWFreG1zZyhvdXRidWYsMjU2LAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgIG5wcixwLHMscDIsc2Z4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsTlVM TCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwpOworICAgICAgICAgICAgICAgIGNrbWFrbXNnKHBk c2Z4LDY0LHAyLHNmeCxOVUxMLE5VTEwpOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKworICAgICAg ICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgIC8qIERpYWxpbmcgZnJvbSBhIFBCWCBh bmQgbm90IFRBUEkgKi8KKyAgICAgICAgICAgICAgICBpZiAobmRpYWxweHgpIHsgICAgICAgICAv KiBJcyBpdCBpbnRlcm5hbD8gKi8KKyNpZmRlZiBDT01NRU5UCisgICAgICAgICAgICAgICAgICAg IGkgPSAoaW50KSBzdHJsZW4oZGlhbHB4eCk7CisgICAgICAgICAgICAgICAgICAgIGogPSAoaW50 KSBzdHJsZW4ocyk7CisgICAgICAgICAgICAgICAgICAgIHggPSAtMTsKKyAgICAgICAgICAgICAg ICAgICAgaWYgKGogPiBpKQorICAgICAgICAgICAgICAgICAgICAgIHggPSBja3N0cmNtcChkaWFs cHh4LHMsaSwwKTsKKyNlbHNlCisgICAgICAgICAgICAgICAgICAgIGludCBreDsKKyAgICAgICAg ICAgICAgICAgICAgeCA9IC0xOworICAgICAgICAgICAgICAgICAgICBqID0gKGludCkgc3RybGVu KHMpOworICAgICAgICAgICAgICAgICAgICBmb3IgKGt4ID0gMDsga3ggPCBuZGlhbHB4eDsga3gr KykgeworICAgICAgICAgICAgICAgICAgICAgICAgaSA9IChpbnQpIHN0cmxlbihkaWFscHh4W2t4 XSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaiA+IGkpCisgICAgICAgICAgICAgICAg ICAgICAgICAgIGlmICghKHggPSBja3N0cmNtcChkaWFscHh4W2t4XSxzLGksMCkpKQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisjZW5k aWYgLyogQ09NTUVOVCAqLworICAgICAgICAgICAgICAgICAgICBpZiAoIXgpIHsKKyAgICAgICAg ICAgICAgICAgICAgICAgIGNoYXIgKiBpY3AsIGJ1ZlszMl07CisgICAgICAgICAgICAgICAgICAg ICAgICBtYWtlc3RyKCZtYXRjaHB4eCxkaWFscHh4W2t4XSk7CisgICAgICAgICAgICAgICAgICAg ICAgICBkZWJ1ZyhGMTExLCJkbmN2dCBtYXRjaHB4eCIsbWF0Y2hweHgsa3gpOworICAgICAgICAg ICAgICAgICAgICAgICAgd2hhdCA9IGRuX3hba3hdID0gRE5fSU5URVJOOyAgIC8qIEludGVybmFs IGNhbGwuICovCisgICAgICAgICAgICAgICAgICAgICAgICBzICs9IGk7CisgICAgICAgICAgICAg ICAgICAgICAgICAvKiBJbnRlcm5hbC1jYWxsIHByZWZpeCAqLworICAgICAgICAgICAgICAgICAg ICAgICAgaWNwID0gZGlhbHB4aTsKKyNpZm5kZWYgTk9TUEwKKyAgICAgICAgICAgICAgICAgICAg ICAgIGlmIChpY3ApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKmljcCA9PSAn XFwnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgYywgKmJwOworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbjsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgYyA9ICooaWNwKzEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpZiAoaXN1cHBlcihjKSkgYyA9IHRvbG93ZXIoYyk7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGlmIChjID09ICd2JyB8fCBjID09ICdmJykgeworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbiA9IDMyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgYnAgPSBidWY7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6enN0 cmluZyhpY3AsJmJwLCZuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlj cCA9IGJ1ZjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBO T1NQTCAqLworICAgICAgICAgICAgICAgICAgICAgICAgcCA9IChwcmVmaXggJiYgaWNwKSA/IGlj cCA6ICIiOworI2lmZGVmIENPTU1FTlQKKyAgICAgICAgICAgICAgICAgICAgICAgIHNwcmludGYo b3V0YnVmLCIlcyVzJXMlcyIsbnByLHAscyxzZngpOworI2Vsc2UKKyAgICAgICAgICAgICAgICAg ICAgICAgIGNrbWFrbXNnKG91dGJ1ZiwyNTYsbnByLHAscyxzZngpOworI2VuZGlmIC8qIENPTU1F TlQgKi8KKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAvKiBFeHRlcm5h bCBsb2NhbCBjYWxsICovCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBsb2NhbC1wcmVmaXgg Ki8KKyAgICAgICAgICAgICAgICAgICAgICAgIHAgID0gKHByZWZpeCAmJiBkaWFsbGNwKSA/IGRp YWxsY3AgOiAiIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGxvY2FsLXN1ZmZpeCAqLwor ICAgICAgICAgICAgICAgICAgICAgICAgcDIgPSAocHJlZml4ICYmIGRpYWxsY3MpID8gZGlhbGxj cyA6ICIiOworI2lmZGVmIENPTU1FTlQKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4ID09 IDIpCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNwcmludGYob3V0YnVmLCIlcyVzJXMlcyVz JXMlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlhbHB4byA/IGRpYWxw eG8gOiAiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBucHIscCxhY3B0cixz LHAyLHNmeCk7CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg ICAgICAgICAgIHNwcmludGYob3V0YnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICIlcyVzJXMlcyVzJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRp YWxweG8gPyBkaWFscHhvIDogIiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bnByLHAscyxwMixzZngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworI2Vs c2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4ID09IDIpCisgICAgICAgICAgICAgICAg ICAgICAgICAgIGNrbWFreG1zZyhvdXRidWYsIDI1NiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZGlhbHB4byA/IGRpYWxweG8gOiAiIiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbnByLHAsYWNwdHIscyxwMixzZngsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCk7CisgICAgICAgICAgICAg ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNrbWFreG1zZyhvdXRi dWYsIDI1NiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpYWxweG8gPyBk aWFscHhvIDogIiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBucHIscCxz LHAyLHNmeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsTlVMTCxO VUxMLE5VTEwsTlVMTCxOVUxMKTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwor ICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFyZWEgY29kZSB3YXMg bm90IGRlbGltaXRlZCAqLworCisgICAgICAgIGNoYXIgeGJ1ZlsyNTZdOyAgICAgICAgICAgICAg ICAgLyogQ29tcGFyaXNvbiBiYXNlZCBvbmx5IG9uIGxlbmd0aCAqLworICAgICAgICBjaGFyIHli dWZbMjU2XTsKKyAgICAgICAgaW50IHgsIGo7CisKKyAgICAgICAgcyA9IHNzOworCisgICAgICAg IGZvciAoaSA9IDA7IGkgPCAyNTU7IGkrKykgeworICAgICAgICAgICAgaWYgKCEqcykgYnJlYWs7 CisgICAgICAgICAgICB3aGlsZSAoIWlzZGlnaXQoKnMpKSB7ICAgICAgLyogUGF5IGF0dGVudGlv biBvbmx5IHRvIGRpZ2l0cyAqLworICAgICAgICAgICAgICAgIHMrKzsKKyAgICAgICAgICAgICAg ICBpZiAoISpzKSBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHhidWZbaV0gPSAq cysrOworICAgICAgICB9CisgICAgICAgIHhidWZbaV0gPSBOVUw7CisKKyAgICAgICAgeCA9IDE7 ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBc3N1bWUgTEQgKi8KKyAgICAgICAgbiA9IDA7 CisgICAgICAgIGlmICghZGlhbGZsZCkgeyAgICAgICAgICAgICAgICAgLyogSWYgTEQgbm90IGZv cmNlZCAqLworICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IG5sb2NhbGFjOyBqKyspIHsgLyog Y2hlY2sgbG9jYWwgQUMgbGlzdD8gKi8KKyAgICAgICAgICAgICAgICBja21ha21zZyh5YnVmLDI1 NixkaWFsbGNjLGRpYWxsY2FjW2pdLE5VTEwsTlVMTCk7CisgICAgICAgICAgICAgICAgbiA9IChp bnQpIHN0cmxlbih5YnVmKTsKKyAgICAgICAgICAgICAgICBpZiAobiA+IDAgJiYgIWNrc3RyY21w KHhidWYseWJ1ZixuLDApKSB7CisgICAgICAgICAgICAgICAgICAgIHggPSAyOworICAgICAgICAg ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg ICAgICAgICBpZiAoeCA9PSAxKSB7ICAgICAgICAgICAgICAgLyogT3IgZXhhY3QgbWF0Y2ggd2l0 aCBsb2NhbCBDQytBQz8gKi8KKyAgICAgICAgICAgICAgICBja21ha21zZyh5YnVmLDI1NixkaWFs bGNjLGxhYyxOVUxMLE5VTEwpOworICAgICAgICAgICAgICAgIG4gPSAoaW50KSBzdHJsZW4oeWJ1 Zik7CisgICAgICAgICAgICAgICAgaWYgKG4gPiAwICYmICFja3N0cmNtcCh4YnVmLHlidWYsbiww KSkKKyAgICAgICAgICAgICAgICAgIHggPSAwOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg ICAgICAgIGlmICh4ID09IDAgfHwgeCA9PSAyKSB7ICAgICAgICAgLyogTG9jYWwgY2FsbCAqLwor ICAgICAgICAgICAgaW50IHh4LGt4OyAgICAgICAgICAgICAgICAgIC8qIEJlZ2luIDEgRGVjIDIw MDEuLi4gKi8KKyAgICAgICAgICAgIC8qIEFjY291bnQgZm9yIFBCWCBpbnRlcm5hbCBjYWxscyAq LworICAgICAgICAgICAgaWYgKG5kaWFscHh4KSB7CisgICAgICAgICAgICAgICAgeHggPSAtMTsK KyAgICAgICAgICAgICAgICBqID0gKGludCkgc3RybGVuKHlidWYpOworICAgICAgICAgICAgICAg IGZvciAoa3ggPSAwOyBreCA8IG5kaWFscHh4OyBreCsrKSB7CisgICAgICAgICAgICAgICAgICAg IGkgPSAoaW50KSBzdHJsZW4oZGlhbHB4eFtreF0pOworICAgICAgICAgICAgICAgICAgICBpZiAo aiA+PSBpKQorICAgICAgICAgICAgICAgICAgICAgIGlmICghKHh4ID0gY2tzdHJjbXAoZGlhbHB4 eFtreF0sJnhidWZbal0saSwwKSkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIXh4KSB7Cisg ICAgICAgICAgICAgICAgY2hhciAqIGljcCwgYnVmWzMyXTsKKyAgICAgICAgICAgICAgICBtYWtl c3RyKCZtYXRjaHB4eCxkaWFscHh4W2t4XSk7CisgICAgICAgICAgICAgICAgZGVidWcoRjExMSwi ZG5jdnQgbWF0Y2hweHgiLG1hdGNocHh4LGt4KTsKKyAgICAgICAgICAgICAgICB3aGF0ID0gZG5f eFtreF0gPSBETl9JTlRFUk47IC8qIEludGVybmFsIGNhbGwuICovCisgICAgICAgICAgICAgICAg cyA9IHhidWYgKyBqICsgaTsKKyAgICAgICAgICAgICAgICBpY3AgPSBkaWFscHhpOyAgICAgICAg ICAvKiBJbnRlcm5hbC1jYWxsIHByZWZpeCAqLworI2lmbmRlZiBOT1NQTAorICAgICAgICAgICAg ICAgIGlmIChpY3ApIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCppY3AgPT0gJ1xcJykgewor ICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBjLCAqYnA7CisgICAgICAgICAgICAgICAgICAg ICAgICBpbnQgbjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGMgPSAqKGljcCsxKTsKKyAgICAg ICAgICAgICAgICAgICAgICAgIGlmIChpc3VwcGVyKGMpKSBjID0gdG9sb3dlcihjKTsKKyAgICAg ICAgICAgICAgICAgICAgICAgIGlmIChjID09ICd2JyB8fCBjID09ICdmJykgeworICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG4gPSAzMjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBi cCA9IGJ1ZjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB6enN0cmluZyhpY3AsJmJwLCZu KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY3AgPSBidWY7CisgICAgICAgICAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9Cisj ZW5kaWYgLyogTk9TUEwgKi8KKyAgICAgICAgICAgICAgICBwID0gKHByZWZpeCAmJiBpY3ApID8g aWNwIDogIiI7CisgICAgICAgICAgICAgICAgY2ttYWttc2cob3V0YnVmLDI1NixucHIscCxzLHNm eCk7CisgICAgICAgICAgICAgICAgLyogRW5kIDEgRGVjIDIwMDEuLi4gKi8KKworICAgICAgICAg ICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgIC8qIE5vdCBQQlggaW50ZXJuYWwgKi8KKwor ICAgICAgICAgICAgICAgIGRuX3hba10gPSBETl9MT0NBTDsKKyAgICAgICAgICAgICAgICBwID0g KHByZWZpeCAmJiBkaWFsbGNwKSA/IGRpYWxsY3AgOiAiIjsKKyAgICAgICAgICAgICAgICBwMiA9 IChzdWZmaXggJiYgZGlhbGxjcykgPyBkaWFsbGNzIDogIiI7CisgICAgICAgICAgICAgICAgcyA9 IChjaGFyICopICh4YnVmICsgKCh4ID09IDApID8gbiA6IChpbnQpc3RybGVuKGRpYWxsY2MpKSk7 CisgICAgICAgICAgICAgICAgY2ttYWt4bXNnKG91dGJ1ZiwyNTYsCisgICAgICAgICAgICAgICAg ICAgICAgICAgIHB4byxucHIscCxzLHAyLHNmeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg TlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwpOworICAgICAgICAgICAgICAgIGNrbWFrbXNn KHBkc2Z4LDY0LHAyLHNmeCxOVUxMLE5VTEwpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVs c2UgeyAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vdCBsb2NhbCAqLworICAgICAgICAgICAg biA9IGNrc3RybmNweSh5YnVmLGRpYWxsY2MsMjU2KTsKKyAgICAgICAgICAgIGlmIChuID4gMCAm JiAhY2tzdHJjbXAoeGJ1Zix5YnVmLG4sMCkpIHsgLyogTG9uZyBkaXN0YW5jZSAqLworICAgICAg ICAgICAgICAgIGRuX3hba10gPSBETl9MT05HOworICAgICAgICAgICAgICAgIHAgPSAocHJlZml4 ICYmIGRpYWxsZHApID8gZGlhbGxkcCA6ICIiOworICAgICAgICAgICAgICAgIHAyID0gKHN1ZmZp eCAmJiBkaWFsbGRzKSA/IGRpYWxsZHMgOiAiIjsKKyAgICAgICAgICAgICAgICBzID0geGJ1ZiAr IG47CisgICAgICAgICAgICAgICAgd2hpbGUgKCpzID09ICctJyB8fCAqcyA9PSAnLicpCisgICAg ICAgICAgICAgICAgICBzKys7CisjaWZkZWYgQ09NTUVOVAorICAgICAgICAgICAgICAgIHNwcmlu dGYob3V0YnVmLCIlcyVzJXMlcyVzJXMiLHB4byxucHIscCxzLHAyLHNmeCk7CisgICAgICAgICAg ICAgICAgc3ByaW50ZihwZHNmeCwiJXMlcyIscDIsc2Z4KTsKKyNlbHNlCisgICAgICAgICAgICAg ICAgY2ttYWt4bXNnKG91dGJ1ZiwyNTYsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHB4byxu cHIscCxzLHAyLHNmeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLE5VTEwsTlVMTCxO VUxMLE5VTEwsTlVMTCk7CisgICAgICAgICAgICAgICAgY2ttYWttc2cocGRzZngsNjQscDIsc2Z4 LE5VTEwsTlVMTCk7CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAgICAgICAgfSBlbHNlIHsK KyAgICAgICAgICAgICAgICBkbl94W2tdID0gRE5fSU5UTDsgICAgICAvKiBJbnRlcm5hdGlvbmFs ICovCisgICAgICAgICAgICAgICAgaWYgKCFkaWFsaXhwKSB7CisgICAgICAgICAgICAgICAgICAg IGlmIChjeCAhPSBYWExPT0spIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgIkVycm9yIC0gTm8gaW50ZXJuYXRpb25hbCBkaWFsaW5n IHByZWZpeCBkZWZpbmVkXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAg ICAgICAgICAgICAgICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcCA9IChwcmVmaXggJiYgZGlhbGl4 cCkgPyBkaWFsaXhwIDogIiI7CisgICAgICAgICAgICAgICAgcDIgPSAoc3VmZml4ICYmIGRpYWxp eHMpID8gZGlhbGl4cyA6ICIiOworI2lmZGVmIENPTU1FTlQKKyAgICAgICAgICAgICAgICBzcHJp bnRmKG91dGJ1ZiwiJXMlcyVzJXMlcyVzIixweG8sbnByLHAseGJ1ZixwMixzZngpOworICAgICAg ICAgICAgICAgIHNwcmludGYocGRzZngsIiVzJXMiLHAyLHNmeCk7CisjZWxzZQorICAgICAgICAg ICAgICAgIGNrbWFreG1zZyhvdXRidWYsMjU2LAorICAgICAgICAgICAgICAgICAgICAgICAgICBw eG8sbnByLHAseGJ1ZixwMixzZngsCisgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsTlVM TCxOVUxMLE5VTEwsTlVMTCxOVUxMKTsKKyAgICAgICAgICAgICAgICBja21ha21zZyhwZHNmeCw2 NCxwMixzZngsTlVMTCxOVUxMKTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgICAgICAgICB9 CisgICAgICAgIH0KKyAgICB9CisjaWZkZWYgQ0tfVEFQSQorICAgIGlmICh0dHRhcGkgJiYgICAg ICAgICAgICAgICAgICAgICAgIC8qIFRBUEkgcGVyZm9ybXMgdGhlIGNvbnZlcnNpb25zICovCisg ICAgICAgICF0YXBpcGFzcyAmJgorICAgICAgICB0YXBpY29udiA9PSBDS19BVVRPIHx8CisgICAg ICAgIHRhcGljb252ID09IENLX09OCisgICAgICAgICkgeworICAgICAgICBwID0gTlVMTDsKKyAg ICAgICAgZGlhbHR5cGUgPSAtMjsKKyAgICAgICAgaWYgKCFja3RhcGlDb252ZXJ0UGhvbmVOdW1i ZXIoZG5fcFtrXSwmcCkpCisgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgbWFrZXN0cigm ZG5fcDJba10sIHApOworICAgICAgICBpZiAocCkgZnJlZShwKTsKKyAgICAgICAgcmV0dXJuKDAp OworICAgIH0gZWxzZSB7CisjZW5kaWYgLyogQ0tfVEFQSSAqLworICAgICAgICBtYWtlc3RyKCZk bl9wMltrXSwgb3V0YnVmKTsKKyNpZmRlZiBDS19UQVBJCisgICAgfQorI2VuZGlmIC8qIENLX1RB UEkgKi8KKyAgICBkaWFsdHlwZSA9IHdoYXQ7CisgICAgcmV0dXJuKDApOworfQorCitzdGF0aWMg aW50CitkZGN2dChzLCBmLCBuKSBjaGFyICogczsgRklMRSAqIGY7IGludCBuOyB7IC8qIERpYWwg RGlyZWN0b3J5IENvbnZlcnQgKi8KKyAgICBjaGFyIGxpbmVidWZbMTAyNF0sICpzMjsgICAgICAg ICAgICAvKiBCdWZmZXJzIGFuZCBwb2ludGVycyAqLworI2lmZGVmIFZNUworICAgIGNoYXIgKiB0 ZW1wID0gTlVMTDsKKyNlbmRpZiAvKiBWTVMgKi8KKyAgICBjaGFyICppbmZvWzhdOyAgICAgICAg ICAgICAgICAgICAgICAvKiBQb2ludGVycyB0byB3b3JkcyBmcm9tIGVudHJ5ICovCisgICAgRklM RSAqIGYyID0gTlVMTDsKKyAgICBpbnQgeCwgcmM7CisgICAgcmMgPSAtMTsKKworICAgIGRlYnVn KEYxMTAsImRkY3Z0IGZpbGUiLHMsMCk7CisKKyAgICBpZiAoIXMgfHwgIWYpICAgICAgICAgICAg ICAgICAgICAgICAvKiBObyBmaWxlbmFtZSBvciBmaWxlICovCisgICAgICByZXR1cm4oLTEpOwor ICAgIGlmICghKnMpCisKKyAgICBmY2xvc2UoZik7CisgICAgem5ld24ocywmczIpOyAgICAgICAg ICAgICAgICAgICAgICAgLyogczIgPSBhZGRyZXNzIG9mIHN0YXRpYyBidWZmZXIgKi8KKyAgICBk ZWJ1ZyhGMTEwLCJkZGN2dCBuZXduYW1lIixzMiwwKTsKKworI2lmZGVmIFZNUworICAgIC8qIElu IFZNUywgem5ld24oKSByZXR1cm5zIHRoZSBzYW1lIGZpbGUgbmFtZSB3aXRoIGEgbmV3IHZlcnNp b24gbnVtYmVyICovCisgICAgbWFrZXN0cigmdGVtcCxzKTsgICAgICAgICAgICAgICAgICAgLyog U3dhcCAtIG90aGVyd2lzZSB0aGUgbmV3ICovCisgICAgcyA9IHMyOyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogdmVyc2lvbiBoYXMgdGhlIG9sZGVyIHZlcnNpb24gKi8KKyAgICBzMiA9 IHRlbXA7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBudW1iZXIuLi4gKi8KKyAgICBkZWJ1 ZyhGMTEwLCJkZGN2dCBhZnRlciBzd2FwIHMiLHMsMCk7CisgICAgZGVidWcoRjExMCwiZGRjdnQg YWZ0ZXIgc3dhcCBzMiIsczIsMCk7CisgICAgbWFrZXN0cigmKGRpYWxkaXJbbl0pLHMpOyAgICAg ICAgICAgLyogTmV3IGZpbGUgZ2V0cyBuZXcgdmVyc2lvbiBudW1iZXIgKi8KKyAgICBkZWJ1ZyhG MTEwLCJkZGN2dCBhZnRlciBtYWtlc3RyIHMyIixzMiwwKTsKKyAgICBkZWJ1ZyhGMTExLCJkZGN2 dCBkaWFsZGlyW25dIixkaWFsZGlyW25dLG4pOworI2Vsc2UKKyAgICBpZiAoenJlbmFtZShzLHMy KSA8IDApIHsgICAgICAgICAgICAvKiBOb3QgVk1TIC0gcmVuYW1lIG9sZCBmaWxlICovCisgICAg ICAgIHBlcnJvcihzMik7ICAgICAgICAgICAgICAgICAgICAgLyogdG8gbmV3ICh3aWVyZCkgbmFt ZS4gKi8KKyAgICAgICAgZ290byBkZGV4aXQ7CisgICAgfQorI2VuZGlmIC8qIFZNUyAqLworICAg IGRlYnVnKEYxMTAsImRkY3Z0IHMyIChvbGQpIixzMiwwKTsKKyAgICBpZiAoKGYgPSBmb3Blbihz MiwiciIpKSA9PSBOVUxMKSB7ICAvKiBSZW9wZW4gb2xkIGZpbGUgd2l0aCB3aWVyZCBuYW1lICov CisgICAgICAgIGRlYnVnKEYxMTAsImRkY3Z0IHMyIG9wZW4gZXJyb3IiLGNrX2VycnN0cigpLDAp OworICAgICAgICBkaXJsaW5lID0gMDsgICAgICAgICAgICAgICAgICAgIC8qIChvciBpbiBWTVMs IG9sZCB2ZXJzaW9uKSAqLworICAgICAgICBwZXJyb3IoczIpOworICAgICAgICBnb3RvIGRkZXhp dDsKKyAgICB9CisgICAgZGVidWcoRjExMCwiZGRjdnQgZm9wZW4oczIpIE9LIixzMiwwKTsKKwor ICAgIGRlYnVnKEYxMTAsImRkY3Z0IHMgKG5ldykiLHMsMCk7CisgICAgaWYgKChmMiA9IGZvcGVu KHMsInciKSkgPT0gTlVMTCkgeyAgLyogQ3JlYXRlIG5ldyBmaWxlIHdpdGggb2xkIG5hbWUgKi8K KyAgICAgICAgZGVidWcoRjExMCwiZGRjdnQgcyBvcGVuIGVycm9yIixja19lcnJzdHIoKSwwKTsK KyAgICAgICAgcGVycm9yKHMpOyAgICAgICAgICAgICAgICAgICAgICAvKiAob3IgaW4gVk1TLCBu ZXcgdmVyc2lvbikgKi8KKyAgICAgICAgZ290byBkZGV4aXQ7CisgICAgfQorICAgIGRlYnVnKEYx MTAsImRkY3Z0IGZvcGVuKHMpIE9LIixzLDApOworCisgICAgcHJpbnRmKCJcblNhdmluZyBvbGQg ZGlyZWN0b3J5IGFzICVzLlxuQ29udmVydGluZyAlcy4uLiIsczIscyk7CisgICAgZnByaW50Zihm MiwiOyAlcyAtIEtlcm1pdCBkaWFsaW5nIGRpcmVjdG9yeVxuIiwgcyk7CisgICAgZnByaW50Zihm MiwiJS0xNnMgJS0yMHMgOyAlNXMgJS02cyA7ICVzXG4iLAorICAgICAgICAgICAgICAgIjsgTmFt ZSIsIk51bWJlciIsIlNwZWVkIiwiUGFyaXR5IiwiQ29tbWVudCIKKyAgICAgICAgICAgICAgICk7 CisKKyAgICB3aGlsZSAoMSkgeworICAgICAgICBsaW5lYnVmWzBdID0gTlVMOyAgICAgICAgICAg ICAgIC8qIFJlYWQgYSBsaW5lICovCisgICAgICAgIGlmIChmZ2V0cyhsaW5lYnVmLDEwMjMsZikg PT0gTlVMTCkKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVidWcoRjExMCwiZGRjdnQgbGlu ZWJ1ZiIsbGluZWJ1ZiwwKTsKKyAgICAgICAgaWYgKCFsaW5lYnVmWzBdKSB7ICAgICAgICAgICAg ICAvKiBFbXB0eSBsaW5lICovCisgICAgICAgICAgICBmcHJpbnRmKGYyLCJcbiIpOworICAgICAg ICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgeCA9IChpbnQpIHN0cmxlbihsaW5l YnVmKTsgICAgICAvKiBTdHJpcCBsaW5lIHRlcm1pbmF0b3IsICovCisgICAgICAgIHdoaWxlICh4 LS0gPiAwKSB7ICAgICAgICAgICAgICAgLyogaWYgYW55LiAqLworICAgICAgICAgICAgaWYgKGxp bmVidWZbeF0gPD0gU1ApCisgICAgICAgICAgICAgIGxpbmVidWZbeF0gPSBOVUw7CisgICAgICAg ICAgICBlbHNlCisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHh3b3Jk cyhsaW5lYnVmLDUsaW5mbywxKTsgICAgICAgLyogUGFyc2UgaXQgdGhlIG9sZCB3YXkgKi8KKyAg ICAgICAgZm9yICh4ID0gMTsgeCA8IDY7IHgrKykKKyAgICAgICAgICBpZiAoIWluZm9beF0pIGlu Zm9beF0gPSAiIjsKKyAgICAgICAgZnByaW50ZihmMiwiJS0xNnMgJS0yMHMgOyAlNXMgJS02cyAl c1xuIiwKKyAgICAgICAgICAgICAgIGluZm9bMV0saW5mb1syXSxpbmZvWzNdLGluZm9bNF0saW5m b1s1XQorICAgICAgICAgICAgICAgKTsKKyAgICB9CisgICAgcHJpbnRmKCIgT0tcblxuIik7Cisg ICAgcmMgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU3VjY2VzcyAqLworICBk ZGV4aXQ6CisgICAgaWYgKGYpIGZjbG9zZShmKTsKKyAgICBpZiAoZjIpIGZjbG9zZShmMik7Cisj aWZkZWYgVk1TCisgICAgaWYgKHRlbXApIGZyZWUodGVtcCk7CisjZW5kaWYgLyogVk1TICovCisg ICAgcmV0dXJuKHJjKTsKK30KKworaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIHMgPSBuYW1lIHRvIGxvb2sgdXAgICAqLworI2lmZGVmIENLX0FOU0lDICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIGN4ID0gaW5kZXggb2YgY29tbWFuZCAqLworbHVkaWFsKGNoYXIg KnMsIGludCBjeCkgICAgICAgICAgICAgICAgIC8qIChESUFMLCBMT09LVVAsIGV0YykgICAqLwor I2Vsc2UKK2x1ZGlhbChzLCBjeCkgY2hhciAqczsgaW50IGN4OworI2VuZGlmIC8qIENLX0FOU0lD ICovCisvKiBsdWRpYWwgKi8geworCisgICAgaW50IGRkLCBuMSwgbjIsIG4zLCBpLCBqLCB0OyAg ICAgICAgLyogV29ya2VycyAqLworICAgIGludCBvbGRkaXIsIG5ld2Rpciwgb2xkZW50cnksIG5l d2VudHJ5OworICAgIGludCBwYXNzID0gMDsKKyAgICBpbnQgb2xkZmxnID0gMDsKKyAgICBpbnQg YW1iaWd1b3VzID0gMDsgICAgICAgICAgICAgICAgICAvKiBGbGFnIGZvciBsb29rdXAgd2FzIGFt YmlndW91cyAqLworICAgIGNoYXIgKmluZm9bN107ICAgICAgICAgICAgICAgICAgICAgIC8qIFBv aW50ZXJzIHRvIHdvcmRzIGZyb20gZW50cnkgKi8KKyAgICBjaGFyICpwcDsgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBQb2ludGVyIHRvIGVsZW1lbnQgb2YgYXJyYXkgKi8KKyAgICBGSUxF ICogZjsKKyAgICBjaGFyICpsaW5lOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGaWxlIGlu cHV0IGJ1ZmZlciAqLworCisvKiAjZGVmaW5lIExVREVCVUcgKi8KKworI2lmZGVmIExVREVCVUcK K2ludCB6eiA9IDE7CisjZW5kaWYgLyogTFVERUJVRyAqLworCisgICAgaWYgKCFzIHx8IG5kaWFs ZGlyIDwgMSkgICAgICAgICAgICAgLyogVmFsaWRhdGUgYXJndW1lbnRzICovCisgICAgICByZXR1 cm4oLTEpOworCisgICAgaWYgKChuMSA9IChpbnQpIHN0cmxlbihzKSkgPCAxKSAgICAgLyogTGVu Z3RoIG9mIHN0cmluZyB0byBsb29rIHVwICovCisgICAgICByZXR1cm4oLTEpOworCisgICAgaWYg KCEobGluZSA9IG1hbGxvYygxMDI0KSkpICAgICAgICAgLyogQWxsb2NhdGUgaW5wdXQgYnVmZmVy ICovCisgICAgICByZXR1cm4oLTEpOworCisjaWZkZWYgTFVERUJVRworaWYgKHp6KSBwcmludGYo IkxVRElBTCAxIHNbJXNdLCBuMT0lZFxuIixzLG4xKTsKKyNlbmRpZiAvKiBMVURFQlVHICovCisK KyAgICBwYXNzID0gMDsKKyAgbHVfYWdhaW46CisgICAgZiA9IE5VTEw7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogRGlhbCBkaXJlY3RvcnkgZmlsZSBkZXNjcmlwdG9yICovCisgICAgdCA9 IGRuY291bnQgPSAwOyAgICAgICAgICAgICAgICAgICAgLyogRGlhbC1udW1iZXIgbWF0Y2ggY291 bnQgKi8KKyAgICBkZCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEaXJlY3Rv cnkgY291bnRlciAqLworICAgIG9sZGRpciA9IDA7CisgICAgbmV3ZGlyID0gMDsKKy8qCisgIFdl IG5lZWQgdG8gcmVjb2duaXplIGJvdGggb2xkLSBhbmQgbmV3LXN0eWxlIGRpcmVjdG9yaWVzLgor ICBCdXQgd2UgY2FuJ3QgYWxsb3cgb2xkLXN0eWxlIGFuZCBuZXctc3R5bGUgZW50cmllcyBpbiB0 aGUgc2FtZQorICBkaXJlY3RvcnkgYmVjYXVzZSB0aGVyZSBpcyBubyB3YXkgdG8gdGVsbCBmb3Ig c3VyZSB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuCisgIGFuIG9sZC1zdHlsZSBlbnRyeSBsaWtlIHRo aXM6CisKKyAgICBmb28gIDU1NTEyMTIgIDk2MDAKKworICBhbmQgYSBuZXctc3R5bGUgbGl0ZXJh bCBlbnRyeSBsaWtlIHRoaXM6CisKKyAgICBmb28gIDU1NSA5NjAwCisKKyAgSS5lLiBpcyB0aGUg Ijk2MDAiIGEgc3BlZWQsIG9yIHBhcnQgb2YgdGhlIHBob25lIG51bWJlcj8KKyovCisgICAgd2hp bGUgKDEpIHsgICAgICAgICAgICAgICAgICAgICAgICAgLyogV2UgbWFrZSBvbmUgcGFzcyAqLwor ICAgICAgICBpZiAoIWYpIHsgICAgICAgICAgICAgICAgICAgICAgIC8qIERpcmVjdG9yeSBub3Qg b3BlbiAqLworICAgICAgICAgICAgaWYgKGRkID49IG5kaWFsZGlyKSAgICAgICAgIC8qIE5vIGRp cmVjdG9yaWVzIGxlZnQ/ICovCisgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAg ICAgLyogRG9uZS4gKi8KKyAgICAgICAgICAgIGRlYnVnKEYxMTEsImx1ZGlhbCBkaWFsZGlyW2Rk XSIsZGlhbGRpcltkZF0sZGQpOworICAgICAgICAgICAgaWYgKChmID0gZm9wZW4oZGlhbGRpcltk ZF0sInIiKSkgPT0gTlVMTCkgeyAvKiBPcGVuIGl0ICovCisgICAgICAgICAgICAgICAgcGVycm9y KGRpYWxkaXJbZGRdKTsgICAgLyogQ2FuJ3QsIHByaW50IG1lc3NhZ2Ugc2F5aW5nIHdoeSAqLwor ICAgICAgICAgICAgICAgIGlmIChsaW5lKSB7CisgICAgICAgICAgICAgICAgICAgIGZyZWUobGlu ZSk7CisgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBOVUxMOworICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgICBkZCsrOyAgICAgICAgICAgICAgICAgICAvKiBHbyBvbiB0byBuZXh0 IG9uZSwgaWYgYW55Li4uICovCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg ICB9CisgICAgICAgICAgICBkaXJsaW5lID0gMDsgICAgICAgICAgICAgICAgLyogRGlyZWN0b3J5 IGZpbGUgbGluZSBudW1iZXIgKi8KKyAgICAgICAgICAgIGlmIChkaWFsZHB5ICYmICFwYXNzKQor ICAgICAgICAgICAgICBwcmludGYoIk9wZW5pbmc6ICVzLi4uXG4iLGRpYWxkaXJbZGRdKTsKKyAg ICAgICAgICAgIGRkKys7CisgICAgICAgICAgICBpZiAoIW9sZGZsZykgb2xkZGlyID0gMDsKKyAg ICAgICAgICAgIG5ld2RpciA9IDA7CisgICAgICAgIH0KKyAgICAgICAgb2xkZW50cnkgPSAwOwor ICAgICAgICBuZXdlbnRyeSA9IDA7CisgICAgICAgIGxpbmVbMF0gPSBOVUw7CisgICAgICAgIGlm IChnZXRuY3QobGluZSwxMDIzLGYsMSkgPCAwKSB7IC8qIFJlYWQgYSBsaW5lICovCisgICAgICAg ICAgICBpZiAoZikgeyAgICAgICAgICAgICAgICAgICAgLyogZiBjYW4gYmUgY2xvYmJlcmVkISAq LworICAgICAgICAgICAgICAgIGZjbG9zZShmKTsgICAgICAgICAgICAgIC8qIENsb3NlIHRoZSBm aWxlICovCisgICAgICAgICAgICAgICAgZiA9IE5VTEw7ICAgICAgICAgICAgICAgLyogSW5kaWNh dGUgbmV4dCBvbmUgbmVlZHMgb3BlbmluZyAqLworICAgICAgICAgICAgICAgIG9sZGZsZyA9IDA7 CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAg ICBpZiAoIWxpbmVbMF0pICAgICAgICAgICAgICAgICAgIC8qIEVtcHR5IGxpbmUgKi8KKyAgICAg ICAgICBjb250aW51ZTsKKyNpZmRlZiBMVURFQlVHCitpZiAoenopIHByaW50ZigiTFVESUFMIDIg c1slc11cbiIscyk7CisjZW5kaWYgLyogTFVERUJVRyAqLworCisgICAgICAgIC8qIE1ha2UgYSBj b3B5IGFuZCBwYXJzZSBpdCB0aGUgb2xkIHdheSAqLworICAgICAgICAvKiBBIGNvcHkgaXMgbmVl ZGVkIGJlY2F1c2UgeHdvcmRzKCkgcG9rZXMgTlVMcyBpbnRvIHRoZSBzdHJpbmcgKi8KKworICAg ICAgICBpZiAoKHBwID0gbWFsbG9jKChpbnQpc3RybGVuKGxpbmUpICsgMSkpKSB7CisgICAgICAg ICAgICBzdHJjcHkocHAsbGluZSk7ICAgICAgICAgICAgLyogc2FmZSAqLworICAgICAgICAgICAg eHdvcmRzKHBwLDUsaW5mbywwKTsgICAgICAgIC8qIFBhcnNlIGl0IHRoZSBvbGQgd2F5ICovCisK KyNpZmRlZiBMVURFQlVHCitpZiAoenopIHByaW50ZigiTFVESUFMIDMgc1slc11cbiIscyk7Cisj ZW5kaWYgLyogTFVERUJVRyAqLworCisgICAgICAgICAgICBpZiAoIWluZm9bMV0pCisgICAgICAg ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKCppbmZvWzFdID09ICc7JykgeyAgICAg IC8qIElmIGZ1bGwtbGluZSBjb21tZW50LCAqLworICAgICAgICAgICAgICAgIG5ld2RpciA9IDE7 ICAgICAgICAgICAgIC8qIChvbmx5IG5ldyBkaXJlY3RvcmllcyBoYXZlIHRoZW0pICovCisgICAg ICAgICAgICAgICAgY29udGludWU7ICAgICAgICAgICAgICAgLyoga2VlcCByZWFkaW5nLiAqLwor ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFpbmZvWzJdKQorICAgICAgICAgICAgICBj b250aW51ZTsKKyAgICAgICAgICAgIGlmICgqaW5mb1syXSA9PSAnKycpCisgICAgICAgICAgICAg IG5ld2VudHJ5ID0gMTsKKyAgICAgICAgICAgIGlmIChpbmZvWzRdKSB7CisgICAgICAgICAgICAg ICAgaWYgKCgqaW5mb1s0XSA9PSAnPScpIHx8CisgICAgICAgICAgICAgICAgICAgICFja3N0cmNt cChpbmZvWzRdLCJub25lIiwgNCwwKSB8fAorICAgICAgICAgICAgICAgICAgICAhY2tzdHJjbXAo aW5mb1s0XSwiZXZlbiIsIDQsMCkgfHwKKyAgICAgICAgICAgICAgICAgICAgIWNrc3RyY21wKGlu Zm9bNF0sInNwYWNlIiw1LDApIHx8CisgICAgICAgICAgICAgICAgICAgICFja3N0cmNtcChpbmZv WzRdLCJtYXJrIiwgNCwwKSB8fAorICAgICAgICAgICAgICAgICAgICAhY2tzdHJjbXAoaW5mb1s0 XSwib2RkIiwgIDMsMCkKKyAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgICAg b2xkZW50cnkgPSAxOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChwcCkg eworICAgICAgICAgICAgZnJlZShwcCk7CisgICAgICAgICAgICBwcCA9IE5VTEw7CisgICAgICAg IH0KKworICAgICAgICAvKiBDaGVjayBjb25zaXN0ZW5jeSAqLworCisgICAgICAgIGlmICgob2xk ZW50cnkgfHwgb2xkZGlyKSAmJiAobmV3ZW50cnkgfHwgbmV3ZGlyKSkgeworICAgICAgICAgICAg cHJpbnRmKAorIlxuRVJST1I6IFlvdSBzZWVtIHRvIGhhdmUgb2xkLSBhbmQgbmV3LWZvcm1hdCBl bnRyaWVzIG1peGVkIGluIHlvdXJcbiIpOworICAgICAgICAgICAgcHJpbnRmKAorImRpYWxpbmcg ZGlyZWN0b3J5LiAgWW91J2xsIGhhdmUgdG8gZWRpdCBpdCBieSBoYW5kIHRvIGNvbnZlcnQgaXQg dG8gdGhlXG4iKTsKKyNpZm5kZWYgTk9IRUxQCisgICAgICAgICAgICBwcmludGYoIm5ldyBmb3Jt YXQuICBUeXBlIEhFTFAgRElBTCBmb3IgZnVydGhlciBpbmZvcm1hdGlvbi5cblxuIik7CisjZWxz ZQorICAgICAgICAgICAgcHJpbnRmKCJuZXcgZm9ybWF0LlxuXG4iKTsKKyNlbmRpZiAvKiBOT0hF TFAgKi8KKyAgICAgICAgICAgIGlmIChsaW5lKSB7CisgICAgICAgICAgICAgICAgZnJlZShsaW5l KTsKKyAgICAgICAgICAgICAgICBsaW5lID0gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIHJldHVybigtMSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFvbGRkaXIgJiYgb2xkZW50 cnkpIHsKKyAgICAgICAgICAgIGludCBjb252ZXJ0ID0gMDsKKyAgICAgICAgICAgIG9sZGRpciA9 IDE7CisgICAgICAgICAgICBpZiAoZGlhbGN2dCA9PSAyKSB7ICAgICAgICAgLyogMiA9PSBBU0sg Ki8KKyAgICAgICAgICAgICAgICBzcHJpbnRmKHRtcGJ1ZiwKKyJXQVJOSU5HOiBPbGQtc3R5bGUg ZGlhbGluZyBkaXJlY3RvcnkgZGV0ZWN0ZWQ6XG4lcyIsIGxpbmUpOworCQljb252ZXJ0ID0gdXFf b2sodG1wYnVmLAorCQkJCSJTaGFsbCBJIGNvbnZlcnQgaXQgZm9yIHlvdT8gIiwzLE5VTEwsMCk7 CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgY29udmVydCA9IGRpYWxjdnQ7Cisg ICAgICAgICAgICBpZiAoY29udmVydCkgeworICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsImx1 ZGlhbCBjYWxsaW5nIGRkY3Z0IixkaWFsZGlyW2RkLTFdLGRkKTsKKyAgICAgICAgICAgICAgICBp ZiAoZGRjdnQoZGlhbGRpcltkZC0xXSxmLGRkLTEpIDwgMCkgeworICAgICAgICAgICAgICAgICAg ICBkZWJ1ZyhGMTExLCJsdWRpYWwgZGRjdnQgZmFpbGVkIixkaWFsZGlyW2RkLTFdLGRkKTsKKyAg ICAgICAgICAgICAgICAgICAgb2xkZmxnID0gMTsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRm KAorIiAgU29ycnksIGNhbid0IGNvbnZlcnQuIik7CisgICAgICAgICAgICAgICAgICAgIHByaW50 ZigKKyIgIFdpbGwgaWdub3JlIHNwZWVkIGFuZCBwYXJpdHkgZmllbGRzLCBjb250aW51aW5nLi4u XG5cbiIpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIG9s ZGRpciA9IG5ld2RpciA9IDA7CisgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsImx1ZGlh bCBkZGN2dCBvayIsZGlhbGRpcltkZC0xXSxkZCk7CisgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICAgIGRkLS07CisgICAgICAgICAgICAgICAgZiA9IE5VTEw7CisgICAgICAgICAgICAg ICAgY29udGludWU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChk aWFsY3Z0ID09IDIpCisgICAgICAgICAgICAgICAgICBwcmludGYoCisiICBPSywgd2lsbCBpZ25v cmUgc3BlZWQgYW5kIHBhcml0eSBmaWVsZHMsIGNvbnRpbnVpbmcuLi5cblxuIik7CisgICAgICAg ICAgICAgICAgb2xkZGlyID0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisjaWZkZWYg TFVERUJVRworaWYgKHp6KSBwcmludGYoIkxVRElBTCBYWCBzWyVzXSwgbjE9JWRcbiIscyxuMSk7 CisjZW5kaWYgLyogTFVERUJVRyAqLworCisgICAgICAgIC8qIE5vdyBwYXJzZSBhZ2FpbiBmb3Ig cmVhbCAqLworCisgICAgICAgIGlmIChvbGRlbnRyeSkgICAgICAgICAgICAgICAgICAgLyogUGFy c2UgaXQgdGhlIG9sZCB3YXkgKi8KKyAgICAgICAgICB4d29yZHMobGluZSw1LGluZm8sMCk7Cisg ICAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUGFyc2UgaXQgdGhlIG5l dyB3YXkgKi8KKyAgICAgICAgICB4d29yZHMobGluZSwyLGluZm8sMSk7CisKKyNpZmRlZiBMVURF QlVHCitpZiAoenopIHByaW50ZigiTFVESUFMIFlZIHNbJXNdLCBuMT0lZFxuIixzLG4xKTsKK2lm ICh6eikgcHJpbnRmKCIlcyBbJXNdXG4iLGluZm9bMV0saW5mb1syXSk7CisjZW5kaWYgLyogTFVE RUJVRyAqLworCisgICAgICAgIGlmIChpbmZvWzFdKSB7ICAgICAgICAgICAgICAgICAgLyogRmly c3Qgd29yZCBpcyBlbnRyeSBuYW1lICovCisgICAgICAgICAgICBpZiAoKG4zID0gKGludCkgc3Ry bGVuKGluZm9bMV0pKSA8IDEpIC8qIEl0cyBsZW5ndGggKi8KKyAgICAgICAgICAgICAgY29udGlu dWU7ICAgICAgICAgICAgICAgICAvKiBJZiBubyBmaXJzdCB3b3JkLCBrZWVwIHJlYWRpbmcuICov CisgICAgICAgICAgICBpZiAobjMgPCBuMSkgICAgICAgICAgICAgICAgLyogU2VhcmNoIG5hbWUg aXMgbG9uZ2VyICovCisgICAgICAgICAgICAgIGNvbnRpbnVlOyAgICAgICAgICAgICAgICAgLyog Q2FuJ3QgcG9zc2libHkgbWF0Y2ggKi8KKyAgICAgICAgICAgIGlmIChhbWJpZ3VvdXMgJiYgbjMg IT0gbjEpCisgICAgICAgICAgICAgIGNvbnRpbnVlOworCisjaWZkZWYgTFVERUJVRworaWYgKHp6 KSBwcmludGYoIk1BVENISU5HOiBbJXNdIFslc10sIG4xPSVkXG4iLHMsaW5mb1sxXSxuMSk7Cisj ZW5kaWYgLyogTFVERUJVRyAqLworCisgICAgICAgICAgICBpZiAoY2tzdHJjbXAocyxpbmZvWzFd LG4xLDApKSAvKiBDYXNlbGVzcyBzdHJpbmcgY29tcGFyaXNvbiAqLworICAgICAgICAgICAgICBj b250aW51ZTsKKworI2lmZGVmIExVREVCVUcKK2lmICh6eikgcHJpbnRmKCJNQVRDSCBPSzogWyVz XSBbJXNdLCBuMT0lZFxuIixzLGluZm9bMV0sbjEpOworI2VuZGlmIC8qIExVREVCVUcgKi8KKwor ICAgICAgICAgICAgaWYgKCFpbmZvWzJdKSAgICAgICAgICAgICAgIC8qIE5vIHBob25lIG51bWJl ciBnaXZlbiAqLworICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmICgobjIg PSAoaW50KSBzdHJsZW4oaW5mb1syXSkpIDwgMSkgLyogTGVuZ3RoIG9mIHBob25lIG51bWJlciAq LworICAgICAgICAgICAgICBjb250aW51ZTsgICAgICAgICAgICAgICAgIC8qIElnbm9yZSBlbXB0 eSBwaG9uZSBudW1iZXJzICovCisKKyAgICAgICAgICAgIC8qIEdvdCBvbmUgKi8KKworICAgICAg ICAgICAgaWYgKCEocHAgPSAoY2hhciAqKW1hbGxvYyhuMiArIDEpKSkgeyAvKiBBbGxvY2F0ZSBz dG9yYWdlIGZvciBpdCAqLworICAgICAgICAgICAgICAgIHByaW50ZigiP2ludGVybmFsIGVycm9y IC0gbHVkaWFsIG1hbGxvYyAxXG4iKTsKKyAgICAgICAgICAgICAgICBpZiAobGluZSkgeworICAg ICAgICAgICAgICAgICAgICBmcmVlKGxpbmUpOworICAgICAgICAgICAgICAgICAgICBsaW5lID0g TlVMTDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZG5jb3VudCA9IDA7Cisg ICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN0 cmNweShwcCxpbmZvWzJdKTsgICAgICAgICAvKiBzYWZlICovCisKKyAgICAgICAgICAgIGlmIChk bmNvdW50ID4gTUFYRE5VTVMpIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIldhcm5pbmc6ICVk IG1hdGNoZXMgZm91bmQsICVkIG1heFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgZG5jb3Vu dCwKKyAgICAgICAgICAgICAgICAgICAgICAgTUFYRE5VTVMKKyAgICAgICAgICAgICAgICAgICAg ICAgKTsKKyAgICAgICAgICAgICAgICBkbmNvdW50ID0gTUFYRE5VTVM7CisgICAgICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkbl9wW2RuY291bnQrK10gPSBw cDsgICAgICAgLyogQWRkIHBvaW50ZXIgdG8gYXJyYXkuICovCisgICAgICAgICAgICBpZiAoZG5j b3VudCA9PSAxKSB7ICAgICAgICAgLyogRmlyc3Qgb25lLi4uICovCisgICAgICAgICAgICAgICAg aWYgKGRfbmFtZSkgZnJlZShkX25hbWUpOworICAgICAgICAgICAgICAgIGlmICghKGRfbmFtZSA9 IChjaGFyICopbWFsbG9jKG4zICsgMSkpKSB7IC8qIFNhdmUgaXRzIG5hbWUgKi8KKyAgICAgICAg ICAgICAgICAgICAgcHJpbnRmKCI/aW50ZXJuYWwgZXJyb3IgLSBsdWRpYWwgbWFsbG9jIDJcbiIp OworICAgICAgICAgICAgICAgICAgICBpZiAobGluZSkgeworICAgICAgICAgICAgICAgICAgICAg ICAgZnJlZShsaW5lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBOVUxMOworICAg ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGRuY291bnQgPSAwOworICAg ICAgICAgICAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgICAgICB0ID0gbjM7ICAgICAgICAgICAgICAgICAvKiBBbmQgaXRzIGxlbmd0aCAqLworICAg ICAgICAgICAgICAgIHN0cmNweShkX25hbWUsaW5mb1sxXSk7IC8qIHNhZmUgKi8KKyAgICAgICAg ICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAvKiBTZWNvbmQgb3Igc3Vic2VxdWVudCBv bmUgKi8KKworI2lmZGVmIExVREVCVUcKKyAgICAgICAgICAgICAgICBpZiAoenopCisgICAgICAg ICAgICAgICAgICBwcmludGYoImRfbmFtZT1bJXNdLGluZm9bMV09JXMsdD1bJWRdXG4iLGRfbmFt ZSxpbmZvWzFdLHQpOworI2VuZGlmIC8qIExVREVCVUcgKi8KKworICAgICAgICAgICAgICAgIGlm ICgoaW50KSBzdHJsZW4oaW5mb1sxXSkgPT0gdCkgLyogTGVuZ3RocyBjb21wYXJlICovCisgICAg ICAgICAgICAgICAgICBpZiAoIWNrc3RyY21wKGRfbmFtZSxpbmZvWzFdLHQsMCkpIC8qIENhc2Vs ZXNzIGNvbXBhcmUgT0sgKi8KKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAg ICAgICAgICAgICAvKiBOYW1lIGdpdmVuIGJ5IHVzZXIgbWF0Y2hlcyBlbnRyaWVzIHdpdGggZGlm ZmVyZW50IG5hbWVzICovCisKKyAgICAgICAgICAgICAgICBpZiAoYW1iaWd1b3VzKSAgICAgICAg ICAvKiBCZWVuIGhlcmUgYmVmb3JlICovCisgICAgICAgICAgICAgICAgICBicmVhazsKKworICAg ICAgICAgICAgICAgIGFtYmlndW91cyA9IDE7ICAgICAgICAgIC8qIE5vdyBhbiBleGFjdCBtYXRj aCBpcyByZXF1aXJlZCAqLworICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBkbmNvdW50 OyBqKyspIHsgLyogQ2xlYW4gb3V0IHByZXZpb3VzIGxpc3QgKi8KKyAgICAgICAgICAgICAgICAg ICAgaWYgKGRuX3Bbal0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZyZWUoZG5fcFtqXSk7 CisgICAgICAgICAgICAgICAgICAgICAgICBkbl9wW2pdID0gTlVMTDsKKyAgICAgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwYXNzKys7ICAgICAg ICAgICAgICAgICAvKiBTZWNvbmQgcGFzcy4uLiAqLworICAgICAgICAgICAgICAgIGdvdG8gbHVf YWdhaW47ICAgICAgICAgIC8qIERvIGl0IGFsbCBvdmVyIGFnYWluLiAqLworICAgICAgICAgICAg fQorICAgICAgICB9CisgICAgfQorICAgIGlmIChsaW5lKSBmcmVlKGxpbmUpOworICAgIGlmIChk bmNvdW50ID09IDAgJiYgYW1iaWd1b3VzKSB7CisgICAgICAgIHByaW50ZigiIExvb2t1cDogXCIl c1wiIC0gYW1iaWd1b3VzJXNcbiIsCisgICAgICAgICAgICAgICBzLAorICAgICAgICAgICAgICAg Y3ggPT0gWFhMT09LID8gIiIgOiAiIC0gZGlhbGluZyBza2lwcGVkIgorICAgICAgICAgICAgICAg KTsKKyAgICAgICAgcmV0dXJuKC0yKTsKKyAgICB9CisgICAgcmV0dXJuKGRuY291bnQpOworfQor CitjaGFyICoKK3BuY3Z0KHMpIGNoYXIgKnM7IHsgICAgICAgICAgICAgICAgICAgICAvKiBQaG9u ZSBudW1iZXIgY29udmVyc2lvbiAqLworICAgIGNoYXIgKnAgPSBOVUxMOyAgICAgICAgICAgICAg ICAgICAgIC8qIChqdXN0IGEgd3JhcHBlciBmb3IgZG5jdnQoKSAqLworICAgIGNoYXIgKnEgPSBO VUxMOworICAgIHN0YXRpYyBjaGFyIHBuYnVmWzEyOF07CisgICAgbWFrZXN0cigmcCxkbl9wWzBd KTsgICAgICAgICAgICAgICAgLyogU2F2ZSB0aGVzZSBpbiBjYXNlIHRoZXkgYXJlICovCisgICAg bWFrZXN0cigmcSxkbl9wMlswXSk7ICAgICAgICAgICAgICAgLyogYmVpbmcgdXNlZCAqLworICAg IG1ha2VzdHIoJmRuX3BbMF0scyk7ICAgICAgICAgICAgICAgIC8qIENvcHkgdGhlIGFyZ3VtZW50 IHN0cmluZyB0byBoZXJlICovCisgICAgZG5jdnQoMCxYWExPT0ssMSwxKTsgICAgICAgICAgICAg ICAgLyogQ29udmVydCBpdCAqLworICAgIGlmICghZG5fcDJbMF0pICAgICAgICAgICAgICAgICAg ICAgIC8qIFB1dCByZXN1bHQgd2hlcmUgY2FuIHJldHVybiBpdCAqLworICAgICAgcG5idWZbMF0g PSBOVUw7CisgICAgZWxzZQorICAgICAgY2tzdHJuY3B5KHBuYnVmLGRuX3AyWzBdLDEyNyk7Cisg ICAgbWFrZXN0cigmZG5fcFswXSxwKTsgICAgICAgICAgICAgICAgLyogUmVzdG9yZSB0aGVzZSAq LworICAgIG1ha2VzdHIoJmRuX3AyWzBdLHEpOworICAgIG1ha2VzdHIoJnAsTlVMTCk7ICAgICAg ICAgICAgICAgICAgIC8qIEZyZWUgdGhlc2UgKi8KKyAgICBtYWtlc3RyKCZxLE5VTEwpOworICAg IHJldHVybigoY2hhciAqKXBuYnVmKTsKK30KKworaW50Citkb2RpYWwoY3gpIGludCBjeDsgeyAg ICAgICAgICAgICAgICAgICAgLyogRElBTCBvciBSRURJQUwgKi8KKyAgICBpbnQgaSA9IDAsIHgg PSAwOyAgICAgICAgICAgICAgICAgICAvKiBXb3JrZXJzICovCisgICAgaW50IHNwYXJpdHkgPSAt MTsgICAgICAgICAgICAgICAgICAgLyogRm9yIHNhdmluZyBnbG9iYWwgcGFyaXR5IHZhbHVlICov CisgICAgaW50IHByZXZpb3VzID0gMDsKKyAgICBpbnQgbGVuID0gMDsKKyAgICBpbnQgbGl0ZXJh bCA9IDA7CisgICAgaW50IGZsb3dzYXZlOworICAgIGludCBsdWZvdW5kID0gMDsgICAgICAgICAg ICAgICAgICAgIC8qIERpZCBhbnkgbG9va3VwIHN1Y2NlZWQ/ICovCisgICAgaW50IHByZWZpeCA9 IDE7CisgICAgaW50IHBvc3RmaXggPSAxOworICAgIGludCB3YXNhbHBoYSA9IDA7CisgICAgaW50 IHhyZWRpYWwgPSAwOworICAgIGludCBicmFjZXMgPSAwOworCisgICAgY2hhciAqcCA9IE5VTEws ICpzMyA9IE5VTEwsICogc2F2ID0gTlVMTDsKKyAgICBpbnQgaiA9IDAsIHQgPSAwLCBuID0gMDsK KyAgICBpbnQgeHJldHJpZXMsIHhsY2M7CisKKyNpZmRlZiBDT01NRU5UCisgICAgZGVidWcoRjEw MSwiZG9kaWFsIGN4IiwiIixjeCk7CisgICAgZGVidWcoRjExMSwiZG9kaWFsIGRpYWxsY2MiLGRp YWxsY2MsZGlhbGxjYyk7CisjZW5kaWYJLyogQ09NTUVOVCAqLworCisgICAgeHJldHJpZXMgPSBk aWFscnRyOyAgICAgICAgICAgICAgICAgLyogSWYgcmV0cmllcyBub3Qgc2V0LCAqLworICAgIGlm IChkaWFsbGNjKSB7ICAgICAgICAgICAgICAgICAgICAgIC8qIGNob29zZSBkZWZhdWx0IGJhc2Vk IG9uICovCisgICAgICAgIHhsY2MgPSBhdG9pKGRpYWxsY2MpOyAgICAgICAgICAgLyogbG9jYWwg Y291bnRyeSBjb2RlLiAqLworICAgICAgICBpZiAoeHJldHJpZXMgPCAwKSB7CisgICAgICAgICAg ICBzd2l0Y2ggKHhsY2MpIHsKKyAgICAgICAgICAgICAgY2FzZSAxOiB4cmV0cmllcyA9IDEwOyBi cmVhazsgLyogTm8gcmVzdHJpY3Rpb25zIGluIE5BTlAgKi8KKyAgICAgICAgICAgICAgICAvKiBB ZGQgb3RoZXIgY291bnRyeSBjb2RlcyBoZXJlICovCisgICAgICAgICAgICAgICAgLyogdGhhdCBh cmUga25vd24gdG8gaGF2ZSBubyByZXN0cmljdGlvbnMgb24gcmVkaWFsaW5nLiAqLworICAgICAg ICAgICAgICBkZWZhdWx0OiB4cmV0cmllcyA9IDE7CisgICAgICAgICAgICB9CisgICAgICAgIH0K KyAgICB9CisgICAgaWYgKGN4ID09IFhYUERJQSkgeyAgICAgICAgICAgICAgICAgLyogU2hvcnRj dXQuLi4gKi8KKyAgICAgICAgY3ggPSBYWERJQUw7CisgICAgICAgIHBhcnRpYWwgPSAxOworICAg ICAgICBkZWJ1ZyhGMTAwLCJQRElBTCBzZXRzIHBhcnRpYWw9MSIsIiIsMCk7CisgICAgICAgIHBv c3RmaXggPSAwOyAgICAgICAgICAgICAgICAgICAgLyogRG8gbm90IGFkZCBwb3N0Zml4ICovCisg ICAgfSBlbHNlIHsKKyAgICAgICAgcGFydGlhbCA9IDA7CisgICAgICAgIGRlYnVnKEYxMDAsIkRJ QUwgc2V0cyBwYXJ0aWFsPTAiLCIiLDApOworICAgIH0KKyAgICBwcmV2aW91cyA9IGRpYWxzdGE7 ICAgICAgICAgICAgICAgICAvKiBTdGF0dXMgb2YgcHJldmlvdXMgY2FsbCwgaWYgYW55ICovCisg ICAgaWYgKHByZXZpb3VzID09IERJQV9QQVJUKSB7CisgICAgICAgIHByZWZpeCA9IDA7ICAgICAg ICAgICAgICAgICAgICAgLyogZG8gbm90IGFkZCBwcmVmaXggKi8KKyAgICB9CisgICAgcyA9IE5V TEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSB1c2VyJ3MgZGlhbCBz dHJpbmcgKi8KKyAgICBpZiAoY3ggPT0gWFhSRUQpIHsgICAgICAgICAgICAgICAgICAvKiBSRURJ QUwgb3IuLi4gKi8KKyAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKQorICAgICAgICAgIHJl dHVybih5KTsKKyAgICB9IGVsc2UgaWYgKGN4ID09IFhYQU5TVykgeyAgICAgICAgICAvKiBBTlNX RVIgb3IgLi4uICovCisgICAgICAgIGlmICgoeSA9IGNtbnVtKCJ0aW1lb3V0IChzZWNvbmRzKSIs IjAiLDEwLCZ4LHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgIHJldHVybih5KTsKKyAgICAgICAg ZGlhbGF0bW8gPSB4OworICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApCisgICAgICAgICAg cmV0dXJuKHkpOworICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERJ QUwgb3IgTE9PS1VQICovCisgICAgICAgIGlmIChuZGlhbGRpciA+IDApCisgICAgICAgICAgczMg PSAiTnVtYmVyIHRvIGRpYWwgb3IgZW50cnkgZnJvbSBkaWFsIGRpcmVjdG9yeSI7CisgICAgICAg IGVsc2UKKyAgICAgICAgICBzMyA9ICJOdW1iZXIgdG8gZGlhbCI7CisgICAgICAgIGlmICgoeCA9 IGNtdHh0KHMzLCBkaWFsbnVtID8gZGlhbG51bSA6ICIiLCZzLHh4c3RyaW5nKSkgPCAwKQorICAg ICAgICAgIHJldHVybih4KTsKKyAgICAgICAgaWYgKHMpIHsKKyAgICAgICAgICAgIGxlbiA9IChp bnQpIHN0cmxlbihzKTsKKyAgICAgICAgICAgIGNrc3RybmNweSh0bXBidWYscyxUTVBCVUZTSVop OyAvKiBTYXZlIGxpdGVyYWwgY29weSAqLworI2lmZGVmIENPTU1FTlQKKyAgICAgICAgICAgIGlm IChsZW4gPiAxKSB7ICAgICAgICAgICAgICAvKiBTdHJpcCBvdXRlciBicmFjZXMgaWYgZ2l2ZW4g Ki8KKyAgICAgICAgICAgICAgICBpZiAoKnMgPT0gJ3snKSB7CisgICAgICAgICAgICAgICAgICAg IGlmIChzW2xlbi0xXSA9PSAnfScpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNbbGVuLTFd ID0gTlVMOworICAgICAgICAgICAgICAgICAgICAgICAgcysrOworICAgICAgICAgICAgICAgICAg ICAgICAgbGVuIC09IDI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICB9CisjZWxzZQorICAgICAgICAgICAgcyA9IGJyc3RyaXAocyk7ICAgICAg ICAgICAgIC8qIFN0cmlwIG91dGVyIGJyYWNlcyBvciBxdW90ZXMgKi8KKyNlbmRpZiAvKiBDT01N RU5UICovCisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoY3ggIT0gWFhMT09LKSB7ICAgICAg ICAgICAgICAgICAvKiBOb3QgTE9PS1VQICovCisjaWZkZWYgSUtTRAorICAgICAgICBpZiAoaW5z ZXJ2ZXIpIHsKKyAgICAgICAgICAgIHByaW50ZigiU29ycnksIGRpYWxpbmcgaXMgZGlzYWJsZWQu XHJcbiIpOworICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKyAgICAgICAgfQorI2Vu ZGlmIC8qIElLU0QgKi8KKyNpZmRlZiBDS19UQVBJCisgICAgICAgIGlmICh0dHRhcGkgJiYgIXRh cGlwYXNzKSB7CisgICAgICAgICAgOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2tp cCB0aGUgbW9kZW0gdGVzdCBpZiBUQVBJICovCisgICAgICAgIH0gZWxzZQorI2VuZGlmIC8qIENL X1RBUEkgKi8KKyAgICAgICAgaWYgKG1kbXR5cCA8IDEgJiYgIWRpYWx0ZXN0KSB7CisgICAgICAg ICAgICBpZiAobmV0d29yaworI2lmZGVmIFROX0NPTVBPUlQKKyAgICAgICAgICAgICAgICAgJiYg IWlzdG5jb21wb3J0KCkKKyNlbmRpZiAvKiBUTl9DT01QT1JUICovCisgICAgICAgICAgICAgICAg ICkKKyAgICAgICAgICAgICAgcHJpbnRmKCJQbGVhc2UgU0VUIEhPU1QgZmlyc3QsIGFuZCB0aGVu IFNFVCBNT0RFTSBUWVBFXG4iKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgcHJp bnRmKCJTb3JyeSwgeW91IG11c3QgU0VUIE1PREVNIFRZUEUgZmlyc3RcbiIpOworICAgICAgICAg ICAgZGlhbHN0YSA9IERJQV9OT01POworICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsK KyAgICAgICAgfQorICAgICAgICBpZiAoIWxvY2FsICYmICFkaWFsdGVzdCkgeworICAgICAgICAg ICAgcHJpbnRmKCJTb3JyeSwgeW91IG11c3QgU0VUICVzIG9yIFNFVCBIT1NUIGZpcnN0XG4iLAor I2lmZGVmIE9TMgorICAgICAgICAgICAgICAgICAgICJQT1JUIgorI2Vsc2UKKyAgICAgICAgICAg ICAgICAgICAiTElORSIKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAgICAgICAgICAgICApOwor ICAgICAgICAgICAgZGlhbHN0YSA9IERJQV9OT0xJOworICAgICAgICAgICAgcmV0dXJuKHN1Y2Nl c3MgPSAwKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoKCFuZXR3b3JrIAorI2lmZGVmIFROX0NP TVBPUlQKKyAgICAgICAgICAgICAgfHwgaXN0bmNvbXBvcnQoKQorI2VuZGlmIC8qIFROX0NPTVBP UlQgKi8KKyAgICAgICAgICAgICAgKSAmJiAhZGlhbHRlc3QgJiYKKyNpZmRlZiBDS19UQVBJCisg ICAgICAgICAgICAgIXR0dGFwaSAmJgorI2VuZGlmIC8qIENLX1RBUEkgKi8KKyAgICAgICAgICAg IChzcGVlZCA8IDBMKQorI2lmZGVmIFVOSVgKKyAgICAgICAgICAgICYmIChzdHJjbXAodHRuYW1l LCIvZGV2L251bGwiKSkKKyNlbHNlCisjaWZkZWYgT1NLCisgICAgICAgICAgICAmJiAoc3RyY21w KHR0bmFtZSwiL25pbCIpKQorI2VuZGlmIC8qIE9TSyAqLworI2VuZGlmIC8qIFVOSVggKi8KKyAg ICAgICAgICAgICkgeworICAgICAgICAgICAgcHJpbnRmKCJcblNvcnJ5LCB5b3UgbXVzdCBTRVQg U1BFRUQgZmlyc3RcbiIpOworICAgICAgICAgICAgZGlhbHN0YSA9IERJQV9OT1NQOworICAgICAg ICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoY3gg IT0gWFhBTlNXKSB7CisgICAgICAgIGZvciAoaiA9IDA7IGogPCBNQVhETlVNUzsgaisrKSB7IC8q IEluaXRpYWxpemUgZGlhbC1udW1iZXIgbGlzdCAqLworICAgICAgICAgICAgaWYgKCFkaWFsbnVt KSB7ICAgICAgICAgICAgIC8qIEZpcnN0IHRpbWUgZGlhbGluZyAqLworICAgICAgICAgICAgICAg IGRuX3Bbal0gPSBOVUxMOyAgICAgICAgIC8qIGluaXRpYWxpemUgYWxsIHBvaW50ZXJzLiAqLwor ICAgICAgICAgICAgICAgIGRuX3AyW2pdID0gTlVMTDsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAo ZG5fcFtqXSkgeyAgICAgICAvKiBOb3QgdGhlIGZpcnN0IHRpbWUsICovCisgICAgICAgICAgICAg ICAgZnJlZShkbl9wW2pdKTsgICAgICAgICAgLyogZnJlZSBwcmV2aW91cywgaWYgYW55LCAqLwor ICAgICAgICAgICAgICAgIGRuX3Bbal0gPSBOVUxMOyAgICAgICAgIC8qIHRoZW4gc2V0IHRvIE5V TEwuICovCisgICAgICAgICAgICAgICAgaWYgKGRuX3AyW2pdKQorICAgICAgICAgICAgICAgICAg ZnJlZShkbl9wMltqXSk7CisgICAgICAgICAgICAgICAgZG5fcDJbal0gPSBOVUxMOworICAgICAg ICAgICAgfSBlbHNlIGJyZWFrOyAgICAgICAgICAgICAgIC8qIEFscmVhZHkgTlVMTCAqLworICAg ICAgICB9CisgICAgICAgIGlmIChsZW4gPT0gMCkKKyAgICAgICAgICBzID0gTlVMTDsKKyAgICAg ICAgaWYgKCFzKQorICAgICAgICAgIHMgPSBkaWFsbnVtOworICAgICAgICBpZiAoIXMpIHsKKyAg ICAgICAgICAgIGlmIChjeCA9PSBYWExPT0spCisgICAgICAgICAgICAgIHByaW50ZigiP0xvb2t1 cCB3aGF0P1xuIik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIHByaW50ZigiJXNc biIsIChjeCA9PSBYWFJFRCkgPworICAgICAgICAgICAgICAgICAgICI/Tm8gRElBTCBjb21tYW5k IGdpdmVuIHlldCIgOgorICAgICAgICAgICAgICAgICAgICI/WW91IG11c3Qgc3BlY2lmeSBhIG51 bWJlciB0byBkaWFsIgorICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICByZXR1cm4o LTkpOworICAgICAgICB9CisKKyAgICAvKiBOb3cgd2UgaGF2ZSB0aGUgInJhdyIgZGlhbCBvciBs b29rdXAgc3RyaW5nIGFuZCBzIGlzIG5vdCBOVUxMICovCisKKyAgICAgICAgbWFrZXN0cigmZHNj b3B5LHMpOyAgICAgICAgICAgICAvKiBQdXQgaXQgaW4gYSBzYWZlIHBsYWNlICovCisgICAgICAg IHMgPSBkc2NvcHk7CisgICAgICAgIG4gPSAwOworCisgICAgICAgIGRlYnVnKEYxMTEsImRvZGlh bCIscyxuZGlhbGRpcik7CisKKyAgICAgICAgd2FzYWxwaGEgPSAwOworICAgICAgICBpZiAoaXNh bHBoYSgqcykpIHsKKyAgICAgICAgICAgIHdhc2FscGhhID0gMTsKKyAgICAgICAgICAgIGlmIChu ZGlhbGRpciA+IDApIHsgICAgICAgICAvKiBEbyB3ZSBoYXZlIGEgZGlhbGluZyBkaXJlY3Rvcnk/ ICovCisgICAgICAgICAgICAgICAgbiA9IGx1ZGlhbChzLGN4KTsgICAgICAgLyogTG9vayB1cCB3 aGF0IHRoZSB1c2VyIHR5cGVkICovCisgICAgICAgICAgICAgICAgaWYgKG4gPT0gMCkKKyAgICAg ICAgICAgICAgICAgIHByaW50ZigiIExvb2t1cDogXCIlc1wiIC0gbm90IGZvdW5kJXNcbiIsCisg ICAgICAgICAgICAgICAgICAgICAgICAgcywKKyAgICAgICAgICAgICAgICAgICAgICAgICBjeCA9 PSBYWExPT0sgPyAiIiA6ICIgLSBkaWFsaW5nIGFzIGdpdmVuXG4iCisgICAgICAgICAgICAgICAg ICAgICAgICAgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlYnVnKEYxMDEsImRvZGlh bCIscyxuKTsKKyAgICAgICAgICAgIGlmIChuIDwgMCAmJiBjeCAhPSBYWExPT0spIHsgLyogRXJy b3Igb3V0IGlmIHRoZXkgd2FudGVkIHRvIGRpYWwgKi8KKyAgICAgICAgICAgICAgICBpZiAobiA9 PSAtMSkgICAgICAgICAgICAvKiAtMiBtZWFucyBsdWRpYWwgYWxyZWFkeSBnYXZlIG1zZyAqLwor ICAgICAgICAgICAgICAgICAgcHJpbnRmKCIgTG9va3VwOiBmYXRhbCBlcnJvciAtIGRpYWxpbmcg c2tpcHBlZFxuIik7CisgICAgICAgICAgICAgICAgZGlhbHN0YSA9IERJQV9ESVI7CisgICAgICAg ICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChuID4g MCkgICAgICAgICAgICAgICAgICAvKiBBIHN1Y2Nlc3NmdWwgbG9va3VwICovCisgICAgICAgICAg ICAgIGx1Zm91bmQgPSAxOworICAgICAgICB9IGVsc2UgaWYgKCpzID09ICc9JykgeyAgICAgICAg IC8qIElmIG51bWJlciBzdGFydHMgd2l0aCA9IHNpZ24gKi8KKyAgICAgICAgICAgIHMrKzsgICAg ICAgICAgICAgICAgICAgICAgICAvKiBzdHJpcCBpdCAqLworICAgICAgICAgICAgbGl0ZXJhbCA9 IDE7ICAgICAgICAgICAgICAgIC8qIHJlbWVtYmVyIHRoaXMgKi8KKyAgICAgICAgICAgIHdoaWxl ICgqcyA9PSBTUCkgcysrOyAgICAgICAvKiBhbmQgdGhlbiBhbHNvIGFueSBsZWFkaW5nIHNwYWNl cyAqLworICAgICAgICB9IGVsc2UgaWYgKHRtcGJ1ZlswXSA9PSAneycgJiYgdG1wYnVmWzFdID09 ICd7JykgeworICAgICAgICAgICAgbWFrZWxpc3QodG1wYnVmLGRuX3AsTUFYRE5VTVMpOworICAg ICAgICAgICAgbWFrZXN0cigmZHNjb3B5LHRtcGJ1Zik7CisgICAgICAgICAgICBzID0gdG1wYnVm OworICAgICAgICAgICAgZm9yIChuID0gMDsgbiA8IE1BWEROVU1TOyBuKyspIC8qIChoYXZlIHRv IGNvdW50IGhvdyBtYW55KSAqLworICAgICAgICAgICAgICBpZiAoIWRuX3Bbbl0pIGJyZWFrOwor ICAgICAgICAgICAgYnJhY2VzID0gMTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY3ggPT0gWFhM T09LICYmICF3YXNhbHBoYSAmJiAhYnJhY2VzKSB7CisgICAgICAgICAgICAvKiBXZSd2ZSBiZWVu IHRvbGQgdG8gbG9va3VwIGEgbnVtYmVyIG9yIGEgcXVvdGVkIG5hbWUgKi8KKyAgICAgICAgICAg IGNoYXIgKnA7CisgICAgICAgICAgICBuID0gMDsKKyAgICAgICAgICAgIHAgPSBsaXRlcmFsID8g cyA6IHBuY3Z0KGRzY29weSk7CisgICAgICAgICAgICBpZiAoIXApIHAgPSAiIjsKKyAgICAgICAg ICAgIGlmICgqcCkgeworICAgICAgICAgICAgICAgIHByaW50ZigiJXMgID0+ICVzXG4iLCBkc2Nv cHksIHApOworICAgICAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisgICAgICAgICAg ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHByaW50ZigiP0JhZCBwaG9uZSBudW1iZXJcbiIp OworICAgICAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7CisgICAgICAgICAgICB9Cisg ICAgICAgIH0KKyAgICAgICAgLyogU2F2ZSBESUFMIG9yIHN1Y2Nlc3NmdWwgTE9PS1VQIHN0cmlu ZyBmb3IgZnV0dXJlIERJQUwgb3IgUkVESUFMICovCisgICAgICAgIC8qIEJ1dCBkb24ndCBzYXZl IHBpZWNlcyBvZiBwYXJ0aWFsIGRpYWwgLi4uICovCisKKyAgICAgICAgZGVidWcoRjEwMSwiRElB TCBzYXZlIGRpYWxudW0gcGFydGlhbCIsIiIscGFydGlhbCk7CisgICAgICAgIGRlYnVnKEYxMDEs IkRJQUwgc2F2ZSBkaWFsbnVtIHByZXZpb3VzIiwiIixwcmV2aW91cyk7CisgICAgICAgIGlmICgo Y3ggPT0gWFhESUFMICYmIHBhcnRpYWwgPT0gMCAmJiBwcmV2aW91cyAhPSBESUFfUEFSVCkgfHwK KyAgICAgICAgICAgIChjeCA9PSBYWExPT0sgJiYgbiA+IDApKSB7CisgICAgICAgICAgICBtYWtl c3RyKCZkaWFsbnVtLGRzY29weSk7CisgICAgICAgICAgICBpZiAoIXF1aWV0ICYmIGRzY29weSAm JiAhZGlhbG51bSkKKyAgICAgICAgICAgICAgcHJpbnRmKCJXQVJOSU5HIC0gbWVtb3J5IGFsbG9j YXRpb24gZmFpbHVyZTogcmVkaWFsIG51bWJlclxuIik7CisgICAgICAgIH0KKyAgICAgICAgaWYg KG4gPiAwKSB7CisgICAgICAgICAgICBpZiAoIXF1aWV0ICYmICFiYWNrZ3JkICYmICFicmFjZXMg LyogJiYgZGlhbGRweSAqLyApIHsKKyAgICAgICAgICAgICAgICBpZiAoIXN0cmNtcChkX25hbWUs cykpCisgICAgICAgICAgICAgICAgICBwcmludGYoIiBMb29rdXA6IFwiJXNcIiAtIGV4YWN0IG1h dGNoXG4iLHMpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgIHByaW50 ZigiIExvb2t1cDogXCIlc1wiIC0gdW5pcXVlbHkgbWF0Y2hlcyBcIiVzXCJcbiIsCisgICAgICAg ICAgICAgICAgICAgICAgICAgcywKKyAgICAgICAgICAgICAgICAgICAgICAgICBkX25hbWUKKyAg ICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg KChjeCA9PSBYWExPT0spIHx8CisgICAgICAgICAgICAgICAgKChuID4gMSkgJiYgIXF1aWV0ICYm ICFiYWNrZ3JkIC8qICYmIGRpYWxkcHkgKi8gKSkgeworICAgICAgICAgICAgICAgIHByaW50Zigi ICVkIHRlbGVwaG9uZSBudW1iZXIlc2ZvdW5kIGZvciBcIiVzXCIlc1xuIiwKKyAgICAgICAgICAg ICAgICAgICAgICAgbiwKKyAgICAgICAgICAgICAgICAgICAgICAgKG4gPT0gMSkgPyAiICIgOiAi cyAiLAorICAgICAgICAgICAgICAgICAgICAgICBzLAorICAgICAgICAgICAgICAgICAgICAgICAo biA+IDApID8gIjoiIDogIi4iCisgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAg ICAgICAgczMgPSBnZXRkbmFtZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChp ID0gMDsgaSA8IG47IGkrKykgeyAgIC8qIENvbnZlcnQgKi8KKyAgICAgICAgICAgICAgICBkbl94 W2ldID0gLTE7CisgICAgICAgICAgICAgICAgaWYgKGRuY3Z0KGksY3gscHJlZml4LHBvc3RmaXgp IDwgMCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoY3ggIT0gWFhMT09LKSB7CisgICAgICAg ICAgICAgICAgICAgICAgICBkaWFsc3RhID0gRElBX0RJUjsKKyAgICAgICAgICAgICAgICAgICAg ICAgIHJldHVybigtOSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZGlhbHNydCAmJiBuID4gMSkgeyAgICAg LyogU29ydCBpbnRvIG9wdGltYWwgb3JkZXIgKi8KKyAgICAgICAgICAgICAgICBmb3IgKGkgPSAw OyBpIDwgbi0xOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gaSsxOyBqIDwg bjsgaisrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZG5feFtqXSA8IGRuX3hbaV0p IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID0gZG5feFtqXTsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICBkbl94W2pdID0gZG5feFtpXTsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICBkbl94W2ldID0gdDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwID0gZG5f cFtqXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbl9wW2pdID0gZG5fcFtpXTsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICBkbl9wW2ldID0gcDsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICBwID0gZG5fcDJbal07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG5f cDJbal0gPSBkbl9wMltpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbl9wMltpXSA9 IHA7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoKGN4ID09IFhY TE9PSykgfHwKKyAgICAgICAgICAgICAgICAoKG4gPiAxKSAmJiAhcXVpZXQgJiYgIWJhY2tncmQg LyogJiYgZGlhbGRweSAqLyApKSB7CisgICAgICAgICAgICAgICAgaW50IG5uID0gbjsKKyNpZm5k ZWYgTk9TUEwKKyAgICAgICAgICAgICAgICBjaGFyICogcDsKKyNlbmRpZiAvKiBOT1NQTCAqLwor ICAgICAgICAgICAgICAgIGlmIChjeCAhPSBYWExPT0spCisgICAgICAgICAgICAgICAgICBpZiAo biA+IDEyKSBubiA9IDEyOworICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBubjsgaSsr KSB7CisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiJTNkLiAlLTEycyAgJS0yMHMgPT4gICUt MjBzICAoJWQpXG4iLGkrMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHMzLCBkbl9wW2ld LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZG5fcDJbaV0gPyBkbl9wMltpXSA6ICIocHJv Y2Vzc2luZyBmYWlsZWQpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRuX3hbaV0KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICAgIGlmIChjeCAhPSBYWExPT0sgJiYgbiAhPSBubikKKyAgICAgICAgICAgICAgICAgIHBy aW50ZigiQW5kICVkIG1vcmUuLi5cbiIsIG4gLSBubik7CisgICAgICAgICAgICB9CisgICAgICAg IH0gZWxzZSBpZiAobiA9PSAwKSB7ICAgICAgICAgICAgLyogTm90IGZvdW5kIGluIGRpcmVjdG9y eSAqLworICAgICAgICAgICAgbWFrZXN0cigmKGRuX3BbMF0pLGxpdGVyYWwgPyBzIDogZHNjb3B5 KTsKKyAgICAgICAgICAgIG1ha2VzdHIoJmRfbmFtZSxsaXRlcmFsID8gcyA6IGRzY29weSk7Cisg ICAgICAgICAgICBkbmNvdW50ID0gMTsKKyAgICAgICAgICAgIG4gPSAxOworICAgICAgICAgICAg aWYgKGRuY3Z0KDAsY3gscHJlZml4LHBvc3RmaXgpIDwgMCkgeyAvKiBJbiBjYXNlIHRoZXkgdHlw ZWQgYSAqLworICAgICAgICAgICAgICAgIGRpYWxzdGEgPSBESUFfRElSOyAgICAgIC8qIHBvcnRh YmxlLWZvcm1hdCBudW1iZXIgLi4uICovCisgICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgfQorCisjaWZuZGVmIE5PTkVUCisjaWZkZWYgTkVUQ09OTgor ICAgICAgICAvKiBJdCdzIG5vdCBnb29kIHRoYXQgdGhlIG5ldHdvcmtzIGRpcmVjdG9yeSBkZXBl bmRzIG9uIE5PVC1OT0RJQUwuLiAqLworICAgICAgICBpZiAoY3ggPT0gWFhMT09LICYmIGRzY29w eSkgeyAgIC8qIE5ldHdvcmtzIGhlcmUgdG9vLi4uICovCisgICAgICAgICAgICBleHRlcm4gY2hh ciAqbmhfcFtdLCAqbmhfcDJbXSwgKm5fbmFtZTsKKyAgICAgICAgICAgIGV4dGVybiBjaGFyICpu aF9weFs0XVtNQVhETlVNUysxXTsKKyAgICAgICAgICAgIG4gPSAtMTsKKyAgICAgICAgICAgIGlm IChubmV0ZGlyID4gMCkgeyAgICAgICAgICAvKiBEbyB3ZSBoYXZlIGEgbmV0d29yayBkaXJlY3Rv cnk/ICovCisgICAgICAgICAgICAgICAgZGlybGluZSA9IDA7CisgICAgICAgICAgICAgICAgbiA9 IGx1bmV0KGRzY29weSk7ICAgICAgLyogTG9vayB1cCB3aGF0IHRoZSB1c2VyIHR5cGVkICovCisg ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobiA+IC0xKSB7CisgICAgICAgICAgICAgICAg aW50IGs7CisgICAgICAgICAgICAgICAgaWYgKG4gPiAwKSAgICAgICAgICAgICAgLyogQSBzdWNj ZXNzZnVsIGxvb2t1cCAqLworICAgICAgICAgICAgICAgICAgbHVmb3VuZCA9IDE7CisgICAgICAg ICAgICAgICAgaWYgKGN4ID09IFhYTE9PSyAmJiBuID09IDApCisgICAgICAgICAgICAgICAgICBw cmludGYoIiBMb29rdXA6IFwiJXNcIiAtIG5vdCBmb3VuZFxuIixkc2NvcHkpOworICAgICAgICAg ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgIHByaW50ZigiJXMgJWQgbmV0d29yayBlbnRy JXMgZm91bmQgZm9yIFwiJXNcIiVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgIGN4ID09 IFhYTE9PSyA/ICIgTG9va3VwOiIgOiAiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBuLAor ICAgICAgICAgICAgICAgICAgICAgICAgIChuID09IDEpID8gInkiIDogImllcyIsCisgICAgICAg ICAgICAgICAgICAgICAgICAgZHNjb3B5LAorICAgICAgICAgICAgICAgICAgICAgICAgIChuID4g MCkgPyAiOiIgOiAiLiIKKyAgICAgICAgICAgICAgICAgICAgICAgICApOworCisgICAgICAgICAg ICAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworCisgICAgICAgICAgICAgICAgICAgIHBy aW50ZigiJTNkLiAlLTEycyA9PiAlLTlzICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg IGkrMSxuX25hbWUsbmhfcDJbaV0sbmhfcFtpXSk7CisgICAgICAgICAgICAgICAgICAgIGZvciAo ayA9IDA7IGsgPCA0OyBrKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuaF9weFtr XVtpXSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiICVzIixuaF9weFtr XVtpXSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg ICAgcHJpbnRmKCJcbiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg ICAgfQorI2VuZGlmIC8qIE5FVENPTk4gKi8KKyNlbmRpZiAvKiBOT05FVCAqLworICAgICAgICBp ZiAoY3ggPT0gWFhMT09LKQorICAgICAgICAgIHJldHVybihzdWNjZXNzID0gbHVmb3VuZCk7Cisg ICAgfSAvKiBjeCAhPSBYWEFOU1cgKi8KKworI2lmZGVmIFZNUworICAgIGNvbnJlcygpOyAgICAg ICAgICAgICAgICAgICAvKiBTbyBDdHJsLUMvWSB3aWxsIHdvcmsgKi8KKyNlbmRpZiAvKiBWTVMg Ki8KKy8qCisgIFNvbWUgbW9kZW1zIGRvIG5vdCByZWFjdCB3ZWxsIHRvIHBhcml0eS4gIEFsc28s IGlmIHdlIGFyZSBkaWFsaW5nIHRocm91Z2ggYQorICBUQ1AvSVAgVEVMTkVUIG1vZGVtIHNlcnZl ciwgcGFyaXR5IGNhbiBiZSBmYXRhbGx5IG1pc2ludGVycHJldGVkIGFzIFRFTE5FVAorICBuZWdv dGlhdGlvbnMuCisKKyAgVGhpcyBzaG91bGQgd29yayBldmVuIGlmIHRoZSB1c2VyIGludGVycnVw dHMgdGhlIERJQUwgY29tbWFuZCwgYmVjYXVzZSB0aGUKKyAgRElBTCBtb2R1bGUgaGFzIGl0cyBv d24gaW50ZXJydXB0IGhhbmRsZXIuICBCVVQuLi4gaWYsIGZvciBzb21lIHJlYXNvbiwgYQorICBk aWFsaW5nIGRldmljZSBhY3R1YWxseSAqcmVxdWlyZXMqIHBhcml0eSAoZS5nLiBDQ0lUVCBWLjI1 YmlzIHNheXMgdGhhdCBldmVuCisgIHBhcml0eSBzaG91bGQgYmUgdXNlZCksIHRoaXMgbWlnaHQg cHJldmVudCBzdWNjZXNzZnVsIGRpYWxpbmcuICBGb3IgdGhhdAorICByZWFzb24sIHdlIGRvbid0 IGRvIHRoaXMgZm9yIFYuMjViaXMgbW9kZW1zLgorKi8KKyAgICBzcGFyaXR5ID0gcGFyaXR5OyAg ICAgICAgICAgICAgICAgICAvKiBTYXZlIGN1cnJlbnQgcGFyaXR5ICovCisgICAgaWYgKChkaWFs Y2FwYXMgJiBDS0RfVjI1KSA9PSAwKSAgICAgLyogSWYgbm90IFYuMjViaXMuLi4gICovCisgICAg ICBwYXJpdHkgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgLyogU2V0IHBhcml0eSB0byBOT05F ICovCisKKyAgICBmbG93c2F2ZSA9IGZsb3c7CisvKgorICBUaGVzZSBtb2RlbXMgdXNlIHNvbWUg a2luZCBvZiBzY3Jld3kgZmxvdyBjb250cm9sIHdoaWxlIGluIGNvbW1hbmQgbW9kZSwKKyAgYW5k IGRvIG5vdCBwcmVzZW50IENUUyBhcyB0aGV5IHNob3VsZC4gIFNvIGlmIFJUUy9DVFMgaXMgc2V0 IChvciBldmVuIGlmCisgIGl0IGlzbid0KSBkaXNhYmxlIGZsb3cgY29udHJvbCBkdXJpbmcgZGlh bGluZy4KKyovCisjaWZuZGVmIE1JTklESUFMCisgICAgaWYgKG1kbXR5cCA9PSBuX0FUVDE5MTAg fHwgbWRtdHlwID09IG5fQVRUMTkwMCkgeworICAgICAgICBmbG93ID0gRkxPX05PTkU7ICAgICAg ICAgICAgICAgIC8qIFRoaXMgaXMgbm90IGVub3VnaCAqLworI2lmZGVmIENLX1RUU0VURkxPVwor ICAgICAgICB0dHNldGZsb3coRkxPX05PTkUpOyAgICAgICAgICAgIC8qIFJlYWxseSB0dXJuIGl0 IG9mZiAqLworI2VuZGlmIC8qIENLX1RUU0VURkxPVyAqLworICAgIH0KKyNlbmRpZiAvKiBNSU5J RElBTCAqLworICAgIGlmICghbmV0d29yaworI2lmZGVmIFROX0NPTVBPUlQKKyAgICAgICAgfHwg aXN0bmNvbXBvcnQoKQorI2VuZGlmIC8qIFROX0NPTVBPUlQgKi8KKyAgICAgICAgICkgeworICAg ICAgICBpbnQgeDsKKyAgICAgICAgaWYgKCh4ID0gdHRnbWRtKCkpID4gLTEpIHsKKyAgICAgICAg ICAgIGlmICgheCAmJiBtc2dmbGcpIHsKKyAgICAgICAgICAgICAgICBwcmludGYoCisiV0FSTklO RyAtIE5vIG1vZGVtIHNpZ25hbHMgZGV0ZWN0ZWQuICBJcyB5b3VyIG1vZGVtIHR1cm5lZCBvbj8g IElmIG5vdCxcblwKK3VzZSBDdHJsLUMgdG8gaW50ZXJydXB0IGRpYWxpbmcsIHR1cm4gb24geW91 ciBtb2RlbSwgdGhlbiAlcy5cbiIsCisgICAgICAgICAgICAgICAgICAgICAgIGN4ID09IFhYQU5T VyA/CisgICAgICAgICAgICAgICAgICAgICAgICJBTlNXRVIgYWdhaW4iIDoKKyAgICAgICAgICAg ICAgICAgICAgICAgIlJFRElBTCIKKyAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgICAgIGlmIChmbG93ID09IEZMT19SVFNDKSB7CisgICAgICAgICAgICAg ICAgaWYgKCEoeCAmIEJNX0NUUykpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1zZ2ZsZykK KyAgICAgICAgICAgICAgICAgICAgICBwcmludGYoCisiV0FSTklORyAtIFNFVCBGTE9XIFJUUy9D VFMgaXMgaW4gZWZmZWN0IGJ1dCBtb2RlbSdzIENUUyBzaWduYWwgaXMgb2ZmLlxuXAorRGlzYWJs aW5nIGZsb3cgY29udHJvbCB0ZW1wb3JhcmlseSAlcy4uLlxuIiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY3ggPT0gWFhBTlNXID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IndoaWxlIHdhaXRpbmcgZm9yIGNhbGwiIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ImR1cmluZyBkaWFsaW5nIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAg ICAgICAgICAgICAgICBmbG93ID0gRkxPX05PTkU7CisgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGlmIChjeCA9PSBYWEFOU1cpIHsgICAgICAg ICAgICAgICAgIC8qIEFOU1dFUiAqLworICAgICAgICBzdWNjZXNzID0gY2tkaWFsKCIiLDAsMCwx LDApOworICAgICAgICBnb3RvIGRpYWxmaW47CisgICAgfQorCisvKiBFZGl0IDE5MiBhZGRzIHRo ZSBhYmlsaXR5IHRvIGRpYWwgcmVwZWF0ZWRseS4gKi8KKworICAgIGkgPSAwOworICAgIGRpYWxj b3VudCA9IDA7CisgICAgZG8geworICAgICAgICBpZiAoaSA+IDApIHByaW50ZigiXG5EaWFsIGF0 dGVtcHQgJWQgb2YgJWQuLi5cbiIsIGkrMSwgeHJldHJpZXMpOworICAgICAgICBkaWFsY291bnQg PSBpKzE7CisgICAgICAgIHN1Y2Nlc3MgPSAwOworICAgICAgICAvKiBBbmQgdGhlIGFiaWxpdHkg dG8gZGlhbCBhbHRlcm5hdGUgbnVtYmVycy4gKi8KKyAgICAgICAgLyogTG9vcCB0byBkaWFsIGVh Y2ggaW4gYSBsaXN0IG9mIG51bWJlcnMgZm9yIHRoZSBzYW1lIG5hbWUuLi4gKi8KKyAgICAgICAg Zm9yIChqID0gMDsgaiA8IG4gJiYgIXN1Y2Nlc3M7IGorKykgeyAvKiB1bnRpbCBvbmUgYW5zd2Vy cy4gKi8KKyAgICAgICAgICAgIHMgPSBkbl9wMltqXTsgICAgICAgICAgICAgICAvKiBOZXh0IG51 bWJlciBpbiBsaXN0ICovCisgICAgICAgICAgICBpZiAoZG5feFtqXSA+PSBkaWFscnN0cikgeyAg LyogRGlhbCByZXN0cmljdGlvbiAqLworICAgICAgICAgICAgICAgIHByaW50ZigiUmVzdHJpY3Rl ZDogJXMsIHNraXBwaW5nLi4uXG4iLGRuX3Bbal0pOworICAgICAgICAgICAgICAgIGNvbnRpbnVl OworICAgICAgICAgICAgfQorICAgICAgICAgICAgeHJlZGlhbCA9IChpID09IDAgJiYgaiA9PSAw KSA/IDAgOiAxOworICAgICAgICAgICAgaWYgKCFzKSBzID0gZG5fcFtqXTsKKworI2lmbmRlZiBO T1NQTAorICAgICAgICAgICAgc2F2ID0gczsKKyAgICAgICAgICAgIHAgPSB4ZGlhbChzKTsgICAg ICAgICAgICAgICAvKiBBcHBseSBESUFMIG1hY3JvIG5vdyAqLworICAgICAgICAgICAgaWYgKHAp IGlmICgqcCkgcyA9IHA7CisjZW5kaWYgLyogTk9TUEwgKi8KKworCSAgICAvKiBEaWFsIGNvbmZp cm1hdGlvbiAqLworCSAgICAvKiBOT1RFOiB0aGUgdXFfeHh4KCkgY2FsbHMgYWxsb3cgZm9yIGEg R1VJIGRpYWxvZyAqLworCisgICAgICAgICAgICBpZiAoaSA9PSAwICYmIGRpYWxjbmYpIHsKKwkJ Y2hhciBtc2didWZbMTI4XTsKKwkJY2ttYWttc2cobXNnYnVmLDEyOCwiRGlhbGluZyAiLHMsTlVM TCxOVUxMKTsKKwkJeCA9IHVxX29rKG1zZ2J1ZiwiSXMgdGhpcyBudW1iZXIgY29ycmVjdD8gIiwz LE5VTEwsMCk7CisgICAgICAgICAgICAgICAgaWYgKCF4KSB7CisKKyNpZm5kZWYgQ09NTUVOVAor CQkgICAgeCA9IHVxX3R4dCgJCS8qIEFsbG93IEdVSSBkaWFsb2cgKi8KKyNpZmRlZiBPUzIKKyIg UGxlYXNlIGVudGVyIHRoZSBjb3JyZWN0IG51bWJlcixcclxuIG9yIHByZXNzIEVudGVyIHRvIHNr aXAuIiwKKyNlbHNlCisiIFBsZWFzZSBlbnRlciB0aGUgY29ycmVjdCBudW1iZXIsXHJcbiBvciBw cmVzcyBSZXR1cm4gdG8gc2tpcC4iLAorI2VuZGlmIC8qIE9TMiAqLworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIkNvcnJlY3RlZCBwaG9uZSBudW1iZXI6ICIsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgMSwKKwkJCSAgICAgICBOVUxMLAorCQkJICAgICAgIGF0bWJ1ZiwK KwkJCSAgICAgICBBVE1CTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFRkFVTFRfVVFfVElNRU9VVAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICk7CisJCSAgICBpZiAoeCAmJiBhdG1idWZbMF0pIHsgLyog VGhleSBnYXZlIGEgbmV3IG9uZSAqLworCQkJcyA9IGF0bWJ1ZjsKKwkJCW1ha2VzdHIoJihkbl9w MltqXSksIHMpOworCQkgICAgfQkJCQorCisjZWxzZSAgLyogQ09NTUVOVCAqLworCisjaWZkZWYg Q0tfUkVDQUxMCisgICAgICAgICAgICAgICAgICAgIGV4dGVybiBpbnQgb25fcmVjYWxsOworI2Vu ZGlmIC8qIENLX1JFQ0FMTCAqLworICAgICAgICAgICAgICAgICAgICBjbXNhdnAocHNhdmUsUFJP TVBUTCk7CisgICAgICAgICAgICAgICAgICAgIGNtc2V0cCgKKyNpZmRlZiBPUzIKKyIgUGxlYXNl IGVudGVyIHRoZSBjb3JyZWN0IG51bWJlcixcclxuIG9yIHByZXNzIEVudGVyIHRvIHNraXA6ICIK KyNlbHNlCisiIFBsZWFzZSBlbnRlciB0aGUgY29ycmVjdCBudW1iZXIsXHJcbiBvciBwcmVzcyBS ZXR1cm4gdG8gc2tpcDogIgorI2VuZGlmIC8qIE9TMiAqLworICAgICAgICAgICAgICAgICAgICAg ICAgICAgKTsKKyAgICAgICAgICAgICAgICAgICAgY21pbmkoY2t4ZWNoKTsKKyAgICAgICAgICAg ICAgICAgICAgeCA9IC0xOworICAgICAgICAgICAgICAgICAgICBpZiAocGZsYWcpIHByb21wdChO VUxMKTsKKyNpZmRlZiBDS19SRUNBTEwKKyAgICAgICAgICAgICAgICAgICAgb25fcmVjYWxsID0g MDsKKyNlbmRpZiAvKiBDS19SRUNBTEwgKi8KKyAgICAgICAgICAgICAgICAgICAgeSA9IGNtZGdx dW8oKTsKKyAgICAgICAgICAgICAgICAgICAgY21kc3F1bygwKTsKKyAgICAgICAgICAgICAgICAg ICAgd2hpbGUgKHggPCAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB4ID0gY210eHQoIkNv cnJlY3RlZCBwaG9uZSBudW1iZXIiLCIiLCZzLE5VTEwpOworICAgICAgICAgICAgICAgICAgICAg ICAgY21yZXMoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBp ZiAoKGludCkgc3RybGVuKHMpIDwgMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY21zZXRw KHBzYXZlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJihkbl9wMltqXSksIHMpOwor ICAgICAgICAgICAgICAgICAgICBjbWRzcXVvKHkpOworICAgICAgICAgICAgICAgICAgICBjbXNl dHAocHNhdmUpOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICB9CisgICAgICAgICAgICBpZiAoZGlhbHRlc3QpIHsgICAgICAgICAgICAgLyogSnVz dCB0ZXN0aW5nICovCisgICAgICAgICAgICAgICAgaWYgKGkgKyBqID09IDApCisgICAgICAgICAg ICAgICAgICBwcmludGYoIlxuVEVTVElORy4uLlxuIik7CisgICAgICAgICAgICAgICAgaWYgKGRp YWxtYWMpCisgICAgICAgICAgICAgICAgICBwcmludGYoIiBOdW1iZXI6IFwiJXNcIiA9PiBcIiVz XCJcbiIsc2F2LHMpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgIHBy aW50ZigiIE51bWJlcjogXCIlc1wiXG4iLHMpOworICAgICAgICAgICAgICAgIGRpYWxzdGEgPSBE SUFfQlVTWTsKKyAgICAgICAgICAgICAgICBzdWNjZXNzID0gMDsKKyAgICAgICAgICAgIH0gZWxz ZSB7CisgICAgICAgICAgICAgICAgd2hhdCB8PSBXX0RJQUxJTkc7CisgICAgICAgICAgICAgICAg c3VjY2VzcyA9IGNrZGlhbChzLGksaixwYXJ0aWFsID8gMyA6IDAsIHhyZWRpYWwpOyAvKiBEaWFs IGl0ICovCisgICAgICAgICAgICAgICAgd2hhdCAmPSB+KFdfRElBTElORyk7CisgICAgICAgICAg ICAgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChkaWFsc3RhIDwg OCB8fCAgLyogQnJlYWsgb3V0IGlmIHVucmVjb3ZlcmFibGUgZXJyb3IgKi8KKyAgICAgICAgICAg ICAgICAgICAgICAgIGRpYWxzdGEgID09IERJQV9JTlRSIHx8CisgICAgICAgICAgICAgICAgICAg ICAgICBkaWFsc3RhICA9PSBESUFfRVJSICB8fAorICAgICAgICAgICAgICAgICAgICAgICAgcHJl dmlvdXMgPT0gRElBX1BBUlQKKyAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAg ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg ICAgIH0KKyAgICAgICAgaWYgKHN1Y2Nlc3MpICAgICAgICAgICAgICAgICAgICAvKiBTdWNjZWVk ZWQsIGxlYXZlIHRoZSBvdXRlciBsb29wICovCisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlm IChkaWFsc3RhIDwgOCB8fCAgICAgICAgICAgICAgLyogQnJlYWsgb3V0IGlmIHVucmVjb3ZlcmFi bGUgZXJyb3IgKi8KKyAgICAgICAgICAgIGRpYWxzdGEgPT0gRElBX0lOVFIgfHwgICAgICAvKiBJ bnRlcnJ1cHRlZCAqLworICAgICAgICAgICAgZGlhbHN0YSA9PSBESUFfTk9EVCB8fCAgICAgIC8q IE5vIGRpYWx0b25lICovCisgICAgICAgICAgICBkaWFsc3RhID09IERJQV9OT0FDIHx8ICAgICAg LyogQWNjZXNzIGZvcmJpZGRlbiAqLworICAgICAgICAgICAgZGlhbHN0YSA9PSBESUFfQkxDSyB8 fCAgICAgIC8qIEJsYWNrbGlzdGVkICovCisgICAgICAgICAgICBkaWFsc3RhID09IERJQV9ESVIg IHx8ICAgICAgLyogRGlhbGluZyBkaXJlY3RvcnkgZXJyb3IgKi8KKyAgICAgICAgICAgIGRpYWxz dGEgPT0gRElBX0VSUiAgfHwgICAgICAvKiBNb2RlbSBjb21tYW5kIGVycm9yICovCisgICAgICAg ICAgICBwcmV2aW91cyA9PSBESUFfUEFSVCkKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYg KCsraSA+PSB4cmV0cmllcykgICAgICAgICAgICAvKiBCcmVhayBvdXQgaWYgdG9vIG1hbnkgdHJp ZXMgKi8KKyAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKCFiYWNrZ3JkICYmICFxdWlldCkg eworICAgICAgICAgICAgaWYgKGRpYWxpbnQgPiA1KQorICAgICAgICAgICAgICBwcmludGYoCisi XG5XaWxsIHJlZGlhbCBpbiAlZCBzZWNvbmQlcy0gcHJlc3MgYW55IGtleSB0byByZWRpYWwgaW1t ZWRpYXRlbHkuXG4iLAorICAgICAgICAgICAgICAgICAgICAgZGlhbGludCwKKyAgICAgICAgICAg ICAgICAgICAgIGRpYWxpbnQgPT0gMSA/ICIgIiA6ICJzICIKKyAgICAgICAgICAgICAgICAgICAg ICk7CisgICAgICAgICAgICBwcmludGYoIkN0cmwtQyB0byBjYW5jZWwuLi5cbiIpOworICAgICAg ICB9CisgICAgICAgIHggPSBkaWFsaW50OyAgICAgICAgICAgICAgICAgICAgLyogUmVkaWFsIGlu dGVydmFsICovCisgICAgICAgIHdoaWxlICh4LS0gPiAwKSB7CisgICAgICAgICAgICBpZiAoKHkg PSBjb25jaGsoKSkgPiAwKSB7ICAgLyogRGlkIHRoZXkgdHlwZSBzb21ldGhpbmc/ICovCisgICAg ICAgICAgICAgICAgd2hpbGUgKHktLSkgY29uaW5jKDApOyAgLyogWWVzLCBhYnNvcmIgaXQgKi8K KyAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAvKiBBbmQgd2FrZSB1cCAq LworICAgICAgICAgICAgfQorICAgICAgICAgICAgc2xlZXAoMSk7ICAgICAgICAgICAgICAgICAg IC8qIE5vIGludGVycnVwdCwgc2xlZXAgYSBzZWMgKi8KKyAgICAgICAgfQorICAgIH0gd2hpbGUg KCFzdWNjZXNzKTsKKworICBkaWFsZmluOgorCisgICAgaWYgKGN4ICE9IFhYTE9PSykgeworICAg ICAgICBpZiAoIXN1Y2Nlc3MpCisgICAgICAgICAgYmxlZXAoKHNob3J0KSBCUF9GQUlMKTsKKyAg ICAgICAgZWxzZSBpZiAoIXF1aWV0KQorICAgICAgICAgIGJsZWVwKChzaG9ydCkgQlBfTk9URSk7 CisjaWZkZWYgT1MyCisgICAgICAgIHNldGludCgpOyAgICAgICAgICAgICAgICAgICAgICAgLyog Rml4IE9TLzIgaW50ZXJydXB0cyAqLworI2VuZGlmIC8qIE9TMiAqLworICAgICAgICBpZiAoc3Bh cml0eSA+IC0xKQorICAgICAgICAgIHBhcml0eSA9IHNwYXJpdHk7ICAgICAgICAgICAgIC8qIFJl c3RvcmUgcGFyaXR5IGlmIHdlIHNhdmVkIGl0ICovCisgICAgICAgIGZsb3cgPSBmbG93c2F2ZTsK KyNpZmRlZiBPUzIKKyAgICAgICAgdHRyZXMoKTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBS ZXN0b3JlIERJQUwgZGV2aWNlICovCisjZW5kaWYgLyogT1MyICovCisjaWZkZWYgVk1TCisgICAg ICAgIGNvbmNiKChjaGFyKWVzY2FwZSk7ICAgICAgICAgICAgLyogUmVzdG9yZSBjb25zb2xlICov CisjZW5kaWYgLyogVk1TICovCisjaWZkZWYgT1MyCisgICAgICAgIHsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogU2V0IHNlc3Npb24gdGl0bGUgKi8KKyAgICAgICAgICAgIGNoYXIg KiBwLCBuYW1lWzcyXTsgICAgICAgICAvKiBpbiB3aW5kb3cgbGlzdC4gKi8KKyAgICAgICAgICAg IGNoYXIgKiBxOworICAgICAgICAgICAgaWYgKGN4ID09IFhYQU5TVykgeworICAgICAgICAgICAg ICAgIHEgPSAiSW5jb21pbmcgY2FsbCI7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg ICAgICAgIGlmIChkX25hbWUpCisgICAgICAgICAgICAgICAgICBxID0gZF9uYW1lOworICAgICAg ICAgICAgICAgIGVsc2UgaWYgKGRpYWxudW0pCisgICAgICAgICAgICAgICAgICBxID0gZGlhbG51 bTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmICh0dG5hbWVbMF0pCisgICAgICAgICAgICAgICAg ICBxID0gdHRuYW1lOworICAgICAgICAgICAgICAgIGVsc2UgcSA9ICIiOworICAgICAgICAgICAg fQorICAgICAgICAgICAgcCA9IG5hbWU7CisgICAgICAgICAgICBpZiAoc3VjY2VzcykgeworICAg ICAgICAgICAgICAgIHN0cm5jcHkobmFtZSxxLDQ4KTsKKyAgICAgICAgICAgICAgICB3aGlsZSAo KnApIHsgICAgICAgICAgICAvKiBVcHBlcmNhc2UgaXQgZm9yIGVtcGhhc2lzLiAqLworICAgICAg ICAgICAgICAgICAgICBpZiAoaXNsb3dlcigqcCkpCisgICAgICAgICAgICAgICAgICAgICAgKnAg PSB0b3VwcGVyKCpwKTsKKyAgICAgICAgICAgICAgICAgICAgcCsrOworICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICBuYW1lWzBdID0gTlVMIDsKKyAg ICAgICAgICAgIG9zMnNldHRpdGxlKChjaGFyICopIG5hbWUsIFRSVUUpOworICAgICAgICB9Cisj ZW5kaWYgLyogT1MyICovCisgICAgfQorICAgIGlmIChjeCAhPSBYWExPT0spIHsKKyAgICAgICAg aWYgKHN1Y2Nlc3MpIHsKKyAgICAgICAgICAgIGlmIChyZWxpYWJsZSA9PSBTRVRfQVVUTykgeyAv KiBJdCdzIG5vdCBhIHJlbGlhYmxlIGNvbm5lY3Rpb24uICovCisgICAgICAgICAgICAgICAgcmVs aWFibGUgPSBTRVRfT0ZGOworICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsImRvZGlhbCByZWxp YWJsZSIsIiIscmVsaWFibGUpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworI2lm bmRlZiBOT0hJTlRTCisgICAgICAgICAgICBleHRlcm4gaW50IGhpbnRzOworICAgICAgICAgICAg aWYgKGhpbnRzICYmICFxdWlldCAmJiBkaWFsc3RhICE9IDkpIHsgLyogOSA9PSBVc2VyIGludGVy cnVwdGVkICovCisgICAgICAgICAgICAgICAgZXh0ZXJuIGludCBkaWFsbWh1LCBkaWFsaG5nLCBk aWFsZHB5OworICAgICAgICAgICAgICAgIGV4dGVybiBjaGFyICogZGlhbG1zZ1tdOworICAgICAg ICAgICAgICAgIHByaW50ZigiXG4qKioqKioqKioqKioqKioqKioqKioqKioqXG4iKTsKKyAgICAg ICAgICAgICAgICBwcmludGYoIkRJQUwtY2xhc3MgY29tbWFuZCBmYWlsZWQuXG4iKTsKKyAgICAg ICAgICAgICAgICBwcmludGYoIk1vZGVtIHR5cGU6ICAlc1xuIiwgZ21kbXR5cCgpKTsKKyAgICAg ICAgICAgICAgICBwcmludGYoIkRldmljZTogICAgICAlc1xuIiwgdHRuYW1lKTsKKyAgICAgICAg ICAgICAgICBwcmludGYoIlNwZWVkOiAgICAgICAlbGRcbiIsIHNwZWVkKTsKKyAgICAgICAgICAg ICAgICBwcmludGYoIkRpYWwgc3RhdHVzOiAlZCIsZGlhbHN0YSk7CisgICAgICAgICAgICAgICAg aWYgKGRpYWxzdGEgPCAzNSAmJiBkaWFsbXNnW2RpYWxzdGFdKQorICAgICAgICAgICAgICAgICAg cHJpbnRmKCIgWyVzXSIsZGlhbG1zZ1tkaWFsc3RhXSk7CisgICAgICAgICAgICAgICAgcHJpbnRm KCJcbiIpOworICAgICAgICAgICAgICAgIGlmIChkaWFsc3RhID09IERJQV9USU1PIHx8CisgICAg ICAgICAgICAgICAgICAgIGRpYWxzdGEgPT0gRElBX05SRFkgfHwKKyAgICAgICAgICAgICAgICAg ICAoZGlhbHN0YSA+IDEzICYmIGRpYWxzdGEgIT0gRElBX0JVU1kgJiYgZGlhbHN0YSAhPSBESUFf Tk9BTikKKyAgICAgICAgICAgICAgICAgICAgKSB7CisgICAgICAgICAgICAgICAgICAgIHN3aXRj aCAoZGlhbHN0YSkgeworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRElBX1RJTU86CisgICAg ICAgICAgICAgICAgICAgICAgICBwcmludGYoCisiIC4gU0VUIERJQUwgVElNRU9VVCB0byBhIGdy ZWF0ZXIgdmFsdWUgYW5kIHRyeSBhZ2Fpbi5cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICApOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg ICAgICAgY2FzZSBESUFfTlJTUDoKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIERJQV9OUkRZ OgorICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRElBX05PSU46CisgICAgICAgICAgICAgICAg ICAgICAgICBwcmludGYoCisiIC4gSXMgdGhlIG1vZGVtIHR1cm5lZCBvbj9cbiIKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRm KAorIiAuIEFyZSB5b3UgdXNpbmcgdGhlIHJpZ2h0IGNvbW11bmljYXRpb24gcG9ydD9cbiIKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgICAgICAgICAg YnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSBESUFfTk9EVDoKKyAgICAgICAgICAg ICAgICAgICAgICAgIHByaW50ZigKKyIgLiBJcyB0aGUgbW9kZW0gY29ubmVjdGVkIHRvIHRoZSB0 ZWxlcGhvbmUgbGluZT9cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAg ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChtZG10eXAgPT0gbl9H RU5FUklDKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoCisiIC4gUGxlYXNlIGNo b29zZSBhIHNwZWNpZmljIG1vZGVtIHR5cGUgd2l0aCBTRVQgTU9ERU0gVFlQRSBhbmQgdHJ5IGFn YWluLlxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAg ICAgICAgICAgICBwcmludGYoCisiICAgIFNFVCBNT0RFTSBUWVBFID8gdG8gc2VlIHRoZSBsaXN0 IG9mIGtub3duIG1vZGVtIHR5cGVzLlxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAg ICBwcmludGYoCisiIC4gQXJlIHlvdSBzdXJlIHlvdSBoYXZlIGNob3NlbiB0aGUgYXBwcm9wcmlh dGUgbW9kZW0gdHlwZT9cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAg ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChzcGVlZCA+IDE5MjAw TCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKAorIiAuIE1heWJlIHRoZSBpbnRl cmZhY2Ugc3BlZWQgKCVsZCkgaXMgdG9vIGZhc3Q6XG4iLCBzcGVlZAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoCisiICAg IFNFVCBTUEVFRCB0byBhIGxvd2VyIHNwZWVkIGFuZCB0cnkgYWdhaW4uXG4iCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigK KyIgICAgU0VUIFNQRUVEID8gdG8gc2VlIHRoZSBsaXN0IG9mIHZhbGlkIHNwZWVkcy5cbiIKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgICAgICAgIGlmIChkaWFsaG5nKSB7CisgICAgICAgICAgICAgICAgICAgICAg ICBpZiAoZGlhbG1odSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKAorIiAuIFNF VCBNT0RFTSBIQU5HVVAtTUVUSE9EIFJTMjMyIGFuZCB0cnkgYWdhaW4uXG4iCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQor ICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoCisiIC4gU0VUIE1PREVNIEhBTkdVUC1N RVRIT0QgTU9ERU0tQ09NTUFORCBhbmQgdHJ5IGFnYWluLlxuIgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigKKyIgLiBJ ZiB0aGF0IGRvZXNuJ3Qgd29yaywgdHJ5IGFnYWluIHdpdGggU0VUIERJQUwgSEFOR1VQIE9GRi5c biIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgICAg ICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKAorIiAuIEdpdmUgYSBI QU5HVVAgb3IgU0VUIERJQUwgSEFOR1VQIE9OIGNvbW1hbmQgYW5kIHRyeSBhZ2Fpbi5cbiIKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgICAgICAgIGlmICghZGlhbGRweSkKKyAgICAgICAgICAgICAgICAgICAgICBw cmludGYoCisiIC4gVXNlIFNFVCBESUFMIERJU1BMQVkgT04gdG8gd2F0Y2ggdGhlIGRpYWxvZyBi ZXR3ZWVuIEtlcm1pdCBhbmQgbW9kZW0uXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICk7CisgICAgICAgICAgICAgICAgfQorI2lmbmRlZiBOT1NIT1cKKyAgICAgICAgICAgICAgICBw cmludGYoCisiIC4gU0hPVyBDT01NVU5JQ0FUSU9OUywgU0hPVyBNT0RFTSwgU0hPVyBESUFMIHRv IHNlZSBjdXJyZW50IHNldHRpbmdzLlxuIgorICAgICAgICAgICAgICAgICAgICAgICApOworI2Vu ZGlmIC8qIE5PU0hPVyAqLworCisjaWZuZGVmIE5PSEVMUAorICAgICAgICAgICAgICAgIHByaW50 ZigKKyIgLiBIRUxQIFNFVCBNT0RFTSwgSEVMUCBTRVQgRElBTCwgYW5kIEhFTFAgRElBTCBmb3Ig bW9yZSBpbmZvcm1hdGlvbi5cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgKTsKKyNlbmRpZiAv KiBOT0hFTFAgKi8KKyAgICAgICAgICAgICAgICBwcmludGYoIihVc2UgU0VUIEhJTlRTIE9GRiB0 byBzdXBwcmVzcyBmdXR1cmUgaGludHMuKVxuIik7CisgICAgICAgICAgICAgICAgcHJpbnRmKCIq KioqKioqKioqKioqKioqKioqKioqKioqXG5cbiIpOworICAgICAgICAgICAgfQorI2VuZGlmIC8q IE5PSElOVFMgKi8KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4oc3VjY2Vzcyk7Cit9Cisj ZW5kaWYgLyogTk9ESUFMICovCisKKy8qICBEIE8gVCBZIFAgRSAgLS0gIFR5cGUgKGRpc3BsYXkp IGEgZmlsZSB3aXRoIHZhcmlvdXMgb3B0aW9ucy4uLiAgKi8KKworI2lmZGVmIEJJR0JVRk9LCisj ZGVmaW5lIFRZUEJVRkwgMTYzODQKKyNlbHNlCisjZGVmaW5lIFRZUEJVRkwgMjU2CisjZW5kaWYg LyogQklHQlVGT0sgKi8KKworaW50IHR5cF9saW5lcyA9IDA7ICAgICAgICAgICAgICAgICAgICAg IC8qIFx2KHR5X2xuKSAqLworaW50IHR5cF9tdGNocyA9IDA7ICAgICAgICAgICAgICAgICAgICAg IC8qIFx2KHR5X2xtKSAqLworc3RhdGljIGludCB0eXBfaW50ID0gMDsgICAgICAgICAgICAgICAg IC8qIEZsYWcgaWYgVFlQRSBpbnRlcnJ1cHRlZCAqLworCisjaWZkZWYgVU5JQ09ERQorZXh0ZXJu IGludCBmY2hhcnNldCwgZmlsZW9yZGVyLCBieXRlb3JkZXIsIHVjc29yZGVyOworI2RlZmluZSBU WVBYQlVGTCBUWVBCVUZMK1RZUEJVRkwrVFlQQlVGTCs0CitzdGF0aWMgY2hhciAqIG1wID0gTlVM TDsKK3N0YXRpYyBjaGFyICogbWJ1ZiA9IE5VTEw7CitzdGF0aWMgbG9uZyB4biA9IDBMOworCitz dGF0aWMgaW50CisjaWZkZWYgQ0tfQU5TSUMKK3N0b3JlY2hhcihjaGFyIGMpCisjZWxzZQorc3Rv cmVjaGFyKGMpIGNoYXIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworICAgIGlmICghbXAp IHJldHVybigtMSk7CisgICAgaWYgKCsreG4gPiBUWVBYQlVGTCkKKyAgICAgIHJldHVybigtMSk7 CisgICAgZGVidWcoRjExMSwic3RvcmVjaGFyIHhuIixja2l0b2EoKGludCljKSx4bik7CisgICAg Km1wKysgPSBjOworICAgIHJldHVybigwKTsKK30KKyNlbmRpZiAvKiBVTklDT0RFICovCisKK3N0 YXRpYyBGSUxFICogb2ZwID0gTlVMTDsgICAgICAgICAgICAgICAvKiBGb3IgL09VVFBVVDogZmls ZSAqLworCitzdGF0aWMgaW50Cit0eXBlbGluZShidWYsbGVuLG91dGNzLG9mcCkgY2hhciAqIGJ1 ZjsgaW50IGxlbiwgb3V0Y3M7IEZJTEUgKiBvZnA7IHsKKyAgICByZWdpc3RlciBpbnQgaTsKKwor ICAgIGRlYnVnKEYwMTEsInR5cGVsaW5lIGJ1ZiIsYnVmLGxlbik7CisgICAgLyogZGVidWcoRjEw MSwidHlwZWxpbmUgb3V0Y3MiLCIiLG91dGNzKTsgKi8KKworI2lmZGVmIE9TMgorI2lmbmRlZiBO T0xPQ0FMCisjaWZkZWYgVU5JQ09ERQorICAgIC8qIEluIEs5NSBvbmx5LCB0aGUgYnVmZmVyIGlz IGd1YXJhbnRlZWQgdG8gYmUgaW4gVUNTLTIgaWYgb3V0Y3MgPj0gMC4gKi8KKyAgICAvKiBMZW4g aXMgaXRzIGxlbmd0aCBpbiBieXRlcy4gIFRoZXJlIGlzIG5vIGxpbmUgdGVybWluYXRvci4gKi8K KyAgICAvKiBvdXRjcyBpcyB0aGUgZmlsZSBjaGFyYWN0ZXItc2V0IG51bWJlciAoRkNfeHh4KSBv ZiB0aGUgdGFyZ2V0IHNldCAqLworICAgIC8qIHRoYXQgd2FzIHJlcXVlc3RlZCBieSB0aGUgdXNl ci4gKi8KKyAgICBpZiAoIWluc2VydmVyICYmICFrOTVzdGRvdXQpIHsKKyAgICAgICAgZXh0ZXJu IGludCB3aGVyZXhbXSwgd2hlcmV5W107CisgICAgICAgIGV4dGVybiB1bnNpZ25lZCBjaGFyIGNv bG9yY21kOworCisgICAgICAgIFZzY3JuV3J0VUNTMlN0ckF0dCggVkNNRCwgKHVuc2lnbmVkIHNo b3J0ICopYnVmLCBsZW4vMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJleVtWQ01E XSwgd2hlcmV4W1ZDTURdLCAmY29sb3JjbWQpOworICAgICAgICBwcmludGYoIlxyXG4iKTsKKyAg ICAgICAgcmV0dXJuKDApOworICAgIH0KKyNlbmRpZiAvKiBVTklDT0RFICovCisjZW5kaWYgLyog Tk9MT0NBTCAqLworI2VuZGlmIC8qIE9TMiAqLworCisvKiBJbiBVbml4LCBWTVMsIGV0YywgdGhl IGxpbmUgaGFzIGFscmVhZHkgYmVlbiBjb252ZXJ0ZWQgdG8gdGhlIGRlc2lyZWQgICovCisvKiBj aGFyYWN0ZXItc2V0LCBpZiBvbmUgd2FzIGdpdmVuLiAgT1IuLi4gb24gYWxsIHBsYXRmb3Jtcywg aW5jbHVkaW5nIGluICovCisvKiBLOTUsIHdlIGRvbid0IGtub3cgdGhlIGNoYXJhY3RlciBzZXQu ICBJbiBlaXRoZXIgY2FzZSB3ZSBkdW1wIHRoZSBsaW5lICovCisvKiBieXRlIGJ5IGJ5dGUgaW4g Y2FzZSBpdCBjb250YWlucyBOVUxzIChwcmludGYoKSB3b3VsZCB0cnVuY2F0ZSkuICovCisKKyNp ZmRlZiBDT01NRU5UCisgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQorICAgICAgcHV0Y2hh cihidWZbaV0pOworI2Vsc2UKKyAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKyAgICAg ICAgaWYgKG9mcCA9PSBzdGRvdXQpIHsKKyAgICAgICAgICAgIHB1dGNoYXIoYnVmW2ldKTsKKyAg ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHB1dGMoYnVmW2ldLG9mcCk7CisgICAgICAgIH0K KyAgICB9CisjZW5kaWYgLyogQ09NTUVOVCAqLworCisjaWZkZWYgSUtTRAorICAgIGlmIChpbnNl cnZlcikgeworI2lmZGVmIFVOSUNPREUKKyAgICAgICAgaWYgKG91dGNzID09IEZDX1VDUzIpIHsK KyAgICAgICAgICAgIGlmIChvZnAgPT0gc3Rkb3V0KSB7CisgICAgICAgICAgICAgICAgcHV0Y2hh cihOVUwpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwdXRjKE5VTCxv ZnApOworICAgICAgICAgICAgfQorICAgICAgICB9CisjZW5kaWYgLyogVU5JQ09ERSAqLworICAg ICAgICBpZiAob2ZwID09IHN0ZG91dCkgeworICAgICAgICAgICAgcHV0Y2hhcignXHInKTsKKyAg ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHB1dGMoJ1xyJyxvZnApOworICAgICAgICB9Cisg ICAgfQorI2VuZGlmIC8qIElLU0QgKi8KKyNpZmRlZiBVTklDT0RFCisgICAgaWYgKG91dGNzID09 IEZDX1VDUzIpIHsKKyAgICAgICAgaWYgKG9mcCA9PSBzdGRvdXQpIHsKKyAgICAgICAgICAgIHB1 dGNoYXIoTlVMKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHB1dGMoTlVMLG9mcCk7 CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgLyogVU5JQ09ERSAqLworICAgIGlmIChvZnAgPT0g c3Rkb3V0KSB7CisgICAgICAgIHB1dGNoYXIoJ1xuJyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg cHV0YygnXG4nLG9mcCk7CisgICAgfQorICAgIGZmbHVzaChzdGRvdXQpOworICAgIHJldHVybigw KTsKK30KKworc3RhdGljIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEdldCB0 cmFuc2xhdGVkIGxpbmUgKi8KK3R5cGVnZXRsaW5lKGluY3MsIG91dGNzLCBidWYsIG4pIGludCBp bmNzLCBvdXRjcywgbjsgY2hhciAqIGJ1ZjsgeworICAgIGludCB4ID0gMCwgYzAsIGMxLCBsZW4g PSAwLCBjb3VudCA9IDAsIGVvZiA9IDAsIHhsYXRlID0gMDsKKyNpZmRlZiBVTklDT0RFCisgICAg aW50IHh4biA9IC0xOworICAgIGludCB5eW4gPSAtOTsKKyAgICB4biA9IDBMOworCisjaWZkZWYg REVCVUcKKyAgICBpZiAoZGVibG9nICYmIHR5cF9saW5lcyA9PSAwKSB7CisgICAgICAgIGRlYnVn KEYxMDEsInR5cGVnZXRsaW5lIGluY3MiLCIiLGluY3MpOworICAgICAgICBkZWJ1ZyhGMTAxLCJ0 eXBlZ2V0bGluZSBvdXRjcyIsIiIsb3V0Y3MpOworICAgICAgICBkZWJ1ZyhGMTAxLCJ0eXBlZ2V0 bGluZSBmZW9sIiwiIixmZW9sKTsKKyAgICAgICAgZGVidWcoRjEwMSwidHlwZWdldGxpbmUgYnl0 ZW9yZGVyIiwiIixieXRlb3JkZXIpOworICAgICAgICBkZWJ1ZyhGMTAxLCJ0eXBlZ2V0bGluZSB1 Y3NvcmRlciAiLCIiLHVjc29yZGVyKTsKKyAgICAgICAgZGVidWcoRjExMSwidHlwZWdldGxpbmUg ZmlsZW9yZGVyIiwiMSIsZmlsZW9yZGVyKTsKKyAgICB9CisjZW5kaWYgLyogREVCVUcgKi8KKwor ICAgIGlmIChpbmNzIDwgMCkgICAgICAgICAgICAgICAgICAgICAgIC8qIFNob3VsZG4ndCBoYXBw ZW4gKi8KKyAgICAgIHJldHVybigtMik7CisKKyAgICBpZiAob3V0Y3MgPT0gLTEpICAgICAgICAg ICAgICAgICAgICAvKiBDYW4gaGFwcGVuICovCisgICAgICBvdXRjcyA9IGluY3M7CisKKyAgICBp ZiAoaW5jcyAhPSBvdXRjcyB8fCBpbmNzID09IEZDX1VDUzIpIHsgLyogU2VlIGlmIHdlIHNob3Vs ZCB0cmFuc2xhdGUgKi8KKyAgICAgICAgeGxhdGUgPSAxOworICAgICAgICBpZiAoIW1idWYpIHsg ICAgICAgICAgICAgICAgICAgIC8qIEFsbG9jYXRlIGJ1ZmZlciBpZiBub3QgYWxsb2NhdGVkICov CisgICAgICAgICAgICBtYnVmID0gKGNoYXIgKiltYWxsb2MoVFlQWEJVRkwrMSk7IC8qIHlldCAq LworICAgICAgICAgICAgaWYgKCFtYnVmKSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCJXQVJO SU5HOiBUcmFuc2xhdGlvbiBidWZmZXIgYWxsb2NhdGlvbiBmYWlsdXJlLlxuIik7CisgICAgICAg ICAgICAgICAgcHJpbnRmKCJUcmFuc2xhdGlvbiB3aWxsIGJlIHNraXBwZWQuLi5cbiIpOworICAg ICAgICAgICAgICAgIHhsYXRlID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K KyAgICBpZiAoeGxhdGUpIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBUcmFuc2xhdGluZy4u LiAqLworICAgICAgICBtcCA9IG1idWY7ICAgICAgICAgICAgICAgICAgICAgIC8qIFJlc2V0IHdv cmtpbmcgYnVmZmVyIHBvaW50ZXIgKi8KKy8qCisgIEhlcmUgd2UgY2FsbCB4Z25ieXRlKCkgaW4g YSBsb29wLCBoYXZpbmcgaXQgcmV0dXJuIFVDUy0yIGJ5dGVzLiAgSW4gSzk1LCB3ZQorICB1c2Ug VUNTLTIgZGlyZWN0bHkuICBFbHNld2hlcmUsIHdlIGZlZWQgdGhlIFVDUy0yIGJ5dGVzIGludG8g eHBuYnl0ZSgpIHRvCisgIGNvbnZlcnQgdGhlbSB0byB0aGUgZGVzaXJlZCB0YXJnZXQgY2hhcmFj dGVyIHNldC4gIEJ1dCBzaW5jZSB3ZSBhcmUgdXNpbmcKKyAgVUNTLTIsIHdlIGhhdmUgc2V2ZXJh bCBzb3VyY2VzIGZvciBjb25mdXNpb246ICgxKSB4Z25ieXRlKCkgbWlnaHQgcmV0dXJuIGluCisg IExFIG9yIEJFIGJ5dGUgb3JkZXIsIHdpdGggbm8gZXhwbGljaXQgaW5kaWNhdGlvbiBvZiB3aGF0 IHRoZSBvcmRlciBpczsgYnV0CisgICgyKSB4cG5ieXRlKCkgd2FudHMgQkU7IGJ1dCAoMykgV2lu ZG93cyB3YW50cyBMRS4KKyovCisgICAgICAgIHdoaWxlICgxKSB7CisgICAgICAgICAgICBpZiAo dHlwX2ludCkgICAgICAgICAgICAgICAgLyogUXVpdCBpZiBpbnRlcnJ1cHRlZCAqLworICAgICAg ICAgICAgICByZXR1cm4oMCk7CisgICAgICAgICAgICBjMCA9IHhnbmJ5dGUoRkNfVUNTMixpbmNz LE5VTEwpOyAvKiBDb252ZXJ0IHRvIFVDUy0yICovCisgICAgICAgICAgICBkZWJ1ZyhGMDAwLCJ0 eXBlZ2V0bGluZSBjMCIsIiIsYzApOworICAgICAgICAgICAgaWYgKGMwIDwgMCkgeyAgICAgICAg ICAgICAgIC8qIEVPRiAqLworICAgICAgICAgICAgICAgIGVvZisrOworICAgICAgICAgICAgICAg IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYzEgPSB4Z25ieXRlKEZDX1VDUzIs aW5jcyxOVUxMKTsgLyogQ29udmVydCB0byBVQ1MtMiAqLworICAgICAgICAgICAgZGVidWcoRjAw MCwidHlwZWdldGxpbmUgYzEiLCIiLGMxKTsKKyAgICAgICAgICAgIGlmIChjMSA8IDApIHsgICAg ICAgICAgICAgICAvKiBFT0YgKi8KKyAgICAgICAgICAgICAgICBlb2YrKzsKKyAgICAgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyNpZmRlZiBERUJVRworICAgICAgICAgICAgaWYg KGRlYmxvZyAmJiB0eXBfbGluZXMgPT0gMCkgeworICAgICAgICAgICAgICAgIGlmIChjb3VudCA9 PSAwKSAvKiBDaGVjayBmaWxlb3JkZXIgYWZ0ZXIgQk9NICovCisgICAgICAgICAgICAgICAgICBk ZWJ1ZyhGMTExLCJ0eXBlZ2V0bGluZSBmaWxlb3JkZXIiLCIyIixmaWxlb3JkZXIpOworICAgICAg ICAgICAgfQorI2VuZGlmIC8qIERFQlVHICovCisKKyNpZmRlZiBDT01NRU5UCisvKiBOb3cgd2Ug aGF2ZSB0aGUgdHdvIFVDUy0yIGJ5dGVzLiAgV2hpY2ggb3JkZXIgYXJlIHRoZXkgaW4/ICovCisK KyAgICAgICAgICAgIGlmIChmaWxlb3JkZXIgPiAwKSB7ICAgICAgICAvKiBMaXR0bGUgRW5kaWFu ICovCisgICAgICAgICAgICAgICAgaW50IHQ7ICAgICAgICAgICAgICAgICAgLyogU28gc3dhcCB0 aGVtICovCisgICAgICAgICAgICAgICAgZGVidWcoRjEwMCwidHlwZWdldGxpbmUgc3dhcHBpbmci LCIiLDApOworICAgICAgICAgICAgICAgIHQgPSBjMTsKKyAgICAgICAgICAgICAgICBjMSA9IGMw OworICAgICAgICAgICAgICAgIGMwID0gdDsKKyAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBDT01N RU5UICovCisgICAgICAgICAgICBpZiAoYzAgPT0gMCAmJiBjMSA9PSAweDBEKSAgLyogTm93IHNl ZSBpZiB3ZSBoYXZlIEVPTCAqLworICAgICAgICAgICAgICB5eW4gPSB4bjsKKworICAgICAgICAg ICAgaWYgKGMwID09IDAgJiYgYzEgPT0gMHgwQSkgIC8qIE5vdyBzZWUgaWYgd2UgaGF2ZSBFT0wg Ki8KKyAgICAgICAgICAgICAgeHhuID0geG47CisKKyAgICAgICAgICAgIGNvdW50Kys7ICAgICAg ICAgICAgICAgICAgICAvKiBDb3VudCBieXRlICovCisKKy8qIEdpdmUgdGhlIHR3byBieXRlcyB0 byB4cG5ieXRlKCkgaW4gQkUgb3JkZXIgKi8KKworICAgICAgICAgICAgaWYgKCh4ID0geHBuYnl0 ZShjMCxUQ19VQ1MyLG91dGNzLHN0b3JlY2hhcikpIDwgMCkgcmV0dXJuKC0xKTsKKyAgICAgICAg ICAgIGlmICgoeCA9IHhwbmJ5dGUoYzEsVENfVUNTMixvdXRjcyxzdG9yZWNoYXIpKSA8IDApIHJl dHVybigtMSk7CisKKyAgICAgICAgICAgIGlmICh4eG4gPiAtMSkgeyAgICAgICAgICAgICAvKiBI YXZlIGVuZCBvZiBsaW5lPyAqLworICAgICAgICAgICAgICAgIHhuID0geHhuOworICAgICAgICAg ICAgICAgIGlmICh5eW4gPT0geHhuIC0gMikgICAgIC8qIEFkanVzdCBmb3IgQ1JMRiAqLworICAg ICAgICAgICAgICAgICAgeG4gPSB5eW47CisgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAg ICAgICAgICAgLyogQW5kIGJyZWFrIG91dCBvZiBsb29wLiAqLworICAgICAgICAgICAgfQorICAg ICAgICB9CisgICAgICAgIG1idWZbeG5dID0gTlVMOworICAgICAgICBpZiAoeG4gPiBuKSAgICAg ICAgICAgICAgICAgICAgIC8qIENhbiB0cnVuY2F0ZSBoZXJlLi4uICovCisgICAgICAgICAgeG4g PSBuOworICAgICAgICBtZW1jcHkoYnVmLG1idWYseG4pOworICAgICAgICBkZWJ1ZyhGMDExLCJ0 eXBlZ2V0bGluZSB4bGF0ZSIsYnVmLHhuKTsKKyAgICAgICAgcmV0dXJuKChlb2YgJiYgKHhuID09 IDApKSA/IC0xIDogeG4pOworICAgIH0KKyNlbmRpZiAvKiBVTklDT0RFICovCisjaWZkZWYgQ09N TUVOVAorICAgIC8qIFdlIGNhbid0IHVzZSB0aGlzIGJlY2F1c2UsIHN0dXBpZGx5LCB6c2lubCgp IGRvZXNuJ3QgcmV0dXJuIGEgbGVuZ3RoLiAqLworICAgIC8qIEl0IGNvdWxkIGJlIGNoYW5nZWQg YnV0IHRoZW4gd2UnZCBoYXZlIHRvIGNoYW5nZSBhbGwgY2s/ZmlvLmMgbW9kdWxlcyAqLworICAg IHggPSB6c2lubChaSUZJTEUsYnVmLG4pOworI2Vsc2UKKyAgICAvKiBTbyBpbnN0ZWFkLCB3ZSBj b3B5IHpzaW5sKCkgdG8gaGVyZS4uLiAqLworICAgIC8qIEJ1dCBub3RlOiBUaGlzIGRvZXMgbm90 IG5lY2Vzc2FyaWx5IGhhbmRsZSBVQ1MtMiBhbGlnbm1lbnQgcHJvcGVybHk7ICAqLworICAgIC8q IHRoYXQncyB3aGF0IHRoZSBjb2RlIGluIHRoZSBmaXJzdCBzZWN0aW9uIG9mIHRoaXMgcm91dGlu ZSBpcyBmb3IuICovCisgICAgLyogQnV0IGl0IGRvZXMgdG9sZXJhdGUgZmlsZXMgdGhhdCBjb250 YWluIE5VTHMuICovCisgICAgeworICAgICAgICBpbnQgYTsKKyAgICAgICAgY2hhciAqczsKKwor ICAgICAgICBzID0gYnVmOworICAgICAgICBhID0gLTE7ICAgICAgICAgICAgICAgICAgICAgICAg IC8qIEN1cnJlbnQgY2hhcmFjdGVyLCBub25lIHlldC4gKi8KKyAgICAgICAgZGVidWcoRjEwMSwi dHlwZWdldGxpbmUgenNpbmwgc2ltdWxhdGlvbiIsIiIsbik7CisgICAgICAgIHdoaWxlIChuLS0p IHsgICAgICAgICAgICAgICAgICAgLyogVXAgdG8gZ2l2ZW4gbGVuZ3RoICovCisjaWZkZWYgQ09N TUVOVAorICAgICAgICAgICAgaW50IG9sZCA9IDA7CisgICAgICAgICAgICBpZiAoZmVvbCkgICAg ICAgICAgICAgICAgICAgLyogUHJldmlvdXMgY2hhcmFjdGVyICovCisgICAgICAgICAgICAgIG9s ZCA9IGE7CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAgICAgICAgaWYgKHpjaGluKFpJRklM RSwmYSkgPCAwKSB7IC8qIFJlYWQgYSBjaGFyYWN0ZXIgZnJvbSB0aGUgZmlsZSAqLworICAgICAg ICAgICAgICAgIGRlYnVnKEYxMDEsInR5cGVnZXRsaW5lIHpjaGluIGZhaWwiLCIiLGNvdW50KTsK KyAgICAgICAgICAgICAgICBpZiAoY291bnQgPT0gMCkKKyAgICAgICAgICAgICAgICAgIHggPSAt MTsgICAgICAgICAgICAgICAvKiBFT0Ygb3Igb3RoZXIgZXJyb3IgKi8KKyAgICAgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICBjb3VudCsrOworICAg ICAgICAgICAgaWYgKGZlb2wpIHsgICAgICAgICAgICAgICAgIC8qIFNpbmdsZS1jaGFyYWN0ZXIg bGluZSB0ZXJtaW5hdG9yICovCisgICAgICAgICAgICAgICAgaWYgKGEgPT0gZmVvbCkKKyAgICAg ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAg ICAgIC8qIENSTEYgbGluZSB0ZXJtaW5hdG9yICovCisjaWZkZWYgQ09NTUVOVAorLyogRGVidWcg bG9nIHNob3dzIHRoYXQgaW4gV2luZG93cywgPENSPjxMRj4gaXMgcmV0dXJuZWQgYXMgPExGPi4g Ki8KKy8qIEFwcGFyZW50bHkgd2UncmUgbm90IHJlYWRpbmcgdGhlIGZpbGUgaW4gYmluYXJ5IG1v ZGUuICovCisKKyAgICAgICAgICAgICAgICBpZiAoYSA9PSAnXDAxNScpICAgICAgICAvKiBDUiwg Z2V0IG5leHQgY2hhcmFjdGVyICovCisgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg ICAgICAgICAgICBpZiAob2xkID09ICdcMDE1JykgeyAgICAvKiBQcmV2aW91cyBjaGFyYWN0ZXIg d2FzIENSICovCisgICAgICAgICAgICAgICAgICAgIGlmIChhID09ICdcMDEyJykgeyAgLyogVGhp cyBvbmUgaXMgTEYsIHNvIHdlIGhhdmUgYSBsaW5lICovCisgICAgICAgICAgICAgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAvKiBOb3Qg TEYsIGRlcG9zaXQgQ1IgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICpzKysgPSAnXDAxNSc7 CisgICAgICAgICAgICAgICAgICAgICAgICBuLS07CisgICAgICAgICAgICAgICAgICAgICAgICBs ZW4rKzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyNlbHNlCisg ICAgICAgICAgICAgICAgaWYgKGEgPT0gTEYpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNb bGVuXSA9PSBDUikgeyAvKiBUaGlzIHByb2JhYmx5IHdvbid0IGhhcHBlbiAqLworICAgICAgICAg ICAgICAgICAgICAgICAgc1tsZW5dID0gTlVMOworICAgICAgICAgICAgICAgICAgICAgICAgcy0t OworICAgICAgICAgICAgICAgICAgICAgICAgbGVuLS07CisgICAgICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorI2VuZGlmIC8q IENPTU1FTlQgKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICpzID0gYTsgICAgICAgICAg ICAgICAgICAgICAvKiBEZXBvc2l0IGNoYXJhY3RlciAqLworICAgICAgICAgICAgcysrOworICAg ICAgICAgICAgbGVuKys7CisgICAgICAgIH0KKyAgICAgICAgKnMgPSAnXDAnOyAgICAgICAgICAg ICAgICAgICAgICAvKiBUZXJtaW5hdGUgdGhlIHN0cmluZyAqLworICAgIH0KKyNlbmRpZiAvKiBD T01NRU5UICovCisgICAgcmV0dXJuKHggPCAwID8gLTEgOiBsZW4pOworfQorCisKKyNpZm5kZWYg TUFDCitTSUdUWVAKKyNpZmRlZiBDS19BTlNJQwordHl0cmFwKGludCBmb28pICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIFRZUEUgaW50ZXJydXB0IHRyYXAgKi8KKyNlbHNlCit0eXRyYXAoZm9v KSBpbnQgZm9vOworI2VuZGlmIC8qIENLX0FOU0lDICovCisvKiB0eXRyYXAgKi8geworI2lmZGVm IF9fRU1YX18KKyAgICBzaWduYWwoU0lHSU5ULCBTSUdfQUNLKTsKKyNlbmRpZgorICAgIGRlYnVn KEYxMDAsInR5cGUgdHl0cmFwIFNJR0lOVCIsIiIsMCk7CisgICAgdHlwX2ludCA9IDE7ICAgICAg ICAgICAgICAgICAgICAgICAgLyogKE5lZWQgYXJnIGZvciBBTlNJIEMpICovCisgICAgU0lHUkVU VVJOOworfQorI2VuZGlmIC8qIE1BQyAqLworCitpbnQKK2RvdHlwZShmaWxlLCBwYWdpbmcsIGZp cnN0LCBoZWFkLCBwYXQsIHdpZHRoLCBwcmVmaXgsIGluY3MsIG91dGNzLCBvdXRmaWxlLCB6KQor ICAgIGNoYXIgKiBmaWxlLCAqIHBhdCwgKiBwcmVmaXg7IGludCBwYWdpbmcsIGZpcnN0LCBoZWFk LCB3aWR0aCwgaW5jcywgb3V0Y3M7CisgICAgY2hhciAqIG91dGZpbGU7IGludCB6OworLyogZG90 eXBlICovIHsKKyAgICBleHRlcm4gQ0tfT0ZGX1QgZmZjOworICAgIGNoYXIgYnVmW1RZUEJVRkwr Ml07CisgICAgY2hhciAqIHMgPSBOVUxMOworICAgIGludCByYyA9IDEsIGxpbmVzID0gMCwgdWNz MiA9IDA7CisgICAgY2hhciAqKiB0YWlsID0gTlVMTDsKKyAgICBpbnQgKiB0bGVuID0gTlVMTDsK KyAgICBpbnQgdGFpbGluZyA9IDAsIGNvdW50aW5nID0gMDsKKyAgICBpbnQgeCwgYywgbiwgaSwg aiwgayA9IDA7CisgICAgaW50IG51bWJlciA9IDAsIHNhdmUsIGxlbiwgcGZ4bGVuID0gMCwgZXZh bHBmeCA9IDE7CisjaWZkZWYgVU5JQ09ERQorICAgIGludCB1Y3Nib21fc2F2OworICAgIGV4dGVy biBpbnQgdWNzYm9tOworI2VuZGlmIC8qIFVOSUNPREUgKi8KKyNpZmRlZiBOVAorICAgIGludCBn dWkgPSAwOworI2VuZGlmIC8qIE5UICovCisKKyNpZm5kZWYgTUFDCisjaWZkZWYgT1MyCisjaWZk ZWYgTlQKKyAgICBTSUdUWVAgKCogb2xkc2lnKShpbnQpOyAgICAgICAgICAgICAvKiBGb3Igc2F2 aW5nIG9sZCBpbnRlcnJ1cHQgdHJhcC4gKi8KKyNlbHNlIC8qIE5UICovCisgICAgU0lHVFlQICgq IHZvbGF0aWxlIG9sZHNpZykoaW50KTsKKyNlbmRpZiAvKiBOVCAqLworI2Vsc2UgLyogT1MyICov CisgICAgU0lHVFlQICgqIG9sZHNpZykoKTsKKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBN QUMgKi8KKworI2lmZGVmIEtVSQorICAgIGlmIChvdXRmaWxlID09IChjaGFyICopMSkgeworICAg ICAgICBndWkgPSAxOworICAgICAgICBvdXRmaWxlID0gIiI7CisgICAgfQorI2VuZGlmIC8qIEtV SSAqLworCisgICAgaWYgKCFmaWxlKSBmaWxlID0gIiI7CisgICAgaWYgKCEqZmlsZSkgcmV0dXJu KC0yKTsKKworICAgIGlmIChvZnAgIT0gc3Rkb3V0KSB7ICAgICAgICAgICAgICAgIC8qIEluIGNh c2Ugb2YgcHJldmlvdXMgaW50ZXJydXB0aW9uICovCisgICAgICAgIGlmIChvZnApIGZjbG9zZShv ZnApOworICAgICAgICBvZnAgPSBzdGRvdXQ7CisgICAgfQorICAgIGlmICghb3V0ZmlsZSkgb3V0 ZmlsZSA9ICIiOworICAgIGlmIChvdXRmaWxlWzBdKSB7CisgICAgICAgIG9mcCA9IGZvcGVuKG91 dGZpbGUsInciKTsgICAgICAgLyogT3BlbiBvdXRwdXQgZmlsZSAqLworICAgICAgICBpZiAoIW9m cCkgeworICAgICAgICAgICAgcHJpbnRmKCI/Q2FuJ3Qgb3BlbiBvdXRwdXQgZmlsZSAlczogJXNc biIsb3V0ZmlsZSxja19lcnJzdHIoKSk7CisgICAgICAgICAgICBvZnAgPSBzdGRvdXQ7CisgICAg ICAgICAgICByZXR1cm4oLTkpOworICAgICAgICB9CisgICAgfQorICAgIG51bWJlciA9IHo7Cisg ICAgaWYgKG51bWJlciAmJiBwcmVmaXgpIHByZWZpeCA9IE5VTEw7CisKKyNpZmRlZiBVTklDT0RF CisgICAgdWNzYm9tX3NhdiA9IHVjc2JvbTsgICAgICAgICAgICAgICAgLyogV2UgYXJlIG5vdCBj cmVhdGluZyBhIGZpbGUgKi8KKyAgICB1Y3Nib20gPSAwOyAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBEbyBub3QgdXNlIEJPTSBieXRlcyAqLworI2VuZGlmIC8qIFVOSUNPREUgKi8KKworICAg IHR5cF9pbnQgPSAwOworCisgICAgc2F2ZSA9IGJpbmFyeTsgICAgICAgICAgICAgICAgICAgICAg LyogU2F2ZSBmaWxlIHR5cGUgKi8KKworICAgIGRlYnVnKEYxMDEsImRvdHlwZSBpbmNzIiwiIixp bmNzKTsKKyAgICBkZWJ1ZyhGMTAxLCJkb3R5cGUgb3V0Y3MiLCIiLG91dGNzKTsKKworI2lmZGVm IFVOSUNPREUKKyAgICBkZWJ1ZyhGMTExLCJkb3R5cGUgZmlsZW9yZGVyIiwiQSIsZmlsZW9yZGVy KTsKKyNpZmRlZiBPUzIKKyAgICBpZiAoIWluc2VydmVyICYmICFrOTVzdGRvdXQpCisgICAgICBv dXRjcyA9IEZDX1VDUzI7CisjZW5kaWYgLyogT1MyICovCisKKyAgICBpZiAob3V0Y3MgPT0gRkNf VUNTMikgICAgICAgICAgICAgICAvKiBPdXRwdXQgaXMgVUNTLTI/ICovCisgICAgICB1Y3MyID0g MTsKKyAgICBpZiAoZmlsZW9yZGVyIDwgMCkKKyAgICAgIGZpbGVvcmRlciA9IHVjc29yZGVyOwor ICAgIGRlYnVnKEYxMTEsImRvdHlwZSBmaWxlb3JkZXIiLCJCIixmaWxlb3JkZXIpOworI2VuZGlm IC8qIFVOSUNPREUgKi8KKworI2lmZGVmIENLX1RUR1dTSVoKKyNpZmRlZiBPUzIKKyAgICB0dGdj d3N6KCk7CisjZWxzZSAvKiBPUzIgKi8KKyAgICAvKiBDaGVjayB3aGV0aGVyIHdpbmRvdyBzaXpl IGNoYW5nZWQgKi8KKyAgICBpZiAodHRnd3NpeigpID4gMCkgeworICAgICAgICBpZiAodHRfcm93 cyA+IDAgJiYgdHRfY29scyA+IDApIHsKKyAgICAgICAgICAgIGNtZF9yb3dzID0gdHRfcm93czsK KyAgICAgICAgICAgIGNtZF9jb2xzID0gdHRfY29sczsKKyAgICAgICAgICAgIGRlYnVnKEYxMDEs ImRvdHlwZSBjbWRfcm93cyIsIiIsY21kX3Jvd3MpOworICAgICAgICAgICAgZGVidWcoRjEwMSwi ZG90eXBlIGNtZF9jb2xzIiwiIixjbWRfY29scyk7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYg LyogT1MyICovCisjZW5kaWYgLyogQ0tfVFRHV1NJWiAqLworCisgICAgaWYgKHByZWZpeCkKKyAg ICAgIHBmeGxlbiA9IHN0cmxlbihwcmVmaXgpOworCisgICAgaWYgKHBhZ2luZyA8IDApIHsgICAg ICAgICAgICAgICAgICAgLyogQ291bnQgb25seSwgZG9uJ3QgcHJpbnQgKi8KKyAgICAgICAgY291 bnRpbmcgPSAxOworICAgICAgICBwcmVmaXggPSBOVUxMOworICAgICAgICB3aWR0aCA9IDA7Cisg ICAgICAgIHBhZ2luZyA9IDA7CisgICAgfQorICAgIGlmICh1Y3MyKSAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIENydWRlLi4uICovCisgICAgICB3aWR0aCAqPSAyOworCisjaWZkZWYgT1My CisgICAgaWYgKCpmaWxlKSB7CisgICAgICAgIGNrc3RybmNweShidWYsIGZpbGUsIFRZUEJVRkwp OyAgLyogQ2hhbmdlIC8gdG8gXC4gKi8KKyAgICAgICAgcCA9IGJ1ZjsKKyAgICAgICAgd2hpbGUg KCpwKSB7CisgICAgICAgICAgICBpZiAoKnAgPT0gJy8nKSAqcCA9ICdcXCc7CisgICAgICAgICAg ICBwKys7CisgICAgICAgIH0KKyAgICAgICAgZmlsZSA9IGJ1ZjsKKyAgICB9IGVsc2UgeworICAg ICAgICByYyA9IDA7CisgICAgICAgIGdvdG8geGRvdHlwZTsKKyAgICB9CisjZW5kaWYgLyogT1My ICovCisKKyAgICBpZiAoemNoa2koZmlsZSkgPT0gLTIpIHsgICAgICAgICAgICAvKiBJdCdzIGEg ZGlyZWN0b3J5ICovCisgICAgICAgIGRlYnVnKEYxMTEsImRvdHlwZSB6Y2hraSBmYWlsdXJlIixm aWxlLC0yKTsKKyAgICAgICAgaWYgKHhjbWRzcmMgPT0gMCkgeworICAgICAgICAgICAgcHJpbnRm KCI/Tm90IGEgcmVndWxhciBmaWxlOiBcIiVzXCJcbiIsZmlsZSk7CisgICAgICAgICAgICByYyA9 IC05OworICAgICAgICB9IGVsc2UKKyAgICAgICAgICByYyA9IDA7CisgICAgICAgIGdvdG8geGRv dHlwZTsKKyAgICB9CisgICAgaWYgKCF6b3BlbmkoWklGSUxFLCBmaWxlKSkgeyAgICAgICAgLyog Tm90IGEgZGlyZWN0b3J5LCBvcGVuIGl0ICovCisgICAgICAgIGRlYnVnKEYxMTEsImRvdHlwZSB6 b3BlbmkgZmFpbHVyZSIsZmlsZSwwKTsKKyAgICAgICAgaWYgKHhjbWRzcmMgPT0gMCkgeworICAg ICAgICAgICAgcHJpbnRmKCI/Q2FuJ3Qgb3BlbiBmaWxlOiBcIiVzXCJcbiIsZmlsZSk7CisgICAg ICAgICAgICByYyA9IC05OworICAgICAgICB9IGVsc2UKKyAgICAgICAgICByYyA9IDA7CisgICAg ICAgIGdvdG8geGRvdHlwZTsKKyAgICB9CisKKyNpZm5kZWYgQU1JR0EKKyNpZm5kZWYgTUFDCisg ICAgZXJybm8gPSAwOworICAgIG9sZHNpZyA9IHNpZ25hbChTSUdJTlQsIHR5dHJhcCk7ICAgIC8q IFNhdmUgY3VycmVudCBpbnRlcnJ1cHQgdHJhcC4gKi8KKyAgICAvKiBkZWJ1ZyhGMTExLCJ0eXBl IFNJR0lOVCB0cmFwIHNldCIsY2tpdG9hKGVycm5vKSxvbGRzaWcpOyAqLworI2VuZGlmIC8qIE1B QyAqLworI2VuZGlmIC8qIEFNSUdBICovCisKKyAgICBpZiAocGFnaW5nID4gLTEpICAgICAgICAg ICAgICAgICAgICAvKiBNb3JlLXByb21wdGluZyAqLworICAgICAgeGFza21vcmUgPSBwYWdpbmc7 CisKKyAgICBiaW5hcnkgPSAwOworCisgICAgaWYgKGhlYWQgPCAwKSB7ICAgICAgICAgICAgICAg ICAgICAgLyogInRhaWwiIHdhcyByZXF1ZXN0ZWQgKi8KKyAgICAgICAgdGFpbGluZyA9IDE7ICAg ICAgICAgICAgICAgICAgICAvKiBTZXQgZmxhZyAqLworICAgICAgICBoZWFkID0gMCAtIGhlYWQ7 ICAgICAgICAgICAgICAgIC8qIEdldCBhYnNvbHV0ZSBudW1iZXIgb2YgbGluZXMgKi8KKyAgICAg ICAgaWYgKCFjb3VudGluZykgeworICAgICAgICAgICAgdGFpbCA9IChjaGFyICoqKSBtYWxsb2Mo aGVhZCAqIHNpemVvZihjaGFyICopKTsgLyogQWxsb2NhdGUgbGlzdCAqLworICAgICAgICAgICAg aWYgKCF0YWlsKSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCI/TWVtb3J5IGFsbG9jYXRpb24g ZmFpbHVyZVxuIik7CisgICAgICAgICAgICAgICAgZ290byB4ZG90eXBlOworCisgICAgICAgICAg ICB9CisgICAgICAgICAgICB0bGVuID0gKGludCAqKSBtYWxsb2MoaGVhZCAqIHNpemVvZihpbnQp KTsKKyAgICAgICAgICAgIGlmICghdGxlbikgeworICAgICAgICAgICAgICAgIHByaW50ZigiP01l bW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVcbiIpOworICAgICAgICAgICAgICAgIGdvdG8geGRvdHlw ZTsKKworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGhlYWQ7IGkr KykgeyAvKiBJbml0aWFsaXplIGVhY2ggcG9pbnRlciBpbiBsaXN0LiAqLworICAgICAgICAgICAg ICAgIHRhaWxbaV0gPSBOVUxMOworICAgICAgICAgICAgICAgIHRsZW5baV0gPSAwOworICAgICAg ICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHR5cF9saW5lcyA9IDA7CisgICAgdHlwX210 Y2hzID0gMDsKKworI2lmZGVmIFVOSUNPREUKKyAgICBpZiAob3V0Y3MgPiAtMSAmJiAoaW5jcyAh PSBvdXRjcyB8fCBpbmNzID09IEZDX1VDUzIpKSB7IC8qIFRyYW5zbGF0aW5nPyAqLworICAgICAg ICBmZmMgPSAoQ0tfT0ZGX1QpMDsKKyAgICAgICAgaW5pdHhsYXRlKGluY3Msb3V0Y3MpOyAgICAg ICAgICAvKiBTZXQgdXAgdHJhbnNsYXRpb24gZnVuY3Rpb25zICovCisgICAgfSBlbHNlCisjZW5k aWYgLyogVU5JQ09ERSAqLworICAgICAgb3V0Y3MgPSAtMTsgICAgICAgICAgICAgICAgICAgICAg IC8qIE1lYW5zIHdlIGRvbid0IGtub3cgdGhlIGNoYXJzZXQgKi8KKworICAgIGRlYnVnKEYxMDEs ImRvdHlwZSBmZmMiLCIiLGZmYyk7CisgICAgZGVidWcoRjEwMSwiZG90eXBlIG91dGNzIDIiLCIi LG91dGNzKTsKKyNpZmRlZiBVTklDT0RFCisgICAgZGVidWcoRjExMSwiZG90eXBlIGZpbGVvcmRl ciIsIkMiLGZpbGVvcmRlcik7CisjZW5kaWYgLyogVU5JQ09ERSAqLworCisgICAgLyogQWxsb3cg dGhlIGJ1ZmZlciB0byBjb250YWluIE5VTHMgKi8KKworICAgIGZvciAobiA9IGZpcnN0OworICAg ICAgICAgKGxlbiA9IHR5cGVnZXRsaW5lKGluY3Msb3V0Y3MsYnVmLFRZUEJVRkwpKSA+IC0xOwor ICAgICAgICAgbGluZXMrKworICAgICAgICAgKSB7CisgICAgICAgIGRlYnVnKEYwMTEsImRvdHlw ZSBsaW5lIixidWYsbGVuKTsKKyNpZm5kZWYgTUFDCisgICAgICAgIGlmICh0eXBfaW50KSB7ICAg ICAgICAgICAgICAgICAgLyogSW50ZXJydXB0ZWQ/ICovCisgICAgICAgICAgICB0eXBfaW50ID0g MDsKKyAgICAgICAgICAgIGRlYnVnKEYxMDEsInR5cGUgaW50ZXJydXB0ZWQgbGluZSIsIiIsbGlu ZXMpOworICAgICAgICAgICAgcHJpbnRmKCJeQy4uLlxuIik7ICAgICAgICAgIC8qIFByaW50IG1l c3NhZ2UgKi8KKyAgICAgICAgICAgIGlmIChvZnAgIT0gc3Rkb3V0KSB7ICAgICAgICAvKiBDbG9z ZSBhbnkgb3V0cHV0IGZpbGUgKi8KKyAgICAgICAgICAgICAgICBpZiAob2ZwKSBmY2xvc2Uob2Zw KTsKKyAgICAgICAgICAgICAgICBvZnAgPSBzdGRvdXQ7CisgICAgICAgICAgICB9CisgICAgICAg ICAgICBnb3RvIHh4ZG90eXBlOworICAgICAgICB9CisjZW5kaWYgLyogTUFDICovCisgICAgICAg IHR5cF9saW5lcysrOyAgICAgICAgICAgICAgICAgICAgLyogRm9yIFx2KHR5X2xuKSAqLworICAg ICAgICBpZiAocGF0KSAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1hdGNoaW5nPyAqLworICAg ICAgICAgIGlmICghY2ttYXRjaChwYXQsYnVmLDEsMSs0KSkgIC8qIExpbmUgbWF0Y2hlcyBwYXR0 ZXJuPyAqLworICAgICAgICAgICAgY29udGludWU7ICAgICAgICAgICAgICAgICAgIC8qIE5vLCBz a2lwIGl0ICovCisgICAgICAgIHR5cF9tdGNocysrOworCisgICAgICAgIGlmIChoZWFkID4gMCAm JiAhdGFpbGluZyAmJiBsaW5lcyA9PSBoZWFkKSAvKiBIYW5kbGUgL0hFQUQ6biAqLworICAgICAg ICAgIGJyZWFrOworCisgICAgICAgIGJ1ZltUWVBCVUZMKzFdID0gTlVMOyAgICAgICAgICAgLyog SnVzdCBpbiBjYXNlLi4uICovCisgICAgICAgIGlmIChwcmVmaXgpIHsgICAgICAgICAgICAgICAg ICAgLyogQWRkIHNwZWNpZmllZCBwcmVmaXggdG8gZWFjaCBsaW5lICovCisgICAgICAgICAgICBj aGFyIHBidWZbNjRdOworICAgICAgICAgICAgY2hhciAqIHBwOworICAgICAgICAgICAgcHAgPSBw cmVmaXg7CisjaWZuZGVmIE5PU1BMCisgICAgICAgICAgICBpZiAoZXZhbHBmeCkgeyAgICAgICAg ICAgICAgLyogUHJlZml4IGlzIGEgdmFyaWFibGU/ICovCisgICAgICAgICAgICAgICAgaW50IG4g PSA2MzsgICAgICAgICAgICAgLyogTWF5YmUgLSBldmFsdWF0ZSBpdCBhbmQgc2VlICovCisgICAg ICAgICAgICAgICAgY2hhciAqIHAgPSBwYnVmOworICAgICAgICAgICAgICAgIHp6c3RyaW5nKHBy ZWZpeCwmcCwmbik7IC8qIElmIHRoZXJlIGlzIG5vIGNoYW5nZSAqLworICAgICAgICAgICAgICAg IGlmICghc3RyY21wKHByZWZpeCxwYnVmKSkgeyAvKiBpdCdzIG5vdCBhIHZhcmlhYmxlICovCisg ICAgICAgICAgICAgICAgICAgIGV2YWxwZnggPSAwOyAgICAgICAgLyogU28gZG9uJ3QgZG8gdGhp cyBhZ2Fpbi4gKi8KKyAgICAgICAgICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAvKiBJ dCB3YXMgYSB2YXJpYWJsZSAqLworICAgICAgICAgICAgICAgICAgICBwcCA9IHBidWY7ICAgICAg ICAgIC8qIFNvIHN1YnN0aXR1dGUgaXRzIHZhbHVlICovCisgICAgICAgICAgICAgICAgICAgIHBm eGxlbiA9IDYzIC0gbjsgICAgLyogYW5kIGdldCBpdHMgbmV3IGxlbmd0aCAqLworICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBOT1NQTCAqLworICAgICAgICAgICAg aWYgKGxlbiArIHBmeGxlbiArIDIgPCBUWVBCVUZMKSB7CisgICAgICAgICAgICAgICAgLyogU2hp ZnQgcmlnaHQgdG8gbWFrZSByb29tIGZvciBwcmVmaXggKi8KKyAgICAgICAgICAgICAgICBtZW1j cHkoKGNoYXIgKilsaW5lK3BmeGxlbiwoY2hhciAqKWJ1ZixsZW4pOworICAgICAgICAgICAgICAg IGxzZXQoKGNoYXIgKilsaW5lLHBwLHBmeGxlbixTUCk7CisgICAgICAgICAgICAgICAgZGVidWco RjExMCwiZG90eXBlIHByZWZpeCIsbGluZSxwZnhsZW4pOworICAgICAgICAgICAgICAgIGxlbiAr PSBwZnhsZW47CisgICAgICAgICAgICAgICAgbWVtY3B5KChjaGFyICopYnVmLChjaGFyICopbGlu ZSxsZW4pOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKG51bWJlcikgeyAgICAg ICAgICAgIC8qIExpbmUgbnVtYmVycyAqLworICAgICAgICAgICAgaW50IHg7CisgICAgICAgICAg ICBzcHJpbnRmKGxpbmUsIiU0ZC4gIix0eXBfbGluZXMpOworICAgICAgICAgICAgeCA9IHN0cmxl bihsaW5lKTsKKyAgICAgICAgICAgIGxlbiArPSB4OworICAgICAgICAgICAgaWYgKGxlbiA8IExJ TkJVRlNJWikgeworICAgICAgICAgICAgICAgIG1lbWNweSgoY2hhciAqKSZsaW5lW3hdLChjaGFy ICopYnVmLGxlbik7CisgICAgICAgICAgICAgICAgbWVtY3B5KChjaGFyICopYnVmLChjaGFyICop bGluZSxsZW4pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICh3aWR0aCA+ IDAgJiYgd2lkdGggPD0gVFlQQlVGTCkgeyAvKiBUcnVuY2F0ZSBhdCBnaXZlbiB3aWR0aC4gKi8K KyAgICAgICAgICAgIGNoYXIgKiBvYnVmID0gbGluZTsgICAgICAgICAvKiBCdXQgdG8gZG8gdGhh dCBmaXJzdCB3ZSBtdXN0ICovCisgICAgICAgICAgICBpbnQgaSxrLHo7ICAgICAgICAgICAgICAg ICAgLyogZXhwYW5kIHRhYnM7IGFzc3VtZSBldmVyeSA4IGNvbHMuICovCisgICAgICAgICAgICBs aW5lWzBdID0gTlVMOworICAgICAgICAgICAgZm9yIChpID0gMCwgayA9IDA7IGkgPCB3aWR0aDsg aysrKSB7IC8qIENoYXJhY3RlciBsb29wLi4uICovCisgICAgICAgICAgICAgICAgaWYgKCFidWZb a10pICAgICAgICAgICAgLyogTm8gbW9yZSBjaGFycyBpbiB0aGlzIGxpbmUsIGRvbmUuICovCisg ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBpZiAoYnVmW2tdICE9ICdc dCcpIHsgICAvKiBJZiBpdCdzIG5vdCBhIHRhYiAqLworICAgICAgICAgICAgICAgICAgICBpZiAo aSA+PSBMSU5CVUZTSVopIC8qIENoZWNrIGZvciBvdmVyZmxvdyAqLworICAgICAgICAgICAgICAg ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBvYnVmW2krK10gPSBidWZba107IC8q IGFuZCB0aGVuIGRlcG9zaXQgaXQuICovCisgICAgICAgICAgICAgICAgICAgIG9idWZbaV0gPSBO VUw7ICAgICAgLyogS2VlcCBpdCBudWxsLXRlcm1pbmF0ZWQgKi8KKyAgICAgICAgICAgICAgICAg ICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHogPSA4IC0g KGkgJSA4KTsgICAgICAgIC8qIEl0J3MgYSB0YWIsIGV4cGFuZCBpdC4gKi8KKyAgICAgICAgICAg ICAgICBpZiAoeiA9PSAwKSB6ID0gODsKKyAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwg eiAmJiBpIDwgTElOQlVGU0laOyBqKyspIHsKKyNpZmRlZiBVTklDT0RFCisgICAgICAgICAgICAg ICAgICAgIGlmICh1Y3MyICYmICF1Y3NvcmRlcikKKyAgICAgICAgICAgICAgICAgICAgICBvYnVm W2krK10gPSBOVUw7CisjZW5kaWYgLyogVU5JQ09ERSAqLworICAgICAgICAgICAgICAgICAgICBv YnVmW2krK10gPSAnICc7CisjaWZkZWYgVU5JQ09ERQorICAgICAgICAgICAgICAgICAgICBpZiAo dWNzMiAmJiB1Y3NvcmRlcikKKyAgICAgICAgICAgICAgICAgICAgICBvYnVmW2krK10gPSBOVUw7 CisjZW5kaWYgLyogVU5JQ09ERSAqLworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ICBvYnVmW2krK10gPSBOVUw7CisgICAgICAgICAgICAgICAgb2J1ZltpXSA9IE5VTDsKKyAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIG9idWZbd2lkdGhdID0gTlVMOyAgICAgICAgICAvKiBOb3cg dHJ1bmNhdGUgYXQgZ2l2ZW4gd2lkdGguICovCisjaWZkZWYgQ09NTUVOVAorICAgICAgICAgICAg LyogVGhpcyBkb2Vzbid0IHdvcmsgZm9yIFVDUy0yIGJlY2F1c2UgaXQgY29udGFpbnMgTlVMcyAq LworICAgICAgICAgICAgY2tzdHJuY3B5KGJ1ZixvYnVmLFRZUEJVRkwpOyAvKiBhbmQgY29weSBp dCBiYWNrIChhZ2Fpbj8pICovCisjZWxzZQorICAgICAgICAgICAgbWVtY3B5KChjaGFyICopYnVm LChjaGFyICopb2J1ZixpKTsgLyogQ29weSBpdCBiYWNrICovCisjZW5kaWYgLyogQ09NTUVOVCAq LworICAgICAgICAgICAgbGVuID0gKGkgPiB3aWR0aCkgPyB3aWR0aCA6IGk7IC8qIFNwYXJlIHVz IGFub3RoZXIgc3RybGVuKCkuLi4gKi8KKyAgICAgICAgfQorICAgICAgICBpZiAodGFpbGluZykg eyAgICAgICAgICAgICAgICAgIC8qIElmIC9UQUlMOm4uLi4gKi8KKyAgICAgICAgICAgIGsgPSBs aW5lcyAlIGhlYWQ7ICAgICAgICAgICAvKiBzYXZlIHRoaXMgbGluZSBpbiBjaXJjdWxhciBidWZm ZXIgKi8KKyAgICAgICAgICAgIGlmICghY291bnRpbmcpIHsKKyAgICAgICAgICAgICAgICBpZiAo dGFpbFtrXSkgZnJlZSh0YWlsW2tdKTsKKyAgICAgICAgICAgICAgICB0YWlsW2tdID0gbWFsbG9j KGxlbisyKTsKKyAgICAgICAgICAgICAgICBpZiAoIXRhaWxba10pIHsKKyAgICAgICAgICAgICAg ICAgICAgcHJpbnRmKCI/TWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZVxuIik7CisgICAgICAgICAg ICAgICAgICAgIGdvdG8geGRvdHlwZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg ICAgbWVtY3B5KHRhaWxba10sYnVmLGxlbik7CisgICAgICAgICAgICAgICAgdGxlbltrXSA9IGxl bjsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor ICAgICAgICBpZiAoY291bnRpbmcpICAgICAgICAgICAgICAgICAgIC8qIElmIG9ubHkgY291bnRp bmcgKi8KKyAgICAgICAgICBjb250aW51ZTsgICAgICAgICAgICAgICAgICAgICAvKiB3ZSdyZSBk b25lIHdpdGggdGhpcyBsaW5lICovCisKKyAgICAgICAgaWYgKHBhZ2luZykgeyAgICAgICAgICAg ICAgICAgICAvKiBEaXNwbGF5aW5nIHRoaXMgbGluZS4uLiAqLworICAgICAgICAgICAgaW50IHU7 CisgICAgICAgICAgICB1ID0gbGVuOyAgICAgICAgICAgICAgICAgICAgLyogTGVuZ3RoIGluIEJZ VEVTICovCisgICAgICAgICAgICBpZiAodWNzMikgICAgICAgICAgICAgICAgICAgLyogSWYgb3V0 cHV0dGluZyBpbiBVQ1MtMiAqLworICAgICAgICAgICAgICB1IC89IDI7ICAgICAgICAgICAgICAg ICAgIC8qIGNvbnZlcnQgbGVuZ3RoIHRvIENIQVJBQ1RFUlMgKi8KKyAgICAgICAgICAgIHggPSAo dSAvIGNtZF9jb2xzKSArIDE7ICAgICAvKiBDcnVkZWx5IGFsbG93IGZvciB3cmFwICovCisgICAg ICAgICAgICBpZiAoY21kX3Jvd3MgPiAwICYmIGNtZF9jb2xzID4gMCkKKyAgICAgICAgICAgICAg biArPSB4OyAgICAgICAgICAgICAgICAgICAvKiBUaGlzIGFzc3VtZXMgdGVybWluYWwgd2lsbCB3 cmFwICovCisgICAgICAgIH0KKyNpZmRlZiBLVUkKKyAgICAgICAgaWYgKCBndWkgKSB7CisgICAg ICAgICAgICBpbnQgaTsKKyAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0ICogdWNoID0gKHVuc2ln bmVkIHNob3J0ICopYnVmOworICAgICAgICAgICAgZm9yICggaT0wOyBpPGxlbi8yOyBpKyspCisg ICAgICAgICAgICAgICAgZ3VpX3RleHRfcG9wdXBfYXBwZW5kKHVjaFtpXSk7CisJCQlndWlfdGV4 dF9wb3B1cF9hcHBlbmQoQ1IpOworCQkJZ3VpX3RleHRfcG9wdXBfYXBwZW5kKExGKTsKKyAgICAg ICAgfSAKKyAgICAgICAgZWxzZQorI2VuZGlmIC8qIEtVSSAqLworICAgICAgICB0eXBlbGluZShi dWYsbGVuLG91dGNzLG9mcCk7ICAgIC8qIFByaW50IGxpbmUsIGxlbmd0aCBiYXNlZCAqLworI2lm ZGVmIENLX1RUR1dTSVoKKyAgICAgICAgZGVidWcoRjEwMSwiZG90eXBlIG4iLCIiLG4pOworICAg ICAgICBpZiAocGFnaW5nID4gMCAmJiBvZnAgPT0gc3Rkb3V0KSB7IC8qIFBhdXNlIGF0IGVuZCBv ZiBzY3JlZW4gKi8KKyAgICAgICAgICAgIGlmIChjbWRfcm93cyA+IDAgJiYgY21kX2NvbHMgPiAw KSB7CisgICAgICAgICAgICAgICAgaWYgKG4gPiBjbWRfcm93cyAtIDMpIHsKKyAgICAgICAgICAg ICAgICAgICAgaWYgKCFhc2ttb3JlKCkpCisgICAgICAgICAgICAgICAgICAgICAgZ290byB4ZG90 eXBlOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgbiA9 IDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisjZW5kaWYg LyogQ0tfVFRHV1NJWiAqLworICAgIH0KKworICB4ZG90eXBlOgorICAgIGlmIChjb3VudGluZykg eworICAgICAgICBmcHJpbnRmKG9mcCwKKyAgICAgICAgICAgICAgICAiJXM6ICVkIGxpbmUlc1xu IixmaWxlLHR5cF9saW5lcyx0eXBfbGluZXMgPT0gMSA/ICIiIDogInMiKTsKKyAgICAgICAgaWYg KHBhdCkKKyAgICAgICAgICBmcHJpbnRmKG9mcCwKKyAgICAgICAgICAgICAgICAgICIlczogJWQg bWF0Y2glc1xuIixwYXQsdHlwX210Y2hzLHR5cF9tdGNocyA9PSAxID8gIiIgOiAiZXMiKTsKKyAg ICAgICAgZ290byB4eGRvdHlwZTsKKyAgICB9CisgICAgaWYgKHRhaWxpbmcgJiYgdGFpbCkgeyAg ICAgICAgICAgICAgLyogVHlwaW5nIHRhaWwgb2YgZmlsZT8gKi8KKyAgICAgICAgaWYgKGxpbmVz IDwgaGVhZCkgeyAgICAgICAgICAgICAvKiBZZXMsIHNob3cgdGhlIGxpbmVzIHdlIHNhdmVkICov CisgICAgICAgICAgICBrID0gMDsgICAgICAgICAgICAgICAgICAgICAgLyogU2hvdyBhbGwgbGlu ZXMgKi8KKyAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBNb3JlIGxp bmVzIHRoYW4gdGFpbCBudW1iZXIgKi8KKyAgICAgICAgICAgIGxpbmVzID0gazsgICAgICAgICAg ICAgICAgICAvKiBMYXN0IGxpbmUgdG8gc2hvdyAqLworICAgICAgICAgICAgaysrOyAgICAgICAg ICAgICAgICAgICAgICAgIC8qIEZpcnN0IGxpbmUgdG8gc2hvdyAqLworICAgICAgICAgICAgaWYg KGsgPj0gaGVhZCkKKyAgICAgICAgICAgICAgayA9IDA7CisgICAgICAgIH0KKyAgICAgICAgbiA9 IGZpcnN0OyAgICAgICAgICAgICAgICAgICAgICAvKiBPdXRwdXQgbGluZSBjb3VudGVyICovCisg ICAgICAgIGZvciAoaSA9IGsgOzsgaSsrKSB7ICAgICAgICAgICAgLyogTG9vcCB0aHJ1IGNpcmN1 bGFyIGJ1ZmZlciAqLworI2lmbmRlZiBNQUMKKyAgICAgICAgICAgIGlmICh0eXBfaW50KSB7ICAg ICAgICAgICAgICAvKiBJbnRlcnJ1cHRlZD8gKi8KKyAgICAgICAgICAgICAgICBwcmludGYoIl5D Li4uXG4iKTsgICAgICAvKiBQcmludCBtZXNzYWdlICovCisgICAgICAgICAgICAgICAgZ290byB4 eGRvdHlwZTsKKyAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBNQUMgKi8KKyAgICAgICAgICAgIGog PSBpICUgaGVhZDsgICAgICAgICAgICAgICAvKiBJbmRleCBvZiB0aGlzIGxpbmUgKi8KKyAgICAg ICAgICAgIHMgPSB0YWlsW2pdOyAgICAgICAgICAgICAgICAvKiBQb2ludCB0byBsaW5lIHRvIGRp c3BsYXkgKi8KKyAgICAgICAgICAgIGlmICghcykgICAgICAgICAgICAgICAgICAgICAvKiAoc2hv dWxkbid0IGhhcHBlbi4uLikgKi8KKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBp ZiAocGFnaW5nKSB7ICAgICAgICAgICAgICAgLyogQ3J1ZGVseSBhbGxvdyBmb3IgbGluZSB3cmFw ICovCisgICAgICAgICAgICAgICAgeCA9IHRsZW5bal07CisgICAgICAgICAgICAgICAgaWYgKHVj czIpIHggLz0gMjsKKyAgICAgICAgICAgICAgICB4ID0geCAvIGNtZF9jb2xzICsgMTsKKyAgICAg ICAgICAgICAgICBpZiAoY21kX3Jvd3MgPiAwICYmIGNtZF9jb2xzID4gMCkKKyAgICAgICAgICAg ICAgICAgIG4gKz0geDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHR5cGVsaW5lKHMsdGxl bltqXSxvdXRjcyxvZnApOyAvKiBEaXNwbGF5IHRoaXMgbGluZSAqLworICAgICAgICAgICAgaWYg KHBhZ2luZyAmJiBvZnAgPT0gc3Rkb3V0KSB7IC8qIFBhdXNlIGF0IGVuZCBvZiBzY3JlZW4gKi8K KyAgICAgICAgICAgICAgICBpZiAoY21kX3Jvd3MgPiAwICYmIGNtZF9jb2xzID4gMCkgeworICAg ICAgICAgICAgICAgICAgICBpZiAobiA+IGNtZF9yb3dzIC0gMykgeworICAgICAgICAgICAgICAg ICAgICAgICAgaWYgKCFhc2ttb3JlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr OworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAg ICBuID0gMDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIHRhaWxbal0gPSBOVUxMOworICAgICAgICAgICAgZnJlZShz KTsgICAgICAgICAgICAgICAgICAgIC8qIEZyZWUgdGhlIGxpbmUgKi8KKyAgICAgICAgICAgIGlm IChpICUgaGVhZCA9PSBsaW5lcykgICAgICAvKiBXaGVuIHRvIHN0b3AgKi8KKyAgICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZnJlZSgoY2hhciAqKXRhaWwpOyAgICAgICAg ICAgICAvKiBGcmVlIHRoZSBsaXN0ICovCisgICAgICAgIHRhaWwgPSBOVUxMOworICAgICAgICBp ZiAodGxlbikgZnJlZSgoY2hhciAqKXRsZW4pOworICAgICAgICB0bGVuID0gTlVMTDsKKyAgICB9 CisKKy8qIENvbWUgaGVyZSB3aGVuIGZpbmlzaGVkIG9yIG9uIFNJR0lOVCAqLworCisgIHh4ZG90 eXBlOgorI2lmbmRlZiBBTUlHQQorI2lmbmRlZiBNQUMKKyAgICBzaWduYWwoU0lHSU5ULG9sZHNp Zyk7ICAgICAgICAgICAgICAvKiBQdXQgb2xkIHNpZ25hbCBhY3Rpb24gYmFjay4gKi8KKyNlbmRp ZiAvKiBNQUMgKi8KKyNlbmRpZiAvKiBBTUlHQSAqLworICAgIGlmICh0YWlsaW5nICYmIHRhaWwp IHsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IGhlYWQ7IGkrKykgeyAgICAvKiBGcmVlIGVhY2gg bGluZS4gKi8KKyAgICAgICAgICAgIGlmICh0YWlsW2ldKQorICAgICAgICAgICAgICBmcmVlKHRh aWxbaV0pOworICAgICAgICB9CisgICAgICAgIGZyZWUoKGNoYXIgKil0YWlsKTsgICAgICAgICAg ICAgLyogRnJlZSBsaXN0IHBvaW50ZXIgKi8KKyAgICAgICAgaWYgKHRsZW4pCisgICAgICAgICAg ZnJlZSgoY2hhciAqKXRsZW4pOworICAgIH0KKyAgICB4ID0gemNsb3NlKFpJRklMRSk7ICAgICAg ICAgICAgICAgICAvKiBEb25lLCBjbG9zZSB0aGUgaW5wdXQgZmlsZSAqLworICAgIGlmIChvZnAg IT0gc3Rkb3V0KSB7ICAgICAgICAgICAgICAgIC8qIENsb3NlIGFueSBvdXRwdXQgZmlsZSAqLwor ICAgICAgICBpZiAob2ZwKSBmY2xvc2Uob2ZwKTsKKyAgICAgICAgb2ZwID0gc3Rkb3V0OworICAg IH0KKyAgICBiaW5hcnkgPSBzYXZlOyAgICAgICAgICAgICAgICAgICAgICAvKiBSZXN0b3JlIHRl eHQvYmluYXJ5IG1vZGUgKi8KKyNpZmRlZiBVTklDT0RFCisgICAgdWNzYm9tID0gdWNzYm9tX3Nh djsgICAgICAgICAgICAgICAgLyogUmVzdG9yZSBCT00gdXNhZ2UgKi8KKyNlbmRpZiAvKiBVTklD T0RFICovCisKKyNpZmRlZiBLVUkKKyAgICBpZiAoIGd1aSApCisgICAgICAgIGd1aV90ZXh0X3Bv cHVwX3dhaXQoLTEpOyAgICAgICAgLyogV2FpdCBmb3IgdXNlciB0byBjbG9zZSB0aGUgZGlhbG9n ICovCisjZW5kaWYgLyogS1VJICovCisgICAgcmV0dXJuKHJjKTsKK30KKworLyogR1JFUCBjb21t YW5kICovCisKKyNkZWZpbmUgR1JFUF9DQVNFICAwICAgICAgICAgICAgICAgICAgICAvKiAvQ0FT RSAqLworI2RlZmluZSBHUkVQX0NPVU4gIDEgICAgICAgICAgICAgICAgICAgIC8qIC9DT1VOVCAq LworI2RlZmluZSBHUkVQX0RPVEYgIDIgICAgICAgICAgICAgICAgICAgIC8qIC9ET1RGSUxFUyAq LworI2RlZmluZSBHUkVQX05BTUUgIDMgICAgICAgICAgICAgICAgICAgIC8qIC9OQU1FT05MWSAq LworI2RlZmluZSBHUkVQX05PQksgIDQgICAgICAgICAgICAgICAgICAgIC8qIC9OT0JBQ0tVUCAq LworI2RlZmluZSBHUkVQX05PRE8gIDUgICAgICAgICAgICAgICAgICAgIC8qIC9OT0RPVEZJTEVT ICovCisjZGVmaW5lIEdSRVBfTk9MSSAgNiAgICAgICAgICAgICAgICAgICAgLyogL05PTElTVCAq LworI2RlZmluZSBHUkVQX05PTUEgIDcgICAgICAgICAgICAgICAgICAgIC8qIC9JTlZFUlQgPSAv Tk9NQVRDSCAqLworI2RlZmluZSBHUkVQX05PUEEgIDggICAgICAgICAgICAgICAgICAgIC8qIC9O T1BBR0UgKi8KKyNkZWZpbmUgR1JFUF9OVU1TICA5ICAgICAgICAgICAgICAgICAgICAvKiAvTElO RU5VTUJFUlMgKi8KKyNkZWZpbmUgR1JFUF9QQUdFIDEwICAgICAgICAgICAgICAgICAgICAvKiAv UEFHRSAqLworI2RlZmluZSBHUkVQX1JFQ1UgMTEgICAgICAgICAgICAgICAgICAgIC8qIC9SRUNV UlNJVkUgKi8KKyNkZWZpbmUgR1JFUF9UWVBFIDEyICAgICAgICAgICAgICAgICAgICAvKiAvVFlQ RTogKi8KKyNkZWZpbmUgR1JFUF9PVVRQIDEzICAgICAgICAgICAgICAgICAgICAvKiAvT1VUUFVU RklMRTogKi8KKyNkZWZpbmUgR1JFUF9FWENQIDE0CQkJLyogL0VYQ0VQVDogKi8KKworc3RhdGlj IHN0cnVjdCBrZXl0YWIgZ3JlcHRhYltdID0geworICAgIHsgIi9jb3VudCIsICAgICAgICBHUkVQ X0NPVU4sIENNX0FSRyB9LAorICAgIHsgIi9kb3RmaWxlcyIsICAgICBHUkVQX0RPVEYsIDAgfSwK KyAgICB7ICIvZXhjZXB0IiwgICAgICAgR1JFUF9FWENQLCBDTV9BUkcgfSwKKyAgICB7ICIvbGlu ZW51bWJlcnMiLCAgR1JFUF9OVU1TLCAwIH0sCisgICAgeyAiL25hbWVvbmx5IiwgICAgIEdSRVBf TkFNRSwgMCB9LAorICAgIHsgIi9ub2JhY2t1cGZpbGVzIixHUkVQX05PQkssIDAgfSwKKyAgICB7 ICIvbm9jYXNlIiwgICAgICAgR1JFUF9DQVNFLCAwIH0sCisgICAgeyAiL25vZG90ZmlsZXMiLCAg IEdSRVBfTk9ETywgMCB9LAorICAgIHsgIi9ub2xpc3QiLCAgICAgICBHUkVQX05PTEksIDAgfSwK KyAgICB7ICIvbm9tYXRjaCIsICAgICAgR1JFUF9OT01BLCAwIH0sCisgICAgeyAiL25vcGFnZSIs ICAgICAgIEdSRVBfTk9QQSwgMCB9LAorICAgIHsgIi9vdXRwdXQiLCAgICAgICBHUkVQX09VVFAs IENNX0FSRyB9LAorICAgIHsgIi9wYWdlIiwgICAgICAgICBHUkVQX1BBR0UsIDAgfSwKKyAgICB7 ICIvcXVpZXQiLCAgICAgICAgR1JFUF9OT0xJLCBDTV9JTlYgfSwKKyNpZmRlZiBSRUNVUlNJVkUK KyAgICB7ICIvcmVjdXJzaXZlIiwgICAgR1JFUF9SRUNVLCAwIH0sCisjZW5kaWYgLyogUkVDVVJT SVZFICovCisgICAgeyAiL3R5cGUiLCAgICAgICAgIEdSRVBfVFlQRSwgQ01fQVJHIH0sCisgICAg eyAiIiwgMCwgMCB9Cit9Oworc3RhdGljIGludCBuZ3JlcHRhYiA9ICBzaXplb2YoZ3JlcHRhYikv c2l6ZW9mKHN0cnVjdCBrZXl0YWIpLTE7CisKK3N0YXRpYyBjaGFyICogZ3JlcF9leGNlcHQgPSBO VUxMOworCitpbnQKK2RvZ3JlcCgpIHsKKyAgICBpbnQgbWF0Y2gsIHgsIHksIGZjLCBnZXR2YWws IG1jID0gMCwgY291bnQgPSAwLCBiaWdjb3VudCA9IDA7CisgICAgaW50IGZsaW5lID0gMCwgc2xp bmUgPSAwLCB3aWxkID0gMCwgbGVuID0gMDsKKyAgICBpbnQgeG1vZGUgPSAtMSwgc2NhbiA9IDA7 CisgICAgY2hhciBjLCBuYW1lW0NLTUFYUEFUSCsxXSwgb3V0ZmlsZVtDS01BWFBBVEgrMV0sICpw LCAqcywgKmN2ID0gTlVMTDsKKyAgICBGSUxFICogZnAgPSBOVUxMOworCisgICAgaW50ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU3dpdGNoIHZhbHVlcyBhbmQgZGVmYXVsdHMg Ki8KKyAgICAgIGdyX2NvdW4gPSAwLAorICAgICAgZ3JfbmFtZSA9IDAsCisgICAgICBncl9ub2Jr ID0gMCwKKyAgICAgIGdyX2Nhc2UgPSAxLAorICAgICAgZ3Jfbm9saSA9IDAsCisgICAgICBncl9u b21hID0gMCwKKyAgICAgIGdyX251bXMgPSAwLAorICAgICAgZ3JfZXhjcCA9IDAsCisgICAgICBn cl9wYWdlID0geGFza21vcmU7CisKKyAgICBzdHJ1Y3QgRkRCIHN3LCBmbDsKKworICAgIGdfbWF0 Y2hkb3QgPSBtYXRjaGRvdDsgICAgICAgICAgICAgIC8qIFNhdmUgZ2xvYmFsIG1hdGNoZG90IHNl dHRpbmcgKi8KKyAgICBvdXRmaWxlWzBdID0gTlVMOworICAgIG1ha2VzdHIoJmdyZXBfZXhjZXB0 LE5VTEwpOworCisgICAgaWYgKG9mcCAhPSBzdGRvdXQpIHsgICAgICAgICAgICAgICAgLyogSW4g Y2FzZSBvZiBwcmV2aW91cyBpbnRlcnJ1cHRpb24gKi8KKyAgICAgICAgaWYgKG9mcCkgZmNsb3Nl KG9mcCk7CisgICAgICAgIG9mcCA9IHN0ZG91dDsKKyAgICB9CisgICAgY21mZGJpKCZzdywgICAg ICAgICAgICAgICAgICAgICAgICAgLyogRmlyc3QgRkRCIC0gY29tbWFuZCBzd2l0Y2hlcyAqLwor ICAgICAgICAgICBfQ01LRVksICAgICAgICAgICAgICAgICAgICAgIC8qIGZjb2RlICovCisgICAg ICAgICAgICJTdHJpbmcgb3IgcGF0dGVybiB0byBzZWFyY2ggZm9yLCBvciBzd2l0Y2giLAorICAg ICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRlZmF1bHQgKi8KKyAgICAg ICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBzdHJpbmcgZGF0YSAq LworICAgICAgICAgICBuZ3JlcHRhYiwgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVy aWMgZGF0YSAxOiB0Ymwgc2l6ZSAqLworICAgICAgICAgICA0LCAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAyOiA0ID0gY21zd2kgKi8KKyAgICAgICAgICAg eHhzdHJpbmcsICAgICAgICAgICAgICAgICAgICAvKiBQcm9jZXNzaW5nIGZ1bmN0aW9uICovCisg ICAgICAgICAgIGdyZXB0YWIsICAgICAgICAgICAgICAgICAgICAgLyogS2V5d29yZCB0YWJsZSAq LworICAgICAgICAgICAmZmwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBvaW50ZXIgdG8g bmV4dCBGREIgKi8KKyAgICAgICAgICAgKTsKKyAgICBjbWZkYmkoJmZsLCAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBBbnl0aGluZyB0aGF0IGRvZXNuJ3QgbWF0Y2ggKi8KKyAgICAgICAgICAg X0NNRkxELCAgICAgICAgICAgICAgICAgICAgICAvKiBmY29kZSAqLworICAgICAgICAgICAiIiwg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGhscG1zZyAqLworICAgICAgICAgICAiIiwgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIGRlZmF1bHQgKi8KKyAgICAgICAgICAgIiIsICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBzdHJpbmcgZGF0YSAqLworICAgICAgICAgICAw LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAxICovCisg ICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBk YXRhIDIgKi8KKyAgICAgICAgICAgeHhzdHJpbmcsCQkJLyogeHhzdHJpbmcgKi8KKyAgICAgICAg ICAgTlVMTCwKKyAgICAgICAgICAgTlVMTAorICAgICAgICAgICApOworICAgIHdoaWxlICgxKSB7 ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBhcnNlIDAgb3IgbW9yZSBzd2l0Y2hlcyAqLwor ICAgICAgICB4ID0gY21mZGIoJnN3KTsgICAgICAgICAgICAgICAgIC8qIFBhcnNlIHNvbWV0aGlu ZyAqLworICAgICAgICBpZiAoeCA8IDApCisgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICBp ZiAoY21yZXN1bHQuZmNvZGUgIT0gX0NNS0VZKSAgIC8qIEJyZWFrIG91dCBpZiBub3QgYSBzd2l0 Y2ggKi8KKyAgICAgICAgICBicmVhazsKKyAgICAgICAgYyA9IGNtZ2JyaygpOworICAgICAgICBp ZiAoKGdldHZhbCA9IChjID09ICc6JyB8fCBjID09ICc9JykpICYmICEoY21na3dmbGdzKCkgJiBD TV9BUkcpKSB7CisgICAgICAgICAgICBwcmludGYoIj9UaGlzIHN3aXRjaCBkb2VzIG5vdCB0YWtl IGFuIGFyZ3VtZW50XG4iKTsKKyAgICAgICAgICAgIHJldHVybigtOSk7CisgICAgICAgIH0KKyAg ICAgICAgaWYgKChjbXJlc3VsdC5ucmVzdWx0ICE9IEdSRVBfQ09VTikgJiYgIWdldHZhbCAmJgor ICAgICAgICAgICAgKGNtZ2t3ZmxncygpICYgQ01fQVJHKSkgeworICAgICAgICAgICAgcHJpbnRm KCI/VGhpcyBzd2l0Y2ggcmVxdWlyZXMgYW4gYXJndW1lbnRcbiIpOworICAgICAgICAgICAgcmV0 dXJuKC05KTsKKyAgICAgICAgfQorICAgICAgICBzd2l0Y2ggKGNtcmVzdWx0Lm5yZXN1bHQpIHsK KyAgICAgICAgICBjYXNlIEdSRVBfQ09VTjogeworICAgICAgICAgICAgICBncl9jb3VuKys7Cisg ICAgICAgICAgICAgIGlmIChnZXR2YWwpIHsKKyAgICAgICAgICAgICAgICAgIGlmICgoeCA9IGNt ZmxkKCJWYXJpYWJsZSBmb3IgcmVzdWx0IiwiIiwmcyxOVUxMKSkgPCAwKQorICAgICAgICAgICAg ICAgICAgICByZXR1cm4oeCk7CisgICAgICAgICAgICAgICAgICBtYWtlc3RyKCZjdixzKTsKKyAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAgICAg ICAgY2FzZSBHUkVQX0NBU0U6IGdyX2Nhc2U9MDsgYnJlYWs7CisgICAgICAgICAgY2FzZSBHUkVQ X05BTUU6IGdyX25hbWUrKzsgZ3Jfbm9saT0wOyBicmVhazsKKyAgICAgICAgICBjYXNlIEdSRVBf Tk9CSzogZ3Jfbm9iaysrOyBicmVhazsKKyAgICAgICAgICBjYXNlIEdSRVBfTk9MSTogZ3Jfbm9s aSsrOyBncl9uYW1lPTA7IGdyX251bXM9MDsgYnJlYWs7CisgICAgICAgICAgY2FzZSBHUkVQX05P TUE6IGdyX25vbWErKzsgYnJlYWs7CisgICAgICAgICAgY2FzZSBHUkVQX05PUEE6IGdyX3BhZ2U9 MDsgYnJlYWs7CisgICAgICAgICAgY2FzZSBHUkVQX05VTVM6IGdyX251bXMrKzsgZ3Jfbm9saT0w OyBicmVhazsKKyAgICAgICAgICBjYXNlIEdSRVBfUEFHRTogZ3JfcGFnZSsrOyBncl9ub2xpPTA7 IGJyZWFrOworICAgICAgICAgIGNhc2UgR1JFUF9OT0RPOgorICAgICAgICAgICAgbWF0Y2hkb3Qg PSAwOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBHUkVQX0RPVEY6CisgICAg ICAgICAgICBtYXRjaGRvdCA9IDE7CisgICAgICAgICAgICBicmVhazsKKyNpZmRlZiBSRUNVUlNJ VkUKKyAgICAgICAgICBjYXNlIEdSRVBfUkVDVToKKyAgICAgICAgICAgIHJlY3Vyc2l2ZSA9IDE7 CisgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBSRUNVUlNJVkUgKi8KKyAgICAgICAgICBj YXNlIEdSRVBfVFlQRTogeworICAgICAgICAgICAgICBleHRlcm4gc3RydWN0IGtleXRhYiB0eHRi aW5bXTsKKyAgICAgICAgICAgICAgaWYgKCh4ID0gY21rZXkodHh0YmluLDMsIiIsIiIseHhzdHJp bmcpKSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICAgICAgICBpZiAo eCA9PSAyKSB7ICAgICAgICAgICAgIC8qIEFMTCAqLworICAgICAgICAgICAgICAgICAgeG1vZGUg PSAtMTsKKyAgICAgICAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAvKiBURVhUIG9y IEJJTkFSWSBvbmx5ICovCisgICAgICAgICAgICAgICAgICB4bW9kZSA9IHg7CisgICAgICAgICAg ICAgICAgICBzY2FuID0gMTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBicmVhazsK KyAgICAgICAgICB9CisgICAgICAgICAgY2FzZSBHUkVQX09VVFA6ICAgICAgICAgICAgICAgLyog U2VuZCBvdXRwdXQgdG8gZmlsZSAqLworICAgICAgICAgICAgaWYgKCh4ID0gY21vZmkoIkZpbGUg Zm9yIEdSRVAnZCBsaW5lcyIsIiIsJnMseHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgICAgIHJl dHVybih4KTsKKyAgICAgICAgICAgIGNrc3RybmNweShvdXRmaWxlLHMsQ0tNQVhQQVRIKTsKKyAg ICAgICAgICAgIGJyZWFrOworCSAgY2FzZSBHUkVQX0VYQ1A6CQkvKiBFeGNlcHRpb24gcGF0dGVy biAqLworCSAgICBpZiAoZ2V0dmFsKSB7CisJCWlmICgoeCA9IGNtZmxkKCJFeGNlcHRpb24gcGF0 dGVybiIsCisJCQkgICAgICAgIiIsCisJCQkgICAgICAgJnMsCisJCQkgICAgICAgeHhzdHJpbmcK KwkJCSAgICAgICApKSA8IDApCisJCSAgcmV0dXJuKHgpOworCQlncl9leGNwKys7CisJCW1ha2Vz dHIoJmdyZXBfZXhjZXB0LHMpOworCSAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKG91 dGZpbGVbMF0pIHsKKyAgICAgICAgb2ZwID0gZm9wZW4ob3V0ZmlsZSwidyIpOyAgICAgICAvKiBP cGVuIG91dHB1dCBmaWxlICovCisgICAgICAgIGlmICghb2ZwKSB7CisgICAgICAgICAgICBwcmlu dGYoIj9DYW4ndCBvcGVuIG91dHB1dCBmaWxlICVzOiAlc1xuIixvdXRmaWxlLGNrX2VycnN0cigp KTsKKyAgICAgICAgICAgIG9mcCA9IHN0ZG91dDsKKyAgICAgICAgICAgIHJldHVybigtOSk7Cisg ICAgICAgIH0KKyAgICAgICAgZ3JfcGFnZSA9IDA7CisgICAgfQorICAgIHMgPSBjbXJlc3VsdC5z cmVzdWx0OworICAgIHMgPSBicnN0cmlwKHMpOyAgICAgICAgICAgICAgICAgICAgIC8qIFN0cmlw IGJyYWNlcyBmcm9tIHBhdHRlcm4gKi8KKyAgICBpZiAoISpzKSB7CisgICAgICAgIHByaW50Zigi P1BhdHRlcm4gcmVxdWlyZWRcbiIpOworICAgICAgICByZXR1cm4oLTkpOworICAgIH0KKyAgICBj a3N0cm5jcHkodG1wYnVmLHMsVE1QQlVGU0laKTsgICAgICAvKiBTYXZlIHBhdHRlcm4gKi8KKyAg ICBpZiAoKHggPSBjbWlmaSgiRmlsZShzKSB0byBzZWFyY2giLCIiLCZzLCZ3aWxkLHh4c3RyaW5n KSkgPCAwKSB7CisgICAgICAgIGlmICh4ID09IC0zKSB7CisgICAgICAgICAgICBwcmludGYoIj9G aWxlIHNwZWNpZmljYXRpb24gcmVxdWlyZWRcbiIpOworICAgICAgICAgICAgeCA9IC05OworICAg ICAgICB9CisgICAgICAgIHJldHVybih4KTsKKyAgICB9CisgICAgcyA9IGJyc3RyaXAocyk7ICAg ICAgICAgICAgICAgICAgICAgLyogU3RyaXAgYnJhY2VzIGZyb20gZmlsZW5hbWUgKi8KKyNpZm5k ZWYgWlhSRVdJTkQKKyAgICBja3N0cm5jcHkobGluZSxzLExJTkJVRlNJWik7CisjZW5kaWYgLyog WlhSRVdJTkQgKi8KKyAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApCisgICAgICByZXR1cm4oeSk7 CisKKyAgICBpZiAoZ3JfcGFnZSA+IC0xKQorICAgICAgeGFza21vcmUgPSBncl9wYWdlOyAgICAg ICAgICAgICAgIC8qIFBhZ2luZy4uLiAqLworCisgICAgcCA9IHRtcGJ1ZjsgICAgICAgICAgICAg ICAgICAgICAgICAgLyogUG9pbnQgdG8gcGF0dGVybiAqLworI2lmZGVmIENPTU1FTlQKKy8qIE5v dyB0aGlzIGlzIGRvbmUgaW4gY2ttYXRjaCAqLworICAgIGlmICgqcCA9PSAnXicpIHsgICAgICAg ICAgICAgICAgICAgIC8qICdeJyBhbmNob3JzIHBhdHRlcm4gdG8gYmVnaW5uaW5nICovCisgICAg ICAgIHArKzsKKyAgICB9IGVsc2UgaWYgKCpwICE9ICcqJykgeyAgICAgICAgICAgICAvKiBPdGhl cndpc2UgcHJlcGVuZCBpbXBsaWVkICcqJyAqLworICAgICAgICB0bXBidWZbMF0gPSAnKic7Cisg ICAgICAgIHAgPSB0bXBidWY7CisgICAgfQorICAgIHggPSBzdHJsZW4ocCk7ICAgICAgICAgICAg ICAgICAgICAgIC8qIEdldCBsZW5ndGggb2YgcmVzdWx0ICovCisgICAgaWYgKHggPiAwICYmIHgg PCBUTVBCVUZTSVopIHsgICAgICAgLyogJyQnIGF0IGVuZCBhbmNob3JzIHBhdHRlcm4gdG8gZW5k ICovCisgICAgICAgIGlmIChwW3gtMV0gPT0gJyQnKSB7CisgICAgICAgICAgICBwW3gtMV0gPSBO VUw7CisgICAgICAgIH0gZWxzZSBpZiAocFt4LTFdICE9ICcqJykgeworICAgICAgICAgICAgcFt4 XSA9ICcqJzsKKyAgICAgICAgICAgIHBbeCsxXSA9IE5VTDsKKyAgICAgICAgfQorICAgIH0KKyNl bmRpZiAvKiBDT01NRU5UICovCisgICAgZGVidWcoRjExMSwiZ3JlcCBwYXQiLHAseCk7CisKKyNp ZmRlZiBaWFJFV0lORAorICAgIGZjID0genhyZXdpbmQoKTsgICAgICAgICAgICAgICAgICAgIC8q IFJld2luZCB0aGUgZmlsZSBsaXN0ICovCisjZWxzZQorICAgIHsKKyAgICAgICAgaW50IGZsYWdz ID0gWlhfRklMT05MWTsgICAgICAgICAvKiBFeHBhbmQgZmlsZSBsaXN0ICovCisgICAgICAgIGlm IChtYXRjaGRvdCkgIGZsYWdzIHw9IFpYX01BVENIRE9UOworICAgICAgICBpZiAocmVjdXJzaXZl KSBmbGFncyB8PSBaWF9SRUNVUlNFOworICAgICAgICBmYyA9IG56eHBhbmQobGluZSxmbGFncyk7 CisgICAgfQorI2VuZGlmIC8qIFpYUkVXSU5EICovCisjaWZkZWYgVU5JWAorICAgIHNoX3NvcnQo bXRjaHMsTlVMTCxmYywwLDAsZmlsZWNhc2UpOworI2VuZGlmIC8qIFVOSVggKi8KKworICAgIGRl YnVnKEYxMDEsImdyZXAgY21kX3Jvd3MiLCIiLGNtZF9yb3dzKTsKKyAgICBkZWJ1ZyhGMTAxLCJn cmVwIGNtZF9jb2xzIiwiIixjbWRfY29scyk7CisKKyAgICB3aGlsZSAoMSkgeyAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBMb29wIGZvciBlYWNoIGZpbGUgKi8KKyAgICAgICAgem5leHQobmFt ZSk7ICAgICAgICAgICAgICAgICAgICAvKiBHZXQgbmV4dCBmaWxlICovCisgICAgICAgIGlmICgh bmFtZVswXSkgICAgICAgICAgICAgICAgICAgLyogTm8gbW9yZSwgZG9uZSAqLworICAgICAgICAg IGJyZWFrOworICAgICAgICBpZiAoZ3Jfbm9iaykgICAgICAgICAgICAgICAgICAgIC8qIFNraXBw aW5nIGJhY2t1cCBmaWxlcz8gKi8KKyAgICAgICAgICBpZiAoY2ttYXRjaCgiKi5+WzEtOV0qfiIs bmFtZSwxLDEpKSAvKiBCYWNrdXAgZmlsZT8gKi8KKyAgICAgICAgICAgIGNvbnRpbnVlOyAgICAg ICAgICAgICAgICAgICAvKiBZZXMsIHNraXAgKi8KKyAgICAgICAgaWYgKHNjYW4pIHsgICAgICAg ICAgICAgICAgICAgICAvKiAvVFlQRTogZ2l2ZW4/ICovCisgICAgICAgICAgICBzd2l0Y2ggKHNj YW5maWxlKG5hbWUsJnksbnNjYW5maWxlKSkgeyAvKiBZZXMsIHNjYW4gdGhlIGZpbGUgKi8KKyAg ICAgICAgICAgICAgY2FzZSBGVF9CSU46CisgICAgICAgICAgICAgICAgaWYgKHhtb2RlICE9IDEp CisgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgICAgICAgY2FzZSBGVF9URVhUOgorICAgICAgICAgICAgICBjYXNlIEZUXzdCSVQ6Cisg ICAgICAgICAgICAgIGNhc2UgRlRfOEJJVDoKKyNpZmRlZiBVTklDT0RFCisgICAgICAgICAgICAg IGNhc2UgRlRfVVRGODoKKyAgICAgICAgICAgICAgY2FzZSBGVF9VQ1MyOgorI2VuZGlmIC8qIFVO SUNPREUgKi8KKyAgICAgICAgICAgICAgICBpZiAoeG1vZGUgIT0gMCkKKyAgICAgICAgICAgICAg ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGZwID0gZm9w ZW4obmFtZSwiciIpOyAgICAgICAgICAgLyogT3BlbiAqLworICAgICAgICBpZiAoIWZwKSAgICAg ICAgICAgICAgICAgICAgICAgIC8qIENhbid0ICovCisgICAgICAgICAgY29udGludWU7ICAgICAg ICAgICAgICAgICAgICAgLyogU2tpcCAqLworICAgICAgICBjb3VudCA9IDA7ICAgICAgICAgICAg ICAgICAgICAgIC8qIE1hdGNoIGNvdW50LCB0aGlzIGZpbGUgKi8KKyAgICAgICAgZmxpbmUgPSAw OyAgICAgICAgICAgICAgICAgICAgICAvKiBMaW5lIGNvdW50LCB0aGlzIGZpbGUgKi8KKyAgICAg ICAgd2hpbGUgKDEpIHsgICAgICAgICAgICAgICAgICAgICAvKiBMb29wIGZvciBlYWNoIGxpbmUg Ki8KKyAgICAgICAgICAgIGlmIChmZ2V0cyhsaW5lLExJTkJVRlNJWixmcCkgPT0gTlVMTCkgeyAv KiBHZXQgbmV4dCBsaW5lICovCisgICAgICAgICAgICAgICAgZmNsb3NlKGZwKTsKKyAgICAgICAg ICAgICAgICBmcCA9IE5VTEw7CisJCWRlYnVnKEYxMDAsIkdSRVAgRU9GIiwiIiwwKTsKKyAgICAg ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZsaW5lKys7ICAg ICAgICAgICAgICAgICAgICAvKiBDb3VudCB0aGlzIGxpbmUgKi8KKyAgICAgICAgICAgIGxpbmVb TElOQlVGU0laXSA9IE5VTDsgICAgICAvKiBNYWtlIHN1cmUgaXQncyB0ZXJtaW5hdGVkICovCisJ ICAgIGRlYnVnKEYxMTEsIkdSRVAiLGxpbmUsZmxpbmUpOworICAgICAgICAgICAgbGVuID0gKGlu dClzdHJsZW4obGluZSk7ICAgIC8qIEdldCBsZW5ndGggKi8KKyAgICAgICAgICAgIHdoaWxlIChs ZW4gPiAwICYmIChsaW5lW2xlbi0xXSA9PSAnXG4nIHx8IGxpbmVbbGVuLTFdID09ICdccicpKQor ICAgICAgICAgICAgICBsaW5lWy0tbGVuXSA9IE5VTDsgICAgICAgIC8qIENob3Agb2ZmIHRlcm1p bmF0b3JzICovCisgICAgICAgICAgICBtYXRjaCA9IGNrbWF0Y2gocCxsaW5lLGdyX2Nhc2UsMSs0 KTsgLyogTWF0Y2ggYWdhaW5zdCBwYXR0ZXJuICovCisJICAgIGlmIChtYXRjaCAmJiBncl9leGNw KSB7CisJCWlmIChja21hdGNoKGdyZXBfZXhjZXB0LGxpbmUsZ3JfY2FzZSwxKzQpKQorCQkgICAg bWF0Y2ggPSAwOworCSAgICB9CisgICAgICAgICAgICBpZiAoZ3Jfbm9tYSkgICAgICAgICAgICAg ICAgLyogSW52ZXJ0IG1hdGNoIHNlbnNlIGlmIHJlcXVlc3RlZCAqLworICAgICAgICAgICAgICBt YXRjaCA9ICFtYXRjaDsKKyAgICAgICAgICAgIGlmIChtYXRjaCkgeyAgICAgICAgICAgICAgICAv KiBIYXZlIGEgbWF0Y2hpbmcgbGluZSAqLworICAgICAgICAgICAgICAgIG1jKys7ICAgICAgICAg ICAgICAgICAgIC8qIFRvdGFsIG1hdGNoIGNvdW50ICovCisgICAgICAgICAgICAgICAgY291bnQr KzsgICAgICAgICAgICAgICAgLyogTWF0Y2ggY291bnQgdGhpcyBmaWxlICovCisgICAgICAgICAg ICAgICAgaWYgKGdyX25hbWUpIHsgICAgICAgICAgLyogRG9uJ3QgY2FyZSBob3cgbWFueSBsaW5l cyBtYXRjaCAqLworICAgICAgICAgICAgICAgICAgICBmY2xvc2UoZnApOyAgICAgICAgIC8qIENs b3NlIHRoZSBmaWxlICovCisgICAgICAgICAgICAgICAgICAgIGZwID0gTlVMTDsgICAgICAgICAg LyogYW5kIHF1aXQgdGhlIGxpbmUtcmVhZGluZyBsb29wLiAqLworICAgICAgICAgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGdyX2NvdW4g fHwgZ3Jfbm9saSkgLyogTm90IGxpc3RpbmcgZWFjaCBsaW5lICovCisgICAgICAgICAgICAgICAg ICBjb250aW51ZTsgICAgICAgICAgICAgLyogc28gZG9uJ3QgcHJpbnQgYW55dGhpbmcgbm93LiAq LworICAgICAgICAgICAgICAgIGlmICh3aWxkKSB7CQkvKiBJZiBzZWFyY2hpbmcgbXVsdGlwbGUg ZmlsZXMgKi8KKyAgICAgICAgICAgICAgICAgICAgZnByaW50ZihvZnAsIiVzOiIsbmFtZSk7IC8q IHByaW50IGZpbGVuYW1lLiAqLworICAgICAgICAgICAgICAgICAgICBsZW4gKz0gKGludClzdHJs ZW4obmFtZSkgKyAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoZ3Jf bnVtcykgeyAgICAgICAgICAvKiBJZiBsaW5lIG51bWJlcnMgd2FudGVkICovCisgICAgICAgICAg ICAgICAgICAgIGNoYXIgbmJ1ZlszMl07CisgICAgICAgICAgICAgICAgICAgIGxlbiArPSBja21h a21zZyhuYnVmLDMyLGNraXRvYShmbGluZSksIjoiLE5VTEwsTlVMTCk7CisgICAgICAgICAgICAg ICAgICAgIGZwcmludGYob2ZwLCIlcyIsbmJ1Zik7CisgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICAgIGlmIChjbWRfcm93cyA+IDAgJiYgY21kX2NvbHMgPiAwKQorICAgICAgICAgICAg ICAgICAgc2xpbmUgKz0gKGxlbiAvIGNtZF9jb2xzKSArIDE7CisgICAgICAgICAgICAgICAgZnBy aW50ZihvZnAsIiVzXG4iLGxpbmUpOyAvKiBQcmludCB0aGUgbGluZS4gKi8KKyAgICAgICAgICAg ICAgICBpZiAoc2xpbmUgPiBjbWRfcm93cyAtIDMpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg KCFhc2ttb3JlKCkpIGdvdG8geGdyZXA7IGVsc2Ugc2xpbmUgPSAwOworICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoIWdyX25vbGkpIHsJCQkv KiBJZiBub3Qgbm90IGxpc3RpbmcuLi4gKi8KKyAgICAgICAgICAgIHggPSAwOworICAgICAgICAg ICAgaWYgKGdyX2NvdW4pIHsgICAgICAgICAgICAgIC8qIFNob3cgbWF0Y2ggY291bnQgb25seSAq LworICAgICAgICAgICAgICAgIGZwcmludGYob2ZwLCIlczolZFxuIixuYW1lLGNvdW50KTsKKyAg ICAgICAgICAgICAgICB4Kys7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGdyX25hbWUgJiYgY291 bnQgPiAwKSB7IC8qIFNob3cgbmFtZSBvbmx5ICovCisgICAgICAgICAgICAgICAgZnByaW50Zihv ZnAsIiVzXG4iLG5hbWUpOworICAgICAgICAgICAgICAgIHgrKzsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIGlmICh4ID4gMCkgeworICAgICAgICAgICAgICAgIGlmICgrK3NsaW5lID4gY21k X3Jvd3MgLSAzKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghYXNrbW9yZSgpKSBnb3RvIHhn cmVwOyBlbHNlIHNsaW5lID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg ICAgICAgIH0KKyAgICAgICAgYmlnY291bnQgKz0gY291bnQ7ICAgICAgICAgICAgICAvKiBPdmVy YWxsIGNvdW50ICovCisgICAgfQorICB4Z3JlcDoKKyNpZm5kZWYgTk9TUEwKKyAgICBpZiAoZ3Jf Y291biAmJiBjdikgeyAgICAgICAgICAgICAgICAvKiAvQ09VTlQ6YmxhaCAqLworICAgICAgICBh ZGRtYWMoY3YsY2tpdG9hKGJpZ2NvdW50KSk7ICAgIC8qIHNldCB0aGUgdmFyaWFibGUgKi8KKyAg ICAgICAgbWFrZXN0cigmY3YsTlVMTCk7ICAgICAgICAgICAgICAvKiBmcmVlIHRoaXMgKi8KKyAg ICB9CisjZW5kaWYgLyogTk9TUEwgKi8KKyAgICBpZiAoZnApIGZjbG9zZShmcCk7ICAgICAgICAg ICAgICAgICAvKiBjbG9zZSBpbnB1dCBmaWxlIGlmIHN0aWxsIG9wZW4gKi8KKyAgICBpZiAob2Zw ICE9IHN0ZG91dCkgeyAgICAgICAgICAgICAgICAvKiBDbG9zZSBhbnkgb3V0cHV0IGZpbGUgKi8K KyAgICAgICAgaWYgKG9mcCkgZmNsb3NlKG9mcCk7CisgICAgICAgIG9mcCA9IHN0ZG91dDsKKyAg ICB9CisgICAgcmV0dXJuKHN1Y2Nlc3MgPSBtYyA/IDEgOiAwKTsKK30KKworLyogU3lzdGVtLWlu ZGVwZW5kZW50IGRpcmVjdG9yeSAqLworCitzdGF0aWMgY2hhciAqKiBkaXJsaXN0ID0gTlVMTDsK K3N0YXRpYyBpbnQgbmRpcmxpc3QgPSAwOworCitzdGF0aWMgVk9JRAorZnJlZWRpcmxpc3QoKSB7 CisgICAgaWYgKGRpcmxpc3QpIHsKKyAgICAgICAgaW50IGk7CisgICAgICAgIGZvciAoaSA9IDA7 IGkgPCBuZGlybGlzdDsgaSsrKSB7CisgICAgICAgICAgICBpZiAoZGlybGlzdFtpXSkKKyAgICAg ICAgICAgICAgZnJlZShkaXJsaXN0W2ldKTsKKyAgICAgICAgfQorICAgICAgICBmcmVlKChjaGFy ICopZGlybGlzdCk7CisgICAgICAgIGRpcmxpc3QgPSBOVUxMOworICAgIH0KKyAgICBuZGlybGlz dCA9IDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIGRpcnN3dGFiW10gPSB7ICAgICAvKiBE SVJFQ1RPUlkgY29tbWFuZCBzd2l0Y2hlcyAqLworICAgIHsgIi9hZnRlciIsICAgICAgIERJUl9B RlQsIENNX0FSRyB9LAorICAgIHsgIi9hbGwiLCAgICAgICAgIERJUl9BTEwsIDAgfSwKKyNpZm5k ZWYgTk9TUEwKKyAgICB7ICIvYXJyYXkiLCAgICAgICBESVJfQVJSLCBDTV9BUkcgfSwKKyNlbmRp ZiAvKiBOT1NQTCAqLworICAgIHsgIi9hc2NlbmRpbmciLCAgIERJUl9BU0MsIDAgfSwKKyAgICB7 ICIvYmFja3VwIiwgICAgICBESVJfQlVQLCAwIH0sCisgICAgeyAiL2JlZm9yZSIsICAgICAgRElS X0JFRiwgQ01fQVJHIH0sCisgICAgeyAiL2JyaWVmIiwgICAgICAgRElSX0JSRiwgMCB9LAorICAg IHsgIi9jb3VudCIsICAgICAgIERJUl9DT1UsIENNX0FSRyB9LAorICAgIHsgIi9kZXNjZW5kaW5n IiwgIERJUl9EU0MsIENNX0lOViB9LAorICAgIHsgIi9kaXJlY3RvcmllcyIsIERJUl9ESVIsIDAg fSwKKyAgICB7ICIvZG90ZmlsZXMiLCAgICBESVJfRE9ULCAwIH0sCisgICAgeyAiL2VuZ2xpc2hk YXRlIiwgRElSX0RBVCwgMCB9LAorICAgIHsgIi9leGNlcHQiLCAgICAgIERJUl9FWEMsIENNX0FS RyB9LAorICAgIHsgIi9maWxlcyIsICAgICAgIERJUl9GSUwsIDAgfSwKKyAgICB7ICIvaGVhZGlu ZyIsICAgICBESVJfSERHLCAwIH0sCisgICAgeyAiL2lzb2RhdGUiLCAgICAgRElSX0lTTywgMCB9 LAorICAgIHsgIi9sYXJnZXItdGhhbiIsIERJUl9MQVIsIENNX0FSRyB9LAorI2lmZGVmIENLU1lN TElOSworICAgIHsgIi9mb2xsb3dsaW5rcyIsIERJUl9MTkssIDAgfSwKKyNlbmRpZiAvKiBDS1NZ TUxJTksgKi8KKyAgICB7ICIvbWVzc2FnZSIsICAgICBESVJfTVNHLCBDTV9BUkcgfSwKKyAgICB7 ICIvbm9iYWNrdXBmaWxlcyIsRElSX05PQiwgMCB9LAorICAgIHsgIi9ub2RvdGZpbGVzIiwgIERJ Ul9OT0QsIDAgfSwKKyNpZmRlZiBDS1NZTUxJTksKKyAgICB7ICIvbm9mb2xsb3dsaW5rcyIsRElS X05MSywgMCB9LAorI2VuZGlmIC8qIENLU1lNTElOSyAqLworICAgIHsgIi9ub2hlYWRpbmciLCAg IERJUl9OT0gsIDAgfSwKKyNpZmRlZiBDS1NZTUxJTksKKyAgICB7ICIvbm9saW5rcyIsICAgICBE SVJfTk9MLCAwIH0sCisjZW5kaWYgLyogQ0tTWU1MSU5LICovCisgICAgeyAiL25vbWVzc2FnZSIs ICAgRElSX05PTSwgMCB9LAorI2lmZGVmIENLX1RUR1dTSVoKKyAgICB7ICIvbm9wYWdlIiwgICAg ICBESVJfTk9QLCAwIH0sCisjZW5kaWYgLyogQ0tfVFRHV1NJWiAqLworI2lmZGVmIFJFQ1VSU0lW RQorICAgIHsgIi9ub3JlY3Vyc2l2ZSIsIERJUl9OT1IsIDAgfSwKKyNlbHNlCisjaWZkZWYgVk1T CisgICAgeyAiL25vcmVjdXJzaXZlIiwgRElSX05PUiwgMCB9LAorI2Vsc2UKKyNpZmRlZiBkYXRh Z2VuZXJhbAorICAgIHsgIi9ub3JlY3Vyc2l2ZSIsIERJUl9OT1IsIDAgfSwKKyNlbmRpZiAvKiBk YXRhZ2VuZXJhbCAqLworI2VuZGlmIC8qIFZNUyAqLworI2VuZGlmIC8qIFJFQ1VSU0lWRSAqLwor ICAgIHsgIi9ub3NvcnQiLCAgICAgIERJUl9OT1MsIDAgfSwKKyAgICB7ICIvbm90LWFmdGVyIiwg ICBESVJfTkFGLCBDTV9BUkcgfSwKKyAgICB7ICIvbm90LWJlZm9yZSIsICBESVJfTkJGLCBDTV9B UkcgfSwKKyAgICB7ICIvbm90LXNpbmNlIiwgICBESVJfTkFGLCBDTV9JTlZ8Q01fQVJHIH0sCisg ICAgeyAiL25veGZlcm1vZGUiLCAgRElSX05PVCwgMCB9LAorICAgIHsgIi9vdXRwdXQiLCAgICAg IERJUl9PVVQsIENNX0FSRyB9LAorI2lmZGVmIENLX1RUR1dTSVoKKyAgICB7ICIvcGFnZSIsICAg ICAgICBESVJfUEFHLCAwIH0sCisjZW5kaWYgLyogQ0tfVFRHV1NJWiAqLworI2lmZGVmIFJFQ1VS U0lWRQorICAgIHsgIi9yZWN1cnNpdmUiLCAgIERJUl9SRUMsIDAgfSwKKyNlbHNlCisjaWZkZWYg Vk1TCisgICAgeyAiL3JlY3Vyc2l2ZSIsICAgRElSX1JFQywgMCB9LAorI2Vsc2UKKyNpZmRlZiBk YXRhZ2VuZXJhbAorICAgIHsgIi9yZWN1cnNpdmUiLCAgIERJUl9SRUMsIDAgfSwKKyNlbmRpZiAv KiBkYXRhZ2VuZXJhbCAqLworI2VuZGlmIC8qIFZNUyAqLworI2VuZGlmIC8qIFJFQ1VSU0lWRSAq LworICAgIHsgIi9yZXZlcnNlIiwgICAgIERJUl9EU0MsIDAgfSwKKyAgICB7ICIvc2luY2UiLCAg ICAgICBESVJfQUZULCBDTV9BUkd8Q01fSU5WIH0sCisgICAgeyAiL3NtYWxsZXItdGhhbiIsRElS X1NNQSwgQ01fQVJHIH0sCisgICAgeyAiL3NvcnQiLCAgICAgICAgRElSX1NSVCwgQ01fQVJHIH0s CisgICAgeyAiL3N1bW1hcnkiLCAgICAgRElSX1NVTSwgMCB9LAorICAgIHsgIi90b3AiLCAgICAg ICAgIERJUl9UT1AsIENNX0FSRyB9LAorICAgIHsgIi90eXBlIiwgICAgICAgIERJUl9CSU4sIENN X0FSRyB9LAorICAgIHsgIi94ZmVybW9kZSIsICAgIERJUl9UWVAsIDAgfSwKKyAgICB7ICIvdmVy Ym9zZSIsICAgICBESVJfVlJCLCAwIH0sCisgICAgeyAiIiwwLDAgfQorfTsKK3N0YXRpYyBpbnQg bmRpcnN3dGFiID0gKHNpemVvZihkaXJzd3RhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpIC0g MTsKKworc3RhdGljIHN0cnVjdCBrZXl0YWIgZGlyc29ydFtdID0geyAgICAgIC8qIERJUkVDVE9S WSAvU09SVDogb3B0aW9ucyAqLworICAgIHsgImRhdGUiLCAgICAgICAgIERJUlNfRFQsIDAgfSwK KyAgICB7ICJuYW1lIiwgICAgICAgICBESVJTX05NLCAwIH0sCisgICAgeyAic2l6ZSIsICAgICAg ICAgRElSU19TWiwgMCB9Cit9Oworc3RhdGljIGludCBuZGlyc29ydCA9IChzaXplb2YoZGlyc29y dCkgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpOworCitzdGF0aWMgaW50IGRpcl9kYXRlID0gLTE7 ICAgICAgICAgICAgICAgLyogT3B0aW9uIGRlZmF1bHRzICgtMSBtZWFucyBub25lKSAqLworc3Rh dGljIGludCBkaXJfcGFnZSA9IC0xOworc3RhdGljIGludCBkaXJfdmVyYiA9ICAxOworc3RhdGlj IGludCBkaXJfbXNnICA9IC0xOworI2lmZGVmIFZNUworc3RhdGljIGludCBkaXJfc29ydCA9IC0x OyAgICAgICAgICAgICAgIC8qIE5hbWVzIGFyZSBhbHJlYWR5IHNvcnRlZCBpbiBWTVMgKi8KK3N0 YXRpYyBpbnQgZGlyX3J2cnMgPSAtMTsKKyNlbHNlCitzdGF0aWMgaW50IGRpcl9zb3J0ID0gIDE7 ICAgICAgICAgICAgICAgLyogU29ydCBieSBkZWZhdWx0ICovCitzdGF0aWMgaW50IGRpcl9ydnJz ID0gIDA7ICAgICAgICAgICAgICAgLyogTm90IGluIHJldmVyc2UgKi8KKyNlbmRpZiAvKiBWTVMg Ki8KK3N0YXRpYyBpbnQgZGlyX3NrZXkgPSBESVJTX05NOyAgICAgICAgICAvKiBCeSBuYW1lICov CisjaWZkZWYgUkVDVVJTSVZFCitzdGF0aWMgaW50IGRpcl9yZWN1ID0gLTE7CisjZW5kaWYgLyog UkVDVVJTSVZFICovCitzdGF0aWMgaW50IGRpcl9tb2RlID0gLTE7CitzdGF0aWMgaW50IGRpcl9z aG93ID0gLTE7ICAgICAgICAgICAgICAgLyogU2hvdyBhbGwgZmlsZXMgYnkgZGVmYXVsdCAqLwor aW50IGRpcl9kb3RzID0gIC0xOwkJCS8qIEV4Y2VwdCBkb3QgZmlsZXMgKi8KK2ludCBkaXJfYmFj ayA9ICAxOworaW50IGRpcl9oZWFkID0gIDA7CitzdGF0aWMgY2hhciAqIGRpcm1zZyA9IE5VTEw7 CitzdGF0aWMgaW50IGRpcm1zZ2xlbiA9IDA7CisKKyNpZm5kZWYgTk9TSE9XCitWT0lECitzaG93 ZGlyb3B0cygpIHsKKyAgICBpbnQgeCA9IDA7CisgICAgZXh0ZXJuIGludCBvcHRsaW5lczsKKyAg ICBwcnRvcHQoJm9wdGxpbmVzLCJESVJFQ1RPUlkiKTsKKyAgICBpZiAoZGlyX3Nob3cgPiAwKSB7 CisgICAgICAgIHBydG9wdCgmb3B0bGluZXMsKGRpcl9zaG93ID09IDEpID8gIi9GSUxFUyIgOgor ICAgICAgICAgICAgICAgKChkaXJfc2hvdyA9PSAyKSA/ICIvRElSRUNUT1JJRVMiIDogIi9BTEwi KSk7CisgICAgICAgIHgrKzsKKyAgICB9IGVsc2UgeworICAgICAgICBwcnRvcHQoJm9wdGxpbmVz LCIvQUxMIik7CisgICAgICAgIHgrKzsKKyAgICB9CisgICAgaWYgKGRpcl92ZXJiID4gLTEpIHsK KyAgICAgICAgcHJ0b3B0KCZvcHRsaW5lcyxkaXJfdmVyYiA/ICIvVkVSQk9TRSIgOiAiL0JSSUVG Iik7CisgICAgICAgIHgrKzsKKyAgICB9CisgICAgaWYgKGRpcl9wYWdlID4gLTEpIHsKKyAgICAg ICAgcHJ0b3B0KCZvcHRsaW5lcyxkaXJfcGFnZSA/ICIvUEFHRSIgOiAiL05PUEFHRSIpOworICAg ICAgICB4Kys7CisgICAgfQorICAgIGlmIChkaXJfZGF0ZSA+IC0xKSB7CisgICAgICAgIHBydG9w dCgmb3B0bGluZXMsZGlyX2RhdGUgPyAiL0VOR0xJU0hEQVRFIiA6ICIvSVNPREFURSIpOworICAg ICAgICB4Kys7CisgICAgfQorICAgIGlmIChkaXJfZG90cyA+IC0xKSB7CisgICAgICAgIHBydG9w dCgmb3B0bGluZXMsZGlyX2RvdHMgPyAiL0RPVEZJTEVTIiA6ICIvTk9ET1RGSUxFUyIpOworICAg ICAgICB4Kys7CisgICAgfQorICAgIGlmIChkaXJfYmFjayA+IC0xKSB7CisgICAgICAgIHBydG9w dCgmb3B0bGluZXMsZGlyX2JhY2sgPyAiL0JBQ0tVUCIgOiAiL05PQkFDS1VQIik7CisgICAgICAg IHgrKzsKKyAgICB9CisgICAgaWYgKGRpcl9oZWFkID4gLTEpIHsKKyAgICAgICAgcHJ0b3B0KCZv cHRsaW5lcyxkaXJfaGVhZCA/ICIvSEVBRElORyIgOiAiL05PSEVBRElORyIpOworICAgICAgICB4 Kys7CisgICAgfQorI2lmZGVmIFJFQ1VSU0lWRQorICAgIGlmIChkaXJfcmVjdSA+IC0xKSB7Cisg ICAgICAgIHBydG9wdCgmb3B0bGluZXMsZGlyX3JlY3UgPyAiL1JFQ1VSU0lWRSIgOiAiL05PUkVD VVJTSVZFIik7CisgICAgICAgIHgrKzsKKyAgICB9CisjZW5kaWYgLyogUkVDVVJTSVZFICovCisg ICAgaWYgKGRpcl9tb2RlID4gLTEpIHsKKyAgICAgICAgcHJ0b3B0KCZvcHRsaW5lcyxkaXJfbW9k ZSA/ICIvWEZFUk1PREUiIDogIi9OT1hGRVJNT0RFIik7CisgICAgICAgIHgrKzsKKyAgICB9Cisg ICAgaWYgKGRpcl9zb3J0ID09IDApIHsKKyAgICAgICAgeCsrOworICAgICAgICBwcnRvcHQoJm9w dGxpbmVzLCIvTk9TT1JUICIpOworICAgIH0gZWxzZSBpZiAoZGlyX3NvcnQgPiAwKSB7CisgICAg ICAgIHgrKzsKKyAgICAgICAgaWYgKGRpcl9za2V5ID09IERJUlNfTk0pIHMgPSAiL1NPUlQ6TkFN RSI7CisgICAgICAgIGVsc2UgaWYgKGRpcl9za2V5ID09IERJUlNfU1opIHMgPSAiL1NPUlQ6U0la RSI7CisgICAgICAgIGVsc2UgaWYgKGRpcl9za2V5ID09IERJUlNfRFQpIHMgPSAiL1NPUlQ6REFU RSI7CisgICAgICAgIHBydG9wdCgmb3B0bGluZXMscyk7CisgICAgfQorICAgIGlmIChkaXJfcnZy cyA+IC0xKSB7CisgICAgICAgIHBydG9wdCgmb3B0bGluZXMsZGlyX3J2cnMgPyAiL1JFVkVSU0Ui IDogIi9BU0NFTkRJTkciKTsKKyAgICAgICAgeCsrOworICAgIH0KKyAgICBpZiAoZGlyX21zZyA+ IC0xKSB7CisgICAgICAgIGlmIChkaXJfbXNnID09IDApIHsKKyAgICAgICAgICAgIHBydG9wdCgm b3B0bGluZXMsIi9OT01FU1NBR0UiKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNr bWFrbXNnKHRtcGJ1ZixUTVBCVUZTSVosIi9NRVNTQUdFOnsiLGRpcm1zZywifSIsTlVMTCk7Cisg ICAgICAgICAgICBwcnRvcHQoJm9wdGxpbmVzLHRtcGJ1Zik7CisgICAgICAgIH0KKyAgICAgICAg eCsrOworICAgIH0KKyAgICBpZiAoIXgpIHBydG9wdCgmb3B0bGluZXMsIihubyBvcHRpb25zIHNl dCkiKTsKKyAgICBwcnRvcHQoJm9wdGxpbmVzLCIiKTsKK30KKyNlbmRpZiAvKiBOT1NIT1cgKi8K KworaW50CitzZXRkaXJvcHRzKCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2V0IERJ UkVDVE9SWSBvcHRpb24gZGVmYXVsdHMgKi8KKyAgICBpbnQgeGIgPSAtMSwgeHYgPSAtMSwgeHAg PSAtMSwgeGQgPSAtMSwgeGggPSAtMSwgeGYgPSAtMTsKKyAgICBpbnQgeGsgPSAtMSwgeHIgPSAt MSwgeHMgPSAtMSwgeHggPSAtMSwgeG0gPSAtMSwgeGEgPSAtMSwgeGcgPSAtMTsKKyAgICBpbnQg Z2V0dmFsOworICAgIGNoYXIgYzsKKyAgICB3aGlsZSAoMSkgeworICAgICAgICBpZiAoKHkgPSBj bXN3aShkaXJzd3RhYixuZGlyc3d0YWIsIlN3aXRjaCIsIiIseHhzdHJpbmcpKSA8IDApIHsKKyAg ICAgICAgICAgIGlmICh5ID09IC0zKQorICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg IGVsc2UKKyAgICAgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICB9CisgICAgICAgIGMgPSBj bWdicmsoKTsKKyAgICAgICAgaWYgKChnZXR2YWwgPSAoYyA9PSAnOicgfHwgYyA9PSAnPScpKSAm JiAhKGNtZ2t3ZmxncygpICYgQ01fQVJHKSkgeworICAgICAgICAgICAgcHJpbnRmKCI/VGhpcyBz d2l0Y2ggZG9lcyBub3QgdGFrZSBhbiBhcmd1bWVudFxuIik7CisgICAgICAgICAgICByZXR1cm4o LTkpOworICAgICAgICB9CisgICAgICAgIGlmICghZ2V0dmFsICYmIChjbWdrd2ZsZ3MoKSAmIENN X0FSRykpIHsKKyAgICAgICAgICAgIHByaW50ZigiP1RoaXMgc3dpdGNoIHJlcXVpcmVzIGFuIGFy Z3VtZW50XG4iKTsKKyAgICAgICAgICAgIHJldHVybigtOSk7CisgICAgICAgIH0KKyAgICAgICAg c3dpdGNoICh5KSB7CisgICAgICAgICAgY2FzZSBESVJfQlJGOiB4diA9IDA7IGJyZWFrOworICAg ICAgICAgIGNhc2UgRElSX1ZSQjogeHYgPSAxOyBicmVhazsKKyAgICAgICAgICBjYXNlIERJUl9Q QUc6IHhwID0gMTsgYnJlYWs7CisgICAgICAgICAgY2FzZSBESVJfTk9QOiB4cCA9IDA7IGJyZWFr OworICAgICAgICAgIGNhc2UgRElSX0lTTzogeGQgPSAwOyBicmVhazsKKyAgICAgICAgICBjYXNl IERJUl9EQVQ6IHhkID0gMTsgYnJlYWs7CisgICAgICAgICAgY2FzZSBESVJfSERHOiB4aCA9IDE7 IGJyZWFrOworICAgICAgICAgIGNhc2UgRElSX05PSDogeGggPSAwOyBicmVhazsKKyAgICAgICAg ICBjYXNlIERJUl9ET1Q6IHhmID0gMTsgYnJlYWs7CisgICAgICAgICAgY2FzZSBESVJfTk9EOiB4 ZiA9IDA7IGJyZWFrOworICAgICAgICAgIGNhc2UgRElSX0FMTDogeGEgPSAzOyBicmVhazsKKyAg ICAgICAgICBjYXNlIERJUl9ESVI6IHhhID0gMjsgYnJlYWs7CisgICAgICAgICAgY2FzZSBESVJf RklMOiB4YSA9IDE7IGJyZWFrOworICAgICAgICAgIGNhc2UgRElSX1NSVDoKKyAgICAgICAgICAg IHggPSBESVJTX05NOworICAgICAgICAgICAgaWYgKGdldHZhbCkKKyAgICAgICAgICAgICAgaWYg KCh4ID0gY21rZXkoZGlyc29ydCxuZGlyc29ydCwiU29ydCBrZXkiLCJuYW1lIix4eHN0cmluZykp IDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgICAgICB4ayA9IHg7Cisg ICAgICAgICAgICB4cyA9IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIERJ Ul9OT1M6IHhzID0gMDsgYnJlYWs7CisgICAgICAgICAgY2FzZSBESVJfQVNDOiB4eCA9IDA7IGJy ZWFrOworICAgICAgICAgIGNhc2UgRElSX0RTQzogeHggPSAxOyBicmVhazsKKyAgICAgICAgICBj YXNlIERJUl9SRUM6IHhyID0gMTsgYnJlYWs7CisgICAgICAgICAgY2FzZSBESVJfTk9SOiB4ciA9 IDA7IGJyZWFrOworICAgICAgICAgIGNhc2UgRElSX1RZUDogeG0gPSAxOyBicmVhazsKKyAgICAg ICAgICBjYXNlIERJUl9OT1Q6IHhtID0gMDsgYnJlYWs7CisgICAgICAgICAgY2FzZSBESVJfQlVQ OiB4YiA9IDE7IGJyZWFrOworICAgICAgICAgIGNhc2UgRElSX05PQjogeGIgPSAwOyBicmVhazsK KyAgICAgICAgICBjYXNlIERJUl9OT006IHhnID0gMDsgYnJlYWs7CisgICAgICAgICAgY2FzZSBE SVJfTVNHOgorICAgICAgICAgICAgaWYgKGdldHZhbCkKKyAgICAgICAgICAgICAgaWYgKCh4ID0g Y21mbGQoIk1lc3NhZ2UgdG8gYXBwZW5kIHRvIGVhY2ggbGluZSIsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcywKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgeHhzdHJpbmcKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKSkgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgICAgIHhn ID0gMTsKKyAgICAgICAgICAgIGNrc3RybmNweSh0bXBidWYsYnJzdHJpcChzKSxUTVBCVUZTSVop OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHBy aW50ZigiP1RoaXMgb3B0aW9uIGNhbiBub3QgYmUgc2V0XG4iKTsKKyAgICAgICAgICAgIHJldHVy bigtOSk7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSAgICAg ICAgICAgICAgLyogR2V0IGNvbmZpcm1hdGlvbiAqLworICAgICAgcmV0dXJuKHgpOworICAgIGlm ICh4diA+IC0xKSBkaXJfdmVyYiA9IHh2OyAgICAgICAgIC8qIENvbmZpcm1lZCwgc2F2ZSBkZWZh dWx0cyAqLworICAgIGlmICh4cCA+IC0xKSBkaXJfcGFnZSA9IHhwOworICAgIGlmICh4ZCA+IC0x KSBkaXJfZGF0ZSA9IHhkOworICAgIGlmICh4aCA+IC0xKSBkaXJfaGVhZCA9IHhoOworICAgIGlm ICh4cyA+IC0xKSBkaXJfc29ydCA9IHhzOworICAgIGlmICh4ayA+IC0xKSBkaXJfc2tleSA9IHhr OworICAgIGlmICh4eCA+IC0xKSBkaXJfcnZycyA9IHh4OworICAgIGlmICh4ZiA+IC0xKSBkaXJf ZG90cyA9IHhmOworICAgIGlmICh4YSA+IC0xKSBkaXJfc2hvdyA9IHhhOworICAgIGlmICh4bSA+ IC0xKSBkaXJfbW9kZSA9IHhtOworICAgIGlmICh4YiA+IC0xKSBkaXJfYmFjayA9IHhiOworI2lm ZGVmIFJFQ1VSU0lWRQorICAgIGlmICh4ciA+IC0xKSBkaXJfcmVjdSA9IHhyOworI2VuZGlmIC8q IFJFQ1VSU0lWRSAqLworICAgIGlmICh4ZyA+IC0xKSBkaXJfbXNnICA9IHhnOworICAgIGlmICh4 ZyA+IDApCisgICAgICBtYWtlc3RyKCZkaXJtc2csdG1wYnVmKTsKKyAgICByZXR1cm4oc3VjY2Vz cyA9IDEpOworfQorCitpbnQKK2RvbXlkaXIoY3gpIGludCBjeDsgewkJCS8qIEludGVybmFsIERJ UkVDVE9SWSBjb21tYW5kICovCisgICAgZXh0ZXJuIGNoYXIgKm1vbnRoc1tdOworI2lmZGVmIFZN UworICAgIF9QUk9UT1RZUCggY2hhciAqIHpyZWxuYW1lLCAoY2hhciAqLGNoYXIgKikgKTsKKyAg ICBjaGFyICogY2RwID0gTlVMTDsKKyNlbmRpZiAvKiBWTVMgKi8KKworICAgIGNoYXIgbmFtZVtD S01BWFBBVEgrMV0sIG91dGZpbGVbQ0tNQVhQQVRIKzFdLCAqcCA9IE5VTEwsIGMgPSBOVUw7Cisg ICAgY2hhciBsaW5lYnVmW0NLTUFYUEFUSCsyNTZdOworICAgIGNoYXIgKiBtc3RyID0gTlVMTCwg KiBkc3RyID0gTlVMTCwgKiBzMiA9IE5VTEwsICogY3YgPSBOVUxMOworICAgIENLX09GRl9UIGxl biA9IChDS19PRkZfVCkwLCBuYnl0ZXMgPSAoQ0tfT0ZGX1QpMDsKKyAgICBDS19PRkZfVCBtaW5z aXplID0gKENLX09GRl9UKS0xLCBtYXhzaXplID0gKENLX09GRl9UKS0xOworICAgIGxvbmcgbmRp cnMgPSAwLCBuZmlsZXMgPSAwLCBubWF0Y2hlcyA9IDA7CisgICAgaW50IHZlcmJvc2UgPSAwLCB3 aWxkID0gMCwgcGFnZSA9IDAsIG4gPSAwLCBlbmdkYXRlID0gMCwgc3VtbWFyeSA9IDA7CisgICAg aW50IGhlYWRpbmcgPSAwLCB4c29ydCA9IDAsIHJldmVyc2UgPSAwLCBzb3J0YnkgPSAwLCBtc2cg PSAwOworICAgIGludCBrLCBpID0gMCwgeCA9IDAsIG54ID0gMCwgc2tleSA9IDAsIGRsZW4gPSAw LCBpdHNhZGlyID0gMDsKKyAgICBpbnQgc2hvdyA9IDMsIHhmZXJtb2QgPSAwLCBiYWNrdXAgPSAx LCByYyA9IDAsIGdldHZhbCA9IDA7CisgICAgaW50IHRvdWNoID0gMDsKKyAgICBpbnQgZnMgPSAw OworICAgIGludCBtdWx0aXBsZSA9IDA7CisgICAgaW50IGNtaWZuMSA9IDEsIGNtaWZuMiA9IDA7 CisgICAgaW50IGRpcl90b3AgPSAwLCBkaXJfY291ID0gMDsKKyAgICBpbnQgZG9udHNob3dsaW5r cyA9IDA7CisgICAgaW50IGRvbnRmb2xsb3dsaW5rcyA9IDA7CisgICAgaW50IGFycmF5aW5kZXgg PSAtMTsKKyAgICBzdHJ1Y3QgRkRCIHN3LCBmaSwgZmw7CisgICAgY2hhciBkYnVmWzMyXSwgeGJ1 ZlszMl07CisKKyNpZm5kZWYgTk9TUEwKKyAgICBjaGFyIGFycmF5ID0gTlVMOworICAgIGNoYXIg KiogYXAgPSBOVUxMOworI2VuZGlmIC8qIE5PU1BMICovCisgICAgY2hhcgorICAgICAgKiBkaXJf YWZ0ID0gTlVMTCwKKyAgICAgICogZGlyX2JlZiA9IE5VTEwsCisgICAgICAqIGRpcl9uYWYgPSBO VUxMLAorICAgICAgKiBkaXJfbmJmID0gTlVMTCwKKyAgICAgICogZGlyX2V4YyA9IE5VTEw7Cisg ICAgY2hhciAqIHhsaXN0WzE2XTsKKworICAgIGRlYnVnKEYxMDEsImRvbXlkaXIgY3giLCIiLGN4 KTsKKworICAgIGdfbWF0Y2hkb3QgPSBtYXRjaGRvdDsgICAgICAgICAgICAgIC8qIFNhdmUgZ2xv YmFsIG1hdGNoZG90IHNldHRpbmcgKi8KKyNpZmRlZiBDT01NRU5UCisgICAgbm9saW5rcyA9IDI7 ICAgICAgICAgICAgICAgICAgICAgICAgLyogKGl0IHNob3VsZCBhbHJlYWR5IGJlIDIpICovCisj ZW5kaWYJLyogQ09NTUVOVCAqLworICAgIG91dGZpbGVbMF0gPSBOVUw7ICAgICAgICAgICAgICAg ICAgIC8qIE5vIG91dHB1dCBmaWxlIHlldCAqLworCisgICAgaWYgKG9mcCAhPSBzdGRvdXQpIHsg ICAgICAgICAgICAgICAgLyogSW4gY2FzZSBvZiBwcmV2aW91cyBpbnRlcnJ1cHRpb24gKi8KKyAg ICAgICAgaWYgKG9mcCkgZmNsb3NlKG9mcCk7CisgICAgICAgIG9mcCA9IHN0ZG91dDsKKyAgICB9 CisgICAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHhsaXN0W2ldID0gTlVMTDsKKworICAgIGRp cl90b3AgPSAwOworICAgIG5hbWVbMF0gPSBOVUw7CisgICAgZnJlZWRpcmxpc3QoKTsgICAgICAg ICAgICAgICAgICAgICAgLyogSW4gY2FzZSBub3QgZnJlZWQgbGFzdCB0aW1lICovCisgICAgcGFn ZSAgICAgID0gZGlyX3BhZ2UgPiAtMSA/IGRpcl9wYWdlIDogeGFza21vcmU7IC8qIFNldCBvcHRp b24gZGVmYXVsdHMgKi8KKyAgICBlbmdkYXRlICAgPSBkaXJfZGF0ZSA+IC0xID8gZGlyX2RhdGUg OiAwOworICAgIHZlcmJvc2UgICA9IGRpcl92ZXJiID4gLTEgPyBkaXJfdmVyYiA6IDE7CisgICAg aGVhZGluZyAgID0gZGlyX2hlYWQgPiAtMSA/IGRpcl9oZWFkIDogMDsKKyAgICB4c29ydCAgICAg PSBkaXJfc29ydCA+IC0xID8gZGlyX3NvcnQgOiAwOworICAgIHNvcnRieSAgICA9IGRpcl9za2V5 ID4gLTEgPyBkaXJfc2tleSA6IDA7CisgICAgcmV2ZXJzZSAgID0gZGlyX3J2cnMgPiAtMSA/IGRp cl9ydnJzIDogMDsKKyAgICBtc2cgICAgICAgPSBkaXJfbXNnICA+IC0xID8gZGlyX21zZyAgOiAw OworI2lmZGVmIFVOSVhPUk9TSworICAgIGlmIChkaXJfZG90cyA+IC0xKSBtYXRjaGRvdCA9IGRp cl9kb3RzOworI2VuZGlmIC8qIFVOSVhPUk9TSyAqLworICAgIHhmZXJtb2QgICA9IGRpcl9tb2Rl ID4gLTEgPyBkaXJfbW9kZSA6IDA7CisgICAgYmFja3VwICAgID0gZGlyX2JhY2sgPiAtMSA/IGRp cl9iYWNrIDogMTsKKyNpZmRlZiBSRUNVUlNJVkUKKyAgICByZWN1cnNpdmUgPSBkaXJfcmVjdSA+ IC0xID8gZGlyX3JlY3UgOiAwOworI2VuZGlmIC8qIFJFQ1VSU0lWRSAqLworICAgIHNob3cgICAg ICA9IGRpcl9zaG93ID4gLTEgPyBkaXJfc2hvdyA6IDM7CisKKyAgICBpZiAoY3ggPT0gWFhXRElS KSB7CQkJLyogV0RJUkVDVE9SWSAqLworCWRlYnVnKEYxMDAsImRvbXlkaXIgV0RJUkVDVE9SWSIs IiIsMCk7CisJcmV2ZXJzZSA9IDE7CQkJLyogUmV2ZXJzZSBjaHJvbm9sb2dpY2FsIG9yZGVyICov CisJeHNvcnQgPSAxOworCXNvcnRieSA9IERJUlNfRFQ7CisgICAgfSBlbHNlIGlmIChjeCA9PSBY WEhESVIpIHsJCS8qIEhESVJFQ1RPUlkgKi8KKwlkZWJ1ZyhGMTAwLCJkb215ZGlyIEhESVJFQ1RP UlkiLCIiLDApOworCXJldmVyc2UgPSAxOwkJCS8qIFJldmVyc2Ugb3JkZXIgYnkgc2l6ZSAqLwor CXhzb3J0ID0gMTsKKwlzb3J0YnkgPSBESVJTX1NaOworICAgIH0gZWxzZSBpZiAoY3ggPT0gWFhU T1VDKSB7CisJdG91Y2ggPSAxOworCXZlcmJvc2UgPSAwOworICAgIH0JCisKKyNpZmRlZiBDS19U VEdXU0laCisjaWZkZWYgT1MyCisgICAgdHRnY3dzeigpOyAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogU2NyZWVuIGxlbmd0aCBmb3IgbW9yZS1wcm9tcHRpbmcgKi8KKyNlbHNlIC8qIE9TMiAq LworICAgIC8qIENoZWNrIHdoZXRoZXIgd2luZG93IHNpemUgY2hhbmdlZCAqLworICAgIGlmICh0 dGd3c2l6KCkgPiAwKSB7CisgICAgICAgIGlmICh0dF9yb3dzID4gMCAmJiB0dF9jb2xzID4gMCkg eworICAgICAgICAgICAgY21kX3Jvd3MgPSB0dF9yb3dzOworICAgICAgICAgICAgY21kX2NvbHMg PSB0dF9jb2xzOworICAgICAgICB9CisgICAgfQorI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8q IENLX1RUR1dTSVogKi8KKworICAgIGRpcmFjdGl2ZSA9IDE7CisgICAgY21pZm4xID0gbm9saW5r cyB8IDE7ICAgICAgICAgICAgICAgLyogMSA9IGZpbGVzIG9yIGRpcmVjdG9yaWVzICovCisgICAg Y21pZm4yID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogMCA9IG5vdCBkaXJlY3Rvcmll cyBvbmx5ICovCisKKyAgYWdhaW46CisKKyAgICBjbWZkYmkoJnN3LCAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBGaXJzdCBGREIgLSBjb21tYW5kIHN3aXRjaGVzICovCisgICAgICAgICAgIF9D TUtFWSwgICAgICAgICAgICAgICAgICAgICAgLyogZmNvZGUgKi8KKyAgICAgICAgICAgIkVudGVy IG9yIFJldHVybiB0byBjb25maXJtIHRoZSBjb21tYW5kLCBvclxuXAorIGZpbGUgc3BlY2lmaWNh dGlvbiwgb3Igc3dpdGNoIiwKKyAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBkZWZhdWx0ICovCisgICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAg LyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KKyAgICAgICAgICAgbmRpcnN3dGFiLCAgICAgICAgICAg ICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMTogdGJsIHNpemUgKi8KKyAgICAgICAgICAg NCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMjogNCA9 IGNtc3dpICovCisgICAgICAgICAgIHh4c3RyaW5nLCAgICAgICAgICAgICAgICAgICAgLyogUHJv Y2Vzc2luZyBmdW5jdGlvbiAqLworICAgICAgICAgICBkaXJzd3RhYiwgICAgICAgICAgICAgICAg ICAgIC8qIEtleXdvcmQgdGFibGUgKi8KKyAgICAgICAgICAgJmZpICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBQb2ludGVyIHRvIG5leHQgRkRCICovCisgICAgICAgICAgICk7CisgICAgY21m ZGJpKCZmaSwgICAgICAgICAgICAgICAgICAgICAgICAgLyogMm5kIEZEQiAtIGZpbGVzcGVjIHRv IG1hdGNoICovCisgICAgICAgICAgIF9DTUlGSSwgICAgICAgICAgICAgICAgICAgICAgLyogZmNv ZGUgKi8KKyAgICAgICAgICAgIkZpbGUgc3BlY2lmaWNhdGlvbiIsICAgICAgICAvKiBobHBtc2cg Ki8KKyNpZmRlZiBkYXRhZ2VuZXJhbAorICAgICAgICAgICAiKyIsICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIERlZmF1bHQgZmlsZXNwZWMgaXMgd2lsZGNhcmQgKi8KKyNlbHNlICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0aGF0IG1hdGNoZXMgYWxsIGZpbGVzLi4uICov CisjaWZkZWYgVk1TCisgICAgICAgICAgICIqLioiLAorI2Vsc2UKKyAgICAgICAgICAgIioiLAor I2VuZGlmIC8qIFZNUyAqLworI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCisgICAgICAgICAgICIi LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KKyAgICAg ICAgICAgY21pZm4xLAorICAgICAgICAgICBjbWlmbjIsICAgICAgICAgICAgICAgICAgICAgIC8q IDEgPSBvbmx5IGRpcnM7IDAgZmlsZXMgb3IgZGlycyAqLworICAgICAgICAgICB4eHN0cmluZywK KyAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgJmZsCisgICAgICAgICAgICk7CisgICAgY21m ZGJpKCZmbCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogQW55dGhpbmcgdGhhdCBkb2Vzbid0 IG1hdGNoICovCisgICAgICAgICAgIF9DTUZMRCwgICAgICAgICAgICAgICAgICAgICAgLyogZmNv ZGUgKi8KKyAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBobHBtc2cg Ki8KKyAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkZWZhdWx0ICov CisgICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgc3RyaW5n IGRhdGEgKi8KKyAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0 bCBudW1lcmljIGRhdGEgMSAqLworICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAyICovCisgICAgICAgICAgIHh4c3RyaW5nLAorICAg ICAgICAgICBOVUxMLAorICAgICAgICAgICBOVUxMCisgICAgICAgICAgICk7CisgICAgd2hpbGUg KDEpIHsgICAgICAgICAgICAgICAgICAgICAgICAgLyogUGFyc2UgMCBvciBtb3JlIHN3aXRjaGVz ICovCisgICAgICAgIHggPSBjbWZkYigmc3cpOyAgICAgICAgICAgICAgICAgLyogUGFyc2Ugc29t ZXRoaW5nICovCisgICAgICAgIGRlYnVnKEYxMDEsImRvbXlkaXIgY21mZGIiLCIiLHgpOworICAg ICAgICBpZiAoeCA8IDApCisgICAgICAgICAgcmV0dXJuKHgpOyAKKyAgICAgICAgaWYgKGNtcmVz dWx0LmZjb2RlICE9IF9DTUtFWSkgICAvKiBCcmVhayBvdXQgaWYgbm90IGEgc3dpdGNoICovCisg ICAgICAgICAgYnJlYWs7CisgICAgICAgIGMgPSBjbWdicmsoKTsKKyAgICAgICAgaWYgKChnZXR2 YWwgPSAoYyA9PSAnOicgfHwgYyA9PSAnPScpKSAmJiAhKGNtZ2t3ZmxncygpICYgQ01fQVJHKSkg eworICAgICAgICAgICAgcHJpbnRmKCI/VGhpcyBzd2l0Y2ggZG9lcyBub3QgdGFrZSBhbiBhcmd1 bWVudFxuIik7CisgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICB9CisJayA9IGNtcmVz dWx0Lm5yZXN1bHQ7CisgICAgICAgIGlmICghZ2V0dmFsICYmCisJICAgIChjbWdrd2ZsZ3MoKSAm IENNX0FSRykgJiYgayAhPSBESVJfVE9QICYmIGsgIT0gRElSX0NPVSkgeworICAgICAgICAgICAg cHJpbnRmKCI/VGhpcyBzd2l0Y2ggcmVxdWlyZXMgYW4gYXJndW1lbnRcbiIpOworICAgICAgICAg ICAgcmV0dXJuKC05KTsKKyAgICAgICAgfQorICAgICAgICBzd2l0Y2ggKGspIHsKKyAgICAgICAg ICBjYXNlIERJUl9DT1U6IHsKKyAgICAgICAgICAgICAgZGlyX2NvdSsrOworICAgICAgICAgICAg ICBpZiAoZ2V0dmFsKSB7CisgICAgICAgICAgICAgICAgICBpZiAoKHggPSBjbWZsZCgiVmFyaWFi bGUgZm9yIHJlc3VsdCIsIiIsJnMsTlVMTCkpIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgcmV0 dXJuKHgpOworICAgICAgICAgICAgICAgICAgbWFrZXN0cigmY3Yscyk7CisgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgICAgIGNhc2UgRElS X0JSRjogdmVyYm9zZSA9IDA7IGJyZWFrOworICAgICAgICAgIGNhc2UgRElSX1ZSQjogdmVyYm9z ZSA9IDE7IGJyZWFrOworI2lmZGVmIENLX1RUR1dTSVoKKyAgICAgICAgICBjYXNlIERJUl9QQUc6 IHBhZ2UgPSAxOyAgICBicmVhazsKKyAgICAgICAgICBjYXNlIERJUl9OT1A6IHBhZ2UgPSAwOyAg ICBicmVhazsKKyNlbmRpZiAvKiBDS19UVEdXU0laICovCisgICAgICAgICAgY2FzZSBESVJfSVNP OiBlbmdkYXRlID0gMDsgYnJlYWs7CisgICAgICAgICAgY2FzZSBESVJfREFUOiBlbmdkYXRlID0g MTsgYnJlYWs7CisgICAgICAgICAgY2FzZSBESVJfSERHOiBoZWFkaW5nID0gMTsgYnJlYWs7Cisg ICAgICAgICAgY2FzZSBESVJfTk9IOiBoZWFkaW5nID0gMDsgYnJlYWs7CisjaWZkZWYgVU5JWE9S T1NLCisgICAgICAgICAgY2FzZSBESVJfRE9UOiBtYXRjaGRvdCA9IDE7IGJyZWFrOworICAgICAg ICAgIGNhc2UgRElSX05PRDogbWF0Y2hkb3QgPSAwOyBicmVhazsKKyNlbmRpZiAvKiBVTklYT1JP U0sgKi8KKyAgICAgICAgICBjYXNlIERJUl9BTEw6CisgICAgICAgICAgICBzaG93ID0gMzsKKyAg ICAgICAgICAgIGNtaWZuMSB8PSAxOworICAgICAgICAgICAgY21pZm4yID0gMDsKKyAgICAgICAg ICAgIGdvdG8gYWdhaW47CisgICAgICAgICAgY2FzZSBESVJfRElSOgorICAgICAgICAgICAgc2hv dyA9IDI7CisgICAgICAgICAgICBjbWlmbjEgfD0gMTsKKyAgICAgICAgICAgIGNtaWZuMiA9IDE7 CisgICAgICAgICAgICBnb3RvIGFnYWluOworICAgICAgICAgIGNhc2UgRElSX0ZJTDoKKyAgICAg ICAgICAgIHNob3cgPSAxOworICAgICAgICAgICAgY21pZm4xICY9IH4oMSk7CisgICAgICAgICAg ICBjbWlmbjIgPSAwOworICAgICAgICAgICAgZ290byBhZ2FpbjsKKyAgICAgICAgICBjYXNlIERJ Ul9TUlQ6CisgICAgICAgICAgICB4ID0gRElSU19OTTsKKyAgICAgICAgICAgIGlmIChjID09ICc6 JyB8fCBjID09ICc9JykKKyAgICAgICAgICAgICAgaWYgKCh4ID0gY21rZXkoZGlyc29ydCxuZGly c29ydCwiU29ydCBrZXkiLCJuYW1lIix4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICAgICAgICBy ZXR1cm4oeCk7CisgICAgICAgICAgICB4c29ydCA9IDE7CisgICAgICAgICAgICBzb3J0YnkgPSB4 OworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIERJUl9CVVA6IGJhY2t1cCAg PSAxOyBmcysrOyAgIGJyZWFrOworICAgICAgICAgIGNhc2UgRElSX05PQjogYmFja3VwICA9IDA7 IGZzKys7ICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIERJUl9OT1M6IHhzb3J0ID0gMDsgICAg IGJyZWFrOworICAgICAgICAgIGNhc2UgRElSX0FTQzogcmV2ZXJzZSA9IDA7ICAgYnJlYWs7Cisg ICAgICAgICAgY2FzZSBESVJfRFNDOiByZXZlcnNlID0gMTsgICBicmVhazsKKyNpZmRlZiBSRUNV UlNJVkUKKyAgICAgICAgICBjYXNlIERJUl9SRUM6IHJlY3Vyc2l2ZSA9IDE7IGRpcmFjdGl2ZSA9 IDE7IGJyZWFrOworICAgICAgICAgIGNhc2UgRElSX05PUjogcmVjdXJzaXZlID0gMDsgZGlyYWN0 aXZlID0gMDsgYnJlYWs7CisjZW5kaWYgLyogUkVDVVJTSVZFICovCisgICAgICAgICAgY2FzZSBE SVJfVFlQOiB4ZmVybW9kID0gMTsgICBicmVhazsKKyAgICAgICAgICBjYXNlIERJUl9OT1Q6IHhm ZXJtb2QgPSAwOyAgIGJyZWFrOworCisjaWZkZWYgQ0tTWU1MSU5LCisgICAgICAgICAgY2FzZSBE SVJfTE5LOiAgICAgICAgICAgICAgICAgLyogRm9sbG93IGxpbmtzICovCisjaWZkZWYgQ09NTUVO VAorCSAgICAvKiBBIGNvbW1hbmQgc3dpdGNoIHNob3VsZG4ndCBiZSBzZXR0aW5nIGEgZ2xvYmFs IHZhbHVlISAqLworICAgICAgICAgICAgbm9saW5rcyA9IDA7CisjZW5kaWYJLyogQ09NTUVOVCAq LworICAgICAgICAgICAgY21pZm4xICY9IH4oMik7CisJICAgIGRvbnRmb2xsb3dsaW5rcyA9IDA7 CisgICAgICAgICAgICBnb3RvIGFnYWluOworICAgICAgICAgIGNhc2UgRElSX05MSzogICAgICAg ICAgICAgICAgIC8qIERvbid0IGZvbGxvdyBsaW5rcyAqLworI2lmZGVmIENPTU1FTlQKKyAgICAg ICAgICAgIG5vbGlua3MgPSAyOworI2VuZGlmCS8qIENPTU1FTlQgKi8KKyAgICAgICAgICAgIGNt aWZuMSAmPSB+KDIpOworCSAgICBkb250Zm9sbG93bGlua3MgPSAxOworICAgICAgICAgICAgZ290 byBhZ2FpbjsKKwkgIGNhc2UgRElSX05PTDoJCQkvKiBEb24ndCBzaG93IGxpbmtzIGF0IGFsbCAq LworCSAgICBkb250c2hvd2xpbmtzID0gMTsKKwkgICAgZ290byBhZ2FpbjsKKyNlbmRpZiAvKiBD S1NZTUxJTksgKi8KKworICAgICAgICAgIGNhc2UgRElSX05PTTogbXNnICAgICA9IDA7ICAgYnJl YWs7CisgICAgICAgICAgY2FzZSBESVJfTVNHOgorICAgICAgICAgICAgaWYgKGMgPT0gJzonIHx8 IGMgPT0gJz0nKQorICAgICAgICAgICAgICBpZiAoKHggPSBjbWZsZCgiTWVzc2FnZSB0byBhcHBl bmQgdG8gZWFjaCBsaW5lIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICZzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB4eHN0cmluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICApKSA8IDApCisgICAgICAg ICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICAgICAgbXNnID0gMTsKKyAgICAgICAgICAgIGNr c3RybmNweSh0bXBidWYsYnJzdHJpcChzKSxUTVBCVUZTSVopOworICAgICAgICAgICAgYnJlYWs7 CisKKyAgICAgICAgICBjYXNlIERJUl9TTUE6CisgICAgICAgICAgY2FzZSBESVJfTEFSOiB7CisJ ICAgICAgQ0tfT0ZGX1QgeTsKKwkgICAgICBpZiAoIWdldHZhbCkgYnJlYWs7CisJICAgICAgaWYg KCh4ID0gY21udW13KCJGaWxlIHNpemUgaW4gYnl0ZXMiLCIwIiwxMCwmeSx4eHN0cmluZykpIDwg MCkKKwkJcmV0dXJuKHgpOworCSAgICAgIGZzKys7CisJICAgICAgc2hvdyA9IDE7CisJICAgICAg c3dpdGNoIChjbXJlc3VsdC5ucmVzdWx0KSB7CisJCWNhc2UgRElSX1NNQTogbWluc2l6ZSA9IHk7 IGJyZWFrOworCQljYXNlIERJUl9MQVI6IG1heHNpemUgPSB5OyBicmVhazsKKwkgICAgICB9CisJ ICAgICAgYnJlYWs7CisJICB9CisJICBjYXNlIERJUl9UT1A6CisJICAgIGRpcl90b3AgPSAxMDsK KwkgICAgaWYgKCFnZXR2YWwpIGJyZWFrOworCSAgICAgIGlmICgoeCA9IGNtbnVtKCJIb3cgbWFu eSBsaW5lcyB0byBzaG93IiwiMTAiLDEwLCZ5LHh4c3RyaW5nKSk8IDApCisJCXJldHVybih4KTsK KwkgICAgICBkaXJfdG9wID0geTsKKwkgICAgICBicmVhazsKKworI2lmbmRlZiBOT1NQTAorICAg ICAgICAgIGNhc2UgRElSX0FSUjoKKyAgICAgICAgICAgIGlmIChjICE9ICc6JyAmJiBjICE9ICc9 JykgeworICAgICAgICAgICAgICAgIHByaW50ZigiP0FycmF5IG5hbWUgcmVxdWlyZWRcbiIpOwor ICAgICAgICAgICAgICAgIHJldHVybigtOSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp ZiAoKHggPSBjbWZsZCgiQXJyYXkgbmFtZSAoYSBzaW5nbGUgbGV0dGVyIHdpbGwgZG8pIiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg JnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMCisgICAgICAgICAgICAgICAgICAg ICAgICAgICApKSA8IDApIHsKKyAgICAgICAgICAgICAgICBpZiAoeCA9PSAtMykgeworICAgICAg ICAgICAgICAgICAgICBwcmludGYoIj9BcnJheSBuYW1lIHJlcXVpcmVkXG4iKTsKKyAgICAgICAg ICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAg ICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghKnMp IHsKKyAgICAgICAgICAgICAgICBwcmludGYoIj9BcnJheSBuYW1lIHJlcXVpcmVkXG4iKTsKKyAg ICAgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgczIg PSBzOworICAgICAgICAgICAgaWYgKCpzID09IENNRFEpIHMrKzsKKyAgICAgICAgICAgIGlmICgq cyA9PSAnJicpIHMrKzsKKyAgICAgICAgICAgIGlmICghaXNhbHBoYSgqcykpIHsKKyAgICAgICAg ICAgICAgICBwcmludGYoIj9CYWQgYXJyYXkgbmFtZSAtIFwiJXNcIlxuIixzMik7CisgICAgICAg ICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGFycmF5ID0g KnMrKzsKKyAgICAgICAgICAgIGlmIChpc3VwcGVyKGFycmF5KSkgYXJyYXkgPSB0b2xvd2VyKGFy cmF5KTsKKyAgICAgICAgICAgIGlmICgqcyAmJiAoKnMgIT0gJ1snIHx8ICoocysxKSAhPSAnXScp KSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCI/QmFkIGFycmF5IG5hbWUgLSBcIiVzXCJcbiIs czIpOworICAgICAgICAgICAgICAgIHJldHVybigtOSk7CisgICAgICAgICAgICB9CisgICAgICAg ICAgICBicmVhazsKKyNlbmRpZiAvKiBOT1NQTCAqLworICAgICAgICAgIGNhc2UgRElSX0FGVDoK KyAgICAgICAgICBjYXNlIERJUl9CRUY6CisgICAgICAgICAgY2FzZSBESVJfTkFGOgorICAgICAg ICAgIGNhc2UgRElSX05CRjoKKyAgICAgICAgICAgIGlmICghZ2V0dmFsKSBicmVhazsKKyAgICAg ICAgICAgIGlmICgoeCA9IGNtZGF0ZSgiRmlsZS10aW1lIiwiIiwmcywwLHh4c3RyaW5nKSkgPCAw KSB7CisgICAgICAgICAgICAgICAgaWYgKHggPT0gLTMpIHsKKyAgICAgICAgICAgICAgICAgICAg cHJpbnRmKCI/RGF0ZS10aW1lIHJlcXVpcmVkXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcmMg PSAtOTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgIHJjID0geDsK KyAgICAgICAgICAgICAgICBnb3RvIHhkb215ZGlyOworICAgICAgICAgICAgfQorICAgICAgICAg ICAgZnMrKzsKKyAgICAgICAgICAgIHN3aXRjaCAoaykgeworICAgICAgICAgICAgICBjYXNlIERJ Ul9BRlQ6IG1ha2VzdHIoJmRpcl9hZnQscyk7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIERJ Ul9CRUY6IG1ha2VzdHIoJmRpcl9iZWYscyk7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIERJ Ul9OQUY6IG1ha2VzdHIoJmRpcl9uYWYscyk7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIERJ Ul9OQkY6IG1ha2VzdHIoJmRpcl9uYmYscyk7IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBESVJfRVhDOgorICAgICAgICAgICAgaWYgKCFn ZXR2YWwpIGJyZWFrOworICAgICAgICAgICAgaWYgKCh4ID0gY21mbGQoIlBhdHRlcm4iLCIiLCZz LHh4c3RyaW5nKSkgPCAwKSB7CisgICAgICAgICAgICAgICAgaWYgKHggPT0gLTMpIHsKKyAgICAg ICAgICAgICAgICAgICAgcHJpbnRmKCI/UGF0dGVybiByZXF1aXJlZFxuIik7CisgICAgICAgICAg ICAgICAgICAgIHJjID0gLTk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAg ICAgICByYyA9IHg7CisgICAgICAgICAgICAgICAgZ290byB4ZG9teWRpcjsKKyAgICAgICAgICAg IH0KKyAgICAgICAgICAgIGZzKys7CisgICAgICAgICAgICBtYWtlc3RyKCZkaXJfZXhjLHMpOwor ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIERJUl9TVU06CisgICAgICAgICAg ICBzdW1tYXJ5ID0gMTsgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIERJUl9CSU46IHsKKyAgICAg ICAgICAgICAgZXh0ZXJuIHN0cnVjdCBrZXl0YWIgdHh0YmluW107CisgICAgICAgICAgICAgIGV4 dGVybiBpbnQgeGZpbGV0eXBlOworICAgICAgICAgICAgICBpZiAoIWdldHZhbCkgYnJlYWs7Cisg ICAgICAgICAgICAgIGlmICgoeCA9IGNta2V5KHR4dGJpbiwzLCIiLCJhbGwiLHh4c3RyaW5nKSkg PCAwKSB7CisgICAgICAgICAgICAgICAgICByYyA9IHg7CisgICAgICAgICAgICAgICAgICBnb3Rv IHhkb215ZGlyOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGlmICh4ID09IDIpIHsK KyAgICAgICAgICAgICAgICAgIHhmaWxldHlwZSA9IC0xOworICAgICAgICAgICAgICB9IGVsc2Ug eworICAgICAgICAgICAgICAgICAgeGZpbGV0eXBlID0geDsKKyAgICAgICAgICAgICAgICAgIGZz ID0gMTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9 CisgICAgICAgICAgY2FzZSBESVJfT1VUOgorICAgICAgICAgICAgaWYgKCh4ID0gY21vZmkoIkZp bGUgZm9yIGRpcmVjdG9yeSBsaXN0aW5nIiwiIiwmcyx4eHN0cmluZykpIDwgMCkKKyAgICAgICAg ICAgICAgcmV0dXJuKHgpOworICAgICAgICAgICAgY2tzdHJuY3B5KG91dGZpbGUscyxDS01BWFBB VEgrMSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg ICAgICBwcmludGYoIj9Tb3JyeSwgbm90IGltcGxlbWVudGVkIHlldCAtIFwiJXNcIlxuIiwgYXRt YnVmKTsKKyAgICAgICAgICAgIGdvdG8geGRvbXlkaXI7CisgICAgICAgIH0KKyAgICB9CisgICAg Y2tzdHJuY3B5KGxpbmUsY21yZXN1bHQuc3Jlc3VsdCxMSU5CVUZTSVopOyAvKiBTYWZlIGNvcHkg b2YgZmlsZXNwZWMgKi8KKworLyogXl5eIFNUQVJUIE1VTFRJUExFICovCisgICAgCisgICAgd2hp bGUgKCF0b3VjaCkgeworCXggPSBjbWZsZCgiQW5vdGhlciBmaWxlc3BlYyBvciBFbnRlciIsIiIs JnMseHhzdHJpbmcpOworCWlmICh4ID09IC0zKQorCSAgYnJlYWs7CisJaWYgKHggPCAwKQorCSAg cmV0dXJuKHgpOworCWNrc3RybmNhdChsaW5lLCIsIixMSU5CVUZTSVopOworCWNrc3RybmNhdChs aW5lLHMsTElOQlVGU0laKTsKKwltdWx0aXBsZSsrOworICAgIH0KKyAgICBja21ha21zZyh0bXBi dWYsVE1QQlVGU0laLCJ7IixsaW5lLCJ9IixOVUxMKTsKKyAgICBja3N0cm5jcHkobGluZSx0bXBi dWYsTElOQlVGU0laKTsKKyAgICBjbXJlc3VsdC5ucmVzdWx0ID0gMTsKKyAgICBjbXJlc3VsdC5m Y29kZSA9IF9DTUlGSTsKKworLyogXl5eIEVORCBNVUxUSVBMRSAqLworCisgICAgcyA9IGxpbmU7 CisKKyAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApICAgICAgICAgICAgICAvKiBHZXQgY29uZmly bWF0aW9uICovCisgICAgICByZXR1cm4oeCk7CisKKy8qCisgIENvbW1hbmQgaXMgVE9VQ0ggYW5k IGZpbGUgZG9lc24ndCBleGlzdC4KKyovCisgICAgaWYgKHRvdWNoKSB7CQkJLyogVE9VQ0ggKi8K KwlpZiAoKGNtcmVzdWx0LmZjb2RlID09IF9DTUlGSSAmJiB6Y2hraShzKSA9PSAoQ0tfT0ZGX1Qp LTEpKSB7CisJICAgIEZJTEUgKiBmcDsKKwkgICAgcyA9IGJyc3RyaXAocyk7CisJICAgIGlmICgh aXN3aWxkKHMpKSB7CisjaWZkZWYgVU5JWAorCQlpZiAoc1swXSA9PSAnficpCisJCSAgcyA9IHRp bGRlX2V4cGFuZChzKTsKKyNlbmRpZgkvKiBVTklYICovCisJCWZwID0gZm9wZW4ocywidyIpOwkv KiBDcmVhdGUgZmlsZSAqLworCQlpZiAoIWZwKSB7CisJCSAgICBwcmludGYoIj9UT1VDSCAlczog JXNcbiIscyxja19lcnJzdHIoKSk7CisJCSAgICByYyA9IC05OworCQkgICAgZ290byB4ZG9teWRp cjsKKwkJfQorCQlmY2xvc2UoZnApOworCQljeCA9IFhYRElSOwkJLyogTm93IG1heWJlIGxpc3Qg aXQuICovCisJCW11bHRpcGxlKys7CQkvKiBGb3JjZSBuZXcgZGlyZWN0b3J5IHNjYW4gKi8KKwkg ICAgfQorCX0KKyAgICB9IGVsc2UKKworICAgIGlmIChjbXJlc3VsdC5mY29kZSAhPSBfQ01JRkkp IHsgICAgIC8qIE5vdGhpbmcgbWF0Y2hlZCAqLworCS8qCisJICBOb3RlIC0gdGhpcyBuZXZlciBn ZXRzIGV4ZWN1dGVkIGJlY2F1c2UgYWZ0ZXIgdGhlICJiZWdpbgorCSAgbXVsdGlwbGUiIGhhY2sg YWJvdmUsIHRoZSByZXN1bHQgaXMgYWx3YXlzIF9DTUlGSSkuCisJKi8KKyAgICAgICAgY2hhciAq IG07CisJaWYgKCpzID09ICcvJykKKyNpZmRlZiBVTklYT1JPU0sKKwkgIG0gPSAiZG9lcyBub3Qg bWF0Y2ggc3dpdGNoIG9yIG5hbWUgb2YgYWNjZXNzaWJsZSBmaWxlIjsKKyNlbHNlCisjaWZkZWYg T1MyCisJbSA9ICJkb2VzIG5vdCBtYXRjaCBzd2l0Y2ggb3IgbmFtZSBvZiBhY2Nlc3NpYmxlIGZp bGUiOworI2Vsc2UKKwltID0gIm5vIHN3aXRjaGVzIG1hdGNoIjsKKyNlbmRpZiAvKiBPUzIgKi8K KyNlbmRpZiAvKiBVTklYT1JPU1ggKi8KKwllbHNlCisJICBtID0gIm5vdCBmb3VuZCBvciBub3Qg YWNjZXNzaWJsZSI7CisJcHJpbnRmKCJcIiVzXCIgLSAlc1xuIixzLG0pOworCXJjID0gLTk7CisJ Z290byB4ZG9teWRpcjsKKyAgICB9CisjaWZkZWYgQ09NTUVOVAorICAgIC8qIFRoaXMgY2FuJ3Qg YmUgcmlnaHQgYmVjYXVzZSBpdCdzIGJhc2VkIG9uIF9DTUNGTSAqLworICAgIHdpbGQgPSBjbXJl c3VsdC5ucmVzdWx0OyAgICAgICAgICAgIC8qIFdpbGRjYXJkIHdhcyBnaXZlbj8gKi8KKyAgICBk ZWJ1ZyhGMTExLCJkb215ZGlyIGNtaWZpMiIscyx3aWxkKTsKKyNlbHNlCisgICAgd2lsZCA9IDA7 CisjZW5kaWYJLyogQ09NTUVOVCAqLworCisgICAgaWYgKG91dGZpbGVbMF0pIHsJCQkvKiBJZiBh biBvdXRwdXQgZmlsZSB3YXMgc3BlY2lmaWVkICovCisgICAgICAgIG9mcCA9IGZvcGVuKG91dGZp bGUsInciKTsgICAgICAgLyogb3BlbiBpdCAqLworICAgICAgICBpZiAoIW9mcCkgeworICAgICAg ICAgICAgcHJpbnRmKCI/Q2FuJ3Qgb3BlbiBvdXRwdXQgZmlsZSAlczogJXNcbiIsb3V0ZmlsZSxj a19lcnJzdHIoKSk7CisgICAgICAgICAgICBvZnAgPSBzdGRvdXQ7CisgICAgICAgICAgICByZXR1 cm4oLTkpOworICAgICAgICB9CisgICAgICAgIHBhZ2UgPSAwOworICAgIH0KKworI2lmZGVmIE9T MgorICAgIGlmICghd2lsZCkgeworICAgICAgICBpZiAoemNoa2kocykgPT0gLTIpIHsgICAgICAg ICAgIC8qIEZvdW5kIGEgZGlyZWN0b3J5ICovCisgICAgICAgICAgICBwID0gcyArIChpbnQpc3Ry bGVuKHMpIC0gMTsgLyogWWVzICovCisgICAgICAgICAgICBpZiAoKnAgPT0gJ1xcJyB8fCAqcCA9 PSAnLycpCisgICAgICAgICAgICAgIHN0cmNhdChzLCAiKiIpOworICAgICAgICAgICAgZWxzZSBp ZiAoKnAgPT0gJzonKQorICAgICAgICAgICAgICBzdHJjYXQocywgIi4vKiIpOworICAgICAgICAg ICAgZWxzZQorICAgICAgICAgICAgICBzdHJjYXQocywgIi8qIik7CisgICAgICAgICAgICB3aWxk ID0gMTsgICAgICAgICAgICAgICAgICAgLyogTm93IGl0J3Mgd2lsZCAqLworICAgICAgICB9Cisg ICAgfQorI2Vsc2UKKyAgICBpZiAoIXdpbGQpIGlmIChpc2RpcihzKSkgeyAgICAgICAgICAvKiBJ cyBpdCBhIGRpcmVjdG9yeT8gKi8KKyAgICAgICAgcCA9IHMgKyAoaW50KXN0cmxlbihzKSAtIDE7 ICAgICAvKiBZZXMgKi8KKyNpZmRlZiBWTVMKKyAgICAgICAgeworICAgICAgICAgICAgLyogQ29u dmVydCBmcm9tIEZPTy5ESVI7MSB0byBbeC5GT09dIGlmIG5lY2Vzc2FyeSAqLworICAgICAgICAg ICAgY2hhciBidWZbQ0tNQVhQQVRIKzFdOworICAgICAgICAgICAgZGVidWcoRjAwMCwiZG9teWRp ciBkaXJlY3RvcnkgMCIscywqcCk7CisgICAgICAgICAgICBpZiAoY3Z0ZGlyKHMsYnVmLENLTUFY UEFUSCkgPiAwKQorICAgICAgICAgICAgICBja3N0cm5jcHkobGluZSxidWYsTElOQlVGU0laKTsK KyAgICAgICAgfQorI2VuZGlmIC8qIFZNUyAqLworICAgICAgICBkZWJ1ZyhGMDAwLCJkb215ZGly IGRpcmVjdG9yeSAxIixzLCpwKTsKKyNpZmRlZiBWTVMKKyAgICAgICAgaWYgKCpwID09ICddJyB8 fCAqcCA9PSAnPicgfHwgKnAgPT0gJzonKQorICAgICAgICAgIHN0cmNhdChzLCAiKi4qIik7Cisj ZWxzZQorI2lmZGVmIGRhdGFnZW5lcmFsCisgICAgICAgIGlmICgqcCA9PSAnOicpCisgICAgICAg ICAgc3RyY2F0KHMsICIrIik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBzdHJjYXQocywgIjor Iik7CisjZWxzZQorI2lmZGVmIFNUUkFUVVMKKyAgICAgICAgaWYgKCpwID09ICc+JykKKyAgICAg ICAgICBzdHJjYXQocywgIioiKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIHN0cmNhdChzLCAi PioiKTsKKyNlbmRpZiAvKiBTVFJBVFVTICovCisjZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KKyNl bmRpZiAvKiBWTVMgKi8KKyAgICAgICAgd2lsZCA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAv KiBOb3cgaXQncyB3aWxkICovCisgICAgICAgIGRlYnVnKEYwMDAsImRvbXlkaXIgZGlyZWN0b3J5 IDIiLHMsKnApOworICAgIH0KKyNlbmRpZiAvKiBPUzIgKi8KKworI2lmZGVmIFpYUkVXSU5ECisv KiBjbWlmaSgpIGFscmVhZHkgY2FsbGVkIG56eHBhbmQgc28gd2UgY2FuIGp1c3QgcmUtdXNlIHRo ZSBzYW1lIGxpc3QuICovCisgICAgaWYgKCFtdWx0aXBsZSkgeworCXggPSB6eHJld2luZCgpOwkJ CS8qIFJld2luZCB0aGUgbGlzdCAqLworCWRlYnVnKEYxMTEsImRvbXlkaXIgenhyZXdpbmQiLHMs eCk7CisgICAgfSBlbHNlIHsKKyNlbmRpZiAvKiBaWFJFV0lORCAqLworLyoKKyAgSW4gY2FzZSB3 ZSBnYXZlIG11bHRpcGxlIGZpbGVzcGVjcyB0aGV5IGFyZSBub3cgaW4ge2EsYixjfSBsaXN0IGZv cm1hdC4KKyAgV2hpY2ggaXMgYSB2YWxpZCB3aWxkY2FyZC4gIFdlIHBhc3MgaXQgdG8gbnp4cGFu ZCgpIHRvIGdldCBiYWNrIHRoZSBsaXN0CisgIG9mIGZpbGVzIHRoYXQgbWF0Y2guICBUaGlzIGlz IGZpbmUgZm9yIERJUkVDVE9SWSBidXQgaXQncyBub3QgZmluZCBmb3IKKyAgVE9VQ0ggYmVjYXVz ZSB3ZSB3YW50IFRPVUNIIHRvIHNlZSB0aG9zZSBuYW1lcyBzbyBpdCBjYW4gY3JlYXRlIHRoZSBm aWxlcy4KKyAgU28gZm9yIG5vdyBhdCBsZWFzdCwgaWYgVE9VQ0ggaXMgdG8gYmUgdXNlZCB0byBj cmVhdGUgZmlsZXMgLS0gYXMgb3Bwb3NlZAorICB0byBjaGFuZ2luZyB0aGUgdGltZXN0YW1wcyBv ZiBleGlzdGluZyBmaWxlcyAtLSBpdCBjYW4gb25seSBkbyBvbmUgZmlsZQorICBhdCBhIHRpbWUu CisqLworCW56eG9wdHMgPSAoc2hvdyA9PSBaWF9ESVJPTkxZKSA/IFpYX0RJUk9OTFkgOgorCSAg KHNob3cgPT0gWlhfRklMT05MWSA/IFpYX0ZJTE9OTFkgOiAwKTsKKwlpZiAobWF0Y2hkb3QpICBu enhvcHRzIHw9IFpYX01BVENIRE9UOworCWlmIChyZWN1cnNpdmUpIG56eG9wdHMgfD0gWlhfUkVD VVJTRTsKKwl4ID0gbnp4cGFuZChzLG56eG9wdHMpOyAgICAgICAgICAgICAvKiBFeHBhbmQgZmls ZSBsaXN0ICovCisJZGVidWcoRjExMSwiZG9teWRpciBuenhwYW5kIixzLHgpOworI2lmZGVmIFpY UkVXSU5ECisgICAgfQorI2VuZGlmIC8qIFpYUkVXSU5EICovCisKKyNpZm5kZWYgTk9TUEwKKyAg ICBpZiAoYXJyYXkpIHsKKyAgICAgICAgaW50IG4sIHh4OworICAgICAgICBuID0gKHggPCAwKSA/ IDAgOiB4OworICAgICAgICBpZiAoKHh4ID0gZGNsYXJyYXkoYXJyYXksbikpIDwgMCkgeworICAg ICAgICAgICAgcHJpbnRmKCI/QXJyYXkgZGVjbGFyYXRpb24gZmFpbHVyZVxuIik7CisgICAgICAg ICAgICByYyA9IC05OworICAgICAgICAgICAgZ290byB4ZG9teWRpcjsKKyAgICAgICAgfQorCWFy cmF5aW5kZXggPSB4eDsKKyAgICAgICAgYXAgPSBhX3B0clt4eF07CQkJLyogUG9pbnRlciB0byBs aXN0IG9mIGVsZW1lbnRzICovCisgICAgICAgIGlmIChhcCkJCQkJLyogU2V0IGVsZW1lbnQgMCB0 byBkaW1lbnNpb24gKi8KKyAgICAgICAgICBtYWtlc3RyKCYoYXBbMF0pLCIwIik7CS8qIHdoaWNo IHNvIGZhciBpcyB6ZXJvICovCisgICAgICAgIGlmIChuIDwgMSkgewkJCS8qIE5vIGZpbGVzIG1h dGNoZWQsIGRvbmUuICovCisgICAgICAgICAgICByYyA9IDA7CisgICAgICAgICAgICBnb3RvIHhk b215ZGlyOworICAgICAgICB9CisgICAgfSBlbHNlCisjZW5kaWYgLyogTk9TUEwgKi8KKyAgICAg IGlmICghdG91Y2ggJiYgeCA8IDEpIHsKKyNpZmRlZiBDS1JPT1QKKyAgICAgICAgICBleHRlcm4g aW50IGNrcm9vdGVycjsKKyAgICAgICAgICBpZiAoY2tyb290ZXJyKQorICAgICAgICAgICAgcHJp bnRmKCI/T2ZmIGxpbWl0czogJXNcbiIscyk7CisgICAgICAgICAgZWxzZQorI2VuZGlmIC8qIENL Uk9PVCAqLworICAgICAgICAgICAgaWYgKHggPT0gMCAmJiBpc2RpcihzKSkKKyAgICAgICAgICAg ICAgcHJpbnRmKCI/RW1wdHkgZGlyZWN0b3J5IC0gXCIlc1wiXG4iLCBzKTsKKyAgICAgICAgICAg IGVsc2UKKyAgICAgICAgICAgICAgcHJpbnRmKCI/JXMgJXMgbWF0Y2ggLSBcIiVzXCJcbiIsCisg ICAgICAgICAgICAgICAgICAgICAoeCA9PSAwKSA/ICJObyIgOiAiVG9vIG1hbnkiLAorICAgICAg ICAgICAgICAgICAgICAgKHNob3cgPT0gMikgPyAiZGlyZWN0b3JpZXMiIDogImZpbGVzIiwKKyAg ICAgICAgICAgICAgICAgICAgIGJyc3RyaXAocykKKyAgICAgICAgICAgICAgICAgICAgICk7Cisg ICAgICAgICAgcmMgPSAtOTsKKyAgICAgICAgICBnb3RvIHhkb215ZGlyOworICAgIH0KKyAgICBu eCA9IHg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZW1lbWJlciBob3cgbWFueSBm aWxlcyAqLworICAgIGlmIChueCA8IDIpIHhzb3J0ID0gMDsJCS8qIFNraXAgc29ydGluZyBpZiBu b25lIG9yIG9uZSAqLworCisgICAgaWYgKG1zZykgeworICAgICAgICBtYWtlc3RyKCZkaXJtc2cs dG1wYnVmKTsKKyAgICAgICAgZGlybXNnbGVuID0gc3RybGVuKHRtcGJ1Zik7CisgICAgfQorCisj aWZkZWYgVk1TCisgICAgY2RwID0gemd0ZGlyKCk7ICAgICAgICAgICAgICAgICAgICAgLyogR2V0 IGN1cnJlbnQgZGlyZWN0b3J5ICovCisgICAgZGVidWcoRjExMCwiZG9teWRpciBWTVMgemd0ZGly IixjZHAsMCk7CisjZW5kaWYgLyogVk1TICovCisKKyAgICBpZiAoeHNvcnQgJiYgdmVyYm9zZSkg eyAgICAgICAgICAgICAvKiBJZiBzb3J0aW5nLCBhbGxvY2F0ZSBzcGFjZSAqLworICAgICAgICBp ZiAoIShkaXJsaXN0ID0gKGNoYXIgKiopIG1hbGxvYygoeCArIDEpICogc2l6ZW9mKGNoYXIgKiop KSkpIHsKKyAgICAgICAgICAgIGlmICghcXVpZXQpIHsKKyAgICAgICAgICAgICAgICBwcmludGYo IiogV2FybmluZzogRmFpbHVyZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIHNvcnRpbmcuXG4iKTsK KyAgICAgICAgICAgICAgICBwcmludGYoIiogV2lsbCBwcm9jZWVkIHdpdGhvdXQgc29ydGluZy4u LlxuIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB4c29ydCA9IDA7CisgICAgICAgIH0K KyAgICAgICAgZGVidWcoRjEwMSwiZG9teWRpciBzb3J0IG1hbGxvYyIsIiIseHNvcnQpOworICAg IH0KKworICAgIC8qIERpc3BsYXkgdGhlIGxpc3RpbmcgKi8KKworI2lmbmRlZiBOT1NQTAorICAg IGlmIChhcnJheSkgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFN0b3JpbmcgaW5zdGVhZCBv ZiBwcmludGluZyAqLworICAgICAgaGVhZGluZyA9IDA7CisjZW5kaWYgLyogTk9TUEwgKi8KKwor ICAgIGlmIChoZWFkaW5nKSB7ICAgICAgICAgICAgICAgICAgICAgIC8qIElmIC9IRUFESU5HIHBy aW50IGhlYWRpbmcgKi8KKyAgICAgICAgemZucWZwKHMsVE1QQlVGU0laLHRtcGJ1Zik7CisgICAg ICAgIGZwcmludGYob2ZwLCJcbkRpcmVjdG9yeSBvZiAlc1xuXG4iLHRtcGJ1Zik7CisgICAgICAg IG4gKz0gMzsKKyAgICB9CisgICAgaWYgKHBhZ2UgPiAtMSkgICAgICAgICAgICAgICAgICAgICAg LyogUGFnaW5nICovCisgICAgICB4YXNrbW9yZSA9IHBhZ2U7CisKKyAgICBpZiAoIXZlcmJvc2Ug JiYgIXRvdWNoKSB7CQkvKiAvQlJJRUYgKi8KKyAgICAgICAgaWYgKG91dGZpbGVbMF0pIHsgICAg ICAgICAgICAgICAvKiBUbyBmaWxlICAqLworICAgICAgICAgICAgaW50IGsgPSAwOworICAgICAg ICAgICAgem5leHQobmFtZSk7CisgICAgICAgICAgICB3aGlsZSAobmFtZVswXSkgeyAgICAgICAg ICAgLyogT25lIGxpbmUgcGVyIGZpbGUgKi8KKyAgICAgICAgICAgICAgICBrKys7CisgICAgICAg ICAgICAgICAgaWYgKGZzKSBpZiAoZmlsZXNlbGVjdChuYW1lLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZGlyX2FmdCxkaXJfYmVmLGRpcl9uYWYsZGlyX25iZiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbnNpemUsbWF4c2l6ZSwhYmFj a3VwLDE2LHhsaXN0KSA8IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgem5leHQobmFtZSk7Cisg ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgICAgICBmcHJpbnRmKG9mcCwiJXNcbiIsbmFtZSk7CisgICAgICAgICAgICAgICAgem5leHQo bmFtZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoaGVhZGluZykKKyAgICAgICAg ICAgICAgZnByaW50ZihvZnAsIkZpbGVzOiAlZFxuXG4iLGspOworICAgICAgICAgICAgcmMgPSAx OworICAgICAgICAgICAgZ290byB4ZG9teWRpcjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg ICAgIHJjID0geGZpbGhlbHAoeCwiIiwiIixuLDAsMSwKKwkJCSAgZGlyX2FmdCxkaXJfYmVmLGRp cl9uYWYsZGlyX25iZiwKKwkJCSAgbWluc2l6ZSxtYXhzaXplLCFiYWNrdXAsMTYseGxpc3QpOwor ICAgICAgICAgICAgaWYgKHJjIDwgMCkKKyAgICAgICAgICAgICAgZ290byB4ZG9teWRpcjsKKyAg ICAgICAgICAgIGlmIChoZWFkaW5nICYmIHJjID4gMCkKKyAgICAgICAgICAgICAgZnByaW50Zihv ZnAsIkZpbGVzOiAlZFxuXG4iLHgpOyAvKiAoTWlnaHQgc2Nyb2xsIGEgbGluZSBvciAyKSAqLwor ICAgICAgICAgICAgcmMgPSAxOworICAgICAgICAgICAgZ290byB4ZG9teWRpcjsKKyAgICAgICAg fQorICAgIH0KKyAgICBuZGlycyA9IG5maWxlcyA9IDBMOwkJLyogSW5pdGlhbGl6ZSBjb3VudGVy cyAqLworICAgIG5ieXRlcyA9IChDS19PRkZfVCkwOworCisgICAgaWYgKGRpcl9leGMpICAgICAg ICAgICAgICAgICAgICAgICAgLyogSGF2ZSBleGNlcHRpb24gbGlzdD8gKi8KKyAgICAgIG1ha2Vs aXN0KGRpcl9leGMseGxpc3QsMTYpOwkvKiBZZXMsIGNvbnZlcnQgdG8gYXJyYXkgKi8KKworICAg IGRpcmFjdGl2ZSA9IDE7CisgICAgem5leHQobmFtZSk7ICAgICAgICAgICAgICAgICAgICAgICAg LyogR2V0IG5leHQgZmlsZSAqLworICAgIHdoaWxlIChuYW1lWzBdKSB7ICAgICAgICAgICAgICAg ICAgIC8qIExvb3AgZm9yIGVhY2ggZmlsZSAqLworICAgICAgICBpZiAoZnMpIGlmIChmaWxlc2Vs ZWN0KG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgIGRpcl9hZnQsZGlyX2JlZixkaXJfbmFm LGRpcl9uYmYsCisgICAgICAgICAgICAgICAgICAgICAgIG1pbnNpemUsbWF4c2l6ZSwhYmFja3Vw LDE2LHhsaXN0KSA8IDEpIHsKKyAgICAgICAgICAgIHpuZXh0KG5hbWUpOworICAgICAgICAgICAg Y29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgbGVuID0gemdldGZzKG5hbWUpOyAgICAgICAg ICAgICAvKiBHZXQgZmlsZSBsZW5ndGggKi8KKyAgICAgICAgZGVidWcoRjExMSwiZG9teWRpciB6 Z2V0ZnMiLG5hbWUsbGVuKTsKKyNpZmRlZiBWTVNPUlVOSVgKKyAgICAgICAgaXRzYWRpciA9IHpn ZnNfZGlyOyAgICAgICAgICAgICAvKiBTZWUgaWYgaXQncyBhIGRpcmVjdG9yeSAqLworI2Vsc2UK KyAgICAgICAgaXRzYWRpciA9IChsZW4gPT0gKENLX09GRl9UKS0yIHx8IGlzZGlyKG5hbWUpKTsK KyNlbmRpZiAvKiBWTVNPVU5JWCAqLworICAgICAgICBkZWJ1ZyhGMTExLCJkb215ZGlyIGl0c2Fk aXIiLG5hbWUsaXRzYWRpcik7CisgICAgICAgIGlmICgoaXRzYWRpciAmJiAoc2hvdyA9PSAxKSkg fHwgKCFpdHNhZGlyICYmIChzaG93ID09IDIpKSkgeworICAgICAgICAgICAgem5leHQobmFtZSk7 CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICAvKiBHZXQgaGVyZSB3 aGVuIHdlIGtub3cgd2UgaGF2ZSBzZWxlY3RlZCB0aGlzIGZpbGUgKi8KKworICAgICAgICBubWF0 Y2hlcysrOworICAgICAgICBpZiAoaXRzYWRpcikgeyAgICAgICAgICAgICAgICAgIC8qIEFjY3Vt dWxhdGUgdG90YWxzIGZvciBzdW1tYXJ5ICovCisgICAgICAgICAgICBuZGlycysrOworICAgICAg ICB9IGVsc2UgeworICAgICAgICAgICAgbmZpbGVzKys7CisgICAgICAgICAgICBuYnl0ZXMgKz0g bGVuOworICAgICAgICB9CisJZHN0ciA9IE5VTEw7CisJaWYgKGN4ID09IFhYVE9VQykgewkJLyog Q29tbWFuZCB3YXMgVE9VQ0gsIG5vdCBESVJFQ1RPUlkgKi8KKwkgICAgY2hhciAqIGZpbGVuYW1l OworCSAgICBzdHJ1Y3QgemF0dHIgeHg7CisJICAgIGRzdHIgPSBja2N2dGRhdGUoIiIsMCk7CisJ ICAgIHh4LmRhdGUudmFsID0gZHN0cjsKKwkgICAgeHguZGF0ZS5sZW4gPSAoaW50KXN0cmxlbih4 eC5kYXRlLnZhbCk7CisJICAgIHh4Lmxwcm90ZWN0LmxlbiA9IDA7CisJICAgIGRlYnVnKEYxMTAs ImRvbXlkaXIgdG91Y2giLG5hbWUsMCk7CisJICAgIGRlYnVnKEYxMTAsImRvbXlkaXIgdG91Y2gi LGRzdHIsMCk7CisJICAgIGlmICh6c3RpbWUobmFtZSwmeHgsMCkgPCAwKSB7CisJCXByaW50Zigi P1RPVUNIICVzOiAlc1xuIixuYW1lLGNrX2VycnN0cigpKTsKKwkJcmMgPSAtOTsKKwkJZ290byB4 ZG9teWRpcjsKKwkgICAgfQorCSAgICBpZiAoIXZlcmJvc2UpIHsJCS8qIE5vIGxpc3Rpbmcgc28g c2tpcCBkZXRhaWwgKi8KKwkJem5leHQobmFtZSk7CisJCWNvbnRpbnVlOworCSAgICB9CisJfQor ICAgICAgICBpZiAoc3VtbWFyeSkgewkJCS8qIFN1bW1hcnkgb25seSwgbm8gZGV0YWlsICovCisg ICAgICAgICAgICB6bmV4dChuYW1lKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9 CisKKyNpZm5kZWYgTk9TUEwKKyAgICAgICAgaWYgKGFycmF5KSB7CisgICAgICAgICAgICBkZWJ1 ZyhGMTExLCJkb215ZGlyIGFycmF5IixuYW1lLG5maWxlcyk7CisgICAgICAgICAgICBpZiAoYXAp CisgICAgICAgICAgICAgIG1ha2VzdHIoJihhcFtubWF0Y2hlc10pLG5hbWUpOworICAgICAgICAg ICAgem5leHQobmFtZSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorI2VuZGlm IC8qIE5PU1BMICovCisKKy8qCisgIE5PVEU6IFRoZSBzcHJpbnRmJ3MgaW4gdGhpcyByb3V0aW5l IHNob3VsZCBiZSBzYWZlLiAgVGhleSBpbnZvbHZlCisgIHBlcm1pc3Npb24gc3RyaW5ncywgZGF0 ZS90aW1lIHN0cmluZ3MsIGFuZCBmaWxlbmFtZXMsIGFsbCBvZiB3aGljaCBoYXZlCisgIGtub3du IG1heGltdW0gbGVuZ3Roczsgbm9uZSBvZiB0aGVzZSBpdGVtcyBpcyBpbnB1dCBmcm9tIHVzZXJz LiAgVGhlCisgIGRlc3RpbmF0aW9uIGJ1ZmZlcnMgYXJlIGxhcmdlIGVub3VnaCB0byBob2xkIG1h eGltdW0gc2l6ZXMgZm9yIGFueSBhbmQKKyAgYWxsIGl0ZW1zLiAgTk9URSAyOiBJZiBjb21tYW5k IHdhcyBUT1VDSCwgZHN0ciB3YXMgYWxyZWFkeSBzZXQganVzdAorICBhYm92ZS4KKyovCisJaWYg KCFkc3RyKSB7CQkJLyogR2V0IGZpbGUncyBtb2RpZmljYXRpb24gZGF0ZS90aW1lICovCisJICAg IGRzdHIgPSB6ZmNkYXQobmFtZSk7CisJICAgIGRlYnVnKEYxMTEsImRvbXlkaXIgemNmZGF0Iixk c3RyLDApOworCX0KKyAgICAgICAgaWYgKCFkc3RyKSBkc3RyID0gIiI7CisgICAgICAgIHsKKy8q CisgIE5vdGUgdGhhdCB6ZmNkYXQoKSBhbHdheXMgcmV0dXJucyAiIiBvciB5eXl5bW1kZCBoaDpt bTpzcywgc28gYW55IHdhcm5pbmdzCisgIGFib3V0IHBvc3NpYmxlIG91dC1vZi1ib3VuZHMgZHN0 cltdIGFycmF5IHJlZnMgZG8gbm90IGFwcGx5LiAgVGhpcyBibG9jayBvZgorICBjb2RlIGlzIHRv IHN0aWZsZSB0aGUgd2FybmluZ3MgYW5kIGFsc28gYWxsb3dzIGZvciBhbnkgb3V0LW9mLXNwZWMK KyAgemZjZGF0KCkgaW1wbGVtZW50YXRpb25zLgorKi8KKyAgICAgICAgICAgIGludCB4OworICAg ICAgICAgICAgY2hhciAqIHAgPSAiMDAwMDAwMDAgMDA6MDA6MDAiOworICAgICAgICAgICAgeCA9 IGNrc3RybmNweSh4YnVmLGRzdHIsMzIpOworICAgICAgICAgICAgaWYgKHggPCAxNykgY2tzdHJu Y3B5KCZ4YnVmW3hdLHAreCwzMi14KTsKKyAgICAgICAgICAgIGRzdHIgPSB4YnVmOworICAgICAg ICB9CisgICAgICAgIGlmIChlbmdkYXRlKSB7ICAgICAgICAgICAgICAgICAgLyogRW5nbGlzaCBk YXRlIHJlcXVlc3RlZD8gKi8KKyAgICAgICAgICAgIHNob3J0IG1vbnRoLCBkYXksIHllYXIsIGhv dXIsIG1pbnV0ZSwgc2Vjb25kczsKKyAgICAgICAgICAgIG1vbnRoID0gKGRzdHJbNF0tNDgpKjEw ICsgKGRzdHJbNV0tNDgpOworICAgICAgICAgICAgbXN0ciAgPSAobW9udGggPiAwICYmIG1vbnRo IDw9IDEyKSA/IG1vbnRoc1ttb250aC0xXSA6ICJ4eHgiOworICAgICAgICAgICAgZGF5ICAgPSAo ZHN0cls2XS00OCkqMTAgKyAoZHN0cls3XS00OCk7CisgICAgICAgICAgICB5ZWFyICA9ICgoKGRz dHJbMF0tNDgpKjEwICsKKyAgICAgICAgICAgICAgICAgICAgICAoZHN0clsxXS00OCkpKjEwICsK KyAgICAgICAgICAgICAgICAgICAgICAoZHN0clsyXS00OCkpKjEwICsKKyAgICAgICAgICAgICAg ICAgICAgICAoZHN0clszXS00OCk7CisgICAgICAgICAgICBob3VyICA9IChkc3RyWzldLTQ4KSox MCArIChkc3RyWzEwXS00OCk7CisgICAgICAgICAgICBtaW51dGUgPSAoZHN0clsxMl0tNDgpKjEw ICsgKGRzdHJbMTNdLTQ4KTsKKyAgICAgICAgICAgIHNlY29uZHMgPSAoZHN0clsxNV0tNDgpKjEw ICsgKGRzdHJbMTZdLTQ4KTsKKyAgICAgICAgICAgIHNwcmludGYoZGJ1ZiwgICAgICAgICAgICAg ICAvKiBTQUZFICovCisgICAgICAgICAgICAgICAgICAgICIlMmQtJXMtJTRkICUwMmQ6JTAyZDol MDJkIiwKKyAgICAgICAgICAgICAgICAgICAgZGF5LG1zdHIseWVhcixob3VyLG1pbnV0ZSxzZWNv bmRzCisgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICBkc3RyID0gZGJ1ZjsKKyAg ICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBJU08gZGF0ZSAqLworICAg ICAgICAgICAgZGJ1ZlswXSA9IGRzdHJbMF07ICAgICAgICAgIC8qIHl5eXkgKi8KKyAgICAgICAg ICAgIGRidWZbMV0gPSBkc3RyWzFdOworICAgICAgICAgICAgZGJ1ZlsyXSA9IGRzdHJbMl07Cisg ICAgICAgICAgICBkYnVmWzNdID0gZHN0clszXTsKKyAgICAgICAgICAgIGRidWZbNF0gPSAnLSc7 CisgICAgICAgICAgICBkYnVmWzVdID0gZHN0cls0XTsgICAgICAgICAgLyogbW0gKG51bWVyaWMp ICovCisgICAgICAgICAgICBkYnVmWzZdID0gZHN0cls1XTsKKyAgICAgICAgICAgIGRidWZbN10g PSAnLSc7CisgICAgICAgICAgICBkYnVmWzhdID0gZHN0cls2XTsgICAgICAgICAgLyogZGQgKi8K KyAgICAgICAgICAgIGRidWZbOV0gPSBkc3RyWzddOworICAgICAgICAgICAgc3RyY3B5KGRidWYr MTAsZHN0cis4KTsgICAgIC8qIGhoOm1tOnNzICovCisgICAgICAgICAgICBkc3RyID0gZGJ1ZjsK KyAgICAgICAgfQorICAgICAgICBkbGVuID0gc3RybGVuKGRidWYpOyAgICAgICAgICAgIC8qIExl bmd0aCBvZiBkYXRlICovCisgICAgICAgIG5hbWVbQ0tNQVhQQVRIXSA9IE5VTDsKKyNpZmRlZiBD S19QRVJNUworI2lmZGVmIFZNU09SVU5JWAorICAgICAgICBwID0gemlwZXJtKG5hbWUpOyAgICAg ICAgICAgICAgIC8qIEdldCBwZXJtaXNzaW9ucyAqLworICAgICAgICBkZWJ1ZyhGMTEwLCJ6aXBl cm0gcGVybXMiLHAsMCk7CisjZWxzZQorICAgICAgICBwID0gemdwZXJtKG5hbWUpOworICAgICAg ICBkZWJ1ZyhGMTEwLCJ6Z3Blcm0gcGVybXMiLHAsMCk7CisjZW5kaWYgLyogVk1TT1JVTklYICov CisjZWxzZQorICAgICAgICBwID0gTlVMTDsKKyAgICAgICAgZGVidWcoRjExMCwiTlVMTCBwZXJt cyIscCwwKTsKKyNlbmRpZiAvKiBDS19QRVJNUyAqLworCisjaWZkZWYgVk1TCisgICAgICAgIC8q IEdldCByZWxhdGl2ZSBuYW1lIHRvIHNhdmUgc3BhY2UgLS0gVk1TIGZ1bGxuYW1lcyBhcmUgbG9u Zy4uLiAqLworICAgICAgICBja3N0cm5jcHkobmFtZSx6cmVsbmFtZShuYW1lLGNkcCksQ0tNQVhQ QVRIKTsKKyNlbmRpZiAvKiBWTVMgKi8KKworICAgICAgICBpZiAoaXRzYWRpciAmJiBsZW4gPCAo Q0tfT0ZGX1QpMCkgeyAvKiBEaXJlY3RvcnkgKi8KKyNpZmRlZiBWTVMKKyAgICAgICAgICAgIHNw cmludGYobGluZWJ1ZiwiJS0yMnMlLTEwcyAgJXMgICVzIixwLCI8RElSPiIsZHN0cixuYW1lKTsK KyNlbHNlCisgICAgICAgICAgICBpZiAocCkKKyAgICAgICAgICAgICAgc3ByaW50ZihsaW5lYnVm LCIlMTBzJS0xMHMgICVzICAlcyIscCwiPERJUj4iLGRzdHIsbmFtZSk7CisgICAgICAgICAgICBl bHNlCisgICAgICAgICAgICAgIHNwcmludGYobGluZWJ1ZiwiJS0xMHMgICVzICAlcyIsICI8RElS PiIsIGRzdHIsIG5hbWUpOworI2VuZGlmIC8qIFZNUyAqLworICAgICAgICB9IGVsc2UgeyAgICAg ICAgICAgICAgICAgICAgICAgIC8qIFJlZ3VsYXIgZmlsZSAqLworI2lmZGVmIFZNUworICAgICAg ICAgICAgc3ByaW50ZihsaW5lYnVmLCIlLTIycyUxMHMgICVzICAlcyIsIHAsIGNrZnN0b2EobGVu KSwgZHN0ciwgbmFtZSk7CisjZWxzZQorICAgICAgICAgICAgaWYgKHApCisgICAgICAgICAgICAg IHNwcmludGYobGluZWJ1ZiwiJTEwcyUxMHMgICVzICAlcyIsIHAsIGNrZnN0b2EobGVuKSwgZHN0 ciwgbmFtZSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIHNwcmludGYobGluZWJ1 ZiwiJTEwcyAgJXMgICVzIiwgY2tmc3RvYShsZW4pLCBkc3RyLCBuYW1lKTsKKyNlbmRpZiAvKiBW TVMgKi8KKyAgICAgICAgfQorI2lmZGVmIFVOSVgKKyNpZmRlZiBDS1NZTUxJTksKKyAgICAgICAg aWYgKHpnZnNfbGluaykgewkJLyogSWYgaXQncyBhIHN5bWxpbmsgKi8KKwkgICAgaWYgKGRvbnRz aG93bGlua3MpIHsJLyogSWYgL05PTElOS1MgZG9uJ3Qgc2hvdyBpdCAqLworCQl6bmV4dChuYW1l KTsKKwkJY29udGludWU7CisJICAgIH0KKwl9CisgICAgICAgIGlmICh6Z2ZzX2xpbmsgJiYgIWRv bnRmb2xsb3dsaW5rcykgeyAvKiBTeW1saW5rIGFuZCBmb2xsb3dpbmcgbGlua3MgKi8KKyAgICAg ICAgICAgIGludCBuLCBtOwkJCS8qIFNob3cgd2hhdCB0aGUgbGluayBwb2ludHMgdG8gKi8KKyAg ICAgICAgICAgIGV4dGVybiBjaGFyIGxpbmtuYW1lW107CisgICAgICAgICAgICBuID0gc3RybGVu KGxpbmVidWYpOworICAgICAgICAgICAgbSA9IHN0cmxlbihsaW5rbmFtZSkgKyBuOworICAgICAg ICAgICAgaWYgKG0gPCBDS01BWFBBVEggKyA1OCkKKyAgICAgICAgICAgICAgc3RyY3B5KGxpbmVi dWYrbiwgIiAtPiAiKTsgLyogc2FmZSAoY2hlY2tlZCkgKi8KKyAgICAgICAgICAgIGlmIChtICsg NCA8IENLTUFYUEFUSCAtIDU4KQorICAgICAgICAgICAgICBzdHJjcHkobGluZWJ1ZituKzQsIGxp bmtuYW1lKTsgLyogc2FmZSAoY2hlY2tlZCkgKi8KKyAgICAgICAgfSBlbHNlCisjZW5kaWYgLyog Q0tTWU1MSU5LICovCisjZW5kaWYgLyogVU5JWCAqLworICAgICAgICBpZiAoeGZlcm1vZCkgeyAg ICAgICAgICAgICAgICAgIC8qIFNob3cgdHJhbnNmZXIgbW9kZSAqLworICAgICAgICAgICAgaW50 IGksIHgsIHk7CisgICAgICAgICAgICBjaGFyICogcyA9ICIiOworICAgICAgICAgICAgeSA9IC0x OworICAgICAgICAgICAgeCA9IHNjYW5maWxlKG5hbWUsJnksbnNjYW5maWxlKTsKKyAgICAgICAg ICAgIHN3aXRjaCAoeCkgeworICAgICAgICAgICAgICBjYXNlIEZUX1RFWFQ6IHMgPSAiIChUKSI7 IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEZUXzdCSVQ6IHMgPSAiIChUKSg3QklUKSI7IGJy ZWFrOworICAgICAgICAgICAgICBjYXNlIEZUXzhCSVQ6IHMgPSAiIChUKSg4QklUKSI7IGJyZWFr OworI2lmZGVmIFVOSUNPREUKKyAgICAgICAgICAgICAgY2FzZSBGVF9VVEY4OiBzID0gIiAoVCko VVRGOCkiOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBGVF9VQ1MyOgorICAgICAgICAgICAg ICAgIHMgPSB5ID8gIiAoVCkoVUNTMkxFKSIgOiAiIChUKShVQ1MyQkUpIjsKKyAgICAgICAgICAg ICAgICBicmVhazsKKyNlbmRpZiAvKiBVTklDT0RFICovCisgICAgICAgICAgICAgIGNhc2UgRlRf QklOOiAgcyA9ICIgKEIpIjsgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo ISpzKSB7CisgICAgICAgICAgICAgICAgcyA9IGJpbmFyeSA/ICIgKEIpIiA6ICIgKFQpIjsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgqcykgeworICAgICAgICAgICAgICAgIGludCBu OworICAgICAgICAgICAgICAgIG4gPSBzdHJsZW4obGluZWJ1Zik7CisgICAgICAgICAgICAgICAg aWYgKG4gKyA0IDwgQ0tNQVhQQVRIIC0gNTgpCisgICAgICAgICAgICAgICAgICBzdHJjcHkobGlu ZWJ1ZituLCBzKTsgLyogc2FmZSAoY2hlY2tlZCkgKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAg fQorICAgICAgICBpZiAobXNnICYmIGRpcm1zZykgeworICAgICAgICAgICAgaW50IG47CisgICAg ICAgICAgICBuID0gc3RybGVuKGxpbmVidWYpOworICAgICAgICAgICAgaWYgKG4gKyBkaXJtc2ds ZW4gKyAyIDwgQ0tNQVhQQVRIKQorICAgICAgICAgICAgICBzcHJpbnRmKChjaGFyICopKGxpbmVi dWYrbiksIiAlcyIsIGRpcm1zZyk7IC8qIFNBRkUgKi8KKyAgICAgICAgfQorICAgICAgICBpZiAo eHNvcnQpIHsJCQkvKiBTb3J0aW5nIC0gc2F2ZSBsaW5lICovCisgICAgICAgICAgICBpID0gc3Ry bGVuKGxpbmVidWYpOworICAgICAgICAgICAgaWYgKChuZGlybGlzdCA+PSBueCkgfHwKKyAgICAg ICAgICAgICAgICAhKGRpcmxpc3RbbmRpcmxpc3RdID0gKGNoYXIgKiltYWxsb2MoaSsxKSkpIHsK KyAgICAgICAgICAgICAgICBwcmludGYoIj9NZW1vcnkgYWxsb2NhdGlvbiBlcnJvciAtIHRyeSAv Tk9TT1JUXG4iKTsKKyAgICAgICAgICAgICAgICByYyA9IC05OworICAgICAgICAgICAgICAgIGdv dG8geGRvbXlkaXI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzdHJjcHkoZGlybGlzdFtu ZGlybGlzdF0sbGluZWJ1Zik7IC8qIHNhZmUgKi8KKyAgICAgICAgICAgIG5kaXJsaXN0Kys7Cisg ICAgICAgIH0KKyAgICAgICAgem5leHQobmFtZSk7ICAgICAgICAgICAgICAgICAgICAvKiBQZWVr IGFoZWFkIHRvIG5leHQgZmlsZSAqLworICAgICAgICBpZiAoIXhzb3J0KSB7CisJICAgIGlmICgh dG91Y2ggfHwgKHRvdWNoICYmIHZlcmJvc2UpKQorCSAgICAgIGZwcmludGYob2ZwLCIlc1xuIixs aW5lYnVmKTsKKyAgICAgICAgICAgIGlmIChwYWdlICYmIChuYW1lWzBdIHx8IGhlYWRpbmcpKSB7 IC8qIElmIC9QQUdFICovCisgICAgICAgICAgICAgICAgaWYgKGNtZF9jb2xzID4gMCkgeworICAg ICAgICAgICAgICAgICAgICBpbnQgeCA9IHN0cmxlbihsaW5lYnVmKTsKKyAgICAgICAgICAgICAg ICAgICAgaW50IHk7CisgICAgICAgICAgICAgICAgICAgIHkgPSAoeCAlIGNtZF9jb2xzKSA/IDEg OiAwOworICAgICAgICAgICAgICAgICAgICBuICs9IHggLyBjbWRfY29scyArIHk7CisgICAgICAg ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbisrOworICAgICAgICAgICAg ICAgIH0KKyNpZmRlZiBDS19UVEdXU0laCisgICAgICAgICAgICAgICAgaWYgKG4gPiAoY21kX3Jv d3MgLSAzKSkgeyAvKiBEbyBtb3JlLXByb21wdGluZyAqLworICAgICAgICAgICAgICAgICAgICBp ZiAoIWFza21vcmUoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmMgPSAwOworICAgICAg ICAgICAgICAgICAgICAgICAgZ290byB4ZG9teWRpcjsKKyAgICAgICAgICAgICAgICAgICAgfSBl bHNlCisgICAgICAgICAgICAgICAgICAgICAgbiA9IDA7CisgICAgICAgICAgICAgICAgfQorI2Vu ZGlmIC8qIENLX1RUR1dTSVogKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyNp Zm5kZWYgTk9TUEwKKyAgICBpZiAoYXJyYXkpIHsKKyAgICAgICAgaWYgKGFwKQorICAgICAgICAg IG1ha2VzdHIoJihhcFswXSksY2tpdG9hKG5tYXRjaGVzKSk7CisgICAgICAgIHJjID0gMTsKKyAg ICAgICAgZ290byB4ZG9teWRpcjsKKyAgICB9CisjZW5kaWYgLyogTk9TUEwgKi8KKyAgICBpZiAo eHNvcnQpIHsKKwlpbnQgbmFtZXBvczsKKyAgICAgICAgc2tleSA9IDA7CisjaWZkZWYgVk1TCisJ bmFtZXBvcyA9IGRsZW4gKyAzNTsKKyAgICAgICAgc3dpdGNoIChzb3J0YnkpIHsKKyAgICAgICAg ICBjYXNlIERJUlNfTk06IHNrZXkgPSBuYW1lcG9zOyBicmVhazsKKyAgICAgICAgICBjYXNlIERJ UlNfRFQ6IHNrZXkgPSAzMzsgYnJlYWs7CisgICAgICAgICAgY2FzZSBESVJTX1NaOiBza2V5ID0g MjE7CisgICAgICAgIH0KKyNlbHNlCisgICAgICAgIGlmIChwKSB7CisJICAgIG5hbWVwb3MgPSBk bGVuICsgMjQ7CisgICAgICAgICAgICBzd2l0Y2ggKHNvcnRieSkgeworICAgICAgICAgICAgICBj YXNlIERJUlNfTk06IHNrZXkgPSBuYW1lcG9zOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBE SVJTX0RUOiBza2V5ID0gMjI7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIERJUlNfU1o6IHNr ZXkgPSAxMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKwkgICAgbmFtZXBvcyA9 IGRsZW4gKyAxNDsKKyAgICAgICAgICAgIHN3aXRjaCAoc29ydGJ5KSB7CisgICAgICAgICAgICAg IGNhc2UgRElSU19OTTogc2tleSA9IG5hbWVwb3M7IGJyZWFrOworICAgICAgICAgICAgICBjYXNl IERJUlNfRFQ6IHNrZXkgPSAxMjsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRElSU19TWjog c2tleSA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyNlbmRpZiAvKiBWTVMgKi8KKyAg ICAgICAgc2hfc29ydChkaXJsaXN0LE5VTEwsbmRpcmxpc3Qsc2tleSxyZXZlcnNlLGZpbGVjYXNl KTsKKwlpZiAoZGlyX3RvcCA+IDAgJiYgZGlyX3RvcCA8IG5kaXJsaXN0KQorCSAgbmRpcmxpc3Qg PSBkaXJfdG9wOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbmRpcmxpc3Q7IGkrKykgeworICAg ICAgICAgICAgZnByaW50ZihvZnAsIiVzXG4iLGRpcmxpc3RbaV0pOworICAgICAgICAgICAgaWYg KHBhZ2UgJiYgKGkgPCBuZGlybGlzdCAtMSB8fCBoZWFkaW5nKSkgeyAvKiBJZiAvUEFHRSAqLwor ICAgICAgICAgICAgICAgIGlmIChjbWRfY29scyA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAg aW50IHggPSBzdHJsZW4oZGlybGlzdFtpXSk7CisgICAgICAgICAgICAgICAgICAgIGludCB5Owor ICAgICAgICAgICAgICAgICAgICB5ID0gKHggJSBjbWRfY29scykgPyAxIDogMDsKKyAgICAgICAg ICAgICAgICAgICAgbiArPSAoKGludClzdHJsZW4oZGlybGlzdFtpXSkgLyBjbWRfY29scykgKyB5 OworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIG4rKzsKKyAg ICAgICAgICAgICAgICB9CisjaWZkZWYgQ0tfVFRHV1NJWgorICAgICAgICAgICAgICAgIGlmIChu ID4gKGNtZF9yb3dzIC0gMykpIHsgLyogRG8gbW9yZS1wcm9tcHRpbmcgKi8KKyAgICAgICAgICAg ICAgICAgICAgaWYgKCFhc2ttb3JlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJjID0g MDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8geGRvbXlkaXI7CisgICAgICAgICAgICAg ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgIG4gPSAwOworICAgICAgICAgICAg ICAgIH0KKyNlbmRpZiAvKiBDS19UVEdXU0laICovCisgICAgICAgICAgICB9CisgICAgICAgIH0K KyAgICB9CisKKyAgICBpZiAoaGVhZGluZyB8fCBzdW1tYXJ5KSB7CisjaWZkZWYgQ0tGTE9BVAor ICAgICAgICBDS0ZMT0FUIGdtOworI2VuZGlmIC8qIENLRkxPQVQgKi8KKyAgICAgICAgZnByaW50 ZihvZnAsIlxuJWxkIGRpcmVjdG9yJXMsICVsZCBmaWxlJXMsICVzIGJ5dGUlcyIsCisgICAgICAg ICAgICAgICBuZGlycywKKyAgICAgICAgICAgICAgIChuZGlycyA9PSAxKSA/ICJ5IiA6ICJpZXMi LAorICAgICAgICAgICAgICAgbmZpbGVzLAorICAgICAgICAgICAgICAgKG5maWxlcyA9PSAxKSA/ ICIiIDogInMiLAorCSAgICAgICBja2ZzdG9hKG5ieXRlcyksCisgICAgICAgICAgICAgICAobmJ5 dGVzID09IDEpID8gIiIgOiAicyIKKyAgICAgICAgICAgICAgICk7CisjaWZkZWYgQ0tGTE9BVAor ICAgICAgICBnbSA9ICgoQ0tGTE9BVCkgbmJ5dGVzICkgLyAxMDAwMDAwLjA7CisgICAgICAgIGlm IChnbSA+IDEwMDAuMCkKKyAgICAgICAgICBmcHJpbnRmKG9mcCwiICglMC4yZkdCKSIsKGdtIC8g MTAwMC4wKSk7CisgICAgICAgIGVsc2UgaWYgKGdtID49IDAuMDEpCisgICAgICAgICAgZnByaW50 ZihvZnAsIiAoJTAuMmZNQikiLGdtKTsKKyNlbmRpZiAvKiBDS0ZMT0FEICovCisgICAgICAgIGZw cmludGYob2ZwLCJcblxuIik7CisgICAgfSBlbHNlIGlmIChkaXJfY291ICYmICFjdikgeworCWZw cmludGYob2ZwLCJcbiBGaWxlczogJWxkXG5cbiIsbmZpbGVzKTsKKyAgICB9CisgIHhkb215ZGly OgorI2lmbmRlZiBOT1NQTAorICAgIGlmIChkaXJfY291ICYmIGN2KSB7ICAgICAgICAgICAgICAg IC8qIC9DT1VOVDp2YXIgKi8KKyAgICAgICAgYWRkbWFjKGN2LGNraXRvYShuZmlsZXMpKTsJLyog c2V0IHRoZSB2YXJpYWJsZSAqLworICAgICAgICBtYWtlc3RyKCZjdixOVUxMKTsgICAgICAgICAg ICAgIC8qIGZyZWUgdGhpcyAqLworICAgIH0KKyAgICBpZiAoYXApIHsJCQkJLyogSWYgd2UgaGF2 ZSBhIHJlc3VsdCBhcnJheSAqLworCWlmIChhX2RpbVthcnJheWluZGV4XSA+IG5tYXRjaGVzKSAv KiBidXQgaXQgd2FzIG5vdCBmaWxsZWQgKi8KKwkgIGFfZGltW2FycmF5aW5kZXhdID0gbm1hdGNo ZXM7ICAgLyogYWRqdXN0IGRpbWVuc2lvbiAqLworICAgIH0KKyNlbmRpZgkvKiBOT1NQTCAqLwor ICAgIGlmIChnX21hdGNoZG90ID4gLTEpIHsKKyAgICAgICAgbWF0Y2hkb3QgPSBnX21hdGNoZG90 OyAgICAgICAgICAvKiBSZXN0b3JlIHRoZXNlLi4uICovCisgICAgICAgIGdfbWF0Y2hkb3QgPSAt MTsKKyAgICB9CisgICAgZnJlZWRpcmxpc3QoKTsKKyAgICBpZiAob2ZwICE9IHN0ZG91dCkgeyAg ICAgICAgICAgICAgICAvKiBDbG9zZSBhbnkgb3V0cHV0IGZpbGUgKi8KKyAgICAgICAgaWYgKG9m cCkgZmNsb3NlKG9mcCk7CisgICAgICAgIG9mcCA9IHN0ZG91dDsKKyAgICB9CisgICAgaWYgKHJj ID4gMCkKKyAgICAgIHN1Y2Nlc3MgPSAxOworICAgIHJldHVybihyYyk7Cit9CisKK2ludAorZG9k aXIoY3gpIGludCBjeDsgeyAgICAgICAgICAgICAgICAgICAgIC8qIERvIHRoZSBESVJFQ1RPUlkg Y29tbWFuZCAqLworICAgIGNoYXIgKmRjICwgKm1zZzsKKworI2lmZGVmIE9TMgorICAgIHJldHVy bihkb215ZGlyKGN4KSk7CisjZWxzZSAvKiBPUzIgKi8KKyAgICBpZiAobm9wdXNoCisjaWZkZWYg RE9NWURJUiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQnVpbGRzIHRoYXQgZG9teWRpcigp IGJ5IGRlZmF1bHQgKi8KKyAgICAgICAgfHwgKGN4ID09IFhYRElSICB8fCBjeCA9PSBYWExESVIg fHwgY3ggPT0gWFhXRElSIHx8CisJICAgIGN4ID09IFhYSERJUiB8fCBjeCA9PSBYWFRPVUMpCisj ZW5kaWYgLyogRE9NWURJUiAqLworICAgICAgICApCisgICAgICByZXR1cm4oZG9teWRpcihjeCkp OwkJLyogQnVpbHQtaW4gZGlyZWN0b3J5IGNvbW1hbmQgKi8KKworICAgIC8qIFVzZSB0aGUgc3lz dGVtJ3MgZGlyZWN0b3J5IGNvbW1hbmQuICovCisKKyAgICBtc2cgPSAoY3ggPT0gWFhMUykgPwor ICAgICAgIkFyZ3VtZW50cyBmb3IgbHMiIDoKKyAgICAgICAgIkRpcmVjdG9yeSBhbmQvb3IgZmls ZSBzcGVjaWZpY2F0aW9uIjsKKyAgICBpZiAoKHggPSBjbXR4dChtc2csIiIsJnMseHhzdHJpbmcp KSA8IDApCisgICAgICByZXR1cm4oeCk7CisKKyAgICBja3N0cm5jcHkodG1wYnVmLHMsVE1QQlVG U0laKTsgICAgICAvKiBDb3B5IHRoZSBmaWxlc3BlYyAqLworICAgIHMgPSB0bXBidWY7CisKKyAg ICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsKKworICAgIGxwID0gbGluZTsKKyAg ICBpZiAoIShkYyA9IGdldGVudigiQ0tfRElSIikpKQorICAgICAgZGMgPSBESVJDTUQ7CisgICAg Y2ttYWttc2cobHAsTElOQlVGU0laLGRjLCIgIixzLE5VTEwpOworICAgIGRlYnVnKEYxMTAsIkRJ UiIsbGluZSwwKTsKKyNpZmRlZiBWTVMKKyAgICBjb25yZXMoKTsKKyNlbmRpZiAvKiBWTVMgKi8K KyAgICB4ID0genNoY21kKGxpbmUpOworI2lmZGVmIFZNUworICAgIGNvbmNiKChjaGFyKWVzY2Fw ZSk7CisjZW5kaWYgLyogVk1TICovCisgICAgcmV0dXJuKHN1Y2Nlc3MgPSAoeCA8IDEpID8gMCA6 IDEpOworI2VuZGlmIC8qIE9TMiAqLworfQorCisjaWZuZGVmIE5PU0VSVkVSCisjaWZuZGVmIE5P RlJJTExTCisvKiBEbyB0aGUgRU5BQkxFIGFuZCBESVNBQkxFIGNvbW1hbmRzICovCisKK2ludAor ZG9lbmFibGUoeSx4KSBpbnQgeSwgeDsgeworI2lmZGVmIENLX0xPR0lOCisgICAgaWYgKGlzZ3Vl c3QpICAgICAgICAgICAgICAgICAgICAgICAgLyogSUtTRDogRG9uJ3QgbGV0IGd1ZXN0cyAqLwor ICAgICAgcmV0dXJuKDApOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVuYWJsZSBhbnl0aGlu ZyB0aGF0J3MgZGlzYWJsZWQgKi8KKyNlbmRpZiAvKiBDS19MT0dJTiAqLworICAgIHN3aXRjaCAo eCkgeworICAgICAgY2FzZSBFTl9BTEw6CisgICAgICAgIGVuX2N3ZCA9IGVuX2NweSA9IGVuX2Rl bCA9IGVuX2RpciA9IGVuX2ZpbiA9IGVuX2dldCA9IHk7CisgICAgICAgIGVuX3JlbiA9IGVuX3Nl biA9IGVuX3NldCA9IGVuX3NwYSA9IGVuX3R5cCA9IGVuX3JldCA9IHk7CisgICAgICAgIGlmICgh aW5zZXJ2ZXIpCisgICAgICAgICAgZW5fd2hvID0gZW5fbWFpID0gZW5fcHJpID0geTsKKyAgICAg ICAgZW5fbWtkID0gZW5fcm1kID0geTsKKyAgICAgICAgZW5feGl0ID0geTsKKyNpZm5kZWYgZGF0 YWdlbmVyYWwKKyAgICAgICAgZW5fYnllID0geTsKKyNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLwor I2lmbmRlZiBOT1BVU0gKKyAgICAgICAgaWYgKCFub3B1c2ggJiYgIWluc2VydmVyKQorICAgICAg ICAgIGVuX2hvcyA9IHk7CisjZW5kaWYgLyogTk9QVVNIICovCisjaWZuZGVmIE5PU1BMCisgICAg ICAgIGVuX2FzZyA9IGVuX3F1ZSA9IHk7CisjZW5kaWYgLyogTk9TUEwgKi8KKyAgICAgICAgYnJl YWs7CisKKyAgICAgIGNhc2UgRU5fQllFOgorI2lmbmRlZiBkYXRhZ2VuZXJhbAorLyoKKyAgSW4g RGF0YSBHZW5lcmFsIEFPUy9WUyBLZXJtaXQgY2FuJ3QgbG9nIG91dCBpdHMgc3VwZXJpb3IgcHJv Y2Vzcy4KKyovCisgICAgICAgIGVuX2J5ZSA9IHk7CisjZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8K KyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVOX0NQWToKKyAgICAgICAgZW5fY3B5ID0geTsK KyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVOX0NXRDoKKyAgICAgICAgZW5fY3dkID0geTsK KyNpZmRlZiBJS1NECisgICAgICAgIGlmIChpbnNlcnZlciAmJiB5ID09IDApIHsKKyAgICAgICAg ICAgIGZucnBhdGggPSBQQVRIX09GRjsKKyAgICAgICAgICAgIGZuc3BhdGggPSBQQVRIX09GRjsK KyAgICAgICAgfQorI2VuZGlmIC8qIElLU0QgKi8KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNl IEVOX0RFTDogICAgICAgICAgICAgICAgICAgICAgLyogRGVsZXRpbmcgb2YgZmlsZXMgKi8KKyAg ICAgICAgZW5fZGVsID0geTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVOX0RJUjoKKyAg ICAgICAgZW5fZGlyID0geTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVOX0ZJTjoKKyAg ICAgICAgZW5fZmluID0geTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVOX0dFVDoKKyAg ICAgICAgZW5fZ2V0ID0geTsKKyAgICAgICAgYnJlYWs7CisjaWZuZGVmIE5PUFVTSAorICAgICAg Y2FzZSBFTl9IT1M6CisgICAgICAgIGlmICghbm9wdXNoKQorICAgICAgICAgZW5faG9zID0geTsK KyAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogTk9QVVNIICovCisgICAgICBjYXNlIEVOX1JFTjoK KyAgICAgICAgZW5fcmVuID0geTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVOX1NFTjoK KyAgICAgICAgZW5fc2VuID0geTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVOX1NFVDoK KyAgICAgICAgZW5fc2V0ID0geTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVOX1NQQToK KyAgICAgICAgZW5fc3BhID0geTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVOX1RZUDoK KyAgICAgICAgZW5fdHlwID0geTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVOX1dITzoK KyAgICAgICAgZW5fd2hvID0geTsKKyAgICAgICAgYnJlYWs7CisjaWZuZGVmIE5PU1BMCisgICAg ICBjYXNlIEVOX0FTRzoKKyAgICAgICAgZW5fYXNnID0geTsKKyAgICAgICAgYnJlYWs7CisgICAg ICBjYXNlIEVOX1FVRToKKyAgICAgICAgZW5fcXVlID0geTsKKyAgICAgICAgYnJlYWs7CisjZW5k aWYgLyogTk9TUEwgKi8KKyAgICAgIGNhc2UgRU5fUkVUOgorICAgICAgICBlbl9kZWwgPSB5Owor ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU5fTUFJOgorI2lmZGVmIENLX0xPR0lOCisgICAg ICAgIGlmIChpc2d1ZXN0ICYmIHkpIHsKKyAgICAgICAgICAgIHByaW50ZigiP1NvcnJ5LCBub3Qg dmFsaWQgZm9yIGd1ZXN0c1xuIik7CisgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICB9 CisjZW5kaWYgLyogQ0tfTE9HSU4gKi8KKyAgICAgICAgZW5fbWFpID0geTsKKyAgICAgICAgYnJl YWs7CisgICAgICBjYXNlIEVOX1BSSToKKyNpZmRlZiBDS19MT0dJTgorICAgICAgICBpZiAoaXNn dWVzdCAmJiB5KSB7CisgICAgICAgICAgICBwcmludGYoIj9Tb3JyeSwgbm90IHZhbGlkIGZvciBn dWVzdHNcbiIpOworICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgfQorI2VuZGlmIC8q IENLX0xPR0lOICovCisgICAgICAgIGVuX3ByaSA9IHk7CisgICAgICAgIGJyZWFrOworICAgICAg Y2FzZSBFTl9NS0Q6CisgICAgICAgIGVuX21rZCA9IHk7CisgICAgICAgIGJyZWFrOworICAgICAg Y2FzZSBFTl9STUQ6CisgICAgICAgIGVuX3JtZCA9IHk7CisgICAgICAgIGJyZWFrOworICAgICAg Y2FzZSBFTl9YSVQ6CisgICAgICAgIGVuX3hpdCA9IHk7CisgICAgICAgIGJyZWFrOworICAgICAg Y2FzZSBFTl9FTkE6CisgICAgICAgIGlmICgoKHkgJiAxKSAmJiAhKGVuX2VuYSAmIDEpKSB8fAor ICAgICAgICAgICAgKCh5ICYgMikgJiYgIShlbl9lbmEgJiAyKSkpIHsKKyAgICAgICAgICAgIHBy aW50ZigiP1NvcnJ5LCBESVNBQkxFIEVOQUJMRSBjYW4gbm90IGJlIHVuZG9uZVxuIik7CisgICAg ICAgICAgICByZXR1cm4oLTkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZW5fZW5h ID0geTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICBkZWZhdWx0OgorICAg ICAgICByZXR1cm4oLTIpOworICAgIH0KKyAgICByZXR1cm4oMSk7Cit9CisjZW5kaWYgLyogTk9G UklMTFMgKi8KKyNlbmRpZiAvKiBOT1NFUlZFUiAqLworCisjaWZuZGVmIE5PRlJJTExTCisKK3N0 YXRpYyBpbnQgZGVsX2xpcyA9IDA7CitzdGF0aWMgaW50IGRlbF9kb3QgPSAwOworc3RhdGljIGlu dCBkZWxfaGRnID0gMDsKK3N0YXRpYyBpbnQgZGVsX3BhZyA9IC0xOworc3RhdGljIGludCBkZWxf YXNrID0gMDsKKworI2lmbmRlZiBOT1NIT1cKK1ZPSUQKK3Nob3dkZWxvcHRzKCkgeworICAgIGlu dCB4ID0gMDsKKyAgICBleHRlcm4gaW50IG9wdGxpbmVzOworICAgIHBydG9wdCgmb3B0bGluZXMs IiIpOworICAgIHBydG9wdCgmb3B0bGluZXMsIkRFTEVURSIpOworICAgIGlmIChkZWxfYXNrID4g LTEpIHsKKyAgICAgICAgcHJ0b3B0KCZvcHRsaW5lcywgZGVsX2FzayA/ICIvQVNLIiA6ICIvTk9B U0siKTsKKyAgICAgICAgeCsrOworICAgIH0KKyNpZmRlZiBVTklYT1JPU0sKKyAgICBpZiAoZGVs X2RvdCA+IC0xKSB7CisgICAgICAgIHBydG9wdCgmb3B0bGluZXMsIGRlbF9kb3QgPyAiL0RPVEZJ TEVTIiA6ICIvTk9ET1RGSUxFUyIpOworICAgICAgICB4Kys7CisgICAgfQorI2VuZGlmIC8qIFVO SVhPUk9TSyAqLworICAgIGlmIChkZWxfbGlzID4gLTEpIHsKKyAgICAgICAgcHJ0b3B0KCZvcHRs aW5lcywgZGVsX2xpcyA/ICIvTElTVCIgOiAiL05PTElTVCIpOworICAgICAgICB4Kys7CisgICAg fQorICAgIGlmIChkZWxfaGRnID4gLTEpIHsKKyAgICAgICAgcHJ0b3B0KCZvcHRsaW5lcywgZGVs X2hkZyA/ICIvSEVBRElORyIgOiAiL05PSEVBRElORyIpOworICAgICAgICB4Kys7CisgICAgfQor I2lmbmRlZiBDS19UVEdXU0laCisgICAgaWYgKGRlbF9wYWcgPiAtMSkgeworICAgICAgICBwcnRv cHQoJm9wdGxpbmVzLCBkZWxfcGFnID8gIi9QQUdFIiA6ICIvTk9QQUdFIik7CisgICAgICAgIHgr KzsKKyAgICB9CisjZW5kaWYgLyogQ0tfVFRHV1NJWiAqLworICAgIGlmICgheCkgcHJ0b3B0KCZv cHRsaW5lcywiKG5vIG9wdGlvbnMgc2V0KSIpOworICAgIHBydG9wdCgmb3B0bGluZXMsIiIpOwor fQorI2VuZGlmIC8qIE5PU0hPVyAqLworCisKK2ludAorc2V0ZGVsb3B0cygpIHsKKyAgICBpbnQg eF9saXMgPSAtMSwgeF9wYWcgPSAtMSwgeF9kb3QgPSAtMSwgeF9oZGcgPSAtMSwgeF9hc2sgPSAt MTsKKyAgICBpbnQgZ2V0dmFsID0gMDsKKyAgICBjaGFyIGM7CisgICAgd2hpbGUgKDEpIHsKKyAg ICAgICAgaWYgKCh5ID0gY21zd2koZGVsdGFiLG5kZWx0YWIsIlN3aXRjaCIsIiIseHhzdHJpbmcp KSA8IDApIHsKKyAgICAgICAgICAgIGlmICh5ID09IC0zKQorICAgICAgICAgICAgICBicmVhazsK KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICB9Cisg ICAgICAgIGMgPSBjbWdicmsoKTsKKyAgICAgICAgaWYgKChnZXR2YWwgPSAoYyA9PSAnOicgfHwg YyA9PSAnPScpKSAmJiAhKGNtZ2t3ZmxncygpICYgQ01fQVJHKSkgeworICAgICAgICAgICAgcHJp bnRmKCI/VGhpcyBzd2l0Y2ggZG9lcyBub3QgdGFrZSBhbiBhcmd1bWVudFxuIik7CisgICAgICAg ICAgICByZXR1cm4oLTkpOworICAgICAgICB9CisgICAgICAgIGlmICghZ2V0dmFsICYmIChjbWdr d2ZsZ3MoKSAmIENNX0FSRykpIHsKKyAgICAgICAgICAgIHByaW50ZigiP1RoaXMgc3dpdGNoIHJl cXVpcmVzIGFuIGFyZ3VtZW50XG4iKTsKKyAgICAgICAgICAgIHJldHVybigtOSk7CisgICAgICAg IH0KKyAgICAgICAgc3dpdGNoICh5KSB7CisgICAgICAgICAgY2FzZSBERUxfRE9UOgorICAgICAg ICAgICAgeF9kb3QgPSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBERUxf Tk9EOgorICAgICAgICAgICAgeF9kb3QgPSAwOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg ICAgY2FzZSBERUxfSERHOgorICAgICAgICAgICAgeF9oZGcgPSAxOworICAgICAgICAgICAgYnJl YWs7CisgICAgICAgICAgY2FzZSBERUxfTElTOgorICAgICAgICAgICAgeF9saXMgPSAxOworICAg ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBERUxfTk9MOgorICAgICAgICAgICAgeF9s aXMgPSAwOworICAgICAgICAgICAgYnJlYWs7CisjaWZuZGVmIENLX1RUR1dTSVoKKyAgICAgICAg ICBjYXNlIERFTF9QQUc6CisgICAgICAgICAgICB4X3BhZyA9IDE7CisgICAgICAgICAgICBicmVh azsKKyAgICAgICAgICBjYXNlIERFTF9OT1A6CisgICAgICAgICAgICB4X3BhZyA9IDA7CisgICAg ICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBDS19UVEdXU0laICovCisgICAgICAgICAgY2FzZSBE RUxfUVVJOgorICAgICAgICAgICAgeF9saXMgPSAwOworICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICAgY2FzZSBERUxfVlJCOgorICAgICAgICAgICAgeF9saXMgPSAxOworICAgICAgICAgICAg YnJlYWs7CisgICAgICAgICAgY2FzZSBERUxfQVNLOgorICAgICAgICAgICAgeF9hc2sgPSAxOwor ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBERUxfTkFTOgorICAgICAgICAgICAg eF9hc2sgPSAwOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAg ICAgICAgIHByaW50ZigiP1NvcnJ5LCB0aGlzIG9wdGlvbiBjYW4gbm90IGJlIHNldFxuIik7Cisg ICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICB9CisgICAgfQorICAgIGlmICgoeCA9IGNt Y2ZtKCkpIDwgMCkgICAgICAgICAgICAgIC8qIEdldCBjb25maXJtYXRpb24gKi8KKyAgICAgIHJl dHVybih4KTsKKyAgICBpZiAoeF9wYWcgPiAtMSkgZGVsX3BhZyA9IHhfcGFnOworICAgIGlmICh4 X2RvdCA+IC0xKSBkZWxfZG90ID0geF9kb3Q7CisgICAgaWYgKHhfaGRnID4gLTEpIGRlbF9oZGcg PSB4X2hkZzsKKyAgICBpZiAoeF9saXMgPiAtMSkgZGVsX2xpcyA9IHhfbGlzOworICAgIGlmICh4 X2FzayA+IC0xKSBkZWxfYXNrID0geF9hc2s7CisgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKK30K KworI2lmZGVmIE9TMgorc3RhdGljIGNoYXIgKiogeG10Y2hzID0gTlVMTDsKK3N0YXRpYyBpbnQg eG10Y2huID0gMDsKKyNlbmRpZiAvKiBPUzIgKi8KKworaW50Citkb2RlbCgpIHsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogREVMRVRFICovCisgICAgaW50IGksIGosIGssIHg7Cisg ICAgaW50IGZzID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogTmVlZCB0byBjYWxsIGZp bGVzZWxlY3QoKSAqLworICAgIGludCBsZW4gPSAwOworICAgIGludCBiYWQgPSAwOworICAgIGlu dCBnZXR2YWwgPSAwLCBhc2tpbmcgPSAwOworICAgIGludCBzaW11bGF0ZSA9IDAsIHJjID0gMDsK KyAgICBDS19PRkZfVCBtaW5zaXplID0gLTFMLCBtYXhzaXplID0gLTFMOworICAgIGludCBoYXZl bmFtZSA9IDAsIGNvbmZpcm1lZCA9IDA7CisgICAgaW50IHFmbGFnID0gMDsKKyAgICBpbnQgc3Vt bWFyeSA9IDA7CisgICAgaW50IGRlbGRpcnMgPSAwOworICAgIGludCBkZWx0cmVlID0gMDsKKyAg ICBpbnQgaXRzYWRpciA9IDA7CisgICAgaW50IGFyZ2lzZGlyID0gMDsKKyAgICBpbnQgeG1vZGUg PSAtMSwgc2NhbiA9IDAsIHNraXAgPSAwOworI2lmZGVmIENPTU1FTlQKKyAgICBpbnQgcGFzcyA9 IDA7CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgIGNoYXIgYzsKKyAgICBjaGFyICogZGVsZGVm ID0gIiI7CisgICAgY2hhciBzYWZlYnVmW0NLTUFYUEFUSCsxXTsKKyAgICBzdHJ1Y3QgRkRCIHN3 LCBmaSwgZmw7CisgICAgY2hhcgorICAgICAgKiBkZWxfYWZ0ID0gTlVMTCwKKyAgICAgICogZGVs X2JlZiA9IE5VTEwsCisgICAgICAqIGRlbF9uYWYgPSBOVUxMLAorICAgICAgKiBkZWxfbmJmID0g TlVMTCwKKyAgICAgICogZGVsX2V4YyA9IE5VTEw7CisgICAgaW50CisgICAgICB4X2xpcyA9IDAs CisgICAgICAvKiB4X2RvdCA9IC0xLCAqLworICAgICAgeF9oZGcgPSAwOworCisgICAgY2hhciAq IGR4bGlzdFs4XTsKKworICAgIGZvciAoaSA9IDA7IGkgPCA4OyBpKyspIGR4bGlzdFtpXSA9IE5V TEw7CisKKyAgICBnX21hdGNoZG90ID0gbWF0Y2hkb3Q7CisKKyAgICBpZiAoZGVsX2xpcyA+IC0x KSB4X2xpcyAgICA9IGRlbF9saXM7CisgICAgaWYgKGRlbF9kb3QgPiAtMSkgbWF0Y2hkb3QgPSBk ZWxfZG90OworICAgIGlmIChkZWxfaGRnID4gLTEpIHhfaGRnICAgID0gZGVsX2hkZzsKKyAgICBp ZiAoZGVsX3BhZyA+IC0xKSB4YXNrbW9yZSA9IGRlbF9wYWc7CisgICAgaWYgKGRlbF9hc2sgPiAt MSkgYXNraW5nICAgPSBkZWxfYXNrOworCisgICAgZGlyYWN0aXZlID0gMTsKKyAgICBub2xpbmtz ID0gMjsgICAgICAgICAgICAgICAgICAgICAgICAvKiBCeSBkZWZhdWx0IGRvbid0IGZvbGxvdyBs aW5rcyAqLworCisgICAgY21mZGJpKCZzdywgICAgICAgICAgICAgICAgICAgICAgICAgLyogRmly c3QgRkRCIC0gY29tbWFuZCBzd2l0Y2hlcyAqLworICAgICAgICAgICBfQ01LRVksICAgICAgICAg ICAgICAgICAgICAgIC8qIGZjb2RlICovCisgICAgICAgICAgICJGaWxlIHNwZWNpZmljYXRpb247 XG4gb3Igc3dpdGNoIiwKKyAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBkZWZhdWx0ICovCisgICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyog YWRkdGwgc3RyaW5nIGRhdGEgKi8KKyAgICAgICAgICAgbmRlbHRhYiwgICAgICAgICAgICAgICAg ICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMTogdGJsIHNpemUgKi8KKyAgICAgICAgICAgNCwg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMjogNCA9IGNt c3dpICovCisgICAgICAgICAgIHh4c3RyaW5nLCAgICAgICAgICAgICAgICAgICAgLyogUHJvY2Vz c2luZyBmdW5jdGlvbiAqLworICAgICAgICAgICBkZWx0YWIsICAgICAgICAgICAgICAgICAgICAg IC8qIEtleXdvcmQgdGFibGUgKi8KKyAgICAgICAgICAgJmZpICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBQb2ludGVyIHRvIG5leHQgRkRCICovCisgICAgICAgICAgICk7CisgICAgY21mZGJp KCZmbCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogQW55dGhpbmcgdGhhdCBkb2Vzbid0IG1h dGNoICovCisgICAgICAgICAgIF9DTUZMRCwgICAgICAgICAgICAgICAgICAgICAgLyogZmNvZGUg Ki8KKyAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBobHBtc2cgKi8K KyAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkZWZhdWx0ICovCisg ICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgc3RyaW5nIGRh dGEgKi8KKyAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBu dW1lcmljIGRhdGEgMSAqLworICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIGFkZHRsIG51bWVyaWMgZGF0YSAyICovCisgICAgICAgICAgIHh4c3RyaW5nLAorICAgICAg ICAgICBOVUxMLAorICAgICAgICAgICBOVUxMCisgICAgICAgICAgICk7CisgIGFnYWluOgorICAg IGNtZmRiaSgmZmksICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDJuZCBGREIgLSBmaWxlIHRv IGRlbGV0ZSAqLworICAgICAgICAgICBfQ01JRkksICAgICAgICAgICAgICAgICAgICAgIC8qIGZj b2RlICovCisgICAgICAgICAgICJGaWxlKHMpIHRvIGRlbGV0ZSIsICAgICAgICAgLyogaGxwbXNn ICovCisgICAgICAgICAgIGRlbGRlZiwgICAgICAgICAgICAgICAgICAgICAgLyogZGVmYXVsdCAq LworICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIHN0cmlu ZyBkYXRhICovCisgICAgICAgICAgIG5vbGlua3MgfCBkZWxkaXJzLCAgICAgICAgICAgLyogMCA9 IGZpbGVzLCAxID0gZmlsZXMgb3IgZGlycyAqLworICAgICAgICAgICAwLCAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIDEgPSBkaXJzIG9ubHkgKi8KKyAgICAgICAgICAgeHhzdHJpbmcsCisg ICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICZmbAorICAgICAgICAgICApOworICAgIHdoaWxl ICghaGF2ZW5hbWUgJiYgIWNvbmZpcm1lZCkgeworICAgICAgICB4ID0gY21mZGIoJnN3KTsgICAg ICAgICAgICAgICAgIC8qIFBhcnNlIHNvbWV0aGluZyAqLworICAgICAgICBpZiAoeCA8IDApIHsg ICAgICAgICAgICAgICAgICAgIC8qIEVycm9yICovCisgICAgICAgICAgICBpZiAoeCA9PSAtMykK KyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoeCA9PSAtMiB8fCB4ID09IC05 KQorICAgICAgICAgICAgICBwcmludGYoIj9Eb2VzIG5vdCBtYXRjaCBzd2l0Y2ggb3IgZmlsZW5h bWU6IFwiJXNcIlxuIixhdG1idWYpOworICAgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICB9 CisgICAgICAgIGlmIChjbXJlc3VsdC5mY29kZSAhPSBfQ01LRVkpICAgLyogQnJlYWsgb3V0IGlm IG5vdCBhIHN3aXRjaCAqLworICAgICAgICAgIGJyZWFrOworICAgICAgICBjID0gY21nYnJrKCk7 ICAgICAgICAgICAgICAgICAgIC8qIEdldCBicmVhayBjaGFyYWN0ZXIgKi8KKyAgICAgICAgaWYg KChnZXR2YWwgPSAoYyA9PSAnOicgfHwgYyA9PSAnPScpKSAmJiAhKGNtZ2t3ZmxncygpICYgQ01f QVJHKSkgeworICAgICAgICAgICAgcHJpbnRmKCI/VGhpcyBzd2l0Y2ggZG9lcyBub3QgdGFrZSBh biBhcmd1bWVudFxuIik7CisgICAgICAgICAgICByYyA9IC05OworICAgICAgICAgICAgZ290byB4 ZGVsZXRlOworICAgICAgICB9CisgICAgICAgIGlmICghZ2V0dmFsICYmIChjbWdrd2ZsZ3MoKSAm IENNX0FSRykpIHsKKyAgICAgICAgICAgIHByaW50ZigiP1RoaXMgc3dpdGNoIHJlcXVpcmVzIGFu IGFyZ3VtZW50XG4iKTsKKyAgICAgICAgICAgIHJjID0gLTk7CisgICAgICAgICAgICBnb3RvIHhk ZWxldGU7CisgICAgICAgIH0KKyAgICAgICAgc3dpdGNoIChrID0gY21yZXN1bHQubnJlc3VsdCkg eworICAgICAgICAgIGNhc2UgREVMX0FGVDoKKyAgICAgICAgICBjYXNlIERFTF9CRUY6CisgICAg ICAgICAgY2FzZSBERUxfTkFGOgorICAgICAgICAgIGNhc2UgREVMX05CRjoKKyAgICAgICAgICAg IGlmICghZ2V0dmFsKSBicmVhazsKKyAgICAgICAgICAgIGlmICgoeCA9IGNtZGF0ZSgiRmlsZS10 aW1lIiwiIiwmcywwLHh4c3RyaW5nKSkgPCAwKSB7CisgICAgICAgICAgICAgICAgaWYgKHggPT0g LTMpIHsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/RGF0ZS10aW1lIHJlcXVpcmVkXG4i KTsKKyAgICAgICAgICAgICAgICAgICAgeCA9IC05OworICAgICAgICAgICAgICAgIH0gZWxzZQor ICAgICAgICAgICAgICAgICAgcmMgPSB4OworICAgICAgICAgICAgICAgIGdvdG8geGRlbGV0ZTsK KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZzKys7CisgICAgICAgICAgICBkZWx0cmVlID0g MDsKKyAgICAgICAgICAgIHN3aXRjaCAoaykgeworICAgICAgICAgICAgICBjYXNlIERFTF9BRlQ6 IG1ha2VzdHIoJmRlbF9hZnQscyk7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIERFTF9CRUY6 IG1ha2VzdHIoJmRlbF9iZWYscyk7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIERFTF9OQUY6 IG1ha2VzdHIoJmRlbF9uYWYscyk7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIERFTF9OQkY6 IG1ha2VzdHIoJmRlbF9uYmYscyk7IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAg YnJlYWs7CisgICAgICAgICAgY2FzZSBERUxfRE9UOgorICAgICAgICAgICAgbWF0Y2hkb3QgPSAx OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBERUxfTk9EOgorICAgICAgICAg ICAgbWF0Y2hkb3QgPSAwOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBERUxf QUxMOgorICAgICAgICAgICAgZnMgPSAwOworI2lmZGVmIFZNUworICAgICAgICAgICAgZGVsZGVm ID0gIiouKiI7ICAgICAgICAgICAgIC8qIFVOSVgsIFdpbmRvd3MsIE9TLzIgKi8KKyNlbHNlCisj aWZkZWYgZGF0YWdlbmVyYWwKKyAgICAgICAgICAgIGRlbGRlZiA9ICIrIjsgICAgICAgICAgICAg ICAvKiBBT1MvVlMgKi8KKyNlbHNlCisgICAgICAgICAgICBkZWxkZWYgPSAiKiI7ICAgICAgICAg ICAgICAgLyogVU5JWCwgV2luZG93cywgT1MvMiwgVk1TLi4uICovCisjZW5kaWYgLyogZGF0YWdl bmVyYWwgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKyAgICAgICAgICAgIGRlbHRyZWUgPSAxOworICAg ICAgICAgICAgbm9saW5rcyA9IDI7CisgICAgICAgICAgICBtYXRjaGRvdCA9IDE7CisgICAgICAg ICAgICByZWN1cnNpdmUgPSAxOyAgICAgICAgICAgICAgLyogRmFsbCB0aHJvdWdoIHB1cnBvc2Vs eS4uLiAqLworICAgICAgICAgIGNhc2UgREVMX0RJUjoKKyAgICAgICAgICAgIGRlbGRpcnMgPSAx OworICAgICAgICAgICAgZ290byBhZ2FpbjsKKyAgICAgICAgICBjYXNlIERFTF9FWEM6CisgICAg ICAgICAgICBpZiAoIWdldHZhbCkgYnJlYWs7CisgICAgICAgICAgICBpZiAoKHggPSBjbWZsZCgi UGF0dGVybiIsIiIsJnMseHhzdHJpbmcpKSA8IDApIHsKKyAgICAgICAgICAgICAgICBpZiAoeCA9 PSAtMykgeworICAgICAgICAgICAgICAgICAgICBwcmludGYoIj9QYXR0ZXJuIHJlcXVpcmVkXG4i KTsKKyAgICAgICAgICAgICAgICAgICAgeCA9IC05OworICAgICAgICAgICAgICAgIH0gZWxzZQor ICAgICAgICAgICAgICAgICAgcmMgPSB4OworICAgICAgICAgICAgICAgIGdvdG8geGRlbGV0ZTsK KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZzKys7CisgICAgICAgICAgICBkZWx0cmVlID0g MDsKKyAgICAgICAgICAgIG1ha2VzdHIoJmRlbF9leGMscyk7CisgICAgICAgICAgICBicmVhazsK KyAgICAgICAgICBjYXNlIERFTF9IREc6CisgICAgICAgICAgICB4X2hkZyA9IDE7CisgICAgICAg ICAgICBicmVhazsKKyNpZmRlZiBSRUNVUlNJVkUKKyAgICAgICAgICBjYXNlIERFTF9SRUM6Cisg ICAgICAgICAgICByZWN1cnNpdmUgPSAxOworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyog UkVDVVJTSVZFICovCisgICAgICAgICAgY2FzZSBERUxfTElTOgorICAgICAgICAgICAgeF9saXMg PSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBERUxfU1VNOgorICAgICAg ICAgICAgc3VtbWFyeSA9IDE7CisgICAgICAgICAgICB4X2xpcyA9IDA7CisgICAgICAgICAgICB4 X2hkZyA9IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIERFTF9OT0w6Cisg ICAgICAgICAgICB4X2xpcyA9IDA7CisgICAgICAgICAgICBicmVhazsKKyNpZm5kZWYgQ0tfVFRH V1NJWgorICAgICAgICAgIGNhc2UgREVMX1BBRzoKKyAgICAgICAgICAgIHhhc2ttb3JlID0gMTsK KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgREVMX05PUDoKKyAgICAgICAgICAg IHhhc2ttb3JlID0gMDsKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIENLX1RUR1dTSVog Ki8KKyAgICAgICAgICBjYXNlIERFTF9RVUk6CisgICAgICAgICAgICBxZmxhZyA9IDE7CisgICAg ICAgICAgICB4X2xpcyA9IDA7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIERF TF9WUkI6CisgICAgICAgICAgICB4X2xpcyA9IDE7CisgICAgICAgICAgICBicmVhazsKKworICAg ICAgICAgIGNhc2UgREVMX1NNQToKKyAgICAgICAgICBjYXNlIERFTF9MQVI6CisgICAgICAgICAg ICBpZiAoIWdldHZhbCkgYnJlYWs7CisgICAgICAgICAgICBpZiAoKHggPSBjbW51bSgiRmlsZSBz aXplIGluIGJ5dGVzIiwiMCIsMTAsJnkseHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgICAgIHJl dHVybih4KTsKKyAgICAgICAgICAgIGZzKys7CisgICAgICAgICAgICBkZWx0cmVlID0gMDsKKyAg ICAgICAgICAgIHN3aXRjaCAoY21yZXN1bHQubnJlc3VsdCkgeworICAgICAgICAgICAgICBjYXNl IERFTF9TTUE6IG1pbnNpemUgPSB5OyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBERUxfTEFS OiBtYXhzaXplID0geTsgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsK KworICAgICAgICAgIGNhc2UgREVMX1NJTToKKyAgICAgICAgICAgIHNpbXVsYXRlID0gMTsKKyAg ICAgICAgICAgIHhfbGlzID0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2Ug REVMX0FTSzoKKyAgICAgICAgICAgIGFza2luZyA9IDE7CisgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgICBjYXNlIERFTF9OQVM6CisgICAgICAgICAgICBhc2tpbmcgPSAwOworICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBERUxfVFlQOiB7CisgICAgICAgICAgICAgIGV4dGVy biBzdHJ1Y3Qga2V5dGFiIHR4dGJpbltdOworICAgICAgICAgICAgICBpZiAoIWdldHZhbCkgYnJl YWs7CisgICAgICAgICAgICAgIGlmICgoeCA9IGNta2V5KHR4dGJpbiwzLCIiLCIiLHh4c3RyaW5n KSkgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgICAgICAgaWYgKHgg PT0gMikgeyAgICAgICAgICAgICAvKiBBTEwgKi8KKyAgICAgICAgICAgICAgICAgIHhtb2RlID0g LTE7CisgICAgICAgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgLyogVEVYVCBvciBC SU5BUlkgb25seSAqLworICAgICAgICAgICAgICAgICAgeG1vZGUgPSB4OworICAgICAgICAgICAg ICAgICAgc2NhbiA9IDE7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgICAgfQorICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBwcmludGYoIj9Ob3Qg aW1wbGVtZW50ZWQgeWV0IC0gXCIlc1wiXG4iLGF0bWJ1Zik7CisgICAgICAgICAgICByZXR1cm4o LTkpOworICAgICAgICB9CisgICAgfQorICAgIGlmIChxZmxhZyAmJiAoY21yZXN1bHQuZmNvZGUg PT0gX0NNRkxEKSkgeworICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApCisgICAgICAgICAg cmV0dXJuKHgpOworICAgICAgICBlbHNlCisgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsK KyAgICB9CisgICAgaWYgKGNtcmVzdWx0LmZjb2RlICE9IF9DTUlGSSkgeworICAgICAgICBpZiAo KmF0bWJ1ZikgeworCSAgICBpbnQgeDsKKyAgICAgICAgICAgIGlmIChpc3dpbGQoYXRtYnVmKSAm JiBuenhwYW5kKGF0bWJ1ZixuenhvcHRzKSA9PSAwKQorICAgICAgICAgICAgICBwcmludGYoIj9O byBmaWxlcyBtYXRjaDogJXNcbiIsYnJzdHJpcChhdG1idWYpKTsKKyAgICAgICAgICAgIGVsc2Ug aWYgKCh4ID0gemNoa2koYXRtYnVmKSkgPT0gLTEpCisJICAgICAgcHJpbnRmKCI/RmlsZSBub3Qg Zm91bmQ6ICVzXG4iLGJyc3RyaXAoYXRtYnVmKSk7CisJICAgIGVsc2UgaWYgKHggPT0gLTIpCisJ ICAgICAgcHJpbnRmKCI/Tm90IGEgcmVndWxhciBmaWxlOiAlc1xuIixhdG1idWYpOworCSAgICBl bHNlCisgICAgICAgICAgICAgIC8qIHByaW50ZigiP05vdCBhIGRlbGV0YWJsZSBmaWxlOiAlc1xu IixhdG1idWYpOyAqLworICAgICAgICAgICAgICBnb3RvIHRyeWFueXdheTsKKyAgICAgICAgfSBl bHNlIHsKKyAgICAgICAgICAgIHByaW50ZigiP0EgZmlsZSBzcGVjaWZpY2F0aW9uIGlzIHJlcXVp cmVkXG4iKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4oLTkpOworICAgIH0KKyAgdHJ5YW55 d2F5OgorICAgIGNrc3RybmNweSh0bXBidWYsY21yZXN1bHQuc3Jlc3VsdCxUTVBCVUZTSVopOyAv KiBTYWZlIGNvcHkgb2YgZmlsZXNwZWMgKi8KKyAgICBpZiAoZGVsZGlycykgeworICAgICAgICBj a3N0cm5jcHkoc2FmZWJ1ZixjbXJlc3VsdC5zcmVzdWx0LENLTUFYUEFUSCk7CisjaWZkZWYgVk1T T1JVTklYCisgICAgICAgIGxlbiA9IHpnZXRmcyh0bXBidWYpOyAgICAgICAgICAgLyogSXMgaXQg YSBkaXJlY3RvcnkgbmFtZT8gKi8KKyAgICAgICAgYXJnaXNkaXIgPSB6Z2ZzX2RpcjsgICAgICAg ICAgICAvKiBUaGVuIGJlY2F1c2Ugb2YgaG93IHp4cGFuZCgpICovCisgICAgICAgIGlmIChhcmdp c2RpciAmJiB6Z2ZzX2xpbmspICAgICAgLyogd29ya3MsIHdlIGhhdmUgdG8gYWRkIGl0IHRvICov CisgICAgICAgICAgYXJnaXNkaXIgPSAwOyAgICAgICAgICAgICAgICAgLyogdGhlIGxpc3QuICov CisgICAgICAgIGlmIChpdHNhZGlyKQorICAgICAgICAgIGxlbiA9IC0yOworI2Vsc2UKKyAgICAg ICAgbGVuID0gemNoa2kodG1wYnVmKTsKKyAgICAgICAgaWYgKGxlbiA8IDApCisgICAgICAgICAg YXJnaXNkaXIgPSBpc2Rpcih0bXBidWYpOworI2VuZGlmIC8qIFZNU09SVU5JWCAqLworICAgIH0K KyAgICBkZWJ1ZyhGMTEwLCJERUxFVEUgZmlsZSIsdG1wYnVmLDApOworICAgIGlmICgoeCA9IGNt Y2ZtKCkpIDwgMCkKKyAgICAgIHJldHVybih4KTsKKworI2lmZGVmIElLU0QKKyNpZmRlZiBDS19M T0dJTgorICAgIGlmIChpbnNlcnZlciAmJiBpc2d1ZXN0KSB7CisgICAgICAgIHByaW50ZigiP1Nv cnJ5LCBERUxFVEUgdW5hdmFpbGFibGUgdG8gZ3Vlc3RzXG4iKTsKKyAgICAgICAgcmV0dXJuKC05 KTsKKyAgICB9CisjZW5kaWYgLyogQ0tfTE9HSU4gKi8KKyNlbmRpZiAvKiBJS1NEICovCisKKyNp Zm5kZWYgT1MyT1JVTklYCisgICAgaWYgKHNpbXVsYXRlKSB7CisgICAgICAgIHByaW50ZigiP1Nv cnJ5LCAvU0lNVUxBVEUgbm90IGltcGxlbWVudGVkIG9uIHRoaXMgcGxhdGZvcm1cbiIpOworICAg ICAgICByZXR1cm4oLTkpOworICAgIH0KKyNlbmRpZiAvKiBPUzJPUlVOSVggKi8KKworI2lmZGVm IENPTU1FTlQKKyAgICAvKiAobm90IG5lZWRlZCkgKi8KKyAgICBpZiAoIWlzd2lsZCh0bXBidWYp KSB7CisgICAgICAgIGNoYXIgKm07CisgICAgICAgIGVycm5vID0gMDsKKyAgICAgICAgeCA9IHpj aGtpKHRtcGJ1Zik7CisgICAgICAgIGlmICh4IDwgMCkgeworICAgICAgICAgICAgc3dpdGNoICh4 KSB7CisgICAgICAgICAgICAgIGNhc2UgLTI6IG0gPSAiTm90IGEgcmVndWxhciBmaWxlIjsgYnJl YWs7CisgICAgICAgICAgICAgIGNhc2UgLTE6IG0gPSAiRmlsZSBub3QgZm91bmQgb3Igbm90IGFj Y2Vzc2libGUiOyBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDogbSA9IGVycm5vID8gY2tf ZXJyc3RyKCkgOiAiQ2FuJ3QgZGVsZXRlIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBy aW50ZigiPyVzOiBcIiVzXCJcbiIsbSx0bXBidWYpOworICAgICAgICAgICAgcmV0dXJuKC05KTsK KyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBDT01NRU5UICovCisKKyAgICBtYWtlbGlzdChk ZWxfZXhjLGR4bGlzdCw4KTsKKworLyogdG1wYnVmW10gaGFzIHRoZSBuYW1lIC0gbm93IGRvIGFu eSBuZWVkZWQgY29udmVyc2lvbnMgb24gaXQgKi8KKworI2lmZGVmIE9TMgorICAgIHsgICAvKiBM b3dlciBsZXZlbCBmdW5jdGlvbnMgY2hhbmdlIC8gdG8gXCwgbm90IGdvb2QgZm9yIENNRC5FWEUu ICovCisgICAgICAgIGNoYXIgKnAgPSB0bXBidWY7CisgICAgICAgIHdoaWxlICgqcCkgeyAgICAg ICAgICAgICAgICAgICAgLyogQ2hhbmdlIHRoZW0gYmFjayB0byBcICovCisgICAgICAgICAgICBp ZiAoKnAgPT0gJy8nKSAqcCA9ICdcXCc7CisgICAgICAgICAgICBwKys7CisgICAgICAgIH0KKyAg ICB9CisjZW5kaWYgLyogT1MyICovCisKKyNpZmRlZiBWTVMKKyAgICBpZiAoaXN3aWxkKHRtcGJ1 ZikpIHsKKyNpZmRlZiBDT01NRU5UCisgICAgICAgIC8qIERvZXMgbm90IGhhbmRsZSAnLicgYXMg dmVyc2lvbiBzZXBhcmF0b3IgKi8KKyAgICAgICAgY2hhciAqcCA9IHRtcGJ1ZjsKKyAgICAgICAg eCA9IDA7CisgICAgICAgIHdoaWxlICgqcCkgeworICAgICAgICAgICAgaWYgKCpwID09ICc7Jykg eworICAgICAgICAgICAgICAgIHggPSAxOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg ICAgICAgfSBlbHNlCisgICAgICAgICAgICAgIHArKzsKKyAgICAgICAgfQorICAgICAgICBpZiAo IXgpIGNrc3RybmNhdCh0bXBidWYsIjsqIixUTVBCVUZTSVopOworI2Vsc2UKKyAgICAgICAgaiA9 IDA7IHggPSAwOyAgICAgICAgICAgICAgICAgICAvKiBmb3IgZW5kX2RvdCBhbmQgbnVtYmVyIG9m IGRvdHMgKi8KKyAgICAgICAgaSA9IHN0cmxlbih0bXBidWYpOworICAgICAgICBpZiAodG1wYnVm W2ldID09ICc7JykgeworICAgICAgICAgICAgY2tzdHJuY2F0KHRtcGJ1ZiwiMCIsVE1QQlVGU0la KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICh0bXBidWZbaS0tXSA9PSAnLicp CisgICAgICAgICAgICAgIGorKzsKKyAgICAgICAgICAgIGZvciAoOyBpID49IDA7IGktLSkgewor ICAgICAgICAgICAgICAgIGlmICh0bXBidWZbaV0gPT0gJzsnIHx8IHRtcGJ1ZltpXSA9PSAnOicg fHwKKyAgICAgICAgICAgICAgICAgICAgdG1wYnVmW2ldID09ICddJyB8fCB0bXBidWZbaV0gPT0g Jz4nKQorICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAo dG1wYnVmW2ldID09ICcuJykKKyAgICAgICAgICAgICAgICAgIHgrKzsKKyAgICAgICAgICAgIH0K KyAgICAgICAgICAgIGlmICh0bXBidWZbaV0gIT0gJzsnKSB7ICAgICAvKiBkb3QgbWF5IGhhdmUg YmVlbiB1c2VkICovCisgICAgICAgICAgICAgICAgaWYgKGopIHsgICAgICAgICAgICAgICAgLyog bGFzdCBjaGFyIGlzIGRvdCAqLworICAgICAgICAgICAgICAgICAgaWYgKHgpICAgICAgICAgICAg ICAgIC8qIHNlY29uZCBpcyB2ZXJzaW9uIHNlcGFyYXRvciAqLworICAgICAgICAgICAgICAgICAg ICBja3N0cm5jYXQodG1wYnVmLCIwIixUTVBCVUZTSVopOworICAgICAgICAgICAgICAgICAgZWxz ZSAgICAgICAgICAgICAgICAgIC8qICdmb28uJyAqLworICAgICAgICAgICAgICAgICAgICBja3N0 cm5jYXQodG1wYnVmLCI7MCIsVE1QQlVGU0laKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYg KHggPT0gMSkgICAgICAvKiBsYWNraW5nIGEgdmVyc2lvbiBzZXBhcmF0b3IgKi8KKyAgICAgICAg ICAgICAgICAgIGNrc3RybmNhdCh0bXBidWYsIjswIixUTVBCVUZTSVopOworICAgICAgICAgICAg ICAgIGVsc2UgaWYgKHggPT0gMCkgICAgICAgIC8qIHggPT0gMiBoYXMgYSB2ZXJzaW9uICovCisg ICAgICAgICAgICAgICAgICBja3N0cm5jYXQodG1wYnVmLCIuKjswIixUTVBCVUZTSVopOworICAg ICAgICAgICAgfQorICAgICAgICB9CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgIH0KKyNlbmRp ZiAvKiBWTVMgKi8KKworICAgIGRlYnVnKEYxMTAsImRvZGVsIHRtcGJ1ZiIsdG1wYnVmLDApOyAv KiBGaWxlbmFtZSAqLworCisjaWZuZGVmIE9TMk9SVU5JWCAgICAgICAgICAgICAgICAgICAgICAg LyogTm8gYnVpbHQtaW4gREVMRVRFIGNvZGUuLi4gKi8KKyAgICAvKiBDb25zdHJ1Y3Qgc3lzdGVt IGNvbW1hbmQuICovCisgICAgY2ttYWttc2cobGluZSxMSU5CVUZTSVosREVMQ01ELCIgIix0bXBi dWYsTlVMTCk7CisjZWxzZQorI2lmZGVmIFZNUworICAgIGlmIChhc2tpbmcpIHsgICAgICAgICAg ICAgICAgICAgICAgIC8qIE1heWJlIG92ZXJ3cml0ZSBpbiBWTVMgKi8KKyAgICAgICAgaWYgKHhf bGlzKSAgICAgICAgICAgICAgICAgICAgICAvKiBpZiBvcHRpb25zIGFyZSBuZWVkZWQuLi4gKi8K KyAgICAgICAgICBja21ha21zZyhsaW5lLExJTkJVRlNJWixERUxDTUQsIiAvY29uZmlybS9sb2cg Iix0bXBidWYsTlVMTCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBja21ha21zZyhsaW5lLExJ TkJVRlNJWixERUxDTUQsIiAvY29uZmlybSAiLHRtcGJ1ZixOVUxMKTsKKyAgICB9IGVsc2UgaWYg KHhfbGlzKQorICAgICAgY2ttYWttc2cobGluZSxMSU5CVUZTSVosREVMQ01ELCIgL2xvZyAiLHRt cGJ1ZixOVUxMKTsKKyAgICBjb25yZXMoKTsKKyNlbmRpZiAvKiBWTVMgKi8KKworICAgIGRlYnVn KEYxMTAsImRvZGVsIGxpbmUiLGxpbmUsMCk7CisjZW5kaWYgLyogT1MyT1JVTklYICovCisKKyNp ZmRlZiBNQUMKKyAgICBzdWNjZXNzID0gKHpkZWxldCh0bXBidWYpID09IDApOworCisjZWxzZSAg LyogIU1BQyAuLi4gKi8KKworI2lmZGVmIE9TMk9SVU5JWAorICAgIHsKKyAgICAgICAgaW50IGZp bGVzcGFjZSA9IDA7CisgICAgICAgIGludCBjb3VudCA9IDA7CisgICAgICAgIGludCBsaW5lcyA9 IDA7CisgICAgICAgIGludCBuID0gMDsKKworICAgICAgICBzID0gdG1wYnVmOworCisjaWZkZWYg Q0tfVFRHV1NJWgorI2lmZGVmIE9TMgorICAgICAgICB0dGdjd3N6KCk7CisjZWxzZSAvKiBPUzIg Ki8KKyAgICAgICAgLyogQ2hlY2sgd2hldGhlciB3aW5kb3cgc2l6ZSBjaGFuZ2VkICovCisgICAg ICAgIGlmICh0dGd3c2l6KCkgPiAwKSB7CisgICAgICAgICAgICBpZiAodHRfcm93cyA+IDAgJiYg dHRfY29scyA+IDApIHsKKyAgICAgICAgICAgICAgICBjbWRfcm93cyA9IHR0X3Jvd3M7CisgICAg ICAgICAgICAgICAgY21kX2NvbHMgPSB0dF9jb2xzOworICAgICAgICAgICAgfQorICAgICAgICB9 CisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogQ0tfVFRHV1NJWiAqLworCisgICAgICAgIGlm ICh4X2hkZyA+IDAgJiYgIXN1bW1hcnkpIHsKKyAgICAgICAgICAgIHByaW50ZigiRGVsZXRpbmcg JXMuLi4lc1xuIiwgcywgc2ltdWxhdGUgPyAiIChTSU1VTEFUSU9OKSIgOiAiIik7CisgICAgICAg ICAgICBuICs9IDI7CisgICAgICAgIH0KKyNpZmRlZiBaWFJFV0lORAorICAgICAgICB6ID0genhy ZXdpbmQoKTsgICAgICAgICAgICAgICAgIC8qIFJld2luZCBmaWxlIGxpc3QgKi8KKyNlbHNlCisg ICAgICAgIGlmICghZGVsZGlycykKKyAgICAgICAgICBuenhvcHRzID0gWlhfRklMT05MWTsKKyAg ICAgICAgaWYgKHJlY3Vyc2l2ZSkgbnp4b3B0cyB8PSBaWF9SRUNVUlNFOworICAgICAgICBpZiAo bWF0Y2hkb3QpICBuenhvcHRzIHw9IFpYX01BVENIRE9UOworICAgICAgICBlcnJubyA9IDA7Cisg ICAgICAgIHogPSBuenhwYW5kKHMsbnp4b3B0cyk7ICAgICAgICAgLyogRXhwYW5kIGZpbGUgbGlz dCAqLworI2VuZGlmIC8qIFpYUkVXSU5EICovCisgICAgICAgIGRlYnVnKEYxMTEsImRvZGVsIixz LHopOworCisgICAgICAgIC8qIElmIGRlbGV0aW5nIGRpcmVjdG9yaWVzLCBzb3J0IGluIHJldmVy c2Ugb3JkZXIgKi8KKyAgICAgICAgLyogc28gd2UgZGVsZXRlIHRoZSBmaWxlcyBmaXJzdCwgdGhl biB0aGUgZGlyZWN0b3J5LiAqLworCisjaWZkZWYgT1MyCisgICAgICAgIC8qIEluIEs5NSwgd2Ug aGF2ZSBubyBtdGNocyBhcnJheSwgbm9yIGFueSBjb250cm9sIG92ZXIgKi8KKyAgICAgICAgLyog dGhlIG9yZGVyIGluIHdoaWNoIHpuZXh0KCkgcmV0dXJucyBmaWxlbmFtZXMsIHNvIHdlICAqLwor ICAgICAgICAvKiBtdXN0IGNvcHkgdGhlIGFycmF5IGFuZCBzb3J0IGl0LiAqLworICAgICAgICB7 CisgICAgICAgICAgICBpbnQgaTsKKyAgICAgICAgICAgIGlmICh4bXRjaHMpIHsgICAgICAgICAg ICAgICAvKiBGcmVlIHByZXZpb3VzIGxpc3QgaW4gY2FzZSAqLworICAgICAgICAgICAgICAgIGRl YnVnKEYxMDEsImRvZGVsIGZyZWVpbmcgcHJldmlvdXMgbGlzdCIsIiIseG10Y2huKTsKKyAgICAg ICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgeG10Y2huOyBpKyspIC8qIGl0IHdhc24ndCBmcmVl ZCBsYXN0IHRpbWUuICovCisgICAgICAgICAgICAgICAgICBpZiAoeG10Y2hzW2ldKQorICAgICAg ICAgICAgICAgICAgICBmcmVlKHhtdGNoc1tpXSk7CisgICAgICAgICAgICAgICAgZnJlZSh4bXRj aHMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgeG10Y2huID0gMDsKKyAgICAgICAgICAg IHhtdGNocyA9IChjaGFyICoqKW1hbGxvYyh6ICogKHNpemVvZihjaGFyICoqKSkpOyAvKiBNYWtl IG5ldyBvbmUgKi8KKyAgICAgICAgICAgIGlmICgheG10Y2hzKSB7CisgICAgICAgICAgICAgICAg cHJpbnRmKCI/TWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZVxuIik7CisgICAgICAgICAgICAgICAg cmV0dXJuKC05KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCB6 OyBpKyspIHsKKyAgICAgICAgICAgICAgICB4bXRjaHNbaV0gPSBOVUxMOworICAgICAgICAgICAg ICAgIHpuZXh0KHRtcGJ1Zik7CisgICAgICAgICAgICAgICAgaWYgKCEqdG1wYnVmKQorICAgICAg ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgbWFrZXN0cigmKHhtdGNoc1tpXSks dG1wYnVmKTsKKyAgICAgICAgICAgICAgICBpZiAoIXhtdGNoc1tpXSkgeworICAgICAgICAgICAg ICAgICAgICBwcmludGYoIj9NZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlXG4iKTsKKyAgICAgICAg ICAgICAgICAgICAgeG10Y2huID0gaSAtIDE7CisgICAgICAgICAgICAgICAgICAgIHJjID0gLTk7 CisgICAgICAgICAgICAgICAgICAgIGdvdG8geGRlbGV0ZTsKKyAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgICAgLyogZGVidWcoRjExMSwiZG9kZWwgYWRkIix4bXRjaHNbaV0saSk7ICov CisgICAgICAgICAgICB9CisgICAgICAgICAgICB4bXRjaG4gPSBpOworICAgICAgICAgICAgZGVi dWcoRjEwMSwiZG9kZWwgeG10Y2huIiwiIix4bXRjaG4pOworICAgICAgICAgICAgc2hfc29ydCh4 bXRjaHMsTlVMTCx6LDAsZGVsZGlycywwKTsKKyAgICAgICAgfQorI2Vsc2UKKyNpZmRlZiBVTklY CisgICAgICAgIHNoX3NvcnQobXRjaHMsTlVMTCx6LDAsZGVsZGlycyxmaWxlY2FzZSk7CisjZW5k aWYgLyogVU5JWCAqLworI2VuZGlmIC8qIE9TMiAqLworCisgICAgICAgIGlmICh6ID4gMCkgewor ICAgICAgICAgICAgaW50IGk7CisjaWZkZWYgT1MyCisgICAgICAgICAgICBpbnQgaXggPSAwOwor I2VuZGlmIC8qIE9TMiAqLworICAgICAgICAgICAgc3VjY2VzcyA9IDE7CisgICAgICAgICAgICBp ZiAoeF9oZGcgPiAwKQorICAgICAgICAgICAgICBwcmludGYoIlxuIik7CisKKyAgICAgICAgICAg IHdoaWxlICgKKyNpZmRlZiBPUzIKKyAgICAgICAgICAgICAgICAgICBpeCA8IHhtdGNobgorI2Vs c2UKKyAgICAgICAgICAgICAgICAgICAxCisjZW5kaWYgLyogT1MyICovCisgICAgICAgICAgICAg ICAgICAgKSB7ICAgICAgICAgICAgICAgICAgLyogTG9vcCBmb3IgYWxsIGZpbGVzICovCisjaWZk ZWYgT1MyCisgICAgICAgICAgICAgICAgY2tzdHJuY3B5KHRtcGJ1Zix4bXRjaHNbaXgrK10sVE1Q QlVGU0laKTsKKyNlbHNlCisgICAgICAgICAgICAgICAgem5leHQodG1wYnVmKTsgICAgICAgICAg LyogR2V0IG5leHQgZmlsZSAqLworI2VuZGlmIC8qIE9TMiAqLworICAgICAgICAgICAgICAgIGlm ICghKnRtcGJ1ZikgeyAgICAgICAgIC8qIE5vIG1vcmUgKi8KKyAgICAgICAgICAgICAgICAgICAg aWYgKGRlbGRpcnMgJiYgcmVjdXJzaXZlICYmIGFyZ2lzZGlyKSB7CisgICAgICAgICAgICAgICAg ICAgICAgICBja3N0cm5jcHkodG1wYnVmLHNhZmVidWYsVE1QQlVGU0laKTsKKyAgICAgICAgICAg ICAgICAgICAgICAgIGFyZ2lzZGlyID0gMDsgICAvKiAob25seSBkbyB0aGlzIG9uY2UpICovCisg ICAgICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBza2lwID0gMDsKKyAgICAgICAgICAg ICAgICBpZiAoIWRlbHRyZWUpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGZzKQorICAgICAg ICAgICAgICAgICAgICAgIGlmIChmaWxlc2VsZWN0KHRtcGJ1ZiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBkZWxfYWZ0LGRlbF9iZWYsZGVsX25hZixkZWxfbmJmLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbnNpemUsbWF4c2l6ZSwwLDgsZHhs aXN0KSA8IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2tpcCsrOworICAgICAgICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCFz a2lwICYmIHNjYW4gJiYgaXRzYWRpcikgeworICAgICAgICAgICAgICAgICAgICBza2lwKys7Cisg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICghc2tpcCAmJiBzY2FuKSB7Cisg ICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChzY2FuZmlsZSh0bXBidWYsJnksbnNjYW5maWxl KSkgeworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRlRfQklOOgorICAgICAgICAgICAgICAg ICAgICAgICAgaWYgKHhtb2RlICE9IDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNraXAr KzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAg IGNhc2UgRlRfVEVYVDoKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIEZUXzdCSVQ6CisgICAg ICAgICAgICAgICAgICAgICAgY2FzZSBGVF84QklUOgorI2lmZGVmIFVOSUNPREUKKyAgICAgICAg ICAgICAgICAgICAgICBjYXNlIEZUX1VURjg6CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSBG VF9VQ1MyOgorI2VuZGlmIC8qIFVOSUNPREUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGlm ICh4bW9kZSAhPSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICBza2lwKys7CisgICAgICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCFz a2lwICYmIGFza2luZykgeworICAgICAgICAgICAgICAgICAgICBpbnQgeDsKKyAgICAgICAgICAg ICAgICAgICAgY2ttYWttc2cobGluZSxMSU5CVUZTSVosIiBEZWxldGUgIix0bXBidWYsIj8gIixO VUxMKTsKKyAgICAgICAgICAgICAgICAgICAgeCA9IGdldHllc25vKGxpbmUsMyk7CisgICAgICAg ICAgICAgICAgICAgIHN3aXRjaCAoeCkgeworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDog Y29udGludWU7ICAgICAgICAgICAvKiBubyAqLworICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug MTogYnJlYWs7ICAgICAgICAgICAgICAvKiB5ZXMgKi8KKyAgICAgICAgICAgICAgICAgICAgICBj YXNlIDI6IGdvdG8geGRlbGV0ZTsgICAgICAgLyogcXVpdCAqLworICAgICAgICAgICAgICAgICAg ICAgIGNhc2UgMzogYXNraW5nID0gMDsgYnJlYWs7ICAvKiBnbyAqLworICAgICAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgICAgfQorI2lmZGVmIFZNU09SVU5JWAorICAgICAgICAgICAg ICAgIGxlbiA9IHpnZXRmcyh0bXBidWYpOyAgIC8qIEdldCBsZW5ndGggYW5kIGFjY2Vzc2liaWxp dHkgKi8KKyAgICAgICAgICAgICAgICBpdHNhZGlyID0gemdmc19kaXI7CisgICAgICAgICAgICAg ICAgaWYgKGl0c2FkaXIgJiYgemdmc19saW5rKSB7IC8qIFRyZWF0IGxpbmtzIHRvIGRpcmVjdG9y aWVzICovCisgICAgICAgICAgICAgICAgICAgIGl0c2FkaXIgPSAwOyAgICAgICAgLyogYXMgcmVn dWxhciBmaWxlcyAqLworICAgICAgICAgICAgICAgICAgICBpZiAoc2NhbikgICAgICAgICAgIC8q IEJ1dCBub3QgaWYgL1RZUEU6IHdhcyBnaXZlbiAqLworICAgICAgICAgICAgICAgICAgICAgIHNr aXArKzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGl0c2FkaXIpICAg ICAgICAgICAgLyogKGVtdWxhdGUgbm9uLVVuaXggY29kZSkgKi8KKyAgICAgICAgICAgICAgICAg IGxlbiA9IC0yOworI2Vsc2UKKyAgICAgICAgICAgICAgICBsZW4gPSB6Y2hraSh0bXBidWYpOyAg ICAvKiBHZXQgYWNjZXNzaWJpbGl0eSAqLworICAgICAgICAgICAgICAgIGlmIChsZW4gPCAwKSAg ICAgICAgICAgIC8qIFNlZSBpZiBpdCdzIGEgZGlyZWN0b3J5ICovCisgICAgICAgICAgICAgICAg ICBpdHNhZGlyID0gaXNkaXIodG1wYnVmKTsKKyNlbmRpZiAvKiBWTVNPUlVOSVggKi8KKworICAg ICAgICAgICAgICAgIGlmIChza2lwKSB7CisjaWZkZWYgQ09NTUVOVCAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogVG9vIHZlcmJvc2UgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKHhfbGlz ID4gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbGluZXMrKzsKKyAgICAgICAgICAgICAg ICAgICAgICAgIHByaW50ZigiICVzIChTS0lQUEVEKVxuIix0bXBidWYpOworI2lmZGVmIENLX1RU R1dTSVoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpCisg ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYXNrbW9yZSgpKSBnb3RvIHhkZWxldGU7IGVs c2UgbiA9IDA7CisjZW5kaWYgLyogQ0tfVFRHV1NJWiAqLworICAgICAgICAgICAgICAgICAgICB9 CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJERUxFVEUgbGVu Iix0bXBidWYsbGVuKTsKKyAgICAgICAgICAgICAgICBpZiAoc2ltdWxhdGUpIHsKKyAgICAgICAg ICAgICAgICAgICAgZmlsZXNwYWNlICs9IGxlbjsKKyAgICAgICAgICAgICAgICAgICAgY291bnQr KzsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHhfbGlzID4gMCkgeworICAgICAgICAgICAgICAg ICAgICAgICAgbGluZXMrKzsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiICVzIChT RUxFQ1RFRClcbiIsdG1wYnVmKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgrK24gPiBj bWRfcm93cyAtIDMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgeHg7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgeHggPSBhc2ttb3JlKCk7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaWYgKCF4eCkgZ290byB4ZGVsZXRlOyBlbHNlIG4gPSAwOworICAgICAgICAg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg fSBlbHNlIGlmIChsZW4gPj0gMCB8fCAhaXRzYWRpcikgeyAvKiBSZWd1bGFyIGZpbGUgKi8KKyAg ICAgICAgICAgICAgICAgICAgemRlbGV0KHRtcGJ1Zik7ICAgICAgICAgICAgICAgIC8qIG9yIHN5 bWxpbmssIGV0Yy4uLiAqLworICAgICAgICAgICAgICAgICAgICBpZiAoemNoa2kodG1wYnVmKSA8 IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVzcGFjZSArPSBsZW47CisgICAgICAg ICAgICAgICAgICAgICAgICBjb3VudCsrOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHhf bGlzID4gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzKys7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIgJXMgKE9LKVxuIix0bXBidWYpOworICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpZiAoIWFza21vcmUoKSkgZ290byB4ZGVsZXRlOyBlbHNlIG4g PSAwOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9IGVs c2UgeworICAgICAgICAgICAgICAgICAgICAgICAgYmFkKys7CisgICAgICAgICAgICAgICAgICAg ICAgICBzdWNjZXNzID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4X2xpcyA+IDAp IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lcysrOworICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHByaW50ZigiICVzIChGQUlMRUQ6ICVzKVxuIix0bXBidWYsY2tfZXJyc3Ry KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMp CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWFza21vcmUoKSkgZ290byB4ZGVs ZXRlOyBlbHNlIG4gPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgvKiBwYXNzID4gMCAmJiAqLyBk ZWxkaXJzICYmIGl0c2FkaXIpIHsKKyAgICAgICAgICAgICAgICAgICAgLyogSXQncyBhIGRpcmVj dG9yeSAqLworICAgICAgICAgICAgICAgICAgICBpZiAoenJtZGlyKHRtcGJ1ZikgPiAtMSkgeyAv KiBPbmx5IHdvcmtzIGlmIGVtcHR5ICovCisgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCsr OworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHhfbGlzID4gMCkgeworICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGxpbmVzKys7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJp bnRmKCIgJXMgKE9LKVxuIix0bXBidWYpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm ICgrK24gPiBjbWRfcm93cyAtIDMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo IWFza21vcmUoKSkgZ290byB4ZGVsZXRlOyBlbHNlIG4gPSAwOworICAgICAgICAgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAg ICAgICAgc3VjY2VzcyA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeF9saXMgPiAw KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZXMrKzsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICBwcmludGYoIiAlcyAoRkFJTEVEOiAlcylcbiIsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHRtcGJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY2tfZXJyc3RyKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgr K24gPiBjbWRfcm93cyAtIDMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWFz a21vcmUoKSkgZ290byB4ZGVsZXRlOyBlbHNlIG4gPSAwOworICAgICAgICAgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh4 X2xpcyA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgbGluZXMrKzsKKyAgICAgICAgICAgICAg ICAgICAgaWYgKGlzZGlyKHRtcGJ1ZikpCisgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIg JXMgKEZBSUxFRDogZGlyZWN0b3J5KVxuIix0bXBidWYpOworICAgICAgICAgICAgICAgICAgICBl bHNlCisgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIgJXMgKEZBSUxFRDogbm90IGEgcmVn dWxhciBmaWxlKVxuIix0bXBidWYpOworICAgICAgICAgICAgICAgICAgICBpZiAoKytuID4gY21k X3Jvd3MgLSAzKQorICAgICAgICAgICAgICAgICAgICAgIGlmICghYXNrbW9yZSgpKSBnb3RvIHhk ZWxldGU7IGVsc2UgbiA9IDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg ICAgICAgICAgaWYgKHhfaGRnID4gMCkgeworICAgICAgICAgICAgICAgIGlmIChsaW5lcyA+IDAp CisgICAgICAgICAgICAgICAgICBwcmludGYoIlxuIik7CisgICAgICAgICAgICAgICAgaWYgKCsr biA+IGNtZF9yb3dzIC0gMykKKyAgICAgICAgICAgICAgICAgIGlmICghYXNrbW9yZSgpKSBnb3Rv IHhkZWxldGU7IGVsc2UgbiA9IDA7CisgICAgICAgICAgICAgICAgcHJpbnRmKCIlZCBmaWxlJXMg JXNkZWxldGVkLCAlZCBieXRlJXMgJXNmcmVlZCVzXG4iLAorICAgICAgICAgICAgICAgICAgICAg ICBjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgY291bnQgIT0gMSA/ICJzIiA6ICIiLAor ICAgICAgICAgICAgICAgICAgICAgICBzaW11bGF0ZSA/ICJ3b3VsZCBiZSAiIDogIiIsCisgICAg ICAgICAgICAgICAgICAgICAgIGZpbGVzcGFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgZmls ZXNwYWNlICE9IDEgPyAicyIgOiAiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgc2ltdWxhdGUg PyAid291bGQgYmUgIiA6ICIiLAorICAgICAgICAgICAgICAgICAgICAgICBzaW11bGF0ZSA/ICIg KG1heWJlKSIgOiAiIgorICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgfQor ICAgICAgICAgICAgaWYgKCF4X2xpcyAmJiAhc3VjY2VzcyAmJiAhcXVpZXQpIHsKKyAgICAgICAg ICAgICAgICBwcmludGYoIj9ERUxFVEUgZmFpbGVkIGZvciAlZCBmaWxlJXMgXAorKHVzZSBERUxF VEUgL0xJU1QgdG8gc2VlIGRldGFpbHMpXG4iLAorICAgICAgICAgICAgICAgICAgICAgICBiYWQs IGJhZCA9PSAxID8gIiIgOiAicyIKKyAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICh4X2xpcyA+IDApIHsKKyAgICAgICAgICAgIGlmIChl cnJubykKKyAgICAgICAgICAgICAgcHJpbnRmKCI/JXM6ICVzXG4iLGNrX2VycnN0cigpLCB0bXBi dWYpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBwcmludGYoIj9DYW4ndCBkZWxl dGU6ICVzXG4iLHRtcGJ1Zik7CisgICAgICAgIH0KKyAgICB9CisjZWxzZSAvKiBPUzJPUlVOSVgg Ki8KKyNpZm5kZWYgVk1TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBPdGhlcnMgLSBs ZXQgdGhlIHN5c3RlbSBkbyBpdC4gKi8KKyAgICB4c3lzdGVtKGxpbmUpOworICAgIHggPSBuenhw YW5kKHRtcGJ1ZixuenhvcHRzKTsKKyAgICBzdWNjZXNzID0gKHggPiAwKSA/IDAgOiAxOworICAg IGlmICh4X2hkZyA+IDApCisgICAgICBwcmludGYoIiVzIC0gJXNkZWxldGVkXG4iLCB0bXBidWYs IHN1Y2Nlc3MgPyAiIiA6ICJub3QgIik7CisjZWxzZQorICAgIGlmIChhc2tpbmcpCisgICAgICBw cmludGYoIlxuIik7CisgICAgeCA9IHhzeXN0ZW0obGluZSk7ICAgICAgICAgICAgICAgICAgLyog enNoY21kIHJldHVybnMgMSBmb3Igc3VjY2VzcyAqLworICAgIHN1Y2Nlc3MgPSAoeCA+IDApID8g MSA6IDA7CisgICAgaWYgKHhfaGRnID4gMCAmJiAhYXNraW5nKQorICAgICAgcHJpbnRmKCIlcyAt ICVzZGVsZXRlZFxuIiwgdG1wYnVmLCBzdWNjZXNzID8gIiIgOiAibm90ICIpOworICAgIGNvbmNi KChjaGFyKWVzY2FwZSk7CisjZW5kaWYgLyogVk1TICovCisjZW5kaWYgLyogT1MyT1JVTklYICov CisjZW5kaWYgLyogTUFDICovCisgIHhkZWxldGU6CisgICAgaWYgKGdfbWF0Y2hkb3QgPiAtMSkg eworICAgICAgICBtYXRjaGRvdCA9IGdfbWF0Y2hkb3Q7ICAgICAgICAgIC8qIFJlc3RvcmUgdGhl c2UuLi4gKi8KKyAgICAgICAgZ19tYXRjaGRvdCA9IC0xOworICAgIH0KKyNpZmRlZiBPUzIKKyAg ICBpZiAoeG10Y2hzKSB7CisgICAgICAgIGludCBpOworICAgICAgICBkZWJ1ZyhGMTAxLCJkb2Rl bCBmcmVlaW5nIGxpc3QiLCIiLHhtdGNobik7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCB4bXRj aG47IGkrKykKKyAgICAgICAgICBpZiAoeG10Y2hzW2ldKSBmcmVlKHhtdGNoc1tpXSk7CisgICAg ICAgIGZyZWUoeG10Y2hzKTsKKyAgICAgICAgeG10Y2hzID0gTlVMTDsKKyAgICAgICAgeG10Y2hu ID0gMDsKKyAgICB9CisjZW5kaWYgLyogT1MyICovCisgICAgZGVidWcoRjEwMSwiZG9kZWwgcmVz dWx0IiwiIixyYyk7CisgICAgcmV0dXJuKChyYyA8IDApID8gcmMgOiBzdWNjZXNzKTsKK30KKyNl bmRpZiAvKiBOT0ZSSUxMUyAqLworCisjaWZuZGVmIE5PU1BMICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogVGhlIEVMU0UgY29tbWFuZCAqLworX1BST1RPVFlQKCBWT0lEIHB1c2hxY21kLCAo Y2hhciAqKSApOworCitpbnQKK2RvZWxzZSgpIHsKKyAgICBpZiAoIWlmY21kW2NtZGx2bF0pIHsK KyAgICAgICAgcHJpbnRmKCI/RUxTRSBkb2Vzbid0IGZvbGxvdyBJRlxuIik7CisgICAgICAgIHJl dHVybigtMik7CisgICAgfQorI2lmZGVmIENPTU1FTlQKKy8qCisgIFdyb25nLiAgVGhpcyBwcmV2 ZW50cyBJRi4uRUxTRSBJRi4uLkVMU0UgSUYuLi5FTFNFIElGLi4uRUxTRS4uLgorICBmcm9tIHdv cmtpbmcuCisqLworICAgIGlmY21kW2NtZGx2bF0gPSAwOworI2VuZGlmIC8qIENPTU1FTlQgKi8K KyAgICBpZiAoIWlmdGVzdFtjbWRsdmxdKSB7ICAgICAgICAgICAgICAvKiBJZiBJRiB3YXMgZmFs c2UgZG8gRUxTRSBwYXJ0ICovCisgICAgICAgIGlmIChtYWNsdmwgPiAtMSB8fCB0bGV2ZWwgPiAt MSkgeyAvKiBJbiBtYWNybyBvciBjb21tYW5kIGZpbGUgKi8KKyAgICAgICAgICAgIGRlYnVnKEYx MDAsImRvZWxzZSBwdXNoaW5nIiwiIiwwKTsKKyNpZm5kZWYgQ09NTUVOVAorICAgICAgICAgICAg cHVzaGNtZChOVUxMKTsgICAgICAgICAgICAgIC8qIHNhdmUgcmVzdCBvZiBjb21tYW5kLiAqLwor I2Vsc2UKKyAgICAgICAgICAgIC8qIFRoaXMgZml4ZXMgY2VydGFpbiBvYnNjdXJlIHByb2JsZW1z ICovCisgICAgICAgICAgICAvKiBidXQgYnJlYWtzIG1hbnkgb3RoZXIgY29uc3RydWN0aW9ucyB0 aGF0IG11c3Qgd29yay4gKi8KKyAgICAgICAgICAgIHB1c2hxY21kKE5VTEwpOworI2VuZGlmIC8q IENPTU1FTlQgKi8KKyAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBJ ZiBpbnRlcmFjdGl2ZSwgKi8KKyAgICAgICAgICAgIGNtaW5pKGNreGVjaCk7ICAgICAgICAgICAg ICAvKiBqdXN0IHN0YXJ0IGEgbmV3IGNvbW1hbmQgKi8KKyAgICAgICAgICAgIHByaW50ZigiXG4i KTsgICAgICAgICAgICAgICAvKiAobGlrZSBpbiBNUy1ET1MgS2VybWl0KSAqLworICAgICAgICAg ICAgaWYgKHBmbGFnKSBwcm9tcHQoeHhzdHJpbmcpOworICAgICAgICB9CisgICAgfSBlbHNlIHsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ29uZGl0aW9uIGlzIGZhbHNlICovCisgICAg ICAgIGlmICgoeSA9IGNtdHh0KCJjb21tYW5kIHRvIGJlIGlnbm9yZWQiLCIiLCZzLE5VTEwpKSA8 IDApCisgICAgICAgICAgcmV0dXJuKHkpOyAgICAgICAgICAgICAgICAgICAgLyogR29iYmxlIHVw IHJlc3Qgb2YgbGluZSAqLworICAgIH0KKyAgICByZXR1cm4oMCk7Cit9CisjZW5kaWYgLyogTk9T UEwgKi8KKworI2lmbmRlZiBOT1NQTAoraW50Citkb3N3aXRjaCgpIHsKKyAgICBjaGFyICpscCwg KmFwOyAgICAgICAgICAgICAgICAgICAgICAvKiBNYWNybyBhcmd1bWVudCBwb2ludGVyICovCisg ICAgaW50IGxlbiA9IDAsIHgsIHksIHBwID0gMDsKKyAgICBjaGFyIGJyYnVmWzNdOworCisgICAg LyogR2V0IHZhcmlhYmxlIG5hbWUgKi8KKworICAgIHRtcGJ1ZlswXSA9IE5VTDsKKyAgICBicmJ1 ZlswXSA9ICd7JzsKKyAgICBicmJ1ZlsxXSA9ICd9JzsKKyAgICBicmJ1ZlsyXSA9IE5VTDsKKwor ICAgIHkgPSBjbWZsZCgiVmFyaWFibGUgbmFtZSIsIiIsJnMseHhzdHJpbmcpOworICAgIGRlYnVn KEYxMTEsImRvc3dpdGNoIGNtZmxkIixzLHkpOworICAgIGlmICh5IDwgMCkgeworICAgICAgICBp ZiAoeSA9PSAtMykJCQkvKiBCZWNhdXNlIGJyc3RyaXAoKSB3cml0ZXMgKi8KKyAgICAgICAgICBz ID0gYnJidWY7CQkJLyogaW50byBpdHMgYXJndW1lbnQuICovCisgICAgICAgIGVsc2UKKyAgICAg ICAgICByZXR1cm4oeSk7CisgICAgfQorICAgIGRlYnVnKEYxMTAsImRvc3dpdGNoIEEiLHMsMCk7 CisgICAgaWYgKCFzdHJjbXAocywiKCIpKSB7CisgICAgICAgIHBwKys7CisgICAgICAgIGlmICgo eSA9IGNtZmxkKCJWYXJpYWJsZSBuYW1lIiwiIiwmcyx4eHN0cmluZykpIDwgMCkgeworICAgICAg ICAgICAgaWYgKHkgPT0gLTMpCisgICAgICAgICAgICAgIHMgPSBicmJ1ZjsKKyAgICAgICAgICAg IGVsc2UKKyAgICAgICAgICAgICAgcmV0dXJuKHkpOworCSAgICBkZWJ1ZyhGMTEwLCJkb3N3aXRj aCBCIixzLDApOworICAgICAgICB9CisgICAgfQorICAgIGxlbiA9IGNrc3RybmNweSh0bXBidWYs YnJzdHJpcChzKSxUTVBCVUZTSVopOworICAgIGlmICh0bXBidWZbMF0gPT0gQ01EUSkgeworICAg ICAgICBpZiAoY2hrdmFyKHMpIDwgMSkgeworICAgICAgICAgICAgcHJpbnRmKCI/VmFyaWFibGUg bmFtZSByZXF1aXJlZFxuIik7CisgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICB9Cisg ICAgfQorICAgIGlmIChwcCA+IDApIHsgICAgICAgICAgICAgICAgICAgICAgIC8qIElmIG9wZW4g cGFyZW4gZ2l2ZW4gcGFyc2UgY2xvc2luZyAqLworICAgICAgICBpZiAoKHkgPSBjbWZsZCgiQ2xv c2luZyBwYXJlbnRoZXNpcyIsIiIsJnMsTlVMTCkpIDwgMCkKKyAgICAgICAgICByZXR1cm4oeSk7 CisgICAgICAgIGlmIChzdHJjbXAoYXRtYnVmLCIpIikpIHsKKyAgICAgICAgICAgIHByaW50Zigi P0Nsb3NpbmcgcGFyZW50aGVzaXMgcmVxdWlyZWRcbiIpOworICAgICAgICAgICAgcmV0dXJuKC05 KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBscCA9IGxpbmU7CisgICAgeCA9IGNrc3RybmNweShs cCwiX3N3aXR4ICIsTElOQlVGU0laKTsgLyogX3N3aXR4ICsgc3BhY2UgKi8KKyAgICBscCArPSB4 OworICAgIGFwID0gbHA7CisgICAgZGVidWcoRjAxMCwiU1dJVENIIGEiLGxpbmUsMCk7CisKKyNp ZmRlZiBDT01NRU5UCisgICAgeCA9IGNrbWFrbXNnKGxwLExJTkJVRlNJWi14LHRtcGJ1ZiwiICIs TlVMTCxOVUxMKTsgLyogdmFyaWFibGUgbmFtZSArIFNQICovCisjZWxzZQorICAgIHsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHZhcmlhYmxlIG5hbWUgKyBTUCAqLworICAg ICAgICBjaGFyICogcCA9IHRtcGJ1ZjsKKwlpZiAobGVuID4gMCkgeworCSAgICBpZiAodG1wYnVm WzBdID09ICcoJyAmJiB0bXBidWZbbGVuLTFdID09ICcpJykgeworCQl0bXBidWZbbGVuLTFdID0g TlVMOworCQlwKys7CisJICAgIH0KKyAgICAgICAgfQorICAgICAgICB4ID0gY2ttYWttc2cobHAs TElOQlVGU0laLXgsInsiLGJyc3RyaXAocCksIn0iLCIgIik7CisgICAgfQorI2VuZGlmIC8qIENP TU1FTlQgKi8KKyAgICBkZWJ1ZyhGMDEwLCJTV0lUQ0ggYiIsbGluZSwwKTsKKyAgICBscCArPSB4 OworCisgICAgLyogR2V0IGJvZHkgKi8KKworICAgIGlmICgoeSA9IGNtdHh0KCJzZXJpZXMgb2Yg Y2FzZXMiLCIiLCZzLE5VTEwpKSA8IDApIHJldHVybih5KTsKKyAgICBpZiAoKHkgPSAoaW50KXN0 cmxlbihzKSkgPCAxKSByZXR1cm4oLTIpOworICAgIGlmIChzWzBdICE9ICd7JyAmJiBzW3ktMV0g IT0gJ30nKSB7IC8qIFN1cHBseSBicmFjZXMgaWYgbWlzc2luZyAqLworICAgICAgICBja21ha21z Zyh0bXBidWYsVE1QQlVGU0laLCJ7ICIscywiIH0iLE5VTEwpOworICAgICAgICBzID0gdG1wYnVm OworICAgIH0KKyAgICBpZiAobGl0Y21kKCZzLCZscCwoTElOQlVGU0laIC0gKGxwIC0gKGNoYXIg KilsaW5lKSAtIDIpKSA8IDApIHsKKyAgICAgICAgcHJpbnRmKCI/VW5iYWxhbmNlZCBicmFjZXNc biIpOworICAgICAgICByZXR1cm4oMCk7CisgICAgfQorICAgIGRlYnVnKEYwMTAsIlNXSVRDSCBj IixsaW5lLDApOworCisgICAgeCA9IG1sb29rKG1hY3RhYiwiX3N3aXR4IixubWFjKTsgICAgLyog TG9vayB1cCBTV0lUQ0ggbWFjcm8gZGVmaW5pdGlvbiAqLworICAgIGlmICh4IDwgMCkgeyAgICAg ICAgICAgICAgICAgICAgICAgIC8qIE5vdCB0aGVyZT8gKi8KKyAgICAgICAgYWRkbW1hYygiX3N3 aXR4Iixzd19kZWYpOyAgICAgICAvKiBQdXQgaXQgYmFjay4gKi8KKyAgICAgICAgaWYgKCh4ID0g bWxvb2sobWFjdGFiLCJfc3dpdHgiLG5tYWMpKSA8IDApIHsgLyogTG9vayBpdCB1cCBhZ2Fpbi4g Ki8KKyAgICAgICAgICAgIHByaW50ZigiP1NXSVRDSCBtYWNybyBkZWZpbml0aW9uIGdvbmUhXG4i KTsgLyogU2hvdWxkbid0IGhhcHBlbi4gKi8KKyAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0g MCk7CisgICAgICAgIH0KKyAgICB9CisgICAgZGVidWcoRjAxMCwiU1dJVENIIGNvbW1hbmQiLGxp bmUsMCk7IC8qIEV4ZWN1dGUgdGhlIFNXSVRDSCBtYWNyby4gKi8KKyAgICBzdWNjZXNzID0gZG9k byh4LGFwLGNtZHN0a1tjbWRsdmxdLmNjZmxncyB8IENGX0lNQUMpOworICAgIGRlYnVnKEYxMDEs IlNXSVRDSCBzdGF0dXMiLCIiLHN1Y2Nlc3MpOworICAgIHJldHVybihzdWNjZXNzKTsKK30KKwor aW50Citkb2ZvcigpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVGhlIEZPUiBj b21tYW5kLiAqLworICAgIGludCBpLCBmeCwgZnksIGZ6OyAgICAgICAgICAgICAgICAgIC8qIGxv b3AgdmFyaWFibGVzICovCisgICAgY2hhciAqYXAsICpkaTsgICAgICAgICAgICAgICAgICAgICAg LyogbWFjcm8gYXJndW1lbnQgcG9pbnRlciAqLworICAgIGludCBwcCA9IDA7ICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIFBhcmVuIGxldmVsICovCisgICAgaW50IG11c3RxdW90ZSA9IDA7CisK KyAgICBmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisgICAgICAgIGlmICgoeSA9IGNtZmxkKCJW YXJpYWJsZSBuYW1lIiwiIiwmcyxOVUxMKSkgPCAwKSB7CisgICAgICAgICAgICBpZiAoeSA9PSAt MykgeworICAgICAgICAgICAgICAgIHByaW50ZigiP1ZhcmlhYmxlIG5hbWUgcmVxdWlyZWRcbiIp OworICAgICAgICAgICAgICAgIHJldHVybigtOSk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAg ICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICB9CisgICAgICAgIGlmIChzdHJjbXAocywiKCIp KQorICAgICAgICAgIGJyZWFrOworICAgICAgICBwcCsrOworICAgIH0KKyNpZmRlZiBDT01NRU5U CisgICAgaWYgKCh5ID0gcGFyc2V2YXIocywmeCwmeikpIDwgMCkgICAgLyogQ2hlY2sgdmFyaWFi bGUuICovCisgICAgICByZXR1cm4oeSk7CisjZWxzZQorICAgIGlmICgqcyA9PSBDTURRKSAgICAg ICAgICAgICAgICAgICAgIC8qIElmIGxvb3AgdmFyaWFibGUgc3RhcnRzIHdpdGggKi8KKyAgICAg IG11c3RxdW90ZSsrOyAgICAgICAgICAgICAgICAgICAgICAvKiBiYWNrc2xhc2gsIG11c3RxdW90 ZSBpcyA+IDAuICovCisjZW5kaWYgLyogQ09NTUVOVCAqLworCisgICAgbHAgPSBsaW5lOyAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogQnVpbGQgYSBjb3B5IG9mIHRoZSBjb21tYW5kICovCisg ICAgY2tzdHJuY3B5KGxwLCJfZm9yeCAiLExJTkJVRlNJWik7CisgICAgbHAgKz0gKGludClzdHJs ZW4obGluZSk7ICAgICAgICAgICAgLyogIl9mb3IiIG1hY3JvLiAqLworICAgIGFwID0gbHA7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNhdmUgcG9pbnRlciB0byBtYWNybyBhcmdzLiAq LworCisgICAgaWYgKCpzID09IENNRFEpIHMrKzsgICAgICAgICAgICAgICAgLyogU2tpcCBwYXN0 IGJhY2tzbGFzaCBpZiBhbnkuICovCisgICAgd2hpbGUgKCgqbHArKyA9ICpzKyspKSA7ICAgICAg ICAgICAgLyogY29weSBpdCAqLworICAgIGxwLS07ICpscCsrID0gU1A7ICAgICAgICAgICAgICAg ICAgIC8qIGFkZCBhIHNwYWNlICovCisKKyAgICBpZiAoKHkgPSBjbW51bSgiaW5pdGlhbCB2YWx1 ZSIsIiIsMTAsJmZ4LHh4c3RyaW5nKSkgPCAwKSB7CisgICAgICAgIGlmICh5ID09IC0zKSByZXR1 cm4oLTIpOworICAgICAgICBlbHNlIHJldHVybih5KTsKKyAgICB9CisgICAgZGVidWcoRjEwMSwi ZG9mb3IgZngiLCIiLGZ4KTsKKyAgICBzID0gYXRtYnVmOyAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBDb3B5IHRoZSBhdG9tIGJ1ZmZlciAqLworCisgICAgaWYgKChpbnQpc3RybGVuKHMpIDwg MSkgZ290byBiYWRmb3I7CisvKgorICBJbiBlZGl0IDE5Miwgd2UgY2hhbmdlIHRoZSBsb29wIHZh cmlhYmxlcyB0byBiZSBldmFsdWF0ZWQgYXQgbG9vcCBlbnRyeSwKKyAgbm90IGVhY2ggdGltZSB0 aHJvdWdoIHRoZSBsb29wLiAgVGhpcyB3YXMgcmVxdWlyZWQgaW4gb3JkZXIgdG8gYWxsb3cKKyAg XHYoYXJnYykgdG8gYmUgdXNlZCBhcyBhIGxvb3AgdmFyaWFibGUsIG9yIGluIGEgbG9vcC12YXJp YWJsZSBleHByZXNzaW9uLgorICBUaHVzLCB3ZSBjYW4ndCBoYXZlIEZPUiBsb29wcyB0aGF0IG1v ZGlmeSB0aGVpciBvd24gZXhpdCBjb25kaXRpb25zIGJ5CisgIGNoYW5naW5nIHRoZSBmaW5hbCB2 YWx1ZSBvciB0aGUgaW5jcmVtZW50LiAgVGhlIHByb2JsZW0gd2l0aCBcdihhcmdjKSB3YXMKKyAg dGhhdCBpdCBpcyBvbiB0aGUgbWFjcm8gc3RhY2s7IGFmdGVyIGVudHJ5IGludG8gdGhlIF9mb3J4 IG1hY3JvLCBpdCBpcyBhdAorICB0aGUgd3JvbmcgcGxhY2UuCisqLworICAgIHNwcmludGYodG1w YnVmLCIlZCIsZngpOyAgICAgICAgICAgIC8qIChTQUZFKSBTdWJzdGl0dXRlIGFjdHVhbCB2YWx1 ZSAqLworICAgIHMgPSB0bXBidWY7CisgICAgd2hpbGUgKCgqbHArKyA9ICpzKyspKSA7ICAgICAg ICAgICAgLyogKHdoYXQgdGhleSBhY3R1YWxseSB0eXBlZCkgKi8KKyAgICBscC0tOyAqbHArKyA9 IFNQOworI2lmZGVmIERFQlVHCisgICAgKmxwID0gTlVMOworICAgIGRlYnVnKEYxMTAsIkZPUiBB IixsaW5lLDApOworI2VuZGlmIC8qIERFQlVHICovCisKKyAgICBpZiAoKHkgPSBjbW51bSgiZmlu YWwgdmFsdWUiLCIiLDEwLCZmeSx4eHN0cmluZykpIDwgMCkgeworICAgICAgICBpZiAoeSA9PSAt MykgcmV0dXJuKC0yKTsKKyAgICAgICAgZWxzZSByZXR1cm4oeSk7CisgICAgfQorICAgIGRlYnVn KEYxMDEsImRvZm9yIGZ5IiwiIixmeSk7CisgICAgcyA9IGF0bWJ1ZjsgICAgICAgICAgICAgICAg ICAgICAgICAgLyogU2FtZSBkZWFsICovCisgICAgaWYgKChpbnQpc3RybGVuKHMpIDwgMSkKKyAg ICAgIGdvdG8gYmFkZm9yOworCisgICAgc3ByaW50Zih0bXBidWYsIiVkIixmeSk7ICAgICAgICAg ICAgLyogU0FGRSAqLworICAgIHMgPSB0bXBidWY7CisgICAgd2hpbGUgKCgqbHArKyA9ICpzKysp KSA7CisgICAgbHAtLTsKKyAgICAqbHArKyA9IFNQOworI2lmZGVmIERFQlVHCisgICAgKmxwID0g TlVMOworICAgIGRlYnVnKEYxMTAsIkZPUiBCIixsaW5lLDApOworI2VuZGlmIC8qIERFQlVHICov CisKKyAgICB4X2lmbnVtID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBJbmNyZW1lbnQg b3IgcGFyZW50aGVzaXMgKi8KKyAgICBkaSA9IChmeCA8IGZ5KSA/ICIxIiA6ICItMSI7ICAgICAg ICAvKiBEZWZhdWx0IGluY3JlbWVudCAqLworICAgIGlmICgoeSA9IGNtbnVtKCJpbmNyZW1lbnQi LGRpLDEwLCZmeix4eHN0cmluZykpIDwgMCkgeworICAgICAgICBkZWJ1ZyhGMTExLCJkb2ZvciBp bmNyZW1lbnQiLGF0bWJ1Zix5KTsKKyAgICAgICAgeF9pZm51bSA9IDA7CisgICAgICAgIGlmICh5 ID09IC0zKSB7ICAgICAgICAgICAgICAgICAgLyogUHJlbWF0dXJlIHRlcm1pbmF0aW9uICovCisg ICAgICAgICAgICByZXR1cm4oLTIpOworICAgICAgICB9IGVsc2UgaWYgKHkgPT0gLTIpIHsgICAg ICAgICAgIC8qIE1heWJlIGNsb3NpbmcgcGFyZW4gKi8KKyAgICAgICAgICAgIGlmICghc3RyY21w KGF0bWJ1ZiwiKSIpKSB7CisgICAgICAgICAgICAgICAgcHAtLTsgICAgICAgICAgICAgICAgICAg LyogQ291bnQgaXQgKi8KKyAgICAgICAgICAgICAgICBzID0gZGk7ICAgICAgICAgICAgICAgICAv KiBzdXBwbHkgZGVmYXVsdCBpbnRlcnZhbCAqLworICAgICAgICAgICAgICAgIGZ6ID0gYXRvaShz KTsKKyAgICAgICAgICAgIH0gZWxzZSAgICAgICAgICAgICAgICAgICAgICAvKiBOb3QgY2xvc2lu ZyBwYXJlbiwgaW52YWxpZCAqLworICAgICAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgIH0g ZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgLyogT3RoZXIgZXJyb3IgKi8KKyAgICAgICAg ICByZXR1cm4oeSk7CisgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog TnVtYmVyICovCisgICAgICAgIHhfaWZudW0gPSAwOworICAgICAgICBkZWJ1ZyhGMTAxLCJkb2Zv ciBmeiIsIiIsZnopOworICAgICAgICBzID0gYXRtYnVmOyAgICAgICAgICAgICAgICAgICAgIC8q IFVzZSBpdCAqLworICAgIH0KKyAgICBpZiAoKGludClzdHJsZW4ocykgPCAxKQorICAgICAgZ290 byBiYWRmb3I7CisKKyAgICBzcHJpbnRmKHRtcGJ1ZiwiJWQiLGZ6KTsgICAgICAgICAgICAvKiAo U0FGRSkgU2FtZSBkZWFsICovCisgICAgcyA9IHRtcGJ1ZjsKKyAgICB3aGlsZSAoKCpscCsrID0g KnMrKykpIDsKKyAgICBscC0tOyAqbHArKyA9IFNQOworCisjaWZkZWYgREVCVUcKKyAgICAqbHAg PSBOVUw7CisgICAgZGVidWcoRjExMCwiRk9SIEMiLGxpbmUsMCk7CisjZW5kaWYgLyogREVCVUcg Ki8KKworICAgIC8qIEluc2VydCB0aGUgYXBwcm9wcmlhdGUgY29tcGFyaXNvbiBvcGVyYXRvciAq LworICAgIGlmIChmeiA8IDApCisgICAgICAqbHArKyA9ICc8JzsKKyAgICBlbHNlCisgICAgICAq bHArKyA9ICc+JzsKKyAgICAqbHArKyA9IFNQOworCisjaWZkZWYgREVCVUcKKyAgICAqbHAgPSBO VUw7CisgICAgZGVidWcoRjExMCwiRk9SIEQiLGxpbmUsMCk7CisjZW5kaWYgLyogREVCVUcgKi8K KworICAgIGlmIChwcCA+IDApIHsgICAgICAgICAgICAgICAgICAgICAgIC8qIElmIG9wZW4gcGFy ZW4gZ2l2ZW4gcGFyc2UgY2xvc2luZyAqLworICAgICAgICBpZiAoKHkgPSBjbWZsZCgiQ2xvc2lu ZyBwYXJlbnRoZXNpcyIsIiIsJnMsTlVMTCkpIDwgMCkKKyAgICAgICAgICByZXR1cm4oeSk7Cisg ICAgICAgIGlmIChzdHJjbXAoYXRtYnVmLCIpIikpIHsKKyAgICAgICAgICAgIHByaW50ZigiP0Ns b3NpbmcgcGFyZW50aGVzaXMgcmVxdWlyZWRcbiIpOworICAgICAgICAgICAgcmV0dXJuKC05KTsK KyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoKHkgPSBjbXR4dCgiQ29tbWFuZCB0byBleGVjdXRl IiwiIiwmcyxOVUxMKSkgPCAwKSByZXR1cm4oeSk7CisgICAgaWYgKCh5ID0gKGludClzdHJsZW4o cykpIDwgMSkgcmV0dXJuKC0yKTsKKyAgICBpZiAoc1swXSAhPSAneycgJiYgc1t5LTFdICE9ICd9 JykgeyAvKiBTdXBwbHkgYnJhY2VzIGlmIG1pc3NpbmcgKi8KKyAgICAgICAgY2ttYWttc2codG1w YnVmLFRNUEJVRlNJWiwieyAiLHMsIiB9IixOVUxMKTsKKyAgICAgICAgcyA9IHRtcGJ1ZjsKKyAg ICB9CisgICAgaWYgKGxpdGNtZCgmcywmbHAsKExJTkJVRlNJWiAtIChscCAtIChjaGFyICopbGlu ZSkgLSAyKSkgPCAwKSB7CisgICAgICAgIHByaW50ZigiP1VuYmFsYW5jZWQgYnJhY2VzXG4iKTsK KyAgICAgICAgcmV0dXJuKDApOworICAgIH0KKyNpZmRlZiBERUJVRworICAgICpscCA9IE5VTDsK KyAgICBkZWJ1ZyhGMTEwLCJGT1IgRSIsbGluZSwwKTsKKyNlbmRpZiAvKiBERUJVRyAqLworCisj aWZkZWYgQ09NTUVOVAorLyogVG9vIHN0cmljdCAqLworICAgIGlmIChmeiA9PSAwKSB7CisgICAg ICAgIHByaW50ZigiP1plcm8gaW5jcmVtZW50IG5vdCBhbGxvd2VkXG4iKTsKKyAgICAgICAgcmV0 dXJuKDApOworICAgIH0KKyNlbmRpZiAvKiBDT01NRU5UICovCisvKgorICBJbiB2ZXJzaW9uIDgu MCB3ZSBkZWNpZGVkIHRvIGFsbG93IG1hY3JvIG5hbWVzIGFueXBsYWNlIGEgbnVtZXJpYy12YWxl ZAorICB2YXJpYWJsZSBjb3VsZCBhcHBlYXIuICBCdXQgdGhpcyBjYXVzZWQgdHJvdWJsZSBmb3Ig dGhlIEZPUiBsb29wcyBiZWNhdXNlCisgIHRoZSBxdW90aW5nIGluIGZvcl9kZWZbXSBhc3N1bWVk IGEgXCVpLXN0eWxlIGxvb3AgdmFyaWFibGUuICBXZSBhY2NvdW50CisgIGZvciB0aGlzIGhlcmUg aW4gdGhlIGlmIChtdXN0cXVvdGUpLi4uZWxzZSBsb2dpYyBieSBpbnZva2luZyBzZXBhcmF0ZQor ICBGT1IgbWFjcm8gZGVmaW5pdGlvbnMgaW4gdGhlIHR3byBjYXNlcy4KKyovCisgICAgaWYgKG11 c3RxdW90ZSkgeyAgICAgICAgICAgICAgICAgICAgLyogXCVpLXN0eWxlIGxvb3AgdmFyaWFibGUg Ki8KKyAgICAgICAgeCA9IG1sb29rKG1hY3RhYiwiX2ZvcngiLG5tYWMpOyAvKiBMb29rIHVwIEZP UiBtYWNybyBkZWZpbml0aW9uICovCisgICAgICAgIGlmICh4IDwgMCkgeyAgICAgICAgICAgICAg ICAgICAgLyogTm90IHRoZXJlPyAqLworICAgICAgICAgICAgYWRkbW1hYygiX2ZvcngiLGZvcl9k ZWYpOyAgIC8qIFB1dCBpdCBiYWNrLiAqLworICAgICAgICAgICAgaWYgKCh4ID0gbWxvb2sobWFj dGFiLCJfZm9yeCIsbm1hYykpIDwgMCkgeyAvKiBMb29rIGl0IHVwIGFnYWluLiAqLworICAgICAg ICAgICAgICAgIHByaW50ZigiP0ZPUiBtYWNybyBkZWZpbml0aW9uIGdvbmUhXG4iKTsKKyAgICAg ICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOworICAgICAgICAgICAgfQorICAgICAgICB9 CisgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTG9vcCB2YXJpYWJs ZSBpcyBhIG1hY3JvICovCisgICAgICAgIHggPSBtbG9vayhtYWN0YWIsIl9mb3J6IixubWFjKTsK KyAgICAgICAgaWYgKHggPCAwKSB7CisgICAgICAgICAgICBhZGRtbWFjKCJfZm9yeiIsZm96X2Rl Zik7CisgICAgICAgICAgICBpZiAoKHggPSBtbG9vayhtYWN0YWIsIl9mb3J6IixubWFjKSkgPCAw KSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCI/Rk9SIG1hY3JvIGRlZmluaXRpb24gZ29uZSFc biIpOworICAgICAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7CisgICAgICAgICAgICB9 CisgICAgICAgIH0KKyAgICB9CisgICAgZGVidWcoRjAxMCwiRk9SIGNvbW1hbmQiLGxpbmUsMCk7 ICAgLyogRXhlY3V0ZSB0aGUgRk9SIG1hY3JvLiAqLworICAgIHJldHVybihzdWNjZXNzID0gZG9k byh4LGFwLGNtZHN0a1tjbWRsdmxdLmNjZmxncyB8IENGX0lNQUMpKTsKKworYmFkZm9yOgorICAg IHByaW50ZigiP0luY29tcGxldGUgRk9SIGNvbW1hbmRcbiIpOworICAgIHJldHVybigtMik7Cit9 CisjZW5kaWYgLyogTk9TUEwgKi8KKworCisjaWZuZGVmIE5PU1BMCisKKy8qICBUIE8gRCAyIFMg RSBDICAtLSAgQ29udmVydCB0aW1lIG9mIGRheSBhcyBoaDptbTpzcyB0byBzZWNzIHNpbmNlIG1p ZG5pdGUgKi8KKy8qCisgIENhbGwgd2l0aCBhIHN0cmluZyBoaDptbSBvciBoaDptbTpzcy4KKyAg UmV0dXJucyBhIDAgdG8gODY0MDAgb24gc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBudW1iZXIgb24g ZmFpbHVyZS4KKyovCitsb25nCit0b2Qyc2VjKHQpIGNoYXIgKiB0OyB7CisgICAgbG9uZyB0MjsK KyAgICBsb25nIGhoID0gMEwsIG1tID0gMEwsIHNzID0gMEw7CisKKyAgICBpZiAoIXQpIHQgPSAi IjsKKyAgICBpZiAoISp0KQorICAgICAgcmV0dXJuKC0zTCk7CisgICAgZGVidWcoRjExMCwidG9k MnNlYyIsdCwwKTsKKworICAgIGlmIChpc2RpZ2l0KCp0KSkgICAgICAgICAgICAgICAgICAgIC8q IEdldCBob3VycyBmcm9tIGFyZ3VtZW50ICovCisgICAgICBoaCA9ICp0KysgLSAnMCc7CisgICAg ZWxzZQorICAgICAgcmV0dXJuKC0xTCk7CisgICAgaWYgKGlzZGlnaXQoKnQpKQorICAgICAgaGgg PSBoaCAqIDEwICsgKnQrKyAtICcwJzsKKyNpZmRlZiBDT01NRU5UCisgICAgaWYgKGhoID4gMjRM KQorICAgICAgcmV0dXJuKC0xTCk7CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgIGlmICgqdCA9 PSAnOicpCisgICAgICB0Kys7CisgICAgZWxzZSBpZiAoISp0KQorICAgICAgZ290byB4dG9kMnNl YzsKKyAgICBlbHNlCisgICAgICByZXR1cm4oLTFMKTsKKworICAgIGlmIChpc2RpZ2l0KCp0KSkg ICAgICAgICAgICAgICAgICAgIC8qIE1pbnV0ZXMgKi8KKyAgICAgIG1tID0gKnQrKyAtICcwJzsK KyAgICBlbHNlCisgICAgICByZXR1cm4oLTFMKTsKKyAgICBpZiAoaXNkaWdpdCgqdCkpCisgICAg ICBtbSA9IG1tICogMTAgKyAqdCsrIC0gJzAnOworICAgIGlmIChtbSA+IDYwTCkKKyAgICAgIHJl dHVybigtMUwpOworICAgIGlmICgqdCA9PSAnOicpCisgICAgICB0Kys7CisgICAgZWxzZSBpZiAo ISp0KQorICAgICAgZ290byB4dG9kMnNlYzsKKyAgICBlbHNlCisgICAgICByZXR1cm4oLTFMKTsK KworICAgIGlmIChpc2RpZ2l0KCp0KSkgICAgICAgICAgICAgICAgICAgIC8qIFNlY29uZHMgKi8K KyAgICAgIHNzID0gKnQrKyAtICcwJzsKKyAgICBlbHNlCisgICAgICByZXR1cm4oLTFMKTsKKyAg ICBpZiAoaXNkaWdpdCgqdCkpCisgICAgICBzcyA9IHNzICogMTAgKyAqdCsrIC0gJzAnOworICAg IGlmIChzcyA+IDYwTCkKKyAgICAgIHJldHVybigtMUwpOworCisgICAgaWYgKCp0ID4gMzIpICAg ICAgICAgICAgICAgICAgICAgICAgLyogTm8gdHJhaWxpbmcganVuayBhbGxvd2VkICovCisgICAg ICByZXR1cm4oLTFMKTsKKworICB4dG9kMnNlYzoKKworICAgIHQyID0gaGggKiAzNjAwTCArIG1t ICogNjBMICsgc3M7ICAgIC8qIFNlY29uZHMgc2luY2UgbWlkbmlnaHQgZnJvbSBhcmcgKi8KKyAg ICBkZWJ1ZyhGMTAxLCJ0b2Qyc2VjIHQyIiwiIix0Mik7CisKKyAgICByZXR1cm4odDIpOworfQor CitpbnQgd2FpdGludGVydmFsID0gMTsKKworI2lmZGVmIE9MRFdBSVQKKyN1bmRlZiBPTERXQUlU CisjZW5kaWYgLyogT0xEV0FJVCAqLworCitpbnQga2JjaGFyID0gTlVMOworCitpbnQKK2RvcGF1 cyhjeCkgaW50IGN4OyB7CisgICAgbG9uZyB6ejsKKyAgICBleHRlcm4gaW50IHNsZWVwY2FuOwor CisjaWZkZWYgT0xEV0FJVAorICAgIHp6ID0gLTFMOworICAgIHhfaWZudW0gPSAxOyAgICAgICAg ICAgICAgICAgICAgICAgIC8qIFR1cm4gb2ZmIGludGVybmFsIGNvbXBsYWludHMgKi8KKyAgICBp ZiAoY3ggPT0gWFhXQUkpCisgICAgICB5ID0gY21udW0oInNlY29uZHMgdG8gd2FpdCwgb3IgdGlt ZSBvZiBkYXkgaGg6bW06c3MiLCIxIiwxMCwmeCx4eHN0cmluZyk7CisgICAgZWxzZSBpZiAoY3gg PT0gWFhQQVUpCisgICAgICB5ID0gY21udW0oInNlY29uZHMgdG8gcGF1c2UsIG9yIHRpbWUgb2Yg ZGF5IGhoOm1tOnNzIiwKKyAgICAgICAgICAgICAgICAiMSIsMTAsJngseHhzdHJpbmcpOworICAg IGVsc2UKKyAgICAgIHkgPSBjbW51bSgibWlsbGlzZWNvbmRzIHRvIHNsZWVwLCBvciB0aW1lIG9m IGRheSBoaDptbTpzcyIsCisgICAgICAgICAgICAgICAgIjEwMCIsMTAsJngseHhzdHJpbmcpOwor ICAgIHhfaWZudW0gPSAwOworICAgIGlmICh5IDwgMCkgeworICAgICAgICBpZiAoeSA9PSAtMikg eyAgICAgICAgICAgICAgICAgIC8qIEludmFsaWQgbnVtYmVyIG9yIGV4cHJlc3Npb24gKi8KKyAg ICAgICAgICAgIGNoYXIgKnAgPSB0bXBidWY7ICAgICAgICAgICAvKiBSZXRyaWV2ZSBzdHJpbmcg ZnJvbSBhdG1idWYgKi8KKyAgICAgICAgICAgIGludCBuID0gVE1QQlVGU0laOworICAgICAgICAg ICAgKnAgPSBOVUw7CisgICAgICAgICAgICB6enN0cmluZyhhdG1idWYsJnAsJm4pOyAgICAgLyog RXZhbHVhdGUgaW4gY2FzZSBpdCdzIGEgdmFyaWFibGUgKi8KKyAgICAgICAgICAgIHp6ID0gdG9k MnNlYyh0bXBidWYpOyAgICAgICAvKiBDb252ZXJ0IHRvIHNlY3Mgc2luY2UgbWlkbmlnaHQgKi8K KyAgICAgICAgICAgIGlmICh6eiA8IDBMKSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCI/TnVt YmVyLCBleHByZXNzaW9uLCBvciB0aW1lIG9mIGRheSByZXF1aXJlZFxuIik7CisgICAgICAgICAg ICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg Y2hhciBub3dbMzJdOyAgICAgICAgICAgLyogQ3VycmVudCB0aW1lICovCisgICAgICAgICAgICAg ICAgY2hhciAqcDsKKyAgICAgICAgICAgICAgICBsb25nIHRub3c7CisgICAgICAgICAgICAgICAg cCA9IG5vdzsKKyAgICAgICAgICAgICAgICB6dGltZSgmcCk7CisgICAgICAgICAgICAgICAgdG5v dyA9IGF0b2wocCsxMSkgKiAzNjAwTCArIGF0b2wocCsxNCkgKiA2MEwgKyBhdG9sKHArMTcpOwor ICAgICAgICAgICAgICAgIGlmICh6eiA8IHRub3cpICAgICAgICAgIC8qIFVzZXIncyB0aW1lIGJl Zm9yZSBub3cgKi8KKyAgICAgICAgICAgICAgICAgIHp6ICs9IDg2NDAwTDsgICAgICAgICAvKiBT byBtYWtlIGl0IHRvbW9ycm93ICovCisgICAgICAgICAgICAgICAgenogLT0gdG5vdzsgICAgICAg ICAgICAgLyogU2Vjb25kcyBmcm9tIG5vdy4gKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBl bHNlCisgICAgICAgICAgcmV0dXJuKHkpOworICAgIH0KKyAgICBpZiAoeCA8IDApIHggPSAwOwor ICAgIHN3aXRjaCAoY3gpIHsKKyAgICAgIGNhc2UgWFhQQVU6ICAgICAgICAgICAgICAgICAgICAg ICAvKiBQQVVTRSAqLworICAgICAgY2FzZSBYWE1TTDogICAgICAgICAgICAgICAgICAgICAgIC8q IE1TTEVFUCAqLworICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsKKyAg ICAgICAgYnJlYWs7CisgICAgICBjYXNlIFhYV0FJOiAgICAgICAgICAgICAgICAgICAgICAgLyog V0FJVCAqLworICAgICAgICB6ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1vZGVt IHNpZ25hbCBtYXNrICovCisgICAgICAgIHdoaWxlICgxKSB7ICAgICAgICAgICAgICAgICAgICAg LyogUmVhZCB6ZXJvIG9yIG1vcmUgc2lnbmFsIG5hbWVzICovCisgICAgICAgICAgICB5ID0gY21r ZXkobXN0YWIsbm1zLCJtb2RlbSBzaWduYWwiLCIiLHh4c3RyaW5nKTsKKyAgICAgICAgICAgIGlm ICh5ID09IC0zKSBicmVhazsgICAgICAgICAvKiAtMyBtZWFucyB0aGV5IHR5cGVkIENSICovCisg ICAgICAgICAgICBpZiAoeSA8IDApIHJldHVybih5KTsgICAgICAgLyogT3RoZXIgbmVnYXRpdmVz IGFyZSBlcnJvcnMgKi8KKyAgICAgICAgICAgIHogfD0geTsgICAgICAgICAgICAgICAgICAgICAv KiBPUiB0aGUgYml0IGludG8gdGhlIHNpZ25hbCBtYXNrICovCisgICAgICAgIH0KKyAgICAgICAg aWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeSk7CisgICAgICAgIGJyZWFrOworCisgICAg ICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2hvdWxkbid0IGhhcHBlbiAq LworICAgICAgICByZXR1cm4oLTIpOworICAgIH0KKworLyogQ29tbWFuZCBpcyBlbnRlcmVkLCBu b3cgZG8gaXQuICovCisKKyAgICBpZiAoenogPiAtMUwpIHsgICAgICAgICAgICAgICAgICAgICAv KiBUaW1lIG9mIGRheSBnaXZlbj8gKi8KKyAgICAgICAgeCA9IHp6OworICAgICAgICBpZiAoenog IT0gKGxvbmcpIHgpIHsKKyAgICAgICAgICAgIHByaW50ZigKKyJTb3JyeSwgYXJpdGhtZXRpYyBv dmVyZmxvdyAtIGhoOm1tOnNzIG5vdCB1c2FibGUgb24gdGhpcyBwbGF0Zm9ybS5cbiIKKyAgICAg ICAgICAgICAgICAgICApOworICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgfQorICAg IH0KKyAgICBpZiAoY3ggPT0gWFhNU0wpIHsgICAgICAgICAgICAgICAgICAvKiBNaWxsaXNlY29u ZCBzbGVlcCAqLworICAgICAgICBtc2xlZXAoenogPCAwID8geCA6IHggKiAxMDAwKTsKKyAgICAg ICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKyAgICB9CisgICAgaWYgKGN4ID09IFhYUEFVICYmICFz bGVlcGNhbikgeyAgICAgLyogU0xFRVAgQ0FOQ0VMTEFUSU9OIGlzIE9GRiAqLworICAgICAgICBz bGVlcCh4KTsKKyAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKyAgICB9CisKKyAgICAvKiBX QUlULCBvciBlbHNlIFNMRUVQIHdpdGggY2FuY2VsbGF0aW9uIGFsbG93ZWQuLi4gKi8KKworICAg IGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNsZWVwIGxvb3AgKi8KKyAg ICAgICAgaW50IG1kbXNpZzsKKyAgICAgICAgaWYgKHNsZWVwY2FuKSB7ICAgICAgICAgICAgICAg ICAvKiBLZXlib2FyZCBjYW5jZWxsYXRpb24gYWxsb3dlZD8gKi8KKyAgICAgICAgICAgIGlmICh5 ID0gY29uY2hrKCkpIHsgICAgICAgICAvKiBEaWQgdGhleSB0eXBlIHNvbWV0aGluZz8gKi8KKyNp ZmRlZiBDT01NRU5UCisgICAgICAgICAgICAgICAgd2hpbGUgKHktLSkgY29uaW5jKDApOyAgLyog WWVzLCBnb2JibGUgaXQgYWxsIHVwICovCisjZWxzZQorICAgICAgICAgICAgICAgIC8qIFRoZXJl IGlzIGEgZGViYXRlIG92ZXIgd2hldGhlciBQQVVTRSBzaG91bGQgYWJzb3JiICAgICovCisgICAg ICAgICAgICAgICAgLyogaXRzIGNhbmNlbGxpbmcgY2hhcmFjdGVyKHMpLiAgVGhlcmUgYXJlIHNl dmVyYWwgICAgICAgKi8KKyAgICAgICAgICAgICAgICAvKiByZWFzb25zIHdoeSBpdCBzaG91bGQg Z29iYmxlIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXI6ICAqLworICAgICAgICAgICAgICAgIC8qICgx KSBNUy1ET1MgS2VybWl0IGRvZXMgaXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisg ICAgICAgICAgICAgICAgLyogKDIpIGlmIG5vdCwgc3Vic2VxdWVudCBQQVVTRSBjb21tYW5kcyB3 aWxsIHRlcm1pbmF0ZSAgKi8KKyAgICAgICAgICAgICAgICAvKiAgICAgaW1tZWRpYXRlbHkgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIC8q ICgzKSBpZiBub3QsIHN1YnNlcXVlbnQgQVNLIGNvbW1hbmRzIHdpbGwgdXNlIGl0IGFzICAgICov CisgICAgICAgICAgICAgICAgLyogICAgIHZhbGlkIGlucHV0LiAgSWYgXDEzLCB0aGVuIGl0IHdp bGwgZ2V0IG5vIGlucHV0ICAgKi8KKyAgICAgICAgICAgICAgICAvKiAoNCkgaWYgbm90LCB0aGVu IHRoZSBjaGFyYWN0ZXIgYXBwZWFycyBvbiB0aGUgY29tbWFuZCAqLworICAgICAgICAgICAgICAg IC8qICAgICBsaW5lIGFmdGVyIGFsbCBlbmNsb3NpbmcgbWFjcm9zIGFyZSBjb21wbGV0ZS4gICAg ICovCisgICAgICAgICAgICAgICAga2JjaGFyID0gY29uaW5jKDApOyAgICAgLyogR29iYmxlIG9u ZSB1cCAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAgICAgICAgICBicmVhazsgICAg ICAgICAgICAgICAgICAvKiBBbmQgcXVpdCBQQVVTaW5nIG9yIFdBSVRpbmcgKi8KKyAgICAgICAg ICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoY3ggPT0gWFhXQUkpIHsgICAgICAgICAgICAg IC8qIFdBSVQgKHogPT0gbW9kZW0gc2lnbmFsIG1hc2spICovCisgICAgICAgICAgICBkZWJ1ZyhG MTAxLCJXQUlUIHgiLCIiLHgpOworICAgICAgICAgICAgaWYgKHogPiAwKSB7ICAgICAgICAgICAg ICAgIC8qIExvb2tpbmcgZm9yIGFueSBtb2RlbSBzaWduYWxzPyAqLworICAgICAgICAgICAgICAg IG1kbXNpZyA9IHR0Z21kbSgpOyAgICAgIC8qIFllcywgZ2V0IHRoZW0gKi8KKyAgICAgICAgICAg ICAgICBpZiAobWRtc2lnIDwgMCkgICAgICAgICAvKiBGYWlsZWQgKi8KKyAgICAgICAgICAgICAg ICAgIHJldHVybihzdWNjZXNzID0gMCk7CisgICAgICAgICAgICAgICAgaWYgKChtZG1zaWcgJiB6 KSA9PSB6KSAgLyogR290IHdoYXQgd2Ugd2FudGVkPyAqLworICAgICAgICAgICAgICAgICAgcmV0 dXJuKHN1Y2Nlc3MgPSAxKTsgIC8qIFN1Y2NlZWQgKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIGlmICh4ID09IDApICAgICAgICAgICAgICAgICAvKiBXQUlUIDAgYW5kIGRpZG4ndCBnZXQg b3VyIHNpZ25hbHMgKi8KKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg c2xlZXAoMSk7ICAgICAgICAgICAgICAgICAgICAgICAvKiBObyBpbnRlcnJ1cHQsIHNsZWVwIG9u ZSBzZWNvbmQgKi8KKyAgICB9IHdoaWxlICgtLXggPiAwKTsKKworICAgIGlmIChjeCA9PSBYWFdB SSkgICAgICAgICAgICAgICAgICAgIC8qIElmIFdBSVQgYW5kIGxvb3AgZXhoYXVzdGVkICovCisg ICAgICBzdWNjZXNzID0gKHogPT0gMCk7ICAgICAgICAgICAgICAgLyogRmFpbC4gKi8KKyAgICBl bHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgKi8KKyAgICAgIHN1Y2Nlc3Mg PSAoeCA9PSAwKTsgICAgICAgICAgICAgICAvKiBTZXQgU1VDQ0VTUy9GQUlMVVJFIGZvciBQQVVT RS4gKi8KKyAgICByZXR1cm4oc3VjY2Vzcyk7CisKKyNlbHNlICAvKiBOZXcgY29kZSB1c2VzIGNo YWluZWQgRkRCcyBhbmQgYWxsb3dzIEZJTEUgd2FpdHMuLi4gKi8KKworICAgIGNoYXIgKiBtID0g IiI7ICAgICAgICAgICAgICAgICAgICAgIC8qIEhlbHAgbWVzc2FnZSAqLworICAgIHN0cnVjdCBG REIgbnUsIGZsOyAgICAgICAgICAgICAgICAgIC8qIFBhcnNlIGZ1bmN0aW9uIGRlc2NyaXB0b3Ig YmxvY2tzICovCisgICAgaW50IGZpbGV3YWl0ID0gMDsKKyAgICBpbnQgbWRtc2lnID0gMCwgZnMg PSAwOworICAgIGNoYXIgZmlsZWRhdGVbMzJdOworCisgICAga2JjaGFyID0gMDsKKworICAgIHN3 aXRjaCAoY3gpIHsKKyAgICAgIGNhc2UgWFhXQUk6IG0gPSAic2Vjb25kcyB0byB3YWl0LCBvciB0 aW1lIG9mIGRheSBoaDptbTpzcyI7IGJyZWFrOworICAgICAgY2FzZSBYWFBBVTogbSA9ICJzZWNv bmRzIHRvIHBhdXNlLCBvciB0aW1lIG9mIGRheSBoaDptbTpzcyI7IGJyZWFrOworICAgICAgY2Fz ZSBYWE1TTDogbSA9ICJtaWxsaXNlY29uZHMgdG8gc2xlZXAsIG9yIHRpbWUgb2YgZGF5IGhoOm1t OnNzIjsgYnJlYWs7CisgICAgfQorICAgIHp6ID0gLTFMOworICAgIGNtZmRiaSgmbnUsCisgICAg ICAgICAgIF9DTU5VTSwgICAgICAgICAgICAgICAgICAgICAgLyogTnVtYmVyICovCisgICAgICAg ICAgIG0sICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSGVscCBtZXNzYWdlICovCisgICAg ICAgICAgIChjeCA9PSBYWE1TTCkgPyAiMTAwIiA6ICIxIiwgLyogRGVmYXVsdCAqLworICAgICAg ICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE4vQSAqLworICAgICAgICAgICAw LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE4vQSAqLworICAgICAgICAgICAwLCAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIE4vQSAqLworICAgICAgICAgICB4eHN0cmluZywgICAg ICAgICAgICAgICAgICAgIC8qIFByb2Nlc3NpbmcgZnVuY3Rpb24gKi8KKyAgICAgICAgICAgTlVM TCwgICAgICAgICAgICAgICAgICAgICAgICAvKiBOL0EgKi8KKyAgICAgICAgICAgJmZsICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBOZXh0ICovCisgICAgICAgICAgICk7CisgICAgY21mZGJp KCZmbCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogVGltZSBvZiBkYXkgKi8KKyAgICAgICAg ICAgX0NNRkxELCAgICAgICAgICAgICAgICAgICAgICAvKiBGaWVsZCAqLworICAgICAgICAgICAi IiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGhscG1zZyAqLworICAgICAgICAgICAiIiwg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRlZmF1bHQgKi8KKyAgICAgICAgICAgIiIsICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBzdHJpbmcgZGF0YSAqLworICAgICAgICAg ICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAxICov CisgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJp YyBkYXRhIDIgKi8KKyAgICAgICAgICAgeHhzdHJpbmcsICAgICAgICAgICAgICAgICAgICAvKiBw cm9jZXNzaW5nIGZ1bmMgKi8KKyAgICAgICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAg ICAvKiBOL0EgKi8KKyAgICAgICAgICAgTlVMTCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBO byBuZXh0ICovCisgICAgICAgICAgICk7CisgICAgeCA9IGNtZmRiKCZudSk7ICAgICAgICAgICAg ICAgICAgICAgLyogUGFyc2UgYSBudW1iZXIgb3IgYSBmaWVsZCAqLworICAgIGlmICh4IDwgMCkg eworICAgICAgICBpZiAoeCA9PSAtMykKKyAgICAgICAgICB4ID0gLTI7CisgICAgICAgIHJldHVy bih4KTsKKyAgICB9CisgICAgc3dpdGNoIChjbXJlc3VsdC5mY29kZSkgeworICAgICAgY2FzZSBf Q01OVU06ICAgICAgICAgICAgICAgICAgICAgIC8qIE51bWJlciAqLworICAgICAgICB4ID0gY21y ZXN1bHQubnJlc3VsdDsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIF9DTUZMRDogICAgICAg ICAgICAgICAgICAgICAgLyogRmllbGQgKi8KKyAgICAgICAgenogPSB0b2Qyc2VjKGNtcmVzdWx0 LnNyZXN1bHQpOyAvKiBDb252ZXJ0IHRvIHNlY3Mgc2luY2UgbWlkbmlnaHQgKi8KKyAgICAgICAg aWYgKHp6IDwgMEwpIHsKKyAgICAgICAgICAgIHByaW50ZigiP051bWJlciwgZXhwcmVzc2lvbiwg b3IgdGltZSBvZiBkYXkgcmVxdWlyZWRcbiIpOworICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAg ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNoYXIgbm93WzMyXTsgICAgICAgICAgICAgICAv KiBDdXJyZW50IHRpbWUgKi8KKyAgICAgICAgICAgIGNoYXIgKnA7CisgICAgICAgICAgICBsb25n IHRub3c7CisgICAgICAgICAgICBwID0gbm93OworICAgICAgICAgICAgenRpbWUoJnApOworICAg ICAgICAgICAgdG5vdyA9IGF0b2wocCsxMSkgKiAzNjAwTCArIGF0b2wocCsxNCkgKiA2MEwgKyBh dG9sKHArMTcpOworICAgICAgICAgICAgaWYgKHp6IDwgdG5vdykgICAgICAgICAgICAgIC8qIFVz ZXIncyB0aW1lIGJlZm9yZSBub3cgKi8KKyAgICAgICAgICAgICAgenogKz0gODY0MDBMOyAgICAg ICAgICAgICAvKiBTbyBtYWtlIGl0IHRvbW9ycm93ICovCisgICAgICAgICAgICB6eiAtPSB0bm93 OyAgICAgICAgIC8qIFNlY29uZHMgZnJvbSBub3cuICovCisgICAgICAgIH0KKyAgICB9CisgICAg ZGVidWcoRjEwMSwiUEFVU0UvV0FJVC9NU0xFRVAgenoiLCIiLHp6KTsKKyAgICBzd2l0Y2ggKGN4 KSB7CisgICAgICBjYXNlIFhYUEFVOiAgICAgICAgICAgICAgICAgICAgICAgLyogUEFVU0UgKi8K KyAgICAgIGNhc2UgWFhNU0w6ICAgICAgICAgICAgICAgICAgICAgICAvKiBNU0xFRVAgKi8KKyAg ICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeSk7CisgICAgICAgIGJyZWFrOwor ICAgICAgY2FzZSBYWFdBSTogICAgICAgICAgICAgICAgICAgICAgIC8qIFdBSVQgKi8KKyAgICAg ICAgeiA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBNb2RlbSBzaWduYWwgbWFzayAq LworICAgICAgICB5ID0gY21rZXkod2FpdHRhYixud2FpdHRhYiwiIiwiIix4eHN0cmluZyk7Cisg ICAgICAgIGlmICh5IDwgMCkgeworICAgICAgICAgICAgaWYgKHkgPT0gLTMpIHsKKyAgICAgICAg ICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApCisgICAgICAgICAgICAgICAgICByZXR1cm4o eSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAg ICAgICAgcmV0dXJuKHkpOworICAgICAgICB9CisgICAgICAgIGlmICh5ID09IFdBSVRfRklMKSB7 ICAgICAgICAgICAgLyogRklMRSAqLworICAgICAgICAgICAgaW50IHdpbGQgPSAwOworICAgICAg ICAgICAgaWYgKCh6ID0gY21rZXkod2Zzd2ksbndmc3dpLCJldmVudCIsIiIseHhzdHJpbmcpKSA8 IDApCisgICAgICAgICAgICAgIHJldHVybih6KTsKKyAgICAgICAgICAgIGZpbGV3YWl0ID0gejsK KyAgICAgICAgICAgIGlmIChmaWxld2FpdCA9PSBXRl9NT0QgfHwgZmlsZXdhaXQgPT0gV0ZfREVM KQorICAgICAgICAgICAgICB6ID0gY21pZmkoIkZpbGVuYW1lIiwiIiwmcywmd2lsZCx4eHN0cmlu Zyk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIHogPSBjbWZsZCgiRmlsZW5hbWUi LCIiLCZzLHh4c3RyaW5nKTsKKyAgICAgICAgICAgIGlmICh6IDwgMCkKKyAgICAgICAgICAgICAg cmV0dXJuKHopOworICAgICAgICAgICAgaWYgKHdpbGQgfHwgKChmaWxld2FpdCA9PSBXRl9DUkUp ICYmIGlzd2lsZChzKSkpIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIj9XaWxkY2FyZHMgbm90 IHZhbGlkIGhlcmVcbiIpOworICAgICAgICAgICAgICAgIHJldHVybigtOSk7CisgICAgICAgICAg ICB9CisgICAgICAgICAgICBja3N0cm5jcHkodG1wYnVmLHMsVE1QQlVGU0laKTsKKyAgICAgICAg ICAgIGlmICgoeiA9IGNtY2ZtKCkpIDwgMCkKKyAgICAgICAgICAgICAgcmV0dXJuKHopOworICAg ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0gZWxzZSBpZiAoeSAhPSBXQUlUX01ETSkgeyAgICAg LyogQSBtb2RlbSBzaWduYWwgKi8KKyAgICAgICAgICAgIHogfD0geTsgICAgICAgICAgICAgICAg ICAgICAvKiBPUiB0aGUgYml0IGludG8gdGhlIHNpZ25hbCBtYXNrICovCisgICAgICAgIH0KKyAg ICAgICAgaWYgKCFmaWxld2FpdCkgeyAgICAgICAgICAgICAgICAvKiBNb2RlbSBzaWduYWxzLi4u ICovCisgICAgICAgICAgICB3aGlsZSAoMSkgeyAgICAgICAgICAgICAgICAgLyogR2V0IHplcm8g b3IgbW9yZSBzaWduYWwgbmFtZXMgKi8KKyAgICAgICAgICAgICAgICB5ID0gY21rZXkobXN0YWIs bm1zLCJtb2RlbSBzaWduYWwiLCIiLHh4c3RyaW5nKTsKKyAgICAgICAgICAgICAgICBpZiAoeSA9 PSAtMykgYnJlYWs7ICAgICAvKiAtMyBtZWFucyB0aGV5IHR5cGVkIENSICovCisgICAgICAgICAg ICAgICAgaWYgKHkgPCAwKSByZXR1cm4oeSk7ICAgLyogT3RoZXIgbmVnYXRpdmVzIGFyZSBlcnJv cnMgKi8KKyAgICAgICAgICAgICAgICB6IHw9IHk7ICAgICAgICAgICAgICAgICAvKiBPUiB0aGUg Yml0IGludG8gdGhlIHNpZ25hbCBtYXNrICovCisgICAgICAgICAgICB9CisgICAgICAgICAgICBp ZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsKKyAgICAgICAgICAgIGJyZWFrOworICAg ICAgICB9CisKKyAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTaG91 bGRuJ3QgaGFwcGVuICovCisgICAgICAgIHJldHVybigtMik7CisgICAgfSAvKiBzd2l0Y2ggKGN4 KSAqLworCisvKiBDb21tYW5kIGlzIGVudGVyZWQsIG5vdyBkbyBpdC4gKi8KKworICAgIGlmICh6 eiA+IC0xTCkgeyAgICAgICAgICAgICAgICAgICAgIC8qIFRpbWUgb2YgZGF5IGdpdmVuPyAqLwor ICAgICAgICB4ID0geno7CisgICAgICAgIGlmICh6eiAhPSAobG9uZykgeCkgeworICAgICAgICAg ICAgcHJpbnRmKAorIlNvcnJ5LCBhcml0aG1ldGljIG92ZXJmbG93IC0gaGg6bW06c3Mgbm90IHVz YWJsZSBvbiB0aGlzIHBsYXRmb3JtLlxuIgorICAgICAgICAgICAgICAgICAgICk7CisgICAgICAg ICAgICByZXR1cm4oLTkpOworICAgICAgICB9CisgICAgfQorICAgIGlmIChzbGVlcGNhbikKKyAg ICAgIGNvbmNiKChjaGFyKWVzY2FwZSk7ICAgICAgICAgICAgICAvKiBFbnN1cmUgc2luZ2xlLWNo YXIgd2FrZXVwICovCisKKyAgICBpZiAoY3ggPT0gWFhNU0wpIHsgICAgICAgICAgICAgICAgICAv KiBNaWxsaXNlY29uZCBzbGVlcCAqLworICAgICAgICBtc2xlZXAoenogPCAwID8geCA6IHggKiAx MDAwKTsKKyAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKyAgICB9CisgICAgaWYgKGN4ID09 IFhYUEFVICYmICFzbGVlcGNhbikgeyAgICAgLyogU0xFRVAgQ0FOQ0VMTEFUSU9OIGlzIE9GRiAq LworICAgICAgICBzbGVlcCh4KTsKKyAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKyAgICB9 CisgICAgaWYgKGZpbGV3YWl0KSB7ICAgICAgICAgICAgICAgICAgICAgLyogRklMRS4uLiAqLwor ICAgICAgICBmcyA9IHpjaGtpKHRtcGJ1Zik7ICAgICAgICAgICAgIC8qIENoZWNrIGlmIGZpbGUg ZXhpc3RzICovCisgICAgICAgIHN3aXRjaCAoZmlsZXdhaXQpIHsKKyAgICAgICAgICBjYXNlIFdG X0RFTDoKKyAgICAgICAgICAgIGlmIChmcyA9PSAtMSkKKyAgICAgICAgICAgICAgcmV0dXJuKHN1 Y2Nlc3MgPSAxKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgV0ZfTU9EOgor ICAgICAgICAgICAgaWYgKGZzID09IC0xKSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCI/Rmls ZSBkb2VzIG5vdCBleGl0OiAlc1xuIix0bXBidWYpOworICAgICAgICAgICAgICAgIHJldHVybigt OSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzID0gemZjZGF0KHRtcGJ1Zik7ICAgICAg ICAgLyogR2V0IGN1cnJlbnQgbW9kaWZpY2F0aW9uIGRhdGUgKi8KKyAgICAgICAgICAgIGlmICgh cykgcyA9ICIiOworICAgICAgICAgICAgaWYgKGNrc3RybmNweShmaWxlZGF0ZSxzLDMyKSAhPSAx NykgeworICAgICAgICAgICAgICAgIHByaW50ZigiP0Nhbid0IGdldCBtb2RpZmljYXRpb24gdGlt ZTogJXNcbiIsdG1wYnVmKTsKKyAgICAgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICAg ICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBXRl9DUkU6CisgICAgICAg ICAgICBpZiAoZnMgPiAtMSkKKyAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKyAg ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIGRvIHsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIFBvbGxpbmcgbG9vcCAqLworICAgICAgICBpZiAoc2xlZXBj YW4pIHsgICAgICAgICAgICAgICAgIC8qIEtleWJvYXJkIGNhbmNlbGxhdGlvbiBhbGxvd2VkPyAq LworICAgICAgICAgICAgaWYgKCh5ID0gY29uY2hrKCkpID4gMCkgeyAgIC8qIERpZCB0aGV5IHR5 cGUgc29tZXRoaW5nPyAqLworICAgICAgICAgICAgICAgIGtiY2hhciA9IGNvbmluYygwKTsgICAg IC8qIFllcywgZ2V0IGZpcnN0IGNoYXIgdGhleSB0eXBlZCAqLworICAgICAgICAgICAgICAgIGRl YnVnKEYwMDAsIldBSVQga2JjaGFyIiwiIixrYmNoYXIpOworI2lmZGVmIENPTU1FTlQKKyAgICAg ICAgICAgICAgICB3aGlsZSAoLS15ID4gMCkgICAgICAgICAvKiBHb2JibGUgdGhlIHJlc3QgdXAg Ki8KKyAgICAgICAgICAgICAgICAgIGNvbmluYygwKTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisg ICAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsgICAgLyogQW5kIHF1aXQgUEFVU2lu ZyBvciBXQUlUaW5nICovCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZp bGV3YWl0ID09IDApIHsKKyAgICAgICAgICAgIGlmIChjeCA9PSBYWFdBSSkgeyAgICAgICAgICAv KiBXQUlUIGZvciBtb2RlbSBzaWduYWxzICovCisgICAgICAgICAgICAgICAgaWYgKHogIT0gMCkg eworICAgICAgICAgICAgICAgICAgICBtZG1zaWcgPSB0dGdtZG0oKTsgIC8qIEdldCB0aGVtLiAq LworICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJXQUlUIHR0Z21kbSIsIiIsbWRtc2ln KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1kbXNpZyA8IDApICAgICAvKiBGYWlsdXJlIHRv IGdldCB0aGVtPyAqLworICAgICAgICAgICAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7 IC8qIEZhaWwuICovCisgICAgICAgICAgICAgICAgICAgIGlmICgobWRtc2lnICYgeikgPT0geikg LyogR290IGRlc2lyZWQgb25lcz8gKi8KKyAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oc3Vj Y2VzcyA9IDEpOyAvKiBTdWNjZWVkLiAqLworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoeCA9 PSAwKQorICAgICAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKyAgICAgICAgICAg IH0KKyAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBGSUxFLi4uICov CisgICAgICAgICAgICBmcyA9IHpjaGtpKHRtcGJ1Zik7ICAgICAgICAgLyogR2V0IGZpbGUgc3Rh dHVzICovCisgICAgICAgICAgICBpZiAoZmlsZXdhaXQgPT0gV0ZfTU9EKSB7ICAgLyogV2FpdCBm b3IgbW9kaWZpY2F0aW9uICovCisgICAgICAgICAgICAgICAgaWYgKGZzID09IC0xKSAgICAgICAg ICAgLyogRmFpbHVyZSB0byBnZXQgc3RhdHVzICovCisgICAgICAgICAgICAgICAgICByZXR1cm4o c3VjY2VzcyA9IDApOyAgLyogc28gV0FJVCBmYWlscy4gKi8KKyAgICAgICAgICAgICAgICBzID0g emZjZGF0KHRtcGJ1Zik7ICAgICAvKiBHZXQgY3VycmVudCBtb2RpZmljYXRpb24gdGltZSAqLwor ICAgICAgICAgICAgICAgIGlmICghcykgcyA9ICIiOyAgICAgICAgIC8qIEFuZCBjb21wYXJlIHdp dGggdGhlIHRpbWUgKi8KKyAgICAgICAgICAgICAgICBpZiAoc3RyY21wKHMsZmlsZWRhdGUpKSAv KiB3aGVuIHRoZSBXQUlUIHN0YXJ0ZWQgKi8KKyAgICAgICAgICAgICAgICAgIHJldHVybihzdWNj ZXNzID0gMSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGZpbGV3YWl0ID09IFdGX0RFTCkgeyAv KiBXYWl0IGZvciBkZWxldGlvbiAqLworICAgICAgICAgICAgICAgIGlmIChmcyA9PSAtMSkgICAg ICAgICAgIC8qIElmIGZpbGUgZG9lc24ndCBleGlzdCwgKi8KKyAgICAgICAgICAgICAgICAgIHJl dHVybihzdWNjZXNzID0gMSk7ICAvKiBzdWNjZWVkLiAqLworICAgICAgICAgICAgfSBlbHNlIGlm IChmaWxld2FpdCA9PSBXRl9DUkUpIHsgLyogV2FpdCBmb3IgY3JlYXRpb24gKi8KKyAgICAgICAg ICAgICAgICBpZiAoZnMgIT0gLTEpICAgICAgICAgICAvKiBJZiBmaWxlIGV4aXN0cyAqLworICAg ICAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsgIC8qIHN1Y2NlZWQuICovCisgICAg ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHggPCAxKSAgICAgICAgICAgICAgICAg ICAgICAvKiBTTEVFUC9XQUlUL1BBVVNFIDAgKi8KKyAgICAgICAgICBicmVhazsKKyAgICAgICAg c2xlZXAod2FpdGludGVydmFsKTsgICAgICAgICAgICAvKiBObyBpbnRlcnJ1cHQsIHNsZWVwICov CisgICAgICAgIHggLT0gd2FpdGludGVydmFsOyAgICAgICAgICAgICAgLyogRGVkdWN0IHNsZWVw IHRpbWUgKi8KKyAgICB9IHdoaWxlICh4ID4gMCk7CisKKyAgICBpZiAoY3ggPT0gWFhXQUkpICAg ICAgICAgICAgICAgICAgICAvKiBXQUlUIHRpbWUgZXhwaXJlZCAqLworICAgICAgc3VjY2VzcyA9 ICh6ID09IDApOyAgICAgICAgICAgICAgIC8qIFN1Y2NlZWQgaWYgbm8gbW9kZW0gc2lnbmFscyAq LworICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZvciBTTEVFUCBv ciBQQVVTRSwgc3VjY2VzcyAqLworICAgICAgc3VjY2VzcyA9ICh4ID09IDApOyAgICAgICAgICAg ICAgIC8qIGRlcGVuZHMgb24gd2hldGhlciBpdCB3YXMgKi8KKyAgICByZXR1cm4oc3VjY2Vzcyk7 ICAgICAgICAgICAgICAgICAgICAvKiBpbnRlcnJ1cHRlZCBmcm9tIHRoZSBrZXlib2FyZC4gKi8K KyNlbmRpZiAvKiBPTERXQUlUICovCit9CisjZW5kaWYgLyogTk9TUEwgKi8KKworI2lmZGVmIE9T Mk9SVU5JWAorX1BST1RPVFlQKGludCB6Y21wZm4sKGNoYXIgKiwgY2hhciAqKSk7CisjZW5kaWYg LyogT1MyT1JVTklYICovCisKKyNpZm5kZWYgTk9GUklMTFMKKyNpZmRlZiBOVAoraW50IAorZG9s aW5rKCkgeworICAgIC8qIFBhcnNlIGEgZmlsZSBvciBhIGRpcmVjdG9yeSBuYW1lICovCisgICAg aW50IGksIHgsIHosIGxpc3RpbmcgPSAwLCBoYXZlbmFtZSA9IDAsIHdpbGQgPSAwLCByYyA9IDE7 CisgICAgc3RydWN0IEZEQiBzdywgZmk7CisKKyAgICBjbWZkYmkoJnN3LCAgICAgICAgICAgICAg ICAgICAgICAgICAvKiAybmQgRkRCIC0gb3B0aW9uYWwgL1BBR0Ugc3dpdGNoICovCisgICAgICAg ICAgIF9DTUtFWSwgICAgICAgICAgICAgICAgICAgICAgLyogZmNvZGUgKi8KKyAgICAgICAgICAg IkZpbGVuYW1lIG9yIHN3aXRjaCIsICAgICAgICAvKiBobHBtc2cgKi8KKyAgICAgICAgICAgIiIs ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkZWZhdWx0ICovCisgICAgICAgICAgICIiLCAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KKyAgICAgICAg ICAgbnF2c3d0YWIsICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMTog dGJsIHNpemUgKi8KKyAgICAgICAgICAgNCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBh ZGR0bCBudW1lcmljIGRhdGEgMjogNCA9IGNtc3dpICovCisgICAgICAgICAgIHh4c3RyaW5nLCAg ICAgICAgICAgICAgICAgICAgLyogUHJvY2Vzc2luZyBmdW5jdGlvbiAqLworICAgICAgICAgICBx dnN3dGFiLCAgICAgICAgICAgICAgICAgICAgIC8qIEtleXdvcmQgdGFibGUgKi8KKyAgICAgICAg ICAgJmZpICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQb2ludGVyIHRvIG5leHQgRkRCICov CisgICAgICAgICAgICk7CisKKyAgICBjbWZkYmkoJmZpLCAgICAgICAgICAgICAgICAgICAgICAg ICAvKiAxc3QgRkRCIC0gZmlsZSB0byB0eXBlICovCisgICAgICAgICAgIF9DTUlGSSwgICAgICAg ICAgICAgICAgICAgICAgLyogZmNvZGUgKi8KKyAgICAgICAgICAgIiIsICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBobHBtc2cgKi8KKyAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBkZWZhdWx0ICovCisgICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KKyAgICAgICAgICAgMywgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMSAqLworICAgICAgICAgICAwLCAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAyICovCisgICAg ICAgICAgIHh4c3RyaW5nLAorICAgICAgICAgICBOVUxMLAorICAgICAgICAgICBOVUxMCisgICAg ICAgICAgICk7CisKKyAgICB3aGlsZSAoIWhhdmVuYW1lKSB7CisgICAgICAgIHggPSBjbWZkYigm c3cpOyAgICAgICAgICAgICAgICAgLyogUGFyc2Ugc29tZXRoaW5nICovCisgICAgICAgIGlmICh4 IDwgMCkgICAgICAgICAgICAgICAgICAgICAgLyogRXJyb3IgKi8KKyAgICAgICAgICByZXR1cm4o eCk7CisgICAgICAgIHN3aXRjaCAoY21yZXN1bHQuZmNvZGUpIHsKKyAgICAgICAgICBjYXNlIF9D TUtFWToKKyAgICAgICAgICAgIHN3aXRjaCAoY21yZXN1bHQubnJlc3VsdCkgeworICAgICAgICAg ICAgICBjYXNlIERFTF9MSVM6CisgICAgICAgICAgICAgIGNhc2UgREVMX1ZSQjoKKyAgICAgICAg ICAgICAgICBsaXN0aW5nID0gMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg ICAgY2FzZSBERUxfTk9MOgorICAgICAgICAgICAgICBjYXNlIERFTF9RVUk6CisgICAgICAgICAg ICAgICAgbGlzdGluZyA9IDA7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9 CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIF9DTUlGSToKKyAgICAgICAgICAg IHMgPSBjbXJlc3VsdC5zcmVzdWx0OworICAgICAgICAgICAgaGF2ZW5hbWUgPSAxOworICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybigtMik7 CisgICAgICAgIH0KKyAgICB9CisgICAgd2lsZCA9IGNtcmVzdWx0Lm5yZXN1bHQ7ICAgICAgICAg ICAgLyogU291cmNlIHNwZWNpZmljYXRpb24gd2lsZD8gKi8KKworICAgIGNrc3RybmNweShsaW5l LHMsTElOQlVGU0laKTsgICAgICAgIC8qIE1ha2UgYSBzYWZlIGNvcHkgb2Ygc291cmNlIG5hbWUg Ki8KKyAgICBzID0gbGluZTsKKworICAgIGlmICghd2lsZCkKKyAgICAgIHdpbGQgPSBpc3dpbGQo bGluZSk7CisKKyAgICBwID0gdG1wYnVmOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQbGFj ZSBmb3IgbmV3IG5hbWUgKi8KKyAgICBpZiAoKHggPSBjbW9maSh3aWxkID8gIlRhcmdldCBkaXJl Y3RvcnkiIDogIk5ldyBuYW1lIiwKKyAgICAgICAgICAgICAgICAgICAiIiwmcyx4eHN0cmluZykp IDwgMCkgeyAvKiBHZXQgbmV3IG5hbWUgKi8KKyAgICAgICAgaWYgKHggPT0gLTMpIHsKKyAgICAg ICAgICAgIHByaW50ZigiPyVzIHJlcXVpcmVkXG4iLCB3aWxkID8gIlRhcmdldCBkaXJlY3Rvcnki IDogIk5ldyBuYW1lIik7CisgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICB9IGVsc2Ug cmV0dXJuKHgpOworICAgIH0KKyAgICBja3N0cm5jcHkocCxzLFRNUEJVRlNJWik7ICAgICAgICAg ICAvKiBNYWtlIGEgc2FmZSBjb3B5IG9mIHRoZSBuZXcgbmFtZSAqLworICAgIGlmICgoeSA9IGNt Y2ZtKCkpIDwgMCkgcmV0dXJuKHkpOworCisgICAgaWYgKCF3aWxkKSB7ICAgICAgICAgICAgICAg ICAgICAgICAgLyogSnVzdCBvbmUgKi8KKyAgICAgICAgaWYgKGxpc3RpbmcpIHByaW50ZigiJXMg PT4gJXMgIixsaW5lLHApOworICAgICAgICBpZiAoemxpbmsobGluZSxwKSA8IDApIHsKKyAgICAg ICAgICAgIGlmIChsaXN0aW5nKSBwcmludGYoIihGQUlMRUQ6ICVzXG4iLGNrX2VycnN0cigpKTsK KyAgICAgICAgICAgIHJjID0gMDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChs aXN0aW5nKSBwcmludGYoIihPSylcbiIpOworICAgICAgICB9CisgICAgICAgIHJldHVybihzdWNj ZXNzID0gcmMpOworICAgIH0KKyAgICBpZiAoIWlzZGlyKHApKSB7ICAgICAgICAgICAgICAgICAg ICAvKiBNdWx0aXBsZSAqLworICAgICAgICBwcmludGYoICAgICAgICAgICAgICAgICAgICAgICAg IC8qIGlmIHRhcmdldCBpcyBub3QgYSBkaXJlY3RvcnkgKi8KKyI/TXVsdGlwbGUgc291cmNlIGZp bGVzIG5vdCBhbGxvd2VkIGlmIHRhcmdldCBpcyBub3QgYSBkaXJlY3RvcnkuXG4iKTsKKyAgICAg ICAgcmV0dXJuKC05KTsKKyAgICB9CisjaWZkZWYgQ09NTUVOVAorICAgIGVsc2UgeyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIFNob3cgZnVsbCBwYXRoIG9mIHRhcmdldCAqLworICAg ICAgICBjaGFyIGJ1ZltDS01BWFBBVEhdOyAgICAgICAgICAgIC8qICh0b28gbXVjaCkgKi8KKyAg ICAgICAgaWYgKHpmbnFmcChwLENLTUFYUEFUSCxidWYpKQorICAgICAgICAgIGNrc3RybmNweSh0 bXBidWYsYnVmLFRNUEJVRlNJWik7CisgICAgfQorI2VuZGlmIC8qIENPTU1FTlQgKi8KKworI2lm ZGVmIFZNUworICAgIGNvbnJlcygpOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExldCBD dHJsLUMgd29yay4gKi8KKyNlbmRpZiAvKiBWTVMgKi8KKyAgICBkZWJ1ZyhGMTEwLCJkb2xpbmsg bGluZSIsbGluZSwwKTsKKworI2lmZGVmIFpYUkVXSU5ECisgICAgeiA9IHp4cmV3aW5kKCk7ICAg ICAgICAgICAgICAgICAgICAgLyogUmV3aW5kIGZpbGUgbGlzdCAqLworI2Vsc2UKKyAgICB6ID0g bnp4cGFuZChzLDApOyAgICAgICAgICAgICAgICAgICAvKiBFeHBhbmQgZmlsZSBsaXN0ICovCisj ZW5kaWYgLyogWlhSRVdJTkQgKi8KKyAgICBkZWJ1ZyhGMTExLCJkb2xpbmsgcCIscCx6KTsKKwor I2lmZGVmIFVOSVgKKyAgICBpZiAod2lsZCAmJiB6ID4gMSkKKyAgICAgIHNoX3NvcnQobXRjaHMs TlVMTCx6LDAsMCxmaWxlY2FzZSk7IC8qIEFscGhhYmV0aXplIHRoZSBmaWxlbmFtZSBsaXN0ICov CisjZW5kaWYgLyogVU5JWCAqLworCisgICAgd2hpbGUgKHotLSA+IDApIHsKKyAgICAgICAgaWYg KCEoeiA9PSAwICYmICF3aWxkKSkKKyAgICAgICAgICB6bmV4dChsaW5lKTsKKyAgICAgICAgaWYg KCFsaW5lWzBdKQorICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAobGlzdGluZykgcHJpbnRm KCIlcyA9PiAlcyAiLGxpbmUscCk7CisgICAgICAgIGlmICh6bGluayhsaW5lLHApIDwgMCkgewor ICAgICAgICAgICAgaWYgKGxpc3RpbmcpIHByaW50ZigiKEZBSUxFRDogJXNcbiIsY2tfZXJyc3Ry KCkpOworICAgICAgICAgICAgcmMgPSAwOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg aWYgKGxpc3RpbmcpIHByaW50ZigiKE9LKVxuIik7CisgICAgICAgIH0KKyAgICB9CisjaWZkZWYg Vk1TCisgICAgY29uY2IoKGNoYXIpZXNjYXBlKTsKKyNlbmRpZiAvKiBWTVMgKi8KKyAgICByZXR1 cm4oc3VjY2VzcyA9IHJjKTsKK30KKyNlbmRpZiAvKiBOVCAqLworCisjaWZkZWYgWkNPUFkKK2lu dAorZG9jb3B5KCkgeworICAgIGludCBpLCB4LCBsaXN0aW5nID0gMCwgbm9saXN0ID0gMCwgaGF2 ZW5hbWUgPSAwLCBnZXR2YWw7CisgICAgY2hhciBjOworICAgIHN0cnVjdCBGREIgc3csIGZpOwor ICAgIGludCBvdmVyd3JpdGUgPSBPVldfQUxXQVlTOworICAgIGludCB0YXJnZXRpc2RpciA9IDA7 CisgICAgaW50IHRhcmdldGxlbiA9IDA7CisgICAgaW50IGFwcGVuZGluZyA9IDA7CisgICAgaW50 IHByZXNlcnZlID0gMDsKKyAgICBpbnQgc3dhcHBpbmcgPSAwOworICAgIGludCBmcm9tYjY0ID0g MDsKKyAgICBpbnQgdG9iNjQgPSAwOworICAgIGludCB3aWxkID0gMDsKKyAgICBpbnQgcmMgPSAx OworCisgICAgY2hhciBuZXduYW1lW0NLTUFYUEFUSF0sICogbm07CisgICAgbm0gPSBuZXduYW1l OworCisgICAgY21mZGJpKCZzdywgICAgICAgICAgICAgICAgICAgICAgICAgLyogMXN0IEZEQiAt IHN3aXRjaGVzICovCisgICAgICAgICAgIF9DTUtFWSwgICAgICAgICAgICAgICAgICAgICAgLyog ZmNvZGUgKi8KKyAgICAgICAgICAgIkZpbGVuYW1lIG9yIHN3aXRjaCIsICAgICAgICAvKiBobHBt c2cgKi8KKyAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkZWZhdWx0 ICovCisgICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgc3Ry aW5nIGRhdGEgKi8KKyAgICAgICAgICAgbmNvcHl0YWIsICAgICAgICAgICAgICAgICAgICAvKiBh ZGR0bCBudW1lcmljIGRhdGEgMTogdGJsIHNpemUgKi8KKyAgICAgICAgICAgNCwgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMjogNCA9IGNtc3dpICovCisg ICAgICAgICAgIHh4c3RyaW5nLCAgICAgICAgICAgICAgICAgICAgLyogUHJvY2Vzc2luZyBmdW5j dGlvbiAqLworICAgICAgICAgICBjb3B5dGFiLCAgICAgICAgICAgICAgICAgICAgIC8qIEtleXdv cmQgdGFibGUgKi8KKyAgICAgICAgICAgJmZpICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQ b2ludGVyIHRvIG5leHQgRkRCICovCisgICAgICAgICAgICk7CisgICAgY21mZGJpKCZmaSwgICAg ICAgICAgICAgICAgICAgICAgICAgLyogMm5kIEZEQiAtIGZpbGUgdG8gY29weSAqLworICAgICAg ICAgICBfQ01JRkksICAgICAgICAgICAgICAgICAgICAgIC8qIGZjb2RlICovCisgICAgICAgICAg ICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaGxwbXNnICovCisgICAgICAgICAgICIi LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGVmYXVsdCAqLworICAgICAgICAgICAiIiwg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIHN0cmluZyBkYXRhICovCisgICAgICAg ICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDEg Ki8KKyAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1l cmljIGRhdGEgMiAqLworICAgICAgICAgICB4eHN0cmluZywKKyAgICAgICAgICAgTlVMTCwKKyAg ICAgICAgICAgTlVMTAorICAgICAgICAgICApOworCisgICAgd2hpbGUgKCFoYXZlbmFtZSkgewor ICAgICAgICB4ID0gY21mZGIoJnN3KTsgICAgICAgICAgICAgICAgIC8qIFBhcnNlIHNvbWV0aGlu ZyAqLworICAgICAgICBpZiAoeCA8IDApICAgICAgICAgICAgICAgICAgICAgIC8qIEVycm9yICov CisgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICBzd2l0Y2ggKGNtcmVzdWx0LmZjb2RlKSB7 CisgICAgICAgICAgY2FzZSBfQ01LRVk6CisJICAgIGMgPSBjbWdicmsoKTsgICAgICAgICAgICAg ICAgICAgLyogR2V0IGJyZWFrIGNoYXJhY3RlciAqLworCSAgICBpZiAoKGdldHZhbCA9IChjID09 ICc6JyB8fCBjID09ICc9JykpICYmICEoY21na3dmbGdzKCkgJiBDTV9BUkcpKSB7CisJCXByaW50 ZigiP1RoaXMgc3dpdGNoIGRvZXMgbm90IHRha2UgYW4gYXJndW1lbnRcbiIpOworCQlyYyA9IC05 OworCQlyZXR1cm4ocmMpOworCSAgICB9CisJICAgIGlmICghZ2V0dmFsICYmIChjbWdrd2ZsZ3Mo KSAmIENNX0FSRykpIHsKKwkJcHJpbnRmKCI/VGhpcyBzd2l0Y2ggcmVxdWlyZXMgYW4gYXJndW1l bnRcbiIpOworCQlyYyA9IC05OworCQlyZXR1cm4ocmMpOworCSAgICB9CisgICAgICAgICAgICBz d2l0Y2ggKGNtcmVzdWx0Lm5yZXN1bHQpIHsKKyAgICAgICAgICAgICAgY2FzZSBERUxfTElTOgor ICAgICAgICAgICAgICBjYXNlIERFTF9WUkI6CisJCW5vbGlzdCA9IDA7CisgICAgICAgICAgICAg ICAgbGlzdGluZyA9IDE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNh c2UgREVMX05PTDoKKyAgICAgICAgICAgICAgY2FzZSBERUxfUVVJOgorCQlub2xpc3QgPSAxOwor ICAgICAgICAgICAgICAgIGxpc3RpbmcgPSAwOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg ICAgICAgICAgICBjYXNlIDk5OToKKyAgICAgICAgICAgICAgICBzd2FwcGluZyA9IDE7CisgICAg ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgOTk4OgorICAgICAgICAgICAg ICAgIGFwcGVuZGluZyA9IDE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisJICAgICAgY2FzZSA5 OTU6CisJCXByZXNlcnZlID0gMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgICBjYXNl IDk5NDoKKwkJaWYgKCh4ID0gY21rZXkob3Z3dGFiLG5vdnd0YWIsCisJCQkgICAgICAgIldoZW4g dG8gb3ZlcndyaXRlIGV4aXN0aW5nIGRlc3RpbmF0aW9uIGZpbGUiLAorCQkJICAgICAgICIiLHh4 c3RyaW5nKSkgPCAwKQorCQkgIHJldHVybih4KTsKKwkJb3ZlcndyaXRlID0geDsKKyAgICAgICAg ICAgICAgICBicmVhazsKKyNpZm5kZWYgTk9TUEwKKyAgICAgICAgICAgICAgY2FzZSA5OTc6Cisg ICAgICAgICAgICAgICAgZnJvbWI2NCA9IDE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICAgICAgIGNhc2UgOTk2OgorICAgICAgICAgICAgICAgIHRvYjY0ID0gMTsKKyAgICAgICAg ICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBOT1NQTCAqLworICAgICAgICAgICAgfQorICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBfQ01JRkk6CisgICAgICAgICAgICBzID0gY21y ZXN1bHQuc3Jlc3VsdDsKKyAgICAgICAgICAgIGhhdmVuYW1lID0gMTsKKyAgICAgICAgICAgIGJy ZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4oLTIpOworICAgICAg ICB9CisgICAgfQorICAgIHdpbGQgPSBjbXJlc3VsdC5ucmVzdWx0OworICAgIGNrc3RybmNweShs aW5lLHMsTElOQlVGU0laKTsgICAgICAgIC8qIE1ha2UgYSBzYWZlIGNvcHkgb2Ygc291cmNlIG5h bWUgKi8KKyAgICBzID0gbGluZTsKKyAgICBwID0gdG1wYnVmOyAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBQbGFjZSBmb3IgbmV3IG5hbWUgKi8KKworICAgIC8qIEdldCBkZXN0aW5hdGlvbiBu YW1lICovCisgICAgaWYgKCh4ID0gY21vZmkoImRlc3RpbmF0aW9uIG5hbWUgYW5kL29yIGRpcmVj dG9yeSIsCisjaWZkZWYgVU5JWAorICAgICAgICAgICAgICAgICAgICIuIgorI2Vsc2UKKyAgICAg ICAgICAgICAgICAgICAiIgorI2VuZGlmIC8qIFVOSVggKi8KKyAgICAgICAgICAgICAgICAgICAs JnMseHhzdHJpbmcpKSA8IDApIHsKKyAgICAgICAgaWYgKHggPT0gLTMpIHsKKyAgICAgICAgICAg IHByaW50ZigiP05hbWUgZm9yIGRlc3RpbmF0aW9uIGZpbGUgcmVxdWlyZWRcbiIpOworICAgICAg ICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgfSBlbHNlIHJldHVybih4KTsKKyAgICB9CisgICAg Y2tzdHJuY3B5KHAscyxUTVBCVUZTSVopOyAgICAgICAgICAgLyogU2FmZSBjb3B5IG9mIGRlc3Rp bmF0aW9uIG5hbWUgKi8KKyAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsKKyAg ICBpZiAoYXBwZW5kaW5nICYmIHN3YXBwaW5nKSB7CisgICAgICAgIHByaW50ZigiP1NvcnJ5LCAv QVBQRU5EIGFuZCAvU1dBUCBjb25mbGljdFxuIik7CisgICAgICAgIHJldHVybigtOSk7CisgICAg fQorI2lmZGVmIENPTU1FTlQKKy8qCisgIFRoaXMgdW5yZWFzb25hYmx5IHByZXZlbnRlZCAiQ09Q WSAvQVBQRU5EICouKiBiaWdmaWxlIiBmcm9tIGNvbmNhdGVuYXRpbmcKKyAgYSBidW5jaCBvZiBm aWxlcyBpbnRvIG9uZSBiaWcgZmlsZS4KKyovCisgICAgaWYgKGFwcGVuZGluZyAmJiB3aWxkKSB7 CisgICAgICAgIHByaW50ZigiP1NvcnJ5LCAvQVBQRU5EIGNhbiBiZSB1c2VkIG9ubHkgd2l0aCBz aW5nbGUgZmlsZXNcbiIpOworICAgICAgICByZXR1cm4oLTkpOworICAgIH0KKyNlbmRpZiAvKiBD T01NRU5UICovCisgICAgdGFyZ2V0aXNkaXIgPSBpc2RpcihwKTsKKyAgICB4ID0gc3RybGVuKHAp OworICAgIGlmICh0YXJnZXRpc2RpcikgeworI2lmZGVmIFVOSVhPUk9TSworICAgICAgICBpZiAo cFt4LTFdICE9ICcvJykgeworICAgICAgICAgICAgY2tzdHJuY2F0KHAsIi8iLFRNUEJVRlNJWik7 CisgICAgICAgICAgICB4Kys7CisgICAgICAgIH0KKyNlbHNlCisjaWZkZWYgT1MyCisgICAgICAg IGlmIChwW3gtMV0gIT0gJy8nKSB7CisgICAgICAgICAgICBja3N0cm5jYXQocCwiLyIsVE1QQlVG U0laKTsKKyAgICAgICAgICAgIHgrKzsKKyAgICAgICAgfQorI2Vsc2UKKyNpZmRlZiBTVFJBVFVT CisgICAgICAgIGlmIChwW3gtMV0gIT0gJz4nKSB7CisgICAgICAgICAgICBja3N0cm5jYXQocCwi PiIsVE1QQlVGU0laKTsKKyAgICAgICAgICAgIHgrKzsKKyAgICAgICAgfQorI2Vsc2UKKyNpZmRl ZiBkYXRhZ2VuZXJhbAorICAgICAgICBpZiAocFt4LTFdICE9ICc6JykgeworICAgICAgICAgICAg Y2tzdHJuY2F0KHAsIjoiLFRNUEJVRlNJWik7CisgICAgICAgICAgICB4Kys7CisgICAgICAgIH0K KyNlbHNlCisgICAgICAgIGlmIChwW3gtMV0gIT0gJy8nKSB7CisgICAgICAgICAgICBja3N0cm5j YXQocCwiLyIsVE1QQlVGU0laKTsKKyAgICAgICAgICAgIHgrKzsKKyAgICAgICAgfQorI2VuZGlm IC8qIGRhdGFnZW5lcmFsICovCisjZW5kaWYgLyogU1RSQVRVUyAqLworI2VuZGlmIC8qIE9TMiAq LworI2VuZGlmIC8qIFVOSVhPUk9TSyAqLworICAgIH0KKyAgICB0YXJnZXRsZW4gPSB4OworCisg ICAgaWYgKCFhcHBlbmRpbmcpIHsJCQkvKiBJZiAvQVBQRU5EIG5vdCBnaXZlbiAqLworCWlmICh3 aWxkICYmICF0YXJnZXRpc2RpcikgewkvKiBObyB3aWxkY2FyZHMgYWxsb3dlZCAqLworCSAgICBw cmludGYoCQkJLyogaWYgdGFyZ2V0IGlzIG5vdCBhIGRpcmVjdG9yeSAqLworIj9NdWx0aXBsZSBz b3VyY2UgZmlsZXMgbm90IGFsbG93ZWQgaWYgdGFyZ2V0IGlzIG5vdCBhIGRpcmVjdG9yeS5cbiIp OworCSAgICByZXR1cm4oLTkpOworCX0KKyAgICB9CisKKyNpZmRlZiBWTVMKKyAgICBjb25yZXMo KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBMZXQgQ3RybC1DIHdvcmsuICovCisjZW5k aWYgLyogVk1TICovCisgICAgZGVidWcoRjExMCwiZG9jb3B5IGxpbmUiLGxpbmUsMCk7CisgICAg ZGVidWcoRjExMCwiZG9jb3B5IHAiLHAsMCk7CisgICAgZGVidWcoRjExMCwiZG9jb3B5IG5tIixu bSwwKTsKKworI2lmZGVmIFpYUkVXSU5ECisgICAgeiA9IHp4cmV3aW5kKCk7ICAgICAgICAgICAg ICAgICAgICAgLyogUmV3aW5kIGZpbGUgbGlzdCAqLworI2Vsc2UKKyAgICB6ID0gbnp4cGFuZChz LDApOyAgICAgICAgICAgICAgICAgICAvKiBFeHBhbmQgZmlsZSBsaXN0ICovCisjZW5kaWYgLyog WlhSRVdJTkQgKi8KKworI2lmZGVmIFVOSVgKKyAgICBpZiAod2lsZCkKKyAgICAgIHNoX3NvcnQo bXRjaHMsTlVMTCx6LDAsMCxmaWxlY2FzZSk7IC8qIEFscGhhYmV0aXplIHRoZSBmaWxlbmFtZSBs aXN0ICovCisjZW5kaWYgLyogVU5JWCAqLworCisjaWZkZWYgSUtTRAorICAgIGlmICghdGFyZ2V0 aXNkaXIgJiYgemNoa2kocCkgPiAtMSkgeyAvKiBEZXN0aW5hdGlvbiBmaWxlIGV4aXN0cz8gKi8K KyAgICAgICAgaWYgKGluc2VydmVyICYmICghRU5BQkxFRChlbl9kZWwpCisjaWZkZWYgQ0tfTE9H SU4KKyAgICAgICAgICAgICAgICAgICAgICAgICB8fCBpc2d1ZXN0CisjZW5kaWYgLyogQ0tfTE9H SU4gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICApKSB7CisgICAgICAgICAgICBwcmludGYo Ij9Tb3JyeSwgb3ZlcndyaXRpbmcgZXhpc3RpbmcgZmlsZXMgaXMgZGlzYWJsZWRcbiIpOworICAg ICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBJS1NEICov CisKKyAgICBpZiAodG9iNjQgJiYgZnJvbWI2NCkgeyAgICAgICAgICAgICAvKiBUbyBhbmQgZnJv bSBCNjQgPSBubyBjb252ZXJzaW9uICovCisgICAgICAgIHRvYjY0ID0gMDsKKyAgICAgICAgZnJv bWI2NCA9IDA7CisgICAgfQorICAgIGRlYnVnKEYxMTAsIkNPUFkgZGVzdCIscCwwKTsKKworICAg IHdoaWxlICh6ID4gMCkgeworCisgICAgICAgIHpuZXh0KGxpbmUpOworICAgICAgICBpZiAoIWxp bmVbMF0pCisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZXJybm8gPSAwOyAgICAgICAgICAg ICAgICAgICAgICAvKiBSZXNldCBlcnJubyAqLworCisJaWYgKHRhcmdldGlzZGlyKSB7CisJICAg IHpzdHJpcChsaW5lLCZubSk7CisJICAgIGNrbWFrbXNnKG5ld25hbWUsQ0tNQVhQQVRILHAsbm0s TlVMTCxOVUxMKTsKKwkgICAgbm0gPSBuZXduYW1lOworCX0gZWxzZSB7CisJICAgIG5tID0gcDsK Kwl9CisJaWYgKG92ZXJ3cml0ZSkgewkJLyogT3ZlcndyaXRlIGNoZWNraW5nPyAqLworCSAgICBp ZiAoemNoa2kobm0pID49IChDS19PRkZfVCkwKSB7IC8qIERlc3RpbmF0aW9uIGZpbGUgZXhpc3Rz PyAqLworCisJCWNoYXIgZDFbMjBdLCAqIGQyOworCQljaGFyICogbjEsICogbjI7CisJCWludCBp LCBza2lwID0gMDsKKworCQlpID0gc3RybGVuKGxpbmUpOwkvKiBJc29sYXRlIHNvdXJjZSBmaWxl bmFtZSAqLworCQlmb3IgKDsgaSA+PSAwOyBpLS0pIHsKKwkJICAgIGlmIChJU0RJUlNFUChsaW5l W2ldKSkgeworCQkJbjEgPSAmbGluZVtpKzFdOworCQkJYnJlYWs7CisJCSAgICB9CisJCX0KKwkJ ZGVidWcoRjExMCwiQ09QWSBuMSIsIG4xLCAwKTsKKwkJaSA9IHN0cmxlbihubSk7CQkvKiBBbmQg ZGVzdGluYXRpb24gZmlsZW5hbWUgKi8KKwkJZm9yICg7IGkgPj0gMDsgaS0tKSB7CisJCSAgICBp ZiAoSVNESVJTRVAobm1baV0pKSB7CisJCQluMiA9ICZubVtpKzFdOworCQkJYnJlYWs7CisJCSAg ICB9CisJCX0KKwkJZGVidWcoRjExMCwiQ09QWSBuMiIsIG4yLCAwKTsKKwkJaWYgKCFzdHJjbXAo bjEsbjIpKSB7ICAgICAgICAgIAkgIC8qIFNhbWUgbmFtZT8gKi8KKwkJICAgIGlmIChvdmVyd3Jp dGUgPT0gT1ZXX05FVkVSKSB7IC8qIE5ldmVyIG92ZXJ3cml0ZT8gKi8KKwkJCWlmIChsaXN0aW5n KQkgICAgICAgICAgLyogU2tpcCAqLworCQkJICBpZiAobGlzdGluZykgcHJpbnRmKCIlcyA9PiAl cyAoU0tJUFBFRClcbiIsbGluZSxubSk7CisJCQljb250aW51ZTsKKwkJICAgIH0KKwkJICAgIGNr c3RybmNweShkMSx6ZmNkYXQobGluZSksMjApOyAvKiBTb3VyY2UgZmlsZSB0aW1lc3RhbXAgKi8K KwkJICAgIGQyID0gemZjZGF0KG5tKTsJICAgICAgIC8qIFRpbWVzdGFtcCBvZiBkZXN0IGZpbGUg Ki8KKwkJICAgIHggPSBzdHJjbXAoZDEsZDIpOwkgICAgICAgLyogQ29tcGFyZSB0aGVtICovCisJ CSAgICBpZiAoKChvdmVyd3JpdGUgPT0gT1ZXX05FV0VSKSAmJiAoeCA8IDApKSB8fAorCQkJKChv dmVyd3JpdGUgPT0gT1ZXX09MREVSKSAmJiAoeCA+IDApKSkgeworCQkJaWYgKGxpc3RpbmcpCisJ CQkgIGlmIChsaXN0aW5nKSBwcmludGYoIiVzID0+ICVzIChTS0lQUEVEKVxuIixsaW5lLG5tKTsK KwkJCWNvbnRpbnVlOworCQkgICAgfQorCQl9CisJICAgIH0KKwl9CisgICAgICAgIGlmIChsaXN0 aW5nKSBwcmludGYoIiVzID0+ICVzICIsbGluZSxubSk7CisKKyAgICAgICAgLyogU3RyYWlnaHQg Y29weSAqLworICAgICAgICBpZiAoIXN3YXBwaW5nICYmICFhcHBlbmRpbmcgJiYgIWZyb21iNjQg JiYgIXRvYjY0KSB7CisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJDT1BZIHpjb3B5IixsaW5lLDAp OworCisgICAgICAgICAgICBpZiAoKHggPSB6Y29weShsaW5lLHApKSA8IDApIHsgLyogTGV0IHpj b3B5KCkgZG8gaXQuICovCisJCWRlYnVnKEYxMTEsIkNPUFkgbm90IE9LIixsaW5lLHgpOworICAg ICAgICAgICAgICAgIHN3aXRjaCAoeCkgeworICAgICAgICAgICAgICAgICAgY2FzZSAtMjoKKwkJ ICAgIGlmIChsaXN0aW5nKQorCQkgICAgICBwcmludGYoIihGQUlMRUQ6IE5vdCBhIHJlZ3VsYXIg ZmlsZSlcbiIpOworCQkgICAgZWxzZSBpZiAoIW5vbGlzdCkKKwkJICAgICAgcHJpbnRmKCI/Tm90 IGEgcmVndWxhciBmaWxlIC0gJXNcbiIsbGluZSk7CisgICAgICAgICAgICAgICAgICAgIHJjID0g MDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIC0z OgorCQkgICAgaWYgKGxpc3RpbmcpCisJCSAgICAgIHByaW50ZigiKEZBSUxFRDogTm90IGZvdW5k IG9yIG5vdCBhY2Nlc3NpYmxlKVxuIik7CisJCSAgICBlbHNlIGlmICghbm9saXN0KQorCQkgICAg ICBwcmludGYoIj9Ob3QgZm91bmQgb3Igbm90IGFjY2Vzc2libGUgLSAlc1xuIixsaW5lKTsKKyAg ICAgICAgICAgICAgICAgICAgcmMgPSAwOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgICAgICAgICAgIGNhc2UgLTQ6CisJCSAgICBpZiAobGlzdGluZykKKwkJICAgICAgcHJp bnRmKCIoRkFJTEVEOiBQZXJtaXNzaW9uIGRlbmllZClcbiIpOworCQkgICAgZWxzZSBpZiAoIW5v bGlzdCkKKwkJICAgICAgcHJpbnRmKCI/UGVybWlzc2lvbiBkZW5pZWQgLSAlc1xuIixsaW5lKTsK KyAgICAgICAgICAgICAgICAgICAgcmMgPSAwOworICAgICAgICAgICAgICAgICAgICBicmVhazsK KyAgICAgICAgICAgICAgICAgIGNhc2UgLTU6CisJCSAgICBpZiAobGlzdGluZykKKwkJICAgICAg cHJpbnRmKCIoU291cmNlIGFuZCBkZXN0aW5hdGlvbiBhcmUgdGhlIHNhbWUgZmlsZSlcbiIpOwor CQkgICAgZWxzZSBpZiAoIW5vbGlzdCkKKwkJICAgICAgcHJpbnRmKAorCQkJICAiP1NvdXJjZSBh bmQgZGVzdGluYXRpb24gYXJlIHRoZSBzYW1lIGZpbGUgLSAlc1xuIiwKKwkJCSAgbGluZQorCQkJ ICApOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2Ug LTY6CisJCSAgICBpZiAobGlzdGluZykKKwkJICAgICAgcHJpbnRmKCIoRkFJTEVEOiBJbnB1dC9P dXRwdXQgZXJyb3IpXG4iKTsKKwkJICAgIGVsc2UgaWYgKCFub2xpc3QpCisJCSAgICAgIHByaW50 ZigiP0lucHV0L091dHB1dCBlcnJvciAtICVzXG4iLGxpbmUpOworICAgICAgICAgICAgICAgICAg ICByYyA9IDA7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg Y2FzZSAtNzoKKwkJICAgIGlmIChsaXN0aW5nKQorCQkgICAgICBwcmludGYoIihGQUlMRUQ6ICVz IC0gJXMpXG4iLHAsY2tfZXJyc3RyKCkpOworCQkgICAgZWxzZSBpZiAoIW5vbGlzdCkKKwkJICAg ICAgcHJpbnRmKCI/JXMgLSAlc1xuIixja19lcnJzdHIoKSxwKTsKKyAgICAgICAgICAgICAgICAg ICAgcmMgPSAwOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg IGRlZmF1bHQ6CisJCSAgICBpZiAobGlzdGluZykKKwkJICAgICAgcHJpbnRmKCIoRkFJTEVEOiAl cylcbiIsY2tfZXJyc3RyKCkpOworCQkgICAgZWxzZSBpZiAoIW5vbGlzdCkKKwkJICAgICAgcHJp bnRmKCI/JXNcbiIsY2tfZXJyc3RyKCkpOworICAgICAgICAgICAgICAgICAgICByYyA9IDA7Cisg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsJCQkvKiBSZWd1bGFyIGNvcHkg c3VjY2VlZGVkICovCisJCWRlYnVnKEYxMTAsIkNPUFkgT0suLiIsbmV3bmFtZSwwKTsKKyNpZm5k ZWYgTk9YRkVSCisJCWlmIChwcmVzZXJ2ZSkgewkJLyogSGFuZGxlIC9QUkVTRVJWRSAqLworCQkg ICAgY2hhciAqIHBzdHIgPSAiIjsJLyogRmlsZSBwZXJtaXNzaW9ucyBzdHJpbmcgKi8KKwkJICAg IHN0cnVjdCB6YXR0ciB4eDsJLyogRmlsZSBhdHRyaWJ1dGUgc3RydWN0dXJlICovCisJCSAgICBl eHRlcm4gY2hhciAqIGNrc3lzaWQ7CisKKwkJICAgIGluaXRhdHRyKCZ4eCk7CS8qIEluaXRpYWxp emUgdGhlIHN0cnVjdCAqLworCisJCSAgICB4eC5zeXN0ZW1pZC52YWwgPSBja3N5c2lkOyAvKiBT ZXQgb3VyIHN5c3RlbSBJRCAqLworCQkgICAgeHguc3lzdGVtaWQubGVuID0gKGludClzdHJsZW4o Y2tzeXNpZCk7CisjaWZkZWYgQ0tfUEVSTVMKKwkJICAgIHBzdHIgPSB6Z3Blcm0obGluZSk7IC8q IEdldCBzb3VyY2UgZmlsZSdzIHBlcm1pc3Npb25zICovCisjZW5kaWYgLyogQ0tfUEVSTVMgKi8K KwkJICAgIHh4Lmxwcm90ZWN0LnZhbCA9IHBzdHI7CisJCSAgICB4eC5scHJvdGVjdC5sZW4gPSAo aW50KXN0cmxlbihwc3RyKTsKKwkJICAgIHh4LmRhdGUudmFsID0gemZjZGF0KGxpbmUpOwkvKiBT b3VyY2UgZmlsZSdzIHRpbWVzdGFtcCAqLworCQkgICAgeHguZGF0ZS5sZW4gPSAoaW50KXN0cmxl bih4eC5kYXRlLnZhbCk7CisJCSAgICBpZiAoenN0aW1lKG5tLCZ4eCwwKSA8IDApIHsKKwkJCXBy aW50ZigiP0NPUFkgL1BSRVNFUlZFICVzOiAlc1xuIixubSxja19lcnJzdHIoKSk7CisJCQlyYyA9 IC05OworCQkgICAgfQorCQl9CisjZW5kaWYJLyogTk9YRkVSICovCisJCWlmIChsaXN0aW5nICYm IHJjID4gLTEpCisJCSAgcHJpbnRmKCIoT0spXG4iKTsKKyAgICAgICAgICAgIH0KKworICAgICAg ICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNwZWNpYWwgb3B0aW9ucyAqLwor CisgICAgICAgICAgICBpbnQgcHJldiwgeSwgeCA9IDA7ICAgICAgICAgLyogVmFyaWFibGVzIG5l ZWRlZCBmb3IgdGhlbSAqLworICAgICAgICAgICAgaW50IGksIHQ7CisgICAgICAgICAgICBjaGFy IGlidWZbMTAwXTsKKyAgICAgICAgICAgIGNoYXIgb2J1ZlsyMDBdOworICAgICAgICAgICAgRklM RSAqIGluID0gTlVMTDsKKyAgICAgICAgICAgIEZJTEUgKiBvdXQgPSBOVUxMOworCisgICAgICAg ICAgICBpZiAoKGluID0gZm9wZW4obGluZSwiciIpKSA9PSBOVUxMKSB7IC8qIE9wZW4gaW5wdXQg ZmlsZSAqLworICAgICAgICAgICAgICAgIGlmIChsaXN0aW5nKQorCQkgIHByaW50ZigiKEZBSUxF RDogJXMpXG4iLGNrX2VycnN0cigpKTsKKwkJZWxzZSBpZiAoIW5vbGlzdCkKKwkJICBwcmludGYo Ij8lcyAtICVzKVxuIixja19lcnJzdHIoKSxsaW5lKTsKKyAgICAgICAgICAgICAgICByYyA9IDA7 CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp ZiAodGFyZ2V0aXNkaXIpIHsgICAgICAgICAgLyogVGFyZ2V0IGlzIGRpcmVjdG9yeSAqLworICAg ICAgICAgICAgICAgIGNoYXIgKiBidWYgPSBOVUxMOyAgICAgIC8qIHNvIGFwcGVuZCB0aGlzIGZp bGVuYW1lIHRvIGl0ICovCisgICAgICAgICAgICAgICAgenN0cmlwKGxpbmUsJmJ1Zik7CisgICAg ICAgICAgICAgICAgcFt0YXJnZXRsZW5dID0gTlVMOworICAgICAgICAgICAgICAgIGlmIChidWYp CisgICAgICAgICAgICAgICAgICBja3N0cm5jYXQocCxidWYsVE1QQlVGU0laKTsKKyAgICAgICAg ICAgIH0KKyNpZmRlZiBPUzJPUlVOSVgKKyAgICAgICAgICAgIGlmICh6Y21wZm4obGluZSxwKSkg eyAgICAgICAvKiBJbnB1dCBhbmQgb3V0cHV0IGFyZSBzYW1lIGZpbGU/ICovCisgICAgICAgICAg ICAgICAgaWYgKGxpc3RpbmcpCisgICAgICAgICAgICAgICAgICBwcmludGYoIihGQUlMRUQ6IFNv dXJjZSBhbmQgZGVzdGluYXRpb24gaWRlbnRpY2FsKVxuIik7CisJCWVsc2UgaWYgKCFub2xpc3Qp CisgICAgICAgICAgICAgICAgICBwcmludGYoIj9Tb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGlkZW50 aWNhbCAtICVzXG4iLCBsaW5lKTsgCisgICAgICAgICAgICAgICAgcmMgPSAwOworICAgICAgICAg ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorI2VuZGlmIC8qIE9TMk9SVU5JWCAqLwor ICAgICAgICAgICAgaWYgKChvdXQgPSBmb3BlbihwLCAoYXBwZW5kaW5nID8gImEiIDogInciKSkp ID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBmY2xvc2UoaW4pOworICAgICAgICAgICAgICAg IGlmIChsaXN0aW5nKQorCQkgIHByaW50ZigiKEZBSUxFRDogJXMgLSAlcylcbiIscCxja19lcnJz dHIoKSk7CisJCWVsc2UgaWYgKCFub2xpc3QpCisJCSAgcHJpbnRmKCI/JXMgLSAlc1xuIixwLGNr X2VycnN0cigpKTsKKyAgICAgICAgICAgICAgICByYyA9IDA7CisgICAgICAgICAgICAgICAgY29u dGludWU7CisgICAgICAgICAgICB9CisjaWZuZGVmIE5PU1BMCisgICAgICAgICAgICBpZiAodG9i NjQpIHsgICAgICAgICAgICAgICAgLyogQ29udmVydGluZyB0byBCYXNlLTY0ICovCisKKyAgICAg ICAgICAgICAgICBkZWJ1ZyhGMTEwLCJDT1BZIHRvYjY0IixsaW5lLDApOworCisgICAgICAgICAg ICAgICAgd2hpbGUgKDEpIHsgICAgICAgICAgICAgLyogTG9vcC4uLiAqLworICAgICAgICAgICAg ICAgICAgICBwcmV2ID0geDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCh4ID0gZnJlYWQoaWJ1 ZiwxLDU0LGluKSkgPCAxKSB7IC8qIEVPRiAqLworICAgICAgICAgICAgICAgICAgICAgICAgaWYg KGxpc3RpbmcpCisgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiKE9LKVxuIik7Cisg ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICAgICAgICBpZiAocHJldiAlIDMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg IGlmIChsaXN0aW5nKQorICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIihGQUlMRUQ6 IFBoYXNlIGVycm9yIGF0ICVkKVxuIixwcmV2KTsKKwkJCWVsc2UgaWYgKCFub2xpc3QpCisgICAg ICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiP1BoYXNlIGVycm9yIGF0ICVkXG4iLHByZXYp OworICAgICAgICAgICAgICAgICAgICAgICAgcmMgPSAwOworICAgICAgICAgICAgICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYg KHN3YXBwaW5nKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeCAmIDEpIHsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpZiAobGlzdGluZykKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHByaW50ZigiKEZBSUxFRDogU3dhcCBlcnJvcilcbiIpOworCQkJICAgIGVsc2Ug aWYgKCFub2xpc3QpCisJCQkgICAgICBwcmludGYoIj9Td2FwIGVycm9yXG4iKTsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICByYyA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg YnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg ICBmb3IgKGkgPSAwOyBpIDwgeDsgaSs9MikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg IHQgPSBpYnVmW2ldOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlidWZbaV0gPSBpYnVm W2krMV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWJ1ZltpKzFdID0gdDsKKyAgICAg ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg ICAgICAgICBpZiAoKHkgPSBiOHRvYjY0KGlidWYseCxvYnVmLDE4MCkpIDwgMCkgeworICAgICAg ICAgICAgICAgICAgICAgICAgaWYgKGxpc3RpbmcpCisgICAgICAgICAgICAgICAgICAgICAgICAg IHByaW50ZigiKEZBSUxFRDogRW5jb2RpbmcgZXJyb3IpXG4iKTsKKwkJCWVsc2UgaWYgKCFub2xp c3QpCisJCQkgIHByaW50ZigiP0VuY29kaW5nIGVycm9yXG4iKTsKKyAgICAgICAgICAgICAgICAg ICAgICAgIHJjID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGZwcmludGYob3V0LCIlc1xuIixvYnVm KTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoZnJvbWI2NCkg eyAgICAgICAvKiBDb252ZXJ0aW5nIGZyb20gQmFzZSA2NCAqLworCisgICAgICAgICAgICAgICAg ZGVidWcoRjExMCwiQ09QWSBmcm9tYjY0IixsaW5lLDApOworCisgICAgICAgICAgICAgICAgaWYg KChvdXQgPSBmb3BlbihwLGFwcGVuZGluZyA/ICJhIiA6ICJ3IikpID09IE5VTEwpIHsKKyAgICAg ICAgICAgICAgICAgICAgZmNsb3NlKGluKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGxpc3Rp bmcpCisJCSAgICAgIHByaW50ZigiKEZBSUxFRDogJXMgLSAlcylcbiIscCxja19lcnJzdHIoKSk7 CisJCSAgICBlbHNlIGlmICghbm9saXN0KQorCQkgICAgICBwcmludGYoIj8lcyAtICVzXG4iLHAs Y2tfZXJyc3RyKCkpOworICAgICAgICAgICAgICAgICAgICByYyA9IDA7CisgICAgICAgICAgICAg ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB4ID0g MTsKKyAgICAgICAgICAgICAgICB3aGlsZSAoeCkgeworICAgICAgICAgICAgICAgICAgICB4ID0g ZnJlYWQoaWJ1ZiwxLDgwLGluKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCh5ID0gYjY0dG9i OChpYnVmLHgsb2J1Ziw4MCkpIDwgMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxp c3RpbmcpCisgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiKEZBSUxFRDogRGVjb2Rp bmcgZXJyb3IpXG4iKTsKKwkJCWVsc2UgaWYgKCFub2xpc3QpCisJCQkgIHByaW50ZigiP0RlY29k aW5nIGVycm9yXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJjID0gMDsKKyAgICAgICAg ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgICAgICAgIGlmIChzd2FwcGluZykgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHgg JiAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpc3RpbmcpCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIihGQUlMRUQ6IFN3YXAgZXJyb3IpXG4iKTsK KwkJCSAgICBlbHNlIGlmICghbm9saXN0KQorCQkJICAgICAgcHJpbnRmKCI/U3dhcCBlcnJvclxu Iik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmMgPSAwOworICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHk7IGkrPTIpIHsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICB0ID0gb2J1ZltpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBv YnVmW2ldID0gb2J1ZltpKzFdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9idWZbaSsx XSA9IHQ7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgICAgICAgaWYgKHkgPiAwKSB7CisgICAgICAgICAgICAgICAgICAgICAg ICBpZiAoZndyaXRlKG9idWYsMSx5LG91dCkgPCAxKSB7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaWYgKGxpc3RpbmcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYo IihGQUlMRUQ6ICVzIC0gJXMpXG4iLHAsY2tfZXJyc3RyKCkpOworCQkJICAgIGVsc2UgaWYgKCFu b2xpc3QpCisJCQkgICAgICBwcmludGYoIj8lcyAtICVzXG4iLHAsY2tfZXJyc3RyKCkpOworICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHJjID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgfSBlbHNlCisjZW5kaWYgLyog Tk9TUEwgKi8KKworICAgICAgICAgICAgaWYgKHN3YXBwaW5nKSB7ICAgICAgICAgICAgIC8qIFN3 YXBwaW5nIGJ5dGVzICovCisKKyAgICAgICAgICAgICAgICBDSEFSIGNbM107CisgICAgICAgICAg ICAgICAgY1syXSA9IE5VTDsKKworICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsIkNPUFkgc3dh cHBpbmciLGxpbmUsMCk7CisKKyAgICAgICAgICAgICAgICB3aGlsZSAoMSkgeworICAgICAgICAg ICAgICAgICAgICB4ID0gZnJlYWQoKGNoYXIgKiljLDEsMixpbik7CisgICAgICAgICAgICAgICAg ICAgIGlmICh4IDwgMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpc3RpbmcpCisg ICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiKE9LKVxuIik7CisgICAgICAgICAgICAg ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh4ID09IDEp IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNbMV0gPSBjWzBdOworICAgICAgICAgICAgICAg ICAgICAgICAgY1swXSA9IE5VTDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAiKFdBUk5JTkc6IE9kZCBieXRlIGNvdW50KSIpOwor ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFsaXN0aW5nKSBwcmludGYoIlxuIik7CisgICAg ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKGZwcmludGYob3V0LCIl YyVjIixjWzFdLGNbMF0pID09IEVPRikgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxp c3RpbmcpCisgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiKEZBSUxFRDogJXMgLSAl cylcbiIscCxja19lcnJzdHIoKSk7CisJCQllbHNlIGlmICghbm9saXN0KQorICAgICAgICAgICAg ICAgICAgICAgICAgICBwcmludGYoIj8lcyAtICVzXG4iLHAsY2tfZXJyc3RyKCkpOworICAgICAg ICAgICAgICAgICAgICAgICAgcmMgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7 CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg IH0gZWxzZSBpZiAoYXBwZW5kaW5nKSB7ICAgICAvKiBBcHBlbmRpbmcgdG8gdGFyZ2V0IGZpbGUg Ki8KKworICAgICAgICAgICAgICAgIGNoYXIgYzsKKworICAgICAgICAgICAgICAgIGRlYnVnKEYx MTAsIkNPUFkgYXBwZW5kaW5nIixsaW5lLDApOworCisgICAgICAgICAgICAgICAgd2hpbGUgKDEp IHsKKyAgICAgICAgICAgICAgICAgICAgeCA9IGZyZWFkKCZjLDEsMSxpbik7CisgICAgICAgICAg ICAgICAgICAgIGlmICh4IDwgMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpc3Rp bmcpCisgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiKE9LKVxuIik7CisgICAgICAg ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICAgICAgICBpZiAoZndyaXRlKCZjLDEsMSxvdXQpIDwgMSkgeworICAgICAgICAgICAgICAg ICAgICAgICAgaWYgKGxpc3RpbmcpCisgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50Zigi KEZBSUxFRDogJXMgLSAlcylcbiIscCxja19lcnJzdHIoKSk7CisJCQllbHNlIGlmICghbm9saXN0 KQorICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIj8lcyAtICVzXG4iLHAsY2tfZXJy c3RyKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgcmMgPSAwOworICAgICAgICAgICAgICAg ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAob3V0KSBmY2xvc2Uob3V0KTsKKyAgICAg ICAgICAgIGlmIChpbikgZmNsb3NlKGluKTsKKyAgICAgICAgfQorI2lmZGVmIFZNU09SVU5JWAor ICAgICAgICBjb25jYigoY2hhcillc2NhcGUpOworI2VuZGlmIC8qIFZNU09SVU5JWCAqLworICAg IH0KKyAgICBpZiAocmMgPiAtMSkgc3VjY2VzcyA9IHJjOworICAgIHJldHVybihyYyk7Cit9Cisj ZW5kaWYgLyogWkNPUFkgKi8KKyNlbmRpZiAvKiBOT0ZSSUxMUyAqLworCisjaWZuZGVmIE5PQ1NF VFMKKyNpZm5kZWYgTk9VTklDT0RFCitzdGF0aWMgc3RydWN0IGtleXRhYiAqIHhmY3N0YWIgPSBO VUxMOwkvKiBGb3IgUkVOQU1FIC9DT05WRVJUOiAqLworc3RhdGljIGNoYXIgY3Z0YnVmaW5bQ0tN QVhQQVRIKzhdID0geyBOVUwsIE5VTCB9Oworc3RhdGljIGNoYXIgY3Z0YnVmb3V0W0NLTUFYUEFU SCs4XSA9IHsgTlVMLCBOVUwgfTsKK3N0YXRpYyBjaGFyICogcGN2dGJ1ZmluID0gTlVMTDsKK3N0 YXRpYyBjaGFyICogcGN2dGJ1Zm91dCA9IE5VTEw7CisKK3N0YXRpYyBpbnQJCQkJLyogSW5wdXQg ZnVuY3Rpb24geGduYnl0ZSgpICovCitjdnRmbmluKCkgeworICAgIENIQVIgYzsKKyAgICBjID0g KnBjdnRidWZpbisrOworICAgIHJldHVybihjID8gYyA6IC0xKTsKK30KKworX1BST1RPVFlQKGlu dCBjdnRmbm91dCwoY2hhcikpOwkJLyogT3V0cHV0IGZ1bmN0aW9uIGZvciB4cG5ieXRlKCkgKi8K K2ludAorI2lmZGVmIENLX0FOU0lDCitjdnRmbm91dChjaGFyIGMpCisjZWxzZQorY3Z0Zm5vdXQo YykgY2hhciBjOworI2VuZGlmCS8qIENLX0FOU0lDICovCit7CisgICAgaWYgKHBjdnRidWZvdXQg LSBjdnRidWZvdXQgPj0gQ0tNQVhQQVRIKQorICAgICAgcmV0dXJuKC0xKTsKKyAgICAqcGN2dGJ1 Zm91dCsrID0gYzsKKyAgICAqcGN2dGJ1Zm91dCA9IE5VTDsKKyAgICByZXR1cm4oMSk7Cit9CisK Ky8qIENvbnZlcnQgYSBzdHJpbmcgZnJvbSBhbnkgY2hhcnNldCB0byBhbnkgb3RoZXIgY2hhcnNl dCAqLworCitjaGFyICoKK2N2dHN0cmluZyhzLGNzaW4sY3NvdXQpIGNoYXIgKiBzOyBpbnQgY3Np biwgY3NvdXQ7IHsKKyAgICBpbnQgYzsKKyAgICBleHRlcm4gQ0tfT0ZGX1QgZmZjOworCisgICAg Y2tzdHJuY3B5KGN2dGJ1ZmluLHMsQ0tNQVhQQVRIKTsJLyogUHV0IGl0IGluIGEgcHVibGljIHBs YWNlICovCisgICAgcGN2dGJ1ZmluID0gY3Z0YnVmaW47CQkvKiB3aXRoIHB1YmxpYyBwb2ludGVy cyAqLworICAgIHBjdnRidWZvdXQgPSBjdnRidWZvdXQ7CisgICAgKnBjdnRidWZvdXQgPSBOVUw7 CisKKyAgICBpZiAoY3NpbiA9PSBjc291dCkJCQkvKiBJZiB0aGUgdHdvIHNldHMgYXJlIHRoZSBz YW1lICovCisgICAgICByZXR1cm4oKGNoYXIgKiljdnRidWZpbik7CQkvKiBkb24ndCBib3RoZXIg Y29udmVydGluZyAqLworCisgICAgaW5pdHhsYXRlKGNzaW4sY3NvdXQpOwkJLyogSW5pdGlhbGl6 ZSB0aGUgdHJhbnNsYXRvciAqLworCisgICAgd2hpbGUgKChjID0geGduYnl0ZShGQ19VQ1MyLGNz aW4sY3Z0Zm5pbikpID4gLTEpIHsgLyogTG9vcCB0aHJ1IHN0cmluZyAqLworCWlmICh4cG5ieXRl KGMsVENfVUNTMixjc291dCxjdnRmbm91dCkgPCAwKSB7CisJICAgIGZmYyA9IChDS19PRkZfVCkw OworCSAgICByZXR1cm4oIiIpOworCX0KKyAgICB9CisgICAgLyogZmZjIGlzIHRvdWNoZWQgYnkg eGduYnl0ZSgpIGJ1dCB0aGlzIGlzIG5vdCBmaWxlIHRyYW5zZmVyICovCisgICAgLyogc28gd2Ug aGF2ZSB0byB1bmRvIGl0ICovCisgICAgZmZjID0gKENLX09GRl9UKTA7CisgICAgcmV0dXJuKChj aGFyICopY3Z0YnVmb3V0KTsKK30KKyNlbmRpZiAvKiBOT1VOSUNPREUgKi8KKyNlbmRpZiAvKiBO T0NTRVRTICovCisKKyNpZm5kZWYgTk9SRU5BTUUKKyNpZm5kZWYgTk9GUklMTFMKKyNpZmRlZiBa UkVOQU1FCisKKy8qIFRoZSBSRU5BTUUgY29tbWFuZCAtIGV4cGFuZGVkIGFuZCBpbXByb3ZlZCBp biA4LjAuMjEyIEFwcmlsIDIwMDYgKi8KKworc3RhdGljIGNoYXIgKiByZW5fc3ViWzRdID0geyBO VUxMLE5VTEwsTlVMTCxOVUxMIH07IC8qIEZvciBSRU5BTUUgL1JFUExBQ0UgKi8KKworaW50IHJl bl9saXN0ID0gMDsJCSAgICAgICAgLyogRGVmYXVsdCBsaXN0aW5nIGFjdGlvbiBmb3IgUkVOQU1F ICovCitpbnQgcmVuX2NvbGwgPSBSRU5YX09WV1I7CQkvKiBEZWZhdWx0IGNvbGxpc2lvbiBhY3Rp b24gKi8KKworaW50CitzaG9yZW5hbWUoKSB7CisgICAgY2hhciAqIHM7CisgICAgc3dpdGNoIChy ZW5fY29sbCkgeworICAgICAgY2FzZSBSRU5YX0ZBSUw6IHMgPSAiZmFpbCI7IGJyZWFrOworICAg ICAgY2FzZSBSRU5YX09WV1I6IHMgPSAib3ZlcndyaXRlIjsgYnJlYWs7CisgICAgICBjYXNlIFJF TlhfU0tJUDogcyA9ICJwcm9jZWVkIjsgYnJlYWs7CisgICAgfQorICAgIHByaW50ZigiIHJlbmFt ZSBjb2xsaXNpb246ICVzXG4iLHMpOworICAgIHByaW50ZigiIHJlbmFtZSBsaXN0OiAgICAgICVz XG4iLHNob3dvZmYocmVuX2xpc3QpKTsKKyAgICByZXR1cm4oMSk7Cit9CisKK2ludAorc2V0cmVu YW1lKCkgewkJCQkvKiBQYXJzZSBTRVQgUkVOQU1FIG9wdGlvbnMgKi8KKyAgICBpbnQgeCwgeTsK KyAgICBpZiAoKHggPSBjbWtleShyZW5hbXNldCxucmVuYW1zZXQsIiIsIiIsIHh4c3RyaW5nKSkg PCAwKQorICAgICAgcmV0dXJuKHgpOworICAgIHN3aXRjaCAoeCkgeworICAgICAgY2FzZSBSRU5f T1ZXOgkJCS8qIENPTExJU0lPTiAqLworCWlmICgoeCA9IGNta2V5KHJfY29sbGlzaW9uLG5yX2Nv bGxpc2lvbiwiIiwiIiwgeHhzdHJpbmcpKSA8IDApCisJICByZXR1cm4oeCk7CisJaWYgKCh5ID0g Y21jZm0oKSkgPCAwKQorCSAgcmV0dXJuKHkpOworCXJlbl9jb2xsID0geDsKKwlicmVhazsKKyAg ICAgIGNhc2UgREVMX0xJUzoJCQkvKiBMSVNUICovCisJcmV0dXJuKHNldG9uKCZyZW5fbGlzdCkp OworICAgIH0KKyAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworfQorCisvKiBSZXZlcnNlIGEgc3Ry aW5nIC0gQXNzdW1lcyBhIHNpbmdsZS1ieXRlIGNoYXJhY3RlciBzZXQgKi8KKworaW50Citnbmly dHMoczEsIHMyLCBsZW4pIGNoYXIgKiBzMSwgKiBzMjsgaW50IGxlbjsgeworICAgIGludCBuLCBt ID0gMDsKKyAgICBpZiAoIXMxKQkJCQkvKiBOdWxsIHNvdXJjZSBwb2ludGVyLCBmYWlsICovCisg ICAgICByZXR1cm4oMCk7CisgICAgbiA9IChpbnQpIHN0cmxlbihzMSk7CisgICAgaWYgKG4gPiBs ZW4tMSkJCQkvKiBTb3VyY2UgbG9uZ2VyIHRoYW4gZGVzdCwgZmFpbCAqLworICAgICAgcmV0dXJu KDApOworICAgIHMyW24tLV0gPSBOVUw7CQkJLyogRGVwb3NpdCBudWxsIGJ5dGUgYXQgZW5kIG9m IGRlc3QgKi8KKyAgICBmb3IgKDsgbiA+PSAwOyBuLS0pIHsJCS8qIENvcHkgdGhlIHJlc3QgYmFj a3dhcmRzICovCisJKnMyKysgPSBzMVtuXTsKKwltKys7CisgICAgfQorICAgIHJldHVybihtKTsK K30KKworLyoKKyAgciBlIG4gYSBtIGUgbyBuIGUKKworICBXb3JrZXIgZnVuY3Rpb24gdG8gcmVu YW1lIG9uZSBmaWxlIGZvciBkb3JlbmFtKCkgKGJlbG93KS4KKyAgICBvbGQgICAgICAgID0gbmFt ZSBvZiBmaWxlIG9yIGRpcmVjdG9yeSB0byBiZSByZW5hbWVkCisgICAgbmV3ICAgICAgICA9IG5l dyBuYW1lIChub3QgcmVxdWlyZWQgZm9yIC9VUFBFUiwgL0xPV0VSLCBhbmQgL1JFUExBQ0UpCisg ICAgcmVwbGFjaW5nICA9IDEgaWYgZG9pbmcgc3RyaW5nIHJlcGxhY2VtZW50IG9uIHRoZSBuYW1l ICAKKyAgICBjYXNpbmcgICAgID0gMSBpZiBjb252ZXJ0aW5nIG5hbWUgdG8gbG93ZXJjYXNlLCAy IGlmIHRvIHVwcGVyY2FzZQorICAgIGFsbCAgICAgICAgPSBpZiBkb2luZyBjYXNlIGNvbnZlcnNp b24gb24gYWxsIG5hbWVzLCBub3QganVzdCBtb25vY2FzZSBvbmVzCisgICAgY29udmVydGluZyA9 IDEgaWYgY29udmVydGluZyBjaGFyYWN0ZXIgc2V0cworICAgIGNzZXQxICAgICAgPSBjaGFyYWN0 ZXIgc2V0IHRvIGNvbnZlcnQgZnJvbSAoRmlsZSBDaGFyYWN0ZXIgU2V0IGluZGV4KQorICAgIGNz ZXQyICAgICAgPSBjaGFyYWN0ZXIgc2V0IHRvIGNvbnZlcnQgdG8gKGRpdHRvLCBzZWUgY2s/eGxh LmgpCisgICAgbGlzdGluZyAgICA9IDEgdG8gc2hvdyByZXN1bHRzIG9mIHJlbmFtZQorICAgIG5v bGlzdCAgICAgPSAxIHRvIGJlIGNvbXBsZXRlbHkgc2lsZW50IChkb24ndCBldmVuIHByaW50IGVy cm9yIG1lc3NhZ2VzKQorICAgIG9wICAgICAgICAgPSAxIG1lYW5zIHNpbXVsYXRlLCAyIG1lYW5z IGNoZWNrIGZvciBjb2xsaXNpb24sIDAgbWVhbnMgcmVuYW1lCisgICAgc2l6ZSAgICAgICA9IGxl bmd0aCBvZiByZXN1bHQgYnVmZmVyLgorICAgIGNvbGxpc2lvbiAgPSBhY3Rpb24gdG8gdGFrZSBp ZiBkZXN0aW5hdGlvbiBmaWxlIGFscmVhZHkgZXhpc3RzOgorICAgICAgICAgICAgICAgICAwID0g ZmFpbAorICAgICAgICAgICAgICAgICAxID0gb3ZlcndyaXRlIGFuZCBzdWNjZWVkCisgICAgICAg ICAgICAgICAgIDIgPSBza2lwIGFuZCBzdWNjZWVkCisgIFJldHVybnM6CisgICAgIDA6IG9uIGZh aWx1cmUgdG8gcmVuYW1lIG9yIHdoZW4gYSBmb3JiaWRkZW4gY29sbGlzaW9uIHdvdWxkIGhhdmUg b2NjdXJyZWQuCisgICAgIDE6IG9uIHN1Y2Nlc3MgKGZpbGUgd2FzIHJlbmFtZWQgb3IgZGlkIG5v dCBuZWVkIHRvIGJlIHJlbmFtZWQpLgorICBOb3RlOgorICAgICBJZiB0aGlzIGNvZGUgaXMgZXZl ciBidWlsdCBvbiBhbnkgcGxhdGZvcm0gdGhhdCBpcyBub3QgVW5peCwgV2luZG93cywKKyAgICAg Vk1TLCBvciBPUy8yLCB0aGlzIHJvdXRpbmUgbWlnaHQgbmVlZCBzb21lIGFkanVzdG1lbnQuCisq LworCisvKiBPcGNvZGVzIGZvciBvcC4uLiAqLworI2RlZmluZSBSRU5fT1BfU0lNIDEJCQkvKiBT aW11bGF0ZSAqLworI2RlZmluZSBSRU5fT1BfQ0hLIDIJCQkvKiBDaGVjayBmb3IgY29sbGlzaW9u cyAqLworCitzdGF0aWMgaW50CityZW5hbWVvbmUob2xkLG5ldywKKwkgIHJlcGxhY2luZyxjYXNp bmcsYWxsLGNvbnZlcnRpbmcsY3NldDEsY3NldDIsCisJICBsaXN0aW5nLG5vbGlzdCxvcCxzaXpl LGNvbGxpc2lvbikKKyAgICBjaGFyICogb2xkLCAqIG5ldzsKKyAgICBpbnQgcmVwbGFjaW5nLGNh c2luZyxhbGwsY29udmVydGluZyxjc2V0MSxjc2V0MiwKKyAgICBsaXN0aW5nLG5vbGlzdCxvcCxz aXplLGNvbGxpc2lvbjsKK3sKKyAgICBjaGFyIGJ1ZltDS01BWFBBVEhdOwkJLyogVGVtcG9yYXJ5 IGZpbGVuYW1lIGJ1ZmZlciAqLworICAgIGNoYXIgb3V0W0NLTUFYUEFUSF07CQkvKiBCdWZmZXIg Zm9yIG5ldyBuYW1lICovCisgICAgY2hhciBkaXJbQ0tNQVhQQVRIXTsJCS8qIERlc3RpbmF0aW9u IGRpcmVjdG9yeSAqLworICAgIGNoYXIgcGF0W0NLTUFYUEFUSF07CQkvKiBQYXRoIHNlZ21lbnQg b24gb2xkIGZpbGVuYW1lICovCisKKyAgICBjaGFyICogZGVzdGRpcjsJCQkvKiBEZXN0aW5hdGlv biBkaXJlY3RvcnksIGlmIGFueSAqLworICAgIGNoYXIgKiBzcmNwYXRoOwkJCS8qIFNvdXJjZSBw YXRoLCBpZiBhbnkgKi8KKyAgICBpbnQgcmMgPSAxLCBmbGFnID0gMCwgc2tpcCA9IDA7CS8qIENv bnRyb2wgKi8KKyAgICBpbnQgaG9ub3JjYXNlID0gMCwgcmVwbGFjZWQgPSAwOworICAgIGludCBh bmNob3IgPSAwOwkJCS8qIDEgPSBiZWdpbm5pbmcsIDIgPSBlbmQgKi8KKyAgICBpbnQgb2NjdXIg PSAwOwkJCS8qIE9jY3VycmVuY2UgKi8KKyAgICBpbnQgbWludXMgPSAwOwkJCS8qIE9jY3VycmVu Y2UgaXMgbmVnYXRpdmUgKi8KKyAgICBpbnQgYWxsYnV0ID0gMDsJCQkvKiBPY2N1cnJlbmNlIGlz ICJhbGwgYnV0IiAqLworICAgIGludCBhcmcyaXNmaWxlID0gMDsJCQkvKiBBcmcyICgibmV3Iikg aXMgYSBmaWxlbmFtZSAqLworICAgIAorICAgIGRlYnVnKEYxMTAsIlJFTkFNRU9ORSBvbGQiLG9s ZCwwKTsKKyAgICBkZWJ1ZyhGMTEwLCJSRU5BTUVPTkUgbmV3IixuZXcsMCk7CisgICAgZGVidWco RjExMCwiUkVOQU1FT05FIHJlbl9zdWJbMF0iLHJlbl9zdWJbMF0sMCk7CisgICAgZGVidWcoRjEx MCwiUkVOQU1FT05FIHJlbl9zdWJbMV0iLHJlbl9zdWJbMV0sMCk7CisgICAgZGVidWcoRjExMCwi UkVOQU1FT05FIHJlbl9zdWJbMl0iLHJlbl9zdWJbMl0sMCk7CisKKyAgICBpZiAob3AgPT0gUkVO X09QX1NJTSAmJiAhbm9saXN0KQkvKiBGb3IgY29udmVuaWVuY2UgKi8KKyAgICAgIGxpc3Rpbmcg PSAxOworI2lmbmRlZiBOT1NQTAorICAgIGhvbm9yY2FzZSA9IGlucGNhc1tjbWRsdmxdOwkJLyog SW5oZXJpdCBTRVQgQ0FTRSB2YWx1ZSAqLworI2Vsc2UKKyNpZmRlZiBVTklYCisgICAgaG9ub3Jj YXNlID0gMTsKKyNlbHNlCisgICAgaG9ub3JjYXNlID0gMDsKKyNlbmRpZgkvKiBVTklYICovCisj ZW5kaWYJLyogTk9TUEwgKi8KKworICAgIGlmICghb2xkKSBvbGQgPSAiIjsJCQkvKiBJbiBjYXNl IG9mIGJhZCBhcmdzICovCisgICAgaWYgKCFuZXcpIG5ldyA9ICIiOworICAgIGlmICghKm9sZCkg cmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKyAgICBja3N0cm5jcHkob3V0LG5ldyxDS01BWFBBVEgpOwkv KiBTbyB3ZSBkb24ndCB3cml0ZSBpbnRvICovCisgICAgbmV3ID0gb3V0OwkJCQkvKiBvdXIgYXJn dW1lbnQuLi4gKi8KKyAgICBzaXplID0gQ0tNQVhQQVRIOworCisgICAgcGF0WzBdID0gTlVMOwkJ CS8qIEFzc3VtZSBubyBwYXRoIGluIHNvdXJjZSBmaWxlLi4gKi8KKyAgICBzcmNwYXRoID0gcGF0 OworICAgIHsKKwlpbnQgbjsJCQkJLyogSWYgdGhlIG9sZCBuYW1lIGluY2x1ZGVzIGEgcGF0aCAq LworCW4gPSAoaW50KXN0cmxlbihvbGQpIC0gMTsJLyogcHV0IGl0IGluIGEgc2VwYXJhdGUgcGxh Y2UuICAgICAqLworCWZvciAoOyBuID49IDA7IG4tLSkgewkJLyogV2UgYXJlIHJlbmFtaW5nIHRo ZSBmaWxlIG9ubHkuICAqLworCSAgICBpZiAoSVNESVJTRVAob2xkW25dKSkgeworCQlja3N0cm5j cHkocGF0LG9sZCxDS01BWFBBVEgpOworCQlwYXRbbisxXSA9IE5VTDsKKwkJb2xkID0gb2xkK24r MTsKKwkJYnJlYWs7CisJICAgIH0KKwl9CisgICAgfQorICAgIGRlYnVnKEYxMTAsIlJFTkFNRU9O RSBvbGQgMiIsb2xkLDApOworICAgIGRlYnVnKEYxMTAsIlJFTkFNRU9ORSBwYXQgMiIscGF0LDAp OworCisgICAgZGlyWzBdID0gTlVMOwkJCS8qIEFzc3VtZSBubyBkZXN0aW5hdGlvbiBkaXJlY3Rv cnkgKi8KKyAgICBkZXN0ZGlyID0gZGlyOworICAgIGlmICgqbmV3KSB7CQkJCS8qIElmIEFyZzIg Z2l2ZW4gKi8KKwlpZiAoaXNkaXIobmV3KSkgewkJLyogSWYgaXQncyBhIGRpcmVjdG9yeSAqLwor CSAgICBja3N0cm5jcHkoZGlyLG5ldyxDS01BWFBBVEgpOyAvKiBwdXQgaXQgaGVyZSAqLworCX0g ZWxzZSB7CQkJLyogb3RoZXJ3aXNlICovCisJICAgIGFyZzJpc2ZpbGUrKzsJCS8qIGZsYWcgdGhh dCBpdCdzIGEgZmlsZW5hbWUgKi8KKwl9ICAgIAorICAgIH0KKyAgICBpZiAoIWNhc2luZyAmJiAh cmVwbGFjaW5nICYmICFjb252ZXJ0aW5nKSB7CisJaWYgKCEqbmV3KQorCSAgcmV0dXJuKHN1Y2Nl c3MgPSAwKTsKKwlpZiAoIWFyZzJpc2ZpbGUpIHsJCS8qIERlc3RpbmF0aW9uIGlzIGEgZGlyZWN0 b3J5PyAqLworCSAgICBpZiAoIWlzZGlyKG9sZCkpIHsJCS8qIGFuZCBzb3VyY2UgaXMgbm90PyAq LworI2lmbmRlZiBWTVMKKwkJaW50IG4sIHggPSAwOwkJLyogQ29uY2F0ZW5hdGUgdGhlbSAqLwor CQlpZiAoKG4gPSBzdHJsZW4obmV3KSkgPiAwKSAvKiBzbyB3ZSBjYW4gY2hlY2sgZm9yICovCisJ CSAgaWYgKElTRElSU0VQKG5ld1tuLTFdKSkgIC8qIGNvbGxpc2lvbnMuICovCisJCSAgICB4Kys7 CisJCWNrbWFrbXNnKGJ1ZixzaXplLG5ldyx4ID8gIiIgOiAiLyIsIG9sZCwgIiIpOworI2Vsc2UK KwkJY2ttYWttc2coYnVmLHNpemUsbmV3LCBvbGQsIE5VTEwsIE5VTEwpOworI2VuZGlmCS8qIFZN UyAqLworCQlkZWJ1ZyhGMTEwLCJSRU5BTUVPTkUgbmV3IG5ldyIsbmV3LDApOwkJCisJCW5ldyA9 IGJ1ZjsKKwkJc2l6ZSA9IENLTUFYUEFUSDsKKwkgICAgfQorCX0KKyAgICB9IGVsc2UgaWYgKCpu ZXcpIHsJCQkvKiBEaXJlY3RvcnkgdG8gbW92ZSBmaWxlIHRvICovCisJaW50IG4sIHggPSAwOwkJ CS8qIGFmdGVyIGNoYW5naW5nIGl0cyBuYW1lICovCisJaWYgKCFpc2RpcihuZXcpKQorCSAgcmV0 dXJuKHN1Y2Nlc3MgPSAwKTsKKyNpZm5kZWYgVk1TCisJaWYgKChuID0gc3RybGVuKG5ldykpID4g MCkKKwkgIGlmIChJU0RJUlNFUChuZXdbbi0xXSkpCisJICAgIHgrKzsKKwlja21ha21zZyhkaXIs Q0tNQVhQQVRILG5ldyx4ID8gIiIgOiAiLyIsICIiLCAiIik7CisjZWxzZQorCWNrc3RybmNweShk aXIsbmV3LENLTUFYUEFUSCk7CisjZW5kaWYJLyogVk1TICovCisgICAgfQorCisjaWZuZGVmIE5P Q1NFVFMKKyNpZm5kZWYgTk9VTklDT0RFCisgICAgaWYgKGNvbnZlcnRpbmcpIHsKKwluZXcgPSBj dnRzdHJpbmcob2xkLGNzZXQxLGNzZXQyKTsKKyAgICB9CisjZW5kaWYJLyogTk9VTklDT0RFICov CisjZW5kaWYJLyogTk9DU0VUUyAqLworCisgICAgaWYgKHJlcGxhY2luZykgewkJCS8qIFJlcGxh Y2luZyBzdHJpbmdzICovCisJaW50IHRvZG8gPSAwOworCWludCBsZW4wLCBsZW4xLCBsZW4yOwor CWNoYXIgYywgKnAsICpzLCAqYnBbM107CisKKwlicFswXSA9IG9sZDsJCQkvKiBPcmlnaW5hbCBu YW1lICovCisJYnBbMV0gPSByZW5fc3ViWzBdOwkJLyogU3RyaW5nIHRvIGJlIHJlcGxhY2VkICov CisJYnBbMl0gPSByZW5fc3ViWzFdOwkJLyogV2hhdCB0byByZXBsYWNlIGl0IHdpdGggKi8KKwlp ZiAoIWJwWzJdKSBicFsyXSA9ICIiOworCisJbGVuMCA9IChpbnQpc3RybGVuKGJwWzBdKTsJLyog bGVuZ3RoIG9mIG9yaWdpbmFsIGZpbGVuYW1lICovCisJbGVuMSA9IChpbnQpc3RybGVuKGJwWzFd KTsJLyogbGVuZ3RoIG9mIHRhcmdldCBzdWJzdHJpbmcgKi8KKwlsZW4yID0gKGludClzdHJsZW4o YnBbMl0pOwkvKiBMZW5ndGggb2YgcmVwbGFjZW1lbnQgc3RyaW5nICovCisKKwlpZiAocmVuX3N1 YlsyXSkgewkJLyogT3B0aW9uYWwgb3B0aW9ucyAqLworCSAgICBwID0gcmVuX3N1YlsyXTsKKwkg ICAgd2hpbGUgKChjID0gKnArKykpIHsKKwkJc3dpdGNoIChjKSB7CisJCSAgY2FzZSAnXic6CisJ CSAgICBhbmNob3IgPSAxOyBvY2N1ciA9IDA7IG1pbnVzID0gMDsgYWxsYnV0ID0gMDsgYnJlYWs7 CisJCSAgY2FzZSAnJCc6CisJCSAgICBhbmNob3IgPSAyOyBvY2N1ciA9IDA7IG1pbnVzID0gMDsg YWxsYnV0ID0gMDsgYnJlYWs7CisJCSAgY2FzZSAnQSc6IGhvbm9yY2FzZSA9IDE7IG1pbnVzID0g MDsgYWxsYnV0ID0gMDsgYnJlYWs7CisJCSAgY2FzZSAnYSc6IGhvbm9yY2FzZSA9IDA7IG1pbnVz ID0gMDsgYWxsYnV0ID0gMDsgYnJlYWs7CisJCSAgY2FzZSAnLSc6IG1pbnVzID0gMTsgYnJlYWs7 CisJCSAgY2FzZSAnfic6IGFsbGJ1dCA9IDE7IGJyZWFrOworCQkgIGRlZmF1bHQ6CisJCSAgICBp ZiAoaXNkaWdpdChjKSkgeworCQkJb2NjdXIgPSBjIC0gJzAnOworCQkJaWYgKG1pbnVzKSBvY2N1 ciA9IDAgLSBvY2N1cjsKKwkJCWFuY2hvciA9IDA7CisJCSAgICB9CisJCSAgICBtaW51cyA9IDA7 CisJCX0KKwkgICAgfQorCX0KKwlpZiAoYW5jaG9yKSB7CQkJLyogQW5jaG9yZWQgcmVwbGFjZW1l bnQuLi4gKi8KKwkgICAgeSA9IGxlbjAgLSBsZW4xOworCSAgICBpZiAoeSA+IDApIHsKKwkJaW50 IHg7CisJCXN3aXRjaCAoYW5jaG9yKSB7CisJCSAgY2FzZSAxOgkJLyogQW5jaG9yZWQgYXQgYmVn aW5uaW5nICovCisJCSAgICBpZiAoIWNrc3RyY21wKGJwWzFdLGJwWzBdLGxlbjEsaG9ub3JjYXNl KSkgeworCQkJeCA9IGNrc3RybmNweShuZXcsYnBbMl0sc2l6ZSk7CisJCQkoVk9JRCkgY2tzdHJu Y3B5KG5ldyt4LGJwWzBdK2xlbjEsc2l6ZS14KTsKKwkJCXJlcGxhY2VkID0gMTsKKwkJICAgIH0K KwkJICAgIGJyZWFrOworCQkgIGNhc2UgMjoJCS8qIEFuY2hvcmVkIGF0IGVuZCAqLworCQkgICAg aWYgKCFja3N0cmNtcChicFsxXSxicFswXSt5LGxlbjEsaG9ub3JjYXNlKSkgeworCQkJeCA9IGNr c3RybmNweShuZXcsYnBbMF0seSsxKTsKKwkJCShWT0lEKSBja3N0cm5jcHkobmV3K3ksYnBbMl0s c2l6ZS14KTsKKwkJCXJlcGxhY2VkID0gMTsKKwkJICAgIH0KKwkJICAgIGJyZWFrOworCQl9CisJ ICAgIH0KKwkgICAgaWYgKCFyZXBsYWNlZCkgeworCQlja3N0cm5jcHkobmV3LG9sZCxzaXplKTsg LyogS2VlcCBvbGQgbmFtZSAqLworCQlyZXBsYWNlZCA9IDE7CisJICAgIH0KKwl9IGVsc2UgewkJ CS8qIFJlcGxhY2UgYWxsIG9jY3VycmVuY2VzICovCisJICAgIGludCBqLCBuID0gMDsJCS8qIG9y IGEgcGFydGljdWxhciBvY2N1cnJlbmNlICovCisJICAgIGNoYXIgYzsKKwkgICAgaW50IHggPSAw OworCSAgICBjaGFyICogczAgPSBOVUxMLCAqIHMxID0gTlVMTCwgKiBzMiA9IE5VTEw7CisJICAg IHAgPSBuZXc7CQkJLyogUG9pbnRlciB0byBuZXcgbmFtZSAqLworCisJICAgIGlmIChvY2N1ciA8 IDApIHsJCS8qIG50aCBvY2N1cnJlbmNlIGZyb20gdGhlIHJpZ2h0ICovCisJCW9jY3VyID0gMCAt IG9jY3VyOworCQlzMCA9IChjaGFyICopbWFsbG9jKGxlbjArMSk7IC8qIFJldmVyc2Ugb3JpZ2lu YWwgc3RyaW5nICovCisJCWlmIChzMCkgeworCQkgICAgKFZPSUQpIGduaXJ0cyhicFswXSxzMCxs ZW4wKzEpOworCQkgICAgYnBbMF0gPSBzMDsKKwkJfSBlbHNlIHJldHVybigwKTsgCisJCXMxID0g KGNoYXIgKiltYWxsb2MobGVuMSsxKTsgLyogUmV2ZXJzZSB0YXJnZXQgc3RyaW5nICovCisJCWlm IChzMSkgeworCQkgICAgKFZPSUQpIGduaXJ0cyhicFsxXSxzMSxsZW4xKzEpOworCQkgICAgYnBb MV0gPSBzMTsKKwkJfSBlbHNlIHJldHVybigwKTsgCisJCXMyID0gKGNoYXIgKiltYWxsb2MobGVu MisxKTsgLyogUmV2ZXJzZSByZXBsYWNlbWVudCBzdHJpbmcgKi8KKwkJaWYgKHMyKSB7CisJCSAg ICAoVk9JRCkgZ25pcnRzKGJwWzJdLHMyLGxlbjIrMSk7CisJCSAgICBicFsyXSA9IHMyOworCQl9 IGVsc2UgcmV0dXJuKDApOyAKKwkJZGVidWcoRjExMSwiUkVOQU1FT05FIHMwIixzMCxsZW4wKTsK KwkJZGVidWcoRjExMSwiUkVOQU1FT05FIHMxIixzMSxsZW4xKTsKKwkJZGVidWcoRjExMSwiUkVO QU1FT05FIHMyIixzMixsZW4yKTsKKwkgICAgfQorCSAgICBzID0gYnBbMF07CQkJLyogUG9pbnRl ciB0byBvbGQgbmFtZSAqLworCSAgICBwID0gbmV3OwkJCS8qIFBvaW50ZXIgdG8gbmV3IG5hbWUg Ki8KKwkgICAgaiA9IGxlbjAgLSBsZW4xICsgMTsJLyogSG93IG11Y2ggdG8gc2NhbiAqLworCSAg ICB3aGlsZSAoai0tID4gMCkgewkJLyogRm9yIGVhY2ggY2hhcmFjdGVyLi4uICovCisJCWlmICgh Y2tzdHJjbXAoYnBbMV0scyxsZW4xLGhvbm9yY2FzZSkpIHsgLyogTWF0Y2g/ICovCisJCSAgICBu Kys7CQkvKiBPY2N1cnJlbmNlIGNvdW50ZXIgKi8KKwkJICAgIHRvZG8gPSAob2NjdXIgPT0gMCkg fHwKKwkJCSghYWxsYnV0ICYmIG4gPT0gb2NjdXIpIHx8CisJCQkoYWxsYnV0ICYmIG4gIT0gb2Nj dXIpOworCQkgICAgaWYgKCF0b2RvKSB7CS8qIERlc2lyZWQgb2NjdXJyZW5jZT8gKi8KKwkJCXNp emUgLT0gY2tzdHJuY3B5KHAsYnBbMV0sc2l6ZSk7IC8qIE5vLi4uICovCisJCQlwICs9IGxlbjE7 CS8qIENvcHkgdGFyZ2V0IHN0cmluZyAqLworCQkJcyArPSBsZW4xOwkvKiBpbnN0ZWFkIG9mIHJl cGxhY2VtZW50IHN0cmluZyAqLworCQkJY29udGludWU7CisJCSAgICB9CisJCSAgICBpZiAobGVu MikgewkJLyogSWYgcmVwbGFjZW1lbnQgc3RyaW5nIG5vdCBlbXB0eSAqLworCQkJc2l6ZSAtPSBj a3N0cm5jcHkocCxicFsyXSxzaXplKTsgLyogQ29weSBpdCAqLworCQkJcCArPSBsZW4yOworCQkg ICAgfQorCQkgICAgcyArPSBsZW4xOwkJLyogQWR2YW5jZSBzb3VyY2UgcG9zaXRpb24gKi8KKwkJ fSBlbHNlIHsJCS8qIE5vIG1hdGNoICovCisJCSAgICAqcCsrID0gKnMrKzsJLyoganVzdCBjb3B5 IHRoaXMgY2hhcmFjdGVyICovCisJCSAgICBzaXplLS07CisJCX0KKwkgICAgfQorCSAgICB3aGls ZSAoKCpwKysgPSAqcysrKSk7CS8qIERvbmUgY29weSB0aGUgcmVzdCAqLworCSAgICByZXBsYWNl ZCA9IDE7CQkvKiBSZW1lbWJlciB3ZSBjaGFuZ2VkIHRoZSBuYW1lICovCisJICAgIGlmIChzMCkg ewkJCS8qIFdlcmUgd2UgZG9pbmcgImFsbCBidXQiPyAqLworCQlkZWJ1ZyhGMTEwLCJSRU5BTUVP TkUgbmV3MSIsbmV3LDApOworCQl4ID0gKGludClzdHJsZW4obmV3KTsJLyogVW5yZXZlcnNlIHRo ZSByZXN1bHQgKi8KKwkJaWYgKChwID0gKGNoYXIgKiltYWxsb2MoeCsyKSkpIHsKKwkJICAgIChW T0lEKSBnbmlydHMobmV3LHAseCsyKTsKKwkJICAgIGRlYnVnKEYxMTAsIlJFTkFNRU9ORSBuZXcy IixuZXcsMCk7CisJCSAgICBja3N0cm5jcHkobmV3LHAseCsyKTsKKwkJICAgIGZyZWUocCk7CisJ CX0KKwkJaWYgKHMwKSBmcmVlKHMwKTsJLyogRnJlZSB0aGUgdGVtcG9yYXJ5IHN0cmluZ3MgKi8K KwkJaWYgKHMxKSBmcmVlKHMxKTsKKwkJaWYgKHMyKSBmcmVlKHMyKTsKKwkJZGVidWcoRjExMCwi UkVOQU1FT05FIG5ldzMiLG5ldywwKTsKKwkgICAgfQorCX0KKyAgICB9CisgICAgaWYgKGNhc2lu ZykgewkJCS8qIENoYW5naW5nIGNhc2U/ICovCisJY2hhciBjLCAqIHQ7CQkJLyogU2VlIGlmIG1p eGVkIGNhc2UuICovCisJaWYgKCFyZXBsYWNlZCkKKwkgIGNrc3RybmNweShuZXcsb2xkLHNpemUp OwkvKiBDb3B5IG9sZCBuYW1lIHRvIG5ldyBuYW1lICovCisJdCA9IG5ldzsKKwl3aGlsZSAoKGMg PSAqdCsrKSkgeworCSAgICBpZiAoaXNsb3dlcihjKSkgZmxhZyB8PSAxOyAvKiBIYXZlIGEgbG93 ZXJjYXNlIGxldHRlciAqLworCSAgICBlbHNlIGlmIChpc3VwcGVyKGMpKSBmbGFnIHw9IDI7IC8q IEhhdmUgYW4gdXBwZXJjYXNlIGxldHRlciAqLworCSAgICBpZiAoZmxhZyA9PSAzKSBicmVhazsJ LyogSGF2ZSBhIG1peGVkLWNhc2UgbmFtZSAqLworCX0KKwlpZiAoYWxsIHx8IGZsYWcgPCAzKSB7 CS8qIE5vdCBza2lwcGluZyBvciBub3QgbWl4ZWQgY2FzZSAqLworCSAgICBpZiAoY2FzaW5nID09 IDEgJiYgZmxhZyAhPSAxKSAvKiBDaGFuZ2UgY2FzZSB0byBsb3dlciAqLworCSAgICAgIChWT0lE KSBja2xvd2VyKG5ldyk7CisJICAgIGVsc2UgaWYgKGNhc2luZyA9PSAyICYmIGZsYWcgIT0gMikg LyogQ2hhbmdlIGNhc2UgdG8gdXBwZXIgKi8KKwkgICAgICAoVk9JRCkgY2t1cHBlcihuZXcpOwor CX0KKyAgICB9CisgICAgZGVidWcoRjExMCwiWFhYIDEgbmV3IixuZXcsMCk7CisgICAgZGVidWco RjExMCwiWFhYIDEgb2xkIixvbGQsMCk7CisgICAgZGVidWcoRjExMCwiWFhYIDEgc3JjcGF0aCIs c3JjcGF0aCwwKTsKKyAgICBkZWJ1ZyhGMTEwLCJYWFggMSBkZXN0ZGlyIixkZXN0ZGlyLDApOwor CisgICAgaWYgKCpkZXN0ZGlyICYmICFhcmcyaXNmaWxlKSB7CS8qIE1vdmluZyB3aXRob3V0IHJl bmFtaW5nICovCisJY2tzdHJuY2F0KHNyY3BhdGgsb2xkLENLTUFYUEFUSCk7CisJb2xkID0gc3Jj cGF0aDsKKwluZXcgPSBkZXN0ZGlyOworICAgIH0gZWxzZSBpZiAoKmRlc3RkaXIgfHwgKnNyY3Bh dGgpIHsJLyogV2VyZSB0aGVyZSBhbnkgcGF0aG5hbWVzPyAqLworCWNoYXIgdG1wW0NLTUFYUEFU SF07CisJY2ttYWttc2codG1wLENLTUFYUEFUSCxzcmNwYXRoLG9sZCxOVUxMLE5VTEwpOworCWNr c3RybmNweShvbGQsdG1wLENLTUFYUEFUSCk7CisJaWYgKCpkZXN0ZGlyKSB7CQkJLyogRGlyZWN0 b3J5LXRvLW1vdmUtdG8gZ2l2ZW4/ICovCisJICAgIGNrc3RybmNhdChkZXN0ZGlyLG5ldyxDS01B WFBBVEgpOworCSAgICBuZXcgPSBkZXN0ZGlyOworCX0gZWxzZSBpZiAoKnNyY3BhdGggJiYgIWFy ZzJpc2ZpbGUpIHsgLyogT3Igd2FzIHRoZXJlIGEgc291cmNlIHBhdGg/ICovCisJICAgIGNrc3Ry bmNhdChzcmNwYXRoLG5ldyxDS01BWFBBVEgpOworCSAgICBuZXcgPSBzcmNwYXRoOworCX0KKyAg ICB9CisgICAgZGVidWcoRjExMCwiWFhYIDIiLG5ldywwKTsKKworICAgIHNraXAgPSAwOwkJCQkv KiBDYW4gd2Ugc2tpcCB0aGlzIG9uZT8gKi8KKyNpZmRlZiBDT01NRU5UCisgICAgaWYgKGNhc2lu ZyAmJiAhcmVwbGFjZWQpIHsKKwlza2lwID0gKCgoYWxsID09IDApICYmIChmbGFnID09IDMpKSB8 fCAoZmxhZyA9PSBjYXNpbmcpKSA/IDEgOiAwOworCWlmICghc2tpcCAmJiBkZXN0ZGlyKSBza2lw ID0gMDsKKyAgICB9CisjZW5kaWYJLyogQ09NTUVOVCAqLworICAgIGlmICghc2tpcCkgeworCWlm ICghY2tzdHJjbXAob2xkLG5ldywtMSwxKSkKKwkgIHNraXAgPSAxOworICAgIH0KKyAgICBpZiAo b3AgPT0gMCAmJiAhc2tpcCAmJiAoY29sbGlzaW9uICE9IFJFTlhfT1ZXUikpIHsKKwlpZiAoemNo a2kobmV3KSA+IChDS19PRkZfVCktMSkgeyAvKiBOZXcgZmlsZSBhbHJlYWR5IGV4aXN0cz8gICov CisJICAgIHN3aXRjaCAoY29sbGlzaW9uKSB7CS8qIFllcywgdGFrZSBzcGVjaWZpZWQgYWN0aW9u ICovCisJICAgICAgY2FzZSBSRU5YX1NLSVA6CQkvKiBTa2lwIHRoaXMgb25lIGFuZCBwcm9jZWVk ICAqLworCQlza2lwID0gMjsKKwkJYnJlYWs7CisJICAgICAgY2FzZSBSRU5YX0ZBSUw6CQkvKiBP ciBmYWlsLiAqLworCQlza2lwID0gMzsKKwkJaWYgKCFsaXN0aW5nICYmICFub2xpc3QpCisJCSAg cHJpbnRmKCI/RmlsZSBhbHJlYWR5IGV4aXN0czogJXNcbiIsbmV3KTsKKwkgICAgfQorCX0KKyAg ICB9CisgICAgZGVidWcoRjExMCwiUkVOQU1FT05FIG5ldyIsbmV3LDApOworICAgIGRlYnVnKEYx MDEsIlJFTkFNRU9ORSBmbGFnIiwiIixmbGFnKTsJCisgICAgZGVidWcoRjEwMSwiUkVOQU1FT05F IHNraXAiLCIiLHNraXApOwkKKyAgICBkZWJ1ZyhGMTAwLCJSRU5BTUVPTkUgLS0tLS0tLS0tLS0t LS0tLSIsIiIsMCk7CisKKyAgICBpZiAoc2tpcCA9PSAzKSB7CisJaWYgKGxpc3RpbmcpIHByaW50 ZigiJXMgPT4gJXMgKFNLSVBQRUQ6ICVzIGFscmVhZHkgZXhpc3RzKVxuIiwKKwkJCSAgICBvbGQs bmV3LG5ldyk7CisJcmMgPSAwOworICAgIH0gZWxzZSBpZiAoc2tpcCkgewkJCS8qIFNraXBwaW5n IHRoaXMgb25lICovCisJaWYgKGxpc3RpbmcpIHByaW50ZigiJXMgPT4gJXMgKCVzKVxuIiwKKwkJ CSAgICBvbGQsbmV3LAorCQkJICAgIChza2lwID09IDIpID8gIkNPTExJU0lPTjogU0tJUFBFRCIg OiAiU0tJUFBFRCIpOworICAgIH0gZWxzZSB7CQkJCS8qIEhhdmUgdG8gcmVuYW1lIHRoaXMgb25l ICovCisJaWYgKG9wID09IFJFTl9PUF9DSEspIHsJCS8qIENoZWNraW5nIGZvciBjb2xsaXNpb25z ICovCisJICAgIHJldHVybigoemNoa2kobmV3KSA+IChDS19PRkZfVCktMSkgPyAwIDogMSApOwor CX0gZWxzZSBpZiAob3AgPT0gUkVOX09QX1NJTSkgewkvKiBTaW11bGF0aW5nICovCisJICAgIGlm IChsaXN0aW5nKSBwcmludGYoIiVzID0+ICVzIChTSU1VTEFURUQpXG4iLG9sZCxuZXcpOworCX0g ZWxzZSB7CQkJLyogUmVhbGx5IHJlbmFtaW5nICovCisJICAgIGlmIChsaXN0aW5nKSBwcmludGYo IiVzID0+ICVzICIsb2xkLG5ldyk7CisJICAgIGlmICh6cmVuYW1lKG9sZCxuZXcpIDwgMCkgewor CQlyYyA9IDA7CisJCWlmIChsaXN0aW5nKQorCQkgIHByaW50ZigiKEZBSUxFRDogJXMpXG4iLGNr X2VycnN0cigpKTsKKwkJZWxzZSBpZiAoIW5vbGlzdCkKKwkJICBwcmludGYoIj8lc1xuIixja19l cnJzdHIoKSk7CisJICAgIH0gZWxzZSB7CisJCWlmIChsaXN0aW5nKSBwcmludGYoIihPSylcbiIp OworCSAgICB9CisJfQorICAgIH0KKyAgICByZXR1cm4oc3VjY2VzcyA9IHJjKTsgIC8qIFN1Y2Nl ZWRzIGFsc28gaWYgbm90aGluZyBuZWVkZWQgdG8gYmUgcmVuYW1lZCAqLworfQorCitpbnQKK2Rv cmVuYW0oKSB7CisjaWZuZGVmIE5PQ1NFVFMKKyNpZm5kZWYgTk9VTklDT0RFCisgICAgZXh0ZXJu IGludCBuZmlsYzsKKyAgICBleHRlcm4gc3RydWN0IGtleXRhYiBmY3N0YWJbXTsKKyAgICBleHRl cm4gc3RydWN0IGNzaW5mbyBmY3NpbmZvW107CisjZW5kaWYJLyogTk9VTklDT0RFICovCisjZW5k aWYJLyogTk9DU0VUUyAqLworICAgIGludCBjc2V0MSA9IDAsIGNzZXQyID0gMDsKKworICAgIGlu dCBpLCB4LCB6LCBmbiwgbGlzdGluZyA9IDAsIGhhdmVuYW1lID0gMCwgd2lsZCA9IDAsIHJjID0g MSwgbm9hcmcgPSAwOworICAgIGludCBub2xpc3QgPSAwLCBhbGwgPSAwLCBjYXNpbmcgPSAwLCBy ZXBsYWNpbmcgPSAwLCBnZXR2YWwgPSAwLCBzaW0gPSAwOworICAgIGludCBjb252ZXJ0aW5nID0g MCwgY29sbGlzaW9uID0gMDsKKworICAgIGNoYXIgYzsKKyAgICBzdHJ1Y3QgRkRCIHN3LCBmaTsK KworICAgIGNvbGxpc2lvbiA9IHJlbl9jb2xsOwkJLyogSW5oZXJpdCBTRVQgUkVOQU1FIENPTExJ U0lPTiAqLworICAgIGxpc3RpbmcgPSByZW5fbGlzdDsJCQkvKiBJbmhlcmVpdCBTRVQgUkVOQU1F IExJU1QgKi8KKworICAgIGlmIChyZW5fc3ViWzBdKSBtYWtlc3RyKCYocmVuX3N1YlswXSksTlVM TCk7CisgICAgaWYgKHJlbl9zdWJbMV0pIG1ha2VzdHIoJihyZW5fc3ViWzFdKSxOVUxMKTsKKyAg ICBpZiAocmVuX3N1YlsyXSkgbWFrZXN0cigmKHJlbl9zdWJbMl0pLE5VTEwpOworICAgIGxpbmVb MF0gPSBOVUw7CisgICAgdG1wYnVmWzBdID0gTlVMOworCisgICAgY21mZGJpKCZzdywgICAgICAg ICAgICAgICAgICAgICAgICAgLyogMXN0IEZEQiAtIHN3aXRjaGVzICovCisgICAgICAgICAgIF9D TUtFWSwgICAgICAgICAgICAgICAgICAgICAgLyogZmNvZGUgKi8KKyAgICAgICAgICAgIkZpbGVu YW1lIG9yIHN3aXRjaCIsICAgICAgICAvKiBobHBtc2cgKi8KKyAgICAgICAgICAgIiIsICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBkZWZhdWx0ICovCisgICAgICAgICAgICIiLCAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KKyAgICAgICAgICAgbnJl bmFtc3csCQkJLyogYWRkdGwgbnVtZXJpYyBkYXRhIDE6IHRibCBzaXplICovCisgICAgICAgICAg IDQsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDI6IDQg PSBjbXN3aSAqLworICAgICAgICAgICB4eHN0cmluZywgICAgICAgICAgICAgICAgICAgIC8qIFBy b2Nlc3NpbmcgZnVuY3Rpb24gKi8KKyAgICAgICAgICAgcmVuYW1zdywgICAgICAgICAgICAgICAg ICAgICAvKiBLZXl3b3JkIHRhYmxlICovCisgICAgICAgICAgICZmaSAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogUG9pbnRlciB0byBuZXh0IEZEQiAqLworICAgICAgICAgICApOworCisgICAg Y21mZGJpKCZmaSwgICAgICAgICAgICAgICAgICAgICAgICAgLyogMm5kIEZEQiAtIGZpbGUgb3Ig ZGlyZWN0b3J5IG5hbWUgKi8KKyAgICAgICAgICAgX0NNSUZJLCAgICAgICAgICAgICAgICAgICAg ICAvKiBmY29kZSAqLworICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IGhscG1zZyAqLworICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRl ZmF1bHQgKi8KKyAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0 bCBzdHJpbmcgZGF0YSAqLworICAgICAgICAgICAzLCAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIEZsYWdzICovCisgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog MCA9IFBhcnNlIGZpbGUgb3IgZGlyZWN0b3J5IG5hbWVzICovCisgICAgICAgICAgIHh4c3RyaW5n LAorICAgICAgICAgICBOVUxMLAorICAgICAgICAgICBOVUxMCisgICAgICAgICAgICk7CisKKyAg ICBpZiAoY21mbGdzID09IDEpIHsKKwlwcmludGYoIj9GaWxlIG9yIGRpcmVjdG9yeSBuYW1lIHJl cXVpcmVkXG4iKTsKKwlyZXR1cm4oLTkpOworICAgIH0KKyAgICB3aGlsZSAoIWhhdmVuYW1lKSB7 CisJbm9hcmcgPSAwOworICAgICAgICB4ID0gY21mZGIoJnN3KTsgICAgICAgICAgICAgICAgIC8q IFBhcnNlIHNvbWV0aGluZyAqLworCWlmICh4ID09IC0zKSB7CQkJLyogVGhleSBoaXQgRW50ZXIg cHJlbWF0dXJlbHkgKi8KKwkgICAgcHJpbnRmKCI/Q29tbWFuZCBpbmNvbXBsZXRlXG4iKTsKKwkg ICAgcmV0dXJuKC05KTsKKwl9IGVsc2UgaWYgKHggPCAwKSB7CQkvKiBPdGhlciBlcnJvciAqLwor CSAgICBpZiAoeCA9PSAtMSkKKwkgICAgICByZXR1cm4oeCk7CisgICAgICAgICAgICBpZiAoaXN3 aWxkKGF0bWJ1ZikgJiYgbnp4cGFuZChhdG1idWYsbnp4b3B0cykgPT0gMCkKKyAgICAgICAgICAg ICAgcHJpbnRmKCI/Tm8gZmlsZXMgbWF0Y2g6ICVzXG4iLGJyc3RyaXAoYXRtYnVmKSk7CisgICAg ICAgICAgICBlbHNlIGlmICh6Y2hraShhdG1idWYpID09IC0xKQorCSAgICAgIHByaW50ZigiP0Zp bGUgbm90IGZvdW5kOiAlc1xuIixicnN0cmlwKGF0bWJ1ZikpOworCSAgICBlbHNlCisJICAgICAg cHJpbnRmKCI/RXJyb3Igd2l0aCBzd2l0Y2ggb3IgZmlsZW5hbWU6ICVzXG4iLGJyc3RyaXAoYXRt YnVmKSk7CisJICAgIHJldHVybigtOSk7CisJfQorCWZuID0gY21yZXN1bHQubnJlc3VsdDsJCS8q IEZvciBicmV2aXR5ICovCisgICAgICAgIHN3aXRjaCAoY21yZXN1bHQuZmNvZGUpIHsJLyogSGFu ZGxlIGVhY2gga2luZCBvZiBmaWVsZCAqLworICAgICAgICAgIGNhc2UgX0NNS0VZOgkJCS8qIEtl eXdvcmQgKHN3aXRjaCkgKi8KKyAgICAgICAgICAgIGMgPSBjbWdicmsoKTsKKyAgICAgICAgICAg IGlmICgoZ2V0dmFsID0gKGMgPT0gJzonIHx8IGMgPT0gJz0nKSkgJiYgIShjbWdrd2ZsZ3MoKSAm IENNX0FSRykpIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIj9UaGlzIHN3aXRjaCBkb2VzIG5v dCB0YWtlIGFuIGFyZ3VtZW50XG4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4oLTkpOworICAg ICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFnZXR2YWwgJiYgKGNtZ2t3ZmxncygpICYgQ01f QVJHKSkKKwkgICAgICBub2FyZyA9IDE7CQkvKiBSZW1lbWJlciBhcmcgaXMgbWlzc2luZyAqLwor ICAgICAgICAgICAgc3dpdGNoIChjbXJlc3VsdC5ucmVzdWx0KSB7CS8qIEhhbmRsZSB0aGUgc3dp dGNoICovCisgICAgICAgICAgICAgIGNhc2UgREVMX0xJUzoJCS8qIC9MSVNUICovCisgICAgICAg ICAgICAgIGNhc2UgREVMX1ZSQjoJCS8qIC9WRVJCT1NFICovCisgICAgICAgICAgICAgICAgbGlz dGluZyA9IDE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgREVM X05PTDoJCS8qIC9OT0xJU1QgKi8KKyAgICAgICAgICAgICAgY2FzZSBERUxfUVVJOgkJLyogL1FV SUVUICovCisJCW5vbGlzdCA9IDE7CisgICAgICAgICAgICAgICAgbGlzdGluZyA9IDA7CisgICAg ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgREVMX1NJTToJCS8qIC9TSU1V TEFURSAqLworICAgICAgICAgICAgICAgIHNpbSA9IDE7CisgICAgICAgICAgICAgICAgYnJlYWs7 CisJICAgICAgY2FzZSBSRU5fVVBQOgkJLyogL1VQUEVSOiAqLworCSAgICAgIGNhc2UgUkVOX0xP VzoJCS8qIC9MT1dFUiAqLworCQlhbGwgPSAxOworCQlpZiAoIW5vYXJnKSB7CisJCSAgICBpZiAo KHggPSBjbWtleSgoZm4gPT0gUkVOX1VQUCkgPyByX3VwcGVyIDogcl9sb3dlciwKKwkJCQkgICAy LCAiIiwiYWxsIix4eHN0cmluZykpIDwgMCkgeworCQkJaWYgKHggPT0gLTMpCisJCQkgIHggPSAx OworCQkJZWxzZQorCQkJICByZXR1cm4oeCk7CisJCSAgICB9CisJCSAgICBhbGwgPSB4OworCQl9 CisJCS8qIDAgPSBkb24ndCBjb252ZXJ0OyAxID0gY29udmVydCB0byBsb3dlcjsgMiA9IHRvIHVw cGVyICovCisJCWNhc2luZyA9IChmbiA9PSBSRU5fVVBQKSA/IDIgOiAxOworCQljb252ZXJ0aW5n ID0gMDsKKwkJYnJlYWs7CisJICAgICAgY2FzZSBSRU5fT1ZXOgkJLyogL0NPTExJU0lPTiAqLwor CQlpZiAoIW5vYXJnKSB7CisJCSAgICBpZiAoKHggPSBjbWtleShyX2NvbGxpc2lvbiwKKwkJCQkg ICBucl9jb2xsaXNpb24sIiIsIm92ZXJ3cml0ZSIseHhzdHJpbmcpKTwwKSB7CisJCQlpZiAoeCA9 PSAtMykKKwkJCSAgeCA9IFJFTlhfT1ZXUjsKKwkJCWVsc2UKKwkJCSAgcmV0dXJuKHgpOworCQkg ICAgfQorCQkgICAgY29sbGlzaW9uID0geDsKKwkJfQorCQlicmVhazsKKwkgICAgICBjYXNlIFJF Tl9SUEw6CQkvKiAvUkVQTEFDRTogKi8KKwkJaWYgKG5vYXJnKSB7CisJCSAgICBwcmludGYoIj9U aGlzIHN3aXRjaCByZXF1aXJlcyBhbiBhcmd1bWVudFxuIik7CisJCSAgICByZXR1cm4oLTkpOwor CQl9CisJCWlmICgoeCA9IGNtZmxkKCJTdHJpbmcgdG8gcmVtb3ZlLCBvciB7e1N0cmluZzF9e1N0 cmluZzJ9fSIsCisJCQkgICAgICAgIiIsJnMseHhzdHJpbmcpKSA8IDApIHsKKwkJICAgIGlmICh4 ID09IC0zKSB7CisJCQlwcmludGYoIj9UYXJnZXQgc3RyaW5nIHJlcXVpcmVkXG4iKTsKKwkJCXgg PSAtOTsKKwkJICAgIH0KKwkJICAgIHJldHVybih4KTsKKwkJfQorCQlpZiAoc1swXSkgeworCQkg ICAgaWYgKHNbMF0gPT0gJ3snICYmIHNbMV0gPT0gJ3snKSAvKiBHZXQgdGhlIGxpc3QgKi8KKwkJ ICAgICAgbWFrZWxpc3QocyxyZW5fc3ViLDMpOworCQkgICAgZWxzZQorCQkgICAgICBtYWtlc3Ry KCYocmVuX3N1YlswXSkscyk7CisJCX0KKwkJY29udmVydGluZyA9IDA7CisJCWJyZWFrOworCisJ ICAgICAgY2FzZSBSRU5fU1BBOgkJLyogL0ZJWFNQQUNFUzogKi8KKwkJaWYgKCFub2FyZykKKwkJ ICBpZiAoKHggPSBjbWZsZCgiQ2hhcmFjdGVyIG9yIHN0cmluZyB0byByZXBsYWNlIHNwYWNlcyB3 aXRoIiwKKwkJCQkgIl8iLCZzLHh4c3RyaW5nKSkgPCAwKQorCQkgICAgaWYgKHggPT0gLTMpCisJ CSAgICAgIHMgPSAiXyI7CisJCSAgICBlbHNlCisJCSAgICAgIHJldHVybih4KTsKKwkJbWFrZXN0 cigmKHJlbl9zdWJbMF0pLCIgIik7CisJCW1ha2VzdHIoJihyZW5fc3ViWzFdKSxub2FyZyA/ICJf IiA6IGJyc3RyaXAocykpOworCQltYWtlc3RyKCYocmVuX3N1YlszXSksTlVMTCk7CisJCWNvbnZl cnRpbmcgPSAwOworCQlicmVhazsKKworI2lmbmRlZiBOT0NTRVRTCisjaWZuZGVmIE5PVU5JQ09E RQorCSAgICAgIGNhc2UgUkVOX1hMQToJCS8qIC9DT05WRVJUOmNzZXQxOmNzZXQyICovCisJCWlm ICgheGZjc3RhYikgewkJLyogTWFrZSBhIGNvcHkgb2YgdGhlIGZpbGUgY2hhcnNldCAqLworCQkg ICAgaW50IGksIHg7CQkvKiB0YWJsZSB3aXRoIENNX0FSRyBzZXQgZm9yIGVhY2ggKi8KKwkJICAg IHggPSAobmZpbGMgKyAxKSAqIHNpemVvZihzdHJ1Y3Qga2V5dGFiKTsKKwkJICAgIHhmY3N0YWIg PSAoc3RydWN0IGtleXRhYiAqKW1hbGxvYyh4KTsKKwkJICAgIGlmICgheGZjc3RhYikgeworCQkJ cHJpbnRmKCI/TWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZVxuIik7CisJCQlyZXR1cm4oLTkpOwor CQkgICAgfQorCQkgICAgZm9yIChpID0gMDsgaSA8IG5maWxjOyBpKyspIHsKKwkJCXhmY3N0YWJb aV0ua3dkID0gZmNzdGFiW2ldLmt3ZDsKKwkJCXhmY3N0YWJbaV0ua3d2YWwgPSBmY3N0YWJbaV0u a3d2YWw7CisJCQl4ZmNzdGFiW2ldLmZsZ3MgPSBmY3N0YWJbaV0uZmxncyB8IENNX0FSRzsKKwkJ ICAgIH0KKwkJfQorCQlpZiAoKHggPSBjbXN3aSh4ZmNzdGFiLG5maWxjLAorCQkJICAgICAgICJD aGFyYWN0ZXItc2V0IG9mIG9sZCBuYW1lIiwiIix4eHN0cmluZykpIDwgMCkgeworCQkgICAgaWYg KHggPT0gLTMpIHsKKwkJCXByaW50ZigiP1BhaXIgb2YgY2hhcmFjdGVyLXNldCBuYW1lcyByZXF1 aXJlZFxuIik7CisJCQlyZXR1cm4oLTkpOworCQkgICAgfSBlbHNlCisJCSAgICAgIHJldHVybih4 KTsKKwkJfQorCQljc2V0MSA9IHg7CisJCWMgPSBjbWdicmsoKTsKKwkJaWYgKCFnZXR2YWwpIHsK KwkJICAgIHByaW50ZigiP1NlY29uZGNoYXJhY3Rlci1zZXQgbmFtZSByZXF1aXJlZFxuIik7CisJ CSAgICByZXR1cm4oLTkpOworCQl9CisJCWlmICgoeCA9IGNta2V5KGZjc3RhYixuZmlsYywKKwkJ CSAgICAgICAiQ2hhcmFjdGVyLXNldCBvZiBuZXcgbmFtZSIsIiIseHhzdHJpbmcpKSA8IDApIHsK KwkJICAgIGlmICh4ID09IC0zKSB7CisJCQlwcmludGYoIj9TZWNvbmQgY2hhcmFjdGVyLXNldCBu YW1lIHJlcXVpcmVkXG4iKTsKKwkJCXJldHVybigtOSk7CisJCSAgICB9IGVsc2UKKwkJICAgICAg cmV0dXJuKHgpOworCQl9CisJCWNzZXQyID0geDsKKwkJaWYgKGNhc2luZykKKwkJICBjYXNpbmcg PSAwOworCQlpZiAocmVuX3N1YlswXSkKKwkJICBtYWtlc3RyKCYocmVuX3N1YlswXSksTlVMTCk7 CisJCWlmIChyZW5fc3ViWzFdKQorCQkgIG1ha2VzdHIoJihyZW5fc3ViWzFdKSxOVUxMKTsKKwkJ aWYgKHJlbl9zdWJbMl0pCisJCSAgbWFrZXN0cigmKHJlbl9zdWJbMl0pLE5VTEwpOworCQljb252 ZXJ0aW5nID0gMTsKKwkJYnJlYWs7CisjZW5kaWYJLyogTk9VTklDT0RFICovCisjZW5kaWYJLyog Tk9DU0VUUyAqLworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg Y2FzZSBfQ01JRkk6CQkJLyogRmlsZSBvciBkaXJlY3RvcnkgbmFtZSAqLworICAgICAgICAgICAg cyA9IGNtcmVzdWx0LnNyZXN1bHQ7CisgICAgICAgICAgICBoYXZlbmFtZSA9IDE7CisgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorCSAgICBwcmludGYoIj9GaWxlIG9yIGRp cmVjdG9yeSBuYW1lIHJlcXVpcmVkXG4iKTsKKwkgICAgcmV0dXJuKC05KTsKKyAgICAgICAgfQor ICAgIH0KKyAgICBpZiAoaGF2ZW5hbWUpIHsKKwlja3N0cm5jcHkobGluZSxzLExJTkJVRlNJWik7 CS8qIE1ha2UgYSBzYWZlIGNvcHkgb2Ygc291cmNlIG5hbWUgKi8KKyAgICB9IGVsc2UgeworCXBy aW50ZigiP0ludGVybmFsIGVycm9yXG4iKTsKKwlyZXR1cm4oLTkpOwkJCS8qIFNob3VsZG4ndCBo YXBwZW4gKi8KKyAgICB9CisgICAgd2lsZCA9IGNtcmVzdWx0Lm5yZXN1bHQ7ICAgICAgICAgICAg LyogU291cmNlIHNwZWNpZmljYXRpb24gd2lsZD8gKi8KKyAgICBpZiAoIXdpbGQpCisgICAgICB3 aWxkID0gaXN3aWxkKGxpbmUpOworCisgICAgZGVidWcoRjExMSwiUkVOQU1FIFdJTEQiLGxpbmUs d2lsZCk7CisKKyAgICBwID0gdG1wYnVmOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQbGFj ZSBmb3IgbmV3IG5hbWUgKi8KKyAgICBwWzBdID0gTlVMOworICAgIHJlcGxhY2luZyA9IHJlbl9z dWJbMF0gPyAxIDogMDsKKworI2lmZGVmIENPTU1FTlQKKyAgICBpZiAoIShjYXNpbmcgfHwgcmVw bGFjaW5nIHx8IGNvbnZlcnRpbmcpKSB7CisJaWYgKCh4ID0gY21vZmkod2lsZCA/ICJUYXJnZXQg ZGlyZWN0b3J5IiA6ICJOZXcgbmFtZSIsCisJCSAgICAgICAiIiwmcyx4eHN0cmluZykpIDwgMCkg eyAvKiBHZXQgbmV3IG5hbWUgKi8KKwkgICAgaWYgKHggPT0gLTMpIHsKKwkJcHJpbnRmKCI/JXMg cmVxdWlyZWRcbiIsCisJCSAgICAgICB3aWxkID8gIlRhcmdldCBkaXJlY3RvcnkiIDogIk5ldyBu YW1lIik7CisJCXJldHVybigtOSk7CisJICAgIH0gZWxzZSByZXR1cm4oeCk7CisJfQorCWNrc3Ry bmNweShwLHMsVE1QQlVGU0laKTsJLyogTWFrZSBhIHNhZmUgY29weSBvZiB0aGUgbmV3IG5hbWUg Ki8KKyAgICB9CisjZWxzZQorICAgIGlmICgoeCA9IGNtb2ZpKHdpbGQgPyAiVGFyZ2V0IGRpcmVj dG9yeSIgOiAiTmV3IG5hbWUiLAorCQkgICAiIiwmcyx4eHN0cmluZykpIDwgMCkgeyAvKiBHZXQg bmV3IG5hbWUgKi8KKwlpZiAoeCA9PSAtMykgeworCSAgICBpZiAoY2FzaW5nIHx8IHJlcGxhY2lu ZyB8fCBjb252ZXJ0aW5nKSB7CisJCXMgPSAiIjsKKwkgICAgfSBlbHNlIHsKKwkJcHJpbnRmKCI/ JXMgcmVxdWlyZWRcbiIsCisJCSAgICAgICB3aWxkID8gIlRhcmdldCBkaXJlY3RvcnkiIDogIk5l dyBuYW1lIik7CisJCXJldHVybigtOSk7CisJICAgIH0KKwl9IGVsc2UgcmV0dXJuKHgpOworICAg IH0KKyAgICBja3N0cm5jcHkocCxzLFRNUEJVRlNJWik7CQkvKiBNYWtlIGEgc2FmZSBjb3B5IG9m IHRoZSBuZXcgbmFtZSAqLworI2VuZGlmCS8qIENPTU1FTlQgKi8KKworICAgIGlmICgoeSA9IGNt Y2ZtKCkpIDwgMCkgcmV0dXJuKHkpOwkvKiBDb25maXJtIHRoZSBjb21tYW5kICovCisKKyNpZmRl ZiBDT01NRU5UCisjaWZuZGVmIE5PVU5JQ09ERQorICAgIGlmIChjb252ZXJ0aW5nKSB7CisJcHJp bnRmKCIgRnJvbTogJXNcbiIsZmNzaW5mb1tjc2V0MV0ua2V5d29yZCk7CisJcHJpbnRmKCIgVG86 ICAgJXNcbiIsZmNzaW5mb1tjc2V0Ml0ua2V5d29yZCk7CisgICAgfQorI2VuZGlmCS8qIE5PVU5J Q09ERSAqLworICAgIGlmIChjYXNpbmcpIHsKKwlwcmludGYoIkNBU0lORzogJXNcbiIsIChjYXNp bmcgPT0gMSkgPyAiTE9XRVIiIDogIlVQUEVSIik7CisgICAgfQorICAgIGlmIChyZXBsYWNpbmcp IHsKKwlwcmludGYoIlJFUExBQ0lORzogJyVzJyB3aXRoICclcydcbiIsCisJICAgICAgIHJlbl9z dWJbMF0sCisJICAgICAgIHJlbl9zdWJbMV0gPyByZW5fc3ViWzFdIDogIiIpOworICAgIH0KKyNl bmRpZgkvKiBDT01NRU5UICovCisKKyAgICBzID0gbGluZTsKKyAgICBpZiAoIXdpbGQpCQkJCS8q IEp1c3Qgb25lICovCisgICAgICByZXR1cm4oc3VjY2VzcyA9CisJICAgICByZW5hbWVvbmUocyxw LAorCQkgICAgICAgcmVwbGFjaW5nLGNhc2luZyxhbGwsY29udmVydGluZyxjc2V0MSxjc2V0MiwK KwkJICAgICAgIGxpc3Rpbmcsbm9saXN0LHNpbSxUTVBCVUZTSVosY29sbGlzaW9uKSk7CisKKyAg ICBpZiAoIWNhc2luZyAmJiAhcmVwbGFjaW5nICYmICFjb252ZXJ0aW5nKSB7CS8qIE11bHRpcGxl IGZpbGVzICovCisJaWYgKCFpc2RpcihwKSkgeworCSAgICBwcmludGYoCQkJLyogaWYgdGFyZ2V0 IGlzIG5vdCBhIGRpcmVjdG9yeSAqLworIj9NdWx0aXBsZSBzb3VyY2UgZmlsZXMgbm90IGFsbG93 ZWQgaWYgdGFyZ2V0IGlzIG5vdCBhIGRpcmVjdG9yeS5cbiIpOworCSAgICByZXR1cm4oLTkpOwor CX0KKyAgICB9CisjaWZkZWYgQ09NTUVOVAorICAgIGVsc2UgeyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIFNob3cgZnVsbCBwYXRoIG9mIHRhcmdldCAqLworICAgICAgICBjaGFyIGJ1 ZltDS01BWFBBVEhdOyAgICAgICAgICAgIC8qICh0b28gbXVjaCkgKi8KKyAgICAgICAgaWYgKHpm bnFmcChwLENLTUFYUEFUSCxidWYpKQorICAgICAgICAgIGNrc3RybmNweSh0bXBidWYsYnVmLFRN UEJVRlNJWik7CisgICAgfQorI2VuZGlmIC8qIENPTU1FTlQgKi8KKworI2lmZGVmIFZNUworICAg IGNvbnJlcygpOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExldCBDdHJsLUMgd29yay4g Ki8KKyNlbmRpZiAvKiBWTVMgKi8KKyAgICBkZWJ1ZyhGMTEwLCJkb3JlbmFtZSBsaW5lIixsaW5l LDApOworCisjaWZkZWYgWlhSRVdJTkQKKyAgICB6ID0genhyZXdpbmQoKTsgICAgICAgICAgICAg ICAgICAgICAvKiBSZXdpbmQgZmlsZSBsaXN0ICovCisjZWxzZQorICAgIHogPSBuenhwYW5kKHMs MCk7ICAgICAgICAgICAgICAgICAgIC8qIEV4cGFuZCBmaWxlIGxpc3QgKi8KKyNlbmRpZiAvKiBa WFJFV0lORCAqLworICAgIGRlYnVnKEYxMTEsImRvcmVuYW1lIHAiLHAseik7CisKKyNpZmRlZiBV TklYCisgICAgaWYgKHdpbGQgJiYgeiA+IDEpCisgICAgICBzaF9zb3J0KG10Y2hzLE5VTEwseiww LDAsZmlsZWNhc2UpOyAvKiBBbHBoYWJldGl6ZSB0aGUgZmlsZW5hbWUgbGlzdCAqLworI2VuZGlm IC8qIFVOSVggKi8KKworICAgIC8qIEZvciAvQ09MTElTSU9OOkZBSUwgbWFrZSBhIHNpbGVudCBw YXNzIHRvIHNlZSBpZiB0aGVyZSB3b3VsZCBiZSBhbnkgKi8KKworICAgIGlmIChjb2xsaXNpb24g PT0gUkVOWF9GQUlMKSB7CisJaW50IG4gPSAwOworCWNoYXIgbGluZVtDS01BWFBBVEgrMl07CisJ d2hpbGUgKHotLSA+IDApIHsKKwkgICAgaWYgKCEoeiA9PSAwICYmICF3aWxkKSkKKwkgICAgICB6 bmV4dChsaW5lKTsKKwkgICAgaWYgKCFsaW5lWzBdKQorCSAgICAgIGJyZWFrOworCSAgICBpZiAo IXJlbmFtZW9uZSgoY2hhciAqKWxpbmUscCwKKwkJCSAgIHJlcGxhY2luZyxjYXNpbmcsYWxsLGNv bnZlcnRpbmcsY3NldDEsY3NldDIsCisJCQkgICAwLDEsUkVOX09QX0NISyxUTVBCVUZTSVosUkVO WF9GQUlMKSkKKwkgICAgICBuKys7CisJfQorCWlmIChuID4gMCkgeworCSAgICBwcmludGYoIj9G YWlsZWQ6ICVkIGZpbGUlcyB3b3VsZCBiZSBvdmVyd3JpdHRlblxuIiwKKwkJICAgbiwgKG4gIT0g MSkgPyAicyIgOiAiIik7CisjaWZkZWYgVk1TCisJICAgIGNvbmNiKChjaGFyKWVzY2FwZSk7Cisj ZW5kaWYgLyogVk1TICovCisJICAgIHJldHVybihzdWNjZXNzID0gMCk7CisJfQorCS8qIEdldCB0 aGUgZmlsZSBsaXN0IGJhY2suICovCisjaWZkZWYgWlhSRVdJTkQKKwl6ID0genhyZXdpbmQoKTsK KyNlbHNlCisJeiA9IG56eHBhbmQocywwKTsKKyNlbmRpZiAvKiBaWFJFV0lORCAqLworICAgIH0K KyAgICB3aGlsZSAoei0tID4gMCAmJiByYyA+IDApIHsKKwljaGFyIGxpbmVbQ0tNQVhQQVRIKzJd OworICAgICAgICBpZiAoISh6ID09IDAgJiYgIXdpbGQpKQorICAgICAgICAgIHpuZXh0KGxpbmUp OworICAgICAgICBpZiAoIWxpbmVbMF0pCisgICAgICAgICAgYnJlYWs7CisJcmMgPSByZW5hbWVv bmUoKGNoYXIgKilsaW5lLHAsIAorCQkgICAgICAgcmVwbGFjaW5nLGNhc2luZyxhbGwsY29udmVy dGluZyxjc2V0MSxjc2V0MiwKKwkJICAgICAgIGxpc3Rpbmcsbm9saXN0LHNpbSxUTVBCVUZTSVos Y29sbGlzaW9uKTsKKyAgICB9CisjaWZkZWYgVk1TCisgICAgY29uY2IoKGNoYXIpZXNjYXBlKTsK KyNlbmRpZiAvKiBWTVMgKi8KKyAgICByZXR1cm4oc3VjY2VzcyA9IHJjKTsKK30KKyNlbmRpZiAv KiBaUkVOQU1FICovCisjZW5kaWYgLyogTk9GUklMTFMgKi8KKyNlbmRpZiAvKiBOT1JFTkFNRSAq LworCisjaWZuZGVmIE5PU1BMCisKKy8qIERvIHRoZSBSRVRVUk4gY29tbWFuZCAqLworCitpbnQK K2RvcmV0dXJuKHMpIGNoYXIgKnM7IHsKKyAgICBpbnQgeDsKKyAgICBleHRlcm4gaW50IHRyYV9h c2c7CisgICAgY2hhciAqIGxpbmUsICogbHA7CisKKyAgICBpZiAoY21kbHZsIDwgMSkgeworICAg ICAgICBwcmludGYoIlxuP0Nhbid0IHJldHVybiBmcm9tIGxldmVsICVkXG4iLG1hY2x2bCk7Cisg ICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7CisgICAgfQorICAgIGxpbmUgPSBtYWxsb2MoTElO QlVGU0laKTsKKyAgICBpZiAobGluZSA9PSBOVUxMKQorICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAw KTsKKyAgICBscCA9IGxpbmU7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFeHBhbmQgcmV0 dXJuIHZhbHVlIG5vdyAqLworICAgIHggPSBMSU5CVUZTSVotMTsKKyAgICBpZiAoIXMpIHMgPSAi IjsKKyAgICBkZWJ1ZyhGMTEwLCJSRVRVUk4gcyIscywwKTsKKyAgICBpZiAoenpzdHJpbmcocywm bHAsJngpID4gLTEpIHsKKyAgICAgICAgcyA9IGxpbmU7CisgICAgICAgIGRlYnVnKEYxMTAsIlJF VFVSTiB6enN0cmluZyIscywwKTsKKyAgICB9CisKKyAgICAvKiBQb3AgZnJvbSBhbGwgRk9SL1dI SUxFL1NXSVRDSC9YSUZzICovCisgICAgd2hpbGUgKChtYWNsdmwgPiAwKSAmJgorICAgICAgICAg ICAobV9hcmdbbWFjbHZsLTFdWzBdKSAmJgorICAgICAgICAgICAoY21kc3RrW2NtZGx2bF0uc3Jj ID09IENNRF9NRCkgJiYKKyAgICAgICAgICAgKCFzdHJuY21wKG1fYXJnW21hY2x2bC0xXVswXSwi X3hpZiIsNCkgfHwKKyAgICAgICAgICAgICFzdHJuY21wKG1fYXJnW21hY2x2bC0xXVswXSwiX2Zv ciIsNCkgfHwKKyAgICAgICAgICAgICFzdHJuY21wKG1fYXJnW21hY2x2bC0xXVswXSwiX3N3aSIs NCkgfHwKKyAgICAgICAgICAgICFzdHJuY21wKG1fYXJnW21hY2x2bC0xXVswXSwiX3doaSIsNCkp KSB7CisgICAgICAgIGRlYnVnKEYxMTEsIlJFVFVSTiBJRi9GT1IvV0hJL1NXSSBwb3AiLG1fYXJn W21hY2x2bC0xXVswXSxtYWNsdmwpOworICAgICAgICBkb2d0YShYWFBUQSk7ICAgICAgICAgICAg ICAgICAgIC8qIFB1dCBhcmdzIGJhY2sgKi8KKyAgICAgICAgcG9wY2x2bCgpOyAgICAgICAgICAg ICAgICAgICAgICAvKiBQb3AgdXAgdHdvIGxldmVscyAqLworICAgICAgICBwb3BjbHZsKCk7Cisg ICAgfQorICAgIGlmICh0cmFfYXNnKSB7ICAgICAgICAgICAgICAgICAgICAgIC8qIElmIHRyYWNp bmcgc2hvdyByZXR1cm4gdmFsdWUgKi8KKyAgICAgICAgaWYgKCpzKQorICAgICAgICAgIHByaW50 ZigiPDw8ICVzOiBcIiVzXCJcbiIsIG1fYXJnW21hY2x2bF1bMF0sIHMpOworICAgICAgICBlbHNl CisgICAgICAgICAgcHJpbnRmKCI8PDwgJXM6IChudWxsKVxuIiwgbV9hcmdbbWFjbHZsXVswXSk7 CisgICAgfQorICAgIHBvcGNsdmwoKTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBvcCBm cm9tIGVuY2xvc2luZyBUQUtFIG9yIG1hY3JvICovCisgICAgZGVidWcoRjExMSwiUkVUVVJOIHRv bGV2ZWwiLHMsbWFjbHZsKTsKKyAgICBpZiAoIXMpIHMgPSAiIjsKKyAgICBpZiAoISpzKSBzID0g TlVMTDsKKyAgICBtYWtlc3RyKCYobXJ2YWxbbWFjbHZsKzFdKSxzKTsgICAgICAvKiBTZXQgdGhl IFJFVFVSTiB2YWx1ZSAqLworICAgIGZyZWUobGluZSk7CisgICAgcmV0dXJuKHN1Y2Nlc3MgPSAx KTsgICAgICAgICAgICAgICAgLyogTWFjcm8gc3VjY2VlZHMgaWYgd2UgUkVUVVJOICovCit9Cisj ZW5kaWYgLyogTk9TUEwgKi8KKworI2lmbmRlZiBOT1NQTAorLyogRG8gdGhlIE9QRU4gY29tbWFu ZCAqLworCitpbnQKK2Rvb3BlbigpICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBP UEVOIHsgYXBwZW5kLCByZWFkLCB3cml0ZSB9ICovCisgICAgaW50IHgsIHksIHogPSAwOyBjaGFy ICpzOworICAgIHN0YXRpYyBzdHJ1Y3QgZmlsaW5mbyBmY2I7ICAgICAgICAgIC8qIChtdXN0IGJl IHN0YXRpYykgKi8KKyAgICBpZiAoKHggPSBjbWtleShvcG50YWIsbm9wbiwibW9kZSIsIiIseHhz dHJpbmcpKSA8IDApIHsKKyAgICAgICAgaWYgKHggPT0gLTMpIHsKKyAgICAgICAgICAgIHByaW50 ZigiP01vZGUgcmVxdWlyZWRcbiIpOworICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAg fSBlbHNlIHJldHVybih4KTsKKyAgICB9CisgICAgc3dpdGNoICh4KSB7CisgICAgICBjYXNlIE9Q Tl9GSV9SOiAgICAgICAgICAgICAgICAgICAgLyogT2xkIGZpbGUgKFJFQUQpICovCisgICAgICAg IGlmIChjaGtmbihaUkZJTEUpID4gMCkgeworICAgICAgICAgICAgcHJpbnRmKCI/UmVhZCBmaWxl IGFscmVhZHkgb3BlblxuIik7CisgICAgICAgICAgICByZXR1cm4oLTIpOworICAgICAgICB9Cisg ICAgICAgIGlmICgoeiA9IGNtaWZpKCJGaWxlIHRvIHJlYWQiLCIiLCZzLCZ5LHh4c3RyaW5nKSkg PCAwKSB7CisgICAgICAgICAgICBpZiAoeiA9PSAtMykgeworICAgICAgICAgICAgICAgIHByaW50 ZigiP0lucHV0IGZpbGVuYW1lIHJlcXVpcmVkXG4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4o LTkpOworICAgICAgICAgICAgfSBlbHNlIHJldHVybih6KTsKKyAgICAgICAgfQorICAgICAgICBp ZiAoeSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTm8gd2lsZGNhcmRzIGFs bG93ZWQgKi8KKyAgICAgICAgICAgIHByaW50ZigiXG4/UGxlYXNlIHNwZWNpZnkgYSBzaW5nbGUg ZmlsZVxuIik7CisgICAgICAgICAgICByZXR1cm4oLTIpOworICAgICAgICB9CisgICAgICAgIGNr c3RybmNweShsaW5lLHMsTElOQlVGU0laKTsKKyAgICAgICAgaWYgKChpbnQpc3RybGVuKGxpbmUp IDwgMSkgcmV0dXJuKC0yKTsKKyAgICAgICAgaWYgKCh6ID0gY21udW0oImJ1ZmZlciBzaXplIiwi NDA5NiIsMTAsJnkseHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgcmV0dXJuKHopOworICAgICAg ICBpZiAoeSA8IDEpIHsKKyAgICAgICAgICAgIHByaW50ZigiP1Bvc2l0aXZlIG51bWJlciByZXF1 aXJlZFxuIik7CisgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICB9CisgICAgICAgIGlm ICgoeiA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHopOworICAgICAgICByZWFkYmxvY2sgPSB5Owor ICAgICAgICBpZiAocmVhZGJ1ZikKKyAgICAgICAgICBmcmVlKChjaGFyICopcmVhZGJ1Zik7Cisg ICAgICAgIGlmICghKHJlYWRidWYgPSAoQ0hBUiAqKSBtYWxsb2MocmVhZGJsb2NrKzEpKSkgewor ICAgICAgICAgICAgcHJpbnRmKCI/Q2FuJ3QgYWxsb2NhdGUgcmVhZCBidWZmZXJcbiIpOworICAg ICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4oc3VjY2VzcyA9 IHpvcGVuaShaUkZJTEUsbGluZSkpOworCisjaWZuZGVmIE1BQworI2lmbmRlZiBOT1BVU0gKKyAg ICAgIGNhc2UgT1BOX1BJX1I6ICAgICAgICAgICAgICAgICAgICAvKiBQaXBlL1Byb2Nlc3MgKCFS RUFEKSAqLworICAgICAgICBpZiAobm9wdXNoKSB7CisgICAgICAgICAgICBwcmludGYoIj9SZWFk IGZyb20gcGlwZSBkaXNhYmxlZFxuIik7CisgICAgICAgICAgICByZXR1cm4oc3VjY2Vzcz0wKTsK KyAgICAgICAgfQorICAgICAgICBpZiAoY2hrZm4oWlJGSUxFKSA+IDApIHsKKyAgICAgICAgICAg IHByaW50ZigiP1JlYWQgZmlsZSBhbHJlYWR5IG9wZW5cbiIpOworICAgICAgICAgICAgcmV0dXJu KC0yKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoKHkgPSBjbXR4dCgiU3lzdGVtIGNvbW1hbmQg dG8gcmVhZCBmcm9tIiwiIiwmcyx4eHN0cmluZykpIDwgMCkgeworICAgICAgICAgICAgaWYgKHkg PT0gLTMpIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIj9Db21tYW5kIG5hbWUgcmVxdWlyZWRc biIpOworICAgICAgICAgICAgICAgIHJldHVybigtOSk7CisgICAgICAgICAgICB9IGVsc2UgcmV0 dXJuKHkpOworICAgICAgICB9CisgICAgICAgIGNrc3RybmNweShsaW5lLGJyc3RyaXAocyksTElO QlVGU0laKTsKKyAgICAgICAgaWYgKCFsaW5lWzBdKSByZXR1cm4oLTIpOworICAgICAgICBpZiAo KHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsKKyAgICAgICAgaWYgKCFyZWFkYnVmKSB7Cisg ICAgICAgICAgICBpZiAoIShyZWFkYnVmID0gKENIQVIgKikgbWFsbG9jKHJlYWRibG9jaysxKSkp IHsKKyAgICAgICAgICAgICAgICBwcmludGYoIj9DYW4ndCBhbGxvY2F0ZSByZWFkIGJ1ZmZlclxu Iik7CisgICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg fQorICAgICAgICByZXR1cm4oc3VjY2VzcyA9IHp4Y21kKFpSRklMRSxsaW5lKSk7CisKKyAgICAg IGNhc2UgT1BOX1BJX1c6ICAgICAgICAgICAgICAgICAgICAvKiBXcml0ZSB0byBwaXBlICovCisg ICAgICAgIGlmIChub3B1c2gpIHsKKyAgICAgICAgICAgIHByaW50ZigiP1dyaXRlIHRvIHBpcGUg ZGlzYWJsZWRcbiIpOworICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3M9MCk7CisgICAgICAgIH0K KyAgICAgICAgaWYgKGNoa2ZuKFpXRklMRSkgPiAwKSB7CisgICAgICAgICAgICBwcmludGYoIj9X cml0ZSBmaWxlIGFscmVhZHkgb3BlblxuIik7CisgICAgICAgICAgICByZXR1cm4oLTIpOworICAg ICAgICB9CisgICAgICAgIGlmICgoeSA9IGNtdHh0KCJTeXN0ZW0gY29tbWFuZCB0byB3cml0ZSB0 byIsIiIsJnMseHhzdHJpbmcpKSA8IDApIHsKKyAgICAgICAgICAgIGlmICh5ID09IC0zKSB7Cisg ICAgICAgICAgICAgICAgcHJpbnRmKCI/Q29tbWFuZCBuYW1lIHJlcXVpcmVkXG4iKTsKKyAgICAg ICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICAgICAgfSBlbHNlIHJldHVybih5KTsKKyAg ICAgICAgfQorICAgICAgICBja3N0cm5jcHkobGluZSxicnN0cmlwKHMpLExJTkJVRlNJWik7Cisg ICAgICAgIGlmICghbGluZVswXSkgcmV0dXJuKC0yKTsKKyAgICAgICAgaWYgKCh5ID0gY21jZm0o KSkgPCAwKSByZXR1cm4oeSk7CisgICAgICAgIHN1Y2Nlc3MgPSB6eGNtZChaV0ZJTEUsbGluZSk7 CisgICAgICAgIGlmICghc3VjY2VzcyAmJiBtc2dmbGcpCisgICAgICAgICAgcHJpbnRmKCJDYW4n dCBvcGVuIHByb2Nlc3MgZm9yIHdyaXRpbmc6ICVzXG4iLGxpbmUpOworICAgICAgICByZXR1cm4o c3VjY2Vzcyk7CisjZW5kaWYgLyogTk9QVVNIICovCisjZW5kaWYgLyogTUFDICovCisKKyAgICAg IGNhc2UgT1BOX0ZJX1c6ICAgICAgICAgICAgICAgICAgICAvKiBOZXcgZmlsZSAoV1JJVEUpICov CisgICAgICBjYXNlIE9QTl9GSV9BOiAgICAgICAgICAgICAgICAgICAgLyogKEFQUEVORCkgKi8K KyAgICAgICAgaWYgKCh6ID0gY21vZmkoIk5hbWUgb2YgbG9jYWwgZmlsZSB0byBjcmVhdGUiLCIi LCZzLHh4c3RyaW5nKSkgPCAwKSB7CisgICAgICAgICAgICBpZiAoeiA9PSAtMykgeworICAgICAg ICAgICAgICAgIHByaW50ZigiP0ZpbGVuYW1lIHJlcXVpcmVkXG4iKTsKKyAgICAgICAgICAgICAg ICByZXR1cm4oLTkpOworICAgICAgICAgICAgfSBlbHNlIHJldHVybih6KTsKKyAgICAgICAgfQor ICAgICAgICBpZiAoeiA9PSAyKSB7CisgICAgICAgICAgICBwcmludGYoIj9Tb3JyeSwgJXMgaXMg YSBkaXJlY3RvcnkgbmFtZVxuIixzKTsKKyAgICAgICAgICAgIHJldHVybigtOSk7CisgICAgICAg IH0KKyAgICAgICAgaWYgKGNoa2ZuKFpXRklMRSkgPiAwKSB7CisgICAgICAgICAgICBwcmludGYo Ij9Xcml0ZS9BcHBlbmQgZmlsZSBhbHJlYWR5IG9wZW5cbiIpOworICAgICAgICAgICAgcmV0dXJu KC0yKTsKKyAgICAgICAgfQorICAgICAgICBmY2IuYnMgPSBmY2IuY3MgPSBmY2IucmwgPSBmY2Iu Zm10ID0gZmNiLm9yZyA9IGZjYi5jYyA9IGZjYi50eXAgPSAwOworICAgICAgICBmY2IubGJsb3B0 cyA9IDA7CisgICAgICAgIGZjYi5kc3AgPSAoeCA9PSBPUE5fRklfVykgPyBYWUZaX04gOiBYWUZa X0E7IC8qIENyZWF0ZSBvciBBcHBlbmQgKi8KKyAgICAgICAgY2tzdHJuY3B5KGxpbmUscyxMSU5C VUZTSVopOworICAgICAgICBpZiAoKGludClzdHJsZW4obGluZSkgPCAxKSByZXR1cm4oLTIpOwor ICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsKKyAgICAgICAgcmV0dXJu KHN1Y2Nlc3MgPSB6b3Blbm8oWldGSUxFLGxpbmUsTlVMTCwmZmNiKSk7CisKKyNpZm5kZWYgTk9M T0NBTAorICAgICAgY2FzZSBPUE5fU0VSOiAgICAgICAgICAgICAgICAgICAgIC8qIE9QRU4gUE9S VCBvciBMSU5FICovCisgICAgICBjYXNlIE9QTl9ORVQ6IHsgICAgICAgICAgICAgICAgICAgLyog T1BFTiBIT1NUICovCisgICAgICAgICAgZXh0ZXJuIGludCBkaWRzZXRsaW4sIHR0bnByb3RvOwor ICAgICAgICAgIGlmICh4ID09IE9QTl9ORVQpIHsKKyAgICAgICAgICAgICAgeiA9IHR0bnByb3Rv OworICAgICAgICAgICAgICB0dG5wcm90byA9IE5QX05PTkU7CisgICAgICAgICAgfQorICAgICAg ICAgIGlmICgoeSA9IHNldGxpbigoeCA9PSBPUE5fU0VSKSA/IFhZTElORSA6IFhZSE9TVCwgMSwg MCkpIDwgMCkgeworICAgICAgICAgICAgICBpZiAoeCA9PSBPUE5fTkVUKQorICAgICAgICAgICAg ICAgIHR0bnByb3RvID0gejsKKyAgICAgICAgICAgICAgc3VjY2VzcyA9IDA7CisgICAgICAgICAg fQorICAgICAgICAgIGRpZHNldGxpbisrOworICAgICAgICAgIHJldHVybih5KTsKKyAgICAgIH0K KyNlbmRpZiAvKiBOT0xPQ0FMICovCisKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHByaW50Zigi P05vdCBpbXBsZW1lbnRlZCIpOworICAgICAgICByZXR1cm4oLTIpOworICAgIH0KK30KKyNlbmRp ZiAvKiBOT1NQTCAqLworCisjaWZuZGVmIE5PWEZFUgorLyogIEQgTyBYIEcgRSBUICAtLSAgR0VU IGNvbW1hbmQgcGFyc2VyIHdpdGggc3dpdGNoZXMgICovCisKKyNpZmRlZiBDS19MQUJFTEVECitp bnQgZ19sZl9vcHRzID0gLTE7CitleHRlcm4gaW50IGxmX29wdHM7CisjZW5kaWYgLyogQ0tfTEFC RUxFRCAqLworCitpbnQKK2RveGdldChjeCkgaW50IGN4OyB7CisgICAgZXh0ZXJuIGludCAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogRXh0ZXJuYWwgdmFyaWFibGVzIHdlIG5lZWQgKi8KKyNp ZmRlZiBSRUNVUlNJVkUKKyAgICAgIHJlY3Vyc2l2ZSwKKyNlbmRpZiAvKiBSRUNVUlNJVkUgKi8K KyAgICAgIHhmZXJtb2RlLCBmZGlzcGxhLCBwcm90b2NvbCwgdXNlcGlwZXMsCisgICAgICBnX2Jp bmFyeSwgZ194ZmVybW9kZSwgZ19kaXNwbGEsIGdfcnBhdGgsIGdfdXNlcGlwZXM7CisgICAgZXh0 ZXJuIGNoYXIgKiByY3ZfbW92ZTsgICAgICAgICAgICAgLyogRGlyZWN0b3J5IHRvIG1vdmUgbmV3 IGZpbGVzIHRvICovCisgICAgZXh0ZXJuIGNoYXIgKiByY3ZfcmVuYW1lOyAgICAgICAgICAgLyog V2hhdCB0byByZW5hbWUgbmV3IGZpbGVzIHRvICovCisgICAgZXh0ZXJuIGNoYXIgKiByY3ZleGNl cHRbXTsgICAgICAgICAgLyogUkVDRUlWRSAvIEdFVCBleGNlcHRpb24gbGlzdCAqLworICAgIGlu dCBvcGt0ICA9ICAwOyAgICAgICAgICAgICAgICAgICAgIC8qIEZsYWcgZm9yIE8tUGFja2V0IG5l ZWRlZCAqLworCisjaWZkZWYgUElQRVNFTkQKKyAgICBleHRlcm4gaW50IHBpcGVzZW5kOworICAg IGV4dGVybiBjaGFyICogcmN2ZmlsdGVyOworI2VuZGlmIC8qIFBJUEVTRU5EICovCisgICAgZXh0 ZXJuIHN0cnVjdCBrZXl0YWIgcnBhdGh0YWJbXTsKKyAgICBleHRlcm4gaW50IG5ycGF0aHRhYjsK KyAgICBleHRlcm4gQ0tfT0ZGX1QgY2FsaWJyYXRlOworICAgIGludCBhc25hbWUgPSAwOyAgICAg ICAgICAgICAgICAgICAgIC8qIEZsYWcgZm9yIGhhdmUgYXMtbmFtZSAqLworICAgIGludCBrb25s eSA9IDA7ICAgICAgICAgICAgICAgICAgICAgIC8qIEtlcm1pdC1vbmx5IGZ1bmN0aW9uICovCisg ICAgaW50IGMsIGksIG4sIGNvbmZpcm1lZCA9IDA7ICAgICAgICAgLyogV29ya2VycyAqLworICAg IGludCBnZXR2YWwgPSAwOyAgICAgICAgICAgICAgICAgICAgIC8qIFdoZXRoZXIgdG8gZ2V0IHN3 aXRjaCB2YWx1ZSAqLworICAgIGludCByY3ZjbWQgPSAwOyAgICAgICAgICAgICAgICAgICAgIC8q IFdoZXRoZXIgaXQgaXMgdGhlIFJFQ0VJVkUgY29tbWFuZCAqLworICAgIGludCBtZ2V0ID0gMDsg ICAgICAgICAgICAgICAgICAgICAgIC8qIFdoZXRoZXIgaXQgaXMgdGhlIE1HRVQgY29tbWFuZCAq LworICAgIHN0cnVjdCBzdHJpbmdpbnQgcHZbU05EX01BWCsxXTsgICAgLyogVGVtcG9yYXJ5IGFy cmF5IGZvciBzd2l0Y2ggdmFsdWVzICovCisgICAgc3RydWN0IEZEQiBzdywgZmwsIGNtOyAgICAg ICAgICAgICAgLyogRkRCcyBmb3IgZWFjaCBwYXJzZSBmdW5jdGlvbiAqLworICAgIGNoYXIgKiBj bWRzdHIgPSAidGhpcyBjb21tYW5kIjsKKworI2lmZGVmIE5FV0ZUUAorICAgIGlmIChjeCA9PSBY WEdFVCB8fCBjeCA9PSBYWFJFR0VUIHx8IGN4ID09IFhYTUdFVCB8fCBjeCA9PSBYWFJFVFIpIHsK KyAgICAgICAgZXh0ZXJuIGludCBmdHBnZXQ7CisgICAgICAgIGV4dGVybiBpbnQgZnRwaXNvcGVu KCk7CisgICAgICAgIGlmICgoZnRwZ2V0ID09IDEpIHx8ICgoZnRwZ2V0ID09IDIpICYmIGZ0cGlz b3BlbigpKSkgeworCSAgICBpbnQgeDsKKwkgICAgeCA9IGRvZnRwZ2V0KGN4LDApOworCSAgICBk ZWJ1ZyhGMTAxLCJkb2Z0cGdldCByZXR1cm4iLCIiLHgpOworCSAgICBpZiAoeCA+IC0xKQorCSAg ICAgIHN1Y2Nlc3MgPSB4OworCSAgICBkZWJ1ZyhGMTAxLCJkb2Z0cGdldCBzdWNjZXNzIiwiIixz dWNjZXNzKTsKKwkgICAgcmV0dXJuKHgpOworCX0KKyAgICB9CisjZW5kaWYgLyogTkVXRlRQICov CisKKyAgICBkZWJ1ZyhGMTAxLCJ4Z2V0IGN4IiwiIixjeCk7CisKKyAgICBvb3B0cyA9IC0xOwor ICAgIG9tb2RlID0gLTE7CisKKyAgICBmb3IgKGkgPSAwOyBpIDw9IFNORF9NQVg7IGkrKykgeyAg ICAvKiBJbml0aWFsaXplIHN3aXRjaCB2YWx1ZXMgKi8KKyAgICAgICAgcHZbaV0uc3ZhbCA9IE5V TEw7CisgICAgICAgIHB2W2ldLml2YWwgPSAtMTsKKyAgICAgICAgcHZbaV0ud3ZhbCA9IChDS19P RkZfVCktMTsKKyAgICB9CisgICAgLyogUHJlc2V0IHN3aXRjaCB2YWx1ZXMgYmFzZWQgb24gdG9w LWxldmVsIGNvbW1hbmQgdGhhdCBjYWxsZWQgdXMgKi8KKworICAgIHN3aXRjaCAoY3gpIHsKKyAg ICAgIGNhc2UgWFhSRUM6ICAgICAgICAgICAgICAgICAgICAgICAvKiBSRUNFSVZFICovCisgICAg ICAgIGNtZHN0ciA9ICJSRUNFSVZFIjsKKyAgICAgICAgcmN2Y21kID0gMTsgYnJlYWs7CisgICAg ICBjYXNlIFhYR0VUOiAgICAgICAgICAgICAgICAgICAgICAgLyogR0VUICovCisgICAgICAgIGNt ZHN0ciA9ICJHRVQiOworICAgICAgICBrb25seSA9IDE7CisgICAgICAgIGJyZWFrOworI2lmZGVm IENLX1JFU0VORAorICAgICAgY2FzZSBYWFJFR0VUOiAgICAgICAgICAgICAgICAgICAgIC8qIFJF R0VUICovCisgICAgICAgIGNtZHN0ciA9ICJSRUdFVCI7CisgICAgICAgIGtvbmx5ID0gMTsKKyAg ICAgICAgcHZbU05EX0JJTl0uaXZhbCA9IDE7ICAgICAgICAgICAvKiBJbXBsaWVzIC9CSU5BUlkg Ki8KKyAgICAgICAgcHZbU05EX1JFU10uaXZhbCA9IDE7IGJyZWFrOworI2VuZGlmIC8qIENLX1JF U0VORCAqLworICAgICAgY2FzZSBYWFJFVFI6ICAgICAgICAgICAgICAgICAgICAgIC8qIFJFVFJJ RVZFICovCisgICAgICAgIGNtZHN0ciA9ICJSRVRSSUVWRSI7CisgICAgICAgIGtvbmx5ID0gMTsK KyAgICAgICAgcHZbU05EX0RFTF0uaXZhbCA9IDE7IGJyZWFrOworI2lmZGVmIFBJUEVTRU5ECisg ICAgICBjYXNlIFhYQ1JFQzogICAgICAgICAgICAgICAgICAgICAgLyogQ1JFQ0VJVkUgKi8KKyAg ICAgICAgY21kc3RyID0gIkNSRUNFSVZFIjsKKyAgICAgICAga29ubHkgPSAxOworICAgICAgICBy Y3ZjbWQgPSAxOworICAgICAgICBwdltTTkRfQ01EXS5pdmFsID0gMTsgYnJlYWs7CisgICAgICBj YXNlIFhYQ0dFVDogICAgICAgICAgICAgICAgICAgICAgLyogQ0dFVCAqLworICAgICAgICBjbWRz dHIgPSAiQ0dFVCI7CisgICAgICAgIGtvbmx5ID0gMTsKKyAgICAgICAgcHZbU05EX0NNRF0uaXZh bCA9IDE7IGJyZWFrOworI2VuZGlmIC8qIFBJUEVTRU5EICovCisjaWZuZGVmIE5PTUdFVAorICAg ICAgY2FzZSBYWE1HRVQ6ICAgICAgICAgICAgICAgICAgICAgIC8qIE1HRVQgKi8KKyAgICAgICAg Y21kc3RyID0gIk1HRVQiOworICAgICAgICBrb25seSA9IDE7CisgICAgICAgIG1nZXQgPSAxOyBi cmVhazsKKyNlbmRpZiAvKiBOT01HRVQgKi8KKyAgICB9CisgICAgZGVidWcoRjExMSwieGdldCBy Y3ZjbWQiLGNtZHN0cixyY3ZjbWQpOworICAgIGRlYnVnKEYxMDEsInhnZXQga29ubHkiLCIiLGtv bmx5KTsKKworI2lmZGVmIENLX1hZWgorICAgIGlmICghcmN2Y21kICYmIHByb3RvY29sICE9IFBS T1RPX0spIHsKKyAgICAgICAgcHJpbnRmKCI/U29ycnksICVzIHdvcmtzIG9ubHkgd2l0aCBLZXJt aXQgcHJvdG9jb2xcbiIsY21kc3RyKTsKKyAgICAgICAgcmV0dXJuKC05KTsKKyAgICB9CisjZW5k aWYgLyogQ0tfWFlaICovCisKKyAgICAvKiBTZXQgdXAgY2hhaW5lZCBwYXJzZSBmdW5jdGlvbnMu Li4gKi8KKworICAgIGNtZmRiaSgmc3csICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZpcnN0 IEZEQiAtIGNvbW1hbmQgc3dpdGNoZXMgKi8KKyAgICAgICAgICAgX0NNS0VZLCAgICAgICAgICAg ICAgICAgICAgICAvKiBmY29kZSAqLworICAgICAgICAgICByY3ZjbWQgPworICAgICAgICAgICAi T3B0aW9uYWwgbmFtZS90ZW1wbGF0ZSB0byBzdG9yZSBpbmNvbWluZyBmaWxlcyB1bmRlciwgb3Ig c3dpdGNoIiA6CisgICAgICAgICAgICJSZW1vdGUgZmlsZW5hbWUsIG9yIHN3aXRjaCIsIC8qIGhs cG1zZyAqLworICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRlZmF1 bHQgKi8KKyAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBz dHJpbmcgZGF0YSAqLworICAgICAgICAgICByY3ZjbWQgPyBucmN2dGFiIDogbmdldHRhYiwgIC8q IGFkZHRsIG51bWVyaWMgZGF0YSAxOiB0Ymwgc2l6ZSAqLworICAgICAgICAgICA0LCAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAyOiA0ID0gY21zd2kgKi8K KyAgICAgICAgICAgeHhzdHJpbmcsICAgICAgICAgICAgICAgICAgICAvKiBQcm9jZXNzaW5nIGZ1 bmN0aW9uICovCisgICAgICAgICAgIHJjdmNtZCA/IHJjdnRhYiA6IGdldHRhYiwgICAgLyogS2V5 d29yZCB0YWJsZSAqLworICAgICAgICAgICAmZmwgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IFBvaW50ZXIgdG8gbmV4dCBGREIgKi8KKyAgICAgICAgICAgKTsKKyAgICBpZiAocmN2Y21kIHx8 IG1nZXQpICAgICAgICAgICAgICAgICAvKiBSRUNFSVZFIG9yIE1HRVQgKi8KKyAgICAgIGNtZmRi aSgmZmwsCisgICAgICAgICAgIF9DTVRYVCwgICAgICAgICAgICAgICAgICAgICAgLyogZmNvZGUg Ki8KKyAgICAgICAgICAgcmN2Y21kID8gICAgICAgICAgICAgICAgICAgICAvKiBobHBtc2cgKi8K KyAgICAgICAgICAgICAiT3V0cHV0IGZpbGVuYW1lIG9yIENvbW1hbmQiIDogLyogT3V0cHV0IGZp bGVuYW1lICovCisgICAgICAgICAgICAgIkZpbGUocykgdG8gR0VUIiwgICAgICAgICAgICAgIC8q IEZpbGVzIHdlIGFyZSBhc2tpbmcgZm9yICovCisgICAgICAgICAgICIiLCAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogZGVmYXVsdCAqLworICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIGFkZHRsIHN0cmluZyBkYXRhICovCisgICAgICAgICAgIDAsICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDEgKi8KKyAgICAgICAgICAg MCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMiAqLwor I2lmZGVmIENPTU1FTlQKKyNpZmRlZiBDS19YWVoKKyAgICAgICAgICAgKHByb3RvY29sID09IFBS T1RPX1ggfHwgcHJvdG9jb2wgPT0gUFJPVE9fWEMpID8KKyAgICAgICAgICAgICB4eHN0cmluZyA6 CisgICAgICAgICAgICAgKHJjdmNtZCA/ICh4eF9zdHJwKTAgIDogeHhzdHJpbmcpCisjZWxzZQor ICAgICAgICAgICByY3ZjbWQgPyAoeHhfc3RycCkwICA6IHh4c3RyaW5nIC8qIFByb2Nlc3Npbmcg ZnVuY3Rpb24gKi8KKyNlbmRpZiAvKiBDS19YWVogKi8KKyNlbHNlICAvKiBDT01NRU5UICovCisJ ICAgeHhzdHJpbmcJCQkvKiBBbHdheXMgZXZhbHVhdGUgLSBmZGMgMjAwNi8wMi8wMSAqLworI2Vu ZGlmCS8qIENPTU1FTlQgKi8KKyAgICAgICAgICAgICAsCisgICAgICAgICAgIE5VTEwsCisgICAg ICAgICAgICZjbQorICAgICAgICAgICApOworICAgIGVsc2UKKyAgICAgIGNtZmRiaSgmZmwsICAg ICAgICAgICAgICAgICAgICAgICAvKiBSZW1vdGUgZmlsZW5hbWUgb3IgY29tbWFuZCAqLworICAg ICAgICAgICBfQ01GTEQsICAgICAgICAgICAgICAgICAgICAgIC8qIGZjb2RlICovCisgICAgICAg ICAgICJSZW1vdGUgZmlsZW5hbWUiLCAgICAgICAgICAgLyogaGxwbXNnICovCisgICAgICAgICAg ICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGVmYXVsdCAqLworICAgICAgICAgICAi IiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIHN0cmluZyBkYXRhICovCisgICAg ICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRh IDEgKi8KKyAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBu dW1lcmljIGRhdGEgMiAqLworICAgICAgICAgICB4eHN0cmluZywKKyAgICAgICAgICAgTlVMTCwK KyAgICAgICAgICAgJmNtCisgICAgICAgICAgICk7CisgICAgY21mZGJpKCZjbSwgICAgICAgICAg ICAgICAgICAgICAgICAgLyogQ29uZmlybWF0aW9uICovCisgICAgICAgICAgIF9DTUNGTSwgICAg ICAgICAgICAgICAgICAgICAgLyogZmNvZGUgKi8KKyAgICAgICAgICAgIiIsICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBobHBtc2cgKi8KKyAgICAgICAgICAgIiIsICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBkZWZhdWx0ICovCisgICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KKyAgICAgICAgICAgMCwgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMSAqLworICAgICAgICAgICAw LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAyICovCisg ICAgICAgICAgIE5VTEwsCisgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgIE5VTEwKKyAgICAg ICAgICAgKTsKKworICAgIC8qIChTZWUgZG94c2VuZCgpIGZvciBmdWxsZXIgY29tbWVudGFyeSkg Ki8KKworICAgIHdoaWxlICgxKSB7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBhcnNlIDAg b3IgbW9yZSBzd2l0Y2hlcyAqLworICAgICAgICB4ID0gY21mZGIoJnN3KTsgICAgICAgICAgICAg ICAgIC8qIFBhcnNlIHNvbWV0aGluZyAqLworICAgICAgICBkZWJ1ZyhGMTAxLCJ4Z2V0IGNtZmRi IiwiIix4KTsKKyAgICAgICAgaWYgKHggPCAwKSAgICAgICAgICAgICAgICAgICAgICAvKiBFcnJv ciAqLworICAgICAgICAgIGdvdG8geGdldHg7ICAgICAgICAgICAgICAgICAgIC8qIG9yIHJlcGFy c2UgbmVlZGVkICovCisgICAgICAgIGlmIChjbXJlc3VsdC5mY29kZSAhPSBfQ01LRVkpICAgLyog QnJlYWsgb3V0IGlmIG5vdCBhIHN3aXRjaCAqLworICAgICAgICAgIGJyZWFrOworICAgICAgICBj ID0gY21nYnJrKCk7ICAgICAgICAgICAgICAgICAgIC8qIEdldCBicmVhayBjaGFyYWN0ZXIgKi8K KyAgICAgICAgaWYgKChnZXR2YWwgPSAoYyA9PSAnOicgfHwgYyA9PSAnPScpKSAmJiAhKGNtZ2t3 ZmxncygpICYgQ01fQVJHKSkgeworICAgICAgICAgICAgcHJpbnRmKCI/VGhpcyBzd2l0Y2ggZG9l cyBub3QgdGFrZSBhbiBhcmd1bWVudFxuIik7CisgICAgICAgICAgICB4ID0gLTk7CisgICAgICAg ICAgICBnb3RvIHhnZXR4OworICAgICAgICB9CisgICAgICAgIGlmICghZ2V0dmFsICYmIChjbWdr d2ZsZ3MoKSAmIENNX0FSRykpIHsKKyAgICAgICAgICAgIHByaW50ZigiP1RoaXMgc3dpdGNoIHJl cXVpcmVzIGFuIGFyZ3VtZW50XG4iKTsKKyAgICAgICAgICAgIHggPSAtOTsKKyAgICAgICAgICAg IGdvdG8geGdldHg7CisgICAgICAgIH0KKyAgICAgICAgbiA9IGNtcmVzdWx0Lm5yZXN1bHQ7ICAg ICAgICAgICAvKiBOdW1lcmljIHJlc3VsdCA9IHN3aXRjaCB2YWx1ZSAqLworICAgICAgICBkZWJ1 ZyhGMTAxLCJ4Z2V0IHN3aXRjaCIsIiIsbik7CisKKyAgICAgICAgc3dpdGNoIChuKSB7ICAgICAg ICAgICAgICAgICAgICAvKiBQcm9jZXNzIHRoZSBzd2l0Y2ggKi8KKyNpZmRlZiBQSVBFU0VORAor ICAgICAgICAgIGNhc2UgU05EX0NNRDogICAgICAgICAgICAgICAgIC8qIFRoZXNlIHRha2Ugbm8g YXJncyAqLworICAgICAgICAgICAgaWYgKG5vcHVzaCkgeworICAgICAgICAgICAgICAgIHByaW50 ZigiP1NvcnJ5LCBzeXN0ZW0gY29tbWFuZCBhY2Nlc3MgaXMgZGlzYWJsZWRcbiIpOworICAgICAg ICAgICAgICAgIHggPSAtOTsKKyAgICAgICAgICAgICAgICBnb3RvIHhnZXR4OworICAgICAgICAg ICAgfSBlbHNlIGlmIChyY3ZmaWx0ZXIpIHsKKyAgICAgICAgICAgICAgICBwcmludGYoCisiP1Nv cnJ5LCBubyBHRVQgL0NPTU1BTkQgd2hlbiBSRUNFSVZFIEZJTFRFUiBzZWxlY3RlZFxuIik7Cisg ICAgICAgICAgICAgICAgeCA9IC05OworICAgICAgICAgICAgICAgIGdvdG8geGdldHg7CisgICAg ICAgICAgICB9CisgICAgICAgICAgICBpZiAocmN2Y21kKQorICAgICAgICAgICAgICBzdy5obHBt c2cgPSAiQ29tbWFuZCwgb3Igc3dpdGNoIjsgLyogQ2hhbmdlIGhlbHAgbWVzc2FnZSAqLworICAg ICAgICAgICAgLyogRmFsbCB0aHJ1Li4uICovCisjZW5kaWYgLyogUElQRVNFTkQgKi8KKworICAg ICAgICAgIGNhc2UgU05EX1JFQzogICAgICAgICAgICAgICAgIC8qIC9SRUNVUlNJVkUgKi8KKyAg ICAgICAgICAgIHB2W1NORF9QVEhdLml2YWwgPSBQQVRIX1JFTDsgLyogSW1wbGllcyByZWxhdGl2 ZSBwYXRobmFtZXMgKi8KKyAgICAgICAgICAgIHB2W25dLml2YWwgPSAxOyAgICAgICAgICAgICAv KiBTZXQgdGhlIHJlY3Vyc2l2ZSBmbGFnICovCisgICAgICAgICAgICBicmVhazsKKworICAgICAg ICAgIGNhc2UgU05EX1JFUzogICAgICAgICAgICAgICAgIC8qIC9SRUNPVkVSICovCisgICAgICAg ICAgICBwdltTTkRfQklOXS5pdmFsID0gMTsgICAgICAgLyogSW1wbGllcyAvQklOQVJZICovCisg ICAgICAgICAgICBwdltuXS5pdmFsID0gMTsgICAgICAgICAgICAgLyogU2V0IHRoZSByZXNlbmQg ZmxhZyAqLworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIFNORF9ERUw6ICAg ICAgICAgICAgICAgICAvKiAvREVMRVRFICovCisgICAgICAgICAgY2FzZSBTTkRfU0hIOiAgICAg ICAgICAgICAgICAgLyogL1FVSUVUICovCisgICAgICAgICAgY2FzZSBTTkRfQ0FMOiAgICAgICAg ICAgICAgICAgLyogL0NBTElCUkFURSAqLworICAgICAgICAgIGNhc2UgU05EX1hQQTogICAgICAg ICAgICAgICAgIC8qIC9UUkFOU1BBUkVOVCAqLworICAgICAgICAgICAgcHZbbl0uaXZhbCA9IDE7 ICAgICAgICAgICAgIC8qIEp1c3Qgc2V0IHRoZSBhcHByb3ByaWF0ZSBmbGFnICovCisgICAgICAg ICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgU05EX1BJUDogICAgICAgICAgICAgICAgIC8q IC9QSVBFUzp7T04sT0ZGfSAqLworICAgICAgICAgICAgaWYgKCFnZXR2YWwpIHsKKyAgICAgICAg ICAgICAgICBwdltuXS5pdmFsID0gMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgICAgIGlmICgoeCA9IGNta2V5KG9ub2ZmLDIsIiIsIm9uIix4eHN0cmlu ZykpIDwgMCkKKyAgICAgICAgICAgICAgZ290byB4Z2V0eDsKKyAgICAgICAgICAgIGlmICghbm9w dXNoKQorICAgICAgICAgICAgICBwdltuXS5pdmFsID0geDsKKyAgICAgICAgICAgIGJyZWFrOwor CisgICAgICAgICAgLyogRmlsZSB0cmFuc2ZlciBtb2RlcyAtIGVhY2ggdW5kb2VzIHRoZSBvdGhl cnMgKi8KKworICAgICAgICAgIGNhc2UgU05EX0JJTjogICAgICAgICAgICAgICAgIC8qIEJpbmFy eSAqLworICAgICAgICAgIGNhc2UgU05EX1RYVDogICAgICAgICAgICAgICAgIC8qIFRleHQgKi8K KyAgICAgICAgICBjYXNlIFNORF9JTUc6ICAgICAgICAgICAgICAgICAvKiBJbWFnZSAqLworICAg ICAgICAgIGNhc2UgU05EX0xCTDogICAgICAgICAgICAgICAgIC8qIExhYmVsZWQgKi8KKyAgICAg ICAgICAgIHB2W1NORF9CSU5dLml2YWwgPSAwOyAgICAgICAvKiBVbnNldCBhbGwgKi8KKyAgICAg ICAgICAgIHB2W1NORF9UWFRdLml2YWwgPSAwOworICAgICAgICAgICAgcHZbU05EX0lNR10uaXZh bCA9IDA7CisgICAgICAgICAgICBwdltTTkRfTEJMXS5pdmFsID0gMDsKKyAgICAgICAgICAgIHB2 W25dLml2YWwgPSAxOyAgICAgICAgICAgICAvKiBTZXQgdGhlIHJlcXVlc3RlZCBvbmUgKi8KKyAg ICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBTTkRfRVhDOiAgICAgICAgICAgICAg ICAgLyogRXhjbHVkZXMgKi8KKyAgICAgICAgICAgIGlmICghZ2V0dmFsKSBicmVhazsKKyAgICAg ICAgICAgIGlmICgoeCA9IGNtZmxkKCJQYXR0ZXJuIiwiIiwmcyx4eHN0cmluZykpIDwgMCkgewor ICAgICAgICAgICAgICAgIGlmICh4ID09IC0zKSB7CisgICAgICAgICAgICAgICAgICAgIHByaW50 ZigiP1BhdHRlcm4gcmVxdWlyZWRcbiIpOworICAgICAgICAgICAgICAgICAgICB4ID0gLTk7Cisg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGdvdG8geGdldHg7CisgICAgICAgICAg ICB9CisgICAgICAgICAgICBpZiAocHZbbl0uc3ZhbCkgZnJlZShwdltuXS5zdmFsKTsKKyAgICAg ICAgICAgIHkgPSBzdHJsZW4ocyk7CisgICAgICAgICAgICBpZiAoeSA+IDI1NikgeworICAgICAg ICAgICAgICAgIHByaW50ZigiP1BhdHRlcm4gdG9vIGxvbmcgLSAyNTYgbWF4XG4iKTsKKyAgICAg ICAgICAgICAgICB4ID0gLTk7CisgICAgICAgICAgICAgICAgZ290byB4Z2V0eDsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgICAgIHB2W25dLnN2YWwgPSBtYWxsb2MoeSsxKTsKKyAgICAgICAgICAg IGlmIChwdltuXS5zdmFsKSB7CisgICAgICAgICAgICAgICAgc3RyY3B5KHB2W25dLnN2YWwscyk7 ICAgLyogc2FmZSAqLworICAgICAgICAgICAgICAgIHB2W25dLml2YWwgPSAxOworICAgICAgICAg ICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyNpZmRlZiBDT01NRU5UCisgICAgICAgICAgLyog Tm90IGltcGxlbWVudGVkICovCisgICAgICAgICAgY2FzZSBTTkRfUFJJOiAgICAgICAgICAgICAg ICAgLyogR0VUIHRvIHByaW50ZXIgKi8KKyAgICAgICAgICAgIHB2W25dLml2YWwgPSAxOworICAg ICAgICAgICAgaWYgKCFnZXR2YWwpIGJyZWFrOworICAgICAgICAgICAgaWYgKCh4ID0gY21mbGQo IlByaW50IG9wdGlvbnMiLCIiLCZzLHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgICAgICBnb3Rv IHhnZXR4OworICAgICAgICAgICAgcHZbbl0uc3ZhbCA9IG1hbGxvYygoaW50KXN0cmxlbihzKSsx KTsKKyAgICAgICAgICAgIGlmIChwdltuXS5zdmFsKQorICAgICAgICAgICAgICBzdHJjcHkocHZb bl0uc3ZhbCxzKTsgICAgIC8qIHNhZmUgKi8KKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8q IENPTU1FTlQgKi8KKworICAgICAgICAgIGNhc2UgU05EX01PVjogICAgICAgICAgICAgICAgIC8q IE1PVkUgYWZ0ZXIgKi8KKyAgICAgICAgICBjYXNlIFNORF9SRU46ICAgICAgICAgICAgICAgICAv KiBSRU5BTUUgYWZ0ZXIgKi8KKyAgICAgICAgICAgIGlmICghZ2V0dmFsKSBicmVhazsKKyAgICAg ICAgICAgIGlmICgoeCA9IGNtZmxkKG4gPT0gU05EX01PViA/CisgICAgICAgICAgICJkZXZpY2Ug YW5kL29yIGRpcmVjdG9yeSBmb3Igc291cmNlIGZpbGUgYWZ0ZXIgc2VuZGluZyIgOgorICAgICAg ICAgICAibmV3IG5hbWUgZm9yIHNvdXJjZSBmaWxlIGFmdGVyIHNlbmRpbmciLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgIiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmcywKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgIG4gPT0gU05EX01PViA/IHh4c3RyaW5nIDogTlVMTAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgKSkgPCAwKSB7CisgICAgICAgICAgICAgICAgaWYg KHggPT0gLTMpIHsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIlc1xuIiwgbiA9PSBTTkRf TU9WID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICI/RGVzdGluYXRpb24gcmVxdWlyZWQi IDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICI/TmV3IG5hbWUgcmVxdWlyZWQiCisgICAg ICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgICAgICB4ID0gLTk7Cisg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGdvdG8geGdldHg7CisgICAgICAgICAg ICB9CisgICAgICAgICAgICBpZiAocHZbbl0uc3ZhbCkgeworICAgICAgICAgICAgICAgIGZyZWUo cHZbbl0uc3ZhbCk7CisgICAgICAgICAgICAgICAgcHZbbl0uc3ZhbCA9IE5VTEw7CisgICAgICAg ICAgICB9CisgICAgICAgICAgICBzID0gYnJzdHJpcChzKTsKKyAgICAgICAgICAgIHkgPSBzdHJs ZW4ocyk7CisgICAgICAgICAgICBpZiAoeSA+IDApIHsKKyAgICAgICAgICAgICAgICBwdltuXS5z dmFsID0gbWFsbG9jKHkrMSk7CisgICAgICAgICAgICAgICAgaWYgKHB2W25dLnN2YWwpIHsKKyAg ICAgICAgICAgICAgICAgICAgc3RyY3B5KHB2W25dLnN2YWwscyk7IC8qIHNhZmUgKi8KKyAgICAg ICAgICAgICAgICAgICAgcHZbbl0uaXZhbCA9IDE7CisgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIFNORF9BU046ICAg ICAgICAgICAgICAgICAvKiBBcy1uYW1lICovCisgICAgICAgICAgICBpZiAoIWdldHZhbCkgYnJl YWs7CisgICAgICAgICAgICBpZiAobWdldCkgeworICAgICAgICAgICAgICAgIHByaW50ZigiP1Nv cnJ5LCBhcy1uYW1lIG5vdCBhbGxvd2VkIHdpdGggTUdFVFxuIik7CisgICAgICAgICAgICAgICAg eCA9IC05OworICAgICAgICAgICAgICAgIGdvdG8geGdldHg7CisgICAgICAgICAgICB9CisgICAg ICAgICAgICBpZiAoCisjaWZkZWYgQ09NTUVOVAorCQkoeCA9IGNtZmxkKCJOYW1lIHRvIHN0b3Jl IGl0IHVuZGVyIiwiIiwmcyxOVUxMKSkKKyNlbHNlCisJCSh4ID0gY21mbGQoIk5hbWUgdG8gc3Rv cmUgaXQgdW5kZXIiLCIiLCZzLHh4c3RyaW5nKSkKKyNlbmRpZgkvKiBDT01NRU5UICovCisJCTwg MCkKKyAgICAgICAgICAgICAgZ290byB4Z2V0eDsKKyAgICAgICAgICAgIHMgPSBicnN0cmlwKHMp OworICAgICAgICAgICAgaWYgKCh5ID0gc3RybGVuKHMpKSA+IDApIHsKKyAgICAgICAgICAgICAg ICBpZiAocHZbbl0uc3ZhbCkgZnJlZShwdltuXS5zdmFsKTsKKyAgICAgICAgICAgICAgICBwdltu XS5zdmFsID0gbWFsbG9jKHkrMSk7CisgICAgICAgICAgICAgICAgaWYgKHB2W25dLnN2YWwpIHsK KyAgICAgICAgICAgICAgICAgICAgc3RyY3B5KHB2W25dLnN2YWwscyk7IC8qIHNhZmUgKi8KKyAg ICAgICAgICAgICAgICAgICAgcHZbbl0uaXZhbCA9IDE7CisgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyNpZmRlZiBQSVBFU0VORAorICAgICAg ICAgIGNhc2UgU05EX0ZMVDogICAgICAgICAgICAgICAgIC8qIEZpbHRlciAqLworICAgICAgICAg ICAgZGVidWcoRjEwMSwieGdldCAvZmlsdGVyIGdldHZhbCIsIiIsZ2V0dmFsKTsKKyAgICAgICAg ICAgIGlmICghZ2V0dmFsKSBicmVhazsKKyAgICAgICAgICAgIGlmICgoeCA9IGNtZmxkKCJGaWx0 ZXIgcHJvZ3JhbSB0byByZWNlaXZlIHRocm91Z2giLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgIiIsJnMsTlVMTCkpIDwgMCkgeworICAgICAgICAgICAgICAgIGlmICh4ID09IC0zKQorICAg ICAgICAgICAgICAgICAgcyA9ICIiOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg ICAgICAgIGdvdG8geGdldHg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoKnMpIHMg PSBicnN0cmlwKHMpOworICAgICAgICAgICAgeSA9IHN0cmxlbihzKTsKKyAgICAgICAgICAgIGZv ciAoeCA9IDA7IHggPCB5OyB4KyspIHsgICAvKiBNYWtlIHN1cmUgdGhleSBpbmNsdWRlZCAiXHYo Li4uKSIgKi8KKyAgICAgICAgICAgICAgICBpZiAoc1t4XSAhPSAnXFwnKSBjb250aW51ZTsKKyAg ICAgICAgICAgICAgICBpZiAoc1t4KzFdID09ICd2JykgYnJlYWs7CisgICAgICAgICAgICB9Cisg ICAgICAgICAgICBpZiAoeCA9PSB5KSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKAorICAgICAg ICAgICAgICAgICI/RmlsdGVyIG11c3QgY29udGFpbiBhIHJlcGxhY2VtZW50IHZhcmlhYmxlIGZv ciBmaWxlbmFtZS5cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAg ICB4ID0gLTk7CisgICAgICAgICAgICAgICAgZ290byB4Z2V0eDsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIHB2W25dLml2YWwgPSAxOworICAgICAgICAgICAgaWYgKHB2W25dLnN2YWwpIHsK KyAgICAgICAgICAgICAgICBmcmVlKHB2W25dLnN2YWwpOworICAgICAgICAgICAgICAgIHB2W25d LnN2YWwgPSBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCh5ID0gc3RybGVu KHMpKSA+IDApIHsKKyAgICAgICAgICAgICAgICBpZiAoKHB2W25dLnN2YWwgPSBtYWxsb2MoeSsx KSkpCisgICAgICAgICAgICAgICAgICBzdHJjcHkocHZbbl0uc3ZhbCxzKTsgLyogc2FmZSAqLwor ICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogUElQRVNFTkQgKi8K KworICAgICAgICAgIGNhc2UgU05EX1BUSDogICAgICAgICAgICAgICAgIC8qIFBhdGhuYW1lcyAq LworICAgICAgICAgICAgaWYgKCFnZXR2YWwpIHsKKyAgICAgICAgICAgICAgICBwdltuXS5pdmFs ID0gUEFUSF9SRUw7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg ICAgICAgICBpZiAoKHggPSBjbWtleShycGF0aHRhYixucnBhdGh0YWIsIiIsIm9uIix4eHN0cmlu ZykpIDwgMCkKKyAgICAgICAgICAgICAgZ290byB4Z2V0eDsKKyAgICAgICAgICAgIHB2W25dLml2 YWwgPSB4OyAgICAgICAgICAgICAvKiBEaXR0byAqLworICAgICAgICAgICAgYnJlYWs7CisKKyAg ICAgICAgICBjYXNlIFNORF9OQU06ICAgICAgICAgICAgICAgICAvKiBGaWxlbmFtZXMgKi8KKyAg ICAgICAgICAgIGlmICghZ2V0dmFsKSBicmVhazsKKyAgICAgICAgICAgIGlmICgoeCA9IGNta2V5 KGZudGFiLG5mbnRhYiwiIiwiY29udmVydGVkIix4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICAg ICAgZ290byB4Z2V0eDsKKyAgICAgICAgICAgIHB2W25dLml2YWwgPSB4OworICAgICAgICAgICAg YnJlYWs7CisKKyAgICAgICAgICBjYXNlIFNORF9QUk86ICAgICAgICAgICAgICAgICAvKiBQcm90 b2NvbCB0byB1c2UgKi8KKyAgICAgICAgICAgIGlmICghZ2V0dmFsKSBicmVhazsKKyAgICAgICAg ICAgIGlmICgoeCA9IGNta2V5KHByb3RvcyxucHJvdG9zLCJGaWxlLXRyYW5zZmVyIHByb3RvY29s IiwiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHh4c3RyaW5nKSkgPCAwKSB7CisgICAg ICAgICAgICAgICAgaWYgKHggPT0gLTMpCisgICAgICAgICAgICAgICAgICB4ID0gMDsKKyAgICAg ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICBnb3RvIHhnZXR4OworICAgICAgICAg ICAgfQorICAgICAgICAgICAgZGVidWcoRjExMSwieGdldCAvcHJvdG8iLGF0bWJ1Zix4KTsKKyAg ICAgICAgICAgIHB2W25dLml2YWwgPSB4OworICAgICAgICAgICAgaWYgKGtvbmx5ICYmIHggIT0g UFJPVE9fSykgeworICAgICAgICAgICAgICAgIHByaW50ZigKKyI/U29ycnksIHRoaXMgY29tbWFu ZCB3b3JrcyBvbmx5IHdpdGggS2VybWl0IHByb3RvY29sXG4iCisgICAgICAgICAgICAgICAgICAg ICAgICk7CisgICAgICAgICAgICAgICAgeCA9IC05OworICAgICAgICAgICAgICAgIGdvdG8geGdl dHg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGRlZmF1 bHQ6CisgICAgICAgICAgICBwcmludGYoIj9VbmV4cGVjdGVkIHN3aXRjaCB2YWx1ZSAtICVkXG4i LGNtcmVzdWx0Lm5yZXN1bHQpOworICAgICAgICAgICAgeCA9IC05OworICAgICAgICAgICAgZ290 byB4Z2V0eDsKKyAgICAgICAgfQorICAgIH0KKyAgICBkZWJ1ZyhGMTAxLCJ4Z2V0IGNtcmVzdWx0 IGZjb2RlIiwiIixjbXJlc3VsdC5mY29kZSk7CisKKyAgICBjbWFyZyA9IGxpbmU7ICAgICAgICAg ICAgICAgICAgICAgICAvKiBJbml0aWFsaXplIHN0cmluZyBwb2ludGVycyAqLworICAgIGNtYXJn MiA9IHRtcGJ1ZjsKKyAgICBhc25hbWUgPSAwOworICAgIGxpbmVbMF0gPSBOVUw7ICAgICAgICAg ICAgICAgICAgICAgIC8qIGFuZCBidWZmZXJzLiAqLworICAgIHRtcGJ1ZlswXSA9IE5VTDsKKwor ICAgIHN3aXRjaCAoY21yZXN1bHQuZmNvZGUpIHsgICAgICAgICAgIC8qIEhvdyBkaWQgd2UgZ2V0 IG91dCBvZiBzd2l0Y2ggbG9vcCAqLworICAgICAgY2FzZSBfQ01GTEQ6ICAgICAgICAgICAgICAg ICAgICAgIC8qICgzKSBSZW1vdGUgZmlsZXNwZWMgKi8KKyAgICAgICAgY2tzdHJuY3B5KGxpbmUs Y21yZXN1bHQuc3Jlc3VsdCxMSU5CVUZTSVopOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug X0NNVFhUOiAgICAgICAgICAgICAgICAgICAgICAvKiAoNCkgQXMtbmFtZSAqLworICAgICAgICBp ZiAocmN2Y21kKSB7CisgICAgICAgICAgICBja3N0cm5jcHkodG1wYnVmLGNtcmVzdWx0LnNyZXN1 bHQsVE1QQlVGU0laKTsKKyAgICAgICAgICAgIGlmICgoaW50KXN0cmxlbih0bXBidWYpID4gMCkK KyAgICAgICAgICAgICAgYXNuYW1lID0gMTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg IGNrc3RybmNweShsaW5lLGNtcmVzdWx0LnNyZXN1bHQsTElOQlVGU0laKTsKKyAgICAgICAgfQor ICAgICAgY2FzZSBfQ01DRk06ICAgICAgICAgICAgICAgICAgICAgIC8qICg2KSBDb25maXJtYXRp b24gKi8KKyAgICAgICAgY29uZmlybWVkID0gMTsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZh dWx0OgorICAgICAgICBwcmludGYoIj9VbmV4cGVjdGVkIGZ1bmN0aW9uIGNvZGU6ICVkXG4iLGNt cmVzdWx0LmZjb2RlKTsKKyAgICAgICAgeCA9IC05OworICAgICAgICBnb3RvIHhnZXR4OworICAg IH0KKyAgICBkZWJ1ZyhGMTEwLCJ4Z2V0IHN0cmluZyIsY21hcmcsMCk7CisgICAgZGVidWcoRjEw MSwieGdldCBjb25maXJtZWQiLCIiLGNvbmZpcm1lZCk7CisKKyAgICBjbWFyZyA9IGJyc3RyaXAo Y21hcmcpOyAgICAgICAgICAgICAvKiBTdHJpcCBhbnkgYnJhY2VzICovCisKKyAgICBpZiAoIWNv bmZpcm1lZCkgeyAgICAgICAgICAgICAgICAgICAvKiBDUiBub3QgdHlwZWQgeWV0LCBnZXQgbW9y ZSBmaWVsZHMgKi8KKyAgICAgICAgaWYgKHB2W1NORF9DTURdLml2YWwgPiAwKSB7CisgICAgICAg ICAgICBkZWJ1ZyhGMTAwLCJ4Z2V0IGNhbGxpbmcgY210eHQiLCIiLDApOworICAgICAgICAgICAg eCA9IGNtdHh0KCJMb2NhbCBjb21tYW5kIHRvIHBpcGUgaW50byIsIiIsJnMsTlVMTCk7CisgICAg ICAgICAgICBpZiAoeCA8IDAgJiYgeCAhPSAtMykgZ290byB4Z2V0eDsKKyAgICAgICAgICAgIGlm ICh4ICE9IC0zKSB7CisgICAgICAgICAgICAgICAgY2tzdHJuY3B5KHRtcGJ1ZixzLFRNUEJVRlNJ Wik7CisgICAgICAgICAgICAgICAgYXNuYW1lID0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg fSBlbHNlIGlmICghcmN2Y21kKSB7CisjaWZkZWYgVk1TCisgICAgICAgICAgICAvKiBjbW9maSgp IGZhaWxzIGlmIHlvdSBnaXZlIGl0IGEgZGlyZWN0b3J5IG5hbWUgKi8KKyAgICAgICAgICAgIHgg PSBjbWZsZCgiTmFtZSBvciBkaXJlY3RvcnkgZm9yIGluY29taW5nIGZpbGUiLCIiLCZzLE5VTEwp OworICAgICAgICAgICAgZGVidWcoRjExMSwieGdldCBjbWZsZCIscyx4KTsKKyNlbHNlCisgICAg ICAgICAgICB4ID0gY21vZmkoIk5hbWUgb3IgZGlyZWN0b3J5IGZvciBpbmNvbWluZyBmaWxlIiwi IiwmcyxOVUxMKTsKKyAgICAgICAgICAgIGRlYnVnKEYxMTEsInhnZXQgY21vZmkiLHMseCk7Cisj ZW5kaWYgLyogVk1TICovCisgICAgICAgICAgICBpZiAoeCA8IDAgJiYgeCAhPSAtMykgZ290byB4 Z2V0eDsKKyAgICAgICAgICAgIGlmICh4ICE9IC0zKSB7CisgICAgICAgICAgICAgICAgY2tzdHJu Y3B5KHRtcGJ1ZixzLFRNUEJVRlNJWik7CisgICAgICAgICAgICAgICAgaWYgKCh4ID0gY21jZm0o KSkgPCAwKSBnb3RvIHhnZXR4OworICAgICAgICAgICAgICAgIGFzbmFtZSA9IDE7CisgICAgICAg ICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgLyogQXJyaXZlIGhlcmUgd2l0aCBjbWFyZyBh bmQgY21hcmcyIGFsbCBzZXQgKi8KKworICAgIGRlYnVnKEYxMTEsInhnZXQgYXNuYW1lIixjbWFy ZzIsYXNuYW1lKTsKKyAgICBpZiAoIWFzbmFtZSkgeworICAgICAgICBpZiAocHZbU05EX0FTTl0u c3ZhbCkKKyAgICAgICAgICBja3N0cm5jcHkodG1wYnVmLHB2W1NORF9BU05dLnN2YWwsVE1QQlVG U0laKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIHRtcGJ1ZlswXSA9IE5VTDsKKyAgICB9Cisg ICAgY21hcmcyID0gYnJzdHJpcChjbWFyZzIpOyAgICAgICAgICAgLyogU3RyaXAgb3V0ZXIgYnJh Y2VzIGlmIGFueS4gKi8KKyAgICBkZWJ1ZyhGMTEwLCJ4Z2V0IGNtYXJnIixjbWFyZywwKTsKKyAg ICBkZWJ1ZyhGMTEwLCJ4Z2V0IGNtYXJnMiIsY21hcmcyLDApOworCisgICAgaWYgKCEqY21hcmcg JiYKKyAgICAgICAgKGN4ID09IFhYR0VUIHx8IGN4ID09IFhYUkVHRVQgfHwgY3ggPT0gWFhDR0VU IHx8IGN4ID09IFhYTUdFVCkpIHsKKyAgICAgICAgcHJpbnRmKCI/QSByZW1vdGUgZmlsZSBzcGVj aWZpY2F0aW9uIGlzIHJlcXVpcmVkXG4iKTsKKyAgICAgICAgeCA9IC05OworICAgICAgICBnb3Rv IHhnZXR4OworICAgIH0KKyNpZmRlZiBQSVBFU0VORAorICAgIGlmIChwdltTTkRfQ01EXS5pdmFs ID4gMCkgeyAgICAgICAgIC8qIC9DT01NQU5EIHNldHMgcGlwZXNlbmQgZmxhZyAqLworICAgICAg ICB4ID0gLTk7CisgICAgICAgIGlmICghKmNtYXJnMikgeworICAgICAgICAgICAgcHJpbnRmKCI/ Q29tbWFuZCByZXF1aXJlZFxuIik7CisgICAgICAgICAgICBnb3RvIHhnZXR4OworICAgICAgICB9 IGVsc2UgaWYgKG5vcHVzaCkgeworICAgICAgICAgICAgcHJpbnRmKCI/U29ycnksIHN5c3RlbSBj b21tYW5kIGFjY2VzcyBpcyBkaXNhYmxlZFxuIik7CisgICAgICAgICAgICBnb3RvIHhnZXR4Owor ICAgICAgICB9IGVsc2UgaWYgKHJjdmZpbHRlcikgeworICAgICAgICAgICAgcHJpbnRmKCI/U29y cnksIG5vIEdFVCAvQ09NTUFORCB3aGlsZSBSRUNFSVZFIEZJTFRFUiBzZWxlY3RlZFxuIik7Cisg ICAgICAgICAgICBnb3RvIHhnZXR4OworICAgICAgICB9IGVsc2UKKyAgICAgICAgICBwaXBlc2Vu ZCA9IDE7CisgICAgfQorICAgIGRlYnVnKEYxMDEsInhnZXQgL0NPTU1BTkQgcGlwZXNlbmQiLCIi LHBpcGVzZW5kKTsKKyNlbmRpZiAvKiBQSVBFU0VORCAqLworCisjaWZkZWYgQ0tfUkVTRU5ECisg ICAgaWYgKHB2W1NORF9SRVNdLml2YWwgPiAwKSB7ICAgICAgICAgLyogUkVHRVQgb3IgR0VUIC9S RUNPVkVSICovCisjaWZkZWYgUkVDVVJTSVZFCisgICAgICAgIGlmIChwdltTTkRfUkVDXS5pdmFs ID4gMCkgeyAgICAgLyogUkVDVVJTSVZFICovCisjaWZkZWYgQ09NTUVOVAorICAgICAgICAgICAg cHJpbnRmKCI/VW5zdXBwb3J0ZWQgb3B0aW9uIGNvbWJpbmF0aW9uOiAvUkVDT1ZFUiAvUkVDVVJT SVZFXG4iKTsKKyAgICAgICAgICAgIHggPSAtOTsKKyAgICAgICAgICAgIGdvdG8geGdldHg7Cisj ZWxzZQorICAgICAgICAgICAgb3BrdCA9IDE7CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAg ICB9CisjZW5kaWYgLyogUkVDVVJTSVZFICovCisgICAgICAgIGlmIChwdltTTkRfREVMXS5pdmFs ID4gMCkgeyAgICAgLyogL0RFTEVURSAqLworI2lmZGVmIENPTU1FTlQKKyAgICAgICAgICAgIHBy aW50ZigiP1Vuc3VwcG9ydGVkIG9wdGlvbiBjb21iaW5hdGlvbjogL1JFQ09WRVIgL0RFTEVURVxu Iik7CisgICAgICAgICAgICB4ID0gLTk7CisgICAgICAgICAgICBnb3RvIHhnZXR4OworI2Vsc2UK KyAgICAgICAgICAgIG9wa3QgPSAxOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAgfQor ICAgIH0KKyNlbmRpZiAvKiBDS19SRVNFTkQgKi8KKworICAgIGlmIChwdltTTkRfRVhDXS5pdmFs ID4gMCkgICAgICAgICAgIC8qIC9FWENFUFQgKi8KKyAgICAgIG1ha2VsaXN0KHB2W1NORF9FWENd LnN2YWwscmN2ZXhjZXB0LE5TTkRFWENFUFQpOworCisjaWZkZWYgSUtTX09QVElPTgorICAgIGlm ICghcmN2Y21kCisjaWZkZWYgQ0tfWFlaCisgICAgICAgICAmJiBwcm90b2NvbCA9PSBQUk9UT19L CisjZW5kaWYgLyogQ0tfWFlaICovCisgICAgICAgICApIHsKKyAgICAgICAgaWYgKCFpa3Nfd2Fp dChLRVJNSVRfUkVRX1NUQVJULDEpKSB7CisgICAgICAgICAgICBwcmludGYoCisgICAgICAgICAg ICAgICI/QSBLZXJtaXQgU2VydmVyIGlzIG5vdCBhdmFpbGFibGUgdG8gcHJvY2VzcyB0aGlzIGNv bW1hbmRcbiIpOworICAgICAgICAgICAgeCA9IC05OyAgICAgICAgICAgICAgICAgICAgIC8qIGNv cnJlY3QgdGhlIHJldHVybiBjb2RlICovCisgICAgICAgICAgICBnb3RvIHhnZXR4OworICAgICAg ICB9CisgICAgfQorI2VuZGlmIC8qIElLU19PUFRJT04gKi8KKworI2lmZGVmIENLX1hZWgorICAg IHsKKyAgICAgICAgaW50IHBvLCBwZzsgICAgICAgICAgICAgICAgICAgICAvKiAoZm9yIGNsYXJp dHkpICovCisgICAgICAgIHBvID0gcHZbU05EX1BST10uaXZhbDsgICAgICAgICAgLyogL1BST1RP Q09MIG9wdGlvbiAqLworICAgICAgICBwZyA9IHByb3RvY29sOyAgICAgICAgICAgICAgICAgIC8q IFByb3RvY29sIGdsb2JhbCAgKi8KKyAgICAgICAgaWYgKChyY3ZjbWQgJiYgISpjbWFyZzIpICYm ICAgICAvKiBJZiBubyBhcy1uYW1lIHdhcyBnaXZlbiAqLworICAgICAgICAgICAgLyogYW5kIC9Q Uk9UT0NPTCBpcyBYTU9ERU0gb3IgZ2xvYmFsIHByb3RvY29sIGlzIFhNT0RFTS4uLiAqLworICAg ICAgICAgICAgKChwbyA8ICAwICYmIChwZyA9PSBQUk9UT19YIHx8IHBnID09IFBST1RPX1hDKSkg fHwKKyAgICAgICAgICAgICAocG8gPiAtMSAmJiAocG8gPT0gUFJPVE9fWCB8fCBwbyA9PSBQUk9U T19YQykpKQorICAgICAgICAgICAgKSB7CisgICAgICAgICAgICBwcmludGYoCisiU29ycnksIHlv dSBtdXN0IHNwZWNpZnkgYSBuYW1lIHdoZW4gcmVjZWl2aW5nIGEgZmlsZSB3aXRoIFhNT0RFTSBw cm90b2NvbFxuIgorICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICB4ID0gLTk7Cisg ICAgICAgICAgICBnb3RvIHhnZXR4OworICAgICAgICB9CisgICAgfQorI2VuZGlmIC8qIENLX1hZ WiAqLworCisjaWZkZWYgUkVDVVJTSVZFCisgICAgaWYgKHB2W1NORF9SRUNdLml2YWwgPiAwKSB7 ICAgICAgICAgLyogUkVDVVJTSVZFICovCisgICAgICAgIHJlY3Vyc2l2ZSA9IDE7CisgICAgICAg IHB2W1NORF9QVEhdLml2YWwgPSBQQVRIX1JFTDsgICAgLyogSW1wbGllcyByZWxhdGl2ZSBwYXRo bmFtZXMgdG9vICovCisgICAgfQorI2VuZGlmIC8qIFJFQ1VSU0lWRSAqLworCisgICAgaWYgKHB2 W1NORF9QSVBdLml2YWwgPiAtMSkgeworICAgICAgICBnX3VzZXBpcGVzID0gdXNlcGlwZXM7Cisg ICAgICAgIHVzZXBpcGVzID0gcHZbU05EX1BJUF0uaXZhbDsKKyAgICB9CisKKyAgICAvKiBTYXZl IGdsb2JhbCBwcm90b2NvbCBwYXJhbWV0ZXJzICovCisKKyAgICBnX3Byb3RvID0gcHJvdG9jb2w7 CisjaWZkZWYgQ0tfTEFCRUxFRAorICAgIGdfbGZfb3B0cyA9IGxmX29wdHM7ICAgICAgICAgICAg ICAgIC8qIFNhdmUgbGFiZWxlZCB0cmFuc2ZlciBvcHRpb25zICovCisjZW5kaWYgLyogQ0tfTEFC RUxFRCAqLworICAgIGdfdXJwc2l6ID0gdXJwc2l6OyAgICAgICAgICAgICAgICAgIC8qIFJlY2Vp dmUgcGFja2V0IGxlbmd0aCAqLworICAgIGdfc3BzaXpmID0gc3BzaXpmOyAgICAgICAgICAgICAg ICAgIC8qIFNlbmQgcGFja2V0IGxlbmd0aCBmbGFnICovCisgICAgZ19zcHNpeiA9IHNwc2l6OyAg ICAgICAgICAgICAgICAgICAgLyogU2VuZCBwYWNrZXQgbGVuZ3RoICovCisgICAgZ19zcHNpenIg PSBzcHNpenI7ICAgICAgICAgICAgICAgICAgLyogZXRjIGV0YyAqLworICAgIGdfc3BtYXggPSBz cG1heDsKKyAgICBnX3dzbG90ciA9IHdzbG90cjsKKyAgICBnX3ByZWZpeGluZyA9IHByZWZpeGlu ZzsKKyAgICBnX2ZuY2FjdCA9IGZuY2FjdDsKKyAgICBnX2ZuY252ID0gZm5jbnY7CisgICAgZ19m bnNwYXRoID0gZm5zcGF0aDsKKyAgICBnX2ZucnBhdGggPSBmbnJwYXRoOworICAgIGdfeGZyeGxh ID0geGZyeGxhOworCisgICAgaWYgKHB2W1NORF9QUk9dLml2YWwgPiAtMSkgeyAgICAgICAgLyog Q2hhbmdlIGFjY29yZGluZyB0byBzd2l0Y2ggKi8KKyAgICAgICAgcHJvdG9jb2wgPSBwdltTTkRf UFJPXS5pdmFsOworICAgICAgICBpZiAocHRhYltwcm90b2NvbF0ucnBrdGxlbiA+IC0xKSAgIC8q IGNvcGllZCBmcm9tIGluaXRwcm90bygpICovCisgICAgICAgICAgICB1cnBzaXogPSBwdGFiW3By b3RvY29sXS5ycGt0bGVuOworICAgICAgICBpZiAocHRhYltwcm90b2NvbF0uc3BrdGZsZyA+IC0x KQorICAgICAgICAgICAgc3BzaXpmID0gcHRhYltwcm90b2NvbF0uc3BrdGZsZzsKKyAgICAgICAg aWYgKHB0YWJbcHJvdG9jb2xdLnNwa3RsZW4gPiAtMSkgeworICAgICAgICAgICAgc3BzaXogPSBw dGFiW3Byb3RvY29sXS5zcGt0bGVuOworICAgICAgICAgICAgaWYgKHNwc2l6ZikKKyAgICAgICAg ICAgICAgICBzcHNpenIgPSBzcG1heCA9IHNwc2l6OworICAgICAgICB9CisgICAgICAgIGlmIChw dGFiW3Byb3RvY29sXS53aW5zaXplID4gLTEpCisgICAgICAgICAgICB3c2xvdHIgPSBwdGFiW3By b3RvY29sXS53aW5zaXplOworICAgICAgICBpZiAocHRhYltwcm90b2NvbF0ucHJlZml4ID4gLTEp CisgICAgICAgICAgICBwcmVmaXhpbmcgPSBwdGFiW3Byb3RvY29sXS5wcmVmaXg7CisgICAgICAg IGlmIChwdGFiW3Byb3RvY29sXS5mbmNhID4gLTEpCisgICAgICAgICAgICBmbmNhY3QgID0gcHRh Yltwcm90b2NvbF0uZm5jYTsKKyAgICAgICAgaWYgKHB0YWJbcHJvdG9jb2xdLmZuY24gPiAtMSkK KyAgICAgICAgICAgIGZuY252ICAgPSBwdGFiW3Byb3RvY29sXS5mbmNuOworICAgICAgICBpZiAo cHRhYltwcm90b2NvbF0uZm5zcCA+IC0xKQorICAgICAgICAgICAgZm5zcGF0aCA9IHB0YWJbcHJv dG9jb2xdLmZuc3A7CisgICAgICAgIGlmIChwdGFiW3Byb3RvY29sXS5mbnJwID4gLTEpCisgICAg ICAgICAgICBmbnJwYXRoID0gcHRhYltwcm90b2NvbF0uZm5ycDsKKyAgICB9CisgICAgZGVidWco RjEwMSwieGdldCBwcm90b2NvbCIsIiIscHJvdG9jb2wpOworICAgIGRlYnVnKEYxMTEsInhnZXQg Y21hcmcyIixjbWFyZzIseGZlcm1vZGUpOworCisgICAgZ194ZmVybW9kZSA9IHhmZXJtb2RlOwor ICAgIGdfYmluYXJ5ID0gYmluYXJ5OworICAgIGlmIChwdltTTkRfQklOXS5pdmFsID4gMCkgeyAg ICAgICAgIC8qIENoYW5nZSBhY2NvcmRpbmcgdG8gc3dpdGNoICovCisgICAgICAgIHhmZXJtb2Rl ID0gWE1PREVfTTsKKyAgICAgICAgYmluYXJ5ID0gWFlGVF9COyAgICAgICAgICAgICAgICAvKiBG SUxFIFRZUEUgQklOQVJZICovCisgICAgICAgIG9tb2RlID0gR01PRF9CSU47ICAgICAgICAgICAg ICAgLyogTy1QYWNrZXQgbW9kZSAqLworICAgICAgICBkZWJ1ZyhGMTAxLCJkb3hnZXQgL0JJTkFS WSB4ZmVybW9kZSIsIiIseGZlcm1vZGUpOworICAgIH0gZWxzZSBpZiAocHZbU05EX1RYVF0uaXZh bCA+IDApIHsgIC8qIERpdHRvIGZvciAvVEVYVCAqLworICAgICAgICB4ZmVybW9kZSA9IFhNT0RF X007CisgICAgICAgIGJpbmFyeSA9IFhZRlRfVDsKKyAgICAgICAgb21vZGUgPSBHTU9EX1RYVDsK KyAgICAgICAgZGVidWcoRjEwMSwiZG94Z2V0IC9URVhUIHhmZXJtb2RlIiwiIix4ZmVybW9kZSk7 CisgICAgfSBlbHNlIGlmIChwdltTTkRfSU1HXS5pdmFsID4gMCkgeworICAgICAgICB4ZmVybW9k ZSA9IFhNT0RFX007CisjaWZkZWYgVk1TCisgICAgICAgIGJpbmFyeSA9IFhZRlRfSTsKKyNlbHNl CisgICAgICAgIGJpbmFyeSA9IFhZRlRfQjsKKyNlbmRpZiAvKiBWTVMgKi8KKyAgICAgICAgb21v ZGUgPSBHTU9EX1RYVDsKKyAgICAgICAgZGVidWcoRjEwMSwiZG94Z2V0IC9JTUFHRSB4ZmVybW9k ZSIsIiIseGZlcm1vZGUpOworICAgIH0KKyNpZmRlZiBDS19MQUJFTEVECisgICAgZWxzZSBpZiAo cHZbU05EX0xCTF0uaXZhbCA+IDApIHsKKyAgICAgICAgeGZlcm1vZGUgPSBYTU9ERV9NOworICAg ICAgICBiaW5hcnkgPSBYWUZUX0w7CisgICAgICAgIG9tb2RlID0gR01PRF9MQkw7CisgICAgICAg IGRlYnVnKEYxMDEsImRveGdldCAvTEFCRUxFRCB4ZmVybW9kZSIsIiIseGZlcm1vZGUpOworICAg IH0KKyNlbmRpZiAvKiBDS19MQUJFTEVEICovCisgICAgZGVidWcoRjEwMSwieGdldCBiaW5hcnki LCIiLGJpbmFyeSk7CisgICAgZGVidWcoRjEwMSwieGdldCBvbW9kZSIsIiIsb21vZGUpOworCisg ICAgaWYgKHB2W1NORF9YUEFdLml2YWwgPiAwKSAgICAgICAgICAgLyogL1RSQU5TUEFSRU5UICov CisgICAgICB4ZnJ4bGEgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgLyogRG9uJ3QgdHJhbnNs YXRlIGNoYXJhY3RlciBzZXRzICovCisKKyNpZmRlZiBQSVBFU0VORAorICAgIGlmIChwdltTTkRf RkxUXS5pdmFsID4gMCkKKyAgICAgIG1ha2VzdHIoJnJjdmZpbHRlcixwdltTTkRfRkxUXS5zdmFs KTsKKyNlbmRpZiAvKiBQSVBFU0VORCAqLworCisjaWZkZWYgQ0tfVE1QRElSCisgICAgaWYgKHB2 W1NORF9NT1ZdLml2YWwgPiAwKSB7CisgICAgICAgIGludCBsZW47CisgICAgICAgIGNoYXIgKiBw ID0gcHZbU05EX01PVl0uc3ZhbDsKKyNpZmRlZiBDS19MT0dJTgorICAgICAgICBpZiAoaXNndWVz dCkgeworICAgICAgICAgICAgcHJpbnRmKCI/U29ycnksIC9NT1ZFLVRPIG5vdCBhdmFpbGFibGUg dG8gZ3Vlc3RzXG4iKTsKKyAgICAgICAgICAgIHggPSAtOTsKKyAgICAgICAgICAgIGdvdG8geGdl dHg7CisgICAgICAgIH0KKyNlbmRpZiAvKiBDS19MT0dJTiAqLworICAgICAgICBsZW4gPSBzdHJs ZW4ocCk7CisgICAgICAgIGlmICghaXNkaXIocCkpIHsgICAgICAgICAgICAgICAgLyogQ2hlY2sg ZGlyZWN0b3J5ICovCisjaWZkZWYgQ0tfTUtESVIKKyAgICAgICAgICAgIGNoYXIgKiBzID0gTlVM TDsKKyAgICAgICAgICAgIHMgPSAoY2hhciAqKW1hbGxvYyhsZW4gKyA0KTsKKyAgICAgICAgICAg IGlmIChzKSB7CisgICAgICAgICAgICAgICAgc3RyY3B5KHMscCk7ICAgICAgICAgICAgLyogc2Fm ZSAqLworI2lmZGVmIGRhdGFnZW5lcmFsCisgICAgICAgICAgICAgICAgaWYgKHNbbGVuLTFdICE9 ICc6JykgeyBzW2xlbisrXSA9ICc6Jzsgc1tsZW5dID0gTlVMOyB9CisjZWxzZQorICAgICAgICAg ICAgICAgIGlmIChzW2xlbi0xXSAhPSAnLycpIHsgc1tsZW4rK10gPSAnLyc7IHNbbGVuXSA9IE5V TDsgfQorI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCisgICAgICAgICAgICAgICAgc1tsZW4rK10g PSAnWCc7CisgICAgICAgICAgICAgICAgc1tsZW5dID0gTlVMOworICAgICAgICAgICAgICAgIHgg PSB6bWtkaXIocyk7CisgICAgICAgICAgICAgICAgZnJlZShzKTsKKyAgICAgICAgICAgICAgICBp ZiAoeCA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/Q2FuJ3QgY3JlYXRlIFwi JXNcIlxuIixwKTsKKyAgICAgICAgICAgICAgICAgICAgeCA9IC05OworICAgICAgICAgICAgICAg ICAgICBnb3RvIHhnZXR4OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyNlbHNl CisgICAgICAgICAgICBwcmludGYoIj9EaXJlY3RvcnkgXCIlc1wiIG5vdCBmb3VuZFxuIixwKTsK KyAgICAgICAgICAgIHggPSAtOTsKKyAgICAgICAgICAgIGdvdG8geGdldHg7CisjZW5kaWYgLyog Q0tfTUtESVIgKi8KKyAgICAgICAgfQorICAgICAgICB6Zm5xZnAocCxMSU5CVUZTSVosbGluZSk7 CisgICAgICAgIG1ha2VzdHIoJnJjdl9tb3ZlLGxpbmUpOworICAgIH0KKyNlbmRpZiAvKiBDS19U TVBESVIgKi8KKworICAgIGlmIChwdltTTkRfUkVOXS5pdmFsID4gMCkgeyAgICAgICAgIC8qIC9S RU5BTUUtVE86bmFtZSAqLworICAgICAgICBjaGFyICogcCA9IHB2W1NORF9SRU5dLnN2YWw7Cisj aWZkZWYgQ0tfTE9HSU4KKyAgICAgICAgaWYgKGlzZ3Vlc3QpIHsKKyAgICAgICAgICAgIHByaW50 ZigiP1NvcnJ5LCAvUkVOQU1FLVRPIG5vdCBhdmFpbGFibGUgdG8gZ3Vlc3RzXG4iKTsKKyAgICAg ICAgICAgIHggPSAtOTsKKyAgICAgICAgICAgIGdvdG8geGdldHg7CisgICAgICAgIH0KKyNlbmRp ZiAvKiBDS19MT0dJTiAqLworICAgICAgICBpZiAoIXApIHAgPSAiIjsKKyAgICAgICAgaWYgKCEq cCkgeworICAgICAgICAgICAgcHJpbnRmKCI/TmV3IG5hbWUgcmVxdWlyZWQgZm9yIC9SRU5BTUVc biIpOworICAgICAgICAgICAgeCA9IC05OworICAgICAgICAgICAgZ290byB4Z2V0eDsKKyAgICAg ICAgfQorICAgICAgICBwID0gYnJzdHJpcChwKTsKKyAgICAgICAgbWFrZXN0cigmcmN2X3JlbmFt ZSxwKTsKKyAgICAgICAgZGVidWcoRjExMCwieGdldCByY3ZfcmVuYW1lIiwiIiwwKTsKKyAgICB9 CisKKyNpZmRlZiBDQUxJQlJBVEUKKyAgICBpZiAocHZbU05EX0NBTF0uaXZhbCA+IDApCisgICAg ICBjYWxpYnJhdGUgPSAoQ0tfT0ZGX1QpMTsKKyNlbmRpZiAvKiBDQUxJQlJBVEUgKi8KKyAgICBn X2Rpc3BsYSA9IGZkaXNwbGE7CisgICAgaWYgKHB2W1NORF9TSEhdLml2YWwgPiAwKQorICAgICAg ZmRpc3BsYSA9IDA7CisgICAgZGVidWcoRjEwMSwieGdldCBkaXNwbGF5IiwiIixmZGlzcGxhKTsK KworICAgIGlmIChwdltTTkRfTkFNXS5pdmFsID4gLTEpIHsgICAgICAgIC8qIC9GSUxFTkFNRVMg Ki8KKyAgICAgICAgZ19mbmNudiA9IGZuY252OyAgICAgICAgICAgICAgICAvKiBTYXZlIGdsb2Jh bCB2YWx1ZSAqLworICAgICAgICBmbmNudiA9IHB2W1NORF9OQU1dLml2YWw7CisgICAgICAgIGRl YnVnKEYxMDEsInhzZW5kIGZuY252IiwiIixmbmNudik7CisgICAgICAgIC8qIFdlIHNob3VsZCBh bHNvIGhhbmRsZSBPIHBhY2tldCBmaWxlbmFtZSBvcHRpb24gaGVyZSAqLworICAgICAgICAvKiBi dXQgd2UgZG9uJ3QgcmVhbGx5IG5lZWQgdG8gc2luY2UgV0hBVEFNSSBhbHJlYWR5IGhhbmRsZXMg aXQgKi8KKyAgICB9CisgICAgaWYgKHB2W1NORF9QVEhdLml2YWwgPiAtMSkgeyAgICAgICAgLyog UEFUSE5BTUVTICovCisgICAgICAgIGdfcnBhdGggPSBmbnJwYXRoOyAgICAgICAgICAgICAgLyog U2F2ZSBnbG9iYWwgdmFsdWVzICovCisgICAgICAgIGZucnBhdGggPSBwdltTTkRfUFRIXS5pdmFs OworICAgICAgICBkZWJ1ZyhGMTAxLCJ4c2VuZCBmbnJwYXRoIiwiIixmbnJwYXRoKTsKKyNpZm5k ZWYgTlpMVE9SCisgICAgICAgIGlmIChmbnJwYXRoICE9IFBBVEhfT0ZGKSB7CisgICAgICAgICAg ICBnX2ZuY252ID0gZm5jbnY7CisgICAgICAgICAgICBmbmNudiA9IFhZRk5fTDsKKyAgICAgICAg ICAgIGRlYnVnKEYxMDEsInhzZW5kIGZuY252IiwiIixmbmNudik7CisgICAgICAgIH0KKyAgICAg ICAgLyogV2Ugc2hvdWxkIGFsc28gaGFuZGxlIE8gcGFja2V0IHBhdGhuYW1lIG9wdGlvbiBoZXJl ICovCisgICAgICAgIC8qIGJ1dCB3ZSBkb24ndCByZWFsbHkgbmVlZCB0byBzaW5jZSBXSEFUQU1J IGFscmVhZHkgaGFuZGxlcyBpdCAqLworI2VuZGlmIC8qIE5aTFRPUiAqLworICAgIH0KKworICAg IC8qIFNldCBwcm90b2NvbCBzdGFydCBzdGF0ZSAqLworCisgICAgaWYgKG9wa3QpIHsgICAgICAg ICAgICAgICAgICAgICAgICAgLyogRXh0ZW5kZWQgR0VUIE9wdGlvbnMqLworICAgICAgICBzc3Rh dGUgPSAoQ0hBUikgJ28nOworICAgICAgICBvb3B0cyA9IDA7CisgICAgICAgIGlmIChwdltTTkRf REVMXS5pdmFsID4gMCkgb29wdHMgfD0gR09QVF9ERUw7IC8qIEdFVCAvREVMRVRFICovCisgICAg ICAgIGlmIChwdltTTkRfUkVTXS5pdmFsID4gMCkgb29wdHMgfD0gR09QVF9SRVM7IC8qIEdFVCAv UkVDT1ZFUiAqLworICAgICAgICBpZiAocHZbU05EX1JFQ10uaXZhbCA+IDApIG9vcHRzIHw9IEdP UFRfUkVDOyAvKiBHRVQgL1JFQ1VSU0lWRSAqLworICAgIH0gZWxzZSBpZiAocmN2Y21kKQorICAg ICAgc3N0YXRlID0gKENIQVIpICd2JzsgICAgICAgICAgICAgIC8qIFJFQ0VJVkUgb3IgQ1JFQ0VJ VkUgKi8KKyAgICBlbHNlIGlmIChwdltTTkRfREVMXS5pdmFsID4gMCkKKyAgICAgIHNzdGF0ZSA9 IChDSEFSKSAnaCc7ICAgICAgICAgICAgICAvKiBHRVQgL0RFTEVURSAoPSBSRVRSSUVWRSkgKi8K KyAgICBlbHNlIGlmIChwdltTTkRfUkVTXS5pdmFsID4gMCkKKyAgICAgIHNzdGF0ZSA9IChDSEFS KSAnaic7ICAgICAgICAgICAgICAvKiBHRVQgL1JFQ09WRVIgKD0gUkVHRVQpICovCisgICAgZWxz ZQorICAgICAgc3N0YXRlID0gKENIQVIpICdyJzsgICAgICAgICAgICAgIC8qIFJlZ3VsYXIgR0VU ICovCisgICAgZ2V0Y21kID0gMTsKKyAgICBkZWJ1ZyhGMDAwLCJ4Z2V0IHNzdGF0ZSIsIiIsc3N0 YXRlKTsKKyNpZmRlZiBNQUMKKyAgICB3aGF0ID0gV19SRUNWOworICAgIHNjcmNyZWF0ZSgpOwor I2VuZGlmIC8qIE1BQyAqLworICAgIGlmIChsb2NhbCkgeworICAgICAgICBpZiAocHZbU05EX1NI SF0uaXZhbCAhPSAwKQorICAgICAgICAgIGRpc3BsYSA9IDE7CisJaWYgKHByb3RvY29sID09IFBS T1RPX0spCS8qIGZkYyAyMDA3MDEwOCAqLworCSAgdHRmbHVpKCk7CisgICAgfQorICAgIHggPSAw OworI2lmZGVmIFBJUEVTRU5ECisgICAgaWYgKHBpcGVzZW5kKQorICAgICAgZ290byB4Z2V0eDsK KyNlbmRpZiAvKiBQSVBFU0VORCAqLworCisjaWZkZWYgQ0tfVE1QRElSCisvKgorICBjbWFyZzIg aXMgYWxzbyBhbGxvd2VkIHRvIGJlIGEgZGV2aWNlIG9yIGRpcmVjdG9yeSBuYW1lOworICBldmVu IHRoZSBuYW1lIG9mIGEgZGlyZWN0b3J5IHRoYXQgZG9lc24ndCBleGlzdC4KKyovCisgICAgeSA9 IHN0cmxlbihjbWFyZzIpOworICAgIGRlYnVnKEYxMTEsInhnZXQgc3RybGVuKGNtYXJnMikiLGNt YXJnMix5KTsKKyAgICBpZiAoKHkgPiAwKSAmJgorI2lmZGVmIE9TMgorICAgICAgICAoKGlzYWxw aGEoY21hcmcyWzBdKSAmJgorICAgICAgICAgY21hcmcyWzFdID09ICc6JyAmJgorICAgICAgICAg Y21hcmcyWzJdID09IE5VTCkgfHwKKyAgICAgICAgKGNtYXJnW3ktMV0gPT0gJy8nIHx8IGNtYXJn W3ktMV0gPT0gJ1xcJykgfHwKKyAgICAgICAgaXNkaXIoY21hcmcyKSkKKyNlbHNlCisjaWZkZWYg VU5JWE9ST1NLCisgICAgICAgIChjbWFyZzJbeS0xXSA9PSAnLycgfHwgaXNkaXIoY21hcmcyKSkK KyNlbHNlCisjaWZkZWYgVk1TCisgICAgICAgIChjbWFyZzJbeS0xXSA9PSAnXScgfHwgY21hcmcy W3ktMV0gPT0gJz4nIHx8IGlzZGlyKGNtYXJnMikpCisjZWxzZQorI2lmZGVmIFNUUkFUVVMKKyAg ICAgICAgKGNtYXJnMlt5LTFdID09ICc+JyB8fCBpc2RpcihjbWFyZzIpKQorI2Vsc2UKKyNpZmRl ZiBkYXRhZ2VuZXJhbAorICAgICAgICAoY21hcmcyW3ktMV0gPT0gJzonIHx8IGNtYXJnWzBdID09 ICc6JyB8fCBpc2RpcihjbWFyZzIpKQorI2Vsc2UKKyAgICAgICAgaXNkaXIoY21hcmcyKQorI2Vu ZGlmIC8qIGRhdGFnZW5lcmFsICovCisjZW5kaWYgLyogU1RSQVRVUyAqLworI2VuZGlmIC8qIFZN UyAqLworI2VuZGlmIC8qIFVOSVhPUk9TSyAqLworI2VuZGlmIC8qIE9TMiAqLworICAgICAgICAp IHsKKyAgICAgICAgZGVidWcoRjExMCwiZG94Z2V0IFJFQ0VJVkUgY21hcmcyIGRpc2sgb3IgZGly IixjbWFyZzIsMCk7CisgICAgICAgIGlmICghZl90bXBkaXIpIHsKKyAgICAgICAgICAgIGludCB4 OworICAgICAgICAgICAgcyA9IHpndGRpcigpOworICAgICAgICAgICAgaWYgKHMpIHsKKyAgICAg ICAgICAgICAgICBja3N0cm5jcHkoc2F2ZGlyLHMsVE1QRElSTEVOKTsgLyogcmVtZW1iZXIgb2xk IGRpc2svZGlyICovCisgICAgICAgICAgICAgICAgZl90bXBkaXIgPSAxOyAgIC8qIGFuZCB0aGF0 IHdlIGRpZCB0aGlzICovCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHBy aW50ZigiP0Nhbid0IGdldCBjdXJyZW50IGRpcmVjdG9yeVxuIik7CisgICAgICAgICAgICAgICAg Y21hcmcyID0gIiI7CisgICAgICAgICAgICAgICAgZl90bXBkaXIgPSAwOworICAgICAgICAgICAg ICAgIHggPSAtOTsKKyAgICAgICAgICAgICAgICBnb3RvIHhnZXR4OworICAgICAgICAgICAgfQor I2lmZGVmIENLX01LRElSCisgICAgICAgICAgICB4ID0gemNoa2koY21hcmcyKTsgICAgICAgICAg LyogRG9lcyBhcy1uYW1lIGV4aXN0PyAqLworICAgICAgICAgICAgaWYgKHggPT0gLTEpIHsgICAg ICAgICAgICAgIC8qIERvZXNuJ3QgZXhpc3QgKi8KKyAgICAgICAgICAgICAgICBjaGFyICogcCA9 IE5VTEw7ICAgICAgICAvKiBUcnkgdG8gY3JlYXRlIGl0ICovCisgICAgICAgICAgICAgICAgeCA9 IHN0cmxlbihjbWFyZzIpOworICAgICAgICAgICAgICAgIGlmICgocCA9IChjaGFyICopbWFsbG9j KHgrNCkpKSB7CisgICAgICAgICAgICAgICAgICAgIHNwcmludGYocCwiJXMlcyIsY21hcmcyLCJ4 LngiKTsgLyogU0FGRSAocHJlY2hlY2tlZCkgKi8KKyAgICAgICAgICAgICAgICAgICAgeCA9IHpt a2RpcihwKTsKKyAgICAgICAgICAgICAgICAgICAgZnJlZShwKTsKKyAgICAgICAgICAgICAgICAg ICAgaWYgKHggPCAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIj9DYW4ndCBj cmVhdGUgJXNcbiIsY21hcmcyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHggPSAtOTsKKyAg ICAgICAgICAgICAgICAgICAgICAgIGdvdG8geGdldHg7CisgICAgICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisjZW5kaWYgLyogQ0tfTUtESVIgKi8K KyAgICAgICAgICAgIGlmICghemNoZGlyKGNtYXJnMikpIHsgICAgICAvKiBjaGFuZ2UgdG8gZ2l2 ZW4gZGlzay9kaXJlY3RvcnksICovCisgICAgICAgICAgICAgICAgcHJpbnRmKCI/Q2FuJ3QgYWNj ZXNzICVzXG4iLGNtYXJnMik7CisgICAgICAgICAgICAgICAgeCA9IC05OworICAgICAgICAgICAg ICAgIGdvdG8geGdldHg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjbWFyZzIgPSAiIjsK KyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBDS19UTVBESVIgKi8KKworICAgIGNrc3RybmNw eShmc3BlYyxjbWFyZyxDS01BWFBBVEgpOyAgIC8qIE5vdGUgLSB0aGlzIGlzIGEgUkVNT1RFIGZp bGVzcGVjICovCisgICAgZGVidWcoRjExMSwieGdldCBmc3BlYyIsZnNwZWMsZnNwZWNsZW4pOwor ICAgIGRlYnVnKEYxMTAsInhnZXQgY21hcmcyIixjbWFyZzIsMCk7CisKKyAgeGdldHg6CisgICAg Zm9yIChpID0gMDsgaSA8IFNORF9NQVg7IGkrKykKKyAgICAgIGlmIChwdltpXS5zdmFsKQorICAg ICAgICBmcmVlKHB2W2ldLnN2YWwpOworICAgIHJldHVybih4KTsKK30KKyNlbmRpZiAvKiBOT1hG RVIgKi8KKworI2lmbmRlZiBOT1NQTAorCisvKgorICBEIE8gRyBUIEEgIC0tICBEbyBfR0VUQVJH UyBvciBfUFVUQVJHUyBDb21tYW5kLgorCisgIFVzZWQgYnkgWElGLCBGT1IsIFdISUxFLCBhbmQg U1dJVENILCBlYWNoIG9mIHdoaWNoIGFyZSBpbXBsZW1lbnRlZCBhcworICAyLWxldmVsIG1hY3Jv czsgdGhlIGZpcnN0IGxldmVsIGRlZmluZXMgdGhlIG1hY3JvLCB0aGUgc2Vjb25kIHJ1bnMgaXQu CisgIFRoaXMgcm91dGluZSBoaWRlcyB0aGUgZmFjdCB0aGF0IHRoZXkgYXJlIG1hY3JvcyBieSBp bXBvcnRpbmcgdGhlCisgIG1hY3JvIGFyZ3VtZW50cyAoaWYgYW55KSBmcm9tIHR3byBsZXZlbHMg dXAsIHRvIG1ha2UgdGhlbSBhdmFpbGFibGUKKyAgaW4gdGhlIElGLCBGT1IsIFNXSVRDSCwgYW5k IFdISUxFIGNvbW1hbmRzIHRoZW1zZWx2ZXM7IGZvciBleGFtcGxlIGFzCisgIGxvb3AgaW5kaWNl cywgZXRjLCBhbmQgd2l0aGluIHRoZSBJRi9GT1IvV0hJTEUvU1dJVENIIGJvZHkgaXRzZWxmLgor ICBfUFVUQVJHUyBpcyBpbiBjYXNlIHdlIGNoYW5nZWQgYW55IG9mIHRoZXNlIHZhcmlhYmxlcyBv ciB1c2VkIFNISUZUCisgIG9uIHRoZW0sIHNvIHRoZSBuZXcgdmFsdWVzIHdvbid0IGJlIGxvc3Qg YXMgd2UgcG9wIHVwIHRoZSBzdGFjay4KKyovCitpbnQKK2RvZ3RhKGN4KSBpbnQgY3g7IHsKKyAg ICBpbnQgaSwgbjsKKyAgICBjaGFyIGMsICpwLCAgbWJ1Zls0XTsKKyAgICBleHRlcm4gaW50IHRv cGFyZ2MsIGNtZGludDsKKyAgICBleHRlcm4gY2hhciAqKiB0b3B4YXJnOworCisgICAgaWYgKCh5 ID0gY21jZm0oKSkgPCAwKQorICAgICAgcmV0dXJuKHkpOworICAgIGRlYnVnKEYxMDEsImRvZ3Rh IGN4IiwiIixjeCk7CisgICAgZGVidWcoRjEwMSwiZG9ndGEgbWFjbHZsIiwiIixtYWNsdmwpOwor ICAgIGlmIChjeCA9PSBYWEdUQSkgeworICAgICAgICBkZWJ1ZyhGMTAxLCJkb2d0YSBfR0VUQVJH UyBtYWNsdmwiLCIiLG1hY2x2bCk7CisgICAgfSBlbHNlIGlmIChjeCA9PSBYWFBUQSkgeworICAg ICAgICBkZWJ1ZyhGMTAxLCJkb2d0YSBfUFVUQVJHUyBtYWNsdmwiLCIiLG1hY2x2bCk7CisgICAg fSBlbHNlIHsKKyAgICAgICAgcmV0dXJuKC0yKTsKKyAgICB9CisgICAgaWYgKG1hY2x2bCA8IDEp CisgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOworCisgICAgLyogTWFrZSBuZXcgY29waWVzIG9m IG1hY3JvIGFyZ3VtZW50cyAvJTAuLjkgKi8KKworICAgIG1idWZbMF0gPSAnJSc7IG1idWZbMV0g PSAnMCc7IG1idWZbMl0gPSBOVUw7IC8qIEFyZ3VtZW50IG5hbWUgYnVmICovCisKKyAgICBpZiAo Y3ggPT0gWFhQVEEpIHsgICAgICAgICAgICAgICAgICAvKiBHbyBOT0lOVCBiZWNhdXNlIF9QVVRB UkdTICovCisgICAgICAgIGlmIChjbWRpbnQpICAgICAgICAgICAgICAgICAgICAgLyogdGVtcG9y YXJpbHkgY2hhbmdlcyBtYWNsdmwuICovCisgICAgICAgICAgY29ubm9pKCk7ICAgICAgICAgICAg ICAgICAgICAgLyogSW50ZXJydXB0cyBPRkYuICovCisgICAgfQorICAgIGZvciAoaSA9IDA7IGkg PCAxMDsgaSsrKSB7ICAgICAgICAgIC8qIEZvciBhbGwgYXJncyAqLworICAgICAgICBjID0gKGNo YXIpIChpICsgJzAnKTsgICAgICAgICAgIC8qIE1ha2UgbmFtZSAqLworICAgICAgICBtYnVmWzFd ID0gKGNoYXIpIGM7ICAgICAgICAgICAgIC8qIEluc2VydCBkaWdpdCAqLworICAgICAgICBpZiAo Y3ggPT0gWFhHVEEpIHsgICAgICAgICAgICAgIC8qIEdldCBhcmcgZnJvbSBsZXZlbC1taW51cy0y ICovCisgICAgICAgICAgICBpZiAobWFjbHZsID09IDEpIHAgPSBnX3ZhcltjXTsgLyogSWYgYXQg bGV2ZWwgMSB1c2UgZ2xvYmFscyAwLi45ICovCisgICAgICAgICAgICBlbHNlIHAgPSBtX2FyZ1tt YWNsdmwtMl1baV07ICAgLyogT3RoZXJ3aXNlIHRoZXkncmUgb24gdGhlIHN0YWNrICovCisgICAg ICAgICAgICBhZGRtYWMobWJ1ZixwKTsKKyNpZmRlZiBDT01NRU5UCisgICAgICAgICAgICBpZiAo bWFjbHZsID4gMSkKKyAgICAgICAgICAgICAgbWFrZXN0cigmKG1fbGluZVttYWNsdmxdKSxtX2xp bmVbbWFjbHZsLTJdKTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgICAgIH0gZWxzZSBpZiAo Y3ggPT0gWFhQVEEpIHsgICAgICAgLyogUHV0IGFyZ3MgbGV2ZWwrMiAqLworICAgICAgICAgICAg bWFjbHZsIC09IDI7ICAgICAgICAgICAgICAgIC8qIFRoaXMgaXMgZ3Jvc3MsIGl0J3MgYmVjYXVz ZSB3ZSdyZSAqLworICAgICAgICAgICAgYWRkbWFjKG1idWYsbV9hcmdbbWFjbHZsKzJdW2ldKTsg LyogYWRkaW5nIG1hY3JvcyB0d28gbGV2ZWxzIHVwICovCisgICAgICAgICAgICBtYWNsdmwgKz0g MjsgICAgICAgICAgICAgICAgICAgICAvKiBhbmQgYWRkbWFjKCkgdXNlcyBtYWNsdmwuICovCisg ICAgICAgICAgICBjb3VudFtjbWRsdmwgLSAyXSAgPSBjb3VudFtjbWRsdmxdOworICAgICAgICAg ICAgaW50aW1lW2NtZGx2bCAtIDJdID0gaW50aW1lW2NtZGx2bF07CisgICAgICAgICAgICBpbnBj YXNbY21kbHZsIC0gMl0gPSBpbnBjYXNbY21kbHZsXTsKKyAgICAgICAgICAgIHRha2VycltjbWRs dmwgLSAyXSA9IHRha2VycltjbWRsdmxdOworICAgICAgICAgICAgbWVycm9yW2NtZGx2bCAtIDJd ID0gbWVycm9yW2NtZGx2bF07CisgICAgICAgICAgICB4cXVpZXRbY21kbHZsIC0gMl0gPSB4cXVp ZXRbY21kbHZsXTsKKyAgICAgICAgICAgIHh2YXJldltjbWRsdmwgLSAyXSA9IHh2YXJldltjbWRs dmxdOworICAgICAgICB9IGVsc2UgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsgICAgIC8qIEJhZCBjYWxs IHRvIHRoaXMgcm91dGluZSAqLworICAgIH0KKyAgICBpZiAoY3ggPT0gWFhQVEEpIHsgICAgICAg ICAgICAgICAgICAvKiBSZXN0b3JlIGludGVycnVwdHMgaWYgd2UgKi8KKyAgICAgICAgaWYgKGNt ZGludCkgICAgICAgICAgICAgICAgICAgICAvKiB0dXJuZWQgdGhlbSBvZmYgYWJvdmUuICovCisg ICAgICAgICAgY29uaW50KHRyYXAsc3RwdHJhcCk7CisgICAgfQorICAgIC8qIE5vdyB0YWtlIGNh cmUgb2YgdGhlIGFyZ3VtZW50IHZlY3RvciBhcnJheSBcJl9bXSwgXHYocmV0dXJuKSwgKi8KKyAg ICAvKiBhbmQgXHYoYXJnYykgYnkganVzdCBjb3B5aW5nIHRoZSBwb2ludGVycy4gKi8KKworICAg IGlmIChjeCA9PSBYWEdUQSkgeyAgICAgICAgICAgICAgICAgIC8qIEdFVEFSR1MgZnJvbSAyIGxl dmVscyB1cCAqLworICAgICAgICBpZiAobWFjbHZsID09IDEpIHsKKyAgICAgICAgICAgIGFfcHRy WzBdID0gdG9weGFyZzsgICAgICAgICAvKiBcJl9bXSBhcnJheSAqLworICAgICAgICAgICAgYV9k aW1bMF0gPSB0b3BhcmdjIC0gMTsgICAgIC8qIERpbWVuc2lvbiBkb2Vzbid0IGluY2x1ZGUgWzBd ICovCisgICAgICAgICAgICBtX3hhcmdbbWFjbHZsXSA9IHRvcHhhcmc7CisgICAgICAgICAgICBu X3hhcmdbbWFjbHZsXSA9IHRvcGFyZ2M7ICAgLyogQnV0IFx2KGFyZ2MpIGRvZXMgaW5jbHVkZSBc JTAgKi8KKyAgICAgICAgICAgIG1hY2FyZ2NbbWFjbHZsXSA9IHRvcGFyZ2M7CisgICAgICAgICAg ICBtYWtlc3RyKCYobXJ2YWxbbWFjbHZsKzFdKSxtcnZhbFswXSk7IC8qIChzZWUgdm5sb29rKCkp ICovCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhX3B0clswXSA9IG1feGFyZ1ttYWNs dmwtMl07CisgICAgICAgICAgICBhX2RpbVswXSA9IG5feGFyZ1ttYWNsdmwtMl07CisgICAgICAg ICAgICBtX3hhcmdbbWFjbHZsXSA9IG1feGFyZ1ttYWNsdmwtMl07CisgICAgICAgICAgICBuX3hh cmdbbWFjbHZsXSA9IG5feGFyZ1ttYWNsdmwtMl07CisgICAgICAgICAgICBtYWNhcmdjW21hY2x2 bF0gPSBuX3hhcmdbbWFjbHZsLTJdOworICAgICAgICAgICAgbWFrZXN0cigmKG1ydmFsW21hY2x2 bCsxXSksbXJ2YWxbbWFjbHZsLTFdKTsgLyogKHNlZSB2bmxvb2soKSkgKi8KKworICAgICAgICB9 CisgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUFVUQVJHUyAyIGxl dmVscyB1cCAqLworICAgICAgICBpZiAobWFjbHZsID4gMSkgeworICAgICAgICAgICAgYV9wdHJb MF0gPSBtX3hhcmdbbWFjbHZsXTsKKyAgICAgICAgICAgIG1feGFyZ1ttYWNsdmwtMl0gPSBtX3hh cmdbbWFjbHZsXTsKKyAgICAgICAgICAgIGFfZGltWzBdID0gbl94YXJnW21hY2x2bF07CisgICAg ICAgICAgICBuX3hhcmdbbWFjbHZsLTJdID0gbl94YXJnW21hY2x2bF07CisgICAgICAgICAgICBt YWNhcmdjW21hY2x2bC0yXSA9IG5feGFyZ1ttYWNsdmxdOworICAgICAgICB9CisgICAgfQorICAg IHJldHVybigxKTsgICAgICAgICAgICAgICAgICAvKiBJbnRlcm5hbCBjb21tYW5kIC0gZG9uJ3Qg Y2hhbmdlIHN1Y2Nlc3MgKi8KK30KKyNlbmRpZiAvKiBOT1NQTCAqLworCisjaWZuZGVmIE5PU1BM CisvKgorICBEbyB0aGUgR09UTyBhbmQgW19dRk9SV0FSRCBjb21tYW5kcy4KKyAgcyA9IExhYmVs IHRvIHNlYXJjaCBmb3IsIGN4ID0gZnVuY3Rpb24gY29kZTogWFhHT1RPLCBYWEZXRCwgb3IgWFhY RldELgorKi8KKworaW50Citkb2dvdG8ocywgY3gpIGNoYXIgKnM7IGludCBjeDsgeworICAgIGlu dCBpLCBqLCB4LCB5LCB6LCBiYzsKKyAgICBpbnQgZW1wdHkgPSAwLCBzdG9wZmxnID0gMDsKKyAg ICBjaGFyICogY21kOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOYW1lIG9mIHRoaXMgY29t bWFuZCAqLworICAgIGNoYXIgdG1wbGJsW0xCTFNJWisxXSwgKmxwOwkgICAgICAgIC8qIEN1cnJl bnQgbGFiZWwgZnJvbSBjb21tYW5kIHN0cmVhbSAqLworICAgIGNoYXIgdG1wMltMQkxTSVorMV07 CQkvKiBTV0lUQ0ggbGFiZWwgY29udmVyc2lvbiBidWZmZXIgKi8KKyAgICBjaGFyIHRtcDNbTEJM U0laKzFdOwkJLyogVGFyZ2V0IGxhYmVsICovCisKKyAgICBzdG9wZmxnID0gKGN4ID09IFhYWEZX RCk7ICAgICAgICAgICAvKiBfRk9SV0FSRCAodXNlZCBpbiBTV0lUQ0gpICovCisgICAgYmMgPSAw OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQnJhY2UgY291bnRlciAqLworCisgICAg Y21kID0gKGN4ID09IFhYR09UTykgPyAiR09UTyIgOiAoKGN4ID09IFhYRldEKSA/ICJGT1JXQVJE IiA6ICJfRk9SV0FSRCIpOworICAgIGlmICghcykgcyA9ICIiOworICAgIGlmICghKnMpIGVtcHR5 ID0gMTsKKworI2lmZGVmIERFQlVHCisgICAgaWYgKGRlYmxvZykgeworICAgICAgICBkZWJ1ZyhG MTExLCJHT1RPIGNvbW1hbmQiLGNtZCxjeCk7CisgICAgICAgIGRlYnVnKEYxMDEsIkdPVE8gY21k bHZsIiwiIixjbWRsdmwpOworICAgICAgICBkZWJ1ZyhGMTAxLCJHT1RPIG1hY2x2bCIsIiIsbWFj bHZsKTsKKyAgICAgICAgZGVidWcoRjEwMSwiR09UTyB0bGV2ZWwiLCIiLHRsZXZlbCk7CisgICAg ICAgIGRlYnVnKEYxMTEsIkdPVE8gdGFyZ2V0IixzLGVtcHR5KTsKKyAgICB9CisjZW5kaWYgLyog REVCVUcgKi8KKyAgICBkZWJ1ZyhGMTEwLGNtZCxzLDApOworICAgIHggPSBja3N0cm5jcHkodG1w MysxLHMsTEJMU0laKTsKKyAgICBkZWJ1ZyhGMTAxLCJHT1RPIHRhcmdldCBsZW4iLCIiLHgpOwor ICAgIGRlYnVnKEYxMDEsIkdPVE8gdGFyZ2V0IGF0IHgiLCIiLHNbeF0pOworICAgIGlmIChzW3hd KSB7CisJZGVidWcoRjEwMCwiR09UTyB0YXJnZXQgb3ZlcmZsb3ciLCIiLDApOworCXByaW50Zigi P0dPVE8gdGFyZ2V0IG9yIFNXSVRDSCBjYXNlIGxhYmVsIHRvbyBsb25nXG4iKTsKKwlpZiAoc3Rv cGZsZykgZG9zdG9wKCk7CQkvKiBJZiBpbiBTV0lUQ0ggcmV0dXJuIHRvIHByb21wdCAqLworCXJl dHVybihzdWNjZXNzID0gMCk7CisgICAgfQorICAgIHMgPSB0bXAzKzE7CisgICAgaWYgKCpzICE9 ICc6JykgeyAgICAgICAgICAgICAgICAgICAgLyogTWFrZSBjb3B5IG9mIGxhYmVsICovCisgICAg ICAgIHRtcDNbMF0gPSAnOic7ICAgICAgICAgICAgICAgICAgLyogZ3VhcmFudGVlZCB0byBzdGFy dCB3aXRoICI6IiAqLworICAgICAgICBzLS07CisgICAgfQorICAgIGlmICghc3RvcGZsZyAmJiAh ZW1wdHkpIHsKKyAgICAgICAgaWYgKHNbMV0gPT0gJy4nIHx8IHNbMV0gPT0gU1AgfHwgc1sxXSA9 PSBOVUwpIHsKKyAgICAgICAgICAgIHByaW50ZigiP0JhZCBsYWJlbCBzeW50YXggLSAnJXMnXG4i LHMpOworCSAgICBpZiAoc3RvcGZsZykgZG9zdG9wKCk7CS8qIElmIGluIFNXSVRDSCByZXR1cm4g dG8gcHJvbXB0ICovCisgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOworICAgICAgICB9 CisgICAgfQorICAgIGlmIChjbWRsdmwgPT0gMCkgeworICAgICAgICBwcmludGYoIj9Tb3JyeSwg JXMgb25seSB3b3JrcyBpbiBhIGNvbW1hbmQgZmlsZSBvciBtYWNyb1xuIixjbWQpOworICAgICAg ICByZXR1cm4oc3VjY2VzcyA9IDApOworICAgIH0KKyAgICB5ID0gc3RybGVuKHMpOyAgICAgICAg ICAgICAgICAgICAgICAvKiB5ID0gbGVuZ3RoIG9mIHRhcmdldCBsYWJlbCAqLworICAgIGRlYnVn KEYxMTEsY21kLHMseSk7CisKKyAgICB3aGlsZSAoY21kbHZsID4gMCkgeyAgICAgICAgICAgICAg ICAvKiBBcyBsb25nIGFzIG5vdCBhdCB0b3AgbGV2ZWwuLi4gKi8KKyAgICAgICAgaWYgKGNtZHN0 a1tjbWRsdmxdLnNyYyA9PSBDTURfTUQpIHsgLyogR09UTyBpbnNpZGUgbWFjcm8gKi8KKyAgICAg ICAgICAgIGludCBpLCBtLCBmbGFnOworICAgICAgICAgICAgY2hhciAqeHAsICp0cDsKKworICAg ICAgICAgICAgLyogR09UTzogcmV3aW5kIHRoZSBtYWNybzsgRk9SV0FSRDogc3RhcnQgYXQgY3Vy cmVudCBwb3NpdGlvbiAqLworCisgICAgICAgICAgICBscCA9IChjeCA9PSBYWEdPVE8pID8gbWFj eFttYWNsdmxdIDogbWFjcFttYWNsdmxdOworICAgICAgICAgICAgbSA9IChpbnQpc3RybGVuKGxw KTsKKyAgICAgICAgICAgIGRlYnVnKEYxMTEsIkdPVE8gaW4gbWFjcm8iLGxwLG0pOworCisgICAg ICAgICAgICBmbGFnID0gMTsgICAgICAgICAgICAgICAgICAgLyogZmxhZyBmb3IgdmFsaWQgbGFi ZWwgcG9zaXRpb24gKi8KKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBtOyBpKyssbHArKykg eyAvKiBzZWFyY2ggZm9yIGxhYmVsIGluIG1hY3JvIGJvZHkgKi8KKyAgICAgICAgICAgICAgICBp ZiAoKmxwID09ICd7JykgICAgICAgICAvKiBCdXQgb25seSBhdCB0aGlzIGxldmVsICovCisgICAg ICAgICAgICAgICAgICBiYysrOyAgICAgICAgICAgICAgICAgLyogQW55dGhpbmcgaW5zaWRlIGJy YWNlcyBpcyBvZmYgKi8KKyAgICAgICAgICAgICAgICBlbHNlIGlmICgqbHAgPT0gJ30nKSAgICAv KiBsaW1pdHMuICovCisgICAgICAgICAgICAgICAgICBiYy0tOworICAgICAgICAgICAgICAgIGlm IChzdG9wZmxnICYmIGJjID4gMCkgIC8qIFRoaXMgaXMgZ29vZCBmb3IgU1dJVENIICovCisgICAg ICAgICAgICAgICAgICBjb250aW51ZTsgICAgICAgICAgICAgLyogYnV0IGludGVyZmVyZXMgd2l0 aCBXSElMRSwgZXRjLiAqLworICAgICAgICAgICAgICAgIGlmICgqbHAgPT0gJywnKSB7CisgICAg ICAgICAgICAgICAgICAgIGZsYWcgPSAxOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGZsYWcpIHsgICAgICAgICAg ICAgLyogSWYgaW4gdmFsaWQgbGFiZWwgcG9zaXRpb24gKi8KKyAgICAgICAgICAgICAgICAgICAg aWYgKCpscCA9PSBTUCkgICAgICAvKiBlYXQgbGVhZGluZyBzcGFjZXMgKi8KKyAgICAgICAgICAg ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCpscCAhPSAnOicp IHsgICAvKiBMb29rIGZvciBsYWJlbCBpbnRyb2R1Y2VyICovCisgICAgICAgICAgICAgICAgICAg ICAgICBmbGFnID0gMDsgICAgICAgLyogdGhpcyBpc24ndCBpdCAqLworICAgICAgICAgICAgICAg ICAgICAgICAgY29udGludWU7ICAgICAgIC8qIGtlZXAgbG9va2luZyAqLworICAgICAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICghZmxhZykg ICAgICAgICAgICAgIC8qIFdlIGRvbid0IGhhdmUgYSBsYWJlbCAqLworICAgICAgICAgICAgICAg ICAgY29udGludWU7ICAgICAgICAgICAgIC8qICBzbyBrZWVwIGxvb2tpbmcuLi4gKi8KKyAgICAg ICAgICAgICAgICB4cCA9IGxwOyB0cCA9IHRtcGxibDsgICAvKiBDb3B5IHRoZSBsYWJlbCBmcm9t IHRoZSBtYWNybyAqLworICAgICAgICAgICAgICAgIGogPSAwOyAgICAgICAgICAgICAgICAgIC8q IHRvIG1ha2UgaXQgbnVsbC10ZXJtaW5hdGVkICovCisgICAgICAgICAgICAgICAgd2hpbGUgKCgq dHAgPSAqeHApKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChqKysgPiBMQkxTSVotMSkgeyAv KiBqID0gbGVuZ3RoIG9mIHdvcmQgZnJvbSBtYWNybyAqLworCQkJcHJpbnRmKCI/R09UTyB0YXJn ZXQgb3IgU1dJVENIIGNhc2UgbGFiZWwgdG9vIGxvbmdcbiIpOworCQkJaWYgKHN0b3BmbGcpIGRv c3RvcCgpOyAvKiBSZXR1cm4gdG8gcHJvbXB0ICovCisJCQlyZXR1cm4oc3VjY2VzcyA9IDApOwor CQkgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoISp0cCB8fCAqdHAgPT0gJywnKSAvKiBM b29rIGZvciBlbmQgb2Ygd29yZCAqLworICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg ICAgICAgICAgICAgICAgICBlbHNlIHRwKyssIHhwKys7ICAgIC8qIE5leHQgY2hhcmFjdGVyICov CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICp0cCA9IE5VTDsgICAgICAgICAg ICAgIC8qIEluIGNhc2Ugd2Ugc3RvcHBlZCBlYXJseSAqLworICAgICAgICAgICAgICAgIC8qIE5v dyBkbyBjYXNlbGVzcyBzdHJpbmcgY29tcGFyaXNvbiwgdXNpbmcgbG9uZ2VzdCBsZW5ndGggKi8K KyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJtYWNybyBHT1RPIGxhYmVsIixzLHkpOworICAg ICAgICAgICAgICAgIGRlYnVnKEYxMTEsIm1hY3JvIHRhcmdldCBsYWJlbCIsdG1wbGJsLGopOwor ICAgICAgICAgICAgICAgIGlmIChzdG9wZmxnKSB7ICAgICAgICAgIC8qIEFsbG93IHZhcmlhYmxl cyBhcyBTV0lUQ0ggbGFiZWxzICovCisgICAgICAgICAgICAgICAgICAgIGludCBuID0gTEJMU0la IC0gMTsKKyAgICAgICAgICAgICAgICAgICAgY2hhciAqIHAgPSB0bXAyOworICAgICAgICAgICAg ICAgICAgICB6enN0cmluZyh0bXBsYmwsJnAsJm4pOworCQkgICAgaWYgKG4gPCAwKSB7CisJCQlw cmludGYoIj9HT1RPIHRhcmdldCBvciBTV0lUQ0ggY2FzZSBsYWJlbCB0b28gbG9uZ1xuIik7CisJ CQlpZiAoc3RvcGZsZykgZG9zdG9wKCk7IC8qIFJldHVybiB0byBwcm9tcHQgKi8KKwkJCXJldHVy bigwKTsKKwkJICAgIH0KKyAgICAgICAgICAgICAgICAgICAgY2tzdHJuY3B5KHRtcGxibCx0bXAy LExCTFNJWik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEs IkdPVE8gcyIscyx5KTsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJHT1RPIHRtcGxibCIs dG1wbGJsLGopOworICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsIkdPVE8gZW1wdHkiLGNraXRv YShzdG9wZmxnKSxlbXB0eSk7CisKKyAgICAgICAgICAgICAgICBpZiAoZW1wdHkpIHsJCSAgIC8q IEVtcHR5IHRhcmdldCAqLworCQkgICAgeiA9ICghc3RyY21wKHMsIjoiKSAmJiAvKiBTdHJpbmcg aXMgZW1wdHkgKi8KKwkJCSAvKiBhbmQgTGFiZWwgaXMgIjoiIG9yICI6KiIuLi4gKi8KKwkJCSAo IXN0cmNtcCh0bXBsYmwsIjoiKSB8fCAhc3RyY21wKHRtcGxibCwiOioiKSkpCisJCQk/IDAgOiAx OworCQkgICAgZGVidWcoRjExMSwiR09UTyIsIkEiLHopOworICAgICAgICAgICAgICAgIH0gZWxz ZSBpZiAoc3RvcGZsZykgeworICAgICAgICAgICAgICAgICAgICB6ID0gY2ttYXRjaCh0bXBsYmws cyxpbnBjYXNbY21kbHZsXSwxKSA/IDAgOiAxOworCQkgICAgZGVidWcoRjExMSwiR09UTyIsIkIi LHopOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHogPSAo c3RvcGZsZyAmJiBpbnBjYXNbY21kbHZsXSkgPworICAgICAgICAgICAgICAgICAgICAgIHN0cmNt cChzLHRtcGxibCkgOgorICAgICAgICAgICAgICAgICAgICAgICAgY2tzdHJjbXAocyx0bXBsYmws KHkgPiBqKSA/IHkgOiBqLCAwKTsKKwkJICAgIGRlYnVnKEYxMTEsIkdPVE8iLCJDIix6KTsKKyAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCF6KSB7CisgICAgICAgICAgICAg ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RvcGZsZyAmJgorICAg ICAgICAgICAgICAgICAgICAgICAgICFja3N0cmNtcCgiOmRlZmF1bHQiLHRtcGxibCwoOCA+IGop ID8gOCA6IGosIDApKSB7CisgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDAsIkdPVE8gREVG QVVMVCIsIiIsMCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGZsYWcgPSAwOworICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlYnVnKEYxMTEsIkdPVE8gbWFjcm8gaSIs Y21kLGkpOworICAgICAgICAgICAgZGVidWcoRjExMSwiR09UTyBtYWNybyBtIixjbWQsbSk7Cisg ICAgICAgICAgICBpZiAoaSA+PSBtKSB7ICAgICAgICAgICAgICAgLyogRGlkbid0IGZpbmQgdGhl IGxhYmVsICovCisgICAgICAgICAgICAgICAgZGVidWcoRjEwMSwiR09UTyBmYWlsZWQgY21kbHZs IiwiIixjbWRsdmwpOworI2lmZGVmIENPTU1FTlQKKwkJLyogTU9WRUQgVE8gQUZURVIgUE9QQ0xW TCBBQk9VVCAyMCBMSU5FUyBET1dOIDUgQVVHIDIwMDIgKi8KKwkJICAgaWYgKHN0b3BmbGcpCisg ICAgICAgICAgICAgICAgICByZXR1cm4oMCk7CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAg ICAgICAgICAgIGlmICgobWFjbHZsID4gMCkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgKG1f YXJnW21hY2x2bC0xXVswXSkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgKGNtZHN0a1tjbWRs dmxdLnNyYyA9PSBDTURfTUQpICYmCisgICAgICAgICAgICAgICAgICAgICAgICghc3RybmNtcCht X2FyZ1ttYWNsdmwtMV1bMF0sIl94aWYiLDQpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAh c3RybmNtcChtX2FyZ1ttYWNsdmwtMV1bMF0sIl9mb3IiLDQpIHx8CisgICAgICAgICAgICAgICAg ICAgICAgICAhc3RybmNtcChtX2FyZ1ttYWNsdmwtMV1bMF0sIl9zd2kiLDQpIHx8CisgICAgICAg ICAgICAgICAgICAgICAgICAhc3RybmNtcChtX2FyZ1ttYWNsdmwtMV1bMF0sIl93aGkiLDQpKSkg eworICAgICAgICAgICAgICAgICAgICBkb2d0YShYWFBUQSk7ICAgICAgIC8qIFJlc3RvcmUgYXJn cyAqLworICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJHT1RPIGluIFhJRi9GT1IvV0hJ L1NXSSBwb3BwaW5nIiwiIixjbWRsdmwpOworICAgICAgICAgICAgICAgICAgICBwb3BjbHZsKCk7 ICAgICAgICAgIC8qIFBvcCBhbiBleHRyYSBsZXZlbCAqLworICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJHT1RPIHBvcHBpbmciLCIiLGNtZGx2bCk7CisgICAg ICAgICAgICAgICAgaWYgKCFwb3BjbHZsKCkpIHsgICAgICAgLyogcG9wIHVwIHRvIG5leHQgaGln aGVyIGxldmVsICovCisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiP0xhYmVsICclcycgbm90 IGZvdW5kXG4iLHMpOyAvKiBpZiBub25lICovCisgICAgICAgICAgICAgICAgICAgIHJldHVybigw KTsgICAgICAgICAgLyogUXVpdCAqLworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RvcGZs ZykgewkvKiBTV0lUQ0ggbm8gY2FzZSBsYWJlbCBtYXRjaCAqLworCQkgICAgcmV0dXJuKDApOwkJ LyogYW5kIG5vIERFRkFVTFQgbGFibGUuICovCisJCX0gZWxzZSB7CisJCSAgICBjb250aW51ZTsg ICAgICAgIC8qIG90aGVyd2lzZSBsb29rIGFnYWluICovCisJCX0KKyAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIGRlYnVnKEYxMTAsIkdPVE8gZm91bmQgbWFjcm8gbGFiZWwiLHRtcGxibCwwKTsK KyAgICAgICAgICAgIG1hY3BbbWFjbHZsXSA9IGxwOyAgICAgICAgICAvKiBzZXQgbWFjcm8gYnVm ZmVyIHBvaW50ZXIgKi8KKyAgICAgICAgICAgIHJldHVybigxKTsKKyAgICAgICAgfSBlbHNlIGlm IChjbWRzdGtbY21kbHZsXS5zcmMgPT0gQ01EX1RGKSB7CisgICAgICAgICAgICB4ID0gMDsgICAg ICAgICAgICAgICAgICAgICAgLyogR09UTyBpc3N1ZWQgaW4gdGFrZSBmaWxlICovCisgICAgICAg ICAgICBkZWJ1ZyhGMTExLCJHT1RPIGluIFRBS0UgZmlsZSIsY21kLGN4KTsKKyAgICAgICAgICAg IGlmIChjeCA9PSBYWEdPVE8pIHsgICAgICAgICAvKiBJZiBHT1RPLCBidXQgbm90IEZPUldBUkQs ICovCisgICAgICAgICAgICAgICAgcmV3aW5kKHRmaWxlW3RsZXZlbF0pOyAgLyogc2VhcmNoIGZp bGUgZnJvbSBiZWdpbm5pbmcgKi8KKyAgICAgICAgICAgICAgICB0ZmxpbmVbdGxldmVsXSA9IDA7 CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3aGlsZSAoISBmZW9mKHRmaWxlW3RsZXZlbF0p KSB7CisjaWZkZWYgQ09NTUVOVAorLyogVGhpcyBpcyB3cm9uZyAtIGl0IGxldHMgdXMganVtcCB0 byBsYWJlbHMgaW5zaWRlIGluZmVyaW9yIGJsb2NrcyAqLworICAgICAgICAgICAgICAgIHRmbGlu ZVt0bGV2ZWxdKys7CisgICAgICAgICAgICAgICAgaWYgKGZnZXRzKGxpbmUsTElOQlVGU0laLHRm aWxlW3RsZXZlbF0pID09IE5VTEwpIC8qIEdldCBsaW5lICovCisjZWxzZQorICAgICAgICAgICAg ICAgIGlmIChnZXRuY3QobGluZSxMSU5CVUZTSVosdGZpbGVbdGxldmVsXSwwKSA8IDApCisjZW5k aWYgLyogQ09NTUVOVCAqLworICAgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAg IC8qIElmIG5vIG1vcmUsIGRvbmUsIGxhYmVsIG5vdCBmb3VuZCAqLworICAgICAgICAgICAgICAg IGxwID0gbGluZTsgICAgICAgICAgICAgIC8qIEdvdCBsaW5lICovCisgICAgICAgICAgICAgICAg d2hpbGUgKCpscCA9PSBTUCB8fCAqbHAgPT0gSFQpCisgICAgICAgICAgICAgICAgICBscCsrOyAg ICAgICAgICAgICAgICAgLyogU3RyaXAgbGVhZGluZyB3aGl0ZXNwYWNlICovCisgICAgICAgICAg ICAgICAgaWYgKCpscCAhPSAnOicpIGNvbnRpbnVlOyAvKiBDaGVjayBmb3IgbGFiZWwgaW50cm9k dWNlciAqLworICAgICAgICAgICAgICAgIHdoaWxlICgqKGxwKzEpID09IFNQKSB7IC8qIFJlbW92 ZSBzcGFjZSBiZXR3ZWVuIDogYW5kIG5hbWUgKi8KKyAgICAgICAgICAgICAgICAgICAgKihscCsx KSA9ICc6JzsKKyAgICAgICAgICAgICAgICAgICAgbHArKzsgICAgICAgICAgICAgICAvKiBTdHJp cCBsZWFkaW5nIHdoaXRlc3BhY2UgKi8KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg ICAgdHAgPSBscDsgICAgICAgICAgICAgICAgLyogR2V0IGVuZCBvZiB3b3JkICovCisgICAgICAg ICAgICAgICAgaiA9IDA7CisgICAgICAgICAgICAgICAgd2hpbGUgKCp0cCkgeyAgICAgICAgICAg LyogQW5kIG51bGwtdGVybWluYXRlIGl0ICovCisgICAgICAgICAgICAgICAgICAgIGlmICgqdHAg PCAzMykgeworICAgICAgICAgICAgICAgICAgICAgICAgKnRwID0gTlVMOworICAgICAgICAgICAg ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB0cCsrLCBqKys7 CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICghY2tzdHJjbXAobHAscywo eSA+IGopID8geSA6IGosMCkpIHsgLyogQ2FzZWxlc3MgY29tcGFyZSAqLworICAgICAgICAgICAg ICAgICAgICB4ID0gMTsgICAgICAgICAgICAgIC8qIEdvdCBpdCAqLworICAgICAgICAgICAgICAg ICAgICBicmVhazsgICAgICAgICAgICAgIC8qIGRvbmUuICovCisgICAgICAgICAgICAgICAgfSBl bHNlIGlmIChzdG9wZmxnICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAhY2tzdHJjbXAo IjpkZWZhdWx0Iix0bXBsYmwsKDggPiBqKSA/IDggOiBqLDApKSB7CisgICAgICAgICAgICAgICAg ICAgIHggPSAxOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoeCA9PSAwKSB7ICAgICAgICAgICAgICAg LyogSWYgbm90IGZvdW5kLCBwcmludCBtZXNzYWdlICovCisgICAgICAgICAgICAgICAgZGVidWco RjEwMSwiR09UTyBmYWlsZWQgYXQgY21kbHZsIiwiIixjbWRsdmwpOworICAgICAgICAgICAgICAg IGlmIChzdG9wZmxnKQorICAgICAgICAgICAgICAgICAgcmV0dXJuKDApOworICAgICAgICAgICAg ICAgIGlmICghcG9wY2x2bCgpKSB7ICAgICAgIC8qIHBvcCB1cCB0byBuZXh0IGhpZ2hlciBsZXZl bCAqLworICAgICAgICAgICAgICAgICAgICBwcmludGYoIj9MYWJlbCAnJXMnIG5vdCBmb3VuZFxu IixzKTsgLyogaWYgbm9uZSAqLworICAgICAgICAgICAgICAgICAgICByZXR1cm4oMCk7ICAgICAg ICAgIC8qIHF1aXQgKi8KKyAgICAgICAgICAgICAgICB9IGVsc2UgY29udGludWU7ICAgICAgICAv KiBvdGhlcndpc2UgbG9vayBhZ2FpbiAqLworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0 dXJuKHgpOyAgICAgICAgICAgICAgICAgIC8qIFNlbmQgYmFjayByZXR1cm4gY29kZSAqLworICAg ICAgICB9CisgICAgfQorICAgIHByaW50ZigiP1N0YWNrIHByb2JsZW0gaW4gR09UTyAlc1xuIixz KTsgLyogU2hvdWxkbid0IHNlZSB0aGlzICovCisgICAgcmV0dXJuKDApOworfQorI2VuZGlmIC8q IE5PU1BMICovCisKKy8qIEZpbmlzaCBwYXJzaW5nIGFuZCBkbyB0aGUgSUYsIFhJRiwgYW5kIFdI SUxFIGNvbW1hbmRzICovCisKKyNpZm5kZWYgTk9TUEwKKworLyogIEMgSCBLIFYgQSBSICAtLSAg Q2hlY2sgKGlmIGl0J3MgYSkgVmFyaWFibGUgICovCisKKworI2lmZGVmIE9MRENIS1ZBUgorLyoK KyAgQ3J1ZGUgYW5kIGRpc2d1c3RpbmcsIGJ1dCBuZWVkZWQgZm9yIE9TLzIsIERPUywgYW5kIFdp bmRvd3MsIHdoZXJlIGZpbGVuYW1lcworICBoYXZlIGJhY2tzbGFzaGVzIGluIHRoZW0uICBIb3cg ZG8gd2Uga25vdyBpZiBhIGJhY2tzbGFzaCBpbiBhIGZpbGVuYW1lIGlzIGEKKyAgZGlyZWN0b3J5 IHNlcGFyYXRvciwgb3IgaWYgaXQncyBhIEtlcm1pdCBiYWNrc2xhc2g/ICBUaGlzIHJvdXRpbmUg ZG9lcyBhCisgIHJvdWdoIHN5bnRheCBjaGVjayBvZiB0aGUgbmV4dCBmZXcgY2hhcmFjdGVycyBh bmQgaWYgaXQgbG9va3MgbGlrZSBpdCBNSUdIVAorICBiZSBhIHZhcmlhYmxlLCB0aGVuIGl0IHRy aWVzIHRvIGV2YWx1YXRlIGl0LCBhbmQgaWYgdGhlIHJlc3VsdCBpcyBub3QgZW1wdHksCisgIHdl IHNheSBpdCdzIGEgdmFyaWFibGUsIGFsdGhvdWdoIHNvbWV0aW1lcyBpdCBtaWdodCBub3QgYmUg LS0gc29tZSBjYXNlcyBhcmUKKyAgdHJ1bHkgYW1iaWd1b3VzLiAgRm9yIGV4YW1wbGUgdGhlcmUg bWlnaHQgYSBET1MgZGlyZWN0b3J5IGNhbGxlZCBcJWEsIGFuZAorICB3ZSBhbHNvIGhhdmUgYSB2 YXJpYWJsZSB3aXRoIHRoZSBzYW1lIG5hbWUuICBUaGlzIGlzIGFsbCBmb3IgdGhlIHNha2Ugb2Yg bm90CisgIGhhdmluZyB0byB0ZWxsIFBDIHVzZXJzIHRoYXQgdGhleSBoYXZlIHRvIGRvdWJsZSBh bGwgYmFja3NsYXNoZXMgaW4gZmlsZQorICBhbmQgZGlyZWN0b3J5IG5hbWVzLgorKi8KKyNlbHNl CisvKgorICBTb21ld2hhdCBsZXNzIGNydWRlICYgZGlzZ3VzdGluZy4gIFRoZSBwcmV2aW91cyBt ZXRob2Qgd2FzIG5vbmRldGVybWluaXN0aWMKKyAgYW5kICh3b3JzZSkgaXQgaW50ZXJmZXJlZCB3 aXRoIG1hY3JvIGFyZ3VtZW50IHBhc3NpbmcuICBTbyBub3cgd2Ugb25seQorICBjaGVjayB0aGUg c3ludGF4IG9mIGJhY2tzbGFzaC1pdGVtcyB0byBzZWUgaWYgdGhleSBhcmUgdmFyaWFibGVzLCBi dXQgd2UKKyAgZG8gTk9UIGNoZWNrIHRoZWlyIHZhbHVlcy4KKyovCisjZW5kaWYgLyogT0xEQ0hL VkFSICovCisvKgorICBDYWxsIHdpdGggYSBzdHJpbmcgcG9pbnRlciBwb2ludGluZyBhdCB0aGUg YmFja3NsYXNoIG9mIHRoZSBwdXJwb3J0ZWQKKyAgdmFyaWFibGUuICBSZXR1cm5zIDEgaWYgaXQg aGFzIHRoZSBzeW50YXggb2YgYSB2YXJpYWJsZSwgMCBpZiBub3QuCisqLworaW50CitjaGt2YXIo cykgY2hhciAqczsgeworICAgIGludCB6ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IFJldHVybiBjb2RlIC0gYXNzdW1lIGZhaWx1cmUuICovCisgICAgaWYgKCFzKSBzID0gIiI7ICAg ICAgICAgICAgICAgICAgICAgLyogV2F0Y2ggb3VyIGZvciBudWxsIHBvaW50ZXJzLiAqLworICAg IGlmICghKnMpIHJldHVybigwKTsgICAgICAgICAgICAgICAgIC8qIEVtcHR5IGFyZyBzbyBub3Qg YSB2YXJpYWJsZS4gKi8KKyAgICBpZiAoKnMgPT0gQ01EUSkgeyAgICAgICAgICAgICAgICAgICAv KiBPYmplY3QgYmVnaW5zIHdpdGggYmFja3NsYXNoLiAqLworICAgICAgICBjaGFyIGM7CisgICAg ICAgIGMgPSBzWzFdOyAgICAgICAgICAgICAgICAgICAgICAgLyogQ2hhcmFjdGVyIGZvbGxvd2lu ZyBiYWNrc2xhc2guICovCisgICAgICAgIGlmIChjKSB7CisgICAgICAgICAgICBpbnQgdCA9IDA7 CisgICAgICAgICAgICBpZiAoYyA9PSBDTURRKSAgICAgICAgICAgICAgLyogUXVvdGVkIGJhY2tz bGFzaCAqLworICAgICAgICAgICAgICByZXR1cm4oMSk7CisgICAgICAgICAgICBjID0gKGNoYXIp IChpc2xvd2VyKGMpID8gdG91cHBlcihjKSA6IGMpOyAvKiBPdGhlcndpc2UuLi4gKi8KKyAgICAg ICAgICAgIGlmIChjID09ICclJykgeyAgICAgICAgICAgICAvKiBTaW1wbGUgdmFyaWFibGUgKi8K KyNpZmRlZiBPTERDSEtWQVIKKyAgICAgICAgICAgICAgICB0ID0gMTsKKyNlbHNlCisgICAgICAg ICAgICAgICAgcmV0dXJuKDEpOworI2VuZGlmIC8qIE9MRENIS1ZBUiAqLworICAgICAgICAgICAg fSBlbHNlIGlmIChjID09ICcmJykgeyAgICAgIC8qIEFycmF5ICovCisgICAgICAgICAgICAgICAg aWYgKCFzWzJdKSByZXR1cm4oMCk7CisgICAgICAgICAgICAgICAgaWYgKHNbM10gPT0gJ1snKQor ICAgICAgICAgICAgICAgICAgdCA9IGNraW5kZXgoIl0iLHMsNCwwLDEpOworI2lmbmRlZiBPTERD SEtWQVIKKyAgICAgICAgICAgICAgICByZXR1cm4oKHQgPiAwKSA/IDEgOiAwKTsKKyNlbmRpZiAv KiBPTERDSEtWQVIgKi8KKyAgICAgICAgICAgIH0gZWxzZSBpZiAoYyA9PSAnJCcgfHwgICAgICAv KiBFbnZpcm9ubWVudCB2YXJpYWJsZSAqLworICAgICAgICAgICAgICAgICAgICAgICBjID09ICdW JyB8fCAgICAgIC8qIEJ1aWx0LWluIHZhcmlhYmxlICovCisgICAgICAgICAgICAgICAgICAgICAg IGMgPT0gJ00nKSB7ICAgICAgLyogTWFjcm8gbmFtZSAqLworICAgICAgICAgICAgICAgIHQgPSAo c1syXSA9PSAnKCcpOworI2lmbmRlZiBPTERDSEtWQVIKKyAgICAgICAgICAgICAgICByZXR1cm4o KHQgPiAwKSA/IDEgOiAwKTsKKyNlbmRpZiAvKiBPTERDSEtWQVIgKi8KKyAgICAgICAgICAgIH0g ZWxzZSBpZiAoYyA9PSAnRicpIHsgICAgICAvKiBGdW5jdGlvbiByZWZlcmVuY2UgKi8KKyAgICAg ICAgICAgICAgICAvKiBEb24ndCBhY3R1YWxseSBjYWxsIGl0IC0gaXQgbWlnaHQgaGF2ZSBzaWRl IGVmZmVjdHMgKi8KKyAgICAgICAgICAgICAgICBpbnQgeDsKKyAgICAgICAgICAgICAgICBpZiAo KHggPSBja2luZGV4KCIoIixzLDMsMCwxKSkpIC8qIEp1c3QgY2hlY2sgc3ludGF4ICovCisgICAg ICAgICAgICAgICAgICBpZiAoKHggPSBja2luZGV4KCIpIixzLHgsMCwxKSkpCisgICAgICAgICAg ICAgICAgICAgIHogPSAxOworICAgICAgICAgICAgICAgIC8qIEluc2VydCBhIGJldHRlciBzeW50 YXggY2hlY2sgaGVyZSBpZiBuZWNlc3NhcnkgKi8KKyAgICAgICAgICAgIH0KKyNpZmRlZiBPTERD SEtWQVIKKyAgICAgICAgICAgIGlmICh0KSB7CisgICAgICAgICAgICAgICAgdCA9IDI1NTsgICAg ICAgICAgICAgICAgLyogVGhpcyBsZXRzIHVzIHRlc3QgXHYoeHh4KSAqLworICAgICAgICAgICAg ICAgIGxwID0gbGluZTsgICAgICAgICAgICAgIC8qIGFuZCBldmVuIFxmLi4uKHh4eCkgKi8KKyAg ICAgICAgICAgICAgICB6enN0cmluZyhzLCZscCwmdCk7ICAgICAvKiBFdmFsdWF0ZSBpdCwgd2hh dGV2ZXIgaXQgaXMuICovCisgICAgICAgICAgICAgICAgdCA9IHN0cmxlbihsaW5lKTsgICAgICAg LyogR2V0IGl0cyBsZW5ndGguICovCisgICAgICAgICAgICAgICAgZGVidWcoRjExMSwiY2hrdmFy IixsaW5lLHQpOworICAgICAgICAgICAgICAgIHogPSB0ID4gMDsgICAgICAgICAgICAgIC8qIElm IGxlbmd0aCA+IDAsIGl0J3MgZGVmaW5lZCAqLworICAgICAgICAgICAgfQorI2VuZGlmIC8qIE9M RENIS1ZBUiAqLworICAgICAgICB9CisgICAgfQorICAgIHJldHVybih6KTsKK30KKworLyogIEIg TyBPIEwgRSBYIFAgIC0tICBFdmFsdWF0ZSBhIEJvb2xlYW4gZXhwcmVzc2lvbiAgKi8KKworI2Rl ZmluZSBCT09MTEVOIDEwMjQKK3N0YXRpYyBjaGFyIGJvb2x2YWxbQk9PTExFTl07CisKK2ludAor Ym9vbGV4cChjeCkgaW50IGN4OyB7CisgICAgaW50IHgsIHksIHo7IGNoYXIgKnMsICpwOworICAg IGludCBwYXJlbnMgPSAwLCBwY291bnQgPSAwLCBlY291bnQgPSAwOworICAgIGNoYXIgKnEsICpi eDsKKyAgICBzdHJ1Y3QgRkRCIGt3LCBudTsKKyNpZmRlZiBGTkZMT0FUCisgICAgc3RydWN0IEZE QiBmbDsKKyAgICBDS0ZMT0FUIGYxID0gMC4wLCBmMiA9IDAuMDsKKyAgICBpbnQgZjFmbGFnID0g MCwgZjJmbGFnID0gMDsKKyNlbmRpZiAvKiBGTkZMT0FUICovCisjaWZkZWYgT1MyCisgICAgZXh0 ZXJuIGludCBrZXltYWM7CisjZW5kaWYgLyogT1MyICovCisKKyAgICBub3QgPSAwOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBGbGFnIGZvciB3aGV0aGVyICJOT1QiIHdhcyBzZWVuICov CisgICAgeiA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSW5pdGlhbCBJRiBj b25kaXRpb24gKi8KKyAgICBpZmFyZ3MgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBD b3VudCBvZiBJRiBjb25kaXRpb24gd29yZHMgKi8KKyAgICBieCA9IGJvb2x2YWw7ICAgICAgICAg ICAgICAgICAgICAgICAvKiBJbml0aWFsaXplIGJvb2xlYW4gdmFsdWUgKi8KKyAgICAqYnggPSBO VUw7CisKKyAgaWZhZ2FpbjoKKyAgICBjbWZkYmkoJmt3LCAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBGaXJzdCBGREIgLSBjb21tYW5kIHN3aXRjaGVzICovCisgICAgICAgICAgIF9DTUtFWSwg ICAgICAgICAgICAgICAgICAgICAgLyogZmNvZGUgKi8KKyAgICAgICAgICAgIk51bWJlciwgbnVt ZXJpYy12YWx1ZWQgdmFyaWFibGUsIEJvb2xlYW4gZXhwcmVzc2lvbiwgb3Iga2V5d29yZCIsCisg ICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGVmYXVsdCAqLworICAg ICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIHN0cmluZyBkYXRh ICovCisgICAgICAgICAgIG5pZiwgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVt ZXJpYyBkYXRhIDE6IHRibCBzaXplICovCisgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDI6IDQgPSBzaWxlbnQgKi8KKyAgICAgICAg ICAgeHhzdHJpbmcsICAgICAgICAgICAgICAgICAgICAvKiBQcm9jZXNzaW5nIGZ1bmN0aW9uICov CisgICAgICAgICAgIGlmdGFiLCAgICAgICAgICAgICAgICAgICAgICAgLyogS2V5d29yZCB0YWJs ZSAqLworICAgICAgICAgICAmbnUgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBvaW50ZXIg dG8gbmV4dCBGREIgKi8KKyAgICAgICAgICAgKTsKKyAgICBjbWZkYmkoJm51LCAgICAgICAgICAg ICAgICAgICAgICAgICAvKiAybmQgRkRCIC0gQW4gaW50ZWdlciAqLworICAgICAgICAgICBfQ01O VU0sICAgICAgICAgICAgICAgICAgICAgIC8qIGZjb2RlICovCisgICAgICAgICAgICIiLCAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogaGxwbXNnICovCisgICAgICAgICAgICIiLCAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogRGVmYXVsdCAqLworICAgICAgICAgICAiIiwgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIGFkZHRsIHN0cmluZyBkYXRhICovCisgICAgICAgICAgIDAsCisg ICAgICAgICAgIDAsCisgICAgICAgICAgIHh4c3RyaW5nLAorICAgICAgICAgICBOVUxMLAorI2lm ZGVmIEZORkxPQVQKKyAgICAgICAgICAgJmZsCisjZWxzZQorICAgICAgICAgICBOVUxMCisjZW5k aWYgLyogRk5GTE9BVCAqLworICAgICAgICAgICApOworI2lmZGVmIEZORkxPQVQKKyAgICBjbWZk YmkoJmZsLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBIGZsb2F0aW5nLXBvaW50IG51bWJl ciAqLworICAgICAgICAgICBfQ01GTEQsICAgICAgICAgICAgICAgICAgICAgIC8qIGZjb2RlICov CisgICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaGxwbXNnICovCisg ICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGVmYXVsdCAqLworICAg ICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIHN0cmluZyBkYXRh ICovCisgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVt ZXJpYyBkYXRhIDEgKi8KKyAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBhZGR0bCBudW1lcmljIGRhdGEgMiAqLworICAgICAgICAgICB4eHN0cmluZywKKyAgICAgICAg ICAgTlVMTCwKKyAgICAgICAgICAgTlVMTAorICAgICAgICAgICApOworI2VuZGlmIC8qIEZORkxP QVQgKi8KKyAgICB4ID0gY21mZGIoJmt3KTsgICAgICAgICAgICAgICAgICAgICAvKiBQYXJzZSBh IGtleXdvcmQgb3IgYSBudW1iZXIgKi8KKyAgICBkZWJ1ZyhGMTExLCJib29sdmFsIGNtZmRiIiwi Iix4KTsKKyAgICBpZiAoeCA8IDApIHsKKyAgICAgICAgaWYgKHggPT0gLTMpCisgICAgICAgICAg eCA9IC0yOworICAgICAgICByZXR1cm4oeCk7CisgICAgfQorICAgIGRlYnVnKEYxMTEsImJvb2x2 YWwgc3dpdGNoIiwiIixjbXJlc3VsdC5mY29kZSk7CisgICAgc3dpdGNoIChjbXJlc3VsdC5mY29k ZSkgeyAgICAgICAgICAgLyogV2hhdCBkaWQgd2UgZ2V0PyAqLworICAgICAgY2FzZSBfQ01GTEQ6 IHsJCQkvKiBBICJmaWVsZCIgKi8KKwkgIGludCBpOworCSAgY2hhciAqIHM7CisJICBzID0gY21y ZXN1bHQuc3Jlc3VsdDsKKy8qCisgIEMtS2VybWl0IDkuMDogVGhpcyBhbGxvd3MgYSBtYWNybyBu YW1lIHRvIHNlcnZlIGFzIGFuCisgIElGIGNvbmRpdGlvbiB3aXRob3V0IGhhdmluZyB0byBlbmNs b3NlIGl0IGluIFxtKC4uLikuCisqLworCSAgaWYgKAorI2lmZGVmIEZORkxPQVQJICAKKwkgICAg ICAhaXNmbG9hdChjbXJlc3VsdC5zcmVzdWx0LDApIC8qIE5vdCBhIG51bWJlciAqLworI2Vsc2UK KwkgICAgICAhY2hrbnVtKGNtcmVzdWx0LnNyZXN1bHQpIC8qIE5vdCBhIG51bWJlciAqLworI2Vu ZGlmCS8qIEZORkxPQVQgKi8KKwkgICAgICApIHsKKwkgICAgICBpID0gbWxvb2sobWFjdGFiLGNt cmVzdWx0LnNyZXN1bHQsbm1hYyk7IC8qIExvb2sgaXQgdXAgKi8KKwkgICAgICBpZiAoaSA+IC0x KQkJLyogaW4gdGhlIG1hY3JvIHRhYmxlICovCisJCXMgPSBtYWN0YWJbeF0ubXZhbDsJLyogYW5k IGdldCBpdHMgdmFsdWUgKi8KKwkgICAgICBlbHNlCQkJLyogT3RoZXJ3aXNlIGlmIG5vIHN1Y2gg bWFjcm8gKi8KKwkJcyA9ICIwIjsJCS8qIGV2YWx1YXRlIGFzIEZBTFNFLiAqLworCSAgfQorI2lm ZGVmIEZORkxPQVQKKyAgICAgICAgaWYgKGlzZmxvYXQocywwKSkgewkJLyogQSBmbG9hdGluZy1w b2ludCBudW1iZXI/ICovCisgICAgICAgICAgICBmMSA9IGZsb2F0dmFsOyAgICAgICAgICAgICAg LyogWWVzLCBnZXQgaXRzIHZhbHVlICovCisgICAgICAgICAgICBmMWZsYWcgPSAxOyAgICAgICAg ICAgICAgICAgLyogcmVtZW1iZXIgd2UgZGlkIHRoaXMgKi8KKyAgICAgICAgICAgIGlmYyA9IDk5 OTk7ICAgICAgICAgICAgICAgICAvKiBTZXQgc3BlY2lhbCAiaWYtY29kZSIgKi8KKyAgICAgICAg fQorI2Vsc2UKKwlpZiAoY2hrbnVtKHMpKSB7CisJICAgIGNtcmVzdWx0Lm5yZXN1bHQgPSBhdG9p KHMpOworCSAgICBpZmMgPSA5OTk5OworCSAgICBicmVhazsKKwl9CisjZW5kaWYgLyogRk5GTE9B VCAqLworCWVsc2UKKwkgIHJldHVybigtMik7CisgICAgICB9CisgICAgICBjYXNlIF9DTU5VTTog ICAgICAgICAgICAgICAgICAgICAgLyogQSBudW1iZXIuLi4gKi8KKyAgICAgICAgaWZjID0gOTk5 OTsgICAgICAgICAgICAgICAgICAgICAvKiBTZXQgc3BlY2lhbCAiaWYtY29kZSIgKi8KKyAgICAg ICAgYnJlYWs7CisgICAgICBjYXNlIF9DTUtFWTogICAgICAgICAgICAgICAgICAgICAgLyogQSBr ZXl3b3JkICovCisgICAgICAgIGlmYyA9IGNtcmVzdWx0Lm5yZXN1bHQ7ICAgICAgICAgLyogR2V0 IGlmLWNvZGUgKi8KKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICByZXR1 cm4oLTIpOworICAgIH0KKyAgICBzd2l0Y2ggKGlmYykgeyAgICAgICAgICAgICAgICAgICAgICAv KiBzZXQgeiA9IDEgZm9yIHRydWUsIDAgZm9yIGZhbHNlICovCisgICAgICBjYXNlIDk5OTk6ICAg ICAgICAgICAgICAgICAgICAgICAgLyogTnVtYmVyICovCisjaWZkZWYgRk5GTE9BVAorICAgICAg ICBpZiAoZjFmbGFnKSB7CisgICAgICAgICAgICB6ID0gKGYxID09IDAuMCkgPyAwIDogMTsKKyAg ICAgICAgfSBlbHNlCisjZW5kaWYgLyogRk5GTE9BVCAqLworICAgICAgICB6ID0gKGNtcmVzdWx0 Lm5yZXN1bHQgPT0gMCkgPyAwIDogMTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIFhYSUZM UDogICAgICAgICAgICAgICAgICAgICAgLyogTGVmdCBwYXJlbiAqLworICAgICAgICBpZiAocGNv dW50ID09IDAgJiYgaWZhcmdzID4gMCkKKyAgICAgICAgICByZXR1cm4oLTIpOworICAgICAgICBw YXJlbnMgPSAxOworICAgICAgICBwY291bnQrKzsKKyAgICAgICAgaWZhcmdzKys7CisgICAgICAg ICpieCsrID0gJygnOworICAgICAgICBnb3RvIGlmYWdhaW47CisgICAgICBjYXNlIFhYSUZSUDog ICAgICAgICAgICAgICAgICAgICAgLyogUmlnaHQgcGFyZW4gKi8KKyAgICAgICAgaWYgKCFwYXJl bnMpCisgICAgICAgICAgcmV0dXJuKC0yKTsKKyAgICAgICAgaWYgKC0tcGNvdW50IDwgMCkKKyAg ICAgICAgICByZXR1cm4oLTIpOworICAgICAgICBpZmFyZ3MrKzsKKyAgICAgICAgKmJ4KysgPSAn KSc7CisgICAgICAgICpieCA9IE5VTDsKKyAgICAgICAgaWYgKHBjb3VudCA9PSAwKQorICAgICAg ICAgIGdvdG8gaWZlbmQ7CisgICAgICAgIGdvdG8gaWZhZ2FpbjsKKyAgICAgIGNhc2UgWFhJRkFO OiAgICAgICAgICAgICAgICAgICAgICAvKiBBTkQgKCYmKSAqLworICAgICAgICBpZmFyZ3MrKzsK KyAgICAgICAgaWYgKCFlY291bnQpCisgICAgICAgICAgcmV0dXJuKC0yKTsKKyAgICAgICAgKmJ4 KysgPSAnJic7CisgICAgICAgIGdvdG8gaWZhZ2FpbjsKKyAgICAgIGNhc2UgWFhJRk9SOiAgICAg ICAgICAgICAgICAgICAgICAvKiBPUiAofHwpICovCisgICAgICAgIGlmYXJncysrOworICAgICAg ICBpZiAoIWVjb3VudCkKKyAgICAgICAgICByZXR1cm4oLTIpOworICAgICAgICAqYngrKyA9ICd8 JzsKKyAgICAgICAgZ290byBpZmFnYWluOworICAgICAgY2FzZSBYWElGTk86ICAgICAgICAgICAg ICAgICAgICAgIC8qIElGIE5PVCBbIE5PVCBbIE5PVCAuLi4gXSBdICovCisgICAgICAgIGlmIChi eCA+IGJvb2x2YWwpIHsgICAgICAgICAgICAgLyogZXZhbGEoKSBkb2Vzbid0IGxpa2UgY2FzY2Fk ZWQgKi8KKyAgICAgICAgICAgIGlmICgqKGJ4LTEpID09ICchJykgeyAgICAgICAvKiB1bmFyeSBv cGVyYXRvcnMuLi4gKi8KKyAgICAgICAgICAgICAgICAqKGJ4LTEpID0gTlVMOyAgICAgICAgICAv KiBTbyBoZXJlLCB0d28gd3JvbmdzIG1ha2UgYSByaWdodC4gKi8KKyAgICAgICAgICAgICAgICBi eC0tOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAqYngrKyA9ICchJzsK KyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICpieCsrID0gJyEn OworICAgICAgICB9CisgICAgICAgIGlmYXJncysrOworICAgICAgICBnb3RvIGlmYWdhaW47Cisg ICAgICBjYXNlIFhYSUZUUjogICAgICAgICAgICAgICAgICAgICAgLyogSUYgVFJVRSAqLworICAg ICAgICB6ID0gMTsKKyAgICAgICAgZGVidWcoRjEwMSwiaWYgdHJ1ZSIsIiIseik7CisgICAgICAg IGlmYXJncyArPSAxOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgWFhJRk5UOiAgICAgICAg ICAgICAgICAgICAgICAvKiBJRiBGQUxTRSAqLworICAgICAgICB6ID0gMDsKKyAgICAgICAgZGVi dWcoRjEwMSwiaWYgdHJ1ZSIsIiIseik7CisgICAgICAgIGlmYXJncyArPSAxOworICAgICAgICBi cmVhazsKKyAgICAgIGNhc2UgWFhJRlNVOiAgICAgICAgICAgICAgICAgICAgICAvKiBJRiBTVUND RVNTICovCisgICAgICAgIHogPSAoIHN1Y2Nlc3MgIT0gMCApID8gMSA6IDA7CisgICAgICAgIGRl YnVnKEYxMDEsImlmIHN1Y2Nlc3MiLCIiLHopOworICAgICAgICBpZmFyZ3MgKz0gMTsKKyAgICAg ICAgYnJlYWs7CisgICAgICBjYXNlIFhYSUZGQTogICAgICAgICAgICAgICAgICAgICAgLyogSUYg RkFJTFVSRSAqLworICAgICAgICB6ID0gKCBzdWNjZXNzID09IDAgKSA/IDEgOiAwOworICAgICAg ICBkZWJ1ZyhGMTAxLCJpZiBmYWlsdXJlIiwiIix6KTsKKyAgICAgICAgaWZhcmdzICs9IDE7Cisg ICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIFhYSUZERTogICAgICAgICAgICAgICAgICAgICAg LyogSUYgREVGSU5FRCAqLworICAgICAgICBpZiAoKHggPSBjbWZsZCgiTWFjcm8gb3IgdmFyaWFi bGUgbmFtZSIsIiIsJnMsTlVMTCkpIDwgMCkKKyAgICAgICAgICByZXR1cm4oKHggPT0gLTMpID8g LTIgOiB4KTsKKworICAgICAgICBpZiAoKnMgPT0gQ01EUSkgeworICAgICAgICAgICAgY2hhciAq IGxwOworICAgICAgICAgICAgY2hhciBsaW5lWzI1Nl07CisgICAgICAgICAgICBpbnQgdCwgeDsK KyAgICAgICAgICAgIGlmICgqKHMrMSkgPT0gJ2YnIHx8ICoocysxKSA9PSAnRicpIHsgLyogQnVp bHQtaW4gZnVuY3Rpb24gKi8KKyAgICAgICAgICAgICAgICBleHRlcm4gc3RydWN0IGtleXRhYiBm bmN0YWJbXTsKKyAgICAgICAgICAgICAgICBleHRlcm4gaW50IG5mdW5jczsKKyAgICAgICAgICAg ICAgICBja3N0cm5jcHkobGluZSxzKzIsMjU2KTsKKyAgICAgICAgICAgICAgICBpZiAobGluZVsw XSkgeworICAgICAgICAgICAgICAgICAgICBscCA9IGNrc3RyY2hyKGxpbmUsJygnKTsKKyAgICAg ICAgICAgICAgICAgICAgaWYgKGxwKSAqbHAgPSBOVUw7CisgICAgICAgICAgICAgICAgICAgIHgg PSBsb29rdXAoZm5jdGFiLGxpbmUsbmZ1bmNzLCZ0KTsKKyAgICAgICAgICAgICAgICAgICAgeiA9 IHggPiAtMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZGVidWcoRjExMSwi aWYgZGVmaW5lZCBmdW5jdGlvbiIsbGluZSx6KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoKihz KzEpID09ICd2JyB8fCAqKHMrMSkgPT0gJ1YnKSB7IC8qIDguMC4yMDAgKi8KKyAgICAgICAgICAg ICAgICBleHRlcm4gc3RydWN0IGtleXRhYiB2YXJ0YWJbXTsKKyAgICAgICAgICAgICAgICBleHRl cm4gaW50IG52YXJzOworICAgICAgICAgICAgICAgIHogPSAwOworICAgICAgICAgICAgICAgIGlm ICgqKHMrMikgPT0gJygnKSB7CisgICAgICAgICAgICAgICAgICAgIGNrc3RybmNweShsaW5lLHMr MywyNTYpOworICAgICAgICAgICAgICAgICAgICBpZiAobGluZVswXSkgeworICAgICAgICAgICAg ICAgICAgICAgICAgbHAgPSBja3N0cmNocihsaW5lLCcpJyk7CisgICAgICAgICAgICAgICAgICAg ICAgICBpZiAobHApICpscCA9IE5VTDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHggPSBsb29r dXAodmFydGFiLGxpbmUsbnZhcnMsJnQpOworICAgICAgICAgICAgICAgICAgICAgICAgeiA9IHgg PiAtMTsKKwkJCWlmICh6KSB7CS8qIDguMC4yMDMgKi8KKwkJCSAgICBpbnQgdDsJLyogSXQgbXVz dCBoYXZlIGEgdmFsdWUgdG8gc3VjY2VlZCAqLworCQkJICAgIHQgPSAyNTU7CS8qIGFzIGluIEMt S2VybWl0IDYuMCBhbmQgNy4wICovCisJCQkgICAgbHAgPSBsaW5lOwkvKiAodGhpcyB3YXMgYnJv a2VuIGluIDguMC4yMDAtMjAxKSAqLworCQkJICAgIHp6c3RyaW5nKHMsJmxwLCZ0KTsKKwkJCSAg ICB0ID0gc3RybGVuKGxpbmUpOworCQkJICAgIHogPSBsaW5lWzBdID8gMSA6IDA7CisJCQl9Cisg ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg ZGVidWcoRjExMSwiaWYgZGVmaW5lZCB2YXJpYWJsZSIsbGluZSx6KTsKKyAgICAgICAgICAgIH0g ZWxzZSB7CisgICAgICAgICAgICAgICAgeiA9IGNoa3ZhcihzKTsgICAgICAgICAgLyogU3RhcnRz IHdpdGggYmFja3NsYXNoICovCisgICAgICAgICAgICAgICAgaWYgKHogPiAwKSB7ICAgICAgICAg ICAgLyogWWVzLi4uICovCisgICAgICAgICAgICAgICAgICAgIHQgPSAyNTU7ICAgICAgICAgICAg LyogdGhhbiBidWZmZXIgc28gaWYgenpzdHJpbmcgZmFpbHMgICovCisgICAgICAgICAgICAgICAg ICAgIGxwID0gbGluZTsgICAgICAgICAgLyogY2hlY2sgZm9yIHRoYXQgLS0gb3ZlcmZsb3cgbWVh bnMgKi8KKyAgICAgICAgICAgICAgICAgICAgbGluZVswXSA9IE5VTDsgICAgICAvKiB0aGUgcXVh bnRpdHkgaXMgZGVmaW5lZC4gKi8KKyAgICAgICAgICAgICAgICAgICAgeCA9IHp6c3RyaW5nKHMs JmxwLCZ0KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCh4IDwgMCAmJiB0ICE9IDI1NSkgfHwg IWxpbmVbMF0pCisgICAgICAgICAgICAgICAgICAgICAgeiA9IDA7CisgICAgICAgICAgICAgICAg ICAgIGRlYnVnKEYxMTEsImlmIGRlZmluZWQgenpzdHJpbmciLGxpbmUseik7CisgICAgICAgICAg ICAgICAgICAgIGRlYnVnKEYxMDEsImlmIGRlZmluZWQgenpzdHJpbmcgdCIsIiIsdCk7CisgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAg ICAgeiA9IChteGxvb2sobWFjdGFiLHMsbm1hYykgPiAtMSk7IC8qIExvb2sgZm9yIGV4YWN0IG1h dGNoICovCisgICAgICAgIH0KKyAgICAgICAgZGVidWcoRjExMSwiaWYgZGVmaW5lZCBmaW5hbCIs cyx6KTsKKyAgICAgICAgaWZhcmdzICs9IDI7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNl IFhYSUZEQzogeyAgICAgICAgICAgICAgICAgICAgLyogSUYgREVDTEFSRUQgKi8KKyAgICAgICAg ICBjaGFyICogbHA7CisgICAgICAgICAgY2hhciBsaW5lWzMyXTsKKyAgICAgICAgICBpbnQgaiwg aywgdCwgeDsKKyAgICAgICAgICBpZiAoKHggPSBjbWZsZCgiQXJyYXkgbmFtZSIsIiIsJnMsTlVM TCkpIDwgMCkKKyAgICAgICAgICAgIHJldHVybigoeCA9PSAtMykgPyAtMiA6IHgpOworICAgICAg ICAgIGlmICgqcyA9PSBDTURRKSB7CisgICAgICAgICAgICAgIGlmICgqKHMrMSkgIT0gJyYnKSB7 CisgICAgICAgICAgICAgICAgICB0ID0gMzE7CisgICAgICAgICAgICAgICAgICBscCA9IGxpbmU7 CisgICAgICAgICAgICAgICAgICBsaW5lWzBdID0gTlVMOworICAgICAgICAgICAgICAgICAgeCA9 IHp6c3RyaW5nKHMsJmxwLCZ0KTsKKyAgICAgICAgICAgICAgICAgIHMgPSBsaW5lOworICAgICAg ICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAgIHogPSAwOworICAgICAgICAgIGlmICgo eCA9IGFycmF5Ym91bmRzKHMsJmosJmspKSA+IC0xKSB7CisgICAgICAgICAgICAgIGlmIChhX3B0 clt4XSkgeworICAgICAgICAgICAgICAgICAgaWYgKGogPCAxKQorICAgICAgICAgICAgICAgICAg ICB6ID0gMTsKKyAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGogPD0gYV9kaW1beF0pCisgICAg ICAgICAgICAgICAgICAgIHogPSAxOworICAgICAgICAgICAgICAgICAgaWYgKHogPT0gMSAmJiBr ID4gYV9kaW1beF0pCisgICAgICAgICAgICAgICAgICAgIHogPSAwOworICAgICAgICAgICAgICB9 CisgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgY2FzZSBYWElG Qkc6ICAgICAgICAgICAgICAgICAgICAgIC8qIElGIEJBQ0tHUk9VTkQgKi8KKyAgICAgIGNhc2Ug WFhJRkZHOiAgICAgICAgICAgICAgICAgICAgICAvKiBJRiBGT1JFR1JPVU5EICovCisgICAgICAg IGJnY2hrKCk7ICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2hlY2sgYmFja2dyb3VuZCBzdGF0 dXMgKi8KKyAgICAgICAgaWYgKGlmYyA9PSBYWElGRkcpICAgICAgICAgICAgICAvKiBGb3JlZ3Jv dW5kICovCisgICAgICAgICAgeiA9IHBmbGFnID8gMSA6IDA7CisgICAgICAgIGVsc2UgeiA9IHBm bGFnID8gMCA6IDE7ICAgICAgICAgLyogQmFja2dyb3VuZCAqLworICAgICAgICBpZmFyZ3MgKz0g MTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgWFhJRkNPOiAgICAgICAgICAgICAgICAg ICAgICAvKiBJRiBDT1VOVCAqLworICAgICAgICB6ID0gKCAtLWNvdW50W2NtZGx2bF0gPiAwICk7 CisgICAgICAgIGlmIChjeCA9PSBYWFdISSkgY291bnRbY21kbHZsXSArPSAyOyAvKiBEb24ndCBh c2suLi4gKi8KKyAgICAgICAgZGVidWcoRjEwMSwiaWYgY291bnQiLCIiLHopOworICAgICAgICBp ZmFyZ3MgKz0gMTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgWFhJRkVYOiAgICAgICAg ICAgICAgICAgICAgICAvKiBJRiBFWElTVCAqLworI2lmZGVmIENLX1RNUERJUgorICAgICAgY2Fz ZSBYWElGREk6ICAgICAgICAgICAgICAgICAgICAgIC8qIElGIERJUkVDVE9SWSAqLworI2VuZGlm IC8qIENLX1RNUERJUiAqLworICAgICAgY2FzZSBYWElGQUI6ICAgICAgICAgICAgICAgICAgICAg IC8qIElGIEFCU09MVVRFICovCisgICAgICBjYXNlIFhYSUZMTjoJCQkvKiBJRiBMSU5LICovCisg ICAgICAgIGlmICgoeCA9IGNtZmxkKAorICAgICAgICAgICAgICAgICAgICAgICAoKGlmYyA9PSBY WElGREkpID8gIkRpcmVjdG9yeSBuYW1lIiA6ICJGaWxlIiksCisgICAgICAgICAgICAgICAgICAg ICAgICIiLCZzLAorI2lmZGVmIE9TMgorICAgICAgICAgICAgICAgICAgICAgICBOVUxMICAgICAg ICAgICAgIC8qIFRoaXMgYWxsb3dzIFwncyBpbiBmaWxlbmFtZXMgKi8KKyNlbHNlCisgICAgICAg ICAgICAgICAgICAgICAgIHh4c3RyaW5nCisjZW5kaWYgLyogT1MyICovCisgICAgICAgICAgICAg ICAgICAgICAgICkpIDwgMCkgeworICAgICAgICAgICAgaWYgKHggPT0gLTMpIHsKKyAgICAgICAg ICAgICAgICBleHRlcm4gaW50IGNtZmxnczsKKyAgICAgICAgICAgICAgICBpZiAoY21mbGdzID09 IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/RmlsZSBvciBkaXJlY3RvcnkgbmFt ZSByZXF1aXJlZFxuIik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybigtOSk7CisgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHJldHVybih4KTsKKyAgICAgICAgfQorICAg ICAgICBzID0gYnJzdHJpcChzKTsKKyNpZmRlZiBVTklYCisJaWYgKGlmYyA9PSBYWElGTE4pIHsK KwkgICAgeiA9IGlzYWxpbmsocyk7CisJfSBlbHNlCisjZW5kaWYJLyogVU5JWCAqLworICAgICAg ICBpZiAoaWZjID09IFhYSUZBQikgeworICAgICAgICAgICAgeiA9IGlzYWJzb2x1dGUocyk7Cisg ICAgICAgIH0gZWxzZSBpZiAoaWZjID09IFhYSUZFWCkgeworICAgICAgICAgICAgeiA9ICh6Z2V0 ZnMocykgPiAtMUwpOworICAgICAgICAgICAgZGVidWcoRjEwMSwiaWYgZXhpc3QgMSIsIiIseik7 CisjaWZkZWYgT1MyCisgICAgICAgICAgICBpZiAoIXopIHsgICAgICAgICAgICAgICAgICAgLyog RmlsZSBub3QgZm91bmQuICovCisgICAgICAgICAgICAgICAgaW50IHQ7ICAgICAgICAgICAgICAg ICAgLyogVHJ5IGV4cGFuZGluZyB2YXJpYWJsZXMgKi8KKyAgICAgICAgICAgICAgICB0ID0gTElO QlVGU0laLTE7ICAgICAgICAvKiBhbmQgbG9va2luZyBhZ2Fpbi4gKi8KKyAgICAgICAgICAgICAg ICBscCA9IGxpbmU7CisgICAgICAgICAgICAgICAgenpzdHJpbmcocywmbHAsJnQpOworICAgICAg ICAgICAgICAgIHMgPSBsaW5lOworICAgICAgICAgICAgICAgIHogPSAoIHpjaGtpKHMpID4gLTFM ICk7CisgICAgICAgICAgICAgICAgZGVidWcoRjEwMSwiaWYgZXhpc3QgMiIsIiIseik7CisgICAg ICAgICAgICB9CisjZW5kaWYgLyogT1MyICovCisjaWZkZWYgQ0tfVE1QRElSCisgICAgICAgIH0g ZWxzZSB7CisjaWZkZWYgVk1TCisgICAgICAgICAgICB6ID0gKHpjaGtpKHMpID09IC0yKQorI2Vs c2UKKy8qIEJlY2F1c2UgdGhpcyBkb2Vzbid0IGNhdGNoICRESVNLMTpbRk9PXUJMQUguRElSOzEg Ki8KKyAgICAgICAgICAgIHogPSBpc2RpcihzKQorI2lmZGVmIE9TMgorICAgICAgICAgICAgICB8 fCAoaXNhbHBoYShzWzBdKSAmJiBzWzFdID09ICc6JyAmJiBzWzJdID09IE5VTCkKKyNlbmRpZiAv KiBPUzIgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKyAgICAgICAgICAgICAgOworICAgICAgICAgICAg ZGVidWcoRjEwMSwiaWYgZGlyZWN0b3J5IDEiLCIiLHopOworCisgICAgICAgICAgICBpZiAoIXop IHsJCQkvKiBGaWxlIG5vdCBmb3VuZC4gKi8KKyAgICAgICAgICAgICAgICBpbnQgdDsgICAgICAg ICAgICAgICAgICAvKiBUcnkgZXhwYW5kaW5nIHZhcmlhYmxlcyAqLworICAgICAgICAgICAgICAg IHQgPSBMSU5CVUZTSVotMTsgICAgICAgIC8qIGFuZCBsb29raW5nIGFnYWluLiAqLworICAgICAg ICAgICAgICAgIGxwID0gbGluZTsKKyAgICAgICAgICAgICAgICB6enN0cmluZyhzLCZscCwmdCk7 CisgICAgICAgICAgICAgICAgcyA9IGxpbmU7CisgICAgICAgICAgICAgICAgeiA9IGlzZGlyKHMp CisjaWZkZWYgT1MyCisgICAgICAgICAgICAgICAgICB8fCAoaXNhbHBoYShzWzBdKSAmJiBzWzFd ID09ICc6JyAmJiBzWzJdID09IE5VTCkKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAgICAgICAg ICAgICAgOworICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsImlmIGRpcmVjdG9yeSAyIiwiIix6 KTsKKyAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBDS19UTVBESVIgKi8KKyAgICAgICAgfQorICAg ICAgICBpZmFyZ3MgKz0gMjsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgWFhJRkVROiAg ICAgICAgICAgICAgICAgICAgICAvKiBJRiBFUVVBTCAoc3RyaW5nIGNvbXBhcmlzb24pICovCisg ICAgICBjYXNlIFhYSUZMTDogICAgICAgICAgICAgICAgICAgICAgLyogSUYgTGV4aWNhbGx5IExl c3MgVGhhbiAqLworICAgICAgY2FzZSBYWElGTEc6ICAgICAgICAgICAgICAgICAgICAgIC8qIElm IExleGljYWxseSBHcmVhdGVyIFRoYW4gKi8KKyAgICAgICAgaWYgKCh4ID0gY21mbGQoImZpcnN0 IHdvcmQgb3IgdmFyaWFibGUgbmFtZSIsIiIsJnMseHhzdHJpbmcpKSA8IDApIHsKKyAgICAgICAg ICAgIGlmICh4ID09IC0zKSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCI/VGV4dCByZXF1aXJl ZFxuIik7CisgICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgICAgIH0gZWxzZSBy ZXR1cm4oeCk7CisgICAgICAgIH0KKyAgICAgICAgcyA9IGJyc3RyaXAocyk7ICAgICAgICAgICAg ICAgICAvKiBTdHJpcCBicmFjZXMgKi8KKyAgICAgICAgeCA9IChpbnQpc3RybGVuKHMpOworICAg ICAgICBpZiAoeCA+IExJTkJVRlNJWi0xKSB7CisgICAgICAgICAgICBwcmludGYoIj9JRjogc3Ry aW5ncyB0b28gbG9uZ1xuIik7CisgICAgICAgICAgICByZXR1cm4oLTIpOworICAgICAgICB9Cisg ICAgICAgIGxwID0gbGluZTsgICAgICAgICAgICAgICAgICAgICAgLyogbHAgcG9pbnRzIHRvIGZp cnN0IHN0cmluZyAqLworICAgICAgICBja3N0cm5jcHkobGluZSxzLExJTkJVRlNJWik7CisgICAg ICAgIGlmICgoeSA9IGNtZmxkKCJzZWNvbmQgd29yZCBvciB2YXJpYWJsZSBuYW1lIiwiIiwmcyx4 eHN0cmluZykpIDwgMCkgeworICAgICAgICAgICAgaWYgKHkgPT0gLTMpIHsKKyAgICAgICAgICAg ICAgICBwcmludGYoIj9UZXh0IHJlcXVpcmVkXG4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4o LTkpOworICAgICAgICAgICAgfSBlbHNlIHJldHVybih5KTsKKyAgICAgICAgfQorICAgICAgICBz ID0gYnJzdHJpcChzKTsKKyAgICAgICAgeSA9IChpbnQpc3RybGVuKHMpOworICAgICAgICBpZiAo eCArIHkgKyAyID4gTElOQlVGU0laKSB7CisgICAgICAgICAgICBwcmludGYoIj9JRjogc3RyaW5n cyB0b28gbG9uZ1xuIik7CisgICAgICAgICAgICByZXR1cm4oLTIpOworICAgICAgICB9CisgICAg ICAgIHRwID0gbHAgKyB4ICsgMjsgICAgICAgICAgICAgICAgLyogdHAgcG9pbnRzIHRvIHNlY29u ZCBzdHJpbmcgKi8KKyAgICAgICAgc3RyY3B5KHRwLHMpOyAgICAgICAgICAgICAgICAgICAvKiBz YWZlIChjaGVja2VkKSAqLworICAgICAgICB4ID0gY2tzdHJjbXAobHAsdHAsLTEsaW5wY2FzW2Nt ZGx2bF0pOyAvKiBVc2UgbG9uZ2VzdCBsZW5ndGggKi8KKyAgICAgICAgc3dpdGNoIChpZmMpIHsK KyAgICAgICAgICBjYXNlIFhYSUZFUTogICAgICAgICAgICAgICAgICAvKiBJRiBFUVVBTCAoc3Ry aW5nIGNvbXBhcmlzb24pICovCisgICAgICAgICAgICB6ID0gKHggPT0gMCk7CisgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgICBjYXNlIFhYSUZMTDogICAgICAgICAgICAgICAgICAvKiBJRiBM ZXhpY2FsbHkgTGVzcyBUaGFuICovCisgICAgICAgICAgICB6ID0gKHggPCAwKTsKKyAgICAgICAg ICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgWFhJRkxHOiAgICAgICAgICAgICAgICAgIC8qIElm IExleGljYWxseSBHcmVhdGVyIFRoYW4gKi8KKyAgICAgICAgICAgIHogPSAoeCA+IDApOworICAg ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZGVidWcoRjEwMSwiSUYgRVEgcmVz dWx0IiwiIix6KTsKKyAgICAgICAgaWZhcmdzICs9IDM7CisgICAgICAgIGJyZWFrOworCisgICAg ICBjYXNlIFhYSUZWRTogICAgICAgICAgICAgICAgICAgICAgLyogSUYgVkVSU0lPTiAqLworICAg ICAgY2FzZSBYWElGQUU6ICAgICAgICAgICAgICAgICAgICAgIC8qIElGIChhcml0aG1ldGljYWxs eSkgPSAqLworICAgICAgY2FzZSBYWElGTlE6ICAgICAgICAgICAgICAgICAgICAgIC8qIElGICE9 IChub3QgYXJpdGhtZXRpY2FsbHkgZXF1YWwpICovCisgICAgICBjYXNlIFhYSUZMVDogICAgICAg ICAgICAgICAgICAgICAgLyogSUYgPCAgKi8KKyAgICAgIGNhc2UgWFhJRkxFOiAgICAgICAgICAg ICAgICAgICAgICAvKiBJRiA8PSAqLworICAgICAgY2FzZSBYWElGR0U6ICAgICAgICAgICAgICAg ICAgICAgIC8qIElGID49ICovCisgICAgICBjYXNlIFhYSUZHVDogeyAgICAgICAgICAgICAgICAg ICAgLyogSUYgPiAgKi8KKworCSAgLyogSnVseSAyMDA2IC0gY29udmVydGVkIHRvIHVzZSBDS19P RkZfVCByYXRoZXIgdGhhbiBpbnQgdG8gKi8KKyAgICAgICAgICAvKiBhbGxvdyBsb25nIGludGVn ZXJzIG9uIHBsYXRmb3JtcyB0aGF0IGhhdmUgY2tfb2ZmX3QgPiAzMiBiaXRzICovCisJICBpbnQg eHg7CisJICBDS19PRkZfVCBuMSA9IChDS19PRkZfVCkwLCBuMiA9IChDS19PRkZfVCkwOworICAg ICAgICBpZiAoaWZjID09IFhYSUZWRSkgeworICAgICAgICAgICAgbjEgPSAoQ0tfT0ZGX1QpIHZl cm51bTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHggPSBjbWZsZCgiZmlyc3QgbnVt YmVyIG9yIHZhcmlhYmxlIG5hbWUiLCIiLCZzLHh4c3RyaW5nKTsKKyAgICAgICAgICAgIGlmICh4 ID09IC0zKSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCI/UXVhbnRpdHkgcmVxdWlyZWRcbiIp OworICAgICAgICAgICAgICAgIHJldHVybigtOSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg ICBpZiAoeCA8IDApIHJldHVybih4KTsKKyAgICAgICAgICAgIGRlYnVnKEYxMDEsInh4aWZndCBj bWZsZCIsIiIseCk7CisgICAgICAgICAgICBja3N0cm5jcHkobGluZSxzLExJTkJVRlNJWik7Cisg ICAgICAgICAgICBscCA9IGJyc3RyaXAobGluZSk7CisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJ4 eGlmZ3QgZXhwMSIsbHAsMCk7CisKKy8qIFRoZSBmb2xsb3dpbmcgYml0IGlzIGZvciBjb21wYXRp YmlsaXR5IHdpdGggb2xkIHZlcnNpb25zIG9mIE1TLURPUyBLZXJtaXQgKi8KKworICAgICAgICAg ICAgaWYgKCFja3N0cmNtcChscCwiY291bnQiLDUsMCkpIHsKKyAgICAgICAgICAgICAgICBuMSA9 IChDS19PRkZfVCljb3VudFtjbWRsdmxdOworICAgICAgICAgICAgfSBlbHNlIGlmICghY2tzdHJj bXAobHAsInZlcnNpb24iLDcsMCkpIHsKKyAgICAgICAgICAgICAgICBuMSA9IChDS19PRkZfVCkg dmVybnVtOworICAgICAgICAgICAgfSBlbHNlIGlmICghY2tzdHJjbXAobHAsImFyZ2MiLDQsMCkp IHsKKyAgICAgICAgICAgICAgICBuMSA9IChDS19PRkZfVCkgbWFjYXJnY1ttYWNsdmxdOworICAg ICAgICAgICAgfSBlbHNlIHsKKworLyogRW5kIG9mIGNvbXBhdGliaWxpdHkgYml0ICovCisKKyNp ZmRlZiBGTkZMT0FUCisgICAgICAgICAgICAgICAgaWYgKGlzZmxvYXQobHAsMCkgPiAxKSB7IC8q IEFsbG93IGZsb2F0aW5nLXBvaW50IGNvbXBhcmlzb25zICovCisgICAgICAgICAgICAgICAgICAg IGYxID0gZmxvYXR2YWw7CisgICAgICAgICAgICAgICAgICAgIGYxZmxhZyA9IDE7CisgICAgICAg ICAgICAgICAgfSBlbHNlCisjZW5kaWYgLyogRk5GTE9BVCAqLworICAgICAgICAgICAgICAgICAg aWYgKGNoa251bShscCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICBuMSA9IGNrYXRvZnMobHAp OworICAgICAgICAgICAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgIC8qIENoZWNrIGZvciBh cml0aG1ldGljIGV4cHJlc3Npb24gKi8KKyAgICAgICAgICAgICAgICAgICAgICBxID0gZXZhbGEo bHApOyAgICAvKiBjbW51bSgpIGRvZXMgdGhpcyBidXQgLi4uICovCisgICAgICAgICAgICAgICAg ICAgICAgaWYgKGNoa251bShxKSkgewkvKiB3ZSdyZSBub3QgdXNpbmcgY21udW0oKS4gKi8KKwkJ CSAgbjEgPSBja2F0b2ZzKHEpOworCQkgICAgICB9IGVsc2UgeworCQkJICBwcmludGYoIj9WYWx1 ZSBub3QgbnVtZXJpYyAtICVzIiwgbHApOworCQkJICByZXR1cm4oLTkpOworCQkgICAgICB9Cisg ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgeSA9 IGNtZmxkKCJudW1iZXIgb3IgdmFyaWFibGUgbmFtZSIsIiIsJnMseHhzdHJpbmcpOworICAgICAg ICBpZiAoeSA9PSAtMykgeworICAgICAgICAgICAgcHJpbnRmKCI/UXVhbnRpdHkgcmVxdWlyZWRc biIpOworICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoeSA8 IDApIHJldHVybih5KTsKKyAgICAgICAgcyA9IGJyc3RyaXAocyk7CisgICAgICAgIGlmICghKnMp IHJldHVybigtMik7CisgICAgICAgIGlmIChpZmMgPT0gWFhJRlZFKSB7CisgICAgICAgICAgICB0 cCA9IGxpbmU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB4ID0gKGludClzdHJsZW4o bHApOworICAgICAgICAgICAgdHAgPSBsaW5lICsgeCArIDI7CisgICAgICAgIH0KKyAgICAgICAg Y2tzdHJuY3B5KHRwLHMsTElOQlVGU0laLXgtMik7CisgICAgICAgIGRlYnVnKEYxMTAsInh4aWZn dCBleHAyIix0cCwwKTsKKyAgICAgICAgaWYgKCFja3N0cmNtcCh0cCwiY291bnQiLDUsMCkpIHsK KyAgICAgICAgICAgIG4yID0gKENLX09GRl9UKSBjb3VudFtjbWRsdmxdOworICAgICAgICB9IGVs c2UgaWYgKCFja3N0cmNtcCh0cCwidmVyc2lvbiIsNywwKSkgeworICAgICAgICAgICAgbjIgPSAo Q0tfT0ZGX1QpIHZlcm51bTsKKyAgICAgICAgfSBlbHNlIGlmICghY2tzdHJjbXAodHAsImFyZ2Mi LDQsMCkpIHsKKyAgICAgICAgICAgIG4yID0gKENLX09GRl9UKSBtYWNhcmdjW21hY2x2bF07Cisg ICAgICAgIH0gZWxzZSB7CisjaWZkZWYgRk5GTE9BVAorICAgICAgICAgICAgaWYgKGlzZmxvYXQo dHAsMCkgPiAxKSB7CisgICAgICAgICAgICAgICAgZjIgPSBmbG9hdHZhbDsKKyAgICAgICAgICAg ICAgICBmMmZsYWcgPSAxOworICAgICAgICAgICAgfSBlbHNlCisjZW5kaWYgLyogRk5GTE9BVCAq LworICAgICAgICAgICAgaWYgKGNoa251bSh0cCkpIHsKKyAgICAgICAgICAgICAgICBuMiA9IGNr YXRvZnModHApOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBxID0gZXZh bGEodHApOworCQlpZiAoY2hrbnVtKHEpKSB7CS8qIHdlJ3JlIG5vdCB1c2luZyBjbW51bSgpLiAq LworCQkgICAgbjIgPSBja2F0b2ZzKHEpOworCQl9IGVsc2UgeworCQkgICAgcHJpbnRmKCI/VmFs dWUgbm90IG51bWVyaWMgLSAlcyIsIHRwKTsKKwkJICAgIHJldHVybigtOSk7CisJCX0KKyAgICAg ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB4eCA9IChpZmMgPT0gWFhJRlZFKSA/IFhYSUZH RSA6IGlmYzsKKworI2lmZGVmIEZORkxPQVQKKyAgICAgICAgaWYgKGYxZmxhZyAmJiAhZjJmbGFn KSB7CisgICAgICAgICAgICBmMiA9IChDS0ZMT0FUKW4yOworICAgICAgICAgICAgZjJmbGFnID0g MTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZjJmbGFnICYmICFmMWZsYWcpCisgICAgICAgICAg ZjEgPSAoQ0tGTE9BVCluMTsKKyAgICAgICAgaWYgKGYxZmxhZykKKyAgICAgICAgICB6ID0gKChm MSA8ICBmMiAmJiB4eCA9PSBYWElGTFQpCisgICAgICAgICAgICAgICB8fCAoZjEgIT0gZjIgJiYg eHggPT0gWFhJRk5RKQorICAgICAgICAgICAgICAgfHwgKGYxIDw9IGYyICYmIHh4ID09IFhYSUZM RSkKKyAgICAgICAgICAgICAgIHx8IChmMSA9PSBmMiAmJiB4eCA9PSBYWElGQUUpCisgICAgICAg ICAgICAgICB8fCAoZjEgPj0gZjIgJiYgeHggPT0gWFhJRkdFKQorICAgICAgICAgICAgICAgfHwg KGYxID4gIGYyICYmIHh4ID09IFhYSUZHVCkpOworICAgICAgICBlbHNlCisjZW5kaWYgLyogRk5G TE9BVCAqLworICAgICAgICAgIHogPSAoKG4xIDwgIG4yICYmIHh4ID09IFhYSUZMVCkKKyAgICAg ICAgICAgICAgIHx8IChuMSAhPSBuMiAmJiB4eCA9PSBYWElGTlEpCisgICAgICAgICAgICAgICB8 fCAobjEgPD0gbjIgJiYgeHggPT0gWFhJRkxFKQorICAgICAgICAgICAgICAgfHwgKG4xID09IG4y ICYmIHh4ID09IFhYSUZBRSkKKyAgICAgICAgICAgICAgIHx8IChuMSA+PSBuMiAmJiB4eCA9PSBY WElGR0UpCisgICAgICAgICAgICAgICB8fCAobjEgPiAgbjIgJiYgeHggPT0gWFhJRkdUKSk7Cisg ICAgICAgIGRlYnVnKEYxMDEsInh4aWZnZSB6IiwiIix6KTsKKyAgICAgICAgaWYgKGlmYyA9PSBY WElGVkUpCisgICAgICAgICAgaWZhcmdzICs9IDI7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBp ZmFyZ3MgKz0gMzsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIGNhc2UgWFhJRk5V OiAgICAgICAgICAgICAgICAgICAgICAvKiBJRiBOVU1FUklDICovCisgICAgICAgIHggPSBjbWZs ZCgidmFyaWFibGUgbmFtZSBvciBjb25zdGFudCIsIiIsJnMsTlVMTCk7CisgICAgICAgIGlmICh4 ID09IC0zKSB7CisgICAgICAgICAgICBleHRlcm4gaW50IGNtZmxnczsKKyAgICAgICAgICAgIGlm IChjbWZsZ3MgPT0gMSkgeworICAgICAgICAgICAgICAgIHByaW50ZigiP1F1YW50aXR5IHJlcXVp cmVkXG4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICAgICAgfQorICAg ICAgICB9IGVsc2UgaWYgKHggPCAwKQorICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgeCA9 IExJTkJVRlNJWi0xOworICAgICAgICBscCA9IGxpbmU7CisgICAgICAgIHp6c3RyaW5nKHMsJmxw LCZ4KTsKKyAgICAgICAgbHAgPSBsaW5lOworICAgICAgICBkZWJ1ZyhGMTEwLCJ4eGlmbnUgcXVh bnRpdHkiLGxwLDApOworICAgICAgICB6ID0gY2hrbnVtKGxwKTsKKyNpZmRlZiBDT01NRU5UCisv KgorICBUaGlzIHdvcmtzLCBidXQgaXQncyBub3Qgd2lzZSAtLSBJRiBOVU1FUklDIGlzIG1vc3Rs eSB1c2VkIHRvIHNlZSBpZiBhCisgIHN0cmluZyByZWFsbHkgZG9lcyBjb250YWluIG9ubHkgbnVt ZXJpYyBjaGFyYWN0ZXJzLiAgSWYgdGhleSB3YW50IHRvIGZvcmNlCisgIGV2YWx1YXRpb24sIHRo ZXkgY2FuIHVzZSBcZmV2YWwoKSBvbiB0aGUgYXJndW1lbnQgc3RyaW5nLgorKi8KKyAgICAgICAg aWYgKCF6KSB7ICAgICAgICAgICAgICAgICAgICAgICAvKiBOb3QgYSBudW1iZXIgKi8KKyAgICAg ICAgICAgIHhfaWZudW0gPSAxOyAgICAgICAgICAgICAgICAvKiBBdm9pZCAiZXZhbCIgZXJyb3Ig bWVzc2FnZXMgKi8KKyAgICAgICAgICAgIHEgPSBldmFsYShscCk7ICAgICAgICAgICAgICAvKiBN YXliZSBpdCdzIGFuIGV4cHJlc3Npb24gKi8KKyAgICAgICAgICAgIHogPSBjaGtudW0ocSk7ICAg ICAgICAgICAgICAvKiB0aGF0IGV2YWx1YXRlcyB0byBhIG51bWJlciAqLworICAgICAgICAgICAg eF9pZm51bSA9IDA7ICAgICAgICAgICAgICAgIC8qIFB1dCBldmFsIG1lc3NhZ2VzIGJhY2sgdG8g bm9ybWFsICovCisgICAgICAgICAgICBpZiAoeikgZGVidWcoRjExMCwieHhpZm51IGV4cCIsbHAs MCk7CisgICAgICAgIH0KKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgICAgIGRlYnVnKEYxMDEs Inh4aWZudSBjaGtudW0iLCIiLHopOworICAgICAgICBpZmFyZ3MgKz0gMjsKKyAgICAgICAgYnJl YWs7CisKKyNpZmRlZiBaRkNEQVQKKyAgICAgIGNhc2UgWFhJRk5FOiB7ICAgICAgICAgICAgICAg ICAgICAvKiBJRiBORVdFUiAqLworICAgICAgICBjaGFyIGQxWzIwXSwgKiBkMjsgICAgICAgICAg ICAgIC8qIEJ1ZmZlcnMgZm9yIDIgZGF0ZXMgKi8KKyAgICAgICAgaWYgKCh6ID0gY21pZmkoIkZp cnN0IGZpbGUiLCIiLCZzLCZ5LHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgIHJldHVybih6KTsK KyAgICAgICAgY2tzdHJuY3B5KGQxLHpmY2RhdChzKSwyMCk7CisgICAgICAgIGlmICgoeiA9IGNt aWZpKCJTZWNvbmQgZmlsZSIsIiIsJnMsJnkseHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgcmV0 dXJuKHopOworICAgICAgICBkMiA9IHpmY2RhdChzKTsKKyAgICAgICAgaWYgKChpbnQpc3RybGVu KGQxKSAhPSAxNyB8fCAoaW50KXN0cmxlbihkMikgIT0gMTcpIHsKKyAgICAgICAgICAgIHByaW50 ZigiP0ZhaWx1cmUgdG8gZ2V0IGZpbGUgZGF0ZVxuIik7CisgICAgICAgICAgICByZXR1cm4oLTkp OworICAgICAgICB9CisgICAgICAgIGRlYnVnKEYxMTAsInh4aWZuZXdlciBkMSIsZDEsMCk7Cisg ICAgICAgIGRlYnVnKEYxMTAsInh4aWZuZXdlciBkMiIsZDIsMCk7CisgICAgICAgIHogPSAoc3Ry Y21wKGQxLGQyKSA+IDApID8gMSA6IDA7CisgICAgICAgIGRlYnVnKEYxMDEsInh4aWZuZXdlciIs IiIseik7CisgICAgICAgIGlmYXJncyArPSAyOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyNl bmRpZiAvKiBaRkNEQVQgKi8KKworI2lmZGVmIENLX0lGUk8KKyAgICAgIGNhc2UgWFhJRlJPOiAg ICAgICAgICAgICAgICAgICAgICAvKiBSRU1PVEUtT05MWSBhZHZpc29yeSAqLworICAgICAgICBp ZmFyZ3MrKzsKKyNpZmRlZiBOT0xPQ0FMCisgICAgICAgIHogPSAxOworI2Vsc2UKKyAgICAgICAg eiA9IHJlbW9ubHk7CisjZW5kaWYgLyogTk9MT0NBTCAqLworICAgICAgICBicmVhazsKKyNlbmRp ZiAvKiBDS19JRlJPICovCisKKyAgICAgIGNhc2UgWFhJRkFMOiAgICAgICAgICAgICAgICAgICAg ICAvKiBBTEFSTSAqLworICAgICAgICBpZmFyZ3MrKzsKKyAgICAgICAgZGVidWcoRjEwMSwiSUYg QUxBUk0gY2tfYWxhcm0iLCIiLGNrX2FsYXJtKTsKKyAgICAgICAgZGVidWcoRjExMCwiSUYgQUxB Uk0gYWxybV9kYXRlIixhbHJtX2RhdGUsMCk7CisgICAgICAgIGRlYnVnKEYxMTAsIklGIEFMQVJN IGFscm1fdGltZSIsYWxybV90aW1lLDApOworCisgICAgICAgIGlmIChja19hbGFybSA8IDFMIHx8 IGFscm1fZGF0ZVswXSA8ICcwJyB8fCBhbHJtX3RpbWVbMF0gPCAnMCcpIHsKKyAgICAgICAgICAg IHogPSAwOyAgICAgICAgICAgICAgICAgICAgICAvKiBBTEFSTSBub3QgU0VUICovCisgICAgICAg ICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgLyogc28gSUYgQUxBUk0gZmFpbHMgKi8K KyAgICAgICAgfQorICAgICAgICAvKiBHZXQgY3VycmVudCBkYXRlIGFuZCB0aW1lICovCisgICAg ICAgIGNrc3RybmNweSh0bXBidWYsY2tjdnRkYXRlKCIiLDEpLFRNUEJVRlNJWik7CisgICAgICAg IHMgPSB0bXBidWY7CisgICAgICAgIHNbOF0gPSBOVUw7CisgICAgICAgIHogPSAoaW50KSBzdHJu Y21wKHRtcGJ1ZixhbHJtX2RhdGUsOCk7IC8qIENvbXBhcmUgZGF0ZXMgKi8KKyAgICAgICAgZGVi dWcoRjEwMSwiSUYgQUxBUk0gZGF0ZSB6IiwiIix6KTsKKyAgICAgICAgaWYgKHogPT0gMCkgeyAg ICAgICAgICAgICAgICAgICAvKiBEYXRlcyBhcmUgdGhlIHNhbWUgKi8KKyAgICAgICAgICAgIC8q IENvbXBhcmUgdGltZXMgKi8KKyAgICAgICAgICAgIHogPSAodG9kMnNlYyh0bXBidWYrOSkgPj0g YXRvbChhbHJtX3RpbWUpKSA/IDEgOiAtMTsKKyAgICAgICAgICAgIGRlYnVnKEYxMDEsIklGIEFM QVJNIHRpbWUgeiIsIiIseik7CisgICAgICAgIH0KKyAgICAgICAgdG1wYnVmWzBdID0gTlVMOyAg ICAgICAgICAgICAgICAvKiB6ID49IDAgaWYgYWxhcm0gaXMgcGFzc2VkICovCisgICAgICAgIHog PSAoKHogPj0gMCkgPyAxIDogMCk7ICAgICAgICAgLyogeiA8ICAwIG90aGVyd2lzZSAqLworICAg ICAgICBkZWJ1ZyhGMTAxLCJJRiBBTEFSTSBmaW5hbCB6IiwiIix6KTsKKyAgICAgICAgYnJlYWs7 CisKKyAgICAgIGNhc2UgWFhJRk9QOiAgICAgICAgICAgICAgICAgICAgICAvKiBJRiBPUEVOICov CisgICAgICAgIGlmICgoeCA9IGNta2V5KGlvdGFiLG5pb3QsImZpbGUgb3IgbG9nIiwiIix4eHN0 cmluZykpIDwgMCkKKyAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgIGlmICh4ID09IDk5OTkg fHwgeCA9PSBaU1RESU8pIHsKKyAgICAgICAgICAgIGJnY2hrKCk7ICAgICAgICAgICAgICAgICAg ICAvKiBDaGVjayBiYWNrZ3JvdW5kIHN0YXR1cyAqLworICAgICAgICAgICAgeiA9IHBmbGFnID8g MSA6IDA7CisgICAgICAgIH0gZWxzZSBpZiAoeCA9PSA4ODg4KSB7CisgICAgICAgICAgICB6ID0g bG9jYWwgPyB0dGNoaygpID4gLTEgOiAwOworI2lmZGVmIENLTE9HRElBTAorICAgICAgICB9IGVs c2UgaWYgKHggPT0gNzc3NykgeworICAgICAgICAgICAgZXh0ZXJuIGludCBkaWFsb2c7CisgICAg ICAgICAgICB6ID0gZGlhbG9nID8gMSA6IDA7CisjZW5kaWYgLyogQ0tMT0dESUFMICovCisgICAg ICAgIH0gZWxzZQorICAgICAgICAgIHogPSAoY2hrZm4oeCkgPiAwKSA/IDEgOiAwOworICAgICAg ICBpZmFyZ3MgKz0gMTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgWFhJRlNEOiAgICAg ICAgICAgICAgICAgICAgICAvKiBTdGFydGVkLUZyb20tRGlhbGVyICovCisjaWZkZWYgT1MyCisg ICAgICAgIHogPSBTdGFydGVkRnJvbURpYWxlcjsKKyNlbHNlCisgICAgICAgIHogPSAwOworI2Vu ZGlmIC8qIE9TMiAqLworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBYWElGVE06ICAgICAg ICAgICAgICAgICAgICAgIC8qIFRlcm1pbmFsLU1hY3JvICovCisjaWZkZWYgT1MyCisgICAgICAg IHogPSBjbWRzdGtbY21kbHZsXS5jY2ZsZ3MgJiBDRl9LTUFDOworI2Vsc2UKKyAgICAgICAgeiA9 IDA7CisjZW5kaWYgLyogT1MyICovCisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIFhYSUZF TTogICAgICAgICAgICAgICAgICAgICAgLyogRW11bGF0aW9uIGlzIGFjdGl2ZSAqLworI2lmZGVm IE9TMgorICAgICAgICB6ID0gMTsKKyNlbHNlCisgICAgICAgIHogPSAwOworI2VuZGlmIC8qIE9T MiAqLworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBYWElGSUs6ICAgICAgICAgICAgICAg ICAgICAgIC8qIFJ1bm5pbmcgYXMgSUtTRD8gKi8KKyAgICAgICAgeiA9IGluc2VydmVyOworICAg ICAgICBicmVhazsKKworICAgICAgY2FzZSBYWElGVEE6ICAgICAgICAgICAgICAgICAgICAgIC8q IENvbm5lY3Rpb24gaXMgVEFQSSAqLworICAgICAgICB6ID0gMDsKKyNpZm5kZWYgTk9ESUFMCisj aWZkZWYgQ0tfVEFQSQorICAgICAgICBpZiAobG9jYWwgJiYgIW5ldHdvcmsgJiYgdHR0YXBpKQor ICAgICAgICAgIHogPSAxOworI2VuZGlmIC8qIENLX1RBUEkgKi8KKyNlbmRpZiAvKiBOT0RJQUwg Ki8KKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgWFhJRk1BOiAgICAgICAgICAgICAgICAg ICAgICAvKiBJRiBNQVRDSCAqLworICAgICAgICB4ID0gY21mbGQoIlN0cmluZyBvciB2YXJpYWJs ZSIsIiIsJnMseHhzdHJpbmcpOworICAgICAgICBpZiAoeCA9PSAtMykgeworICAgICAgICAgICAg ZXh0ZXJuIGludCBjbWZsZ3M7CisgICAgICAgICAgICBpZiAoY21mbGdzID09IDEpIHsKKyAgICAg ICAgICAgICAgICBwcmludGYoIj9TdHJpbmcgcmVxdWlyZWRcbiIpOworICAgICAgICAgICAgICAg IHJldHVybigtOSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoeCA8IDApCisg ICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICBja3N0cm5jcHkobGluZSxzLExJTkJVRlNJWik7 CisgICAgICAgIHMgPSBicnN0cmlwKGxpbmUpOworICAgICAgICBkZWJ1ZyhGMTEwLCJ4eGlmbWEg c3RyaW5nIixsaW5lLDApOworICAgICAgICB4ID0gY21mbGQoIlBhdHRlcm4iLCIiLCZwLHh4c3Ry aW5nKTsKKyAgICAgICAgaWYgKHggPT0gLTMpIHsKKyAgICAgICAgICAgIGV4dGVybiBpbnQgY21m bGdzOworICAgICAgICAgICAgaWYgKGNtZmxncyA9PSAxKSB7CisgICAgICAgICAgICAgICAgcHJp bnRmKCI/UGF0dGVybiByZXF1aXJlZFxuIik7CisgICAgICAgICAgICAgICAgcmV0dXJuKC05KTsK KyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICh4IDwgMCkKKyAgICAgICAgICByZXR1 cm4oeCk7CisgICAgICAgIGNrc3RybmNweSh0bXBidWYscCxUTVBCVUZTSVopOworICAgICAgICBw ID0gYnJzdHJpcCh0bXBidWYpOworICAgICAgICBkZWJ1ZyhGMTEwLCJ4eGlmbWEgcGF0dGVybiIs dG1wYnVmLDApOworICAgICAgICB6ID0gY2ttYXRjaChwLHMsaW5wY2FzW2NtZGx2bF0sMSk7Cisg ICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIFhYSUZGTDogeyAgICAgICAgICAgICAgICAgICAg LyogSUYgRkxBRyAqLworICAgICAgICAgIGV4dGVybiBpbnQgb29mbGFnOworICAgICAgICAgIHog PSBvb2ZsYWc7CisgICAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBjYXNlIFhYSUZBVjog eyAgICAgICAgICAgICAgICAgICAgLyogSUYgQVZBSUxBQkxFICovCisgICAgICAgICAgaWYgKCh4 ID0gY21rZXkoYXZhaWx0YWIsYXZhaWx0YWJuLCIiLCIiLHh4c3RyaW5nKSkgPCAwKQorICAgICAg ICAgICAgcmV0dXJuKHgpOworICAgICAgICAgIHN3aXRjaCAoeCkgeworICAgICAgICAgICAgY2Fz ZSBBVl9LUkI0OgorICAgICAgICAgICAgICB6ID0gY2tfa3JiNF9pc19pbnN0YWxsZWQoKTsKKyAg ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEFWX0tSQjU6CisgICAgICAgICAg ICAgIHogPSBja19rcmI1X2lzX2luc3RhbGxlZCgpOworICAgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgICAgIGNhc2UgQVZfU1JQOgorICAgICAgICAgICAgICB6ID0gY2tfc3JwX2lzX2luc3Rh bGxlZCgpOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQVZfU1NMOgor ICAgICAgICAgICAgICB6ID0gY2tfc3NsZWF5X2lzX2luc3RhbGxlZCgpOworICAgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQVZfTlRMTToKKyAgICAgICAgICAgICAgeiA9IGNr X250bG1faXNfaW5zdGFsbGVkKCk7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg Y2FzZSBBVl9DUllQVE86CisgICAgICAgICAgICAgIHogPSBja19jcnlwdF9pc19pbnN0YWxsZWQo KTsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEFWX1NTSDoKKyAgICAg ICAgICAgICAgeiA9IGNrX3NzaF9pc19pbnN0YWxsZWQoKTsKKyAgICAgICAgICAgICAgYnJlYWs7 CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICB6ID0gMDsKKyAgICAgICAgICB9 CisgICAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBjYXNlIFhYSUZBVDogICAgICAgICAg ICAgICAgICAgICAgLyogSUYgQVNLVElNRU9VVCAqLworICAgICAgICB6ID0gYXNrdGltZWRvdXQ7 CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIFhYSUZSRDogICAgICAgICAgICAgICAgICAg ICAgLyogSUYgUkVBREFCTEUgKi8KKyAgICAgIGNhc2UgWFhJRldSOiAgICAgICAgICAgICAgICAg ICAgICAvKiBJRiBXUklURUFCTEUgKi8KKyAgICAgICAgaWYgKCh4ID0gY21mbGQoIkZpbGUgb3Ig ZGlyZWN0b3J5IG5hbWUiLAorICAgICAgICAgICAgICAgICAgICAgICAiIiwKKyAgICAgICAgICAg ICAgICAgICAgICAgJnMsCisjaWZkZWYgT1MyCisgICAgICAgICAgICAgICAgICAgICAgIE5VTEwg ICAgICAgICAgICAgLyogVGhpcyBhbGxvd3MgXCdzIGluIGZpbGVuYW1lcyAqLworI2Vsc2UKKyAg ICAgICAgICAgICAgICAgICAgICAgeHhzdHJpbmcKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAg ICAgICAgICAgICAgICAgKSkgPCAwKSB7CisgICAgICAgICAgICBpZiAoeCA9PSAtMykgeworICAg ICAgICAgICAgICAgIGV4dGVybiBpbnQgY21mbGdzOworICAgICAgICAgICAgICAgIGlmIChjbWZs Z3MgPT0gMSkgeworICAgICAgICAgICAgICAgICAgICBwcmludGYoIj9GaWxlIG9yIGRpcmVjdG9y eSBuYW1lIHJlcXVpcmVkXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgcmV0dXJuKHgpOworICAgICAgICB9 CisgICAgICAgIHMgPSBicnN0cmlwKHMpOworLyoKKyAgemNoa1tpb10oKSBkbyBub3QgZG8gd2hh dCB3ZSB3YW50IGhlcmUgZm9yIGRpcmVjdG9yaWVzLCBzbyB3ZSBzZXQKKyAgYSBnbG9iYWwgZmxh ZyB0ZWxsaW5nIGl0IHRvIGJlaGF2ZSBzcGVjaWFsbHkgaW4gdGhpcyBjYXNlLiAgT3RoZXdpc2UK KyAgd2UnZCBoYXZlIHRvIGNoYW5nZSB0aGUgQVBJIGFuZCBjaGFuZ2UgYWxsIGNrP2Zpby5jIG1v ZHVsZXMgYWNjb3JkaW5nbHkuCisqLworICAgICAgICB5ID0gMDsgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIFRyeS1hZ2FpbiBjb250cm9sICovCisjaWZkZWYgT1MyCisgIGlmcmRhZ2FpbjoK KyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAgaWYgKGlmYyA9PSBYWElGUkQpIHsgICAgICAgICAg ICAvKiBJRiBSRUFEQUJMRSAqLworICAgICAgICAgICAgemNoa2lkID0gMTsKKyAgICAgICAgICAg IHogPSB6Y2hraShzKSA+IC0xOworICAgICAgICAgICAgemNoa2lkID0gMDsKKyAgICAgICAgfSBl bHNlIGlmIChpZmMgPT0gWFhJRldSKSB7ICAgICAvKiBJRiBXUklURUFCTEUgKi8KKyAgICAgICAg ICAgIHpjaGtvZCA9IDE7CisgICAgICAgICAgICB6ID0gemNoa28ocykgPiAtMTsKKyAgICAgICAg ICAgIHpjaGtvZCA9IDA7CisgICAgICAgIH0KKyNpZmRlZiBPUzIKKyAgICAgICAgaWYgKCF6ICYm ICF5KSB7ICAgICAgICAgICAgICAgICAvKiBGaWxlIG5vdCBmb3VuZC4gKi8KKyAgICAgICAgICAg IGludCB0OyAgICAgICAgICAgICAgICAgICAgICAvKiBUcnkgZXhwYW5kaW5nIHZhcmlhYmxlcyAq LworICAgICAgICAgICAgdCA9IExJTkJVRlNJWi0xOyAgICAgICAgICAgIC8qIGFuZCBsb29raW5n IGFnYWluLiAqLworICAgICAgICAgICAgbHAgPSBsaW5lOworICAgICAgICAgICAgenpzdHJpbmco cywmbHAsJnQpOworICAgICAgICAgICAgcyA9IGxpbmU7CisgICAgICAgICAgICB6ID0gemNoa28o cykgPiAtMTsKKyAgICAgICAgICAgIHkrKzsKKyAgICAgICAgICAgIGdvdG8gaWZyZGFnYWluOwor ICAgICAgICB9CisjZW5kaWYgLyogT1MyICovCisgICAgICAgIGlmYXJncyArPSAyOworICAgICAg ICBicmVhazsKKyAgICAgIGNhc2UgWFhJRlFVOiAgICAgICAgICAgICAgICAgICAgICAvKiBJRiBR VUlFVCAqLworICAgICAgICB6ID0gcXVpZXQgPyAxIDogMDsKKyAgICAgICAgZGVidWcoRjEwMSwi aWYgcXVpZXQiLCIiLHopOworICAgICAgICBpZmFyZ3MgKz0gMTsKKyAgICAgICAgYnJlYWs7CisK KyAgICAgIGNhc2UgWFhJRldJOiAgICAgICAgICAgICAgICAgICAgICAvKiBXSUxEICovCisgICAg ICAgIGlmICgoeCA9IGNtZmxkKCJGaWxlIHNwZWNpZmljYXRpb24iLCIiLCZzLHh4c3RyaW5nKSkg PCAwKSByZXR1cm4oeCk7CisgICAgICAgIHogPSBpc3dpbGQocyk7CisgICAgICAgIGJyZWFrOwor CisgICAgICBjYXNlIFhYSUZDSzogICAgICAgICAgICAgICAgICAgICAgLyogQy1LRVJNSVQgKi8K KyNpZmRlZiBPUzIKKyAgICAgICAgeiA9IDA7CisjZWxzZQorICAgICAgICB6ID0gMTsKKyNlbmRp ZiAvKiBPUzIgKi8KKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgWFhJRks5OiAgICAgICAg ICAgICAgICAgICAgICAvKiBLLTk1ICovCisjaWZkZWYgT1MyCisgICAgICAgIHogPSAxOworI2Vs c2UKKyAgICAgICAgeiA9IDA7CisjZW5kaWYgLyogT1MyICovCisgICAgICAgIGJyZWFrOworCisg ICAgICBjYXNlIFhYSUZHVTogICAgICAgICAgICAgICAgICAgICAgLyogR1VJICovCisjaWZkZWYg S1VJCisgICAgICAgIHogPSAxOworI2Vsc2UKKyAgICAgICAgeiA9IDA7CisjZW5kaWYgLyogS1VJ ICovCisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIFhYSUZNUzogICAgICAgICAgICAgICAg ICAgICAgLyogTVMtS0VSTUlUICovCisgICAgICAgIHogPSAwOworICAgICAgICBicmVhazsKKwor ICAgICAgY2FzZSBYWElGTE86ICAgICAgICAgICAgICAgICAgICAgIC8qIElGIExPQ0FMICovCisg ICAgICAgIHogPSBsb2NhbCA/IDEgOiAwOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBY WElGQ006IHsgICAgICAgICAgICAgICAgICAgIC8qIElGIENPTU1BTkQgKi8KKyAgICAgICAgICBl eHRlcm4gc3RydWN0IGtleXRhYiBjbWR0YWJbXTsKKyAgICAgICAgICBleHRlcm4gaW50IG5jbWQ7 CisgICAgICAgICAgaWYgKCh4ID0gY21mbGQoIldvcmQiLCIiLCZzLHh4c3RyaW5nKSkgPCAwKQor ICAgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICAgIHogPSBsb29rdXAoY21kdGFiLHMsbmNt ZCwmeSk7CisgICAgICAgICAgeiA9ICh6ID09IC0yIHx8IHogPiAtMSkgPyAxIDogMDsKKyAgICAg ICAgICBicmVhazsKKyAgICAgIH0KKyNpZmRlZiBDS0ZMT0FUCisgICAgICBjYXNlIFhYSUZGUDog ICAgICAgICAgICAgICAgICAgICAgLyogSUYgRkxPQVQgKi8KKyAgICAgICAgaWYgKCh4ID0gY21m bGQoIk51bWJlciIsIiIsJnMseHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgaWYgKHggIT0gLTMp ICAgICAgICAgICAgICAgICAgLyogZS5nLiBlbXB0eSB2YXJpYWJsZSAqLworICAgICAgICAgICAg cmV0dXJuKHgpOworICAgICAgICB6ID0gaXNmbG9hdChzLDApOworICAgICAgICBicmVhazsKKyNl bmRpZiAvKiBDS0ZMT0FUICovCisKKyAgICAgIGNhc2UgWFhJRktCOiAgICAgICAgICAgICAgICAg ICAgICAvKiBLQkhJVCAqLworICAgICAgICB6ID0gY29uY2hrKCk7CisgICAgICAgIGlmICh6IDwg MCkgeiA9IDA7CisgICAgICAgIGlmICh6ID4gMSkgeiA9IDE7CisgICAgICAgIGJyZWFrOworCisg ICAgICBjYXNlIFhYSUZLRzogeyAgICAgICAgICAgICAgICAgICAgLyogS0VSQkFORyAqLworICAg ICAgICAgIGV4dGVybiBpbnQgY2ZpbGVmOworI2lmZGVmIENPTU1FTlQKKyAgICAgICAgICB6ID0g KHhjbWRzcmMgPT0gMCkgPyAwIDogKGNmaWxlZiAmJiBjbWRsdmwgPT0gMSk7CisjZWxzZQorICAg ICAgICAgIHogPSAoeGNtZHNyYyA9PSAwKSA/IDAgOiAoY2ZpbGVmICYmIHRsZXZlbCA9PSAwKTsK KyNlbmRpZgkvKiBDT01NRU5UICovCisgICAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAg IGNhc2UgWFhJRkRCOiB7CQkJLyogSUYgREVCVUcgLSAyMDEwLzAzLzE2ICovCisgICAgICAgICAg ZXh0ZXJuIGludCBkZWJtc2c7CisgICAgICAgICAgeiA9IGRlYm1zZzsKKwkgIGJyZWFrOworICAg ICAgfQorCisgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2hvdWxk bid0IGhhcHBlbiAqLworICAgICAgICByZXR1cm4oLTIpOworICAgIH0gLyogZW5kIG9mIHN3aXRj aCAqLworCisgICAgaWYgKHopCisgICAgICAqYngrKyA9ICcxJzsKKyAgICBlbHNlCisgICAgICAq YngrKyA9ICcwJzsKKyAgICAqYnggPSBOVUw7CisgICAgaWYgKGJ4ID4gYm9vbHZhbCArIEJPT0xM RU4gLSAyKSB7CisgICAgICAgIHByaW50ZigiP0Jvb2xlYW4gZXhwcmVzc2lvbiB0b28gbG9uZyIp OworICAgICAgICByZXR1cm4oLTkpOworICAgIH0KKyAgICBlY291bnQrKzsgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBFeHByZXNzaW9uIGNvdW50ZXIgKi8KKyAgICBkZWJ1ZyhGMTAxLCJi b29sZXhwIHBhcmVucyIsIiIscGFyZW5zKTsKKyAgICBkZWJ1ZyhGMTAxLCJib29sZXhwIHBjb3Vu dCIsIiIscGNvdW50KTsKKyAgICBpZiAocGFyZW5zICYmIHBjb3VudCA+IDApCisgICAgICBnb3Rv IGlmYWdhaW47CisKKyAgaWZlbmQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBO byBtb3JlIC0gZG9uZSAqLworICAgICpieCA9IE5VTDsKKyAgICB6ID0gYXRvaShldmFseChib29s dmFsKSk7CisgICAgZGVidWcoRjExMSwiYm9vbGV4cCBib29sdmFsIixib29sdmFsLHopOworICAg IHJldHVybih6KTsKK30KKworLyogIEQgTyBJIEYgIC0tICBEbyB0aGUgSUYgY29tbWFuZCAgKi8K KworaW50Citkb2lmKGN4KSBpbnQgY3g7IHsKKyAgICBpbnQgeCwgeSwgejsgY2hhciAqcywgKnA7 CisgICAgY2hhciAqcTsKKyNpZmRlZiBPUzIKKyAgICBleHRlcm4gaW50IGtleW1hYzsKKyNlbmRp ZiAvKiBPUzIgKi8KKworICAgIGRlYnVnKEYxMDEsImRvaWYgY3giLCIiLGN4KTsKKworICAgIHog PSBib29sZXhwKGN4KTsgICAgICAgICAgICAgICAgICAgIC8qIEV2YWx1YXRlIHRoZSBjb25kaXRp b24ocykgKi8KKyAgICBkZWJ1ZyhGMDEwLCJkb2lmIGNtZGJ1ZiIsY21kYnVmLDApOworICAgIGRl YnVnKEYxMDEsImRvaWYgYm9vbGV4cCIsIiIseik7CisgICAgaWYgKHogPCAwKQorICAgICAgcmV0 dXJuKHopOworCisgICAgaWYgKGN4ID09IFhYSUYpIHsgICAgICAgICAgICAgICAgICAgLyogQWxs b3cgSUYgdG8gaGF2ZSBYSUYgc2VtYW50aWNzLiAqLworICAgICAgICBjaGFyICogcDsKKyAgICAg ICAgcCA9IGNtcGVlaygpOworICAgICAgICBpZiAoIXApIHAgPSAiIjsKKyAgICAgICAgd2hpbGUg KCpwKSB7CisgICAgICAgICAgICBpZiAoKnAgPT0gU1AgfHwgKnAgPT0gSFQpCisgICAgICAgICAg ICAgIHArKzsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg IH0KKyAgICAgICAgaWYgKCpwID09ICd7JykKKyAgICAgICAgICBjeCA9IFhYSUZYOworICAgIH0K KyAgICBzd2l0Y2ggKGN4KSB7ICAgICAgICAgICAgICAgICAgICAgICAvKiBTZXBhcmF0ZSBoYW5k bGluZyBmb3IgSUYgYW5kIFhJRiAqLworCisgICAgICBjYXNlIFhYQVNTRVI6ICAgICAgICAgICAg ICAgICAgICAgLyogQW5kIEFTU0VSVCAqLworICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDAp CisgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICByZXR1cm4oc3VjY2VzcyA9IHopOworCisg ICAgICBjYXNlIFhYSUY6ICAgICAgICAgICAgICAgICAgICAgICAgLyogVGhpcyBpcyBJRi4uLiAq LworICAgICAgICBpZmNtZFtjbWRsdmxdID0gMTsgICAgICAgICAgICAgIC8qIFdlIGp1c3QgY29t cGxldGVkIGFuIElGIGNvbW1hbmQgKi8KKyAgICAgICAgZGVidWcoRjEwMSwiZG9pZiBjb25kaXRp b24iLCIiLHopOworICAgICAgICBpZiAoeikgeyAgICAgICAgICAgICAgICAgICAgICAgIC8qIENv bmRpdGlvbiBpcyB0cnVlICovCisgICAgICAgICAgICBpZnRlc3RbY21kbHZsXSA9IDE7ICAgICAg ICAgLyogUmVtZW1iZXIgdGhhdCBJRiBzdWNjZWVkZWQgKi8KKyAgICAgICAgICAgIGlmIChtYWNs dmwgPiAtMSkgeyAgICAgICAgICAvKiBJbiBtYWNybywgKi8KKyAgICAgICAgICAgICAgICBwdXNo Y21kKE5VTEwpOyAgICAgICAgICAvKiBzYXZlIHJlc3Qgb2YgY29tbWFuZC4gKi8KKyAgICAgICAg ICAgIH0gZWxzZSBpZiAodGxldmVsID4gLTEpIHsgICAvKiBJbiB0YWtlIGZpbGUsICovCisgICAg ICAgICAgICAgICAgZGVidWcoRjEwMCwgImRvaWY6IHB1c2hpbmcgY29tbWFuZCIsICIiLCAwKTsK KyAgICAgICAgICAgICAgICBwdXNoY21kKE5VTEwpOyAgICAgICAgICAvKiBzYXZlIHJlc3Qgb2Yg Y29tbWFuZC4gKi8KKyAgICAgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAvKiBJ ZiBpbnRlcmFjdGl2ZSwgKi8KKyAgICAgICAgICAgICAgICBjbWluaShja3hlY2gpOyAgICAgICAg ICAvKiBqdXN0IHN0YXJ0IGEgbmV3IGNvbW1hbmQgKi8KKyAgICAgICAgICAgICAgICBwcmludGYo IlxuIik7ICAgICAgICAgICAvKiAobGlrZSBpbiBNUy1ET1MgS2VybWl0KSAqLworICAgICAgICAg ICAgICAgIGlmIChwZmxhZykgcHJvbXB0KHh4c3RyaW5nKTsKKyAgICAgICAgICAgIH0KKyAgICAg ICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBDb25kaXRpb24gaXMgZmFsc2Ug Ki8KKyAgICAgICAgICAgIGlmdGVzdFtjbWRsdmxdID0gMDsgICAgICAgICAvKiBSZW1lbWJlciBj b21tYW5kIGZhaWxlZC4gKi8KKyAgICAgICAgICAgIGlmICgoeSA9IGNtdHh0KCJjb21tYW5kIHRv IGJlIGlnbm9yZWQiLCIiLCZzLE5VTEwpKSA8IDApCisgICAgICAgICAgICAgIHJldHVybih5KTsg ICAgICAgICAgICAgICAgLyogR29iYmxlIHVwIHJlc3Qgb2YgbGluZSAqLworICAgICAgICB9Cisg ICAgICAgIHJldHVybigwKTsKKworICAgICAgY2FzZSBYWElGWDogeyAgICAgICAgICAgICAgICAg ICAgIC8qIFRoaXMgaXMgWElGIChFeHRlbmRlZCBJRikgKi8KKyAgICAgICAgICBjaGFyICpwOwor ICAgICAgICAgIGNoYXIgZVs1XTsKKyAgICAgICAgICBpbnQgaTsKKyAgICAgICAgICBpZiAoKHkg PSBjbXR4dCgiT2JqZWN0IGNvbW1hbmQiLCIiLCZzLE5VTEwpKSA8IDApCisgICAgICAgICAgICBy ZXR1cm4oeSk7ICAgICAgICAgICAgICAgICAgLyogR2V0IG9iamVjdCBjb21tYW5kLiAqLworICAg ICAgICAgIHAgPSBzOworICAgICAgICAgIGxwID0gbGluZTsKKyAgICAgICAgICBkZWJ1ZyhGMTEw LCJkb2lmIFRIRU4gcGFydCIscywtNTQpOworICAgICAgICAgIGlmIChsaXRjbWQoJnAsJmxwLExJ TkJVRlNJWiAtIDEpIDwgMCkgeyAvKiBRdW90ZSBUSEVOLXBhcnQgKi8KKyAgICAgICAgICAgICAg cmV0dXJuKC0yKTsKKyAgICAgICAgICB9CisgICAgICAgICAgZGVidWcoRjExMSwiZG9pZiBUSEVO IHBhcnQgMiIsbGluZSx6KTsKKworICAgICAgICAgIHdoaWxlICgqcCA9PSBTUCkgcCsrOyAgICAg ICAgIC8qIFN0cmlwIHRyYWlsaW5nIHNwYWNlcyAqLworICAgICAgICAgIGlmY21kW2NtZGx2bF0g PSAwOyAgICAgICAgICAgIC8qIEFzc3VtZSBFTFNFIHBhcnQgaW4gc2FtZSBsaW5lICovCisgICAg ICAgICAgaWZ0ZXN0W2NtZGx2bF0gPSB6ID8gMSA6IDA7CisgICAgICAgICAgaWYgKCpwKSB7ICAg ICAgICAgICAgICAgICAgICAgLyogQXQgZW5kPyAqLworICAgICAgICAgICAgICBpZiAoIXopIHsg ICAgICAgICAgICAgICAgIC8qIE5vLCB1c2UgRUxTRS1wYXJ0LCBpZiBhbnkgKi8KKyAgICAgICAg ICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCA0OyBpKyspIGVbaV0gPSAqcCsrOworICAgICAgICAg ICAgICAgICAgaWYgKGNrc3RyY21wKGUsImVsc2UiLDQsMCkpIC8qIFNlZSBpZiB3ZSBoYXZlIGFu IEVMU0UgKi8KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC0yKTsgICAgICAgICAvKiBTb21l dGhpbmcgZWxzZSAtIGVycm9yLiAqLworICAgICAgICAgICAgICAgICAgZGVidWcoRjAxMCwiZG9p ZiBFTFNFIGxpbmUgMSIscCwwKTsKKyAgICAgICAgICAgICAgICAgIHdoaWxlICgqcCA9PSBTUCkg cCsrOyAvKiBTa2lwIHNwYWNlcyAqLworICAgICAgICAgICAgICAgICAgaWYgKCpwICE9ICd7Jykg eyAgICAgIC8qIEJyYWNlIEVMU0UgcGFydCBpZiBuZWNlc3NhcnkgKi8KKyAgICAgICAgICAgICAg ICAgICAgICBja21ha21zZyh0bXBidWYsVE1QQlVGU0laLCJ7IixwLCIgfSIsTlVMTCk7CisgICAg ICAgICAgICAgICAgICAgICAgcCA9IHRtcGJ1ZjsKKyAgICAgICAgICAgICAgICAgICAgICBkZWJ1 ZyhGMDEwLCJkb2lmIEVMU0UgbGluZSAyIixwLDApOworICAgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICAgICAgbHAgPSBsaW5lOyAgICAgICAgICAgIC8qIFdyaXRlIG92ZXIgVEhFTiBw YXJ0Li4uICovCisgICAgICAgICAgICAgICAgICAqbHAgPSBOVUw7ICAgICAgICAgICAgLyogd2l0 aCBFTFNFIHBhcnQuICovCisgICAgICAgICAgICAgICAgICBpZiAobGl0Y21kKCZwLCZscCxMSU5C VUZTSVogLSAyKSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTIpOworICAg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgd2hpbGUgKCpwID09IFNQKSBwKys7 IC8qIFN0cmlwIHRyYWlsaW5nIHNwYWNlcyAqLworICAgICAgICAgICAgICAgICAgaWYgKCpwKSBy ZXR1cm4oLTIpOyAgIC8qIFNob3VsZCBiZSBub3RoaW5nIGhlcmUuICovCisgICAgICAgICAgICAg ICAgICBkZWJ1ZyhGMDEwLCJkb2lmIEVMU0UgbGluZSAzIixsaW5lLDApOworICAgICAgICAgICAg ICB9CisgICAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgLyogQXQgZW5kLCB0 cmVhdCBsaWtlIGFuIElGIGNvbW1hbmQgKi8KKyAgICAgICAgICAgICAgaWYgKCF6KSBsaW5lWzBd ID0gTlVMOyAgICAvKiBDb25kaXRpb24gbm90IHRydWUgYW5kIG5vIEVMU0UgKi8KKyAgICAgICAg ICAgICAgaWZjbWRbY21kbHZsXSA9IDE7ICAgICAgICAvKiBBbGxvdyBFTFNFIG9uIG5leHQgbGlu ZSAqLworICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJJRiBjb25kaXRpb24iLCIiLHopOworICAg ICAgICAgIH0KKyAgICAgICAgICBpZiAobGluZVswXSkgeworICAgICAgICAgICAgICB4ID0gbWxv b2sobWFjdGFiLCJfeGlmIixubWFjKTsgLyogR2V0IGluZGV4IG9mICJfeGlmIiBtYWNyby4gKi8K KyAgICAgICAgICAgICAgaWYgKHggPCAwKSB7ICAgICAgICAgICAgICAgICAgICAgIC8qIE5vdCB0 aGVyZT8gKi8KKyAgICAgICAgICAgICAgICAgIGFkZG1tYWMoIl94aWYiLHhpZl9kZWYpOyAgICAg IC8qIFB1dCBpdCBiYWNrLiAqLworICAgICAgICAgICAgICAgICAgaWYgKG1sb29rKG1hY3RhYiwi X3hpZiIsbm1hYykgPCAwKSB7IC8qIExvb2sgaXQgdXAgYWdhaW4uICovCisgICAgICAgICAgICAg ICAgICAgICAgcHJpbnRmKCI/WElGIG1hY3JvIGdvbmUhXG4iKTsKKyAgICAgICAgICAgICAgICAg ICAgICByZXR1cm4oc3VjY2VzcyA9IDApOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgIGRvZG8oeCxsaW5lLGNtZHN0a1tjbWRsdmxdLmNjZmxncyB8 IENGX0lNQUMpOworICAgICAgICAgIH0KKyAgICAgICAgICByZXR1cm4oMCk7CisgICAgICB9Cisg ICAgICBjYXNlIFhYV0hJOiB7ICAgICAgICAgICAgICAgICAgICAgLyogV0hJTEUgQ29tbWFuZCAq LworICAgICAgICAgIHAgPSBjbWRidWY7ICAgICAgICAgICAgICAgICAgIC8qIENhcHR1cmUgSUYg Y29uZGl0aW9uICovCisgICAgICAgICAgaWZjb25kWzBdID0gTlVMOyAgICAgICAgICAgICAgLyog ZnJvbSBjb21tYW5kIGJ1ZmZlciAqLworICAgICAgICAgIHdoaWxlICgqcCA9PSBTUCkgcCsrOwor ICAgICAgICAgIHdoaWxlICgqcCAhPSBTUCkgcCsrOworICAgICAgICAgIGlmY3AgPSBpZmNvbmQ7 CisgICAgICAgICAgaWZjcCArPSBja3N0cm5jcHkoaWZjcCwieyBcXGZsaXQoaWYgKCBub3QgIixJ RkNPTkRMRU4pOworI2lmZGVmIENPTU1FTlQKKy8qCisgIFRoaXMgZG9lc24ndCB3b3JrIGJlY2F1 c2UgaXQgYnJlYWtzIG9uIHRoZSBmaXJzdCBsZWZ0IGJyYWNlLCB3aGljaCBkb2VzCisgIG5vdCBu ZWNlc3NhcmlseSBzdGFydCB0aGUgY29tbWFuZCBsaXN0LCBlLmcuICJ3aGlsZSBlcXVhbCBcJWEg e1wzNX0iLgorKi8KKyAgICAgICAgICB3aGlsZSAoKnAgIT0gJ3snICYmICpwICE9IE5VTCkgKmlm Y3ArKyA9ICpwKys7CisgICAgICAgICAgcCA9ICIgKSBnb3RvIF8uLmJvdCkgfSAiOworICAgICAg ICAgIHdoaWxlICgqaWZjcCsrID0gKnArKykgOworI2Vsc2UKKy8qCisgIFRoZSBjb21tYW5kIHBh cnNlciBzZXRzIGNtYnB0ciB0byB0aGUgc3BvdCB3aGVyZSBpdCBsZWZ0IG9mZiBwYXJzaW5nIGlu CisgIHRoZSBjb21tYW5kIGJ1ZmZlci4KKyovCisgICAgICAgICAgeworICAgICAgICAgICAgICBl eHRlcm4gY2hhciAqIGNtYnB0cjsKKyAgICAgICAgICAgICAgaWYgKGNtYnB0cikgeworICAgICAg ICAgICAgICAgICAgd2hpbGUgKHAgPCBjbWJwdHIgJiYgKnAgIT0gTlVMKQorICAgICAgICAgICAg ICAgICAgICAqaWZjcCsrID0gKnArKzsKKyAgICAgICAgICAgICAgICAgIHAgPSAiICkgZ290byBf Li5ib3QpIH0gIjsKKyAgICAgICAgICAgICAgICAgIHdoaWxlICgoKmlmY3ArKyA9ICpwKyspKSA7 CisgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICBwcmludGYoIj9JbnRl cm5hbCBlcnJvciBwYXJzaW5nIFdISUxFIGNvbmRpdGlvblxuIik7CisgICAgICAgICAgICAgICAg ICByZXR1cm4oLTkpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgfQorI2VuZGlmIC8qIENP TU1FTlQgKi8KKworICAgICAgICAgIGRlYnVnKEYxMTAsIldISUxFIGNtZCIsaWZjb25kLDApOwor CisgICAgICAgICAgaWYgKCh5ID0gY210eHQoIk9iamVjdCBjb21tYW5kIiwiIiwmcyxOVUxMKSkg PCAwKQorICAgICAgICAgICAgcmV0dXJuKHkpOyAgICAgICAgICAgICAgICAgIC8qIEdldCBvYmpl Y3QgY29tbWFuZC4gKi8KKyAgICAgICAgICBwID0gczsKKyAgICAgICAgICBscCA9IGxpbmU7Cisg ICAgICAgICAgaWYgKGxpdGNtZCgmcCwmbHAsTElOQlVGU0laIC0gMikgPCAwKSB7IC8qIFF1b3Rl IG9iamVjdCBjb21tYW5kICovCisgICAgICAgICAgICAgIHJldHVybigtMik7CisgICAgICAgICAg fQorICAgICAgICAgIGRlYnVnKEYxMDEsIldISUxFIGJvZHkiLGxpbmUsLTU0KTsKKyAgICAgICAg ICBpZiAobGluZVswXSkgeworICAgICAgICAgICAgICBjaGFyICpwOworICAgICAgICAgICAgICB4 ID0gbWxvb2sobWFjdGFiLCJfd2hpbGUiLG5tYWMpOyAvKiBpbmRleCBvZiAiX3doaWxlIiBtYWNy by4gKi8KKyAgICAgICAgICAgICAgaWYgKHggPCAwKSB7ICAgICAgICAgICAgICAvKiBOb3QgdGhl cmU/ICovCisgICAgICAgICAgICAgICAgICBhZGRtbWFjKCJfd2hpbGUiLHdoaWxfZGVmKTsgLyog UHV0IGl0IGJhY2suICovCisgICAgICAgICAgICAgICAgICBpZiAobWxvb2sobWFjdGFiLCJfd2hp bGUiLG5tYWMpIDwgMCkgeyAvKiBMb29rIGl0IHVwIGFnYWluICovCisgICAgICAgICAgICAgICAg ICAgICAgcHJpbnRmKCI/V0hJTEUgbWFjcm8gZGVmaW5pdGlvbiBnb25lIVxuIik7CisgICAgICAg ICAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKyAgICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBwID0gbWFsbG9jKChpbnQpc3RybGVuKGlm Y29uZCkgKyAoaW50KXN0cmxlbihsaW5lKSArIDIpOworICAgICAgICAgICAgICBpZiAocCkgewor ICAgICAgICAgICAgICAgICAgc3RyY3B5KHAsaWZjb25kKTsgICAgIC8qIHNhZmUgKHByZWNoZWNr ZWQpICovCisgICAgICAgICAgICAgICAgICBzdHJjYXQocCxsaW5lKTsgICAgICAgLyogc2FmZSAo cHJlY2hlY2tlZCkgKi8KKyAgICAgICAgICAgICAgICAgIGRlYnVnKEYwMTAsIldISUxFIGRvZG8i LHAsMCk7CisgICAgICAgICAgICAgICAgICBkb2RvKHgscCxjbWRzdGtbY21kbHZsXS5jY2ZsZ3Mg fCBDRl9JTUFDKTsKKyAgICAgICAgICAgICAgICAgIGZyZWUocCk7CisgICAgICAgICAgICAgICAg ICBwID0gTlVMTDsKKyAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgIHBy aW50ZigiP0Nhbid0IGFsbG9jYXRlIHN0b3JhZ2UgZm9yIFdISUxFIGNvbW1hbmQiKTsKKyAgICAg ICAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7CisgICAgICAgICAgICAgIH0KKyAgICAg ICAgICB9CisgICAgICAgICAgcmV0dXJuKDApOworICAgICAgfQorICAgICAgZGVmYXVsdDoKKyAg ICAgICAgcmV0dXJuKC0yKTsKKyAgICB9Cit9CisjZW5kaWYgLyogTk9TUEwgKi8KKworLyogU2V0 IHVwIGEgVEFLRSBjb21tYW5kIGZpbGUgKi8KKworaW50Citkb3Rha2UocykgY2hhciAqczsgewor I2lmbmRlZiBOT1NQTAorICAgIGV4dGVybiBpbnQgdHJhX2NtZDsKKyNlbmRpZiAvKiBOT1NQTCAq LworI2lmbmRlZiBOT0xPQ0FMCisjaWZkZWYgT1MyCisgICAgZXh0ZXJuIGludCB0ZXJtX2lvOwor ICAgIGludCB0ZXJtX2lvX3NhdiA9IHRlcm1faW87CisjZW5kaWYgLyogT1MyICovCisjZW5kaWYg LyogTk9MT0NBTCAqLworICAgIGludCBzbGVuOworCisgICAgZGVidWcoRjExMCwiZG90YWtlIixz LDApOworICAgIGlmICghcykgcyA9ICIiOworICAgIGlmICghKnMpIHJldHVybihzdWNjZXNzID0g MCk7CisgICAgc2xlbiA9IHN0cmxlbihzKTsKKyAgICBkZWJ1ZyhGMTAxLCJkb3Rha2UgbGVuIiwi IixzbGVuKTsKKworICAgIGlmICgodGZpbGVbKyt0bGV2ZWxdID0gZm9wZW4ocywiciIpKSA9PSBO VUxMKSB7CisgICAgICAgIHBlcnJvcihzKTsKKyAgICAgICAgZGVidWcoRjExMCwiZG90YWtlIGZh aWwiLHMsMCk7CisgICAgICAgIHRsZXZlbC0tOworICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDAp OworICAgIH0gZWxzZSB7CisgICAgICAgIHRmbGluZVt0bGV2ZWxdID0gMDsgICAgICAgICAgICAg LyogTGluZSBjb3VudGVyICovCisjaWZkZWYgVk1TCisgICAgICAgIGNvbnJlcygpOyAgICAgICAg ICAgICAgICAgICAgICAgLyogU28gQ3RybC1DIHdpbGwgd29yayAqLworI2VuZGlmIC8qIFZNUyAq LworI2lmbmRlZiBOT0xPQ0FMCisjaWZkZWYgT1MyCisgICAgICAgIHRlcm1faW8gPSAwOyAgICAg ICAgICAgICAgICAgICAgLyogRGlzYWJsZSBUZXJtaW5hbCBFbXVsYXRvciBJL08gKi8KKyNlbmRp ZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBOT0xPQ0FMICovCisjaWZuZGVmIE5PU1BMCisgICAgICAg IGNtZGx2bCsrOyAgICAgICAgICAgICAgICAgICAgICAgLyogRW50ZXJpbmcgYSBuZXcgY29tbWFu ZCBsZXZlbCAqLworICAgICAgICBkZWJ1ZyhGMTExLCJDTUQgK0YiLHMsY21kbHZsKTsKKyAgICAg ICAgZGVidWcoRjEwMSwiZG90YWtlIGNtZGx2bCIsIiIsY21kbHZsKTsKKyAgICAgICAgZGVidWco RjEwMSwiZG90YWtlIHRsZXZlbCIsIiIsdGxldmVsKTsKKyAgICAgICAgaWYgKGNtZGx2bCA+IENN RFNUS0wpIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMDAsImRvdGFrZSBzdGFjayBvdmVyZmxvdyIs IiIsMCk7CisgICAgICAgICAgICBjbWRsdmwtLTsKKyAgICAgICAgICAgIGRlYnVnKEYxMTEsIkNN RCotRiIscyxjbWRsdmwpOworICAgICAgICAgICAgZmNsb3NlKHRmaWxlW3RsZXZlbC0tXSk7Cisg ICAgICAgICAgICBwcmludGYoIj9UQUtFIGZpbGVzIGFuZC9vciBETyBjb21tYW5kcyBuZXN0ZWQg dG9vIGRlZXBseVxuIik7CisgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOworICAgICAg ICB9CisgICAgICAgIGlmICh0Zm5hbVt0bGV2ZWxdKSB7ICAgICAgICAgICAgLyogQ29weSB0aGUg ZmlsZW5hbWUgKi8KKyAgICAgICAgICAgIGZyZWUodGZuYW1bdGxldmVsXSk7CisgICAgICAgICAg ICB0Zm5hbVt0bGV2ZWxdID0gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBpZiAoKHRmbmFtW3Rs ZXZlbF0gPSBtYWxsb2Moc3RybGVuKHMpICsgMSkpKSB7CisgICAgICAgICAgICBzdHJjcHkodGZu YW1bdGxldmVsXSxzKTsgICAgLyogc2FmZSAqLworICAgICAgICB9IGVsc2UgeworICAgICAgICAg ICAgcHJpbnRmKCI/TWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZVxuIik7CisgICAgICAgICAgICBy ZXR1cm4oc3VjY2VzcyA9IDApOworICAgICAgICB9CisgICAgICAgIGlmY21kW2NtZGx2bF0gPSAw OyAgICAgICAgICAgICAgLyogU2V0IHZhcmlhYmxlcyBmb3IgdGhpcyBjbWQgZmlsZSAqLworICAg ICAgICBpZnRlc3RbY21kbHZsXSA9IDA7CisgICAgICAgIGNvdW50W2NtZGx2bF0gID0gY291bnRb Y21kbHZsLTFdOyAgLyogSW5oZXJpdCB0aGlzICovCisgICAgICAgIGludGltZVtjbWRsdmxdID0g aW50aW1lW2NtZGx2bC0xXTsgLyogSW5oZXJpdCB0aGlzICovCisgICAgICAgIGlucGNhc1tjbWRs dmxdID0gaW5wY2FzW2NtZGx2bC0xXTsgLyogSW5oZXJpdCB0aGlzICovCisgICAgICAgIHRha2Vy cltjbWRsdmxdID0gdGFrZXJyW2NtZGx2bC0xXTsgLyogSW5oZXJpdCB0aGlzICovCisgICAgICAg IG1lcnJvcltjbWRsdmxdID0gbWVycm9yW2NtZGx2bC0xXTsgLyogSW5oZXJpdCB0aGlzICovCisg ICAgICAgIHhxdWlldFtjbWRsdmxdID0gcXVpZXQ7CisgICAgICAgIHh2YXJldltjbWRsdmxdID0g dmFyZXZhbDsKKyAgICAgICAgeGNtZHNyYyA9IENNRF9URjsKKyAgICAgICAgY21kc3RrW2NtZGx2 bF0uc3JjID0gQ01EX1RGOyAgICAvKiBTYXkgd2UncmUgaW4gYSBUQUtFIGZpbGUgKi8KKyAgICAg ICAgY21kc3RrW2NtZGx2bF0ubHZsID0gdGxldmVsOyAgICAvKiBuZXN0ZWQgYXQgdGhpcyBsZXZl bCAqLworICAgICAgICBjbWRzdGtbY21kbHZsXS5jY2ZsZ3MgPSBjbWRzdGtbY21kbHZsLTFdLmNj ZmxnczsKKyNlbHNlCisgICAgICAgIHRha2Vyclt0bGV2ZWxdID0gdGFrZXJyW3RsZXZlbC0xXTsg LyogSW5oZXJpdCB0aGlzICovCisjZW5kaWYgLyogTk9TUEwgKi8KKyAgICB9CisjaWZuZGVmIE5P U1BMCisgICAgaWYgKHRyYV9jbWQpCisgICAgICBwcmludGYoIlslZF0gK0Y6IFwiJXNcIlxuIixj bWRsdmwscyk7CisjZW5kaWYgLyogTk9TUEwgKi8KKyNpZm5kZWYgTk9MT0NBTAorI2lmZGVmIE9T MgorICAgIHRlcm1faW8gPSB0ZXJtX2lvX3NhdjsKKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAv KiBOT0xPQ0FMICovCisgICAgcmV0dXJuKDEpOworfQorI2VuZGlmIC8qIE5PSUNQICovCgpkaWZm IC0tZ2l0IGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3V1czcuYyBi L2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1dXM3LmMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU3NGFiNgotLS0gL2Rldi9udWxsCisrKyBiL2Nr ZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1dXM3LmMKQEAgLTAsMCArMSwx NTMyMyBAQAorI2luY2x1ZGUgImNrY3N5bS5oIgorCisvKiAgQyBLIFUgVSBTIDcgLS0gICJVc2Vy IEludGVyZmFjZSIgZm9yIEMtS2VybWl0LCBwYXJ0IDcgICovCisKKy8qCisgIEF1dGhvcnM6Cisg ICAgRnJhbmsgZGEgQ3J1eiA8ZmRjQGNvbHVtYmlhLmVkdT4sCisgICAgICBUaGUgS2VybWl0IFBy b2plY3QsIENvbHVtYmlhIFVuaXZlcnNpdHksIE5ldyBZb3JrIENpdHkKKyAgICBKZWZmcmV5IEUg QWx0bWFuIDxqYWx0bWFuQHNlY3VyZS1lbmRwb2ludHMuY29tPgorICAgICAgU2VjdXJlIEVuZHBv aW50cyBJbmMuLCBOZXcgWW9yayBDaXR5CisKKyAgQ29weXJpZ2h0IChDKSAxOTg1LCAyMDExLAor ICAgIFRydXN0ZWVzIG9mIENvbHVtYmlhIFVuaXZlcnNpdHkgaW4gdGhlIENpdHkgb2YgTmV3IFlv cmsuCisgICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFNlZSB0aGUgQy1LZXJtaXQgQ09QWUlORy5U WFQgZmlsZSBvciB0aGUKKyAgICBjb3B5cmlnaHQgdGV4dCBpbiB0aGUgY2tjbWFpLmMgbW9kdWxl IGZvciBkaXNjbGFpbWVyIGFuZCBwZXJtaXNzaW9ucy4KKyovCisKKy8qCisgIFRoaXMgZmlsZSBj cmVhdGVkIGZyb20gcGFydHMgb2YgY2t1dXMzLmMsIHdoaWNoIGJlY2FtZSB0b28gYmlnIGZvcgor ICBNYXJrIFdpbGxpYW1zIENvaGVyZW50IGNvbXBpbGVyIHRvIGhhbmRsZS4KKyovCisKKy8qCisg IERlZmluaXRpb25zIGhlcmUgc3VwZXJzZWRlIHRob3NlIGZyb20gc3lzdGVtIGluY2x1ZGUgZmls ZXMuCisqLworI2luY2x1ZGUgImNrY2RlYi5oIiAgICAgICAgICAgICAgICAgICAgIC8qIERlYnVn Z2luZyAmIGNvbXBpbGVyIHRoaW5ncyAqLworI2luY2x1ZGUgImNrY2FzYy5oIiAgICAgICAgICAg ICAgICAgICAgIC8qIEFTQ0lJIGNoYXJhY3RlciBzeW1ib2xzICovCisjaW5jbHVkZSAiY2tja2Vy LmgiICAgICAgICAgICAgICAgICAgICAgLyogS2VybWl0IGFwcGxpY2F0aW9uIGRlZmluaXRpb25z ICovCisjaW5jbHVkZSAiY2tjeGxhLmgiICAgICAgICAgICAgICAgICAgICAgLyogQ2hhcmFjdGVy IHNldCB0cmFuc2xhdGlvbiAqLworI2luY2x1ZGUgImNrY25ldC5oIiAgICAgICAgICAgICAgICAg ICAgIC8qIE5ldHdvcmsgc3ltYm9scyAqLworI2luY2x1ZGUgImNrdXVzci5oIiAgICAgICAgICAg ICAgICAgICAgIC8qIFVzZXIgaW50ZXJmYWNlIHN5bWJvbHMgKi8KKyNpbmNsdWRlICJja3VjbWQu aCIKKyNpbmNsdWRlICJja2NsaWIuaCIKKworI2lmZGVmIFZNUworI2lmbmRlZiBUQ1BTT0NLRVQK KyNpbmNsdWRlIDxlcnJuby5oPgorI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLworI2VuZGlmIC8qIFZN UyAqLworCisjaWZkZWYgT1MyCisjaWZuZGVmIE5UCisjZGVmaW5lIElOQ0xfTk9QTQorI2RlZmlu ZSBJTkNMX1ZJTyAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5lZWRlZCBmb3IgY2tvY29uLmgg Ki8KKyNkZWZpbmUgSU5DTF9ET1NNT0RVTEVNR1IKKyNpbmNsdWRlIDxvczIuaD4KKyN1bmRlZiBD T01NRU5UCisjZWxzZSAvKiBOVCAqLworI2RlZmluZSBBUElSRVQgVUxPTkcKKyNpbmNsdWRlIDx3 aW5kb3dzLmg+CisjaW5jbHVkZSA8dGFwaS5oPgorI2luY2x1ZGUgImNrbndpbi5oIgorI2luY2x1 ZGUgImNrbnRhcC5oIgorI2VuZGlmIC8qIE5UICovCisjaW5jbHVkZSAiY2tvd2luLmgiCisjaW5j bHVkZSAiY2tvY29uLmgiCisjaW5jbHVkZSAiY2tvZGlyLmgiCisjaWZkZWYgT1MyTU9VU0UKKyNp bmNsdWRlICJja29rZXkuaCIKKyNlbmRpZiAvKiBPUzJNT1VTRSAqLworI2lmZGVmIEtVSQorI2lu Y2x1ZGUgImlrdWkuaCIKKyNlbmRpZiAvKiBLVUkgKi8KKyNpZmRlZiBwdXRjaGFyCisjdW5kZWYg cHV0Y2hhcgorI2VuZGlmIC8qIHB1dGNoYXIgKi8KKyNkZWZpbmUgcHV0Y2hhcih4KSBjb25vYyh4 KQorZXh0ZXJuIGludCBtc2trZXlzOworZXh0ZXJuIGludCBtc2tyZW5hbWU7CisjZW5kaWYgLyog T1MyICovCisKKyNpZmRlZiBDS19BVVRIRU5USUNBVElPTgorI2luY2x1ZGUgImNrdWF0aC5oIgor I2VuZGlmIC8qIENLX0FVVEhFTlRJQ0FUSU9OICovCisjaWZkZWYgQ0tfU1NMCisjaW5jbHVkZSAi Y2tfc3NsLmgiCisjZW5kaWYgLyogQ0tfU1NMICovCisjaWZkZWYgU1NIQlVJTFRJTgorI2luY2x1 ZGUgImNrb3NzaC5oIgorI2VuZGlmIC8qIFNTSEJVSUxUSU4gKi8KKyNpZmRlZiBTVFJBVFVTICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBTdHJhdHVzIENvbXB1dGVyLCBJbmMuICBWT1MgKi8K KyNpZmRlZiBwdXRjaGFyCisjdW5kZWYgcHV0Y2hhcgorI2VuZGlmIC8qIHB1dGNoYXIgKi8KKyNk ZWZpbmUgcHV0Y2hhcih4KSBjb25vYyh4KQorI2lmZGVmIGdldGNoYXIKKyN1bmRlZiBnZXRjaGFy CisjZW5kaWYgLyogZ2V0Y2hhciAqLworI2RlZmluZSBnZXRjaGFyKHgpIGNvbmluYygwKQorI2Vu ZGlmIC8qIFNUUkFUVVMgKi8KKworY2hhciAqIHNsbXNnID0gTlVMTDsKKworc3RhdGljIGludCB4 LCB5ID0gMCwgejsKK3N0YXRpYyBjaGFyICpzOworCitleHRlcm4gQ0hBUiBmZW9sOworZXh0ZXJu IGludCBnX21hdGNoZG90LCBoaW50cywgeGNtZHNyYywgcmNkYWN0aXZlOworCitleHRlcm4gY2hh ciAqIGtfaW5mb19kaXI7CisKKyNpZmRlZiBDS19MT0dJTgorI2lmZGVmIENLX1BBTQoraW50IGdv dGVtcHR5cGFzc3dkID0gMDsgICAvKiBkaXN0aW5ndWlzaCBlbXB0eSBwYXNzd2QgZnJvbSBub25l IGdpdmVuICovCisjZW5kaWYgLyogQ0tfUEFNICovCisjZW5kaWYgLyogQ0tfTE9HSU4gKi8KKwor I2lmbmRlZiBOT1NQTAorZXh0ZXJuIGludCBubWFjOworZXh0ZXJuIHN0cnVjdCBtdGFiICptYWN0 YWI7CisjZW5kaWYgLyogTk9TUEwgKi8KKworI2lmbmRlZiBOT1hGRVIKKyNpZmRlZiBDS19TUEVF RAorZXh0ZXJuIHNob3J0IGN0bHBbXTsgICAgICAgICAgICAgICAgICAgIC8qIENvbnRyb2wtY2hh ciBwcmVmaXhpbmcgdGFibGUgKi8KKyNlbmRpZiAvKiBDS19TUEVFRCAqLworCisjaWZkZWYgUElQ RVNFTkQKK2V4dGVybiBjaGFyICogc25kZmlsdGVyLCAqIGdfc2ZpbHRlcjsKK2V4dGVybiBjaGFy ICogcmN2ZmlsdGVyLCAqIGdfcmZpbHRlcjsKKyNlbmRpZiAvKiBQSVBFU0VORCAqLworCitleHRl cm4gY2hhciAqIHNuZF9tb3ZlOworZXh0ZXJuIGNoYXIgKiBzbmRfcmVuYW1lOworZXh0ZXJuIGNo YXIgKiBnX3NuZF9tb3ZlOworZXh0ZXJuIGNoYXIgKiBnX3NuZF9yZW5hbWU7CitleHRlcm4gY2hh ciAqIHJjdl9tb3ZlOworZXh0ZXJuIGNoYXIgKiByY3ZfcmVuYW1lOworZXh0ZXJuIGNoYXIgKiBn X3Jjdl9tb3ZlOworZXh0ZXJuIGNoYXIgKiBnX3Jjdl9yZW5hbWU7CisKKyNpZmRlZiBQQVRURVJO UworZXh0ZXJuIGNoYXIgKmJpbnBhdHRlcm5zW10sICp0eHRwYXR0ZXJuc1tdOworZXh0ZXJuIGlu dCBwYXR0ZXJuczsKKyNlbmRpZiAvKiBQQVRURVJOUyAqLworCitleHRlcm4gY2hhciAqIHJlbWRl c3Q7CisjaWZkZWYgQ0tfVE1QRElSCitjaGFyICogZGxkaXIgPSBOVUxMOworI2VuZGlmIC8qIENL X1RNUERJUiAqLworCitleHRlcm4gc3RydWN0IGNrX3AgcHRhYltdOworCitleHRlcm4gaW50IHBy b3RvY29sLCByZW1maWxlLCByZW1waXBlLCByZW1hcHBkLCByZWxpYWJsZSwgeHJlbGlhYmxlLCBm bWFzaywKKyAgZm5jbnYsIGZyZWNsLCBtYXhycHMsIHdzbG90ciwgYmlnc2JzaXosIGJpZ3Jic2l6 LCB1cnBzaXosIHJwc2l6LCBzcHNpeiwKKyAgYmN0ciwgbnBhZCwgdGltZWYsIHRpbWludCwgc3Bz aXpyLCBzcHNpemYsIG1heHNwcywgc3BtYXgsIG5maWxzLCBkaXNwbGEsCisgIGF0Y2FwciwgcGt0 dGltLCBydGltbywgZm5jYWN0LCBteXBhZG4sIGZkaXNwbGEsIGZfc2F2ZSwgcGt0cGF1cywgc2V0 cmVsaWFibGUsCisgIGZucnBhdGgsIGZuc3BhdGgsIGF0ZW5jaSwgYXRlbmNvLCBhdGRhdGksIGF0 ZGF0bywgYXRsZW5pLCBhdGxlbm8sIGF0YmxraSwKKyAgYXRibGtvLCBhdHR5cGksIGF0dHlwbywg YXRzaWRpLCBhdHNpZG8sIGF0c3lzaSwgYXRzeXNvLCBhdGRpc2ksIGF0ZGlzbzsKKworZXh0ZXJu IGludCBzdGF0aGFjazsKKworZXh0ZXJuIGludCBhdGZybWksIGF0ZnJtbzsKKyNpZmRlZiBTVFJB VFVTCitleHRlcm4gaW50IGF0Y3JlaSwgYXRjcmVvLCBhdGFjdGksIGF0YWN0bzsKKyNlbmRpZiAv KiBTVFJBVFVTICovCisjaWZkZWYgQ0tfUEVSTVMKK2V4dGVybiBpbnQgYXRscHJpLCBhdGxwcm8s IGF0Z3ByaSwgYXRncHJvOworI2VuZGlmIC8qIENLX1BFUk1TICovCisKK2V4dGVybiBDSEFSCisg IHNzdGF0ZSwgZW9sLCBzZW9sLCBzdGNociwgbXlzdGNoLCBteXBhZGMsIHBhZGNoLCBjdGxxLCBt eWN0bHE7CisKKyNpZmRlZiBJS1NECitleHRlcm4gaW50IGluc2VydmVyOworI2lmZGVmIElLU0RD T05GCitleHRlcm4gaW50IGlrc2RjZjsKKyNlbmRpZiAvKiBJS1NEQ09ORiAqLworI2VuZGlmIC8q IElLU0QgKi8KKworZXh0ZXJuIGNoYXIgKmNtYXJnLCAqY21hcmcyOworCisjaWZuZGVmIE5PRlJJ TExTCitleHRlcm4gY2hhciBvcHRidWZbXTsgICAgICAgICAgICAgICAgICAgLyogQnVmZmVyIGZv ciBNQUlMIG9yIFBSSU5UIG9wdGlvbnMgKi8KK2V4dGVybiBpbnQgcnByaW50ZjsgICAgICAgICAg ICAgICAgICAgICAvKiBSRU1PVEUgUFJJTlQgZmxhZyAqLworI2VuZGlmIC8qIE5PRlJJTExTICov CisjZW5kaWYgLyogTk9YRkVSICovCisKKyNpZmRlZiBDS19UUklHR0VSCitleHRlcm4gY2hhciAq IHR0X3RyaWdnZXJbXTsKKyNlbmRpZiAvKiBDS19UUklHR0VSICovCisKK2V4dGVybiBpbnQgdGNz X3RyYW5zcDsKKyNpZmRlZiBQQ1RFUk0KK2V4dGVybiBpbnQgdHRfcGN0ZXJtOworI2VuZGlmIC8q IFBDVEVSTSAqLworI2lmZGVmIE5UCitleHRlcm4gaW50IHR0X3Z0bnQ7CisjZW5kaWYgLyogTlQg Ki8KKworI2lmZGVmIFNTSEJVSUxUSU4KK2ludCBzbF9zc2hfeGZ3ID0gMDsKK2ludCBzbF9zc2hf eGZ3X3NhdmVkID0gMDsKK2ludCBzbF9zc2hfdmVyID0gMDsKK2ludCBzbF9zc2hfdmVyX3NhdmVk ID0gMDsKKyNlbmRpZiAvKiBTU0hCVUlMVElOICovCisKKyNpZmRlZiBDS19BVVRIRU5USUNBVElP TgorZXh0ZXJuIGludCBhdXRoX3R5cGVfdXNlcltdOworaW50IHNsX2F1dGhfdHlwZV91c2VyW0FV VEhUWVBMU1RTWl0gPSB7QVVUSFRZUEVfTlVMTCwgQVVUSFRZUEVfTlVMTH07CitpbnQgc2xfYXV0 aF9zYXZlZCA9IDA7CitpbnQgc2xfdG9wdF9hX3N1ID0gMDsKK2ludCBzbF90b3B0X2Ffc19zYXZl ZCA9IDA7CitpbnQgc2xfdG9wdF9hX2NtID0gMDsKK2ludCBzbF90b3B0X2FfY19zYXZlZCA9IDA7 CisjZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJT04gKi8KKyNpZmRlZiBDS19FTkNSWVBUSU9OCitl eHRlcm4gaW50IGN4X3R5cGU7CitpbnQgc2xfY3hfdHlwZSA9IDA7CitpbnQgc2xfY3hfc2F2ZWQg PSAwOworaW50IHNsX3RvcHRfZV9zdSA9IDA7CitpbnQgc2xfdG9wdF9lX3NtID0gMDsKK2ludCBz bF90b3B0X2Vfc19zYXZlZCA9IDA7CitpbnQgc2xfdG9wdF9lX2N1ID0gMDsKK2ludCBzbF90b3B0 X2VfY20gPSAwOworaW50IHNsX3RvcHRfZV9jX3NhdmVkID0gMDsKKyNlbmRpZiAvKiBDS19FTkNS WVBUSU9OICovCitleHRlcm4gY2hhciB1aWRidWZbXTsKK3N0YXRpYyBpbnQgdWlkZmxhZyA9IDA7 CitjaGFyIHNsX3VpZGJ1ZltVSURCVUZMRU5dID0geyBOVUwsIE5VTCB9OworaW50ICBzbF91aWRf c2F2ZWQgPSAwOworI2lmZGVmIFROQ09ERQoraW50ICBzbF90bl93YWl0ID0gMDsKK2ludCAgc2xf dG5fc2F2ZWQgPSAwOworI2VuZGlmIC8qIFROQ09ERSAqLworCisjaWZkZWYgVE5DT0RFCitleHRl cm4gaW50IHRuX3dhaXRfZmxnOworI2VuZGlmIC8qIFROQ09ERSAqLworCitWT0lECitzbHJlc3Rv cigpIHsKKyNpZmRlZiBDS19BVVRIRU5USUNBVElPTgorICAgIGludCB4OworICAgIGlmIChzbF9h dXRoX3NhdmVkKSB7CisgICAgICAgIGZvciAoeCA9IDA7IHggPCBBVVRIVFlQTFNUU1o7IHgrKykK KyAgICAgICAgICBhdXRoX3R5cGVfdXNlclt4XSA9IHNsX2F1dGhfdHlwZV91c2VyW3hdOworICAg ICAgICBzbF9hdXRoX3NhdmVkID0gMDsKKyAgICB9CisgICAgaWYgKHNsX3RvcHRfYV9zX3NhdmVk KSB7CisgICAgICAgIFRFTE9QVF9ERUZfU19VX01PREUoVEVMT1BUX0FVVEhFTlRJQ0FUSU9OKSA9 IHNsX3RvcHRfYV9zdTsKKyAgICAgICAgc2xfdG9wdF9hX3Nfc2F2ZWQgPSAwOworICAgIH0KKyAg ICBpZiAoc2xfdG9wdF9hX2Nfc2F2ZWQpIHsKKyAgICAgICAgVEVMT1BUX0RFRl9DX01FX01PREUo VEVMT1BUX0FVVEhFTlRJQ0FUSU9OKSA9IHNsX3RvcHRfYV9jbTsKKyAgICAgICAgc2xfdG9wdF9h X2Nfc2F2ZWQgPSAwOworICAgIH0KKyNlbmRpZiAvKiBDS19BVVRIRU5USUNBVElPTiAqLworI2lm ZGVmIENLX0VOQ1JZUFRJT04KKyAgICBpZiAoc2xfY3hfc2F2ZWQpIHsKKyAgICAgICAgY3hfdHlw ZSA9IHNsX2N4X3R5cGU7CisgICAgICAgIHNsX2N4X3NhdmVkID0gMDsKKyAgICB9CisgICAgaWYg KHNsX3RvcHRfZV9zX3NhdmVkKSB7CisgICAgICAgIFRFTE9QVF9ERUZfU19VX01PREUoVEVMT1BU X0VOQ1JZUFRJT04pICA9IHNsX3RvcHRfZV9zdTsKKyAgICAgICAgVEVMT1BUX0RFRl9TX01FX01P REUoVEVMT1BUX0VOQ1JZUFRJT04pID0gc2xfdG9wdF9lX3NtOworICAgICAgICBzbF90b3B0X2Vf c19zYXZlZCA9IDA7CisgICAgfQorICAgIGlmIChzbF90b3B0X2VfY19zYXZlZCkgeworICAgICAg ICBURUxPUFRfREVGX0NfVV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSAgPSBzbF90b3B0X2VfY3U7 CisgICAgICAgIFRFTE9QVF9ERUZfQ19NRV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9IHNsX3Rv cHRfZV9jbTsKKyAgICAgICAgc2xfdG9wdF9lX2Nfc2F2ZWQgPSAwOworICAgIH0KKyNlbmRpZiAv KiBDS19FTkNSWVBUSU9OICovCisgICAgaWYgKHNsX3VpZF9zYXZlZCkgeworICAgICAgICBja3N0 cm5jcHkodWlkYnVmLHNsX3VpZGJ1ZixVSURCVUZMRU4pOworICAgICAgICBzbF91aWRfc2F2ZWQg PSAwOworICAgIH0KKyNpZmRlZiBUTkNPREUKKyAgICBpZiAoc2xfdG5fc2F2ZWQpIHsKKyAgICAg ICAgdG5fd2FpdF9mbGcgPSBzbF90bl93YWl0OworICAgICAgICBzbF90bl9zYXZlZCA9IDA7Cisg ICAgfQorI2VuZGlmIC8qIFROQ09ERSAqLworI2lmZGVmIFNTSEJVSUxUSU4KKyAgICBpZiAoc2xf c3NoX3hmd19zYXZlZCkgeworICAgICAgICBzc2hfeGZ3ID0gc2xfc3NoX3hmdzsKKyAgICAgICAg c2xfc3NoX3hmd19zYXZlZCA9IDA7CisgICAgfQorICAgIGlmIChzbF9zc2hfdmVyX3NhdmVkKSB7 CisgICAgICAgIHNzaF92ZXIgPSBzbF9zc2hfdmVyOworICAgICAgICBzbF9zc2hfdmVyX3NhdmVk ID0gMDsKKyAgICB9CisjZW5kaWYgLyogU1NIQlVJTFRJTiAqLworfQorCitpbnQgb2xkcGxleCA9 IC0xOyAgICAgICAgICAgICAgICAgICAgICAgLyogRHVwbGV4IGhvbGRlciBhcm91bmQgbmV0d29y ayAqLworCisjaWZuZGVmIE5PSUNQCisjaWZkZWYgTE9DVVMKK2V4dGVybiBpbnQgbG9jdXMsIGF1 dG9sb2N1czsKKyNlbmRpZiAvKiBMT0NVUyAqLworI2lmbmRlZiBOT0RJQUwKK2V4dGVybiBpbnQg ZGlhbHN0YTsKKyNlbmRpZiAvKiBOT0RJQUwgKi8KKworLyogTm90ZTogZ2NjIC1XYWxsIHdhbnRz IGJyYWNlcyBhcm91bmQgZWFjaCBrZXl3b3JkIHRhYmxlIGVudHJ5LiAqLworCitzdGF0aWMgc3Ry dWN0IGtleXRhYiBwc2x0YWJbXSA9IHsgICAgICAgLyogU0VUIExJTkUvUE9SVCBjb21tYW5kIG9w dGlvbnMgKi8KKyAgICB7ICIvY29ubmVjdCIsIFNMX0NOWCwgMCB9LAorI2lmZGVmIE9TMk9SVk1T CisgICAgeyAiL25vc2hhcmUiLCBTTF9OU0gsIDAgfSwKKyNlbmRpZiAvKiBPUzJPUlZNUyAqLwor ICAgIHsgIi9zZXJ2ZXIiLCAgU0xfU1JWLCAwIH0sCisjaWZkZWYgT1MyT1JWTVMKKyAgICB7ICIv c2hhcmUiLCAgIFNMX1NIUiwgMCB9LAorI2VuZGlmIC8qIE9TMk9SVk1TICovCisgICAgeyAiIiwg MCwgMCB9Cit9Oworc3RhdGljIGludCBucHNsdGFiID0gc2l6ZW9mKHBzbHRhYikvc2l6ZW9mKHN0 cnVjdCBrZXl0YWIpIC0gMTsKKworI2lmZGVmIE5FVENPTk4KK3N0YXRpYyBzdHJ1Y3Qga2V5dGFi IHNodGFiW10gPSB7ICAgICAgICAvKiBTRVQgSE9TVCBjb21tYW5kIG9wdGlvbnMgKi8KKyNpZmRl ZiBORVRDTUQKKyAgICAvKiAoQ09NTUFORCBpcyBhbHNvIGEgbmV0d29yayB0eXBlKSAqLworICAg IHsgIi9jb21tYW5kIiwgICAgICBTTF9DTUQsICAgIENNX0lOViB9LAorI2VuZGlmIC8qIE5FVENN RCAqLworICAgIHsgIi9jb25uZWN0IiwgICAgICBTTF9DTlgsICAgIDAgfSwKKyAgICB7ICIvbmV0 d29yay10eXBlIiwgU0xfTkVULCAgICBDTV9BUkcgfSwKKyAgICB7ICIvbm93YWl0IiwgICAgICAg U0xfTk9XQUlULCAwIH0sCisjaWZuZGVmIE5PU1BMCisjaWZkZWYgQ0tfQVVUSEVOVElDQVRJT04K KyAgICB7ICIvcGFzc3dvcmQiLCAgICAgU0xfUFNXLCAgICBDTV9BUkcgfSwKKyNlbmRpZiAvKiBD S19BVVRIRU5USUNBVElPTiAqLworI2VuZGlmIC8qIE5PU1BMICovCisjaWZkZWYgTkVUQ01ECisg ICAgeyAiL3BpcGUiLCAgICAgICAgIFNMX0NNRCwgICAgMCB9LAorI2VuZGlmIC8qIE5FVENNRCAq LworI2lmZGVmIE5FVFBUWQorICAgIHsgIi9wdHkiLCAgICAgICAgICBTTF9QVFksICAgIDAgfSwK KyNlbmRpZiAvKiBORVRQVFkgKi8KKyAgICB7ICIvc2VydmVyIiwgICAgICAgU0xfU1JWLCAgICAw IH0sCisgICAgeyAiL3RpbWVvdXQiLCAgICAgIFNMX1RNTywgICAgQ01fQVJHIH0sCisgICAgeyAi L3VzZXJpZCIsICAgICAgIFNMX1VJRCwgICAgQ01fQVJHIH0sCisgICAgeyAiL3dhaXQiLCAgICAg ICAgIFNMX1dBSVQsICAgMCB9LAorICAgIHsgIiIsIDAsIDAgfQorfTsKK3N0YXRpYyBpbnQgbnNo dGFiID0gc2l6ZW9mKHNodGFiKS9zaXplb2Yoc3RydWN0IGtleXRhYikgLSAxOworCitzdGF0aWMg c3RydWN0IGtleXRhYiBzaHRlbHRhYltdID0geyAgICAgLyogVEVMTkVUIGNvbW1hbmQgb3B0aW9u cyAqLworI2lmZGVmIENLX0FVVEhFTlRJQ0FUSU9OCisgICAgeyAiL2F1dGgiLCAgICAgICAgIFNM X0FVVEgsICAgQ01fQVJHIH0sCisjZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJT04gKi8KKyNpZmRl ZiBDS19FTkNSWVBUSU9OCisgICAgeyAiL2VuY3J5cHQiLCAgICAgIFNMX0VOQywgICAgQ01fQVJH IH0sCisjZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLworICAgIHsgIi9ub3dhaXQiLCAgICAgICBT TF9OT1dBSVQsIDAgfSwKKyNpZm5kZWYgTk9TUEwKKyNpZmRlZiBDS19BVVRIRU5USUNBVElPTgor ICAgIHsgIi9wYXNzd29yZCIsICAgICBTTF9QU1csICAgIENNX0FSRyB9LAorI2VuZGlmIC8qIENL X0FVVEhFTlRJQ0FUSU9OICovCisjZW5kaWYgLyogTk9TUEwgKi8KKyAgICB7ICIvdGltZW91dCIs ICAgICAgU0xfVE1PLCAgICBDTV9BUkcgfSwKKyAgICB7ICIvdXNlcmlkIiwgICAgICAgU0xfVUlE LCAgICBDTV9BUkcgfSwKKyAgICB7ICIvd2FpdCIsICAgICAgICAgU0xfV0FJVCwgICAwIH0sCisg ICAgeyAiIiwgMCAsMCB9Cit9Oworc3RhdGljIGludCBuc2h0ZWx0YWIgPSBzaXplb2Yoc2h0ZWx0 YWIpL3NpemVvZihzdHJ1Y3Qga2V5dGFiKSAtIDE7CisKKyNpZmRlZiBSTE9HQ09ERQorc3RhdGlj IHN0cnVjdCBrZXl0YWIgc2hybGd0YWJbXSA9IHsgICAgIC8qIFNFVCBIT1NUIFJMT0dJTiBjb21t YW5kIG9wdGlvbnMgKi8KKyNpZmRlZiBDS19LRVJCRVJPUworI2lmZGVmIENLX0VOQ1JZUFRJT04K KyAgICB7ICIvZW5jcnlwdCIsICAgICAgU0xfRU5DLCAwIH0sCisjZW5kaWYgLyogQ0tfRU5DUllQ VElPTiAqLworICAgIHsgIi9rNCIsICAgICAgICAgICBTTF9LUkI0LCBDTV9JTlYgfSwKKyAgICB7 ICIvazUiLCAgICAgICAgICAgU0xfS1JCNSwgQ01fSU5WIH0sCisgICAgeyAiL2tlcmJlcm9zNCIs ICAgIFNMX0tSQjQsIDAgfSwKKyAgICB7ICIva2VyYmVyb3M1IiwgICAgU0xfS1JCNSwgMCB9LAor ICAgIHsgIi9rZXJiZXJvc19pdiIsICBTTF9LUkI0LCBDTV9JTlYgfSwKKyAgICB7ICIva2VyYmVy b3NfdiIsICAgU0xfS1JCNSwgQ01fSU5WIH0sCisgICAgeyAiL2tyYjQiLCAgICAgICAgIFNMX0tS QjQsIENNX0lOViB9LAorICAgIHsgIi9rcmI1IiwgICAgICAgICBTTF9LUkI1LCBDTV9JTlYgfSwK KyNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLworICAgIHsgIiIsIDAgLDAgfQorfTsKK3N0YXRpYyBp bnQgbnNocmxndGFiID0gc2l6ZW9mKHNocmxndGFiKS9zaXplb2Yoc3RydWN0IGtleXRhYiktMTsK KyNlbmRpZiAvKiBSTE9HQ09ERSAqLworCitleHRlcm4gc3RydWN0IGtleXRhYiBuZXRjbWRbXTsK K2V4dGVybiBpbnQgbm5ldHM7CisjaWZuZGVmIE5PRElBTAorZXh0ZXJuIGludCBkaXJsaW5lOwor ZXh0ZXJuIGludCBubmV0ZGlyOyAgICAgICAgICAgICAgICAgICAgIC8qIE5ldHdvcmsgc2Vydmlj ZXMgZGlyZWN0b3J5ICovCitleHRlcm4gY2hhciAqbmV0ZGlyW107CitfUFJPVE9UWVAoIFZPSUQg bmRyZXNldCwgKHZvaWQpICk7CitjaGFyICpuaF9wW01BWEROVU1TICsgMV07ICAgICAgICAgICAg ICAgLyogTmV0d29yayBkaXJlY3RvcnkgZW50cnkgcG9pbnRlcnMgKi8KK2NoYXIgKm5oX3AyW01B WEROVU1TICsgMV07ICAgICAgICAgICAgICAvKiBOZXR3b3JrIGRpcmVjdG9yeSBlbnRyeSBuZXR0 eXBlICovCitjaGFyICpuaF9weFs0XVtNQVhETlVNUyArIDFdOyAgICAgICAgICAgLyogTmV0d29y ay1zcGVjaWZpYyBzdHVmZi4uLiAqLworI2VuZGlmIC8qIE5PRElBTCAqLworaW50IG5oY291bnQg PSAwOworaW50IG5kaW5pdGVkID0gMDsKK2NoYXIgKiBuX25hbWUgPSBOVUxMOyAgICAgICAgICAg ICAgICAgICAvKiBOZXR3b3JrIG5hbWUgcG9pbnRlciAqLworI2VuZGlmIC8qIE5FVENPTk4gKi8K KworX1BST1RPVFlQKGludCByZW10eHQsIChjaGFyICoqKSApOworX1BST1RPVFlQKFZPSUQgcm1z ZywgKHZvaWQpICk7CitfUFJPVE9UWVAoc3RhdGljIGludCByZW1jZm0sICh2b2lkKSApOworCitl eHRlcm4gaW50IG5vcHVzaDsKKworaW50IG1kbXNhdiA9IC0xOyAgICAgICAgICAgICAgICAgICAg ICAgIC8qIFNhdmUgbW9kZW0gdHlwZSBhcm91bmQgbmV0d29yayAqLworZXh0ZXJuIGludCBpc2d1 ZXN0OyAgICAgICAgICAgICAgICAgICAgIC8qIEdsb2JhbCBmbGFnIGZvciBhbm9ueW1vdXMgbG9n aW4gKi8KKworZXh0ZXJuIHh4X3N0cnAgeHhzdHJpbmc7CisKK2V4dGVybiBpbnQgc3VjY2Vzcywg YmluYXJ5LCBiX3NhdmUsIGNrd2FybiwgbXNnZmxnLCBxdWlldCwgY21hc2ssIHBmbGFnLCBsb2Nh bCwKKyAgbmV0dHlwZSwgZXNjYXBlLCBtZG10eXAsIGR1cGxleCwgZGZsb2MsIG5ldHdvcmssIGNk dGltbywgYXV0b2Zsb3csIHRubG0sCisgIHNvc2ksIHRsZXZlbCwgbGZfb3B0cywgYmFja2dyZCwg ZmxvdywgZGVic2VzLCBwYXJpdHksIHR0bnByb3RvLCBja3hlY2gsCisgIHhfaWZudW0sIGNtZmxn cywgaGF2ZWxpbmUsIGN4dHlwZSwgY3hmbG93W10sIG1hY2x2bDsKKworI2lmZGVmIERDTURCVUYK K2V4dGVybiBzdHJ1Y3QgY21kcHRyICpjbWRzdGs7ICAgICAgICAgICAvKiBUaGUgY29tbWFuZCBz dGFjayBpdHNlbGYgKi8KKyNlbHNlCitleHRlcm4gc3RydWN0IGNtZHB0ciBjbWRzdGtbXTsgICAg ICAgICAgLyogVGhlIGNvbW1hbmQgc3RhY2sgaXRzZWxmICovCisjZW5kaWYgLyogRENNREJVRiAq LworZXh0ZXJuIEZJTEUgKiB0ZmlsZVtdOworZXh0ZXJuIGNoYXIgKiBtYWNwW107CisKK2V4dGVy biBjaGFyIHBzYXZlW107ICAgICAgICAgICAgICAgICAgICAvKiBGb3Igc2F2aW5nICYgcmVzdG9y aW5nIHByb21wdCAqLworZXh0ZXJuIGludCBzcHJtbGVuLCBycHJtbGVuOworCisjaWZkZWYgT1My CitzdGF0aWMgc3RydWN0IGtleXRhYiBzdHJta2V5dGFiW10gPSB7CisgICAgeyAiY2xlYXIiLCAg IDAsIDAgfSwKKyAgICB7ICJkZWZhdWx0IiwgMSwgMCB9Cit9Oworc3RhdGljIGludCBuc3RybWtl eXRhYiA9IHNpemVvZihzdHJta2V5dGFiKS9zaXplb2Yoc3RydWN0IGtleXRhYik7CisKK3N0YXRp YyBzdHJ1Y3Qga2V5dGFiIHN0cm1zd2l0YWJbXSA9IHsKKyAgICB7ICIvbGl0ZXJhbCIsIDAsIDAg fQorfTsKK3N0YXRpYyBpbnQgbnN0cm1zd2l0YWIgPSBzaXplb2Yoc3RybXN3aXRhYikvc2l6ZW9m KHN0cnVjdCBrZXl0YWIpOworCitzdGF0aWMgc3RydWN0IGtleXRhYiBub3JtcmV2W10gPSB7Cisg ICAgeyAiZGFyay1kaXNwbGF5IiwgMCwgMCB9LAorICAgIHsgImxpZ2h0LWRpc3BsYXkiLCAxLCAw IH0sCisgICAgeyAibm9ybWFsIiwgICAwLCAwIH0sCisgICAgeyAicmV2ZXJzZSIsICAxLCAwIH0K K307CisKK3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIHBybm10YWJbXSA9IHsKKyAgICB7ICJhdXRvIiwg MSwgMCB9LAorICAgIHsgImNvcHkiLCAyLCAwIH0sCisgICAgeyAib2ZmIiwgIDAsIDAgfSwKKyAg ICB7ICJvbiIsICAgMSwgQ01fSU5WIH0sICAgICAgICAgICAgICAvKiBDb21wYXRpYmlsaXR5IHdp dGggWFBSSU5UIHZlcnNpb24gKi8KKyAgICB7ICJ1c2VyIiwgMywgMCB9LAorICAgIHsgInRyYW5z cGFyZW50IiwgMywgQ01fSU5WIH0gICAgICAgIC8qIG5vdCByZWFsbHkgdHJhbnNwYXJlbnQgKi8K K307CitzdGF0aWMgaW50IG5wcm5tdGFiID0gc2l6ZW9mKHBybm10YWIpL3NpemVvZihzdHJ1Y3Qg a2V5dGFiKTsKKworZXh0ZXJuIGludCB0dF9kaWZmX3VwZDsKKworI2lmZGVmIE5UCisjZGVmaW5l IHN0cmljbXAgX3N0cmljbXAKK2V4dGVybiBpbnQgdHRfYXR0cl9idWc7CisjZW5kaWYgLyogTlQg Ki8KK2V4dGVybiBpbnQgdHRfcm93c1tdLCB0dF9jb2xzW107CitleHRlcm4gaW50IHR0X2NvbHNf dXNyOworZXh0ZXJuIGludCB0dF9zemNobmdbVk5VTV07CitpbnQgdHRfbW9kZWNoZyA9IFRWQ19F TkE7CitleHRlcm4gaW50IHR0X3VybF9oaWxpdGUsIHR0X3VybF9oaWxpdGVfYXR0cjsKK2V4dGVy biBzdHJ1Y3QgX3Z0RyBHWzRdOworZXh0ZXJuIGludCBwcmlvcml0eTsKK2V4dGVybiBib29sIHNl bmRfYzE7CitpbnQgc2VuZF9jMV91c3IgPSBGQUxTRTsKK2V4dGVybiBpbnQgc2dyY29sb3JzOwor ZXh0ZXJuIGludCBtYXJnaW5iZWxsLCBtYXJnaW5iZWxsY29sOworZXh0ZXJuIGludCBhdXRvc2Ny b2xsLCB3eV9hdXRvcGFnZTsKK2V4dGVybiBpbnQgdHRfc2FjOworZXh0ZXJuIGludCBkZWNfbnJj LCBkZWNfbGFuZywgZGVjX2tiZDsKKyNlbHNlIC8qIE9TMiAqLworZXh0ZXJuIGludCB0dF9yb3dz LCB0dF9jb2xzOworI2VuZGlmIC8qICBPUzIgKi8KKworZXh0ZXJuIGludCB0dF9lc2NhcGU7Citl eHRlcm4gbG9uZyBzcGVlZDsKKworZXh0ZXJuIGNoYXIgKmRmdHR5OworCitleHRlcm4gY2hhciAq dHAsICpscDsgICAgICAgICAgICAgICAgICAgLyogVGVtcG9yYXJ5IGJ1ZmZlciAmIHBvaW50ZXJz ICovCitleHRlcm4gY2hhciB0dG5hbWVbXTsKKworI2lmZGVmIENLX1RBUEkKK2ludCB0dHRhcGkg PSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcyBMaW5lIFRBUEk/ICovCitzdHJ1Y3Qg a2V5dGFiICogdGFwaWxpbmV0YWIgPSBOVUxMOworc3RydWN0IGtleXRhYiAqIF90YXBpbGluZXRh YiA9IE5VTEw7CitpbnQgbnRhcGlsaW5lID0gMDsKKyNlbmRpZiAvKiBDS19UQVBJICovCisKKyNp ZmRlZiBORVRDT05OICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOZXR3b3JrIGl0ZW1zICov CisKKyNpZmRlZiBBTllYMjUKK2V4dGVybiBpbnQgcmV2Y2FsbCwgY2xvc2dyLCBjdWRhdGEsIG54 MjU7CitleHRlcm4gY2hhciB1ZGF0YVtdOworZXh0ZXJuIHN0cnVjdCBrZXl0YWIgeDI1dGFiW107 CisjaWZuZGVmIElCTVgyNQorZXh0ZXJuIGludCBucGFkeDM7CitleHRlcm4gQ0hBUiBwYWRwYXJt c1tdOworZXh0ZXJuIHN0cnVjdCBrZXl0YWIgcGFkeDN0YWJbXTsKKyNlbmRpZiAvKiBJQk1YMjUg Ki8KKyNlbmRpZiAvKiBBTllYMjUgKi8KKworI2lmZGVmIE9TMgorZXh0ZXJuIGJvb2wgdHRzaGFy ZTsKKyNpZm5kZWYgTlQKK2V4dGVybiBib29sIHR0c2xpcCx0dHBwcDsKKyNlbmRpZiAvKiBOVCAq LworI2VuZGlmIC8qIE9TMiAqLworI2lmZGVmIE5QSVBFCitleHRlcm4gY2hhciBwaXBlbmFtZVtd OworI2VuZGlmIC8qIE5QSVBFICovCisKKyNpZmRlZiBUQ1BTT0NLRVQKK3N0YXRpYyBzdHJ1Y3Qg a2V5dGFiIHRjcHJhd3RhYltdID0geyAgICAvKiBTRVQgSE9TVCBvcHRpb25zICovCisgICAgeyAi L2RlZmF1bHQiLCAgICBOUF9ERUZBVUxULCAgICBDTV9JTlYgfSwKKyNpZmRlZiBDS19BVVRIRU5U SUNBVElPTgorI2lmZGVmIENLX0tFUkJFUk9TCisjaWZkZWYgUkxPR0NPREUKKyAgICB7ICIvZWs0 bG9naW4iLCAgICBOUF9FSzRMT0dJTiwgICAgMCB9LAorICAgIHsgIi9lazVsb2dpbiIsICAgIE5Q X0VLNUxPR0lOLCAgICAwIH0sCisgICAgeyAiL2s0bG9naW4iLCAgICAgTlBfSzRMT0dJTiwgICAg IDAgfSwKKyAgICB7ICIvazVsb2dpbiIsICAgICBOUF9LNUxPR0lOLCAgICAgMCB9LAorI2VuZGlm IC8qIFJMT0dDT0RFICovCisjaWZkZWYgS1JCNV9VMlUKKyAgICB7ICIvazV1c2VyMnVzZXIiLCBO UF9LNVUyVSwgICAgICAgMCB9LAorI2VuZGlmIC8qIEtSQjVfVTJVICovCisjZW5kaWYgLyogQ0tf S0VSQkVST1MgKi8KKyNlbmRpZiAvKiBDS19BVVRIRU5USUNBVElPTiAqLworICAgIHsgIi9uby10 ZWxuZXQtaW5pdCIsIE5QX05PTkUsICAgMCB9LAorICAgIHsgIi9ub25lIiwgICAgICAgTlBfTk9O RSwgICBDTV9JTlYgfSwKKyAgICB7ICIvcmF3LXNvY2tldCIsIE5QX1RDUFJBVywgMCB9LAorI2lm ZGVmIFJMT0dDT0RFCisgICAgeyAiL3Jsb2dpbiIsICAgICBOUF9STE9HSU4sIDAgfSwKKyNlbmRp ZiAvKiBSTE9HQ09ERSAqLworI2lmZGVmIENLX1NTTAorICAgIHsgIi9zc2wiLCAgICAgICAgTlBf U1NMLCAgICAwIH0sCisgICAgeyAiL3NzbC1yYXciLCAgICBOUF9TU0xfUkFXLCAwIH0sCisgICAg eyAiL3NzbC10ZWxuZXQiLCBOUF9TU0xfVEVMTkVULCAwIH0sCisjZW5kaWYgLyogQ0tfU1NMICov CisgICAgeyAiL3RlbG5ldCIsICAgICBOUF9URUxORVQsIDAgfSwKKyNpZmRlZiBDS19TU0wKKyAg ICB7ICIvdGxzIiwgICAgICAgIE5QX1RMUywgICAgMCB9LAorICAgIHsgIi90bHMtcmF3IiwgICAg TlBfVExTX1JBVywgMCB9LAorICAgIHsgIi90bHMtdGVsbmV0IiwgTlBfVExTX1RFTE5FVCwgMCB9 LAorI2VuZGlmIC8qIENLX1NTTCAqLworICAgIHsgIiIsIDAsIDAgfQorfTsKK3N0YXRpYyBpbnQg bnRjcHJhdyA9IChzaXplb2YodGNwcmF3dGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSkgLSAx OworCisjaWZkZWYgUkxPR0NPREUKK19QUk9UT1RZUCggaW50IHJsb2dfbmF3cywgKHZvaWQpICk7 CisjZW5kaWYgLyogUkxPR0NPREUgKi8KKyNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KKworI2lmZGVm IFNVUEVSTEFUCitleHRlcm4gY2hhciBzbGF0X3B3ZFsxOF07CisjZW5kaWYgLyogU1VQRVJMQVQg Ki8KKyNlbmRpZiAvKiBORVRDT05OICovCisKKyNpZmRlZiBDT01NRU5UCisjaWZuZGVmIE5PU0VU S0VZCitleHRlcm4gS0VZICprZXltYXA7CisjaWZuZGVmIE9TMgorI2RlZmluZSBtYXBrZXkoeCkg a2V5bWFwW3hdCisjZW5kaWYgLyogT1MyICovCitleHRlcm4gTUFDUk8gKm1hY3JvdGFiOworI2lm bmRlZiBOT0tWRVJCUworZXh0ZXJuIHN0cnVjdCBrZXl0YWIga3ZlcmJzW107CitleHRlcm4gaW50 IG5rdmVyYnM7CisjZW5kaWYgLyogTk9LVkVSQlMgKi8KKyNlbmRpZiAvKiBOT1NFVEtFWSAqLwor I2Vsc2UKKyNpZm5kZWYgTk9TRVRLRVkKK2V4dGVybiBLRVkgKmtleW1hcDsKK2V4dGVybiBNQUNS TyAqbWFjcm90YWI7CisjaWZuZGVmIE5PS1ZFUkJTCitleHRlcm4gc3RydWN0IGtleXRhYiBrdmVy YnNbXTsKK2V4dGVybiBpbnQgbmt2ZXJiczsKKyNlbmRpZiAvKiBOT0tWRVJCUyAqLworI2VuZGlm IC8qIE5PU0VUS0VZICovCisjZW5kaWYgLyogQ09NTUVOVCAqLworCisjaWZkZWYgT1MyICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogQVVUT0RPV05MT0FEIHBhcmFtZXRlcnMgKi8KK2V4 dGVybiBpbnQgICAgYWRsX2ttb2RlLCBhZGxfem1vZGU7ICAgICAvKiBNYXRjaCBQYWNrZXQgdG8g c2lnbmFsIGRvd25sb2FkICovCitleHRlcm4gY2hhciAqIGFkbF9rc3RyOyAgICAgICAgICAgICAg ICAgLyogS0VSTUlUIERvd25sb2FkIFN0cmluZyAqLworZXh0ZXJuIGNoYXIgKiBhZGxfenN0cjsg ICAgICAgICAgICAgICAgIC8qIFpNT0RFTSBEb3dubG9hZCBTdHJpbmcgKi8KK2V4dGVybiBpbnQg YWRsX2tjMCwgYWRsX3pjMDsgICAgICAgICAgICAvKiBQcm9jZXNzIEFETCBDMHMgaW4gZW11bGF0 aW9uICovCisjZW5kaWYgLyogT1MyICovCisKKy8qIEtleXdvcmQgdGFibGVzIC4uLiAqLworCitl eHRlcm4gc3RydWN0IGtleXRhYiBvbm9mZltdLCBybHRhYltdOworZXh0ZXJuIGludCBucmx0Owor CisjaWZuZGVmIE5PQ1NFVFMKK3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIGZkZmx0YWJbXSA9IHsKKyAg ICB7ICI3Yml0LWNoYXJhY3Rlci1zZXQiLCA3LCAwIH0sCisgICAgeyAiOGJpdC1jaGFyYWN0ZXIt c2V0IiwgOCwgMCB9Cit9Oworc3RhdGljIGludCBuZmRmbHQgPSAoc2l6ZW9mKGZkZmx0YWIpIC8g c2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKKyNlbmRpZiAvKiBOT0NTRVRTICovCisKKy8qIFNFVCBG SUxFIHBhcmFtZXRlcnMgKi8KKworc3RhdGljIHN0cnVjdCBrZXl0YWIgZmlsdGFiW10gPSB7Cisj aWZuZGVmIE5PWEZFUgorI2lmZGVmIFBBVFRFUk5TCisgICAgeyAiYmluYXJ5LXBhdHRlcm5zIiwg ICBYWUZJQlAsICAwIH0sCisjZW5kaWYgLyogUEFUVEVSTlMgKi8KKyAgICB7ICJieXRlc2l6ZSIs ICAgICAgICAgWFlGSUxTLCAgIDAgfSwKKyNpZm5kZWYgTk9DU0VUUworICAgIHsgImNoYXJhY3Rl ci1zZXQiLCAgICBYWUZJTEMsICAgMCB9LAorI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKyAgICB7ICJj b2xsaXNpb24iLCAgICAgICAgWFlGSUxYLCAgIDAgfSwKKyAgICB7ICJkZWZhdWx0IiwgICAgICAg ICAgWFlGX0RGTFQsIDAgfSwKKyAgICB7ICJkZXN0aW5hdGlvbiIsICAgICAgWFlGSUxZLCAgIDAg fSwKKyAgICB7ICJkaXNwbGF5IiwgICAgICAgICAgWFlGSUxELCAgIENNX0lOViB9LAorI2lmZGVm IENLX1RNUERJUgorICAgIHsgImRvd25sb2FkLWRpcmVjdG9yeSIsIFhZRklMRywgMCB9LAorI2Vu ZGlmIC8qIENLX1RNUERJUiAqLworI2VuZGlmIC8qIE5PWEZFUiAqLworICAgIHsgImVuZC1vZi1s aW5lIiwgICAgICBYWUZJTEEsICAgMCB9LAorICAgIHsgImVvbCIsICAgICAgICAgICAgICBYWUZJ TEEsICAgQ01fSU5WIH0sCisjaWZkZWYgQ0tfQ1RSTFoKKyAgICB7ICJlb2YiLCAgICAgICAgICAg ICAgWFlGSUxWLCAgIDAgfSwKKyNlbmRpZiAvKiBDS19DVFJMWiAqLworI2lmbmRlZiBOT1hGRVIK KyAgICB7ICJmYXN0bG9va3VwcyIsICAgICAgOTk5NywgICAgIENNX0lOViB9LAorICAgIHsgImlu Y29tcGxldGUiLCAgICAgICBYWUZJTEksICAgMCB9LAorI2lmbmRlZiBkYXRhZ2VuZXJhbAorICAg IHsgImluc3BlY3Rpb24iLCAgICAgICBYWUZfSU5TUCwgQ01fSU5WIH0sCisjZW5kaWYgLyogZGF0 YWdlbmVyYWwgKi8KKyNpZmRlZiBDS19MQUJFTEVECisgICAgeyAibGFiZWwiLCAgICAgICAgICAg IFhZRklMTCwgMCB9LAorI2VuZGlmIC8qIENLX0xBQkVMRUQgKi8KKworI2lmZGVmIFVOSVgKKyNp ZmRlZiBEWU5BTUlDCisgICAgeyAibGlzdHNpemUiLCAgICAgICAgIFhZRl9MU0laLCAwIH0sCisj ZW5kaWYgLyogRFlOQU1JQyAqLworI2VuZGlmIC8qIFVOSVggKi8KKworICAgIHsgIm5hbWVzIiwg ICAgICAgICAgICBYWUZJTE4sIDAgfSwKKyNpZmRlZiBVTklYCisgICAgeyAib3V0cHV0IiwgICAg ICAgICAgIFhZRklMSCwgMCB9LAorI2VuZGlmIC8qIFVOSVggKi8KKyNpZmRlZiBQQVRURVJOUwor ICAgIHsgInBhdHRlcm5zIiwgICAgICAgICBYWUZJUEEsIDAgfSwKKyNlbmRpZiAvKiBQQVRURVJO UyAqLworI2lmZGVmIENPTU1FTlQgLyogTm90IGltcGxlbWVudGVkIChidXQgc2VlIENITU9EKSAq LworICAgIHsgInBlcm1pc3Npb25zIiwgICAgICBYWUZfUFJNLCBDTV9JTlYgfSwKKyAgICB7ICJw cm90ZWN0aW9uIiwgICAgICAgWFlGX1BSTSwgMCB9LAorI2VuZGlmIC8qIENPTU1FTnQgKi8KKyNp ZmRlZiBWTVMKKyAgICB7ICJyZWNvcmQtbGVuZ3RoIiwgICAgWFlGSUxSLCAwIH0sCisjZW5kaWYg LyogVk1TICovCisjaWZuZGVmIGRhdGFnZW5lcmFsCisgICAgeyAic2NhbiIsICAgICAgICAgICAg IFhZRl9JTlNQLCAwIH0sCisjZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KKworI2lmZGVmIFVOSVgK KyNpZmRlZiBEWU5BTUlDCisgICAgeyAic3RyaW5nc3BhY2UiLCAgICAgIFhZRl9TU1BBLCAwIH0s CisjZW5kaWYgLyogRFlOQU1JQyAqLworI2VuZGlmIC8qIFVOSVggKi8KKworI2lmZGVmIFBBVFRF Uk5TCisgICAgeyAidCIsICAgICAgICAgICAgICAgIFhZRklMVCwgQ01fSU5WfENNX0FCUiB9LAor ICAgIHsgInRleHQtcGF0dGVybnMiLCAgICBYWUZJVFAsIDAgfSwKKyNlbmRpZiAvKiBQQVRURVJO UyAqLworI2VuZGlmIC8qIE5PWEZFUiAqLworICAgIHsgInR5cGUiLCAgICAgICAgICAgICBYWUZJ TFQsIDAgfSwKKyNpZmRlZiBVTklDT0RFCisgICAgeyAidWNzIiwgICAgICAgICAgICAgIFhZRklM VSwgMCB9LAorI2VuZGlmIC8qIFVOSUNPREUgKi8KKyNpZm5kZWYgTk9YRkVSCisgICAgeyAid2Fy bmluZyIsICAgICAgICAgIFhZRklMVywgQ01fSU5WIH0KKyNlbmRpZiAvKiBOT1hGRVIgKi8KK307 CitzdGF0aWMgaW50IG5maWxwID0gKHNpemVvZihmaWx0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0 YWIpKTsKKworc3RydWN0IGtleXRhYiBwYXRodGFiW10gPSB7CisgICAgeyAiYWJzb2x1dGUiLCAg UEFUSF9BQlMsICAwICAgICAgfSwKKyAgICB7ICJub25lIiwgICAgICBQQVRIX09GRiwgIENNX0lO ViB9LAorICAgIHsgIm9mZiIsICAgICAgIFBBVEhfT0ZGLCAgMCAgICAgIH0sCisgICAgeyAib24i LCAgICAgICAgUEFUSF9BQlMsICBDTV9JTlYgfSwKKyAgICB7ICJyZWxhdGl2ZSIsICBQQVRIX1JF TCwgIDAgICAgICB9Cit9OworaW50IG5wYXRodGFiID0gKHNpemVvZihwYXRodGFiKSAvIHNpemVv ZihzdHJ1Y3Qga2V5dGFiKSk7CisKK3N0cnVjdCBrZXl0YWIgcnBhdGh0YWJbXSA9IHsKKyAgICB7 ICJhYnNvbHV0ZSIsICBQQVRIX0FCUywgIDAgICAgICB9LAorICAgIHsgImF1dG8iLCAgICAgIFBB VEhfQVVUTywgMCAgICAgIH0sCisgICAgeyAibm9uZSIsICAgICAgUEFUSF9PRkYsICBDTV9JTlYg fSwKKyAgICB7ICJvZmYiLCAgICAgICBQQVRIX09GRiwgIDAgICAgICB9LAorICAgIHsgIm9uIiwg ICAgICAgIFBBVEhfQUJTLCAgQ01fSU5WIH0sCisgICAgeyAicmVsYXRpdmUiLCAgUEFUSF9SRUws ICAwICAgICAgfQorfTsKK2ludCBucnBhdGh0YWIgPSAoc2l6ZW9mKHJwYXRodGFiKSAvIHNpemVv ZihzdHJ1Y3Qga2V5dGFiKSk7CisKKyNpZmRlZiBDS19DVFJMWgorc3RydWN0IGtleXRhYiBlb2Z0 YWJbXSA9IHsgICAgICAgICAgICAgIC8qIEVPRiBkZXRlY3Rpb24gbWV0aG9kICovCisgICAgeyAi Y3RybC16IiwgICAgICAgICAgMSwgMCAgICAgIH0sCisgICAgeyAibGVuZ3RoIiwgICAgICAgICAg MCwgMCAgICAgIH0sCisgICAgeyAibm9jdHJsLXoiLCAgICAgICAgMCwgQ01fSU5WIH0KK307Cisj ZW5kaWYgLyogQ0tfQ1RSTFogKi8KKworc3RydWN0IGtleXRhYiBmdHRhYltdID0geyAgICAgICAg ICAgICAgIC8qIEZpbGUgdHlwZXMgZm9yIFNFVCBGSUxFIFRZUEUgKi8KKyAgICB7ICJhc2NpaSIs ICAgICBYWUZUX1QsIENNX0lOViB9LAorI2lmZGVmIFZNUworICAgIHsgImIiLCAgICAgICAgIFhZ RlRfQiwgQ01fSU5WfENNX0FCUiB9LAorI2VuZGlmIC8qIFZNUyAqLworICAgIHsgImJpbmFyeSIs ICAgIFhZRlRfQiwgMCB9LAorI2lmZGVmIFZNUworICAgIHsgImJsb2NrIiwgICAgIFhZRlRfSSwg Q01fSU5WIH0sCisgICAgeyAiaW1hZ2UiLCAgICAgWFlGVF9JLCAwIH0sCisjZW5kaWYgLyogVk1T ICovCisjaWZkZWYgQ0tfTEFCRUxFRAorICAgIHsgImxhYmVsZWQiLCAgIFhZRlRfTCwgMCB9LAor I2VuZGlmIC8qIENLX0xBQkVMRUQgKi8KKyNpZmRlZiBNQUMKKyAgICB7ICJtYWNiaW5hcnkiLCBY WUZUX00sIDAgfSwKKyNlbmRpZiAvKiBNQUMgKi8KKyAgICB7ICJ0ZXh0IiwgICAgICBYWUZUX1Qs IDAgfQorfTsKK2ludCBuZnR0eXAgPSAoc2l6ZW9mKGZ0dGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5 dGFiKSk7CisKK3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIHJmdHRhYltdID0geyAgICAgICAvKiBGaWxl IHR5cGVzIGZvciBSRU1PVEUgU0VUIEZJTEUgKi8KKyAgICB7ICJhc2NpaSIsICAgICBYWUZUX1Qs IENNX0lOViB9LAorICAgIHsgImJpbmFyeSIsICAgIFhZRlRfQiwgMCB9LAorI2lmZGVmIFZNUwor ICAgIHsgImxhYmVsZWQiLCAgIFhZRlRfTCwgMCB9LAorI2Vsc2UKKyNpZmRlZiBPUzIKKyAgICB7 ICJsYWJlbGVkIiwgICBYWUZUX0wsIDAgfSwKKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBW TVMgKi8KKyAgICB7ICJ0ZXh0IiwgICAgICBYWUZUX1QsIDAgfQorfTsKK3N0YXRpYyBpbnQgbnJm dHR5cCA9IChzaXplb2YocmZ0dGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7CisKKyNpZmRl ZiBPUzJPUlVOSVgKKyNkZWZpbmUgWk9GX0JMSyAgMAorI2RlZmluZSBaT0ZfTkJMSyAxCisjZGVm aW5lIFpPRl9CVUYgIDIKKyNkZWZpbmUgWk9GX05CVUYgMworc3RhdGljIHN0cnVjdCBrZXl0YWIg em9mdGFiW10gPSB7CisgICAgeyAiYmxvY2tpbmciLCAgICBaT0ZfQkxLLCAgMCB9LAorICAgIHsg ImJ1ZmZlcmVkIiwgICAgWk9GX0JVRiwgIDAgfSwKKyAgICB7ICJub25ibG9ja2luZyIsIFpPRl9O QkxLLCAwIH0sCisgICAgeyAidW5idWZmZXJlZCIsICBaT0ZfTkJVRiwgMCB9Cit9Oworc3RhdGlj IGludCBuem9mdGFiID0gKHNpemVvZih6b2Z0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsK KyNlbmRpZiAvKiBPUzJPUlVOSVggKi8KKworZXh0ZXJuIGludCBxdWVyeTsgICAgICAgICAgICAg ICAgICAgICAgIC8qIEdsb2JhbCBmbGFnIGZvciBRVUVSWSBhY3RpdmUgKi8KKworI2lmbmRlZiBO T1NQTAorI2lmbmRlZiBOT1hGRVIKK3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIHZhcnR5cFtdID0geyAg ICAgICAvKiBWYXJpYWJsZSB0eXBlcyBmb3IgUkVNT1RFIFFVRVJZICovCisgICAgeyAiZ2xvYmFs IiwgICAoaW50KSAnRycsIENNX0lOViB9LAorICAgIHsgImtlcm1pdCIsICAgKGludCkgJ0snLCAw IH0sCisgICAgeyAic3lzdGVtIiwgICAoaW50KSAnUycsIDAgfSwKKyAgICB7ICJ1c2VyIiwgICAg IChpbnQpICdHJywgMCB9Cit9Oworc3RhdGljIGludCBudmFydHlwID0gKHNpemVvZih2YXJ0eXAp IC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKKyNlbmRpZiAvKiBOT1hGRVIgKi8KKyNlbmRpZiAv KiBOT1NQTCAqLworCisjaWZkZWYgQ0tfVElNRVJTCitzdGF0aWMgc3RydWN0IGtleXRhYiB0aW1v dGFiW10gPSB7ICAgICAgLyogVGltZXIgdHlwZXMgKi8KKyAgICB7ICJkeW5hbWljIiwgMSwgMCB9 LAorICAgIHsgImZpeGVkIiwgICAwLCAwIH0KK307CisjZW5kaWYgLyogQ0tfVElNRVJTICovCisK KyNpZmRlZiBEQ01EQlVGCitleHRlcm4gY2hhciAqYXR4YnVmLCAqYXRtYnVmOyAgICAgICAgICAg LyogQXRvbSBidWZmZXIgKi8KK2V4dGVybiBjaGFyICpjbWRidWY7ICAgICAgICAgICAgICAgICAg ICAvKiBDb21tYW5kIGJ1ZmZlciAqLworZXh0ZXJuIGNoYXIgKmxpbmUsICp0bXBidWY7ICAgICAg ICAgICAgIC8qIENoYXJhY3RlciBidWZmZXJzIGZvciBhbnl0aGluZyAqLworZXh0ZXJuIGludCAq aW50aW1lOyAgICAgICAgICAgICAgICAgICAgIC8qIElOUFVUIFRJTUVPVVQgKi8KKworI2Vsc2Ug IC8qIE5vdCBEQ01EQlVGIC4uLiAqLworCitleHRlcm4gY2hhciBhdHhidWZbXSwgYXRtYnVmW107 ICAgICAgICAgLyogQXRvbSBidWZmZXIgKi8KK2V4dGVybiBjaGFyIGNtZGJ1ZltdOyAgICAgICAg ICAgICAgICAgICAvKiBDb21tYW5kIGJ1ZmZlciAqLworZXh0ZXJuIGNoYXIgbGluZVtdLCB0bXBi dWZbXTsgICAgICAgICAgIC8qIENoYXJhY3RlciBidWZmZXIgZm9yIGFueXRoaW5nICovCitleHRl cm4gaW50IGludGltZVtdOworCisjZW5kaWYgLyogRENNREJVRiAqLworCisjaWZuZGVmIE5PQ1NF VFMKK2V4dGVybiBzdHJ1Y3Qga2V5dGFiIGZjc3RhYltdOyAgICAgICAgICAvKiBGb3IgU0VUIEZJ TEUgQ0hBUkFDVEVSLVNFVCAqLworZXh0ZXJuIHN0cnVjdCBjc2luZm8gZmNzaW5mb1tdOyAgICAg ICAgIC8qIEZpbGUgY2hhcmFjdGVyIHNldCBpbmZvLiAqLworZXh0ZXJuIHN0cnVjdCBrZXl0YWIg dHRjc3RhYltdOworZXh0ZXJuIGludCBuZmlsYywgZmNoYXJzZXQsIHRjaGFyc2V0LCBudGVybWMs IHRjc3IsIHRjc2wsIGRjc2V0NywgZGNzZXQ4OworI2lmZGVmIENLT1VOSQorZXh0ZXJuIGludCB0 dF91dGY4OworI2VuZGlmIC8qIENLT1VOSSAqLworI2lmZGVmIE9TMgorX1BST1RPVFlQKCBpbnQg b3Myc2V0Y3AsIChpbnQpICk7CitfUFJPVE9UWVAoIGludCBvczJnZXRjcCwgKHZvaWQpICk7Citf UFJPVE9UWVAoIHZvaWQgb3MyZGVidWdvZmYsICh2b2lkKSApOworI2VuZGlmIC8qIE9TMiAqLwor I2VuZGlmIC8qIE5PQ1NFVFMgKi8KKworZXh0ZXJuIGludCBjbWRsdmw7ICAgICAgICAgICAgICAg ICAgICAgIC8qIE92ZXJhbGwgY29tbWFuZCBsZXZlbCAqLworCisjaWZuZGVmIE5PU1BMCisjaWZk ZWYgRENNREJVRgorZXh0ZXJuIGludCAqaW5wY2FzOyAgICAgICAgICAgICAgICAgICAgIC8qIElO UFVUIENBU0Ugc2V0dGluZyBvbiBjbWQgc3RhY2sgKi8KKyNlbHNlCitleHRlcm4gaW50IGlucGNh c1tdOworI2VuZGlmIC8qIERDTURCVUYgKi8KKyNlbmRpZiAvKiBOT1NQTCAqLworCisjaWZkZWYg Q0tfQ1VSU0VTCisjaWZuZGVmIFZNUworX1BST1RPVFlQKGludCB0Z2V0ZW50LChjaGFyICosIGNo YXIgKikpOworI2Vsc2UKKyNpZmRlZiBfX0RFQ0MKK19QUk9UT1RZUChpbnQgdGdldGVudCwoY2hh ciAqLCBjaGFyICopKTsKKyNlbmRpZiAvKiBfX0RFQ0MgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKyNl bmRpZiAvKiBDS19DVVJTRVMgKi8KKworI2lmbmRlZiBOT1hNSVQKKyNkZWZpbmUgWE1JVEYgMCAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBTRVQgVFJBTlNNSVQgdmFsdWVzICovCisjZGVmaW5l IFhNSVRMIDEgICAgICAgICAgICAgICAgICAgICAgICAgLyogKExvY2FsIHRvIHRoaXMgbW9kdWxl KSAqLworI2RlZmluZSBYTUlUUCAyCisjZGVmaW5lIFhNSVRFIDMKKyNkZWZpbmUgWE1JVFggNAor I2RlZmluZSBYTUlUUyA1CisjZGVmaW5lIFhNSVRXIDYKKyNkZWZpbmUgWE1JVFQgNworCisjZGVm aW5lIFhNQlVGTCA1MAorZXh0ZXJuIGludCB4bWl0ZiwgeG1pdGwsIHhtaXRwLCB4bWl0eCwgeG1p dHMsIHhtaXR3LCB4bWl0dDsKK2NoYXIgeG1pdGJ1ZltYTUJVRkwrMV0gPSB7IE5VTCB9OyAgICAg ICAvKiBUUkFOU01JVCBlb2Ygc3RyaW5nICovCisKK3N0cnVjdCBrZXl0YWIgeG1pdGFiW10gPSB7 ICAgICAgICAgICAgICAvKiBTRVQgVFJBTlNNSVQgKi8KKyAgICB7ICJlY2hvIiwgICAgICAgICAg WE1JVFgsIDAgfSwKKyAgICB7ICJlb2YiLCAgICAgICAgICAgWE1JVEUsIDAgfSwKKyAgICB7ICJm aWxsIiwgICAgICAgICAgWE1JVEYsIDAgfSwKKyAgICB7ICJsaW5lZmVlZCIsICAgICAgWE1JVEws IDAgfSwKKyAgICB7ICJsb2NraW5nLXNoaWZ0IiwgWE1JVFMsIDAgfSwKKyAgICB7ICJwYXVzZSIs ICAgICAgICAgWE1JVFcsIDAgfSwKKyAgICB7ICJwcm9tcHQiLCAgICAgICAgWE1JVFAsIDAgfSwK KyAgICB7ICJ0aW1lb3V0IiwgICAgICAgWE1JVFQsIDAgfQorfTsKK2ludCBueG1pdCA9IChzaXpl b2YoeG1pdGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7CisjZW5kaWYgLyogTk9YTUlUICov CisKKy8qIEZvciBTRVQgRklMRSBDT0xMSVNJT04gKi8KKy8qIFNvbWUgb2YgdGhlIGZvbGxvd2lu ZyBtYXkgYmUgcG9zc2libGUgZm9yIHNvbWUgQy1LZXJtaXQgaW1wbGVtZW50YXRpb25zICovCisv KiBidXQgbm90IG90aGVycy4gIFRob3NlIHRoYXQgYXJlIG5vdCBwb3NzaWJsZSBmb3IgeW91ciBp bXBsZW1lbnRhdGlvbiAqLworLyogc2hvdWxkIGJlIGlmZGVmJ2Qgb3V0LiAqLworCitzdHJ1Y3Qg a2V5dGFiIGNvbHh0YWJbXSA9IHsgLyogU0VUIEZJTEUgQ09MTElTSU9OIG9wdGlvbnMgKi8KKyNp Zm5kZWYgTUFDCisgICAgeyAiYXBwZW5kIiwgICAgWFlGWF9BLCAwIH0sICAgICAgICAgLyogYXBw ZW5kIHRvIG9sZCBmaWxlICovCisjZW5kaWYgLyogTUFDICovCisjaWZkZWYgQ09NTUVOVAorICAg IHsgImFzayIsICAgICAgIFhZRlhfUSwgMCB9LCAgICAgICAgIC8qIGFzayB3aGF0IHRvIGRvIChu b3QgaW1wbGVtZW50ZWQpICovCisjZW5kaWYKKyAgICB7ICJiYWNrdXAiLCAgICBYWUZYX0IsIDAg fSwgICAgICAgICAvKiByZW5hbWUgb2xkIGZpbGUgKi8KKyNpZm5kZWYgTUFDCisgICAgLyogVGhp cyBjcmFzaGVzIE1hYyBLZXJtaXQuICovCisgICAgeyAiZGlzY2FyZCIsICAgWFlGWF9ELCBDTV9J TlYgfSwJLyogZG9uJ3QgYWNjZXB0IG5ldyBmaWxlICovCisgICAgeyAibm8tc3VwZXJzZWRlIiwg WFlGWF9ELCBDTV9JTlYgfSwgLyogZGl0dG8gKE1TSyBjb21wYXRpYmlsaXR5KSAqLworI2VuZGlm IC8qIE1BQyAqLworICAgIHsgIm92ZXJ3cml0ZSIsIFhZRlhfWCwgMCB9LCAgICAgICAgIC8qIG92 ZXJ3cml0ZSB0aGUgb2xkIGZpbGUgKi8KKyAgICB7ICJyZWplY3QiLCAgICBYWUZYX0QsIDAgfSwJ CS8qIChiZXR0ZXIgd29yZCB0aGFuIGRpc2NhcmQpICovCisgICAgeyAicmVuYW1lIiwgICAgWFlG WF9SLCAwIH0sICAgICAgICAgLyogcmVuYW1lIHRoZSBpbmNvbWluZyBmaWxlICovCisjaWZuZGVm IE1BQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVGhpcyBjcmFzaGVzIE1hYyBLZXJt aXQuICovCisgICAgeyAidXBkYXRlIiwgICAgWFlGWF9VLCAwIH0sICAgICAgICAgLyogcmVwbGFj ZSBpZiBuZXdlciAqLworI2VuZGlmIC8qIE1BQyAqLworICAgIHsgIiIsIDAsIDAgfQorfTsKK2lu dCBuY29seCA9IChzaXplb2YoY29seHRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpIC0gMTsK Kworc3RhdGljIHN0cnVjdCBrZXl0YWIgcmZpbHRhYltdID0geyAgICAgIC8qIGZvciBSRU1PVEUg U0VUIEZJTEUgKi8KKyNpZm5kZWYgTk9DU0VUUworICAgIHsgImNoYXJhY3Rlci1zZXQiLCBYWUZJ TEMsIDAgfSwKKyNlbmRpZiAvKiBOT0NTRVRTICovCisgICAgeyAiY29sbGlzaW9uIiwgICAgIFhZ RklMWCwgMCB9LAorICAgIHsgImluY29tcGxldGUiLCAgICBYWUZJTEksIDAgfSwKKyAgICB7ICJu YW1lcyIsICAgICAgICAgWFlGSUxOLCAwIH0sCisgICAgeyAicmVjb3JkLWxlbmd0aCIsIFhZRklM UiwgMCB9LAorICAgIHsgInR5cGUiLCAgICAgICAgICBYWUZJTFQsIDAgfQorfTsKK2ludCBucmZp bHAgPSAoc2l6ZW9mKHJmaWx0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKKworc3RydWN0 IGtleXRhYiBlb2x0YWJbXSA9IHsgICAgICAgICAgICAgIC8qIEZpbGUgZW9mIGRlbGltaXRlcnMg Ki8KKyAgICB7ICJjciIsICAgICAgICBYWUZBX0MsIDAgfSwKKyAgICB7ICJjcmxmIiwgICAgICBY WUZBXzIsIDAgfSwKKyAgICB7ICJsZiIsICAgICAgICBYWUZBX0wsIDAgfQorfTsKK3N0YXRpYyBp bnQgbmVvbHRhYiA9IChzaXplb2YoZW9sdGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7CisK K3N0cnVjdCBrZXl0YWIgZm50YWJbXSA9IHsgICAgICAgICAgICAgICAvKiBGaWxlIG5hbWluZyAq LworICAgIHsgImNvbnZlcnRlZCIsIFhZRk5fQywgMCAgICAgIH0sCisgICAgeyAibGl0ZXJhbCIs ICAgWFlGTl9MLCAwICAgICAgfSwKKyAgICB7ICJzdGFuZGFyZCIsICBYWUZOX0MsIENNX0lOViB9 Cit9OworaW50IG5mbnRhYiA9IChzaXplb2YoZm50YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIp KTsKKworI2lmbmRlZiBOT0xPQ0FMCisvKiBUZXJtaW5hbCBwYXJhbWV0ZXJzIHRhYmxlICovCitz dGF0aWMgc3RydWN0IGtleXRhYiB0cm10YWJbXSA9IHsKKyNpZmRlZiBPUzIKKyAgICB7ICJhbnN3 ZXJiYWNrIiwgICAgWFlUQU5TLCAgICAwIH0sCisjZW5kaWYgLyogT1MyICovCisjaWZkZWYgQ0tf QVBDCisgICAgeyAiYXBjIiwgICAgICAgICAgIFhZVEFQQywgICAgMCB9LAorI2VuZGlmIC8qIENL X0FQQyAqLworI2lmZGVmIE9TMgorICAgIHsgImFycm93LWtleXMiLCAgICBYWVRBUlIsICAgIDAg fSwKKyNlbmRpZiAvKiBPUzIgKi8KKyNpZmRlZiBOVAorICAgIHsgImF0IiwgICAgICAgICAgICBY WVRBVFRSLCAgIENNX0lOVnxDTV9BQlIgfSwKKyAgICB7ICJhdHQiLCAgICAgICAgICAgWFlUQVRU UiwgICBDTV9JTlZ8Q01fQUJSIH0sCisgICAgeyAiYXR0ciIsICAgICAgICAgIFhZVEFUVFIsICAg Q01fSU5WfENNX0FCUiB9LAorICAgIHsgImF0dHItYnVnIiwgICAgICBYWVRBVFRCVUcsIENNX0lO ViB9LAorI2VuZGlmIC8qIE5UICovCisjaWZkZWYgT1MyCisgICAgeyAiYXR0cmlidXRlIiwgICAg IFhZVEFUVFIsICAgMCB9LAorI2VuZGlmIC8qIE9TMiAqLworI2lmZGVmIENLX0FQQworI2lmZGVm IENLX0FVVE9ETAorICAgeyAiYXV0b2Rvd25sb2FkIiwgICBYWVRBVVRPREwsIDAsIH0sCisjZW5k aWYgLyogQ0tfQVVUT0RMICovCisjZW5kaWYgLyogQ0tfQVBDICovCisjaWZkZWYgT1MyCisgICAg eyAiYXV0b3BhZ2UiLCAgICAgIFhZVEFQQUdFLCAgMCB9LAorICAgIHsgImF1dG9zY3JvbGwiLCAg ICBYWVRBU0NSTCwgIDAgfSwKKyAgICB7ICJiZWxsIiwgICAgICAgICAgWFlUQkVMLCAgICBDTV9J TlYgfSwKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICB7ICJieXRlc2l6ZSIsICAgICAgWFlUQllULCAg ICAwIH0sCisjaWZuZGVmIE5PQ1NFVFMKKyAgICB7ICJjaGFyYWN0ZXItc2V0IiwgWFlUQ1MsICAg ICAwIH0sCisjZW5kaWYgLyogTk9DU0VUUyAqLworI2lmZGVmIE9TMgorICAgIHsgImNvZGUtcGFn ZSIsICAgICBYWVRDUEcsICAgIDAgfSwKKyAgICB7ICJjb2xvciIsICAgICAgICAgWFlUQ09MLCAg ICAwIH0sCisgICAgeyAiY29udHJvbHMiLCAgICAgIFhZVENUUkwsICAgMCB9LAorI2VuZGlmIC8q IE9TMiAqLworICAgIHsgImNyLWRpc3BsYXkiLCAgICBYWVRDUkQsICAgIDAgfSwKKyNpZmRlZiBP UzIKKyAgICB7ICJjdXJzb3IiLCAgICAgICAgWFlUQ1VSLCAgICAwIH0sCisjZW5kaWYgLyogT1My ICovCisgICAgeyAiZGVidWciLCAgICAgICAgIFhZVERFQiwgICAgMCB9LAorI2lmZGVmIE9TMgor ICAgIHsgImRnLXVuaXgtbW9kZSIsICBYWVRVTlgsICAgIDAgfSwKKyNlbmRpZiAvKiBPUzIgKi8K KyAgICB7ICJlY2hvIiwgICAgICAgICAgWFlURUMsICAgICAwIH0sCisgICAgeyAiZXNjYXBlLWNo YXJhY3RlciIsIFhZVEVTQywgMCB9LAorI2lmZGVmIE9TMgorI2lmZGVmIFBDRk9OVFMKKyAgICB7 ICJmb250IiwgICAgICAgICAgWFlURk9OLCAgICAwIH0sCisjZWxzZQorI2lmZGVmIEtVSQorICAg IHsgImZvbnQiLCAgICAgICAgICBYWVRGT04sICAgIDAgfSwKKyNlbmRpZiAvKiBLVUkgKi8KKyNl bmRpZiAvKiBQQ0ZPTlRTICovCisjZW5kaWYgLyogT1MyICovCisgICAgeyAiaGVpZ2h0IiwgICAg ICAgIFhZVEhJRywgICAgMCB9LAorI2lmZGVmIENLVElETEUKKyAgICB7ICJpZGxlLWFjdGlvbiIs ICAgWFlUSUFDVCwgICAwIH0sCisgICAgeyAiaWRsZS1saW1pdCIsICAgIFhZVElUTU8sICAgQ01f SU5WIH0sCisgICAgeyAiaWRsZS1zZW5kIiwgICAgIFhZVElETEUsICAgQ01fSU5WIH0sCisgICAg eyAiaWRsZS10aW1lb3V0IiwgIFhZVElUTU8sICAgMCB9LAorI2VuZGlmIC8qIENLVElETEUgKi8K KyNpZmRlZiBPUzIKKyNpZm5kZWYgTk9DU0VUUworICAgIHsgImtiZC1mb2xsb3dzLWdsL2dyIiwg WFlUS0JER0wsIDAgfSwKKyNlbmRpZiAvKiBOT0NTRVRTICovCisgICAgeyAia2V5IiwgICAgICAg ICAgIFhZVEtFWSwgICAgMCB9LAorICAgIHsgImtleWJvYXJkLW1vZGUiLCBYWVRLQk1PRCwgIDAg fSwKKyAgICB7ICJrZXlwYWQtbW9kZSIsICAgWFlUS1BELCAgICAwIH0sCisjZW5kaWYgLyogT1My ICovCisgICAgeyAibGYtZGlzcGxheSIsICAgIFhZVExGRCwgICAgMCB9LAorI2lmbmRlZiBOT0NT RVRTCisjaWZkZWYgT1MyCisjaWZuZGVmIEtVSQorICAgIHsgImxpbmUtc3BhY2luZyIsICBYWVRM U1AsICAgIENNX0lOViB9LAorICAgIHsgImxvY2FsLWNoYXJhY3Rlci1zZXQiLCBYWVRMQ1MsICAw IH0sCisjZWxzZQorICAgIHsgImxpbmUtc3BhY2luZyIsICBYWVRMU1AsICAgIDAgfSwKKyAgICB7 ICJsb2NhbC1jaGFyYWN0ZXItc2V0IiwgWFlUTENTLCAgQ01fSU5WIH0sCisjZW5kaWYgLyogS1VJ ICovCisjZWxzZQorICAgIHsgImxvY2FsLWNoYXJhY3Rlci1zZXQiLCBYWVRMQ1MsICBDTV9JTlYg fSwKKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBOT0NTRVRTICovCisgICAgeyAibG9ja2lu Zy1zaGlmdCIsIFhZVFNPLCAgICAgMCB9LAorI2lmZGVmIE9TMgorICAgIHsgIm1hcmdpbi1iZWxs IiwgICBYWVRNQkVMLCAgIDAgfSwKKyNlbmRpZiAvKiBPUzIgKi8KKyNpZmRlZiBPUzJNT1VTRQor ICAgIHsgIm1vdXNlIiwgICAgICAgICBYWVRNT1UsICAgIENNX0lOViB9LAorI2VuZGlmIC8qIE9T Mk1PVVNFICovCisgICAgeyAibmV3bGluZS1tb2RlIiwgIFhZVE5MLCAgICAgMCB9LAorI2lmZGVm IE9TMgorICAgIHsgIm91dHB1dC1wYWNpbmciLCBYWVRQQUMsICAgIDAgfSwKKyNpZmRlZiBQQ1RF Uk0KKyAgICB7ICJwY3Rlcm0iLCAgICAgICAgWFlUUENURVJNLCAwIH0sCisjZW5kaWYgLyogUENU RVJNICovCisjZW5kaWYgLyogT1MyICovCisjaWZkZWYgT1MyT1JVTklYCisgICAgeyAicHJpbnQi LCAgICAgICAgIFhZVFBSTiwgICAgMCB9LAorI2VuZGlmIC8qIE9TMk9SVU5JWCAqLworI2lmbmRl ZiBOT0NTRVRTCisjaWZkZWYgT1MyCisgICAgeyAicmVtb3RlLWNoYXJhY3Rlci1zZXQiLCBYWVRS Q1MsICAwIH0sCisjZWxzZQorICAgIHsgInJlbW90ZS1jaGFyYWN0ZXItc2V0IiwgWFlUUkNTLCAg Q01fSU5WIH0sCisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogTk9DU0VUUyAqLworI2lmZGVm IE9TMgorICAgIHsgInJvbGwtbW9kZSIsICAgICAgIFhZVFJPTCwgMCB9LAorICAgIHsgInMiLCAg ICAgICAgICAgICAgIFhZVFVQRCwgQ01fQUJSfENNX0lOViB9LAorICAgIHsgInNjIiwgICAgICAg ICAgICAgIFhZVFVQRCwgQ01fQUJSfENNX0lOViB9LAorICAgIHsgInNjciIsICAgICAgICAgICAg IFhZVFVQRCwgQ01fQUJSfENNX0lOViB9LAorICAgIHsgInNjcmVlIiwgICAgICAgICAgIFhZVFVQ RCwgQ01fQUJSfENNX0lOViB9LAorICAgIHsgInNjcmVlbiIsICAgICAgICAgIFhZVFVQRCwgQ01f QUJSfENNX0lOViB9LAorICAgIHsgInNjcmVlbi0iLCAgICAgICAgIFhZVFVQRCwgQ01fQUJSfENN X0lOViB9LAorICAgIHsgInNjcmVlbi1tb2RlIiwgICAgIFhZVFNDTk0sICAgMCB9LAorICAgIHsg InNjcmVlbi1vcHRpbWl6ZSIsIFhZVE9QVEksICAgMCB9LAorICAgIHsgInNjcmVlbi11cGRhdGUi LCAgIFhZVFVQRCwgICAgMCB9LAorICAgIHsgInNjcm9sbGJhY2siLCAgICAgIFhZU0NSUywgICAg MCB9LAorICAgIHsgInNlbmQtZGF0YSIsICAgICAgICAgWFlUU0VORCwgMCB9LAorICAgIHsgInNl bmQtZW5kLW9mLWJsb2NrIiwgWFlUU0VPQiwgMCB9LAorICAgIHsgInNnci1jb2xvcnMiLCAgICAg ICAgICAgIFhZVFNHUkMsICAwIH0sCisgICAgeyAic25pLWNoLmNvZGUiLCAgICAgICAgICAgWFlU U05JQ0MsIDAgfSwKKyAgICB7ICJzbmktZmlybXdhcmUtdmVyc2lvbnMiLCBYWVRTTklGViwgMCB9 LAorICAgIHsgInNuaS1sYW5ndWFnZSIsICAgICAgICAgIFhZVFZUTE5HLCAwIH0sCisgICAgeyAi c25pLXBhZ2Vtb2RlIiwgICAgICAgICAgWFlUU05JUE0sIENNX0lOViB9LAorICAgIHsgInNuaS1z Y3JvbGxtb2RlIiwgICAgICAgICAgICAgIFhZVFNOSVNNLCBDTV9JTlYgfSwKKyAgICB7ICJzcGFj aW5nLWF0dHJpYnV0ZS1jaGFyYWN0ZXIiLCBYWVRTQUMsICAgQ01fSU5WIH0sCisgICAgeyAic3Rh dHVzbGluZSIsICAgICAgICAgICAgICAgICAgWFlUU1RBVCwgIDAgfSwKKyAgICB7ICJ0cmEiLCAg ICAgICAgICAgICAgICAgICAgICAgICBYWVRDVFMsICAgQ01fSU5WfENNX0FCUiB9LAorICAgIHsg InRyYW5zbWl0LXRpbWVvdXQiLCAgICAgICAgICAgIFhZVENUUywgICAwIH0sCisjZW5kaWYgLyog T1MyICovCisKKyNpZmRlZiBPUzJPUlVOSVgKKyAgICB7ICJ0cmFuc3BhcmVudC1wcmludCIsIFhZ VFBSTiwgICBDTV9JTlYgfSwKKyNlbmRpZiAvKiBPUzJPUlVOSVggKi8KKworI2lmZGVmIENLX1RS SUdHRVIKKyAgICB7ICJ0cmlnZ2VyIiwgICAgICAgICAgIFhZVFJJR0dFUiwwIH0sCisjZW5kaWYg LyogQ0tfVFJJR0dFUiAqLworI2lmZGVmIE9TMgorICAgIHsgInR5cGUiLCAgICAgICAgICAgICAg WFlUVFlQLCAgIDAgfSwKKyNlbHNlCisgICAgeyAidHlwZSIsICAgICAgICAgICAgICBYWVRUWVAs ICAgQ01fSU5WIH0sCisjZW5kaWYgLyogT1MyICovCisKKyNpZm5kZWYgTk9DU0VUUworI2lmZGVm IFVOSUNPREUKKyNpZmRlZiBDS09VTkkKKyAgICB7ICJ1bmljb2RlIiwgICAgICAgICAgIFhZVFVO SSwgICBDTV9JTlYgfSwKKyNlbmRpZiAvKiBDS09VTkkgKi8KKyNlbmRpZiAvKiBVTklDT0RFICov CisjZW5kaWYgLyogTk9DU0VUUyAqLworI2lmZGVmIE9TMgorICAgIHsgInVuaXgtbW9kZSIsICAg ICAgICAgWFlUVU5YLCAgIENNX0lOViB9LAorICAgIHsgInVybC1oaWdobGlnaHQiLCAgICAgWFlU VVJMSEksIDAgfSwKKyNpZmRlZiBOVAorICAgIHsgInZpZGVvLWNoYW5nZSIsICAgICAgWFlUVkNI LCAgIDAgfSwKKyNlbmRpZiAvKiBOVCAqLworICAgIHsgInZ0LWxhbmd1YWdlIiwgICAgICAgWFlU VlRMTkcsIDAgfSwKKyAgICB7ICJ2dC1ucmMtbW9kZSIsICAgICAgIFhZVFZUTlJDLCAwIH0sCisj ZW5kaWYgLyogT1MyICovCisgICAgeyAid2lkdGgiLCAgICAgICAgICAgICBYWVRXSUQsICAgMCB9 LAorI2lmZGVmIE9TMgorICAgIHsgIndyYXAiLCAgICAgICAgICAgICAgWFlUV1JQLCAgIDAgfSwK KyNlbmRpZiAvKiBPUzIgKi8KKyAgICB7ICIiLCAwLCAwIH0KK307CitpbnQgbnRybSA9IChzaXpl b2YodHJtdGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSkgLSAxOworCisjaWZkZWYgT1MyCitz dHJ1Y3Qga2V5dGFiIHRlcm1jdHJsW10gPSB7ICAgIC8qIFNFVCBURVJNIENPTlRST0xTICovCisg ICAgeyAiNyIsICAgICAgNywgMCB9LAorICAgIHsgIjgiLCAgICAgIDgsIDAgfQorfTsKK2ludCBu dGVybWN0cmwgPSAoc2l6ZW9mKHRlcm1jdHJsKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7CisK K3N0cnVjdCBrZXl0YWIgY3Vyb250YWJbXSA9IHsgICAgLyogU0VUIFRFUk0gQ1VSU09SICovCisj aWZkZWYgS1VJCisgICAgeyAibm9ibGluayIsIDIsIDAgfSwKKyNlbHNlCisgICAgeyAibm9ibGlu ayIsIDIsIENNX0lOViB9LAorI2VuZGlmIC8qIEtVSSAqLworICAgIHsgIm9mZiIsICAgICAwLCAw IH0sCisgICAgeyAib24iLCAgICAgIDEsIDAgfQorfTsKK2ludCBuY3Vyb24gPSAoc2l6ZW9mKGN1 cm9udGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7CisKK3N0cnVjdCBrZXl0YWIgcm9sbHRh YltdID0geyAgIC8qIFNldCBURVJNIFJvbGwgT3B0aW9ucyAqLworICAgIHsgImluc2VydCIsICAg IFRUUl9JTlNFUlQsIDAgICAgICB9LAorICAgIHsgImtleXN0cm9rZXMiLFRUUl9LRVlTLCAgIDAg ICAgICB9LAorICAgIHsgIm9mZiIsICAgICAgIFRUUl9PVkVSLCAgIENNX0lOViB9LAorICAgIHsg Im9uIiwgICAgICAgIFRUUl9JTlNFUlQsIENNX0lOViB9LAorICAgIHsgIm92ZXJ3cml0ZSIsIFRU Ul9PVkVSLCAgIDAgICAgICB9Cit9OworaW50IG5yb2xsID0gKHNpemVvZihyb2xsdGFiKSAvIHNp emVvZihzdHJ1Y3Qga2V5dGFiKSk7CisKK3N0cnVjdCBrZXl0YWIgcm9sbGtleXRhYltdID0gewkJ LyogU2V0IFRFUk0gUk9MTCBLRVlTVFJPS0VTICovCisgICAgeyAiaWdub3JlIiwgICAgICAgICAg ICBUVFJLX0lHTiwgMCB9LAorICAgIHsgInJlc3RvcmUtYW5kLXNlbmQiLCAgVFRSS19SU1QsIDAg fSwKKyAgICB7ICJzZW5kIiwgICAgICAgICAgICAgIFRUUktfU05ELCAwIH0KK307CitpbnQgbnJv bGxrZXkgPSAoc2l6ZW9mKHJvbGxrZXl0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKKwor I2RlZmluZSBUVF9HUl9BTEwgNAorI2RlZmluZSBUVF9HUl9HMCAgMAorI2RlZmluZSBUVF9HUl9H MSAgMQorI2RlZmluZSBUVF9HUl9HMiAgMgorI2RlZmluZSBUVF9HUl9HMyAgMworI2RlZmluZSBU VF9HUl9LQkQgNAorc3RydWN0IGtleXRhYiBncmFwaHNldHRhYltdID0geyAgLyogREVDIFZUIEdy YXBoaWMgU2V0cyAqLworICAgIHsgImFsbCIsICAgICAgVFRfR1JfQUxMLCAwIH0sCisgICAgeyAi ZzAiLCAgICAgICBUVF9HUl9HMCwgIDAgfSwKKyAgICB7ICJnMSIsICAgICAgIFRUX0dSX0cxLCAg MCB9LAorICAgIHsgImcyIiwgICAgICAgVFRfR1JfRzIsICAwIH0sCisgICAgeyAiZzMiLCAgICAg ICBUVF9HUl9HMywgIDAgfSwKKyAgICB7ICJrZXlib2FyZCIsIFRUX0dSX0tCRCwgMCB9Cit9Owor aW50IG5ncmFwaHNldCA9IChzaXplb2YoZ3JhcGhzZXR0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0 YWIpKTsKKyNlbmRpZiAvKiBPUzIgKi8KKworc3RydWN0IGtleXRhYiBhZGx0YWJbXSA9IHsgICAg ICAgICAgICAgIC8qIEF1dG9kb3dubG9hZCBPcHRpb25zICovCisgICAgeyAiYXNrIiwgICAgIFRB RF9BU0ssIDAgfSwKKyAgICB7ICJlcnJvciIsICAgVEFEX0VSUiwgMCB9LAorI2lmZGVmIE9TMgor ICAgIHsgImtlcm1pdCIsICBUQURfSywgICAwIH0sCisjZW5kaWYgLyogT1MyICovCisgICAgeyAi b2ZmIiwgICAgIFRBRF9PRkYsIDAgfSwKKyAgICB7ICJvbiIsICAgICAgVEFEX09OLCAgMCB9LAor I2lmZGVmIE9TMgorICAgIHsgInptb2RlbSIsICBUQURfWiwgICAwIH0sCisjZW5kaWYgLyogT1My ICovCisgICAgeyAiIiwgMCwgMCB9Cit9OworaW50IG5hZGx0YWIgPSAoc2l6ZW9mKGFkbHRhYikg LyBzaXplb2Yoc3RydWN0IGtleXRhYikpIC0gMTsKKworc3RydWN0IGtleXRhYiBhZGxlcnJ0YWJb XSA9IHsgICAgICAgICAgIC8qIEF1dG9kb3dubG9hZCBFcnJvciBPcHRpb25zICovCisgICAgeyAi Y29udGludWUiLCAwLCAwIH0sCisgICAgeyAiZ28iLCAgICAgICAwLCBDTV9JTlYgfSwKKyAgICB7 ICJzdG9wIiwgICAgIDEsIDAgfQorfTsKK2ludCBuYWRsZXJydGFiID0gKHNpemVvZihhZGxlcnJ0 YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKKworI2lmZGVmIE9TMgorc3RydWN0IGtleXRh YiBhZGx4dGFiW10gPSB7ICAgICAgICAgICAgIC8qIEF1dG9kb3dubG9hZCBPcHRpb25zICovCisg ICAgeyAiYzAtY29uZmxpY3RzIiwgICAgIFRBRF9YX0MwLCAgICAgMCB9LAorICAgIHsgImRldGVj dGlvbi1tZXRob2QiLCBUQURfWF9ERVRFQ1QsIDAgfSwKKyAgICB7ICJzdHJpbmciLCAgICAgICAg ICAgVEFEX1hfU1RSLCAgICAwIH0KK307CitpbnQgbmFkbHh0YWIgPSAoc2l6ZW9mKGFkbHh0YWIp IC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKKworc3RydWN0IGtleXRhYiBhZGxkdGFiW10gPSB7 ICAgICAgICAgICAgIC8qIEF1dG8tZGwgRGV0ZWN0aW9uIE1ldGhvZHMgKi8KKyAgICB7ICJwYWNr ZXQiLCAgICAgICAgICAgQURMX1BBQ0ssICAgICAwIH0sCisgICAgeyAic3RyaW5nIiwgICAgICAg ICAgIEFETF9TVFIsICAgICAgMCB9Cit9OworaW50IG5hZGxkdGFiID0gKHNpemVvZihhZGxkdGFi KSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7CisKK3N0cnVjdCBrZXl0YWIgYWRsYzB0YWJbXSA9 IHsgICAgICAgICAgICAvKiBBdXRvLWRsIERldGVjdGlvbiBNZXRob2RzICovCisgICAgeyAiaWdu b3JlZC1ieS1lbXVsYXRvciIsICAgIDAsICAgICAgMCB9LAorICAgIHsgInByb2Nlc3NlZC1ieS1l bXVsYXRvciIsICAxLCAgICAgIDAgfQorfTsKK2ludCBuYWRsYzB0YWIgPSAoc2l6ZW9mKGFkbGMw dGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7CisKKyNpZm5kZWYgTk9DU0VUUworc3RydWN0 IGtleXRhYiB2dGxhbmd0YWJbXSA9IHsKKyAgICB7ICJiZWxnaWFuIiwgICAgICAgIFZUTF9CRUxH SUFOICwgMCB9LAorICAgIHsgImJyaXRpc2giLCAgICAgICAgVlRMX0JSSVRJU0ggLCAwIH0sCisg ICAgeyAiY2FuYWRpYW4iLCAgICAgICBWVExfQ0FOQURJQU4sIDAgfSwKKyAgICB7ICJjemVjaCIs ICAgICAgICAgIFZUTF9DWkVDSCAgICwgMCB9LAorICAgIHsgImRhbmlzaCIsICAgICAgICAgVlRM X0RBTklTSCAgLCAwIH0sCisgICAgeyAiZHV0Y2giLCAgICAgICAgICBWVExfRFVUQ0ggICAsIDAg fSwKKyAgICB7ICJmaW5uaXNoIiwgICAgICAgIFZUTF9GSU5OSVNIICwgMCB9LAorICAgIHsgImZy ZW5jaCIsICAgICAgICAgVlRMX0ZSRU5DSCAgLCAwIH0sCisgICAgeyAiZnJlbmNoLWNhbmFkaWFu IixWVExfRlJfQ0FOICAsIDAgfSwKKyAgICB7ICJnZXJtYW4iLCAgICAgICAgIFZUTF9HRVJNQU4g ICwgMCB9LAorICAgIHsgImdyZWVrIiwgICAgICAgICAgVlRMX0dSRUVLICAgLCAwIH0sCisgICAg eyAiaGVicmV3IiwgICAgICAgICBWVExfSEVCUkVXICAsIDAgfSwKKyAgICB7ICJodW5nYXJpYW4i LCAgICAgIFZUTF9IVU5HQVJJQSwgMCB9LAorICAgIHsgIml0YWxpYW4iLCAgICAgICAgVlRMX0lU QUxJQU4gLCAwIH0sCisgICAgeyAibGF0aW4tYW1lcmljYW4iLCBWVExfTEFUSU5fQU0sIDAgfSwK KyAgICB7ICJub3J0aC1hbWVyaWNhbiIsIFZUTF9OT1JUSF9BTSwgMCB9LAorICAgIHsgIm5vcndl Z2lhbiIsICAgICAgVlRMX05PUldFR0lBLCAwIH0sCisgICAgeyAicG9saXNoIiwgICAgICAgICBW VExfUE9MSVNIICAsIDAgfSwKKyAgICB7ICJwb3J0dWdlc2UiLCAgICAgIFZUTF9QT1JUVUdFUywg MCB9LAorICAgIHsgInJvbWFuaWFuIiwgICAgICAgVlRMX1JPTUFOSUFOLCAwIH0sCisgICAgeyAi cnVzc2lhbiIsICAgICAgICBWVExfUlVTU0lBTiAsIDAgfSwKKyAgICB7ICJzY3MiLCAgICAgICAg ICAgIFZUTF9TQ1MgICAgICwgQ01fSU5WIH0sCisgICAgeyAic2xvdmFrIiwgICAgICAgICBWVExf U0xPVkFLICAsIDAgfSwKKyAgICB7ICJzcGFuaXNoIiwgICAgICAgIFZUTF9TUEFOSVNIICwgMCB9 LAorICAgIHsgInN3ZWRpc2giLCAgICAgICAgVlRMX1NXRURJU0ggLCAwIH0sCisgICAgeyAic3dp c3MtZnJlbmNoIiwgICBWVExfU1dfRlIgICAsIDAgfSwKKyAgICB7ICJzd2lzcy1nZXJtYW4iLCAg IFZUTF9TV19HUiAgICwgMCB9LAorICAgIHsgInR1cmtpc2gtZiIsICAgICAgVlRMX1RVUktfRiAg LCBDTV9JTlYgfSwKKyAgICB7ICJ0dXJraXNoLXEiLCAgICAgIFZUTF9UVVJLX1EgICwgQ01fSU5W IH0KK307CitpbnQgbnZ0bGFuZ3RhYiA9IChzaXplb2YodnRsYW5ndGFiKSAvIHNpemVvZihzdHJ1 Y3Qga2V5dGFiKSk7CisjZW5kaWYgLyogTk9DU0VUUyAqLworI2VuZGlmIC8qIE9TMiAqLworCitz dHJ1Y3Qga2V5dGFiIGNyZHRhYltdID0geyAgICAgICAgICAgICAgLyogQ2FycmlhZ2UtcmV0dXJu IGRpc3BsYXkgKi8KKyAgICB7ICJjcmxmIiwgICAgICAgIDEsIDAgfSwKKyAgICB7ICJub3JtYWwi LCAgICAgIDAsIDAgfQorfTsKK2V4dGVybiBpbnQgdHRfY3JkOyAgICAgICAgICAgICAgICAgICAg ICAvKiBDYXJyaWFnZS1yZXR1cm4gZGlzcGxheSB2YXJpYWJsZSAqLworZXh0ZXJuIGludCB0dF9s ZmQ7CQkJLyogTGluZWZlZWQgZGlzcGxheSB2YXJpYWJsZSAqLworCisjaWZkZWYgQ0tfQVBDCitl eHRlcm4gaW50IGFwY3N0YXR1cywgYXBjYWN0aXZlOworc3RhdGljIHN0cnVjdCBrZXl0YWIgYXBj dGFiW10gPSB7ICAgICAgIC8qIFRlcm1pbmFsIEFQQyBwYXJhbWV0ZXJzICovCisgICAgeyAgIm5v LWlucHV0IiwgQVBDX09OfEFQQ19OT0lOUCwwIH0sCisgICAgeyAib2ZmIiwgICAgICAgQVBDX09G RiwgIDAgfSwKKyAgICB7ICJvbiIsICAgICAgICBBUENfT04sICAgMCB9LAorICAgIHsgInVuY2hl Y2tlZCIsIEFQQ19PTnxBUENfVU5DSCwgMCB9LAorICAgIHsgInVuY2hlY2tlZC1uby1pbnB1dCIs IEFQQ19PTnxBUENfTk9JTlB8QVBDX1VOQ0gsIDAgfQorfTsKK2ludCBuYXBjdGFiID0gKHNpemVv ZihhcGN0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKKyNlbmRpZiAvKiBDS19BUEMgKi8K KyNlbmRpZiAvKiBOT0xPQ0FMICovCisKK2V4dGVybiBpbnQgYXV0b2RsLCBhZGxfZXJyLCBhZGxf YXNrOworCitzdHJ1Y3Qga2V5dGFiIGJlbHRhYltdID0geyAgICAgICAgICAgICAgLyogVGVybWlu YWwgYmVsbCBtb2RlICovCisjaWZkZWYgT1MyCisgICAgeyAiYXVkaWJsZSIsIFhZQl9BVUQsICAw IH0sCisgICAgeyAibm9uZSIsICAgIFhZQl9OT05FLCAwIH0sCisjZWxzZQorICAgIHsgImF1ZGli bGUiLCBYWUJfQVVELCAgQ01fSU5WIH0sCisgICAgeyAibm9uZSIsICAgIFhZQl9OT05FLCBDTV9J TlYgfSwKKyNlbmRpZiAvKiBPUzIgKi8KKyNpZmRlZiBPUzIKKyAgICB7ICJvZmYiLCAgICAgWFlC X05PTkUsIENNX0lOViB9LAorICAgIHsgIm9uIiwgICAgICBYWUJfQVVELCAgQ01fSU5WIH0sCisj ZWxzZQorICAgIHsgIm9mZiIsICAgICBYWUJfTk9ORSwgMCB9LAorICAgIHsgIm9uIiwgICAgICBY WUJfQVVELCAgMCB9LAorI2VuZGlmIC8qIE9TMiAqLworI2lmZGVmIE9TMgorICAgIHsgInZpc2li bGUiLCBYWUJfVklTLCAgMCB9LAorI2VuZGlmIC8qIE9TMiAqLworICAgIHsgIiIsIDAsIDAgfQor fTsKK2ludCBuYmVsdGFiID0gc2l6ZW9mKGJlbHRhYikvc2l6ZW9mKHN0cnVjdCBrZXl0YWIpIC0g MTsKKworaW50IHR0X3VuaWNvZGUgPSAxOyAgICAgICAgICAgICAgICAgICAgIC8qIFVzZSBVbmlj b2RlIGlmIHBvc3NpYmxlICovCisjaWZkZWYgQ0tUSURMRQoraW50IHR0X2lkbGVzbmRfdG1vID0g MDsgICAgICAgICAgICAgICAgIC8qIElkbGUgU2VuZCBUaW1lb3V0LCBkaXNhYmxlZCAqLworY2hh ciAqIHR0X2lkbGVzbmRfc3RyID0gTlVMTDsgICAgICAgICAgIC8qIElkbGUgU2VuZCBTdHJpbmcs IG5vbmUgKi8KK2NoYXIgKiB0dF9pZGxlc3RyID0gTlVMTDsKK2V4dGVybiBpbnQgdHRfaWRsZWFj dCwgdHRfaWRsZWxpbWl0OworI2VuZGlmIC8qIENLVElETEUgKi8KKworI2lmZGVmIE9TMgorI2lm bmRlZiBOT0xPQ0FMCisvKgorICBPUy8yIHNlcmlhbCBjb21tdW5pY2F0aW9uIGRldmljZXMuCisq Lworc3RydWN0IGtleXRhYiBvczJkZXZ0YWJbXSA9IHsKKyAgICB7ICIxIiwgICAgMSwgQ01fSU5W IH0sICAgICAgICAgICAgICAgICAgICAgIC8qIEludmlzaWJsZSBzeW5vbnltcywgbGlrZSAqLwor ICAgIHsgIjIiLCAgICAyLCBDTV9JTlYgfSwgICAgICAgICAgICAgICAgICAgICAgLyogInNldCBw b3J0IDEiICovCisgICAgeyAiMyIsICAgIDMsIENNX0lOViB9LAorICAgIHsgIjQiLCAgICA0LCBD TV9JTlYgfSwKKyAgICB7ICI1IiwgICAgNSwgQ01fSU5WIH0sCisgICAgeyAiNiIsICAgIDYsIENN X0lOViB9LAorICAgIHsgIjciLCAgICA3LCBDTV9JTlYgfSwKKyAgICB7ICI4IiwgICAgOCwgQ01f SU5WIH0sCisgICAgeyAiY29tMSIsIDEsIDAgfSwgICAgICAgICAgICAgICAgICAgLyogUmVhbCBk ZXZpY2UgbmFtZXMgKi8KKyAgICB7ICJjb20yIiwgMiwgMCB9LAorICAgIHsgImNvbTMiLCAzLCAw IH0sCisgICAgeyAiY29tNCIsIDQsIDAgfSwKKyAgICB7ICJjb201IiwgNSwgMCB9LAorICAgIHsg ImNvbTYiLCA2LCAwIH0sCisgICAgeyAiY29tNyIsIDcsIDAgfSwKKyAgICB7ICJjb204IiwgOCwg MCB9LAorI2lmZGVmIE9TMk9OTFkKKyAgICB7ICJzbGlwY29tMSIsIDEsIDAgfSwgICAgICAgICAg ICAgICAgICAgICAgIC8qIEZvciB1c2Ugd2l0aCBTTElQIGRyaXZlciAqLworICAgIHsgInNsaXBj b20yIiwgMiwgMCB9LCAgICAgICAgICAgICAgICAgICAgICAgLyogc2hhcmVkIGFjY2VzcyAqLwor ICAgIHsgInNsaXBjb20zIiwgMywgMCB9LAorICAgIHsgInNsaXBjb200IiwgNCwgMCB9LAorICAg IHsgInNsaXBjb201IiwgNSwgMCB9LAorICAgIHsgInNsaXBjb202IiwgNiwgMCB9LAorICAgIHsg InNsaXBjb203IiwgNywgMCB9LAorICAgIHsgInNsaXBjb204IiwgOCwgMCB9LAorICAgIHsgInBw cGNvbTEiLCAxLCAwIH0sICAgICAgICAgICAgICAgICAgICAgICAgLyogRm9yIHVzZSB3aXRoIFBQ UCBkcml2ZXIgKi8KKyAgICB7ICJwcHBjb20yIiwgMiwgMCB9LCAgICAgICAgICAgICAgICAgICAg ICAgIC8qIHNoYXJlZCBhY2Nlc3MgKi8KKyAgICB7ICJwcHBjb20zIiwgMywgMCB9LAorICAgIHsg InBwcGNvbTQiLCA0LCAwIH0sCisgICAgeyAicHBwY29tNSIsIDUsIDAgfSwKKyAgICB7ICJwcHBj b202IiwgNiwgMCB9LAorICAgIHsgInBwcGNvbTciLCA3LCAwIH0sCisgICAgeyAicHBwY29tOCIs IDgsIDAgfQorI2VuZGlmIC8qIE9TMk9OTFkgKi8KK307CitpbnQgbm9zMmRldiA9IChzaXplb2Yo b3MyZGV2dGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSkgLSAxOworCisjaWZkZWYgT1MyT05M WQorc3RydWN0IGtleXRhYiBvczJwcHB0YWJbXSA9IHsKKyAgICB7ICIwIiwgICAgMCwgQ01fSU5W IH0sCisgICAgeyAiMSIsICAgIDEsIENNX0lOViB9LCAgICAgICAgICAgICAgICAgICAgICAvKiBJ bnZpc2libGUgc3lub255bXMsIGxpa2UgKi8KKyAgICB7ICIyIiwgICAgMiwgQ01fSU5WIH0sICAg ICAgICAgICAgICAgICAgICAgIC8qICJzZXQgcG9ydCAxIiAqLworICAgIHsgIjMiLCAgICAzLCBD TV9JTlYgfSwKKyAgICB7ICI0IiwgICAgNCwgQ01fSU5WIH0sCisgICAgeyAiNSIsICAgIDUsIENN X0lOViB9LAorICAgIHsgIjYiLCAgICA2LCBDTV9JTlYgfSwKKyAgICB7ICI3IiwgICAgNywgQ01f SU5WIH0sCisgICAgeyAiOCIsICAgIDgsIENNX0lOViB9LAorICAgIHsgIjkiLCAgICA5LCBDTV9J TlYgfSwKKyAgICB7ICJwcHAwIiwgMCwgMCB9LAorICAgIHsgInBwcDEiLCAxLCAwIH0sICAgICAg ICAgICAgICAgICAgIC8qIEZvciB1c2Ugd2l0aCBQUFAgZHJpdmVyICovCisgICAgeyAicHBwMiIs IDIsIDAgfSwgICAgICAgICAgICAgICAgICAgLyogc2hhcmVkIGFjY2VzcyAqLworICAgIHsgInBw cDMiLCAzLCAwIH0sCisgICAgeyAicHBwNCIsIDQsIDAgfSwKKyAgICB7ICJwcHA1IiwgNSwgMCB9 LAorICAgIHsgInBwcDYiLCA2LCAwIH0sCisgICAgeyAicHBwNyIsIDcsIDAgfSwKKyAgICB7ICJw cHA4IiwgOCwgMCB9LAorICAgIHsgInBwcDkiLCA5LCAwIH0KK307CitpbnQgbm9zMnBwcCA9IChz aXplb2Yob3MycHBwdGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7CisjZW5kaWYgLyogT1My T05MWSAqLworCisvKgorICBUZXJtaW5hbCBwYXJhbWV0ZXJzIHRoYXQgY2FuIGJlIHNldCBieSBT RVQgY29tbWFuZHMuCisgIFVzZWQgYnkgdGhlIGNrP2Nvbi5jIHRlcm1pbmFsIGVtdWxhdG9yIGNv ZGUuCisgIEZvciBub3csIG9ubHkgdXNlZCBmb3IgI2lmZGVmIE9TMi4gIFNob3VsZCBhZGQgdGhl c2UgZm9yIE1hY2ludG9zaC4KKyovCitpbnQgdHRfYXJyb3cgPSBUVEtfTk9STTsgICAgICAgICAg ICAgICAgLyogQXJyb3cga2V5IG1vZGU6IG5vcm1hbCAoY3Vyc29yKSAqLworaW50IHR0X2tleXBh ZCA9IFRUS19OT1JNOyAgICAgICAgICAgICAgIC8qIEtleXBhZCBtb2RlOiBub3JtYWwgKG51bWVy aWMpICovCitpbnQgdHRfc2hpZnRfa2V5cGFkID0gMDsgICAgICAgICAgICAgICAgLyogS2V5cGFk IFNoaWZ0IG1vZGU6IE9mZiAqLworaW50IHR0X3dyYXAgPSAxOyAgICAgICAgICAgICAgICAgICAg ICAgIC8qIFRlcm1pbmFsIHdyYXAsIDEgPSBPbiAqLworaW50IHR0X3R5cGUgPSBUVF9WVDIyMDsg ICAgICAgICAgICAgICAgIC8qIFRlcm1pbmFsIHR5cGUsIGluaXRpYWxseSBWVDIyMCAqLworaW50 IHR0X3R5cGVfbW9kZSA9IFRUX1ZUMjIwOyAgICAgICAgICAgIC8qIFRlcm1pbmFsIHR5cGUgc2V0 IGJ5IGhvc3QgY29tbWFuZCAqLworaW50IHR0X2N1cnNvciA9IDA7ICAgICAgICAgICAgICAgICAg ICAgIC8qIFRlcm1pbmFsIGN1cnNvciwgMCA9IFVuZGVybGluZSAqLworaW50IHR0X2N1cnNvcl91 c3IgPSAwOyAgICAgICAgICAgICAgICAgIC8qIFVzZXJzIFRlcm1pbmFsIGN1cnNvciB0eXBlICov CitpbnQgdHRfY3Vyc29yZW5hX3VzciA9IDE7ICAgICAgICAgICAgICAgLyogVXNlcnMgVGVybWlu YWwgY3Vyc29yIGVuYWJsZWQgKi8KK2ludCB0dF9jdXJzb3JfYmxpbmsgPSAxOyAgICAgICAgICAg ICAgICAvKiBUZXJtaW5hbCBDdXJzb3IgQmxpbmsgKi8KK2ludCB0dF9hbnN3ZXIgPSAwOyAgICAg ICAgICAgICAgICAgICAgICAvKiBUZXJtaW5hbCBhbnN3ZXJiYWNrIChkaXNhYmxlZCkgKi8KK2lu dCB0dF9zY3JzaXplW1ZOVU1dID0gezUxMiw1MTIsNTEyLDF9OyAvKiBUZXJtaW5hbCBzY3JvbGxi YWNrIGJ1ZmZlciBzaXplICovCitpbnQgdHRfcm9sbFtWTlVNXSA9IHsxLDEsMSwxfTsgICAgICAg ICAgLyogVGVybWluYWwgcm9sbCAob24pICovCitpbnQgdHRfcmtleXNbVk5VTV0gPSB7MSwxLDEs MX07CQkvKiBUZXJtaW5hbCByb2xsIGtleXMgKHNlbmQpICovCitpbnQgdHRfcGFjaW5nID0gMDsg ICAgICAgICAgICAgICAgICAgICAgLyogVGVybWluYWwgb3V0cHV0LXBhY2luZyAobm9uZSkgKi8K K2ludCB0dF9jdHN0bW8gPSAxNTsgICAgICAgICAgICAgICAgICAgICAvKiBUZXJtaW5hbCB0cmFu c21pdC10aW1lb3V0ICovCitpbnQgdHRfY29kZXBhZ2UgPSAtMTsgICAgICAgICAgICAgICAgICAg LyogVGVybWluYWwgY29kZS1wYWdlICovCitpbnQgdHRfdXBkYXRlID0gMTAwOyAgICAgICAgICAg ICAgICAgICAgLyogVGVybWluYWwgc2NyZWVuLXVwZGF0ZSBpbnRlcnZhbCAqLworaW50IHR0X3Vw ZG1vZGUgPSBUVFVfRkFTVDsgICAgICAgICAgICAgIC8qIFRlcm1pbmFsIHNjcmVlbi11cGRhdGUg bW9kZSBGQVNUICovCitleHRlcm4gaW50IHVwZG1vZGU7CisjaWZuZGVmIEtVSQoraW50IHR0X3N0 YXR1c1tWTlVNXSA9IHsxLDEsMCwwfTsgICAgICAgIC8qIFRlcm1pbmFsIHN0YXR1cyBsaW5lIGRp c3BsYXllZCAqLworaW50IHR0X3N0YXR1c191c3JbVk5VTV0gPSB7MSwxLDAsMH07CisjZWxzZSAg LyogS1VJICovCitleHRlcm4gQ0tGTE9BVCBmbG9hdHZhbDsKK0NLRkxPQVQgdHRfbGluZXNwYWNp bmdbVk5VTV0gPSB7MS4wLDEuMCwxLjAsMS4wfTsKKyNpZmRlZiBLOTVHCitpbnQgdHRfc3RhdHVz W1ZOVU1dID0gezEsMSwwLDB9OyAgICAgICAgLyogVGVybWluYWwgc3RhdHVzIGxpbmUgZGlzcGxh eWVkICovCitpbnQgdHRfc3RhdHVzX3VzcltWTlVNXSA9IHsxLDEsMCwwfTsKKyNlbHNlIC8qIEs5 NUcgKi8KK2ludCB0dF9zdGF0dXNbVk5VTV0gPSB7MCwwLDAsMH07ICAgICAgICAvKiBUZXJtaW5h bCBzdGF0dXMgbGluZSBkaXNwbGF5ZWQgKi8KK2ludCB0dF9zdGF0dXNfdXNyW1ZOVU1dID0gezAs MCwwLDB9OworI2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBLVUkgKi8KK2ludCB0dF9zZW5k ZGF0YSA9IDA7ICAgICAgICAgICAgICAgICAgICAvKiBMZXQgaG9zdCByZWFkIHRlcm1pbmFsIGRh dGEgKi8KK2V4dGVybiBpbnQgd3lfYmxvY2tlbmQ7ICAgICAgICAgICAgICAgICAvKiBUZXJtaW5h bCBTZW5kIERhdGEgRU9CIHR5cGUgKi8KK2ludCB0dF9oaWRhdHRyID0gMTsgICAgICAgICAgICAg ICAgICAgICAvKiBBdHRyaWJ1dGVzIGFyZSBoaWRkZW4gKi8KKworZXh0ZXJuIHVuc2lnbmVkIGNo YXIgY29sb3Jub3JtYWwsIGNvbG9yc2VsZWN0LAorY29sb3J1bmRlcmxpbmUsIGNvbG9yc3RhdHVz LCBjb2xvcmhlbHAsIGNvbG9yYm9yZGVyLAorY29sb3JncmFwaGljLCBjb2xvcmRlYnVnLCBjb2xv cnJldmVyc2UsIGNvbG9yaXRhbGljOworCitleHRlcm4gaW50IHRydWVibGluaywgdHJ1ZXVuZGVy bGluZSwgdHJ1ZXJldmVyc2UsIHRydWVpdGFsaWMsIHRydWVkaW07CisKK2V4dGVybiBpbnQgYmdp LCBmZ2k7CitleHRlcm4gaW50IHNjcm5pbml0aWFsaXplZFtdOworCitzdHJ1Y3Qga2V5dGFiIGF1 ZGlibGV0YWJbXSA9IHsgICAgICAgICAgLyogVGVybWluYWwgQmVsbCBBdWRpYmxlIG1vZGUgKi8K KyAgICB7ICJiZWVwIiwgICAgICAgICAgWFlCX0JFRVAsIDAgfSwgICAvKiBWYWx1ZXMgT1JkIHdp dGggYmVsbCBtb2RlICovCisgICAgeyAic3lzdGVtLXNvdW5kcyIsIFhZQl9TWVMsICAwIH0KK307 CitpbnQgbmF1ZGlibGV0YWIgPSBzaXplb2YoYXVkaWJsZXRhYikvc2l6ZW9mKHN0cnVjdCBrZXl0 YWIpOworCitzdHJ1Y3Qga2V5dGFiIGFrbXRhYltdID0geyAgICAgICAgICAgICAgLyogQXJyb3cg a2V5IG1vZGUgKi8KKyAgICB7ICJhcHBsaWNhdGlvbiIsIFRUS19BUFBMLCAwIH0sCisgICAgeyAi Y3Vyc29yIiwgICAgICBUVEtfTk9STSwgMCB9Cit9Oworc3RydWN0IGtleXRhYiBrcG10YWJbXSA9 IHsgICAgICAgICAgICAgIC8qIEtleXBhZCBtb2RlICovCisgICAgeyAiYXBwbGljYXRpb24iLCBU VEtfQVBQTCwgMCB9LAorICAgIHsgIm51bWVyaWMiLCAgICAgVFRLX05PUk0sIDAgfQorfTsKKwor c3RydWN0IGtleXRhYiB0dGNvbG1vZGV0YWJbXSA9IHsKKyAgICB7ICJjdXJyZW50LWNvbG9yIiwg MCwgMCB9LAorICAgIHsgImRlZmF1bHQtY29sb3IiLCAxLCAwIH0KK307CitpbnQgbmNvbG1vZGUg PSBzaXplb2YodHRjb2xtb2RldGFiKS9zaXplb2Yoc3RydWN0IGtleXRhYik7CisKKyNkZWZpbmUg VFRDT0xOT1IgIDAKKyNkZWZpbmUgVFRDT0xSRVYgIDEKKyNkZWZpbmUgVFRDT0xVTkQgIDIKKyNk ZWZpbmUgVFRDT0xTVEEgIDMKKyNkZWZpbmUgVFRDT0xITFAgIDQKKyNkZWZpbmUgVFRDT0xCT1Ig IDUKKyNkZWZpbmUgVFRDT0xTRUwgIDYKKyNkZWZpbmUgVFRDT0xERUIgIDcKKyNkZWZpbmUgVFRD T0xHUlAgIDgKKyNkZWZpbmUgVFRDT0xJVEEgIDkKKyNkZWZpbmUgVFRDT0xSRVMgIDEwCisjZGVm aW5lIFRUQ09MRVJBICAxMQorCitzdHJ1Y3Qga2V5dGFiIHR0eWNvbHRhYltdID0geyAgICAgICAg ICAgICAgICAgICAvKiBUZXJtaW5hbCBTY3JlZW4gY29sb3JpbmcgKi8KKyAgICB7ICJib3JkZXIi LCAgICAgICAgICAgICBUVENPTEJPUiwgMCB9LCAgICAgIC8qIFNjcmVlbiBib3JkZXIgY29sb3Ig Ki8KKyAgICB7ICJkZWJ1Zy10ZXJtaW5hbCIsICAgICBUVENPTERFQiwgMCB9LCAgICAgIC8qIERl YnVnIGNvbG9yICovCisgICAgeyAiZXJhc2UiLCAgICAgICAgICAgICAgVFRDT0xFUkEsIDAgfSwg ICAgICAvKiBFcmFzZSBtb2RlICovCisgICAgeyAiZ3JhcGhpYyIsICAgICAgICAgICAgVFRDT0xH UlAsIDAgfSwgICAgICAvKiBHcmFwaGljIENvbG9yICovCisgICAgeyAiaGVscC10ZXh0IiwgICAg ICAgICAgVFRDT0xITFAsIDAgfSwgICAgICAvKiBIZWxwIHNjcmVlbnMgKi8KKyAgICB7ICJpdGFs aWMiLCAgICAgICAgICAgICBUVENPTElUQSwgMCB9LCAgICAgIC8qIEl0YWxpYyBDb2xvciAqLwor ICAgIHsgIm5vcm1hbCIsICAgICAgICAgICAgIFRUQ09MTk9SLCBDTV9JTlYgfSwgLyogTm9ybWFs IHNjcmVlbiB0ZXh0ICovCisgICAgeyAicmVzZXQtb24tZXNjWzBtIiwgICAgVFRDT0xSRVMsIDAg fSwgICAgICAvKiBSZXNldCBvbiBFU0MgWyAwIG0gKi8KKyAgICB7ICJyZXZlcnNlLXZpZGVvIiwg ICAgICBUVENPTFJFViwgMCB9LCAgICAgIC8qIFJldmVyc2UgdmlkZW8gKi8KKyAgICB7ICJzdGF0 dXMtbGluZSIsICAgICAgICBUVENPTFNUQSwgMCB9LCAgICAgIC8qIFN0YXR1cyBsaW5lICovCisg ICAgeyAic2VsZWN0aW9uIiwgICAgICAgICAgVFRDT0xTRUwsIDAgfSwgICAgICAvKiBTZWxlY3Rp b24gY29sb3IgKi8KKyAgICB7ICJ0ZXJtaW5hbC1zY3JlZW4iLCAgICBUVENPTE5PUiwgMCB9LCAg ICAgIC8qIEJldHRlciBuYW1lIHRoYW4gIm5vcm1hbCIgKi8KKyAgICB7ICJ1bmRlcmxpbmVkLXRl eHQiLCAgICBUVENPTFVORCwgMCB9ICAgICAgIC8qIFVuZGVybGluZWQgdGV4dCAqLworfTsKK2lu dCBuY29sb3JzID0gKHNpemVvZih0dHljb2x0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsK KworI2RlZmluZSBUVEFUVE5PUiAgMAorI2RlZmluZSBUVEFUVEJMSSAgMQorI2RlZmluZSBUVEFU VFJFViAgMgorI2RlZmluZSBUVEFUVFVORCAgMworI2RlZmluZSBUVEFUVFBSTyAgNAorI2RlZmlu ZSBUVEFUVEJMRCAgNQorI2RlZmluZSBUVEFUVERJTSAgNgorI2RlZmluZSBUVEFUVElOViAgNwor I2RlZmluZSBUVEFUVElUQSAgOAorI2RlZmluZSBUVEFUVERPTkUgOQorCitzdHJ1Y3Qga2V5dGFi IHR0eWF0dHJ0YWJbXSA9IHsKKyAgICB7ICJibGluayIsICAgICBUVEFUVEJMSSwgMCB9LAorICAg IHsgImRpbSIsICAgICAgIFRUQVRURElNLCAwIH0sCisgICAgeyAiaXRhbGljIiwgICAgVFRBVFRJ VEEsIDAgfSwKKyAgICB7ICJwcm90ZWN0ZWQiLCBUVEFUVFBSTywgMCB9LAorICAgIHsgInJldmVy c2UiLCAgIFRUQVRUUkVWLCAwIH0sCisgICAgeyAidW5kZXJsaW5lIiwgVFRBVFRVTkQsIDAgfQor fTsKK2ludCBuYXR0cmliID0gKHNpemVvZih0dHlhdHRydGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5 dGFiKSk7CisKK3N0cnVjdCBrZXl0YWIgdHR5cHJvdGFiW10gPSB7CisgICAgeyAiYmxpbmsiLCAg ICAgICBUVEFUVEJMSSwgIDAgfSwKKyAgICB7ICJib2xkIiwgICAgICAgIFRUQVRUQkxELCAgMCB9 LAorICAgIHsgImRpbSIsICAgICAgICAgVFRBVFRESU0sICAwIH0sCisgICAgeyAiZG9uZSIsICAg ICAgICBUVEFUVERPTkUsIENNX0lOViB9LAorICAgIHsgImludmlzaWJsZSIsICAgVFRBVFRJTlYs ICAwIH0sCisgICAgeyAiaXRhbGljIiwgICAgICBUVEFUVElUQSwgIDAgfSwKKyAgICB7ICJub3Jt YWwiLCAgICAgIFRUQVRUTk9SLCAgMCB9LAorICAgIHsgInJldmVyc2UiLCAgICAgVFRBVFRSRVYs ICAwIH0sCisgICAgeyAidW5kZXJsaW5lZCIsICBUVEFUVFVORCwgIDAgfQorCit9OworaW50IG5w cm90ZWN0ID0gKHNpemVvZih0dHlwcm90YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKKwor c3RydWN0IGtleXRhYiB0dHlzZW9idGFiW10gPSB7CisgICAgeyAiY3JsZl9ldHgiLCAgMSwgMCB9 LAorICAgIHsgInVzX2NyIiwgICAgIDAsIDAgfQorfTsKKworc3RydWN0IGtleXRhYiB0dHljbHJ0 YWJbXSA9IHsgICAgICAgICAgIC8qIENvbG9ycyAqLworICAgIHsgImJsYWNrIiwgICAgICAgICAw LCAwICAgICAgfSwKKyAgICB7ICJibHVlIiwgICAgICAgICAgMSwgMCAgICAgIH0sCisgICAgeyAi YnJvd24iLCAgICAgICAgIDYsIDAgICAgICB9LAorICAgIHsgImN5YW4iLCAgICAgICAgICAzLCAw ICAgICAgfSwKKyAgICB7ICJkYXJrZ3JheSIsICAgICAgOCwgQ01fSU5WIH0sCisgICAgeyAiZGdy YXkiLCAgICAgICAgIDgsIDAgICAgICB9LAorICAgIHsgImdyZWVuIiwgICAgICAgICAyLCAwICAg ICAgfSwKKyAgICB7ICJsYmx1ZSIsICAgICAgICAgOSwgQ01fSU5WIH0sCisgICAgeyAibGN5YW4i LCAgICAgICAgMTEsIENNX0lOViB9LAorICAgIHsgImxncmF5IiwgICAgICAgICA3LCBDTV9JTlYg fSwKKyAgICB7ICJsZ3JlZW4iLCAgICAgICAxMCwgQ01fSU5WIH0sCisgICAgeyAibGlnaHRibHVl IiwgICAgIDksIDAgICAgICB9LAorICAgIHsgImxpZ2h0Y3lhbiIsICAgIDExLCAwICAgICAgfSwK KyAgICB7ICJsaWdodGdyYXkiLCAgICAgNywgMCAgICAgIH0sCisgICAgeyAibGlnaHRncmVlbiIs ICAgMTAsIDAgICAgICB9LAorICAgIHsgImxpZ2h0bWFnZW50YSIsIDEzLCAwICAgICAgfSwKKyAg ICB7ICJsaWdodHJlZCIsICAgICAxMiwgMCAgICAgIH0sCisgICAgeyAibG1hZ2VudGEiLCAgICAg MTMsIENNX0lOViB9LAorICAgIHsgImxyZWQiLCAgICAgICAgIDEyLCBDTV9JTlYgfSwKKyAgICB7 ICJtYWdlbnRhIiwgICAgICAgNSwgMCAgICAgIH0sCisgICAgeyAicmVkIiwgICAgICAgICAgIDQs IDAgICAgICB9LAorICAgIHsgIndoaXRlIiwgICAgICAgIDE1LCAwICAgICAgfSwKKyAgICB7ICJ5 ZWxsb3ciLCAgICAgICAxNCwgMCAgICAgIH0KK307CitpbnQgbmNscnMgPSAoc2l6ZW9mICh0dHlj bHJ0YWIpIC8gc2l6ZW9mIChzdHJ1Y3Qga2V5dGFiKSk7CisKK3N0cnVjdCBrZXl0YWIgdHR5Y3Vy dGFiW10gPSB7CisgICAgeyAiZnVsbCIsICAgICAgICBUVENfQkxPQ0ssIDAgfSwKKyAgICB7ICJo YWxmIiwgICAgICAgIFRUQ19IQUxGLCAgMCB9LAorICAgIHsgInVuZGVybGluZSIsICAgVFRDX1VM SU5FLCAwIH0KK307CitpbnQgbmN1cnNvcnMgPSAzOworCitzdHJ1Y3Qga2V5dGFiIHR0eXB0YWJb XSA9IHsKKyAgICB7ICJhYWEiLCAgICAgIFRUX0FBQSwgICAgIENNX0lOViB9LCAgICAgLyogQW5u QXJib3IgKi8KKyAgICB7ICJhZG0zYSIsICAgIFRUX0FETTNBLCAgIDAgfSwgICAgICAgICAgLyog TFNJIEFETS0zQSAqLworICAgIHsgImFkbTUiLCAgICAgVFRfQURNNSwgICAgMCB9LCAgICAgICAg ICAvKiBMU0kgQURNLTUgKi8KKyAgICB7ICJhaXh0ZXJtIiwgIFRUX0FJWFRFUk0sIDAgfSwgICAg ICAgICAgLyogSUJNIEFJWHRlcm0gKi8KKyAgICB7ICJhbm5hcmJvciIsIFRUX0FBQSwgICAgIDAg fSwgICAgICAgICAgLyogQW5uQXJib3IgKi8KKyAgICB7ICJhbnNpLWJicyIsIFRUX0FOU0ksICAg IDAgfSwgICAgICAgICAgLyogQU5TSS5TWVMgKEJCUykgKi8KKyAgICB7ICJhdDM4NiIsICAgIFRU X0FUMzg2LCAgIDAgfSwgICAgICAgICAgLyogVW5peHdhcmUgQU5TSSAqLworICAgIHsgImF2YXRh ci8wKyIsVFRfQU5TSSwgICAgMCB9LCAgICAgICAgICAvKiBBVkFUQVIvMCsgKi8KKyAgICB7ICJi YTgwIiwgICAgIFRUX0JBODAsICAgIDAgfSwgICAgICAgICAgLyogTml4ZG9yZiBCQTgwICovCisg ICAgeyAiYmUiLCAgICAgICBUVF9CRU9TLCAgICBDTV9JTlZ8Q01fQUJSIH0sCisgICAgeyAiYmVv cy1hbnNpIixUVF9CRU9TLCAgICBDTV9JTlYgfSwgICAgIC8qIEJlT1MgQU5TSSAqLworICAgIHsg ImJldGVybSIsICAgVFRfQkVPUywgICAgMCB9LCAgICAgICAgICAvKiBCZU9TIFRlcm1pbmFsIChh cyBvZiBQUjIgKSAqLworICAgIHsgImQyMDAiLCAgICAgVFRfREcyMDAsICAgQ01fSU5WfENNX0FC UiB9LCAvKiBEYXRhIEdlbmVyYWwgREFTSEVSIDIwMCAqLworICAgIHsgImQyMTAiLCAgICAgVFRf REcyMTAsICAgQ01fSU5WfENNX0FCUiB9LCAvKiBEYXRhIEdlbmVyYWwgREFTSEVSIDIxMCAqLwor ICAgIHsgImQyMTciLCAgICAgVFRfREcyMTcsICAgQ01fSU5WfENNX0FCUiB9LCAvKiBEYXRhIEdl bmVyYWwgREFTSEVSIDIxNyAqLworICAgIHsgImRnMjAwIiwgICAgVFRfREcyMDAsICAgMCB9LCAg ICAgICAgICAvKiBEYXRhIEdlbmVyYWwgREFTSEVSIDIwMCAqLworICAgIHsgImRnMjEwIiwgICAg VFRfREcyMTAsICAgMCB9LCAgICAgICAgICAvKiBEYXRhIEdlbmVyYWwgREFTSEVSIDIxMCAqLwor ICAgIHsgImRnMjE3IiwgICAgVFRfREcyMTcsICAgMCB9LCAgICAgICAgICAvKiBEYXRhIEdlbmVy YWwgREFTSEVSIDIxNyAqLworICAgIHsgImgxNTAwIiwgICAgVFRfSFpMMTUwMCwgQ01fSU5WIH0s ICAgICAvKiBIYXplbHRpbmUgMTUwMCAqLworICAgIHsgImgxOSIsICAgICAgVFRfSDE5LCAgICAg Q01fSU5WIH0sICAgICAvKiBIZWF0aC0xOSAqLworICAgIHsgImhlYXRoMTkiLCAgVFRfSDE5LCAg ICAgMCB9LCAgICAgICAgICAvKiBIZWF0aC0xOSAqLworICAgIHsgImhmdCIsICAgICAgVFRfSEZU LCAgICAgMCB9LCAgICAgICAgICAvKiBJQk0gSGlnaCBGdW5jdGlvbiBUZXJtaW5hbCAqLworICAg IHsgImhwMjYyMWEiLCAgVFRfSFAyNjIxLCAgMCB9LCAgICAgICAgICAvKiBIUCAyNjIxQSAqLwor ICAgIHsgImhwdGVybSIsICAgVFRfSFBURVJNLCAgMCB9LCAgICAgICAgICAvKiBIUCBURVJNICov CisgICAgeyAiaHoxNTAwIiwgICBUVF9IWkwxNTAwLCAwIH0sICAgICAgICAgIC8qIEhhemVsdGlu ZSAxNTAwICovCisgICAgeyAiaWJtMzE1MSIsICBUVF9JQk0zMSwgICAwIH0sICAgICAgICAgIC8q IElCTSAzMTAxLXh4LDMxNjEgKi8KKyAgICB7ICJsaW51eCIsICAgIFRUX0xJTlVYLCAgIDAgfSwg ICAgICAgICAgLyogTGludXggKi8KKyAgICB7ICJxYW5zaSIsICAgIFRUX1FBTlNJLCAgIDAgfSwg ICAgICAgICAgLyogUU5YIEFOU0kgKi8KKyAgICB7ICJxbngiLCAgICAgIFRUX1FOWCwgICAgIDAg fSwgICAgICAgICAgLyogUU5YIENvbnNvbGUgKi8KKyAgICB7ICJzY29hbnNpIiwgIFRUX1NDT0FO U0ksIDAgfSwgICAgICAgICAgLyogU0NPIEFOU0kgKi8KKyAgICB7ICJzbmktOTc4MDEiLFRUXzk3 ODAxLCAgIDAgfSwgICAgICAgICAgLyogU05JIDk3ODAxICovCisgICAgeyAic3VuIiwgICAgICBU VF9TVU4sICAgICAwIH0sICAgICAgICAgIC8qIFNVTiBDb25zb2xlICovCisvKgorICBUaGUgaWRl YSBvZiBOT05FIGlzIHRvIGxldCB0aGUgY29uc29sZSBkcml2ZXIgaGFuZGxlIHRoZSBlc2NhcGUg c2VxdWVuY2VzLAorICB3aGljaCwgaW4gdGhlb3J5IGF0IGxlYXN0LCB3b3VsZCBnaXZlIG5vdCBv bmx5IEFOU0kgZW11bGF0aW9uLCBidXQgYWxzbyBhbnkKKyAgb3RoZXIga2luZCBvZiBlbXVsYXRp b24gdGhhdCBtaWdodCBiZSBwcm92aWRlZCBieSBhbHRlcm5hdGl2ZSBjb25zb2xlCisgIGRyaXZl cnMsIGlmIGFueSBleGlzdGVkLgorCisgIEZvciB0aGlzIHRvIHdvcmssIGNrb2Nvbi5jIHdvdWxk IG5lZWQgdG8gYmUgbW9kaWZpZWQgdG8gbWFrZSBoaWdoZXItbGV2ZWwKKyAgY2FsbHMsIGxpa2Ug VmlvV3J0VFRZKCksIERvc1dyaXRlKCksIG9yIChzaW1wbHkpIHdyaXRlKCksIHJhdGhlciB0aGFu CisgIFZpb1dydCpDZWxsKCkgYW5kIHNpbWlsYXIsIGFuZCBpdCB3b3VsZCBhbHNvIGhhdmUgdG8g Z2l2ZSB1cCBpdHMgcm9sbGJhY2sKKyAgZmVhdHVyZSwgYW5kIGl0cyBzdGF0dXMgbGluZSBhbmQg aGVscCBzY3JlZW5zIHdvdWxkIGFsc28gaGF2ZSB0byBiZQorICBmb3Jnb3R0ZW4gb3IgZWxzZSBk b25lIGluIGFuIEFOU0kgd2F5LgorCisgIEFzIG1hdHRlcnMgc3RhbmQsIHdlIGFscmVhZHkgaGF2 ZSBwZXJmZWN0bHkgZ29vZCBBTlNJIGVtdWxhdGlvbiBidWlsdCBpbiwKKyAgYW5kIHRoZXJlIGFy ZSBubyBhbHRlcm5hdGl2ZSBjb25zb2xlIGRyaXZlcnMgYXZhaWxhYmxlLCBzbyB0aGVyZSBpcyBu byBwb2ludAorICBpbiBoYXZpbmcgYSB0ZXJtaW5hbCB0eXBlIG9mIE5PTkUsIHNvIGl0IGlzIGNv bW1lbnRlZCBvdXQuICBIb3dldmVyLCBzaG91bGQKKyAgeW91IHVuY29tbWVudCBpdCwgaXQgd2ls bCB3b3JrIGxpa2UgYSAiZ2xhc3MgdHR5IiAtLSBubyBlc2NhcGUgc2VxdWVuY2UKKyAgaW50ZXJw cmV0YXRpb24gYXQgYWxsOyBzb21ld2hhdCBzaW1pbGFyIHRvIGRlYnVnIG1vZGUsIGV4Y2VwdCB3 aXRob3V0IHRoZQorICBkZWJ1Z2dpbmcgKG5vIGhpZ2hsaWdodGluZyBvZiBjb250cm9sIGNoYXJz IG9yIGVzY2FwZSBzZXF1ZW5jZXMpOyBoZWxwCisgIHNjcmVlbnMsIHN0YXR1cyBsaW5lLCBhbmQg cm9sbGJhY2sgd2lsbCBzdGlsbCB3b3JrLgorKi8KKyNpZmRlZiBPUzJQTQorI2lmZGVmIENPTU1F TlQKKyAgICB7ICJ0ZWs0MDE0IiwgVFRfVEVLNDAsICAwIH0sCisjZW5kaWYgLyogQ09NTUVOVCAq LworI2VuZGlmIC8qIE9TMlBNICovCisgICAgeyAidHR5IiwgICAgIFRUX05PTkUsICAgMCB9LAor ICAgIHsgInR2aTkxMCsiLCBUVF9UVkk5MTAsIDAgfSwKKyAgICB7ICJ0dmk5MjUiLCAgVFRfVFZJ OTI1LCAwIH0sCisgICAgeyAidHZpOTUwIiwgIFRUX1RWSTk1MCwgMCB9LAorICAgIHsgInZjNDA0 IiwgICBUVF9WQzQ0MDQsIDAgfSwKKyAgICB7ICJ2YzQ0MDQiLCAgVFRfVkM0NDA0LCBDTV9JTlYg fSwKKyAgICB7ICJ2aXA3ODA5IiwgVFRfVklQNzgwOSwwIH0sCisgICAgeyAidnQxMDAiLCAgIFRU X1ZUMTAwLCAgMCB9LAorICAgIHsgInZ0MTAyIiwgICBUVF9WVDEwMiwgIDAgfSwKKyAgICB7ICJ2 dDIyMCIsICAgVFRfVlQyMjAsICAwIH0sCisgICAgeyAidnQyMjBwYyIsIFRUX1ZUMjIwUEMsMCB9 LAorICAgIHsgInZ0MzIwIiwgICBUVF9WVDMyMCwgIDAgfSwKKyAgICB7ICJ2dDMyMHBjIiwgVFRf VlQzMjBQQywwIH0sCisgICAgeyAidnQ1MiIsICAgIFRUX1ZUNTIsICAgMCB9LAorI2lmZGVmIE5U CisgICAgeyAidnRudCIsICAgIFRUX1ZUTlQsICAgMCB9LAorI2Vsc2UgLyogTlQgKi8KKyAgICB7 ICJ2dG50IiwgICAgVFRfVlROVCwgIENNX0lOViB9LAorI2VuZGlmIC8qIE5UICovCisgICAgeyAi d3kxNjAiLCAgIFRUX1dZMTYwLCAgMCB9LAorICAgIHsgInd5MzAiLCAgICBUVF9XWTMwLCAgIDAg fSwKKyAgICB7ICJ3eTM3MCIsICAgVFRfV1kzNzAsICAwIH0sCisgICAgeyAid3k1MCIsICAgIFRU X1dZNTAsICAgMCB9LAorICAgIHsgInd5NjAiLCAgICBUVF9XWTYwLCAgIDAgfSwKKyAgICB7ICJ3 eXNlMzAiLCAgVFRfV1kzMCwgICBDTV9JTlYgfSwKKyAgICB7ICJ3eXNlMzcwIiwgVFRfV1kzNzAs ICBDTV9JTlYgfSwKKyAgICB7ICJ3eXNlNTAiLCAgVFRfV1k1MCwgICBDTV9JTlYgfSwKKyAgICB7 ICJ3eXNlNjAiLCAgVFRfV1k2MCwgICBDTV9JTlYgfQorfTsKK2ludCBudHR5cCA9IChzaXplb2Yo dHR5cHRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpOworCitzdHJ1Y3Qga2V5dGFiIHR0a2V5 dGFiW10gPSB7CisgICAgeyAiYWFhIiwgICAgICAgVFRfQUFBLCAgICAgICAgQ01fSU5WIH0sICAg ICAgICAvKiBBbm5BcmJvciAqLworICAgIHsgImFkbTNhIiwgICAgIFRUX0FETTNBLCAgICAgIDAg fSwgICAgICAgICAgICAgLyogTFNJIEFETS0zQSAqLworICAgIHsgImFkbTUiLCAgICAgIFRUX0FE TTUsICAgICAgIDAgfSwgICAgICAgICAgICAgLyogTFNJIEFETS01ICovCisgICAgeyAiYWl4dGVy bSIsICAgVFRfQUlYVEVSTSwgICAgMCB9LCAgICAgICAgICAgICAvKiBJQk0gQUlYdGVybSAqLwor ICAgIHsgImFubmFyYm9yIiwgIFRUX0FBQSwgICAgICAgIDAgfSwgICAgICAgICAgICAgLyogQW5u QXJib3IgKi8KKyAgICB7ICJhbnNpLWJicyIsICBUVF9BTlNJLCAgICAgICAwIH0sICAgICAgICAg ICAgIC8qIEFOU0kuU1lTIChCQlMpICovCisgICAgeyAiYXQzODYiLCAgICAgVFRfQVQzODYsICAg ICAgMCB9LCAgICAgICAgICAgICAvKiBVbml4d2FyZSBBTlNJICovCisgICAgeyAiYXZhdGFyLzAr IiwgVFRfQU5TSSwgICAgICAgMCB9LCAgICAgICAgICAgICAvKiBBVkFUQVIvMCsgKi8KKyAgICB7 ICJiYTgwIiwgICAgICBUVF9CQTgwLCAgICAgICAwIH0sICAgICAgICAgICAgIC8qIE5peGRvcmYg QkE4MCAqLworICAgIHsgImJlIiwgICAgICAgIFRUX0JFT1MsICAgICAgIENNX0lOVnxDTV9BQlIg fSwKKyAgICB7ICJiZW9zLWFuc2kiLCBUVF9CRU9TLCAgICAgICBDTV9JTlYgfSwgICAgICAgIC8q IEJlT1MgQU5TSSAqLworICAgIHsgImJldGVybSIsICAgIFRUX0JFT1MsICAgICAgIDAgfSwgICAg ICAgICAgICAgLyogQmVPUyBUZXJtaW5hbCAoRFIyKSAqLworICAgIHsgImQyMDAiLCAgICAgIFRU X0RHMjAwLCAgICAgIENNX0lOVnxDTV9BQlIgfSwgLyogREcgREFTSEVSIDIwMCAqLworICAgIHsg ImQyMTAiLCAgICAgIFRUX0RHMjEwLCAgICAgIENNX0lOVnxDTV9BQlIgfSwgLyogREcgREFTSEVS IDIxMCAqLworICAgIHsgImQyMTciLCAgICAgIFRUX0RHMjE3LCAgICAgIENNX0lOVnxDTV9BQlIg fSwgLyogREcgREFTSEVSIDIxNyAqLworICAgIHsgImRnMjAwIiwgICAgIFRUX0RHMjAwLCAgICAg IDAgfSwgICAgICAgICAgICAgLyogREcgREFTSEVSIDIwMCAqLworICAgIHsgImRnMjEwIiwgICAg IFRUX0RHMjEwLCAgICAgIDAgfSwgICAgICAgICAgICAgLyogREcgREFTSEVSIDIxMCAqLworICAg IHsgImRnMjE3IiwgICAgIFRUX0RHMjE3LCAgICAgIDAgfSwgICAgICAgICAgICAgLyogREcgREFT SEVSIDIxNyAqLworICAgIHsgImVtYWNzIiwgICAgIFRUX0tCTV9FTUFDUywgIDAgfSwgICAgICAg ICAgICAgLyogRW1hY3MgbW9kZSAqLworICAgIHsgImgxOSIsICAgICAgIFRUX0gxOSwgICAgICAg IENNX0lOViB9LCAgICAgICAgLyogSGVhdGgtMTkgKi8KKyAgICB7ICJoZWF0aDE5IiwgICBUVF9I MTksICAgICAgICAwIH0sICAgICAgICAgICAgIC8qIEhlYXRoLTE5ICovCisgICAgeyAiaGVicmV3 IiwgICAgVFRfS0JNX0hFQlJFVywgMCB9LCAgICAgICAgICAgICAvKiBIZWJyZXcgbW9kZSAqLwor ICAgIHsgImhmdCIsICAgICAgIFRUX0hGVCwgICAgICAgIDAgfSwgICAgICAgICAgICAgLyogSUJN IEhpZ2ggRnVuY3Rpb24gVGVybSAqLworICAgIHsgImhwMjYyMWEiLCAgIFRUX0hQMjYyMSwgICAg IDAgfSwgICAgICAgICAgICAgLyogSFAgMjYyMUEgKi8KKyAgICB7ICJocHRlcm0iLCAgICBUVF9I UFRFUk0sICAgICAwIH0sICAgICAgICAgICAgIC8qIEhQIFRFUk0gKi8KKyAgICB7ICJoejE1MDAi LCAgICBUVF9IWkwxNTAwLCAgICAwIH0sICAgICAgICAgICAgIC8qIEhhemVsdGluZSAxNTAwICov CisgICAgeyAiaWJtMzE1MSIsICAgVFRfSUJNMzEsICAgICAgMCB9LCAgICAgICAgICAgICAvKiBJ Qk0gMzEwMS14eCwzMTYxICovCisgICAgeyAibGludXgiLCAgICAgVFRfTElOVVgsICAgICAgMCB9 LCAgICAgICAgICAgICAvKiBMaW51eCAqLworICAgIHsgInFhbnNpIiwgICAgIFRUX1FBTlNJLCAg ICAgIDAgfSwgICAgICAgICAgICAgLyogUU5YIEFOU0kgKi8KKyAgICB7ICJxbngiLCAgICAgICBU VF9RTlgsICAgICAgICAwIH0sICAgICAgICAgICAgIC8qIFFOWCAqLworICAgIHsgInJ1c3NpYW4i LCAgIFRUX0tCTV9SVVNTSUFOLDAgfSwgICAgICAgICAgICAgLyogUnVzc2lhbiBtb2RlICovCisg ICAgeyAic2NvYW5zaSIsICAgVFRfU0NPQU5TSSwgICAgMCB9LCAgICAgICAgICAgICAvKiBTQ08g QU5TSSAqLworICAgIHsgInNuaS05NzgwMSIsIFRUXzk3ODAxLCAgICAgIDAgfSwgICAgICAgICAg ICAgLyogU05JIDk3ODAxICovCisgICAgeyAic3VuIiwgICAgICAgVFRfU1VOLCAgICAgICAgMCB9 LCAgICAgICAgICAgICAvKiBTVU4gQ29uc29sZSAqLworI2lmZGVmIE9TMlBNCisjaWZkZWYgQ09N TUVOVAorICAgIHsgInRlazQwMTQiLCAgIFRUX1RFSzQwLCAgICAgIDAgfSwKKyNlbmRpZiAvKiBD T01NRU5UICovCisjZW5kaWYgLyogT1MyUE0gKi8KKyAgICB7ICJ0dHkiLCAgICAgICBUVF9OT05F LCAgICAgICAwIH0sCisgICAgeyAidHZpOTEwKyIsICAgVFRfVFZJOTEwLCAgICAgMCB9LAorICAg IHsgInR2aTkyNSIsICAgIFRUX1RWSTkyNSwgICAgIDAgfSwKKyAgICB7ICJ0dmk5NTAiLCAgICBU VF9UVkk5NTAsICAgICAwIH0sCisgICAgeyAidmM0MDQiLCAgICAgVFRfVkM0NDA0LCAgICAgMCB9 LAorICAgIHsgInZjNDQwNCIsICAgIFRUX1ZDNDQwNCwgICAgIENNX0lOViB9LAorICAgIHsgInZp cDc4MDkiLCAgIFRUX1ZJUDc4MDksICAgIDAgfSwKKyAgICB7ICJ2dDEwMCIsICAgICBUVF9WVDEw MCwgICAgICAwIH0sCisgICAgeyAidnQxMDIiLCAgICAgVFRfVlQxMDIsICAgICAgMCB9LAorICAg IHsgInZ0MjIwIiwgICAgIFRUX1ZUMjIwLCAgICAgIDAgfSwKKyAgICB7ICJ2dDIyMHBjIiwgICBU VF9WVDIyMFBDLCAgICAwIH0sCisgICAgeyAidnQzMjAiLCAgICAgVFRfVlQzMjAsICAgICAgMCB9 LAorICAgIHsgInZ0MzIwcGMiLCAgIFRUX1ZUMzIwUEMsICAgIDAgfSwKKyAgICB7ICJ2dDUyIiwg ICAgICBUVF9WVDUyLCAgICAgICAwIH0sCisgICAgeyAidnRudCIsICAgICAgVFRfVlROVCwgICAg ICAgQ01fSU5WIH0sCisgICAgeyAid3AiLCAgICAgICAgVFRfS0JNX1dQLCAgICAgMCB9LCAgICAg ICAgICAgICAvKiBXb3JkIFBlcmZlY3QgbW9kZSAqLworICAgIHsgInd5MTYwIiwgICAgIFRUX1dZ MTYwLCAgICAgIDAgfSwKKyAgICB7ICJ3eTMwIiwgICAgICBUVF9XWTMwLCAgICAgICAwIH0sCisg ICAgeyAid3kzNzAiLCAgICAgVFRfV1kzNzAsICAgICAgMCB9LAorICAgIHsgInd5NTAiLCAgICAg IFRUX1dZNTAsICAgICAgIDAgfSwKKyAgICB7ICJ3eTYwIiwgICAgICBUVF9XWTYwLCAgICAgICAw IH0sCisgICAgeyAid3lzZTMwIiwgICAgVFRfV1kzMCwgICAgICAgQ01fSU5WIH0sCisgICAgeyAi d3lzZTM3MCIsICAgVFRfV1kzNzAsICAgICAgQ01fSU5WIH0sCisgICAgeyAid3lzZTUwIiwgICAg VFRfV1k1MCwgICAgICAgQ01fSU5WIH0sCisgICAgeyAid3lzZTYwIiwgICAgVFRfV1k2MCwgICAg ICAgQ01fSU5WIH0KK307CitpbnQgbnR0a2V5ID0gKHNpemVvZih0dGtleXRhYikgLyBzaXplb2Yo c3RydWN0IGtleXRhYikpOworCisjaWZuZGVmIE5PU0VUS0VZCitzdHJ1Y3Qga2V5dGFiIGtibW9k dGFiW10gPSB7CisgICAgeyAiZW1hY3MiLCAgIEtCTV9FTSwgMCAgICAgIH0sCisgICAgeyAiZW5n bGlzaCIsIEtCTV9FTiwgQ01fSU5WIH0sCisgICAgeyAiaGVicmV3IiwgIEtCTV9IRSwgMCAgICAg IH0sCisgICAgeyAibm9ybWFsIiwgIEtCTV9FTiwgMCAgICAgIH0sCisgICAgeyAibm9uZSIsICAg IEtCTV9FTiwgQ01fSU5WIH0sCisgICAgeyAicnVzc2lhbiIsIEtCTV9SVSwgMCAgICAgIH0sCisg ICAgeyAid3AiLCAgICAgIEtCTV9XUCwgMCAgICAgIH0KK307CitpbnQgbmtibW9kdGFiID0gKHNp emVvZihrYm1vZHRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpOworI2VuZGlmIC8qIE5PU0VU S0VZICovCisjZW5kaWYgLyogTk9MT0NBTCAqLworCitpbnQgdHRfaW5wYWNpbmcgPSAwOyAgICAg ICAgICAgICAgICAgICAgLyogaW5wdXQtcGFjaW5nIChub25lKSAqLworCitzdHJ1Y3Qga2V5dGFi IHBydHl0YWJbXSA9IHsgLyogT1MvMiBQcmlvcml0eSBMZXZlbHMgKi8KKyAgICB7ICJmb3JlZ3Jv dW5kLXNlcnZlciIsIFhZUF9TUlYsIDAgICAgICAgfSwKKyAgICB7ICJpZGxlIiwgICAgICAgICAg ICAgIFhZUF9JRExFLCBDTV9JTlYgfSwKKyAgICB7ICJyZWd1bGFyIiwgICAgICAgICAgIFhZUF9S RUcsIDAgICAgICAgfSwKKyAgICB7ICJ0aW1lLWNyaXRpY2FsIiwgICAgIFhZUF9SVFAsIDAgICAg ICAgfQorfTsKK2ludCBucHJ0eSA9IChzaXplb2YocHJ0eXRhYikgLyBzaXplb2Yoc3RydWN0IGtl eXRhYikpOworI2VuZGlmIC8qIE9TMiAqLworCisjaWZkZWYgTlQKK3N0cnVjdCBrZXl0YWIgd2lu OTV0YWJbXSA9IHsgLyogV2luOTUgd29yay1hcm91bmRzICovCisgICAgeyAiOC4zLWZpbGVuYW1l cyIsICAgICAgICAgWFlXOF8zLCAgICAwIH0sCisgICAgeyAiYWx0LWdyIiwgICAgICAgICAgICAg ICAgWFlXQUdSLCAgICAwIH0sCisgICAgeyAiaG9yaXpvbnRhbC1zY2FuLWxpbmUtc3Vic3RpdHV0 aW9ucyIsIFhZV0hTTCwgMCB9LAorICAgIHsgImtleWJvYXJkLXRyYW5zbGF0aW9uIiwgIFhZV0tF WSwgICAgMCB9LAorICAgIHsgImx1Y2lkYS1zdWJzdGl0dXRpb25zIiwgIFhZV0xVQywgICAgMCB9 LAorICAgIHsgIm92ZXJsYXBwZWQtaW8iLCAgICAgICAgIFhZV09JTywgICAgMCB9LAorICAgIHsg InBvcHVwcyIsICAgICAgICAgICAgICAgIFhZV1BPUFVQLCAgMCB9LAorICAgIHsgInNlbGVjdC1i dWciLCAgICAgICAgICAgIFhZV1NFTEVDVCwgMCB9Cit9OworaW50IG53aW45NSA9IChzaXplb2Yo d2luOTV0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKKyNlbmRpZiAvKiBOVCAqLworCisj aWZkZWYgT1MyTU9VU0UKK2V4dGVybiBpbnQgd2lkZXJlc3VsdDsKK2ludCB0dF9tb3VzZSA9IDE7 ICAgICAgICAgICAgICAgICAgICAgICAvKiBUZXJtaW5hbCBtb3VzZSBvbi9vZmYgKi8KKworc3Ry dWN0IGtleXRhYiBtb3VzZXRhYltdID0geyAgICAgICAgICAgIC8qIE1vdXNlIGl0ZW1zICovCisg ICAgeyAiYWN0aXZhdGUiLCBYWU1fT04sICAgICAwIH0sCisgICAgeyAiYnV0dG9uIiwgICBYWU1f QlVUVE9OLCAwIH0sCisgICAgeyAiY2xlYXIiLCAgICBYWU1fQ0xFQVIsICAwIH0sCisgICAgeyAi ZGVidWciLCAgICBYWU1fREVCVUcsICAwIH0KK307CitpbnQgbm10YWIgPSAoc2l6ZW9mKG1vdXNl dGFiKS9zaXplb2Yoc3RydWN0IGtleXRhYikpOworCitzdHJ1Y3Qga2V5dGFiIG1vdXNlYnV0dG9u dGFiW10gPSB7ICAgICAgLyogZXZlbnQgYnV0dG9uICovCisgICAgeyAiMSIsICAgICAgICAgICAg IFhZTV9CMSwgMCB9LAorICAgIHsgIjIiLCAgICAgICAgICAgICBYWU1fQjIsIDAgfSwKKyAgICB7 ICIzIiwgICAgICAgICAgICAgWFlNX0IzLCAwIH0sCisgICAgeyAib25lIiwgICAgICAgICAgIFhZ TV9CMSwgQ01fSU5WIH0sCisgICAgeyAidGhyZWUiLCAgICAgICAgIFhZTV9CMywgQ01fSU5WIH0s CisgICAgeyAidHdvIiwgICAgICAgICAgIFhZTV9CMiwgQ01fSU5WIH0KK307CitpbnQgbm1idGFi ID0gKHNpemVvZihtb3VzZWJ1dHRvbnRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpOworCitz dHJ1Y3Qga2V5dGFiIG1vdXNlbW9kdGFiW10gPSB7ICAgICAgICAgLyogZXZlbnQgYnV0dG9uIGtl eSBtb2RpZmllciAqLworICAgIHsgImFsdCIsICAgICAgICAgICAgICBYWU1fQUxULCAgIDAgfSwK KyAgICB7ICJhbHQtc2hpZnQiLCAgICAgICAgWFlNX1NISUZUfFhZTV9BTFQsIDAgfSwKKyAgICB7 ICJjdHJsIiwgICAgICAgICAgICAgWFlNX0NUUkwsICAwIH0sCisgICAgeyAiY3RybC1hbHQiLCAg ICAgICAgIFhZTV9DVFJMfFhZTV9BTFQsIDAgfSwKKyAgICB7ICJjdHJsLWFsdC1zaGlmdCIsICAg WFlNX0NUUkx8WFlNX1NISUZUfFhZTV9BTFQsIDAgfSwKKyAgICB7ICJjdHJsLXNoaWZ0IiwgICAg ICAgWFlNX0NUUkx8WFlNX1NISUZULCAwIH0sCisgICAgeyAibm9uZSIsICAgICAgICAgICAgIDAs IDAgfSwKKyAgICB7ICJzaGlmdCIsICAgICAgICAgICAgWFlNX1NISUZULCAwIH0KK307CitpbnQg bm1tdGFiID0gKHNpemVvZihtb3VzZW1vZHRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpOwor CitzdHJ1Y3Qga2V5dGFiIG1jbGlja3RhYltdID0geyAgICAgICAgICAgLyogZXZlbnQgYnV0dG9u IGNsaWNrIG1vZGlmaWVyICovCisgICAgeyAiY2xpY2siLCAgICAgICAgWFlNX0MxLCAgIDAgfSwK KyAgICB7ICJkcmFnIiwgICAgICAgICBYWU1fRFJBRywgMCB9LAorICAgIHsgImRvdWJsZS1jbGlj ayIsIFhZTV9DMiwgICAwIH0KK307CitpbnQgbm1jdGFiID0gKHNpemVvZihtY2xpY2t0YWIpIC8g c2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKKworI2lmbmRlZiBOT0tWRVJCUworZXh0ZXJuIGludCBu a3ZlcmJzOworZXh0ZXJuIHN0cnVjdCBrZXl0YWIga3ZlcmJzW107CisjZW5kaWYgLyogTk9LVkVS QlMgKi8KKyNlbmRpZiAvKiBPUzJNT1VTRSAqLworCisvKiAjaWZkZWYgVk1TICovCitzdHJ1Y3Qg a2V5dGFiIGZidGFiW10gPSB7ICAgICAgICAgICAgICAgLyogQmluYXJ5IHJlY29yZCB0eXBlcyBm b3IgVk1TICovCisgICAgeyAiZml4ZWQiLCAgICAgWFlGVF9CLCAwIH0sICAgICAgICAgLyogRml4 ZWQgaXMgbm9ybWFsIGZvciBiaW5hcnkgKi8KKyAgICB7ICJ1bmRlZmluZWQiLCBYWUZUX1UsIDAg fSAgICAgICAgICAvKiBVbmRlZmluZWQgaWYgdGhleSBhc2sgZm9yIGl0ICovCit9OworaW50IG5m YnR5cCA9IChzaXplb2YoZmJ0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKKy8qICNlbmRp ZiAqLworCisjaWZkZWYgVk1TCitzdHJ1Y3Qga2V5dGFiIGxibHRhYltdID0geyAgICAgICAgICAg ICAgLyogTGFiZWxlZCBGaWxlIGluZm8gKi8KKyAgICB7ICJhY2wiLCAgICAgICAgIExCTF9BQ0ws IDAgfSwKKyAgICB7ICJiYWNrdXAtZGF0ZSIsIExCTF9CQ0ssIDAgfSwKKyAgICB7ICJuYW1lIiwg ICAgICAgIExCTF9OQU0sIDAgfSwKKyAgICB7ICJvd25lciIsICAgICAgIExCTF9PV04sIDAgfSwK KyAgICB7ICJwYXRoIiwgICAgICAgIExCTF9QVEgsIDAgfQorfTsKK2ludCBubGJscCA9IChzaXpl b2YobGJsdGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7CisjZWxzZQorI2lmZGVmIE9TMgor c3RydWN0IGtleXRhYiBsYmx0YWJbXSA9IHsgICAgICAgICAgICAgIC8qIExhYmVsZWQgRmlsZSBp bmZvICovCisgICAgeyAiYXJjaGl2ZSIsICAgTEJMX0FSQywgMCB9LAorICAgIHsgImV4dGVuZGVk IiwgIExCTF9FWFQsIDAgfSwKKyAgICB7ICJoaWRkZW4iLCAgICBMQkxfSElELCAwIH0sCisgICAg eyAicmVhZC1vbmx5IiwgTEJMX1JPLCAgMCB9LAorICAgIHsgInN5c3RlbSIsICAgIExCTF9TWVMs IDAgfQorfTsKK2ludCBubGJscCA9IChzaXplb2YobGJsdGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5 dGFiKSk7CisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogVk1TICovCisKKyNpZmRlZiBDS19D VVJTRVMKKyNpZmRlZiBDS19QQ1RfQkFSCitzdGF0aWMgc3RydWN0IGtleXRhYiBmZGZ0YWJbXSA9 IHsgICAgICAgLyogU0VUIEZJTEUgRElTUExBWSBGVUxMIG9wdGlvbnMgKi8KKyAgICB7ICJ0aGVy bW9tZXRlciIsICAgIDEsIDAsIH0sCisgICAgeyAibm8tdGhlcm1vbWV0ZXIiLCAwLCAwICB9Cit9 OworZXh0ZXJuIGludCB0aGVybW9tZXRlcjsKKyNlbmRpZiAvKiBDS19QQ1RfQkFSICovCisjZW5k aWYgLyogQ0tfQ1VSU0VTICovCisKK3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIGZkdGFiW10gPSB7ICAg ICAgICAvKiBTRVQgRklMRSBESVNQTEFZIG9wdGlvbnMgKi8KKyNpZmRlZiBNQUMgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBNYWNpbnRvc2ggKi8KKyAgICB7ICJmdWxsc2NyZWVuIiwg WFlGRF9SLCAgICAgIDAgfSwgICAvKiBGdWxsLXNjcmVlbiBidXQgbm90IGN1cnNlcyAqLworICAg IHsgIm5vbmUiLCAgICAgICBYWUZEX04sICAgICAgMCB9LAorICAgIHsgIm9mZiIsICAgICAgICBY WUZEX04sIENNX0lOViB9LAorICAgIHsgIm9uIiwgICAgICAgICBYWUZEX1IsIENNX0lOViB9LAor ICAgIHsgInF1aWV0IiwgICAgICBYWUZEX04sIENNX0lOViB9LAorI2Vsc2UgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIE5vdCBNYWMgKi8KKyAgICB7ICJicmllZiIsIFhZRkRf QiwgMCB9LCAgICAgICAgICAgICAvKiBCcmllZiAqLworICAgIHsgImNydCIsIFhZRkRfUywgMCB9 LCAgICAgICAgICAgICAgIC8qIENSVCBkaXNwbGF5ICovCisjaWZkZWYgQ0tfQ1VSU0VTCisjaWZk ZWYgQ09NTUVOVAorICAgIHsgImN1cnNlcyIsICAgICBYWUZEX0MsICBDTV9JTlYgfSwgIC8qIEZ1 bGwtc2NyZWVuLCBjdXJzZXMgKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgeyAiZnVsbHNj cmVlbiIsIFhZRkRfQywgIDAgfSwgICAgICAgLyogRnVsbC1zY3JlZW4sIHdoYXRldmVyIHRoZSBt ZXRob2QgKi8KKyNlbmRpZiAvKiBDS19DVVJTRVMgKi8KKyNpZmRlZiBLVUkKKyAgICB7ICJndWki LCAgICBYWUZEX0csIDAgfSwgICAgICAgICAgICAvKiBHVUkgKi8KKyNlbmRpZiAvKiBLVUkgKi8g ICAgICAgIAorICAgIHsgIm5vbmUiLCAgIFhZRkRfTiwgMCAgICAgIH0sICAgICAgIC8qIE5vIGRp c3BsYXkgKi8KKyAgICB7ICJvZmYiLCAgICBYWUZEX04sIENNX0lOViB9LCAgICAgICAvKiBEaXR0 byAqLworICAgIHsgIm9uIiwgICAgIFhZRkRfUiwgQ01fSU5WIH0sICAgICAgIC8qIE9uID0gU2Vy aWFsICovCisgICAgeyAicXVpZXQiLCAgWFlGRF9OLCBDTV9JTlYgfSwgICAgICAgLyogTm8gZGlz cGxheSAqLworICAgIHsgInNlcmlhbCIsIFhZRkRfUiwgMCAgICAgIH0sICAgICAgIC8qIFNlcmlh bCAqLworI2VuZGlmIC8qIE1BQyAqLworICAgIHsgIiIsIDAsIDAgfQorfTsKK2ludCBuZmR0YWIg PSAoc2l6ZW9mKGZkdGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSkgLSAxOworCitzdHJ1Y3Qg a2V5dGFiIHJzcnRhYltdID0geyAgICAgICAgICAgICAgLyogRm9yIFJFTU9URSBTRVQgUkVDRUlW RSAqLworICAgIHsgInBhY2tldC1sZW5ndGgiLCBYWUxFTiwgIDAgfSwKKyAgICB7ICJ0aW1lb3V0 IiwgICAgICAgWFlUSU1PLCAwIH0KK307CitpbnQgbnJzcnRhYiA9IChzaXplb2YocnNydGFiKSAv IHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7CisKKy8qIFNlbmQvUmVjZWl2ZSBQYXJhbWV0ZXJzICov CisKK3N0cnVjdCBrZXl0YWIgc3J0YWJbXSA9IHsKKyAgICB7ICJiYWNrdXAiLCBYWUJVUCwgMCB9 LAorI2lmbmRlZiBOT0NTRVRTCisgICAgeyAiY2hhcmFjdGVyLXNldC1zZWxlY3Rpb24iLCBYWUNT RVQsIDAgfSwKKyNlbmRpZiAvKiBOT0NTRVRTICovCisgICAgeyAiY29udHJvbC1wcmVmaXgiLCBY WVFDVEwsIDAgfSwKKyNpZmRlZiBDS1hYQ0hBUgorICAgIHsgImRvdWJsZS1jaGFyYWN0ZXIiLCBY WURCTCwgMCB9LAorI2VuZGlmIC8qIENLWFhDSEFSICovCisgICAgeyAiZW5kLW9mLXBhY2tldCIs IFhZRU9MLCAwIH0sCisjaWZkZWYgUElQRVNFTkQKKyAgICB7ICJmaWx0ZXIiLCBYWUZMVFIsIDAg fSwKKyNlbmRpZiAvKiBQSVBFU0VORCAqLworI2lmZGVmIENLWFhDSEFSCisgICAgeyAiaWdub3Jl LWNoYXJhY3RlciIsIFhZSUdOLCAwIH0sCisjZW5kaWYgLyogQ0tYWENIQVIgKi8KKyAgICB7ICJp LXBhY2tldHMiLCA5OTMsIDAgfSwKKyAgICB7ICJtb3ZlLXRvIiwgWFlNT1ZFLCAwIH0sCisgICAg eyAibmVnb3RpYXRpb24tc3RyaW5nLW1heC1sZW5ndGgiLCBYWUlOSUwsIENNX0lOViB9LAorICAg IHsgInBhY2tldC1sZW5ndGgiLCBYWUxFTiwgMCB9LAorICAgIHsgInBhZC1jaGFyYWN0ZXIiLCBY WVBBREMsIDAgfSwKKyAgICB7ICJwYWRkaW5nIiwgWFlOUEFELCAwIH0sCisgICAgeyAicGF0aG5h bWVzIiwgWFlGUEFUSCwgMCB9LAorICAgIHsgInBhdXNlIiwgWFlQQVVTLCAwIH0sCisjaWZkZWYg Q0tfUEVSTVMKKyAgICB7ICJwZXJtaXNzaW9ucyIsIDk5NCwgMH0sCQkvKiAyMDYgKi8KKyNlbmRp ZiAvKiBDS19QRVJNUyAqLworICAgIHsgInF1b3RlIiwgWFlRQ1RMLCBDTV9JTlYgfSwgICAgICAg IC8qID0gQ09OVFJPTC1QUkVGSVggKi8KKyAgICB7ICJyZW5hbWUtdG8iLCBYWVJFTkFNRSwgMCB9 LAorICAgIHsgInN0YXJ0LW9mLXBhY2tldCIsIFhZTUFSSywgMCB9LAorICAgIHsgInRpbWVvdXQi LCBYWVRJTU8sIDAgfSwKKyNpZmRlZiBWTVMKKyAgICB7ICJ2ZXJzaW9uLW51bWJlcnMiLCA4ODcs IDAgfSwgICAgICAvKiBWTVMgdmVyc2lvbiBudW1iZXJzICovCisjZW5kaWYgLyogVk1TICovCisg ICAgeyAiIiwgMCwgMCB9Cit9OworaW50IG5zcnRhYiA9IChzaXplb2Yoc3J0YWIpIC8gc2l6ZW9m KHN0cnVjdCBrZXl0YWIpKSAtIDE7CisKKyNpZmRlZiBVTklDT0RFCisjZGVmaW5lIFVDU19CT00g MQorI2RlZmluZSBVQ1NfQllUIDIKK3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIHVjc3RhYltdID0gewor ICAgIHsgImJvbSIsICAgICAgICBVQ1NfQk9NLCAwIH0sCisgICAgeyAiYnl0ZS1vcmRlciIsIFVD U19CWVQsIDAgfSwKKyAgICB7ICIiLCAwLCAwIH0KK307CitpbnQgbnVjc3RhYiA9IChzaXplb2Yo dWNzdGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSkgLSAxOworCitzdGF0aWMgc3RydWN0IGtl eXRhYiBib3RhYltdID0geworICAgIHsgImJpZy1lbmRpYW4iLCAgICAwLCAwIH0sCisgICAgeyAi bGl0dGxlLWVuZGlhbiIsIDEsIDAgfQorfTsKK3N0YXRpYyBpbnQgbmJvdGFiID0gMjsKKyNlbmRp ZiAvKiBVTklDT0RFICovCisKKy8qIFJFTU9URSBTRVQgKi8KKworc3RydWN0IGtleXRhYiBybXN0 YWJbXSA9IHsKKyAgICB7ICJhdHRyaWJ1dGVzIiwgIFhZQVRUUiwgMCAgICAgIH0sCisgICAgeyAi YmxvY2stY2hlY2siLCBYWUNIS1QsIDAgICAgICB9LAorICAgIHsgImZpbGUiLCAgICAgICAgWFlG SUxFLCAwICAgICAgfSwKKyAgICB7ICJpbmNvbXBsZXRlIiwgIFhZSUZELCAgQ01fSU5WIH0sICAv KiA9IFJFTU9URSBTRVQgRklMRSBJTkNPTVBMRVRFICovCisgICAgeyAibWF0Y2giLCAgICAgICBY WU1BVENILDAgICAgICB9LAorICAgIHsgInJlY2VpdmUiLCAgICAgWFlSRUNWLCAwICAgICAgfSwK KyAgICB7ICJyZXRyeSIsICAgICAgIFhZUkVUUiwgMCAgICAgIH0sCisgICAgeyAic2VydmVyIiwg ICAgICBYWVNFUlYsIDAgICAgICB9LAorICAgIHsgInRyYW5zZmVyIiwgICAgWFlYRkVSLCAwICAg ICAgfSwKKyAgICB7ICJ3aW5kb3ciLCAgICAgIFhZV0lORCwgMCAgICAgIH0sCisgICAgeyAieGZl ciIsICAgICAgICBYWVhGRVIsIENNX0lOViB9Cit9OworaW50IG5ybXMgPSAoc2l6ZW9mKHJtc3Rh YikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpOworCitzdHJ1Y3Qga2V5dGFiIGF0dHJ0YWJbXSA9 IHsKKyNpZmRlZiBTVFJBVFVTCisgICAgeyAiYWNjb3VudCIsICAgICAgIEFUX0FDQ1QsIDAgfSwK KyNlbmRpZiAvKiBTVFJBVFVTICovCisgICAgeyAiYWxsIiwgICAgICAgICAgIEFUX1hBTEwsIDAg fSwKKyNpZmRlZiBDT01NRU5UCisgICAgeyAiYmxvY2tzaXplIiwgICAgIEFUX0JMS1MsIDAgfSwg ICAgLyogKG5vdCB1c2VkKSAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyNpZm5kZWYgTk9DU0VU UworICAgIHsgImNoYXJhY3Rlci1zZXQiLCBBVF9FTkNPLCAwIH0sCisjZW5kaWYgLyogTk9DU0VU UyAqLworI2lmZGVmIFNUUkFUVVMKKyAgICB7ICJjcmVhdG9yIiwgICAgICAgQVRfQ1JFQSwgMCB9 LAorI2VuZGlmIC8qIFNUUkFUVVMgKi8KKyAgICB7ICJkYXRlIiwgICAgICAgICAgQVRfREFURSwg MCB9LAorICAgIHsgImRpc3Bvc2l0aW9uIiwgICBBVF9ESVNQLCAwIH0sCisgICAgeyAiZW5jb2Rp bmciLCAgICAgIEFUX0VOQ08sIENNX0lOViB9LAorICAgIHsgImZvcm1hdCIsICAgICAgICBBVF9S RUNGLCBDTV9JTlYgfSwKKyAgICB7ICJsZW5ndGgiLCAgICAgICAgQVRfTEVOSywgMCB9LAorICAg IHsgIm9mZiIsICAgICAgICAgICBBVF9BTExOLCAwIH0sCisgICAgeyAib24iLCAgICAgICAgICAg IEFUX0FMTFksIDAgfSwKKyNpZmRlZiBDT01NRU5UCisgICAgeyAib3Mtc3BlY2lmaWMiLCAgIEFU X1NZU1AsIDAgfSwgICAgLyogKG5vdCB1c2VkIGJ5IFVOSVggb3IgVk1TKSAqLworI2VuZGlmIC8q IENPTU1FTlQgKi8KKyNpZmRlZiBDS19QRVJNUworICAgIHsgInByb3RlY3Rpb24iLCAgICBBVF9M UFJPLCAwIH0sCisgICAgeyAicGVybWlzc2lvbnMiLCAgIEFUX0xQUk8sIENNX0lOViB9LAorI2Vu ZGlmIC8qIENLX1BFUk1TICovCisgICAgeyAicmVjb3JkLWZvcm1hdCIsIEFUX1JFQ0YsIDAgfSwK KyAgICB7ICJzeXN0ZW0taWQiLCAgICAgQVRfU1lTSSwgMCB9LAorICAgIHsgInR5cGUiLCAgICAg ICAgICBBVF9GVFlQLCAwIH0KK307CitpbnQgbmF0ciA9IChzaXplb2YoYXR0cnRhYikgLyBzaXpl b2Yoc3RydWN0IGtleXRhYikpOyAvKiBob3cgbWFueSBhdHRyaWJ1dGVzICovCisKKyNpZmRlZiBD S1RJRExFCitzdHJ1Y3Qga2V5dGFiIGlkbGFjdHNbXSA9IHsKKyAgICB7ICJleGl0IiwgICAgICAg SURMRV9FWElULCAwIH0sCisgICAgeyAiaGFuZ3VwIiwgICAgIElETEVfSEFORywgMCB9LAorICAg IHsgIm91dHB1dCIsICAgICBJRExFX09VVCwgIDAgfSwKKyAgICB7ICJyZXR1cm4iLCAgICAgSURM RV9SRVQsICAwIH0sCisjaWZkZWYgVE5DT0RFCisgICAgeyAidGVsbmV0LW5vcCIsIElETEVfVE5P UCwgMCB9LAorICAgIHsgInRlbG5ldC1heXQiLCBJRExFX1RBWVQsIDAgfSwKKyNlbmRpZiAvKiBU TkNPREUgKi8KKyAgICB7ICIiLCAwLCAwIH0KK307CitpbnQgbmlkbGFjdHMgPSAoc2l6ZW9mKGlk bGFjdHMpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKSAtIDE7CisjZW5kaWYgLyogQ0tUSURMRSAq LworCisjaWZuZGVmIE5PU1BMCitleHRlcm4gaW50IGluZGVmLCBpbmVjaG8sIGluc2lsZW5jZSwg aW5idWZzaXplLCBpbmF1dG9kbCwgaW5pbnRyOworI2lmZGVmIENLRkxPQVQKK2V4dGVybiBDS0ZM T0FUIGluc2NhbGU7CisjZW5kaWYJLyogQ0tGTE9BVCAqLworZXh0ZXJuIGNoYXIgKiBpbnBidWYs ICogaW5wYnA7CisjaWZkZWYgT1MyCitleHRlcm4gaW50IGludGVybTsKKyNlbmRpZiAvKiBPUzIg Ki8KK3N0cnVjdCBrZXl0YWIgaW5wdGFiW10gPSB7ICAgICAgICAgICAgICAvKiBTRVQgSU5QVVQg cGFyYW1ldGVycyAqLworI2lmZGVmIENLX0FVVE9ETAorICAgIHsgImF1dG9kb3dubG9hZCIsICAg IElOX0FETCwgMCB9LAorI2VuZGlmIC8qIENLX0FVVE9ETCAqLworICAgIHsgImJ1ZmZlci1sZW5n dGgiLCAgIElOX0JVRiwgMCB9LAorICAgIHsgImNhbmNlbGxhdGlvbiIsICAgIElOX0NBTiwgMCB9 LAorICAgIHsgImNhc2UiLCAgICAgICAgICAgIElOX0NBUywgMCB9LAorICAgIHsgImRlZmF1bHQt dGltZW91dCIsIElOX0RFRiwgQ01fSU5WIH0sIC8qIFRoZXJlIGlzIG5vIGRlZmF1bHQgdGltZW91 dCAqLworICAgIHsgImVjaG8iLCAgICAgICAgICAgIElOX0VDSCwgMCB9LAorI2lmZGVmIE9TMgor ICAgIHsgInBhY2luZyIsICAgICAgICAgIElOX1BBQywgQ01fSU5WIH0sCisjZW5kaWYgLyogT1My ICovCisgICAgeyAic2NhbGUtZmFjdG9yIiwgICAgSU5fU0NBLCAwIH0sCisgICAgeyAic2lsZW5j ZSIsICAgICAgICAgSU5fU0lMLCAwIH0sCisjaWZkZWYgT1MyCisgICAgeyAidGVybWluYWwiLCAg ICAgICAgSU5fVFJNLCAwIH0sCisjZW5kaWYgLyogT1MyICovCisgICAgeyAidGltZW91dC1hY3Rp b24iLCAgSU5fVElNLCAwIH0KK307CitpbnQgbmlucCA9IChzaXplb2YoaW5wdGFiKSAvIHNpemVv ZihzdHJ1Y3Qga2V5dGFiKSk7CisKK3N0cnVjdCBrZXl0YWIgaW50aW10W10gPSB7ICAgICAgICAg ICAgICAvKiBTRVQgSU5QVVQgVElNRU9VVCBwYXJhbWV0ZXJzICovCisgICAgeyAicHJvY2VlZCIs IDAsIDAgfSwgICAgICAgICAgICAgICAgLyogMCA9IHByb2NlZWQgKi8KKyAgICB7ICJxdWl0Iiwg ICAgMSwgMCB9ICAgICAgICAgICAgICAgICAvKiAxID0gcXVpdCAqLworfTsKKworc3RydWN0IGtl eXRhYiBpbmNhc3RbXSA9IHsgICAgICAgICAgICAgIC8qIFNFVCBJTlBVVCBDQVNFIHBhcmFtZXRl cnMgKi8KKyAgICB7ICJpZ25vcmUiLCAgMCwgMCB9LCAgICAgICAgICAgICAgICAvKiAwID0gaWdu b3JlICovCisgICAgeyAib2JzZXJ2ZSIsIDEsIDAgfSAgICAgICAgICAgICAgICAgLyogMSA9IG9i c2VydmUgKi8KK307CisjZW5kaWYgLyogTk9TUEwgKi8KKworc3RydWN0IGtleXRhYiBuYWJsdGFi W10gPSB7ICAgICAgICAgICAgIC8qIEZvciBhbnkgY29tbWFuZCB0aGF0IG5lZWRzICovCisgICAg eyAiZGlzYWJsZWQiLCAwLCAwIH0sCisgICAgeyAiZW5hYmxlZCIsICAxLCAwIH0sCisgICAgeyAi b2ZmIiwgICAgICAwLCBDTV9JTlYgfSwgICAgICAgICAgLyogdGhlc2Uga2V5d29yZHMuLi4gKi8K KyAgICB7ICJvbiIsICAgICAgIDEsIENNX0lOViB9Cit9OworaW50IG5uYWJsdGFiID0gc2l6ZW9m KG5hYmx0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpOworCisjaWZkZWYgT1MyCitzdHJ1Y3Qg a2V5dGFiIHR2Y3RhYltdID0geyAgICAgICAgICAgICAgLyogU0VUIFRFUk0gVklERU8tQ0hBTkdF ICovCisgICAgeyAiZGlzYWJsZWQiLCAgICAgVFZDX0RJUywgMCB9LAorICAgIHsgImVuYWJsZWQi LCAgICAgIFRWQ19FTkEsIDAgfSwKKyNpZmRlZiBOVAorICAgIHsgIndpbjk1LXNhZmUiLCAgIFRW Q19XOTUsIDAgfSwKKyNlbmRpZiAvKiBOVCAqLworICAgIHsgIiIsIDAsIDAgfQorfTsKK2ludCBu dHZjdGFiID0gKHNpemVvZih0dmN0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKSAtIDE7CisK K3N0cnVjdCBrZXl0YWIgbXNrdGFiW10gPSB7IC8qIFNFVCBNUy1ET1MgS0VSTUlUIGNvbXBhdGli aWxpdGllcyAqLworI2lmZGVmIENPTU1FTlQKKyAgICB7ICJjb2xvciIsICAgIE1TS19DT0xPUiwg IDAgfSwKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgeyAiZmlsZS1yZW5hbWluZyIsIE1TS19S RU4sIDAgfSwKKyAgICB7ICJrZXljb2RlcyIsIE1TS19LRVlTLCAgIDAgfQorfTsKK2ludCBubXNr ID0gKHNpemVvZihtc2t0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKKworc3RydWN0IGtl eXRhYiBzY3JudXBkW10gPSB7ICAgICAgICAgICAgIC8qIFNFVCBURVJNSU5BTCBTQ1JFRU4tVVBE QVRFICovCisgICAgeyAiZmFzdCIsICAgVFRVX0ZBU1QsICAgMCB9LAorICAgIHsgInNtb290aCIs IFRUVV9TTU9PVEgsIDAgfQorfTsKK2ludCBuc2NybnVwZCA9IChzaXplb2Yoc2NybnVwZCkgLyBz aXplb2Yoc3RydWN0IGtleXRhYikpOworCisjaWZkZWYgUENGT05UUworLyogVGhpcyBkZWZpbml0 aW9uIG9mIHRoZSB0ZXJtX2ZvbnRbXSB0YWJsZSBpcyBvbmx5IGZvciAgICAgKi8KKy8qIHRoZSBP Uy8yIEZ1bGwgU2NyZWVuIFNlc3Npb24gYW5kIGlzIG5vdCB1c2VkIG9uIFdpbmRvd3MgKi8KK3N0 cnVjdCBrZXl0YWIgdGVybV9mb250W10gPSB7ICAgICAgICAgICAvKiBTRVQgVEVSTUlOQUwgRk9O VCAqLworI2lmZGVmIENPTU1FTlQKKyAgICB7ICJjcDExMSIsIFRURl8xMTEsIDAgfSwKKyAgICB7 ICJjcDExMiIsIFRURl8xMTIsIDAgfSwKKyAgICB7ICJjcDExMyIsIFRURl8xMTMsIDAgfSwKKyNl bmRpZiAvKiBDT01NRU5UICovCisgICAgeyAiY3A0MzciLCBUVEZfNDM3LCAwIH0sCisgICAgeyAi Y3A4NTAiLCBUVEZfODUwLCAwIH0sCisjaWZkZWYgQ09NTUVOVAorICAgIHsgImNwODUxIiwgVFRG Xzg1MSwgMCB9LAorI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICB7ICJjcDg1MiIsIFRURl84NTIs IDAgfSwKKyNpZmRlZiBDT01NRU5UCisgICAgeyAiY3A4NTMiLCBUVEZfODUzLCAwIH0sCisgICAg eyAiY3A4NjAiLCBUVEZfODYwLCAwIH0sCisgICAgeyAiY3A4NjEiLCBUVEZfODYxLCAwIH0sCisj ZW5kaWYgLyogQ09NTUVOVCAqLworICAgIHsgImNwODYyIiwgVFRGXzg2MiwgMCB9LAorI2lmZGVm IENPTU1FTlQKKyAgICB7ICJjcDg2MyIsIFRURl84NjMsIDAgfSwKKyAgICB7ICJjcDg2NCIsIFRU Rl84NjQsIDAgfSwKKyAgICB7ICJjcDg2NSIsIFRURl84NjUsIDAgfSwKKyNlbmRpZiAvKiBDT01N RU5UICovCisgICAgeyAiY3A4NjYiLCBUVEZfODY2LCAwIH0sCisjaWZkZWYgQ09NTUVOVAorICAg IHsgImNwODgwIiwgVFRGXzg4MCwgMCB9LAorICAgIHsgImNwODgxIiwgVFRGXzg4MSwgMCB9LAor ICAgIHsgImNwODgyIiwgVFRGXzg4MiwgMCB9LAorICAgIHsgImNwODgzIiwgVFRGXzg4MywgMCB9 LAorICAgIHsgImNwODg0IiwgVFRGXzg4NCwgMCB9LAorICAgIHsgImNwODg1IiwgVFRGXzg4NSwg MCB9LAorI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICB7ICJkZWZhdWx0IixUVEZfUk9NLDAgfQor fTsKK2ludCBudGVybWZvbnQgPSAoc2l6ZW9mKHRlcm1fZm9udCkgLyBzaXplb2Yoc3RydWN0IGtl eXRhYikpOworaW50IHR0X2ZvbnQgPSBUVEZfUk9NOyAgICAgICAgICAgICAgICAgIC8qIFRlcm1p bmFsIHNjcmVlbiBmb250ICovCisjZWxzZSAvKiBQQ0ZPTlRTICovCisjaWZkZWYgTlQKKyNpZmRl ZiBLVUkKK3N0cnVjdCBrZXl0YWIgKiB0ZXJtX2ZvbnQgPSBOVUxMOworc3RydWN0IGtleXRhYiAq IF90ZXJtX2ZvbnQgPSBOVUxMOworY2hhciAqIHR0X2ZhY2VuYW1lID0gTlVMTDsKK2ludCBudGVy bWZvbnQgPSAwOworaW50IHR0X2ZvbnQgPSAwOworaW50IHR0X2ZvbnRfc2l6ZSA9IDA7CisjZW5k aWYgLyogS1VJICovCisjZW5kaWYgLyogTlQgKi8KKyNlbmRpZiAvKiBQQ0ZPTlRTICovCisKK3N0 cnVjdCBrZXl0YWIgYW5ia3RhYltdID0geyAgICAgICAgICAgICAvKiBGb3IgYW55IGNvbW1hbmQg dGhhdCBuZWVkcyAqLworICAgIHsgIm1lc3NhZ2UiLCAyLCAwIH0sICAgICAgICAgICAgICAgIC8q IHRoZXNlIGtleXdvcmRzLi4uICovCisgICAgeyAib2ZmIiwgICAgIDAsIDAgfSwKKyAgICB7ICJv biIsICAgICAgMSwgMCB9LAorICAgIHsgInVuc2FmZS1tZXNzYWcwIiwgOTksIENNX0lOViB9LAor ICAgIHsgInVuc2FmZS1tZXNzYWdlIiwgMywgIENNX0lOViB9Cit9OworaW50IG5hbnNiayA9IChz aXplb2YoYW5ia3RhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpOworCitpbnQgd2luOTVfcG9w dXAgPSAxOworI2lmZGVmIE5UCisjaWZkZWYgS1VJCitpbnQgd2luOTVsdWNpZGEgPSAwOworaW50 IHdpbjk1aHNsID0gMTsKKyNlbHNlIC8qIEtVSSAqLworaW50IHdpbjk1bHVjaWRhID0gMTsKK2lu dCB3aW45NWhzbCA9IDE7CisjZW5kaWYgLyogS1VJICovCisjZWxzZSAvKiBOVCAqLworaW50IHdp bjk1bHVjaWRhID0gMDsKK2ludCB3aW45NWhzbCA9IDE7CisjZW5kaWYgLyogTlQgKi8KKyNpZmRl ZiBOVAoraW50IHdpbjk1YWx0Z3IgID0gMDsKK2V4dGVybiBpbnQgd2luOTVzZWxlY3RidWc7Citl eHRlcm4gaW50IHdpbjk1XzhfMzsKKworI2lmZGVmIENPTU1FTlQKK2V4dGVybiBDSEFSICgqeGxy W01BWFRDU0VUUysxXVtNQVhGQ1NFVFMrMV0pKENIQVIpOworZXh0ZXJuIHN0cnVjdCBrZXl0YWIg dGNzdGFiW107CitleHRlcm4gaW50IG50Y3M7CisjZW5kaWYgLyogQ09NTUVOVCAqLworZXh0ZXJu IGludCBtYXhvdywgbWF4b3dfdXNyOyBvd3dhaXQ7ICAgIC8qIE92ZXJsYXBwZWQgSS9PIHZhcmlh YmxlcyAqLworI2VuZGlmIC8qIE5UICovCisjZW5kaWYgLyogT1MyICovCisKKworLyogVGhlIGZv bGxvd2luZyByb3V0aW5lcyBicm9rZW4gb3V0IG9mIGRvcHJtKCkgdG8gZ2l2ZSBjb21waWxlcnMg YSBicmVhay4gKi8KKworLyogIFMgRSBUIE8gTiAgLS0gIFBhcnNlIG9uL29mZiAoZGVmYXVsdCBv biksIHNldCBwYXJhbWV0ZXIgdG8gcmVzdWx0ICAqLworCitpbnQKK3NldG9uKHBybSkgaW50ICpw cm07IHsKKyAgICBpbnQgeCwgeTsKKyAgICBpZiAoKHkgPSBjbWtleShvbm9mZiwyLCIiLCJvbiIs eHhzdHJpbmcpKSA8IDApIHJldHVybih5KTsKKyAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJl dHVybih4KTsKKyAgICAqcHJtID0geTsKKyAgICByZXR1cm4oMSk7Cit9CisKKy8qICBTIEUgVCBP IE4gQSBVIFQgTyAtLSAgUGFyc2Ugb24vb2ZmL2F1dG8gKGRlZmF1bHQgYXV0bykgJiBzZXQgcmVz dWx0ICovCisKK3N0cnVjdCBrZXl0YWIgb25vZmZhdXRbXSA9IHsKKyAgICB7ICJhdXRvIiwgU0VU X0FVVE8sIDAgfSwgICAgICAgICAgICAvKiAyICovCisgICAgeyAib2ZmIiwgIFNFVF9PRkYsICAw IH0sICAgICAgICAgICAgLyogMCAqLworICAgIHsgIm9uIiwgICBTRVRfT04sICAgMCB9ICAgICAg ICAgICAgIC8qIDEgKi8KK307CisKK2ludAorc2V0b25hdXQocHJtKSBpbnQgKnBybTsgeworICAg IGludCB4LCB5OworICAgIGlmICgoeSA9IGNta2V5KG9ub2ZmYXV0LDMsIiIsImF1dG8iLHh4c3Ry aW5nKSkgPCAwKSByZXR1cm4oeSk7CisgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4o eCk7CisgICAgKnBybSA9IHk7CisgICAgcmV0dXJuKDEpOworfQorCisvKiAgUyBFIFQgTiBVIE0g IC0tICBTZXQgcGFyYW1ldGVyIHRvIHJlc3VsdCBvZiBjbW51bSgpIHBhcnNlLiAgKi8KKy8qCisg Q2FsbCB3aXRoIHBvaW50ZXIgdG8gaW50ZWdlciB2YXJpYWJsZSB0byBiZSBzZXQsCisgICB4ID0g bnVtYmVyIGZyb20gY251bSBwYXJzZSwgeSA9IHJldHVybiBjb2RlIGZyb20gY21udW0sCisgICBt YXggPSBtYXhpbXVtIHZhbHVlIHRvIGFjY2VwdCwgLTEgaWYgbm8gbWF4aW11bS4KKyBSZXR1cm5z IC05IG9uIGZhaWx1cmUsIGFmdGVyIHByaW50aW5nIGEgbWVzc2FnZSwgb3IgMSBvbiBzdWNjZXNz LgorKi8KK2ludAorc2V0bnVtKHBybSx4LHksbWF4KSBpbnQgeCwgeSwgKnBybSwgbWF4OyB7Cisg ICAgZGVidWcoRjEwMSwic2V0bnVtIiwiIix5KTsKKyAgICBpZiAoeSA9PSAtMykgeworICAgICAg ICBwcmludGYoIlxuP1ZhbHVlIHJlcXVpcmVkXG4iKTsKKyAgICAgICAgcmV0dXJuKC05KTsKKyAg ICB9CisgICAgaWYgKHkgPT0gLTIpIHsKKyAgICAgICAgcHJpbnRmKCIlcz9Ob3QgYSBudW1iZXI6 ICVzXG4iLGNtZmxncyA9PSAxID8gIiIgOiAiXG4iLCBhdHhidWYpOworICAgICAgICByZXR1cm4o LTkpOworICAgIH0KKyAgICBpZiAoeSA8IDApIHJldHVybih5KTsKKyAgICBpZiAobWF4ID4gLTEg JiYgeCA+IG1heCkgeworICAgICAgICBwcmludGYoIj9Tb3JyeSwgJWQgaXMgdGhlIG1heGltdW1c biIsbWF4KTsKKyAgICAgICAgcmV0dXJuKC05KTsKKyAgICB9CisgICAgaWYgKCh5ID0gY21jZm0o KSkgPCAwKSByZXR1cm4oeSk7CisgICAgKnBybSA9IHg7CisgICAgcmV0dXJuKDEpOworfQorCisv KiAgUyBFIFQgQyBDICAtLSAgU2V0IHBhcmFtZXRlciB2YXIgdG8gYW4gQVNDSUkgY29udHJvbCBj aGFyYWN0ZXIgdmFsdWUuICAqLworLyoKKyAgUGFyc2VzIGEgbnVtYmVyLCBvciBhIGxpdGVyYWwg Y29udHJvbCBjaGFyYWN0ZXIsIG9yIGEgY2FyZXQgKF4pIGZvbGxvd2VkCisgIGJ5IGFuIEFTQ0lJ IGNoYXJhY3RlciB3aG9zZSB2YWx1ZSBpcyA2My05NSBvciA5Ny0xMjIsIHRoZW4gZ2V0cyBjb25m aXJtYXRpb24sCisgIHRoZW4gc2V0cyB0aGUgcGFyYW1ldGVyIHRvIHRoZSBjb2RlIHZhbHVlIG9m IHRoZSBjaGFyYWN0ZXIgZ2l2ZW4uICBJZiB0aGVyZQorICBhcmUgYW55IHBhcnNlIGVycm9ycywg dGhleSBhcmUgcmV0dXJuZWQsIG90aGVyd2lzZSBvbiBzdWNjZXNzIDEgaXMgcmV0dXJuZWQuCisq LworaW50CitzZXRjYyhkZmx0LHZhcikgY2hhciAqZGZsdDsgaW50ICp2YXI7IHsKKyAgICBpbnQg eCwgeTsKKyAgICB1bnNpZ25lZCBpbnQgYzsKKyAgICBjaGFyICpobHBtc2cgPSAiQ29udHJvbCBj aGFyYWN0ZXIsXG5cCisgbnVtZXJpYyBBU0NJSSB2YWx1ZSxcblwKKyBvciBpbiBeWCBub3RhdGlv bixcblwKKyBvciBwcmVjZWRlZCBieSBhIGJhY2tzbGFzaCBhbmQgZW50ZXJlZCBsaXRlcmFsbHki OworCisgICAgLyogVGhpcyBpcyBhIGhhY2sgdG8gdHVybiBvZmYgY29tcGxhaW50cyBmcm9tIGV4 cHJlc3Npb24gZXZhbHVhdG9yLiAqLworICAgIHhfaWZudW0gPSAxOworICAgIHkgPSBjbW51bSho bHBtc2csIGRmbHQsIDEwLCAmeCwgeHhzdHJpbmcpOyAvKiBQYXJzZSBhIG51bWJlciAqLworICAg IHhfaWZudW0gPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBbGxvdyBjb21w bGFpbnRzIGFnYWluICovCisgICAgaWYgKHkgPCAwKSB7ICAgICAgICAgICAgICAgICAgICAgICAg LyogUGFyc2UgZmFpbGVkICovCisgICAgICAgIGlmICh5ICE9IC0yKSAgICAgICAgICAgICAgICAg ICAgLyogUmVwYXJzZSBuZWVkZWQgb3Igc29tZXN1Y2ggKi8KKyAgICAgICAgICByZXR1cm4oeSk7 ICAgICAgICAgICAgICAgICAgICAvKiBQYXNzIGZhaWx1cmUgYmFjayB1cCB0aGUgY2hhaW4gKi8K KyAgICB9CisgICAgLyogUmVhbCBjb250cm9sIGNoYXJhY3RlciBvciBsaXRlcmFsIDgtYml0IGNo YXJhY3Rlci4uLiAqLworCisgICAgZm9yIChjID0gc3RybGVuKGF0bWJ1ZikgLSAxOyBjID4gMDsg Yy0tKSAvKiBUcmltICovCisgICAgICBpZiAoYXRtYnVmW2NdID09IFNQKSBhdG1idWZbY10gPSBO VUw7CisKKyAgICBpZiAoeSA8IDApIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBJdCB3YXMg bm90IGEgbnVtYmVyICovCisgICAgICAgIGlmICgoKGMgPSBhdG1idWZbMF0pKSAmJiAhYXRtYnVm WzFdKSB7IC8qIExpdGVyYWwgY2hhcmFjdGVyPyAqLworICAgICAgICAgICAgYyAmPSAweGZmOwor ICAgICAgICAgICAgaWYgKCgoYyA+IDMxKSAmJiAoYyA8IDEyNykpIHx8IChjID4gMjU1KSkgewor ICAgICAgICAgICAgICAgIHByaW50ZigiXG4/JWQ6IE91dCBvZiByYW5nZSAtIG11c3QgYmUgMC0z MSBvciAxMjctMjU1XG4iLGMpOworICAgICAgICAgICAgICAgIHJldHVybigtOSk7CisgICAgICAg ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgIC8q IENvbmZpcm0gKi8KKyAgICAgICAgICAgICAgICAgIHJldHVybih5KTsKKyAgICAgICAgICAgICAg ICAqdmFyID0gYzsgICAgICAgICAgICAgICAvKiBTZXQgdGhlIHZhcmlhYmxlICovCisgICAgICAg ICAgICAgICAgcmV0dXJuKDEpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKGF0 bWJ1ZlswXSA9PSAnXicgJiYgIWF0bWJ1ZlsyXSkgeyAvKiBPciBeWCBub3RhdGlvbj8gKi8KKyAg ICAgICAgICAgIGMgPSBhdG1idWZbMV07CisgICAgICAgICAgICBpZiAoaXNsb3dlcigoY2hhcikg YykpICAgICAgLyogVXBwZXJjYXNlIGxvd2VyY2FzZSBsZXR0ZXJzICovCisgICAgICAgICAgICAg IGMgPSB0b3VwcGVyKGMpOworICAgICAgICAgICAgaWYgKGMgPiA2MiAmJiBjIDwgOTYpIHsgICAg IC8qIENoZWNrIHJhbmdlICovCisgICAgICAgICAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAw KQorICAgICAgICAgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICAgICAgICAgICp2YXIgPSBj dGwoYyk7ICAgICAgICAgIC8qIE9LICovCisgICAgICAgICAgICAgICAgcmV0dXJuKDEpOworICAg ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIj9Ob3QgYSBjb250cm9s IGNoYXJhY3RlciAtICVzXG4iLCBhdG1idWYpOworICAgICAgICAgICAgICAgIHJldHVybigtOSk7 CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAg LyogU29tZXRoaW5nIGlsbGVnYWwgd2FzIHR5cGVkICovCisgICAgICAgICAgICBwcmludGYoIj9J bnZhbGlkIC0gJXNcbiIsIGF0bWJ1Zik7CisgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAg ICB9CisgICAgfQorICAgIGlmICgoKHggPiAzMSkgJiYgKHggPCAxMjcpKSB8fCAoeCA+IDI1NSkp IHsgLyogVGhleSB0eXBlZCBhIG51bWJlciAqLworICAgICAgICBwcmludGYoIlxuPyVkOiBPdXQg b2YgcmFuZ2UgLSBtdXN0IGJlIDAtMzEgb3IgMTI3LTI1NVxuIix4KTsKKyAgICAgICAgcmV0dXJu KC05KTsKKyAgICB9CisgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSAgICAgICAgICAgICAgLyog SW4gcmFuZ2UsIGNvbmZpcm0gKi8KKyAgICAgIHJldHVybih5KTsKKyAgICAqdmFyID0geDsgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBTZXQgdmFyaWFibGUgKi8KKyAgICByZXR1cm4oMSk7 Cit9CisKKyNpZm5kZWYgTk9TUEwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUaGUgU09S VCBjb21tYW5kLi4uICovCisKK3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIHNydHN3dGFiW10gPSB7ICAg ICAvKiBTT1JUIGNvbW1hbmQgc3dpdGNoZXMgKi8KKyAgICB7ICIvY2FzZSIsICAgIFNSVF9DQVMs IENNX0FSRyB9LAorICAgIHsgIi9rZXkiLCAgICAgU1JUX0tFWSwgQ01fQVJHIH0sCisgICAgeyAi L251bWVyaWMiLCBTUlRfTlVNLCAwIH0sCisgICAgeyAiL3JhbmdlIiwgICBTUlRfUk5HLCBDTV9B UkcgfSwKKyAgICB7ICIvcmV2ZXJzZSIsIFNSVF9SRVYsIDAgfQorfTsKK3N0YXRpYyBpbnQgbnNy dHN3dGFiID0gc2l6ZW9mKHNydHN3dGFiKS9zaXplb2Yoc3RydWN0IGtleXRhYik7CisKK2V4dGVy biBjaGFyICoqYV9wdHJbXTsgICAgICAgICAgICAgICAgICAvKiBBcnJheSBwb2ludGVycyAqLwor ZXh0ZXJuIGludCBhX2RpbVtdOyAgICAgICAgICAgICAgICAgICAgIC8qIEFycmF5IGRpbWVuc2lv bnMgKi8KKworaW50Citkb3NvcnQoKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog RG8gdGhlIFNPUlQgY29tbWFuZCAqLworICAgIGNoYXIgYywgKnAgPSBOVUxMLCAqKiBhcCwgKiog eHAgPSBOVUxMOworICAgIHN0cnVjdCBGREIgc3csIGZsLCBjbTsKKyAgICBpbnQgaGksIGxvOwor ICAgIGludCB4biA9IDAsIHhyID0gLTEsIHhrID0gLTEsIHhjID0gLTEsIHhzID0gMDsKKyAgICBp bnQgZ2V0dmFsID0gMCwgcmFuZ2VbMl0sIGNvbmZpcm1lZCA9IDA7CisKKyAgICBjbWZkYmkoJnN3 LCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGaXJzdCBGREIgLSBjb21tYW5kIHN3aXRjaGVz ICovCisgICAgICAgICAgIF9DTUtFWSwgICAgICAgICAgICAgICAgICAgICAgLyogZmNvZGUgKi8K KyAgICAgICAgICAgIkFycmF5IG5hbWUgb3Igc3dpdGNoIiwKKyAgICAgICAgICAgIiIsICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBkZWZhdWx0ICovCisgICAgICAgICAgICIiLCAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KKyAgICAgICAgICAgbnNy dHN3dGFiLCAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMTogdGJsIHNp emUgKi8KKyAgICAgICAgICAgNCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBu dW1lcmljIGRhdGEgMjogNCA9IGNtc3dpICovCisgICAgICAgICAgIE5VTEwsICAgICAgICAgICAg ICAgICAgICAgICAgLyogUHJvY2Vzc2luZyBmdW5jdGlvbiAqLworICAgICAgICAgICBzcnRzd3Rh YiwgICAgICAgICAgICAgICAgICAgIC8qIEtleXdvcmQgdGFibGUgKi8KKyAgICAgICAgICAgJmZs ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQb2ludGVyIHRvIG5leHQgRkRCICovCisgICAg ICAgICAgICk7CisgICAgY21mZGJpKCZmbCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogQW55 dGhpbmcgdGhhdCBkb2Vzbid0IG1hdGNoICovCisgICAgICAgICAgIF9DTUZMRCwgICAgICAgICAg ICAgICAgICAgICAgLyogZmNvZGUgKi8KKyAgICAgICAgICAgIkFycmF5IG5hbWUiLCAgICAgICAg ICAgICAgICAvKiBobHBtc2cgKi8KKyAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBkZWZhdWx0ICovCisgICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KKyAgICAgICAgICAgMCwgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMSAqLworICAgICAgICAgICAwLCAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAyICovCisgICAgICAg ICAgIE5VTEwsCisgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICZjbQorICAgICAgICAgICAp OworICAgIGNtZmRiaSgmY20sICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE9yIHByZW1hdHVy ZSBjb25maXJtYXRpb24gKi8KKyAgICAgICAgICAgX0NNQ0ZNLCAgICAgICAgICAgICAgICAgICAg ICAvKiBmY29kZSAqLworICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IGhscG1zZyAqLworICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRl ZmF1bHQgKi8KKyAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0 bCBzdHJpbmcgZGF0YSAqLworICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIGFkZHRsIG51bWVyaWMgZGF0YSAxICovCisgICAgICAgICAgIDAsICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDIgKi8KKyAgICAgICAgICAgTlVMTCwK KyAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgTlVMTAorICAgICAgICAgICApOworCisgICAg cmFuZ2VbMF0gPSAtMTsKKyAgICByYW5nZVsxXSA9IC0xOworCisgICAgd2hpbGUgKDEpIHsgICAg ICAgICAgICAgICAgICAgICAgICAgLyogUGFyc2UgMCBvciBtb3JlIHN3aXRjaGVzICovCisgICAg ICAgIHggPSBjbWZkYigmc3cpOworICAgICAgICBpZiAoeCA8IDApCisgICAgICAgICAgcmV0dXJu KHgpOworICAgICAgICBpZiAoY21yZXN1bHQuZmNvZGUgIT0gX0NNS0VZKSAgIC8qIEJyZWFrIG91 dCBpZiBub3QgYSBzd2l0Y2ggKi8KKyAgICAgICAgICBicmVhazsKKyAgICAgICAgYyA9IGNtZ2Jy aygpOworICAgICAgICBnZXR2YWwgPSAoYyA9PSAnOicgfHwgYyA9PSAnPScpOworICAgICAgICBp ZiAoZ2V0dmFsICYmICEoY21yZXN1bHQua2ZsYWdzICYgQ01fQVJHKSkgeworICAgICAgICAgICAg cHJpbnRmKCI/VGhpcyBzd2l0Y2ggZG9lcyBub3QgdGFrZSBhcmd1bWVudHNcbiIpOworICAgICAg ICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgfQorICAgICAgICBzd2l0Y2ggKGNtcmVzdWx0Lm5y ZXN1bHQpIHsKKyAgICAgICAgICBjYXNlIFNSVF9SRVY6CisgICAgICAgICAgICB4ciA9IDE7Cisg ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIFNSVF9LRVk6CisgICAgICAgICAgICBp ZiAoZ2V0dmFsKSB7CisgICAgICAgICAgICAgICAgaWYgKCh5ID0gY21udW0oIkNvbHVtbiBmb3Ig Y29tcGFyaXNvbiAoMS1iYXNlZCkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIx IiwxMCwmeCx4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICAgICAgICAgIHJldHVybih5KTsKKyAg ICAgICAgICAgICAgICB4ayA9IHggLSAxOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAg ICAgIHhrID0gMDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgU1JUX0NBUzoK KyAgICAgICAgICAgIGlmIChnZXR2YWwpIHsKKyAgICAgICAgICAgICAgICBpZiAoKHkgPSBjbWtl eShvbm9mZiwyLCIiLCJvbiIseHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgICAgICAgICByZXR1 cm4oeSk7CisgICAgICAgICAgICAgICAgeGMgPSB5OworICAgICAgICAgICAgfSBlbHNlCisgICAg ICAgICAgICAgIHhjID0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgU1JU X1JORzogICAgICAgICAgICAgICAgIC8qIC9SQU5HRSAqLworICAgICAgICAgICAgaWYgKGdldHZh bCkgeworICAgICAgICAgICAgICAgIGNoYXIgYnVmWzMyXTsKKyAgICAgICAgICAgICAgICBjaGFy IGJ1ZjJbMTZdOworICAgICAgICAgICAgICAgIGludCBpOworICAgICAgICAgICAgICAgIGNoYXIg KiBwLCAqIHE7CisgICAgICAgICAgICAgICAgaWYgKCh5ID0gY21mbGQoImxvdzpoaWdoIGVsZW1l bnQiLCIxIiwmcyxOVUxMKSkgPCAwKQorICAgICAgICAgICAgICAgICAgcmV0dXJuKHkpOworICAg ICAgICAgICAgICAgIHMgPSBicnN0cmlwKHMpOworICAgICAgICAgICAgICAgIGNrc3RybmNweShi dWYscywzMik7CisgICAgICAgICAgICAgICAgcCA9IGJ1ZjsKKyAgICAgICAgICAgICAgICBmb3Ig KGkgPSAwOyAqcCAmJiBpIDwgMjsgaSsrKSB7IC8qIEdldCBsb3cgYW5kIGhpZ2ggKi8KKyAgICAg ICAgICAgICAgICAgICAgcSA9IHA7ICAgICAgICAgICAgICAvKiBTdGFydCBvZiB0aGlzIHBpZWNl ICovCisgICAgICAgICAgICAgICAgICAgIHdoaWxlICgqcCkgeyAgICAgICAgLyogRmluZCBlbmQg b2YgdGhpcyBwaWVjZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCpwID09ICc6Jykg eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwID0gTlVMOworICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHArKzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHArKzsKKyAg ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB5ID0gMTU7ICAgICAgICAg ICAgIC8qIEV2YWx1YXRlIHRoaXMgcGllY2UgKi8KKyAgICAgICAgICAgICAgICAgICAgcyA9IGJ1 ZjI7CisgICAgICAgICAgICAgICAgICAgIHp6c3RyaW5nKHEsJnMsJnkpOworICAgICAgICAgICAg ICAgICAgICBzID0gZXZhbHgoYnVmMik7CisgICAgICAgICAgICAgICAgICAgIGlmIChzKSBpZiAo KnMpIGNrc3RybmNweShidWYyLHMsMTYpOworICAgICAgICAgICAgICAgICAgICBpZiAoIXJkaWdp dHMoYnVmMikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiP05vdCBudW1lcmlj OiAlc1xuIixidWYyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybigtOSk7CisgICAg ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmFuZ2VbaV0gPSBhdG9pKGJ1 ZjIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFr OworICAgICAgICAgIGNhc2UgU1JUX05VTTogICAgICAgICAgICAgICAgIC8qIC9OVU1FUklDICov CisgICAgICAgICAgICB4biA9IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZh dWx0OgorICAgICAgICAgICAgcmV0dXJuKC0yKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBzd2l0 Y2ggKGNtcmVzdWx0LmZjb2RlKSB7CisgICAgICBjYXNlIF9DTUNGTToKKyAgICAgICAgY29uZmly bWVkID0gMTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIF9DTUZMRDoKKyAgICAgICAgY2tz dHJuY3B5KGxpbmUsY21yZXN1bHQuc3Jlc3VsdCxMSU5CVUZTSVopOyAvKiBTYWZlIGNvcHkgb2Yg bmFtZSAqLworICAgICAgICBzID0gbGluZTsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0 OgorICAgICAgICBwcmludGYoIj9VbmV4cGVjdGVkIGZ1bmN0aW9uIGNvZGU6ICVkXG4iLGNtcmVz dWx0LmZjb2RlKTsKKyAgICAgICAgcmV0dXJuKC05KTsKKyAgICB9CisgICAgaWYgKGNvbmZpcm1l ZCkgeworICAgICAgICBwcmludGYoIj9BcnJheSBuYW1lIHJlcXVpcmVkXG4iKTsKKyAgICAgICAg cmV0dXJuKC05KTsKKyAgICB9CisgICAgY2ttYWttc2codG1wYnVmLFRNUEJVRlNJWiwKKyAgICAg ICAgICAgICAiU2Vjb25kIGFycmF5IHRvIHNvcnQgYWNjb3JkaW5nIHRvICIscyxOVUxMLE5VTEwp OworICAgIGlmICgoeCA9IGNtZmxkKHRtcGJ1ZiwiIiwmcCxOVUxMKSkgPCAwKQorICAgICAgaWYg KHggIT0gLTMpCisgICAgICAgIHJldHVybih4KTsKKyAgICB0bXBidWZbMF0gPSBOVUw7CisgICAg Y2tzdHJuY3B5KHRtcGJ1ZixwLFRNUEJVRlNJWik7CisgICAgcCA9IHRtcGJ1ZjsKKyAgICBpZiAo KHggPSBjbWNmbSgpKSA8IDApICAgICAgICAgICAgICAvKiBHZXQgY29uZmlybWF0aW9uICovCisg ICAgICByZXR1cm4oeCk7CisKKyAgICB4ID0gYXJyYXlib3VuZHMocywmbG8sJmhpKTsgICAgICAg ICAvKiBHZXQgYXJyYXkgaW5kZXggJiBib3VuZHMgKi8KKyAgICBpZiAoeCA8IDApIHsgICAgICAg ICAgICAgICAgICAgICAgICAvKiBDaGVjayAqLworICAgICAgICBwcmludGYoIj9CYWQgYXJyYXkg bmFtZTogJXNcbiIscyk7CisgICAgICAgIHJldHVybigtOSk7CisgICAgfQorICAgIGlmIChsbyA+ IC0xKSByYW5nZVswXSA9IGxvOyAgICAgICAgIC8qIFNldCByYW5nZSAqLworICAgIGlmIChoaSA+ IC0xKSByYW5nZVsxXSA9IGhpOworICAgIGFwID0gYV9wdHJbeF07ICAgICAgICAgICAgICAgICAg ICAgIC8qIEdldCBwb2ludGVyIHRvIGFycmF5IGVsZW1lbnQgbGlzdCAqLworICAgIGlmICghYXAp IHsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENoZWNrICovCisgICAgICAgIHByaW50Zigi P0FycmF5IG5vdCBkZWNsYXJlZDogJXNcbiIsIHMpOworICAgICAgICByZXR1cm4oLTkpOworICAg IH0KKyAgICBpZiAocmFuZ2VbMF0gPCAwKSAgICAgICAgICAgICAgICAgICAvKiBTdGFydGluZyBl bGVtZW50ICovCisgICAgICByYW5nZVswXSA9IDE7CisgICAgaWYgKHJhbmdlWzFdIDwgMCkgICAg ICAgICAgICAgICAgICAgLyogRmluYWwgZWxlbWVudCAqLworICAgICAgcmFuZ2VbMV0gPSBhX2Rp bVt4XTsKKyAgICBpZiAocmFuZ2VbMV0gPiBhX2RpbVt4XSkgeworICAgICAgICBwcmludGYoIj9y YW5nZSAlZDolZCBleGNlZWRzIGFycmF5IGRpbWVuc2lvbiAlZFxuIiwKKyAgICAgICAgICAgICAg IHJhbmdlWzBdLHJhbmdlWzFdLGFfZGltW3hdCisgICAgICAgICAgICAgICApOworICAgICAgICBy ZXR1cm4oLTkpOworICAgIH0KKyAgICBhcCArPSByYW5nZVswXTsKKyAgICB4cyA9IHJhbmdlWzFd IC0gcmFuZ2VbMF0gKyAxOyAgICAgICAvKiBOdW1iZXIgb2YgZWxlbWVudHMgdG8gc29ydCAqLwor ICAgIGlmICh4cyA8IDEpIHsgICAgICAgICAgICAgICAgICAgICAgIC8qIENoZWNrICovCisgICAg ICAgIHByaW50ZigiP0JhZCByYW5nZTogJWQ6JWRcbiIscmFuZ2VbMF0scmFuZ2VbMV0pOworICAg ICAgICByZXR1cm4oLTkpOworICAgIH0KKyAgICBpZiAoeGsgPCAwKSB4ayA9IDA7ICAgICAgICAg ICAgICAgICAvKiBLZXkgcG9zaXRpb24gKi8KKyAgICBpZiAoeHIgPCAwKSB4ciA9IDA7ICAgICAg ICAgICAgICAgICAvKiBSZXZlcnNlIGZsYWcgKi8KKyAgICBpZiAoeG4pICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBOdW1lcmljIGZsYWcgKi8KKyAgICAgIHhjID0gMjsKKyAgICBlbHNl IGlmICh4YyA8IDApICAgICAgICAgICAgICAgICAgICAvKiBOb3QgbnVtZXJpYyAqLworICAgICAg eGMgPSBpbnBjYXNbY21kbHZsXTsgICAgICAgICAgICAgIC8qIHNvIGFscGhhIGNhc2Ugb3B0aW9u ICovCisKKyAgICBpZiAoKnApIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQYXJhbGxl bCBhcnJheSBnaXZlbj8gKi8KKyAgICAgICAgeSA9IHhhcnJheShwKTsgICAgICAgICAgICAgICAg ICAvKiBZZXMsIGdldCBpdHMgaW5kZXguICovCisgICAgICAgIGlmICh5IDwgMCkgeworICAgICAg ICAgICAgcHJpbnRmKCI/QmFkIGFycmF5IG5hbWU6ICVzXG4iLCBwKTsKKyAgICAgICAgICAgIHJl dHVybigtOSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHkgIT0geCkgeyAgICAgICAgICAgICAg ICAgICAvKiBJZiB0aGUgMiBhcnJheXMgYXJlIGRpZmZlcmVudCAgKi8KKyAgICAgICAgICAgIHhw ID0gYV9wdHJbeV07ICAgICAgICAgICAgICAvKiBQb2ludGVyIHRvIDJuZCBhcnJheSBlbGVtZW50 IGxpc3QgKi8KKyAgICAgICAgICAgIGlmICgheHApIHsKKyAgICAgICAgICAgICAgICBwcmludGYo Ij9BcnJheSBub3QgZGVjbGFyZWQ6ICVzXG4iLCBwKTsKKyAgICAgICAgICAgICAgICByZXR1cm4o LTkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGFfZGltW3ldIDwgcmFuZ2VbMV0p IHsKKyAgICAgICAgICAgICAgICBwcmludGYoIj9BcnJheSAlcyBzbWFsbGVyIHRoYW4gJXNcbiIs IHAsIHMpOworICAgICAgICAgICAgICAgIHJldHVybigtOSk7CisgICAgICAgICAgICB9CisgICAg ICAgICAgICB4cCArPSByYW5nZVswXTsgICAgICAgICAgICAgLyogU2V0IGJhc2UgdG8gc2FtZSBh cyAxc3QgYXJyYXkgKi8KKyAgICAgICAgfQorICAgIH0KKyAgICBzaF9zb3J0KGFwLHhwLHhzLHhr LHhyLHhjKTsgICAgICAgICAvKiBTb3J0IHRoZSBhcnJheShzKSAqLworICAgIHJldHVybihzdWNj ZXNzID0gMSk7ICAgICAgICAgICAgICAgIC8qIEFsd2F5cyBzdWNjZWVkcyAqLworfQorI2VuZGlm IC8qIE5PU1BMICovCisKK3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIHB1cmd0YWJbXSA9IHsgICAgICAv KiBQVVJHRSBjb21tYW5kIHN3aXRjaGVzICovCisgICAgeyAiL2FmdGVyIiwgICAgICAgIFBVX0FG VCwgIENNX0FSRyB9LAorICAgIHsgIi9hc2siLCAgICAgICAgICBQVV9BU0ssICAwIH0sCisgICAg eyAiL2JlZm9yZSIsICAgICAgIFBVX0JFRiwgIENNX0FSRyB9LAorICAgIHsgIi9kZWxldGUiLCAg ICAgICBQVV9ERUxFLCBDTV9JTlYgfSwKKyNpZmRlZiBVTklYT1JPU0sKKyAgICB7ICIvZG90Zmls ZXMiLCAgICAgUFVfRE9ULCAgMCB9LAorI2VuZGlmIC8qIFVOSVhPUk9TSyAqLworICAgIHsgIi9l eGNlcHQiLCAgICAgICBQVV9FWEMsICBDTV9BUkcgfSwKKyAgICB7ICIvaGVhZGluZyIsICAgICAg UFVfSERHLCAgMCB9LAorICAgIHsgIi9rZWVwIiwgICAgICAgICBQVV9LRUVQLCBDTV9BUkcgfSwK KyAgICB7ICIvbGFyZ2VyLXRoYW4iLCAgUFVfTEFSLCAgQ01fQVJHIH0sCisgICAgeyAiL2xpc3Qi LCAgICAgICAgIFBVX0xJU1QsIDAgfSwKKyAgICB7ICIvbG9nIiwgICAgICAgICAgUFVfTElTVCwg Q01fSU5WIH0sCisgICAgeyAiL25vYXNrIiwgICAgICAgIFBVX05BU0ssIDAgfSwKKyAgICB7ICIv bm9kZWxldGUiLCAgICAgUFVfTk9ERSwgQ01fSU5WIH0sCisjaWZkZWYgVU5JWE9ST1NLCisgICAg eyAiL25vZG90ZmlsZXMiLCAgIFBVX05PRE9ULDAgfSwKKyNlbmRpZiAvKiBVTklYT1JPU0sgKi8K KyAgICB7ICIvbm9oZWFkaW5nIiwgICAgUFVfTk9ILCAgMCB9LAorICAgIHsgIi9ub2wiLCAgICAg ICAgICBQVV9OT0xJLCBDTV9JTlZ8Q01fQUJSIH0sCisgICAgeyAiL25vbGlzdCIsICAgICAgIFBV X05PTEksIDAgfSwKKyAgICB7ICIvbm9sb2ciLCAgICAgICAgUFVfTk9MSSwgQ01fSU5WIH0sCisj aWZkZWYgQ0tfVFRHV1NJWgorICAgIHsgIi9ub3BhZ2UiLCAgICAgICBQVV9OT1BBLCAwIH0sCisj ZW5kaWYgLyogQ0tfVFRHV1NJWiAqLworICAgIHsgIi9ub3QtYWZ0ZXIiLCAgICBQVV9OQUYsICBD TV9BUkcgfSwKKyAgICB7ICIvbm90LWJlZm9yZSIsICAgUFVfTkJGLCAgQ01fQVJHIH0sCisgICAg eyAiL25vdC1zaW5jZSIsICAgIFBVX05BRiwgIENNX0lOVnxDTV9BUkcgfSwKKyNpZmRlZiBDS19U VEdXU0laCisgICAgeyAiL3BhZ2UiLCAgICAgICAgIFBVX1BBR0UsIDAgfSwKKyNlbmRpZiAvKiBD S19UVEdXU0laICovCisgICAgeyAiL3F1aWV0IiwgICAgICAgIFBVX1FVSUUsIENNX0lOViB9LAor I2lmZGVmIFJFQ1VSU0lWRQorICAgIHsgIi9yZWN1cnNpdmUiLCAgICBQVV9SRUNVLCAwIH0sCisj ZW5kaWYgLyogUkVDVVJTSVZFICovCisgICAgeyAiL3NpbmNlIiwgICAgICAgIFBVX0FGVCwgIENN X0FSR3xDTV9JTlYgfSwKKyAgICB7ICIvc2ltdWxhdGUiLCAgICAgUFVfTk9ERSwgMCB9LAorICAg IHsgIi9zbWFsbGVyLXRoYW4iLCBQVV9TTUEsICBDTV9BUkcgfSwKKyAgICB7ICIvdmVyYm9zZSIs ICAgICAgUFVfVkVSQiwgQ01fSU5WIH0KK307CitzdGF0aWMgaW50IG5wdXJndGFiID0gc2l6ZW9m KHB1cmd0YWIpL3NpemVvZihzdHJ1Y3Qga2V5dGFiKTsKKworCisKKworCitpbnQKK2JrdXBudW0o cyxpKSBjaGFyICogczsgaW50ICppOyB7CisgICAgaW50IGsgPSAwLCBwb3MgPSAwOworICAgIGNo YXIgKiBwID0gTlVMTCwgKnE7CisgICAgKmkgPSBwb3M7CisgICAgaWYgKCFzKSBzID0gIiI7Cisg ICAgaWYgKCEqcykKKyAgICAgIHJldHVybigtMSk7CisgICAgaWYgKChrID0gc3RybGVuKHMpKSA8 IDUpCisgICAgICByZXR1cm4oLTEpOworCisgICAgaWYgKHNbay0xXSAhPSAnficpCisgICAgICBy ZXR1cm4oLTEpOworICAgIHBvcyA9IGsgLSAyOworICAgIHEgPSBzICsgcG9zOworICAgIHdoaWxl IChxID49IHMgJiYgaXNkaWdpdCgqcSkpIHsKKyAgICAgICAgcCA9IHEtLTsKKyAgICAgICAgcG9z LS07CisgICAgfQorICAgIGlmICghcCkKKyAgICAgIHJldHVybigtMSk7CisgICAgaWYgKHEgPCBz KzIpCisgICAgICByZXR1cm4oLTEpOworICAgIGlmICgqcSAhPSAnficgfHwgKihxLTEpICE9ICcu JykKKyAgICAgIHJldHVybigtMSk7CisgICAgcG9zLS07CisgICAgKmkgPSBwb3M7CisgICAgZGVi dWcoRjExMSwiYmt1cG51bSIscytwb3MscG9zKTsKKyAgICByZXR1cm4oYXRvaShwKSk7Cit9CisK KyNpZmRlZiBDS1BVUkdFCisvKiBQcmVzZW50bHkgb25seSBmb3IgVU5JWCBiZWNhdXNlIHdlIG5l ZWQgZGlyZWN0IGFjY2VzcyB0byB0aGUgZmlsZSBhcnJheS4gKi8KKy8qIE5vdCBuZWVkZWQgZm9y IFZNUyBhbnl3YXksIGJlY2F1c2Ugd2UgZG9uJ3QgbWFrZSBiYWNrdXAgZmlsZXMgdGhlcmUuICov CisKKyNkZWZpbmUgTUFYS0VFUCAzMiAgICAgICAgICAgICAgICAgICAgICAvKiBCaWdnZXN0IC9L RUVQOiB2YWx1ZSAqLworCitzdGF0aWMgaW50CisgIHB1X2tlZXAgPSAwLCBwdV9saXN0ID0gMCwg cHVfZG90ID0gMCwgcHVfYXNrID0gMCwgcHVfaGRnID0gMDsKKworI2lmZGVmIENLX1RUR1dTSVoK K3N0YXRpYyBpbnQgcHVfcGFnZSA9IC0xOworI2Vsc2UKK3N0YXRpYyBpbnQgcHVfcGFnZSA9IDA7 CisjZW5kaWYgLyogQ0tfVFRHV1NJWiAqLworCisjaWZuZGVmIE5PU0hPVworVk9JRAorc2hvd3B1 cmdvcHRzKCkgeyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNIT1cgUFVSR0UgY29tbWFuZCBv cHRpb25zICovCisgICAgaW50IHggPSAwOworICAgIGV4dGVybiBpbnQgb3B0bGluZXM7CisgICAg cHJ0b3B0KCZvcHRsaW5lcywiUFVSR0UiKTsKKyAgICBpZiAocHVfYXNrID4gLTEpIHsKKyAgICAg ICAgeCsrOworICAgICAgICBwcnRvcHQoJm9wdGxpbmVzLCBwdV9hc2sgPyAiL0FTSyIgOiAiL05P QVNLIik7CisgICAgfQorI2lmZGVmIFVOSVhPUk9TSworICAgIGlmIChwdV9kb3QgPiAtMSkgewor ICAgICAgICB4Kys7CisgICAgICAgIHBydG9wdCgmb3B0bGluZXMsIHB1X2RvdCA/ICIvRE9URklM RVMiIDogIi9OT0RPVEZJTEVTIik7CisgICAgfQorI2VuZGlmIC8qIFVOSVhPUk9TSyAqLworICAg IGlmIChwdV9rZWVwID4gLTEpIHsKKyAgICAgICAgeCsrOworICAgICAgICBja21ha21zZyh0bXBi dWYsVE1QQlVGU0laLCIvS0VFUDoiLGNraXRvYShwdV9rZWVwKSxOVUxMLE5VTEwpOworICAgICAg ICBwcnRvcHQoJm9wdGxpbmVzLHRtcGJ1Zik7CisgICAgfQorICAgIGlmIChwdV9saXN0ID4gLTEp IHsKKyAgICAgICAgeCsrOworICAgICAgICBwcnRvcHQoJm9wdGxpbmVzLCBwdV9saXN0ID8gIi9M SVNUIiA6ICIvTk9MSVNUIik7CisgICAgfQorICAgIGlmIChwdV9oZGcgPiAtMSkgeworICAgICAg ICB4Kys7CisgICAgICAgIHBydG9wdCgmb3B0bGluZXMsIHB1X2hkZyA/ICIvSEVBRElORyIgOiAi L05PSEVBRElORyIpOworICAgIH0KKyNpZmRlZiBDS19UVEdXU0laCisgICAgaWYgKHB1X3BhZ2Ug PiAtMSkgeworICAgICAgICB4Kys7CisgICAgICAgIHBydG9wdCgmb3B0bGluZXMsIHB1X3BhZ2Ug PyAiL1BBR0UiIDogIi9OT1BBR0UiKTsKKyAgICB9CisjZW5kaWYgLyogQ0tfVFRHV1NJWiAqLwor ICAgIGlmICgheCkgcHJ0b3B0KCZvcHRsaW5lcywiKG5vIG9wdGlvbnMgc2V0KSIpOworICAgIHBy dG9wdCgmb3B0bGluZXMsIiIpOworfQorI2VuZGlmIC8qIE5PU0hPVyAqLworCitpbnQKK3NldHB1 cmdvcHRzKCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTZXQgUFVSR0UgY29tbWFuZCBv cHRpb25zICovCisgICAgaW50IGMsIHosIGdldHZhbCA9IDA7CisgICAgaW50CisgICAgICB4X2tl ZXAgID0gLTEsIHhfbGlzdCA9IC0xLCB4X3BhZ2UgPSAtMSwKKyAgICAgIHhfaGRnICAgPSAtMSwg eF9hc2sgID0gLTEsIHhfZG90ICA9IC0xOworCisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgaWYg KCh5ID0gY21zd2kocHVyZ3RhYixucHVyZ3RhYiwiU3dpdGNoIiwiIix4eHN0cmluZykpIDwgMCkg eworICAgICAgICAgICAgaWYgKHkgPT0gLTMpCisgICAgICAgICAgICAgIGJyZWFrOworICAgICAg ICAgICAgZWxzZQorICAgICAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgIH0KKyAgICAgICAg YyA9IGNtZ2JyaygpOworICAgICAgICBpZiAoKGdldHZhbCA9IChjID09ICc6JyB8fCBjID09ICc9 JykpICYmICEoY21na3dmbGdzKCkgJiBDTV9BUkcpKSB7CisgICAgICAgICAgICBwcmludGYoIj9U aGlzIHN3aXRjaCBkb2VzIG5vdCB0YWtlIGFuIGFyZ3VtZW50XG4iKTsKKyAgICAgICAgICAgIHJl dHVybigtOSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFnZXR2YWwgJiYgKGNtZ2t3Zmxncygp ICYgQ01fQVJHKSkgeworICAgICAgICAgICAgcHJpbnRmKCI/VGhpcyBzd2l0Y2ggcmVxdWlyZXMg YW4gYXJndW1lbnRcbiIpOworICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgfQorICAg ICAgICBzd2l0Y2ggKHkpIHsKKyAgICAgICAgICBjYXNlIFBVX0tFRVA6CisgICAgICAgICAgICB6 ID0gMTsKKyAgICAgICAgICAgIGlmIChjID09ICc6JyB8fCBjID09ICc9JykKKyAgICAgICAgICAg ICAgaWYgKCh5ID0gY21udW0oIkhvdyBtYW55IGJhY2t1cCBmaWxlcyB0byBrZWVwIiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIjEiLDEwLCZ6LHh4c3RyaW5nKSkgPCAwKQorICAgICAg ICAgICAgICAgIHJldHVybih5KTsKKyAgICAgICAgICAgIGlmICh6IDwgMCB8fCB6ID4gTUFYS0VF UCkgeworICAgICAgICAgICAgICAgIHByaW50ZigiP1BsZWFzZSBzcGVjaWZ5IGEgbnVtYmVyIGJl dHdlZW4gMCBhbmQgJWRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgIE1BWEtFRVAKKyAgICAg ICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAg ICAgICAgfQorICAgICAgICAgICAgeF9rZWVwID0gejsKKyAgICAgICAgICAgIGJyZWFrOworICAg ICAgICAgIGNhc2UgUFVfTElTVDoKKyAgICAgICAgICBjYXNlIFBVX1ZFUkI6CisgICAgICAgICAg ICB4X2xpc3QgPSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBQVV9RVUlF OgorICAgICAgICAgIGNhc2UgUFVfTk9MSToKKyAgICAgICAgICAgIHhfbGlzdCA9IDA7CisgICAg ICAgICAgICBicmVhazsKKyNpZmRlZiBDS19UVEdXU0laCisgICAgICAgICAgY2FzZSBQVV9QQUdF OgorICAgICAgICAgICAgeF9wYWdlID0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg IGNhc2UgUFVfTk9QQToKKyAgICAgICAgICAgIHhfcGFnZSA9IDA7CisgICAgICAgICAgICBicmVh azsKKyNlbmRpZiAvKiBDS19UVEdXU0laICovCisgICAgICAgICAgY2FzZSBQVV9IREc6CisgICAg ICAgICAgICB4X2hkZyA9IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIFBV X05PSDoKKyAgICAgICAgICAgIHhfaGRnID0gMDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg ICAgIGNhc2UgUFVfQVNLOgorICAgICAgICAgICAgeF9hc2sgPSAxOworICAgICAgICAgICAgYnJl YWs7CisgICAgICAgICAgY2FzZSBQVV9OQVNLOgorICAgICAgICAgICAgeF9hc2sgPSAwOworICAg ICAgICAgICAgYnJlYWs7CisjaWZkZWYgVU5JWE9ST1NLCisgICAgICAgICAgY2FzZSBQVV9ET1Q6 CisgICAgICAgICAgICB4X2RvdCA9IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBj YXNlIFBVX05PRE9UOgorICAgICAgICAgICAgeF9kb3QgPSAwOworICAgICAgICAgICAgYnJlYWs7 CisjZW5kaWYgLyogVU5JWE9ST1NLICovCisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg IHByaW50ZigiP1RoaXMgb3B0aW9uIGNhbiBub3QgYmUgc2V0XG4iKTsKKyAgICAgICAgICAgIHJl dHVybigtOSk7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSAg ICAgICAgICAgICAgLyogR2V0IGNvbmZpcm1hdGlvbiAqLworICAgICAgcmV0dXJuKHgpOworICAg IGlmICh4X2tlZXAgPiAtMSkgICAgICAgICAgICAgICAgICAgIC8qIFNldCBQVVJHRSBkZWZhdWx0 cy4gKi8KKyAgICAgIHB1X2tlZXAgPSB4X2tlZXA7CisgICAgaWYgKHhfbGlzdCA+IC0xKQorICAg ICAgcHVfbGlzdCA9IHhfbGlzdDsKKyNpZmRlZiBDS19UVEdXU0laCisgICAgaWYgKHhfcGFnZSA+ IC0xKQorICAgICAgcHVfcGFnZSA9IHhfcGFnZTsKKyNlbmRpZiAvKiBDS19UVEdXU0laICovCisg ICAgaWYgKHhfaGRnID4gLTEpCisgICAgICBwdV9oZGcgPSB4X2hkZzsKKyAgICBpZiAoeF9hc2sg PiAtMSkKKyAgICAgIHB1X2FzayA9IHhfYXNrOworICAgIGlmICh4X2RvdCA+IC0xKQorICAgICAg cHVfZG90ID0geF9kb3Q7CisgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKK30KKworaW50Citkb3B1 cmdlKCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRG8gdGhlIFBVUkdFIGNvbW1h bmQgKi8KKyAgICBleHRlcm4gY2hhciAqKiBtdGNoczsKKyAgICBleHRlcm4gaW50IHhhc2ttb3Jl LCBjbWRfcm93cywgcmVjdXJzaXZlOworICAgIGludCBzaW11bGF0ZSA9IDAsIGFza2luZyA9IDA7 CisgICAgaW50IGxpc3RpbmcgPSAwLCBwYWdpbmcgPSAtMSwgbGluZXMgPSAwLCBkZWxldGluZyA9 IDEsIGVycm9ycyA9IDA7CisgICAgc3RydWN0IEZEQiBzdywgc2YsIGNtOworICAgIGludCBnLCBp LCBqLCBrLCBtID0gMCwgbiwgeCwgeSwgeiwgZG9uZSA9IDAsIGNvdW50ID0gMCwgZmxhZ3MgPSAw OworICAgIGludCB0b2tlZXAgPSAwLCBnZXR2YWwgPSAwLCBoYXZlbmFtZSA9IDAsIGNvbmZpcm1l ZCA9IDA7CisgICAgaW50IHh4W01BWEtFRVArMV07ICAgICAgICAgICAgICAgICAgLyogQXJyYXkg b2YgbnVtYmVycyB0byBrZWVwICovCisgICAgaW50IG1pbiA9IC0xOworICAgIGludCB4X2hkZyA9 IDAsIGZzID0gMCwgcmMgPSAwOworICAgIENLX09GRl9UIG1pbnNpemUgPSAtMUwsIG1heHNpemUg PSAtMUw7CisgICAgY2hhciBuYW1lYnVmW0NLTUFYUEFUSCs0XTsKKyAgICBjaGFyIGJhc2VidWZb Q0tNQVhQQVRIKzRdOworICAgIGNoYXIKKyAgICAgICogcHVfYWZ0ID0gTlVMTCwKKyAgICAgICog cHVfYmVmID0gTlVMTCwKKyAgICAgICogcHVfbmFmID0gTlVMTCwKKyAgICAgICogcHVfbmJmID0g TlVMTCwKKyAgICAgICogcHVfZXhjID0gTlVMTDsKKyAgICBjaGFyICogcHhsaXN0WzhdOyAgICAg ICAgICAgICAgICAgICAvKiBFeGNlcHRpb24gbGlzdCAqLworCisgICAgaWYgKHB1X2tlZXAgPiAt MSkgICAgICAgICAgICAgICAgICAgLyogU2V0IFBVUkdFIGRlZmF1bHRzLiAqLworICAgICAgdG9r ZWVwID0gcHVfa2VlcDsKKyAgICBpZiAocHVfbGlzdCA+IC0xKQorICAgICAgbGlzdGluZyA9IHB1 X2xpc3Q7CisjaWZkZWYgQ0tfVFRHV1NJWgorICAgIGlmIChwdV9wYWdlID4gLTEpCisgICAgICBw YWdpbmcgPSBwdV9wYWdlOworI2VuZGlmIC8qIENLX1RUR1dTSVogKi8KKworICAgIGZvciAoaSA9 IDA7IGkgPD0gTUFYS0VFUDsgaSsrKSAgICAgIC8qIENsZWFyIHRoaXMgbnVtYmVyIGJ1ZmZlciAq LworICAgICAgeHhbaV0gPSAwOworICAgIGZvciAoaSA9IDA7IGkgPCA4OyBpKyspICAgICAgICAg ICAgIC8qIEluaXRpYWxpemUgdGhlc2UuLi4gKi8KKyAgICAgIHB4bGlzdFtpXSA9IE5VTEw7CisK KyAgICBnX21hdGNoZG90ID0gbWF0Y2hkb3Q7ICAgICAgICAgICAgICAvKiBTYXZlIHRoZXNlLi4u ICovCisKKyAgICBjbWZkYmkoJnN3LCAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxc3QgRkRC IC0gUFVSR0Ugc3dpdGNoZXMgKi8KKyAgICAgICAgICAgX0NNS0VZLCAgICAgICAgICAgICAgICAg ICAgICAvKiBmY29kZSAqLworICAgICAgICAgICAiRmlsZW5hbWUgb3Igc3dpdGNoIiwgICAgICAg IC8qIGhscG1zZyAqLworICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IGRlZmF1bHQgKi8KKyAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBh ZGR0bCBzdHJpbmcgZGF0YSAqLworICAgICAgICAgICBucHVyZ3RhYiwgICAgICAgICAgICAgICAg ICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAxOiB0Ymwgc2l6ZSAqLworICAgICAgICAgICA0LCAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAyOiA0ID0gY21z d2kgKi8KKyAgICAgICAgICAgeHhzdHJpbmcsICAgICAgICAgICAgICAgICAgICAvKiBQcm9jZXNz aW5nIGZ1bmN0aW9uICovCisgICAgICAgICAgIHB1cmd0YWIsICAgICAgICAgICAgICAgICAgICAg LyogS2V5d29yZCB0YWJsZSAqLworICAgICAgICAgICAmc2YgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIFBvaW50ZXIgdG8gbmV4dCBGREIgKi8KKyAgICAgICAgICAgKTsKKyAgICBjbWZkYmko JnNmLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiAybmQgRkRCIC0gZmlsZXNwZWMgdG8gcHVy Z2UgKi8KKyAgICAgICAgICAgX0NNSUZJLCAgICAgICAgICAgICAgICAgICAgICAvKiBmY29kZSAq LworICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBkZWZhdWx0ICovCisgICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAg LyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KKyAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMSAqLworICAgICAgICAgICAwLCAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAyICovCisgICAgICAgICAg IHh4c3RyaW5nLAorICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAmY20KKyAgICAgICAgICAg KTsKKyAgICBjbWZkYmkoJmNtLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBPciBwcmVtYXR1 cmUgY29uZmlybWF0aW9uICovCisgICAgICAgICAgIF9DTUNGTSwgICAgICAgICAgICAgICAgICAg ICAgLyogZmNvZGUgKi8KKyAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBobHBtc2cgKi8KKyAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBk ZWZhdWx0ICovCisgICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRk dGwgc3RyaW5nIGRhdGEgKi8KKyAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMSAqLworICAgICAgICAgICAwLCAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAyICovCisgICAgICAgICAgIE5VTEws CisgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgIE5VTEwKKyAgICAgICAgICAgKTsKKworICAg IHdoaWxlICghaGF2ZW5hbWUgJiYgIWNvbmZpcm1lZCkgeworICAgICAgICB4ID0gY21mZGIoJnN3 KTsgICAgICAgICAgICAgICAgIC8qIFBhcnNlIHNvbWV0aGluZyAqLworICAgICAgICBpZiAoeCA8 IDApIHsgICAgICAgICAgICAgICAgICAgIC8qIEVycm9yICovCisgICAgICAgICAgICByYyA9IHg7 CisgICAgICAgICAgICBnb3RvIHhwdXJnZTsKKyAgICAgICAgfSBlbHNlIGlmIChjbXJlc3VsdC5m Y29kZSA9PSBfQ01LRVkpIHsKKyAgICAgICAgICAgIGNoYXIgYzsKKyAgICAgICAgICAgIGMgPSBj bWdicmsoKTsKKyAgICAgICAgICAgIGlmICgoZ2V0dmFsID0gKGMgPT0gJzonIHx8IGMgPT0gJz0n KSkgJiYgIShjbWdrd2ZsZ3MoKSAmIENNX0FSRykpIHsKKyAgICAgICAgICAgICAgICBwcmludGYo Ij9UaGlzIHN3aXRjaCBkb2VzIG5vdCB0YWtlIGFuIGFyZ3VtZW50XG4iKTsKKyAgICAgICAgICAg ICAgICByYyA9IC05OworICAgICAgICAgICAgICAgIGdvdG8geHB1cmdlOworICAgICAgICAgICAg fQorICAgICAgICAgICAgaWYgKCFnZXR2YWwgJiYgKGNtZ2t3ZmxncygpICYgQ01fQVJHKSkgewor ICAgICAgICAgICAgICAgIHByaW50ZigiP1RoaXMgc3dpdGNoIHJlcXVpcmVzIGFuIGFyZ3VtZW50 XG4iKTsKKyAgICAgICAgICAgICAgICByYyA9IC05OworICAgICAgICAgICAgICAgIGdvdG8geHB1 cmdlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3dpdGNoIChrID0gY21yZXN1bHQubnJl c3VsdCkgeworICAgICAgICAgICAgICBjYXNlIFBVX0tFRVA6CisgICAgICAgICAgICAgICAgeiA9 IDE7CisgICAgICAgICAgICAgICAgaWYgKGMgPT0gJzonIHx8IGMgPT0gJz0nKSB7CisgICAgICAg ICAgICAgICAgICAgIGlmICgoeSA9IGNtbnVtKCJIb3cgbWFueSBiYWNrdXAgZmlsZXMgdG8ga2Vl cCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxIiwxMCwmeix4eHN0cmlu ZykpIDwgMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmMgPSB5OworICAgICAgICAgICAg ICAgICAgICAgICAgZ290byB4cHVyZ2U7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHogPCAwIHx8IHogPiBNQVhLRUVQKSB7Cisg ICAgICAgICAgICAgICAgICAgIHByaW50ZigiP1BsZWFzZSBzcGVjaWZ5IGEgbnVtYmVyIGJldHdl ZW4gMCBhbmQgJWRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBNQVhLRUVQCisgICAg ICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgICAgICByYyA9IC05Owor ICAgICAgICAgICAgICAgICAgICBnb3RvIHhwdXJnZTsKKyAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgICAgdG9rZWVwID0gejsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg ICAgICAgY2FzZSBQVV9MSVNUOgorICAgICAgICAgICAgICAgIGxpc3RpbmcgPSAxOworICAgICAg ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIFBVX05PTEk6CisgICAgICAgICAg ICAgICAgbGlzdGluZyA9IDA7CisgICAgICAgICAgICAgICAgYnJlYWs7CisjaWZkZWYgQ0tfVFRH V1NJWgorICAgICAgICAgICAgICBjYXNlIFBVX1BBR0U6CisgICAgICAgICAgICAgICAgcGFnaW5n ID0gMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBQVV9OT1BB OgorICAgICAgICAgICAgICAgIHBhZ2luZyA9IDA7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisj ZW5kaWYgLyogQ0tfVFRHV1NJWiAqLworICAgICAgICAgICAgICBjYXNlIFBVX0RFTEU6CisgICAg ICAgICAgICAgICAgZGVsZXRpbmcgPSAxOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg ICAgICAgICBjYXNlIFBVX05PREU6CisgICAgICAgICAgICAgICAgZGVsZXRpbmcgPSAwOworICAg ICAgICAgICAgICAgIHNpbXVsYXRlID0gMTsKKyAgICAgICAgICAgICAgICBsaXN0aW5nID0gMTsK KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBQVV9BU0s6CisgICAg ICAgICAgICAgICAgYXNraW5nID0gMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg ICAgICAgY2FzZSBQVV9OQVNLOgorICAgICAgICAgICAgICAgIGFza2luZyA9IDA7CisgICAgICAg ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgUFVfQUZUOgorICAgICAgICAgICAg ICBjYXNlIFBVX0JFRjoKKyAgICAgICAgICAgICAgY2FzZSBQVV9OQUY6CisgICAgICAgICAgICAg IGNhc2UgUFVfTkJGOgorICAgICAgICAgICAgICAgIGlmICgoeCA9IGNtZGF0ZSgiRmlsZS10aW1l IiwiIiwmcywwLHh4c3RyaW5nKSkgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh4ID09 IC0zKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIj9EYXRlLXRpbWUgcmVxdWly ZWRcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgcmMgPSAtOTsKKyAgICAgICAgICAgICAg ICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgcmMgPSB4OworICAgICAgICAgICAg ICAgICAgICBnb3RvIHhwdXJnZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg ZnMrKzsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGspIHsKKyAgICAgICAgICAgICAgICAgIGNh c2UgUFVfQUZUOiBtYWtlc3RyKCZwdV9hZnQscyk7IGJyZWFrOworICAgICAgICAgICAgICAgICAg Y2FzZSBQVV9CRUY6IG1ha2VzdHIoJnB1X2JlZixzKTsgYnJlYWs7CisgICAgICAgICAgICAgICAg ICBjYXNlIFBVX05BRjogbWFrZXN0cigmcHVfbmFmLHMpOyBicmVhazsKKyAgICAgICAgICAgICAg ICAgIGNhc2UgUFVfTkJGOiBtYWtlc3RyKCZwdV9uYmYscyk7IGJyZWFrOworICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBQVV9TTUE6 CisgICAgICAgICAgICAgIGNhc2UgUFVfTEFSOgorICAgICAgICAgICAgICAgIGlmICgoeCA9IGNt bnVtKCJGaWxlIHNpemUgaW4gYnl0ZXMiLCIwIiwxMCwmeSx4eHN0cmluZykpIDwgMCkgeworICAg ICAgICAgICAgICAgICAgICByYyA9IHg7CisgICAgICAgICAgICAgICAgICAgIGdvdG8geHB1cmdl OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBmcysrOworICAgICAgICAgICAg ICAgIHN3aXRjaCAoY21yZXN1bHQubnJlc3VsdCkgeworICAgICAgICAgICAgICAgICAgY2FzZSBQ VV9TTUE6IG1pbnNpemUgPSB5OyBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgUFVfTEFS OiBtYXhzaXplID0geTsgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIFBVX0RPVDoKKyAgICAgICAgICAgICAgICBtYXRj aGRvdCA9IDE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgUFVf Tk9ET1Q6CisgICAgICAgICAgICAgICAgbWF0Y2hkb3QgPSAwOworICAgICAgICAgICAgICAgIGJy ZWFrOworICAgICAgICAgICAgICBjYXNlIFBVX0VYQzoKKyAgICAgICAgICAgICAgICBpZiAoKHgg PSBjbWZsZCgiUGF0dGVybiIsIiIsJnMseHhzdHJpbmcpKSA8IDApIHsKKyAgICAgICAgICAgICAg ICAgICAgaWYgKHggPT0gLTMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiP1Bh dHRlcm4gcmVxdWlyZWRcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgcmMgPSAtOTsKKyAg ICAgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgcmMgPSB4Owor ICAgICAgICAgICAgICAgICAgICBnb3RvIHhwdXJnZTsKKyAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgICAgZnMrKzsKKyAgICAgICAgICAgICAgICBtYWtlc3RyKCZwdV9leGMscyk7Cisg ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgUFVfSERHOgorICAgICAg ICAgICAgICAgIHhfaGRnID0gMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyNpZmRlZiBSRUNV UlNJVkUKKyAgICAgICAgICAgICAgY2FzZSBQVV9SRUNVOiAgICAgICAgICAgICAvKiAvUkVDVVJT SVZFICovCisgICAgICAgICAgICAgICAgcmVjdXJzaXZlID0gMjsKKyAgICAgICAgICAgICAgICBi cmVhazsKKyNlbmRpZiAvKiBSRUNVUlNJVkUgKi8KKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAg ICAgICAgICAgICAgICBwcmludGYoIj9Ob3QgaW1wbGVtZW50ZWQgeWV0IC0gXCIlc1wiXG4iLGF0 bWJ1Zik7CisgICAgICAgICAgICAgICAgcmMgPSAtOTsKKyAgICAgICAgICAgICAgICBnb3RvIHhw dXJnZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChjbXJlc3VsdC5mY29kZSA9 PSBfQ01JRkkpIHsKKyAgICAgICAgICAgIGhhdmVuYW1lID0gMTsKKyAgICAgICAgfSBlbHNlIGlm IChjbXJlc3VsdC5mY29kZSA9PSBfQ01DRk0pIHsKKyAgICAgICAgICAgIGNvbmZpcm1lZCA9IDE7 CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByYyA9IC0yOworICAgICAgICAgICAgZ290 byB4cHVyZ2U7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGhhdmVuYW1lKSB7CisjaWZkZWYg Q0tSRUdFWAorICAgICAgICBja21ha21zZyhsaW5lLExJTkJVRlNJWixjbXJlc3VsdC5zcmVzdWx0 LCIuflsxLTldKn4iLE5VTEwsTlVMTCk7CisjZWxzZQorICAgICAgICBja21ha21zZyhsaW5lLExJ TkJVRlNJWixjbXJlc3VsdC5zcmVzdWx0LCIufip+IixOVUxMLE5VTEwpOworI2VuZGlmIC8qIENL UkVHRVggKi8KKyAgICB9IGVsc2UgeworI2lmZGVmIENLUkVHRVgKKyAgICAgICAgY2tzdHJuY3B5 KGxpbmUsIiouflsxLTldKn4iLExJTkJVRlNJWik7CisjZWxzZQorICAgICAgICBja3N0cm5jcHko bGluZSwiKi5+Kn4iLExJTkJVRlNJWik7CisjZW5kaWYgLyogQ0tSRUdFWCAqLworICAgIH0KKyAg ICBpZiAoIWNvbmZpcm1lZCkgeworICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHsKKyAg ICAgICAgICAgIHJjID0geDsKKyAgICAgICAgICAgIGdvdG8geHB1cmdlOworICAgICAgICB9Cisg ICAgfQorICAgIC8qIFBhcnNlIGZpbmlzaGVkIC0gbm93IGFjdGlvbiAqLworCisjaWZkZWYgQ0tf TE9HSU4KKyAgICBpZiAoaXNndWVzdCkgeworICAgICAgICBwcmludGYoIj9GaWxlIGRlbGV0aW9u IGJ5IGd1ZXN0cyBub3QgcGVybWl0dGVkLlxuIik7CisgICAgICAgIHJjID0gLTk7CisgICAgICAg IGdvdG8geHB1cmdlOworICAgIH0KKyNlbmRpZiAvKiBDS19MT0dJTiAqLworCisjaWZkZWYgQ0tf VFRHV1NJWgorICAgIGlmIChwYWdpbmcgPCAwKSAgICAgICAgICAgICAgICAgICAgIC8qIC9bTk9d UEFHRSBub3QgZ2l2ZW4gKi8KKyAgICAgIHBhZ2luZyA9IHhhc2ttb3JlOyAgICAgICAgICAgICAg ICAvKiBzbyB1c2UgcHJldmFpbGluZyAqLworI2VuZGlmIC8qIENLX1RUR1dTSVogKi8KKworICAg IGxpbmVzID0gMDsKKyAgICBpZiAoeF9oZGcgPiAwKSB7CisgICAgICAgIHByaW50ZigiUHVyZ2lu ZyAlcywga2VlcGluZyAlZC4uLiVzXG4iLAorICAgICAgICAgICAgICAgcywKKyAgICAgICAgICAg ICAgIHRva2VlcCwKKyAgICAgICAgICAgICAgIHNpbXVsYXRlID8gIiAoU0lNVUxBVElPTikiIDog IiIpOworICAgICAgICBsaW5lcyArPSAyOworICAgIH0KKyAgICBmbGFncyA9IFpYX0ZJTE9OTFk7 CisgICAgaWYgKHJlY3Vyc2l2ZSkgZmxhZ3MgfD0gWlhfUkVDVVJTRTsKKyAgICBuID0gbnp4cGFu ZChsaW5lLGZsYWdzKTsgICAgICAgICAgICAvKiBHZXQgbGlzdCBvZiBiYWNrdXAgZmlsZXMgKi8K KyAgICBpZiAodG9rZWVwIDwgMSkgeyAgICAgICAgICAgICAgICAgICAvKiBEZWxldGluZyBhbGwg b2YgdGhlbS4uLiAqLworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisgICAgICAg ICAgICBpZiAoZnMpIGlmIChmaWxlc2VsZWN0KG10Y2hzW2ldLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBwdV9hZnQscHVfYmVmLHB1X25hZixwdV9uYmYsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIG1pbnNpemUsbWF4c2l6ZSwwLDgscHhsaXN0KSA8IDEp IHsKKyAgICAgICAgICAgICAgICBpZiAobGlzdGluZyA+IDApIHsKKyAgICAgICAgICAgICAgICAg ICAgcHJpbnRmKCIgJXMgKFNLSVBQRUQpXG4iLG10Y2hzW2ldKTsKKyNpZmRlZiBDS19UVEdXU0la CisgICAgICAgICAgICAgICAgICAgIGlmIChwYWdpbmcpCisgICAgICAgICAgICAgICAgICAgICAg aWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg aWYgKCFhc2ttb3JlKCkpIGdvdG8geHB1cmdlOyBlbHNlIGxpbmVzID0gMDsKKyAgICAgICAgICAg ICAgICAgICAgICB9CisjZW5kaWYgLyogQ0tfVFRHV1NJWiAqLworICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm IChhc2tpbmcpIHsKKyAgICAgICAgICAgICAgICBpbnQgeDsKKyAgICAgICAgICAgICAgICBja21h a21zZyh0bXBidWYsVE1QQlVGU0laLCIgRGVsZXRlICIsbXRjaHNbaV0sIj8iLE5VTEwpOworICAg ICAgICAgICAgICAgIHggPSBnZXR5ZXNubyh0bXBidWYsMSk7CisgICAgICAgICAgICAgICAgc3dp dGNoICh4KSB7CisgICAgICAgICAgICAgICAgICBjYXNlIDA6IGNvbnRpbnVlOworICAgICAgICAg ICAgICAgICAgY2FzZSAxOiBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgMjogZ290byB4 cHVyZ2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgeCA9 IGRlbGV0aW5nID8gemRlbGV0KG10Y2hzW2ldKSA6IDA7CisgICAgICAgICAgICBpZiAoeCA+IC0x KSB7CisgICAgICAgICAgICAgICAgaWYgKGxpc3RpbmcpCisgICAgICAgICAgICAgICAgICBwcmlu dGYoIiAlcyAoJXMpXG4iLCBtdGNoc1tpXSxkZWxldGluZyA/ICJPSyIgOiAiU0VMRUNURUQiKTsK KyAgICAgICAgICAgICAgICBjb3VudCsrOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg ICAgICAgICBlcnJvcnMrKzsKKyAgICAgICAgICAgICAgICBpZiAobGlzdGluZykKKyAgICAgICAg ICAgICAgICAgIHByaW50ZigiICVzIChGQUlMRUQpXG4iLCBtdGNoc1tpXSk7CisgICAgICAgICAg ICB9CisjaWZkZWYgQ0tfVFRHV1NJWgorICAgICAgICAgICAgaWYgKGxpc3RpbmcgJiYgcGFnaW5n KQorICAgICAgICAgICAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeworICAgICAgICAg ICAgICAgICAgaWYgKCFhc2ttb3JlKCkpIGdvdG8geHB1cmdlOyBlbHNlIGxpbmVzID0gMDsKKyAg ICAgICAgICAgICAgfQorI2VuZGlmIC8qIENLX1RUR1dTSVogKi8KKyAgICAgICAgfQorICAgICAg ICBnb3RvIHhwdXJnZTsKKyAgICB9CisgICAgaWYgKG4gPCB0b2tlZXApIHsgICAgICAgICAgICAg ICAgICAgLyogTm90IGRlbGV0aW5nIGFueSAqLworICAgICAgICBjb3VudCA9IDA7CisgICAgICAg IGlmIChsaXN0aW5nKQorICAgICAgICAgIHByaW50ZigiIE1hdGNoZXMgPSAlZDogTm90IGVub3Vn aCB0byBwdXJnZS5cbiIsbik7CisgICAgICAgIGdvdG8geHB1cmdlOworICAgIH0KKworICAgIC8q IEdlbmVyYWwgY2FzZSAtIGRlbGV0ZSBzb21lIGJ1dCBub3Qgb3RoZXJzICovCisKKyAgICBzaF9z b3J0KG10Y2hzLE5VTEwsbiwwLDAsZmlsZWNhc2UpOyAvKiBBbHBoYWJldGl6ZSB0aGUgbGlzdCAo RVNTRU5USUFMKSAqLworCisgICAgZyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogU3RhcnQgb2YgY3VycmVudCBncm91cCAqLworICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKysp IHsgICAgICAgICAgIC8qIEdvIHRocnUgc29ydGVkIGZpbGUgbGlzdCAqLworICAgICAgICB4ID0g em5leHQobmFtZWJ1Zik7ICAgICAgICAgICAgIC8qIEdldCBuZXh0IGZpbGUgKi8KKyAgICAgICAg aWYgKHggPCAxIHx8ICFuYW1lYnVmWzBdIHx8IGkgPT0gbiAtIDEpIC8qIE5vIG1vcmU/ICovCisg ICAgICAgICAgZG9uZSA9IDE7ICAgICAgICAgICAgICAgICAgICAgLyogTk9URTogJ2RvbmUnIG11 c3QgYmUgMCBvciAxIG9ubHkgKi8KKyAgICAgICAgaWYgKGZzKSBpZiAoZmlsZXNlbGVjdChuYW1l YnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1X2FmdCxwdV9iZWYscHVfbmFm LHB1X25iZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5zaXplLG1heHNpemUs MCw4LHB4bGlzdCkgPCAxKSB7CisgICAgICAgICAgICBpZiAobGlzdGluZyA+IDApIHsKKyAgICAg ICAgICAgICAgICBwcmludGYoIiAlcyAoU0tJUFBFRClcbiIsbmFtZWJ1Zik7CisgICAgICAgICAg ICAgICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpCisgICAgICAgICAgICAgICAgICBpZiAo IWFza21vcmUoKSkgZ290byB4cHVyZ2U7IGVsc2UgbGluZXMgPSAwOworICAgICAgICAgICAgfQor ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHggPiAwKQorICAg ICAgICAgIGlmICgobSA9IGJrdXBudW0obmFtZWJ1ZiwmeikpIDwgMCkgLyogVGhpcyBmaWxlJ3Mg YmFja3VwIG51bWJlci4gKi8KKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBmb3IgKGog PSAwOyBqIDwgdG9rZWVwOyBqKyspIHsgIC8qIEluc2VydCBpbiBsaXN0LiAqLworICAgICAgICAg ICAgaWYgKG0gPiB4eFtqXSkgeworICAgICAgICAgICAgICAgIGZvciAoayA9IHRva2VlcCAtIDE7 IGsgPiBqOyBrLS0pCisgICAgICAgICAgICAgICAgICB4eFtrXSA9IHh4W2stMV07CisgICAgICAg ICAgICAgICAgeHhbal0gPSBtOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg fQorICAgICAgICB9CisgICAgICAgIC8qIE5ldyBncm91cD8gKi8KKyAgICAgICAgaWYgKGRvbmUg fHwgKGkgPiAwICYmIGNrc3RyY21wKG5hbWVidWYsYmFzZWJ1Zix6LDEpKSkgeworICAgICAgICAg ICAgaWYgKGkgKyBkb25lIC0gZyA+IHRva2VlcCkgeyAvKiBEbyB3ZSBoYXZlIGVub3VnaCB0byBw dXJnZT8gKi8KKyAgICAgICAgICAgICAgICBtaW4gPSB4eFt0b2tlZXAtMV07ICAgICAvKiBZZXMs IGxvd2VzdCBiYWNrdXAgbnVtYmVyIHRvIGtlZXAgKi8KKyAgICAgICAgICAgICAgICBkZWJ1ZyhG MTExLCJkb3B1cmdlIGdyb3VwIixiYXNlYnVmLG1pbik7CisgICAgICAgICAgICAgICAgZm9yIChq ID0gZzsgaiA8IGkgKyBkb25lOyBqKyspIHsgLyogR28gdGhyb3VnaCB0aGlzIGdyb3VwICovCisg ICAgICAgICAgICAgICAgICAgIHggPSBia3VwbnVtKG10Y2hzW2pdLCZ6KTsgICAgLyogR2V0IGZp bGUgYmFja3VwIG51bWJlciAqLworICAgICAgICAgICAgICAgICAgICBpZiAoeCA+IDAgJiYgeCA8 IG1pbikgeyAgICAgIC8qIEJlbG93IG1pbmltdW0/ICovCisgICAgICAgICAgICAgICAgICAgICAg ICB4ID0gZGVsZXRpbmcgPyB6ZGVsZXQobXRjaHNbal0pIDogMDsKKyAgICAgICAgICAgICAgICAg ICAgICAgIGlmICh4IDwgMCkgZXJyb3JzKys7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo bGlzdGluZykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIgJXMgKCVzKVxuIiwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10Y2hzW2pdLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKCh4IDwgMCkgPyAiRVJST1IiIDoKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoZGVsZXRpbmcgPyAiREVMRVRFRCIgOiAiU0VMRUNURUQiKSkK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgICAg ICAgICBjb3VudCsrOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxpc3RpbmcpIC8q IE5vdCBiZWxvdyBtaW5pbXVtIC0ga2VlcCB0aGlzIG9uZSAqLworICAgICAgICAgICAgICAgICAg ICAgIHByaW50ZigiICVzIChLRVBUKVxuIixtdGNoc1tqXSk7CisjaWZkZWYgQ0tfVFRHV1NJWgor ICAgICAgICAgICAgICAgICAgICBpZiAobGlzdGluZyAmJiBwYWdpbmcpCisgICAgICAgICAgICAg ICAgICAgICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgaWYgKCFhc2ttb3JlKCkpIGdvdG8geHB1cmdlOyBlbHNlIGxpbmVzID0gMDsKKyAg ICAgICAgICAgICAgICAgICAgICB9CisjZW5kaWYgLyogQ0tfVFRHV1NJWiAqLworICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAobGlzdGluZyAmJiBwYWdpbmcpIHsgLyog Tm90IGVub3VnaCB0byBwdXJnZSAqLworICAgICAgICAgICAgICAgIHByaW50ZigiICVzLn4qfiAo S0VQVClcbiIsYmFzZWJ1Zik7CisjaWZkZWYgQ0tfVFRHV1NJWgorICAgICAgICAgICAgICAgIGlm ICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghYXNr bW9yZSgpKSBnb3RvIHhwdXJnZTsgZWxzZSBsaW5lcyA9IDA7CisgICAgICAgICAgICAgICAgfQor I2VuZGlmIC8qIENLX1RUR1dTSVogKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAo aiA9IDA7IGogPCB0b2tlZXA7IGorKykgLyogQ2xlYXIgdGhlIGJhY2t1cCBudW1iZXIgbGlzdCAq LworICAgICAgICAgICAgICB4eFtqXSA9IDA7CisgICAgICAgICAgICBnID0gaTsgICAgICAgICAg ICAgICAgICAgICAgLyogUmVzZXQgdGhlIGdyb3VwIHBvaW50ZXIgKi8KKyAgICAgICAgfQorICAg ICAgICBpZiAoZG9uZSkgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vIG1vcmUgZmlsZXMsIGRv bmUuICovCisgICAgICAgICAgYnJlYWs7CisgICAgICAgIHN0cm5jcHkoYmFzZWJ1ZixuYW1lYnVm LHopOyAgICAgLyogU2V0IGJhc2VuYW1lIG9mIHRoaXMgZmlsZSAqLworICAgICAgICBiYXNlYnVm W3pdID0gTlVMOworICAgIH0KKyAgeHB1cmdlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBDb21tb24gZXhpdCBwb2ludCAqLworICAgIGlmIChnX21hdGNoZG90ID4gLTEpIHsKKyAg ICAgICAgbWF0Y2hkb3QgPSBnX21hdGNoZG90OyAgICAgICAgICAvKiBSZXN0b3JlIHRoZXNlLi4u ICovCisgICAgICAgIGdfbWF0Y2hkb3QgPSAtMTsKKyAgICB9CisgICAgaWYgKHJjIDwgMCkgcmV0 dXJuKHJjKTsgICAgICAgICAgICAgLyogUGFyc2UgZXJyb3IgKi8KKyAgICBpZiAoeF9oZGcpCisg ICAgICBwcmludGYoIkZpbGVzIHB1cmdlZDogJWQlc1xuIiwKKyAgICAgICAgICAgICBjb3VudCwK KyAgICAgICAgICAgICBkZWxldGluZyA/ICIiIDogIiAobm90IHJlYWxseSkiCisgICAgICAgICAg ICAgKTsKKyAgICByZXR1cm4oc3VjY2VzcyA9IGNvdW50ID4gMCA/IDEgOiAoZXJyb3JzID4gMCkg PyAwIDogMSk7Cit9CisjZW5kaWYgLyogQ0tQVVJHRSAqLworCisjaWZuZGVmIE5PWEZFUgorI2lm bmRlZiBOT0xPQ0FMCitpbnQKK2RveGRpcyh3aGljaCkgaW50IHdoaWNoOyB7CQkvKiAxID0gS2Vy bWl0LCAyID0gRlRQICovCisgICAgZXh0ZXJuIGludCBub2xvY2FsOworICAgIGludCB4LCB5ID0g MCwgejsKKyNpZmRlZiBORVdGVFAKKyAgICBleHRlcm4gaW50IGZ0cF9kaXM7CisjZW5kaWYgLyog TkVXRlRQICovCisKKyNpZmRlZiBDT01NRU5UCisgICAgY2hhciAqczsKKyNlbmRpZiAvKiBDT01N RU5UICovCisKKyAgICBpZiAoKHggPSBjbWtleShmZHRhYixuZmR0YWIsImZpbGUgdHJhbnNmZXIg ZGlzcGxheSBzdHlsZSIsIiIsCisgICAgICAgICAgICAgICAgICAgeHhzdHJpbmcpKSA8IDApCisg ICAgICByZXR1cm4oeCk7CisjaWZkZWYgQ0tfUENUX0JBUgorICAgIGlmICgoeSA9IGNta2V5KGZk ZnRhYiwyLCIiLCJ0aGVybW9tZXRlciIseHhzdHJpbmcpKSA8IDApCisgICAgICByZXR1cm4oeSk7 CisjZW5kaWYgLyogQ0tfUENUX0JBUiAqLworICAgIGlmICgoeiA9IGNtY2ZtKCkpIDwgMCkgcmV0 dXJuKHopOworI2lmZGVmIENLX0NVUlNFUworICAgIGlmICh4ID09IFhZRkRfQykgeyAgICAgICAg ICAgICAgICAgIC8qIEZVTExTQ1JFRU4gKi8KKyNpZmRlZiBDT01NRU5UCisjaWZuZGVmIE1ZQ1VS U0VTCisgICAgICAgIGV4dGVybiBjaGFyICogdHJtYnVmOyAgICAgICAgICAgLyogUmVhbCBjdXJz ZXMgKi8KKyAgICAgICAgaW50IHo7CisjZW5kaWYgLyogTVlDVVJTRVMgKi8KKyNlbmRpZiAvKiBD T01NRU5UICovCisKKyAgICAgICAgaWYgKG5vbG9jYWwpICAgICAgICAgICAgICAgICAgICAvKiBO b3RoaW5nIHRvIGRvIGluIHRoaXMgY2FzZSAqLworCSAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKwor I2lmZGVmIENPTU1FTlQKKyNpZm5kZWYgTVlDVVJTRVMKKyNpZm5kZWYgVk1TCisgICAgICAgIHMg PSBnZXRlbnYoIlRFUk0iKTsKKyAgICAgICAgZGVidWcoRjExMCwiZG94ZGlzIFRFUk0iLHMsMCk7 CisgICAgICAgIGlmICghcykgcyA9ICIiOworICAgICAgICBmeGRpbml0KHgpOworICAgICAgICBp ZiAoKnMgJiYgdHJtYnVmKSB7ICAgICAgICAgICAgIC8qIERvbid0IGNhbGwgdGdldGVudCAqLwor ICAgICAgICAgICAgeiA9IHRnZXRlbnQodHJtYnVmLHMpOyAgICAgIC8qIGlmIHRybWJ1ZiBub3Qg YWxsb2NhdGVkICovCisgICAgICAgICAgICBkZWJ1ZyhGMTExLCJkb3hkaXMgdGdldGVudCIscyx6 KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHogPSAwOworICAgICAgICAgICAgZGVi dWcoRjExMCwiZG94ZGlzIHRnZXRlbnQgc2tpcHBlZCIscywwKTsKKyAgICAgICAgfQorICAgICAg ICBpZiAoeiA8IDEpIHsKKyAgICAgICAgICAgIHByaW50ZigiU29ycnksIHRlcm1pbmFsIHR5cGUg dW5rbm93bjogXCIlc1wiXG4iLHMpOworICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsK KyAgICAgICAgfQorI2VuZGlmIC8qIFZNUyAqLworI2VuZGlmIC8qIE1ZQ1VSU0VTICovCisjZWxz ZQorICAgICAgICBmeGRpbml0KHgpOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKworI2lmZGVmIENL X1BDVF9CQVIKKyAgICAgICAgdGhlcm1vbWV0ZXIgPSB5OworI2VuZGlmIC8qIENLX1BDVF9CQVIg Ki8KKworICAgICAgICBsaW5lWzBdID0gJ1wwJzsgICAgICAgICAgICAgICAgIC8qIChXaGF0J3Mg dGhpcyBmb3I/KSAqLworICAgIH0KKyNlbmRpZiAvKiBDS19DVVJTRVMgKi8KKyAgICBpZiAod2hp Y2ggPT0gMSkJCQkvKiBJdCdzIE9LLiAqLworICAgICAgZmRpc3BsYSA9IHg7CisjaWZkZWYgTkVX RlRQCisgICAgZWxzZSBpZiAod2hpY2ggPT0gMikKKyAgICAgIGZ0cF9kaXMgPSB4OworI2VuZGlm IC8qIE5FV0ZUUCAqLworICAgIHJldHVybihzdWNjZXNzID0gMSk7Cit9CisjZW5kaWYgLyogTk9M T0NBTCAqLworI2VuZGlmIC8qIE5PWEZFUiAqLworCitpbnQKK3NldGZpbChybXNmbGcpIGludCBy bXNmbGc7IHsKKyNpZmRlZiBDT01NRU5UCisgICAgZXh0ZXJuIGludCBlbl9kZWw7CisjZW5kaWYg LyogQ09NTUVOVCAqLworI2lmbmRlZiBOT1hGRVIKKyAgICBpZiAocm1zZmxnKSB7CisgICAgICAg IGlmICgoeSA9IGNta2V5KHJmaWx0YWIsbnJmaWxwLCJSZW1vdGUgZmlsZSBwYXJhbWV0ZXIiLCIi LAorICAgICAgICAgICAgICAgICAgICAgICB4eHN0cmluZykpIDwgMCkgeworICAgICAgICAgICAg aWYgKHkgPT0gLTMpIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIj9SZW1vdGUgZmlsZSBwYXJh bWV0ZXIgcmVxdWlyZWRcbiIpOworICAgICAgICAgICAgICAgIHJldHVybigtOSk7CisgICAgICAg ICAgICB9IGVsc2UgcmV0dXJuKHkpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyNlbmRpZiAv KiBOT1hGRVIgKi8KKyAgICAgICAgaWYgKCh5ID0gY21rZXkoZmlsdGFiLG5maWxwLCJGaWxlIHBh cmFtZXRlciIsIiIseHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgcmV0dXJuKHkpOworI2lmbmRl ZiBOT1hGRVIKKyAgICB9CisjZW5kaWYgLyogTk9YRkVSICovCisgICAgc3dpdGNoICh5KSB7Cisj aWZkZWYgQ09NTUVOVCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTm90IG5lZWRlZCAqLwor ICAgICAgY2FzZSBYWUZJTEI6ICAgICAgICAgICAgICAgICAgICAgIC8qIEJsb2Nrc2l6ZSAqLwor ICAgICAgICBpZiAoKHkgPSBjbW51bSgiZmlsZSBibG9jayBzaXplIixja2l0b2EoREJMS1NJWiks MTAsJnoseHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICBpZiAo KHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKKyAgICAgICAgaWYgKHJtc2ZsZykgeworICAg ICAgICAgICAgc3N0YXRlID0gc2V0Z2VuKCdTJywgIjMxMSIsIGNraXRvYSh6KSwgIiIpOworICAg ICAgICAgICAgcmV0dXJuKChpbnQpIHNzdGF0ZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg ICAgICBmYmxrc2l6ID0gejsKKyAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisgICAg ICAgIH0KKyNlbmRpZiAvKiBDT01NRU5UICovCisKKyNpZm5kZWYgTk9YRkVSCisgICAgICBjYXNl IFhZRklMUzogICAgICAgICAgICAgICAgICAgICAgLyogQnl0ZSBzaXplICovCisgICAgICAgIGlm ICgoeSA9IGNtbnVtKCJmaWxlIGJ5dGUgc2l6ZSAoNyBvciA4KSIsIjgiLDEwLCZ6LHh4c3RyaW5n KSkgPCAwKQorICAgICAgICAgIHJldHVybih5KTsKKyAgICAgICAgaWYgKHogIT0gNyAmJiB6ICE9 IDgpIHsKKyAgICAgICAgICAgIHByaW50ZigiXG4/VGhlIGNob2ljZXMgYXJlIDcgYW5kIDhcbiIp OworICAgICAgICAgICAgcmV0dXJuKDApOworICAgICAgICB9CisgICAgICAgIGlmICgoeSA9IGNt Y2ZtKCkpIDwgMCkgcmV0dXJuKHkpOworICAgICAgICBpZiAoeiA9PSA3KSBmbWFzayA9IDAxNzc7 CisgICAgICAgIGVsc2UgaWYgKHogPT0gOCkgZm1hc2sgPSAwMzc3OworICAgICAgICByZXR1cm4o c3VjY2VzcyA9IDEpOworCisjaWZuZGVmIE5PQ1NFVFMKKyAgICAgIGNhc2UgWFlGSUxDOiB7ICAg ICAgICAgICAgICAgICAgICAvKiBDaGFyYWN0ZXIgc2V0ICovCisgICAgICAgICAgY2hhciAqIGNz ZXRuYW1lID0gTlVMTDsKKyAgICAgICAgICBleHRlcm4gaW50CisgICAgICAgICAgICByX2NzZXQs IHNfY3NldCwgYWZjc2V0W107ICAgLyogU0VORCBDSEFSQUNURVItU0VUIEFVVE8gb3IgTUFOVUFM ICovCisKKyAgICAgICAgICBzdHJ1Y3QgRkRCIGt3LCBmbDsKKyAgICAgICAgICBjbWZkYmkoJmt3 LCAgICAgICAgICAgICAgICAgICAvKiBGaXJzdCBGREIgLSBjb21tYW5kIHN3aXRjaGVzICovCisg ICAgICAgICAgICAgICAgIF9DTUtFWSwgICAgICAgICAgICAgICAgLyogZmNvZGUgKi8KKyAgICAg ICAgICAgICAgICAgcm1zZmxnID8gInNlcnZlciBjaGFyYWN0ZXItc2V0IG5hbWUiIDogIiIsICAv KiBoZWxwICovCisgICAgICAgICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgLyogZGVm YXVsdCAqLworICAgICAgICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRs IHN0cmluZyBkYXRhICovCisgICAgICAgICAgICAgICAgIG5maWxjLCAgICAgICAgICAgICAgICAg LyogYWRkdGwgbnVtZXJpYyBkYXRhIDE6IHRibCBzaXplICovCisgICAgICAgICAgICAgICAgIDAs ICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDI6IDAgPSBrZXl3b3Jk ICovCisgICAgICAgICAgICAgICAgIHh4c3RyaW5nLCAgICAgICAgICAgICAgLyogUHJvY2Vzc2lu ZyBmdW5jdGlvbiAqLworICAgICAgICAgICAgICAgICBmY3N0YWIsICAgICAgICAgICAgICAgIC8q IEtleXdvcmQgdGFibGUgKi8KKyAgICAgICAgICAgICAgICAgcm1zZmxnID8gJmZsIDogTlVMTCAg ICAvKiBQb2ludGVyIHRvIG5leHQgRkRCICovCisgICAgICAgICAgICk7CisgICAgICAgICAgY21m ZGJpKCZmbCwgICAgICAgICAgICAgICAgICAgLyogQW55dGhpbmcgdGhhdCBkb2Vzbid0IG1hdGNo ICovCisgICAgICAgICAgICAgICAgIF9DTUZMRCwgICAgICAgICAgICAgICAgLyogZmNvZGUgKi8K KyAgICAgICAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAvKiBobHBtc2cgKi8KKyAg ICAgICAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAvKiBkZWZhdWx0ICovCisgICAg ICAgICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgc3RyaW5nIGRhdGEg Ki8KKyAgICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1l cmljIGRhdGEgMSAqLworICAgICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgIC8q IGFkZHRsIG51bWVyaWMgZGF0YSAyICovCisgICAgICAgICAgICAgICAgIHh4c3RyaW5nLAorICAg ICAgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgICAgICBOVUxMCisgICAgICAgICAgICAg ICAgICk7CisgICAgICAgICAgaWYgKCh4ID0gY21mZGIoJmt3KSkgPCAwKQorICAgICAgICAgICAg cmV0dXJuKHgpOworICAgICAgICAgIGlmIChjbXJlc3VsdC5mY29kZSA9PSBfQ01LRVkpIHsKKyAg ICAgICAgICAgICAgeCA9IGNtcmVzdWx0Lm5yZXN1bHQ7CisgICAgICAgICAgICAgIGNzZXRuYW1l ID0gZmNzaW5mb1t4XS5rZXl3b3JkOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg IGNrc3RybmNweShsaW5lLGNtcmVzdWx0LnNyZXN1bHQsTElOQlVGU0laKTsKKyAgICAgICAgICAg ICAgY3NldG5hbWUgPSBsaW5lOworICAgICAgICAgIH0KKyAgICAgICAgICBpZiAoKHogPSBjbWNm bSgpKSA8IDApIHJldHVybih6KTsKKyAgICAgICAgICBpZiAocm1zZmxnKSB7CisgICAgICAgICAg ICAgIHNzdGF0ZSA9IHNldGdlbignUycsICIzMjAiLCBjc2V0bmFtZSwgIiIpOworICAgICAgICAg ICAgICByZXR1cm4oKGludCkgc3N0YXRlKTsKKyAgICAgICAgICB9CisgICAgICAgICAgZmNoYXJz ZXQgPSB4OworICAgICAgICAgIGlmIChzX2NzZXQgPT0gWE1PREVfQSkgICAgICAgIC8qIElmIFNF TkQgQ0hBUkFDVEVSLVNFVCBpcyBBVVRPICovCisgICAgICAgICAgICBpZiAoeCA+IC0xICYmIHgg PD0gTUFYRkNTRVRTKQorICAgICAgICAgICAgICBpZiAoYWZjc2V0W3hdID4gLTEgJiYgYWZjc2V0 W3hdIDw9IE1BWFRDU0VUUykKKyAgICAgICAgICAgICAgICB0Y2hhcnNldCA9IGFmY3NldFt4XTsg LyogUGljayBjb3JyZXNwb25kaW5nIHhmZXIgY2hhcnNldCAqLworICAgICAgICAgIHNldHhsYXR5 cGUodGNoYXJzZXQsZmNoYXJzZXQpOyAvKiBUcmFuc2xhdGlvbiB0eXBlICovCisgICAgICAgICAg LyogSWYgSSBzYXkgU0VUIEZJTEUgQ0hBUkFDVEVSLVNFVCBibGFoLCBJIHdhbnQgdG8gYmUgYmxh aCEgKi8KKyAgICAgICAgICByX2NzZXQgPSBYTU9ERV9NOyAgICAgICAgICAgICAvKiBEb24ndCBz d2l0Y2ggaW5jb21pbmcgc2V0ISAqLworICAgICAgICAgIHggPSBmY3NpbmZvW2ZjaGFyc2V0XS5z aXplOyAgIC8qIEFsc28gc2V0IGRlZmF1bHQgeC1iaXQgY2hhcnNldCAqLworICAgICAgICAgIGlm ICh4ID09IDEyOCkgICAgICAgICAgICAgICAgIC8qIDctYml0Li4uICovCisgICAgICAgICAgICBk Y3NldDcgPSBmY2hhcnNldDsKKyAgICAgICAgICBlbHNlIGlmICh4ID09IDI1NikgICAgICAgICAg ICAvKiA4LWJpdC4uLiAqLworICAgICAgICAgICAgZGNzZXQ4ID0gZmNoYXJzZXQ7CisgICAgICAg ICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKyAgICAgIH0KKyNlbmRpZiAvKiBOT0NTRVRTICovCisK KyNpZm5kZWYgTk9MT0NBTAorICAgICAgY2FzZSBYWUZJTEQ6ICAgICAgICAgICAgICAgICAgICAg IC8qIERpc3BsYXkgKi8KKyAgICAgICAgcmV0dXJuKGRveGRpcygxKSk7CQkvKiAxID09IGtlcm1p dCAqLworI2VuZGlmIC8qIE5PTE9DQUwgKi8KKyNlbmRpZiAvKiBOT1hGRVIgKi8KKworICAgICAg Y2FzZSBYWUZJTEE6ICAgICAgICAgICAgICAgICAgICAgIC8qIEVuZC1vZi1saW5lICovCisjaWZk ZWYgTkxDSEFSCisgICAgICAgIHMgPSAiIjsKKyAgICAgICAgaWYgKE5MQ0hBUiA9PSAwMTUpCisg ICAgICAgICAgcyA9ICJjciI7CisgICAgICAgIGVsc2UgaWYgKE5MQ0hBUiA9PSAwMTIpCisgICAg ICAgICAgcyA9ICJsZiI7CisgICAgICAgIGlmICgoeCA9IGNta2V5KGVvbHRhYiwgbmVvbHRhYiwK KyAgICAgICAgICAgICAgICAgICAgICAgImxvY2FsIHRleHQtZmlsZSBsaW5lIHRlcm1pbmF0b3Ii LHMseHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgcmV0dXJuKHgpOworI2Vsc2UKKyAgICAgICAg aWYgKCh4ID0gY21rZXkoZW9sdGFiLCBuZW9sdGFiLAorICAgICAgICAgICAgICAgICAgICAgICAi bG9jYWwgdGV4dC1maWxlIGxpbmUgdGVybWluYXRvciIsImNybGYiLHh4c3RyaW5nKSkgPCAwKQor ICAgICAgICAgIHJldHVybih4KTsKKyNlbmRpZiAvKiBOTENIQVIgKi8KKyAgICAgICAgaWYgKCh6 ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeik7CisgICAgICAgIGZlb2wgPSAoQ0hBUikgeDsKKyAg ICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKworI2lmbmRlZiBOT1hGRVIKKyAgICAgIGNhc2Ug WFlGSUxOOiAgICAgICAgICAgICAgICAgICAgICAvKiBOYW1lcyAqLworICAgICAgICBpZiAoKHgg PSBjbWtleShmbnRhYixuZm50YWIsImhvdyB0byBoYW5kbGUgZmlsZW5hbWVzIiwiY29udmVydGVk IiwKKyAgICAgICAgICAgICAgICAgICAgICAgeHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgcmV0 dXJuKHgpOworICAgICAgICBpZiAoKHogPSBjbWNmbSgpKSA8IDApIHJldHVybih6KTsKKyAgICAg ICAgaWYgKHJtc2ZsZykgeworICAgICAgICAgICAgc3N0YXRlID0gc2V0Z2VuKCdTJywgIjMwMSIs IGNraXRvYSgxIC0geCksICIiKTsKKyAgICAgICAgICAgIHJldHVybigoaW50KSBzc3RhdGUpOwor ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcHRhYltwcm90b2NvbF0uZm5jbiA9IHg7ICAg IC8qIFNldCBzdHJ1Y3R1cmUgKi8KKyAgICAgICAgICAgIGZuY252ID0geDsgICAgICAgICAgICAg ICAgICAvKiBTZXQgdmFyaWFibGUgKi8KKyAgICAgICAgICAgIGZfc2F2ZSA9IHg7ICAgICAgICAg ICAgICAgICAvKiBBbmQgc2V0ICJwZXJtYW5lbnQiIHZhcmlhYmxlICovCisgICAgICAgICAgICBy ZXR1cm4oc3VjY2VzcyA9IDEpOworICAgICAgICB9CisKKyAgICAgIGNhc2UgWFlGSUxSOiAgICAg ICAgICAgICAgICAgICAgICAvKiBSZWNvcmQgbGVuZ3RoICovCisgICAgICAgIGlmICgoeSA9IGNt bnVtKCJmaWxlIHJlY29yZCBsZW5ndGgiLAorICAgICAgICAgICAgICAgICAgICAgICBja2l0b2Eo RExSRUNMKSwxMCwmeix4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICByZXR1cm4oeSk7CisgICAg ICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOworICAgICAgICBpZiAocm1zZmxn KSB7CisgICAgICAgICAgICBzc3RhdGUgPSBzZXRnZW4oJ1MnLCAiMzEyIiwgY2tpdG9hKHopLCAi Iik7CisgICAgICAgICAgICByZXR1cm4oKGludCkgc3N0YXRlKTsKKyAgICAgICAgfSBlbHNlIHsK KyAgICAgICAgICAgIGZyZWNsID0gejsKKyAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7 CisgICAgICAgIH0KKworI2lmZGVmIENPTU1FTlQKKyAgICAgIGNhc2UgWFlGSUxPOiAgICAgICAg ICAgICAgICAgICAgICAvKiBPcmdhbml6YXRpb24gKi8KKyAgICAgICAgaWYgKCh4ID0gY21rZXko Zm9yZ3RhYixuZm9yZywiZmlsZSBvcmdhbml6YXRpb24iLCJzZXF1ZW50aWFsIiwKKyAgICAgICAg ICAgICAgICAgICAgICAgeHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgcmV0dXJuKHgpOworICAg ICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsKKyAgICAgICAgaWYgKHJtc2Zs ZykgeworICAgICAgICAgICAgc3N0YXRlID0gc2V0Z2VuKCdTJywgIjMxNCIsIGNraXRvYSh4KSwg IiIpOworICAgICAgICAgICAgcmV0dXJuKChpbnQpIHNzdGF0ZSk7CisgICAgICAgIH0gZWxzZSB7 CisgICAgICAgICAgICBmb3JnID0geDsKKyAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7 CisgICAgICAgIH0KKyNlbmRpZiAvKiBDT01NRU5UICovCisKKyNpZmRlZiBDT01NRU5UICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBOb3QgbmVlZGVkICovCisgICAgICBjYXNlIFhZRklMRjog ICAgICAgICAgICAgICAgICAgICAgLyogRm9ybWF0ICovCisgICAgICAgIGlmICgoeCA9IGNta2V5 KGZyZWN0YWIsbmZyZWMsImZpbGUgcmVjb3JkIGZvcm1hdCIsInN0cmVhbSIsCisgICAgICAgICAg ICAgICAgICAgICAgIHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgIHJldHVybih4KTsKKyAgICAg ICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeSk7CisgICAgICAgIGlmIChybXNmbGcp IHsKKyAgICAgICAgICAgIHNzdGF0ZSA9IHNldGdlbignUycsICIzMTMiLCBja2l0b2EoeCksICIi KTsKKyAgICAgICAgICAgIHJldHVybigoaW50KSBzc3RhdGUpOworICAgICAgICB9IGVsc2Ugewor ICAgICAgICAgICAgZnJlY2ZtID0geDsKKyAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7 CisgICAgICAgIH0KKyNlbmRpZiAvKiBDT01NRU5UICovCisKKyNpZmRlZiBDT01NRU5UCisgICAg ICBjYXNlIFhZRklMUDogICAgICAgICAgICAgICAgICAgICAgLyogUHJpbnRlciBjYXJyaWFnZSBj b250cm9sICovCisgICAgICAgIGlmICgoeCA9IGNta2V5KGZjY3RhYixuZmNjLCJmaWxlIGNhcnJp YWdlIGNvbnRyb2wiLCJuZXdsaW5lIiwKKyAgICAgICAgICAgICAgICAgICAgICAgeHhzdHJpbmcp KSA8IDApCisgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8 IDApIHJldHVybih5KTsKKyAgICAgICAgaWYgKHJtc2ZsZykgeworICAgICAgICAgICAgc3N0YXRl ID0gc2V0Z2VuKCdTJywgIjMxNSIsIGNraXRvYSh4KSwgIiIpOworICAgICAgICAgICAgcmV0dXJu KChpbnQpIHNzdGF0ZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmY2N0cmwgPSB4 OworICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKyAgICAgICAgfQorI2VuZGlmIC8q IENPTU1FTlQgKi8KKyNlbmRpZiAvKiBOT1hGRVIgKi8KKworICAgICAgY2FzZSBYWUZJTFQ6ICAg ICAgICAgICAgICAgICAgICAgIC8qIFR5cGUgKi8KKyAgICAgICAgaWYgKCh4ID0gY21rZXkocm1z ZmxnID8gcmZ0dGFiICA6IGZ0dGFiLAorICAgICAgICAgICAgICAgICAgICAgICBybXNmbGcgPyBu cmZ0dHlwIDogbmZ0dHlwLAorICAgICAgICAgICAgICAgICAgICAgICAidHlwZSBvZiBmaWxlIHRy YW5zZmVyIiwidGV4dCIseHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgcmV0dXJuKHgpOworCisj aWZkZWYgVk1TCisgICAgICAgIC8qIEFsbG93IFZNUyB1c2VycyB0byBjaG9vc2UgcmVjb3JkIGZv cm1hdCBmb3IgYmluYXJ5IGZpbGVzICovCisgICAgICAgIGlmICgoeCA9PSBYWUZUX0IpICYmIChy bXNmbGcgPT0gMCkpIHsKKyAgICAgICAgICAgIGlmICgoeCA9IGNta2V5KGZidGFiLG5mYnR5cCwi Vk1TIHJlY29yZCBmb3JtYXQiLCJmaXhlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB4 eHN0cmluZykpIDwgMCkKKyAgICAgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICB9CisjZW5k aWYgLyogVk1TICovCisgICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkpOwor ICAgICAgICBiaW5hcnkgPSB4OworICAgICAgICBiX3NhdmUgPSB4OworI2lmZGVmIE1BQworICAg ICAgICAodm9pZCkgbWFjX3NldGZpbGRmbGcoYmluYXJ5KTsKKyNlbmRpZiAvKiBNQUMgKi8KKyNp Zm5kZWYgTk9YRkVSCisgICAgICAgIGlmIChybXNmbGcpIHsKKyAgICAgICAgICAgIC8qIEFsbG93 IGZvciBMQUJFTEVEIGluIFZNUyAmIE9TLzIgKi8KKyAgICAgICAgICAgIHNzdGF0ZSA9IHNldGdl bignUycsICIzMDAiLCBja2l0b2EoeCksICIiKTsKKyAgICAgICAgICAgIHJldHVybigoaW50KSBz c3RhdGUpOworICAgICAgICB9IGVsc2UgeworI2VuZGlmIC8qIE5PWEZFUiAqLworICAgICAgICAg ICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKyNpZm5kZWYgTk9YRkVSCisgICAgICAgIH0KKyNlbmRp ZiAvKiBOT1hGRVIgKi8KKworI2lmbmRlZiBOT1hGRVIKKyAgICAgIGNhc2UgWFlGSUxYOiAgICAg ICAgICAgICAgICAgICAgICAvKiBDb2xsaXNpb24gQWN0aW9uICovCisgICAgICAgIGlmICgoeCA9 IGNta2V5KGNvbHh0YWIsbmNvbHgsIkZpbGVuYW1lIGNvbGxpc2lvbiBhY3Rpb24iLCJiYWNrdXAi LAorICAgICAgICAgICAgICAgICAgICAgICB4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICByZXR1 cm4oeCk7CisgICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkpOworI2lmZGVm IENLX0xPR0lOCisgICAgICAgIGlmIChpc2d1ZXN0KSB7CisgICAgICAgICAgICAvKiBEb24ndCBs ZXQgZ3Vlc3RzIGNoYW5nZSBleGlzdGluZyBmaWxlcyAqLworICAgICAgICAgICAgcHJpbnRmKCI/ VGhpcyBjb21tYW5kIG5vdCB2YWxpZCBmb3IgZ3Vlc3RzXG4iKTsKKyAgICAgICAgICAgIHJldHVy bigtOSk7CisgICAgICAgIH0KKyNlbmRpZiAvKiBDS19MT0dJTiAqLworI2lmZGVmIENPTU1FTlQK KyAgICAgICAgLyogTm90IGFwcHJvcHJpYXRlIC0gRElTQUJMRSBERUxFVEUgb25seSByZWZlcnMg dG8gc2VydmVyICovCisgICAgICAgIGlmICgoeCA9PSBYWUZYX1ggfHwgeCA9PSBYWUZYX0IgfHwg eCA9PSBYWUZYX1UgfHwgeCA9PSBYWUZYX0EpICYmCisgICAgICAgICAgICAoIUVOQUJMRUQoZW5f ZGVsKSkpIHsKKyAgICAgICAgICAgIHByaW50ZigiP1NvcnJ5LCBmaWxlIGRlbGV0aW9uIGlzIGRp c2FibGVkLlxuIik7CisgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICB9CisjZW5kaWYg LyogQ09NTUVOVCAqLworICAgICAgICBmbmNhY3QgPSB4OworICAgICAgICBwdGFiW3Byb3RvY29s XS5mbmNhID0geDsKKyAgICAgICAgaWYgKHJtc2ZsZykgeworICAgICAgICAgICAgc3N0YXRlID0g c2V0Z2VuKCdTJywgIjMwMiIsIGNraXRvYShmbmNhY3QpLCAiIik7CisgICAgICAgICAgICByZXR1 cm4oKGludCkgc3N0YXRlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChmbmNh Y3QgPT0gWFlGWF9SKSBja3dhcm4gPSAxOyAvKiBGSUxFIFdBUk5JTkcgaW1wbGljYXRpb25zICov CisgICAgICAgICAgICBpZiAoZm5jYWN0ID09IFhZRlhfWCkgY2t3YXJuID0gMDsgLyogLi4uICov CisgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworICAgICAgICB9CisKKyAgICAgIGNh c2UgWFlGSUxXOiAgICAgICAgICAgICAgICAgICAgICAvKiBXYXJuaW5nL1dyaXRlLVByb3RlY3Qg Ki8KKyAgICAgICAgaWYgKCh4ID0gc2V0b24oJmNrd2FybikpIDwgMCkgcmV0dXJuKHgpOworICAg ICAgICBpZiAoY2t3YXJuKQorICAgICAgICAgIGZuY2FjdCA9IFhZRlhfUjsKKyAgICAgICAgZWxz ZQorICAgICAgICAgIGZuY2FjdCA9IFhZRlhfWDsKKyAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAx KTsKKworI2lmZGVmIENLX0xBQkVMRUQKKyAgICAgIGNhc2UgWFlGSUxMOiAgICAgICAgICAgICAg ICAgICAgICAvKiBMQUJFTEVEIEZJTEUgcGFyYW1ldGVycyAqLworICAgICAgICBpZiAoKHggPSBj bWtleShsYmx0YWIsbmxibHAsIkxhYmVsZWQgZmlsZSBmZWF0dXJlIiwiIiwKKyAgICAgICAgICAg ICAgICAgICAgICAgeHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgcmV0dXJuKHgpOworICAgICAg ICBpZiAoKHN1Y2Nlc3MgPSBzZXRvbigmeSkpIDwgMCkKKyAgICAgICAgICByZXR1cm4oc3VjY2Vz cyk7CisgICAgICAgIGlmICh5KSAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2V0IG9yIHJl c2V0IHRoZSBzZWxlY3RlZCBiaXQgKi8KKyAgICAgICAgICBsZl9vcHRzIHw9IHg7ICAgICAgICAg ICAgICAgICAvKiBpbiB0aGUgb3B0aW9ucyBiaXRtYXNrLiAqLworICAgICAgICBlbHNlCisgICAg ICAgICAgbGZfb3B0cyAmPSB+eDsKKyAgICAgICAgcmV0dXJuKHN1Y2Nlc3MpOworI2VuZGlmIC8q IENLX0xBQkVMRUQgKi8KKworICAgICAgY2FzZSBYWUZJTEk6IHsgICAgICAgICAgICAgICAgICAg IC8qIElOQ09NUExFVEUgKi8KKyAgICAgICAgICBleHRlcm4gc3RydWN0IGtleXRhYiBpZmRhdGFi W107CisgICAgICAgICAgZXh0ZXJuIGludCBrZWVwOworICAgICAgICAgIGlmICgoeSA9IGNta2V5 KGlmZGF0YWIsMywiIiwiYXV0byIseHhzdHJpbmcpKSA8IDApIHJldHVybih5KTsKKyAgICAgICAg ICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKKyAgICAgICAgICBpZiAocm1zZmxn KSB7CisgICAgICAgICAgICAgIHNzdGF0ZSA9IHNldGdlbignUycsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAiMzEwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPT0g MCA/ICIwIiA6ICh5ID09IDEgPyAiMSIgOiAiMiIpLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAg IHJldHVybigoaW50KSBzc3RhdGUpOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg IGtlZXAgPSB5OworICAgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworICAgICAgICAg IH0KKyAgICAgIH0KKworI2lmZGVmIENLX1RNUERJUgorICAgICAgY2FzZSBYWUZJTEc6IHsgICAg ICAgICAgICAgICAgICAgIC8qIERvd25sb2FkIGRpcmVjdG9yeSAqLworICAgICAgICAgIGludCB4 OworICAgICAgICAgIGNoYXIgKnM7CisjaWZkZWYgWkZOUUZQCisgICAgICAgICAgc3RydWN0IHpm bmZwICogZm5wOworI2VuZGlmIC8qIFpGTlFGUCAqLworI2lmZGVmIE1BQworICAgICAgICAgIGNo YXIgdGVtcFszNF07CisjZW5kaWYgLyogTUFDICovCisKKyNpZmRlZiBHRU1ET1MKKyAgICAgICAg ICBpZiAoKHggPSBjbWRpcigiTmFtZSBvZiBsb2NhbCBkaXJlY3RvcnksIG9yIGNhcnJpYWdlIHJl dHVybiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIiIsJnMsCisgICAgICAgICAgICAgICAg ICAgICAgICAgTlVMTCkpIDwgMCApIHsKKyAgICAgICAgICAgICAgaWYgKHggIT0gLTMpCisgICAg ICAgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICAgIH0KKyNlbHNlCisjaWZkZWYgT1MyCisg ICAgICAgICAgaWYgKCh4ID0gY21kaXIoIk5hbWUgb2YgUEMgZGlzayBhbmQvb3IgZGlyZWN0b3J5 LFxuXAorICAgICAgIG9yIHByZXNzIHRoZSBFbnRlciBrZXkgdG8gdXNlIGN1cnJlbnQgZGlyZWN0 b3J5IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiIiwmcyx4eHN0cmluZykpIDwgMCApIHsK KyAgICAgICAgICAgICAgaWYgKHggIT0gLTMpCisgICAgICAgICAgICAgICAgcmV0dXJuKHgpOwor ICAgICAgICAgIH0KKyNlbHNlCisjaWZkZWYgTUFDCisgICAgICAgICAgeCA9IGNrc3RybmNweSh0 ZW1wLHpob21lKCksMzIpOworICAgICAgICAgIGlmICh4ID4gMCkgaWYgKHRlbXBbeC0xXSAhPSAn OicpIHsgdGVtcFt4XSA9ICc6JzsgdGVtcFt4KzFdID0gTlVMOyB9CisgICAgICAgICAgaWYgKCh4 ID0gY210eHQoIk5hbWUgb2YgTWFjaW50b3NoIHZvbHVtZSBhbmQvb3IgZm9sZGVyLFxuXAorIG9y IHByZXNzIHRoZSBSZXR1cm4ga2V5IGZvciB0aGUgZGVza3RvcCBvbiB0aGUgYm9vdCBkaXNrIiwK KyAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wLCZzLCB4eHN0cmluZykpIDwgMCApCisgICAg ICAgICAgICByZXR1cm4oeCk7CisjZWxzZQorICAgICAgICAgIGlmICgoeCA9IGNtZGlyKCJOYW1l IG9mIGxvY2FsIGRpcmVjdG9yeSwgb3IgY2FycmlhZ2UgcmV0dXJuIiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAiIiwgJnMsIHh4c3RyaW5nKSkgPCAwICkgeworICAgICAgICAgICAgICBpZiAo eCAhPSAtMykKKyAgICAgICAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgICAgfQorI2VuZGlm IC8qIE1BQyAqLworI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIEdFTURPUyAqLworICAgICAg ICAgIGRlYnVnKEYxMTAsImRvd25sb2FkIGRpciIscywwKTsKKworI2lmbmRlZiBNQUMKKyAgICAg ICAgICBpZiAoeCA9PSAyKSB7CisgICAgICAgICAgICAgIHByaW50ZigiP1dpbGRjYXJkcyBub3Qg YWxsb3dlZCBpbiBkaXJlY3RvcnkgbmFtZVxuIik7CisgICAgICAgICAgICAgIHJldHVybigtOSk7 CisgICAgICAgICAgfQorI2VuZGlmIC8qIE1BQyAqLworCisjaWZkZWYgWkZOUUZQCisgICAgICAg ICAgaWYgKChmbnAgPSB6Zm5xZnAocyxUTVBCVUZTSVogLSAxLHRtcGJ1ZikpKSB7CisgICAgICAg ICAgICAgIGlmIChmbnAtPmZwYXRoKQorICAgICAgICAgICAgICAgIGlmICgoaW50KSBzdHJsZW4o Zm5wLT5mcGF0aCkgPiAwKQorICAgICAgICAgICAgICAgICAgcyA9IGZucC0+ZnBhdGg7CisgICAg ICAgICAgfQorICAgICAgICAgIGRlYnVnKEYxMTAsImRvd25sb2FkIHpmbnFmcCIscywwKTsKKyNl bmRpZiAvKiBaRk5RRlAgKi8KKworICAgICAgICAgIGNrc3RybmNweShsaW5lLHMsTElOQlVGU0la KTsgIC8qIE1ha2UgYSBzYWZlIGNvcHkgKi8KKyNpZm5kZWYgTUFDCisgICAgICAgICAgaWYgKCh4 ID0gY21jZm0oKSkgPCAwKSAgICAgICAgLyogR2V0IGNvbmZpcm1hdGlvbiAqLworICAgICAgICAg ICAgcmV0dXJuKHgpOworI2VuZGlmIC8qIE1BQyAqLworCisjaWZkZWYgQ0tfTE9HSU4KKyAgICAg ICAgaWYgKGlzZ3Vlc3QpIHsKKyAgICAgICAgICAgIC8qIERvbid0IGxldCBndWVzdHMgY2hhbmdl IGV4aXN0aW5nIGZpbGVzICovCisgICAgICAgICAgICBwcmludGYoIj9UaGlzIGNvbW1hbmQgbm90 IHZhbGlkIGZvciBndWVzdHNcbiIpOworICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAg fQorI2VuZGlmIC8qIENLX0xPR0lOICovCisgICAgICAgICAgeCA9IHN0cmxlbihzKTsKKworICAg ICAgICAgIGlmICh4KSB7CisjaWZkZWYgZGF0YWdlbmVyYWwJCQkvKiBBT1MvVlMgKi8KKyAgICAg ICAgICAgICAgaWYgKHNbeC0xXSA9PSAnOicpICAgICAgICAvKiBob21kaXIgZW5kcyBpbiBjb2xv biwgKi8KKyAgICAgICAgICAgICAgICBzW3gtMV0gPSBOVUw7ICAgICAgICAgICAvKiBhbmQgImRp ciIgZG9lc24ndCBsaWtlIHRoYXQuLi4gKi8KKyNlbHNlCisjaWZkZWYgT1MyT1JVTklYCQkJLyog VW5peCBvciBLLTk1Li4uICovCisJICAgICAgaWYgKCh4IDwgKExJTkJVRlNJWiAtIDIpKSAmJiAv KiBBZGQgdHJhaWxpbmcgZGlyc2VwICovCisJCSAgKHNbeC0xXSAhPSAnLycpKSB7CS8qIGlmIG5v bmUgcHJlc2VudC4gICovCisJCSAgc1t4XSA9ICcvJzsJCS8qIE5vdGUgdGhhdCBXaW5kb3dzIHBh dGggaGFzICovCisJCSAgc1t4KzFdID0gTlVMOwkJLyogYmVlbiBjYW5vbmljYWxpemVkIHRvIGZv cndhcmQgKi8KKwkgICAgICB9ICAgICAgICAgICAgICAgIAkJLyogc2xhc2hlcyBhdCB0aGlzIHBv aW50LiAqLworI2VuZGlmIC8qIE9TMk9SVU5JWCAqLworI2VuZGlmIC8qIGRhdGFnZW5lcmFsICov CisgICAgICAgICAgICAgIG1ha2VzdHIoJmRsZGlyLHMpOworICAgICAgICAgIH0gZWxzZQorICAg ICAgICAgICAgbWFrZXN0cigmZGxkaXIsTlVMTCk7ICAgICAgIC8qIGRsZGlyIGlzIE5VTEwgd2hl biBub3QgYXNzaWduZWQgKi8KKworICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisgICAg ICB9CisjZW5kaWYgLyogQ0tfVE1QRElSICovCisgICAgICBjYXNlIFhZRklMWToKKyAgICAgICAg cmV0dXJuKHNldGRlc3QoKSk7CisjZW5kaWYgLyogTk9YRkVSICovCisKKyNpZmRlZiBDS19DVFJM WgorICAgICAgY2FzZSBYWUZJTFY6IHsgICAgICAgICAgICAgICAgICAgIC8qIEVPRiAqLworICAg ICAgICAgIGV4dGVybiBpbnQgZW9mbWV0aG9kOworICAgICAgICAgIGlmICgoeCA9IGNta2V5KGVv ZnRhYiwzLCJlbmQtb2YtZmlsZSBkZXRlY3Rpb24gbWV0aG9kIiwiIiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICB4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICAgIHJldHVybih4KTsKKyAgICAg ICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApCisgICAgICAgICAgICByZXR1cm4oeSk7CisgICAg ICAgICAgZW9mbWV0aG9kID0geDsKKyAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworICAg ICAgfQorI2VuZGlmIC8qIENLX0NUUkxaICovCisKKyNpZm5kZWYgTk9YRkVSCisjaWZkZWYgVU5J WAorICAgICAgY2FzZSBYWUZJTEg6IHsgICAgICAgICAgICAgICAgICAgIC8qIE9VVFBVVCAqLwor ICAgICAgICAgIGV4dGVybiBpbnQgem9mYnVmZmVyLCB6b2J1ZnNpemUsIHpvZmJsb2NrOworI2lm ZGVmIERZTkFNSUMKKyAgICAgICAgICBleHRlcm4gY2hhciAqIHpvdXRidWZmZXI7CisjZW5kaWYg LyogRFlOQU1JQyAqLworCisgICAgICAgICAgaWYgKCh4ID0gY21rZXkoem9mdGFiLG56b2Z0YWIs Im91dHB1dCBmaWxlIHdyaXRpbmcgbWV0aG9kIiwiIiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICB4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgICBpZiAo eCA9PSBaT0ZfQlVGIHx8IHggPT0gWk9GX05CVUYpIHsKKyAgICAgICAgICAgICAgaWYgKCh5ID0g Y21udW0oIm91dHB1dCBidWZmZXIgc2l6ZSIsIjMyNzY4IiwxMCwmeix4eHN0cmluZykpIDwgMCkK KyAgICAgICAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgICAgICAgIGlmICh6IDwgMSkgewor ICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/QmFkIHNpemUgLSAlZFxuIiwgeik7CisgICAgICAg ICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAg ICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkpOworICAgICAgICAgIHN3aXRj aCAoeCkgeworICAgICAgICAgICAgY2FzZSBaT0ZfQlVGOgorICAgICAgICAgICAgY2FzZSBaT0Zf TkJVRjoKKyAgICAgICAgICAgICAgem9mYnVmZmVyID0gKHggPT0gWk9GX0JVRik7CisgICAgICAg ICAgICAgIHpvYnVmc2l6ZSA9IHo7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg Y2FzZSBaT0ZfQkxLOgorICAgICAgICAgICAgY2FzZSBaT0ZfTkJMSzoKKyAgICAgICAgICAgICAg em9mYmxvY2sgPSAoeCA9PSBaT0ZfQkxLKTsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg ICAgfQorI2lmZGVmIERZTkFNSUMKKyAgICAgICAgICBpZiAoem91dGJ1ZmZlcikgZnJlZSh6b3V0 YnVmZmVyKTsKKyAgICAgICAgICBpZiAoISh6b3V0YnVmZmVyID0gKGNoYXIgKiltYWxsb2Moeikp KSB7CisgICAgICAgICAgICAgIHByaW50ZigiTUVNT1JZIEFMTE9DQVRJT04gRVJST1IgLSBGQVRB TFxuIik7CisgICAgICAgICAgICAgIGRvZXhpdChCQURfRVhJVCwtMSk7CisgICAgICAgICAgfSBl bHNlCisgICAgICAgICAgICB6b2J1ZnNpemUgPSB6OworI2Vsc2UKKyAgICAgICAgICBpZiAoeiA8 PSBPQlVGU0laRSkgeworICAgICAgICAgICAgICB6b2J1ZnNpemUgPSB6OworICAgICAgICAgIH0g ZWxzZSB7CisgICAgICAgICAgICAgIHByaW50ZigiP1NvcnJ5LCAlZCBpcyB0b28gYmlnIC0gJWQg aXMgdGhlIG1heGltdW1cbiIseixPQlVGU0laRSk7CisgICAgICAgICAgICAgIHJldHVybigtOSk7 CisgICAgICAgICAgfQorI2VuZGlmIC8qIERZTkFNSUMgKi8KKyAgICAgICAgICByZXR1cm4oc3Vj Y2VzcyA9IDEpOworICAgICAgfQorI2VuZGlmIC8qIFVOSVggKi8KKworI2lmZGVmIFBBVFRFUk5T CisgICAgICBjYXNlIFhZRklCUDogICAgICAgICAgICAgICAgICAgICAgLyogQklOQVJZLVBBVFRF Uk4gKi8KKyAgICAgIGNhc2UgWFlGSVRQOiB7ICAgICAgICAgICAgICAgICAgICAvKiBURVhULVBB VFRFUk4gKi8KKyAgICAgICAgICBjaGFyICogdG1wW0ZUUEFUVEVSTlNdOworICAgICAgICAgIGlu dCBpLCBuID0gMDsKKyAgICAgICAgICB3aGlsZSAobiA8IEZUUEFUVEVSTlMpIHsKKyAgICAgICAg ICAgICAgdG1wW25dID0gTlVMTDsKKyAgICAgICAgICAgICAgaWYgKCh4ID0gY21mbGQoIlBhdHRl cm4iLCIiLCZzLHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg ICAgICAgICBja3N0cm5jcHkobGluZSxzLExJTkJVRlNJWik7CisgICAgICAgICAgICAgIHMgPSBi cnN0cmlwKGxpbmUpOworICAgICAgICAgICAgICBtYWtlc3RyKCYodG1wW24rK10pLHMpOworICAg ICAgICAgIH0KKyAgICAgICAgICBpZiAoeCA9PSAtMykgeCA9IGNtY2ZtKCk7CisgICAgICAgICAg Zm9yIChpID0gMDsgaSA8PSBuOyBpKyspIHsKKyAgICAgICAgICAgICAgaWYgKHggPiAtMSkgewor ICAgICAgICAgICAgICAgICAgaWYgKHkgPT0gWFlGSUJQKQorICAgICAgICAgICAgICAgICAgICBt YWtlc3RyKCYoYmlucGF0dGVybnNbaV0pLHRtcFtpXSk7CisgICAgICAgICAgICAgICAgICBlbHNl CisgICAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJih0eHRwYXR0ZXJuc1tpXSksdG1wW2ldKTsK KyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBmcmVlKHRtcFtpXSk7CisgICAgICAgICAg fQorICAgICAgICAgIGlmICh5ID09IFhZRklCUCkgICAgICAgICAgICAgIC8qIE51bGwtdGVybWlu YXRlIHRoZSBsaXN0ICovCisgICAgICAgICAgICBtYWtlc3RyKCYoYmlucGF0dGVybnNbaV0pLE5V TEwpOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1ha2VzdHIoJih0eHRwYXR0ZXJuc1tp XSksTlVMTCk7CisgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgfQorCisgICAgICBjYXNlIFhZ RklQQTogICAgICAgICAgICAgICAgICAgICAgLyogUEFUVEVSTlMgKi8KKyAgICAgICAgaWYgKCh4 ID0gc2V0b25hdXQoJnBhdHRlcm5zKSkgPCAwKQorICAgICAgICAgIHJldHVybih4KTsKKyAgICAg ICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKyNlbmRpZiAvKiBQQVRURVJOUyAqLworI2VuZGlmIC8q IE5PWEZFUiAqLworCisjaWZkZWYgVU5JQ09ERQorICAgICAgY2FzZSBYWUZJTFU6IHsgICAgICAg ICAgICAgICAgICAgIC8qIFVDUyAqLworICAgICAgICAgIGV4dGVybiBpbnQgdWNzb3JkZXIsIHVj c2JvbSwgYnl0ZW9yZGVyOworICAgICAgICAgIGlmICgoeCA9IGNta2V5KHVjc3RhYixudWNzdGFi LCIiLCIiLHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICAg IHN3aXRjaCAoeCkgeworICAgICAgICAgICAgY2FzZSBVQ1NfQllUOgorICAgICAgICAgICAgICBp ZiAoKHkgPSBjbWtleShib3RhYixuYm90YWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICJCeXRlIG9yZGVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZW9yZGVyID8g ImxpdHRsZS1lbmRpYW4iIDogImJpZy1lbmRpYW4iLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB4eHN0cmluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAg ICAgICAgICAgKSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICAgICAg ICBpZiAoKHggPSBjbWNmbSgpKSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuKHgpOworICAg ICAgICAgICAgICB1Y3NvcmRlciA9IHk7CisgICAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0g MSk7CisgICAgICAgICAgICBjYXNlIFVDU19CT006CisgICAgICAgICAgICAgIGlmICgoeSA9IGNt a2V5KG9ub2ZmLDIsIiIsIm9uIix4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1 cm4oeSk7CisgICAgICAgICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkKKyAgICAgICAgICAg ICAgICByZXR1cm4oeCk7CisgICAgICAgICAgICAgIHVjc2JvbSA9IHk7CisgICAgICAgICAgICAg IHJldHVybihzdWNjZXNzID0gMSk7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg ICByZXR1cm4oLTIpOworICAgICAgICAgIH0KKyAgICAgIH0KKyNlbmRpZiAvKiBVTklDT0RFICov CisKKyNpZm5kZWYgZGF0YWdlbmVyYWwKKyAgICAgIGNhc2UgWFlGX0lOU1A6IHsgICAgICAgICAg ICAgICAgICAvKiBTQ0FOIChJTlNQRUNUSU9OKSAqLworICAgICAgICAgIGV4dGVybiBpbnQgZmls ZXBlZWssIG5zY2FuZmlsZTsKKyAgICAgICAgICBpZiAoKHggPSBjbWtleShvbm9mZiwyLCIiLCJv biIseHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgICAgaWYg KHkpIHsKKyAgICAgICAgICAgICAgaWYgKCh5ID0gY21udW0oIkhvdyBtdWNoIHRvIHNjYW4iLGNr aXRvYShTQ0FORklMRUJVRiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwLCZ6LHh4 c3RyaW5nKSkgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybih5KTsKKyAgICAgICAgICB9Cisg ICAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKQorICAgICAgICAgICAgcmV0dXJuKHkpOwor I2lmZGVmIFZNUworICAgICAgICAgIGZpbGVwZWVrID0gMDsKKyAgICAgICAgICBuc2NhbmZpbGUg PSAwOworICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7CisjZWxzZQorICAgICAgICAgIGZp bGVwZWVrID0geDsKKyAgICAgICAgICBuc2NhbmZpbGUgPSB6OworICAgICAgICAgIHJldHVybihz dWNjZXNzID0gMSk7CisjZW5kaWYgLyogVk1TICovCisgICAgICB9CisjZW5kaWYgLyogZGF0YWdl bmVyYWwgKi8KKworICAgICAgY2FzZSBYWUZfREZMVDoKKyAgICAgICAgeSA9IDA7CisjaWZuZGVm IE5PQ1NFVFMKKyAgICAgICAgaWYgKCh5ID0gY21rZXkoZmRmbHRhYixuZmRmbHQsIiIsIiIseHhz dHJpbmcpKSA8IDApCisgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICBpZiAoeSA9PSA3IHx8 IHkgPT0gOCkgeworICAgICAgICAgICAgaWYgKHkgPT0gNykKKyAgICAgICAgICAgICAgcyA9IGZj c2luZm9bZGNzZXQ3XS5rZXl3b3JkOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBz ID0gZmNzaW5mb1tkY3NldDhdLmtleXdvcmQ7CisgICAgICAgICAgICBpZiAoKHggPSBjbWtleShm Y3N0YWIsbmZpbGMsImNoYXJhY3Rlci1zZXQiLHMseHhzdHJpbmcpKSA8IDApCisgICAgICAgICAg ICAgIHJldHVybih4KTsKKyAgICAgICAgfQorICAgICAgICBja3N0cm5jcHkobGluZSxmY3NpbmZv W3hdLmtleXdvcmQsTElOQlVGU0laKTsKKyAgICAgICAgcyA9IGxpbmU7CisjZW5kaWYgLyogTk9D U0VUUyAqLworICAgICAgICBpZiAoKHogPSBjbWNmbSgpKSA8IDApCisgICAgICAgICAgcmV0dXJu KHopOworICAgICAgICBzd2l0Y2ggKHkpIHsKKyNpZm5kZWYgTk9DU0VUUworICAgICAgICAgIGNh c2UgNzoKKyAgICAgICAgICAgIGlmIChmY3NpbmZvW3hdLnNpemUgIT0gMTI4KSB7CisgICAgICAg ICAgICAgICAgcHJpbnRmKCIlcyAtIE5vdCBhIDctYml0IHNldFxuIixzKTsKKyAgICAgICAgICAg ICAgICByZXR1cm4oLTkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGNzZXQ3ID0geDsK KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgODoKKyAgICAgICAgICAgIGlmIChm Y3NpbmZvW3hdLnNpemUgIT0gMjU2KSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCIlcyAtIE5v dCBhbiA4LWJpdCBzZXRcbiIscyk7CisgICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIGRjc2V0OCA9IHg7CisgICAgICAgICAgICBicmVhazsKKyNl bmRpZiAvKiBOT0NTRVRTICovCisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVy bigtMik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKworI2lmbmRl ZiBOT1hGRVIKKyAgICAgIGNhc2UgOTk5NzogICAgICAgICAgICAgICAgICAgICAgICAvKiBGQVNU TE9PS1VQUyAqLworICAgICAgICByZXR1cm4oc3VjY2VzcyA9IHNldG9uKCZzdGF0aGFjaykpOwor I2VuZGlmIC8qIE5PWEZFUiAqLworCisjaWZkZWYgVU5JWAorI2lmZGVmIERZTkFNSUMKKyAgICAg IGNhc2UgWFlGX0xTSVo6IHsgICAgICAgICAgICAgICAgICAvKiBMSVNUU0laRSAqLworICAgICAg ICAgIGludCB6ejsKKyAgICAgICAgICB5ID0gY21udW0oIk1heGltdW0gbnVtYmVyIG9mIGZpbGVu YW1lcyIsIiIsMTAsJngseHhzdHJpbmcpOworICAgICAgICAgIGlmICgoeCA9IHNldG51bSgmenos eCx5LC0xKSkgPCAwKQorICAgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICAgIGlmICh6c2V0 ZmlsKHp6LDMpIDwgMCkgeworICAgICAgICAgICAgICBwcmludGYoIj9NZW1vcnkgYWxsb2NhdGlv biBmYWlsdXJlXG4iKTsKKyAgICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgICB9Cisg ICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKyAgICAgIH0KKyAgICAgIGNhc2UgWFlGX1NT UEE6IHsgICAgICAgICAgICAgICAgICAvKiBTVFJJTkdTUEFDRSAqLworICAgICAgICAgIGludCB6 ejsKKyAgICAgICAgICB5ID0gY21udW0oIk51bWJlciBvZiBjaGFyYWN0ZXJzIGZvciBmaWxlbmFt ZSBsaXN0IiwKKyAgICAgICAgICAgICAgICAgICAgIiIsMTAsJngseHhzdHJpbmcpOworICAgICAg ICAgIGlmICgoeCA9IHNldG51bSgmenoseCx5LC0xKSkgPCAwKQorICAgICAgICAgICAgcmV0dXJu KHgpOworICAgICAgICAgIGlmICh6c2V0ZmlsKHp6LDEpIDwgMCkgeworICAgICAgICAgICAgICBw cmludGYoIj9NZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlXG4iKTsKKyAgICAgICAgICAgICAgcmV0 dXJuKC05KTsKKyAgICAgICAgICB9CisgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKyAg ICAgIH0KKworI2VuZGlmIC8qIERZTkFNSUMgKi8KKyNlbmRpZiAvKiBVTklYICovCisKKyAgICAg IGRlZmF1bHQ6CisgICAgICAgIHByaW50ZigiP3VuZXhwZWN0ZWQgZmlsZSBwYXJhbWV0ZXJcbiIp OworICAgICAgICByZXR1cm4oLTIpOworICAgIH0KK30KKworI2lmZGVmIFVOSVgKKyNpZm5kZWYg Tk9QVVRFTlYKKyNpZmRlZiBCSUdCVUZPSworI2RlZmluZSBOUFVURU5WUyA0MDk2CisjZWxzZQor I2RlZmluZSBOUFVURU5WUyAxMjgKKyNlbmRpZgkvKiBCSUdCVUZPSyAqLworLyogZW52aXJvbm1l bnQgdmFyaWFibGVzIG11c3QgYmUgc3RhdGljLCBub3QgYXV0b21hdGljICovCisKK3N0YXRpYyBj aGFyICogcHV0ZW52c1tOUFVURU5WU107CS8qIEFycmF5IG9mIGVudmlyb25tZW50IHZhciBzdHJp bmdzICovCitzdGF0aWMgaW50IG5wdXRlbnZzID0gLTE7CQkvKiBQb2ludGVyIGludG8gYXJyYXkg Ki8KKy8qCisgIElmIGFueW9uZSBldmVyIG5vdGljZXMgdGhlIGxpbWl0YXRpb24gb24gdGhlIG51 bWJlciBvZiBQVVRFTlZzLCB0aGUgbGlzdAorICBjYW4gYmUgbWFkZSBkeW5hbWljLCB3ZSBjYW4g cmVjeWNsZSBlbnRyaWVzIHdpdGggdGhlIHNhbWUgbmFtZSwgZXRjLgorKi8KK2ludAorZG9wdXRl bnYoczEsIHMyKSBjaGFyICogczE7IGNoYXIgKiBzMjsgeworICAgIGNoYXIgKiBzLCAqIHQgPSB0 bXBidWY7CQkvKiBDcmVhdGUgb3IgYWx0ZXIgZW52aXJvbm1lbnQgdmFyICovCisKKyAgICBpZiAo bnB1dGVudnMgPT0gLTEpIHsJCS8qIFRhYmxlIG5vdCB1c2VkIHlldCAqLworCWludCBpOwkJCQkv KiBJbml0aWFsaXplIHRoZSBwb2ludGVycyAqLworCWZvciAoaSA9IDA7IGkgPCBOUFVURU5WUzsg aSsrKQorCSAgcHV0ZW52c1tpXSA9IE5VTEw7CisJbnB1dGVudnMgPSAwOworICAgIH0KKyAgICBp ZiAoIXMxKSByZXR1cm4oMSk7CQkJLyogTm90aGluZyB0byBkbyAqLworICAgIGlmICghKnMxKSBy ZXR1cm4oMSk7CQkvKiBkaXR0byAqLworCisgICAgaWYgKGNraW5kZXgoIj0iLHMxLDAsMCwwKSkg ewkvKiBEb2VzIHRoZSBuYW1lIGNvbnRhaW4gYW4gJz0nPyAqLworCXByaW50ZigJCQkJLyogcHV0 ZW52KCkgZG9lcyBub3QgYWxsb3cgdGhpcy4gKi8KKwkgLyogVGhpcyBhbHNvIGNhdGNoZXMgdGhl ICdwdXRlbnYgbmFtZT12YWx1ZScgY2FzZSAqLworICAgICAgICAgIj9QVVRFTlYgLSBFcXVhbCBz aWduIGluIHZhcmlhYmxlIG5hbWUgLSAnaGVscCBwdXRlbnYnIGZvciBpbmZvLlxuIik7CisgICAg ICAgIHJldHVybigtOSk7CisgICAgfQorICAgIG5wdXRlbnZzKys7CQkJCS8qIFBvaW50IHRvIG5l eHQgZnJlZSBzdHJpbmcgKi8KKworICAgIGRlYnVnKEYxMTEsImRvcHV0ZW52IHMxIixzMSxucHV0 ZW52cyk7CisgICAgZGVidWcoRjExMSwiZG9wdXRlbnYgczIiLHMyLG5wdXRlbnZzKTsKKworICAg IGlmIChucHV0ZW52cyA+IE5QVVRFTlZTIC0gMSkgewkvKiBOb3RpY2UgdGhlIGVuZCAqLworCXBy aW50ZigiP1BVVEVOViAtIHN0YXRpYyBidWZmZXIgc3BhY2UgZXhoYXVzdGVkXG4iKTsKKwlyZXR1 cm4oLTkpOworICAgIH0KKyAgICAvKiBRdW90ZXMgYXJlIG5vdCBuZWVkZWQgYnV0IHdlIGFsbG93 IHRoZW0gZm9yIGZhbWlsaWFyaXR5ICovCisgICAgLyogYnV0IHRoZW4gd2Ugc3RyaXAgdGhlbSwg c28gc3ludGF4IGlzIHNhbWUgYXMgZm9yIFVuaXggc2hlbGwgKi8KKworICAgIGlmIChzMikgewor CXMyID0gYnJzdHJpcChzMik7CisgICAgfSBlbHNlIHsKKwlzMiA9IChjaGFyICopIiI7CisgICAg fQorICAgIGNrbWFrbXNnKHQsVE1QQlVGU0laLHMxLCI9IixzMixOVUxMKTsKKyAgICBkZWJ1ZyhG MTExLCJkb3B1dGVudiIsdCxucHV0ZW52cyk7CisgICAgKFZPSUQpIG1ha2VzdHIoJihwdXRlbnZz W25wdXRlbnZzXSksdCk7IC8qIE1ha2UgYSBzYWZlIHBlcm1hbmFuZW50IGNvcHkgKi8KKyAgICBp ZiAoIXB1dGVudnNbbnB1dGVudnNdKSB7CisJcHJpbnRmKCI/UFVURU5WIC0gbWVtb3J5IGFsbG9j YXRpb24gZmFpbHVyZVxuIik7CisJcmV0dXJuKC05KTsKKyAgICB9CisgICAgaWYgKHB1dGVudihw dXRlbnZzW25wdXRlbnZzXSkpIHsKKwlwcmludGYoIj9QVVRFTlYgLSAlc1xuIixja19lcnJzdHIo KSk7CisJcmV0dXJuKC05KTsKKyAgICB9IGVsc2UgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKK30KKyNl bmRpZgkvKiBOT1BVVEVOViAqLworI2VuZGlmCS8qIFVOSVggKi8KKworaW50CitzZXR0cm10eXAo KSB7CisjaWZkZWYgT1MyCisjaWZkZWYgVE5DT0RFCisgICAgZXh0ZXJuIGludCB0dG51bTsgICAg ICAgICAgICAgICAgICAgIC8qIExhc3QgVGVsbmV0IFRlcm1pbmFsIFR5cGUgc2VudCAqLworICAg IGV4dGVybiBpbnQgdHRudW1lbmQ7ICAgICAgICAgICAgICAgICAvKiBIYXMgZW5kIG9mIGxpc3Qg YmVlbiBmb3VuZCAqLworI2VuZGlmIC8qIFROQ09ERSAqLworICAgIGlmICgoeCA9IGNta2V5KHR0 eXB0YWIsbnR0eXAsIiIsInZ0MjIwIix4eHN0cmluZykpIDwgMCkKKyAgICAgIHJldHVybih4KTsK KyAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApCisgICAgICByZXR1cm4oeSk7CisgICAgc2V0dGVy bXR5cGUoeCwxKTsKKyNpZmRlZiBUTkNPREUKKyAgICAvKiBTbyB3ZSBzZW5kIHRoZSBjb3JyZWN0 IHRlcm1pbmFsIG5hbWUgdG8gdGhlIGhvc3QgaWYgaXQgYXNrcyBmb3IgaXQgKi8KKyAgICB0dG51 bSA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBMYXN0IFRlbG5ldCBUZXJtaW5hbCBU eXBlIHNlbnQgKi8KKyAgICB0dG51bWVuZCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAvKiBl bmQgb2YgbGlzdCBub3QgZm91bmQgKi8KKyNlbmRpZiAvKiBUTkNPREUgKi8KKyAgICByZXR1cm4o c3VjY2VzcyA9IDEpOworI2Vsc2UgIC8qIE5vdCBPUzIgKi8KKyNpZmRlZiBVTklYCisgICAgZXh0 ZXJuIGludCBmeGRfaW5pdGVkOworICAgIHggPSBjbXR4dCgiVGVybWluYWwgdHlwZSBuYW1lLCBj YXNlIHNlbnNpdGl2ZSIsIiIsJnMsTlVMTCk7CisjaWZkZWYgTk9QVVRFTlYKKyAgICBzdWNjZXNz ID0gMTsKKyNlbHNlCisgICAgc3VjY2VzcyA9IGRvcHV0ZW52KCJURVJNIixzKTsJLyogU2V0IHRo ZSBURVJNIHZhcmlhYmxlICovCisjaWZkZWYgQ0tfQ1VSU0VTCisgICAgZnhkX2luaXRlZCA9IDA7 CSAgICAgICAvKiBGb3JjZSByZWluaXRpYWxpemF0aW9uIG9mIGN1cnNlcyBkYXRhYmFzZSAqLwor ICAgICh2b2lkKWRveGRpcygwKTsJCSAgICAgLyogUmUtaW5pdGlhbGl6ZSBmaWxlIHRyYW5zZmVy IGRpc3BsYXkgKi8KKyAgICBjb25jYigoY2hhcillc2NhcGUpOwkJLyogRml4IGNvbW1hbmQgdGVy bWluYWwgKi8KKyNlbmRpZgkvKiBDS19DVVJTRVMgKi8KKyNlbmRpZgkvKiBOT1BVVEVOViAqLwor ICAgIHJldHVybihzdWNjZXNzKTsKKyNlbHNlCisgICAgcHJpbnRmKAorIlxuIFNvcnJ5LCB0aGlz IHZlcnNpb24gb2YgQy1LZXJtaXQgZG9lcyBub3Qgc3VwcG9ydCB0aGUgU0VUIFRFUk1JTkFMIFRZ UEVcbiIpOworICAgIHByaW50ZigKKyIgY29tbWFuZC4gIFR5cGUgXCJoZWxwIHNldCB0ZXJtaW5h bFwiIGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLlxuIik7CisgICAgcmV0dXJuKHN1Y2Nlc3MgPSAw KTsKKyNlbmRpZgkvKiBVTklYICovCisjZW5kaWYgLyogT1MyICovCit9CisKKyNpZm5kZWYgTk9M T0NBTAorI2lmZGVmIE9TMgorLyogTVMtRE9TIEtFUk1JVCBjb21wYXRpYmlsaXR5IG1vZGVzICov CitpbnQKK3NldG1zaygpIHsKKyAgICBpZiAoKHkgPSBjbWtleShtc2t0YWIsbm1zaywiTVMtRE9T IEtlcm1pdCBjb21wYXRpYmlsaXR5IG1vZGUiLAorICAgICAgICAgICAgICAgICAgICAia2V5Y29k ZXMiLHh4c3RyaW5nKSkgPCAwKSByZXR1cm4oeSk7CisKKyAgICBzd2l0Y2ggKCB5ICkgeworI2lm ZGVmIENPTU1FTlQKKyAgICAgIGNhc2UgTVNLX0NPTE9SOgorICAgICAgICByZXR1cm4oc2V0b24o Jm1za2NvbG9ycykpOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgIGNhc2UgTVNLX0tFWVM6 CisgICAgICAgIHJldHVybihzZXRvbigmbXNra2V5cykpOworICAgICAgY2FzZSBNU0tfUkVOOgor ICAgICAgICByZXR1cm4oc2V0b24oJm1za3JlbmFtZSkpOworICAgICAgZGVmYXVsdDogICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIFNob3VsZG4ndCBnZXQgaGVyZS4gKi8KKyAgICAgICAgcmV0 dXJuKC0yKTsKKyAgICB9Cit9CisjZW5kaWYgLyogT1MyICovCisKKyNpZmRlZiBDS1RJRExFCitz dGF0aWMgY2hhciBpYWN0YnVmWzEzMl07CisKK2NoYXIgKgorZ2V0aWFjdCgpIHsKKyAgICBzd2l0 Y2ggKHR0X2lkbGVhY3QpIHsKKyAgICAgIGNhc2UgSURMRV9SRVQ6ICByZXR1cm4oInJldHVybiIp OworICAgICAgY2FzZSBJRExFX0VYSVQ6IHJldHVybigiZXhpdCIpOworICAgICAgY2FzZSBJRExF X0hBTkc6IHJldHVybigiaGFuZ3VwIik7CisjaWZkZWYgVE5DT0RFCisgICAgICBjYXNlIElETEVf VE5PUDogcmV0dXJuKCJUZWxuZXQgTk9QIik7CisgICAgICBjYXNlIElETEVfVEFZVDogcmV0dXJu KCJUZWxuZXQgQVlUIik7CisjZW5kaWYgLyogVE5DT0RFICovCisKKyAgICAgIGNhc2UgSURMRV9P VVQ6IHsKKyAgICAgICAgICBpbnQgYywgaywgbjsKKyAgICAgICAgICBjaGFyICogcCwgKiBxLCAq IHQ7CisgICAgICAgICAgayA9IGNrc3RybmNweShpYWN0YnVmLCJvdXRwdXQgIiwxMzIpOworICAg ICAgICAgIG4gPSBrOworICAgICAgICAgIHEgPSAmaWFjdGJ1ZltrXTsKKyAgICAgICAgICBwID0g dHRfaWRsZXN0cjsKKyAgICAgICAgICBpZiAoIXApIHAgPSAiIjsKKyAgICAgICAgICBpZiAoISpw KSByZXR1cm4oIm91dHB1dCBOVUwiKTsKKyAgICAgICAgICB3aGlsZSAoKGMgPSAqcCsrKSAmJiBu IDwgMTMxKSB7CisgICAgICAgICAgICAgIGMgJj0gMHhmZjsKKyAgICAgICAgICAgICAgaWYgKGMg PT0gJ1xcJykgeworICAgICAgICAgICAgICAgICAgaWYgKG4gPiAxMzApIGJyZWFrOworICAgICAg ICAgICAgICAgICAgKnErKyA9ICdcXCc7CisgICAgICAgICAgICAgICAgICAqcSsrID0gJ1xcJzsK KyAgICAgICAgICAgICAgICAgICpxID0gTlVMOworICAgICAgICAgICAgICAgICAgbiArPSAyOwor ICAgICAgICAgICAgICB9IGVsc2UgaWYgKChjID4gMzIgJiYgYyA8IDEyNykgfHwgYyA+IDE1OSkg eworICAgICAgICAgICAgICAgICAgKnErKyA9IGM7CisgICAgICAgICAgICAgICAgICAqcSA9IE5V TDsKKyAgICAgICAgICAgICAgICAgIG4rKzsKKyAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg ICAgICAgICAgICAgIGlmIChuID4gKDEzMSAtIDYpKQorICAgICAgICAgICAgICAgICAgICBicmVh azsKKyAgICAgICAgICAgICAgICAgIHNwcmludGYocSwiXFx7JWR9IixjKTsKKyAgICAgICAgICAg ICAgICAgIGsgPSBzdHJsZW4ocSk7CisgICAgICAgICAgICAgICAgICBxICs9IGs7CisgICAgICAg ICAgICAgICAgICBuICs9IGs7CisgICAgICAgICAgICAgICAgICAqcSA9IE5VTDsKKyAgICAgICAg ICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgICAqcSA9IE5VTDsKKyNpZmRlZiBPUzIKKyAg ICAgICAgICBrID0gdHRfY29sc1tWVEVSTV07CisjZWxzZQorICAgICAgICAgIGsgPSB0dF9jb2xz OworI2VuZGlmIC8qIE9TMiAqLworICAgICAgICAgIGlmIChuID4gayAtIDUyKSB7CisgICAgICAg ICAgICAgIG4gPSBrIC0gNTI7CisgICAgICAgICAgICAgIGlhY3RidWZbbi0yXSA9ICcuJzsKKyAg ICAgICAgICAgICAgaWFjdGJ1ZltuLTFdID0gJy4nOworICAgICAgICAgICAgICBpYWN0YnVmW25d ID0gTlVMOworICAgICAgICAgIH0KKyAgICAgICAgICByZXR1cm4oaWFjdGJ1Zik7CisgICAgICB9 CisgICAgICBkZWZhdWx0OiByZXR1cm4oInVua25vd24iKTsKKyAgICB9Cit9CisjZW5kaWYgLyog Q0tUSURMRSAqLworCisjaWZuZGVmIE5PQ1NFVFMKK1ZPSUQKK3NldGxjbGNoYXJzZXQoeCkgaW50 IHg7IHsKKyAgICBpbnQgaTsKKyAgICB0Y3NsID0geTsgICAgICAgICAgICAgICAgICAgLyogTG9j YWwgY2hhcmFjdGVyIHNldCAqLworI2lmZGVmIE9TMgorICAgIGZvciAoaSA9IDA7IGkgPCA0OyBp KyspIHsKKyAgICAgICAgR1tpXS5pbml0ID0gVFJVRTsKKyAgICAgICAgeCA9IEdbaV0uZGVzaWdu YXRpb247CisgICAgICAgIEdbaV0uYzEgPSAoeCAhPSB0Y3NsKSAmJiBjc19pc19zdGQoeCk7Cisg ICAgICAgIHggPSBHW2ldLmRlZl9kZXNpZ25hdGlvbjsKKyAgICAgICAgR1tpXS5kZWZfYzEgPSAo eCAhPSB0Y3NsKSAmJiBjc19pc19zdGQoeCk7CisgICAgfQorI2VuZGlmIC8qIE9TMiAqLworfQor CitWT0lECitzZXRyZW1jaGFyc2V0KHgsIHopIGludCB4LCB6OyB7CisgICAgaW50IGk7CisKKyNp ZmRlZiBLVUkKKyAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX1RFUk1fUkVNQ0hBUlNFVCwgKGxvbmcp IHgsIChsb25nKSB6ICkgOworI2VuZGlmIC8qIEtVSSAqLworI2lmZGVmIFVOSUNPREUKKyAgICBp ZiAoeCA9PSBUWF9UUkFOU1ApCisjZWxzZSAvKiBVTklDT0RFICovCisgICAgaWYgKHggPT0gRkNf VFJBTlNQKQorI2VuZGlmIC8qIFVOSUNPREUgKi8KKyAgICB7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogVFJBTlNQQVJFTlQ/ICovCisjaWZuZGVmIE9TMgorICAgICAgICB0Y3NyID0gdGNz bDsgICAgICAgICAgICAvKiBNYWtlIGJvdGggc2V0cyB0aGUgc2FtZSAqLworI2Vsc2UgLyogT1My ICovCisjaWZkZWYgQ0tPVU5JCisgICAgICAgIHR0X3V0ZjggPSAwOyAgICAgICAgICAgIC8qIFR1 cm4gb2ZmIFVURjggZmxhZyAqLworICAgICAgICB0Y3NyID0gdGNzbCA9IGRlY19rYmQgPSBUWF9U UkFOU1A7IC8qIE5vIHRyYW5zbGF0aW9uICovCisgICAgICAgIHRjc190cmFuc3AgPSAxOworCisg ICAgICAgIGlmICghY3NfaXNfbnJjKHRjc2wpKSB7CisgICAgICAgICAgICBHWzBdLmRlZl9kZXNp Z25hdGlvbiA9IEdbMF0uZGVzaWduYXRpb24gPSBUWF9BU0NJSTsKKyAgICAgICAgICAgIEdbMF0u aW5pdCA9IFRSVUU7CisgICAgICAgICAgICBHWzBdLmRlZl9jMSA9IEdbMF0uYzEgPSBGQUxTRTsK KyAgICAgICAgICAgIEdbMF0uc2l6ZSA9IGNzOTQ7CisgICAgICAgICAgICBHWzBdLm5hdGlvbmFs ID0gRkFMU0U7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChpID0gY3NfaXNfbnJjKHRjc2wpID8g MCA6IDE7IGkgPCA0OyBpKyspIHsKKyAgICAgICAgICAgIEdbaV0uZGVmX2Rlc2lnbmF0aW9uID0g R1tpXS5kZXNpZ25hdGlvbiA9IHRjc2w7CisgICAgICAgICAgICBHW2ldLmluaXQgPSBUUlVFOwor ICAgICAgICAgICAgR1tpXS5kZWZfYzEgPSBHW2ldLmMxID0gRkFMU0U7CisgICAgICAgICAgICBz d2l0Y2ggKGNzX3NpemUoR1tpXS5kZXNpZ25hdGlvbikpIHsgLyogOTQsIDk2LCBvciAxMjggKi8K KyAgICAgICAgICAgIGNhc2UgMTI4OgorICAgICAgICAgICAgY2FzZSA5NjoKKyAgICAgICAgICAg ICAgICBHW2ldLnNpemUgPSBHW2ldLmRlZl9zaXplID0gY3M5NjsKKyAgICAgICAgICAgICAgICBi cmVhazsKKyAgICAgICAgICAgIGNhc2UgOTQ6CisgICAgICAgICAgICAgICAgR1tpXS5zaXplID0g R1tpXS5kZWZfc2l6ZSA9IGNzOTQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEdbaV0uc2l6ZSA9IEdbaV0uZGVmX3NpemUgPSBj c21iOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAg R1tpXS5uYXRpb25hbCA9IGNzX2lzX25yYyh4KTsKKyAgICAgICAgfQorI2Vsc2UgLyogQ0tPVU5J ICovCisgICAgICAgIHRjc3IgPSB0Y3NsOyAgICAgICAgICAgIC8qIE1ha2UgYm90aCBzZXRzIHRo ZSBzYW1lICovCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKyAgICAgICAgICAg IEdbaV0uZGVmX2Rlc2lnbmF0aW9uID0gR1tpXS5kZXNpZ25hdGlvbiA9IEZDX1RSQU5TUDsKKyAg ICAgICAgICAgIEdbaV0uaW5pdCA9IEZBTFNFOworICAgICAgICAgICAgR1tpXS5zaXplID0gR1tp XS5kZWZfc2l6ZSA9IGNzOTY7CisgICAgICAgICAgICBHW2ldLmMxID0gR1tpXS5kZWZfYzEgPSBG QUxTRTsKKyAgICAgICAgICAgIEdbaV0ucnRvaSA9IE5VTEw7CisgICAgICAgICAgICBHW2ldLml0 b2wgPSBOVUxMOworICAgICAgICAgICAgR1tpXS5sdG9pID0gTlVMTDsKKyAgICAgICAgICAgIEdb aV0uaXRvciA9IE5VTEw7CisgICAgICAgICAgICBHW2ldLm5hdGlvbmFsID0gRkFMU0U7CisgICAg ICAgIH0KKyNlbmRpZiAvKiBDS09VTkkgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAgcmV0 dXJuOworICAgIH0KKyNpZmRlZiBPUzIKKyNpZmRlZiBDS09VTkkKKyAgICBlbHNlIGlmICh4ID09 IFRYX1VURjgpIHsKKyAgICAgICAgdGNzX3RyYW5zcCA9IDA7CisgICAgICAgIHR0X3V0ZjggPSAx OyAgICAgICAgICAgIC8qIFR1cm4gaXQgb24gaWYgd2UgYXJlIFVURjggKi8KKyAgICAgICAgcmV0 dXJuOworICAgIH0KKyNlbmRpZiAvKiBDS09VTkkgKi8KKyAgICBlbHNlIHsKKyAgICAgICAgdGNz X3RyYW5zcCA9IDA7CisgICAgICAgIHRjc3IgPSB4OyAgICAgICAgICAgICAgICAgICAgICAgLyog UmVtb3RlIGNoYXJhY3RlciBzZXQgKi8KKyNpZmRlZiBDS09VTkkKKyAgICAgICAgdHRfdXRmOCA9 IDA7ICAgICAgICAgICAgICAgICAgICAvKiBUdXJuIG9mZiBVVEY4IGZsYWcgKi8KKyNlbmRpZiAv KiBDS09VTkkgKi8KKworICAgICAgICBpZiAoeiA9PSBUVF9HUl9BTEwpIHsKKyAgICAgICAgICAg IGludCBpOworI2lmZGVmIFVOSUNPREUKKyAgICAgICAgICAgIGRlY19rYmQgPSB4OworI2VuZGlm IC8qIFVOSUNPREUgKi8KKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKyAg ICAgICAgICAgICAgICBHW2ldLmluaXQgPSBUUlVFOworICAgICAgICAgICAgICAgIGlmICggaSA9 PSAwICYmICFjc19pc19ucmMoeCkgKSB7CisgICAgICAgICAgICAgICAgICAgIEdbMF0uZGVzaWdu YXRpb24gPSBHWzBdLmRlZl9kZXNpZ25hdGlvbiA9IEZDX1VTQVNDSUk7CisgICAgICAgICAgICAg ICAgICAgIEdbMF0uc2l6ZSA9IEdbMF0uZGVmX3NpemUgPSBjczk0OworICAgICAgICAgICAgICAg ICAgICBHWzBdLm5hdGlvbmFsID0gMTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAg ICAgICAgICAgICAgICBHW2ldLmRlZl9kZXNpZ25hdGlvbiA9IEdbaV0uZGVzaWduYXRpb24gPSB4 OworICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGNzX3NpemUoeCkpIHsgICAgICAgLyogOTQs IDk2LCBvciAxMjggKi8KKyAgICAgICAgICAgICAgICAgICAgY2FzZSAxMjg6CisgICAgICAgICAg ICAgICAgICAgIGNhc2UgOTY6CisgICAgICAgICAgICAgICAgICAgICAgICBHW2ldLnNpemUgPSBH W2ldLmRlZl9zaXplID0gY3M5NjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg ICAgICAgICAgICAgICAgICBjYXNlIDk0OgorICAgICAgICAgICAgICAgICAgICAgICAgR1tpXS5z aXplID0gR1tpXS5kZWZfc2l6ZSA9IGNzOTQ7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVh azsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAg IEdbaV0uc2l6ZSA9IEdbaV0uZGVmX3NpemUgPSBjc21iOworICAgICAgICAgICAgICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgR1tp XS5uYXRpb25hbCA9IGNzX2lzX25yYyh4KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgICAgR1tpXS5jMSA9IEdbaV0uZGVmX2MxID0geCAhPSB0Y3NsICYmIGNzX2lzX3N0ZCh4KTsK KyAgICAgICAgICAgIH0KKyNpZmRlZiBVTklDT0RFCisgICAgICAgIH0gZWxzZSBpZiAoeiA9PSBU VF9HUl9LQkQpIHsgICAgLyogS2V5Ym9hcmQgb25seSAqLworICAgICAgICAgICAgZGVjX2tiZCA9 IHg7CisjZW5kaWYgLyogVU5JQ09ERSAqLworICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAg ICAgICAgICAgIC8qIFNwZWNpZmljIEduICovCisgICAgICAgICAgICBHW3pdLmRlZl9kZXNpZ25h dGlvbiA9IEdbel0uZGVzaWduYXRpb24gPSB4OworICAgICAgICAgICAgR1t6XS5pbml0ID0gVFJV RTsKKyAgICAgICAgICAgIHN3aXRjaCAoY3Nfc2l6ZSh4KSkgeyAgICAgICAvKiA5NCwgOTYsIG9y IDEyOCAqLworICAgICAgICAgICAgY2FzZSAxMjg6CisgICAgICAgICAgICBjYXNlIDk2OgorICAg ICAgICAgICAgICAgIEdbel0uc2l6ZSA9IEdbel0uZGVmX3NpemUgPSBjczk2OworICAgICAgICAg ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSA5NDoKKyAgICAgICAgICAgICAgICBHW3pd LnNpemUgPSBHW3pdLmRlZl9zaXplID0gY3M5NDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgR1t6XS5zaXplID0gR1t6XS5kZWZf c2l6ZSA9IGNzbWI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg ICAgICAgICBHW3pdLmMxID0gR1t6XS5kZWZfYzEgPSB4ICE9IHRjc2wgJiYgY3NfaXNfc3RkKHgp OworICAgICAgICAgICAgR1t6XS5uYXRpb25hbCA9IGNzX2lzX25yYyh4KTsKKyAgICAgICAgfQor ICAgIH0KKyNlbHNlIC8qIG5vdCBPUzIgKi8KKyAgICB0Y3NyID0geDsgICAgICAgICAgICAgICAg ICAgLyogUmVtb3RlIGNoYXJhY3RlciBzZXQgKi8KKyNlbmRpZiAvKiBPUzIgKi8KK30KKyNlbmRp ZiAvKiBOT0NTRVRTICovCisKK1ZPSUQKK3NldGNtYXNrKHgpIGludCB4OyB7CisgICAgaWYgKHgg PT0gNykgeworICAgICAgICBjbWFzayA9IDAxNzc7CisgICAgfSBlbHNlIGlmICh4ID09IDgpIHsK KyAgICAgICAgY21hc2sgPSAwMzc3OworICAgICAgICBwYXJpdHkgPSAwOworICAgIH0KKyNpZmRl ZiBLVUkgICAgICAKKyAgICBLdWlTZXRQcm9wZXJ0eShLVUlfVEVSTV9DTUFTSyx4LDApOworI2Vu ZGlmIC8qIEtVSSAqLworfQorCisjaWZkZWYgQ0tfQVVUT0RMCitWT0lECitzZXRhdXRvZGwoeCx5 KSBpbnQgeCx5OyB7CisgICAgYXV0b2RsID0geDsKKyAgICBhZGxfYXNrID0geTsKKyNpZmRlZiBL VUkgICAgICAKKyAgICBLdWlTZXRQcm9wZXJ0eShLVUlfVEVSTV9BVVRPRE9XTkxPQUQseD8oeT8y OjEpOjAsMCk7CisjZW5kaWYgLyogS1VJICovCit9CisjZW5kaWYgLyogQ0tfQVVUT0RMICovCisK KyNpZmRlZiBPUzIKK1ZPSUQKK3NldHVybGhsKGludCB4KSB7CisgICAgdHRfdXJsX2hpbGl0ZSA9 IHg7CisjaWZkZWYgS1VJICAgICAgCisgICAgS3VpU2V0UHJvcGVydHkoS1VJX1RFUk1fVVJMX0hJ R0hMSUdIVCx4LDApOworI2VuZGlmIC8qIEtVSSAqLworfQorCitWT0lECitzZXRhcHJpbnQoaW50 IHgpIHsKKyAgICBleHRlcm4gaW50IGFwcmludDsKKyAgICBhcHJpbnQgPSB4OworI2lmZGVmIEtV SQorICAgIEt1aVNldFByb3BlcnR5KEtVSV9URVJNX1BSSU5URVJDT1BZLHgsMCk7CisjZW5kaWYg LyogS1VJICovCit9CisjZW5kaWYgLyogT1MyICovCisKK2ludAorc2V0dHJtKCkgeworICAgIGlu dCBpID0gMDsKKyNpZmRlZiBPUzIKKyAgICBleHRlcm4gaW50IGNvbG9ycmVzZXQsIHVzZXJfZXJh c2Vtb2RlOworI2VuZGlmIC8qIE9TMiAqLworICAgIGlmICgoeSA9IGNta2V5KHRybXRhYixudHJt LCIiLCAiIix4eHN0cmluZykpIDwgMCkgcmV0dXJuKHkpOworI2lmZGVmIE1BQworICAgIHByaW50 ZigiXG4/U29ycnksIG5vdCBpbXBsZW1lbnRlZCB5ZXQuICBQbGVhc2UgdXNlIHRoZSBTZXR0aW5n cyBtZW51LlxuIik7CisgICAgcmV0dXJuKC05KTsKKyNlbHNlCisjaWZkZWYgSUtTRAorICAgIGlm IChpbnNlcnZlcikgeworICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsK KyAgICAgICAgcHJpbnRmKCI/U29ycnksIGNvbW1hbmQgZGlzYWJsZWQuXHJcbiIpOworICAgICAg ICByZXR1cm4oc3VjY2VzcyA9IDApOworICAgIH0KKyNlbmRpZiAvKiBJS1NEICovCisKKyAgICBz d2l0Y2ggKHkpIHsKKyAgICAgIGNhc2UgWFlUQllUOiAgICAgICAgICAgICAgICAgICAgICAvKiBT RVQgVEVSTUlOQUwgQllURVNJWkUgKi8KKyAgICAgICAgaWYgKCh5ID0gY21udW0oImJ5dGVzaXpl IGZvciB0ZXJtaW5hbCBjb25uZWN0aW9uIiwiOCIsMTAsJngsCisgICAgICAgICAgICAgICAgICAg ICAgIHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgIHJldHVybih5KTsKKyAgICAgICAgaWYgKHgg IT0gNyAmJiB4ICE9IDgpIHsKKyAgICAgICAgICAgIHByaW50ZigiXG4/VGhlIGNob2ljZXMgYXJl IDcgYW5kIDhcbiIpOworICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKyAgICAgICAg fQorICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsKKyAgICAgICAgc2V0 Y21hc2soeCk7CisjaWZkZWYgT1MyCisgICAgICAgIGlmIChJUzk3ODAxKHR0X3R5cGVfbW9kZSkp CisgICAgICAgICAgU05JX2JpdG1vZGUoeCk7CisjZW5kaWYgLyogT1MyICovCisgICAgICAgIHJl dHVybihzdWNjZXNzID0gMSk7CisKKyAgICAgIGNhc2UgWFlUU086ICAgICAgICAgICAgICAgICAg ICAgICAvKiBTRVQgVEVSTUlOQUwgTE9DS0lORy1TSElGVCAqLworICAgICAgICByZXR1cm4oc2V0 b24oJnNvc2kpKTsKKworICAgICAgY2FzZSBYWVROTDogICAgICAgICAgICAgICAgICAgICAgIC8q IFNFVCBURVJNSU5BTCBORVdMSU5FLU1PREUgKi8KKyAgICAgICAgcmV0dXJuKHNldG9uKCZ0bmxt KSk7CisKKyNpZmRlZiBPUzIKKyAgICAgIGNhc2UgWFlUQ09MOgorICAgICAgICBpZiAoKHggPSBj bWtleSh0dHljb2x0YWIsbmNvbG9ycywiIiwidGVybWluYWwiLHh4c3RyaW5nKSkgPCAwKQorICAg ICAgICAgIHJldHVybih4KTsKKyAgICAgICAgZWxzZSBpZiAoeCA9PSBUVENPTFJFUykgeworICAg ICAgICAgICAgaWYgKCh5ID0gY21rZXkodHRjb2xtb2RldGFiLG5jb2xtb2RlLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgIiIsImRlZmF1bHQtY29sb3IiLHh4c3RyaW5nKSkgPCAwKQorICAg ICAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgICAgICBpZiAoKHogPSBjbWNmbSgpKSA8IDAp CisgICAgICAgICAgICAgIHJldHVybih6KTsKKyAgICAgICAgICAgIGNvbG9ycmVzZXQgPSB5Owor ICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKyAgICAgICAgfSBlbHNlIGlmICh4ID09 IFRUQ09MRVJBKSB7CisgICAgICAgICAgICBpZiAoKHkgPSBjbWtleSh0dGNvbG1vZGV0YWIsbmNv bG1vZGUsIiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiY3VycmVudC1jb2xvciIseHhz dHJpbmcpKSA8IDApCisgICAgICAgICAgICAgIHJldHVybih5KTsKKyAgICAgICAgICAgIGlmICgo eiA9IGNtY2ZtKCkpIDwgMCkKKyAgICAgICAgICAgICAgcmV0dXJuKHopOworICAgICAgICAgICAg dXNlcl9lcmFzZW1vZGUgPSB5OworICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3M9MSk7CisgICAg ICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogTm8gcGFyc2UgZXJyb3IgKi8K KyAgICAgICAgICAgIGludCBmZyA9IDAsIGJnID0gMDsKKyAgICAgICAgICAgIGZnID0gY21rZXko dHR5Y2xydGFiLCBuY2xycywKKyAgICAgICAgICAgICAgICAgICAgICAgKHggPT0gVFRDT0xCT1Ig PworICAgICAgICAgICAgICAgICAgICAgICAgImNvbG9yIGZvciBzY3JlZW4gYm9yZGVyIiA6Cisg ICAgICAgICAgICAgICAgICAgICAgICAiZm9yZWdyb3VuZCBjb2xvciBhbmQgdGhlbiBiYWNrZ3Jv dW5kIGNvbG9yIiksCisgICAgICAgICAgICAgICAgICAgICAgICJsZ3JheSIsIHh4c3RyaW5nKTsK KyAgICAgICAgICAgIGlmIChmZyA8IDApCisgICAgICAgICAgICAgIHJldHVybihmZyk7CisgICAg ICAgICAgICBpZiAoeCAhPSBUVENPTEJPUikgeworICAgICAgICAgICAgICAgIGlmICgoYmcgPSBj bWtleSh0dHljbHJ0YWIsbmNscnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJi YWNrZ3JvdW5kIGNvbG9yIiwiYmx1ZSIseHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgICAgICAg ICByZXR1cm4oYmcpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCh5ID0gY21jZm0o KSkgPCAwKQorICAgICAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgICAgICBzd2l0Y2ggKHgp IHsKKyAgICAgICAgICAgICAgY2FzZSBUVENPTE5PUjoKKyAgICAgICAgICAgICAgICBjb2xvcm5v cm1hbCA9IGZnIHwgYmcgPDwgNDsKKyAgICAgICAgICAgICAgICBmZ2kgPSBmZyAmIDB4MDg7Cisg ICAgICAgICAgICAgICAgYmdpID0gYmcgJiAweDA4OworICAgICAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICAgICAgICBjYXNlIFRUQ09MUkVWOgorICAgICAgICAgICAgICAgIGNvbG9ycmV2ZXJz ZSA9IGZnIHwgYmcgPDwgNDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg Y2FzZSBUVENPTElUQToKKyAgICAgICAgICAgICAgICBjb2xvcml0YWxpYyA9IGZnIHwgYmcgPDwg NDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBUVENPTFVORDoK KyAgICAgICAgICAgICAgICBjb2xvcnVuZGVybGluZSA9IGZnIHwgYmcgPDwgNDsKKyAgICAgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBUVENPTEdSUDoKKyAgICAgICAgICAg ICAgICBjb2xvcmdyYXBoaWMgPSBmZyB8IGJnIDw8IDQ7CisgICAgICAgICAgICAgICAgYnJlYWs7 CisgICAgICAgICAgICAgIGNhc2UgVFRDT0xERUI6CisgICAgICAgICAgICAgICAgY29sb3JkZWJ1 ZyA9IGZnIHwgYmcgPDwgNDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg Y2FzZSBUVENPTFNUQToKKyAgICAgICAgICAgICAgICBjb2xvcnN0YXR1cyA9IGZnIHwgYmcgPDwg NDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBUVENPTEhMUDoK KyAgICAgICAgICAgICAgICBjb2xvcmhlbHAgPSBmZyB8IGJnIDw8IDQ7CisgICAgICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgVFRDT0xCT1I6CisgICAgICAgICAgICAgICAg Y29sb3Jib3JkZXIgPSBmZzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg Y2FzZSBUVENPTFNFTDoKKyAgICAgICAgICAgICAgICBjb2xvcnNlbGVjdCA9IGZnIHwgYmcgPDwg NDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAg ICAgICAgICAgICBwcmludGYoIiVzIC0gaW52YWxpZFxuIixjbWRidWYpOworICAgICAgICAgICAg ICAgIHJldHVybigtOSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg ICAgICAgICAgICBzY3JuaW5pdGlhbGl6ZWRbVlRFUk1dID0gMDsKKyAgICAgICAgICAgIFZzY3Ju SW5pdChWVEVSTSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKwor ICAgICAgY2FzZSBYWVRDVVI6IHsgICAgICAgICAgICAgICAgICAgIC8qIFNFVCBURVJNSU5BTCBD VVJTT1IgKi8KKyAgICAgICAgICBleHRlcm4gaW50IGN1cnNvcmVuYVtdOworICAgICAgICAgIGV4 dGVybiBpbnQgY3Vyc29yb25bXSA7ICAgICAgIC8qIEN1cnNvciBzdGF0ZSBvbi9vZmYgICAgICAg Ki8KKyAgICAgICAgICBpZiAoKHggPSBjbWtleSh0dHljdXJ0YWIsbmN1cnNvcnMsIiIsInVuZGVy bGluZSIseHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgICAg aWYgKCh6ID0gY21rZXkoY3Vyb250YWIsbmN1cm9uLCIiLCJvbiIseHhzdHJpbmcpKSA8IDApCisg ICAgICAgICAgICByZXR1cm4oeik7CisgICAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSBy ZXR1cm4oeSk7CisgICAgICAgICAgdHRfY3Vyc29yID0gdHRfY3Vyc29yX3VzciA9IHg7CisgICAg ICAgICAgaWYgKCB6ID09IDIgKSB7CisgICAgICAgICAgICAgIGN1cnNvcmVuYVtWVEVSTV0gPSB0 dF9jdXJzb3JlbmFfdXNyID0gMTsKKyAgICAgICAgICAgICAgdHRfY3Vyc29yX2JsaW5rID0gMDsK KyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICBjdXJzb3JlbmFbVlRFUk1dID0gdHRf Y3Vyc29yZW5hX3VzciA9IHo7LyogdHVybiBjdXJzb3Igb24vb2ZmICovCisgICAgICAgICAgICAg IHR0X2N1cnNvcl9ibGluayA9IDE7CisgICAgICAgICAgfQorICAgICAgICAgIGN1cnNvcm9uW1ZU RVJNXSA9IEZBTFNFOyAvKiBGb3JjZSBuZXdjdXJzb3IgdG8gcmVzdG9yZSB0aGUgY3Vyc29yICov CisgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKyAgICAgIH0KKyNlbmRpZiAvKiBPUzIg Ki8KKworICAgICAgY2FzZSBYWVRUWVA6ICAgICAgICAgICAgICAgICAgICAgIC8qIFNFVCBURVJN SU5BTCBUWVBFICovCisgICAgICAgIHJldHVybihzZXR0cm10eXAoKSk7CisKKyNpZmRlZiBPUzIK KyAgICAgIGNhc2UgWFlUQVJSOiAgICAgICAgICAgICAgICAgICAgICAvKiBTRVQgVEVSTUlOQUwg QVJST1ctS0VZUyAqLworICAgICAgICBpZiAoKHggPSBjbWtleShha210YWIsMiwiIiwiIix4eHN0 cmluZykpIDwgMCkgcmV0dXJuKHgpOworICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJl dHVybih5KTsKKyAgICAgICAgdHRfYXJyb3cgPSB4OyAgICAgICAgICAgICAgICAgICAvKiBUVEtf Tk9STSAvIFRUS19BUFBMOyBzZWUgY2t1dXNyLmggKi8KKyAgICAgICAgcmV0dXJuKHN1Y2Nlc3Mg PSAxKTsKKworICAgICAgY2FzZSBYWVRLUEQ6ICAgICAgICAgICAgICAgICAgICAgIC8qIFNFVCBU RVJNSU5BTCBLRVlQQUQtTU9ERSAqLworICAgICAgICBpZiAoKHggPSBjbWtleShrcG10YWIsMiwi IiwiIix4eHN0cmluZykpIDwgMCkgcmV0dXJuKHgpOworICAgICAgICBpZiAoKHkgPSBjbWNmbSgp KSA8IDApIHJldHVybih5KTsKKyAgICAgICAgdHRfa2V5cGFkID0geDsgICAgICAgICAgICAgICAg ICAvKiBUVEtfTk9STSAvIFRUS19BUFBMOyBzZWUgY2t1dXNyLmggKi8KKyAgICAgICAgcmV0dXJu KHN1Y2Nlc3MgPSAxKTsKKworICAgICAgY2FzZSBYWVRVTlg6IHsgICAgICAgICAgICAgICAgICAg IC8qIFNFVCBURVJNIFVOSVgtTU9ERSAoREcpICovCisgICAgICAgIGV4dGVybiBpbnQgZGd1bml4 LGRndW5peF91c3I7CisgICAgICAgIHggPSBzZXRvbigmZGd1bml4KTsKKyAgICAgICAgZGd1bml4 X3VzciA9IGRndW5peDsKKyAgICAgICAgcmV0dXJuKHgpOworICAgICAgfQorICAgICAgY2FzZSBY WVRLQk1PRDogeyAgICAgICAgICAgICAgICAgIC8qIFNFVCBURVJNIEtFWUJPQVJEIE1PREUgKi8K KyAgICAgICAgICBleHRlcm4gaW50IHR0X2tiX21vZGU7CisgICAgICAgICAgaWYgKCh4ID0gY21r ZXkoa2Jtb2R0YWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgbmtibW9kdGFiLAorICAgICAg ICAgICAgICAgICAgICAgICAgICJub3JtYWwiLAorICAgICAgICAgICAgICAgICAgICAgICAgICJz cGVjaWFsIGtleWJvYXJkIG1vZGUgZm9yIHRlcm1pbmFsIGVtdWxhdGlvbiIsCisgICAgICAgICAg ICAgICAgICAgICAgICAgeHhzdHJpbmcpCisgICAgICAgICAgICAgICApIDwgMCkKKyAgICAgICAg ICAgIHJldHVybih4KTsKKyAgICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5 KTsKKyAgICAgICAgICB0dF9rYl9tb2RlID0geDsKKyAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9 IDEpOworICAgICAgfQorCisgICAgICBjYXNlIFhZVFdSUDogICAgICAgICAgICAgICAgICAgICAg LyogU0VUIFRFUk1JTkFMIFdSQVAgKi8KKyAgICAgICAgcmV0dXJuKHNldG9uKCZ0dF93cmFwKSk7 CisKKyAgICAgIGNhc2UgWFlTQ1JTOgorICAgICAgICBpZiAoKHkgPSBjbW51bSgiQ09OTkVDVCBz Y3JvbGxiYWNrIGJ1ZmZlciBzaXplLCBsaW5lcyIsIjIwMDAiLDEwLCZ4LAorICAgICAgICAgICAg ICAgICAgICAgICB4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAg IC8qIFRoZSBtYXggbnVtYmVyIG9mIGxpbmVzIGlzIHRoZSBSQU0gICovCisgICAgICAgIC8qIHdl IGNhbiBhY3R1YWxseSBkZWRpY2F0ZSB0byBhICAgICAgICovCisgICAgICAgIC8qIHNjcm9sbGJh Y2sgYnVmZmVyIGdpdmVuIHRoZSBtYXhpbXVtICovCisgICAgICAgIC8qIHByb2Nlc3MgbWVtb3J5 IHNwYWNlIG9mIDUxMk1CICAgICAgICovCisgICAgICAgIGlmICh4IDwgMjU2IHx8IHggPiAyMDAw MDAwTCkgeworICAgICAgICAgICAgcHJpbnRmKCJcbj9UaGUgc2l6ZSBtdXN0IGJlIGJldHdlZW4g MjU2IGFuZCAyLDAwMCwwMDAuXG4iKTsKKyAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7 CisgICAgICAgIH0KKyAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeSk7Cisg ICAgICAgIHR0X3NjcnNpemVbVlRFUk1dID0geDsKKyAgICAgICAgVnNjcm5Jbml0KFZURVJNKTsK KyAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKyNlbmRpZiAvKiBPUzIgKi8KKworI2lmbmRl ZiBOT0NTRVRTCisgICAgICBjYXNlIFhZVENTOiB7ICAgICAgICAgICAgICAgICAgICAgLyogU0VU IFRFUk1JTkFMIENIQVJBQ1RFUi1TRVQgKi8KKyAgICAgICAgaW50IGVvbDsKKyAgICAgICAgICAv KiBzZXQgdGVybWluYWwgY2hhcmFjdGVyLXNldCA8cmVtb3RlPiA8bG9jYWw+ICovCisgICAgICAg IGlmICgoeCA9IGNta2V5KAorI2lmZGVmIENLT1VOSQorICAgICAgICAgICAgICAgICAgICAgICB0 eHJ0YWIsbnR4cnRhYiwKKyNlbHNlICAvKiBDS09VTkkgKi8KKyAgICAgICAgICAgICAgICAgICAg ICAgdHRjc3RhYixudGVybWMsCisjZW5kaWYgLyogQ0tPVU5JICovCisgICAgICAgICAgICAgICAg ICAgICAgICJyZW1vdGUgdGVybWluYWwgY2hhcmFjdGVyLXNldCIsIiIseHhzdHJpbmcpKSA8IDAp CisgICAgICAgICAgcmV0dXJuKHgpOworCisjaWZkZWYgVU5JQ09ERQorICAgICAgICBpZiAoeCA9 PSBUWF9UUkFOU1AKKyNpZmRlZiBDS09VTkkKKyAgICAgICAgICAgIHx8IHggPT0gVFhfVVRGOAor I2VuZGlmIC8qIENLT1VOSSAqLworICAgICAgICAgICApIHsKKyAgICAgICAgICAgICAgaWYgKCh5 ID0gY21jZm0oKSkgPCAwKSAgICAvKiBDb25maXJtIHRoZSBjb21tYW5kICovCisgICAgICAgICAg ICAgICAgICByZXR1cm4oeSk7CisjaWZkZWYgT1MyCisgICAgICAgICAgICBpZiAoIGlzdW5pY29k ZSgpICYmIHggPT0gVFhfVFJBTlNQICkgeworICAgICAgICAgICAgICAgIC8qIElmIHdlIGFyZSBp biB1bmljb2RlIGRpc3BsYXkgbW9kZSB0aGVuIHRyYW5zcGFyZW50CisgICAgICAgICAgICAgICAg ICogb25seSBhZmZlY3RzIHRoZSBvdXRwdXQgZGlyZWN0aW9uLiAgV2UgbmVlZCB0byBrbm93Cisg ICAgICAgICAgICAgICAgICogdGhlIGFjdHVhbCByZW1vdGUgY2hhcmFjdGVyIHNldCBpbiBvcmRl ciB0byBwZXJmb3JtCisgICAgICAgICAgICAgICAgICogdGhlIHRjc3IgLT4gdWNzMiB0cmFuc2xh dGlvbiBmb3IgZGlzcGxheS4KKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICB4 ID0geSA9IHRjc2w7CisgICAgICAgICAgICB9IGVsc2UKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAg ICAgICAgICAgICB5ID0geDsKKyAgICAgICAgfQorI2Vsc2UgLyogVU5JQ09ERSAqLworICAgICAg ICBpZiAoeCA9PSBGQ19UUkFOU1ApIHsKKyAgICAgICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwg MCkgICAgICAvKiBDb25maXJtIHRoZSBjb21tYW5kICovCisgICAgICAgICAgICAgICAgcmV0dXJu KHkpOworICAgICAgICAgICAgeSA9IHg7CisgICAgICAgIH0KKyNlbmRpZiAvKiBVTklDT0RFICov CisKKyAgICAgICAgLyogTm90IHRyYW5zcGFyZW50IG9yIFVURjgsIHNvIGdldCBsb2NhbCBzZXQg dG8gdHJhbnNsYXRlIGl0IGludG8gKi8KKyAgICAgICAgcyA9ICIiOworI2lmZGVmIE9TMgorICAg ICAgICB5ID0gb3MyZ2V0Y3AoKTsgICAgICAgICAgICAgICAgIC8qIERlZmF1bHQgaXMgY3VycmVu dCBjb2RlIHBhZ2UgKi8KKyAgICAgICAgc3dpdGNoICh5KSB7CisgICAgICAgICAgY2FzZSA0Mzc6 IHMgPSAiY3A0MzciOyBicmVhazsKKyAgICAgICAgICBjYXNlIDg1MDogcyA9ICJjcDg1MCI7IGJy ZWFrOworICAgICAgICAgIGNhc2UgODUyOiBzID0gImNwODUyIjsgYnJlYWs7CisgICAgICAgICAg Y2FzZSA4NTc6IHMgPSAiY3A4NTciOyBicmVhazsKKyAgICAgICAgICBjYXNlIDg1ODogcyA9ICJj cDg1OCI7IGJyZWFrOworICAgICAgICAgIGNhc2UgODYyOiBzID0gImNwODYyIjsgYnJlYWs7Cisg ICAgICAgICAgY2FzZSA4NjY6IHMgPSAiY3A4NjYiOyBicmVhazsKKyAgICAgICAgICBjYXNlIDg2 OTogcyA9ICJjcDg2OSI7IGJyZWFrOworICAgICAgICAgIGNhc2UgMTI1MDogcyA9ICJjcDEyNTAi OyBicmVhazsKKyAgICAgICAgICBjYXNlIDEyNTE6IHMgPSAiY3AxMjUxIjsgYnJlYWs7CisgICAg ICAgICAgY2FzZSAxMjUyOiBzID0gImNwMTI1MiI7IGJyZWFrOworICAgICAgICAgIGNhc2UgMTI1 MzogcyA9ICJjcDEyNTMiOyBicmVhazsKKyAgICAgICAgICBjYXNlIDEyNTQ6IHMgPSAiY3AxMjU0 IjsgYnJlYWs7CisgICAgICAgICAgY2FzZSAxMjU1OiBzID0gImNwMTI1NSI7IGJyZWFrOworICAg ICAgICAgIGNhc2UgMTI1NjogcyA9ICJjcDEyNTYiOyBicmVhazsKKyAgICAgICAgICBjYXNlIDEy NTc6IHMgPSAiY3AxMjU3IjsgYnJlYWs7CisgICAgICAgICAgY2FzZSAxMjU4OiBzID0gImNwMTI1 OCI7IGJyZWFrOworICAgICAgICB9CisjaWZkZWYgUENGT05UUworLyoKKyAgIElmIHRoZSB1c2Vy IGhhcyBsb2FkZWQgYSBmb250IHdpdGggU0VUIFRFUk1JTkFMIEZPTlQgdGhlbiB3ZSB3YW50Cisg ICB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgY29kZSBwYWdlIHRvIHRoZSBmb250IHRoYXQgd2FzIGxv YWRlZC4KKyovCisgICAgICAgIGlmICh0dF9mb250ICE9IFRURl9ST00pIHsKKyAgICAgICAgICAg IGZvciAoeSA9IDA7IHkgPCBudGVybWZvbnQ7IHkrKyApIHsKKyAgICAgICAgICAgICAgICBpZiAo dGVybV9mb250W3ldLmt3dmFsID09IHR0X2ZvbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgcyA9 IHRlcm1fZm9udFt5XS5rd2Q7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorI2VuZGlmIC8qIFBDRk9OVFMgKi8K KyNlbHNlICAvKiBOb3QgSzk1Li4uICovCisgICAgICAgIHMgPSBmY3NpbmZvW2ZjaGFyc2V0XS5r ZXl3b3JkOworI2VuZGlmIC8qIE9TMiAqLworCisgICAgICAgIGlmICgoeSA9IGNta2V5KAorI2lm ZGVmIENLT1VOSQorICAgICAgICAgICAgICAgICAgICAgICB0eHJ0YWIsbnR4cnRhYiwKKyNlbHNl IC8qIENLT1VOSSAqLworICAgICAgICAgICAgICAgICAgICAgICB0dGNzdGFiLG50ZXJtYywKKyNl bmRpZiAvKiBDS09VTkkgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgImxvY2FsIGNoYXJhY3Rl ci1zZXQiLHMseHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgcmV0dXJuKHkpOworCisjaWZkZWYg VU5JQ09ERQorICAgICAgICBpZiAoeSA9PSBUWF9VVEY4KSB7CisgICAgICAgICAgICBwcmludGYo Ij9VVEY4IG1heSBub3QgYmUgdXNlZCBhcyBhIGxvY2FsIGNoYXJhY3RlciBzZXQuXHJcbiIpOwor ICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgfQorI2VuZGlmIC8qIFVOSUNPREUgKi8K KyNpZmRlZiBPUzIKKyAgICAgICAgaWYgKCh6ID0gY21rZXkoZ3JhcGhzZXR0YWIsbmdyYXBoc2V0 LAorICAgICAgICAgICAgICAgICAgICAgICAiREVDIFZUIGludGVybWVkaWF0ZSBncmFwaGljIHNl dCIsImFsbCIseHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgICByZXR1cm4oeik7CisjZW5kaWYg LyogT1MyICovCisgICAgICAgIGlmICgoZW9sID0gY21jZm0oKSkgPCAwKQorICAgICAgICAgICAg cmV0dXJuKGVvbCk7IC8qIENvbmZpcm0gdGhlIGNvbW1hbmQgKi8KKworICAgICAgICAvKiBFbmQg b2YgY29tbWFuZCBwYXJzaW5nIC0gYWN0aW9ucyBiZWdpbiAqLworICAgICAgICBzZXRsY2xjaGFy c2V0KHkpOworICAgICAgICBzZXRyZW1jaGFyc2V0KHgseik7CisgICAgICAgIHJldHVybihzdWNj ZXNzID0gMSk7CisgICAgICB9CisjZW5kaWYgLyogTk9DU0VUUyAqLworCisjaWZuZGVmIE5PQ1NF VFMKKyAgICAgIGNhc2UgWFlUTENTOiAgICAgICAgICAgICAgICAgICAgICAvKiBTRVQgVEVSTUlO QUwgTE9DQUwtQ0hBUkFDVEVSLVNFVCAqLworICAgICAgICAvKiBzZXQgdGVybWluYWwgY2hhcmFj dGVyLXNldCA8bG9jYWw+ICovCisgICAgICAgIHMgPSBnZXRkY3NldCgpOyAgICAgICAgICAgICAg ICAgLyogR2V0IGRpc3BsYXkgY2hhcmFjdGVyLXNldCBuYW1lICovCisgICAgICAgIGlmICgoeSA9 IGNta2V5KAorI2lmZGVmIENLT1VOSQorICAgICAgICAgICAgICAgICAgICAgICB0eHJ0YWIsbnR4 cnRhYiwKKyNlbHNlIC8qIENLT1VOSSAqLworICAgICAgICAgICAgICAgICAgICAgICBmY3N0YWIs bmZpbGMsCisjZW5kaWYgLyogQ0tPVU5JICovCisgICAgICAgICAgICAgICAgICAgICAgICJsb2Nh bCBjaGFyYWN0ZXItc2V0IixzLHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgIHJldHVybih5KTsK KworI2lmZGVmIFVOSUNPREUKKyAgICAgICAgICBpZiAoeSA9PSBUWF9VVEY4KSB7CisgICAgICAg ICAgICAgIHByaW50ZigiP1VURjggbWF5IG5vdCBiZSB1c2VkIGFzIGEgbG9jYWwgY2hhcmFjdGVy IHNldC5cclxuIik7CisgICAgICAgICAgICAgIHJldHVybigtOSk7CisgICAgICAgICAgfQorI2Vu ZGlmIC8qIFVOSUNPREUgKi8KKyAgICAgICAgICBpZiAoKHogPSBjbWNmbSgpKSA8IDApIHJldHVy bih6KTsgLyogQ29uZmlybSB0aGUgY29tbWFuZCAqLworCisgICAgICAgICAgLyogRW5kIG9mIGNv bW1hbmQgcGFyc2luZyAtIGFjdGlvbiBiZWdpbnMgKi8KKworICAgICAgICBzZXRsY2xjaGFyc2V0 KHkpOworICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworI2VuZGlmIC8qIE5PQ1NFVFMgKi8K KworI2lmbmRlZiBOT0NTRVRTCisjaWZkZWYgVU5JQ09ERQorICAgICAgY2FzZSBYWVRVTkk6ICAg ICAgICAgICAgICAgICAgICAgIC8qIFNFVCBURVJNSU5BTCBVTklDT0RFICovCisgICAgICAgIHJl dHVybihzZXRvbigmdHRfdW5pY29kZSkpOworI2VuZGlmIC8qIFVOSUNPREUgKi8KKworICAgICAg Y2FzZSBYWVRSQ1M6ICAgICAgICAgICAgICAgICAgICAgIC8qIFNFVCBURVJNSU5BTCBSRU1PVEUt Q0hBUkFDVEVSLVNFVCAqLworICAgICAgICAvKiBzZXQgdGVybWluYWwgY2hhcmFjdGVyLXNldCA8 cmVtb3RlPiA8R3JhcGhpYy1zZXQ+ICovCisgICAgICAgIGlmICgoeCA9IGNta2V5KAorI2lmZGVm IENLT1VOSQorICAgICAgICAgICAgICAgIHR4cnRhYiwgbnR4cnRhYiwKKyNlbHNlIC8qIENLT1VO SSAqLworICAgICAgICAgICAgICAgIHR0Y3N0YWIsbnRlcm1jLAorI2VuZGlmIC8qIENLT1VOSSAq LworICAgICAgICAgICAgICAgICAgICAgICAicmVtb3RlIHRlcm1pbmFsIGNoYXJhY3Rlci1zZXQi LCIiLHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgIHJldHVybih4KTsKKworI2lmZGVmIFVOSUNP REUKKyAgICAgICAgaWYgKHggPT0gVFhfVFJBTlNQCisjaWZkZWYgQ0tPVU5JCisgICAgICAgICAg ICB8fCB4ID09IFRYX1VURjgKKyNlbmRpZiAvKiBDS09VTkkgKi8KKyAgICAgICAgICAgKSB7Cisg ICAgICAgICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgICAgLyogQ29uZmlybSB0aGUgY29t bWFuZCAqLworICAgICAgICAgICAgICAgICAgcmV0dXJuKHkpOworI2lmZGVmIE9TMgorICAgICAg ICAgICAgaWYgKCBpc3VuaWNvZGUoKSAmJiB4ID09IFRYX1RSQU5TUCApIHsKKyAgICAgICAgICAg ICAgICAvKiBJZiB3ZSBhcmUgaW4gdW5pY29kZSBkaXNwbGF5IG1vZGUgdGhlbiB0cmFuc3BhcmVu dAorICAgICAgICAgICAgICAgICAqIG9ubHkgYWZmZWN0cyB0aGUgb3V0cHV0IGRpcmVjdGlvbi4g IFdlIG5lZWQgdG8ga25vdworICAgICAgICAgICAgICAgICAqIHRoZSBhY3R1YWwgcmVtb3RlIGNo YXJhY3RlciBzZXQgaW4gb3JkZXIgdG8gcGVyZm9ybQorICAgICAgICAgICAgICAgICAqIHRoZSB0 Y3NyIC0+IHVjczIgdHJhbnNsYXRpb24gZm9yIGRpc3BsYXkuCisgICAgICAgICAgICAgICAgICov CisgICAgICAgICAgICAgICAgeCA9IHRjc2w7CisgICAgICAgICAgICB9CisjZW5kaWYgLyogT1My ICovCisgICAgICAgIH0KKyNlbHNlIC8qIFVOSUNPREUgKi8KKyAgICAgICAgaWYgKHggPT0gRkNf VFJBTlNQKSB7CisgICAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSAgICAgICAgLyogQ29u ZmlybSB0aGUgY29tbWFuZCAqLworICAgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICB9Cisj ZW5kaWYgLyogVU5JQ09ERSAqLworICAgICAgICBlbHNlIHsKKyNpZmRlZiBPUzIKKyAgICAgICAg ICBpZiAoKHogPSBjbWtleShncmFwaHNldHRhYixuZ3JhcGhzZXQsCisgICAgICAgICAgICAgICAg ICAgICAgIkRFQyBWVCBpbnRlcm1lZGlhdGUgZ3JhcGhpYyBzZXQiLCJhbGwiLHh4c3RyaW5nKSkg PCAwKQorICAgICAgICAgICAgcmV0dXJuKHopOworI2VuZGlmIC8qIE9TMiAqLworICAgICAgICAg IGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgICAgICAgIC8qIENvbmZpcm0gdGhlIGNvbW1hbmQgKi8K KyAgICAgICAgICAgIHJldHVybih5KTsKKyAgICAgICAgfQorICAgICAgICAvKiBDb21tYW5kIHBh cnNpbmcgZW5kcyBoZXJlICovCisKKyAgICAgICAgc2V0cmVtY2hhcnNldCh4LHopOworICAgICAg ICByZXR1cm4oc3VjY2VzcyA9IDEpOworI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKworICAgICAgY2Fz ZSBYWVRFQzogICAgICAgICAgICAgICAgICAgICAgIC8qIFNFVCBURVJNSU5BTCBFQ0hPICovCisg ICAgICAgIGlmICgoeCA9IGNta2V5KHJsdGFiLG5ybHQsIndoaWNoIHNpZGUgZWNob3MgZHVyaW5n IENPTk5FQ1QiLAorICAgICAgICAgICAgICAgICAgICAgICAicmVtb3RlIiwgeHhzdHJpbmcpKSA8 IDApIHJldHVybih4KTsKKyAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeSk7 CisjaWZkZWYgTkVUQ09OTgorICAgICAgICBvbGRwbGV4ID0geDsKKyNlbmRpZiAvKiBORVRDT05O ICovCisgICAgICAgIGR1cGxleCA9IHg7CisgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisK KyAgICAgIGNhc2UgWFlURVNDOiAgICAgICAgICAgICAgICAgICAgICAvKiBTRVQgVEVSTSBFU0Mg Ki8KKyAgICAgICAgaWYgKCh4ID0gY21rZXkobmFibHRhYixubmFibHRhYiwiIiwiZW5hYmxlZCIs eHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICBpZiAoKHkgPSBj bWNmbSgpKSA8IDApIHJldHVybih5KTsKKyAgICAgICAgdHRfZXNjYXBlID0geDsKKyAgICAgICAg cmV0dXJuKDEpOworCisgICAgICBjYXNlIFhZVENSRDogICAgICAgICAgICAgICAgICAgICAgLyog U0VUIFRFUk1JTkFMIENSLURJU1BMQVkgKi8KKyAgICAgICAgaWYgKCh4ID0gY21rZXkoY3JkdGFi LDIsIiIsICJub3JtYWwiLCB4eHN0cmluZykpIDwgMCkgcmV0dXJuKHgpOworICAgICAgICBpZiAo KHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsKKyAgICAgICAgdHRfY3JkID0geDsKKyAgICAg ICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKworICAgICAgY2FzZSBYWVRMRkQ6ICAgICAgICAgICAg ICAgICAgICAgIC8qIFNFVCBURVJNSU5BTCBMRi1ESVNQTEFZICovCisgICAgICAgIGlmICgoeCA9 IGNta2V5KGNyZHRhYiwyLCIiLCAibm9ybWFsIiwgeHhzdHJpbmcpKSA8IDApIHJldHVybih4KTsK KyAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeSk7CisgICAgICAgIHR0X2xm ZCA9IHg7CisgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisKKyNpZmRlZiBPUzIKKyAgICAg IGNhc2UgWFlUQU5TOiB7ICAgICAgICAgICAgICAgICAgICAvKiBTRVQgVEVSTUlOQUwgQU5TV0VS QkFDSyAqLworLyoKKyAgTk9URTogV2UgbGV0IHRoZW0gZW5hYmxlIGFuZCBkaXNhYmxlIHRoZSBh bnN3ZXJiYWNrIHNlcXVlbmNlLCBidXQgd2UKKyAgZG8gTk9UIGxldCB0aGVtIGNoYW5nZSBpdCwg YW5kIHdlIGRlZmluaXRlbHkgZG8gbm90IGxldCB0aGUgaG9zdCBzZXQgaXQuCisgIFRoaXMgaXMg YSBzZWN1cml0eSBmZWF0dXJlLgorCisgIEFzIG9mIDEuMS44IHdlIGFsbG93IHRoZSBTRVQgVEVS TSBBTlNXRVJCQUNLIE1FU1NBR0UgPHN0cmluZz4gdG8gYmUKKyAgdXNlZCBqdXN0IGFzIE1TLURP UyBLZXJtaXQgZG9lcy4gIEMwIGFuZCBDMSBjb250cm9scyBhcyB3ZWxsIGFzIERFTAorICBhcmUg bm90IGFsbG93ZWQgdG8gYmUgdXNlZCBhcyBjaGFyYWN0ZXJzLiAgVGhleSBhcmUgdHJhbnNsYXRl ZCB0bworICB1bmRlcnNjb3JlLiAgVGhpcyBtYXkgbm90IGJlIHNldCBieSBBUEMuCisqLworICAg ICAgICAgIGlmICgoeCA9IGNta2V5KGFuYmt0YWIsbmFuc2JrLCIiLCAib2ZmIiwgeHhzdHJpbmcp KSA8IDApCisgICAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgICAgaWYgKHggPCAyKSB7Cisg ICAgICAgICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1 cm4oeSk7CisgICAgICAgICAgICAgIHR0X2Fuc3dlciA9IHg7CisgICAgICAgICAgICAgIHJldHVy bihzdWNjZXNzID0gMSk7CisgICAgICAgICAgfSBlbHNlIGlmICggeCA9PSAyIHx8IHggPT0gMykg eworICAgICAgICAgICAgICBpbnQgbGVuID0gMDsKKyAgICAgICAgICAgICAgZXh0ZXJuIGludCBz YWZlYW5zd2VyYms7CisgICAgICAgICAgICAgIGV4dGVybiBjaGFyIHVzZXJhbnN3ZXJia1tdOwor ICAgICAgICAgICAgICBpZiAoKHkgPSBjbXR4dCgiQW5zd2VyYmFjayBleHRlbnNpb24iLCIiLCZz LHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybih5KTsKKyAgICAgICAgICAg ICAgaWYgKGFwY2FjdGl2ZSA9PSBBUENfTE9DQUwgfHwKKyAgICAgICAgICAgICAgICAgIChhcGNh Y3RpdmUgPT0gQVBDX1JFTU9URSAmJiAhKGFwY3N0YXR1cyAmIEFQQ19VTkNIKSkpCisgICAgICAg ICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKyAgICAgICAgICAgICAgbGVuID0gc3RybGVu KHMpOworICAgICAgICAgICAgICBpZiAoeCA9PSAyKSB7CisgICAgICAgICAgICAgICAgICAvKiBT YWZlIEFuc3dlcmJhY2sncyBkb24ndCBoYXZlIEMwL0MxIGNoYXJzICovCisgICAgICAgICAgICAg ICAgICBmb3IgKHogPSAwOyB6IDwgbGVuOyB6KyspIHsKKyAgICAgICAgICAgICAgICAgICAgICBp ZiAoKHNbel0gJiAweDdGKSA8PSBTUCB8fCAoc1t6XSAmIDB4N0YpID09IERFTCkKKyAgICAgICAg ICAgICAgICAgICAgICAgIHVzZXJhbnN3ZXJia1t6XSA9ICdfJzsKKyAgICAgICAgICAgICAgICAg ICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICB1c2VyYW5zd2VyYmtbel0gPSBzW3pd OworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgdXNlcmFuc3dlcmJrW3pd ID0gJ1wwJzsKKyAgICAgICAgICAgICAgICAgIHNhZmVhbnN3ZXJiayA9IDEgOyAgICAvKiBUUlVF ICovCisgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICBja3N0cm5jcHko dXNlcmFuc3dlcmJrLHMsNjApOyAvKiAoc2VlIGNrb2Nvbi5jKSAqLworICAgICAgICAgICAgICAg ICAgc2FmZWFuc3dlcmJrID0gMDsgICAgIC8qIEZBTFNFICovCisgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgdXBkYW5zd2VyYmsoKTsKKyAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3Mg PSAxKTsKKyAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7 CisgICAgICB9CisjZW5kaWYgLyogT1MyICovCisKKyNpZmRlZiBDS19BUEMKKyAgICAgIGNhc2Ug WFlUQVBDOgorICAgICAgICBpZiAoKHkgPSBjbWtleShhcGN0YWIsbmFwY3RhYiwKKyAgICAgICAg ICAgICAgICAgICAgICAgImFwcGxpY2F0aW9uIHByb2dyYW0gY29tbWFuZCBleGVjdXRpb24iLCIi LAorICAgICAgICAgICAgICAgICAgICAgICB4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICByZXR1 cm4oeSk7CisgICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkKKyAgICAgICAgICByZXR1cm4o eCk7CisgICAgICAgIGlmIChhcGNhY3RpdmUgPT0gQVBDX0xPQ0FMIHx8CisgICAgICAgICAgICAo YXBjYWN0aXZlID09IEFQQ19SRU1PVEUgJiYgIShhcGNzdGF0dXMgJiBBUENfVU5DSCkpKQorICAg ICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7CisgICAgICAgIGFwY3N0YXR1cyA9IHk7CisgICAg ICAgIHJldHVybihzdWNjZXNzID0gMSk7CisKKyNpZmRlZiBDS19BVVRPREwKKyAgICAgIGNhc2Ug WFlUQVVUT0RMOiAgICAgICAgICAgICAgICAgICAvKiBBVVRPRE9XTkxPQUQgKi8KKyAgICAgICAg aWYgKCh5ID0gY21rZXkoYWRsdGFiLG5hZGx0YWIsIkF1dG8tZG93bmxvYWQgb3B0aW9ucyIsIiIs CisgICAgICAgICAgICAgICAgICAgICAgIHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgIHJldHVy bih5KTsKKyAgICAgICAgc3dpdGNoICh5KSB7CisgICAgICAgICAgY2FzZSBUQURfT046CisgICAg ICAgICAgY2FzZSBUQURfT0ZGOgorICAgICAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKQor ICAgICAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgICAgICBzZXRhdXRvZGwoeSwwKTsKKyAg ICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgVEFEX0FTSzoKKyAgICAgICAgICAgIGlm ICgoeCA9IGNtY2ZtKCkpIDwgMCkKKyAgICAgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICAg ICAgc2V0YXV0b2RsKFRBRF9PTiwxKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNh c2UgVEFEX0VSUjoKKyAgICAgICAgICAgIGlmICgoeSA9IGNta2V5KGFkbGVycnRhYixuYWRsZXJy dGFiLCIiLCIiLCB4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICAgICAgcmV0dXJuKHkpOworICAg ICAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKQorICAgICAgICAgICAgICByZXR1cm4oeCk7 CisgICAgICAgICAgICBhZGxfZXJyID0geTsKKyAgICAgICAgICAgIGJyZWFrOworI2lmZGVmIE9T MgorICAgICAgICAgIGNhc2UgVEFEX0s6CisgICAgICAgICAgICBpZiAoKHkgPSBjbWtleShhZGx4 dGFiLG5hZGx4dGFiLCIiLCIiLCB4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICAgICAgcmV0dXJu KHkpOworICAgICAgICAgICAgc3dpdGNoICh5KSB7CisgICAgICAgICAgICAgIGNhc2UgVEFEX1hf QzA6CisgICAgICAgICAgICAgICAgaWYgKCh5ID0gY21rZXkoYWRsYzB0YWIsbmFkbGMwdGFiLCIi LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwcm9jZXNzZWQtYnktZW11bGF0b3Ii LHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICAg ICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkKKyAgICAgICAgICAgICAgICAgIHJldHVybih4 KTsKKyAgICAgICAgICAgICAgICBhZGxfa2MwID0geTsKKyAgICAgICAgICAgICAgICBicmVhazsK KyAgICAgICAgICAgICAgY2FzZSBUQURfWF9ERVRFQ1Q6CisgICAgICAgICAgICAgICAgaWYgKCh5 ID0gY21rZXkoYWRsZHRhYixuYWRsZHRhYiwiIiwicGFja2V0Iix4eHN0cmluZykpIDwgMCkKKyAg ICAgICAgICAgICAgICAgIHJldHVybih5KTsKKyAgICAgICAgICAgICAgICBpZiAoKHggPSBjbWNm bSgpKSA8IDApCisgICAgICAgICAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgICAgICAgICAg YWRsX2ttb2RlID0geTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2Fz ZSBUQURfWF9TVFI6CisgICAgICAgICAgICAgICAgaWYgKCh5ID0gY210eHQoIktlcm1pdCBzdGFy dCBzdHJpbmciLCJLRVJNSVQgUkVBRFkgVE8gU0VORC4uLiIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJnMseHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgICAgICAgICByZXR1cm4o eSk7CisgICAgICAgICAgICAgICAgZnJlZShhZGxfa3N0cik7CisgICAgICAgICAgICAgICAgYWRs X2tzdHIgPSBzdHJkdXAocyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9 CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgVEFEX1o6CisgICAgICAgICAg ICBpZiAoKHkgPSBjbWtleShhZGx4dGFiLG5hZGx4dGFiLCIiLCIiLHh4c3RyaW5nKSkgPCAwKQor ICAgICAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgICAgICBzd2l0Y2ggKHkpIHsKKyAgICAg ICAgICAgICAgY2FzZSBUQURfWF9DMDoKKyAgICAgICAgICAgICAgICBpZiAoKHkgPSBjbWtleShh ZGxjMHRhYixuYWRsYzB0YWIsIiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBy b2Nlc3NlZC1ieS1lbXVsYXRvciIseHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgICAgICAgICBy ZXR1cm4oeSk7CisgICAgICAgICAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKQorICAgICAg ICAgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICAgICAgICAgIGFkbF96YzAgPSB5OworICAg ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIFRBRF9YX0RFVEVDVDoKKyAg ICAgICAgICAgICAgICBpZiAoKHkgPSBjbWtleShhZGxkdGFiLG5hZGxkdGFiLCIiLCJwYWNrZXQi LHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICAg ICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkKKyAgICAgICAgICAgICAgICAgIHJldHVybih4 KTsKKyAgICAgICAgICAgICAgICBhZGxfem1vZGUgPSB5OworICAgICAgICAgICAgICAgIGJyZWFr OworICAgICAgICAgICAgICBjYXNlIFRBRF9YX1NUUjoKKyAgICAgICAgICAgICAgICBpZiAoKHkg PSBjbXR4dCgiIiwicnpcXHsxM30iLCZzLHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgICAgICAg ICAgcmV0dXJuKHkpOworICAgICAgICAgICAgICAgIGZyZWUoYWRsX3pzdHIpOworICAgICAgICAg ICAgICAgIGFkbF96c3RyID0gc3RyZHVwKHMpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg ICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogT1MyICovCisgICAgICAg IH0KKyAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKworI2VuZGlmIC8qIENLX0FVVE9ETCAq LworI2VuZGlmIC8qIENLX0FQQyAqLworCisjaWZkZWYgT1MyCisgICAgICBjYXNlIFhZVEJFTDoK KyAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSBzZXRiZWxsKCkpOworCisgICAgICBjYXNlIFhZVE1C RUw6ICAgICAgICAgICAgICAgICAgICAgLyogTUFSR0lOLUJFTEwgKi8KKyAgICAgICAgaWYgKCh5 ID0gY21rZXkob25vZmYsMiwiIiwib24iLHh4c3RyaW5nKSkgPCAwKSByZXR1cm4oeSk7CisgICAg ICAgIGlmICh5KSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogT04gKi8KKyAgICAgICAgICAg IGlmICgoeiA9IGNtbnVtKCJDb2x1bW4gYXQgd2hpY2ggdG8gc2V0IG1hcmdpbiBiZWxsIiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICI3MiIsMTAsJngseHhzdHJpbmcpKSA8IDApCisgICAg ICAgICAgICAgIHJldHVybih6KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoKHogPSBjbWNmbSgp KSA8IDApIHJldHVybih6KTsKKyAgICAgICAgbWFyZ2luYmVsbCA9IHk7CisgICAgICAgIG1hcmdp bmJlbGxjb2wgPSB4OworICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworI2VuZGlmIC8qIE9T MiAqLworCisjaWZkZWYgQ0tUSURMRQorICAgICAgY2FzZSBYWVRJRExFOiAgICAgICAgICAgICAg ICAgICAgIC8qIElETEUtU0VORCAqLworICAgICAgY2FzZSBYWVRJVE1POiAgICAgICAgICAgICAg ICAgICAgIC8qIElETEUtVElNRU9VVCAqLworICAgICAgICBpZiAoKHogPSBjbW51bSgic2Vjb25k cyBvZiBpZGxlIHRpbWUgdG8gd2FpdCwgb3IgMCB0byBkaXNhYmxlIiwKKyAgICAgICAgICAgICAg ICAgICAgICAgIjAiLDEwLCZ4LHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgIHJldHVybih6KTsK KyAgICAgICAgaWYgKHkgPT0gWFlUSURMRSkgeworICAgICAgICAgICAgaWYgKCh5ID0gY210eHQo InN0cmluZyB0byBzZW5kLCBtYXkgY29udGFpbiBrdmVyYnMgYW5kIHZhcmlhYmxlcyIsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAiXFx2KG5ld2xpbmUpIiwmcyx4eHN0cmluZykpIDwgMCkK KyAgICAgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICAgICAgdHRfaWRsZXNuZF90bW8gPSB4 OyAgICAgICAgIC8qIChvbGQpICovCisgICAgICAgICAgICB0dF9pZGxlbGltaXQgPSB4OyAgICAg ICAgICAgLyogKG5ldykgKi8KKyAgICAgICAgICAgIG1ha2VzdHIoJnR0X2lkbGVzdHIsYnJzdHJp cChzKSk7IC8qIChuZXcpICovCisgICAgICAgICAgICB0dF9pZGxlc25kX3N0ciA9IHR0X2lkbGVz dHI7IC8qIChvbGQpICovCisgICAgICAgICAgICB0dF9pZGxlYWN0ID0gSURMRV9PVVQ7ICAgICAg LyogKG5ldykgKi8KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICgoeSA9IGNtY2Zt KCkpIDwgMCkKKyAgICAgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICAgICAgdHRfaWRsZWxp bWl0ID0geDsKKyAgICAgICAgfQorI2lmZGVmIE9TMgorICAgICAgICBwdXRlcnJvcihWVEVSTSk7 CisjZW5kaWYgLyogT1MyICovCisgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisKKyAgICAg IGNhc2UgWFlUSUFDVDogeyAgICAgICAgICAgICAgICAgICAvKiBTRVQgVEVSTSBJRExFLUFDVElP TiAqLworICAgICAgICAgIGlmICgoeSA9IGNta2V5KGlkbGFjdHMsbmlkbGFjdHMsIiIsIiIseHhz dHJpbmcpKSA8IDApCisgICAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgICAgaWYgKHkgPT0g SURMRV9PVVQpIHsKKyAgICAgICAgICAgICAgaWYgKCh4ID0gY210eHQoInN0cmluZyB0byBzZW5k LCBtYXkgY29udGFpbiBrdmVyYnMgYW5kIHZhcmlhYmxlcyIKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLCAiIiwmcyx4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4o eCk7CisgICAgICAgICAgICAgIG1ha2VzdHIoJnR0X2lkbGVzdHIsYnJzdHJpcChzKSk7IC8qIChu ZXcpICovCisgICAgICAgICAgICAgIHR0X2lkbGVzbmRfc3RyID0gdHRfaWRsZXN0cjsgLyogKG9s ZCkgKi8KKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICBpZiAoKHggPSBjbWNmbSgp KSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICAgIH0KKyAgICAgICAg ICB0dF9pZGxlYWN0ID0geTsKKyAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworICAgICAg fQorI2VuZGlmIC8qIENLVElETEUgKi8KKworICAgICAgY2FzZSBYWVRERUI6ICAgICAgICAgICAg ICAgICAgICAgIC8qIFRFUk1JTkFMIERFQlVHICovCisgICAgICAgIHkgPSBzZXRvbigmeCk7ICAg ICAgICAgICAgICAgICAgLyogR28gcGFyc2UgT04gb3IgT0ZGICovCisgICAgICAgIGlmICh5ID4g MCkgICAgICAgICAgICAgICAgICAgICAgLyogQ29tbWFuZCBzdWNjZWVkZWQ/ICovCisgICAgICAg ICAgc2V0ZGVic2VzKHgpOworICAgICAgICByZXR1cm4oeSk7CisKKyNpZmRlZiBPUzIKKyAgICAg IGNhc2UgWFlUQVNDUkw6ICAgICAgICAgICAgICAgICAgICAvKiBTRVQgVEVSTUlOQUwgQVVUT1ND Uk9MTCAqLworICAgICAgICAgIHkgPSBzZXRvbigmYXV0b3Njcm9sbCk7CisgICAgICAgICAgcmV0 dXJuKHkpOworCisgICAgICBjYXNlIFhZVEFQQUdFOiAgICAgICAgICAgICAgICAgICAgLyogU0VU IFRFUk1JTkFMIEFVVE9QQUdFICovCisgICAgICAgICAgeSA9IHNldG9uKCZ3eV9hdXRvcGFnZSk7 CisgICAgICAgICAgcmV0dXJuKHkpOworCisgICAgICBjYXNlIFhZVFJPTDogICAgICAgICAgICAg ICAgICAgICAgLyogU0VUIFRFUk1JTkFMIFJPTEwgKi8KKyAgICAgICAgaWYgKCh5ID0gY21rZXko cm9sbHRhYixucm9sbCwic2Nyb2xsYmFjayBtb2RlIiwiaW5zZXJ0Iix4eHN0cmluZykpPDApCisJ ICByZXR1cm4oeSk7CisJaWYgKHkgPT0gVFRSX0tFWVMpIHsKKwkgICAgaWYgKCh4ID0gY21rZXko cm9sbGtleXRhYixucm9sbGtleSwiIiwic2VuZCIseHhzdHJpbmcpKTwwKQorCSAgICAgIHJldHVy bih4KTsKKwkgICAgaWYgKCh6ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeik7CisJICAgIHR0X3Jr ZXlzW1ZURVJNXSA9IHg7CisJfSBlbHNlIHsKKwkgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSBy ZXR1cm4oeCk7CisJICAgIHR0X3JvbGxbVlRFUk1dID0geTsKKwl9CisgICAgICAgIHJldHVybihz dWNjZXNzID0gMSk7CisKKyAgICAgIGNhc2UgWFlUQ1RTOiAgICAgICAgICAgICAgICAgICAgICAv KiBTRVQgVEVSTUlOQUwgVFJBTlNNSVQtVElNRU9VVCAqLworICAgICAgICB5ID0gY21udW0oIk1h eGltdW0gc2Vjb25kcyB0byBhbGxvdyBDVFMgb2ZmIGR1cmluZyBDT05ORUNUIiwKKyAgICAgICAg ICAgICAgICAgICI1IiwxMCwmeCx4eHN0cmluZyk7CisgICAgICAgIHJldHVybihzZXRudW0oJnR0 X2N0c3Rtbyx4LHksMTAwMDApKTsKKworICAgICAgY2FzZSBYWVRDUEc6IHsgICAgICAgICAgICAg ICAgICAgIC8qIFNFVCBURVJNSU5BTCBDT0RFLVBBR0UgKi8KKyAgICAgICAgaW50IGk7CisgICAg ICAgIGludCBjcCA9IC0xOworICAgICAgICB5ID0gY21udW0oIlBDIGNvZGUgcGFnZSB0byB1c2Ug ZHVyaW5nIHRlcm1pbmFsIGVtdWxhdGlvbiIsCisgICAgICAgICAgICAgICAgICBja2l0b2Eob3My Z2V0Y3AoKSksMTAsJngseHhzdHJpbmcpOworICAgICAgICBpZiAoKHggPSBzZXRudW0oJmNwLHgs eSwxMTAwMCkpIDwgMCkgcmV0dXJuKHgpOworICAgICAgICBpZiAob3Myc2V0Y3AoY3ApICE9IDEp IHsKKyNpZmRlZiBOVAorICAgICAgICAgICAgaWYgKGlzV2luOTUoKSkKKyAgICAgICAgICAgICAg cHJpbnRmKAorICAgICAgICAgICAgICAgICAiU29ycnksIFdpbmRvd3MgOTUgZG9lcyBub3Qgc3Vw cG9ydCBjb2RlIHBhZ2Ugc3dpdGNoaW5nXG4iKTsKKyAgICAgICAgICAgIGVsc2UKKyNlbmRpZiAv KiBOVCAqLworICAgICAgICAgICAgICBwcmludGYoCisgICAgICAgICAgICAgICAgICJTb3JyeSwg JWQgaXMgbm90IGEgdmFsaWQgY29kZSBwYWdlIGZvciB0aGlzIHN5c3RlbS5cbiIsY3ApOworICAg ICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgfQorICAgIC8qIEZvcmNlIHRoZSB0ZXJtaW5h bCBjaGFyYWN0ZXItc2V0cyBjb252ZXJzaW9ucyB0byBiZSB1cGRhdGVkICovCisgICAgICAgIGZv ciAoIGkgPSAwOyBpIDwgNDsgaSsrICkKKyAgICAgICAgICBHW2ldLmluaXQgPSBUUlVFOworICAg ICAgICByZXR1cm4oMSk7CisgICAgfQorCisgICAgICBjYXNlIFhZVFBBQzogICAgICAgICAgICAg ICAgICAgICAgLyogU0VUIFRFUk1JTkFMIE9VVFBVVC1QQUNJTkcgKi8KKyAgICAgICAgeSA9IGNt bnVtKAorICAgICAgICAgICAiUGF1c2UgYmV0d2VlbiBzZW5kaW5nIGVhY2ggY2hhcmFjdGVyIGR1 cmluZyBDT05ORUNULCBtaWxsaXNlY29uZHMiLAorICAgICAgICAgICAgICAgICAgIi0xIiwxMCwm eCx4eHN0cmluZyk7CisgICAgICAgIHJldHVybihzZXRudW0oJnR0X3BhY2luZyx4LHksMTAwMDAp KTsKKworI2lmZGVmIE9TMk1PVVNFCisgICAgICBjYXNlIFhZVE1PVTogeyAgICAgICAgICAgICAg ICAgICAgLyogU0VUIFRFUk1JTkFMIE1PVVNFICovCisgICAgICAgICAgaW50IG9sZF9tb3UgPSB0 dF9tb3VzZTsKKyAgICAgICAgICBpZiAoKHggPSBzZXRvbigmdHRfbW91c2UpKSA8IDApCisgICAg ICAgICAgICByZXR1cm4oeCk7CisgICAgICAgICAgaWYgKHR0X21vdXNlICE9IG9sZF9tb3UpCisg ICAgICAgICAgICBpZiAodHRfbW91c2UpCisgICAgICAgICAgICAgIG9zMl9tb3VzZW9uKCk7Cisg ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIG9zMl9tb3VzZW9mZigpOworICAgICAgICAg IHJldHVybigxKTsKKyAgICAgIH0KKyNlbmRpZiAvKiBPUzJNT1VTRSAqLworI2VuZGlmIC8qIE9T MiAqLworCisgICAgICBjYXNlIFhZVFdJRDogeworICAgICAgICAgIGlmICgoeSA9IGNtbnVtKAor I2lmZGVmIE9TMgorICAgICAgICAgICAgICAgICAgICAgICAgICJudW1iZXIgb2YgY29sdW1ucyBp biBkaXNwbGF5IHdpbmRvdyBkdXJpbmcgQ09OTkVDVCIsCisjZWxzZQorICAgICAgICAgICAgICAg ICAgICAgICAgICJudW1iZXIgb2YgY29sdW1ucyBvbiB5b3VyIHNjcmVlbiIsCisjZW5kaWYgLyog T1MyICovCisgICAgICAgICAgICAgICAgICAgICAgICAgIjgwIiwxMCwmeCx4eHN0cmluZykpIDwg MCkKKyAgICAgICAgICAgIHJldHVybih5KTsKKyAgICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8 IDApIHJldHVybih5KTsKKyNpZmRlZiBPUzIKKyAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IG9z Ml9zZXR0ZXJtd2lkdGgoeCkpOworI2Vsc2UgIC8qIE5vdCBPUy8yICovCisgICAgICAgICAgdHRf Y29scyA9IHg7CisgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKyNlbmRpZiAvKiBPUzIg Ki8KKyAgICAgIH0KKworICAgICAgY2FzZSBYWVRISUc6CisgICAgICAgIGlmICgoeSA9IGNtbnVt KAorI2lmZGVmIE9TMgorICJudW1iZXIgb2Ygcm93cyBpbiBkaXNwbGF5IHdpbmRvdyBkdXJpbmcg Q09OTkVDVCwgbm90IGluY2x1ZGluZyBzdGF0dXMgbGluZSIsCisgdHRfc3RhdHVzW1ZURVJNXT8i MjQiOiIyNSIsCisjZWxzZQorICIyNCIsIm51bWJlciBvZiByb3dzIG9uIHlvdXIgc2NyZWVuIiwK KyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgMTAsJngseHhzdHJpbmcp KSA8IDApCisgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8 IDApIHJldHVybih5KTsKKworI2lmZGVmIE9TMgorICAgICAgICByZXR1cm4gKHN1Y2Nlc3MgPSBv czJfc2V0dGVybWhlaWdodCh4KSk7CisjZWxzZSAgLyogTm90IE9TLzIgKi8KKyAgICAgICAgdHRf cm93cyA9IHg7CisgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisjZW5kaWYgLyogT1MyICov CisKKyNpZmRlZiBPUzIKKyAgICAgIGNhc2UgWFlUUFJOOiB7ICAgICAgICAgICAgICAgICAgICAv KiBQcmludCBNb2RlICovCisgICAgICAgICAgZXh0ZXJuIGJvb2wgeHByaW50LCBhcHJpbnQsIGNw cmludCwgdXByaW50OworICAgICAgICAgIGlmICgoeSA9IGNta2V5KHBybm10YWIsbnBybm10YWIs IiIsIm9mZiIsIHh4c3RyaW5nKSkgPCAwKSByZXR1cm4oeSk7CisgICAgICAgICAgaWYgKCh4ID0g Y21jZm0oKSkgPCAwKSByZXR1cm4oeCk7CisgICAgICAgICAgc3dpdGNoICh5KSB7CisgICAgICAg ICAgICBjYXNlIDA6CisgICAgICAgICAgICAgIGlmIChjcHJpbnQgfHwgdXByaW50IHx8IGFwcmlu dCB8fCB4cHJpbnQpCisgICAgICAgICAgICAgICAgcHJpbnRlcm9mZigpOworICAgICAgICAgICAg ICBjcHJpbnQgPSB4cHJpbnQgPSB1cHJpbnQgPSAwOworICAgICAgICAgICAgICBzZXRhcHJpbnQo MCk7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAg ICAgICBpZiAoIShjcHJpbnQgfHwgdXByaW50IHx8IGFwcmludCB8fCB4cHJpbnQpKQorICAgICAg ICAgICAgICAgIHByaW50ZXJvbigpOworICAgICAgICAgICAgICBzZXRhcHJpbnQoMSk7CisgICAg ICAgICAgICAgIGNwcmludCA9IHhwcmludCA9IHVwcmludCA9IDA7CisgICAgICAgICAgICAgIGJy ZWFrOworICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICBpZiAoIShjcHJpbnQgfHwg dXByaW50IHx8IGFwcmludCB8fCB4cHJpbnQpKQorICAgICAgICAgICAgICAgIHByaW50ZXJvbigp OworICAgICAgICAgICAgICBjcHJpbnQgPSAxOworICAgICAgICAgICAgICBzZXRhcHJpbnQoMCk7 CisJICAgICAgeHByaW50ID0gdXByaW50ID0gMDsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgIGlmICghKGNwcmludCB8fCB1cHJpbnQgfHwg YXByaW50IHx8IHhwcmludCkpCisgICAgICAgICAgICAgICAgcHJpbnRlcm9uKCk7CisgICAgICAg ICAgICAgIHVwcmludCA9IDE7CisgICAgICAgICAgICAgIHNldGFwcmludCgwKTsKKyAgICAgICAg ICAgICAgeHByaW50ID0gY3ByaW50ID0gMDsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg ICAgfQorICAgICAgICAgIHJldHVybigxKTsKKyAgICAgIH0KKyNlbHNlCisjaWZkZWYgWFBSSU5U CisgICAgICBjYXNlIFhZVFBSTjogeworICAgICAgICAgIGV4dGVybiBpbnQgdHRfcHJpbnQ7Cisg ICAgICAgICAgaWYgKCh4ID0gc2V0b24oJnR0X3ByaW50KSkgPCAwKQorICAgICAgICAgICAgcmV0 dXJuKHgpOworICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisgICAgICB9CisjZW5kaWYg LyogWFBSSU5UICovCisjZW5kaWYgLyogT1MyICovCisKKyNpZmRlZiBPUzIKKyAgICAgIGNhc2Ug WFlUU0NOTTogeworICAgICAgICAgIGV4dGVybiBpbnQgZGVjc2NubSwgZGVjc2NubV91c3I7Cisg ICAgICAgICAgaWYgKCh5ID0gY21rZXkobm9ybXJldiw0LCIiLAorICAgICAgICAgICAgICAgICAg ICAgICAgIGRlY3Njbm1fdXNyPyJyZXZlcnNlIjoibm9ybWFsIiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICB4eHN0cmluZykKKyAgICAgICAgICAgICAgICkgPCAwKQorICAgICAgICAgICAgcmV0 dXJuKHkpOworICAgICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOworICAg ICAgICAgIGRlY3Njbm1fdXNyID0geTsKKyAgICAgICAgICBpZiAoZGVjc2NubSAhPSBkZWNzY25t X3VzcikKKyAgICAgICAgICAgIGZsaXBzY3JlZW4oVlRFUk0pOworICAgICAgICAgIHJldHVybigx KTsKKyAgICB9CisgICAgY2FzZSBYWVRPUFRJOgorICAgICAgICBpZiAoKHkgPSBjbWtleShvbm9m ZiwyLCIiLHR0X2RpZmZfdXBkPyJvbiI6Im9mZiIsCisgICAgICAgICAgICAgICAgICAgICAgICB4 eHN0cmluZykpIDwgMCkgcmV0dXJuKHkpOworICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDAp IHJldHVybih4KTsKKyAgICAgICAgdHRfZGlmZl91cGQgPSB5OworICAgICAgICByZXR1cm4oMSk7 CisgICAgY2FzZSBYWVRVUEQ6IHsKKyAgICAgICAgaW50IG1vZGUsIGRlbGF5OworICAgICAgICBp ZiAoKG1vZGUgPSBjbWtleShzY3JudXBkLG5zY3JudXBkLCIiLCJmYXN0Iix4eHN0cmluZykpIDwg MCkgeworICAgICAgICAgICAgcmV0dXJuKG1vZGUpOworICAgICAgICB9IGVsc2UgeworICAgICAg ICAgICAgeSA9IGNtbnVtKAorICAgICAgICAgICAgIlBhdXNlIGJldHdlZW4gRkFTVCBzY3JlZW4g dXBkYXRlcyBpbiBDT05ORUNUIG1vZGUsIG1pbGxpc2Vjb25kcyIsCisgICAgICAgICAgICAgICAg ICAgICAgIjEwMCIsMTAsJngseHhzdHJpbmcKKyAgICAgICAgICAgICAgICAgICAgICApOworICAg ICAgICAgICAgaWYgKHggPCAwIHx8IHggPiAxMDAwICkgeworICAgICAgICAgICAgICAgIHByaW50 ZigKKyAgICAgICAgICAgICJcbj9UaGUgdXBkYXRlIHJhdGUgbXVzdCBiZSBiZXR3ZWVuIDAgYW5k IDEwMDAgbWlsbGlzZWNvbmRzLlxuIgorICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAg ICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7CisgICAgICAgICAgICB9CisgICAgICAgICAg ICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsKKworICAgICAgICAgICAgdXBkbW9k ZSA9IHR0X3VwZG1vZGUgPSBtb2RlOworICAgICAgICAgICAgcmV0dXJuKHNldG51bSgmdHRfdXBk YXRlLHgseSwxMDAwMCkpOworICAgICAgICB9CisgICAgfQorICAgIGNhc2UgWFlUQ1RSTDoKKyAg ICAgICAgICBpZiAoKHggPSBjbWtleSh0ZXJtY3RybCxudGVybWN0cmwsIiIsIjciLHh4c3RyaW5n KSkgPCAwKSB7CisgICAgICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgICB9IGVsc2Ugewor ICAgICAgICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApCisgICAgICAgICAgICAgICAgICBy ZXR1cm4oeSk7CisgICAgICAgICAgICAgIHN3aXRjaCAoIHggKSB7CisgICAgICAgICAgICAgIGNh c2UgODoKKyAgICAgICAgICAgICAgICAgIHNlbmRfYzEgPSBzZW5kX2MxX3VzciA9IFRSVUU7Cisg ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSA3OgorICAgICAgICAg ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgc2VuZF9jMSA9IHNlbmRfYzFfdXNyID0g RkFMU0U7CisgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgfQorICAgICAg ICAgIH0KKyAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IFRSVUUpOworICAgICAgICAgIGJyZWFr OworCisjaWZkZWYgUENGT05UUworICAgICAgY2FzZSBYWVRGT046CisgICAgICAgIGlmICggIUlz T1MyRnVsbFNjcmVlbigpICkgeworICAgICAgICAgICAgcHJpbnRmKAorICAgICAgICAiXG4/U0VU IFRFUk1JTkFMIEZPTlQgaXMgb25seSBzdXBwb3J0ZWQgaW4gRnVsbCBTY3JlZW4gc2Vzc2lvbnMu XG4iKTsKKyAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gRkFMU0UpOworICAgICAgICB9CisK KyAgICAgICAgaWYgKCh4ID0gY21rZXkodGVybV9mb250LG50ZXJtZm9udCwiIiwiZGVmYXVsdCIs eHhzdHJpbmcpKSA8IDApIHsKKyAgICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgfSBlbHNl IHsKKyAgICAgICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkpOworICAgICAg ICAgICAgaWYgKCAhb3MyTG9hZFBDRm9udHMoKSApIHsKKyAgICAgICAgICAgICAgICB0dF9mb250 ID0geDsKKyAgICAgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IFRSVUUpOworICAgICAgICAg ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwcmludGYoCisgICAgICAiXG4/UENGT05UUy5E TEwgaXMgbm90IGF2YWlsYWJsZSBpbiBDS0VSTUlUIGV4ZWN1dGFibGUgZGlyZWN0b3J5LlxuIik7 CisgICAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSBGQUxTRSk7CisgICAgICAgICAgICB9 CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisjZWxzZSAvKiBQQ0ZPTlRTICovCisjaWZkZWYg TlQKKyNpZmRlZiBLVUkKKyAgICBjYXNlIFhZVEZPTjoKKyAgICAgICAgcmV0dXJuKHNldGd1aWZv bnQoKSk7ICAgICAgICAgICAvKiBja3V1czMuYyAqLworI2VuZGlmIC8qIEtVSSAqLworI2VuZGlm IC8qIE5UICovCisjZW5kaWYgLyogUENGT05UUyAqLworCisgICAgICBjYXNlIFhZVFZDSDogewor ICAgICAgICAgIGV4dGVybiBpbnQgcGhlaWdodCwgbWFyZ2luYm90LCBjbWRfcm93cywgY21kX2Nv bHM7CisgICAgICAgICAgaWYgKCh4ID0gY21rZXkodHZjdGFiLG50dmN0YWIsIiIsaXNXaW45NSgp PyJ3aW45NS1zYWZlIjoiZW5hYmxlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgeHhzdHJp bmcpKSA8IDApCisgICAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgICAgaWYgKCh5ID0gY21j Zm0oKSkgPCAwKSByZXR1cm4oeSk7CisjaWZuZGVmIEtVSQorICAgICAgICAgIGlmICh4ICE9IHR0 X21vZGVjaGcpIHsKKyAgICAgICAgICAgICAgc3dpdGNoICh4KSB7CisgICAgICAgICAgICAgICAg Y2FzZSBUVkNfRElTOgorICAgICAgICAgICAgICAgICAgLyogV2hlbiBkaXNhYmxlZCB0aGUgaGVp Z2h0cyBvZiBhbGwgb2YgdGhlIHZpcnR1YWwgc2NyZWVucyAqLworICAgICAgICAgICAgICAgICAg LyogbXVzdCBiZSBlcXVhbCB0byB0aGUgcGh5c2ljYWwgaGVpZ2h0IG9mIHRoZSBjb25zb2xlICAg ICAqLworICAgICAgICAgICAgICAgICAgLyogd2luZG93IGFuZCBtYXkgbm90IGJlIGNoYW5nZWQu ICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgLyogVGhlIHdp ZHRoIG9mIHRoZSB3aW5kb3cgbWF5IG5vdCBiZSBhbHRlcmVkLiAgICAgICAgICAgICAqLworICAg ICAgICAgICAgICAgICAgdHRfbW9kZWNoZyA9IFRWQ19FTkE7ICAgICAgICAgICAgICAgICAvKiBU ZW1wb3JhcnkgKi8KKyAgICAgICAgICAgICAgICAgIGlmIChtYXJnaW5ib3QgPiBwaGVpZ2h0LSh0 dF9zdGF0dXNbVlRFUk1dPzE6MCkpCisgICAgICAgICAgICAgICAgICAgIG1hcmdpbmJvdCA9IHBo ZWlnaHQtKHR0X3N0YXR1c1tWVEVSTV0/MTowKTsKKyAgICAgICAgICAgICAgICAgIHR0X3N6Y2hu Z1tWQ01EXSA9IDEgOworICAgICAgICAgICAgICAgICAgdHRfcm93c1tWQ01EXSA9IHBoZWlnaHQ7 CisgICAgICAgICAgICAgICAgICBWc2NybkluaXQoVkNNRCk7CisgICAgICAgICAgICAgICAgICBT ZXRDb2xzKFZDTUQpOworICAgICAgICAgICAgICAgICAgY21kX3Jvd3MgPSB5OworCisgICAgICAg ICAgICAgICAgICB0dF9zemNobmdbVlRFUk1dID0gMiA7CisgICAgICAgICAgICAgICAgICB0dF9y b3dzW1ZURVJNXSA9IHBoZWlnaHQgLSAodHRfc3RhdHVzW1ZURVJNXT8xOjApOworICAgICAgICAg ICAgICAgICAgVnNjcm5Jbml0KFZURVJNKTsKKworICAgICAgICAgICAgICAgICAgYnJlYWs7CisK KyAgICAgICAgICAgICAgICBjYXNlIFRWQ19FTkE6CisgICAgICAgICAgICAgICAgICAvKiBXaGVu IGVuYWJsZWQgdGhlIHBoeXNpY2FsIGhlaWdodCBvZiB0aGUgY29uc29sZSB3aW5kb3dzICovCisg ICAgICAgICAgICAgICAgICAvKiBzaG91bGQgYmUgYWRqdXN0ZWQgdG8gdGhlIGhlaWdodCBvZiB0 aGUgdmlydHVhbCBzY3JlZW4gICovCisgICAgICAgICAgICAgICAgICAvKiBUaGUgd2lkdGggbWF5 IGJlIHNldCB0byBhbnl0aGluZy4gICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAg ICAgICAgICAvKiBub3RoaW5nIHRvIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBj YXNlIFRWQ19XOTU6CisgICAgICAgICAgICAgICAgICAvKiBXaW45NS1zYWZlIG1vZGUgYWxsb3dz IHRoZSBwaHlzaWNhbCBoZWlnaHQgdG8gY2hhbmdlICAgICovCisgICAgICAgICAgICAgICAgICAv KiBidXQgcmVzdHJpY3RzIGl0IHRvIGEgd2lkdGggb2YgODAgYW5kIGEgaGVpZ2h0IGVxdWFsIHRv ICovCisgICAgICAgICAgICAgICAgICAvKiAyNSwgNDMsIG9yIDUwLiAgTXVzdCBiZSBhZGp1c3Rl ZCBub3cuICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAvKiBUaGUgdmly dHVhbCBoZWlnaHRzIG11c3QgYmUgZXF1YWwgdG8gdGhlIGFib3ZlLiAgICAgICAgICovCisgICAg ICAgICAgICAgICAgICBpZiAocGhlaWdodCAhPSAyNSAmJiBwaGVpZ2h0ICE9IDQzICYmIHBoZWln aHQgIT0gNTApIHsKKyAgICAgICAgICAgICAgICAgICAgICBpZiAocGhlaWdodCA8IDI1KQorICAg ICAgICAgICAgICAgICAgICAgICAgeSA9IDI1OworICAgICAgICAgICAgICAgICAgICAgIGVsc2Ug aWYgKHBoZWlnaHQgPCA0MykKKyAgICAgICAgICAgICAgICAgICAgICAgIHkgPSA0MzsKKyAgICAg ICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICB5ID0gNTA7Cisg ICAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeSA9IHBoZWlnaHQ7 CisKKyAgICAgICAgICAgICAgICAgIHR0X21vZGVjaGcgPSBUVkNfRU5BOyAvKiBUZW1wb3Jhcnkg Ki8KKworICAgICAgICAgICAgICAgICAgdHRfc3pjaG5nW1ZDTURdID0gMTsKKyAgICAgICAgICAg ICAgICAgIHR0X3Jvd3NbVkNNRF0gPSB5OworICAgICAgICAgICAgICAgICAgdHRfY29sc1tWQ01E XSA9IDgwOworICAgICAgICAgICAgICAgICAgVnNjcm5Jbml0KFZDTUQpOworICAgICAgICAgICAg ICAgICAgU2V0Q29scyhWQ01EKTsKKyAgICAgICAgICAgICAgICAgIGNtZF9yb3dzID0geTsKKyAg ICAgICAgICAgICAgICAgIGNtZF9jb2xzID0gODA7CisKKyAgICAgICAgICAgICAgICAgIG1hcmdp bmJvdCA9IHktKHR0X3N0YXR1c1tWVEVSTV0/MTowKTsKKyAgICAgICAgICAgICAgICAgIHR0X3N6 Y2huZ1tWVEVSTV0gPSAyOworICAgICAgICAgICAgICAgICAgdHRfcm93c1tWVEVSTV0gPSB5IC0g KHR0X3N0YXR1c1tWVEVSTV0/MTowKTsKKyAgICAgICAgICAgICAgICAgIHR0X2NvbHNbVlRFUk1d ID0gODA7CisgICAgICAgICAgICAgICAgICBWc2NybkluaXQoVlRFUk0pOworICAgICAgICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgdHRfbW9kZWNoZyA9 IHg7CisgICAgICAgICAgfQorICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisjZWxzZQor ICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7CisjZW5kaWYgLyogS1VJICovCisgICAgICB9 CisgICAgICBjYXNlIFhZVFNUQVQ6IHsKKyAgICAgICAgICBleHRlcm4gaW50IG1hcmdpbmJvdDsK KyAgICAgICAgICBpZiAoKHkgPSBjbWtleShvbm9mZiwyLCIiLCJvbiIseHhzdHJpbmcpKSA8IDAp IHJldHVybih5KTsKKyAgICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsK KyAgICAgICAgICBpZiAoeSAhPSB0dF9zdGF0dXNbVlRFUk1dIHx8IHkgIT0gdHRfc3RhdHVzX3Vz cltWVEVSTV0pIHsKKyAgICAgICAgICAgICAgLyogTWlnaHQgbmVlZCB0byBmaXh1cCB0aGUgbWFy Z2lucyAqLworICAgICAgICAgICAgICBpZiAoIG1hcmdpbmJvdCA9PSBWc2NybkdldEhlaWdodChW VEVSTSktKHR0X3N0YXR1c1tWVEVSTV0/MTowKSApCisgICAgICAgICAgICAgICAgaWYgKHkpIHsK KyAgICAgICAgICAgICAgICAgICAgbWFyZ2luYm90LS07CisgICAgICAgICAgICAgICAgfSBlbHNl IHsKKyAgICAgICAgICAgICAgICAgICAgbWFyZ2luYm90Kys7CisgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICB0dF9zdGF0dXNfdXNyW1ZURVJNXSA9IHR0X3N0YXR1c1tWVEVSTV0gPSB5 OworICAgICAgICAgICAgICBpZiAoeSkgeworICAgICAgICAgICAgICAgICAgICB0dF9zemNobmdb VlRFUk1dID0gMjsKKyAgICAgICAgICAgICAgICAgICAgdHRfcm93c1tWVEVSTV0tLTsKKyAgICAg ICAgICAgICAgICAgICAgVnNjcm5Jbml0KFZURVJNKTsgIC8qIEhlaWdodCBzZXQgaGVyZSAqLwor I2lmZGVmIFROQ09ERQorICAgICAgICAgICAgICAgICAgICBpZiAoVEVMT1BUX01FKFRFTE9QVF9O QVdTKSkKKyAgICAgICAgICAgICAgICAgICAgICB0bl9zbmF3cygpOworI2VuZGlmIC8qIFROQ09E RSAqLworI2lmZGVmIFJMT0dDT0RFCisgICAgICAgICAgICAgICAgICAgIGlmIChURUxPUFRfTUUo VEVMT1BUX05BV1MpKQorICAgICAgICAgICAgICAgICAgICAgIHJsb2dfbmF3cygpOworI2VuZGlm IC8qIFJMT0dDT0RFICovCisjaWZkZWYgU1NIQlVJTFRJTgorICAgICAgICAgICAgICAgICAgICBp ZiAoVEVMT1BUX01FKFRFTE9QVF9OQVdTKSkKKyAgICAgICAgICAgICAgICAgICAgICBzc2hfc25h d3MoKTsKKyNlbmRpZiAvKiBTU0hCVUlMVElOICovCisgICAgICAgICAgICAgIH0gZWxzZSB7Cisg ICAgICAgICAgICAgICAgICB0dF9zemNobmdbVlRFUk1dID0gMTsKKyAgICAgICAgICAgICAgICAg IHR0X3Jvd3NbVlRFUk1dKys7CisgICAgICAgICAgICAgICAgICBWc2NybkluaXQoVlRFUk0pOyAg ICAgLyogSGVpZ2h0IHNldCBoZXJlICovCisjaWZkZWYgVE5DT0RFCisgICAgICAgICAgICAgICAg ICBpZiAoVEVMT1BUX01FKFRFTE9QVF9OQVdTKSkKKyAgICAgICAgICAgICAgICAgICAgdG5fc25h d3MoKTsKKyNlbmRpZiAvKiBUTkNPREUgKi8KKyNpZmRlZiBSTE9HQ09ERQorICAgICAgICAgICAg ICAgICAgaWYgKFRFTE9QVF9NRShURUxPUFRfTkFXUykpCisgICAgICAgICAgICAgICAgICAgIHJs b2dfbmF3cygpOworI2VuZGlmIC8qIFJMT0dDT0RFICovCisjaWZkZWYgU1NIQlVJTFRJTgorICAg ICAgICAgICAgICAgICAgaWYgKFRFTE9QVF9NRShURUxPUFRfTkFXUykpCisgICAgICAgICAgICAg ICAgICAgIHNzaF9zbmF3cygpOworI2VuZGlmIC8qIFNTSEJVSUxUSU4gKi8KKyAgICAgICAgICAg ICAgfQorICAgICAgICAgIH0KKyAgICAgICAgICByZXR1cm4oMSk7CisgICAgICB9CisjZW5kaWYg LyogT1MyICovCisKKyNpZmRlZiBOVAorICAgICAgY2FzZSBYWVRBVFRCVUc6CisgICAgICAgIGlm ICgoeSA9IGNta2V5KG9ub2ZmLDIsIiIsIm9uIix4eHN0cmluZykpIDwgMCkgcmV0dXJuKHkpOwor ICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKKyAgICAgICAgdHRfYXR0 cl9idWcgPSB5OworICAgICAgICByZXR1cm4oMSk7CisjZW5kaWYgLyogTlQgKi8KKworI2lmZGVm IE9TMgorICAgICAgY2FzZSBYWVRTR1JDOgorICAgICAgICBpZiAoKHkgPSBjbWtleShvbm9mZiwy LCIiLCJvbiIseHhzdHJpbmcpKSA8IDApIHJldHVybih5KTsKKyAgICAgICAgaWYgKCh4ID0gY21j Zm0oKSkgPCAwKSByZXR1cm4oeCk7CisgICAgICAgIHNncmNvbG9ycyA9IHk7CisgICAgICAgIHJl dHVybigxKTsKKworICAgICAgY2FzZSBYWVRTRU5EOgorICAgICAgICAgIGlmICgoeSA9IGNta2V5 KG9ub2ZmLDIsIiIsIm9uIix4eHN0cmluZykpIDwgMCkgcmV0dXJuKHkpOworICAgICAgICAgIGlm ICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOworICAgICAgICAgIHR0X3NlbmRkYXRhID0g eTsKKyAgICAgICAgICByZXR1cm4oMSk7CisKKyAgICAgIGNhc2UgWFlUU0VPQjoKKyAgICAgICAg ICBpZiAoKHkgPSBjbWtleSh0dHlzZW9idGFiLDIsIiIsInVzX2NyIix4eHN0cmluZykpIDwgMCkg cmV0dXJuKHkpOworICAgICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOwor ICAgICAgICAgIHd5X2Jsb2NrZW5kID0geTsKKyAgICAgICAgICByZXR1cm4oMSk7CisKKyAgICAg IGNhc2UgWFlUVVJMSEk6IHsKKyAgICAgICAgICBpbnQgZG9uZSA9IDAsIGF0dHIgPSBWVF9DSEFS X0FUVFJfTk9STUFMOworCisgICAgICAgICAgaWYgKCh4ID0gY21rZXkob25vZmYsMiwiIiwib24i LHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICAgIGlmICh4 KSB7CisgICAgICAgICAgICAgIHogPSAwOworICAgICAgICAgICAgICB3aGlsZSAoIWRvbmUpIHsK KyAgICAgICAgICAgICAgICAgIGlmICgoeSA9IGNta2V5KHR0eXByb3RhYixucHJvdGVjdCwiIiwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHo/ImRvbmUiOiJyZXZlcnNlIix4eHN0 cmluZykpIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICAgICAg ICAgICAgc3dpdGNoICh5KSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgVFRBVFRET05FOgor ICAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSBUUlVFOworICAgICAgICAgICAgICAgICAgICAg IGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIFRUQVRUQkxJOgorICAgICAgICAgICAg ICAgICAgICAgIGF0dHIgfD0gVlRfQ0hBUl9BVFRSX0JMSU5LOworICAgICAgICAgICAgICAgICAg ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIFRUQVRUUkVWOgorICAgICAgICAg ICAgICAgICAgICAgIGF0dHIgfD0gVlRfQ0hBUl9BVFRSX1JFVkVSU0U7CisgICAgICAgICAgICAg ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgVFRBVFRJVEE6CisgICAg ICAgICAgICAgICAgICAgICAgYXR0ciB8PSBWVF9DSEFSX0FUVFJfSVRBTElDOworICAgICAgICAg ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIFRUQVRUVU5EOgor ICAgICAgICAgICAgICAgICAgICAgIGF0dHIgfD0gVlRfQ0hBUl9BVFRSX1VOREVSTElORTsKKyAg ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBUVEFU VEJMRDoKKyAgICAgICAgICAgICAgICAgICAgICBhdHRyIHw9IFZUX0NIQVJfQVRUUl9CT0xEOwor ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIFRU QVRURElNOgorICAgICAgICAgICAgICAgICAgICAgIGF0dHIgfD0gVlRfQ0hBUl9BVFRSX0RJTTsK KyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBU VEFUVElOVjoKKyAgICAgICAgICAgICAgICAgICAgICBhdHRyIHw9IFZUX0NIQVJfQVRUUl9JTlZJ U0lCTEU7CisgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg IGNhc2UgVFRBVFROT1I6CisgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICAgICAgICB6ID0gMTsgICAgICAgICAgICAgICAgLyogT25l IGF0dHJpYnV0ZSBoYXMgYmVlbiBjaG9zZW4gKi8KKyAgICAgICAgICAgICAgfQorICAgICAgICAg IH0KKyAgICAgICAgICBpZiAoKHogPSBjbWNmbSgpKSA8IDApIHJldHVybih6KTsKKyAgICAgICAg ICBzZXR1cmxobCh4KTsKKyAgICAgICAgICBpZiAoeCkKKyAgICAgICAgICAgIHR0X3VybF9oaWxp dGVfYXR0ciA9IGF0dHI7CisgICAgICAgICAgcmV0dXJuKDEpOworICAgICAgfQorICAgICAgY2Fz ZSBYWVRBVFRSOgorICAgICAgICBpZiAoKHggPSBjbWtleSh0dHlhdHRydGFiLG5hdHRyaWIsIiIs InVuZGVybGluZSIseHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgcmV0dXJuKHgpOworICAgICAg ICBzd2l0Y2ggKHgpIHsKKyAgICAgICAgICBjYXNlIFRUQVRUQkxJOgorICAgICAgICAgICAgaWYg KCh5ID0gY21rZXkob25vZmYsMiwiIiwib24iLHh4c3RyaW5nKSkgPCAwKSByZXR1cm4oeSk7Cisg ICAgICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKKyAgICAgICAgICAg IHRydWVibGluayA9IHk7CisjaWZuZGVmIEtVSQorICAgICAgICAgICAgaWYgKCAhdHJ1ZWJsaW5r ICYmIHRydWV1bmRlcmxpbmUgKSB7CisgICAgICAgICAgICAgICAgdHJ1ZXVuZGVybGluZSA9IDA7 CisgICAgICAgICAgICAgICAgcHJpbnRmKCJXYXJuaW5nOiBVbmRlcmxpbmUgYmVpbmcgc2ltdWxh dGVkIGJ5IGNvbG9yLlxuIik7CisgICAgICAgICAgICB9CisKKyNlbmRpZiAvKiBLVUkgKi8KKyAg ICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBUVEFUVERJTToKKyAgICAgICAgICAg IGlmICgoeSA9IGNta2V5KG9ub2ZmLDIsIiIsIm9uIix4eHN0cmluZykpIDwgMCkgcmV0dXJuKHkp OworICAgICAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7CisgICAgICAg ICAgICB0cnVlZGltID0geTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBU VEFUVFJFVjoKKyAgICAgICAgICAgIGlmICgoeSA9IGNta2V5KG9ub2ZmLDIsIiIsIm9uIix4eHN0 cmluZykpIDwgMCkgcmV0dXJuKHkpOworICAgICAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAw KSByZXR1cm4oeCk7CisgICAgICAgICAgICB0cnVlcmV2ZXJzZSA9IHk7CisgICAgICAgICAgICBi cmVhazsKKworICAgICAgICAgIGNhc2UgVFRBVFRVTkQ6CisgICAgICAgICAgICBpZiAoKHkgPSBj bWtleShvbm9mZiwyLCIiLCJvbiIseHhzdHJpbmcpKSA8IDApIHJldHVybih5KTsKKyAgICAgICAg ICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOworICAgICAgICAgICAgdHJ1ZXVu ZGVybGluZSA9IHk7CisjaWZuZGVmIEtVSQorICAgICAgICAgICAgaWYgKCF0cnVlYmxpbmsgJiYg dHJ1ZXVuZGVybGluZSkgeworICAgICAgICAgICAgICAgIHRydWVibGluayA9IDE7CisgICAgICAg ICAgICAgICAgcHJpbnRmKCJXYXJuaW5nOiBUcnVlIGJsaW5rIG1vZGUgaXMgYWN0aXZlLlxuIik7 CisgICAgICAgICAgICB9CisjZW5kaWYgLyogS1VJICovCisgICAgICAgICAgICBicmVhazsKKwor ICAgICAgICAgIGNhc2UgVFRBVFRJVEE6CisgICAgICAgICAgICAgIGlmICgoeSA9IGNta2V5KG9u b2ZmLDIsIiIsIm9uIix4eHN0cmluZykpIDwgMCkgcmV0dXJuKHkpOworICAgICAgICAgICAgICBp ZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKKyAgICAgICAgICAgICAgdHJ1ZWl0YWxp YyA9IHk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgVFRBVFRQUk86IHsg ICAgICAvKiBTZXQgZGVmYXVsdCBQcm90ZWN0ZWQgQ2hhcmFjdGVyIGF0dHJpYnV0ZSAqLworICAg ICAgICAgICAgICBleHRlcm4gdnRhdHRyaWIgV1BhdHRyaWI7ICAgIC8qIGN1cnJlbnQgV1AgTW9k ZSBBdHRyaWIgKi8KKyAgICAgICAgICAgICAgZXh0ZXJuIHZ0YXR0cmliIGRlZldQYXR0cmliOyAv KiBkZWZhdWx0IFdQIE1vZGUgQXR0cmliICovCisgICAgICAgICAgICAgIHZ0YXR0cmliIHdwYSA9 IHswLDAsMCwwLDAsMSwwLDAsMCwwLDB9OyAgIC8qIFByb3RlY3RlZCAqLworICAgICAgICAgICAg ICBpbnQgZG9uZSA9IDA7CisKKyAgICAgICAgICAgICAgeCA9IDA7CisgICAgICAgICAgICAgIHdo aWxlICghZG9uZSkgeworICAgICAgICAgICAgICAgICAgaWYgKCh5ID0gY21rZXkodHR5cHJvdGFi LG5wcm90ZWN0LCIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeD8iZG9uZSI6 ImRpbSIseHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgICAgICAgICAgIHJldHVybih5KTsKKyAg ICAgICAgICAgICAgICAgIHN3aXRjaCAoeSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIFRU QVRUTk9SOgorICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg ICBjYXNlIFRUQVRUQkxJOiAgICAgIC8qIEJsaW5raW5nIGRvZXNuJ3Qgd29yayAqLworICAgICAg ICAgICAgICAgICAgICAgIHdwYS5ibGlua2luZyA9IFRSVUU7CisgICAgICAgICAgICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgVFRBVFRSRVY6CisgICAgICAgICAg ICAgICAgICAgICAgd3BhLnJldmVyc2VkID0gVFJVRTsKKyAgICAgICAgICAgICAgICAgICAgICBi cmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBUVEFUVElUQToKKyAgICAgICAgICAgICAg ICAgICAgICB3cGEuaXRhbGljID0gVFJVRTsKKyAgICAgICAgICAgICAgICAgICAgICBicmVhazsK KyAgICAgICAgICAgICAgICAgICAgY2FzZSBUVEFUVFVORDoKKyAgICAgICAgICAgICAgICAgICAg ICB3cGEudW5kZXJsaW5lZCA9IFRSVUU7CisgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgICAgICAgICAgICAgIGNhc2UgVFRBVFRCTEQ6CisgICAgICAgICAgICAgICAgICAgICAg d3BhLmJvbGQgPSBUUlVFOworICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg ICAgICAgICAgICBjYXNlIFRUQVRURElNOgorICAgICAgICAgICAgICAgICAgICAgIHdwYS5kaW0g PSBUUlVFOworICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg ICBjYXNlIFRUQVRUSU5WOgorICAgICAgICAgICAgICAgICAgICAgIHdwYS5pbnZpc2libGUgPSBU UlVFIDsKKyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg Y2FzZSBUVEFUVERPTkU6CisgICAgICAgICAgICAgICAgICAgICAgZG9uZSA9IFRSVUU7CisgICAg ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgICAgICB4ID0gMTsgICAgICAgICAgICAgICAgLyogT25lIGF0dHJpYnV0ZSBoYXMgYmVlbiBj aG9zZW4gKi8KKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBpZiAoKHggPSBjbWNmbSgp KSA8IDApIHJldHVybih4KTsKKyAgICAgICAgICAgICAgV1BhdHRyaWIgPSBkZWZXUGF0dHJpYiA9 IHdwYTsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAg ICAgIHJldHVybigxKTsKKworICAgICAgY2FzZSBYWVRLRVk6IHsgICAgICAgICAgICAgICAgICAg IC8qIFNFVCBURVJNSU5BTCBLRVkgKi8KKyAgICAgICAgICBpbnQgdCwgeCwgeTsKKyAgICAgICAg ICBpbnQgY2xlYXIgPSAwLCBkZWZsdCA9IDA7CisgICAgICAgICAgaW50IGNvbmZpcm1lZCA9IDA7 CisgICAgICAgICAgaW50IGZsYWcgPSAwOworICAgICAgICAgIGludCBrYyA9IC0xOyAgICAgICAg ICAgICAgICAgIC8qIEtleSBjb2RlICovCisgICAgICAgICAgaW50IGxpdHN0ciA9IDA7ICAgICAg ICAgICAgICAgLyogTGl0ZXJhbCBTdHJpbmc/ICovCisgICAgICAgICAgY2hhciAqcyA9IE5VTEw7 ICAgICAgICAgICAgICAgLyogS2V5IGJpbmRpbmcgKi8KKyNpZm5kZWYgTk9LVkVSQlMKKyAgICAg ICAgICBjaGFyICpwID0gTlVMTDsgICAgICAgICAgICAgICAvKiBXb3JrZXIgKi8KKyNlbmRpZiAv KiBOT0tWRVJCUyAqLworICAgICAgICAgIGNvbl9ldmVudCBkZWZldnQ7CisgICAgICAgICAgZXh0 ZXJuIGludCBvczJna3M7CisgICAgICAgICAgZXh0ZXJuIGludCBtc2trZXlzOworICAgICAgICAg IGV4dGVybiBpbnQgaW5pdHZpazsKKyAgICAgICAgICBzdHJ1Y3QgRkRCIGt3LHN3LG51LGNtOwor CisgICAgICAgICAgZGVmZXZ0LnR5cGUgPSBlcnJvcjsKKworICAgICAgICAgIGlmICgodCA9IGNt a2V5KHR0a2V5dGFiLG50dGtleSwiIiwiIix4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICAgIHJl dHVybih0KTsKKyAgICAgICAgICBjbWZkYmkoJm51LCAgICAgICAgICAgICAgICAgICAvKiBGaXJz dCBGREIgLSBjb21tYW5kIHN3aXRjaGVzICovCisgICAgICAgICAgICAgICAgIF9DTU5VTSwgICAg ICAgICAgICAgICAgLyogZmNvZGUgKi8KKyAgICAgICAgICAgICAgICAgIi9saXRlcmFsLCBrZXlj b2RlLCBvciBhY3Rpb24iLAorICAgICAgICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAg IC8qIGRlZmF1bHQgKi8KKyAgICAgICAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAv KiBhZGR0bCBzdHJpbmcgZGF0YSAqLworICAgICAgICAgICAgICAgICAxMCwgICAgICAgICAgICAg ICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAxOiByYWRpeCAqLworICAgICAgICAgICAgICAg ICAwLCAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAyOiAwICovCisg ICAgICAgICAgICAgICAgIHh4c3RyaW5nLCAgICAgICAgICAgICAgLyogUHJvY2Vzc2luZyBmdW5j dGlvbiAqLworICAgICAgICAgICAgICAgICBOVUxMLCAgICAgICAgICAgICAgICAgIC8qIEtleXdv cmQgdGFibGUgKi8KKyAgICAgICAgICAgICAgICAgJnN3ICAgICAgICAgICAgICAgICAgICAvKiBQ b2ludGVyIHRvIG5leHQgRkRCICovCisgICAgICAgICAgICAgICAgICk7ICAgICAgICAgICAgICAg ICAgICAgLyogICovCisgICAgICAgICAgY21mZGJpKCZzdywgICAgICAgICAgICAgICAgICAgLyog U2Vjb25kIEZEQiAtIHN3aXRjaGVzICovCisgICAgICAgICAgICAgICAgIF9DTUtFWSwgICAgICAg ICAgICAgICAgLyogZmNvZGUgKi8KKyAgICAgICAgICAgICAgICAgIiIsCisgICAgICAgICAgICAg ICAgICIiLCAgICAgICAgICAgICAgICAgICAgLyogZGVmYXVsdCAqLworICAgICAgICAgICAgICAg ICAiIiwgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIHN0cmluZyBkYXRhICovCisgICAgICAg ICAgICAgICAgIG5zdHJtc3dpdGFiLCAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDE6 IHRibCBzaXplICovCisgICAgICAgICAgICAgICAgIDQsICAgICAgICAgICAgICAgICAgICAgLyog YWRkdGwgbnVtZXJpYyBkYXRhIDI6IDQgPSBjbXN3aSAqLworICAgICAgICAgICAgICAgICB4eHN0 cmluZywgICAgICAgICAgICAgIC8qIFByb2Nlc3NpbmcgZnVuY3Rpb24gKi8KKyAgICAgICAgICAg ICAgICAgc3RybXN3aXRhYiwgICAgICAgICAgICAvKiBLZXl3b3JkIHRhYmxlICovCisgICAgICAg ICAgICAgICAgICZrdyAgICAgICAgICAgICAgICAgICAgLyogUG9pbnRlciB0byBuZXh0IEZEQiAq LworICAgICAgICAgICAgICAgICApOworICAgICAgICAgIGNtZmRiaSgma3csICAgICAgICAgICAg ICAgICAgIC8qIFRoaXJkIEZEQiAtIGNvbW1hbmQgc3dpdGNoZXMgKi8KKyAgICAgICAgICAgICAg ICAgX0NNS0VZLCAgICAgICAgICAgICAgICAvKiBmY29kZSAqLworICAgICAgICAgICAgICAgICAi L2xpdGVyYWwsIGtleWNvZGUsIG9yIGFjdGlvbiIsCisgICAgICAgICAgICAgICAgICIiLCAgICAg ICAgICAgICAgICAgICAgLyogZGVmYXVsdCAqLworICAgICAgICAgICAgICAgICAiIiwgICAgICAg ICAgICAgICAgICAgIC8qIGFkZHRsIHN0cmluZyBkYXRhICovCisgICAgICAgICAgICAgICAgIG5z dHJta2V5dGFiLCAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDE6IHRibCBzaXplICov CisgICAgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJp YyBkYXRhIDIgKi8KKyAgICAgICAgICAgICAgICAgeHhzdHJpbmcsICAgICAgICAgICAgICAvKiBQ cm9jZXNzaW5nIGZ1bmN0aW9uICovCisgICAgICAgICAgICAgICAgIHN0cm1rZXl0YWIsICAgICAg ICAgICAgLyogS2V5d29yZCB0YWJsZSAqLworICAgICAgICAgICAgICAgICAmY20gICAgICAgICAg ICAgICAgICAgIC8qIFBvaW50ZXIgdG8gbmV4dCBGREIgKi8KKyAgICAgICAgICAgICAgICAgKTsK KyAgICAgICAgICBjbWZkYmkoJmNtLCAgICAgICAgICAgICAgICAgICAvKiBGaW5hbCBGREIgLSBD b25maXJtYXRpb24gKi8KKyAgICAgICAgICAgICAgICAgX0NNQ0ZNLCAgICAgICAgICAgICAgICAv KiBmY29kZSAqLworICAgICAgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgICAgICAgIiIsICAg ICAgICAgICAgICAgICAgICAvKiBkZWZhdWx0ICovCisgICAgICAgICAgICAgICAgICIiLCAgICAg ICAgICAgICAgICAgICAgLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KKyAgICAgICAgICAgICAgICAg MCwgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMTogdGJsIHNpemUg Ki8KKyAgICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1l cmljIGRhdGEgMjogNCA9IGNtc3dpICovCisgICAgICAgICAgICAgICAgIHh4c3RyaW5nLCAgICAg ICAgICAgICAgLyogUHJvY2Vzc2luZyBmdW5jdGlvbiAqLworICAgICAgICAgICAgICAgICBOVUxM LCAgICAgICAgICAgICAgICAgIC8qIEtleXdvcmQgdGFibGUgKi8KKyAgICAgICAgICAgICAgICAg TlVMTCAgICAgICAgICAgICAgICAgICAvKiBQb2ludGVyIHRvIG5leHQgRkRCICovCisgICAgICAg ICAgICAgICAgICk7CisgICAgICAgICAgd2hpbGUgKGtjIDwgMCkgeworICAgICAgICAgICAgICB4 ID0gY21mZGIoJm51KTsgICAgICAgICAgIC8qIFBhcnNlIHNvbWV0aGluZyAqLworICAgICAgICAg ICAgICBpZiAoeCA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuKHgpOworCisgICAgICAgICAg ICAgIHN3aXRjaCAoY21yZXN1bHQuZmNvZGUpIHsKKyAgICAgICAgICAgICAgICBjYXNlIF9DTUNG TToKKyAgICAgICAgICAgICAgICAgIHByaW50ZigiIFByZXNzIGtleSB0byBiZSBkZWZpbmVkOiAi KTsKKyAgICAgICAgICAgICAgICAgIGNvbmJpbigoY2hhcillc2NhcGUpOyAvKiBQdXQgdGVybWlu YWwgaW4gYmluYXJ5IG1vZGUgKi8KKyAgICAgICAgICAgICAgICAgIG9zMmdrcyA9IDA7ICAgICAg ICAgICAvKiBUdXJuIG9mZiBLdmVyYiBwcmVwcm9jZXNzaW5nICovCisgICAgICAgICAgICAgICAg ICBrYyA9IGNvbmdrcygwKTsgICAgICAgLyogR2V0IGNoYXJhY3RlciBvciBzY2FuIGNvZGUgKi8K KyAgICAgICAgICAgICAgICAgIG9zMmdrcyA9IDE7ICAgICAgICAgICAvKiBUdXJuIG9uIEt2ZXJi IHByZXByb2Nlc3NpbmcgKi8KKyAgICAgICAgICAgICAgICAgIGNvbmNiKChjaGFyKWVzY2FwZSk7 ICAvKiBSZXN0b3JlIHRlcm1pbmFsIHRvIGNicmVhayBtb2RlICovCisgICAgICAgICAgICAgICAg ICBpZiAoa2MgPCAwKSB7ICAgICAgICAgLyogQ2hlY2sgZm9yIGVycm9yICovCisgICAgICAgICAg ICAgICAgICAgICAgcHJpbnRmKCI/RXJyb3IgcmVhZGluZyBrZXlcbiIpOworICAgICAgICAgICAg ICAgICAgICAgIHJldHVybigwKTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ICAgIHNob2tleWNvZGUoa2MsdCk7ICAgICAvKiBTaG93IGN1cnJlbnQgZGVmaW5pdGlvbiAqLwor ICAgICAgICAgICAgICAgICAgZmxhZyA9IDE7ICAgICAgICAgICAgIC8qIFJlbWVtYmVyIGl0J3Mg YSBtdWx0aWxpbmUgY29tbWFuZCAqLworICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg ICAgICAgICAgY2FzZSBfQ01OVU06CisgICAgICAgICAgICAgICAgICBrYyA9IGNtcmVzdWx0Lm5y ZXN1bHQ7CisgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIF9D TUtFWToKKyAgICAgICAgICAgICAgICAgIGlmIChjbXJlc3VsdC5mZGJhZGRyID09ICZzdykgeyAv KiBTd2l0Y2ggKi8KKyAgICAgICAgICAgICAgICAgICAgICBpZiAoY21yZXN1bHQubnJlc3VsdCA9 PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgbGl0c3RyID0gMTsKKyAgICAgICAgICAgICAg ICAgIH0gZWxzZSBpZiAoY21yZXN1bHQuZmRiYWRkciA9PSAma3cpIHsgLyogS2V5d29yZCAqLwor ICAgICAgICAgICAgICAgICAgICAgIGlmIChjbXJlc3VsdC5ucmVzdWx0ID09IDApCisgICAgICAg ICAgICAgICAgICAgICAgICBjbGVhciA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgZWxzZQor ICAgICAgICAgICAgICAgICAgICAgICAgZGVmbHQgPSAxOworICAgICAgICAgICAgICAgICAgICAg IGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybih4 KTsKKyAgICAgICAgICAgICAgICAgICAgICBpZiAoY2xlYXIpCisgICAgICAgICAgICAgICAgICAg ICAgICBjbGVhcmtleW1hcCh0KTsKKyAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChkZWZs dCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRrZXltYXAodCk7CisgICAgICAgICAg ICAgICAgICAgICAgaW5pdHZpayA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKDEp OworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9CisgICAgICAgICAgfQorCisg ICAgLyogTm9ybWFsIFNFVCBURVJNSU5BTCBLRVkgPHRlcm1pbmFsPiA8c2NhbmNvZGU+IDx2YWx1 ZT4gY29tbWFuZC4uLiAqLworCisgICAgICAgICAgaWYgKG1za2tleXMpCisgICAgICAgICAgICBr YyA9IG1za3RvY2soa2MpOworCisgICAgICAgICAgaWYgKGtjIDwgMCB8fCBrYyA+PSBLTVNJWkUp IHsKKyAgICAgICAgICAgICAgcHJpbnRmKCI/a2V5IGNvZGUgbXVzdCBiZSBiZXR3ZWVuIDAgYW5k ICVkXG4iLCBLTVNJWkUgLSAxKTsKKyAgICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAg ICB9CisgICAgICAgICAgaWYgKGtjID09IGVzY2FwZSkgeworICAgICAgICAgICAgICBwcmludGYo IlNvcnJ5LCAlZCBpcyB0aGUgQ09OTkVDVC1tb2RlIGVzY2FwZSBjaGFyYWN0ZXJcbiIsa2MpOwor ICAgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICAgIH0KKyAgICAgICAgICB3aWRlcmVz dWx0ID0gLTE7CisgICAgICAgICAgaWYgKGZsYWcpIHsKKyAgICAgICAgICAgICAgY21zYXZwKHBz YXZlLFBST01QVEwpOworICAgICAgICAgICAgICBjbXNldHAoIiBFbnRlciBuZXcgZGVmaW5pdGlv bjogIik7CisgICAgICAgICAgICAgIGNtaW5pKGNreGVjaCk7CisgICAgICAgICAgfQorICAgICAg ICBkZWZfYWdhaW46CisgICAgICAgICAgaWYgKGZsYWcpIHByb21wdChOVUxMKTsKKyAgICAgICAg ICBpZiAoKHkgPSBjbXR4dCgia2V5IGRlZmluaXRpb24sXG5cCisgb3IgQ3RybC1DIHRvIGNhbmNl bCB0aGlzIGNvbW1hbmQsXG5cCisgb3IgRW50ZXIgdG8gcmVzdG9yZSBkZWZhdWx0IGRlZmluaXRp b24iLAorICAgICAgICAgICAgICAgICAgICAgICAgICIiLCZzLE5VTEwpKSA8IDApIHsKKyAgICAg ICAgICAgICAgaWYgKGZsYWcpICAgICAgICAgICAgICAgICAvKiBIYW5kbGUgcGFyc2UgZXJyb3Jz ICovCisgICAgICAgICAgICAgICAgZ290byBkZWZfYWdhaW47CisgICAgICAgICAgICAgIGVsc2UK KyAgICAgICAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgICAgfQorICAgICAgICAgIHMgPSBi cnN0cmlwKHMpOworI2lmbmRlZiBOT0tWRVJCUworICAgICAgICAgIHAgPSBzOyAgICAgICAgICAg ICAgICAgICAgICAgIC8qIFNhdmUgdGhpcyBwbGFjZSAqLworI2VuZGlmIC8qIE5PS1ZFUkJTICov CisvKgorICBJZiB0aGUgZGVmaW5pdGlvbiBpbmNsdWRlZCBhbnkgXEt2ZXJicywgcXVvdGUgdGhl IGJhY2tzbGFzaCBzbyB0aGUgXEt2ZXJiCisgIHdpbGwgc3RpbGwgYmUgaW4gdGhlIGRlZmluaXRp b24gd2hlbiB0aGUga2V5IGlzIHByZXNzZWQuICBXZSBkb24ndCBkbyB0aGlzCisgIGluIHp6c3Ry aW5nKCksIGJlY2F1c2UgXEt2ZXJicyBhcmUgdmFsaWQgb25seSBpbiB0aGlzIGNvbnRleHQgYW5k IG5vd2hlcmUKKyAgZWxzZS4KKworICBXZSB1c2UgdGhpcyBjb2RlIGFjdGl2ZSBmb3IgYWxsIHZl cnNpb25zIHRoYXQgc3VwcG9ydCBTRVQgS0VZLCBldmVuIGlmIHRoZXkKKyAgZG9uJ3Qgc3VwcG9y dCBcS3ZlcmJzLCBiZWNhdXNlIG90aGVyd2lzZSBcSyB3b3VsZCBiZWhhdmUgZGlmZmVyZW50bHkg Zm9yCisgIGRpZmZlcmVudCB2ZXJzaW9ucy4KKyovCisgICAgICAgICAgZm9yICh4ID0gMCwgeSA9 IDA7IHNbeF07IHgrKywgeSsrKSB7IC8qIENvbnZlcnQgXEsgdG8gXFxLICovCisgICAgICAgICAg ICAgIGlmICgoeCA+IDApICYmCisgICAgICAgICAgICAgICAgICAoc1t4XSA9PSAnSycgfHwgc1t4 XSA9PSAnaycpCisgICAgICAgICAgICAgICAgICApIHsgICAgICAgICAgICAgICAgICAgLyogSGF2 ZSBLICovCisKKyAgICAgICAgICAgICAgICAgIGlmICgoeCA9PSAxICYmIHNbeC0xXSA9PSBDTURR KSB8fAorICAgICAgICAgICAgICAgICAgICAgICh4ID4gMSAmJiBzW3gtMV0gPT0gQ01EUSAmJiBz W3gtMl0gIT0gQ01EUSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICBsaW5lW3krK10gPSBDTURR OyAvKiBNYWtlIGl0IFxcSyAqLworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg ICAgaWYgKHggPiAxICYmIHNbeC0xXSA9PSAneycgJiYgc1t4LTJdID09IENNRFEpIHsKKyAgICAg ICAgICAgICAgICAgICAgICBsaW5lW3ktMV0gPSBDTURROyAvKiBIYXZlIFx7SyAqLworICAgICAg ICAgICAgICAgICAgICAgIGxpbmVbeSsrXSA9ICd7JzsgIC8qIE1ha2UgaXQgXFx7SyAqLworICAg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGxpbmVbeV0g PSBzW3hdOworICAgICAgICAgIH0KKyAgICAgICAgICBsaW5lW3krK10gPSBOVUw7ICAgICAgICAg ICAgICAvKiBUZXJtaW5hdGUgKi8KKyAgICAgICAgICBzID0gbGluZSArIHkgKyAxOyAgICAgICAg ICAgICAvKiBQb2ludCB0byBhZnRlciBpdCAqLworICAgICAgICAgIHggPSBMSU5CVUZTSVogLSAo aW50KSBzdHJsZW4obGluZSkgLSAxOyAvKiBHZXQgcmVtYWluaW5nIHNwYWNlICovCisgICAgICAg ICAgaWYgKCh4IDwgKExJTkJVRlNJWiAvIDIpKSB8fAorICAgICAgICAgICAgICAoenpzdHJpbmco bGluZSwgJnMsICZ4KSA8IDApKSB7IC8qIEV4cGFuZCB2YXJpYWJsZXMsIGV0Yy4gKi8KKyAgICAg ICAgICAgICAgcHJpbnRmKCI/S2V5IGRlZmluaXRpb24gdG9vIGxvbmdcbiIpOworICAgICAgICAg ICAgICBpZiAoZmxhZykgY21zZXRwKHBzYXZlKTsKKyAgICAgICAgICAgICAgcmV0dXJuKC05KTsK KyAgICAgICAgICB9CisgICAgICAgICAgcyA9IGxpbmUgKyB5ICsgMTsgICAgICAgICAgICAgLyog UG9pbnQgdG8gcmVzdWx0LiAqLworCisjaWZuZGVmIE5PS1ZFUkJTCisvKgorICBTcGVjaWFsIGNh c2U6IHNlZSBpZiB0aGUgZGVmaW5pdGlvbiBzdGFydHMgd2l0aCBhIFxLdmVyYi4KKyAgSWYgaXQg ZG9lcywgcG9pbnQgdG8gaXQgd2l0aCBwLCBvdGhlcndpc2Ugc2V0IHAgdG8gTlVMTC4KKyovCisg ICAgICAgICAgcCA9IHM7CisgICAgICAgICAgaWYgKCpwKysgPT0gQ01EUSkgeworICAgICAgICAg ICAgICBpZiAoKnAgPT0gJ3snKSBwKys7CisgICAgICAgICAgICAgIHAgPSAoKnAgPT0gJ2snIHx8 ICpwID09ICdLJykgPyBwICsgMSA6IE5VTEw7CisgICAgICAgICAgfQorI2VuZGlmIC8qIE5PS1ZF UkJTICovCisKKyAgICAgICAgICBzd2l0Y2ggKHN0cmxlbihzKSkgeyAgICAgICAgICAvKiBBY3Rp b24gZGVwZW5kcyBvbiBsZW5ndGggKi8KKyAgICAgICAgICAgIGNhc2UgMDogICAgICAgICAgICAg ICAgICAgICAvKiBDbGVhciBpbmRpdmlkdWFsIGtleSBkZWYgKi8KKyAgICAgICAgICAgICAgZGVs ZXRla2V5bWFwKHQsa2MpOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug MToKKyAgICAgICAgICAgICAgaWYgKCFsaXRzdHIpIHsKKyAgICAgICAgICAgICAgICAgIGRlZmV2 dC50eXBlID0ga2V5OyAgICAvKiBTaW5nbGUgY2hhcmFjdGVyICovCisgICAgICAgICAgICAgICAg ICBkZWZldnQua2V5LnNjYW5jb2RlID0gKnM7CisgICAgICAgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgIC8q IENoYXJhY3RlciBzdHJpbmcgKi8KKyNpZm5kZWYgTk9LVkVSQlMKKyAgICAgICAgICAgICAgaWYg KHApIHsKKyAgICAgICAgICAgICAgICAgIHkgPSB4bG9va3VwKGt2ZXJicyxwLG5rdmVyYnMsJngp OyAvKiBMb29rIGl0IHVwICovCisgICAgICAgICAgICAgICAgICAvKiBOZWVkIGV4YWN0IG1hdGNo ICovCisgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJzZXQga2V5IGt2ZXJiIGxvb2t1cCIs MCx5KTsKKyAgICAgICAgICAgICAgICAgIGlmICh5ID4gLTEpIHsKKyAgICAgICAgICAgICAgICAg ICAgICBkZWZldnQudHlwZSA9IGt2ZXJiOworICAgICAgICAgICAgICAgICAgICAgIGRlZmV2dC5r dmVyYi5pZCA9IHk7CisgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBOT0tWRVJCUyAqLworICAgICAgICAg ICAgICBpZiAobGl0c3RyKSB7CisgICAgICAgICAgICAgICAgICBkZWZldnQudHlwZSA9IGxpdGVy YWw7CisgICAgICAgICAgICAgICAgICBkZWZldnQubGl0ZXJhbC5zdHJpbmcgPSAoY2hhciAqKSBt YWxsb2Moc3RybGVuKHMpKzEpOworICAgICAgICAgICAgICAgICAgaWYgKGRlZmV2dC5saXRlcmFs LnN0cmluZykKKyAgICAgICAgICAgICAgICAgICAgc3RyY3B5KGRlZmV2dC5saXRlcmFsLnN0cmlu Zywgcyk7IC8qIHNhZmUgKi8KKyAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg ICAgIGRlZmV2dC50eXBlID0gbWFjcm87CisgICAgICAgICAgICAgICAgICBkZWZldnQubWFjcm8u c3RyaW5nID0gKGNoYXIgKikgbWFsbG9jKHN0cmxlbihzKSsxKTsKKyAgICAgICAgICAgICAgICAg IGlmIChkZWZldnQubWFjcm8uc3RyaW5nKQorICAgICAgICAgICAgICAgICAgICBzdHJjcHkoZGVm ZXZ0Lm1hY3JvLnN0cmluZywgcyk7IC8qIHNhZmUgKi8KKyAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAgICAgICAgaW5zZXJ0a2V5bWFwKHQsIGtj LCBkZWZldnQpOworICAgICAgICAgIGlmIChmbGFnKQorICAgICAgICAgICAgY21zZXRwKHBzYXZl KTsKKyAgICAgICAgICBpbml0dmlrID0gMTsgICAgICAgICAgICAgICAgICAvKiBVcGRhdGUgVklL IHRhYmxlICovCisgICAgICAgICAgcmV0dXJuKDEpOworICAgICAgfQorCisjaWZkZWYgUENURVJN CisgICAgICBjYXNlIFhZVFBDVEVSTTogICAgICAgICAgICAgICAgICAgLyogUENURVJNIEtleWJv YXJkIE1vZGUgKi8KKyAgICAgICAgaWYgKCh4ID0gc2V0b24oJnR0X3BjdGVybSkpIDwgMCkgcmV0 dXJuKHgpOworICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworI2VuZGlmIC8qIFBDVEVSTSAq LworI2VuZGlmIC8qIE9TMiAqLworCisjaWZkZWYgQ0tfVFJJR0dFUgorICAgICAgY2FzZSBYWVRS SUdHRVI6CisgICAgICAgIGlmICgoeSA9IGNtdHh0KCJTdHJpbmcgdG8gdHJpZ2dlciBhdXRvbWF0 aWMgcmV0dXJuIHRvIGNvbW1hbmQgbW9kZSIsCisgICAgICAgICAgICAgICAgICAgICAgICIiLCZz LHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgIHJldHVybih5KTsKKyAgICAgICAgbWFrZWxpc3Qo cyx0dF90cmlnZ2VyLFRSSUdHRVJTKTsKKyAgICAgICAgcmV0dXJuKDEpOworI2VuZGlmIC8qIENL X1RSSUdHRVIgKi8KKworI2lmZGVmIE9TMgorICAgICAgY2FzZSBYWVRTQUM6CisgICAgICAgIGlm ICgoeSA9IGNtbnVtKCJBU0NJSSB2YWx1ZSB0byB1c2UgZm9yIHNwYWNpbmcgYXR0cmlidXRlcyIs CisgICAgICAgICAgICAgICAgICAgICAgICIzMiIsMTAsJngseHhzdHJpbmcpKSA8IDApCisgICAg ICAgICAgcmV0dXJuKHkpOworICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5 KTsKKyAgICAgICAgdHRfc2FjID0geDsKKyAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKwor ICAgICAgY2FzZSBYWVRLQkRHTDogeyAgICAgIC8qIFNFVCBURVJNIEtCRC1GT0xMT1dTLUdML0dS ICovCisgICAgICAgICAgZXh0ZXJuIGludCB0dF9rYl9nbGdyOyAgICAgICAgLyogZnJvbSBja29j bzMuYyAqLworICAgICAgICAgIGlmICgoeCA9IHNldG9uKCZ0dF9rYl9nbGdyKSkgPCAwKQorICAg ICAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKyAg ICAgIH0KKyNpZm5kZWYgTk9DU0VUUworICAgICAgY2FzZSBYWVRWVExORzogICAgICAgIC8qIFNF VCBURVJNIERFQy1MQU5HVUFHRSAqLworICAgICAgICBpZiAoKHkgPSBjbWtleSh2dGxhbmd0YWIs bnZ0bGFuZ3RhYiwiVlQgbGFuZ3VhZ2UiLAorICAgICAgICAgICAgICAgICAgICAgICBJUzk3ODAx KHR0X3R5cGVfbW9kZSk/Imdlcm1hbiI6Im5vcnRoLWFtZXJpY2FuIiwKKyAgICAgICAgICAgICAg ICAgICAgICAgeHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICBp ZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKKworICAgICAgICAvKiBBIHJlYWwgVlQg dGVybWluYWwgd291bGQgdXNlIHRoZSBsYW5ndWFnZSB0byBzZXQgdGhlICAgKi8KKyAgICAgICAg LyogZGVmYXVsdCBrZXlib2FyZCBsYW5ndWFnZSBmb3IgYm90aCA4LWJpdCBtdWx0aW5hdGlvbmFs ICovCisgICAgICAgIC8qIGFuZCA3LWJpdCBuYXRpb25hbCBtb2Rlcy4gIEZvciA4LWJpdCBtb2Rl IGl0IHdvdWxkICAgICAqLworICAgICAgICAvKiBzZXQgdGhlIHRlcm1pbmFsIGNoYXJhY3Rlci1z ZXQgdG8gdGhlIElTTyBzZXQgaWYgaXQgICAgKi8KKyAgICAgICAgLyogaXMgbm90IGFscmVhZHkg c2V0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgIC8qIExh dGluLTEgY2FuIGJlIHJlcGxhY2VkIGJ5IERFQyBNdWx0aW5hdGlvbmFsICAgICAgICAgICAqLwor ICAgICAgICBzd2l0Y2ggKHkpIHsKKyAgICAgICAgICBjYXNlIFZUTF9OT1JUSF9BTTogIC8qIE5v cnRoIEFtZXJpY2FuICovCisgICAgICAgICAgICAvKiBNdWx0aW5hdGlvbmFsOiBMYXRpbi0xICAg Ki8KKyAgICAgICAgICAgIC8qIE5hdGlvbmFsOiAgICAgIFVTX0FTQ0lJICAqLworICAgICAgICAg ICAgZGVjX2xhbmcgPSB5OworICAgICAgICAgICAgZGVjX25yYyA9IFRYX0FTQ0lJOworICAgICAg ICAgICAgZGVjX2tiZCA9IFRYXzg4NTlfMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg IGNhc2UgVlRMX0JSSVRJU0ggOgorICAgICAgICAgICAgLyogTXVsdGluYXRpb25hbDogTGF0aW4t MSAgICovCisgICAgICAgICAgICAvKiBOYXRpb25hbDogICAgICBVS19BU0NJSSAgKi8KKyAgICAg ICAgICAgIGRlY19sYW5nID0geTsKKyAgICAgICAgICAgIGRlY19ucmMgPSBUWF9CUklUSVNIOwor ICAgICAgICAgICAgZGVjX2tiZCA9IFRYXzg4NTlfMTsKKyAgICAgICAgICAgIGJyZWFrOworICAg ICAgICAgIGNhc2UgVlRMX0ZSRU5DSCAgOgorICAgICAgICAgIGNhc2UgVlRMX0JFTEdJQU4gOgor ICAgICAgICAgIGNhc2UgVlRMX0NBTkFESUFOOgorICAgICAgICAgICAgLyogTXVsdGluYXRpb25h bDogTGF0aW4tMSAgICovCisgICAgICAgICAgICAvKiBOYXRpb25hbDogICAgICBGUl9BU0NJSSAg Ki8KKyAgICAgICAgICAgIGRlY19sYW5nID0geTsKKyAgICAgICAgICAgIGRlY19ucmMgPSBUWF9G UkVOQ0g7CisgICAgICAgICAgICBkZWNfa2JkID0gVFhfODg1OV8xOworICAgICAgICAgICAgYnJl YWs7CisgICAgICAgICAgY2FzZSBWVExfRlJfQ0FOICA6CisgICAgICAgICAgICAvKiBNdWx0aW5h dGlvbmFsOiBMYXRpbi0xICAgKi8KKyAgICAgICAgICAgIC8qIE5hdGlvbmFsOiAgICAgIEZDX0FT Q0lJICAqLworICAgICAgICAgICAgZGVjX2xhbmcgPSB5OworICAgICAgICAgICAgZGVjX25yYyA9 IFRYX0NOX0ZSRU5DSDsKKyAgICAgICAgICAgIGRlY19rYmQgPSBUWF84ODU5XzE7CisgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIFZUTF9EQU5JU0ggIDoKKyAgICAgICAgICBjYXNl IFZUTF9OT1JXRUdJQToKKyAgICAgICAgICAgIC8qIE11bHRpbmF0aW9uYWw6IExhdGluLTEgICAq LworICAgICAgICAgICAgLyogTmF0aW9uYWw6ICAgICAgTk9fQVNDSUkgICovCisgICAgICAgICAg ICBkZWNfbGFuZyA9IHk7CisgICAgICAgICAgICBkZWNfbnJjID0gVFhfTk9SV0VHSUFOOworICAg ICAgICAgICAgZGVjX2tiZCA9IFRYXzg4NTlfMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg ICAgIGNhc2UgVlRMX0ZJTk5JU0ggOgorICAgICAgICAgICAgLyogTXVsdGluYXRpb25hbDogTGF0 aW4tMSAgICovCisgICAgICAgICAgICAvKiBOYXRpb25hbDogICAgICBGSV9BU0NJSSAgKi8KKyAg ICAgICAgICAgIGRlY19sYW5nID0geTsKKyAgICAgICAgICAgIGRlY19ucmMgPSBUWF9GSU5OSVNI OworICAgICAgICAgICAgZGVjX2tiZCA9IFRYXzg4NTlfMTsKKyAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICAgIGNhc2UgVlRMX0dFUk1BTiAgOgorICAgICAgICAgICAgLyogTXVsdGluYXRpb25h bDogTGF0aW4tMSAgICovCisgICAgICAgICAgICAvKiBOYXRpb25hbDogICAgICBHUl9BU0NJSSAg Ki8KKyAgICAgICAgICAgIGRlY19sYW5nID0geTsKKyAgICAgICAgICAgIGRlY19ucmMgPSBUWF9H RVJNQU47CisgICAgICAgICAgICBkZWNfa2JkID0gVFhfODg1OV8xOworICAgICAgICAgICAgYnJl YWs7CisgICAgICAgICAgY2FzZSBWVExfRFVUQ0ggICA6CisgICAgICAgICAgICAvKiBNdWx0aW5h dGlvbmFsOiBMYXRpbi0xICAgKi8KKyAgICAgICAgICAgIC8qIE5hdGlvbmFsOiAgICAgIERVX0FT Q0lJICAqLworICAgICAgICAgICAgZGVjX2xhbmcgPSB5OworICAgICAgICAgICAgZGVjX25yYyA9 IFRYX0RVVENIOworICAgICAgICAgICAgZGVjX2tiZCA9IFRYXzg4NTlfMTsKKyAgICAgICAgICAg IGJyZWFrOworICAgICAgICAgIGNhc2UgVlRMX0lUQUxJQU4gOgorICAgICAgICAgICAgLyogTXVs dGluYXRpb25hbDogTGF0aW4tMSAgICovCisgICAgICAgICAgICAvKiBOYXRpb25hbDogICAgICBJ VF9BU0NJSSAgKi8KKyAgICAgICAgICAgIGRlY19sYW5nID0geTsKKyAgICAgICAgICAgIGRlY19u cmMgPSBUWF9JVEFMSUFOOworICAgICAgICAgICAgZGVjX2tiZCA9IFRYXzg4NTlfMTsKKyAgICAg ICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgVlRMX1NXX0ZSICAgOgorICAgICAgICAgIGNh c2UgVlRMX1NXX0dSICAgOgorICAgICAgICAgICAgLyogTXVsdGluYXRpb25hbDogTGF0aW4tMSAg ICovCisgICAgICAgICAgICAvKiBOYXRpb25hbDogICAgICBDSF9BU0NJSSAgKi8KKyAgICAgICAg ICAgIGRlY19sYW5nID0geTsKKyAgICAgICAgICAgIGRlY19ucmMgPSBUWF9TV0lTUzsKKyAgICAg ICAgICAgIGRlY19rYmQgPSBUWF84ODU5XzE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg ICBjYXNlIFZUTF9TV0VESVNIIDoKKyAgICAgICAgICAgIC8qIE11bHRpbmF0aW9uYWw6IExhdGlu LTEgICAqLworICAgICAgICAgICAgLyogTmF0aW9uYWw6ICAgICAgU1dfQVNDSUkgICovCisgICAg ICAgICAgICBkZWNfbGFuZyA9IHk7CisgICAgICAgICAgICBkZWNfbnJjID0gVFhfU1dFRElTSDsK KyAgICAgICAgICAgIGRlY19rYmQgPSBUWF84ODU5XzE7CisgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgICBjYXNlIFZUTF9TUEFOSVNIIDoKKyAgICAgICAgICAgIC8qIE11bHRpbmF0aW9uYWw6 IExhdGluLTEgICAqLworICAgICAgICAgICAgLyogTmF0aW9uYWw6ICAgICAgU1BfQVNDSUkgICov CisgICAgICAgICAgICBkZWNfbGFuZyA9IHk7CisgICAgICAgICAgICBkZWNfbnJjID0gVFhfU1BB TklTSDsKKyAgICAgICAgICAgIGRlY19rYmQgPSBUWF84ODU5XzE7CisgICAgICAgICAgICBicmVh azsKKyAgICAgICAgICBjYXNlIFZUTF9QT1JUVUdFUzoKKyAgICAgICAgICAgIC8qIE11bHRpbmF0 aW9uYWw6IExhdGluLTEgICAqLworICAgICAgICAgICAgLyogTmF0aW9uYWw6ICAgICAgUG9ydHVn ZXNlIEFTQ0lJICAqLworICAgICAgICAgICAgZGVjX2xhbmcgPSB5OworICAgICAgICAgICAgZGVj X25yYyA9IFRYX1BPUlRVR1VFU0U7CisgICAgICAgICAgICBkZWNfa2JkID0gVFhfODg1OV8xOwor ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBWVExfSEVCUkVXICA6CisgICAgICAg ICAgICAvKiBNdWx0aW5hdGlvbmFsOiBMYXRpbi1IZWJyZXcgLyBERUMtSGVicmV3ICAqLworICAg ICAgICAgICAgLyogTmF0aW9uYWw6ICAgICAgREVDIDctYml0IEhlYnJldyAgKi8KKyAgICAgICAg ICAgIGRlY19sYW5nID0geTsKKyAgICAgICAgICAgIGRlY19ucmMgPSBUWF9IRTc7CisgICAgICAg ICAgICBkZWNfa2JkID0gVFhfODg1OV84OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg Y2FzZSBWVExfR1JFRUsgICA6CisgICAgICAgICAgICAvKiBNdWx0aW5hdGlvbmFsOiBMYXRpbi1H cmVlayAvIERFQy1HcmVlayAgICovCisgICAgICAgICAgICAvKiBOYXRpb25hbDogICAgICBERUMg R3JlZWsgTlJDICAgICAgICAgICAgICovCisgICAgICAgICAgICAvKiBpcyBFTE9UOTI3IGVxdWl2 YWxlbnQgdG8gREVDIEdyZWVrPz8/PyAgICovCisgICAgICAgICAgICBkZWNfbGFuZyA9IHk7Cisg ICAgICAgICAgICBkZWNfbnJjID0gVFhfRUxPVDkyNzsKKyAgICAgICAgICAgIGRlY19rYmQgPSBU WF84ODU5Xzc7CisgICAgICAgICAgICBicmVhazsKKyNpZmRlZiBDT01NRU5UCisgICAgICAgICAg Y2FzZSBWVExfVFVSS19RICA6CisgICAgICAgICAgY2FzZSBWVExfVFVSS19GICA6CisgICAgICAg ICAgICAvKiBNdWx0aW5hdGlvbmFsOiBMYXRpbi1UdXJraXNoIC8gREVDLVR1cmtpc2ggICAqLwor ICAgICAgICAgICAgLyogTmF0aW9uYWw6ICAgICAgREVDIDctYml0IFR1cmtpc2ggICAgICAgICAg ICAgKi8KKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAg ICBjYXNlIFZUTF9IVU5HQVJJQToKKyAgICAgICAgICAgIC8qIE11bHRpbmF0aW9uYWw6IExhdGlu LTIgICAqLworICAgICAgICAgICAgLyogTmF0aW9uYWw6ICAgICAgbm8gbmF0aW9uYWwgbW9kZSAg Ki8KKyAgICAgICAgICAgIGRlY19sYW5nID0geTsKKyAgICAgICAgICAgIGRlY19ucmMgPSBUWF9I VU5HQVJJQU47CisgICAgICAgICAgICBkZWNfa2JkID0gVFhfODg1OV8yOworICAgICAgICAgICAg YnJlYWs7CisgICAgICAgICAgY2FzZSBWVExfU0xPVkFLICA6CisgICAgICAgICAgY2FzZSBWVExf Q1pFQ0ggICA6CisgICAgICAgICAgY2FzZSBWVExfUE9MSVNIICA6CisgICAgICAgICAgY2FzZSBW VExfUk9NQU5JQU46CisgICAgICAgICAgICAvKiBNdWx0aW5hdGlvbmFsOiBMYXRpbi0yICAgKi8K KyAgICAgICAgICAgIC8qIE5hdGlvbmFsOiAgICAgIG5vIG5hdGlvbmFsIG1vZGUgICovCisgICAg ICAgICAgICBkZWNfbGFuZyA9IHk7CisgICAgICAgICAgICBkZWNfbnJjID0gVFhfQVNDSUk7Cisg ICAgICAgICAgICBkZWNfa2JkID0gVFhfODg1OV8yOworICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICAgY2FzZSBWVExfUlVTU0lBTiA6CisgICAgICAgICAgICAvKiBNdWx0aW5hdGlvbmFsOiBM YXRpbi1DeXJpbGxpYyAvIEtPSS04ICAgKi8KKyAgICAgICAgICAgIC8qIE5hdGlvbmFsOiAgICAg IERFQyBSdXNzaWFuIE5SQyAgKi8KKyAgICAgICAgICAgIGRlY19sYW5nID0geTsKKyAgICAgICAg ICAgIGRlY19ucmMgPSBUWF9LT0k3OworICAgICAgICAgICAgZGVjX2tiZCA9IFRYXzg4NTlfNTsK KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgVlRMX0xBVElOX0FNOgorICAgICAg ICAgICAgLyogTXVsdGluYXRpb25hbDogbm90IGxpc3RlZCBpbiB0YWJsZSAgICovCisgICAgICAg ICAgICAvKiBOYXRpb25hbDogICAgICBub3QgbGlzdGVkIGluIHRhYmxlICAqLworICAgICAgICAg ICAgZGVjX2xhbmcgPSB5OworICAgICAgICAgICAgZGVjX25yYyA9IFRYX0FTQ0lJOworICAgICAg ICAgICAgZGVjX2tiZCA9IFRYXzg4NTlfMTsKKyAgICAgICAgICAgIGJyZWFrOworI2lmZGVmIENP TU1FTlQKKyAgICAgICAgICBjYXNlIFZUTF9TQ1MgICAgIDoKKyAgICAgICAgICAgIC8qIE11bHRp bmF0aW9uYWw6IExhdGluLTIgICAqLworICAgICAgICAgICAgLyogTmF0aW9uYWw6ICAgICAgU0NT IE5SQyAgICovCisgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAg ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7CisgICAgICAg IH0KKyAgICAgICAgaWYgKElTOTc4MDEodHRfdHlwZV9tb2RlKSkgeworICAgICAgICAgICAgU05J X2JpdG1vZGUoY21hc2sgPT0gMDM3NyA/IDggOiA3KTsKKyAgICAgICAgfQorICAgICAgICByZXR1 cm4oc3VjY2VzcyA9IDEpOworI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKworICAgICAgY2FzZSBYWVRW VE5SQzogeyAgICAgICAgICAgICAgICAgIC8qIFNFVCBURVJNIERFQy1OUkMtTU9ERSAqLworICAg ICAgICAgIGV4dGVybiBpbnQgZGVjbnJjbV91c3IsIGRlY25yY207ICAgICAgICAvKiBmcm9tIGNr b2NvMy5jICovCisgICAgICAgICAgaWYgKCh4ID0gc2V0b24oJmRlY25yY21fdXNyKSkgPCAwKQor ICAgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICAgIGRlY25yY20gPSBkZWNucmNtX3VzcjsK KyAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworICAgICAgfQorICAgICAgY2FzZSBYWVRT TklQTTogeyAgICAgICAgICAgICAgICAgIC8qIFNFVCBURVJNIFNOSS1QQUdFTU9ERSAqLworICAg ICAgICAgIGV4dGVybiBpbnQgc25pX3BhZ2Vtb2RlLCBzbmlfcGFnZW1vZGVfdXNyOworICAgICAg ICAgIGlmICgoeSA9IGNta2V5KG9ub2ZmLDIsIiIsIm9uIix4eHN0cmluZykpIDwgMCkgcmV0dXJu KHkpOworICAgICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOworICAgICAg ICAgIHNuaV9wYWdlbW9kZV91c3IgPSBzbmlfcGFnZW1vZGUgPSB5OworICAgICAgICAgIHJldHVy bihzdWNjZXNzID0gMSk7CisgICAgICB9CisgICAgICBjYXNlIFhZVFNOSVNNOiB7ICAgICAgICAg ICAgICAgICAgLyogU0VUIFRFUk0gU05JLVNDUk9MTE1PREUgKi8KKyAgICAgICAgICBleHRlcm4g aW50IHNuaV9zY3JvbGxfbW9kZSwgc25pX3Njcm9sbF9tb2RlX3VzcjsKKyAgICAgICAgICBpZiAo KHkgPSBjbWtleShvbm9mZiwyLCIiLCJvbiIseHhzdHJpbmcpKSA8IDApIHJldHVybih5KTsKKyAg ICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKKyAgICAgICAgICBzbmlf c2Nyb2xsX21vZGVfdXNyID0gc25pX3Njcm9sbF9tb2RlID0geTsKKyAgICAgICAgICByZXR1cm4o c3VjY2VzcyA9IDEpOworICAgICAgfQorICAgICAgY2FzZSBYWVRTTklDQzogeyAgLyogU0VUIFRF Uk0gU05JLUNILkNPREUgKi8KKyAgICAgICAgICBleHRlcm4gaW50IHNuaV9jaGNvZGVfdXNyOwor ICAgICAgICAgIGlmICgoeSA9IGNta2V5KG9ub2ZmLDIsIiIsIm9uIix4eHN0cmluZykpIDwgMCkg cmV0dXJuKHkpOworICAgICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOwor ICAgICAgICAgIHNuaV9jaGNvZGVfdXNyID0geTsKKyAgICAgICAgICBTTklfY2hjb2RlKHkpOwor ICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisgICAgICB9CisgICAgICBjYXNlIFhZVFNO SUZWOiB7ICAvKiBTRVQgVEVSTSBTTkktRklSTVdBUkUtVkVSU0lPTlMgKi8KKyAgICAgICAgICBl eHRlcm4gQ0hBUiBzbmlfa2JkX2Zpcm13YXJlW10sIHNuaV90ZXJtX2Zpcm13YXJlW107CisgICAg ICAgICAgQ0hBUiBrYmRbN10sdGVybVs3XTsKKworICAgICAgICAgIGlmICgoeCA9IGNtZmxkKCJL ZXlib2FyZCBGaXJtd2FyZSBWZXJzaW9uIixzbmlfa2JkX2Zpcm13YXJlLAorICAgICAgICAgICAg ICAgICAgICAgICAgICZzLCB4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICAgIHJldHVybih4KTsK KyAgICAgICAgICBpZiAoKGludClzdHJsZW4ocykgIT0gNikgeworICAgICAgICAgICAgICBwcmlu dGYoIj9Tb3JyeSAtIHRoZSBmaXJtd2FyZSB2ZXJzaW9uIG11c3QgYmUgNiBkaWdpdHMgbG9uZ1xu Iik7CisgICAgICAgICAgICAgIHJldHVybigtOSk7CisgICAgICAgICAgfQorICAgICAgICAgIGZv ciAoaSA9IDA7IGkgPCA2OyBpKyspIHsKKyAgICAgICAgICAgICAgaWYgKCFpc2RpZ2l0KHNbaV0p KSB7CisgICBwcmludGYoIj9Tb3JyeSAtIHRoZSBmaXJtd2FyZSB2ZXJzaW9uIGNhbiBvbmx5IGNv bnRhaW4gZGlnaXRzIFswLTldXG4iKTsKKyAgICAgICAgICAgICAgICAgIHJldHVybigtOSk7Cisg ICAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgICAgY2tzdHJuY3B5KGtiZCxzLDcp OworCisgICAgICAgICAgaWYgKCh4ID0gY21mbGQoIlRlcm1pbmFsIEZpcm13YXJlIFZlcnNpb24i LHNuaV90ZXJtX2Zpcm13YXJlLAorICAgICAgICAgICAgICAgICAgICAgICAgICZzLCB4eHN0cmlu ZykpIDwgMCkKKyAgICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgICBpZiAoKGludClzdHJs ZW4ocykgIT0gNikgeworICAgICAgICAgICAgICBwcmludGYoIj9Tb3JyeSAtIHRoZSBmaXJtd2Fy ZSB2ZXJzaW9uIG11c3QgYmUgNiBkaWdpdHMgbG9uZ1xuIik7CisgICAgICAgICAgICAgIHJldHVy bigtOSk7CisgICAgICAgICAgfQorICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCA2OyBpKyspIHsK KyAgICAgICAgICAgICAgaWYgKCFpc2RpZ2l0KHNbaV0pKSB7CisgICBwcmludGYoIj9Tb3JyeSAt IHRoZSBmaXJtd2FyZSB2ZXJzaW9uIGNhbiBvbmx5IGNvbnRhaW4gZGlnaXRzIFswLTldXG4iKTsK KyAgICAgICAgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICAgICAgICB9CisgICAgICAg ICAgfQorICAgICAgICAgIGNrc3RybmNweSh0ZXJtLHMsNyk7CisgICAgICAgICAgaWYgKCh4ID0g Y21jZm0oKSkgPCAwKSByZXR1cm4oeCk7CisKKyAgICAgICAgICBja3N0cm5jcHkoc25pX2tiZF9m aXJtd2FyZSxrYmQsNyk7CisgICAgICAgICAgY2tzdHJuY3B5KHNuaV90ZXJtX2Zpcm13YXJlLHRl cm0sNyk7CisgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKyAgICB9CisKKyAgICBjYXNl IFhZVExTUDogeyAgICAgICAgICAgICAgLyogU0VUIFRFUk0gTElORS1TUEFDSU5HICovCisgICAg ICAgIGlmICgoeCA9IGNtZmxkKCJMaW5lIFNwYWNpbmciLCIxIiwmcywgeHhzdHJpbmcpKSA8IDAp CisgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICBpZiAoaXNmbG9hdChzLDApIDwgMSkgewkJ LyogKHNldHMgZmxvYXR2YWwpICovCisgICAgICAgICAgICBwcmludGYoIj9JbnRlZ2VyIG9yIGZs b2F0aW5nLXBvaW50IG51bWJlciByZXF1aXJlZFxuIik7CisgICAgICAgICAgICByZXR1cm4oLTkp OworICAgICAgICB9CisgICAgICAgIGlmIChmbG9hdHZhbCA8IDEuMCB8fCBmbG9hdHZhbCA+IDMu MCkgeworICAgICAgICAgICAgcHJpbnRmKCI/VmFsdWUgbXVzdCB3aXRoaW4gdGhlIHJhbmdlIDEu MCBhbmQgMy4wIChpbmNsdXNpdmUpXG4iKTsKKyAgICAgICAgICAgIHJldHVybigtOSk7CisgICAg ICAgIH0KKyAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7CisjaWZkZWYg S1VJCisgICAgICAgIHR0X2xpbmVzcGFjaW5nW1ZDTURdID0gdHRfbGluZXNwYWNpbmdbVlRFUk1d ID0gZmxvYXR2YWw7CisgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisjZWxzZSAvKiBLVUkg Ki8KKyAgICAgICAgcHJpbnRmKCI/U29ycnksIExpbmUtc3BhY2luZyBpcyBvbmx5IHN1cHBvcnRl ZCBpbiBLOTVHLkVYRS5cbiIpOworICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOworI2VuZGlm IC8qIEtVSSAqLworICAgIH0KKyNlbmRpZiAvKiBPUzIgKi8KKworICAgICAgZGVmYXVsdDogICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIFNob3VsZG4ndCBnZXQgaGVyZS4gKi8KKyAgICAgICAg cmV0dXJuKC0yKTsKKyAgICB9CisjZW5kaWYgLyogTUFDICovCisjaWZkZWYgQ09NTUVOVAorICAg IC8qCisgICAgICBUaGlzIHdhcyBzdXBwb3NlZCB0byBzaHV0IHVwIHBpY2t5IGNvbXBpbGVycyBi dXQgaW5zdGVhZCBpdCBtYWtlcworICAgICAgbW9zdCBjb21waWxlcnMgY29tcGxhaW4gYWJvdXQg InN0YXRlbWVudCBub3QgcmVhY2hlZCIuCisgICAgKi8KKyAgICByZXR1cm4oLTIpOworI2VuZGlm IC8qIENPTU1FTlQgKi8KKyNpZmRlZiBPUzIKKyAgICByZXR1cm4oLTIpOworI2VuZGlmIC8qIE9T MiAqLworfQorCisjaWZkZWYgT1MyCitpbnQKK3NldHRpdGxlKHZvaWQpIHsKKyAgICBleHRlcm4g Y2hhciB1c2VydGl0bGVbXTsKKyAgICBpZiAoKHkgPSBjbXR4dCgidGl0bGUgdGV4dCIsIiIsJnMs eHhzdHJpbmcpKSA8IDApCisgICAgICByZXR1cm4oeSk7CisjaWZkZWYgSUtTRAorICAgIGlmIChp bnNlcnZlcikgeworICAgICAgICBwcmludGYoIj9Tb3JyeSwgY29tbWFuZCBkaXNhYmxlZC5cclxu Iik7CisgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7CisgICAgfQorI2VuZGlmIC8qIElLU0Qg Ki8KKyAgICBzID0gYnJzdHJpcChzKTsKKyAgICBja3N0cm5jcHkodXNlcnRpdGxlLHMsNjQpOwor ICAgIG9zMnNldHRpdGxlKCIiLDEpOworICAgIHJldHVybigxKTsKK30KKworc3RhdGljIHN0cnVj dCBrZXl0YWIgZGlhbGVydGFiW10gPSB7ICAgIC8qIEs5NSBEaWFsZXIgdHlwZXMgKi8KKyAgICAi YmFja3NwYWNlIiwgICAgICAgIDAsIDAsCisgICAgImVudGVyIiwgICAgICAgICAgICAxLCAwCit9 Oworc3RhdGljIGludCBuZGlhbGVyID0gMjsKKworaW50CitzZXRkaWFsZXIodm9pZCkgeworICAg IGludCB0LCB4LCB5OworICAgIGludCBjbGVhciA9IDAsIGRlZmx0ID0gMDsKKyAgICBpbnQga2M7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBLZXkgY29kZSAqLworICAgIGNoYXIgKnMg PSBOVUxMOyAgICAgICAgICAgICAgICAgICAgIC8qIEtleSBiaW5kaW5nICovCisjaWZuZGVmIE5P S1ZFUkJTCisgICAgY2hhciAqcCA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgLyogV29ya2Vy ICovCisjZW5kaWYgLyogTk9LVkVSQlMgKi8KKyAgICBjb25fZXZlbnQgZGVmZXZ0OworICAgIGV4 dGVybiBpbnQgb3MyZ2tzOworICAgIGV4dGVybiBpbnQgbXNra2V5czsKKyAgICBleHRlcm4gaW50 IGluaXR2aWs7CisKKyAgICBkZWZldnQudHlwZSA9IGVycm9yOworCisgICAgaWYgKCggeCA9IGNt a2V5KGRpYWxlcnRhYiwgbmRpYWxlciwKKyAgICAgICAgICAgICAgICAgICAgIktlcm1pdC05NSBk aWFsZXIgd29yay1hcm91bmRzIiwKKyAgICAgICAgICAgICAgICAgICAgIiIsIHh4c3RyaW5nKSkg PCAwICkKKyAgICAgIHJldHVybih4KTsKKyAgICBzd2l0Y2ggKHgpIHsKKyAgICAgIGNhc2UgMDog ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBCYWNrc3BhY2UgKi8KKyAgICAgICAga2MgPSAy NjQ7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAxOiAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIEVudGVyICovCisgICAgICAgIGtjID0gMjY5OworICAgICAgICBicmVhazsKKyAgICAg IGRlZmF1bHQ6CisgICAgICAgIHByaW50ZigiSWxsZWdhbCB2YWx1ZSBpbiBzZXRkaWFsZXIoKVxu Iik7CisgICAgICAgIHJldHVybigtOSk7CisgICAgfQorICAgIGlmICgoeSA9IGNtdHh0KCJLZXkg ZGVmaW5pdGlvbiIsIiIsJnMseHhzdHJpbmcpKSA8IDApCisgICAgICByZXR1cm4oeSk7CisKKyNp ZmRlZiBJS1NECisgICAgaWYgKGluc2VydmVyKSB7CisgICAgICAgIHByaW50ZigiP1NvcnJ5LCBj b21tYW5kIGRpc2FibGVkLlxyXG4iKTsKKyAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKyAg ICB9CisjZW5kaWYgLyogSUtTRCAqLworICAgIHMgPSBicnN0cmlwKHMpOworI2lmbmRlZiBOT0tW RVJCUworICAgIHAgPSBzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNhdmUgdGhp cyBwbGFjZSAqLworI2VuZGlmIC8qIE5PS1ZFUkJTICovCisvKgorICBJZiB0aGUgZGVmaW5pdGlv biBpbmNsdWRlZCBhbnkgXEt2ZXJicywgcXVvdGUgdGhlIGJhY2tzbGFzaCBzbyB0aGUgXEt2ZXJi CisgIHdpbGwgc3RpbGwgYmUgaW4gdGhlIGRlZmluaXRpb24gd2hlbiB0aGUga2V5IGlzIHByZXNz ZWQuICBXZSBkb24ndCBkbyB0aGlzCisgIGluIHp6c3RyaW5nKCksIGJlY2F1c2UgXEt2ZXJicyBh cmUgdmFsaWQgb25seSBpbiB0aGlzIGNvbnRleHQgYW5kIG5vd2hlcmUKKyAgZWxzZS4KKworICBX ZSB1c2UgdGhpcyBjb2RlIGFjdGl2ZSBmb3IgYWxsIHZlcnNpb25zIHRoYXQgc3VwcG9ydCBTRVQg S0VZLCBldmVuIGlmIHRoZXkKKyAgZG9uJ3Qgc3VwcG9ydCBcS3ZlcmJzLCBiZWNhdXNlIG90aGVy d2lzZSBcSyB3b3VsZCBiZWhhdmUgZGlmZmVyZW50bHkgZm9yCisgIGRpZmZlcmVudCB2ZXJzaW9u cy4KKyovCisgICAgZm9yICh4ID0gMCwgeSA9IDA7IHNbeF07IHgrKywgeSsrKSB7IC8qIENvbnZl cnQgXEsgdG8gXFxLICovCisgICAgICAgIGlmICgoeCA+IDApICYmCisgICAgICAgICAgICAoc1t4 XSA9PSAnSycgfHwgc1t4XSA9PSAnaycpCisgICAgICAgICAgICApIHsgICAgICAgICAgICAgICAg ICAgICAgICAgLyogSGF2ZSBLICovCisKKyAgICAgICAgICAgIGlmICgoeCA9PSAxICYmIHNbeC0x XSA9PSBDTURRKSB8fAorICAgICAgICAgICAgICAgICh4ID4gMSAmJiBzW3gtMV0gPT0gQ01EUSAm JiBzW3gtMl0gIT0gQ01EUSkpIHsKKyAgICAgICAgICAgICAgICBsaW5lW3krK10gPSBDTURROyAg ICAgICAvKiBNYWtlIGl0IFxcSyAqLworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHgg PiAxICYmIHNbeC0xXSA9PSAneycgJiYgc1t4LTJdID09IENNRFEpIHsKKyAgICAgICAgICAgICAg ICBsaW5lW3ktMV0gPSBDTURROyAgICAgICAvKiBIYXZlIFx7SyAqLworICAgICAgICAgICAgICAg IGxpbmVbeSsrXSA9ICd7JzsgICAgICAgIC8qIE1ha2UgaXQgXFx7SyAqLworICAgICAgICAgICAg fQorICAgICAgICB9CisgICAgICAgIGxpbmVbeV0gPSBzW3hdOworICAgIH0KKyAgICBsaW5lW3kr K10gPSBOVUw7ICAgICAgICAgICAgICAgICAgICAvKiBUZXJtaW5hdGUgKi8KKyAgICBzID0gbGlu ZSArIHkgKyAxOyAgICAgICAgICAgICAgICAgICAvKiBQb2ludCB0byBhZnRlciBpdCAqLworICAg IHggPSBMSU5CVUZTSVogLSAoaW50KSBzdHJsZW4obGluZSkgLSAxOyAvKiBDYWxjdWxhdGUgcmVt YWluaW5nIHNwYWNlICovCisgICAgaWYgKCh4IDwgKExJTkJVRlNJWiAvIDIpKSB8fAorICAgICAg ICAoenpzdHJpbmcobGluZSwgJnMsICZ4KSA8IDApKSB7IC8qIEV4cGFuZCB2YXJpYWJsZXMsIGV0 Yy4gKi8KKyAgICAgICAgcHJpbnRmKCI/S2V5IGRlZmluaXRpb24gdG9vIGxvbmdcbiIpOworICAg ICAgICByZXR1cm4oLTkpOworICAgIH0KKyAgICBzID0gbGluZSArIHkgKyAxOyAgICAgICAgICAg ICAgICAgICAvKiBQb2ludCB0byByZXN1bHQuICovCisKKyNpZm5kZWYgTk9LVkVSQlMKKy8qCisg IFNwZWNpYWwgY2FzZTogc2VlIGlmIHRoZSBkZWZpbml0aW9uIHN0YXJ0cyB3aXRoIGEgXEt2ZXJi LgorICBJZiBpdCBkb2VzLCBwb2ludCB0byBpdCB3aXRoIHAsIG90aGVyd2lzZSBzZXQgcCB0byBO VUxMLgorKi8KKyAgICBwID0gczsKKyAgICBpZiAoKnArKyA9PSBDTURRKSB7CisgICAgICAgIGlm ICgqcCA9PSAneycpIHArKzsKKyAgICAgICAgcCA9ICgqcCA9PSAnaycgfHwgKnAgPT0gJ0snKSA/ IHAgKyAxIDogTlVMTDsKKyAgICB9CisjZW5kaWYgLyogTk9LVkVSQlMgKi8KKworICAgIC8qIENs ZWFyIHRoZSBkZWZpbml0aW9uIGZvciBTRVQgS0VZICovCisgICAgaWYgKG1hY3JvdGFiW2tjXSkg eyAgICAgICAgICAgICAgICAgLyogUG9zc2libHkgZnJlZSBvbGQgbWFjcm8gZnJvbSBrZXkuICov CisgICAgICAgIGZyZWUoKGNoYXIgKiltYWNyb3RhYltrY10pOworICAgICAgICBtYWNyb3RhYltr Y10gPSBOVUxMOworICAgIH0KKyAgICBrZXltYXBba2NdID0gKEtFWSkga2M7CisKKyAgICAvKiBO b3cgcmVwcm9ncmFtIHRoZSBkZWZhdWx0IHZhbHVlIGZvciBhbGwgdGVybWluYWwgdHlwZXMgKi8K KyAgICAvKiByZW1lbWJlciB0byB0cmVhdCBXeXNlIGFuZCBUZWxldmlkZW8gdGVybWluYWxzIHNw ZWNpYWwgKi8KKyAgICAvKiBiZWNhdXNlIG9mIHRoZWlyIHVzZSBvZiBLdmVyYnMgZm9yIEJhY2tz cGFjZSBhbmQgRW50ZXIgKi8KKyAgICBmb3IgKHQgPSAwOyB0IDw9IFRUX01BWDsgdCsrKSB7Cisg ICAgICAgIGlmICggSVNERzIwMCh0KSAmJiBrYyA9PSAyNjQpIHsKKyAgICAgICAgICAgIGV4dGVy biBjaGFyICogdWRrZmtleXNbXSA7CisgICAgICAgICAgICBpZiAoa2MgPT0gMjY0KSB7ICAgICAg ICAgICAgLyogXEtkZ2JzICovCisgICAgICAgICAgICAgICAgaWYgKHVka2ZrZXlzWzgzXSkKKyAg ICAgICAgICAgICAgICAgIGZyZWUodWRrZmtleXNbODNdKTsKKyAgICAgICAgICAgICAgICB1ZGtm a2V5c1s4M10gPSBzdHJkdXAocyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAo SVNXWVNFKHQpIHx8IElTVFZJKHQpKSB7CisgICAgICAgICAgICBleHRlcm4gY2hhciAqIHVka2Zr ZXlzW10gOworICAgICAgICAgICAgaWYgKGtjID09IDI2NCkgeyAgICAgICAgICAgIC8qIFxLd3li cyBvciBcS3R2aWJzICovCisgICAgICAgICAgICAgICAgaWYgKHVka2ZrZXlzWzMyXSkKKyAgICAg ICAgICAgICAgICAgIGZyZWUodWRrZmtleXNbMzJdKTsKKyAgICAgICAgICAgICAgICB1ZGtma2V5 c1szMl0gPSBzdHJkdXAocyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoa2MgPT0g MjY5KSB7ICAgICAgICAgICAgLyogXEt3eWVudGVyIGFuZCBcS3d5cmV0dXJuICovCisgICAgICAg ICAgICAgICAgaWYgKHVka2ZrZXlzWzM5XSkgICAgICAgLyogXEt0dmllbnRlciBhbmQgXEt0dmly ZXR1cm4gKi8KKyAgICAgICAgICAgICAgICAgIGZyZWUodWRrZmtleXNbMzldKTsKKyAgICAgICAg ICAgICAgICB1ZGtma2V5c1szOV0gPSBzdHJkdXAocyk7CisgICAgICAgICAgICAgICAgaWYgKHVk a2ZrZXlzWzQ5XSkKKyAgICAgICAgICAgICAgICAgIGZyZWUodWRrZmtleXNbNDldKTsKKyAgICAg ICAgICAgICAgICB1ZGtma2V5c1s0OV0gPSBzdHJkdXAocyk7CisgICAgICAgICAgICB9CisgICAg ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzd2l0Y2ggKHN0cmxlbihzKSkgeyAgICAgICAgLyog QWN0aW9uIGRlcGVuZHMgb24gbGVuZ3RoICovCisgICAgICAgICAgICAgIGNhc2UgMDogICAgICAg ICAgICAgICAgICAgLyogQ2xlYXIgaW5kaXZpZHVhbCBrZXkgZGVmICovCisgICAgICAgICAgICAg ICAgZGVsZXRla2V5bWFwKHQsa2MpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg ICAgICBjYXNlIDE6CisgICAgICAgICAgICAgICAgZGVmZXZ0LnR5cGUgPSBrZXk7ICAgICAgLyog U2luZ2xlIGNoYXJhY3RlciAqLworICAgICAgICAgICAgICAgIGRlZmV2dC5rZXkuc2NhbmNvZGUg PSAqczsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDogICAg ICAgICAgICAgICAgICAvKiBDaGFyYWN0ZXIgc3RyaW5nICovCisjaWZuZGVmIE5PS1ZFUkJTCisg ICAgICAgICAgICAgICAgaWYgKHApIHsKKyAgICAgICAgICAgICAgICAgICAgeSA9IHhsb29rdXAo a3ZlcmJzLHAsbmt2ZXJicywmeCk7IC8qIExvb2sgaXQgdXAgKi8KKyAgICAgICAgICAgICAgICAg ICAgLyogRXhhY3QgbWF0Y2ggcmVxJ2QgKi8KKyAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEw MSwic2V0IGtleSBrdmVyYiBsb29rdXAiLDAseSk7CisgICAgICAgICAgICAgICAgICAgIGlmICh5 ID4gLTEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmV2dC50eXBlID0ga3ZlcmI7Cisg ICAgICAgICAgICAgICAgICAgICAgICBkZWZldnQua3ZlcmIuaWQgPSB5OworICAgICAgICAgICAg ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ICB9CisjZW5kaWYgLyogTk9LVkVSQlMgKi8KKyAgICAgICAgICAgICAgICBkZWZldnQudHlwZSA9 IG1hY3JvOworICAgICAgICAgICAgICAgIGRlZmV2dC5tYWNyby5zdHJpbmcgPSAoY2hhciAqKSBt YWxsb2Moc3RybGVuKHMpKzEpOworICAgICAgICAgICAgICAgIGlmIChkZWZldnQubWFjcm8uc3Ry aW5nKQorICAgICAgICAgICAgICAgICAgc3RyY3B5KGRlZmV2dC5tYWNyby5zdHJpbmcsIHMpOyAv KiBzYWZlICovCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAg ICAgICBpbnNlcnRrZXltYXAoIHQsIGtjLCBkZWZldnQgKSA7CisgICAgICAgICAgICBpbml0dmlr ID0gMTsgICAgICAgICAgICAgICAgLyogVXBkYXRlIFZJSyB0YWJsZSAqLworICAgICAgICB9Cisg ICAgfQorICAgIHJldHVybigxKTsKK30KKyNlbmRpZiAvKiBPUzIgKi8KKworI2lmZGVmIE5UCitp bnQKK3NldHdpbjk1KCB2b2lkICkgeworICAgIGludCB4LCB5LCB6OworCisgICAgaWYgKCggeSA9 IGNta2V5KHdpbjk1dGFiLCBud2luOTUsCisgICAgICAgICAgICAgICAgICAgICJXaW5kb3dzIDk1 IHNwZWNpZmljIHdvcmstYXJvdW5kcyIsCisgICAgICAgICAgICAgICAgICAgICJrZXlib2FyZC10 cmFuc2xhdGlvbiIsCisgICAgICAgICAgICAgICAgICAgIHh4c3RyaW5nKSkgPCAwICkKKyAgICAg ICAgcmV0dXJuICh5KTsKKyAgICBzd2l0Y2ggKHkpIHsKKyAgICAgIGNhc2UgWFlXUE9QVVA6Cisg ICAgICAgIGlmICgoeSA9IGNta2V5KG9ub2ZmLDIsInBvcHVwcyBhcmUgdXNlZCB0byBwcm9tcHQg dGhlIHVzZXIgZm9yIGRhdGEiLAorICAgICAgICAgICAgICAgICAgICAgICAib24iLHh4c3RyaW5n KSkgPCAwKQorICAgICAgICAgIHJldHVybih5KTsKKyAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkg PCAwKSByZXR1cm4oeCk7CisgICAgICAgIHdpbjk1X3BvcHVwID0geTsKKyAgICAgICAgcmV0dXJu KDEpOworCisgICAgICBjYXNlIFhZVzhfMzoKKyAgICAgICAgaWYgKCh5ID0gY21rZXkob25vZmYs MiwiOC4zIEZBVCBmaWxlIG5hbWVzIiwib2ZmIix4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICBy ZXR1cm4oeSk7CisgICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOworICAg ICAgICB3aW45NV84XzMgPSB5OworICAgICAgICByZXR1cm4oMSk7CisKKyAgICAgIGNhc2UgWFlX U0VMRUNUOgorICAgICAgICBpZiAoKHkgPSBjbWtleShvbm9mZiwyLCJcInNlbGVjdCgpXCIgZmFp bHMgb24gd3JpdGUiLCJvZmYiLAorICAgICAgICAgICAgIHh4c3RyaW5nKSkgPCAwKQorICAgICAg ICAgIHJldHVybih5KTsKKyAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7 CisgICAgICAgIHdpbjk1c2VsZWN0YnVnID0geTsKKyAgICAgICAgcmV0dXJuKDEpOworCisgICAg ICBjYXNlIFhZV0FHUjoKKyAgICAgICAgaWYgKCh5ID0gY21rZXkob25vZmYsMiwiUmlnaHQtQWx0 IGlzIEFsdC1HciIsIm9mZiIseHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgcmV0dXJuKHkpOwor ICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKKyAgICAgICAgd2luOTVh bHRnciA9IHk7CisgICAgICAgIHJldHVybigxKTsKKworICAgICAgY2FzZSBYWVdPSU86CisgICAg ICAgIGlmICgoeSA9IGNta2V5KG9ub2ZmLDIsIlVzZSBPdmVybGFwcGVkIEkvTyIsIm9uIix4eHN0 cmluZykpIDwgMCkKKyAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgIGlmICh5KSB7CisgICAg ICAgICAgICBpZiAoKHggPSBjbW51bSgiTWF4aW11bSBudW1iZXIgb2Ygb3V0c3RhbmRpbmcgSS9P IHJlcXVlc3RzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICIxMCIsMTAsJnoseHhzdHJp bmcpKSA8IDApCisgICAgICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgICAgIGlmICh6IDwg MSB8fCB6ID4gNykgeworICAgICAgICAgICAgICAgIHByaW50ZigKKyI/TWF4aW11bSBvdXRzdGFu ZGluZyBJL08gcmVxdWVzdHMgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDcuXG4iKTsKKyAgICAgICAg ICAgICAgICByZXR1cm4oLTkpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UKKyAgICAg ICAgICB6ID0gMTsKKyAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7Cisg ICAgICAgIG93d2FpdCA9ICF5OworICAgICAgICBtYXhvdyA9IG1heG93X3VzciA9IHo7CisgICAg ICAgIHJldHVybigxKTsKKworICAgICAgY2FzZSBYWVdLRVk6CisjaWZuZGVmIENPTU1FTlQKKyAg ICAgICAgcHJpbnRmKCJcbj9cIktleWJvYXJkLVRyYW5zbGF0aW9uXCIgaXMgbm8gbG9uZ2VyIHJl cXVpcmVkLlxuIik7CisgICAgICAgIHJldHVybigtOSk7CisjZWxzZSAvKiBDT01NRU5UICovCisg ICAgICAgIGlmICgoIHogPSBjbWtleSh0Y3N0YWIsIG50Y3MsCisgICAgICAgICAgICAgICAgICAg ICAgICAiS2V5Ym9hcmQgQ2hhcmFjdGVyIFNldCIsCisgICAgICAgICAgICAgICAgICAgICAgICAi bGF0aW4xLWlzbyIsCisgICAgICAgICAgICAgICAgICAgICAgICB4eHN0cmluZykpIDwgMCkKKyAg ICAgICAgICByZXR1cm4gKHopOworICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApCisgICAg ICAgICAgcmV0dXJuKHgpOworCisgICAgICAgIHdpbjk1a2NzaSA9IHo7CisgICAgICAgIHdpbjk1 a2wyID0gKHdpbjk1a2NzaSA9PSBUQ18yTEFUSU4pOworCisgICAgICAgIGlmICh3aW45NWtjc2kg PT0gVENfVFJBTlNQKSB7CisgICAgICAgICAgICB3aW45NWtjcyA9IE5VTEw7CisgICAgICAgIH0g ZWxzZSB7CisjaWZkZWYgVU5JQ09ERQorICAgICAgICAgICAgd2luOTVrY3MgPSB4bHJbd2luOTVr Y3NpXVt0eDJmYyh0Y3NsKV07CisjZWxzZSAvKiBVTklDT0RFICovCisgICAgICAgICAgICB3aW45 NWtjcyA9IHhsclt3aW45NWtjc2ldW3Rjc2xdOworI2VuZGlmIC8qIFVOSUNPREUgKi8KKyAgICAg ICAgfQorICAgICAgICByZXR1cm4oMSk7CisjZW5kaWYgLyogQ09NTUVOVCAqLworCisgICAgICBj YXNlIFhZV0xVQzoKKyAgICAgICAgaWYgKCh5ID0gY21rZXkob25vZmYsMiwiVW5pY29kZS10by1M dWNpZGEtQ29uc29sZSBzdWJzdGl0dXRpb25zIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIm9u Iix4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgIGlmICgoeCA9 IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOworICAgICAgICB3aW45NWx1Y2lkYSA9IHk7CisgICAg ICAgIHJldHVybigxKTsKKworICAgICAgY2FzZSBYWVdIU0w6CisJaWYgKCh5ID0gY21rZXkob25v ZmYsMiwiSG9yaXpvbnRhbCBTY2FuIExpbmUgc3Vic3RpdHV0aW9ucyIsCisJCSAgICAgICAib24i LHh4c3RyaW5nKSkgPCAwKQorCSAgcmV0dXJuKHkpOworCWlmICgoeCA9IGNtY2ZtKCkpIDwgMCkg cmV0dXJuKHgpOworCXdpbjk1aHNsID0geTsKKwlyZXR1cm4oMSk7CisKKyAgICAgIGRlZmF1bHQ6 CisgICAgICAgIHByaW50ZigiSWxsZWdhbCB2YWx1ZSBpbiBzZXR3aW45NSgpXG4iKTsKKyAgICAg ICAgcmV0dXJuKC05KTsKKyAgICB9Cit9CisjZW5kaWYgLyogTlQgKi8KKworI2lmZGVmIE9TMgor aW50CitzZXRwcnR5ICgKKyNpZmRlZiBDS19BTlNJQworICAgIHZvaWQKKyNlbmRpZiAvKiBDS19B TlNJQyAqLworLyogc2V0cHJ0eSAqLyApIHsKKyAgICBpbnQgeCwgeSwgejsKKworICAgIGlmICgo IHkgPSBjbWtleShwcnR5dGFiLCBucHJ0eSwKKyAgICAgICAgICAgICAgICAgICAgInByaW9yaXR5 IGxldmVsIG9mIHRlcm1pbmFsIGFuZCBjb21tdW5pY2F0aW9uIHRocmVhZHMiLAorICAgICAgICAg ICAgICAgICAgICAiZm9yZWdyb3VuZC1zZXJ2ZXIiLAorICAgICAgICAgICAgICAgICAgICB4eHN0 cmluZykpIDwgMCApCisgICAgICByZXR1cm4gKHkpOworCisgICAgaWYgKCh4ID0gY21jZm0oKSkg PCAwKQorICAgICAgcmV0dXJuICh4KTsKKyNpZmRlZiBJS1NECisgICAgaWYgKGluc2VydmVyICYm CisjaWZkZWYgSUtTRENPTkYKKyAgICAgICAgIGlrc2RjZgorI2Vsc2UKKyAgICAgICAgIDEKKyNl bmRpZiAvKiBJS1NEQ09ORiAqLworICAgICkgeworICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8 IDApIHJldHVybih5KTsKKyAgICAgICAgcHJpbnRmKCI/U29ycnksIGNvbW1hbmQgZGlzYWJsZWQu XHJcbiIpOworICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOworICAgIH0KKyNlbmRpZiAvKiBJ S1NEICovCisgICAgcHJpb3JpdHkgPSB5OworICAgIHJldHVybihUUlVFKTsKK30KKyNlbmRpZiAv KiBPUzIgKi8KKworaW50CitzZXRiZWxsKCkgeworICAgIGludCB5LCB4OworI2lmZGVmIE9TMgor ICAgIGludCB6OworI2VuZGlmIC8qIE9TMiAqLworCisgICAgaWYgKCh5ID0gY21rZXkoYmVsdGFi LG5iZWx0YWIsCisjaWZkZWYgT1MyCisgICAgICAgICJob3cgY29uc29sZSBhbmQgdGVybWluYWwg YmVsbHMgc2hvdWxkXG5iZSBnZW5lcmF0ZWQiLCAiYXVkaWJsZSIsCisjZWxzZQorICAgICAgICAi V2hldGhlciBLZXJtaXQgc2hvdWxkIHJpbmcgdGhlIHRlcm1pbmFsIGJlbGwgKGJlZXApIiwgIm9u IiwKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAgICAgICAgICAgICB4eHN0cmluZykpIDwgMCkK KyAgICAgICAgICByZXR1cm4oeSk7CisKKyNpZmRlZiBJS1NECisgICAgaWYgKGluc2VydmVyKSB7 CisgICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkpOworICAgICAgICBwcmlu dGYoIj9Tb3JyeSwgY29tbWFuZCBkaXNhYmxlZC5cclxuIik7CisgICAgICAgIHJldHVybihzdWNj ZXNzID0gMCk7CisgICAgfQorI2VuZGlmIC8qIElLU0QgKi8KKworICAgIHN3aXRjaCAoeSkgeyAg ICAgICAgICAgICAgICAgICAgICAgIC8qIFNFVCBCRUxMICovCisgICAgICBjYXNlIFhZQl9OT05F OgorI2lmZGVmIE9TMgorICAgICAgY2FzZSBYWUJfVklTOgorI2VuZGlmIC8qIE9TMiAqLworICAg ICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApCisgICAgICAgICAgcmV0dXJuKHgpOworI2lmZGVm IE9TMgorICAgICAgICB0dF9iZWxsID0geTsKKyNlbHNlCisgICAgICAgIHR0X2JlbGwgPSAwOwor I2VuZGlmIC8qIE9TMiAqLworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBYWUJfQVVEOgor I2lmZGVmIE9TMgorICAgICAgICBpZiAoKHggPSBjbWtleShhdWRpYmxldGFiLCBuYXVkaWJsZXRh YiwKKyAgICAgICAgICAgICAgICJob3cgYXVkaWJsZSBjb25zb2xlIGFuZCB0ZXJtaW5hbFxuYmVs bHMgc2hvdWxkIGJlIGdlbmVyYXRlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICJiZWVwIix4 eHN0cmluZykpPDApCisgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICBpZiAoKHogPSBjbWNm bSgpKSA8IDApCisgICAgICAgICAgcmV0dXJuKHopOworICAgICAgICB0dF9iZWxsID0geSB8IHg7 CisjZWxzZQorICAgICAgICAvKiBUaGlzIGxldHMgQy1LZXJtaXQgYWNjZXB0IGJ1dCBpZ25vcmUg dHJhaWxpbmcgSzk1IGtleXdvcmRzICovCisgICAgICAgIGlmICgoeCA9IGNtdHh0KCJDb25maXJt IHdpdGggY2FycmlhZ2UgcmV0dXJuIiwiIiwmcyx4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICBy ZXR1cm4oeCk7CisgICAgICAgIHR0X2JlbGwgPSAxOworI2VuZGlmIC8qIE9TMiAqLworICAgICAg ICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuKDEpOworfQorCisjaWZkZWYgT1MyTU9VU0UKK2lu dAorc2V0bW91KAorI2lmZGVmIENLX0FOU0lDCisgICAgICAgdm9pZAorI2VuZGlmIC8qIENLX0FO U0lDICovCisgLyogc2V0bW91ICovICkgeworICAgIGV4dGVybiBpbnQgaW5pdHZpazsKKyAgICBp bnQgYnV0dG9uID0gMCwgZXZlbnQgPSAwOworICAgIGNoYXIgKiBwOworCisgICAgaWYgKCh5ID0g Y21rZXkobW91c2V0YWIsbm10YWIsIiIsIiIseHhzdHJpbmcpKSA8IDApCisgICAgICByZXR1cm4o eSk7CisKKyNpZmRlZiBJS1NECisgICAgaWYgKGluc2VydmVyKSB7CisgICAgICAgIGlmICgoeSA9 IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkpOworICAgICAgICBwcmludGYoIj9Tb3JyeSwgY29tbWFu ZCBkaXNhYmxlZC5cclxuIik7CisgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7CisgICAgfQor I2VuZGlmIC8qIElLU0QgKi8KKworICAgIGlmICh5ID09IFhZTV9PTikgeyAgICAgICAgICAgICAg ICAgIC8qIE1PVVNFIEFDVElWQVRJT04gKi8KKyAgICAgICAgaW50IG9sZF9tb3UgPSB0dF9tb3Vz ZTsKKyAgICAgICAgaWYgKCh4ID0gc2V0b24oJnR0X21vdXNlKSkgPCAwKQorICAgICAgICAgICAg cmV0dXJuKHgpOworICAgICAgICBpZiAodHRfbW91c2UgIT0gb2xkX21vdSkKKyAgICAgICAgICBp ZiAodHRfbW91c2UpCisgICAgICAgICAgICBvczJfbW91c2VvbigpOworICAgICAgICAgIGVsc2UK KyAgICAgICAgICAgIG9zMl9tb3VzZW9mZigpOworICAgICAgICByZXR1cm4oMSk7CisgICAgfQor CisgICAgaWYgKHkgPT0gWFlNX0RFQlVHKSB7ICAgICAgICAgICAgICAgLyogTU9VU0UgREVCVUcg Ki8KKyAgICAgICAgZXh0ZXJuIGludCBNb3VzZURlYnVnOworICAgICAgICBpZiAoKHggPSBzZXRv bigmTW91c2VEZWJ1ZykpIDwgMCkKKyAgICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgcmV0 dXJuKDEpOworICAgIH0KKworICAgIGlmICh5ID09IFhZTV9DTEVBUikgeyAgICAgICAgICAgICAg IC8qIFJlc2V0IE1vdXNlIERlZmF1bHRzICovCisgICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwg MCkgcmV0dXJuKHgpOworICAgICAgICBtb3VzZW1hcGluaXQoLTEsLTEpOworICAgICAgICBpbml0 dmlrID0gMTsgICAgICAgICAgICAgICAgICAgIC8qIFVwZGF0ZSBWSUsgVGFibGUgKi8KKyAgICAg ICAgcmV0dXJuIDE7CisgICAgfQorICAgIGlmICh5ICE9IFhZTV9CVVRUT04pIHsgICAgICAgICAg ICAgIC8qIFNob3VsZG4ndCBoYXBwZW4uICovCisgICAgICAgIHByaW50ZigiSW50ZXJuYWwgcGFy c2luZyBlcnJvclxuIik7CisgICAgICAgIHJldHVybigtOSk7CisgICAgfQorCisgICAgLyogTU9V U0UgRVZFTlQgLi4uICovCisKKyAgICBpZiAoKGJ1dHRvbiA9IGNta2V5KG1vdXNlYnV0dG9udGFi LG5tYnRhYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJCdXR0b24gbnVtYmVyIiwiMSIsCisg ICAgICAgICAgICAgICAgICAgICAgICB4eHN0cmluZykpIDwgMCkKKyAgICAgIHJldHVybihidXR0 b24pOworCisgICAgaWYgKCh5ID0gIGNta2V5KG1vdXNlbW9kdGFiLG5tbXRhYiwKKyAgICAgICAg ICAgICAgICAgICAgIktleWJvYXJkIG1vZGlmaWVyIiwibm9uZSIsCisgICAgICAgICAgICAgICAg ICAgIHh4c3RyaW5nKSkgPCAwKQorICAgICAgcmV0dXJuKHkpOworCisgICAgZXZlbnQgfD0geTsg ICAgICAgICAgICAgICAgICAgICAgICAgLyogT1IgaW4gdGhlIGJpdHMgKi8KKworICAgIGlmICgo eSA9ICBjbWtleShtY2xpY2t0YWIsbm1jdGFiLCIiLCJjbGljayIseHhzdHJpbmcpKSA8IDApCisg ICAgICByZXR1cm4oeSk7CisKKyAgICAvKiBUd28gYml0cyBhcmUgYXNzaWduZWQsIGlmIG5laXRo ZXIgYXJlIHNldCB0aGVuIGl0IGlzIGJ1dHRvbiBvbmUgKi8KKworICAgIGV2ZW50IHw9IHk7ICAg ICAgICAgICAgICAgICAvKiBPUiBpbiB0aGUgYml0ICovCisKKyAgICB3aWRlcmVzdWx0ID0gLTE7 CisKKyAgICBpZiAoKHkgPSBjbXR4dCgiZGVmaW5pdGlvbixcblwKK29yIEN0cmwtQyB0byBjYW5j ZWwgdGhpcyBjb21tYW5kLFxuXAorb3IgRW50ZXIgdG8gcmVzdG9yZSBkZWZhdWx0IGRlZmluaXRp b24iLAorICAgICAgICAgICAgICAgICAgICIiLCZzLE5VTEwpKSA8IDApIHsKKyAgICAgICAgcmV0 dXJuKHkpOworICAgIH0KKyAgICBzID0gYnJzdHJpcChzKTsKKyAgICBwID0gczsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBTYXZlIHRoaXMgcGxhY2UgKi8KKy8qCisgIElmIHRoZSBk ZWZpbml0aW9uIGluY2x1ZGVkIGFueSBcS3ZlcmJzLCBxdW90ZSB0aGUgYmFja3NsYXNoIHNvIHRo ZSBcS3ZlcmIKKyAgd2lsbCBzdGlsbCBiZSBpbiB0aGUgZGVmaW5pdGlvbiB3aGVuIHRoZSBrZXkg aXMgcHJlc3NlZC4gIFdlIGRvbid0IGRvIHRoaXMKKyAgaW4genpzdHJpbmcoKSwgYmVjYXVzZSBc S3ZlcmJzIGFyZSB2YWxpZCBvbmx5IGluIHRoaXMgY29udGV4dCBhbmQgbm93aGVyZQorICBlbHNl LiAgVGhpcyBjb2RlIGNvcGllZCBmcm9tIFNFVCBLRVksIHEudi4gZm9yIGFkZHQnbCBjb21tZW50 YXJ5LgorKi8KKyAgICBmb3IgKHggPSAwLCB5ID0gMDsgc1t4XTsgeCsrLCB5KyspIHsgLyogQ29u dmVydCBcSyB0byBcXEsgKi8KKyAgICAgICAgaWYgKCh4ID4gMCkgJiYKKyAgICAgICAgICAgIChz W3hdID09ICdLJyB8fCBzW3hdID09ICdrJykKKyAgICAgICAgICAgICkgeyAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBIYXZlIEsgKi8KKworICAgICAgICAgICAgaWYgKCh4ID09IDEgJiYgc1t4 LTFdID09IENNRFEpIHx8CisgICAgICAgICAgICAgICAgKHggPiAxICYmIHNbeC0xXSA9PSBDTURR ICYmIHNbeC0yXSAhPSBDTURRKSkgeworICAgICAgICAgICAgICAgIGxpbmVbeSsrXSA9IENNRFE7 ICAgICAgIC8qIE1ha2UgaXQgXFxLICovCisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo eCA+IDEgJiYgc1t4LTFdID09ICd7JyAmJiBzW3gtMl0gPT0gQ01EUSkgeworICAgICAgICAgICAg ICAgIGxpbmVbeS0xXSA9IENNRFE7ICAgICAgIC8qIEhhdmUgXHtLICovCisgICAgICAgICAgICAg ICAgbGluZVt5KytdID0gJ3snOyAgICAgICAgLyogTWFrZSBpdCBcXHtLICovCisgICAgICAgICAg ICB9CisgICAgICAgIH0KKyAgICAgICAgbGluZVt5XSA9IHNbeF07CisgICAgfQorICAgIGxpbmVb eSsrXSA9IE5VTDsgICAgICAgICAgICAgICAgICAgIC8qIFRlcm1pbmF0ZSAqLworICAgIHMgPSBs aW5lICsgeSArIDE7ICAgICAgICAgICAgICAgICAgIC8qIFBvaW50IHRvIGFmdGVyIGl0ICovCisg ICAgeCA9IExJTkJVRlNJWiAtIChpbnQpIHN0cmxlbihsaW5lKSAtIDE7IC8qIENhbGN1bGF0ZSBy ZW1haW5pbmcgc3BhY2UgKi8KKyAgICBpZiAoKHggPCAoTElOQlVGU0laIC8gMikpIHx8CisgICAg ICAgICh6enN0cmluZyhsaW5lLCAmcywgJngpIDwgMCkpIHsgLyogRXhwYW5kIHZhcmlhYmxlcywg ZXRjLiAqLworICAgICAgICBwcmludGYoIj9LZXkgZGVmaW5pdGlvbiB0b28gbG9uZ1xuIik7Cisg ICAgICAgIHJldHVybigtOSk7CisgICAgfQorICAgIHMgPSBsaW5lICsgeSArIDE7ICAgICAgICAg ICAgICAgICAgIC8qIFBvaW50IHRvIHJlc3VsdC4gKi8KKworI2lmbmRlZiBOT0tWRVJCUworLyoK KyAgU3BlY2lhbCBjYXNlOiBzZWUgaWYgdGhlIGRlZmluaXRpb24gc3RhcnRzIHdpdGggYSBcS3Zl cmIuCisgIElmIGl0IGRvZXMsIHBvaW50IHRvIGl0IHdpdGggcCwgb3RoZXJ3aXNlIHNldCBwIHRv IE5VTEwuCisqLworICAgIHAgPSBzOworICAgIGlmICgqcCsrID09IENNRFEpIHsKKyAgICAgICAg aWYgKCpwID09ICd7JykgcCsrOworICAgICAgICBwID0gKCpwID09ICdrJyB8fCAqcCA9PSAnSycp ID8gcCArIDEgOiBOVUxMOworICAgIH0KKyNlbHNlCisgICAgcCA9IE5VTEw7CisjZW5kaWYgLyog Tk9LVkVSQlMgKi8KKworICAgIC8qIGZyZWUgdGhlIG9sZCBkZWZpbml0aW9uIGlmIG5lY2Vzc2Fy eSAqLworICAgIGlmIChtb3VzZW1hcFtidXR0b25dW2V2ZW50XS50eXBlID09IG1hY3JvKSB7Cisg ICAgICAgIGZyZWUoIG1vdXNlbWFwW2J1dHRvbl1bZXZlbnRdLm1hY3JvLnN0cmluZyk7CisgICAg ICAgIG1vdXNlbWFwW2J1dHRvbl1bZXZlbnRdLm1hY3JvLnN0cmluZyA9IE5VTEw7CisgICAgfQor ICAgIHN3aXRjaCAoc3RybGVuKHMpKSB7ICAgICAgICAgICAgICAgIC8qIEFjdGlvbiBkZXBlbmRz IG9uIGxlbmd0aCAqLworICAgICAgY2FzZSAwOiAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IFJlc2V0IHRvIGRlZmF1bHQgYmluZGluZyAqLworICAgICAgICBtb3VzZW1hcGluaXQoIGJ1dHRv biwgZXZlbnQgKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIDE6ICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogU2luZ2xlIGNoYXJhY3RlciAqLworICAgICAgICAgICAgbW91c2VtYXBb YnV0dG9uXVtldmVudF0udHlwZSA9IGtleTsKKyAgICAgICAgbW91c2VtYXBbYnV0dG9uXVtldmVu dF0ua2V5LnNjYW5jb2RlID0gKnM7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDogICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIENoYXJhY3RlciBzdHJpbmcgKi8KKyNpZm5kZWYgTk9L VkVSQlMKKyAgICAgICAgaWYgKHApIHsKKyAgICAgICAgICAgIHkgPSB4bG9va3VwKGt2ZXJicyxw LG5rdmVyYnMsJngpOyAvKiBMb29rIGl0IHVwICovCisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJz ZXQgbW91c2Uga3ZlcmIgbG9va3VwIiwwLHkpOyAvKiBuZWVkIGV4YWN0IG1hdGNoICovCisgICAg ICAgICAgICBpZiAoeSA+IC0xKSB7CisgICAgICAgICAgICAvKiBBc3NpZ24gdGhlIGt2ZXJiIHRv IHRoZSBldmVudCAqLworICAgICAgICAgICAgbW91c2VtYXBbYnV0dG9uXVtldmVudF0udHlwZSA9 IGt2ZXJiOworICAgICAgICAgICAgbW91c2VtYXBbYnV0dG9uXVtldmVudF0ua3ZlcmIuaWQgPSBG X0tWRVJCIHwgeTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9 CisjZW5kaWYgLyogTk9LVkVSQlMgKi8KKworICAgICAgIC8qIE90aGVyd2lzZSwgaXQncyBhIG1h Y3JvLCBzbyBhc3NpZ24gdGhlIG1hY3JvIHRvIHRoZSBldmVudCAqLworICAgICAgIG1vdXNlbWFw W2J1dHRvbl1bZXZlbnRdLnR5cGUgPSBtYWNybzsKKyAgICAgICBtb3VzZW1hcFtidXR0b25dW2V2 ZW50XS5tYWNyby5zdHJpbmcgPSAoTUFDUk8pIG1hbGxvYyhzdHJsZW4ocykrMSk7CisgICAgICAg aWYgKG1vdXNlbWFwW2J1dHRvbl1bZXZlbnRdLm1hY3JvLnN0cmluZykKKyAgICAgICAgIHN0cmNw eSgoY2hhciAqKSBtb3VzZW1hcFtidXR0b25dW2V2ZW50XS5tYWNyby5zdHJpbmcsIHMpOyAvKiBz YWZlICovCisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBpbml0dmlrID0gMTsgICAgICAgICAg ICAgICAgICAgICAgICAvKiBVcGRhdGUgVklLIFRhYmxlICovCisgICAgaWYgKCAoYnV0dG9uID09 IFhZTV9CMykgJiYgKG1vdXNlYnV0dG9uY291bnQoKSA8IDMpICYmICFxdWlldCApCisgICAgewor ICAgICAgICBwcmludGYoIj9XYXJuaW5nOiB0aGlzIG1hY2hpbmUgZG9lcyBub3QgaGF2ZSBhIHRo cmVlIGJ1dHRvbiBtb3VzZS5cbiIpOworICAgICAgICByZXR1cm4oMCk7CisgICAgfQorICAgIHJl dHVybigxKTsKK30KKyNlbmRpZiAvKiBPUzJNT1VTRSAqLworI2VuZGlmIC8qIE5PTE9DQUwgKi8K KworI2lmbmRlZiBOT1hGRVIKK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBTRVQgU0VORC9SRUNFSVZFICovCitzZXRzcih4eCwgcm1zZmxnKSBpbnQgeHg7IGludCBy bXNmbGc7IHsKKyAgICBpZiAoeHggPT0gWFlSRUNWKQorICAgICAgY2tzdHJuY3B5KGxpbmUsIlBh cmFtZXRlciBmb3IgaW5ib3VuZCBwYWNrZXRzIixMSU5CVUZTSVopOworICAgIGVsc2UKKyAgICAg IGNrc3RybmNweShsaW5lLCJQYXJhbWV0ZXIgZm9yIG91dGJvdW5kIHBhY2tldHMiLExJTkJVRlNJ Wik7CisKKyAgICBpZiAocm1zZmxnKSB7CisgICAgICAgIGlmICgoeSA9IGNta2V5KHJzcnRhYixu cnNydGFiLGxpbmUsIiIseHhzdHJpbmcpKSA8IDApIHsKKyAgICAgICAgICAgIGlmICh5ID09IC0z KSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCI/UmVtb3RlIHJlY2VpdmUgcGFyYW1ldGVyIHJl cXVpcmVkXG4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICAgICAgfSBl bHNlIHJldHVybih5KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGlmICgoeSA9 IGNta2V5KHNydGFiLG5zcnRhYixsaW5lLCIiLHh4c3RyaW5nKSkgPCAwKSByZXR1cm4oeSk7Cisg ICAgfQorICAgIHN3aXRjaCAoeSkgeworICAgICAgY2FzZSBYWVFDVEw6ICAgICAgICAgICAgICAg ICAgICAgIC8qIENPTlRST0wtUFJFRklYICovCisgICAgICAgIGlmICgoeCA9IGNtbnVtKCJBU0NJ SSB2YWx1ZSBvZiBjb250cm9sIHByZWZpeCIsIiIsMTAsJnkseHhzdHJpbmcpKSA8IDApCisgICAg ICAgICAgcmV0dXJuKHgpOworICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4 KTsKKyAgICAgICAgaWYgKCh5ID4gMzIgJiYgeSA8IDYzKSB8fCAoeSA+IDk1ICYmIHkgPCAxMjcp KSB7CisgICAgICAgICAgICBpZiAoeHggPT0gWFlSRUNWKQorICAgICAgICAgICAgICBjdGxxID0g KENIQVIpIHk7ICAgICAgICAgIC8qIFJFQ0VJVkUgcHJlZml4LCB1c2Ugd2l0aCBjYXV0aW9uISAq LworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBteWN0bHEgPSAoQ0hBUikgeTsgICAg ICAgIC8qIFNFTkQgcHJlZml4LCBPSyB0byBjaGFuZ2UgKi8KKyAgICAgICAgICAgIHJldHVybihz dWNjZXNzID0gMSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwcmludGYoIj9JbGxl Z2FsIHZhbHVlIGZvciBwcmVmaXggY2hhcmFjdGVyXG4iKTsKKyAgICAgICAgICAgIHJldHVybigt OSk7CisgICAgICAgIH0KKworICAgICAgY2FzZSBYWUVPTDoKKyAgICAgICAgaWYgKCh5ID0gc2V0 Y2MoIjEzIiwmeikpIDwgMCkKKyAgICAgICAgICAgIHJldHVybih5KTsKKyAgICAgICAgaWYgKHog PiAzMSkgeworICAgICAgICAgICAgcHJpbnRmKCJTb3JyeSwgdGhlIGxlZ2FsIHZhbHVlcyBhcmUg MC0zMVxuIik7CisgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICB9CisgICAgICAgIGlm ICh4eCA9PSBYWVJFQ1YpCisgICAgICAgICAgZW9sID0gKENIQVIpIHo7CisgICAgICAgIGVsc2UK KyAgICAgICAgICBzZW9sID0gKENIQVIpIHo7CisgICAgICAgIHJldHVybihzdWNjZXNzID0geSk7 CisKKyAgICAgIGNhc2UgWFlMRU46CisgICAgICAgIHkgPSBjbW51bSgiTWF4aW11bSBudW1iZXIg b2YgY2hhcmFjdGVycyBpbiBhIHBhY2tldCIsIjkwIiwxMCwmeCwKKyAgICAgICAgICAgICAgICAg IHh4c3RyaW5nKTsKKyAgICAgICAgaWYgKHh4ID09IFhZUkVDVikgeyAgICAgICAgICAgICAvKiBS ZWNlaXZlLi4uICovCisgICAgICAgICAgICBpZiAoKHkgPSBzZXRudW0oJnoseCx5LG1heHJwcykp IDwgMCkKKyAgICAgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICAgICAgaWYgKHByb3RvY29s ICE9IFBST1RPX0spIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIj9Tb3JyeSwgdGhpcyBjb21t YW5kIGRvZXMgbm90IGFwcGx5IHRvICVzIHByb3RvY29sLlxuIiwKKyAgICAgICAgICAgICAgICAg ICAgICAgcHRhYltwcm90b2NvbF0ucF9uYW1lCisgICAgICAgICAgICAgICAgICAgICAgICk7Cisg ICAgICAgICAgICAgICAgcHJpbnRmKCJVc2UgU0VUIFNFTkQgUEFDS0VULUxFTkdUSCBmb3IgWFla TU9ERU1cbiIpOworICAgICAgICAgICAgICAgIHJldHVybigtOSk7CisgICAgICAgICAgICB9Cisg ICAgICAgICAgICBpZiAoeiA8IDEwKSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCJTb3JyeSwg MTAgaXMgdGhlIG1pbmltdW1cbiIpOworICAgICAgICAgICAgICAgIHJldHVybigtOSk7CisgICAg ICAgICAgICB9CisgICAgICAgICAgICBpZiAocm1zZmxnKSB7CisgICAgICAgICAgICAgICAgc3N0 YXRlID0gc2V0Z2VuKCdTJywgIjQwMSIsIGNraXRvYSh6KSwgIiIpOworICAgICAgICAgICAgICAg IHJldHVybigoaW50KSBzc3RhdGUpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg ICAgICBpZiAocHJvdG9jb2wgPT0gUFJPVE9fSykgeworICAgICAgICAgICAgICAgICAgICBpZiAo eiA+IE1BWFJQKSB6ID0gTUFYUlA7CisgICAgICAgICAgICAgICAgICAgIHkgPSBhZGpwa2woeix3 c2xvdHIsYmlncmJzaXopOworICAgICAgICAgICAgICAgICAgICBpZiAoeSAhPSB6KSB7CisgICAg ICAgICAgICAgICAgICAgICAgICB1cnBzaXogPSB5OworICAgICAgICAgICAgICAgICAgICAgICAg aWYgKCF4Y21kc3JjKQorICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobXNnZmxnKSBwcmlu dGYoCisiIEFkanVzdGluZyByZWNlaXZlIHBhY2tldC1sZW5ndGggdG8gJWQgZm9yICVkIHdpbmRv dyBzbG90c1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHksIHdzbG90cik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg dXJwc2l6ID0geTsKKyAgICAgICAgICAgICAgICAgICAgcHRhYltwcm90b2NvbF0ucnBrdGxlbiA9 IHVycHNpejsKKyAgICAgICAgICAgICAgICAgICAgcnBzaXogPSAgKHkgPiA5NCkgPyA5NCA6IHk7 CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyNpZmRlZiBDS19YWVoKKyAgICAgICAgICAgICAg ICAgICAgaWYgKChwcm90b2NvbCA9PSBQUk9UT19YIHx8IHByb3RvY29sID09IFBST1RPX1hDKSAm JgorICAgICAgICAgICAgICAgICAgICAgICAgIHogIT0gMTI4ICYmIHogIT0gMTAyNCkgeworICAg ICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJTb3JyeSwgYmFkIHBhY2tldCBsZW5ndGggZm9y IFhNT0RFTS5cbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJQbGVhc2UgdXNl IDEyOCBvciAxMDI0LlxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTkpOwor ICAgICAgICAgICAgICAgICAgICB9CisjZW5kaWYgLyogQ0tfWFlaICovCisgICAgICAgICAgICAg ICAgICAgIHVycHNpeiA9IHJwc2l6ID0gejsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICB9CisgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogU2VuZC4uLiAq LworICAgICAgICAgICAgaWYgKCh5ID0gc2V0bnVtKCZ6LHgseSxtYXhzcHMpKSA8IDApCisgICAg ICAgICAgICAgIHJldHVybih5KTsKKyAgICAgICAgICAgIGlmICh6IDwgMTApIHsKKyAgICAgICAg ICAgICAgICBwcmludGYoIlNvcnJ5LCAxMCBpcyB0aGUgbWluaW11bVxuIik7CisgICAgICAgICAg ICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChwcm90b2Nv bCA9PSBQUk9UT19LKSB7CisgICAgICAgICAgICAgICAgaWYgKHogPiBNQVhTUCkgeiA9IE1BWFNQ OworICAgICAgICAgICAgICAgIHNwc2l6ID0gejsgICAgICAgICAgICAgIC8qIFNldCBpdCAqLwor ICAgICAgICAgICAgICAgIHkgPSBhZGpwa2woc3BzaXosd3Nsb3RyLGJpZ3Nic2l6KTsKKyAgICAg ICAgICAgICAgICBpZiAoeSAhPSBzcHNpeiAmJiAheGNtZHNyYykKKyAgICAgICAgICAgICAgICAg IGlmIChtc2dmbGcpCisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiQWRqdXN0aW5nIHBhY2tl dCBzaXplIHRvICVkIGZvciAlZCB3aW5kb3cgc2xvdHNcbiIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICB5LHdzbG90cik7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgeSA9 IHo7CisjaWZkZWYgQ0tfWFlaCisgICAgICAgICAgICBpZiAoKHByb3RvY29sID09IFBST1RPX1gg fHwgcHJvdG9jb2wgPT0gUFJPVE9fWEMpICYmCisgICAgICAgICAgICAgICAgIHogIT0gMTI4ICYm IHogIT0gMTAyNCkgeworICAgICAgICAgICAgICAgIHByaW50ZigiU29ycnksIGJhZCBwYWNrZXQg bGVuZ3RoIGZvciBYTU9ERU0uXG4iKTsKKyAgICAgICAgICAgICAgICBwcmludGYoIlBsZWFzZSB1 c2UgMTI4IG9yIDEwMjQuXG4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAg ICAgICAgfQorI2VuZGlmIC8qIENLX1hZWiAqLworICAgICAgICAgICAgc3BzaXogPSBzcG1heCA9 IHNwc2l6ciA9IHk7IC8qIFNldCBpdCBhbmQgZmxhZyB0aGF0IGl0IHdhcyBzZXQgKi8KKyAgICAg ICAgICAgIHNwc2l6ZiA9IDE7ICAgICAgICAgICAgICAgICAvKiB0byBhbGxvdyBvdmVycmlkaW5n IFNlbmQtSW5pdC4gKi8KKyAgICAgICAgICAgIHB0YWJbcHJvdG9jb2xdLnNwa3RmbGcgPSBzcHNp emY7CisgICAgICAgICAgICBwdGFiW3Byb3RvY29sXS5zcGt0bGVuID0gc3BzaXo7CisgICAgICAg IH0KKyAgICAgICAgaWYgKHBmbGFnICYmIHByb3RvY29sID09IFBST1RPX0sgJiYgIXhjbWRzcmMp IHsKKyAgICAgICAgICAgIGlmICh6ID4gOTQgJiYgIXJlbGlhYmxlICYmIG1zZ2ZsZykgeworICAg ICAgICAgICAgICAgIC8qIHByaW50ZigiRXh0ZW5kZWQtbGVuZ3RoIHBhY2tldHMgcmVxdWVzdGVk LlxuIik7ICovCisgICAgICAgICAgICAgICAgaWYgKGJjdHIgPCAyICYmIHogPiAyMDApIHByaW50 ZigiXAorUmVtZW1iZXIgdG8gU0VUIEJMT0NLIDIgb3IgMyBmb3IgbG9uZyBwYWNrZXRzLlxuIik7 CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc3BlZWQgPD0gMEwpIHNwZWVkID0gdHRn c3BkKCk7CisjaWZkZWYgQ09NTUVOVAorLyoKKyAgS2VybWl0IGRvZXMgdGhpcyBub3cgaXRzZWxm LgorKi8KKyAgICAgICAgICAgIGlmIChzcGVlZCA8PSAwTCAmJiB6ID4gMjAwICYmIG1zZ2ZsZykg eworICAgICAgICAgICAgICAgIHByaW50ZigiXAorTWFrZSBzdXJlIHlvdXIgdGltZW91dCBpbnRl cnZhbCBpcyBsb25nIGVub3VnaCBmb3IgJWQtYnl0ZSBwYWNrZXRzLlxuIix6KTsKKyAgICAgICAg ICAgIH0KKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuKHN1 Y2Nlc3MgPSB5KTsKKworICAgICAgY2FzZSBYWU1BUks6CisjaWZkZWYgRE9PTVNEQVkKKy8qCisg IFByaW50YWJsZSBzdGFydC1vZi1wYWNrZXQgd29ya3MgZm9yIFVOSVggYW5kIFZNUyBvbmx5IQor Ki8KKyAgICAgICAgeF9pZm51bSA9IDE7CisgICAgICAgIHkgPSBjbW51bSgiQ29kZSBmb3IgcGFj a2V0LXN0YXJ0IGNoYXJhY3RlciIsIjEiLDEwLCZ4LHh4c3RyaW5nKTsKKyAgICAgICAgeF9pZm51 bSA9IDA7CisgICAgICAgIGlmICgoeSA9IHNldG51bSgmeix4LHksMTI2KSkgPCAwKSByZXR1cm4o eSk7CisjZWxzZQorICAgICAgICBpZiAoKHkgPSBzZXRjYygiMSIsJnopKSA8IDApCisgICAgICAg ICAgICByZXR1cm4oeSk7CisjZW5kaWYgLyogRE9PTVNEQVkgKi8KKyAgICAgICAgaWYgKHh4ID09 IFhZUkVDVikKKyAgICAgICAgICBzdGNociA9IChDSEFSKSB6OworICAgICAgICBlbHNlIHsKKyAg ICAgICAgICAgIG15c3RjaCA9IChDSEFSKSB6OworI2lmZGVmIElLU19PUFRJT04KKyAgICAgICAg ICAgIC8qIElmIElLUyBuZWdvdGlhdGlvbiBpbiB1c2UgICAqLworICAgICAgICAgICAgaWYgKFRF TE9QVF9VKFRFTE9QVF9LRVJNSVQpIHx8IFRFTE9QVF9NRShURUxPUFRfS0VSTUlUKSkKKyAgICAg ICAgICAgICAgdG5fc2lrcyhLRVJNSVRfU09QKTsgICAgICAvKiBSZXBvcnQgY2hhbmdlIHRvIG90 aGVyIHNpZGUgKi8KKyNlbmRpZiAvKiBJS1NfT1BUSU9OICovCisgICAgICAgIH0KKyAgICAgICAg cmV0dXJuKHN1Y2Nlc3MgPSB5KTsKKworICAgICAgY2FzZSBYWU5QQUQ6ICAgICAgICAgICAgICAg ICAgICAgIC8qIFBBRERJTkcgKi8KKyAgICAgICAgeSA9IGNtbnVtKCJIb3cgbWFueSBwYWRkaW5n IGNoYXJhY3RlcnMgZm9yIGluYm91bmQgcGFja2V0cyIsIjAiLDEwLCZ4LAorICAgICAgICAgICAg ICAgICAgeHhzdHJpbmcpOworICAgICAgICBpZiAoKHkgPSBzZXRudW0oJnoseCx5LDk0KSkgPCAw KSByZXR1cm4oeSk7CisgICAgICAgIGlmICh4eCA9PSBYWVJFQ1YpCisgICAgICAgICAgbXlwYWRu ID0gKENIQVIpIHo7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBucGFkID0gKENIQVIpIHo7Cisg ICAgICAgIHJldHVybihzdWNjZXNzID0geSk7CisKKyAgICAgIGNhc2UgWFlQQURDOiAgICAgICAg ICAgICAgICAgICAgICAvKiBQQUQtQ0hBUkFDVEVSICovCisgICAgICAgIGlmICgoeSA9IHNldGNj KCIwIiwmeikpIDwgMCkgcmV0dXJuKHkpOworICAgICAgICBpZiAoeHggPT0gWFlSRUNWKSBteXBh ZGMgPSB6OyBlbHNlIHBhZGNoID0gejsKKyAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSB5KTsKKwor ICAgICAgY2FzZSBYWVRJTU86ICAgICAgICAgICAgICAgICAgICAgIC8qIFRJTUVPVVQgKi8KKyAg ICAgICAgaWYgKHh4ID09IFhZUkVDVikgeworICAgICAgICAgICAgeSA9IGNtbnVtKCJQYWNrZXQg dGltZW91dCBpbnRlcnZhbCIsY2tpdG9hKFVSVElNRSksMTAsJngseHhzdHJpbmcpOworICAgICAg ICAgICAgaWYgKCh5ID0gc2V0bnVtKCZ6LHgseSw5NCkpIDwgMCkgcmV0dXJuKHkpOworCisgICAg ICAgICAgICBpZiAocm1zZmxnKSB7ICAgICAgICAgICAgICAgLyogUkVNT1RFIFNFVCBSRUNFSVZF IFRJTUVPVVQgKi8KKyAgICAgICAgICAgICAgICBzc3RhdGUgPSBzZXRnZW4oJ1MnLCAiNDAyIiwg Y2tpdG9hKHopLCAiIik7CisgICAgICAgICAgICAgICAgcmV0dXJuKChpbnQpIHNzdGF0ZSk7Cisg ICAgICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgLyogU0VUIFJFQ0VJVkUgVElN RU9VVCAqLworICAgICAgICAgICAgICAgIHBrdHRpbSA9IHo7ICAgICAgICAgICAgIC8qICAgVmFs dWUgdG8gcHV0IGluIG15IG5lZ290aWF0aW9uICovCisgICAgICAgICAgICB9ICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogICBwYWNrZXQgZm9yIG90aGVyIEtlcm1pdCB0byB1c2UgKi8KKwor ICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNFVCBTRU5EIFRJTUVP VVQgKi8KKyNpZmRlZiBDS19USU1FUlMKKyAgICAgICAgICAgIGV4dGVybiBpbnQgcnR0ZmxnLCBt aW50aW1lLCBtYXh0aW1lOworICAgICAgICAgICAgaW50IHRtaW4gPSAwLCB0bWF4ID0gMDsKKyNl bmRpZiAvKiBDS19USU1FUlMgKi8KKyAgICAgICAgICAgIHkgPSBjbW51bSgiUGFja2V0IHRpbWVv dXQgaW50ZXJ2YWwiLGNraXRvYShETVlUSU0pLDEwLCZ4LHh4c3RyaW5nKTsKKyAgICAgICAgICAg IGlmICh5ID09IC0zKSB7ICAgICAgICAgICAgICAvKiBUaGV5IGNhbmNlbGxlZCBhIHByZXZpb3Vz ICovCisgICAgICAgICAgICAgICAgeCA9IERNWVRJTTsgICAgICAgICAgICAgLyogU0VUIFNFTkQg Y29tbWFuZCwgc28gcmVzdG9yZSAqLworICAgICAgICAgICAgICAgIHRpbWVmID0gMDsgICAgICAg ICAgICAgIC8qIGFuZCB0dXJuIG9mZiB0aGUgb3ZlcnJpZGUgZmxhZyAqLworICAgICAgICAgICAg ICAgIHkgPSBjbWNmbSgpOworICAgICAgICAgICAgfQorI2lmZGVmIENLX1RJTUVSUworICAgICAg ICAgICAgaWYgKHkgPCAwKSByZXR1cm4oeSk7CisgICAgICAgICAgICBpZiAoeCA8IDApIHsKKyAg ICAgICAgICAgICAgICBwcmludGYoIj9PdXQgb2YgcmFuZ2UgLSAlZFxuIix4KTsKKyAgICAgICAg ICAgICAgICByZXR1cm4oLTkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCh6ID0g Y21rZXkodGltb3RhYiwyLCIiLCJkeW5hbWljIix4eHN0cmluZykpIDwgMCkgcmV0dXJuKHopOwor ICAgICAgICAgICAgaWYgKHopIHsKKyAgICAgICAgICAgICAgICBpZiAoKHkgPSBjbW51bSgiTWlu aW11bSB0aW1lb3V0IHRvIGFsbG93IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi MSIsMTAsJnRtaW4seHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgICAgICAgICByZXR1cm4oeSk7 CisgICAgICAgICAgICAgICAgaWYgKHRtaW4gPCAxKSB7CisgICAgICAgICAgICAgICAgICAgIHBy aW50ZigiP091dCBvZiByYW5nZSAtICVkXG4iLHRtaW4pOworICAgICAgICAgICAgICAgICAgICBy ZXR1cm4oLTkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoKHkgPSBj bW51bSgiTWF4aW11bSB0aW1lb3V0IHRvIGFsbG93IiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAiMCIsMTAsJnRtYXgseHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgICAgICAgICBy ZXR1cm4oeSk7CisgICAgICAgICAgICAgICAgLyogMCBtZWFucyBsZXQgS2VybWl0IGNob29zZSwg PCAwIG1lYW5zIG5vIG1heGltdW0gKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgo eSA9IGNtY2ZtKCkpIDwgMCkKKyAgICAgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICAgICAg cnR0ZmxnID0gejsgICAgICAgICAgICAgICAgIC8qIFJvdW5kLXRyaXAgdGltZXIgZmxhZyAqLwor ICAgICAgICAgICAgeiA9IHg7CisjZWxzZQorICAgICAgICAgICAgaWYgKCh5ID0gc2V0bnVtKCZ6 LHgseSw5NCkpIDwgMCkKKyAgICAgICAgICAgICAgcmV0dXJuKHkpOworI2VuZGlmIC8qIENLX1RJ TUVSUyAqLworICAgICAgICAgICAgdGltZWYgPSAxOyAgICAgICAgICAgICAgICAgIC8qIFR1cm4g b24gdGhlIG92ZXJyaWRlIGZsYWcgKi8KKyAgICAgICAgICAgIHRpbWludCA9IHJ0aW1vID0gejsg ICAgICAgICAvKiBPdmVycmlkZSB2YWx1ZSBmb3IgbWUgdG8gdXNlICovCisjaWZkZWYgQ0tfVElN RVJTCisgICAgICAgICAgICBpZiAocnR0ZmxnKSB7ICAgICAgICAgICAgICAgLyogTG93ZXIgYW5k IHVwcGVyIGJvdW5kcyAqLworICAgICAgICAgICAgICAgIG1pbnRpbWUgPSB0bWluOworICAgICAg ICAgICAgICAgIG1heHRpbWUgPSB0bWF4OworICAgICAgICAgICAgfQorI2VuZGlmIC8qIENLX1RJ TUVSUyAqLworICAgICAgICB9CisgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisKKyAgICAg IGNhc2UgWFlGUEFUSDogICAgICAgICAgICAgICAgICAgICAvKiBQQVRITkFNRVMgKi8KKyAgICAg ICAgaWYgKHh4ID09IFhZUkVDVikgeworICAgICAgICAgICAgeSA9IGNta2V5KHJwYXRodGFiLG5y cGF0aHRhYiwiIiwiYXV0byIseHhzdHJpbmcpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg ICAgeSA9IGNta2V5KHBhdGh0YWIsbnBhdGh0YWIsIiIsIm9mZiIseHhzdHJpbmcpOworICAgICAg ICB9CisgICAgICAgIGlmICh5IDwgMCkgcmV0dXJuKHkpOworCisgICAgICAgIGlmICgoeCA9IGNt Y2ZtKCkpIDwgMCkgcmV0dXJuKHgpOworICAgICAgICBpZiAoeHggPT0gWFlSRUNWKSB7ICAgICAg ICAgICAgIC8qIFNFVCBSRUNFSVZFIFBBVEhOQU1FUyAqLworICAgICAgICAgICAgZm5ycGF0aCA9 IHk7CisgICAgICAgICAgICBwdGFiW3Byb3RvY29sXS5mbnJwID0gZm5ycGF0aDsKKyAgICAgICAg fSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBTRVQgU0VORCBQQVRITkFNRVMgKi8K KyAgICAgICAgICAgIGZuc3BhdGggPSB5OworICAgICAgICAgICAgcHRhYltwcm90b2NvbF0uZm5z cCA9IGZuc3BhdGg7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsgICAg ICAgICAgICAvKiBOb3RlOiAwID0gT04sIDEgPSBPRkYgKi8KKyAgICAgICAgLyogSW4gb3RoZXIg d29yZHMsIE9OID0gbGVhdmUgcGF0aG5hbWVzIE9OLCBPRkYgPSB0YWtlIHRoZW0gb2ZmLiAqLwor CisgICAgICBjYXNlIFhZUEFVUzogICAgICAgICAgICAgICAgICAgICAgLyogU0VUIFNFTkQvUkVD RUlWRSBQQVVTRSAqLworICAgICAgICB5ID0gY21udW0oIk1pbGxpc2Vjb25kcyB0byBwYXVzZSBi ZXR3ZWVuIHBhY2tldHMiLCIwIiwxMCwmeCx4eHN0cmluZyk7CisgICAgICAgIGlmICgoeSA9IHNl dG51bSgmeix4LHksMTUwMDApKSA8IDApCisgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICBw a3RwYXVzID0gejsKKyAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKworI2lmZGVmIENLWFhD SEFSICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNFVCBTRU5EL1JFQ0VJVkUgSUdOT1JFL0RP VUJMRSAqLworICAgICAgY2FzZSBYWUlHTjoKKyAgICAgIGNhc2UgWFlEQkw6IHsKKyAgICAgICAg ICBpbnQgaSwgeno7CisgICAgICAgICAgc2hvcnQgKnA7CisgICAgICAgICAgZXh0ZXJuIHNob3J0 IGRibHRbXTsKKyAgICAgICAgICBleHRlcm4gaW50IGRibGZsYWcsIGlnbmZsYWc7CisKKyAgICAg ICAgICAvKiBNYWtlIHNwYWNlIGZvciBhIHRlbXBvcmFyeSBjb3B5IG9mIHRoZSBpZ25vcmUvZG91 YmxlIHRhYmxlICovCisKKyAgICAgICAgICB6eiA9IHk7CisjaWZkZWYgQ09NTUVOVAorICAgICAg ICAgIGlmICh6eiA9PSBYWUlHTiAmJiB4eCA9PSBYWVNFTkQpIHsKKyAgICAgICAgICAgICAgYmxh aCBibGFoIHdobyBjYXJlcworICAgICAgICAgIH0KKyAgICAgICAgICBpZiAoenogPT0gWFlEQkwg JiYgeHggPT0gWFlSRUNWKSB7CisgICAgICAgICAgICAgIGJsYWggYmxhaAorICAgICAgICAgIH0K KyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgICAgICAgcCA9IChzaG9ydCAqKW1hbGxvYygyNTYg KiBzaXplb2Yoc2hvcnQpKTsKKyAgICAgICAgICBpZiAoIXApIHsKKyAgICAgICAgICAgICAgcHJp bnRmKCI/SW50ZXJuYWwgZXJyb3IgLSBtYWxsb2MgZmFpbHVyZVxuIik7CisgICAgICAgICAgICAg IHJldHVybigtOSk7CisgICAgICAgICAgfQorICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAyNTY7 IGkrKykgcFtpXSA9IGRibHRbaV07IC8qIENvcHkgY3VycmVudCB0YWJsZSAqLworCisgICAgICAg ICAgd2hpbGUgKDEpIHsgICAgICAgICAgICAgICAgICAgLyogQ29sbGVjdCBhIGxpc3Qgb2YgbnVt YmVycyAqLworI2lmbmRlZiBOT1NQTAorICAgICAgICAgICAgICB4X2lmbnVtID0gMTsgICAgICAg ICAgICAgIC8qIFR1cm4gb2ZmIGNvbXBsYWludHMgZnJvbSBldmFsKCkgKi8KKyNlbmRpZiAvKiBO T1NQTCAqLworICAgICAgICAgICAgICBpZiAoKHggPSBjbW51bSh6eiA9PSBYWURCTCA/CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICJDaGFyYWN0ZXIgdG8gZG91YmxlIiA6CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICJDaGFyYWN0ZXIgdG8gaWdub3JlIiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIiIsMTAsJnkseHhzdHJpbmcKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKSkgPCAwKSB7CisjaWZuZGVmIE5PU1BMCisgICAgICAgICAgICAgICAgICB4X2lm bnVtID0gMDsKKyNlbmRpZiAvKiBOT1NQTCAqLworICAgICAgICAgICAgICAgICAgaWYgKHggPT0g LTMpICAgICAgICAgIC8qIERvbmUgKi8KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICAgICAgICAgICBpZiAoeCA9PSAtMikgeworICAgICAgICAgICAgICAgICAgICAgIGlmIChw KSB7IGZyZWUocCk7IHAgPSBOVUxMOyB9CisgICAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEx MCwiU0VUIFMvUiBET1VCTEUvSUdOT1JFIGF0bWJ1ZiIsYXRtYnVmLDApOworICAgICAgICAgICAg ICAgICAgICAgIGlmICghY2tzdHJjbXAoYXRtYnVmLCJub25lIiw0LDApIHx8CisgICAgICAgICAg ICAgICAgICAgICAgICAgICFja3N0cmNtcChhdG1idWYsIm5vbiIsMywwKSB8fAorICAgICAgICAg ICAgICAgICAgICAgICAgICAhY2tzdHJjbXAoYXRtYnVmLCJubyIsMiwwKSB8fAorICAgICAgICAg ICAgICAgICAgICAgICAgICAhY2tzdHJjbXAoYXRtYnVmLCJuIiwxLDApKSB7CisgICAgICAgICAg ICAgICAgICAgICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgLyogR2V0IGNvbmZpcm1hdGlv biAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgZm9yICh5ID0gMDsgeSA8IDI1NjsgeSsrKQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGRibHRbeV0gJj0gKHp6ID09IFhZREJMKSA/IDEgOiAyOworICAgICAgICAg ICAgICAgICAgICAgICAgICBpZiAoenogPT0gWFlEQkwpIGRibGZsYWcgPSAwOworICAgICAgICAg ICAgICAgICAgICAgICAgICBpZiAoenogPT0gWFlJR04pIGlnbmZsYWcgPSAwOworICAgICAgICAg ICAgICAgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworICAgICAgICAgICAgICAgICAg ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAiP1BsZWFzZSBzcGVjaWZ5IGEgbnVtYmVyIG9yIHRoZSB3b3Jk IE5PTkVcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAg ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg ICAgICAgICAgICAgZnJlZShwKTsKKyAgICAgICAgICAgICAgICAgICAgICBwID0gTlVMTDsKKyAg ICAgICAgICAgICAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgIH0KKyNpZm5kZWYgTk9TUEwKKyAgICAgICAgICAgICAgeF9pZm51bSA9IDA7Cisj ZW5kaWYgLyogTk9TUEwgKi8KKyAgICAgICAgICAgICAgaWYgKHkgPCAwIHx8IHkgPiAyNTUpIHsK KyAgICAgICAgICAgICAgICAgIHByaW50ZigiP1BsZWFzZSBlbnRlciBhIGNoYXJhY3RlciBjb2Rl IGluIHJhbmdlIDAtMjU1XG4iKTsKKyAgICAgICAgICAgICAgICAgIGZyZWUocCk7CisgICAgICAg ICAgICAgICAgICBwID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgIHJldHVybigtOSk7CisgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgcFt5XSB8PSAoenogPT0gWFlEQkwpID8gMiA6IDE7 CisgICAgICAgICAgICAgIGlmICh6eiA9PSBYWURCTCkgZGJsZmxhZyA9IDE7CisgICAgICAgICAg ICAgIGlmICh6eiA9PSBYWUlHTikgaWduZmxhZyA9IDE7CisgICAgICAgICAgfSAvKiBFbmQgb2Yg d2hpbGUgbG9vcCAqLworCisgICAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4o eCk7CisvKgorICBHZXQgaGVyZSBvbmx5IGlmIHRoZXkgaGF2ZSBtYWRlIG5vIG1pc3Rha2VzLiAg Q29weSB0ZW1wb3JhcnkgdGFibGUgYmFjayB0bworICBwZXJtYW5lbnQgb25lLCB0aGVuIGZyZWUg dGVtcG9yYXJ5IHRhYmxlIGFuZCByZXR1cm4gc3VjY2Vzc2Z1bGx5LgorKi8KKyAgICAgICAgICBp ZiAocCkgeworICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIGRibHRbaV0g PSBwW2ldOworICAgICAgICAgICAgICBmcmVlKHApOworICAgICAgICAgICAgICBwID0gTlVMTDsK KyAgICAgICAgICB9CisgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKyAgICAgIH0KKyNl bmRpZiAvKiBDS1hYQ0hBUiAqLworCisjaWZkZWYgUElQRVNFTkQKKyAgICAgIGNhc2UgWFlGTFRS OiB7ICAgICAgICAgICAgICAgICAgICAvKiBTRVQgeyBTRU5ELCBSRUNFSVZFIH0gRklMVEVSICov CisgICAgICAgICAgaWYgKCh5ID0gY210eHQoKHh4ID09IFhZU0VORCkgPworICAgICAgICAgICAg ICAgICJGaWx0ZXIgcHJvZ3JhbSBmb3Igc2VuZGluZyBmaWxlcyAtXG5cCisgdXNlIFxcdihmaWxl bmFtZSkgdG8gc3Vic3RpdHV0ZSBmaWxlbmFtZSIgOgorICAgICAgICAgICAgICAgICJGaWx0ZXIg cHJvZ3JhbSBmb3IgcmVjZWl2aW5nIGZpbGVzIC1cblwKKyB1c2UgXFx2KGZpbGVuYW1lKSB0byBz dWJzdGl0dXRlIGZpbGVuYW1lIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiIiwmcyxOVUxM KSkgPCAwKQorICAgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICAgIGlmICghKnMpIHsgICAg ICAgICAgICAgICAgICAgIC8qIFJlbW92aW5nIGEgZmlsdGVyLi4uICovCisgICAgICAgICAgICAg IGlmICh4eCA9PSBYWVNFTkQgJiYgc25kZmlsdGVyKSB7CisgICAgICAgICAgICAgICAgICBtYWtl c3RyKCZnX3NmaWx0ZXIsTlVMTCk7CisgICAgICAgICAgICAgICAgICBtYWtlc3RyKCZzbmRmaWx0 ZXIsTlVMTCk7CisgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmN2ZmlsdGVyKSB7CisgICAgICAg ICAgICAgICAgICBtYWtlc3RyKCZnX3JmaWx0ZXIsTlVMTCk7CisgICAgICAgICAgICAgICAgICBt YWtlc3RyKCZyY3ZmaWx0ZXIsTlVMTCk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg cmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKyAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBBZGRpbmcgYSBmaWx0ZXIuLi4gKi8KKyAgICAgICAgICBzID0gYnJzdHJpcChzKTsg ICAgICAgICAgICAgICAvKiBTdHJpcCBhbnkgYnJhY2VzICovCisgICAgICAgICAgeSA9IHN0cmxl bihzKTsKKyAgICAgICAgICBpZiAoeHggPT0gWFlTRU5EKSB7ICAgICAgICAgICAvKiBGb3IgU0VO RCBmaWx0ZXIuLi4gKi8KKyAgICAgICAgICAgICAgZm9yICh4ID0gMDsgeCA8IHk7IHgrKykgeyAv KiBtYWtlIHN1cmUgdGhleSBpbmNsdWRlZCAiXHYoLi4uKSIgKi8KKyAgICAgICAgICAgICAgICAg IGlmIChzW3hdICE9ICdcXCcpIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgaWYgKHNbeCsx XSA9PSAndicpIGJyZWFrOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGlmICh4ID09 IHkpIHsKKyAgICAgICAgICAgICAgICAgIHByaW50ZigKKyAgICAgICAgICAgICAgIj9GaWx0ZXIg bXVzdCBjb250YWluIGEgcmVwbGFjZW1lbnQgdmFyaWFibGUgZm9yIGZpbGVuYW1lLlxuIgorICAg ICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgICByZXR1cm4oLTkpOwor ICAgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAgIGlmICh4eCA9PSBYWVNFTkQp IHsKKyAgICAgICAgICAgICAgbWFrZXN0cigmc25kZmlsdGVyLHMpOworICAgICAgICAgICAgICBt YWtlc3RyKCZnX3NmaWx0ZXIscyk7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg bWFrZXN0cigmcmN2ZmlsdGVyLHMpOworICAgICAgICAgICAgICBtYWtlc3RyKCZnX3JmaWx0ZXIs cyk7CisgICAgICAgICAgfQorICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisgICAgICB9 CisjZW5kaWYgLyogUElQRVNFTkQgKi8KKworICAgICAgY2FzZSBYWUlOSUw6CisgICAgICAgIHkg PSBjbW51bSgiTWF4IGxlbmd0aCBmb3IgcHJvdG9jb2wgaW5pdCBzdHJpbmciLCItMSIsMTAsJngs eHhzdHJpbmcpOworICAgICAgICBpZiAoKHkgPSBzZXRudW0oJnoseCx5LC0xKSkgPCAwKQorICAg ICAgICAgIHJldHVybih5KTsKKyAgICAgICAgaWYgKHh4ID09IFhZU0VORCkKKyAgICAgICAgICBz cHJtbGVuID0gejsKKyAgICAgICAgZWxzZQorICAgICAgICAgIHJwcm1sZW4gPSB6OworICAgICAg ICByZXR1cm4oc3VjY2VzcyA9IDEpOworCisgICAgICBjYXNlIDk5MzogeworICAgICAgICAgIGV4 dGVybiBpbnQgc2VuZGlwa3RzOworICAgICAgICAgIGlmICh4eCA9PSBYWVNFTkQpIHsKKyAgICAg ICAgICAgICAgaWYgKCh4ID0gc2V0b24oJnNlbmRpcGt0cykpIDwgMCkKKyAgICAgICAgICAgICAg ICByZXR1cm4oeCk7CisgICAgICAgICAgfQorICAgICAgICAgIHJldHVybigxKTsKKyAgICAgIH0K KyNpZmRlZiBDS19QRVJNUworICAgICAgY2FzZSA5OTQ6CisJc3dpdGNoKHh4KSB7CisJICBjYXNl IFhZU0VORDoKKwkgICAgaWYgKCh4ID0gc2V0b24oJmF0bHBybykpIDwgMCkgcmV0dXJuKHgpOwor CSAgICBhdGdwcm8gPSBhdGxwcm87CisJICAgIHJldHVybigxKTsKKwkgIGNhc2UgWFlSRUNWOgor CSAgICBpZiAoKHggPSBzZXRvbigmYXRscHJpKSkgPCAwKSByZXR1cm4oeCk7CisJICAgIGF0Z3By aSA9IGF0bHByaTsKKwkgICAgcmV0dXJuKDEpOworCSAgZGVmYXVsdDoKKwkgICAgcmV0dXJuKC0y KTsKKwl9CisjZW5kaWYgLyogQ0tfUEVSTVMgKi8KKworI2lmbmRlZiBOT0NTRVRTCisgICAgICBj YXNlIFhZQ1NFVDogeyAgICAgICAgICAgICAgICAgICAgLyogQ0hBUkFDVEVSLVNFVC1TRUxFQ1RJ T04gKi8KKyAgICAgICAgICBleHRlcm4gc3RydWN0IGtleXRhYiB4ZnJtdGFiW107CisgICAgICAg ICAgZXh0ZXJuIGludCByX2NzZXQsIHNfY3NldDsKKyAgICAgICAgICBpZiAoKHkgPSBjbWtleSh4 ZnJtdGFiLDIsIiIsImF1dG9tYXRpYyIseHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgICByZXR1 cm4oeSk7CisgICAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKQorICAgICAgICAgICAgcmV0 dXJuKHgpOworICAgICAgICAgIGlmICh4eCA9PSBYWVNFTkQpCisgICAgICAgICAgICBzX2NzZXQg PSB5OworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJfY3NldCA9IHk7CisgICAgICAgICAg cmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKyAgICAgIH0KKyNlbmRpZiAvKiBOT0NTRVRTICovCisKKyAg ICAgIGNhc2UgWFlCVVA6CisgICAgICAgIGlmICgoeSA9IGNta2V5KG9ub2ZmLDIsIiIsIm9uIix4 eHN0cmluZykpIDwgMCkKKyAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgIGlmICgoeCA9IGNt Y2ZtKCkpIDwgMCkgcmV0dXJuKHgpOworICAgICAgICBpZiAoeHggPT0gWFlTRU5EKSB7CisgICAg ICAgICAgICBleHRlcm4gaW50IHNraXBidXA7CisgICAgICAgICAgICBza2lwYnVwID0gKHkgPT0g MCkgPyAxIDogMDsKKyAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisgICAgICAgIH0g ZWxzZSB7CisgICAgICAgICAgICBwcmludGYoCisiP1BsZWFzZSB1c2UgU0VUIEZJTEUgQ09MTElT SU9OIHRvIGNob29zZSB0aGUgZGVzaXJlZCBhY3Rpb25cbiIpOworICAgICAgICAgICAgcmV0dXJu KC05KTsKKyAgICAgICAgfQorCisgICAgICBjYXNlIFhZTU9WRToKKyNpZmRlZiBDT01NRU5UCisg ICAgICAgIHkgPSBjbWRpcigiRGlyZWN0b3J5IHRvIG1vdmUgZmlsZShzKSB0byBhZnRlciBzdWNj ZXNzZnVsIHRyYW5zZmVyIiwKKyAgICAgICAgICAgICAgICAgICIiLCZzLHh4c3RyaW5nKTsKKyNl bHNlCisgICAgICAgIHkgPSBjbXR4dCgiRGlyZWN0b3J5IHRvIG1vdmUgZmlsZShzKSB0byBhZnRl ciBzdWNjZXNzZnVsIHRyYW5zZmVyIiwKKwkJICAiIiwmcyx4eHN0cmluZyk7CisjZW5kaWYgLyog Q09NTUVOVCAqLworCisgICAgICAgIGlmICh5IDwgMCAmJiB5ICE9IC0zKQorICAgICAgICAgIHJl dHVybih5KTsKKyAgICAgICAgY2tzdHJuY3B5KGxpbmUscyxMSU5CVUZTSVopOworICAgICAgICBz ID0gYnJzdHJpcChsaW5lKTsKKworI2lmZGVmIENPTU1FTlQKKwkvKiBPbmx5IG5lZWRlZCBmb3Ig Y21kaXIoKSAqLworICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApCisgICAgICAgICAgcmV0 dXJuKHgpOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKwkKKwkvKiBDaGVjayBkaXJlY3RvcnkgZXhp c3RlbmNlIGlmIGFic29sdXRlICovCisJLyogVEhJUyBNRUFOUyBJVCBDQU4nVCBJTkNMVURFIEFO WSBERUZFUlJFRCBWQVJJQUJMRVMhICovCisJaWYgKHMpIGlmICgqcykgeworCSAgICBpZiAoaXNh YnNvbHV0ZShzKSAmJiAhaXNkaXIocykpIHsKKwkJcHJpbnRmKCI/RGlyZWN0b3J5IGRvZXMgbm90 IGV4aXN0IC0gJXNcbiIscyk7CisJCXJldHVybigtOSk7CisJICAgIH0KKwl9CisgICAgICAgIGlm ICh4eCA9PSBYWVNFTkQpIHsKKyAgICAgICAgICAgIGlmICgqcykgeworI2lmZGVmIENPTU1FTlQK KwkJLyogQWxsb3cgaXQgdG8gYmUgcmVsYXRpdmUgKi8KKyAgICAgICAgICAgICAgICB6Zm5xZnAo cyxMSU5CVUZTSVosbGluZSk7CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAgICAgICAgICAg IG1ha2VzdHIoJnNuZF9tb3ZlLGxpbmUpOworICAgICAgICAgICAgICAgIG1ha2VzdHIoJmdfc25k X21vdmUsbGluZSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1ha2Vz dHIoJnNuZF9tb3ZlLE5VTEwpOworICAgICAgICAgICAgICAgIG1ha2VzdHIoJmdfc25kX21vdmUs TlVMTCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAo KnMpIHsKKyNpZmRlZiBDT01NRU5UCisJCS8qIEFsbG93IGl0IHRvIGJlIHJlbGF0aXZlICovCisg ICAgICAgICAgICAgICAgemZucWZwKHMsTElOQlVGU0laLGxpbmUpOworI2VuZGlmIC8qIENPTU1F TlQgKi8KKyAgICAgICAgICAgICAgICBtYWtlc3RyKCZyY3ZfbW92ZSxsaW5lKTsKKyAgICAgICAg ICAgICAgICBtYWtlc3RyKCZnX3Jjdl9tb3ZlLGxpbmUpOworICAgICAgICAgICAgfSBlbHNlIHsK KyAgICAgICAgICAgICAgICBtYWtlc3RyKCZyY3ZfbW92ZSxOVUxMKTsKKyAgICAgICAgICAgICAg ICBtYWtlc3RyKCZnX3Jjdl9tb3ZlLE5VTEwpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg ICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisKKyAgICAgIGNhc2UgWFlSRU5BTUU6CisgICAg ICAgIHkgPSBjbXR4dCgiVGVtcGxhdGUgdG8gcmVuYW1lIGZpbGUocykgdG8gYWZ0ZXIgc3VjY2Vz c2Z1bCB0cmFuc2ZlciIsCisgICAgICAgICAgICAgICAgICAiIiwmcyxOVUxMKTsJCS8qIE5PVEU6 IG5vIHh4c3RyaW5nICovCisgICAgICAgIGlmICh5IDwgMCAmJiB5ICE9IC0zKQkJLyogRXZhbHVh dGlvbiBpcyBkZWZlcnJlZCAqLworICAgICAgICAgIHJldHVybih5KTsKKyAgICAgICAgY2tzdHJu Y3B5KGxpbmUscyxMSU5CVUZTSVopOworICAgICAgICBzID0gYnJzdHJpcChsaW5lKTsKKyAgICAg ICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKQorICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAg aWYgKHh4ID09IFhZU0VORCkgeworICAgICAgICAgICAgaWYgKCpzKSB7CisgICAgICAgICAgICAg ICAgbWFrZXN0cigmc25kX3JlbmFtZSxzKTsKKyAgICAgICAgICAgICAgICBtYWtlc3RyKCZnX3Nu ZF9yZW5hbWUscyk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1ha2Vz dHIoJnNuZF9yZW5hbWUsTlVMTCk7CisgICAgICAgICAgICAgICAgbWFrZXN0cigmZ19zbmRfcmVu YW1lLE5VTEwpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg aWYgKCpzKSB7CisgICAgICAgICAgICAgICAgbWFrZXN0cigmcmN2X3JlbmFtZSxzKTsKKyAgICAg ICAgICAgICAgICBtYWtlc3RyKCZnX3Jjdl9yZW5hbWUscyk7CisgICAgICAgICAgICB9IGVsc2Ug eworICAgICAgICAgICAgICAgIG1ha2VzdHIoJnJjdl9yZW5hbWUsTlVMTCk7CisgICAgICAgICAg ICAgICAgbWFrZXN0cigmZ19yY3ZfcmVuYW1lLE5VTEwpOworICAgICAgICAgICAgfQorICAgICAg ICB9CisgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisKKyNpZmRlZiBWTVMKKyAgICAgIGNh c2UgODg3OgkJCQkvKiBWRVJTSU9OLU5VTUJFUlMgKi8KKyAgICAgICAgaWYgKHh4ID09IFhZU0VO RCkgeworICAgICAgICAgICAgZXh0ZXJuIGludCB2bXNzdmVyc2lvbnM7CisgICAgICAgICAgICBy ZXR1cm4oc2V0b24oJnZtc3N2ZXJzaW9ucykpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg ICAgZXh0ZXJuIGludCB2bXNydmVyc2lvbnM7CisgICAgICAgICAgICByZXR1cm4oc2V0b24oJnZt c3J2ZXJzaW9ucykpOworICAgICAgICB9CisjZW5kaWYgLyogVk1TICovCisKKyAgICAgIGRlZmF1 bHQ6CisgICAgICAgIHJldHVybigtMik7CisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogRW5kIG9mIFNFVCBTRU5EL1JFQ0VJVkUuLi4gKi8KK30KKyNlbmRpZiAvKiBO T1hGRVIgKi8KKworI2lmbmRlZiBOT1hNSVQKK2ludAorc2V0eG1pdCgpIHsKKyAgICBpZiAoKHkg PSBjbWtleSh4bWl0YWIsbnhtaXQsIiIsIiIseHhzdHJpbmcpKSA8IDApIHJldHVybih5KTsKKyAg ICBzd2l0Y2ggKHkpIHsKKyAgICAgIGNhc2UgWE1JVEU6ICAgICAgICAgICAgICAgICAgICAgICAv KiBFT0YgKi8KKyAgICAgICAgeSA9IGNtdHh0KCJDaGFyYWN0ZXJzIHRvIHNlbmQgYXQgZW5kIG9m IGZpbGUsXG5cCisgVXNlIGJhY2tzbGFzaCBjb2RlcyBmb3IgY29udHJvbCBjaGFyYWN0ZXJzIiwi Iiwmcyx4eHN0cmluZyk7CisgICAgICAgIGlmICh5IDwgMCkgcmV0dXJuKHkpOworICAgICAgICBp ZiAoKGludClzdHJsZW4ocykgPiBYTUJVRkwpIHsKKyAgICAgICAgICAgIHByaW50ZigiP1RvbyBt YW55IGNoYXJhY3RlcnMsICVkIG1heGltdW1cbiIsWE1CVUZMKTsKKyAgICAgICAgICAgIHJldHVy bigtMik7CisgICAgICAgIH0KKyAgICAgICAgY2tzdHJuY3B5KHhtaXRidWYscyxYTUJVRkwpOwor ICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworCisgICAgICBjYXNlIFhNSVRGOiAgICAgICAg ICAgICAgICAgICAgICAgLyogRmlsbCAqLworICAgICAgICB5ID0gY21udW0oIk51bWVyaWMgY29k ZSBmb3IgYmxhbmstbGluZSBmaWxsIGNoYXJhY3RlciIsIjAiLDEwLCZ4LAorICAgICAgICAgICAg ICAgICAgeHhzdHJpbmcpOworICAgICAgICBpZiAoKHkgPSBzZXRudW0oJnoseCx5LDEyNykpIDwg MCkgcmV0dXJuKHkpOworICAgICAgICB4bWl0ZiA9IHo7CisgICAgICAgIHJldHVybihzdWNjZXNz ID0gMSk7CisgICAgICBjYXNlIFhNSVRMOiAgICAgICAgICAgICAgICAgICAgICAgLyogTGluZWZl ZWQgKi8KKyAgICAgICAgcmV0dXJuKHNldG9uKCZ4bWl0bCkpOworICAgICAgY2FzZSBYTUlUUzog ICAgICAgICAgICAgICAgICAgICAgIC8qIExvY2tpbmctU2hpZnQgKi8KKyAgICAgICAgcmV0dXJu KHNldG9uKCZ4bWl0cykpOworICAgICAgY2FzZSBYTUlUUDogICAgICAgICAgICAgICAgICAgICAg IC8qIFByb21wdCAqLworICAgICAgICB5ID0gY21udW0oIk51bWVyaWMgY29kZSBmb3IgaG9zdCdz IHByb21wdCBjaGFyYWN0ZXIsIDAgZm9yIG5vbmUiLAorICAgICAgICAgICAgICAgICAgIjEwIiwx MCwmeCx4eHN0cmluZyk7CisgICAgICAgIGlmICgoeSA9IHNldG51bSgmeix4LHksMTI3KSkgPCAw KSByZXR1cm4oeSk7CisgICAgICAgIHhtaXRwID0gejsKKyAgICAgICAgcmV0dXJuKHN1Y2Nlc3Mg PSAxKTsKKyAgICAgIGNhc2UgWE1JVFg6ICAgICAgICAgICAgICAgICAgICAgICAvKiBFY2hvICov CisgICAgICAgIHJldHVybihzZXRvbigmeG1pdHgpKTsKKyAgICAgIGNhc2UgWE1JVFc6ICAgICAg ICAgICAgICAgICAgICAgICAvKiBQYXVzZSAqLworICAgICAgICB5ID0gY21udW0oIk51bWJlciBv ZiBtaWxsaXNlY29uZHMgdG8gcGF1c2UgYmV0d2VlbiBiaW5hcnkgY2hhcmFjdGVyc1xuXAorb3Ig dGV4dCBsaW5lcyBkdXJpbmcgdHJhbnNtaXNzaW9uIiwiMCIsMTAsJngseHhzdHJpbmcpOworICAg ICAgICBpZiAoKHkgPSBzZXRudW0oJnoseCx5LDEwMDApKSA8IDApIHJldHVybih5KTsKKyAgICAg ICAgeG1pdHcgPSB6OworICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworICAgICAgY2FzZSBY TUlUVDogICAgICAgICAgICAgICAgICAgICAgIC8qIFRpbWVvdXQgKi8KKyAgICAgICAgeSA9IGNt bnVtKCJTZWNvbmRzIHRvIHdhaXQgZm9yIGVhY2ggY2hhcmFjdGVyIHRvIGVjaG8iLAorICAgICAg ICAgICAgICAgICAgIjEiLDEwLCZ4LHh4c3RyaW5nKTsKKyAgICAgICAgaWYgKCh5ID0gc2V0bnVt KCZ6LHgseSwxMDAwKSkgPCAwKSByZXR1cm4oeSk7CisgICAgICAgIHhtaXR0ID0gejsKKyAgICAg ICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybigt Mik7CisgICAgfQorfQorI2VuZGlmIC8qIE5PWE1JVCAqLworCisjaWZuZGVmIE5PWEZFUgorLyog IEQgTyBSIE0gVCAgLS0gIERvIGEgcmVtb3RlIGNvbW1hbmQgICovCisKK1ZPSUQKK3Jtc2coKSB7 CisgICAgaWYgKHBmbGFnICYmICFxdWlldCAmJiBmZGlzcGxhICE9IFhZRkRfTikKKyAgICAgIHBy aW50ZigKKyNpZmRlZiBDS19ORUVEX1NJRworICAgICAgICIgVHlwZSB5b3VyIGVzY2FwZSBjaGFy YWN0ZXIsICVzLCBmb2xsb3dlZCBieSBYIG9yIEUgdG8gY2FuY2VsLlxuIiwKKyAgICAgICBkYmNo cihlc2NhcGUpCisjZWxzZQorICAgICAgICIgUHJlc3MgdGhlIFggb3IgRSBrZXkgdG8gY2FuY2Vs LlxuIgorI2VuZGlmIC8qIENLX05FRURfU0lHICovCisgICAgICApOworfQorCitzdGF0aWMgaW50 IHh6Y21kID0gMDsgICAgICAgICAgICAgICAgICAgLyogR2xvYmFsIGNvcHkgb2YgUkVNT1RFIGNt ZCBpbmRleCAqLworCisvKiAgUiBFIE0gQyBGIE0gIC0tICBDb25maXJtIGEgUkVNT1RFIGNvbW1h bmQgICovCisvKgorICBMaWtlIGNtY2ZtKCksIGJ1dCBhbGxvd3MgZm9yIGEgcmVkaXJlY3Rpb24g aW5kaWNhdG9yIG9uIHRoZSBlbmQsCisgIGxpa2UgIj4gZmlsZW5hbWUiIG9yICJ8IGNvbW1hbmQi LiAgUmV0dXJucyB3aGF0IGNtY2ZtKCkgd291bGQgaGF2ZQorICByZXR1cm5lZDogLTEgaWYgcmVw YXJzZSBuZWVkZWQsIGV0YyBldGMgYmxhaCBibGFoLiAgT24gc3VjY2VzcywKKyAgcmV0dXJucyAx IHdpdGg6CisKKyAgICBjaGFyICogcmVtZGVzdCBjb250YWluaW5nIHRoZSBuYW1lIG9mIHRoZSBm aWxlIG9yIGNvbW1hbmQuCisgICAgaW50IHJlbWZpbGUgc2V0IHRvIDEgaWYgdGhlcmUgaXMgdG8g YmUgYW55IHJlZGlyZWN0aW9uLgorICAgIGludCByZW1hcHBkIHNldCB0byAxIGlmIG91dHB1dCBm aWxlIGlzIHRvIGJlIGFwcGVuZGVkIHRvLgorICAgIGludCByZW1waXBlIHNldCB0byAxIGlmIHJl bWRlc3QgaXMgYSBjb21tYW5kLCAwIGlmIGl0IGlzIGEgZmlsZS4KKyovCitzdGF0aWMgaW50City ZW1jZm0oKSB7CisgICAgaW50IHg7CisgICAgY2hhciAqczsKKyAgICBjaGFyIGM7CisKKyAgICBy ZW1maWxlID0gMDsKKyAgICByZW1waXBlID0gMDsKKyAgICByZW1hcHBkID0gMDsKKworICAgIGlm ICgoeCA9IGNtdHh0KAorICAgICAgICAgICAgICI+IGZpbGVuYW1lLCB8IGNvbW1hbmQsXG5cCitv ciB0eXBlIGNhcnJpYWdlIHJldHVybiB0byBjb25maXJtIHRoZSBjb21tYW5kIiwKKyAgICAgICAg ICAgICAgICAgICAiIiwmcyx4eHN0cmluZykpIDwgMCkKKyAgICAgIHJldHVybih4KTsKKyAgICBp ZiAocmVtZGVzdCkgeworICAgICAgICBmcmVlKHJlbWRlc3QpOworICAgICAgICByZW1kZXN0ID0g TlVMTDsKKyAgICB9CisgICAgZGVidWcoRjEwMSwicmVtY2ZtIGxvY2FsIiwiIixsb2NhbCk7Cisg ICAgZGVidWcoRjExMCwicmVtY2ZtIHMiLHMsMCk7CisgICAgZGVidWcoRjEwMSwicmVtY2ZtIGNt ZCIsIiIseHpjbWQpOworLyogCisgIFRoaXMgY2hlY2sgd2FzIGFkZGVkIGluIEMtS2VybWl0IDYu MCBvciA3LjAgYnV0IGl0IHR1cm5zIG91dCB0byBiZQorICB1bmhlbHBmdWwgaW4gdGhlIHNpdHVh dGlvbiB3aGVyZSB0aGUgcmVtb3RlIGlzIHJ1bm5pbmcgYSBzY3JpcHQgdGhhdCBzZW5kcworICBS RU1PVEUgY29tbWFuZHMgdG8gdGhlIGxvY2FsIHdvcmtzdGF0aW9uLiAgV2hhdCBoYXBwZW5zIGlz LCB0aGUgbG9jYWwKKyAgc2VydmVyIGV4ZWN1dGVzIHRoZSBjb21tYW5kIGFuZCBzZW5kcyB0aGUg cmVzdWx0IGJhY2sgYXMgc2NyZWVuIHRleHQsIHdoaWNoCisgIGlzIGluZGljYXRlZCBieSB1c2lu ZyBhbiBYIHBhY2tldCBpbnN0ZWFkIG9mIGFuIEYgcGFja2V0IGFzIHRoZSBmaWxlCisgIGhlYWRl ci4gIFRoZXJlIGFyZSB0d28gcGFydHMgdG8gdGhpczogZXhlY3V0aW5nIHRoZSBjb21tYW5kIHVu ZGVyIGNvbnRyb2wKKyAgb2YgdGhlIHJlbW90ZSBLZXJtaXQsIHdoaWNoIGlzIGRlc2lyYWJsZSAo YW5kIGluIGZhY3Qgc29tZSBiaWcgYXBwbGljYXRpb25zCisgIGRlcGVuZCBvbiBpdCwgYW5kIHRo ZXJlZm9yZSBuZXZlciBpbnN0YWxsZWQgYW55IG5ldyBDLUtlcm1pdCB2ZXJzaW9ucyBhZnRlcgor ICA1QSksIGFuZCBkaXNwbGF5aW5nIHRoZSByZXN1bHQuICBDb21tZW50aW5nIG91dCB0aGUgY2hl Y2sgYWxsb3dzIHRoZQorICBjb21tYW5kIHRvIGJlIGV4ZWN1dGVkLCBidXQgdGhlIHJlc3VsdCBp cyBzdGlsbCBzZW50IGJhY2sgdG8gdGhlIHJlbW90ZSBpbgorICBhIGZpbGUgdHJhbnNmZXIsIHdo ZXJlIGl0IHZhbmlzaGVzIGludG8gdGhlIGV0aGVyLiAgQWN0dWFsbHkgaXQncyBvbiB0aGUKKyAg Y29tbXVuaWNhdGlvbiBjb25uZWN0aW9uLCBtaXhlZCBpbiB3aXRoIHRoZSBwYWNrZXRzLiAgUHJl dHR5IGFtYXppbmcgdGhhdAorICB0aGUgZmlsZSB0cmFuc2ZlciBzdGlsbCB3b3JrcywgcmlnaHQ/ CisqLworI2lmZGVmIENPTU1FTlQKKyAgICBpZiAoISpzKSB7ICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBObyByZWRpcmVjdGlvbiBpbmRpY2F0b3IgKi8KKyAgICAgICAgaWYgKCFsb2NhbCAm JgorICAgICAgICAgICAgKHh6Y21kID09IFhaRElSIHx8IHh6Y21kID09IFhaVFlQIHx8CisgICAg ICAgICAgICAgeHpjbWQgPT0gWFpYSVQgfHwgeHpjbWQgPT0gWFpTUEEgfHwKKyAgICAgICAgICAg ICB4emNtZCA9PSBYWkhMUCB8fCB4emNtZCA9PSBYWlBXRCB8fAorICAgICAgICAgICAgIHh6Y21k ID09IFhaTEdJIHx8IHh6Y21kID09IFhaTEdPIHx8CisgICAgICAgICAgICAgeHpjbWQgPT0gWFpX SE8gfHwgeHpjbWQgPT0gWFpIT1MpKSB7CisgICAgICAgICAgICBwcmludGYoIj9cIiVzXCIgaGFz IG5vIGVmZmVjdCBpbiByZW1vdGUgbW9kZVxuIixjbWRidWYpOworICAgICAgICAgICAgcmV0dXJu KC05KTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgcmV0dXJuKDEpOworICAgIH0KKyNlbmRp ZgkvKiBDT01NRU5UICovCisgICAgYyA9ICpzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogV2UgaGF2ZSBzb21ldGhpbmcgKi8KKyAgICBpZiAoYyAhPSAnPicgJiYgYyAhPSAnfCcpIHsg ICAgICAgICAvKiBJcyBpdCA+IG9yIHwgPyAqLworICAgICAgICBwcmludGYoIj9Ob3QgY29uZmly bWVkXG4iKTsgICAgIC8qIE5vICovCisgICAgICAgIHJldHVybigtOSk7CisgICAgfQorICAgIHMr KzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNlZSB3aGF0IGZvbGxvd3MgKi8K KyAgICBpZiAoYyA9PSAnPicgJiYgKnMgPT0gJz4nKSB7ICAgICAgICAvKiBBbGxvdyBmb3IgIj4+ IiB0b28gKi8KKyAgICAgICAgcysrOworICAgICAgICByZW1hcHBkID0gMTsgICAgICAgICAgICAg ICAgICAgIC8qIEFwcGVuZCB0byBvdXRwdXQgZmlsZSAqLworICAgIH0KKyAgICB3aGlsZSAoKnMg PT0gU1AgfHwgKnMgPT0gSFQpIHMrKzsgICAvKiBTdHJpcCBpbnRlcnZlbmluZyB3aGl0ZXNwYWNl ICovCisgICAgaWYgKCEqcykgeworICAgICAgICBwcmludGYoIj8lcyBtaXNzaW5nXG4iLCBjID09 ICc+JyA/ICJGaWxlbmFtZSIgOiAiQ29tbWFuZCIpOworICAgICAgICByZXR1cm4oLTkpOworICAg IH0KKyAgICBpZiAoYyA9PSAnPicgJiYgemNoa28ocykgPCAwKSB7ICAgICAvKiBDaGVjayBhY2Nl c3NpYmlsaXR5ICovCisgICAgICAgIHByaW50ZigiP0FjY2VzcyBkZW5pZWQgLSAlc1xuIiwgcyk7 CisgICAgICAgIHJldHVybigtOSk7CisgICAgfQorICAgIHJlbWZpbGUgPSAxOyAgICAgICAgICAg ICAgICAgICAgICAgIC8qIFNldCBnbG9iYWwgcmVzdWx0cyAqLworICAgIHJlbXBpcGUgPSAoYyA9 PSAnfCcpOworICAgIGlmIChyZW1waXBlCisjaWZuZGVmIE5PUFVTSAorICAgICAgICAmJiBub3B1 c2gKKyNlbmRpZiAvKiBOT1BVU0ggKi8KKyAgICAgICAgKSB7CisgICAgICAgIHByaW50ZigiP1Nv cnJ5LCBhY2Nlc3MgdG8gZXh0ZXJuYWwgY29tbWFuZHMgaXMgZGlzYWJsZWQuXG4iKTsKKyAgICAg ICAgcmV0dXJuKC05KTsKKyAgICB9CisgICAgbWFrZXN0cigmcmVtZGVzdCxzKTsKKyNpZm5kZWYg Tk9ERUJVRworICAgIGlmIChkZWJsb2cpIHsKKyAgICAgICAgZGVidWcoRjEwMSwicmVtY2ZtIHJl bWZpbGUiLCIiLHJlbWZpbGUpOworICAgICAgICBkZWJ1ZyhGMTAxLCJyZW1jZm0gcmVtYXBwZCIs IiIscmVtYXBwZCk7CisgICAgICAgIGRlYnVnKEYxMDEsInJlbWNmbSByZW1waXBlIiwiIixyZW1w aXBlKTsKKyAgICAgICAgZGVidWcoRjExMCwicmVtY2ZtIHJlbWRlc3QiLHJlbWRlc3QsIDApOwor ICAgIH0KKyNlbmRpZiAvKiBOT0RFQlVHICovCisgICAgcmV0dXJuKDEpOworfQorCisvKiAgUiBF IE0gVCBYIFQgIC0tICBMaWtlIHJlbWNmbSgpLi4uICAqLworLyoKKyAgIC4uLiBidXQgZm9yIFJF TU9URSBjb21tYW5kcyB0aGF0IGVuZCB3aXRoIGNtdHh0KCkuCisgICBIZXJlIHdlIG11c3QgZGVj aXBoZXIgYnJhY2VzIHRvIGRpc2NvdmVyIHdoZXRoZXIgdGhlIHRyYWlsaW5nCisgICByZWRpcmVj dGlvbiBpbmRpY2F0b3IgaXMgaW50ZW5kZWQgZm9yIGxvY2FsIHVzZSwgb3IgdG8gYmUgc2VudCBv dXQKKyAgIHRvIHRoZSBzZXJ2ZXIsIGFzIGluOgorCisgICAgIHJlbW90ZSBob3N0IGJsYWggYmxh aCA+IGZpbGUgICAgICAgICAgICAgICAgIFRoaXMgZW5kCisgICAgIHJlbW90ZSBob3N0IHsgYmxh aCBibGFoIH0gPiBmaWxlICAgICAgICAgICAgIFRoaXMgZW5kCisgICAgIHJlbW90ZSBob3N0IHsg YmxhaCBibGFoID4gZmlsZSB9ICAgICAgICAgICAgIFRoYXQgZW5kCisgICAgIHJlbW90ZSBob3N0 IHsgYmxhaCBibGFoID4gZmlsZSB9ID4gZmlsZSAgICAgIEJvdGggZW5kcworCisgICBQaXBlcyB0 b286CisKKyAgICAgcmVtb3RlIGhvc3QgYmxhaCBibGFoIHwgY21kICAgICAgICAgICAgICAgICAg VGhpcyBlbmQKKyAgICAgcmVtb3RlIGhvc3QgeyBibGFoIGJsYWggfSB8IGNtZCAgICAgICAgICAg ICAgVGhpcyBlbmQKKyAgICAgcmVtb3RlIGhvc3QgeyBibGFoIGJsYWggfCBjbWQgfSAgICAgICAg ICAgICAgVGhhdCBlbmQKKyAgICAgcmVtb3RlIGhvc3QgeyBibGFoIGJsYWggfCBjbWQgfSB8IGNt ZCAgICAgICAgQm90aCBlbmRzCisKKyAgIE9yIGJvdGg6CisKKyAgICAgcmVtb3RlIGhvc3QgYmxh aCBibGFoIHwgY21kID4gZmlsZSAgICAgICAgICAgVGhpcyBlbmQsIGV0YyBldGMuLi4KKworICAg Tm90ZTogdGhpcyByZWFsbHkgb25seSBtYWtlcyBzZW5zZSBmb3IgUkVNT1RFIEhPU1QsIGJ1dCB3 aHkgYmUgcGlja3k/CisgICBDYWxsIGFmdGVyIGNhbGxpbmcgY210eHQoKSwgd2l0aCBwb2ludGVy IHRvIHN0cmluZyB0aGF0IGNtdHh0KCkgcGFyc2VkLAorICAgYXMgaW4gInJlbXR4dCgmcyk7Ii4K KworICAgUmV0dXJuczoKKyAgICAxIG9uIHN1Y2Nlc3Mgd2l0aCBicmFjZXMgJiByZWRpcmVjdGlv biB0aGluZ3MgcmVtb3ZlZCAmIHBvaW50ZXIgdXBkYXRlZCwKKyAgIC05IG9uIGZhaWx1cmUgKGJh ZCBpbmRpcmVjdGlvbiksIGFmdGVyIHByaW50aW5nIGVycm9yIG1lc3NhZ2UuCisqLworaW50City ZW10eHQocCkgY2hhciAqKiBwOyB7CisgICAgaW50IGksIHgsIGJwb3MsIHBwb3M7CisgICAgY2hh ciBjLCAqcywgKnE7CisKKyAgICByZW1maWxlID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAv KiBJbml0aWFsaXplIGdsb2JhbCByZXN1bHRzICovCisgICAgcmVtcGlwZSA9IDA7CisgICAgcmVt YXBwZCA9IDA7CisgICAgaWYgKHJlbWRlc3QpIHsKKyAgICAgICAgZnJlZShyZW1kZXN0KTsKKyAg ICAgICAgcmVtZGVzdCA9IE5VTEw7CisgICAgfQorICAgIHMgPSAqcDsKKyAgICBpZiAoIXMpICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBObyByZWRpcmVjdGlvbiBpbmRpY2F0b3IgKi8K KyAgICAgIHMgPSAiIjsKKyNpZmRlZiBDT01NRU5UCisgICAgaWYgKCEqcykgeyAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogRGl0dG8gKi8KKyAgICAgICAgaWYgKCFsb2NhbCAmJgorICAgICAg ICAgICAgKHh6Y21kID09IFhaRElSIHx8IHh6Y21kID09IFhaVFlQIHx8CisgICAgICAgICAgICAg eHpjbWQgPT0gWFpYSVQgfHwgeHpjbWQgPT0gWFpTUEEgfHwKKyAgICAgICAgICAgICB4emNtZCA9 PSBYWkhMUCB8fCB4emNtZCA9PSBYWlBXRCB8fAorICAgICAgICAgICAgIHh6Y21kID09IFhaTEdJ IHx8IHh6Y21kID09IFhaTEdPIHx8CisgICAgICAgICAgICAgeHpjbWQgPT0gWFpXSE8gfHwgeHpj bWQgPT0gWFpIT1MpKSB7CisgICAgICAgICAgICBwcmludGYoIj9cIiVzXCIgaGFzIG5vIGVmZmVj dCBpbiByZW1vdGUgbW9kZVxuIixjbWRidWYpOworICAgICAgICAgICAgaWYgKGhpbnRzKSB7Cisg ICAgICAgICAgICAgICAgcHJpbnRmKCJIaW50OiBUcnkgYWdhaW4gd2l0aCBhbiBvdXRwdXQgcmVk aXJlY3Rvci5cbiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAg ICAgICAgfSBlbHNlCisgICAgICAgICAgcmV0dXJuKDEpOworICAgIH0KKyNlbmRpZgkvKiBDT01N RU5UICovCisgICAgYnBvcyA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUG9zaXRp b24gb2YgPiAoYnJhY2tldCkgKi8KKyAgICBwcG9zID0gLTE7ICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBQb3NpdGlvbiBvZiB8IChwaXBlKSAqLworICAgIHggPSBzdHJsZW4ocyk7ICAgICAg ICAgICAgICAgICAgICAgIC8qIExlbmd0aCBvZiBjbXR4dCgpIHN0cmluZyAqLworCisgICAgZm9y IChpID0geC0xOyBpID49IDA7IGktLSkgeyAgICAgICAgLyogU2VhcmNoIHJpZ2h0IHRvIGxlZnQu ICovCisgICAgICAgIGMgPSBzW2ldOworICAgICAgICBpZiAoYyA9PSAnfScpICAgICAgICAgICAg ICAgICAgIC8qIEJyZWFrIG9uIGZpcnN0IHJpZ2h0IGJyYWNlICovCisgICAgICAgICAgYnJlYWs7 ICAgICAgICAgICAgICAgICAgICAgICAgLyogRG9uJ3QgbG9vayBhdCBjb250ZW50cyBvZiBicmFj ZXMgKi8KKyAgICAgICAgZWxzZSBpZiAoYyA9PSAnPicpICAgICAgICAgICAgICAvKiBSZWNvcmQg cG9zaXRpb24gb2YgPiAqLworICAgICAgICAgIGJwb3MgPSBpOworICAgICAgICBlbHNlIGlmIChj ID09ICd8JykgICAgICAgICAgICAgIC8qIGFuZCBvZiB8ICovCisgICAgICAgICAgcHBvcyA9IGk7 CisgICAgfQorICAgIGlmIChicG9zIDwgMCAmJiBwcG9zIDwgMCkgeyAgICAgICAgIC8qIE5vIHJl ZGlyZWN0b3JzLiAqLworI2lmZGVmIENPTU1FTlQKKyAgICAgICAgaWYgKCFsb2NhbCAmJgorICAg ICAgICAgICAgKHh6Y21kID09IFhaRElSIHx8IHh6Y21kID09IFhaVFlQIHx8CisgICAgICAgICAg ICAgeHpjbWQgPT0gWFpYSVQgfHwgeHpjbWQgPT0gWFpTUEEgfHwKKyAgICAgICAgICAgICB4emNt ZCA9PSBYWkhMUCB8fCB4emNtZCA9PSBYWlBXRCB8fAorICAgICAgICAgICAgIHh6Y21kID09IFha TEdJIHx8IHh6Y21kID09IFhaTEdPIHx8CisgICAgICAgICAgICAgeHpjbWQgPT0gWFpXSE8gfHwg eHpjbWQgPT0gWFpIT1MpKSB7CisgICAgICAgICAgICBwcmludGYoIj9cIiVzXCIgaGFzIG5vIGVm ZmVjdCBpbiByZW1vdGUgbW9kZVxuIixjbWRidWYpOworICAgICAgICAgICAgaWYgKGhpbnRzKSB7 CisgICAgICAgICAgICAgICAgcHJpbnRmKCJIaW50OiBUcnkgYWdhaW4gd2l0aCBhbiBvdXRwdXQg cmVkaXJlY3Rvci5cbiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuKC05KTsK KyAgICAgICAgfQorI2VuZGlmCS8qIENPTU1FTlQgKi8KKyAgICAgICAgcyA9IGJyc3RyaXAocyk7 ICAgICAgICAgICAgICAgICAvKiBSZW1vdmUgb3V0ZXIgYnJhY2VzIGlmIGFueS4gKi8KKyAgICAg ICAgKnAgPSBzOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQb2ludCB0byByZXN1bHQgKi8K KyAgICAgICAgcmV0dXJuKDEpOyAgICAgICAgICAgICAgICAgICAgICAvKiBhbmQgcmV0dXJuLiAq LworICAgIH0KKyAgICByZW1maWxlID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBJdCdz IHwgb3IgPiAqLworICAgIGkgPSAtMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEdl dCBsZWZ0bW9zdCBzeW1ib2wgKi8KKyAgICBpZiAoYnBvcyA+IC0xKSAgICAgICAgICAgICAgICAg ICAgICAvKiBCcmFja2V0ICovCisgICAgICBpID0gYnBvczsKKyAgICBpZiAocHBvcyA+IC0xICYm IChwcG9zIDwgYnBvcyB8fCBicG9zIDwgMCkpIHsgLyogb3IgcGlwZSAqLworICAgICAgICBpID0g cHBvczsKKyAgICAgICAgcmVtcGlwZSA9IDE7CisgICAgfQorICAgIGlmIChyZW1waXBlCisjaWZu ZGVmIE5PUFVTSAorICAgICAgICAmJiBub3B1c2gKKyNlbmRpZiAvKiBOT1BVU0ggKi8KKyAgICAg ICAgKSB7CisgICAgICAgIHByaW50ZigiP1NvcnJ5LCBhY2Nlc3MgdG8gZXh0ZXJuYWwgY29tbWFu ZHMgaXMgZGlzYWJsZWQuXG4iKTsKKyAgICAgICAgcmV0dXJuKC05KTsKKyAgICB9CisgICAgYyA9 IHNbaV07ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ29weSBvZiBzeW1ib2wgKi8KKwor ICAgIGlmIChjID09ICc+JyAmJiBzW2krMV0gPT0gJz4nKSAgICAgIC8qICI+PiIgZm9yIGFwcGVu ZD8gKi8KKyAgICAgIHJlbWFwcGQgPSAxOyAgICAgICAgICAgICAgICAgICAgIC8qIEl0J3Mgbm90 IGp1c3QgYSBmbGFnIGl0J3MgYSBudW1iZXIgKi8KKworICAgIHEgPSBzICsgaSArIDEgKyByZW1h cHBkOyAgICAgICAgICAgIC8qIFBvaW50IHBhc3Qgc3ltYm9sIGluIHN0cmluZyAqLworICAgIHdo aWxlICgqcSA9PSBTUCB8fCAqcSA9PSBIVCkgcSsrOyAgIC8qIGFuZCBhbnkgaW50ZXJ2ZW5pbmcg d2hpdGVzcGFjZSAqLworICAgIGlmICghKnEpIHsKKyAgICAgICAgcHJpbnRmKCI/JXMgbWlzc2lu Z1xuIiwgYyA9PSAnPicgPyAiRmlsZW5hbWUiIDogIkNvbW1hbmQiKTsKKyAgICAgICAgcmV0dXJu KC05KTsKKyAgICB9CisgICAgaWYgKGMgPT0gJz4nICYmIHpjaGtvKHEpIDwgMCkgeyAgICAgLyog KERvZXNuJ3Qgd29yayBmb3IgfCBjbWQgPiBmaWxlKSAqLworICAgICAgICBwcmludGYoIj9BY2Nl c3MgZGVuaWVkIC0gJXNcbiIsIHEpOworICAgICAgICByZXR1cm4oLTkpOworICAgIH0KKyAgICBt YWtlc3RyKCZyZW1kZXN0LHEpOyAgICAgICAgICAgICAgICAvKiBDcmVhdGUgdGhlIGRlc3RpbmF0 aW9uIHN0cmluZyAqLworICAgIHEgPSBzICsgaSAtIDE7ICAgICAgICAgICAgICAgICAgICAgIC8q IFBvaW50IGJlZm9yZSBzeW1ib2wgKi8KKyAgICB3aGlsZSAocSA+IHMgJiYgKCpxID09IFNQIHx8 ICpxID09IEhUKSkgLyogU3RyaXAgdHJhaWxpbmcgd2hpdGVzcGFjZSAqLworICAgICAgcS0tOwor ICAgICoocSsxKSA9IE5VTDsgICAgICAgICAgICAgICAgICAgICAgIC8qIFRlcm1pbmF0ZSB0aGUg c3RyaW5nLiAqLworICAgIHMgPSBicnN0cmlwKHMpOyAgICAgICAgICAgICAgICAgICAgIC8qIFJl bW92ZSBhbnkgYnJhY2VzICovCisgICAgKnAgPSBzOyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogU2V0IHJldHVybiB2YWx1ZSAqLworCisjaWZuZGVmIE5PREVCVUcKKyAgICBpZiAoZGVi bG9nKSB7CisgICAgICAgIGRlYnVnKEYxMDEsInJlbXR4dCByZW1maWxlIiwiIixyZW1maWxlKTsK KyAgICAgICAgZGVidWcoRjEwMSwicmVtdHh0IHJlbWFwcGQiLCIiLHJlbWFwcGQpOworICAgICAg ICBkZWJ1ZyhGMTAxLCJyZW10eHQgcmVtcGlwZSIsIiIscmVtcGlwZSk7CisgICAgICAgIGRlYnVn KEYxMTAsInJlbXR4dCByZW1kZXN0IixyZW1kZXN0LCAwKTsKKyAgICAgICAgZGVidWcoRjExMCwi cmVtdHh0IGNvbW1hbmQiLHMsMCk7CisgICAgfQorI2VuZGlmIC8qIE5PREVCVUcgKi8KKworICAg IHJldHVybigxKTsKK30KKworaW50CitwbG9naW4oeHgpIGludCB4eDsgeworICAgIGNoYXIgKnAx ID0gTlVMTCwgKnAyID0gTlVMTCwgKnAzID0gTlVMTDsKKyAgICBpbnQgcHNhdmVkID0gMCwgcmMg PSAwOworI2lmZGVmIENLX1JFQ0FMTAorICAgIGV4dGVybiBpbnQgb25fcmVjYWxsOyAgICAgICAg ICAgICAgIC8qIGFyb3VuZCBQYXNzd29yZCBwcm9tcHRpbmcgKi8KKyNlbmRpZiAvKiBDS19SRUNB TEwgKi8KKyAgICBkZWJ1ZyhGMTAxLCJwbG9naW4gbG9jYWwiLCIiLGxvY2FsKTsKKworICAgIGlm ICghbG9jYWwgfHwgKG5ldHdvcmsgJiYgdHRjaGsoKSA8IDApKSB7CisgICAgICAgIHByaW50Zigi P05vIGNvbm5lY3Rpb25cbiIpOworICAgICAgICByZXR1cm4oLTkpOworICAgIH0KKyAgICBpZiAo KHggPSBjbWZsZCgiVXNlciBJRCIsIiIsJnMseHhzdHJpbmcpKSA8IDApIHsgLyogR2V0IFVzZXIg SUQgKi8KKyAgICAgICAgaWYgKHggIT0gLTMpIHJldHVybih4KTsKKyAgICB9CisgICAgeSA9IHN0 cmxlbihzKTsKKyAgICBpZiAoeSA+IDApIHsKKyAgICAgICAgaWYgKChwMSA9IG1hbGxvYyh5ICsg MSkpID09IE5VTEwpIHsKKyAgICAgICAgICAgIHByaW50ZigiP0ludGVybmFsIGVycm9yOiBtYWxs b2NcbiIpOworICAgICAgICAgICAgcmMgPSAtOTsKKyAgICAgICAgICAgIGdvdG8gWFpYTEdJOwor ICAgICAgICB9IGVsc2UKKyAgICAgICAgICBzdHJjcHkocDEscyk7ICAgICAgICAgICAgICAgICAv KiBzYWZlICovCisgICAgICAgIGlmICgocmMgPSBjbWZsZCgiUGFzc3dvcmQiLCIiLCZzLHh4c3Ry aW5nKSkgPCAwKQorICAgICAgICAgIGlmIChyYyAhPSAtMykgZ290byBYWlhMR0k7CisgICAgICAg IHkgPSBzdHJsZW4ocyk7CisgICAgICAgIGlmICh5ID4gMCkgeworICAgICAgICAgICAgaWYgKChw MiA9IG1hbGxvYyh5ICsgMSkpID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIj9J bnRlcm5hbCBlcnJvcjogbWFsbG9jXG4iKTsKKyAgICAgICAgICAgICAgICByYyA9IC05OworICAg ICAgICAgICAgICAgIGdvdG8gWFpYTEdJOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAg ICAgIHN0cmNweShwMixzKTsgICAgICAgICAgICAgLyogc2FmZSAqLworICAgICAgICAgICAgaWYg KChyYyA9IGNtZmxkKCJBY2NvdW50IiwiIiwmcyx4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICAg ICAgaWYgKHJjICE9IC0zKSBnb3RvIFhaWExHSTsKKyAgICAgICAgICAgIHkgPSBzdHJsZW4ocyk7 CisgICAgICAgICAgICBpZiAoeSA+IDApIHsKKyAgICAgICAgICAgICAgICBpZiAoKHAzID0gbWFs bG9jKHkgKyAxKSkgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICBwcmludGYoIj9JbnRl cm5hbCBlcnJvcjogbWFsbG9jXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcmMgPSAtOTsKKyAg ICAgICAgICAgICAgICAgICAgZ290byBYWlhMR0k7CisgICAgICAgICAgICAgICAgfSBlbHNlCisg ICAgICAgICAgICAgICAgICBzdHJjcHkocDMscyk7ICAgICAgICAgLyogc2FmZSAqLworICAgICAg ICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGlmICgocmMgPSByZW10eHQoJnMpKSA8IDAp ICAgICAgICAgIC8qIENvbmZpcm0gJiBoYW5kbGUgcmVkaXJlY3RvcnMgKi8KKyAgICAgIGdvdG8g WFpYTEdJOworCisgICAgaWYgKCFwMSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTm8g VXNlcmlkIHNwZWNpZmllZC4uLiAqLworICAgICAgICBkZWJvayA9IDA7ICAgICAgICAgICAgICAg ICAgICAgIC8qIERvbid0IGxvZyB0aGlzICovCisgICAgICAgIC8qIFByb21wdCBmb3IgdXNlcm5h bWUsIHBhc3N3b3JkLCBhbmQgYWNjb3VudCAqLworI2lmZGVmIENLX1JFQ0FMTAorICAgICAgICBv bl9yZWNhbGwgPSAwOworI2VuZGlmIC8qIENLX1JFQ0FMTCAqLworICAgICAgICBjbXNhdnAocHNh dmUsUFJPTVBUTCk7ICAgICAgICAgIC8qIFNhdmUgb2xkIHByb21wdCAqLworICAgICAgICBwc2F2 ZWQgPSAxOworICAgICAgICBkZWJ1ZyhGMTEwLCJSRU1PVEUgTE9HSU4gc2F2ZWQiLHBzYXZlLDAp OworCisgICAgICAgIGNtc2V0cCgiVXNlcm5hbWU6ICIpOyAgICAgICAgICAgLyogTWFrZSBuZXcg cHJvbXB0ICovCisgICAgICAgIGNvbmNiKChjaGFyKWVzY2FwZSk7ICAgICAgICAgICAgLyogUHV0 IGNvbnNvbGUgaW4gY2JyZWFrIG1vZGUgKi8KKyAgICAgICAgY21pbmkoMSk7CisgICAgICAgIHBy b21wdCh4eHN0cmluZyk7CisgICAgICAgIHJjID0gLTk7CisgICAgICAgIGZvciAoeCA9IC0xOyB4 IDwgMDsgKSB7ICAgICAgICAgLyogUHJvbXB0IHRpbGwgdGhleSBhbnN3ZXIgKi8KKyAgICAgICAg ICAgIGNtcmVzKCk7ICAgICAgICAgICAgICAgICAgICAvKiBSZXNldCB0aGUgcGFyc2VyICovCisg ICAgICAgICAgICB4ID0gY210eHQoIiIsIiIsJnMsTlVMTCk7ICAgLyogR2V0IGEgbGl0ZXJhbCBs aW5lIG9mIHRleHQgKi8KKyAgICAgICAgfQorICAgICAgICB5ID0gc3RybGVuKHMpOworICAgICAg ICBpZiAoeSA8IDEpIHsKKyAgICAgICAgICAgIHByaW50ZigiP0NhbmNlbGVkXG4iKTsKKyAgICAg ICAgICAgIGdvdG8gWFpYTEdJOworICAgICAgICB9CisgICAgICAgIGlmICgocDEgPSBtYWxsb2Mo eSArIDEpKSA9PSBOVUxMKSB7CisgICAgICAgICAgICBwcmludGYoIj9JbnRlcm5hbCBlcnJvcjog bWFsbG9jXG4iKTsKKyAgICAgICAgICAgIGdvdG8gWFpYTEdJOworICAgICAgICB9IGVsc2UKKyAg ICAgICAgICBzdHJjcHkocDEscyk7ICAgICAgICAgICAgICAgICAvKiBzYWZlICovCisKKyAgICAg ICAgY21zZXRwKCJQYXNzd29yZDogIik7ICAgICAgICAgICAvKiBNYWtlIG5ldyBwcm9tcHQgKi8K KyAgICAgICAgY29uY2IoKGNoYXIpZXNjYXBlKTsgICAgICAgICAgICAvKiBQdXQgY29uc29sZSBp biBjYnJlYWsgbW9kZSAqLworICAgICAgICBjbWluaSgwKTsgICAgICAgICAgICAgICAgICAgICAg IC8qIE5vIGVjaG8gKi8KKyAgICAgICAgcHJvbXB0KHh4c3RyaW5nKTsKKyAgICAgICAgZGVib2sg PSAwOworICAgICAgICBmb3IgKHggPSAtMTsgeCA8IDAgJiYgeCAhPSAtMzsgKSB7IC8qIEdldCBh bnN3ZXIgKi8KKyAgICAgICAgICAgIGNtcmVzKCk7ICAgICAgICAgICAgICAgICAgICAvKiBSZXNl dCB0aGUgcGFyc2VyICovCisgICAgICAgICAgICB4ID0gY210eHQoIiIsIiIsJnMsTlVMTCk7ICAg LyogR2V0IGxpdGVyYWwgbGluZSBvZiB0ZXh0ICovCisgICAgICAgIH0KKyAgICAgICAgaWYgKChw MiA9IG1hbGxvYygoaW50KXN0cmxlbihzKSArIDEpKSA9PSBOVUxMKSB7CisgICAgICAgICAgICBw cmludGYoIj9JbnRlcm5hbCBlcnJvcjogbWFsbG9jXG4iKTsKKyAgICAgICAgICAgIGdvdG8gWFpY TEdJOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICBzdHJjcHkocDIscyk7ICAgICAgICAgICAg ICAgICAvKiBzYWZlICovCisgICAgICAgIHByaW50ZigiXHJcbiIpOworICAgICAgICBpZiAoKHJj ID0gY21jZm0oKSkgPCAwKQorICAgICAgICAgIGdvdG8gWFpYTEdJOworICAgIH0KKyAgICBzc3Rh dGUgPSBzZXRnZW4oJ0knLHAxLHAyLHAzKTsgICAgICAvKiBHZXQgaGVyZSB3aXRoIGF0IGxlYXN0 IHVzZXIgSUQgKi8KKyAgICByYyA9IDA7CisKKyAgWFpYTEdJOiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBDb21tb24gZXhpdCBwb2ludCAqLworICAgIGlmIChwc2F2ZWQpCisgICAg ICBjbXNldHAocHNhdmUpOyAgICAgICAgICAgICAgICAgICAgLyogUmVzdG9yZSBvcmlnaW5hbCBw cm9tcHQgKi8KKyAgICBpZiAocDMpIHsgZnJlZShwMyk7IHAzID0gTlVMTDsgfSAgICAvKiBGcmVl IG1hbGxvYydkIHN0b3JhZ2UgKi8KKyAgICBpZiAocDIpIHsgZnJlZShwMik7IHAyID0gTlVMTDsg fQorICAgIGlmIChwMSkgeyBmcmVlKHAxKTsgcDEgPSBOVUxMOyB9CisgICAgaWYgKHJjID4gLTEp IHsKKyAgICAgICAgaWYgKGxvY2FsICYmIHJjID4gLTEpICAgICAgICAgICAvKiBJZiBsb2NhbCwg Zmx1c2ggdHR5IGlucHV0IGJ1ZmZlciAqLworICAgICAgICAgIHR0Zmx1aSgpOworICAgIH0KKyAg ICByZXR1cm4ocmMpOworfQorCisjaWZkZWYgT1MyCisjaWZuZGVmIE5PTE9DQUwKK2ludAorZG9y bXQoeHgpIGludCB4eDsgeworICAgIGludCByYyA9IDA7CisgICAgZXh0ZXJuIGludCB0ZXJtX2lv OworICAgIGludCB0ZXJtX2lvX3NhdiA9IHRlcm1faW87CisjaWZkZWYgTkVXRlRQCisgICAgZXh0 ZXJuIGludCBmdHBnZXQsIGZ0cGlzb3BlbigpOworICAgIGlmICgoZnRwZ2V0ID09IDEpIHx8ICgo ZnRwZ2V0ID09IDIpICYmIGZ0cGlzb3BlbigpKSkKKyAgICAgIHJldHVybihkb2Z0cHJtdCh4eCww KSk7CisjZW5kaWYgLyogTkVXRlRQICovCisgICAgdGVybV9pbyA9IDA7CisgICAgcmMgPSB4eGRv cm10KHh4KTsKKyAgICB0ZXJtX2lvID0gdGVybV9pb19zYXY7CisgICAgcmV0dXJuIHJjOworfQor CisKK2ludAoreHhkb3JtdCh4eCkgaW50IHh4OworI2Vsc2UgLyogTk9MT0NBTCAqLworaW50Citk b3JtdCh4eCkgaW50IHh4OworI2VuZGlmIC8qIE5PTE9DQUwgKi8KKyNlbHNlIC8qIE9TMiAqLwor aW50Citkb3JtdCh4eCkgaW50IHh4OworI2VuZGlmIC8qIE9TMiAqLworeyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJFTU9URSBjb21tYW5kcyAqLworICAgIGludCB4 LCB5LCByZXRjb2RlOworICAgIGNoYXIgKnMsIHNidWZbNTBdLCAqczI7CisKKyNpZmRlZiBORVdG VFAKKyAgICBleHRlcm4gaW50IGZ0cGdldCwgZnRwaXNvcGVuKCk7CisgICAgaWYgKChmdHBnZXQg PT0gMSkgfHwgKChmdHBnZXQgPT0gMikgJiYgZnRwaXNvcGVuKCkpKQorICAgICAgcmV0dXJuKGRv ZnRwcm10KHh4LDApKTsKKyNlbmRpZiAvKiBORVdGVFAgKi8KKworICAgIHJlbWZpbGUgPSAwOyAg ICAgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIHRoZXNlICovCisgICAgcmVtcGlwZSA9IDA7 CisgICAgcmVtYXBwZCA9IDA7CisKKyAgICBpZiAoeHggPCAwKSByZXR1cm4oeHgpOyAgICAgICAg ICAgICAvKiBSRU1PVEUgd2hhdD8gKi8KKworICAgIHh6Y21kID0geHg7ICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIE1ha2UgZ2xvYmFsIGNvcHkgb2YgYXJnICovCisKKyAgICBpZiAoeHggPT0g WFpTRVQpIHsgICAgICAgICAgICAgICAgICAvKiBSRU1PVEUgU0VUICovCisgICAgICAgIGlmICgo eSA9IGNta2V5KHJtc3RhYixucm1zLCIiLCIiLHh4c3RyaW5nKSkgPCAwKSB7CisgICAgICAgICAg ICBpZiAoeSA9PSAtMykgeworICAgICAgICAgICAgICAgIHByaW50ZigiP1BhcmFtZXRlciBuYW1l IHJlcXVpcmVkXG4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICAgICAg fSBlbHNlIHJldHVybih5KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4oZG9wcm0oeSwxKSk7 CisgICAgfQorCisgICAgc3dpdGNoICh4eCkgeyAgICAgICAgICAgICAgICAgICAgICAgLyogT3Ro ZXJzLi4uICovCisKKyAgICAgIGNhc2UgWFpDRFU6CisgICAgICAgIGlmICgoeCA9IGNtY2ZtKCkp IDwgMCkgcmV0dXJuKHgpOworICAgICAgICBwcmludGYoIj9Tb3JyeSwgUkVNT1RFIENEVVAgbm90 IHN1cHBvcnRlZCB5ZXRcbiIpOworICAgICAgICByZXR1cm4oLTkpOworCisgICAgICBjYXNlIFha Q1dEOiAgICAgICAgICAgICAgICAgICAgICAgLyogQ1dEIChDRCkgKi8KKyAgICAgICAgaWYgKCh4 ID0gY210eHQoIlJlbW90ZSBkaXJlY3RvcnkgbmFtZSIsIiIsJnMseHhzdHJpbmcpKSA8IDApCisg ICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICBpZiAoKHggPSByZW10eHQoJnMpKSA8IDApCisg ICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICBkZWJ1ZyhGMTExLCJYWkNXRDogIixzLHgpOwor ICAgICAgICAqc2J1ZiA9IE5VTDsKKyAgICAgICAgczIgPSBzYnVmOworLyoKKyAgVGhlIGZvbGxv d2luZyBpcyBjb21tZW50ZWQgb3V0IGJlY2F1c2Ugc2luY2UgdGhlIGRpc2FwcGVhcmFuY2Ugb2Yg dGhlCisgIERFQ1NZU1RFTS0yMCBmcm9tIHRoZSBwbGFuZXQsIG5vIGtub3duIGNvbXB1dGVyIHJl cXVpcmVzIGEgcGFzc3dvcmQgZm9yCisgIGNoYW5naW5nIGRpcmVjdG9yeS4KKyovCisjaWZkZWYg RElSUFdEUFIKKyAgICAgICAgaWYgKCpzICE9IE5VTCkgeyAgICAgICAgICAgICAgICAvKiBJZiBk aXJlY3RvcnkgbmFtZSBnaXZlbiwgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBnZXQgcGFzc3dvcmQgb24gc2VwYXJhdGUgbGluZS4gKi8KKyAgICAgICAgICAg IGlmICh0bGV2ZWwgPiAtMSkgeyAgICAgICAgICAvKiBGcm9tIHRha2UgZmlsZS4uLiAqLworCisg ICAgICAgICAgICAgICAgaWYgKGZnZXRzKHNidWYsNTAsdGZpbGVbdGxldmVsXSkgPT0gTlVMTCkK KyAgICAgICAgICAgICAgICAgIGZhdGFsKCJ0YWtlIGZpbGUgZW5kcyBwcmVtYXR1cmVseSBpbiAn cmVtb3RlIGN3ZCciKTsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCIgcHN3ZCBmcm9tIHRh a2UgZmlsZSIsczIsMCk7CisgICAgICAgICAgICAgICAgZm9yICh4ID0gKGludClzdHJsZW4oc2J1 Zik7CisgICAgICAgICAgICAgICAgICAgICB4ID4gMCAmJiAoc2J1Zlt4LTFdID09IE5MIHx8IHNi dWZbeC0xXSA9PSBDUik7CisgICAgICAgICAgICAgICAgICAgICB4LS0pCisgICAgICAgICAgICAg ICAgICBzYnVmW3gtMV0gPSAnXDAnOworCisgICAgICAgICAgICB9IGVsc2UgeyAgICAgICAgICAg ICAgICAgICAgLyogRnJvbSB0ZXJtaW5hbC4uLiAqLworCisgICAgICAgICAgICAgICAgcHJpbnRm KCIgUGFzc3dvcmQ6ICIpOyAgLyogZ2V0IGEgcGFzc3dvcmQgKi8KKyNpZmRlZiBJS1NECisgICAg ICAgICAgICAgICAgaWYgKCFsb2NhbCAmJiBpbnNlcnZlcikgeworICAgICAgICAgICAgICAgICAg ICB4ID0gY29uaW5jKDApOworICAgICAgICAgICAgICAgIH0gZWxzZQorI2VuZGlmIC8qIElLU0Qg Ki8KKyNpZmRlZiBPUzIKKyAgICAgICAgICAgICAgICAgIHggPSBpc19hX3R0eSgwKSA/IGNvbmlu YygwKSA6IC8qIHdpdGggbm8gZWNobyAuLi4gKi8KKyAgICAgICAgICAgICAgICAgICAgZ2V0Y2hh cigpOworI2Vsc2UgLyogT1MyICovCisgICAgICAgICAgICAgICAgeCA9IGdldGNoYXIoKTsKKyNl bmRpZiAvKiBPUzIgKi8KKyAgICAgICAgICAgICAgICB3aGlsZSAoKHggIT0gTkwpICYmICh4ICE9 IENSKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoKHggJj0gMDE3NykgPT0gJz8nKSB7Cisg ICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIj8gUGFzc3dvcmQgb2YgcmVtb3RlIGRpcmVj dG9yeVxuIFBhc3N3b3JkOiAiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHMyID0gc2J1ZjsK KyAgICAgICAgICAgICAgICAgICAgICAgICpzYnVmID0gTlVMOworICAgICAgICAgICAgICAgICAg ICB9IGVsc2UgaWYgKHggPT0gRVNDKSAvKiBNaW5pIGNvbW1hbmQgbGluZSBlZGl0b3IuLi4gKi8K KyAgICAgICAgICAgICAgICAgICAgICBibGVlcChCUF9XQVJOKTsKKyAgICAgICAgICAgICAgICAg ICAgZWxzZSBpZiAoeCA9PSBCUyB8fCB4ID09IDAxNzcpCisgICAgICAgICAgICAgICAgICAgICAg czItLTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoeCA9PSAwMjUpIHsgICAgICAgIC8q IEN0cmwtVSAqLworICAgICAgICAgICAgICAgICAgICAgICAgczIgPSBzYnVmOworICAgICAgICAg ICAgICAgICAgICAgICAgKnNidWYgPSBOVUw7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZQor ICAgICAgICAgICAgICAgICAgICAgICpzMisrID0geDsKKworICAgICAgICAgICAgICAgICAgICAv KiBHZXQgdGhlIG5leHQgY2hhcmFjdGVyICovCisjaWZkZWYgSUtTRAorICAgICAgICAgICAgICAg ICAgICBpZiAoIWxvY2FsICYmIGluc2VydmVyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB4 ID0gY29uaW5jKDApOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UKKyNlbmRpZiAvKiBJS1NE ICovCisjaWZkZWYgT1MyCisgICAgICAgICAgICAgICAgICAgIHggPSBpc19hX3R0eSgwKSA/IGNv bmluYygwKSA6IC8qIHdpdGggbm8gZWNobyAuLi4gKi8KKyAgICAgICAgICAgICAgICAgICAgICBn ZXRjaGFyKCk7CisjZWxzZSAvKiBPUzIgKi8KKyAgICAgICAgICAgICAgICAgICAgeCA9IGdldGNo YXIoKTsKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg ICAgKnMyID0gTlVMOworICAgICAgICAgICAgICAgIHB1dGNoYXIoJ1xuJyk7CisgICAgICAgICAg ICB9CisgICAgICAgICAgICBzMiA9IHNidWY7CisgICAgICAgIH0gZWxzZSBzMiA9ICIiOworI2Vu ZGlmIC8qIERJUlBXRFBSICovCisKKyAgICAgICAgZGVidWcoRjExMCwiIHBhc3N3b3JkIixzMiww KTsKKwlyY2RhY3RpdmUgPSAxOworICAgICAgICBzc3RhdGUgPSBzZXRnZW4oJ0MnLHMsczIsIiIp OworICAgICAgICByZXRjb2RlID0gMDsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgWFpE RUw6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERlbGV0ZSAqLworICAgICAgICBp ZiAoKHggPSBjbXR4dCgiTmFtZSBvZiByZW1vdGUgZmlsZShzKSB0byBkZWxldGUiLAorICAgICAg ICAgICAgICAgICAgICAgICAiIiwmcyx4eHN0cmluZykpIDwgMCkgeworICAgICAgICAgICAgaWYg KHggPT0gLTMpIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIj9OYW1lIG9mIHJlbW90ZSBmaWxl KHMpIHJlcXVpcmVkXG4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICAg ICAgfSBlbHNlIHJldHVybih4KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoKHggPSByZW10eHQo JnMpKSA8IDApCisgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICBpZiAobG9jYWwpIHR0Zmx1 aSgpOyAgICAgICAgICAgIC8qIElmIGxvY2FsLCBmbHVzaCB0dHkgaW5wdXQgYnVmZmVyICovCisg ICAgICAgIHJldGNvZGUgPSBzc3RhdGUgPSByZmlsb3AocywnRScpOworICAgICAgICBicmVhazsK KworICAgICAgY2FzZSBYWkRJUjogICAgICAgICAgICAgICAgICAgICAgIC8qIERpcmVjdG9yeSAq LworICAgICAgICBpZiAoKHggPSBjbXR4dCgiUmVtb3RlIGRpcmVjdG9yeSBvciBmaWxlIHNwZWNp ZmljYXRpb24iLCIiLCZzLAorICAgICAgICAgICAgICAgICAgICAgICB4eHN0cmluZykpIDwgMCkK KyAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgIGlmICgoeCA9IHJlbXR4dCgmcykpIDwgMCkK KyAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgIGlmIChsb2NhbCkgdHRmbHVpKCk7ICAgICAg ICAgICAgLyogSWYgbG9jYWwsIGZsdXNoIHR0eSBpbnB1dCBidWZmZXIgKi8KKyAgICAgICAgcm1z ZygpOworICAgICAgICByZXRjb2RlID0gc3N0YXRlID0gc2V0Z2VuKCdEJyxzLCIiLCIiKTsKKyAg ICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgWFpITFA6ICAgICAgICAgICAgICAgICAgICAgICAv KiBIZWxwICovCisgICAgICAgIGlmICgoeCA9IHJlbWNmbSgpKSA8IDApIHJldHVybih4KTsKKyAg ICAgICAgc3N0YXRlID0gc2V0Z2VuKCdIJywiIiwiIiwiIik7CisgICAgICAgIHJldGNvZGUgPSAw OworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBYWkhPUzogICAgICAgICAgICAgICAgICAg ICAgIC8qIEhvc3QgKi8KKyAgICAgICAgaWYgKCh4ID0gY210eHQoIkNvbW1hbmQgZm9yIHJlbW90 ZSBzeXN0ZW0iLCIiLCZzLHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgIHJldHVybih4KTsKKyAg ICAgICAgaWYgKCh4ID0gcmVtdHh0KCZzKSkgPCAwKQorICAgICAgICAgIHJldHVybih4KTsKKyAg ICAgICAgaWYgKCh5ID0gKGludClzdHJsZW4ocykpIDwgMSkKKyAgICAgICAgICByZXR1cm4oeCk7 CisgICAgICAgIGNrc3RybmNweShsaW5lLHMsTElOQlVGU0laKTsKKyAgICAgICAgY21hcmcgPSBs aW5lOworICAgICAgICBybXNnKCk7CisgICAgICAgIHJldGNvZGUgPSBzc3RhdGUgPSAnYyc7Cisg ICAgICAgIGJyZWFrOworCisjaWZuZGVmIE5PRlJJTExTCisgICAgICBjYXNlIFhaS0VSOgorICAg ICAgICBpZiAoKHggPSBjbXR4dCgiQ29tbWFuZCBmb3IgcmVtb3RlIEtlcm1pdCIsIiIsJnMseHhz dHJpbmcpKSA8IDApCisgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICBpZiAoKHggPSByZW10 eHQoJnMpKSA8IDApCisgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICBpZiAoKGludClzdHJs ZW4ocykgPCAxKSAgeworICAgICAgICAgICAgaWYgKHggPT0gLTMpIHsKKyAgICAgICAgICAgICAg ICBwcmludGYoIj9SZW1vdGUgS2VybWl0IGNvbW1hbmQgcmVxdWlyZWRcbiIpOworICAgICAgICAg ICAgICAgIHJldHVybigtOSk7CisgICAgICAgICAgICB9IGVsc2UgcmV0dXJuKHgpOworICAgICAg ICB9CisgICAgICAgIGNrc3RybmNweShsaW5lLHMsTElOQlVGU0laKTsKKyAgICAgICAgY21hcmcg PSBsaW5lOworICAgICAgICByZXRjb2RlID0gc3N0YXRlID0gJ2snOworICAgICAgICBybXNnKCk7 CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIFhaTEdJOiAgICAgICAgICAgICAgICAgICAg ICAgLyogTG9naW4gKi8KKwlyY2RhY3RpdmUgPSAxOwkJCS8qIFN1cHByZXNzICJMb2dnZWQgaW4i IG1zZyBpZiBxdWlldCAqLworICAgICAgICByZXR1cm4ocGxvZ2luKFhYUkVNKSk7CisKKyAgICAg IGNhc2UgWFpMR086IHsgICAgICAgICAgICAgICAgICAgICAvKiBMb2dvdXQgKi8KKyAgICAgICAg ICBleHRlcm4gaW50IGJ5ZV9hY3RpdmU7CisgICAgICAgICAgaWYgKCh4ID0gcmVtY2ZtKCkpIDwg MCkgcmV0dXJuKHgpOworICAgICAgICAgIHNzdGF0ZSA9IHNldGdlbignSScsIiIsIiIsIiIpOwor ICAgICAgICAgIHJldGNvZGUgPSAwOworICAgICAgICAgIGJ5ZV9hY3RpdmUgPSAxOyAgICAgICAg ICAgICAgIC8qIENsb3NlIGNvbm5lY3Rpb24gd2hlbiBkb25lICovCisgICAgICAgICAgYnJlYWs7 CisgICAgICB9CisKKyAgICAgIGNhc2UgWFpQUkk6ICAgICAgICAgICAgICAgICAgICAgICAvKiBQ cmludCAqLworICAgICAgICBpZiAoIWF0ZGlzbyB8fCAhYXRjYXByKSB7ICAgICAgIC8qIERpc3Bv c2l0aW9uIGF0dHJpYnV0ZSBvZmY/ICovCisgICAgICAgICAgICBwcmludGYoIj9EaXNwb3NpdGlv biBBdHRyaWJ1dGUgaXMgT2ZmXG4iKTsKKyAgICAgICAgICAgIHJldHVybigtMik7CisgICAgICAg IH0KKyAgICAgICAgY21hcmcgPSAiIjsKKyAgICAgICAgY21hcmcyID0gIiI7CisgICAgICAgIGlm ICgoeCA9IGNtaWZpKCJMb2NhbCBmaWxlKHMpIHRvIHByaW50IG9uIHJlbW90ZSBwcmludGVyIiwi IiwmcywmeSwKKyAgICAgICAgICAgICAgICAgICAgICAgeHhzdHJpbmcpKSA8IDApIHsKKyAgICAg ICAgICAgIGlmICh4ID09IC0zKSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCI/TmFtZSBvZiBs b2NhbCBmaWxlKHMpIHJlcXVpcmVkXG4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4oLTkpOwor ICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICB9CisgICAgICAg IGNrc3RybmNweShsaW5lLHMsTElOQlVGU0laKTsgICAgLyogTWFrZSBhIHNhZmUgY29weSBvZiBm aWxlbmFtZSAqLworICAgICAgICAqb3B0YnVmID0gTlVMOyAgICAgICAgICAgICAgICAgIC8qIFdp cGUgb3V0IGFueSBvbGQgb3B0aW9ucyAqLworICAgICAgICBpZiAoKHggPSBjbXR4dCgiT3B0aW9u cyBmb3IgcmVtb3RlIHByaW50IGNvbW1hbmQiLCIiLCZzLHh4c3RyaW5nKSkgPCAwKQorICAgICAg ICAgIHJldHVybih4KTsKKyAgICAgICAgaWYgKCh4ID0gcmVtdHh0KCZzKSkgPCAwKQorICAgICAg ICAgIHJldHVybih4KTsKKyAgICAgICAgaWYgKChpbnQpc3RybGVuKG9wdGJ1ZikgPiA5NCkgeyAv KiBNYWtlIHN1cmUgdGhpcyBpcyBsZWdhbCAqLworICAgICAgICAgICAgcHJpbnRmKCI/T3B0aW9u IHN0cmluZyB0b28gbG9uZ1xuIik7CisgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICB9 CisgICAgICAgIGNrc3RybmNweShvcHRidWYscyxPUFRCVUZMRU4pOyAgLyogTWFrZSBhIHNhZmUg Y29weSBvZiBvcHRpb25zICovCisgICAgICAgIG5maWxzID0gLTE7ICAgICAgICAgICAgICAgICAg ICAgLyogRXhwYW5kIGZpbGUgbGlzdCBpbnRlcm5hbGx5ICovCisgICAgICAgIGNtYXJnID0gbGlu ZTsgICAgICAgICAgICAgICAgICAgLyogUG9pbnQgdG8gZmlsZSBsaXN0LiAqLworICAgICAgICBy cHJpbnRmID0gMTsgICAgICAgICAgICAgICAgICAgIC8qIFJFTU9URSBQUklOVCBtb2RpZmllciBm b3IgU0VORCAqLworICAgICAgICBzc3RhdGUgPSAncyc7ICAgICAgICAgICAgICAgICAgIC8qIFNl dCBzdGFydCBzdGF0ZSB0byBTRU5EICovCisgICAgICAgIGlmIChsb2NhbCkgZGlzcGxhID0gMTsK KyAgICAgICAgcmV0Y29kZSA9IDA7CisgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIE5PRlJJTExT ICovCisKKyAgICAgIGNhc2UgWFpTUEE6ICAgICAgICAgICAgICAgICAgICAgICAvKiBTcGFjZSAq LworICAgICAgICBpZiAoKHggPSBjbXR4dCgiQ29uZmlybSwgb3IgcmVtb3RlIGRpcmVjdG9yeSBu YW1lIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIiIsJnMseHhzdHJpbmcpKSA8IDApCisgICAg ICAgICAgcmV0dXJuKHgpOworICAgICAgICBpZiAoKHggPSByZW10eHQoJnMpKSA8IDApCisgICAg ICAgICAgcmV0dXJuKHgpOworICAgICAgICByZXRjb2RlID0gc3N0YXRlID0gc2V0Z2VuKCdVJyxz LCIiLCIiKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgWFpNU0c6ICAgICAgICAgICAg ICAgICAgICAgICAvKiBNZXNzYWdlICovCisgICAgICAgIGlmICgoeCA9IGNtdHh0KCJTaG9ydCB0 ZXh0IG1lc3NhZ2UgZm9yIHNlcnZlciIsIiIsJnMseHhzdHJpbmcpKSA8IDApCisgICAgICAgICAg cmV0dXJuKHgpOworICAgICAgICBpZiAoKHggPSByZW10eHQoJnMpKSA8IDApCisgICAgICAgICAg cmV0dXJuKHgpOworICAgICAgICByZXRjb2RlID0gc3N0YXRlID0gc2V0Z2VuKCdNJyxzLCIiLCIi KTsKKyAgICAgICAgYnJlYWs7CisKKyNpZm5kZWYgTk9GUklMTFMKKyAgICAgIGNhc2UgWFpUWVA6 ICAgICAgICAgICAgICAgICAgICAgICAvKiBUeXBlICovCisgICAgICAgIGlmICgoeCA9IGNtdHh0 KCJSZW1vdGUgZmlsZSBzcGVjaWZpY2F0aW9uIiwiIiwmcyx4eHN0cmluZykpIDwgMCkKKyAgICAg ICAgICByZXR1cm4oeCk7CisgICAgICAgIGlmICgoaW50KXN0cmxlbihzKSA8IDEpIHsKKyAgICAg ICAgICAgIHByaW50ZigiP1JlbW90ZSBmaWxlbmFtZSByZXF1aXJlZFxuIik7CisgICAgICAgICAg ICByZXR1cm4oLTkpOworICAgICAgICB9CisgICAgICAgIGlmICgoeCA9IHJlbXR4dCgmcykpIDwg MCkKKyAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgIHJtc2coKTsKKyAgICAgICAgcmV0Y29k ZSA9IHNzdGF0ZSA9IHJmaWxvcChzLCdUJyk7CisgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIE5P RlJJTExTICovCisKKyNpZm5kZWYgTk9GUklMTFMKKyAgICAgIGNhc2UgWFpXSE86CisgICAgICAg IGlmICgoeCA9IGNtdHh0KCJSZW1vdGUgdXNlciBuYW1lLCBvciBjYXJyaWFnZSByZXR1cm4iLAor ICAgICAgICAgICAgICAgICAgICAgICAiIiwmcyx4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICBy ZXR1cm4oeCk7CisgICAgICAgIGlmICgoeCA9IHJlbXR4dCgmcykpIDwgMCkKKyAgICAgICAgICBy ZXR1cm4oeCk7CisgICAgICAgIHJldGNvZGUgPSBzc3RhdGUgPSBzZXRnZW4oJ1cnLHMsIiIsIiIp OworICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBOT0ZSSUxMUyAqLworCisgICAgICBjYXNlIFha UFdEOiAgICAgICAgICAgICAgICAgICAgICAgLyogUFdEICovCisgICAgICAgIGlmICgoeCA9IHJl bWNmbSgpKSA8IDApIHJldHVybih4KTsKKyAgICAgICAgc3N0YXRlID0gc2V0Z2VuKCdBJywiIiwi IiwiIik7CisgICAgICAgIHJldGNvZGUgPSAwOworICAgICAgICBicmVhazsKKworI2lmbmRlZiBO T1NQTAorICAgICAgY2FzZSBYWlFVRTogeyAgICAgICAgICAgICAgICAgICAgIC8qIFF1ZXJ5ICov CisgICAgICAgICAgY2hhciBidWZbMl07CisgICAgICAgICAgZXh0ZXJuIGNoYXIgcXVlcnlidWZb XSwgKiBxYnVmcDsKKyAgICAgICAgICBleHRlcm4gaW50IHFidWZuOworICAgICAgICAgIGlmICgo eSA9IGNta2V5KHZhcnR5cCxudmFydHlwLCIiLCIiLHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAg ICAgcmV0dXJuKHkpOworICAgICAgICAgIGlmICgoeCA9IGNtdHh0KHkgPT0gJ0YnID8gIlJlbW90 ZSBmdW5jdGlvbiBpbnZvY2F0aW9uIiA6CisgICAgICAgICAgICAgICAgICAgICAgICAgKCdLJyA/ ICJSZW1vdGUgdmFyaWFibGUgbmFtZSBvciBmdW5jdGlvbiI6CisgICAgICAgICAgICAgICAgICAg ICAgICAgIlJlbW90ZSB2YXJpYWJsZSBuYW1lIiksCisgICAgICAgICAgICAgICAgICAgICAgICAg IiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgJnMsCisgICAgICAgICAgICAgICAgICAgICAg ICAgKHkgPT0gJ0snKSA/IHh4c3RyaW5nIDogTlVMTAorICAgICAgICAgICAgICAgICAgICAgICAg ICkpIDwgMCkgICAgICAgIC8qIERvbid0IGV2YWx1YXRlICovCisgICAgICAgICAgICByZXR1cm4o eCk7CisgICAgICAgICAgaWYgKCh4ID0gcmVtdHh0KCZzKSkgPCAwKQorICAgICAgICAgICAgcmV0 dXJuKHgpOworICAgICAgICAgIHF1ZXJ5ID0gMTsgICAgICAgICAgICAgICAgICAgIC8qIFFVRVJZ IGlzIGFjdGl2ZSAqLworICAgICAgICAgIHFidWZwID0gcXVlcnlidWY7ICAgICAgICAgICAgIC8q IEluaXRpYWxpemUgcXVlcnkgcmVzcG9uc2UgYnVmZmVyICovCisgICAgICAgICAgcWJ1Zm4gPSAw OworICAgICAgICAgIHF1ZXJ5YnVmWzBdID0gTlVMOworICAgICAgICAgIGJ1ZlswXSA9IChjaGFy KSAoeSAmIDEyNyk7CisgICAgICAgICAgYnVmWzFdID0gTlVMOworICAgICAgICAgIHJldGNvZGUg PSBzc3RhdGUgPSBzZXRnZW4oJ1YnLCJRIiwoY2hhciAqKWJ1ZixzKTsKKyAgICAgICAgICBicmVh azsKKyAgICAgIH0KKworICAgICAgY2FzZSBYWkFTRzogeyAgICAgICAgICAgICAgICAgICAgIC8q IEFzc2lnbiAqLworICAgICAgICAgIGNoYXIgYnVmW1ZOQU1MXTsKKyAgICAgICAgICBpZiAoKHkg PSBjbWZsZCgiUmVtb3RlIHZhcmlhYmxlIG5hbWUiLCIiLCZzLE5VTEwpKSA8IDApIC8qIE5vIGV2 YWwgKi8KKyAgICAgICAgICAgIHJldHVybih5KTsKKyAgICAgICAgICBpZiAoKGludClzdHJsZW4o cykgPj0gVk5BTUwpIHsKKyAgICAgICAgICAgICAgcHJpbnRmKCI/VG9vIGxvbmdcbiIpOworICAg ICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICAgIH0KKyAgICAgICAgICBja3N0cm5jcHko YnVmLHMsVk5BTUwpOworICAgICAgICAgIGlmICgoeCA9IGNtdHh0KCJBc3NpZ25tZW50IGZvciBy ZW1vdGUgdmFyaWFibGUiLAorICAgICAgICAgICAgICAgICAgICIiLCZzLHh4c3RyaW5nKSkgPCAw KSAvKiBFdmFsdWF0ZSB0aGlzIG9uZSAqLworICAgICAgICAgICAgcmV0dXJuKHgpOworICAgICAg ICAgIGlmICgoeCA9IHJlbXR4dCgmcykpIDwgMCkKKyAgICAgICAgICAgIHJldHVybih4KTsKKyNp ZmRlZiBDT01NRU5UCisvKgorICBTZXJ2ZXIgY29tbWFuZHMgY2FuJ3QgYmUgbG9uZyBwYWNrZXRz LiAgSW4gcHJpbmNpcGxlIHRoZXJlJ3Mgbm8gcmVhc29uCisgIHdoeSB0aGV5IHNob3VsZG4ndCBi ZSwgZXhjZXB0IHRoYXQgd2UgZG9uJ3Qga25vdyBhdCB0aGlzIHBvaW50IGlmIHRoZQorICBzZXJ2 ZXIgaXMgY2FwYWJsZSBvZiBhY2NlcHRpbmcgbG9uZyBwYWNrZXRzIGJlY2F1c2Ugd2UgaGF2ZW4n dCBzdGFydGVkCisgIHRoZSBwcm90b2NvbCB5ZXQuICBJbiBwcmFjdGljZSwgYWxsb3dpbmcgYSBs b25nIHBhY2tldCBoZXJlIGJyZWFrcyBhIGxvdAorICBvZiBhc3N1bXB0aW9ucywgY2F1c2VzIGJ1 ZmZlciBvdmVycnVucyBhbmQgY3Jhc2hlcywgZXRjLiAgVG8gYmUgZml4ZWQKKyAgbGF0ZXIuICAo QnV0IHNpbmNlIHRoaXMgaXMgY29tbWVudGVkIG91dCwgZXZpZGVudGx5IEkgZml4ZWQgaXQgbGF0 ZXIuLi4pCisqLworICAgICAgICAgIGlmICgoaW50KXN0cmxlbihzKSA+IDg1KSB7ICAgIC8qIEFs bG93IGZvciBlbmNvZGluZyBleHBhbnNpb24gKi8KKyAgICAgICAgICAgICAgcHJpbnRmKCI/U29y cnksIHZhbHVlIGlzIHRvbyBsb25nIC0gODUgY2hhcmFjdGVycyBtYXhcbiIpOworICAgICAgICAg ICAgICByZXR1cm4oLTkpOworICAgICAgICAgIH0KKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAg ICAgICAgcmV0Y29kZSA9IHNzdGF0ZSA9IHNldGdlbignVicsIlMiLChjaGFyICopYnVmLHMpOwor ICAgICAgICAgIGJyZWFrOworICAgICAgfQorI2VuZGlmIC8qIE5PU1BMICovCisKKyAgICAgIGNh c2UgWFpDUFk6IHsgICAgICAgICAgICAgICAgICAgICAvKiBDT1BZICovCisgICAgICAgICAgY2hh ciBidWZbVE1QQlVGU0laXTsKKyAgICAgICAgICBidWZbVE1QQlVGU0laLTFdID0gJ1wwJzsKKyAg ICAgICAgICBpZiAoKHggPSBjbWZsZCgiTmFtZSBvZiByZW1vdGUgZmlsZSB0byBjb3B5IiwiIiwm cyx4eHN0cmluZykpIDwgMCkgeworICAgICAgICAgICAgICBpZiAoeCA9PSAtMykgeworICAgICAg ICAgICAgICAgICAgcHJpbnRmKCI/TmFtZSBvZiByZW1vdGUgZmlsZSByZXF1aXJlZFxuIik7Cisg ICAgICAgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgICAgfQorICAgICAg ICAgIGNrc3RybmNweShidWYscyxUTVBCVUZTSVopOworICAgICAgICAgIGlmICgoeCA9IGNtZmxk KCJOYW1lIG9mIHJlbW90ZSBkZXN0aW5hdGlvbiBmaWxlIG9yIGRpcmVjdG9yeSIsCisgICAgICAg ICAgICAgICAgICAgICAgICAgIiIsJnMsIHh4c3RyaW5nKSkgPCAwKSB7CisgICAgICAgICAgICAg IGlmICh4ID09IC0zKSB7CisgICAgICAgICAgICAgICAgICBwcmludGYoIj9OYW1lIG9mIHJlbW90 ZSBmaWxlIG9yIGRpcmVjdG9yeSByZXF1aXJlZFxuIik7CisgICAgICAgICAgICAgICAgICByZXR1 cm4oLTkpOworICAgICAgICAgICAgICB9IGVsc2UgcmV0dXJuKHgpOworICAgICAgICAgIH0KKyAg ICAgICAgICBja3N0cm5jcHkodG1wYnVmLHMsVE1QQlVGU0laKTsKKyAgICAgICAgICBpZiAoKHgg PSByZW1jZm0oKSkgPCAwKQorICAgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICAgIGlmIChs b2NhbCkgdHRmbHVpKCk7ICAgICAgICAgIC8qIElmIGxvY2FsLCBmbHVzaCB0dHkgaW5wdXQgYnVm ZmVyICovCisgICAgICAgICAgcmV0Y29kZSA9IHNzdGF0ZSA9IHNldGdlbignSycsYnVmLHRtcGJ1 ZiwiIik7CisgICAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBjYXNlIFhaUkVOOiB7ICAg ICAgICAgICAgICAgICAgICAgLyogUmVuYW1lICovCisgICAgICAgICAgY2hhciBidWZbVE1QQlVG U0laXTsKKyAgICAgICAgICBidWZbVE1QQlVGU0laLTFdID0gJ1wwJzsKKyAgICAgICAgICBpZiAo KHggPSBjbWZsZCgiTmFtZSBvZiByZW1vdGUgZmlsZSB0byByZW5hbWUiLAorICAgICAgICAgICAg ICAgICAgICAgICAgICIiLCZzLHh4c3RyaW5nKSkgPCAwKSB7CisgICAgICAgICAgICAgIGlmICh4 ID09IC0zKSB7CisgICAgICAgICAgICAgICAgICBwcmludGYoIj9OYW1lIG9mIHJlbW90ZSBmaWxl IHJlcXVpcmVkXG4iKTsKKyAgICAgICAgICAgICAgICAgIHJldHVybigtOSk7CisgICAgICAgICAg ICAgIH0gZWxzZSByZXR1cm4oeCk7CisgICAgICAgICAgfQorICAgICAgICAgIGNrc3RybmNweShi dWYscyxUTVBCVUZTSVopOworICAgICAgICAgIGlmICgoeCA9IGNtZmxkKCJOZXcgbmFtZSBvZiBy ZW1vdGUgZmlsZSIsIiIsJnMsIHh4c3RyaW5nKSkgPCAwKSB7CisgICAgICAgICAgICAgIGlmICh4 ID09IC0zKSB7CisgICAgICAgICAgICAgICAgICBwcmludGYoIj9OYW1lIG9mIHJlbW90ZSBmaWxl IHJlcXVpcmVkXG4iKTsKKyAgICAgICAgICAgICAgICAgIHJldHVybigtOSk7CisgICAgICAgICAg ICAgIH0gZWxzZSByZXR1cm4oeCk7CisgICAgICAgICAgfQorICAgICAgICAgIGNrc3RybmNweSh0 bXBidWYscyxUTVBCVUZTSVopOworICAgICAgICAgIGlmICgoeCA9IHJlbWNmbSgpKSA8IDApCisg ICAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgICAgaWYgKGxvY2FsKSB0dGZsdWkoKTsgICAg ICAgICAgLyogSWYgbG9jYWwsIGZsdXNoIGRldmljZSBidWZmZXIgKi8KKyAgICAgICAgICByZXRj b2RlID0gc3N0YXRlID0gc2V0Z2VuKCdSJyxidWYsdG1wYnVmLCIiKTsKKyAgICAgICAgICBicmVh azsKKyAgICAgIH0KKyAgICAgIGNhc2UgWFpNS0Q6ICAgICAgICAgICAgICAgICAgICAgICAvKiBt a2RpciAqLworICAgICAgY2FzZSBYWlJNRDogICAgICAgICAgICAgICAgICAgICAgIC8qIHJtZGly ICovCisgICAgICAgIGlmICgoeCA9IGNtdHh0KCh4eCA9PSBYWk1LRCkgPworICAgICAgICAgICAg ICAgICAgICAgICAiTmFtZSBvZiByZW1vdGUgZGlyZWN0b3J5IHRvIGNyZWF0ZSIgOgorICAgICAg ICAgICAgICAgICAgICAgICAiTmFtZSBvZiByZW1vdGUgZGlyZWN0b3J5IHRvIGRlbGV0ZSIsCisg ICAgICAgICAgICAgICAgICAgICAgICIiLAorICAgICAgICAgICAgICAgICAgICAgICAmcywKKyAg ICAgICAgICAgICAgICAgICAgICAgeHhzdHJpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgKSkg PCAwKSB7CisgICAgICAgICAgICBpZiAoeCA9PSAtMykgeworICAgICAgICAgICAgICAgIHByaW50 ZigiP05hbWUgcmVxdWlyZWRcbiIpOworICAgICAgICAgICAgICAgIHJldHVybigtOSk7CisgICAg ICAgICAgICB9IGVsc2UgcmV0dXJuKHgpOworICAgICAgICB9CisgICAgICAgIGlmICgoeCA9IHJl bXR4dCgmcykpIDwgMCkKKyAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgIGlmIChsb2NhbCkg dHRmbHVpKCk7ICAgICAgICAgICAgLyogSWYgbG9jYWwsIGZsdXNoIHR0eSBpbnB1dCBidWZmZXIg Ki8KKyAgICAgICAgcmV0Y29kZSA9IHNzdGF0ZSA9IHJmaWxvcChzLCAoY2hhcikoeHggPT0gWFpN S0QgPyAnbScgOiAnZCcpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgWFpYSVQ6ICAg ICAgICAgICAgICAgICAgICAgICAvKiBFeGl0ICovCisgICAgICAgIGlmICgoeCA9IHJlbWNmbSgp KSA8IDApIHJldHVybih4KTsKKyAgICAgICAgc3N0YXRlID0gc2V0Z2VuKCdYJywiIiwiIiwiIik7 CisgICAgICAgIHJldGNvZGUgPSAwOworICAgICAgICBicmVhazsKKworICAgICAgZGVmYXVsdDoK KyAgICAgICAgaWYgKCh4ID0gcmVtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOworICAgICAgICBwcmlu dGYoIj9Ob3QgaW1wbGVtZW50ZWQgLSAlc1xuIixjbWRidWYpOworICAgICAgICByZXR1cm4oLTIp OworICAgIH0KKyAgICBpZiAobG9jYWwgJiYgcmV0Y29kZSA+IC0xKSAgICAgICAgICAvKiBJZiBs b2NhbCwgZmx1c2ggdHR5IGlucHV0IGJ1ZmZlciAqLworICAgICAgdHRmbHVpKCk7CisgICAgcmV0 dXJuKHJldGNvZGUpOworfQorCisKKy8qICBSIEYgSSBMIE8gUCAgLS0gIFJlbW90ZSBGaWxlIE9w ZXJhdGlvbiAgKi8KKworQ0hBUgorI2lmZGVmIENLX0FOU0lDCityZmlsb3AoY2hhciAqIHMsIGNo YXIgdCkKKyNlbHNlCityZmlsb3Aocyx0KSBjaGFyICpzLCB0OworI2VuZGlmIC8qIENLX0FOU0lD ICovCisvKiByZmlsb3AgKi8geworICAgIGlmICgqcyA9PSBOVUwpIHsKKyAgICAgICAgcHJpbnRm KCI/RmlsZSBzcGVjaWZpY2F0aW9uIHJlcXVpcmVkXG4iKTsKKyAgICAgICAgcmV0dXJuKChDSEFS KSAwKTsKKyAgICB9CisgICAgZGVidWcoRjExMSwicmZpbG9wIixzLHQpOworICAgIHJldHVybihz ZXRnZW4odCxzLCIiLCIiKSk7Cit9CisjZW5kaWYgLyogTk9YRkVSICovCisKKyNpZmRlZiBBTllY MjUKK2ludAorc2V0eDI1KCkgeworICAgIGlmICgoeSA9IGNta2V5KHgyNXRhYixueDI1LCJYLjI1 IGNhbGwgb3B0aW9ucyIsIiIseHhzdHJpbmcpKSA8IDApCisgICAgICByZXR1cm4oeSk7CisgICAg c3dpdGNoICh5KSB7CisgICAgICBjYXNlIFhZVURBVDoKKyAgICAgICAgaWYgKCh6ID0gY21rZXko b25vZmYsMiwiWC4yNSBjYWxsIHVzZXIgZGF0YSIsIiIseHhzdHJpbmcpKQorICAgICAgICAgICAg PCAwKSByZXR1cm4oeik7CisgICAgICAgIGlmICh6ID09IDApIHsKKyAgICAgICAgICAgIGlmICgo eiA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHopOworICAgICAgICAgICAgY3VkYXRhID0gMDsgICAg ICAgICAgICAgLyogZGlzYWJsZSBjYWxsIHVzZXIgZGF0YSAqLworICAgICAgICAgICAgcmV0dXJu IChzdWNjZXNzID0gMSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCh4ID0gY210eHQoIlguMjUg Y2FsbCB1c2VyIGRhdGEgc3RyaW5nIiwiIiwmcyx4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICBy ZXR1cm4oeCk7CisgICAgICAgIGlmICgoaW50KXN0cmxlbihzKSA9PSAwKSB7CisgICAgICAgICAg ICByZXR1cm4gKC0zKTsKKyAgICAgICAgfSBlbHNlIGlmICgoaW50KXN0cmxlbihzKSA+IE1BWENV REFUQSkgeworICAgICAgICAgICAgcHJpbnRmKCI/VGhlIGxlbmd0aCBtdXN0IGJlID4gMCBhbmQg PD0gJWRcbiIsTUFYQ1VEQVRBKTsKKyAgICAgICAgICAgIHJldHVybigtMik7CisgICAgICAgIH0K KyAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeSk7CisgICAgICAgIGNrc3Ry bmNweSh1ZGF0YSxzLE1BWENVREFUQSk7CisgICAgICAgIGN1ZGF0YSA9IDE7ICAgICAgICAgICAg ICAgICAgICAgLyogWC4yNSBjYWxsIHVzZXIgZGF0YSBzcGVjaWZpZWQgKi8KKyAgICAgICAgcmV0 dXJuIChzdWNjZXNzID0gMSk7CisgICAgICBjYXNlIFhZQ0xPUzoKKyAgICAgICAgaWYgKCh6ID0g Y21rZXkob25vZmYsMiwiWC4yNSBjbG9zZWQgdXNlciBncm91cCBjYWxsIiwiIix4eHN0cmluZykp CisgICAgICAgICAgICA8IDApIHJldHVybih6KTsKKyAgICAgICAgaWYgKHogPT0gMCkgeworICAg ICAgICAgICAgaWYgKCh6ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeik7CisgICAgICAgICAgICBj bG9zZ3IgPSAtMTsgICAgICAgICAgICAgICAgLyogZGlzYWJsZSBjbG9zZWQgdXNlciBncm91cCAq LworICAgICAgICAgICAgcmV0dXJuIChzdWNjZXNzID0gMSk7CisgICAgICAgIH0KKyAgICAgICAg aWYgKCh5ID0gY21udW0oIjAgPD0gY3VnIGluZGV4ID49IDk5IiwiIiwxMCwmeCx4eHN0cmluZykp IDwgMCkKKyAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgIGlmICh4IDwgMCB8fCB4ID4gOTkp IHsKKyAgICAgICAgICAgIHByaW50ZigiP1RoZSBjaG9pY2VzIGFyZSAwIDw9IGN1ZyBpbmRleCA+ PSA5OVxuIik7CisgICAgICAgICAgICByZXR1cm4oLTIpOworICAgICAgICB9CisgICAgICAgIGlm ICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkpOworICAgICAgICBjbG9zZ3IgPSB4OyAgICAg ICAgICAgICAgICAgICAgIC8qIGNsb3NlZCB1c2VyIGdyb3VwIHNlbGVjdGVkICovCisgICAgICAg IHJldHVybiAoc3VjY2VzcyA9IDEpOworCisgICAgICBjYXNlIFhZUkVWQzoKKyAgICAgICAgaWYo KHogPSBjbWtleShvbm9mZiwyLCJYLjI1IHJldmVyc2UgY2hhcmdlIGNhbGwiLCIiLHh4c3RyaW5n KSkgPCAwKQorICAgICAgICAgIHJldHVybih6KTsKKyAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkg PCAwKSByZXR1cm4oeCk7CisgICAgICAgIHJldmNhbGwgPSB6OworICAgICAgICByZXR1cm4gKHN1 Y2Nlc3MgPSAxKTsKKyAgICB9Cit9CisKKyNpZm5kZWYgSUJNWDI1CitpbnQKK3NldHBhZHAoKSB7 CisgICAgaWYgKCh5ID0gY21rZXkocGFkeDN0YWIsbnBhZHgzLCJQQUQgWC4zIHBhcmFtZXRlciBu YW1lIiwiIix4eHN0cmluZykpIDwgMCkKKyAgICAgIHJldHVybih5KTsKKyAgICB4ID0geTsKKyAg ICBzd2l0Y2ggKHgpIHsKKyAgICAgIGNhc2UgUEFEX0JSRUFLX0NIQVJBQ1RFUjoKKyAgICAgICAg aWYgKCh5ID0gY21udW0oIlBBRCBicmVhayBjaGFyYWN0ZXIgdmFsdWUiLCIiLDEwLCZ6LHh4c3Ry aW5nKSkgPCAwKQorICAgICAgICAgIHJldHVybih5KTsKKyAgICAgICAgaWYgKCh5ID0gY21jZm0o KSkgPCAwKSByZXR1cm4oeSk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBQQURfRVNDQVBF OgorICAgICAgICBpZiAoKHkgPSBjbW51bSgiUEFEIGVzY2FwZSIsIiIsMTAsJnoseHhzdHJpbmcp KSA8IDApIHJldHVybih5KTsKKyAgICAgICAgaWYgKHogIT0gMCAmJiB6ICE9IDEpIHsKKyAgICAg ICAgICAgIHByaW50ZigiP1RoZSBjaG9pY2VzIGFyZSAwIG9yIDFcbiIpOworICAgICAgICAgICAg cmV0dXJuKC0yKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJl dHVybih5KTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIFBBRF9FQ0hPOgorICAgICAgICBp ZiAoKHkgPSBjbW51bSgiUEFEIGVjaG8iLCIiLDEwLCZ6LHh4c3RyaW5nKSkgPCAwKSByZXR1cm4o eSk7CisgICAgICAgIGlmICh6ICE9IDAgJiYgeiAhPSAxKSB7CisgICAgICAgICAgICBwcmludGYo Ij9UaGUgY2hvaWNlcyBhcmUgMCBvciAxXG4iKTsKKyAgICAgICAgICAgIHJldHVybigtMik7Cisg ICAgICAgIH0KKyAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeSk7CisgICAg ICAgIGJyZWFrOworICAgICAgY2FzZSBQQURfREFUQV9GT1JXQVJEX0NIQVI6CisgICAgICAgIGlm ICgoeSA9IGNtbnVtKCJQQUQgZGF0YSBmb3J3YXJkIGNoYXIiLCIiLDEwLCZ6LHh4c3RyaW5nKSkg PCAwKQorICAgICAgICAgIHJldHVybih5KTsKKyAgICAgICAgaWYgKHogIT0gMCAmJiB6ICE9IDIp IHsKKyAgICAgICAgICAgIHByaW50ZigiP1RoZSBjaG9pY2VzIGFyZSAwIG9yIDJcbiIpOworICAg ICAgICAgICAgcmV0dXJuKC0yKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoKHkgPSBjbWNmbSgp KSA8IDApIHJldHVybih5KTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIFBBRF9EQVRBX0ZP UldBUkRfVElNRU9VVDoKKyAgICAgICAgaWYgKCh5ID0gY21udW0oIlBBRCBkYXRhIGZvcndhcmQg dGltZW91dCIsIiIsMTAsJnoseHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgICByZXR1cm4oeSk7 CisgICAgICAgIGlmICh6IDwgMCB8fCB6ID4gMjU1KSB7CisgICAgICAgICAgICBwcmludGYoIj9U aGUgY2hvaWNlcyBhcmUgMCBvciAxIDw9IHRpbWVvdXQgPD0gMjU1XG4iKTsKKyAgICAgICAgICAg IHJldHVybigtMik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSBy ZXR1cm4oeSk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBQQURfRkxPV19DT05UUk9MX0JZ X1BBRDoKKyAgICAgICAgaWYgKCh5ID0gY21udW0oIlBBRCBwYWQgZmxvdyBjb250cm9sIiwiIiwx MCwmeix4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgIGlmICh6 ICE9IDAgJiYgeiAhPSAxKSB7CisgICAgICAgICAgICBwcmludGYoIj9UaGUgY2hvaWNlcyBhcmUg MCBvciAxXG4iKTsKKyAgICAgICAgICAgIHJldHVybigtMik7CisgICAgICAgIH0KKyAgICAgICAg aWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeSk7CisgICAgICAgIGJyZWFrOworICAgICAg Y2FzZSBQQURfU1VQUFJFU1NJT05fT0ZfU0lHTkFMUzoKKyAgICAgICAgaWYgKCh5ID0gY21udW0o IlBBRCBzZXJ2aWNlIiwiIiwxMCwmeix4eHN0cmluZykpIDwgMCkgcmV0dXJuKHkpOworICAgICAg ICBpZiAoeiAhPSAwICYmIHogIT0gMSkgeworICAgICAgICAgICAgcHJpbnRmKCI/VGhlIGNob2lj ZXMgYXJlIDAgb3IgMVxuIik7CisgICAgICAgICAgICByZXR1cm4oLTIpOworICAgICAgICB9Cisg ICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkpOworICAgICAgICBicmVhazsK KworICAgICAgY2FzZSBQQURfQlJFQUtfQUNUSU9OOgorICAgICAgICBpZiAoKHkgPSBjbW51bSgi UEFEIGJyZWFrIGFjdGlvbiIsIiIsMTAsJnoseHhzdHJpbmcpKSA8IDApIHJldHVybih5KTsKKyAg ICAgICAgaWYgKHogIT0gMCAmJiB6ICE9IDEgJiYgeiAhPSAyICYmIHogIT0gNSAmJiB6ICE9IDgg JiYgeiAhPSAyMSkgeworICAgICAgICAgICAgcHJpbnRmKCI/VGhlIGNob2ljZXMgYXJlIDAsIDEs IDIsIDUsIDggb3IgMjFcbiIpOworICAgICAgICAgICAgcmV0dXJuKC0yKTsKKyAgICAgICAgfQor ICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsKKyAgICAgICAgYnJlYWs7 CisKKyAgICAgIGNhc2UgUEFEX1NVUFBSRVNTSU9OX09GX0RBVEE6CisgICAgICAgIGlmICgoeSA9 IGNtbnVtKCJQQUQgZGF0YSBkZWxpdmVyeSIsIiIsMTAsJnoseHhzdHJpbmcpKSA8IDApIHJldHVy bih5KTsKKyAgICAgICAgaWYgKHogIT0gMCAmJiB6ICE9IDEpIHsKKyAgICAgICAgICAgIHByaW50 ZigiP1RoZSBjaG9pY2VzIGFyZSAwIG9yIDFcbiIpOworICAgICAgICAgICAgcmV0dXJuKC0yKTsK KyAgICAgICAgfQorICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsKKyAg ICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgUEFEX1BBRERJTkdfQUZURVJfQ1I6CisgICAgICAg IGlmICgoeSA9IGNtbnVtKCJQQUQgY3JwYWQiLCIiLDEwLCZ6LHh4c3RyaW5nKSkgPCAwKSByZXR1 cm4oeSk7CisgICAgICAgIGlmICh6IDwgMCB8fCB6ID4gNykgeworICAgICAgICAgICAgcHJpbnRm KCI/VGhlIGNob2ljZXMgYXJlIDAgb3IgMSA8PSBjcnBhZCA8PSA3XG4iKTsKKyAgICAgICAgICAg IHJldHVybigtMik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSBy ZXR1cm4oeSk7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIFBBRF9MSU5FX0ZPTERJTkc6 CisgICAgICAgIGlmICgoeSA9IGNtbnVtKCJQQUQgbGluZWZvbGQiLCIiLDEwLCZ6LHh4c3RyaW5n KSkgPCAwKSByZXR1cm4oeSk7CisgICAgICAgIGlmICh6IDwgMCB8fCB6ID4gMjU1KSB7CisgICAg ICAgICAgICBwcmludGYoIj9UaGUgY2hvaWNlcyBhcmUgMCBvciAxIDw9IGxpbmVmb2xkIDw9IDI1 NVxuIik7CisgICAgICAgICAgICByZXR1cm4oLTIpOworICAgICAgICB9CisgICAgICAgIGlmICgo eSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkpOworICAgICAgICBicmVhazsKKworICAgICAgY2Fz ZSBQQURfTElORV9TUEVFRDoKKyAgICAgICAgaWYgKCh5ID0gY21udW0oIlBBRCBiYXVkcmF0ZSIs IiIsMTAsJnoseHhzdHJpbmcpKSA8IDApIHJldHVybih5KTsKKyAgICAgICAgaWYgKHogPCAwIHx8 IHogPiAxOCkgeworICAgICAgICAgICAgcHJpbnRmKCI/VGhlIGNob2ljZXMgYXJlIDAgPD0gYmF1 ZHJhdGUgPD0gMThcbiIpOworICAgICAgICAgICAgcmV0dXJuKC0yKTsKKyAgICAgICAgfQorICAg ICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsKKyAgICAgICAgYnJlYWs7CisK KyAgICAgIGNhc2UgUEFEX0ZMT1dfQ09OVFJPTF9CWV9VU0VSOgorICAgICAgICBpZiAoKHkgPSBj bW51bSgiUEFEIHRlcm1pbmFsIGZsb3cgY29udHJvbCIsIiIsMTAsJnoseHhzdHJpbmcpKSA8IDAp CisgICAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgIGlmICh6ICE9IDAgJiYgeiAhPSAxKSB7 CisgICAgICAgICAgICBwcmludGYoIj9UaGUgY2hvaWNlcyBhcmUgMCBvciAxXG4iKTsKKyAgICAg ICAgICAgIHJldHVybigtMik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkg PCAwKSByZXR1cm4oeSk7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIFBBRF9MRl9BRlRF Ul9DUjoKKyAgICAgICAgaWYgKCh5ID0gY21udW0oIlBBRCBjcnBhZCIsIiIsMTAsJnoseHhzdHJp bmcpKSA8IDApIHJldHVybih5KTsKKyAgICAgICAgaWYgKHogPCAwIHx8IHogPT0gMyB8fCB6ID4g NykgeworICAgICAgICAgICAgcHJpbnRmKCI/VGhlIGNob2ljZXMgYXJlIDAsIDEsIDIsIDQsIDUs IDYgb3IgN1xuIik7CisgICAgICAgICAgICByZXR1cm4oLTIpOworICAgICAgICB9CisgICAgICAg IGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkpOworICAgICAgICBicmVhazsKKworICAg ICAgY2FzZSBQQURfUEFERElOR19BRlRFUl9MRjoKKyAgICAgICAgaWYgKCh5ID0gY21udW0oIlBB RCBsZnBhZCIsIiIsMTAsJnoseHhzdHJpbmcpKSA8IDApIHJldHVybih5KTsKKyAgICAgICAgaWYg KHogPCAwIHx8IHogPiA3KSB7CisgICAgICAgICAgICBwcmludGYoIj9UaGUgY2hvaWNlcyBhcmUg MCBvciAxIDw9IGxmcGFkIDw9IDdcbiIpOworICAgICAgICAgICAgcmV0dXJuKC0yKTsKKyAgICAg ICAgfQorICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsKKyAgICAgICAg YnJlYWs7CisKKyAgICAgIGNhc2UgUEFEX0VESVRJTkc6CisgICAgICAgIGlmICgoeSA9IGNtbnVt KCJQQUQgZWRpdCBjb250cm9sIiwiIiwxMCwmeix4eHN0cmluZykpIDwgMCkgcmV0dXJuKHkpOwor ICAgICAgICBpZiAoeiAhPSAwICYmIHogIT0gMSkgeworICAgICAgICAgICAgcHJpbnRmKCI/VGhl IGNob2ljZXMgYXJlIDAgb3IgMVxuIik7CisgICAgICAgICAgICByZXR1cm4oLTIpOworICAgICAg ICB9CisgICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkpOworICAgICAgICBi cmVhazsKKworICAgICAgY2FzZSBQQURfQ0hBUl9ERUxFVEVfQ0hBUjoKKyAgICAgICAgaWYgKCh5 ID0gY21udW0oIlBBRCBjaGFyIGRlbGV0ZSBjaGFyIiwiIiwxMCwmeix4eHN0cmluZykpIDwgMCkK KyAgICAgICAgICAgIHJldHVybih5KTsKKyAgICAgICAgaWYgKHogPCAwIHx8IHogPiAxMjcpIHsK KyAgICAgICAgICAgIHByaW50ZigiP1RoZSBjaG9pY2VzIGFyZSAwIG9yIDEgPD0gY2hhcmRlbGV0 ZSA8PSAxMjdcbiIpOworICAgICAgICAgICAgcmV0dXJuKC0yKTsKKyAgICAgICAgfQorICAgICAg ICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsKKyAgICAgICAgYnJlYWs7CisKKyAg ICAgIGNhc2UgUEFEX0JVRkZFUl9ERUxFVEVfQ0hBUjoKKyAgICAgICAgaWYgKCh5ID0gY21udW0o IlBBRCBidWZmZXIgZGVsZXRlIGNoYXIiLCIiLDEwLCZ6LHh4c3RyaW5nKSkgPCAwKQorICAgICAg ICAgICAgcmV0dXJuKHkpOworICAgICAgICBpZiAoeiA8IDAgfHwgeiA+IDEyNykgeworICAgICAg ICAgICAgcHJpbnRmKCI/VGhlIGNob2ljZXMgYXJlIDAgb3IgMSA8PSBidWZmZXJkZWxldGUgPD0g MTI3XG4iKTsKKyAgICAgICAgICAgIHJldHVybigtMik7CisgICAgICAgIH0KKyAgICAgICAgaWYg KCh5ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeSk7CisgICAgICAgIGJyZWFrOworCisgICAgICBj YXNlIFBBRF9CVUZGRVJfRElTUExBWV9DSEFSOgorICAgICAgICBpZiAoKHkgPSBjbW51bSgiUEFE IGRpc3BsYXkgbGluZSBjaGFyIiwiIiwxMCwmeix4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICAg IHJldHVybih5KTsKKyAgICAgICAgaWYgKHogPCAwIHx8IHogPiAxMjcpIHsKKyAgICAgICAgICAg IHByaW50ZigiP1RoZSBjaG9pY2VzIGFyZSAwIG9yIDEgPD0gZGlzcGxheWxpbmUgPD0gMTI3XG4i KTsKKyAgICAgICAgICAgIHJldHVybigtMik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCh5ID0g Y21jZm0oKSkgPCAwKSByZXR1cm4oeSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBwYWRw YXJtc1t4XSA9IHo7CisgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKK30KKyNlbmRpZiAvKiBJQk1Y MjUgKi8KKyNlbmRpZiAvKiBBTllYMjUgKi8KKworI2lmbmRlZiBOT1hGRVIKK2ludAorc2V0YXQo cm1zZmxnKSBpbnQgcm1zZmxnOyB7CisgICAgaW50IHh4OworICAgIGlmICgoeSA9IGNta2V5KGF0 dHJ0YWIsbmF0ciwiRmlsZSBBdHRyaWJ1dGUgcGFja2V0cyIsIiIseHhzdHJpbmcpKSA8IDApCisg ICAgICByZXR1cm4oeSk7CisgICAgaWYgKHkgPT0gQVRfWEFMTCkgeyAgICAgICAgICAgICAgICAg LyogQVRUUklCVVRFUyBBTEwgT04gb3IgQUxMIE9GRiAqLworICAgICAgICBpZiAoKHogPSBzZXRv bigmeHgpKSA8IDApIHJldHVybih6KTsKKyAgICAgICAgaWYgKHJtc2ZsZykgeworICAgICAgICAg ICAgcHJpbnRmKCJTb3JyeSwgY29tbWFuZCBub3QgYXZhaWxhYmxlXG4iKTsKKyAgICAgICAgICAg IHJldHVybigtOSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhdGVuY2kgPSB4eDsg ICAgICAgICAgICAgICAgLyogRW5jb2RpbmcgaW4gKi8KKyAgICAgICAgICAgIGF0ZW5jbyA9IHh4 OyAgICAgICAgICAgICAgICAvKiBFbmNvZGluZyBvdXQgKi8KKyAgICAgICAgICAgIGF0ZGF0aSA9 IHh4OyAgICAgICAgICAgICAgICAvKiBEYXRlIGluICovCisgICAgICAgICAgICBhdGRhdG8gPSB4 eDsgICAgICAgICAgICAgICAgLyogRGF0ZSBvdXQgKi8KKyAgICAgICAgICAgIGF0ZGlzaSA9IHh4 OyAgICAgICAgICAgICAgICAvKiBEaXNwb3NpdGlvbiBpbi9vdXQgKi8KKyAgICAgICAgICAgIGF0 ZGlzbyA9IHh4OworICAgICAgICAgICAgYXRsZW5pID0geHg7ICAgICAgICAgICAgICAgIC8qIExl bmd0aCBpbi9vdXQgKGJvdGgga2luZHMpICovCisgICAgICAgICAgICBhdGxlbm8gPSB4eDsKKyAg ICAgICAgICAgIGF0YmxraSA9IHh4OyAgICAgICAgICAgICAgICAvKiBCbG9ja3NpemUgaW4vb3V0 ICovCisgICAgICAgICAgICBhdGJsa28gPSB4eDsKKyAgICAgICAgICAgIGF0dHlwaSA9IHh4OyAg ICAgICAgICAgICAgICAvKiBGaWxlIHR5cGUgaW4vb3V0ICovCisgICAgICAgICAgICBhdHR5cG8g PSB4eDsKKyAgICAgICAgICAgIGF0c2lkaSA9IHh4OyAgICAgICAgICAgICAgICAvKiBTeXN0ZW0g SUQgaW4vb3V0ICovCisgICAgICAgICAgICBhdHNpZG8gPSB4eDsKKyAgICAgICAgICAgIGF0c3lz aSA9IHh4OyAgICAgICAgICAgICAgICAvKiBTeXN0ZW0tZGVwZW5kZW50IHBhcmFtcyBpbi9vdXQg Ki8KKyAgICAgICAgICAgIGF0c3lzbyA9IHh4OworI2lmZGVmIENLX1BFUk1TICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIFByb3RlY3Rpb24gKi8KKyAgICAgICAgICAgIGF0bHByaSA9IHh4OyAg ICAgICAgICAgICAgICAvKiBMb2NhbCBpbiAqLworICAgICAgICAgICAgYXRscHJvID0geHg7ICAg ICAgICAgICAgICAgIC8qIExvY2FsIG91dCAqLworICAgICAgICAgICAgYXRncHJpID0geHg7ICAg ICAgICAgICAgICAgIC8qIEdlbmVyaWMgaW4gKi8KKyAgICAgICAgICAgIGF0Z3BybyA9IHh4OyAg ICAgICAgICAgICAgICAvKiBHZW5lcmljIG91dCAqLworI2VuZGlmIC8qIENLX1BFUk1TICovCisj aWZkZWYgU1RSQVRVUworICAgICAgICAgICAgYXRmcm1pID0geHg7ICAgICAgICAgICAgICAgIC8q IEZvcm1hdCBpbi9vdXQgKi8KKyAgICAgICAgICAgIGF0ZnJtbyA9IHh4OworICAgICAgICAgICAg YXRjcmVpID0geHg7ICAgICAgICAgICAgICAgIC8qIENyZWF0b3IgaWQgaW4vb3V0ICovCisgICAg ICAgICAgICBhdGNyZW8gPSB4eDsKKyAgICAgICAgICAgIGF0YWN0aSA9IHh4OyAgICAgICAgICAg ICAgICAvKiBBY2NvdW50IGluL291dCAqLworICAgICAgICAgICAgYXRhY3RvID0geHg7CisjZW5k aWYgLyogU1RSQVRVUyAqLworICAgICAgICB9CisgICAgICAgIHJldHVybih6KTsKKyAgICB9IGVs c2UgaWYgKHkgPT0gQVRfQUxMWSB8fCB5ID09IEFUX0FMTE4pIHsgLyogQVRUUklCVVRFUyBPTiBv ciBPRkYgKi8KKyAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7CisgICAg ICAgIGF0Y2FwciA9ICh5ID09IEFUX0FMTFkpID8gMSA6IDA7CisgICAgICAgIGlmIChybXNmbGcp IHsKKyAgICAgICAgICAgIHNzdGF0ZSA9IHNldGdlbignUycsICIxMzIiLCBhdGNhcHIgPyAiMSIg OiAiMCIsICIiKTsKKyAgICAgICAgICAgIHJldHVybigoaW50KSBzc3RhdGUpOworICAgICAgICB9 IGVsc2UgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKyAgICB9CisgICAgLyogT3RoZXJ3aXNlLCBpdCdz IGFuIGluZGl2aWR1YWwgYXR0cmlidXRlIHRoYXQgd2FudHMgdHVybmluZyBvZmYvb24gKi8KKwor ICAgIGlmICgoeiA9IGNta2V5KG9ub2ZmLDIsIiIsIiIseHhzdHJpbmcpKSA8IDApIHJldHVybih6 KTsKKyAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKKworLyogVGhlcmUgYXJl IGJldHRlciB3YXlzIHRvIGRvIHRoaXMuLi4gKi8KKy8qIFRoZSByZWFsIHByb2JsZW0gaXMgdGhh dCB3ZSdyZSBub3Qgc2VwYXJhdGluZyB0aGUgaW4gYW5kIG91dCBjYXNlcyAqLworLyogYW5kIHNv IHdlIGhhdmUgdG8gYXJiaXRyYXJpbHkgcGljayB0aGUgImluIiBjYXNlLCBpLmUgdGVsbCB0aGUg cmVtb3RlICovCisvKiBzZXJ2ZXIgdG8gaWdub3JlIGluY29taW5nIGF0dHJpYnV0ZXMgb2YgdGhl IHNwZWNpZmllZCB0eXBlLCByYXRoZXIgKi8KKy8qIHRoYW4gdGVsbGluZyBpdCBub3QgdG8gc2Vu ZCB0aGVtLiAgVGhlIHByb3RvY29sIGRvZXMgbm90ICh5ZXQpIGRlZmluZSAqLworLyogY29kZXMg Zm9yICJpbi1hbmQtb3V0LWF0LXRoZS1zYW1lLXRpbWUiLiAqLworCisgICAgc3dpdGNoICh5KSB7 CisjaWZkZWYgQ0tfUEVSTVMKKy8qIFdlJ3JlIGx1bXBpbmcgbG9jYWwgYW5kIGdlbmVyaWMgcHJv dGVjdGlvbiB0b2dldGhlciBmb3Igbm93Li4uICovCisgICAgICBjYXNlIEFUX0xQUk86CisgICAg ICBjYXNlIEFUX0dQUk86CisgICAgICAgIGlmIChybXNmbGcpIHsKKyAgICAgICAgICAgIHNzdGF0 ZSA9IHNldGdlbignUycsICIxNDMiLCB6ID8gIjEiIDogIjAiLCAiIik7CisgICAgICAgICAgICBy ZXR1cm4oKGludCkgc3N0YXRlKTsKKyAgICAgICAgfQorICAgICAgICBhdGxwcmkgPSBhdGxwcm8g PSBhdGdwcmkgPSBhdGdwcm8gPSB6OyBicmVhazsKKyNlbmRpZiAvKiBDS19QRVJNUyAqLworICAg ICAgY2FzZSBBVF9ESVNQOgorICAgICAgICBpZiAocm1zZmxnKSB7CisgICAgICAgICAgICBzc3Rh dGUgPSBzZXRnZW4oJ1MnLCAiMTQyIiwgeiA/ICIxIiA6ICIwIiwgIiIpOworICAgICAgICAgICAg cmV0dXJuKChpbnQpIHNzdGF0ZSk7CisgICAgICAgIH0KKyAgICAgICAgYXRkaXNpID0gYXRkaXNv ID0gejsgYnJlYWs7CisgICAgICBjYXNlIEFUX0VOQ086CisgICAgICAgIGlmIChybXNmbGcpIHsK KyAgICAgICAgICAgIHNzdGF0ZSA9IHNldGdlbignUycsICIxNDEiLCB6ID8gIjEiIDogIjAiLCAi Iik7CisgICAgICAgICAgICByZXR1cm4oKGludCkgc3N0YXRlKTsKKyAgICAgICAgfQorICAgICAg ICBhdGVuY2kgPSBhdGVuY28gPSB6OyBicmVhazsKKyAgICAgIGNhc2UgQVRfREFURToKKyAgICAg ICAgaWYgKHJtc2ZsZykgeworICAgICAgICAgICAgc3N0YXRlID0gc2V0Z2VuKCdTJywgIjEzNSIs IHogPyAiMSIgOiAiMCIsICIiKTsKKyAgICAgICAgICAgIHJldHVybigoaW50KSBzc3RhdGUpOwor ICAgICAgICB9CisgICAgICAgIGF0ZGF0aSA9IGF0ZGF0byA9IHo7IGJyZWFrOworICAgICAgY2Fz ZSBBVF9MRU5COgorICAgICAgY2FzZSBBVF9MRU5LOgorICAgICAgICBpZiAocm1zZmxnKSB7Cisg ICAgICAgICAgICBzc3RhdGUgPSBzZXRnZW4oJ1MnLCAiMTMzIiwgeiA/ICIxIiA6ICIwIiwgIiIp OworICAgICAgICAgICAgcmV0dXJuKChpbnQpIHNzdGF0ZSk7CisgICAgICAgIH0KKyAgICAgICAg YXRsZW5pID0gYXRsZW5vID0gejsgYnJlYWs7CisgICAgICBjYXNlIEFUX0JMS1M6CisgICAgICAg IGlmIChybXNmbGcpIHsKKyAgICAgICAgICAgIHNzdGF0ZSA9IHNldGdlbignUycsICIxMzkiLCB6 ID8gIjEiIDogIjAiLCAiIik7CisgICAgICAgICAgICByZXR1cm4oKGludCkgc3N0YXRlKTsKKyAg ICAgICAgfQorICAgICAgICBhdGJsa2kgPSBhdGJsa28gPSB6OyBicmVhazsKKyAgICAgIGNhc2Ug QVRfRlRZUDoKKyAgICAgICAgaWYgKHJtc2ZsZykgeworICAgICAgICAgICAgc3N0YXRlID0gc2V0 Z2VuKCdTJywgIjEzNCIsIHogPyAiMSIgOiAiMCIsICIiKTsKKyAgICAgICAgICAgIHJldHVybigo aW50KSBzc3RhdGUpOworICAgICAgICB9CisgICAgICAgIGF0dHlwaSA9IGF0dHlwbyA9IHo7IGJy ZWFrOworI2lmZGVmIFNUUkFUVVMKKyAgICAgIGNhc2UgQVRfQ1JFQToKKyAgICAgICAgaWYgKHJt c2ZsZykgeworICAgICAgICAgICAgc3N0YXRlID0gc2V0Z2VuKCdTJywgIjEzNiIsIHogPyAiMSIg OiAiMCIsICIiKTsKKyAgICAgICAgICAgIHJldHVybigoaW50KSBzc3RhdGUpOworICAgICAgICB9 CisgICAgICAgIGF0Y3JlaSA9IGF0Y3JlbyA9IHo7IGJyZWFrOworICAgICAgY2FzZSBBVF9BQ0NU OgorICAgICAgICBpZiAocm1zZmxnKSB7CisgICAgICAgICAgICBzc3RhdGUgPSBzZXRnZW4oJ1Mn LCAiMTM3IiwgeiA/ICIxIiA6ICIwIiwgIiIpOworICAgICAgICAgICAgcmV0dXJuKChpbnQpIHNz dGF0ZSk7CisgICAgICAgIH0KKyAgICAgICAgYXRhY3RpID0gYXRhY3RvID0gejsgYnJlYWs7Cisj ZW5kaWYgLyogU1RSQVRVUyAqLworICAgICAgY2FzZSBBVF9TWVNJOgorICAgICAgICBpZiAocm1z ZmxnKSB7CisgICAgICAgICAgICBzc3RhdGUgPSBzZXRnZW4oJ1MnLCAiMTQ1IiwgeiA/ICIxIiA6 ICIwIiwgIiIpOworICAgICAgICAgICAgcmV0dXJuKChpbnQpIHNzdGF0ZSk7CisgICAgICAgIH0K KyAgICAgICAgYXRzaWRpID0gYXRzaWRvID0gejsgYnJlYWs7CisgICAgICBjYXNlIEFUX1JFQ0Y6 CisgICAgICAgIGlmIChybXNmbGcpIHsKKyAgICAgICAgICAgIHNzdGF0ZSA9IHNldGdlbignUycs ICIxNDYiLCB6ID8gIjEiIDogIjAiLCAiIik7CisgICAgICAgICAgICByZXR1cm4oKGludCkgc3N0 YXRlKTsKKyAgICAgICAgfQorICAgICAgICBhdGZybWkgPSBhdGZybW8gPSB6OyBicmVhazsKKyAg ICAgIGNhc2UgQVRfU1lTUDoKKyAgICAgICAgaWYgKHJtc2ZsZykgeworICAgICAgICAgICAgc3N0 YXRlID0gc2V0Z2VuKCdTJywgIjE0NyIsIHogPyAiMSIgOiAiMCIsICIiKTsKKyAgICAgICAgICAg IHJldHVybigoaW50KSBzc3RhdGUpOworICAgICAgICB9CisgICAgICAgIGF0c3lzaSA9IGF0c3lz byA9IHo7IGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgcHJpbnRmKCI/Tm90IGF2YWls YWJsZVxuIik7CisgICAgICAgIHJldHVybigtMik7CisgICAgfQorICAgIHJldHVybigxKTsKK30K KyNlbmRpZiAvKiBOT1hGRVIgKi8KKworI2lmbmRlZiBOT1NQTAoraW50CitzZXRpbnAoKSB7Cisg ICAgaWYgKCh5ID0gY21rZXkoaW5wdGFiLG5pbnAsIiIsIiIseHhzdHJpbmcpKSA8IDApIHJldHVy bih5KTsKKyAgICBzd2l0Y2ggKHkpIHsKKyNpZmRlZiBPUzIKKyAgICAgIGNhc2UgSU5fUEFDOiAg ICAgICAgICAgICAgICAgICAgICAvKiBTRVQgSU5QVVQgUEFDSU5HICovCisgICAgICAgIHogPSBj bW51bSgibWlsbGlzZWNvbmRzIiwiMCIsMTAsJngseHhzdHJpbmcpOworICAgICAgICByZXR1cm4o c2V0bnVtKCZ0dF9pbnBhY2luZyx4LHosMTAwMCkpOworICAgICAgY2FzZSBJTl9UUk06ICAgICAg ICAgICAgICAgICAgICAgIC8qIFNFVCBJTlBVVCBURVJNSU5BTCAqLworICAgICAgICByZXR1cm4o c2V0b24oJmludGVybSkpOworI2VuZGlmIC8qIE9TMiAqLworICAgICAgY2FzZSBJTl9ERUY6ICAg ICAgICAgICAgICAgICAgICAgIC8qIFNFVCBJTlBVVCBERUZBVUxULVRJTUVPVVQgKi8KKyAgICAg ICAgeiA9IGNtbnVtKCJQb3NpdGl2ZSBudW1iZXIiLCIiLDEwLCZ4LHh4c3RyaW5nKTsKKyAgICAg ICAgcmV0dXJuKHNldG51bSgmaW5kZWYseCx6LDk0KSk7CisjaWZkZWYgQ0tGTE9BVAorICAgICAg Y2FzZSBJTl9TQ0E6ICAgICAgICAgICAgICAgICAgICAgIC8qIFNFVCBJTlBVVCBTQ0FMRS1GQUNU T1IgKi8KKwlpZiAoKHggPSBjbWZsZCgiTnVtYmVyIHN1Y2ggYXMgMiBvciAwLjUiLCIxLjAiLCZz LCB4eHN0cmluZykpIDwgMCkKKwkgIHJldHVybih4KTsKKyAgICAgICAgaWYgKGlzZmxvYXQocyww KSkgewkJLyogQSBmbG9hdGluZy1wb2ludCBudW1iZXI/ICovCisgICAgICAgICAgICBleHRlcm4g Y2hhciAqIGlucHNjYWxlOworCSAgICBpbnNjYWxlID0gZmxvYXR2YWw7CQkvKiBZZXMsIGdldCBp dHMgdmFsdWUgKi8KKwkgICAgbWFrZXN0cigmaW5wc2NhbGUscyk7CS8qIFNhdmUgaXQgYXMgXHYo aW5zY2FsZSkgKi8KKwkgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKwl9IGVsc2UgeworCSAgICBy ZXR1cm4oLTIpOworCX0KKyNlbmRpZgkvKiBDS0ZMT0FUICovCisgICAgICBjYXNlIElOX1RJTTog ICAgICAgICAgICAgICAgICAgICAgLyogU0VUIElOUFVUIFRJTUVPVVQtQUNUSU9OICovCisgICAg ICAgIGlmICgoeiA9IGNta2V5KGludGltdCwyLCIiLCIiLHh4c3RyaW5nKSkgPCAwKSByZXR1cm4o eik7CisgICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOworICAgICAgICBp bnRpbWVbY21kbHZsXSA9IHo7CisgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisgICAgICBj YXNlIElOX0NBUzogICAgICAgICAgICAgICAgICAgICAgLyogU0VUIElOUFVUIENBU0UgKi8KKyAg ICAgICAgaWYgKCh6ID0gY21rZXkoaW5jYXN0LDIsIiIsIiIseHhzdHJpbmcpKSA8IDApIHJldHVy bih6KTsKKyAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7CisgICAgICAg IGlucGNhc1tjbWRsdmxdID0gejsKKyAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKyAgICAg IGNhc2UgSU5fRUNIOiAgICAgICAgICAgICAgICAgICAgICAvKiBTRVQgSU5QVVQgRUNITyAqLwor ICAgICAgICByZXR1cm4oc2V0b24oJmluZWNobykpOworICAgICAgY2FzZSBJTl9TSUw6ICAgICAg ICAgICAgICAgICAgICAgIC8qIFNFVCBJTlBVVCBTSUxFTkNFICovCisgICAgICAgIHogPSBjbW51 bSgiU2Vjb25kcyBvZiBpbmFjdGl2aXR5IGJlZm9yZSBJTlBVVCBmYWlscyIsIiIsMTAsJngsCisg ICAgICAgICAgICAgICAgICB4eHN0cmluZyk7CisgICAgICAgIHJldHVybihzZXRudW0oJmluc2ls ZW5jZSx4LHosLTEpKTsKKworICAgICAgY2FzZSBJTl9CVUY6ICAgICAgICAgICAgICAgICAgICAg IC8qIFNFVCBJTlBVVCBCVUZGRVItU0laRSAqLworICAgICAgICBpZiAoKHogPSBjbW51bSgiTnVt YmVyIG9mIGJ5dGVzIGluIElOUFVUIGJ1ZmZlciIsCisgICAgICAgICAgICAgICAgICAgICAgIGNr aXRvYShJTlBCVUZTSVopLDEwLCZ4LCB4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICByZXR1cm4o eik7CisgICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkpOworICAgICAgICBp bmJ1ZnNpemUgPSAwOworICAgICAgICBpZiAoaW5wYnVmKSB7CisgICAgICAgICAgICBmcmVlKGlu cGJ1Zik7CisgICAgICAgICAgICBpbnBidWYgPSBOVUxMOworICAgICAgICAgICAgaW5wYnAgPSBO VUxMOworICAgICAgICB9CisgICAgICAgIGlmICghKHMgPSAoY2hhciAqKW1hbGxvYyh4ICsgMSkp KQorICAgICAgICAgIHJldHVybigwKTsKKyAgICAgICAgaW5wYnVmID0gczsKKyAgICAgICAgaW5w YnAgPSBzOworICAgICAgICBpbmJ1ZnNpemUgPSB4OworICAgICAgICBmb3IgKHggPSAwOyB4IDw9 IGluYnVmc2l6ZTsgeCsrKQorICAgICAgICAgIGlucGJ1Zlt4XSA9IE5VTDsKKyAgICAgICAgcmV0 dXJuKHN1Y2Nlc3MgPSAxKTsKKworI2lmZGVmIENLX0FVVE9ETAorICAgICAgY2FzZSBJTl9BREw6 ICAgICAgICAgICAgICAgICAgICAgIC8qIEFVVE9ET1dOTE9BRCAqLworICAgICAgICByZXR1cm4o c2V0b24oJmluYXV0b2RsKSk7CisjZW5kaWYgLyogQ0tfQVVUT0RMICovCisKKyAgICAgIGNhc2Ug SU5fQ0FOOiAgICAgICAgICAgICAgICAgICAgICAvKiBTRVQgSU5QVVQgSU5URVJSVVBUUyAqLwor ICAgICAgICByZXR1cm4oc2V0b24oJmluaW50cikpOworICAgIH0KKyAgICByZXR1cm4oMCk7Cit9 CisjZW5kaWYgLyogTk9TUEwgKi8KKworI2lmZGVmIE5FVENPTk4KK1ZPSUQKK25kcmVzZXQoKSB7 CisjaWZuZGVmIE5PRElBTCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVGhpcyBkZXBlbmRz IG9uIERJQUwuLi4gKi8KKyAgICBpbnQgaT0wLCBqPTA7CisgICAgaWYgKCFuZGluaXRlZCkgICAg ICAgICAgICAgICAgICAgICAgLyogRG9uJ3QgZnJlZSBnYXJiYWdlLi4uICovCisgICAgICByZXR1 cm47CisgICAgZm9yIChpID0gMDsgaSA8IG5oY291bnQ7IGkrKykgeyAgICAgLyogQ2xlYW4gb3V0 IHByZXZpb3VzIGxpc3QgKi8KKyAgICAgICAgaWYgKG5oX3BbaV0pCisgICAgICAgICAgZnJlZShu aF9wW2ldKTsKKyAgICAgICAgbmhfcFtpXSA9IE5VTEw7CisgICAgICAgIGlmIChuaF9wMltpXSkK KyAgICAgICAgICBmcmVlKG5oX3AyW2ldKTsKKyAgICAgICAgbmhfcDJbaV0gPSBOVUxMOworICAg ICAgICBmb3IgKGogPSAwOyBqIDwgNDsgaisrKSB7CisgICAgICAgICAgICBpZiAobmhfcHhbal1b aV0pCisgICAgICAgICAgICAgIGZyZWUobmhfcHhbal1baV0pOworICAgICAgICAgICAgbmhfcHhb al1baV0gPSBOVUxMOworICAgICAgICB9CisgICAgfQorI2VuZGlmIC8qIE5PRElBTCAqLworfQor CitWT0lECituZGluaXQoKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTmV0IGRp cmVjdG9yeSBwb2ludGVycyAqLworI2lmbmRlZiBOT0RJQUwgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIFRoaXMgZGVwZW5kcyBvbiBESUFMLi4uICovCisgICAgaW50IGksIGo7CisgICAgaWYg KG5kaW5pdGVkKyspICAgICAgICAgICAgICAgICAgICAgLyogRG9uJ3QgZG8gdGhpcyBtb3JlIHRo YW4gb25jZS4gKi8KKyAgICAgIHJldHVybjsKKyAgICBmb3IgKGkgPSAwOyBpIDwgTUFYRERJUjsg aSsrKSB7ICAgICAvKiBJbml0IGFsbCBwb2ludGVycyB0byBOVUxMICovCisgICAgICAgIG5ldGRp cltpXSA9IE5VTEw7CisgICAgfQorICAgIGZvciAoaSA9IDA7IGkgPCBNQVhETlVNUzsgaSsrKSB7 CisgICAgICAgIG5oX3BbaV0gPSBOVUxMOworICAgICAgICBuaF9wMltpXSA9IE5VTEw7CisgICAg ICAgIGZvciAoaiA9IDA7IGogPCA0OyBqKyspCisgICAgICAgICAgbmhfcHhbal1baV0gPSBOVUxM OworICAgIH0KKyNlbmRpZiAvKiBOT0RJQUwgKi8KK30KKworI2lmbmRlZiBOT0RJQUwKKyNpZmRl ZiBORVRDT05OCitWT0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogR2V0 IG5ldCBkZWZhdWx0cyBmcm9tIGVudmlyb25tZW50ICovCitnZXRuZXRlbnYoKSB7CisgICAgY2hh ciAqcCA9IE5VTEw7CisKKyAgICBtYWtlc3RyKCZwLGdldGVudigiS19ORVRfRElSRUNUT1JZIikp OyAvKiBEaWFsaW5nIGRpcmVjdG9yaWVzICovCisgICAgaWYgKHApIHsKKyAgICAgICAgaW50IGk7 CisgICAgICAgIHh3b3JkcyhwLE1BWERESVIsbmV0ZGlyLDApOworICAgICAgICBmb3IgKGkgPSAw OyBpIDwgTUFYRERJUjsgaSsrKSB7IC8qIEZpbGwgaW4gYW55IGdhcHMuLi4gKi8KKyAgICAgICAg ICAgIGlmICghbmV0ZGlyW2krMV0pCisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg ZWxzZQorICAgICAgICAgICAgICBuZXRkaXJbaV0gPSBuZXRkaXJbaSsxXTsKKyAgICAgICAgICAg IGRlYnVnKEYxMTEsIm5ldGRpcltpXSIsbmV0ZGlyW2ldLGkpOworICAgICAgICB9CisgICAgICAg IG5uZXRkaXIgPSBpOworICAgIH0KK30KKyNlbmRpZiAvKiBORVRDT05OICovCisjZW5kaWYgLyog Tk9ESUFMICovCisKK2ludAorI2lmZGVmIENLX0FOU0lDCitsdW5ldChjaGFyICpzKSAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogcyA9IG5hbWUgdG8gbG9vayB1cCAgICovCisjZWxzZQorbHVu ZXQocykgY2hhciAqczsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogbHVuZXQgKi8geworI2lm bmRlZiBOT0RJQUwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRoaXMgZGVwZW5kcyBvbiBE SUFMLi4uICovCisgICAgaW50IG4sIG4xLCB0LCBkZCA9IDA7CisgICAgaW50IGFtYmlndW91cyA9 IDA7CisgICAgRklMRSAqIGY7CisgICAgY2hhciAqbGluZSA9IE5VTEw7CisgICAgZXh0ZXJuIGlu dCBkaWFsZHB5OworICAgIGludCBuZXRkcHkgPSBkaWFsZHB5OworICAgIGNoYXIgKmluZm9bOF07 CisKKyAgICBuaGNvdW50ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBTZXQgdGhpcyBi ZWZvcmUgcmV0dXJuaW5nICovCisKKyAgICBpZiAoIXMgfHwgbm5ldGRpciA8IDEpICAgICAgICAg ICAgICAvKiBWYWxpZGF0ZSBhcmd1bWVudHMgKi8KKyAgICAgIHJldHVybigtMSk7CisKKyAgICBp ZiAoaXNkaWdpdCgqcykgfHwgKnMgPT0gJyonIHx8ICpzID09ICcuJykKKyAgICAgIHJldHVybigw KTsKKworICAgIGlmICgobjEgPSAoaW50KSBzdHJsZW4ocykpIDwgMSkgICAgIC8qIExlbmd0aCBv ZiBzdHJpbmcgdG8gbG9vayB1cCAqLworICAgICAgcmV0dXJuKC0xKTsKKworICAgIGlmICghKGxp bmUgPSBtYWxsb2MoMTAyNCkpKSAgICAgICAgIC8qIEFsbG9jYXRlIGlucHV0IGJ1ZmZlciAqLwor ICAgICAgcmV0dXJuKC0xKTsKKworICBsdV9hZ2FpbjoKKyAgICBmID0gTlVMTDsgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBOZXR3b3JrIGRpcmVjdG9yeSBmaWxlIGRlc2NyaXB0b3IgKi8K KyAgICB0ID0gbmhjb3VudCA9IDA7ICAgICAgICAgICAgICAgICAgICAvKiBNYXRjaCBjb3VudCAq LworICAgIGRkID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERpcmVjdG9yeSBj b3VudGVyICovCisKKyAgICBkaXJsaW5lID0gMDsKKyAgICB3aGlsZSAoMSkgeyAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBXZSBtYWtlIG9uZSBwYXNzICovCisgICAgICAgIGlmICghZikgeyAg ICAgICAgICAgICAgICAgICAgICAgLyogRGlyZWN0b3J5IG5vdCBvcGVuICovCisgICAgICAgICAg ICBpZiAoZGQgPj0gbm5ldGRpcikgICAgICAgICAgLyogTm8gZGlyZWN0b3JpZXMgbGVmdD8gKi8K KyAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAvKiBEb25lLiAqLworICAg ICAgICAgICAgaWYgKChmID0gZm9wZW4obmV0ZGlyW2RkXSwiciIpKSA9PSBOVUxMKSB7IC8qIE9w ZW4gaXQgKi8KKyAgICAgICAgICAgICAgICBwZXJyb3IobmV0ZGlyW2RkXSk7ICAgICAvKiBDYW4n dCwgcHJpbnQgbWVzc2FnZSBzYXlpbmcgd2h5ICovCisgICAgICAgICAgICAgICAgZGQrKzsKKyAg ICAgICAgICAgICAgICBjb250aW51ZTsgICAgICAgICAgICAgICAvKiBCdXQgZ28gb24gdG8gbmV4 dCBvbmUuICovCisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobmV0ZHB5KQorICAgICAg ICAgICAgICBwcmludGYoIk9wZW5pbmcgJXMuLi5cbiIsbmV0ZGlyW2RkXSk7CisgICAgICAgICAg ICBkZCsrOworICAgICAgICB9CisgICAgICAgIGxpbmVbMF0gPSBOVUw7CisgICAgICAgIGlmIChn ZXRuY3QobGluZSwxMDIzLGYsMSkgPCAwKSB7IC8qIFJlYWQgYSBsaW5lICovCisgICAgICAgICAg ICBpZiAoZikgeyAgICAgICAgICAgICAgICAgICAgLyogZiBjYW4gYmUgY2xvYmJlcmVkISAqLwor ICAgICAgICAgICAgICAgIGZjbG9zZShmKTsgICAgICAgICAgICAgIC8qIENsb3NlIHRoZSBmaWxl ICovCisgICAgICAgICAgICAgICAgZiA9IE5VTEw7ICAgICAgICAgICAgICAgLyogSW5kaWNhdGUg bmV4dCBvbmUgbmVlZHMgb3BlbmluZyAqLworICAgICAgICAgICAgfQorICAgICAgICAgICAgY29u dGludWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFsaW5lWzBdKSAgICAgICAgICAgICAgICAg ICAvKiBFbXB0eSBsaW5lICovCisgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgeHdvcmRz KGxpbmUsNyxpbmZvLDApOyAgICAgICAgICAvKiBQYXJzZSBpdCAqLworCisgICAgICAgIGlmICgh aW5mb1sxXSB8fCAhaW5mb1syXSB8fCAhaW5mb1szXSkgLyogUmVxdWlyZWQgZmllbGRzICovCisg ICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmICgqaW5mb1sxXSA9PSAnOycpICAgICAgICAg ICAgLyogRnVsbC1saW5lIGNvbW1lbnQgKi8KKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg aWYgKChuID0gKGludCkgc3RybGVuKGluZm9bMV0pKSA8IDEpIC8qIExlbmd0aCBvZiBuYW1lLXRh ZyAqLworICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAobiA8IG4xKSAgICAgICAgICAg ICAgICAgICAgIC8qIFNlYXJjaCBuYW1lIGlzIGxvbmdlciAqLworICAgICAgICAgIGNvbnRpbnVl OyAgICAgICAgICAgICAgICAgICAgIC8qIENhbid0IHBvc3NpYmx5IG1hdGNoICovCisgICAgICAg IGlmIChhbWJpZ3VvdXMgJiYgbiAhPSBuMSkKKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg aWYgKGNrc3RyY21wKHMsaW5mb1sxXSxuMSwwKSkgICAvKiBDb21wYXJlIHVzaW5nIGxlbmd0aCBv ZiAqLworICAgICAgICAgIGNvbnRpbnVlOyAgICAgICAgICAgICAgICAgICAgIC8qIHNlYXJjaCBz dHJpbmcgcy4gKi8KKworICAgICAgICAvKiBIYXZlIGEgbWF0Y2ggKi8KKworICAgICAgICBtYWtl c3RyKCYobmhfcFtuaGNvdW50XSksIGluZm9bM10pOyAgICAvKiBhZGRyZXNzICovCisgICAgICAg IG1ha2VzdHIoJihuaF9wMltuaGNvdW50XSksaW5mb1syXSk7ICAgIC8qIG5ldCB0eXBlICovCisg ICAgICAgIG1ha2VzdHIoJihuaF9weFswXVtuaGNvdW50XSksaW5mb1s0XSk7IC8qIG5ldC1zcGVj aWZpYyBzdHVmZi4uLiAqLworICAgICAgICBtYWtlc3RyKCYobmhfcHhbMV1bbmhjb3VudF0pLGlu Zm9bNV0pOworICAgICAgICBtYWtlc3RyKCYobmhfcHhbMl1bbmhjb3VudF0pLGluZm9bNl0pOwor ICAgICAgICBtYWtlc3RyKCYobmhfcHhbM11bbmhjb3VudF0pLGluZm9bN10pOworCisgICAgICAg IG5oY291bnQrKzsgICAgICAgICAgICAgICAgICAgICAgLyogQ291bnQgdGhpcyBtYXRjaCAqLwor ICAgICAgICBpZiAobmhjb3VudCA+IE1BWEROVU1TKSB7ICAgICAgIC8qIFdhdGNoIG91dCBmb3Ig dG9vIG1hbnkgKi8KKyAgICAgICAgICAgIHByaW50ZigiV2FybmluZzogJWQgbWF0Y2hlcyBmb3Vu ZCwgJWQgbWF4XG4iLAorICAgICAgICAgICAgICAgICAgIG5oY291bnQsCisgICAgICAgICAgICAg ICAgICAgTUFYRE5VTVMKKyAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgbmhjb3Vu dCA9IE1BWEROVU1TOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYg KG5oY291bnQgPT0gMSkgeyAgICAgICAgICAgICAvKiBGaXJzdCBvbmUgLSBzYXZlIGVudHJ5IG5h bWUgKi8KKyAgICAgICAgICAgIGlmIChuX25hbWUpIHsgICAgICAgICAgICAgICAvKiBGcmVlIHRo ZSBvbmUgZnJvbSBiZWZvcmUgaWYgYW55ICovCisgICAgICAgICAgICAgICAgZnJlZShuX25hbWUp OworICAgICAgICAgICAgICAgIG5fbmFtZSA9IE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAg ICAgICBpZiAoIShuX25hbWUgPSAoY2hhciAqKW1hbGxvYyhuICsgMSkpKSB7IC8qIEFsbG9jYXRl IG5ldyBzdG9yYWdlICovCisgICAgICAgICAgICAgICAgcHJpbnRmKCI/bWVtb3J5IGFsbG9jYXRp b24gZXJyb3IgLSBsdW5ldDozXG4iKTsKKyAgICAgICAgICAgICAgICBpZiAobGluZSkgeworICAg ICAgICAgICAgICAgICAgICBmcmVlKGxpbmUpOworICAgICAgICAgICAgICAgICAgICBsaW5lID0g TlVMTDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbmhjb3VudCA9IDA7Cisg ICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHQg PSBuOyAgICAgICAgICAgICAgICAgICAgICAvKiBSZW1lbWJlciBpdHMgbGVuZ3RoICovCisgICAg ICAgICAgICBzdHJjcHkobl9uYW1lLGluZm9bMV0pOyAgICAgLyogc2FmZSAqLworICAgICAgICB9 IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNlY29uZCBvciBzdWJzZXF1ZW50IG9u ZSAqLworICAgICAgICAgICAgaWYgKChpbnQpIHN0cmxlbihpbmZvWzFdKSA9PSB0KSAvKiBMZW5n dGhzIGNvbXBhcmUgKi8KKyAgICAgICAgICAgICAgaWYgKCFja3N0cmNtcChuX25hbWUsaW5mb1sx XSx0LDApKSAvKiBDYXNlbGVzcyBjb21wYXJlIE9LICovCisgICAgICAgICAgICAgICAgY29udGlu dWU7CisKKyAgICAgICAgICAgIC8qIE5hbWUgZ2l2ZW4gYnkgdXNlciBtYXRjaGVzIGVudHJpZXMg d2l0aCBkaWZmZXJlbnQgbmFtZXMgKi8KKworICAgICAgICAgICAgaWYgKGFtYmlndW91cykgICAg ICAgICAgICAgIC8qIEJlZW4gaGVyZSBiZWZvcmUgKi8KKyAgICAgICAgICAgICAgYnJlYWs7CisK KyAgICAgICAgICAgIGFtYmlndW91cyA9IDE7ICAgICAgICAgICAgICAvKiBOb3cgYW4gZXhhY3Qg bWF0Y2ggaXMgcmVxdWlyZWQgKi8KKyAgICAgICAgICAgIG5kcmVzZXQoKTsgICAgICAgICAgICAg ICAgICAvKiBDbGVhciBvdXQgcHJldmlvdXMgbGlzdCAqLworICAgICAgICAgICAgZ290byBsdV9h Z2FpbjsgICAgICAgICAgICAgIC8qIERvIGl0IGFsbCBvdmVyIGFnYWluLiAqLworICAgICAgICB9 CisgICAgfQorICAgIGlmIChsaW5lKSB7CisgICAgICAgIGZyZWUobGluZSk7CisgICAgICAgIGxp bmUgPSBOVUxMOworICAgIH0KKyAgICBpZiAobmhjb3VudCA9PSAwICYmIGFtYmlndW91cykKKyAg ICAgIHByaW50ZigiP1wiJXNcIiAtIGFtYmlndW91cyBpbiBuZXR3b3JrIGRpcmVjdG9yeVxuIixz KTsKKyNlbHNlCisgICAgbmhjb3VudCA9IDA7CisjZW5kaWYgLyogTk9ESUFMICovCisgICAgcmV0 dXJuKG5oY291bnQpOworfQorI2VuZGlmIC8qIE5FVENPTk4gKi8KKworI2lmbmRlZiBOT0xPQ0FM CisvKiAgQyBMIFMgQyBPIE4gTiBYICAtLSAgQ2xvc2UgY29ubmVjdGlvbiAgKi8KKworaW50Citj bHNjb25ueChhc2spIGludCBhc2s7IHsKKyAgICBpbnQgeCwgcmMgPSAwOworI2lmZGVmIE5FV0ZU UAorICAgIGV4dGVybiBpbnQgZnRwZ2V0LCBmdHBpc29wZW4oKTsKKyAgICBpZiAoKGZ0cGdldCA9 PSAxKSB8fCAoKGZ0cGdldCA9PSAyKSAmJiAhbG9jYWwgJiYgZnRwaXNvcGVuKCkpKQorICAgICAg cmV0dXJuKHN1Y2Nlc3MgPSBmdHBieWUoKSk7CisjZW5kaWYgLyogTkVXRlRQICovCisgICAgZGVi dWcoRjEwMSwiY2xzY29ubnggbG9jYWwiLCIiLGxvY2FsKTsKKyAgICBpZiAobG9jYWwpIHsKKyAg ICAgICAgeCA9IGFzayA/IGh1cG9rKDEpIDogMTsgICAgICAgICAvKiBNYWtlIHN1cmUgaXQncyBP SyB0byBjbG9zZSAqLworICAgICAgICBpZiAoIXgpIHsKKyAgICAgICAgICAgIHJjID0gLTE7Cisg ICAgICAgICAgICBkZWJ1ZyhGMTAxLCJjbHNjb25ueCBodXBvayBzYXlzIG5vIiwiIixyYyk7Cisg ICAgICAgICAgICByZXR1cm4ocmMpOworICAgICAgICB9CisgICAgICAgIHR0Zmx1aSgpOyAgICAg ICAgICAgICAgICAgICAgICAgLyogQ2xlYXIgYXdheSBidWZmZXJlZCB1cCBqdW5rICovCisjaWZu ZGVmIE5PRElBTAorI2lmZGVmIE9TMk9OTFkKKy8qIERvbid0IGhhbmd1cCBhIGxpbmUgdGhhdCBp cyBzaGFyZWQgd2l0aCB0aGUgU0xJUCBvciBQUFAgZHJpdmVyICovCisgICAgICAgIGlmICghdHRz bGlwICYmICF0dHBwcCkKKyNlbmRpZiAvKiBPUzJPTkxZICovCisgICAgICAgICAgbWRtaHVwKCk7 CisjZW5kaWYgLyogTk9ESUFMICovCisgICAgICAgIGlmIChuZXR3b3JrICYmIG1zZ2ZsZykKKyAg ICAgICAgICBwcmludGYoIiBDbG9zaW5nIGNvbm5lY3Rpb25cbiIpOworICAgICAgICB0dGNsb3Mo MCk7ICAgICAgICAgICAgICAgICAgICAgIC8qIENsb3NlIG9sZCBjb25uZWN0aW9uLCBpZiBhbnkg Ki8KKyAgICAgICAgcmMgPSAxOworICAgICAgICB7CisgICAgICAgICAgICBleHRlcm4gaW50IHdh c2Nsb3NlZCwgd2h5Y2xvc2VkOworICAgICAgICAgICAgaWYgKHdhc2Nsb3NlZCkgeworICAgICAg ICAgICAgICAgIHdoeWNsb3NlZCA9IFdDX0NMT1M7CisjaWZuZGVmIE5PU1BMCisgICAgICAgICAg ICAgICAgaWYgKG5tYWMpIHsgICAgICAgICAgICAgLyogQW55IG1hY3JvcyBkZWZpbmVkPyAqLwor ICAgICAgICAgICAgICAgICAgICBpbnQgazsgICAgICAgICAgICAgIC8qIFllcyAqLworICAgICAg ICAgICAgICAgICAgICAvKiBwcmludGYoIk9OX0NMT1NFIENMU0NPTk5YXG4iKTsgKi8KKyAgICAg ICAgICAgICAgICAgICAgd2FzY2xvc2VkID0gMDsKKyAgICAgICAgICAgICAgICAgICAgayA9IG1s b29rKG1hY3RhYiwib25fY2xvc2UiLG5tYWMpOyAgLyogTG9vayB0aGlzIHVwICovCisgICAgICAg ICAgICAgICAgICAgIGlmIChrID49IDApIHsgICAgICAgICAgICAgICAgICAgICAgIC8qIElmIGZv dW5kLCAqLworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRvZG8oayxja2l0b2Eod2h5Y2xv c2VkKSwwKSA+IC0xKSAvKiBzZXQgaXQgdXAsICovCisgICAgICAgICAgICAgICAgICAgICAgICAg IHBhcnNlcigxKTsgICAgICAgICAgICAgICAgICAgIC8qIGFuZCBleGVjdXRlIGl0ICovCisgICAg ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisjZW5kaWYgLyogTk9TUEwgKi8K KyAgICAgICAgICAgICAgICB3aHljbG9zZWQgPSBXQ19SRU1POworICAgICAgICAgICAgICAgIHdh c2Nsb3NlZCA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisjaWZkZWYgVk1T ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogT3IgbWF5YmUgI2lmbmRlZiBVTklYPyAq LworICAgIGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5lZWQgdG8gZG8g dGhpcyBpbiBWTVMgdG8gKi8KKyAgICAgICAgdHRjbG9zKDApOyAgICAgICAgICAgICAgICAgICAg ICAvKiBmcmVlIHRoZSB0dHkgY2hhbm5lbCBudW1iZXIgKi8KKyAgICAgICAgcmMgPSAxOyAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBvYnRhaW5lZCBpbiB0dG9wZW4oKSBvciBlbHNlICovCisg ICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc3Vic2VxdWVudCB0dG9w ZW4ncyB3b24ndCB3b3JrICovCisjZW5kaWYgLyogVk1TICovCisgICAgZG9sb2dlbmQoKTsKKyAg ICBoYXZlbGluZSA9IDA7CisgICAgaWYgKG1kbXR5cCA8IDApIHsgICAgICAgICAgICAgICAgICAg LyogU3dpdGNoaW5nIGZyb20gbmV0IHRvIGFzeW5jPyAqLworICAgICAgICBpZiAobWRtc2F2ID4g LTEpICAgICAgICAgICAgICAgIC8qIFJlc3RvcmUgbW9kZW0gdHlwZSBmcm9tIGxhc3QgKi8KKyAg ICAgICAgICBtZG10eXAgPSBtZG1zYXY7ICAgICAgICAgICAgICAvKiBTRVQgTU9ERU0gY29tbWFu ZCwgaWYgYW55LiAqLworICAgICAgICBlbHNlCisgICAgICAgICAgbWRtdHlwID0gMDsKKyAgICAg ICAgbWRtc2F2ID0gLTE7CisgICAgfQorICAgIGlmIChuZXR3b3JrKQorICAgICAgbmV0d29yayA9 IDA7CisjaWZkZWYgTkVUQ09OTgorICAgIGlmIChvbGRwbGV4ID4gLTEpIHsgICAgICAgICAgICAg ICAgIC8qIFJlc3RvcmUgcHJldmlvdXMgZHVwbGV4IHNldHRpbmcuICovCisgICAgICAgIGR1cGxl eCA9IG9sZHBsZXg7CisgICAgICAgIG9sZHBsZXggPSAtMTsKKyAgICB9CisjZW5kaWYgLyogTkVU Q09OTiAqLworI2lmbmRlZiBNQUMKKyAgICBja3N0cm5jcHkodHRuYW1lLGRmdHR5LFRUTkFNTEVO KTsgICAvKiBSZXN0b3JlIGRlZmF1bHQgY29tbXVuaWNhdGlvbiAqLworI2VuZGlmIC8qIE1BQyAq LworICAgIGxvY2FsID0gZGZsb2M7ICAgICAgICAgICAgICAgICAgICAgIC8qIGRldmljZSBhbmQg bG9jYWwvcmVtb3RlIHN0YXR1cyAqLworICAgIGlmIChsb2NhbCkgeworICAgICAgICBjeHR5cGUg PSBDWFRfRElSRUNUOyAgICAgICAgICAgIC8qIFNvbWV0aGluZyByZWFzb25hYmxlICovCisgICAg ICAgIHNwZWVkID0gdHRnc3BkKCk7ICAgICAgICAgICAgICAgLyogR2V0IHRoZSBjdXJyZW50IHNw ZWVkICovCisgICAgfSBlbHNlIHsKKyAgICAgICAgY3h0eXBlID0gQ1hUX1JFTU9URTsKKyAgICAg ICAgc3BlZWQgPSAtMUw7CisgICAgfQorI2lmbmRlZiBOT1hGRVIKKyAgICBpZiAoeHJlbGlhYmxl ID4gLTEgJiYgIXNldHJlbGlhYmxlKSB7CisgICAgICAgIHJlbGlhYmxlID0geHJlbGlhYmxlOwor ICAgICAgICBkZWJ1ZyhGMTAxLCJjbHNjb25ueCByZWxpYWJsZSBBIiwiIixyZWxpYWJsZSk7Cisg ICAgfSBlbHNlIGlmICghc2V0cmVsaWFibGUpIHsKKyAgICAgICAgcmVsaWFibGUgPSBTRVRfQVVU TzsKKyAgICAgICAgZGVidWcoRjEwMSwiY2xzY29ubnggcmVsaWFibGUgQiIsIiIscmVsaWFibGUp OworICAgIH0KKyNlbmRpZiAvKiBOT1hGRVIgKi8KKyAgICBzZXRmbG93KCk7ICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBSZXZlcnQgZmxvdyBjb250cm9sICovCisgICAgcmV0dXJuKHJjKTsK K30KKworaW50CitjbHNrY29ubngoeCkgaW50IHg7IHsgICAgICAgICAgICAgICAgICAgLyogQ2xv c2UgS2VybWl0IGNvbm5lY3Rpb24gb25seSAqLworICAgIGludCB0LCByYzsgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIChub3QgRlRQKSAqLworI2lmZGVmIE5FV0ZUUAorICAgIGV4dGVybiBp bnQgZnRwZ2V0OworICAgIHQgPSBmdHBnZXQ7CisgICAgZnRwZ2V0ID0gMDsKKyNlbmRpZiAvKiBO RVdGVFAgKi8KKyAgICByYyA9IGNsc2Nvbm54KHgpOworI2lmZGVmIE5FV0ZUUAorICAgIGZ0cGdl dCA9IHQ7CisjZW5kaWYgLyogTkVXRlRQICovCisgICAgcmV0dXJuKHJjKTsKK30KKworLyogTWF5 IDIwMDI6IHNldGxpbigpIGRlY29tcG9zaXRpb24gc3RhcnRzIGhlcmUgLi4uICovCisKKyNpZmRl ZiBPUzIKKyNkZWZpbmUgU1JWQlVGU0laIFBJUEVOQU1MCisjZWxzZSAvKiBPUzIgKi8KKyNkZWZp bmUgU1JWQlVGU0laIDYzCisjZW5kaWYgLyogT1MyICovCisjZGVmaW5lIEhPU1ROQU1MRU4gMTUq NjUKKworaW50IG5ldHNhdmUgPSAtMTsKK3N0YXRpYyBjaGFyICogdG1wc3RyaW5nID0gTlVMTDsK K3N0YXRpYyBjaGFyICogdG1wdXNyaWQgPSBOVUxMOworCisjaWZkZWYgU1NIQ01ECitjaGFyICog c3NoY21kID0gTlVMTDsKK2NoYXIgKiBkZWZzc2hjbWQgPSAic3NoIC1lIG5vbmUiOworI2Vsc2UK KyNpZmRlZiBTU0hCVUlMVElOCitjaGFyICogc3NocmNtZCA9IE5VTEw7CitjaGFyICogc3NodG1w Y21kID0gTlVMTDsKKyNlbmRpZiAvKiBTU0hCVUlMVElOICovCisjZW5kaWYgLyogU1NIQ01EICov CisKKy8qIGMgeCBfIGYgYSBpIGwgIC0tICBDb21tb24gZXJyb3IgZXhpdCByb3V0aW5lIGZvciBj eF9uZXQsIGN4X2xpbmUgKi8KKworaW50CitjeF9mYWlsKG1zZywgdGV4dCkgaW50IG1zZzsgY2hh ciAqIHRleHQ7IHsKKyAgICBtYWtlc3RyKCZzbG1zZyx0ZXh0KTsJCS8qIEZvciB0aGUgcmVjb3Jk IChvciBHVUkpICovCisgICAgaWYgKG1zZykJCQkJLyogTm90IEdVSSwgbm90IHF1aWV0LCBldGMg Ki8KKyAgICAgIHByaW50ZigiPyVzXG4iLHRleHQpOwkJLyogUHJpbnQgZXJyb3IgbWVzc2FnZSAq LworICAgIHNscmVzdG9yKCk7CQkJCS8qIFJlc3RvcmUgTElORS9IT1NUIHRvIGtub3duIHN0YXRl ICovCisgICAgcmV0dXJuKG1zZyA/IC05IDogKHN1Y2Nlc3MgPSAwKSk7CS8qIFJldHVybiBhcHBy b3ByaWF0ZSBjb2RlICovCit9CisKKyNpZmRlZiBORVRDT05OCisvKiBjIHggXyBuIGUgdCAgLS0g IE1ha2UgYSBuZXR3b3JrIGNvbm5lY3Rpb24gKi8KKworLyoKKyAgQ2FsbCB3aXRoOgorICAgIG5l dCAgICAgID0gbmV0d29yayB0eXBlCisgICAgcHJvdG9jb2wgPSBwcm90b2NvbCB0eXBlCisgICAg aG9zdCAgICAgPSBzdHJpbmcgcG9pbnRlciB0byBob3N0IG5hbWUuCisgICAgc3ZjICAgICAgPSBz dHJpbmcgcG9pbnRlciB0byBzZXJ2aWNlIG9yIHBvcnQgb24gaG9zdC4KKyAgICB1c2VybmFtZSA9 IHVzZXJuYW1lIGZvciBjb25uZWN0aW9uCisgICAgcGFzc3dvcmQgPSBwYXNzd29yZCBmb3IgY29u bmVjdGlvbgorICAgIGNvbW1hbmQgID0gY29tbWFuZCB0byBleGVjdXRlCisgICAgcGFyYW0xICAg PSBUZWxuZXQ6IEF1dGhlbnRpY2F0aW9uIHR5cGUKKyAgICAgICAgICAgICAgIFNTSDogICAgVmVy c2lvbgorICAgIHBhcmFtMiAgID0gVGVsbmV0OiBFbmNyeXB0aW9uIHR5cGUKKyAgICAgICAgICAg ICAgIFNTSDogICAgQ29tbWFuZCBhcyBTdWJzeXN0ZW0KKyAgICBwYXJhbTMgICA9IFRlbG5ldDog MSB0byB3YWl0IGZvciBuZWdvdGlhdGlvbnMsIDAgb3RoZXJ3aXNlCisgICAgICAgICAgICAgICBT U0g6ICAgIFgxMSBGb3J3YXJkaW5nCisgICAgY3ggICAgICAgPSAxIHRvIGF1dG9tYXRpY2FsbHkg ZW50ZXIgQ29ubmVjdCBtb2RlLCAwIG90aGVyd2lzZS4KKyAgICBzeCAgICAgICA9IDEgdG8gYXV0 b21hdGljYWxseSBlbnRlciBTZXJ2ZXIgbW9kZSwgMCBvdGhlcndpc2UuCisgICAgZmxhZyAgICAg PSBpZiBubyBob3N0IG5hbWUgZ2l2ZW4sIDEgPSBjbG9zZSBjdXJyZW50IGNvbm5lY3Rpb24sIDAg PSByZXN1bWUKKyAgICBndWkgICAgICA9IDEgaWYgY2FsbGVkIGZyb20gR1VJIGRpYWxvZywgMCBv dGhlcndpc2UuCisgIFJldHVybnM6CisgICAgMSBvbiBzdWNjZXNzCisgICAgMCBvbiBmYWlsdXJl IGFuZCBubyBtZXNzYWdlIHByaW50ZWQsIHNsbXNnIHNldCB0byBmYWlsdXJlIG1lc3NhZ2UuCisg ICAtOSBvbiBmYWlsdXJlIGFuZCBtZXNzYWdlIHByaW50ZWQsIGRpdHRvLgorKi8KK2ludAorI2lm ZGVmIENLX0FOU0lDCitjeF9uZXQoIGludCBuZXQsIGludCBwcm90b2NvbCwgY2hhciAqIHhob3N0 LCBjaGFyICogc3ZjLCAKKyAgICAgICAgY2hhciAqIHVzZXJuYW1lLCBjaGFyICogcGFzc3dvcmQs IGNoYXIgKiBjb21tYW5kLAorICAgICAgICBpbnQgcGFyYW0xLCBpbnQgcGFyYW0yLCBpbnQgcGFy YW0zLCBpbnQgY3gsIGludCBzeCwgaW50IGZsYWcsIGludCBndWkpCisjZWxzZSAvKiBDS19BTlNJ QyAqLworY3hfbmV0KG5ldCwgcHJvdG9jb2wsIHhob3N0LCBzdmMsCisgICAgICAgdXNlcm5hbWUs IHBhc3N3b3JkLCBjb21tYW5kLAorICAgICAgIHBhcmFtMSwgcGFyYW0yLCBwYXJhbTMsIGN4LCBz eCwgZmxhZywgZ3VpKQorICAgIGNoYXIgKiB4aG9zdCwgKiBzdmMsICogdXNlcm5hbWUsICpwYXNz d29yZCwgKmNvbW1hbmQ7IAorICAgIGludCBuZXQsIHByb3RvY29sLCBjeCwgc3gsIGZsYWcsIHBh cmFtMSwgcGFyYW0yLCBwYXJhbTMsIGd1aTsgCisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIGN4 X25ldCAqLyB7CisKKyAgICBpbnQgaSwgbiwgeCwgbXNnOworICAgIGludCBfbG9jYWwgPSAtMTsK KworICAgIGV4dGVybiBjaGFyIHB3YnVmW10sICogZ19wc3dkOworICAgIGV4dGVybiBpbnQgcHdm bGcsIHB3Y3J5cHQsIGdfcGZsZywgZ19wY3B0LCBub2xvY2FsOworCisgICAgY2hhciBzcnZidWZb U1JWQlVGU0laKzFdOwkJLyogU2VydmljZSAqLworICAgIGNoYXIgaG9zdGJ1ZltIT1NUTkFNTEVO XTsJCS8qIEhvc3QgYnVmZmVyIHRvIG1hbmlwdWxhdGUgKi8KKyAgICBjaGFyIGhvc3RuYW1lW0hP U1ROQU1MRU5dOwkJLyogQ29weSBvZiBob3N0IHBhcmFtZXRlciAqLworICAgIGNoYXIgKiBob3N0 ID0gaG9zdGJ1ZjsJCS8qIFBvaW50ZXIgdG8gY29weSBvZiBob3N0IHBhcmFtICovCisKKyAgICBp ZiAoIXhob3N0KSB4aG9zdCA9ICIiOwkJLyogV2F0Y2ggb3V0IGZvciBudWxsIHBvaW50ZXJzICov CisgICAgaWYgKCFzdmMpIHN2YyA9ICIiOworICAgIGNrc3RybmNweShob3N0LHhob3N0LEhPU1RO QU1MRU4pOwkvKiBBdm9pZCBidWZmZXIgY29uZnVzaW9uICovCisKKyAgICBkZWJ1ZyhGMTEwLCJj eF9uZXQgaG9zdCIsaG9zdCwwKTsKKyAgICBkZWJ1ZyhGMTExLCJjeF9uZXQgc2VydmljZSIsc3Zj LFNSVkJVRlNJWik7CisgICAgZGVidWcoRjEwMSwiY3hfbmV0IG5ldHdvcmsgdHlwZSIsIiIsbmV0 KTsKKworICAgIG1zZyA9IChndWkgPT0gMCkgJiYgbXNnZmxnOwkJLyogV2hldGhlciB0byBwcmlu dCBtZXNzYWdlcyAqLworCisjaWZuZGVmIE5PRElBTAorICAgIGRlYnVnKEYxMDEsImN4X25ldCBu bmV0ZGlyIiwiIixubmV0ZGlyKTsKKyAgICB4ID0gMDsJCQkJLyogTG9vayB1cCBpbiBuZXR3b3Jr IGRpcmVjdG9yeSAqLworICAgIGlmICgqaG9zdCA9PSAnPScpIHsJCQkvKiBJZiBudW1iZXIgc3Rh cnRzIHdpdGggPSBzaWduICovCisJaG9zdCsrOwkJCQkvKiBzdHJpcCBpdCAqLworCXdoaWxlICgq aG9zdCA9PSBTUCkgaG9zdCsrOwkvKiBhbmQgYW55IGxlYWRpbmcgc3BhY2VzICovCisJZGVidWco RjExMCwiY3hfbmV0IGhvc3QgMiIsaG9zdCwwKTsKKwluaGNvdW50ID0gMDsKKyAgICB9IGVsc2Ug aWYgKCpob3N0KSB7CQkJLyogV2Ugd2FudCB0byBsb29rIGl0IHVwLiAqLworCWlmIChubmV0ZGly ID4gMCkJCS8qIElmIHRoZXJlIGlzIGEgZGlyZWN0b3J5Li4uICovCisJICB4ID0gbHVuZXQoaG9z dCk7CQkvKiAoc2V0cyBuaGNvdW50KSAqLworCWVsc2UJCQkJLyogb3RoZXJ3aXNlICovCisJICBu aGNvdW50ID0gMDsJCQkvKiB3ZSBkaWRuJ3QgZmluZCBhbnkgdGhlcmUgKi8KKwlpZiAoeCA8IDAp CQkJLyogSW50ZXJuYWwgZXJyb3I/ICovCisJICByZXR1cm4oY3hfZmFpbChtc2csIk5ldHdvcmsg ZGlyZWN0b3J5IGxvb2t1cCBlcnJvciIpKTsKKwlkZWJ1ZyhGMTExLCJjeF9uZXQgbHVuZXQgbmhj b3VudCIsaG9zdCxuaGNvdW50KTsKKyAgICB9CisjZW5kaWYgLyogTk9ESUFMICovCisKKyAgICAv KiBOZXcgY29ubmVjdGlvbiB3YW50ZWQuICBNYWtlIGEgY29weSBvZiB0aGUgaG9zdCBuYW1lL2Fk ZHJlc3MuLi4gKi8KKworICAgIGlmIChjbHNrY29ubngoMSkgPCAwKQkJLyogQ2xvc2UgY3VycmVu dCBLZXJtaXQgY29ubmVjdGlvbiAqLworICAgICAgcmV0dXJuKGN4X2ZhaWwobXNnLCJFcnJvciBj bG9zaW5nIHByZXZpb3VzIGNvbm5lY3Rpb24iKSk7CisKKyAgICBpZiAoKmhvc3QpIHsJCQkvKiBU aGV5IGdhdmUgYSBob3N0bmFtZSAqLworCV9sb2NhbCA9IDE7CQkJLyogTmV0d29yayBjb25uZWN0 aW9uIGFsd2F5cyBsb2NhbCAqLworCWlmIChtZG1zYXYgPCAwKQorCSAgbWRtc2F2ID0gbWRtdHlw OwkJLyogUmVtZW1iZXIgb2xkIG1vZGVtIHR5cGUgKi8KKwltZG10eXAgPSAtbmV0OwkJCS8qIFNw ZWNpYWwgY29kZSBmb3IgbmV0d29yayAqLworICAgIH0gZWxzZSB7CQkJCS8qIFRoZXkganVzdCBz YWlkICJzZXQgaG9zdCIgKi8KKwlob3N0ID0gZGZ0dHk7CQkJLyogU28gZ28gYmFjayB0byBub3Jt YWwgKi8KKwlfbG9jYWwgPSBkZmxvYzsJCQkvKiBkZWZhdWx0IHR0eSwgbG9jYXRpb24sICovCisJ aWYgKGZsYWcpIHsJCQkvKiBDbG9zZSBjdXJyZW50IGNvbm5lY3Rpb24gKi8KKwkgICAgc2V0Zmxv dygpOwkJCS8qIE1heWJlIGNoYW5nZSBmbG93IGNvbnRyb2wgKi8KKwkgICAgaGF2ZWxpbmUgPSAx OwkJLyogKCogaXMgdGhpcyByaWdodD8gKikgKi8KKwkgICAgZG9sb2dlbmQoKTsKKyNpZm5kZWYg Tk9ESUFMCisJICAgIGRpYWxzdGEgPSBESUFfVU5LOworI2VuZGlmIC8qIE5PRElBTCAqLworI2lm ZGVmIExPQ1VTCisJICAgIGlmIChhdXRvbG9jdXMpIHsKKwkJc2V0bG9jdXMoMSwxKTsKKwkgICAg fQorI2VuZGlmIC8qIExPQ1VTICovCisgICAgICAgICAgICAvKiBYWFggLSBJcyB0aGlzIHJpZ2h0 PyAqLworCSAgICAvKiBTaG91bGQgd2UgYmUgcmV0dXJuaW5nIHdpdGhvdXQgZG9pbmcgYW55dGhp bmcgPyAqLworCSAgICAvKiBZZXMgaXQncyByaWdodCAtLSB3ZSBjbG9zZWQgdGhlIG9sZCBjb25u ZWN0aW9uIGp1c3QgYWJvdmUuICovCisJICAgIHJldHVybihzdWNjZXNzID0gMSk7ICAgICAgICAK Kwl9CisgICAgfQorICAgIHN1Y2Nlc3MgPSAwOworICAgIGlmIChob3N0ICE9IGxpbmUpICAgICAg ICAgICAgICAgICAgIC8qIGxpbmVbXSBpcyBhIGdsb2JhbCAqLworICAgICAgY2tzdHJuY3B5KGxp bmUsaG9zdCxMSU5CVUZTSVopOworICAgIGNrc3RybmNweShob3N0bmFtZSxob3N0LEhPU1ROQU1M RU4pOworICAgIGNrc3RybmNweShzcnZidWYsc3ZjLFNSVkJVRlNJWisxKTsKKworI2lmbmRlZiBO T0RJQUwKKyAgICBpZiAoKG5oY291bnQgPiAxKSAmJiBtc2cpIHsKKwlpbnQgazsKKwlwcmludGYo IiVkIGVudHIlcyBmb3VuZCBmb3IgXCIlc1wiJXNcbiIsCisJICAgICAgIG5oY291bnQsCisJICAg ICAgIChuaGNvdW50ID09IDEpID8gInkiIDogImllcyIsCisJICAgICAgIHMsCisJICAgICAgIChu aGNvdW50ID4gMCkgPyAiOiIgOiAiLiIKKwkgICAgICAgKTsKKwlmb3IgKGkgPSAwOyBpIDwgbmhj b3VudDsgaSsrKSB7CisJCXByaW50ZigiJTNkLiAlLTEycyA9PiAlLTlzICVzIiwKKwkJICAgICAg IGkrMSxuX25hbWUsbmhfcDJbaV0sbmhfcFtpXSk7CisJICAgIGZvciAoayA9IDA7IGsgPCA0OyBr KyspIHsgLyogQWxzbyBsaXN0IG5ldC1zcGVjaWZpYyBpdGVtcyAqLworCQlpZiAobmhfcHhba11b aV0pICAgICAgLyogZnJlZSBmb3JtYXQuLi4gKi8KKwkJICBwcmludGYoIiAlcyIsbmhfcHhba11b aV0pOworCQllbHNlCisJCSAgYnJlYWs7CisJICAgIH0KKwkgICAgcHJpbnRmKCJcbiIpOworCX0K KyAgICB9CisgICAgaWYgKG5oY291bnQgPT0gMCkKKyAgICAgIG4gPSAxOworICAgIGVsc2UKKyAg ICAgIG4gPSBuaGNvdW50OworI2Vsc2UKKyAgICBuID0gMTsKKyAgICBuaGNvdW50ID0gMDsKKyNl bmRpZiAvKiBOT0RJQUwgKi8KKworICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsJCS8qIExv b3AgZm9yIGVhY2ggZW50cnkgZm91bmQgKi8KKwlkZWJ1ZyhGMTAxLCJjeF9uZXQgbG9vcCBpIiwi IixpKTsKKyNpZm5kZWYgTk9ESUFMCisJaWYgKG5oY291bnQgPiAwKSB7CQkvKiBJZiB3ZSBmb3Vu ZCBhdCBsZWFzdCBvbmUgZW50cnkuLi4gKi8KKwkgICAgY2tzdHJuY3B5KGxpbmUsbmhfcFtpXSxM SU5CVUZTSVopOyAvKiBDb3B5IGN1cnJlbnQgZW50cnkgKi8KKwkgICAgaWYgKGxvb2t1cChuZXRj bWQsbmhfcDJbaV0sbm5ldHMsJngpID4gLTEpIHsgLyogTmV0IHR5cGUgKi8KKwkJaW50IHh4Owor CQl4eCA9IG5ldGNtZFt4XS5rd3ZhbDsKKwkJLyogVXNlciBzcGVjaWZpZWQgU1NIIHNvIGRvbid0 IGxldCBuZXQgZGlyZWN0b3J5IG92ZXJyaWRlICovCisJCWlmIChuZXQgIT0gTkVUX1NTSCB8fCB4 eCAhPSBORVRfVENQQikgeworCQkgICAgbmV0ID0geHg7CisJCSAgICBtZG10eXAgID0gMCAtIG5l dDsKKwkJfQorCSAgICB9IGVsc2UgeworCQltYWtlc3RyKCZzbG1zZywiTmV0d29yayB0eXBlIG5v dCBzdXBwb3J0ZWQiKTsKKwkJaWYgKG1zZykKKwkJICBwcmludGYoIkVycm9yIC0gbmV0d29yayB0 eXBlIFwiJXNcIiBub3Qgc3VwcG9ydGVkXG4iLAorCQkJIG5oX3AyW2ldCisJCSAgICAgICAgICk7 CisJCWNvbnRpbnVlOworCSAgICB9CisJICAgIHN3aXRjaCAobmV0KSB7CQkvKiBOZXQtc3BlY2lm aWMgZGlyZWN0b3J5IHRoaW5ncyAqLworI2lmZGVmIFNTSEJVSUxUSU4KKwkgICAgICBjYXNlIE5F VF9TU0g6CQkvKiBTU0ggKi8KKyAgICAgICAgICAgICAgICAvKiBBbnkgU1NIIHNwZWNpZmljIG5l dHdvcmsgZGlyZWN0b3J5IHN0dWZmPyAqLworICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAg ICAgICAgICAgIC8qIE5FVF9TU0ggKi8KKyNlbmRpZiAvKiBTU0hCVUlMVElOICovCisKKwkgICAg ICBjYXNlIE5FVF9UQ1BCOiB7CQkvKiBUQ1AvSVAgVEVMTkVULFJMT0dJTiwuLi4gKi8KKyNpZmRl ZiBUQ1BTT0NLRVQKKwkJICBjaGFyICpxOworCQkgIGludCBmbGFnID0gMDsKKworCQkgIC8qIEV4 dHJhY3QgIjpzZXJ2aWNlIiwgaWYgYW55LCBmcm9tIGhvc3Qgc3RyaW5nICovCisJCSAgZGVidWco RjExMCwiY3hfbmV0IHNlcnZpY2UgMSIsbGluZSwwKTsKKwkJICBmb3IgKHEgPSBsaW5lOyAoKnEg IT0gJ1wwJykgJiYgKCpxICE9ICc6Jyk7IHErKykKKwkJICAgIDsKKwkJICBpZiAoKnEgPT0gJzon KSB7ICpxKysgPSBOVUw7IGZsYWcgPSAxOyB9CisJCSAgZGVidWcoRjExMSwiY3hfbmV0IHNlcnZp Y2UgMiIsbGluZSxmbGFnKTsKKworCQkgIC8qIEdldCBzZXJ2aWNlLCBpZiBhbnksIGZyb20gZGly ZWN0b3J5IGVudHJ5ICovCisKKwkJICBpZiAoISpzcnZidWYpIHsKKwkJICAgICAgaWYgKG5oX3B4 WzBdW2ldKSB7CisJCQkgIGNrc3RybmNweShzcnZidWYsbmhfcHhbMF1baV0sU1JWQlVGU0laKTsK KwkJCSAgZGVidWcoRjExMCwiY3hfbmV0IHNlcnZpY2UgMyIsc3J2YnVmLDApOworCQkgICAgICB9 CisJCSAgICAgIGlmIChmbGFnKSB7CisJCQkgIGNrc3RybmNweShzcnZidWYscSxTUlZCVUZTSVop OworCQkJICBkZWJ1ZyhGMTEwLCJjeF9uZXQgc2VydmljZSA0IixzcnZidWYsMCk7CisJCSAgICAg IH0KKwkJICB9CisJCSAgY2tzdHJuY3B5KGhvc3RuYW1lLGxpbmUsSE9TVE5BTUxFTik7CisKKwkJ ICAvKiBJZiB3ZSBoYXZlIGEgc2VydmljZSwgYXBwZW5kIHRvIGhvc3QgbmFtZS9hZGRyZXNzICov CisJCSAgaWYgKCpzcnZidWYpIHsKKwkJICAgICAgY2tzdHJuY2F0KGxpbmUsICI6IiwgTElOQlVG U0laKTsKKwkJICAgICAgY2tzdHJuY2F0KGxpbmUsIHNydmJ1ZiwgTElOQlVGU0laKTsKKwkJICAg ICAgZGVidWcoRjExMCwiY3hfbmV0IHNlcnZpY2UgNSIsbGluZSwwKTsKKwkJICB9CisjaWZkZWYg UkxPR0NPREUKKwkJICAvKiBJZiBubyBzZXJ2aWNlIGdpdmVuIGJ1dCBjb21tYW5kIHdhcyBSTE9H SU4gKi8KKwkJICBlbHNlIGlmICh0dG5wcm90byA9PSBOUF9STE9HSU4pIHsgLyogYWRkIHRoaXMu Li4gKi8KKwkJICAgICAgY2tzdHJuY2F0KGxpbmUsICI6bG9naW4iLExJTkJVRlNJWik7CisJCSAg ICAgIGRlYnVnKEYxMTAsImN4X25ldCBzZXJ2aWNlIDYiLGxpbmUsMCk7CisJCSAgfQorI2lmZGVm IENLX0FVVEhFTlRJQ0FUSU9OCisjaWZkZWYgQ0tfS0VSQkVST1MKKwkJICBlbHNlIGlmICh0dG5w cm90byA9PSBOUF9LNExPR0lOIHx8CisJCQkgICB0dG5wcm90byA9PSBOUF9LNUxPR0lOKSB7IC8q IGFkZCB0aGlzLi4uICovCisJCSAgICAgIGNrc3RybmNhdChsaW5lLCAiOmtsb2dpbiIsTElOQlVG U0laKTsKKwkJICAgICAgZGVidWcoRjExMCwiY3hfbmV0IHNlcnZpY2UgNyIsbGluZSwwKTsKKwkJ ICB9CisJCSAgZWxzZSBpZiAodHRucHJvdG8gPT0gTlBfRUs0TE9HSU4gfHwKKwkJCSAgIHR0bnBy b3RvID09IE5QX0VLNUxPR0lOKSB7IC8qIGFkZCB0aGlzLi4uICovCisJCSAgICAgIGNrc3RybmNh dChsaW5lLCAiOmVrbG9naW4iLExJTkJVRlNJWik7CisJCSAgICAgIGRlYnVnKEYxMTAsImN4X25l dCBzZXJ2aWNlIDgiLGxpbmUsMCk7CisJCSAgfQorI2VuZGlmIC8qIENLX0tFUkJFUk9TICovCisj ZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJT04gKi8KKyNlbmRpZiAvKiBSTE9HQ09ERSAqLworCQkg IGVsc2UgewkJLyogT3RoZXJ3aXNlLCBhZGQgIjp0ZWxuZXQiLiAqLworCQkgICAgICBja3N0cm5j YXQobGluZSwgIjp0ZWxuZXQiLCBMSU5CVUZTSVopOworCQkgICAgICBkZWJ1ZyhGMTEwLCJjeF9u ZXQgc2VydmljZSA5IixsaW5lLDApOworCQkgIH0KKwkJICBpZiAodXNlcm5hbWUpIHsJLyogVGhp cyBpcyBhIHBhcmFtZXRlci4uLiAqLworCQkgICAgICBja3N0cm5jcHkodWlkYnVmLHVzZXJuYW1l LFVJREJVRkxFTik7CisJCSAgICAgIHVpZGZsYWcgPSAxOworCQkgIH0KKwkJICAvKiBGaWZ0aCBm aWVsZCwgaWYgYW55LCBpcyB1c2VyIElEIChmb3IgcmxvZ2luKSAqLworCisJCSAgaWYgKG5oX3B4 WzFdW2ldICYmICF1aWRmbGFnKQorCQkgICAgY2tzdHJuY3B5KHVpZGJ1Zix1c2VybmFtZSxVSURC VUZMRU4pOworI2lmZGVmIFJMT0dDT0RFCisJCSAgaWYgKElTX1JMT0dJTigpICYmICF1aWRidWZb MF0pCisJCSAgICByZXR1cm4oY3hfZmFpbChtc2csIlVzZXJuYW1lIHJlcXVpcmVkIikpOworI2Vu ZGlmIC8qIFJMT0dDT0RFICovCisjZW5kaWYgLyogVENQU09DS0VUICovCisJCSAgYnJlYWs7CisJ ICAgICAgfQorCSAgICAgIGNhc2UgTkVUX1BJUEU6CQkvKiBQaXBlICovCisjaWZkZWYgTlBJUEUK KwkJaWYgKCFwaXBlbmFtZVswXSkgeyAvKiBVc2VyIGRpZG4ndCBnaXZlIGEgcGlwZW5hbWUgKi8K KwkJICAgIGlmIChuaF9weFswXVtpXSkgeyAvKiBCdXQgZGlyZWN0b3J5IGVudHJ5IGhhcyBvbmUg Ki8KKwkJCWlmIChzdHJjbXAocGlwZW5hbWUsIlxccGlwZVxcIikpIHsKKwkJCSAgICBja3N0cm5j cHkocGlwZW5hbWUsIlxccGlwZVxcIixMSU5CVUZTSVopOworCQkJICAgIGNrc3RybmNhdChzcnZi dWYsbmhfcHhbMF1baV0sUElQRU5BTUwtNik7CisJCQl9IGVsc2UgeworCQkJICAgIGNrc3RybmNw eShwaXBlbmFtZSxuaF9weFswXVtpXSxQSVBFTkFNTCk7CisJCQl9CisJCQlkZWJ1ZyhGMTEwLCJj eF9uZXQgcGlwZW5lbWUiLHBpcGVuYW1lLDApOworCQkgICAgfQorCQl9CisjZW5kaWYgLyogTlBJ UEUgKi8KKwkJYnJlYWs7CisKKwkgICAgICBjYXNlIE5FVF9TTEFUOiAgICAgICAgICAgIC8qIExB VCAvIENURVJNICovCisjaWZkZWYgU1VQRVJMQVQKKwkJaWYgKCFzbGF0X3B3ZFswXSkgeyAvKiBV c2VyIGRpZG4ndCBnaXZlIGEgcGFzc3dvcmQgKi8KKwkJICAgIGlmIChuaF9weFswXVtpXSkgeyAv KiBCdXQgZGlyZWN0b3J5IGVudHJ5IGhhcyBvbmUgKi8KKwkJCWNrc3RybmNweShzbGF0X3B3ZCxu aF9weFswXVtpXSwxOCk7CisJCQlkZWJ1ZyhGMTEwLCJjeF9uZXQgU3VwZXJMQVQgcGFzc3dvcmQi LHNsYXRfcHdkLDApOworCQkgICAgfQorCQl9CisjZW5kaWYgLyogU1VQRVJMQVQgKi8KKwkJYnJl YWs7CisKKwkgICAgICBjYXNlIE5FVF9TWDI1OiAgICAgICAgLyogWC4yNSBrZXl3b3JkIHBhcmFt ZXRlcnMgKi8KKwkgICAgICBjYXNlIE5FVF9JWDI1OgorCSAgICAgIGNhc2UgTkVUX1ZYMjU6IHsK KyNpZmRlZiBBTllYMjUKKwkJICBpbnQgazsgICAgICAgICAgICAvKiBDeWNsZSB0aHJvdWdoIHRo ZSBmb3VyIGZpZWxkcyAqLworCQkgIGZvciAoayA9IDA7IGsgPCA0OyBrKyspIHsKKwkJICAgICAg aWYgKCFuaF9weFtrXVtpXSkgLyogQmFpbCBvdXQgaWYgbm9uZSBsZWZ0ICovCisJCQlicmVhazsK KwkJICAgICAgaWYgKCFja3N0cmNtcChuaF9weFtrXVtpXSwiY3VnPSIsNCwwKSkgeworCQkJICBj bG9zZ3IgPSBhdG9pKG5oX3B4W2tdW2ldKzQpOworCQkJICBkZWJ1ZyhGMTAxLCJYMjUgQ1VHIiwi IixjbG9zZ3IpOworCQkgICAgICB9IGVsc2UgaWYgKCFja3N0cmNtcChuaF9weFtrXVtpXSwiY3Vk PSIsNCwwKSkgeworCQkJICBjdWRhdGEgPSAxOworCQkJICBja3N0cm5jcHkodWRhdGEsbmhfcHhb a11baV0rNCxNQVhDVURBVEEpOworCQkJICBkZWJ1ZyhGMTEwLCJYMjUgQ1VEIixjdWRhdGEsMCk7 CisJCSAgICAgIH0gZWxzZSBpZiAoIWNrc3RyY21wKG5oX3B4W2tdW2ldLCJyZXY9Iiw0LDApKSB7 CisJCQkgIHJldmNhbGwgPSAhY2tzdHJjbXAobmhfcHhba11baV0rNCwiPW9uIiwzLDApOworCQkJ ICBkZWJ1ZyhGMTAxLCJYMjUgUkVWIiwiIixyZXZjYWxsKTsKKyNpZm5kZWYgSUJNWDI1CisJCSAg ICAgIH0gZWxzZSBpZiAoIWNrc3RyY21wKG5oX3B4W2tdW2ldLCJwYWQ9Iiw0LDApKSB7CisJCQkg IGludCB4M3BhciwgeDN2YWw7CisJCQkgIGNoYXIgKnMxLCAqczI7CisJCQkgIHMxID0gczIgPSBu aF9weFtrXVtpXSs0OyAvKiBQQUQgcGFyYW1ldGVycyAqLworCQkJICB3aGlsZSAoKnMyKSB7ICAg ICAgICAgICAgLyogUGljayB0aGVtIGFwYXJ0ICovCisJCQkgICAgICBpZiAoKnMyID09ICc6Jykg eworCQkJCSAgKnMyID0gTlVMOworCQkJCSAgeDNwYXIgPSBhdG9pKHMxKTsKKwkJCQkgIHMxID0g KytzMjsKKwkJCQkgIGNvbnRpbnVlOworCQkJICAgICAgfSBlbHNlIGlmICgqczIgPT0gJywnKSB7 CisJCQkJICAqczIgPSBOVUw7CisJCQkJICB4M3ZhbCA9IGF0b2koczEpOworCQkJCSAgczEgPSAr K3MyOworCQkJCSAgZGVidWcoRjExMSwiWDI1IFBBRCIseDNwYXIseDN2YWwpOworCQkJCSAgaWYg KHgzcGFyID4gLTEgJiYKKwkJCQkgICAgICB4M3BhciA8PSBNQVhQQURQQVJNUykKKwkJCQkgICAg cGFkcGFybXNbeDNwYXJdID0geDN2YWw7CisJCQkJICBjb250aW51ZTsKKwkJCSAgICAgIH0gZWxz ZQorCQkJCXMyKys7CisJCQkgIH0KKyNlbmRpZiAvKiBJQk1YMjUgKi8KKwkJICAgICAgfQorCQkg IH0KKyNlbmRpZiAvKiBBTllYMjUgKi8KKwkJICBicmVhazsKKwkgICAgICB9CisJICAgICAgZGVm YXVsdDoJCQkvKiBOb3RoaW5nIHNwZWNpYWwgZm9yIG90aGVyIG5ldHMgKi8KKwkJYnJlYWs7CisJ ICAgIH0KKwl9IGVsc2UKKyNlbmRpZiAvKiBOT0RJQUwgKi8KKwl7CQkJCS8qIE5vIGRpcmVjdG9y eSBlbnRyaWVzIGZvdW5kLiAqLworCSAgICBja3N0cm5jcHkobGluZSxob3N0bmFtZSxMSU5CVUZT SVopOyAvKiBQdXQgdGhpcyBiYWNrLi4uICovCisJICAgIC8qIElmIHRoZSB1c2VyIGdhdmUgYSBU Q1Agc2VydmljZSAqLworCSAgICBpZiAobmV0ID09IE5FVF9UQ1BCIHx8IG5ldCA9PSBORVRfU1NI KQorCSAgICAgIGlmICgqc3J2YnVmKSB7CQkvKiBBcHBlbmQgaXQgdG8gaG9zdCBuYW1lL2FkZHJl c3MgKi8KKwkJICBja3N0cm5jYXQobGluZSwgIjoiLCBMSU5CVUZTSVopOworCQkgIGNrc3RybmNh dChsaW5lLCBzcnZidWYsTElOQlVGU0laKTsKKwkgICAgICB9CisJfQorCS8qCisJICAgR2V0IGhl cmUgd2l0aCBob3N0IG5hbWUvYWRkcmVzcyBhbmQgYWxsIG5ldC1zcGVjaWZpYworCSAgIHBhcmFt ZXRlcnMgc2V0LCByZWFkeSB0byBvcGVuIHRoZSBjb25uZWN0aW9uLgorCSovCisJbWRtdHlwID0g LW5ldDsJCQkvKiBUaGlzIHNob3VsZCBoYXZlIGJlZW4gZG9uZSAqLworCQkJCQkvKiBhbHJlYWR5 IGJ1dCBqdXN0IGluIGNhc2UgLi4uICovCisKKwlkZWJ1ZyhGMTEwLCJjeF9uZXQgbmV0IGxpbmVb XSBiZWZvcmUgdHRvcGVuIixsaW5lLDApOworCWRlYnVnKEYxMDEsImN4X25ldCBuZXQgbWRtdHlw IGJlZm9yZSB0dG9wZW4iLCIiLG1kbXR5cCk7CisJZGVidWcoRjEwMSwiY3hfbmV0IG5ldCB0dG5w cm90byIsIiIsdHRucHJvdG8pOworCisjaWZkZWYgU1NIQlVJTFRJTgorICAgICAgICBpZiAobmV0 ID09IE5FVF9TU0gpIHsKKyAgICAgICAgICAgIG1ha2VzdHIoJnNzaF9oc3QsaG9zdG5hbWUpOyAg ICAgICAgLyogU3Rhc2ggZXZlcnl0aGluZyAqLworICAgICAgICAgICAgaWYgKHVzZXJuYW1lKSB7 CisgICAgICAgICAgICAgICAgaWYgKCFzbF91aWRfc2F2ZWQpIHsKKyAgICAgICAgICAgICAgICAg ICAgY2tzdHJuY3B5KHNsX3VpZGJ1Zix1aWRidWYsVUlEQlVGTEVOKTsKKyAgICAgICAgICAgICAg ICAgICAgc2xfdWlkX3NhdmVkID0gMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg ICAgY2tzdHJuY3B5KHVpZGJ1Zix1c2VybmFtZSxVSURCVUZMRU4pOworICAgICAgICAgICAgfQor ICAgICAgICAgICAgaWYgKHNydmJ1ZlswXSkgeworICAgICAgICAgICAgICAgIG1ha2VzdHIoJnNz aF9wcnQsc3J2YnVmKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIG1ha2Vz dHIoJnNzaF9wcnQsTlVMTCk7CisKKyAgICAgICAgICAgIGlmIChjb21tYW5kKSB7CisgICAgICAg ICAgICAgICAgbWFrZXN0cigmc3NoX2NtZCxicnN0cmlwKGNvbW1hbmQpKTsKKyAgICAgICAgICAg ICAgICBzc2hfY2FzID0gcGFyYW0yOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAg ICAgbWFrZXN0cigmc3NoX2NtZCxOVUxMKTsKKworICAgICAgICAgICAgaWYgKHBhcmFtMSA+IC0x KSB7CisjaWZuZGVmIFNTSFRFU1QKKyAgICAgICAgICAgICAgICBpZiAoIXNsX3NzaF92ZXJfc2F2 ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgc2xfc3NoX3ZlciA9IHNzaF92ZXI7CisgICAgICAg ICAgICAgICAgICAgIHNsX3NzaF92ZXJfc2F2ZWQgPSAxOworICAgICAgICAgICAgICAgIH0KKyNl bmRpZiAvKiBTU0hURVNUICovCisgICAgICAgICAgICAgICAgc3NoX3ZlciA9IHBhcmFtMTsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChwYXJhbTMgPiAtMSkgeworI2lmbmRlZiBTU0hU RVNUCisgICAgICAgICAgICAgICAgaWYgKCFzbF9zc2hfeGZ3X3NhdmVkKSB7CisgICAgICAgICAg ICAgICAgICAgIHNsX3NzaF94ZncgPSBzc2hfeGZ3OworICAgICAgICAgICAgICAgICAgICBzbF9z c2hfeGZ3X3NhdmVkID0gMTsKKyAgICAgICAgICAgICAgICB9CisjZW5kaWYgLyogU1NIVEVTVCAq LworICAgICAgICAgICAgICAgIHNzaF94ZncgPSBwYXJhbTM7CisgICAgICAgICAgICB9CisgICAg ICAgIH0gZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTkVUX1NTSCAqLworI2VuZGlm IC8qIFNTSEJVSUxUSU4gKi8KKyNpZmRlZiBUQ1BTT0NLRVQKKwkgIGlmIChuZXQgPT0gTkVUX1RD UEIpIHsKKyAgICAgICAgICAgIHN3aXRjaCAocHJvdG9jb2wpIHsKKyNpZmRlZiBDS19TU0wKKyNp ZmRlZiBDT01NRU5UCisvKgorICBKZWZmJ3MgdmVyc2lvbiBmcm9tIDMwIERlYyAyMDA2IC0gZG9l c24ndCB3b3JrIC0gU1NML1RMU19SQVcgc3RpbGwKKyAgc3RhcnQgVGVsbmV0IG5lZ290aW9ucyBp ZiBhIDB4ZmYgYnl0ZSBjb21lcyBpbi4KKyovCisJICAgICAgY2FzZSBOUF9TU0xfUkFXOgorICAg ICAgICAgICAgICAgIHR0bnByb3RvID0gTlBfU1NMX1JBVzsKKwkJZGVidWcoRjEwMSwiTlBfU1NM X1JBVyB0dG5wcm90byIsIiIsdHRucHJvdG8pOworICAgICAgICAgICAgICAgIHNzbF9vbmx5X2Zs YWcgPSAxOworICAgICAgICAgICAgICAgIHRsc19vbmx5X2ZsYWcgPSAwOworICAgICAgICAgICAg ICAgIGJyZWFrOworCisJICAgICAgY2FzZSBOUF9UTFNfUkFXOgorCQkgIHR0bnByb3RvID0gTlBf VExTX1JBVzsKKwkJICBkZWJ1ZyhGMTAxLCJOUF9UTFNfUkFXIHR0bnByb3RvIiwiIix0dG5wcm90 byk7CisJCSAgc3NsX29ubHlfZmxhZyA9IDA7CisJCSAgdGxzX29ubHlfZmxhZyA9IDE7CisJCSAg YnJlYWs7CisKKwkgICAgICBjYXNlIE5QX1NTTDoKKyAgICAgICAgICAgICAgICB0dG5wcm90byA9 IE5QX1NTTDsKKwkJZGVidWcoRjEwMSwiTlBfU1NMIHR0bnByb3RvIiwiIix0dG5wcm90byk7Cisg ICAgICAgICAgICAgICAgc3NsX29ubHlfZmxhZyA9IDE7CisgICAgICAgICAgICAgICAgdGxzX29u bHlfZmxhZyA9IDA7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkgICAgICBjYXNlIE5QX1RM UzoKKyAgICAgICAgICAgICAgICB0dG5wcm90byA9IE5QX1RMUzsKKwkJZGVidWcoRjEwMSwiTlBf VExTIHR0bnByb3RvIiwiIix0dG5wcm90byk7CisgICAgICAgICAgICAgICAgc3NsX29ubHlfZmxh ZyA9IDA7CisgICAgICAgICAgICAgICAgdGxzX29ubHlfZmxhZyA9IDE7CisgICAgICAgICAgICAg ICAgYnJlYWs7CisKKwkgICAgICBjYXNlIE5QX1NTTF9URUxORVQ6CisgICAgICAgICAgICAgICAg dHRucHJvdG8gPSBOUF9URUxORVQ7CisJCWRlYnVnKEYxMDEsIk5QX1NTTF9URUxORVQgdHRucHJv dG8iLCIiLHR0bnByb3RvKTsKKyAgICAgICAgICAgICAgICBzc2xfb25seV9mbGFnID0gMTsKKyAg ICAgICAgICAgICAgICB0bHNfb25seV9mbGFnID0gMDsKKyAgICAgICAgICAgICAgICBicmVhazsK KworCSAgICAgIGNhc2UgTlBfVExTX1RFTE5FVDoKKyAgICAgICAgICAgICAgICB0dG5wcm90byA9 IE5QX1RFTE5FVDsKKwkJZGVidWcoRjEwMSwiTlBfVExTX1RFTE5FVCB0dG5wcm90byIsIiIsdHRu cHJvdG8pOworICAgICAgICAgICAgICAgIHNzbF9vbmx5X2ZsYWcgPSAwOworICAgICAgICAgICAg ICAgIHRsc19vbmx5X2ZsYWcgPSAxOworICAgICAgICAgICAgICAgIGJyZWFrOworI2Vsc2UKKy8q IGZkYyB2ZXJzaW9uIG9mIDQgRGVjIDIwMDYgd29ya3MgT0sgKi8KKwkgICAgICBjYXNlIE5QX1NT TF9SQVc6CisJICAgICAgY2FzZSBOUF9TU0w6CisJCXNzbF9yYXdfZmxhZyA9IChwcm90b2NvbCA9 PSBOUF9TU0xfUkFXKSA/IDEgOiAwOworICAgICAgICAgICAgICAgIHR0bnByb3RvID0gcHJvdG9j b2w7CisJCWRlYnVnKEYxMDEscHJvdG9jb2w9PU5QX1NTTCA/CisJCSAgICAgICJOUF9TU0wgdHRu cHJvdG8iIDoKKwkJICAgICAgIk5QX1NTTF9SQVcgdHRucHJvdG8iLAorCQkgICAgICAiIix0dG5w cm90byk7CisgICAgICAgICAgICAgICAgc3NsX29ubHlfZmxhZyA9IDE7CisgICAgICAgICAgICAg ICAgdGxzX29ubHlfZmxhZyA9IDA7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkgICAgICBj YXNlIE5QX1RMUzoKKwkgICAgICBjYXNlIE5QX1RMU19SQVc6CisJCXRsc19yYXdfZmxhZyA9IChw cm90b2NvbCA9PSBOUF9TU0xfUkFXKSA/IDEgOiAwOworICAgICAgICAgICAgICAgIHR0bnByb3Rv ID0gcHJvdG9jb2w7CisJCWRlYnVnKEYxMDEscHJvdG9jb2w9PU5QX1RMUyA/CisJCSAgICAgICJO UF9UTFMgdHRucHJvdG8iIDoKKwkJICAgICAgIk5QX1RMU19SQVcgdHRucHJvdG8iLAorCQkgICAg ICAiIix0dG5wcm90byk7CisgICAgICAgICAgICAgICAgc3NsX29ubHlfZmxhZyA9IDA7CisgICAg ICAgICAgICAgICAgdGxzX29ubHlfZmxhZyA9IDE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisK KwkgICAgICBjYXNlIE5QX1NTTF9URUxORVQ6CisJCXNzbF9yYXdfZmxhZyA9IDA7CisgICAgICAg ICAgICAgICAgdHRucHJvdG8gPSBOUF9URUxORVQ7CisJCWRlYnVnKEYxMDEsIk5QX1NTTF9URUxO RVQgdHRucHJvdG8iLCIiLHR0bnByb3RvKTsKKyAgICAgICAgICAgICAgICBzc2xfb25seV9mbGFn ID0gMTsKKyAgICAgICAgICAgICAgICB0bHNfb25seV9mbGFnID0gMDsKKyAgICAgICAgICAgICAg ICBicmVhazsKKworCSAgICAgIGNhc2UgTlBfVExTX1RFTE5FVDoKKwkJdGxzX3Jhd19mbGFnID0g MDsKKyAgICAgICAgICAgICAgICB0dG5wcm90byA9IE5QX1RFTE5FVDsKKwkJZGVidWcoRjEwMSwi TlBfVExTX1RFTE5FVCB0dG5wcm90byIsIiIsdHRucHJvdG8pOworICAgICAgICAgICAgICAgIHNz bF9vbmx5X2ZsYWcgPSAwOworICAgICAgICAgICAgICAgIHRsc19vbmx5X2ZsYWcgPSAxOworICAg ICAgICAgICAgICAgIGJyZWFrOworI2VuZGlmCS8qIENPTU1FTlQgKi8KKyNlbmRpZiAvKiBDS19T U0wgKi8KKworCSAgICAgIGNhc2UgTlBfTk9ORToKKwkgICAgICBjYXNlIE5QX1RDUFJBVzoKKwkg ICAgICBjYXNlIE5QX1JMT0dJTjoKKwkgICAgICBjYXNlIE5QX0s0TE9HSU46CisJICAgICAgY2Fz ZSBOUF9LNUxPR0lOOgorCSAgICAgIGNhc2UgTlBfRUs0TE9HSU46CisJICAgICAgY2FzZSBOUF9F SzVMT0dJTjoKKwkgICAgICBjYXNlIE5QX1RFTE5FVDoKKwkgICAgICBjYXNlIE5QX0tFUk1JVDoK KwkgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHR0bnByb3RvID0gcHJvdG9jb2w7Cisj aWZkZWYgQ0tfU1NMCisjaWZkZWYgQ09NTUVOVAorCQkvKiBKZWZmIHZlcnNpb24gZnJvbSAzMCBE ZWMgMjAwNiAqLworICAgICAgICAgICAgICAgIHNzbF9vbmx5X2ZsYWcgPSAwOworICAgICAgICAg ICAgICAgIHRsc19vbmx5X2ZsYWcgPSAwOworI2Vsc2UKKwkJLyogZmRjIHZlcnNpb24gZnJvbSA0 IERlYyAyMDA2ICovCisJCXNzbF9yYXdfZmxhZyA9IDA7CisJCXRsc19yYXdfZmxhZyA9IDA7Cisg ICAgICAgICAgICAgICAgc3NsX29ubHlfZmxhZyA9IDA7CisgICAgICAgICAgICAgICAgdGxzX29u bHlfZmxhZyA9IDA7CisjZW5kaWYJLyogQ09NTUVOVCAqLworI2VuZGlmIC8qIENLX1NTTCAqLwor ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorI2lmZGVmIENLX0FVVEhFTlRJ Q0FUSU9OCisgICAgICAgICAgICBpZiAoKHR0bnByb3RvID09IE5QX1RFTE5FVCB8fCB0dG5wcm90 byA9PSBOUF9LRVJNSVQpICYmCisJCXBhcmFtMSA+IC0xKSB7CisJICAgIGlmICghc2xfYXV0aF9z YXZlZCkgeworCQlpbnQgeDsKKwkJZm9yICh4ID0gMDsgeCA8IEFVVEhUWVBMU1RTWjsgeCsrKQor CQkgIHNsX2F1dGhfdHlwZV91c2VyW3hdID0gYXV0aF90eXBlX3VzZXJbeF07CisJCXNsX2F1dGhf c2F2ZWQgPSAxOworCSAgICB9CisJICAgIGlmICghc2xfdG9wdF9hX3Nfc2F2ZWQpIHsKKwkJc2xf dG9wdF9hX3N1ID0gVEVMT1BUX0RFRl9TX1VfTU9ERShURUxPUFRfQVVUSEVOVElDQVRJT04pOwor CQlzbF90b3B0X2Ffc19zYXZlZCA9IDE7CisJICAgIH0KKwkgICAgaWYgKCFzbF90b3B0X2FfY19z YXZlZCkgeworCQlzbF90b3B0X2FfY20gPSBURUxPUFRfREVGX0NfTUVfTU9ERShURUxPUFRfQVVU SEVOVElDQVRJT04pOworCQlzbF90b3B0X2FfY19zYXZlZCA9IDE7CisJICAgIH0KKwkgICAgc3dp dGNoIChwYXJhbTEpIHsKKwkgICAgICBjYXNlIEFVVEhUWVBFX0FVVE86CisJCWF1dGhfdHlwZV91 c2VyWzBdID0gQVVUSFRZUEVfQVVUTzsKKwkJVEVMT1BUX0RFRl9TX1VfTU9ERShURUxPUFRfQVVU SEVOVElDQVRJT04pID0gVE5fTkdfUlE7CisJCVRFTE9QVF9ERUZfQ19NRV9NT0RFKFRFTE9QVF9B VVRIRU5USUNBVElPTikgPSBUTl9OR19SUTsKKwkJYnJlYWs7CisJICAgICAgY2FzZSBBVVRIVFlQ RV9OVUxMOgorCQlhdXRoX3R5cGVfdXNlclswXSA9IEFVVEhUWVBFX05VTEw7CisJCVRFTE9QVF9E RUZfU19VX01PREUoVEVMT1BUX0FVVEhFTlRJQ0FUSU9OKSA9IFROX05HX1JGOworCQlURUxPUFRf REVGX0NfTUVfTU9ERShURUxPUFRfQVVUSEVOVElDQVRJT04pID0gVE5fTkdfUkY7CisJCWJyZWFr OworI2lmZGVmIENLX1NSUAorCSAgICAgIGNhc2UgQVVUSFRZUEVfU1JQOgorCQlhdXRoX3R5cGVf dXNlclswXSA9IEFVVEhUWVBFX1NSUDsKKwkJYXV0aF90eXBlX3VzZXJbMV0gPSBBVVRIVFlQRV9O VUxMOworCQlURUxPUFRfREVGX1NfVV9NT0RFKFRFTE9QVF9BVVRIRU5USUNBVElPTikgPSBUTl9O R19NVTsKKwkJVEVMT1BUX0RFRl9DX01FX01PREUoVEVMT1BUX0FVVEhFTlRJQ0FUSU9OKSA9IFRO X05HX01VOworCQlicmVhazsKKyNlbmRpZiAvKiBDS19TUlAgKi8KKyNpZmRlZiBDS19TU0wKKwkg ICAgICBjYXNlIEFVVEhUWVBFX1NTTDoKKwkJYXV0aF90eXBlX3VzZXJbMF0gPSBBVVRIVFlQRV9T U0w7CisJCWF1dGhfdHlwZV91c2VyWzFdID0gQVVUSFRZUEVfTlVMTDsKKwkJVEVMT1BUX0RFRl9T X1VfTU9ERShURUxPUFRfQVVUSEVOVElDQVRJT04pID0gVE5fTkdfTVU7CisJCVRFTE9QVF9ERUZf Q19NRV9NT0RFKFRFTE9QVF9BVVRIRU5USUNBVElPTikgPSBUTl9OR19NVTsKKwkJYnJlYWs7Cisj ZW5kaWYgLyogQ0tfU1NMICovCisjaWZkZWYgTlQKKwkgICAgICBjYXNlIEFVVEhUWVBFX05UTE06 CisJCWF1dGhfdHlwZV91c2VyWzBdID0gQVVUSFRZUEVfTlRMTTsKKwkJYXV0aF90eXBlX3VzZXJb MV0gPSBBVVRIVFlQRV9OVUxMOworCQlURUxPUFRfREVGX1NfVV9NT0RFKFRFTE9QVF9BVVRIRU5U SUNBVElPTikgPSBUTl9OR19NVTsKKwkJVEVMT1BUX0RFRl9DX01FX01PREUoVEVMT1BUX0FVVEhF TlRJQ0FUSU9OKSA9IFROX05HX01VOworCQlicmVhazsKKyNlbmRpZiAvKiBOVCAqLworI2lmZGVm IENLX0tFUkJFUk9TCisJICAgICAgY2FzZSBBVVRIVFlQRV9LRVJCRVJPU19WNDoKKwkJYXV0aF90 eXBlX3VzZXJbMF0gPSBBVVRIVFlQRV9LRVJCRVJPU19WNDsKKwkJYXV0aF90eXBlX3VzZXJbMV0g PSBBVVRIVFlQRV9OVUxMOworCQlURUxPUFRfREVGX1NfVV9NT0RFKFRFTE9QVF9BVVRIRU5USUNB VElPTikgPSBUTl9OR19NVTsKKwkJVEVMT1BUX0RFRl9DX01FX01PREUoVEVMT1BUX0FVVEhFTlRJ Q0FUSU9OKSA9IFROX05HX01VOworCQlicmVhazsKKworCSAgICAgIGNhc2UgQVVUSFRZUEVfS0VS QkVST1NfVjU6CisJCWF1dGhfdHlwZV91c2VyWzBdID0gQVVUSFRZUEVfS0VSQkVST1NfVjU7CisJ CWF1dGhfdHlwZV91c2VyWzFdID0gQVVUSFRZUEVfTlVMTDsKKwkJVEVMT1BUX0RFRl9TX1VfTU9E RShURUxPUFRfQVVUSEVOVElDQVRJT04pID0gVE5fTkdfTVU7CisJCVRFTE9QVF9ERUZfQ19NRV9N T0RFKFRFTE9QVF9BVVRIRU5USUNBVElPTikgPSBUTl9OR19NVTsKKwkJYnJlYWs7CisjZW5kaWYg LyogQ0tfS0VSQkVST1MgKi8KKwkgICAgfQorCX0KKwkvKgorCSAgIElmIHRoZSB1c2VyIHJlcXVp cmVzIGEgcGFydGljdWxhciB0eXBlIG9mIEtlcmJlcm9zIGNvbm5lY3Rpb24sCisJICAgbWFrZSBz dXJlIHdlIGhhdmUgYSB2YWxpZCBUR1QuCisJKi8KKwltYWtlc3RyKCZzbG1zZywiQXV0aGVudGlj YXRpb24gZmFpbHVyZSIpOworCWlmICgodHRucHJvdG8gPT0gTlBfVEVMTkVUIHx8IHR0bnByb3Rv ID09IE5QX0tFUk1JVCkgJiYKKwkgICAgKGxpbmVbMF0gPT0gJyonICYmCisJICAgICBURUxPUFRf REVGX1NfVV9NT0RFKFRFTE9QVF9BVVRIRU5USUNBVElPTikgPT0gVE5fTkdfTVUgfHwKKwkgICAg IGxpbmVbMF0gIT0gJyonICYmCisJICAgICBURUxPUFRfREVGX0NfTUVfTU9ERShURUxPUFRfQVVU SEVOVElDQVRJT04pID09IFROX05HX01VKQorCSAgICApIHsKKyNpZmRlZiBDS19LRVJCRVJPUwor CSAgICBpZiAoIGF1dGhfdHlwZV91c2VyWzBdID09IEFVVEhUWVBFX0tFUkJFUk9TX1Y0ICkgewor CQlleHRlcm4gaW50IGtyYjRfYXV0b2dldDsKKwkJaWYgKCFja19rcmI0X2lzX2luc3RhbGxlZCgp KQorCQkgIHJldHVybihjeF9mYWlsKG1zZywKKwkgICAgICAiUmVxdWlyZWQgYXV0aGVudGljYXRp b24gbWV0aG9kIChLZXJiZXJvcyA0KSBpcyBub3QgaW5zdGFsbGVkIikpOworI2lmZGVmIENPTU1F TlQKKwkJLyogVGhpcyBjb2RlIHJlc3VsdHMgaW4gZmFsc2UgZmFpbHVyZXMgd2hlbiB1c2luZyAq LworCQkvKiBrZXJiZXJvcyB0byBtYWNoaW5lcyBpbiByZWFsbXMgb3RoZXIgdGhhbiB0aGUgICov CisJCS8qIGRlZmF1bHQgc2luY2Ugd2UgZG9uJ3Qga25vdyB0aGUgcmVhbG0gb2YgdGhlICAgKi8K KwkJLyogb3RoZXIgbWFjaGluZSB1bnRpbCBwZXJmb3JtIHRoZSByZXZlcnNlIEROUyAgICAqLwor CQkvKiBsb29rdXAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJ CWVsc2UgaWYgKGxpbmVbMF0gIT0gJyonICYmICFja19rcmI0X2lzX3RndF92YWxpZCgpICYmCisJ CQkgICAoIWtyYjRfYXV0b2dldCB8fAorCQkJICAgIGtyYjRfYXV0b2dldCAmJiAhY2tfa3JiNF9h dXRvZ2V0X1RHVChOVUxMKSkpIHsKKwkJICAgIHJldHVybihjeF9mYWlsKG1zZywKKwkJCSAgICJL ZXJiZXJvcyA0OiBUaWNrZXQgR2V0dGluZyBUaWNrZXQgbm90IHZhbGlkIikpOworCQl9CisjZW5k aWYgLyogQ09NTUVOVCAqLworCSAgICB9IGVsc2UgaWYgKGF1dGhfdHlwZV91c2VyWzBdID09IEFV VEhUWVBFX0tFUkJFUk9TX1Y1KSB7CisJCWV4dGVybiBpbnQga3JiNV9hdXRvZ2V0OworCQlpZiAo IWNrX2tyYjVfaXNfaW5zdGFsbGVkKCkpIHsKKwkJICAgIHJldHVybihjeF9mYWlsKG1zZywKKwkg ICAiUmVxdWlyZWQgYXV0aGVudGljYXRpb24gbWV0aG9kIChLZXJiZXJvcyA1KSBpcyBub3QgaW5z dGFsbGVkIikpOworCQl9CisjaWZkZWYgQ09NTUVOVAorCQkvKiBUaGlzIGNvZGUgcmVzdWx0cyBp biBmYWxzZSBmYWlsdXJlcyB3aGVuIHVzaW5nICovCisJCS8qIGtlcmJlcm9zIHRvIG1hY2hpbmVz IGluIHJlYWxtcyBvdGhlciB0aGFuIHRoZSAgKi8KKwkJLyogZGVmYXVsdCBzaW5jZSB3ZSBkb24n dCBrbm93IHRoZSByZWFsbSBvZiB0aGUgICAqLworCQkvKiBvdGhlciBtYWNoaW5lIHVudGlsIHBl cmZvcm0gdGhlIHJldmVyc2UgRE5TICAgICovCisJCS8qIGxvb2t1cC4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkJZWxzZSBpZiAobGluZVswXSAhPSAnKicgJiYg IWNrX2tyYjVfaXNfdGd0X3ZhbGlkKCkgJiYKKwkJCSAgICgha3JiNV9hdXRvZ2V0IHx8CisJCQkg ICAga3JiNV9hdXRvZ2V0ICYmICFja19rcmI1X2F1dG9nZXRfVEdUKE5VTEwpKSkgeworCQkgICAg cmV0dXJuKGN4X2ZhaWwobXNnLAorCQkJICJLZXJiZXJvcyA1OiBUaWNrZXQgR2V0dGluZyBUaWNr ZXQgbm90IHZhbGlkLiIpKTsKKwkJfQorI2VuZGlmIC8qIENPTU1FTlQgKi8KKwkgICAgfQorI2Vu ZGlmIC8qIENLX0tFUkJFUk9TICovCisjaWZkZWYgTlQKKwkgICAgaWYgKGF1dGhfdHlwZV91c2Vy WzBdID09IEFVVEhUWVBFX05UTE0pIHsKKwkJaWYgKCFja19udGxtX2lzX2luc3RhbGxlZCgpKSB7 CisJCSAgICByZXR1cm4oY3hfZmFpbChtc2csCisJCSAgICJSZXF1aXJlZCBhdXRoZW50aWNhdGlv biBtZXRob2QgKE5UTE0pIGlzIG5vdCBpbnN0YWxsZWQiKSk7CisJCX0gZWxzZSBpZiAobGluZVsw XSAhPSAnKicgJiYgIWNrX250bG1faXNfdmFsaWQoMCkpIHsKKwkJICAgIHJldHVybihjeF9mYWls KG1zZywiTlRMTTogQ3JlZGVudGlhbHMgYXJlIHVuYXZhaWxhYmxlLiIpKTsKKwkJfQorCSAgICB9 CisjZW5kaWYgLyogTlQgKi8KKyNpZmRlZiBDS19TU0wKKwkgICAgaWYgKGF1dGhfdHlwZV91c2Vy WzBdID09IEFVVEhUWVBFX1NTTCkgeworCQlpZiAoIWNrX3NzbGVheV9pc19pbnN0YWxsZWQoKSkg eworCQkgICAgcmV0dXJuKGN4X2ZhaWwobXNnLAorCQkgICAgICJSZXF1aXJlZCBhdXRoZW50aWNh dGlvbiBtZXRob2QgKFNTTCkgaXMgbm90IGluc3RhbGxlZCIpKTsKKwkJfQorCSAgICB9CisjZW5k aWYgLyogQ0tfU1NMICovCisjaWZkZWYgQ0tfU1JQCisJICAgIGlmIChhdXRoX3R5cGVfdXNlclsw XSA9PSBBVVRIVFlQRV9TUlApIHsKKwkJaWYgKCFja19zcnBfaXNfaW5zdGFsbGVkKCkpIHsKKwkJ ICAgIHJldHVybihjeF9mYWlsKG1zZywKKwkJICAgICAiUmVxdWlyZWQgYXV0aGVudGljYXRpb24g bWV0aG9kIChTUlApIGlzIG5vdCBpbnN0YWxsZWQiKSk7CisJCX0KKwkgICAgfQorI2VuZGlmIC8q IENLX1NSUCAqLworCX0KKyNlbmRpZiAvKiBDS19BVVRIRU5USUNBVElPTiAqLworI2lmZGVmIENL X0VOQ1JZUFRJT04KKwlpZiAoKHR0bnByb3RvID09IE5QX1RFTE5FVCB8fCB0dG5wcm90byA9PSBO UF9LRVJNSVQpICYmCisJICAgICBwYXJhbTIgPiAtMSkgeworCSAgICBpZiAoIXNsX2N4X3NhdmVk KSB7CisJCXNsX2N4X3R5cGUgPSBjeF90eXBlOworCQlzbF9jeF9zYXZlZCA9IDE7CisJICAgIH0K KwkgICAgaWYgKCFzbF90b3B0X2Vfc19zYXZlZCkgeworCQlzbF90b3B0X2Vfc3UgPSBURUxPUFRf REVGX1NfVV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKTsKKwkJc2xfdG9wdF9lX3NtID0gVEVMT1BU X0RFRl9TX01FX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pOworCQlzbF90b3B0X2Vfc19zYXZlZCA9 IDE7CisJICAgIH0KKwkgICAgaWYgKCFzbF90b3B0X2VfY19zYXZlZCkgeworCQlzbF90b3B0X2Vf Y3UgPSBURUxPUFRfREVGX0NfVV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKTsKKwkJc2xfdG9wdF9l X2NtID0gVEVMT1BUX0RFRl9DX01FX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pOworCQlzbF90b3B0 X2VfY19zYXZlZCA9IDE7CisJICAgIH0KKwkgICAgY3hfdHlwZSA9IHBhcmFtMjsKKwkgICAgaWYg KGN4X3R5cGUgPT0gQ1hfQVVUTykgeworCQlURUxPUFRfREVGX1NfVV9NT0RFKFRFTE9QVF9FTkNS WVBUSU9OKSA9IFROX05HX1JROworCQlURUxPUFRfREVGX1NfTUVfTU9ERShURUxPUFRfRU5DUllQ VElPTikgPSBUTl9OR19SUTsKKwkJVEVMT1BUX0RFRl9DX1VfTU9ERShURUxPUFRfRU5DUllQVElP TikgPSBUTl9OR19SUTsKKwkJVEVMT1BUX0RFRl9DX01FX01PREUoVEVMT1BUX0VOQ1JZUFRJT04p ID0gVE5fTkdfUlE7CisJICAgIH0gZWxzZSBpZiAoY3hfdHlwZSA9PSBDWF9OT05FKSB7CisJCVRF TE9QVF9ERUZfU19VX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pID0gVE5fTkdfUkY7CisJCVRFTE9Q VF9ERUZfU19NRV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9IFROX05HX1JGOworCQlURUxPUFRf REVGX0NfVV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9IFROX05HX1JGOworCQlURUxPUFRfREVG X0NfTUVfTU9ERShURUxPUFRfRU5DUllQVElPTikgPSBUTl9OR19SRjsKKwkgICAgfSBlbHNlIHsK KwkJVEVMT1BUX0RFRl9TX1VfTU9ERShURUxPUFRfRU5DUllQVElPTikgPSBUTl9OR19NVTsKKwkJ VEVMT1BUX0RFRl9TX01FX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pID0gVE5fTkdfTVU7CisJCVRF TE9QVF9ERUZfQ19VX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pID0gVE5fTkdfTVU7CisJCVRFTE9Q VF9ERUZfQ19NRV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9IFROX05HX01VOworCSAgICB9CisJ fQorCWlmICh0dG5wcm90byA9PSBOUF9FSzRMT0dJTiB8fCB0dG5wcm90byA9PSBOUF9FSzVMT0dJ TiB8fAorCSAgICAodHRucHJvdG8gPT0gTlBfVEVMTkVUIHx8IHR0bnByb3RvID09IE5QX0tFUk1J VCkgJiYKKwkgICAgKChsaW5lWzBdID09ICcqJyAmJgorCSAgICAgIFRFTE9QVF9ERUZfU19VX01P REUoVEVMT1BUX0VOQ1JZUFRJT04pID09IFROX05HX01VICYmCisJICAgICAgVEVMT1BUX0RFRl9T X01FX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pID09IFROX05HX01VKSB8fAorCSAgICAgKGxpbmVb MF0gIT0gJyonICYmCisJICAgICAgVEVMT1BUX0RFRl9DX1VfTU9ERShURUxPUFRfRU5DUllQVElP TikgPT0gVE5fTkdfTVUgJiYKKwkgICAgICBURUxPUFRfREVGX0NfTUVfTU9ERShURUxPUFRfRU5D UllQVElPTikgPT0gVE5fTkdfTVUpKQorCSAgICApIHsKKwkgICAgaWYgKCFja19jcnlwdF9pc19p bnN0YWxsZWQoKSkgeworCQlyZXR1cm4oY3hfZmFpbChtc2csCisJCSAgIlJlcXVpcmVkIEVuY3J5 cHRpb24gbWV0aG9kcyBhcmUgbm90IGluc3RhbGxlZCIpKTsKKwkgICAgfQorCX0KKyNlbmRpZiAv KiBDS19FTkNSWVBUSU9OICovCisjaWZkZWYgUkxPR0NPREUKKyNpZmRlZiBDS19LRVJCRVJPUwor I2lmZGVmIEtSQjQKKwlpZiAodHRucHJvdG8gPT0gTlBfSzRMT0dJTiB8fCB0dG5wcm90byA9PSBO UF9FSzRMT0dJTikgeworCSAgICBleHRlcm4gaW50IGtyYjRfYXV0b2dldDsKKwkgICAgY2hhciB0 Z3RbMjU2XTsKKwkgICAgY2hhciAqIHJlYWxtOworCisJICAgIC8qIFdlIGRvbid0IGhhdmUgdGhl IGZ1bGwgaG9zdG5hbWUgYXQgeWV0IHNvICAqLworCSAgICAvKiB3ZSBkbyBhIEROUyBsb29rdXAg YmVmb3JlIGNhbGxpbmcgdHRvcGVuKCkgKi8gCisKKwkgICAgcmVhbG0gPSBja19rcmI0X3JlYWxt b2Zob3N0KGNrZ2V0ZnFob3N0bmFtZShob3N0bmFtZSkpOworCSAgICBja21ha21zZyh0Z3QsMjU2 LCJrcmJ0Z3QuIixyZWFsbSwiQCIscmVhbG0pOworCSAgICBpZiAoIWNrX2tyYjRfaXNfaW5zdGFs bGVkKCkpIHsKKwkJcmV0dXJuKGN4X2ZhaWwobXNnLAorCQkgIlJlcXVpcmVkIGF1dGhlbnRpY2F0 aW9uIG1ldGhvZCAoS2VyYmVyb3MgNCkgaXMgbm90IGluc3RhbGxlZCIKKwkJCSAgICAgICApKTsK KwkgICAgfSBlbHNlIHsKKwkJaWYgKChja19rcmI0X3RrdF9pc3ZhbGlkKHRndCkgPD0gMCkgJiYK KwkJICAgICgha3JiNF9hdXRvZ2V0IHx8CisJCSAgICAga3JiNF9hdXRvZ2V0ICYmICFja19rcmI0 X2F1dG9nZXRfVEdUKHJlYWxtKSkpIHsKKwkJICAgIHJldHVybihjeF9mYWlsKG1zZywKKwkJCSAg ICJLZXJiZXJvcyA0OiBUaWNrZXQgR2V0dGluZyBUaWNrZXQgbm90IHZhbGlkIikpOworCQl9CisJ ICAgIH0KKwl9CisjZW5kaWYgLyogS1JCNCAqLworI2lmZGVmIEtSQjUKKwlpZiAodHRucHJvdG8g PT0gTlBfSzVMT0dJTiB8fCB0dG5wcm90byA9PSBOUF9FSzVMT0dJTiB8fAorCSAgICB0dG5wcm90 byA9PSBOUF9LNVUyVSkKKwl7CisJICAgIGV4dGVybiBpbnQga3JiNV9hdXRvZ2V0OworCSAgICBj aGFyIHRndFsyNTZdOworCSAgICBjaGFyICogcmVhbG07CisKKwkgICAgLyogTXVzdCBnZXQgZnVs bCBob3N0bmFtZSBiZWZvcmUgY2FsbGluZyB0dG9wZW4oKSAqLworCisJICAgIHJlYWxtID0gY2tf a3JiNV9yZWFsbW9maG9zdChja2dldGZxaG9zdG5hbWUoaG9zdG5hbWUpKTsKKwkgICAgY2ttYWtt c2codGd0LDI1Niwia3JidGd0LyIscmVhbG0sIkAiLHJlYWxtKTsKKworCSAgICBpZiAoIWNrX2ty YjVfaXNfaW5zdGFsbGVkKCkpIHsKKwkJcmV0dXJuKGN4X2ZhaWwobXNnLAorICAgICAgICAgICAg ICAgICAiUmVxdWlyZWQgYXV0aGVudGljYXRpb24gbWV0aG9kIChLZXJiZXJvcyA1KSBub3QgaW5z dGFsbGVkIikpOworCSAgICB9IGVsc2UgaWYgKCEoKGNrX2tyYjVfdGt0X2lzdmFsaWQoTlVMTCx0 Z3QpID4gMCkgfHwKKwkJCSAgY2tfa3JiNV9pc190Z3RfdmFsaWQoKSkgJiYKKwkJICAgICAgICgh a3JiNV9hdXRvZ2V0IHx8CisJCQlrcmI1X2F1dG9nZXQgJiYgIWNrX2tyYjVfYXV0b2dldF9UR1Qo cmVhbG0pKSkgeworCQlyZXR1cm4oY3hfZmFpbChtc2csCisJCSAgICAgICAiS2VyYmVyb3MgNTog VGlja2V0IEdldHRpbmcgVGlja2V0IG5vdCB2YWxpZC4iKSk7CisJICAgIH0KKwl9CisjZW5kaWYg LyogS1JCNSAqLworI2VuZGlmIC8qIENLX0tFUkJFUk9TICovCisjZW5kaWYgLyogUkxPR0NPREUg Ki8KKworI2lmbmRlZiBOT1NQTAorI2lmZGVmIFJMT0dDT0RFCisJaWYgKHVzZXJuYW1lKSB7CisJ ICAgIGlmICghc2xfdWlkX3NhdmVkKSB7CisJCWNrc3RybmNweShzbF91aWRidWYsdWlkYnVmLFVJ REJVRkxFTik7CisJCXNsX3VpZF9zYXZlZCA9IDE7CisJICAgIH0KKwkgICAgY2tzdHJuY3B5KHVp ZGJ1Zix1c2VybmFtZSxVSURCVUZMRU4pOworCSAgICB1aWRmbGFnID0gMTsKKwl9CisjZW5kaWYg LyogUkxPR0NPREUgKi8KKyNpZmRlZiBUTkNPREUKKwlpZiAoIXNsX3RuX3NhdmVkKSB7CisJICAg IHNsX3RuX3dhaXQgPSB0bl93YWl0X2ZsZzsKKwkgICAgc2xfdG5fc2F2ZWQgPSAxOworCX0KKwl0 bl93YWl0X2ZsZyA9IHBhcmFtMzsKKyNlbmRpZiAvKiBUTkNPREUgKi8KKyNlbmRpZiAvKiBOT1NQ TCAqLworCX0gLyogaWYgKG5ldCA9PSBORVRfVENQQikgKi8KKyNlbmRpZiAvKiBUQ1BTT0NLRVQg Ki8KKworI2lmbmRlZiBOT1NQTAorI2lmZGVmIENLX1NFQ1VSSVRZCisJaWYgKHBhc3N3b3JkKSB7 CisJICAgIGlmIChwYXNzd29yZFswXSkgeworCQlja3N0cm5jcHkocHdidWYscGFzc3dvcmQsUFdC VUZMKzEpOworCQlwd2ZsZyA9IDE7CisJCXB3Y3J5cHQgPSAwOworCSAgICB9IGVsc2UKKwkJcHdm bGcgPSAwOworCX0KKyNlbmRpZiAvKiBDS19TRUNVUklUWSAqLworI2VuZGlmIC8qIE5PU1BMICov CisKKwkvKiBUcnkgdG8gb3BlbiAtIG5ldHdvcmsgKi8KKwlja3N0cm5jcHkodHRuYW1lLGxpbmUs VFROQU1MRU4pOworCXkgPSB0dG9wZW4obGluZSwgJl9sb2NhbCwgbWRtdHlwLCAwICk7CisKKyNp Zm5kZWYgTk9IVFRQCisJLyogIElmIHRoZSBjb25uZWN0aW9uIGZhaWxlZCBhbmQgd2UgYXJlIHVz aW5nIGFuIEhUVFAgUHJveHkKKwkgKiAgYW5kIHRoZSByZWFzb24gZm9yIHRoZSBmYWlsdXJlIHdh cyBhbiBhdXRoZW50aWNhdGlvbgorCSAqICBlcnJvciwgdGhlbiB3ZSBuZWVkIHRvIGdpdmUgdGhl IHVzZXIgdG8gYWJpbGl0eSB0bworCSAqICBlbnRlciBhIHVzZXJuYW1lIGFuZCBwYXNzd29yZCwg anVzdCBsaWtlIGEgYnJvd3Nlci4KKwkgKgorCSAqICBJIHRyaWVkIHRvIGRvIGFsbCBvZiB0aGlz IHdpdGhpbiB0aGUgbmV0b3BlbigpIGNhbGwKKwkgKiAgYnV0IGl0IGlzIG11Y2ggdG9vIG11Y2gg d29yay4KKwkgKi8KKwl3aGlsZSAoeSA8IDAgJiYgdGNwX2h0dHBfcHJveHkgIT0gTlVMTCApIHsK KworCSAgICBpZiAodGNwX2h0dHBfcHJveHlfZXJybm8gPT0gNDAxIHx8CisJCXRjcF9odHRwX3By b3h5X2Vycm5vID09IDQwNyApIHsKKwkJY2hhciB1aWRbVUlEQlVGTEVOXTsKKwkJY2hhciBwd2Rb MjU2XTsKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgdHh0Ym94IHRiWzJdOworICAgICAgICAgICAg ICAgIGludCBvazsKKworICAgICAgICAgICAgICAgIHRiWzBdLnRfYnVmID0gdWlkOworICAgICAg ICAgICAgICAgIHRiWzBdLnRfbGVuID0gVUlEQlVGTEVOOworICAgICAgICAgICAgICAgIHRiWzBd LnRfbGJsID0gIlByb3h5IFVzZXJpZDogIjsKKyAgICAgICAgICAgICAgICB0YlswXS50X2RmbHQg PSBOVUxMOworICAgICAgICAgICAgICAgIHRiWzBdLnRfZWNobyA9IDE7CisgICAgICAgICAgICAg ICAgdGJbMV0udF9idWYgPSBwd2Q7CisgICAgICAgICAgICAgICAgdGJbMV0udF9sZW4gPSAyNTY7 CisgICAgICAgICAgICAgICAgdGJbMV0udF9sYmwgPSAiUHJveHkgUGFzc3BocmFzZTogIjsKKyAg ICAgICAgICAgICAgICB0YlsxXS50X2RmbHQgPSBOVUxMOworICAgICAgICAgICAgICAgIHRiWzFd LnRfZWNobyA9IDI7CisKKyAgICAgICAgICAgICAgICBvayA9IHVxX210eHQoIlByb3h5IFNlcnZl ciBBdXRoZW50aWNhdGlvbiBSZXF1aXJlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIE5VTEwsIDIsIHRiKTsKKworCQlpZiAob2sgJiYgdWlkWzBdKSB7CisJCSAgICBjaGFyICog cHJveHlfdXNlciwgKiBwcm94eV9wd2Q7CisKKwkJICAgIHByb3h5X3VzZXIgPSB0Y3BfaHR0cF9w cm94eV91c2VyOworCQkgICAgcHJveHlfcHdkICA9IHRjcF9odHRwX3Byb3h5X3B3ZDsKKworCQkg ICAgdGNwX2h0dHBfcHJveHlfdXNlciA9IHVpZDsKKwkJICAgIHRjcF9odHRwX3Byb3h5X3B3ZCA9 IHB3ZDsKKworCQkgICAgY2tzdHJuY3B5KHR0bmFtZSxsaW5lLFRUTkFNTEVOKTsKKwkJICAgIHkg PSB0dG9wZW4obGluZSwgJl9sb2NhbCwgbWRtdHlwLCAwKTsKKwkJICAgIG1lbXNldChwd2QsMCxz aXplb2YocHdkKSk7CisJCSAgICB0Y3BfaHR0cF9wcm94eV91c2VyID0gcHJveHlfdXNlcjsKKwkJ ICAgIHRjcF9odHRwX3Byb3h5X3B3ZCA9IHByb3h5X3B3ZDsKKwkJfSBlbHNlCisJCSAgYnJlYWs7 CisJICAgIH0gZWxzZQorCSAgICAgIGJyZWFrOworCX0KKyNlbmRpZiAvKiBOT0hUVFAgKi8KKwlp ZiAoeSA8IDApIHsKKwkgICAgc2xyZXN0b3IoKTsKKwkgICAgbWFrZXN0cigmc2xtc2csIk5ldHdv cmsgY29ubmVjdGlvbiBmYWlsdXJlIik7CisjaWZkZWYgVk1TCisJICAgIGlmIChtc2cgJiYgaGlu dHMgJiYgIXhjbWRzcmMgJiYgSVNfUkxPR0lOKCkpIHsKKwkJbWFrZXN0cigmc2xtc2csIlJMT0dJ TiBmYWlsdXJlIik7CisJCWlmICAoc29ja2V0X2Vycm5vID09IEVBQ0NFUykgeworCQkgICAgcHJp bnRmKCIqKioqKioqKioqKioqKioqKioqKioqKioqXG4iKTsKKwkJICAgIHByaW50ZigKKwkgICAi SGludDogUkxPR0lOIHJlcXVpcmVzIHByaXZpbGVnZXMgdG8gb3BlbiBhbiBvdXRib3VuZCBwb3J0 LlxuIik7CisJCSAgICBwcmludGYoCisJCSAgICAiKFVzZSBTRVQgSElOVFMgT0ZGIHRvIHN1cHBy ZXNzIGZ1dHVyZSBoaW50cy4pXG4iKTsKKwkJICAgIHByaW50ZigiKioqKioqKioqKioqKioqKioq KioqKioqKlxuIik7CisJCX0KKwkgICAgfQorI2Vsc2UgIC8qIE5vdCBWTVMuLi4gKi8KKwkgICAg aWYgKGVycm5vKSB7CisJCWludCB4OworCQlkZWJ1ZyhGMTExLCJzZXQgaG9zdCBsaW5lLCBlcnJu byIsIiIsZXJybm8pOworCQltYWtlc3RyKCZzbG1zZyxja19lcnJzdHIoKSk7CisJCWlmIChtc2cp IHsKKyNpZmRlZiBPUzIKKwkJICAgIHByaW50ZigiQ2FuJ3QgY29ubmVjdCB0byAlc1xuIixsaW5l KTsKKyNlbHNlIC8qIE9TMiAqLworI2lmZGVmIFVOSVgKKwkJICAgIGlmIChoaW50cyAmJiAheGNt ZHNyYyAmJiBJU19STE9HSU4oKSkgeworCQkJbWFrZXN0cigmc2xtc2csIlJMT0dJTiBmYWlsdXJl Iik7CisJCQlwcmludGYoIioqKioqKioqKioqKioqKioqKioqKioqKipcbiIpOworCQkJcHJpbnRm KAorCSAiSGludDogUkxPR0lOIHJlcXVpcmVzIHByaXZpbGVnZXMgdG8gb3BlbiBhbiBvdXRib3Vu ZCBwb3J0LlxuIik7CisJCQlwcmludGYoCisJICIoVXNlIFNFVCBISU5UUyBPRkYgdG8gc3VwcHJl c3MgZnV0dXJlIGhpbnRzLilcbiIpOworCQkJcHJpbnRmKCIqKioqKioqKioqKioqKioqKioqKioq KioqXG4iKTsKKwkJICAgIH0KKyNlbmRpZiAvKiBVTklYICovCisjZW5kaWYgLyogT1MyICovCisJ CX0gZWxzZSBwcmludGYoIkNhbid0IGNvbm5lY3QgdG8gJXNcbiIsbGluZSk7CisJICAgIH0gZWxz ZQorI2VuZGlmIC8qIFZNUyAqLworCSAgICAgIGlmIChtc2cpIHByaW50ZigiQ2FuJ3Qgb3BlbiBj b25uZWN0aW9uIHRvICVzXG4iLGxpbmUpOworCSAgICBjb250aW51ZTsKKwl9IGVsc2UgeworCSAg ICBzdWNjZXNzID0gMTsKKyNpZm5kZWYgTk9ESUFMCisJICAgIGRpYWxzdGEgPSBESUFfVU5LOwor I2VuZGlmIC8qIE5PRElBTCAqLworCSAgICBzd2l0Y2ggKG5ldCkgeworCSAgICAgIGNhc2UgTkVU X1RDUEE6CisJICAgICAgY2FzZSBORVRfVENQQjoKKwkJY3h0eXBlID0gQ1hUX1RDUElQOworI2lm ZGVmIENPTU1FTlQKKy8qIFRoaXMgd29ya3MgYnV0IGl0IG1lc3NlcyB1cCBpbnRlcmFjdGl2ZSBh bm9ueW1vdXMgbG9naW4gKi8KKyNpZm5kZWYgTk9YRkVSCisjaWZkZWYgSUtTX09QVElPTgorCQkv KiBJZiB3ZSBoYXZlIGNvbm5lY3RlZCB0byBhbiBJbnRlcm5ldCBLZXJtaXQgc2VydmljZSAqLwor CQkvKiBhbmQgYSAvVVNFUjogc3dpdGNoIHdhcyBnaXZlbiwgdGhlbiBsb2cgaW4uICovCisKKwkJ aWYgKFRFTE9QVF9VKFRFTE9QVF9LRVJNSVQpIHx8IFRFTE9QVF9NRShURUxPUFRfS0VSTUlUKSkg eworCQkgICAgZGVidWcoRjExMSwiY3hfbmV0IElLU0QgL1VTRVI6Iix1aWRidWYsaGF2ZXVzZXIp OworCQkgICAgaWYgKGhhdmV1c2VyIC8qICYmIGN4ID09IDAgKi8gKSB7IC8qIC9VU0VSOiBnaXZl biAqLworCQkJY2hhciAqIHBzdyA9IHB3YnVmOyAvKiBEbyB3ZSBoYXZlIGEgcGFzc3dvcmQ/ICov CisJCQlpZiAoISpwc3cpIHsgICAgICAgIC8qIE5vLi4uICovCisJCQkgICAgaWYgKCFzdHJjbXAo dWlkYnVmLCJhbm9ueW1vdXMiKSB8fAorCQkJCSFzdHJjbXAodWlkYnVmLCJmdHAiKSkgeworCQkJ CWV4dGVybiBjaGFyIG15aG9zdFtdOworCQkJCWNoYXIgKiB1ID0gKGNoYXIgKilzbF91aWRidWY7 CisJCQkJY2hhciAqIGggPSAoY2hhciAqKW15aG9zdDsKKwkJCQlpZiAoISp1KSB1ID0gIm5vYm9k eSI7CisJCQkJaWYgKCEqaCkgaCA9ICJub3doZXJlIjsKKwkJCQlja21ha21zZyh0bXBidWYsVE1Q QlVGU0laLHUsIkAiLGgsTlVMTCk7CisJCQkJcHN3ID0gdG1wYnVmOworCQkJCWRlYnVnKEYxMTAs ImN4X25ldCBJS1NEIGFub24iLHBzdywwKTsKKwkJCSAgICB9IGVsc2UgeworCQkJCXJlYWRwYXNz KCIgUGFzc3dvcmQ6ICIscHdidWYsUFdCVUZMKTsKKwkJCSAgICB9CisJCQl9CisJCQlzc3RhdGUg PSBzZXRnZW4oJ0knLHVpZGJ1Zixwc3csIiIpOworCQkgICAgfQorCQl9CisjZW5kaWYgLyogSUtT X09QVElPTiAqLworI2VuZGlmIC8qIE5PWEZFUiAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKwkJ YnJlYWs7CisJICAgICAgY2FzZSBORVRfU1NIOgorCQljeHR5cGUgPSBDWFRfU1NIOworCQlkdXBs ZXggPSAwOyAgICAgICAgIC8qIFJlbW90ZSBlY2hvICovCisJCWJyZWFrOworCSAgICAgIGNhc2Ug TkVUX1NMQVQ6CisJCWN4dHlwZSA9IENYVF9MQVQ7CisJCWJyZWFrOworCSAgICAgIGNhc2UgTkVU X1NYMjU6CisJICAgICAgY2FzZSBORVRfSVgyNToKKwkgICAgICBjYXNlIE5FVF9IWDI1OgorCSAg ICAgIGNhc2UgTkVUX1ZYMjU6CisJCWN4dHlwZSA9IENYVF9YMjU7CisJCWJyZWFrOworCSAgICAg IGNhc2UgTkVUX0JJT1M6CisJCWN4dHlwZSA9IENYVF9ORVRCSU9TOworCQlicmVhazsKKwkgICAg ICBjYXNlIE5FVF9GSUxFOgorCSAgICAgIGNhc2UgTkVUX1BJUEU6CisJICAgICAgY2FzZSBORVRf Q01EOgorCSAgICAgIGNhc2UgTkVUX0RMTDoKKwkgICAgICBjYXNlIE5FVF9QVFk6CisJCWN4dHlw ZSA9IENYVF9QSVBFOworCQlicmVhazsKKwkgICAgICBkZWZhdWx0OgorCQljeHR5cGUgPSBDWFRf UElQRTsKKwkJYnJlYWs7CisJICAgIH0KKwkgICAgYnJlYWs7CisJfQorICAgIH0gLyogZm9yLWxv b3AgKi8KKyAgICBzID0gbGluZTsKKworICAgIGRlYnVnKEYxMDEsImN4X25ldCBwb3N0IHR0b3Bl biBzdWNjZXNzIiwiIixzdWNjZXNzKTsKKyAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAgbG9j YWwgPSBkZmxvYzsgICAgICAgICAgICAgICAgICAvKiBHbyBiYWNrIHRvIG5vcm1hbCAqLworI2lm bmRlZiBNQUMKKyAgICAgICAgY2tzdHJuY3B5KHR0bmFtZSxkZnR0eSxUVE5BTUxFTik7IC8qIFJl c3RvcmUgZGVmYXVsdCB0dHkgbmFtZSAqLworI2VuZGlmIC8qIE1BQyAqLworICAgICAgICBzcGVl ZCA9IHR0Z3NwZCgpOworICAgICAgICBuZXR3b3JrID0gMDsgICAgICAgICAgICAgICAgICAgIC8q IE5vIG5ldHdvcmsgY29ubmVjdGlvbiBhY3RpdmUgKi8KKyAgICAgICAgaGF2ZWxpbmUgPSAwOwor ICAgICAgICBpZiAobWRtdHlwIDwgMCkgeyAgICAgICAgICAgICAgIC8qIFN3aXRjaGluZyBmcm9t IG5ldCB0byBhc3luYz8gKi8KKyAgICAgICAgICAgIGlmIChtZG1zYXYgPiAtMSkgICAgICAgICAg ICAvKiBSZXN0b3JlIG1vZGVtIHR5cGUgZnJvbSBsYXN0ICovCisgICAgICAgICAgICAgIG1kbXR5 cCA9IG1kbXNhdjsgICAgICAgICAgLyogU0VUIE1PREVNIGNvbW1hbmQsIGlmIGFueS4gKi8KKyAg ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgbWRtdHlwID0gMDsKKyAgICAgICAgICAgIG1k bXNhdiA9IC0xOworICAgICAgICB9CisgICAgICAgIHJldHVybigwKTsgICAgICAgICAgICAgICAg ICAgICAgLyogUmV0dXJuIGZhaWx1cmUgKi8KKyAgICB9CisgICAgaWYgKF9sb2NhbCA+IC0xKSBs b2NhbCA9IF9sb2NhbDsgICAgLyogT3BlbmVkIG9rLCBzZXQgbG9jYWwvcmVtb3RlLiAqLworICAg IG1ha2VzdHIoJnNsbXNnLE5VTEwpOworICAgIG5ldHdvcmsgPSAobWRtdHlwIDwgMCk7ICAgICAg ICAgICAgIC8qIFJlbWVtYmVyIGNvbm5lY3Rpb24gdHlwZS4gKi8KKyAgICBja3N0cm5jcHkodHRu YW1lLHMsVFROQU1MRU4pOyAgICAgICAvKiBDb3B5IG5hbWUgaW50byByZWFsIHBsYWNlLiAqLwor ICAgIGRlYnVnKEYxMTAsImN4X25ldCBvayIsdHRuYW1lLDApOworICAgIGRlYnVnKEYxMDEsImN4 X25ldCBuZXR3b3JrIiwiIixuZXR3b3JrKTsKKyNpZm5kZWYgTk9YRkVSCisgICAgaWYgKChyZWxp YWJsZSAhPSBTRVRfT0ZGIHx8ICFzZXRyZWxpYWJsZSkpIC8qIEFzc3VtZSBub3QgcmVsaWFibGUu ICovCisgICAgICByZWxpYWJsZSA9IFNFVF9PRkY7CisjZW5kaWYgLyogTk9YRkVSICovCisgICAg aWYgKCFuZXR3b3JrIHx8IGlzdG5jb21wb3J0KCkpCQorICAgICAgc3BlZWQgPSB0dGdzcGQoKTsg ICAgICAgICAgICAgICAgIC8qIEdldCB0aGUgY3VycmVudCBzcGVlZC4gKi8KKyAgICBkZWJ1ZyhG MTAxLCJjeF9uZXQgbG9jYWwiLCIiLGxvY2FsKTsKKyAgICBpZiAobmV0d29yaykgeworICAgICAg ICBkZWJ1ZyhGMTAxLCJjeF9uZXQgbmV0IiwiIixuZXQpOworI2lmbmRlZiBOT1hGRVIKKyAgICAg ICAgLyogRm9yY2UgcHJlZml4aW5nIG9mIDI1NSBvbiBUQ1AvSVAgY29ubmVjdGlvbnMuLi4gKi8K KyAgICAgICAgaWYgKG5ldCA9PSBORVRfVENQQgorI2lmZGVmIFNTSEJVSUxUSU4KKyAgICAgICAg ICAgICB8fCBuZXQgPT0gTkVUX1NTSAorI2VuZGlmIC8qIFNTSEJVSUxUSU4gKi8KKyAgICAgICAg ICAgICApIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMDEsImN4X25ldCByZWxpYWJsZSBBIiwiIixy ZWxpYWJsZSk7CisjaWZkZWYgQ0tfU1BFRUQKKyAgICAgICAgICAgIGN0bHBbKHVuc2lnbmVkKTI1 NV0gPSAxOworI2VuZGlmIC8qIENLX1NQRUVEICovCisgICAgICAgICAgICBpZiAoKHJlbGlhYmxl ICE9IFNFVF9PRkYgfHwgIXNldHJlbGlhYmxlKSkgeworI2lmZGVmIFROX0NPTVBPUlQKKyAgICAg ICAgICAgICAgICBpZiAoaXN0bmNvbXBvcnQoKSkgeyAgICAvKiBUZWxuZXQgY29tbXVuaWNhdGlv biBwb3J0ICovCisgICAgICAgICAgICAgICAgICAgIHJlbGlhYmxlID0gU0VUX09GRjsgLyogVHJh bnNwb3J0IGlzIG5vdCByZWxpYWJsZSAqLworICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAx LCJjeF9uZXQgcmVsaWFibGUgaXN0bmNvbXBvcnQoKSIsIiIsMSk7CisgICAgICAgICAgICAgICAg fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcmVsaWFibGUgPSBTRVRfT047ICAvKiBUcmFu c3BvcnQgaXMgcmVsaWFibGUgZW5kIHRvIGVuZCAqLworICAgICAgICAgICAgICAgICAgICBkZWJ1 ZyhGMTAxLCJjeF9uZXQgcmVsaWFibGUgaXN0bmNvbXBvcnQoKSIsIiIsMCk7CisgICAgICAgICAg ICAgICAgfQorI2Vsc2UKKyAgICAgICAgICAgICAgICByZWxpYWJsZSA9IFNFVF9PTjsgICAgICAv KiBUcmFuc3BvcnQgaXMgcmVsaWFibGUgZW5kIHRvIGVuZCAqLworI2VuZGlmIC8qIGlmZGVmIFRO X0NPTVBPUlQgKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlYnVnKEYxMDEsImN4X25l dCByZWxpYWJsZSBCIiwiIixyZWxpYWJsZSk7CisgICAgICAgIH0gZWxzZSBpZiAobmV0ID09IE5F VF9TWDI1IHx8CisgICAgICAgICAgICAgICAgICAgbmV0ID09IE5FVF9WWDI1IHx8CisgICAgICAg ICAgICAgICAgICAgbmV0ID09IE5FVF9JWDI1IHx8CisgICAgICAgICAgICAgICAgICAgbmV0ID09 IE5FVF9IWDI1KSB7CisgICAgICAgICAgICBkdXBsZXggPSAxOyAgICAgICAgICAgICAgICAgLyog TG9jYWwgZWNobyBmb3IgWC4yNSAqLworICAgICAgICAgICAgaWYgKHJlbGlhYmxlICE9IFNFVF9P RkYgfHwgIXNldHJlbGlhYmxlKQorICAgICAgICAgICAgICByZWxpYWJsZSA9IFNFVF9PTjsgICAg ICAgIC8qIFRyYW5zcG9ydCBpcyByZWxpYWJsZSBlbmQgdG8gZW5kICovCisgICAgICAgIH0KKyNl bmRpZiAvKiBOT1hGRVIgKi8KKyAgICB9CisjaWZuZGVmIE5PWEZFUgorICAgIGRlYnVnKEYxMDEs ImN4X25ldCByZWxpYWJsZSIsIiIscmVsaWFibGUpOworI2VuZGlmIC8qIE5PWEZFUiAqLworI2lm ZGVmIE9TMgorICAgIGlmIChtZG10eXAgPD0gMCkgICAgICAgICAgICAgICAgICAgIC8qIE5ldHdv cmsgb3IgRGlyZWN0IENvbm5lY3Rpb24gKi8KKyAgICAgIERpYWxlclNlbmQoT1BUX0tFUk1JVF9D T05ORUNULCAwKTsKKyNlbmRpZiAvKiBPUzIgKi8KKworICB4Y3hfbmV0OgorCisgICAgc2V0Zmxv dygpOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2V0IGFwcHJvcHJpYXRlIGZsb3cgY29u dHJvbCAqLworCisgICAgaGF2ZWxpbmUgPSAxOworI2lmZGVmIENLTE9HRElBTAorICAgIGRvbG9n bmV0KCk7CisjZW5kaWYgLyogQ0tMT0dESUFMICovCisKKyNpZm5kZWYgTk9TUEwKKyAgICBpZiAo bG9jYWwpIHsKKyAgICAgICAgaWYgKG5tYWMpIHsgICAgICAgICAgICAgICAgICAgICAvKiBBbnkg bWFjcm9zIGRlZmluZWQ/ICovCisgICAgICAgICAgICBpbnQgazsgICAgICAgICAgICAgICAgICAg ICAgLyogWWVzICovCisgICAgICAgICAgICBrID0gbWxvb2sobWFjdGFiLCJvbl9vcGVuIixubWFj KTsgICAvKiBMb29rIHRoaXMgdXAgKi8KKyAgICAgICAgICAgIGlmIChrID49IDApIHsgICAgICAg ICAgICAgICAgICAgICAgIC8qIElmIGZvdW5kLCAqLworICAgICAgICAgICAgICAgIGlmIChkb2Rv KGssdHRuYW1lLDApID4gLTEpICAgICAgLyogc2V0IGl0IHVwLCAqLworICAgICAgICAgICAgICAg ICAgcGFyc2VyKDEpOyAgICAgICAgICAgICAgICAgICAgLyogYW5kIGV4ZWN1dGUgaXQgKi8KKyAg ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBOT1NQTCAqLworCisgICAg aWYgKGxvY2FsICYmIChjeCB8fCBzeCkpIHsgICAgICAgICAgLyogL0NPTk5FQ1Qgb3IgL1NFUlZF UiBzd2l0Y2ggZ2l2ZW4gKi8KKyAgICAgICAgaWYgKGN4KSB7ICAgICAgICAgICAgICAgICAgICAg ICAvKiAvQ09OTkVDVCAqLworCSAgICBpZiAoIWd1aSkgeworCQkvKiBDb21tYW5kIHdhcyBjb25m aXJtZWQgc28gd2UgY2FuIHByZS1wb3AgY29tbWFuZCBsZXZlbC4gICovCisJCS8qIFRoaXMgaXMg c28gQ09OTkVDVCBtb2R1bGUgd29uJ3QgdGhpbmsgd2UncmUgZXhlY3V0aW5nIGEgKi8KKwkJLyog c2NyaXB0IGlmIENPTk5FQ1Qgd2FzIHRoZSBmaW5hbCBjb21tYW5kIGluIHRoZSBzY3JpcHQuICAq LworCQlpZiAoY21kbHZsID4gMCkKKwkJICBwcmVwb3AoKTsKKwkgICAgfQorI2lmbmRlZiBOT0RJ QUwKKyAgICAgICAgICAgIGRpYWxzdGEgPSBESUFfVU5LOworI2VuZGlmIC8qIE5PRElBTCAqLwor I2lmZGVmIExPQ1VTCisgICAgICAgICAgICBpZiAoYXV0b2xvY3VzKSB7CisJCXNldGxvY3VzKDEs MSk7CisgICAgICAgICAgICB9CisjZW5kaWYgLyogTE9DVVMgKi8KKyAgICAgICAgICAgIHN1Y2Nl c3MgPSBkb2NvbmVjdCgwLCBjbWRsdmwgPT0gMCA/IDEgOiAwKTsKKyAgICAgICAgICAgIGlmICh0 dGNoaygpIDwgMCkKKyAgICAgICAgICAgICAgZG9sb2dlbmQoKTsKKwkgICAgZGVidWcoRjEwMSwi Y3hfbmV0IHBvc3QgZG9jb25lY3Qgc3VjY2VzcyIsIiIsc3VjY2Vzcyk7CisgICAgICAgICAgICBy ZXR1cm4oc3VjY2Vzcyk7CisjaWZuZGVmIE5PWEZFUgorICAgICAgICB9IGVsc2UgaWYgKHN4KSB7 ICAgICAgICAgICAgICAgIC8qIC9TRVJWRVIgKi8KKyAgICAgICAgICAgIHNzdGF0ZSA9ICd4JzsK KyNpZmRlZiBNQUMKKyAgICAgICAgICAgIHdoYXQgPSBXX1JFQ1Y7CisgICAgICAgICAgICBzY3Jj cmVhdGUoKTsKKyNlbmRpZiAvKiBNQUMgKi8KKyAgICAgICAgICAgIGlmIChsb2NhbCkgZGlzcGxh ID0gMTsKKyNpZmRlZiBBTUlHQQorICAgICAgICAgICAgcmVxb2ZmKCk7ICAgICAgICAgICAgICAg ICAgIC8qIE5vIERPUyByZXF1ZXN0b3JzIHdoaWxlIHNlcnZlciAqLworI2VuZGlmIC8qIEFNSUdB ICovCisjZW5kaWYgLyogTk9YRkVSICovCisgICAgICAgIH0KKyAgICB9CisjaWZuZGVmIE5PRElB TAorICAgIGRpYWxzdGEgPSBESUFfVU5LOworI2VuZGlmIC8qIE5PRElBTCAqLworI2lmZGVmIExP Q1VTCisgICAgaWYgKGF1dG9sb2N1cykgeworICAgICAgICBzZXRsb2N1cygxLDEpOworICAgIH0K KyNlbmRpZiAvKiBMT0NVUyAqLworICAgIHJldHVybihzdWNjZXNzID0gMSk7Cit9CisjZW5kaWYg LyogTkVUQ09OTiAqLworCisvKiBjIHggXyBzIGUgciBpIGEgbCAgLS0gIE1ha2UgYSBzZXJpYWwg Y29ubmVjdGlvbiAqLworCisvKgorICBDYWxsIHdpdGg6CisgICAgZGV2aWNlICA9IHN0cmluZyBw b2ludGVyIHRvIGRldmljZSBuYW1lLgorICAgIGN4ICAgICAgPSAxIHRvIGF1dG9tYXRpY2FsbHkg ZW50ZXIgQ29ubmVjdCBtb2RlLCAwIG90aGVyd2lzZS4KKyAgICBzeCAgICAgID0gMSB0byBhdXRv bWF0aWNhbGx5IGVudGVyIFNlcnZlciBtb2RlLCAwIG90aGVyd2lzZS4KKyAgICBzaHIgICAgID0g MSBpZiBkZXZpY2Ugc2hvdWxkIGJlIG9wZW5lZCBpbiBzaGFyZWFibGUgbW9kZSwgMCBvdGhlcndp c2UuCisgICAgZmxhZyAgICA9IGlmIG5vIGRldiBuYW1lIGdpdmVuOiAxID0gY2xvc2UgY3VycmVu dCBjb25uZWN0aW9uLCAwID0gcmVzdW1lLgorICAgIGd1aSAgICAgPSAxIGlmIGNhbGxlZCBmcm9t IEdVSSBkaWFsb2csIDAgb3RoZXJ3aXNlLgorICBSZXR1cm5zOgorICAgIDEgb24gc3VjY2Vzcwor ICAgIDAgb24gZmFpbHVyZSBhbmQgbm8gbWVzc2FnZSBwcmludGVkLCBzbG1zZyBzZXQgdG8gZmFp bHVyZSBtZXNzYWdlLgorICAgLTkgb24gZmFpbHVyZSBhbmQgbWVzc2FnZSBwcmludGVkLCBkaXR0 by4KKyovCisKKy8qIHRoZXNlIGFyZSBiaXQgZmxhZ3MgKi8KKyNkZWZpbmUgQ1hfVEFQSSAxCisj ZGVmaW5lIENYX1BQUCAgMgorI2RlZmluZSBDWF9TTElQIDQKKworaW50CisjaWZkZWYgQ0tfQU5T SUMKK2N4X3NlcmlhbChjaGFyICpkZXZpY2UsIAorICAgICAgICAgIGludCBjeCwgaW50IHN4LCBp bnQgc2hyLCBpbnQgZmxhZywgaW50IGd1aSwgaW50IHNwZWNpYWwpCisjZWxzZSAvKiBDS19BTlNJ QyAqLworY3hfc2VyaWFsKGRldmljZSwgY3gsIHN4LCBzaHIsIGZsYWcsIGd1aSwgc3BlY2lhbCkK KyAgICBjaGFyICogZGV2aWNlOyBpbnQgY3gsIHN4LCBzaHIsIGZsYWcsIGd1aSwgc3BlY2lhbDsg CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIGN4X3NlcmlhbCAqLyB7CisgICAgaW50IGksIG4s IHgsIHksIG1zZzsKKyAgICBpbnQgX2xvY2FsID0gLTE7CisgICAgY2hhciAqczsKKworICAgIGRl YnVnKEYxMTAsImN4X3NlcmlhbCBkZXZpY2UiLGRldmljZSwwKTsKKyAgICBzID0gZGV2aWNlOwor ICAgIG1zZyA9IChndWkgPT0gMCkgJiYgbXNnZmxnOwkJLyogV2hldGhlciB0byBwcmludCBtZXNz YWdlcyAqLworICAgIHN1Y2Nlc3MgPSAwOworCisjaWZuZGVmIE5PRElBTAorICAgIGRpYWxzdGEg PSBESUFfVU5LOworI2VuZGlmIC8qIE5PRElBTCAqLworICAgIGRlYnVnKEYxMDEsImN4X3Nlcmlh bCBtZG10eXAiLCIiLG1kbXR5cCk7CisgICAgaWYgKGNsc2tjb25ueCgxKSA8IDApCQkvKiBDbG9z ZSB0aGUgS2VybWl0IGNvbm5lY3Rpb24gKi8KKyAgICAgIHJldHVybihzdWNjZXNzID0gMCk7Cisg ICAgaWYgKCpzKSB7CQkJCS8qIFRoZXkgZ2F2ZSBhIGRldmljZSBuYW1lICovCisJX2xvY2FsID0g LTE7CQkJLyogTGV0IHR0b3BlbiBkZWNpZGUgYWJvdXQgaXQgKi8KKyAgICB9IGVsc2UgewkJCQkv KiBUaGV5IGp1c3Qgc2FpZCAic2V0IGxpbmUiICovCisJcyA9IGRmdHR5OwkJCS8qIHNvIGdvIGJh Y2sgdG8gbm9ybWFsIHR0eSAqLworCV9sb2NhbCA9IGRmbG9jOwkJCS8qIGFuZCBtb2RlLiAqLwor ICAgIH0KKyNpZmRlZiBWTVMKKyAgICB7CisJZXh0ZXJuIGludCBva190b19zaGFyZTsKKwlva190 b19zaGFyZSA9IHNocjsKKyAgICB9CisjZW5kaWYgLyogVk1TICovCisKKyNpZmRlZiBPUzIgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBNdXN0IHdhaXQgdW50aWwgYWZ0ZXIgdHRjbG9z KCkgKi8KKyNpZmRlZiBOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0byBjaGFu Z2UgdGhlc2Ugc2V0dGluZ3MgICAgICAgKi8KKyNpZmRlZiBDS19UQVBJCisgICAgdHR0YXBpID0g c3BlY2lhbCAmIENYX1RBUEk7CisjZW5kaWYgLyogQ0tfVEFQSSAqLworI2Vsc2UKKyAgICB0dHNs aXAgPSBzcGVjaWFsICYgQ1hfU0xJUDsKKyAgICB0dHBwcCAgPSBzcGVjaWFsICYgQ1hfUFBQOwor I2VuZGlmIC8qIE5UICovCisgICAgdHRzaGFyZSA9IHNocjsJCQkvKiBTaGFyZWFibGUgZGV2aWNl ID8gKi8KKyAgICBkZWJ1ZyhGMTEwLCJPUzIgU0VUIFBPUlQgZmluYWwgcyIscywiIik7CisjZW5k aWYgLyogT1MyICovCisKKyAgICAvKiBPcGVuIHRoZSBuZXcgbGluZSAqLyAgICAgICAgCisKKyAg ICBja3N0cm5jcHkodHRuYW1lLHMsVFROQU1MRU4pOworICAgIGlmICgoeSA9IHR0b3BlbihzLCZf bG9jYWwsbWRtdHlwLGNkdGltbykpID4gLTEpIHsKKwljeHR5cGUgPSAobWRtdHlwID4gMCkgPyBD WFRfTU9ERU0gOiBDWFRfRElSRUNUOworI2lmbmRlZiBOT0RJQUwKKwlkaWFsc3RhID0gRElBX1VO SzsKKyNpZmRlZiBDS19UQVBJCisJLyogaWYgdGhlIGxpbmUgaXMgYSB0YXBpIGRldmljZSwgdGhl biB3ZSBuZWVkIHRvIGF1dG8tZXhlY3V0ZSAqLworCS8qIFNFVCBNT0RFTSBUWVBFIFRBUEkgLSB3 aGljaCB3ZSBkbyB0aGUgZXF1aXZhbGVudCBvZiBoZXJlLiAgKi8KKwlpZiAodHR0YXBpKSB7CisJ ICAgIGV4dGVybiBpbnQgdXNlcm1kbTsKKwkgICAgdXNlcm1kbSA9IDA7CisJICAgIGluaXRtZG0o MzgpOwkJLyogRnJvbSBja3VkaWEuYyBuX1RBUEkgPT0gMzggKi8KKwl9CisjZW5kaWYgLyogQ0tf VEFQSSAqLworI2VuZGlmIC8qIE5PRElBTCAqLworCXN1Y2Nlc3MgPSAxOworICAgIH0gZWxzZSB7 CQkJCS8qIEZhaWxlZCAqLworI2lmZGVmIE9TMk9OTFkKKwlpZiAoIXN0cmNtcChzLGRmdHR5KSkg ICAvKiBEbyBub3QgZ2VuZXJhdGUgYW4gZXJyb3Igd2l0aCBkZnR0eSAqLworCSAgOworCWVsc2Ug aWYgKHkgPT0gLTYgJiYgdHRzbGlwKSB7CisJICAgIG1ha2VzdHIoJnNsbXNnLCJDYW4ndCBhY2Nl c3MgU0xJUCBkcml2ZXIiKTsKKwkgICAgaWYgKG1zZykgcHJpbnRmKCI/JXNcbiIsc2xtc2cpOwor CX0gZWxzZSBpZiAoeSA9PSAtNiAmJiB0dHBwcCkgeworCSAgICBtYWtlc3RyKCZzbG1zZywiQ2Fu J3QgYWNjZXNzIFBQUCBkcml2ZXIiKTsKKwkgICAgaWYgKG1zZykgcHJpbnRmKCI/JXNcbiIsc2xt c2cpOworCX0gZWxzZQorI2VuZGlmIC8qIE9TMk9OTFkgKi8KKwkgIGlmICh5ID09IC0yKSB7CisJ ICAgICAgbWFrZXN0cigmc2xtc2csIlRpbWVkIG91dCAtIG5vIGNhcnJpZXIiKTsKKwkgICAgICBp ZiAobXNnKSB7CisJCSAgcHJpbnRmKCI/JXNcbiIsc2xtc2cpOworCQkgIGlmIChoaW50cykgewor CQkgICAgICBwcmludGYoIlxuKioqKioqKioqKioqKioqKioqKioqKioqKlxuIik7CisJCSAgICAg IHByaW50ZigKKwkJICAgICAgICJISU5UIChVc2UgU0VUIEhJTlRTIE9GRiB0byBzdXBwcmVzcyBm dXR1cmUgaGludHMpOlxuIik7CisJCSAgICAgIHByaW50ZigKKwkJCSAgIlRyeSBTRVQgQ0FSUklF UiBPRkYgYW5kIFNFVCBMSU5FIGFnYWluLCBvciBlbHNlXG4iKTsKKwkJICAgICAgcHJpbnRmKCJT RVQgTU9ERU0sIFNFVCBMSU5FLCBhbmQgdGhlbiBESUFMLlxuIik7CisJCSAgICAgIHByaW50Zigi KioqKioqKioqKioqKioqKioqKioqKioqKlxuXG4iKTsKKwkJICB9CisJICAgICAgfQorCSAgfSBl bHNlIGlmICh5ID09IC0zKSB7CisJICAgICAgbWFrZXN0cigmc2xtc2csIkFjY2VzcyB0byBsb2Nr IGRlbmllZCIpOworCSAgICAgIGlmIChtc2cpIHsKKyNpZmRlZiBVTklYCisJCSAgcHJpbnRmKAor CQkgICAiU29ycnksIHdyaXRlIGFjY2VzcyB0byBVVUNQIGxvY2tmaWxlIGRpcmVjdG9yeSBkZW5p ZWQuXG4iKTsKKyNpZm5kZWYgTk9ISU5UUworCQkgIGlmIChoaW50cykgeworCQkgICAgICBwcmlu dGYoIlxuKioqKioqKioqKioqKioqKioqKioqKioqKlxuIik7CisJCSAgICAgIHByaW50ZigKKwkJ ICAgICAgICJISU5UIChVc2UgU0VUIEhJTlRTIE9GRiB0byBzdXBwcmVzcyBmdXR1cmUgaGludHMp OlxuIik7CisJCSAgICAgIHByaW50ZigKKwkgICJQbGVhc2UgcmVhZCB0aGUgaW5zdGFsbGF0aW9u IGluc3RydWN0aW9ucyBmaWxlLCAlc2NrdWlucy50eHQsXG4iLAorCSAgICAgICAgICAgICAgICAg ICAgIGtfaW5mb19kaXIgPyBrX2luZm9fZGlyIDogIiIKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKTsKKwkJICAgICAgcHJpbnRmKAorCSAgIm9yIHRoZSBVTklYIGFwcGVuZGl4IG9mIHRo ZSBtYW51YWwsIFwiVXNpbmcgQy1LZXJtaXRcIlxuIgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICApOworCQkgICAgICBwcmludGYoCisgICAgICAgICAgIm9yIHZpc2l0IGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCBcbiIKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKTsKKwkJICAgICAgcHJpbnRmKCIqKioqKioqKioqKioqKioqKioqKioqKioqXG5c biIpOworCQkgIH0KKyNlbmRpZiAvKiBOT0hJTlRTICovCisjZWxzZQorCQkgIHByaW50ZigiU29y cnksIGFjY2VzcyB0byBsb2NrIGRlbmllZDogJXNcbiIscyk7CisjZW5kaWYgLyogVU5JWCAqLwor CSAgICAgIH0KKwkgIH0gZWxzZSBpZiAoeSA9PSAtNCkgeworCSAgICAgIG1ha2VzdHIoJnNsbXNn LCJBY2Nlc3MgdG8gZGV2aWNlIGRlbmllZCIpOworCSAgICAgIGlmIChtc2cpIHsKKwkJICBwcmlu dGYoIlNvcnJ5LCBhY2Nlc3MgdG8gZGV2aWNlIGRlbmllZDogJXNcbiIscyk7CisjaWZkZWYgVU5J WAorI2lmbmRlZiBOT0hJTlRTCisJCSAgaWYgKGhpbnRzKSB7CisJCSAgICAgIHByaW50ZigiXG4q KioqKioqKioqKioqKioqKioqKioqKioqXG4iKTsKKwkJICAgICAgcHJpbnRmKAorCQkgICAgICAi SElOVCAoVXNlIFNFVCBISU5UUyBPRkYgdG8gc3VwcHJlc3MgZnV0dXJlIGhpbnRzKTpcbiIpOwor CQkgICAgICBwcmludGYoCisJICAgICJQbGVhc2UgcmVhZCB0aGUgaW5zdGFsbGF0aW9uIGluc3Ry dWN0aW9ucyBmaWxlLCAlc2NrdWlucy50eHQsXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBrX2luZm9fZGlyID8ga19pbmZvX2RpciA6ICIiCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICk7CisJCSAgICAgIHByaW50ZigKKwkgICAgIm9yIHRoZSBVTklYIGFwcGVuZGl4IG9m IHRoZSBtYW51YWwsIFwiVXNpbmcgQy1LZXJtaXRcIi5cbiIKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKTsKKwkJICAgICAgcHJpbnRmKCIqKioqKioqKioqKioqKioqKioqKioqKioqXG5c biIpOworCQkgIH0KKyNlbmRpZiAvKiBOT0hJTlRTICovCisjZW5kaWYgLyogVU5JWCAqLworCSAg ICAgIH0KKwkgIH0gZWxzZSBpZiAoeSA9PSAtNSkgeworCSAgICAgIG1ha2VzdHIoJnNsbXNnLCJE ZXZpY2UgaXMgaW4gdXNlIG9yIHVuYXZhaWxhYmxlIik7CisJICAgICAgaWYgKG1zZykKKyNpZmRl ZiBWTVMKKwkJcHJpbnRmKAorCQkgICJTb3JyeSwgZGV2aWNlIGlzIGluIHVzZSBvciBvdGhlcndp c2UgdW5hdmFpbGFibGU6ICVzXG4iLHMpOworI2Vsc2UKKwkgICAgICBwcmludGYoIlNvcnJ5LCBk ZXZpY2UgaXMgaW4gdXNlOiAlc1xuIixzKTsKKyNlbmRpZiAvKiBWTVMgKi8KKwkgIH0gZWxzZSB7 CQkJLyogT3RoZXIgZXJyb3IuICovCisJICAgICAgbWFrZXN0cigmc2xtc2csIkRldmljZSBvcGVu IGZhaWxlZCIpOworCSAgICAgIGlmICgKKyNpZmRlZiBWTVMKKwkJICAxCisjZWxzZQorCQkgIGVy cm5vCisjZW5kaWYgLyogVk1TICovCisJCSAgKSB7CisJCSAgaW50IHg7CQkvKiBGaW5kIGEgc2Fm ZSwgbG9uZyBidWZmZXIgKi8KKwkJICBtYWtlc3RyKCZzbG1zZyxja19lcnJzdHIoKSk7CisjaWZu ZGVmIFZNUworCQkgIGRlYnVnKEYxMTEsImN4X3NlcmlhbCBzZXJpYWwgZXJybm8iLHNsbXNnLGVy cm5vKTsKKyNlbmRpZiAvKiBWTVMgKi8KKwkJICBpZiAobXNnKQorCQkgICAgcHJpbnRmKCJDb25u ZWN0aW9uIHRvICVzIGZhaWxlZDogJXNcbiIscyxzbG1zZyk7CisJICAgICAgfSBlbHNlIGlmICht c2cpCisJCXByaW50ZigiU29ycnksIGNhbid0IG9wZW4gY29ubmVjdGlvbjogJXNcbiIscyk7CisJ ICB9CisgICAgfQorICAgIG5ldHdvcmsgPSAwOwkJCS8qIE5vIG5ldHdvcmsgY29ubmVjdGlvbiBh Y3RpdmUgKi8KKyAgICBzcGVlZCA9IHR0Z3NwZCgpOworICAgIGlmICghc3VjY2VzcykgeworICAg ICAgICBsb2NhbCA9IGRmbG9jOyAgICAgICAgICAgICAgICAgIC8qIEdvIGJhY2sgdG8gbm9ybWFs ICovCisjaWZuZGVmIE1BQworICAgICAgICBja3N0cm5jcHkodHRuYW1lLGRmdHR5LFRUTkFNTEVO KTsgLyogUmVzdG9yZSBkZWZhdWx0IHR0eSBuYW1lICovCisjZW5kaWYgLyogTUFDICovCisgICAg ICAgIGhhdmVsaW5lID0gMDsKKyAgICAgICAgaWYgKG1kbXR5cCA8IDApIHsgICAgICAgICAgICAg ICAvKiBTd2l0Y2hpbmcgZnJvbSBuZXQgdG8gYXN5bmM/ICovCisgICAgICAgICAgICBpZiAobWRt c2F2ID4gLTEpICAgICAgICAgICAgLyogUmVzdG9yZSBtb2RlbSB0eXBlIGZyb20gbGFzdCAqLwor ICAgICAgICAgICAgICBtZG10eXAgPSBtZG1zYXY7ICAgICAgICAgIC8qIFNFVCBNT0RFTSBjb21t YW5kLCBpZiBhbnkuICovCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIG1kbXR5cCA9 IDA7CisgICAgICAgICAgICBtZG1zYXYgPSAtMTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4o bXNnID8gLTkgOiAwKTsJCS8qIFJldHVybiBmYWlsdXJlICovCisgICAgfQorICAgIGlmIChfbG9j YWwgPiAtMSkKKyAgICAgIGxvY2FsID0gX2xvY2FsOwkJCS8qIE9wZW5lZCBvaywgc2V0IGxvY2Fs L3JlbW90ZS4gKi8KKyAgICBtYWtlc3RyKCZzbG1zZyxOVUxMKTsJCS8qIEVyYXNlIFNFVCBMSU5F IG1lc3NhZ2UgKi8KKyAgICBja3N0cm5jcHkodHRuYW1lLHMsVFROQU1MRU4pOyAgICAgICAvKiBD b3B5IG5hbWUgaW50byByZWFsIHBsYWNlLiAqLworICAgIGRlYnVnKEYxMTAsImN4X3NlcmlhbCBv ayIsdHRuYW1lLDApOworI2lmbmRlZiBOT1hGRVIKKyAgICBpZiAoKHJlbGlhYmxlICE9IFNFVF9P RkYgfHwgIXNldHJlbGlhYmxlKSkgLyogQXNzdW1lIG5vdCByZWxpYWJsZS4gKi8KKyAgICAgIHJl bGlhYmxlID0gU0VUX09GRjsKKyNlbmRpZiAvKiBOT1hGRVIgKi8KKworICB4Y3hfc2VyaWFsOgor ICAgIHNldGZsb3coKTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNldCBhcHByb3ByaWF0 ZSBmbG93IGNvbnRyb2wgKi8KKyAgICBoYXZlbGluZSA9IDE7CisjaWZkZWYgQ0tMT0dESUFMCisg ICAgICBkb2xvZ2xpbmUoKTsKKyNlbmRpZiAvKiBDS0xPR0RJQUwgKi8KKworI2lmbmRlZiBOT1NQ TAorICAgIGlmIChsb2NhbCkgeworICAgICAgICBpZiAobm1hYykgeyAgICAgICAgICAgICAgICAg ICAgIC8qIEFueSBtYWNyb3MgZGVmaW5lZD8gKi8KKyAgICAgICAgICAgIGludCBrOyAgICAgICAg ICAgICAgICAgICAgICAvKiBZZXMgKi8KKyAgICAgICAgICAgIGsgPSBtbG9vayhtYWN0YWIsIm9u X29wZW4iLG5tYWMpOyAgIC8qIExvb2sgdGhpcyB1cCAqLworICAgICAgICAgICAgaWYgKGsgPj0g MCkgeyAgICAgICAgICAgICAgICAgICAgICAgLyogSWYgZm91bmQsICovCisgICAgICAgICAgICAg ICAgaWYgKGRvZG8oayx0dG5hbWUsMCkgPiAtMSkgICAgICAvKiBzZXQgaXQgdXAsICovCisgICAg ICAgICAgICAgICAgICBwYXJzZXIoMSk7ICAgICAgICAgICAgICAgICAgICAvKiBhbmQgZXhlY3V0 ZSBpdCAqLworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorI2VuZGlmIC8qIE5PU1BM ICovCisKKyAgICBpZiAobG9jYWwgJiYgKGN4IHx8IHN4KSkgeyAgICAgICAgICAvKiAvQ09OTkVD VCBvciAvU0VSVkVSIHN3aXRjaCBnaXZlbiAqLworICAgICAgICBleHRlcm4gaW50IGNhcnJpZXI7 CisgICAgICAgIGlmIChjYXJyaWVyICE9IENBUl9PRkYpIHsJLyogTG9va2luZyBmb3IgY2Fycmll cj8gKi8KKyAgICAgICAgICAgIC8qIE9wZW4oKSB0dXJucyBvbiBEVFIgLS0gd2FpdCB1cCB0byBh IHNlY29uZCBmb3IgQ0QgdG8gY29tZSB1cCAqLworICAgICAgICAgICAgaW50IGksIHg7CisgICAg ICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgeyAgLyogV0FJVCAxIENELi4uICovCisg ICAgICAgICAgICAgICAgeCA9IHR0Z21kbSgpOworICAgICAgICAgICAgICAgIGlmICh4IDwgMCB8 fCB4ICYgQk1fRENEKQorICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg bXNsZWVwKDEwMCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGN4KSB7 ICAgICAgICAgICAgICAgICAgICAgICAvKiAvQ09OTkVDVCAqLworICAgICAgICAgICAgLyogQ29t bWFuZCB3YXMgY29uZmlybWVkIHNvIHdlIGNhbiBwcmUtcG9wIGNvbW1hbmQgbGV2ZWwuICovCisg ICAgICAgICAgICAvKiBUaGlzIGlzIHNvIENPTk5FQ1QgbW9kdWxlIHdvbid0IHRoaW5rIHdlJ3Jl IGV4ZWN1dGluZyBhICovCisgICAgICAgICAgICAvKiBzY3JpcHQgaWYgQ09OTkVDVCB3YXMgdGhl IGZpbmFsIGNvbW1hbmQgaW4gdGhlIHNjcmlwdC4gKi8KKworICAgICAgICAgICAgaWYgKGNtZGx2 bCA+IDApCisgICAgICAgICAgICAgIHByZXBvcCgpOworI2lmbmRlZiBOT0RJQUwKKyAgICAgICAg ICAgIGRpYWxzdGEgPSBESUFfVU5LOworI2VuZGlmIC8qIE5PRElBTCAqLworI2lmZGVmIExPQ1VT CisgICAgICAgICAgICBpZiAoYXV0b2xvY3VzKSB7CisgICAgICAgICAgICAgICAgc2V0bG9jdXMo MSwxKTsKKyAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBMT0NVUyAqLworICAgICAgICAgICAgc3Vj Y2VzcyA9IGRvY29uZWN0KDAsIGNtZGx2bCA9PSAwID8gMSA6IDApOworICAgICAgICAgICAgaWYg KHR0Y2hrKCkgPCAwKQorICAgICAgICAgICAgICBkb2xvZ2VuZCgpOworICAgICAgICAgICAgcmV0 dXJuKHN1Y2Nlc3MpOworI2lmbmRlZiBOT1hGRVIKKyAgICAgICAgfSBlbHNlIGlmIChzeCkgeyAg ICAgICAgICAgICAgICAvKiAvU0VSVkVSICovCisgICAgICAgICAgICBzc3RhdGUgPSAneCc7Cisj aWZkZWYgTUFDCisgICAgICAgICAgICB3aGF0ID0gV19SRUNWOworICAgICAgICAgICAgc2NyY3Jl YXRlKCk7CisjZW5kaWYgLyogTUFDICovCisgICAgICAgICAgICBpZiAobG9jYWwpIGRpc3BsYSA9 IDE7CisjaWZkZWYgQU1JR0EKKyAgICAgICAgICAgIHJlcW9mZigpOyAgICAgICAgICAgICAgICAg ICAvKiBObyBET1MgcmVxdWVzdG9ycyB3aGlsZSBzZXJ2ZXIgKi8KKyNlbmRpZiAvKiBBTUlHQSAq LworI2VuZGlmIC8qIE5PWEZFUiAqLworICAgICAgICB9CisgICAgfQorI2lmbmRlZiBOT0RJQUwK KyAgICBkaWFsc3RhID0gRElBX1VOSzsKKyNlbmRpZiAvKiBOT0RJQUwgKi8KKyNpZmRlZiBMT0NV UworICAgIGlmIChhdXRvbG9jdXMpIHsKKyAgICAgICAgc2V0bG9jdXMoMSwxKTsKKyAgICB9Cisj ZW5kaWYgLyogTE9DVVMgKi8KKyAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworfQorCisKKy8qIFMg RSBUIEwgSSBOIC0tIHBhcnNlIG5hbWUgb2YgYW5kIHRoZW4gb3BlbiBjb21tdW5pY2F0aW9uIGRl dmljZS4gKi8KKy8qCisgIENhbGwgd2l0aDoKKyAgICB4eCA9PSBYWUxJTkUgZm9yIGEgc2VyaWFs ICh0dHkpIGxpbmUsIFhZSE9TVCBmb3IgYSBuZXR3b3JrIGhvc3QsCisgICAgenogPT0gMCBtZWFu cyBpZiB1c2VyIGRvZXNuJ3QgZ2l2ZSBhIGRldmljZSBuYW1lLCBjb250aW51ZSBjdXJyZW50Cisg ICAgICAgICAgICBhY3RpdmUgY29ubmVjdGlvbiAoaWYgYW55KTsKKyAgICB6eiAhPSAwIG1lYW5z IGlmIHVzZXIgZG9lc24ndCBnaXZlIGEgZGV2aWNlIG5hbWUsIHRoZW4gY2xvc2UgdGhlCisgICAg ICAgICAgICBjdXJyZW50IGNvbm5lY3Rpb24gYW5kIHJlc3RvcmUgdGhlIGRlZmF1bHQgY29tbXVu aWNhdGlvbiBkZXZpY2UuCisgICAgZmMgPT0gMCB0byBqdXN0IG1ha2UgdGhlIGNvbm5lY3Rpb24s IDEgdG8gYWxzbyBDT05ORUNUIChlLmcuICJ0ZWxuZXQiKS4KKyovCitpbnQKK3NldGxpbih4eCwg enosIGZjKSAKKyAgICBpbnQgeHgsIHp6LCBmYzsgCit7CisgICAgZXh0ZXJuIGNoYXIgcHdidWZb XSwgKiBnX3Bzd2Q7CisgICAgZXh0ZXJuIGludCBwd2ZsZywgcHdjcnlwdCwgZ19wZmxnLCBnX3Bj cHQsIG5vbG9jYWw7CisgICAgaW50IHdhaXQ7CisgICAgLyogaW50IHRuX3dhaXRfc3Y7ICovCisg ICAgaW50IG15bmV0OworICAgIGludCBfbG9jYWwgPSAtMTsKKyAgICBpbnQgYywgaSwgaGF2ZXN3 aXRjaCA9IDA7CisgICAgaW50IGhhdmV1c2VyID0gMDsKKyAgICBpbnQgZ2V0dmFsID0gMDsKKyAg ICBpbnQgd2lsZCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAvKiBGaWxlc3BlYyBoYXMgd2ls ZGNhcmRzICovCisgICAgaW50IGN4ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ29u bmVjdCBhZnRlciAqLworICAgIGludCBzeCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgIC8q IEJlY29tZSBzZXJ2ZXIgYWZ0ZXIgKi8KKyAgICBpbnQgYV90eXBlID0gLTE7ICAgICAgICAgICAg ICAgICAgICAvKiBBdXRoZW50aWNhdGlvbiB0eXBlICovCisgICAgaW50IGVfdHlwZSA9IC0xOyAg ICAgICAgICAgICAgICAgICAgLyogVGVsbmV0IC9FTkNSWVBUIHR5cGUgKi8KKyNpZmRlZiBDS19F TkNSWVBUSU9OCisgICAgaW50IGVuY3J5cHQgPSAwOyAgICAgICAgICAgICAgICAgICAgLyogRW5j cnlwdGVkPyAqLworI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KKyAgICBpbnQgc2hyID0gMDsg ICAgICAgICAgICAgICAgICAgICAgICAvKiBTaGFyZSBzZXJpYWwgZGV2aWNlICovCisgICAgaW50 IGNvbmZpcm1lZCA9IDA7ICAgICAgICAgICAgICAgICAgLyogQ29tbWFuZCBoYXMgYmVlbiBlbnRl cmVkICovCisgICAgc3RydWN0IEZEQiBzdywgdHgsIG54OworI2lmZGVmIE9TMgorICAgIHN0cnVj dCBGREIgZmw7CisjZW5kaWYgLyogT1MyICovCisKKyAgICBjaGFyICogc3M7CisjaWZkZWYgVENQ U09DS0VUCisgICAgaW50IHJhd2ZsZyA9IDA7CisjZW5kaWYgLyogVENQU09DS0VUICovCisKKyAg ICBjaGFyIHNydmJ1ZltTUlZCVUZTSVorMV07CisKKyNpZmRlZiBPUzIKKyNpZmRlZiBOVAorICAg IGludCB4eHRhcGkgPSAwOworI2Vsc2UKKyAgICBpbnQgeHhzbGlwID0gMCwgeHhwcHAgPSAwOwor I2VuZGlmIC8qIE5UICovCisjZW5kaWYgLyogT1MyICovCisKKyAgICBpbnQgZG9zc2ggPSAwOwor CisgICAgZGVidWcoRjEwMSwic2V0bGluIGZjIiwiIixmYyk7CisgICAgZGVidWcoRjEwMSwic2V0 bGluIHp6IiwiIix6eik7CisgICAgZGVidWcoRjEwMSwic2V0bGluIHh4IiwiIix4eCk7CisKKyNp ZmRlZiBTU0hDTUQKKyAgICBpZiAoeHggPT0gWFhTU0gpIHsgICAgICAgICAgICAgICAgICAvKiBT U0ggYmVjb21lcyBQVFkgU1NIIC4uLiAqLworICAgICAgICBkb3NzaCA9IDE7CisgICAgICAgIHh4 ID0gWFlIT1NUOworICAgIH0gZWxzZSBpZiAoIWNrc3RyY21wKCJzc2ggIixsaW5lLDQsMCkpIHsg LyogMjAxMC8wMy8wMSAqLworICAgICAgICBkb3NzaCA9IDE7CisgICAgICAgIHh4ID0gWFlIT1NU OworICAgIH0KKyAgICBkZWJ1ZyhGMTAxLCJzZXRsaW4gZG9zc2giLCIiLGRvc3NoKTsKKyNlbmRp ZiAvKiBTU0hDTUQgKi8KKworI2lmZGVmIFROQ09ERQorICAgIC8qIHRuX3dhaXRfc3YgPSB0bl93 YWl0X2ZsZzsgKi8KKyAgICB3YWl0ID0gdG5fd2FpdF9mbGc7CisjZWxzZQorICAgIC8qIHRuX3dh aXRfc3YgPSAwOyAqLworICAgIHdhaXQgPSAwOworI2VuZGlmIC8qIFROQ09ERSAqLworCisgICAg bXluZXQgPSBuZXR0eXBlOworCisgICAgaWYgKG5vbG9jYWwpIHsKKyAgICAgICAgbWFrZXN0cigm c2xtc2csIk1ha2luZyBjb25uZWN0aW9ucyBpcyBkaXNhYmxlZCIpOworICAgICAgICBwcmludGYo Ij9Tb3JyeSwgbWFraW5nIGNvbm5lY3Rpb25zIGlzIGRpc2FibGVkXG4iKTsKKyAgICAgICAgcmV0 dXJuKC05KTsKKyAgICB9CisgICAgaWYgKG5ldHNhdmUgPiAtMSkKKyAgICAgIG5ldHR5cGUgPSBu ZXRzYXZlOworCisgICAgaWYgKGZjICE9IDAgfHwgenogPT0gMCkgICAgICAgICAgICAgLyogUHJl c2V0IC9DT05ORUNUIHN3aXRjaCAqLworICAgICAgY3ggPSAxOworCisgICAgZGVidWcoRjEwMSwi c2V0bGluIGN4IiwiIixjeCk7CisKKyAgICAqc3J2YnVmID0gTlVMOworCisgICAgbGluZVswXSA9 IE5VTDsKKyAgICBzID0gbGluZTsKKworI2lmZGVmIE5FVENPTk4KKyNpZmRlZiBDS19TRUNVUklU WQorICAgIGlmICh0bXBzdHJpbmcpCisgICAgICAgIG1ha2VzdHIoJnRtcHN0cmluZyxOVUxMKTsK KyNlbmRpZiAvKiBDS19TRUNVUklUWSAqLworICAgIGlmICh0bXB1c3JpZCkKKyAgICAgICAgbWFr ZXN0cigmdG1wdXNyaWQsTlVMTCk7CisjZW5kaWYgLyogTkVUQ09OTiAqLworCisgICAgYXV0b2Zs b3cgPSAxOyAgICAgICAgICAgICAgICAgICAgICAgLyogRW5hYmxlIGF1dG9tYXRpYyBmbG93IHNl dHRpbmcgKi8KKworICAgIGlmICh4eCA9PSBYWUhPU1QpIHsgICAgICAgICAgICAgICAgIC8qIFNF VCBIT1NUIDxob3N0bmFtZT4gKi8KKyNpZm5kZWYgTkVUQ09OTgorICAgICAgICBtYWtlc3RyKCZz bG1zZywiTmV0d29yayBjb25uZWN0aW9ucyBub3Qgc3VwcG9ydGVkIik7CisgICAgICAgIHByaW50 ZigiPyVzXG4iLHNsbXNnKTsKKyAgICAgICAgcmV0dXJuKC05KTsKKyNlbHNlIC8qIE5FVENPTk4g Ki8KKyNpZm5kZWYgTk9QVVNICisgICAgICAgIGlmICgobXluZXQgPT0gTkVUX0NNRCB8fCBteW5l dCA9PSBORVRfUFRZIHx8IGRvc3NoKSAmJiBub3B1c2gpIHsKKyAgICAgICAgICAgIG1ha2VzdHIo JnNsbXNnLCJBY2Nlc3MgdG8gZXh0ZXJuYWwgY29tbWFuZHMgaXMgZGlzYWJsZWQiKTsKKyAgICAg ICAgICAgIHByaW50ZigiP1NvcnJ5LCBhY2Nlc3MgdG8gZXh0ZXJuYWwgY29tbWFuZHMgaXMgZGlz YWJsZWRcbiIpOworICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgfQorI2VuZGlmIC8q IE5PUFVTSCAqLworCisjaWZkZWYgU1NIQ01ECisgICAgICAgIGlmIChkb3NzaCkgeyAgICAgICAg ICAgICAgICAgICAgLyogU1NIIGNvbm5lY3Rpb24gdmlhIHB0eSAqLworICAgICAgICAgICAgaW50 IGs7CisJICAgIGV4dGVybiBpbnQgdHR5ZmQ7CQkvKiAyMDEwLzAzLzAxICovCisgICAgICAgICAg ICBrID0gY2tzdHJuY3B5KGxpbmUsIHNzaGNtZCA/IHNzaGNtZCA6IGRlZnNzaGNtZCwgTElOQlVG U0laKTsKKyAgICAgICAgICAgIGRlYnVnKEYxMTEsInNldGxpbiBzc2hjbWQgMSIsbGluZSxrKTsK KyAgICAgICAgICAgIGlmICgoeCA9IGNtdHh0KCJPcHRpb25hbCBzd2l0Y2hlcyBhbmQgaG9zdG5h bWUiLCIiLCZzLHh4c3RyaW5nKSk8MCkKKyAgICAgICAgICAgICAgcmV0dXJuKHgpOworCisgICAg ICAgICAgICAvKiAyMDEwLTAzLTMwICovCisJICAgIGlmICghKnMgJiYgdHR5ZmQgPCAwICYmICFj a3N0cmNtcCgic3NoICIsdHRuYW1lLDQsMCkpIHsgCisJCXggPSBja3N0cm5jcHkobGluZSx0dG5h bWUsTElOQlVGU0laKTsKKwkgICAgfSBlbHNlIHsKKwkJaWYgKCEqcykgeworCQkgICAgcHJpbnRm KCI/U1NIIHRvIHdoZXJlP1xuIik7CisJCSAgICByZXR1cm4oLTkpOworCQl9CisJCWlmIChrIDwg TElOQlVGU0laKSB7CisJCSAgICBsaW5lW2srK10gPSBTUDsKKwkJICAgIGxpbmVba10gPSBOVUw7 CisJCSAgICBkZWJ1ZyhGMTExLCJzZXRsaW4gc3NoY21kIDIiLGxpbmUsayk7CisJCX0gaWYgKGsg PCBMSU5CVUZTSVopIHsKKwkJICAgIGNrc3RybmNweSgmbGluZVtrXSxzLExJTkJVRlNJWi1rKTsK KwkJICAgIGRlYnVnKEYxMTEsInNldGxpbiBzc2hjbWQgMyIsbGluZSxrKTsKKwkJfSBlbHNlIHsK KwkJICAgIHByaW50ZigiP1RvbyBsb25nXG4iKTsKKwkJICAgIHJldHVybigtOSk7CisJCX0KKwkg ICAgfQorCSAgICB4ID0gY3hfbmV0KCBORVRfUFRZLCAgICAgICAgICAgICAgICAvKiBuZXR3b3Jr IHR5cGUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAg IC8qIHByb3RvY29sIChub3QgdXNlZCkgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUs ICAgICAgICAgICAgICAgICAgIC8qIGhvc3QgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIE5V TEwsICAgICAgICAgICAgICAgICAgIC8qIHNlcnZpY2UgKG5vdCB1c2VkKSAqLworICAgICAgICAg ICAgICAgICAgICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgLyogdXNlcm5hbWUgKG5vdCB1 c2VkKSAqLworICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAg LyogcGFzc3dvcmQgKG5vdCB1c2VkKSAqLworICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwg ICAgICAgICAgICAgICAgICAgLyogY29tbWFuZCAobm90IHVzZWQpICovCisgICAgICAgICAgICAg ICAgICAgICAgICAtMSwtMSwtMSwgICAgICAgICAgICAgICAvKiBwYXJhbXMgMS0zIChub3QgdXNl ZCkgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIDEsICAgICAgICAgICAgICAgICAgICAgIC8q IGNvbm5lY3QgaW1tZWRpYXRlbHkgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIHN4LCAgICAg ICAgICAgICAgICAgICAgIC8qIHNlcnZlcj8gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIHp6 LCAgICAgICAgICAgICAgICAgICAgIC8qIGNsb3NlIGN1cnJlbnQ/ICovCisgICAgICAgICAgICAg ICAgICAgICAgICAwKTsgICAgICAgICAgICAgICAgICAgICAvKiBub3QgZ3VpICovCisJICAgIGRl YnVnKEYxMTEsInNldGxpbiBjeF9uZXQiLGxpbmUseCk7CisJICAgIHJldHVybih4KTsKKyAgICAg ICAgfQorI2VuZGlmIC8qIFNTSENNRCAqLworCisvKgorICBIZXJlIHdlIHBhcnNlIG9wdGlvbmFs IHN3aXRjaGVzIGFuZCB0aGVuIHRoZSBob3N0bmFtZSBvciB3aGF0ZXZlciwKKyAgd2hpY2ggZGVw ZW5kcyBvbiB0aGUgbmV0d29yayB0eXBlLiAgVGhlIHRyaWNreSBwYXJ0IGlzLCB0aGUgbmV0d29y ayB0eXBlCisgIGNhbiBiZSBzZXQgYnkgYSBzd2l0Y2guCisqLworI2lmbmRlZiBOT1NQTAorICAg ICAgICBtYWtlc3RyKCZnX3Bzd2QscHdidWYpOyAgICAgICAgIC8qIFNhdmUgZ2xvYmFsIHB3YnVm ICovCisgICAgICAgIGdfcGZsZyA9IHB3ZmxnOyAgICAgICAgICAgICAgICAgLyogYW5kIGZsYWcg Ki8KKyAgICAgICAgZ19wY3B0ID0gcHdjcnlwdDsKKyNlbmRpZiAvKiBOT1NQTCAqLworCisgICAg ICAgIGNvbmZpcm1lZCA9IDA7CisgICAgICAgIGhhdmVzd2l0Y2ggPSAwOworI2lmZGVmIE5FVEZJ TEUKKyAgICAgICAgaWYgKG15bmV0ICE9IE5FVF9GSUxFKSB7CisjZW5kaWYgLyogTkVURklMRSAq LworICAgICAgICAgICAgc3MgPSAobXluZXQgPT0gTkVUX0NNRCB8fCBteW5ldCA9PSBORVRfUFRZ KSA/CisgICAgICAgICAgICAgICJDb21tYW5kLCBvciBzd2l0Y2giIDoKKyAgICAgICAgICAgICAg ICAobXluZXQgPT0gTkVUX1RDUEEgfHwgbXluZXQgPT0gTkVUX1RDUEIKKyAgICAgICAgICAgICAg ICAgIHx8IG15bmV0ID09IE5FVF9TU0gpID8KKyAgICAgICAgICAgICAgICAgICJIb3N0bmFtZSwg aXAtYWRkcmVzcywgb3Igc3dpdGNoIiA6CisgICAgICAgICAgICAgICAgICAgICJIb3N0IG9yIHN3 aXRjaCI7CisgICAgICAgICAgICBpZiAoZmMpIHsKKyAgICAgICAgICAgICAgICBpZiAobXluZXQg PT0gTkVUX1RDUEIgJiYKKyAgICAgICAgICAgICAgICAgICAgKHR0bnByb3RvID09IE5QX1RFTE5F VCB8fCB0dG5wcm90byA9PSBOUF9LRVJNSVQpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChu c2h0ZWx0YWIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVzd2l0Y2grKzsKKyAgICAg ICAgICAgICAgICAgICAgICAgIGNtZmRiaSgmc3csX0NNS0VZLHNzLCIiLCIiLG5zaHRlbHRhYiw0 LHh4c3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaHRlbHRhYiwmbngpOwor ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorI2lmZGVmIFJMT0dDT0RF CisgICAgICAgICAgICAgICAgZWxzZSBpZiAobXluZXQgPT0gTkVUX1RDUEIgJiYgdHRucHJvdG8g PT0gTlBfUkxPR0lOKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChuc2hybGd0YWIpIHsKKyAg ICAgICAgICAgICAgICAgICAgICAgIGhhdmVzd2l0Y2grKzsKKyAgICAgICAgICAgICAgICAgICAg ICAgIGNtZmRiaSgmc3csX0NNS0VZLHNzLCIiLCIiLG5zaHJsZ3RhYiw0LHh4c3RyaW5nLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNocmxndGFiLCZueCk7CisgICAgICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisjZW5kaWYgLyogUkxPR0NPREUgKi8KKyAgICAg ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaGF2ZXN3aXRjaCsrOworICAgICAgICAg ICAgICAgIGNtZmRiaSgmc3csX0NNS0VZLHNzLCIiLCIiLG5zaHRhYiw0LHh4c3RyaW5nLHNodGFi LCZueCk7CisgICAgICAgICAgICB9CisjaWZkZWYgTkVURklMRQorICAgICAgICB9CisjZW5kaWYg LyogTkVURklMRSAqLworICAgICAgICBpZiAobXluZXQgPT0gTkVUX1RDUEIgfHwgbXluZXQgPT0g TkVUX1NMQVQgfHwKKwkgICAgbXluZXQgPT0gTkVUX1NTSCAgfHwgbXluZXQgPT0gTkVUX0RFQykg eworICAgICAgICAgICAgY21mZGJpKCZueCxfQ01GTEQsIkhvc3QiLCIiLCIiLDAsMCx4eHN0cmlu ZyxOVUxMLE5VTEwpOworI2lmZGVmIE5FVEZJTEUKKyAgICAgICAgfSBlbHNlIGlmIChteW5ldCA9 PSBORVRfRklMRSkgeworICAgICAgICAgICAgY21mZGJpKCZueCxfQ01JRkksIkZpbGVuYW1lIiwi IiwiIiwwLDAseHhzdHJpbmcsTlVMTCxOVUxMKTsKKyNlbmRpZiAvKiBORVRGSUxFICovCisjaWZk ZWYgUFRZT1JQSVBFCisgICAgICAgIH0gZWxzZSBpZiAobXluZXQgPT0gTkVUX0NNRCB8fCBteW5l dCA9PSBORVRfUFRZKSB7CisgICAgICAgICAgICBjbWZkYmkoJm54LF9DTVRYVCwiQ29tbWFuZCIs IiIsIiIsMCwwLHh4c3RyaW5nLE5VTEwsTlVMTCk7CisjZW5kaWYgLyogUFRZT1JQSVBFICovCisg ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjbWZkYmkoJm54LF9DTVRYVCwiSG9zdCIsIiIs IiIsMCwwLHh4c3RyaW5nLE5VTEwsTlVMTCk7CisgICAgICAgIH0KKyAgICAgICAgd2hpbGUgKDEp IHsKKyAgICAgICAgICAgIHggPSBjbWZkYihoYXZlc3dpdGNoID8gJnN3IDogJm54KTsKKyAgICAg ICAgICAgIGRlYnVnKEYxMDEsInNldGxpbiBjbWZkYiIsIiIseCk7CisgICAgICAgICAgICBpZiAo eCA8IDApCisgICAgICAgICAgICAgIGlmICh4ICE9IC0zKQorICAgICAgICAgICAgICAgIHJldHVy bih4KTsKKyAgICAgICAgICAgIGlmICh4ID09IC0zKSB7CisgICAgICAgICAgICAgICAgaWYgKCh4 ID0gY21jZm0oKSkgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybih4KTsKKyAgICAg ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBjb25maXJtZWQgPSAxOwor ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICB9CisgICAgICAgICAgICBpZiAoY21yZXN1bHQuZmNvZGUgIT0gX0NNS0VZKSB7ICAgIC8qIE5v dCBhIHN3aXRjaCAqLworICAgICAgICAgICAgICAgIGNrc3RybmNweShsaW5lLGNtcmVzdWx0LnNy ZXN1bHQsTElOQlVGU0laKTsgLyogU2F2ZSB0aGUgZGF0YSAqLworICAgICAgICAgICAgICAgIHMg PSBsaW5lOyAgICAgICAgICAgICAgICAgICAgICAvKiB0aGF0IHdhcyBwYXJzZWQuLi4gKi8KKyAg ICAgICAgICAgICAgICBpZiAoY21yZXN1bHQuZmNvZGUgPT0gX0NNSUZJKSB7CisgICAgICAgICAg ICAgICAgICAgIHdpbGQgPSBjbXJlc3VsdC5ucmVzdWx0OworICAgICAgICAgICAgICAgIH0gZWxz ZSBpZiAoY21yZXN1bHQuZmNvZGUgPT0gX0NNVFhUKSB7CisgICAgICAgICAgICAgICAgICAgIGNv bmZpcm1lZCA9IDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOyAg ICAgICAgICAgICAgICAgIC8qIGFuZCBicmVhayBvdXQgb2YgdGhpcyBsb29wICovCisgICAgICAg ICAgICB9CisgICAgICAgICAgICBjID0gY21nYnJrKCk7ICAgICAgICAgICAgICAgLyogSGF2ZSBz d2l0Y2ggLSBnZXQgYnJlYWsgY2hhcmFjdGVyICovCisgICAgICAgICAgICBnZXR2YWwgPSAoYyA9 PSAnOicgfHwgYyA9PSAnPScpOyAvKiBNdXN0IHBhcnNlIGFuIGFndW1lbnQ/ICovCisgICAgICAg ICAgICBpZiAoZ2V0dmFsICYmICEoY21yZXN1bHQua2ZsYWdzICYgQ01fQVJHKSkgeworICAgICAg ICAgICAgICAgIHByaW50ZigiP1RoaXMgc3dpdGNoIGRvZXMgbm90IHRha2UgYXJndW1lbnRzXG4i KTsKKyAgICAgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICAgICAgfQorICAgICAgICAg ICAgaWYgKCFnZXR2YWwgJiYgKGNtZ2t3ZmxncygpICYgQ01fQVJHKSkgeworICAgICAgICAgICAg ICAgIHByaW50ZigiP1RoaXMgc3dpdGNoIHJlcXVpcmVzIGFuIGFyZ3VtZW50XG4iKTsKKyAgICAg ICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3dpdGNo IChjbXJlc3VsdC5ucmVzdWx0KSB7IC8qIEl0J3MgYSBzd2l0Y2guLiAqLworICAgICAgICAgICAg ICBjYXNlIFNMX0NOWDogICAgICAgICAgICAgIC8qIC9DT05ORUNUICovCisgICAgICAgICAgICAg ICAgY3ggPSAxOworICAgICAgICAgICAgICAgIHN4ID0gMDsKKyAgICAgICAgICAgICAgICBicmVh azsKKyAgICAgICAgICAgICAgY2FzZSBTTF9TUlY6ICAgICAgICAgICAgICAvKiAvU0VSVkVSICov CisgICAgICAgICAgICAgICAgY3ggPSAwOworICAgICAgICAgICAgICAgIHN4ID0gMTsKKyAgICAg ICAgICAgICAgICBicmVhazsKKyNpZmRlZiBORVRDTUQKKyAgICAgICAgICAgICAgY2FzZSBTTF9D TUQ6ICAgICAgICAgICAgICAvKiAvQ09NTUFORCAqLworICAgICAgICAgICAgICAgIG5ldHNhdmUg PSBteW5ldDsKKyAgICAgICAgICAgICAgICBteW5ldCA9IE5FVF9DTUQ7CisgICAgICAgICAgICAg ICAgYnJlYWs7CisjZW5kaWYgLyogTkVUQ01EICovCisjaWZkZWYgTkVUUFRZCisgICAgICAgICAg ICAgIGNhc2UgU0xfUFRZOiAgICAgICAgICAgICAgLyogL1BUWSAqLworICAgICAgICAgICAgICAg IG5ldHNhdmUgPSBteW5ldDsKKyAgICAgICAgICAgICAgICBteW5ldCA9IE5FVF9QVFk7CisgICAg ICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogTkVUUFRZICovCisgICAgICAgICAgICAgIGNh c2UgU0xfTkVUOiAgICAgICAgICAgICAgLyogL05FVFdPUkstVFlQRSAqLworICAgICAgICAgICAg ICAgIGlmICgoeCA9IGNta2V5KG5ldGNtZCxubmV0cywiIiwiIix4eHN0cmluZykpIDwgMCkKKyAg ICAgICAgICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgICAgICAgICBteW5ldCA9IHg7Cisg ICAgICAgICAgICAgICAgYnJlYWs7CisKKyNpZmRlZiBDS19TRUNVUklUWQorICAgICAgICAgICAg ICBjYXNlIFNMX1BTVzogICAgICAgICAgICAgIC8qIC9QQVNTV09SRDogKi8KKyAgICAgICAgICAg ICAgICBpZiAoIWdldHZhbCkKKyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg ICAgIGRlYm9rID0gMDsKKyAgICAgICAgICAgICAgICBpZiAoKHggPSBjbWZsZCgiUGFzc3dvcmQi LCIiLCZzLHh4c3RyaW5nKSkgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh4ID09IC0z KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtYWtlc3RyKCZ0bXBzdHJpbmcsIiIpOworICAg ICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu KHgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg ICAgICAgICAgICAgICAgICAgcyA9IGJyc3RyaXAocyk7CisgICAgICAgICAgICAgICAgICAgIGlm ICgoeCA9IChpbnQpc3RybGVuKHMpKSA+IFBXQlVGTCkgeworICAgICAgICAgICAgICAgICAgICAg ICAgbWFrZXN0cigmc2xtc2csIkludGVybmFsIGVycm9yIik7CisgICAgICAgICAgICAgICAgICAg ICAgICBwcmludGYoIj9Tb3JyeSwgdG9vIGxvbmcgLSBtYXggPSAlZFxuIixQV0JVRkwpOworICAg ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICAgICAgICBtYWtlc3RyKCZ0bXBzdHJpbmcscyk7CisgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIENLX1NFQ1VSSVRZICovCisK KyAgICAgICAgICAgICAgY2FzZSBTTF9VSUQ6ICAgICAgICAgICAgICAvKiAvVVNFUklEOiAqLwor ICAgICAgICAgICAgICAgIGlmICghZ2V0dmFsKQorICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgICAgICAgICAgaWYgKCh4ID0gY21mbGQoIlVzZXJpZCIsIiIsJnMseHhzdHJpbmcpKSA8 IDApIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHggPT0gLTMpIHsKKyAgICAgICAgICAgICAg ICAgICAgICAgIG1ha2VzdHIoJnRtcHVzcmlkLCIiKTsKKyAgICAgICAgICAgICAgICAgICAgfSBl bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHMg PSBicnN0cmlwKHMpOworICAgICAgICAgICAgICAgICAgICBpZiAoKHggPSAoaW50KXN0cmxlbihz KSkgPiA2MykgeworICAgICAgICAgICAgICAgICAgICAgICAgbWFrZXN0cigmc2xtc2csIkludGVy bmFsIGVycm9yIik7CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIj9Tb3JyeSwgdG9v IGxvbmcgLSBtYXggPSAlZFxuIiw2Myk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4o LTkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIG1ha2VzdHIo JnRtcHVzcmlkLHMpOworICAgICAgICAgICAgICAgICAgICBoYXZldXNlciA9IDE7CisgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisjaWZkZWYgQ0tfQVVUSEVOVElD QVRJT04KKyNpZmRlZiBDS19TUlAKKyAgICAgICAgICAgICAgY2FzZSBTTF9TUlA6CisgICAgICAg ICAgICAgICAgYV90eXBlID0gQVVUSFRZUEVfU1JQOworICAgICAgICAgICAgICAgIGJyZWFrOwor I2VuZGlmIC8qIENLX1NSUCAqLworI2lmZGVmIENLX1NTTAorICAgICAgICAgICAgICBjYXNlIFNM X1NTTDoKKyAgICAgICAgICAgICAgICBhX3R5cGUgPSBBVVRIVFlQRV9TU0w7CisgICAgICAgICAg ICAgICAgYnJlYWs7CisjZW5kaWYgLyogQ0tfU1NMICovCisjaWZkZWYgTlQKKyAgICAgICAgICAg ICAgY2FzZSBTTF9OVExNOgorICAgICAgICAgICAgICAgIGFfdHlwZSA9IEFVVEhUWVBFX05UTE07 CisgICAgICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogTlQgKi8KKyNpZmRlZiBDS19LRVJC RVJPUworICAgICAgICAgICAgICBjYXNlIFNMX0tSQjQ6CisgICAgICAgICAgICAgICAgYV90eXBl ID0gQVVUSFRZUEVfS0VSQkVST1NfVjQ7CisgICAgICAgICAgICAgICAgaWYgKHR0bnByb3RvID09 IE5QX1JMT0dJTikKKyAgICAgICAgICAgICAgICAgIHR0bnByb3RvID0KKyNpZmRlZiBDS19FTkNS WVBUSU9OCisgICAgICAgICAgICAgICAgICAgIGVuY3J5cHQgPyBOUF9FSzRMT0dJTiA6CisjZW5k aWYgLyogQ0tfRU5DUllQVElPTiAqLworICAgICAgICAgICAgICAgICAgICAgIE5QX0s0TE9HSU47 CisgICAgICAgICAgICAgICAgZWxzZSBpZiAodHRucHJvdG8gPT0gTlBfSzVMT0dJTikKKyAgICAg ICAgICAgICAgICAgIHR0bnByb3RvID0gTlBfSzRMT0dJTjsKKyNpZmRlZiBDS19FTkNSWVBUSU9O CisgICAgICAgICAgICAgICAgZWxzZSBpZiAodHRucHJvdG8gPT0gTlBfRUs1TE9HSU4pCisgICAg ICAgICAgICAgICAgICB0dG5wcm90byA9IE5QX0VLNExPR0lOOworI2VuZGlmIC8qIENLX0VOQ1JZ UFRJT04gKi8KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBTTF9L UkI1OgorICAgICAgICAgICAgICAgIGFfdHlwZSA9IEFVVEhUWVBFX0tFUkJFUk9TX1Y1OworICAg ICAgICAgICAgICAgIGlmICh0dG5wcm90byA9PSBOUF9STE9HSU4pCisgICAgICAgICAgICAgICAg ICB0dG5wcm90byA9CisjaWZkZWYgQ0tfRU5DUllQVElPTgorICAgICAgICAgICAgICAgICAgICBl bmNyeXB0ID8gTlBfRUs1TE9HSU4gOgorI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KKyAgICAg ICAgICAgICAgICAgICAgICBOUF9LNUxPR0lOOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR0 bnByb3RvID09IE5QX0s0TE9HSU4pCisgICAgICAgICAgICAgICAgICB0dG5wcm90byA9IE5QX0s1 TE9HSU47CisjaWZkZWYgQ0tfRU5DUllQVElPTgorICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR0 bnByb3RvID09IE5QX0VLNExPR0lOKQorICAgICAgICAgICAgICAgICAgdHRucHJvdG8gPSBOUF9F SzVMT0dJTjsKKyNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCisgICAgICAgICAgICAgICAgYnJl YWs7CisjZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KKyAgICAgICAgICAgICAgY2FzZSBTTF9BVVRI OiB7CisgICAgICAgICAgICAgICAgICBleHRlcm4gc3RydWN0IGtleXRhYiBhdXR5cHRhYltdOwor ICAgICAgICAgICAgICAgICAgZXh0ZXJuIGludCBuYXV0eXA7CisgICAgICAgICAgICAgICAgICBp ZiAoKHggPSBjbWtleShhdXR5cHRhYixuYXV0eXAsInR5cGUgb2YgYXV0aGVudGljYXRpb24iLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImF1dG9tYXRpYyIseHhzdHJpbmcpKSA8 IDApCisgICAgICAgICAgICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgICAgICAgICAgIGFf dHlwZSA9IHg7CisgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgfQorI2Vu ZGlmIC8qIENLX0FVVEhFTlRJQ0FUSU9OICovCisjaWZkZWYgQ0tfRU5DUllQVElPTgorICAgICAg ICAgICAgICBjYXNlIFNMX0VOQzoKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHR0bnByb3RvKSB7 CisgICAgICAgICAgICAgICAgICBjYXNlIE5QX0s0TE9HSU46CisgICAgICAgICAgICAgICAgICAg IHR0bnByb3RvID0gTlBfRUs0TE9HSU47CisgICAgICAgICAgICAgICAgICAgIGVuY3J5cHQgPSAx OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgTlBf SzVMT0dJTjoKKyAgICAgICAgICAgICAgICAgICAgdHRucHJvdG8gPSBOUF9FSzVMT0dJTjsKKyAg ICAgICAgICAgICAgICAgICAgZW5jcnlwdCA9IDE7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr OworICAgICAgICAgICAgICAgICAgY2FzZSBOUF9LRVJNSVQ6CisgICAgICAgICAgICAgICAgICBj YXNlIE5QX1RFTE5FVDogeworICAgICAgICAgICAgICAgICAgICAgIHN0YXRpYyBzdHJ1Y3Qga2V5 dGFiICogdG5ldGJsID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgICBzdGF0aWMgaW50IG50 bmV0YmwgPSAwOworICAgICAgICAgICAgICAgICAgICAgIHggPSBja19nZXRfY3J5cHRfdGFibGUo JnRuZXRibCwmbnRuZXRibCk7CisgICAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEwMSwiY2tf Z2V0X2NyeXB0X3RhYmxlIHgiLCIiLHgpOworICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYx MDEsImNrX2dldF9jcnlwdF90YWJsZSBuIiwiIixudG5ldGJsKTsKKyAgICAgICAgICAgICAgICAg ICAgICBpZiAoeCA8IDEgfHwgIXRuZXRibCB8fCBudG5ldGJsIDwgMSkgLyogRGlkbid0IGdldCBp dCAqLworICAgICAgICAgICAgICAgICAgICAgICAgeCA9IDA7CisgICAgICAgICAgICAgICAgICAg ICAgaWYgKCF4KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJnNsbXNnLCJJ bnRlcm5hbCBlcnJvciIpOworICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIj9Pb3Bz LCB0eXBlcyBub3QgbG9hZGVkXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu KC05KTsKKyAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgaWYg KCh4ID0gY21rZXkodG5ldGJsLG50bmV0YmwsInR5cGUgb2YgZW5jcnlwdGlvbiIsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImF1dG9tYXRpYyIseHhzdHJpbmcpKSA8IDAp CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgICAgICAgICAgICAg ICAgZV90eXBlID0geDsKKyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisjZW5k aWYgLyogQ0tfRU5DUllQVElPTiAqLworICAgICAgICAgICAgICBjYXNlIFNMX1dBSVQ6CisgICAg ICAgICAgICAgICAgd2FpdCA9IDE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg ICAgIGNhc2UgU0xfTk9XQUlUOgorICAgICAgICAgICAgICAgIHdhaXQgPSAwOworICAgICAgICAg ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyNpZmRlZiBORVRGSUxF CisgICAgICAgIGlmIChteW5ldCA9PSBORVRfRklMRSkgeyAgICAgICAgLyogUGFyc2VkIGJ5IGNt aWZpKCkgKi8KKwkgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKQkvKiBOZWVkcyBjb25maXJtYXRp b24gKi8KKwkgICAgICByZXR1cm4oeCk7CisJICAgIHggPSBjeF9uZXQobXluZXQsCQkvKiBuZXR0 eXBlICovCisJCSAgICAgICAwLAkJLyogcHJvdG9jb2wgKG5vdCB1c2VkKSAqLworCQkgICAgICAg bGluZSwJCS8qIGhvc3QgKi8KKwkJICAgICAgICIiLAkJLyogcG9ydCAqLworCQkgICAgICAgTlVM TCwJCS8qIGFsdGVybmF0ZSB1c2VybmFtZSAqLworCQkgICAgICAgTlVMTCwJCS8qIHBhc3N3b3Jk ICovCisJCSAgICAgICBOVUxMLAkJLyogY29tbWFuZCB0byBleGVjdXRlICovCisJCSAgICAgICAw LAkJLyogcGFyYW0xICovCisJCSAgICAgICAwLAkJLyogcGFyYW0yICovCisJCSAgICAgICAwLAkJ LyogcGFyYW0zICovCisJCSAgICAgICBjeCwJCS8qIGVudGVyIENPTk5FQ1QgbW9kZSAqLworCQkg ICAgICAgc3gsCQkvKiBlbnRlciBTRVJWRVIgbW9kZSAqLworCQkgICAgICAgenosCQkvKiBjbG9z ZSBjb25uZWN0aW9uIGlmIG9wZW4gKi8KKwkJICAgICAgIDAJCS8qIGd1aSAqLworCQkgICAgICAg KTsKKyAgICAgICAgfQorI2VuZGlmIC8qIE5FVEZJTEUgKi8KKworI2lmZGVmIE5FVENNRAorICAg ICAgICBpZiAobXluZXQgPT0gTkVUX0NNRCB8fCBteW5ldCA9PSBORVRfUFRZKSB7CisgICAgICAg ICAgICBjaGFyICpwID0gTlVMTDsKKyAgICAgICAgICAgIGlmICghY29uZmlybWVkKSB7CisgICAg ICAgICAgICAgICAgaWYgKCh4ID0gY210eHQoIlJlc3Qgb2YgY29tbWFuZCIsIiIsJnMseHhzdHJp bmcpKSA8IDApCisgICAgICAgICAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgICAgICAgICAg aWYgKCpzKSB7CisgICAgICAgICAgICAgICAgICAgIGNrc3RybmNhdChsaW5lLCIgIixMSU5CVUZT SVopOworICAgICAgICAgICAgICAgICAgICBja3N0cm5jYXQobGluZSxzLExJTkJVRlNJWik7Cisg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHMgPSBsaW5lOworICAgICAgICAgICAg fQorICAgICAgICAgICAgLyogcyA9PSBsaW5lIC0gc28gd2UgbXVzdCBwcm90ZWN0IHRoZSBsaW5l IGJ1ZmZlciAqLworICAgICAgICAgICAgcyA9IGJyc3RyaXAocyk7CisgICAgICAgICAgICBtYWtl c3RyKCZwLHMpOworICAgICAgICAgICAgY2tzdHJuY3B5KGxpbmUscCxMSU5CVUZTSVopOworICAg ICAgICAgICAgbWFrZXN0cigmcCxOVUxMKTsKKworICAgICAgICAgICAgeCA9IGN4X25ldCggbXlu ZXQsICAgICAgICAgICAgICAgICAgLyogbmV0dHlwZSAqLworICAgICAgICAgICAgICAgICAgICAg ICAgMCwgICAgICAgICAgICAgICAgICAgICAgLyogcHJvdG9jb2wgKG5vdCB1c2VkKSAqLworICAg ICAgICAgICAgICAgICAgICAgICAgbGluZSwgICAgICAgICAgICAgICAgICAgLyogaG9zdCAqLwor ICAgICAgICAgICAgICAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgLyogcG9ydCAq LworICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgLyogYWx0 ZXJuYXRlIHVzZXJuYW1lICovCisgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAgICAgICAg ICAgICAgICAgICAvKiBwYXNzd29yZCAqLworICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwg ICAgICAgICAgICAgICAgICAgLyogY29tbWFuZCB0byBleGVjdXRlICovCisgICAgICAgICAgICAg ICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAvKiBwYXJhbTEgKi8KKyAgICAgICAg ICAgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgIC8qIHBhcmFtMiAqLworICAg ICAgICAgICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgLyogcGFyYW0zICov CisgICAgICAgICAgICAgICAgICAgICAgICBjeCwgICAgICAgICAgICAgICAgICAgICAvKiBlbnRl ciBDT05ORUNUIG1vZGUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIHN4LCAgICAgICAgICAg ICAgICAgICAgIC8qIGVudGVyIFNFUlZFUiBtb2RlICovCisgICAgICAgICAgICAgICAgICAgICAg ICB6eiwgICAgICAgICAgICAgICAgICAgICAvKiBjbG9zZSBjb25uZWN0aW9uIGlmIG9wZW4gKi8K KyAgICAgICAgICAgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgIC8qIGd1aSAq LworICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgfQorI2VuZGlmIC8qIE5FVENN RCAqLworCisjaWZkZWYgTlBJUEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTmFtZWQg cGlwZSAqLworICAgICAgICBpZiAobXluZXQgPT0gTkVUX1BJUEUpIHsgICAgICAgIC8qIE5lZWRz IGJhY2tzbGFzaCB0d2lkZGxpbmcgKi8KKyAgICAgICAgICAgIGlmIChsaW5lWzBdKSB7CisgICAg ICAgICAgICAgICAgaWYgKHN0cmNtcChsaW5lLCIqIikpIHsgICAgLyogSWYgcmVtb3RlLCBiZWdp biB3aXRoICovCisgICAgICAgICAgICAgICAgICAgIGNoYXIgKiBwID0gTlVMTDsKKyAgICAgICAg ICAgICAgICAgICAgbWFrZXN0cigmcCxsaW5lKTsgICAgICAKKyAgICAgICAgICAgICAgICAgICAg Y2tzdHJuY3B5KGxpbmUsIlxcXFwiLExJTkJVRlNJWik7IC8qIHNlcnZlciBuYW1lICovCisgICAg ICAgICAgICAgICAgICAgIGNrc3RybmNhdChsaW5lLHAsTElOQlVGU0laKTsKKyAgICAgICAgICAg ICAgICAgICAgbWFrZXN0cigmcCxOVUxMKTsgICAgICAKKyAgICAgICAgICAgICAgICB9IGVsc2Ug eworICAgICAgICAgICAgICAgICAgICBsaW5lWzBdPSdcMCc7CisgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICAgIGNrc3RybmNhdChsaW5lLCJcXHBpcGVcXCIsIExJTkJVRlNJWik7IC8q IE1ha2UgcGlwZSBuYW1lICovCisgICAgICAgICAgICAgICAgY2tzdHJuY2F0KGxpbmUscGlwZW5h bWUsIExJTkJVRlNJWik7IC8qIEFkZCBuYW1lIG9mIHBpcGUgKi8KKworICAgICAgICAgICAgICAg IHggPSBjeF9uZXQobXluZXQsCS8qIG5ldHR5cGUgKi8KKwkJCSAgIDAsCQkvKiBwcm90b2NvbCAo bm90IHVzZWQpICovCisJCQkgICBsaW5lLAkvKiBob3N0ICovCisJCQkgICAiIiwJCS8qIHBvcnQg Ki8KKwkJCSAgIE5VTEwsCS8qIGFsdGVybmF0ZSB1c2VybmFtZSAqLworCQkJICAgTlVMTCwJLyog cGFzc3dvcmQgKi8KKwkJCSAgIE5VTEwsCS8qIGNvbW1hbmQgdG8gZXhlY3V0ZSAqLworCQkJICAg MCwJCS8qIHBhcmFtMSAqLworCQkJICAgMCwJCS8qIHBhcmFtMiAqLworCQkJICAgMCwJCS8qIHBh cmFtMyAqLworCQkJICAgY3gsCQkvKiBlbnRlciBDT05ORUNUIG1vZGUgKi8KKwkJCSAgIHN4LAkJ LyogZW50ZXIgU0VSVkVSIG1vZGUgKi8KKwkJCSAgIHp6LAkJLyogY2xvc2UgY29ubmVjdGlvbiBp ZiBvcGVuICovCisJCQkgICAwCQkvKiBndWkgKi8KKwkJCSAgICk7CisgICAgICAgICAgICB9Cisg ICAgICAgIH0KKyNlbmRpZiAvKiBOUElQRSAqLworCisjaWZkZWYgU1VQRVJMQVQKKyAgICAgICAg aWYgKG15bmV0ID09IE5FVF9TTEFUKSB7ICAgICAgICAvKiBOZWVkcyBwYXNzd29yZCwgZXRjLiAq LworICAgICAgICAgICAgc2xhdF9wd2RbMF0gPSBOVUw7ICAgICAgICAgIC8qIEVyYXNlIGFueSBw cmV2aW91cyBwYXNzd29yZCAqLworICAgICAgICAgICAgZGVib2sgPSAwOworICAgICAgICAgICAg aWYgKCpsaW5lKSB7CQkvKiBJZiB0aGV5IGdhdmUgYSBob3N0IG5hbWUuLi4gKi8KKyAgICAgICAg ICAgICAgICBpZiAoKHggPSBjbWZsZCgKKyAgICAgICAgICAgICAgICAgICAgICJwYXNzd29yZCxc biBvciBjYXJyaWFnZSByZXR1cm4gaWYgbm8gcGFzc3dvcmQgcmVxdWlyZWQiLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICZzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHh4c3RyaW5nCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKSkgPCAwICYmIHggIT0gLTMpCisgICAgICAgICAgICAgICAg ICByZXR1cm4oeCk7CisgICAgICAgICAgICAgICAgY2tzdHJuY3B5KHNsYXRfcHdkLHMsMTgpOyAv KiBTZXQgdGhlIHBhc3N3b3JkLCBpZiBhbnkgKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg IGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOyAvKiBDb25maXJtIHRoZSBjb21tYW5k ICovCisKKyAgICAgICAgICAgIHggPSBjeF9uZXQobXluZXQsCQkvKiBuZXR0eXBlICovCisgICAg ICAgICAgICAgICAgICAgICAgIDAsCQkvKiBwcm90b2NvbCAobm90IHVzZWQpICovCisgICAgICAg ICAgICAgICAgICAgICAgIGxpbmUsCQkvKiBob3N0ICovCisgICAgICAgICAgICAgICAgICAgICAg ICIiLAkJLyogcG9ydCAqLworICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAkJLyogYWx0ZXJu YXRlIHVzZXJuYW1lICovCisgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCQkvKiBwYXNzd29y ZCAqLworICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAkJLyogY29tbWFuZCB0byBleGVjdXRl ICovCisgICAgICAgICAgICAgICAgICAgICAgIDAsCQkvKiBwYXJhbTEgKi8KKyAgICAgICAgICAg ICAgICAgICAgICAgMCwJCS8qIHBhcmFtMiAqLworICAgICAgICAgICAgICAgICAgICAgICAwLAkJ LyogcGFyYW0zICovCisgICAgICAgICAgICAgICAgICAgICAgIGN4LAkJLyogZW50ZXIgQ09OTkVD VCBtb2RlICovCisgICAgICAgICAgICAgICAgICAgICAgIHN4LAkJLyogZW50ZXIgU0VSVkVSIG1v ZGUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgenosCQkvKiBjbG9zZSBjb25uZWN0aW9uIGlm IG9wZW4gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgMAkJLyogZ3VpICovCisgICAgICAgICAg ICAgICAgICAgICAgICk7CisgICAgICAgIH0KKyNlbmRpZiAvKiBTVVBFUkxBVCAqLworCisjaWZk ZWYgREVDTkVUCisgICAgICAgIGlmIChteW5ldCA9PSBORVRfREVDKSB7ICAKKyAgICAgICAgICAg IGlmICghbGluZVswXSkgeyAgICAgICAgICAgICAgICAgICAvKiBJZiB0aGV5IGdhdmUgYSBob3N0 IG5hbWUuLi4gKi8KKyAgICAgICAgICAgICAgICBwcmludGYoIj9ob3N0bmFtZSByZXF1aXJlZFxu Iik7CisgICAgICAgICAgICAgICAgcmV0dXJuKC0zKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOyAvKiBDb25maXJtIHRoZSBjb21t YW5kICovCisKKyAgICAgICAgICAgIHggPSBjeF9uZXQobXluZXQsCQkvKiBuZXR0eXBlICovCisg ICAgICAgICAgICAgICAgICAgICAgIDAsCQkvKiBwcm90b2NvbCAobm90IHVzZWQpICovCisgICAg ICAgICAgICAgICAgICAgICAgIGxpbmUsCQkvKiBob3N0ICovCisgICAgICAgICAgICAgICAgICAg ICAgICIiLAkJLyogcG9ydCAqLworICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAkJLyogYWx0 ZXJuYXRlIHVzZXJuYW1lICovCisgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCQkvKiBwYXNz d29yZCAqLworICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAkJLyogY29tbWFuZCB0byBleGVj dXRlICovCisgICAgICAgICAgICAgICAgICAgICAgIDAsCQkvKiBwYXJhbTEgKi8KKyAgICAgICAg ICAgICAgICAgICAgICAgMCwJCS8qIHBhcmFtMiAqLworICAgICAgICAgICAgICAgICAgICAgICAw LAkJLyogcGFyYW0zICovCisgICAgICAgICAgICAgICAgICAgICAgIGN4LAkJLyogZW50ZXIgQ09O TkVDVCBtb2RlICovCisgICAgICAgICAgICAgICAgICAgICAgIHN4LAkJLyogZW50ZXIgU0VSVkVS IG1vZGUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgenosCQkvKiBjbG9zZSBjb25uZWN0aW9u IGlmIG9wZW4gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgMAkJLyogZ3VpICovCisgICAgICAg ICAgICAgICAgICAgICAgICk7CisgICAgICAgIH0KKyNlbmRpZiAvKiBERUNORVQgKi8KKworI2lm ZGVmIFNTSEJVSUxUSU4KKyAgICAgICAgaWYgKG15bmV0ID09IE5FVF9TU0gpIHsJCS8qIFNTSCBj b25uZWN0aW9uICovCisgICAgICAgICAgICBpbnQgaywgaGF2ZWhvc3QgPSAwLCB0cmlwcyA9IDA7 CisgICAgICAgICAgICBpbnQgICAgdG1wdmVyID0gLTEsIHRtcHhmdyA9IC0xLCB0bXBzc2hfY2Fz OworI2lmbmRlZiBTU0hURVNUCisgICAgICAgICAgICBleHRlcm4gaW50IHNsX3NzaF94ZncsIHNs X3NzaF94Zndfc2F2ZWQ7CisgICAgICAgICAgICBleHRlcm4gaW50IHNsX3NzaF92ZXIsIHNsX3Nz aF92ZXJfc2F2ZWQ7CisjZW5kaWYgLyogU1NIVEVTVCAqLworICAgICAgICAgICAgZXh0ZXJuIHN0 cnVjdCBrZXl0YWIgc3Nob3Buc3dbXTsKKyAgICAgICAgICAgIGV4dGVybiBpbnQgbnNzaG9wbnN3 OworICAgICAgICAgICAgZXh0ZXJuIGNoYXIgKnNzaF90bXBjbWQsICpzc2hfdG1wcG9ydDsKKyAg ICAgICAgICAgIHN0cnVjdCBGREIgc3csIGt3LCBmbDsKKworICAgICAgICAgICAgZGVidWcoRjEx MCwic2V0bGluIFNTSCBzZXJ2aWNlIDAiLHNydmJ1ZiwwKTsKKyAgICAgICAgICAgIGRlYnVnKEYx MTAsInNldGxpbiBTU0ggaG9zdCBzIDIiLHMsMCk7CisgICAgICAgICAgICBpZiAoKnMpIHsgICAg ICAgICAgIC8qIElmIHRoZXkgZ2F2ZSBhIGhvc3QgbmFtZS4uLiAqLworICAgICAgICAgICAgICAg IGRlYnVnKEYxMTAsInNldGxpbiBTU0ggaG9zdCBzIDEiLHMsMCk7CisgICAgICAgICAgICAgICAg aWYgKCpzID09ICcqJykgeworICAgICAgICAgICAgICAgICAgICBtYWtlc3RyKCZzbG1zZywiSW5j b21pbmcgY29ubmVjdGlvbnMgbm90IHN1cHBvcnRlZCIpOworICAgICAgICAgICAgICAgICAgICBw cmludGYoCisgICAgICI/U29ycnksIGluY29taW5nIGNvbm5lY3Rpb25zIG5vdCBzdXBwb3J0ZWQg Zm9yIFNTSC5cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAg ICAgICAgIHJldHVybigtOSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNr c3RybmNweShsaW5lLHMsTElOQlVGU0laKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg ICAgICAgICAgcHJpbnRmKCI/aG9zdG5hbWUgcmVxdWlyZWRcbiIpOworICAgICAgICAgICAgICAg IHJldHVybigtMyk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIFBhcnNlIFsgcG9y dCBdIFsgc3dpdGNoZXMgXSAqLworICAgICAgICAgICAgY21mZGJpKCZrdywgICAgICAgICAgICAg ICAgIC8qIFN3aXRjaGVzICovCisgICAgICAgICAgICAgICAgICAgIF9DTUtFWSwKKyAgICAgICAg ICAgICAgICAgICAgIlBvcnQgbnVtYmVyIG9yIHNlcnZpY2UgbmFtZSxcbm9yIHN3aXRjaCIsCisg ICAgICAgICAgICAgICAgICAgICIiLAorICAgICAgICAgICAgICAgICAgICAiIiwKKyAgICAgICAg ICAgICAgICAgICAgbnNzaG9wbnN3LAorICAgICAgICAgICAgICAgICAgICA0LAorICAgICAgICAg ICAgICAgICAgICB4eHN0cmluZywKKyAgICAgICAgICAgICAgICAgICAgc3Nob3Buc3csCisgICAg ICAgICAgICAgICAgICAgICZmbAorICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAg Y21mZGJpKCZmbCwgICAgICAgICAgICAgICAgIC8qIFBvcnQgbnVtYmVyIG9yIHNlcnZpY2UgbmFt ZSAqLworICAgICAgICAgICAgICAgICAgICBfQ01GTEQsCisgICAgICAgICAgICAgICAgICAgICIi LAorICAgICAgICAgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgICAgICAgICAgIiIsCisgICAg ICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAg ICAgICAgIHh4c3RyaW5nLAorICAgICAgICAgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAg ICAgICAgICBOVUxMCisgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICB0cmlwcyA9 IDA7ICAgICAgICAgICAgICAgICAgLyogRXhwbGFpbmVkIGJlbG93ICovCisgICAgICAgICAgICB3 aGlsZSAoMSkgeyAgICAgICAgICAgICAgICAgLyogUGFyc2UgcG9ydCBhbmQgc3dpdGNoZXMgKi8K KyAgICAgICAgICAgICAgICB5ID0gY21mZGIoJmt3KTsgICAgICAgICAvKiBHZXQgYSBmaWVsZCAq LworICAgICAgICAgICAgICAgIGlmICh5ID09IC0zKSAgICAgICAgICAgIC8qIFVzZXIgdHlwZWQg Q1Igc28gcXVpdCBmcm9tIGxvb3AgKi8KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICAgICAgICAgaWYgKHkgPCAwKSAgICAgICAgICAgICAgLyogT3RoZXIgcGFyc2UgZXJyb3Is IHBhc3MgaXQgYmFjayAqLworICAgICAgICAgICAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAg ICAgICAgICAgc3dpdGNoIChjbXJlc3VsdC5mY29kZSkgeyAvKiBGaWVsZCBvciBLZXl3b3JkPyAq LworICAgICAgICAgICAgICAgIGNhc2UgX0NNRkxEOiAgICAgICAgICAgICAgLyogRmllbGQgKi8K KyAgICAgICAgICAgICAgICAgICAgY2tzdHJuY3B5KHNydmJ1ZixjbXJlc3VsdC5zcmVzdWx0LFNS VkJVRlNJWik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNh c2UgX0NNS0VZOiAgICAgICAgICAgIC8qIEtleXdvcmQgKi8KKyAgICAgICAgICAgICAgICAgICAg c3dpdGNoIChjbXJlc3VsdC5ucmVzdWx0KSB7IC8qIFdoaWNoIG9uZT8gKi8KKyAgICAgICAgICAg ICAgICAgICAgY2FzZSBTU0hTV19QV0Q6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNt Z2JyaygpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/VGhpcyBzd2l0 Y2ggcmVxdWlyZXMgYW4gYXJndW1lbnRcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg IHJldHVybigtOSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg ICAgICAgICBkZWJvayA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHkgPSBjbWZs ZCgiUGFzc3dvcmQiLCIiLCZzLHh4c3RyaW5nKSkgPCAwKSB7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaWYgKHkgPT0gLTMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bWFrZXN0cigmdG1wc3RyaW5nLCIiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVs c2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzID0gYnJzdHJpcChzKTsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpZiAoKHkgPSAoaW50KXN0cmxlbihzKSkgPiBQV0JVRkwpIHsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZXN0cigmc2xtc2csIkludGVybmFsIGVy cm9yIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiP1NvcnJ5LCB0 b28gbG9uZyAtIG1heCA9ICVkXG4iLFBXQlVGTCk7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHJldHVybigtOSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJnRtcHN0cmluZyxzKTsKKyAgICAgICAgICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg ICAgICAgICAgICBjYXNlIFNTSFNXX1VTUjogICAgICAgICAgICAgLyogL1VTRVI6ICovCisgICAg ICAgICAgICAgICAgICAgICAgICBpZiAoIWNtZ2JyaygpKSB7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcHJpbnRmKCI/VGhpcyBzd2l0Y2ggcmVxdWlyZXMgYW4gYXJndW1lbnRcbiIpOwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybigtOSk7CisgICAgICAgICAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHkgPSBjbWZsZCgiVXNlcm5h bWUiLCIiLCZzLHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl dHVybih5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHMgPSBicnN0cmlwKHMpOworICAgICAg ICAgICAgICAgICAgICAgICAgbWFrZXN0cigmdG1wdXNyaWQscyk7CisgICAgICAgICAgICAgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBTU0hTV19WRVI6CisgICAg ICAgICAgICAgICAgICAgICAgICBpZiAoKHkgPSBjbW51bSgiTnVtYmVyIiwiIiwxMCwmeix4eHN0 cmluZykpIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oeSk7CisgICAg ICAgICAgICAgICAgICAgICAgICBpZiAoeiA8IDEgfHwgeiA+IDIpIHsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICBwcmludGYoIj9PdXQgb2YgcmFuZ2U6ICVkXG4iLHopOworICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHJldHVybigtOSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgICAgICAgICAgICB0bXB2ZXIgPSB6OworICAgICAgICAgICAgICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgU1NIU1dfQ01EOgorICAgICAg ICAgICAgICAgICAgICBjYXNlIFNTSFNXX1NVQjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm ICgoeSA9IGNtZmxkKCJUZXh0IiwiIiwmcyx4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICAgICAgICAgICAgICAgICAgbWFrZXN0cigm c3NoX3RtcGNtZCxzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRtcHNzaF9jYXMgPSAoY21y ZXN1bHQubnJlc3VsdCA9PSBTU0hTV19TVUIpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJl YWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgU1NIU1dfWDExOgorICAgICAgICAgICAgICAg ICAgICAgICAgaWYgKCh5ID0gY21rZXkob25vZmYsMiwiIiwib24iLHh4c3RyaW5nKSkgPCAwKQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybih5KTsKKyAgICAgICAgICAgICAgICAg ICAgICAgIHRtcHhmdyA9IHk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybigt Mik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgICAgaWYgKHRyaXBzKysgPT0gMCkgeyAgICAgLyogQWZ0ZXIgZmlyc3QgdGltZSB0aHJvdWdo ICovCisgICAgICAgICAgICAgICAgICAgIGNtZmRiaSgma3csICAgICAgICAgLyogb25seSBwYXJz ZSBzd2l0Y2hlcywgbm90IHBvcnQuICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NN S0VZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTd2l0Y2giLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgIG5zc2hvcG5zdywKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHh4c3RyaW5nLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHNzaG9wbnN3LAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgIE5VTEwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgICAg ICAvKiBHZXQgY29uZmlybWF0aW9uICovCisgICAgICAgICAgICAgICAgcmV0dXJuKHkpOworCisg ICAgICAgICAgICBkZWJ1ZyhGMTEwLCJzZXRsaW4gcHJlLWN4X25ldCBsaW5lIixsaW5lLDApOwor ICAgICAgICAgICAgZGVidWcoRjExMCwic2V0bGluIHByZS1jeF9uZXQgc3J2YnVmIixzcnZidWYs MCk7CisgICAgICAgICAgICB4ID0gY3hfbmV0KCBteW5ldCwgICAgICAgICAgICAgICAgICAvKiBu ZXR0eXBlICovCisgICAgICAgICAgICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAg ICAvKiBwcm90b2NvbCAobm90IHVzZWQpICovCisgICAgICAgICAgICAgICAgICAgICAgICBsaW5l LCAgICAgICAgICAgICAgICAgICAvKiBob3N0ICovCisgICAgICAgICAgICAgICAgICAgICAgICBz cnZidWYsICAgICAgICAgICAgICAgICAvKiBwb3J0ICovCisgICAgICAgICAgICAgICAgICAgICAg ICB0bXB1c3JpZCwgICAgICAgICAgICAgICAvKiBhbHRlcm5hdGUgdXNlcm5hbWUgKi8KKyAgICAg ICAgICAgICAgICAgICAgICAgIHRtcHN0cmluZywgICAgICAgICAgICAgIC8qIHBhc3N3b3JkICov CisgICAgICAgICAgICAgICAgICAgICAgICBzc2hfdG1wY21kLCAgICAgICAgICAgICAvKiBjb21t YW5kIHRvIGV4ZWN1dGUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIHRtcHZlciwgICAgICAg ICAgICAgICAgIC8qIHBhcmFtMSAtIHNzaCB2ZXJzaW9uICovCisgICAgICAgICAgICAgICAgICAg ICAgICB0bXBzc2hfY2FzLCAgICAgICAgICAgICAvKiBwYXJhbTIgLSBzc2ggY2FzICAqLworICAg ICAgICAgICAgICAgICAgICAgICAgdG1weGZ3LCAgICAgICAgICAgICAgICAgLyogcGFyYW0zIC0g c3NoIHgxMWZ3ZCAqLworICAgICAgICAgICAgICAgICAgICAgICAgY3gsICAgICAgICAgICAgICAg ICAgICAgLyogZW50ZXIgQ09OTkVDVCBtb2RlICovCisgICAgICAgICAgICAgICAgICAgICAgICBz eCwgICAgICAgICAgICAgICAgICAgICAvKiBlbnRlciBTRVJWRVIgbW9kZSAqLworICAgICAgICAg ICAgICAgICAgICAgICAgenosICAgICAgICAgICAgICAgICAgICAgLyogY2xvc2UgY29ubmVjdGlv biBpZiBvcGVuICovCisgICAgICAgICAgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAg ICAgICAvKiBndWkgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICBp ZiAodG1wdXNyaWQpCisgICAgICAgICAgICAgICAgbWFrZXN0cigmdG1wdXNyaWQsTlVMTCk7Cisg ICAgICAgICAgICBpZiAoc3NoX3RtcGNtZCkKKyAgICAgICAgICAgICAgICBtYWtlc3RyKCZzc2hf dG1wY21kLE5VTEwpOworICAgICAgICB9CisjZW5kaWYgLyogU1NIQlVJTFRJTiAqLworCisjaWZk ZWYgVENQU09DS0VUCisgICAgICAgIGlmIChteW5ldCA9PSBORVRfVENQQikgeyAgICAgICAgLyog VENQL0lQIGNvbm5lY3Rpb24gKi8KKyAgICAgICAgICAgIGRlYnVnKEYxMTAsInNldGxpbiBzZXJ2 aWNlIDAiLHNydmJ1ZiwwKTsKKyAgICAgICAgICAgIGRlYnVnKEYxMTAsInNldGxpbiBob3N0IHMg MiIscywwKTsKKyAgICAgICAgICAgIGlmICgqcykgewkJCS8qIElmIHRoZXkgZ2F2ZSBhIGhvc3Qg bmFtZS4uLiAqLworICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsInNldGxpbiBob3N0IHMgMSIs cywwKTsKKyNpZmRlZiBOT0xJU1RFTgorICAgICAgICAgICAgICAgIGlmICgqcyA9PSAnKicpIHsK KyAgICAgICAgICAgICAgICAgICAgbWFrZXN0cigmc2xtc2csIkluY29taW5nIGNvbm5lY3Rpb25z IG5vdCBzdXBwb3J0ZWQiKTsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKAorICAgICAiP1Nv cnJ5LCBpbmNvbWluZyBjb25uZWN0aW9ucyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgdmVyc2lvbiBv ZiBLZXJtaXQuXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAg ICAgICAgICByZXR1cm4oLTkpOworICAgICAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBOT0xJU1RF TiAqLworI2lmZGVmIFJMT0dDT0RFCisgICAgICAgICAgICAgICAgLyogQWxsb3cgYSB1c2VybmFt ZSBpZiBybG9naW4gaXMgcmVxdWVzdGVkICovCisgICAgICAgICAgICAgICAgaWYgKG15bmV0ID09 IE5FVF9UQ1BCICYmCisgICAgICAgICAgICAgICAgICAgICh0dG5wcm90byA9PSBOUF9STE9HSU4g fHwgdHRucHJvdG8gPT0gTlBfSzVMT0dJTiB8fAorICAgICAgICAgICAgICAgICAgICAgdHRucHJv dG8gPT0gTlBfRUs1TE9HSU4gfHwgdHRucHJvdG8gPT0gTlBfSzRMT0dJTiB8fAorICAgICAgICAg ICAgICAgICAgICAgdHRucHJvdG8gPT0gTlBfRUs0TE9HSU4KKyAgICAgICAgICAgICAgICAgICAg KSkgeworICAgICAgICAgICAgICAgICAgICBpbnQgeTsKKyAgICAgICAgICAgICAgICAgICAgdWlk ZmxhZyA9IDA7CisgICAgICAgICAgICAgICAgICAgIC8qIENoZWNrIGZvciAiaG9zdDpzZXJ2aWNl IiAqLworICAgICAgICAgICAgICAgICAgICBmb3IgKCA7ICgqcyAhPSAnXDAnKSAmJiAoKnMgIT0g JzonKTsgcysrKSA7CisgICAgICAgICAgICAgICAgICAgIGlmICgqcykgeyAgIC8qIFNlcnZpY2Us IHNhdmUgaXQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICpzID0gTlVMOworICAgICAgICAg ICAgICAgICAgICAgICAgY2tzdHJuY3B5KHNydmJ1ZiwrK3MsU1JWQlVGU0laKTsKKyAgICAgICAg ICAgICAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAvKiBObyA6c2VydmljZSwgdGhlbiB1c2Ug ZGVmYXVsdC4gKi8KKyNpZmRlZiBWTVMKKyAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAo dHRucHJvdG8pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBOUF9STE9HSU46Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2tzdHJuY3B5KHNydmJ1ZiwiNTEzIixTUlZCVUZT SVopOyAvKiAibG9naW4iICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgTlBfSzRMT0dJTjoKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgY2FzZSBOUF9LNUxPR0lOOgorICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNrc3RybmNweShzcnZidWYsIjU0MyIsU1JWQlVGU0laKTsgLyogImtsb2dpbiIgKi8KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg Y2FzZSBOUF9FSzRMT0dJTjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBOUF9FSzVM T0dJTjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBja3N0cm5jcHkoc3J2YnVmLCIyMTA1 IixTUlZCVUZTSVopOyAvKiAiZWtsb2dpbiIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyNlbHNlIC8qIFZNUyAqLworICAg ICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0dG5wcm90bykgeworICAgICAgICAgICAgICAg ICAgICAgICAgICBjYXNlIE5QX1JMT0dJTjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBj a3N0cm5jcHkoc3J2YnVmLCJsb2dpbiIsU1JWQlVGU0laKTsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBOUF9LNExPR0lO OgorICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIE5QX0s1TE9HSU46CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY2tzdHJuY3B5KHNydmJ1Ziwia2xvZ2luIixTUlZCVUZTSVopOwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAg ICAgICBjYXNlIE5QX0VLNExPR0lOOgorICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIE5Q X0VLNUxPR0lOOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNrc3RybmNweShzcnZidWYs ImVrbG9naW4iLFNSVkJVRlNJWik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7 CisgICAgICAgICAgICAgICAgICAgICAgICB9CisjZW5kaWYgLyogVk1TICovCisgICAgICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKCFjb25maXJtZWQpIHsKKyAgICAg ICAgICAgICAgICAgICAgICAgIHkgPSBjbWZsZCgiVXNlcmlkIG9uIHJlbW90ZSBzeXN0ZW0iLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpZGJ1Ziwmcyx4eHN0cmluZyk7Cisg ICAgICAgICAgICAgICAgICAgICAgICBpZiAoeSA8IDAgJiYgeSAhPSAtMykKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChp bnQpc3RybGVuKHMpID4gNjMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlc3Ry KCZzbG1zZywiSW50ZXJuYWwgZXJyb3IiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBw cmludGYoIlNvcnJ5LCB0b28gbG9uZ1xuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg cmV0dXJuKC05KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg ICAgICAgIG1ha2VzdHIoJnRtcHVzcmlkLHMpOworICAgICAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgICAgfSBlbHNlIHsgICAgICAgIC8qIFRFTE5FVCBvciBTRVQgSE9TVCAqLworI2Vu ZGlmIC8qIFJMT0dDT0RFICovCisgICAgICAgICAgICAgICAgICAgIC8qIENoZWNrIGZvciAiaG9z dDpzZXJ2aWNlIiAqLworICAgICAgICAgICAgICAgICAgICBmb3IgKCA7ICgqcyAhPSAnXDAnKSAm JiAoKnMgIT0gJzonKTsgcysrKSA7CisgICAgICAgICAgICAgICAgICAgIGlmICgqcykgeyAgIC8q IFNlcnZpY2UsIHNhdmUgaXQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICpzID0gTlVMOwor ICAgICAgICAgICAgICAgICAgICAgICAgY2tzdHJuY3B5KHNydmJ1ZiwrK3MsU1JWQlVGU0laKTsK KyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghY29uZmlybWVkKSB7CisgICAgICAgICAg ICAgICAgICAgICAgICAvKiBObyA6c2VydmljZSwgbGV0IHRoZW0gdHlwZSBvbmUuICovCisgICAg ICAgICAgICAgICAgICAgICAgICBpZiAoKmxpbmUgIT0gJyonKSB7IC8qIE5vdCBpbmNvbWluZyAq LworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChteW5ldCA9PSBORVRfVENQQiAmJiB0 dG5wcm90byA9PSBOUF9LRVJNSVQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aWYgKCh4ID0gY21mbGQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICJUQ1Agc2VydmljZSBuYW1lIG9yIG51bWJlciIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJrZXJtaXQiLCZzLHh4c3RyaW5nKQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgPCAwICYmIHggIT0gLTMpCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHgpOworI2lmZGVmIFJMT0dDT0RFCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChteW5ldCA9PSBORVRfVENQQiAm JgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHRucHJvdG8gPT0gTlBf UkxPR0lOKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoeCA9IGNtZmxk KAorICAiVENQIHNlcnZpY2UgbmFtZSBvciBudW1iZXIsXG4gb3IgY2FycmlhZ2UgcmV0dXJuIGZv ciBybG9naW4gKDUxMykiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAibG9naW4iLCZzLHh4c3RyaW5nKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICkgPCAwICYmIHggIT0gLTMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcmV0dXJuKHgpOworI2lmZGVmIENLX0FVVEhFTlRJQ0FUSU9OCisjaWZkZWYgQ0tfS0VS QkVST1MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG15bmV0ID09IE5F VF9UQ1BCICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodHRucHJv dG8gPT0gTlBfSzRMT0dJTiB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdHRucHJvdG8gPT0gTlBfSzVMT0dJTikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaWYgKCh4ID0gY21mbGQoCisgICJUQ1Agc2VydmljZSBuYW1lIG9yIG51bWJlcixcbiBv ciBjYXJyaWFnZSByZXR1cm4gZm9yIGtsb2dpbiAoNTQzKSIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJrbG9naW4iLCZzLHh4c3RyaW5nKQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgPCAwICYmIHggIT0gLTMpCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICAgICAgICAgICAg ICAgICAgICAgIH0gZWxzZSBpZiAobXluZXQgPT0gTkVUX1RDUEIgJiYKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICh0dG5wcm90byA9PSBOUF9FSzRMT0dJTiB8fAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR0bnByb3RvID09IE5QX0VLNUxP R0lOKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHggPSBjbWZsZCgK KyAgIlRDUCBzZXJ2aWNlIG5hbWUgb3IgbnVtYmVyLFxuIG9yIGNhcnJpYWdlIHJldHVybiBmb3Ig ZWtsb2dpbiAoMjEwNSkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAiZWtsb2dpbiIsJnMseHhzdHJpbmcpCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKSA8IDAgJiYgeCAhPSAtMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICByZXR1cm4oeCk7CisjZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KKyNlbmRpZiAvKiBD S19BVVRIRU5USUNBVElPTiAqLworI2VuZGlmIC8qIFJMT0dDT0RFICovCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogRG8gbm90IHNldCBhIGRlZmF1bHQgdmFsdWUgaW4gdGhpcyBjYWxsICovCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIElmIHlvdSBkbyB0aGVuIGl0IHdpbGwgcHJldmVudCBl bnRyaWVzICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbiB0aGUgbmV0 d29yayBkaXJlY3RvcnkgZnJvbSBhY2Nlc3NpbmcgKi8KKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogYWx0ZXJuYXRlIHBvcnRzLiAgICAgICAgICAgICAgICAgICAgICAgICovCisK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh4ID0gY21mbGQoCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUQ1Agc2VydmljZSBuYW1l IG9yIG51bWJlciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICIiLCZzLHh4c3RyaW5nKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICkgPCAwICYmIHggIT0gLTMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0 dXJuKHgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg ICAgICAgIH0gZWxzZSB7IC8qIEluY29taW5nIGNvbm5lY3Rpb24gKi8KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpZiAoKHggPSBjbWZsZCgiVENQIHNlcnZpY2UgbmFtZSBvciBudW1iZXIi LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiLCZzLHh4c3Ry aW5nKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA8IDAgJiYgeCAhPSAtMykK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgqcykgICAgICAgICAvKiBJ ZiB0aGV5IGdhdmUgYSBzZXJ2aWNlLCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICBja3N0 cm5jcHkoc3J2YnVmLHMsU1JWQlVGU0laKTsgLyogY29weSBpdCAqLworICAgICAgICAgICAgICAg ICAgICAgICAgZGVidWcoRjExMCwic2V0bGluIHNlcnZpY2UgMC41IixzcnZidWYsMCk7CisgICAg ICAgICAgICAgICAgICAgIH0KKyNpZmRlZiBSTE9HQ09ERQorICAgICAgICAgICAgICAgIH0KKyNl bmRpZiAvKiBSTE9HQ09ERSAqLworICAgICAgICAgICAgICAgIGlmICghY29uZmlybWVkKSB7Cisg ICAgICAgICAgICAgICAgICAgIGNoYXIgKiBkZWZwcm90bzsKKyAgICAgICAgICAgICAgICAgICAg c3dpdGNoICh0dG5wcm90bykgeworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgTlBfUkxPR0lO OgorICAgICAgICAgICAgICAgICAgICAgICAgZGVmcHJvdG8gPSAiL3Jsb2dpbiI7CisgICAgICAg ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIE5QX0s0 TE9HSU46CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZwcm90byA9ICIvazRsb2dpbiI7Cisg ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNl IE5QX0s1TE9HSU46CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZwcm90byA9ICIvazVsb2dp biI7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg ICBjYXNlIE5QX0VLNExPR0lOOgorICAgICAgICAgICAgICAgICAgICAgICAgZGVmcHJvdG8gPSAi L2VrNGxvZ2luIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg ICAgICAgICAgIGNhc2UgTlBfRUs1TE9HSU46CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZw cm90byA9ICIvZWs1bG9naW4iOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICAgICAgICAgICAgICAgY2FzZSBOUF9LRVJNSVQ6CisgICAgICAgICAgICAgICAgICAgICAg Y2FzZSBOUF9URUxORVQ6CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZwcm90byA9ICIvdGVs bmV0IjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZwcm90byA9ICIvZGVmYXVs dCI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKCh4ID0g Y21rZXkodGNwcmF3dGFiLG50Y3ByYXcsIlN3aXRjaCIsZGVmcHJvdG8sCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHh4c3RyaW5nKSkgPCAwKSB7CisgICAgICAgICAgICAgICAg ICAgICAgICBpZiAoeCAhPSAtMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHgp OworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKHggPSBjbWNmbSgpKSA8IDApCisg ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgICAgICAgICAgICAg fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhd2ZsZyA9IHg7CisgICAgICAgICAg ICAgICAgICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApCisgICAgICAgICAgICAgICAgICAg ICAgICAgIHJldHVybih4KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlYnVnKEYxMTAsInNldGxpbiBwcmUtY3hf bmV0IGxpbmUiLGxpbmUsMCk7CisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJzZXRsaW4gcHJlLWN4 X25ldCBzcnZidWYiLHNydmJ1ZiwwKTsKKyAgICAgICAgICAgIHggPSBjeF9uZXQoIG15bmV0LCAg ICAgICAgICAgICAgICAgIC8qIG5ldHR5cGUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIHJh d2ZsZyAgICAgICAgICAgICAgICAgIC8qIHByb3RvY29sICovLAorICAgICAgICAgICAgICAgICAg ICAgICAgbGluZSwgICAgICAgICAgICAgICAgICAgLyogaG9zdCAqLworICAgICAgICAgICAgICAg ICAgICAgICAgc3J2YnVmLCAgICAgICAgICAgICAgICAgLyogcG9ydCAqLworICAgICAgICAgICAg ICAgICAgICAgICAgdG1wdXNyaWQsICAgICAgICAgICAgICAgLyogYWx0ZXJuYXRlIHVzZXJuYW1l ICovCisgICAgICAgICAgICAgICAgICAgICAgICB0bXBzdHJpbmcsICAgICAgICAgICAgICAvKiBw YXNzd29yZCAqLworICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgICAgICAgICAgICAgICAg ICAgLyogY29tbWFuZCB0byBleGVjdXRlICovCisgICAgICAgICAgICAgICAgICAgICAgICBhX3R5 cGUsICAgICAgICAgICAgICAgICAvKiBwYXJhbTEgLSB0ZWxuZXQgYXV0aHR5cGUgKi8KKyAgICAg ICAgICAgICAgICAgICAgICAgIGVfdHlwZSwgICAgICAgICAgICAgICAgIC8qIHBhcmFtMiAtIHRl bG5ldCBlbmN0eXBlICAqLworICAgICAgICAgICAgICAgICAgICAgICAgd2FpdCwgICAgICAgICAg ICAgICAgICAgLyogcGFyYW0zIC0gdGVsbmV0IHdhaXQgKi8KKyAgICAgICAgICAgICAgICAgICAg ICAgIGN4LCAgICAgICAgICAgICAgICAgICAgIC8qIGVudGVyIENPTk5FQ1QgbW9kZSAqLworICAg ICAgICAgICAgICAgICAgICAgICAgc3gsICAgICAgICAgICAgICAgICAgICAgLyogZW50ZXIgU0VS VkVSIG1vZGUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIHp6LCAgICAgICAgICAgICAgICAg ICAgIC8qIGNsb3NlIGNvbm5lY3Rpb24gaWYgb3BlbiAqLworICAgICAgICAgICAgICAgICAgICAg ICAgMCAgICAgICAgICAgICAgICAgICAgICAgLyogZ3VpICovCisgICAgICAgICAgICAgICAgICAg ICAgICApOworICAgICAgICB9CisjZW5kaWYgLyogVENQU09DS0VUICovCisKKyNpZmRlZiBDS19T RUNVUklUWQorICAgICAgICBpZiAodG1wc3RyaW5nKQorICAgICAgICAgICAgbWFrZXN0cigmdG1w c3RyaW5nLE5VTEwpOworI2VuZGlmIC8qIENLX1NFQ1VSSVRZICovCisgICAgICAgIGlmICh0bXB1 c3JpZCkKKyAgICAgICAgICAgIG1ha2VzdHIoJnRtcHVzcmlkLE5VTEwpOworCWRlYnVnKEYxMTEs InNldGxpbiBjeF9uZXQiLGxpbmUseCk7CisJcmV0dXJuKHgpOworI2VuZGlmIC8qIE5FVENPTk4g Ki8KKyAgICB9CisKKy8qIFNlcmlhbCB0dHkgZGV2aWNlLCBwb3NzaWJseSBtb2RlbSwgY29ubmVj dGlvbi4uLiAqLworCisjaWZkZWYgT1MyCisvKgorICBVc2VyIGNhbiB0eXBlOgorICAgIENPTTEu LkNPTTggPSBSZWd1bGFyIENPTSBwb3J0CisgICAgMS4uOCAgICAgICA9IFN5bm9ueW0gZm9yIENP TTEuLkNPTTgsIGlzIHRyYW5zbGF0ZWQgdG8gQ09NMS4uQ09NOAorICAgIF9uICAgICAgICAgPSAo biBpcyBhIG51bWJlcikgPSBvcGVuIGZpbGUgaGFuZGxlCisgICAgc3RyaW5nICAgICA9IGFueSB0 ZXh0IHN0cmluZyA9IG5hbWUgb2Ygc29tZSBvdGhlciBraW5kIG9mIGRldmljZSwKKyAgICAgICAg ICAgICAgICAgdGFrZW4gbGl0ZXJhbGx5LCBhcyBnaXZlbi4KKyovCisgICAgcyA9ICJDb21tdW5p Y2F0aW9uIGRldmljZSBuYW1lIjsKKworI2lmZGVmIENLX1RBUEkKKyAgICBpZiAoVEFQSUF2YWls KQorICAgICAgY2t0YXBpQnVpbGRMaW5lVGFibGUoJnRhcGlsaW5ldGFiLCAmX3RhcGlsaW5ldGFi LCAmbnRhcGlsaW5lKTsKKyAgICBpZiAoISh0YXBpbGluZXRhYiAmJiBfdGFwaWxpbmV0YWIgJiYg bnRhcGlsaW5lID4gMCkgJiYKKwl4eCA9PSBYWVRBUElfTElOICkgeworCW1ha2VzdHIoJnNsbXNn LCJUQVBJIGRldmljZSBub3QgY29uZmlndXJlZCIpOworCXByaW50ZigiXG5ObyBUQVBJIExpbmUg RGV2aWNlcyBhcmUgY29uZmlndXJlZCBmb3IgdGhpcyBzeXN0ZW1cbiIpOworCXJldHVybigtOSk7 CisgICAgfQorICAgIGlmICh4eCA9PSBYWVRBUElfTElOKSB7CQkvKiBEZWZhdWx0IChmaXJzdCkg VEFQSSBsaW5lICovCisJcyA9ICJ0YXBpIjsJCQkvKiAod2hhdGV2ZXIgaXQgaXMpICovCisgICAg fSBlbHNlIHsJCQkJLyogUXVlcnkgdGhlIHVzZXIgKi8KKyNlbmRpZiAvKiBDS19UQVBJICovCisK Ky8qIE5vdyBwYXJzZSBvcHRpb25hbCBzd2l0Y2hlcyBhbmQgdGhlbiBkZXZpY2UgbmFtZSAqLwor CisJY29uZmlybWVkID0gMDsKKwljbWZkYmkoJnN3LF9DTUtFWSwiRGV2aWNlIG5hbWUsIG9yIHN3 aXRjaCIsCisJICAgICAgICIiLCIiLG5wc2x0YWIsNCx4eHN0cmluZyxwc2x0YWIsJmZsKTsKKwlj bWZkYmkoJmZsLF9DTUZMRCwiIixkZnR0eSwiIiwwLDAseHhzdHJpbmcsTlVMTCxOVUxMKTsKKwl3 aGlsZSAoMSkgeworCSAgICB4ID0gY21mZGIoJnN3KTsKKwkgICAgZGVidWcoRjEwMSwic2V0bGlu IGNtZmRiIiwiIix4KTsKKwkgICAgaWYgKHggPCAwKQorCSAgICAgIGlmICh4ICE9IC0zKQorCQly ZXR1cm4oeCk7CisJICAgIGlmICh4ID09IC0zKSB7CisJCWlmICgoeCA9IGNtY2ZtKCkpIDwgMCkg eworCQkgICAgcmV0dXJuKHgpOworCQl9IGVsc2UgeworCQkgICAgY29uZmlybWVkID0gMTsKKwkJ ICAgIGJyZWFrOworCQl9CisJICAgIH0KKwkgICAgaWYgKGNtcmVzdWx0LmZjb2RlID09IF9DTUZM RCkgeworCQlzID0gY21yZXN1bHQuc3Jlc3VsdDsKKwkJYnJlYWs7CisJICAgIH0gZWxzZSBpZiAo Y21yZXN1bHQuZmNvZGUgPT0gX0NNS0VZKSB7CisJCXN3aXRjaCAoY21yZXN1bHQubnJlc3VsdCkg eworCQkgIGNhc2UgU0xfQ05YOgkJLyogL0NPTk5FQ1QgKi8KKwkJICAgIGN4ID0gMTsKKwkJICAg IHN4ID0gMDsKKwkJICAgIGJyZWFrOworCQkgIGNhc2UgU0xfU1JWOgkJLyogL1NFUlZFUiAqLwor CQkgICAgY3ggPSAwOworCQkgICAgc3ggPSAxOworCQkgICAgYnJlYWs7CisJCSAgY2FzZSBTTF9T SFI6CQkvKiAvU0hBUkUgKi8KKwkJICAgIHNociA9IDE7CisJCSAgICBicmVhazsKKwkJICBjYXNl IFNMX05TSDoJCS8qIC9OT1NIQVJFICovCisJCSAgICBzaHIgPSAwOworCQkgICAgYnJlYWs7CisJ CX0KKwkgICAgfQorCX0KKyNpZmRlZiBDS19UQVBJCisgICAgfQorI2VuZGlmIC8qIENLX1RBUEkg Ki8KKworICAgIGRlYnVnKEYxMTAsIk9TMiBTRVQgUE9SVCBzIixzLDApOworICAgIHkgPSBsb29r dXAob3MyZGV2dGFiLHMsbm9zMmRldiwmeCk7IC8qIExvb2sgdXAgaW4ga2V5d29yZCB0YWJsZSAq LworICAgIGRlYnVnKEYxMDEsIk9TMiBTRVQgUE9SVCB4IiwiIix4KTsKKyAgICBkZWJ1ZyhGMTAx LCJPUzIgU0VUIFBPUlQgeSIsIiIseSk7CisgICAgaWYgKCh5ID4gLTEpICYmICh4ID49IDAgJiYg eCA8IDgpKSB7IC8qIFVzZXIgdHlwZWQgYSBkaWdpdCAxLi44ICovCisJcyA9IG9zMmRldnRhYlt4 KzhdLmt3ZDsJCS8qIFN1YnN0aXRpdGUgaXRzIHJlYWwgbmFtZSAqLworI2lmZGVmIE5UCisJeHh0 YXBpID0gMDsKKyNlbHNlIC8qIE5UICovCisJeHhzbGlwID0geHhwcHAgPSAwOworI2VuZGlmIC8q IE5UICovCisJZGVidWcoRjExMCwiT1MyIFNFVCBQT1JUIHN1YnN0IHMiLHMsIiIpOworI2lmbmRl ZiBOVAorICAgIH0gZWxzZSBpZiAoKHkgPi0xKSAmJiAoeCA+PSAxNiAmJiB4IDwgMjQpKSB7IC8q IFNMSVAgYWNjZXNzICovCisJcyA9IG9zMmRldnRhYlt4LThdLmt3ZDsJCS8qIFN1YnN0aXRpdGUg aXRzIHJlYWwgbmFtZSAqLworCWRlYnVnKEYxMTAsIk9TMiBTRVQgUE9SVCBTTElQIHN1YnN0IHMi LHMsIiIpOworCXh4c2xpcCA9IDE7CisJeHhwcHAgID0gMDsKKyAgICB9IGVsc2UgaWYgKCh5ID4t MSkgJiYgKHggPj0gMjQgJiYgeCA8IDMyKSkgeyAvKiBQUFAgYWNjZXNzICovCisJcyA9IG9zMmRl dnRhYlt4LTE2XS5rd2Q7CS8qIFN1YnN0aXRpdGUgaXRzIHJlYWwgbmFtZSAqLworCWRlYnVnKEYx MTAsIk9TMiBTRVQgUE9SVCBQUFAgc3Vic3QgcyIscywiIik7CisJeHhwcHAgPSAxOworCXh4c2xp cCA9IDA7CisJaWYgKCh5ID0gY21rZXkob3MycHBwdGFiLAorCQkgICAgICAgbm9zMnBwcCwKKwkJ ICAgICAgICJQUFAgZHJpdmVyIGludGVyZmFjZSIsCisJCSAgICAgICAicHBwMCIsCisJCSAgICAg ICB4eHN0cmluZykKKwkgICAgICkgPCAwKQorCSAgcmV0dXJuKHkpOworCWRlYnVnKEYxMDEsIk9T MiBTRVQgUE9SVCBQUFAgSU5URVJGQUNFIHkiLCIiLHkpOworCXh4cHBwID0gKHkgJSAxMCkgKyAx OworI2VuZGlmIC8qIE5UICovCisgICAgfSBlbHNlIGlmICgqcyA9PSAnXycpIHsJCS8qIFVzZXIg dXNlZCAiXyIgcHJlZml4ICovCisJcysrOwkJCQkvKiBSZW1vdmUgaXQgKi8KKwkvKiBSZXN0IG11 c3QgYmUgbnVtZXJpYyAqLworCWRlYnVnKEYxMTAsIk9TMiBTRVQgUE9SVCBIQU5ETEUgX3N1YnN0 IHMiLHMsMCk7CisJaWYgKCFyZGlnaXRzKHMpKSB7CisJICAgIG1ha2VzdHIoJnNsbXNnLCJJbnZh bGlkIGZpbGUgaGFuZGxlIik7CisJICAgIHByaW50ZigiP0ludmFsaWQgZm9ybWF0IGZvciBmaWxl IGhhbmRsZVxuIik7CisJICAgIHJldHVybigtOSk7CisJfQorI2lmZGVmIE5UCisJeHh0YXBpID0g MDsKKyNlbHNlIC8qIE5UICovCisJeHhzbGlwID0geHhwcHAgPSAwOworI2VuZGlmIC8qIE5UICov CisgICAgfSBlbHNlIHsJCQkJLyogQSBub3JtYWwgQ09NeCBwb3J0IG9yIGEgc3RyaW5nICovCisJ cyA9IGJyc3RyaXAocyk7CQkJLyogU3RyaXAgYnJhY2VzIGlmIGFueSAqLworI2lmZGVmIE5UCisj aWZkZWYgQ0tfVEFQSQorCS8qIFdpbmRvd3MgVEFQSSBzdXBwb3J0IC0gTG9vayB1cCBpbiBrZXl3 b3JkIHRhYmxlICovCisJaWYgKHRhcGlsaW5ldGFiICYmIF90YXBpbGluZXRhYiAmJiBudGFwaWxp bmUgPiAwKSB7CisJICAgIGlmICghY2tzdHJjbXAocywidGFwaSIsNCwwKSkgeworCisJCS8qIEZp bmQgb3V0IHdoYXQgdGhlIGxvd2VzdCBudW1iZXJlZCBUQVBJIGRldmljZSBpcyAqLworCQkvKiBh bmQgdXNlIGl0IGFzIHRoZSBkZWZhdWx0LiAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkJaW50 IGogPSA5OTk5LCBrID0gLTE7CisJCWZvciAoaSA9IDA7IGkgPCBudGFwaWxpbmU7IGkrKykgewor CQkgICAgaWYgKHRhcGlsaW5ldGFiW2ldLmt3dmFsIDwgaikgeworCQkJaiA9IHRhcGlsaW5ldGFi W2ldLmt3dmFsOworCQkJayA9IGk7CisJCSAgICB9CisJCX0KKwkJaWYgKGsgPj0gMCkKKwkJICBz ID0gX3RhcGlsaW5ldGFiW2tdLmt3ZDsKKwkJZWxzZQorCQkgIHMgPSAiIjsKKworCQlpZiAoKHkg PSBjbWtleShfdGFwaWxpbmV0YWIsbnRhcGlsaW5lLAorCQkJICAgICAgICJUQVBJIGRldmljZSBu YW1lIixzLHh4c3RyaW5nKSkgPCAwKQorCQkgIHJldHVybih5KTsKKworCQl4eHRhcGkgPSAxOwor CisJCS8qIEdldCB0aGUgbm9uIFVuZGVyc2NvcmVkIHN0cmluZyAqLworCQlmb3IgKGkgPSAwOyBp IDwgbnRhcGlsaW5lOyBpKysgKSB7CisJCSAgICBpZiAodGFwaWxpbmV0YWJbaV0ua3d2YWwgPT0g eSkgeworCQkJcyA9IHRhcGlsaW5ldGFiW2ldLmt3ZDsKKwkJCWJyZWFrOworCQkgICAgfQorCQl9 CisJICAgIH0gZWxzZQorCSAgICAgIHh4dGFwaSA9IDA7CisJfQorI2VuZGlmIC8qIENLX1RBUEkg Ki8KKyNlbHNlIC8qIE5UICovCisJLyogbm90IE9TLzIgU0xJUCBvciBQUFAgKi8KKwl4eHNsaXAg PSB4eHBwcCA9IDA7CisjZW5kaWYgLyogTlQgKi8KKyAgICB9CisgICAgY2tzdHJuY3B5KHRtcGJ1 ZixzLFRNUEJVRlNJWik7CS8qIENvcHkgdG8gYSBzYWZlIHBsYWNlICovCisgICAgcyA9IHRtcGJ1 ZjsKKyAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApCisgICAgICByZXR1cm4oeCk7CisKKyNlbHNl IC8qICFPUzIgKi8KKworICAgIGNtZmRiaSgmc3csX0NNS0VZLCJEZXZpY2UgbmFtZSwgb3Igc3dp dGNoIiwKKwkgICAiIiwiIixucHNsdGFiLDQseHhzdHJpbmcscHNsdGFiLCZ0eCk7CisgICAgY21m ZGJpKCZ0eCxfQ01UWFQsIiIsZGZ0dHksIiIsMCwwLHh4c3RyaW5nLE5VTEwsTlVMTCk7CisgICAg d2hpbGUgKCFjb25maXJtZWQpIHsKKwl4ID0gY21mZGIoJnN3KTsKKwlkZWJ1ZyhGMTAxLCJzZXRs aW4gY21mZGIiLCIiLHgpOworCWlmICh4IDwgMCkKKwkgIGlmICh4ICE9IC0zKQorCSAgICByZXR1 cm4oeCk7CisJaWYgKHggPT0gLTMpIHsKKwkgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSB7CisJ CXJldHVybih4KTsKKwkgICAgfSBlbHNlIHsKKwkJY29uZmlybWVkID0gMTsKKwkJYnJlYWs7CisJ ICAgIH0KKwl9CisJc3dpdGNoIChjbXJlc3VsdC5mY29kZSkgeworCSAgY2FzZSBfQ01UWFQ6CisJ ICAgIGNrc3RybmNweSh0bXBidWYsY21yZXN1bHQuc3Jlc3VsdCxUTVBCVUZTSVopOworCSAgICBz ID0gdG1wYnVmOworCSAgICBkZWJ1ZyhGMTEwLCJzZXRsaW4gQ01UWFQiLHRtcGJ1ZiwwKTsKKwkg ICAgY29uZmlybWVkID0gMTsKKwkgICAgYnJlYWs7CisJICBjYXNlIF9DTUtFWToJCQkvKiBTd2l0 Y2ggKi8KKwkgICAgZGVidWcoRjEwMSwic2V0bGluIENNS0VZIix0bXBidWYsY21yZXN1bHQubnJl c3VsdCk7CisJICAgIHN3aXRjaCAoY21yZXN1bHQubnJlc3VsdCkgeworCSAgICAgIGNhc2UgU0xf Q05YOgkJLyogL0NPTk5FQ1QgKi8KKwkJY3ggPSAxOworCQlzeCA9IDA7CisJCWJyZWFrOworCSAg ICAgIGNhc2UgU0xfU1JWOgkJLyogL1NFUlZFUiAqLworCQljeCA9IDA7CisJCXN4ID0gMTsKKwkJ YnJlYWs7CisjaWZkZWYgVk1TCisJICAgICAgY2FzZSBTTF9TSFI6CQkvKiAvU0hBUkUgKi8KKwkJ c2hyID0gMTsKKwkJYnJlYWs7CisJICAgICAgY2FzZSBTTF9OU0g6CQkvKiAvTk9TSEFSRSAqLwor CQlzaHIgPSAwOworCQlicmVhazsKKyNlbmRpZiAvKiBWTVMgKi8KKwkgICAgfQorCSAgICBjb250 aW51ZTsKKwkgIGRlZmF1bHQ6CisJICAgIGRlYnVnKEYxMDEsInNldGxpbiBiYWQgY21mZGIgcmVz dWx0IiwiIixjbXJlc3VsdC5mY29kZSk7CisJICAgIG1ha2VzdHIoJnNsbXNnLCJJbnRlcm5hbCBl cnJvciIpOworCSAgICBwcmludGYoIj9JbnRlcm5hbCBwYXJzaW5nIGVycm9yXG4iKTsKKwkgICAg cmV0dXJuKC05KTsKKwl9CisgICAgfQorI2VuZGlmIC8qIE9TMiAqLworICAgIGlmICghY29uZmly bWVkKQorICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKQorCXJldHVybih4KTsKKworICAgIGRl YnVnKEYxMTAsInNldGxpbiBwcmUtY3hfc2VyaWFsIHMiLHMsMCk7CisgICAgZGVidWcoRjExMCwi c2V0bGluIHByZS1jeF9zZXJpYWwgbGluZSIsbGluZSwwKTsKKyAgICB4ID0gY3hfc2VyaWFsKHMs Y3gsc3gsc2hyLHp6LDAsCisjaWZkZWYgT1MyCisjaWZkZWYgTlQKKyAgICAgICAgICAgICAgICAg ICAoeHh0YXBpID8gQ1hfVEFQSSA6IDApCisjZWxzZQorICAgICAgICAgICAgICAgICAgICh4eHNs aXAgPyBDWF9TTElQIDogMCkgfCAoeHhwcHAgPyBDWF9QUFAgOiAwKQorI2VuZGlmIC8qIE5UICov CisjZWxzZSAvKiBPUzIgKi8KKyAgICAgICAgICAgICAgICAgICAwCisjZW5kaWYgLyogT1MyICov CisgICAgICAgICAgICAgICAgICAgKTsKKyAgICBkZWJ1ZyhGMTExLCJzZXRsaW4gY3hfc2VyaWFs IixsaW5lLHgpOworICAgIHJldHVybih4KTsKK30KKyNlbmRpZiAvKiBOT0xPQ0FMICovCisKKyNp ZmRlZiBDS0NIQU5ORUxJTworLyoKKyAgQy1MaWJyYXJ5IGJhc2VkIGZpbGUtaS9vIHBhY2thZ2Ug Zm9yIHNjcmlwdHMuICBUaGlzIHNob3VsZCBiZSBwb3J0YWJsZSB0bworICBhbGwgQy1LZXJtaXQg dmVyc2lvbnMgc2luY2UgaXQgdXNlcyB0aGUgc2FtZSBBUElzIHdlIGhhdmUgYWx3YXlzIHVzZWQg Zm9yCisgIHByb2Nlc3NpbmcgY29tbWFuZCBmaWxlcy4gIFRoZSBlbnRpcmUgY2hhbm5lbCBpL28g cGFja2FnZSBpcyBjb250YWluZWQKKyAgaGVyZWluLCBhcGFydCBmcm9tIHNvbWUga2V5d29yZCB0 YWJsZSBlbnRyaWVzIGluIHRoZSBtYWluIGtleXdvcmQgdGFibGUKKyAgYW5kIHRoZSBoZWxwIHRl eHQgaW4gdGhlIEhFTFAgY29tbWFuZCBtb2R1bGUuCisKKyAgT24gcGxhdGZvcm1zIGxpa2UgVk1T IGFuZCBWT1MsIHRoaXMgcGFja2FnZSBoYW5kbGVzIG9ubHkgVU5JWC1zdHlsZQorICBzdHJlYW0g ZmlsZXMuICBJZiBkZXNpcmVkLCBpdCBjYW4gYmUgcmVwbGFjZWQgZm9yIHRob3NlIHBsYXRmb3Jt cyBieQorICA8Iz5pZmRlZidpbmcgb3V0IHRoaXMgY29kZSBhbmQgYWRkaW5nIHRoZSBlcXVpdmFs ZW50IHJlcGxhY2VtZW50IHJvdXRpbmVzCisgIHRvIHRoZSBjaz9maW8uYyBtb2R1bGUsIGUuZy4g Zm9yIFJNUy1iYXNlZCBmaWxlIGkvbyBpbiBja3ZmaW8uYy4KKyovCisjaWZuZGVmIE5PU1RBVAor I2lmZGVmIFZNUworLyogMjAxMC0wMy0wOSBTTVMuICBWQVggQyBuZWVkcyBoZWxwIHRvIGZpbmQg InN5cyIuICBJdCdzIGVhc2llciBub3QgdG8gdHJ5LiAqLworI2luY2x1ZGUgPHN0YXQuaD4KKyNl bHNlIC8qIGRlZiBWTVMgKi8KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2VuZGlmIC8qIGRlZiBW TVMgW2Vsc2VdICovCisjZW5kaWYgLyogTk9TVEFUICovCisKKyNpZmRlZiBOTENIQVIKK3N0YXRp YyBpbnQgel9sdCA9IDE7ICAgICAgICAgICAgICAgICAgICAvKiBMZW5ndGggb2YgbGluZSB0ZXJt aW5hdG9yICovCisjZWxzZQorc3RhdGljIGludCB6X2x0ID0gMjsKKyNlbmRpZiAvKiBOTENIQVIg Ki8KKworc3RydWN0IGNrel9maWxlIHsgICAgICAgICAgICAgICAgICAgICAgIC8qIEMtS2VybWl0 IGZpbGUgc3RydWN0ICovCisgICAgRklMRSAqIHpfZnA7ICAgICAgICAgICAgICAgICAgICAgICAg LyogSW5jbHVkZXMgdGhlIEMtTGliIGZpbGUgc3RydWN0ICovCisgICAgdW5zaWduZWQgaW50IHpf ZmxhZ3M7ICAgICAgICAgICAgICAgLyogUGx1cyBDLUtlcm1pdCBtb2RlIGZsYWdzLCAqLworICAg IENLX09GRl9UIHpfbmxpbmU7CQkJLyogY3VycmVudCBsaW5lIG51bWJlciBpZiBrbm93biwgKi8K KyAgICBjaGFyIHpfbmFtZVtDS01BWFBBVEgrMl07ICAgICAgICAgICAvKiBhbmQgdGhlIGZpbGUn cyBuYW1lLiAqLworfTsKK3N0YXRpYyBzdHJ1Y3QgY2t6X2ZpbGUgKiogel9maWxlID0gTlVMTDsg LyogQXJyYXkgb2YgQy1LZXJtaXQgZmlsZSBzdHJ1Y3RzICovCitzdGF0aWMgaW50IHpfaW5pdGVk ID0gMDsgICAgICAgICAgICAgICAgLyogRmxhZyBmb3IgYXJyYXkgaW5pdGlhbGl6ZWQgKi8KK2lu dCB6X21heGNoYW4gPSBaX01BWENIQU47ICAgICAgICAgICAgICAvKiBNYXggbnVtYmVyIG9mIEMt S2VybWl0IGNoYW5uZWxzICovCitpbnQgel9vcGVubWF4ID0gQ0tNQVhPUEVOOyAgICAgICAgICAg ICAgLyogTWF4IG51bWJlciBvZiBvcGVuIGZpbGVzIG92ZXJhbGwgKi8KK2ludCB6X25vcGVuID0g MDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBIb3cgbWFueSBjaGFubmVscyBwcmVzZW50bHkg b3BlbiAqLworaW50IHpfZXJyb3IgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1vc3Qg cmVjZW50IGVycm9yICovCitpbnQgel9maWxjb3VudCA9IC0xOyAgICAgICAgICAgICAgICAgICAg LyogTW9zdCByZWNlbnQgRklMRSBDT1VOVCByZXN1bHQgKi8KKworI2RlZmluZSBSRF9MSU5FIDAg ICAgICAgICAgICAgICAgICAgICAgIC8qIEZJTEUgUkVBRCBvcHRpb25zICovCisjZGVmaW5lIFJE X0NIQVIgMQorI2RlZmluZSBSRF9TSVpFIDIKKyNkZWZpbmUgUkRfVFJJTSA4CQkJLyogTGlrZSBT bm9ib2wgJlRSSU0gPSAxICovCisjZGVmaW5lIFJEX1VOVEEgOQkJCS8qIFVudGFiaWZ5ICovCisK KyNkZWZpbmUgV1JfTElORSBSRF9MSU5FICAgICAgICAgICAgICAgICAvKiBGSUxFIFdSSVRFIG9w dGlvbnMgKi8KKyNkZWZpbmUgV1JfQ0hBUiBSRF9DSEFSCisjZGVmaW5lIFdSX1NJWkUgUkRfU0la RQorI2RlZmluZSBXUl9TVFJJIDMKKyNkZWZpbmUgV1JfTFBBRCA0CisjZGVmaW5lIFdSX1JQQUQg NQorCisjaWZkZWYgVU5JWAorZXh0ZXJuIGludCBja21heGZpbGVzOyAgICAgICAgICAgICAgICAg IC8qIEZpbGxlZCBpbiBieSBzeXNpbml0KCkuICovCisjZW5kaWYgLyogVU5JWCAqLworCisvKiBT ZWUgY2tja2VyLmggZm9yIGVycm9yIG51bWJlcnMgKi8KKy8qIFNlZSBja2NkZWIuaCBmb3IgWl9N QVhDSEFOIGFuZCBDS01BWE9QRU4gZGVmaW5pdGlvbnMgKi8KKy8qIE5PVEU6IEZvciBWTVMgd2Ug bWlnaHQgYmUgYWJsZSB0byBmaWxsIGluIGNrbWF4ZmlsZXMgKi8KKy8qIGZyb20gRklMTE0gYW5k IENIQU5ORUxDTlQgLS0gZmluZCBvdXQgYWJvdXQgdGhlc2UuLi4gKi8KKworc3RhdGljIGNoYXIg KiBmb3BuYXJnc1tdID0geyAgICAgICAgICAgIC8qIE1vZGUgY29tYmluYXRpb25zIGZvciBmb3Bl bigpICovCisjaWZkZWYgQ09NTUVOVAorICAgIC8qIEFsbCBjb21iaW5hdGlvbnMgb2YgcndhICov CisgICAgIiIsICAiciIsICAidyIsICAicnciLCAgImEiLCAgInJhIiwgICJ3YSIsICAicndhIiwg LyogVGV4dCBtb2RlICovCisgICAgImIiLCAicmIiLCAid2IiLCAicndiIiwgImFiIiwgInJhYiIs ICJ3YWIiLCAicndhYiIgLyogQmluYXJ5IG1vZGUgKi8KKyNlbHNlCisgICAgLyogQ29tYmluYXRp b25zIGFuZCBzeW50YXggcGVybWl0dGVkIGJ5IEMgbGlicmFyaWVzLi4uICovCisgICAgIiIsICAi ciIsICAidyIsICAicisiLCAgImEiLCAgIiIsICAgImEiLCAgIiIsIC8qIFRleHQgbW9kZSAqLwor I2lmZGVmIE9TMgorICAgICIiLCAgInJiIiwgIndiIiwgInIrYiIsICJhYiIsICIiLCAgICJhYiIs ICIiIC8qIEJpbmFyeSBtb2RlcyBmb3IgSzk1ICovCisjZWxzZQorI2lmZGVmIFZNUworICAgICIi LCAgInJiIiwgIndiIiwgInIrYiIsICJhYiIsICIiLCAgICJhYiIsICIiIC8qIEJpbmFyeSBtb2Rl cyBmb3IgVk1TICovCisjZWxzZQorICAgICIiLCAgInIiLCAgICJ3IiwgInIrIiwgICJhIiwgICIi LCAgICJhIiwgICIiIC8qIEJpbmFyeSBtb2RlcyBmb3IgVU5JWCAqLworI2VuZGlmIC8qIFZNUyAq LworI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KK307CitzdGF0aWMgaW50 IG5mb3BuYXJncyA9IHNpemVvZihmb3BuYXJncykgLyBzaXplb2YoY2hhciAqKTsKKworY2hhciAq ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVycm9yIG1lc3NhZ2VzICovCitj a2ZlcnJvcihuKSBpbnQgbjsgeworICAgIHN3aXRjaCAobikgeworICAgICAgY2FzZSBGWF9ORVI6 IHJldHVybigiTm8gZXJyb3IiKTsKKyAgICAgIGNhc2UgRlhfU1lTOiByZXR1cm4oY2tfZXJyc3Ry KCkpOworICAgICAgY2FzZSBGWF9FT0Y6IHJldHVybigiRW5kIG9mIGZpbGUiKTsKKyAgICAgIGNh c2UgRlhfTk9QOiByZXR1cm4oIkZpbGUgbm90IG9wZW4iKTsKKyAgICAgIGNhc2UgRlhfQ0hOOiBy ZXR1cm4oIkNoYW5uZWwgb3V0IG9mIHJhbmdlIik7CisgICAgICBjYXNlIEZYX1JORzogcmV0dXJu KCJQYXJhbWV0ZXIgb3V0IG9mIHJhbmdlIik7CisgICAgICBjYXNlIEZYX05NRjogcmV0dXJuKCJU b28gbWFueSBmaWxlcyBvcGVuIik7CisgICAgICBjYXNlIEZYX0ZPUDogcmV0dXJuKCJPcGVyYXRp b24gY29uZmxpY3RzIHdpdGggT1BFTiBtb2RlIik7CisgICAgICBjYXNlIEZYX05ZSTogcmV0dXJu KCJPUEVOIG1vZGUgbm90IHN1cHBvcnRlZCIpOworICAgICAgY2FzZSBGWF9CT006IHJldHVybigi SWxsZWdhbCBjb21iaW5hdGlvbiBvZiBPUEVOIG1vZGVzIik7CisgICAgICBjYXNlIEZYX0FDQzog cmV0dXJuKCJBY2Nlc3MgZGVuaWVkIik7CisgICAgICBjYXNlIEZYX0ZORjogcmV0dXJuKCJGaWxl IG5vdCBmb3VuZCIpOworICAgICAgY2FzZSBGWF9PRkw6IHJldHVybigiQnVmZmVyIG92ZXJmbG93 Iik7CisgICAgICBjYXNlIEZYX0xOVTogcmV0dXJuKCJDdXJyZW50IGxpbmUgbnVtYmVyIHVua25v d24iKTsKKyAgICAgIGNhc2UgRlhfUk9POiByZXR1cm4oIk9mZiBsaW1pdHMiKTsKKyAgICAgIGNh c2UgRlhfVU5LOiByZXR1cm4oIk9wZXJhdGlvbiBmYWlscyAtIHJlYXNvbiB1bmtub3duIik7Cisg ICAgICBkZWZhdWx0OiByZXR1cm4oIkVycm9yIG51bWJlciBvdXQgb2YgcmFuZ2UiKTsKKyAgICB9 Cit9CisKKy8qCisgIFogXyBPIFAgRSBOIC0tICBPcGVuIGEgZmlsZSBmb3IgdGhlIHJlcXVlc3Rl ZCB0eXBlIG9mIGFjY2Vzcy4KKworICBDYWxsIHdpdGg6CisgICAgbmFtZTogIE5hbWUgb2YgZmls ZSB0byBiZSBvcGVuZWQuCisgICAgZmxhZ3M6IEFueSBjb21iaW5hdGlvbiBvZiBGTV94eHggdmFs dWVzIGV4Y2VwdCBGTV9FT0YgKGNrY2tlci5oKS4KKyAgUmV0dXJuczoKKyAgICA+PSAwIG9uIHN1 Y2Nlc3M6IFRoZSBhc3NpZ25lZCBjaGFubmVsIG51bWJlcgorICAgIDwgIDAgb24gZmFpbHVyZTog QSBuZWdhdGl2ZSBGWF94eHggZXJyb3IgY29kZSAoY2tja2VyLmgpLgorKi8KK2ludAorel9vcGVu KG5hbWUsIGZsYWdzKSBjaGFyICogbmFtZTsgaW50IGZsYWdzOyB7CisgICAgaW50IGksIG47Cisg ICAgRklMRSAqIHQ7CisgICAgY2hhciAqIG1vZGU7CisgICAgZGVidWcoRjExMSwiel9vcGVuIixu YW1lLGZsYWdzKTsKKyAgICBpZiAoIW5hbWUpIG5hbWUgPSAiIjsgICAgICAgICAgICAgICAvKiBD aGVjayBuYW1lIGFyZ3VtZW50ICovCisgICAgaWYgKCFuYW1lWzBdKQorICAgICAgcmV0dXJuKHpf ZXJyb3IgPSBGWF9CRk4pOworICAgIGlmIChmbGFncyAmIEZNX0NNRCkgICAgICAgICAgICAgICAg IC8qIE9wZW5pbmcgcGlwZXMgbm90IGltcGxlbWVudGVkIHlldCAqLworICAgICAgcmV0dXJuKHpf ZXJyb3IgPSBGWF9OWUkpOyAgICAgICAgIC8qIChhbmQgbm90IHBvcnRhYmxlIGVpdGhlcikgKi8K KyAgICBkZWJ1ZyhGMTAxLCJ6X29wZW4gbmZvcG5hcmdzIiwiIixuZm9wbmFyZ3MpOworICAgIGlm IChmbGFncyA8IDAgfHwgZmxhZ3MgPj0gbmZvcG5hcmdzKSAvKiBSYW5nZSBjaGVjayBmbGFncyAq LworICAgICAgcmV0dXJuKHpfZXJyb3IgPSBGWF9STkcpOworICAgIG1vZGUgPSBmb3BuYXJnc1tm bGFnc107ICAgICAgICAgICAgIC8qIEdldCBmb3BlbigpIGFyZyAqLworICAgIGRlYnVnKEYxMTEs Inpfb3BlbiBmb3BlbiBhcmdzIixtb2RlLGZsYWdzKTsKKyAgICBpZiAoIW1vZGVbMF0pICAgICAg ICAgICAgICAgICAgICAgICAvKiBDaGVjayBmb3IgaWxsZWdhbCBjb21iaW5hdGlvbnMgKi8KKyAg ICAgIHJldHVybih6X2Vycm9yID0gRlhfQk9NKTsKKyAgICBpZiAoIXpfaW5pdGVkKSB7ICAgICAg ICAgICAgICAgICAgICAvKiBJZiBmaWxlIHN0cnVjdHMgbm90IGluaXRlZCAqLworICAgICAgICBk ZWJ1ZyhGMTAxLCJ6X29wZW4gel9tYXhjaGFuIDEiLCIiLHpfbWF4Y2hhbik7CisjaWZkZWYgVU5J WAorICAgICAgICBkZWJ1ZyhGMTAxLCJ6X29wZW4gY2ttYXhmaWxlcyIsIiIsY2ttYXhmaWxlcyk7 CisgICAgICAgIGlmIChja21heGZpbGVzID4gMCkgeyAgICAgICAgICAgLyogU2V0IGluIGNrP3Rp by5jOiBzeXNpbml0KCkgKi8KKyAgICAgICAgICAgIGludCB4OworICAgICAgICAgICAgeCA9IGNr bWF4ZmlsZXMgLSBaTkZJTFMgLSA1OworICAgICAgICAgICAgaWYgKHggPiB6X21heGNoYW4pICAg ICAgICAgIC8qIHN5c2NvbmYoKSB2YWx1ZSBncmVhdGVyIHRoYW4gKi8KKyAgICAgICAgICAgICAg el9tYXhjaGFuID0geDsgICAgICAgICAgICAvKiB2YWx1ZSBmcm9tIGhlYWRlciBmaWxlcy4gKi8K KyAgICAgICAgICAgIGRlYnVnKEYxMDEsInpfb3BlbiB6X21heGNoYW4gMiIsIiIsel9tYXhjaGFu KTsKKyAgICAgICAgfQorI2VuZGlmIC8qIFVOSVggKi8KKyAgICAgICAgaWYgKHpfbWF4Y2hhbiA8 IFpfTUlOQ0hBTikgICAgICAvKiBBbGxvY2F0ZSBhdCBsZWFzdCB0aGlzIG1hbnkuICovCisgICAg ICAgICAgel9tYXhjaGFuID0gWl9NSU5DSEFOOworICAgICAgICBkZWJ1ZyhGMTAxLCJ6X29wZW4g el9tYXhjaGFuIDMiLCIiLHpfbWF4Y2hhbik7CisgICAgICAgIC8qIE5vdGU6IFRoaXMgY291bGQg YmUgYSBwcmV0dHkgYmlnIGNodW5rIG9mIG1lbW9yeSAqLworICAgICAgICAvKiBpZiB6X21heGNo YW4gaXMgYSBiaWcgbnVtYmVyLiAgSWYgdGhpcyBiZWNvbWVzIGEgcHJvYmxlbSAqLworICAgICAg ICAvKiB3ZSdsbCBuZWVkIHRvIG1hbGxvYyBhbmQgZnJlZSBlYWNoIGVsZW1lbnQgYXQgb3Blbi9j bG9zZSB0aW1lICovCisjaWZkZWYgQ09NTUVOVAorCS8qIE1heSAyMDA2IC0gaXQncyB0aW1lIC0g aW4gY3VycmVudCBMaW51eCB0aGlzIGFib3V0IDNNQiAqLworICAgICAgICBpZiAoISh6X2ZpbGUg PSAoc3RydWN0IGNrel9maWxlICopCisgICAgICAgICAgICAgIG1hbGxvYyhzaXplb2Yoc3RydWN0 IGNrel9maWxlKSAqICh6X21heGNoYW4gKyAxKSkpKQorICAgICAgICAgIHJldHVybih6X2Vycm9y ID0gRlhfTk1GKTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IHpfbWF4Y2hhbjsgaSsrKSB7Cisg ICAgICAgICAgICB6X2ZpbGVbaV0uel9mcCA9IE5VTEw7CisgICAgICAgICAgICB6X2ZpbGVbaV0u el9mbGFncyA9IDA7CisgICAgICAgICAgICB6X2ZpbGVbaV0uel9ubGluZSA9IDA7CisgICAgICAg ICAgICAqKHpfZmlsZVtpXS56X25hbWUpID0gJ1wwJzsKKyAgICAgICAgfQorI2Vsc2UKKwkvKiBO ZXcgZWNvbm9taWNhbCB3YXksIGFsbG9jYXRlIHN0b3JhZ2UgZm9yIGVhY2ggY2hhbm5lbCBhcyBu ZWVkZWQgKi8KKwlpZiAoIXpfZmlsZSkgeworCSAgICB6X2ZpbGUgPSAoc3RydWN0IGNrel9maWxl ICoqKW1hbGxvYygoel9tYXhjaGFuICsgMSkgKgorCQkJCQkJc2l6ZW9mKHN0cnVjdCBja3pfZmls ZSAqKSk7CisJICAgIGlmICghel9maWxlKQorCSAgICAgIHJldHVybih6X2Vycm9yID0gRlhfTk1G KTsKKwkgICAgZm9yIChpID0gMDsgaSA8IHpfbWF4Y2hhbjsgaSsrKQorCSAgICAgIHpfZmlsZVtp XSA9IE5VTEw7CisJfQorI2VuZGlmCS8qIENPTU1FTlQgKi8KKyAgICAgICAgel9pbml0ZWQgPSAx OyAgICAgICAgICAgICAgICAgICAvKiBSZW1lbWJlciB3ZSBpbml0aWFsaXplZCAqLworICAgIH0K KyAgICBmb3IgKG4gPSAtMSwgaSA9IDA7IGkgPCB6X21heGNoYW47IGkrKykgeyAvKiBGaW5kIGEg ZnJlZSBjaGFubmVsICovCisjaWZkZWYgQ09NTUVOVAorICAgICAgICBpZiAoIXpfZmlsZVtpXS56 X2ZwKSB7CisgICAgICAgICAgICBuID0gaTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9 CisjZWxzZQorICAgICAgICBpZiAoIXpfZmlsZVtpXSkgeworCSAgICB6X2ZpbGVbaV0gPSAoc3Ry dWN0IGNrel9maWxlICopIG1hbGxvYyhzaXplb2Yoc3RydWN0IGNrel9maWxlKSk7CisJICAgIGlm ICghel9maWxlW2ldKQorCSAgICAgIHJldHVybih6X2Vycm9yID0gRlhfTk1GKTsKKyAgICAgICAg ICAgIG4gPSBpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyNlbmRpZgkvKiBDT01N RU5UICovCisKKyAgICB9CisgICAgaWYgKG4gPCAwIHx8IG4gPj0gel9tYXhjaGFuKSAgICAgICAg LyogQW55IGZyZWUgY2hhbm5lbHM/ICovCisgICAgICByZXR1cm4oel9lcnJvciA9IEZYX05NRik7 ICAgICAgICAgLyogTm8sIGZhaWwuICovCisgICAgZXJybm8gPSAwOworCisgICAgel9maWxlW25d LT56X2ZsYWdzID0gMDsJCS8qIEluIGNhc2Ugb2YgZmFpbHVyZS4uLiAqLworICAgIHpfZmlsZVtu XS0+el9mcCA9IE5VTEw7CQkvKiBTZXQgZmlsZSBwb2ludGVyIHRvIE5VTEwgKi8KKworICAgIHQg PSBmb3BlbihuYW1lLCBtb2RlKTsgICAgICAgICAgICAgIC8qIFRyeSB0byBvcGVuIHRoZSBmaWxl LiAqLworICAgIGlmICghdCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZhaWxlZC4u LiAqLworICAgICAgICBkZWJ1ZyhGMTExLCJ6X29wZW4gZXJyb3IiLG5hbWUsZXJybm8pOworI2lm ZGVmIEVNRklMRQorICAgICAgICBpZiAoZXJybm8gPT0gRU1GSUxFKQorICAgICAgICAgIHJldHVy bih6X2Vycm9yID0gRlhfTk1GKTsKKyNlbmRpZiAvKiBFTUZJTEUgKi8KKwlmcmVlKHpfZmlsZVtu XSk7CisJel9maWxlW25dID0gTlVMTDsKKyAgICAgICAgcmV0dXJuKHpfZXJyb3IgPSAoZXJybm8g PyAgRlhfU1lTIDogRlhfVU5LKSk7IC8qIFJldHVybiBlcnJvciBjb2RlICovCisgICAgfQorI2lm ZGVmIE5UCisjaWZkZWYgT19TRVFVRU5USUFMCisgICAgaWYgKHQpICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogQ2FjaGluZyBoaW50IGZvciBOVCAqLworICAgICAgX3NldG1vZGUoX2Zp bGVubyh0KSxPX1NFUVVFTlRJQUwpOworI2VuZGlmIC8qIE9fU0VRVUVOVElBTCAqLworI2VuZGlm IC8qIE5UICovCisgICAgel9ub3BlbisrOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogT3Bl biwgY291bnQgaXQuICovCisgICAgel9maWxlW25dLT56X2ZwID0gdDsJCS8qIFN0YXNoIHRoZSBm aWxlIHBvaW50ZXIgKi8KKyAgICB6X2ZpbGVbbl0tPnpfZmxhZ3MgPSBmbGFnczsJCS8qIGFuZCB0 aGUgZmxhZ3MgKi8KKyAgICB6X2ZpbGVbbl0tPnpfbmxpbmUgPSAwOwkJLyogQ3VycmVudCBsaW5l IG51bWJlciBpcyAwICovCisgICAgel9lcnJvciA9IDA7CisgICAgemZucWZwKG5hbWUsQ0tNQVhQ QVRILHpfZmlsZVtuXS0+el9uYW1lKTsgLyogYW5kIHRoZSBmaWxlJ3MgZnVsbCBuYW1lICovCisg ICAgcmV0dXJuKG4pOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmV0dXJuIHRoZSBjaGFu bmVsIG51bWJlciAqLworfQorCitpbnQKK3pfY2xvc2UoY2hhbm5lbCkgaW50IGNoYW5uZWw7IHsg ICAgICAgICAvKiBDbG9zZSBmaWxlIG9uIGdpdmVuIGNoYW5uZWwgKi8KKyAgICBpbnQgeDsKKyAg ICBGSUxFICogdDsKKyAgICBpZiAoIXpfaW5pdGVkKSAgICAgICAgICAgICAgICAgICAgICAvKiBD YWxsZWQgYmVmb3JlIGFueSBmaWxlcyBhcmUgb3Blbj8gKi8KKyAgICAgIHJldHVybih6X2Vycm9y ID0gRlhfTk9QKTsKKyAgICBpZiAoY2hhbm5lbCA+PSB6X21heGNoYW4pICAgICAgICAgICAvKiBD aGFubmVsIG91dCBvZiByYW5nZT8gKi8KKyAgICAgIHJldHVybih6X2Vycm9yID0gRlhfQ0hOKTsK KyAgICBpZiAoIXpfZmlsZVtjaGFubmVsXSkKKyAgICAgIHJldHVybih6X2Vycm9yID0gRlhfTk9Q KTsKKyAgICBpZiAoISh0ID0gel9maWxlW2NoYW5uZWxdLT56X2ZwKSkgICAgLyogQ2hhbm5lbCB3 YXNuJ3Qgb3Blbj8gKi8KKyAgICAgIHJldHVybih6X2Vycm9yID0gRlhfTk9QKTsKKyAgICBlcnJu byA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTZXQgZXJybm8gMCB0byBnZXQgYSBn b29kIHJlYWRpbmcgKi8KKyAgICB4ID0gZmNsb3NlKHQpOyAgICAgICAgICAgICAgICAgICAgICAv KiBUcnkgdG8gY2xvc2UgKi8KKyAgICBpZiAoeCA9PSBFT0YpICAgICAgICAgICAgICAgICAgICAg ICAvKiBPbiBmYWlsdXJlICovCisgICAgICByZXR1cm4oel9lcnJvciA9IEZYX1NZUyk7ICAgICAg ICAgLyogaW5kaWNhdGUgc3lzdGVtIGVycm9yLiAqLworICAgIHpfbm9wZW4tLTsgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIENsb3NlZCBPSywgZGVjcmVtZW50IG9wZW4gY291bnQgKi8KKyAg ICB6X2ZpbGVbY2hhbm5lbF0tPnpfZnAgPSBOVUxMOwkvKiBTZXQgZmlsZSBwb2ludGVyIHRvIE5V TEwgKi8KKyAgICB6X2ZpbGVbY2hhbm5lbF0tPnpfbmxpbmUgPSAwOwkvKiBDdXJyZW50IGxpbmUg bnVtYmVyIGlzIDAgKi8KKyAgICB6X2ZpbGVbY2hhbm5lbF0tPnpfZmxhZ3MgPSAwOwkvKiBTZXQg ZmxhZ3MgdG8gMCAqLworICAgICooel9maWxlW2NoYW5uZWxdLT56X25hbWUpID0gJ1wwJzsJLyog Q2xlYXIgbmFtZSAqLworICAgIGZyZWUoel9maWxlW2NoYW5uZWxdKTsKKyAgICB6X2ZpbGVbY2hh bm5lbF0gPSBOVUxMOworICAgIHJldHVybih6X2Vycm9yID0gMCk7Cit9CisKKy8qCisgIFogXyBP IFUgVCAgLS0gIE91dHB1dCBzdHJpbmcgdG8gY2hhbm5lbC4KKworICBDYWxsIHdpdGg6CisgICAg Y2hhbm5lbDogICAgIENoYW5uZWwgbnVtYmVyIHRvIHdyaXRlIHRvLgorICAgIHM6ICAgICAgICAg ICBTdHJpbmcgdG8gd3JpdGUuCisgICAgbGVuZ3RoID4gLTE6IEhvdyBtYW55IGNoYXJhY3RlcnMg b2YgcyB0byB3cml0ZS4KKyAgICBsZW5ndGggPCAwOiAgV3JpdGUgZW50aXJlIE5VTC10ZXJtaW5h dGVkIHN0cmluZy4KKyAgICBmbGFncyA9PSAwOiAgU3VwcGx5IGxpbmUgdGVybWluYXRpb24uCisg ICAgZmxhZ3MgPiAgMDogIERvbid0IHN1cHBseSBsaW5lIHRlcm1pbmF0aW9uLgorICAgIGZsYWdz IDwgIDA6ICBXcml0ZSAnbGVuZ3RoJyBOVUwgY2hhcmFjdGVycy4KKyAgU3BlY2lhbCBjYXNlOgor ICAgIElmIGZsYWdzID4gLTEgYW5kIHMgaXMgZW1wdHkgb3IgTlVMTCBhbmQgbGVuZ3RoID09IDEs IHdyaXRlIDEgTlVMLgorICBSZXR1cm5zOgorICAgIE51bWJlciBvZiBjaGFyYWN0ZXJzIHdyaXR0 ZW4gdG8gY2hhbm5lbCBvbiBzdWNjZXNzLCBvcgorICAgIG5lZ2F0aXZlIEZYX3h4eCBlcnJvciBj b2RlIG9uIGZhaWx1cmUuCisqLworaW50Cit6X291dChjaGFubmVsLHMsbGVuZ3RoLGZsYWdzKSBp bnQgY2hhbm5lbCwgZmxhZ3MsIGxlbmd0aDsgY2hhciAqIHM7IHsKKyAgICBGSUxFICogdDsKKyAg ICBpbnQgeCwgbjsKKyAgICBjaGFyIGMgPSAnXDAnOworCisgICAgaWYgKCFzKSBzID0gIiI7ICAg ICAgICAgICAgICAgICAgICAgLyogR3VhcmQgYWdhaW5zdCBudWxsIHBvaW50ZXIgKi8KKyNpZmRl ZiBERUJVRworICAgIGlmIChkZWJsb2cpIHsKKyAgICAgICAgZGVidWcoRjExMSwiel9vdXQiLHMs Y2hhbm5lbCk7CisgICAgICAgIGRlYnVnKEYxMDEsInpfb3V0IGxlbmd0aCIsIiIsbGVuZ3RoKTsK KyAgICAgICAgZGVidWcoRjEwMSwiel9vdXQgZmxhZ3MiLCIiLGZsYWdzKTsKKyAgICB9CisjZW5k aWYgLyogREVCVUcgKi8KKyAgICBpZiAoIXpfaW5pdGVkKSAgICAgICAgICAgICAgICAgICAgICAv KiBGaWxlIGkvbyBpbml0ZWQ/ICovCisgICAgICByZXR1cm4oel9lcnJvciA9IEZYX05PUCk7Cisg ICAgaWYgKGNoYW5uZWwgPj0gel9tYXhjaGFuKSAgICAgICAgICAgLyogQ2hhbm5lbCBpbiByYW5n ZT8gKi8KKyAgICAgIHJldHVybih6X2Vycm9yID0gRlhfQ0hOKTsKKyAgICBpZiAoIXpfZmlsZVtj aGFubmVsXSkKKyAgICAgIHJldHVybih6X2Vycm9yID0gRlhfTk9QKTsKKyAgICBpZiAoISh0ID0g el9maWxlW2NoYW5uZWxdLT56X2ZwKSkgICAgLyogRmlsZSBvcGVuPyAqLworICAgICAgcmV0dXJu KHpfZXJyb3IgPSBGWF9OT1ApOworICAgIGlmICghKCh6X2ZpbGVbY2hhbm5lbF0tPnpfZmxhZ3Mp ICYgKEZNX1dSSXxGTV9BUFApKSkgLyogSW4gd3JpdGUgbW9kZT8gKi8KKyAgICAgIHJldHVybih6 X2Vycm9yID0gRlhfRk9QKTsKKyAgICBuID0gbGVuZ3RoOyAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBMZW5ndGggb2Ygc3RyaW5nIHRvIHdyaXRlICovCisgICAgaWYgKG4gPCAwKSB7ICAgICAg ICAgICAgICAgICAgICAgICAgLyogTmVnYXRpdmUgbWVhbnMgZ2V0IGl0IG91cnNlbHZlcyAqLwor ICAgICAgICBpZiAoZmxhZ3MgPCAwKSAgICAgICAgICAgICAgICAgIC8qIEV4Y2VwdCB3aGVuIHRv bGQgdG8gd3JpdGUgTlVMcyBpbiAqLworICAgICAgICAgIHJldHVybih6X2Vycm9yID0gRlhfUk5H KTsgICAgIC8qIHdoaWNoIGNhc2UgYXJncyBhcmUgaW5jb25zaXN0ZW50ICovCisgICAgICAgIG4g PSBzdHJsZW4ocyk7ICAgICAgICAgICAgICAgICAgLyogR2V0IGxlbmd0aCBvZiBzdHJpbmcgYXJn ICovCisgICAgfQorICAgIGVycm5vID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJl c2V0IGVycm5vICovCisgICAgZGVidWcoRjEwMSwiel9vdXQgbiIsIiIsbik7CisgICAgaWYgKGZs YWdzIDwgMCkgeyAgICAgICAgICAgICAgICAgICAgLyogV3JpdGluZyBOVUxzLi4uICovCisgICAg ICAgIGludCBpOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisgICAgICAgICAg ICB4ID0gZndyaXRlKCZjLDEsMSx0KTsKKyAgICAgICAgICAgIGlmICh4IDwgMSkKKyAgICAgICAg ICAgICAgcmV0dXJuKHpfZXJyb3IgPSAoZXJybm8gPyBGWF9TWVMgOiBGWF9VTkspKTsKKyAgICAg ICAgfQorICAgICAgICB6X2ZpbGVbY2hhbm5lbF0tPnpfbmxpbmUgPSAtMTsgICAvKiBDdXJyZW50 IGxpbmUgbm8gbG9uZ2VyIGtub3duICovCisgICAgICAgIHpfZXJyb3IgPSAwOworICAgICAgICBy ZXR1cm4oaSk7CisgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogV3Jp dGluZyBzdHJpbmcgYXJnICovCisgICAgICAgIGlmIChuID09IDEgJiYgIXNbMF0pICAgICAgICAg ICAgLyogV3JpdGluZyBvbmUgY2hhciBidXQgaXQncyBOVUwgKi8KKyAgICAgICAgICB4ID0gZndy aXRlKCZjLDEsMSx0KTsKKyAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBXcml0aW5nIG5vbi1OVUwgY2hhciBvciBzdHJpbmcgKi8KKyAgICAgICAgICB4ID0gZndyaXRl KHMsMSxuLHQpOworICAgICAgICBkZWJ1ZyhGMTAxLCJ6X291dCBmd3JpdGUiLGNraXRvYSh4KSxl cnJubyk7CisgICAgICAgIGlmICh4IDwgbikgICAgICAgICAgICAgICAgICAgICAgLyogRmFpbHVy ZSB0byB3cml0ZSByZXF1ZXN0ZWQgYW1vdW50ICovCisgICAgICAgICAgcmV0dXJuKHpfZXJyb3Ig PSAoZXJybm8gPyBGWF9TWVMgOiBGWF9VTkspKTsgLyogUmV0dXJuIGVycm9yICovCisgICAgICAg IGlmIChmbGFncyA9PSAwKSB7ICAgICAgICAgICAgICAgLyogSWYgc3VwcGx5aW5nIGxpbmUgdGVy bWluYXRpb24gKi8KKyAgICAgICAgICAgIGlmIChmd3JpdGUoIlxuIiwxLDEsdCkpICAgICAvKiBk byB0aGF0ICAqLworICAgICAgICAgICAgICB4ICs9IHpfbHQ7ICAgICAgICAgICAgICAgIC8qIGNv dW50IHRoZSB0ZXJtaW5hdG9yICovCisgICAgICAgICAgICBpZiAoel9maWxlW2NoYW5uZWxdLT56 X25saW5lID4gLTEpIC8qIGNvdW50IHRoaXMgbGluZSAqLworICAgICAgICAgICAgICB6X2ZpbGVb Y2hhbm5lbF0tPnpfbmxpbmUrKzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHpfZmls ZVtjaGFubmVsXS0+el9ubGluZSA9IC0xOyAvKiBDdXJyZW50IGxpbmUgbm8gbG9uZ2VyIGtub3du ICovCisgICAgICAgIH0KKyAgICB9CisgICAgel9lcnJvciA9IDA7CisgICAgcmV0dXJuKHgpOwor fQorCisjZGVmaW5lIFpfSU5CVUZMRU4gNjQKKworLyoKKyAgWiBfIEkgTiAgLS0gIE11bHRpY2hh bm5lbCBpL28gZmlsZSBpbnB1dCBmdW5jdGlvbi4KKworICBDYWxsIHdpdGg6CisgICAgY2hhbm5l bCBudW1iZXIgdG8gcmVhZCBmcm9tLgorICAgIHMgPSBhZGRyZXNzIG9mIGRlc3RpbmF0aW9uIGJ1 ZmZlci4KKyAgICBidWZsZW4gPSBkZXN0aW5hdGlvbiBidWZmZXIgbGVuZ3RoLgorICAgIGxlbmd0 aCA9IE51bWJlciBvZiBieXRlcyB0byByZWFkLCBtdXN0IGJlIDwgYnVmbGVuLgorICAgIGZsYWdz OiAwID0gcmVhZCBhIGxpbmU7IG5vbnplcm8gPSByZWFkIHRoZSBnaXZlbiBudW1iZXIgb2YgYnl0 ZXMuCisgIFJldHVybnM6CisgICAgTnVtYmVyIG9mIGJ5dGVzIHJlYWQgaW50byBidWZmZXIgb3Ig YSBuZWdhdGl2ZSBlcnJvciBjb2RlLgorICAgIEEgdGVybWluYXRpbmcgTlVMIGlzIGRlcG9zaXRl ZCBhZnRlciB0aGUgbGFzdCBieXRlIHRoYXQgd2FzIHJlYWQuCisqLworaW50Cit6X2luKGNoYW5u ZWwscyxidWZsZW4sbGVuZ3RoLGZsYWdzKQorIGludCBjaGFubmVsLCBidWZsZW4sIGxlbmd0aCwg ZmxhZ3M7IGNoYXIgKiBzOworLyogel9pbiAqLyB7CisgICAgaW50IGksIGosIHg7CisgICAgRklM RSAqIHQ7CisgICAgY2hhciAqIHA7CisKKyAgICBpZiAoIXpfaW5pdGVkKSAgICAgICAgICAgICAg ICAgICAgICAvKiBDaGVjayBldmVyeXRoaW5nLi4uICovCisgICAgICByZXR1cm4oel9lcnJvciA9 IEZYX05PUCk7CisgICAgaWYgKGNoYW5uZWwgPj0gel9tYXhjaGFuKQorICAgICAgcmV0dXJuKHpf ZXJyb3IgPSBGWF9DSE4pOworICAgIGlmICghel9maWxlW2NoYW5uZWxdKQorICAgICAgcmV0dXJu KHpfZXJyb3IgPSBGWF9OT1ApOworICAgIGlmICghKHQgPSB6X2ZpbGVbY2hhbm5lbF0tPnpfZnAp KQorICAgICAgcmV0dXJuKHpfZXJyb3IgPSBGWF9OT1ApOworICAgIGlmICghKCh6X2ZpbGVbY2hh bm5lbF0tPnpfZmxhZ3MpICYgRk1fUkVBKSkKKyAgICAgIHJldHVybih6X2Vycm9yID0gRlhfRk9Q KTsKKyAgICBpZiAoIXMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDaGVjayBkZXN0 aW5hdGlvbiAqLworICAgICByZXR1cm4oel9lcnJvciA9IEZYX1JORyk7CisgICAgc1swXSA9IE5V TDsKKyAgICBpZiAobGVuZ3RoID09IDApICAgICAgICAgICAgICAgICAgICAvKiBSZWFkIDAgYnl0 ZXMgLSBlYXN5LiAqLworICAgICAgcmV0dXJuKHpfZXJyb3IgPSAwKTsKKyAgICBkZWJ1ZyhGMTAx LCJ6X2luIGNoYW5uZWwiLCIiLGNoYW5uZWwpOworICAgIGRlYnVnKEYxMDEsInpfaW4gYnVmbGVu IiwiIixidWZsZW4pOworICAgIGRlYnVnKEYxMDEsInpfaW4gbGVuZ3RoIiwiIixsZW5ndGgpOwor ICAgIGRlYnVnKEYxMDEsInpfaW4gZmxhZ3MiLCIiLGZsYWdzKTsKKyAgICBpZiAobGVuZ3RoIDwg MCB8fCBidWZsZW4gPCAwKSAgICAgICAvKiBDaGVjayBsZW5ndGggYXJncyAqLworICAgICAgcmV0 dXJuKHpfZXJyb3IgPSBGWF9STkcpOworICAgIGlmIChidWZsZW4gPD0gbGVuZ3RoKQorICAgICAg cmV0dXJuKHpfZXJyb3IgPSBGWF9STkcpOworICAgIGVycm5vID0gMDsgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIFJlc2V0IGVycm5vICovCisgICAgaWYgKGZsYWdzKSB7ICAgICAgICAgICAg ICAgICAgICAgICAgLyogUmVhZCBibG9jayBvciBieXRlICovCisJaW50IG47CQkJCS8qIDIwMDUw OTEyICovCisJbiA9IGxlbmd0aDsJCQkvKiAyMDA1MDkxMiAqLworCWkgPSAwOwkJCQkvKiAyMDA1 MDkxMiAqLworCXdoaWxlIChuID4gMCkgewkJCS8qIDIwMDUwOTEyICovCisJICAgIGkgPSBmcmVh ZChzLDEsbix0KTsJCS8qIDIwMDUwOTEyICovCisjaWZkZWYgREVCVUcKKwkgICAgaWYgKGRlYmxv ZykgeworCQlkZWJ1ZyhGMTExLCJ6X2luIGJsb2NrIixzLGkpOworCQlkZWJ1ZyhGMTAxLCJ6X2lu IGJsb2NrIGVycm5vIiwiIixlcnJubyk7CisJCWRlYnVnKEYxMDEsInpfaW4gYmxvY2sgZmVycm9y IiwiIixmZXJyb3IodCkpOworCQlkZWJ1ZyhGMTAxLCJ6X2luIGJsb2NrIGZlb2YiLCIiLGZlb2Yo dCkpOworCSAgICB9CisjZW5kaWYgLyogREVCVUcgKi8KKwkgICAgaWYgKGkgPT0gMCkgYnJlYWs7 CQkvKiAyMDA1MDkxMiAqLworCSAgICBzICs9IGk7CQkJLyogMjAwNTA5MTIgKi8KKwkgICAgbiAt PSBpOwkJCS8qIDIwMDUwOTEyICovCisJfQorCS8qIEN1cnJlbnQgbGluZSBubyBsb25nZXIga25v d24gKi8KKyAgICAgICAgel9maWxlW2NoYW5uZWxdLT56X25saW5lID0gKENLX09GRl9UKS0xOwor ICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlYWQgbGluZSAqLwor I2lmbmRlZiBDT01NRU5UCisgICAgICAgIC8qIFRoaXMgbWV0aG9kIGlzIHVzZWQgYmVjYXVzZSBp dCdzIHNpbXBsZXIgdGhhbiB0aGUgb3RoZXJzICovCisgICAgICAgIC8qIGFuZCBhbHNvIG1hcmdp bmFsbHkgZmFzdGVyLiAqLworICAgICAgICBkZWJ1ZyhGMTAxLCJ6X2luIGdldGMgbG9vcCIsIiIs Q0tGVEVMTCh0KSk7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAg ICAgICAgICAgaWYgKCh4ID0gZ2V0Yyh0KSkgPT0gRU9GKSB7CisgICAgICAgICAgICAgICAgZGVi dWcoRjEwMSwiel9pbiBnZXRjIGVycm9yIiwiIixDS0ZURUxMKHQpKTsKKyAgICAgICAgICAgICAg ICBzW2ldID0gJ1wwJzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIHNbaV0gPSB4OworICAgICAgICAgICAgaWYgKHNbaV0gPT0gJ1xuJykgeworICAg ICAgICAgICAgICAgIHNbaV0gPSAnXDAnOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg ICAgICAgfQorICAgICAgICB9CisgICAgICAgIGRlYnVnKEYxMTEsInpfaW4gbGluZSBieXRlIGxv b3AiLGNraXRvYShlcnJubyksaSk7CisgICAgICAgIGRlYnVnKEYxMTEsInpfaW4gbGluZSBnb3Qi LHMsel9maWxlW2NoYW5uZWxdLT56X25saW5lKTsKKyAgICAgICAgaWYgKHpfZmlsZVtjaGFubmVs XS0+el9ubGluZSA+IC0xKQorICAgICAgICAgIHpfZmlsZVtjaGFubmVsXS0+el9ubGluZSsrOwor I2Vsc2UKKyNpZmRlZiBDT01NRU5UMgorICAgICAgICAvKiBTdHJhaWdodGZvcndhcmQgYnV0IHN0 cmxlbigpIHNsb3dzIGl0IGRvd24uICovCisgICAgICAgIHNbMF0gPSAnXDAnOworICAgICAgICBp ID0gMDsKKyAgICAgICAgaWYgKGZnZXRzKHMsbGVuZ3RoLHQpKSB7CisgICAgICAgICAgICBpID0g c3RybGVuKHMpOworICAgICAgICAgICAgaWYgKGkgPiAwICYmIHNbaS0xXSA9PSAnXG4nKSBpLS07 CisgICAgICAgIH0KKyAgICAgICAgZGVidWcoRjExMSwiel9pbiBsaW5lIGZnZXRzIixja2l0b2Eo ZXJybm8pLGkpOworICAgICAgICBpZiAoel9maWxlW2NoYW5uZWxdLT56X25saW5lID4gLTEpCisg ICAgICAgICAgel9maWxlW2NoYW5uZWxdLT56X25saW5lKys7CisjZWxzZQorICAgICAgICAvKiBU aGlzIGlzIGEgZG8taXQteW91cnNlbGYgZmdldHMoKSB3aXRoIGl0cyBvd24gcmVhZGFoZWFkIGFu ZCAqLworICAgICAgICAvKiBwdXRiYWNrLiAgSXQncyBhIGJpdCBmYXN0ZXIgdGhhbiByZWFsIGZn ZXRzKCkgYnV0IG5vdCBlbm91Z2ggKi8KKyAgICAgICAgLyogdG8ganVzdGlmeSB0aGUgYWRkZWQg Y29tcGxleGl0eSBvciB0aGUgcmlzayBvZiB0aGUgZnRlbGwoKSBhbmQgKi8KKyAgICAgICAgLyog ZnNlZWsoKSBjYWxscyBmYWlsaW5nLiAqLworICAgICAgICBpbnQgaywgZmxhZyA9IDA7CisgICAg ICAgIENLX09GRl9UIHBvczsKKyAgICAgICAgZm9yIChpID0gMDsgIWZsYWcgJiYgaSA8PSAobGVu Z3RoIC0gWl9JTkJVRkxFTik7IGkgKz0gWl9JTkJVRkxFTikgeworICAgICAgICAgICAgayA9ICgo bGVuZ3RoIC0gaSkgPCBaX0lOQlVGTEVOKSA/IGxlbmd0aCAtIGkgOiBaX0lOQlVGTEVOOworICAg ICAgICAgICAgaWYgKCh4ID0gZnJlYWQocytpLDEsayx0KSkgPCAxKQorICAgICAgICAgICAgICBi cmVhazsKKyAgICAgICAgICAgIHNbaSt4XSA9ICdcMCc7CisgICAgICAgICAgICBmb3IgKGogPSAw OyBqIDwgeDsgaisrKSB7CisgICAgICAgICAgICAgICAgaWYgKHNbaStqXSA9PSAnXG4nKSB7Cisg ICAgICAgICAgICAgICAgICAgIHNbaStqXSA9ICdcMCc7CisgICAgICAgICAgICAgICAgICAgIGZs YWcgKys7CisgICAgICAgICAgICAgICAgICAgIHBvcyA9IENLRlRFTEwodCk7CisgICAgICAgICAg ICAgICAgICAgIGlmIChwb3MgPiAtMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcG9zIC09 ICh4IC0gaiAtIDEpOworICAgICAgICAgICAgICAgICAgICAgICAgeCA9IENLRlNFRUsodCwgcG9z LCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGkgKz0gajsKKyAgICAgICAgICAgICAgICAg ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAg ICAgICAgICByZXR1cm4oel9lcnJvciA9IEZYX1NZUyk7CisgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICh6X2ZpbGVbY2hhbm5lbF0tPnpfbmxp bmUgPiAtMSkKKyAgICAgICAgICB6X2ZpbGVbY2hhbm5lbF0tPnpfbmxpbmUrKzsKKyAgICAgICAg ZGVidWcoRjExMSwiel9pbiBsaW5lIGNodW5rIGxvb3AiLGNraXRvYShlcnJubyksaSk7CisjZW5k aWYgLyogQ09NTUVOVDIgKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgfQorICAgIGRlYnVn KEYxMTEsInpfaW4gaSIsY2tpdG9hKGVycm5vKSxpKTsKKyAgICBpZiAoaSA8IDApIGkgPSAwOyAg ICAgICAgICAgICAgICAgICAvKiBOVUwtdGVybWluYXRlIHJlc3VsdCAqLworICAgIHNbaV0gPSAn XDAnOworICAgIGlmIChpID4gMCkgeworICAgICAgICB6X2Vycm9yID0gMDsKKyAgICAgICAgcmV0 dXJuKGkpOworICAgIH0KKyAgICBpZiAoaSA9PSAwICYmIGZlb2YodCkpICAgICAgICAgICAgICAv KiBFT0Ygb24gcmVhZGluZz8gKi8KKyAgICAgIHJldHVybih6X2Vycm9yID0gRlhfRU9GKTsgICAg ICAgICAvKiBSZXR1cm4gRU9GIGNvZGUgKi8KKyAgICByZXR1cm4oZXJybm8gPyAoel9lcnJvciA9 IC0xKSA6IGkpOyAvKiBSZXR1cm4gbGVuZ3RoIG9yIHN5c3RlbSBlcnJvciAqLworfQorCitpbnQK K3pfZmx1c2goY2hhbm5lbCkgaW50IGNoYW5uZWw7IHsgICAgICAgICAvKiBGbHVzaCBvdXRwdXQg Y2hhbm5lbCAqLworICAgIEZJTEUgKiB0OworICAgIGludCB4OworICAgIGlmICghel9pbml0ZWQp ICAgICAgICAgICAgICAgICAgICAgIC8qIFJlZ3VsYXIgY2hlY2tzICovCisgICAgICByZXR1cm4o el9lcnJvciA9IEZYX05PUCk7CisgICAgaWYgKGNoYW5uZWwgPj0gel9tYXhjaGFuKQorICAgICAg cmV0dXJuKHpfZXJyb3IgPSBGWF9DSE4pOworICAgIGlmICghel9maWxlW2NoYW5uZWxdKQorICAg ICAgcmV0dXJuKHpfZXJyb3IgPSBGWF9OT1ApOworICAgIGlmICghKHQgPSB6X2ZpbGVbY2hhbm5l bF0tPnpfZnApKQorICAgICAgcmV0dXJuKHpfZXJyb3IgPSBGWF9OT1ApOworICAgIGlmICghKCh6 X2ZpbGVbY2hhbm5lbF0tPnpfZmxhZ3MpICYgKEZNX1dSSXxGTV9BUFApKSkgLyogV3JpdGUgYWNj ZXNzPyAqLworICAgICAgcmV0dXJuKHpfZXJyb3IgPSBGWF9GT1ApOworICAgIGVycm5vID0gMDsg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlc2V0IGVycm5vICovCisgICAgeCA9IGZmbHVz aCh0KTsgICAgICAgICAgICAgICAgICAgICAgLyogVHJ5IHRvIGZsdXNoICovCisgICAgcmV0dXJu KHggPyAoel9lcnJvciA9IEZYX1NZUykgOiAwKTsgLyogUmV0dXJuIHN5c3RlbSBlcnJvciBvciAw IGlmIE9LICovCit9CisKK2ludAorI2lmZGVmIENLX0FOU0lDCit6X3NlZWsoaW50IGNoYW5uZWws IENLX09GRl9UIHBvcykJLyogTW92ZSBmaWxlIHBvaW50ZXIgdG8gYnl0ZSAqLworI2Vsc2UKK3pf c2VlayhjaGFubmVsLHBvcykgaW50IGNoYW5uZWw7IENLX09GRl9UIHBvczsgLyogKHNlZWsgdG8g Z2l2ZW4gcG9zaXRpb24pICovCisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAgICBpbnQgaSwg eCA9IDAsIHJjOworICAgIEZJTEUgKiB0OworICAgIGlmICghel9pbml0ZWQpICAgICAgICAgICAg ICAgICAgICAgIC8qIENoZWNrLi4uICovCisgICAgICByZXR1cm4oel9lcnJvciA9IEZYX05PUCk7 CisgICAgaWYgKGNoYW5uZWwgPj0gel9tYXhjaGFuKQorICAgICAgcmV0dXJuKHpfZXJyb3IgPSBG WF9DSE4pOworICAgIGlmICghel9maWxlW2NoYW5uZWxdKQorICAgICAgcmV0dXJuKHpfZXJyb3Ig PSBGWF9OT1ApOworICAgIGlmICghKHQgPSB6X2ZpbGVbY2hhbm5lbF0tPnpfZnApKQorICAgICAg cmV0dXJuKHpfZXJyb3IgPSBGWF9OT1ApOworICAgIGlmIChwb3MgPCAwTCkgeworICAgICAgICB4 ID0gMjsKKyAgICAgICAgcG9zID0gKHBvcyA9PSAtMikgPyAtMUwgOiAwTDsKKyAgICB9CisgICAg ZXJybm8gPSAwOworICAgIHJjID0gQ0tGU0VFSyh0LHBvcyx4KTsJCS8qIFRyeSB0byBzZWVrICov CisgICAgZGVidWcoRjExMSwiel9zZWVrIixja2l0b2EoZXJybm8pLHJjKTsKKyAgICBpZiAocmMg PCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAvKiBPSz8gKi8KKyAgICAgIHJldHVybih6X2Vy cm9yID0gRlhfU1lTKTsgLyogTm8uICovCisgICAgel9maWxlW2NoYW5uZWxdLT56X25saW5lID0g KChwb3MgfHwgeCkgPyAtMSA6IDApOworICAgIHJldHVybih6X2Vycm9yID0gMCk7Cit9CisKK2lu dAorI2lmZGVmIENLX0FOU0lDCit6X2xpbmUoaW50IGNoYW5uZWwsIENLX09GRl9UIHBvcykgICAg ICAgICAgIC8qIE1vdmUgZmlsZSBwb2ludGVyIHRvIGxpbmUgKi8KKyNlbHNlCit6X2xpbmUoY2hh bm5lbCxwb3MpIGludCBjaGFubmVsOyBDS19PRkZfVCBwb3M7IC8qIChzZWVrIHRvIGdpdmVuIHBv c2l0aW9uKSAqLworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgaW50IGksIGxlbiwgeCA9 IDA7CisgICAgQ0tfT0ZGX1QgY3VycmVudCA9IChDS19PRkZfVCkwLCBwcmV2ID0gKENLX09GRl9U KS0xLCBvbGQgPSAoQ0tfT0ZGX1QpLTE7CisgICAgRklMRSAqIHQ7CisgICAgY2hhciB0bXBidWZb MjU2XTsKKyAgICBpZiAoIXpfaW5pdGVkKSAgICAgICAgICAgICAgICAgICAgICAvKiBDaGVjay4u LiAqLworICAgICAgcmV0dXJuKHpfZXJyb3IgPSBGWF9OT1ApOworICAgIGlmIChjaGFubmVsID49 IHpfbWF4Y2hhbikKKyAgICAgIHJldHVybih6X2Vycm9yID0gRlhfQ0hOKTsKKyAgICBpZiAoIXpf ZmlsZVtjaGFubmVsXSkKKyAgICAgIHJldHVybih6X2Vycm9yID0gRlhfTk9QKTsKKyAgICBpZiAo ISh0ID0gel9maWxlW2NoYW5uZWxdLT56X2ZwKSkKKyAgICAgIHJldHVybih6X2Vycm9yID0gRlhf Tk9QKTsKKyAgICBkZWJ1ZyhGMTAxLCJ6X2xpbmUgcG9zIiwiIixwb3MpOworICAgIGlmIChwb3Mg PCAwTCkgeyAgICAgICAgICAgICAgICAgICAgIC8qIEVPRiB3YW50ZWQgKi8KKyAgICAgICAgQ0tf T0ZGX1QgbjsKKyAgICAgICAgbiA9IHpfZmlsZVtjaGFubmVsXS0+el9ubGluZTsKKyAgICAgICAg ZGVidWcoRjEwMSwiel9saW5lIG4iLCIiLG4pOworICAgICAgICBpZiAobiA8IDAgfHwgcG9zIDwg MCkgeworICAgICAgICAgICAgcmV3aW5kKHQpOworICAgICAgICAgICAgbiA9IDA7CisgICAgICAg IH0KKyAgICAgICAgd2hpbGUgKDEpIHsgICAgICAgICAgICAgICAgICAgICAvKiBUaGlzIGNvdWxk IHRha2UgYSB3aGlsZS4uLiAqLworICAgICAgICAgICAgaWYgKCh4ID0gZ2V0Yyh0KSkgPT0gRU9G KQorICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmICh4ID09ICdcbicpIHsKKyAg ICAgICAgICAgICAgICBuKys7CisgICAgICAgICAgICAgICAgaWYgKHBvcyA9PSAtMikgeworICAg ICAgICAgICAgICAgICAgICBvbGQgPSBwcmV2OworICAgICAgICAgICAgICAgICAgICBwcmV2ID0g Q0tGVEVMTCh0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0K KyAgICAgICAgZGVidWcoRjEwMSwiel9saW5lIG9sZCIsIiIsb2xkKTsKKyAgICAgICAgZGVidWco RjEwMSwiel9saW5lIHByZXYiLCIiLHByZXYpOworICAgICAgICBpZiAocG9zID09IC0yKSB7Cisg ICAgICAgICAgICBpZiAoKHggPSB6X3NlZWsoY2hhbm5lbCxvbGQpKSA8IDApCisgICAgICAgICAg ICAgIHJldHVybih6X2Vycm9yID0geCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg IG4tLTsKKyAgICAgICAgfQorICAgICAgICB6X2ZpbGVbY2hhbm5lbF0tPnpfbmxpbmUgPSBuOwor ICAgICAgICByZXR1cm4oel9lcnJvciA9IDApOworICAgIH0KKyAgICBpZiAocG9zID09IDBMKSB7 ICAgICAgICAgICAgICAgICAgICAvKiBSZXdpbmQgd2FudGVkICovCisgICAgICAgIHpfZmlsZVtj aGFubmVsXS0+el9ubGluZSA9IDBMOworICAgICAgICByZXdpbmQodCk7CisgICAgICAgIGRlYnVn KEYxMDAsInpfbGluZSByZXdpbmQiLCIiLDApOworICAgICAgICByZXR1cm4oMEwpOworICAgIH0K KyAgICB0bXBidWZbMjU1XSA9IE5VTDsgICAgICAgICAgICAgICAgICAvKiBNYWtlIHN1cmUgYnVm IGlzIE5VTCB0ZXJtaW5hdGVkICovCisgICAgY3VycmVudCA9IHpfZmlsZVtjaGFubmVsXS0+el9u bGluZTsgIC8qIEN1cnJlbnQgbGluZSAqLworICAgIC8qCisgICAgICBJZiBuZWNlc3NhcnkgdGhl IGZvbGxvd2luZyBjb3VsZCBiZSBvcHRpbWl6ZWQsIGUuZy4gZm9yIHBvc2l0aW9uaW5nCisgICAg ICB0byBhIHByZXZpb3VzIGxpbmUgaW4gYSBsYXJnZSBmaWxlIHdpdGhvdXQgc3RhcnRpbmcgb3Zl ci4KKyAgICAqLworICAgIGlmIChjdXJyZW50IDwgMCB8fCBwb3MgPCBjdXJyZW50KSB7IC8qIE5v dCBrbm93biBvciBiZWhpbmQgdXMuLi4gKi8KKyAgICAgICAgZGVidWcoRjEwMSwiel9saW5lIHJl d2luZGluZyIsIiIscG9zKTsKKyAgICAgICAgaWYgKCh4ID0gel9zZWVrKGNoYW5uZWwsIDBMKSkg PCAwKSAvKiBSZXdpbmQgKi8KKyAgICAgICAgICByZXR1cm4oel9lcnJvciA9IHgpOworICAgICAg ICBpZiAocG9zID09IDApICAgICAgICAgICAgICAgICAgIC8qIElmIDB0aCBsaW5lIHdhbnRlZCB3 ZSdyZSBkb25lICovCisgICAgICAgICAgcmV0dXJuKHpfZXJyb3IgPSAwKTsKKyAgICAgICAgY3Vy cmVudCA9IDA7CisgICAgfQorICAgIHdoaWxlIChjdXJyZW50IDwgcG9zKSB7ICAgICAgICAgICAg IC8qIFNlYXJjaCBmb3Igc3BlY2lmaWVkIGxpbmUgKi8KKyAgICAgICAgaWYgKGZnZXRzKHRtcGJ1 ZiwyNTUsdCkpIHsKKyAgICAgICAgICAgIGxlbiA9IHN0cmxlbih0bXBidWYpOworICAgICAgICAg ICAgaWYgKGxlbiA+IDAgJiYgdG1wYnVmW2xlbi0xXSA9PSAnXG4nKSB7CisgICAgICAgICAgICAg ICAgY3VycmVudCsrOworICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsInpfbGluZSByZWFkIixj a2l0b2EobGVuKSxjdXJyZW50KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobGVuID09IDApIHsK KyAgICAgICAgICAgICAgICByZXR1cm4oel9lcnJvciA9IEZYX1VOSyk7CisgICAgICAgICAgICB9 CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB6X2ZpbGVbY2hhbm5lbF0tPnpfbmxpbmUg PSAtMUw7CisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJ6X2xpbmUgcHJlbWF0dXJlIEVPRiIsIiIs Y3VycmVudCk7CisgICAgICAgICAgICByZXR1cm4oel9lcnJvciA9IEZYX0VPRik7CisgICAgICAg IH0KKyAgICB9CisgICAgel9maWxlW2NoYW5uZWxdLT56X25saW5lID0gY3VycmVudDsKKyAgICBk ZWJ1ZyhGMTAxLCJ6X2xpbmUgcmVzdWx0IiwiIixjdXJyZW50KTsKKyAgICB6X2Vycm9yID0gMDsK KyAgICByZXR1cm4oY3VycmVudCk7Cit9CisKK2NoYXIgKgorel9nZXRuYW1lKGNoYW5uZWwpIGlu dCBjaGFubmVsOyB7ICAgICAgIC8qIFJldHVybiBuYW1lIG9mIGZpbGUgb24gY2hhbm5lbCAqLwor ICAgIEZJTEUgKiB0OworICAgIGlmICghel9pbml0ZWQpIHsKKyAgICAgICAgel9lcnJvciA9IEZY X05PUDsKKyAgICAgICAgcmV0dXJuKE5VTEwpOworICAgIH0KKyAgICBpZiAoY2hhbm5lbCA+PSB6 X21heGNoYW4pIHsKKyAgICAgICAgel9lcnJvciA9IEZYX0NITjsKKyAgICAgICAgcmV0dXJuKE5V TEwpOworICAgIH0KKyAgICBpZiAoIXpfZmlsZVtjaGFubmVsXSkgeworICAgICAgICB6X2Vycm9y ID0gRlhfTk9QOworICAgICAgICByZXR1cm4oTlVMTCk7CisgICAgfQorICAgIGlmICghKHQgPSB6 X2ZpbGVbY2hhbm5lbF0tPnpfZnApKSB7CisgICAgICAgIHpfZXJyb3IgPSBGWF9OT1A7CisgICAg ICAgIHJldHVybihOVUxMKTsKKyAgICB9CisgICAgcmV0dXJuKChjaGFyICopKHpfZmlsZVtjaGFu bmVsXS0+el9uYW1lKSk7Cit9CisKK2ludAorel9nZXRtb2RlKGNoYW5uZWwpIGludCBjaGFubmVs OyB7ICAgICAgIC8qIFJldHVybiBPUEVOIG1vZGVzIG9mIGNoYW5uZWwgKi8KKyAgICBGSUxFICog dDsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAwIGlmIGZpbGUgbm90IG9wZW4gKi8KKyNp Zm5kZWYgTk9TVEFUCisjaWZkZWYgTlQKKyAgICBzdHJ1Y3QgX3N0YXQgc3RhdGJ1ZjsKKyNlbHNl IC8qIE5UICovCisgICAgc3RydWN0IHN0YXQgc3RhdGJ1ZjsKKyNlbmRpZiAvKiBOVCAqLworI2Vu ZGlmIC8qIE5PU1RBVCAqLworICAgIGludCB4OworICAgIGlmICghel9pbml0ZWQpCisgICAgICBy ZXR1cm4oMCk7CisgICAgaWYgKGNoYW5uZWwgPj0gel9tYXhjaGFuKQorICAgICAgcmV0dXJuKHpf ZXJyb3IgPSBGWF9DSE4pOworICAgIGlmICghel9maWxlW2NoYW5uZWxdKQorICAgICAgcmV0dXJu KDApOworICAgIGlmICghKHQgPSB6X2ZpbGVbY2hhbm5lbF0tPnpfZnApKQorICAgICAgcmV0dXJu KDApOworICAgIHggPSB6X2ZpbGVbY2hhbm5lbF0tPnpfZmxhZ3M7CisgICAgaWYgKGZlb2YodCkp IHsgICAgICAgICAgICAgICAgICAgICAgLyogVGhpcyBtaWdodCBub3Qgd29yayBmb3IgKi8KKyAg ICAgICAgeCB8PSBGTV9FT0Y7ICAgICAgICAgICAgICAgICAgICAvKiBvdXRwdXQgZmlsZXMgKi8K KyNpZm5kZWYgTk9TVEFUCisgICAgLyogQnV0IHRoaXMgZG9lcyBpZiB3ZSBjYW4gdXNlIGl0LiAq LworICAgIH0gZWxzZSBpZiAoc3RhdCh6X2ZpbGVbY2hhbm5lbF0tPnpfbmFtZSwmc3RhdGJ1Zikg PiAtMSkgeworICAgICAgICBpZiAoQ0tGVEVMTCh0KSA9PSBzdGF0YnVmLnN0X3NpemUpCisgICAg ICAgICAgeCB8PSBGTV9FT0Y7CisjZW5kaWYgLyogTk9TVEFUICovCisgICAgfQorICAgIHJldHVy bih4KTsKK30KKworQ0tfT0ZGX1QKK3pfZ2V0cG9zKGNoYW5uZWwpIGludCBjaGFubmVsOyB7ICAg ICAgICAvKiBHZXQgZmlsZSBwb2ludGVyIHBvc2l0aW9uICovCisgICAgRklMRSAqIHQ7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogb24gdGhpcyBjaGFubmVsICovCisgICAgQ0tfT0ZGX1Qg eDsKKyAgICBpZiAoIXpfaW5pdGVkKQorICAgICAgcmV0dXJuKHpfZXJyb3IgPSBGWF9OT1ApOwor ICAgIGlmIChjaGFubmVsID49IHpfbWF4Y2hhbikKKyAgICAgIHJldHVybih6X2Vycm9yID0gRlhf Q0hOKTsKKyAgICBpZiAoIXpfZmlsZVtjaGFubmVsXSkKKyAgICAgIHJldHVybih6X2Vycm9yID0g RlhfTk9QKTsKKyAgICBpZiAoISh0ID0gel9maWxlW2NoYW5uZWxdLT56X2ZwKSkKKyAgICAgIHJl dHVybih6X2Vycm9yID0gRlhfTk9QKTsKKyAgICB4ID0gQ0tGVEVMTCh0KTsKKyAgICByZXR1cm4o KHggPCAwTCkgPyAoel9lcnJvciA9IEZYX1NZUykgOiB4KTsKK30KKworQ0tfT0ZGX1QKK3pfZ2V0 bGluZShjaGFubmVsKSBpbnQgY2hhbm5lbDsgeyAgICAgICAvKiBHZXQgY3VycmVudCBsaW5lIG51 bWJlciAqLworICAgIEZJTEUgKiB0OyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluIGZp bGUgb24gdGhpcyBjaGFubmVsICovCisgICAgQ0tfT0ZGX1QgcmM7CisgICAgaWYgKCF6X2luaXRl ZCkKKyAgICAgIHJldHVybih6X2Vycm9yID0gRlhfTk9QKTsKKyAgICBpZiAoY2hhbm5lbCA+PSB6 X21heGNoYW4pCisgICAgICByZXR1cm4oel9lcnJvciA9IEZYX0NITik7CisgICAgaWYgKCF6X2Zp bGVbY2hhbm5lbF0pCisgICAgICByZXR1cm4oel9lcnJvciA9IEZYX05PUCk7CisgICAgaWYgKCEo dCA9IHpfZmlsZVtjaGFubmVsXS0+el9mcCkpCisgICAgICByZXR1cm4oel9lcnJvciA9IEZYX05P UCk7CisgICAgZGVidWcoRjEwMSwiel9nZXRsaW5lIiwiIix6X2ZpbGVbY2hhbm5lbF0tPnpfbmxp bmUpOworICAgIHJjID0gel9maWxlW2NoYW5uZWxdLT56X25saW5lOworICAgIHJldHVybigocmMg PCAwKSA/ICh6X2Vycm9yID0gRlhfTE5VKSA6IHJjKTsKK30KKworaW50Cit6X2dldGZudW0oY2hh bm5lbCkgaW50IGNoYW5uZWw7IHsgICAgICAgLyogR2V0IGZpbGUgbnVtYmVyIC8gaGFuZGxlICov CisgICAgRklMRSAqIHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZm9yIGZpbGUgb24g dGhpcyBjaGFubmVsICovCisgICAgaWYgKCF6X2luaXRlZCkKKyAgICAgIHJldHVybih6X2Vycm9y ID0gRlhfTk9QKTsKKyAgICBpZiAoY2hhbm5lbCA+PSB6X21heGNoYW4pCisgICAgICByZXR1cm4o el9lcnJvciA9IEZYX0NITik7CisgICAgaWYgKCF6X2ZpbGVbY2hhbm5lbF0pCisgICAgICByZXR1 cm4oel9lcnJvciA9IEZYX05PUCk7CisgICAgaWYgKCEodCA9IHpfZmlsZVtjaGFubmVsXS0+el9m cCkpCisgICAgICByZXR1cm4oel9lcnJvciA9IEZYX05PUCk7CisgICAgel9lcnJvciA9IDA7Cisg ICAgcmV0dXJuKGZpbGVubyh0KSk7Cit9CisKKy8qCisgIExpbmUtb3JpZW50ZWQgY291bnRzIGFu ZCBzZWVrcyBhcmUgYXMgZHVtYiBhcyB0aGV5IGNhbiBiZSBhdCB0aGUgbW9tZW50LgorICBMYXRl ciB3ZSBjYW4gc3BlZWQgdGhlbSB1cCBieSBidWlsZGluZyBsaXR0bGUgaW5kZXhlcy4KKyovCitD S19PRkZfVAorel9jb3VudChjaGFubmVsLCB3aGF0KSBpbnQgY2hhbm5lbCwgd2hhdDsgeyAvKiBD b3VudCBieXRlcyBvciBsaW5lcyBpbiBmaWxlICovCisgICAgRklMRSAqIHQ7CisgICAgaW50IGks IHg7CisgICAgQ0tfT0ZGX1QgcG9zLCBjb3VudCA9IChDS19PRkZfVCkwOworICAgIGlmICghel9p bml0ZWQpICAgICAgICAgICAgICAgICAgICAgIC8qIENoZWNrIHN0dWZmLi4uICovCisgICAgICBy ZXR1cm4oel9lcnJvciA9IEZYX05PUCk7CisgICAgaWYgKGNoYW5uZWwgPj0gel9tYXhjaGFuKQor ICAgICAgcmV0dXJuKHpfZXJyb3IgPSBGWF9DSE4pOworICAgIGlmICghel9maWxlW2NoYW5uZWxd KQorICAgICAgcmV0dXJuKHpfZXJyb3IgPSBGWF9OT1ApOworICAgIGlmICghKHQgPSB6X2ZpbGVb Y2hhbm5lbF0tPnpfZnApKQorICAgICAgcmV0dXJuKHpfZXJyb3IgPSBGWF9OT1ApOworICAgIHBv cyA9IENLRlRFTEwodCk7CQkJLyogU2F2ZSBjdXJyZW50IGZpbGUgcG9pbnRlciAqLworICAgIGVy cm5vID0gMDsKKyAgICB6X2Vycm9yID0gMDsKKyAgICBpZiAod2hhdCA9PSBSRF9DSEFSKSB7ICAg ICAgICAgICAgICAvKiBTaXplIGluIGJ5dGVzIHJlcXVlc3RlZCAqLworI2lmZGVmIENPTU1FTlQK KyAgICAgICAgaWYgKCFDS0ZTRUVLKHQsMEwsMikpIHsJCS8qIFNlZWsgdG8gZW5kICovCisgICAg ICAgICAgICBjb3VudCA9IENLRlRFTEwodCk7CQkvKiBHZXQgZmlsZSBwb2ludGVyICovCisgICAg ICAgICAgICBDS0ZTRUVLKHQscG9zLDApOwkJLyogUmVzdG9yZSBmaWxlIGZpbGUgcG9pbnRlciAq LworICAgICAgICAgICAgcmV0dXJuKGNvdW50KTsKKyAgICAgICAgfSBlbHNlICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBGYWxsYmFjayBpbiBjYXNlIHNlZWsgZmFpbHMgKi8KKyNlbmRpZgkv KiBDT01NRU5UICovCisgICAgICAgICAgcmV0dXJuKHpnZXRmcyh6X2ZpbGVbY2hhbm5lbF0tPnpf bmFtZSkpOworICAgIH0KKyAgICByZXdpbmQodCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBMaW5lIGNvdW50IHJlcXVlc3RlZCAtIHJld2luZC4gKi8KKyAgICB3aGlsZSAoMSkgeyAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBDb3VudCBsaW5lcy4gKi8KKyAgICAgICAgaWYgKCh4ID0g Z2V0Yyh0KSkgPT0gRU9GKSAgICAgICAvKiBTdHVwaWQgYnl0ZSBsb29wICovCisgICAgICAgICAg YnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgLyogYnV0IGl0IHdvcmtzIGFzIHdlbGwgYXMg YW55dGhpbmcgKi8KKyAgICAgICAgaWYgKHggPT0gJ1xuJykgICAgICAgICAgICAgICAgICAvKiBl bHNlLi4uICovCisgICAgICAgICAgY291bnQrKzsKKyAgICB9CisgICAgeCA9IENLRlNFRUsodCxw b3MsMCk7CQkvKiBSZXN0b3JlIGZpbGUgcG9pbnRlciAqLworICAgIHJldHVybihjb3VudCk7Cit9 CisKKy8qIFVzZXIgaW50ZXJmYWNlIGZvciBnZW5lcmFsaXplZCBjaGFubmVsLW9yaWVudGVkIGZp bGUgaS9vICovCisKK3N0cnVjdCBrZXl0YWIgZmN0YWJbXSA9IHsgICAgICAgICAgICAgICAvKiBG SUxFIHN1YmNvbW1hbmRzICovCisgICAgeyAiY2xvc2UiLCAgICAgIEZJTF9DTFMsIDAgfSwKKyAg ICB7ICJjb3VudCIsICAgICAgRklMX0NPVSwgMCB9LAorICAgIHsgImZsdXNoIiwgICAgICBGSUxf RkxVLCAwIH0sCisgICAgeyAibGlzdCIsICAgICAgIEZJTF9MSVMsIDAgfSwKKyAgICB7ICJvcGVu IiwgICAgICAgRklMX09QTiwgMCB9LAorICAgIHsgInJlYWQiLCAgICAgICBGSUxfUkVBLCAwIH0s CisgICAgeyAicmV3aW5kIiwgICAgIEZJTF9SRVcsIDAgfSwKKyAgICB7ICJzZWVrIiwgICAgICAg RklMX1NFRSwgMCB9LAorICAgIHsgInN0YXR1cyIsICAgICBGSUxfU1RBLCAwIH0sCisgICAgeyAi d3JpdGUiLCAgICAgIEZJTF9XUkksIDAgfQorfTsKK2ludCBuZmN0YWIgPSAoc2l6ZW9mIChmY3Rh YikgLyBzaXplb2YgKHN0cnVjdCBrZXl0YWIpKTsKKworc3RhdGljIHN0cnVjdCBrZXl0YWIgZmNz d3RhYltdID0geyAgICAgIC8qIE9QRU4gbW9kZXMgKi8KKyAgICB7ICIvYXBwZW5kIiwgICAgRk1f QVBQLCAgMCB9LAorICAgIHsgIi9iaW5hcnkiLCAgICBGTV9CSU4sICAwIH0sCisjaWZkZWYgQ09N TUVOVAorICAgIHsgIi9jb21tYW5kIiwgICBGTV9DTUQsICAwIH0sICAgICAgIC8qIE5vdCBpbXBs ZW1lbnRlZCAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICB7ICIvcmVhZCIsICAgICAgRk1f UkVBLCAgMCB9LAorICAgIHsgIi93cml0ZSIsICAgICBGTV9XUkksICAwIH0KK307CitzdGF0aWMg aW50IG5mY3N3dGFiID0gKHNpemVvZiAoZmNzd3RhYikgLyBzaXplb2YgKHN0cnVjdCBrZXl0YWIp KTsKKworc3RhdGljIHN0cnVjdCBrZXl0YWIgZmNsa3d0YWJbXSA9IHsgICAgIC8qIENMT1NFIG9w dGlvbnMgKi8KKyAgICB7ICJhbGwiLCAgICAgICAgMSwgICAgICAgMCB9Cit9OworCitzdGF0aWMg c3RydWN0IGtleXRhYiBmc2Vrd3RhYltdID0geyAgICAgLyogU0VFSyBzeW1ib2xzICovCisgICAg eyAiZW9mIiwgICAgICAgIDEsICAgICAgIDAgfSwKKyAgICB7ICJsYXN0IiwgICAgICAgMiwgICAg ICAgMCB9Cit9Oworc3RhdGljIGludCBuZnNla3d0YWIgPSAoc2l6ZW9mIChmc2Vrd3RhYikgLyBz aXplb2YgKHN0cnVjdCBrZXl0YWIpKTsKKworI2RlZmluZSBTRUVfTElORSAgUkRfTElORSAgICAg ICAgICAgICAgIC8qIFNFRUsgb3B0aW9ucyAqLworI2RlZmluZSBTRUVfQ0hBUiAgUkRfQ0hBUgor I2RlZmluZSBTRUVfUkVMICAgMworI2RlZmluZSBTRUVfQUJTICAgNAorI2RlZmluZSBTRUVfRklO RCAgNQorCitzdGF0aWMgc3RydWN0IGtleXRhYiBmc2tzd3RhYltdID0geworICAgIHsgIi9hYnNv bHV0ZSIsICBTRUVfQUJTLCAgMCB9LAorICAgIHsgIi9ieXRlIiwgICAgICBTRUVfQ0hBUiwgMCB9 LAorICAgIHsgIi9jaGFyYWN0ZXIiLCBTRUVfQ0hBUiwgQ01fSU5WIH0sCisgICAgeyAiL2ZpbmQi LCAgICAgIFNFRV9GSU5ELCBDTV9BUkcgfSwKKyAgICB7ICIvbGluZSIsICAgICAgU0VFX0xJTkUs IDAgfSwKKyAgICB7ICIvcmVsYXRpdmUiLCAgU0VFX1JFTCwgIDAgfQorfTsKK3N0YXRpYyBpbnQg bmZza3N3dGFiID0gKHNpemVvZiAoZnNrc3d0YWIpIC8gc2l6ZW9mIChzdHJ1Y3Qga2V5dGFiKSk7 CisKKyNkZWZpbmUgQ09VX0xJTkUgIFJEX0xJTkUgICAgICAgICAgICAgICAvKiBDT1VOVCBvcHRp b25zICovCisjZGVmaW5lIENPVV9DSEFSICBSRF9DSEFSCisjZGVmaW5lIENPVV9MSVMgICAzCisj ZGVmaW5lIENPVV9OT0wgICA0CisKK3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIGZjb3N3dGFiW10gPSB7 CisgICAgeyAiL2J5dGVzIiwgICAgIENPVV9DSEFSLCAwICAgICAgfSwKKyAgICB7ICIvY2hhcmFj dGVycyIsQ09VX0NIQVIsIENNX0lOViB9LAorICAgIHsgIi9saW5lcyIsICAgICBDT1VfTElORSwg MCAgICAgIH0sCisgICAgeyAiL2xpc3QiLCAgICAgIENPVV9MSVMsICAwICAgICAgfSwKKyAgICB7 ICIvbm9saXN0IiwgICAgQ09VX05PTCwgIDAgICAgICB9LAorICAgIHsgIi9xdWlldCIsICAgICBD T1VfTk9MLCAgQ01fSU5WIH0KK307CitzdGF0aWMgaW50IG5mY29zd3RhYiA9IChzaXplb2YgKGZj b3N3dGFiKSAvIHNpemVvZiAoc3RydWN0IGtleXRhYikpOworCitzdGF0aWMgc3RydWN0IGtleXRh YiBmcmR0YWJbXSA9IHsgICAgICAgLyogUkVBRCB0eXBlcyAqLworICAgIHsgIi9ibG9jayIsICAg ICBSRF9TSVpFLCBDTV9JTlZ8Q01fQVJHIH0sCisgICAgeyAiL2J5dGUiLCAgICAgIFJEX0NIQVIs IENNX0lOViB9LAorICAgIHsgIi9jaGFyYWN0ZXIiLCBSRF9DSEFSLCAwICAgICAgfSwKKyAgICB7 ICIvbGluZSIsICAgICAgUkRfTElORSwgMCAgICAgIH0sCisgICAgeyAiL3NpemUiLCAgICAgIFJE X1NJWkUsIENNX0FSRyB9LAorICAgIHsgIi90cmltIiwgICAgICBSRF9UUklNLCAwICAgICAgfSwK KyAgICB7ICIvdW50YWJpZnkiLCAgUkRfVU5UQSwgMCAgICAgIH0KK307CitzdGF0aWMgaW50IG5m cmR0YWIgPSAoc2l6ZW9mIChmcmR0YWIpIC8gc2l6ZW9mIChzdHJ1Y3Qga2V5dGFiKSk7CisKK3N0 YXRpYyBzdHJ1Y3Qga2V5dGFiIGZ3cnRhYltdID0geyAgICAgICAvKiBXUklURSB0eXBlcyAqLwor ICAgIHsgIi9ibG9jayIsICAgICBXUl9TSVpFLCBDTV9JTlZ8Q01fQVJHIH0sCisgICAgeyAiL2J5 dGUiLCAgICAgIFdSX0NIQVIsIENNX0lOViB9LAorICAgIHsgIi9jaGFyYWN0ZXIiLCBXUl9DSEFS LCAwICAgICAgfSwKKyAgICB7ICIvbGluZSIsICAgICAgV1JfTElORSwgMCAgICAgIH0sCisgICAg eyAiL2xwYWQiLCAgICAgIFdSX0xQQUQsIENNX0FSRyB9LAorICAgIHsgIi9ycGFkIiwgICAgICBX Ul9SUEFELCBDTV9BUkcgfSwKKyAgICB7ICIvc2l6ZSIsICAgICAgV1JfU0laRSwgQ01fQVJHIH0s CisgICAgeyAiL3N0cmluZyIsICAgIFdSX1NUUkksIDAgICAgICB9Cit9Oworc3RhdGljIGludCBu ZndydGFiID0gKHNpemVvZiAoZndydGFiKSAvIHNpemVvZiAoc3RydWN0IGtleXRhYikpOworCitz dGF0aWMgY2hhciBibGFua3NbXSA9ICJcMDQwXDA0MFwwNDBcMDQwIjsgLyogU29tZSBibGFua3Mg Zm9yIGZvcm1hdHRpbmcgKi8KK3N0YXRpYyBjaGFyICogc2Vla190YXJnZXQgPSBOVUxMOworCitp bnQKK2RvZmlsZShvcCkgaW50IG9wOyB7ICAgICAgICAgICAgICAgICAgICAvKiBEbyB0aGUgRklM RSBjb21tYW5kICovCisgICAgY2hhciB2bmFtYnVmW1ZOQU1MXTsgICAgICAgICAgICAgICAgLyog QnVmZmVyIGZvciB2YXJpYWJsZSBuYW1lcyAqLworICAgIGNoYXIgKnZucCA9IE5VTEw7ICAgICAg ICAgICAgICAgICAgIC8qIFBvaW50ZXIgdG8gc2FtZSAqLworICAgIGNoYXIgemZpbG5hbVtDS01B WFBBVEgrMl07CisgICAgY2hhciAqIHAsICogbTsKKyAgICBzdHJ1Y3QgRkRCIGZsLCBzdywgbnU7 CisgICAgQ0tfT0ZGX1QgejsKKyAgICBpbnQgcnNpemUsIGZpbG1vZGUgPSAwLCByZWxhdGl2ZSA9 IC0xLCBlb2ZmbGcgPSAwOworICAgIGludCByYywgeCwgeSwgY3gsIG4sIGdldHZhbCwgZHVtbXks IGNvbmZpcm1lZCwgbGlzdGluZyA9IC0xOworICAgIGludCBjaGFyZmxhZyA9IDAsIHNpemVmbGFn ID0gMDsKKyAgICBpbnQgcGFkID0gMzIsIHdyX2xwYWQgPSAwLCB3cl9ycGFkID0gMCwgcmRfdHJp bSA9IDAsIHJkX3VudGFiID0gMDsKKworICAgIG1ha2VzdHIoJnNlZWtfdGFyZ2V0LE5VTEwpOwor CisgICAgaWYgKG9wID09IFhYRklMRSkgeyAgICAgICAgICAgICAgICAgLyogRklMRSBjb21tYW5k IHdhcyBnaXZlbiAqLworICAgICAgICAvKiBHZXQgc3ViY29tbWFuZCAqLworICAgICAgICBpZiAo KGN4ID0gY21rZXkoZmN0YWIsbmZjdGFiLCJPcGVyYXRpb24iLCIiLHh4c3RyaW5nKSkgPCAwKSB7 CisgICAgICAgICAgICBpZiAoY3ggPT0gLTMpIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIj9G aWxlIG9wZXJhdGlvbiByZXF1aXJlZFxuIik7CisgICAgICAgICAgICAgICAgeCA9IC05OworICAg ICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuKGN4KTsKKyAgICAgICAgfQorICAgIH0gZWxz ZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNob3J0aGFuZCBjb21tYW5kIHdhcyBn aXZlbiAqLworICAgICAgICBzd2l0Y2ggKG9wKSB7CisgICAgICAgICAgY2FzZSBYWEZfQ0w6IGN4 ID0gRklMX0NMUzsgYnJlYWs7IC8qIEZDTE9TRSAqLworICAgICAgICAgIGNhc2UgWFhGX0ZMOiBj eCA9IEZJTF9GTFU7IGJyZWFrOyAvKiBGRkxVU0ggKi8KKyAgICAgICAgICBjYXNlIFhYRl9MSTog Y3ggPSBGSUxfTElTOyBicmVhazsgLyogRkxJU1QgKi8KKyAgICAgICAgICBjYXNlIFhYRl9PUDog Y3ggPSBGSUxfT1BOOyBicmVhazsgLyogZXRjLi4uICovCisgICAgICAgICAgY2FzZSBYWEZfUkU6 IGN4ID0gRklMX1JFQTsgYnJlYWs7CisgICAgICAgICAgY2FzZSBYWEZfUlc6IGN4ID0gRklMX1JF VzsgYnJlYWs7CisgICAgICAgICAgY2FzZSBYWEZfU0U6IGN4ID0gRklMX1NFRTsgYnJlYWs7Cisg ICAgICAgICAgY2FzZSBYWEZfU1Q6IGN4ID0gRklMX1NUQTsgYnJlYWs7CisgICAgICAgICAgY2Fz ZSBYWEZfV1I6IGN4ID0gRklMX1dSSTsgYnJlYWs7CisgICAgICAgICAgY2FzZSBYWEZfQ086IGN4 ID0gRklMX0NPVTsgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDogcmV0dXJuKC0yKTsKKyAgICAg ICAgfQorICAgIH0KKyAgICBzd2l0Y2ggKGN4KSB7ICAgICAgICAgICAgICAgICAgICAgICAvKiBE byByZXF1ZXN0ZWQgc3ViY29tbWFuZCAqLworICAgICAgY2FzZSBGSUxfT1BOOiAgICAgICAgICAg ICAgICAgICAgIC8qIE9QRU4gKi8KKyAgICAgICAgY21mZGJpKCZzdywgICAgICAgICAgICAgICAg ICAgICAvKiBTd2l0Y2hlcyAqLworICAgICAgICAgICAgICAgX0NNS0VZLCAgICAgICAgICAgICAg ICAgIC8qIGZjb2RlICovCisgICAgICAgICAgICAgICAiVmFyaWFibGUgb3Igc3dpdGNoIiwgICAg LyogaGxwbXNnICovCisgICAgICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgLyog ZGVmYXVsdCAqLworICAgICAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgIC8qIGFk ZHRsIHN0cmluZyBkYXRhICovCisgICAgICAgICAgICAgICBuZmNzd3RhYiwgICAgICAgICAgICAg ICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDE6IHRibCBzaXplICovCisgICAgICAgICAgICAgICA0 LCAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDI6IDQgPSBjbXN3 aSAqLworICAgICAgICAgICAgICAgeHhzdHJpbmcsICAgICAgICAgICAgICAgIC8qIFByb2Nlc3Np bmcgZnVuY3Rpb24gKi8KKyAgICAgICAgICAgICAgIGZjc3d0YWIsICAgICAgICAgICAgICAgICAv KiBLZXl3b3JkIHRhYmxlICovCisgICAgICAgICAgICAgICAmZmwgICAgICAgICAgICAgICAgICAg ICAgLyogUG9pbnRlciB0byBuZXh0IEZEQiAqLworICAgICAgICAgICAgICAgKTsKKyAgICAgICAg Y21mZGJpKCZmbCwgICAgICAgICAgICAgICAgICAgICAvKiBBbnl0aGluZyB0aGF0IGRvZXNuJ3Qg bWF0Y2ggKi8KKyAgICAgICAgICAgICAgIF9DTUZMRCwgICAgICAgICAgICAgICAgICAvKiBmY29k ZSAqLworICAgICAgICAgICAgICAgIlZhcmlhYmxlIiwgICAgICAgICAgICAgIC8qIGhscG1zZyAq LworICAgICAgICAgICAgICAgIiIsCisgICAgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgICAg IDAsCisgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAg ICAgIE5VTEwsCisgICAgICAgICAgICAgICBOVUxMCisgICAgICAgICAgICAgICApOworICAgICAg ICB3aGlsZSAoMSkgeworICAgICAgICAgICAgeCA9IGNtZmRiKCZzdyk7ICAgICAgICAgICAgIC8q IFBhcnNlIHNvbWV0aGluZyAqLworICAgICAgICAgICAgaWYgKHggPCAwKSB7CisgICAgICAgICAg ICAgICAgaWYgKHggPT0gLTMpIHsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/VmFyaWFi bGUgbmFtZSBhbmQgZmlsZSBuYW1lIHJlcXVpcmVkXG4iKTsKKyAgICAgICAgICAgICAgICAgICAg eCA9IC05OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4oeCk7Cisg ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoY21yZXN1bHQuZmNvZGUgPT0gX0NNRkxEKQor ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGVsc2UgaWYgKGNtcmVzdWx0LmZjb2Rl ID09IF9DTUtFWSkgeworICAgICAgICAgICAgICAgIGNoYXIgYzsKKyAgICAgICAgICAgICAgICBj ID0gY21nYnJrKCk7CisgICAgICAgICAgICAgICAgaWYgKChnZXR2YWwgPQorICAgICAgICAgICAg ICAgICAgICAgKGMgPT0gJzonIHx8IGMgPT0gJz0nKSkgJiYgIShjbWdrd2ZsZ3MoKSAmIENNX0FS RykpIHsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/VGhpcyBzd2l0Y2ggZG9lcyBub3Qg dGFrZSBhbiBhcmd1bWVudFxuIik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybigtOSk7Cisg ICAgICAgICAgICAgICAgfQorI2lmZGVmIENPTU1FTlQKKyAgICAgICAgICAgICAgICAvKiBVbmNv bW1lbnQgaWYgd2UgYWRkIGFueSBzd2l0Y2hlcyBoZXJlIHRoYXQgdGFrZSBhcmdzICovCisgICAg ICAgICAgICAgICAgaWYgKCFnZXR2YWwgJiYgKGNtZ2t3ZmxncygpICYgQ01fQVJHKSkgeworICAg ICAgICAgICAgICAgICAgICBwcmludGYoIj9UaGlzIHN3aXRjaCByZXF1aXJlcyBhbiBhcmd1bWVu dFxuIik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybigtOSk7ICAgICAgICAgLyogKG5vbmUg ZG8uLi4pICovCisgICAgICAgICAgICAgICAgfQorI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAg ICAgICAgICAgICBmaWxtb2RlIHw9IGNtcmVzdWx0Lm5yZXN1bHQ7IC8qIE9SIGluIHRoZSBmaWxl IG1vZGUgKi8KKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICByZXR1cm4oLTIpOwor ICAgICAgICB9CisgICAgICAgIC8qIE5vdCBhIHN3aXRjaCAtIGdldCB0aGUgc3RyaW5nICovCisg ICAgICAgIGNrc3RybmNweSh2bmFtYnVmLGNtcmVzdWx0LnNyZXN1bHQsVk5BTUwpOworICAgICAg ICBpZiAoIXZuYW1idWZbMF0gfHwgY2hrbnVtKHZuYW1idWYpKSB7IC8qIChpZiB0aGVyZSBpcyBv bmUuLi4pICovCisgICAgICAgICAgICBwcmludGYoIj9WYXJpYWJsZSBuYW1lIHJlcXVpcmVkXG4i KTsKKyAgICAgICAgICAgIHJldHVybigtOSk7CisgICAgICAgIH0KKyAgICAgICAgdm5wID0gdm5h bWJ1ZjsgICAgICAgICAgICAgICAgICAvKiBDaGVjayB2YXJpYWJsZS1uYW1lIHN5bnRheCAqLwor ICAgICAgICBpZiAodm5hbWJ1ZlswXSA9PSBDTURRICYmCisgICAgICAgICAgICAodm5hbWJ1Zlsx XSA9PSAnJScgfHwgdm5hbWJ1ZlsxXSA9PSAnJicpKQorICAgICAgICAgIHZucCsrOworICAgICAg ICB5ID0gMDsKKyAgICAgICAgaWYgKCp2bnAgPT0gJyUnIHx8ICp2bnAgPT0gJyYnKSB7CisgICAg ICAgICAgICBpZiAoKHkgPSBwYXJzZXZhcih2bnAsJngsJmR1bW15KSkgPCAwKSB7CisgICAgICAg ICAgICAgICAgcHJpbnRmKCI/U3ludGF4IGVycm9yIGluIHZhcmlhYmxlIG5hbWVcbiIpOworICAg ICAgICAgICAgICAgIHJldHVybigtOSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwkvKiBB c3NpZ24gYSBuZWdhdGl2ZSBjaGFubmVsIG51bWJlciBpbiBjYXNlIHdlIGZhaWwgKi8KKwlhZGRt YWModm5hbWJ1ZiwiLTEiKTsKKworICAgICAgICBpZiAoIShmaWxtb2RlICYgRk1fUldBKSkgICAg ICAgIC8qIElmIG5vIGFjY2VzcyBtb2RlIHNwZWNpZmllZCAqLworICAgICAgICAgIGZpbG1vZGUg fD0gRk1fUkVBOyAgICAgICAgICAgIC8qIGRlZmF1bHQgdG8gL1JFQUQuICovCisKKyAgICAgICAg eSA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOb3cgcGFyc2UgdGhlIGZpbGVuYW1l ICovCisgICAgICAgIGlmICgoZmlsbW9kZSAmIEZNX1JXQSkgPT0gRk1fV1JJKSB7CisJICAgIHgg PSBjbW9maSgiTmFtZSBvZiBuZXcgZmlsZSIsIiIsJnMseHhzdHJpbmcpOworCX0gZWxzZSBpZiAo KGZpbG1vZGUgJiBGTV9SV0EpID09IEZNX1JFQSkgeworCSAgICB4ID0gY21pZmkoIk5hbWUgb2Yg ZXhpc3RpbmcgZmlsZSIsIiIsJnMsJnkseHhzdHJpbmcpOworCX0gZWxzZSB7CisgICAgICAgICAg ICB4ID0gY21pb2ZpKCJGaWxlbmFtZSIsIiIsJnMsJnkseHhzdHJpbmcpOworICAgICAgICAgICAg ZGVidWcoRjExMSwiZm9wZW4gL2FwcGVuZCB4IixzLHgpOworCX0KKyAgICAgICAgaWYgKHggPCAw KSB7CisgICAgICAgICAgICBpZiAoeCA9PSAtMykgeworICAgICAgICAgICAgICAgIHByaW50Zigi P0ZpbGVuYW1lIHJlcXVpcmVkXG4iKTsKKyAgICAgICAgICAgICAgICB4ID0gLTk7CisgICAgICAg ICAgICB9CisgICAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHkp IHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBObyB3aWxkY2FyZHMgKi8KKyAgICAgICAgICAg IHByaW50ZigiP1dpbGRjYXJkcyBub3QgYWxsb3dlZCBoZXJlXG4iKTsKKyAgICAgICAgICAgIHJl dHVybigtOSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZpbG1vZGUgJiAoRk1fQVBQfEZNX1dS SSkpIHsgLyogQ2hlY2sgb3V0cHV0IGFjY2VzcyAqLworI2lmbmRlZiBWTVMKKyAgICAgICAgICAg IGlmICh6Y2hrbyhzKSA8IDApIHsgICAgICAgICAgLyogYW5kIHNldCBlcnJvciBjb2RlIGlmIGRl bmllZCAqLworICAgICAgICAgICAgICAgIHpfZXJyb3IgPSBGWF9BQ0M7CisgICAgICAgICAgICAg ICAgcHJpbnRmKCI/V3JpdGUgYWNjZXNzIGRlbmllZCAtIFwiJXNcIlxuIixzKTsKKyAgICAgICAg ICAgICAgICByZXR1cm4oLTkpOworICAgICAgICAgICAgfQorI2VuZGlmIC8qIFZNUyAqLworICAg ICAgICB9CisgICAgICAgIGNrc3RybmNweSh6ZmlsbmFtLHMsQ0tNQVhQQVRIKTsgLyogSXMgT0sg LSBtYWtlIHNhZmUgY29weSAqLworICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApICAgICAg ICAgIC8qIEdldCBjb25maXJtYXRpb24gb2YgY29tbWFuZCAqLworICAgICAgICAgIHJldHVybih4 KTsKKyAgICAgICAgaWYgKChuID0gel9vcGVuKHpmaWxuYW0sZmlsbW9kZSkpIDwgMCkgeworICAg ICAgICAgICAgcHJpbnRmKCI/T1BFTiBmYWlsZWQgLSAlczogJXNcbiIsemZpbG5hbSxja2ZlcnJv cihuKSk7CisgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICB9CisgICAgICAgIGFkZG1h Yyh2bmFtYnVmLGNraXRvYShuKSk7ICAgICAgLyogQXNzaWduIGNoYW5uZWwgbnVtYmVyIHRvIHZh cmlhYmxlICovCisgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisKKyAgICAgIGNhc2UgRklM X1JFVzogICAgICAgICAgICAgICAgICAgICAvKiBSRVdJTkQgKi8KKyAgICAgICAgaWYgKCh4ID0g Y21udW0oIkNoYW5uZWwgbnVtYmVyIiwiIiwxMCwmbiwgeHhzdHJpbmcpKSA8IDApIHsKKyAgICAg ICAgICAgIGlmICh4ID09IC0zKSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCI/Q2hhbm5lbCBu dW1iZXIgcmVxdWlyZWRcbiIpOworICAgICAgICAgICAgICAgIHggPSAtOTsKKyAgICAgICAgICAg IH0KKyAgICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoKHggPSBj bWNmbSgpKSA8IDApCisgICAgICAgICAgcmV0dXJuKHgpOworCWlmIChuID09IC05KSByZXR1cm4o c3VjY2VzcyA9IDApOworCWlmIChuID09IC04KSByZXR1cm4oc3VjY2VzcyA9IDEpOworCisgICAg ICAgIGlmICgocmMgPSB6X3NlZWsobiwwTCkpIDwgMCkgeworICAgICAgICAgICAgcHJpbnRmKCI/ UkVXSU5EIGZhaWxlZCAtIENoYW5uZWwgJWQ6ICVzXG4iLG4sY2tmZXJyb3IocmMpKTsKKyAgICAg ICAgICAgIHJldHVybigtOSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAx KTsKKworICAgICAgY2FzZSBGSUxfQ0xTOiAgICAgICAgICAgICAgICAgICAgIC8qIENMT1NFICov CisjaWZkZWYgQ09NTUVOVAkJCQkvKiBmZGMgMjAxMDA4MDQgLSBiYWQgaWRlYSAqLworICAgICAg ICAgeworCSAgICBpbnQgaSwgaiwgazsJCS8qIFN1cHBseSBkZWZhdWx0IGlmIG9ubHkgb25lIG9w ZW4gKi8KKwkgICAgcyA9ICIiOworCSAgICBmb3IgKGsgPSAwLCBqID0gMCwgaSA9IDA7IGkgPCB6 X21heGNoYW47IGkrKykgeworCQlpZiAoel9maWxlKQorCQkgIGlmICh6X2ZpbGVbaV0pCisJCSAg ICBpZiAoel9maWxlW2ldLT56X2ZwKSB7IGsrKzsgaiA9IGk7IH0KKwkgICAgfQorCSAgICBpZiAo ayA9PSAxKSBzID0gY2tpdG9hKGopOworCSB9CisjZW5kaWYJLyogQ09NTUVOVCAqLworICAgICAg ICAgIGNtZmRiaSgmbnUsICAgICAgICAgICAgICAgICAgIC8qIFNlY29uZCBGREIgLSBjaGFubmVs IG51bWJlciAqLworICAgICAgICAgICAgICAgICBfQ01OVU0sICAgICAgICAgICAgICAgIC8qIGZj b2RlICovCisgICAgICAgICAgICAgICAgICJDaGFubmVsIG51bWJlciBvciBBTEwiLCAvKiBIZWxw IG1lc3NhZ2UgKi8KKyAgICAgICAgICAgICAgICAgcywJCQkvKiBkZWZhdWx0ICovCisgICAgICAg ICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8K KyAgICAgICAgICAgICAgICAgMTAsICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmlj IGRhdGEgMTogcmFkaXggKi8KKyAgICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAg ICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMjogMCAqLworICAgICAgICAgICAgICAgICB4eHN0cmlu ZywgICAgICAgICAgICAgIC8qIFByb2Nlc3NpbmcgZnVuY3Rpb24gKi8KKyAgICAgICAgICAgICAg ICAgTlVMTCwgICAgICAgICAgICAgICAgICAvKiBLZXl3b3JkIHRhYmxlICovCisgICAgICAgICAg ICAgICAgICZzdwkJCS8qIFBvaW50ZXIgdG8gbmV4dCBGREIgKi8KKyAgICAgICAgICAgICAgICAg KTsgICAgICAgICAgICAgICAgICAgICAvKiBQb2ludGVyIHRvIG5leHQgRkRCICovCisJIGNtZmRi aSgmc3csCQkJLyogRmlyc3QgRkRCIC0gY29tbWFuZCBzd2l0Y2hlcyAqLworICAgICAgICAgICAg ICAgICBfQ01LRVksICAgICAgICAgICAgICAgIC8qIGZjb2RlICovCisgICAgICAgICAgICAgICAg ICIiLAkJCS8qIGhlbHAgbWVzc2FnZSAqLworCQkgIiIsCQkJLyogRGVmYXVsdCAqLworCQkgIiIs CQkJLyogTm8gYWRkdGwgc3RyaW5nIGRhdGEgKi8KKyAgICAgICAgICAgICAgICAgMSwgICAgICAg ICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMTogdGJsIHNpemUgKi8KKyAgICAg ICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEg MjogNCA9IGNtc3dpICovCisgICAgICAgICAgICAgICAgIHh4c3RyaW5nLCAgICAgICAgICAgICAg LyogUHJvY2Vzc2luZyBmdW5jdGlvbiAqLworICAgICAgICAgICAgICAgICBmY2xrd3RhYiwgICAg ICAgICAgICAgIC8qIEtleXdvcmQgdGFibGUgKi8KKwkJIE5VTEwJCQkvKiBMYXN0IGluIGNoYWlu ICovCisgICAgICAgICAgICAgICAgICk7CisgICAgICAgIHggPSBjbWZkYigmbnUpOyAgICAgICAg ICAgICAgICAgLyogUGFyc2Ugc29tZXRoaW5nICovCisgICAgICAgIGlmICh4IDwgMCkgeworICAg ICAgICAgICAgaWYgKHggPT0gLTMpIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIj9DaGFubmVs IG51bWJlciBvciBBTEwgcmVxdWlyZWRcbiIpOworICAgICAgICAgICAgICAgIHggPSAtOTsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgfQorICAgICAgICBp ZiAoY21yZXN1bHQuZmNvZGUgPT0gX0NNTlVNKQorICAgICAgICAgIG4gPSBjbXJlc3VsdC5ucmVz dWx0OworICAgICAgICBlbHNlIGlmIChjbXJlc3VsdC5mY29kZSA9PSBfQ01LRVkpCisgICAgICAg ICAgbiA9IC0xOworICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApCisgICAgICAgICAgcmV0 dXJuKHgpOworCWlmIChuID09IC05KSByZXR1cm4oc3VjY2VzcyA9IDApOworCWlmIChuID09IC04 KSByZXR1cm4oc3VjY2VzcyA9IDEpOworCisgICAgICAgIHJjID0gMTsKKyAgICAgICAgaWYgKG4g PCAwKSB7CisgICAgICAgICAgICBpbnQgY291bnQgPSAwOworICAgICAgICAgICAgaW50IGk7Cisg ICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgel9tYXhjaGFuOyBpKyspIHsKKyAgICAgICAgICAg ICAgICB4ID0gel9jbG9zZShpKTsKKyAgICAgICAgICAgICAgICBpZiAoeCA9PSBGWF9TWVMpIHsK KyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/Q0xPU0UgZmFpbGVkIC0gQ2hhbm5lbCAlZDog JXNcbiIsbixja2ZlcnJvcih4KSk7CisgICAgICAgICAgICAgICAgICAgIHJjID0gMDsKKyAgICAg ICAgICAgICAgICB9IGVsc2UgaWYgKHggPiAtMSkKKyAgICAgICAgICAgICAgICAgIGNvdW50Kys7 CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJGSUxFIENMT1NFIEFMTCIs IiIsY291bnQpOworICAgICAgICB9IGVsc2UgaWYgKCh4ID0gel9jbG9zZShuKSkgPCAwKSB7Cisg ICAgICAgICAgICBwcmludGYoIj9DTE9TRSBmYWlsZWQgLSBDaGFubmVsICVkOiAlc1xuIixuLGNr ZmVycm9yKHgpKTsKKyAgICAgICAgICAgIHJldHVybigtOSk7CisgICAgICAgIH0KKyAgICAgICAg cmV0dXJuKHN1Y2Nlc3MgPSByYyk7CisKKyAgICAgIGNhc2UgRklMX1JFQTogICAgICAgICAgICAg ICAgICAgICAvKiBSRUFEICovCisgICAgICBjYXNlIEZJTF9XUkk6ICAgICAgICAgICAgICAgICAg ICAgLyogV1JJVEUgKi8KKyAgICAgICAgcnNpemUgPSAwOworICAgICAgICBjbWZkYmkoJnN3LCAg ICAgICAgICAgICAgICAgICAgIC8qIFN3aXRjaGVzICovCisgICAgICAgICAgICAgICBfQ01LRVks ICAgICAgICAgICAgICAgICAgLyogZmNvZGUgKi8KKyAgICAgICAgICAgICAgICJDaGFubmVsIG9y IHN3aXRjaCIsICAgICAvKiBobHBtc2cgKi8KKyAgICAgICAgICAgICAgICIiLCAgICAgICAgICAg ICAgICAgICAgICAvKiBkZWZhdWx0ICovCisgICAgICAgICAgICAgICAiIiwgICAgICAgICAgICAg ICAgICAgICAgLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KKyAgICAgICAgICAgICAgIChjeCA9PSBG SUxfUkVBKSA/IG5mcmR0YWIgOiBuZndydGFiLAorICAgICAgICAgICAgICAgNCwgICAgICAgICAg ICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAyOiA0ID0gY21zd2kgKi8KKyAgICAg ICAgICAgICAgIHh4c3RyaW5nLCAgICAgICAgICAgICAgICAvKiBQcm9jZXNzaW5nIGZ1bmN0aW9u ICovCisgICAgICAgICAgICAgICAoY3ggPT0gRklMX1JFQSkgPyBmcmR0YWIgOiBmd3J0YWIsIC8q IEtleXdvcmQgdGFibGUgKi8KKyAgICAgICAgICAgICAgICZudSAgICAgICAgICAgICAgICAgICAg ICAvKiBQb2ludGVyIHRvIG5leHQgRkRCICovCisgICAgICAgICAgICAgICApOworICAgICAgICBj bWZkYmkoJm51LCAgICAgICAgICAgICAgICAgICAgIC8qIENoYW5uZWwgbnVtYmVyICovCisgICAg ICAgICAgICAgICBfQ01OVU0sICAgICAgICAgICAgICAgICAgLyogZmNvZGUgKi8KKyAgICAgICAg ICAgICAgICJDaGFubmVsIiwKKyAgICAgICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAg ICAvKiBkZWZhdWx0ICovCisgICAgICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAg LyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KKyAgICAgICAgICAgICAgIDEwLCAgICAgICAgICAgICAg ICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMTogcmFkaXggKi8KKyAgICAgICAgICAgICAg IDAsICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMjogMCAqLwor ICAgICAgICAgICAgICAgeHhzdHJpbmcsICAgICAgICAgICAgICAgIC8qIFByb2Nlc3NpbmcgZnVu Y3Rpb24gKi8KKyAgICAgICAgICAgICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAvKiBLZXl3 b3JkIHRhYmxlICovCisgICAgICAgICAgICAgICBOVUxMICAgICAgICAgICAgICAgICAgICAgLyog UG9pbnRlciB0byBuZXh0IEZEQiAqLworICAgICAgICAgICAgICAgKTsKKyAgICAgICAgZG8gewor ICAgICAgICAgICAgeCA9IGNtZmRiKCZzdyk7ICAgICAgICAgICAgIC8qIFBhcnNlIHNvbWV0aGlu ZyAqLworICAgICAgICAgICAgaWYgKHggPCAwKSB7CisgICAgICAgICAgICAgICAgaWYgKHggPT0g LTMpIHsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/Q2hhbm5lbCBudW1iZXIgcmVxdWly ZWRcbiIpOworICAgICAgICAgICAgICAgICAgICB4ID0gLTk7CisgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm IChjbXJlc3VsdC5mY29kZSA9PSBfQ01OVU0pIC8qIENoYW5uZWwgbnVtYmVyICovCisgICAgICAg ICAgICAgIGJyZWFrOworICAgICAgICAgICAgZWxzZSBpZiAoY21yZXN1bHQuZmNvZGUgPT0gX0NN S0VZKSB7IC8qIFN3aXRjaCAqLworICAgICAgICAgICAgICAgIGNoYXIgYzsKKyAgICAgICAgICAg ICAgICBjID0gY21nYnJrKCk7CisgICAgICAgICAgICAgICAgaWYgKChnZXR2YWwgPQorICAgICAg ICAgICAgICAgICAgICAgKGMgPT0gJzonIHx8IGMgPT0gJz0nKSkgJiYgIShjbWdrd2ZsZ3MoKSAm IENNX0FSRykpIHsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/VGhpcyBzd2l0Y2ggZG9l cyBub3QgdGFrZSBhbiBhcmd1bWVudFxuIik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybigt OSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICghZ2V0dmFsICYmIChj bWdrd2ZsZ3MoKSAmIENNX0FSRykpIHsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/VGhp cyBzd2l0Y2ggcmVxdWlyZXMgYW4gYXJndW1lbnRcbiIpOworICAgICAgICAgICAgICAgICAgICBy ZXR1cm4oLTkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGNt cmVzdWx0Lm5yZXN1bHQpIHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgV1JfTElORToKKyAgICAg ICAgICAgICAgICAgICAgY2hhcmZsYWcgPSAwOworICAgICAgICAgICAgICAgICAgICBzaXplZmxh ZyA9IDA7CisgICAgICAgICAgICAgICAgICAgIHJzaXplID0gMDsKKyAgICAgICAgICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIFdSX0NIQVI6CisgICAgICAgICAgICAg ICAgICAgIHJzaXplID0gMTsKKyAgICAgICAgICAgICAgICAgICAgY2hhcmZsYWcgPSAxOworICAg ICAgICAgICAgICAgICAgICBzaXplZmxhZyA9IDE7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr OworICAgICAgICAgICAgICAgICAgY2FzZSBXUl9TSVpFOgorICAgICAgICAgICAgICAgICAgICBp ZiAoKHggPSBjbW51bSgiQnl0ZXMiLCIiLDEwLCZyc2l6ZSwgeHhzdHJpbmcpKSA8IDApIHsKKyAg ICAgICAgICAgICAgICAgICAgICAgIGlmICh4ID09IC0zKSB7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcHJpbnRmKCI/TnVtYmVyIHJlcXVpcmVkXG4iKTsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICB4ID0gLTk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgICAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgICAgICAgICAgICAgIH0KKwkJICAgIGlm IChyc2l6ZSA+IExJTkJVRlNJWikgeworCQkJcHJpbnRmKCI/TWF4aW11bSBGUkVBRC9GV1JJVEUg c2l6ZSBpcyAlZFxuIixMSU5CVUZTSVopOworCQkJcnNpemUgPSAwOworCQkJcmV0dXJuKC05KTsK KwkJICAgIH0KKyAgICAgICAgICAgICAgICAgICAgY2hhcmZsYWcgPSAwOworICAgICAgICAgICAg ICAgICAgICBzaXplZmxhZyA9IDE7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg ICAgICAgICAgICAgY2FzZSBXUl9TVFJJOgorICAgICAgICAgICAgICAgICAgICByc2l6ZSA9IDE7 CisgICAgICAgICAgICAgICAgICAgIGNoYXJmbGFnID0gMDsKKyAgICAgICAgICAgICAgICAgICAg c2l6ZWZsYWcgPSAwOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg ICAgIGNhc2UgV1JfTFBBRDoKKyAgICAgICAgICAgICAgICAgIGNhc2UgV1JfUlBBRDoKKyAgICAg ICAgICAgICAgICAgICAgaWYgKCh4ID0gY21udW0oIk51bWVyaWMgQVNDSUkgY2hhcmFjdGVyIHZh bHVlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjMyIiwxMCwmcGFkLCB4 eHN0cmluZykpIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAg ICAgICAgICAgICAgIGlmIChjbXJlc3VsdC5ucmVzdWx0ID09IFdSX0xQQUQpCisgICAgICAgICAg ICAgICAgICAgICAgd3JfbHBhZCA9IDE7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAg ICAgICAgICAgICAgICAgICB3cl9ycGFkID0gMTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7 CisJCSAgY2FzZSBSRF9UUklNOgorCQkgICAgcmRfdHJpbSA9IDE7CisJCSAgICBicmVhazsKKwkJ ICBjYXNlIFJEX1VOVEE6CisJCSAgICByZF91bnRhYiA9IDE7CisJCSAgICBicmVhazsKKyAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZGVidWcoRjEwMSwiRklMRSBSRUFEIHJzaXpl IDIiLCIiLHJzaXplKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICByZXR1cm4o LTIpOworICAgICAgICB9IHdoaWxlCisgICAgICAgICAgKGNtcmVzdWx0LmZjb2RlID09IF9DTUtF WSk7CisKKyAgICAgICAgbiA9IGNtcmVzdWx0Lm5yZXN1bHQ7ICAgICAgICAgICAvKiBDaGFubmVs ICovCisgICAgICAgIGRlYnVnKEYxMDEsIkZJTEUgUkVBRC9XUklURSBjaGFubmVsIiwiIixuKTsK KworICAgICAgICBpZiAoY3ggPT0gRklMX1dSSSkgeyAgICAgICAgICAgIC8qIFdSSVRFICovCisg ICAgICAgICAgICBpbnQgbGVuID0gMDsKKyAgICAgICAgICAgIGlmICgoeCA9IGNtdHh0KCJUZXh0 IiwiIiwmcyx4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICAgICAgcmV0dXJuKHgpOworCSAgICBp ZiAobiA9PSAtOSkgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKwkgICAgaWYgKG4gPT0gLTgpIHJldHVy bihzdWNjZXNzID0gMSk7CisKKyAgICAgICAgICAgIGNrc3RybmNweShsaW5lLHMsTElOQlVGU0la KTsgLyogTWFrZSBhIHNhZmUgY29weSAqLworICAgICAgICAgICAgcyA9IGxpbmU7CisgICAgICAg ICAgICBzID0gYnJzdHJpcChzKTsgICAgICAgICAgICAgLyogU3RyaXAgYnJhY2VzICovCisgICAg ICAgICAgICBpZiAoY2hhcmZsYWcpIHsgICAgICAgICAgICAgLyogV3JpdGUgb25lIGNoYXIgKi8K KyAgICAgICAgICAgICAgICBsZW4gPSAxOyAgICAgICAgICAgICAgICAvKiBTbyBsZW5ndGggPSAx ICovCisgICAgICAgICAgICAgICAgcnNpemUgPSAxOyAgICAgICAgICAgICAgLyogRG9uJ3Qgc3Vw cGx5IHRlcm1pbmF0b3IgKi8KKyAgICAgICAgICAgIH0gZWxzZSBpZiAoIXNpemVmbGFnKSB7ICAg ICAvKiBXcml0ZSBhIHN0cmluZyAqLworICAgICAgICAgICAgICAgIGxlbiA9IC0xOyAgICAgICAg ICAgICAgIC8qIFNvIGxlbmd0aCBpcyB1bnNwZWNpZmllZCAqLworICAgICAgICAgICAgfSBlbHNl IHsgICAgICAgICAgICAgICAgICAgIC8qIFdyaXRlIGEgYmxvY2sgb2YgZ2l2ZW4gc2l6ZSAqLwor ICAgICAgICAgICAgICAgIGludCBpLCBrLCB4eDsKKyAgICAgICAgICAgICAgICBpZiAocnNpemUg PiBUTVBCVUZTSVopIHsKKyAgICAgICAgICAgICAgICAgICAgel9lcnJvciA9IEZYX09GTDsKKyAg ICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/QnVmZmVyIG92ZXJmbG93XG4iKTsKKyAgICAgICAg ICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg ICAgbGVuID0gcnNpemU7ICAgICAgICAgICAgLyogcnNpemUgaXMgcmVhbGx5IGxlbmd0aCAqLwor ICAgICAgICAgICAgICAgIHJzaXplID0gMTsgICAgICAgICAgICAgIC8qIERvbid0IHN1cHBseSBh IHRlcm1pbmF0b3IgKi8KKyAgICAgICAgICAgICAgICB4eCA9IHN0cmxlbihzKTsgICAgICAgICAv KiBTaXplIG9mIGdpdmVuIHN0cmluZyAqLworICAgICAgICAgICAgICAgIGlmICh4eCA+PSBsZW4p IHsgICAgICAgIC8qIEJpZ2dlciBvciBlcXVhbCAqLworICAgICAgICAgICAgICAgICAgICBzW2xl bl0gPSBOVUw7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh3cl9scGFkKSB7ICAgLyogU21h bGxlciwgbGVmdC1wYWRkaW5nIHJlcXVlc3RlZCAqLworICAgICAgICAgICAgICAgICAgICBmb3Ig KGkgPSAwOyBpIDwgbGVuIC0geHg7IGkrKykgLyogTXVzdCBtYWtlIGEgY29weSAqLworICAgICAg ICAgICAgICAgICAgICAgIHRtcGJ1ZltpXSA9IHBhZDsKKyAgICAgICAgICAgICAgICAgICAgY2tz dHJuY3B5KHRtcGJ1ZitpLHMsVE1QQlVGU0laLWkpOworICAgICAgICAgICAgICAgICAgICB0bXBi dWZbbGVuXSA9IE5VTDsKKyAgICAgICAgICAgICAgICAgICAgcyA9IHRtcGJ1ZjsgICAgICAgICAv KiBSZWRpcmVjdCB3cml0ZSBzb3VyY2UgKi8KKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHdy X3JwYWQpIHsgICAvKiBTbWFsbGVyIHdpdGggcmlnaHQtcGFkZGluZyAqLworICAgICAgICAgICAg ICAgICAgICBmb3IgKGkgPSB4eDsgaSA8IGxlbjsgaSsrKQorICAgICAgICAgICAgICAgICAgICAg IHNbaV0gPSBwYWQ7CisgICAgICAgICAgICAgICAgICAgIHNbbGVuXSA9IE5VTDsKKyAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoKHJjID0gel9vdXQobixz LGxlbixyc2l6ZSkpIDwgMCkgeyAvKiBUcnkgdG8gd3JpdGUgKi8KKyAgICAgICAgICAgICAgICBw cmludGYoIj9DaGFubmVsICVkIFdSSVRFIGVycm9yOiAlc1xuIixuLGNrZmVycm9yKHJjKSk7Cisg ICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNl IHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBGSUxfUkVBIFJFQUQgKi8KKyAgICAgICAgICAg IGNvbmZpcm1lZCA9IDA7CisgICAgICAgICAgICB2bmFtYnVmWzBdID0gTlVMOworICAgICAgICAg ICAgeCA9IGNtZmxkKCJWYXJpYWJsZSBuYW1lIiwiIiwmcyxOVUxMKTsKKyAgICAgICAgICAgIGRl YnVnKEYxMTEsIkZJTEUgUkVBRCBjbWZsZCIscyx4KTsKKyAgICAgICAgICAgIGlmICh4IDwgMCkg eworICAgICAgICAgICAgICAgIGlmICh4ID09IC0zIHx8ICEqcykgeworICAgICAgICAgICAgICAg ICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApCisgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu KHgpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgY29u ZmlybWVkKys7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICByZXR1 cm4oeCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBja3N0cm5jcHkodm5hbWJ1ZixzLFZO QU1MKTsKKyAgICAgICAgICAgIGRlYnVnKEYxMTEsIkZJTEUgUkVBRCB2bmFtYnVmIix2bmFtYnVm LGNvbmZpcm1lZCk7CisgICAgICAgICAgICBpZiAodm5hbWJ1ZlswXSkgeyAgICAgICAgICAgLyog VmFyaWFibGUgbmFtZSBnaXZlbiwgY2hlY2sgaXQgKi8KKyAgICAgICAgICAgICAgICBpZiAoIWNv bmZpcm1lZCkgeworICAgICAgICAgICAgICAgICAgICB4ID0gY21jZm0oKTsKKyAgICAgICAgICAg ICAgICAgICAgaWYgKHggPCAwKQorICAgICAgICAgICAgICAgICAgICAgIHJldHVybih4KTsKKyAg ICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgIGNvbmZpcm1lZCsr OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB2bnAgPSB2bmFtYnVmOworICAg ICAgICAgICAgICAgIGlmICh2bmFtYnVmWzBdID09IENNRFEgJiYKKyAgICAgICAgICAgICAgICAg ICAgKHZuYW1idWZbMV0gPT0gJyUnIHx8IHZuYW1idWZbMV0gPT0gJyYnKSkKKyAgICAgICAgICAg ICAgICAgIHZucCsrOworICAgICAgICAgICAgICAgIHkgPSAwOworICAgICAgICAgICAgICAgIGlm ICgqdm5wID09ICclJyB8fCAqdm5wID09ICcmJykgeworICAgICAgICAgICAgICAgICAgICBpZiAo KHkgPSBwYXJzZXZhcih2bnAsJngsJmR1bW15KSkgPCAwKSB7CisgICAgICAgICAgICAgICAgICAg ICAgICBwcmludGYoIj9TeW50YXggZXJyb3IgaW4gdmFyaWFibGUgbmFtZVxuIik7CisgICAgICAg ICAgICAgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVidWcoRjExMSwiRklM RSBSRUFEIHZhcmlhYmxlIix2bmFtYnVmLGNvbmZpcm1lZCk7CisKKyAgICAgICAgICAgIGlmICgh Y29uZmlybWVkKQorICAgICAgICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApCisgICAgICAg ICAgICAgICAgcmV0dXJuKHgpOworCisJICAgIGlmIChuID09IC05KSByZXR1cm4oc3VjY2VzcyA9 IDApOworCSAgICBpZiAobiA9PSAtOCkgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKworICAgICAgICAg ICAgbGluZVswXSA9IE5VTDsgICAgICAgICAgICAgIC8qIENsZWFyIGRlc3RpbmF0aW9uIGJ1ZmZl ciAqLworI2lmZGVmIENPTU1FTlQKKyAgICAgICAgICAgIGlmIChyc2l6ZSA+PSBMSU5CVUZTSVop ICAgICAvKiBEb24ndCBvdmVycnVuIGl0ICovCisgICAgICAgICAgICAgIHJzaXplID0gTElOQlVG U0laIC0gMTsKKyNlbmRpZgkvKiBDT01NRU5UICovCisKKyAgICAgICAgICAgIGlmIChyc2l6ZSA9 PSAwKSB7CQkvKiBSZWFkIGEgbGluZSAqLworCQlyYyA9IHpfaW4obixsaW5lLExJTkJVRlNJWixM SU5CVUZTSVotMSwwKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisJCXJjID0gel9pbihuLGxpbmUs TElOQlVGU0laLHJzaXplLDEpOyAvKiBSZWFkIGEgYmxvY2sgKi8KKwkgICAgfQorICAgICAgICAg ICAgaWYgKHJjIDwgMCkgeyAgICAgICAgICAgICAgIC8qIEVycm9yLi4uICovCisgICAgICAgICAg ICAgICAgZGVidWcoRjEwMSwiRklMRSBSRUFEIGVycm9yIiwiIixyYyk7CisgICAgICAgICAgICAg ICAgZGVidWcoRjEwMSwiRklMRSBSRUFEIGVycm5vIiwiIixlcnJubyk7CisgICAgICAgICAgICAg ICAgaWYgKHJjID09IEZYX0VPRikgeyAgICAgLyogRU9GIC0gZmFpbCBidXQgbm8gZXJyb3IgbWVz c2FnZSAqLworICAgICAgICAgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOworICAgICAg ICAgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgIC8qIE90aGVyIGVycm9yIC0gZmFpbCBh bmQgcHJpbnQgbXNnICovCisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiP1JFQUQgZXJyb3I6 ICVzXG4iLGNrZmVycm9yKHJjKSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybigtOSk7Cisg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCSAgICBpZiAocnNpemUgPT0gMCkgewkJ LyogRlJFQUQgL0xJTkUgcG9zdHByb2Nlc3NpbmcgKi8KKwkJaWYgKHJkX3RyaW0pIHsJCS8qIFRy aW0gKi8KKwkJICAgIGludCBpLCBrOworCQkgICAgayA9IHN0cmxlbihsaW5lKTsKKwkJICAgIGlm IChrID4gMCkgeworCQkJZm9yIChpID0gay0xOyBpID4gMDsgaS0tKSB7CisJCQkgICAgaWYgKGxp bmVbaV0gPT0gU1AgfHwgbGluZVtpXSA9PSAnXHQnKQorCQkJICAgICAgbGluZVtpXSA9IE5VTDsK KwkJCSAgICBlbHNlCisJCQkgICAgICBicmVhazsKKwkJCX0KKwkJICAgIH0KKwkJfQorCQlpZiAo cmRfdW50YWIpIHsJCS8qIFVudGFiaWZ5ICovCisJCSAgICBpZiAodW50YWJpZnkobGluZSx0bXBi dWYsVE1QQlVGU0laKSA+IC0xKQorCQkgICAgICBja3N0cm5jcHkobGluZSx0bXBidWYsTElOQlVG U0laKTsKKwkJfQorCSAgICB9CisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJGSUxFIFJFQUQgZGF0 YSIsbGluZSwwKTsKKyAgICAgICAgICAgIGlmICh2bmFtYnVmWzBdKSAgICAgICAgICAgICAvKiBS ZWFkIE9LIC0gSWYgdmFyaWFibGUgbmFtZSBnaXZlbiAqLworICAgICAgICAgICAgICBhZGRtYWMo dm5hbWJ1ZixsaW5lKTsgICAgIC8qIEFzc2lnbiByZXN1bHQgdG8gdmFyaWFibGUgKi8KKyAgICAg ICAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAvKiBvdGhlcndpc2UgKi8KKyAgICAg ICAgICAgICAgcHJpbnRmKCIlc1xuIixsaW5lKTsgICAgICAvKiBqdXN0IHByaW50IGl0ICovCisg ICAgICAgIH0KKyAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKworICAgICAgY2FzZSBGSUxf U0VFOiAgICAgICAgICAgICAgICAgICAgIC8qIFNFRUsgKi8KKyAgICAgIGNhc2UgRklMX0NPVTog ICAgICAgICAgICAgICAgICAgICAvKiBDT1VOVCAqLworICAgICAgICByc2l6ZSA9IFJEX0NIQVI7 ICAgICAgICAgICAgICAgIC8qIERlZmF1bHRzIHRvIC9CWVRFICovCisgICAgICAgIGNtZmRiaSgm c3csICAgICAgICAgICAgICAgICAgICAgLyogU3dpdGNoZXMgKi8KKyAgICAgICAgICAgICAgIF9D TUtFWSwgICAgICAgICAgICAgICAgICAvKiBmY29kZSAqLworICAgICAgICAgICAgICAgIkNoYW5u ZWwgb3Igc3dpdGNoIiwgICAgIC8qIGhscG1zZyAqLworICAgICAgICAgICAgICAgIiIsICAgICAg ICAgICAgICAgICAgICAgIC8qIGRlZmF1bHQgKi8KKyAgICAgICAgICAgICAgICIiLCAgICAgICAg ICAgICAgICAgICAgICAvKiBhZGR0bCBzdHJpbmcgZGF0YSAqLworICAgICAgICAgICAgICAgKChj eCA9PSBGSUxfU0VFKSA/IG5mc2tzd3RhYiA6IG5mY29zd3RhYiksCisgICAgICAgICAgICAgICA0 LCAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDI6IDQgPSBjbXN3 aSAqLworICAgICAgICAgICAgICAgeHhzdHJpbmcsICAgICAgICAgICAgICAgIC8qIFByb2Nlc3Np bmcgZnVuY3Rpb24gKi8KKyAgICAgICAgICAgICAgICgoY3ggPT0gRklMX1NFRSkgPyBmc2tzd3Rh YiA6IGZjb3N3dGFiKSwKKyAgICAgICAgICAgICAgICZudSAgICAgICAgICAgICAgICAgICAgICAv KiBQb2ludGVyIHRvIG5leHQgRkRCICovCisgICAgICAgICAgICAgICApOworICAgICAgICBjbWZk YmkoJm51LCAgICAgICAgICAgICAgICAgICAgIC8qIENoYW5uZWwgbnVtYmVyICovCisgICAgICAg ICAgICAgICBfQ01OVU0sICAgICAgICAgICAgICAgICAgLyogZmNvZGUgKi8KKyAgICAgICAgICAg ICAgICJDaGFubmVsIiwKKyAgICAgICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAv KiBkZWZhdWx0ICovCisgICAgICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgLyog YWRkdGwgc3RyaW5nIGRhdGEgKi8KKyAgICAgICAgICAgICAgIDEwLCAgICAgICAgICAgICAgICAg ICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMTogcmFkaXggKi8KKyAgICAgICAgICAgICAgIDAs ICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMjogMCAqLworICAg ICAgICAgICAgICAgeHhzdHJpbmcsICAgICAgICAgICAgICAgIC8qIFByb2Nlc3NpbmcgZnVuY3Rp b24gKi8KKyAgICAgICAgICAgICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAvKiBLZXl3b3Jk IHRhYmxlICovCisgICAgICAgICAgICAgICBOVUxMICAgICAgICAgICAgICAgICAgICAgLyogUG9p bnRlciB0byBuZXh0IEZEQiAqLworICAgICAgICAgICAgICAgKTsKKyAgICAgICAgZG8geworICAg ICAgICAgICAgeCA9IGNtZmRiKCZzdyk7ICAgICAgICAgICAgIC8qIFBhcnNlIHNvbWV0aGluZyAq LworICAgICAgICAgICAgaWYgKHggPCAwKSB7CisgICAgICAgICAgICAgICAgaWYgKHggPT0gLTMp IHsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/Q2hhbm5lbCBudW1iZXIgcmVxdWlyZWRc biIpOworICAgICAgICAgICAgICAgICAgICB4ID0gLTk7CisgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChj bXJlc3VsdC5mY29kZSA9PSBfQ01OVU0pIC8qIENoYW5uZWwgbnVtYmVyICovCisgICAgICAgICAg ICAgIGJyZWFrOworICAgICAgICAgICAgZWxzZSBpZiAoY21yZXN1bHQuZmNvZGUgPT0gX0NNS0VZ KSB7IC8qIFN3aXRjaCAqLworICAgICAgICAgICAgICAgIGNoYXIgYzsKKyAgICAgICAgICAgICAg ICBjID0gY21nYnJrKCk7CisgICAgICAgICAgICAgICAgaWYgKChnZXR2YWwgPQorICAgICAgICAg ICAgICAgICAgICAgKGMgPT0gJzonIHx8IGMgPT0gJz0nKSkgJiYgIShjbWdrd2ZsZ3MoKSAmIENN X0FSRykpIHsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/VGhpcyBzd2l0Y2ggZG9lcyBu b3QgdGFrZSBhbiBhcmd1bWVudFxuIik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybigtOSk7 CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChjeCA9PSBGSUxfU0VFKSB7 CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoY21yZXN1bHQubnJlc3VsdCkgeworICAgICAg ICAgICAgICAgICAgICAgIGNhc2UgU0VFX1JFTDogcmVsYXRpdmUgPSAxOyBicmVhazsKKyAgICAg ICAgICAgICAgICAgICAgICBjYXNlIFNFRV9BQlM6IHJlbGF0aXZlID0gMDsgYnJlYWs7CisJCSAg ICAgIGNhc2UgU0VFX0ZJTkQ6IHsKKwkJCSAgaWYgKGdldHZhbCkgeworCQkJICAgICAgeSA9IGNt ZmxkKCJzdHJpbmcgb3IgcGF0dGVybiIsIiIsJnMseHhzdHJpbmcpOworCQkJICAgICAgaWYgKHkg PCAwKQorCQkJCXJldHVybih5KTsKKwkJCSAgICAgIG1ha2VzdHIoJnNlZWtfdGFyZ2V0LGJyc3Ry aXAocykpOworCQkJICAgICAgYnJlYWs7CisJCQkgIH0KKwkJICAgICAgfQorICAgICAgICAgICAg ICAgICAgICAgIGRlZmF1bHQ6IHJzaXplID0gY21yZXN1bHQubnJlc3VsdDsKKyAgICAgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY3ggPT0gRklMX0NPVSkgewor ICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGNtcmVzdWx0Lm5yZXN1bHQpIHsKKyAgICAgICAg ICAgICAgICAgICAgICBjYXNlIENPVV9MSVM6IGxpc3RpbmcgPSAxOyBicmVhazsKKyAgICAgICAg ICAgICAgICAgICAgICBjYXNlIENPVV9OT0w6IGxpc3RpbmcgPSAwOyBicmVhazsKKyAgICAgICAg ICAgICAgICAgICAgICBkZWZhdWx0OiByc2l6ZSA9IGNtcmVzdWx0Lm5yZXN1bHQ7CisgICAgICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg IH0gd2hpbGUKKyAgICAgICAgICAoY21yZXN1bHQuZmNvZGUgPT0gX0NNS0VZKTsKKworICAgICAg ICBuID0gY21yZXN1bHQubnJlc3VsdDsgICAgICAgICAgIC8qIENoYW5uZWwgKi8KKyAgICAgICAg ZGVidWcoRjEwMSwiRklMRSBTRUVLL0NPVU5UIGNoYW5uZWwiLCIiLG4pOworICAgICAgICBpZiAo Y3ggPT0gRklMX0NPVSkgeworICAgICAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKQorICAg ICAgICAgICAgICByZXR1cm4oeCk7CisJICAgIGlmIChuID09IC05KSByZXR1cm4oc3VjY2VzcyA9 IDApOworCSAgICBpZiAobiA9PSAtOCkgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKworICAgICAgICAg ICAgel9maWxjb3VudCA9IHpfY291bnQobixyc2l6ZSk7CisgICAgICAgICAgICBpZiAoel9maWxj b3VudCA8IDApIHsKKyAgICAgICAgICAgICAgICByYyA9IHpfZmlsY291bnQ7CisgICAgICAgICAg ICAgICAgcHJpbnRmKCI/Q09VTlQgZXJyb3I6ICVzXG4iLGNrZmVycm9yKHJjKSk7CisgICAgICAg ICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChsaXN0 aW5nIDwgMCkKKyAgICAgICAgICAgICAgbGlzdGluZyA9ICF4Y21kc3JjOworICAgICAgICAgICAg aWYgKGxpc3RpbmcpCisgICAgICAgICAgICAgIHByaW50ZigiICVsZCAlcyVzXG4iLAorICAgICAg ICAgICAgICAgICAgICAgel9maWxjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICgocnNpemUg PT0gUkRfQ0hBUikgPyAiYnl0ZSIgOiAibGluZSIpLAorICAgICAgICAgICAgICAgICAgICAgKCh6 X2ZpbGNvdW50ID09IDFMKSA/ICIiIDogInMiKQorICAgICAgICAgICAgICAgICAgICAgKTsKKyAg ICAgICAgICAgIHJldHVybihzdWNjZXNzID0gKHpfZmlsY291bnQgPiAtMSkgPyAxIDogMCk7Cisg ICAgICAgIH0KKwltID0gKHJzaXplID09IFJEX0NIQVIpID8KKwkgICAgIk51bWJlciBvZiBieXRl cztcbiBvciBrZXl3b3JkIiA6CisJICAgICJOdW1iZXIgb2YgbGluZXM7XG4gb3Iga2V5d29yZCI7 CisgICAgICAgIGNtZmRiaSgmc3csICAgICAgICAgICAgICAgICAgICAgLyogU0VFSyBzeW1ib2xp YyB0YXJnZXRzIChFT0YpICovCisgICAgICAgICAgICAgICBfQ01LRVksICAgICAgICAgICAgICAg ICAgLyogZmNvZGUgKi8KKyAgICAgICAgICAgICAgIG0sCisgICAgICAgICAgICAgICAiIiwKKyAg ICAgICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBzdHJpbmcgZGF0 YSAqLworICAgICAgICAgICAgICAgbmZzZWt3dGFiLCAgICAgICAgICAgICAgIC8qIGFkZHRsIG51 bWVyaWMgZGF0YSAxOiB0YWJsZSBzaXplICovCisgICAgICAgICAgICAgICAwLCAgICAgICAgICAg ICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDI6IDQgPSBjbXN3aSAqLworICAgICAg ICAgICAgICAgeHhzdHJpbmcsICAgICAgICAgICAgICAgIC8qIFByb2Nlc3NpbmcgZnVuY3Rpb24g Ki8KKyAgICAgICAgICAgICAgIGZzZWt3dGFiLCAgICAgICAgICAgICAgICAvKiBLZXl3b3JkIHRh YmxlICovCisgICAgICAgICAgICAgICAmbnUgICAgICAgICAgICAgICAgICAgICAgLyogUG9pbnRl ciB0byBuZXh0IEZEQiAqLworICAgICAgICAgICAgICAgKTsKKyAgICAgICAgY21mZGJpKCZudSwg ICAgICAgICAgICAgICAgICAgICAvKiBCeXRlIG9yIGxpbmUgbnVtYmVyICovCisgICAgICAgICAg ICAgICBfQ01OVVcsICAgICAgICAgICAgICAgICAgLyogZmNvZGUgKi8KKyAgICAgICAgICAgICAg ICIiLAorICAgICAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgIC8qIGRlZmF1bHQg Ki8KKyAgICAgICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBzdHJp bmcgZGF0YSAqLworICAgICAgICAgICAgICAgMTAsICAgICAgICAgICAgICAgICAgICAgIC8qIGFk ZHRsIG51bWVyaWMgZGF0YSAxOiByYWRpeCAqLworICAgICAgICAgICAgICAgMCwgICAgICAgICAg ICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAyOiAwICovCisgICAgICAgICAgICAg ICB4eHN0cmluZywgICAgICAgICAgICAgICAgLyogUHJvY2Vzc2luZyBmdW5jdGlvbiAqLworICAg ICAgICAgICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgIC8qIEtleXdvcmQgdGFibGUgKi8K KyAgICAgICAgICAgICAgIE5VTEwgICAgICAgICAgICAgICAgICAgICAvKiBQb2ludGVyIHRvIG5l eHQgRkRCICovCisgICAgICAgICAgICAgICApOworICAgICAgICB4ID0gY21mZGIoJnN3KTsgICAg ICAgICAgICAgICAgIC8qIFBhcnNlIHNvbWV0aGluZyAqLworICAgICAgICBpZiAoeCA8IDApIHsK KyAgICAgICAgICAgIGlmICh4ID09IC0zKSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCI/Q2hh bm5lbCBudW1iZXIgb3IgRU9GIHJlcXVpcmVkXG4iKTsKKyAgICAgICAgICAgICAgICB4ID0gLTk7 CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgIH0KKyAgICAg ICAgaWYgKGNtcmVzdWx0LmZjb2RlID09IF9DTU5VVykgeworICAgICAgICAgICAgeiA9IGNtcmVz dWx0LndyZXN1bHQ7CisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJGSUxFIFNFRUsgYXRtYnVmIixh dG1idWYsMCk7CisgICAgICAgICAgICBpZiAocmVsYXRpdmUgPCAwKSB7CisgICAgICAgICAgICAg ICAgaWYgKGN4ID09IEZJTF9TRUUgJiYgKGF0bWJ1ZlswXSA9PSAnKycgfHwgYXRtYnVmWzBdID09 ICctJykpCisgICAgICAgICAgICAgICAgICByZWxhdGl2ZSA9IDE7CisgICAgICAgICAgICAgICAg ZWxzZQorICAgICAgICAgICAgICAgICAgcmVsYXRpdmUgPSAwOworICAgICAgICAgICAgfQorICAg ICAgICB9IGVsc2UgaWYgKGNtcmVzdWx0LmZjb2RlID09IF9DTUtFWSkgeworICAgICAgICAgICAg ZW9mZmxnID0gY21yZXN1bHQubnJlc3VsdDsKKyAgICAgICAgICAgIHJlbGF0aXZlID0gMDsKKyAg ICAgICAgICAgIHkgPSAwIC0gZW9mZmxnOworICAgICAgICB9CisgICAgICAgIGlmICgoeCA9IGNt Y2ZtKCkpIDwgMCkKKyAgICAgICAgICByZXR1cm4oeCk7CisJaWYgKG4gPT0gLTkpIHJldHVybihz dWNjZXNzID0gMCk7CisJaWYgKG4gPT0gLTgpIHJldHVybihzdWNjZXNzID0gMSk7CisgICAgICAg IHkgPSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVjeWNsZSB0aGlzICovCisgICAg ICAgIHpfZmx1c2gobik7CisgICAgICAgIGRlYnVnKEYxMDEsIkZJTEUgU0VFSyByZWxhdGl2ZSIs IiIscmVsYXRpdmUpOworICAgICAgICBkZWJ1ZyhGMTAxLCJGSUxFIFNFRUsgcnNpemUiLCIiLHJz aXplKTsKKworICAgICAgICBpZiAocnNpemUgPT0gUkRfQ0hBUikgeyAgICAgICAgIC8qIFNlZWsg dG8gYnl0ZSBwb3NpdGlvbiAqLworICAgICAgICAgICAgaWYgKHJlbGF0aXZlID4gMCkgeworICAg ICAgICAgICAgICAgIENLX09GRl9UIHBvczsKKyAgICAgICAgICAgICAgICBwb3MgPSB6X2dldHBv cyhuKTsKKyAgICAgICAgICAgICAgICBpZiAocG9zIDwgKENLX09GRl9UKTApIHsKKyAgICAgICAg ICAgICAgICAgICAgcmMgPSBwb3M7CisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiP1JlbGF0 aXZlIFNFRUsgZmFpbGVkOiAlc1xuIixja2ZlcnJvcihyYykpOworICAgICAgICAgICAgICAgICAg ICByZXR1cm4oLTkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB6ICs9IHBv czsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKHogPCAwICYmICFl b2ZmbGcpIHsgLyogTmVnYXRpdmUgYXJnIGJ1dCBub3QgcmVsYXRpdmUgKi8KKyAgICAgICAgICAg ICAgICAgICAgeSA9IDA7ICAgICAgICAgICAgICAvKiBSZW1lbWJlciB0aGlzIHdhcyBiYWQgKi8K KyAgICAgICAgICAgICAgICAgICAgeiA9IDA7ICAgICAgICAgICAgICAvKiBidXQgc3Vic3RpdHV0 ZSAwICovCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVi dWcoRjEwMSwiRklMRSBTRUVLIC9DSEFSIHoiLCIiLHopOworICAgICAgICAgICAgaWYgKHogPCAw ICYmICFlb2ZmbGcpIHsKKyAgICAgICAgICAgICAgICB6X2Vycm9yID0gRlhfUk5HOworICAgICAg ICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7CisgICAgICAgICAgICB9CisgICAgICAgICAg ICBpZiAoKHJjID0gel9zZWVrKG4seikpIDwgMCkgeworICAgICAgICAgICAgICAgIGlmIChyYyA9 PSBGWF9FT0YpIHJldHVybihzdWNjZXNzID0gMCk7CisgICAgICAgICAgICAgICAgcHJpbnRmKCI/ U0VFSyAvQllURSBmYWlsZWQgLSBDaGFubmVsICVkOiAlc1xuIixuLGNrZmVycm9yKHJjKSk7Cisg ICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNl IHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBTZWVrIHRvIGxpbmUgKi8KKyAgICAgICAgICAg IGlmIChyZWxhdGl2ZSA+IDApIHsKKyAgICAgICAgICAgICAgICBDS19PRkZfVCBwb3M7CisgICAg ICAgICAgICAgICAgcG9zID0gel9nZXRsaW5lKG4pOworICAgICAgICAgICAgICAgIGRlYnVnKEYx MDEsIkZJTEUgU0VFSyAvTElORSBwb3MiLCIiLHBvcyk7CisgICAgICAgICAgICAgICAgaWYgKHBv cyA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgcmMgPSBwb3M7CisgICAgICAgICAgICAgICAg ICAgIHByaW50ZigiP1JlbGF0aXZlIFNFRUsgZmFpbGVkOiAlc1xuIixja2ZlcnJvcihyYykpOwor ICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgICB6ICs9IHBvczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlYnVnKEYx MDEsIkZJTEUgU0VFSyAvTElORSB6IiwiIix6KTsKKyAgICAgICAgICAgIGRlYnVnKEYxMDEsIkZJ TEUgU0VFSyAvTElORSBlb2ZmbGciLCIiLGVvZmZsZyk7CisgICAgICAgICAgICBpZiAoeiA8IDAg JiYgIWVvZmZsZykgeworICAgICAgICAgICAgICAgIHpfZXJyb3IgPSBGWF9STkc7CisgICAgICAg ICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg IGlmICgocmMgPSB6X2xpbmUobix6KSkgPCAwKSB7CisgICAgICAgICAgICAgICAgaWYgKHJjID09 IEZYX0VPRikgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKyAgICAgICAgICAgICAgICBwcmludGYoIj9T RUVLIC9MSU5FIGZhaWxlZCAtIENoYW5uZWwgJWQ6ICVzXG4iLG4sY2tmZXJyb3IocmMpKTsKKyAg ICAgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisJLyoK KwkgIE5vdywgaGF2aW5nIHNvdWdodCB0byB0aGUgZGVzaXJlZCBzdGFydGluZyBzcG90LCBpZiBh IC9GSU5EOgorCSAgdGFyZ2V0IHdhcyBzcGVjaWZpZWQsIGxvb2sgZm9yIGl0IG5vdy4KKwkqLwor CWlmIChzZWVrX3RhcmdldCkgeworCSAgICBpbnQgZmxhZyA9IDAsIGlzcGF0ID0gMCwgbWF0Y2hy ZXN1bHQgPSAwOworCSAgICB3aGlsZSAoIWZsYWcpIHsKKwkJeSA9IHpfaW4obixsaW5lLExJTkJV RlNJWixMSU5CVUZTSVotMSwwKTsKKwkJaWYgKHkgPCAwKSB7CisJCSAgICB5ID0gMDsKKwkJICAg IGJyZWFrOworCQl9CisJCWlmIChpc3BhdHRlcm4oc2Vla190YXJnZXQpKSB7CisJCSAgICBtYXRj aHJlc3VsdCA9IGNrbWF0Y2goc2Vla190YXJnZXQsbGluZSxpbnBjYXNbY21kbHZsXSwxKzQpOwor CQl9IGVsc2UgeworCQkgICAgLyogVGhpcyBpcyBmYXN0ZXIgKi8KKwkJICAgIG1hdGNocmVzdWx0 ID0gY2tpbmRleChzZWVrX3RhcmdldCxsaW5lLDAsMCxpbnBjYXNbY21kbHZsXSk7CisJCX0KKwkJ aWYgKG1hdGNocmVzdWx0KSB7CisJCSAgICBmbGFnID0gMTsKKwkJICAgIGJyZWFrOworCQl9CisJ ICAgIH0KKwkgICAgaWYgKGZsYWcpIHsKKwkJZGVidWcoRjExMSwiRlNFRUsgSEFWRSBNQVRDSCIs c2Vla190YXJnZXQsel9nZXRsaW5lKG4pKTsKKwkJLyogQmFjayB1cCB0byBiZWdpbm5pbmcgb2Yg bGluZSB3aGVyZSB0YXJnZXQgZm91bmQgKi8KKwkJaWYgKCh5ID0gel9saW5lKG4sel9nZXRsaW5l KG4pLTEpKSA8IDApIHsKKwkJICAgIGlmIChyYyA9PSBGWF9FT0YpIHJldHVybihzdWNjZXNzID0g MCk7CisJCSAgICBwcmludGYoIj9TRUVLIC9MSU5FIGZhaWxlZCAtIENoYW5uZWwgJWQ6ICVzXG4i LAorCQkJICAgbixja2ZlcnJvcihyYykpOworCQkgICAgcmV0dXJuKC05KTsKKwkJfQorCQlkZWJ1 ZyhGMTAxLCJGU0VFSyBMSU5FIiwiIix5KTsKKwkgICAgfQorCX0KKyAgICAgICAgcmV0dXJuKHN1 Y2Nlc3MgPSAoeSA8IDApID8gMCA6IDEpOworCisgICAgICBjYXNlIEZJTF9MSVM6IHsgICAgICAg ICAgICAgICAgICAgLyogTElTVCBvcGVuIGZpbGVzICovCisjaWZkZWYgQ0tfVFRHV1NJWgorICAg ICAgICAgIGV4dGVybiBpbnQgY21kX3Jvd3MsIGNtZF9jb2xzOworI2VuZGlmIC8qIENLX1RUR1dT SVogKi8KKyAgICAgICAgICBleHRlcm4gaW50IHhhc2ttb3JlOworICAgICAgICAgIGludCBpLCB4 LCBuID0gMCwgcGFnaW5nID0gMDsKKyAgICAgICAgICBjaGFyICogczsKKworICAgICAgICAgIGlm ICgoeCA9IGNtY2ZtKCkpIDwgMCkKKyAgICAgICAgICAgIHJldHVybih4KTsKKworI2lmZGVmIENL X1RUR1dTSVoKKyAgICAgICAgICBpZiAoY21kX3Jvd3MgPiAwICYmIGNtZF9jb2xzID4gMCkKKyNl bmRpZiAvKiBDS19UVEdXU0laICovCisgICAgICAgICAgICBwYWdpbmcgPSB4YXNrbW9yZTsKKwor ICAgICAgICAgIHByaW50ZigiU3lzdGVtIG9wZW4gZmlsZSBsaW1pdDolNWRcbiIsIHpfb3Blbm1h eCk7CisgICAgICAgICAgcHJpbnRmKCJNYXhpbXVtIGZvciBGSUxFIE9QRU46ICU1ZFxuIiwgel9t YXhjaGFuKTsKKyAgICAgICAgICBwcmludGYoIkZpbGVzIGN1cnJlbnRseSBvcGVuOiAgJTVkXG5c biIsIHpfbm9wZW4pOworICAgICAgICAgIG4gPSA0OworICAgICAgICAgIGZvciAoaSA9IDA7IGkg PCB6X21heGNoYW47IGkrKykgeworICAgICAgICAgICAgICBzID0gel9nZXRuYW1lKGkpOyAgICAg ICAgIC8qIEdvdCBvbmU/ICovCisgICAgICAgICAgICAgIGlmIChzKSB7ICAgICAgICAgICAgICAg ICAgLyogWWVzICovCisgICAgICAgICAgICAgICAgICBjaGFyIG1bOF07CisgICAgICAgICAgICAg ICAgICBtWzBdID0gTlVMOworICAgICAgICAgICAgICAgICAgcHJpbnRmKCIlMmQuICVzIixpLHMp OyAvKiBQcmludCBuYW1lICovCisgICAgICAgICAgICAgICAgICBuKys7ICAgICAgICAgICAgICAg ICAgIC8qIENvdW50IGl0ICovCisgICAgICAgICAgICAgICAgICB4ID0gel9nZXRtb2RlKGkpOyAg ICAgIC8qIEdldCBtb2RlcyAmIHByaW50IHRoZW0gKi8KKyAgICAgICAgICAgICAgICAgIGlmICh4 ID4gMCkgeworICAgICAgICAgICAgICAgICAgICAgIGlmICh4ICYgRk1fUkVBKSBja3N0cm5jYXQo bSwiUiIsOCk7CisgICAgICAgICAgICAgICAgICAgICAgaWYgKHggJiBGTV9XUkkpIGNrc3RybmNh dChtLCJXIiw4KTsKKyAgICAgICAgICAgICAgICAgICAgICBpZiAoeCAmIEZNX0FQUCkgY2tzdHJu Y2F0KG0sIkEiLDgpOworICAgICAgICAgICAgICAgICAgICAgIGlmICh4ICYgRk1fQklOKSBja3N0 cm5jYXQobSwiQiIsOCk7CisgICAgICAgICAgICAgICAgICAgICAgaWYgKG1bMF0pCisgICAgICAg ICAgICAgICAgICAgICAgICBwcmludGYoIiAoJXMpIixtKTsKKyAgICAgICAgICAgICAgICAgICAg ICBpZiAoeCAmIEZNX0VPRikKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiIFtFT0Zd Iik7CisgICAgICAgICAgICAgICAgICAgICAgZWxzZQkJLyogQW5kIGZpbGUgcG9zaXRpb24gdG9v ICovCisgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIiAlcyIsY2tmc3RvYSh6X2dldHBv cyhpKSkpOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgcHJpbnRmKCJc biIpOworI2lmZGVmIENLX1RUR1dTSVoKKyAgICAgICAgICAgICAgICAgIGlmIChwYWdpbmcgPiAw KSB7ICAgICAvKiBQYXVzZSBhdCBlbmQgb2Ygc2NyZWVuICovCisgICAgICAgICAgICAgICAgICAg ICAgaWYgKG4gPiBjbWRfcm93cyAtIDMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg KCFhc2ttb3JlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg ICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0g MDsKKyAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICB9CisjZW5kaWYg LyogQ0tfVFRHV1NJWiAqLworICAgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAg IHJldHVybihzdWNjZXNzID0gMSk7CisgICAgICB9CisKKyAgICAgIGNhc2UgRklMX0ZMVTogICAg ICAgICAgICAgICAgICAgICAvKiBGTFVTSCAqLworICAgICAgICBpZiAoKHggPSBjbW51bSgiQ2hh bm5lbCBudW1iZXIiLCIiLDEwLCZuLCB4eHN0cmluZykpIDwgMCkgeworICAgICAgICAgICAgaWYg KHggPT0gLTMpIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIj9DaGFubmVsIG51bWJlciByZXF1 aXJlZFxuIik7CisgICAgICAgICAgICAgICAgeCA9IC05OworICAgICAgICAgICAgfQorICAgICAg ICAgICAgcmV0dXJuKHgpOworICAgICAgICB9CisgICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwg MCkKKyAgICAgICAgICByZXR1cm4oeCk7CisJaWYgKG4gPT0gLTkpIHJldHVybihzdWNjZXNzID0g MCk7CisJaWYgKG4gPT0gLTgpIHJldHVybihzdWNjZXNzID0gMSk7CisgICAgICAgIGlmICgocmMg PSB6X2ZsdXNoKG4pKSA8IDApIHsKKyAgICAgICAgICAgIHByaW50ZigiP0ZMVVNIIGZhaWxlZCAt IENoYW5uZWwgJWQ6ICVzXG4iLG4sY2tmZXJyb3IocmMpKTsKKyAgICAgICAgICAgIHJldHVybigt OSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKworICAgICAgY2Fz ZSBGSUxfU1RBOiAgICAgICAgICAgICAgICAgICAgIC8qIFNUQVRVUyAqLworCXsKKwkgICAgaW50 IGksIGosIGs7CQkvKiBTdXBwbHkgZGVmYXVsdCBpZiBvbmx5IG9uZSBvcGVuICovCisJICAgIHMg PSAiIjsKKwkgICAgZm9yIChrID0gMCwgaiA9IDAsIGkgPSAwOyBpIDwgel9tYXhjaGFuOyBpKysp IHsKKwkJaWYgKHpfZmlsZSkKKwkJICBpZiAoel9maWxlW2ldKQorCQkgICAgaWYgKHpfZmlsZVtp XS0+el9mcCkgeyBrKys7IGogPSBpOyB9CisJICAgIH0KKwkgICAgaWYgKGsgPT0gMSkgcyA9IGNr aXRvYShqKTsKKwl9CisgICAgICAgIGlmICgoeCA9IGNtbnVtKCJDaGFubmVsIG51bWJlciIscywx MCwmbiwgeHhzdHJpbmcpKSA8IDApIHsKKyAgICAgICAgICAgIGlmICh4ID09IC0zKSB7CisJCWlm ICh6X25vcGVuID4gMSkgeworCQkgICAgcHJpbnRmKCI/JWQgZmlsZXMgb3BlbiAtIHBsZWFzZSBz dXBwbHkgY2hhbm5lbCBudW1iZXJcbiIsCisJCQkgICB6X25vcGVuKTsKKwkJICAgIHJldHVybigt OSk7CisJCX0KKyAgICAgICAgICAgIH0gZWxzZQorCSAgICAgIHJldHVybih4KTsKKyAgICAgICAg fQorICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApCisgICAgICAgICAgcmV0dXJuKHkpOwor CWlmICgoIXpfZmlsZSB8fCB6X25vcGVuID09IDApICYmIHggPT0gLTMpIHsKKwkgICAgcHJpbnRm KCJObyBmaWxlcyBvcGVuXG4iKTsKKwkgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKwl9CisgICAg ICAgIHAgPSBibGFua3MgKyAzOyAgICAgICAgICAgICAgICAgLyogVHJpY2t5IGZvcm1hdHRpbmcu Li4gKi8KKyAgICAgICAgaWYgKG4gPCAxMDAwKSBwLS07CisgICAgICAgIGlmIChuIDwgMTAwKSBw LS07CisgICAgICAgIGlmIChuIDwgMTApIHAtLTsKKyAgICAgICAgaWYgKChyYyA9IHpfZ2V0bW9k ZShuKSkgPCAwKSB7CisgICAgICAgICAgICBwcmludGYoIkNoYW5uZWwgJWQ6JXMlc1xuIixuLHAs Y2tmZXJyb3IocmMpKTsKKyAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7CisgICAgICAg IH0gZWxzZSBpZiAoIXJjKSB7CisgICAgICAgICAgICBwcmludGYoIkNoYW5uZWwgJWQ6JXNOb3Qg b3BlblxuIixuLHApOworICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKyAgICAgICAg fSBlbHNlIHsKKyAgICAgICAgICAgIENLX09GRl9UIHh4OworICAgICAgICAgICAgcyA9IHpfZ2V0 bmFtZShuKTsKKyAgICAgICAgICAgIGlmICghcykgcyA9ICIobmFtZSB1bmtub3duKSI7CisgICAg ICAgICAgICBwcmludGYoIkNoYW5uZWwgJWQ6JXNPcGVuXG4iLG4scCk7CisgICAgICAgICAgICBw cmludGYoIiBGaWxlOiAgICAgICAgJXNcbiBNb2RlczogICAgICAiLHMpOworICAgICAgICAgICAg aWYgKHJjICYgRk1fUkVBKSBwcmludGYoIiAvUkVBRCIpOworICAgICAgICAgICAgaWYgKHJjICYg Rk1fV1JJKSBwcmludGYoIiAvV1JJVEUiKTsKKyAgICAgICAgICAgIGlmIChyYyAmIEZNX0FQUCkg cHJpbnRmKCIgL0FQUEVORCIpOworICAgICAgICAgICAgaWYgKHJjICYgRk1fQklOKSBwcmludGYo IiAvQklOQVJZIik7CisgICAgICAgICAgICBpZiAocmMgJiBGTV9DTUQpIHByaW50ZigiIC9DT01N QU5EIik7CisgICAgICAgICAgICBpZiAocmMgJiBGTV9FT0YpIHByaW50ZigiIFtFT0ZdIik7Cisg ICAgICAgICAgICBwcmludGYoIlxuIFNpemU6ICAgICAgICAlc1xuIixja2ZzdG9hKHpfY291bnQo bixSRF9DSEFSKSkpOworICAgICAgICAgICAgcHJpbnRmKCIgQXQgYnl0ZTogICAgICVzXG4iLGNr ZnN0b2Eoel9nZXRwb3MobikpKTsKKyAgICAgICAgICAgIHh4ID0gel9nZXRsaW5lKG4pOworICAg ICAgICAgICAgaWYgKHh4ID4gKENLX09GRl9UKS0xKQorICAgICAgICAgICAgICBwcmludGYoIiBB dCBsaW5lOiAgICAgJXNcbiIsY2tmc3RvYSh4eCkpOworICAgICAgICAgICAgcmV0dXJuKHN1Y2Nl c3MgPSAxKTsKKyAgICAgICAgfQorICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuKC0yKTsK KyAgICB9Cit9CisjZW5kaWYgLyogQ0tDSEFOTkVMSU8gKi8KKworI2lmbmRlZiBOT1NFVEtFWQor LyogU2F2ZSBLZXkgbWFwcyBhbmQgaW4gT1MvMiBNb3VzZSBtYXBzICovCitpbnQKK3NhdmtleXMo bmFtZSxkaXNwKSBjaGFyICogbmFtZTsgaW50IGRpc3A7IHsKKyAgICBjaGFyICp0cDsKKyAgICBz dGF0aWMgc3RydWN0IGZpbGluZm8geHg7CisgICAgaW50IHNhdmZpbCwgaSwgaiwgazsKKyAgICBj aGFyIGJ1ZlsxMDI0XTsKKworICAgIHpjbG9zZShaTUZJTEUpOworCisgICAgaWYgKGRpc3ApIHsK KyAgICAgICAgeHguYnMgPSAwOyB4eC5jcyA9IDA7IHh4LnJsID0gMDsgeHgub3JnID0gMDsgeHgu Y2MgPSAwOworICAgICAgICB4eC50eXAgPSAwOyB4eC5kc3AgPSBYWUZaX0E7IHh4Lm9zX3NwZWNp ZmljID0gIiI7CisgICAgICAgIHh4LmxibG9wdHMgPSAwOworICAgICAgICBzYXZmaWwgPSB6b3Bl bm8oWk1GSUxFLG5hbWUsTlVMTCwmeHgpOworICAgIH0gZWxzZSBzYXZmaWwgPSB6b3Blbm8oWk1G SUxFLG5hbWUsTlVMTCxOVUxMKTsKKworICAgIGlmIChzYXZmaWwpIHsKKyNpZmRlZiBPUzIKKyAg ICAgICAgenRpbWUoJnRwKTsKKyAgICAgICAgenNvdXQoWk1GSUxFLCAiOyBLZXJtaXQgOTUgU0FW RSBLRVlNQVAgZmlsZTogIik7CisgICAgICAgIHpzb3V0bChaTUZJTEUsdHApOworICAgICAgICBp ZiAobXNra2V5cykgeworICAgICAgICAgICAgenNvdXRsKFpNRklMRSwKKyAgICAgICAgICJpZiBl cSBcIlxcdihwcm9ncmFtKVwiIFwiQy1LZXJtaXRcIiBzZXQgbXNrZXJtaXQga2V5Y29kZXMgb24i KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHpzb3V0bChaTUZJTEUsCisgICAgICAg ICAiaWYgTk9UIGVxIFwiXFx2KHByb2dyYW0pXCIgXCJDLUtlcm1pdFwiIHN0b3AgMSBDLUtlcm1p dCByZXF1aXJlZC4iKTsKKyAgICAgICAgICAgIHpzb3V0bChaTUZJTEUsInNldCBtc2tlcm1pdCBr ZXljb2RlcyBvZmYiKTsKKyAgICAgICAgfQorICAgICAgICB6c291dGwoWk1GSUxFLCIiKTsKKyNl bHNlIC8qIE9TMiAqLworICAgICAgICB6dGltZSgmdHApOworICAgICAgICB6c291dChaTUZJTEUs ICI7IEMtS2VybWl0IFNBVkUgS0VZTUFQIGZpbGU6ICIpOworICAgICAgICB6c291dGwoWk1GSUxF LHRwKTsKKyNlbmRpZiAvKiBPUzIgKi8KKworICAgICAgICB6c291dGwoWk1GSUxFLCI7IENsZWFy IHByZXZpb3VzIGtleWJvYXJkIG1hcHBpbmdzICIpOworICAgICAgICB6c291dGwoWk1GSUxFLCJz ZXQga2V5IGNsZWFyIik7CisjaWZkZWYgT1MyCisgICAgICAgIGZvciAoayA9IDA7IGsgPCBudHRr ZXk7IGsrKykgeworICAgICAgICAgICAgaWYgKCF0dGtleXRhYltrXS5mbGdzKSB7CisgICAgICAg ICAgICAgICAgY2ttYWttc2coYnVmLDEwMjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgInNl dCB0ZXJtaW5hbCBrZXkgIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICB0dGtleXRhYltrXS5r d2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgIiBjbGVhciIsCisgICAgICAgICAgICAgICAg ICAgICAgICAgTlVMTAorICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAg ICAgenNvdXRsKFpNRklMRSxidWYpOworICAgICAgICAgICAgfQorICAgICAgICB9CisjZW5kaWYg LyogT1MyICovCisgICAgICAgIHpzb3V0bChaTUZJTEUsIiIpOworCisgICAgICAgIGZvciAoaSA9 IDA7IGkgPCBLTVNJWkU7IGkrKykgeworICAgICAgICAgICAgaWYgKG1hY3JvdGFiW2ldKSB7Cisg ICAgICAgICAgICAgICAgaW50IGxlbiA9IHN0cmxlbigoY2hhciAqKW1hY3JvdGFiW2ldKTsKKyNp ZmRlZiBPUzIKKyAgICAgICAgICAgICAgICBja21ha21zZyhidWYsCisgICAgICAgICAgICAgICAg ICAgICAgICAgMTAyNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAic2V0IGtleSBcXCIsCisg ICAgICAgICAgICAgICAgICAgICAgICAgY2tpdG9hKG1za2tleXMgPyBja3RvbXNrKGkpIDogaSks CisgICAgICAgICAgICAgICAgICAgICAgICAgIiAiLAorICAgICAgICAgICAgICAgICAgICAgICAg IE5VTEwKKyAgICAgICAgICAgICAgICAgICAgICAgICApOworI2Vsc2UgLyogT1MyICovCisgICAg ICAgICAgICAgICAgY2ttYWttc2coYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgIDEwMjQs CisgICAgICAgICAgICAgICAgICAgICAgICAgInNldCBrZXkgXFwiLAorICAgICAgICAgICAgICAg ICAgICAgICAgIGNraXRvYShpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLE5VTEwK KyAgICAgICAgICAgICAgICAgICAgICAgICApOworI2VuZGlmIC8qIE9TMiAqLworICAgICAgICAg ICAgICAgIHpzb3V0KFpNRklMRSxidWYpOworCisgICAgICAgICAgICAgICAgZm9yIChqID0gMDsg aiA8IGxlbjsgaisrKSB7CisgICAgICAgICAgICAgICAgICAgIGNoYXIgY2ggPSBtYWNyb3RhYltp XVtqXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNoIDw9IFNQIHx8IGNoID49IERFTCB8fAor ICAgICAgICAgICAgICAgICAgICAgICAgIGNoID09ICctJyB8fCBjaCA9PSAnLCcgfHwKKyAgICAg ICAgICAgICAgICAgICAgICAgICBjaCA9PSAneycgfHwgY2ggPT0gJ30nIHx8CisgICAgICAgICAg ICAgICAgICAgICAgICAgY2ggPT0gJzsnIHx8IGNoID09ICc/JyB8fAorICAgICAgICAgICAgICAg ICAgICAgICAgIGNoID09ICcuJyB8fCBjaCA9PSAnXCcnIHx8CisgICAgICAgICAgICAgICAgICAg ICAgICAgY2ggPT0gJ1xcJyB8fCBjaCA9PSAnLycgfHwKKyAgICAgICAgICAgICAgICAgICAgICAg ICBjaCA9PSAnIycpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNrbWFrbXNnKGJ1ZiwxMDI0 LCJcXHsiLGNraXRvYSgoaW50KWNoKSwifSIsTlVMTCk7CisgICAgICAgICAgICAgICAgICAgICAg ICB6c291dChaTUZJTEUsYnVmKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg ICAgICAgICAgICAgICAgICAgIGNrbWFrbXNnKGJ1ZiwxMDI0LGNrY3RvYSgoY2hhciljaCksTlVM TCxOVUxMLE5VTEwpOworICAgICAgICAgICAgICAgICAgICAgICAgenNvdXQoWk1GSUxFLGJ1Zik7 CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisjaWZkZWYgT1MyCisg ICAgICAgICAgICAgICAgY2ttYWttc2coYnVmLDEwMjQsIlx0OyAiLGtleW5hbWUoaSksTlVMTCxO VUxMKTsKKyAgICAgICAgICAgICAgICB6c291dGwoWk1GSUxFLGJ1Zik7CisjZWxzZQorICAgICAg ICAgICAgICAgIHpzb3V0bChaTUZJTEUsIiIpOworI2VuZGlmIC8qIE9TMiAqLworICAgICAgICAg ICAgfSBlbHNlIGlmICgga2V5bWFwW2ldICE9IGkgKSB7CisjaWZuZGVmIE5PS1ZFUkJTCisgICAg ICAgICAgICAgICAgaWYgKElTX0tWRVJCKGtleW1hcFtpXSkpIHsKKyAgICAgICAgICAgICAgICAg ICAgZm9yIChqID0gMDsgaiA8IG5rdmVyYnM7IGorKykKKyAgICAgICAgICAgICAgICAgICAgICBp ZiAoa3ZlcmJzW2pdLmt3dmFsID09IChrZXltYXBbaV0gJiB+Rl9LVkVSQikpCisgICAgICAgICAg ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGogIT0gbmt2ZXJi cykgeworI2lmZGVmIE9TMgorI2lmZGVmIENPTU1FTlQKKyAgICAgICAgICAgICAgICAgICAgICAg IHNwcmludGYoYnVmLCAic2V0IGtleSBcXCVkIFxcSyVzXHQ7ICVzIiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbXNra2V5cyA/IGNrdG9tc2soaSkgOiBpLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBrdmVyYnNbal0ua3dkLCBrZXluYW1lKGkpCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICk7CisjZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAg Y2ttYWt4bXNnKGJ1ZiwgIC8qIDEyIHN0cmluZyBhcmdzICovCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgMTAyNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi c2V0IGtleSBcXCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2tpdG9hKG1z a2tleXMgPyBja3RvbXNrKGkpIDogaSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIiBcXEsiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt2ZXJic1tqXS5r d2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlx0OyAiLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGtleW5hbWUoaSksCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCk7CisjZW5k aWYgLyogQ09NTUVOVCAqLworICAgICAgICAgICAgICAgICAgICAgICAgenNvdXRsKFpNRklMRSxi dWYpOworI2Vsc2UKKyNpZmRlZiBDT01NRU5UCisgICAgICAgICAgICAgICAgICAgICAgICBzcHJp bnRmKGJ1ZiwgInNldCBrZXkgXFwlZCBcXEslcyIsIGksIGt2ZXJic1tqXS5rd2QpOworI2Vsc2UK KyAgICAgICAgICAgICAgICAgICAgICAgIGNrbWFrbXNnKGJ1ZiwxMDI0LAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgInNldCBrZXkgXFwiLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY2tpdG9hKGkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IiBcXEsiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3ZlcmJzW2pdLmt3ZAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyNlbmRpZiAvKiBDT01NRU5UICov CisgICAgICAgICAgICAgICAgICAgICAgICB6c291dGwoWk1GSUxFLGJ1Zik7CisjZW5kaWYKKyAg ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZQorI2VuZGlmIC8qIE5P S1ZFUkJTICovCisgICAgICAgICAgICAgICAgICB7CisjaWZkZWYgT1MyCisjaWZkZWYgQ09NTUVO VAorICAgICAgICAgICAgICAgICAgICAgIHNwcmludGYoYnVmLCAic2V0IGtleSBcXCVkIFxceyVk fVx0OyAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2trZXlzID8gY2t0b21z ayhpKSA6IGksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXltYXBbaV0sCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBrZXluYW1lKGkpCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICApOworI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgICBja21ha3htc2coYnVm LCAgICAvKiA4IHN0cmluZyBhcmdzICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDEwMjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZXQga2V5IFxcIiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2tpdG9hKG1za2tleXMgPyBja3RvbXNrKGkp IDogaSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgXFx7IiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY2tpdG9hKGtleW1hcFtpXSksCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICJ9XHQ7ICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGtleW5hbWUoaSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsTlVM TCxOVUxMLE5VTEwsTlVMTCxOVUxMKTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgICAgICAg ICAgICAgICAgICAgenNvdXRsKFpNRklMRSxidWYpOworI2Vsc2UKKyNpZmRlZiBDT01NRU5UCisg ICAgICAgICAgICAgICAgICAgICAgc3ByaW50ZihidWYsICJzZXQga2V5IFxcJWQgXFx7JWR9Iiwg aSwga2V5bWFwW2ldKTsKKyNlbHNlCisgICAgICAgICAgICAgICAgICAgICAgY2ttYWt4bXNnKGJ1 ZiwxMDI0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZXQga2V5IFxcIiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBja2l0b2EoaSksCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIiBcXHsiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNr aXRvYShrZXltYXBbaV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ9IiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVM TCxOVUxMKTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgICAgICAgICAgICAgICAgICAgenNv dXRsKFpNRklMRSxidWYpOworI2VuZGlmIC8qIE9TMiAqLworICAgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgfQorICAgICAgICB9CisjaWZkZWYgT1MyCisgICAgICAgIC8qIE9TLzIgYWxz byBoYXMgdGhlIFNFVCBURVJNSU5BTCBLRVkgPHRlcm10eXBlPiBkZWZpbmVzICovCisgICAgICAg IGZvciAoayA9IDA7IGsgPCBudHRrZXk7IGsrKykgeworICAgICAgICAgICAgZXh0ZXJuIHN0cnVj dCBrZXlub2RlICogdHRrZXltYXBbXTsKKyAgICAgICAgICAgIHN0cnVjdCBrZXlub2RlICogcG5v ZGUgPSBOVUxMOworCisgICAgICAgICAgICBpZiAodHRrZXl0YWJba10uZmxncykgICAgICAgLyog RG9uJ3QgcHJvY2VzcyBDTV9JTlYgb3IgQ01fQUJSICovCisgICAgICAgICAgICAgIGNvbnRpbnVl OworCisgICAgICAgICAgICB6c291dGwoWk1GSUxFLCIiKTsKKyAgICAgICAgICAgIGNrbWFrbXNn KGJ1ZiwxMDI0LCI7IFNFVCBURVJNSU5BTCBLRVkgIix0dGtleXRhYltrXS5rd2QsTlVMTCxOVUxM KTsKKyAgICAgICAgICAgIHpzb3V0bChaTUZJTEUsYnVmKTsKKworICAgICAgICAgICAgZm9yIChw bm9kZSA9IHR0a2V5bWFwW3R0a2V5dGFiW2tdLmt3dmFsXTsKKyAgICAgICAgICAgICAgICAgcG5v ZGU7CisgICAgICAgICAgICAgICAgIHBub2RlID0gcG5vZGUtPm5leHQKKyAgICAgICAgICAgICAg ICAgKSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChwbm9kZS0+ZGVmLnR5cGUpIHsKKyAgICAg ICAgICAgICAgICAgIGNhc2Uga2V5OgorI2lmZGVmIENPTU1FTlQKKyAgICAgICAgICAgICAgICAg ICAgc3ByaW50ZihidWYsICJzZXQgdGVybWluYWwga2V5ICVzIFxcJWQgXFx7JWR9XHQ7ICVzIiwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dGtleXRhYltrXS5rd2QsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbXNra2V5cyA/IGNrdG9tc2socG5vZGUtPmtleSkgOiBwbm9kZS0+ a2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBub2RlLT5kZWYua2V5LnNjYW5jb2Rl LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleW5hbWUocG5vZGUtPmtleSkKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICApOworI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgY2tt YWt4bXNnKGJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMjQsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAic2V0IHRlcm1pbmFsIGtleSAiLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdHRrZXl0YWJba10ua3dkLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIiBcXCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBja2l0b2EobXNr a2V5cyA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2t0b21zayhwbm9k ZS0+a2V5KSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG5vZGUtPmtl eSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIFxceyIsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBja2l0b2EocG5vZGUtPmRlZi5rZXkuc2NhbmNvZGUpLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIn1cdDsgIiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGtleW5hbWUocG5vZGUtPmtleSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBOVUxMLE5VTEwsTlVMTCxOVUxMCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwor I2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAgICAgICAgICAgICAgenNvdXRsKFpNRklMRSxi dWYpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2Ug a3ZlcmI6CisgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBua3ZlcmJzOyBqKysp CisgICAgICAgICAgICAgICAgICAgICAgaWYgKGt2ZXJic1tqXS5rd3ZhbCA9PSAocG5vZGUtPmRl Zi5rdmVyYi5pZCAmIH5GX0tWRVJCKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICAgICAgICAgICAgICBpZiAoaiAhPSBua3ZlcmJzKSB7CisjaWZkZWYgQ09NTUVOVAor ICAgICAgICAgICAgICAgICAgICAgICAgc3ByaW50ZihidWYsICJzZXQgdGVybWluYWwga2V5ICVz IFxcJWQgXFxLJXNcdDsgJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dGtl eXRhYltrXS5rd2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1za2tleXMgPyBj a3RvbXNrKHBub2RlLT5rZXkpIDogcG5vZGUtPmtleSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAga3ZlcmJzW2pdLmt3ZCwga2V5bmFtZShwbm9kZS0+a2V5KQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICApOworI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGNr bWFreG1zZyhidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAyNCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2V0IHRlcm1pbmFsIGtleSAiLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR0a2V5dGFiW2tdLmt3ZCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAiIFxcIiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBja2l0b2EobXNra2V5cyA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNrdG9tc2socG5vZGUtPmtleSkgOgorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBwbm9kZS0+a2V5KSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAiIFxcSyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3Zl cmJzW2pdLmt3ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXHQ7ICIsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5bmFtZShwbm9kZS0+a2V5KSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLE5VTEwsTlVMTCxOVUxMCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisg ICAgICAgICAgICAgICAgICAgICAgICB6c291dGwoWk1GSUxFLGJ1Zik7CisgICAgICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBj YXNlIG1hY3JvOiB7CisgICAgICAgICAgICAgICAgICAgICAgaW50IGxlbiA9IHN0cmxlbigoY2hh ciAqKXBub2RlLT5kZWYubWFjcm8uc3RyaW5nKTsKKyNpZmRlZiBDT01NRU5UCisgICAgICAgICAg ICAgICAgICAgICAgc3ByaW50ZihidWYsInNldCB0ZXJtaW5hbCBrZXkgJXMgXFwlZCAiLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdHRrZXl0YWJba10ua3dkLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbXNra2V5cyA/IGNrdG9tc2socG5vZGUtPmtleSkgOiBwbm9kZS0+ a2V5KTsKKyNlbHNlCisgICAgICAgICAgICAgICAgICAgICAgY2ttYWt4bXNnKGJ1ZiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAxMDI0LAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICJzZXQgdGVybWluYWwga2V5ICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdHRrZXl0YWJba10ua3dkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgXFwi LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNraXRvYShtc2trZXlzID8KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2t0b21zayhwbm9kZS0+a2V5KSA6Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBub2RlLT5rZXkpLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICIgIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICApOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAgICAgICAgICAg ICAgICB6c291dChaTUZJTEUsYnVmKTsKKworICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9 IDA7IGogPCBsZW47IGorKykgeworICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIGNoID0g cG5vZGUtPmRlZi5tYWNyby5zdHJpbmdbal07CisgICAgICAgICAgICAgICAgICAgICAgICAgIGlm IChjaCA8PSBTUCB8fCBjaCA+PSBERUwgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjaCA9PSAnLScgfHwgY2ggPT0gJywnIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY2ggPT0gJ3snIHx8IGNoID09ICd9JyB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNoID09ICc7JyB8fCBjaCA9PSAnPycgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjaCA9PSAnLicgfHwgY2ggPT0gJ1wnJyB8fAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNoID09ICdcXCcgfHwgY2ggPT0gJy8nIHx8CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY2ggPT0gJyMnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBja21h a21zZyhidWYsMTAyNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJc XHsiLGNraXRvYSgoaW50KWNoKSwifSIsTlVMTCk7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB6c291dChaTUZJTEUsYnVmKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNl IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNrbWFrbXNnKGJ1ZiwxMDI0LAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2tjdG9hKChjaGFyKWNoKSxOVUxM LE5VTEwsTlVMTCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6c291dChaTUZJTEUs YnVmKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgICAgICAgICBja21ha21zZyhidWYsMTAyNCwiXHQ7ICIsa2V5bmFt ZShwbm9kZS0+a2V5KSxOVUxMLE5VTEwpOworICAgICAgICAgICAgICAgICAgICAgIHpzb3V0bCha TUZJTEUsYnVmKTsKKyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICAgIGNhc2UgbGl0ZXJhbDogeworICAgICAgICAgICAgICAg ICAgICAgIGludCBsZW4gPSBzdHJsZW4oKGNoYXIgKilwbm9kZS0+ZGVmLmxpdGVyYWwuc3RyaW5n KTsKKyNpZmRlZiBDT01NRU5UCisgICAgICAgICAgICAgICAgICAgICAgc3ByaW50ZihidWYsInNl dCB0ZXJtaW5hbCBrZXkgJXMgL2xpdGVyYWwgXFwlZCAiLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdHRrZXl0YWJba10ua3dkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bXNra2V5cyA/IGNrdG9tc2socG5vZGUtPmtleSkgOiBwbm9kZS0+a2V5KTsKKyNlbHNlCisgICAg ICAgICAgICAgICAgICAgICAgY2ttYWt4bXNnKGJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAxMDI0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZXQgdGVybWlu YWwga2V5ICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHRrZXl0YWJba10ua3dk LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgL2xpdGVyYWwgXFwiLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNraXRvYShtc2trZXlzID8KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY2t0b21zayhwbm9kZS0+a2V5KSA6CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBub2RlLT5rZXkpLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICIgIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxM LE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMKTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisg ICAgICAgICAgICAgICAgICAgICAgenNvdXQoWk1GSUxFLGJ1Zik7CisKKyAgICAgICAgICAgICAg ICAgICAgICBmb3IgKGogPSAwOyBqIDwgbGVuOyBqKyspIHsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgY2hhciBjaCA9IHBub2RlLT5kZWYubGl0ZXJhbC5zdHJpbmdbal07CisgICAgICAgICAg ICAgICAgICAgICAgICAgIGlmIChjaCA8PSBTUCB8fCBjaCA+PSBERUwgfHwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjaCA9PSAnLScgfHwgY2ggPT0gJywnIHx8CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY2ggPT0gJ3snIHx8IGNoID09ICd9JyB8fAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNoID09ICc7JyB8fCBjaCA9PSAnPycgfHwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjaCA9PSAnLicgfHwgY2ggPT0gJ1wnJyB8fAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNoID09ICdcXCcgfHwgY2ggPT0gJy8nIHx8CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ggPT0gJyMnKSB7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBja21ha21zZyhidWYsMTAyNCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICJcXHsiLGNraXRvYSgoaW50KWNoKSwifSIsTlVMTCk7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB6c291dChaTUZJTEUsYnVmKTsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNrbWFr bXNnKGJ1ZiwxMDI0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2tj dG9hKChjaGFyKWNoKSxOVUxMLE5VTEwsTlVMTCk7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB6c291dChaTUZJTEUsYnVmKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICBja21ha21zZyhidWYs MTAyNCwiXHQ7ICIsa2V5bmFtZShwbm9kZS0+a2V5KSxOVUxMLE5VTEwpOworICAgICAgICAgICAg ICAgICAgICAgIHpzb3V0bChaTUZJTEUsYnVmKTsKKyAgICAgICAgICAgICAgICAgICAgICBicmVh azsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIGNhc2UgZXNjOgorI2lm ZGVmIENPTU1FTlQKKyAgICAgICAgICAgICAgICAgICAgc3ByaW50ZihidWYsCisgICAgICAgICAg ICAgICAgICAgICAgICJzZXQgdGVybWluYWwga2V5ICVzIC9saXRlcmFsIFxcJWQgXFx7JWR9XFx7 JWR9XHQ7ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dGtleXRhYltrXS5rd2Qs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNra2V5cyA/IGNrdG9tc2socG5vZGUtPmtl eSkgOiBwbm9kZS0+a2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIElTREcyMDAodHRr ZXl0YWJba10ua3d2YWwpID8gMzAgOiAyNywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBw bm9kZS0+ZGVmLmVzYy5rZXkgJiB+Rl9FU0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg a2V5bmFtZShwbm9kZS0+a2V5KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisjZWxz ZQorICAgICAgICAgICAgICAgICAgICBja21ha3htc2coYnVmLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgMTAyNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZXQgdGVy bWluYWwga2V5ICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dGtleXRhYltrXS5r d2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIC9saXRlcmFsIFxcIiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNraXRvYShtc2trZXlzID8KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBja3RvbXNrKHBub2RlLT5rZXkpIDoKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBwbm9kZS0+a2V5KSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICIgXFx7IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNraXRv YShJU0RHMjAwKHR0a2V5dGFiW2tdLmt3dmFsKSA/IDMwIDogMjcpLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIn1cXHsiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2tp dG9hKHBub2RlLT5kZWYuZXNjLmtleSAmIH5GX0VTQyksCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAifVx0OyAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5bmFtZShw bm9kZS0+a2V5KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsTlVMTAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAg ICAgICAgICAgICAgICAgIHpzb3V0bChaTUZJTEUsYnVmKTsKKyAgICAgICAgICAgICAgICAgICAg YnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIGNzaToKKyNpZmRlZiBDT01NRU5UCisgICAg ICAgICAgICAgICAgICAgIHNwcmludGYoYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAic2V0 IHRlcm1pbmFsIGtleSAlcyAvbGl0ZXJhbCBcXCVkIFxcezI3fVtcXHslZH1cdDsgJXMiLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHR0a2V5dGFiW2tdLmt3ZCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICBtc2trZXlzID8gY2t0b21zayhwbm9kZS0+a2V5KSA6IHBub2RlLT5rZXks CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG5vZGUtPmRlZi5jc2kua2V5ICYgfkZfQ1NJ LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleW5hbWUocG5vZGUtPmtleSkKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICApOworI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgY2tt YWt4bXNnKGJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMjQsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAic2V0IHRlcm1pbmFsIGtleSAiLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdHRrZXl0YWJba10ua3dkLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIiAvbGl0ZXJhbCBcXCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj a2l0b2EobXNra2V5cyA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2t0 b21zayhwbm9kZS0+a2V5KSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cG5vZGUtPmtleSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIFxcezI3fVtcXHsi LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2tpdG9hKHBub2RlLT5kZWYuY3NpLmtl eSAmIH5GX0NTSSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAifVx0OyAiLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5bmFtZShwbm9kZS0+a2V5KSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIE5VTEwsTlVMTCxOVUxMLE5VTEwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICk7CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAgICAgICAgICAg ICAgICB6c291dGwoWk1GSUxFLGJ1Zik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg ICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cisg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisjZW5kaWYgLyogT1My ICovCisKKyAgICAgICAgenNvdXRsKFpNRklMRSwiIik7CisgICAgICAgIHpzb3V0bChaTUZJTEUs IjsgRW5kIik7CisgICAgICAgIHpjbG9zZShaTUZJTEUpOworICAgICAgICByZXR1cm4oc3VjY2Vz cyA9IDEpOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7CisgICAg fQorfQorI2VuZGlmIC8qIE5PU0VUS0VZICovCisKKyNkZWZpbmUgU1ZfU0NSTCAwCisjZGVmaW5l IFNWX0hJU1QgMQorCisjaWZkZWYgT1MyCisjaWZuZGVmIE5PTE9DQUwKK3N0YXRpYyBzdHJ1Y3Qg a2V5dGFiIHRybXRybW9wdFtdID0geworICAgIHsgInNjcm9sbGJhY2siLCBTVl9TQ1JMLCAwIH0K K307CisjZW5kaWYgLyogTk9MT0NBTCAqLworI2VuZGlmIC8qIE9TMiAqLworCitzdGF0aWMgc3Ry dWN0IGtleXRhYiBjbWR0cm1vcHRbXSA9IHsKKyNpZmRlZiBDS19SRUNBTEwKKyAgICB7ICJoaXN0 b3J5IiwgICAgU1ZfSElTVCwgMCB9LAorI2VuZGlmIC8qIENLX1JFQ0FMTCAqLworI2lmZGVmIE9T MgorI2lmbmRlZiBOT0xPQ0FMCisgICAgeyAic2Nyb2xsYmFjayIsIFNWX1NDUkwsIDAgfSwKKyNl bmRpZiAvKiBOT0xPQ0FMICovCisjZW5kaWYgLyogT1MyICovCisgICAgeyAiIiwgMCwgMCB9Cit9 Oworc3RhdGljIGludCBuY21kdHJtb3B0ID0gKHNpemVvZiAoY21kdHJtb3B0KSAvIHNpemVvZiAo c3RydWN0IGtleXRhYikpIC0gMTsKKworI2lmZGVmIE9TMgorI2lmbmRlZiBOT0xPQ0FMCitfUFJP VE9UWVAoaW50IHNhdnNjcmJrLCAoaW50LCBjaGFyICosIGludCkpOworI2VuZGlmIC8qIE5PTE9D QUwgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKworI2lmZGVmIENLX1JFQ0FMTAorX1BST1RPVFlQKGlu dCBzYXZoaXN0b3J5LCAoY2hhciAqLCBpbnQpKTsKKyNlbmRpZiAvKiBDS19SRUNBTEwgKi8KKwor aW50Citkb3NhdmUoeHgpIGludCB4eDsgeworICAgIGludCB4LCB5ID0gMCwgZGlzcDsKKyAgICBj aGFyICogcyA9IE5VTEw7CisgICAgZXh0ZXJuIHN0cnVjdCBrZXl0YWIgZGlzcHRiW107CisjaWZk ZWYgWkZOUUZQCisgICAgc3RydWN0IHpmbmZwICogZm5wOworI2VuZGlmIC8qIFpGTlFGUCAqLwor CisjaWZuZGVmIE5PU0VUS0VZCisgICAgaWYgKHh4ID09IFhTS0VZKSB7ICAgICAgICAgICAgICAg ICAgLyogU0FWRSBLRVlNQVAuLiAqLworICAgICAgICB6ID0gY21vZmkoIk5hbWUgb2YgS2VybWl0 IGNvbW1hbmQgZmlsZSIsImtleW1hcC5rc2MiLCZzLHh4c3RyaW5nKTsKKyAgICB9IGVsc2Ugewor I2VuZGlmIC8qIE5PU0VUS0VZICovCisgICAgICAgIHN3aXRjaCAoeHgpIHsKKyAgICAgICAgICBj YXNlIFhTQ01EOiAgICAgICAgICAgICAgICAgICAvKiBTQVZFIENPTU1BTkQuLiAqLworICAgICAg ICAgICAgaWYgKCh5ID0gY21rZXkoY21kdHJtb3B0LCBuY21kdHJtb3B0LCAiV2hhdCB0byBzYXZl IiwKKyNpZmRlZiBPUzIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJzY3JvbGxiYWNrIiwK KyNlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGlzdG9yeSIsCisjZW5kaWYgLyog T1MyICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICB4eHN0cmluZykpIDwgMCkKKyAgICAg ICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICAgICAgYnJlYWs7CisjaWZkZWYgT1MyCisjaWZu ZGVmIE5PTE9DQUwKKyAgICAgICAgICBjYXNlIFhTVEVSTTogICAgICAgICAgICAgICAgICAvKiBT QVZFIFRFUk1JTkFMLi4gKi8KKyAgICAgICAgICAgIGlmICgoeSA9IGNta2V5KHRybXRybW9wdCwx LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIldoYXQgdG8gc2F2ZSIsInNjcm9sbGJhY2si LHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgICAgICBi cmVhazsKKyNlbmRpZiAvKiBOT0xPQ0FMICovCisjZW5kaWYgLyogT1MyICovCisgICAgICAgIH0K KyAgICAgICAgeiA9IGNtb2ZpKCJGaWxlbmFtZSIsCisgICAgICAgICAgICAgICAgICAoKHkgPT0g U1ZfU0NSTCkgPyAic2Nyb2xsYmsudHh0IiA6ICJoaXN0b3J5LnR4dCIpLAorICAgICAgICAgICAg ICAgICAgJnMsCisgICAgICAgICAgICAgICAgICB4eHN0cmluZworICAgICAgICAgICAgICAgICAg KTsKKyNpZm5kZWYgTk9TRVRLRVkKKyAgICB9CisjZW5kaWYgLyogTk9TRVRLRVkgKi8KKyAgICBp ZiAoeiA8IDApICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDaGVjayBvdXRwdXQtZmlsZSBw YXJzZSByZXN1bHRzICovCisgICAgICByZXR1cm4oeik7CisgICAgaWYgKHogPT0gMikgeworICAg ICAgICBwcmludGYoIj9Tb3JyeSwgJXMgaXMgYSBkaXJlY3RvcnkgbmFtZVxuIixzKTsKKyAgICAg ICAgcmV0dXJuKC05KTsKKyAgICB9CisjaWZkZWYgWkZOUUZQCisgICAgaWYgKChmbnAgPSB6Zm5x ZnAocyxUTVBCVUZTSVogLSAxLHRtcGJ1ZikpKSB7LyogQ29udmVydCB0byBmdWxsIHBhdGhuYW1l ICovCisgICAgICAgIGlmIChmbnAtPmZwYXRoKQorICAgICAgICAgIGlmICgoaW50KSBzdHJsZW4o Zm5wLT5mcGF0aCkgPiAwKQorICAgICAgICAgICAgcyA9IGZucC0+ZnBhdGg7CisgICAgfQorI2Vu ZGlmIC8qIFpGTlFGUCAqLworCisgICAgY2tzdHJuY3B5KGxpbmUscyxMSU5CVUZTSVopOyAgICAg ICAgLyogTWFrZSBzYWZlIGNvcHkgb2YgcGF0aG5hbWUgKi8KKyAgICBzID0gbGluZTsKKyNpZmRl ZiBNQUMKKyAgICB6ID0gMDsKKyNlbHNlCisgICAgLyogR2V0IE5FVy9BUFBFTkQgZGlzcG9zaXRp b24gKi8KKyAgICBpZiAoKHogPSBjbWtleShkaXNwdGIsMiwiRGlzcG9zaXRpb24iLCJuZXciLHh4 c3RyaW5nKSkgPCAwKQorICAgICAgcmV0dXJuKHopOworI2VuZGlmIC8qIE1BQyAqLworICAgIGRp c3AgPSB6OworICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgICAgICAgICAgICAgIC8qIEdldCBj b25maXJtYXRpb24gKi8KKyAgICAgIHJldHVybih4KTsKKworICAgIHN3aXRjaCAoeHgpIHsgICAg ICAgICAgICAgICAgICAgICAgIC8qIERvIGFjdGlvbi4uICovCisjaWZuZGVmIE5PU0VUS0VZCisg ICAgICBjYXNlIFhTS0VZOiAgICAgICAgICAgICAgICAgICAgICAgLyogU0FWRSBLRVlNQVAgKi8K KyAgICAgICAgcmV0dXJuIChzYXZrZXlzKHMsZGlzcCkpOworI2VuZGlmIC8qIE5PU0VUS0VZICov CisKKyAgICAgIGNhc2UgWFNDTUQ6ICAgICAgICAgICAgICAgICAgICAgICAvKiBTQVZFIENPTU1B TkQuLiAqLworI2lmZGVmIE9TMgorI2lmbmRlZiBOT0xPQ0FMCisgICAgICAgIGlmICh5ID09IFNW X1NDUkwpICAgICAgICAgICAgICAgLyogLi4gU0NST0xMQkFDSyAqLworICAgICAgICAgIHJldHVy bihzdWNjZXNzID0gc2F2c2NyYmsoVkNNRCxzLGRpc3ApKTsKKyNlbmRpZiAvKiBOT0xPQ0FMICov CisjZW5kaWYgLyogT1MyICovCisjaWZuZGVmIE5PUkVDQUxMCisgICAgICAgIGlmICh5ID09IFNW X0hJU1QpICAgICAgICAgICAgICAgLyogLi4gSElTVE9SWSAqLworICAgICAgICAgIHJldHVybihz dWNjZXNzID0gc2F2aGlzdG9yeShzLGRpc3ApKTsKKyNlbmRpZiAvKiBOT1JFQ0FMTCAqLworICAg ICAgICBicmVhazsKKworI2lmZGVmIE9TMgorI2lmbmRlZiBOT0xPQ0FMCisgICAgICBjYXNlIFhT VEVSTTogICAgICAgICAgICAgICAgICAgICAgLyogU0FWRSBURVJNSU5BTCBTQ1JPTExCQUNLICov CisgICAgICAgIHJldHVybihzdWNjZXNzID0gc2F2c2NyYmsoVlRFUk0scyxkaXNwKSk7CisjZW5k aWYgLyogTk9MT0NBTCAqLworI2VuZGlmIC8qIE9TMiAqLworICAgIH0KKyAgICBzdWNjZXNzID0g MDsKKyAgICByZXR1cm4oLTIpOworfQorCisvKgorICBSIEUgQSBEIFQgRSBYIFQKKworICBSZWFk IHRleHQgd2l0aCBhIGN1c3RvbSBwcm9tcHQgaW50byBnaXZlbiBidWZmZXIgdXNpbmcgY29tbWFu ZCBwYXJzZXIgYnV0CisgIHdpdGggbm8gZWNob2luZyBvciBlbnRyeSBpbnRvIHJlY2FsbCBidWZm ZXIuCisqLworaW50CityZWFkdGV4dChwcm1wdCwgYnVmZmVyLCBidWZzaXopIGNoYXIgKiBwcm1w dDsgY2hhciAqIGJ1ZmZlcjsgaW50IGJ1ZnNpejsgeworI2lmZGVmIENLX1JFQ0FMTAorICAgIGV4 dGVybiBpbnQgb25fcmVjYWxsOyAgICAgICAgICAgICAgIC8qIEFyb3VuZCBQYXNzd29yZCBwcm9t cHRpbmcgKi8KKyNlbmRpZiAvKiBDS19SRUNBTEwgKi8KKyAgICBpbnQgcmM7CisjaWZuZGVmIE5P TE9DQUwKKyNpZmRlZiBPUzIKKyAgICBleHRlcm4gaW50IHZtb2RlOworICAgIGV4dGVybiBpbnQg c3RhcnRmbGFnczsKKyAgICBpbnQgdm1vZGVfc2F2ID0gdm1vZGU7CisKKyAgICBpZiAoIXBybXB0 KSBwcm1wdCA9ICIiOworCisgICAgaWYgKHdpbjk1X3BvcHVwICYmICEoc3RhcnRmbGFncyAmIDk2 KQorI2lmZGVmIElLU0QKKyAgICAgICAgICYmICFpbnNlcnZlcgorI2VuZGlmIC8qIElLU0QgKi8K KyAgICAgICAgICkKKyAgICAgIHJldHVybihwb3B1cF9yZWFkdGV4dCh2bW9kZSxOVUxMLHBybXB0 LGJ1ZmZlcixidWZzaXosMCkpOworCisgICAgaWYgKHZtb2RlID09IFZURVJNKSB7CisgICAgICAg IHZtb2RlID0gVkNNRDsKKyAgICAgICAgVnNjcm5Jc0RpcnR5KFZURVJNKTsKKyAgICAgICAgVnNj cm5Jc0RpcnR5KFZDTUQpOworICAgIH0KKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBOT0xP Q0FMICovCisKKyNpZmRlZiBDS19SRUNBTEwKKyAgICBvbl9yZWNhbGwgPSAwOworI2VuZGlmIC8q IENLX1JFQ0FMTCAqLworICAgIGNtc2F2cChwc2F2ZSxQUk9NUFRMKTsgICAgICAgICAgICAgIC8q IFNhdmUgb2xkIHByb21wdCAqLworICAgIGNtc2V0cChwcm1wdCk7ICAgICAgICAgICAgICAgICAg ICAgIC8qIE1ha2UgbmV3IHByb21wdCAqLworICAgIGNvbmNiKChjaGFyKWVzY2FwZSk7ICAgICAg ICAgICAgICAgIC8qIFB1dCBjb25zb2xlIGluIGNicmVhayBtb2RlICovCisgICAgY21pbmkoMSk7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYW5kIGVjaG8gbW9kZSAqLworICAgIGlmIChw ZmxhZykgcHJvbXB0KHh4c3RyaW5nKTsgICAgICAgIC8qIElzc3VlIHByb21wdCBpZiBhdCB0b3Ag bGV2ZWwgKi8KKyAgICBjbXJlcygpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXNl dCB0aGUgcGFyc2VyICovCisgICAgZm9yIChyYyA9IC0xOyByYyA8IDA7ICkgeyAgICAgICAgICAg LyogUHJvbXB0IHRpbGwgdGhleSBhbnN3ZXIgKi8KKyAgICAgICAgcmMgPSBjbXR4dCgiIiwiIiwm cyxOVUxMKTsgICAgICAvKiBHZXQgYSBsaXRlcmFsIGxpbmUgb2YgdGV4dCAqLworICAgICAgICBj bXJlcygpOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlc2V0IHRoZSBwYXJzZXIgYWdhaW4g Ki8KKyAgICB9CisgICAgY2tzdHJuY3B5KGJ1ZmZlcixzLGJ1ZnNpeik7CisgICAgY21zZXRwKHBz YXZlKTsgICAgICAgICAgICAgICAgICAgICAgLyogUmVzdG9yZSBvcmlnaW5hbCBwcm9tcHQgKi8K KworI2lmbmRlZiBOT0xPQ0FMCisjaWZkZWYgT1MyCisgICAgaWYgKHZtb2RlICE9IHZtb2RlX3Nh dikgeworICAgICAgICB2bW9kZSA9IFZURVJNOworICAgICAgICBWc2NybklzRGlydHkoVkNNRCk7 CisgICAgICAgIFZzY3JuSXNEaXJ0eShWVEVSTSk7CisgICAgfQorI2VuZGlmIC8qIE9TMiAqLwor I2VuZGlmIC8qIE5PTE9DQUwgKi8KKyAgICByZXR1cm4oMCk7Cit9CisjZW5kaWYgLyogTk9JQ1Ag Ki8KKworLyogQSBnZW5lcmFsIGZ1bmN0aW9uIHRvIGFsbG93IGEgUGFzc3dvcmQgb3Igb3RoZXIg aW5mb3JtYXRpb24gICovCisvKiB0byBiZSByZWFkIGZyb20gdGhlIGNvbW1hbmQgcHJvbXB0IHdp dGhvdXQgaXQgZ29pbmcgaW50byAgICAgKi8KKy8qIHRoZSByZWNhbGwgYnVmZmVyIG9yIGJlaW5n IGVjaG8nZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCitpbnQKK3JlYWRwYXNzKHBy bXB0LCBidWZmZXIsIGJ1ZnNpeikgY2hhciAqIHBybXB0OyBjaGFyICogYnVmZmVyOyBpbnQgYnVm c2l6OyB7CisgICAgaW50IHg7CisjaWZkZWYgTk9JQ1AKKyAgICBpZiAoIXBybXB0KSBwcm1wdCA9 ICIiOworICAgIHByaW50ZigiJXMiLCBwcm1wdCk7CisjaWZkZWYgQ09NTUVOVAorICAgIC8qIFNv bWUgbGlua2VycyB3b24ndCBhbGxvdyB0aGlzIGJlY2F1c2UgaXQncyB1bnNhZmUgKi8KKyAgICBn ZXRzKGJ1ZmZlcik7CisjZWxzZSAgLyogQ09NTUVOVCAqLworICAgIHsKKyAgICAgICAgaW50IGMs IGk7IGNoYXIgKiBwOworICAgICAgICBwID0gYnVmZmVyOworICAgICAgICBmb3IgKGkgPSAwOyBp IDwgYnVmc2l6LTE7IGkrKykgeworICAgICAgICAgICAgaWYgKChjID0gZ2V0Y2hhcigpKSA9PSBF T0YpCisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKGMgPCBTUCkKKyAgICAg ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBidWZmZXJbaV0gPSBjOworICAgICAgICB9Cisg ICAgICAgIGJ1ZmZlcltpXSA9IE5VTDsKKyAgICB9CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAg IHJldHVybigxKTsKKyNlbHNlICAvKiBOT0lDUCAqLworI2lmZGVmIENLX1JFQ0FMTAorICAgIGV4 dGVybiBpbnQgb25fcmVjYWxsOyAgICAgICAgICAgICAgIC8qIGFyb3VuZCBQYXNzd29yZCBwcm9t cHRpbmcgKi8KKyNlbmRpZiAvKiBDS19SRUNBTEwgKi8KKyAgICBpbnQgcmM7CisjaWZuZGVmIE5P TE9DQUwKKyNpZmRlZiBPUzIKKyAgICBleHRlcm4gaW50IHZtb2RlOworICAgIGV4dGVybiBpbnQg c3RhcnRmbGFnczsKKyAgICBpbnQgdm1vZGVfc2F2ID0gdm1vZGU7CisjZW5kaWYgLyogT1MyICov CisjZW5kaWYgLyogTk9MT0NBTCAqLworI2lmZGVmIENLU1lTTE9HCisgICAgaW50IHNhdmxvZzsK KyNlbmRpZiAvKiBDS1NZU0xPRyAqLworICAgIGlmICghcHJtcHQpIHBybXB0ID0gIiI7CisjaWZu ZGVmIE5PTE9DQUwKKyAgICBkZWJvayA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBE b24ndCBsb2cgKi8KKyNpZmRlZiBPUzIKKyAgICBpZiAod2luOTVfcG9wdXAgJiYgIShzdGFydGZs YWdzICYgOTYpCisjaWZkZWYgSUtTRAorICAgICAgICAgJiYgIWluc2VydmVyCisjZW5kaWYgLyog SUtTRCAqLworICAgICAgICAgKSB7CisgICAgICAgIHggPSBwb3B1cF9yZWFkcGFzcyh2bW9kZSxO VUxMLHBybXB0LGJ1ZmZlcixidWZzaXosMCk7CisgICAgICAgIGRlYm9rID0gMTsKKyAgICAgICAg cmV0dXJuKHgpOworICAgIH0KKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBOT0xPQ0FMICov CisKKyNpZmRlZiBDS1NZU0xPRworICAgIHNhdmxvZyA9IGNreHN5c2xvZzsgICAgICAgICAgICAg ICAgIC8qIFNhdmUgYW5kIHR1cm4gb2ZmIHN5c2xvZ2dpbmcgKi8KKyAgICBja3hzeXNsb2cgPSAw OworI2VuZGlmIC8qIENLU1lTTE9HICovCisjaWZuZGVmIE5PTE9DQUwKKyNpZmRlZiBPUzIKKyAg ICBpZiAodm1vZGUgPT0gVlRFUk0pIHsKKyAgICAgICAgdm1vZGUgPSBWQ01EOworICAgICAgICBW c2NybklzRGlydHkoVlRFUk0pOworICAgICAgICBWc2NybklzRGlydHkoVkNNRCk7CisgICAgfQor I2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIE5PTE9DQUwgKi8KKyNpZmRlZiBDS19SRUNBTEwK KyAgICBvbl9yZWNhbGwgPSAwOworI2VuZGlmIC8qIENLX1JFQ0FMTCAqLworICAgIGNtc2F2cChw c2F2ZSxQUk9NUFRMKTsgICAgICAgICAgICAgIC8qIFNhdmUgb2xkIHByb21wdCAqLworICAgIGNt c2V0cChwcm1wdCk7ICAgICAgICAgICAgICAgICAgICAgIC8qIE1ha2UgbmV3IHByb21wdCAqLwor ICAgIGNvbmNiKChjaGFyKWVzY2FwZSk7ICAgICAgICAgICAgICAgIC8qIFB1dCBjb25zb2xlIGlu IGNicmVhayBtb2RlICovCisgICAgY21pbmkoMCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogYW5kIG5vLWVjaG8gbW9kZSAqLworICAgIGlmIChwZmxhZykgcHJvbXB0KHh4c3RyaW5nKTsg ICAgICAgIC8qIElzc3VlIHByb21wdCBpZiBhdCB0b3AgbGV2ZWwgKi8KKyAgICBjbXJlcygpOyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXNldCB0aGUgcGFyc2VyICovCisgICAgZm9y IChyYyA9IC0xOyByYyA8IDA7ICkgeyAgICAgICAgICAgLyogUHJvbXB0IHRpbGwgdGhleSBhbnN3 ZXIgKi8KKyAgICAgICAgcmMgPSBjbXR4dCgiIiwiIiwmcyxOVUxMKTsgICAgICAvKiBHZXQgYSBs aXRlcmFsIGxpbmUgb2YgdGV4dCAqLworICAgICAgICBjbXJlcygpOyAgICAgICAgICAgICAgICAg ICAgICAgIC8qIFJlc2V0IHRoZSBwYXJzZXIgYWdhaW4gKi8KKyAgICB9CisgICAgY2tzdHJuY3B5 KGJ1ZmZlcixzLGJ1ZnNpeik7CisgICAgcHJpbnRmKCJcclxuIik7ICAgICAgICAgICAgICAgICAg ICAgLyogRWNobyBhIENSTEYgKi8KKyAgICBjbXNldHAocHNhdmUpOyAgICAgICAgICAgICAgICAg ICAgICAvKiBSZXN0b3JlIG9yaWdpbmFsIHByb21wdCAqLworICAgIGNtaW5pKDEpOyAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIFJlc3RvcmUgZWNobyBtb2RlICovCisjaWZuZGVmIE5PTE9D QUwKKyNpZmRlZiBPUzIKKyAgICBpZiAodm1vZGUgIT0gdm1vZGVfc2F2KSB7CisgICAgICAgIHZt b2RlID0gVlRFUk07CisgICAgICAgIFZzY3JuSXNEaXJ0eShWQ01EKTsKKyAgICAgICAgVnNjcm5J c0RpcnR5KFZURVJNKTsKKyAgICB9CisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogTk9MT0NB TCAqLworI2lmZGVmIENLU1lTTE9HCisgICAgY2t4c3lzbG9nID0gc2F2bG9nOyAgICAgICAgICAg ICAgICAgLyogUmVzdG9yZSBzeXNsb2dnaW5nICovCisjZW5kaWYgLyogQ0tTWVNMT0cgKi8KKyAg ICBkZWJvayA9IDE7CisgICAgcmV0dXJuKDApOworI2VuZGlmIC8qIE5PSUNQICovCit9CisKKyNp Zm5kZWYgTk9JQ1AKK3N0cnVjdCBrZXl0YWIgYXV0aHRhYltdID0geyAgICAgICAgICAgICAvKiBB dmFpbGFibGUgYXV0aGVudGljYXRpb24gdHlwZXMgKi8KKyNpZmRlZiBDS19LRVJCRVJPUworICAg IHsgIms0IiwgICAgICAgIEFVVEhfS1JCNCwgQ01fSU5WIH0sCisgICAgeyAiazUiLCAgICAgICAg QVVUSF9LUkI1LCBDTV9JTlYgfSwKKyAgICB7ICJrZXJiZXJvczQiLCBBVVRIX0tSQjQsIDAgICAg ICB9LAorICAgIHsgImtlcmJlcm9zNSIsIEFVVEhfS1JCNSwgMCAgICAgIH0sCisgICAgeyAia3Ji NCIsICAgICAgQVVUSF9LUkI0LCBDTV9JTlYgfSwKKyAgICB7ICJrcmI1IiwgICAgICBBVVRIX0tS QjUsIENNX0lOViB9LAorI2VuZGlmIC8qIENLX0tFUkJFUk9TICovCisjaWZkZWYgTlQKKyAgICB7 ICJudGxtIiwgICAgICBBVVRIX05UTE0sIDAgfSwKKyNlbmRpZiAvKiBOVCAqLworI2lmZGVmIENL X1NSUAorICAgIHsgInNycCIsICAgICAgIEFVVEhfU1JQLCAgMCB9LAorI2VuZGlmIC8qIENLX1NS UCAqLworI2lmZGVmIENLX1NTTAorICAgIHsgInNzbCIsICAgICAgIEFVVEhfU1NMLCAgMCB9LAor I2VuZGlmIC8qIENLX1NTTCAqLworICAgIHsgIiIsICAgICAgICAgIDAsICAgICAgICAgMCB9Cit9 OworaW50IGF1dGh0YWJuID0gc2l6ZW9mKGF1dGh0YWIpL3NpemVvZihzdHJ1Y3Qga2V5dGFiKS0x OworCisjaWZkZWYgQ0tfS0VSQkVST1MKK3N0cnVjdCBrZXl0YWIga2VyYnRhYltdID0geyAgICAg ICAgICAgICAvKiBLZXJiZXJvcyBhdXRoZW50aWNhdGlvbiB0eXBlcyAqLworICAgIHsgIms0Iiwg ICAgICAgIEFVVEhfS1JCNCwgQ01fSU5WIH0sCisgICAgeyAiazUiLCAgICAgICAgQVVUSF9LUkI1 LCBDTV9JTlYgfSwKKyAgICB7ICJrZXJiZXJvczQiLCBBVVRIX0tSQjQsIDAgICAgICB9LAorICAg IHsgImtlcmJlcm9zNSIsIEFVVEhfS1JCNSwgMCAgICAgIH0sCisgICAgeyAia3JiNCIsICAgICAg QVVUSF9LUkI0LCBDTV9JTlYgfSwKKyAgICB7ICJrcmI1IiwgICAgICBBVVRIX0tSQjUsIENNX0lO ViB9Cit9OworaW50IGtlcmJ0YWJuID0gc2l6ZW9mKGtlcmJ0YWIpL3NpemVvZihzdHJ1Y3Qga2V5 dGFiKTsKKworc3RhdGljIHN0cnVjdCBrZXl0YWIga3JiX3NfdGJsW10gPSB7ICAgIC8qIEFVVEhF TlRJQ0FURSBjb21tYW5kIHN3aXRjaGVzOiAqLworICAgIHsgIi9jYWNoZSIsICAgS1JCX1NfQ0Es IENNX0FSRyB9Cit9Oworc3RhdGljIGludCBrcmJfc19uID0gc2l6ZW9mKGtyYl9zX3RibCkvc2l6 ZW9mKHN0cnVjdCBrZXl0YWIpOworCitzdGF0aWMgc3RydWN0IGtleXRhYiBrcmJfdl90YmxbXSA9 IHsgICAgLyogS0VSQkVST1MgdmVyc2lvbiB2YWx1ZXM6ICovCisgICAgeyAiNCIsICAgIDQsIDAg fSwKKyAgICB7ICI1IiwgICAgNSwgMCB9LCAgICAgICAgICAgICAgICAgICAvKiAoYWRkIG90aGVy cyBhcyBuZWVkZWQuLi4pICovCisgICAgeyAiYXV0byIsIDAsIDAgfSAgICAgICAgICAgICAgICAg ICAgLyogTm90ZTogMCA9IGF1dG8gKi8KK307CitzdGF0aWMgaW50IGtyYl92X24gPSBzaXplb2Yo a3JiX3ZfdGJsKS9zaXplb2Yoc3RydWN0IGtleXRhYik7CisKK3N0YXRpYyBzdHJ1Y3Qga2V5dGFi IGtyYl9hX3RibFtdID0geyAgICAvKiBLRVJCRVJPUyBhY3Rpb25zOiAqLworICAgIHsgImRlc3Ry b3kiLCAgICAgICAgICAgS1JCX0FfREUsIDAgfSwKKyAgICB7ICJpbml0aWFsaXplIiwgICAgICAg IEtSQl9BX0lOLCAwIH0sCisgICAgeyAibGlzdC1jcmVkZW50aWFscyIsICBLUkJfQV9MQywgMCB9 Cit9Oworc3RhdGljIGludCBrcmJfYV9uID0gc2l6ZW9mKGtyYl9hX3RibCkvc2l6ZW9mKHN0cnVj dCBrZXl0YWIpOworCitzdGF0aWMgc3RydWN0IGtleXRhYiBrcmI0X2lfdGJsW10gPSB7ICAgLyog S0VSQkVST1MgNCBJTklUSUFMSVpFIHN3aXRjaGVzOiAqLworICAgIHsgIi9icmllZiIsICAgICAg ICAgICAgS1JCX0lfQlIsIDAgfSwgICAgICAvKiAvQlJJRUYgICAgICAgKi8KKyAgICB7ICIvaW5z dGFuY2UiLCAgICAgICAgIEtSQl9JX0lOLCBDTV9BUkcgfSwgLyogL0lOU1RBTkNFOiAgICovCisg ICAgeyAiL2xpZmV0aW1lIiwgICAgICAgICBLUkJfSV9MRiwgQ01fQVJHIH0sIC8qIC9MSUZFVElN RTogICAqLworICAgIHsgIi9ub3QtcHJlYXV0aCIsICAgICAgS1JCX0lfTlBBLCAwIH0sICAgICAv KiAvTk9ULVBSRUFVVEggKi8KKyAgICB7ICIvcGFzc3dvcmQiLCAgICAgICAgIEtSQl9JX1BXLCBD TV9BUkcgfSwgLyogL1BBU1NXT1JEOiAgICovCisjaWZkZWYgT1MyCisgICAgeyAiL3BvcHVwIiwg ICAgICAgICAgICBLUkJfSV9QT1AsIDAgfSwgICAgIC8qIC9QT1BVUCAgICAgICAqLworI2VuZGlm IC8qIE9TMiAqLworICAgIHsgIi9wcmVhdXRoIiwgICAgICAgICAgS1JCX0lfUEEsIDAgfSwgICAg ICAvKiAvUFJFQVVUSCAgICAgKi8KKyAgICB7ICIvcmVhbG0iLCAgICAgICAgICAgIEtSQl9JX1JM LCBDTV9BUkcgfSwgLyogL1JFQUxNOiAgICAgICovCisgICAgeyAiL3ZlcmJvc2UiLCAgICAgICAg ICBLUkJfSV9WQiwgMCB9LCAgICAgIC8qIC9WRVJCT1NFICAgICAqLworICAgIHsgIiIsIDAsIDAg fQorfTsKK3N0YXRpYyBpbnQga3JiNF9pX24gPSBzaXplb2Yoa3JiNF9pX3RibCkvc2l6ZW9mKHN0 cnVjdCBrZXl0YWIpIC0gMTsKKworc3RhdGljIHN0cnVjdCBrZXl0YWIga3JiNV9pX3RibFtdID0g eyAgIC8qIEtFUkJFUk9TIDUgSU5JVElBTElaRSBzd2l0Y2hlczogKi8KKyAgICB7ICIvYWRkcmVz c2VzIiwgICAgICAgIEtSQl9JX0FEUiwgQ01fQVJHIH0sCisgICAgeyAiL2ZvcndhcmRhYmxlIiwg ICAgICBLUkJfSV9GVywgIDAgfSwgICAgICAgICAvKiAvRk9SV0FSREFCTEUgKi8KKyAgICB7ICIv aW5zdGFuY2UiLCAgICAgICAgIEtSQl9JX0lOLCBDTV9BUkcgfSwgLyogL0lOU1RBTkNFOiAgICov CisgICAgeyAiL2s0IiwgICAgICAgICAgICAgICBLUkJfSV9LNCwgIENNX0lOViB9LCAvKiAvS0VS QkVST1M0ICAgKi8KKyAgICB7ICIva2VyYmVyb3M0IiwgICAgICAgIEtSQl9JX0s0LCAgMCB9LCAg ICAgIC8qIC9LRVJCRVJPUzQgICAqLworICAgIHsgIi9rcmI0IiwgICAgICAgICAgICAgS1JCX0lf SzQsICBDTV9JTlYgfSwgLyogL0tFUkJFUk9TNCAgICovCisgICAgeyAiL2xpZmV0aW1lIiwgICAg ICAgICBLUkJfSV9MRiwgIENNX0FSRyB9LCAvKiAvTElGRVRJTUU6ICAgKi8KKyAgICB7ICIvbm8t YWRkcmVzc2VzIiwgICAgIEtSQl9JX05BRCwgMCB9LCAgICAgIC8qIC9OTy1BRERSRVNTRVMgKi8K KyAgICB7ICIvbm8tazQiLCAgICAgICAgICAgIEtSQl9JX05LNCwgQ01fSU5WIH0sLyogL05PLUtF UkJFUk9TNCAqLworICAgIHsgIi9uby1rZXJiZXJvczQiLCAgICAgS1JCX0lfTks0LCAwIH0sICAg ICAvKiAvTk8tS0VSQkVST1M0ICovCisgICAgeyAiL25vLWtyYjQiLCAgICAgICAgICBLUkJfSV9O SzQsIENNX0lOViB9LC8qIC9OTy1LRVJCRVJPUzQgKi8KKyAgICB7ICIvbm90LWZvcndhcmRhYmxl IiwgIEtSQl9JX05GVywgMCB9LCAgICAgICAgIC8qIC9OT1QtRk9SV0FSREFCTEUgKi8KKyAgICB7 ICIvbm90LXByb3hpYWJsZSIsICAgIEtSQl9JX05QUiwgMCB9LCAgICAgLyogL05PVC1QUk9YSUFC TEUgICAqLworICAgIHsgIi9wYXNzd29yZCIsICAgICAgICAgS1JCX0lfUFcsICBDTV9BUkcgfSwg LyogL1BBU1NXT1JEOiAgICovCisjaWZkZWYgT1MyCisgICAgeyAiL3BvcHVwIiwgICAgICAgICAg ICBLUkJfSV9QT1AsIDAgfSwgICAgIC8qIC9QT1BVUCAgICAgICAqLworI2VuZGlmIC8qIE9TMiAq LworICAgIHsgIi9wb3N0ZGF0ZSIsICAgICAgICAgS1JCX0lfUEQsIENNX0FSRyB9LCAvKiAvUE9T VERBVEU6ICAgKi8KKyAgICB7ICIvcHIiLCAgICAgICAgICAgICAgIEtSQl9JX1BSLCBDTV9JTlZ8 Q01fQUJSIH0sIC8qIHRvIGFsbG93IGZvciAqLworICAgIHsgIi9wcm8iLCAgICAgICAgICAgICAg S1JCX0lfUFIsIENNX0lOVnxDTV9BQlIgfSwgLyogZGlmZmVyZW50IHNwZWxsaW5ncyAqLworICAg IHsgIi9wcm94IiwgICAgICAgICAgICAgS1JCX0lfUFIsIENNX0lOVnxDTV9BQlIgfSwKKyAgICB7 ICIvcHJveGlhYmxlIiwgICAgICAgIEtSQl9JX1BSLCAwIH0sICAgICAgLyogL1BST1hJQUJMRSAg ICovCisgICAgeyAiL3Byb3h5YWJsZSIsICAgICAgICBLUkJfSV9QUiwgQ01fSU5WIH0sIC8qIC9Q Uk9YWUFCTEUgICAqLworICAgIHsgIi9yZWFsbSIsICAgICAgICAgICAgS1JCX0lfUkwsIENNX0FS RyB9LCAvKiAvUkVBTE06ICAgICAgKi8KKyAgICB7ICIvcmVuZXciLCAgICAgICAgICAgIEtSQl9J X1JOLCAwIH0sICAgICAgICAgIC8qIC9SRU5FVyAgICAgICAqLworICAgIHsgIi9yZW5ld2FibGUi LCAgICAgICAgS1JCX0lfUkIsIENNX0FSRyB9LCAvKiAvUkVORVdBQkxFOiAgKi8KKyAgICB7ICIv c2VydmljZSIsICAgICAgICAgIEtSQl9JX1NSLCBDTV9BUkcgfSwgLyogL1NFUlZJQ0U6ICAgICov CisgICAgeyAiL3ZhbGlkYXRlIiwgICAgICAgICBLUkJfSV9WQSwgMCB9LCAgICAgICAgICAvKiAv VkFMSURBVEUgICAgKi8KKyAgICB7ICIiLCAwLCAwIH0KK307CitzdGF0aWMgaW50IGtyYjVfaV9u ID0gc2l6ZW9mKGtyYjVfaV90YmwpL3NpemVvZihzdHJ1Y3Qga2V5dGFiKSAtIDE7CisKK3N0YXRp YyBzdHJ1Y3Qga2V5dGFiIGtsY3RhYltdID0geyAgICAgICAvKiBMaXN0IENyZWRlbnRpYWxzIHN3 aXRjaGVzKi8KKyAgICB7ICIvYWRkcmVzc2VzIiwgIFhZS0xDQUQsIDAgfSwKKyAgICB7ICIvZW5j cnlwdGlvbiIsIFhZS0xDRU4sIDAgfSwKKyAgICB7ICIvZmxhZ3MiLCAgICAgIFhZS0xDRkwsIDAg fQorfTsKK3N0YXRpYyBpbnQgbmtsY3RhYiA9IHNpemVvZihrbGN0YWIpL3NpemVvZihzdHJ1Y3Qg a2V5dGFiKTsKKworZXh0ZXJuIGludCBrcmJfYWN0aW9uOworZXh0ZXJuIHN0cnVjdCBrcmJfb3Bf ZGF0YSBrcmJfb3A7CisKK2V4dGVybiBzdHJ1Y3Qga3JiNV9saXN0X2NyZWRfZGF0YSBrcmI1X2xj OworZXh0ZXJuIHN0cnVjdCBrcmI1X2luaXRfZGF0YSBrcmI1X2luaXQ7CitleHRlcm4gY2hhciAq IGtyYjVfZF9wcmluY2lwYWw7ICAgICAgICAgLyogRGVmYXVsdCBwcmluY2lwYWwgKi8KK2V4dGVy biBjaGFyICoga3JiNV9kX2luc3RhbmNlOworZXh0ZXJuIGNoYXIgKiBrcmI1X2RfcmVhbG07ICAg ICAgICAgICAgIC8qIERlZmF1bHQgcmVhbG0gKi8KK2V4dGVybiBjaGFyICoga3JiNV9kX2NjOyAg ICAgICAgICAgICAgICAvKiBEZWZhdWx0IGNyZWRlbnRpYWxzIGNhY2hlICovCitleHRlcm4gY2hh ciAqIGtyYjVfZF9zcnY7ICAgICAgICAgICAgICAgLyogRGVmYXVsdCBzZXJ2aWNlIG5hbWUgKi8K K2V4dGVybiBpbnQgICAga3JiNV9kX2xpZmV0aW1lOyAgICAgICAgICAvKiBEZWZhdWx0IGxpZmV0 aW1lICovCitleHRlcm4gaW50ICAgIGtyYjVfZF9mb3J3YXJkYWJsZTsKK2V4dGVybiBpbnQgICAg a3JiNV9kX3Byb3hpYWJsZTsKK2V4dGVybiBpbnQgICAga3JiNV9kX3JlbmV3YWJsZTsKK2V4dGVy biBpbnQgICAga3JiNV9hdXRvZ2V0OworZXh0ZXJuIGludCAgICBrcmI1X2F1dG9kZWw7CitleHRl cm4gaW50ICAgIGtyYjVfZF9nZXRrNDsKK2V4dGVybiBpbnQgICAga3JiNV9kX25vX2FkZHJlc3Nl czsKK2V4dGVybiBpbnQgICAga3JiNV9jaGVja2FkZHJzOworZXh0ZXJuIGNoYXIgKiBrcmI1X2Rf YWRkcnNbXTsKK2V4dGVybiBjaGFyICogazVfa2V5dGFiOyAgICAgICAgICAgICAgICAvKiBLZXl0 YWIgZmlsZSAqLworCitleHRlcm4gc3RydWN0IGtyYjRfaW5pdF9kYXRhIGtyYjRfaW5pdDsKK2V4 dGVybiBjaGFyICoga3JiNF9kX3ByaW5jaXBhbDsgICAgICAgICAvKiBEZWZhdWx0IHByaW5jaXBh bCAqLworZXh0ZXJuIGNoYXIgKiBrcmI0X2RfcmVhbG07ICAgICAgICAgICAgIC8qIERlZmF1bHQg cmVhbG0gKi8KK2V4dGVybiBjaGFyICoga3JiNF9kX3NydjsgICAgICAgICAgICAgICAvKiBEZWZh dWx0IHNlcnZpY2UgbmFtZSAqLworZXh0ZXJuIGludCAgICBrcmI0X2RfbGlmZXRpbWU7ICAgICAg ICAgIC8qIERlZmF1bHQgbGlmZXRpbWUgKi8KK2V4dGVybiBpbnQgICAga3JiNF9kX3ByZWF1dGg7 CitleHRlcm4gY2hhciAqIGtyYjRfZF9pbnN0YW5jZTsKK2V4dGVybiBpbnQgICAga3JiNF9hdXRv Z2V0OworZXh0ZXJuIGludCAgICBrcmI0X2F1dG9kZWw7CitleHRlcm4gaW50ICAgIGtyYjRfY2hl Y2thZGRyczsKK2V4dGVybiBjaGFyICogazRfa2V5dGFiOyAgICAgICAgICAgICAgICAvKiBLZXl0 YWIgZmlsZSAqLworI2VuZGlmIC8qIENLX0tFUkJFUk9TICovCisKKyNpZm5kZWYgTk9TSE9XCitp bnQKK3Nob19pa3MoKSB7CisjaWZkZWYgSUtTRENPTkYKKyNpZmRlZiBDS19MT0dJTgorICAgIGV4 dGVybiBpbnQgY2t4c3lzbG9nLCBja3h3dG1wLCBja3hhbm9uOworI2lmZGVmIFVOSVgKKyAgICBl eHRlcm4gaW50IGNreHByaXY7CisjZW5kaWYgLyogVU5JWCAqLworI2lmZGVmIENLX1BFUk1TCisg ICAgZXh0ZXJuIGludCBja3hwZXJtczsKKyNlbmRpZiAvKiBDS19QRVJNUyAqLworICAgIGV4dGVy biBjaGFyICogYW5vbmZpbGUsICogdXNlcmZpbGUsICogYW5vbnJvb3Q7CisjaWZkZWYgT1MyCisg ICAgZXh0ZXJuIGNoYXIgKiBhbm9uYWNjdDsKKyNlbmRpZiAvKiBPUzIgKi8KKyNpZmRlZiBOVAor ICAgIGV4dGVybiBjaGFyICogaWtzX2RvbWFpbjsKKyNlbmRpZiAvKiBOVCAqLworI2VuZGlmIC8q IENLX0xPR0lOICovCisjaWZkZWYgQ0tXVE1QCisgICAgZXh0ZXJuIGNoYXIgKiB3dG1wZmlsZTsK KyNlbmRpZiAvKiBDS1dUTVAgKi8KKyNpZmRlZiBJS1NEQgorICAgIGV4dGVybiBjaGFyICogZGJm aWxlOworICAgIGV4dGVybiBpbnQgZGJlbmFibGVkOworI2VuZGlmIC8qIElLU0RCICovCisjaWZk ZWYgQ0tfTE9HSU4KKyAgICBleHRlcm4gaW50IGxvZ2ludGltbzsKKyNlbmRpZiAvKiBDS19MT0dJ TiAqLworICAgIGV4dGVybiBpbnQgc3J2Y2Rtc2csIHN1Y2Nlc3MsIGlrc2RjZiwgbm9pbml0LCBh cmdfeDsKKyAgICBleHRlcm4gY2hhciAqIGNkbXNnZmlsZVtdLCAqIGNkbXNnc3RyLCAqa2VybXJj OworICAgIGNoYXIgKiBiYW5uZXJmaWxlID0gTlVMTDsKKyAgICBjaGFyICogaGVscGZpbGUgPSBO VUxMOworICAgIGV4dGVybiBpbnQgeGZlcmxvZzsKKyAgICBleHRlcm4gY2hhciAqIHhmZXJmaWxl OworICAgIGludCBpOworCisgICAgaWYgKGlzZ3Vlc3QpIHsKKyAgICAgICAgcHJpbnRmKCI/Q29t bWFuZCBkaXNhYmxlZFxyXG4iKTsKKyAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKyAgICB9 CisKKyAgICBwcmludGYoIklLUyBTZXR0aW5nc1xyXG4iKTsKKyNpZmRlZiBDS19MT0dJTgorI2lm ZGVmIE9TMgorICAgIHByaW50ZigiICBBbm9ueW1vdXMgQWNjb3VudDogICAlc1xyXG4iLGFub25h Y2N0P2Fub25hY2N0OiI8bm9uZT4iKTsKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICBwcmludGYoIiAg QW5vbnltb3VzIEluaXRmaWxlOiAgJXNcclxuIixhbm9uZmlsZT9hbm9uZmlsZToiPG5vbmU+Iik7 CisgICAgcHJpbnRmKCIgIEFub255bW91cyBMb2dpbjogICAgICVkXHJcbiIsY2t4YW5vbik7Cisg ICAgcHJpbnRmKCIgIEFub255bW91cyBSb290OiAgICAgICVzXHJcbiIsYW5vbnJvb3Q/YW5vbnJv b3Q6Ijxub25lPiIpOworI2VuZGlmIC8qIENLX0xPR0lOICovCisgICAgcHJpbnRmKCIgIEJhbm5l cmZpbGU6ICAgICAgICAgICVzXHJcbiIsYmFubmVyZmlsZT9iYW5uZXJmaWxlOiI8bm9uZT4iKTsK KyAgICBwcmludGYoIiAgQ0RmaWxlOiAgICAgICAgICAgICAgJXNcclxuIixjZG1zZ2ZpbGVbMF0/ Y2Rtc2dmaWxlWzBdOiI8bm9uZT4iKTsKKyAgICBmb3IgKCBpPTE7aTwxNiAmJiBjZG1zZ2ZpbGVb aV07aSsrICkKKyAgICAgICAgcHJpbnRmKCIgIENEZmlsZTogICAgICAgICAgICAgICVzXHJcbiIs Y2Rtc2dmaWxlW2ldKTsKKyAgICBwcmludGYoIiAgQ0RNZXNzYWdlOiAgICAgICAgICAgJWRcclxu IixzcnZjZG1zZyk7CisjaWZkZWYgSUtTREIKKyAgICBwcmludGYoIiAgREJmaWxlOiAgICAgICAg ICAgICAgJXNcclxuIixkYmZpbGU/ZGJmaWxlOiI8bm9uZT4iKTsKKyAgICBwcmludGYoIiAgREJl bmFibGVkOiAgICAgICAgICAgJWRcclxuIixkYmVuYWJsZWQpOworI2VuZGlmIC8qIElLU0RCICov CisjaWZkZWYgQ0tfTE9HSU4KKyNpZmRlZiBOVAorICAgIHByaW50ZigiICBEZWZhdWx0LWRvbWFp bjogICAgICAlc1xyXG4iLGlrc19kb21haW4/aWtzX2RvbWFpbjoiLiIpOworI2VuZGlmIC8qIE5U ICovCisjZW5kaWYgLyogQ0tfTE9HSU4gKi8KKyAgICBwcmludGYoIiAgSGVscGZpbGU6ICAgICAg ICAgICAgJXNcclxuIixoZWxwZmlsZT9oZWxwZmlsZToiPG5vbmU+Iik7CisgICAgcHJpbnRmKCIg IEluaXRmaWxlOiAgICAgICAgICAgICVzXHJcbiIsa2VybXJjP2tlcm1yYzoiPG5vbmU+Iik7Cisg ICAgcHJpbnRmKCIgIE5vLUluaXRmaWxlOiAgICAgICAgICVkXHJcbiIsbm9pbml0KTsKKyNpZmRl ZiBDS19MT0dJTgorI2lmZGVmIENLX1BFUk0KKyAgICBwcmludGYoIiAgUGVybWlzc2lvbiBjb2Rl OiAgICAgJTBkXHJcbiIsY2t4cGVybXMpOworI2VuZGlmIC8qIENLX1BFUk0gKi8KKyNpZmRlZiBV TklYCisgICAgcHJpbnRmKCIgIFByaXZpbGVnZWQgTG9naW46ICAgICVkXHJcbiIsY2t4cHJpdik7 CisjZW5kaWYgLyogVU5JWCAqLworI2VuZGlmIC8qIENLX0xPR0lOICovCisgICAgcHJpbnRmKCIg IFNlcnZlci1vbmx5OiAgICAgICAgICVkXHJcbiIsYXJnX3gpOworICAgIHByaW50ZigiICBTeXNs b2c6ICAgICAgICAgICAgICAlZFxyXG4iLGNreHN5c2xvZyk7CisgICAgcHJpbnRmKCIgIFRpbWVv dXQgKHNlY29uZHMpOiAgICVkXHJcbiIsbG9naW50aW1vKTsKKyAgICBwcmludGYoIiAgVXNlcmZp bGU6ICAgICAgICAgICAgJXNcclxuIix1c2VyZmlsZT91c2VyZmlsZToiPG5vbmU+Iik7CisjaWZk ZWYgQ0tfTE9HSU4KKyNpZmRlZiBDS1dUTVAKKyAgICBwcmludGYoIiAgV3RtcGxvZzogICAgICAg ICAgICAgJWRcclxuIixja3h3dG1wKTsKKyAgICBwcmludGYoIiAgV3RtcGZpbGU6ICAgICAgICAg ICAgJXNcclxuIix3dG1wZmlsZT93dG1wZmlsZToiPG5vbmU+Iik7CisjZW5kaWYgLyogQ0tXVE1Q ICovCisjZW5kaWYgLyogQ0tfTE9HSU4gKi8KKyAgICBwcmludGYoIiAgWGZlcmZpbGU6ICAgICAg ICAgICAgJXNcclxuIix4ZmVyZmlsZT94ZmVyZmlsZToiPG5vbmU+Iik7CisgICAgcHJpbnRmKCIg IFhmZXJsb2c6ICAgICAgICAgICAgICVkXHJcbiIseGZlcmxvZyk7CisjZWxzZSAvKiBJS1NEQ09O RiAqLworICAgIHByaW50ZigiP05vdGhpbmcgdG8gc2hvdy5cclxuIik7CisjZW5kaWYgLyogSUtT RENPTkYgKi8KKyAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworfQorCisjaWZkZWYgQ0tfQVVUSEVO VElDQVRJT04KK2ludAorc2hvX2F1dGgoY3gpIGludCBjeDsgeworICAgIGV4dGVybiBpbnQgYXV0 aF90eXBlX3VzZXJbXSwgY21kX3Jvd3M7CisgICAgaW50IGk7CisgICAgY2hhciAqIHA7CisgICAg aW50IGt2ID0gMCwgYWxsID0gMCwgbiA9IDA7CisKKyNpZmRlZiBJS1NECisgICAgaWYgKGluc2Vy dmVyICYmIGlzZ3Vlc3QpIHsKKyAgICAgICAgcHJpbnRmKCI/U29ycnksIGNvbW1hbmQgZGlzYWJs ZWQuXHJcbiIpOworICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOworICAgIH0KKyNlbmRpZiAv KiBJS1NEICovCisgICAgaWYgKGN4KSB7CisgICAgICAgIGt2ID0gY3g7CisgICAgfSBlbHNlIGlm IChhdXRoX3R5cGVfdXNlclswXSAhPSBBVVRIVFlQRV9BVVRPKSB7CisgICAgICAgIGt2ID0gYXV0 aF90eXBlX3VzZXJbMF07CisgICAgfSBlbHNlIHsKKyAgICAgICAgYWxsID0gMTsKKyAgICAgICAg a3YgPSBBVVRIVFlQRV9LRVJCRVJPU19WNDsKKyAgICB9CisgICAgd2hpbGUgKGt2KSB7CisgICAg ICAgIHN3aXRjaCAoa3YpIHsKKyAgICAgICAgICBjYXNlIEFVVEhUWVBFX0tFUkJFUk9TX1Y0Ogor ICAgICAgICAgICAga3YgPSBhbGwgPyBBVVRIVFlQRV9LRVJCRVJPU19WNSA6IDA7CisgICAgICAg ICAgICBpZiAoY2tfa3JiNF9pc19pbnN0YWxsZWQoKSkgeworICAgICAgICAgICAgICAgIHByaW50 ZigiIEF1dGhlbnRpY2F0aW9uOiAgICAgIEtlcmJlcm9zIDRcbiIpOworICAgICAgICAgICAgICAg IGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2Ug biA9IDA7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHByaW50ZigiIEF1 dGhlbnRpY2F0aW9uOiAgICAgIEtlcmJlcm9zIDQgKG5vdCBpbnN0YWxsZWQpXG4iKTsKKyAgICAg ICAgICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJu KDApOyBlbHNlIG4gPSAwOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg fQorI2lmZGVmIENLX0tFUkJFUk9TCisgICAgICAgICAgICBwcmludGYoIiBLZXl0YWIgZmlsZTog ICAgICAgICAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICBrNF9rZXl0YWIgPyBrNF9rZXl0 YWIgOiAiKG5vbmUpIik7CisgICAgICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAo IWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOworICAgICAgICAgICAgaWYgKGtyYl9h Y3Rpb24gPCAwKSB7CisgICAgICAgICAgICAgICAgcCA9ICIobm9uZSkiOworICAgICAgICAgICAg fSBlbHNlIHsKKyAgICAgICAgICAgICAgICBmb3IgKHAgPSAiIiwgaSA9IDA7IGkgPCBrcmJfYV9u OyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGtyYl9hY3Rpb24gPT0ga3JiX2FfdGJs W2ldLmt3dmFsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwID0ga3JiX2FfdGJsW2ldLmt3 ZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcHJpbnRmKCIg QWN0aW9uOiAgICAgICAgICAgICAgJXNcbiIsIHApOworICAgICAgICAgICAgaWYgKCsrbiA+IGNt ZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKKyAgICAg ICAgICAgIHByaW50ZigiIERlZmF1bHQgbGlmZXRpbWUgICAgICVkXG4iLGtyYjRfZF9saWZldGlt ZSk7CisgICAgICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkg cmV0dXJuKDApOyBlbHNlIG4gPSAwOworICAgICAgICAgICAgcHJpbnRmKCIgTGlmZXRpbWU6ICAg ICAgICAgICAgJWQgKG1pbnV0ZXMpXG4iLGtyYjRfaW5pdC5saWZldGltZSk7CisgICAgICAgICAg ICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNl IG4gPSAwOworICAgICAgICAgICAgcHJpbnRmKCIgRGVmYXVsdCBwcmVhdXRoOiAgICAgJWRcbiIs a3JiNF9kX3ByZWF1dGgpOworICAgICAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYg KCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKKyAgICAgICAgICAgIHByaW50Zigi IFByZWF1dGg6ICAgICAgICAgICAgICVkXG4iLGtyYjRfaW5pdC5wcmVhdXRoKTsKKyAgICAgICAg ICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVs c2UgbiA9IDA7CisgICAgICAgICAgICBwcmludGYoIiBEZWZhdWx0IHByaW5jaXBhbDogICBcIiVz XCJcbiIsCisgICAgICAgICAgICAgICAgICAgIGtyYjRfZF9wcmluY2lwYWwgPyBrcmI0X2RfcHJp bmNpcGFsIDogIiIpOworICAgICAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFh c2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKKyAgICAgICAgICAgIHByaW50ZigiIFBy aW5jaXBhbDogICAgICAgICAgIFwiJXNcIlxuIiwKKyAgICAgICAgICAgICAgICAgICAga3JiNF9p bml0LnByaW5jaXBhbCA/IGtyYjRfaW5pdC5wcmluY2lwYWwgOiAiIik7CisgICAgICAgICAgICBp ZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4g PSAwOworICAgICAgICAgICAgcHJpbnRmKCIgRGVmYXVsdCByZWFsbTogICAgICAgXCIlc1wiXG4i LAorICAgICAgICAgICAgICAgICAgICBrcmI0X2RfcmVhbG0gPyBrcmI0X2RfcmVhbG0gOiAiIik7 CisgICAgICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0 dXJuKDApOyBlbHNlIG4gPSAwOworICAgICAgICAgICAgcHJpbnRmKCIgUmVhbG06ICAgICAgICAg ICAgICAgXCIlc1wiXG4iLAorICAgICAgICAgICAgICAgICAgICBrcmI0X2luaXQucmVhbG0gPyBr cmI0X2luaXQucmVhbG0gOiAiIik7CisgICAgICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAz KSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOworICAgICAgICAgICAgcHJp bnRmKCIgRGVmYXVsdCBpbnN0YW5jZTogICAgXCIlc1wiXG4iLAorICAgICAgICAgICAgICAgICAg ICBrcmI0X2RfaW5zdGFuY2UgPyBrcmI0X2RfaW5zdGFuY2UgOiAiIik7CisgICAgICAgICAgICBp ZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4g PSAwOworICAgICAgICAgICAgcHJpbnRmKCIgSW5zdGFuY2U6ICAgICAgICAgICAgXCIlc1wiXG4i LAorICAgICAgICAgICAgICAgICAgICBrcmI0X2luaXQuaW5zdGFuY2UgPyBrcmI0X2luaXQuaW5z dGFuY2UgOiAiIik7CisgICAgICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFz a21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOworICAgICAgICAgICAgcHJpbnRmKCIgQXV0 by1HZXQgVEdUczogICAgICAgJWRcbiIsa3JiNF9hdXRvZ2V0KTsKKyAgICAgICAgICAgIGlmICgr K24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7 CisgICAgICAgICAgICBwcmludGYoIiBBdXRvLURlc3Ryb3kgVEdUczogICAlc1xuIiwKKyAgICAg ICAgICAgICAgICAgICAga3JiNF9hdXRvZGVsPT1LUkJfREVMX05PPyJuZXZlciI6CisgICAgICAg ICAgICAgICAgICAgIGtyYjRfYXV0b2RlbD09S1JCX0RFTF9DTD8ib24tY2xvc2UiOiJvbi1leGl0 Iik7CisgICAgICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkg cmV0dXJuKDApOyBlbHNlIG4gPSAwOworICAgICAgICAgICAgcHJpbnRmKCIgQ2hlY2sgSVAgQWRk cmVzc2VzOiAgJWRcbiIsa3JiNF9jaGVja2FkZHJzKTsKKyAgICAgICAgICAgIGlmICgrK24gPiBj bWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7CisjaWZk ZWYgQ09NTUVOVAorICAgICAgICAgICAgcHJpbnRmKCIgUGFzc3dvcmQ6ICAgIFwiJXNcIlxuIiwK KyAgICAgICAgICAgICAgICAgICAga3JiNF9pbml0LnBhc3N3b3JkICA/IGtyYjRfaW5pdC5wYXNz d29yZCAgOiAiIik7CisgICAgICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFz a21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyNl bmRpZiAvKiBDS19LRVJCRVJPUyAqLworICAgICAgICAgICAgcHJpbnRmKCJcbiIpOworICAgICAg ICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsg ZWxzZSBuID0gMDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFVVEhUWVBFX0tF UkJFUk9TX1Y1OgorICAgICAgICAgICAga3YgPSBhbGwgPyBBVVRIVFlQRV9TU0wgOiAwOworICAg ICAgICAgICAgaWYgKGNrX2tyYjVfaXNfaW5zdGFsbGVkKCkpIHsKKyAgICAgICAgICAgICAgICBp ZiAoY2tfZ3NzYXBpX2lzX2luc3RhbGxlZCgpKQorICAgICAgICAgICAgICAgICAgICBwcmludGYo IiBBdXRoZW50aWNhdGlvbjogICAgICBLZXJiZXJvcyA1IHBsdXMgR1NTQVBJXG4iKTsKKyAgICAg ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiIEF1dGhlbnRpY2F0 aW9uOiAgICAgIEtlcmJlcm9zIDVcbiIpOworICAgICAgICAgICAgICAgIGlmICgrK24gPiBjbWRf cm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7CisgICAgICAg ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHByaW50ZigiIEF1dGhlbnRpY2F0aW9uOiAg ICAgIEtlcmJlcm9zIDUgKG5vdCBpbnN0YWxsZWQpXG4iKTsKKyAgICAgICAgICAgICAgICBpZiAo KytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAw OworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisjaWZkZWYgQ0tf S0VSQkVST1MKKyAgICAgICAgICAgIHByaW50ZigiIENhY2hlIGZpbGU6ICAgICAgICAgICVzXG4i LAorICAgICAgICAgICAgICAgICAgICBrcmJfb3AuY2FjaGUgPyBrcmJfb3AuY2FjaGUgOiAiKG5v bmUpIik7CisgICAgICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUo KSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOworICAgICAgICAgICAgcHJpbnRmKCIgRGVmYXVsdCBj YWNoZTogICAgICAgJXNcbiIsCisgICAgICAgICAgICAgICAgICAgIGtyYjVfZF9jYyA/IGtyYjVf ZF9jYyA6ICIobm9uZSkiKTsKKyAgICAgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlm ICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7CisgICAgICAgICAgICBwcmludGYo IiBLZXl0YWIgZmlsZTogICAgICAgICAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICBrNV9r ZXl0YWIgPyBrNV9rZXl0YWIgOiAiKG5vbmUpIik7CisgICAgICAgICAgICBpZiAoKytuID4gY21k X3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOworICAgICAg ICAgICAgaWYgKGtyYl9hY3Rpb24gPCAwKSB7CisgICAgICAgICAgICAgICAgcCA9ICIobm9uZSki OworICAgICAgICAgICAgfSBlbHNlICB7CisgICAgICAgICAgICAgICAgZm9yIChwID0gIiIsIGkg PSAwOyBpIDwga3JiX2FfbjsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChrcmJfYWN0 aW9uID09IGtyYl9hX3RibFtpXS5rd3ZhbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcCA9 IGtyYl9hX3RibFtpXS5rd2Q7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg ICAgICAgIHByaW50ZigiIEFjdGlvbjogICAgICAgICAgICAgICVzXG4iLCBwKTsKKyAgICAgICAg ICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVs c2UgbiA9IDA7CisKKyAgICAgICAgICAgIHByaW50ZigiIERlZmF1bHQgZm9yd2FyZGFibGUgICVk XG4iLGtyYjVfZF9mb3J3YXJkYWJsZSk7CisgICAgICAgICAgICBpZiAoKytuID4gY21kX3Jvd3Mg LSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOworICAgICAgICAgICAg cHJpbnRmKCIgRm9yd2FyZGFibGU6ICAgICAgICAgJWRcbiIsa3JiNV9pbml0LmZvcndhcmRhYmxl KTsKKyAgICAgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSBy ZXR1cm4oMCk7IGVsc2UgbiA9IDA7CisgICAgICAgICAgICBwcmludGYoIiBEZWZhdWx0IGxpZmV0 aW1lICAgICAlZFxuIixrcmI1X2RfbGlmZXRpbWUpOworICAgICAgICAgICAgaWYgKCsrbiA+IGNt ZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKKyAgICAg ICAgICAgIHByaW50ZigiIExpZmV0aW1lOiAgICAgICAgICAgICVkIChtaW51dGVzKVxuIixrcmI1 X2luaXQubGlmZXRpbWUpOworICAgICAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYg KCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKKyAgICAgICAgICAgIHByaW50Zigi IFBvc3RkYXRlOiAgICAgICAgICAgIFwiJXNcIlxuIiwKKyAgICAgICAgICAgICAgICAgICAga3Ji NV9pbml0LnBvc3RkYXRlID8ga3JiNV9pbml0LnBvc3RkYXRlOiAiIik7CisgICAgICAgICAgICBp ZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4g PSAwOworICAgICAgICAgICAgcHJpbnRmKCIgRGVmYXVsdCBwcm94aWFibGU6ICAgJWRcbiIsa3Ji NV9kX3Byb3hpYWJsZSk7CisgICAgICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAo IWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOworICAgICAgICAgICAgcHJpbnRmKCIg UHJveGlhYmxlOiAgICAgICAgICAgJWRcbiIsa3JiNV9pbml0LnByb3hpYWJsZSk7CisgICAgICAg ICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBl bHNlIG4gPSAwOworICAgICAgICAgICAgcHJpbnRmKCIgUmVuZXc6ICAgICAgICAgICAgICAgJWRc biIsa3JiNV9pbml0LnJlbmV3KTsKKyAgICAgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMp IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7CisgICAgICAgICAgICBwcmlu dGYoIiBEZWZhdWx0IHJlbmV3YWJsZTogICAlZCAobWludXRlcylcbiIsa3JiNV9kX3JlbmV3YWJs ZSk7CisgICAgICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkg cmV0dXJuKDApOyBlbHNlIG4gPSAwOworICAgICAgICAgICAgcHJpbnRmKCIgUmVuZXdhYmxlOiAg ICAgICAgICAgJWQgKG1pbnV0ZXMpXG4iLGtyYjVfaW5pdC5yZW5ld2FibGUpOworICAgICAgICAg ICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxz ZSBuID0gMDsKKyAgICAgICAgICAgIHByaW50ZigiIFNlcnZpY2U6ICAgICAgICAgICAgIFwiJXNc IlxuIiwKKyAgICAgICAgICAgICAgICAgICAga3JiNV9pbml0LnNlcnZpY2UgPyBrcmI1X2luaXQu c2VydmljZSA6ICIiKTsKKyAgICAgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICgh YXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7CisgICAgICAgICAgICBwcmludGYoIiBW YWxpZGF0ZTogICAgICAgICAgICAlZFxuIixrcmI1X2luaXQudmFsaWRhdGUpOworICAgICAgICAg ICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxz ZSBuID0gMDsKKyAgICAgICAgICAgIHByaW50ZigiIERlZmF1bHQgcHJpbmNpcGFsOiAgIFwiJXNc IlxuIiwKKyAgICAgICAgICAgICAgICAgICAga3JiNV9kX3ByaW5jaXBhbCA/IGtyYjVfZF9wcmlu Y2lwYWwgOiAiIik7CisgICAgICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFz a21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOworICAgICAgICAgICAgcHJpbnRmKCIgUHJp bmNpcGFsOiAgICAgICAgICAgXCIlc1wiXG4iLAorICAgICAgICAgICAgICAgICAgICBrcmI1X2lu aXQucHJpbmNpcGFsID8ga3JiNV9pbml0LnByaW5jaXBhbCA6ICIiKTsKKyAgICAgICAgICAgIGlm ICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9 IDA7CisgICAgICAgICAgICBwcmludGYoIiBEZWZhdWx0IGluc3RhbmNlOiAgICBcIiVzXCJcbiIs CisgICAgICAgICAgICAgICAgICAgIGtyYjVfZF9pbnN0YW5jZSA/IGtyYjVfZF9pbnN0YW5jZSA6 ICIiKTsKKyAgICAgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgp KSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7CisgICAgICAgICAgICBwcmludGYoIiBEZWZhdWx0IHJl YWxtOiAgICAgICBcIiVzXCJcbiIsCisgICAgICAgICAgICAgICAgICAgIGtyYjVfZF9yZWFsbSA/ IGtyYjVfZF9yZWFsbSA6ICIiKTsKKyAgICAgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMp IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7CisgICAgICAgICAgICBwcmlu dGYoIiBSZWFsbTogICAgICAgICAgICAgICBcIiVzXCJcbiIsCisgICAgICAgICAgICAgICAgICAg IGtyYjVfaW5pdC5yZWFsbSA/IGtyYjVfaW5pdC5yZWFsbSA6ICIiKTsKKyAgICAgICAgICAgIGlm ICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9 IDA7CisgICAgICAgICAgICBwcmludGYoIiBBdXRvLUdldCBUR1RzOiAgICAgICAlZFxuIixrcmI1 X2F1dG9nZXQpOworICAgICAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2tt b3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKKyAgICAgICAgICAgIHByaW50ZigiIEF1dG8t RGVzdHJveSBUR1RzOiAgICVzXG4iLAorICAgICAgICAgICAgICAgICAgICBrcmI1X2F1dG9kZWw9 PUtSQl9ERUxfTk8/Im5ldmVyIjoKKyAgICAgICAgICAgICAgICAgICAga3JiNV9hdXRvZGVsPT1L UkJfREVMX0NMPyJvbi1jbG9zZSI6Im9uLWV4aXQiKTsKKyAgICAgICAgICAgIGlmICgrK24gPiBj bWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7CisgICAg ICAgICAgICBwcmludGYoIiBEZWZhdWx0IGdldCBLNCBUR1RzOiAlZFxuIixrcmI1X2RfZ2V0azQp OworICAgICAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJl dHVybigwKTsgZWxzZSBuID0gMDsKKyAgICAgICAgICAgIHByaW50ZigiIEdldCBLNCBUR1RzOiAl ZFxuIixrcmI1X2luaXQuZ2V0azQpOworICAgICAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0g MykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKKyAgICAgICAgICAgIHBy aW50ZigiIENoZWNrIElQIEFkZHJlc3NlczogICVkXG4iLGtyYjVfY2hlY2thZGRycyk7CisgICAg ICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDAp OyBlbHNlIG4gPSAwOworICAgICAgICAgICAgcHJpbnRmKCIgTm8gSVAgQWRkcmVzc2VzOiAgJWRc biIsa3JiNV9kX25vX2FkZHJlc3Nlcyk7CisgICAgICAgICAgICBpZiAoKytuID4gY21kX3Jvd3Mg LSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOworICAgICAgICAgICAg cHJpbnRmKCIgSVAtQWRkcmVzc2VzOiAgICAgICAgIik7CisgICAgICAgICAgICBpZiAoa3JiNV9p bml0LmFkZHJzICYmIGtyYjVfaW5pdC5hZGRyc1swXSkgeworICAgICAgICAgICAgICAgIGZvciAo aSA9IDA7IGtyYjVfaW5pdC5hZGRyc1tpXTsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGlm IChpKQorICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiLCIpOworICAgICAgICAgICAgICAg ICAgICBwcmludGYoIiVzIixrcmI1X2luaXQuYWRkcnNbaV0pOworICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgIH0gZWxzZSBpZiAoa3JiNV9kX2FkZHJzWzBdKSB7CisgICAgICAgICAgICAg ICAgZm9yIChpID0gMDtpIDwgS1JCNV9OVU1fT0ZfQUREUlMgJiYga3JiNV9kX2FkZHJzW2ldO2kr KykgeworICAgICAgICAgICAgICAgICAgICBpZiAoaSkKKyAgICAgICAgICAgICAgICAgICAgICBw cmludGYoIiwiKTsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIlcyIsa3JiNV9kX2FkZHJz W2ldKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg ICAgICAgIHByaW50ZigiKHVzZSBkZWZhdWx0KSIpOworICAgICAgICAgICAgfQorICAgICAgICAg ICAgcHJpbnRmKCJcbiIpOworICAgICAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYg KCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKKyNpZmRlZiBDT01NRU5UCisgICAg ICAgICAgICBwcmludGYoIiBQYXNzd29yZDogICAgICAgICAgICBcIiVzXCJcbiIsCisgICAgICAg ICAgICAgICAgICAgIGtyYjVfaW5pdC5wYXNzd29yZCAgPyBrcmI1X2luaXQucGFzc3dvcmQgIDog IiIpOworICAgICAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkp IHJldHVybigwKTsgZWxzZSBuID0gMDsKKyNlbmRpZiAvKiBDT01NRU5UICovCisjZW5kaWYgLyog Q0tfS0VSQkVST1MgKi8KKyAgICAgICAgICAgIHByaW50ZigiXG4iKTsKKyAgICAgICAgICAgIGlm ICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9 IDA7CisgICAgICAgICAgICBicmVhazsKKyNpZmRlZiBDS19TU0wKKyAgICAgICAgICBjYXNlIEFV VEhUWVBFX1NTTDoKKyAgICAgICAgICAgIGt2ID0gYWxsID8gQVVUSFRZUEVfU1JQIDogMDsKKyAg ICAgICAgICAgIGlmIChja19zc2xlYXlfaXNfaW5zdGFsbGVkKCkpIHsKKyAgICAgICAgICAgICAg ICBwcmludGYoIiBBdXRoZW50aWNhdGlvbjogICAgICBTU0wvVExTICglcylcbiIsCisgICAgICAg ICAgICAgICAgICAgICAgICBTU0xlYXlfdmVyc2lvbihTU0xFQVlfVkVSU0lPTikpOworICAgICAg ICAgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4o MCk7IGVsc2UgbiA9IDA7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHBy aW50ZigiIEF1dGhlbnRpY2F0aW9uOiAgICAgIFNTTC9UTFMgKG5vdCBpbnN0YWxsZWQpXG4iKTsK KyAgICAgICAgICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkg cmV0dXJuKDApOyBlbHNlIG4gPSAwOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg ICAgICAgfQorICAgICAgICAgICAgcHJpbnRmKCIgUlNBIENlcnRzIGZpbGU6ICVzXG4iLHNzbF9y c2FfY2VydF9maWxlPworICAgICAgICAgICAgICAgICAgc3NsX3JzYV9jZXJ0X2ZpbGU6Iihub25l KSIpOworICAgICAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkp IHJldHVybigwKTsgZWxzZSBuID0gMDsKKyAgICAgICAgICAgIHByaW50ZigiIFJTQSBDZXJ0cyBD aGFpbiBmaWxlOiAlc1xuIixzc2xfcnNhX2NlcnRfY2hhaW5fZmlsZT8KKyAgICAgICAgICAgICAg ICAgIHNzbF9yc2FfY2VydF9jaGFpbl9maWxlOiIobm9uZSkiKTsKKyAgICAgICAgICAgIGlmICgr K24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7 CisgICAgICAgICAgICBwcmludGYoIiBSU0EgS2V5IGZpbGU6ICVzXG4iLHNzbF9yc2Ffa2V5X2Zp bGU/CisgICAgICAgICAgICAgICAgICBzc2xfcnNhX2tleV9maWxlOiIobm9uZSkiKTsKKyAgICAg ICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7 IGVsc2UgbiA9IDA7CisgICAgICAgICAgICBwcmludGYoIiBEU0EgQ2VydHMgZmlsZTogJXNcbiIs c3NsX2RzYV9jZXJ0X2ZpbGU/CisgICAgICAgICAgICAgICAgICBzc2xfZHNhX2NlcnRfZmlsZToi KG5vbmUpIik7CisgICAgICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21v cmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOworICAgICAgICAgICAgcHJpbnRmKCIgRFNBIENl cnRzIENoYWluIGZpbGU6ICVzXG4iLHNzbF9kc2FfY2VydF9jaGFpbl9maWxlPworICAgICAgICAg ICAgICAgICAgc3NsX2RzYV9jZXJ0X2NoYWluX2ZpbGU6Iihub25lKSIpOworICAgICAgICAgICAg aWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBu ID0gMDsKKyAgICAgICAgICAgIHByaW50ZigiIERIIEtleSBmaWxlOiAlc1xuIixzc2xfZGhfa2V5 X2ZpbGU/CisgICAgICAgICAgICAgICAgICBzc2xfZGhfa2V5X2ZpbGU6Iihub25lKSIpOworICAg ICAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigw KTsgZWxzZSBuID0gMDsKKyAgICAgICAgICAgIHByaW50ZigiIERIIFBhcmFtIGZpbGU6ICVzXG4i LHNzbF9kaF9wYXJhbV9maWxlPworICAgICAgICAgICAgICAgICAgc3NsX2RoX3BhcmFtX2ZpbGU6 Iihub25lKSIpOworICAgICAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2tt b3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKKyAgICAgICAgICAgIHByaW50ZigiIENSTCBm aWxlOiAlc1xuIixzc2xfY3JsX2ZpbGU/CisgICAgICAgICAgICAgICAgICBzc2xfY3JsX2ZpbGU6 Iihub25lKSIpOworICAgICAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2tt b3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKKyAgICAgICAgICAgIHByaW50ZigiIENSTCBk aXI6ICVzXG4iLHNzbF9jcmxfZGlyPworICAgICAgICAgICAgICAgICAgICBzc2xfY3JsX2Rpcjoi KG5vbmUpIik7CisgICAgICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21v cmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOworICAgICAgICAgICAgcHJpbnRmKCIgUmFuZG9t IGZpbGU6ICVzXG4iLHNzbF9ybmRfZmlsZT8KKyAgICAgICAgICAgICAgICAgIHNzbF9ybmRfZmls ZToiKG5vbmUpIik7CisgICAgICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFz a21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOworICAgICAgICAgICAgcHJpbnRmKCIgVmVy aWZ5IGZpbGU6ICVzXG4iLHNzbF92ZXJpZnlfZmlsZT8KKyAgICAgICAgICAgICAgICAgIHNzbF92 ZXJpZnlfZmlsZToiKG5vbmUpIik7CisgICAgICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAz KSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOworICAgICAgICAgICAgcHJp bnRmKCIgVmVyaWZ5IGRpcjogJXNcbiIsc3NsX3ZlcmlmeV9kaXI/CisgICAgICAgICAgICAgICAg ICBzc2xfdmVyaWZ5X2RpcjoiKG5vbmUpIik7CisgICAgICAgICAgICBpZiAoKytuID4gY21kX3Jv d3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOworICAgICAgICAg ICAgcHJpbnRmKCIgQ2lwaGVyIGxpc3Q6ICVzXG4iLHNzbF9jaXBoZXJfbGlzdCA/IHNzbF9jaXBo ZXJfbGlzdCA6IAorCQkgICAgREVGQVVMVF9DSVBIRVJfTElTVCk7CisgICAgICAgICAgICBpZiAo KytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAw OworICAgICAgICAgICAgaWYgKHNzbF9jb24gPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIFNT TF9saWJyYXJ5X2luaXQoKTsKKyAgICAgICAgICAgICAgICBzc2xfY3R4ID0gKFNTTF9DVFggKikK KyAgICAgICAgICAgICAgICAgIFNTTF9DVFhfbmV3KChTU0xfTUVUSE9EICopVExTdjFfbWV0aG9k KCkpOworICAgICAgICAgICAgICAgIGlmIChzc2xfY3R4ICE9IE5VTEwpCisgICAgICAgICAgICAg ICAgICBzc2xfY29uPSAoU1NMICopIFNTTF9uZXcoc3NsX2N0eCk7CisgICAgICAgICAgICB9Cisg ICAgICAgICAgICBpZiAoc3NsX2NvbiAhPSBOVUxMKSB7CisgICAgICAgICAgICAgICAgQ0hBUiAq IHAgPSBOVUxMOworICAgICAgICAgICAgICAgIGludCBpOworCisgICAgICAgICAgICAgICAgZm9y IChpID0gMDsgOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgcCA9IChDSEFSICopIFNTTF9n ZXRfY2lwaGVyX2xpc3Qoc3NsX2NvbixpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHAgPT0g TlVMTCkKKyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg cHJpbnRmKCIgICAgJXNcbiIscCk7CisgICAgICAgICAgICAgICAgICAgIGlmICgrK24gPiBjbWRf cm93cyAtIDMpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWFza21vcmUoKSkgcmV0dXJu KDApOyBlbHNlIG4gPSAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg ICAgICAgIHByaW50ZigiIENlcnRzIE9LPyAlc1xuIixzc2xfY2VydHNva19mbGFnPyAieWVzIiA6 ICJubyIpOworICAgICAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3Jl KCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKKyAgICAgICAgICAgIHByaW50ZigiIERlYnVnIG1v ZGU6ICVzXG4iLCBzc2xfZGVidWdfZmxhZyA/ICJvbiIgOiAib2ZmIik7CisgICAgICAgICAgICBp ZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4g PSAwOworICAgICAgICAgICAgcHJpbnRmKCIgVmVyYm9zZSBtb2RlOiAlc1xuIiwgc3NsX3ZlcmJv c2VfZmxhZyA/ICJvbiIgOiAib2ZmIik7CisgICAgICAgICAgICBpZiAoKytuID4gY21kX3Jvd3Mg LSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOworICAgICAgICAgICAg cHJpbnRmKCIgVmVyaWZ5IG1vZGU6ICVzXG4iLAorICAgICAgICAgICAgICAgICAgICBzc2xfdmVy aWZ5X2ZsYWcgPT0gU1NMX1ZFUklGWV9OT05FID8gIm5vbmUiIDoKKyAgICAgICAgICAgICAgICAg ICAgc3NsX3ZlcmlmeV9mbGFnID09IFNTTF9WRVJJRllfUEVFUiA/ICJwZWVyLWNlcnQiIDoKKyAg ICAgICAgICAgICAgICAgICAgImZhaWwtaWYtbm8tcGVlci1jZXJ0Iik7CisgICAgICAgICAgICBp ZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4g PSAwOworICAgICAgICAgICAgcHJpbnRmKCIgU1NMIG9ubHk/ICVzXG4iLCBzc2xfb25seV9mbGFn ID8gInllcyIgOiAibm8iKTsKKyAgICAgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlm ICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7CisgICAgICAgICAgICBwcmludGYo IiBUTFMgb25seT8gJXNcbiIsIHRsc19vbmx5X2ZsYWcgPyAieWVzIiA6ICJubyIpOworICAgICAg ICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsg ZWxzZSBuID0gMDsKKyNlbmRpZiAvKiBDS19TU0wgKi8KKyAgICAgICAgICAgIGJyZWFrOworICAg ICAgICAgIGNhc2UgQVVUSFRZUEVfTlRMTToKKyAgICAgICAgICAgIGt2ID0gMDsKKyAgICAgICAg ICAgIGlmIChja19udGxtX2lzX2luc3RhbGxlZCgpKSB7CisgICAgICAgICAgICAgICAgcHJpbnRm KCIgQXV0aGVudGljYXRpb246ICAgICAgTlRMTVxuIik7CisgICAgICAgICAgICAgICAgaWYgKCsr biA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsK KyAgICAgICAgICAgICAgICBwcmludGYoIiBObyBvcHRpb25zXG4iKTsKKyAgICAgICAgICAgICAg ICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNl IG4gPSAwOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIiBB dXRoZW50aWNhdGlvbjogICAgICBOVExNIChub3QgaW5zdGFsbGVkKVxuIik7CisgICAgICAgICAg ICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsg ZWxzZSBuID0gMDsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIHByaW50ZigiXG4iKTsKKyAgICAgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAt IDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7CisgICAgICAgICAgICBi cmVhazsKKyAgICAgICAgICBjYXNlIEFVVEhUWVBFX1NSUDoKKyAgICAgICAgICAgIGt2ID0gYWxs ID8gQVVUSFRZUEVfTlRMTSA6IDA7CisgICAgICAgICAgICBpZiAoY2tfc3JwX2lzX2luc3RhbGxl ZCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKGNrX2tyeXB0b19pc19pbnN0YWxsZWQoKSkKKyAg ICAgICAgICAgICAgICAgICAgcHJpbnRmKCIgQXV0aGVudGljYXRpb246ICAgICAgU1JQIHBsdXMg S3J5cHRvIEFQSVxuIik7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAg ICBwcmludGYoIiBBdXRoZW50aWNhdGlvbjogICAgICBTUlBcbiIpOworICAgICAgICAgICAgICAg IGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2Ug biA9IDA7CisgICAgICAgICAgICAgICAgcHJpbnRmKCIgTm8gb3B0aW9uc1xuIik7CisgICAgICAg ICAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigw KTsgZWxzZSBuID0gMDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcHJp bnRmKCIgQXV0aGVudGljYXRpb246ICAgICAgU1JQIChub3QgaW5zdGFsbGVkKVxuIik7CisgICAg ICAgICAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVy bigwKTsgZWxzZSBuID0gMDsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg IH0KKyAgICAgICAgICAgIHByaW50ZigiXG4iKTsKKyAgICAgICAgICAgIGlmICgrK24gPiBjbWRf cm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7CisgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwor fQorI2VuZGlmIC8qIENLX0FVVEhFTlRJQ0FUSU9OICovCisjZW5kaWYgLyogTk9TSE9XICovCisK KyNpZmRlZiBDS19LRVJCRVJPUworCisvKiAgQyBQIF8gQSBVIFQgSCAgLS0gIEFVVEhFTlRJQ0FU RSBjb21tYW5kIHBhcnNpbmcgICovCisKK2ludAorY3BfYXV0aCgpIHsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIENvbW1hbmRfUGFyc2UgQVVUSEVOVElDQVRFICovCisgICAgaW50IGMs IGksIG47ICAgICAgICAgICAgICAgICAgICAgICAgLyogV29ya2VycyAqLworICAgIGludCByYyA9 IDA7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJldHVybiBjb2RlICovCisgICAgaW50IGdl dHZhbDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogUGFyc2luZyBoZWxwZXJzICovCisgICAg aW50IHRtcGF1dGggPSAwOyAgICAgICAgICAgICAgICAgICAgLyogVGVtcG9yYXJ5IGF1dGhlbnRp Y2F0aW9uIHR5cGUgKi8KKyAgICBpbnQga3YgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAv KiBUZW1wb3JhcnkgS2VyYmVyb3MgdmVyc2lvbiAqLworICAgIGludCB0bXBfYWN0aW9uID0gLTE7 ICAgICAgICAgICAgICAgIC8qIFRlbXBvcmFyeSBLZXJiZXJvcyBhY3Rpb24gKi8KKyAgICBpbnQg dG1wX2tsYyA9IDA7ICAgICAgICAgICAgICAgICAgICAvKiBUZW1wb3JhcnkgbGlzdC1jcmVkZW50 aWFscyAqLworICAgIGNoYXIgdG1waGxwWzI1Nl07ICAgICAgICAgICAgICAgICAgIC8qIEZvciBi dWlsZGluZyBoZWxwIG1lc3NhZ2UgKi8KKyAgICBjaGFyICogcDsKKyAgICBjaGFyICogdG1wcHN3 ZCAgPSBOVUxMOyAgICAgICAgICAgICAvKiBQYXNzd29yZCAqLworICAgIGNoYXIgKiB0bXBwcmlu eiA9IE5VTEw7ICAgICAgICAgICAgIC8qIFByaW5jaXBhbCAqLworICAgIGNoYXIgKiB0bXByZWFs bSA9IE5VTEw7ICAgICAgICAgICAgIC8qIFJlYWxtICovCisgICAgY2hhciAqIHRtcGNhY2hlID0g TlVMTDsgICAgICAgICAgICAgLyogQ2FjaGUgZmlsZSAqLworICAgIGNoYXIgKiB0bXBpbnN0ICA9 IE5VTEw7ICAgICAgICAgICAgIC8qIEs0IEluc3RhbmNlICovCisgICAgY2hhciAqIHRtcGFkZHJz W0tSQjVfTlVNX09GX0FERFJTXTsKKyNpZmRlZiBDS19SRUNBTEwKKyAgICBleHRlcm4gaW50IG9u X3JlY2FsbDsgICAgICAgICAgICAgICAvKiBhcm91bmQgUGFzc3dvcmQgcHJvbXB0aW5nICovCisj ZW5kaWYgLyogQ0tfUkVDQUxMICovCisgICAgc3RydWN0IHN0cmluZ2ludCBwdltLUkJfSV9NQVgr MV07ICAgLyogVGVtcG9yYXJ5IGFycmF5IGZvciBzd2l0Y2ggdmFsdWVzICovCisgICAgc3RydWN0 IEZEQiBrdywgc3csIGZsOyAgICAgICAgICAgICAgLyogRkRCcyBmb3IgZWFjaCBwYXJzZSBmdW5j dGlvbiAqLworCisgICAga3JiX2FjdGlvbiA9IC0xOyAgICAgICAgICAgICAgICAgICAgLyogSW5p dGlhbGl6ZSBLZXJiZXJvcyBhY3Rpb24uICovCisgICAgdG1wX2FjdGlvbiA9IC0xOyAgICAgICAg ICAgICAgICAgICAgLyogQW5kIG91ciBsb2NhbCBjb3B5LiAqLworICAgIGZvciAoaSA9IDA7IGkg PCBLUkI1X05VTV9PRl9BRERSUzsgaSsrKQorICAgICAgdG1wYWRkcnNbaV0gPSBOVUxMOworCisg ICAgaWYgKCh5ID0gY21rZXkoa2VyYnRhYixrZXJidGFibiwiYXV0aGVudGljYXRpb24gdHlwZSIs IiIseHhzdHJpbmcpKSA8IDApCisgICAgICB7CisgICAgICAgICAgaWYgKHkgPT0gLTMpCisgICAg ICAgICAgICBwcmludGYoIj9BdXRoZW50aWNhdGlvbiB0eXBlIG5vdCBzcGVjaWZpZWQgLSBub3Ro aW5nIGhhcHBlbnNcbiIpOworICAgICAgICAgIHJldHVybih5KTsKKyAgICAgIH0KKyAgICB0bXBh dXRoID0geTsKKyAgICBkZWJ1ZyhGMTAxLCJrZXJiZXJvcyBhdXRoZW50aWNhdGlvbiIsIiIsdG1w YXV0aCk7CisgICAgc3dpdGNoICh0bXBhdXRoKSB7CisgICAgICBjYXNlIEFVVEhfS1JCNDoga3Yg PSA0OyBicmVhazsgICAgLyogRG9uJ3QgYXNzdW1lIHZhbHVlcyBhcmUgdGhlIHNhbWUgKi8KKyAg ICAgIGNhc2UgQVVUSF9LUkI1OiBrdiA9IDU7IGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAg ICAgcHJpbnRmKCI/QXV0aGVudGljYXRpb24gdHlwZSBub3Qgc3VwcG9ydGVkOiBcIiVzXCJcbiIs YXRtYnVmKTsKKyAgICAgICAgcmV0dXJuKC05KTsKKyAgICB9CisKKyAgICAvKiBGcm9tIGhlcmUg ZG93biBpcyBLZXJiZXJvcyAqLworICAgIGluaV9rZXJiKCk7ICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIFJlc2V0IEluaXQgZGF0YSB0byBkZWZhdWx0cyAqLworCisgICAgaWYgKGt2ID09IDQp IHsgICAgICAgICAgICAgICAgICAgICAgLyogU2V0IEs0IGRlZmF1bHRzICovCisgICAgICAgIGlm IChrcmI0X2RfcmVhbG0pCisgICAgICAgICAgbWFrZXN0cigmdG1wcmVhbG0sa3JiNF9kX3JlYWxt KTsKKyAgICAgICAgaWYgKGtyYjRfZF9wcmluY2lwYWwpCisgICAgICAgICAgbWFrZXN0cigmdG1w cHJpbnosa3JiNF9kX3ByaW5jaXBhbCk7CisgICAgICAgIGlmIChrcmI0X2RfaW5zdGFuY2UpCisg ICAgICAgICAgbWFrZXN0cigmdG1waW5zdCxrcmI0X2RfaW5zdGFuY2UpOworICAgIH0gZWxzZSBp ZiAoa3YgPT0gNSkgeyAgICAgICAgICAgICAgIC8qIFNldCBLNSBkZWZhdWx0cyAqLworICAgICAg ICBpZiAoa3JiNV9kX2NjKQorICAgICAgICAgIG1ha2VzdHIoJnRtcGNhY2hlLGtyYjVfZF9jYyk7 CisgICAgICAgIGlmIChrcmI1X2RfcmVhbG0pCisgICAgICAgICAgbWFrZXN0cigmdG1wcmVhbG0s a3JiNV9kX3JlYWxtKTsKKyAgICAgICAgaWYgKGtyYjVfZF9wcmluY2lwYWwpCisgICAgICAgICAg bWFrZXN0cigmdG1wcHJpbnosa3JiNV9kX3ByaW5jaXBhbCk7CisgICAgICAgIGlmIChrcmI1X2Rf aW5zdGFuY2UpCisgICAgICAgICAgbWFrZXN0cigmdG1waW5zdCxrcmI1X2RfaW5zdGFuY2UpOwor ICAgIH0KKyAgICBmb3IgKGkgPSAwOyBpIDw9IEtSQl9JX01BWDsgaSsrKSB7ICAvKiBJbml0aWFs aXplIHN3aXRjaCB2YWx1ZXMgKi8KKyAgICAgICAgcHZbaV0uc3ZhbCA9IE5VTEw7ICAgICAgICAg ICAgICAvKiB0byBudWxsIHBvaW50ZXJzICovCisgICAgICAgIHB2W2ldLml2YWwgPSAwOyAgICAg ICAgICAgICAgICAgLyogYW5kIDAgaW50IHZhbHVlcyAqLworICAgICAgICBwdltpXS53dmFsID0g KENLX09GRl9UKS0xOwkvKiBhbmQgLTEgd2lkZSB2YWx1ZXMgKi8KKyAgICB9CisgICAgaWYgKGt2 ID09IDQpIHsgICAgICAgICAgICAgICAgICAgICAgLyogS2VyYmVyb3MgNCAqLworICAgICAgICBw dltLUkJfSV9MRl0uaXZhbCA9IGtyYjRfZF9saWZldGltZTsKKyAgICAgICAgcHZbS1JCX0lfUEFd Lml2YWwgPSBrcmI0X2RfcHJlYXV0aDsKKworICAgICAgICBpZiAoKG4gPSBjbWtleShrcmJfYV90 Ymwsa3JiX2FfbiwiS2VyYmVyb3MgNCBhY3Rpb24iLCIiLHh4c3RyaW5nKSkgPCAwKQorICAgICAg ICAgIHsKKyAgICAgICAgICAgICAgaWYgKG4gPT0gLTMpCisgICAgICAgICAgICAgICAgcHJpbnRm KCI/QWN0aW9uIG5vdCBzcGVjaWZpZWQgLSBub3RoaW5nIGhhcHBlbnMuXG4iKTsKKyAgICAgICAg ICAgICAgcmV0dXJuKG4pOworICAgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGt2ID09IDUpIHsg ICAgICAgICAgICAgICAvKiBLZXJiZXJvcyA1ICovCisgICAgICAgIHB2W0tSQl9JX0ZXXS5pdmFs ID0ga3JiNV9kX2ZvcndhcmRhYmxlOworICAgICAgICBwdltLUkJfSV9QUl0uaXZhbCA9IGtyYjVf ZF9wcm94aWFibGU7CisgICAgICAgIHB2W0tSQl9JX0xGXS5pdmFsID0ga3JiNV9kX2xpZmV0aW1l OworICAgICAgICBwdltLUkJfSV9SQl0uaXZhbCA9IGtyYjVfZF9yZW5ld2FibGU7CisgICAgICAg IHB2W0tSQl9JX0s0XS5pdmFsID0ga3JiNV9kX2dldGs0OworICAgICAgICBwdltLUkJfSV9OQURd Lml2YWwgPSBrcmI1X2Rfbm9fYWRkcmVzc2VzOworCisgICAgICAgIC8qIE1ha2UgaGVscCBtZXNz YWdlIHRoYXQgc2hvd3Mgc3dpdGNoZXMgYW5kIGFjdGlvbiBrZXl3b3JkcyAqLworICAgICAgICBj a3N0cm5jcHkodG1waGxwLCJLZXJiZXJvcyA1IGFjdGlvbiwgb25lIG9mIHRoZSBmb2xsb3dpbmc6 XG4gIiwyNTYpOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwga3JiX2FfbjsgaSsrKSB7CisgICAg ICAgICAgICBja3N0cm5jYXQodG1waGxwLGtyYl9hX3RibFtpXS5rd2Qsc2l6ZW9mKHRtcGhscCkp OworICAgICAgICAgICAgaWYgKGkgPT0ga3JiX2FfbiAtIDEpCisgICAgICAgICAgICAgIGNrc3Ry bmNhdCh0bXBobHAsIlxub3Igc3dpdGNoIixzaXplb2YodG1waGxwKSk7CisgICAgICAgICAgICBl bHNlCisgICAgICAgICAgICAgIGNrc3RybmNhdCh0bXBobHAsIiAgICIsc2l6ZW9mKHRtcGhscCkp OworICAgICAgICB9CisgICAgICAgIC8qIFNldCB1cCBmaXJzdCBzZXQgb2YgY2hhaW5lZCBGREIn cyAqLworCisgICAgICAgIGNtZmRiaSgmc3csICAgICAgICAgICAgICAgICAgICAgLyogRmlyc3Qg RkRCIC0gY29tbWFuZCBzd2l0Y2hlcyAqLworICAgICAgICAgICAgICAgX0NNS0VZLCAgICAgICAg ICAgICAgICAgIC8qIGZjb2RlICovCisgICAgICAgICAgICAgICB0bXBobHAsICAgICAgICAgICAg ICAgICAgLyogaGxwbXNnICovCisgICAgICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAg ICAgLyogZGVmYXVsdCAobm9uZSkgKi8KKyAgICAgICAgICAgICAgICIiLCAgICAgICAgICAgICAg ICAgICAgICAvKiBhZGR0bCBzdHJpbmcgZGF0YSAqLworICAgICAgICAgICAgICAga3JiX3Nfbiwg ICAgICAgICAgICAgICAgIC8qIFN3aXRjaCB0YWJsZSBzaXplICovCisgICAgICAgICAgICAgICA0 LCAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDI6IDQgPSBjbXN3 aSAqLworICAgICAgICAgICAgICAgeHhzdHJpbmcsICAgICAgICAgICAgICAgIC8qIFByb2Nlc3Np bmcgZnVuY3Rpb24gKi8KKyAgICAgICAgICAgICAgIGtyYl9zX3RibCwgICAgICAgICAgICAgICAv KiBTd2l0Y2ggdGFibGUgKi8KKyAgICAgICAgICAgICAgICZrdyAgICAgICAgICAgICAgICAgICAg ICAvKiBQb2ludGVyIHRvIG5leHQgRkRCICovCisgICAgICAgICAgICAgICApOworICAgICAgICBj bWZkYmkoJmt3LCAgICAgICAgICAgICAgICAgICAgIC8qIFNlY29uZCBGREIgLSBhY3Rpb24ga2V5 d29yZHMgKi8KKyAgICAgICAgICAgICAgIF9DTUtFWSwgICAgICAgICAgICAgICAgICAvKiBmY29k ZSAqLworICAgICAgICAgICAgICAgIktlcmJlcm9zIGFjdGlvbiIsICAgICAgIC8qIGhscG1zZyAq LworICAgICAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgIC8qIGRlZmF1bHQgKG5v bmUpICovCisgICAgICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwg c3RyaW5nIGRhdGEgKi8KKyAgICAgICAgICAgICAgIGtyYl9hX24sICAgICAgICAgICAgICAgICAv KiBTd2l0Y2ggdGFibGUgc2l6ZSAqLworICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAg ICAgICAgIC8qIGFkZHRsIG51bSBkYXRhICgwID0gTk9UIHN3aXRjaCkgKi8KKyAgICAgICAgICAg ICAgIHh4c3RyaW5nLCAgICAgICAgICAgICAgICAvKiBQcm9jZXNzaW5nIGZ1bmN0aW9uICovCisg ICAgICAgICAgICAgICBrcmJfYV90YmwsICAgICAgICAgICAgICAgLyogS2V5d29yZCB0YWJsZSAq LworICAgICAgICAgICAgICAgTlVMTCAgICAgICAgICAgICAgICAgICAgIC8qIFBvaW50ZXIgdG8g bmV4dCBGREIgKG5vbmUpICovCisgICAgICAgICAgICAgICApOworCisgICAgICAgIC8qIFBhcnNl ICovCisKKyAgICAgICAgd2hpbGUgKDEpIHsgICAgICAgICAgICAgICAgICAgICAvKiBQYXJzZSAw IG9yIG1vcmUgc3dpdGNoZXMgKi8KKyAgICAgICAgICAgIHJjID0gY21mZGIoJnN3KTsgICAgICAg ICAgICAvKiBQYXJzZSBzb21ldGhpbmcgKi8KKyAgICAgICAgICAgIGRlYnVnKEYxMDEsImtlcmJl cm9zIGNtZmRiIDEgcmMiLCIiLHJjKTsKKyAgICAgICAgICAgIGlmIChyYyA8IDApIHsgICAgICAg ICAgICAgICAgICAgICAgIC8qIEVycm9yICovCisgICAgICAgICAgICAgICAgaWYgKHJjID09IC0z KQorICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/QWN0aW9uIG5vdCBzcGVjaWZpZWQgLSBub3Ro aW5nIGhhcHBlbnMuXG4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4ocmMpOyAgICAgICAgICAg ICAvKiBvciByZXBhcnNlIG5lZWRlZCAqLworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg KGNtcmVzdWx0LmZkYmFkZHIgIT0gJnN3KSAvKiBCcmVhayBvdXQgaWYgbm90IGEgc3dpdGNoICov CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgYyA9IGNtZ2JyaygpOyAgICAgICAg ICAgICAgIC8qIEhhdmUgc3dpdGNoIC0gZ2V0IGJyZWFrIGNoYXJhY3RlciAqLworICAgICAgICAg ICAgZ2V0dmFsID0gKGMgPT0gJzonIHx8IGMgPT0gJz0nKTsgLyogTXVzdCBwYXJzZSBhbiBhZ3Vt ZW50PyAqLworICAgICAgICAgICAgaWYgKGdldHZhbCAmJiAhKGNtcmVzdWx0LmtmbGFncyAmIENN X0FSRykpIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIj9UaGlzIHN3aXRjaCBkb2VzIG5vdCB0 YWtlIGFyZ3VtZW50c1xuIik7CisgICAgICAgICAgICAgICAgcmV0dXJuKC05KTsgICAgICAgICAg ICAgLyogT0sgYmVjYXVzZSBub3RoaW5nIG1hbGxvYydkIHlldCAqLworICAgICAgICAgICAgfQor ICAgICAgICAgICAgaWYgKCFnZXR2YWwgJiYgKGNtZ2t3ZmxncygpICYgQ01fQVJHKSkgeworICAg ICAgICAgICAgICAgIHByaW50ZigiP1RoaXMgc3dpdGNoIHJlcXVpcmVzIGFuIGFyZ3VtZW50XG4i KTsKKyAgICAgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICAgICAgfQorICAgICAgICAg ICAgbiA9IGNtcmVzdWx0Lm5yZXN1bHQ7ICAgICAgIC8qIE51bWVyaWMgcmVzdWx0ID0gc3dpdGNo IHZhbHVlICovCisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJrZXJiZXJvcyBjb21tYW5kIHN3aXRj aCIsIiIsbik7CisKKyAgICAgICAgICAgIHN3aXRjaCAobikgeyAgICAgICAgICAgICAgICAvKiBI YW5kbGUgdGhlIHN3aXRjaCAqLworICAgICAgICAgICAgICBjYXNlIEtSQl9TX0NBOiAgICAgICAg ICAgIC8qIC9DQUNIRTo8ZmlsZW5hbWU+ICovCisgICAgICAgICAgICAgICAgcCA9IGtyYjVfZF9j YyA/IGtyYjVfZF9jYyA6ICIiOworICAgICAgICAgICAgICAgIGlmICgoeSA9IGNtb2ZpKCJOYW1l IG9mIGNhY2hlIGZpbGUiLHAsJnMseHhzdHJpbmcpKSA8IDApIHsKKyAgICAgICAgICAgICAgICAg ICAgaWYgKHkgPT0gLTMpCisgICAgICAgICAgICAgICAgICAgICAgcyA9IE5VTEw7CisgICAgICAg ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oeSk7CisgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1ha2VzdHIoJnRtcGNhY2hlLHMpOworICAg ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg ICAgIHByaW50ZigiP1VuZXhwZWN0ZWQgc3dpdGNoIHZhbHVlIC0gaW50ZXJuYWwgZXJyb3JcbiIp OworICAgICAgICAgICAgICAgIHJldHVybigtOSk7ICAgICAgICAgICAgIC8qIChpZikgbm90aGlu ZyBtYWxsb2MnZCB5ZXQuICovCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYg KGNtcmVzdWx0LmZkYmFkZHIgIT0gJmt3KSB7ICAvKiBDaGVja2luZy4uLiAqLworICAgICAgICAg ICAgcHJpbnRmKCI/VW5leHBlY3RlZCByZXN1bHQgLSBpbnRlcm5hbCBlcnJvclxuIik7CisgICAg ICAgICAgICByZXR1cm4oLTkpOyAgICAgICAgICAgICAgICAgLyogTm90aGluZyBtYWxsb2MnZCB5 ZXQuICovCisgICAgICAgIH0KKyAgICAgICAgbiA9IGNtcmVzdWx0Lm5yZXN1bHQ7ICAgICAgICAg ICAvKiBHZXQga2V5d29yZCB2YWx1ZSAqLworICAgIH0gZWxzZSB7CisgICAgICAgIHByaW50Zigi P1VuZXhwZWN0ZWQgS2VyYmVyb3MgdmVyc2lvbiAtIEludGVybmFsIGVycm9yXG4iKTsKKyAgICAg ICAgcmV0dXJuKC05KTsKKyAgICB9CisgICAgZGVidWcoRjEwMSwia2VyYmVyb3MgYWN0aW9uIiwi IixuKTsKKyAgICBzd2l0Y2ggKG4pIHsKKyAgICAgIGNhc2UgS1JCX0FfSU46ICAgICAgICAgICAg ICAgICAgICAvKiBJTklUSUFMSVpFICovCisgICAgICBjYXNlIEtSQl9BX0RFOiAgICAgICAgICAg ICAgICAgICAgLyogREVTVFJPWSAqLworICAgICAgY2FzZSBLUkJfQV9MQzogICAgICAgICAgICAg ICAgICAgIC8qIExJU1QtQ1JFREVOVElBTFMgKi8KKyAgICAgICAgdG1wX2FjdGlvbiA9IG47ICAg ICAgICAgICAgICAgICAvKiBPSywgc2V0ICovCisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVs dDogICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vdCBPSywgcHVudC4gKi8KKyAgICAgICAg cHJpbnRmKCI/VW5leHBlY3RlZCBhY3Rpb24gLSBpbnRlcm5hbCBlcnJvclxuIik7CisgICAgICAg IHJldHVybigtOSk7CisgICAgfQorICAgIGlmICh0bXBfYWN0aW9uID09IEtSQl9BX0lOKSB7ICAg ICAgIC8qIEFjdGlvbiBpcyBJTklUSUFMSVpFICovCisgICAgICAgIGludCB4OworICAgICAgICBj bWZkYmkoJnN3LCAgICAgICAgICAgICAgICAgICAgIC8qIElOSVRJQUxJWkUgc3dpdGNoZXMgKi8K KyAgICAgICAgICAgICAgIF9DTUtFWSwgICAgICAgICAgICAgICAgICAvKiBmY29kZSAqLworICAg ICAgICAgICAgICAgIlByaW5jaXBhbCxcbiBvciBvcHRpb25hbCBJTklUSUFMSVpFIHN3aXRjaChl cykiLCAvKiBobHBtc2cgKi8KKyAgICAgICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAg ICAvKiBkZWZhdWx0IChub25lKSAqLworICAgICAgICAgICAgICAgIiIsICAgICAgICAgICAgICAg ICAgICAgIC8qIGFkZHRsIHN0cmluZyBkYXRhICovCisgICAgICAgICAgICAgICBrdiA9PSA0ID8g IGtyYjRfaV9uIDoga3JiNV9pX24sIC8qIFN3aXRjaCB0YWJsZSBzaXplICovCisgICAgICAgICAg ICAgICA0LCAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDI6IDQg PSBjbXN3aSAqLworICAgICAgICAgICAgICAgeHhzdHJpbmcsICAgICAgICAgICAgICAgIC8qIFBy b2Nlc3NpbmcgZnVuY3Rpb24gKi8KKyAgICAgICAgICAgICAgIGt2ID09IDQgPyAga3JiNF9pX3Ri bCA6IGtyYjVfaV90YmwsICAgICAgLyogU3dpdGNoIHRhYmxlICovCisgICAgICAgICAgICAgICAm ZmwgICAgICAgICAgICAgICAgICAgICAgLyogUG9pbnRlciB0byBuZXh0IEZEQiAqLworICAgICAg ICAgICAgICAgKTsKKyAgICAgICAgY21mZGJpKCZmbCwgICAgICAgICAgICAgICAgICAgICAvKiAz cmQgRkRCIC0gY29tbWFuZCB0byBzZW5kIGZyb20gKi8KKyAgICAgICAgICAgICAgIF9DTUZMRCwg ICAgICAgICAgICAgICAgICAvKiBmY29kZSAqLworICAgICAgICAgICAgICAgIlByaW5jaXBhbCIs ICAgICAgICAgICAgIC8qIGhscG1zZyAqLworICAgICAgICAgICAgICAga3YgPT0gNCA/IGtyYjRf ZF9wcmluY2lwYWwgOiBrcmI1X2RfcHJpbmNpcGFsLCAvKiBwcmluY2lwYWwgKi8KKyAgICAgICAg ICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBzdHJpbmcgZGF0YSAqLwor ICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVyaWMg ZGF0YSAxICovCisgICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgLyogYWRk dGwgbnVtZXJpYyBkYXRhIDIgKi8KKyAgICAgICAgICAgICAgIHh4c3RyaW5nLAorICAgICAgICAg ICAgICAgTlVMTCwKKyAgICAgICAgICAgICAgIE5VTEwKKyAgICAgICAgICAgICAgICk7CisgICAg ICAgIHdoaWxlICgxKSB7ICAgICAgICAgICAgICAgICAgICAgLyogUGFyc2UgSU5JVCBzd2l0Y2hl cyBvciBwcmluY2lwYWwgKi8KKyAgICAgICAgICAgIHJjID0gY21mZGIoJnN3KTsKKyAgICAgICAg ICAgIGRlYnVnKEYxMDEsImtlcmJlcm9zIGNtZmRiIDIgcmMiLCIiLHJjKTsKKyAgICAgICAgICAg IGlmIChyYyA8IDApIHsKKyAgICAgICAgICAgICAgICBpZiAocmMgPT0gLTMpCisgICAgICAgICAg ICAgICAgICBwcmludGYoIj9QcmluY2lwYWwgbmFtZSByZXF1aXJlZFxuIik7CisgICAgICAgICAg ICAgICAgZ290byBrZXJieDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlYnVnKEYxMDEs ImtlcmJlcm9zIGNtZmRiIDIgZmNvZGUiLCIiLGNtcmVzdWx0LmZjb2RlKTsKKyAgICAgICAgICAg IGlmIChjbXJlc3VsdC5mY29kZSAhPSBfQ01LRVkpIC8qIE5vdCBhIHN3aXRjaCwgcXVpdCBzd2l0 Y2ggbG9vcCAqLworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGMgPSBjbWdicmso KTsgICAgICAgICAgICAgICAvKiBTd2l0Y2ggLSBnZXQgYnJlYWsgY2hhcmFjdGVyICovCisgICAg ICAgICAgICBkZWJ1ZyhGMTAxLCJrZXJiZXJvcyBjbWZkYiAyIGNtZ2JyayIsIiIsYyk7CisgICAg ICAgICAgICBnZXR2YWwgPSAoYyA9PSAnOicgfHwgYyA9PSAnPScpOworICAgICAgICAgICAgaWYg KGdldHZhbCAmJiAhKGNtcmVzdWx0LmtmbGFncyAmIENNX0FSRykpIHsKKyAgICAgICAgICAgICAg ICBwcmludGYoIj9UaGlzIHN3aXRjaCBkb2VzIG5vdCB0YWtlIGFyZ3VtZW50c1xuIik7CisgICAg ICAgICAgICAgICAgcmV0dXJuKC05KTsgICAgICAgICAgICAgLyogT0sgYmVjYXVzZSBub3RoaW5n IG1hbGxvYydkIHlldCAqLworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFnZXR2YWwg JiYgKGNtZ2t3ZmxncygpICYgQ01fQVJHKSkgeworICAgICAgICAgICAgICAgIHByaW50ZigiP1Ro aXMgc3dpdGNoIHJlcXVpcmVzIGFuIGFyZ3VtZW50XG4iKTsKKyAgICAgICAgICAgICAgICByZXR1 cm4oLTkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbiA9IGNtcmVzdWx0Lm5yZXN1bHQ7 ICAgICAgIC8qIE51bWVyaWMgcmVzdWx0ID0gc3dpdGNoIHZhbHVlICovCisgICAgICAgICAgICBz d2l0Y2ggKG4pIHsKKyAgICAgICAgICAgICAgLyogVGhlc2UgZG9uJ3QgdGFrZSBhcmdzLi4uICov CisgICAgICAgICAgICAgIGNhc2UgS1JCX0lfUEE6ICAgICAgICAgICAgLyogL1BSRUFVVEggKi8K KyAgICAgICAgICAgICAgY2FzZSBLUkJfSV9GVzogICAgICAgICAgICAvKiAvRk9SV0FSREFCTEUg Ki8KKyAgICAgICAgICAgICAgY2FzZSBLUkJfSV9QUjogICAgICAgICAgICAvKiAvUFJPWElBQkxF ICovCisgICAgICAgICAgICAgIGNhc2UgS1JCX0lfUk46ICAgICAgICAgICAgLyogL1JFTkVXICov CisgICAgICAgICAgICAgIGNhc2UgS1JCX0lfVkE6ICAgICAgICAgICAgLyogL1ZBTElEQVRFICov CisgICAgICAgICAgICAgIGNhc2UgS1JCX0lfTlBBOiAgICAgICAgICAgLyogL05PVC1QUkVBVVRI ICovCisgICAgICAgICAgICAgIGNhc2UgS1JCX0lfTkZXOiAgICAgICAgICAgLyogL05PVC1GT1JX QVJEQUJMRSAqLworICAgICAgICAgICAgICBjYXNlIEtSQl9JX05QUjogICAgICAgICAgIC8qIC9O T1QtUFJPWElBQkxFICovCisgICAgICAgICAgICAgIGNhc2UgS1JCX0lfVkI6ICAgICAgICAgICAg LyogL1ZFUkJPU0UgKi8KKyAgICAgICAgICAgICAgY2FzZSBLUkJfSV9CUjogICAgICAgICAgICAv KiAvQlJJRUYgKi8KKyAgICAgICAgICAgICAgY2FzZSBLUkJfSV9LNDogICAgICAgICAgICAvKiAv S0VSQkVST1M0ICovCisgICAgICAgICAgICAgIGNhc2UgS1JCX0lfTks0OiAgICAgICAgICAgLyog L05PLUtFUkJFUk9TNCAqLworICAgICAgICAgICAgICBjYXNlIEtSQl9JX1BPUDogICAgICAgICAg IC8qIC9QT1BVUCAqLworICAgICAgICAgICAgICBjYXNlIEtSQl9JX05BRDogICAgICAgICAgIC8q IC9OTy1BRERSRVNTRVMgKi8KKyAgICAgICAgICAgICAgICBpZiAoZ2V0dmFsKSB7CisgICAgICAg ICAgICAgICAgICAgIHByaW50ZigiP1RoaXMgc3dpdGNoIGRvZXMgbm90IHRha2UgYSB2YWx1ZVxu Iik7CisgICAgICAgICAgICAgICAgICAgIHJjID0gLTk7CisgICAgICAgICAgICAgICAgICAgIGdv dG8ga2VyYng7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHN3aXRjaCAobikg eworICAgICAgICAgICAgICAgICAgY2FzZSBLUkJfSV9OUEE6CisgICAgICAgICAgICAgICAgICAg IHB2W0tSQl9JX1BBXS5pdmFsID0gMDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICAgICAgICAgICBjYXNlIEtSQl9JX05GVzoKKyAgICAgICAgICAgICAgICAgICAgcHZbS1JC X0lfRlddLml2YWwgPSAwOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg ICAgICAgIGNhc2UgS1JCX0lfTlBSOgorICAgICAgICAgICAgICAgICAgICBwdltLUkJfSV9QUl0u aXZhbCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg Y2FzZSBLUkJfSV9WQjoKKyAgICAgICAgICAgICAgICAgICAgcHZbS1JCX0lfQlJdLml2YWwgPSAw OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgS1JC X0lfTks0OgorICAgICAgICAgICAgICAgICAgICBwdltLUkJfSV9LNF0uaXZhbCA9IDA7CisgICAg ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAg ICAgICAgICAgICAgICAgcHZbbl0uaXZhbCA9IDE7CisgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgLyogVGhlc2UgZG8gdGFrZSBhcmd1 bWVudHMgKi8KKworICAgICAgICAgICAgICBjYXNlIEtSQl9JX1JCOiAgICAgICAgICAgIC8qIC9S RU5FV0FCTEU6PG1pbnV0ZXM+ICovCisgICAgICAgICAgICAgICAgcHZbbl0uaXZhbCA9IDA7Cisg ICAgICAgICAgICAgICAgaWYgKCFnZXR2YWwpIGJyZWFrOworICAgICAgICAgICAgICAgIGlmICgo cmMgPSBjbW51bSgiTWludXRlcyIsY2tpdG9hKGtyYjVfaW5pdC5yZW5ld2FibGUpLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAxMCwmeSwgeHhzdHJpbmcpKSA8IDApCisgICAgICAg ICAgICAgICAgICBnb3RvIGtlcmJ4OworICAgICAgICAgICAgICAgIHB2W25dLml2YWwgPSB5Owor ICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGNhc2UgS1JCX0lfTEY6ICAg ICAgICAgICAgLyogL0xJRkVUSU1FOjxtaW51dGVzPiAqLworICAgICAgICAgICAgICAgIHB2W25d Lml2YWwgPSAwOworICAgICAgICAgICAgICAgIC8qIERlZmF1bHQgaXMgcHJldmlvdXMgdmFsdWUg Ki8KKyAgICAgICAgICAgICAgICBzcHJpbnRmKHRtcGJ1ZiwiJWQiLCAgICAvKiBTQUZFICovCisg ICAgICAgICAgICAgICAgICAgICAgICBrdiA9PSA0ID8KKyAgICAgICAgICAgICAgICAgICAgICAg IGtyYjRfaW5pdC5saWZldGltZSA6CisgICAgICAgICAgICAgICAgICAgICAgICBrcmI1X2luaXQu bGlmZXRpbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgaWYg KCFnZXR2YWwpIGJyZWFrOworICAgICAgICAgICAgICAgIGlmICgocmMgPSBjbW51bSgiTWludXRl cyIsdG1wYnVmLDEwLCZ5LCB4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICAgICAgICAgIGdvdG8g a2VyYng7CisgICAgICAgICAgICAgICAgcHZbbl0uaXZhbCA9IHk7CisgICAgICAgICAgICAgICAg YnJlYWs7CisKKyAgICAgICAgICAgICAgY2FzZSBLUkJfSV9QRDogICAgICAgICAgICAvKiAvUE9T VERBVEU6PHRpbWVzdGFtcD4gKi8KKyAgICAgICAgICAgICAgICBpZiAocHZbbl0uc3ZhbCkgewor ICAgICAgICAgICAgICAgICAgICBmcmVlKHB2W25dLnN2YWwpOworICAgICAgICAgICAgICAgICAg ICBwdltuXS5zdmFsID0gTlVMTDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg aWYgKCFnZXR2YWwpIGJyZWFrOworICAgICAgICAgICAgICAgIGlmICgocmMgPSBjbWRhdGUoImRh dGUtdGltZSIsIiIsJnMsMCx4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICAgICAgICAgIGdvdG8g a2VyYng7CisgICAgICAgICAgICAgICAgbWFrZXN0cigmKHB2W25dLnN2YWwpLHMpOworICAgICAg ICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGNhc2UgS1JCX0lfU1I6ICAgICAgICAg ICAgLyogL1NFUlZJQ0U6PG5hbWU+ICovCisgICAgICAgICAgICAgICAgaWYgKHB2W25dLnN2YWwp IHsKKyAgICAgICAgICAgICAgICAgICAgZnJlZShwdltuXS5zdmFsKTsKKyAgICAgICAgICAgICAg ICAgICAgcHZbbl0uc3ZhbCA9IE5VTEw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg ICAgIGlmICghZ2V0dmFsKSBicmVhazsKKyAgICAgICAgICAgICAgICBpZiAoKHJjID0gY21mbGQo IlNlcnZpY2UtbmFtZSIsIiIsJnMseHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgICAgICAgICBn b3RvIGtlcmJ4OworICAgICAgICAgICAgICAgIG1ha2VzdHIoJihwdltuXS5zdmFsKSxzKTsKKyAg ICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBjYXNlIEtSQl9JX1JMOiAgICAg ICAgICAgIC8qIC9SRUFMTTo8bmFtZT4gKi8KKyAgICAgICAgICAgICAgICBpZiAocHZbbl0uc3Zh bCkgeworICAgICAgICAgICAgICAgICAgICBmcmVlKHB2W25dLnN2YWwpOworICAgICAgICAgICAg ICAgICAgICBwdltuXS5zdmFsID0gTlVMTDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgICAgaWYgKCFnZXR2YWwpIGJyZWFrOworICAgICAgICAgICAgICAgIGlmIChrdiA9PSA0KQor ICAgICAgICAgICAgICAgICAgcCA9IGtyYjRfZF9yZWFsbSA/IGtyYjRfZF9yZWFsbSA6ICIiOwor ICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgIHAgPSBrcmI1X2RfcmVhbG0g PyBrcmI1X2RfcmVhbG0gOiAiIjsKKyAgICAgICAgICAgICAgICBpZiAoKHJjID0gY21mbGQoIlJl YWxtIixwLCZzLHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgICAgICAgICAgZ290byBrZXJieDsK KyAgICAgICAgICAgICAgICBtYWtlc3RyKCYocHZbbl0uc3ZhbCkscyk7CisgICAgICAgICAgICAg ICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgY2FzZSBLUkJfSV9JTjogICAgICAgICAgICAvKiAv SU5TVEFOQ0U6PG5hbWU+ICovCisgICAgICAgICAgICAgICAgaWYgKHB2W25dLnN2YWwpIHsKKyAg ICAgICAgICAgICAgICAgICAgZnJlZShwdltuXS5zdmFsKTsKKyAgICAgICAgICAgICAgICAgICAg cHZbbl0uc3ZhbCA9IE5VTEw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlm ICghZ2V0dmFsKSBicmVhazsKKyAgICAgICAgICAgICAgICBpZiAoa3YgPT0gNCkKKyAgICAgICAg ICAgICAgICAgICAgcCA9IGtyYjRfZF9pbnN0YW5jZSA/IGtyYjRfZF9pbnN0YW5jZSA6ICIiOwor ICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcCA9IGtyYjVfZF9pbnN0 YW5jZSA/IGtyYjVfZF9pbnN0YW5jZSA6ICIiOworICAgICAgICAgICAgICAgIGlmICgocmMgPSBj bWZsZCgiSW5zdGFuY2UiLHAsJnMseHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgICAgICAgICBn b3RvIGtlcmJ4OworICAgICAgICAgICAgICAgIG1ha2VzdHIoJihwdltuXS5zdmFsKSxzKTsKKyAg ICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBjYXNlIEtSQl9JX1BXOiAgICAg ICAgICAgIC8qIC9QQVNTV09SRDo8cGFzc3dvcmQ+ICovCisgICAgICAgICAgICAgICAgZGVib2sg PSAwOworICAgICAgICAgICAgICAgIGlmIChwdltuXS5zdmFsKSB7CisgICAgICAgICAgICAgICAg ICAgIGZyZWUocHZbbl0uc3ZhbCk7CisgICAgICAgICAgICAgICAgICAgIHB2W25dLnN2YWwgPSBO VUxMOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIWdldHZhbCkgYnJl YWs7CisgICAgICAgICAgICAgICAgaWYgKChyYyA9IGNtZmxkKCJQYXNzd29yZCIsIiIsJnMseHhz dHJpbmcpKSA8IDApCisgICAgICAgICAgICAgICAgICBpZiAocmMgIT0gLTMpCisgICAgICAgICAg ICAgICAgICAgIGdvdG8ga2VyYng7CisgICAgICAgICAgICAgICAgbWFrZXN0cigmKHB2W25dLnN2 YWwpLHMpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGNhc2UgS1JC X0lfQURSOiAgICAgICAgICAgLyogL0FERFJFU1NFUzp7PGFkZHJlc3MtbGlzdD59ICovCisgICAg ICAgICAgICAgICAgaWYgKHB2W25dLnN2YWwpIHsKKyAgICAgICAgICAgICAgICAgICAgZnJlZShw dltuXS5zdmFsKTsKKyAgICAgICAgICAgICAgICAgICAgcHZbbl0uc3ZhbCA9IE5VTEw7CisgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICghZ2V0dmFsKSBicmVhazsKKyAgICAg ICAgICAgICAgICBpZiAoKHJjID0gY21mbGQoIkxpc3Qgb2YgSVAgYWRkcmVzc2VzIiwiIiwmcyx4 eHN0cmluZykpIDwgMCkKKyAgICAgICAgICAgICAgICAgIGdvdG8ga2VyYng7CisgICAgICAgICAg ICAgICAgbWFrZWxpc3Qocyx0bXBhZGRycyxLUkI1X05VTV9PRl9BRERSUyk7CisgICAgICAgICAg ICAgICAgZm9yIChpID0gMDsgaSA8IEtSQjVfTlVNX09GX0FERFJTICYmIHRtcGFkZHJzW2ldOyBp KyspIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGluZXRfYWRkcih0bXBhZGRyc1tpXSkgPT0g MHhmZmZmZmZmZikgeworICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJpbnZhbGlkIGlw IGFkZHJlc3M6ICVzXG4iLHRtcGFkZHJzW2ldKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJj ID0gLTk7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGtlcmJ4OworICAgICAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHB2W0tSQl9JX05B RF0uaXZhbCA9IDA7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgZGVm YXVsdDoKKyAgICAgICAgICAgICAgICBwcmludGYoIj9VbmV4cGVjdGVkIHN3aXRjaCB2YWx1ZSAt IGludGVybmFsIGVycm9yXG4iKTsKKyAgICAgICAgICAgICAgICByYyA9IC05OworICAgICAgICAg ICAgICAgIGdvdG8ga2VyYng7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYg KGNtcmVzdWx0LmZjb2RlICE9IF9DTUZMRCkgeworICAgICAgICAgICAgcHJpbnRmKCI/VW5leGVj dGVkIHJlc3VsdCAtIGludGVybmFsIGVycm9yXG4iKTsKKyAgICAgICAgICAgIHJjID0gLTk7Cisg ICAgICAgICAgICBnb3RvIGtlcmJ4OworICAgICAgICB9CisgICAgICAgIC8qIGNtcmVzdWx0LnNy ZXN1bHQgbWF5IGJlIG9mIHRoZSBmb3JtIFBSSU5DSVBBTEBSRUFMTSAqLworICAgICAgICBpID0g Y2tpbmRleCgiQCIsY21yZXN1bHQuc3Jlc3VsdCwwLDAsMCk7CisgICAgICAgIGlmIChpICE9IDAp IHsKKyAgICAgICAgICAgIG1ha2VzdHIoJnRtcHJlYWxtLCZjbXJlc3VsdC5zcmVzdWx0W2ldKTsK KyAgICAgICAgICAgIGNtcmVzdWx0LnNyZXN1bHRbaS0xXSA9ICdcMCc7CisgICAgICAgIH0KKyAg ICAgICAgbWFrZXN0cigmdG1wcHJpbnosY21yZXN1bHQuc3Jlc3VsdCk7IC8qIFByaW5jaXBhbCAo dXNlcikgKi8KKworICAgICAgICBpZiAoKHJjID0gY21jZm0oKSkgPCAwKSB7ICAgICAgIC8qIE5v dyBnZXQgY29uZmlybWF0aW9uICovCisgICAgICAgICAgICBpZiAocmMgPT0gLTMpIHsKKyAgICAg ICAgICAgICAgICBwcmludGYoIj9QcmluY2lwYWwgbmFtZSByZXF1aXJlZFxuIik7CisgICAgICAg ICAgICB9CisgICAgICAgICAgICBnb3RvIGtlcmJ4OworICAgICAgICB9CisgICAgICAgIGlmICgh dG1wcHJpbnogfHwgIXRtcHByaW56WzBdKSB7CisgICAgICAgICAgICBwcmludGYoIj9QcmluY2lw YWwgbmFtZSByZXF1aXJlZFxuIik7CisgICAgICAgICAgICBnb3RvIGtlcmJ4OworICAgICAgICB9 CisgICAgICAgIGlmICghcHZbS1JCX0lfUk5dLml2YWwgJiYgIXB2W0tSQl9JX1ZBXS5pdmFsKSB7 CisgICAgICAgICAgICAvKiBEb24ndCB1c2UgYSBwYXNzd29yZCBpZiBWYWxpZGF0aW5nIG9yIFJl bmV3aW5nICovCisgICAgICAgICAgICBpZiAocHZbS1JCX0lfUFddLnN2YWwpIHsgICAgLyogSWYg dGhleSBnYXZlIGEgL1BBU1NXT1JEIHN3aXRjaCAqLworICAgICAgICAgICAgICAgIG1ha2VzdHIo JnRtcHBzd2QscHZbS1JCX0lfUFddLnN2YWwpOyAvKiB1c2UgdGhpcyB2YWx1ZSAqLworICAgICAg ICAgICAgfQorI2lmZGVmIENPTU1FTlQKKyAgICAgICAgICAgIC8qIFBhc3N3b3JkIHByb21wdGlu ZyBoYXMgYmVlbiBtb3ZlZCB0byBja19rcmJbNDVdX2luaXRUR1QoKSAqLworICAgICAgICAgICAg ZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgIC8qIE90aGVyd2lzZSBtdXN0IHByb21wdCBmb3Ig aXQgKi8KKyAgICAgICAgICAgICAgICBjaGFyIHBybXB0WzgwXTsKKyAgICAgICAgICAgICAgICBp ZiAocHZbS1JCX0lfUkxdLnN2YWwpCisgICAgICAgICAgICAgICAgICBzcHJpbnRmKHBybXB0LCIl c0AlcydzIFBhc3N3b3JkOiAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICB0bXBwcmlueixw dltLUkJfSV9STF0uc3ZhbCk7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAodG1wcmVhbG0pCisg ICAgICAgICAgICAgICAgICBzcHJpbnRmKHBybXB0LCIlc0AlcydzIFBhc3N3b3JkOiAiLAorICAg ICAgICAgICAgICAgICAgICAgICAgICB0bXBwcmlueix0bXByZWFsbSk7CisgICAgICAgICAgICAg ICAgZWxzZQorICAgICAgICAgICAgICAgICAgc3ByaW50Zihwcm1wdCwiJXMncyBQYXNzd29yZDog Iix0bXBwcmlueik7CisjaWZkZWYgT1MyCisgICAgICAgICAgICAgICAgaWYgKHB2W0tSQl9JX1BP UF0uaXZhbCkgeworICAgICAgICAgICAgICAgICAgICBjaGFyIHBhc3N3ZFs4MF09IiI7CisgICAg ICAgICAgICAgICAgICAgIHJlYWRwYXNzKHBybXB0LHBhc3N3ZCw4MCk7CisgICAgICAgICAgICAg ICAgICAgIG1ha2VzdHIoJnRtcHBzd2QscGFzc3dkKTsKKyAgICAgICAgICAgICAgICAgICAgbWVt c2V0KHBhc3N3ZCwwLDgwKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyNlbmRpZiAvKiBPUzIg Ki8KKyAgICAgICAgICAgICAgICB7CisjaWZkZWYgQ0tfUkVDQUxMCisgICAgICAgICAgICAgICAg ICAgIG9uX3JlY2FsbCA9IDA7CisjZW5kaWYgLyogQ0tfUkVDQUxMICovCisgICAgICAgICAgICAg ICAgICAgIGNtc2F2cChwc2F2ZSxQUk9NUFRMKTsgLyogU2F2ZSBvbGQgcHJvbXB0ICovCisgICAg ICAgICAgICAgICAgICAgIGNtc2V0cChwcm1wdCk7ICAgICAgLyogTWFrZSBuZXcgcHJvbXB0ICov CisgICAgICAgICAgICAgICAgICAgIGNvbmNiKChjaGFyKWVzY2FwZSk7IC8qIFB1dCBjb25zb2xl IGluIGNicmVhayBtb2RlICovCisgICAgICAgICAgICAgICAgICAgIGNtaW5pKDApOyAgICAgICAg ICAgLyogYW5kIG5vLWVjaG8gbW9kZSAqLworICAgICAgICAgICAgICAgICAgICAvKiBJc3N1ZSBw cm9tcHQgaWYgYXQgdG9wIGxldmVsICovCisgICAgICAgICAgICAgICAgICAgIGlmIChwZmxhZykg cHJvbXB0KHh4c3RyaW5nKTsKKyAgICAgICAgICAgICAgICAgICAgY21yZXMoKTsgICAgICAgICAg ICAvKiBSZXNldCB0aGUgcGFyc2VyICovCisgICAgICAgICAgICAgICAgICAgIGZvciAocmMgPSAt MTsgcmMgPCAwOyApIHsgLyogUHJvbXB0IHRpbGwgdGhleSBhbnN3ZXIgKi8KKyAgICAgICAgICAg ICAgICAgICAgICAgIC8qIEdldCBhIGxpdGVyYWwgbGluZSBvZiB0ZXh0ICovCisgICAgICAgICAg ICAgICAgICAgICAgICByYyA9IGNtdHh0KCIiLCIiLCZzLE5VTEwpOworICAgICAgICAgICAgICAg ICAgICAgICAgY21yZXMoKTsgICAgICAgIC8qIFJlc2V0IHRoZSBwYXJzZXIgYWdhaW4gKi8KKyAg ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBtYWtlc3RyKCZ0bXBwc3dk LHMpOworICAgICAgICAgICAgICAgICAgICBwcmludGYoIlxuIik7ICAgICAgIC8qIEVjaG8gYSBD UkxGICovCisgICAgICAgICAgICAgICAgICAgIGNtc2V0cChwc2F2ZSk7ICAgICAgLyogUmVzdG9y ZSBvcmlnaW5hbCBwcm9tcHQgKi8KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg ICAgICAgICAgICB4ID0gMDsgICAgICAgICAgICAgICAgICAgICAgLyogQ2hlY2sgZm9yIHBhc3N3 b3JkICovCisgICAgICAgICAgICBpZiAodG1wcHN3ZCkKKyAgICAgICAgICAgICAgaWYgKCp0bXBw c3dkKQorICAgICAgICAgICAgICAgIHggPSAxOworICAgICAgICAgICAgaWYgKCF4KSB7CisgICAg ICAgICAgICAgICAgcHJpbnRmKCI/UGFzc3dvcmQgcmVxdWlyZWRcbiIpOworICAgICAgICAgICAg ICAgIGdvdG8ga2VyYng7CisgICAgICAgICAgICB9CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAg ICAgICB9CisgICAgfSBlbHNlIGlmIChrdiA9PSA1ICYmIHRtcF9hY3Rpb24gPT0gS1JCX0FfTEMp IHsgLyogTElTVC1DUkVERU5USUFMUyAqLworICAgICAgICB0bXBfa2xjID0gMDsKKyAgICAgICAg d2hpbGUgKDEpIHsKKyAgICAgICAgICAgIGlmICgoeCA9IGNta2V5KGtsY3RhYixua2xjdGFiLCJT d2l0Y2giLCIiLHh4c3RyaW5nKSkgPCAwKSB7CisgICAgICAgICAgICAgICAgaWYgKHggPT0gLTMp IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKChyYyA9IGNtY2ZtKCkpIDwgMCkKKyAgICAgICAg ICAgICAgICAgICAgICBnb3RvIGtlcmJ4OworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAg ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg ICAgICAgICAgICAgICAgcmMgPSB4OworICAgICAgICAgICAgICAgICAgICBnb3RvIGtlcmJ4Owor ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRtcF9rbGMgfD0g eDsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoKHJjID0gY21jZm0oKSkgPCAwKSAgICAgIC8q IERFU1RST1ksIGp1c3QgY29uZmlybSAqLworICAgICAgICBnb3RvIGtlcmJ4OworCisvKiBEb25l IC0gTW92ZSBjb25maXJtZWQgZGF0YSB0byBmaW5hbCBsb2NhdGlvbnMgKi8KKworICAgIGtyYl9h Y3Rpb24gPSB0bXBfYWN0aW9uOyAgICAgICAgICAgIC8qIEFjdGlvbiByZXF1ZXN0ZWQgKi8KKyAg ICBrcmJfb3AudmVyc2lvbiA9IGt2OyAgICAgICAgICAgICAgICAvKiBLZXJiZXJvcyB2ZXJzaW9u ICovCisgICAga3JiX29wLmNhY2hlID0gdG1wY2FjaGU7ICAgICAgICAgICAgLyogQ2FjaGUgZmls ZSAqLworICAgIHRtcGNhY2hlID0gTlVMTDsgICAgICAgICAgICAgICAgICAgIC8qIFNvIHdlIGRv bid0IGZyZWUgaXQgKi8KKworICAgIHN3aXRjaCAoa3JiX2FjdGlvbikgeworICAgICAgY2FzZSBL UkJfQV9JTjogICAgICAgICAgICAgICAgICAgIC8qIElOSVRJQUxJWkUgKi8KKyAgICAgICAgaWYg KGt2ID09IDUpIHsKKyAgICAgICAgICAgIGtyYjVfaW5pdC5mb3J3YXJkYWJsZSA9IHB2W0tSQl9J X0ZXXS5pdmFsOworICAgICAgICAgICAga3JiNV9pbml0LnByb3hpYWJsZSAgID0gcHZbS1JCX0lf UFJdLml2YWw7CisgICAgICAgICAgICBrcmI1X2luaXQubGlmZXRpbWUgICAgPSBwdltLUkJfSV9M Rl0uaXZhbDsKKyAgICAgICAgICAgIGtyYjVfaW5pdC5yZW5ldyAgICAgICA9IHB2W0tSQl9JX1JO XS5pdmFsOworICAgICAgICAgICAga3JiNV9pbml0LnJlbmV3YWJsZSAgID0gcHZbS1JCX0lfUkJd Lml2YWw7CisgICAgICAgICAgICBrcmI1X2luaXQudmFsaWRhdGUgICAgPSBwdltLUkJfSV9WQV0u aXZhbDsKKworICAgICAgICAgICAgLyogSGVyZSB3ZSBqdXN0IHJlYXNzaWduIHRoZSBwb2ludGVy cyBhbmQgdGhlbiBzZXQgdGhlbSB0byBOVUxMICovCisgICAgICAgICAgICAvKiBzbyB0aGV5IHdv bid0IGJlIGZyZWVkIGJlbG93LiAqLworCisgICAgICAgICAgICBrcmI1X2luaXQucG9zdGRhdGUg PSBwdltLUkJfSV9QRF0uc3ZhbDsgcHZbS1JCX0lfUERdLnN2YWwgPSBOVUxMOworICAgICAgICAg ICAga3JiNV9pbml0LnNlcnZpY2UgID0gcHZbS1JCX0lfU1JdLnN2YWw7IHB2W0tSQl9JX1NSXS5z dmFsID0gTlVMTDsKKyAgICAgICAgICAgIGlmIChwdltLUkJfSV9STF0uc3ZhbCkgeworICAgICAg ICAgICAgICAgIGtyYjVfaW5pdC5yZWFsbSAgPSBwdltLUkJfSV9STF0uc3ZhbDsgcHZbS1JCX0lf UkxdLnN2YWwgPSBOVUxMOworICAgICAgICAgICAgfSBlbHNlIGlmICh0bXByZWFsbSkgeworICAg ICAgICAgICAgICAgIGtyYjVfaW5pdC5yZWFsbSA9IHRtcHJlYWxtOyB0bXByZWFsbSA9IE5VTEw7 CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocHZbS1JCX0lfSU5dLnN2YWwpIHsKKyAg ICAgICAgICAgICAgICBrcmI1X2luaXQuaW5zdGFuY2UgPSBwdltLUkJfSV9JTl0uc3ZhbDsKKyAg ICAgICAgICAgICAgICBwdltLUkJfSV9JTl0uc3ZhbCA9IE5VTEw7CisgICAgICAgICAgICB9IGVs c2UgaWYgKCB0bXBpbnN0ICkgeworICAgICAgICAgICAgICAgIGtyYjVfaW5pdC5pbnN0YW5jZSA9 IHRtcGluc3Q7CisgICAgICAgICAgICAgICAgdG1waW5zdCA9IE5VTEw7CisgICAgICAgICAgICB9 CisgICAgICAgICAgICBpZiAodG1wcHJpbnopIHsKKyAgICAgICAgICAgICAgICBrcmI1X2luaXQu cHJpbmNpcGFsID0gdG1wcHJpbno7CisgICAgICAgICAgICAgICAgdG1wcHJpbnogPSBOVUxMOwor ICAgICAgICAgICAgfQorICAgICAgICAgICAga3JiNV9pbml0LnBhc3N3b3JkID0gdG1wcHN3ZDsK KyAgICAgICAgICAgIHRtcHBzd2QgPSBOVUxMOworCisgICAgICAgICAgICBrcmI1X2luaXQuZ2V0 azQgPSBwdltLUkJfSV9LNF0uaXZhbDsKKyAgICAgICAgICAgIGlmIChrcmI1X2luaXQuZ2V0azQp IHsKKyAgICAgICAgICAgICAgICBrcmI0X2luaXQubGlmZXRpbWUgPSBwdltLUkJfSV9MRl0uaXZh bDsKKyAgICAgICAgICAgICAgICBpZiAoa3JiNV9pbml0LnJlYWxtKQorICAgICAgICAgICAgICAg ICAgICBtYWtlc3RyKCZrcmI0X2luaXQucmVhbG0sa3JiNV9pbml0LnJlYWxtKTsKKyAgICAgICAg ICAgICAgICBrcmI0X2luaXQucHJlYXV0aCAgPSBrcmI0X2RfcHJlYXV0aDsKKyAgICAgICAgICAg ICAgICBrcmI0X2luaXQudmVyYm9zZSAgPSBwdltLUkJfSV9CUl0uaXZhbCA/IDAgOiAxOworICAg ICAgICAgICAgICAgIGlmIChrcmI1X2luaXQucHJpbmNpcGFsKQorICAgICAgICAgICAgICAgICAg ICBtYWtlc3RyKCZrcmI0X2luaXQucHJpbmNpcGFsLGtyYjVfaW5pdC5wcmluY2lwYWwpOworICAg ICAgICAgICAgICAgIGlmIChrcmI1X2luaXQucHJpbmNpcGFsKQorICAgICAgICAgICAgICAgICAg ICBtYWtlc3RyKCZrcmI0X2luaXQucGFzc3dvcmQsa3JiNV9pbml0LnBhc3N3b3JkKTsKKyAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIGtyYjVfaW5pdC5ub19hZGRyZXNzZXMgPSBwdltLUkJfSV9O QURdLml2YWw7CisgICAgICAgICAgICBpZiAodG1wYWRkcnNbMF0pIHsKKyAgICAgICAgICAgICAg ICBmb3IgKGkgPSAwOyBpIDwgS1JCNV9OVU1fT0ZfQUREUlM7IGkrKykgeworICAgICAgICAgICAg ICAgICAgICBpZiAoa3JiNV9pbml0LmFkZHJzW2ldKSB7CisgICAgICAgICAgICAgICAgICAgICAg ICBmcmVlKGtyYjVfaW5pdC5hZGRyc1tpXSk7CisgICAgICAgICAgICAgICAgICAgICAgICBrcmI1 X2luaXQuYWRkcnNbaV0gPSBOVUxMOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgICAgICAgIGtyYjVfaW5pdC5hZGRyc1tpXSA9IHRtcGFkZHJzW2ldOworICAgICAgICAgICAg ICAgICAgICB0bXBhZGRyc1tpXSA9IE5VTEw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgfQorICAgICAgICB9IGVsc2UgaWYgKGt2ID09IDQpIHsgICAgICAgICAgIC8qIFNhbWUgZGVh bCBmb3IgS2VyYmVyb3MgNCAqLworICAgICAgICAgICAga3JiNF9pbml0LmxpZmV0aW1lID0gcHZb S1JCX0lfTEZdLml2YWw7CisgICAgICAgICAgICBpZiAocHZbS1JCX0lfUkxdLnN2YWwpIHsKKyAg ICAgICAgICAgICAgICBrcmI0X2luaXQucmVhbG0gID0gcHZbS1JCX0lfUkxdLnN2YWw7CisgICAg ICAgICAgICAgICAgcHZbS1JCX0lfUkxdLnN2YWwgPSBOVUxMOworICAgICAgICAgICAgfSBlbHNl IGlmICggdG1wcmVhbG0gKSB7CisgICAgICAgICAgICAgICAga3JiNF9pbml0LnJlYWxtICA9IHRt cHJlYWxtOworICAgICAgICAgICAgICAgIHRtcHJlYWxtID0gTlVMTDsKKyAgICAgICAgICAgIH0K KyAgICAgICAgICAgIGlmIChwdltLUkJfSV9JTl0uc3ZhbCkgeworICAgICAgICAgICAgICAgIGty YjRfaW5pdC5pbnN0YW5jZSA9IHB2W0tSQl9JX0lOXS5zdmFsOworICAgICAgICAgICAgICAgIHB2 W0tSQl9JX0lOXS5zdmFsID0gTlVMTDsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoIHRtcGluc3Qg KSB7CisgICAgICAgICAgICAgICAga3JiNF9pbml0Lmluc3RhbmNlID0gdG1waW5zdDsKKyAgICAg ICAgICAgICAgICB0bXBpbnN0ID0gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGty YjRfaW5pdC5wcmVhdXRoICA9IHB2W0tSQl9JX1BBXS5pdmFsOworICAgICAgICAgICAga3JiNF9p bml0LnZlcmJvc2UgID0gcHZbS1JCX0lfQlJdLml2YWwgPyAwIDogMTsKKworICAgICAgICAgICAg aWYgKHRtcHByaW56KSB7CisgICAgICAgICAgICAgICAga3JiNF9pbml0LnByaW5jaXBhbCA9IHRt cHByaW56OworICAgICAgICAgICAgICAgIHRtcHByaW56ID0gTlVMTDsKKyAgICAgICAgICAgIH0K KyAgICAgICAgICAgIGtyYjRfaW5pdC5wYXNzd29yZCA9IHRtcHBzd2Q7CisgICAgICAgICAgICB0 bXBwc3dkID0gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgS1JC X0FfTEM6ICAgICAgICAgICAgICAgICAgICAvKiBMaXN0IENyZWRlbnRpYWxzICovCisgICAgICAg IGtyYjVfbGMuZW5jcnlwdGlvbiA9IHRtcF9rbGMgJiBYWUtMQ0VOOworICAgICAgICBrcmI1X2xj LmZsYWdzID0gdG1wX2tsYyAmIFhZS0xDRkw7CisgICAgICAgIGtyYjVfbGMuYWRkciAgPSB0bXBf a2xjICYgWFlLTENBRDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisvKiBDb21tb24gZXhpdCAt IEZyZWUgdGVtcG9yYXJ5IHN0b3JhZ2UgKi8KKworICBrZXJieDoKKyAgICBmb3IgKGkgPSAwOyBp IDw9IEtSQl9JX01BWDsgaSsrKSB7ICAvKiBGcmVlIG1hbGxvYydkIHN3aXRjaCBkYXRhICovCisg ICAgICAgIGlmIChwdltpXS5zdmFsKQorICAgICAgICAgIGZyZWUocHZbaV0uc3ZhbCk7CisgICAg fQorICAgIGZvciAoaSA9IDA7IGkgPCBLUkI1X05VTV9PRl9BRERSUzsgaSsrKSB7CisgICAgICAg IGlmICh0bXBhZGRyc1tpXSkKKyAgICAgICAgICBmcmVlKHRtcGFkZHJzW2ldKTsKKyAgICB9Cisg ICAgaWYgKHRtcHByaW56KSBmcmVlKHRtcHByaW56KTsgICAgICAgLyogQW5kIHRoZXNlIHRvby4g Ki8KKyAgICBpZiAodG1wcHN3ZCkgIGZyZWUodG1wcHN3ZCk7CisgICAgaWYgKHRtcGNhY2hlKSBm cmVlKHRtcGNhY2hlKTsKKyAgICBpZiAodG1wcmVhbG0pIGZyZWUodG1wcmVhbG0pOworICAgIGlm ICh0bXBpbnN0KSAgZnJlZSh0bXBpbnN0KTsKKworICAgIHJldHVybihyYyk7ICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIFJldHVybiB0aGUgcmV0dXJuIGNvZGUgKi8KK30KKyNlbmRpZiAvKiBD S19LRVJCRVJPUyAqLworCisjaWZkZWYgQ0tfTE9HSU4KK2ludAorI2lmZGVmIENLX0FOU0lDCitj a3hsb2dpbihDSEFSICogdXNlcmlkLCBDSEFSICogcGFzc3dkLCBDSEFSICogYWNjdCwgaW50IHBy b21wdG9rKQorI2Vsc2UgLyogQ0tfQU5TSUMgKi8KK2NreGxvZ2luKHVzZXJpZCwgcGFzc3dkLCBh Y2N0LCBwcm9tcHRvaykKKyAgQ0hBUiAqIHVzZXJpZDsgQ0hBUiAqIHBhc3N3ZDsgQ0hBUiAqIGFj Y3Q7IGludCBwcm9tcHRvazsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogY2t4bG9naW4gKi8g eworI2lmZGVmIENLX1JFQ0FMTAorICAgIGV4dGVybiBpbnQgb25fcmVjYWxsOyAgICAgICAgICAg ICAgIC8qIGFyb3VuZCBQYXNzd29yZCBwcm9tcHRpbmcgKi8KKyNlbmRpZiAvKiBDS19SRUNBTEwg Ki8KKyNpZmRlZiBDT01NRU5UCisgICAgZXh0ZXJuIGludCBndWVzdDsKKyNlbmRpZiAvKiBDT01N RU5UICovCisgICAgaW50IHJwcm9tcHQgPSAwOyAgICAgICAgICAgICAgICAgICAgLyogUmVzdG9y ZSBwcm9tcHQgKi8KKyNpZmRlZiBDS1NZU0xPRworICAgIGludCBzYXZsb2c7CisjZW5kaWYgLyog Q0tTWVNMT0cgKi8KKworICAgIGV4dGVybiBpbnQgd2hhdCwgc3J2Y2Rtc2c7CisKKyAgICBpbnQg eCA9IDAsIG9rID0gMCwgcmMgPSAwOworICAgIENIQVIgKiBfdSA9IE5VTEwsICogX3AgPSBOVUxM LCAqIF9hID0gTlVMTDsKKworICAgIGRlYnVnKEYxMTEsImNreGxvZ2luIHVzZXJpZCIsdXNlcmlk LHByb21wdG9rKTsKKyAgICBkZWJ1ZyhGMTEwLCJja3hsb2dpbiBwYXNzd2QiLHBhc3N3ZCwwKTsK KworICAgIGlzZ3Vlc3QgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEdsb2JhbCAiYW5v bnltb3VzIiBmbGFnICovCisKKyAgICBpZiAoIXVzZXJpZCkgdXNlcmlkID0gKENIQVIgKikiIjsK KyAgICBpZiAoIXBhc3N3ZCkgcGFzc3dkID0gKENIQVIgKikiIjsKKworICAgIGRlYnVnKEYxMTEs ImNreGxvZ2luIHVzZXJpZCIsdXNlcmlkLHdoYXQpOworCisjaWZkZWYgQ0tfUkVDQUxMCisgICAg b25fcmVjYWxsID0gMDsKKyNlbmRpZiAvKiBDS19SRUNBTEwgKi8KKworI2lmZGVmIENLU1lTTE9H CisgICAgc2F2bG9nID0gY2t4c3lzbG9nOyAgICAgICAgICAgICAgICAgLyogU2F2ZSBhbmQgdHVy biBvZmYgc3lzbG9nZ2luZyAqLworI2VuZGlmIC8qIENLU1lTTE9HICovCisKKyAgICBpZiAoKCEq dXNlcmlkIHx8ICEqcGFzc3dkKSAmJiAgICAgICAvKiBOZWVkIHRvIHByb21wdCBmb3IgbWlzc2lu ZyBpbmZvICovCisgICAgICAgIHByb21wdG9rKSB7CisgICAgICAgIGNtc2F2cChwc2F2ZSxQUk9N UFRMKTsgICAgICAgICAgLyogU2F2ZSBvbGQgcHJvbXB0ICovCisgICAgICAgIGRlYnVnKEYxMTAs ImNreGxvZ2luIHNhdmVkIixwc2F2ZSwwKTsKKyAgICAgICAgcnByb21wdCA9IDE7CisgICAgfQor ICAgIGlmICghKnVzZXJpZCkgeworICAgICAgICBpZiAoIXByb21wdG9rKQorICAgICAgICAgIHJl dHVybigwKTsKKyAgICAgICAgY21zZXRwKCJVc2VybmFtZTogIik7ICAgICAgICAgICAvKiBNYWtl IG5ldyBwcm9tcHQgKi8KKyAgICAgICAgY29uY2IoKGNoYXIpZXNjYXBlKTsgICAgICAgICAgICAv KiBQdXQgY29uc29sZSBpbiBjYnJlYWsgbW9kZSAqLworICAgICAgICBjbWluaSgxKTsKKworLyog Rmx1c2ggdHlwZWFoZWFkICovCisKKyNpZmRlZiBJS1NfT1BUSU9OCisgICAgICAgIGRlYnVnKEYx MDEsCisgICAgICAgICAgICAgICJja3hsb2dpbiBURUxPUFRfU0IoVEVMT1BUX0tFUk1JVCkua2Vy bWl0Lm1lX3N0YXJ0IiwKKyAgICAgICAgICAgICAgIiIsCisgICAgICAgICAgICAgIFRFTE9QVF9T QihURUxPUFRfS0VSTUlUKS5rZXJtaXQubWVfc3RhcnQKKyAgICAgICAgICAgICAgKTsKKyNlbmRp ZiAvKiBJS1NfT1BUSU9OICovCisKKyAgICAgICAgd2hpbGUgKHR0Y2hrKCkgPiAwKSB7CisgICAg ICAgICAgICB4ID0gdHRpbmMoMCk7CisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJja3hsb2dpbiBm bHVzaCB1c2VyIHgiLCIiLHgpOworICAgICAgICAgICAgaWYgKHggPCAwKQorICAgICAgICAgICAg ICBkb2V4aXQoR09PRF9FWElULDApOyAgICAgIC8qIENvbm5lY3Rpb24gbG9zdCAqLworI2lmZGVm IFROQ09ERQorICAgICAgICAgICAgaWYgKHNzdGVsbmV0KSB7CisgICAgICAgICAgICAgICAgaWYg KHggPT0gSUFDKSB7CisgICAgICAgICAgICAgICAgICAgIHggPSB0bl9kb29wKChDSEFSKSh4ICYg MHhmZiksY2t4ZWNoLHR0aW5jKTsKKyAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEwMSwiY2t4 bG9naW4gdXNlciB0bl9kb29wIiwiIix4KTsKKyNpZmRlZiBJS1NfT1BUSU9OCisgICAgICAgICAg ICAgICAgICAgIGRlYnVnKEYxMDEsCisgICAgICAgICAgICAgICAgICAgICAgImNreGxvZ2luIHVz ZXIgVEVMT1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1pdC5tZV9zdGFydCIsCisgICAgICAgICAg ICAgICAgICAgICAgIiIsCisgICAgICAgICAgICAgICAgICAgICAgVEVMT1BUX1NCKFRFTE9QVF9L RVJNSVQpLmtlcm1pdC5tZV9zdGFydAorICAgICAgICAgICAgICAgICAgICAgICk7CisjZW5kaWYg LyogSUtTX09QVElPTiAqLworCisgICAgICAgICAgICAgICAgICAgIGlmICh4IDwgMCkKKyAgICAg ICAgICAgICAgICAgICAgICBnb3RvIFhDS1hMT0c7CisgICAgICAgICAgICAgICAgICAgIHN3aXRj aCAoeCkgeworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTogY2t4ZWNoID0gMTsgYnJlYWs7 IC8qIFR1cm4gb24gZWNob2luZyAqLworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjogY2t4 ZWNoID0gMDsgYnJlYWs7IC8qIFR1cm4gb2ZmIGVjaG9pbmcgKi8KKyNpZmRlZiBJS1NfT1BUSU9O CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiAgICAgICAgICAgICAgICAgICAgLyogSUtT IGV2ZW50ICovCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIVRFTE9QVF9TQihURUxPUFRf S0VSTUlUKS5rZXJtaXQubWVfc3RhcnQpCisgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr OyAgICAgICAgICAgICAgICAgLyogZWxzZSBmYWxsIHRocnUuLi4gKi8KKyNlbmRpZiAvKiBJS1Nf T1BUSU9OICovCisgICAgICAgICAgICAgICAgICAgICAgY2FzZSA2OiAgICAgICAgICAgICAgICAg ICAgLyogTG9nb3V0ICovCisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIFhDS1hMT0c7Cisg ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisj ZW5kaWYgLyogVE5DT0RFICovCisgICAgICAgIH0KKyAgICAgICAgaWYgKHBmbGFnKSBwcm9tcHQo eHhzdHJpbmcpOyAgICAvKiBJc3N1ZSBwcm9tcHQgaWYgYXQgdG9wIGxldmVsICovCisgICAgICAg IGNtcmVzKCk7ICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVzZXQgdGhlIHBhcnNlciAqLwor ICAgICAgICBmb3IgKHggPSAtMTsgeCA8IDA7KSB7ICAgICAgICAgIC8qIFByb21wdCB0aWxsIHRo ZXkgYW5zd2VyICovCisgICAgICAgICAgICAvKiBHZXQgYSBsaXRlcmFsIGxpbmUgb2YgdGV4dCAq LworICAgICAgICAgICAgeD1jbXR4dCgiWW91ciB1c2VybmFtZSwgb3IgXCJmdHBcIiwgb3IgXCJh bm9ueW1vdXNcIiIsIiIsJnMsTlVMTCk7CisgICAgICAgICAgICBpZiAoeCA9PSAtNCB8fCB4ID09 IC0xMCkgeworICAgICAgICAgICAgICAgIHByaW50ZigiXHJcbiVzTG9naW4gY2FuY2VsbGVkXG4i LAorCQkgICAgICAgeCA9PSAtMTAgPyAiVGltZWQgb3V0OiAiIDogIiIpOworI2lmZGVmIENLU1lT TE9HCisgICAgICAgICAgICAgICAgY2t4c3lzbG9nID0gc2F2bG9nOworI2VuZGlmIC8qIENLU1lT TE9HICovCisgICAgICAgICAgICAgICAgZG9leGl0KEdPT0RfRVhJVCwwKTsKKyAgICAgICAgICAg IH0KKyAgICAgICAgICAgIGlmIChzc3RhdGUpICAgICAgICAgICAgICAgICAvKiBEaWQgYSBwYWNr ZXQgY29tZSBpbnN0ZWFkPyAqLworICAgICAgICAgICAgICBnb3RvIFhDS1hMT0c7CisgICAgICAg ICAgICBjbXJlcygpOyAgICAgICAgICAgICAgICAgICAgLyogUmVzZXQgdGhlIHBhcnNlciBhZ2Fp biAqLworICAgICAgICB9CisgICAgICAgIGlmICgoX3UgPSAoQ0hBUiAqKW1hbGxvYygoaW50KXN0 cmxlbihzKSArIDEpKSA9PSBOVUxMKSB7CisgICAgICAgICAgICBwcmludGYoIj9JbnRlcm5hbCBl cnJvcjogbWFsbG9jXG4iKTsKKyAgICAgICAgICAgIGdvdG8gWENLWExPRzsKKyAgICAgICAgfSBl bHNlIHsKKyAgICAgICAgICAgIHN0cmNweSgoY2hhciAqKV91LHMpOyAgICAgICAvKiBzYWZlICov CisgICAgICAgICAgICB1c2VyaWQgPSBfdTsKKyAgICAgICAgfQorICAgIH0KKyAgICBvayA9IHp2 dXNlcigoY2hhciAqKXVzZXJpZCk7ICAgICAgICAvKiBWZXJpZnkgdXNlcm5hbWUgKi8KKyAgICBk ZWJ1ZyhGMTExLCJja3hsb2dpbiB6dnVzZXIiLHVzZXJpZCxvayk7CisKKyAgICBpZiAoISpwYXNz d2QgJiYgcHJvbXB0b2sKKyNpZmRlZiBDT01NRU5UCisgICAgICAgICYmIGd1ZXN0CisjZW5kaWYg LyogQ09NTUVOVCAqLworICAgICAgICApIHsKKyAgICAgICAgY2hhciBwcm1wdFs4MF07CisKKyNp ZmRlZiBDS1NZU0xPRworICAgICAgICBzYXZsb2cgPSBja3hzeXNsb2c7ICAgICAgICAgICAgIC8q IFNhdmUgYW5kIHR1cm4gb2ZmIHN5c2xvZ2dpbmcgKi8KKyAgICAgICAgY2t4c3lzbG9nID0gMDsK KyNlbmRpZiAvKiBDS1NZU0xPRyAqLworCisvKiBGbHVzaCB0eXBlYWhlYWQgYWdhaW4gKi8KKwor ICAgICAgICB3aGlsZSAodHRjaGsoKSA+IDApIHsKKyAgICAgICAgICAgIHggPSB0dGluYygwKTsK KyAgICAgICAgICAgIGRlYnVnKEYxMDEsImNreGxvZ2luIGZsdXNoIHVzZXIgeCIsIiIseCk7Cisj aWZkZWYgVE5DT0RFCisgICAgICAgICAgICBpZiAoc3N0ZWxuZXQpIHsKKyAgICAgICAgICAgICAg ICBpZiAoeCA9PSBJQUMpIHsKKyAgICAgICAgICAgICAgICAgICAgeCA9IHRuX2Rvb3AoKENIQVIp KHggJiAweGZmKSxja3hlY2gsdHRpbmMpOworICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAx LCJja3hsb2dpbiBwYXNzIHRuX2Rvb3AiLCIiLHgpOworI2lmZGVmIElLU19PUFRJT04KKyAgICAg ICAgICAgICAgICAgICAgZGVidWcoRjEwMSwKKyAgICAgICAgICAgICAgICAgICAgICAiY2t4bG9n aW4gcGFzcyBURUxPUFRfU0IoVEVMT1BUX0tFUk1JVCkua2VybWl0Lm1lX3N0YXJ0IiwKKyAgICAg ICAgICAgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgICAgICAgICAgICBURUxPUFRfU0IoVEVM T1BUX0tFUk1JVCkua2VybWl0Lm1lX3N0YXJ0CisgICAgICAgICAgICAgICAgICAgICAgKTsKKyNl bmRpZiAvKiBJS1NfT1BUSU9OICovCisgICAgICAgICAgICAgICAgICAgIGlmICh4IDwgMCkKKyAg ICAgICAgICAgICAgICAgICAgICBnb3RvIFhDS1hMT0c7CisgICAgICAgICAgICAgICAgICAgIHN3 aXRjaCAoeCkgeworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTogY2t4ZWNoID0gMTsgYnJl YWs7IC8qIFR1cm4gb24gZWNob2luZyAqLworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjog Y2t4ZWNoID0gMDsgYnJlYWs7IC8qIFR1cm4gb2ZmIGVjaG9pbmcgKi8KKyAgICAgICAgICAgICAg ICAgICAgICBjYXNlIDQ6ICAgICAgICAgICAgICAgICAgICAvKiBJS1MgZXZlbnQgKi8KKyAgICAg ICAgICAgICAgICAgICAgICAgIGlmICghVEVMT1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1pdC5t ZV9zdGFydCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAg ICAvKiBlbHNlIGZhbGwgdGhydS4uLiAqLworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNjog ICAgICAgICAgICAgICAgICAgIC8qIExvZ291dCAqLworICAgICAgICAgICAgICAgICAgICAgICAg Z290byBYQ0tYTE9HOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgfQorI2VuZGlmIC8qIFROQ09ERSAqLworICAgICAgICB9CisgICAgICAgIGlm ICghc3RyY21wKChjaGFyICopdXNlcmlkLCJhbm9ueW1vdXMiKSB8fAorICAgICAgICAgICAgIXN0 cmNtcCgoY2hhciAqKXVzZXJpZCwiZnRwIikpIHsKKyAgICAgICAgICAgIGlmICghb2spCisgICAg ICAgICAgICAgIGdvdG8gWENLWExPRzsKKyAgICAgICAgICAgIGNrc3RybmNweShwcm1wdCwiRW50 ZXIgZS1tYWlsIGFkZHJlc3MgYXMgUGFzc3dvcmQ6ICIsODApOworICAgICAgICB9IGVsc2UgaWYg KCp1c2VyaWQgJiYgc3RybGVuKChjaGFyICopdXNlcmlkKSA8IDYwKSB7CisjaWZkZWYgTlQKKyAg ICAgICAgICAgIGV4dGVybiBDSEFSICogcFJlZmVyZW5jZURvbWFpbk5hbWU7CisgICAgICAgICAg ICBpZiAocFJlZmVyZW5jZURvbWFpbk5hbWUpCisgICAgICAgICAgICAgIGNrbWFreG1zZyhwcm1w dCwKKyAgICAgICAgICAgICAgICAgICAgICAgODAsCisgICAgICAgICAgICAgICAgICAgICAgICJF bnRlciAiLAorICAgICAgICAgICAgICAgICAgICAgICBwUmVmZXJlbmNlRG9tYWluTmFtZSwKKyAg ICAgICAgICAgICAgICAgICAgICAgIlxcXFwiLAorICAgICAgICAgICAgICAgICAgICAgICB1c2Vy aWQsCisgICAgICAgICAgICAgICAgICAgICAgICIncyBQYXNzd29yZDogIiwKKyAgICAgICAgICAg ICAgICAgICAgICAgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTAorICAgICAgICAg ICAgICAgICAgICAgICApOworICAgICAgICAgICAgZWxzZQorI2VuZGlmIC8qIE5UICovCisgICAg ICAgICAgICAgIGNrbWFrbXNnKHBybXB0LDgwLCJFbnRlciAiLChjaGFyICopdXNlcmlkLCIncyBQ YXNzd29yZDogIixOVUxMKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgY2tzdHJuY3B5KHBy bXB0LCJFbnRlciBQYXNzd29yZDogIiw4MCk7CisgICAgICAgIGNtc2V0cChwcm1wdCk7ICAgICAg ICAgICAgICAgICAgLyogTWFrZSBuZXcgcHJvbXB0ICovCisgICAgICAgIGNvbmNiKChjaGFyKWVz Y2FwZSk7ICAgICAgICAgICAgLyogUHV0IGNvbnNvbGUgaW4gY2JyZWFrIG1vZGUgKi8KKyAgICAg ICAgaWYgKHN0cmNtcCgoY2hhciAqKXVzZXJpZCwiYW5vbnltb3VzIikgJiYKKyAgICAgICAgICAg IHN0cmNtcCgoY2hhciAqKXVzZXJpZCwiZnRwIikpIHsgLyogYW5kIGlmIG5vdCBhbm9ueW1vdXMg Ki8KKyAgICAgICAgICAgIGRlYm9rID0gMDsKKyAgICAgICAgICAgIGNtaW5pKDApOyAgICAgICAg ICAgICAgICAgICAvKiBhbmQgbm8tZWNobyBtb2RlICovCisgICAgICAgIH0gZWxzZSB7CisgICAg ICAgICAgICBjbWluaSgxKTsKKyAgICAgICAgfQorICAgICAgICBpZiAocGZsYWcpIHByb21wdCh4 eHN0cmluZyk7ICAgIC8qIElzc3VlIHByb21wdCBpZiBhdCB0b3AgbGV2ZWwgKi8KKyAgICAgICAg Y21yZXMoKTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXNldCB0aGUgcGFyc2VyICovCisg ICAgICAgIGZvciAoeCA9IC0xOyB4IDwgMDspIHsgICAgICAgICAgLyogUHJvbXB0IHRpbGwgdGhl eSBhbnN3ZXIgKi8KKyNpZmRlZiBDS19QQU0KKwkgICAgZ290ZW1wdHlwYXNzd2Q9MDsKKyNlbmRp ZiAvKiBDS19QQU0gKi8KKyAgICAgICAgICAgIHggPSBjbXR4dCgiIiwiIiwmcyxOVUxMKTsgICAv KiBHZXQgYSBsaXRlcmFsIGxpbmUgb2YgdGV4dCAqLworICAgICAgICAgICAgaWYgKHggPT0gLTQg fHwgeCA9PSAtMTApIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIlxyXG4lc0xvZ2luIGNhbmNl bGxlZFxuIiwKKwkJICAgICAgIHggPT0gLTEwID8gIlRpbWVkIG91dDogIiA6ICIiKTsKKyNpZmRl ZiBDS1NZU0xPRworICAgICAgICAgICAgICAgIGNreHN5c2xvZyA9IHNhdmxvZzsKKyNlbmRpZiAv KiBDS1NZU0xPRyAqLworICAgICAgICAgICAgICAgIGRvZXhpdChHT09EX0VYSVQsMCk7CisgICAg ICAgICAgICB9CisjaWZkZWYgQ0tfUEFNCisJICAgIGlmICghKnMpCisJICAgICAgZ290ZW1wdHlw YXNzd2QgPSAxOworI2VuZGlmIC8qIENLX1BBTSAqLworICAgICAgICAgICAgaWYgKHNzdGF0ZSkg ICAgICAgICAgICAgICAgIC8qIEluIGNhc2Ugb2YgYSBLZXJtaXQgcGFja2V0ICovCisgICAgICAg ICAgICAgIGdvdG8gWENLWExPRzsKKyAgICAgICAgICAgIGNtcmVzKCk7ICAgICAgICAgICAgICAg ICAgICAvKiBSZXNldCB0aGUgcGFyc2VyIGFnYWluICovCisgICAgICAgIH0KKyAgICAgICAgcHJp bnRmKCJcclxuIik7ICAgICAgICAgICAgICAgICAvKiBFY2hvIGEgQ1JMRiAqLworICAgICAgICBp ZiAoKF9wID0gKENIQVIgKiltYWxsb2MoKGludClzdHJsZW4ocykgKyAxKSkgPT0gTlVMTCkgewor ICAgICAgICAgICAgcHJpbnRmKCI/SW50ZXJuYWwgZXJyb3I6IG1hbGxvY1xuIik7CisgICAgICAg ICAgICBnb3RvIFhDS1hMT0c7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzdHJjcHko KGNoYXIgKilfcCxzKTsgICAgICAgLyogc2FmZSAqLworICAgICAgICAgICAgcGFzc3dkID0gX3A7 CisgICAgICAgIH0KKyAgICB9CisjaWZkZWYgQ0tfUEFNCisgICAgZWxzZSB7CisgICAgICAgIGNt cmVzKCk7ICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVzZXQgdGhlIHBhcnNlciAqLworCisg ICAgICAgIC8qIFdlIHJlc3RvcmUgdGhlIHByb21wdCBub3cgYmVjYXVzZSB0aGUgUEFNIGVuZ2lu ZSB3aWxsIGNhbGwgICovCisgICAgICAgIC8qIHJlYWRwYXNzKCkgd2hpY2ggd2lsbCBvdmVyd3Jp dGUgcHNhdmUuICovCisgICAgICAgIGlmIChycHJvbXB0KSB7CisgICAgICAgICAgICBjbXNldHAo cHNhdmUpOyAgICAgICAgICAgICAgLyogUmVzdG9yZSBvcmlnaW5hbCBwcm9tcHQgKi8KKyAgICAg ICAgICAgIGRlYnVnKEYxMTAsImNreGxvZ2luIHJlc3RvcmVkIixwc2F2ZSwwKTsKKyAgICAgICAg ICAgIHJwcm9tcHQgPSAwOworICAgICAgICB9CisgICAgfQorI2VuZGlmIC8qIENLX1BBTSAqLwor CisjaWZkZWYgQ0tTWVNMT0cKKyAgICBja3hzeXNsb2cgPSBzYXZsb2c7CisjZW5kaWYgLyogQ0tT WVNMT0cgKi8KKworICAgIGlmIChvaykgeworICAgICAgICBvayA9IHp2cGFzcygoY2hhciAqKXBh c3N3ZCk7ICAgIC8qIENoZWNrIHBhc3N3b3JkICovCisgICAgICAgIGRlYnVnKEYxMDEsImNreGxv Z2luIHp2cGFzcyIsIiIsb2spOworI2lmZGVmIENLX1BBTQorICAgIH0gZWxzZSB7CisJLyogRmFr ZSBwYW0gcGFzc3dvcmQgZmFpbHVyZSBmb3Igbm9uZXhpc3RlbnQgdXNlcnMgKi8KKwlzbGVlcCgx KTsKKwlwcmludGYoIkF1dGhlbnRpY2F0aW9uIGZhaWx1cmVcbiIpOworI2VuZGlmCS8qIENLX1BB TSAqLworICAgIH0KKworICAgIGlmIChvayA+IDAgJiYgaXNndWVzdCkgeworI2lmbmRlZiBOT1BV U0gKKyAgICAgICAgbm9wdXNoID0gMTsKKyNlbmRpZiAvKiBOT1BVU0ggKi8KKyAgICAgICAgc3J2 Y2Rtc2cgPSAxOworICAgIH0KKyAgICByYyA9IG9rOyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBTZXQgdGhlIHJldHVybiBjb2RlICovCisgICAgaWYgKChjaGFyICopdWlkYnVmICE9IChj aGFyICopdXNlcmlkKQorICAgICAgY2tzdHJuY3B5KHVpZGJ1ZiwoY2hhciAqKXVzZXJpZCxVSURC VUZMRU4pOyAvKiBSZW1lbWJlciB1c2VybmFtZSAqLworCisgIFhDS1hMT0c6ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogQ29tbW9uIGV4aXQgKi8KKyNpZmRlZiBDS1NZU0xPRworICAg IGNreHN5c2xvZyA9IHNhdmxvZzsgICAgICAgICAgICAgICAgIC8qIEluIGNhc2Ugb2YgR09UTyBh Ym92ZSAqLworI2VuZGlmIC8qIENLU1lTTE9HICovCisgICAgaWYgKHJwcm9tcHQpIHsKKyAgICAg ICAgY21zZXRwKHBzYXZlKTsgICAgICAgICAgICAgICAgICAvKiBSZXN0b3JlIG9yaWdpbmFsIHBy b21wdCAqLworICAgICAgICBkZWJ1ZyhGMTEwLCJja3hsb2dpbiByZXN0b3JlZCIscHNhdmUsMCk7 CisgICAgfQorICAgIGlmIChfdSB8fCBfcCB8fCBfYSkgeworICAgICAgICBpZiAoX3UpIGZyZWUo X3UpOworICAgICAgICBpZiAoX3ApIGZyZWUoX3ApOworICAgICAgICBpZiAoX2EpIGZyZWUoX2Ep OworICAgIH0KKyAgICByZXR1cm4ocmMpOworfQorCitpbnQKK2NreGxvZ291dCgpIHsKKyAgICBk b2V4aXQoR09PRF9FWElULDApOyAgICAgICAgICAgICAgICAvKiBkb2V4aXQgY2FsbHMgenZsb2dv dXQgKi8KKyAgICByZXR1cm4oMCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBub3QgcmVh Y2hlZCAqLworfQorI2VuZGlmIC8qIENLX0xPR0lOICovCisKKyNlbmRpZiAvKiBOT0lDUCAqLwoK ZGlmZiAtLWdpdCBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1dXNy LmMgYi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdXVzci5jCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiNzdmZTYKLS0tIC9kZXYvbnVsbAorKysg Yi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdXVzci5jCkBAIC0wLDAg KzEsMTMzNzYgQEAKKyNpZmRlZiBTU0hURVNUCisjZGVmaW5lIFNTSEJVSUxUSU4KKyNlbmRpZiAv KiBTU0hURVNUICovCisKKyNpbmNsdWRlICJja2NzeW0uaCIKK2NoYXIgKnVzZXJ2ID0gIlVzZXIg SW50ZXJmYWNlIDkuMC4yOTksIDkgSnVuIDIwMTEiOworCisvKiAgQyBLIFUgVSBTIFIgLS0gICJV c2VyIEludGVyZmFjZSIgZm9yIEMtS2VybWl0IChQYXJ0IDEpICAqLworCisvKgorICBBdXRob3Jz OgorICAgIEZyYW5rIGRhIENydXogPGZkY0Bjb2x1bWJpYS5lZHU+LAorICAgICAgVGhlIEtlcm1p dCBQcm9qZWN0LCBDb2x1bWJpYSBVbml2ZXJzaXR5LCBOZXcgWW9yayBDaXR5CisgICAgSmVmZnJl eSBFIEFsdG1hbiA8amFsdG1hbkBzZWN1cmUtZW5kcG9pbnRzLmNvbT4KKyAgICAgIFNlY3VyZSBF bmRwb2ludHMgSW5jLiwgTmV3IFlvcmsgQ2l0eQorCisgIENvcHlyaWdodCAoQykgMTk4NSwgMjAx MSwKKyAgICBUcnVzdGVlcyBvZiBDb2x1bWJpYSBVbml2ZXJzaXR5IGluIHRoZSBDaXR5IG9mIE5l dyBZb3JrLgorICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBTZWUgdGhlIEMtS2VybWl0IENPUFlJ TkcuVFhUIGZpbGUgb3IgdGhlCisgICAgY29weXJpZ2h0IHRleHQgaW4gdGhlIGNrY21haS5jIG1v ZHVsZSBmb3IgZGlzY2xhaW1lciBhbmQgcGVybWlzc2lvbnMuCisqLworCisvKgorICBPcmlnaW5h bGx5IHRoZSBlbnRpcmUgdXNlciBpbnRlcmZhY2Ugd2FzIGluIG9uZSBtb2R1bGUsIGNrdXVzci5j LiAgT3ZlcgorICB0aGUgeWVhcnMgaXQgaGFzIGJlZW4gc3BsaXQgaW50byBtYW55IG1vZHVsZXM6 IGNrdXVzMi5jLCBja3V1czMuYywgLi4uLAorICBja3V1czcuYy4gIGNrdXVzMi5jIGNvbnRhaW5z IHRoZSBIRUxQIGNvbW1hbmQgcGFyc2VyIGFuZCBoZWxwLXRleHQgc3RyaW5nczsKKyAgY2t1dXN5 LmMgY29udGFpbnMgdGhlIFVOSVgtc3R5bGUgY29tbWFuZC1saW5lIGludGVyZmFjZTsgY2t1dXN4 LmMgY29udGFpbnMKKyAgcm91dGluZXMgbmVlZGVkIGJ5IGJvdGggdGhlIGNvbW1hbmQtbGluZSBp bnRlcmZhY2UgYW5kIHRoZSBpbnRlcmFjdGl2ZQorICBjb21tYW5kIHBhcnNlci4KKyovCisKKy8q CisgIFRoZSBja3V1cyouYyBtb2R1bGVzIGRlcGVuZCBvbiB0aGUgZXhpc3RlbmNlIG9mIEMgbGli cmFyeSBmZWF0dXJlcyBsaWtlCisgIGZvcGVuLCBmZ2V0cywgZmVvZiwgKGYpcHJpbnRmLCBhcmd2 L2FyZ2MsIGV0Yy4gIE90aGVyIGZ1bmN0aW9ucyB0aGF0IGFyZQorICBsaWtlbHkgdG8gdmFyeSBh bW9uZyBkaWZmZXJlbnQgcGxhdGZvcm1zIC0tIGxpa2Ugc2V0dGluZyB0ZXJtaW5hbCBtb2RlcyBv cgorICBpbnRlcnJ1cHRzIC0tIGFyZSBpbnZva2VkIHZpYSBjYWxscyB0byBmdW5jdGlvbnMgdGhh dCBhcmUgZGVmaW5lZCBpbiB0aGUKKyAgc3lzdGVtLSBkZXBlbmRlbnQgbW9kdWxlcywgY2s/W2Z0 XWlvLmMuICBUaGUgY29tbWFuZCBsaW5lIHBhcnNlciBwcm9jZXNzZXMKKyAgYW55IGFyZ3VtZW50 cyBmb3VuZCBvbiB0aGUgY29tbWFuZCBsaW5lLCBhcyBwYXNzZWQgdG8gbWFpbigpIHZpYSBhcmd2 L2FyZ2MuCisgIFRoZSBpbnRlcmFjdGl2ZSBwYXJzZXIgdXNlcyB0aGUgZmFjaWxpdGllcyBvZiB0 aGUgY21kIHBhY2thZ2UgKGRldmVsb3BlZCBmb3IKKyAgdGhpcyBwcm9ncmFtLCBidXQgdXNhYmxl IGJ5IGFueSBwcm9ncmFtKS4gIEFueSBjb21tYW5kIHBhcnNlciBtYXkgYmUKKyAgc3Vic3RpdHV0 ZWQgZm9yIHRoaXMgb25lLiAgVGhlIG9ubHkgcmVxdWlyZW1lbnRzIGZvciB0aGUgS2VybWl0IGNv bW1hbmQKKyAgcGFyc2VyIGFyZSB0aGVzZToKKworICAuIFNldCBwYXJhbWV0ZXJzIHZpYSBnbG9i YWwgdmFyaWFibGVzIGxpa2UgZHVwbGV4LCBzcGVlZCwgdHRuYW1lLCBldGMuICBTZWUKKyAgICBj a2NtYWkuYyBmb3IgdGhlIGRlY2xhcmF0aW9ucyBhbmQgZGVzY3JpcHRpb25zIG9mIHRoZXNlIHZh cmlhYmxlcy4KKworICAuIElmIGEgY29tbWFuZCBjYW4gYmUgZXhlY3V0ZWQgd2l0aG91dCB0aGUg dXNlIG9mIEtlcm1pdCBwcm90b2NvbCwgdGhlbgorICAgIGV4ZWN1dGUgdGhlIGNvbW1hbmQgZGly ZWN0bHkgYW5kIHNldCB0aGUgdmFyaWFibGUgc3N0YXRlIHRvIDAuIEV4YW1wbGVzCisgICAgaW5j bHVkZSAnc2V0JyBjb21tYW5kcywgbG9jYWwgZGlyZWN0b3J5IGxpc3RpbmdzLCB0aGUgJ2Nvbm5l Y3QnIGNvbW1hbmQuCisKKyAgLiBJZiBhIGNvbW1hbmQgcmVxdWlyZXMgdGhlIEtlcm1pdCBwcm90 b2NvbCwgc2V0IHRoZSBmb2xsb3dpbmcgdmFyaWFibGVzOgorCisgICAgIHNzdGF0ZSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc3RyaW5nIGRhdGEKKyAgICAgICAneCcgKGVudGVyIHNlcnZl ciBtb2RlKSAgICAgICAgICAgIChub25lKQorICAgICAgICdyJyAoc2VuZCBhICdnZXQnIGNvbW1h bmQpICAgICAgICAgY21hcmcsIGNtYXJnMgorICAgICAgICd2JyAoZW50ZXIgcmVjZWl2ZSBtb2Rl KSAgICAgICAgICAgY21hcmcyCisgICAgICAgJ2cnIChzZW5kIGEgZ2VuZXJpYyBjb21tYW5kKSAg ICAgICBjbWFyZworICAgICAgICdzJyAoc2VuZCBmaWxlcykgICAgICAgICAgICAgICAgICAgbmZp bHMsIGNtYXJnICYgY21hcmcyIE9SIGNtbGlzdAorICAgICAgICdjJyAoc2VuZCBhIHJlbW90ZSBo b3N0IGNvbW1hbmQpICAgY21hcmcKKworICAgICBjbWxpc3QgaXMgYW4gYXJyYXkgb2YgcG9pbnRl cnMgdG8gc3RyaW5ncy4KKyAgICAgY21hcmcsIGNtYXJnMiBhcmUgcG9pbnRlcnMgdG8gc3RyaW5n cy4KKyAgICAgbmZpbHMgaXMgYW4gaW50ZWdlci4KKworICAgICBjbWFyZyBjYW4gYmUgYSBmaWxl bmFtZSBzdHJpbmcgKHBvc3NpYmx5IHdpbGQpLCBvcgorCWEgcG9pbnRlciB0byBhIHByZWZhYnJp Y2F0ZWQgZ2VuZXJpYyBjb21tYW5kIHN0cmluZywgb3IKKwlhIHBvaW50ZXIgdG8gYSBob3N0IGNv bW1hbmQgc3RyaW5nLgorICAgICBjbWFyZzIgaXMgYW4gImFzLW5hbWUiIC0gdGhlIG5hbWUgdG8g c2VuZCBmaWxlKHMpIHVuZGVyLCBvcgorCXRoZSBuYW1lIHVuZGVyIHdoaWNoIHRvIHN0b3JlIGlu Y29taW5nIGZpbGUocyk7IG11c3Qgbm90IGJlIHdpbGQuCisJQSBudWxsIG9yIGVtcHR5IHZhbHVl IG1lYW5zIHRvIHVzZSB0aGUgZmlsZSdzIG93biBuYW1lLgorICAgICBjbWxpc3QgaXMgYSBsaXN0 IG9mIGZpbGVuYW1lcywgc3VjaCBhcyBwYXNzZWQgdmlhIGFyZ3YuCisgICAgIG5maWxzIGlzIGFu IGludGVnZXIsIGludGVycHJldGVkIGFzIGZvbGxvd3M6CisgICAgICAgLTE6IGZpbGVzcGVjIChw b3NzaWJseSB3aWxkKSBpbiBjbWFyZywgbXVzdCBiZSBleHBhbmRlZCBpbnRlcm5hbGx5LgorCTA6 IHNlbmQgZnJvbSBzdGRpbiAoc3RhbmRhcmQgaW5wdXQpLgorICAgICAgID4wOiBudW1iZXIgb2Yg ZmlsZXMgdG8gc2VuZCwgZnJvbSBjbWxpc3QuCisKKyAgVGhlIHNjcmVlbigpIGZ1bmN0aW9uIGlz IHVzZWQgdG8gdXBkYXRlIHRoZSBzY3JlZW4gZHVyaW5nIGZpbGUgdHJhbnNmZXIuCisgIFRoZSB0 bG9nKCkgZnVuY3Rpb24gd3JpdGVzIHRvIGEgdHJhbnNhY3Rpb24gbG9nLgorICBUaGUgZGVidWco KSBmdW5jdGlvbiB3cml0ZXMgdG8gYSBkZWJ1Z2dpbmcgbG9nLgorICBUaGUgaW50bXNnKCkgYW5k IGNoa2ludCgpIGZ1bmN0aW9ucyBwcm92aWRlIHRoZSB1c2VyIGkvbyBmb3IgaW50ZXJydXB0aW5n CisgICAgZmlsZSB0cmFuc2ZlcnMuCisqLworCisvKiBJbmNsdWRlcyAqLworCisjaWZkZWYgTVVM VElORVQKKyNkZWZpbmUgTVVMVElORVRfT0xEX1NUWUxFCQkvKiBMZWF2ZSBzZWxlY3QgcHJvdG90 eXBlIHVuZGVmaW5lZCAqLworI2VuZGlmIC8qIE1VTFRJTkVUICovCisKKyNpbmNsdWRlICJja2Nk ZWIuaCIKKyNpbmNsdWRlICJja2Nhc2MuaCIKKyNpbmNsdWRlICJja2NrZXIuaCIKKyNpbmNsdWRl ICJja2NuZXQuaCIJCQkvKiBOZXR3b3JrIHN5bWJvbHMgKi8KKyNpbmNsdWRlICJja3V1c3IuaCIK KyNpbmNsdWRlICJja2N4bGEuaCIKKworaW50IGdfZm5jYWN0ID0gLTE7CQkJLyogTmVlZGVkIGZv ciBOT0lDUCBidWlsZHMgKi8KK2ludCBub2luaXQgPSAwOwkJCQkvKiBGbGFnIGZvciBza2lwcGlu ZyBpbml0IGZpbGUgKi8KK2ludCBuc2NhbmZpbGUgPSBTQ0FORklMRUJVRjsKKworaW50IHJjZGFj dGl2ZSA9IDA7CQkJLyogUkNEIGFjdGl2ZSAqLworaW50IGtlZXBhbGxjaGFycyA9IDA7CQkJLyog U2VlIGNtZmxkKCkgKi8KKworaW50IGxvY3VzID0gMTsJCQkJLyogQ3VycmVudCBMT0NVUyBpcyBM T0NBTCAqLworI2lmZGVmIE9TMgoraW50IGF1dG9sb2N1cyA9IDI7CQkJLyogQXV0b21hdGljIExP Q1VTIHN3aXRjaGluZzogQVNLICovCisjZWxzZSAvKiBPUzIgKi8KK2ludCBhdXRvbG9jdXMgPSAx OwkJCS8qIEF1dG9tYXRpYyBMT0NVUyBzd2l0Y2hpbmcgZW5hYmxlZCAqLworI2VuZGlmIC8qIE9T MiAqLworCisjaWZuZGVmIE5PSUNQCisjaWZkZWYgQ0tMRUFSTgorI2lmZGVmIFZNUworI2luY2x1 ZGUgPHRpbWUuaD4JCQkvKiBGb3IgQ0tMRUFSTiAqLworI2VuZGlmIC8qIFZNUyAqLworI2VuZGlm IC8qIENLTEVBUk4gKi8KKyNpZmRlZiBPUzIKKyNpZm5kZWYgTlQKKyNkZWZpbmUgSU5DTF9OT1BN CisjZGVmaW5lIElOQ0xfVklPCQkJLyogTmVlZGVkIGZvciBja29jb24uaCAqLworI2luY2x1ZGUg PG9zMi5oPgorI3VuZGVmIENPTU1FTlQKKyNlbHNlCisjZGVmaW5lIEFQSVJFVCBVTE9ORworI2lu Y2x1ZGUgPHdpbmRvd3MuaD4KKyNpbmNsdWRlIDx0YXBpLmg+CisjaW5jbHVkZSAiY2tud2luLmgi CisjaW5jbHVkZSAiY2tudGFwLmgiCQkJLyogQ0tfVEFQSSBkZWZpbml0aW9uICovCisjZW5kaWYg LyogTlQgKi8KKyNpbmNsdWRlICJja293aW4uaCIKKyNpbmNsdWRlICJja29jb24uaCIKK2V4dGVy biBpbnQgdGNwX2F2YWlsOworZXh0ZXJuIGJvb2wgdmlld29ubHk7CitleHRlcm4gaW50IGs5NXN0 ZG91dDsKK2V4dGVybiBpbnQgdHRfc2Nyb2xsOworI2lmbmRlZiBOT1RFUk0KK2V4dGVybiB0dF9z dGF0dXNbVk5VTV07CisjZW5kaWYgLyogTk9URVJNICovCitpbnQgZGlzcGxheV9kZW1vID0gMTsK KyNpbmNsdWRlICJja29zc2guaCIKKyNpZmRlZiBLVUkKKyNpbmNsdWRlICJpa3VpLmgiCisjZW5k aWYgLyogS1VJICovCisjZW5kaWYgLyogT1MyICovCisKK2ludCBvcHRsaW5lcyA9IDA7CitpbnQg ZGlkc2V0bGluID0gMDsKKworI2lmZGVmIE5FV0ZUUAorZXh0ZXJuIGludCBmdHBnZXQsIGZ0cGlz b3BlbigpLCBkb2Z0cHJlcygpOworX1BST1RPVFlQKGludCBkb2Z0cHR5cCwoaW50KSk7CitfUFJP VE9UWVAoVk9JRCBkb2Z0cGdsb2JhbHR5cGUsKGludCkpOworI2VuZGlmIC8qIE5FV0ZUUCAqLwor CisjaWZkZWYgVk1TCitleHRlcm4gaW50IGJhdGNoOworI2VuZGlmIC8qIFZNUyAqLworCisjaWZk ZWYgZGF0YWdlbmVyYWwKKyNpbmNsdWRlIDxwYWNrZXRzOmNvbW1vbi5oPgorI2RlZmluZSBmZ2V0 cyhzdHJpbmdidWYsbWF4LGZkKSBkZ19mZ2V0cyhzdHJpbmdidWYsbWF4LGZkKQorI2VuZGlmIC8q IGRhdGFnZW5lcmFsICovCisKK2V4dGVybiBpbnQgeGNtZHNyYywgaGludHMsIGNtZmxncywgd2h5 Y2xvc2VkOworCitjaGFyICogaGxwdG9rID0gTlVMTDsKKworI2lmZGVmIENLX1RUR1dTSVoJCQkv KiBXaGV0aGVyIHRvIHVzZSBtb3JlLXByb21wdGluZyAqLworaW50IHhhc2ttb3JlID0gMTsJCQkv KiBNb21lbnRhcnkgc2V0dGluZyAqLworaW50IHNhdmVhc2sgID0gMTsJCQkvKiBQZXJtYW5lbnQg c2V0dGluZyAqLworI2Vsc2UKK2ludCB4YXNrbW9yZSA9IDA7CitpbnQgc2F2ZWFzayAgPSAwOwor I2VuZGlmIC8qIENLX1RUR1dTSVogKi8KKworI2lmbmRlZiBOT0NTRVRTCitleHRlcm4gaW50IG5m aWxjOworZXh0ZXJuIHN0cnVjdCBrZXl0YWIgZmNzdGFiW107CitleHRlcm4gaW50IGZjaGFyc2V0 OworI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKworY2hhciAqIGdfcHN3ZCA9IE5VTEw7CitpbnQgZ19w Y3B0ID0gLTE7CitpbnQgZ19wZmxnID0gLTE7CisKK2V4dGVybiBpbnQgY21kX3Jvd3MsIGNtZF9j b2xzOworCisjaWZkZWYgQ0tST09UCitleHRlcm4gaW50IGNrcm9vdGVycjsKKyNlbmRpZiAvKiBD S1JPT1QgKi8KKworZXh0ZXJuIGludCBpbnNlcnZlciwgZmlsZXBlZWs7CisKKyNpZmRlZiBDS0xF QVJOCitGSUxFICogbGVhcm5mcCA9IE5VTEw7CitjaGFyICogbGVhcm5maWxlID0gTlVMTDsKK2lu dCBsZWFybmluZyA9IDA7CisjZW5kaWYgLyogQ0tMRUFSTiAqLworCisjaWZuZGVmIE5PWEZFUgor ZXh0ZXJuIGludCBhdGNhcHIsIGF0ZGlzbywgbmZpbHMsIG1vdmluZywgcHJvdG9jb2wsIHNlbmRt b2RlLCBlcGt0ZmxnLCBzaXplLAorICBzbmRzcmMsIHNlcnZlciwgZGlzcGxhLCBmbmNudiwgZm5z cGF0aCwgZm5ycGF0aCwgeGZlcm1vZGUsIHVycHNpeiwKKyAgc3BzaXpmLCBzcHNpeiwgc3BzaXpy LCBzcG1heCwgd3Nsb3RyLCBwcmVmaXhpbmcsIGZuY2FjdCwgcmVsaWFibGUsCisgIHNldHJlbGlh YmxlOworCisjaWZkZWYgSUtTRENPTkYKK2V4dGVybiBpbnQgaWtzZGNmOworI2VuZGlmIC8qIElL U0RDT05GICovCisKKyNpZmRlZiBDS19MT0dJTgorZXh0ZXJuIGludCBpc2d1ZXN0OworI2VuZGlm IC8qIENLX0xPR0lOICovCisKK2V4dGVybiBDS19PRkZfVCBzZW5kc3RhcnQ7CisKK2V4dGVybiBj aGFyICpjbWFyZywgKmNtYXJnMiwgKipjbWxpc3QsICpkZnR0eTsKKworZXh0ZXJuIHN0cnVjdCBr ZXl0YWIgZm50YWJbXTsgZXh0ZXJuIGludCBuZm50YWI7CitleHRlcm4gc3RydWN0IGNrX3AgcHRh YltOUFJPVE9TXTsKKworaW50IHNuZGNtZCA9IDA7CQkvKiBMYXN0IGNvbW1hbmQgd2FzIGEgU0VO RC1jbGFzcyBjb21tYW5kLiAqLworCitpbnQgZ194ZmVybW9kZSA9IC0xOworaW50IGdfcHJvdG8g ID0gLTE7CitpbnQgZ191cnBzaXogPSAtMTsKK2ludCBnX3Nwc2l6ZiA9IC0xOworaW50IGdfc3Bz aXogID0gLTE7CitpbnQgZ19zcHNpenIgPSAtMTsKK2ludCBnX3NwbWF4ICA9IC0xOworaW50IGdf d3Nsb3RyID0gLTE7CitpbnQgZ19wcmVmaXhpbmcgPSAtMTsKK2ludCBnX2ZuY252ICA9IC0xOwor aW50IGdfZm5zcGF0aCA9IC0xOworaW50IGdfZm5ycGF0aCA9IC0xOworaW50IGdfZm5hY3QgID0g LTE7CitpbnQgZ19kaXNwbGEgPSAtMTsKK2ludCBnX3NwYXRoICA9IC0xOworaW50IGdfcnBhdGgg ID0gLTE7CitjaGFyICogZ19zZmlsdGVyID0gTlVMTDsKK2NoYXIgKiBnX3JmaWx0ZXIgPSBOVUxM OworCitleHRlcm4gaW50IHBhdHRlcm5zOworI2lmZGVmIFBBVFRFUk5TCitleHRlcm4gY2hhciAq dHh0cGF0dGVybnNbXSwgKmJpbnBhdHRlcm5zW107CitpbnQgZ19wYXR0ZXJucyA9IC0xOworI2Vu ZGlmIC8qIFBBVFRFUk5TICovCitpbnQgZ19za2lwYnVwID0gLTE7CisKKyNpZmRlZiBQSVBFU0VO RAorZXh0ZXJuIGludCB1c2VwaXBlcywgcGlwZXNlbmQ7CitleHRlcm4gY2hhciAqIHNuZGZpbHRl cjsKKyNlbmRpZiAvKiBQSVBFU0VORCAqLworCisjaWZuZGVmIE5PU1BMCitleHRlcm4gaW50IHNu ZHhsbywgc25keGhpLCBzbmR4aW47CisjZW5kaWYgLyogTk9TUEwgKi8KKworZXh0ZXJuIGNoYXIg ZnNwZWNbXTsJCQkvKiBNb3N0IHJlY2VudCBmaWxlc3BlYyAqLworZXh0ZXJuIGludCBmc3BlY2xl bjsJCQkvKiBMZW5ndGggb2YgZnNwZWNbXSBidWZmZXIgKi8KKworI2lmbmRlZiBOT0ZSSUxMUwor ZXh0ZXJuIGludCBybWFpbGY7CQkJLyogTUFJTCBjb21tYW5kIGl0ZW1zICovCitleHRlcm4gY2hh ciBvcHRidWZbXTsKKyNlbmRpZiAvKiBOT0ZSSUxMUyAqLworCitleHRlcm4gaW50CisgIGVuX2Nw eSwgZW5fY3dkLCBlbl9kZWwsIGVuX2RpciwgZW5fZmluLCBlbl9nZXQsIGVuX2J5ZSwgZW5fbWFp LCBlbl9wcmksCisgIGVuX2hvcywgZW5fcmVuLCBlbl9zZW4sIGVuX3NwYSwgZW5fc2V0LCBlbl90 eXAsIGVuX3dobywgZW5fcmV0LCBlbl94aXQsCisgIGVuX21rZCwgZW5fcm1kLCBlbl9hc2c7CisK KyNpZm5kZWYgTk9NU0VORAkJCQkvKiBNdWx0aXBsZSBTRU5EICovCitleHRlcm4gY2hhciAqbXNm aWxlc1tdOworaW50IGZpbGVzaW5saXN0ID0gMDsJCQkvKiBBbmQgQUREIC4uLiAqLworZXh0ZXJu IHN0cnVjdCBmaWxlbGlzdCAqIGZpbGVoZWFkOworZXh0ZXJuIHN0cnVjdCBmaWxlbGlzdCAqIGZp bGV0YWlsOworZXh0ZXJuIHN0cnVjdCBmaWxlbGlzdCAqIGZpbGVuZXh0OworZXh0ZXJuIGludCBh ZGRsaXN0OworI2VuZGlmIC8qIE5PTVNFTkQgKi8KKworc3RhdGljIHN0cnVjdCBrZXl0YWIgYWRk dGFiW10gPSB7CisjaWZkZWYgUEFUVEVSTlMKKyAgICB7ICJiaW5hcnktcGF0dGVybnMiLCBBRERf QklOLCAwIH0sCisjZW5kaWYgLyogUEFUVEVSTlMgKi8KKyNpZm5kZWYgTk9NU0VORAorICAgIHsg InNlbmQtbGlzdCIsIEFERF9TTkQsIDAgfSwKKyNlbmRpZiAvKiBOT01TRU5EICovCisjaWZkZWYg UEFUVEVSTlMKKyAgICB7ICJ0ZXh0LXBhdHRlcm5zIiwgQUREX1RYVCwgMCB9LAorI2VuZGlmIC8q IFBBVFRFUk5TICovCisgICAgeyAiIiwgMCwgMCB9Cit9Oworc3RhdGljIGludCBuYWRkdGFiID0g c2l6ZW9mKGFkZHRhYikvc2l6ZW9mKHN0cnVjdCBrZXl0YWIpIC0gMTsKKworI2lmbmRlZiBOT0NT RVRTCitzdHJ1Y3Qga2V5dGFiIGFzc29jdGFiW10gPSB7CisgICAgeyAiZmlsZS1jaGFyYWN0ZXIt c2V0IiwgICAgIEFTU09DX0ZDLCAwIH0sCisgICAgeyAidHJhbnNmZXItY2hhcmFjdGVyLXNldCIs IEFTU09DX1RDLCAwIH0sCisgICAgeyAieGZlci1jaGFyYWN0ZXItc2V0IiwgICAgIEFTU09DX1RD LCBDTV9JTlYgfQorfTsKK3N0YXRpYyBpbnQgbmFzc29jID0gc2l6ZW9mKGFzc29jdGFiKS9zaXpl b2Yoc3RydWN0IGtleXRhYik7CitleHRlcm4gaW50IGFmY3NldFtNQVhGQ1NFVFMrMV07CQkvKiBD aGFyYWN0ZXItc2V0IGFzc29jaWF0aW9ucyAqLworZXh0ZXJuIGludCBheGNzZXRbTUFYVENTRVRT KzFdOworI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKworI2lmbmRlZiBBRERDTUQKKyNpZm5kZWYgTk9N U0VORAorI2RlZmluZSBBRERDTUQKKyNlbmRpZiAvKiBOT01TRU5EICovCisjaWZuZGVmIEFERENN RAorI2lmZGVmIFBBVFRFUk5TCisjZGVmaW5lIEFERENNRAorI2VuZGlmIC8qIFBBVFRFUk5TICov CisjZW5kaWYgLyogQUREQ01EICovCisjZW5kaWYgLyogQUREQ01EICovCisjZW5kaWYgLyogTk9Y RkVSICovCisKKy8qIEV4dGVybmFsIEtlcm1pdCBWYXJpYWJsZXMsIHNlZSBja21haW4uYyBmb3Ig ZGVzY3JpcHRpb24uICovCisKK2V4dGVybiB4eF9zdHJwIHh4c3RyaW5nOworZXh0ZXJuIGxvbmcg eHZlcm51bTsKKworZXh0ZXJuIGludCBsb2NhbCwgeGl0c3RhLCBiaW5hcnksIG1zZ2ZsZywgZXNj YXBlLCBkdXBsZXgsIHF1aWV0LCB0bGV2ZWwsCisgIHBmbGFnLCB6aW5jbnQsIGNreGVjaCwgY2Fy cmllciwgd2hhdCwgbm9wdXNoLCBoYXZlbGluZSwgYnllX2FjdGl2ZTsKKyNpZmRlZiBUTkNPREUK K2V4dGVybiBpbnQgZGVic2VzOworZXh0ZXJuIGNoYXIgdG5fbXNnW107CisjZW5kaWYgLyogVE5D T0RFICovCisKK2ludCBzbGVlcGNhbiA9IDE7CitpbnQgZ19iaW5hcnkgPSAtMTsKK2ludCBnX3Jl Y3Vyc2l2ZSA9IC0xOworaW50IGdfbWF0Y2hkb3QgPSAtMTsKK2V4dGVybiBpbnQgbm9saW5rczsK KworZXh0ZXJuIGxvbmcgdmVybnVtOworZXh0ZXJuIGNoYXIgKnZlcnNpbywgKmNvcHlyaWdodFtd OworZXh0ZXJuIGNoYXIgKmNreHN5czsKKyNpZm5kZWYgTk9IRUxQCitleHRlcm4gY2hhciAqaW50 cm90eHRbXTsKK2V4dGVybiBjaGFyICpuZXdzdHh0W107CisjZW5kaWYgLyogTk9IRUxQICovCisK KyNpZm5kZWYgT1MyCisjaWZuZGVmIFVOSVgKK2V4dGVybiBjaGFyICpQV0RDTUQ7CisjZW5kaWYg LyogVU5JWCAqLworZXh0ZXJuIGNoYXIgKldIT0NNRDsKKyNlbmRpZiAvKiBPUzIgKi8KKworZXh0 ZXJuIGNoYXIgdHRuYW1lW107CisKK2V4dGVybiBDSEFSIHNzdGF0ZTsKKworZXh0ZXJuIGludCBu ZXR3b3JrOwkJCS8qIEhhdmUgYWN0aXZlIG5ldHdvcmsgY29ubmVjdGlvbiAqLworZXh0ZXJuIGlu dCBuZXR0eXBlOwkJCS8qIFR5cGUgb2YgbmV0d29yayAqLworZXh0ZXJuIGludCB0dG5wcm90bzsg ICAgICAgICAgICAgICAgICAgIC8qIE5FVF9UQ1BCIHByb3RvY29sICovCisKKyNpZm5kZWYgTk9E SUFMCitleHRlcm4gaW50IGRpYWxzdGEsIGRpYWxhdG1vLCBkaWFsY29uLCBkaWFsY3E7IC8qIERJ QUwgc3RhdHVzLCBldGMuICovCisjZW5kaWYgLyogTk9ESUFMICovCisKKyNpZmRlZiBDS19BUEMK K2V4dGVybiBpbnQgYXBjYWN0aXZlLCBhcGNzdGF0dXM7CisjZW5kaWYgLyogQ0tfQVBDICovCisK KyNpZm5kZWYgTk9QVVNICisjaWZuZGVmIE5PRlJJTExTCitleHRlcm4gY2hhciBlZGl0b3JbXTsK K2V4dGVybiBjaGFyIGVkaXRvcHRzW107CitleHRlcm4gY2hhciBlZGl0ZmlsZVtdOworI2VuZGlm IC8qIE5PRlJJTExTICovCisjZW5kaWYgLyogTk9QVVNIICovCisKKyNpZmRlZiBCUk9XU0VSCitl eHRlcm4gY2hhciBicm93c2VyW107CQkJLyogV2ViIGJyb3dzZXIgYXBwbGljYXRpb24gKi8KK2V4 dGVybiBjaGFyIGJyb3dzb3B0c1tdOwkJLyogV2ViIGJyb3dzZXIgb3B0aW9ucyAqLworZXh0ZXJu IGNoYXIgYnJvd3N1cmxbXTsJCQkvKiBNb3N0IHJlY2VudCBVUkwgKi8KKyNlbmRpZiAvKiBCUk9X U0VSICovCisjaWZuZGVmIE5PRlRQCitjaGFyIGZ0cGFwcFtDS01BWFBBVEgrMV0gPSB7IE5VTCwg TlVMIH07IC8qIGZ0cCBleGVjdXRhYmxlICovCitjaGFyIGZ0cG9wdHNbMTI4XSA9IHsgTlVMLCBO VUwgfTsJLyogZnRwIGNvbW1hbmQtbGluZSBvcHRpb25zICovCisjZW5kaWYgLyogTk9GVFAgKi8K K2V4dGVybiBzdHJ1Y3Qga2V5dGFiIG9ub2ZmW107CQkvKiBPbi9PZmYga2V5d29yZCB0YWJsZSAq LworCisjaWZkZWYgQ0tfVE1QRElSCitpbnQgZl90bXBkaXIgPSAwOwkJCS8qIERpcmVjdG9yeSBj aGFuZ2VkIHRlbXBvcmFyaWx5ICovCitjaGFyIHNhdmRpcltUTVBESVJMRU5dOwkJCS8qIEZvciBz YXZpbmcgY3VycmVudCBkaXJlY3RvcnkgKi8KKyNlbmRpZiAvKiBDS19UTVBESVIgKi8KKworaW50 IGFjdGl2ZWNtZCA9IC0xOwkJCS8qIEtleXdvcmQgaW5kZXggb2YgYWN0aXZlIGNvbW1hbmQgKi8K K2ludCBkb2NvbnggPSAtMTsJCQkvKiBDT05ORUNULWNsYXNzIGNvbW1hbmQgYWN0aXZlICovCitp bnQgb29mbGFnID0gMDsJCQkJLyogVXNlci1zZXR0YWJsZSBvbi9vZmYgZmxhZyAqLworCitpbnQg cmNmbGFnID0gMDsJCQkJLyogUG9pbnRlciB0byBob21lIGRpcmVjdG9yeSBzdHJpbmcgKi8KK2lu dCByZXBhcnMsCQkJCS8qIFJlcGFyc2UgbmVlZGVkICovCisgICAgdGVjaG8gPSAwOwkJCQkvKiBU YWtlIGVjaG8gKi8KK2ludCBzZWNobyA9IDE7CQkJCS8qIFNDUklQVCBlY2hvICovCisKK2ludCB4 aXR3YXJuID0JCQkvKiBXYXJuIGFib3V0IG9wZW4gY29ubmVjdGlvbiBvbiBleGl0ICovCisjaWZk ZWYgTk9XQVJOCiswCisjZWxzZQorMQorI2VuZGlmIC8qIE5PV0FSTiAqLworOworCitzdHJ1Y3Qg a2V5dGFiIG9ub2Zmc3dbXSA9IHsKKyAgICB7ICIvb2ZmIiwgMCwgMCB9LAorICAgIHsgIi9vbiIs ICAxLCAwIH0KK307CisKKyNpZmRlZiBDS0VYRUMKK3N0cnVjdCBrZXl0YWIgcmVkaXJzd1tdID0g eworICAgIHsgIi9yZWRpcmVjdCIsIDEsIDAgfQorfTsKKyNlbmRpZiAvKiBDS0VYRUMgKi8KKwor I2lmbmRlZiBOT1hNSVQKKy8qIFZhcmlhYmxlcyBmb3IgVFJBTlNNSVQgY29tbWFuZCAqLworCitp bnQgeG1pdHggPSAxOwkJCS8qIFdoZXRoZXIgdG8gZWNobyBkdXJpbmcgVFJBTlNNSVQgKi8KK2lu dCB4bWl0ZiA9IDA7CQkJLyogQ2hhcmFjdGVyIHRvIGZpbGwgZW1wdHkgbGluZXMgKi8KK2ludCB4 bWl0bCA9IDA7CQkJLyogMCA9IERvbid0IHNlbmQgbGluZWZlZWQgdG9vICovCitpbnQgeG1pdHAg PSBMRjsJCQkvKiBIb3N0IGxpbmUgcHJvbXB0ICovCitpbnQgeG1pdHMgPSAwOwkJCS8qIFVzZSBz aGlmdC1pbi9zaGlmdC1vdXQsIDAgPSBubyAqLworaW50IHhtaXR3ID0gMDsJCQkvKiBNaWxsaXNl Y29uZHMgdG8gcGF1c2UgZHVyaW5nIFRSQU5TTUlUICovCitpbnQgeG1pdHQgPSAxOwkJCS8qIFNl Y29uZHMgdG8gd2FpdCBmb3IgZWFjaCBjaGFyIHRvIGVjaG8gKi8KK2ludCB4bWl0YSA9IDE7CQkJ LyogQWN0aW9uIHVwb24gdGltZW91dCAqLworCisjZGVmaW5lIFhNSV9CSU4gMQorI2RlZmluZSBY TUlfVFhUIDIKKyNkZWZpbmUgWE1JX0NNRCAzCisjZGVmaW5lIFhNSV9UUkEgNAorI2RlZmluZSBY TUlfVlJCIDUKKyNkZWZpbmUgWE1JX1FVSSA2CisjZGVmaW5lIFhNSV9OT1cgNworI2RlZmluZSBY TUlfTk9FIDgKKworc3RhdGljIHN0cnVjdCBrZXl0YWIgeG1pdHN3W10gPSB7CS8qIFRSQU5TTUlU IGNvbW1hbmQgb3B0aW9ucyAqLworICAgIHsgIi9iaW5hcnkiLCAgICAgICAgICBYTUlfQklOLCAw IH0sCisjaWZkZWYgUElQRVNFTkQKKyAgICB7ICIvY29tbWFuZCIsICAgICAgICAgWE1JX0NNRCwg Q01fSU5WfENNX1BTSCB9LAorI2VuZGlmIC8qIFBJUEVTRU5EICovCisgICAgeyAiL25vZWNobyIs ICAgICAgICAgIFhNSV9OT0UsIDAgfSwKKyAgICB7ICIvbm93YWl0IiwgICAgICAgICAgWE1JX05P VywgMCB9LAorI2lmZGVmIFBJUEVTRU5ECisgICAgeyAiL3BpcGUiLCAgICAgICAgICAgIFhNSV9D TUQsIDAgfSwKKyNlbmRpZiAvKiBQSVBFU0VORCAqLworI2lmZGVmIENPTU1FTlQKKyAgICB7ICIv cXVpZXQiLCAgICAgICAgICAgWE1JX1FVSSwgMCB9LAorI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAg ICB7ICIvdGV4dCIsICAgICAgICAgICAgWE1JX1RYVCwgMCB9LAorICAgIHsgIi90cmFuc3BhcmVu dCIsICAgICBYTUlfVFJBLCAwIH0sCisjaWZkZWYgQ09NTUVOVAorICAgIHsgIi92ZXJib3NlIiwg ICAgICAgICBYTUlfVlJCLCAwIH0sCisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgIHsgIiIsIDAs IDAgfQorfTsKKyNkZWZpbmUgTlhNSVRTVyBzaXplb2YoeG1pdHN3KS9zaXplb2Yoc3RydWN0IGtl eXRhYikgLSAxCitzdGF0aWMgaW50IG54bWl0c3cgPSBOWE1JVFNXOworCisjZW5kaWYgLyogTk9Y TUlUICovCisKKy8qIERlY2xhcmF0aW9ucyBmcm9tIGNrP2Zpby5jIG1vZHVsZSAqLworCitleHRl cm4gY2hhciAqU1BBQ01ELCAqU1BBQ00yOwkJLyogU1BBQ0UgY29tbWFuZHMgKi8KKworLyogQ29t bWFuZC1vcmllbnRlZCBpdGVtcyAqLworCisjaWZkZWYgRENNREJVRgorZXh0ZXJuIGNoYXIgKmNt ZGJ1ZjsJCQkvKiBDb21tYW5kIGJ1ZmZlcnMgKi8KK2V4dGVybiBjaGFyICphdG1idWY7CitleHRl cm4gY2hhciAqbGluZTsJCQkvKiBDaGFyYWN0ZXIgYnVmZmVyIGZvciBhbnl0aGluZyAqLworZXh0 ZXJuIGNoYXIgKnRtcGJ1ZjsJCQkvKiBTaG9ydCB0ZW1wb3Jhcnkgc3RyaW5nIGJ1ZmZlciAqLwor ZXh0ZXJuIGludCAqaWZjbWQ7CitleHRlcm4gaW50ICppbnRpbWU7CitleHRlcm4gaW50ICppbnBj YXM7CisjZWxzZQorZXh0ZXJuIGNoYXIgY21kYnVmW107CQkJLyogQ29tbWFuZCBidWZmZXJzICov CitleHRlcm4gY2hhciBhdG1idWZbXTsKK2V4dGVybiBjaGFyIGxpbmVbXTsJCQkvKiBDaGFyYWN0 ZXIgYnVmZmVyIGZvciBhbnl0aGluZyAqLworZXh0ZXJuIGNoYXIgdG1wYnVmW107CQkJLyogVGVt cG9yYXJ5IGJ1ZmZlciAqLworZXh0ZXJuIGludCBpZmNtZFtdOworZXh0ZXJuIGludCBpbnRpbWVb XTsKK2V4dGVybiBpbnQgaW5wY2FzW107CisjZW5kaWYgLyogRENNREJVRiAqLworCisjaWZuZGVm IE5PU1BMCitleHRlcm4gY2hhciAqIHByc3RyaW5nW107CisjZW5kaWYgLyogTk9TUEwgKi8KKwor Y2hhciAqbHA7CQkJCS8qIFBvaW50ZXIgdG8gbGluZSBidWZmZXIgKi8KKworI2lmbmRlZiBOT1NQ TAoraW50IHZhcmV2YWwgPSAxOwkJCS8qIEV2YWx1YXRpb24gbWV0aG9kICovCitpbnQgdW5rbWFj cm8gPSAwOwkJCS8qIEZsYWcgZm9yIGluIE9OX1VOS05PV05fQ09NTUFORCAqLworaW50IG9sZGV2 YWwgPSAwOworY2hhciBldmFsYnVmWzMzXTsJCQkvKiBFVkFMVUFURSByZXN1bHQgKi8KK2V4dGVy biBjaGFyICogaW5wYnVmOwkJCS8qIEJ1ZmZlciBmb3IgSU5QVVQgYW5kIFJFSU5QVVQgKi8KK2No YXIgKmlucGJwOwkJCQkvKiBBbmQgcG9pbnRlciB0byBzYW1lICovCitpbnQgbV9mb3VuZDsJCQkJ LyogTUlOUFVUIHJlc3VsdCAqLworaW50IGlfYWN0aXZlID0gMDsJCQkvKiBJTlBVVCBjb21tYW5k IGlzIGFjdGl2ZSAqLworY2hhciAqbXNbTUlOUE1BWF07CQkJLyogUG9pbnRlcnMgdG8gTUlOUFVU IHN0cmluZ3MgKi8KK3N0YXRpYyBpbnQgbXBpbml0ZWQgPSAwOwkJLyogRmxhZyB0aGV5IGhhdmUg YmVlbiBpbml0aWFsaXplZCAqLworc3RhdGljIGludCBtcFtNSU5QTUFYXTsJCQkvKiBhbmQgTUlO UFVUIGZsYWdzICovCitleHRlcm4gaW50IGZuZGlhZ3MsIGZuZXJyb3IsIGZuc3VjY2VzczsJLyog RnVuY3Rpb24gZGlhZ25vc3RpY3MgKi8KKyNpZm5kZWYgTk9TRVhQCitjaGFyICogbGFzdHNleHAg PSBOVUxMOwkJCS8qIFMtRXhwcmVzc2lvbnMgKi8KK2NoYXIgKiBzZXhwdmFsID0gTlVMTDsKK2lu dCBzZXhwZWNobyA9IFNFVF9BVVRPOworI2VuZGlmIC8qIE5PU0VYUCAqLworI2VuZGlmIC8qIE5P U1BMICovCisKK2NoYXIgcHNhdmVbUFJPTVBUTF0gPSB7IE5VTCB9OwkJLyogRm9yIHNhdmluZyAm IHJlc3RvcmluZyBwcm9tcHQgKi8KKworZXh0ZXJuIGludCBzdWNjZXNzOwkJCS8qIENvbW1hbmQg c3VjY2Vzcy9mYWlsdXJlIGZsYWcgKi8KK2V4dGVybiBpbnQgY21kbHZsOwkJCS8qIEN1cnJlbnQg cG9zaXRpb24gaW4gY29tbWFuZCBzdGFjayAqLworCisjaWZuZGVmIE5PU1BMCitpbnQJCQkJCS8q IFNFVCBJTlBVVCBwYXJhbWV0ZXJzLiAqLworLyogTm90ZSwgSU5QVVQgVElNRU9VVCwgaW50aW1l W10sIGlzIG9uIHRoZSBjb21tYW5kLWxldmVsIHN0YWNrLiAqLworICBpbmJ1ZnNpemUgPSAwLAkJ CS8qIElOUFVUIGJ1ZmZlciBzaXplICovCisgIGluZGVmID0gMSwJCQkJLyogZGVmYXVsdCB0aW1l b3V0LCBzZWNvbmRzICovCisgIGluZWNobyA9IDEsCQkJCS8qIDEgPSBlY2hvIG9uICovCisgIGlu YXV0b2RsID0gMCwJCQkJLyogSU5QVVQgYXV0b2Rvd25sb2FkICovCisgIGluaW50ciA9IDEsCQkJ CS8qIElOUFVUIGludGVycnVwaW9uIGFsbG93ZWQgKi8KKyAgaW5zaWxlbmNlID0gMDsJCQkvKiAw ID0gbm8gc2lsZW5jZSBjb25zdHJhaW50ICovCisKKyNpZmRlZiBDS0ZMT0FUCitDS0ZMT0FUIGlu c2NhbGUgPSAxLjA7CQkJLyogVGltZW91dCBzY2FsZSBmYWN0b3IgKi8KKyNlbmRpZgkvKiBDS0ZM T0FUICovCisKKyNpZmRlZiBPUzIKK2ludCBpbnRlcm0gPSAxOwkJCQkvKiBUZXJtaW5hbCBlbXVs YXRvciBkaXNwbGF5cyBpbnB1dCAqLworI2VuZGlmIC8qIE9TMiAqLworaW50IG1hY2x2bCA9IC0x OwkJCS8qIE1hY3JvIG5lc3RpbmcgbGV2ZWwgKi8KK2ludCBtZWNobyA9IDA7CQkJCS8qIE1hY3Jv IGVjaG8sIDAgPSBkb24ndCAqLworY2hhciB2YXJuYW1bNl07CQkJCS8qIEZvciB2YXJpYWJsZSBu YW1lcyAqLworZXh0ZXJuIGludCBtYWNhcmdjW107CQkJLyogQVJHQyBmcm9tIG1hY3JvIGludm9j YXRpb24gKi8KKworZXh0ZXJuIGNoYXIgKm1fYXJnW01BQ0xFVkVMXVtOQVJHU107CS8qIFN0YWNr IG9mIG1hY3JvIGFyZ3VtZW50cyAqLworZXh0ZXJuIGNoYXIgKm1ydmFsW107CisKK2V4dGVybiBj aGFyICoqYV9wdHJbXTsJCQkvKiBBcnJheSBwb2ludGVycyAqLworZXh0ZXJuIGludCBhX2RpbVtd OwkJCS8qIEFycmF5IGRpbWVuc2lvbnMgKi8KK2V4dGVybiBpbnQgYV9saW5rW107CisKKyNpZmRl ZiBEQ01EQlVGCitleHRlcm4gc3RydWN0IGNtZHB0ciAqY21kc3RrOwkJLyogVGhlIGNvbW1hbmQg c3RhY2sgaXRzZWxmICovCisjZWxzZQorZXh0ZXJuIHN0cnVjdCBjbWRwdHIgY21kc3RrW107CQkv KiBUaGUgY29tbWFuZCBzdGFjayBpdHNlbGYgKi8KKyNlbmRpZiAvKiBEQ01EQlVGICovCisKK2xv bmcgY2tfYWxhcm0gPSAwOwkJCS8qIFNFVCBBTEFSTSB2YWx1ZSAqLworY2hhciBhbHJtX2RhdGVb MjRdID0geyAnICcsJyAnLCcgJywnICcsJyAnLCcgJywnICcsJyAnLCcgJyB9OworY2hhciBhbHJt X3RpbWVbMjRdID0geyAnICcsJyAnLCcgJywnICcsJyAnLCcgJywnICcgfTsKKworc3RydWN0IGtl eXRhYiBpbnB1dHN3W10gPSB7CisgICAgeyAiL2NsZWFyIiwgICBJTlBTV19DTFIsIDAgfSwKKyAg ICB7ICIvY291bnQiLCAgIElOUFNXX0NPVSwgQ01fQVJHIH0sCisgICAgeyAiL25vbWF0Y2giLCBJ TlBTV19OT00sIDAgfSwKKyAgICB7ICIvbm93cmFwIiwgIElOUFNXX05PVywgMCB9Cit9Oworc3Rh dGljIGludCBuaW5wdXRzdyA9IHNpemVvZihpbnB1dHN3KS9zaXplb2Yoc3RydWN0IGtleXRhYik7 CisKKy8qIFRoZSBmb2xsb3dpbmcgc2hvdWxkIGJlIHJlY29uY2lsZWQgd2l0aCB0aGUgYWJvdmUg Ki8KKworI2lmZGVmIENPTU1FTlQJCQkJLyogSU5QVVQgc3dpdGNoZXMgbm90IHVzZWQgeWV0Li4u ICovCitzdGF0aWMgc3RydWN0IGtleXRhYiBpbnN3dGFiW10gPSB7CisjaWZkZWYgQ09NTUVOVAor ICAgIHsgIi9hc3NpZ24iLCAgICAgICBJTl9BU0csIENNX0FSRyB9LAorI2VuZGlmIC8qIENPTU1F TlQgKi8KKyAgICB7ICIvYXV0b2Rvd25sb2FkIiwgSU5fQURMLCBDTV9BUkcgfSwKKyAgICB7ICIv Y2FzZSIsICAgICAgICAgSU5fQ0FTLCBDTV9BUkcgfSwKKyAgICB7ICIvZWNobyIsICAgICAgICAg SU5fRUNILCBDTV9BUkcgfSwKKyAgICB7ICIvaW50ZXJydXB0cyIsICAgSU5fTk9JLCBDTV9BUkcg fSwKKyAgICB7ICIvc2lsZW5jZSIsICAgICAgSU5fU0lMLCBDTV9BUkcgfSwKKyNpZmRlZiBDT01N RU5UCisgICAgeyAiL3BhdHRlcm4iLCAgICAgIElOX1BBVCwgQ01fQVJHIH0sCisjZW5kaWYgLyog Q09NTUVOVCAqLworICAgIHsgIiIsIDAsIDAgfQorfTsKK3N0YXRpYyBpbnQgbmluc3d0YWIgPSAo c2l6ZW9mKGluc3d0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKSAtIDE7CisjZW5kaWYgLyog Q09NTUVOVCAqLworCisKKyNlbmRpZiAvKiBOT1NQTCAqLworCitzdGF0aWMgaW50IHgsIHksIHog PSAwOwkJCS8qIExvY2FsIHdvcmtlcnMgKi8KK3N0YXRpYyBjaGFyICpzOworCisjaWZkZWYgQ0tf TUlOUFVUCitzdGF0aWMgY2hhciBjMWNoYXJzW10gPSB7CQkvKiBDMSBjb250cm9sIGNoYXJzIGVz Y2VwdCBOVUwgKi8KKyAgICAwMDEsMDAyLDAwMywwMDQsMDA1LDAwNiwwMDcsMDEwLDAxMSwwMTIs MDEzLDAxNCwwMTUsMDE2LDAxNywwMjAsCisgICAgMDIxLDAyMiwwMjMsMDI0LDAyNSwwMjYsMDI3 LDAzMCwwMzEsMDMyLDAzMywwMzQsMDM1LDAzNiwwMzcKK307CisjZW5kaWYgLyogQ0tfTUlOUFVU ICovCisKKyNkZWZpbmUgeHN5c3RlbShzKSB6c3lzY21kKHMpCisKKy8qIFRvcC1MZXZlbCBJbnRl cmFjdGl2ZSBDb21tYW5kIEtleXdvcmQgVGFibGUgKi8KKy8qIEtleXdvcmRzIG11c3QgYmUgaW4g bG93ZXJjYXNlIGFuZCBpbiBhbHBoYWJldGljYWwgb3JkZXIuICovCisKK3N0cnVjdCBrZXl0YWIg Y21kdGFiW10gPSB7CisjaWZuZGVmIE5PUFVTSAorICAgIHsgIiEiLAkgICBYWFNIRSwgQ01fSU5W fENNX1BTSCB9LCAvKiBTaGVsbCBlc2NhcGUgKi8KKyNlbHNlCisgICAgeyAiISIsCSAgIFhYTk9U QVYsIENNX0lOVnxDTV9QU0ggfSwKKyNlbmRpZiAvKiBOT1BVU0ggKi8KKyAgICB7ICIjIiwgICAg CSAgIFhYQ09NLCBDTV9JTlYgfSwJLyogQ29tbWVudCAqLworI2lmbmRlZiBOT1NQTAorICAgIHsg IigiLCAgICAgICAgICAgWFhTRVhQLENNX0lOViB9LAkvKiBTLUV4cHJlc3Npb24gKi8KKyAgICB7 ICIuIiwgICAgICAgICAgIFhYREVGLCBDTV9JTlYgfSwJLyogQXNzaWdubWVudCAqLworICAgIHsg IjoiLCAgICAgICAgICAgWFhMQkwsIENNX0lOViB9LAkvKiBMYWJlbCAqLworI2VuZGlmIC8qIE5P U1BMICovCisjaWZkZWYgQ0tfUkVESVIKKyNpZm5kZWYgTk9QVVNICisgICAgeyAiPCIsICAgICAg ICAgICBYWEZVTiwgQ01fSU5WfENNX1BTSCB9LCAvKiBSRURJUkVDVCAqLworI2Vsc2UKKyAgICB7 ICI8IiwgICAgICAgICAgIFhYTk9UQVYsIENNX0lOVnxDTV9QU0ggfSwgLyogUkVESVJFQ1QgKi8K KyNlbmRpZiAvKiBOT1BVU0ggKi8KKyNlbmRpZiAvKiBDS19SRURJUiAqLworI2lmbmRlZiBOT1BV U0gKKyAgICB7ICJAIiwgICAgICAgICAgIFhYU0hFLCBDTV9JTlZ8Q01fUFNIIH0sIC8qIERDTCBl c2NhcGUgKi8KKyNlbHNlCisgICAgeyAiQCIsICAgICAgICAgICBYWE5PVEFWLCBDTV9JTlZ8Q01f UFNIIH0sIC8qIERDTCBlc2NhcGUgKi8KKyNlbmRpZiAvKiBOT1BVU0ggKi8KKworI2lmZGVmIENL X1JFQ0FMTAorICAgIHsgIl4iLCAgICAgICAgICAgWFhSRURPLENNX0lOVnxDTV9OT1IgfSwgLyog U3lub255bSBmb3IgUkVETyAqLworI2VuZGlmIC8qIENLX1JFQ0FMTCAqLworI2lmbmRlZiBOT1NQ TAorICAgIHsgIl9hc2ciLCAgICAgICAgWFhBU1gsICAgQ01fSU5WIH0sCS8qIFVzZWQgaW50ZXJu YWxseSBieSBGT1IsIGV0YyAqLworICAgIHsgIl9hc3NpZ24iLCAgICAgWFhBU1gsICAgQ01fSU5W IH0sCS8qIFVzZWQgaW50ZXJuYWxseSBieSBGT1IsIGV0YyAqLworICAgIHsgIl9kZWNyZW1lbnQi LCAgWFhfREVDUiwgQ01fSU5WIH0sCisgICAgeyAiX2RlZmluZSIsICAgICBYWERGWCwgICBDTV9J TlYgfSwJLyogVXNlZCBpbnRlcm5hbGx5IGJ5IEZPUiwgZXRjICovCisgICAgeyAiX2V2YWx1YXRl IiwgICBYWF9FVkFMLCBDTV9JTlYgfSwKKyAgICB7ICJfZm9yd2FyZCIsICAgIFhYWEZXRCwgIENN X0lOViB9LAkvKiBVc2VkIGludGVybmFsbHkgYnkgU1dJVENIICAgKi8KKyAgICB7ICJfZ2V0YXJn cyIsICAgIFhYR1RBLCAgIENNX0lOViB9LAkvKiBVc2VkIGludGVybmFsbHkgYnkgRk9SLCBldGMg Ki8KKyAgICB7ICJfaW5jcmVtZW50IiwgIFhYX0lOQ1IsIENNX0lOViB9LAorICAgIHsgIl9wdXRh cmdzIiwgICAgWFhQVEEsICAgQ01fSU5WIH0sCS8qIFVzZWQgaW50ZXJuYWxseSBieSBGT1IsIGV0 YyAqLworICAgIHsgIl91bmRlZmluZSIsICAgWFhVTkRGWCwgQ01fSU5WIH0sCisjZW5kaWYgLyog Tk9TUEwgKi8KKworICAgIHsgImFib3V0IiwgICAgICAgWFhWRVIsICAgQ01fSU5WIH0sCS8qIFN5 bm9ueW0gZm9yIFZFUlNJT04gKi8KKyNpZm5kZWYgTk9TUEwKKyNpZmRlZiBORVdGVFAKKyAgICB7 ICJhY2NvdW50IiwgICAgIFhYQUNDVCwgIENNX0lOViB9LCAvKiAoRlRQKSBBY2NvdW50ICovCisj ZW5kaWYgLyogTkVXRlRQICovCisjaWZkZWYgQUREQ01ECisgICAgeyAiYWRkIiwgICAgICAgICBY WEFERCwgMCB9LAkvKiBBREQgKi8KKyNlbmRpZiAvKiBBRERDTUQgKi8KKyNpZm5kZWYgTk9ESUFM CisgICAgeyAiYW5zd2VyIiwgICAgICBYWEFOU1csIENNX0xPQyB9LAkvKiBBTlNXRVIgdGhlIHBo b25lICovCisjZWxzZQorICAgIHsgImFuc3dlciIsICAgICAgWFhOT1RBViwgQ01fSU5WfENNX0xP QyB9LCAvKiBBTlNXRVIgdGhlIHBob25lICovCisjZW5kaWYgLyogTk9ESUFMICovCisgICAgeyAi YXBjIiwgICAgICAgICBYWEFQQywgMCB9LAkvKiBBcHBsaWNhdGlvbiBQcm9ncmFtIENvbW1hbmQg Ki8KKyNpZm5kZWYgTk9TUEwKKyAgICB7ICJhcnJheSIsICAgICAgIFhYQVJSQVksIDAgfSwJLyog QXJyYXkgb3BlcmF0aW9ucyAqLworI2VuZGlmIC8qIE5PU1BMICovCisgICAgeyAiYXNjaWkiLCAg ICAgICBYWEFTQywgQ01fSU5WIH0sCS8qID09IFNFVCBGSUxFIFRZUEUgVEVYVCAqLworICAgIHsg ImFzZyIsICAgICAgICAgWFhBU1MsIENNX0lOViB9LAkvKiBJbnZpc2libGUgc3lub255bSBmb3Ig QVNTSUdOICovCisgICAgeyAiYXNrIiwgICAgICAgICBYWEFTSywgMCB9LAkvKiBBU0sgZm9yIHRl eHQsIGFzc2lnbiB0byB2YXJpYWJsZSAqLworICAgIHsgImFza3EiLCAgICAgICAgWFhBU0tRLDAg fSwJLyogQVNLIHF1aWV0bHkgKG5vIGVjaG8pICovCisjaWZuZGVmIE5PU1BMCisgICAgeyAiYXNz IiwgICAgICAgICBYWEFTUywgQ01fSU5WfENNX0FCUiB9LCAvKiBBU1NJR04gKi8KKyAgICB7ICJh c3NlcnQiLCAgICAgIFhYQVNTRVIsIENNX0lOViB9LAkvKiBBU1NFUlQgKi8KKyAgICB7ICJhc3Np Z24iLCAgICAgIFhYQVNTLCAwIH0sCS8qIEFTU0lHTiAqLworI2VuZGlmIC8qIE5PU1BMICovCisj aWZuZGVmIE5PWEZFUgorI2lmbmRlZiBOT0NTRVRTCisgICAgeyAiYXNzb2NpYXRlIiwgICBYWEFT U09DLCAwIH0sCS8qIEFTU09DSUFURSAqLworI2Vsc2UKKyAgICB7ICJhc3NvY2lhdGUiLCAgIFhY Tk9UQVYsIENNX0lOViB9LAkvKiBBU1NPQ0lBVEUgKi8KKyNlbmRpZiAvKiBOT0NTRVRTICovCisj ZW5kaWYgLyogTk9YRkVSICovCisjaWZkZWYgQ0tfS0VSQkVST1MKKyNpZmRlZiBDS19BVVRIRU5U SUNBVElPTgorICAgIHsgImF1dGhlbnRpY2F0ZSIsWFhBVVRILCAwIH0sCS8qIEF1dGhlbnRpY2F0 aW9uICovCisjZWxzZQorICAgIHsgImF1dGhlbnRpY2F0ZSIsWFhBVVRILCBDTV9JTlYgfSwKKyNl bmRpZiAvKiBDS19BVVRIRU5USUNBVElPTiAqLworI2VuZGlmIC8qIENLX0tFUkJFUk9TICovCisj ZW5kaWYgLyogTk9TUEwgKi8KKyNpZm5kZWYgTk9GUklMTFMKKyAgICB7ICJiYWNrIiwgICAgICAg IFhYQkFDSywgMCB9LAkvKiBCQUNLIHRvIHByZXZpb3VzIGRpcmVjdG9yeSAqLworI2Vsc2UKKyAg ICB7ICJiYWNrIiwgICAgICAgIFhYTk9UQVYsQ01fSU5WIH0sCisjZW5kaWYgLyogTk9GUklMTFMg Ki8KKyAgICB7ICJiZWVwIiwgICAgICAgIFhYQkVFUCxDTV9JTlYgfSwJLyogQkVFUCAqLworI2lm bmRlZiBOT1hGRVIKKyAgICB7ICJiaW5hcnkiLCAgICAgIFhYQklOLCBDTV9JTlYgfSwJLyogPT0g U0VUIEZJTEUgVFlQRSBCSU5BUlkgKi8KKyNlbmRpZiAvKiBOT1hGRVIgKi8KKyNpZm5kZWYgTk9G UklMTFMKKyAgICB7ICJidWciLCAgICAgICAgIFhYQlVHLCBDTV9JTlYgfSwJLyogQlVHIHJlcG9y dCBpbnN0cnVjdGlvbnMgKi8KKyNlbHNlCisgICAgeyAiYnVnIiwgICAgICAgICBYWE5PVEFWLCBD TV9JTlYgfSwKKyNlbmRpZiAvKiBOT0ZSSUxMUyAqLworI2lmZGVmIEJST1dTRVIKKyAgICB7ICJi cm93c2UiLCAgICAgIFhYQlJPV1MsIENNX1BTSHxDTV9MT0MgfSwgLyogQlJPV1NFIChzdGFydCBi cm93c2VyKSAqLworI2Vsc2UKKyAgICB7ICJicm93c2UiLCAgICAgIFhYTk9UQVYsIENNX0lOVnxD TV9QU0h8Q01fTE9DIH0sCisjZW5kaWYgLyogQlJPV1NFUiAqLworI2lmbmRlZiBOT1hGRVIKKyAg ICB7ICJieWUiLCAgICAgICAgIFhYQllFLCAwIH0sCS8qIEJZRSB0byByZW1vdGUgc2VydmVyICov CisjZW5kaWYgLyogTk9YRkVSICovCisjaWZuZGVmIE5PTE9DQUwKKyAgICB7ICJjIiwgICAgICAg ICAgIFhYQ09OLCBDTV9JTlZ8Q01fQUJSfENNX0xPQyB9LCAvKiAoQ09OTkVDVCkgKi8KKyNlbmRp ZiAvKiBOT0xPQ0FMICovCisjaWZuZGVmIE5PRlJJTExTCisgICAgeyAiY2F0IiwgICAgICAgICBY WENBVCwgQ01fSU5WIH0sCS8qIEludmlzaWJsZSBzeW5vbnltIGZvciBUWVBFICovCisjZW5kaWYg LyogTk9GUklMTFMgKi8KKyNpZm5kZWYgTk9TUEwKKworI2lmbmRlZiBOT1hGRVIKKyAgICB7ICJj YXV0aW91cyIsICAgIFhYQ0FVLCBDTV9JTlYgfSwKKyNlbmRpZiAvKiBOT1hGRVIgKi8KKworI2Vu ZGlmIC8qIE5PU1BMICovCisKKyAgICB7ICJjZCIsICAgICAgICAgIFhYQ1dELCAwIH0sCS8qIENo YW5nZSBEaXJlY3RvcnkgKi8KKyAgICB7ICJjZHVwIiwgICAgICAgIFhYQ0RVUCwgQ01fSU5WIH0s CS8qIENoYW5nZSBEaXJlY3RvcnkgVXAgKi8KKworI2lmbmRlZiBOT1hGRVIKKyNpZmRlZiBQSVBF U0VORAorICAgIHsgImNnZXQiLCAgICAgICAgWFhDR0VULCBDTV9JTlZ8Q01fUFNIIH0sIC8qIENH RVQgKi8KKyNlbHNlCisgICAgeyAiY2dldCIsICAgICAgICBYWE5PVEFWLCBDTV9JTlZ8Q01fUFNI IH0sIC8qIENHRVQgKi8KKyNlbmRpZiAvKiBQSVBFU0VORCAqLworI2VuZGlmIC8qIE5PWEZFUiAq LworICAgIHsgImNoIiwgICAgICAgICAgWFhDSEssICAgQ01fSU5WfENNX0FCUiB9LAorICAgIHsg ImNoZWNrIiwgICAgICAgWFhDSEssICAgMCB9LAkvKiBDSEVDSyBmb3IgYSBmZWF0dXJlICovCisj aWZkZWYgQ0tfUEVSTVMKKyNpZmRlZiBVTklYCisgICAgeyAiY2htb2QiLCAgICAgICBYWENITU9E LCAwIH0sCS8qIENITU9EICovCisjZWxzZQorICAgIHsgImNobW9kIiwgICAgICAgWFhOT1RBViwg Q01fSU5WIH0sCisjZW5kaWYgLyogVU5JWCAqLworI2Vsc2UKKyAgICB7ICJjaG1vZCIsICAgICAg IFhYTk9UQVYsIENNX0lOViB9LAorI2VuZGlmIC8qIENLX1BFUk1TICovCisjaWZkZWYgQ0tST09U CisgICAgeyAiY2hyb290IiwgICAgICBYWENIUlQsICBDTV9JTlYgfSwJLyogQ0hST09UICovCisj ZW5kaWYgLyogQ0tST09UICovCisgICAgeyAiY2tlcm1pdCIsICAgICBYWEtFUk1JLCBDTV9JTlYg fSwJLyogQ0tFUk1JVCAobGlrZSBLRVJNSVQpICovCisgICAgeyAiY2wiLCAgICAgICAgICBYWENM TywgICBDTV9BQlJ8Q01fSU5WIH0sCisjaWZuZGVmIE5PRlJJTExTCisgICAgeyAiY2xlYXIiLCAg ICAgICBYWENMRSwgMCB9LAkvKiBDTEVBUiBpbnB1dCBhbmQvb3IgZGV2aWNlIGJ1ZmZlciAqLwor I2Vsc2UKKyAgICB7ICJjbGVhciIsICAgICAgIFhYTk9UQVYsIENNX0lOViB9LAorI2VuZGlmIC8q IE5PRlJJTExTICovCisgICAgeyAiY2xvc2UiLAkgICAgIFhYQ0xPLCAwIH0sCS8qIENMT1NFIGEg bG9nIG9yIG90aGVyIGZpbGUgKi8KKyAgICB7ICJjbHMiLCAgICAgICAgIFhYQ0xTLCBDTV9JTlYg fSwJLyogQ2xlYXIgU2NyZWVuIChDTFMpICovCisgICAgeyAiY29tbWVudCIsICAgICBYWENPTSwg Q01fSU5WIH0sCS8qIEludHJvZHVjZSBhIGNvbW1lbnQgKi8KKyNpZm5kZWYgTk9MT0NBTAorICAg IHsgImNvbm5lY3QiLCAgICAgWFhDT04sIENNX0xPQyB9LAkvKiBCZWdpbiB0ZXJtaW5hbCBjb25u ZWN0aW9uICovCisjZWxzZQorICAgIHsgImNvbm5lY3QiLCAgICAgWFhOT1RBViwgQ01fTE9DIH0s CisjZW5kaWYgLyogTk9MT0NBTCAqLworICAgIHsgImNvbnRpbnVlIiwgICAgWFhDT05ULCAgQ01f SU5WIH0sCS8qIENPTlRJTlVFICovCisjaWZuZGVmIE5PRlJJTExTCisjaWZkZWYgWkNPUFkKKyAg ICB7ICJjbyIsICAgICAgICAgIFhYQ1BZLCBDTV9JTlZ8Q01fQUJSIH0sCisgICAgeyAiY29wIiwg ICAgICAgICBYWENQWSwgQ01fSU5WfENNX0FCUiB9LAorICAgIHsgImNvcHkiLCAgICAgICAgWFhD UFksIDAgfSwJLyogQ09QWSBhIGZpbGUgKi8KKyNlbHNlCisgICAgeyAiY29weSIsICAgICAgICBY WE5PVEFWLCBDTV9JTlYgfSwKKyNlbmRpZiAvKiBaQ09QWSAqLworICAgIHsgImNvcHlyaWdodCIs ICAgWFhDUFIsIENNX0lOViB9LAkvKiBDT1BZUklHSFQgKi8KKyNpZmRlZiBaQ09QWQorICAgIHsg ImNwIiwgICAgICAgICAgWFhDUFksIENNX0lOViB9LAkvKiBDT1BZIGEgZmlsZSAqLworI2VuZGlm IC8qIFpDT1BZICovCisjaWZuZGVmIE5PTE9DQUwKKyNpZm5kZWYgT1MyCisgICAgeyAiY3EiLCAg ICAgICAgICBYWENRLCBDTV9JTlZ8Q01fTE9DIH0sIC8qIENRIChjb25uZWN0IHF1aWV0bHkpICov CisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogTk9MT0NBTCAqLworI2lmbmRlZiBOT1hGRVIK KyNpZmRlZiBQSVBFU0VORAorICAgIHsgImNyZWNlaXZlIiwgICAgWFhDUkVDLENNX0lOVnxDTV9Q U0ggfSwgLyogUkVDRUlWRSB0byBhIGNvbW1hbmQgKi8KKyAgICB7ICJjc2VuZCIsICAgICAgIFhY Q1NFTixDTV9JTlZ8Q01fUFNIIH0sIC8qIFNFTkQgZnJvbSBjb21tYW5kICovCisjZWxzZQorICAg IHsgImNyZWNlaXZlIiwgICAgWFhOT1RBVixDTV9JTlZ8Q01fUFNIIH0sCisgICAgeyAiY3NlbmQi LCAgICAgICBYWE5PVEFWLENNX0lOVnxDTV9QU0ggfSwKKyNlbmRpZiAvKiBQSVBFU0VORCAqLwor I2VuZGlmIC8qIE5PWEZFUiAqLworI2VuZGlmIC8qIE5PRlJJTExTICovCisKKyAgICB7ICJjd2Qi LAkgICAgIFhYQ1dELCAgIENNX0lOViB9LAkvKiBUcmFkaXRpb25hbCBzeW5vbnltIGZvciBjZCAq LworCisjaWZuZGVmIE5PU1BMCisgICAgeyAiZGF0ZSIsICAgICAgICBYWERBVEUsICAwIH0sCS8q IERBVEUgKi8KKyAgICB7ICJkY2wiLCAgICAgICAgIFhYRENMLCAgIENNX0lOViB9LAkvKiBERUNM QVJFIGFuIGFycmF5IChzZWUgQVJSQVkpICovCisgICAgeyAiZGVidWciLCAgICAgICBYWERFQlVH LCAwIH0sCS8qIFByaW50IGEgZGVidWdnaW5nIG1zZyBbOS4wXSAgKi8KKyAgICB7ICJkZWNsYXJl IiwgICAgIFhYRENMLCAgIENNX0lOViB9LAkvKiBERUNMQVJFIGFuIGFycmF5IChzZWUgQVJSQVkp ICovCisgICAgeyAiZGVjcmVtZW50IiwgICBYWERFQywgICAwIH0sCS8qIERFQ1JFTUVOVCBhIG51 bWVyaWMgdmFyaWFibGUgKi8KKyAgICB7ICJkZWZpbmUiLCAgICAgIFhYREVGLCAgIDAgfSwJLyog REVGSU5FIGEgbWFjcm8gb3IgdmFyaWFibGUgICAqLworI2Vsc2UKKyAgICB7ICJkYXRlIiwgICAg ICAgIFhYTk9UQVYsIENNX0lOViB9LAorICAgIHsgImRjbCIsICAgICAgICAgWFhOT1RBViwgQ01f SU5WIH0sCisgICAgeyAiZGVjbGFyZSIsICAgICBYWE5PVEFWLCBDTV9JTlYgfSwKKyAgICB7ICJk ZWNyZW1lbnQiLCAgIFhYTk9UQVYsIENNX0lOViB9LAorICAgIHsgImRlZmluZSIsICAgICAgWFhO T1RBViwgQ01fSU5WIH0sCisjZW5kaWYgLyogTk9TUEwgKi8KKworI2lmbmRlZiBOT0ZSSUxMUwor ICAgIHsgImRlbGV0ZSIsICAgICAgWFhERUwsIDAgfSwJLyogREVMRVRFIGEgZmlsZSAqLworI2Vs c2UKKyAgICB7ICJkZWxldGUiLCAgICAgIFhYTk9UQVYsIENNX0lOViB9LAorI2VuZGlmIC8qIE5P RlJJTExTICovCisKKyNpZm5kZWYgTk9ESUFMCisgICAgeyAiZGlhbCIsICAgICAgICBYWERJQUws ICBDTV9MT0MgfSwJLyogRElBTCBhIHBob25lIG51bWJlciAqLworI2Vsc2UKKyAgICB7ICJkaWFs IiwgICAgICAgIFhYTk9UQVYsIENNX0lOVnxDTV9MT0MgfSwKKyNlbmRpZiAvKiBOT0RJQUwgKi8K KworI2lmZGVmIE5UCisgICAgeyAiZGlhbGVyIiwgICAgICBYWERJQUxFUiwgQ01fSU5WIH0sIC8q IEs5NSBEaWFsZXIgKi8KKyNlbmRpZiAvKiBOVCAqLworCisgICAgeyAiZGlyZWN0b3J5IiwgICBY WERJUiwgMCB9LAkvKiBESVJFQ1RPUlkgb2YgZmlsZXMgKi8KKworI2lmbmRlZiBOT0ZSSUxMUwor I2lmbmRlZiBOT1NFUlZFUgorICAgIHsgImRpc2FibGUiLCAgICAgWFhESVMsIDAgfSwJLyogRElT QUJMRSBhIHNlcnZlciBmdW5jdGlvbiAqLworI2Vsc2UKKyAgICB7ICJkaXNhYmxlIiwgICAgIFhY Tk9UQVYsIENNX0lOViB9LAorI2VuZGlmIC8qIE5PU0VSVkVSICovCisjZW5kaWYgLyogTk9GUklM TFMgKi8KKworI2lmbmRlZiBOT1NQTAorICAgIHsgImRvIiwgICAgICAgICAgWFhETywgIDAgfSwJ LyogRE8gKGV4ZWN1dGUpIGEgbWFjcm8gKi8KKyNlbHNlCisgICAgeyAiZG8iLCAgICAgICAgICBY WE5PVEFWLCBDTV9JTlYgfSwKKyNlbmRpZiAvKiBOT1NQTCAqLworCisgICAgeyAiZSIsICAgICAg ICAgICBYWEVYSSwgQ01fSU5WfENNX0FCUiB9LAorCisjaWZuZGVmIE5PRlJJTExTCisjaWZuZGVm IE5PWEZFUgorICAgIHsgImUtcGFja2V0IiwgICAgWFhFUlIsIENNX0lOViB9LAkvKiBTZW5kIGFu IEVycm9yLVBhY2tldCAqLworI2VuZGlmIC8qIE5PWEZFUiAqLworI2VuZGlmIC8qIE5PRlJJTExT ICovCisKKyAgICB7ICJlY2hvIiwgICAgICAgIFhYRUNILCAwIH0sCS8qIEVDSE8gdGV4dCAqLwor CisjaWZuZGVmIE5PRlJJTExTCisjaWZuZGVmIE5PUFVTSAorICAgIHsgImVkaXQiLCAgICAgICAg WFhFRElULCBDTV9QU0ggfSwJLyogRURJVCAqLworI2Vsc2UKKyAgICB7ICJlZGl0IiwgICAgICAg IFhYTk9UQVYsIENNX0lOVnxDTV9QU0ggfSwgLyogRURJVCAqLworI2VuZGlmIC8qIE5PUFVTSCAq LworI2VuZGlmIC8qIE5PRlJJTExTICovCisKKyAgICB7ICJlaWdodGJpdCIsICAgIFhYRUlHSFQs IENNX0lOViB9LAkvKiBFSUdIVEJJVCAqLworCisjaWZuZGVmIE5PU1BMCisgICAgeyAiZWxzZSIs ICAgICAgICBYWEVMUywgQ01fSU5WIH0sCS8qIEVMU0UgcGFydCBvZiBJRiBzdGF0ZW1lbnQgKi8K KyNlbHNlCisgICAgeyAiZWxzZSIsICAgICAgICBYWE5PVEFWLCBDTV9JTlYgfSwJLyogRUxTRSBw YXJ0IG9mIElGIHN0YXRlbWVudCAqLworI2VuZGlmIC8qIE5PU1BMICovCisKKyNpZm5kZWYgTk9T RVJWRVIKKyNpZm5kZWYgTk9GUklMTFMKKyAgICB7ICJlbmFibGUiLCAgICAgIFhYRU5BLCAgMCB9 LAkvKiBFTkFCTEUgYSBzZXJ2ZXIgZnVuY3Rpb24gKi8KKyNlbHNlCisgICAgeyAiZW5hYmxlIiwg ICAgICBYWE5PVEFWLCBDTV9JTlYgfSwKKyNlbmRpZiAvKiBOT0ZSSUxMUyAqLworI2VuZGlmIC8q IE5PU0VSVkVSICovCisKKyNpZm5kZWYgTk9TUEwKKyAgICB7ICJlbmQiLCAgICAgICAgIFhYRU5E LCAgMCB9LAkvKiBFTkQgY29tbWFuZCBmaWxlIG9yIG1hY3JvICovCisjZWxzZQorICAgIHsgImVu ZCIsICAgICAgICAgWFhOT1RBViwgQ01fSU5WIH0sCisjZW5kaWYgLyogTk9TUEwgKi8KKworICAg IHsgImVyYXNlIiwgICAgICAgWFhERUwsIENNX0lOViB9LAkvKiBTeW5vbnltIGZvciBERUxFVEUg Ki8KKworI2lmbmRlZiBOT1NQTAorICAgIHsgImV2YWx1YXRlIiwgICAgWFhFVkFMLCAwIH0sCS8q IEVWQUxVQVRFICovCisjZWxzZQorICAgIHsgImV2YWx1YXRlIiwgICAgWFhOT1RBViwgQ01fSU5W IH0sCisjZW5kaWYgLyogTk9TUEwgKi8KKworICAgIHsgImV4IiwgICAgICAgICAgWFhFWEksIENN X0lOVnxDTV9BQlIgfSwgLyogTGV0ICJleCIgc3RpbGwgYmUgRVhJVCAqLworCisjaWZkZWYgQ0tF WEVDCisgICAgeyAiZXhlYyIsICAgICAgICBYWEVYRUMsIENNX0lOVnxDTV9MT0MgfSwgLyogZXhl YygpICovCisjZWxzZQorICAgIHsgImV4ZWMiLCAgICAgICAgWFhOT1RBViwgQ01fSU5WfENNX0xP QyB9LAorI2VuZGlmIC8qIENLRVhFQyAqLworCisgICAgeyAiZXhpdCIsCSAgIFhYRVhJLCAwIH0s CQkvKiBFWElUIGZyb20gQy1LZXJtaXQgKi8KKyAgICB7ICJleHRlbmRlZC1vcHRpb25zIiwgWFhY T1BUUyxDTV9JTlZ8Q01fSExQIH0sIC8qIEV4dGVuZGVkLU9wdGlvbnMgKi8KKworI2lmZGVmIE9T MgorICAgIHsgImV4dHByb2MiLCAgICAgWFhDT00sIENNX0lOViB9LAkvKiBEdW1teSBjb21tYW5k IGZvciBPUy8yICovCisjZW5kaWYgLyogT1MyICovCisKKyNpZm5kZWYgTk9YRkVSCisgICAgeyAi ZiIsICAgICAgICAgICBYWEZJTiwgQ01fSU5WfENNX0FCUiB9LCAvKiBJbnZpc2libGUgYWJicmV2 IGZvciBGSU4gKi8KKyNlbmRpZiAvKiBOT1hGRVIgKi8KKworI2lmbmRlZiBOT1NQTAorICAgIHsg ImZhaWwiLCAgICAgICAgWFhGQUlMLCBDTV9JTlYgfSwJLyogRkFJTCAqLworCisjaWZuZGVmIE5P WEZFUgorICAgIHsgImZhc3QiLCAgICAgICAgWFhGQVNULCBDTV9JTlYgfSwKKyNlbmRpZiAvKiBO T1hGRVIgKi8KKworI2lmZGVmIENLQ0hBTk5FTElPCisgICAgeyAiZmNsb3NlIiwgICAgICBYWEZf Q0wsIENNX0lOViB9LAkvKiBGQ0xPU0UgKi8KKyAgICB7ICJmY291bnQiLCAgICAgIFhYRl9DTywg Q01fSU5WIH0sCS8qIEZDT1VOVCAqLworICAgIHsgImZmbHVzaCIsICAgICAgWFhGX0ZMLCBDTV9J TlYgfSwJLyogRkZMVVNIICovCisjZW5kaWYgLyogQ0tDSEFOTkVMSU8gKi8KKworI2lmbmRlZiBO T1hGRVIKKyAgICB7ICJmaSIsICAgICAgICAgIFhYRklOLCBDTV9JTlZ8Q01fQUJSIH0sIC8qIEZJ TklTSCAqLworI2VuZGlmIC8qIE5PWEZFUiAqLworCisjaWZkZWYgQ0tDSEFOTkVMSU8KKyAgICB7 ICJmaWxlIiwgICAgICAgIFhYRklMRSwgMCB9LAkvKiBGSUxFICovCisjZW5kaWYgLyogQ0tDSEFO TkVMSU8gKi8KKyNlbmRpZiAvKiBOT1NQTCAqLworCisjaWZuZGVmIE5PWEZFUgorICAgIHsgImZp biIsICAgICAgICAgWFhGSU4sIENNX0lOVnxDTV9BQlIgfSwgLyogRklOSVNIICovCisjZW5kaWYg LyogTk9YRkVSICovCisKKyNpZm5kZWYgVU5JWE9ST1NLCisgICAgeyAiZmluZCIsICAgICAgICBY WEdSRVAsIDAgfSwJLyogRklORCAoZ3JlcCkgKi8KKyNlbHNlCisgICAgeyAiZmluZCIsICAgICAg ICBYWEdSRVAsQ01fSU5WIH0sCisjZW5kaWYgLyogVU5JWE9ST1NLICovCisKKyNpZm5kZWYgTk9Y RkVSCisgICAgeyAiZmluaXNoIiwgICAgICBYWEZJTiwgMCB9LAkvKiBGSU5JU0ggKi8KKyNlbmRp ZiAvKiBOT1hGRVIgKi8KKworI2lmZGVmIFRDUFNPQ0tFVAorICAgIHsgImZpcmV3YWxsIiwgICAg WFhGSVJFVywgQ01fSU5WfENNX0hMUCB9LAorI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLworCisjaWZk ZWYgQ0tDSEFOTkVMSU8KKyAgICB7ICJmbGlzdCIsICAgICAgIFhYRl9MSSwgQ01fSU5WIH0sCS8q IEZMSVNUICovCisgICAgeyAiZm9wZW4iLCAgICAgICBYWEZfT1AsIENNX0lOViB9LAkvKiBGT1BF TiAqLworI2VuZGlmIC8qIENLQ0hBTk5FTElPICovCisKKyNpZm5kZWYgTk9TUEwKKyAgICB7ICJm byIsICAgICAgICAgIFhYRk9SLCBDTV9JTlZ8Q01fQUJSIH0sIC8qIEludmlzaWJsZSBhYmJyZXYg Zm9yLi4uICovCisgICAgeyAiZm9yIiwgICAgICAgICBYWEZPUiwgMCB9LAkvKiBGT1IgbG9vcCAq LworICAgIHsgImZvcndhcmQiLCAgICAgWFhGV0QsIENNX0lOViB9LAkvKiBGT1JXQVJEICovCisj ZW5kaWYgLyogTk9TUEwgKi8KKyNpZm5kZWYgTk9GUklMTFMKKyAgICB7ICJmb3QiLAkgICBYWERJ UiwgQ01fSU5WIH0sCS8qICJmb3QiID0gImRpciIgKGZvciBDaHJpcykgKi8KKyNlbmRpZiAvKiBO T0ZSSUxMUyAqLworCisjaWZkZWYgQ0tDSEFOTkVMSU8KKyAgICB7ICJmcmVhZCIsICAgICAgWFhG X1JFLCBDTV9JTlYgfSwJLyogRlJFQUQgKi8KKyAgICB7ICJmcmV3aW5kIiwgICAgWFhGX1JXLCBD TV9JTlYgfSwJLyogRlJFV0lORCAqLworICAgIHsgImZzZWVrIiwgICAgICBYWEZfU0UsIENNX0lO ViB9LAkvKiBGU0VFSyAqLworICAgIHsgImZzdGF0dXMiLCAgICBYWEZfU1QsIENNX0lOViB9LAkv KiBGU1RBVFVTICovCisjZW5kaWYgLyogQ0tDSEFOTkVMSU8gKi8KKworI2lmZGVmIFRDUFNPQ0tF VAorI2lmbmRlZiBOT0ZUUAorI2lmZGVmIFNZU0ZUUAorI2lmbmRlZiBOT1BVU0gKKyAgICB7ICJm dHAiLAkgICBYWEZUUCwgICBDTV9JTlZ8Q01fUFNIfENNX0xPQyB9LCAvKiBTeXN0ZW0gRlRQICov CisjZWxzZQorICAgIHsgImZ0cCIsCSAgIFhYTk9UQVYsIENNX0lOVnxDTV9QU0h8Q01fTE9DIH0s CisjZW5kaWYgLyogTk9QVVNIICovCisjZWxzZSAgLyogU1lTRlRQICovCisgICAgeyAiZnRwIiwJ ICAgWFhGVFAsICAgMCB9LAkvKiBCdWlsdC1pbiBGVFAgKi8KKyNlbmRpZiAvKiBTWVNGVFAgKi8K KyNlbHNlICAvKiBOT0ZUUCAqLworICAgIHsgImZ0cCIsCSAgIFhYTk9UQVYsIENNX0lOViB9LAkv KiBObyBGVFAgKi8KKyNlbmRpZiAvKiBOT0ZUUCAqLworI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLwor CisjaWZuZGVmIE5PU1BMCisgICAgeyAiZnVuY3Rpb24iLCAgICBYWEZVTkMsIENNX0lOVnxDTV9I TFAgfSwgLyogKGZvciBIRUxQIEZVTkNUSU9OKSAqLworI2VuZGlmIC8qIE5PU1BMICovCisKKyNp ZmRlZiBDS0NIQU5ORUxJTworICAgIHsgImZ3cml0ZSIsICAgICAgWFhGX1dSLCBDTV9JTlYgfSwJ LyogRldSSVRFICovCisjZW5kaWYgLyogQ0tDSEFOTkVMSU8gKi8KKworI2lmbmRlZiBOT1hGRVIK KyAgICB7ICJnIiwgICAgICAgICAgIFhYR0VULCBDTV9JTlZ8Q01fQUJSIH0sIC8qIEludmlzaWJs ZSBhYmJyZXYgZm9yIEdFVCAqLworI2lmbmRlZiBOT1NQTAorICAgIHsgImdlIiwgICAgICAgICAg WFhHRVQsIENNX0lOVnxDTV9BQlIgfSwgLyogRGl0dG8gKi8KKyNlbmRpZiAvKiBOT1NQTCAqLwor ICAgIHsgImdldCIsICAgICAgICAgWFhHRVQsIDAgfSwJLyogR0VUICovCisjZW5kaWYgLyogTk9Y RkVSICovCisjaWZuZGVmIE5PU1BMCisgICAgeyAiZ2V0YyIsICAgICAgICBYWEdFVEMsIDAgfSwJ LyogR0VUQyAqLworI2lmZGVmIE9TMgorICAgIHsgImdldGtleWNvZGUiLCAgWFhHRVRLLCAwIH0s CS8qIEdFVEtFWUNPREUgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyNpZm5kZWYgTk9GUklMTFMKKyAg ICB7ICJnZXRvayIsICAgICAgIFhYR09LLCAwIH0sCS8qIEdFVE9LIChhc2sgZm9yIFllcy9Oby9P SykgKi8KKyNlbmRpZiAvKiBOT0ZSSUxMUyAqLworI2VuZGlmIC8qIE5PU1BMICovCisjaWZuZGVm IE5PU1BMCisgICAgeyAiZ290byIsICAgICAgICBYWEdPVE8sMCB9LAkvKiBHT1RPIGxhYmVsIGlu IHRha2UgZmlsZSBvciBtYWNybyAqLworI2VuZGlmIC8qIE5PU1BMICovCisjaWZkZWYgVU5JWE9S T1NLCisgICAgeyAiZ3JlcCIsICAgICAgICBYWEdSRVAsMCB9LAkvKiBHUkVQIChmaW5kKSAqLwor I2Vsc2UKKyAgICB7ICJncmVwIiwgICAgICAgIFhYR1JFUCxDTV9JTlYgfSwJLyogR1JFUCAoZmlu ZCkgKi8KKyNlbmRpZiAvKiBVTklYT1JPU0sgKi8KKyAgICB7ICJoIiwgICAgICAgICAgIFhYSExQ LCBDTV9JTlZ8Q01fQUJSIH0sIC8qIEludmlzaWJsZSBzeW5vbnltIGZvciBIRUxQICovCisgICAg eyAiaGUiLCAgICAgICAgICBYWEhMUCwgQ01fSU5WfENNX0FCUiB9LCAvKiBJbnZpc2libGUgc3lu b255bSBmb3IgSEVMUCAqLworI2lmbmRlZiBOT0ZSSUxMUworICAgIHsgImhlYWQiLCAgICAgICAg WFhIRUFELCAwIH0sCisjZW5kaWYgLyogTk9GUklMTFMgKi8KKyNpZm5kZWYgTk9MT0NBTAorICAg IHsgImhhbmd1cCIsICAgICAgWFhIQU4sIENNX0xPQyB9LAkvKiBIQU5HVVAgdGhlIGNvbm5lY3Rp b24gKi8KKyNlbmRpZiAvKiBOT0xPQ0FMICovCisgICAgeyAiaGRpcmVjdG9yeSIsICBYWEhESVIs ICBDTV9JTlYgfSwJLyogRElSIHNvcnRlZCBieSBzaXplIGJpZ2dlc3QgZmlyc3QgKi8KKyAgICB7 ICJIRUxQIiwgICAgICAgIFhYSExQLCAwIH0sCS8qIERpc3BsYXkgSEVMUCB0ZXh0ICovCisjaWZu ZGVmIE5PSFRUUAorI2lmZGVmIFRDUFNPQ0tFVAorICAgIHsgImh0dHAiLCAgICAgICAgWFhIVFRQ LCAwIH0sCS8qIEhUVFAgb3BlcmF0aW9ucyAqLworI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLworI2Vu ZGlmIC8qIE5PSFRUUCAqLworI2lmbmRlZiBOT1NQTAorICAgIHsgImkiLCAgICAgICAgICAgWFhJ TlAsIENNX0lOVnxDTV9BQlIgfSwgLyogSW52aXNpYmxlIHN5bm9ueW0gZm9yIElOUFVUICovCisg ICAgeyAiaWYiLCAgICAgICAgICBYWElGLCAgMCB9LAkgICAgIC8qIElGICggY29uZGl0aW9uICkg Y29tbWFuZCAqLworI2lmZGVmIFRDUFNPQ0tFVAorICAgIHsgImlrc2QiLCAgICAgICAgWFhJS1NE LCBDTV9JTlYgfSwJICAgICAvKiBNYWtlIGNvbm5lY3Rpb24gdG8gSUtTRCAqLworI2Vsc2UKKyAg ICB7ICJpa3NkIiwgICAgICAgIFhYTk9UQVYsIENNX0lOViB9LAorI2VuZGlmIC8qIFRDUFNPQ0tF VCAqLworICAgIHsgImluIiwgICAgICAgICAgWFhJTlAsIENNX0lOVnxDTV9BQlIgfSwgLyogSW52 aXNpYmxlIHN5bm9ueW0gZm9yIElOUFVUICovCisgICAgeyAiaW5jcmVtZW50IiwgICBYWElOQywg MCB9LAkvKiBJbmNyZW1lbnQgYSBudW1lcmljIHZhcmlhYmxlICovCisgICAgeyAiaW5wdXQiLCAg ICAgICBYWElOUCwgMCB9LAkvKiBJTlBVVCB0ZXh0IGZyb20gY29tbSBkZXZpY2UgKi8KKyNlbmRp ZiAvKiBOT1NQTCAqLworCisjaWZuZGVmIE5PSEVMUAorICAgIHsgImludCIsICAgICAgICAgWFhJ TlQsIENNX0lOVnxDTV9BQlIgfSwKKyAgICB7ICJpbnRyIiwgICAgICAgIFhYSU5ULCBDTV9JTlZ8 Q01fQUJSIH0sCisgICAgeyAiSU5UUk8iLCAgICAgICBYWElOVCwgMCB9LAorICAgIHsgImludHJv ZHVjdGlvbiIsWFhJTlQsIENNX0lOViB9LAkvKiBQcmludCBpbnRyb2R1Y3RvcnkgdGV4dCAqLwor I2Vsc2UKKyAgICB7ICJpbnRybyIsICAgICAgIFhYTk9UQVYsIENNX0lOViB9LAorICAgIHsgImlu dHJvZHVjdGlvbiIsWFhOT1RBViwgQ01fSU5WIH0sCisjZW5kaWYgLyogTk9IRUxQICovCisKKyNp ZmRlZiBPUzIKKyAgICB7ICJrOTUiLCAgICAgICAgIFhYS0VSTUksIENNX0lOViB9LAkvKiBIbW1t IHdoYXQncyB0aGlzLi4uICovCisjZW5kaWYgLyogT1MyICovCisKKyNpZm5kZWYgTk9TUEwKKyAg ICB7ICJrY2QiLCAgICAgICAgIFhYS0NELCAgIDAgICAgICB9LAorI2VuZGlmIC8qIE5PU1BMICov CisKKyAgICB7ICJrZXJtaXQiLCAgICAgIFhYS0VSTUksIENNX0lOViB9LAorCisjaWZkZWYgT1My CisjaWZuZGVmIE5PS1ZFUkJTCisgICAgeyAia3ZlcmIiLCAgICAgICBYWEtWUkIsIENNX0lOVnxD TV9ITFAgfSwgLyogS2V5Ym9hcmQgdmVyYiAqLworI2VuZGlmIC8qIE5PS1ZFUkJTICovCisjZW5k aWYgLyogT1MyICovCisKKyNpZm5kZWYgTk9GUklMTFMKKyAgICB7ICJsIiwgICAgICAgICAgIFhY TE9HLCBDTV9JTlZ8Q01fQUJSIH0sIC8qIEludmlzaWJsZSBzeW5vbnltIGZvciBsb2cgKi8KKyNl bmRpZiAvKiBOT0ZSSUxMUyAqLworCisgICAgeyAibGNkIiwgICAgICAgICBYWExDV0QsIENNX0lO ViB9LAorICAgIHsgImxjZHVwIiwgICAgICAgWFhMQ0RVLCBDTV9JTlYgfSwKKyAgICB7ICJsY3dk IiwgICAgICAgIFhYTENXRCwgQ01fSU5WIH0sCisgICAgeyAibGRlbGV0ZSIsICAgICBYWExERUws IENNX0lOViB9LAorICAgIHsgImxkaXJlY3RvcnkiLCAgWFhMRElSLCBDTV9JTlYgfSwKKworI2lm ZGVmIENLTEVBUk4KKyAgICB7ICJsZWFybiIsICAgICAgIFhYTEVBUk4sIDAgfSwJLyogTEVBUk4g LSBhdXRvbWF0aWMgc2NyaXB0IHdyaXRpbmcgKi8KKyNlbHNlCisgICAgeyAibGVhcm4iLCAgICAg ICBYWE5PVEFWLCBDTV9JTlYgfSwKKyNlbmRpZiAvKiBDS0xFQVJOICovCisKKyAgICB7ICJsaSIs ICAgICAgICAgIFhYTE5PVVQsIENNX0lOVnxDTV9BQlIgfSwKKyAgICB7ICJMSUNFTlNFIiwgICAg IFhYQ1BSLCAwIH0sCS8qIExJQ0VOU0UgKi8KKworI2lmbmRlZiBOT1NQTAorICAgIHsgImxpbmVv dXQiLCAgICAgWFhMTk9VVCwgMCB9LAkvKiBMSU5FT1VUID0gT1VUUFVUICsgZW9sICovCisjZW5k aWYgLyogTk9TUEwgKi8KKworI2lmZGVmIE5UCisgICAgeyAibGluayIsICAgICAgICBYWExJTkss IDAgfSwgICAgICAgLyogTElOSyBzb3VyY2UgZGVzdGluYXRpb24gKi8KKyNlbmRpZiAvKiBOVCAq LworCisgICAgeyAibG1rZGlyIiwgICAgICBYWExNS0QsIENNX0lOViB9LAorICAgIHsgImxtdiIs ICAgICAgICAgWFhMUkVOLCBDTV9JTlYgfSwKKworI2lmbmRlZiBOT0ZSSUxMUworICAgIHsgImxv IiwgICAgICAgICAgWFhMT0csICBDTV9JTlZ8Q01fQUJSIH0sIC8qIEludmlzaWJsZSBzeW5vbnlt IGZvciBsb2cgKi8KKyNlbmRpZiAvKiBOT0ZSSUxMUyAqLworCisjaWZuZGVmIE5PU1BMCisgICAg eyAibG9jYWwiLCAgICAgICBYWExPQ0FMLCBDTV9JTlYgfSwJLyogTE9DQUwgdmFyaWFibGUgZGVj bGFyYXRpb24gKi8KKyNlbHNlCisgICAgeyAibG9jYWwiLCAgICAgICBYWE5PVEFWLCBDTV9JTlYg fSwKKyNlbmRpZiAvKiBOT1NQTCAqLworCisgICAgeyAibG9jdXMiLCAgICAgICBYWExPQ1UsIENN X0lOVnxDTV9ITFAgfSwgLyogImhlbHAgbG9jdXMiICovCisKKyAgICB7ICJsb2ciLCAgCSAgICAg WFhMT0csIDAgfSwJLyogT3BlbiBhIGxvZyBmaWxlICovCisKKyAgICB7ICJsb2dpbiIsICAgICAg IFhYTE9HSU4sICAwIH0sCS8qIChSRU1PVEUpIExPR0lOIHRvIHNlcnZlciBvciBJS1NEICovCisg ICAgeyAibG9nb3V0IiwgICAgICBYWExPR09VVCwgMCB9LAkvKiBMT0dPVVQgZnJvbSBzZXJ2ZXIg b3IgSUtTRCAqLworCisjaWZuZGVmIE5PRlJJTExTCisjaWZuZGVmIE5PRElBTAorICAgIHsgImxv b2t1cCIsICAgICAgWFhMT09LLCAgMCB9LAkvKiBMT09LVVAgKi8KKyNlbHNlCisgICAgeyAibG9v a3VwIiwgICAgICBYWE5PVEFWLCBDTV9JTlYgfSwKKyNlbmRpZiAvKiBOT0RJQUwgKi8KKworICAg IHsgImxwd2QiLCAgICAgICAgWFhMUFdELCBDTV9JTlYgfSwKKyAgICB7ICJscmVuYW1lIiwgICAg IFhYTFJFTiwgQ01fSU5WIH0sCisgICAgeyAibHJtZGlyIiwgICAgICBYWExSTUQsIENNX0lOViB9 LAorCisjaWZkZWYgVU5JWE9ST1NLCisgICAgeyAibHMiLCAgICAgICAgICBYWExTLCAgQ01fSU5W fENNX1BTSCB9LCAvKiBVTklYIGxzIGNvbW1hbmQgKi8KKyNlbHNlCisgICAgeyAibHMiLCAgICAg ICAgICBYWERJUiwgQ01fSU5WIH0sCS8qIEludmlzaWJsZSBzeW5vbnltIGZvciBESVIgKi8KKyNl bmRpZiAvKiBVTklYT1JPU0sgKi8KKyNpZm5kZWYgTk9YRkVSCisgICAgeyAibWFpbCIsICAgICAg ICBYWE1BSSwgMCB9LAkvKiBTZW5kIGEgZmlsZSBhcyBlLW1haWwgKi8KKyNlbmRpZiAvKiBOT1hG RVIgKi8KKyNpZm5kZWYgTk9IRUxQCisgICAgeyAibWFudWFsIiwgICAgICBYWE1BTiwgQ01fUFNI IH0sCS8qIE1BTihVQUwpICovCisjZWxzZQorICAgIHsgIm1hbnVhbCIsICAgICAgWFhOT1RBViwg Q01fSU5WfENNX1BTSCB9LAorI2VuZGlmIC8qIE5PSEVMUCAqLworI2VuZGlmIC8qIE5PRlJJTExT ICovCisjaWZkZWYgQ0tfTUtESVIKKyAgICB7ICJtZCIsICAgICAgICAgIFhYTUtESVIsIENNX0lO ViB9LAkvKiBTeW5vbnltIGZvciBNS0RJUiAqLworI2VuZGlmIC8qIENLX01LRElSICovCisgICAg eyAibWVzc2FnZSIsICAgICBYWE1TRywgMCB9LAkvKiBQcmludCBkZWJ1Z2dpbmcgbWVzc2FnZSAq LworI2lmZGVmIENLX01JTlBVVAorICAgIHsgIm1pbnB1dCIsICAgICAgWFhNSU5QLCAwIH0sCS8q IE1JTlBVVCAqLworI2Vsc2UKKyAgICB7ICJtaW5wdXQiLCAgICAgIFhYTk9UQVYsIENNX0lOViB9 LAorI2VuZGlmIC8qIENLX01JTlBVVCAqLworI2lmbmRlZiBOT01TRU5ECisgICAgeyAibWdldCIs ICAgICAgICBYWE1HRVQsIDAgfSwJLyogTUdFVCAqLworI2Vsc2UKKyAgICB7ICJtZ2V0IiwgICAg ICAgIFhYTk9UQVYsIENNX0lOViB9LAorI2VuZGlmIC8qIE5PTVNFTkQgKi8KKyNpZmRlZiBDS19N S0RJUgorICAgIHsgIm1rZGlyIiwgICAgICAgWFhNS0RJUiwgMCB9LAkvKiBNS0RJUiAqLworI2Vs c2UKKyAgICB7ICJta2RpciIsICAgICAgIFhYTk9UQVYsIENNX0lOViB9LAorI2VuZGlmIC8qIENL X01LRElSICovCisKKyNpZm5kZWYgTk9YRkVSCisjaWZuZGVmIE5PTVNFTkQKKyAgICB7ICJtbW92 ZSIsICAgICAgIFhYTU1PVkUsIDAgfSwJLyogTU1PVkUgKi8KKyNlbHNlCisgICAgeyAibW1vdmUi LCAgICAgICBYWE5PVEFWLCBDTV9JTlYgfSwKKyNlbmRpZiAvKiBOT01TRU5EICovCisjZW5kaWYg LyogTk9YRkVSICovCisKKyNpZm5kZWYgTk9GUklMTFMKKyAgICB7ICJtb3JlIiwgICAgICAgIFhY TU9SRSwgQ01fSU5WIH0sCS8qIE1PUkUgKi8KKyNlbmRpZiAvKiBOT0ZSSUxMUyAqLworCisjaWZu ZGVmIE5PWEZFUgorICAgIHsgIm1vdmUiLCAgICAgICAgWFhNT1ZFLCAwIH0sCS8qIE1PVkUgICov CisjZW5kaWYgLyogTk9YRkVSICovCisKKyNpZm5kZWYgTk9TUEwKKyAgICB7ICJtcGF1c2UiLCAg ICAgIFhYTVNMLCBDTV9JTlYgfSwJLyogTWlsbGlzZWNvbmQgc2xlZXAgKi8KKyNlbHNlCisgICAg eyAibXBhdXNlIiwgICAgICBYWE5PVEFWLCBDTV9JTlYgfSwKKyNlbmRpZiAvKiBOT1NQTCAqLwor CisjaWZuZGVmIE5PWEZFUgorI2lmbmRlZiBOT01TRU5ECisgICAgeyAibXB1dCIsICAgICAgICBY WE1TRSwgQ01fSU5WIH0sCS8qIE1QVVQgPSBNU0VORCAqLworICAgIHsgIm1zIiwgICAgICAgICAg WFhNU0UsIENNX0lOVnxDTV9BQlIgfSwKKyAgICB7ICJtc2VuZCIsICAgICAgIFhYTVNFLCAwIH0s CS8qIE11bHRpcGxlIFNFTkQgKi8KKyNlbHNlCisgICAgeyAibXB1dCIsICAgICAgICBYWE5PVEFW LCBDTV9JTlYgfSwKKyAgICB7ICJtc2VuZCIsICAgICAgIFhYTk9UQVYsIENNX0lOViB9LAorI2Vu ZGlmIC8qIE5PTVNFTkQgKi8KKyNlbmRpZiAvKiBOT1hGRVIgKi8KKyAgICB7ICJtc2ciLCAgICAg ICAgIFhYTVNHLCBDTV9JTlYgfSwJLyogUHJpbnQgZGVidWdnaW5nIG1lc3NhZ2UgKi8KKyNpZm5k ZWYgTk9TUEwKKyAgICB7ICJtc2xlZXAiLCAgICAgIFhYTVNMLCAwIH0sCS8qIE1pbGxpc2Vjb25k IHNsZWVwICovCisjZWxzZQorICAgIHsgIm1zbGVlcCIsICAgICAgWFhOT1RBViwgQ01fSU5WIH0s CisjZW5kaWYgLyogTk9TUEwgKi8KKyNpZm5kZWYgTk9GUklMTFMKKyAgICB7ICJtdiIsICAgICAg ICAgIFhYUkVOLCBDTV9JTlYgfSwJLyogU3lub255bSBmb3IgcmVuYW1lICovCisjZW5kaWYgLyog Tk9GUklMTFMgKi8KKyNpZm5kZWYgTk9IRUxQCisgICAgeyAibmV3cyIsICAgICAgICBYWE5FVywg Q01fSU5WIH0sCS8qIERpc3BsYXkgTkVXUyBvZiBuZXcgZmVhdHVyZXMgKi8KKyNlbHNlCisgICAg eyAibmV3cyIsICAgICAgICBYWE5PVEFWLCBDTV9JTlYgfSwKKyNlbmRpZiAvKiBOT0hFTFAgKi8K KyAgICB7ICJub2xvY2FsIiwgICAgIFhYTkxDTCwgQ01fSU5WIH0sCS8qIERpc2FibGUgU0VUIExJ TkUgLyBTRVQgSE9TVCAqLworICAgIHsgIm5vcHVzaCIsICAgICAgWFhOUFNILCBDTV9JTlYgfSwJ LyogRGlzYWJsZSBQVVNIIGNvbW1hbmQvZmVhdHVyZXMgKi8KKyNpZmRlZiBPUzIKKyAgICB7ICJu b3Njcm9sbCIsICAgIFhYTlNDUiwgQ01fSU5WIH0sICAvKiBEaXNhYmxlIHNjcm9sbCBvcGVyYXRp b25zICovCisjZW5kaWYgLyogT1MyICovCisjaWZuZGVmIE5PU1BMCisgICAgeyAibyIsICAgICAg ICAgICBYWE9VVCwgQ01fSU5WfENNX0FCUiB9LCAvKiBJbnZpc2libGUgc3lub255bSBmb3IgT1VU UFVUICovCisgICAgeyAib3BlbiIsICAgICAgICBYWE9QRSwgMCB9LAkvKiBPUEVOIGZpbGUgZm9y IHJlYWRpbmcgb3Igd3JpdGluZyAqLworI2Vsc2UKKyAgICB7ICJvcGVuIiwgICAgICAgIFhYT1BF LCBDTV9JTlYgfSwJLyogT1BFTiAqLworI2VuZGlmIC8qIE5PU1BMICovCisjaWZuZGVmIE5PSEVM UAorICAgIHsgIm9wdGlvbnMiLCAgICAgWFhPUFRTLENNX0lOVnxDTV9ITFAgfSwgLyogT3B0aW9u cyAqLworI2VuZGlmIC8qIE5PSEVMUCAqLworICAgIHsgIm9yaWVudGF0aW9uIiwgWFhPUklFLCAw IH0sCisjaWZuZGVmIE5PU1BMCisgICAgeyAib3V0cHV0IiwgICAgICBYWE9VVCwgMCB9LAkvKiBP VVRQVVQgdGV4dCB0byBjb21tIGRldmljZSAqLworI2Vsc2UKKyAgICB7ICJvdXRwdXQiLCAgICAg IFhYTk9UQVYsIENNX0lOViB9LAorI2VuZGlmIC8qIE5PU1BMICovCisjaWZkZWYgQU5ZWDI1Cisj aWZuZGVmIElCTVgyNQorICAgIHsgInBhZCIsICAgICAgICAgWFhQQUQsIENNX0xPQyB9LAkvKiBY LjMgUEFEIGNvbW1hbmRzICovCisjZW5kaWYgLyogSUJNWDI1ICovCisjZW5kaWYgLyogQU5ZWDI1 ICovCisKKyNpZmRlZiBORVdGVFAKKyAgICB7ICJwYXNzaXZlIiwgICAgIFhYUEFTViwgQ01fSU5W IH0sCS8qIChGVFApIFBBU1NJVkUgKi8KKyNlbmRpZiAvKiBORVdGVFAgKi8KKworI2lmbmRlZiBO T0hFTFAKKyAgICB7ICJwYXR0ZXJucyIsICAgIFhYUEFULENNX0lOVnxDTV9ITFAgfSwgLyogUGF0 dGVybiBzeW50YXggKi8KKyNlbmRpZiAvKiBOT0hFTFAgKi8KKworI2lmbmRlZiBOT1NQTAorICAg IHsgInBhdXNlIiwgICAgICAgWFhQQVUsIDAgfSwJLyogU2xlZXAgZm9yIHNwZWNpZmllZCBpbnRl cnZhbCAqLworI2Vsc2UKKyAgICB7ICJwYXVzZSIsICAgICAgIFhYTk9UQVYsIENNX0lOViB9LAor I2VuZGlmIC8qIE5PU1BMICovCisjaWZuZGVmIE5PRElBTAorICAgIHsgInBkaWFsIiwgICAgICAg WFhQRElBLCAgQ01fTE9DIH0sCS8qIFBESUFMIChwYXJ0aWFsIGRpYWwpICovCisjZWxzZQorICAg IHsgInBkaWFsIiwgICAgICAgWFhOT1RBViwgQ01fSU5WfENNX0xPQyB9LAorI2VuZGlmIC8qIE5P RElBTCAqLworI2lmZGVmIFRDUFNPQ0tFVAorI2lmbmRlZiBOT1BVU0gKKyAgICB7ICJwaW5nIiwg ICAgICAgIFhYUE5HLCBDTV9JTlZ8Q01fUFNIfENNX0xPQyB9LCAvKiBQSU5HICovCisjZWxzZQor ICAgIHsgInBpbmciLCAgICAgICAgWFhOT1RBViwgQ01fSU5WfENNX1BTSHxDTV9MT0MgfSwKKyNl bmRpZiAvKiBOT1BVU0ggKi8KKyNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KKyNpZmRlZiBORVRDTUQK KyNpZm5kZWYgTk9QVVNICisgICAgeyAicGlwZSIsICAgICAgICBYWFBJUEUsIENNX1BTSCB9LAkv KiBQSVBFICovCisjZWxzZQorICAgIHsgInBpcGUiLCAgICAgICAgWFhOT1RBViwgQ01fSU5WfENN X1BTSCB9LCAvKiBQSVBFICovCisjZW5kaWYgLyogTk9QVVNIICovCisjZW5kaWYgLyogTkVUQ01E ICovCisKKyNpZm5kZWYgTk9TUEwKKyAgICB7ICJwb3AiLCAgICAgICAgIFhYRU5ELCBDTV9JTlYg fSwJLyogSW52aXNpYmxlIHN5bm9ueW0gZm9yIEVORCAqLworI2VuZGlmIC8qIE5PU1BMICovCisj aWZuZGVmIE5PRlJJTExTCisgICAgeyAicHJpbnQiLCAgICAgICBYWFBSSSwgMCB9LAkvKiBQUklO VCBhIGZpbGUgbG9jYWxseSAqLworI2VuZGlmIC8qIE5PRlJJTExTICovCisKKyAgICB7ICJwcm9t cHQiLCAgICAgIFhYUFJPTVAsIENNX0lOViB9LAkvKiBHbyBpbnRlcmFjdGl2ZSAoZnJvbSBzY3Jp cHQpICovCisKKyNpZm5kZWYgTk9YRkVSCisjaWZkZWYgQ0tfUkVTRU5ECisgICAgeyAicHNlbmQi LCAgICAgICBYWFBTRU4sIENNX0lOViB9LAkvKiBQU0VORCAqLworI2Vsc2UKKyAgICB7ICJwc2Vu ZCIsICAgICAgIFhYTk9UQVYsIENNX0lOViB9LAorI2VuZGlmIC8qIENLX1JFU0VORCAqLworI2Vu ZGlmIC8qIE5PWEZFUiAqLworCisjaWZkZWYgTkVUUFRZCisgICAgeyAicHR5IiwgICAgICAgICBY WFBUWSwgQ01fUFNIIH0sCS8qIFBUWSAqLworI2Vsc2UKKyAgICB7ICJwdHkiLCAgICAgICAgIFhY Tk9UQVYsIENNX0lOVnxDTV9QU0ggfSwKKyNlbmRpZiAvKiBORVRQVFkgKi8KKworI2lmbmRlZiBO T1BVU0gKKyAgICB7ICJwdSIsICAgICAgICAgIFhYU0hFLCBDTV9JTlZ8Q01fQUJSfENNX1BTSCB9 LCAvKiBQVSA9IFBVU0ggKi8KKyNlbmRpZiAvKiBOT1BVU0ggKi8KKworI2lmZGVmIENLUFVSR0UK KyAgICB7ICJwdXJnZSIsICAgICAgIFhYUFVSR0UsIDAgfSwJLyogUFVSR0UgKHJlYWwpICovCisj ZWxzZQorI2lmZGVmIFZNUworICAgIHsgInB1cmdlIiwgICAgICAgWFhQVVJHRSwgMCB9LAkvKiBQ VVJHRSAoZmFrZSkgKi8KKyNlbHNlCisgICAgeyAicHVyZ2UiLCAgICAgICBYWE5PVEFWLCBDTV9J TlYgfSwKKyNlbmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBDS1BVUkdFICovCisKKyNpZm5kZWYg Tk9QVVNICisgICAgeyAicHVzaCIsICAgICAgICBYWFNIRSwgQ01fUFNIIH0sCS8qIFBVU0ggY29t bWFuZCAobGlrZSBSVU4sICEpICovCisjZWxzZQorICAgIHsgInB1c2giLCAgICAgICAgWFhOT1RB ViwgQ01fSU5WfENNX1BTSCB9LAorI2VuZGlmIC8qIE5PUFVTSCAqLworCisjaWZuZGVmIE5PWEZF UgorICAgIHsgInB1dCIsICAgICAgICAgWFhTRU4sIENNX0lOViB9LAkvKiBQVVQgPSBTRU5EICov CisjZW5kaWYgLyogTk9YRkVSICovCisKKyNpZmRlZiBVTklYCisjaWZuZGVmIE5PUFVURU5WCisg ICAgeyAicHV0ZW52IiwgICAgICBYWFBVVEUsIENNX0lOViB9LAkvKiBQVVRFTlYgKi8KKyNlbmRp ZgkvKiBOT1BVVEVOViAqLworI2VuZGlmCS8qIFVOSVggKi8KKworICAgIHsgInB3ZCIsICAgICAg ICAgWFhQV0QsIDAgfSwJLyogUHJpbnQgV29ya2luZyBEaXJlY3RvcnkgKi8KKyAgICB7ICJxIiwg ICAgICAgICAgIFhYUVVJLCBDTV9JTlZ8Q01fQUJSIH0sIC8qIEludmlzaWJsZSBzeW5vbnltIGZv ciBRVUlUICovCisKKyNpZm5kZWYgTk9YRkVSCisgICAgeyAicXVlcnkiLCAgICAgICBYWFJRVUUs Q01fSU5WIH0sCS8qICg9IFJFTU9URSBRVUVSWSkgKi8KKyNlbmRpZiAvKiBOT1hGRVIgKi8KKwor ICAgIHsgInF1aXQiLCAgICAgICAgWFhRVUksIDAgfSwJLyogUVVJVCBmcm9tIHByb2dyYW0gPSBF WElUICovCisKKyNpZm5kZWYgTk9YRkVSCisgICAgeyAiciIsICAgICAgICAgICBYWFJFQywgQ01f SU5WfENNX0FCUiB9LCAvKiBJbnYgc3lub255bSBmb3IgUkVDRUlWRSAqLworI2VuZGlmIC8qIE5P WEZFUiAqLworCisjaWZuZGVmIE5PWEZFUgorICAgIHsgInJhc2ciLCAgICAgICAgWFhSQVNHLCBD TV9JTlYgfSwJLyogUkVNT1RFIEFTU0lHTiAqLworICAgIHsgInJhc3NpZ24iLCAgICAgWFhSQVNH LCBDTV9JTlYgfSwJLyogZGl0dG8gKi8KKyAgICB7ICJyY2QiLCAgICAgICAgIFhYUkNXRCwgQ01f SU5WIH0sCS8qIFJFTU9URSBDRCAqLworICAgIHsgInJjZHVwIiwgICAgICAgWFhSQ0RVUCxDTV9J TlYgfSwJLyogUkVNT1RFIENEICovCisgICAgeyAicmNvcHkiLCAgICAgICBYWFJDUFksIENNX0lO ViB9LAkvKiBSRU1PVEUgQ09QWSAqLworICAgIHsgInJjd2QiLCAgICAgICAgWFhSQ1dELCBDTV9J TlYgfSwJLyogUkVNT1RFIENXRCAqLworICAgIHsgInJkZWxldGUiLCAgICAgWFhSREVMLCBDTV9J TlYgfSwJLyogUkVNT1RFIERFTEVURSAqLworICAgIHsgInJkaXJlY3RvcnkiLCAgWFhSRElSLCBD TV9JTlYgfSwJLyogUkVNT0RFIERJUkVDVE9SWSAqLworI2VuZGlmIC8qIE5PWEZFUiAqLworCisj aWZuZGVmIE5PU1BMCisgICAgeyAicmVhZCIsICAgICAgICBYWFJFQSwgMCB9LAkvKiBSRUFEIGEg bGluZSBmcm9tIGEgZmlsZSAqLworI2Vsc2UKKyAgICB7ICJyZWFkIiwgICAgICAgIFhYTk9UQVYs IENNX0lOViB9LAorI2VuZGlmIC8qIE5PU1BMICovCisKKyNpZm5kZWYgTk9YRkVSCisgICAgeyAi cmVjZWl2ZSIsICAgICBYWFJFQywgMCB9LAkvKiBSRUNFSVZFIGZpbGVzICovCisjZW5kaWYgLyog Tk9YRkVSICovCisKKyNpZm5kZWYgTk9ESUFMCisgICAgeyAicmVkIiwgICAgICAgICBYWFJFRCwg Q01fSU5WfENNX0FCUnxDTV9MT0MgfSwgLyogSW52IHN5biBmb3IgUkVESUFMICovCisgICAgeyAi cmVkaSIsICAgICAgICBYWFJFRCwgQ01fSU5WfENNX0FCUnxDTV9MT0MgfSwgLyogZGl0dG8gKi8K KyAgICB7ICJyZWRpYWwiLCAgICAgIFhYUkVELCBDTV9MT0MgfSwJLyogUkVESUFMIGxhc3QgRElB TCBudW1iZXIgKi8KKyNlbHNlCisgICAgeyAicmVkIiwgICAgICAgICBYWE5PVEFWLCBDTV9JTlZ8 Q01fTE9DIH0sCisgICAgeyAicmVkaSIsICAgICAgICBYWE5PVEFWLCBDTV9JTlZ8Q01fTE9DIH0s CisgICAgeyAicmVkaWFsIiwgICAgICBYWE5PVEFWLCBDTV9JTlZ8Q01fTE9DIH0sCisjZW5kaWYg LyogTk9ESUFMICovCisKKyNpZmRlZiBDS19SRURJUgorI2lmZGVmIE9TMgorI2lmbmRlZiBOT1BV U0gKKyAgICB7ICJyZWRpcmVjdCIsICAgIFhYRlVOLCBDTV9JTlZ8Q01fUFNIIH0sIC8qIFJFRElS RUNUICovCisjZWxzZQorICAgIHsgInJlZGlyZWN0IiwgICAgWFhOT1RBViwgQ01fSU5WfENNX1BT SCB9LAorI2VuZGlmIC8qIE5PUFVTSCAqLworI2Vsc2UgLyogT1MyICovCisjaWZuZGVmIE5PUFVT SAorICAgIHsgInJlZGlyZWN0IiwgICAgWFhGVU4sIENNX1BTSCB9LAkvKiBSRURJUkVDVCAqLwor I2Vsc2UKKyAgICB7ICJyZWRpcmVjdCIsICAgIFhYTk9UQVYsIENNX0lOVnxDTV9QU0ggfSwKKyNl bmRpZiAvKiBOT1BVU0ggKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBDS19SRURJUiAq LworCisjaWZkZWYgQ0tfUkVDQUxMCisgICAgeyAicmVkbyIsICAgICAgICBYWFJFRE8sICBDTV9O T1IgfSwJLyogUkVETyAqLworI2Vsc2UKKyAgICB7ICJyZWRvIiwgICAgICAgIFhYTk9UQVYsIENN X0lOViB9LAorI2VuZGlmIC8qIENLX1JFQ0FMTCAqLworCisjaWZuZGVmIE5PWEZFUgorI2lmZGVm IENLX1JFU0VORAorICAgIHsgInJlZ2V0IiwgICAgICAgWFhSRUdFVCwgMCB9LAkvKiBSRUdFVCAq LworI2Vsc2UKKyAgICB7ICJyZWdldCIsICAgICAgIFhYTk9UQVYsIENNX0lOViB9LAorI2VuZGlm IC8qIENLX1JFU0VORCAqLworI2VuZGlmIC8qIE5PWEZFUiAqLworCisjaWZuZGVmIE5PU1BMCisg ICAgeyAicmVpbnB1dCIsICAgICBYWFJFSSwgQ01fSU5WIH0sCS8qIFJFSU5QVVQgKGZyb20gSU5Q VVQgYnVmZmVyKSAqLworI2Vsc2UKKyAgICB7ICJyZWlucHV0IiwgICAgIFhYTk9UQVYsIENNX0lO ViB9LAorI2VuZGlmIC8qIE5PU1BMICovCisKKyNpZm5kZWYgTk9YRkVSCisjaWZkZWYgQUREQ01E CisgICAgeyAicmVtIiwgICAgICAgICBYWFJFTSwgQ01fSU5WfENNX0FCUiB9LAorICAgIHsgInJl bW8iLCAgICAgICAgWFhSRU0sIENNX0lOVnxDTV9BQlIgfSwKKyNlbmRpZiAvKiBBRERDTUQgKi8K KyAgICB7ICJyZW1vdGUiLAkgICAgIFhYUkVNLCAwIH0sCS8qIFNlbmQgUkVNT1RFIGNvbW1hbmQg dG8gc2VydmVyICovCisjZW5kaWYgLyogTk9YRkVSICovCisKKyNpZmRlZiBBRERDTUQKKyAgICB7 ICJyZW1vdmUiLCAgICAgIFhYUkVNViwwIH0sCS8qIFJFTU9WRSAoc29tZXRoaW5nIGZyb20gYSBs aXN0KSAqLworI2Vsc2UKKyAgICB7ICJyZW1vdmUiLCAgICAgIFhYTk9UQVYsIENNX0lOViB9LAor I2VuZGlmIC8qIEFERENNRCAqLworCisjaWZuZGVmIE5PRlJJTExTCisjaWZuZGVmIE5PUkVOQU1F CisgICAgeyAicmVuYW1lIiwgICAgICBYWFJFTiwgMCB9LAkvKiBSRU5BTUUgYSBsb2NhbCBmaWxl ICovCisjZWxzZQorICAgIHsgInJlbmFtZSIsICAgICAgWFhOT1RBViwgQ01fSU5WIH0sCisjZW5k aWYgLyogTk9SRU5BTUUgKi8KKyAgICB7ICJyZXBsYXkiLCAgICAgIFhYVFlQLCBDTV9JTlYgfSwJ LyogUkVQTEFZIChmb3Igbm93LCBqdXN0IHR5cGUpICovCisjZW5kaWYgLyogTk9GUklMTFMgKi8K KworI2lmbmRlZiBOT1hGRVIKKyNpZmRlZiBDS19SRVNFTkQKKyAgICB7ICJyZXAiLCAgICAgICAg IFhYVFlQLCBDTV9JTlZ8Q01fQUJSIH0sICAvKiBSRVBMQVkgYWJicmV2aWF0aW9uICovCisgICAg eyAicmVwdXQiLCAgICAgICBYWFJTRU4sIENNX0lOViB9LAkgICAgICAvKiBSRVBVVCA9IFJFU0VO RCAqLworICAgIHsgInJlcyIsICAgICAgICAgWFhSU0VOLCBDTV9JTlZ8Q01fQUJSIH0sIC8qIFJF U0VORCAqLworICAgIHsgInJlc2UiLCAgICAgICAgWFhSU0VOLCBDTV9JTlZ8Q01fQUJSIH0sIC8q IFJFU0VORCAqLworICAgIHsgInJlc2VuZCIsICAgICAgWFhSU0VOLCAwIH0sCS8qIFJFU0VORCAq LworI2Vsc2UKKyAgICB7ICJyZXB1dCIsICAgICAgIFhYTk9UQVYsIENNX0lOViB9LAorICAgIHsg InJlcyIsICAgICAgICAgWFhOT1RBViwgQ01fSU5WIH0sCisgICAgeyAicmVzZSIsICAgICAgICBY WE5PVEFWLCBDTV9JTlYgfSwKKyAgICB7ICJyZXNlbmQiLCAgICAgIFhYTk9UQVYsIENNX0lOViB9 LAorI2VuZGlmIC8qIENLX1JFU0VORCAqLworI2VuZGlmIC8qIE5PWEZFUiAqLworCisgICAgeyAi cmVzZXQiLCAgICAgICBYWFJFU0VULCBDTV9JTlYgfSwJLyogUkVTRVQgKi8KKworI2lmZGVmIENL X1JFU0VORAorI2lmbmRlZiBOT1NQTAorICAgIHsgInJldCIsICAgICAgICAgWFhSRVQsIENNX0lO VnxDTV9BQlIgfSwKKyNlbmRpZiAvKiBOT1NQTCAqLworI2VuZGlmIC8qIENLX1JFU0VORCAqLwor CisjaWZuZGVmIE5PWEZFUgorICAgIHsgInJldHJpZXZlIiwgICAgWFhSRVRSLCBDTV9JTlYgfSwJ LyogUkVUUklFVkUgKi8KKyNlbmRpZiAvKiBOT1hGRVIgKi8KKworI2lmbmRlZiBOT1NQTAorICAg IHsgInJldHVybiIsICAgICAgWFhSRVQsIDAgfSwJLyogUkVUVVJOIGZyb20gYSBmdW5jdGlvbiAq LworI2Vsc2UKKyAgICB7ICJyZXR1cm4iLCAgICAgIFhYTk9UQVYsIENNX0lOViB9LAorI2VuZGlm IC8qIE5PU1BMICovCisKKyNpZm5kZWYgTk9YRkVSCisgICAgeyAicmV4aXQiLCAgICAgICBYWFJY SVQsIENNX0lOViB9LAkvKiBSRU1PVEUgRVhJVCAqLworI2VuZGlmIC8qIE5PWEZFUiAqLworCisj aWZkZWYgQ0tfUkVYWAorI2lmbmRlZiBOT1BVU0gKKyAgICB7ICJyZXh4IiwgICAgICAgIFhYUkVY WCwgQ01fUFNIIH0sCS8qIEV4ZWN1dGUgYSBSZXh4IGNvbW1hbmQgKi8KKyNlbHNlCisgICAgeyAi cmV4eCIsICAgICAgICBYWE5PVEFWLCBDTV9JTlZ8Q01fUFNIIH0sCisjZW5kaWYgLyogTk9QVVNI ICovCisjZW5kaWYgLyogQ0tfUkVYWCAqLworCisjaWZuZGVmIE5PWEZFUgorICAgIHsgInJoZWxw IiwgICAgICAgWFhSSExQLCBDTV9JTlYgfSwJLyogUkVNT1RFIEhFTFAgKi8KKyAgICB7ICJyaG9z dCIsICAgICAgIFhYUkhPUywgQ01fSU5WIH0sCS8qIFJFTU9URSBIT1NUICovCisgICAgeyAicmtl cm1pdCIsICAgICBYWFJLRVIsIENNX0lOViB9LAkvKiBSRU1PVEUgS0VSTUlUICovCisjZW5kaWYg LyogTk9YRkVSICovCisKKyNpZmRlZiBUQ1BTT0NLRVQKKyAgICB7ICJybG9naW4iLCAgICAgIFhY UkxPRywgQ01fTE9DIH0sCS8qIE1ha2UgYW4gUmxvZ2luIGNvbm5lY3Rpb24gKi8KKyNlbHNlCisg ICAgeyAicmxvZ2luIiwgICAgICBYWE5PVEFWLCBDTV9JTlZ8Q01fTE9DIH0sCisjZW5kaWYgLyog VENQU09DS0VUICovCisKKyNpZm5kZWYgTk9GUklMTFMKKyAgICB7ICJybSIsICAgICAgICAgIFhY REVMLCBDTV9JTlYgfSwJLyogSW52aXNpYmxlIHN5bm9ueW0gZm9yIGRlbGV0ZSAqLworI2VuZGlm IC8qIE5PRlJJTExTICovCisKKyNpZmRlZiBDS19NS0RJUgorICAgIHsgInJtZGlyIiwgICAgICAg WFhSTURJUiwgMCB9LAkvKiBSTURJUiAqLworI2Vsc2UKKyAgICB7ICJybWRpciIsICAgICAgIFhY Tk9UQVYsIENNX0lOViB9LAorI2VuZGlmIC8qIENLX01LRElSICovCisKKyNpZm5kZWYgTk9YRkVS CisgICAgeyAicm1lc3NhZ2UiLCAgICBYWFJNU0csIENNX0lOViB9LAkvKiBSRU1PVEUgTUVTU0FH RSAqLworICAgIHsgInJta2RpciIsICAgICAgWFhSTUtELCBDTV9JTlYgfSwJLyogUkVNT1RFIE1L RElSICovCisgICAgeyAicm1zZyIsICAgICAgICBYWFJNU0csIENNX0lOViB9LAkvKiBSRU1PVEUg TUVTU0FHRSAqLworI2lmbmRlZiBOT1NQTAorICAgIHsgInJvYnVzdCIsICAgICAgWFhST0IsICBD TV9JTlYgfSwKKyNlbHNlCisgICAgeyAicm9idXN0IiwgICAgICBYWE5PVEFWLCBDTV9JTlYgfSwK KyNlbmRpZiAvKiBOT1NQTCAqLworICAgIHsgInJwcmludCIsICAgICAgWFhSUFJJLCBDTV9JTlYg fSwgIC8qIFJFTU9URSBQUklOVCAqLworICAgIHsgInJwd2QiLCAgICAgICAgWFhSUFdELCBDTV9J TlYgfSwJLyogUkVNT1RFIFBXRCAqLworICAgIHsgInJxdWVyeSIsICAgICAgWFhSUVVFLCBDTV9J TlYgfSwJLyogUkVNT1RFIFFVRVJZICovCisjZW5kaWYgLyogTk9YRkVSICovCisKKyNpZmRlZiBD S19SRUNBTEwKKyAgICB7ICJyciIsICAgICAgICAgIFhYUkVETywgQ01fSU5WfENNX05PUiB9LAor I2VuZGlmIC8qIENLX1JFQ0FMTCAqLworCisjaWZuZGVmIE5PWEZFUgorICAgIHsgInJyZW5hbWUi LCAgICBYWFJSRU4sIENNX0lOViB9LAkvKiBSRU1PVEUgUkVOQU1FICovCisgICAgeyAicnJtZGly IiwgICAgIFhYUlJNRCwgQ01fSU5WIH0sCS8qIFJFTU9URSBSRU1ESVIgKi8KKyAgICB7ICJyc2V0 IiwgICAgICAgWFhSU0VULCBDTV9JTlYgfSwJLyogUkVNT1RFIFNFVCAqLworICAgIHsgInJzcGFj ZSIsICAgICBYWFJTUEEsIENNX0lOViB9LAkvKiBSRU1PVEUgU1BBQ0UgKi8KKyAgICB7ICJydHlw ZSIsICAgICAgWFhSVFlQLCBDTV9JTlYgfSwJLyogUkVNT1RFIFRZUEUgKi8KKyNlbmRpZiAvKiBO T1hGRVIgKi8KKworI2lmbmRlZiBOT1BVU0gKKyAgICB7ICJydW4iLCAgICAgICAgIFhYU0hFLCBD TV9QU0ggfSwJLyogUlVOIGEgcHJvZ3JhbSBvciBjb21tYW5kICovCisjZWxzZQorICAgIHsgInJ1 biIsICAgICAgICAgWFhOT1RBViwgQ01fSU5WfENNX1BTSCB9LAorI2VuZGlmIC8qIE5PUFVTSCAq LworCisjaWZuZGVmIE5PWEZFUgorICAgIHsgInJ3aG8iLCAgICAgICAgWFhSV0hPLCBDTV9JTlYg fSwJLyogUkVNT1RFIFdITyAqLworICAgIHsgInMiLCAgICAgICAgICAgWFhTRU4sIENNX0lOVnxD TV9BQlIgfSwgLyogSW52aXNpYmxlIHN5bm9ueW0gZm9yIHNlbmQgKi8KKyNlbmRpZiAvKiBOT1hG RVIgKi8KKworI2lmbmRlZiBOT1NFVEtFWQorI2lmZGVmIE9TMgorICAgIHsgInNhdmUiLAkgICBY WFNBVkUsIDAgfSwJCS8qIFNBVkUgc29tZXRoaW5nICovCisjZWxzZQorICAgIHsgInNhdmUiLAkg ICBYWFNBVkUsIENNX0lOViB9LAorI2VuZGlmIC8qIE9TMiAqLworI2Vsc2UKKyAgICB7ICJzYXZl IiwJICAgWFhOT1RBViwgQ01fSU5WIH0sCisjZW5kaWYgLyogTk9TRVRLRVkgKi8KKworI2lmbmRl ZiBOT1NDUklQVAorICAgIHsgInNjIiwgCSAgIFhYTE9HSSwgQ01fSU5WfENNX0FCUnxDTV9MT0Mg fSwKKyAgICB7ICJzY3IiLAkgICBYWExPR0ksIENNX0lOVnxDTV9BQlJ8Q01fTE9DIH0sCisjZW5k aWYgLyogTk9TQ1JJUFQgKi8KKyAgICB7ICJzY3JlZW4iLCAgICAgIFhYU0NSTiwgMCB9LAkvKiBT Q1JFRU4gYWN0aW9ucyAqLworI2lmbmRlZiBOT1NDUklQVAorICAgIHsgInNjcmlwdCIsCSAgIFhY TE9HSSwgQ01fTE9DIH0sCS8qIEV4cGVjdC1TZW5kLXN0eWxlIHNjcmlwdCBsaW5lICovCisjZWxz ZQorICAgIHsgInNjcmlwdCIsCSAgIFhYTk9UQVYsIENNX0lOVnxDTV9MT0MgfSwKKyNlbmRpZiAv KiBOT1NDUklQVCAqLworCisgICAgeyAic2VhcmNoIiwgICAgWFhHUkVQLENNX0lOViB9LAkvKiBT eW5vbnltIGZvciBHUkVQIGFuZCBGSU5EICovCisKKyNpZm5kZWYgTk9YRkVSCisgICAgeyAic2Vu ZCIsCSAgIFhYU0VOLCAwIH0sCQkvKiBTZW5kIChhKSBmaWxlKHMpICovCisjaWZuZGVmIE5PU0VS VkVSCisgICAgeyAic2VydmVyIiwJICAgWFhTRVIsIDAgfSwJCS8qIEJlIGEgU0VSVkVSICovCisj ZWxzZQorICAgIHsgInNlcnZlciIsCSAgIFhYTk9UQVYsIENNX0lOViB9LAorI2VuZGlmIC8qIE5P U0VSVkVSICovCisjZW5kaWYgLyogTk9YRkVSICovCisKKyAgICB7ICJzZXQiLAkgICBYWFNFVCwg MCB9LAkJLyogU0VUIHBhcmFtZXRlcnMgKi8KKworI2lmbmRlZiBOT1NQTAorI2lmbmRlZiBOT1NF WFAKKyAgICB7ICJzZXhwcmVzc2lvbiIsIFhYU0VYUCwgQ01fSU5WfENNX0hMUCB9LCAvKiBTRVhQ UiAqLworI2VuZGlmIC8qIE5PU0VYUCAqLworCisjaWZkZWYgU0ZUUF9CVUlMVElOCisgICAgeyAi c2Z0cCIsICAgICAgICBYWFNGVFAsIDAgfSwgICAvKiBTRlRQICovCisjZW5kaWYgLyogU0ZUUF9C VUlMVElOICovCisKKyNpZm5kZWYgTk9TSE9XCisgICAgeyAic2giLCAgICAgICAgICBYWFNITywg Q01fSU5WfENNX0FCUiB9LCAvKiBTSE9XIHBhcmFtZXRlcnMgKi8KKyNlbmRpZiAvKiBOT1NIT1cg Ki8KKyAgICB7ICJzaGlmdCIsICAgICAgIFhYU0hJRlQsIDAgfSwJLyogU0hJRlQgYXJncyAqLwor I2Vsc2UKKyAgICB7ICJzaGlmdCIsICAgICAgIFhYTk9UQVYsIENNX0lOViB9LAorI2VuZGlmIC8q IE5PU1BMICovCisKKyNpZm5kZWYgTk9TSE9XCisgICAgeyAic2hvdyIsIAkgICBYWFNITywgMCB9 LAkJLyogU0hPVyBwYXJhbWV0ZXJzICovCisjZWxzZQorICAgIHsgInNob3ciLCAJICAgWFhOT1RB ViwgQ01fSU5WIH0sCisjZW5kaWYgLyogTk9TSE9XICovCisKKyNpZmRlZiBORVdGVFAKKyAgICB7 ICJzaXRlIiwgICAgICAgIFhYU0lURSwgQ01fSU5WIH0sCS8qIChGVFApIFNJVEUgKi8KKyNlbmRp ZiAvKiBORVdGVFAgKi8KKworI2lmZGVmIFNTSEJVSUxUSU4KKyAgICB7ICJza2VybWl0IiwgICBY WFNLUk0sIDAgfSwgICAgIC8qIFNLRVJNSVQgKi8KKyNlbmRpZiAvKiBTU0hCVUlMVElOICovCisK KyNpZm5kZWYgTk9TUEwKKyNpZm5kZWYgTk9GUklMTFMKKyAgICB7ICJzbGVlcCIsICAgICAgIFhY UEFVLCBDTV9JTlYgfSwJLyogU0xFRVAgZm9yIHNwZWNpZmllZCBpbnRlcnZhbCAqLworI2VuZGlm IC8qIE5PRlJJTExTICovCisjZW5kaWYgLyogTk9TUEwgKi8KKworI2lmbmRlZiBOT1NQTAorICAg IHsgInNvcnQiLCAgICAgICAgWFhTT1JULCBDTV9JTlYgfSwJLyogKHNlZSBBUlJBWSkgKi8KKyNl bHNlCisgICAgeyAic29ydCIsICAgICAgICBYWE5PVEFWLCBDTV9JTlYgfSwKKyNlbmRpZiAvKiBO T1NQTCAqLworCisjaWZuZGVmIE1BQworI2lmbmRlZiBOT0ZSSUxMUworICAgIHsgInNwIiwgICAg ICAgICAgWFhTUEEsIENNX0lOVnxDTV9BQlIgfSwKKyAgICB7ICJzcGEiLCAgICAgICAgIFhYU1BB LCBDTV9JTlZ8Q01fQUJSIH0sCisjZW5kaWYgLyogTk9GUklMTFMgKi8KKyAgICB7ICJzcGFjZSIs ICAgICAgIFhYU1BBLCAwIH0sCS8qIFNob3cgYXZhaWxhYmxlIGRpc2sgU1BBQ0UgKi8KKyNlbmRp ZiAvKiBNQUMgKi8KKworI2lmbmRlZiBOT0ZSSUxMUworI2lmbmRlZiBOT1BVU0gKKyAgICB7ICJz cGF3biIsICAgICAgIFhYU0hFLCBDTV9JTlZ8Q01fUFNIIH0sIC8qIFN5bm9ueW0gZm9yIFBVU0gs IFJVTiAqLworI2Vsc2UKKyAgICB7ICJzcGF3biIsICAgICAgIFhYTk9UQVYsIENNX0lOVnxDTV9Q U0ggfSwgLyogU3lub255bSBmb3IgUFVTSCwgUlVOICovCisjZW5kaWYgLyogTk9QVVNIICovCisj ZW5kaWYgLyogTk9GUklMTFMgKi8KKworI2lmZGVmIEFOWVNTSAorICAgIHsgInNzaCIsICAgICAg ICAgWFhTU0gsIDAgfSwKKyNlbmRpZiAvKiBBTllTU0ggKi8KKworI2lmbmRlZiBOT1hGRVIKKyAg ICB7ICJzdGEiLCAgICAgICAgIFhYU1RBLCBDTV9JTlZ8Q01fQUJSIH0sCisgICAgeyAic3RhdCIs ICAgICAgICBYWFNUQSwgQ01fSU5WfENNX0FCUiB9LAorICAgIHsgInN0YXRpc3RpY3MiLCAgWFhT VEEsIDAgfSwJLyogRGlzcGxheSBmaWxlIHRyYW5zZmVyIHN0YXRzICovCisjZW5kaWYgLyogTk9Y RkVSICovCisKKyAgICB7ICJzdGF0dXMiLCAgICAgIFhYU1RBVFVTLDAgfSwJLyogU2hvdyBzdGF0 dXMgb2YgcHJldmlvdXMgY29tbWFuZCAqLworCisjaWZuZGVmIE5PU1BMCisgICAgeyAic3RvcCIs ICAgICAgICBYWFNUTywgICAwIH0sCS8qIFNUT1AgYWxsIHRha2UgZmlsZXMgYW5kIG1hY3JvcyAq LworICAgIHsgInN1Y2NlZWQiLCAgICAgWFhTVUNDLCAgQ01fSU5WIH0sCS8qIFNVQ0NFRUQgKi8K KyNlbHNlCisgICAgeyAic3RvcCIsICAgICAgICBYWE5PVEFWLCBDTV9JTlYgfSwKKyAgICB7ICJz dWNjZWVkIiwgICAgIFhYTk9UQVYsIENNX0lOViB9LAorI2VuZGlmIC8qIE5PU1BMICovCisKKyNp Zm5kZWYgTk9GUklMTFMKKyAgICB7ICJTVVBQT1JUIiwgICAgIFhYQlVHLCAwIH0sCS8qIFRlY2gg c3VwcG9ydCBpbnN0cnVjdGlvbnMgKi8KKyNlbHNlCisgICAgeyAic3VwcG9ydCIsICAgICBYWE5P VEFWLCBDTV9JTlYgfSwKKyNlbmRpZiAvKiBOT0ZSSUxMUyAqLworCisjaWZuZGVmIE5PSkMKKyAg ICB7ICJzdXNwZW5kIiwgICAgIFhYU1VTLCBDTV9QU0ggfSwJLyogU1VTUEVORCBDLUtlcm1pdCAo VU5JWCBvbmx5KSAqLworI2Vsc2UKKyAgICB7ICJzdXNwZW5kIiwgICAgIFhYTk9UQVYsIENNX0lO VnxDTV9QU0ggfSwKKyNlbmRpZiAvKiBOT0pDICovCisKKyNpZm5kZWYgTk9TUEwKKyAgICB7ICJz d2l0Y2giLCAgICAgIFhYU1dJVCwgMCB9LAkvKiBTV0lUQ0ggKi8KKyNlbHNlCisgICAgeyAic3dp dGNoIiwgICAgICBYWE5PVEFWLCBDTV9JTlYgfSwKKyNlbmRpZiAvKiBOT1NQTCAqLworCisjaWZk ZWYgQ0tfVEFQSQorICAgIHsgInRhIiwJICAgWFhUQUssIENNX0lOVnxDTV9BQlIgfSwgLyogKGJl Y2F1c2Ugb2YgVEFQSSkgKi8KKyNlbmRpZiAvKiBDS19UQVBJICovCisKKyNpZm5kZWYgTk9GUklM TFMKKyAgICB7ICJ0YWlsIiwgICAgICAgIFhYVEFJTCwgMCB9LAkvKiBEaXNwbGF5IGVuZCBvZiBh IGxvY2FsIGZpbGUgKi8KKyNlbmRpZiAvKiBOT0ZSSUxMUyAqLworCisgICAgeyAidGFrZSIsCSAg IFhYVEFLLCAwIH0sCQkvKiBUQUtFIGNvbW1hbmRzIGZyb20gYSBmaWxlICovCisKKyNpZmRlZiBD S19UQVBJCisgICAgeyAidGFwaSIsCSAgIFhYVEFQSSwgQ01fTE9DIH0sCS8qIE1pY3Jvc29mdCBU QVBJIGNvbW1hbmRzICovCisjZWxzZQorICAgIHsgInRhcGkiLAkgICBYWE5PVEFWLCBDTV9JTlZ8 Q01fTE9DIH0sCisjZW5kaWYgLyogQ0tfVEFQSSAqLworCisjaWZuZGVmIE5PRlJJTExTCisjaWZk ZWYgVENQU09DS0VUCisgICAgeyAidGVsIiwgICAgICAgICBYWFRFTCwgQ01fSU5WfENNX0FCUnxD TV9MT0MgfSwKKyAgICB7ICJ0ZWxuZXQiLCAgICAgIFhYVEVMLCBDTV9MT0MgfSwJLyogVEVMTkVU IChUQ1AvSVAgb25seSkgKi8KKyAgICB7ICJ0ZWxvcHQiLCAgICAgIFhYVEVMT1AsIENNX0lOViB9 LAkvKiBURUxPUFQgKGRpdHRvKSAqLworI2Vsc2UKKyAgICB7ICJ0ZWwiLCAgICAgICAgIFhYTk9U QVYsIENNX0lOVnxDTV9MT0MgfSwKKyAgICB7ICJ0ZWxuZXQiLCAgICAgIFhYTk9UQVYsIENNX0lO VnxDTV9MT0MgfSwKKyAgICB7ICJ0ZWxvcHQiLCAgICAgIFhYTk9UQVYsIENNX0lOViB9LAorI2Vu ZGlmIC8qIFRDUFNPQ0tFVCAqLworI2lmZGVmIE9TMgorICAgIHsgInRlcm1pbmFsIiwgICAgWFhU RVJNLCBDTV9JTlZ8Q01fTE9DIH0sIC8qID09IFNFVCBURVJNSU5BTCBUWVBFICovCisjZWxzZQor ICAgIHsgInRlcm1pbmFsIiwgICAgWFhURVJNLCBDTV9JTlYgfSwKKyNlbmRpZiAvKiBPUzIgKi8K KyNlbmRpZiAvKiBOT0ZSSUxMUyAqLworI2lmbmRlZiBOT1hGRVIKKyAgICB7ICJ0ZXh0IiwgICAg ICAgIFhYQVNDLCBDTV9JTlYgfSwJLyogPT0gU0VUIEZJTEUgVFlQRSBURVhUICovCisjZW5kaWYg LyogTk9YRkVSICovCisgICAgeyAidG91Y2giLCAgICAgICBYWFRPVUMsIDAgfSwJLyogVE9VQ0gg Ki8KKyNpZm5kZWYgTk9TUEwKKyAgICB7ICJ0cmFjZSIsICAgICAgIFhYVFJBQ0UsIDAgfSwJLyog VFJBQ0UgKi8KKyNlbHNlCisgICAgeyAidHJhY2UiLCAgICAgICBYWE5PVEFWLCBDTV9JTlYgfSwK KyNlbmRpZiAvKiBOT1NQTCAqLworCisjaWZuZGVmIE5PQ1NFVFMKKyAgICB7ICJ0cmFuc2xhdGUi LCAgIFhYWExBLCAwIH0sCS8qIFRSQU5TTEFURSBsb2NhbCBmaWxlIGNoYXIgc2V0cyAqLworI2Vs c2UKKyAgICB7ICJ0cmFuc2xhdGUiLCAgIFhYTk9UQVYsIENNX0lOViB9LAorI2VuZGlmIC8qIE5P Q1NFVFMgKi8KKworI2lmbmRlZiBOT1hNSVQKKyAgICB7ICJ0cmFuc21pdCIsICAgIFhYVFJBLCAw IH0sCS8qIFNlbmQgKHVwbG9hZCkgYSBmaWxlLCBubyBwcm90b2NvbCAqLworI2Vsc2UKKyAgICB7 ICJ0cmFuc21pdCIsICAgIFhYTk9UQVYsIENNX0lOViB9LAorI2VuZGlmIC8qIE5PWE1JVCAqLwor CisjaWZuZGVmIE5PRlJJTExTCisgICAgeyAidHlwZSIsICAgICAgICBYWFRZUCwgMCB9LAkvKiBE aXNwbGF5IGEgbG9jYWwgZmlsZSAqLworI2VuZGlmIC8qIE5PRlJJTExTICovCisKKyNpZm5kZWYg Tk9TUEwKKyAgICB7ICJ1bmRjbCIsICAgICAgIFhYVU5EQ0wsIENNX0lOViB9LAorICAgIHsgInVu ZGVjbGFyZSIsICAgWFhVTkRDTCwgMCB9LAkvKiBVTkRFQ0xBUkUgYW4gYXJyYXkgKi8KKyAgICB7 ICJ1bmRlZmluZSIsICAgIFhYVU5ERUYsIDAgfSwJLyogVU5ERUZJTkUgYSB2YXJpYWJsZSBvciBt YWNybyAqLworI2Vsc2UKKyAgICB7ICJ1bmRjbCIsICAgICAgIFhYTk9UQVYsIENNX0lOViB9LAor ICAgIHsgInVuZGVjbGFyZSIsICAgWFhOT1RBViwgQ01fSU5WIH0sCisgICAgeyAidW5kZWZpbmUi LCAgICBYWE5PVEFWLCBDTV9JTlYgfSwKKyNlbmRpZiAvKiBOT1NQTCAqLworCisjaWZkZWYgTkVX RlRQCisgICAgeyAidXNlciIsICAgICAgICBYWFVTRVIsICBDTV9JTlYgfSwgLyogKEZUUCkgVVNF UiAqLworI2VuZGlmIC8qIE5FV0ZUUCAqLworCisgICAgeyAidmVyc2lvbiIsICAgICBYWFZFUiwg MCB9LAkvKiBWRVJTSU9OLW51bWJlciBkaXNwbGF5ICovCisKKyNpZmRlZiBPUzIKKyAgICB7ICJ2 aWV3b25seSIsICAgIFhYVklFVywgQ01fTE9DIH0sCS8qIFZJRVdPTkxZIFRlcm1pbmFsIE1vZGUg Ki8KKyNlbmRpZiAvKiBPUzIgKi8KKworICAgIHsgInZvaWQiLCAgICAgICAgWFhWT0lELCAwIH0s CS8qIFZPSUQgKi8KKworI2lmbmRlZiBOT1NQTAorICAgIHsgIndhaXQiLCAgICAgICAgWFhXQUks IDAgfSwJLyogV0FJVCAqLworI2Vsc2UKKyAgICB7ICJ3YWl0IiwgICAgICAgIFhYTk9UQVYsIENN X0lOViB9LAorI2VuZGlmIC8qIE5PU1BMICovCisKKyAgICB7ICJ3ZGlyZWN0b3J5IiwgIFhYV0RJ UiwgIENNX0lOViB9LAkvKiBMaWtlIFRPUFMtMjAsIHJldmVyc2UgY2hyb24gb3JkZXIgKi8KKyAg ICB7ICJ3ZXJtaXQiLCAgICAgIFhYS0VSTUksIENNX0lOViB9LAorCisjaWZuZGVmIE5PWEZFUgor ICAgIHsgIndoZXJlIiwgICAgICAgWFhXSEVSRSwgMCB9LAkvKiBXSEVSRSAoZGlkIG15IGZpbGUg Z28/KSAqLworI2VuZGlmIC8qIE5PWEZFUiAqLworCisjaWZuZGVmIE5PU1BMCisgICAgeyAid2hp bGUiLCAgICAgICBYWFdISSwgMCB9LAkvKiBXSElMRSBsb29wICovCisjZWxzZQorICAgIHsgIndo aWxlIiwgICAgICAgWFhOT1RBViwgQ01fSU5WIH0sCisjZW5kaWYgLyogTk9TUEwgKi8KKworI2lm bmRlZiBPUzIKKyNpZm5kZWYgTUFDCisjaWZuZGVmIE5PRlJJTExTCisgICAgeyAid2hvIiwgICAg ICAgICBYWFdITywgQ01fUFNIIH0sCS8qIFdITydzIGxvZ2dlZCBpbj8gKi8KKyNlbmRpZiAvKiBO T0ZSSUxMUyAqLworI2VuZGlmIC8qIE1BQyAqLworI2VuZGlmIC8qIE9TMiAqLworCisjaWZuZGVm IE5PSEVMUAorICAgIHsgIndpbGRjYXJkcyIsICAgWFhXSUxELENNX0lOVnxDTV9ITFAgfSwgLyog V2lsZGNhcmQgc3ludGF4ICovCisjZW5kaWYgLyogTk9IRUxQICovCisKKyNpZm5kZWYgTk9TUEwK KyAgICB7ICJ3ciIsICAgICAgICAgIFhYV1JJLCBDTV9JTlZ8Q01fQUJSIH0sCisgICAgeyAid3Jp IiwgICAgICAgICBYWFdSSSwgQ01fSU5WfENNX0FCUiB9LAorICAgIHsgIndyaXQiLCAgICAgICAg WFhXUkksIENNX0lOVnxDTV9BQlIgfSwKKyAgICB7ICJ3cml0ZSIsICAgICAgIFhYV1JJLCAwIH0s CS8qIFdSSVRFIGNoYXJhY3RlcnMgdG8gYSBmaWxlICovCisgICAgeyAid3JpdGUtbGluZSIsICBY WFdSTCwgQ01fSU5WIH0sCS8qIFdSSVRFIGEgbGluZSB0byBhIGZpbGUgKi8KKyAgICB7ICJ3cml0 ZWxuIiwgICAgIFhYV1JMLCBDTV9JTlYgfSwJLyogUGFzY2FsaXNjaCBzeW5vbnltIGZvciB3cml0 ZS1saW5lICovCisjZWxzZQorICAgIHsgIndyIiwgICAgICAgICAgWFhOT1RBViwgQ01fSU5WIH0s CisgICAgeyAid3JpIiwgICAgICAgICBYWE5PVEFWLCBDTV9JTlYgfSwKKyAgICB7ICJ3cml0Iiwg ICAgICAgIFhYTk9UQVYsIENNX0lOViB9LAorICAgIHsgIndyaXRlIiwgICAgICAgWFhOT1RBViwg Q01fSU5WIH0sCisgICAgeyAid3JpdGUtbGluZSIsICBYWE5PVEFWLCBDTV9JTlYgfSwKKyAgICB7 ICJ3cml0ZWxuIiwgICAgIFhYTk9UQVYsIENNX0lOViB9LAorI2VuZGlmIC8qIE5PU1BMICovCisK KyNpZm5kZWYgTk9GUklMTFMKKyAgICB7ICJ4ZWNobyIsICAgICAgIFhYWEVDSCwwIH0sCS8qIFhF Q0hPICovCisjZW5kaWYgLyogTk9GUklMTFMgKi8KKworI2lmbmRlZiBOT1NQTAorICAgIHsgInhp ZiIsICAgICAgICAgWFhJRlgsIENNX0lOViB9LAkvKiBFeHRlbmRlZCBJRiBjb21tYW5kIChvYnNv bGV0ZSkgKi8KKyNlbHNlCisgICAgeyAieGlmIiwgICAgICAgICBYWE5PVEFWLCBDTV9JTlYgfSwK KyNlbmRpZiAvKiBOT1NQTCAqLworCisjaWZuZGVmIE5PQ1NFVFMKKyAgICB7ICJ4bGF0ZSIsICAg ICAgIFhYWExBLCBDTV9JTlYgfSwJLyogU3lub255bSBmb3IgVFJBTlNMQVRFICovCisjZWxzZQor ICAgIHsgInhsYXRlIiwgICAgICAgWFhOT1RBViwgQ01fSU5WIH0sCisjZW5kaWYgLyogTk9DU0VU UyAqLworCisjaWZuZGVmIE5PWE1JVAorICAgIHsgInhtIiwgICAgICAgICAgWFhUUkEsIENNX0lO VnxDTV9BQlIgfSwgLyogQXZvaWQgY29uZmxpY3Qgd2l0aCBYTUVTU0FHRSAqLworI2Vsc2UKKyAg ICB7ICJ4bSIsICAgICAgICAgIFhYTk9UQVYsIENNX0lOVnxDTV9BQlIgfSwgLyogU3lub255bSBm b3IgVFJBTlNNSVQgKi8KKyNlbmRpZiAvKiBOT1hNSVQgKi8KKworICAgIHsgInhtZXNzYWdlIiwg ICAgWFhYTVNHLCAwIH0sCS8qIFByaW50IGRlYnVnZ2luZyBtZXNzYWdlICovCisKKyNpZm5kZWYg Tk9YTUlUCisgICAgeyAieG1pdCIsICAgICAgICBYWFRSQSwgQ01fSU5WIH0sCS8qIFN5bm9ueW0g Zm9yIFRSQU5TTUlUICovCisjZWxzZQorICAgIHsgInhtaXQiLCAgICAgICAgWFhOT1RBViwgQ01f SU5WIH0sCisjZW5kaWYgLyogTk9YTUlUICovCisKKyNpZm5kZWYgT1MyCisjaWZuZGVmIE5PSkMK KyAgICB7ICJ6IiwgICAgICAgICAgIFhYU1VTLCBDTV9JTlZ8Q01fUFNIIH0sIC8qIFN5bm9ueW0g Zm9yIFNVU1BFTkQgKi8KKyNlbHNlCisgICAgeyAieiIsICAgICAgICAgICBYWE5PVEFWLCBDTV9J TlZ8Q01fUFNIIH0sCisjZW5kaWYgLyogTk9KQyAqLworI2VuZGlmIC8qIE9TMiAqLworCisjaWZu ZGVmIE5PU1BMCisgICAgeyAieyIsICAgICAgICAgICBYWE1BQ1JPLCBDTV9JTlYgfSwJLyogSW1t ZWRpYXRlIG1hY3JvICovCisjZW5kaWYgLyogTk9TUEwgKi8KKyAgICB7ICIiLCAwLCAwIH0KK307 CitpbnQgbmNtZCA9IChzaXplb2YoY21kdGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSkgLSAx OworCisvKiBOT1RFOiBUb2tlbnMgbXVzdCBhbHNvIGJlIGVudGVyZWQgYWJvdmUgaW50byBjbWR0 YWJbXS4gKi8KKworY2hhciB0b2t0YWJbXSA9IHsKKyNpZm5kZWYgTk9QVVNICisgICAgJyEnLAkJ CQkvKiBTaGVsbCBlc2NhcGUgKi8KKyNlbmRpZiAvKiBOT1BVU0ggKi8KKyAgICAnIycsCQkJCS8q IENvbW1lbnQgKi8KKyNpZm5kZWYgTk9TUEwKKyAgICAnKCcsCQkJCS8qIFMtRXhwcmVzc2lvbiAq LworICAgICcuJywJCQkJLyogQXNzaWdubWVudCAqLworI2VuZGlmIC8qIE5PU1BMICovCisgICAg JzsnLAkJCQkvKiBDb21tZW50ICovCisjaWZuZGVmIE5PU1BMCisgICAgJzonLAkJCQkvKiBMYWJl bCAqLworI2VuZGlmIC8qIE5PU1BMICovCisjaWZuZGVmIE5PUFVTSAorI2lmZGVmIENLX1JFRElS CisgICAgJzwnLAkJCQkvKiBSRURJUkVDVCAqLworI2VuZGlmIC8qIENLX1JFRElSICovCisgICAg J0AnLAkJCQkvKiBEQ0wgZXNjYXBlICovCisjZW5kaWYgLyogTk9QVVNIICovCisjaWZkZWYgQ0tf UkVDQUxMCisgICAgJ14nLAkJCQkvKiBDb21tYW5kIHJlY2FsbCAqLworI2VuZGlmIC8qIENLX1JF Q0FMTCAqLworI2lmbmRlZiBOT1NQTAorICAgICd7JywJCQkJLyogSW1tZWRpYXRlIG1hY3JvICov CisjZW5kaWYgLyogTk9TUEwgKi8KKyAgICAnXDAnCQkJCS8qIEVuZCBvZiB0aGlzIHN0cmluZyAq LworfTsKK2ludCB4eGRvdCA9IDA7CQkJCS8qIFVzZWQgd2l0aCAiLiIgdG9rZW4gKi8KKworc3Ry dWN0IGtleXRhYiB5ZXNub1tdID0gewkJLyogWWVzL05vIGtleXdvcmQgdGFibGUgKi8KKyAgICB7 ICJubyIsICAgIDAsIDAgfSwKKyAgICB7ICJvayIsICAgIDEsIDAgfSwKKyAgICB7ICJ5ZXMiLCAg IDEsIDAgfQorfTsKK2ludCBueWVzbm8gPSAoc2l6ZW9mKHllc25vKSAvIHNpemVvZihzdHJ1Y3Qg a2V5dGFiKSk7CisKKy8qIFNhdmUga2V5d29yZCB0YWJsZSAqLworCitzdHJ1Y3Qga2V5dGFiIHNh dnRhYltdID0geworI2lmZGVmIE9TMgorICAgIHsgImNvbW1hbmQiLCAgWFNDTUQsIDAgfSwKKyNl bHNlCisjaWZkZWYgQ0tfUkVDQUxMCisgICAgeyAiY29tbWFuZCIsICBYU0NNRCwgMCB9LAorI2Vu ZGlmIC8qIENLX1JFQ0FMTCAqLworI2VuZGlmIC8qIE9TMiAqLworI2lmbmRlZiBOT1NFVEtFWQor ICAgIHsgImtleW1hcCIsICAgWFNLRVksIDAgfSwKKyNlbmRpZiAvKiBOT1NFVEtFWSAqLworI2lm ZGVmIE9TMgorICAgIHsgInRlcm1pbmFsIiwgWFNURVJNLCAwIH0sCisjZW5kaWYgLyogT1MyICov CisgICAgeyAiIiwgMCwgMCB9Cit9OworaW50IG5zYXYgPSAoc2l6ZW9mKHNhdnRhYikgLyBzaXpl b2Yoc3RydWN0IGtleXRhYikpIC0gMTsKKworLyogUGFyYW1ldGVyIGtleXdvcmQgdGFibGUgKi8K Kworc3RydWN0IGtleXRhYiBwcm10YWJbXSA9IHsKKyAgICB7ICJhbGFybSIsICAgICAgICAgICAg WFlBTFJNLCAgMCB9LAorI2lmZGVmIENPTU1FTlQJCQkJLyogU0VUIEFOU1dFUiBub3QgaW1wbGVt ZW50ZWQgeWV0ICovCisjaWZuZGVmIE5PRElBTAorICAgIHsgImFuc3dlciIsICAgICAgICAgICBY WUFOU1dFUiwwIH0sCisjZW5kaWYgLyogTk9ESUFMICovCisjZW5kaWYgLyogQ09NTUVOVCAqLwor ICAgIHsgImFzay10aW1lciIsICAgICAgICBYWVRJTUVSLCAwIH0sCisjaWZuZGVmIE5PWEZFUgor ICAgIHsgImF0dHJpYnV0ZXMiLCAgICAgICBYWUFUVFIsICAwIH0sCisjZW5kaWYgLyogTk9YRkVS ICovCisjaWZkZWYgQ0tfQVVUSEVOVElDQVRJT04KKyAgICB7ICJhdXRoZW50aWNhdGlvbiIsICAg WFlBVVRILCAgMCB9LAorI2Vsc2UgIC8qIENLX0FVVEhFTlRJQ0FUSU9OICovCisjaWZkZWYgQ0tf U1NMCisgICAgeyAiYXV0aGVudGljYXRpb24iLCAgIFhZQVVUSCwgIDAgfSwKKyNlbmRpZiAvKiBD S19TU0wgKi8KKyNlbmRpZiAvKiBDS19BVVRIRU5USUNBVElPTiAqLworICAgIHsgImIiLAkJICBY WUJBQ0ssICBDTV9JTlZ8Q01fQUJSfENNX1BTSCB9LAorICAgIHsgImJhIiwJCSAgWFlCQUNLLCAg Q01fSU5WfENNX0FCUnxDTV9QU0ggfSwKKyNpZmRlZiBWTVMKKyAgICB7ICJiYWNrZ3JvdW5kIiwg ICAgICAgWFlCQUNLLCAgQ01fSU5WfENNX1BTSCB9LAorICAgIHsgImJhdGNoIiwgICAgICAgICAg ICBYWUJBQ0ssICBDTV9QU0ggfSwKKyNlbHNlCisgICAgeyAiYmFja2dyb3VuZCIsICAgICAgIFhZ QkFDSywgIENNX1BTSCB9LAorICAgIHsgImJhdGNoIiwgICAgICAgICAgICBYWUJBQ0ssICBDTV9J TlZ8Q01fUFNIIH0sCisjZW5kaWYgLyogVk1TICovCisjaWZuZGVmIE5PTE9DQUwKKyAgICB7ICJi YXVkIiwJICAgICAgICAgIFhZU1BFRSwgIENNX0lOVnxDTV9MT0MgfSwKKyNlbmRpZiAvKiBOT0xP Q0FMICovCisgICAgeyAiYmVsbCIsICAgICAgICAgICAgIFhZQkVMTCwgIDAgfSwKKyNpZm5kZWYg Tk9YRkVSCisgICAgeyAiYmxvY2stY2hlY2siLCAgCSAgWFlDSEtULCAgMCB9LAorI2VuZGlmIC8q IE5PWEZFUiAqLworI2lmZGVmIE9TMgorI2lmZGVmIEJQUklOVAorICAgIHsgImJwcmludGVyIiwg ICAgICAgICBYWUJEQ1AsICBDTV9JTlYgfSwKKyNlbmRpZiAvKiBCUFJJTlQgKi8KKyNlbmRpZiAv KiAgT1MyICovCisjaWZkZWYgQlJPV1NFUgorICAgIHsgImJyb3dzZXIiLCAgICAgICAgICBYWUJS T1dTRSxDTV9QU0h8Q01fTE9DIH0sCisjZW5kaWYgLyogQlJPV1NFUiAqLworI2lmbmRlZiBOT1hG RVIKKyNpZmRlZiBEWU5BTUlDCisgICAgeyAiYnVmZmVycyIsICAgICAgICAgIFhZQlVGLCAgIDAg fSwKKyNlbmRpZiAvKiBEWU5BTUlDICovCisjZW5kaWYgLyogTk9YRkVSICovCisjaWZuZGVmIE5P TE9DQUwKKyNpZm5kZWYgTUFDCisgICAgeyAiY2Fycmllci13YXRjaCIsICAgIFhZQ0FSUiwgIENN X0xPQyB9LAorI2VuZGlmIC8qIE1BQyAqLworI2VuZGlmIC8qIE5PTE9DQUwgKi8KKyNpZm5kZWYg Tk9TUEwKKyAgICB7ICJjYXNlIiwgICAgICAgICAgICAgWFlDQVNFLCAgMCB9LAorI2VuZGlmIC8q IE5PU1BMICovCisgICAgeyAiY2QiLCAgICAgICAgICAgICAgIFhZQ0QsICAgIDAgfSwKKyNpZm5k ZWYgTk9YRkVSCisgICAgeyAiY2wiLCAgICAgICAgICAgICAgIFhZQ0xFQVIsIENNX0lOVnxDTV9B QlIgfSwKKyAgICB7ICJjbGUiLCAgICAgICAgICAgICAgWFlDTEVBUiwgQ01fSU5WfENNX0FCUiB9 LAorICAgIHsgImNsZWEiLCAgICAgICAgICAgICBYWUNMRUFSLCBDTV9JTlZ8Q01fQUJSIH0sCisg ICAgeyAiY2xlYXIiLCAgICAgICAgICAgIFhZQ0xFQVIsIENNX0lOVnxDTV9BQlIgfSwKKyAgICB7 ICJjbGVhci1jaGFubmVsIiwgICAgWFlDTEVBUiwgMCB9LAorICAgIHsgImNsZWFyY2hhbm5lbCIs ICAgICBYWUNMRUFSLCBDTV9JTlYgfSwKKyNlbmRpZiAvKiBOT1hGRVIgKi8KKyNpZm5kZWYgTk9M T0NBTAorICAgIHsgImNsb3NlLW9uLWRpc2Nvbm5lY3QiLCBYWURJU0MsIENNX0lOVnxDTV9MT0Mg fSwKKyNlbmRpZiAvKiBOT0xPQ0FMICovCisgICAgeyAiY21kIiwgICAgICAgICAgICAgIFhZQ01E LCAgIENNX0lOViB9LAorICAgIHsgImNvbW1hbmQiLCAgICAgICAgICBYWUNNRCwgICAwIH0sCisj aWZkZWYgQ0tfU1BFRUQKKyAgICB7ICJjb24iLCAgICAgICAgICAgICAgWFlRQ1RMLCAgQ01fSU5W fENNX0FCUiB9LAorI2VuZGlmIC8qIENLX1NQRUVEICovCisgICAgeyAiY29uc29sZSIsICAgICAg ICAgIFhZQ01ELCAgIENNX0lOViB9LAorI2lmZGVmIENLX1NQRUVECisgICAgeyAiY29udHJvbC1j aGFyYWN0ZXIiLFhZUUNUTCwgIDAgfSwKKyNlbmRpZiAvKiBDS19TUEVFRCAqLworI2lmbmRlZiBO T1NQTAorICAgIHsgImNvdW50IiwgICAgICAgICAgICBYWUNPVU4sICAwIH0sCisjZW5kaWYgLyog Tk9TUEwgKi8KKyNpZm5kZWYgTk9YRkVSCisgICAgeyAiZCIsCQkgIFhZREVMQSwgIENNX0lOVnxD TV9BQlIgfSwKKyAgICB7ICJkZSIsCQkgIFhZREVMQSwgIENNX0lOVnxDTV9BQlIgfSwKKyNlbmRp ZiAvKiBOT1hGRVIgKi8KKyAgICB7ICJkZWJ1ZyIsICAgICAgICAgICAgWFlERUJVLCAgMCB9LAor I2lmZGVmIFZNUworICAgIHsgImRlZmF1bHQiLCAgICAgICAgICBYWURGTFQsICAwIH0sCisjZWxz ZQorI2lmbmRlZiBNQUMKKyAgICB7ICJkZWZhdWx0IiwgICAgICAgICAgWFlERkxULCAgQ01fSU5W IH0sCisjZW5kaWYgLyogTUFDICovCisjZW5kaWYgLyogVk1TICovCisjaWZuZGVmIE5PWEZFUgor ICAgIHsgImRlbGF5IiwJICAgIAkgIFhZREVMQSwgIDAgfSwKKyAgICB7ICJkZXN0aW5hdGlvbiIs CSAgWFlERVNULCAgMCB9LAorI2VuZGlmIC8qIE5PWEZFUiAqLworI2lmbmRlZiBOT0RJQUwKKyAg ICB7ICJkaSIsCQkgIFhZRElBTCwgIENNX0lOVnxDTV9BQlJ8Q01fTE9DIH0sCisgICAgeyAiZGlh IiwJCSAgWFlESUFMLCAgQ01fSU5WfENNX0FCUnxDTV9MT0MgfSwKKyAgICB7ICJkaWFsIiwgICAg ICAgICAgICAgWFlESUFMLCAgQ01fTE9DIH0sCisjZW5kaWYgLyogTk9ESUFMICovCisjaWZkZWYg T1MyCisgICAgeyAiZGlhbGVyIiwJCSAgWFlETFIsICAgQ01fSU5WIH0sCisjZW5kaWYgLyogT1My ICovCisjaWZuZGVmIE5PTE9DQUwKKyAgICB7ICJkaXNjb25uZWN0IiwgICAgICAgWFlESVNDLCAg Q01fTE9DIH0sCisgICAgeyAiZHVwbGV4IiwJICAgIAkgIFhZRFVQTCwgIENNX0xPQyB9LAorI2Vu ZGlmIC8qIE5PTE9DQUwgKi8KKyNpZm5kZWYgTk9QVVNICisjaWZuZGVmIE5PRlJJTExTCisgICAg eyAiZWRpdG9yIiwgICAgICAgICAgIFhZRURJVCwgIENNX1BTSCB9LAorI2VuZGlmIC8qICBOT0ZS SUxMUyAqLworI2VuZGlmIC8qIE5PUFVTSCAqLworI2lmZGVmIENLX0NUUkxaCisgICAgeyAiZW9m IiwgICAgICAgICAgICAgIFhZRU9GLCAgIENNX0lOViB9LAorI2VuZGlmIC8qIENLX0NUUkxaICov CisjaWZuZGVmIE5PTE9DQUwKKyAgICB7ICJlc2NhcGUtY2hhcmFjdGVyIiwgWFlFU0MsICAgQ01f TE9DIH0sCisjZW5kaWYgLyogTk9MT0NBTCAqLworI2lmbmRlZiBOT1NQTAorICAgIHsgImV2YWx1 YXRlIiwgICAgICAgICBYWUVWQUwsICBDTV9JTlYgfSwKKyNlbmRpZiAvKiBOT1NQTCAqLworICAg IHsgImV4aXQiLAkJICBYWUVYSVQsICAwIH0sCisjaWZuZGVmIE5PWEZFUgorI2lmZGVmIENLX1hZ WgorI2lmbmRlZiBOT1BVU0gKKyNpZm5kZWYgWFlaX0lOVEVSTkFMCisgICAgeyAiZXh0ZXJuYWwt cHJvdG9jb2wiLFhZRVhUUk4sIDAgfSwKKyNlbmRpZgkvKiBYWVpfSU5URVJOQUwgKi8KKyNlbmRp ZgkvKiBOT1BVU0ggKi8KKyNlbmRpZgkvKiBDS19YWVogKi8KKyAgICB7ICJmLWFjay1idWciLCAg ICAgICAgWFlGQUNLQiwgQ01fSU5WIH0sCisgICAgeyAiZi1hY2stcGF0aCIsICAgICAgIFhZRkFD S1AsIENNX0lOViB9LAorI2VuZGlmIC8qIE5PWEZFUiAqLworICAgIHsgImZpbGUiLCAJICAJICBY WUZJTEUsICAwIH0sCisgICAgeyAiZmwiLCAgICAgICAgICAgCSAgWFlGTE9XLCAgQ01fSU5WfENN X0FCUiB9LAorI2lmbmRlZiBOT1NQTAorICAgIHsgImZsYWciLCAgICAgICAgICAgICBYWUZMQUcs ICAwIH0sCisjZW5kaWYgLyogTk9TUEwgKi8KKyNpZmRlZiBUQ1BTT0NLRVQKKyNpZm5kZWYgU1lT RlRQCisjaWZuZGVmIE5PRlRQCisgICAgeyAiZnQiLCAgIAkgICAgICAgICAgWFlGVFBYLCAgQ01f SU5WfENNX0FCUiB9LAorICAgIHsgImZ0cCIsICAJICAgICAgICAgIFhZRlRQWCwgIDAgfSwKKyNl bmRpZiAvKiBOT0ZUUCAqLworI2VuZGlmIC8qIFNZU0ZUUCAqLworI2VuZGlmIC8qIFRDUFNPQ0tF VCAqLworI2lmZGVmIEJST1dTRVIKKyAgICB7ICJmdHAtY2xpZW50IiwgICAgICAgWFlGVFAsICAg Q01fUFNIIH0sCisjZW5kaWYgLyogQlJPV1NFUiAqLworICAgIHsgImZsb3ctY29udHJvbCIsIAkg IFhZRkxPVywgIDAgfSwKKyNpZm5kZWYgTk9TUEwKKyAgICB7ICJmdW5jdGlvbiIsICAgICAgICAg WFlGVU5DLCAgMCB9LAorI2VuZGlmIC8qIE5PU1BMICovCisjaWZkZWYgTkVXRlRQCisgICAgeyAi Z2V0LXB1dC1yZW1vdGUiLCAgIFhZR1BSLCAgIDAgfSwKKyNlbmRpZiAvKiBORVdGVFAgKi8KKyNp ZmRlZiBLVUkKKyAgICB7ICJndWkiLCAgICAgICAgICAgICAgWFlHVUksICAgMCB9LAorI2VuZGlm IC8qIEtVSSAqLworICAgIHsgImhhbmRzaGFrZSIsICAgIAkgIFhZSEFORCwgIDAgfSwKKyAgICB7 ICJoaW50cyIsICAgICAgICAgICAgWFlISU5UUywgMCB9LAorI2lmZGVmIE5FVENPTk4KKyAgICB7 ICJob3N0IiwgICAgICAgICAgICAgWFlIT1NULCAgQ01fTE9DIH0sCisjZW5kaWYgLyogTkVUQ09O TiAqLworI2lmbmRlZiBOT1NQTAorICAgIHsgImkiLAkJICBYWUlOUFUsICBDTV9JTlZ8Q01fQUJS IH0sCisjZW5kaWYgLyogTk9TUEwgKi8KKyNpZmRlZiBJS1NECisgICAgeyAiaWtzIiwgICAgICAg ICAgICAgIFhZSUtTLCAgIDAgfSwKKyNlbHNlCisgICAgeyAiaWtzIiwgICAgICAgICAgICAgIFhZ SUtTLCAgIENNX0lOViB9LAorI2VuZGlmIC8qIElLU0QgKi8KKyNpZm5kZWYgTk9TUEwKKyAgICB7 ICJpbiIsCQkgIFhZSU5QVSwgIENNX0lOVnxDTV9BQlIgfSwKKyNlbmRpZiAvKiBOT1NQTCAqLwor I2lmbmRlZiBOT1hGRVIKKyAgICB7ICJpbmNvbXBsZXRlIiwgICAJICBYWUlGRCwgICBDTV9JTlYg fSwKKyNlbmRpZiAvKiBOT1hGRVIgKi8KKyNpZm5kZWYgTk9TUEwKKyAgICB7ICJpbnB1dCIsICAg ICAgICAgICAgWFlJTlBVLCAgMCB9LAorI2VuZGlmIC8qIE5PU1BMICovCisjaWZuZGVmIE5PU0VU S0VZCisgICAgeyAia2V5IiwJCSAgWFlLRVksICAgMCB9LAorI2VuZGlmIC8qIE5PU0VUS0VZICov CisgICAgeyAibCIsICAgICAgICAgICAgICAgIFhZTElORSwgIENNX0lOVnxDTV9BQlIgfSwKKyNp Zm5kZWYgTk9DU0VUUworICAgIHsgImxhbmd1YWdlIiwgICAgICAgICBYWUxBTkcsICAwIH0sCisj ZW5kaWYgLyogTk9DU0VUUyAqLworI2lmbmRlZiBOT0xPQ0FMCisgICAgeyAibGluZSIsICAgICAg ICAgICAgIFhZTElORSwgIENNX0xPQyB9LAorICAgIHsgImxvY2FsLWVjaG8iLAkgIFhZTENMRSwg IENNX0lOVnxDTV9MT0MgfSwKKyNlbmRpZiAvKiBOT0xPQ0FMICovCisjaWZkZWYgTE9DVVMKKyAg ICB7ICJsb2N1cyIsICAgICAgICAgICAgWFlMT0NVUywgMCB9LAorI2VuZGlmIC8qIExPQ1VTICov CisjaWZuZGVmIE5PU1BMCisgICAgeyAibG9naW4iLAkJICBYWUxPR0lOLCBDTV9MT0MgfSwKKyNl bmRpZiAvKiBOT1NQTCAqLworI2lmbmRlZiBOT1NQTAorICAgIHsgIm1hY3JvIiwgICAgICAgICAg ICBYWU1BQ1IsICAwIH0sCisjZW5kaWYgLyogTk9TUEwgKi8KKyAgICB7ICJtYXRjaCIsICAgICAg ICAgICAgWFlNQVRDSCwgMCB9LAorI2lmZGVmIENPTU1FTlQKKyNpZmRlZiBWTVMKKyAgICB7ICJt ZXNzYWdlcyIsICAgICAgICAgWFlNU0dTLCAgMCB9LAorI2VuZGlmIC8qIFZNUyAqLworI2VuZGlm IC8qIENPTU1FTlQgKi8KKyNpZm5kZWYgTk9ESUFMCisgICAgeyAibW9kZW0iLAkJICBYWU1PRE0s ICBDTV9MT0MgfSwKKyNlbmRpZiAvKiBOT0RJQUwgKi8KKyNpZm5kZWYgTk9MT0NBTAorI2lmZGVm IE9TMk1PVVNFCisgICAgeyAibW91c2UiLAkJICBYWU1PVVNFLCAwIH0sCisjZW5kaWYgLyogT1My TU9VU0UgKi8KKyNlbmRpZiAvKiBOT0xPQ0FMICovCisjaWZkZWYgT1MyCisgICAgeyAibXNrZXJt aXQiLCAgICAgICAgIFhZTVNLLCAgIDAgfSwKKyNlbmRpZiAvKiBPUzIgKi8KKyNpZmRlZiBORVRD T05OCisgICAgeyAibmV0d29yayIsICAgICAgICAgIFhZTkVULCAgIENNX0xPQyB9LAorI2VuZGlm IC8qIE5FVENPTk4gKi8KKyNpZm5kZWYgTk9TUEwKKyAgICB7ICJvdXRwdXQiLCAgICAgICAgICAg WFlPVVRQLCAgMCB9LAorI2VuZGlmIC8qIE5PU1BMICovCisgICAgeyAib3B0aW9ucyIsICAgICAg ICAgIFhZT1BUUywgIDAgfSwKKyAgICB7ICJwYXVzZSIsICAgICAgICAgICAgWFlTTEVFUCwgQ01f SU5WIH0sCisjaWZkZWYgQU5ZWDI1CisjaWZuZGVmIElCTVgyNQorICAgIHsgInBhZCIsICAgICAg ICAgICAgICBYWVBBRCwgICBDTV9MT0MgfSwKKyNlbmRpZiAvKiBJQk1YMjUgKi8KKyNlbmRpZiAv KiBBTllYMjUgKi8KKyAgICB7ICJwYXJpdHkiLAkgICAgCSAgWFlQQVJJLCAgMCB9LAorI2lmbmRl ZiBOT0xPQ0FMCisjaWZkZWYgT1MyCisgICAgeyAicG9ydCIsICAgICAgICAgICAgIFhZTElORSwg IENNX0xPQyB9LAorI2Vsc2UKKyAgICB7ICJwb3J0IiwgICAgICAgICAgICAgWFlMSU5FLCAgQ01f SU5WfENNX0xPQyB9LAorI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIE5PTE9DQUwgKi8KKyNp Zm5kZWYgTk9GUklMTFMKKyAgICB7ICJwciIsICAgCSAgICAJICBYWVBST00sICBDTV9JTlZ8Q01f QUJSIH0sCisgICAgeyAicHJpbnRlciIsICAgICAgICAgIFhZUFJUUiwgIDAgfSwKKyNlbmRpZiAv KiBOT0ZSSUxMUyAqLworI2lmZGVmIE9TMgorICAgIHsgInByaW9yaXR5IiwgICAgICAgICBYWVBS VFksICAwIH0sCisjZW5kaWYgLyogT1MyICovCisjaWZkZWYgQ0tfU1BFRUQKKyAgICB7ICJwcmVm aXhpbmciLCAgICAgICAgWFlQUkVGSVgsIDAgfSwKKyNlbmRpZiAvKiBDS19TUEVFRCAqLworI2lm bmRlZiBOT0ZSSUxMUworICAgIHsgInByb21wdCIsCSAgICAJICBYWVBST00sICAwIH0sCisjZW5k aWYgLyogTk9GUklMTFMgKi8KKyNpZm5kZWYgTk9YRkVSCisgICAgeyAicHJvdG9jb2wiLAkgIFhZ UFJPVE8sIDAgfSwKKyNlbmRpZiAvKiBOT1hGRVIgKi8KKyAgICB7ICJxIiwJCSAgWFlRVUlFLCAg Q01fSU5WfENNX0FCUiB9LAorI2lmbmRlZiBOT1hGRVIKKyAgICB7ICJxOGZsYWciLCAgICAgICAg ICAgWFlROEZMRywgQ01fSU5WIH0sCisjZW5kaWYgLyogTk9YRkVSICovCisjaWZkZWYgUU5YCisg ICAgeyAicW54LXBvcnQtbG9jayIsICAgIFhZUU5YUEwsIDAgfSwKKyNlbHNlCisgICAgeyAicW54 LXBvcnQtbG9jayIsICAgIFhZUU5YUEwsIENNX0lOViB9LAorI2VuZGlmIC8qIFFOWCAqLworICAg IHsgInF1aWV0IiwJCSAgWFlRVUlFLCAgMCB9LAorI2lmbmRlZiBOT1hGRVIKKyAgICB7ICJyZWMi LCAgICAgICAgICAgICAgWFlSRUNWLCAgQ01fSU5WfENNX0FCUiB9LAorICAgIHsgInJlY2VpdmUi LCAgICAgICAgICBYWVJFQ1YsICAwIH0sCisgICAgeyAicmVjdiIsICAgICAgICAgICAgIFhZUkVD ViwgIENNX0lOViB9LAorI2VuZGlmIC8qIE5PWEZFUiAqLworICAgIHsgInJlbGlhYmxlIiwgICAg ICAgICBYWVJFTFksICAwIH0sCisgICAgeyAicmVuYW1lIiwgICAgICAgICAgIFhZX1JFTiwgIDAg fSwKKyNpZm5kZWYgTk9YRkVSCisgICAgeyAicmVwZWF0IiwgICAgICAgICAgIFhZUkVQVCwgIDAg fSwKKyAgICB7ICJyZXRyeS1saW1pdCIsICAgICAgWFlSRVRSLCAgMCB9LAorI2VuZGlmIC8qIE5P WEZFUiAqLworI2lmZGVmIENLUk9PVAorICAgIHsgInJvb3QiLCAgICAgICAgICAgICBYWVJPT1Qs ICAwIH0sCisjZW5kaWYgLyogQ0tST09UICovCisjaWZuZGVmIE5PU0NSSVBUCisgICAgeyAic2Ny aXB0IiwJCSAgWFlTQ1JJLCAgQ01fTE9DIH0sCisjZW5kaWYgLyogTk9TQ1JJUFQgKi8KKyNpZm5k ZWYgTk9YRkVSCisgICAgeyAic2VuZCIsICAgICAgICAgICAgIFhZU0VORCwgIDAgfSwKKyNpZm5k ZWYgTk9MT0NBTAorI2lmbmRlZiBOT1NFUlZFUgorICAgIHsgInNlciIsICAgICAgICAgICAgICBY WVNFUlYsICBDTV9JTlZ8Q01fQUJSIH0sCisjZW5kaWYgLyogTk9TRVJWRVIgKi8KKyNlbmRpZiAv KiBOT1hGRVIgKi8KKyAgICB7ICJzZXJpYWwiLCAgICAgICAgICAgWFlTRVJJQUwsQ01fTE9DIH0s CisjZW5kaWYgLyogTk9MT0NBTCAqLworI2lmbmRlZiBOT1NFUlZFUgorICAgIHsgInNlcnZlciIs ICAgICAgICAgICBYWVNFUlYsICAwIH0sCisjZW5kaWYgLyogTk9TRVJWRVIgKi8KKyNpZmRlZiBT RVNMSU1JVAorI2lmbmRlZiBOT0xPQ0FMCisgICAgeyAic2Vzc2lvbi1sIiwgICAgICAgIFhZU0VT UywgIENNX0lOVnxDTV9BQlIgfSwKKyNlbmRpZiAvKiBOT0xPQ0FMICovCisgICAgeyAic2Vzc2lv bi1saW1pdCIsICAgIFhZTElNSVQsIENNX0lOVnxDTV9MT0MgfSwgLyogU2Vzc2lvbiBMaW1pdCAq LworI2VuZGlmIC8qIFNFU0xJTUlUICovCisKKyNpZm5kZWYgTk9MT0NBTAorICAgIHsgInNlc3Np b24tbG9nIiwgICAgICBYWVNFU1MsICBDTV9MT0MgfSwKKyNlbmRpZiAvKiBOT0xPQ0FMICovCisK KyNpZm5kZWYgTk9TUEwKKyNpZm5kZWYgTk9TRVhQCisgICAgeyAic2V4cHJlc3Npb24iLCAgICAg IFhZU0VYUCwgIENNX0lOViB9LAorI2VuZGlmIC8qIE5PU0VYUCAqLworI2VuZGlmIC8qIE5PU1BM ICovCisKKyAgICB7ICJzbGVlcCIsICAgICAgICAgICAgWFlTTEVFUCwgMCB9LAorCisjaWZuZGVm IE5PTE9DQUwKKyAgICB7ICJzcGVlZCIsCSAgICAgICAgICBYWVNQRUUsICBDTV9MT0MgfSwKKyNl bmRpZiAvKiBOT0xPQ0FMICovCisKKyNpZmRlZiBBTllTU0gKKyAgICB7ICJzc2giLAkgICAgICAg ICAgWFlTU0gsICAgMCB9LAorI2VuZGlmIC8qIEFOWVNTSCAqLworCisjaWZuZGVmIE5PU1BMCisg ICAgeyAic3RhcnR1cC1maWxlIiwgICAgIFhZU1RBUlRVUCwgQ01fSU5WIH0sCisjZW5kaWYgLyog Tk9TUEwgKi8KKworI2lmbmRlZiBOT0xPQ0FMCisjaWZkZWYgSFdQQVJJVFkKKyAgICB7ICJzdG9w LWJpdHMiLCAgICAgICAgWFlTVE9QLCBDTV9MT0MgfSwKKyNlbHNlCisjaWZkZWYgVE5fQ09NUE9S VAorICAgIHsgInN0b3AtYml0cyIsICAgICAgICBYWVNUT1AsIENNX0xPQyB9LAorI2VuZGlmIC8q IFROX0NPTVBPUlQgKi8KKyNlbmRpZiAvKiBIV1BBUklUWSAqLworI2VuZGlmIC8qIE5PTE9DQUwg Ki8KKworI2lmbmRlZiBOT1hGRVIKKyNpZmRlZiBTVFJFQU1JTkcKKyAgICB7ICJzdHJlYW1pbmci LCAgICAgICAgWFlTVFJFQU0sIDAgfSwKKyNlbmRpZiAvKiBTVFJFQU1JTkcgKi8KKyNlbmRpZiAv KiBOT1hGRVIgKi8KKworI2lmbmRlZiBOT0pDCisgICAgeyAic3VzcGVuZCIsICAgICAgICAgIFhZ U1VTUCwgIENNX1BTSCB9LAorI2VuZGlmIC8qIE5PSkMgKi8KKyNpZmRlZiBDS1NZU0xPRworICAg IHsgInN5c2xvZyIsICAgICAgICAgICBYWVNZU0wsICBDTV9JTlYgfSwKKyNlbmRpZiAvKiBDS1NZ U0xPRyAqLworICAgIHsgInRha2UiLCAgICAgICAgICAgICBYWVRBS0UsICAwIH0sCisKKyNpZmRl ZiBDS19UQVBJCisgICAgeyAidGFwaSIsICAgICAgICAgICAgIFhZVEFQSSwgIENNX0xPQyB9LAor I2VuZGlmIC8qIENLX1RBUEkgKi8KKworI2lmbmRlZiBOT1RDUE9QVFMKKyNpZmRlZiBUQ1BTT0NL RVQKKyAgICB7ICJ0Y3AiLCAgICAgICAgICAgICAgWFlUQ1AsICAgQ01fTE9DIH0sCisjZW5kaWYg LyogVENQU09DS0VUICovCisjZW5kaWYgLyogTk9UQ1BPUFRTICovCisKKyNpZmRlZiBUTkNPREUK KyAgICB7ICJ0ZWwiLCAgICAgICAgICAgICAgWFlURUwsICAgQ01fSU5WfENNX0FCUiB9LAorICAg IHsgInRlbG5ldCIsICAgICAgICAgICBYWVRFTCwgICAwIH0sCisgICAgeyAidGVsb3B0IiwgICAg ICAgICAgIFhZVEVMT1AsIDAgfSwKKyNlbmRpZiAvKiBUTkNPREUgKi8KKworI2lmbmRlZiBOT1NQ TAorICAgIHsgInRlbXAtZGlyZWN0b3J5IiwgICBYWVRNUERJUiwwIH0sCisjZW5kaWYgLyogTk9T UEwgKi8KKworI2lmbmRlZiBOT0xPQ0FMCisgICAgeyAidGVybWluYWwiLCAgICAgICAgIFhZVEVS TSwgIENNX0xPQyB9LAorI2VuZGlmIC8qIE5PTE9DQUwgKi8KKworI2lmZGVmIE9TMgorICAgIHsg InRpdGxlIiwJCSAgWFlUSVRMRSwgQ01fTE9DIH0sCisjZW5kaWYgLyogT1MyICovCisjaWZkZWYg VExPRworICAgIHsgInRyYW5zYWN0aW9uLWxvZyIsICBYWVRMT0csICAwIH0sCisjZW5kaWYgLyog VExPRyAqLworI2lmbmRlZiBOT1hGRVIKKyAgICB7ICJ0cmFuc2ZlciIsICAgICAgICAgWFlYRkVS LCAgMCB9LAorI2VuZGlmIC8qIE5PWEZFUiAqLworI2lmbmRlZiBOT1hNSVQKKyAgICB7ICJ0cmFu c21pdCIsICAgICAgICAgWFlYTUlULCAgMCB9LAorI2VuZGlmIC8qIE5PWE1JVCAqLworI2lmbmRl ZiBOT1hGRVIKKyNpZm5kZWYgTk9DU0VUUworICAgIHsgInVua25vd24tY2hhci1zZXQiLCBYWVVO Q1MsICAwIH0sCisjZW5kaWYgLyogTk9DU0VUUyAqLworI2lmbmRlZiBOT1NQTAorICAgIHsgInZh cmlhYmxlLWV2YWx1YXRpb24iLCBYWVZBUkVWLCBDTV9JTlYgfSwKKyNlbmRpZgkvKiBOT1NQTCAq LworI2VuZGlmIC8qIE5PWEZFUiAqLworICAgIHsgIndhaXQiLCAgICAgICAgICAgICBYWVNMRUVQ LCBDTV9JTlYgfSwKKyNpZm5kZWYgTk9QVVNICisjaWZkZWYgVU5JWAorICAgIHsgIndpbGRjYXJk LWV4cGFuc2lvbiIsIFhZV0lMRCwgMCB9LAorI2VuZGlmIC8qIFVOSVggKi8KKyNlbmRpZiAvKiBO T1BVU0ggKi8KKyNpZmRlZiBOVAorICAgIHsgInciLCAgICAgICAgICAgICAgICBYWVdJTkQsICBD TV9JTlZ8Q01fQUJSIH0sCisgICAgeyAid2kiLCAgICAgICAgICAgICAgIFhZV0lORCwgIENNX0lO VnxDTV9BQlIgfSwKKyAgICB7ICJ3aW4iLCAgICAgICAgICAgICAgWFlXSU5ELCAgQ01fSU5WfENN X0FCUiB9LAorI2VuZGlmIC8qIE5UICovCisgICAgeyAid2luZG93LXNpemUiLCAgICAgIFhZV0lO RCwgIDAgfSwKKyNpZmRlZiBOVAorICAgIHsgIndpbjk1IiwgICAgICAgICAgICBYWVdJTjk1LCAw IH0sCisjZW5kaWYgLyogTlQgKi8KKyNpZmRlZiBBTllYMjUKKyAgICB7ICJ4LjI1IiwgICAgICAg ICAgICAgWFlYMjUsICAgQ01fTE9DIH0sCisgICAgeyAieDI1IiwgICAgICAgICAgICAgIFhZWDI1 LCAgIENNX0lOVnxDTV9MT0MgfSwKKyNlbmRpZiAvKiBBTllYMjUgKi8KKyAgICB7ICJ4ZmVyIiwg ICAgICAgICAgICAgWFlYRkVSLCAgQ01fSU5WIH0sCisjaWZuZGVmIE5PWE1JVAorICAgIHsgInht aXQiLCAgICAgICAgICAgICBYWVhNSVQsICBDTV9JTlYgfSwKKyNlbmRpZiAvKiBOT1hNSVQgKi8K KyAgICB7ICIiLCAwLCAwIH0KK307CitpbnQgbnBybSA9IChzaXplb2YocHJtdGFiKSAvIHNpemVv ZihzdHJ1Y3Qga2V5dGFiKSkgLSAxOyAvKiBIb3cgbWFueSAqLworCitzdHJ1Y3Qga2V5dGFiIHNj bnRhYltdID0gewkJLyogU2NyZWVuIGNvbW1hbmRzICovCisgICAgeyAiY2xlYXIiLCAgIFNDTl9D TFIsIDAgfSwKKyAgICB7ICJjbGVvbCIsICAgU0NOX0NMRSwgMCB9LAorICAgIHsgIm1vdmUtdG8i LCBTQ05fTU9WLCAwIH0KK307CitpbnQgbnNjbnRhYiA9IChzaXplb2Yoc2NudGFiKSAvIHNpemVv ZihzdHJ1Y3Qga2V5dGFiKSk7IC8qIEhvdyBtYW55ICovCisKKyNpZmRlZiBBTllTU0gJCQkJLyog U1NIIGNvbW1hbmQgdGFibGUgKi8KKyNpZmRlZiBTU0hCVUlMVElOCitpbnQgICAgc3NoX3BmX2xj bF9uID0gMCwKKyAgICAgICBzc2hfcGZfcm10X24gPSAwOworc3RydWN0IHNzaF9wZiBzc2hfcGZf bGNsWzMyXSA9IHsgMCwgTlVMTCwgMCB9OyAvKiBTU0ggUG9ydCBGb3J3YXJkaW5nICovCitzdHJ1 Y3Qgc3NoX3BmIHNzaF9wZl9ybXRbMzJdID0geyAwLCBOVUxMLCAwIH07IC8qIHN0cnVjdHMuLi4g Ki8KK2V4dGVybiBjaGFyICogc3NoX2hzdCwgKiBzc2hfY21kLCAqIHNzaF9wcnQ7CitleHRlcm4g aW50ICAgIHNzaF92ZXIsICAgc3NoX3hmdzsKK2NoYXIgKiBzc2hfdG1wdWlkID0gTlVMTCwgKnNz aF90bXBjbWQgPSBOVUxMLCAqc3NoX3RtcHBvcnQgPSBOVUxMLAorICAgICAqIHNzaF90bXBzdHIg PSBOVUxMOworCitpbnQKKyBzc2hrX3R5cGUgPSBTU0hLVF8yRCwJCQkvKiBTU0ggS0VZIENSRUFU RSAvVFlQRTp4ICovCisgc3Noa19iaXRzID0gMTAyNCwJCQkvKiBTU0ggS0VZIENSRUFURSAvQklU UzpuICovCisgc3Noa19kaW4gID0gU0tERl9PU1NILAkJCS8qIFNTSCBLRVkgRElTUExBWSAvSU4t Rk9STUFUOiAqLworIHNzaGtfZG91dCA9IFNLREZfT1NTSDsJCQkvKiBTU0ggS0VZIERJU1BMQVkg L09VVC1GT1JNQVQ6ICovCisKK2NoYXIKKyAqIHNzaGsxX2NvbW1lbnQgPSBOVUxMLAkJLyogU1NI IFYxIENPTU1FTlQgKi8KKyAqIHNzaGtwX29sZCA9IE5VTEwsCQkJLyogT2xkIGtleSBwYXNzcGhy YXNlICovCisgKiBzc2hrcF9uZXcgPSBOVUxMLAkJCS8qIE5ldyBrZXkgcGFzc3BocmFzZSAqLwor ICogc3Noa2NfcGFzcyA9IE5VTEwsCQkJLyogS0VZIENSRUFURSAvUEFTUzp4eHggKi8KKyAqIHNz aGtjX2NvbW0gPSBOVUxMLAkJCS8qIEtFWSBDUkVBVEUgL1YxLVJTQS1DT01NRU5UOnh4eCAqLwor ICogc3NoZF9maWxlID0gTlVMTCwJCQkvKiBESVNQTEFZIGZpbGUgKi8KKyAqIHNzaGtfZmlsZSA9 IE5VTEw7CQkJLyogU1NIIENSRUFURSBLRVkgZmlsZSAqLworCitzdGF0aWMgc3RydWN0IGtleXRh YiBzc2hjbHJbXSA9IHsKKyAgICB7ICJsb2NhbC1wb3J0LWZvcndhcmQiLCAgU1NIQ19MUEYsIDAg fSwKKyAgICB7ICJyZW1vdGUtcG9ydC1mb3J3YXJkIiwgU1NIQ19SUEYsIDAgfSwKKyAgICB7ICIi LCAwLCAwIH0KK307CitzdGF0aWMgaW50IG5zc2hjbHIgPSAoc2l6ZW9mKHNzaGNscikgLyBzaXpl b2Yoc3RydWN0IGtleXRhYikpIC0gMTsKKworc3RydWN0IGtleXRhYiBzc2hvcG5zd1tdID0gewor ICAgIHsgIi9jb21tYW5kIiwgICAgICAgIFNTSFNXX0NNRCwgQ01fQVJHIH0sCisgICAgeyAiL3Bh c3N3b3JkIiwgICAgICAgU1NIU1dfUFdELCBDTV9BUkcgfSwKKyAgICB7ICIvc3Vic3lzdGVtIiwg ICAgICBTU0hTV19TVUIsIENNX0FSRyB9LAorICAgIHsgIi91c2VyIiwgICAgICAgICAgIFNTSFNX X1VTUiwgQ01fQVJHIH0sCisgICAgeyAiL3ZlcnNpb24iLCAgICAgICAgU1NIU1dfVkVSLCBDTV9B UkcgfSwKKyAgICB7ICIveDExLWZvcndhcmRpbmciLCBTU0hTV19YMTEsIENNX0FSRyB9LAorICAg IHsgIiIsIDAsIDAgfQorfTsKK2ludCBuc3Nob3Buc3cgPSAoc2l6ZW9mKHNzaG9wbnN3KSAvIHNp emVvZihzdHJ1Y3Qga2V5dGFiKSkgLSAxOworCitzdGF0aWMgc3RydWN0IGtleXRhYiBzc2hrd3Rh YltdID0geworICAgIHsgImFkZCIsICAgICAgICAgICAgICAgICBYU1NIX0FERCwgMCB9LAorICAg IHsgImFnZW50IiwgICAgICAgICAgICAgICBYU1NIX0FHVCwgMCB9LAorICAgIHsgImNsZWFyIiwg ICAgICAgICAgICAgICBYU1NIX0NMUiwgMCB9LAorICAgIHsgImZvcndhcmQtbG9jYWwtcG9ydCIs ICBYU1NIX0ZMUCwgQ01fSU5WIH0sCisgICAgeyAiZm9yd2FyZC1yZW1vdGUtcG9ydCIsIFhTU0hf RlJQLCBDTV9JTlYgfSwKKyAgICB7ICJrZXkiLCAgICAgICAgICAgICAgICAgWFNTSF9LRVksIDAg fSwKKyAgICB7ICJvcGVuIiwgICAgICAgICAgICAgICAgWFNTSF9PUE4sIDAgfSwKKyAgICB7ICJ2 MiIsICAgICAgICAgICAgICAgICAgWFNTSF9WMiwgIDAgfSwKKyAgICB7ICIiLCAwLCAwIH0KK307 CitzdGF0aWMgaW50IG5zc2hjbWQgPSAoc2l6ZW9mKHNzaGt3dGFiKSAvIHNpemVvZihzdHJ1Y3Qg a2V5dGFiKSkgLSAxOworCitzdGF0aWMgc3RydWN0IGtleXRhYiBzc2gydGFiW10gPSB7CisgICAg eyAicmVrZXkiLCBYU1NIMl9SS0UsIDAgfSwKKyAgICB7ICIiLCAwLCAwIH0KK307CitzdGF0aWMg aW50IG5zc2gydGFiID0gKHNpemVvZihzc2gydGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7 CisKK3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIGFkZGZ3ZFtdID0gewkvKiBTRVQgU1NIIEFERCBjb21t YW5kIHRhYmxlICovCisgICAgeyAibG9jYWwtcG9ydC1mb3J3YXJkIiwgIFNTSEZfTENMLCAwIH0s CisgICAgeyAicmVtb3RlLXBvcnQtZm9yd2FyZCIsIFNTSEZfUk1ULCAwIH0sCisgICAgeyAiIiwg MCwgMCB9Cit9Oworc3RhdGljIGludCBuYWRkZndkID0gKHNpemVvZihhZGRmd2QpIC8gc2l6ZW9m KHN0cnVjdCBrZXl0YWIpKSAtIDE7CisKK3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIHNzaGFnZW50W10g PSB7CS8qIFNFVCBTU0ggQUdFTlQgY29tbWFuZCB0YWJsZSAqLworICAgIHsgImFkZCIsICAgIFNT SEFfQURELCAwIH0sCisgICAgeyAiZGVsZXRlIiwgU1NIQV9ERUwsIDAgfSwKKyAgICB7ICJsaXN0 IiwgICBTU0hBX0xTVCwgMCB9LAorICAgIHsgIiIsIDAsIDAgfQorfTsKK3N0YXRpYyBpbnQgbnNz aGFnZW50ID0gKHNpemVvZihzc2hhZ2VudCkgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpIC0gMTsK Kworc3RhdGljIHN0cnVjdCBrZXl0YWIgc3NoYWd0c3dbXSA9IHsJLyogU0VUIFNTSCBBR0VOVCBM SVNUIHN3aXRjaCB0YWJsZSAqLworICAgIHsgIi9maW5nZXJwcmludCIsIFNTSEFTV19GUCwgMCB9 LAorICAgIHsgIiIsIDAsIDAgfQorfTsKK3N0YXRpYyBpbnQgbnNzaGFndHN3ID0gKHNpemVvZihz c2hhZ3RzdykgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpIC0gMTsKKworc3RhdGljIHN0cnVjdCBr ZXl0YWIgc3Noa2V5W10gPSB7CS8qIFNFVCBTU0ggS0VZIGNvbW1hbmQgdGFibGUgKi8KKyAgICB7 ICJjaGFuZ2UtcGFzc3BocmFzZSIsICBTU0hLX1BBU1MsIDAgfSwKKyAgICB7ICJjcmVhdGUiLCAg ICAgICAgICAgICBTU0hLX0NSRUEsIDAgfSwKKyAgICB7ICJkaXNwbGF5IiwgICAgICAgICAgICBT U0hLX0RJU1AsIDAgfSwKKyAgICB7ICJ2MSIsICAgICAgICAgICAgICAgICBTU0hLX1YxLCAgIDAg fSwKKyAgICB7ICIiLCAwLCAwIH0KK307CitzdGF0aWMgaW50IG5zc2hrZXkgPSAoc2l6ZW9mKHNz aGtleSkgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpIC0gMTsKKworc3RhdGljIHN0cnVjdCBrZXl0 YWIgc3Noa3YxW10gPSB7CS8qIFNFVCBTU0ggS0VZIFYxIGNvbW1hbmQgdGFibGUgKi8KKyAgICB7 ICJzZXQtY29tbWVudCIsICAxLCAwIH0KK307CisKK3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIHNzaGtw c3dbXSA9IHsJLyogU0VUIFNTSCBLRVkgUEFTU1BIUkFTRSB0YWJsZSAqLworICAgIHsgIi9uZXct cGFzc3BocmFzZSIsICAyLCBDTV9BUkcgfSwKKyAgICB7ICIvb2xkLXBhc3NwaHJhc2UiLCAgMSwg Q01fQVJHIH0KK307CisKK3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIHNzaGtjcmVhW10gPSB7CS8qIFNT SCBLRVkgQ1JFQVRFIHRhYmxlICovCisgICAgeyAiL2JpdHMiLCAgICAgICAgICAgU1NIS0NfQkks IENNX0FSRyB9LAorICAgIHsgIi9wYXNzcGhyYXNlIiwgICAgIFNTSEtDX1BQLCBDTV9BUkcgfSwK KyAgICB7ICIvdHlwZSIsICAgICAgICAgICBTU0hLQ19UWSwgQ01fQVJHIH0sCisgICAgeyAiL3Yx LXJzYS1jb21tZW50IiwgU1NIS0NfMVIsIENNX0FSRyB9Cit9Oworc3RhdGljIGludCBuc3Noa2Ny ZWEgPSAoc2l6ZW9mKHNzaGtjcmVhKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7CisKK3N0YXRp YyBzdHJ1Y3Qga2V5dGFiIHNzaGtjdHlbXSA9IHsJLyogU1NIIEtFWSBDUkVBVEUgL1RZUEU6eHh4 ICovCisgICAgeyAic3JwIiwgICAgU1NIS1RfU1JQLCAwIH0sCisgICAgeyAidjEtcnNhIiwgU1NI S1RfMVIsIDAgfSwKKyAgICB7ICJ2Mi1kc2EiLCBTU0hLVF8yRCwgMCB9LAorICAgIHsgInYyLXJz YSIsIFNTSEtUXzJSLCAwIH0KK307CitzdGF0aWMgaW50IG5zc2hrY3R5ID0gKHNpemVvZihzc2hr Y3R5KSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7CisKK3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIHNz aGRzd2lbXSA9IHsJLyogU0VUIFNTSCBLRVkgRElTUExBWSAvc3dpdGNoZXMgKi8KKyAgICB7ICIv Zm9ybWF0IiwgU1NIS0RfT1VULCBDTV9BUkcgfQorfTsKK3N0YXRpYyBpbnQgbnNzaGRzd2kgPSAo c2l6ZW9mKHNzaGRzd2kpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKKworI2lmZGVmIENPTU1F TlQKK3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIHNzaGRpZm10W10gPSB7CS8qIFNTSCBLRVkgRElTUExB WSAvSU4tRk9STUFUOiAqLworICAgIHsgIm9wZW5zc2giLCBTS0RGX09TU0gsIDAgfSwKKyAgICB7 ICJzc2guY29tIiwgU0tERl9TU0hDLCAwIH0KK307CitzdGF0aWMgaW50IG5zc2hkaWZtdCA9IChz aXplb2Yoc3NoZGlmbXQpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKKyNlbmRpZiAvKiBDT01N RU5UICovCisKK3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIHNzaGRvZm10W10gPSB7CS8qIFNTSCBLRVkg RElTUExBWSAvSU4tRk9STUFUOiAqLworICAgIHsgImZpbmdlcnByaW50IiwgU0tERl9GSU5HLCAw IH0sCisgICAgeyAiaWV0ZiIsICAgICAgICBTS0RGX0lFVEYsIDAgfSwKKyAgICB7ICJvcGVuc3No IiwgICAgIFNLREZfT1NTSCwgMCB9LAorICAgIHsgInNzaC5jb20iLCAgICAgU0tERl9TU0hDLCAw IH0KK307CitzdGF0aWMgaW50IG5zc2hkb2ZtdCA9IChzaXplb2Yoc3NoZG9mbXQpIC8gc2l6ZW9m KHN0cnVjdCBrZXl0YWIpKTsKKworc3RhdGljIHN0cnVjdCBrZXl0YWIgc3Noa2VybWl0W10gPSB7 IC8qIFNLRVJNSVQgKi8KKyAgICB7ICJvcGVuIiwgICAgICAgU0tSTV9PUE4sIDAgfQorfTsKK3N0 YXRpYyBpbnQgbnNzaGtlcm1pdCA9IChzaXplb2Yoc3Noa2VybWl0KSAvIHNpemVvZihzdHJ1Y3Qg a2V5dGFiKSk7CisKK3N0cnVjdCBrZXl0YWIgc3Noa3Jtb3Buc3dbXSA9IHsKKyAgICB7ICIvcGFz c3dvcmQiLCAgICAgICBTU0hTV19QV0QsIENNX0FSRyB9LAorICAgIHsgIi91c2VyIiwgICAgICAg ICAgIFNTSFNXX1VTUiwgQ01fQVJHIH0sCisgICAgeyAiL3ZlcnNpb24iLCAgICAgICAgU1NIU1df VkVSLCBDTV9BUkcgfSwKKyAgICB7ICIiLCAwLCAwIH0KK307CitpbnQgbnNzaGtybW9wbnN3ID0g KHNpemVvZihzc2hrcm1vcG5zdykgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpIC0gMTsKKyNlbmRp ZiAvKiBTU0hCVUlMVElOICovCisKKyNpZmRlZiBTRlRQX0JVSUxUSU4KK3N0YXRpYyBzdHJ1Y3Qg a2V5dGFiIHNmdHBrd3RhYltdID0geyAgICAvKiBTRlRQICovCisgICAgeyAgImNkIiwgICAgICAg IFNGVFBfQ0QsICAgIDAgfSwKKyAgICB7ICAiY2hncnAiLCAgICAgU0ZUUF9DSEdSUCwgMCB9LAor ICAgIHsgICJjaG1vZCIsICAgICBTRlRQX0NITU9ELCAwIH0sCisgICAgeyAgImNob3duIiwgICAg IFNGVFBfQ0hPV04sIDAgfSwKKyAgICB7ICAiZGVsZXRlIiwgICAgU0ZUUF9STSwgICAgMCB9LAor ICAgIHsgICJkaXIiLCAgICAgICBTRlRQX0RJUiwgICAwIH0sCisgICAgeyAgImdldCIsICAgICAg IFNGVFBfR0VULCAgIDAgfSwKKyAgICB7ICAibWtkaXIiLCAgICAgU0ZUUF9NS0RJUiwgMCB9LAor ICAgIHsgICJvcGVuIiwgICAgICBTRlRQX09QTiwgICAwIH0sCisgICAgeyAgInB1dCIsICAgICAg IFNGVFBfUFVULCAgIDAgfSwKKyAgICB7ICAicHdkIiwgICAgICAgU0ZUUF9QV0QsICAgMCB9LAor ICAgIHsgICJyZW5hbWUiLCAgICBTRlRQX1JFTiwgICAwIH0sCisgICAgeyAgInJtIiwgICAgICAg IFNGVFBfUk0sICAgIENNX0lOViB9LAorICAgIHsgICJybWRpciIsICAgICBTRlRQX1JNRElSLCAw IH0sCisgICAgeyAgInN5bWxpbmsiLCAgIFNGVFBfTElOSywgIDAgfSwKKyAgICB7ICAidmVyc2lv biIsICAgU0ZUUF9WRVIsICAgMCB9Cit9Oworc3RhdGljIGludCBuc2Z0cGt3dGFiID0gKHNpemVv ZihzZnRwa3d0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKKyNlbmRpZiAvKiBTRlRQX0JV SUxUSU4gKi8KKyNlbmRpZiAvKiBBTllTU0ggKi8KKworI2lmZGVmIE5FVENPTk4KK3N0cnVjdCBr ZXl0YWIgbmV0a2V5W10gPSB7CQkvKiBTRVQgTkVUV09SSyB0YWJsZSAqLworICAgIHsgImRpcmVj dG9yeSIsIFhZTkVUX0QsICAwIH0sCisgICAgeyAidHlwZSIsICAgICAgWFlORVRfVCwgIDAgfQor fTsKK2ludCBubmV0a2V5ID0gKHNpemVvZihuZXRrZXkpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIp KTsKKworc3RydWN0IGtleXRhYiBuZXRjbWRbXSA9IHsKKy8qCisgIFRoZXNlIGFyZSB0aGUgbmV0 d29yayB0eXBlcy4KKyovCisjaWZkZWYgTkVUQ01ECisgICAgeyAiY29tbWFuZCIsICAgICAgIE5F VF9DTUQsICBDTV9JTlYgfSwgLyogQ29tbWFuZCAqLworI2VuZGlmIC8qIE5FVENNRCAqLworCisj aWZkZWYgREVDTkVUCQkJCS8qIERFQ25ldCAvIFBBVEhXT1JLUyAqLworICAgIHsgImRlY25ldCIs ICAgICAgICBORVRfREVDLCAgMCB9LAorI2VuZGlmIC8qIERFQ05FVCAqLworCisjaWZkZWYgTkVU RExMCisgICAgeyAiZGxsIiwgICAgICAgICAgIE5FVF9ETEwsICBDTV9JTlYgfSwgLyogRExMIHRv IGJlIGxvYWRlZCAqLworI2VuZGlmIC8qIE5FVERMTCAqLworCisjaWZkZWYgTkVURklMRQorICAg IHsgImZpbGUiLCAgICAgICAgICAgTkVUX0ZJTEUsIENNX0lOViB9LCAvKiBGSUxFIChyZWFsIGNy dWRlKSAqLworI2VuZGlmIC8qIE5FVEZJTEUgKi8KKworI2lmZGVmIE5QSVBFCQkJCS8qIE5hbWVk IFBpcGVzICovCisgICAgeyAibmFtZWQtcGlwZSIsICAgICBORVRfUElQRSwgIDAgfSwKKyNlbmRp ZiAvKiBOUElQRSAqLworCisjaWZkZWYgQ0tfTkVUQklPUworICAgIHsgIm5ldGJpb3MiLCAgICAg ICAgTkVUX0JJT1MsICAwIH0sCS8qIE5FVEJJT1MgKi8KKyNlbmRpZiAvKiBDS19ORVRCSU9TICov CisKKyNpZmRlZiBERUNORVQJCQkJLyogREVDbmV0IC8gUEFUSFdPUktTIChhbGlhcykgKi8KKyAg ICB7ICJwYXRod29ya3MiLCAgICAgTkVUX0RFQywgIENNX0lOViB9LAorI2VuZGlmIC8qIERFQ05F VCAqLworCisjaWZkZWYgTkVUQ01ECisgICAgeyAicGlwZSIsICAgICAgICAgIE5FVF9DTUQsICAw IH0sCS8qIFBpcGUgKi8KKyNlbmRpZiAvKiBORVRDTUQgKi8KKworI2lmZGVmIE5FVFBUWQorICAg IHsgInBzZXVkb3Rlcm1pbmFsIixORVRfUFRZLCAwIH0sCS8qIFBzZXVkb3Rlcm1pbmFsICovCisj ZW5kaWYgLyogTkVUUFRZICovCisKKyNpZmRlZiBORVRQVFkKKyAgICB7ICJwdHkiLCAgICAgICAg ICBORVRfUFRZLCAgQ01fSU5WIH0sIC8qIEludiBzeW4gZm9yIHBzZXVkb3Rlcm0gKi8KKyNlbmRp ZiAvKiBORVRQVFkgKi8KKworI2lmZGVmIFNTSEJVSUxUSU4KKyAgICB7ICJzc2giLCAgICAgICAg ICBORVRfU1NILCAgMCB9LAorI2VuZGlmIC8qIFNTSEJVSUxUSU4gKi8KKworI2lmZGVmIFNVUEVS TEFUCisgICAgeyAic3VwZXJsYXQiLCAgICAgTkVUX1NMQVQsIDAgfSwJLyogTWVyaWRpYW4gVGVj aG5vbG9naWVzJyBTdXBlckxBVCAqLworI2VuZGlmIC8qIFNVUEVSTEFUICovCisKKyNpZmRlZiBU Q1BTT0NLRVQJCQkvKiBUQ1AvSVAgc29ja2V0cyBsaWJyYXJ5ICovCisgICAgeyAidGNwL2lwIiwg ICAgICAgTkVUX1RDUEIsIDAgfSwKKyNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KKyNpZmRlZiBTVVBF UkxBVAorICAgIHsgInRlczMyIiwgICAgICAgIE5FVF9TTEFULCAwIH0sCS8qIEVtdWx1eCBURVMz MiAqLworI2VuZGlmIC8qIFNVUEVSTEFUICovCisjaWZkZWYgQU5ZWDI1CQkJCS8qIFguMjUgKi8K KyNpZmRlZiBTVU5YMjUKKyAgICB7ICJ4IiwgICAgICAgICAgICBORVRfU1gyNSwgQ01fSU5WfENN X0FCUiB9LAorICAgIHsgInguMjUiLCAgICAgICAgIE5FVF9TWDI1LCAwIH0sCisgICAgeyAieDI1 IiwgICAgICAgICAgTkVUX1NYMjUsIENNX0lOViB9LAorI2Vsc2UKKyNpZmRlZiBTVFJBVFVTWDI1 CisgICAgeyAieCIsICAgICAgICAgICAgTkVUX1ZYMjUsIENNX0lOVnxDTV9BQlIgfSwKKyAgICB7 ICJ4LjI1IiwgICAgICAgICBORVRfVlgyNSwgMCB9LAorICAgIHsgIngyNSIsICAgICAgICAgIE5F VF9WWDI1LCBDTV9JTlYgfSwKKyNlbmRpZiAvKiBTVFJBVFVTWDI1ICovCisjZW5kaWYgLyogU1VO WDI1ICovCisjaWZkZWYgSUJNWDI1CisgICAgeyAieCIsICAgICAgICAgICAgTkVUX0lYMjUsIENN X0lOVnxDTV9BQlIgfSwKKyAgICB7ICJ4LjI1IiwgICAgICAgICBORVRfSVgyNSwgQ01fSU5WIH0s CisgICAgeyAieDI1IiwgICAgICAgICAgTkVUX0lYMjUsIENNX0lOViB9LAorI2VuZGlmIC8qIElC TVgyNSAqLworI2lmZGVmIEhQWDI1CisgICAgeyAieCIsICAgICAgICAgICAgTkVUX0lYMjUsIENN X0lOVnxDTV9BQlIgfSwKKyAgICB7ICJ4LjI1IiwgICAgICAgICBORVRfSVgyNSwgMCB9LAorICAg IHsgIngyNSIsICAgICAgICAgIE5FVF9JWDI1LCBDTV9JTlYgfSwKKyNlbmRpZiAvKiBIUFgyNSAq LworI2VuZGlmIC8qIEFOWVgyNSAqLworICAgIHsgIiIsIDAsIDAgfQorfTsKK2ludCBubmV0cyA9 IChzaXplb2YobmV0Y21kKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7CisKKyNpZm5kZWYgTk9U Q1BPUFRTCisjaWZkZWYgVENQU09DS0VUCisKKy8qIFRDUCBvcHRpb25zICovCisKK3N0cnVjdCBr ZXl0YWIgdGNwb3B0W10gPSB7CisgICAgeyAiYWRkcmVzcyIsICAgWFlUQ1BfQUREUkVTUywgMCB9 LAorI2lmZGVmIENLX0ROU19TUlYKKyAgICB7ICJkbnMtc2VydmljZS1yZWNvcmRzIiwgWFlUQ1Bf RE5TX1NSViwgMCB9LAorI2VuZGlmIC8qIENLX0ROU19TUlYgKi8KKyNpZmRlZiBTT19ET05UUk9V VEUKKyAgICB7ICJkb250cm91dGUiLCAgIFhZVENQX0RPTlRST1VURSwgMCB9LAorI2VuZGlmIC8q IFNPX0RPTlRST1VURSAqLworI2lmbmRlZiBOT0hUVFAKKyAgICB7ICJodHRwLXByb3h5IiwgWFlU Q1BfSFRUUF9QUk9YWSwgMCB9LAorI2VuZGlmIC8qIE5PSFRUUCAqLworI2lmZGVmIFNPX0tFRVBB TElWRQorICAgIHsgImtlZXBhbGl2ZSIsIFhZVENQX0tFRVBBTElWRSwgMCB9LAorI2VuZGlmIC8q IFNPX0tFRVBBTElWRSAqLworI2lmZGVmIFNPX0xJTkdFUgorICAgIHsgImxpbmdlciIsIFhZVENQ X0xJTkdFUiwgMCB9LAorI2VuZGlmIC8qIFNPX0xJTkdFUiAqLworI2lmZGVmIFRDUF9OT0RFTEFZ CisgICAgeyAibmFnbGUiLCAgWFlUQ1BfTkFHTEUsICAgIENNX0lOViB9LAorICAgIHsgIm5vZGVs YXkiLCBYWVRDUF9OT0RFTEFZLCAwIH0sCisjZW5kaWYgLyogVENQX05PREVMQVkgKi8KKyAgICB7 ICJyZXZlcnNlLWRucy1sb29rdXAiLCBYWVRDUF9SRE5TLCAwIH0sCisjaWZkZWYgU09fUkNWQlVG CisgICAgeyAicmVjdmJ1ZiIsIFhZVENQX1JFQ1ZCVUYsIDAgfSwKKyNlbmRpZiAvKiBTT19SQ1ZC VUYgKi8KKyNpZmRlZiBTT19TTkRCVUYKKyAgICB7ICJzZW5kYnVmIiwgWFlUQ1BfU0VOREJVRiwg MCB9LAorI2VuZGlmIC8qIFNPX1NOREJVRiAqLworI2lmZGVmIE5UCisjaWZkZWYgQ0tfU09DS1MK KyAgICB7ICJzb2Nrcy1zZXJ2ZXIiLCBYWVRDUF9TT0NLU19TVlIsIDAgfSwKKyNlbmRpZiAvKiBD S19TT0NLUyAqLworI2VuZGlmIC8qIE5UICovCisjaWZkZWYgVk1TCisjaWZkZWYgREVDX1RDUElQ CisgICAgeyAidWN4LXBvcnQtYnVnIiwgWFlUQ1BfVUNYLCAwIH0sCisjZW5kaWYgLyogREVDX1RD UElQICovCisjZW5kaWYgLyogVk1TICovCisgICAgeyAiIiwwLDAgfQorfTsKK2ludCBudGNwb3B0 ID0gKHNpemVvZih0Y3BvcHQpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKKyNlbmRpZiAvKiBU Q1BTT0NLRVQgKi8KKyNlbmRpZiAvKiBOT1RDUE9QVFMgKi8KKyNlbmRpZiAvKiBORVRDT05OICov CisKKyNpZmRlZiBPUzIKKy8qIEs5NSBNYW51YWwgQ2hhcHRlciBUYWJsZSAtLSBLZWVwIHRoZXNl IHR3byB0YWJsZXMgaW4gc3luYyEgKi8KKworc3RhdGljIGNoYXIgKiBsaW5rdGJsW10gPSB7CQkv KiBJbnRlcm5hbCBsaW5rcyBpbiBrOTUuaHRtICovCisgICAgIiN0b3AiLAkJCQkvKiAwMCAqLwor ICAgICIjd2hhdCIsCQkJCS8qIDAxICovCisgICAgIiNpbnN0YWxsIiwJCQkJLyogMDIgKi8KKyAg ICAiI3N0YXJ0IiwJCQkJLyogMDMgKi8KKyAgICAiI2RpYWxlciIsCQkJCS8qIDA0ICovCisgICAg IiNlbnRyaWVzIiwJCQkJLyogMDUgKi8KKyAgICAiI2NvbW1hbmQiLAkJCQkvKiAwNiAqLworICAg ICIjdGVybWluYWwiLAkJCS8qIDA3ICovCisgICAgIiN0cmFuc2ZlciIsCQkJLyogMDggKi8KKyAg ICAiI2hvc3Rtb2RlIgkJCQkvKiAwOSAqLworfTsKKworc3RhdGljIHN0cnVjdCBrZXl0YWIgY2hh cHRibFtdID0geworICAgIHsgIkNvbW1hbmQtU2NyZWVuIiwgICAgIDYsIDAgfSwKKyAgICB7ICJD b250ZW50cyIsICAgICAgICAgICAwLCAwIH0sCisgICAgeyAiRGlhbGVyLUVudHJpZXMiLCAgICAg NSwgMCB9LAorICAgIHsgIkZpbGUtVHJhbnNmZXIiLCAgICAgIDgsIDAgfSwKKyAgICB7ICJHZXR0 aW5nLVN0YXJ0ZWQiLCAgICAzLCAwIH0sCisgICAgeyAiSG9zdC1Nb2RlIiwgICAgICAgICAgOSwg MCB9LAorICAgIHsgIkluc3RhbGxhdGlvbiIsICAgICAgIDIsIDAgfSwKKyAgICB7ICJUZXJtaW5h bC1FbXVsYXRpb24iLCA3LCAwIH0sCisgICAgeyAiVXNpbmctVGhlLURpYWxlciIsICAgNCwgMCB9 LAorICAgIHsgIldoYXQtSXMtSzk1IiwgICAgICAgIDEsIDAgfSwKKyAgICB7ICIiLCAgICAgICAg ICAgICAgICAgICAwLCAwIH0KK307CitzdGF0aWMgaW50IG5jaGFwdGJsID0gKHNpemVvZihjaGFw dGJsKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSAtIDEpOworI2VuZGlmIC8qIE9TMiAqLworCisj aWZuZGVmIE5PWEZFUgorLyogUmVtb3RlIENvbW1hbmQgVGFibGUgKi8KKworc3RydWN0IGtleXRh YiByZW1jbWRbXSA9IHsKKyNpZm5kZWYgTk9TUEwKKyAgICB7ICJhcyIsICAgICAgICBYWkFTRywg Q01fSU5WfENNX0FCUiB9LAorICAgIHsgImFzZyIsICAgICAgIFhaQVNHLCBDTV9JTlYgfSwKKyAg ICB7ICJhc3NpZ24iLCAgICBYWkFTRywgMCB9LAorI2VuZGlmIC8qIE5PU1BMICovCisgICAgeyAi Y2QiLCAgICAgICAgWFpDV0QsIDAgfSwKKyAgICB7ICJjZHVwIiwgICAgICBYWkNEVSwgQ01fSU5W IH0sCisgICAgeyAiY29weSIsICAgICAgWFpDUFksIDAgfSwKKyAgICB7ICJjd2QiLCAgICAgICBY WkNXRCwgQ01fSU5WIH0sCisgICAgeyAiZGVsZXRlIiwgICAgWFpERUwsIDAgfSwKKyAgICB7ICJk aXJlY3RvcnkiLCBYWkRJUiwgMCB9LAorICAgIHsgImUiLCAgICAgICAgIFhaWElULCBDTV9BQlJ8 Q01fSU5WIH0sCisgICAgeyAiZXJhc2UiLCAgICAgWFpERUwsIENNX0lOViB9LAorICAgIHsgImV4 aXQiLCAgICAgIFhaWElULCAwIH0sCisgICAgeyAiaGVscCIsICAgICAgWFpITFAsIDAgfSwKKyNp Zm5kZWYgTk9QVVNICisgICAgeyAiaG9zdCIsICAgICAgWFpIT1MsIDAgfSwKKyNlbmRpZiAvKiBO T1BVU0ggKi8KKyNpZm5kZWYgTk9GUklMTFMKKyAgICB7ICJrZXJtaXQiLCAgICBYWktFUiwgMCB9 LAorICAgIHsgImwiLCAgICAgICAgIFhaTEdJLCBDTV9BQlJ8Q01fSU5WIH0sCisgICAgeyAibG8i LCAgICAgICAgWFpMR0ksIENNX0FCUnxDTV9JTlYgfSwKKyAgICB7ICJsb2ciLCAgICAgICBYWkxH SSwgQ01fQUJSfENNX0lOViB9LAorICAgIHsgImxvZ2luIiwgICAgIFhaTEdJLCAwIH0sCisgICAg eyAibG9nb3V0IiwgICAgWFpMR08sIDAgfSwKKyAgICB7ICJtZXNzYWdlIiwgICBYWk1TRywgMCB9 LAorICAgIHsgIm1rZGlyIiwgICAgIFhaTUtELCAwIH0sCisgICAgeyAicHJpbnQiLCAgICAgWFpQ UkksIDAgfSwKKyNlbmRpZiAvKiBOT0ZSSUxMUyAqLworICAgIHsgInB3ZCIsICAgICAgIFhaUFdE LCAwIH0sCisjaWZuZGVmIE5PU1BMCisgICAgeyAicXVlcnkiLAkgICBYWlFVRSwgMCB9LAorI2Vu ZGlmIC8qIE5PU1BMICovCisgICAgeyAicmVuYW1lIiwgICAgWFpSRU4sIDAgfSwKKyAgICB7ICJy bWRpciIsICAgICBYWlJNRCwgMCB9LAorICAgIHsgInNldCIsICAgICAgIFhaU0VULCAwIH0sCisg ICAgeyAic3BhY2UiLAkgICBYWlNQQSwgMCB9LAorI2lmbmRlZiBOT0ZSSUxMUworICAgIHsgInR5 cGUiLCAgICAgIFhaVFlQLCAwIH0sCisgICAgeyAid2hvIiwgICAgICAgWFpXSE8sIDAgfSwKKyNl bmRpZiAvKiBOT0ZSSUxMUyAqLworICAgIHsgIiIsIDAsIDB9Cit9OworaW50IG5ybXQgPSAoc2l6 ZW9mKHJlbWNtZCkgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpIC0gMTsKKyNlbmRpZiAvKiBOT1hG RVIgKi8KKworc3RydWN0IGtleXRhYiBsb2d0YWJbXSA9IHsKKyNpZmRlZiBDS0xPR0RJQUwKKyAg ICB7ICJjb25uZWN0aW9ucyIsICBMT0dNLCBDTV9JTlYgfSwKKyAgICB7ICJjeCIsICAgICAgICAg ICBMT0dNLCAwIH0sCisjZW5kaWYgLyogQ0tMT0dESUFMICovCisjaWZkZWYgREVCVUcKKyAgICB7 ICJkZWJ1Z2dpbmciLCAgICBMT0dELCAwIH0sCisjZW5kaWYgLyogREVCVUcgKi8KKyAgICB7ICJw YWNrZXRzIiwgICAgICBMT0dQLCAwIH0sCisjaWZuZGVmIE5PTE9DQUwKKyAgICB7ICJzZXNzaW9u IiwgICAgICBMT0dTLCAwIH0sCisjZW5kaWYgLyogTk9MT0NBTCAqLworI2lmZGVmIFRMT0cKKyAg ICB7ICJ0cmFuc2FjdGlvbnMiLCBMT0dULCAwIH0sCisjZW5kaWYgLyogVExPRyAqLworICAgIHsg IiIsIDAsIDAgfQorfTsKK2ludCBubG9nID0gKHNpemVvZihsb2d0YWIpIC8gc2l6ZW9mKHN0cnVj dCBrZXl0YWIpKSAtIDE7CisKK3N0cnVjdCBrZXl0YWIgd3JpdGFiW10gPSB7CisjaWZuZGVmIE5P U1BMCisgICAgeyAiYXBwZW5kLWZpbGUiLCAgICAgTE9HVywgQ01fSU5WIH0sCisjZW5kaWYgLyog Tk9TUEwgKi8KKyAgICB7ICJkZWJ1Zy1sb2ciLCAgICAgICBMT0dELCAwIH0sCisgICAgeyAiZXJy b3IiLCAgICAgICAgICAgTE9HRSwgMCB9LAorI2lmbmRlZiBOT1NQTAorICAgIHsgImZpbGUiLCAg ICAgICAgICAgIExPR1csIDAgfSwKKyNlbmRpZiAvKiBOT1NQTCAqLworICAgIHsgInBhY2tldC1s b2ciLCAgICAgIExPR1AsIDAgfSwKKyAgICB7ICJzY3JlZW4iLCAgICAgICAgICBMT0dYLCAwIH0s CisjaWZuZGVmIE5PTE9DQUwKKyAgICB7ICJzZXNzaW9uLWxvZyIsICAgICBMT0dTLCAwIH0sCisj ZW5kaWYgLyogTk9MT0NBTCAqLworICAgIHsgInN5cyRvdXRwdXQiLCAgICAgIExPR1gsIENNX0lO ViB9LAorICAgIHsgInQiLCAgICAgICAgICAgICAgIExPR1QsIENNX0FCUnxDTV9JTlYgfSwgLyog QmVjYXVzZSBvZiBhIHR5cG8gaW4gKi8KKyAgICB7ICJ0ciIsICAgICAgICAgICAgICBMT0dULCBD TV9BQlJ8Q01fSU5WIH0sIC8qIHRoZSBib29rLi4uICovCisgICAgeyAidHJhIiwgICAgICAgICAg ICAgTE9HVCwgQ01fQUJSfENNX0lOViB9LAorICAgIHsgInRyYW4iLCAgICAgICAgICAgIExPR1Qs IENNX0FCUnxDTV9JTlYgfSwKKyAgICB7ICJ0cmFucyIsICAgICAgICAgICBMT0dULCBDTV9BQlJ8 Q01fSU5WIH0sCisgICAgeyAidHJhbnNhIiwgICAgICAgICAgTE9HVCwgQ01fQUJSfENNX0lOViB9 LAorICAgIHsgInRyYW5zYWMiLCAgICAgICAgIExPR1QsIENNX0FCUnxDTV9JTlYgfSwKKyAgICB7 ICJ0cmFuc2FjdCIsICAgICAgICBMT0dULCBDTV9BQlJ8Q01fSU5WIH0sCisgICAgeyAidHJhbnNh Y3RpIiwgICAgICAgTE9HVCwgQ01fQUJSfENNX0lOViB9LAorICAgIHsgInRyYW5zYWN0aW8iLCAg ICAgIExPR1QsIENNX0FCUnxDTV9JTlYgfSwKKyAgICB7ICJ0cmFuc2FjdGlvbiIsICAgICBMT0dU LCBDTV9BQlJ8Q01fSU5WIH0sCisgICAgeyAidHJhbnNhY3Rpb24tbG9nIiwgTE9HVCwgMCB9LAor ICAgIHsgInRyYW5zYWN0aW9ucyIsICAgIExPR1QsIENNX0lOViB9Cit9OworaW50IG53cmkgPSAo c2l6ZW9mKHdyaXRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpOworCitzdGF0aWMgc3RydWN0 IGtleXRhYiBjbHJ0YWJbXSA9IHsJLyogS2V5d29yZHMgZm9yIENMRUFSIGNvbW1hbmQgKi8KKyNp Zm5kZWYgTk9TUEwKKyAgICB7ICJhbGFybSIsICAgICAgICAgICAgQ0xSX0FMUiwgICAgICAgICAw IH0sCisjaWZkZWYgQ0tfQVBDCisgICAgeyAiYXBjIiwgICAgICAgICAgICAgIENMUl9BUEMsICAg ICAgICAgMCB9LAorI2VuZGlmIC8qIENLX0FQQyAqLworI2lmZGVmIFBBVFRFUk5TCisgICAgeyAi YmluYXJ5LXBhdHRlcm5zIiwgIENMUl9CSU4sICAgICAgICAgMCB9LAorI2VuZGlmIC8qIFBBVFRF Uk5TICovCisgICAgeyAiYm90aCIsICAgICAgICAgICAgIENMUl9ERVZ8Q0xSX0lOUCwgQ01fSU5W IH0sCisjZW5kaWYgLyogTk9TUEwgKi8KKyNpZmRlZiBPUzIKKyAgICB7ICJjb21tYW5kLXNjcmVl biIsICAgQ0xSX0NNRCwgICAgICAgICAwIH0sCisjZW5kaWYgLyogT1MyICovCisjaWZuZGVmIE5P U1BMCisgICAgeyAiZGV2aWNlIiwgICAgICAgICAgIENMUl9ERVYsICAgICAgICAgQ01fSU5WfENN X0FCUiB9LAorICAgIHsgImRldmljZS1hbmQtaW5wdXQiLCBDTFJfREVWfENMUl9JTlAsIDAgfSwK KyNlbmRpZiAvKiBOT1NQTCAqLworICAgIHsgImRldmljZS1idWZmZXIiLCAgICBDTFJfREVWLCAg ICAgICAgIDAgfSwKKyNpZm5kZWYgTk9ESUFMCisgICAgeyAiZGlhbC1zdGF0dXMiLCAgICAgIENM Ul9ESUEsCSAwIH0sCisjZW5kaWYgLyogTk9ESUFMICovCisjaWZuZGVmIE5PU1BMCisgICAgeyAi aW5wdXQtYnVmZmVyIiwgICAgIENMUl9JTlAsICAgICAgICAgMCB9LAorI2VuZGlmIC8qIE5PU1BM ICovCisgICAgeyAia2V5Ym9hcmQtYnVmZmVyIiwgIENMUl9LQkQsICAgICAgICAgMCB9LAorICAg IHsgInNlbmQtbGlzdCIsICAgICAgICBDTFJfU0ZMLCAgICAgICAgIDAgfSwKKyNpZmRlZiBPUzIK KyAgICB7ICJzY3IiLCAgICAgICAgICAgICAgQ0xSX1NDTCwgICAgICAgICBDTV9JTlZ8Q01fQUJS IH0sCisjZW5kaWYgLyogT1MyICovCisgICAgeyAic2NyZWVuIiwgICAgICAgICAgIENMUl9TQ1Is ICAgICAgICAgMCB9LAorI2lmZGVmIE9TMgorICAgIHsgInNjcm9sbGJhY2siLCAgICAgICBDTFJf U0NMLCAgICAgICAgIENNX0lOViB9LAorICAgIHsgInRlcm1pbmFsLXNjcmVlbiIsICBDTFJfVFJN LCAgICAgICAgIDAgfSwKKyNlbmRpZiAvKiBPUzIgKi8KKyNpZmRlZiBQQVRURVJOUworICAgIHsg InRleHQtcGF0dGVybnMiLCAgICBDTFJfVFhULCAgICAgICAgIDAgfSwKKyNlbmRpZiAvKiBQQVRU RVJOUyAqLworICAgIHsgIiIsIDAsIDAgfQorfTsKK2ludCBuY2xlYXIgPSAoc2l6ZW9mKGNscnRh YikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpIC0gMTsKKworc3RydWN0IGtleXRhYiBjbHN0YWJb XSA9IHsJCS8qIEtleXdvcmRzIGZvciBDTE9TRSBjb21tYW5kICovCisjaWZuZGVmIE5PU1BMCisg ICAgeyAiIXJlYWQiLCAgICAgICAgICAgTE9HUiwgQ01fSU5WIH0sCisgICAgeyAiIXdyaXRlIiwg ICAgICAgICAgTE9HVywgQ01fSU5WIH0sCisjaWZuZGVmIE5PUFVTSAorI2VuZGlmIC8qIE5PUFVT SCAqLworI2VuZGlmIC8qIE5PU1BMICovCisjaWZuZGVmIE5PU1BMCisgICAgeyAiYXBwZW5kLWZp bGUiLCAgICAgTE9HVywgQ01fSU5WIH0sCisjZW5kaWYgLyogTk9TUEwgKi8KKyNpZm5kZWYgTk9M T0NBTAorICAgIHsgImNvbm5lY3Rpb24iLCAgICAgIDk5OTksIDAgfSwKKyNlbmRpZiAvKiBOT0xP Q0FMICovCisjaWZkZWYgQ0tMT0dESUFMCisgICAgeyAiY3gtbG9nIiwgICAgICAgICAgTE9HTSwg MCB9LAorI2VuZGlmIC8qIENLTE9HRElBTCAqLworI2lmZGVmIERFQlVHCisgICAgeyAiZGVidWct bG9nIiwgICAgICAgTE9HRCwgMCB9LAorI2VuZGlmIC8qIERFQlVHICovCisgICAgeyAiaG9zdCIs ICAgICAgICAgICAgOTk5OSwgQ01fSU5WIH0sIC8qIFN5bm9ueW0gZm9yIENMT1NFIENPTk5FQ1RJ T04gKi8KKyAgICB7ICJsaW5lIiwgICAgICAgICAgICA5OTk5LCBDTV9JTlYgfSwgLyogU3lub255 bSBmb3IgQ0xPU0UgQ09OTkVDVElPTiAqLworICAgIHsgInAiLCAgICAgICAgICAgICAgIExPR1As IENNX0lOVnxDTV9BQlIgfSwKKyAgICB7ICJwYWNrZXQtbG9nIiwgICAgICBMT0dQLCAwIH0sCisg ICAgeyAicG9ydCIsICAgICAgICAgICAgOTk5OSwgQ01fSU5WIH0sIC8qIFN5bm9ueW0gZm9yIENM T1NFIENPTk5FQ1RJT04gKi8KKyNpZm5kZWYgTk9TUEwKKyAgICB7ICJyZWFkLWZpbGUiLCAgICAg ICBMT0dSLCAwIH0sCisjZW5kaWYgLyogTk9TUEwgKi8KKyNpZm5kZWYgTk9MT0NBTAorICAgIHsg InNlc3Npb24tbG9nIiwgICAgIExPR1MsIDAgfSwKKyNlbmRpZiAvKiBOT0xPQ0FMICovCisjaWZk ZWYgVExPRworICAgIHsgInQiLCAgICAgICAgICAgICAgIExPR1QsIENNX0FCUnxDTV9JTlYgfSwg LyogQmVjYXVzZSBvZiBhIHR5cG8gaW4gKi8KKyAgICB7ICJ0ciIsICAgICAgICAgICAgICBMT0dU LCBDTV9BQlJ8Q01fSU5WIH0sIC8qIHRoZSBib29rLi4uICovCisgICAgeyAidHJhIiwgICAgICAg ICAgICAgTE9HVCwgQ01fQUJSfENNX0lOViB9LAorICAgIHsgInRyYW4iLCAgICAgICAgICAgIExP R1QsIENNX0FCUnxDTV9JTlYgfSwKKyAgICB7ICJ0cmFucyIsICAgICAgICAgICBMT0dULCBDTV9B QlJ8Q01fSU5WIH0sCisgICAgeyAidHJhbnNhIiwgICAgICAgICAgTE9HVCwgQ01fQUJSfENNX0lO ViB9LAorICAgIHsgInRyYW5zYWMiLCAgICAgICAgIExPR1QsIENNX0FCUnxDTV9JTlYgfSwKKyAg ICB7ICJ0cmFuc2FjdCIsICAgICAgICBMT0dULCBDTV9BQlJ8Q01fSU5WIH0sCisgICAgeyAidHJh bnNhY3RpIiwgICAgICAgTE9HVCwgQ01fQUJSfENNX0lOViB9LAorICAgIHsgInRyYW5zYWN0aW8i LCAgICAgIExPR1QsIENNX0FCUnxDTV9JTlYgfSwKKyAgICB7ICJ0cmFuc2FjdGlvbiIsICAgICBM T0dULCBDTV9BQlJ8Q01fSU5WIH0sCisgICAgeyAidHJhbnNhY3Rpb24tbG9nIiwgTE9HVCwgMCB9 LAorICAgIHsgInRyYW5zYWN0aW9ucyIsICAgIExPR1QsIENNX0lOViB9LAorI2VuZGlmIC8qIFRM T0cgKi8KKyNpZm5kZWYgTk9TUEwKKyAgICB7ICJ3cml0ZS1maWxlIiwgICAgICBMT0dXLCAwIH0s CisjZW5kaWYgLyogTk9TUEwgKi8KKyAgICB7ICIiLCAwLCAwIH0KK307CitpbnQgbmNscyA9IChz aXplb2YoY2xzdGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSkgLSAxOworCisvKiBTSE9XIGNv bW1hbmQgYXJndW1lbnRzICovCisKKyNpZm5kZWYgTk9TSE9XCitzdHJ1Y3Qga2V5dGFiIHNob3Rh YltdID0geworI2lmbmRlZiBOT1NQTAorICAgIHsgImFsYXJtIiwgICAgICAgIFNIQUxSTSwgMCB9 LAorICAgIHsgImFyZyIsICAgICAgICAgIFNIQVJHLCBDTV9JTlZ8Q01fQUJSIH0sCisgICAgeyAi YXJndW1lbnRzIiwgICAgU0hBUkcsIDAgfSwKKyAgICB7ICJhcmdzIiwgICAgICAgICBTSEFSRywg Q01fSU5WIH0sCisgICAgeyAiYXJyYXlzIiwgICAgICAgU0hBUlIsIDAgfSwKKyNlbmRpZiAvKiBO T1NQTCAqLworCisjaWZuZGVmIE5PQ1NFVFMKKyAgICB7ICJhc3NvY2lhdGlvbnMiLCBTSEFTU09D LCAwIH0sCisjZW5kaWYgLyogTk9DU0VUUyAqLworCisjaWZuZGVmIE5PWEZFUgorICAgIHsgImF0 dHJpYnV0ZXMiLCAgIFNIQVRULCAwIH0sCisjZW5kaWYgLyogTk9YRkVSICovCisKKyNpZmRlZiBD S19BVVRIRU5USUNBVElPTgorICAgIHsgImF1dGhlbnRpY2F0aW9uIiwgU0hPQVVUSCwgQ01fSU5W IH0sCisjZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJT04gKi8KKworI2lmbmRlZiBOT1BVU0gKKyNp ZmRlZiBCUk9XU0VSCisgICAgeyAiYnJvd3NlciIsICAgICAgU0hCUk9XU0UsIENNX1BTSHxDTV9M T0MgfSwKKyNlbmRpZiAvKiAgQlJPV1NFUiAqLworI2VuZGlmIC8qIE5PUFVTSCAqLworICAgIHsg ImNkIiwgICAgICAgICAgIFNIQ0QsIDAgfSwKKyAgICB7ICJjaGFyYWN0ZXItc2V0cyIsIFNIQ1NF LCAwIH0sCisgICAgeyAiY21kIiwgICAgICAgICAgU0hDTUQsIENNX0lOViB9LAorI2lmbmRlZiBO T0xPQ0FMCisgICAgeyAiY29tIiwgICAgICAgICAgU0hDT00sIENNX0lOVnxDTV9BQlIgfSwKKyAg ICB7ICJjb21tIiwgICAgICAgICBTSENPTSwgQ01fSU5WfENNX0FCUiB9LAorICAgIHsgImNvbW11 bmljYXRpb25zIiwgU0hDT00sIDAgfSwKKyNlbmRpZiAvKiBOT0xPQ0FMICovCisgICAgeyAiY29t bWFuZCIsICAgICAgU0hDTUQsIDAgfSwKKyAgICB7ICJjb25uZWN0aW9uIiwgICBTSENPTk5YLCAw IH0sCisjaWZkZWYgQ0tfU1BFRUQKKyAgICB7ICJjb250cm9sLXByZWZpeGluZyIsIFNIQ1RMLCAw IH0sCisjZW5kaWYgLyogQ0tfU1BFRUQgKi8KKyNpZmRlZiBDS0xPR0RJQUwKKyAgICB7ICJjeCIs ICAgICAgICAgICBTSENPTk5YLCBDTV9JTlYgfSwKKyNlbmRpZiAvKiBDS0xPR0RJQUwgKi8KKyNp Zm5kZWYgTk9TUEwKKyAgICB7ICJjb3VudCIsICAgICAgICBTSENPVSwgMCB9LAorI2VuZGlmIC8q IE5PU1BMICovCisgICAgeyAiZCIsICAgICAgICAgICAgU0hESUEsIENNX0lOVnxDTV9BQlIgfSwK KyNpZmRlZiBWTVMKKyAgICB7ICJkZWZhdWx0IiwgICAgICBTSERGTFQsIDAgfSwKKyNlbHNlCisg ICAgeyAiZGVmYXVsdCIsICAgICAgU0hERkxULCBDTV9JTlYgfSwKKyNlbmRpZiAvKiBWTVMgKi8K KyNpZm5kZWYgTk9ESUFMCisgICAgeyAiZGlhbCIsICAgICAgICAgU0hESUEsIENNX0xPQyB9LAor I2VuZGlmIC8qIE5PRElBTCAqLworICAgIHsgImRvdWJsZS9pZ25vcmUiLFNIREJMLCAwIH0sCisj aWZuZGVmIE5PUFVTSAorI2lmbmRlZiBOT0ZSSUxMUworICAgIHsgImVkaXRvciIsICAgICAgIFNI RURJVCwgQ01fUFNIIH0sCisjZW5kaWYgLyogIE5PRlJJTExTICovCisjZW5kaWYgLyogTk9QVVNI ICovCisjaWZuZGVmIE5PTE9DQUwKKyAgICB7ICJlc2NhcGUiLCAgICAgICBTSEVTQywgQ01fTE9D IH0sCisjZW5kaWYgLyogTk9MT0NBTCAqLworICAgIHsgImV4aXQiLCAgICAgICAgIFNIRVhJLCAw IH0sCisgICAgeyAiZXh0ZW5kZWQtb3B0aW9ucyIsIFNIWE9QVCwgQ01fSU5WIH0sCisgICAgeyAi ZmVhdHVyZXMiLCAgICAgU0hGRUEsIDAgfSwKKyAgICB7ICJmaWxlIiwgICAgICAgICBTSEZJTCwg MCB9LAorI2lmbmRlZiBOT0xPQ0FMCisgICAgeyAiZmxvdy1jb250cm9sIiwgU0hPRkxPLCAwIH0s CisjZW5kaWYgLyogTk9MT0NBTCAqLworI2lmZGVmIEJST1dTRVIKKyAgICB7ICJmdHAiLCAgICAg ICAgICBTSE9GVFAsIENNX1BTSHxDTV9MT0MgfSwKKyNlbHNlCisjaWZuZGVmIE5PRlRQCisjaWZu ZGVmIFNZU0ZUUAorI2lmZGVmIFRDUFNPQ0tFVAorICAgIHsgImZ0cCIsICAgICAgICAgIFNIT0ZU UCwgMCB9LAkvKiAoYnVpbHQtaW4gZnRwKSAqLworI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLworI2Vu ZGlmIC8qIFNZU0ZUUCAqLworI2VuZGlmIC8qIE5PRlRQICovCisjZW5kaWYgLyogQlJPV1NFUiAq LworI2lmbmRlZiBOT1NQTAorICAgIHsgImZ1bmN0aW9ucyIsICAgIFNIRlVOLCAwIH0sCisgICAg eyAiZ2xvYmFscyIsICAgICAgU0hWQVIsIDAgfSwKKyNlbmRpZiAvKiBOT1NQTCAqLworI2lmZGVm IEtVSQorICAgIHsgImd1aSIsICAgICAgICAgIFNIT0dVSSwgMCB9LAorI2VuZGlmIC8qIEtVSSAq LworI2lmZGVmIENLX1JFQ0FMTAorICAgIHsgImhpc3RvcnkiLCAgICAgIFNISElTVE9SWSwgMCB9 LAorI2VuZGlmIC8qIENLX1JFQ0FMTCAqLworICAgIHsgImlnbm9yZS9kb3VibGUiLFNIREJMLCBD TV9JTlYgfSwKKyAgICB7ICJpa3NkIiwgICAgICAgICBTSE9JS1MsIENNX0lOViB9LAorI2lmbmRl ZiBOT1NQTAorICAgIHsgImlucHV0IiwgICAgICAgIFNISU5QLCAwIH0sCisjZW5kaWYgLyogTk9T UEwgKi8KKyNpZm5kZWYgTk9TRVRLRVkKKyAgICB7ICJrIiwgICAgICAgICAgICBTSEtFWSwgQ01f SU5WfENNX0FCUiB9LAorICAgIHsgImtleSIsICAgICAgICAgIFNIS0VZLCAwIH0sCisjaWZuZGVm IE5PS1ZFUkJTCisgICAgeyAia3ZlcmJzIiwgICAgICAgU0hLVkIsIDAgfSwKKyNlbmRpZiAvKiBO T0tWRVJCUyAqLworI2VuZGlmIC8qIE5PU0VUS0VZICovCisjaWZkZWYgQ0tfTEFCRUxFRAorICAg IHsgImxhYmVsZWQtZmlsZS1pbmZvIiwgU0hMQkwsIDAgfSwKKyNlbmRpZiAvKiBDS19MQUJFTEVE ICovCisjaWZuZGVmIE5PQ1NFVFMKKyAgICB7ICJsYW5ndWFnZXMiLCAgICBTSExORywgMCB9LAor I2VuZGlmIC8qIE5PQ1NFVFMgKi8KKyAgICB7ICJsb2dzIiwgICAgICAgICBTSExPRywgMCB9LAor I2lmbmRlZiBOT1NQTAorICAgIHsgIm1hY3JvcyIsICAgICAgIFNITUFDLCAwIH0sCisjZW5kaWYg LyogTk9TUEwgKi8KKyNpZm5kZWYgTk9ESUFMCisgICAgeyAibW9kZW0iLCAgICAgICAgU0hNT0Qs IENNX0xPQyB9LAorI2Vsc2UKKyAgICB7ICJtb2RlbS1zaWduYWxzIixTSENPTSwgQ01fSU5WfENN X0xPQyB9LAorI2VuZGlmIC8qIE5PRElBTCAqLworI2lmbmRlZiBOT0xPQ0FMCisjaWZkZWYgT1My TU9VU0UKKyAgICB7ICJtb3VzZSIsICAgICAgICBTSE1PVSwgQ01fTE9DIH0sCisjZW5kaWYgLyog T1MyTU9VU0UgKi8KKyNlbmRpZiAvKiBOT0xPQ0FMICovCisjaWZkZWYgTkVUQ09OTgorICAgIHsg Im5ldHdvcmsiLCAgICAgIFNITkVULCBDTV9MT0MgfSwKKyNlbHNlCisgICAgeyAibmV0d29yayIs ICAgICAgU0hORVQsIENNX0lOVnxDTV9MT0MgfSwKKyNlbmRpZiAvKiBORVRDT05OICovCisgICAg eyAib3B0aW9ucyIsICAgICAgU0hPUFRTLCAwIH0sCisjaWZuZGVmIE5PU1BMCisgICAgeyAib3V0 cHV0IiwgICAgICAgU0hPVVRQLCBDTV9JTlYgfSwKKyNlbmRpZiAvKiBOT1NQTCAqLworI2lmZGVm IEFOWVgyNQorI2lmbmRlZiBJQk1YMjUKKyAgICB7ICJwYWQiLCAgICAgICAgICBTSFBBRCwgIENN X0xPQyB9LAorI2VuZGlmIC8qIElCTVgyNSAqLworI2VuZGlmIC8qIEFOWVgyNSAqLworICAgIHsg InBhcmFtZXRlcnMiLCAgIFNIUEFSLCAgQ01fSU5WIH0sCisjaWZkZWYgUEFUVEVSTlMKKyAgICB7 ICJwYXR0ZXJucyIsICAgICBTSE9QQVQsIDAgfSwKKyNlbmRpZiAvKiBQQVRURVJOUyAqLworICAg IHsgInByaW50ZXIiLCAgICAgIFNIUFJULCAgMCB9LAorI2lmZGVmIENLX1NQRUVECisgICAgeyAi cHJlZml4aW5nIiwgICAgU0hDVEwsICBDTV9JTlYgfSwKKyNlbmRpZiAvKiBDS19TUEVFRCAqLwor I2lmbmRlZiBOT1hGRVIKKyAgICB7ICJwcm90b2NvbCIsICAgICBTSFBSTywgIDAgfSwKKyNlbmRp ZiAvKiBOT1hGRVIgKi8KKyAgICB7ICJyZW5hbWUiLCAgICAgICBTSE9SRU4sIDAgfSwKKyNpZm5k ZWYgTk9TUEwKKyAgICB7ICJzY3JpcHRzIiwgICAgICBTSFNDUiwgIENNX0xPQyB9LAorI2VuZGlm IC8qIE5PU1BMICovCisgICAgeyAic2VuZC1saXN0IiwgICAgU0hTRkwsICAwIH0sCisjaWZuZGVm IE5PU0VSVkVSCisgICAgeyAic2VydmVyIiwgICAgICAgU0hTRVIsICAwIH0sCisjZW5kaWYgLyog Tk9TRVJWRVIgKi8KKyNpZm5kZWYgTk9TRVhQCisgICAgeyAic2V4cHJlc3Npb24iLCAgU0hTRVhQ LCAwIH0sCisjZW5kaWYgLyogTk9TRVhQICovCisjaWZkZWYgQU5ZU1NICisgICAgeyAic3NoIiwg ICAgICAgICAgU0hPU1NILCAwIH0sCisjZW5kaWYgLyogQU5ZU1NIICovCisgICAgeyAic3RhY2si LCAgICAgICAgU0hTVEssICAwIH0sCisgICAgeyAic3RhdHVzIiwgICAgICAgU0hTVEEsICAwIH0s CisjaWZkZWYgU1RSRUFNSU5HCisgICAgeyAic3RyZWFtaW5nIiwgICAgU0hPU1RSLCAwIH0sCisj ZW5kaWYgLyogU1RSRUFNSU5HICovCisjaWZuZGVmIE5PTE9DQUwKKyNpZmRlZiBPUzIKKyAgICB7 ICJ0YWJzIiwgICAgICAgICAgU0hUQUIsIENNX0lOVnxDTV9MT0MgfSwKKyNlbmRpZiAvKiBPUzIg Ki8KKyNpZmRlZiBDS19UQVBJCisgICAgeyAidGFwaSIsICAgICAgICAgIFNIVEFQSSwgQ01fTE9D IH0sCisgICAgeyAidGFwaS1jb21tIiwgICAgIFNIVEFQSV9DLCBDTV9JTlZ8Q01fTE9DIH0sCisg ICAgeyAidGFwaS1sb2NhdGlvbiIsIFNIVEFQSV9MLCBDTV9JTlZ8Q01fTE9DIH0sCisgICAgeyAi dGFwaS1tb2RlbSIsICAgIFNIVEFQSV9NLCBDTV9JTlZ8Q01fTE9DIH0sCisjZW5kaWYgLyogQ0tf VEFQSSAqLworICAgIHsgInRjcCIsICAgICAgICAgICBTSFRDUCwgIENNX0xPQyB9LAorI2lmZGVm IFROQ09ERQorICAgIHsgInRlbCIsICAgICAgICAgICBTSFRFTCwgIENNX0lOVnxDTV9BQlIgfSwK KyAgICB7ICJ0ZWxuZXQiLCAgICAgICAgU0hURUwsICAwIH0sCisgICAgeyAidGVsb3B0IiwgICAg ICAgIFNIVE9QVCwgMCB9LAorI2VuZGlmIC8qIFROQ09ERSAqLworICAgIHsgInRlcm1pbmFsIiwg ICAgICBTSFRFUiwgIENNX0xPQyB9LAorI2VuZGlmIC8qIE5PTE9DQUwgKi8KKyNpZm5kZWYgTk9Y TUlUCisgICAgeyAidHIiLCAgICAgICAgICAgIFNIWE1JLCBDTV9JTlZ8Q01fQUJSIH0sCisgICAg eyAidHJhIiwgICAgICAgICAgIFNIWE1JLCBDTV9JTlZ8Q01fQUJSIH0sCisgICAgeyAidHJhbiIs ICAgICAgICAgIFNIWE1JLCBDTV9JTlZ8Q01fQUJSIH0sCisgICAgeyAidHJhbnMiLCAgICAgICAg IFNIWE1JLCBDTV9JTlZ8Q01fQUJSIH0sCisjZW5kaWYgLyogTk9YTUlUICovCisjaWZuZGVmIE5P WEZFUgorICAgIHsgInRyYW5zZmVyIiwgICAgICBTSE9YRkVSLCAwIH0sCisjZW5kaWYgLyogTk9Y RkVSICovCisjaWZuZGVmIE5PWE1JVAorICAgIHsgInRyYW5zbWl0IiwgICAgICBTSFhNSSwgMCB9 LAorI2VuZGlmIC8qIE5PWE1JVCAqLworI2lmZGVmIENLX1RSSUdHRVIKKyAgICB7ICJ0cmlnZ2Vy IiwgICAgICAgU0hUUklHLCBDTV9MT0MgfSwKKyNlbmRpZiAvKiBDS19UUklHR0VSICovCisjaWZu ZGVmIE5PU0VUS0VZCisjaWZuZGVmIE5PS1ZFUkJTCisjaWZkZWYgT1MyCisgICAgeyAidWRrIiwg ICAgICAgICAgIFNIVURLLCBDTV9MT0MgfSwKKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBO T0tWRVJCUyAqLworI2VuZGlmIC8qIE5PU0VUS0VZICovCisjaWZuZGVmIE5PU1BMCisgICAgeyAi dmFyaWFibGVzIiwgICAgIFNIQlVJLCAwIH0sCisjZW5kaWYgLyogTk9TUEwgKi8KKyNpZm5kZWYg Tk9GUklMTFMKKyAgICB7ICJ2ZXJzaW9ucyIsICAgICAgU0hWRVIsIDAgfSwKKyNlbmRpZiAvKiBO T0ZSSUxMUyAqLworI2lmZGVmIE9TMgorICAgIHsgInZzY3JuIiwgICAgICAgICBTSFZTQ1JOLCBD TV9JTlZ8Q01fTE9DIH0sCisjZW5kaWYgLyogT1MyICovCisgICAgeyAieGZlciIsICAgICAgICAg IFNIT1hGRVIsICBDTV9JTlYgfSwKKyNpZm5kZWYgTk9YTUlUCisgICAgeyAieG1pdCIsICAgICAg ICAgIFNIWE1JLCAgICBDTV9JTlYgfSwKKyNlbmRpZiAvKiBOT1hNSVQgKi8KKyAgICB7ICIiLCAw LCAwIH0KK307CitpbnQgbnNobyA9IChzaXplb2Yoc2hvdGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5 dGFiKSkgLSAxOworI2VuZGlmIC8qIE5PU0hPVyAqLworCisjaWZkZWYgQU5ZWDI1CisjaWZuZGVm IElCTVgyNQorc3RydWN0IGtleXRhYiBwYWR0YWJbXSA9IHsgICAgICAgICAgICAgIC8qIFBBRCBj b21tYW5kcyAqLworICAgIHsgImNsZWFyIiwgICAgICBYWVBBREwsIDAgfSwKKyAgICB7ICJpbnRl cnJ1cHQiLCAgWFlQQURJLCAwIH0sCisgICAgeyAicmVzZXQiLCAgICAgIFhZUEFEUiwgMCB9LAor ICAgIHsgInN0YXR1cyIsICAgICBYWVBBRFMsIDAgfQorfTsKK2ludCBucGFkYyA9IChzaXplb2Yo cGFkdGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7CisjZW5kaWYgLyogSUJNWDI1ICovCisj ZW5kaWYgLyogQU5ZWDI1ICovCisKKyNpZm5kZWYgTk9TRVJWRVIKK3N0YXRpYyBzdHJ1Y3Qga2V5 dGFiIGttc3RhYltdID0geworICAgIHsgImJvdGgiLCAgICAzLCAwIH0sCisgICAgeyAibG9jYWwi LCAgIDEsIDAgfSwKKyAgICB7ICJyZW1vdGUiLCAgMiwgMCB9Cit9OworCitzdGF0aWMgc3RydWN0 IGtleXRhYiBlbmF0YWJbXSA9IHsJLyogRU5BQkxFIGNvbW1hbmRzICovCisgICAgeyAiYWxsIiwg ICAgICAgIEVOX0FMTCwgIDAgfSwKKyNpZm5kZWYgTk9TUEwKKyAgICB7ICJhcyIsICAgICAgICAg RU5fQVNHLCAgQ01fSU5WfENNX0FCUiB9LAorICAgIHsgImFzZyIsICAgICAgICBFTl9BU0csICBD TV9JTlYgfSwKKyAgICB7ICJhc3NpZ24iLCAgICAgRU5fQVNHLCAgMCB9LAorI2VuZGlmIC8qIE5P U1BMICovCisjaWZuZGVmIGRhdGFnZW5lcmFsCisgICAgeyAiYnllIiwgICAgICAgIEVOX0JZRSwg IDAgfSwKKyNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLworICAgIHsgImNkIiwgICAgICAgICBFTl9D V0QsICAwIH0sCisjaWZkZWYgWkNPUFkKKyAgICB7ICJjb3B5IiwgICAgICAgRU5fQ1BZLCAgMCB9 LAorI2VuZGlmIC8qIFpDT1BZICovCisgICAgeyAiY3dkIiwgICAgICAgIEVOX0NXRCwgIENNX0lO ViB9LAorICAgIHsgImRlbGV0ZSIsICAgICBFTl9ERUwsICAwIH0sCisgICAgeyAiZGlyZWN0b3J5 IiwgIEVOX0RJUiwgIDAgfSwKKyAgICB7ICJlbmFibGUiLCAgICAgRU5fRU5BLCAgQ01fSU5WIH0s CisgICAgeyAiZXhpdCIsICAgICAgIEVOX1hJVCwgIDAgfSwKKyAgICB7ICJmaW5pc2giLCAgICAg RU5fRklOLCAgMCB9LAorICAgIHsgImdldCIsICAgICAgICBFTl9HRVQsICAwIH0sCisgICAgeyAi aG9zdCIsICAgICAgIEVOX0hPUywgIDAgfSwKKyAgICB7ICJtYWlsIiwgICAgICAgRU5fTUFJLCAg MCB9LAorICAgIHsgIm1rZGlyIiwgICAgICBFTl9NS0QsICAwIH0sCisgICAgeyAicHJpbnQiLCAg ICAgIEVOX1BSSSwgIDAgfSwKKyNpZm5kZWYgTk9TUEwKKyAgICB7ICJxdWVyeSIsICAgICAgRU5f UVVFLCAgMCB9LAorI2VuZGlmIC8qIE5PU1BMICovCisgICAgeyAicmVuYW1lIiwgICAgIEVOX1JF TiwgIDAgfSwKKyAgICB7ICJyZXRyaWV2ZSIsICAgRU5fUkVULCAgQ01fSU5WIH0sCisgICAgeyAi cm1kaXIiLCAgICAgIEVOX1JNRCwgIDAgfSwKKyAgICB7ICJzZW5kIiwgICAgICAgRU5fU0VOLCAg MCB9LAorICAgIHsgInNldCIsICAgICAgICBFTl9TRVQsICAwIH0sCisgICAgeyAic3BhY2UiLCAg ICAgIEVOX1NQQSwgIDAgfSwKKyAgICB7ICJ0eXBlIiwgICAgICAgRU5fVFlQLCAgMCB9LAorICAg IHsgIndobyIsICAgICAgICBFTl9XSE8sICAwIH0KK307CitzdGF0aWMgaW50IG5lbmEgPSAoc2l6 ZW9mKGVuYXRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpOworI2VuZGlmIC8qIE5PU0VSVkVS ICovCisKK3N0cnVjdCBrZXl0YWIgdHh0YmluW10gPSB7CisgICAgeyAiYWxsIiwgICAgICAgIDIs IDAgfSwKKyAgICB7ICJiaW5hcnkiLCAgICAgMSwgMCB9LAorICAgIHsgInRleHQiLCAgICAgICAw LCAwIH0KK307CisKKyNpZm5kZWYgTk9YRkVSCitzdGF0aWMgc3RydWN0IGtleXRhYiBzbmR0YWJb XSA9IHsJLyogU0VORCBjb21tYW5kIG9wdGlvbnMgKi8KKyAgICB7ICIvYWZ0ZXIiLCAgICAgICAg ICAgU05EX0FGVCwgQ01fQVJHIH0sCisjaWZuZGVmIE5PU1BMCisgICAgeyAiL2FycmF5IiwgICAg ICAgICAgIFNORF9BUlIsIENNX0FSRyB9LAorI2VuZGlmIC8qIE5PU1BMICovCisgICAgeyAiL2Fz LW5hbWUiLCAgICAgICAgIFNORF9BU04sIENNX0FSRyB9LAorICAgIHsgIi9iIiwgICAgICAgICAg ICAgICBTTkRfQklOLCBDTV9JTlZ8Q01fQUJSIH0sCisgICAgeyAiL2JlZm9yZSIsICAgICAgICAg IFNORF9CRUYsIENNX0FSRyB9LAorICAgIHsgIi9iaW5hcnkiLCAgICAgICAgICBTTkRfQklOLCAw IH0sCisjaWZkZWYgQ0FMSUJSQVRFCisgICAgeyAiL2MiLCAgICAgICAgICAgICAgIFNORF9DTUQs IENNX0lOVnxDTV9BQlIgfSwKKyAgICB7ICIvY2FsaWJyYXRlIiwgICAgICAgU05EX0NBTCwgQ01f SU5WfENNX0FSRyB9LAorI2VuZGlmIC8qIENBTElCUkFURSAqLworICAgIHsgIi9jb21tYW5kIiwg ICAgICAgICBTTkRfQ01ELCBDTV9QU0ggfSwKKyAgICB7ICIvZGVsZXRlIiwgICAgICAgICAgU05E X0RFTCwgMCB9LAorI2lmZGVmIFVOSVhPUk9TSworICAgIHsgIi9kb3RmaWxlcyIsICAgICAgICBT TkRfRE9ULCAwIH0sCisjZW5kaWYgLyogVU5JWE9ST1NLICovCisgICAgeyAiL2V4Y2VwdCIsICAg ICAgICAgIFNORF9FWEMsIENNX0FSRyB9LAorI2lmZGVmIFBJUEVTRU5ECisgICAgeyAiL2ZpbHRl ciIsICAgICAgICAgIFNORF9GTFQsIENNX0FSR3xDTV9QU0ggfSwKKyNlbmRpZiAvKiBQSVBFU0VO RCAqLworICAgIHsgIi9maWxlbmFtZXMiLCAgICAgICBTTkRfTkFNLCBDTV9BUkcgfSwKKyNpZmRl ZiBDS1NZTUxJTksKKyAgICB7ICIvZm9sbG93bGlua3MiLAkgIFNORF9MTkssIDAgfSwKKyNlbmRp ZiAvKiBDS1NZTUxJTksgKi8KKyNpZmRlZiBWTVMKKyAgICB7ICIvaW1hZ2UiLCAgICAgICAgICAg U05EX0lNRywgMCB9LAorI2Vsc2UKKyAgICB7ICIvaW1hZ2UiLCAgICAgICAgICAgU05EX0JJTiwg Q01fSU5WIH0sCisjZW5kaWYgLyogVk1TICovCisjaWZkZWYgQ0tfTEFCRUxFRAorICAgIHsgIi9s YWJlbGVkIiwgICAgICAgICBTTkRfTEJMLCAwIH0sCisjZW5kaWYgLyogQ0tfTEFCRUxFRCAqLwor ICAgIHsgIi9sYXJnZXItdGhhbiIsICAgICBTTkRfTEFSLCBDTV9BUkcgfSwKKyAgICB7ICIvbGlz dGZpbGUiLCAgICAgICAgU05EX0ZJTCwgQ01fQVJHIH0sCisjaWZuZGVmIE5PRlJJTExTCisgICAg eyAiL21haWwiLCAgICAgICAgICAgIFNORF9NQUksIENNX0FSRyB9LAorI2VuZGlmIC8qIE5PRlJJ TExTICovCisjaWZkZWYgQ0tfVE1QRElSCisgICAgeyAiL21vdmUtdG8iLCAgICAgICAgIFNORF9N T1YsIENNX0FSRyB9LAorI2VuZGlmIC8qIENLX1RNUERJUiAqLworICAgIHsgIi9ub2JhY2t1cGZp bGVzIiwgICBTTkRfTk9CLCAwIH0sCisjaWZkZWYgVU5JWE9ST1NLCisgICAgeyAiL25vZG90Zmls ZXMiLCAgICAgIFNORF9OT0QsIDAgfSwKKyNlbmRpZiAvKiBVTklYT1JPU0sgKi8KKyNpZmRlZiBD S1NZTUxJTksKKyAgICB7ICIvbm9mb2xsb3dsaW5rcyIsCSAgU05EX05MSywgMCB9LAorI2VuZGlm IC8qIENLU1lNTElOSyAqLworICAgIHsgIi9ub3QtYWZ0ZXIiLCAgICAgICBTTkRfTkFGLCBDTV9B UkcgfSwKKyAgICB7ICIvbm90LWJlZm9yZSIsICAgICAgU05EX05CRSwgQ01fQVJHIH0sCisgICAg eyAiL3BhdGhuYW1lcyIsICAgICAgIFNORF9QVEgsIENNX0FSRyB9LAorICAgIHsgIi9wcmludCIs ICAgICAgICAgICBTTkRfUFJJLCBDTV9BUkcgfSwKKyNpZmRlZiBDS19YWVoKKyAgICB7ICIvcHJv dG9jb2wiLCAgICAgICAgU05EX1BSTywgQ01fQVJHIH0sCisjZWxzZQorICAgIHsgIi9wcm90b2Nv bCIsICAgICAgICBTTkRfUFJPLCBDTV9BUkd8Q01fSU5WIH0sCisjZW5kaWYgLyogQ0tfWFlaICov CisgICAgeyAiL3F1aWV0IiwgICAgICAgICAgIFNORF9TSEgsIDAgfSwKKyAgICB7ICIvcmVjb3Zl ciIsICAgICAgICAgU05EX1JFUywgMCB9LAorI2lmZGVmIFJFQ1VSU0lWRQorLyogU3lzdGVtcyB3 aGVyZSB3ZSBkbyByZWN1cnNpb24gKi8KKyAgICB7ICIvcmVjdXJzaXZlIiwgICAgICAgU05EX1JF QywgMCB9LAorI2Vsc2UKKyNpZmRlZiBWTVMKKy8qIFN5c3RlbXMgdGhhdCBkbyByZWN1cnNpb24g dGhlbXNlbHZlcyB3aXRob3V0IG91ciBhc3Npc3RhbmNlICovCisvKiBpZiB3ZSBnaXZlIHRoZW0g dGhlIHJpZ2h0IGtpbmQgb2Ygd2lsZGNhcmQgKi8KKyAgICB7ICIvcmVjdXJzaXZlIiwgICAgICAg U05EX1JFQywgMCB9LAorI2Vsc2UKKyNpZmRlZiBkYXRhZ2VuZXJhbAorICAgIHsgIi9yZWN1cnNp dmUiLCAgICAgICBTTkRfUkVDLCAwIH0sCisjZWxzZQorICAgIHsgIi9yZWN1cnNpdmUiLCAgICAg ICBTTkRfUkVDLCBDTV9JTlYgfSwKKyNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLworI2VuZGlmIC8q IFZNUyAqLworI2VuZGlmIC8qIFJFQ1VSU0lWRSAqLworICAgIHsgIi9yZW5hbWUtdG8iLCAgICAg ICBTTkRfUkVOLCBDTV9BUkcgfSwKKyAgICB7ICIvc2luY2UiLCAgICAgICAgICAgU05EX0FGVCwg Q01fSU5WfENNX0FSRyB9LAorICAgIHsgIi9zbWFsbGVyLXRoYW4iLCAgICBTTkRfU01BLCBDTV9B UkcgfSwKKyAgICB7ICIvc3RhcnRpbmctYXQiLCAgICAgU05EX1NUQSwgQ01fQVJHIH0sCisjaWZu ZGVmIE5PRlJJTExTCisgICAgeyAiL3N1IiwgICAgICAgICAgICAgIFNORF9BU04sIENNX0FSR3xD TV9JTlZ8Q01fQUJSIH0sCisgICAgeyAiL3N1YiIsICAgICAgICAgICAgIFNORF9BU04sIENNX0FS R3xDTV9JTlZ8Q01fQUJSIH0sCisgICAgeyAiL3N1YmplY3QiLCAgICAgICAgIFNORF9BU04sIENN X0FSRyB9LAorI2VuZGlmIC8qIE5PRlJJTExTICovCisjaWZkZWYgUkVDVVJTSVZFCisgICAgeyAi L3N1YmRpcmVjdG9yaWVzIiwgIFNORF9SRUMsIENNX0lOViB9LAorI2VuZGlmIC8qIFJFQ1VSU0lW RSAqLworICAgIHsgIi90ZXh0IiwgICAgICAgICAgICBTTkRfVFhULCAwIH0sCisgICAgeyAiL3Ry YW5zcGFyZW50IiwgICAgIFNORF9YUEEsIDAgfSwKKyAgICB7ICIvdHlwZSIsICAgICAgICAgICAg U05EX1RZUCwgQ01fQVJHIH0KK307CisjZGVmaW5lIE5TTkRUQUIgc2l6ZW9mKHNuZHRhYikvc2l6 ZW9mKHN0cnVjdCBrZXl0YWIpCitzdGF0aWMgaW50IG5zbmR0YWIgPSBOU05EVEFCOworCisjaWZu ZGVmIE5PTVNFTkQKK3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIG1zbmR0YWJbXSA9IHsJLyogTVNFTkQg b3B0aW9ucyAqLworICAgIHsgIi9hZnRlciIsICAgICAgICAgICBTTkRfQUZULCBDTV9BUkcgfSwK KyAgICB7ICIvYmVmb3JlIiwgICAgICAgICAgU05EX0JFRiwgQ01fQVJHIH0sCisgICAgeyAiL2Jp bmFyeSIsICAgICAgICAgIFNORF9CSU4sIDAgfSwKKyAgICB7ICIvZGVsZXRlIiwgICAgICAgICAg U05EX0RFTCwgMCB9LAorICAgIHsgIi9leGNlcHQiLCAgICAgICAgICBTTkRfRVhDLCBDTV9BUkcg fSwKKyAgICB7ICIvZmlsZW5hbWVzIiwgICAgICAgU05EX05BTSwgQ01fQVJHIH0sCisjaWZkZWYg Q0tTWU1MSU5LCisgICAgeyAiL2ZvbGxvd2xpbmtzIiwJICBTTkRfTE5LLCAwIH0sCisjZW5kaWYg LyogQ0tTWU1MSU5LICovCisjaWZkZWYgVk1TCisgICAgeyAiL2ltYWdlIiwgICAgICAgICAgIFNO RF9JTUcsIDAgfSwKKyNlbHNlCisgICAgeyAiL2ltYWdlIiwgICAgICAgICAgIFNORF9CSU4sIENN X0lOViB9LAorI2VuZGlmIC8qIFZNUyAqLworI2lmZGVmIENLX0xBQkVMRUQKKyAgICB7ICIvbGFi ZWxlZCIsICAgICAgICAgU05EX0xCTCwgMCB9LAorI2VuZGlmIC8qIENLX0xBQkVMRUQgKi8KKyAg ICB7ICIvbGFyZ2VyLXRoYW4iLCAgICAgU05EX0xBUiwgQ01fQVJHIH0sCisgICAgeyAiL2xpc3Qi LCAgICAgICAgICAgIFNORF9GSUwsIENNX0FSRyB9LAorI2lmbmRlZiBOT0ZSSUxMUworICAgIHsg Ii9tYWlsIiwgICAgICAgICAgICBTTkRfTUFJLCBDTV9BUkcgfSwKKyNlbmRpZiAvKiBOT0ZSSUxM UyAqLworI2lmZGVmIENLX1RNUERJUgorICAgIHsgIi9tb3ZlLXRvIiwgICAgICAgICBTTkRfTU9W LCBDTV9BUkcgfSwKKyNlbmRpZiAvKiBDS19UTVBESVIgKi8KKyNpZmRlZiBDS1NZTUxJTksKKyAg ICB7ICIvbm9mb2xsb3dsaW5rcyIsCVNORF9OTEssIDAgfSwKKyNlbmRpZiAvKiBDS1NZTUxJTksg Ki8KKyAgICB7ICIvbm90LWFmdGVyIiwgICAgICAgU05EX05BRiwgQ01fQVJHIH0sCisgICAgeyAi L25vdC1iZWZvcmUiLCAgICAgIFNORF9OQkUsIENNX0FSRyB9LAorICAgIHsgIi9wYXRobmFtZXMi LCAgICAgICBTTkRfUFRILCBDTV9BUkcgfSwKKyAgICB7ICIvcHJpbnQiLCAgICAgICAgICAgU05E X1BSSSwgQ01fQVJHIH0sCisjaWZkZWYgQ0tfWFlaCisgICAgeyAiL3Byb3RvY29sIiwgICAgICAg IFNORF9QUk8sIENNX0FSRyB9LAorI2VuZGlmIC8qIENLX1hZWiAqLworICAgIHsgIi9xdWlldCIs ICAgICAgICAgICBTTkRfU0hILCAwIH0sCisgICAgeyAiL3JlY292ZXIiLCAgICAgICAgIFNORF9S RVMsIDAgfSwKKyAgICB7ICIvcmVuYW1lLXRvIiwgICAgICAgU05EX1JFTiwgQ01fQVJHIH0sCisg ICAgeyAiL3NpbmNlIiwgICAgICAgICAgIFNORF9BRlQsIENNX0lOVnxDTV9BUkcgfSwKKyAgICB7 ICIvc21hbGxlci10aGFuIiwgICAgU05EX1NNQSwgQ01fQVJHIH0sCisgICAgeyAiL3N0YXJ0aW5n LWF0IiwgICAgIFNORF9TVEEsIENNX0FSRyB9LAorI2lmbmRlZiBOT0ZSSUxMUworICAgIHsgIi9z dWJqZWN0IiwgICAgICAgICBTTkRfQVNOLCBDTV9BUkcgfSwKKyNlbmRpZiAvKiBOT0ZSSUxMUyAq LworICAgIHsgIi90ZXh0IiwgICAgICAgICAgICBTTkRfVFhULCAwIH0sCisgICAgeyAiL3RyYW5z cGFyZW50IiwgICAgIFNORF9YUEEsIDAgfSwKKyAgICB7ICIvdHlwZSIsICAgICAgICAgICAgU05E X1RZUCwgQ01fQVJHIH0KK307CisjZGVmaW5lIE5NU05EVEFCIHNpemVvZihtc25kdGFiKS9zaXpl b2Yoc3RydWN0IGtleXRhYikKK3N0YXRpYyBpbnQgbm1zbmR0YWIgPSBOTVNORFRBQjsKKyNlbmRp ZiAvKiBOT01TRU5EICovCisjZW5kaWYgLyogTk9YRkVSICovCisKKy8qIENPTk5FQ1QgY29tbWFu ZCBzd2l0Y2hlcyAqLworCisjZGVmaW5lIENPTk5fSUkgIDAJLyogSWRsZSBpbnRlcnZhbCAqLwor I2RlZmluZSBDT05OX0lTICAxCS8qIElkbGUgc3RyaW5nICovCisjZGVmaW5lIENPTk5fSUwgIDIJ LyogSWRsZSBsaW1pdCAqLworI2RlZmluZSBDT05OX05WICAzCS8qIE5vbi1WZXJib3NlICovCisj ZGVmaW5lIENPTk5fVEwgIDQJLyogVGltZSBsaW1pdCAqLworI2RlZmluZSBDT05OX1RTICA1CS8q IFRyaWdnZXIgc3RyaW5nICovCisjZGVmaW5lIENPTk5fQVMgIDYJLyogQXN5bmNocm9ub3VzICov CisjZGVmaW5lIENPTk5fU1kgIDcJLyogU3luY2hyb25vdXMgKi8KKyNkZWZpbmUgQ09OTl9NQVgg NwkvKiBOdW1iZXIgb2YgQ09OTkVDVCBzd2l0Y2hlcyAqLworCisjaWZuZGVmIE5PTE9DQUwKK3N0 YXRpYyBzdHJ1Y3Qga2V5dGFiIGNvbm50YWJbXSA9IHsKKyNpZmRlZiBPUzIKKyAgICB7ICIvYXN5 bmNocm9ub3VzIiwgICAgQ09OTl9BUywgQ01fSU5WIH0sCisjZW5kaWYgLyogT1MyICovCisjaWZk ZWYgWExJTUlUUworICAgIHsgIi9pZGxlLWludGVydmFsIiwgICBDT05OX0lJLCBDTV9BUkcgfSwK KyAgICB7ICIvaWRsZS1saW1pdCIsICAgICAgQ09OTl9JTCwgQ01fQVJHIH0sCisgICAgeyAiL2lk bGUtc3RyaW5nIiwgICAgIENPTk5fSVMsIENNX0FSRyB9LAorICAgIHsgIi9xdWlldGx5IiwgICAg ICAgICBDT05OX05WLCBDTV9JTlYgfSwKKyNlbHNlCisgICAgeyAiL3F1aWV0bHkiLCAgICAgICAg IENPTk5fTlYsIDAgfSwKKyNlbmRpZiAvKiBYTElNSVRTICovCisjaWZkZWYgT1MyCisgICAgeyAi L3N5bmNocm9ub3VzIiwgICAgIENPTk5fU1ksIENNX0lOViB9LAorI2VuZGlmIC8qIE9TMiAqLwor I2lmZGVmIFhMSU1JVFMKKyAgICB7ICIvdGltZS1saW1pdCIsICAgICAgQ09OTl9UTCwgQ01fQVJH IH0sCisjZW5kaWYgLyogWExJTUlUUyAqLworI2lmZGVmIENLX1RSSUdHRVIKKyAgICB7ICIvdHJp Z2dlciIsICAgICAgICAgQ09OTl9UUywgQ01fQVJHIH0sCisjZW5kaWYgLyogQ0tfVFJJR0dFUiAq LworICAgIHsgIiIsMCwwIH0KK307CisjZGVmaW5lIE5DT05OVEFCIHNpemVvZihjb25udGFiKS9z aXplb2Yoc3RydWN0IGtleXRhYikKK3N0YXRpYyBpbnQgbmNvbm50YWIgPSBOQ09OTlRBQjsKKyNl bmRpZiAvKiBOT0xPQ0FMICovCisKKyNpZm5kZWYgTk9YRkVSCitzdGF0aWMgc3RydWN0IGtleXRh YiBzdGF0dGFiW10gPSB7CS8qIFNUQVRJU1RJQ1MgY29tbWFuZCBzd2l0Y2hlcyAqLworICAgIHsg Ii9icmllZiIsICAgMSwgMCB9LAorICAgIHsgIi92ZXJib3NlIiwgMCwgMCB9Cit9OworI2VuZGlm IC8qIE5PWEZFUiAqLworCisjaWZuZGVmIE5PU1BMCisjaWZkZWYgQ09NTUVOVAorc3RydWN0IG10 YWIgbWFjdGFiW01BQ19NQVhdID0gewkJLyogUHJlaW5pdGlhbGl6ZWQgbWFjcm8gdGFibGUgKi8K KyAgICB7IE5VTEwsIE5VTEwsIDAgfQorfTsKKyNlbHNlCitzdHJ1Y3QgbXRhYiAqbWFjdGFiOwkJ CS8qIER5bmFtaWNhbGx5IGFsbG9jYXRlZCBtYWNybyB0YWJsZSAqLworI2VuZGlmIC8qIENPTU1F TlQgKi8KK2ludCBubWFjID0gMDsKKworc3RydWN0IGtleXRhYiBtYWNrZXlbTUFDX01BWF07CQkv KiBNYWNybyBuYW1lcyBhcyBjb21tYW5kIGtleXdvcmRzICovCisjZW5kaWYgLyogTk9TUEwgKi8K KworI2lmbmRlZiBOT1NQTAorI2lmZGVmICBPUzIKK3N0cnVjdCBrZXl0YWIgYmVlcHRhYltdID0g ewkJLyogQmVlcCBvcHRpb25zICovCisgICAgeyAiZXJyb3IiLCBCUF9GQUlMLCAwIH0sCisgICAg eyAiaW5mb3JtYXRpb24iLCBCUF9OT1RFLCAwIH0sCisgICAgeyAid2FybmluZyIsIEJQX1dBUk4s IDAgfQorfTsKK2ludCBuYmVlcHRhYiA9IHNpemVvZihiZWVwdGFiKS9zaXplb2Yoc3RydWN0IGtl eXRhYik7CisKKy8qIENMRUFSIENPTU1NQU5ELVNDUkVFTiBvcHRpb25zICovCisKKyNkZWZpbmUg Q0xSX0NfQUxMIDAKKyNkZWZpbmUgQ0xSX0NfQk9MIDEKKyNkZWZpbmUgQ0xSX0NfQk9TIDIKKyNk ZWZpbmUgQ0xSX0NfRU9MIDMKKyNkZWZpbmUgQ0xSX0NfRU9TIDQKKyNkZWZpbmUgQ0xSX0NfTElO IDUKKyNkZWZpbmUgQ0xSX0NfU0NSIDYKKworc3RydWN0IGtleXRhYiBjbHJjbWR0YWJbXSA9IHsK KyAgICB7ICJhbGwiLCAgICAgICAgQ0xSX0NfQUxMLCAwIH0sCisgICAgeyAiYm9sIiwgICAgICAg IENMUl9DX0JPTCwgMCB9LAorICAgIHsgImJvcyIsICAgICAgICBDTFJfQ19CT1MsIDAgfSwKKyAg ICB7ICJlb2wiLCAgICAgICAgQ0xSX0NfRU9MLCAwIH0sCisgICAgeyAiZW9zIiwgICAgICAgIENM Ul9DX0VPUywgMCB9LAorICAgIHsgImxpbmUiLCAgICAgICBDTFJfQ19MSU4sIDAgfSwKKyAgICB7 ICJzY3JvbGxiYWNrIiwgQ0xSX0NfU0NSLCAwIH0KK307CitpbnQgbmNscmNtZCA9IHNpemVvZihj bHJjbWR0YWIpL3NpemVvZihzdHJ1Y3Qga2V5dGFiKTsKKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRp ZiAvKiBOT1NQTCAqLworCisjaWZkZWYgQ09NTUVOVAorLyogTm90IHVzZWQgYXQgcHJlc2VudCAq Lworc3RhdGljIHN0cnVjdCBrZXl0YWIgcGFnZXRhYltdID0geworICAgIHsgIi9tb3JlIiwgICAx LCBDTV9JTlYgfSwKKyAgICB7ICIvbm9wYWdlIiwgMCwgMCB9LAorICAgIHsgIi9wYWdlIiwgICAx LCAwIH0KK307CitpbnQgbnBhZ2V0YWIgPSBzaXplb2YocGFnZXRhYikvc2l6ZW9mKHN0cnVjdCBr ZXl0YWIpOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKworI2RlZmluZSBUWVBfTk9QICAwCQkJLyog L05PUEFHRSAqLworI2RlZmluZSBUWVBfUEFHICAxCQkJLyogL1BBR0UgKi8KKyNkZWZpbmUgVFlQ X0hFQSAgMgkJCS8qIC9IRUFEOm4gKi8KKyNkZWZpbmUgVFlQX1RBSSAgMwkJCS8qIC9UQUlMOm4g Ki8KKyNkZWZpbmUgVFlQX1BBVCAgNAkJCS8qIC9NQVRDSDpwYXR0ZXJuICovCisjZGVmaW5lIFRZ UF9XSUQgIDUJCQkvKiAvV0lEVEg6Y29scyAqLworI2RlZmluZSBUWVBfQ09VICA2CQkJLyogL0NP VU5UICovCisjZGVmaW5lIFRZUF9PVVQgIDcJCQkvKiAvT1VUUFVUOmZpbGUgKi8KKyNkZWZpbmUg VFlQX1BGWCAgOAkJCS8qIC9QUkVGSVg6c3RyaW5nICovCisjaWZkZWYgVU5JQ09ERQorI2RlZmlu ZSBUWVBfWElOICA5CQkJLyogL1RSQU5TTEFURS1GUk9NOmNoYXJzZXQgKi8KKyNkZWZpbmUgVFlQ X1hVVCAxMAkJCS8qIC9UUkFOU0xBVEUtVE86Y2hhcnNldCAqLworI2RlZmluZSBUWVBfWFBBIDEx CQkJLyogL1RSQU5TUEFSRU5UICovCisjZW5kaWYgLyogVU5JQ09ERSAqLworI2lmZGVmIEtVSQor I2RlZmluZSBUWVBfR1VJIDEyCQkJLyogL0dVSTp0aXRsZSAqLworI2RlZmluZSBUWVBfSElHIDEz CQkJLyogL0hFSUdIVDpyb3dzICovCisjZW5kaWYgLyogS1VJICovCisjZGVmaW5lIFRZUF9OVU0g MTQJCQkvKiAvTlVNQkVSICovCisKK3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIHR5cGV0YWJbXSA9IHsJ LyogVFlQRSBjb21tYW5kIHN3aXRjaGVzICovCisgICAgeyAiL2NvdW50IiwgICAgICAgICAgVFlQ X0NPVSwgMCB9LAorI2lmZGVmIFVOSUNPREUKKyAgICB7ICIvY2hhcmFjdGVyLXNldCIsICBUWVBf WElOLCBDTV9BUkcgfSwKKyNlbmRpZiAvKiBVTklDT0RFICovCisjaWZkZWYgS1VJCisgICAgeyAi L2d1aSIsICAgICAgICAgICAgVFlQX0dVSSwgQ01fQVJHIH0sCisjZW5kaWYgLyogS1VJICovCisg ICAgeyAiL2hlYWQiLCAgICAgICAgICAgVFlQX0hFQSwgQ01fQVJHIH0sCisjaWZkZWYgS1VJCisg ICAgeyAiL2hlaWdodCIsICAgICAgICAgVFlQX0hJRywgQ01fQVJHIH0sCisjZW5kaWYgLyogS1VJ ICovCisgICAgeyAiL21hdGNoIiwgICAgICAgICAgVFlQX1BBVCwgQ01fQVJHIH0sCisjaWZkZWYg Q0tfVFRHV1NJWgorICAgIHsgIi9tb3JlIiwgICAgICAgICAgIFRZUF9QQUcsIENNX0lOViB9LAor ICAgIHsgIi9ub3BhZ2UiLCAgICAgICAgIFRZUF9OT1AsIDAgfSwKKyAgICB7ICIvbnVtYmVyIiwg ICAgICAgICBUWVBfTlVNLCAwIH0sCisgICAgeyAiL291dHB1dCIsICAgICAgICAgVFlQX09VVCwg Q01fQVJHIH0sCisgICAgeyAiL3BhZ2UiLCAgICAgICAgICAgVFlQX1BBRywgMCB9LAorI2VuZGlm IC8qIENLX1RUR1dTSVogKi8KKyAgICB7ICIvcHJlZml4IiwgICAgICAgICBUWVBfUEZYLCBDTV9B UkcgfSwKKyAgICB7ICIvdGFpbCIsICAgICAgICAgICBUWVBfVEFJLCBDTV9BUkcgfSwKKyNpZmRl ZiBVTklDT0RFCisgICAgeyAiL3RyYW5zbGF0ZS10byIsICAgVFlQX1hVVCwgQ01fQVJHIH0sCisg ICAgeyAiL3RyYW5zcGFyZW50IiwgICAgVFlQX1hQQSwgMCB9LAorI2VuZGlmIC8qIFVOSUNPREUg Ki8KKyAgICB7ICIvd2lkdGgiLCAgICAgICAgICBUWVBfV0lELCBDTV9BUkcgfSwKKyNpZmRlZiBV TklDT0RFCisgICAgeyAiL3hsYXRlLXRvIiwgICAgICAgVFlQX1hVVCwgQ01fSU5WfENNX0FSRyB9 LAorI2VuZGlmIC8qIFVOSUNPREUgKi8KKyAgICB7ICIiLCAwLCAwIH0KK307CitpbnQgbnR5cGV0 YWIgPSBzaXplb2YodHlwZXRhYikvc2l6ZW9mKHN0cnVjdCBrZXl0YWIpIC0gMTsKKworaW50IHR5 cF9wYWdlID0gLTE7CQkJLyogVFlQRSAvW05PXVBBR0UgZGVmYXVsdCAqLworaW50IHR5cF93aWQg ID0gLTE7CisKKyNpZm5kZWYgTk9TUEwKKyNkZWZpbmUgVFJBX0FMTCA5OTkJCQkvKiBUUkFDRSBj b21tYW5kICovCisjZGVmaW5lIFRSQV9BU0cgMAorI2RlZmluZSBUUkFfQ01EIDEKKworaW50IHRy YV9hc2cgPSAwOworaW50IHRyYV9jbWQgPSAwOworCitzdGF0aWMgc3RydWN0IGtleXRhYiB0cmFj ZXRhYltdID0gewkvKiBUUkFDRSBvcHRpb25zICovCisgICAgeyAiYWxsIiwgICAgICAgICAgICBU UkFfQUxMLCAwIH0sCisgICAgeyAiYXNzaWdubWVudHMiLCAgICBUUkFfQVNHLCAwIH0sCisgICAg eyAiY29tbWFuZC1sZXZlbCIsICBUUkFfQ01ELCAwIH0KK307CitzdGF0aWMgaW50IG50cmFjZXRh YiA9IHNpemVvZih0cmFjZXRhYikvc2l6ZW9mKHN0cnVjdCBrZXl0YWIpOworI2VuZGlmIC8qIE5P U1BMICovCisKKyNpZm5kZWYgTk9TSE9XCitWT0lECitzaG93dHlwb3B0cygpIHsKKyAgICBwcmlu dGYoIiBUWVBFICIpOworICAgIGlmICh0eXBfcGFnZSA+IC0xKSB7CisJcHJ0b3B0KCZvcHRsaW5l cyx0eXBfcGFnZSA/ICIvUEFHRSIgOiAiL05PUEFHRSIpOworICAgIH0gZWxzZQorICAgICAgcHJ0 b3B0KCZvcHRsaW5lcywiKG5vIG9wdGlvbnMgc2V0KSIpOworICAgIGlmICh0eXBfd2lkID4gLTEp IHsKKwlja21ha21zZyh0bXBidWYsVE1QQlVGU0laLCIvV0lEVEg6Iixja2l0b2EodHlwX3dpZCks TlVMTCxOVUxMKTsKKwlwcnRvcHQoJm9wdGxpbmVzLHRtcGJ1Zik7CisgICAgfQorICAgIHBydG9w dCgmb3B0bGluZXMsIiIpOworfQorI2VuZGlmIC8qIE5PU0hPVyAqLworCisjaWZkZWYgTE9DVVMK Ky8qIGlzYXV0byA9PSAxIGlmIGxvY3VzIGlzIGJlaW5nIHN3aXRjaGVkIGF1dG9tYXRpY2FsbHkg Ki8KKworVk9JRAorc2V0bG9jdXMoeCwgaXNhdXRvKSBpbnQgeCwgaXNhdXRvOyB7CisgICAgZXh0 ZXJuIGludCBxdWl0dGluZzsKKyAgICBpZiAoeCkgeCA9IDE7CisgICAgaWYgKHggJiYgbG9jdXMp IHJldHVybjsKKyAgICBpZiAoIXggJiYgIWxvY3VzKSByZXR1cm47CisgICAgLyogR2V0IGhlcmUg aWYgaXQgYWN0dWFsbHkgbmVlZHMgdG8gYmUgY2hhbmdlZCAqLworI2lmZGVmIE9TMgorICAgIGlm IChpc2F1dG8gJiYJCQkvKiBBdXRvbWF0aWNhbGx5IHN3aXRjaGluZyAqLworCSFxdWl0dGluZyAm JgkJCS8qIG5vdCBleGl0aW5nICovCisJYXV0b2xvY3VzID09IDIpIHsJCS8qIGFuZCBBVVRPTE9D VVMgaXMgc2V0IHRvIEFTSyAqLworCWNoYXIgbG9jbXNnWzMwMF07CisJY2ttYWttc2cobG9jbXNn LDMwMCwKKwkJICJTd2l0Y2hpbmcgTG9jdXMgdG8gIiwKKwkJIHggPyAiTE9DQUwiIDogIlJFTU9U RSIsCisJCSAiIGZvciBmaWxlIG1hbmFnZW1lbnQgY29tbWFuZHNcbiIKKyAgICAgICAgICAgICAg ICAgInN1Y2ggYXMgQ0QsIERJUkVDVE9SWSwgREVMRVRFLCBSRU5BTUUuICBUeXBlIEhFTFAgU0VU XG4iCisgICAgICAgICAgICAgICAgICJMT0NVUyBhdCB0aGUgSy05NT4gcHJvbXB0IGZvciBmdXJ0 aGVyIGluZm8uICBVc2UgdGhlXG4iCisjaWZkZWYgS1VJCisgICAgICAgICAgICAgICAgICAiQWN0 aW9ucyBtZW51IG9yIFNFVCBMT0NVUyBjb21tYW5kIHRvIGRpc2FibGUgYXV0b21hdGljXG4iCisg ICAgICAgICAgICAgICAgICAiTG9jdXMgc3dpdGNoaW5nIG9yIHRvIGRpc2FibGUgdGhlc2UgcXVl cmllcy4iLAorI2Vsc2UgLyogS1VJICovCisgICAgICAgICAgICAgICAgICAiU0VUIExPQ1VTIGNv bW1hbmQgdG8gZGlzYWJsZSBhdXRvbWF0aWMgbG9jdXMgc3dpdGNoaW5nXG4iCisgICAgICAgICAg ICAgICAgICAib3IgdG8gZGlzYWJsZSB0aGVzZSBxdWVyaWVzLiIsCisjZW5kaWYgLyogS1VJICov CisgICAgICAgICAgICAgICAgICBOVUxMKTsKKwlpZiAodXFfb2sobG9jbXNnLCJPSyB0byBzd2l0 Y2ggTG9jdXM/IiwzLE5VTEwsMSkpIHsKKwkgICAgbG9jdXMgPSB4OworI2lmZGVmIEtVSQorCSAg ICBLdWlTZXRQcm9wZXJ0eShLVUlfTE9DVVMseCwwKTsKKyNlbmRpZiAvKiBLVUkgKi8KKwkgICAg cmV0dXJuOworCX0KKyAgICB9IGVsc2UgeworI2VuZGlmIC8qIE9TMiAqLworICAgICAgICBpZiAo aXNhdXRvICYmIG1zZ2ZsZyAmJiAhcXVpdHRpbmcpCisgICAgICAgICAgcHJpbnRmKCJTd2l0Y2hp bmcgTE9DVVMgZm9yIGZpbGUtbWFuYWdlbWVudCBjb21tYW5kcyB0byAlcyAlcy5cbiIsCisJCSB4 ID8gIkxPQ0FMIiA6ICJSRU1PVEUiLAorCQkgIihIRUxQIExPQ1VTIGZvciBpbmZvKSIKKwkJICk7 CisJbG9jdXMgPSB4OworI2lmZGVmIE9TMgorI2lmZGVmIEtVSQorCUt1aVNldFByb3BlcnR5KEtV SV9MT0NVUyx4LDApOworI2VuZGlmIC8qIEtVSSAqLworICAgIH0KKyNlbmRpZiAvKiBPUzIgKi8K K30KKworVk9JRAorc2V0YXV0b2xvY3VzKHgpIGludCB4OyB7CisgICAgYXV0b2xvY3VzID0geDsK KyNpZmRlZiBLVUkKKyAgICBLdWlTZXRQcm9wZXJ0eShLVUlfQVVUT19MT0NVUyx4LDApOworI2Vu ZGlmIC8qIEtVSSAqLworfQorI2VuZGlmIC8qIExPQ1VTICovCisKK2ludAorc2V0dHlwb3B0cygp IHsJCQkJLyogU2V0IFRZUEUgb3B0aW9uIGRlZmF1bHRzICovCisgICAgaW50IHhwID0gLTE7Cisg ICAgaW50IGMsIGdldHZhbDsKKyAgICB3aGlsZSAoMSkgeworCWlmICgoeSA9IGNtc3dpKHR5cGV0 YWIsbnR5cGV0YWIsIlN3aXRjaCIsIiIseHhzdHJpbmcpKSA8IDApIHsKKwkgICAgaWYgKHkgPT0g LTMpCisJICAgICAgYnJlYWs7CisJICAgIGVsc2UKKwkgICAgICByZXR1cm4oeSk7CisJfQorCWMg PSBjbWdicmsoKTsKKwlpZiAoKGdldHZhbCA9IChjID09ICc6JyB8fCBjID09ICc9JykpICYmICEo Y21na3dmbGdzKCkgJiBDTV9BUkcpKSB7CisJICAgIHByaW50ZigiP1RoaXMgc3dpdGNoIGRvZXMg bm90IHRha2UgYW4gYXJndW1lbnRcbiIpOworCSAgICByZXR1cm4oLTkpOworCX0KKwlzd2l0Y2gg KHkpIHsKKwkgIGNhc2UgVFlQX05PUDogeHAgPSAwOyBicmVhazsKKwkgIGNhc2UgVFlQX1BBRzog eHAgPSAxOyBicmVhazsKKwkgIGNhc2UgVFlQX1dJRDoKKwkgICAgaWYgKGdldHZhbCkKKwkgICAg ICBpZiAoKHggPSBjbW51bSgiQ29sdW1uIGF0IHdoaWNoIHRvIHRydW5jYXRlIiwKKwkJCSAgICAg Y2tpdG9hKGNtZF9jb2xzKSwxMCwmeSx4eHN0cmluZykpIDwgMCkKKwkJcmV0dXJuKHgpOworCSAg ICB0eXBfd2lkID0geTsKKwkgICAgYnJlYWs7CisKKyAgICAgICAgICBkZWZhdWx0OgorCSAgICBw cmludGYoIj9Tb3JyeSwgdGhpcyBvcHRpb24gY2FuIG5vdCBiZSBzZXRcbiIpOworCSAgICByZXR1 cm4oLTkpOworCX0KKyAgICB9CisgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKQkJLyogR2V0IGNv bmZpcm1hdGlvbiAqLworICAgICAgcmV0dXJuKHgpOworICAgIGlmICh4cCA+IC0xKSB0eXBfcGFn ZSA9IHhwOwkJLyogQ29uZmlybWVkLCBzYXZlIGRlZmF1bHRzICovCisgICAgcmV0dXJuKHN1Y2Nl c3MgPSAxKTsKK30KKworLyogRm9yd2FyZCBkZWNsYXJhdGlvbnMgb2YgZnVuY3Rpb25zIGxvY2Fs IHRvIHRoaXMgbW9kdWxlICovCisKKyNpZmRlZiBVTklYCitfUFJPVE9UWVAgKGludCBkb3VjaG1v ZCwgKCB2b2lkICkgKTsKKyNlbmRpZiAvKiBVTklYICovCisjaWZkZWYgQ0tQVVJHRQorX1BST1RP VFlQIChpbnQgZG9wdXJnZSwgICggdm9pZCApICk7CisjZW5kaWYgLyogQ0tQVVJHRSAqLworI2lm bmRlZiBOT1NQTAorX1BST1RPVFlQIChpbnQgZG91bmRlZiwgICggaW50ICApICk7CitfUFJPVE9U WVAgKGludCBkb2FzaywgICAgKCBpbnQgICkgKTsKK19QUk9UT1RZUCAoaW50IGRvZGVmLCAgICAo IGludCAgKSApOworX1BST1RPVFlQIChpbnQgZG9lbHNlLCAgICggdm9pZCApICk7CitfUFJPVE9U WVAgKGludCBkb2ZvciwgICAgKCB2b2lkICkgKTsKKyNlbmRpZiAvKiBOT1NQTCAgKi8KKyNpZm5k ZWYgTk9ESUFMCitfUFJPVE9UWVAgKGludCBkb2RpYWwsICAgKCBpbnQgICkgKTsKKyNlbmRpZiAv KiBOT0RJQUwgKi8KK19QUk9UT1RZUCAoaW50IGRvZGVsLCAgICAoIHZvaWQgKSApOworX1BST1RP VFlQIChpbnQgZG9wYXVzLCAgICggaW50ICApICk7CisjaWZuZGVmIE5PUFVTSAorI2lmZGVmIFRD UFNPQ0tFVAorX1BST1RPVFlQIChpbnQgZG9waW5nLCAgICggdm9pZCApICk7CitfUFJPVE9UWVAg KGludCBkb2Z0cCwgICAgKCB2b2lkICkgKTsKKyNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KKyNlbmRp ZiAvKiBOT1BVU0ggKi8KKyNpZm5kZWYgTk9SRU5BTUUKKyNpZm5kZWYgTk9GUklMTFMKK19QUk9U T1RZUCAoaW50IGRvcmVuYW0sICAoIHZvaWQgKSApOworI2VuZGlmIC8qIE5PRlJJTExTICovCisj ZW5kaWYgLyogTk9SRU5BTUUgKi8KKyNpZmRlZiBaQ09QWQorX1BST1RPVFlQIChpbnQgZG9jb3B5 LCAgICggdm9pZCApICk7CisjZW5kaWYgLyogWkNPUFkgKi8KKyNpZmRlZiBOVAorX1BST1RPVFlQ IChpbnQgZG9saW5rLCAgICggdm9pZCApKTsKKyNlbmRpZiAvKiBOVCAqLworI2lmZGVmIENLX1JF WFgKK19QUk9UT1RZUCAoaW50IGRvcmV4eCwgICAoIHZvaWQgKSApOworI2VuZGlmIC8qIENLX1JF WFggKi8KKworI2lmZGVmIFROQ09ERQorc3RhdGljIHN0cnVjdCBrZXl0YWIgdGVsY21kW10gPSB7 CisgICAgeyAiYWJvcnQiLCBUTl9BQk9SVCwgQ01fSU5WIH0sCS8qIEVtb3Rpb25hbGx5IHRvbmVk IC0gZG9uJ3Qgc2hvdyAqLworICAgIHsgImFvIiwgICAgVE5fQU8sICAgIDAgfSwKKyAgICB7ICJh eXQiLCAgIFROX0FZVCwgICAwIH0sCisgICAgeyAiYnJlYWsiLCBCUkVBSywgICAgMCB9LAorICAg IHsgImNhbmNlbCIsVE5fQUJPUlQsIDAgfSwKKyAgICB7ICJkbWFyayIsIFROX0RNLCAgICAwIH0s CisgICAgeyAiZG8iLCAgICBETywgICAgICAgMCB9LAorICAgIHsgImRvbnQiLCAgRE9OVCwgICAg IDAgfSwKKyAgICB7ICJlYyIsICAgIFROX0VDLCAgICAwIH0sCisgICAgeyAiZWwiLCAgICBUTl9F TCwgICAgMCB9LAorICAgIHsgImVvZiIsICAgVE5fRU9GLCAgIDAgfSwKKyAgICB7ICJlb3IiLCAg IFROX0VPUiwgICAwIH0sCisjaWZkZWYgQ0tfS0VSQkVST1MKKyNpZmRlZiBLUkI1CisjZGVmaW5l IFROX0ZXRCAxCisgICAgeyAiZm9yd2FyZCIsIFROX0ZXRCwgQ01fSU5WIH0sCisjZW5kaWYgLyog S1JCNSAqLworI2VuZGlmIC8qIENLX0tFUkJFUk9TICovCisgICAgeyAiZ2EiLCAgICBUTl9HQSwg ICAgMCB9LAorICAgIHsgImlwIiwgICAgVE5fSVAsICAgIDAgfSwKKyAgICB7ICJub3AiLCAgIFRO X05PUCwgICAwIH0sCisgICAgeyAic2FrIiwgICBUTl9TQUssICAgQ01fSU5WIH0sCisgICAgeyAi c2IiLCAgICBTQiwgICAgICAgMCB9LAorICAgIHsgInNlIiwgICAgU0UsICAgICAgIDAgfSwKKyAg ICB7ICJzdXNwIiwgIFROX1NVU1AsICAwIH0sCisgICAgeyAid2lsbCIsICBXSUxMLCAgICAgMCB9 LAorICAgIHsgIndvbnQiLCAgV09OVCwgICAgIDAgfQorfTsKK3N0YXRpYyBpbnQgbnRlbGNtZCA9 IChzaXplb2YodGVsY21kKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7CisKK3N0YXRpYyBzdHJ1 Y3Qga2V5dGFiIHRub3B0c1tdID0geworI2lmZGVmIENLX0FVVEhFTlRJQ0FUSU9OCisgICAgeyAi YXV0aCIsICAgVEVMT1BUX0FVVEhFTlRJQ0FUSU9OLCAgIDAgfSwKKyNlbHNlCisgICAgeyAiYXV0 aCIsICAgVEVMT1BUX0FVVEhFTlRJQ0FUSU9OLCAgIENNX0lOViB9LAorI2VuZGlmIC8qIENLX0FV VEhFTlRJQ0FUSU9OICovCisgICAgeyAiYmluYXJ5IiwgVEVMT1BUX0JJTkFSWSwgMCB9LAorI2lm ZGVmIFROX0NPTVBPUlQKKyAgICB7ICJjIiwgICAgICBURUxPUFRfQ09NUE9SVCwgQ01fSU5WfENN X0FCUn0sCisgICAgeyAiY28iLCAgICAgVEVMT1BUX0NPTVBPUlQsIENNX0lOVnxDTV9BQlJ9LAor ICAgIHsgImNvbSIsICAgIFRFTE9QVF9DT01QT1JULCBDTV9JTlZ8Q01fQUJSfSwKKyAgICB7ICJj b20tcG9ydC1jb250cm9sIiwgVEVMT1BUX0NPTVBPUlQsIDAgfSwKKyAgICB7ICJjb21wb3J0LWNv bnRyb2wiLCBURUxPUFRfQ09NUE9SVCwgQ01fSU5WfSwKKyNlbHNlICAvKiBUTl9DT01QT1JUICov CisgICAgeyAiY29tLXBvcnQtY29udHJvbCIsIFRFTE9QVF9DT01QT1JULCBDTV9JTlYgfSwKKyAg ICB7ICJjb21wb3J0LWNvbnRyb2wiLCBURUxPUFRfQ09NUE9SVCwgQ01fSU5WfSwKKyNlbmRpZiAv KiBUTl9DT01QT1JUICovCisgICAgeyAiZWNobyIsIFRFTE9QVF9FQ0hPLCAwIH0sCisjaWZkZWYg Q0tfRU5DUllQVElPTgorICAgIHsgImVuY3J5cHQiLCBURUxPUFRfRU5DUllQVElPTiwgMCB9LAor I2Vsc2UKKyAgICB7ICJlbmNyeXB0IiwgVEVMT1BUX0VOQ1JZUFRJT04sIENNX0lOViB9LAorI2Vu ZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KKyNpZmRlZiBDS19GT1JXQVJEX1gKKyAgICB7ICJmb3J3 YXJkLXgiLCBURUxPUFRfRk9SV0FSRF9YLCAwIH0sCisjZWxzZQorICAgIHsgImZvcndhcmQteCIs IFRFTE9QVF9GT1JXQVJEX1gsIENNX0lOViB9LAorI2VuZGlmIC8qIENLX0ZPUldBUkRfWCAqLwor I2lmZGVmIElLU19PUFRJT04KKyAgICB7ICJrZXJtaXQiLCBURUxPUFRfS0VSTUlULCAwIH0sCisj ZWxzZQorICAgIHsgImtlcm1pdCIsIFRFTE9QVF9LRVJNSVQsIENNX0lOViB9LAorI2VuZGlmIC8q IElLU19PUFRJT04gKi8KKyAgICB7ICJsZmxvdyIsICBURUxPUFRfTEZMT1csIENNX0lOViB9LAor ICAgIHsgImxvZ291dCIsIFRFTE9QVF9MT0dPVVQsIENNX0lOViB9LAorI2lmZGVmIENLX05BV1MK KyAgICB7ICJuYXdzIiwgVEVMT1BUX05BV1MsIDAgfSwKKyNlbHNlCisgICAgeyAibmF3cyIsIFRF TE9QVF9OQVdTLCBDTV9JTlYgfSwKKyNlbmRpZiAvKiBDS19OQVdTICovCisjaWZkZWYgQ0tfRU5W SVJPTk1FTlQKKyAgICB7ICJuZXctZW52aXJvbm1lbnQiLCBURUxPUFRfTkVXRU5WSVJPTiwgIDAg fSwKKyNlbHNlCisgICAgeyAibmV3LWVudmlyb25tZW50IiwgVEVMT1BUX05FV0VOVklST04sICBD TV9JTlYgfSwKKyNlbmRpZiAvKiBDS19FTlZJUk9OTUVOVCAqLworICAgIHsgInByYWdtYS1oZWFy dGJlYXQiLFRFTE9QVF9QUkFHTUFfSEVBUlRCRUFULCAgQ01fSU5WIH0sCisgICAgeyAicHJhZ21h LWxvZ29uIiwgICAgVEVMT1BUX1BSQUdNQV9MT0dPTiwgIENNX0lOViB9LAorICAgIHsgInByYWdt YS1zc3BpIiwgICAgIFRFTE9QVF9TU1BJX0xPR09OLCAgQ01fSU5WIH0sCisgICAgeyAic2FrIiwg ICBURUxPUFRfSUJNX1NBSywgQ01fSU5WIH0sCisjaWZkZWYgQ0tfU05ETE9DCisgICAgeyAic2Vu ZC1sb2NhdGlvbiIsICAgVEVMT1BUX1NORExPQywgIDAgfSwKKyNlbHNlCisgICAgeyAic2VuZC1s b2NhdGlvbiIsICAgVEVMT1BUX1NORExPQywgIENNX0lOViB9LAorI2VuZGlmIC8qIENLX1NORExP QyAqLworICAgIHsgInNnYSIsIFRFTE9QVF9TR0EsIDAgfSwKKyNpZmRlZiBDS19TU0wKKyAgICB7 ICJzdGFydC10bHMiLCAgICAgICBURUxPUFRfU1RBUlRfVExTLCAgMCB9LAorI2Vsc2UKKyAgICB7 ICJzdGFydC10bHMiLCAgICAgICBURUxPUFRfU1RBUlRfVExTLCAgQ01fSU5WIH0sCisjZW5kaWYg LyogQ0tfU1NMICovCisgICAgeyAidHR5cGUiLCBURUxPUFRfVFRZUEUsIDAgfSwKKyNpZmRlZiBD S19FTlZJUk9OTUVOVAorICAgIHsgInhkaXNwbGF5LWxvY2F0aW9uIiwgVEVMT1BUX1hESVNQTE9D LCAwIH0sCisjZWxzZQorICAgIHsgInhkaXNwbGF5LWxvY2F0aW9uIiwgVEVMT1BUX1hESVNQTE9D LCBDTV9JTlYgfSwKKyNlbmRpZiAvKiBDS19FTlZJUk9OTUVOVCAqLworICAgIHsgIiIsIDAsIDAg fQorfTsKK3N0YXRpYyBpbnQgbnRub3B0cyA9IChzaXplb2YodG5vcHRzKSAvIHNpemVvZihzdHJ1 Y3Qga2V5dGFiKSkgLSAxOworCitzdGF0aWMgc3RydWN0IGtleXRhYiB0bnNib3B0c1tdID0gewor I2lmZGVmIENLX05BV1MKKyAgICB7ICJuYXdzIiwgVEVMT1BUX05BV1MsIDAgfSwKKyNlbmRpZiAv KiBDS19OQVdTICovCisgICAgeyAiIiwgMCwgMCB9Cit9Oworc3RhdGljIGludCBudG5zYm9wdHMg PSAoc2l6ZW9mKHRuc2JvcHRzKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSkgLSAxOworI2VuZGlm IC8qIFROQ09ERSAqLworCisjaWZkZWYgVENQU09DS0VUCisjaWZuZGVmIE5PUFVTSAorI2lmZGVm IFNZU0ZUUAoraW50Citkb2Z0cCgpIHsJCQkJLyogKEV4dGVybmFsKSBGVFAgY29tbWFuZCAqLwor ICAgIGNoYXIgKnAsICpmOwkJCS8qIChTZWUgZG94ZnRwKCkgZm9yIGludGVybmFsIG9uZSkgKi8K KyAgICBpbnQgeDsKKworICAgIGlmIChuZXR3b3JrKQkJCS8qIElmIHdlIGhhdmUgYSBjdXJyZW50 IGNvbm5lY3Rpb24gKi8KKyAgICAgIGNrc3RybmNweShsaW5lLHR0bmFtZSxMSU5CVUZTSVopOwkv KiBnZXQgdGhlIGhvc3QgbmFtZSAqLworICAgIGVsc2UgKmxpbmUgPSAnXDAnOwkJCS8qIGFzIGRl ZmF1bHQgaG9zdCAqLworICAgIGZvciAocCA9IGxpbmU7ICpwOyBwKyspCQkvKiBSZW1vdmUgIjpz ZXJ2aWNlIiBmcm9tIGVuZC4gKi8KKyAgICAgIGlmICgqcCA9PSAnOicpIHsgKnAgPSAnXDAnOyBi cmVhazsgfQorICAgIGlmICgoeCA9IGNtdHh0KCJJUCBob3N0IG5hbWUgb3IgbnVtYmVyIiwgbGlu ZSwgJnMsIHh4c3RyaW5nKSkgPCAwKQorICAgICAgcmV0dXJuKHgpOworICAgIGlmIChub3B1c2gp IHsKKyAgICAgICAgcHJpbnRmKCI/U29ycnksIEZUUCBjb21tYW5kIGRpc2FibGVkXG4iKTsKKyAg ICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKyAgICB9CisvKiBDb25zdHJ1Y3QgRlRQIGNvbW1h bmQgKi8KKyNpZmRlZiBWTVMKKyNpZmRlZiBNVUxUSU5FVAkJCQkvKiBUR1YgTXVsdGlOZXQgKi8K KyAgICBja21ha21zZyhsaW5lLExJTkJVRlNJWiwibXVsdGluZXQgZnRwICIscyxOVUxMLE5VTEwp OworI2Vsc2UKKyAgICBja21ha21zZyhsaW5lLExJTkJVRlNJWiwiZnRwICIscyxOVUxMLE5VTEwp OworI2VuZGlmIC8qIE1VTFRJTkVUICovCisjZWxzZQkJCQkJLyogTm90IFZNUyAqLworI2lmZGVm IE9TMk9SVU5JWAorI2lmbmRlZiBOT0ZUUAorICAgIGYgPSBmdHBhcHA7CisgICAgaWYgKCFmKSBm ID0gIiI7CisgICAgaWYgKCFmWzBdKSBmID0gImZ0cCI7CisgICAgY2ttYWttc2cobGluZSxMSU5C VUZTSVosZiwiICIscyxOVUxMKTsKKyNpZmRlZiBPUzIKKyAgICBwID0gbGluZSArIHN0cmxlbihm dHBhcHApOworICAgIHdoaWxlIChwICE9IGxpbmUpIHsKKyAgICAgICAgaWYgKCpwID09ICcvJykg KnAgPSAnXFwnOworICAgICAgICBwLS07CisgICAgfQorI2VuZGlmIC8qIE9TMiAqLworI2Vsc2Ug LyogTk9GVFAgKi8KKyAgICBja21ha21zZyhsaW5lLExJTkJVRlNJWiwiZnRwICIscyxOVUxMLE5V TEwpOworI2VuZGlmIC8qIE5PRlRQICovCisjZWxzZSAvKiBPUzJPUlVOSVggKi8KKyAgICBja21h a21zZyhsaW5lLExJTkJVRlNJWiwiZnRwICIscyxOVUxMLE5VTEwpOworI2VuZGlmIC8qIE9TMk9S VU5JWCAqLworI2VuZGlmIC8qIFZNUyAqLworICAgIGNvbnJlcygpOwkJCQkvKiBNYWtlIGNvbnNv bGUgbm9ybWFsICAqLworI2lmZGVmIERFQ19UQ1BJUAorICAgIHByaW50ZigiXG4iKTsJCQkvKiBQ cmV2ZW50IHByb21wdC1zdG9tcGluZyAqLworI2VuZGlmIC8qIERFQ19UQ1BJUCAqLworICAgIHgg PSB6c2hjbWQobGluZSk7CisgICAgY29uY2IoKGNoYXIpZXNjYXBlKTsKKyAgICByZXR1cm4oc3Vj Y2VzcyA9IHgpOworfQorI2VuZGlmIC8qIFNZU0ZUUCAqLworCitpbnQKK2RvcGluZygpIHsJCQkJ LyogUElORyBjb21tYW5kICovCisgICAgY2hhciAqcDsJCQkJLyoganVzdCBydW5zIHBpbmcgcHJv Z3JhbSAqLworICAgIGludCB4OworCisgICAgaWYgKG5ldHdvcmspCQkJLyogSWYgd2UgaGF2ZSBh IGN1cnJlbnQgY29ubmVjdGlvbiAqLworICAgICAgY2tzdHJuY3B5KGxpbmUsdHRuYW1lLExJTkJV RlNJWik7CS8qIGdldCB0aGUgaG9zdCBuYW1lICovCisgICAgZWxzZSAqbGluZSA9ICdcMCc7CQkJ LyogYXMgZGVmYXVsdCBob3N0IHRvIGJlIHBpbmdlZC4gKi8KKyAgICBmb3IgKHAgPSBsaW5lOyAq cDsgcCsrKQkJLyogUmVtb3ZlICI6c2VydmljZSIgZnJvbSBlbmQuICovCisgICAgICBpZiAoKnAg PT0gJzonKSB7ICpwID0gJ1wwJzsgYnJlYWs7IH0KKyAgICBpZiAoKHggPSBjbXR4dCgiSVAgaG9z dCBuYW1lIG9yIG51bWJlciIsIGxpbmUsICZzLCB4eHN0cmluZykpIDwgMCkKKyAgICAgIHJldHVy bih4KTsKKyAgICBpZiAobm9wdXNoKSB7CisgICAgICAgIHByaW50ZigiP1NvcnJ5LCBQSU5HIGNv bW1hbmQgZGlzYWJsZWRcbiIpOworICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOworICAgIH0K KworICAgIC8qIENvbnN0cnVjdCBQSU5HIGNvbW1hbmQgKi8KKyNpZmRlZiBWTVMKKyNpZmRlZiBN VUxUSU5FVAkJCQkvKiBUR1YgTXVsdGlOZXQgKi8KKyAgICBja21ha21zZyhsaW5lLExJTkJVRlNJ WiwibXVsdGluZXQgcGluZyAiLHMsIiAvbnVtPTEiLE5VTEwpOworI2Vsc2UKKyAgICBja21ha21z ZyhsaW5lLExJTkJVRlNJWiwicGluZyAiLHMsIiA1NiAxIixOVUxMKTsgLyogT3RoZXIgVk1TIFRD UC9JUCdzICovCisjZW5kaWYgLyogTVVMVElORVQgKi8KKyNlbHNlCQkJCQkvKiBOb3QgVk1TICov CisgICAgY2ttYWttc2cobGluZSxMSU5CVUZTSVosInBpbmcgIixzLE5VTEwsTlVMTCk7CisjZW5k aWYgLyogVk1TICovCisgICAgY29ucmVzKCk7CQkJCS8qIE1ha2UgY29uc29sZSBub3JtYWwgICov CisjaWZkZWYgREVDX1RDUElQCisgICAgcHJpbnRmKCJcbiIpOwkJCS8qIFByZXZlbnQgcHJvbXB0 LXN0b21waW5nICovCisjZW5kaWYgLyogREVDX1RDUElQICovCisgICAgeCA9IHpzaGNtZChsaW5l KTsKKyAgICBjb25jYigoY2hhcillc2NhcGUpOworICAgIHJldHVybihzdWNjZXNzID0geCk7Cit9 CisjZW5kaWYgLyogTk9QVVNIICovCisjZW5kaWYgLyogVENQU09DS0VUICovCisKK3N0YXRpYyBW T0lECitkb2VuZCh4KSBpbnQgeDsgeworI2lmbmRlZiBOT1NQTAorICAgIC8qIFBvcCBmcm9tIGFs bCBGT1IvV0hJTEUvWElGL1NXSVRDSCdzICovCisgICAgZGVidWcoRjEwMSwiZG9lbmQgbWFjbHZs IDEiLCIiLG1hY2x2bCk7CisgICAgd2hpbGUgKChtYWNsdmwgPiAwKSAmJgorCSAgIChtX2FyZ1tt YWNsdmwtMV1bMF0pICYmCisJICAgKGNtZHN0a1tjbWRsdmxdLnNyYyA9PSBDTURfTUQpICYmCisJ ICAgKCFzdHJuY21wKG1fYXJnW21hY2x2bC0xXVswXSwiX3hpZiIsNCkgfHwKKwkgICAgIXN0cm5j bXAobV9hcmdbbWFjbHZsLTFdWzBdLCJfZm9yIiw0KSB8fAorCSAgICAhc3RybmNtcChtX2FyZ1tt YWNsdmwtMV1bMF0sIl93aGkiLDQpIHx8CisJICAgICFzdHJuY21wKG1fYXJnW21hY2x2bC0xXVsw XSwiX3N3aSIsNCkpKSB7CisJZGVidWcoRjExMCwiRU5EIHBvcHBpbmciLG1fYXJnW21hY2x2bC0x XVswXSwwKTsKKwlkb2d0YShYWFBUQSk7CQkJLyogUHV0IGFyZ3MgYmFjayAqLworCXBvcGNsdmwo KTsJCQkvKiBQb3AgdXAgdHdvIGxldmVscyAqLworCXBvcGNsdmwoKTsKKwlkZWJ1ZyhGMTAxLCJk b2VuZCBtYWNsdmwgMiIsIiIsbWFjbHZsKTsKKyAgICB9CisgICAgaWYgKG1hY2x2bCA+IC0xKSB7 CisJaWYgKG1ydmFsW21hY2x2bF0pCQkvKiBGcmVlIHByZXZpb3VzIHJldHZhbCBpZiBhbnkgKi8K KwkgIGZyZWUobXJ2YWxbbWFjbHZsXSk7CisJbXJ2YWxbbWFjbHZsXSA9IG1hbGxvYygxNik7CS8q IFJvb20gZm9yIHVwIHRvIDE1IGRpZ2l0cyAqLworCWlmIChtcnZhbFttYWNsdmxdKQkJLyogUmVj b3JkIGN1cnJlbnQgcmV0dmFsICovCisJICBja21ha21zZyhtcnZhbFttYWNsdmxdLDE2LGNraXRv YSh4KSxOVUxMLE5VTEwsTlVMTCk7CisgICAgfQorI2VuZGlmIC8qIE5PU1BMICovCisgICAgcG9w Y2x2bCgpOwkJCQkvKiBOb3cgcG9wIG91dCBvZiBtYWNybyBvciBUQUtFIGZpbGUgKi8KKyNpZm5k ZWYgTk9TUEwKKyNpZmRlZiBERUJVRworICAgIGlmIChkZWJsb2cpIHsKKwlkZWJ1ZyhGMTAxLCJF TkQgbWFjbHZsIDMiLCIiLG1hY2x2bCk7CisJZGVidWcoRjExMSwiRU5EIG1ydmFsW21hY2x2bF0i LG1ydmFsW21hY2x2bF0sbWFjbHZsKTsKKwlkZWJ1ZyhGMTExLCJFTkQgbXJ2YWxbbWFjbHZsKzFd IixtcnZhbFttYWNsdmwrMV0sbWFjbHZsKzEpOworICAgIH0KKyNlbmRpZiAvKiBERUJVRyAqLwor I2VuZGlmIC8qIE5PU1BMICovCit9CisKKyNpZmRlZiBDS1JPT1QKK2ludAorZG9jaHJvb3QoKSB7 CisgICAgaWYgKCh4ID0gY21kaXIoIk5hbWUgb2YgbmV3IHJvb3QgZGlyZWN0b3J5IiwiIiwmcyx4 eHN0cmluZykpIDwgMCkgeworCWlmICh4ID09IC0zKSB7CisJICAgIHByaW50ZigiP0RpcmVjdG9y eSBuYW1lIHJlcXVpcmVkXG4iKTsKKwkgICAgcmV0dXJuKC05KTsKKwl9CisJcmV0dXJuKHgpOwor ICAgIH0KKyAgICBja3N0cm5jcHkobGluZSxzLExJTkJVRlNJWik7CisgICAgcyA9IGxpbmU7Cisg ICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7CisgICAgcyA9IGJyc3RyaXAocyk7 CisgICAgeCA9IHpzZXRyb290KHMpOworICAgIGlmICh4IDwgMCkgeworCWNoYXIgKiBtID0gTlVM TDsKKwlzd2l0Y2ggKHgpIHsKKwkgIGNhc2UgLTE6CisJICBjYXNlIC0yOiBtID0gIk5vdCBhIGRp cmVjdG9yeSI7IGJyZWFrOworCSAgY2FzZSAtMzogbSA9ICJJbnRlcm5hbCBlcnJvciI7IGJyZWFr OworCSAgY2FzZSAtNDogbSA9ICJBY2Nlc3MgZGVuaWVkIjsgYnJlYWs7CisJICBjYXNlIC01OiBt ID0gIk9mZiBsaW1pdHMiOyBicmVhazsKKwl9CisJaWYgKG0pIHByaW50ZigiJXM6IFwiJXNcIlxu IiwgbSwgcyk7CisJcmV0dXJuKG0gPyAtOSA6IC0yKTsKKyAgICB9IGVsc2UgeworCW5vcHVzaCA9 IDE7CisJcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKyAgICB9Cit9CisjZW5kaWYgLyogQ0tST09UICov CisKKyNpZm5kZWYgTk9YRkVSCitzdGF0aWMgY2hhciAqIGFzbmJ1ZiA9IE5VTEw7CQkvKiBBcy1u YW1lIGJ1ZmZlciBwb2ludGVyICovCisKK2NoYXIgc25keG5hbVtdID0geyAiX2FycmF5X3hfIiB9 OwkvKiAod2l0aCByZXBsYWNlYWJsZSB4ISkgKi8KKworLyoKKyAgVGhlIG5ldyBTRU5EIGNvbW1h bmQsIHJlcGxhY2luZyBCU0VORCwgQ1NFTkQsIFBTRU5ELCBldGMgZXRjLgorICBDYWxsIHdpdGgg Y3ggPSB0b3AtbGV2ZWwga2V5d29yZCB2YWx1ZS4gIFJldHVybnM6CisgICAgPCAwICBPbiBwYXJz ZSBlcnJvci4KKyAgICAwICAgIE9uIG90aGVyIHR5cGUgb2YgZmFpbHVyZSAoZS5nLiByZXF1ZXN0 ZWQgb3BlcmF0aW9uIG5vdCBhbGxvd2VkKS4KKyAgICAxICAgIE9uIHN1Y2Nlc3Mgd2l0aCBzc3Rh dGUgc2V0IHRvICdzJyBzbyBwcm90b2NvbCB3aWxsIGJlZ2luLgorKi8KKworLyogIEQgTyBYIFMg RSBOIEQgIC0tICBQYXJzZSBTRU5EIGFuZCByZWxhdGVkIGNvbW1hbmRzIHdpdGggc3dpdGNoZXMg ICovCisKK2ludAorZG94c2VuZChjeCkgaW50IGN4OyB7CisgICAgaW50IGMsIGksIG4sIHdpbGQs IGNvbmZpcm1lZCA9IDA7CS8qIFdvcmtlcnMgKi8KKyAgICBpbnQgeCwgeTsJCQkJLyogb2YgdGhl IHdvcmxkLi4uICovCisgICAgaW50IGdldHZhbCA9IDA7CQkJLyogV2hldGhlciB0byBnZXQgc3dp dGNoIHZhbHVlICovCisgICAgZXh0ZXJuIGNoYXIgKiBzbmRfbW92ZTsJCS8qIERpcmVjdG9yeSB0 byBtb3ZlIHNlbnQgZmlsZXMgdG8gKi8KKyAgICBleHRlcm4gY2hhciAqIHNuZF9yZW5hbWU7CQkv KiBXaGF0IHRvIHJlbmFtZSBzZW50IGZpbGVzIHRvICovCisgICAgZXh0ZXJuIGNoYXIgKiBmaWxl ZmlsZTsJCS8qIEZpbGUgY29udGFpbmluZyBmaWxlbmFtZXMgdG8gc2VuZCAqLworICAgIGV4dGVy biBpbnQgeGZpbGV0eXBlOwkJLyogU2VuZCBvbmx5IHRleHQgKG9yIGJpbmFyeSkgZmlsZXMgKi8K KyAgICBleHRlcm4gc3RydWN0IGtleXRhYiBwYXRodGFiW107CS8qIFBBVEhOQU1FUyBvcHRpb24g a2V5d29yZHMgKi8KKyAgICBleHRlcm4gaW50IG5wYXRodGFiOwkJLyogSG93IG1hbnkgb2YgdGhl bSAqLworICAgIGV4dGVybiBpbnQgcmVjdXJzaXZlOwkJLyogUmVjdXJzaXZlIGRpcmVjdG9yeSB0 cmF2ZXJzYWwgKi8KKyAgICBleHRlcm4gaW50IHJwcmludGY7CQkJLyogUkVNT1RFIFBSSU5UIGZs YWcgKi8KKyAgICBleHRlcm4gaW50IGZkaXNwbGE7CQkJLyogVFJBTlNGRVIgRElTUExBWSBzZXR0 aW5nICovCisgICAgZXh0ZXJuIGludCBza2lwYnVwOwkJCS8qIFNraXAgYmFja3VwIGZpbGVzIHdo ZW4gc2VuZGluZyAqLworICAgIHN0cnVjdCBzdHJpbmdpbnQgcHZbU05EX01BWCsxXTsJLyogVGVt cG9yYXJ5IGFycmF5IGZvciBzd2l0Y2ggdmFsdWVzICovCisgICAgc3RydWN0IEZEQiBzZiwgc3cs IGZsLCBjbTsJCS8qIEZEQnMgZm9yIGVhY2ggcGFyc2UgZnVuY3Rpb24gKi8KKyAgICBpbnQgbWxp c3QgPSAwOwkJCS8qIEZsYWcgZm9yIE1TRU5EIG9yIE1NT1ZFICovCisgICAgY2hhciAqIG07CQkJ CS8qIEZvciBtYWtpbmcgaGVscCBtZXNzYWdlcyAqLworICAgIGV4dGVybiBzdHJ1Y3Qga2V5dGFi IHByb3Rvc1tdOwkvKiBGaWxlIHRyYW5zZmVyIHByb3RvY29scyAqLworICAgIGV4dGVybiBpbnQg eGZyeGxhLCBnX3hmcnhsYSwgbnByb3RvczsKKyAgICBleHRlcm4gY2hhciBzbmRiZWZvcmVbXSwg c25kYWZ0ZXJbXSwgKnNuZGV4Y2VwdFtdOyAvKiBTZWxlY3Rpb24gY3JpdGVyaWEgKi8KKyAgICBl eHRlcm4gY2hhciBzbmRuYmVmb3JlW10sIHNuZG5hZnRlcltdOworICAgIGV4dGVybiBDS19PRkZf VCBzbmRzbWFsbGVyLCBzbmRsYXJnZXIsIGNhbGlicmF0ZTsKKyNpZm5kZWYgTk9TUEwKKyAgICBp bnQgcmFuZ2VbMl07CQkJLyogQXJyYXkgcmFuZ2UgKi8KKyAgICBjaGFyICoqIGFwID0gTlVMTDsJ CQkvKiBBcnJheSBwb2ludGVyICovCisgICAgaW50IGFycmF5eCA9IC0xOwkJCS8qIEFycmF5IGlu ZGV4ICovCisjZW5kaWYgLyogTk9TUEwgKi8KKworI2lmZGVmIE5FV0ZUUAorICAgIGlmICgoZnRw Z2V0ID09IDEpIHx8ICgoZnRwZ2V0ID09IDIpICYmIGZ0cGlzb3BlbigpKSkgeworCWlmIChjeCA9 PSBYWE1BSSkgeworCSAgICBwcmludGYoIj9Tb3JyeSwgTm8gTUFJTCB3aXRoIEZUUFxuIik7CisJ ICAgIHJldHVybigtOSk7CisJfQorCXJldHVybihkb2Z0cHB1dChjeCwwKSk7CisgICAgfQorI2Vu ZGlmIC8qIE5FV0ZUUCAqLworCisgICAgZm9yIChpID0gMDsgaSA8PSBTTkRfTUFYOyBpKyspIHsJ LyogSW5pdGlhbGl6ZSBzd2l0Y2ggdmFsdWVzICovCisJcHZbaV0uc3ZhbCA9IE5VTEw7CQkvKiB0 byBudWxsIHBvaW50ZXJzICovCisJcHZbaV0uaXZhbCA9IC0xOwkJLyogYW5kIC0xIGludCB2YWx1 ZXMgKi8KKwlwdltpXS53dmFsID0gKENLX09GRl9UKS0xOwkvKiBhbmQgLTEgd2lkZSB2YWx1ZXMg Ki8KKyAgICB9CisjaWZuZGVmIE5PU1BMCisgICAgcmFuZ2VbMF0gPSAtMTsKKyAgICByYW5nZVsx XSA9IC0xOworICAgIHNuZHhpbiA9IC0xOwkJCS8qIEFycmF5IGluZGV4ICovCisjZW5kaWYgLyog Tk9TUEwgKi8KKyAgICBzbmRhcnJheSA9IE5VTEw7CQkJLyogQXJyYXkgcG9pbnRlciAqLworCisj aWZkZWYgVU5JWE9ST1NLCisgICAgZ19tYXRjaGRvdCA9IG1hdGNoZG90OwkJLyogTWF0Y2ggZG90 IGZpbGVzICovCisjZW5kaWYgLyogVU5JWE9ST1NLICovCisgICAgZ19yZWN1cnNpdmUgPSByZWN1 cnNpdmU7CQkvKiBSZWN1cnNpdmUgc2VuZGluZyAqLworICAgIHJlY3Vyc2l2ZSA9IDA7CQkJLyog U2F2ZSBnbG9iYWwgdmFsdWUsIHNldCBsb2NhbCAqLworICAgIGRlYnVnKEYxMDEsInhzZW5kIGVu dHJ5IGZuY252IiwiIixmbmNudik7CisKKyAgICAvKiBQcmVzZXQgc3dpdGNoIHZhbHVlcyBiYXNl ZCBvbiB0b3AtbGV2ZWwgY29tbWFuZCB0aGF0IGNhbGxlZCB1cyAqLworCisgICAgc3dpdGNoIChj eCkgeworICAgICAgY2FzZSBYWE1TRToJCQkvKiBNU0VORCAqLworCW1saXN0ID0gMTsgYnJlYWs7 CisgICAgICBjYXNlIFhYQ1NFTjoJCQkvKiBDU0VORCAqLworCXB2W1NORF9DTURdLml2YWwgPSAx OyBicmVhazsKKyAgICAgIGNhc2UgWFhNTU9WRToJCQkvKiBNTU9WRSAqLworCW1saXN0ID0gMTsK KyAgICAgIGNhc2UgWFhNT1ZFOgkJCS8qIE1PVkUgKi8KKwlwdltTTkRfREVMXS5pdmFsID0gMTsg YnJlYWs7CisgICAgICBjYXNlIFhYUlNFTjoJCQkvKiBSRVNFTkQgKi8KKwlwdltTTkRfQklOXS5p dmFsID0gMTsJCS8qIEltcGxpZXMgL0JJTkFSWSAqLworCXB2W1NORF9SRVNdLml2YWwgPSAxOyBi cmVhazsKKyAgICAgIGNhc2UgWFhNQUk6CQkJLyogTUFJTCAqLworCXB2W1NORF9NQUldLml2YWwg PSAxOyBicmVhazsKKyAgICB9CisKKyAgICAvKiBTZXQgdXAgY2hhaW5lZCBwYXJzZSBmdW5jdGlv bnMuLi4gKi8KKworICAgIGNtZmRiaSgmc3csCQkJCS8qIEZpcnN0IEZEQiAtIGNvbW1hbmQgc3dp dGNoZXMgKi8KKwkgICBfQ01LRVksCQkJLyogZmNvZGUgKi8KKwkgICAiRmlsZW5hbWUsIG9yIHN3 aXRjaCIsCS8qIGhscG1zZyAqLworCSAgICIiLAkJCQkvKiBkZWZhdWx0ICovCisJICAgIiIsCQkJ CS8qIGFkZHRsIHN0cmluZyBkYXRhICovCisjaWZkZWYgTk9NU0VORAorCSAgIG5zbmR0YWIsCQkJ LyogYWRkdGwgbnVtZXJpYyBkYXRhIDE6IHRibCBzaXplICovCisjZWxzZQorCSAgIG1saXN0ID8g bm1zbmR0YWIgOiBuc25kdGFiLAkvKiBhZGR0bCBudW1lcmljIGRhdGEgMTogdGJsIHNpemUgKi8K KyNlbmRpZiAvKiBOT01TRU5EICovCisJICAgNCwJCQkJLyogYWRkdGwgbnVtZXJpYyBkYXRhIDI6 IDQgPSBjbXN3aSAqLworCSAgIHh4c3RyaW5nLAkJCS8qIFByb2Nlc3NpbmcgZnVuY3Rpb24gKi8K KyNpZmRlZiBOT01TRU5ECisJICAgc25kdGFiLAkJCS8qIEtleXdvcmQgdGFibGUgKi8KKyNlbHNl CisJICAgbWxpc3QgPyBtc25kdGFiIDogc25kdGFiLAorI2VuZGlmIC8qIE5PTVNFTkQgKi8KKwkg ICAmc2YJCQkJLyogUG9pbnRlciB0byBuZXh0IEZEQiAqLworCSAgICk7CisgICAgY21mZGJpKCZz ZiwJCQkJLyogMm5kIEZEQiAtIGZpbGUgdG8gc2VuZCAqLworCSAgIF9DTUlGSSwJCQkvKiBmY29k ZSAqLworCSAgICJGaWxlKHMpIHRvIHNlbmQiLAkJLyogaGxwbXNnICovCisJICAgIiIsCQkJCS8q IGRlZmF1bHQgKi8KKwkgICAiIiwJCQkJLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KKwkgICBub2xp bmtzLAkJCS8qIGFkZHRsIG51bWVyaWMgZGF0YSAxICovCisJICAgMCwJCQkJLyogYWRkdGwgbnVt ZXJpYyBkYXRhIDIgKi8KKwkgICB4eHN0cmluZywKKwkgICBOVUxMLAorCSAgIG1saXN0ID8gJmNt IDogJmZsCisJICAgKTsKKyAgICBjbWZkYmkoJmZsLAkJCQkvKiAzcmQgRkRCIC0gY29tbWFuZCB0 byBzZW5kIGZyb20gKi8KKwkgICBfQ01GTEQsCQkJLyogZmNvZGUgKi8KKwkgICAiQ29tbWFuZCIs CQkJLyogaGxwbXNnICovCisJICAgIiIsCQkJCS8qIGRlZmF1bHQgKi8KKwkgICAiIiwJCQkJLyog YWRkdGwgc3RyaW5nIGRhdGEgKi8KKwkgICAwLAkJCQkvKiBhZGR0bCBudW1lcmljIGRhdGEgMSAq LworCSAgIDAsCQkJCS8qIGFkZHRsIG51bWVyaWMgZGF0YSAyICovCisJICAgeHhzdHJpbmcsCisJ ICAgTlVMTCwKKwkgICAmY20KKwkgICApOworICAgIGNtZmRiaSgmY20sCQkJCS8qIDR0aCBGREIg LSBDb25maXJtYXRpb24gKi8KKwkgICBfQ01DRk0sCQkJLyogZmNvZGUgKi8KKwkgICAiIiwJCQkJ LyogaGxwbXNnICovCisJICAgIiIsCQkJCS8qIGRlZmF1bHQgKi8KKwkgICAiIiwJCQkJLyogYWRk dGwgc3RyaW5nIGRhdGEgKi8KKwkgICAwLAkJCQkvKiBhZGR0bCBudW1lcmljIGRhdGEgMSAqLwor CSAgIDAsCQkJCS8qIGFkZHRsIG51bWVyaWMgZGF0YSAyICovCisJICAgTlVMTCwKKwkgICBOVUxM LAorCSAgIE5VTEwKKwkgICApOworCisgICAgd2hpbGUgKDEpIHsJCQkJLyogUGFyc2UgMCBvciBt b3JlIHN3aXRjaGVzICovCisJeCA9IGNtZmRiKCZzdyk7CQkJLyogUGFyc2Ugc29tZXRoaW5nICov CisJZGVidWcoRjEwMSwieHNlbmQgY21mZGIiLCIiLHgpOworCWlmICh4IDwgMCkJCQkvKiBFcnJv ciAqLworCSAgZ290byB4c2VuZHg7CQkJLyogb3IgcmVwYXJzZSBuZWVkZWQgKi8KKwlpZiAoY21y ZXN1bHQuZmNvZGUgIT0gX0NNS0VZKQkvKiBCcmVhayBvdXQgaWYgbm90IGEgc3dpdGNoICovCisJ ICBicmVhazsKKy8qCisgIFRoZXkgZ2F2ZSBhIHN3aXRjaCwgYnV0IGxldCdzIHNlZSBob3cgdGhl eSB0ZXJtaW5hdGVkIGl0LgorICBJZiB0aGV5IGVuZGVkIGl0IHdpdGggOiBvciA9LCB0aGVuIHdl IG11c3QgcGFyc2UgYSB2YWx1ZS4KKyAgSWYgdGhleSBlbmRlZCBpdCB3aXRoIGFueXRoaW5nIGVs c2UsIHRoZW4gd2UgbXVzdCBOT1QgcGFyc2UgYSB2YWx1ZS4KKyovCisJYyA9IGNtZ2JyaygpOwkJ CS8qIEdldCBicmVhayBjaGFyYWN0ZXIgKi8KKwlnZXR2YWwgPSAoYyA9PSAnOicgfHwgYyA9PSAn PScpOyAvKiB0byBzZWUgaG93IHRoZXkgZW5kZWQgdGhlIHN3aXRjaCAqLworCWlmIChnZXR2YWwg JiYgIShjbXJlc3VsdC5rZmxhZ3MgJiBDTV9BUkcpKSB7CisJICAgIHByaW50ZigiP1RoaXMgc3dp dGNoIGRvZXMgbm90IHRha2UgYXJndW1lbnRzXG4iKTsKKwkgICAgeCA9IC05OworCSAgICBnb3Rv IHhzZW5keDsKKwl9CisJaWYgKCFnZXR2YWwgJiYgKGNtZ2t3ZmxncygpICYgQ01fQVJHKSkgewor CSAgICBwcmludGYoIj9UaGlzIHN3aXRjaCByZXF1aXJlcyBhbiBhcmd1bWVudFxuIik7CisJICAg IHggPSAtOTsKKwkgICAgZ290byB4c2VuZHg7CisJfQorCW4gPSBjbXJlc3VsdC5ucmVzdWx0OwkJ LyogTnVtZXJpYyByZXN1bHQgPSBzd2l0Y2ggdmFsdWUgKi8KKwlkZWJ1ZyhGMTAxLCJ4c2VuZCBz d2l0Y2giLCIiLG4pOworCisJc3dpdGNoIChuKSB7CQkJLyogUHJvY2VzcyB0aGUgc3dpdGNoICov CisJICBjYXNlIFNORF9DTUQ6CQkJLyogVGhlc2UgdGFrZSBubyBhcmdzICovCisJICAgIGlmIChu b3B1c2gpIHsKKwkJcHJpbnRmKCI/U29ycnksIHN5c3RlbSBjb21tYW5kIGFjY2VzcyBpcyBkaXNh YmxlZFxuIik7CisJCXggPSAtOTsKKwkJZ290byB4c2VuZHg7CisJICAgIH0KKyNpZmRlZiBQSVBF U0VORAorCSAgICBlbHNlIGlmIChzbmRmaWx0ZXIpIHsKKwkJcHJpbnRmKAorIj9Tb3JyeSwgbm8g U0VORCAvQ09NTUFORCBvciBDU0VORCB3aGVuIFNFTkQgRklMVEVSIHNlbGVjdGVkXG4iKTsKKwkJ eCA9IC05OworCQlnb3RvIHhzZW5keDsKKwkgICAgfQorI2VuZGlmIC8qIFBJUEVTRU5EICovCisJ ICAgIHN3LmhscG1zZyA9ICJDb21tYW5kLCBvciBzd2l0Y2giOyAvKiBDaGFuZ2UgaGVscCBtZXNz YWdlICovCisJICAgIHB2W25dLml2YWwgPSAxOwkJLyogSnVzdCBzZXQgdGhlIGZsYWcgKi8KKwkg ICAgcHZbU05EX0FSUl0uaXZhbCA9IDA7CisJICAgIGJyZWFrOworCisJICBjYXNlIFNORF9SRUM6 CQkJLyogL1JFQ1VSU0lWRSAqLworCSAgICByZWN1cnNpdmUgPSAyOwkJLyogU2V0IHRoZSByZWFs IHZhcmlhYmxlICovCisJICAgIHB2W1NORF9QVEhdLml2YWwgPSBQQVRIX1JFTDsgLyogR2l2ZSB0 aGVtIHJlbGF0aXZlIHBhdGhuYW1lcyAqLworCSAgICBwdltuXS5pdmFsID0gMTsJCS8qIEp1c3Qg c2V0IHRoZSBmbGFnICovCisJICAgIGJyZWFrOworCisJICBjYXNlIFNORF9SRVM6CQkJLyogL1JF Q09WRVIgKHJlc2VuZCkgKi8KKwkgICAgcHZbU05EX0FSUl0uaXZhbCA9IDA7CisJICAgIHB2W1NO RF9CSU5dLml2YWwgPSAxOwkvKiBJbXBsaWVzIC9CSU5BUlkgKi8KKwkgIGNhc2UgU05EX05PQjoJ CQkvKiAvTk9CQUNLVVAgKi8KKwkgIGNhc2UgU05EX0RFTDoJCQkvKiAvREVMRVRFICovCisJICBj YXNlIFNORF9TSEg6CQkJLyogL1FVSUVUICovCisJICAgIHB2W25dLml2YWwgPSAxOwkJLyogSnVz dCBzZXQgdGhlIGZsYWcgKi8KKwkgICAgYnJlYWs7CisKKyNpZmRlZiBVTklYT1JPU0sKKy8qIExp a2UgcmVjdXJzaXZlLCB0aGVzZSBhcmUgc2V0IGltbWVkaWF0ZWx5IGJlY2F1c2UgdGhleSBhZmZl Y3QgY21pZmkoKSAqLworCSAgY2FzZSBTTkRfRE9UOgkJCS8qIC9ET1RGSUxFUyAqLworCSAgICBt YXRjaGRvdCA9IDE7CisJICAgIGJyZWFrOworCSAgY2FzZSBTTkRfTk9EOgkJCS8qIC9OT0RPVEZJ TEVTICovCisJICAgIG1hdGNoZG90ID0gMDsKKwkgICAgYnJlYWs7CisjZW5kaWYgLyogVU5JWE9S T1NLICovCisKKwkgIC8qIEZpbGUgdHJhbnNmZXIgbW9kZXMgLSBlYWNoIHVuZG9lcyB0aGUgb3Ro ZXJzICovCisKKwkgIGNhc2UgU05EX0JJTjoJCQkvKiBCaW5hcnkgKi8KKwkgIGNhc2UgU05EX1RY VDoJCQkvKiBUZXh0ICovCisJICBjYXNlIFNORF9JTUc6CQkJLyogSW1hZ2UgKi8KKwkgIGNhc2Ug U05EX0xCTDoJCQkvKiBMYWJlbGVkICovCisJICAgIHB2W1NORF9CSU5dLml2YWwgPSAwOworCSAg ICBwdltTTkRfVFhUXS5pdmFsID0gMDsKKwkgICAgcHZbU05EX0lNR10uaXZhbCA9IDA7CisJICAg IHB2W1NORF9MQkxdLml2YWwgPSAwOworCSAgICBwdltuXS5pdmFsID0gMTsKKwkgICAgYnJlYWs7 CisKKyNpZmRlZiBDS1NZTUxJTksKKwkgIGNhc2UgU05EX0xOSzoKKwkgIGNhc2UgU05EX05MSzoK KwkgICAgbm9saW5rcyA9IChuID09IFNORF9OTEspID8gMiA6IDA7CisJICAgIGNtZmRiaSgmc2Ys CQkJLyogUmVkbyBjbWlmaSgpICovCisJCSAgIF9DTUlGSSwJCS8qIGZjb2RlICovCisJCSAgICJG aWxlKHMpIHRvIHNlbmQiLAkvKiBobHBtc2cgKi8KKwkJICAgIiIsCQkJLyogZGVmYXVsdCAqLwor CQkgICAiIiwJCQkvKiBhZGR0bCBzdHJpbmcgZGF0YSAqLworCQkgICBub2xpbmtzLAkJLyogYWRk dGwgbnVtZXJpYyBkYXRhIDEgKi8KKwkJICAgMCwJCQkvKiBhZGR0bCBudW1lcmljIGRhdGEgMiAq LworCQkgICB4eHN0cmluZywKKwkJICAgTlVMTCwKKwkJICAgbWxpc3QgPyAmY20gOiAmZmwKKwkJ ICAgKTsKKwkgICAgYnJlYWs7CisjZW5kaWYgLyogQ0tTWU1MSU5LICovCisKKwkgIGNhc2UgU05E X0VYQzoJCQkvKiBFeGNsdWRlcyAqLworCSAgICBpZiAoIWdldHZhbCkgYnJlYWs7CisJICAgIGlm ICgoeCA9IGNtZmxkKCJQYXR0ZXJuIiwiIiwmcyx4eHN0cmluZykpIDwgMCkgeworCQlpZiAoeCA9 PSAtMykgeworCQkgICAgcHJpbnRmKCI/UGF0dGVybiByZXF1aXJlZFxuIik7CisJCSAgICB4ID0g LTk7CisJCX0KKwkJZ290byB4c2VuZHg7CisJICAgIH0KKwkgICAgaWYgKHB2W25dLnN2YWwpIGZy ZWUocHZbbl0uc3ZhbCk7CisJICAgIHkgPSBzdHJsZW4ocyk7CisJICAgIGlmICh5ID4gMjU2KSB7 CisJCXByaW50ZigiP1BhdHRlcm4gdG9vIGxvbmcgLSAyNTYgbWF4XG4iKTsKKwkJeCA9IC05Owor CQlnb3RvIHhzZW5keDsKKwkgICAgfQorCSAgICBwdltuXS5zdmFsID0gbWFsbG9jKHkrMSk7CisJ ICAgIGlmIChwdltuXS5zdmFsKSB7CisJCXN0cmNweShwdltuXS5zdmFsLHMpOwkvKiBzYWZlICov CisJCXB2W25dLml2YWwgPSAxOworCSAgICB9CisJICAgIGJyZWFrOworCisJICBjYXNlIFNORF9N T1Y6CQkJLyogTU9WRSBhZnRlciAqLworCSAgY2FzZSBTTkRfUkVOOgkJCS8qIFJFTkFNRSBhZnRl ciAqLworCSAgICBpZiAoIWdldHZhbCkgYnJlYWs7CisJICAgIGlmICgoeCA9IGNtZmxkKG4gPT0g U05EX01PViA/CisJICAgImRldmljZSBhbmQvb3IgZGlyZWN0b3J5IGZvciBzb3VyY2UgZmlsZSBh ZnRlciBzZW5kaW5nIiA6CisJICAgIm5ldyBuYW1lIGZvciBzb3VyY2UgZmlsZSBhZnRlciBzZW5k aW5nIiwKKwkJCSAgICIiLAorCQkJICAgJnMsCisJCQkgICBuID09IFNORF9NT1YgPyB4eHN0cmlu ZyA6IE5VTEwKKwkJCSAgICkpIDwgMCkgeworCQlpZiAoeCA9PSAtMykgeworCQkgICAgcHJpbnRm KCIlc1xuIiwgbiA9PSBTTkRfTU9WID8KKwkJCSAgICI/RGVzdGluYXRpb24gcmVxdWlyZWQiIDoK KwkJCSAgICI/TmV3IG5hbWUgcmVxdWlyZWQiCisJCQkgICApOworCQkgICAgeCA9IC05OworCQl9 CisJCWdvdG8geHNlbmR4OworCSAgICB9CisJICAgIGlmIChwdltuXS5zdmFsKSBmcmVlKHB2W25d LnN2YWwpOworCSAgICBzID0gYnJzdHJpcChzKTsKKwkgICAgeSA9IHN0cmxlbihzKTsKKwkgICAg aWYgKHkgPiAwKSB7CisJCXB2W25dLnN2YWwgPSBtYWxsb2MoeSsxKTsKKwkJaWYgKHB2W25dLnN2 YWwpIHsKKwkJICAgIHN0cmNweShwdltuXS5zdmFsLHMpOyAvKiBzYWZlICovCisJCSAgICBwdltu XS5pdmFsID0gMTsKKwkJfQorCSAgICB9CisJICAgIGJyZWFrOworCisJICBjYXNlIFNORF9TTUE6 CQkJLyogU21hbGxlciAvIGxhcmdlciB0aGFuICovCisJICBjYXNlIFNORF9MQVI6IHsKKwkgICAg ICBDS19PRkZfVCB3OworCSAgICAgIGlmICghZ2V0dmFsKSBicmVhazsKKwkgICAgICBpZiAoKHgg PSBjbW51bXcoIlNpemUgaW4gYnl0ZXMiLCIwIiwxMCwmdyx4eHN0cmluZykpIDwgMCkKKwkJZ290 byB4c2VuZHg7CisJICAgICAgcHZbbl0ud3ZhbCA9IHc7CisJICAgICAgYnJlYWs7CisJICB9CisJ ICBjYXNlIFNORF9BRlQ6CQkJLyogU2VuZCAvQUZURVI6ZGF0ZS10aW1lICovCisJICBjYXNlIFNO RF9CRUY6CQkJLyogU2VuZCAvQkVGT1JFOmRhdGUtdGltZSAqLworCSAgY2FzZSBTTkRfTkFGOgkJ CS8qIFNlbmQgL05PVC1BRlRFUjpkYXRlLXRpbWUgKi8KKwkgIGNhc2UgU05EX05CRToJCQkvKiBT ZW5kIC9OT1QtQkVGT1JFOmRhdGUtdGltZSAqLworCSAgICBpZiAoIWdldHZhbCkgYnJlYWs7CisJ ICAgIGlmICgoeCA9IGNtZGF0ZSgiRmlsZSBkYXRlLXRpbWUiLCIiLCZzLDAseHhzdHJpbmcpKSA8 IDApIHsKKwkJaWYgKHggPT0gLTMpIHsKKwkJICAgIHByaW50ZigiP0RhdGUtdGltZSByZXF1aXJl ZFxuIik7CisJCSAgICB4ID0gLTk7CisJCX0KKwkJZ290byB4c2VuZHg7CisJICAgIH0KKwkgICAg aWYgKHB2W25dLnN2YWwpIGZyZWUocHZbbl0uc3ZhbCk7CisJICAgIHB2W25dLnN2YWwgPSBtYWxs b2MoKGludClzdHJsZW4ocykrMSk7CisJICAgIGlmIChwdltuXS5zdmFsKSB7CisJCXN0cmNweShw dltuXS5zdmFsLHMpOwkvKiBzYWZlICovCisJCXB2W25dLml2YWwgPSAxOworCSAgICB9CisJICAg IGJyZWFrOworCisJICBjYXNlIFNORF9NQUk6CQkJLyogU2VuZCBhcyBtYWlsICg9IE1BSUwpICov CisjaWZkZWYgSUtTRAorCSAgICBpZiAoaW5zZXJ2ZXIgJiYgIUVOQUJMRUQoZW5fbWFpKSkgewor CQlwcmludGYoIj9Tb3JyeSwgc2VuZGluZyBmaWxlcyBhcyBtYWlsIGlzIGRpc2FibGVkXG4iKTsK KwkJcmV0dXJuKC05KTsKKwkgICAgfQorI2VuZGlmIC8qIElLU0QgKi8KKwkgICAgcHZbbl0uaXZh bCA9IDE7CisJICAgIGlmICghZ2V0dmFsKSBicmVhazsKKwkgICAgaWYgKCh4ID0gY21mbGQoImUt bWFpbCBhZGRyZXNzIiwiIiwmcyx4eHN0cmluZykpIDwgMCkgeworCQlpZiAoeCA9PSAtMykgewor CQkgICAgcHJpbnRmKCI/YWRkcmVzcyByZXF1aXJlZFxuIik7CisJCSAgICB4ID0gLTk7CisJCX0K KwkJZ290byB4c2VuZHg7CisJICAgIH0KKwkgICAgcyA9IGJyc3RyaXAocyk7CisJICAgIGlmIChw dltuXS5zdmFsKSBmcmVlKHB2W25dLnN2YWwpOworCSAgICBwdltuXS5zdmFsID0gbWFsbG9jKChp bnQpc3RybGVuKHMpKzEpOworCSAgICBpZiAocHZbbl0uc3ZhbCkKKwkgICAgICBzdHJjcHkocHZb bl0uc3ZhbCxzKTsJLyogc2FmZSAqLworCSAgICBicmVhazsKKworCSAgY2FzZSBTTkRfUFJJOgkJ CS8qIFNlbmQgdG8gYmUgcHJpbnRlZCAoUkVNT1RFIFBSSU5UKSAqLworI2lmZGVmIElLU0QKKwkg ICAgaWYgKGluc2VydmVyICYmICFFTkFCTEVEKGVuX21haSkpIHsKKwkJcHJpbnRmKCI/U29ycnks IHNlbmRpbmcgZmlsZXMgZm9yIHByaW50aW5nIGlzIGRpc2FibGVkXG4iKTsKKwkJcmV0dXJuKC05 KTsKKwkgICAgfQorI2VuZGlmIC8qIElLU0QgKi8KKwkgICAgcHZbbl0uaXZhbCA9IDE7CisJICAg IGlmICghZ2V0dmFsKSBicmVhazsKKwkgICAgaWYgKCh4ID0gY21mbGQoIlByaW50IG9wdGlvbnMi LCIiLCZzLHh4c3RyaW5nKSkgPCAwKQorCSAgICAgIGlmICh4ICE9IC0zKSBnb3RvIHhzZW5keDsK KwkgICAgcyA9IGJyc3RyaXAocyk7CisJICAgIGlmIChwdltuXS5zdmFsKSBmcmVlKHB2W25dLnN2 YWwpOworCSAgICBwdltuXS5zdmFsID0gbWFsbG9jKChpbnQpc3RybGVuKHMpKzEpOworCSAgICBp ZiAocHZbbl0uc3ZhbCkKKwkgICAgICBzdHJjcHkocHZbbl0uc3ZhbCxzKTsJLyogc2FmZSAqLwor CSAgICBicmVhazsKKworCSAgY2FzZSBTTkRfQVNOOgkJCS8qIEFzLW5hbWUgKi8KKwkgICAgZGVi dWcoRjEwMSwieHNlbmQgL2FzLW5hbWUgZ2V0dmFsIiwiIixnZXR2YWwpOworCSAgICBpZiAoIWdl dHZhbCkgYnJlYWs7CisJICAgIGlmICgoeCA9IGNtZmxkKCJOYW1lIHRvIHNlbmQgdW5kZXIiLCIi LCZzLE5VTEwpKSA8IDApIHsKKwkJaWYgKHggPT0gLTMpIHsKKwkJICAgIHByaW50ZigiP25hbWUg cmVxdWlyZWRcbiIpOworCQkgICAgeCA9IC05OworCQl9CisJCWdvdG8geHNlbmR4OworCSAgICB9 CisJICAgIHMgPSBicnN0cmlwKHMpOworCSAgICBpZiAoKHkgPSBzdHJsZW4ocykpID4gMCkgewor CQlpZiAocHZbbl0uc3ZhbCkgZnJlZShwdltuXS5zdmFsKTsKKwkJcHZbbl0uc3ZhbCA9IG1hbGxv Yyh5KzEpOworCQlpZiAocHZbbl0uc3ZhbCkgeworCQkgICAgc3RyY3B5KHB2W25dLnN2YWwscyk7 IC8qIHNhZmUgKi8KKwkJICAgIHB2W25dLml2YWwgPSAxOworCQl9CisJICAgIH0KKwkgICAgYnJl YWs7CisKKwkgIGNhc2UgU05EX1NUQTogewkJLyogU3RhcnRpbmcgcG9zaXRpb24gKD0gUFNFTkQp ICovCisJICAgICAgQ0tfT0ZGX1QgdzsKKwkgICAgICBpZiAoIWdldHZhbCkgYnJlYWs7CisJICAg ICAgaWYgKCh4ID0gY21udW13KCIwLWJhc2VkIHBvc2l0aW9uIiwiMCIsMTAsJncseHhzdHJpbmcp KSA8IDApCisJCWdvdG8geHNlbmR4OworCSAgICAgIHB2W25dLnd2YWwgPSB3OworCSAgICAgIGJy ZWFrOworCSAgfQorCSAgY2FzZSBTTkRfUFJPOgkJCS8qIFByb3RvY29sIHRvIHVzZSAqLworCSAg ICBpZiAoIWdldHZhbCkgYnJlYWs7CisJICAgIGlmICgoeCA9IGNta2V5KHByb3RvcyxucHJvdG9z LCJGaWxlLXRyYW5zZmVyIHByb3RvY29sIiwiIiwKKwkJCSAgIHh4c3RyaW5nKSkgPCAwKSB7CisJ CWlmICh4ID09IC0zKSB7CisJCSAgICBwcmludGYoIj9uYW1lIG9mIHByb3RvY29sIHJlcXVpcmVk XG4iKTsKKwkJICAgIHggPSAtOTsKKwkJfQorCQlnb3RvIHhzZW5keDsKKwkgICAgfQorCSAgICBw dltuXS5pdmFsID0geDsKKwkgICAgYnJlYWs7CisKKyNpZmRlZiBQSVBFU0VORAorCSAgY2FzZSBT TkRfRkxUOgkJCS8qIEZpbHRlciAqLworCSAgICBkZWJ1ZyhGMTAxLCJ4c2VuZCAvZmlsdGVyIGdl dHZhbCIsIiIsZ2V0dmFsKTsKKwkgICAgaWYgKCFnZXR2YWwpIGJyZWFrOworCSAgICBpZiAoKHgg PSBjbWZsZCgiRmlsdGVyIHByb2dyYW0gdG8gc2VuZCB0aHJvdWdoIiwiIiwmcyxOVUxMKSkgPCAw KSB7CisJCWlmICh4ID09IC0zKQorCQkgIHMgPSAiIjsKKwkJZWxzZQorCQkgIGdvdG8geHNlbmR4 OworCSAgICB9CisJICAgIGlmICgqcykgcyA9IGJyc3RyaXAocyk7CisJICAgIHkgPSBzdHJsZW4o cyk7CisJICAgIGZvciAoeCA9IDA7IHggPCB5OyB4KyspIHsJLyogTWFrZSBzdXJlIHRoZXkgaW5j bHVkZWQgIlx2KC4uLikiICovCisJCWlmIChzW3hdICE9ICdcXCcpIGNvbnRpbnVlOworCQlpZiAo c1t4KzFdID09ICd2JykgYnJlYWs7CisJICAgIH0KKwkgICAgaWYgKHggPT0geSkgeworCQlwcmlu dGYoCisJCSI/RmlsdGVyIG11c3QgY29udGFpbiBhIHJlcGxhY2VtZW50IHZhcmlhYmxlIGZvciBm aWxlbmFtZS5cbiIKKwkJICAgICAgICk7CisJCXggPSAtOTsKKwkJZ290byB4c2VuZHg7CisJICAg IH0KKwkgICAgcHZbbl0uaXZhbCA9IDE7CisJICAgIGlmIChwdltuXS5zdmFsKSB7CisJCWZyZWUo cHZbbl0uc3ZhbCk7CisJCXB2W25dLnN2YWwgPSBOVUxMOworCSAgICB9CisJICAgIGlmICgoeSA9 IHN0cmxlbihzKSkgPiAwKSB7CisJCWlmICgocHZbbl0uc3ZhbCA9IG1hbGxvYyh5KzEpKSkKKwkJ ICBzdHJjcHkocHZbbl0uc3ZhbCxzKTsJLyogc2FmZSAqLworCSAgICB9CisJICAgIGJyZWFrOwor I2VuZGlmIC8qIFBJUEVTRU5EICovCisKKwkgIGNhc2UgU05EX1BUSDoJCQkvKiBQYXRobmFtZXMg Ki8KKwkgICAgaWYgKCFnZXR2YWwpIHsKKwkJcHZbbl0uaXZhbCA9IFBBVEhfUkVMOworCQlicmVh azsKKwkgICAgfQorCSAgICBpZiAoKHggPSBjbWtleShwYXRodGFiLG5wYXRodGFiLCIiLCJhYnNv bHV0ZSIseHhzdHJpbmcpKSA8IDApCisJICAgICAgZ290byB4c2VuZHg7CisJICAgIHB2W25dLml2 YWwgPSB4OworCSAgICBicmVhazsKKworCSAgY2FzZSBTTkRfTkFNOgkJCS8qIEZpbGVuYW1lcyAq LworCSAgICBpZiAoIWdldHZhbCkgYnJlYWs7CisJICAgIGlmICgoeCA9IGNta2V5KGZudGFiLG5m bnRhYiwiIiwiY29udmVydGVkIix4eHN0cmluZykpIDwgMCkKKwkgICAgICBnb3RvIHhzZW5keDsK KwkgICAgZGVidWcoRjEwMSwieHNlbmQgL2ZpbGVuYW1lcyIsIiIseCk7CisJICAgIHB2W25dLml2 YWwgPSB4OworCSAgICBicmVhazsKKworI2lmZGVmIENBTElCUkFURQorICAgICAgICAgIGNhc2Ug U05EX0NBTDogewkJLyogL0NBTElCUkFURSAqLworCSAgICAgIENLX09GRl9UIHc7CisJICAgICAg aWYgKGdldHZhbCkgeworCQkgIGlmICgoeCA9IGNtbnVtdygibnVtYmVyIG9mIEtieXRlcyB0byBz ZW5kIiwKKwkJCQkgICIxMDI0IiwxMCwmdyx4eHN0cmluZykpIDwgMCkKKwkJICAgIGdvdG8geHNl bmR4OworCSAgICAgIH0gZWxzZQorCQl3ID0gKENLX09GRl9UKTEwMjQ7CisJICAgICAgcHZbbl0u d3ZhbCA9IHc7CisJICAgICAgcHZbU05EX0FSUl0uaXZhbCA9IDA7CisJICAgICAgYnJlYWs7CisJ ICB9CisjZW5kaWYgLyogQ0FMSUJSQVRFICovCisKKwkgIGNhc2UgU05EX0ZJTDoJCQkvKiBOYW1l IG9mIGZpbGUgY29udGFpbmluZyBmaWxuYW1lcyAqLworCSAgICBpZiAoIWdldHZhbCkgYnJlYWs7 CisJICAgIGlmICgoeCA9IGNtaWZpKCJOYW1lIG9mIGZpbGUgY29udGFpbmluZyBsaXN0IG9mIGZp bGVuYW1lcyIsCisJCQkgICAgICAgIiIsJnMsJnkseHhzdHJpbmcpKSA8IDApIHsKKwkJaWYgKHgg PT0gLTMpIHsKKwkJICAgIHByaW50ZigiP0ZpbGVuYW1lIHJlcXVpcmVkXG4iKTsKKwkJICAgIHgg PSAtOTsKKwkJfQorCQlnb3RvIHhzZW5keDsKKwkgICAgfSBlbHNlIGlmICh5KSB7CisJCXByaW50 ZigiP1dpbGRjYXJkcyBub3QgYWxsb3dlZFxuIik7CisJCXggPSAtOTsKKwkJZ290byB4c2VuZHg7 CisJICAgIH0KKwkgICAgaWYgKHB2W25dLnN2YWwpCisJICAgICAgZnJlZShwdltuXS5zdmFsKTsK KwkgICAgaWYgKHMpIGlmICgqcykgeworCQlpZiAoKHB2W25dLnN2YWwgPSBtYWxsb2MoKGludClz dHJsZW4ocykrMSkpKSB7CisJCSAgICBzdHJjcHkocHZbbl0uc3ZhbCxzKTsKKwkJICAgIHB2W25d Lml2YWwgPSAxOworCQkgICAgcHZbU05EX0FSUl0uaXZhbCA9IDA7CisJCX0KKwkgICAgfQorCSAg ICBicmVhazsKKworI2lmbmRlZiBOT1NQTAorCSAgY2FzZSBTTkRfQVJSOgkJCS8qIFNFTkQgL0FS UkFZOiAqLworCSAgICBpZiAoIWdldHZhbCkgYnJlYWs7CisJICAgIGFwID0gTlVMTDsKKwkgICAg aWYgKCh4ID0gY21mbGQoIkFycmF5IG5hbWUgKGEgc2luZ2xlIGxldHRlciB3aWxsIGRvKSIsCisJ CQkgICAiIiwKKwkJCSAgICZzLAorCQkJICAgTlVMTAorCQkJICAgKSkgPCAwKSB7CisJCWlmICh4 ID09IC0zKQorCQkgIGJyZWFrOworCQllbHNlCisJCSAgcmV0dXJuKHgpOworCSAgICB9CisJICAg IGlmICgoeCA9IGFycmF5Ym91bmRzKHMsJihyYW5nZVswXSksJihyYW5nZVsxXSkpKSA8IDApIHsK KwkJcHJpbnRmKCI/QmFkIGFycmF5OiAlc1xuIixzKTsKKwkJcmV0dXJuKC05KTsKKwkgICAgfQor CSAgICBpZiAoIShhcCA9IGFfcHRyW3hdKSkgeworCQlwcmludGYoIj9ObyBzdWNoIGFycmF5OiAl c1xuIixzKTsKKwkJcmV0dXJuKC05KTsKKwkgICAgfQorCSAgICBwdltuXS5pdmFsID0gMTsKKwkg ICAgcHZbU05EX0NNRF0uaXZhbCA9IDA7CS8qIFVuZG8gYW55IGNvbmZsaWN0aW5nIG9uZXMuLi4g Ki8KKwkgICAgcHZbU05EX1JFU10uaXZhbCA9IDA7CisJICAgIHB2W1NORF9DQUxdLml2YWwgPSAw OworCSAgICBwdltTTkRfRklMXS5pdmFsID0gMDsKKwkgICAgYXJyYXl4ID0geDsKKwkgICAgYnJl YWs7CisjZW5kaWYgLyogTk9TUEwgKi8KKworCSAgY2FzZSBTTkRfWFBBOgkJCS8qIC9UUkFOU1BB UkVOVCAqLworCSAgICBwdltuXS5pdmFsID0gMTsKKwkgICAgYnJlYWs7CisKKwkgIGNhc2UgU05E X1RZUDoJCQkvKiBPbmx5IGZpbGVzIG9mIGdpdmVuIHR5cGUgKi8KKwkgICAgaWYgKCFnZXR2YWwp IGJyZWFrOworCSAgICBpZiAoKHggPSBjbWtleSh0eHRiaW4sMywiIiwiYWxsIix4eHN0cmluZykp IDwgMCkKKwkgICAgICBnb3RvIHhzZW5keDsKKwkgICAgcHZbbl0uaXZhbCA9ICh4ID09IDIpID8g LTEgOiB4OworCSAgICBicmVhazsKKworCSAgZGVmYXVsdDoKKwkgICAgcHJpbnRmKCI/VW5leHBl Y3RlZCBzd2l0Y2ggdmFsdWUgLSAlZFxuIixjbXJlc3VsdC5ucmVzdWx0KTsKKwkgICAgeCA9IC05 OworCSAgICBnb3RvIHhzZW5keDsKKwl9CisgICAgfQorICAgIGRlYnVnKEYxMDEsInhzZW5kIGNt cmVzdWx0IGZjb2RlIiwiIixjbXJlc3VsdC5mY29kZSk7CisKKyNpZmRlZiBDT01NRU5UCisgICAg LyogTGlzdCBzd2l0Y2ggcGFyc2luZyByZXN1bHRzIGluIGRlYnVnIGxvZyAqLworICAgIGZvciAo aSA9IDA7IGkgPD0gU05EX01BWDsgaSsrKSB7CisJY2ttYWttc2cobGluZSxMSU5CVUZTSVosInhz ZW5kIHN3aXRjaCAiLGNraXRvYShpKSxOVUxMLE5VTEwpOworCWRlYnVnKEYxMTEsbGluZSwgcHZb aV0uc3ZhbCwgcHZbaV0uaXZhbCk7CisgICAgfQorI2VuZGlmIC8qIENPTU1FTlQgKi8KKworLyog Tm93IHdlIGhhdmUgYWxsIHN3aXRjaGVzLCBwbHVzIG1heWJlIGEgZmlsZW5hbWUgb3IgY29tbWFu ZCwgb3Igbm90aGluZyAqLworCisjaWZkZWYgUElQRVNFTkQKKyAgICBpZiAocHJvdG9jb2wgIT0g UFJPVE9fSyAmJiBwdltTTkRfQ01EXS5pdmFsID4gMCkgeworCXByaW50ZigiP1NvcnJ5LCAlcyB3 b3JrcyBvbmx5IHdpdGggS2VybWl0IHByb3RvY29sXG4iLAorCSAgICAgICAoY3ggPT0gWFhDU0VO KSA/ICJDU0VORCIgOiAiU0VORCAvQ09NTUFORCIpOworCXggPSAtOTsKKwlnb3RvIHhzZW5keDsK KyAgICB9CisgICAgaWYgKHB2W1NORF9SRVNdLml2YWwgPiAwIHx8CS8qIC9SRUNPVkVSICovCisJ cHZbU05EX1NUQV0ud3ZhbCA+IDApIHsJLyogb3IgL1NUQVJUSU5HICovCisJaWYgKHNuZGZpbHRl ciB8fCBwdltTTkRfRkxUXS5pdmFsID4gMCkgeworCSAgICBwcmludGYoIj9Tb3JyeSwgbm8gL1JF Q09WRVIgb3IgL1NUQVJUIGlmIFNFTkQgRklMVEVSIHNlbGVjdGVkXG4iKTsKKwkgICAgeCA9IC05 OworCSAgICBnb3RvIHhzZW5keDsKKwl9CisgICAgfQorI2VuZGlmIC8qIFBJUEVTRU5EICovCisK KyAgICBjbWFyZyA9ICIiOworICAgIGNtYXJnMiA9ICIiOworICAgIGxpbmVbMF0gPSBOVUw7Cisg ICAgcyA9IGxpbmU7CisgICAgd2lsZCA9IDA7CisKKyAgICBzd2l0Y2ggKGNtcmVzdWx0LmZjb2Rl KSB7CQkvKiBIb3cgZGlkIHdlIGdldCBvdXQgb2Ygc3dpdGNoIGxvb3AgKi8KKyAgICAgIGNhc2Ug X0NNSUZJOgkJCS8qIElucHV0IGZpbGVuYW1lICovCisJY2tzdHJuY3B5KGxpbmUsY21yZXN1bHQu c3Jlc3VsdCxMSU5CVUZTSVopOyAvKiBOYW1lICovCisJaWYgKHB2W1NORF9BUlJdLml2YWwgPiAw KQorCSAgY21hcmcyID0gbGluZTsKKwllbHNlCisJICB3aWxkID0gY21yZXN1bHQubnJlc3VsdDsJ LyogV2lsZCBmbGFnICovCisJaWYgKCFyZWN1cnNpdmUgJiYgIXdpbGQpCisJICBub2xpbmtzID0g MDsKKwlicmVhazsKKyAgICAgIGNhc2UgX0NNRkxEOgkJCS8qIEZpZWxkICovCisJLyogT25seSBh bGxvd2VkIHdpdGggL0NPTU1BTkQgYW5kIC9BUlJBWSAqLworCWlmIChwdltTTkRfQ01EXS5pdmFs IDwgMSAmJiBwdltTTkRfQVJSXS5pdmFsIDwgMSkgeworI2lmZGVmIENLUk9PVAorCSAgICBpZiAo Y2tyb290ZXJyKQorCSAgICAgIHByaW50ZigiP09mZiBsaW1pdHM6ICVzXG4iLGNtcmVzdWx0LnNy ZXN1bHQpOworCSAgICBlbHNlCisjZW5kaWYgLyogQ0tST09UICovCisJICAgICAgcHJpbnRmKCI/ JXMgLSBcIiVzXCJcbiIsCisJCSAgIGlzd2lsZChjbXJlc3VsdC5zcmVzdWx0KSA/CisJCSAgICJO byBmaWxlcyBtYXRjaCIgOiAiRmlsZSBub3QgZm91bmQiLAorCQkgICBjbXJlc3VsdC5zcmVzdWx0 CisJCSAgICk7CisJICAgIHggPSAtOTsKKwkgICAgZ290byB4c2VuZHg7CisJfQorCWNrc3RybmNw eShsaW5lLGNtcmVzdWx0LnNyZXN1bHQsTElOQlVGU0laKTsKKwlpZiAocHZbU05EX0FSUl0uaXZh bCA+IDApCisJICBjbWFyZzIgPSBsaW5lOworCWJyZWFrOworICAgICAgY2FzZSBfQ01DRk06CQkJ LyogQ29uZmlybWF0aW9uICovCisJLyogcyA9ICIiOyAqLworCWNvbmZpcm1lZCA9IDE7CisJYnJl YWs7CisgICAgICBkZWZhdWx0OgorCXByaW50ZigiP1VuZXhwZWN0ZWQgZnVuY3Rpb24gY29kZTog JWRcbiIsY21yZXN1bHQuZmNvZGUpOworCXggPSAtOTsKKwlnb3RvIHhzZW5keDsKKyAgICB9Cisg ICAgZGVidWcoRjExMCwieHNlbmQgc3RyaW5nIixzLDApOworICAgIGRlYnVnKEYxMDEsInhzZW5k IGNvbmZpcm1lZCIsIiIsY29uZmlybWVkKTsKKworICAgIC8qIFNhdmUgYW5kIGNoYW5nZSBwcm90 b2NvbCBhbmQgdHJhbnNmZXIgbW9kZSAqLworICAgIC8qIEdsb2JhbCB2YWx1ZXMgYXJlIHJlc3Rv cmVkIGluIG1haW4gcGFyc2UgbG9vcCAqLworCisgICAgZ19wcm90byA9IHByb3RvY29sOwkJCS8q IFNhdmUgY3VycmVudCBnbG9iYWwgcHJvdG9jb2wgKi8KKyAgICBnX3VycHNpeiA9IHVycHNpejsK KyAgICBnX3Nwc2l6ZiA9IHNwc2l6ZjsKKyAgICBnX3Nwc2l6ID0gc3BzaXo7CisgICAgZ19zcHNp enIgPSBzcHNpenI7CisgICAgZ19zcG1heCA9IHNwbWF4OworICAgIGdfd3Nsb3RyID0gd3Nsb3Ry OworICAgIGdfcHJlZml4aW5nID0gcHJlZml4aW5nOworICAgIGdfZm5jYWN0ID0gZm5jYWN0Owor ICAgIGdfZm5jbnYgPSBmbmNudjsKKyAgICBnX2Zuc3BhdGggPSBmbnNwYXRoOworICAgIGdfZm5y cGF0aCA9IGZucnBhdGg7CisgICAgZ194ZnJ4bGEgPSB4ZnJ4bGE7CisKKyAgICBpZiAocHZbU05E X1BST10uaXZhbCA+IC0xKSB7CS8qIENoYW5nZSBhY2NvcmRpbmcgdG8gc3dpdGNoICovCisJcHJv dG9jb2wgPSBwdltTTkRfUFJPXS5pdmFsOworICAgICAgICBpZiAocHRhYltwcm90b2NvbF0ucnBr dGxlbiA+IC0xKSAvKiBjb3BpZWQgZnJvbSBpbml0cHJvdG8oKSAqLworICAgICAgICAgICAgdXJw c2l6ID0gcHRhYltwcm90b2NvbF0ucnBrdGxlbjsKKyAgICAgICAgaWYgKHB0YWJbcHJvdG9jb2xd LnNwa3RmbGcgPiAtMSkKKyAgICAgICAgICAgIHNwc2l6ZiA9IHB0YWJbcHJvdG9jb2xdLnNwa3Rm bGc7CisgICAgICAgIGlmIChwdGFiW3Byb3RvY29sXS5zcGt0bGVuID4gLTEpIHsKKyAgICAgICAg ICAgIHNwc2l6ID0gcHRhYltwcm90b2NvbF0uc3BrdGxlbjsKKyAgICAgICAgICAgIGlmIChzcHNp emYpCisJICAgICAgc3BzaXpyID0gc3BtYXggPSBzcHNpejsKKyAgICAgICAgfQorICAgICAgICBp ZiAocHRhYltwcm90b2NvbF0ud2luc2l6ZSA+IC0xKQorICAgICAgICAgICAgd3Nsb3RyID0gcHRh Yltwcm90b2NvbF0ud2luc2l6ZTsKKyAgICAgICAgaWYgKHB0YWJbcHJvdG9jb2xdLnByZWZpeCA+ IC0xKQorICAgICAgICAgICAgcHJlZml4aW5nID0gcHRhYltwcm90b2NvbF0ucHJlZml4OworICAg ICAgICBpZiAocHRhYltwcm90b2NvbF0uZm5jYSA+IC0xKQorICAgICAgICAgICAgZm5jYWN0ICA9 IHB0YWJbcHJvdG9jb2xdLmZuY2E7CisgICAgICAgIGlmIChwdGFiW3Byb3RvY29sXS5mbmNuID4g LTEpCisgICAgICAgICAgICBmbmNudiAgID0gcHRhYltwcm90b2NvbF0uZm5jbjsKKyAgICAgICAg aWYgKHB0YWJbcHJvdG9jb2xdLmZuc3AgPiAtMSkKKyAgICAgICAgICAgIGZuc3BhdGggPSBwdGFi W3Byb3RvY29sXS5mbnNwOworICAgICAgICBpZiAocHRhYltwcm90b2NvbF0uZm5ycCA+IC0xKQor ICAgICAgICAgICAgZm5ycGF0aCA9IHB0YWJbcHJvdG9jb2xdLmZucnA7CisgICAgfQorICAgIGRl YnVnKEYxMDEsInhzZW5kIHByb3RvY29sIiwiIixwcm90b2NvbCk7CisKKyAgICBpZiAocHZbU05E X05PQl0uaXZhbCA+IC0xKSB7CS8qIC9OT0JBQ0tVUCAoc2tpcCBiYWNrdXAgZmlsZSkgKi8KKwln X3NraXBidXAgPSBza2lwYnVwOworCXNraXBidXAgPSAxOworICAgIH0KKyAgICBpZiAocHZbU05E X1JFQ10uaXZhbCA+IDApCQkvKiAvUkVDVVJTSVZFICovCisgICAgICByZWN1cnNpdmUgPSAyOwor CisgICAgaWYgKHB2W1NORF9UWVBdLml2YWwgPiAtMSkgewkvKiAvVFlQRSAqLworCXhmaWxldHlw ZSA9IHB2W1NORF9UWVBdLml2YWw7CisJaWYgKHhmaWxldHlwZSA9PSAyKQorCSAgeGZpbGV0eXBl ID0gLTE7CisgICAgfQorICAgIGdfYmluYXJ5ID0gYmluYXJ5OwkJCS8qIFNhdmUgZ2xvYmFsIHRy YW5zZmVyIG1vZGUgKi8KKyNpZmRlZiBQQVRURVJOUworICAgIGdfcGF0dGVybnMgPSBwYXR0ZXJu czsJCS8qIFNhdmUgRklMRSBQQVRURVJOUyBzZXR0aW5nICovCisjZW5kaWYgLyogUEFUVEVSTlMg Ki8KKyAgICBpZiAocHZbU05EX0JJTl0uaXZhbCA+IDApIHsJCS8qIENoYW5nZSBhY2NvcmRpbmcg dG8gc3dpdGNoICovCisJLyogSWYgdGhleSBzYWlkIC9CSU5BUlkgdGhleSBtZWFuIC9CSU5BUlkg Ki8KKwlwYXR0ZXJucyA9IDA7CQkJLyogU28gbm8gcGF0dGVybi1iYXNlZCBzd2l0Y2hpbmcgKi8K KwlnX3hmZXJtb2RlID0geGZlcm1vZGU7CQkvKiBvciBhdXRvbWF0aWMgdHJhbnNmZXIgbW9kZSAq LworCXhmZXJtb2RlID0gWE1PREVfTTsKKwliaW5hcnkgPSBYWUZUX0I7CisJZGVidWcoRjEwMSwi ZG94c2VuZCAvQklOQVJZIHhmZXJtb2RlIiwiIix4ZmVybW9kZSk7CisgICAgfSBlbHNlIGlmIChw dltTTkRfVFhUXS5pdmFsID4gMCkgewkvKiBEaXR0byBmb3IgL1RFWFQgKi8KKwlwYXR0ZXJucyA9 IDA7CisJZ194ZmVybW9kZSA9IHhmZXJtb2RlOworCXhmZXJtb2RlID0gWE1PREVfTTsKKwliaW5h cnkgPSBYWUZUX1Q7CisJZGVidWcoRjEwMSwiZG94c2VuZCAvVEVYVCB4ZmVybW9kZSIsIiIseGZl cm1vZGUpOworICAgIH0gZWxzZSBpZiAocHZbU05EX0lNR10uaXZhbCA+IDApIHsKKyNpZmRlZiBW TVMKKwliaW5hcnkgPSBYWUZUX0k7CisjZWxzZQorCWJpbmFyeSA9IFhZRlRfQjsKKyNlbmRpZiAv KiBWTVMgKi8KKyAgICB9CisjaWZkZWYgQ0tfTEFCRUxFRAorICAgIGVsc2UgaWYgKHB2W1NORF9M QkxdLml2YWwgPiAwKSB7CisJYmluYXJ5ID0gWFlGVF9MOworICAgIH0KKyNlbmRpZiAvKiBDS19M QUJFTEVEICovCisgICAgZGVidWcoRjEwMSwieHNlbmQgYmluYXJ5IiwiIixiaW5hcnkpOworCisg ICAgaWYgKHB2W1NORF9YUEFdLml2YWwgPiAwKQkJLyogL1RSQU5TUEFSRU5UICovCisgICAgICB4 ZnJ4bGEgPSAwOwkJCS8qIERvbid0IHRyYW5zbGF0ZSBjaGFyYWN0ZXIgc2V0cyAqLworCisgICAg LyogQ2hlY2sgZm9yIGxlZ2FsIGNvbWJpbmF0aW9ucyBvZiBzd2l0Y2hlcywgZmlsZW5hbWVzLCBl dGMgKi8KKworI2lmZGVmIFBJUEVTRU5ECisgICAgaWYgKHB2W1NORF9DTURdLml2YWwgPiAwKSB7 CS8qIENPTU1BTkQgLSBzdHJpcCBhbnkgYnJhY2VzICovCisJZGVidWcoRjExMCwiU0VORCAvQ09N TUFORCBiZWZvcmUgc3RyaXBwaW5nIixzLDApOworCXMgPSBicnN0cmlwKHMpOworCWRlYnVnKEYx MTAsIlNFTkQgL0NPTU1BTkQgYWZ0ZXIgc3RyaXBwaW5nIixzLDApOworCWlmICghKnMpIHsKKwkg ICAgcHJpbnRmKCI/U29ycnksIGEgY29tbWFuZCB0byBzZW5kIGZyb20gaXMgcmVxdWlyZWRcbiIp OworCSAgICB4ID0gLTk7CisJICAgIGdvdG8geHNlbmR4OworCX0KKwljbWFyZyA9IHM7CisgICAg fQorI2VuZGlmIC8qIFBJUEVTRU5EICovCisKKy8qIFNldCB1cCAvTU9WRSBhbmQgL1JFTkFNRSAq LworCisgICAgaWYgKHB2W1NORF9ERUxdLml2YWwgPiAwICYmCisJKHB2W1NORF9NT1ZdLml2YWwg PiAwIHx8IHB2W1NORF9SRU5dLml2YWwgPiAwKSkgeworCXByaW50ZigiP1NvcnJ5LCAvREVMRVRF IGNvbmZsaWN0cyB3aXRoIC9NT1ZFIG9yIC9SRU5BTUVcbiIpOworCXggPSAtOTsKKwlnb3RvIHhz ZW5keDsKKyAgICB9CisjaWZkZWYgQ0tfVE1QRElSCisgICAgaWYgKHB2W1NORF9NT1ZdLml2YWwg PiAwKSB7CisJaW50IGxlbjsKKwljaGFyICogcCA9IHB2W1NORF9NT1ZdLnN2YWw7CisjaWZkZWYg Q0tfTE9HSU4KKwlpZiAoaXNndWVzdCkgeworCSAgICBwcmludGYoIj9Tb3JyeSwgL01PVkUtVE8g bm90IGF2YWlsYWJsZSB0byBndWVzdHNcbiIpOworCSAgICB4ID0gLTk7CisJICAgIGdvdG8geHNl bmR4OworCX0KKyNlbmRpZiAvKiBDS19MT0dJTiAqLworCWxlbiA9IHN0cmxlbihwKTsKKwlpZiAo IWlzZGlyKHApKSB7CQkvKiBDaGVjayBkaXJlY3RvcnkgKi8KKyNpZmRlZiBDS19NS0RJUgorCSAg ICBjaGFyICogcyA9IE5VTEw7CisJICAgIHMgPSAoY2hhciAqKW1hbGxvYyhsZW4gKyA0KTsKKwkg ICAgaWYgKHMpIHsKKwkJc3RyY3B5KHMscCk7CQkvKiBzYWZlICovCisjaWZkZWYgZGF0YWdlbmVy YWwKKwkJaWYgKHNbbGVuLTFdICE9ICc6JykgeyBzW2xlbisrXSA9ICc6Jzsgc1tsZW5dID0gTlVM OyB9CisjZWxzZQorCQlpZiAoc1tsZW4tMV0gIT0gJy8nKSB7IHNbbGVuKytdID0gJy8nOyBzW2xl bl0gPSBOVUw7IH0KKyNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLworCQlzW2xlbisrXSA9ICdYJzsK KwkJc1tsZW5dID0gTlVMOworCQl4ID0gem1rZGlyKHMpOworCQlmcmVlKHMpOworCQlpZiAoeCA8 IDApIHsKKwkJICAgIHByaW50ZigiP0Nhbid0IGNyZWF0ZSBcIiVzXCJcbiIscCk7CisJCSAgICB4 ID0gLTk7CisJCSAgICBnb3RvIHhzZW5keDsKKwkJfQorCSAgICB9CisjZWxzZQorCSAgICBwcmlu dGYoIj9EaXJlY3RvcnkgXCIlc1wiIG5vdCBmb3VuZFxuIixwKTsKKwkgICAgeCA9IC05OworCSAg ICBnb3RvIHhzZW5keDsKKyNlbmRpZiAvKiBDS19NS0RJUiAqLworCX0KKyAgICAgICAgemZucWZw KHAsTElOQlVGU0laLHRtcGJ1Zik7CisJbWFrZXN0cigmc25kX21vdmUsdG1wYnVmKTsKKyAgICB9 CisjZW5kaWYgLyogQ0tfVE1QRElSICovCisKKyAgICBpZiAocHZbU05EX1JFTl0uaXZhbCA+IDAp IHsJCS8qIC9SRU5BTUUgKi8KKwljaGFyICogcCA9IHB2W1NORF9SRU5dLnN2YWw7CisjaWZkZWYg Q0tfTE9HSU4KKwlpZiAoaXNndWVzdCkgeworCSAgICBwcmludGYoIj9Tb3JyeSwgL1JFTkFNRS1U TyBub3QgYXZhaWxhYmxlIHRvIGd1ZXN0c1xuIik7CisJICAgIHggPSAtOTsKKwkgICAgZ290byB4 c2VuZHg7CisJfQorI2VuZGlmIC8qIENLX0xPR0lOICovCisJaWYgKCFwKSBwID0gIiI7CisJaWYg KCEqcCkgeworCSAgICBwcmludGYoIj9OZXcgbmFtZSByZXF1aXJlZCBmb3IgL1JFTkFNRVxuIik7 CisJICAgIHggPSAtOTsKKwkgICAgZ290byB4c2VuZHg7CisJfQorCXAgPSBicnN0cmlwKHApOwor I2lmbmRlZiBOT1NQTAorICAgIC8qIElmIG5hbWUgZ2l2ZW4gaXMgd2lsZCwgcmVuYW1lIHN0cmlu ZyBtdXN0IGNvbnRhaW4gdmFyaWFibGVzICovCisJaWYgKHdpbGQpIHsKKwkgICAgY2hhciAqIHMg PSB0bXBidWY7CisJICAgIHggPSBUTVBCVUZTSVo7CisJICAgIHp6c3RyaW5nKHAsJnMsJngpOwor CSAgICBpZiAoIXN0cmNtcCh0bXBidWYscCkpIHsKKwkJcHJpbnRmKAorICAgICI/L1JFTkFNRSBm b3IgZmlsZSBncm91cCBtdXN0IGNvbnRhaW4gdmFyaWFibGVzIHN1Y2ggYXMgXFx2KGZpbGVuYW1l KVxuIgorCQkgICAgICAgKTsKKwkJeCA9IC05OworCQlnb3RvIHhzZW5keDsKKwkgICAgfQorCX0K KyNlbmRpZiAvKiBOT1NQTCAqLworCW1ha2VzdHIoJnNuZF9yZW5hbWUscCk7CisgICAgfQorCisv KiBIYW5kbGUgL1JFQ09WRVIgYW5kIC9TVEFSVCAqLworCisjaWZkZWYgQ0tfUkVTRU5ECisgICAg aWYgKHB2W1NORF9SRVNdLml2YWwgPiAwICYmIGJpbmFyeSAhPSBYWUZUX0IgJiYgIWZpbGVwZWVr CisjaWZkZWYgUEFUVEVSTlMKKwkmJiAhcGF0dGVybnMKKyNlbHNlCisjaWZkZWYgVk1TCisvKiBW TVMgc2V0cyB0ZXh0L2JpbmFyeSBhdXRvbWF0aWNhbGx5IGxhdGVyIHdoZW4gaXQgb3BlbnMgdGhl IGZpbGUgKi8KKwkmJiAwCisjZW5kaWYgLyogVk1TICovCisjZW5kaWYgLyogUEFUVEVSTlMgKi8K KwkpIHsKKwlwcmludGYoIj9Tb3JyeSwgL0JJTkFSWSByZXF1aXJlZFxuIik7CisJeCA9IC05Owor CWdvdG8geHNlbmR4OworICAgIH0KKyAgICBpZiAocHZbU05EX1NUQV0ud3ZhbCA+IDApIHsJCS8q IC9TVEFSVCAqLworCWlmICh3aWxkKSB7CisJICAgIHByaW50ZigiP1NvcnJ5LCB3aWxkY2FyZHMg bm90IHBlcm1pdHRlZCB3aXRoIC9TVEFSVFxuIik7CisJICAgIHggPSAtOTsKKwkgICAgZ290byB4 c2VuZHg7CisJfQorCWlmIChzaXplb2YoaW50KSA8IDQpIHsKKwkgICAgcHJpbnRmKCI/U29ycnks IHRoaXMgY29tbWFuZCBuZWVkcyBhdCBsZWFzdCAzMi1iaXQgaW50ZWdlcnNcbiIpOworCSAgICB4 ID0gLTk7CisJICAgIGdvdG8geHNlbmR4OworCX0KKyNpZmRlZiBDS19YWVoKKwlpZiAocHJvdG9j b2wgIT0gUFJPVE9fSykgeworCSAgICBwcmludGYoIj9Tb3JyeSwgU0VORCAvU1RBUlQgd29ya3Mg b25seSB3aXRoIEtlcm1pdCBwcm90b2NvbFxuIik7CisJICAgIHggPSAtOTsKKwkgICAgZ290byB4 c2VuZHg7CisJfQorI2VuZGlmIC8qIENLX1hZWiAqLworICAgIH0KKyNpZmRlZiBDS19YWVoKKyAg ICBpZiAocHZbU05EX1JFU10uaXZhbCA+IDApIHsKKwlpZiAocHJvdG9jb2wgIT0gUFJPVE9fSyAm JiBwcm90b2NvbCAhPSBQUk9UT19aKSB7CisJICAgIHByaW50ZigKKyAgICAiU29ycnksIC9SRUNP VkVSIGlzIHBvc3NpYmxlIG9ubHkgd2l0aCBLZXJtaXQgb3IgWk1PREVNIHByb3RvY29sXG4iCisJ CSAgICk7CisJICAgIHggPSAtOTsKKwkgICAgZ290byB4c2VuZHg7CisJfQorICAgIH0KKyNlbmRp ZiAvKiBDS19YWVogKi8KKyNlbmRpZiAvKiBDS19SRVNFTkQgKi8KKworICAgIGlmIChwcm90b2Nv bCA9PSBQUk9UT19LKSB7CisJaWYgKChwdltTTkRfTUFJXS5pdmFsID4gMCB8fAkvKiBNQUlMICov CisJICAgICBwdltTTkRfUFJJXS5pdmFsID4gMCB8fAkvKiBQUklOVCAqLworCSAgICAgcHZbU05E X1JFU10uaXZhbCA+IDAJLyogUkVTRU5EICovCisJICAgICApICYmCisJICAgICghYXRkaXNvIHx8 ICFhdGNhcHIpKSB7CS8qIERpc3Bvc2l0aW9uIGF0dHJpYnV0ZSBvZmY/ICovCisJICAgIHByaW50 ZigiP1NvcnJ5LCBBVFRSSUJVVEUgRElTUE9TSVRJT04gbXVzdCBiZSBPTlxuIik7CisJICAgIHgg PSAtOTsKKwkgICAgZ290byB4c2VuZHg7CisJfQorICAgIH0KKworI2lmZGVmIENLX1hZWgorICAg IGlmICh3aWxkICYmIChwcm90b2NvbCA9PSBQUk9UT19YIHx8IHByb3RvY29sID09IFBST1RPX1hD KSkgeworCXByaW50ZigKKyJTb3JyeSwgeW91IGNhbiBvbmx5IHNlbmQgb25lIGZpbGUgYXQgYSB0 aW1lIHdpdGggWE1PREVNIHByb3RvY29sXG4iCisJICAgICAgICk7CisJeCA9IC05OworCWdvdG8g eHNlbmR4OworICAgIH0KKyNlbmRpZiAvKiBDS19YWVogKi8KKworICAgIGlmICghY29uZmlybWVk KSB7CQkJLyogQ1Igbm90IHR5cGVkIHlldCwgZ2V0IG1vcmUgZmllbGRzICovCisJY2hhciAqbTsK KwlpZiAobWxpc3QpIHsJCQkvKiBNU0VORCBvciBNTU9WRSAqLworCSAgICBuZmlscyA9IDA7CQkJ LyogV2UgYWxyZWFkeSBoYXZlIHRoZSBmaXJzdCBvbmUgKi8KKyNpZm5kZWYgTk9NU0VORAorCSAg ICBtc2ZpbGVzW25maWxzKytdID0gbGluZTsJLyogU3RvcmUgcG9pbnRlciAqLworCSAgICBscCA9 IGxpbmUgKyAoaW50KXN0cmxlbihsaW5lKSArIDE7IC8qIFBvaW50IHBhc3QgaXQgKi8KKwkgICAg ZGVidWcoRjExMSwieHNlbmQgbXNlbmQiLG1zZmlsZXNbbmZpbHMtMV0sbmZpbHMtMSk7CisJICAg IHdoaWxlICgxKSB7CQkJLyogR2V0IG1vcmUgZmlsZW5hbWVzICovCisJCWNoYXIgKnA7CisJCWlm ICgoeCA9IGNtaWZpKCJOYW1lcyBvZiBmaWxlcyB0byBzZW5kLCBzZXBhcmF0ZWQgYnkgc3BhY2Vz IiwKKwkJCSAgICAgICAiIiwgJnMsJnkseHhzdHJpbmcpKSA8IDApIHsKKwkJICAgIGlmICh4ICE9 IC0zKQorCQkgICAgICBnb3RvIHhzZW5keDsKKwkJICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkK KwkJICAgICAgZ290byB4c2VuZHg7CisJCSAgICBicmVhazsKKwkJfQorCQltc2ZpbGVzW25maWxz KytdID0gbHA7CS8qIEdvdCBvbmUsIGNvdW50IGl0LCBwb2ludCB0byBpdCwgKi8KKwkJcCA9IGxw OwkJCS8qIHJlbWVtYmVyIHBvaW50ZXIsICovCisJCXdoaWxlICgoKmxwKysgPSAqcysrKSkJLyog YW5kIGNvcHkgaXQgaW50byBidWZmZXIgKi8KKwkJICBpZiAobHAgPiAobGluZSArIExJTkJVRlNJ WikpIHsgLyogQXZvaWQgbWVtb3J5IGxlYWsgKi8KKwkJICAgICAgcHJpbnRmKCI/TVNFTkQgbGlz dCB0b28gbG9uZ1xuIik7CisJCSAgICAgIGxpbmVbMF0gPSBOVUw7CisJCSAgICAgIHggPSAtOTsK KwkJICAgICAgZ290byB4c2VuZHg7CisJCSAgfQorCQlkZWJ1ZyhGMTExLCJ4c2VuZCBtc2VuZCIs bXNmaWxlc1tuZmlscy0xXSxuZmlscy0xKTsKKwkJaWYgKG5maWxzID09IDEpIGZzcGVjWzBdID0g TlVMOyAvKiBUYWtlIGNhcmUgb2YgXHYoZmlsZXNwZWMpICovCisjaWZkZWYgWkZOUUZQCisJCXpm bnFmcChwLFRNUEJVRlNJWix0bXBidWYpOworCQlwID0gdG1wYnVmOworI2VuZGlmIC8qIFpGTlFG UCAqLworCQlpZiAoKChpbnQpc3RybGVuKGZzcGVjKSArIChpbnQpc3RybGVuKHApICsgMSkgPCBm c3BlY2xlbikgeworCQkgICAgc3RyY2F0KGZzcGVjLHApOwkvKiBzYWZlICovCisJCSAgICBzdHJj YXQoZnNwZWMsIiAiKTsJLyogc2FmZSAqLworCQl9IGVsc2UKKyNpZmRlZiBDT01NRU5UCisJCSAg cHJpbnRmKCJXQVJOSU5HIC0gXFx2KGZpbGVzcGVjKSBidWZmZXIgb3ZlcmZsb3dcbiIpOworI2Vs c2UKKwkJICBkZWJ1ZyhGMTAxLCJkb3hzZW5kIGZpbGVzcGVjIGJ1ZmZlciBvdmVyZmxvdyIsIiIs MCk7CisjZW5kaWYgLyogQ09NTUVOVCAqLworCSAgICB9CisjZW5kaWYgLyogTk9NU0VORCAqLwor CX0gZWxzZSB7CQkJLyogUmVndWxhciBTRU5EICovCisJICAgIGNoYXIgKnA7IGludCB5OworCSAg ICBuZmlscyA9IC0xOworCSAgICBpZiAocHZbU05EX01BSV0uaXZhbCA+IDApCisJICAgICAgbSA9 IChwdltTTkRfTUFJXS5zdmFsKSA/CisJCSJlLW1haWwgYWRkcmVzcyAob3B0aW9uYWwpIiA6CisJ CSAgImUtbWFpbCBhZGRyZXNzIChyZXF1aXJlZCkiOworCSAgICBlbHNlIGlmIChwdltTTkRfUFJJ XS5pdmFsID4gMCkKKwkgICAgICBtID0gInByaW50ZXIgb3B0aW9ucyAob3B0aW9uYWwpIjsKKwkg ICAgZWxzZSBpZiAod2lsZCkKKwkgICAgICBtID0KKyJcbk9wdGlvbmFsIGFzLW5hbWUgdGVtcGxh dGUgY29udGFpbmluZyByZXBsYWNlbWVudCB2YXJpYWJsZXMgXAorbGlrZSBcXHYoZmlsZW5hbWUp IjsKKwkgICAgZWxzZQorCSAgICAgIG0gPSAiT3B0aW9uYWwgbmFtZSB0byBzZW5kIGl0IHdpdGgi OworCSAgICBpZiAoKHggPSBjbXR4dChtLCIiLCZwLE5VTEwpKSA8IDApCisJICAgICAgZ290byB4 c2VuZHg7CisJICAgIGlmICghcCkgcCA9ICIiOworCSAgICBpZiAoKnApIHsJCQkvKiBJZiBzb21l IHRleHQgd2FzIGdpdmVuLi4uICovCisJCXAgPSBicnN0cmlwKHApOwkJLyogUmVwbGFjZSAvQVMt TkFNRTogdmFsdWUgaWYgYW55ICovCisJCWlmICgoeSA9IHN0cmxlbihwKSkgPiAwKSB7CisgICAg ICAgICAgICAgICAgICAgIGlmIChwdltTTkRfTUFJXS5pdmFsID4gMCkgeworICAgICAgICAgICAg ICAgICAgICAgICAgbWFrZXN0cigmcHZbU05EX01BSV0uc3ZhbCwgcCk7CisgICAgICAgICAgICAg ICAgICAgIH0gZWxzZSB7CisJCQlpZiAocHZbU05EX0FTTl0uc3ZhbCkgZnJlZShwdltTTkRfQVNO XS5zdmFsKTsKKwkJCXB2W1NORF9BU05dLnN2YWwgPSBtYWxsb2MoeSsxKTsKKwkJCWlmIChwdltT TkRfQVNOXS5zdmFsKSB7CisJCQkgICAgc3RyY3B5KHB2W1NORF9BU05dLnN2YWwscCk7CS8qIHNh ZmUgKi8KKwkJCSAgICBwdltTTkRfQVNOXS5pdmFsID0gMTsKKwkJCX0KKwkJICAgIH0KKwkJfQor CSAgICB9CisJfQorICAgIH0KKyAgICAvKiBTZXQgY21hcmcyIGZyb20gYXMtbmFtZSwgaG93ZXZl ciB3ZSBnb3QgaXQuICovCisKKyAgICBpZiAocHZbU05EX0FTTl0uaXZhbCA+IDAgJiYgcHZbU05E X0FTTl0uc3ZhbCAmJiAhKmNtYXJnMikgeworCWludCB4OworCXggPSBzdHJsZW4obGluZSk7CisJ Y2tzdHJuY3B5KGxpbmUreCsyLHB2W1NORF9BU05dLnN2YWwsTElOQlVGU0laLXgtMSk7CisJY21h cmcyID0gbGluZSt4KzI7CisJZGVidWcoRjExMCwiZG94c2VuZCBjbWFyZzIiLGNtYXJnMiwwKTsK KyAgICB9CisKKyNpZm5kZWYgTk9GUklMTFMKKyAgICBpZiAoKHB2W1NORF9NQUldLml2YWwgPiAw KSAmJiAocHZbU05EX1BSSV0uaXZhbCA+IDApKSB7CisJcHJpbnRmKCJTb3JyeSwgL01BSUwgYW5k IC9QUklOVCBhcmUgY29uZmxpY3Rpbmcgb3B0aW9uc1xuIik7CisJeCA9IC05OworCWdvdG8geHNl bmR4OworICAgIH0KKyAgICBuID0gMDsJCQkJLyogL01BSUwgb3IgL1BSSU5UPyAqLworICAgIGlm IChwdltTTkRfTUFJXS5pdmFsID4gMCkKKyAgICAgIG4gPSBTTkRfTUFJOworICAgIGVsc2UgaWYg KHB2W1NORF9QUkldLml2YWwgPiAwKQorICAgICAgbiA9IFNORF9QUkk7CisgICAgaWYgKG4pIHsJ CQkJLyogWWVzLi4uICovCisjaWZkZWYgREVCVUcKKwljaGFyICogcDsKKwlpZiAobiA9PSBTTkRf TUFJKQorCSAgcCA9ICIvTUFJTCI7CisJZWxzZQorCSAgcCA9ICIvUFJJTlQiOworCWRlYnVnKEYx MTEsInhzZW5kIixwLG4pOworI2VuZGlmIC8qIERFQlVHICovCisjaWZkZWYgQ0tfWFlaCisJaWYg KHByb3RvY29sICE9IFBST1RPX0spIHsKKwkgICAgcHJpbnRmKCJTb3JyeSwgJXMgYXZhaWxhYmxl IG9ubHkgd2l0aCBLZXJtaXQgcHJvdG9jb2xcbiIsCisJCSAgIChuID09IFNORF9NQUkpID8gIi9N QUlMIiA6ICIvUFJJTlQiCisJCSAgICk7CisJICAgIHggPSAtOTsKKwkgICAgZ290byB4c2VuZHg7 CisJfQorI2VuZGlmIC8qIENLX1hZWiAqLworCWRlYnVnKEYxMDEsInhzZW5kIHByaW50L21haWwg d2lsZCIsIiIsd2lsZCk7CisJKm9wdGJ1ZiA9IE5VTDsJCQkvKiBXaXBlIG91dCBhbnkgb2xkIG9w dGlvbnMgKi8KKwlzID0gcHZbbl0uc3ZhbDsJCQkvKiBtYWlsIGFkZHJlc3Mgb3IgcHJpbnQgc3dp dGNoIHZhbCAqLworCWlmICghcykgcyA9ICIiOworCWRlYnVnKEYxMTAsImRveHNlbmQgbWFpbCBh ZGRyZXNzIG9yIHByaW50ZXIgb3B0aW9ucyIscywwKTsKKwlpZiAobiA9PSBTTkRfTUFJICYmICEq cykgeworCSAgICBwcmludGYoIj9FLW1haWwgYWRkcmVzcyByZXF1aXJlZFxuIik7CisJICAgIHgg PSAtOTsKKwkgICAgZ290byB4c2VuZHg7CisJfSBlbHNlIGlmICgoaW50KXN0cmxlbihzKSA+IDk0 KSB7IC8qIEVuc3VyZSBsZWdhbCBzaXplICovCisJICAgIHByaW50ZigiPyVzIHRvbyBsb25nXG4i LAorCQkgICAobiA9PSBTTkRfTUFJKSA/CisJCSAgICJFLW1haWwgYWRkcmVzcyIgOgorCQkgICAi UHJpbnQgb3B0aW9uIHN0cmluZyIKKwkJICAgKTsKKwkgICAgeCA9IC05OworCSAgICBnb3RvIHhz ZW5keDsKKwl9CisJY2tzdHJuY3B5KG9wdGJ1ZixzLE9QVEJVRkxFTik7CS8qIE9LLCBjb3B5IHRv IG9wdGlvbiBidWZmZXIgKi8KKwljbWFyZyA9IGxpbmU7CQkJLyogRmlsZSB0byBzZW5kICovCisJ aWYgKG4gPT0gU05EX01BSSkgeworCSAgICBkZWJ1ZyhGMTEwLCJ4c2VuZCBtYWlsaW5nIixjbWFy ZywwKTsKKwkgICAgZGVidWcoRjExMCwieHNlbmQgYWRkcmVzczoiLG9wdGJ1ZiwwKTsKKwkgICAg cm1haWxmID0gMTsKKwl9IGVsc2UgeworCSAgICBkZWJ1ZyhGMTEwLCJ4c2VuZCBwcmludGluZyIs Y21hcmcsMCk7CisJICAgIGRlYnVnKEYxMTAsInhzZW5kIG9wdGlvbnMiLG9wdGJ1ZiwwKTsKKwkg ICAgcnByaW50ZiA9IDE7CisJfQorICAgIH0KKyNlbmRpZiAvKiBOT0ZSSUxMUyAqLworCisjaWZk ZWYgQ0FMSUJSQVRFCisgICAgaWYgKHB2W1NORF9DQUxdLnd2YWwgPiAwKSB7CQkvKiBIYW5kbGUg L0NBTElCUkFURSAqLworCWlmIChjb25maXJtZWQpIHsKKwkgICAgY2FsaWJyYXRlID0gcHZbU05E X0NBTF0ud3ZhbCAqIChDS19PRkZfVCkxMDI0OworCSAgICBzbmRzcmMgPSAtOTsKKwkgICAgbmZp bHMgPSAxOworCSAgICB3aWxkID0gMDsKKyNpZm5kZWYgTk9NU0VORAorCSAgICBhZGRsaXN0ID0g MDsKKyNlbmRpZiAvKiBOT01TRU5EICovCisJICAgIGNrc3RybmNweShsaW5lLCJDQUxJQlJBVElP TiIsTElOQlVGU0laKTsKKwkgICAgcyA9IGNtYXJnID0gbGluZTsKKwkgICAgaWYgKCFjbWFyZzIp IGNtYXJnMiA9ICIiOworCSAgICBkZWJ1ZyhGMTEwLCJkb3hzZW5kIGNtYXJnMiBjYWxpYnJhdGUi LGNtYXJnMiwwKTsKKwl9IGVsc2UgaWYgKGxpbmVbMF0pIHsKKwkgICAgY2FsaWJyYXRlID0gMDsK KwkgICAgcHZbU05EX0NBTF0uaXZhbCA9IDA7CisJICAgIHB2W1NORF9DQUxdLnd2YWwgPSAwOwor CX0KKyAgICB9CisjZW5kaWYgLyogQ0FMSUJSQVRFICovCisKKyAgICBpZiAocHZbU05EX0ZJTF0u aXZhbCA+IDApIHsKKwlpZiAoY29uZmlybWVkICYmICFjYWxpYnJhdGUpIHsKKwkgICAgaWYgKHpv cGVuaShaTUZJTEUscHZbU05EX0ZJTF0uc3ZhbCkgPCAxKSB7CisJCWRlYnVnKEYxMTAsInhzZW5k IGNhbid0IG9wZW4iLHB2W1NORF9GSUxdLnN2YWwsMCk7CisJCXByaW50ZigiP0ZhaWx1cmUgdG8g b3BlbiAlc1xuIixmaWxlZmlsZSk7CisJCXggPSAtOTsKKwkJZ290byB4c2VuZHg7CisJICAgIH0K KwkgICAgbWFrZXN0cigmZmlsZWZpbGUscHZbU05EX0ZJTF0uc3ZhbCk7IC8qIE9wZW4sIHJlbWVt YmVyIG5hbWUgKi8KKwkgICAgZGVidWcoRjExMCwieHNlbmQgb3BlbmVkIixmaWxlZmlsZSwwKTsK KwkgICAgd2lsZCA9IDE7CisJfQorICAgIH0KKworICAgIC8qIFNFTkQgYWxvbmUuLi4gKi8KKwor I2lmbmRlZiBOT1NQTAorICAgIGlmIChjb25maXJtZWQgJiYgcHZbU05EX0FSUl0uaXZhbCA+IDAp IHsKKwlpZiAoISpjbWFyZzIpIHsKKwkgICAgc25keG5hbVs3XSA9IChjaGFyKSgoYXJyYXl4ID09 IDEpID8gNjQgOiBhcnJheXggKyBBUlJBWUJBU0UpOworCSAgICBjbWFyZzIgPSBzbmR4bmFtOwor CX0KKwljbWFyZyA9ICIiOworCWdvdG8gc2VuZGVuZDsKKyAgICB9CisjZW5kaWYgLyogTk9TUEwg Ki8KKworICAgIGlmIChjb25maXJtZWQgJiYgIWxpbmVbMF0gJiYgIWZpbGVmaWxlICYmICFjYWxp YnJhdGUpIHsKKyNpZm5kZWYgTk9NU0VORAorCWlmIChmaWxlaGVhZCkgewkJCS8qIE9LIGlmIHdl IGhhdmUgYSBTRU5ELUxJU1QgKi8KKwkgICAgbmZpbHMgPSBmaWxlc2lubGlzdDsKKwkgICAgc25k c3JjID0gbmZpbHM7CQkvKiBMaWtlIE1TRU5EICovCisJICAgIGFkZGxpc3QgPSAxOwkJLyogQnV0 IHVzaW5nIGEgZGlmZmVyZW50IGxpc3QuLi4gKi8KKwkgICAgZmlsZW5leHQgPSBmaWxlaGVhZDsK KwkgICAgZ290byBzZW5kZW5kOworCX0KKyNlbmRpZiAvKiBOT01TRU5EICovCisJcHJpbnRmKCI/ RmlsZW5hbWUgcmVxdWlyZWQgYnV0IG5vdCBnaXZlblxuIik7CisJeCA9IC05OworCWdvdG8geHNl bmR4OworICAgIH0KKworICAgIC8qIE5vdCBzZW5kLWxpc3Qgb3IgYXJyYXkgKi8KKworI2lmbmRl ZiBOT01TRU5ECisgICAgYWRkbGlzdCA9IDA7CQkJLyogRG9uJ3QgdXNlIFNFTkQtTElTVC4gKi8K KyAgICBmaWxlbmV4dCA9IE5VTEw7CisjZW5kaWYgLyogTk9NU0VORCAqLworCisgICAgaWYgKG1s aXN0KSB7CQkJLyogTVNFTkQgb3IgTU1PVkUgKi8KKyNpZm5kZWYgTk9NU0VORAorCWNtbGlzdCA9 IG1zZmlsZXM7CQkvKiBMaXN0IG9mIGZpbGVzIHRvIHNlbmQgKi8KKwlzbmRzcmMgPSBuZmlsczsK KwljbWFyZzIgPSAiIjsKKwlzZW5kc3RhcnQgPSAoQ0tfT0ZGX1QpMDsKKyNlbmRpZiAvKiBOT01T RU5EICovCisjaWZkZWYgUElQRVNFTkQKKwlwaXBlc2VuZCA9IDA7CisjZW5kaWYgLyogUElQRVNF TkQgKi8KKyAgICB9IGVsc2UgaWYgKGZpbGVmaWxlKSB7CQkvKiBGaWxlIGNvbnRhaW5zIGxpc3Qg b2YgZmlsZW5hbWVzICovCisJcyA9ICIiOworCWNtYXJnID0gIiI7CisJY21hcmcyID0gIiI7CisJ bGluZVswXSA9IE5VTDsKKwluZmlscyA9IDE7CisJc25kc3JjID0gMTsKKworICAgIH0gZWxzZSBp ZiAoIWNhbGlicmF0ZSAmJiBwdltTTkRfQVJSXS5pdmFsIDwgMSAmJiBwdltTTkRfQ01EXS5pdmFs IDwgMSkgeworCisJbmZpbHMgPSBzbmRzcmMgPSAtMTsJLyogTm90IE1TRU5ELCBNTU9WRSwgL0xJ U1QsIG9yIC9BUlJBWSAqLworCWlmICgJCQkJLyogb3IgL0NPTU1BTkQgKi8KKworI2lmbmRlZiBO T0ZSSUxMUworCSAgICAhcm1haWxmICYmICFycHJpbnRmCQkvKiBOb3QgTUFJTCBvciBQUklOVCAq LworI2Vsc2UKKwkgICAgMQorI2VuZGlmIC8qIE5PRlJJTExTICovCisJICAgICkgeworCSAgICBD S19PRkZfVCB5ID0gKENLX09GRl9UKTE7CisJICAgIGlmICghd2lsZCkKKwkgICAgICB5ID0gemNo a2kocyk7CisJICAgIGlmICh5IDwgKENLX09GRl9UKTApIHsKKwkJcHJpbnRmKCI/UmVhZCBhY2Nl c3MgZGVuaWVkIC0gXCIlc1wiXG4iLCBzKTsKKwkJeCA9IC05OworCQlnb3RvIHhzZW5keDsKKwkg ICAgfQorCSAgICBpZiAocyAhPSBsaW5lKQkJLyogV2UgbWlnaHQgYWxyZWFkeSBoYXZlIGRvbmUg dGhpcy4gKi8KKwkgICAgICBja3N0cm5jcHkobGluZSxzLExJTkJVRlNJWik7IC8qIENvcHkgb2Yg c3RyaW5nIGp1c3QgcGFyc2VkLiAqLworCSAgICBlbHNlCisJICAgICAgZGVidWcoRjExMCwiZG94 c2VuZCBsaW5lPXMiLGxpbmUsMCk7CisJICAgIGNtYXJnID0gbGluZTsJCS8qIEZpbGUgdG8gc2Vu ZCAqLworCX0KKwl6Zm5xZnAoY21hcmcsZnNwZWNsZW4sZnNwZWMpOworICAgIH0KKyAgICBpZiAo IW1saXN0KSB7CQkJLyogRm9yIGFsbCBidXQgTVNFTkQuLi4gKi8KKyNpZmRlZiBQSVBFU0VORAor CWlmIChwdltTTkRfQ01EXS5pdmFsID4gMCkJLyogL0NPTU1BTkQgc2V0cyBwaXBlc2VuZCBmbGFn ICovCisJICBwaXBlc2VuZCA9IDE7CisJZGVidWcoRjEwMSwieHNlbmQgL0NPTU1BTkQgcGlwZXNl bmQiLCIiLHBpcGVzZW5kKTsKKwlpZiAocGlwZXNlbmQgJiYgZmlsZWZpbGUpIHsKKwkgICAgcHJp bnRmKCI/SW52YWxpZCBzd2l0Y2ggY29tYmluYXRpb25cbiIpOworCSAgICB4ID0gLTk7CisJICAg IGdvdG8geHNlbmR4OworCX0KKyNlbmRpZiAvKiBQSVBFU0VORCAqLworCisjaWZuZGVmIE5PU1BM CisgICAgLyogSWYgYXMtbmFtZSBnaXZlbiBhbmQgZmlsZXNwZWMgaXMgd2lsZCwgYXMtbmFtZSBt dXN0IGNvbnRhaW4gdmFyaWFibGVzICovCisJZGVidWcoRjExMSwiZG94c2VuZCBjbWFyZzIgd2ls ZCIsY21hcmcyLHdpbGQpOworCWlmICh3aWxkICYmICpjbWFyZzIpIHsKKwkgICAgY2hhciAqIHMg PSB0bXBidWY7CisJICAgIHggPSBUTVBCVUZTSVo7CisJICAgIHp6c3RyaW5nKGNtYXJnMiwmcywm eCk7CisJICAgIGlmICghc3RyY21wKHRtcGJ1ZixjbWFyZzIpKSB7CisJCXByaW50ZigKKyAgICAi P0FzLW5hbWUgZm9yIGZpbGUgZ3JvdXAgbXVzdCBjb250YWluIHZhcmlhYmxlcyBzdWNoIGFzIFxc dihmaWxlbmFtZSlcbiIKKwkJICAgICAgICk7CisJCXggPSAtOTsKKwkJZ290byB4c2VuZHg7CisJ ICAgIH0KKwl9CisjZW5kaWYgLyogTk9TUEwgKi8KKworICAgIC8qIFN0cmlwIGJyYWNlcyBmcm9t IGFzLW5hbWUgKi8KKwlkZWJ1ZyhGMTEwLCJ4c2VuZCBjbWFyZzIgYmVmb3JlIHN0cmlwcGluZyIs Y21hcmcyLDApOworCWNtYXJnMiA9IGJyc3RyaXAoY21hcmcyKTsKKwlkZWJ1ZyhGMTEwLCJ4c2Vu ZCBmaWxlbmFtZSIsY21hcmcsMCk7CisJZGVidWcoRjExMCwieHNlbmQgYXMtbmFtZSIsY21hcmcy LDApOworCisgICAgLyogQ29weSBhcy1uYW1lIHRvIGEgc2FmZSBwbGFjZSAqLworCisJaWYgKGFz bmJ1ZikgeworCSAgICBmcmVlKGFzbmJ1Zik7CisJICAgIGFzbmJ1ZiA9IE5VTEw7CisJfQorCWlm ICgoeSA9IHN0cmxlbihjbWFyZzIpKSA+IDApIHsKKwkgICAgYXNuYnVmID0gKGNoYXIgKikgbWFs bG9jKHkgKyAxKTsKKwkgICAgaWYgKGFzbmJ1ZikgeworCQlzdHJjcHkoYXNuYnVmLGNtYXJnMik7 CS8qIHNhZmUgKi8KKwkJY21hcmcyID0gYXNuYnVmOworCSAgICB9IGVsc2UgY21hcmcyID0gIiI7 CisJfQorCisjaWZkZWYgQ0tfUkVTRU5ECisJZGVidWcoRjExMSwieHNlbmQgcHZbU05EX1NUQV0u aXZhbCIsIiIscHZbU05EX1NUQV0uaXZhbCk7CisJaWYgKHB2W1NORF9TVEFdLnd2YWwgPiAoQ0tf T0ZGX1QpLTEpIHsgLyogL1NUQVJUIHBvc2l0aW9uICovCisJICAgIGlmICh3aWxkKSB7CisJCXBy aW50ZigiPy9TVEFSVElORy1BVCBtYXkgbm90IGJlIHVzZWQgd2l0aCBtdWx0aXBsZSBmaWxlcy5c biIpOworCQl4ID0gLTk7CisJCWdvdG8geHNlbmR4OworCSAgICB9IGVsc2UKKwkgICAgICBzZW5k c3RhcnQgPSBwdltTTkRfU1RBXS53dmFsOworCX0gZWxzZQorCSAgc2VuZHN0YXJ0ID0gKENLX09G Rl9UKTA7CisJZGVidWcoRjEwMSwieHNlbmQgL1NUQVJUSU5HIiwiIixzZW5kc3RhcnQpOworI2Vu ZGlmIC8qIENLX1JFU0VORCAqLworICAgIH0KKworc2VuZGVuZDoJCQkJLyogQ29tbW9uIHN1Y2Nl c3NmdWwgZXhpdCAqLworICAgIG1vdmluZyA9IDA7CisgICAgaWYgKHB2W1NORF9TSEhdLml2YWwg PiAwKSB7CQkvKiBTRU5EIC9RVUlFVC4uLiAqLworCWdfZGlzcGxhID0gZmRpc3BsYTsKKwlmZGlz cGxhID0gMDsKKwlkZWJ1ZyhGMTAxLCJ4c2VuZCBkaXNwbGF5IiwiIixmZGlzcGxhKTsKKyAgICB9 CisKKyNpZm5kZWYgTk9TUEwJCQkJLyogU0VORCAvQVJSQVkuLi4gKi8KKyAgICBpZiAocHZbU05E X0FSUl0uaXZhbCA+IDApIHsKKwlpZiAoIWFwKSB7IHggPSAtMjsgZ290byB4c2VuZHg7IH0gLyog KHNob3VsZG4ndCBoYXBwZW4pICovCisJaWYgKHJhbmdlWzBdID09IC0xKQkJLyogSWYgbG93IGVu ZCBvZiByYW5nZSBub3Qgc3BlY2lmaWVkICovCisJICByYW5nZVswXSA9IDE7CQkJLyogZGVmYXVs dCB0byAxICovCisJaWYgKHJhbmdlWzFdID09IC0xKQkJLyogSWYgaGlnaCBub3Qgc3BlY2lmaWVk ICovCisJICByYW5nZVsxXSA9IGFfZGltW2FycmF5eF07CS8qIGRlZmF1bHQgdG8gc2l6ZSBvZiBh cnJheSAqLworCWlmICgocmFuZ2VbMF0gPCAwKSB8fAkJLyogQ2hlY2sgcmFuZ2UgKi8KKwkgICAg KHJhbmdlWzBdID4gYV9kaW1bYXJyYXl4XSkgfHwKKwkgICAgKHJhbmdlWzFdIDwgcmFuZ2VbMF0p IHx8CisJICAgIChyYW5nZVsxXSA+IGFfZGltW2FycmF5eF0pKSB7CisJICAgIHByaW50ZigiP0Jh ZCBhcnJheSByYW5nZSAtIFslZDolZF1cbiIscmFuZ2VbMF0scmFuZ2VbMV0pOworCSAgICB4ID0g LTk7CisJICAgIGdvdG8geHNlbmR4OworCX0KKwlzbmRhcnJheSA9IGFwOwkJCS8qIEFycmF5IHBv aW50ZXIgKi8KKwlzbmR4aW4gPSBhcnJheXg7CQkvKiBBcnJheSBpbmRleCAqLworCXNuZHhsbyA9 IHJhbmdlWzBdOwkJLyogQXJyYXkgcmFuZ2UgKi8KKwlzbmR4aGkgPSByYW5nZVsxXTsKKwlzbmR4 bmFtWzddID0gKGNoYXIpKChzbmR4aW4gPT0gMSkgPyA2NCA6IHNuZHhpbiArIEFSUkFZQkFTRSk7 CisKKyNpZmRlZiBDT01NRU5UCisJcHJpbnRmKCJTRU5ESU5HIEZST00gQVJSQVk6ICYlY1tdLi4u XG4iLCAvKiBkZWJ1Z2dpbmcgKi8KKwkgICAgICAgKHNuZHhpbiA9PSAxKSA/IDY0IDogc25keGlu ICsgQVJSQVlCQVNFKTsKKwlwcmludGYoIkxvPSVkXG5IaT0lZFxuIiwgc25keGxvLCBzbmR4aGkp OworCXByaW50ZigiY21hcmc9WyVzXVxuY21hcmcyPVslc11cbiIsIGNtYXJnLCBjbWFyZzIpOwor CXdoaWxlICgoeCA9IGFnbmJ5dGUoKSkgPiAtMSkgeworCSAgICBwdXRjaGFyKChjaGFyKXgpOwor CX0KKwlyZXR1cm4oMSk7CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgIH0KKyNlbmRpZiAvKiBO T1NQTCAqLworCisgICAgaWYgKHB2W1NORF9BUlJdLml2YWwgPCAxKSB7CQkvKiBGaWxlIHNlbGVj dGlvbiAmIGRpc3Bvc2l0aW9uLi4uICovCisKKwlpZiAocHZbU05EX0RFTF0uaXZhbCA+IDApCS8q IC9ERUxFVEUgd2FzIHNwZWNpZmllZCAqLworCSAgbW92aW5nID0gMTsKKwlkZWJ1ZyhGMTAxLCJ4 c2VuZCAvREVMRVRFIiwiIixtb3ZpbmcpOworCWlmIChwdltTTkRfQUZUXS5pdmFsID4gMCkJLyog Q29weSBTRU5EIGNyaXRlcmlhICovCisJICBja3N0cm5jcHkoc25kYWZ0ZXIscHZbU05EX0FGVF0u c3ZhbCwxOSk7CisJaWYgKHB2W1NORF9CRUZdLml2YWwgPiAwKQorCSAgY2tzdHJuY3B5KHNuZGJl Zm9yZSxwdltTTkRfQkVGXS5zdmFsLDE5KTsKKwlpZiAocHZbU05EX05BRl0uaXZhbCA+IDApCisJ ICBja3N0cm5jcHkoc25kbmFmdGVyLHB2W1NORF9OQUZdLnN2YWwsMTkpOworCWlmIChwdltTTkRf TkJFXS5pdmFsID4gMCkKKwkgIGNrc3RybmNweShzbmRuYmVmb3JlLHB2W1NORF9OQkVdLnN2YWws MTkpOworCWlmIChwdltTTkRfRVhDXS5pdmFsID4gMCkKKwkgIG1ha2VsaXN0KHB2W1NORF9FWENd LnN2YWwsc25kZXhjZXB0LE5TTkRFWENFUFQpOworCWlmIChwdltTTkRfU01BXS53dmFsID4gKENL X09GRl9UKS0xKQorCSAgc25kc21hbGxlciA9IHB2W1NORF9TTUFdLnd2YWw7CisJaWYgKHB2W1NO RF9MQVJdLnd2YWwgPiAoQ0tfT0ZGX1QpLTEpCisJICBzbmRsYXJnZXIgPSBwdltTTkRfTEFSXS53 dmFsOworCWlmIChwdltTTkRfTkFNXS5pdmFsID4gLTEpIHsKKwkgICAgZ19mbmNudiA9IGZuY252 OwkJLyogU2F2ZSBnbG9iYWwgdmFsdWUgKi8KKwkgICAgZm5jbnYgPSBwdltTTkRfTkFNXS5pdmFs OworCSAgICBkZWJ1ZyhGMTAxLCJ4c2VuZCBmbmNudiIsIiIsZm5jbnYpOworCX0KKwlpZiAocHZb U05EX1BUSF0uaXZhbCA+IC0xKSB7CisJICAgIGdfc3BhdGggPSBmbnNwYXRoOwkJLyogU2F2ZSBn bG9iYWwgdmFsdWVzICovCisJICAgIGZuc3BhdGggPSBwdltTTkRfUFRIXS5pdmFsOworI2lmbmRl ZiBOWkxUT1IKKwkgICAgaWYgKGZuc3BhdGggIT0gUEFUSF9PRkYpIHsKKwkJZ19mbmNudiA9IGZu Y252OwkvKiBCYWQgYmFkLi4uICovCisJCWZuY252ID0gWFlGTl9DOworCSAgICB9CisjZW5kaWYg LyogTlpMVE9SICovCisJICAgIGRlYnVnKEYxMDEsInhzZW5kIGZuc3BhdGgiLCIiLGZuc3BhdGgp OworCSAgICBkZWJ1ZyhGMTAxLCJ4c2VuZCBmbmNudiIsIiIsZm5jbnYpOworCX0KKyAgICB9CisK KyNpZmRlZiBQSVBFU0VORAorICAgIGlmIChwdltTTkRfRkxUXS5pdmFsID4gMCkgeworCW1ha2Vz dHIoJnNuZGZpbHRlcixwdltTTkRfRkxUXS5zdmFsKTsKKwlkZWJ1ZyhGMTEwLCJ4c2VuZCAvRklM VEVSIiwgc25kZmlsdGVyLCAwKTsKKyAgICB9CisjZW5kaWYgLyogUElQRVNFTkQgKi8KKworI2lm ZGVmIENLX0FQQworLyogTU9WRSBub3QgYWxsb3dlZCBpbiBBUENzICovCisgICAgaWYgKG1vdmlu ZyAmJgorCShhcGNhY3RpdmUgPT0gQVBDX0xPQ0FMIHx8IGFwY2FjdGl2ZSA9PSBBUENfUkVNT1RF KQorCSYmICEoYXBjc3RhdHVzICYgQVBDX1VOQ0gpKQorICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAw KTsKKyNlbmRpZiAvKiBDS19BUEMgKi8KKyNpZmRlZiBJS1NfT1BUSU9OCisgICAgaWYgKAorI2lm ZGVmIENLX1hZWgorICAgICAgICBwcm90b2NvbCA9PSBQUk9UT19LICYmCisjZW5kaWYgLyogQ0tf WFlaICovCisgICAgICAgICFpa3Nfd2FpdChLRVJNSVRfUkVRX1NUQVJULDEpKSB7CisgICAgICAg IHByaW50ZigiP0EgS2VybWl0IFNlcnZlciBpcyBub3QgYXZhaWxhYmxlIHRvIHByb2Nlc3MgdGhp cyBjb21tYW5kLlxuIik7CisgICAgICAgIHByaW50ZigiP1N0YXJ0IGEgUkVDRUlWRSBjb21tYW5k IHRvIGNvbXBsZW1lbnQgdGhpcyBjb21tYW5kLlxuIik7CisgICAgfQorI2VuZGlmIC8qIElLU19P UFRJT04gKi8KKworI2lmZGVmIElLU0QKKyNpZmRlZiBDS19MT0dJTgorICAgIGlmIChtb3Zpbmcg JiYgaW5zZXJ2ZXIgJiYgaXNndWVzdCkgeworICAgICAgICBwcmludGYoIj9GaWxlIGRlbGV0aW9u IG5vdCBhbGxvd2VkIGZvciBndWVzdHMuXG4iKTsKKwlyZXR1cm4oLTkpOworICAgIH0KKyNlbmRp ZiAvKiBDS19MT0dJTiAqLworI2VuZGlmIC8qIElLU0QgKi8KKworICAgIHNzdGF0ZSA9ICdzJzsJ CQkvKiBTZXQgc3RhcnQgc3RhdGUgdG8gU0VORCAqLworICAgIHNuZGNtZCA9IDE7CisjaWZkZWYg Q0tfUkVTRU5ECisgICAgaWYgKHB2W1NORF9SRVNdLml2YWwgPiAwKQkJLyogU2VuZCBzZW5kbW9k ZSBhcHByb3ByaWF0ZWx5ICovCisgICAgICBzZW5kbW9kZSA9IFNNX1JFU0VORDsKKyAgICBlbHNl IGlmIChwdltTTkRfU1RBXS5pdmFsID4gMCkKKyAgICAgIHNlbmRtb2RlID0gU01fUFNFTkQ7Cisg ICAgZWxzZQorI2VuZGlmIC8qIENLX1JFU0VORCAqLworICAgIGlmIChtbGlzdCkKKyAgICAgIHNl bmRtb2RlID0gU01fTVNFTkQ7CisgICAgZWxzZQorICAgICAgc2VuZG1vZGUgPSBTTV9TRU5EOwor I2lmZGVmIE1BQworICAgIHdoYXQgPSBXX1NFTkQ7CisgICAgc2NyY3JlYXRlKCk7CisjZW5kaWYg LyogTUFDICovCisgICAgaWYgKGxvY2FsICYmIHB2W1NORF9TSEhdLml2YWwgIT0gMCkgeyAvKiBJ ZiBpbiBsb2NhbCBtb2RlLCAqLworCWRpc3BsYSA9IDE7CQkJLyogdHVybiBvbiBmaWxlIHRyYW5z ZmVyIGRpc3BsYXkgKi8KKyAgICB9CisgICAgeCA9IDA7CisKKyAgeHNlbmR4OgkJCQkvKiBDb21t b24gZXhpdCwgaW5jbHVkaW5nIGZhaWx1cmUgKi8KKyAgICBkZWJ1ZyhGMTAxLCJkb3hzZW5kIHNu ZHNyYyIsIiIsc25kc3JjKTsKKyAgICBmb3IgKGkgPSAwOyBpIDw9IFNORF9NQVg7IGkrKykgewkv KiBGcmVlIG1hbGxvYydkIG1lbW9yeSAqLworCWlmIChwdltpXS5zdmFsKQorCSAgZnJlZShwdltp XS5zdmFsKTsKKyAgICB9CisgICAgcmV0dXJuKHgpOworfQorI2VuZGlmIC8qIE5PWEZFUiAqLwor CisjaWZuZGVmIE5PTE9DQUwKKy8qICBEIE8gWCBDIE8gTiBOICAtLSAgQ09OTkVDVCBjb21tYW5k IHBhcnNpbmcgd2l0aCBzd2l0Y2hlcyAqLworCisjaWZkZWYgWExJTUlUUworI2RlZmluZSBYTElN T1JUUklHR0VSCisjZWxzZQorI2lmZGVmIENLX1RSSUdHRVIKKyNkZWZpbmUgWExJTU9SVFJJR0dF UgorI2VuZGlmIC8qIENLX1RSSUdHRVIgKi8KKyNlbmRpZiAvKiAgWExJTUlUUyAqLworCisjaWZk ZWYgQ0tUSURMRQoraW50IHR0X2lkbGVsaW1pdCA9IDA7CQkJLyogVGVybWluYWwgaWRsZSBsaW1p dCAqLworaW50IHR0X2lkbGVhY3QgPSBJRExFX1JFVDsJCS8qIFRlcm1pbmFsIGlkbGUgYWN0aW9u ICovCisjZW5kaWYgLyogQ0tUSURMRSAqLworCisjaWZkZWYgT1MyCQkJCS8qIEs5NSBvbmx5OiAq LworZXh0ZXJuIGludAorICB0dF9pZGxlc25kX3RtbzsJCQkvKiAgIElkbGUgaW50ZXJ2YWwgKi8K K2ludCB0dF90aW1lbGltaXQgPSAwOwkJCS8qICAgVGltZSBsaW1pdCwgMCA9IG5vbmUgKi8KK2V4 dGVybiBjaGFyICoJCQkJLyogUGFyc2UgcmVzdWx0cyAtIHN0cmluZ3M6ICovCisgIHR0X2lkbGVz bmRfc3RyOwkJCS8qICAgSWRsZSBzdHJpbmcgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKworI2lmZGVm IENLX1RSSUdHRVIKK2V4dGVybiBjaGFyICp0dF90cmlnZ2VyW107CitleHRlcm4gQ0hBUiAqdHRf dHJtYXRjaFtdOworZXh0ZXJuIGNoYXIgKnRyaWdnZXJ2YWw7CitzdGF0aWMgY2hhciAqZ190dF90 cmlnZ2VyW1RSSUdHRVJTXTsKKyNlbmRpZiAvKiBDS19UUklHR0VSICovCisKKyNpZmRlZiBPUzIK K3N0YXRpYyBpbnQgZ190dF9pZGxlc25kX3RtbywgZ190dF90aW1lbGltaXQ7IC8qIEZvciBzYXZp bmcgYW5kIHJlc3RvcmluZyAqLworc3RhdGljIGludCBnX3R0X2lkbGVsaW1pdCwgZ190dF9zYXZl ZCA9IDA7CitzdGF0aWMgY2hhciAqIGdfdHRfaWRsZXNuZF9zdHI7CQkvKiBnbG9iYWwgc2V0dGlu Z3MgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKworc3RhdGljIHN0cnVjdCBzdHJpbmdpbnQgcHZbQ09O Tl9NQVgrMV07CisKK1ZPSUQKK3Jlc2Nvbm4oKSB7CisgICAgaW50IGk7CisKKyNpZmRlZiBPUzIK KyAgICBpZiAoIGdfdHRfc2F2ZWQgKSB7CisgICAgICAgIHR0X2lkbGVsaW1pdCAgID0gZ190dF9p ZGxlbGltaXQ7CisgICAgICAgIHR0X2lkbGVzbmRfdG1vID0gZ190dF9pZGxlc25kX3RtbzsKKyAg ICAgICAgdHRfdGltZWxpbWl0ICAgPSBnX3R0X3RpbWVsaW1pdDsKKyAgICAgICAgdHRfaWRsZXNu ZF9zdHIgPSBnX3R0X2lkbGVzbmRfc3RyOworICAgICAgICBnX3R0X3NhdmVkID0gMDsKKyAgICB9 CisjZW5kaWYgLyogT1MyICovCisKKyNpZmRlZiBDS19UUklHR0VSCisgICAgZm9yIChpID0gMDsg aSA8IFRSSUdHRVJTOyBpKyspCisgICAgICB0dF90cmlnZ2VyW2ldID0gZ190dF90cmlnZ2VyW2ld OworI2VuZGlmIC8qIENLX1RSSUdHRVIgKi8KKworICAgIGZvciAoaSA9IDA7IGkgPD0gQ09OTl9N QVg7IGkrKykgewkvKiBGcmVlIG1hbGxvYydkIG1lbW9yeSAqLworCWlmIChwdltpXS5zdmFsKQor CSAgZnJlZShwdltpXS5zdmFsKTsKKyAgICAgICAgcHZbaV0uc3ZhbCA9IE5VTEw7CisgICAgfQor fQorCitpbnQKK2RveGNvbm4oY3gpIGludCBjeDsgeworICAgIGludCBjLCBpLCBuOwkJCS8qIFdv cmtlcnMgKi8KKyAgICBpbnQgeCwgeTsKKyAgICBpbnQgZ2V0dmFsID0gMDsJCQkvKiBXaGV0aGVy IHRvIGdldCBzd2l0Y2ggdmFsdWUgKi8KKyAgICBpbnQgYXN5bmMgPSAwOyAgICAgICAgICAgICAg ICAgICAgICAvKiBNYWtlIGFuIGFzeW5jIGNvbm5lY3QgKi8KKyAgICBzdHJ1Y3QgRkRCIHN3LCBj bTsJCQkvKiBGREJzIGZvciBlYWNoIHBhcnNlIGZ1bmN0aW9uICovCisgICAgZXh0ZXJuIEZJTEUg KiB0ZmlsZVtdOworICAgIGV4dGVybiBjaGFyICogbWFjcFtdOworCisjaWZkZWYgT1MyCisgICAg Z190dF9pZGxlc25kX3RtbyA9IHR0X2lkbGVzbmRfdG1vOwkvKiBTYXZlIGdsb2JhbCBzZXR0aW5n cyAqLworICAgIGdfdHRfdGltZWxpbWl0ICAgPSB0dF90aW1lbGltaXQ7CisgICAgZ190dF9pZGxl bGltaXQgICA9IHR0X2lkbGVsaW1pdDsKKyAgICBnX3R0X2lkbGVzbmRfc3RyID0gdHRfaWRsZXNu ZF9zdHI7CisgICAgZ190dF9zYXZlZCA9IDE7CisjZW5kaWYgLyogT1MyICovCisKKyNpZmRlZiBD S19UUklHR0VSCisgICAgaWYgKCF0dF90cmlnZ2VyWzBdKSB7CQkvKiBGaXJzdCBpbml0aWFsaXph dGlvbiAqLworCWZvciAoaSA9IDE7IGkgPCBUUklHR0VSUzsgaSsrKQorCSAgdHRfdHJpZ2dlcltp XSA9IE5VTEw7CisgICAgfQorICAgIGZvciAoaSA9IDA7IGkgPCBUUklHR0VSUzsgaSsrKQorICAg ICAgZ190dF90cmlnZ2VyW2ldID0gdHRfdHJpZ2dlcltpXTsKKyAgICBpZiAodHJpZ2dlcnZhbCkg eworCWZyZWUodHJpZ2dlcnZhbCk7CisJdHJpZ2dlcnZhbCA9IE5VTEw7CisgICAgfQorI2VuZGlm IC8qIENLX1RSSUdHRVIgKi8KKworICAgIGZvciAoaSA9IDA7IGkgPD0gQ09OTl9NQVg7IGkrKykg ewkvKiBJbml0aWFsaXplIHN3aXRjaCB2YWx1ZXMgKi8KKwlwdltpXS5zdmFsID0gTlVMTDsJCS8q IHRvIG51bGwgcG9pbnRlcnMgKi8KKwlwdltpXS5pdmFsID0gLTE7CQkvKiBhbmQgLTEgaW50IHZh bHVlcyAqLworCXB2W2ldLnd2YWwgPSAoQ0tfT0ZGX1QpLTE7CisgICAgfQorICAgIGlmIChjeCA9 PSBYWENRKQkJCS8qIENRID09IENPTk5FQ1QgL1FVSUVUTFkgKi8KKyAgICAgIHB2W0NPTk5fTlZd Lml2YWwgPSAxOworCisgICAgLyogU2V0IHVwIGNoYWluZWQgcGFyc2UgZnVuY3Rpb25zLi4uICov CisKKyAgICBjbWZkYmkoJnN3LAkJCQkvKiBGaXJzdCBGREIgLSBjb21tYW5kIHN3aXRjaGVzICov CisJICAgX0NNS0VZLAkJCS8qIGZjb2RlICovCisJICAgIlN3aXRjaCIsCQkJLyogaGxwbXNnICov CisJICAgIiIsCQkJCS8qIGRlZmF1bHQgKi8KKwkgICAiIiwJCQkJLyogYWRkdGwgc3RyaW5nIGRh dGEgKi8KKwkgICBuY29ubnRhYiwJCQkvKiBhZGR0bCBudW1lcmljIGRhdGEgMTogdGJsIHNpemUg Ki8KKwkgICA0LAkJCQkvKiBhZGR0bCBudW1lcmljIGRhdGEgMjogNCA9IGNtc3dpICovCisJICAg eHhzdHJpbmcsCQkJLyogUHJvY2Vzc2luZyBmdW5jdGlvbiAqLworCSAgIGNvbm50YWIsCQkJLyog S2V5d29yZCB0YWJsZSAqLworCSAgICZjbQkJCQkvKiBQb2ludGVyIHRvIG5leHQgRkRCICovCisJ ICAgKTsKKyAgICBjbWZkYmkoJmNtLAkJCQkvKiAybmQgRkRCIC0gQ29uZmlybWF0aW9uICovCisJ ICAgX0NNQ0ZNLAkJCS8qIGZjb2RlICovCisJICAgIiIsCQkJCS8qIGhscG1zZyAqLworCSAgICIi LAkJCQkvKiBkZWZhdWx0ICovCisJICAgIiIsCQkJCS8qIGFkZHRsIHN0cmluZyBkYXRhICovCisJ ICAgMCwJCQkJLyogYWRkdGwgbnVtZXJpYyBkYXRhIDEgKi8KKwkgICAwLAkJCQkvKiBhZGR0bCBu dW1lcmljIGRhdGEgMiAqLworCSAgIE5VTEwsCisJICAgTlVMTCwKKwkgICBOVUxMCisJICAgKTsK KworICAgIHdoaWxlICgxKSB7CQkJCS8qIFBhcnNlIDAgb3IgbW9yZSBzd2l0Y2hlcyAqLworCXgg PSBjbWZkYigmc3cpOwkJCS8qIFBhcnNlIHN3aXRjaCBvciBjb25maXJtYXRpb24gKi8KKwlkZWJ1 ZyhGMTAxLCJkb3hjb25uIGNtZmRiIiwiIix4KTsKKwlpZiAoeCA8IDApIHsJCQkvKiBFcnJvciAq LworCSAgICBpZiAoeCA9PSAtOSB8fCB4ID09IC0yKQorCSAgICAgIHByaW50ZigiP05vIHN3aXRj aGVzIG1hdGNoIC0gXCIlc1wiXG4iLGF0bWJ1Zik7CisJICAgIGdvdG8geGNvbm54OwkJLyogb3Ig cmVwYXJzZSBuZWVkZWQgKi8KKwl9CisJaWYgKGNtcmVzdWx0LmZjb2RlICE9IF9DTUtFWSkJLyog QnJlYWsgb3V0IGlmIG5vdCBhIHN3aXRjaCAqLworCSAgYnJlYWs7CisJYyA9IGNtZ2JyaygpOwkJ CS8qIEdldCBicmVhayBjaGFyYWN0ZXIgKi8KKwlnZXR2YWwgPSAoYyA9PSAnOicgfHwgYyA9PSAn PScpOyAvKiB0byBzZWUgaG93IHRoZXkgZW5kZWQgdGhlIHN3aXRjaCAqLworCWlmIChnZXR2YWwg JiYgIShjbXJlc3VsdC5rZmxhZ3MgJiBDTV9BUkcpKSB7CisJICAgIHByaW50ZigiP1RoaXMgc3dp dGNoIGRvZXMgbm90IHRha2UgYXJndW1lbnRzXG4iKTsKKwkgICAgeCA9IC05OworCSAgICBnb3Rv IHhjb25ueDsKKwl9CisJaWYgKCFnZXR2YWwgJiYgKGNtZ2t3ZmxncygpICYgQ01fQVJHKSkgewor CSAgICBwcmludGYoIj9UaGlzIHN3aXRjaCByZXF1aXJlcyBhbiBhcmd1bWVudFxuIik7CisJICAg IHJldHVybigtOSk7CisJfQorCW4gPSBjbXJlc3VsdC5ucmVzdWx0OwkJLyogTnVtZXJpYyByZXN1 bHQgPSBzd2l0Y2ggdmFsdWUgKi8KKwlkZWJ1ZyhGMTAxLCJkb3hjb25uIHN3aXRjaCIsIiIsbik7 CisKKwlzd2l0Y2ggKG4pIHsJCQkvKiBQcm9jZXNzIHRoZSBzd2l0Y2ggKi8KKyNpZmRlZiBPUzIK KwkgIGNhc2UgQ09OTl9BUzoJCQkvKiBBc3luY2hyb25vdXMgKi8KKyAgICAgICAgICAgIHB2W0NP Tk5fQVNdLml2YWwgPSAxOworICAgICAgICAgICAgcHZbQ09OTl9TWV0uaXZhbCA9IDA7CisgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIENPTk5fU1k6ICAgICAgICAgICAgICAgICAv KiBTeW5jaHJvbm91cyAqLworICAgICAgICAgICAgcHZbQ09OTl9TWV0uaXZhbCA9IDE7CisgICAg ICAgICAgICBwdltDT05OX0FTXS5pdmFsID0gMDsKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlm IC8qIE9TMiAqLworCSAgY2FzZSBDT05OX05WOgkJCS8qIE5vbi12ZXJiYWwgKi8KKwkgICAgcHZb bl0uaXZhbCA9IDE7CisJICAgIGJyZWFrOworI2lmZGVmIFhMSU1JVFMKKwkgIGNhc2UgQ09OTl9J SToJCQkvKiBJZGxlLWludGVydmFsICovCisJICBjYXNlIENPTk5fSUw6CQkJLyogSWRsZS1saW1p dCAqLworCSAgY2FzZSBDT05OX1RMOgkJCS8qIFRpbWUtbGltaXQgKi8KKwkgICAgaWYgKCFnZXR2 YWwpIGJyZWFrOworCSAgICBpZiAoKHggPSBjbW51bSgiU2Vjb25kcyIsIjAiLDEwLCZ5LHh4c3Ry aW5nKSkgPCAwKQorCSAgICAgIGdvdG8geGNvbm54OworCSAgICBwdltuXS5pdmFsID0geTsKKwkg ICAgYnJlYWs7CisJICBjYXNlIENPTk5fSVM6CQkJLyogSWRsZS1zdHJpbmcgKi8KKyNlbmRpZiAv KiBYTElNSVRTICovCisjaWZkZWYgQ0tfVFJJR0dFUgorCSAgY2FzZSBDT05OX1RTOgkJCS8qIFRy aWdnZXItc3RyaW5nICovCisjZW5kaWYgLyogQ0tfVFJJR0dFUiAqLworI2lmZGVmIFhMSU1PUlRS SUdHRVIKKwkgICAgaWYgKCFnZXR2YWwpIGJyZWFrOworCSAgICBpZiAoKHggPSBjbWZsZCgiU3Ry aW5nIChlbmNsb3NlIGluIGJyYWNlcyBpZiBpdCBjb250YWlucyBzcGFjZXMpIiwKKwkJCSAgICIi LCZzLHh4c3RyaW5nKSkgPCAwKSB7CisJCWlmICh4ID09IC0zKSB7CisJCSAgICBwcmludGYoIj9T dHJpbmcgcmVxdWlyZWRcbiIpOworCQkgICAgeCA9IC05OworCQl9CisJCWdvdG8geGNvbm54Owor CSAgICB9CisJICAgIGlmIChuICE9IENPTk5fVFMpCisJICAgICAgcyA9IGJyc3RyaXAocyk7CisJ ICAgIGlmICgoeSA9IHN0cmxlbihzKSkgPiAwKSB7CisJCWlmIChwdltuXS5zdmFsKSBmcmVlKHB2 W25dLnN2YWwpOworCQlwdltuXS5zdmFsID0gbWFsbG9jKHkrMSk7CisJCWlmIChwdltuXS5zdmFs KSB7CisJCSAgICBzdHJjcHkocHZbbl0uc3ZhbCxzKTsgLyogc2FmZSAqLworCQkgICAgcHZbbl0u aXZhbCA9IDE7CisJCX0KKwkgICAgfQorCSAgICBicmVhazsKKyNlbmRpZiAvKiBYTElNT1JUUklH R0VSICovCisJICBkZWZhdWx0OgorCSAgICBwcmludGYoIj9VbmV4cGVjdGVkIHN3aXRjaCB2YWx1 ZSAtICVkXG4iLGNtcmVzdWx0Lm5yZXN1bHQpOworCSAgICB4ID0gLTk7CisJICAgIGdvdG8geGNv bm54OworCX0KKyAgICB9CisgICAgZGVidWcoRjEwMSwiZG94Y29ubiBjbXJlc3VsdC5mY29kZSIs IiIsY21yZXN1bHQuZmNvZGUpOworICAgIGlmIChjbXJlc3VsdC5mY29kZSAhPSBfQ01DRk0pIHsK KwlwcmludGYoIj9VbmV4cGVjdGVkIGZ1bmN0aW9uIGNvZGU6ICVkXG4iLGNtcmVzdWx0LmZjb2Rl KTsKKwl4ID0gLTk7CisJZ290byB4Y29ubng7CisgICAgfQorCisgICAgLyogQ29tbWFuZCB3YXMg Y29uZmlybWVkIHNvIHdlIGNhbiBwcmUtcG9wIGNvbW1hbmQgbGV2ZWwuICovCisgICAgLyogVGhp cyBpcyBzbyBDT05ORUNUIG1vZHVsZSB3b24ndCB0aGluayB3ZSdyZSBleGVjdXRpbmcgYSBzY3Jp cHQgKi8KKyAgICAvKiBpZiBDT05ORUNUIHdhcyB0aGUgZmluYWwgY29tbWFuZCBpbiB0aGUgc2Ny aXB0LiAqLworCisgICAgaWYgKGNtZGx2bCA+IDApCisgICAgICBwcmVwb3AoKTsKKworI2lmZGVm IE9TMgkJCQkvKiBNYWtlIHJlc3VsdHMgYXZhaWxhYmxlIGdsb2JhbGx5ICovCisgICAgaWYgKHB2 W0NPTk5fSUxdLml2YWwgPiAtMSkJCS8qIElkbGUgbGltaXQgKi8KKyAgICAgIHR0X2lkbGVsaW1p dCA9IHB2W0NPTk5fSUxdLml2YWw7CisgICAgaWYgKHB2W0NPTk5fSUldLml2YWwgPiAtMSkJCS8q IElkbGUgbGltaXQgKi8KKyAgICAgIHR0X2lkbGVzbmRfdG1vID0gcHZbQ09OTl9JSV0uaXZhbDsK KyAgICBpZiAocHZbQ09OTl9JU10uc3ZhbCkJCS8qIElkbGUgc3RyaW5nICovCisgICAgICBpZiAo dHRfaWRsZXNuZF9zdHIgPSAoY2hhciAqKW1hbGxvYygoaW50KXN0cmxlbihwdltDT05OX0lTXS5z dmFsKSsxKSkKKwlzdHJjcHkodHRfaWRsZXNuZF9zdHIscHZbQ09OTl9JU10uc3ZhbCk7IC8qIHNh ZmUgKi8KKyAgICBpZiAocHZbQ09OTl9UTF0uaXZhbCA+IC0xKQkJLyogU2Vzc2lvbiBsaW1pdCAq LworICAgICAgdHRfdGltZWxpbWl0ID0gcHZbQ09OTl9UTF0uaXZhbDsKKyAgICBhc3luYyA9IChw dltDT05OX0FTXS5pdmFsID4gMCB8fAorICAgICAgICAgICAgIHB2W0NPTk5fU1ldLml2YWwgPD0g MCAmJiBjbWRsdmwgPT0gMCkgPyAxIDogMDsKKyNlbmRpZiAvKiBPUzIgKi8KKworI2lmZGVmIENL X1RSSUdHRVIKKyAgICBpZiAocHZbQ09OTl9UU10uc3ZhbCkJCS8qIFRyaWdnZXIgc3RyaW5ncyAq LworICAgICAgbWFrZWxpc3QocHZbQ09OTl9UU10uc3ZhbCx0dF90cmlnZ2VyLFRSSUdHRVJTKTsK KyAgICBmb3IgKGkgPSAwOyBpIDwgVFJJR0dFUlM7IGkrKykJLyogVHJpZ2dlciBtYXRjaCBwb2lu dGVycyAqLworICAgICAgdHRfdHJtYXRjaFtpXSA9IE5VTEw7CisgICAgaWYgKHRyaWdnZXJ2YWwp IHsJCQkvKiBSZXNldCB0cmlnZ2VyIHZhbHVlICovCisJZnJlZSh0cmlnZ2VydmFsKTsKKwl0cmln Z2VydmFsID0gTlVMTDsKKyAgICB9CisjZW5kaWYgLyogQ0tfVFJJR0dFUiAqLworCisjaWZkZWYg U1NIQ01ECisvKgorICAyMDEwLzAzLzAxLi4uCisgIFRoZSBwcmV2aW91cyBjb25uZWN0aW9uIHdh cyB0aHJvdWdoIHRoZSBleHRlcm5hbCBzc2ggY2xpZW50IGFuZCBub3csIHdpdGgKKyAgdGhhdCBj b25uZWN0aW9uIGNsb3NlZCwgdGhlIHVzZXIgc2F5cyAiY29ubmVjdCIgYW5kIGV4cGVjdHMgYSBu ZXcgY29ubmVjdGlvbgorICB0byBiZSBtYWRlIHRvIHRoZSBzYW1lIGhvc3QsIGJlY2F1c2UgdGhh dCdzIGhvdyBhbGwgdGhlIG90aGVyIGNvbm5lY3Rpb24KKyAgbWV0aG9kcyB3b3JrLCBzbyAoYW5k IHRoaXMgaXMgcXVpdGUgYSBoYWNrKS4uLgorKi8KKyAgICBpZiAoIWNrc3RyY21wKCJzc2ggIix0 dG5hbWUsNCwwKSkgewkvKiBQcmV2aW91cyAiaG9zdCIgd2FzICJzc2ggYmxhaCIgKi8KKwlfUFJP VE9UWVAgKGludCByZWRvc3NoLCAoIHZvaWQgKSApOworCWV4dGVybiBpbnQgdHR5ZmQ7CisJaWYg KHR0eWZkIDwgMCkgewkJLyogQW5kIGNvbm5lY3Rpb24gaXMgbm8gbG9uZ2VyIG9wZW4gKi8KKwkg ICAgaW50IHh4OworCSAgICB4eCA9IHJlZG9zc2goKTsJCS8qIFNvIHJlZG8gdGhlIFNTSCBjb25u ZWN0aW9uICovCisJICAgIGlmICh4eCA8IDApIHJldHVybih4eCk7CisJICAgIGdvdG8geGNvbm54 OworCX0KKyAgICB9CisjZW5kaWYJLyogU1NIQ01EICovCisgICAgeCA9IGRvY29uZWN0KChwdltD T05OX05WXS5pdmFsID4gMCkgPyAxIDogMCwgYXN5bmMpOworICAgIHsKKwlpbnQgeHg7CisJZGVi dWcoRjEwMSwiZG94Y29ubiBkb2NvbmVjdCByZXR1cm5zIiwiIix4KTsKKwlpZiAoKHh4ID0gdHRj aGsoKSkgPCAwKSBkb2xvZ2VuZCgpOworCWRlYnVnKEYxMDEsImRveGNvbm4gdHRjaGsgcmV0dXJu cyIsIiIseHgpOworICAgIH0KKworI2lmZGVmIENLX1RSSUdHRVIKKyAgICBkZWJ1ZyhGMTExLCJk b3hjb25uIGRvY29uZWN0IHRyaWdnZXJ2YWwiLHRyaWdnZXJ2YWwseCk7CisjZW5kaWYgLyogQ0tf VFJJR0dFUiAqLworCisgIHhjb25ueDoKKyAgICAvKiBCYWNrIGZyb20gQ09OTkVDVCAtLSBSZXN0 b3JlIGdsb2JhbCBzZXR0aW5ncyAqLworCisgICAgaWYgKCFhc3luYykKKyAgICAgIHJlc2Nvbm4o KTsKKworICAgIHN1Y2Nlc3MgPSAoeCA+IDApID8gMSA6IDA7CisgICAgcmV0dXJuKHgpOworfQor I2VuZGlmIC8qIE5PTE9DQUwgKi8KKworI2lmZGVmIEFERENNRAorLyogY3ggPT0gWFhBREQgb3Ig WFhSRU1WICovCisvKiBmYyA9PSBBRERfQklOIG9yIEFERF9UWFQgKi8KK3N0YXRpYyBpbnQKK2Rv YWRkKGN4LGZjKSBpbnQgY3gsIGZjOyB7CisjaWZkZWYgUEFUVEVSTlMKKyAgICBjaGFyICogdG1w W0ZUUEFUVEVSTlNdOworICAgIGNoYXIgKipwID0gTlVMTDsKKyAgICBpbnQgaSwgaiwgaywgbiA9 IDAsIHggPSAwLCBsYXN0OworCisjZW5kaWYgLyogUEFUVEVSTlMgKi8KKyAgICBpZiAoY3ggIT0g WFhBREQgJiYgY3ggIT0gWFhSRU1WKSB7CisJcHJpbnRmKCI/VW5leHBlY3RlZCBmdW5jdGlvbiBj b2RlOiAlZFxuIixjeCk7CisJcmV0dXJuKC05KTsKKyAgICB9CisjaWZkZWYgUEFUVEVSTlMKKyAg ICB3aGlsZSAobiA8IEZUUEFUVEVSTlMpIHsJCS8qIENvbGxlY3QgbmV3IHBhdHRlcm5zICovCisJ dG1wW25dID0gTlVMTDsKKwlpZiAoKHggPSBjbWZsZCgiUGF0dGVybiIsIiIsJnMseHhzdHJpbmcp KSA8IDApCisJICBicmVhazsKKwlja3N0cm5jcHkobGluZSxzLExJTkJVRlNJWik7CisJcyA9IGJy c3RyaXAobGluZSk7CisJbWFrZXN0cigmKHRtcFtuKytdKSxzKTsKKyAgICB9CisgICAgaWYgKHgg PT0gLTMpCisgICAgICB4ID0gY21jZm0oKTsKKyAgICBpZiAoeCA8IDApCisgICAgICBnb3RvIHhk b2FkZDsKKyAgICBwID0gKGZjID09IEFERF9CSU4pID8gYmlucGF0dGVybnMgOiB0eHRwYXR0ZXJu czsgLyogV2hpY2ggbGlzdCAqLworICAgIGxhc3QgPSAwOworICAgIGZvciAoaSA9IDA7IGkgPCBG VFBBVFRFUk5TOyBpKyspIHsgLyogRmluZCBsYXN0IG9uZSBpbiBsaXN0ICovCisJaWYgKCFwW2ld KSB7CisJICAgIGxhc3QgPSBpOworCSAgICBicmVhazsKKwl9CisgICAgfQorICAgIGlmIChjeCA9 PSBYWEFERCkgewkJCS8qIEFkZGluZyAqLworCWlmIChsYXN0ICsgbiA+IEZUUEFUVEVSTlMpIHsJ LyogQ2hlY2sgaWYgdG9vIG1hbnkgKi8KKwkgICAgcHJpbnRmKCI/VG9vIG1hbnkgcGF0dGVybnMg LSAlZCBpcyB0aGUgbWF4aW11bVxuIiwgRlRQQVRURVJOUyk7CisJICAgIGdvdG8geGRvYWRkOwor CX0KKyAgICAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgeyAgICAgICAgLyogQ29weSBpbiB0 aGUgbmV3IG9uZXMuICovCisgICAgICAgICAgZm9yIChqID0gMCwgeCA9IDA7IHggPT0gMCAmJiBq IDwgbGFzdCA7IGorKyApCisgICAgICAgICAgICB4ID0gIWNrc3RyY21wKHRtcFtpXSxwW2pdLC0x LGZpbGVjYXNlKTsgLyogbWF0Y2ggKi8KKyAgICAgICAgICBpZiAoeCA9PSAwKQorICAgICAgICAg ICAgbWFrZXN0cigmKHBbbGFzdCsrXSksdG1wW2ldKTsKKyAgICAgICAgfQorICAgICAgICBtYWtl c3RyKCYocFtsYXN0XSksTlVMTCk7CS8qIE51bGwtdGVybWluYXRlIHRoZSBsaXN0ICovCisgICAg ICAgIHggPSAxOworICAgICAgICBnb3RvIHhkb2FkZDsgICAgICAgICAgICAgICAgICAgIC8qIERv bmUgKi8KKyAgICB9IGVsc2UgaWYgKGN4ID09IFhYUkVNVikgewkJLyogUmVtb3ZlIHNvbWV0aGlu ZyhzKSAqLworCWludCBqLCBrOworCWlmIChsYXN0ID09IDApCQkJICAgICAgICAvKiBMaXN0IGlz IGVtcHR5ICovCisJICBnb3RvIHhkb2FkZDsJCQkgICAgICAgIC8qIE5vdGhpbmcgdG8gcmVtb3Zl ICovCisJZm9yIChpID0gMDsgaSA8IG47IGkrKykgewkgICAgICAgIC8qIGkgPSBQYXR0ZXJucyB0 aGV5IHR5cGVkICovCisJICAgIGZvciAoaiA9IDA7IGogPCBsYXN0OyBqKyspIHsgICAgICAgIC8q IGogPSBQYXR0ZXJucyBpbiBsaXN0ICovCisJCS8qIENoYW5nZSB0aGlzIHRvIGNrc3RyY21wKCku Li4gKi8KKwkJaWYgKGZpbGVjYXNlKQorICAgICAgICAgICAgICAgICAgeCA9ICFja3N0cmNtcCh0 bXBbaV0scFtqXSwtMSxmaWxlY2FzZSk7IC8qIG1hdGNoICovCisJCWVsc2UKKwkJICB4ID0gY2tz dHJjbXAodG1wW2ldLHBbal0sLTEsMCk7IC8qIENhc2UtaW5kZXBlbmRlbnQgbWF0Y2ggKi8KKwkJ aWYgKHgpIHsJICAgIAkgICAgICAgIC8qIFRoaXMgb25lIG1hdGNoZXMgKi8KKwkJICAgIG1ha2Vz dHIoJihwW2pdKSxOVUxMKTsgICAgICAvKiBGcmVlIGl0ICovCisJCSAgICBmb3IgKGsgPSBqOyBr IDwgbGFzdDsgaysrKSAgLyogTW92ZSB0aGUgcmVzdCB1cCAqLworCQkgICAgICBwW2tdID0gcFtr KzFdOworCQkgICAgcFtrXSA9IE5VTEw7CSAgICAgICAgLyogRXJhc2UgbGFzdCBvbmUgKi8KKwkJ ICAgIGlmICghcFtrXSkKKwkJICAgICAgYnJlYWs7CisJCX0KKwkgICAgfQorCX0KKyAgICB9Cisg IHhkb2FkZDoJCQkJLyogQ29tbW9uIGV4aXQgKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsr KQorICAgICAgaWYgKHRtcFtpXSkKKwlmcmVlKHRtcFtpXSk7CisgICAgcmV0dXJuKHgpOworI2Vu ZGlmIC8qIFBBVFRFUk5TICovCit9CisKKy8qIEFERCBTRU5ELUxJU1QgKi8KKworc3RhdGljIGlu dAorYWRkc2VuZChjeCkgaW50IGN4OyB7CisjaWZuZGVmIE5PTVNFTkQKKyAgICBleHRlcm4gc3Ry dWN0IGtleXRhYiBmdHRhYltdOworICAgIGV4dGVybiBpbnQgbmZ0dHlwOworICAgIHN0cnVjdCBm aWxlbGlzdCAqIGZscDsKKyAgICBjaGFyICogZm1vZGUgPSAiIjsKKyAgICBpbnQgeG1vZGUgPSAw OworICAgIGludCB4YmluYXJ5ID0gMDsKKyNlbmRpZiAvKiBOT01TRU5EICovCisKKyNpZmRlZiBO T01TRU5ECisgICAgcHJpbnRmKCI/U29ycnksIEFERC9SRU1PVkUgU0VORC1MSVNUIG5vdCBhdmFp bGFibGUuXG4iKTsKKyAgICByZXR1cm4oLTkpOworI2VuZGlmIC8qIE5PTVNFTkQgKi8KKyAgICBp ZiAoY3ggPT0gWFhSRU1WKSB7CisJcHJpbnRmKCI/U29ycnksIFJFTU9WRSBTRU5ELUxJU1Qgbm90 IGltcGxlbWVudGVkIHlldC5cbiIpOworCXJldHVybigtOSk7CisgICAgfQorI2lmbmRlZiBOT01T RU5ECisjaWZuZGVmIFhZWl9JTlRFUk5BTAorICAgIGlmIChwcm90b2NvbCAhPSBQUk9UT19LKSB7 CisgICAgICAgcHJpbnRmKCI/U29ycnksIEFERCBTRU5ELUxJU1QgZG9lcyBub3Qgd29yayB3aXRo IGV4dGVybmFsIHByb3RvY29sc1xuIik7CisgICAgICAgcmV0dXJuKC05KTsKKyAgICB9CisjZW5k aWYgLyogWFlaX0lOVEVSTkFMICovCisKKyAgICB4ID0gY21pZmkoIkZpbGUgc3BlY2lmaWNhdGlv biB0byBhZGQiLCIiLCAmcywmeSx4eHN0cmluZyk7CisgICAgaWYgKHggPCAwKSB7CisJaWYgKHgg PT0gLTMpIHsKKwkgICAgcHJpbnRmKCI/QSBmaWxlIHNwZWNpZmljYXRpb24gaXMgcmVxdWlyZWRc biIpOworCSAgICByZXR1cm4oLTkpOworCX0gZWxzZQorCSAgcmV0dXJuKHgpOworICAgIH0KKyAg ICBja3N0cm5jcHkodG1wYnVmLHMsVE1QQlVGU0laKTsKKyAgICBzID0gdG1wYnVmOworICAgIGlm IChmaWxlc2lubGlzdCA9PSAwKQkJLyogVGFrZSBjYXJlIG9mIFx2KGZpbGVzcGVjKSAqLworICAg ICAgZnNwZWNbMF0gPSBOVUw7CisgICAgemZucWZwKHMsTElOQlVGU0laLGxpbmUpOworICAgIHMg PSBsaW5lOworICAgIGlmICgoKGludClzdHJsZW4oZnNwZWMpICsgKGludClzdHJsZW4ocykgKyAx KSA8IGZzcGVjbGVuKSB7CisJc3RyY2F0KGZzcGVjLHMpOwkJLyogc2FmZSAqLworCXN0cmNhdChm c3BlYywiICIpOwkJLyogc2FmZSAqLworICAgIH0gZWxzZQorICAgICAgcHJpbnRmKCJXQVJOSU5H IC0gXFx2KGZpbGVzcGVjKSBidWZmZXIgb3ZlcmZsb3dcbiIpOworCisKKyAgICB4YmluYXJ5ID0g YmluYXJ5OworICAgIGlmICgocGF0dGVybnMgfHwgZmlsZXBlZWspCQkvKiBGSUxFIFBBVFRFUk5T IG9yIFNDQU4gaXMgT04gKi8KKyNpZmRlZiBDS19MQUJFTEVECisJJiYgYmluYXJ5ICE9IFhZRlRf TAkJLyogQW5kIG5vdCBpZiBGSUxFIFRZUEUgTEFCRUxFRCAqLworI2VuZGlmIC8qIENLX0xBQkVM RUQgKi8KKyNpZmRlZiBWTVMKKwkmJiBiaW5hcnkgIT0gWFlGVF9JCQkvKiBvciBGSUxFIFRZUEUg SU1BR0UgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKwkpIHsKKwlpbnQgaywgeDsKKwl4ID0gLTE7CisJ ayA9IHNjYW5maWxlKGxpbmUsJngsbnNjYW5maWxlKTsKKwlpZiAoayA+IDApIHhiaW5hcnkgPSAo ayA9PSBGVF9CSU4pID8gWFlGVF9CIDogWFlGVF9UOworICAgIH0KKyAgICBmbW9kZSA9IGdmbW9k ZSh4YmluYXJ5LDApOworICAgIGlmICgoeCA9IGNta2V5KGZ0dGFiLG5mdHR5cCwKKwkJICAgInR5 cGUgb2YgZmlsZSB0cmFuc2ZlciIsIGZtb2RlLCB4eHN0cmluZykpIDwgMCkKKyAgICAgIHJldHVy bih4KTsKKyAgICB4bW9kZSA9IHg7CisKKyAgICBjbWFyZzIgPSAiIjsKKyAgICBpZiAoKHggPSBj bWZsZCh5ID8KKyAgIlxuQXMtbmFtZSB0ZW1wbGF0ZSBjb250YWluaW5nIHJlcGxhY2VtZW50IHZh cmlhYmxlcyBzdWNoIGFzIFxcdihmaWxlbmFtZSkiIDoKKyAgIk5hbWUgdG8gc2VuZCBpdCB3aXRo IiwgIiIsJnMsTlVMTCkpIDwgMCkKKyAgICAgIGlmICh4ICE9IC0zKQorCXJldHVybih4KTsKKyNp Zm5kZWYgTk9TUEwKKyAgICBpZiAoeSAmJiAqcykgeworCWNoYXIgKiBwID0gdG1wYnVmOworCXgg PSBUTVBCVUZTSVo7CisJenpzdHJpbmcocywmcCwmeCk7CisJaWYgKCFzdHJjbXAodG1wYnVmLHMp KSB7CisJICAgIHByaW50ZigKKyAgIj9Bcy1uYW1lIGZvciBmaWxlIGdyb3VwIG11c3QgY29udGFp biB2YXJpYWJsZXMgc3VjaCBhcyBcXHYoZmlsZW5hbWUpXG4iCisJCSAgICk7CisJICAgIHJldHVy bigtOSk7CisJfQorICAgIH0KKyNlbmRpZiAvKiBOT1NQTCAqLworICAgIGNrc3RybmNweSh0bXBi dWYscyxUTVBCVUZTSVopOworICAgIGNtYXJnMiA9IHRtcGJ1ZjsKKworICAgIGlmICgoeCA9IGNt Y2ZtKCkpIDwgMCkKKyAgICAgIHJldHVybih4KTsKKyAgICBmbHAgPSAoc3RydWN0IGZpbGVsaXN0 ICopIG1hbGxvYyhzaXplb2Yoc3RydWN0IGZpbGVsaXN0KSk7CisgICAgaWYgKGZscCkgeworCWlm IChmaWxldGFpbCkKKwkgIGZpbGV0YWlsLT5mbF9uZXh0ID0gZmxwOworCWZpbGV0YWlsID0gZmxw OworCWlmICghZmlsZWhlYWQpCisJICBmaWxlaGVhZCA9IGZscDsKKwl4ID0gKGludCkgc3RybGVu KGxpbmUpOwkvKiBMZW5ndGggb2YgZmlsZW5hbWUgKi8KKwlzID0gKGNoYXIgKikgbWFsbG9jKHgg KyAxKTsKKwlpZiAocykgeworCSAgICBzdHJjcHkocyxsaW5lKTsJCS8qIHNhZmUgKi8KKwkgICAg ZmxwLT5mbF9uYW1lID0gczsKKwkgICAgZmxwLT5mbF9tb2RlID0geG1vZGU7CisJICAgIHggPSAo aW50KSBzdHJsZW4oY21hcmcyKTsJLyogTGVuZ3RoIG9mIGFzLW5hbWUgKi8KKwkgICAgaWYgKHgg PCAxKSB7CisJCWZscC0+ZmxfYWxpYXMgPSBOVUxMOworCSAgICB9IGVsc2UgeworCQlzID0gKGNo YXIgKikgbWFsbG9jKHggKyAxKTsKKwkJaWYgKHMpIHsKKwkJICAgIHN0cmNweShzLGNtYXJnMik7 CS8qIHNhZmUgKi8KKwkJICAgIGZscC0+ZmxfYWxpYXMgPSBzOworCQl9IGVsc2UgeworCQkgICAg cHJpbnRmKCJTb3JyeSwgY2FuJ3QgYWxsb2NhdGUgc3BhY2UgZm9yIGFzLW5hbWUiKTsKKwkJICAg IHJldHVybigtOSk7CisJCX0KKwkgICAgfQorCSAgICBmbHAtPmZsX25leHQgPSBOVUxMOworCSAg ICBmaWxlc2lubGlzdCsrOwkJLyogQ291bnQgdGhpcyBub2RlICovCisJICAgIHJldHVybihzdWNj ZXNzID0gMSk7CS8qIEZpbmlzaGVkIGFkZGluZyB0aGlzIG5vZGUgKi8KKwl9IGVsc2UgeworCSAg ICBwcmludGYoIlNvcnJ5LCBjYW4ndCBhbGxvY2F0ZSBzcGFjZSBmb3IgbmFtZSIpOworCSAgICBy ZXR1cm4oLTkpOworCX0KKyAgICB9IGVsc2UgeworCXByaW50ZigiU29ycnksIGNhbid0IGFsbG9j YXRlIGZpbGUgbGlzdCBub2RlIik7CisJcmV0dXJuKC05KTsKKyAgICB9CisjZW5kaWYgLyogTk9N U0VORCAqLworfQorI2VuZGlmIC8qIEFERENNRCAqLworCisjaWZuZGVmIE5PSFRUUAkJCQkvKiBI VFRQIG9wcy4uLiAqLworI2lmZGVmIFRDUFNPQ0tFVAorI2RlZmluZSBIVFRQX0dFVCAwCQkJLyog R0VUICovCisjZGVmaW5lIEhUVFBfUFVUIDEJCQkvKiBQVVQgKi8KKyNkZWZpbmUgSFRUUF9QT1Mg MgkJCS8qIFBPU1QgKi8KKyNkZWZpbmUgSFRUUF9JRFggMwkJCS8qIElOREVYICovCisjZGVmaW5l IEhUVFBfSEVEIDQgICAgICAgICAgICAgICAgICAgICAgLyogSEVBRCAqLworI2RlZmluZSBIVFRQ X0RFTCA1ICAgICAgICAgICAgICAgICAgICAgIC8qIERFTEVURSAqLworI2RlZmluZSBIVFRQX0NP TiA2ICAgICAgICAgICAgICAgICAgICAgIC8qIENPTk5FQ1QgKi8KKyNkZWZpbmUgSFRUUF9PUE4g NyAgICAgICAgICAgICAgICAgICAgICAvKiBPUEVOICovCisjZGVmaW5lIEhUVFBfQ0xTIDggICAg ICAgICAgICAgICAgICAgICAgLyogQ0xPU0UgKi8KKworc3RhdGljIHN0cnVjdCBrZXl0YWIgaHR0 cHRhYltdID0geworICAgIHsgImNsb3NlIiwgICBIVFRQX0NMUywgMCB9LAorICAgIHsgImNvbm5l Y3QiLCBIVFRQX0NPTiwgMCB9LAorICAgIHsgImRlbGV0ZSIsICBIVFRQX0RFTCwgMCB9LAorICAg IHsgImdldCIsICAgICBIVFRQX0dFVCwgMCB9LAorICAgIHsgImhlYWQiLCAgICBIVFRQX0hFRCwg MCB9LAorICAgIHsgImluZGV4IiwgICBIVFRQX0lEWCwgMCB9LAorICAgIHsgIm9wZW4iLCAgICBI VFRQX09QTiwgMCB9LAorICAgIHsgInB1dCIsICAgICBIVFRQX1BVVCwgMCB9LAorICAgIHsgInBv c3QiLCAgICBIVFRQX1BPUywgMCB9Cit9Oworc3RhdGljIGludCBuaHR0cHRhYiA9IHNpemVvZiho dHRwdGFiKS9zaXplb2Yoc3RydWN0IGtleXRhYik7CisKKy8qIEhUVFAgc3dpdGNoZXMgKi8KKyNk ZWZpbmUgSFRfU1dfQUcgMAkJCS8qIC9BR0VOVCAqLworI2RlZmluZSBIVF9TV19IRCAxCQkJLyog L0hFQURFUiAqLworI2RlZmluZSBIVF9TV19VUyAyCQkJLyogL1VTRVIgKi8KKyNkZWZpbmUgSFRf U1dfUFcgMwkJCS8qIC9QQVNTV09SRCAqLworI2RlZmluZSBIVF9TV19BUiA0ICAgICAgICAgICAg ICAgICAgICAgIC8qIC9BUlJBWSAqLworI2RlZmluZSBIVF9TV19UUCA1ICAgICAgICAgICAgICAg ICAgICAgIC8qIC9UT1NDUkVFTiAqLworCitzdGF0aWMgc3RydWN0IGtleXRhYiBodHRwc3d0YWJb XSA9IHsKKyAgICB7ICIvYWdlbnQiLCAgICBIVF9TV19BRywgQ01fQVJHIH0sCisjaWZuZGVmIE5P U1BMCisgICAgeyAiL2FycmF5IiwgICAgSFRfU1dfQVIsIENNX0FSRyB9LAorI2VuZGlmIC8qIE5P U1BMICovCisgICAgeyAiL2hlYWRlciIsICAgSFRfU1dfSEQsIENNX0FSRyB9LAorICAgIHsgIi9w YXNzd29yZCIsIEhUX1NXX1BXLCBDTV9BUkcgfSwKKyAgICB7ICIvdG9zY3JlZW4iLCBIVF9TV19U UCwgMCB9LAorICAgIHsgIi91c2VyIiwgICAgIEhUX1NXX1VTLCBDTV9BUkcgfSwKKyAgICB7ICIi LCAwLCAwIH0KK307CitzdGF0aWMgaW50IG5odHRwc3d0YWIgPSBzaXplb2YoaHR0cHN3dGFiKS9z aXplb2Yoc3RydWN0IGtleXRhYikgLSAxOworCisvKiBIVFRQIFBVVC9QT1NUIHN3aXRjaGVzICov CisjZGVmaW5lIEhUX1BQX01UIDAJCQkvKiAvTUlNRS1UWVBFICovCisKK3N0YXRpYyBzdHJ1Y3Qg a2V5dGFiIGh0dHBwdGFiW10gPSB7CisgICAgeyAiL21pbWUtdHlwZSIsIEhUX1BQX01ULCBDTV9B UkcgfSwKKyAgICB7ICIiLCAwLCAwIH0KK307CitzdGF0aWMgaW50IG5odHRwcHRhYiA9IHNpemVv ZihodHRwcHRhYikvc2l6ZW9mKHN0cnVjdCBrZXl0YWIpIC0gMTsKKworI2RlZmluZSBIVFRQX01B WEhEUiA4CisKK3N0YXRpYyBpbnQKK3hkb2h0dHAoYWN0aW9uLCBsZmlsZSwgcmYsIGRmaWxlLCBh Z2VudCwgaGRyLCB1c2VyLCBwYXNzLCBtaW1lLCBhcnJheSwgdHlwZSkKKyAgICBpbnQgYWN0aW9u OworICAgIGNoYXIgKmxmaWxlLCAqcmYsICpkZmlsZSwgKmFnZW50LCAqaGRyLCAqdXNlciwgKnBh c3MsICptaW1lLCBhcnJheTsKKyAgICBpbnQgdHlwZTsKKy8qIHhkb2h0dHAgKi8geworICAgIGlu dCBpLCByYyA9IDA7CisgICAgY2hhciAqIGhkcmxpc3RbSFRUUF9NQVhIRFJdOworICAgIGNoYXIg cmZpbGVbQ0tNQVhQQVRIKzFdOworICAgIGV4dGVybiBpbnQgaHR0cGZkOworCisgICAgLyogQ2hl Y2sgZm9yIGEgdmFsaWQgc3RhdGUgdG8gZXhlY3V0ZSB0aGUgY29tbWFuZCAqLworICAgIGlmIChp bnNlcnZlcikgeworICAgICAgICBwcmludGYoIj9UaGUgSFRUUCBjb21tYW5kIG1heSBub3QgYmUg dXNlZCBmcm9tIHRoZSBJS1NcclxuIik7CisgICAgfSBlbHNlIGlmIChodHRwZmQgPT0gLTEpIHsK KyAgICAgICAgaWYgKGh0dHBfcmVvcGVuKCkgPCAwKQorCSAgcHJpbnRmKCI/Tm8gY29ubmVjdGlv blxuIik7CisgICAgICAgIGVsc2UKKwkgIHJjID0gMTsKKyAgICB9IGVsc2UgeworCXJjID0gMTsK KyAgICB9CisKKyAgICAvKiBJZiB0aGUgY29tbWFuZCBpcyBub3QgdmFsaWQsIGV4aXQgd2l0aCBm YWlsdXJlICovCisgICAgaWYgKHJjID09IDApCisgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7 CisKKyAgICBpZiAoYWN0aW9uICE9IEhUVFBfQ09OICYmIHJmWzBdICE9ICcvJykgeworICAgICAg ICByZmlsZVswXSA9ICcvJzsKKyAgICAgICAgY2tzdHJuY3B5KCZyZmlsZVsxXSxyZixDS01BWFBB VEgpOworICAgIH0gZWxzZSB7CisgICAgICAgIGNrc3RybmNweShyZmlsZSxyZixDS01BWFBBVEgp OworICAgIH0KKyAgICBmb3IgKGkgPSAwOyBpIDwgSFRUUF9NQVhIRFI7IGkrKykJLyogSW5pdGlh bGl6ZSBoZWFkZXIgbGlzdCAqLworICAgICAgaGRybGlzdFtpXSA9IE5VTEw7CisgICAgbWFrZWxp c3QoaGRyLGhkcmxpc3QsSFRUUF9NQVhIRFIpOwkvKiBNYWtlIGhlYWRlciBsaXN0ICovCisKKyNp ZmRlZiBCRVRBREVCVUcKKyAgICBmb3IgKGkgPSAwOyBpIDwgbmh0dHB0YWI7IGkrKykJLyogRmlu ZCBhY3Rpb24ga2V5d29yZCAqLworICAgICAgaWYgKGh0dHB0YWJbaV0ua3d2YWwgPT0gYWN0aW9u KQorCWJyZWFrOworICAgIGlmIChpID09IG5odHRwdGFiKSB7CQkvKiBTaG91bGRuJ3QgaGFwcGVu Li4uICovCisJcHJpbnRmKCI/SW52YWxpZCBhY3Rpb24gLSAlZFxuIixhY3Rpb24pOworCXJldHVy bigwKTsJCQkvKiBGYWlsdXJlICovCisgICAgfQorCisgICAgcHJpbnRmKCJIVFRQIGFjdGlvbjog ICVzXG4iLGh0dHB0YWJbaV0ua3dkKTsKKyAgICBwcmludGYoIiBBZ2VudDogICAgICAgJXNcbiIs YWdlbnQgPyBhZ2VudCA6ICIobnVsbCkiKTsKKworICAgIGlmIChoZHJsaXN0WzFdKSB7CisJcHJp bnRmKCIgSGVhZGVyIGxpc3Q6IDEuICVzXG4iLGhkcmxpc3RbMF0pOworCWZvciAoaSA9IDE7IGkg PCBIVFRQX01BWEhEUiAmJiBoZHJsaXN0W2ldOyBpKyspCisJICBwcmludGYoIiUxNWQuICVzXG4i LGkrMSxoZHJsaXN0W2ldKTsKKyAgICB9IGVsc2UKKyAgICAgIHByaW50ZigiIEhlYWRlcjogICAg ICAlc1xuIixoZHJsaXN0WzBdID8gaGRybGlzdFswXSA6ICIobnVsbCkiKTsKKworICAgIHByaW50 ZigiIFVzZXI6ICAgICAgICAlc1xuIix1c2VyID8gdXNlciA6ICIobnVsbCkiKTsKKyNpZmRlZiBD T01NRU5UCisgICAgcHJpbnRmKCIgUGFzc3dvcmQ6ICAgICVzXG4iLHBhc3MgPyBwYXNzIDogIihu dWxsKSIpOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKworI2lmbmRlZiBOT1NQTAorICAgIGlmIChh cnJheSkKKyAgICAgIHByaW50ZigiIEFycmF5OiAgICAgICBcXCUlJWNbXVxuIiwgYXJyYXkpOwor ICAgIGVsc2UKKyAgICAgIHByaW50ZigiIEFycmF5OiAgICAgICAobm9uZSlcbiIpOworI2VuZGlm IC8qIE5PU1BMICovCisKKyAgICBpZiAoYWN0aW9uID09IEhUVFBfUFVUIHx8IGFjdGlvbiA9PSBI VFRQX1BPUykKKyAgICAgIHByaW50ZigiIE1pbWUtdHlwZTogICAlc1xuIixtaW1lID8gbWltZSA6 ICIobnVsbCkiKTsKKworICAgIHByaW50ZigiIExvY2FsIGZpbGU6ICAlc1xuIixsZmlsZSA/IGxm aWxlIDogIihudWxsKSIpOworICAgIHByaW50ZigiIFJlbW90ZSBmaWxlOiAlc1xuIixyZmlsZSA/ IHJmaWxlIDogIihudWxsKSIpOworICAgIHByaW50ZigiIERlc3RpbmF0aW9uIGZpbGU6ICVzXG4i LGRmaWxlID8gZGZpbGUgOiAiKG51bGwpIik7CisjZW5kaWYgLyogQkVUQURFQlVHICovCisKKyAg ICAvKiBUaGUgaHR0cF94eHh4KCkgZnVuY3Rpb25zIHJldHVybiAwIG9uIHN1Y2Nlc3MsIC0xIG9u IGZhaWx1cmUgKi8KKyAgICBzd2l0Y2ggKGFjdGlvbikgeworICAgICAgY2FzZSBIVFRQX0NPTjog eworCSAgZXh0ZXJuIGludCB0dHlmZDsKKwkgIHJjID0gaHR0cF9jb25uZWN0KGh0dHBmZCxhZ2Vu dCxoZHJsaXN0LHVzZXIscGFzcyxhcnJheSxyZmlsZSk7CisJICBicmVhazsKKyAgICAgIH0KKyAg ICAgIGNhc2UgSFRUUF9ERUw6CisgICAgICAgIHJjID0gaHR0cF9kZWxldGUoYWdlbnQsaGRybGlz dCx1c2VyLHBhc3MsYXJyYXkscmZpbGUpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgSFRU UF9HRVQ6CisgICAgICAgIHJjID0gaHR0cF9nZXQoYWdlbnQsaGRybGlzdCx1c2VyLHBhc3MsYXJy YXksbGZpbGUscmZpbGUsdHlwZSk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBIVFRQX0hF RDoKKyAgICAgICAgcmMgPSBodHRwX2hlYWQoYWdlbnQsaGRybGlzdCx1c2VyLHBhc3MsYXJyYXks bGZpbGUscmZpbGUsdHlwZSk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBIVFRQX1BVVDoK KyAgICAgICAgcmMgPSBodHRwX3B1dChhZ2VudCxoZHJsaXN0LG1pbWUsdXNlcixwYXNzLGFycmF5 LGxmaWxlLHJmaWxlLGRmaWxlLAorCQkgICAgICB0eXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAg ICBjYXNlIEhUVFBfUE9TOgorICAgICAgICByYyA9IGh0dHBfcG9zdChhZ2VudCxoZHJsaXN0LG1p bWUsdXNlcixwYXNzLGFycmF5LGxmaWxlLHJmaWxlLGRmaWxlLAorCQkgICAgICAgdHlwZSk7Cisg ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBIVFRQX0lEWDoKKyAgICAgICAgcmMgPSBodHRwX2lu ZGV4KGFnZW50LGhkcmxpc3QsdXNlcixwYXNzLGFycmF5LGxmaWxlLHJmaWxlLHR5cGUpOworICAg ICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJjID0gLTE7CisgICAgfQorICAg IHJldHVybihyYyA9PSAwID8gMSA6IDApOwkgICAgICAgIC8qIFN1Y2Nlc3MgaXMgc2V0IGJ5IGNh bGxlciAqLworfQorI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLworI2VuZGlmIC8qIE5PSFRUUCAqLwor CisjaWZuZGVmIE5PU1BMCQkJCS8qIEFSUkFZIG9wcy4uLiAqLworc3RhdGljIHN0cnVjdCBrZXl0 YWIgYXJyYXl0YWJbXSA9IHsKKyAgICB7ICJjbGVhciIsICAgICBBUlJfQ0xSLCAwIH0sCisgICAg eyAiY29weSIsICAgICAgQVJSX0NQWSwgMCB9LAorICAgIHsgImRjbCIsICAgICAgIEFSUl9EQ0ws IENNX0lOViB9LAorICAgIHsgImRlY2xhcmUiLCAgIEFSUl9EQ0wsIDAgfSwKKyAgICB7ICJkZXN0 cm95IiwgICBBUlJfRFNULCBDTV9JTlYgfSwKKyAgICB7ICJlcXVhdGUiLCAgICBBUlJfRVFVLCBD TV9JTlYgfSwKKyAgICB7ICJsaW5rIiwgICAgICBBUlJfRVFVLCAwIH0sCisgICAgeyAicmVzaXpl IiwgICAgQVJSX1JTWiwgMCB9LAorICAgIHsgInNldCIsICAgICAgIEFSUl9TRVQsIDAgfSwKKyNp Zm5kZWYgTk9TSE9XCisgICAgeyAic2hvdyIsICAgICAgQVJSX1NITywgMCB9LAorI2VuZGlmIC8q IE5PU0hPVyAqLworICAgIHsgInNvcnQiLCAgICAgIEFSUl9TUlQsIDAgfSwKKyAgICB7ICJ1bmRl Y2xhcmUiLCBBUlJfRFNULCAwIH0sCisgICAgeyAiIiwgMCwgMCB9Cit9Oworc3RhdGljIGludCBu YXJyYXl0YWIgPSBzaXplb2YoYXJyYXl0YWIpL3NpemVvZihzdHJ1Y3Qga2V5dGFiKSAtIDE7CisK KyNpZmRlZiBDS0xFQVJOCitzdGF0aWMgc3RydWN0IGtleXRhYiBsZWFybnN3aVtdID0geworICAg IHsgIi9jbG9zZSIsICAgIDIsIDAgfSwKKyAgICB7ICIvb2ZmIiwgICAgICAwLCAwIH0sCisgICAg eyAiL29uIiwgICAgICAgMSwgMCB9Cit9OworI2VuZGlmIC8qIENLTEVBUk4gKi8KKworaW50Cith cnJheWl0b2EoeCkgaW50IHg7IHsJCQkvKiBBcnJheSBpbmRleCB0byBhcnJheSBsZXR0ZXIgKi8K KyAgICBpZiAoeCA9PSAxKQorICAgICAgcmV0dXJuKDY0KTsKKyAgICBlbHNlIGlmICh4IDwgMCB8 fCB4ID4gKDEyMiAtIEFSUkFZQkFTRSkpCisgICAgICByZXR1cm4oLTEpOworICAgIGVsc2UKKyAg ICAgIHJldHVybih4ICsgQVJSQVlCQVNFKTsKK30KKworaW50CithcnJheWF0b2koYykgaW50IGM7 IHsJCQkvKiBBcnJheSBsZXR0ZXIgdG8gYXJyYXkgaW5kZXggKi8KKyAgICBpZiAoYyA9PSA2NCkK KyAgICAgIGMgPSA5NjsKKyAgICBpZiAoYyA+IDYzICYmIGMgPCA5MSkKKyAgICAgIGMgKz0gMzI7 CisgICAgaWYgKGMgPCBBUlJBWUJBU0UgfHwgYyA+IDEyMikKKyAgICAgIHJldHVybigtMSk7Cisg ICAgcmV0dXJuKGMgLSBBUlJBWUJBU0UpOworfQorCitzdGF0aWMgaW50CQkJCS8qIERlY2xhcmUg YW4gYXJyYXkgKi8KK2RvZGNsKGN4KSBpbnQgY3g7IHsKKyAgICBpbnQgaSwgbiwgdiwgbG8sIGhp LCByYyA9IDA7CisgICAgaW50IGlzZHluYW1pYyA9IDA7CisgICAgY2hhciB0bXBidWZbNjRdOwor ICAgIGNoYXIgKiogcCA9IE5VTEw7CisgICAgY2hhciB0bXBbNjRdOwkJCS8qIExvY2FsIHRlbXBv cmFyeSBzdHJpbmcgYnVmZmVyICovCisgICAgaWYgKCh5ID0gY21mbGQoIkFycmF5IG5hbWUiLCIi LCZzLE5VTEwpKSA8IDApIHsgLyogUGFyc2UgYXJyYXkgbmFtZSAqLworCWlmICh5ID09IC0zKSB7 CisJICAgIHByaW50ZigiP0FycmF5IG5hbWUgcmVxdWlyZWRcbiIpOworCSAgICByZXR1cm4oLTkp OworCX0gZWxzZSByZXR1cm4oeSk7CisgICAgfQorICAgIGNrc3RybmNweShsaW5lLHMsTElOQlVG U0laKTsKKyAgICBzID0gbGluZTsKKyAgICB4ID0gYXJyYXlib3VuZHMocywmbG8sJmhpKTsJCS8q IENoZWNrIHN5bnRheCBhbmQgZ2V0IGJvdW5kcyAqLworICAgIGRlYnVnKEYxMTEsImRvZGNsIGFy cmF5Ym91bmRzIixzLHgpOworICAgIGlmICh4IDwgMCkgewkJCS8qIEVycm9yIC0gTWF5YmUgaXQn cyBhIHZhcmlhYmxlICovCisJY2hhciAqIHA7CQkJLyogd2hvc2UgdmFsdWUgaXMgYW4gYXJyYXkg bmFtZSAqLworCWludCBuOworCXAgPSB0bXBidWY7CisJbiA9IDYzOworCXBbMF0gPSBOVUw7CisJ aWYgKHNbMF0gPT0gQ01EUSAmJiBzWzFdID09ICcmJykKKwkgIHMrKzsKKwlpZiAoenpzdHJpbmco cywmcCwmbikgPiAtMSkgeworCSAgICBzID0gdG1wYnVmOworCSAgICB4ID0gYXJyYXlib3VuZHMo cywmbG8sJmhpKTsKKwkgICAgZGVidWcoRjExMSwiZG9kY2wgYXJyYXlib3VuZHMgMiIscyx4KTsK Kwl9CisJaWYgKHggPCAwKSB7CisJICAgIHByaW50ZigiP0JhZCBhcnJheSBuYW1lIC0gXCIlc1wi XG4iLHMpOworCSAgICByZXR1cm4oLTkpOworCX0KKyAgICB9CisgICAgZGVidWcoRjEwMSwiZG9k Y2wgaGkiLCIiLGhpKTsKKyAgICBkZWJ1ZyhGMTAxLCJkb2RjbCBsbyIsIiIsbG8pOworICAgIGRl YnVnKEYxMDEsImRvZGNsIGxvKzEiLCIiLGxvKzEpOworCisgICAgaWYgKGxvID09IC0xICYmIGhp ID09IC0xKSB7CQkvKiBIYXZlIGdvb2QgYXJyYXkgbmFtZSBhbmQgYm91bmRzICovCisJaXNkeW5h bWljID0gMTsKKwluID0gQ01EQkwgLyA1OworICAgIH0gZWxzZSBpZiAoaGkgPiAtMSkgeworCXBy aW50ZigiP1NlZ21lbnQgbm90YXRpb24gbm90IGFsbG93ZWQgaW4gYXJyYXkgZGVjbGFyYXRpb25z XG4iKTsKKwlyZXR1cm4oLTkpOworICAgIH0gZWxzZSBpZiAoKGxvKzEpIDwgMCkgeworCWRlYnVn KEYxMDEsImRvZGNsIHVuZGVyZmxvdyIsIiIsbG8rMSk7CisgICAgICAgIHByaW50ZigiP0RpbWVu c2lvbiB1bmRlcmZsb3dcbiIpOworICAgICAgICByZXR1cm4oLTkpOworICAgIH0gZWxzZQorICAg ICAgbiA9IGxvOworICAgIHggPSBhcnJheWl0b2EoeCk7CisgICAgaWYgKGN4ID09IFhYVU5EQ0wp IHsKKwluID0gMDsKKwl2ID0gMDsKKwlpZiAoKHkgPSBjbWNmbSgpKSA8IDApCisJICByZXR1cm4o eSk7CisgICAgfSBlbHNlIHsKKwlwID0gKGNoYXIgKiopbWFsbG9jKHNpemVvZihjaGFyICoqKSoo bisxKSk7CisJaWYgKCFwKSB7CisJICAgIHByaW50ZigiP01lbW9yeSBhbGxvY2F0aW9uIGVycm9y XG4iKTsKKwkgICAgcmV0dXJuKC05KTsKKwl9CisJdiA9IDA7CQkJCS8qIEhpZ2hlc3QgaW5pdGlh bGl6ZWQgbWVtYmVyICovCisJcFswXSA9IE5VTEw7CQkJLyogRWxlbWVudCAwICovCisJa2VlcGFs bGNoYXJzID0gMTsKKwl3aGlsZSAobiA+IDAgJiYgdiA8IG4pIHsJLyogUGFyc2UgaW5pdGlhbGl6 ZXJzICovCisJICAgIHBbdisxXSA9IE5VTEw7CisJICAgIGNrbWFreG1zZyh0bXAsCisJCSAgICAg IDY0LAorCQkgICAgICAiSW5pdGlhbCB2YWx1ZSBmb3IgXFwmIiwKKwkJICAgICAgY2tjdG9hKChj aGFyKXgpLAorCQkgICAgICAiWyIsCisJCSAgICAgIGNraXRvYSh2KzEpLAorCQkgICAgICAiXSIs CisJCSAgICAgIE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwKKwkJICAgICAgKTsK KwkgICAgCisJICAgIHJjID0gY21mbGQoKGNoYXIgKil0bXAsIiIsJnMseHhzdHJpbmcpOyAvKiBH ZXQgZmllbGQgKi8KKwkgICAgaWYgKHJjIDwgMCkgewkJLyogRXJyb3IuLi4gKi8KKwkJaWYgKHJj ID09IC0zKSB7CQkvKiBFbXB0eSBlbGVtZW50ICovCisJCSAgICBpZiAoY21mbGdzID09IDEpCS8q IGJlY2F1c2UgZW5kIG9mIGxpbmU/ICovCisJCSAgICAgIGJyZWFrOwkJLyogWWVzLCBkb25lIGlu aXRpYWxpemluZyAqLworCQkgICAgZWxzZQkJLyogTm8sIGl0J3MganVzdCBlbXB0eSAqLworCQkg ICAgICBjb250aW51ZTsJCS8qIEdvIG9uIHRvIG5leHQgb25lLiAqLworCQl9IGVsc2UgewkJLyog T3RoZXIgcGFyc2UgZXJyb3IgKi8KKwkJICAgIGdvdG8gZGNseDsJCS8qIEdvIGZyZWUgdGVtcCBw b2ludGVycyAqLworCQl9CisJICAgIH0KKwkgICAgcmMgPSAxOworCSAgICBpZiAodiA9PSAwICYm ICFzdHJjbXAocywiPSIpKSAvKiBTa2lwIHRoZSA9IHNpZ24uICovCisJICAgICAgY29udGludWU7 CisJICAgIHMgPSBicnN0cmlwKHMpOwkJLyogU3RyaXAgYW55IGJyYWNlcyAqLworCSAgICBtYWtl c3RyKCYocFsrK3ZdKSxzKTsKKwl9CisJa2VlcGFsbGNoYXJzID0gMDsKKwlpZiAoKHkgPSBjbXR4 dCgiQ2FycmlhZ2UgcmV0dXJuIHRvIGNvbmZpcm0iLCIiLCZzLE5VTEwpKSA8IDApCisJICByZXR1 cm4oeSk7CisJaWYgKGlzZHluYW1pYykKKwkgIG4gPSB2OworICAgIH0KKyAgICBpZiAoZGNsYXJy YXkoKGNoYXIpeCxuKSA8IDApIHsJLyogRGVjbGFyZSB0aGUgYXJyYXkgKi8KKwlwcmludGYoIj9E ZWNsYXJlIGZhaWxlZFxuIik7CisJZ290byBkY2x4OworICAgIH0KKyAgICBmb3IgKGkgPSAxOyBp IDw9IHY7IGkrKykgewkJLyogQWRkIGFueSBpbml0aWFsIHZhbHVlcyAqLworCXRtcFswXSA9ICcm JzsKKwlja21ha21zZygmdG1wWzFdLDYzLGNrY3RvYSgoY2hhcil4KSwiWyIsY2tpdG9hKGkpLCJd Iik7CisJaWYgKGFkZG1hYyh0bXAscFtpXSkgPCAwKSB7CisJICAgIHByaW50ZigiQXJyYXkgaW5p dGlhbGl6YXRpb24gZXJyb3I6ICVzICVzXG4iLHRtcCxwW2ldKTsKKwkgICAgcmMgPSAtOTsKKwkg ICAgZ290byBkY2x4OworCX0KKyAgICB9CisgIGRjbHg6CisgICAgaWYgKHApIHsKKwlmb3IgKGkg PSAxOyBpIDw9IHY7IGkrKykKKwkgIGlmIChwW2ldKSBmcmVlKHBbaV0pOworCWZyZWUoKGNoYXIg KilwKTsKKyAgICB9CisgICAgZGVidWcoRjEwMSwiRENMIHJjIiwiIixyYyk7CisgICAgcmV0dXJu KHN1Y2Nlc3MgPSByYyk7Cit9CisKK3N0YXRpYyBpbnQKK3JzemFycmF5KCkgeworICAgIGludCBp LCB4LCB5LCBuLCBsbywgaGksIGlzbGluayA9IC0xOworICAgIGNoYXIgYywgKiBzLCAqKiBhcCA9 IE5VTEw7CisgICAgaWYgKCh4ID0gY21mbGQoIkFycmF5IG5hbWUiLCIiLCZzLE5VTEwpKSA8IDAp IHsgLyogUGFyc2UgYXJyYXkgbmFtZSAqLworCWlmICh4ID09IC0zKSB7CisJICAgIHByaW50Zigi P0FycmF5IG5hbWUgcmVxdWlyZWRcbiIpOworCSAgICByZXR1cm4oLTkpOworCX0gZWxzZSByZXR1 cm4oeCk7CisgICAgfQorICAgIGNrc3RybmNweShsaW5lLHMsTElOQlVGU0laKTsJLyogTWFrZSBz YWZlIGNvcHkgb2YgbmFtZSAqLworICAgIHMgPSBsaW5lOworICAgIHggPSBhcnJheWJvdW5kcyhz LCZsbywmaGkpOworICAgIGlmICh4IDwgMCkgewkJCS8qIFBhcnNlIHRoZSBuYW1lLCBnZXQgaW5k ZXggKi8KKwlwcmludGYoIj9CYWQgYXJyYXkgcmVmZXJlbmNlIC0gXCIlc1wiXG4iLCBzKTsKKwly ZXR1cm4oLTkpOworICAgIH0KKyAgICBpZiAobG8gPCAwICYmIGhpIDwgMCkgeworCXkgPSBjbW51 bSgiTmV3IHNpemUiLCIiLDEwLCZsbyx4eHN0cmluZyk7CisJaWYgKHkgPCAwKSB7CisJICAgIGlm ICh5ID09IC0zKQorCSAgICAgIHByaW50ZigiP05ldyBzaXplIHJlcXVpcmVkXG4iKTsKKwkgICAg cmV0dXJuKHkpOworCX0KKyAgICB9CisgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKQorICAgICAg cmV0dXJuKHkpOworICAgIGlmIChhX2xpbmtbeF0gPiAtMSkgewkJLyogTGluaz8gKi8KKwlpc2xp bmsgPSB4OwkJCS8qIFllcyBmb2xsb3cgaXQgKi8KKwl4ID0gYV9saW5rW3hdOwkJCS8qIGFuZCBy ZW1lbWJlciAqLworICAgIH0KKyAgICBpZiAoIWFfcHRyW3hdKSB7CisJcHJpbnRmKCI/QXJyYXkg bm90IGRlY2xhcmVkIC0gXCIlc1wiXG4iLCBzKTsKKwlyZXR1cm4oLTkpOworICAgIH0KKyAgICBp ZiAobG8gPCAwKSB7CisJcHJpbnRmKCI/TmV3IHNpemUgcmVxdWlyZWRcbiIpOworCXJldHVybigt OSk7CisgICAgfQorICAgIGlmIChoaSA+IC0xKSB7CisJcHJpbnRmKCI/QXJyYXkgc2VnbWVudHMg bm90IGFsbG93ZWQgZm9yIHRoaXMgb3BlcmF0aW9uXG4iKTsKKwlyZXR1cm4oLTkpOworICAgIH0K KyAgICBjID0gYXJyYXlpdG9hKHgpOwkJCS8qIEdldCBhcnJheSBsZXR0ZXIgKi8KKyAgICBpZiAo YyA9PSAnQCcpIHsJCQkvKiBBcmd1bWVudCB2ZWN0b3IgYXJyYXkgb2ZmIGxpbWl0cyAqLworCXBy aW50ZigiP1NvcnJ5LCBcXCZAW10gaXMgcmVhZC1vbmx5XG4iKTsKKwlyZXR1cm4oLTkpOworICAg IH0KKyAgICBpZiAobG8gPT0gMCkgewkJCS8qIElmIG5ldyBzaXplIGlzIDAuLi4gKi8KKwlkY2xh cnJheShjLDApOwkJCS8qIFVuZGVjbGFyZSB0aGUgYXJyYXkgKi8KKwlyZXR1cm4oc3VjY2VzcyA9 IDEpOworICAgIH0KKyAgICBuID0gYV9kaW1beF07CQkJLyogQ3VycmVudCBzaXplICovCisgICAg YXAgPSAoY2hhciAqKikgbWFsbG9jKChsbysxKSAqIHNpemVvZihjaGFyICopKTsgLyogTmV3IGFy cmF5ICovCisgICAgeSA9IChuIDwgbG8pID8gbiA6IGxvOworICAgIGZvciAoaSA9IDA7IGkgPD0g eTsgaSsrKQkJLyogQ29weSB0aGUgcGFydCB0aGF0IGZpdHMgKi8KKyAgICAgIGFwW2ldID0gYV9w dHJbeF1baV07CisgICAgaWYgKG4gPCBsbykgewkJCS8qIElmIG9yaWdpbmFsIGFycmF5IHNtYWxs ZXIgKi8KKwlmb3IgKDsgaSA8PSBsbzsgaSsrKQkJLyogaW5pdGlhbGl6ZSBleHRyYSBlbGVtZW50 cyBpbiAqLworCSAgYXBbaV0gPSBOVUxMOwkJCS8qIG5ldyBhcnJheSB0byBOVUxMLiAqLworICAg IH0gZWxzZSBpZiAobiA+IGxvKSB7CQkvKiBJZiBuZXcgYXJyYXkgc21hbGxlciAqLworCWZvciAo OyBpIDw9IGxvOyBpKyspCQkvKiBkZWFsbG9jYXRlIGxlZnRvdmVyIGVsZW1lbnRzICovCisJICBt YWtlc3RyKCYoYV9wdHJbeF1baV0pLE5VTEwpOwkvKiBmcm9tIG9yaWdpbmFsIGFycmF5LiAqLwor ICAgIH0KKyAgICBmcmVlKChjaGFyICopYV9wdHJbeF0pOwkJLyogRnJlZSBvcmlnaW5hbCBhcnJh eSBsaXN0ICovCisgICAgYV9wdHJbeF0gPSBhcDsJCQkvKiBSZXBsYWNlIHdpdGggbmV3IG9uZSAq LworICAgIGFfZGltW3hdID0gbG87CQkJLyogUmVjb3JkIHRoZSBuZXcgZGltZW5zaW9uICovCisg ICAgaWYgKGlzbGluayA+IC0xKSB7CQkJLyogV2FzIHRoaXMgYSBsaW5rPyAqLworCWFfcHRyW2lz bGlua10gPSBhcDsJCS8qIElmIHNvIHBvaW50IHRvIHRoZSByZXNpemVkIGFycmF5ICovCisJYV9k aW1baXNsaW5rXSA9IGxvOworICAgIH0gZWxzZSB7CQkJCS8qIElmIG5vdCBhcmUgdGhlcmUgbGlu a3MgdG8gaGVyZT8gKi8KKwlmb3IgKGkgPSAwOyBpIDwgKGludCkgJ3onIC0gQVJSQVlCQVNFOyBp KyspIHsgLyogQW55IGxpbmtlZCBhcnJheXM/ICovCisJICAgIGlmIChpICE9IHggJiYgYV9saW5r W2ldID09IHgpIHsgICAgIC8qIEZpbmQgYW5kIHVwZGF0ZSB0aGVtICovCisJCWFfcHRyW2ldID0g YXA7CisJCWFfZGltW2ldID0gbG87CisJICAgIH0KKwl9CisgICAgfQorICAgIHJldHVybihzdWNj ZXNzID0gMSk7Cit9CisKK3N0YXRpYyBpbnQKK2NvcHlhcnJheSgpIHsKKyAgICBpbnQgaSwgaiwg eDEsIGxvMSwgaGkxLCB4MiwgbG8yLCBoaTIsIHdob2xlID0gMDsKKyAgICBjaGFyIGMxLCBjMiwg KiBhMSwgKiBhMjsKKyAgICBpZiAoKHkgPSBjbWZsZCgiTmFtZSBvZiBzb3VyY2UgYXJyYXkiLCIi LCZzLE5VTEwpKSA8IDApCisgICAgICByZXR1cm4oeSk7CisgICAgY2tzdHJuY3B5KGxpbmUscyxM SU5CVUZTSVopOworICAgIGExID0gbGluZTsKKyAgICBpZiAoKHgxID0gYXJyYXlib3VuZHMoYTEs JmxvMSwmaGkxKSkgPCAwKSB7CisJcHJpbnRmKCI/QmFkIGFycmF5IHJlZmVyZW5jZSAtIFwiJXNc IlxuIiwgYTEpOworCXJldHVybigtOSk7CisgICAgfSBlbHNlIGlmICghYV9wdHJbeDFdKSB7CisJ cHJpbnRmKCI/QXJyYXkgbm90IGRlY2xhcmVkIC0gXCIlc1wiXG4iLCBhMSk7CisJcmV0dXJuKC05 KTsKKyAgICB9CisgICAgYzEgPSBhcnJheWl0b2EoeDEpOworCisgICAgaWYgKCh5ID0gY21mbGQo Ik5hbWUgb2YgZGVzdGluYXRpb24gYXJyYXkiLCIiLCZzLE5VTEwpKSA8IDApCisgICAgICByZXR1 cm4oeSk7CisgICAgY2tzdHJuY3B5KHRtcGJ1ZixzLFRNUEJVRlNJWik7CisgICAgYTIgPSB0bXBi dWY7CisgICAgaWYgKCh4MiA9IGFycmF5Ym91bmRzKGEyLCZsbzIsJmhpMikpIDwgMCkgeworCXBy aW50ZigiP0JhZCBhcnJheSByZWZlcmVuY2UgLSBcIiVzXCJcbiIsIGEyKTsKKwlyZXR1cm4oLTkp OworICAgIH0KKyAgICBjMiA9IGFycmF5aXRvYSh4Mik7CisKKyAgICBpZiAoKHggPSBjbWNmbSgp KSA8IDApCisgICAgICByZXR1cm4oeCk7CisKKyAgICBpZiAoYzIgPT0gJ0AnKSB7CQkJLyogQXJn dW1lbnQgdmVjdG9yIGFycmF5IG9mZiBsaW1pdHMgKi8KKwlwcmludGYoIj9Tb3JyeSwgXFwmQFtd IGlzIHJlYWQtb25seVxuIik7CisJcmV0dXJuKC05KTsKKyAgICB9CisgICAgaWYgKGxvMSA8IDAg JiYgbG8yIDwgMCAmJiBoaTEgPCAwICYmIGhpMiA8IDApIC8qIFNwZWNpYWwgY2FzZSBmb3IgKi8K KyAgICAgIHdob2xlID0gMTsJCQkgICAgICAgICAgLyogd2hvbGUgYXJyYXkuLi4gKi8KKworICAg IGlmIChsbzEgPCAwKSBsbzEgPSB3aG9sZSA/IDAgOiAxOwkvKiBTdXBwbHkgbG93ZXIgYm91bmQg b2Ygc291cmNlICovCisgICAgaWYgKGhpMSA8IDApIGhpMSA9IGFfZGltW3gxXTsJLyogU3VwcGx5 IHVwcGVyIGJvdW5kIG9mIHNvdXJjZSAqLworICAgIGlmIChsbzIgPCAwKSBsbzIgPSB3aG9sZSA/ IDAgOiAxOwkvKiBMb3dlciBib3VuZCBvZiB0YXJnZXQgKi8KKyAgICBpZiAoaGkyIDwgMCkgaGky ID0gbG8yICsgaGkxIC0gbG8xOwkvKiBVcHBlciBib3VuZCBvZiB0YXJnZXQgKi8KKyAgICBpZiAo YV9wdHJbeDJdKSB7CQkJLyogVGFyZ2V0IGFycmF5IGlzIGFscmVhZHkgZGVjbGFyZWQ/ICovCisJ aWYgKGhpMiA+IGFfZGltW3gyXSkJCS8qIElmIHVwcGVyIGJvdW5kIG91dCBvZiByYW5nZSAqLwor CSAgaGkyID0gYV9kaW1beDJdOwkJLyogc2hyaW5rIHRvIGZpdCAqLworICAgIH0gZWxzZSB7CQkJ CS8qIE90aGVyd2lzZS4uLiAqLworCXgyID0gZGNsYXJyYXkoYzIsIGhpMik7CQkvKiBkZWNsYXJl IHRoZSB0YXJnZXQgYXJyYXkgKi8KKyAgICB9CisgICAgZm9yIChpID0gbG8xLCBqID0gbG8yOyBp IDw9IGhpMSAmJiBqIDw9IGhpMjsgaSsrLGorKykgeyAvKiBDb3B5ICovCisJbWFrZXN0cigmKGFf cHRyW3gyXVtqXSksYV9wdHJbeDFdW2ldKTsKKyAgICB9CisgICAgcmV0dXJuKHN1Y2Nlc3MgPSAx KTsKK30KKworc3RhdGljIGludAkJCQkvKiBVbmRlY2xhcmUgYW4gYXJyYXkgKi8KK3VuYXJyYXko KSB7CisgICAgaW50IHgsIHksIG4sIHJjID0gMDsKKyAgICBjaGFyIGMsICogczsKKworICAgIGlm ICgoeSA9IGNtZmxkKCJBcnJheSBuYW1lIiwiIiwmcyxOVUxMKSkgPCAwKSB7IC8qIFBhcnNlIGFy cmF5IG5hbWUgKi8KKwlpZiAoeSA9PSAtMykgeworCSAgICBwcmludGYoIj9BcnJheSBuYW1lIHJl cXVpcmVkXG4iKTsKKwkgICAgcmV0dXJuKC05KTsKKwl9IGVsc2UgcmV0dXJuKHkpOworICAgIH0K KyAgICBja3N0cm5jcHkobGluZSxzLExJTkJVRlNJWik7CS8qIE1ha2Ugc2FmZSBjb3B5IG9mIG5h bWUgKi8KKyAgICBzID0gbGluZTsKKyAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApCisgICAgICBy ZXR1cm4oeSk7CisgICAgaWYgKCh4ID0gYXJyYXlib3VuZHMocywmeSwmbikpIDwgMCkgeyAvKiBQ YXJzZSB0aGUgbmFtZSwgZ2V0IGluZGV4ICovCisJcHJpbnRmKCI/QmFkIGFycmF5IHJlZmVyZW5j ZSAtIFwiJXNcIlxuIiwgcyk7CisJcmV0dXJuKC05KTsKKyAgICB9CisgICAgaWYgKHkgPiAwIHx8 IG4gPiAwKSB7CisJcHJpbnRmKCI/UGFydGlhbCBhcnJheXMgY2FuIG5vdCBiZSBkZXN0cm95ZWRc biIpOworCXJldHVybigtOSk7CisgICAgfQorICAgIGMgPSBhcnJheWl0b2EoeCk7CQkJLyogR2V0 IGFycmF5IGxldHRlciAqLworICAgIGlmIChhX3B0clt4XSkgewkJCS8qIElmIGFycmF5IGlzIGRl Y2xhcmVkICovCisJaWYgKGMgPT0gJ0AnKSB7CQkJLyogQXJndW1lbnQgdmVjdG9yIGFycmF5IG9m ZiBsaW1pdHMgKi8KKwkgICAgcHJpbnRmKCI/U29ycnksIFxcJkBbXSBpcyByZWFkLW9ubHlcbiIp OworCSAgICByZXR1cm4oLTkpOworCX0KKwlyYyA9IGRjbGFycmF5KGMsLTEpOwkJLyogVW5kZWNs YXJlIHRoZSBhcnJheSAqLworICAgIH0gZWxzZQkJCQkvKiBJdCB3YXNuJ3QgZGVjbGFyZWQgKi8K KyAgICAgIHJjID0gMTsKKyAgICBpZiAocmMgPiAtMSkgewkJCS8qIFNldCByZXR1cm4gY29kZSBh bmQgc3VjY2VzcyAqLworCXN1Y2Nlc3MgPSAxOworCXJjID0gMTsKKyAgICB9IGVsc2UgeworCXN1 Y2Nlc3MgPSAwOworCXByaW50ZigiP0ZhaWxlZCAtIGRlc3Ryb3kgXCJcXCYlY1tdXCJcbiIsIGMp OworCXJjID0gLTk7CisgICAgfQorICAgIHJldHVybihyYyk7Cit9CisKK3N0YXRpYyBpbnQKK2Ns cmFycmF5KGN4KSBpbnQgY3g7IHsKKyAgICBpbnQgaSwgeCwgbG8sIGhpOworICAgIGNoYXIgYywg KiBzLCAqIHZhbCA9IE5VTEw7CisKKyAgICBpZiAoKHggPSBjbWZsZCgiQXJyYXkgbmFtZSIsIiIs JnMsTlVMTCkpIDwgMCkgeyAvKiBQYXJzZSBhcnJheSBuYW1lICovCisJaWYgKHggPT0gLTMpIHsK KwkgICAgcHJpbnRmKCI/QXJyYXkgbmFtZSByZXF1aXJlZFxuIik7CisJICAgIHJldHVybigtOSk7 CisJfSBlbHNlIHJldHVybih4KTsKKyAgICB9CisgICAgY2tzdHJuY3B5KGxpbmUscyxMSU5CVUZT SVopOwkvKiBNYWtlIHNhZmUgY29weSBvZiBuYW1lICovCisgICAgcyA9IGxpbmU7CisgICAgaWYg KGN4ID09IEFSUl9TRVQpIHsJCS8qIFNFVCAqLworCWlmICgoeCA9IGNtdHh0KCJWYWx1ZSIsIiIs JnZhbCx4eHN0cmluZykpIDwgMCkKKwkgIHJldHVybih4KTsKKwlja3N0cm5jcHkodG1wYnVmLHZh bCxUTVBCVUZTSVopOyAvKiBWYWx1ZSB0byBzZXQgKi8KKwl2YWwgPSB0bXBidWY7CisJaWYgKCEq dmFsKSB2YWwgPSBOVUxMOworICAgIH0gZWxzZSBpZiAoKHggPSBjbWNmbSgpKSA8IDApCS8qIENM RUFSICovCisgICAgICByZXR1cm4oeCk7CisKKyAgICBpZiAoKHggPSBhcnJheWJvdW5kcyhzLCZs bywmaGkpKSA8IDApIHsgLyogUGFyc2UgdGhlIG5hbWUgKi8KKwlwcmludGYoIj9CYWQgYXJyYXkg cmVmZXJlbmNlIC0gXCIlc1wiXG4iLCBzKTsKKwlyZXR1cm4oLTkpOworICAgIH0KKyAgICBjID0g YXJyYXlpdG9hKHgpOwkJCS8qIEdldCBhcnJheSBsZXR0ZXIgKi8KKyAgICBpZiAoIWFfcHRyW3hd KSB7CQkJLyogSWYgYXJyYXkgaXMgZGVjbGFyZWQgKi8KKwlwcmludGYoIj9BcnJheSAlcyBpcyBu b3QgZGVjbGFyZWRcbiIsIHMpOworCXJldHVybigtOSk7CisgICAgfSBlbHNlIGlmIChjID09ICdA JykgewkJLyogQXJndW1lbnQgdmVjdG9yIGFycmF5IG9mZiBsaW1pdHMgKi8KKwlwcmludGYoIj9T b3JyeSwgXFwmQFtdIGlzIHJlYWQtb25seVxuIik7CisJcmV0dXJuKC05KTsKKyAgICB9CisgICAg aWYgKGxvIDwgMCkgbG8gPSAwOworICAgIGlmIChoaSA8IDApIGhpID0gYV9kaW1beF07CisgICAg Zm9yIChpID0gbG87IGkgPD0gaGk7IGkrKykJCS8qIENsZWFyL1NldCBzZWxlY3RlZCByYW5nZSAq LworICAgICAgbWFrZXN0cigmKGFfcHRyW3hdW2ldKSx2YWwpOworCisgICAgcmV0dXJuKHN1Y2Nl c3MgPSAxKTsKK30KKworZXh0ZXJuIGNoYXIgKiphYV9wdHJbQ01EU1RLTF1bMjhdOworZXh0ZXJu IGludCBhYV9kaW1bQ01EU1RLTF1bMjhdOworCitzdGF0aWMgaW50CQkJCS8qIENyZWF0ZSBzeW1i b2xpYyBsaW5rIHRvIGFuIGFycmF5ICovCitsaW5rYXJyYXkoKSB7CisgICAgaW50IGkgPSAwLCB4 LCB5LCBsbywgaGksIGZsYWcgPSAwOworICAgIGNoYXIgYywgKiBzLCAqIHA7CisKKyAgICBpZiAo KHggPSBjbWZsZCgiQXJyYXkgbmFtZSBub3QgY3VycmVudGx5IGluIHVzZSIsIiIsJnMsTlVMTCkp IDwgMCkgeworCWlmICh4ID09IC0zKSB7CisJICAgIHByaW50ZigiP0FycmF5IG5hbWUgcmVxdWly ZWRcbiIpOworCSAgICByZXR1cm4oLTkpOworCX0gZWxzZSByZXR1cm4oeCk7CisgICAgfQorICAg IGNrc3RybmNweShsaW5lLHMsTElOQlVGU0laKTsJLyogTWFrZSBzYWZlIGNvcHkgb2YgbGluayBu YW1lICovCisgICAgcyA9IGxpbmU7CisgICAgaWYgKCh4ID0gY21mbGQoIk5hbWUgb2YgZXhpc3Rp bmcgYXJyYXkiLCIiLCZwLHh4c3RyaW5nKSkgPCAwKSB7CisJaWYgKHggPT0gLTMpIHsKKwkgICAg cHJpbnRmKCI/QXJyYXkgbmFtZSByZXF1aXJlZFxuIik7CisJICAgIHJldHVybigtOSk7CisJfSBl bHNlIHJldHVybih4KTsKKyAgICB9CisgICAgY2tzdHJuY3B5KHRtcGJ1ZixwLFRNUEJVRlNJWik7 CS8qIE1ha2Ugc2FmZSBjb3B5IG9mIGFycmF5IG5hbWUgKi8KKyAgICBwID0gdG1wYnVmOworICAg IGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkKKyAgICAgIHJldHVybih4KTsKKworICAgIGlmICgoeCA9 IGFycmF5Ym91bmRzKHMsJmxvLCZoaSkpIDwgMCkgeyAvKiBQYXJzZSB0aGUgbGluayBuYW1lICov CisJcHJpbnRmKCI/QmFkIGFycmF5IHJlZmVyZW5jZSAtIFwiJXNcIlxuIiwgcyk7CisJcmV0dXJu KC05KTsKKyAgICB9CisgICAgaWYgKGFfcHRyW3hdKSB7CQkJLyogTXVzdCBub3QgYWxyZWFkeSBl eGlzdCAqLworCWMgPSBhcnJheWl0b2EoeCk7CisJcHJpbnRmKCI/QXJyYXkgYWxyZWFkeSBleGlz dHM6IFxcJiVjW11cbiIsIGMpOworCXJldHVybigtOSk7CisgICAgfQorICAgIGlmIChsbyA+IC0x IHx8IGhpID4gLTEpIHsKKwlwcmludGYoIj9Tb3JyeSwgd2hvbGUgYXJyYXlzIG9ubHk6ICVzXG4i LHMpOworCXJldHVybigtOSk7CisgICAgfQorICAgIGlmICgoeSA9IGFycmF5Ym91bmRzKHAsJmxv LCZoaSkpIDwgMCkgeyAvKiBQYXJzZSB0aGUgYXJyYXkgbmFtZSAqLworCXByaW50ZigiP0JhZCBh cnJheSByZWZlcmVuY2UgLSBcIiVzXCJcbiIsIHMpOworCXJldHVybigtOSk7CisgICAgfQorICAg IGlmIChsbyA+IC0xIHx8IGhpID4gLTEpIHsKKwlwcmludGYoIj9Tb3JyeSwgd2hvbGUgYXJyYXlz IG9ubHk6ICVzXG4iLHApOworCXJldHVybigtOSk7CisgICAgfQorICAgIGlmICh4ID09IHkpIHsK Kwlmb3IgKGkgPSBjbWRsdmw7IGkgPj0gMDsgaS0tKQorCSAgaWYgKGFhX3B0cltpXVt4XSkgewor CSAgICAgIGZsYWcrKzsKKwkgICAgICBicmVhazsKKwkgIH0KKyAgICB9CisgICAgaWYgKGZsYWcp IHsKKwlhX3B0clt4XSA9IGFhX3B0cltpXVt5XTsJLyogTGluayB0byBzYXZlZCBjb3B5ICovCisJ YV9kaW1beF0gPSBhYV9kaW1baV1beV07CisgICAgfSBlbHNlIHsJCQkJLyogT3RoZXJ3aXNlLi4u ICovCisJYyA9IGFycmF5aXRvYSh5KTsJCS8qIENoZWNrIGlmIGl0J3MgZGVjbGFyZWQgKi8KKwlp ZiAoIWFfcHRyW3ldKSB7CisJICAgIHByaW50ZigiP0FycmF5IGlzIG5vdCBkZWNsYXJlZDogXFwm JWNbXVxuIiwgYyk7CisJICAgIHJldHVybigtOSk7CisJfQorCWlmIChhX2xpbmtbeV0gPiAtMSkg ewkJLyogQW5kIGlmIGl0J3MgYSBsaW5rIGl0c2VsZiAqLworCSAgICBwcmludGYoIj9MaW5rcyB0 byBsaW5rcyBub3QgYWxsb3dlZDogXFwmJWNbXVxuIiwgYyk7CisJICAgIHJldHVybigtOSk7CisJ fQorCWFfcHRyW3hdID0gYV9wdHJbeV07CQkvKiBBbGwgT0ssIG1ha2UgdGhlIGxpbmsgKi8KKwlh X2RpbVt4XSA9IGFfZGltW3ldOworICAgIH0KKyAgICBhX2xpbmtbeF0gPSB5OworICAgIHJldHVy bihzdWNjZXNzID0gMSk7Cit9CisjZW5kaWYgLyogTk9TUEwgKi8KKworI2lmbmRlZiBOT0NTRVRT CitzdGF0aWMgY2hhciAqIGRjc2V0bmFtZSA9IE5VTEw7CisKKy8qIEdldCBEaXNwbGF5IENoYXJh Y3Rlci1TZXQgTmFtZSAqLworCitjaGFyICoKK2dldGRjc2V0KCkgeworICAgIGNoYXIgKiBzOwor ICAgIGludCB5OworI2lmZGVmIFBDRk9OVFMKKyAgICBleHRlcm4gaW50IHR0X2ZvbnQsIG50ZXJt Zm9udDsKKyAgICBleHRlcm4gc3RydWN0IGtleXRhYiB0ZXJtX2ZvbnRbXTsKKyNlbmRpZiAvKiBQ Q0ZPTlRTICovCisKKyAgICBzID0gIiI7CisjaWZkZWYgT1MyCisgICAgeSA9IG9zMmdldGNwKCk7 CQkJLyogRGVmYXVsdCBpcyBjdXJyZW50IGNvZGUgcGFnZSAqLworICAgIHN3aXRjaCAoeSkgewor ICAgICAgY2FzZSA0Mzc6IHMgPSAiY3A0MzciOyBicmVhazsKKyAgICAgIGNhc2UgODUwOiBzID0g ImNwODUwIjsgYnJlYWs7CisgICAgICBjYXNlIDg1MjogcyA9ICJjcDg1MiI7IGJyZWFrOworICAg ICAgY2FzZSA4NTc6IHMgPSAiY3A4NTciOyBicmVhazsKKyAgICAgIGNhc2UgODU4OiBzID0gImNw ODU4IjsgYnJlYWs7CisgICAgICBjYXNlIDg2MjogcyA9ICJjcDg2MiI7IGJyZWFrOworICAgICAg Y2FzZSA4NjY6IHMgPSAiY3A4NjYiOyBicmVhazsKKyAgICAgIGNhc2UgODY5OiBzID0gImNwODY5 IjsgYnJlYWs7CisgICAgICBjYXNlIDEyNTA6IHMgPSAiY3AxMjUwIjsgYnJlYWs7CisgICAgICBj YXNlIDEyNTE6IHMgPSAiY3AxMjUxIjsgYnJlYWs7CisgICAgICBjYXNlIDEyNTI6IHMgPSAiY3Ax MjUyIjsgYnJlYWs7CisgICAgICBjYXNlIDEyNTM6IHMgPSAiY3AxMjUzIjsgYnJlYWs7CisgICAg ICBjYXNlIDEyNTQ6IHMgPSAiY3AxMjU0IjsgYnJlYWs7CisgICAgICBjYXNlIDEyNTU6IHMgPSAi Y3AxMjU1IjsgYnJlYWs7CisgICAgICBjYXNlIDEyNTY6IHMgPSAiY3AxMjU2IjsgYnJlYWs7Cisg ICAgICBjYXNlIDEyNTc6IHMgPSAiY3AxMjU3IjsgYnJlYWs7CisgICAgICBjYXNlIDEyNTg6IHMg PSAiY3AxMjU4IjsgYnJlYWs7CisgICAgfQorI2lmZGVmIFBDRk9OVFMKKy8qCisgICBJZiB0aGUg dXNlciBoYXMgbG9hZGVkIGEgZm9udCB3aXRoIFNFVCBURVJNSU5BTCBGT05UIHRoZW4gd2Ugd2Fu dAorICAgdG8gY2hhbmdlIHRoZSBkZWZhdWx0IGNvZGUgcGFnZSB0byB0aGUgZm9udCB0aGF0IHdh cyBsb2FkZWQuCisqLworICAgIGlmICh0dF9mb250ICE9IFRURl9ST00pIHsKKwlmb3IgKHkgPSAw OyB5IDwgbnRlcm1mb250OyB5KysgKSB7CisJICAgIGlmICh0ZXJtX2ZvbnRbeV0ua3d2YWwgPT0g dHRfZm9udCkgeworCQlzID0gdGVybV9mb250W3ldLmt3ZDsKKwkJYnJlYWs7CisJICAgIH0KKwl9 CisgICAgfQorI2VuZGlmIC8qIFBDRk9OVFMgKi8KKyNlbHNlIC8qIE9TMiAqLworI2lmZGVmIENP TU1FTlQKKyAgICAvKiBIYWNrIG5vdCBuZWVkZWQgYXMgb2YgQy1LZXJtaXQgNy4xICovCisgICAg aWYgKGZjaGFyc2V0ID09IEZDXzFMQVRJTikgeworCXMgPSAibGF0aW4xLWlzbyI7CQkvKiBIYWNr IHRvIGF2b2lkIHJlcG9ydGluZyAiY3AxMjUyIiAqLworICAgIH0gZWxzZSB7CQkJCS8qIFJlcG9y dCBjdXJyZW50IGZpbGUgY2hhcmFjdGVyIHNldCAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKwlm b3IgKHkgPSAwOyB5IDw9IG5maWxjOyB5KyspCisJICBpZiAoZmNzdGFiW3ldLmt3dmFsID09IGZj aGFyc2V0KSB7CisJICAgICAgcyA9IGZjc3RhYlt5XS5rd2Q7CisJICAgICAgYnJlYWs7CisJICB9 CisjaWZkZWYgQ09NTUVOVAorICAgIH0KKyNlbmRpZiAvKiBDT01NRU5UICovCisjZW5kaWYgLyog T1MyICovCisgICAgbWFrZXN0cigmZGNzZXRuYW1lLHMpOwkJLyogUmV0dXJuIHN0YWJsZSBwb2lu dGVyICovCisgICAgcmV0dXJuKChjaGFyICopZGNzZXRuYW1lKTsKK30KKyNlbmRpZiAvKiBOT0NT RVRTICovCisKKyNpZm5kZWYgTk9GUklMTFMKK3N0YXRpYyBpbnQKK2RvY2xlYXIoKSB7CisgICAg aWYgKCh4ID0gY21rZXkoY2xydGFiLG5jbGVhciwiaXRlbSB0byBjbGVhciIsCisjaWZkZWYgTk9T UEwKKwkJICAgImRldmljZS1idWZmZXIiCisjZWxzZQorCQkgICAiZGV2aWNlLWFuZC1pbnB1dCIK KyNlbmRpZiAvKiBOT1NQTCAqLworCQkgICAseHhzdHJpbmcpKSA8IDApIHJldHVybih4KTsKKyNp Zm5kZWYgTk9TUEwKKyNpZmRlZiBPUzIKKyAgICBpZiAoeCA9PSBDTFJfQ01EIHx8IHggPT0gQ0xS X1RSTSkgeworCWlmICgoeiA9IGNta2V5KGNscmNtZHRhYixuY2xyY21kLCJob3cgbXVjaCBzY3Jl ZW4gdG8gY2xlYXJcbiIsCisJCSAgICAgICAiYWxsIix4eHN0cmluZykpIDwgMCkKKwkgIHJldHVy bih6KTsKKyAgICB9CisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogTk9TUEwgKi8KKyAgICBp ZiAoKHkgPSBjbWNmbSgpKSA8IDApCisgICAgICByZXR1cm4oeSk7CisKKyAgICAvKiBDbGVhciBk ZXZpY2UgaW5wdXQgYnVmZmVyIGlmIHJlcXVlc3RlZCAqLworICAgIHkgPSAoeCAmIENMUl9ERVYp ID8gdHRmbHVpKCkgOiAwOworCisgICAgaWYgKHggJiBDTFJfU0NSKQkJCS8qIENMRUFSIFNDUkVF TiAqLworICAgICAgeSA9IGNrX2NscygpOwkJCS8qICg9IFNDUkVFTiBDTEVBUiA9IENMUykgKi8K KworICAgIGlmICh4ICYgQ0xSX0tCRCkgewkJCS8qIENMRUFSIEtFWUJPQVJEICovCisJaW50IG47 CisJbiA9IGNvbmNoaygpOworCXkgPSAwOworCXdoaWxlIChuLS0gPiAwICYmICh5ID0gY29uaW5j KDApID4gLTEpKQorCSAgOworCXkgPSAoeSA+IC0xKSA/IDAgOiAtMTsKKyAgICB9CisKKyNpZm5k ZWYgTk9TUEwKKyAgICAvKiBDbGVhciBJTlBVVCBjb21tYW5kIGJ1ZmZlciBpZiByZXF1ZXN0ZWQg Ki8KKyAgICBpZiAoeCAmIENMUl9JTlApIHsKKwlmb3IgKHogPSAwOyB6IDwgaW5idWZzaXplOyB6 KyspCisJICBpbnBidWZbel0gPSBOVUw7CisJaW5wYnAgPSBpbnBidWY7CisJeSA9IDA7CisgICAg fQorI2lmZGVmIENLX0FQQworICAgIGlmICh4ICYgQ0xSX0FQQykgeworCWRlYnVnKEYxMDEsIkV4 ZWN1dGluZyBDTEVBUiBBUEMiLCIiLGFwY2FjdGl2ZSk7CisJYXBjYWN0aXZlID0gMDsKKwl5ID0g MDsKKyAgICB9CisjZW5kaWYgLyogQ0tfQVBDICovCisgICAgaWYgKHggJiBDTFJfQUxSKSB7CisJ c2V0YWxhcm0oMEwpOworCXkgPSAwOworICAgIH0KKyNlbmRpZiAvKiBOT1NQTCAqLworCisjaWZk ZWYgUEFUVEVSTlMKKyAgICBpZiAoeCAmIChDTFJfVFhUfENMUl9CSU4pKSB7CisJaW50IGk7CisJ Zm9yIChpID0gMDsgaSA8IEZUUEFUVEVSTlM7IGkrKykgeworCSAgICBpZiAoeCAmIENMUl9UWFQp CisJICAgICAgbWFrZXN0cigmdHh0cGF0dGVybnNbaV0sTlVMTCk7CisJICAgIGlmICh4ICYgQ0xS X0JJTikKKwkgICAgICBtYWtlc3RyKCZiaW5wYXR0ZXJuc1tpXSxOVUxMKTsKKwl9CisJeSA9IDA7 CisgICAgfQorI2VuZGlmIC8qIFBBVFRFUk5TICovCisKKyNpZm5kZWYgTk9ESUFMCisgICAgaWYg KHggJiBDTFJfRElBKSB7CisJZGlhbHN0YSA9IERJQV9VTks7CisJeSA9IDA7CisgICAgfQorI2Vu ZGlmIC8qIE5PRElBTCAqLworCisjaWZuZGVmIE5PTVNFTkQKKyAgICBpZiAoeCAmIENMUl9TRkwp IHsJCQkvKiBDTEVBUiBTRU5ELUxJU1QgKi8KKwlpZiAoZmlsZWhlYWQpIHsKKwkgICAgc3RydWN0 IGZpbGVsaXN0ICogZmxwLCAqIG5leHQ7CisJICAgIGZscCA9IGZpbGVoZWFkOworCSAgICB3aGls ZSAoZmxwKSB7CisJCWlmIChmbHAtPmZsX25hbWUpCisJCSAgZnJlZShmbHAtPmZsX25hbWUpOwor CQlpZiAoZmxwLT5mbF9hbGlhcykKKwkJICBmcmVlKGZscC0+ZmxfYWxpYXMpOworCQluZXh0ID0g ZmxwLT5mbF9uZXh0OworCQlmcmVlKChjaGFyICopZmxwKTsKKwkJZmxwID0gbmV4dDsKKwkgICAg fQorCX0KKwlmaWxlc2lubGlzdCA9IDA7CisJZmlsZWhlYWQgPSBOVUxMOworCWZpbGV0YWlsID0g TlVMTDsKKwlhZGRsaXN0ID0gMDsKKwl5ID0gMDsKKyAgICB9CisjZW5kaWYgLyogTk9NU0VORCAq LworCisjaWZkZWYgT1MyCisjaWZuZGVmIE5PTE9DQUwKKyAgICBzd2l0Y2ggKHgpIHsKKyAgICAg IGNhc2UgQ0xSX1NDTDoKKwljbGVhcnNjcm9sbGJhY2soVlRFUk0pOworCWJyZWFrOworICAgICAg Y2FzZSBDTFJfQ01EOgorCXN3aXRjaCAoIHogKSB7CisJICBjYXNlIENMUl9DX0FMTDoKKwkgICAg Y2xlYXIoKTsKKwkgICAgYnJlYWs7CisJICBjYXNlIENMUl9DX0JPUzoKKwkgICAgY2xyYm9zY3Jf ZXNjYXBlKFZDTUQsU1ApOworCSAgICBicmVhazsKKwkgIGNhc2UgQ0xSX0NfQk9MOgorCSAgICBj bHJib2xfZXNjYXBlKFZDTUQsU1ApOworCSAgICBicmVhazsKKwkgIGNhc2UgQ0xSX0NfRU9MOgor CSAgICBjbHJ0b2VvbG4oVkNNRCxTUCk7CisJICAgIGJyZWFrOworCSAgY2FzZSBDTFJfQ19FT1M6 CisJICAgIGNscmVvc2NyX2VzY2FwZShWQ01ELFNQKTsKKwkgICAgYnJlYWs7CisJICBjYXNlIENM Ul9DX0xJTjoKKwkgICAgY2xybGluZV9lc2NhcGUoVkNNRCxTUCk7CisJICAgIGJyZWFrOworCSAg Y2FzZSBDTFJfQ19TQ1I6CisJICAgIGNsZWFyc2Nyb2xsYmFjayhWQ01EKTsKKwkgICAgYnJlYWs7 CisJZGVmYXVsdDoKKwkgICAgcHJpbnRmKCJOb3QgaW1wbGVtZW50ZWQgeWV0LCBzb3JyeS5cbiIp OworCSAgICBicmVhazsKKwl9CisJYnJlYWs7CisKKyNpZm5kZWYgTk9URVJNCisgICAgICBjYXNl IENMUl9UUk06CisJIHN3aXRjaCAoIHogKSB7CisJICBjYXNlIENMUl9DX0FMTDoKKwkgICAgIGlm IChWc2NybkdldEJ1ZmZlclNpemUoVlRFUk0pID4gMCApIHsKKwkJIFZzY3JuU2Nyb2xsKFZURVJN LCBVUFdBUkQsIDAsCisJCQkgICAgIFZzY3JuR2V0SGVpZ2h0KFZURVJNKS0odHRfc3RhdHVzW1ZU RVJNXT8yOjEpLAorCQkJICAgICBWc2NybkdldEhlaWdodChWVEVSTSkgLQorCQkJICAgICAodHRf c3RhdHVzW1ZURVJNXT8xOjApLCBUUlVFLCBTUAorCQkJICAgICApOworCQkgY2xlYXJ0ZXJtc2Ny ZWVuKFZURVJNKTsKKwkgICAgIH0KKwkgICAgIGJyZWFrOworCSAgY2FzZSBDTFJfQ19CT1M6CisJ ICAgIGNscmJvc2NyX2VzY2FwZShWVEVSTSxTUCk7CisJICAgIGJyZWFrOworCSAgY2FzZSBDTFJf Q19CT0w6CisJICAgIGNscmJvbF9lc2NhcGUoVlRFUk0sU1ApOworCSAgICBicmVhazsKKwkgIGNh c2UgQ0xSX0NfRU9MOgorCSAgICBjbHJ0b2VvbG4oVlRFUk0sU1ApOworCSAgICBicmVhazsKKwkg IGNhc2UgQ0xSX0NfRU9TOgorCSAgICBjbHJlb3Njcl9lc2NhcGUoVlRFUk0sU1ApOworCSAgICBi cmVhazsKKwkgIGNhc2UgQ0xSX0NfTElOOgorCSAgICBjbHJsaW5lX2VzY2FwZShWVEVSTSxTUCk7 CisJICAgIGJyZWFrOworCSBjYXNlIENMUl9DX1NDUjoKKwkgICAgIGNsZWFyc2Nyb2xsYmFjayhW VEVSTSk7CisJICAgICBicmVhazsKKwkgZGVmYXVsdDoKKwkgICAgIHByaW50ZigiTm90IGltcGxl bWVudGVkIHlldCwgc29ycnkuXG4iKTsKKwkgICAgIGJyZWFrOworCX0KKwlicmVhazsKKyNlbmRp ZiAvKiBOT1RFUk0gKi8KKyAgICB9CisgICAgeSA9IDA7CisjZW5kaWYgLyogTk9MT0NBTCAqLwor I2VuZGlmIC8qIE9TMiAqLworICAgIHJldHVybihzdWNjZXNzID0gKHkgPT0gMCkpOworfQorI2Vu ZGlmIC8qIE5PRlJJTExTICovCisKKyNpZm5kZWYgTk9TUEwKK3N0YXRpYyBpbnQKK2RvZXZhbChj eCkgaW50IGN4OyB7CisgICAgY2hhciAqcDsKKyAgICBjaGFyIHZuYW1idWZbVk5BTUxdLCAqIHZu cCA9IE5VTEw7CS8qIFRoZXNlIG11c3QgYmUgb24gdGhlIHN0YWNrICovCisgICAgaWYgKCFvbGRl dmFsKSB7CisJaWYgKCh5ID0gY21mbGQoIlZhcmlhYmxlIG5hbWUiLCIiLCZzLAorCQkgICAgICAg KChjeCA9PSBYWF9FVkFMKSA/IHh4c3RyaW5nIDogTlVMTCkpKSA8IDApIHsKKwkgICAgaWYgKHkg PT0gLTMpIHsKKwkJcHJpbnRmKCI/VmFyaWFibGUgbmFtZSByZXF1aXJlZFxuIik7CisJCXJldHVy bigtOSk7CisJICAgIH0gZWxzZSByZXR1cm4oeSk7CisJfQorCWNrc3RybmNweSh2bmFtYnVmLHMs Vk5BTUwpOwkvKiBNYWtlIGEgY29weS4gKi8KKwl2bnAgPSB2bmFtYnVmOworCWlmICh2bmFtYnVm WzBdID09IENNRFEgJiYKKwkgICAgKHZuYW1idWZbMV0gPT0gJyUnIHx8IHZuYW1idWZbMV0gPT0g JyYnKSkKKwkgIHZucCsrOworCXkgPSAwOworCWlmICgqdm5wID09ICclJyB8fCAqdm5wID09ICcm JykgeworCSAgICBpZiAoKHkgPSBwYXJzZXZhcih2bnAsJngsJnopKSA8IDApCisJICAgICAgcmV0 dXJuKHkpOworCX0KKyAgICB9CisgICAgaWYgKCh4ID0gY210eHQoIkludGVnZXIgYXJpdGhtZXRp YyBleHByZXNzaW9uIiwiIiwmcyx4eHN0cmluZykpIDwgMCkKKyAgICAgIHJldHVybih4KTsKKyAg ICBwID0gZXZhbGEocyk7CisgICAgaWYgKCFwKSBwID0gIiI7CisgICAgaWYgKG9sZGV2YWwgJiYg KnApCisgICAgICBwcmludGYoIiVzXG4iLCBwKTsKKyAgICBja3N0cm5jcHkoZXZhbGJ1ZixwLDMy KTsKKyAgICBpZiAoIW9sZGV2YWwpCisgICAgICByZXR1cm4oc3VjY2VzcyA9IGFkZG1hYyh2bmFt YnVmLHApKTsKKyAgICBlbHNlCisgICAgICByZXR1cm4oc3VjY2VzcyA9ICpwID8gMSA6IDApOwor fQorI2VuZGlmIC8qIE5PU1BMICovCisKKyNpZmRlZiBUTkNPREUKK3N0YXRpYyBpbnQKK2RvdGVs b3B0KCkgeworICAgIGlmICgoeCA9IGNta2V5KHRlbGNtZCwgbnRlbGNtZCwgIlRFTE5FVCBjb21t YW5kIiwgIiIsIHh4c3RyaW5nKSkgPCAwICkKKyAgICAgIHJldHVybih4KTsKKyAgICBzd2l0Y2gg KHgpIHsKKyAgICAgIGNhc2UgV0lMTDoKKyAgICAgIGNhc2UgV09OVDoKKyAgICAgIGNhc2UgRE86 CisgICAgICBjYXNlIERPTlQ6CisJaWYgKCh5ID0gY21rZXkodG5vcHRzLG50bm9wdHMsIlRFTE5F VCBvcHRpb24iLCIiLHh4c3RyaW5nKSkgPCAwKQorCSAgcmV0dXJuKHkpOworCWlmICgoeiA9IGNt Y2ZtKCkpIDwgMCkgcmV0dXJuKHopOworCisJc3dpdGNoICh4KSB7CisJICBjYXNlIFdJTEw6CisJ ICAgIGlmIChURUxPUFRfVU5BTlNXRVJFRF9XSUxMKHkpKQorCSAgICAgIHJldHVybihzdWNjZXNz ID0gMCk7CisJICAgIGJyZWFrOworCSAgY2FzZSBXT05UOgorCSAgICBpZiAoVEVMT1BUX1VOQU5T V0VSRURfV09OVCh5KSkKKwkgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOworCSAgICBicmVhazsK KwkgIGNhc2UgRE86CisJICAgIGlmIChURUxPUFRfVU5BTlNXRVJFRF9ETyh5KSkKKwkgICAgICBy ZXR1cm4oc3VjY2VzcyA9IDApOworCSAgICBicmVhazsKKwkgIGNhc2UgRE9OVDoKKwkgICAgaWYg KFRFTE9QVF9VTkFOU1dFUkVEX0RPTlQoeSkpCisJICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsK KwkgICAgYnJlYWs7CisJfQorCWlmIChsb2NhbCkgeworCSAgICBzdWNjZXNzID0gKCh0bl9zb3B0 KHgseSkgPiAtMSkgPyAxIDogMCk7CisJfSBlbHNlIHsKKwkgICAgcHJpbnRmKCJmZiUwMnglMDJ4 XG4iLHgseSk7CisJICAgIHN1Y2Nlc3MgPSAxOworCX0KKwlpZiAoc3VjY2VzcykgeworCSAgICBz d2l0Y2ggKHgpIHsKKwkgICAgICBjYXNlIFdJTEw6CisJCVRFTE9QVF9VTkFOU1dFUkVEX1dJTEwo eSkgPSAxOworCQlicmVhazsKKwkgICAgICBjYXNlIFdPTlQ6CisJCWlmICggVEVMT1BUX01FKHkp ICkKKwkJICBURUxPUFRfVU5BTlNXRVJFRF9XT05UKHkpID0gMTsKKwkJYnJlYWs7CisJICAgICAg Y2FzZSBETzoKKwkJVEVMT1BUX1VOQU5TV0VSRURfRE8oeSkgPSAxOworCQlicmVhazsKKwkgICAg ICBjYXNlIERPTlQ6CisJCWlmICggVEVMT1BUX01FKHkpICkKKwkJICBURUxPUFRfVU5BTlNXRVJF RF9ET05UKHkpID0gMTsKKwkJYnJlYWs7CisJICAgIH0KKwkgICAgaWYgKHRuX3dhaXQoIlhYVEVM T1AiKSA8IDApIHsKKwkJdG5fcHVzaCgpOworCQlzdWNjZXNzID0gMDsKKwkgICAgfQorCX0KKwly ZXR1cm4oc3VjY2Vzcyk7CisgICAgICBjYXNlIFNCOgorCWlmICgoeT1jbWtleSh0bnNib3B0cyxu dG5zYm9wdHMsIlRFTE5FVCBvcHRpb24iLCIiLHh4c3RyaW5nKSkgPCAwKQorCSAgcmV0dXJuKHkp OworCXN3aXRjaCAoeSkgeworCSAgY2FzZSBURUxPUFRfTkFXUzoKKwkgICAgLyogU29tZSBjb21w aWxlcnMgcmVxdWlyZSBzd2l0Y2goKSB0byBoYXZlIGF0IGxlYXN0IDEgY2FzZSAqLworI2lmZGVm IENLX05BV1MKKwkgICAgVEVMT1BUX1NCKFRFTE9QVF9OQVdTKS5uYXdzLnggPSAwOworCSAgICBU RUxPUFRfU0IoVEVMT1BUX05BV1MpLm5hd3MueSA9IDA7CisJICAgIGlmIChsb2NhbCkKKwkgICAg ICByZXR1cm4oc3VjY2VzcyA9ICgodG5fc25hd3MoKSA+IC0xKSA/IDEgOiAwKSk7CisJICAgIGVs c2UKKwkgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOworI2Vsc2UKKwkgICAgcmV0dXJuKHN1Y2Nl c3MgPSAwKTsKKyNlbmRpZiAvKiBDS19OQVdTICovCisJfQorICAgICAgICByZXR1cm4oc3VjY2Vz cyA9IDApOworCisjaWZkZWYgQ0tfS0VSQkVST1MKKyNpZmRlZiBLUkI1CisgICAgICBjYXNlIFRO X0ZXRDoKKyAgICAgICAgc3VjY2VzcyA9IChrZXJiZXJvczVfZm9yd2FyZCgpID09IEFVVEhfU1VD Q0VTUyk7CisgICAgICAgIHJldHVybihzdWNjZXNzKTsKKyNlbmRpZiAvKiBLUkI1ICovCisjZW5k aWYgLyogQ0tfS0VSQkVST1MgKi8KKworICAgICAgZGVmYXVsdDoKKwlpZiAoKHogPSBjbWNmbSgp KSA8IDApIHJldHVybih6KTsKKyNpZm5kZWYgTk9MT0NBTAorCWlmIChsb2NhbCkgeworCSAgICBD SEFSIHRlbXBbM107CisJICAgIGlmIChuZXR3b3JrICYmIElTX1RFTE5FVCgpKSB7IC8qIFRFTE5F VCAqLworCQl0ZW1wWzBdID0gKENIQVIpIElBQzsKKwkJdGVtcFsxXSA9IHg7CisJCXRlbXBbMl0g PSBOVUw7CisJCXN1Y2Nlc3MgPSAodHRvbCgoQ0hBUiAqKXRlbXAsMikgPiAtMSA/IDEgOiAwKTsK KwkJaWYgKHRuX2RlYiB8fCBkZWJzZXMgfHwgZGVibG9nKSB7CisJCSAgICAvKiBUTl9NU0dfTEVO IGlzIGluIGNrY3RlbC5oICovCisJCSAgICBja21ha21zZyh0bl9tc2csMjU2LCJURUxORVQgU0VO VCAiLFRFTENNRCh4KSxOVUxMLE5VTEwpOworCQkgICAgZGVidWcoRjEwMSx0bl9tc2csIiIseCk7 CisJCSAgICBpZiAoZGVic2VzIHx8IHRuX2RlYikgdG5fZGVidWcodG5fbXNnKTsKKwkJfQorCQly ZXR1cm4oc3VjY2Vzcyk7CisJICAgIH0KKyAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7 CisJfSBlbHNlIHsKKyNlbmRpZiAvKiBOT0xPQ0FMICovCisJICAgIHByaW50ZigiZmYlMDJ4XG4i LHgpOworCSAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworI2lmbmRlZiBOT0xPQ0FMCisJfQorI2Vu ZGlmIC8qIE5PTE9DQUwgKi8KKyAgICB9Cit9CisjZW5kaWYgLyogVE5DT0RFICovCisKKworI2lm bmRlZiBOT1BVU0gKKyNpZm5kZWYgTk9GUklMTFMKK3N0YXRpYyBpbnQKK2RvZWRpdCgpIHsKKyNp ZmRlZiBPUzIKKyAgICBjaGFyICogcCA9IE5VTEw7CisjZW5kaWYgLyogT1MyICovCisgICAgaWYg KCFlZGl0b3JbMF0pIHsKKwlzID0gZ2V0ZW52KCJFRElUT1IiKTsKKwlpZiAocykgY2tzdHJuY3B5 KGVkaXRvcixzLENLTUFYUEFUSCk7CisJZWRpdG9yW0NLTUFYUEFUSF0gPSBOVUw7CisJaWYgKCFl ZGl0b3JbMF0pIHsKKwkgICAgcHJpbnRmKCI/RWRpdG9yIG5vdCBkZWZpbmVkIC0gdXNlIFNFVCBF RElUT1IgdG8gZGVmaW5lXG4iKTsKKwkgICAgcmV0dXJuKC05KTsKKwl9CisgICAgfQorICAgIGNr c3RybmNweSh0bXBidWYsZWRpdGZpbGUsVE1QQlVGU0laKTsKKy8qCisgIGNtaW9maSgpIGxldHMg dXMgcGFyc2UgdGhlIG5hbWUgb2YgYW4gZXhpc3RpbmcgZmlsZSwgb3IgdGhlIG5hbWUgb2YKKyAg YSBub25leGlzdGVudCBmaWxlIHRvIGJlIGNyZWF0ZWQuCisqLworICAgIHggPSBjbWlvZmkoIkZp bGUgdG8gZWRpdCIsIChjaGFyICopdG1wYnVmLCAmcywgJnksIHh4c3RyaW5nKTsKKyAgICBkZWJ1 ZyhGMTExLCJlZGl0IixzLHgpOworICAgIGlmICh4IDwgMCAmJiB4ICE9IC0zKQorICAgICAgcmV0 dXJuKHgpOworICAgIGlmICh4ID09IC0zKSB7CisJdG1wYnVmWzBdID0gTlVMOworICAgIH0gZWxz ZSB7CisJY2tzdHJuY3B5KHRtcGJ1ZixzLFRNUEJVRlNJWik7CisgICAgfQorICAgIGlmICgoeiA9 IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHopOworICAgIGlmICh5KSB7CisJcHJpbnRmKCI/QSBzaW5n bGUgZmlsZSBwbGVhc2VcbiIpOworCXJldHVybigtOSk7CisgICAgfQorICAgIGlmIChub3B1c2gp IHsKKwlwcmludGYoIj9Tb3JyeSwgZWRpdGluZyBub3QgYWxsb3dlZFxuIik7CisJcmV0dXJuKHN1 Y2Nlc3MgPSAwKTsKKyAgICB9CisgICAgaWYgKHRtcGJ1ZlswXSkgeworICAgIC8qIEdldCBmdWxs IHBhdGggaW4gY2FzZSB3ZSBjaGFuZ2UgZGlyZWN0b3JpZXMgYmV0d2VlbiBFRElUIGNvbW1hbmRz ICovCisJemZucWZwKHRtcGJ1ZiwgQ0tNQVhQQVRILCBlZGl0ZmlsZSk7CisJZWRpdGZpbGVbQ0tN QVhQQVRIXSA9IE5VTDsKKyNpZmRlZiBPUzIKKwlwID0gZWRpdGZpbGU7CQkJLyogRmxpcCB0aGUg c3R1cGlkIHNsYXNoZXMgKi8KKwl3aGlsZSAoKnApIHsKKwkgICAgaWYgKCpwID09ICcvJykgKnAg PSAnXFwnOworCSAgICBwKys7CisJfQorI2VuZGlmIC8qIE9TMiAqLworICAgIH0gZWxzZQorICAg ICAgZWRpdGZpbGVbMF0gPSBOVUw7CisgICAgaWYgKGVkaXRmaWxlWzBdKSB7CisJaWYgKHpjaGtp KGVkaXRmaWxlKSA8IChDS19PRkZfVCkwICYmIHpjaGtvKGVkaXRmaWxlKSA8IDApIHsKKwkgICAg cHJpbnRmKCI/QWNjZXNzIGRlbmllZDogJXNcbiIsZWRpdGZpbGUpOworCSAgICByZXR1cm4oLTkp OworCX0KKyAgICB9CisgICAgeCA9IDA7CisgICAgaWYgKGVkaXRvcHRzWzBdKSB7CisjaWZkZWYg T1MyCisJeCA9IGNraW5kZXgoIiUxIiwoY2hhciAqKWVkaXRvcHRzLDAsMCwxKTsKKwlpZiAoeCA+ IDApCisJICBlZGl0b3B0c1t4XSA9ICdzJzsKKwllbHNlCisjZW5kaWYgLyogT1MyICovCisJICB4 ID0gY2tpbmRleCgiJXMiLChjaGFyICopZWRpdG9wdHMsMCwwLDEpOworICAgIH0KKyAgICBpZiAo KChpbnQpc3RybGVuKGVkaXRvcHRzKSArIChpbnQpc3RybGVuKGVkaXRmaWxlKSArIDEpIDwgVE1Q QlVGU0laKSB7CisJaWYgKHgpCisJICBzcHJpbnRmKHRtcGJ1ZixlZGl0b3B0cyxlZGl0ZmlsZSk7 CisJZWxzZQorCSAgc3ByaW50Zih0bXBidWYsIiVzICVzIixlZGl0b3B0cyxlZGl0ZmlsZSk7Cisg ICAgfQorICAgIHMgPSBsaW5lOworICAgIGNrbWFrbXNnKHMsTElOQlVGU0laLGVkaXRvciwiICIs dG1wYnVmLE5VTEwpOworI2lmZGVmIE9TMgorICAgIHAgPSBzICsgc3RybGVuKGVkaXRvcik7CQkv KiBBbmQgYWdhaW4gd2l0aCB0aGUgc2xhc2hlcyAqLworICAgIHdoaWxlIChwICE9IHMpIHsKKwlp ZiAoKnAgPT0gJy8nKSAqcCA9ICdcXCc7CisJcC0tOworICAgIH0KKyNlbmRpZiAvKiBPUzIgKi8K KyAgICBjb25yZXMoKTsKKyAgICB4ID0genNoY21kKHMpOworICAgIGNvbmNiKChjaGFyKWVzY2Fw ZSk7CisgICAgcmV0dXJuKHgpOworfQorI2VuZGlmIC8qIE5PRlJJTExTICovCisjZW5kaWYgLyog Tk9QVVNIICovCisKKyNpZmRlZiBCUk9XU0VSCitzdGF0aWMgaW50Citkb2Jyb3dzZSgpIHsKKyNp ZmRlZiBPUzIKKyAgICBjaGFyICogcCA9IE5VTEw7CisjZW5kaWYgLyogT1MyICovCisgICAgaWYg KG5vcHVzaCkgeworCXByaW50ZigiP1NvcnJ5LCBicm93c2luZyBub3QgYWxsb3dlZFxuIik7CisJ cmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKyAgICB9CisjaWZuZGVmIE5UCisgICAgLyogV2luZG93cyBs ZXRzIHRoZSBTaGVsbCBFeGVjdXRlIHRoZSBVUkwgaWYgbm8gQnJvd3NlciBpcyBkZWZpbmVkICov CisgICAgaWYgKCFicm93c2VyWzBdKSB7CisJcyA9IGdldGVudigiQlJPV1NFUiIpOworCWlmIChz KSBja3N0cm5jcHkoYnJvd3NlcixzLENLTUFYUEFUSCk7CisJYnJvd3NlcltDS01BWFBBVEhdID0g TlVMOworCWlmICghYnJvd3NlclswXSkgeworCSAgICBwcmludGYoIj9Ccm93c2VyIG5vdCBkZWZp bmVkIC0gdXNlIFNFVCBCUk9XU0VSIHRvIGRlZmluZVxuIik7CisJICAgIHJldHVybigtOSk7CisJ fQorICAgIH0KKyNlbmRpZiAvKiBOVCAqLworICAgIGNrc3RybmNweSh0bXBidWYsYnJvd3N1cmws VE1QQlVGU0laKTsKKyAgICBpZiAoKHggPSBjbXR4dCgiVVJMIiwoY2hhciAqKWJyb3dzdXJsLCZz LHh4c3RyaW5nKSkgPCAwKQorICAgICAgcmV0dXJuKHgpOworICAgIGNrc3RybmNweShicm93c3Vy bCxzLDQwOTYpOworICAgIHggPSAwOworICAgIGlmIChicm93c29wdHNbMF0pIHsKKyNpZmRlZiBP UzIKKwl4ID0gY2tpbmRleCgiJTEiLChjaGFyICopYnJvd3NvcHRzLDAsMCwxKTsKKwlpZiAoeCA+ IDApCisJICBicm93c29wdHNbeF0gPSAncyc7CisJZWxzZQorI2VuZGlmIC8qIE9TMiAqLworCSAg eCA9IGNraW5kZXgoIiVzIiwoY2hhciAqKWJyb3dzb3B0cywwLDAsMSk7CisgICAgfQorICAgIGlm ICgoKGludClzdHJsZW4oYnJvd3NvcHRzKSArIChpbnQpc3RybGVuKGJyb3dzdXJsKSArIDEpIDwg VE1QQlVGU0laKSB7CisJaWYgKHgpCisJICBzcHJpbnRmKHRtcGJ1Zixicm93c29wdHMsYnJvd3N1 cmwpOworCWVsc2UKKwkgIHNwcmludGYodG1wYnVmLCIlcyAlcyIsYnJvd3NvcHRzLGJyb3dzdXJs KTsKKyAgICB9CisjaWZkZWYgTlQKKyAgICBpZiAoIWJyb3dzZXJbMF0pCisgICAgICByZXR1cm4o c3VjY2VzcyA9IFdpbjMyU2hlbGxFeGVjdXRlKGJyb3dzdXJsKSk7CisjZW5kaWYgLyogTlQgKi8K KyAgICBzID0gbGluZTsKKyAgICBja21ha21zZyhzLExJTkJVRlNJWixicm93c2VyLCIgIix0bXBi dWYsTlVMTCk7CisjaWZkZWYgT1MyCisgICAgcCA9IGxpbmUgKyBzdHJsZW4oYnJvd3Nlcik7CQkv KiBGbGlwIHNsYXNoZXMgKi8KKyAgICB3aGlsZSAocCAhPSBsaW5lKSB7CisJaWYgKCpwID09ICcv JykgKnAgPSAnXFwnOworCXAtLTsKKyAgICB9CisjZW5kaWYgLyogT1MyICovCisgICAgY29ucmVz KCk7CisgICAgeCA9IHpzaGNtZChzKTsKKyAgICBjb25jYigoY2hhcillc2NhcGUpOworICAgIHJl dHVybih4KTsKK30KKyNlbmRpZiAvKiBCUk9XU0VSICovCisKKyNpZmRlZiBDS19SRUNBTEwKK3N0 YXRpYyBpbnQKK2RvcmVkbygpIHsJCQkvKiBGaW5kIGEgcHJldmlvdXMgY21kIGFuZCByZWRvIGl0 ICovCisgICAgZXh0ZXJuIGludCBvbl9yZWNhbGwsIGluX3JlY2FsbDsKKyAgICBpbnQgeDsKKyAg ICBjaGFyICogcDsKKworICAgIGlmICgoeCA9IGNtdHh0KAorInBhdHRlcm4sIG9yIGZpcnN0IGZl dyBjaGFyYWN0ZXJzIG9mIGEgcHJldmlvdXMgY29tbWFuZCIsCisJCSAgICIqIiwmcyx4eHN0cmlu ZykpIDwgMCkKKyAgICAgIHJldHVybih4KTsKKyAgICBja3N0cm5jcHkobGluZSxzLExJTkJVRlNJ Wik7CisgICAgeCA9IHN0cmxlbihzKTsKKyAgICBzID0gbGluZTsKKyAgICBpZiAoKnMgPT0gJ3sn KSB7CQkJLyogQnJhY2VzIGRpc2FibGUgYWRkaW5nICogdG8gZW5kICovCisJaWYgKHNbeC0xXSA9 PSAnfScpIHsKKwkgICAgc1t4LTFdID0gTlVMOworCSAgICBzKys7CisJICAgIHgtLTsKKwl9Cisg ICAgfSBlbHNlIHsJCQkJLyogTm8gYnJhY2VzLCBhZGQgKiB0byBlbmQuICovCisJc1t4XSA9ICcq JzsKKwlzW3grMV0gPSBOVUw7CisgICAgfQorCisgICAgd2hpbGUgKHggPiAwICYmIHNbeF0gPT0g JyonICYmIHNbeC0xXSA9PSAnKicpIHNbeC0tXSA9IE5VTDsKKworICAgIGlmICghb25fcmVjYWxs IHx8ICFpbl9yZWNhbGwpIHsKKwlwcmludGYoIj9Tb3JyeSwgY29tbWFuZCByZWNhbGwgY2FuJ3Qg YmUgdXNlZCBub3cuXG4iKTsKKwlyZXR1cm4oLTkpOworICAgIH0KKyAgICBpZiAoKHAgPSBjbWdl dGNtZChzKSkpIHsJCS8qIExvb2sgZm9yIGl0IGhpc3RvcnkgYnVmZmVyICovCisJY2ttYWttc2co Y21kYnVmLENNREJMLHAsIlxyIixOVUxMLE5VTEwpOyAvKiBDb3B5IHRvIGNvbW1hbmQgYnVmZmVy ICovCisJaWYgKCFxdWlldCkJCQkvKiBFY2hvIGl0ICovCisJICBwcmludGYoIiVzXG4iLGNtZGJ1 Zik7CisJY21hZGRuZXh0KCk7CQkJLyogRm9yY2UgcmUtYWRkIHRvIGhpc3RvcnkgYnVmZmVyICov CisJcmV0dXJuKGNtZmxncyA9IC0xKTsJCS8qIEZvcmNlIHJlcGFyc2UgKi8KKyAgICB9IGVsc2Ug eworCXByaW50ZigiP1NvcnJ5IC0gXCIlc1wiIG5vdCBmb3VuZFxuIiwgcyk7CisJcmV0dXJuKC05 KTsKKyAgICB9Cit9CisjZW5kaWYgLyogQ0tfUkVDQUxMICovCisKKyNpZm5kZWYgTk9YRkVSCisj aWZuZGVmIE5PQ1NFVFMKK3N0YXRpYyBpbnQKK2RvYXNzb2MoKSAgewkJCQkvKiBBU1NPQ0lBVEUg Ki8KKyAgICBleHRlcm4gc3RydWN0IGtleXRhYiB0Y3N0YWJbXTsKKyAgICBleHRlcm4gaW50IG50 Y3M7CisgICAgaWYgKCh4ID0gY21rZXkoYXNzb2N0YWIsIG5hc3NvYywgIiIsICIiLCB4eHN0cmlu ZykpIDwgMCApCisgICAgICByZXR1cm4oeCk7CisKKyAgICBzd2l0Y2ggKHgpIHsJCQkvKiBBc3Nv Y2lhdGUgd2hhdD8gKi8KKworICAgICAgY2FzZSBBU1NPQ19UQzoJCQkvKiBUcmFuc2ZlciBjaGFy YWN0ZXItc2V0Li4uICovCisJaWYgKCh4ID0gY21rZXkodGNzdGFiLCBudGNzLAorCQkgICAgICAg InRyYW5zZmVyIGNoYXJhY3Rlci1zZXQgbmFtZSIsIiIseHhzdHJpbmcpKSA8IDApCisJICByZXR1 cm4oeCk7CisJaWYgKCh5ID0gY21rZXkoZmNzdGFiLCBuZmlsYywKKwkJICAgICAgICJ3aXRoIGZp bGUgY2hhcmFjdGVyLXNldCIsIiIsIHh4c3RyaW5nKSkgPCAwKQorCSAgaWYgKHkgIT0gLTMpCisJ ICAgIHJldHVybih5KTsKKwlpZiAoKHogPSBjbWNmbSgpKSA8IDApCisJICByZXR1cm4oeik7CisJ YXhjc2V0W3hdID0geTsKKwlyZXR1cm4oc3VjY2VzcyA9IDEpOworCisgICAgICBjYXNlIEFTU09D X0ZDOgkJCS8qIEZpbGUgY2hhcmFjdGVyLXNldC4uLiAqLworCWlmICgoeCA9IGNta2V5KGZjc3Rh YiwgbmZpbGMsCisJCSAgICAgICAiZmlsZSBjaGFyYWN0ZXItc2V0IG5hbWUiLCIiLHh4c3RyaW5n KSkgPCAwKQorCSAgcmV0dXJuKHgpOworCWlmICgoeSA9IGNta2V5KHRjc3RhYiwgbnRjcywKKwkJ ICAgICAgICJ3aXRoIHRyYW5zZmVyIGNoYXJhY3Rlci1zZXQiLCIiLCB4eHN0cmluZykpIDwgMCkK KwkgIGlmICh5ICE9IC0zKQorCSAgICByZXR1cm4oeSk7CisJaWYgKCh6ID0gY21jZm0oKSkgPCAw KQorCSAgcmV0dXJuKHopOworCWFmY3NldFt4XSA9IHk7CisJcmV0dXJuKHN1Y2Nlc3MgPSAxKTsK KworICAgICAgZGVmYXVsdDoKKwlyZXR1cm4oLTIpOworICAgIH0KK30KKyNlbmRpZiAvKiBOT0NT RVRTICovCisjZW5kaWYgLyogTk9YRkVSICovCisKKyNpZm5kZWYgTk9IRUxQCitzdGF0aWMgaW50 Citkb21hbnVhbCgpIHsKKyNpZmRlZiBPUzIKKyAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApCisg ICAgICByZXR1cm4oeCk7CisgICAgaWYgKG5vcHVzaCkgeworCXByaW50ZigiP1NvcnJ5LCBhY2Nl c3MgdG8gc3lzdGVtIGNvbW1hbmRzIGlzIGRpc2FibGVkLlxuIik7CisJcmV0dXJuKC05KTsKKyAg ICB9CisgICAgeSA9IG14bG9vayhtYWN0YWIsIm1hbnVhbCIsbm1hYyk7CisgICAgaWYgKHkgPiAt MSkgeworCXogPSBtYWNsdmw7CQkJLyogU2F2ZSB0aGUgY3VycmVudCBtYWNsdmwgKi8KKwlkb2Rv KHksTlVMTCxjbWRzdGtbY21kbHZsXS5jY2ZsZ3MpOyAvKiBSdW4gdGhlIG1hY3JvICovCisJd2hp bGUgKG1hY2x2bCA+IHopIHsKKwkgICAgZGVidWcoRjEwMSwiWFhNQU4gbG9vcCBtYWNsdmwgMSIs IiIsbWFjbHZsKTsKKwkgICAgc3N0YXRlID0gKENIQVIpIHBhcnNlcigxKTsKKwkgICAgZGVidWco RjEwMSwiWFhNQU4gbG9vcCBtYWNsdmwgMiIsIiIsbWFjbHZsKTsKKwkgICAgaWYgKHNzdGF0ZSkg cHJvdG8oKTsKKwl9CisJZGVidWcoRjEwMSwiWFhNQU4gbG9vcCBleGl0IG1hY2x2bCIsIiIsbWFj bHZsKTsKKwlyZXR1cm4oc3VjY2Vzcyk7CisgICAgfQorICAgIHJldHVybihzdWNjZXNzID0gMCk7 CisjZWxzZQorICAgIGlmICgoeCA9IGNtdHh0KAorI2lmZGVmIFVOSVgKKwkJICAgIkNhcnJpYWdl IHJldHVybiB0byBjb25maXJtIHRoZSBjb21tYW5kLCBvciBtYW51YWwgdG9waWMiLAorI2Vsc2UK KwkJICAgIkNhcnJpYWdlIHJldHVybiB0byBjb25maXJtIHRoZSBjb21tYW5kLCBvciBoZWxwIHRv cGljIiwKKyNlbmRpZiAvKiBVTklYICovCisJCSAgICJrZXJtaXQiLAorCQkgICAmcywKKwkJICAg eHhzdHJpbmcKKwkJICAgKQorCSApIDwgMCkKKyAgICAgIHJldHVybih4KTsKKyNlbmRpZiAvKiBP UzIgKi8KKworI2lmZGVmIFVOSVgKKyAgICBja21ha21zZyh0bXBidWYsVE1QQlVGU0laLCJtYW4g IixzLE5VTEwsTlVMTCk7CisjZWxzZQorICAgIGNrbWFrbXNnKHRtcGJ1ZixUTVBCVUZTSVosImhl bHAgIixzLE5VTEwsTlVMTCk7CisjZW5kaWYgLyogVU5JWCAqLworICAgIGRlYnVnKEYxMTAsIk1B TlVBTCIsdG1wYnVmLDApOworICAgIGlmIChub3B1c2gpIHsKKwlwcmludGYoIj9Tb3JyeSwgYWNj ZXNzIHRvIHN5c3RlbSBjb21tYW5kcyBpcyBkaXNhYmxlZC5cbiIpOworCXJldHVybigtOSk7Cisg ICAgfSBlbHNlIHsKKwljb25yZXMoKTsJCQkvKiBSZXN0b3JlIHRoZSBjb25zb2xlICovCisJc3Vj Y2VzcyA9IHpzaGNtZCh0bXBidWYpOworCWNvbmNiKChjaGFyKWVzY2FwZSk7CQkvKiBSZXN0b3Jl IENCUkVBSyBtb2RlICovCisJcmV0dXJuKHN1Y2Nlc3MpOworICAgIH0KK30KKyNlbmRpZiAvKiBO T0hFTFAgKi8KKworI2lmbmRlZiBOT0hUVFAKKyNpZmRlZiBUQ1BTT0NLRVQKK3N0YXRpYyBzdHJ1 Y3Qga2V5dGFiIHNzbHN3dGFiW10gPSB7CisgICAgeyAiL3NzbCIsIDEsIDAgfSwKKyAgICB7ICIv dGxzIiwgMSwgMCB9Cit9OworCisjaWZuZGVmIE5PVVJMCitzdHJ1Y3QgdXJsZGF0YSBodHRwX3Vy bCA9IHtOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMfTsKKyNlbmRpZiAvKiBOT1VS TCAqLworCitzdGF0aWMgaW50Citkb2h0dHAoKSB7CQkJCS8qIEhUVFAgKi8KKyAgICBzdHJ1Y3Qg RkRCIHN3LCBrdywgZmk7CisgICAgaW50IG4sIGdldHZhbCwgYWxsaW5vbmUgPSAwOworICAgIGNo YXIgYywgKiBwOworICAgIGNoYXIgcmRuc1sxMjhdOworCisgICAgY2hhciAqIGh0dHBfYWdlbnQg PSBOVUxMOwkJLyogUGFyc2UgcmVzdWx0cyAqLworICAgIGNoYXIgKiBodHRwX2hkciAgID0gTlVM TDsKKyAgICBjaGFyICogaHR0cF91c2VyICA9IE5VTEw7CisgICAgY2hhciAqIGh0dHBfcGFzcyAg PSBOVUxMOworICAgIGNoYXIgKiBodHRwX21pbWUgID0gTlVMTDsKKyAgICBjaGFyICogaHR0cF9s ZmlsZSA9IE5VTEw7CisgICAgY2hhciAqIGh0dHBfcmZpbGUgPSBOVUxMOworICAgIGNoYXIgKiBo dHRwX2RmaWxlID0gTlVMTDsKKyAgICBjaGFyICAgaHR0cF9hcnJheSA9IE5VTDsKKyAgICBpbnQg ICAgaHR0cF9hY3Rpb24gPSAtMTsKKworICAgIGNoYXIgKiBodHRwX2hvc3QgPSBOVUxMOworICAg IGNoYXIgKiBodHRwX3NydiAgPSBOVUxMOworICAgIGludCAgICBodHRwX3NzbCAgPSAwOworCisg ICAgc3RhdGljIGNoYXIgKiBodHRwX2RfYWdlbnQgPSBOVUxMOworICAgIHN0YXRpYyBjaGFyICog aHR0cF9kX3VzZXIgPSBOVUxMOworICAgIHN0YXRpYyBjaGFyICogaHR0cF9kX3Bhc3MgPSBOVUxM OworCisgICAgc3RhdGljIGludCAgICBodHRwX2RfdHlwZSA9IDA7CisgICAgaW50ICAgICAgICAg ICBodHRwX3R5cGUgPSBodHRwX2RfdHlwZTsKKworI2lmZGVmIE9TMgorICAgIHAgPSAiS2VybWl0 IDk1IjsJCQkvKiBEZWZhdWx0IHVzZXIgYWdlbnQgKi8KKyNlbHNlCisgICAgcCA9ICJDLUtlcm1p dCI7CisjZW5kaWYgLyogT1MyICovCisgICAgbWFrZXN0cigmaHR0cF9hZ2VudCxwKTsKKyAgICBt YWtlc3RyKCZodHRwX21pbWUsInRleHQvSFRNTCIpOwkvKiBNSU1FIHR5cGUgZGVmYXVsdCAqLwor ICAgIHJkbnNbMF0gPSAnXDAnOworCisgICAgY21mZGJpKCZzdywJCQkJLyogMXN0IEZEQiAtIGdl bmVyYWwgc3dpdGNoZXMgKi8KKyAgICAgICBfQ01LRVksCQkJCS8qIGZjb2RlICovCisgICAgICAg Ik9QRU4sIENMT1NFLCBHRVQsIEhFQUQsIFBVVCwgSU5ERVgsIG9yIFBPU1QsXG4gb3Igc3dpdGNo IiwgLyogaGxwbXNnICovCisgICAgICAgIiIsCQkJCS8qIGRlZmF1bHQgKi8KKyAgICAgICAiIiwJ CQkJLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KKyAgICAgICBuaHR0cHN3dGFiLAkJCS8qIGFkZHRs IG51bWVyaWMgZGF0YSAxOiB0Ymwgc2l6ZSAqLworICAgICAgIDQsCQkJCS8qIGFkZHRsIG51bWVy aWMgZGF0YSAyOiA0ID0gY21zd2kgKi8KKyAgICAgICB4eHN0cmluZywJCQkvKiBQcm9jZXNzaW5n IGZ1bmN0aW9uICovCisgICAgICAgaHR0cHN3dGFiLAkJCS8qIEtleXdvcmQgdGFibGUgKi8KKyAg ICAgICAma3cJCQkJLyogUG9pbnRlciB0byBuZXh0IEZEQiAqLworICAgICAgICk7CisgICAgY21m ZGJpKCZrdywJCQkJLyogMm5kIEZEQiAtIGNvbW1hbmRzICovCisgICAgICAgX0NNS0VZLAkJCQkv KiBmY29kZSAqLworICAgICAgICJDb21tYW5kIiwJCQkvKiBobHBtc2cgKi8KKyAgICAgICAiIiwJ CQkJLyogZGVmYXVsdCAqLworICAgICAgICIiLAkJCQkvKiBhZGR0bCBzdHJpbmcgZGF0YSAqLwor ICAgICAgIG5odHRwdGFiLAkJCS8qIGFkZHRsIG51bWVyaWMgZGF0YSAxOiB0Ymwgc2l6ZSAqLwor ICAgICAgIDAsCQkJCS8qIGFkZHRsIG51bWVyaWMgZGF0YSAyOiAwID0ga2V5d29yZCAqLworICAg ICAgIHh4c3RyaW5nLAkJCS8qIFByb2Nlc3NpbmcgZnVuY3Rpb24gKi8KKyAgICAgICBodHRwdGFi LAkJCQkvKiBLZXl3b3JkIHRhYmxlICovCisgICAgICAgTlVMTAkJCQkvKiBQb2ludGVyIHRvIG5l eHQgRkRCICovCisgICAgICAgKTsKKworICAgIHdoaWxlICgxKSB7CisJeCA9IGNtZmRiKCZzdyk7 CQkJLyogUGFyc2Ugc29tZXRoaW5nICovCisJaWYgKHggPCAwKQkJCS8qIEVycm9yICovCisJICBn b3RvIHhodHRwOworCW4gPSBjbXJlc3VsdC5ucmVzdWx0OworCWlmIChjbXJlc3VsdC5mZGJhZGRy ID09ICZrdykJLyogQ29tbWFuZCAtIGV4aXQgdGhpcyBsb29wICovCisJICBicmVhazsKKwljID0g Y21nYnJrKCk7CQkJLyogU3dpdGNoLi4uICovCisJZ2V0dmFsID0gKGMgPT0gJzonIHx8IGMgPT0g Jz0nKTsKKwl4ID0gLTk7CisJaWYgKGdldHZhbCAmJiAhKGNtZ2t3ZmxncygpICYgQ01fQVJHKSkg eworCSAgICBwcmludGYoIj9UaGlzIHN3aXRjaCBkb2VzIG5vdCB0YWtlIGFuIGFyZ3VtZW50XG4i KTsKKwkgICAgZ290byB4aHR0cDsKKwl9CisJc3dpdGNoIChjbXJlc3VsdC5ucmVzdWx0KSB7CS8q IEhhbmRsZSBlYWNoIHN3aXRjaCAqLworICAgICAgICAgIGNhc2UgSFRfU1dfVFA6ICAgICAgICAg ICAgICAgIC8qIC9UT1NDUkVFTiAqLworICAgICAgICAgICAgaHR0cF90eXBlID0gMTsKKyAgICAg ICAgICAgIGJyZWFrOworCSAgY2FzZSBIVF9TV19BRzoJCS8qIC9BR0VOVCAqLworCSAgICBpZiAo Z2V0dmFsKSB7CisJCWlmICgoeCA9IGNtZmxkKCJVc2VyIGFnZW50IixwLCZzLHh4c3RyaW5nKSkg PCAwKQorCQkgIGdvdG8geGh0dHA7CisJICAgIH0gZWxzZSB7CisJCXMgPSBwOworCSAgICB9CisJ ICAgIG1ha2VzdHIoJmh0dHBfYWdlbnQscyk7CisJICAgIGJyZWFrOworCSAgY2FzZSBIVF9TV19I RDoJCS8qIC9IRUFERVIgKi8KKwkgICAgcyA9IE5VTEw7CisJICAgIGlmIChnZXR2YWwpIHsKKwkJ aWYgKCh4ID0gY21mbGQoIkhlYWRlciBsaW5lIiwiIiwmcyx4eHN0cmluZykpIDwgMCkgeworCQkg ICAgaWYgKHggPT0gLTMpCisJCSAgICAgIHMgPSBOVUxMOworCQkgICAgZWxzZQorCQkgICAgICBn b3RvIHhodHRwOworCQl9CisJICAgIH0KKwkgICAgbWFrZXN0cigmaHR0cF9oZHIscyk7CisJICAg IGJyZWFrOworCSAgY2FzZSBIVF9TV19VUzoJCS8qIC9VU0VSICovCisJICAgIHMgPSBOVUxMOwor CSAgICBpZiAoZ2V0dmFsKSB7CisJCWlmICgoeCA9IGNtZmxkKCJVc2VyIElEIiwiIiwmcyx4eHN0 cmluZykpIDwgMCkgeworICAgICAgICAgICAgICAgICAgaWYgKHggPT0gLTMpCisgICAgICAgICAg ICAgICAgICAgIHMgPSAiIjsKKyAgICAgICAgICAgICAgICAgIGVsc2UKKwkJICAgIGdvdG8geGh0 dHA7CisgICAgICAgICAgICAgICAgfQorCSAgICB9CisJICAgIG1ha2VzdHIoJmh0dHBfdXNlcixz KTsKKwkgICAgYnJlYWs7CisJICBjYXNlIEhUX1NXX1BXOgkJLyogL1BBU1NXT1JEICovCisJICAg IGRlYm9rID0gMDsKKwkgICAgcyA9IE5VTEw7CisJICAgIGlmIChnZXR2YWwpIHsKKwkJaWYgKCh4 ID0gY21mbGQoIlBhc3N3b3JkIiwiIiwmcyx4eHN0cmluZykpIDwgMCkKKwkJICBnb3RvIHhodHRw OworCSAgICB9CisJICAgIG1ha2VzdHIoJmh0dHBfcGFzcyxzKTsKKwkgICAgYnJlYWs7CisjaWZu ZGVmIE5PU1BMCisJICBjYXNlIEhUX1NXX0FSOiB7CQkvKiAvQVJSQVk6ICovCisJICAgICAgY2hh ciAqIHMyLCBhcnJheSA9IE5VTDsKKwkgICAgICBpZiAoIWdldHZhbCkgeworCQkgIHByaW50Zigi P1RoaXMgc3dpdGNoIHJlcXVpcmVzIGFuIGFyZ3VtZW50XG4iKTsKKwkJICB4ID0gLTk7CisJCSAg Z290byB4aHR0cDsKKwkgICAgICB9CisJICAgICAgaWYgKCh4ID0gY21mbGQoIkFycmF5IG5hbWUg KGEgc2luZ2xlIGxldHRlciB3aWxsIGRvKSIsCisJCQkgICAgICIiLAorCQkJICAgICAmcywKKwkJ CSAgICAgTlVMTAorCQkJICAgICApKSA8IDApIHsKKwkJICBpZiAoeCA9PSAtMykgeworCQkgICAg ICBwcmludGYoIj9BcnJheSBuYW1lIHJlcXVpcmVkXG4iKTsKKwkJICAgICAgeCA9IC05OworCQkg ICAgICBnb3RvIHhodHRwOworCQkgIH0gZWxzZQorCQkgICAgZ290byB4aHR0cDsKKwkgICAgICB9 CisJICAgICAgaWYgKCEqcykgeworCQkgIHByaW50ZigiP0FycmF5IG5hbWUgcmVxdWlyZWRcbiIp OworCQkgIHggPSAtOTsKKwkJICBnb3RvIHhodHRwOworCSAgICAgIH0KKwkgICAgICBzMiA9IHM7 CisJICAgICAgaWYgKCpzID09IENNRFEpIHMrKzsKKwkgICAgICBpZiAoKnMgPT0gJyYnKSBzKys7 CisJICAgICAgaWYgKCFpc2FscGhhKCpzKSkgeworCQkgIHByaW50ZigiP0JhZCBhcnJheSBuYW1l IC0gXCIlc1wiXG4iLHMyKTsKKwkJICB4ID0gLTk7CisJCSAgZ290byB4aHR0cDsKKwkgICAgICB9 CisJICAgICAgYXJyYXkgPSAqcysrOworCSAgICAgIGlmIChpc3VwcGVyKGFycmF5KSkKKwkJYXJy YXkgPSB0b2xvd2VyKGFycmF5KTsKKwkgICAgICBpZiAoKnMgJiYgKCpzICE9ICdbJyB8fCAqKHMr MSkgIT0gJ10nKSkgeworCQkgIHByaW50ZigiP0JhZCBhcnJheSBuYW1lIC0gXCIlc1wiXG4iLHMy KTsKKwkJICBodHRwX2FycmF5ID0gTlVMOworCQkgIHggPSAtOTsKKwkJICBnb3RvIHhodHRwOwor CSAgICAgIH0KKwkgICAgICBodHRwX2FycmF5ID0gYXJyYXk7CisJICAgICAgYnJlYWs7CisJICB9 CisjZW5kaWYgLyogTk9TUEwgKi8KKwkgIGRlZmF1bHQ6CisJICAgIHggPSAtMjsKKwkgICAgZ290 byB4aHR0cDsKKwl9CisgICAgfQorICAgIGh0dHBfYWN0aW9uID0gbjsJCQkvKiBTYXZlIHRoZSBh Y3Rpb24gKi8KKyAgICBpZiAoaHR0cF9hY3Rpb24gPT0gSFRUUF9QVVQgfHwgaHR0cF9hY3Rpb24g PT0gSFRUUF9QT1MpIHsKKwljbWZkYmkoJnN3LAkJCS8qIDFzdCBGREIgLSBzd2l0Y2ggKi8KKwkg ICAgICAgX0NNS0VZLAkJCS8qIGZjb2RlICovCisJICAgICAgICJMb2NhbCBmaWxlbmFtZVxuIE9y IHN3aXRjaCIsIC8qIGhlbHAgKi8KKwkgICAgICAgIiIsCQkJLyogZGVmYXVsdCAqLworCSAgICAg ICAiIiwJCQkvKiBhZGR0bCBzdHJpbmcgZGF0YSAqLworCSAgICAgICBuaHR0cHB0YWIsCQkvKiBr ZXl3b3JkIHRhYmxlIHNpemUgKi8KKwkgICAgICAgNCwJCQkvKiBhZGR0bCBudW1lcmljIGRhdGEg MjogNCA9IGNtc3dpICovCisJICAgICAgIHh4c3RyaW5nLAkJLyogUHJvY2Vzc2luZyBmdW5jdGlv biAqLworCSAgICAgICBodHRwcHRhYiwJCS8qIEtleXdvcmQgdGFibGUgKi8KKwkgICAgICAgJmZp CQkJLyogUG9pbnRlciB0byBuZXh0IEZEQiAqLworCSAgICAgICApOworCWNtZmRiaSgmZmksCQkJ LyogMm5kIEZEQiAtIGZpbGVuYW1lICovCisJICAgICAgIF9DTUlGSSwJCQkvKiBmY29kZSAqLwor CSAgICAgICAiTG9jYWwgZmlsZW5hbWUiLAkvKiBobHBtc2cgKi8KKwkgICAgICAgIiIsCQkJLyog ZGVmYXVsdCAqLworCSAgICAgICAiIiwJCQkvKiBhZGR0bCBzdHJpbmcgZGF0YSAqLworCSAgICAg ICAwLAkJCS8qIGFkZHRsIG51bWVyaWMgZGF0YSAxICovCisJICAgICAgIDAsCQkJLyogYWRkdGwg bnVtZXJpYyBkYXRhIDIgKi8KKwkgICAgICAgeHhzdHJpbmcsCisJICAgICAgIE5VTEwsCisJICAg ICAgIE5VTEwKKwkgICAgICAgKTsKKwl3aGlsZSAoMSkgeworCSAgICB4ID0gY21mZGIoJnN3KTsK KwkgICAgaWYgKHggPCAwKQorCSAgICAgIGdvdG8geGh0dHA7CQkvKiBGcmVlIGFueSBtYWxsb2Mn ZCB0ZW1wIHN0cmluZ3MgKi8KKwkgICAgbiA9IGNtcmVzdWx0Lm5yZXN1bHQ7CisJICAgIGlmIChj bXJlc3VsdC5mY29kZSAhPSBfQ01LRVkpCisJICAgICAgYnJlYWs7CisJICAgIGMgPSBjbWdicmso KTsJCS8qIFN3aXRjaC4uLiAqLworCSAgICBnZXR2YWwgPSAoYyA9PSAnOicgfHwgYyA9PSAnPScp OworCSAgICBpZiAoZ2V0dmFsICYmICEoY21na3dmbGdzKCkgJiBDTV9BUkcpKSB7CisJCXByaW50 ZigiP1RoaXMgc3dpdGNoIGRvZXMgbm90IHRha2UgYW4gYXJndW1lbnRcbiIpOworCQl4ID0gLTk7 CisJCWdvdG8geGh0dHA7CisJICAgIH0KKwkgICAgc3dpdGNoIChuKSB7CisJICAgICAgY2FzZSBI VF9QUF9NVDoKKwkJcyA9ICJ0ZXh0L0hUTUwiOworCQlpZiAoZ2V0dmFsKSB7CisJCSAgICBpZiAo KHggPSBjbWZsZCgiTUlNRSB0eXBlIiwKKwkJCQkgICAidGV4dC9IVE1MIiwmcyx4eHN0cmluZykp IDwgMCkKKwkJICAgICAgZ290byB4aHR0cDsKKwkJfQorCQltYWtlc3RyKCZodHRwX21pbWUscyk7 CisJCWJyZWFrOworCSAgICAgIGRlZmF1bHQ6CisJCXggPSAtMjsKKwkJZ290byB4aHR0cDsKKwkg ICAgfQorCX0KKwltYWtlc3RyKCZodHRwX2xmaWxlLGNtcmVzdWx0LnNyZXN1bHQpOworCW4gPSBj a2luZGV4KCIvIixodHRwX2xmaWxlLC0xLDEsMCk7CisJaWYgKG4pCisJICBwID0gJmh0dHBfbGZp bGVbbl07CisJZWxzZQorCSAgcCA9IGh0dHBfbGZpbGU7CisJaWYgKCh4ID0gY21mbGQoIlVSTCBv ciByZW1vdGUgZmlsZW5hbWUiLHAsJnMseHhzdHJpbmcpKSA8IDApIHsKKyAgICAgICAgICBpZiAo eCA9PSAtMykgeworICAgICAgICAgICAgcHJpbnRmKCI/JXMgd2hhdD9cbiIsKGh0dHBfYWN0aW9u ID09IEhUVFBfUFVUKSA/ICJQdXQiIDogIlBvc3QiKTsKKyAgICAgICAgICAgIHggPSAtOTsKKyAg ICAgICAgICB9CisgICAgICAgICAgZ290byB4aHR0cDsKKyAgICAgICAgfQorCWlmICghKnMpIHMg PSBOVUxMOworCW1ha2VzdHIoJmh0dHBfcmZpbGUscyk7CisKKwlpZiAoKHggPSBjbXR4dCgiUmVz cG9uc2UgZmlsZW5hbWUiLCIiLCZzLHh4c3RyaW5nKSkgPCAwKSB7CisgICAgICAgICAgaWYgKHgg IT0gLTMpCisgICAgICAgICAgICBnb3RvIHhodHRwOworICAgICAgICB9CisgICAgICAgIGlmICgq cykKKyAgICAgICAgICBtYWtlc3RyKCZodHRwX2RmaWxlLHMpOworICAgIH0KKyAgICBzd2l0Y2gg KGh0dHBfYWN0aW9uKSB7CisgICAgICBjYXNlIEhUVFBfREVMOgkJCS8qIERFTEVURSAqLworCWlm ICgoeCA9IGNtZmxkKCJVUkwgb3IgcmVtb3RlIHNvdXJjZSBmaWxlIiwiIiwmcyx4eHN0cmluZykp IDwgMCkgeworICAgICAgICAgIGlmICh4ID09IC0zKSB7CisgICAgICAgICAgICBwcmludGYoIj9E ZWxldGUgd2hhdD9cbiIpOworICAgICAgICAgICAgeCA9IC05OworICAgICAgICAgIH0KKyAgICAg ICAgICBnb3RvIHhodHRwOworICAgICAgICB9CisJbWFrZXN0cigmaHR0cF9yZmlsZSxzKTsKKwli cmVhazsKKyAgICAgIGNhc2UgSFRUUF9DT046CQkJLyogQ09OTkVDVCAqLworICAgICAgICBpZiAo KHggPSBjbWZsZCgiUmVtb3RlIGhvc3RbOnBvcnRdIiwiIiwmcyx4eHN0cmluZykpIDwgMCkgewor ICAgICAgICAgIGlmICh4ID09IC0zKSB7CisgICAgICAgICAgICBwcmludGYoIj9SZW1vdGUgaG9z dFs6cG9ydF0gaXMgcmVxdWlyZWRcbiIpOworICAgICAgICAgICAgeCA9IC05OworICAgICAgICAg IH0KKyAgICAgICAgICBnb3RvIHhodHRwOworICAgICAgICB9CisJbWFrZXN0cigmaHR0cF9yZmls ZSxzKTsKKwlicmVhazsKKyAgICAgIGNhc2UgSFRUUF9IRUQ6IHsJCQkvKiBIRUFEICovCisJICBj aGFyIGJ1ZltDS01BWFBBVEgrMV07CisJICBpZiAoKHggPSBjbWZsZCgiVVJMIG9yIHJlbW90ZSBz b3VyY2UgZmlsZSIsIiIsJnMseHhzdHJpbmcpKSA8IDApIHsKKwkgICAgICBpZiAoeCA9PSAtMykg eworCQkgIHByaW50ZigiP0hlYWQgb2Ygd2hhdD9cbiIpOworCQkgIHggPSAtOTsKKwkgICAgICB9 CisJICAgICAgZ290byB4aHR0cDsKKwkgIH0KKwkgIG1ha2VzdHIoJmh0dHBfcmZpbGUscyk7CisK KwkgIGlmIChodHRwX2FycmF5IHx8IGh0dHBfdHlwZSkgeyAvKiBEZWZhdWx0IHJlc3VsdCBmaWxl bmFtZSAqLworCSAgICAgIHAgPSAiIjsJCQkgLyogTm9uZSBpZiAvQVJSQVkgb3IgL1RPU0NSRUVO ICovCisJICB9IGVsc2UgeworCSAgICAgIG4gPSBja2luZGV4KCIvIixodHRwX3JmaWxlLC0xLDEs MCk7IC8qIE90aGVyd2lzZSBzdHJpcCBwYXRoICovCisJICAgICAgaWYgKG4pCQkgICAgICAgICAg ICAgICAgICAvKiBhbmQgYWRkICIuaGVhZCIgKi8KKwkJcCA9ICZodHRwX3JmaWxlW25dOworCSAg ICAgIGVsc2UKKwkJcCA9IGh0dHBfcmZpbGU7CisJICAgICAgY2ttYWttc2coYnVmLENLTUFYUEFU SCxwLCIuaGVhZCIsTlVMTCxOVUxMKTsKKwkgICAgICBwID0gYnVmOworCSAgfQorCSAgaWYgKCh4 ID0gY21vZmkoIkxvY2FsIGZpbGVuYW1lIixwLCZzLHh4c3RyaW5nKSkgPCAwKSB7CisJICAgICAg aWYgKHggIT0gLTMpCisJCWdvdG8geGh0dHA7CisJICB9CisJICBtYWtlc3RyKCZodHRwX2xmaWxl LHMpOworCSAgYnJlYWs7CisgICAgICB9CisgICAgICBjYXNlIEhUVFBfR0VUOgkJCS8qIEdFVCAq LworICAgICAgY2FzZSBIVFRQX0lEWDogewkJCS8qIElOREVYICovCisJICBleHRlcm4gaW50IHdp bGRlbmE7CisJICBpbnQgdG1wOworCSAgY2hhciAqIGxmaWxlID0gIiI7CisJICBpZiAoKHggPSBj bWZsZCgiVVJMIG9yIHJlbW90ZSBzb3VyY2UgZmlsZSIsIiIsJnMseHhzdHJpbmcpKSA8IDApIHsK KwkgICAgICBpZiAoeCA9PSAtMykgeworCQkgIHByaW50ZigiP0dldCB3aGF0P1xuIik7CisJCSAg eCA9IC05OworCSAgICAgIH0KKwkgICAgICBnb3RvIHhodHRwOworCSAgfQorCSAgbWFrZXN0cigm aHR0cF9yZmlsZSxzKTsKKwkgIGlmIChodHRwX2FjdGlvbiA9PSBIVFRQX0dFVCAmJiAhaHR0cF90 eXBlKQorCSAgICB6c3RyaXAoaHR0cF9yZmlsZSwmbGZpbGUpOworCSAgLyogVVJMcyBvZnRlbiBj b250YWluIHF1ZXN0aW9uIG1hcmtzIG9yIG90aGVyIG1ldGFjaGFyYWN0ZXJzICovCisJICAvKiBj bW9maSgpIGRvZXNuJ3QgbGlrZSB0aGVtICovCisJICB0bXAgPSB3aWxkZW5hOworCSAgd2lsZGVu YSA9IDA7CisJICBpZiAoKHggPSBjbW9maSgiTG9jYWwgZmlsZW5hbWUiLGxmaWxlLCZzLHh4c3Ry aW5nKSkgPCAwKSB7CisJICAgICAgd2lsZGVuYSA9IHRtcDsKKwkgICAgICBpZiAoeCAhPSAtMykK KwkJZ290byB4aHR0cDsKKwkgIH0KKwkgIHdpbGRlbmEgPSB0bXA7CisJICBtYWtlc3RyKCZodHRw X2xmaWxlLHMpOworCSAgYnJlYWs7CisgICAgICB9CisgICAgICBjYXNlIEhUVFBfT1BOOiB7CisJ ICBpbnQgc3Nsc3dpdGNoID0gMDsKKyNpZmRlZiBDS19TU0wKKwkgIHN0cnVjdCBGREIgc3csIGZs OworCSAgY21mZGJpKCZzdywKKwkJIF9DTUtFWSwJCS8qIGZjb2RlICovCisJCSAiSVAgaG9zdCBu YW1lIG9yIGFkZHJlc3MsIG9yIHN3aXRjaCIsIC8qIGhscG1zZyAqLworCQkgIiIsCQkJLyogZGVm YXVsdCAqLworCQkgIiIsCQkJLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KKwkJIDIsCQkJLyogYWRk dGwgbnVtZXJpYyBkYXRhIDE6IHRibCBzaXplICovCisJCSA0LAkJCS8qIGFkZHRsIG51bWVyaWMg ZGF0YSAyOiA0ID0gY21zd2kgKi8KKwkJIHh4c3RyaW5nLAkJLyogUHJvY2Vzc2luZyBmdW5jdGlv biAqLworCQkgc3Nsc3d0YWIsCQkvKiBLZXl3b3JkIHRhYmxlICovCisJCSAmZmwJCQkvKiBQb2lu dGVyIHRvIG5leHQgRkRCICovCisJCSApOworCSAgY21mZGJpKCZmbCwJCQkvKiAybmQgRkRCIC0g aG9zdCAqLworCQkgX0NNRkxELAkJLyogZmNvZGUgKi8KKwkJICIiLAkJCS8qIGhscG1zZyAqLwor CQkgIiIsCQkJLyogZGVmYXVsdCAqLworCQkgIiIsCQkJLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8K KwkJIDAsCQkJLyogYWRkdGwgbnVtZXJpYyBkYXRhIDEgKi8KKwkJIDAsCQkJLyogYWRkdGwgbnVt ZXJpYyBkYXRhIDIgKi8KKwkJIHh4c3RyaW5nLAorCQkgTlVMTCwKKwkJIE5VTEwKKwkJICk7CisJ ICB4ID0gY21mZGIoJnN3KTsJCS8qIFBhcnNlIHN3aXRjaCBvciBob3N0ICovCisJICBpZiAoeCA8 IDApCQkJLyogRXJyb3IgKi8KKwkgICAgZ290byB4aHR0cDsKKwkgIGlmIChjbXJlc3VsdC5mY29k ZSA9PSBfQ01GTEQpIHsgLyogSG9zdCAqLworCSAgICAgIHMgPSBjbXJlc3VsdC5zcmVzdWx0Owkg IC8qIFNldCB1cCBleHBlY3RlZCBwb2ludGVyICovCisJICAgICAgZ290byBoYXZlaG9zdDsgICAg ICAgICAgICAgIC8qIEdvIHBhcnNlIHJlc3Qgb2YgY29tbWFuZCAqLworCSAgfQorCSAgc3Nsc3dp dGNoID0gMTsJCS8qIC9TU0wgb3IgL1RMUyBzd2l0Y2ggLSBzZXQgZmxhZyAqLworI2VuZGlmIC8q IENLX1NTTCAqLworCisJICAvKiBQYXJzZSBob3N0ICovCisKKwkgIGlmICgoeCA9IGNtZmxkKCJV UkwsIGhvc3RuYW1lLCBvciBpcC1hZGRyZXNzIiwiIiwmcyx4eHN0cmluZykpIDwgMCkgeworCSAg ICAgIGlmICh4ID09IC0zKSB7CisJCSAgcHJpbnRmKCI/T3BlbiB3aGF0P1xuIik7CisJCSAgeCA9 IC05OworCSAgICAgIH0KKwkgICAgICBnb3RvIHhodHRwOworCSAgfQorCisJaGF2ZWhvc3Q6CQkJ LyogQ29tZSBoZXJlIHdpdGggcyAtPiBob3N0ICovCisjaWZkZWYgQ0tfVVJMCisJICB4ID0gdXJs cGFyc2UocywmaHR0cF91cmwpOwkvKiBXYXMgYSBVUkwgZ2l2ZW4/ICovCisJICBpZiAoeCA8IDEp IHsJCQkvKiBOb3QgYSBVUkwgKi8KKyNlbmRpZiAvKiBDS19VUkwgKi8KKwkgICAgICBtYWtlc3Ry KCZodHRwX2hvc3Qscyk7CisJICAgICAgaWYgKCh4ID0KKwkJICAgY21mbGQoIlNlcnZpY2UgbmFt ZSBvciBwb3J0IG51bWJlciIsCisJCQkgc3Nsc3dpdGNoID8gImh0dHBzIiA6ICJodHRwIiwmcyx4 eHN0cmluZykpIDwgMCkKKwkJZ290byB4aHR0cDsKKwkgICAgICBlbHNlCisJCW1ha2VzdHIoJmh0 dHBfc3J2LHMpOworI2lmZGVmIENLX1VSTAorCSAgfSBlbHNlIGlmIChja3N0cmNtcChodHRwX3Vy bC5zdmMsImh0dHAiLC0xLDApICYmIC8qIE5vbi1IVFRQIFVSTCAqLworCQkgICAgIGNrc3RyY21w KGh0dHBfdXJsLnN2YywiaHR0cHMiLC0xLDApKSB7CisJICAgICAgcHJpbnRmKCI/Tm9uLUhUVFAg VVJMXG4iKTsKKwkgICAgICB4ID0gLTk7CisJICAgICAgZ290byB4aHR0cDsKKwkgIH0gZWxzZSB7 CQkJLyogSGF2ZSBIVFRQIFVSTCAqLworCSAgICAgIG1ha2VzdHIoJmh0dHBfc3J2LCBodHRwX3Vy bC5zdmMpOworCSAgICAgIG1ha2VzdHIoJmh0dHBfdXNlcixodHRwX3VybC51c3IpOworCSAgICAg IG1ha2VzdHIoJmh0dHBfcGFzcyxodHRwX3VybC5wc3cpOworCSAgICAgIG1ha2VzdHIoJmh0dHBf aG9zdCxodHRwX3VybC5ob3MpOworCSAgICAgIGlmIChodHRwX3VybC5wb3IpCisJCW1ha2VzdHIo Jmh0dHBfc3J2LGh0dHBfdXJsLnBvcik7CisJICAgICAgbWFrZXN0cigmaHR0cF9yZmlsZSxodHRw X3VybC5wdGgpOworCSAgfQorCSAgaWYgKGh0dHBfcmZpbGUpIHsJCS8qIE9wZW4sIEdFVCwgYW5k IENsb3NlICovCisJICAgICAgcHJpbnRmKCI/RGlyZWN0b3J5L2ZpbGUgcGF0aCBub3QgYWxsb3dl ZCBpbiBIVFRQIE9QRU4gVVJMXG4iKTsKKwkgICAgICB4ID0gLTk7CisJICAgICAgZ290byB4aHR0 cDsKKwkgIH0KKwkgIGlmICghY2tzdHJjbXAoImh0dHBzIixodHRwX3NydiwtMSwwKSB8fCBzc2xz d2l0Y2ggfHwKKwkgICAgICAhY2tzdHJjbXAoIjQ0MyIsaHR0cF9zcnYsLTEsMCkpCisJICAgIGh0 dHBfc3NsID0gMTsKKyNlbmRpZiAvKiBDS19VUkwgKi8KKwkgIGJyZWFrOworICAgICAgfQorICAg ICAgY2FzZSBIVFRQX0NMUzoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGlmICgoeCA9IGNt Y2ZtKCkpIDwgMCkKKyAgICAgIGdvdG8geGh0dHA7CisKKyAgICBpZiAoaHR0cF9hY3Rpb24gPT0g SFRUUF9PUE4pIHsKKyAgICAgICAgeCA9IChodHRwX29wZW4oaHR0cF9ob3N0LGh0dHBfc3J2LGh0 dHBfc3NsLHJkbnMsMTI4LGh0dHBfYWdlbnQpID09IDApOworICAgICAgICBpZiAoeCkgeworICAg ICAgICAgICAgaWYgKCFxdWlldCkgeworICAgICAgICAgICAgICBpZiAocmRuc1swXSkKKyAgICAg ICAgICAgICAgICBwcmludGYoIkNvbm5lY3RlZCB0byAlcyBbJXNdXHJcbiIsaHR0cF9ob3N0LHJk bnMpOworICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcHJpbnRmKCJDb25uZWN0 ZWQgdG8gJXNcclxuIixodHRwX2hvc3QpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg KGh0dHBfYWdlbnQpIHsKKyAgICAgICAgICAgICAgICBpZiAoaHR0cF9kX2FnZW50KQorCQkgIGZy ZWUoaHR0cF9kX2FnZW50KTsKKyAgICAgICAgICAgICAgICBodHRwX2RfYWdlbnQgPSBodHRwX2Fn ZW50OworICAgICAgICAgICAgICAgIGh0dHBfYWdlbnQgPSBOVUxMOworICAgICAgICAgICAgfQor ICAgICAgICAgICAgaWYgKGh0dHBfdXNlcikgeworICAgICAgICAgICAgICAgIGlmIChodHRwX2Rf dXNlcikKKwkJICBmcmVlKGh0dHBfZF91c2VyKTsKKyAgICAgICAgICAgICAgICBodHRwX2RfdXNl ciA9IGh0dHBfdXNlcjsKKyAgICAgICAgICAgICAgICBodHRwX3VzZXIgPSBOVUxMOworICAgICAg ICAgICAgfQorICAgICAgICAgICAgaWYgKGh0dHBfcGFzcykgeworICAgICAgICAgICAgICAgIGlm IChodHRwX2RfcGFzcykgeworICAgICAgICAgICAgICAgICAgICBtZW1zZXQoaHR0cF9kX3Bhc3Ms MCxzdHJsZW4oaHR0cF9kX3Bhc3MpKTsKKyAgICAgICAgICAgICAgICAgICAgZnJlZShodHRwX2Rf cGFzcyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGh0dHBfZF9wYXNzID0g aHR0cF9wYXNzOworICAgICAgICAgICAgICAgIGh0dHBfcGFzcyA9IE5VTEw7CisgICAgICAgICAg ICB9CisgICAgICAgICAgICBodHRwX2RfdHlwZSA9IGh0dHBfdHlwZTsKKyAgICAgICAgfSBlbHNl IHsKKyAgICAgICAgICAgIGlmICghcXVpZXQpCisJICAgICAgcHJpbnRmKCI/SFRUUCBDb25uZWN0 aW9uIGZhaWxlZC5cclxuIik7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGh0dHBfYWN0aW9u ID09IEhUVFBfQ0xTKSB7CisgICAgICAgIGlmIChodHRwX2RfYWdlbnQpIHsKKyAgICAgICAgICAg IGZyZWUoaHR0cF9kX2FnZW50KTsKKyAgICAgICAgICAgIGh0dHBfZF9hZ2VudCA9IE5VTEw7Cisg ICAgICAgIH0KKyAgICAgICAgaWYgKGh0dHBfZF91c2VyKSB7CisgICAgICAgICAgICBmcmVlKGh0 dHBfZF91c2VyKTsKKyAgICAgICAgICAgIGh0dHBfZF91c2VyID0gTlVMTDsKKyAgICAgICAgfQor ICAgICAgICBpZiAoaHR0cF9kX3Bhc3MpIHsKKyAgICAgICAgICAgIG1lbXNldChodHRwX2RfcGFz cywwLHN0cmxlbihodHRwX2RfcGFzcykpOworICAgICAgICAgICAgZnJlZShodHRwX2RfcGFzcyk7 CisgICAgICAgICAgICBodHRwX2RfcGFzcyA9IE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgaHR0 cF9kX3R5cGUgPSAwOworICAgICAgICB4ID0gKGh0dHBfY2xvc2UoKSA9PSAwKTsKKyAgICB9Cisg ICAgaWYgKChodHRwX2FjdGlvbiAhPSBIVFRQX0NMUykgJiYKKwkoaHR0cF9hY3Rpb24gIT0gSFRU UF9DT04pICYmIGh0dHBfcmZpbGUpIHsgLyogUmVtb3RlIGZpbGUgaXMgVVJMPyAqLworCisJLyog QWxsLWluLW9uZSBhY3Rpb25zIHdoZW4gYSBVUkwgaXMgZ2l2ZW4uLi4gKi8KKworI2lmZGVmIENL X1VSTAorCWlmICh1cmxwYXJzZShodHRwX3JmaWxlLCZodHRwX3VybCkgPiAwKSB7IC8qIEhhdmUg VVJMPyAqLworCSAgICBpZiAoY2tzdHJjbXAoaHR0cF91cmwuc3ZjLCJodHRwIiwtMSwwKSAmJiAv KiBJdCdzIGFuIEhUVFAgVVJMPyAqLworCQlja3N0cmNtcChodHRwX3VybC5zdmMsImh0dHBzIiwt MSwwKSkgeworCQlwcmludGYoIj9Ob24tSFRUUCBVUkxcbiIpOworCQl4ID0gLTk7CisJCWdvdG8g eGh0dHA7CisJICAgIH0gZWxzZSB7CQkJLyogWWVzLCBjb2xsZWN0IHRoZSBwaWVjZXMgKi8KKwkJ bWFrZXN0cigmaHR0cF9zcnYsIGh0dHBfdXJsLnN2Yyk7CisJCW1ha2VzdHIoJmh0dHBfdXNlcixo dHRwX3VybC51c3IpOworCQltYWtlc3RyKCZodHRwX3Bhc3MsaHR0cF91cmwucHN3KTsKKwkJbWFr ZXN0cigmaHR0cF9ob3N0LGh0dHBfdXJsLmhvcyk7CisJCWlmIChodHRwX3VybC5wb3IpCisJCSAg bWFrZXN0cigmaHR0cF9zcnYsaHR0cF91cmwucG9yKTsKKwkJbWFrZXN0cigmaHR0cF9yZmlsZSxo dHRwX3VybC5wdGgpOworCSAgICB9CisJICAgIGlmICghaHR0cF9yZmlsZSkgewkJLyogU3RpbGwg aGF2ZSBhIHBhdGg/ICovCisgICAgICAgICAgICAgICAgbWFrZXN0cigmaHR0cF9yZmlsZSwiLyIp OworCSAgICB9CisJICAgIGlmICghY2tzdHJjbXAoImh0dHBzIixodHRwX3NydiwtMSwwKSB8fCAv KiBDaGVjayBmb3IgU1NML1RMUyAqLworCQkhY2tzdHJjbXAoIjQ0MyIsaHR0cF9zcnYsLTEsMCkp CisJICAgICAgaHR0cF9zc2wgPSAxOworCSAgICBpZiAoaHR0cF9pc2Nvbm5lY3RlZCgpKQkvKiBD bG9zZSBhbnkgb3BlbiBIVFRQIGNvbm5lY3Rpb24gKi8KKwkgICAgICBodHRwX2Nsb3NlKCk7CisJ ICAgIGlmIChodHRwX3Bhc3MgPT0gTlVMTCAmJiBodHRwX2RfcGFzcyAhPSBOVUxMKQorCSAgICAg IG1ha2VzdHIoJmh0dHBfcGFzcyxodHRwX2RfcGFzcyk7CisJICAgIHggPSAoaHR0cF9vcGVuKGh0 dHBfaG9zdCwKKwkJCSAgIGh0dHBfc3J2LGh0dHBfc3NsLHJkbnMsMTI4LGh0dHBfZF9hZ2VudCkg PT0gMCk7CisJICAgIGlmICh4IDwgMCkgeworCQl4ID0gMDsKKwkJZ290byB4aHR0cDsKKwkgICAg fQorCSAgICBhbGxpbm9uZSA9IDE7CisJfQorI2VuZGlmIC8qIENLX1VSTCAqLworICAgICAgICBp ZiAoaHR0cF9wYXNzID09IE5VTEwgJiYgaHR0cF9kX3Bhc3MgIT0gTlVMTCkKKwkgIG1ha2VzdHIo Jmh0dHBfcGFzcyxodHRwX2RfcGFzcyk7CisKKwlpZiAoaHR0cF9hY3Rpb24gPT0gSFRUUF9PUE4g JiYgYWxsaW5vbmUpIHsKKwkgICAgaHR0cF9hY3Rpb24gPSBIVFRQX0dFVDsKKwl9CisgICAgICAg IHggPSB4ZG9odHRwKGh0dHBfYWN0aW9uLAorICAgICAgICAgICAgICAgICAgICBodHRwX2xmaWxl LAorCQkgICAgaHR0cF9yZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgaHR0cF9kZmlsZSwKKwkJ ICAgIGh0dHBfYWdlbnQgPyBodHRwX2FnZW50IDogaHR0cF9kX2FnZW50LAorCQkgICAgaHR0cF9o ZHIsCisJCSAgICBodHRwX3VzZXIgID8gaHR0cF91c2VyICA6IGh0dHBfZF91c2VyLAorCQkgICAg aHR0cF9wYXNzICA/IGh0dHBfcGFzcyAgOiBodHRwX2RfcGFzcywKKwkJICAgIGh0dHBfbWltZSwK KwkJICAgIGh0dHBfYXJyYXksCisJCSAgICBodHRwX3R5cGUKKwkJICAgICk7CisJaWYgKGFsbGlu b25lKQorCSAgeCA9IChodHRwX2Nsb3NlKCkgPT0gMCk7CisgICAgfQorCisgIHhodHRwOgorICAg IGlmIChodHRwX2FnZW50KSBmcmVlKGh0dHBfYWdlbnQpOworICAgIGlmIChodHRwX2hkcikgICBm cmVlKGh0dHBfaGRyKTsKKyAgICBpZiAoaHR0cF91c2VyKSAgZnJlZShodHRwX3VzZXIpOworICAg IGlmIChodHRwX3Bhc3MpIHsKKyAgICAgICAgbWVtc2V0KGh0dHBfcGFzcywwLHN0cmxlbihodHRw X3Bhc3MpKTsKKyAgICAgICAgZnJlZShodHRwX3Bhc3MpOworICAgIH0KKyAgICBpZiAoaHR0cF9t aW1lKSAgZnJlZShodHRwX21pbWUpOworICAgIGlmIChodHRwX2xmaWxlKSBmcmVlKGh0dHBfbGZp bGUpOworICAgIGlmIChodHRwX3JmaWxlKSBmcmVlKGh0dHBfcmZpbGUpOworICAgIGlmIChodHRw X2RmaWxlKSBmcmVlKGh0dHBfZGZpbGUpOworICAgIGlmIChodHRwX2hvc3QpICBmcmVlKGh0dHBf aG9zdCk7CisgICAgaWYgKGh0dHBfc3J2KSAgIGZyZWUoaHR0cF9zcnYpOworCisgICAgaWYgKHgg PiAtMSkKKyAgICAgIHN1Y2Nlc3MgPSB4OworICAgIHJldHVybih4KTsKK30KKyNlbmRpZiAvKiBU Q1BTT0NLRVQgKi8KKyNlbmRpZiAvKiBOT0hUVFAgKi8KKworCisjaWZuZGVmIE5PU1BMCitzdGF0 aWMgaW50Citkb3RyYWNlKCkgeworICAgIGludCBvbiA9IDE7CisgICAgc3RydWN0IEZEQiBzdywg a3c7CisgICAgY21mZGJpKCZzdywJCQkJLyogMXN0IEZEQiAtIHN3aXRjaCAqLworCSAgIF9DTUtF WSwJCQkvKiBmY29kZSAqLworCSAgICJUcmFjZSBvYmplY3Q7XG4gT3Igc3dpdGNoIiwgLyogaGVs cCAqLworCSAgICIiLAkJCQkvKiBkZWZhdWx0ICovCisJICAgIiIsCQkJCS8qIGFkZHRsIHN0cmlu ZyBkYXRhICovCisJICAgMiwJCQkJLyoga2V5d29yZCB0YWJsZSBzaXplICovCisJICAgNCwJCQkJ LyogYWRkdGwgbnVtZXJpYyBkYXRhIDI6IDQgPSBjbXN3aSAqLworCSAgIHh4c3RyaW5nLAkJCS8q IFByb2Nlc3NpbmcgZnVuY3Rpb24gKi8KKwkgICBvbm9mZnN3LAkJCS8qIEtleXdvcmQgdGFibGUg Ki8KKwkgICAma3cJCQkJLyogUG9pbnRlciB0byBuZXh0IEZEQiAqLworCSAgICk7CisgICAgY21m ZGJpKCZrdywJCQkJLyogMm5kIEZEQiAtIFRyYWNlIG9iamVjdCAqLworCSAgIF9DTUtFWSwJCQkv KiBmY29kZSAqLworCSAgICJUcmFjZSBvYmplY3QiLAkJLyogaGVscCAqLworCSAgICJhbGwiLAkJ CS8qIGRlZmF1bHQgKi8KKwkgICAiIiwJCQkJLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KKwkgICBu dHJhY2V0YWIsCQkJLyoga2V5d29yZCB0YWJsZSBzaXplICovCisJICAgMCwJCQkJLyogYWRkdGwg bnVtZXJpYyBkYXRhIDI6IDAgPSBrZXl3b3JkICovCisJICAgeHhzdHJpbmcsCQkJLyogUHJvY2Vz c2luZyBmdW5jdGlvbiAqLworCSAgIHRyYWNldGFiLAkJCS8qIEtleXdvcmQgdGFibGUgKi8KKwkg ICBOVUxMCQkJCS8qIFBvaW50ZXIgdG8gbmV4dCBGREIgKi8KKwkgICApOworICAgIGlmICgoeCA9 IGNtZmRiKCZzdykpIDwgMCkKKyAgICAgIHJldHVybih4KTsKKyAgICBpZiAoY21yZXN1bHQuZmRi YWRkciA9PSAmc3cpIHsKKwlvbiA9IGNtcmVzdWx0Lm5yZXN1bHQ7CisJaWYgKCh4ID0gY21rZXko dHJhY2V0YWIsIG50cmFjZXRhYiwiIiwiYWxsIix4eHN0cmluZykpIDwgMCkKKwkgIHJldHVybih4 KTsKKyAgICB9IGVsc2UgeworCXggPSBjbXJlc3VsdC5ucmVzdWx0OworICAgIH0KKyAgICBpZiAo KHkgPSBjbWNmbSgpKSA8IDApCisgICAgICByZXR1cm4oeSk7CisKKyAgICBzd2l0Y2ggKHgpIHsK KyAgICAgIGNhc2UgVFJBX0FTRzoKKwl0cmFfYXNnID0gb247CisJYnJlYWs7CisgICAgICBjYXNl IFRSQV9DTUQ6CisJdHJhX2NtZCA9IG9uOworCWJyZWFrOworICAgICAgY2FzZSBUUkFfQUxMOgor CXRyYV9hc2cgPSBvbjsKKwl0cmFfY21kID0gb247CisJYnJlYWs7CisgICAgICBkZWZhdWx0Ogor CXJldHVybigtMik7CisgICAgfQorICAgIHByaW50ZigiVFJBQ0UgJXNcbiIsIG9uID8gIk9OIiA6 ICJPRkYiKTsKKyAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworfQorI2VuZGlmIC8qIE5PU1BMICov CisKKworc3RhdGljIGludAorZG9wcm9tcHQoKSB7CisgICAgZXh0ZXJuIGludCB4Y21kc3JjOwor ICAgIGlmICgoeCA9IGNtdHh0KCJPcHRpb25hbCBtZXNzYWdlIiwiIiwmcyx4eHN0cmluZykpIDwg MCkKKyAgICAgIHJldHVybih4KTsKKyNpZmRlZiBOT1NQTAorICAgIHByaW50ZigiP1NvcnJ5LCBQ Uk9NUFQgcmVxdWlyZXMgc2NyaXB0IHByb2dyYW1taW5nIGxhbmd1YWdlXG4iKTsKKyAgICByZXR1 cm4oLTkpOworI2Vsc2UKKyAgICBkZWJ1ZyhGMTAxLCJQcm9tcHQgY21kbHZsIiwiIixjbWRsdmwp OworICAgIGNtZGx2bCsrOworICAgIGlmIChjbWRsdmwgPiBDTURTVEtMKSB7CisJcHJpbnRmKCI/ Q29tbWFuZCBzdGFjayBvdmVyZmxvdzogJWRcbiIsY21kbHZsKTsKKwljbWRsdmwtLTsKKwlyZXR1 cm4oLTkpOworICAgIH0KKyAgICB4Y21kc3JjID0gQ01EX0tCOworICAgIGNtZHN0a1tjbWRsdmxd LnNyYyA9IENNRF9LQjsJLyogU2F5IHdlJ3JlIGF0IHRoZSBwcm9tcHQgKi8KKyAgICBjbWRzdGtb Y21kbHZsXS5sdmwgPSAwOworICAgIGNtZHN0a1tjbWRsdmxdLmNjZmxncyA9IGNtZHN0a1tjbWRs dmwtMV0uY2NmbGdzOworICAgIGlmICh0cmFfY21kKQorICAgICAgcHJpbnRmKCJbJWRdICtQOiBc Iihwcm9tcHQpXCJcbiIsY21kbHZsKTsKKyAgICBjb25jYigoY2hhcillc2NhcGUpOworICAgIGlm ICghcXVpZXQpCisgICAgICBwcmludGYoCisiKFJlY3Vyc2l2ZSBjb21tYW5kIHByb21wdDogUmVz dW1lIHNjcmlwdCB3aXRoIENPTlRJTlVFLCBTVE9QIHRvIHN0b3AuLi4pXG4iCisgICAgICAgICAg ICApOworICAgIGlmICgqcykgewkJCQkvKiBJZiBwcm9tcHQgZ2l2ZW4gKi8KKwltYWtlc3RyKCYo cHJzdHJpbmdbY21kbHZsLTFdKSxjbWdldHAoKSk7IC8qIFNhdmUgY3VycmVudCBwcm9tcHQgKi8K KwljbXNldHAocyk7CQkJLyogU2V0IG5ldyBvbmUgKi8KKyAgICB9CisgICAgcmV0dXJuKHN1Y2Nl c3MgPSAxKTsKKyNlbmRpZiAvKiBOT1NQTCAqLworfQorCisjaWZkZWYgQ0tMRUFSTgorVk9JRAor bGVhcm5jbWQocykgY2hhciAqczsgewkJCS8qIFJlY29yZCBjb21tYW5kcyBpbiBsZWFybmVkIHNj cmlwdCAqLworICAgIGNoYXIgYnVmWzY0XTsKKyAgICBpbnQgaSwgazsKKyAgICBpZiAobGVhcm5m cCAmJiBsZWFybmluZykgewkJLyogT25seSBpZiBvcGVuIGFuZCBvbiAqLworCWsgPSBja3N0cm5j cHkoYnVmLHMsNjQpOworCWZvciAoaSA9IDA7IGkgPCBrOyBpKyspIHsJLyogR2V0IHRvcC1sZXZl bCBjb21tYW5kIGtleXdvcmQgKi8KKwkgICAgaWYgKGJ1ZltpXSA8PSBTUCkgeworCQlidWZbaV0g PSBOVUw7CisJCWJyZWFrOworCSAgICB9CisJfQorCWsgPSBsb29rdXAoY21kdGFiLGJ1ZixuY21k LE5VTEwpOyAvKiBMb29rIGl0IHVwICovCisJaWYgKGsgPT0gWFhDT04gfHwgayA9PSBYWExFQVJO KQkgIC8qIERvbid0IHJlY29yZCBDT05ORUNUIG9yIExFQVJOICovCisJICByZXR1cm47CisJaWYg KGsgPT0gWFhURUwpIHsKKwkgICAgZnB1dHMoIlNFVCBIT1NUIC9ORVRXT1JLOlRDUCIsbGVhcm5m cCk7CisJICAgIGZwdXRzKCZzW2ldLGxlYXJuZnApOworCSAgICBmcHV0cygiIFRFTE5FVCAvVEVM TkVUIixsZWFybmZwKTsKKwkgICAgZnB1dHMoIlxuSUYgRkFJTCBTVE9QIDEgQ29ubmVjdGlvbiBm YWlsZWRcbiIsbGVhcm5mcCk7CisJfSBlbHNlIHsKKwkgICAgZnB1dHMocyxsZWFybmZwKTsKKwkg ICAgZnB1dHMoIlxuIixsZWFybmZwKTsKKwl9CisgICAgfQorfQorI2VuZGlmIC8qIENLTEVBUk4g Ki8KKworCisjaWZkZWYgU1NIQ01ECisvKgorICAyMDEwLzAzLzAxLi4uCisgIFJlb3BlbiBhIGNv bm5lY3Rpb24gdGhhdCB3YXMgbWFkZSB3aXRoIGFuIGV4dGVybmFsIHNzaCBjbGllbnQKKyAgYWZ0 ZXIgaXQgaGFzIGJlZW4gY2xvc2VkLgorICovCitpbnQKK3JlZG9zc2goKSB7CisgICAgaW50IHgs IG5ldHNhdmU7CisgICAgeCA9IG5ldHR5cGU7CisgICAgZGVidWcoRjExMSwicmVkb3NzaCBuZXR0 eXBlIix0dG5hbWUsbmV0dHlwZSk7CisgICAgaWYgKCh5ID0gc2V0bGluKFhYU1NILDAsMSkpIDwg MCkgeworCWlmIChlcnJubykKKwkgIHByaW50ZigiPyVzXG4iLGNrX2VycnN0cigpKTsKKwllbHNl CisJICByZXR1cm4oeSk7CisJbmV0dHlwZSA9IHg7CQkJLyogRmFpbGVkLCByZXN0b3JlIG5ldCB0 eXBlLiAqLworCXN1Y2Nlc3MgPSAwOworCXJldHVybih5KTsKKyAgICB9CisgICAgbmV0c2F2ZSA9 IHg7CisgICAgcmV0dXJuKHkpOworfQorI2VuZGlmCS8qIFNTSENNRCAqLworCisvKgorICBMaWtl IGhtc2dhKCkgaW4gY2t1dXMyLmMgYnV0IHRha2VzIGEgc2luZ2xlIHN1YnN0aXR1dGlvbiBwYXJh bWV0ZXIsIHMyLAorICB3aGljaCByZXBsYWNlcyBldmVyeSBvY2N1cnJlbmNlIG9mICIlcyIgaW4g dGhlIGZpcnN0IGFyZ3VtZW50LgorICBBZGRlZCB0byBwcmludCB0ZXh0IGNvbnRhaW5pbmcgdGhl IGNvcHlyaWdodCB5ZWFyLCBzbyB0aGUgeWVhciBkb2Vzbid0IAorICBoYXZlIHRvIGJlIGhhcmR3 aXJlZCBpbnRvIGxvdHMgb2Ygc2NhdHRlcmVkIHRleHQgc3RyaW5ncy4KKyovCitpbnQgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUHJpbnQgYW4gYXJyYXkgb2YgbGluZXMs ICovCisjaWZkZWYgQ0tfQU5TSUMKK2htc2dhYShjaGFyICpzW10sIGNoYXIgKnMyKQkJLyogcGF1 c2luZyBhdCBlbmQgb2YgZWFjaCBzY3JlZW4uICovCisjZWxzZQoraG1zZ2FhKHMsczIpIGNoYXIg KnNbXTsgY2hhciAqczI7CisjZW5kaWYJLyogQ0tfQU5TSUMgKi8KK3sKKyAgICBleHRlcm4gaW50 IGhtdG9wbGluZTsKKyNpZmRlZiBPUzIKKyAgICBleHRlcm4gaW50IHR0X3Jvd3NbXSwgdHRfY29s c1tdOworI2Vsc2UgLyogT1MyICovCisgICAgZXh0ZXJuIGludCB0dF9yb3dzLCB0dF9jb2xzOwor I2VuZGlmIC8qIE9TMiAqLworICAgIGludCB4LCB5LCBpLCBqLCBrLCBuOworICAgIGlmICgoeCA9 IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOworCisjaWZkZWYgQ0tfVFRHV1NJWgorI2lmZGVmIE9T MgorICAgIHR0Z2N3c3ooKTsKKyNlbHNlIC8qIE9TMiAqLworICAgIC8qIENoZWNrIHdoZXRoZXIg d2luZG93IHNpemUgY2hhbmdlZCAqLworICAgIGlmICh0dGd3c2l6KCkgPiAwKSB7CisgICAgICAg IGlmICh0dF9yb3dzID4gMCAmJiB0dF9jb2xzID4gMCkgeworICAgICAgICAgICAgY21kX3Jvd3Mg PSB0dF9yb3dzOworICAgICAgICAgICAgY21kX2NvbHMgPSB0dF9jb2xzOworICAgICAgICB9Cisg ICAgfQorI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIENLX1RUR1dTSVogKi8KKworICAgIHBy aW50ZigiXG4iKTsgICAgICAgICAgICAgICAgICAgICAgIC8qIFN0YXJ0IG9mZiB3aXRoIGEgYmxh bmsgbGluZSAqLworICAgIG4gPSAoaG10b3BsaW5lID4gMCkgPyBobXRvcGxpbmUgOiAxOyAvKiBM aW5lIGNvdW50ZXIgKi8KKyAgICBmb3IgKGkgPSAwOyAqc1tpXTsgaSsrKSB7CisgICAgICAgIHBy aW50ZigoY2hhciAqKXNbaV0sczIpOwkvKiBQcmludCBhIGxpbmUuICovCisJcHJpbnRmKCJcbiIp OworICAgICAgICB5ID0gKGludClzdHJsZW4oc1tpXSk7CisgICAgICAgIGsgPSAxOworICAgICAg ICBmb3IgKGogPSAwOyBqIDwgeTsgaisrKSAgICAgICAgIC8qIFNlZSBob3cgbWFueSBuZXdsaW5l cyB3ZXJlICovCisgICAgICAgICAgaWYgKHNbaV1bal0gPT0gJ1xuJykgaysrOyAgICAgLyogaW4g dGhlIHN0cmluZy4uLiAqLworICAgICAgICBuICs9IGs7CisgICAgICAgIGlmIChuID4gKGNtZF9y b3dzIC0gMykgJiYgKnNbaSsxXSkgLyogQWZ0ZXIgYSBzY3JlZW5mdWwsIGdpdmUgdGhlbSAqLwor ICAgICAgICAgIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7ICAgIC8qIGEgIm1vcmU/IiBwcm9t cHQuICovCisgICAgICAgICAgZWxzZSBuID0gMDsKKyAgICB9CisgICAgcHJpbnRmKCJcbiIpOwor ICAgIHJldHVybigwKTsKK30KKworLyogIEQgTyBDIE0gRCAgLS0gIERvIGEgY29tbWFuZCAgKi8K KworLyoKKyBSZXR1cm5zOgorICAgLTI6IHVzZXIgdHlwZWQgYW4gaWxsZWdhbCBjb21tYW5kCisg ICAtMTogcmVwYXJzZSBuZWVkZWQKKyAgICAwOiBwYXJzZSB3YXMgc3VjY2Vzc2Z1bCAoZXZlbiB0 aG8gY29tbWFuZCBtYXkgaGF2ZSBmYWlsZWQpLgorKi8KKyNpZmRlZiBERUJVRworaW50IGNtZHN0 YXRzWzI1Nl0gPSB7IC0xLCAtMSB9OworI2VuZGlmIC8qIERFQlVHICovCisKK2ludAorZG9jbWQo Y3gpIGludCBjeDsgeworICAgIGV4dGVybiBpbnQgbm9sb2NhbCwgY21rd2ZsZ3M7CisKKyAgICBk ZWJ1ZyhGMTAxLCJkb2NtZCBlbnRyeSwgY3giLCIiLGN4KTsKKyAgICBhY3RpdmVjbWQgPSBjeDsK KyAgICBkb2NvbnggPSAoKGFjdGl2ZWNtZCA9PSBYWENPTikgIHx8IChhY3RpdmVjbWQgPT0gWFhU RUwpIHx8CisJICAgICAgKGFjdGl2ZWNtZCA9PSBYWFJMT0cpIHx8IChhY3RpdmVjbWQgPT0gWFhQ SVBFKSB8fAorICAgICAgICAgICAgICAoYWN0aXZlY21kID09IFhYSUtTRCkgfHwgKGFjdGl2ZWNt ZCA9PSBYWFBUWSkpOworLyoKKyAgT3JpZ2luYWxseSBhbGwgY29tbWFuZHMgd2VyZSBoYW5kbGVk IHdpdGggYSBiaWcgc3dpdGNoKCkgc3RhdGVtZW50LAorICBidXQgZXZlbnR1YWxseSB0aGlzIHN0 YXJ0ZWQgYmxvd2luZyB1cCBjb21waWxlcnMuICBOb3cgd2UgaGF2ZSBhIHNlcmllcworICBvZiBz ZXBhcmF0ZSBpZiBzdGF0ZW1lbnRzIGFuZCBzbWFsbCBzd2l0Y2hlcywgd2l0aCB0aGUgY29tbWFu ZHMgdGhhdCBhcmUKKyAgbW9zdCBjb21tb25seSBleGVjdXRlZCBpbiBzY2lwdHMgYW5kIGxvb3Bz IGNvbWluZyBmaXJzdCwgdG8gc3BlZWQgdXAKKyAgY29tcHV0ZS1ib3VuZCBzY3JpcHRzLgorICAq LworCisjaWZkZWYgREVCVUcKKyAgICBpZiAoY21kc3RhdHNbMF0gPT0gLTEpIHsJCS8qIENvdW50 IGNvbW1hbmRzICovCisJaW50IGk7CQkJCS8qIGZvciB0dW5pbmcuLi4gKi8KKwlmb3IgKGkgPSAw OyBpIDwgMjU2OyBpKyspCisJICBjbWRzdGF0c1tpXSA9IDA7CisgICAgfQorI2VuZGlmIC8qIERF QlVHICovCisKKyAgICBzd2l0Y2ggKGN4KSB7CisgICAgICBjYXNlIC00OgkJCQkvKiBFT0YgKi8K KyNpZmRlZiBPU0sKKwlpZiAobXNnZmxnKSAgcHJpbnRmKCJcbiIpOworI2Vsc2UKKwlpZiAobXNn ZmxnKSAgcHJpbnRmKCJcclxuIik7CisjZW5kaWYgLyogT1NLICovCisJICBkb2V4aXQoR09PRF9F WElULHhpdHN0YSk7CisgICAgICBjYXNlIC0zOgkJCQkvKiBOdWxsIGNvbW1hbmQgKi8KKwlyZXR1 cm4oMCk7CisgICAgICBjYXNlIC05OgkJCQkvKiBMaWtlIC0yLCBidXQgZXJybXNnIGFscmVhZHkg ZG9uZSAqLworICAgICAgY2FzZSAtMToJCQkJLyogUmVwYXJzZSBuZWVkZWQgKi8KKwlyZXR1cm4o Y3gpOworICAgICAgY2FzZSAtNjoJCQkJLyogU3BlY2lhbCAqLworICAgICAgY2FzZSAtMjoJCQkJ LyogRXJyb3IsIG1heWJlICovCisKKyNpZm5kZWYgTk9TUEwKKy8qCisgIE1heWJlIHRoZXkgdHlw ZWQgYSBtYWNybyBuYW1lLiAgTGV0J3MgbG9vayBpdCB1cCBhbmQgc2VlLgorKi8KKwlpZiAoY3gg PT0gLTYpCQkJLyogSWYgdGhleSB0eXBlZCBDUiAqLworCSAgY2tzdHJuY2F0KGNtZGJ1ZiwiXDAx NSIsQ01EQkwpOyAvKiAgYWRkIGl0IGJhY2sgdG8gY29tbWFuZCBidWZmZXIuICovCisJaWYgKGlm Y21kW2NtZGx2bF0gPT0gMikJCS8qIFdhdGNoIG91dCBmb3IgSUYgY29tbWFuZHMuICovCisJICBp ZmNtZFtjbWRsdmxdLS07CisJcmVwYXJzID0gMTsJCQkvKiBGb3JjZSByZXBhcnNlICovCisJY21y ZXMoKTsKKwljeCA9IFhYRE87CQkJLyogVHJ5IERPIGNvbW1hbmQgKi8KKyNlbHNlCisJcmV0dXJu KGN4KTsKKyNlbmRpZiAvKiBOT1NQTCAqLworICAgICAgZGVmYXVsdDoKKwlpZiAoY3ggPCAwKQor CSAgcmV0dXJuKGN4KTsKKwlicmVhazsKKyAgICB9CisjaWZkZWYgREVCVUcKKyAgICBpZiAoY3gg PCAyNTYpCisgICAgICBjbWRzdGF0c1tjeF0rKzsKKyNlbmRpZiAvKiBERUJVRyAqLworCisgICAg aWYgKChjbWt3ZmxncyAmIENNX1BTSCkKKyNpZm5kZWYgTk9QVVNICisJJiYgbm9wdXNoCisjZW5k aWYgLyogTk9QVVNIICovCisJKSB7CisJcHJpbnRmKCI/QWNjZXNzIHRvIHN5c3RlbSBkaXNhYmxl ZFxuIik7CisJcmV0dXJuKC05KTsKKyAgICB9CisgICAgaWYgKChjbWt3ZmxncyAmIENNX0xPQykK KyNpZm5kZWYgTk9MT0NBTAorCSYmIG5vbG9jYWwKKyNlbmRpZiAvKiBOT0xPQ0FMICovCisJKSB7 CisJcHJpbnRmKCI/Q29ubmVjdGlvbnMgZGlzYWJsZWRcbiIpOworCXJldHVybigtOSk7CisgICAg fQorCisjaWZuZGVmIE5PU1BMCisgICAgLyogVXNlZCBpbiBGT1IgbG9vcHMgKi8KKworICAgIGlm IChjeCA9PSBYWF9JTkNSIHx8IGN4ID09IFhYSU5DICB8fCAvKiBfSU5DUkVNRU5ULCBJTkNSRU1F TlQgKi8KKwljeCA9PSBYWF9ERUNSIHx8IGN4ID09IFhYREVDKQkgLyogX0RFQ1JFTUVOVCwgREVD UkVNRU5UICovCisgICAgICByZXR1cm4oZG9pbmNyKGN4KSk7CisKKyAgICAvKiBEZWZpbmUgKG9y IGNoYW5nZSB0aGUgZGVmaW5pdGlvbiBvZikgYSBtYWNybyBvciB2YXJpYWJsZSAqLworCisgICAg aWYgKGN4ID09IFhYVU5ERUYgfHwgY3ggPT0gWFhVTkRGWCkgeworI2lmZGVmIElLU0QKKwlpZiAo aW5zZXJ2ZXIgJiYgIUVOQUJMRUQoZW5fYXNnKSkgeworCSAgICBwcmludGYoIj9Tb3JyeSwgREVG SU5FL0FTU0lHTiBkaXNhYmxlZFxuIik7CisJICAgIHJldHVybigtOSk7CisJfQorI2VuZGlmIC8q IElLU0QgKi8KKwlyZXR1cm4oZG91bmRlZihjeCkpOwkJLyogW19dVU5ERUZJTkUgKi8KKyAgICB9 CisgICAgaWYgKGN4ID09IFhYREVGIHx8IGN4ID09IFhYQVNTIHx8CisJY3ggPT0gWFhERlggfHwg Y3ggPT0gWFhBU1gpIHsKKyNpZmRlZiBJS1NECisJaWYgKGluc2VydmVyICYmICFFTkFCTEVEKGVu X2FzZykpIHsKKwkgICAgcHJpbnRmKCI/U29ycnksIERFRklORS9BU1NJR04gZGlzYWJsZWRcbiIp OworCSAgICByZXR1cm4oLTkpOworCX0KKyNlbmRpZiAvKiBJS1NEICovCisJaWYgKGF0bWJ1Zlsw XSA9PSAnLicgJiYgIWF0bWJ1ZlsxXSkgLyogIi4iIGVudGVyZWQgYXMga2V5d29yZCAqLworCSAg eHhkb3QgPSAxOwkJCS8qIGkuZS4gd2l0aCBzcGFjZSBhZnRlciBpdC4uLiAqLworCXJldHVybihk b2RlZihjeCkpOwkJLyogREVGSU5FLCBBU1NJR04sIGV0Yy4uLiAqLworICAgIH0KKworICAgIC8q IElGLCBXSElMRSwgYW5kIGZyaWVuZHMgICovCisKKyAgICBpZiAoY3ggPT0gWFhJRiB8fCBjeCA9 PSBYWElGWCB8fCBjeCA9PSBYWFdISSB8fCBjeCA9PSBYWEFTU0VSKSB7CisJcmV0dXJuKGRvaWYo Y3gpKTsKKyAgICB9CisgICAgaWYgKGN4ID09IFhYU1dJVCkgewkJCS8qIFNXSVRDSCAqLworCXJl dHVybihkb3N3aXRjaCgpKTsKKyAgICB9CisKKyAgICAvKiBHT1RPLCBGT1JXQVJELCBhbmQgX0ZP UldBUkQgKHVzZWQgaW50ZXJuYWxseSBieSBGT1IsIFdISUxFLCBldGMpICovCisKKyAgICBpZiAo Y3ggPT0gWFhHT1RPIHx8IGN4ID09IFhYRldEIHx8IGN4ID09IFhYWEZXRCkgeyAvKiBHT1RPIG9y IEZPUldBUkQgKi8KKwkvKiBOb3RlLCBoZXJlIHdlIGRvbid0IHNldCBTVUNDRVNTL0ZBSUxVUkUg ZmxhZyAqLworI2lmZGVmIENPTU1FTlQKKwlpZiAoKHkgPSBjbWZsZCgibGFiZWwiLCIiLCZzLHh4 c3RyaW5nKSkgPCAwKSB7CisJICAgIGlmICh5ID09IC0zKSB7CisJCWlmIChjeCAhPSBYWFhGV0Qp IHsKKwkJICAgIHByaW50ZigiP0xhYmVsIG5hbWUgcmVxdWlyZWRcbiIpOworCQkgICAgcmV0dXJu KC05KTsKKwkJfQorCSAgICB9IGVsc2UKKwkgICAgICByZXR1cm4oeSk7CisJfQorCWNrc3RybmNw eSh0bXBidWYscyxUTVBCVUZTSVopOworCWlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgp OworI2Vsc2UKKwlpZiAoKHkgPSBjbXR4dCgibGFiZWwiLCIiLCZzLHh4c3RyaW5nKSkgPCAwKSB7 CisJICAgIGlmICh5ID09IC0zKSB7CisJCWlmIChjeCAhPSBYWFhGV0QpIHsKKwkJICAgIHByaW50 ZigiP0dPVE86IExhYmVsIG5hbWUgcmVxdWlyZWQ6IFwiJXNcIiBcIiVzXCJcbiIsCisJCQkgICBh dG1idWYsCisJCQkgICBjbWRidWYpOworCQkgICAgcmV0dXJuKC05KTsKKwkJfQorCSAgICB9IGVs c2UKKwkgICAgICByZXR1cm4oeSk7CisJfQorCWNrc3RybmNweSh0bXBidWYsYnJzdHJpcChzKSxU TVBCVUZTSVopOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKwlzID0gdG1wYnVmOworCWRlYnVnKEYx MTEsIkdPVE8gdGFyZ2V0IixzLGN4KTsKKwlyZXR1cm4oZG9nb3RvKHMsY3gpKTsKKyAgICB9Cisg ICAgaWYgKGN4ID09IFhYRE8gfHwgY3ggPT0gWFhNQUNSTykgewkvKiBETyAoYSBtYWNybykgKi8K KwljaGFyIG1uYW1lYnVmWzE2XTsJCS8qIChidWZmZXIgZm9yIGNvbnRyb2xsZWQgdGVtcCBuYW1l KSAqLworCXN0cnVjdCBGREIga3csIGZsOworCWludCBteDsJCQkJLyogTWFjcm8gaW5kZXggKG9u IHN0YWNrISkgKi8KKworCWRlYnVnKEYxMDEsIlhYTUFDUk8gMCIsbGluZSxjeCk7CisJaWYgKGN4 ID09IFhYRE8pIHsKKwkgICAgaWYgKG5tYWMgPT0gMCkgeworCQlwcmludGYoIlxuP05vIG1hY3Jv cyBkZWZpbmVkXG4iKTsKKwkJcmV0dXJuKC05KTsKKwkgICAgfQorCSAgICBmb3IgKHkgPSAwOyB5 IDwgbm1hYzsgeSsrKSB7IC8qIGNvcHkgdGhlIG1hY3JvIHRhYmxlIGludG8gYSAqLworCQltYWNr ZXlbeV0ua3dkID0gbWFjdGFiW3ldLmt3ZDsgLyogcmVndWxhciBrZXl3b3JkIHRhYmxlICovCisJ CW1hY2tleVt5XS5rd3ZhbCA9IHk7CS8qIHdpdGggdmFsdWUgPSBwb2ludGVyIHRvIG1hY3JvIHRi bCAqLworCQltYWNrZXlbeV0uZmxncyA9IG1hY3RhYlt5XS5mbGdzOworCSAgICB9CisJICAgIGNt ZmRiaSgma3csCQkJLyogRmlyc3QgRkRCIC0gbWFjcm8gbmFtZSAqLworCQkgICBfQ01LRVksCQkv KiBmY29kZSAqLworCQkgICAiTWFjcm8iLAkJLyogaGxwbXNnICovCisJCSAgICIiLAkJCS8qIGRl ZmF1bHQgKi8KKwkJICAgIiIsCQkJLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KKwkJICAgbm1hYywJ CS8qIGFkZHRsIG51bWVyaWMgZGF0YSAxOiB0Ymwgc2l6ZSAqLworCQkgICAwLAkJCS8qIGFkZHRs IG51bWVyaWMgZGF0YSAyOiAwID0gY21rZXkgKi8KKwkJICAgeHhzdHJpbmcsCQkvKiBQcm9jZXNz aW5nIGZ1bmN0aW9uICovCisJCSAgIG1hY2tleSwJCS8qIEtleXdvcmQgdGFibGUgKi8KKwkJICAg JmZsCQkJLyogUG9pbnRlciB0byBuZXh0IEZEQiAqLworCQkgICApOworCSAgICBjbWZkYmkoJmZs LAkJCS8qIDJuZCBGREIgLSBmb3IgInsiICovCisJCSAgIF9DTUZMRCwJCS8qIGZjb2RlICovCisJ CSAgICIiLAkJCS8qIGhscG1zZyAqLworCQkgICAiIiwKKwkJICAgIiIsCQkJLyogYWRkdGwgc3Ry aW5nIGRhdGEgKi8KKwkJICAgMCwJCQkvKiBhZGR0bCBudW1lcmljIGRhdGEgMSAqLworCQkgICAw LAkJCS8qIGFkZHRsIG51bWVyaWMgZGF0YSAyICovCisJCSAgIHh4c3RyaW5nLAorCQkgICBOVUxM LAorCQkgICBOVUxMCisJCSAgICk7CisJICAgIHggPSBjbWZkYigma3cpOwkJLyogUGFyc2Ugc29t ZXRoaW5nICovCisJICAgIGlmICh4IDwgMCkgewkJLyogRXJyb3IgKi8KKwkJaWYgKHggPT0gLTMp IHsKKwkJICAgIHByaW50ZigiP01hY3JvIG5hbWUgcmVxdWlyZWRcbiIpOworCQkgICAgcmV0dXJu KC05KTsKKwkJfSBlbHNlCisJCSAgcmV0dXJuKHgpOworCSAgICB9CisJICAgIGlmIChjbXJlc3Vs dC5mY29kZSA9PSBfQ01LRVkpIHsKKwkJZXh0ZXJuIGludCBtdGNoYW5nZWQ7CisJCWNoYXIgKiBt YWNyb25hbWUgPSBOVUxMOworCisJICAgIC8qIEluIGNhc2UgYXJncyBpbmNsdWRlIGFuIFxmZXhl YygpIHRoYXQgY2hhbmdlcyB0aGUgbWFjcm8gdGFibGUgKi8KKworCQlteCA9IHg7CQkJLyogU2F2 ZSBtYWNybyBpbmRleCBvbiBzdGFjayAqLworCQltdGNoYW5nZWQgPSAwOwkJLyogTWFyayBzdGF0 ZSBvZiBtYWNybyB0YWJsZSAqLworCQltYWtlc3RyKCZtYWNyb25hbWUsbWFjdGFiW214XS5rd2Qp OyAvKiBTYXZlIG5hbWUgKi8KKworCQlpZiAoKHkgPSBjbXR4dCgib3B0aW9uYWwgYXJndW1lbnRz IiwiIiwmcyx4eHN0cmluZykpIDwgMCkKKwkJICByZXR1cm4oeSk7CQkvKiBHZXQgbWFjcm8gYXJn cyAqLworCisJCWlmIChtdGNoYW5nZWQpIHsJLyogTWFjcm8gdGFibGUgY2hhbmdlZD8gKi8KKwkJ ICAgIG14ID0gbWxvb2sobWFjdGFiLG1hY3JvbmFtZSxubWFjKTsgLyogTG9vayB1cCBuYW1lIGFn YWluICovCisJCX0KKwkJaWYgKG1hY3JvbmFtZSkKKwkJICBmcmVlKG1hY3JvbmFtZSk7CisKKwkJ cmV0dXJuKGRvZG8obXgscyxjbWRzdGtbY21kbHZsXS5jY2ZsZ3MpIDwgMSA/CisJCSAgICAgICAo c3VjY2VzcyA9IDApIDogMSk7CisJICAgIH0KKwkgICAgY2tzdHJuY3B5KGxpbmUsY21yZXN1bHQu c3Jlc3VsdCxMSU5CVUZTSVopOwkvKiBfQ01GTEQgKi8KKwkgICAgaWYgKGF0bWJ1ZlswXSA9PSAn eycpIHsKKwkJaWYgKCh5ID0gY21jZm0oKSkgPCAwKQorCQkgIHJldHVybih5KTsKKwkgICAgfQor CX0gZWxzZSB7CQkJLyogWFhNQUNSTyAoImltbWVkaWF0ZSBtYWNybyIpICovCisJICAgIGludCBr ID0gMDsKKwkgICAgbGluZVtrKytdID0gJ3snOworCSAgICBsaW5lW2srK10gPSBTUDsKKwkgICAg bGluZVtrXSA9IE5VTDsKKwkgICAgZGVidWcoRjExMSwiWFhNQUNSTyBBIixsaW5lLGspOworCSAg ICBpZiAoKHkgPSBjbXR4dCgiQnJhY2VkIGxpc3Qgb2YgY29tbWFuZHMiLCIiLCZzLHh4c3RyaW5n KSkgPCAwKQorCSAgICAgIHJldHVybih5KTsKKwkgICAgayA9IGNrc3RybmNweShsaW5lK2sscyxM SU5CVUZTSVotayk7CisJICAgIGRlYnVnKEYxMTEsIlhYTUFDUk8gQiIsbGluZSxrKTsKKwl9CisJ eCA9IHN0cmxlbihsaW5lKTsKKwlpZiAoKGxpbmVbMF0gPT0gJ3snICYmIGxpbmVbeC0xXSAhPSAn fScpIHx8IGxpbmVbMF0gPT0gJ30nKQorCSAgcmV0dXJuKC0yKTsKKwlpZiAobGluZVswXSAhPSAn eycgJiYgbGluZVt4LTFdICE9ICd9JykgeworCSAgICAvKiBVbmtub3duIGNvbW1hbmQuICBJZiBP Tl9VTktOT1dOX0NPTU1BTkQgbWFjcm8gaXMgZGVmaW5lZCwgKi8KKwkgICAgLyogcGFyc2UgYXJn cyBhbmQgdGhlbiBleGVjdXRlIGl0LCBidXQgb25seSBpZiBpdCBpcyBub3QgKi8KKwkgICAgLyog YWxyZWFkeSBhY3RpdmUuICovCisJICAgIGludCBrID0gLTE7CisJICAgIGlmICghdW5rbWFjcm8p IHsKKwkJayA9IG14bG9vayhtYWN0YWIsIm9uX3Vua25vd25fY29tbWFuZCIsbm1hYyk7CisJICAg IH0KKwkgICAgaWYgKGsgPiAtMSkgeworCQlja3N0cm5jcHkodG1wYnVmLGF0bWJ1ZixUTVBCVUZT SVopOworCQl6ID0gbWFjbHZsOwkJLyogU2F2ZSB0aGUgY3VycmVudCBtYWNsdmwgKi8KKwkJaWYg KCh5ID0gY210eHQoInRleHQiLCIiLCZzLHh4c3RyaW5nKSkgPCAwKQorCQkgIHJldHVybih5KTsK KwkJY2tzdHJuY2F0KHRtcGJ1ZiwiICIsVE1QQlVGU0laKTsKKwkJY2tzdHJuY2F0KHRtcGJ1Zixz LFRNUEJVRlNJWik7CisJCXVua21hY3JvID0gMTsKKwkJZGVidWcoRjExMCwiT05fVU5LTk9XTl9D T01NQU5EIixzLDApOworCQlkb2RvKGssdG1wYnVmLGNtZHN0a1tjbWRsdmxdLmNjZmxncyk7IC8q IFJ1biB0aGUgbWFjcm8gKi8KKwkJd2hpbGUgKG1hY2x2bCA+IHopIHsKKwkJICAgIHNzdGF0ZSA9 IChDSEFSKSBwYXJzZXIoMSk7CisJCSAgICBpZiAoc3N0YXRlKSBwcm90bygpOworCQl9CisJCWRl YnVnKEYxMDEsIlVOS01BQyBsb29wIGV4aXQgbWFjbHZsIiwiIixtYWNsdmwpOworCQl1bmttYWNy byA9IDA7CisJCXJldHVybihzdWNjZXNzKTsKKwkgICAgfQorICAgICAgICAgICAgaWYgKHggPiAw KQorCSAgICAgIHByaW50ZigiP05vdCBhIGNvbW1hbmQgb3IgbWFjcm8gbmFtZTogXCIlc1wiXG4i LGxpbmUpOworICAgICAgICAgICAgZWxzZQorCSAgICAgIHByaW50ZigiP05vdCBhIGNvbW1hbmQg b3IgbWFjcm8gbmFtZS5cbiIpOworCSAgICByZXR1cm4oLTkpOworCX0KKwlzID0gYnJzdHJpcChs aW5lKTsKKwlzcHJpbnRmKG1uYW1lYnVmLCIgLi50bXA6JTAzZCIsY21kbHZsKTsJLyogc2FmZSAo MTYpICovCisJeCA9IGFkZG1hYyhtbmFtZWJ1ZixzKTsKKwlyZXR1cm4oZG9kbyh4LE5VTEwsY21k c3RrW2NtZGx2bF0uY2NmbGdzKSA8IDEgPyAoc3VjY2VzcyA9IDApIDogMSk7CisgICAgfQorCisg ICAgaWYgKGN4ID09IFhYTEJMKSB7CQkJLyogTEFCRUwgKi8KKwlpZiAoKHggPSBjbWZsZCgibGFi ZWwiLCIiLCZzLHh4c3RyaW5nKSkgPCAwKSB7CisJICAgIGlmICh4ID09IC0zKSB7CisjaWZkZWYg Q09NTUVOVAorCQlwcmludGYoIj9MQUJFTDogTGFiZWwgbmFtZSByZXF1aXJlZDogXCIlc1wiXG4i LCBjbWRidWYpOworCQlyZXR1cm4oLTkpOworI2Vsc2UKKwkJcyA9ICIiOworI2VuZGlmIC8qIENP TU1FTlQgKi8KKwkgICAgfSBlbHNlIHJldHVybih4KTsKKworCX0KKwlkZWJ1ZyhGMTExLCJMQUJF TCIscyx4KTsKKwlpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKKwlyZXR1cm4oMCk7 CisgICAgfQorCisgICAgaWYgKGN4ID09IFhYRVZBTCB8fCBjeCA9PSBYWF9FVkFMKSAvKiBfRVZB TFVBVEUsICBFVkFMVUFURSAgKi8KKyAgICAgIHJldHVybihkb2V2YWwoY3gpKTsKKworI2lmbmRl ZiBOT1NFWFAKKyAgICBpZiAoY3ggPT0gWFhTRVhQKSB7CQkJLyogTGlzcC1saWtlIFMtRXhwcmVz c2lvbiAqLworCXN0cnVjdCBzdHJpbmdhcnJheSAqIHE7CisJY2hhciAvKiAqcCwgKnIsICovICp0 bXAsICptOworCWludCBpLCBrLCBuLCBxdW90ZSA9IDAsIGNvbnRkID0gMCwgc2l6ZSA9IDAsIGxl biA9IDA7CisJZXh0ZXJuIGludCBzZXhwcmMsIHNleHBwdjsKKworCXRtcCA9IHRtcGJ1ZjsJCQkv KiBCdWZmZXIgdG8gY29sbGVjdCBTRVhQICovCisJdG1wYnVmWzBdID0gTlVMOwkJLyogQ2xlYXIg aXQgKi8KKwlzaXplID0gVE1QQlVGU0laOwkJLyogQ2FwYWNpdHkgb2YgYnVmZmVyICovCisJc2V4 cHJjID0gLTE7CQkJLyogQXNzdW1lIGJhZCBpbnB1dCAqLworCW4gPSAwOwkJCQkvKiBQYXJlbiBi YWxhbmNlIGNvdW50ZXIgKi8KKworCXdoaWxlICgxKSB7CQkJLyogQWxsb3cgU0VYUCBvbiBtdWx0 aXBsZSBsaW5lcyAqLworCSAgICBtID0gY29udGQgPworCSAgICAgICJDb250aW51YXRpb24gb2Yg Uy1FeHByZXNzaW9uIiA6CisJCSJTLUV4cHJlc3Npb24gKFwiaGVscCBzZXhwXCIgZm9yIGRldGFp bHMpIjsKKwkgICAgeCA9IGNtdHh0KG0sIiIsJnMseHhzdHJpbmcpOworCSAgICBpZiAoeCA8IDAp CisJICAgICAgcmV0dXJuKHgpOworCSAgICBpZiAoISpzKQkJCS8qIE5lZWRlZCBmb3IgKD0pIGFu ZCAoOikgKi8KKwkgICAgICBzID0gY21kYnVmKzE7CQkvKiBJIGNhbid0IGV4cGxhaW4gd2h5LiAq LworCSAgICBrID0gY2ttYWttc2codG1wLCBzaXplLCBjb250ZCA/ICIgIiA6ICIoIiwgcywgTlVM TCwgTlVMTCk7CisJICAgIGlmIChrIDwgMSkgeworCQlwcmludGYoIj9TRVhQIHRvbyBsb25nIC0g JWQgbWF4XG4iLFRNUEJVRlNJWik7CisJCXJldHVybigtOSk7CisJICAgIH0KKwkgICAgZGVidWco RjExMSxjb250ZCA/ICJzZXhwIGNvbnRkIiA6ICJzZXhwIixzLGspOworCisJICAgIGZvciAoaSA9 IGxlbjsgaSA8IGxlbitrOyBpKyspIHsgLyogQ2hlY2sgYmFsYW5jZSAgKi8KKwkJaWYgKCFxdW90 ZSAmJiB0bXBidWZbaV0gPT0gQ01EUSkgeworCQkgICAgcXVvdGUgPSAxOworCQkgICAgY29udGlu dWU7CisJCX0KKwkJaWYgKHF1b3RlKSB7CisJCSAgICBxdW90ZSA9IDA7CisJCSAgICBjb250aW51 ZTsKKwkJfQorCQlpZiAodG1wYnVmW2ldID09ICcoJykKKwkJICBuKys7CisJCWVsc2UgaWYgKHRt cGJ1ZltpXSA9PSAnKScpCisJCSAgbi0tOworCSAgICB9CisJICAgIGlmIChuID09IDApIHsJCS8q IEJyZWFrIHdoZW4gYmFsYW5jZWQgKi8KKwkJYnJlYWs7CisJICAgIH0KKwkgICAgaWYgKG4gPCAw KSB7CQkvKiBUb28gbWFueSByaWdodCBwYXJlbnMgKi8KKwkJcHJpbnRmKCI/VW5iYWxhbmNlZCBT LUV4cHJlc3Npb246IFwiJXNcIlxuIix0bXBidWYpOworCQlyZXR1cm4oLTkpOworCSAgICB9CisJ ICAgIGNvbnRkKys7CQkJLyogTmVlZCBtb3JlIHJpZ2h0IHBhcmVucyAqLworCSAgICBjbWluaShj a3hlY2gpOwkJLyogc28ga2VlcCBwYXJzaW5nICovCisJICAgIHRtcCArPSBrOwkJCS8qIGFkanVz dCBidWZmZXIgcG9pbnRlciAqLworCSAgICBzaXplIC09IGs7CQkJLyogYW5kIGNhcGFjaXR5ICov CisJICAgIGxlbiArPSBrOwkJCS8qIGFuZCBsZW5ndGggc28gZmFyICovCisJfQorCXMgPSB0bXBi dWY7CisJbWFrZXN0cigmbGFzdHNleHAscyk7CisJcSA9IGNrc3BsaXQoMSxTRVhQTUFYLHMsTlVM TCxOVUxMLDgsMCwwKTsgLyogUHJlY2hlY2sgZm9yID4gMSBTRVhQICovCisJZGVidWcoRjEwMSwi c2V4cCBzcGxpdCIsIiIscS0+YV9zaXplKTsKKworCWlmIChxLT5hX3NpemUgPT0gMSkgewkJLyog V2Ugc2hvdWxkIGdldCBleGFjdGx5IG9uZSBiYWNrICovCisJICAgIGNoYXIgKiByZXN1bHQsICog ZG9zZXhwKCk7CisJICAgIHNleHByYyA9IDA7CQkJLyogUmVzZXQgb3V0LW9mLWJhbmQgcmV0dXJu IGNvZGUgKi8KKwkgICAgcmVzdWx0ID0gZG9zZXhwKHMpOwkJLyogR2V0IHJlc3VsdCAqLworCSAg ICBkZWJ1ZyhGMTExLCJzZXhwIHJlc3VsdCIscmVzdWx0LHNleHByYyk7CisJICAgIGlmIChzZXhw cmMgPT0gMCkgewkJLyogU3VjY2VzcyAqLworCQkvKiBFY2hvIHRoZSByZXN1bHQgaWYgZGVzaXJl ZCAqLworCQlpZiAoKCF4Y21kc3JjICYmIHNleHBlY2hvICE9IFNFVF9PRkYpIHx8IHNleHBlY2hv ID09IFNFVF9PTikKKwkJICBwcmludGYoIiAlc1xuIixyZXN1bHQgPyByZXN1bHQgOiAiIik7CisJ CW1ha2VzdHIoJnNleHB2YWwscmVzdWx0KTsKKwkJc3VjY2VzcyA9IHNleHBwdiA+IC0xID8gc2V4 cHB2IDogMTsKKwkJcmV0dXJuKHN1Y2Nlc3MpOworCSAgICB9CisJfQorCWlmIChzZXhwcmMgPCAw KQorCSAgcHJpbnRmKCI/SW52YWxpZCBTLUV4cHJlc3Npb246IFwiJXNcIlxuIixsYXN0c2V4cCk7 CisJcmV0dXJuKC05KTsKKyAgICB9CisjZW5kaWYgLyogTk9TRVhQICovCisKKyNlbmRpZiAvKiBO T1NQTCAqLworCisgICAgaWYgKGN4ID09IFhYRUNIIHx8IGN4ID09IFhYWEVDSCB8fCBjeCA9PSBY WFZPSUQKKyNpZm5kZWYgTk9TUEwKKwl8fCBjeCA9PSBYWEFQQworI2VuZGlmIC8qIE5PU1BMICov CisJKSB7CQkJCS8qIEVDSE8gb3IgQVBDICovCisJaWYgKCh4ID0gY210eHQoKGN4ID09IFhYRUNI IHx8IGN4ID09IFhYWEVDSCkgPworCQkgICAgICAgIlRleHQgdG8gYmUgZWNob2VkIiA6CisJCSAg ICAgICAoKGN4ID09IFhYVk9JRCkgPyAiVGV4dCIgOgorCQkJIkFwcGxpY2F0aW9uIFByb2dyYW0g Q29tbWFuZCB0ZXh0IiksCisJCSAgICAgICAiIiwKKwkJICAgICAgICZzLAorCQkgICAgICAgeHhz dHJpbmcKKwkJICAgICAgICkKKwkgICAgICkgPCAwKQorCSAgcmV0dXJuKHgpOworCWlmICghcykg cyA9ICIiOworI2lmZGVmIENPTU1FTlQKKy8qIFRoaXMgaXMgdG8gcHJlc2VydmUgdGhlIHByZS04 LjAgYmVoYXZpb3IgYnV0IGl0J3MgdG9vIGNvbmZ1c2luZyAqLworCXggPSBzdHJsZW4ocyk7CisJ eCA9ICh4ID4gMSkgPyAoKHNbMF0gPT0gJyInICYmIHNbeC0xXSA9PSAnIicpID8gMSA6IDApIDog MDsKKyNlbmRpZiAvKiBDT01NRU5UICovCisJcyA9IGJyc3RyaXAocyk7CQkJLyogU3RyaXAgYnJh Y2VzIGFuZCBkb3VibGVxdW90ZXMgKi8KKwlpZiAoY3ggPT0gWFhFQ0gpIHsJCS8qIEVDSE8gKi8K KyNpZm5kZWYgTk9TUEwKKwkgICAgaWYgKCFmbmRpYWdzIHx8IGZuc3VjY2VzcykgeworI2VuZGlm IC8qIE5PU1BMICovCisjaWZkZWYgQ09NTUVOVAorCQkvKiBUaGUgImlmICh4KSIgYnVzaW5lc3Mg cHJlc2VydmVzIHByZXZpb3VzIGJlaGF2aW9yICovCisJCS8qIGJ5IHB1dHRpbmcgYmFjayB0aGUg ZG91YmxlcXVvdGVzIGlmIHRoZXkgd2VyZSBpbmNsdWRlZC4gKi8KKwkJaWYgKHgpCisJCSAgcHJp bnRmKCJcIiVzXCJcbiIscyk7CisJCWVsc2UKKyNlbmRpZiAvKiBDT01NRU5UICovCisJCSAgcHJp bnRmKCIlc1xuIixzKTsKKyNpZm5kZWYgTk9TUEwKKwkgICAgfQorI2VuZGlmIC8qIE5PU1BMICov CisJfSBlbHNlIGlmIChjeCA9PSBYWFhFQ0gpIHsJLyogWEVDSE8gKi8KKwkgICAgaWYgKHgpCisJ ICAgICAgcHJpbnRmKCJcIiVzXCIiLHMpOworCSAgICBlbHNlCisJICAgICAgcHJpbnRmKCIlcyIs cyk7CisjaWZkZWYgVU5JWAorCSAgICBmZmx1c2goc3Rkb3V0KTsKKyNlbmRpZiAvKiBVTklYICov CisJfSBlbHNlIGlmIChjeCA9PSBYWEFQQykgewkvKiBBUEMgKi8KKyNpZmRlZiBDS19BUEMKKwkg ICAgaWYgKGFwY2FjdGl2ZSA9PSBBUENfTE9DQUwgfHwKKwkJKGFwY2FjdGl2ZSA9PSBBUENfUkVN T1RFICYmICEoYXBjc3RhdHVzICYgQVBDX1VOQ0gpKSkKKwkgICAgICByZXR1cm4oc3VjY2VzcyA9 IDApOworI2VuZGlmIC8qIENLX0FQQyAqLworCSAgICBpZiAoIWxvY2FsKSB7CisJCXByaW50Zigi JWNfJXMlY1xcIixFU0MscyxFU0MpOworI2lmZGVmIFVOSVgKKwkJZmZsdXNoKHN0ZG91dCk7Cisj ZW5kaWYgLyogVU5JWCAqLworCisJICAgIH0gZWxzZSB7CQkJLyogTG9jYWwgbW9kZSAtIGhhdmUg Y29ubmVjdGlvbiAqLworI2lmbmRlZiBOT1NQTAorCQlpZiAoY2ttYWt4bXNnKHRtcGJ1ZiwJLyog Rm9ybSBBUEMgc3RyaW5nIGluIGJ1ZmZlciAqLworCQkJICAgICAgVE1QQlVGU0laLAorCQkJICAg ICAgY2tjdG9hKChjaGFyKUVTQyksCisJCQkgICAgICBja2N0b2EoJ18nKSwKKwkJCSAgICAgIHMs CisJCQkgICAgICBja2N0b2EoKGNoYXIpRVNDKSwKKwkJCSAgICAgIGNrY3RvYSgnXFwnKSwKKwkJ CSAgICAgIE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwKKwkJCSAgICAgICkgPiAw KQorCQkgIHJldHVybihzdWNjZXNzID0gZG9vdXRwdXQodG1wYnVmLCBYWE9VVCkpOworCQlwcmlu dGYoIj9Ub28gbG9uZ1xuIik7CisJCXJldHVybigtOSk7CisjZWxzZQorCQlwcmludGYoIiVjXyVz JWNcXCIsRVNDLHMsRVNDKTsKKyNlbmRpZiAvKiBOT1NQTCAqLworCSAgICB9CisJfQorCXJldHVy bihzdWNjZXNzID0gMSk7CisgICAgfQorCisjaWZuZGVmIE5PU1BMCisvKiBDb3B5IG1hY3JvIGFy Z3MgZnJvbS90byB0d28gbGV2ZWxzIHVwLCB1c2VkIGludGVybmFsbHkgYnkgX2Zsb29wIGV0IGFs LiAqLworICAgIGlmIChjeCA9PSBYWEdUQSB8fCBjeCA9PSBYWFBUQSkgewkvKiBfR0VUQVJHUywg X1BVVEFSR1MgKi8KKwlpbnQgeDsKKwlkZWJ1ZyhGMTAxLCJkb2NtZCBYWEdUQSIsIiIsWFhHVEEp OworCWRlYnVnKEYxMDEsImRvY21kIGN4IiwiIixjeCk7CisJZGVidWcoRjEwMSwiZG9jbWQgWFhH VEEgbWFjbHZsIiwiIixtYWNsdmwpOworCXggPSBkb2d0YShjeCk7CisJZGVidWcoRjEwMSwiZG9j bWQgZG9ndGEgcmV0dXJucyIsIiIseCk7CisJZGVidWcoRjEwMSwiZG9jbWQgZG9ndGEgbWFjbHZs IiwiIixtYWNsdmwpOworCXJldHVybih4KTsKKyAgICB9CisjZW5kaWYgLyogTk9TUEwgKi8KKwor I2lmbmRlZiBOT1NQTAorI2lmZGVmIENLQ0hBTk5FTElPCisgICAgaWYgKGN4ID09IFhYRklMRSkK KyAgICAgIHJldHVybihkb2ZpbGUoY3gpKTsKKyAgICBlbHNlIGlmIChjeCA9PSBYWEZfUkUgfHwg Y3ggPT0gWFhGX1dSIHx8IGN4ID09IFhYRl9PUCB8fAorCSAgICAgY3ggPT0gWFhGX0NMIHx8IGN4 ID09IFhYRl9TRSB8fCBjeCA9PSBYWEZfUlcgfHwKKwkgICAgIGN4ID09IFhYRl9GTCB8fCBjeCA9 PSBYWEZfTEkgfHwgY3ggPT0gWFhGX1NUIHx8IGN4ID09IFhYRl9DTykKKyAgICAgIHJldHVybihk b2ZpbGUoY3gpKTsKKyNlbmRpZiAvKiBDS0NIQU5ORUxJTyAqLworCisvKiBBU0ssIEFTS1EsIFJF QUQgKi8KKyAgICBpZiAoY3ggPT0gWFhBU0sgIHx8IGN4ID09IFhYQVNLUSB8fCBjeCA9PSBYWFJF QSB8fAorCWN4ID09IFhYUkRCTCB8fCBjeCA9PSBYWEdFVEMgfHwgY3ggPT0gWFhHRVRLKSB7CisJ cmV0dXJuKGRvYXNrKGN4KSk7CisgICAgfQorI2VuZGlmIC8qIE5PU1BMICovCisKKyNpZm5kZWYg Tk9GUklMTFMKKyNpZm5kZWYgTk9IRUxQCisgICAgaWYgKGN4ID09IFhYQlVHKSB7CQkJLyogQlVH ICovCisJaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7CisJcmV0dXJuKGRvYnVnKCkp OworICAgIH0KKyNlbmRpZgkvKiBOT0hFTFAgKi8KKyNlbmRpZgkvKiBOT0ZSSUxMUyAqLworCisj aWZuZGVmIE5PWEZFUgorICAgIGlmIChjeCA9PSBYWEJZRSkgewkJCS8qIEJZRSAqLworCWV4dGVy biBpbnQgZnRwX2NtZGxpbjsKKwlpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKKwor I2lmZGVmIE5FV0ZUUAorCWlmICgoZnRwZ2V0ID09IDEpIHx8ICgoZnRwZ2V0ID09IDIpICYmIGZ0 cGlzb3BlbigpKSkgeworCSAgICBleHRlcm4gaW50IHN0YXlmbGcsIGZ0cF9mYWk7CisJICAgIHN1 Y2Nlc3MgPSBmdHBieWUoKTsKKwkgICAgaWYgKGZ0cF9jbWRsaW4gJiYgIXN0YXlmbGcgJiYgIWxv Y2FsKQorCSAgICAgIGRvZXhpdChmdHBfZmFpID8gQkFEX0VYSVQgOiBHT09EX0VYSVQsLTEpOwor CSAgICBlbHNlCisJICAgICAgcmV0dXJuKHN1Y2Nlc3MpOworCX0KKyNlbmRpZiAvKiBORVdGVFAg Ki8KKworCWlmICghbG9jYWwpIHsKKwkgICAgcHJpbnRmKCI/Tm8gY29ubmVjdGlvbiAtIHVzZSBF WElUIHRvIHF1aXQuXG4iKTsKKwkgICAgcmV0dXJuKC05KTsKKwl9CisKKyNpZmRlZiBDS19YWVoK KwlpZiAocHJvdG9jb2wgIT0gUFJPVE9fSykgeworCSAgICBwcmludGYoIj9Tb3JyeSwgQllFIG9u bHkgd29ya3Mgd2l0aCBLZXJtaXQgcHJvdG9jb2xcbiIpOworCSAgICByZXR1cm4oLTkpOworCX0K KyNlbmRpZiAvKiBDS19YWVogKi8KKworI2lmZGVmIElLU19PUFRJT04KKyAgICAgICAgaWYgKAor I2lmZGVmIENLX1hZWgorICAgICAgICAgICAgcHJvdG9jb2wgPT0gUFJPVE9fSyAmJgorI2VuZGlm IC8qIENLX1hZWiAqLworICAgICAgICAgICAgIWlrc193YWl0KEtFUk1JVF9SRVFfU1RBUlQsMSkp IHsKKwkgICAgcHJpbnRmKAorCSAgICAgIj9BIEtlcm1pdCBTZXJ2ZXIgaXMgbm90IGF2YWlsYWJs ZSB0byBwcm9jZXNzIHRoaXMgY29tbWFuZFxuIik7CisJICAgIHJldHVybigtOSk7CQkJLyogQ29y cmVjdCB0aGUgcmV0dXJuIGNvZGUgKi8KKyAgICAgICAgfQorI2VuZGlmIC8qIElLU19PUFRJT04g Ki8KKworCWJ5ZV9hY3RpdmUgPSAxOworCXNzdGF0ZSA9IHNldGdlbignTCcsIiIsIiIsIiIpOwor CWlmIChsb2NhbCkgdHRmbHVpKCk7CQkvKiBJZiBsb2NhbCwgZmx1c2ggdHR5IGlucHV0IGJ1ZmZl ciAqLworCXJldHVybigwKTsKKyAgICB9CisjZW5kaWYgLyogTk9YRkVSICovCisKKyAgICBpZiAo Y3ggPT0gWFhCRUVQKSB7CQkJLyogQkVFUCAqLworICAgICAgICBpbnQgeDsKKyNpZmRlZiBPUzIK KwlpbnQgeTsKKyAgICAgICAgaWYgKCh5ID0gY21rZXkoYmVlcHRhYiwgbmJlZXB0YWIsICJ3aGlj aCBraW5kIG9mIGJlZXAiLCAiaW5mb3JtYXRpb24iLAorCQkgICAgICAgeHhzdHJpbmcpKSA8IDAg KQorCSAgcmV0dXJuICh5KTsKKyAgICAJaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7 CisgICAgICAgIGJsZWVwKChzaG9ydCl5KTsJCS8qIHkgaXMgb25lIG9mIHRoZSBCUF8gdmFsdWVz ICovCisjZWxzZSAgLyogT1MyICovCisgICAgCWlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJu KHgpOworI2lmbmRlZiBOT1NQTAorICAgICAgICBibGVlcChCUF9OT1RFKTsKKyNlbHNlCisJcHV0 Y2hhcignXDA3Jyk7CisjZW5kaWYgLyogTk9TUEwgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAg ICAgcmV0dXJuKDApOworICAgIH0KKworI2lmbmRlZiBOT0ZSSUxMUworICAgIGlmIChjeCA9PSBY WENMRSkJCQkvKiBDTEVBUiAqLworICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSBkb2NsZWFyKCkpOwor I2VuZGlmIC8qIE5PRlJJTExTICovCisKKyAgICBpZiAoY3ggPT0gWFhDT00pIHsJCQkvKiBDT01N RU5UICovCisJaWYgKCh4ID0gY210eHQoIlRleHQgb2YgY29tbWVudCBsaW5lIiwiIiwmcyxOVUxM KSkgPCAwKQorCSAgcmV0dXJuKHgpOworCS8qIERvbid0IGNoYW5nZSBTVUNDRVNTIGZsYWcgZm9y IHRoaXMgb25lICovCisJcmV0dXJuKDApOworICAgIH0KKworI2lmbmRlZiBOT0xPQ0FMCisgICAg aWYgKGN4ID09IFhYQ09OIHx8IGN4ID09IFhYQ1EpCS8qIENPTk5FQ1Qgb3IgQ09OTkVDVCAvUVVJ RVRMWSAqLworICAgICAgcmV0dXJuKGRveGNvbm4oY3gpKTsKKyNlbmRpZiAvKiBOT0xPQ0FMICov CisKKyNpZm5kZWYgTk9GUklMTFMKKyNpZmRlZiBaQ09QWQorICAgIGlmIChjeCA9PSBYWENQWSkg ewkJCS8qIENPUFkgYSBmaWxlICovCisjaWZkZWYgSUtTRAorCWlmIChpbnNlcnZlciAmJiAhRU5B QkxFRChlbl9jcHkpKSB7CisJICAgIHByaW50ZigiP1NvcnJ5LCBDT1BZIGlzIGRpc2FibGVkXG4i KTsKKwkgICAgcmV0dXJuKC05KTsKKwl9CisjZW5kaWYgLyogSUtTRCAqLworI2lmZGVmIENLX0FQ QworCWlmIChhcGNhY3RpdmUgPT0gQVBDX0xPQ0FMIHx8CisJICAgIChhcGNhY3RpdmUgPT0gQVBD X1JFTU9URSAmJiAhKGFwY3N0YXR1cyAmIEFQQ19VTkNIKSkKKwkgICAgKQorCSAgcmV0dXJuKHN1 Y2Nlc3MgPSAwKTsKKyNlbmRpZiAvKiBDS19BUEMgKi8KKwlyZXR1cm4oZG9jb3B5KCkpOworICAg IH0KKyNlbmRpZiAvKiBaQ09QWSAqLworI2lmZGVmIE5UCisgICAgaWYgKCBjeCA9PSBYWExJTksg KSB7CisjaWZkZWYgSUtTRAorICAgICAgICBpZiAoaW5zZXJ2ZXIgJiYgIUVOQUJMRUQoZW5fY3B5 KSkgeworICAgICAgICAgICAgcHJpbnRmKCI/U29ycnksIExJTksgKENPUFkpIGlzIGRpc2FibGVk XG4iKTsKKyAgICAgICAgICAgIHJldHVybigtOSk7CisgICAgICAgIH0KKyNlbmRpZiAvKiBJS1NE ICovCisjaWZkZWYgQ0tfQVBDCisgICAgICAgIGlmIChhcGNhY3RpdmUgPT0gQVBDX0xPQ0FMIHx8 CisgICAgICAgICAgICAoYXBjYWN0aXZlID09IEFQQ19SRU1PVEUgJiYgIShhcGNzdGF0dXMgJiBB UENfVU5DSCkpCisgICAgICAgICAgICApCisgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsK KyNlbmRpZiAvKiBDS19BUEMgKi8KKyAgICAgICAgcmV0dXJuKGRvbGluaygpKTsKKyAgICB9Cisj ZW5kaWYgLyogTlQgKi8KKyNlbmRpZiAvKiBOT0ZSSUxMUyAqLworCisgICAgLyogQ0QgYW5kIGZy aWVuZHMgKi8KKyAgICBpZiAoY3ggPT0gWFhDV0QgIHx8IGN4ID09IFhYQ0RVUCB8fCBjeCA9PSBY WEJBQ0sgfHwKKwljeCA9PSBYWExDV0QgfHwgY3ggPT0gWFhMQ0RVIHx8IGN4ID09IFhYS0NEKSB7 CisjaWZkZWYgTE9DVVMKKwlpZiAoIWxvY3VzKSB7CisJICAgIGlmIChjeCA9PSBYWENXRCkgewor I2lmZGVmIE5PWEZFUgorICAgICAgICAgICAgICAgIHJldHVybigtMik7CisjZWxzZQorICAgICAg ICAgICAgICAgIHJldHVybihkb3JtdChYWkNXRCkpOworI2VuZGlmIC8qIE5PWEZFUiAqLworCSAg ICB9IGVsc2UgaWYgKGN4ID09IFhYQ0RVUCkgeworI2lmZGVmIE5PWEZFUgorICAgICAgICAgICAg ICAgIHJldHVybigtMik7CisjZWxzZQorICAgICAgICAgICAgICAgIHJldHVybihkb3JtdChYWkNE VSkpOworI2VuZGlmIC8qIE5PWEZFUiAqLworICAgICAgICAgICAgfQorCX0KKyNlbmRpZiAvKiBM T0NVUyAqLworI2lmZGVmIElLU0QKKwlpZiAoaW5zZXJ2ZXIgJiYgIUVOQUJMRUQoZW5fY3dkKSkg eworCSAgICBwcmludGYoIj9Tb3JyeSwgY2hhbmdpbmcgZGlyZWN0b3JpZXMgaXMgZGlzYWJsZWRc biIpOworCSAgICByZXR1cm4oLTkpOworCX0KKyNlbmRpZiAvKiBJS1NEICovCisJcmV0dXJuKHN1 Y2Nlc3MgPSBkb2NkKGN4KSk7CisgICAgfQorCisgICAgaWYgKGN4ID09IFhYQ0hLKQkJCS8qIENI RUNLICovCisgICAgICByZXR1cm4oc3VjY2VzcyA9IGRvY2hrKCkpOworCisgICAgaWYgKGN4ID09 IFhYQ0xPKSB7CQkJLyogQ0xPU0UgKi8KKwl4ID0gY21rZXkoY2xzdGFiLG5jbHMsIlwiQ09OTkVD VElPTlwiLCBvciBsb2cgb3IgZmlsZSB0byBjbG9zZSIsCisJCSAgImNvbm5lY3Rpb24iLHh4c3Ry aW5nKTsKKwlpZiAoeCA9PSAtMykgeworCSAgICBwcmludGYoIj9Zb3UgbXVzdCBzYXkgd2hpY2gg ZmlsZSBvciBsb2dcbiIpOworCSAgICByZXR1cm4oLTkpOworCX0KKwlpZiAoeCA8IDApIHJldHVy bih4KTsKKwlpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsKKyNpZm5kZWYgTk9MT0NB TAorCWlmICh4ID09IDk5OTkpIHsJCS8qIENMT1NFIENPTk5FQ1RJT04gKi8KKwkgICAgeCA9IGNs c2Nvbm54KDApOworCSAgICBzd2l0Y2ggKHgpIHsKKwkgICAgICBjYXNlIDA6CisJCWlmIChtc2dm bGcpIHByaW50ZigiP0Nvbm5lY3Rpb24gd2FzIG5vdCBvcGVuXG4iKTsKKwkgICAgICBjYXNlIC0x OgorCQlyZXR1cm4oMCk7CisJICAgICAgY2FzZSAxOgorCQl3aHljbG9zZWQgPSBXQ19DTE9TOwor CQlyZXR1cm4oMSk7CisJICAgIH0KKwkgICAgcmV0dXJuKDApOworCX0KKyNlbmRpZiAvKiBOT0xP Q0FMICovCisJeSA9IGRvY2xzbG9nKHgpOworCXN1Y2Nlc3MgPSAoeSA9PSAxKTsKKwlyZXR1cm4o c3VjY2Vzcyk7CisgICAgfQorCisjaWZuZGVmIE5PU1BMCisgICAgaWYgKGN4ID09IFhYRENMIHx8 IGN4ID09IFhYVU5EQ0wpIHsJLyogREVDTEFSRSBhbiBhcnJheSAqLworCXJldHVybihkb2RjbChj eCkpOworICAgIH0KKyNlbmRpZiAvKiBOT1NQTCAqLworCisjaWZuZGVmIE5PRElBTAorICAgIGlm IChjeCA9PSBYWFJFRCAgfHwgY3ggPT0gWFhESUFMIHx8IGN4ID09IFhYUERJQSB8fAorCWN4ID09 IFhYQU5TVyB8fCBjeCA9PSBYWExPT0spIHsgLyogRElBTCwgUkVESUFMIGV0YyAqLworI2lmZGVm IFZNUworCWV4dGVybiBpbnQgYmF0Y2g7CisjZWxzZQorI2lmZGVmIFVOSVhPUk9TSworCWV4dGVy biBpbnQgYmFja2dyZDsKKyNlbmRpZiAvKiBVTklYT1JPU0sgKi8KKyNlbmRpZiAvKiBWTVMgKi8K Kwl4ID0gZG9kaWFsKGN4KTsKKwlkZWJ1ZyhGMTAxLCJkb2RpYWwgcmV0dXJucyIsIiIseCk7CisJ aWYgKChjeCA9PSBYWERJQUwgfHwgY3ggPT0gWFhSRUQgfHwgY3ggPT0gWFhBTlNXKSAmJgorCSAg ICAoeCA+IDApICYmCQkJLyogSWYgRElBTCBvciBSRURJQUwgc3VjY2VlZGVkICovCisJICAgIChk aWFsc3RhICE9IERJQV9QQVJUKSAmJgkvKiBhbmQgaXQgd2Fzbid0IHBhcnRpYWwgKi8KKwkgICAg KGRpYWxjb24gPiAwKSkgeworCSAgICBpZiAoKGRpYWxjb24gPT0gMSB8fAkvKiBBbmQgRElBTCBD T05ORUNUIGlzIE9OLCAqLworCQkoKGRpYWxjb24gPT0gMikgJiYJLyogb3IgRElBTCBDT05ORUNU IGlzIEFVVE8gKi8KKwkJICF4Y21kc3JjCQkvKiBhbmQgd2UncmUgYXQgdG9wIGxldmVsLi4uICov CisjaWZkZWYgVk1TCisJCSAmJiAhYmF0Y2gJCS8qIE5vdCBpZiBydW5uaW5nIGZyb20gYmF0Y2gg Ki8KKyNlbHNlCisjaWZkZWYgVU5JWE9ST1NLCisJCSAmJiAhYmFja2dyZAkJLyogTm90IGlmIHJ1 bm5pbmcgaW4gYmFja2dyb3VuZCAqLworI2VuZGlmIC8qIFVOSVhPUk9TSyAqLworI2VuZGlmIC8q IFZNUyAqLworCQkgKSkpIC8qIE9yIEFVVE8gKi8KKwkgICAgICB4ID0gZG9jb25lY3QoZGlhbGNx LAkvKiBUaGVuIGFsc28gQ09OTkVDVCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgY21k bHZsID09IDAgPyAxIDogMAorCQkJICAgKTsKKwkgICAgaWYgKHR0Y2hrKCkgPCAwKQorCSAgICAg IGRvbG9nZW5kKCk7CisJfQorCXJldHVybihzdWNjZXNzID0geCk7CisgICAgfQorI2VuZGlmIC8q IE5PRElBTCAqLworCisjaWZuZGVmIE5PUFVTSAorI2lmZGVmIENLX1JFWFgKKyAgICBpZiAoY3gg PT0gWFhSRVhYKSB7CQkJLyogUkVYWCAqLworICAgICAgICBleHRlcm4gaW50IG5vcHVzaDsKKyAg ICAgICAgaWYgKCBub3B1c2ggKQorICAgICAgICAgIHJldHVybihzdWNjZXNzPTApOworICAgICAg ICByZXR1cm4oZG9yZXh4KCkpOworICAgIH0KKyNlbmRpZiAvKiBDS19SRVhYICovCisjZW5kaWYg LyogTk9QVVNIICovCisKKyNpZm5kZWYgTk9GUklMTFMKKyAgICBpZiAoY3ggPT0gWFhERUwgfHwg Y3ggPT0gWFhMREVMKSB7CS8qIERFTEVURSAqLworI2lmZGVmIExPQ1VTCisJaWYgKCFsb2N1cyAm JiBjeCAhPSBYWExERUwpIHsKKyNpZmRlZiBOT1hGRVIKKwkgICAgcmV0dXJuKC0yKTsKKyNlbHNl CisJICAgIHJldHVybihkb3JtdChYWkRFTCkpOworI2VuZGlmIC8qIE5PWEZFUiAqLworICAgICAg ICB9CisjZW5kaWYgLyogTE9DVVMgKi8KKyNpZmRlZiBJS1NECisJaWYgKGluc2VydmVyICYmICgh RU5BQkxFRChlbl9kZWwpCisjaWZkZWYgQ0tfTE9HSU4KKwkJCSB8fCBpc2d1ZXN0CisjZW5kaWYg LyogQ0tfTE9HSU4gKi8KKwkJCSApKSB7CisJICAgIHByaW50ZigiP1NvcnJ5LCBERUxFVEUgaXMg ZGlzYWJsZWRcbiIpOworCSAgICByZXR1cm4oLTkpOworCX0KKyNlbmRpZiAvKiBJS1NEICovCisj aWZkZWYgQ0tfQVBDCisJaWYgKChhcGNhY3RpdmUgPT0gQVBDX0xPQ0FMKSB8fAorCSAgICAoKGFw Y2FjdGl2ZSA9PSBBUENfUkVNT1RFKSAmJiAoIShhcGNzdGF0dXMgJiBBUENfVU5DSCkpKSkKKwkg IHJldHVybihzdWNjZXNzID0gMCk7CisjZW5kaWYgLyogQ0tfQVBDICovCisJcmV0dXJuKGRvZGVs KCkpOworICAgIH0KKyNlbmRpZiAvKiBOT0ZSSUxMUyAqLworCisgICAgaWYgKGN4ID09IFhYVE9V QykJCQkvKiBUT1VDSCAqLworICAgICAgcmV0dXJuKGRvZGlyKGN4KSk7CisKKyAgICAvKiBESVJF Q1RPUlkgY29tbWFuZHMgKi8KKworICAgIGlmIChjeCA9PSBYWERJUiAgfHwgY3ggPT0gWFhMUyB8 fCBjeCA9PSBYWExESVIgfHwKKwljeCA9PSBYWFdESVIgfHwgY3ggPT0gWFhIRElSKSB7CisjaWZk ZWYgTE9DVVMKKwlpZiAoIWxvY3VzICYmIGN4ICE9IFhYTERJUikgeworI2lmZGVmIE5PWEZFUgor CSAgICByZXR1cm4oLTIpOworI2Vsc2UKKwkgICAgcmV0dXJuKGRvcm10KFhaRElSKSk7CisjZW5k aWYgLyogTk9YRkVSICovCisgICAgICAgIH0KKyNlbmRpZiAvKiBMT0NVUyAqLworI2lmZGVmIElL U0QKKwlpZiAoaW5zZXJ2ZXIgJiYgIUVOQUJMRUQoZW5fZGlyKSkgeworCSAgICBwcmludGYoIj9T b3JyeSwgRElSRUNUT1JZIGlzIGRpc2FibGVkXG4iKTsKKwkgICAgcmV0dXJuKC05KTsKKwl9Cisj ZW5kaWYgLyogSUtTRCAqLworCXJldHVybihkb2RpcihjeCkpOworICAgIH0KKworI2lmbmRlZiBO T1NQTAorICAgIGlmIChjeCA9PSBYWEVMUykJCQkvKiBFTFNFICovCisgICAgICByZXR1cm4oZG9l bHNlKCkpOworI2VuZGlmIC8qIE5PU1BMICovCisKKyNpZm5kZWYgTk9TRVJWRVIKKyNpZm5kZWYg Tk9GUklMTFMKKyAgICBpZiAoY3ggPT0gWFhFTkEgfHwgY3ggPT0gWFhESVMpIHsJLyogRU5BQkxF LCBESVNBQkxFICovCisJcyA9IChjeCA9PSBYWEVOQSkgPworCSAgIlNlcnZlciBmdW5jdGlvbiB0 byBlbmFibGUiIDoKKwkgICAgIlNlcnZlciBmdW5jdGlvbiB0byBkaXNhYmxlIjsKKworCWlmICgo eCA9IGNta2V5KGVuYXRhYixuZW5hLHMsIiIseHhzdHJpbmcpKSA8IDApIHsKKwkgICAgaWYgKHgg PT0gLTMpIHsKKwkJcHJpbnRmKCI/TmFtZSBvZiBzZXJ2ZXIgZnVuY3Rpb24gcmVxdWlyZWRcbiIp OworCQlyZXR1cm4oLTkpOworCSAgICB9IGVsc2UgcmV0dXJuKHgpOworCX0KKwlpZiAoKHkgPSBj bWtleShrbXN0YWIsMywibW9kZSIsImJvdGgiLHh4c3RyaW5nKSkgPCAwKSB7CisJICAgIGlmICh5 ID09IC0zKSB7CisJCXByaW50ZigiP1BsZWFzZSBzcGVjaWZ5IHJlbW90ZSwgbG9jYWwsIG9yIGJv dGhcbiIpOworCQlyZXR1cm4oLTkpOworCSAgICB9IGVsc2UgcmV0dXJuKHkpOworCX0KKwlpZiAo Y3ggPT0gWFhESVMpCQkvKiBEaXNhYmxpbmcsIG5vdCBlbmFibGluZyAqLworCSAgeSA9IDMgLSB5 OworCWlmICgoeiA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHopOworI2lmZGVmIENLX0FQQworCWlm ICgoYXBjYWN0aXZlID09IEFQQ19MT0NBTCkgfHwKKwkgICAgKChhcGNhY3RpdmUgPT0gQVBDX1JF TU9URSkgJiYgKCEoYXBjc3RhdHVzICYgQVBDX1VOQ0gpKSkpCisJICByZXR1cm4oc3VjY2VzcyA9 IDApOworI2VuZGlmIC8qIENLX0FQQyAqLworI2lmZGVmIElLU0QKKyAgICAgICAgLyogVGhpcyBt YXkgc2VlbSBsaWtlIGl0IGR1cGxpY2F0ZXMgdGhlIHdvcmsgaW4gZG9lbmFibGUoKSAgKi8KKyAg ICAgICAgLyogYnV0IHRoaXMgY29kZSByZXR1cm5zIGZhaWx1cmUgd2hlcmVhcyBkb2VuYWJsZSgp IHJldHVybnMgKi8KKyAgICAgICAgLyogc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgaWYgKGluc2VydmVyICYmCisjaWZk ZWYgSUtTRENPTkYKKyAgICAgICAgICAgIGlrc2RjZiAmJgorI2VuZGlmIC8qIElLU0RDT05GICov CisgICAgICAgICAgICAoeCA9PSBFTl9IT1MgfHwgeCA9PSBFTl9QUkkgfHwgeCA9PSBFTl9NQUkg fHwgeCA9PSBFTl9XSE8gfHwKKyAgICAgICAgICAgICAgaXNndWVzdCkpCisgICAgICAgICAgICBy ZXR1cm4oc3VjY2VzcyA9IDApOworI2VuZGlmIC8qIElLU0QgKi8KKwlyZXR1cm4oZG9lbmFibGUo eSx4KSk7CisgICAgfQorI2VuZGlmIC8qIE5PRlJJTExTICovCisjZW5kaWYgLyogTk9TRVJWRVIg Ki8KKworI2lmbmRlZiBOT1NQTAorICAgIGlmIChjeCA9PSBYWFJFVCkgewkJCS8qIFJFVFVSTiAq LworCWlmICgoeCA9IGNtdHh0KCJPcHRpb25hbCByZXR1cm4gdmFsdWUiLCIiLCZzLE5VTEwpKSA8 IDApCisJICByZXR1cm4oeCk7CisJcyA9IGJyc3RyaXAocyk7CQkJLyogU3RyaXAgYnJhY2VzICov CisJaWYgKGNtZGx2bCA9PSAwKQkJLyogQXQgdG9wIGxldmVsLCBub3RoaW5nIGhhcHBlbnMuLi4g Ki8KKwkgIHJldHVybihzdWNjZXNzID0gMSk7CisJc3dpdGNoIChjbWRzdGtbY21kbHZsXS5zcmMp IHsJLyogQWN0aW9uIGRlcGVuZHMgb24gY29tbWFuZCBzb3VyY2UgKi8KKwkgIGNhc2UgQ01EX1RG OgkJCS8qIENvbW1hbmQgZmlsZSAqLworCSAgICBwb3BjbHZsKCk7CQkJLyogUG9wIGNvbW1hbmQg bGV2ZWwgKi8KKwkgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsJLyogYWx3YXlzIHN1Y2NlZWRzICov CisJICBjYXNlIENNRF9NRDoJCQkvKiBNYWNybyAqLworCSAgY2FzZSBDTURfS0I6CQkJLyogUHJv bXB0ICovCisJICAgIHJldHVybihkb3JldHVybihzKSk7CS8qIFRyYWlsaW5nIHRleHQgaXMgcmV0 dXJuIHZhbHVlLiAqLworCSAgZGVmYXVsdDoJCQkvKiBTaG91bGRuJ3QgaGFwcGVuICovCisJICAg IHJldHVybigtMik7CisJfQorICAgIH0KKyNlbmRpZiAvKiBOT1NQTCAqLworCisjaWZuZGVmIE5P U1BMCisgICAgaWYgKGN4ID09IFhYT1BFKQkJCS8qIE9QRU4gKi8KKyAgICAgIHJldHVybihkb29w ZW4oKSk7CisjZW5kaWYgLyogTk9TUEwgKi8KKworI2lmbmRlZiBOT1NQTAorICAgIGlmIChjeCA9 PSBYWE9VVCB8fCBjeCA9PSBYWExOT1VUKSB7CS8qIE9VVFBVVCBvciBMSU5FT1VUICovCisJaWYg KCh4ID0gY210eHQoIlRleHQgdG8gYmUgb3V0cHV0IiwiIiwmcyxOVUxMKSkgPCAwKQorCSAgcmV0 dXJuKHgpOworI2lmZGVmIENLX0FQQworCWlmICgoYXBjYWN0aXZlID09IEFQQ19MT0NBTCkgfHwK KwkgICAgKChhcGNhY3RpdmUgPT0gQVBDX1JFTU9URSkgJiYgKCEoYXBjc3RhdHVzICYgQVBDX1VO Q0gpKSkpCisJICByZXR1cm4oc3VjY2VzcyA9IDApOworI2VuZGlmIC8qIENLX0FQQyAqLworCWRl YnVnKEYxMTAsIk9VVFBVVCAxIixzLDApOworCXMgPSBicnN0cmlwKHMpOwkJCS8qIFN0cmlwIGVu Y2xvc2luZyBicmFjZXMsICovCisJZGVidWcoRjExMCwiT1VUUFVUIDIiLHMsMCk7CisvKgorICBJ IGRvbid0IHRoaW5rIEkgY291bGQgZXZlciBmdWxseSBleHBsYWluIHRoaXMgaW4gYSBtaWxsaW9u IHllYXJzLi4uCisgIFdlIGhhdmUgcmVhZCB0aGUgdXNlcidzIHN0cmluZyB3aXRob3V0IGNhbGxp bmcgdGhlIHZhcmlhYmxlLWV4cGFuZGVyCisgIGZ1bmN0aW9uLiAgTm93LCBiZWZvcmUgd2UgY2Fs bCBpdCwgd2UgaGF2ZSB0byBkb3VibGUgYmFja3NsYXNoZXMgdGhhdAorICBhcHBlYXIgYmVmb3Jl IFxOLCBcQiwgXEwsIGFuZCBcIGl0c2VsZiwgc28gdGhlIGV4cGFuZGVyIGZ1bmN0aW9uIHdpbGwK KyAgcmVkdWNlIHRoZW0gYmFjayB0byBzaW5nbGUgYmFja3NsYXNoZXMsIHNvIHdoZW4gd2UgY2Fs bCBkb291dHB1dCgpLi4uCisgIEJ1dCBpdCdzIG1vcmUgY29tcGxpY2F0ZWQgdGhhbiB0aGF0Lgor Ki8KKwlpZiAoY21kZ3F1bygpKSB7CQkvKiBPbmx5IGlmIENPTU1BTkQgUVVPVElORyBPTiAuLi4g Ki8KKwkgICAgZm9yICh4ID0gMCwgeSA9IDA7IHNbeF07IHgrKywgeSsrKSB7CisJCWlmIChzW3hd ID09IENNRFEpIHsKKwkJICAgIGNoYXIgYyA9IHNbeCsxXTsKKwkJICAgIGlmIChjID09ICduJyB8 fCBjID09ICdOJyB8fAorCQkJYyA9PSAnYicgfHwgYyA9PSAnQicgfHwKKwkJCWMgPT0gJ2wnIHx8 IGMgPT0gJ0wnIHx8CisJCQljID09IENNRFEpCisJCSAgICAgIGxpbmVbeSsrXSA9IENNRFE7CisJ CX0KKwkJbGluZVt5XSA9IHNbeF07CisJICAgIH0KKwkgICAgbGluZVt5KytdID0gJ1wwJzsJCS8q IE5vdyBleHBhbmQgdmFyaWFibGVzLCBldGMuICovCisJICAgIGRlYnVnKEYxMTAsIk9VVFBVVCAz IixsaW5lLDApOworCSAgICBzID0gbGluZSt5KzE7CisJICAgIHggPSBMSU5CVUZTSVogLSAoaW50 KSBzdHJsZW4obGluZSkgLSAxOworCSAgICBkZWJ1ZyhGMTAxLCJPVVRQVVQgc2l6ZSIsIiIseCk7 CisJICAgIGlmICh6enN0cmluZyhsaW5lLCZzLCZ4KSA8IDApCisJICAgICAgcmV0dXJuKHN1Y2Nl c3MgPSAwKTsKKwkgICAgcyA9IGxpbmUreSsxOworCSAgICBkZWJ1ZyhGMTEwLCJPVVRQVVQgNCIs cywwKTsKKwl9CisJc3VjY2VzcyA9IGRvb3V0cHV0KHMsY3gpOworCXJldHVybihzdWNjZXNzKTsK KyAgICB9CisjZW5kaWYgLyogTk9TUEwgKi8KKworI2lmZGVmIEFOWVgyNQorI2lmbmRlZiBJQk1Y MjUKKyAgICBpZiAoY3ggPT0gWFhQQUQpIHsJCQkvKiBQQUQgY29tbWFuZHMgKi8KKwl4ID0gY21r ZXkocGFkdGFiLG5wYWRjLCJQQUQgY29tbWFuZCIsIiIseHhzdHJpbmcpOworCWlmICh4ID09IC0z KSB7CisJICAgIHByaW50ZigiP1lvdSBtdXN0IHNwZWNpZnkgYSBQQUQgY29tbWFuZCB0byBleGVj dXRlXG4iKTsKKwkgICAgcmV0dXJuKC05KTsKKwl9CisJaWYgKHggPCAwKSByZXR1cm4oeCk7CisK Kwlzd2l0Y2ggKHgpIHsKKwkgIGNhc2UgWFlQQURMOgorCSAgICBpZiAoeDI1c3RhdCgpIDwgMCkK KwkgICAgICBwcmludGYoIlNvcnJ5LCB5b3UgbXVzdCAnc2V0IG5ldHdvcmsnICYgJ3NldCBob3N0 JyBmaXJzdFxyXG4iKTsKKwkgICAgZWxzZSB7CisJCXgyNWNsZWFyKCk7CisJCWluaXRwYWQoKTsK KwkgICAgfQorCSAgICBicmVhazsKKwkgIGNhc2UgWFlQQURTOgorCSAgICBpZiAoeDI1c3RhdCgp IDwgMCkKKwkgICAgICBwcmludGYoIk5vdCBjb25uZWN0ZWRcclxuIik7CisJICAgIGVsc2Ugewor CQlleHRlcm4gaW50IGxpbmtpZCwgbGNuOworCQljb25vbCgiQ29ubmVjdGVkIHRocnUgIik7CisJ CWNvbm9sKHR0bmFtZSk7CisJCXByaW50ZigiLCBMaW5rIGlkICVkLCBMb2dpY2FsIGNoYW5uZWwg bnVtYmVyICVkXHJcbiIsCisJCSAgICAgICBsaW5raWQsbGNuKTsKKwkgICAgfQorCSAgICBicmVh azsKKwkgIGNhc2UgWFlQQURSOgorCSAgICBpZiAoeDI1c3RhdCgpIDwgMCkKKwkgICAgICBwcmlu dGYoIlNvcnJ5LCB5b3UgbXVzdCAnc2V0IG5ldHdvcmsnICYgJ3NldCBob3N0JyBmaXJzdFxyXG4i KTsKKwkgICAgZWxzZQorCSAgICAgIHgyNXJlc2V0KDAsMCk7CisJICAgIGJyZWFrOworCSAgY2Fz ZSBYWVBBREk6CisJICAgIGlmICh4MjVzdGF0KCkgPCAwKQorCSAgICAgIHByaW50ZigiU29ycnks IHlvdSBtdXN0ICdzZXQgbmV0d29yaycgJiAnc2V0IGhvc3QnIGZpcnN0XHJcbiIpOworCSAgICBl bHNlCisJICAgICAgeDI1aW50cigwKTsKKwl9CisJcmV0dXJuKDApOworICAgIH0KKyNlbmRpZiAv KiBJQk1YMjUgKi8KKyNlbmRpZiAvKiBBTllYMjUgKi8KKworI2lmbmRlZiBOT1NQTAorICAgIGlm IChjeCA9PSBYWFBBVSB8fCBjeCA9PSBYWFdBSSB8fCBjeCA9PSBYWE1TTCkgLyogUEFVU0UsIFdB SVQsIGV0YyAqLworICAgICAgcmV0dXJuKGRvcGF1cyhjeCkpOworI2VuZGlmIC8qIE5PU1BMICov CisKKyNpZm5kZWYgTk9GUklMTFMKKyAgICBpZiAoY3ggPT0gWFhQUkkpIHsKKyNpZmRlZiBJS1NE CisjaWZkZWYgQ0tfTE9HSU4KKwlpZiAoaW5zZXJ2ZXIgJiYgKGlzZ3Vlc3QgfHwgIUVOQUJMRUQo ZW5fcHJpKSkpIHsKKwkgICAgcHJpbnRmKCI/U29ycnksIHByaW50aW5nIGlzIGRpc2FibGVkXG4i KTsKKwkgICAgcmV0dXJuKC05KTsKKwl9CisjZW5kaWYgLyogQ0tfTE9HSU4gKi8KKyNlbmRpZiAv KiBJS1NEICovCisJaWYgKCh4ID0gY21pZmkoIkZpbGUgdG8gcHJpbnQiLCIiLCZzLCZ5LHh4c3Ry aW5nKSkgPCAwKSB7CisJICAgIGlmICh4ID09IC0zKSB7CisJCXByaW50ZigiP0EgZmlsZSBzcGVj aWZpY2F0aW9uIGlzIHJlcXVpcmVkXG4iKTsKKwkJcmV0dXJuKC05KTsKKwkgICAgfSBlbHNlIHJl dHVybih4KTsKKwl9CisJaWYgKHkgIT0gMCkgeworCSAgICBwcmludGYoIj9XaWxkY2FyZHMgbm90 IGFsbG93ZWRcbiIpOworCSAgICByZXR1cm4oLTkpOworCX0KKwlja3N0cm5jcHkobGluZSxzLExJ TkJVRlNJWik7CisJcyA9ICIiOworI2lmbmRlZiBOVAorCWlmICgoeCA9IGNtdHh0KCJMb2NhbCBw cmludCBjb21tYW5kIG9wdGlvbnMsIG9yIGNhcnJpYWdlIHJldHVybiIsIiIsJnMsCisJCSAgICAg ICB4eHN0cmluZykpIDwgMCkKKwkgIHJldHVybih4KTsKKyNlbmRpZiAvKiBOVCAqLworCWlmICgo eCA9IGNtY2ZtKCkpIDwgMCkKKwkgIHJldHVybih4KTsKKwlyZXR1cm4oc3VjY2VzcyA9ICh6cHJp bnQocyxsaW5lKSA9PSAwKSA/IDEgOiAwKTsKKyAgICB9CisjZW5kaWYgLyogTk9GUklMTFMgKi8K KworI2lmZGVmIFRDUFNPQ0tFVAorI2lmbmRlZiBOT1BVU0gKKyAgICBpZiAoY3ggPT0gWFhQTkcp IAkJCS8qIFBJTkcgYW4gSVAgaG9zdCAqLworICAgICAgcmV0dXJuKGRvcGluZygpKTsKKyNlbmRp ZiAvKiBOT1BVU0ggKi8KKworI2lmbmRlZiBOT0ZUUAorICAgIGlmIChjeCA9PSBYWEZUUCkJCQkv KiBGVFAgKi8KKyNpZmRlZiBTWVNGVFAKKyNpZm5kZWYgTk9QVVNICisgICAgICByZXR1cm4oZG9m dHAoKSk7CQkJLyogSnVzdCBydW5zIHN5c3RlbSdzIGZ0cCBwcm9ncmFtICovCisjZWxzZQorICAg ICAgcmV0dXJuKC0yKTsKKyNlbmRpZiAvKiBOT1BVU0ggKi8KKyNlbHNlCisgICAgcmV0dXJuKGRv eGZ0cCgpKTsKKyNlbmRpZiAvKiBTWVNGVFAgKi8KKyNlbmRpZiAvKiBOT0ZUUCAqLworI2VuZGlm IC8qIFRDUFNPQ0tFVCAqLworCisgICAgaWYgKGN4ID09IFhYUFdEIHx8IGN4ID09IFhYTFBXRCkg ewkvKiBQV0QgKi8KKyNpZmRlZiBPUzIKKwljaGFyICpwd3A7CisjZW5kaWYgLyogT1MyICovCisJ aWYgKCh4ID0gY21jZm0oKSkgPCAwKQorCSAgcmV0dXJuKHgpOworI2lmZGVmIExPQ1VTCisJaWYg KCFsb2N1cyAmJiBjeCAhPSBYWExQV0QpIHsKKyNpZmRlZiBOT1hGRVIKKwkgICAgcmV0dXJuKC0y KTsKKyNlbHNlCisJICAgIHJldHVybihkb3JtdChYWlBXRCkpOworI2VuZGlmIC8qIE5PWEZFUiAq LworICAgICAgICB9CisjZW5kaWYgLyogTE9DVVMgKi8KKworI2lmbmRlZiBNQUMKKyNpZm5kZWYg T1MyCisjaWZkZWYgVU5JWAorCXByaW50ZigiJXNcbiIsemd0ZGlyKCkpOworI2Vsc2UKKwl4c3lz dGVtKFBXRENNRCk7CisjZW5kaWYgLyogVU5JWCAqLworCXJldHVybihzdWNjZXNzID0gMSk7CQkv KiBCbGluZCBmYWl0aCAqLworI2Vsc2UgIC8qIE9TMiAqLworCWlmIChwd3AgPSB6Z3RkaXIoKSkg eworCSAgICBpZiAoKnB3cCkgeworI2lmZGVmIE5UCisJCWxpbmVbMF0gPSBOVUw7CisJCWNrR2V0 TG9uZ1BhdGhOYW1lKHB3cCxsaW5lLExJTkJVRlNJWik7CisJCWxpbmVbTElOQlVGU0laLTFdID0g TlVMOworCQl0bXBidWZbMF0gPSBOVUw7CisJCUdldFNob3J0UGF0aE5hbWUocHdwLHRtcGJ1ZixU TVBCVUZTSVopOworCQl0bXBidWZbVE1QQlVGU0laLTFdID0gTlVMOworCQlwd3AgPSBsaW5lOwor CQlpZiAoIXN0cmNtcChsaW5lLHRtcGJ1ZikpIHsKKyNlbmRpZiAvKiBOVCAqLworCQkgICAgcHJp bnRmKCIlc1xuIixwd3ApOworI2lmZGVmIE5UCisJCX0gZWxzZSB7CisJCSAgICBwcmludGYoIiAg TG9uZyBuYW1lOiAgJXNcbiIsbGluZSk7CisJCSAgICBwcmludGYoIiAgU2hvcnQgbmFtZTogJXNc biIsdG1wYnVmKTsKKwkJfSAgICAgICAgICAgIAorI2VuZGlmIC8qIE5UICovCisJICAgIH0KKwkg ICAgcmV0dXJuKHN1Y2Nlc3MgPSAoKGludClzdHJsZW4ocHdwKSA+IDApKTsKKwl9IGVsc2UgcmV0 dXJuKHN1Y2Nlc3MgPSAwKTsKKyNlbmRpZiAvKiBPUzIgKi8KKyNlbHNlICAvKiBNQUMgKi8KKwlp ZiAocHdwID0gemd0ZGlyKCkpIHsKKwkgICAgcHJpbnRmKCIlc1xuIixwd3ApOworCSAgICByZXR1 cm4oc3VjY2VzcyA9ICgoaW50KXN0cmxlbihwd3ApID4gMCkpOworCX0gZWxzZSByZXR1cm4oc3Vj Y2VzcyA9IDApOworI2VuZGlmIC8qIE1BQyAqLworICAgIH0KKworICAgIGlmIChjeCA9PSBYWFFV SSB8fCBjeCA9PSBYWEVYSSkgewkvKiBFWElULCBRVUlUICovCisJZXh0ZXJuIGludCBxdWl0dGlu ZzsKKworCWlmICgoeSA9IGNtbnVtKCJleGl0IHN0YXR1cyBjb2RlIixja2l0b2EoeGl0c3RhKSwx MCwmeCx4eHN0cmluZykpIDwgMCkKKwkgIHJldHVybih5KTsKKwlpZiAoKHkgPSBjbXR4dCgiT3B0 aW9uYWwgRVhJVCBtZXNzYWdlIiwiIiwmcyx4eHN0cmluZykpIDwgMCkKKwkgIHJldHVybih5KTsK KwlzID0gYnJzdHJpcChzKTsKKwlja3N0cm5jcHkobGluZSxzLExJTkJVRlNJWik7CisKKwlpZiAo IWh1cG9rKDApKQkJCS8qIENoZWNrIGlmIGNvbm5lY3Rpb24gc3RpbGwgb3BlbiAqLworCSAgcmV0 dXJuKHN1Y2Nlc3MgPSAwKTsKKworCWlmIChsaW5lWzBdKQkJCS8qIFByaW50IEVYSVQgbWVzc2Fn ZSBpZiBnaXZlbiAqLworCSAgcHJpbnRmKCIlc1xuIiwoY2hhciAqKWxpbmUpOworCisJcXVpdHRp bmcgPSAxOwkJCS8qIEZsYWcgdGhhdCB3ZSBhcmUgcXVpdHRpbmcuICovCisKKyNpZmRlZiBWTVMK Kwlkb2V4aXQoR09PRF9FWElULHgpOworI2Vsc2UKKyNpZmRlZiBPU0sKKy8qIFJldHVybmluZyBh bnkgY29kZXMgaGVyZSBtYWtlcyB0aGUgT1MtOSBzaGVsbCBwcmludCBhbiBlcnJvciBtZXNzYWdl LiAqLworCWRvZXhpdChHT09EX0VYSVQsLTEpOworI2Vsc2UKKyNpZmRlZiBkYXRhZ2VuZXJhbAor ICAgICAgICBkb2V4aXQoR09PRF9FWElULHgpOworI2Vsc2UKKwlkb2V4aXQoeCwtMSk7CisjZW5k aWYgLyogZGF0YWdlbmVyYWwgKi8KKyNlbmRpZiAvKiBPU0sgKi8KKyNlbmRpZiAvKiBWTVMgKi8K KyAgICB9CisKKyNpZm5kZWYgTk9YRkVSCisjaWZuZGVmIE5PRlJJTExTCisgICAgaWYgKGN4ID09 IFhYRVJSKSB7CQkJLyogRVJST1IgKi8KKyNpZmRlZiBDS19YWVoKKwlpZiAocHJvdG9jb2wgIT0g UFJPVE9fSykgeworCSAgICBwcmludGYoIlNvcnJ5LCBFLVBBQ0tFVCBvbmx5IHdvcmtzIHdpdGgg S2VybWl0IHByb3RvY29sXG4iKTsKKwkgICAgcmV0dXJuKC05KTsKKwl9CisjZW5kaWYgLyogQ0tf WFlaICovCisJaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7CisJdHRmbHVpKCk7CisJ ZXBrdGZsZyA9IDE7CisJc3N0YXRlID0gJ2EnOworCXJldHVybigwKTsKKyAgICB9CisjZW5kaWYg LyogTk9GUklMTFMgKi8KKworICAgIGlmIChjeCA9PSBYWEZJTikgewkJCS8qIEZJTklTSCAqLwor I2lmZGVmIE5FV0ZUUAorCWlmICgoZnRwZ2V0ID09IDEpIHx8ICgoZnRwZ2V0ID09IDIpICYmIGZ0 cGlzb3BlbigpKSkKKwkgIHJldHVybihmdHBieWUoKSk7CisjZW5kaWYgLyogTkVXRlRQICovCisj aWZkZWYgQ0tfWFlaCisJaWYgKHByb3RvY29sICE9IFBST1RPX0spIHsKKwkgICAgcHJpbnRmKCJT b3JyeSwgRklOSVNIIG9ubHkgd29ya3Mgd2l0aCBLZXJtaXQgcHJvdG9jb2xcbiIpOworCSAgICBy ZXR1cm4oLTkpOworCX0KKyNlbmRpZiAvKiBDS19YWVogKi8KKwlpZiAoKHggPSBjbWNmbSgpKSA8 IDApIHJldHVybih4KTsKKworI2lmZGVmIElLU19PUFRJT04KKyAgICAgICAgaWYgKAorI2lmZGVm IENLX1hZWgorICAgICAgICAgICAgcHJvdG9jb2wgPT0gUFJPVE9fSyAmJgorI2VuZGlmIC8qIENL X1hZWiAqLworICAgICAgICAgICAgIWlrc193YWl0KEtFUk1JVF9SRVFfU1RBUlQsMSkpIHsKKwkg ICAgcHJpbnRmKAorICAgICAgICAgICAgICAiP0EgS2VybWl0IFNlcnZlciBpcyBub3QgYXZhaWxh YmxlIHRvIHByb2Nlc3MgdGhpcyBjb21tYW5kXG4iKTsKKwkgICAgcmV0dXJuKC05KTsJCQkvKiBD b3JyZWN0IHRoZSByZXR1cm4gY29kZSAqLworICAgICAgICB9CisjZW5kaWYgLyogSUtTX09QVElP TiAqLworCisJc3N0YXRlID0gc2V0Z2VuKCdGJywiIiwiIiwiIik7CisJaWYgKGxvY2FsKSB0dGZs dWkoKTsJCS8qIElmIGxvY2FsLCBmbHVzaCB0dHkgaW5wdXQgYnVmZmVyICovCisJcmV0dXJuKDAp OworICAgIH0KKyNlbmRpZiAvKiBOT1hGRVIgKi8KKworI2lmbmRlZiBOT1NQTAorICAgIGlmIChj eCA9PSBYWEZPUikJCQkvKiBGT1IgbG9vcCAqLworICAgICAgcmV0dXJuKGRvZm9yKCkpOworI2Vu ZGlmIC8qIE5PU1BMICovCisKKyNpZm5kZWYgTk9YRkVSCisgICAgLyogR0VUIE1HRVQgUkVHRVQg UkVUUklFVkUgZXRjICovCisgICAgaWYgKGN4ID09IFhYR0VUIHx8IGN4ID09IFhYTUdFVCB8fCBj eCA9PSBYWFJFR0VUIHx8IGN4ID09IFhYUkVUUikgeworI2lmZGVmIElLU0QKKwlpZiAoaW5zZXJ2 ZXIgJiYgIUVOQUJMRUQoZW5fc2VuKSkgeworCSAgICBwcmludGYoIj9Tb3JyeSwgcmVjZXB0aW9u IG9mIGZpbGVzIGlzIGRpc2FibGVkXG4iKTsKKwkgICAgcmV0dXJuKC05KTsKKwl9CisjZW5kaWYg LyogSUtTRCAqLworCXJldHVybihkb3hnZXQoY3gpKTsKKyAgICB9CisjZW5kaWYgLyogTk9YRkVS ICovCisKKyNpZm5kZWYgTk9TUEwKKyNpZm5kZWYgTk9GUklMTFMKKyAgICBpZiAoY3ggPT0gWFhH T0spIHsJCQkvKiBHRVRPSyAqLworCXJldHVybihzdWNjZXNzID0gZG9hc2soY3gpKTsKKyAgICB9 CisjZW5kaWYgLyogTk9GUklMTFMgKi8KKyNlbmRpZiAvKiBOT1NQTCAqLworCisgICAgaWYgKGN4 ID09IFhYSExQKSB7CQkJLyogSEVMUCAqLworI2lmZGVmIE5PSEVMUAorCXJldHVybihkb2hscChY WEhMUCkpOworI2Vsc2UKKwl4ID0gY21rZXkyKGNtZHRhYiwKKwkJICAgbmNtZCwiXG5Db21tYW5k IG9yIHRvcGljIiwiaGVscCIsdG9rdGFiLHh4c3RyaW5nLDErMis4KTsKKwlkZWJ1ZyhGMTExLCJI RUxQIGNvbW1hbmQgeCIsY21kYnVmLHgpOworCWlmICh4ID09IC01KSB7CisJICAgIHkgPSBjaGt0 b2sodG9rdGFiKTsKKwkgICAgZGVidWcoRjEwMSwiSEVMUCBjbWtleSB0b2tlbiIsIiIseSk7CisJ ICAgIC8qIHVuZ3dvcmQoKTsgKi8KKwkgICAgc3dpdGNoICh5KSB7CisjaWZuZGVmIE5PUFVTSAor CSAgICAgIGNhc2UgJyEnOgorCSAgICAgIGNhc2UgJ0AnOiB4ID0gWFhTSEU7IGJyZWFrOworCSAg ICAgIGNhc2UgJzwnOiB4ID0gWFhGVU47IGJyZWFrOworI2VuZGlmIC8qIE5PUFVTSCAqLworCSAg ICAgIGNhc2UgJyMnOiB4ID0gWFhDT007IGJyZWFrOworCSAgICAgIGNhc2UgJzsnOiB4ID0gWFhD T007IGJyZWFrOworI2lmbmRlZiBOT1NQTAorICAgICAgICAgICAgICBjYXNlICcuJzogeCA9IFhY REVGOyBicmVhazsKKwkgICAgICBjYXNlICc6JzogeCA9IFhYTEJMOyBicmVhazsKKyNpZm5kZWYg Tk9TRVhQCisJICAgICAgY2FzZSAnKCc6IHggPSBYWFNFWFA7IGJyZWFrOworI2VuZGlmIC8qIE5P U0VYUCAqLworI2VuZGlmIC8qIE5PU1BMICovCisjaWZkZWYgQ0tfUkVDQUxMCisJICAgICAgY2Fz ZSAnXic6IHggPSBYWFJFRE87IGJyZWFrOworI2VuZGlmCS8qIENLX1JFQ0FMTCAqLworCSAgICAg IGNhc2UgJyYnOiB4ID0gWFhFQ0g7IGJyZWFrOyAvKiAod2hhdCBpcyB0aGlzPykgKi8KKwkgICAg ICBkZWZhdWx0OgorCQlwcmludGYoIlxuP0ludmFsaWQgLSAlc1xuIixjbWRidWYpOworCQl4ID0g LTI7CisJICAgIH0KKwl9CisJbWFrZXN0cigmaGxwdG9rLGF0bWJ1Zik7CisJZGVidWcoRjExMSwi SEVMUCB0b2tlbiIsaGxwdG9rLHgpOworCXJldHVybihkb2hscCh4KSk7CisjZW5kaWYgLyogTk9I RUxQICovCisgICAgfQorCisjaWZuZGVmIE5PSEVMUAorICAgIGlmIChjeCA9PSBYWElOVCkJCQkv KiBJTlRSTyAqLworICAgICAgcmV0dXJuKGhtc2dhKGludHJvdHh0KSk7CisgICAgaWYgKGN4ID09 IFhYTkVXKSB7CQkJLyogTkVXUyAqLworCWludCB4OworCWV4dGVybiBjaGFyICoga19pbmZvX2Rp cjsKKwl4ID0gaG1zZ2EobmV3c3R4dCk7CisJcmV0dXJuKHgpOworICAgIH0KKworI2lmZGVmIE9T Mk9OTFkKKyAgICBpZiAoY3ggPT0gWFhVUEQpIHsJCQkvKiBWaWV3IFVQREFURSBmaWxlICovCisg ICAgICAgIGV4dGVybiBjaGFyIGV4ZWRpcltdOworICAgICAgICBjaGFyICogcFRvcGljOworICAg ICAgICBjaGFyIHVwZHN0clsyMDQ4XTsKKyAgICAgICAgaWYgKCh4ID0gY210eHQoInRvcGljIG5h bWUiLCIiLCZwVG9waWMseHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgICByZXR1cm4geDsKKyNp ZmRlZiBDT01NRU5UCisJc3ByaW50Zih1cGRzdHIsCisJCSJzdGFydCB2aWV3ICVzXFxkb2NzXFxr Mi5pbmYrJXNcXGRvY3NcXHVzaW5nX2NrLmluZitcCislc1xcZG9jc1xcZGlhbGluZy5pbmYrJXNc XGRvY3NcXG1vZGVtcy5pbmYgJXMiLAorCQlleGVkaXIsZXhlZGlyLGV4ZWRpcixleGVkaXIscFRv cGljCisJCSk7CisjZWxzZQorCWlmIChja21ha3htc2codXBkc3RyLAorCQkgICAgIDIwNDgsCisJ CSAgICAgInN0YXJ0IHZpZXcgIiwKKwkJICAgICBleGVkaXIsCisJCSAgICAgIlxcZG9jc1xcazIu aW5mKyIsCisJCSAgICAgZXhlZGlyLAorCQkgICAgICJcXGRvY3NcXHVzaW5nX2NrLmluZisiLAor CQkgICAgIGV4ZWRpciwKKwkJICAgICAiXFxkb2NzXFxkaWFsaW5nLmluZisiLAorCQkgICAgIGV4 ZWRpciwKKwkJICAgICAiXFxkb2NzXFxtb2RlbXMuaW5mICIsCisJCSAgICAgcFRvcGljLAorCQkg ICAgIE5VTEwsCisJCSAgICAgTlVMTAorCQkgICAgICkgPiAwKQorI2VuZGlmIC8qIENPTU1FTlQg Ki8KKwkgIHN5c3RlbSh1cGRzdHIpOworICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworICAg IH0KKyNlbmRpZiAvKiBPUzJPTkxZICovCisjZW5kaWYgLyogTk9IRUxQICovCisKKyNpZm5kZWYg Tk9MT0NBTAorICAgIGlmIChjeCA9PSBYWEhBTikgewkJCS8qIEhBTkdVUCAqLworCWlmICgoeCA9 IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOworI2lmZGVmIE5FV0ZUUAorCWlmICgoZnRwZ2V0ID09 IDEpIHx8ICgoZnRwZ2V0ID09IDIpICYmICFsb2NhbCAmJiBmdHBpc29wZW4oKSkpCisJICByZXR1 cm4oc3VjY2VzcyA9IGZ0cGJ5ZSgpKTsKKyNlbmRpZiAvKiBORVdGVFAgKi8KKyNpZm5kZWYgTk9E SUFMCisJaWYgKCh4ID0gbWRtaHVwKCkpIDwgMSkgeworCSAgICBkZWJ1ZyhGMTAxLCJIQU5HVVAg bWRtdXAiLCIiLHgpOworI2VuZGlmIC8qIE5PRElBTCAqLworCSAgICB4ID0gdHRoYW5nKCk7CisJ ICAgIGRlYnVnKEYxMDEsIkhBTkdVUCB0dGhhbmciLCIiLHgpOworCSAgICB4ID0gKHggPiAtMSk7 CisjaWZuZGVmIE5PRElBTAorCX0KKwlkaWFsc3RhID0gRElBX1VOSzsKKyNlbmRpZiAvKiBOT0RJ QUwgKi8KKwl3aHljbG9zZWQgPSBXQ19DTE9TOworCXR0Y2hrKCk7CQkJLyogSW4gY2FzZSBvZiBD TE9TRS1PTi1ESVNDT05ORUNUICovCisJZG9sb2dlbmQoKTsKKyNpZmRlZiBPUzIKKwlpZiAoeCkK KwkgIERpYWxlclNlbmQoT1BUX0tFUk1JVF9IQU5HVVAsIDApOworI2VuZGlmIC8qIE9TMiAqLwor CWlmICh4KSBoYXZlbGluZSA9IDA7CisJcmV0dXJuKHN1Y2Nlc3MgPSB4KTsKKyAgICB9CisjZW5k aWYgLyogTk9MT0NBTCAqLworCisjaWZuZGVmIE5PU1BMCisgICAgLyogSU5QVVQsIFJFSU5QVVQs IGFuZCBNSU5QVVQgKi8KKworICAgIGlmIChjeCA9PSBYWElOUCB8fCBjeCA9PSBYWFJFSSB8fCBj eCA9PSBYWE1JTlApIHsKKwlsb25nIHp6OworCWludCBmbGFncyA9IDAsIGluY291bnQgPSAwOwor CWV4dGVybiBpbnQgaXRzYXBhdHRlcm4sIGlzam9pbiwgaXNpbmJ1ZmxlbjsKKwlpbnQgYywgZ2V0 dmFsOworCisJc3RydWN0IEZEQiBzdywgbnUsIGZsOworCWludCBmYywgaGF2ZXRpbWUgPSAwOwor CWNoYXIgKiBtOworCisJaWYgKGN4ID09IFhYUkVJKSB7CisJICAgIG0gPSAiVGltZW91dCBpbiBz ZWNvbmRzIChpZ25vcmVkKSI7CisJfSBlbHNlIHsKKwkgICAgbSA9ICJTZWNvbmRzIHRvIHdhaXQg Zm9yIGlucHV0LFxuIG9yIHRpbWUgb2YgZGF5IGhoOm1tOnNzLFwKKyBvciBzd2l0Y2giOworCX0K KwljbWZkYmkoJnN3LAkJCS8qIEZpcnN0IEZEQiAtIGNvbW1hbmQgc3dpdGNoZXMgKi8KKwkgICAg ICAgX0NNS0VZLAkJCS8qIGZjb2RlICovCisJICAgICAgIG0sCQkJLyogaGVscG1zZyAqLworCSAg ICAgICBja2l0b2EoaW5kZWYpLAkJLyogZGVmYXVsdCAqLworCSAgICAgICAiIiwJCQkvKiBhZGR0 bCBzdHJpbmcgZGF0YSAqLworCSAgICAgICBuaW5wdXRzdywJCS8qIGFkZHRsIG51bWVyaWMgZGF0 YSAxOiB0Ymwgc2l6ZSAqLworCSAgICAgICA0LAkJCS8qIGFkZHRsIG51bWVyaWMgZGF0YSAyOiA0 ID0gY21zd2kgKi8KKwkgICAgICAgeHhzdHJpbmcsCQkvKiBQcm9jZXNzaW5nIGZ1bmN0aW9uICov CisJICAgICAgIGlucHV0c3csCQkJLyogS2V5d29yZCB0YWJsZSAqLworCSAgICAgICAmbnUJCQkv KiBQb2ludGVyIHRvIG5leHQgRkRCICovCisJICAgICAgICk7CisJY21mZGJpKCZudSwKKwkgICAg ICAgX0NNTlVNLAkJCS8qIE51bWJlciAqLworCSAgICAgICBtLAkJCS8qIEhlbHAgbWVzc2FnZSAq LworCSAgICAgICBja2l0b2EoaW5kZWYpLAkJLyogZGVmYXVsdCAqLworCSAgICAgICAiIiwJCQkv KiBOL0EgKi8KKwkgICAgICAgMTAsCQkJLyogUmFkaXggPSAxMCAqLworCSAgICAgICAwLAkJCS8q IE4vQSAqLworCSAgICAgICB4eHN0cmluZywJCS8qIFByb2Nlc3NpbmcgZnVuY3Rpb24gKi8KKwkg ICAgICAgTlVMTCwJCQkvKiBOL0EgKi8KKwkgICAgICAgJmZsCQkJLyogTmV4dCAqLworCSAgICAg ICApOworCWNtZmRiaSgmZmwsCQkJLyogVGltZSBvZiBkYXkgaGg6bW06c3MgKi8KKwkgICAgICAg X0NNRkxELAkJCS8qIGZjb2RlICovCisJICAgICAgICIiLAkJCS8qIGhscG1zZyAqLworCSAgICAg ICAiIiwKKwkgICAgICAgIiIsCQkJLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KKwkgICAgICAgMCwJ CQkvKiBhZGR0bCBudW1lcmljIGRhdGEgMSAqLworCSAgICAgICAwLAkJCS8qIGFkZHRsIG51bWVy aWMgZGF0YSAyICovCisJICAgICAgIHh4c3RyaW5nLAorCSAgICAgICBOVUxMLAorCSAgICAgICBO VUxMCisJICAgICAgICk7CisJZmMgPSAoY3ggPT0gWFhSRUkpID8gY21mZGIoJm51KSA6IGNtZmRi KCZzdyk7IC8qIFBhcnNlIHNvbWV0aGluZyAqLworCisJZm9yICh5ID0gMDsgeSA8IE1JTlBNQVg7 IHkrKykgewkvKiBJbml0aWFsaXplIHNlYXJjaCBzdHJpbmdzICovCisJICAgIG1wW3ldID0gMDsJ CQkvKiBBc3N1bWUgaXQncyBub3QgYSBwYXR0ZXJuICovCisJICAgIGlmICghbXBpbml0ZWQpIHsK KwkJbXNbeV0gPSBOVUxMOworCSAgICB9CisJICAgIGlmIChtc1t5XSkgeworCQlmcmVlKG1zW3ld KTsJCS8qIEZyZWUgb2xkIHN0cmluZ3MsIGlmIGFueSAqLworCQltc1t5XSA9IE5VTEw7CisJICAg IH0KKwl9CisJbXBpbml0ZWQgPSAxOworCXdoaWxlICghaGF2ZXRpbWUpIHsKKwkgICAgaWYgKGZj IDwgMCkgewkJLyogRXJyb3IgKi8KKwkJaWYgKGZjID09IC0zKSB7CisJCSAgICBwcmludGYoIj9T eW50YXggZXJyb3IgaW4gSU5QVVQtY2xhc3MgY29tbWFuZFxuIik7CisJCSAgICByZXR1cm4oLTkp OworCQl9IGVsc2UKKwkJICByZXR1cm4oZmMpOworCSAgICB9CisJICAgIHN3aXRjaCAoY21yZXN1 bHQuZmNvZGUpIHsKKwkgICAgICBjYXNlIF9DTUtFWToJCS8qIFN3aXRjaCAqLworCQljID0gY21n YnJrKCk7CisJCWlmICgoZ2V0dmFsID0gKGMgPT0gJzonIHx8IGMgPT0gJz0nKSkgJiYKKwkJICAg ICEoY21na3dmbGdzKCkgJiBDTV9BUkcpKSB7CisJCSAgICBwcmludGYoIj9UaGlzIHN3aXRjaCBk b2VzIG5vdCB0YWtlIGFuIGFyZ3VtZW50XG4iKTsKKwkJICAgIHJldHVybigtOSk7CisJCX0KKwkJ aWYgKGdldHZhbCAmJiBjbXJlc3VsdC5ucmVzdWx0ID09IElOUFNXX0NPVSkgeworCQkgICAgaWYg KCh5ID0gY21udW0oIk51bWJlciBvZiBieXRlcyB0byByZWFkIiwKKwkJCQkgICAiIiwxMCwmeCx4 eHN0cmluZykpIDwgMCkKKwkJICAgICAgcmV0dXJuKHkpOworCQkgICAgaW5jb3VudCA9IHg7CisJ CX0KKwkJZmxhZ3MgfD0gY21yZXN1bHQubnJlc3VsdDsKKwkJZmMgPSBjbWZkYigmc3cpOwkvKiBN YXliZSBwYXJzZSBtb3JlIHN3aXRjaGVzICovCisJCWNvbnRpbnVlOworCisJICAgICAgY2FzZSBf Q01OVU06CQkvKiBTZWNvbmRzIHRvIHRpbWUgb3V0ICovCisJCXggPSBjbXJlc3VsdC5ucmVzdWx0 OworI2lmZGVmIENLRkxPQVQKKwkJaWYgKGluc2NhbGUgIT0gMS4wKQkvKiBTY2FsZSAqLworCQkg IHggKj0gaW5zY2FsZTsJCQorI2VuZGlmCS8qIENLRkxPQVQgKi8KKwkJaGF2ZXRpbWUrKzsKKwkJ YnJlYWs7CisKKwkgICAgICBjYXNlIF9DTUZMRDoKKwkJenogPSB0b2Qyc2VjKGF0bWJ1Zik7CS8q IENvbnZlcnQgdG8gc2VjcyBzaW5jZSBtaWRuaWdodCAqLworCQlpZiAoenogPCAwTCkgeworCQkg ICAgcHJpbnRmKCI/TnVtYmVyLCBleHByZXNzaW9uLCBvciB0aW1lIG9mIGRheSByZXF1aXJlZFxu Iik7CisJCSAgICByZXR1cm4oLTkpOworCQl9IGVsc2UgeworCQkgICAgY2hhciBub3dbMzJdOwkv KiBDdXJyZW50IHRpbWUgKi8KKwkJICAgIGNoYXIgKnA7CisJCSAgICBsb25nIHRub3c7CisJCSAg ICBwID0gbm93OworCQkgICAgenRpbWUoJnApOworCQkgICAgdG5vdyA9IGF0b2wocCsxMSkgKiAz NjAwTCArIGF0b2wocCsxNCkgKiA2MEwgKyBhdG9sKHArMTcpOworCQkgICAgaWYgKHp6IDwgdG5v dykJLyogVXNlcidzIHRpbWUgYmVmb3JlIG5vdyAqLworCQkgICAgICB6eiArPSA4NjQwMEw7CS8q IFNvIG1ha2UgaXQgdG9tb3Jyb3cgKi8KKwkJICAgIHp6IC09IHRub3c7CQkvKiBTZWNvbmRzIGZy b20gbm93LiAqLworCQkgICAgaWYgKHp6ID4gLTFMKSB7CisJCQl4ID0geno7CisJCQlpZiAoenog IT0gKGxvbmcpIHgpIHsKKwkJCSAgICBwcmludGYoCisiU29ycnksIGFyaXRobWV0aWMgb3ZlcmZs b3cgLSBoaDptbTpzcyBub3QgdXNhYmxlIG9uIHRoaXMgcGxhdGZvcm0uXG4iCispOworCQkJICAg IHJldHVybigtOSk7CisJCQl9CisJCSAgICB9CisJCSAgICBoYXZldGltZSsrOworCQl9CisJCWJy ZWFrOworCSAgICAgIGRlZmF1bHQ6CQkKKwkJcHJpbnRmKCI/SW50ZXJuYWwgZXJyb3JcbiIpOwor CQlyZXR1cm4oLTkpOworCSAgICB9CisJfQorCS8qIE5vdyBwYXJzZSB0aGUgc2VhcmNoIHRleHQg Ki8KKworI2lmZGVmIENLX01JTlBVVAorCWlmIChjeCA9PSBYWE1JTlApIHsJCS8qIE1JTlBVVCAq LworCSAgICBpbnQgaSwgayA9IDAsIG4gPSAwOworCSAgICBzdHJ1Y3Qgc3RyaW5nYXJyYXkgKiBx OworCSAgICBrZWVwYWxsY2hhcnMgPSAxOworCSAgICB3aGlsZSAoayA8IE1JTlBNQVgpIHsKKwkJ aWYgKCh5ID0gY21mbGQoIlN0cmluZyBvciBwYXR0ZXJuIiwiIiwmcyx4eHN0cmluZykpIDwgMCkg eworCQkgICAgaWYgKHkgPT0gLTMpIHsKKwkJCWlmICgoeSA9IGNtY2ZtKCkpIDwgMCkKKwkJCSAg cmV0dXJuKHkpOworCQkJYnJlYWs7CisJCSAgICB9IGVsc2UgeworCQkJcmV0dXJuKHkpOworCQkg ICAgfQorCQl9CisJCWRlYnVnKEYxMTEsIk1JTlBVVCBmaWVsZCIscyxrKTsKKwkJaWYgKGlzam9p bikgeworCQkgICAgaWYgKChxID0gY2tzcGxpdCgxLDAscywiICIsKGNoYXIgKiljMWNoYXJzLDMs MCwwKSkpIHsKKwkJCWNoYXIgKiogYXAgPSBxLT5hX2hlYWQ7CisJCQluID0gcS0+YV9zaXplOwor CQkJZGVidWcoRjEwMSwibWlucHV0IGNrc3BsaXQgc2l6ZSIsIiIsbik7CisJCQlmb3IgKGkgPSAx OyBpIDw9IG4gJiYgayA8IE1JTlBNQVg7IGkrKykgeworCQkJICAgIGlmICghYXBbaV0pIC8qIEFk ZCBub24tZW1wdHkgZWxlbWVudHMgKi8KKwkJCSAgICAgIGNvbnRpbnVlOworCQkJICAgIGlmICgh KihhcFtpXSkpCisJCQkgICAgICBjb250aW51ZTsKKwkJCSAgICBtYWtlc3RyKCYobXNba10pLGFw W2ldKTsKKwkJCSAgICBkZWJ1ZyhGMTExLCJNSU5QVVQgSk9JTiIsbXNba10sayk7CisJCQkgICAg aysrOworCQkJfQorCQkgICAgfQorCQl9IGVsc2UgeworCQkgICAgaWYgKHMpIGlmICgqcykgewor CQkJbWFrZXN0cigmKG1zW2tdKSxicnN0cmlwKHMpKTsKKwkJCWlmIChpdHNhcGF0dGVybikgbXBb a10gPSAxOworCQkJZGVidWcoRjExMSwiTUlOUFVUIixtc1trXSxpdHNhcGF0dGVybik7CisJCQlr Kys7CisJCSAgICB9CisJCX0KKwkgICAgfQorCSAgICBrZWVwYWxsY2hhcnMgPSAwOworCX0gZWxz ZSB7CisjZW5kaWYgLyogQ0tfTUlOUFVUICovCisKKwkgICAgLyogSU5QVVQgb3IgUkVJTlBVVCAq LworCisJICAgIGlmIChmbGFncyAmIElOUFNXX0NPVSkgeworCQlpZiAoKHkgPSBjbWNmbSgpKSA8 IDApCisJCSAgcmV0dXJuKHkpOworCSAgICB9IGVsc2UgeworCQlpZiAoKHkgPSBjbXR4dCgiTWF0 ZXJpYWwgdG8gYmUgaW5wdXQiLCIiLCZzLHh4c3RyaW5nKSkgPCAwKQorCQkgIHJldHVybih5KTsK KwkgICAgfQorCSAgICBtcFswXSA9IGl0c2FwYXR0ZXJuID8gMSA6IDA7CisJICAgIG1ha2VzdHIo Jihtc1swXSksYnJzdHJpcChzKSk7CisJICAgIG1zWzFdID0gTlVMTDsKKworI2lmZGVmIENLX01J TlBVVAorCX0KKyNlbmRpZiAvKiBDS19NSU5QVVQgKi8KKworCWlmIChpbmNvdW50ID4gMCkJCS8q IE5vIHNlYXJjaGluZyBpZiAvQ09VTlQ6IGdpdmVuICovCisJICBtYWtlc3RyKCYobXNbMF0pLE5V TEwpOworCisJaWYgKGN4ID09IFhYSU5QIHx8IGN4ID09IFhYTUlOUCkgeyAvKiBOb3QgUkVJTlBV VC4uLiAqLworCSAgICBpX2FjdGl2ZSA9IDE7CisJICAgIC8qIEdvIHRyeSB0byBpbnB1dCB0aGUg c2VhcmNoIHN0cmluZyAqLworCSAgICBzdWNjZXNzID0gZG9pbnB1dCh4LG1zLG1wLGZsYWdzLGlu Y291bnQpOworCSAgICBpX2FjdGl2ZSA9IDA7CisJfSBlbHNlIHsJCQkvKiBSRUlOUFVUICovCisJ ICAgIHN1Y2Nlc3MgPSBkb3JlaW5wKHgsbXNbMF0saXRzYXBhdHRlcm4pOworCX0KKwlpZiAoaW50 aW1lW2NtZGx2bF0gJiYgIXN1Y2Nlc3MpIHsgLyogVElNRU9VVC1BQ1RJT04gPSBRVUlUPyAqLwor CSAgICBwb3BjbHZsKCk7CQkJLyogSWYgc28sIHBvcCBjb21tYW5kIGxldmVsLiAqLworCSAgICBp ZiAocGZsYWcgJiYgY21kbHZsID09IDApIHsKKwkJaWYgKGN4ID09IFhYSU5QKSAgcHJpbnRmKCI/ SU5QVVQgdGltZWQgb3V0XG4iKTsKKwkJaWYgKGN4ID09IFhYTUlOUCkgcHJpbnRmKCI/TUlOUFVU IHRpbWVkIG91dFxuIik7CisJCWlmIChjeCA9PSBYWFJFSSkgIHByaW50ZigiP1JFSU5QVVQgZmFp bGVkXG4iKTsKKwkgICAgfQorCX0KKwlyZXR1cm4oc3VjY2Vzcyk7CQkvKiBSZXR1cm4gZG8ocmUp aW5wdXQncyByZXR1cm4gY29kZSAqLworICAgIH0KKworI2VuZGlmIC8qIE5PU1BMICovCisKKyAg ICBpZiAoY3ggPT0gWFhMT0cpIHsJCQkvKiBMT0cgKi8KKwl4ID0gY21rZXkobG9ndGFiLG5sb2cs IldoYXQgdG8gbG9nIiwiIix4eHN0cmluZyk7CisJaWYgKHggPT0gLTMpIHsKKwkgICAgcHJpbnRm KCI/VHlwZSBvZiBsb2cgcmVxdWlyZWRcbiIpOworCSAgICByZXR1cm4oLTkpOworCX0KKwlpZiAo eCA8IDApIHJldHVybih4KTsKKwl4ID0gZG9sb2coeCk7CisJaWYgKHggPCAwKQorCSAgcmV0dXJu KHgpOworCWVsc2UKKwkgIHJldHVybihzdWNjZXNzID0geCk7CisgICAgfQorCisgICAgaWYgKGN4 ID09IFhYTE9HSU4pIHsJCS8qIChSRU1PVEUpIExPR0lOICovCisjaWZkZWYgTkVXRlRQCisJaWYg KChmdHBnZXQgPT0gMSkgfHwgKChmdHBnZXQgPT0gMikgJiYgZnRwaXNvcGVuKCkpKQorCSAgcmV0 dXJuKHN1Y2Nlc3MgPSBkb2Z0cHVzcigpKTsKKyNlbmRpZiAvKiBORVdGVFAgKi8KKyNpZmRlZiBJ S1NECisJaWYgKGluc2VydmVyKSB7CisJICAgIHByaW50ZigiP0FscmVhZHkgbG9nZ2VkIGluXG4i KTsKKwkgICAgcmV0dXJuKC05KTsKKwl9IGVsc2UKKyNlbmRpZiAvKiBJS1NEICovCisJeworI2lm ZGVmIE5PWEZFUgorCSAgICByZXR1cm4oLTIpOworI2Vsc2UKKwkgICAgcmV0dXJuKGRvcm10KFha TEdJKSk7CisjZW5kaWYgLyogTk9YRkVSICovCisJfQorICAgIH0KKyAgICBpZiAoY3ggPT0gWFhM T0dPVVQpIHsJCS8qIChSRU1PVEUpIExPR09VVCAqLworI2lmZGVmIE5FV0ZUUAorCWlmICgoZnRw Z2V0ID09IDEpIHx8ICgoZnRwZ2V0ID09IDIpICYmIGZ0cGlzb3BlbigpKSkKKwkgIHJldHVybihz dWNjZXNzID0gZG9mdHByZXMoKSk7CisjZW5kaWYgLyogTkVXRlRQICovCisKKyNpZmRlZiBJS1NE CisgICAgICAgIGlmIChpbnNlcnZlcikgeworCSAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApCisJ ICAgICAgcmV0dXJuKHgpOworCSAgICBkb2V4aXQoR09PRF9FWElULHhpdHN0YSk7CisJfSBlbHNl CisjZW5kaWYgLyogSUtTRCAqLworCWlmICghbG9jYWwgfHwgKG5ldHdvcmsgJiYgdHRjaGsoKSA8 IDApKSB7CisJICAgIHByaW50ZigiP05vIGNvbm5lY3Rpb24uXG4iKTsKKwkgICAgcmV0dXJuKC05 KTsKKwl9IGVsc2UgeworI2lmZGVmIE5PWEZFUgorCSAgICByZXR1cm4oLTIpOworI2Vsc2UKKwkg ICAgcmV0dXJuKGRvcm10KFhaTEdPKSk7CisjZW5kaWYgLyogTk9YRkVSICovCisJfQorICAgIH0K KworI2lmbmRlZiBOT1NDUklQVAorICAgIGlmIChjeCA9PSBYWExPR0kpIHsJCQkvKiBVVUNQLXN0 eWxlIHNjcmlwdCAqLworCWlmICgoeCA9IGNtdHh0KCJleHBlY3Qtc2VuZCBleHBlY3Qtc2VuZCAu Li4iLCIiLCZzLHh4c3RyaW5nKSkgPCAwKQorCSAgcmV0dXJuKHgpOworI2lmZGVmIENLX0FQQwor CWlmICgoYXBjYWN0aXZlID09IEFQQ19MT0NBTCkgfHwKKwkgICAgKChhcGNhY3RpdmUgPT0gQVBD X1JFTU9URSkgJiYgKCEoYXBjc3RhdHVzICYgQVBDX1VOQ0gpKSkpCisJICByZXR1cm4oc3VjY2Vz cyA9IDApOworI2VuZGlmIC8qIENLX0FQQyAqLworI2lmZGVmIFZNUworCWNvbnJlcygpOwkJCS8q IEZvciBDdHJsLUMgdG8gd29yay4uLiAqLworI2VuZGlmIC8qIFZNUyAqLworCXJldHVybihzdWNj ZXNzID0gZG9sb2dpbihzKSk7CS8qIFJldHVybiAxPWNvbXBsZXRlZCwgMD1mYWlsZWQgKi8KKyAg ICB9CisjZW5kaWYgLyogTk9TQ1JJUFQgKi8KKworI2lmbmRlZiBOT1hGRVIKKyNpZmRlZiBQSVBF U0VORAorICAgIGlmIChjeCA9PSBYWENSRUMpIHsJCQkvKiBDUkVDRUlWRSAqLworCWlmIChwcm90 b2NvbCAhPSBQUk9UT19LKSB7CisJICAgIHByaW50ZigiP1NvcnJ5LCBDUkVDRUlWRSB3b3JrcyBv bmx5IHdpdGggS2VybWl0IHByb3RvY29sXG4iKTsKKwkgICAgcmV0dXJuKC05KTsKKwl9IGVsc2UK KwkgIHJldHVybihkb3hnZXQoY3gpKTsKKyAgICB9CisgICAgaWYgKGN4ID09IFhYQ0dFVCkgewkJ CS8qIENHRVQgKi8KKwlyZXR1cm4oZG94Z2V0KGN4KSk7CisgICAgfQorI2VuZGlmIC8qIFBJUEVT RU5EICovCisKKyAgICBpZiAoY3ggPT0gWFhSRUMpCQkJLyogUkVDRUlWRSAqLworICAgICAgcmV0 dXJuKGRveGdldChjeCkpOworI2VuZGlmIC8qIE5PWEZFUiAqLworCisjaWZuZGVmIE5PWEZFUgor ICAgIGlmIChjeCA9PSBYWFJFTSkgewkJCS8qIFJFTU9URSAqLworI2lmZGVmIE5FV0ZUUAorCWlm ICgoZnRwZ2V0ID09IDEpIHx8ICgoZnRwZ2V0ID09IDIpICYmIGZ0cGlzb3BlbigpKSkKKwkgIHJl dHVybihkb2Z0cHJtdCgwLDApKTsKKyNlbmRpZiAvKiBORVdGVFAgKi8KKyNpZmRlZiBDS19YWVoK KwlpZiAocHJvdG9jb2wgIT0gUFJPVE9fSykgeworCSAgICBwcmludGYoIlNvcnJ5LCBSRU1PVEUg Y29tbWFuZHMgb25seSB3b3JrIHdpdGggS2VybWl0IHByb3RvY29sXG4iKTsKKwkgICAgcmV0dXJu KC05KTsKKwl9CisjZW5kaWYgLyogQ0tfWFlaICovCisJeCA9IGNta2V5KHJlbWNtZCxucm10LCJS ZW1vdGUgS2VybWl0IHNlcnZlciBjb21tYW5kIiwiIix4eHN0cmluZyk7CisJaWYgKHggPT0gLTMp IHsKKwkgICAgcHJpbnRmKCI/WW91IG11c3Qgc3BlY2lmeSBhIGNvbW1hbmQgZm9yIHRoZSByZW1v dGUgc2VydmVyXG4iKTsKKwkgICAgcmV0dXJuKC05KTsKKwl9CisJcmV0dXJuKGRvcm10KHgpKTsK KyAgICB9CisjZW5kaWYgLyogTk9YRkVSICovCisKKyNpZm5kZWYgTk9SRU5BTUUKKyNpZm5kZWYg Tk9GUklMTFMKKyAgICBpZiAoY3ggPT0gWFhSRU4gfHwgY3ggPT0gWFhMUkVOKSB7CS8qIFJFTkFN RSAqLworI2lmZGVmIExPQ1VTCisJaWYgKCFsb2N1cyAmJiBjeCAhPSBYWExSRU4pIHsKKyNpZmRl ZiBOT1hGRVIKKwkgICAgcmV0dXJuKC0yKTsKKyNlbHNlCisJICAgIHJldHVybihkb3JtdChYWlJF TikpOworI2VuZGlmIC8qIE5PWEZFUiAqLworICAgICAgICB9CisjZW5kaWYgLyogTE9DVVMgKi8K KyNpZmRlZiBJS1NECisJaWYgKGluc2VydmVyICYmICghRU5BQkxFRChlbl9yZW4pCisjaWZkZWYg Q0tfTE9HSU4KKwkJCSB8fCBpc2d1ZXN0CisjZW5kaWYgLyogQ0tfTE9HSU4gKi8KKwkJCSApKSB7 CisJICAgIHByaW50ZigiP1NvcnJ5LCByZW5hbWluZyBvZiBmaWxlcyBpcyBkaXNhYmxlZFxuIik7 CisJICAgIHJldHVybigtOSk7CisJfQorI2VuZGlmIC8qIElLU0QgKi8KKyNpZmRlZiBDS19BUEMK KwlpZiAoKGFwY2FjdGl2ZSA9PSBBUENfTE9DQUwpIHx8CisJICAgICgoYXBjYWN0aXZlID09IEFQ Q19SRU1PVEUpICYmICghKGFwY3N0YXR1cyAmIEFQQ19VTkNIKSkpKQorCSAgcmV0dXJuKHN1Y2Nl c3MgPSAwKTsKKyNlbmRpZiAvKiBDS19BUEMgKi8KKwlyZXR1cm4oZG9yZW5hbSgpKTsKKyAgICB9 CisjZW5kaWYgLyogTk9GUklMTFMgKi8KKyNlbmRpZiAvKiBOT1JFTkFNRSAqLworCisgICAgaWYg KGN4ID09IFhYRUlHSFQpIHsJCS8qIEVJR0hUQklUICovCisJZXh0ZXJuIGludCBwYXJpdHksIGNt YXNrLCBjbWRtc2s7CisJaWYgKCh4ID0gY21jZm0oKSkgPCAwKQorCSAgcmV0dXJuKHgpOworCXBh cml0eSA9IDA7CisJY21hc2sgPSAweGZmOworCWNtZG1zayA9IDB4ZmY7CisJcmV0dXJuKHN1Y2Nl c3MgPSAxKTsKKyAgICB9CisKKyNpZm5kZWYgTk9YRkVSCisvKiBTRU5ELCBDU0VORCwgTU9WRSwg TUFJTCwgYW5kIFJFU0VORCB1c2UgdGhlIG5ldyBjb21tb24gY29kZSAqLworCisgICAgaWYgKGN4 ID09IFhYU0VOCQkJLyogU0VORCAqLworI2lmZGVmIFBJUEVTRU5ECisJfHwgY3ggPT0gWFhDU0VO CQkJLyogQ1NFTkQgKi8KKyNlbmRpZiAvKiBQSVBFU0VORCAqLworCXx8IGN4ID09IFhYTU9WRQkJ CS8qIE1PVkUgKi8KKwl8fCBjeCA9PSBYWE1BSQkJCS8qIE1BSUwgKi8KKyNpZmRlZiBDS19SRVNF TkQKKwl8fCBjeCA9PSBYWFJTRU4JCQkvKiBSRVNFTkQgKi8KKyNlbmRpZiAvKiBDS19SRVNFTkQg Ki8KKwkpIHsKKyNpZmRlZiBJS1NECisJaWYgKGluc2VydmVyICYmICFFTkFCTEVEKGVuX2dldCkp IHsKKwkgICAgcHJpbnRmKCI/U29ycnksIHNlbmRpbmcgZmlsZXMgaXMgZGlzYWJsZWRcbiIpOwor CSAgICByZXR1cm4oLTkpOworCX0KKyNlbmRpZiAvKiBJS1NEICovCisJcmV0dXJuKGRveHNlbmQo Y3gpKTsKKyAgICB9CisKKy8qIFBTRU5ELCBBREQsIGFuZCBSRU1PVkUgdXNlIHNwZWNpYWwgcGFy c2luZyAqLworCisjaWZkZWYgQUREQ01ECisgICAgLyogQUREIGFuZCBSRU1PVkUgKi8KKyAgICBp ZiAoY3ggPT0gWFhBREQgfHwgY3ggPT0gWFhSRU1WKSB7CisJY2hhciAqIG07CisJbSA9IChjeCA9 PSBYWEFERCkgPyAiQWRkIHRvIHdoaWNoIGxpc3Q/IiA6ICJSZW1vdmUgZnJvbSB3aGljaCBsaXN0 PyI7CisJeCA9IGNta2V5KGFkZHRhYixuYWRkdGFiLG0sIiIseHhzdHJpbmcpOworCWlmICh4IDwg MCkKKwkgIHJldHVybih4KTsKKyNpZm5kZWYgTk9NU0VORAorCWlmICh4ID09IEFERF9TTkQpCisJ ICByZXR1cm4oYWRkc2VuZChjeCkpOworCWVsc2UKKyNlbmRpZiAvKiBOT01TRU5EICovCisJICBy ZXR1cm4oZG9hZGQoY3gseCkpOworICAgIH0KKyNlbmRpZiAvKiBBRERDTUQgKi8KKworI2lmZGVm IENLX1JFU0VORAorICAgIGlmIChjeCA9PSBYWFBTRU4pIHsJCQkvKiBQU0VORCAqLworCWludCBz ZWVrdG8gPSAwOwkJCS8qIEZJWCBUSElTICovCisKKwljbWFyZyA9IGNtYXJnMiA9ICIiOworCXgg PSBjbWlmaSgiRmlsZSB0byBwYXJ0aWFsbHkgc2VuZCIsICIiLCAmcywgJnksIHh4c3RyaW5nKTsK KwlpZiAoeCA8IDApIHsKKwkgICAgaWYgKHggPT0gLTMpIHsKKwkJcHJpbnRmKCI/QSBmaWxlIHNw ZWNpZmljYXRpb24gaXMgcmVxdWlyZWRcbiIpOworCQlyZXR1cm4oLTkpOworCSAgICB9IGVsc2Ug cmV0dXJuKHgpOworCX0KKwluZmlscyA9IC0xOwkJCS8qIEZpbGVzIGNvbWUgZnJvbSBpbnRlcm5h bCBsaXN0LiAqLworI2lmbmRlZiBOT01TRU5ECisgICAgICAgIGFkZGxpc3QgPSAwOwkJCS8qIERv bid0IHVzZSBTRU5ELUxJU1QuICovCisgICAgICAgIGZpbGVuZXh0ID0gTlVMTDsKKyNlbmRpZiAv KiBOT01TRU5EICovCisJY2tzdHJuY3B5KGxpbmUscyxMSU5CVUZTSVopOwkvKiBTYXZlIGNvcHkg b2Ygc3RyaW5nIGp1c3QgcGFyc2VkLiAqLworCWRlYnVnKEYxMTAsIlBTRU5EIGxpbmUiLGxpbmUs MCk7CisJaWYgKHkgIT0gMCkgeworCSAgICBwcmludGYoIj9Tb3JyeSwgd2lsZGNhcmRzIG5vdCBw ZXJtaXR0ZWQgaW4gdGhpcyBjb21tYW5kXG4iKTsKKwkgICAgcmV0dXJuKC05KTsKKwl9CisJaWYg KHNpemVvZihpbnQpIDwgNCkgeworCSAgICBwcmludGYoIj9Tb3JyeSwgdGhpcyBjb21tYW5kIG5l ZWRzIDMyLWJpdCBpbnRlZ2Vyc1xuIik7CisJICAgIHJldHVybigtOSk7CisJfQorCXggPSBjbW51 bSgic3RhcnRpbmcgcG9zaXRpb24gKGJ5dGUgbnVtYmVyKSIsCisJCSAgIiIsMTAsJnNlZWt0byx4 eHN0cmluZyk7CisJaWYgKHggPCAwKQorCSAgcmV0dXJuKHgpOworCXpmbnFmcChzLGZzcGVjbGVu LGZzcGVjKTsJLyogR2V0IGZ1bGwgcGF0aCAqLworCWlmICgoeCA9IGNtdHh0KCJOYW1lIHRvIHNl bmQgaXQgd2l0aCIsIiIsJnMsTlVMTCkpIDwgMCkKKwkgIHJldHVybih4KTsKKwlja3N0cm5jcHko dG1wYnVmLHMsVE1QQlVGU0laKTsKKworI2lmZGVmIElLU0QKKwlpZiAoaW5zZXJ2ZXIgJiYgIUVO QUJMRUQoZW5fZ2V0KSkgeworCSAgICBwcmludGYoIj9Tb3JyeSwgc2VuZGluZyBmaWxlcyBpcyBk aXNhYmxlZFxuIik7CisJICAgIHJldHVybigtOSk7CisJfQorI2VuZGlmIC8qIElLU0QgKi8KKyNp ZmRlZiBQSVBFU0VORAorCWlmIChzbmRmaWx0ZXIpIHsKKwkgICAgcHJpbnRmKCI/U29ycnksIG5v IFBTRU5EIHdoaWxlIFNFTkQgRklMVEVSIHNlbGVjdGVkXG4iKTsKKwkgICAgcmV0dXJuKC05KTsK Kwl9CisjZW5kaWYgLyogUElQRVNFTkQgKi8KKyNpZmRlZiBDS19YWVoKKwlpZiAoKHByb3RvY29s ID09IFBST1RPX1ggfHwgcHJvdG9jb2wgPT0gUFJPVE9fWEMpKSB7CisJICAgIHByaW50ZigiU29y cnksIFBTRU5EIHdvcmtzIG9ubHkgd2l0aCBLZXJtaXQgcHJvdG9jb2xcbiIpOworCSAgICByZXR1 cm4oLTkpOworCX0KKyNlbmRpZiAvKiBDS19YWVogKi8KKworCWNtYXJnMiA9IGJyc3RyaXAodG1w YnVmKTsJLyogU3RyaXAgYnJhY2VzICovCisJY21hcmcgPSBsaW5lOwkJCS8qIEZpbGUgdG8gc2Vu ZCAqLworCWRlYnVnKEYxMTAsIlBTRU5EIGZpbGVuYW1lIixjbWFyZywwKTsKKwlkZWJ1ZyhGMTEw LCJQU0VORCBhcy1uYW1lIixjbWFyZzIsMCk7CisJc2VuZHN0YXJ0ID0gc2Vla3RvOworCXNzdGF0 ZSA9ICdzJzsJCQkvKiBTZXQgc3RhcnQgc3RhdGUgdG8gU0VORCAqLworI2lmbmRlZiBOT01TRU5E CisJYWRkbGlzdCA9IDA7CisJZmlsZW5leHQgPSBOVUxMOworI2VuZGlmIC8qIE5PTVNFTkQgKi8K KwlzZW5kbW9kZSA9IFNNX1BTRU5EOworI2lmZGVmIE1BQworCXdoYXQgPSBXX1NFTkQ7CisJc2Ny Y3JlYXRlKCk7CisjZW5kaWYgLyogTUFDICovCisJaWYgKGxvY2FsKSB7CQkJLyogSWYgaW4gbG9j YWwgbW9kZSwgKi8KKwkgICAgZGlzcGxhID0gMTsJCQkvKiBlbmFibGUgZmlsZSB0cmFuc2ZlciBk aXNwbGF5ICovCisJfQorCXJldHVybigwKTsKKyAgICB9CisjZW5kaWYgLyogQ0tfUkVTRU5EICov CisjZW5kaWYgLyogTk9YRkVSICovCisKKyNpZm5kZWYgTk9YRkVSCisjaWZuZGVmIE5PTVNFTkQK KyAgICBpZiAoY3ggPT0gWFhNU0UgfHwgY3ggPT0gWFhNTU9WRSkgeworI2lmZGVmIE5FV0ZUUAor CWlmICgoZnRwZ2V0ID09IDEpIHx8ICgoZnRwZ2V0ID09IDIpICYmIGZ0cGlzb3BlbigpKSkKKwkg IHJldHVybihkb2Z0cHB1dChjeCwwKSk7CisjZW5kaWYgLyogTkVXRlRQICovCisjaWZkZWYgQ0tf WFlaCisJaWYgKHByb3RvY29sID09IFBST1RPX1ggfHwgcHJvdG9jb2wgPT0gUFJPVE9fWEMpIHsK KwkgICAgcHJpbnRmKAorIlNvcnJ5LCB5b3UgY2FuIG9ubHkgc2VuZCBvbmUgZmlsZSBhdCBhIHRp bWUgd2l0aCBYTU9ERU0gcHJvdG9jb2xcbiIKKwkJICAgKTsKKwkgICAgcmV0dXJuKC05KTsKKwl9 CisjZW5kaWYgLyogQ0tfWFlaICovCisgICAgICAgIHJldHVybihkb3hzZW5kKGN4KSk7CisgICAg fQorCisjaWZkZWYgQ09NTUVOVAkJCQkvKiAobW92ZWQgdG8gZG94c2VuZCkgKi8KKyAgICBpZiAo Y3ggPT0gWFhNU0UgfHwgY3ggPT0gWFhNTU9WRSkgewkvKiBNU0VORCBhbmQgTU1PVkUgY29tbWFu ZHMgKi8KKwluZmlscyA9IDA7CQkJLyogTGlrZSBnZXR0aW5nIGEgbGlzdCBvZiAqLworCWxwID0g bGluZTsJCQkvKiBmaWxlcyBvbiB0aGUgY29tbWFuZCBsaW5lICovCisJYWRkbGlzdCA9IDA7CQkJ LyogRG8gbm90IHVzZSBTRU5ELUxJU1QgKi8KKwlmaWxlbmV4dCA9IE5VTEw7CQkvKiBEaXR0byAh ICovCisKKwl3aGlsZSAoMSkgeworCSAgICBjaGFyICpwOworCSAgICBpZiAoKHggPSBjbWlmaSgi TmFtZXMgb2YgZmlsZXMgdG8gc2VuZCwgc2VwYXJhdGVkIGJ5IHNwYWNlcyIsIiIsCisJCQkgICAm cywmeSx4eHN0cmluZykpIDwgMCkgeworCQlpZiAoeCA9PSAtMykgeworCQkgICAgaWYgKG5maWxz IDw9IDApIHsKKwkJCXByaW50ZigiP0EgZmlsZSBzcGVjaWZpY2F0aW9uIGlzIHJlcXVpcmVkXG4i KTsKKwkJCXJldHVybigtOSk7CisJCSAgICB9IGVsc2UgYnJlYWs7CisJCX0KKwkJcmV0dXJuKHgp OworCSAgICB9CisJICAgIG1zZmlsZXNbbmZpbHMrK10gPSBscDsJLyogR290IG9uZSwgY291bnQg aXQsIHBvaW50IHRvIGl0LCAqLworCSAgICBwID0gbHA7CQkJLyogcmVtZW1iZXIgcG9pbnRlciwg Ki8KKwkgICAgd2hpbGUgKCpscCsrID0gKnMrKykJLyogYW5kIGNvcHkgaXQgaW50byBidWZmZXIg Ki8KKwkgICAgICBpZiAobHAgPiAobGluZSArIExJTkJVRlNJWikpIHsgLyogQXZvaWQgbWVtb3J5 IGxlYWsgKi8KKwkJICBwcmludGYoIj9NU0VORCBsaXN0IHRvbyBsb25nXG4iKTsKKwkJICBsaW5l WzBdID0gTlVMOworCQkgIHJldHVybigtOSk7CisJICAgICAgfQorCSAgICBkZWJ1ZyhGMTExLCJt c2ZpbGVzIixtc2ZpbGVzW25maWxzLTFdLG5maWxzLTEpOworCSAgICBpZiAobmZpbHMgPT0gMSkg KmZzcGVjID0gTlVMOyAvKiBUYWtlIGNhcmUgb2YgXHYoZmlsZXNwZWMpICovCisjaWZkZWYgWkZO UUZQCisJICAgIHpmbnFmcChwLFRNUEJVRlNJWix0bXBidWYpOworCSAgICBwID0gdG1wYnVmOwor I2VuZGlmIC8qIFpGTlFGUCAqLworCSAgICBpZiAoKChpbnQpc3RybGVuKGZzcGVjKSArIChpbnQp c3RybGVuKHApICsgMSkgPCBmc3BlY2xlbikgeworCQlzdHJjYXQoZnNwZWMscCk7CS8qIHNhZmUg Ki8KKwkJc3RyY2F0KGZzcGVjLCIgIik7CS8qIHNhZmUgKi8KKwkgICAgfSBlbHNlIHByaW50Zigi V0FSTklORyAtIFxcdihmaWxlc3BlYykgYnVmZmVyIG92ZXJmbG93XG4iKTsKKwl9CisJY21saXN0 ID0gbXNmaWxlczsJCS8qIFBvaW50IGNtbGlzdCB0byBwb2ludGVyIGFycmF5ICovCisJY21hcmcy ID0gIiI7CQkJLyogTm8gaW50ZXJuYWwgZXhwYW5zaW9uIGxpc3QgKHlldCkgKi8KKwlzbmRzcmMg PSBuZmlsczsJCQkvKiBGaWxlbmFtZXMgY29tZSBmcm9tIGNtbGlzdCAqLworCXNlbmRtb2RlID0g U01fTVNFTkQ7CQkvKiBSZW1lbWJlciB0aGlzIGtpbmQgb2YgU0VORGluZyAqLworCXNzdGF0ZSA9 ICdzJzsJCQkvKiBTZXQgc3RhcnQgc3RhdGUgZm9yIFNFTkQgKi8KKwlpZiAoY3ggPT0gWFhNTU9W RSkJCS8qIElmIE1NT1ZFJ2luZywgKi8KKwkgIG1vdmluZyA9IDE7CQkJLyogIHNldCB0aGlzIGZs YWcuICovCisjaWZkZWYgTUFDCisJd2hhdCA9IFdfU0VORDsKKwlzY3JjcmVhdGUoKTsKKyNlbmRp ZiAvKiBNQUMgKi8KKwlpZiAobG9jYWwpIHsJCQkvKiBJZiBpbiBsb2NhbCBtb2RlLCAqLworCSAg ICBkaXNwbGEgPSAxOwkJCS8qIHR1cm4gb24gZmlsZSB0cmFuc2ZlciBkaXNwbGF5ICovCisJICAg IHR0Zmx1aSgpOwkJCS8qIGFuZCBmbHVzaCB0dHkgaW5wdXQgYnVmZmVyLiAqLworCX0KKwlyZXR1 cm4oMCk7CisgICAgfQorI2VuZGlmIC8qIENPTU1FTlQgKi8KKyNlbmRpZiAvKiBOT01TRU5EICov CisjZW5kaWYgLyogTk9YRkVSICovCisKKyNpZm5kZWYgTk9TRVJWRVIKKyAgICBpZiAoY3ggPT0g WFhTRVIpIHsJCQkvKiBTRVJWRVIgKi8KKyNpZmRlZiBDS19YWVoKKwlpZiAocHJvdG9jb2wgIT0g UFJPVE9fSykgeworCSAgICBwcmludGYoIlNvcnJ5LCBTRVJWRVIgb25seSB3b3JrcyB3aXRoIEtl cm1pdCBwcm90b2NvbFxuIik7CisJICAgIHJldHVybigtOSk7CisJfQorI2VuZGlmIC8qIENLX1hZ WiAqLworI2lmZGVmIENPTU1FTlQKKy8qCisgIFBhcnNlIGZvciB0aW1lIGxpbWl0LCBidXQgc2lu Y2Ugd2UgZG9uJ3QgdXNlIGl0IHlldCwKKyAgdGhlIHBhcnNpbmcgaXMgY29tbWVudGVkIG91dC4K KyovCisJeF9pZm51bSA9IDE7CQkJLyogVHVybiBvZmYgaW50ZXJuYWwgY29tcGxhaW50cyAqLwor CXkgPSBjbW51bSgib3B0aW9uYWwgdGltZSBsaW1pdCwgc2Vjb25kcywgb3IgdGltZSBvZiBkYXkg YXMgaGg6bW06c3MiLAorCQkgICIwIiwgMTAsICZ4LCB4eHN0cmluZworCQkgICk7CisJeF9pZm51 bSA9IDA7CisJaWYgKHkgPCAwKSB7CisJICAgIGlmICh5ID09IC0yKSB7CQkvKiBJbnZhbGlkIG51 bWJlciBvciBleHByZXNzaW9uICovCisJCXp6ID0gdG9kMnNlYyhhdG1idWYpOwkvKiBDb252ZXJ0 IHRvIHNlY3Mgc2luY2UgbWlkbmlnaHQgKi8KKwkJaWYgKHp6IDwgMEwpIHsKKwkJICAgIHByaW50 ZigiP051bWJlciwgZXhwcmVzc2lvbiwgb3IgdGltZSBvZiBkYXkgcmVxdWlyZWRcbiIpOworCQkg ICAgcmV0dXJuKC05KTsKKwkJfSBlbHNlIHsKKwkJICAgIGNoYXIgbm93WzMyXTsJLyogQ3VycmVu dCB0aW1lICovCisJCSAgICBjaGFyICpwOworCQkgICAgbG9uZyB0bm93OworCQkgICAgcCA9IG5v dzsKKwkJICAgIHp0aW1lKCZwKTsKKwkJICAgIHRub3cgPSBhdG9sKHArMTEpICogMzYwMEwgKyBh dG9sKHArMTQpICogNjBMICsgYXRvbChwKzE3KTsKKwkJICAgIGlmICh6eiA8IHRub3cpCS8qIFVz ZXIncyB0aW1lIGJlZm9yZSBub3cgKi8KKwkJICAgICAgenogKz0gODY0MDBMOwkvKiBTbyBtYWtl IGl0IHRvbW9ycm93ICovCisJCSAgICB6eiAtPSB0bm93OwkJLyogU2Vjb25kcyBmcm9tIG5vdy4g Ki8KKwkJfQorCSAgICB9IGVsc2UKKwkgICAgICByZXR1cm4oeSk7CisJfQorCWlmICh6eiA+IC0x TCkgeworCSAgICB4ID0geno7CisJICAgIGlmICh6eiAhPSAobG9uZykgeCkgeworCQlwcmludGYo CisiU29ycnksIGFyaXRobWV0aWMgb3ZlcmZsb3cgLSBoaDptbTpzcyBub3QgdXNhYmxlIG9uIHRo aXMgcGxhdGZvcm0uXG4iCisJCSAgICAgICApOworCQlyZXR1cm4oLTkpOworCSAgICB9CisJfQor CWlmICh4IDwgMCkKKwkgIHggPSAwOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKworCWlmICgoeCA9 IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOworCXNzdGF0ZSA9ICd4JzsKKyNpZmRlZiBNQUMKKwl3 aGF0ID0gV19SRUNWOworCXNjcmNyZWF0ZSgpOworI2VuZGlmIC8qIE1BQyAqLworCWlmIChsb2Nh bCkgZGlzcGxhID0gMTsKKyNpZmRlZiBBTUlHQQorCXJlcW9mZigpOwkJCS8qIE5vIERPUyByZXF1 ZXN0b3JzIHdoaWxlIHNlcnZlciAqLworI2VuZGlmIC8qIEFNSUdBICovCisJcmV0dXJuKDApOwor ICAgIH0KKyNlbmRpZiAvKiBOT1NFUlZFUiAqLworCisgICAgaWYgKGN4ID09IFhYU0FWRSkgewkJ CS8qIFNBVkUgY29tbWFuZCAqLworCXggPSBjbWtleShzYXZ0YWIsbnNhdiwib3B0aW9uIiwia2V5 bWFwIix4eHN0cmluZyk7CisJaWYgKHggPT0gLTMpIHsKKwkgICAgcHJpbnRmKCI/WW91IG11c3Qg c3BlY2lmeSBhbiBvcHRpb24gdG8gc2F2ZVxuIik7CisJICAgIHJldHVybigtOSk7CisJfQorCWlm ICh4IDwgMCkgcmV0dXJuKHgpOworCS8qIGhhdmUgdG8gc2V0IHN1Y2Nlc3Mgc2VwYXJhdGVseSBm b3IgZWFjaCBpdGVtIGluIGRvcHJtKCkuLi4gKi8KKwkvKiBhY3R1YWxseSBub3QgcmVhbGx5LCBj b3VsZCBoYXZlIGp1c3QgaGFkIGRvcHJtIHJldHVybiAwIG9yIDEgKi8KKwkvKiBhbmQgc2V0IHN1 Y2Nlc3MgaGVyZS4uLiAqLworCXkgPSBkb3NhdmUoeCk7CisJaWYgKHkgPT0gLTMpIHsKKwkgICAg cHJpbnRmKCI/TW9yZSBmaWVsZHMgcmVxdWlyZWRcbiIpOworCSAgICByZXR1cm4oLTkpOworCX0g ZWxzZSByZXR1cm4oeSk7CisgICAgfQorCisgICAgaWYgKGN4ID09IFhYU0VUKSB7CQkJLyogU0VU IGNvbW1hbmQgKi8KKwl4ID0gY21rZXkocHJtdGFiLG5wcm0sIlBhcmFtZXRlciIsIiIseHhzdHJp bmcpOworCWlmICh4ID09IC0zKSB7CisJICAgIHByaW50ZigiP1lvdSBtdXN0IHNwZWNpZnkgYSBw YXJhbWV0ZXIgdG8gc2V0XG4iKTsKKwkgICAgcmV0dXJuKC05KTsKKwl9CisJaWYgKHggPCAwKSBy ZXR1cm4oeCk7CisJLyogaGF2ZSB0byBzZXQgc3VjY2VzcyBzZXBhcmF0ZWx5IGZvciBlYWNoIGl0 ZW0gaW4gZG9wcm0oKS4uLiAqLworCS8qIGFjdHVhbGx5IG5vdCByZWFsbHksIGNvdWxkIGhhdmUg anVzdCBoYWQgZG9wcm0gcmV0dXJuIDAgb3IgMSAqLworCS8qIGFuZCBzZXQgc3VjY2VzcyBoZXJl Li4uICovCisJeSA9IGRvcHJtKHgsMCk7CisJaWYgKHkgPT0gLTMpIHsKKwkgICAgcHJpbnRmKCI/ TW9yZSBmaWVsZHMgcmVxdWlyZWRcbiIpOworCSAgICByZXR1cm4oLTkpOworCX0gZWxzZSByZXR1 cm4oeSk7CisgICAgfQorCisjaWZuZGVmIE5PUFVTSAorICAgIGlmIChjeCA9PSBYWFNIRQkJCS8q IFNIRUxMIChzeXN0ZW0pIGNvbW1hbmQgKi8KKwl8fCBjeCA9PSBYWEVYRUMJCQkvKiBleGVjKCkg Ki8KKwkpIHsKKwlpbnQgcnggPSAwOworCWNoYXIgKiBwID0gTlVMTDsKKwlpbnQgaSAvKiAsbiAq LyA7CisjaWZkZWYgVU5JWE9ST1NLCisJY2hhciAqIGFyZ3NbMjU2XTsKKyNlbmRpZiAvKiBVTklY T1JPU0sgKi8KKworI2lmZGVmIElLU0QKKwlpZiAoaW5zZXJ2ZXIgJiYgKG5vcHVzaCB8fCAhRU5B QkxFRChlbl9ob3MpKSkgeworCSAgICBwcmludGYoIj9Tb3JyeSwgaG9zdCBjb21tYW5kIGFjY2Vz cyBpcyBkaXNhYmxlZFxuIik7CisJICAgIHJldHVybigtOSk7CisJfQorI2VuZGlmIC8qIElLU0Qg Ki8KKworI2lmZGVmIENLRVhFQworCWlmIChjeCA9PSBYWEVYRUMpIHsJCS8qIEVYRUMgKG92ZXJs YXkgb3Vyc2VsdmVzKSAqLworCSAgICBzdHJ1Y3QgRkRCIHN3LCBmbDsKKwkgICAgY21mZGJpKCZz dywJCQkvKiBGaXJzdCBGREIgLSBjb21tYW5kIHN3aXRjaGVzICovCisJCSAgIF9DTUtFWSwJCS8q IGZjb2RlICovCisJCSAgICJDb21tYW5kIHRvIG92ZXJsYXkgQy1LZXJtaXRcbiBvciBzd2l0Y2gi LCAvKiBobHBtc2cgKi8KKwkJICAgIiIsCQkJLyogZGVmYXVsdCAqLworCQkgICAiIiwJCQkvKiBh ZGR0bCBzdHJpbmcgZGF0YSAqLworCQkgICAxLAkJCS8qIGFkZHRsIG51bWVyaWMgZGF0YSAxOiB0 Ymwgc2l6ZSAqLworCQkgICA0LAkJCS8qIGFkZHRsIG51bWVyaWMgZGF0YSAyOiA0ID0gY21zd2kg Ki8KKwkJICAgeHhzdHJpbmcsCQkvKiBQcm9jZXNzaW5nIGZ1bmN0aW9uICovCisJCSAgIHJlZGly c3csCQkvKiBLZXl3b3JkIHRhYmxlICovCisJCSAgICZmbAkJCS8qIFBvaW50ZXIgdG8gbmV4dCBG REIgKi8KKwkJICAgKTsKKwkgICAgY21mZGJpKCZmbCwJCQkvKiAybmQgRkRCIC0gY29tbWFuZCB0 byBleGVjICovCisJCSAgIF9DTUZMRCwJCS8qIGZjb2RlICovCisJCSAgICJDb21tYW5kIHRvIG92 ZXJsYXkgQy1LZXJtaXQiLCAvKiBobHBtc2cgKi8KKwkJICAgIiIsCQkJLyogZGVmYXVsdCAqLwor CQkgICAiIiwJCQkvKiBhZGR0bCBzdHJpbmcgZGF0YSAqLworCQkgICAwLAkJCS8qIGFkZHRsIG51 bWVyaWMgZGF0YSAxICovCisJCSAgIDAsCQkJLyogYWRkdGwgbnVtZXJpYyBkYXRhIDIgKi8KKwkJ ICAgeHhzdHJpbmcsCisJCSAgIE5VTEwsCisJCSAgIE5VTEwJCQkvKiBObyBtb3JlIGFmdGVyIHRo aXMgKi8KKwkJICAgKTsKKwkgICAgd2hpbGUgKDEpIHsKKwkJeCA9IGNtZmRiKCZzdyk7CQkvKiBQ YXJzZSBzb21ldGhpbmcgKi8KKwkJZGVidWcoRjEwMSwiZXhlYyBjbWZkYiIsIiIseCk7CisJCWlm ICh4IDwgMCkKKwkJICByZXR1cm4oeCk7CisJCS8qIEdlbmVyYWxpemUgdGhpcyBpZiB3ZSBhZGQg bW9yZSBzd2l0Y2hlcyAqLworCQlpZiAoY21yZXN1bHQuZmNvZGUgPT0gX0NNS0VZKSB7CisJCSAg ICByeCA9IDE7CisJCSAgICBjb250aW51ZTsKKwkJfQorCQlpZiAoY21yZXN1bHQuZmNvZGUgPT0g X0NNRkxEKQorCQkgIGJyZWFrOworCQlyZXR1cm4oLTIpOworCSAgICB9CisJICAgIGNrc3RybmNw eSh0bXBidWYsY21yZXN1bHQuc3Jlc3VsdCxUTVBCVUZTSVopOworCSAgICBpZiAoIXRtcGJ1Zlsw XSkgeworCQlwcmludGYoIj9Db21tYW5kIHJlcXVpcmVkXG4iKTsKKwkJcmV0dXJuKC05KTsKKwkg ICAgfQorCSAgICBwID0gYnJzdHJpcCh0bXBidWYpOworCSAgICBhcmdzWzBdID0gTlVMTDsJCS8q IFNldCBhcmd2WzBdIHRvIGl0ICovCisJICAgIG1ha2VzdHIoJmFyZ3NbMF0scCk7CisJICAgIGZv ciAoaSA9IDE7IGkgPCAyNTU7IGkrKykgewkvKiBHZXQgYXJndW1lbnRzIGZvciBjb21tYW5kICov CisJCWlmICgoeCA9IGNtZmxkKCJBcmd1bWVudCIsIiIsJnMseHhzdHJpbmcpKSA8IDApIHsKKwkJ ICAgIGlmICh4ID09IC0zKSB7CisJCQlpZiAoKHggPSBjbWNmbSgpKSA8IDApCisJCQkgIHJldHVy bih4KTsKKwkJCWJyZWFrOworCQkgICAgfSBlbHNlCisJCSAgICAgIHJldHVybih4KTsKKwkJfQor CQlhcmdzW2ldID0gTlVMTDsKKwkJcyA9IGJyc3RyaXAocyk7CisJCW1ha2VzdHIoJmFyZ3NbaV0s cyk7CisJICAgIH0KKwkgICAgYXJnc1tpXSA9IE5VTEw7CisJfSBlbHNlIHsKKyNlbmRpZiAvKiBD S0VYRUMgKi8KKwkgICAgaWYgKCh4ID0gY210eHQoIlN5c3RlbSBjb21tYW5kIHRvIGV4ZWN1dGUi LCIiLCZzLHh4c3RyaW5nKSkgPCAwKQorCSAgICAgIHJldHVybih4KTsKKyNpZmRlZiBDS0VYRUMK Kwl9CisjZW5kaWYgLyogQ0tFWEVDICovCisgICAgICAgIGlmIChub3B1c2gpCisgICAgICAgICAg cmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKyNpZmRlZiBDS19BUEMKKwlpZiAoYXBjYWN0aXZlID09IEFQ Q19SRU1PVEUgJiYgIShhcGNzdGF0dXMgJiBBUENfVU5DSCkpCisJICByZXR1cm4oc3VjY2VzcyA9 IDApOworI2VuZGlmIC8qIENLX0FQQyAqLworCWNvbnJlcygpOwkJCS8qIE1ha2UgY29uc29sZSBu b3JtYWwgICovCisjaWZkZWYgT1MyCisJaWYgKCEocyAmJiAqcykpIHsKKwkgICAgb3MycHVzaCgp OworICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKwl9IGVsc2UKKyNlbmRpZiAvKiBP UzIgKi8KKwkgIGlmIChjeCA9PSBYWFNIRSkgeworCSAgICAgIHggPSB6c2hjbWQocyk7CisJICAg ICAgZGVidWcoRjEwMSwiUlVOIHpzaGNtZCBjb2RlIiwiIix4KTsKKwkgICAgICBjb25jYigoY2hh cillc2NhcGUpOworCSAgICAgIHJldHVybihzdWNjZXNzID0geCk7CisjaWZkZWYgQ0tFWEVDCisJ ICB9IGVsc2UgeworI2lmZGVmIERFQlVHCisJICAgICAgaWYgKGRlYmxvZykgeworCQkgIGRlYnVn KEYxMTEsIkVYRUMgY21kIixwLDApOworCQkgIGZvciAoaSA9IDA7IGkgPCAyNTYgJiYgYXJnc1tp XTsgaSsrKQorCQkgICAgZGVidWcoRjExMSwiRVhFQyBhcmciLGFyZ3NbaV0saSk7CisJICAgICAg fQorI2VuZGlmIC8qIERFQlVHICovCisJICAgICAgaWYgKHApIHsKKwkJICB6X2V4ZWMocCxhcmdz LHJ4KTsJLyogT3ZlcmxheSBvdXJzZWxmICovCisJCSAgZGVidWcoRjEwMCwiRVhFQyBmYWlscyIs IiIsMCk7CisJCSAgY29uY2IoKGNoYXIpZXNjYXBlKTsJLyogSW4gY2FzZSBpdCByZXR1cm5zICov CisJICAgICAgfQorCSAgICAgIHJldHVybihzdWNjZXNzID0gMCk7CisjZW5kaWYgLyogQ0tFWEVD ICovCisJICB9CisgICAgfQorCisjaWZkZWYgQ0tfUkVESVIKKyAgICBpZiAoY3ggPT0gWFhGVU4p IHsJCQkvKiBSRURJUkVDVCAqLworI2lmZGVmIENLX0FQQworCWlmICgoYXBjYWN0aXZlID09IEFQ Q19MT0NBTCkgfHwKKwkgICAgKChhcGNhY3RpdmUgPT0gQVBDX1JFTU9URSkgJiYgKCEoYXBjc3Rh dHVzICYgQVBDX1VOQ0gpKSkpCisJICByZXR1cm4oc3VjY2VzcyA9IDApOworI2VuZGlmIC8qIENL X0FQQyAqLworCWNrbWFrbXNnKHRtcGJ1ZiwKKwkJIFRNUEJVRlNJWiwKKwkJICJMb2NhbCBjb21t YW5kIHRvIHJ1bixcbiIsCisJCSAid2l0aCBpdHMgc3RhbmRhcmQgaW5wdXQvb3V0cHV0IHJlZGly ZWN0ZWQgdG8gIiwKKwkJIGxvY2FsID8gdHRuYW1lIDogInRoZSBjb21tdW5pY2F0aW9ucyBjb25u ZWN0aW9uIiwKKwkJICJcbiIKKwkJICk7CisJaWYgKCh4ID0gY210eHQodG1wYnVmLCIiLCZzLHh4 c3RyaW5nKSkgPCAwKQorCSAgcmV0dXJuKHgpOworICAgICAgICBpZiAobm9wdXNoKSB7CisgICAg ICAgICAgICBwcmludGYoIj9SRURJUkVDVCBkaXNhYmxlZFxuIik7CisgICAgICAgICAgICByZXR1 cm4oc3VjY2Vzcz0wKTsKKyAgICAgICAgfQorCWlmICghbG9jYWwpIHsKKwkgICAgcHJpbnRmKCI/ U0VUIExJTkUgb3IgU0VUIEhPU1QgcmVxdWlyZWQgZmlyc3RcbiIpOworCSAgICByZXR1cm4oLTkp OworCX0KKwlpZiAoISpzKSB7CisJICAgIHByaW50ZigiP1JFRElSRUNUIHJlcXVpcmVzIGEgY29t bWFuZCB0byByZWRpcmVjdFxuIik7CisJICAgIHJldHVybigtOSk7CisJfQorCXJldHVybihzdWNj ZXNzID0gdHRydW5jbWQocykpOworICAgIH0KKyNlbmRpZiAvKiBDS19SRURJUiAqLworI2VuZGlm IC8qIE5PUFVTSCAqLworCisjaWZuZGVmIE5PU0hPVworICAgIGlmIChjeCA9PSBYWFNITykgewkJ CS8qIFNIT1cgKi8KKwl4ID0gY21rZXkoc2hvdGFiLG5zaG8sIiIsInBhcmFtZXRlcnMiLHh4c3Ry aW5nKTsKKwlpZiAoeCA8IDApIHJldHVybih4KTsKKwlyZXR1cm4oZG9zaG93KHgpKTsKKyAgICB9 CisjZW5kaWYgLyogTk9TSE9XICovCisKKyNpZm5kZWYgTUFDCisgICAgaWYgKGN4ID09IFhYU1BB KSB7CQkJLyogU1BBQ0UgKi8KKyNpZmRlZiBJS1NECisJaWYgKGluc2VydmVyICYmICFFTkFCTEVE KGVuX3NwYSkpIHsKKwkgICAgcHJpbnRmKCI/U29ycnksIFNQQUNFIGNvbW1hbmQgZGlzYWJsZWRc biIpOworCSAgICByZXR1cm4oLTkpOworCX0KKyNlbmRpZiAvKiBJS1NEICovCisjaWZkZWYgZGF0 YWdlbmVyYWwKKwkvKiBBT1MvVlMgY2FuIHRha2UgYW4gYXJndW1lbnQgYWZ0ZXIgaXRzICJzcGFj ZSIgY29tbWFuZC4gKi8KKwlpZiAoKHggPSBjbXR4dCgiQ29uZmlybSwgb3IgbG9jYWwgZGlyZWN0 b3J5IG5hbWUiLCIiLCZzLHh4c3RyaW5nKSkgPCAwKQorCSAgcmV0dXJuKHgpOworCWlmIChub3B1 c2gpIHsKKwkgICAgcHJpbnRmKCI/U29ycnksIFNQQUNFIGNvbW1hbmQgZGlzYWJsZWRcbiIpOwor CSAgICByZXR1cm4oLTkpOworCX0gZWxzZSBpZiAoKnMgPT0gTlVMKSB7CisJICAgIHhzeXN0ZW0o U1BBQ01EKTsKKwl9IGVsc2UgeworCSAgICBja21ha21zZyhsaW5lLExJTkJVRlNJWiwic3BhY2Ug IixzLE5VTEwsTlVMTCk7CisJICAgIHhzeXN0ZW0obGluZSk7CisJfQorI2Vsc2UKKyNpZmRlZiBP UzIKKwlpZiAoKHggPSBjbXR4dCgiUHJlc3MgRW50ZXIgZm9yIGN1cnJlbnQgZGlzayxcblwKKyBv ciBzcGVjaWZ5IGEgZGlzayBsZXR0ZXIgbGlrZSBBOiIsIiIsJnMseHhzdHJpbmcpKSA8IDApCisJ ICByZXR1cm4oeCk7CisJaWYgKCpzID09IE5VTCkgewkJLyogQ3VycmVudCBkaXNrICovCisgICAg ICAgICAgICB1bnNpZ25lZCBsb25nIHNwYWNlID0gemRza3NwYWNlKDApOworICAgICAgICAgICAg aWYgKHNwYWNlID4gMCAmJiBzcGFjZSA8IDEwMjQpCisgICAgICAgICAgICAgIHByaW50ZigiIEZy ZWUgc3BhY2U6IHVua25vd25cbiIpOworICAgICAgICAgICAgZWxzZQorCSAgICAgIHByaW50Zigi IEZyZWUgc3BhY2U6ICVsZEtcbiIsIHNwYWNlLzEwMjRMKTsKKwl9IGVsc2UgeworCSAgICBpbnQg ZHJpdmUgPSB0b3VwcGVyKCpzKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgc3BhY2UgPSB6 ZHNrc3BhY2UoZHJpdmUgLSAnQScgKyAxKTsKKyAgICAgICAgICAgIGlmIChzcGFjZSA+IDAgJiYg c3BhY2UgPCAxMDI0KQorICAgICAgICAgICAgICBwcmludGYoIiBEcml2ZSAlYzogdW5rbm93biBm cmVlXG4iKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgcHJpbnRmKCIgRHJpdmUg JWM6ICVsZEsgZnJlZVxuIiwgZHJpdmUsc3BhY2UgLyAxMDI0TCk7CisJfQorI2Vsc2UKKyNpZmRl ZiBVTklYT1JPU0sKKwl4ID0gY21kaXIoIkNvbmZpcm0gZm9yIGN1cnJlbnQgZGlzayxcblwKKyBv ciBzcGVjaWZ5IGEgZGlzayBkZXZpY2Ugb3IgZGlyZWN0b3J5IiwiIiwmcyx4eHN0cmluZyk7CisJ aWYgKHggPT0gLTMpCisJICBzID0gIiI7CisJZWxzZSBpZiAoeCA8IDApCisJICByZXR1cm4oeCk7 CisgICAgICAgIGNrc3RybmNweSh0bXBidWYscyxUTVBCVUZTSVopOworICAgICAgICBzID0gdG1w YnVmOworCWlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOworCWlmIChub3B1c2gpIHsK KwkgICAgcHJpbnRmKCI/U29ycnksIFNQQUNFIGNvbW1hbmQgZGlzYWJsZWRcbiIpOworCSAgICBy ZXR1cm4oLTkpOworCX0KKwlpZiAoISpzKSB7CQkJLyogQ3VycmVudCBkaXNrICovCisJICAgIHhz eXN0ZW0oU1BBQ01EKTsKKwl9IGVsc2UgewkJCS8qIFNwZWNpZmllZCBkaXNrICovCisJICAgIGNr bWFrbXNnKGxpbmUsTElOQlVGU0laLFNQQUNNMiwiICIscyxOVUxMKTsKKwkgICAgeHN5c3RlbShs aW5lKTsKKwl9CisjZWxzZQorCWlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOworCWlm IChub3B1c2gpIHsKKwkgICAgcHJpbnRmKCI/U29ycnksIFNQQUNFIGNvbW1hbmQgZGlzYWJsZWRc biIpOworCSAgICByZXR1cm4oLTkpOworCX0KKwl4c3lzdGVtKFNQQUNNRCk7CisjZW5kaWYgLyog VU5JWE9ST1NLICovCisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8K KwlyZXR1cm4oc3VjY2VzcyA9IDEpOwkJLyogUHJldGVuZCBpdCB3b3JrZWQgKi8KKyAgICB9Cisj ZW5kaWYgLyogTUFDICovCisKKyNpZm5kZWYgTk9YRkVSCisgICAgaWYgKGN4ID09IFhYU1RBKSB7 CQkJLyogU1RBVElTVElDUyAqLworCWlmICgoeCA9IGNta2V5KHN0YXR0YWIsMiwiQ2FycmlhZ2Ug cmV0dXJuLCBvciBvcHRpb24iLAorCQkgICAgICAgIi9icmllZiIseHhzdHJpbmcpKSA8IDApCisJ ICByZXR1cm4oeCk7CisJaWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeSk7CisJcmV0dXJu KHN1Y2Nlc3MgPSBkb3N0YXQoeCkpOworICAgIH0KKyNlbmRpZiAvKiBOT1hGRVIgKi8KKworICAg IGlmIChjeCA9PSBYWFNUTyB8fCBjeCA9PSBYWEVORCkgewkvKiBTVE9QLCBFTkQsIG9yIFBPUCAq LworCWlmICgoeSA9IGNtbnVtKCJleGl0IHN0YXR1cyBjb2RlIiwiMCIsMTAsJngseHhzdHJpbmcp KSA8IDApCisJICByZXR1cm4oeSk7CisJaWYgKCh5ID0gY210eHQoIk1lc3NhZ2UgdG8gcHJpbnQi LCIiLCZzLHh4c3RyaW5nKSkgPCAwKQorCSAgcmV0dXJuKHkpOworCXMgPSBicnN0cmlwKHMpOwor CWlmICgqcykgcHJpbnRmKCIlc1xuIixzKTsKKwlpZiAoY3ggPT0gWFhTVE8pIHsKKwkgICAgZG9z dG9wKCk7CisJfSBlbHNlIHsKKwkgICAgZG9lbmQoeCk7CisJfQorCXJldHVybihzdWNjZXNzID0g KHggPT0gMCkpOworICAgIH0KKyAgICBpZiAoY3ggPT0gWFhTVVMpIHsJCQkvKiBTVVNQRU5EICov CisJaWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeSk7CisjaWZkZWYgTk9KQworCXByaW50 ZigiU29ycnksIHRoaXMgdmVyc2lvbiBvZiBLZXJtaXQgY2Fubm90IGJlIHN1c3BlbmRlZFxuIik7 CisjZWxzZQorI2lmZGVmIElLU0QKKwlpZiAoaW5zZXJ2ZXIpIHsKKwkgICAgcHJpbnRmKCI/U29y cnksIElLU0QgY2FuIG5vdCBiZSBzdXNwZW5kZWRcbiIpOworCSAgICByZXR1cm4oLTkpOworCX0g ZWxzZQorI2VuZGlmIC8qIElLU0QgKi8KKwkgIGlmIChub3B1c2gpIHsKKwkgICAgcHJpbnRmKCI/ U29ycnksIGFjY2VzcyB0byBzeXN0ZW0gaXMgZGlzYWJsZWRcbiIpOworCSAgICByZXR1cm4oLTkp OworCX0KKwlzdHB0cmFwKDApOworI2VuZGlmIC8qIE5PSkMgKi8KKwlyZXR1cm4oMCk7CisgICAg fQorCisgICAgaWYgKGN4ID09IFhYVEFLKSB7CQkJLyogVEFLRSAqLworCWNoYXIgKiBzY3JpcHRl bnYgPSBOVUxMOwkKKyNpZmRlZiBPUzIKKyAgICAgICAgY2hhciAqIEdldEFwcERhdGEoaW50KTsK KwlleHRlcm4gY2hhciBzdGFydHVwZGlyW10sZXhlZGlyW10saW5pZGlyW107CisJY2hhciAqIGtl eW1hcGVudiA9IE5VTEw7CisgICAgICAgIGNoYXIgKiBhcHBkYXRhMCA9IE5VTEwsICphcHBkYXRh MSA9IE5VTEw7CisJaW50IHh4OworI2RlZmluZSBUQUtFUEFUSExFTiA0MDk2CisjZWxzZSAvKiBP UzIgKi8KKyNkZWZpbmUgVEFLRVBBVEhMRU4gMTAyNAorI2VuZGlmIC8qIE9TMiAqLworCWNoYXIg dGFrZXBhdGhbVEFLRVBBVEhMRU5dOworCisJaWYgKHRsZXZlbCA+PSBNQVhUQUtFLTEpIHsKKwkg ICAgcHJpbnRmKCI/VGFrZSBmaWxlcyBuZXN0ZWQgdG9vIGRlZXBseVxuIik7CisJICAgIHJldHVy bigtOSk7CisJfQorI2lmZGVmIE9TMgorI2lmZGVmIE5UCisJc2NyaXB0ZW52ID0gZ2V0ZW52KCJL OTVTQ1JJUFRTIik7CisJa2V5bWFwZW52ID0gZ2V0ZW52KCJLOTVLRVlNQVBTIik7CisgICAgICAg IG1ha2VzdHIoJmFwcGRhdGEwLChjaGFyICopR2V0QXBwRGF0YSgwKSk7CisgICAgICAgIG1ha2Vz dHIoJmFwcGRhdGExLChjaGFyICopR2V0QXBwRGF0YSgxKSk7CisjZWxzZSAvKiBOVCAqLworCXNj cmlwdGVudiA9IGdldGVudigiSzJTQ1JJUFRTIik7CisJa2V5bWFwZW52ID0gZ2V0ZW52KCJLMktF WU1BUFMiKTsKKyNlbmRpZiAvKiBOVCAqLworI2VuZGlmIC8qIE9TMiAqLworCisJaWYgKCFzY3Jp cHRlbnYpCQkJLyogTGV0IHRoaXMgd29yayBmb3IgVW5peCBldGMgdG9vICovCisJICBzY3JpcHRl bnYgPSBnZXRlbnYoIkNLX1NDUklQVFMiKTsgLyogVXNlIHRoaXMgaWYgZGVmaW5lZCAqLworI2lm bmRlZiBPUzIKKwlpZiAoIXNjcmlwdGVudikJCQkvKiBPdGhlcndpc2UgdXNlIGhvbWUgZGlyZWN0 b3J5ICovCisJICBzY3JpcHRlbnYgPSBob21lcGF0aCgpOworI2VuZGlmIC8qIE9TMiAqLworCWlm ICghc2NyaXB0ZW52KQorCSAgc2NyaXB0ZW52ID0gIiI7CisJY2tzdHJuY3B5KHRha2VwYXRoLHNj cmlwdGVudixUQUtFUEFUSExFTik7CisJZGVidWcoRjExMCwiVEFLRSBpbml0aWFsIHRha2VwYXRo Iix0YWtlcGF0aCwwKTsKKworI2lmZGVmIE9TMgorCWlmICgha2V5bWFwZW52KQorCSAga2V5bWFw ZW52ID0gZ2V0ZW52KCJDS19LRVlNQVBTIik7CisJaWYgKCFrZXltYXBlbnYpCisJICBrZXltYXBl bnYgPSAiIjsKKworCWNrc3RybmNhdCh0YWtlcGF0aCwKKwkJICAoc2NyaXB0ZW52ICYmIHNjcmlw dGVudltzdHJsZW4oc2NyaXB0ZW52KS0xXT09JzsnKT8iIjoiOyIsCisJCSAgVEFLRVBBVEhMRU4K KwkJICApOworCWNrc3RybmNhdCh0YWtlcGF0aCxrZXltYXBlbnY/a2V5bWFwZW52OiIiLFRBS0VQ QVRITEVOKTsKKwlja3N0cm5jYXQodGFrZXBhdGgsCisJCSAgKGtleW1hcGVudiAmJiBrZXltYXBl bnZbc3RybGVuKGtleW1hcGVudiktMV09PSc7Jyk/IiI6IjsiLAorCQkgIFRBS0VQQVRITEVOCisJ CSAgKTsKKwlja3N0cm5jYXQodGFrZXBhdGgsc3RhcnR1cGRpcixUQUtFUEFUSExFTik7CisJY2tz dHJuY2F0KHRha2VwYXRoLCI7IixUQUtFUEFUSExFTik7CisJY2tzdHJuY2F0KHRha2VwYXRoLHN0 YXJ0dXBkaXIsVEFLRVBBVEhMRU4pOworCWNrc3RybmNhdCh0YWtlcGF0aCwiU0NSSVBUUy87IixU QUtFUEFUSExFTik7CisJY2tzdHJuY2F0KHRha2VwYXRoLHN0YXJ0dXBkaXIsVEFLRVBBVEhMRU4p OworCWNrc3RybmNhdCh0YWtlcGF0aCwiS0VZTUFQUy87IixUQUtFUEFUSExFTik7CisKKwlja3N0 cm5jYXQodGFrZXBhdGgsYXBwZGF0YTEsVEFLRVBBVEhMRU4pOworCWNrc3RybmNhdCh0YWtlcGF0 aCwiS2VybWl0IDk1LzsiLFRBS0VQQVRITEVOKTsKKwlja3N0cm5jYXQodGFrZXBhdGgsYXBwZGF0 YTEsVEFLRVBBVEhMRU4pOworCWNrc3RybmNhdCh0YWtlcGF0aCwiS2VybWl0IDk1L1NDUklQVFMv OyIsVEFLRVBBVEhMRU4pOworCWNrc3RybmNhdCh0YWtlcGF0aCxhcHBkYXRhMSxUQUtFUEFUSExF Tik7CisJY2tzdHJuY2F0KHRha2VwYXRoLCJLZXJtaXQgOTUvS0VZTUFQUy87IixUQUtFUEFUSExF Tik7CisKKwlja3N0cm5jYXQodGFrZXBhdGgsYXBwZGF0YTAsVEFLRVBBVEhMRU4pOworCWNrc3Ry bmNhdCh0YWtlcGF0aCwiS2VybWl0IDk1LzsiLFRBS0VQQVRITEVOKTsKKwlja3N0cm5jYXQodGFr ZXBhdGgsYXBwZGF0YTAsVEFLRVBBVEhMRU4pOworCWNrc3RybmNhdCh0YWtlcGF0aCwiS2VybWl0 IDk1L1NDUklQVFMvOyIsVEFLRVBBVEhMRU4pOworCWNrc3RybmNhdCh0YWtlcGF0aCxhcHBkYXRh MCxUQUtFUEFUSExFTik7CisJY2tzdHJuY2F0KHRha2VwYXRoLCJLZXJtaXQgOTUvS0VZTUFQUy87 IixUQUtFUEFUSExFTik7CisKKwlja3N0cm5jYXQodGFrZXBhdGgsaW5pZGlyLFRBS0VQQVRITEVO KTsKKwlja3N0cm5jYXQodGFrZXBhdGgsIjsiLFRBS0VQQVRITEVOKTsKKwlja3N0cm5jYXQodGFr ZXBhdGgsaW5pZGlyLFRBS0VQQVRITEVOKTsKKwlja3N0cm5jYXQodGFrZXBhdGgsIlNDUklQVFMv OyIsVEFLRVBBVEhMRU4pOworCWNrc3RybmNhdCh0YWtlcGF0aCxpbmlkaXIsVEFLRVBBVEhMRU4p OworCWNrc3RybmNhdCh0YWtlcGF0aCwiS0VZTUFQUy87IixUQUtFUEFUSExFTik7CisKKwlja3N0 cm5jYXQodGFrZXBhdGgsemhvbWUoKSxUQUtFUEFUSExFTik7CisJY2tzdHJuY2F0KHRha2VwYXRo LCI7IixUQUtFUEFUSExFTik7CisJY2tzdHJuY2F0KHRha2VwYXRoLHpob21lKCksVEFLRVBBVEhM RU4pOworCWNrc3RybmNhdCh0YWtlcGF0aCwiU0NSSVBUUy87IixUQUtFUEFUSExFTik7CisJY2tz dHJuY2F0KHRha2VwYXRoLHpob21lKCksVEFLRVBBVEhMRU4pOworCWNrc3RybmNhdCh0YWtlcGF0 aCwiS0VZTUFQUy87IixUQUtFUEFUSExFTik7CisKKwlja3N0cm5jYXQodGFrZXBhdGgsZXhlZGly LFRBS0VQQVRITEVOKTsKKwlja3N0cm5jYXQodGFrZXBhdGgsIjsiLFRBS0VQQVRITEVOKTsKKwlj a3N0cm5jYXQodGFrZXBhdGgsZXhlZGlyLFRBS0VQQVRITEVOKTsKKwlja3N0cm5jYXQodGFrZXBh dGgsIlNDUklQVFMvOyIsVEFLRVBBVEhMRU4pOworCWNrc3RybmNhdCh0YWtlcGF0aCxleGVkaXIs VEFLRVBBVEhMRU4pOworCWNrc3RybmNhdCh0YWtlcGF0aCwiS0VZTUFQUy87IixUQUtFUEFUSExF Tik7CisjZW5kaWYgLyogT1MyICovCisJZGVidWcoRjExMCwiVEFLRSBmaW5hbCB0YWtlcGF0aCIs dGFrZXBhdGgsMCk7CisKKwlpZiAoKHkgPSBjbWlmaXAoIkNvbW1hbmRzIGZyb20gZmlsZSIsCisJ CQkiIiwmcywmeCwwLHRha2VwYXRoLHh4c3RyaW5nKSkgPCAwKSB7CisJICAgIGlmICh5ID09IC0z KSB7CisJCXByaW50ZigiP0EgZmlsZSBuYW1lIGlzIHJlcXVpcmVkXG4iKTsKKwkJcmV0dXJuKC05 KTsKKwkgICAgfSBlbHNlCisJICAgICAgcmV0dXJuKHkpOworCX0KKwlpZiAoeCAhPSAwKSB7CisJ ICAgIHByaW50ZigiP1dpbGRjYXJkcyBub3QgYWxsb3dlZCBpbiBjb21tYW5kIGZpbGUgbmFtZVxu Iik7CisJICAgIHJldHVybigtOSk7CisJfQorCWNrc3RybmNweShsaW5lLHMsTElOQlVGU0laKTsK KwlkZWJ1ZyhGMTEwLCJUQUtFIGZpbGUiLHMsMCk7CisJaWYgKGlzZGlyKHMpKSB7CisJICAgIHBy aW50ZigiP0Nhbid0IGV4ZWN1dGUgYSBkaXJlY3RvcnkgLSBcIiVzXCJcbiIsIHMpOworCSAgICBy ZXR1cm4oLTkpOworCX0KKyNpZm5kZWYgTk9UQUtFQVJHUworCXsKKwkgICAgY2hhciAqIHA7CisJ ICAgIHggPSBzdHJsZW4obGluZSk7CisJICAgIGRlYnVnKEYxMTEsIlRBS0UgYXJncyIsbGluZSx4 KTsKKwkgICAgcCA9IGxpbmUgKyB4ICsgMTsKKwkgICAgaWYgKCh5ID0gY210eHQoIk9wdGlvbmFs IGFyZ3VtZW50cyIsIiIsJnMseHhzdHJpbmcpKSA8IDApCisJICAgICAgcmV0dXJuKHkpOworCSAg ICBpZiAoKnMpIHsJCQkvKiBBcmdzIGdpdmVuPyAqLworCQlja3N0cm5jcHkocCxzLExJTkJVRlNJ Wi14LTEpOworI2lmZGVmIFpGTlFGUAorCQl6Zm5xZnAobGluZSxUTVBCVUZTSVosdG1wYnVmKTsK KwkJcyA9IHRtcGJ1ZjsKKyNlbHNlCisJCXMgPSBsaW5lOworI2VuZGlmIC8qIFpGTlFGUCAqLwor CQlkZWJ1ZyhGMTEwLCJUQUtFIGZpbGVuYW1lIixzLDApOworCQl4ID0gc3RybGVuKHMpOworCQlk ZWJ1ZyhGMTAxLCJUQUtFIG5ldyBsZW4iLHMseCk7CisKKyNpZmRlZiBDT01NRU5UCisvKgorICBU aGlzIHdhcyBhZGRlZCBpbiBDLUtlcm1pdCA3LjAgdG8gYWxsb3cgYXJncyB0byBiZSBwYXNzZWQg ZnJvbSB0aGUgVEFLRQorICBjb21tYW5kIHRvIHRoZSBjb21tYW5kIGZpbGUuICBCdXQgaXQgb3Zl cndyaXRlcyB0aGUgY3VycmVudCBhcmd1bWVudCB2ZWN0b3IsCisgIHdoaWNoIGlzIGF0IGJlc3Qg c3VycHJpc2luZywgYW5kIGF0IHdvcnN0IHVuc2FmZS4KKyovCisJCWFkZG1hYygiJTAiLHMpOwkJ LyogRGVmaW5lICUwID0gbmFtZSBvZiBmaWxlICovCisJCXZhcm5hbVswXSA9ICclJzsKKwkJdmFy bmFtWzJdID0gJ1wwJzsKKwkJZGVidWcoRjExMCwidGFrZSBhcmcgMCIscywwKTsKKwkJZGVidWco RjExMCwidGFrZSBhcmdzIixwLDApOworCQlmb3IgKHkgPSAxOyB5IDwgMTA7IHkrKykgeyAvKiBD bGVhciBjdXJyZW50IGFyZ3MgJTEuLiU5ICovCisJCSAgICB2YXJuYW1bMV0gPSAoY2hhcikgKHkg KyAnMCcpOworCQkgICAgZGVsbWFjKHZhcm5hbSwwKTsKKwkJfQorCQl4d29yZHMocCxNQVhBUkdM SVNULE5VTEwsMCk7IC8qIEFzc2lnbiBuZXcgYXJncyAqLworCQlkZWJ1ZyhGMTEwLCJ0YWtlIGFy Z3MiLHAsMCk7CisjZWxzZQorLyoKKyAgVGhpcyBtZXRob2QgaXMgdXNlZCBpbiA4LjAuICBJZiB0 aGUgVEFLRSBjb21tYW5kIGluY2x1ZGVzIGFyZ3VtZW50cywgd2UKKyAgaW5zZXJ0IGFuIGludGVy bWVkaWF0ZSB0ZW1wb3JhcnkgbWFjcm8gYmV0d2VlbiB0aGUgY3VycmVudCBsZXZlbDsgd2UgcGFz cworICB0aGUgYXJndW1lbnRzIHRvIHRoZSBtYWNybyBhbmQgdGhlbiB0aGUgbWFjcm8gVEFLRXMg dGhlIGNvbW1hbmQgZmlsZS4KKyAgSWYgdGhlIHVzZXIgQ3RybC1DJ3Mgb3V0IG9mIHRoZSBUQUtF IGZpbGUsIHNvbWUgdGVtcG9yYXJ5IG1hY3JvIGRlZmluaXRpb25zCisgIGFuZCBvdGhlciBzbWFs bCBtYWxsb2MnZCBiaXRzIG1pZ2h0IGJlIGxlZnQgYmVoaW5kLgorKi8KKwkJeworCQkgICAgY2hh ciAqIHEgPSBOVUxMOworCQkgICAgY2hhciAqIHIgPSBOVUxMOworCQkgICAgaW50IGssIG07CisJ CSAgICBtID0gbWFjbHZsOworCQkgICAgcSA9IChjaGFyICopbWFsbG9jKHgrMjQpOworCQkgICAg aWYgKHEpIHsKKwkJCXIgPSAoY2hhciAqKW1hbGxvYyh4KzI0KTsKKwkJCWlmIChyKSB7CisJCQkg ICAgc3ByaW50ZihxLCJfZmlsZVslc10oJWQpIixzLGNtZGx2bCk7IC8qIHNhZmUgKi8KKwkJCSAg ICBzcHJpbnRmKHIsInRha2UgJXMiLHMpOyAvKiBzYWZlICovCisJCQkgICAgayA9IGFkZG1hYyhx LHIpOworCQkJICAgIGlmIChrID4gLTEpIHsKKwkJCQlkb2RvKGsscCwwKTsKKwkJCQl3aGlsZSAo bWFjbHZsID4gbSkgeworCQkJCSAgICBzc3RhdGUgPSAoQ0hBUikgcGFyc2VyKDEpOworCQkJCSAg ICBpZiAoc3N0YXRlKSBwcm90bygpOworCQkJCX0KKwkJCSAgICB9CisJCQkgICAgayA9IGRlbG1h YyhxLDApOworCQkJICAgIGZyZWUocSk7CisJCQkgICAgZnJlZShyKTsKKwkJCSAgICByZXR1cm4o c3VjY2Vzcyk7CisJCQl9CisJCSAgICB9CisJCX0KKwkJcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKyNl bmRpZiAvKiBDT01NRU5UICovCisJICAgIH0KKwl9CisjZWxzZQorCWlmICgoeSA9IGNtY2ZtKCkp IDwgMCkgcmV0dXJuKHkpOworI2VuZGlmIC8qIE5PVEFLRUFSR1MgKi8KKwlyZXR1cm4oc3VjY2Vz cyA9IGRvdGFrZShsaW5lKSk7CisgICAgfQorCisjaWZuZGVmIE5PTE9DQUwKKyNpZmRlZiBPUzIK KyAgICBpZiAoY3ggPT0gWFhWSUVXKSB7CQkJLyogVklFVyBPbmx5IFRlcm1pbmFsIG1vZGUgKi8K Kwl2aWV3b25seSA9IFRSVUU7CisJc3VjY2VzcyA9IGRvY29uZWN0KDAsIDApOworCXZpZXdvbmx5 ID0gRkFMU0U7CisJcmV0dXJuIHN1Y2Nlc3M7CisgICAgfQorI2VuZGlmIC8qIE9TMiAqLworCisj aWZkZWYgTkVUQ09OTgorICAgIGlmIChjeCA9PSBYWFRFTCB8fCBjeCA9PSBYWElLU0QpIHsJLyog VEVMTkVUICovCisJaW50IHgsejsKKyNpZmRlZiBPUzIKKyAgICBpZiAoIXRjcF9hdmFpbCkgewor ICAgICAgICBwcmludGYoIj9Tb3JyeSwgZWl0aGVyIFRDUC9JUCBpcyBub3QgYXZhaWxhYmxlIG9u IHRoaXMgc3lzdGVtIG9yXG5cCituZWNlc3NhcnkgRExMcyBkaWQgbm90IGxvYWQuICBVc2UgU0hP VyBORVRXT1JLIHRvIGNoZWNrIG5ldHdvcmsgc3RhdHVzLlxuIik7CisgICAgICAgIHN1Y2Nlc3Mg PSAwOworICAgICAgICByZXR1cm4oLTkpOworICAgIH0gZWxzZQorI2VuZGlmIC8qIE9TMiAqLwor ICAgICAgeworCSAgeCA9IG5ldHR5cGU7CQkJLyogU2F2ZSBuZXQgdHlwZSBpbiBjYXNlIG9mIGZh aWx1cmUgKi8KKwkgIHogPSB0dG5wcm90bzsJCQkvKiBTYXZlIHByb3RvY29sIGluIGNhc2Ugb2Yg ZmFpbHVyZSAqLworCSAgbmV0dHlwZSA9IE5FVF9UQ1BCOworCSAgdHRucHJvdG8gPSAoY3ggPT0g WFhURUwpID8gTlBfVEVMTkVUIDogTlBfS0VSTUlUOworCSAgaWYgKCh5ID0gc2V0bGluKFhZSE9T VCwwLDEpKSA8PSAwKSB7CisgICAgICAgICAgICAgIG5ldHR5cGUgPSB4OwkJLyogRmFpbGVkLCBy ZXN0b3JlIG5ldCB0eXBlLiAqLworICAgICAgICAgICAgICB0dG5wcm90byA9IHo7CQkvKiBhbmQg cHJvdG9jb2wgKi8KKyAgICAgICAgICAgICAgc3VjY2VzcyA9IDA7CisJICB9CisJICBkaWRzZXRs aW4rKzsKKyAgICAgICAgfQorCXJldHVybih5KTsKKyAgICB9CisKKyNpZm5kZWYgUFRZT1JQSVBF CisjaWZkZWYgTkVUQ01ECisjZGVmaW5lIFBUWU9SUElQRQorI2Vsc2UKKyNpZmRlZiBORVRQVFkK KyNkZWZpbmUgUFRZT1JQSVBFCisjZW5kaWYgLyogTkVUUFRZICovCisjZW5kaWYgLyogTkVUQ01E ICovCisjZW5kaWYgLyogUFRZT1JQSVBFICovCisKKyNpZmRlZiBQVFlPUlBJUEUKKyAgICBpZiAo Y3ggPT0gWFhQSVBFIHx8IGN4ID09IFhYUFRZKSB7CS8qIFBJUEUgb3IgUFRZICovCisJaW50IHg7 CisJZXh0ZXJuIGludCBuZXRzYXZlOworCXggPSBuZXR0eXBlOwkJCS8qIFNhdmUgbmV0IHR5cGUg aW4gY2FzZSBvZiBmYWlsdXJlICovCisJbmV0dHlwZSA9IChjeCA9PSBYWFBJUEUpID8gTkVUX0NN RCA6IE5FVF9QVFk7CisJaWYgKCh5ID0gc2V0bGluKFhZSE9TVCwwLDEpKSA8IDApIHsKKwkgICAg bmV0dHlwZSA9IHg7CQkvKiBGYWlsZWQsIHJlc3RvcmUgbmV0IHR5cGUuICovCisJICAgIHR0bnBy b3RvID0gejsJCS8qIGFuZCBwcm90b2NvbCAqLworCSAgICBzdWNjZXNzID0gMDsKKwl9CisJZGlk c2V0bGluKys7CisJbmV0c2F2ZSA9IHg7CisJcmV0dXJuKHkpOworICAgIH0KKyNlbmRpZiAvKiBQ VFlPUlBJUEUgKi8KKworI2lmZGVmIEFOWVNTSAorICAgIGlmIChjeCA9PSBYWFNTSCkgewkJCS8q IFNTSCAoU2VjdXJlIFNoZWxsKSAqLworCWV4dGVybiBpbnQgbmV0c2F2ZTsKKyNpZmRlZiBTU0hC VUlMVElOCisJaW50IGssIHgsIGhhdmVob3N0ID0gMCwgdHJpcHMgPSAwOworICAgICAgICBpbnQg ICAgdG1wdmVyID0gLTEsIHRtcHhmdyA9IC0xOworI2lmbmRlZiBTU0hURVNUCisgICAgICAgIGV4 dGVybiBpbnQgc2xfc3NoX3hmdywgc2xfc3NoX3hmd19zYXZlZDsKKyAgICAgICAgZXh0ZXJuIGlu dCBzbF9zc2hfdmVyLCBzbF9zc2hfdmVyX3NhdmVkOworI2VuZGlmIC8qIFNTSFRFU1QgKi8KKyAg ICAgICAgZXh0ZXJuIGludCBtZG10eXAsIG1kbXNhdiwgY3h0eXBlLCBzbF91aWRfc2F2ZWQ7Cisg ICAgICAgIGV4dGVybiBjaGFyICogc2xtc2c7CisJZXh0ZXJuIGNoYXIgdWlkYnVmW10sIHNsX3Vp ZGJ1ZltdOworICAgICAgICBleHRlcm4gY2hhciBwd2J1ZltdLCAqIGdfcHN3ZDsKKyAgICAgICAg ZXh0ZXJuIGludCBwd2ZsZywgcHdjcnlwdCwgZ19wZmxnLCBnX3BjcHQsIG5vbG9jYWw7CisJc3Ry dWN0IEZEQiBzdywga3csIGZsOworCisgICAgICAgIGlmIChzc2hfdG1wc3RyKQorCSAgbWVtc2V0 KHNzaF90bXBzdHIsMCxzdHJsZW4oc3NoX3RtcHN0cikpOworICAgICAgICBtYWtlc3RyKCZzc2hf dG1wc3RyLE5VTEwpOworICAgICAgICBtYWtlc3RyKCZzc2hfdG1wdWlkLE5VTEwpOworICAgICAg ICBtYWtlc3RyKCZzc2hfdG1wY21kLE5VTEwpOworICAgICAgICBtYWtlc3RyKCZzc2hfdG1wcG9y dCxOVUxMKTsKKworCWNtZmRiaSgma3csCQkJLyogMXN0IEZEQiAtIGNvbW1hbmRzICovCisJICAg ICAgIF9DTUtFWSwJCQkvKiBmY29kZSAqLworCSAgICAgICAiaG9zdCBbIHBvcnQgXSxcbiBvciBh Y3Rpb24iLAkvKiBobHBtc2cgKi8KKwkgICAgICAgIiIsCQkJLyogZGVmYXVsdCAqLworCSAgICAg ICAiIiwJCQkvKiBhZGR0bCBzdHJpbmcgZGF0YSAqLworCSAgICAgICBuc3NoY21kLAkJCS8qIGFk ZHRsIG51bWVyaWMgZGF0YSAxOiB0Ymwgc2l6ZSAqLworCSAgICAgICAwLAkJCS8qIGFkZHRsIG51 bWVyaWMgZGF0YSAyOiAwID0ga2V5d29yZCAqLworCSAgICAgICB4eHN0cmluZywJCS8qIFByb2Nl c3NpbmcgZnVuY3Rpb24gKi8KKwkgICAgICAgc3Noa3d0YWIsCQkvKiBLZXl3b3JkIHRhYmxlICov CisJICAgICAgICZmbAkJCS8qIFBvaW50ZXIgdG8gbmV4dCBGREIgKi8KKwkgICAgICAgKTsKKwlj bWZkYmkoJmZsLAkJCS8qIEhvc3QgKi8KKwkgICAgICAgX0NNRkxELAkJCS8qIGZjb2RlICovCisJ ICAgICAgICIiLAkJCS8qIGhscG1zZyAqLworCSAgICAgICAiIiwJCQkvKiBkZWZhdWx0ICovCisJ ICAgICAgICIiLAkJCS8qIGFkZHRsIHN0cmluZyBkYXRhICovCisJICAgICAgIDAsCQkJLyogYWRk dGwgbnVtZXJpYyBkYXRhIDEgKi8KKwkgICAgICAgMCwJCQkvKiBhZGR0bCBudW1lcmljIGRhdGEg MiAqLworCSAgICAgICB4eHN0cmluZywKKwkgICAgICAgTlVMTCwKKwkgICAgICAgTlVMTAorCSAg ICAgICApOworCisJeCA9IGNtZmRiKCZrdyk7CisJaWYgKHggPT0gLTMpIHsKKwkgICAgcHJpbnRm KCI/c3NoIHdoYXQ/XG4iKTsKKwkgICAgcmV0dXJuKC05KTsKKwl9CisJaWYgKHggPCAwKQorCSAg cmV0dXJuKHgpOworCWhhdmVob3N0ID0gMDsKKwlpZiAoY21yZXN1bHQuZmNvZGUgPT0gX0NNRkxE KSB7CisJICAgIGhhdmVob3N0ID0gMTsKKwkgICAgY2tzdHJuY3B5KGxpbmUsY21yZXN1bHQuc3Jl c3VsdCxMSU5CVUZTSVopOyAvKiBIb3N0bmFtZSAqLworCSAgICBjbXJlc3VsdC5ucmVzdWx0ID0g WFNTSF9PUE47CisJfQorCXN3aXRjaCAoY21yZXN1bHQubnJlc3VsdCkgewkvKiBTU0gga2V5d29y ZCAqLworCSAgY2FzZSBYU1NIX09QTjoJCS8qIFNTSCBPUEVOICovCisJICAgIGlmICghaGF2ZWhv c3QpIHsKKwkJaWYgKCh4ID0gY21mbGQoIkhvc3QiLCIiLCZzLHh4c3RyaW5nKSkgPCAwKQorCQkg IHJldHVybih4KTsKKwkJY2tzdHJuY3B5KGxpbmUscyxMSU5CVUZTSVopOworCSAgICB9CisJICAg IC8qIFBhcnNlIFsgcG9ydCBdIFsgc3dpdGNoZXMgXSAqLworCSAgICBjbWZkYmkoJmt3LAkJCS8q IFN3aXRjaGVzICovCisJCSAgIF9DTUtFWSwKKwkJICAgIlBvcnQgbnVtYmVyIG9yIHNlcnZpY2Ug bmFtZSxcbm9yIHN3aXRjaCIsCisJCSAgICIiLAorCQkgICAiIiwKKwkJICAgbnNzaG9wbnN3LAor CQkgICA0LAorCQkgICB4eHN0cmluZywKKwkJICAgc3Nob3Buc3csCisJCSAgICZmbAorCQkgICAp OworCSAgICBjbWZkYmkoJmZsLAkJCS8qIFBvcnQgbnVtYmVyIG9yIHNlcnZpY2UgbmFtZSAqLwor CQkgICBfQ01GTEQsCisJCSAgICIiLAorCQkgICAiIiwKKwkJICAgIiIsCisJCSAgIDAsCisJCSAg IDAsCisJCSAgIHh4c3RyaW5nLAorCQkgICBOVUxMLAorCQkgICBOVUxMCisJCSAgICk7CisJICAg IHRyaXBzID0gMDsJCQkvKiBFeHBsYWluZWQgYmVsb3cgKi8KKwkgICAgd2hpbGUgKDEpIHsJCQkv KiBQYXJzZSBwb3J0IGFuZCBzd2l0Y2hlcyAqLworCQl4ID0gY21mZGIoJmt3KTsJCS8qIEdldCBh IGZpZWxkICovCisJCWlmICh4ID09IC0zKQkJLyogVXNlciB0eXBlZCBDUiBzbyBxdWl0IGZyb20g bG9vcCAqLworCQkgIGJyZWFrOworCQlpZiAoeCA8IDApCQkvKiBPdGhlciBwYXJzZSBlcnJvciwg cGFzcyBpdCBiYWNrICovCisJCSAgcmV0dXJuKHgpOworCQlzd2l0Y2ggKGNtcmVzdWx0LmZjb2Rl KSB7IC8qIEZpZWxkIG9yIEtleXdvcmQ/ICovCisgICAgICAgICAgICAgICAgICBjYXNlIF9DTUZM RDoJCSAgLyogRmllbGQgKi8KKyAgICAgICAgICAgICAgICAgICAgbWFrZXN0cigmc3NoX3RtcHBv cnQsY21yZXN1bHQuc3Jlc3VsdCk7CisJCSAgICBicmVhazsKKwkJICBjYXNlIF9DTUtFWToJCS8q IEtleXdvcmQgKi8KKwkJICAgIHN3aXRjaCAoY21yZXN1bHQubnJlc3VsdCkgewkvKiBXaGljaCBv bmU/ICovCisJCSAgICAgIGNhc2UgU1NIU1dfVVNSOgkgICAgICAgIC8qIC9VU0VSOiAqLworCQkJ aWYgKCFjbWdicmsoKSkgeworCQkJICAgIHByaW50ZigiP1RoaXMgc3dpdGNoIHJlcXVpcmVzIGFu IGFyZ3VtZW50XG4iKTsKKwkJCSAgICByZXR1cm4oLTkpOworCQkJfQorCQkJaWYgKCh5ID0gY21m bGQoIlVzZXJuYW1lIiwiIiwmcyx4eHN0cmluZykpIDwgMCkKKwkJCSAgcmV0dXJuKHkpOworCQkJ cyA9IGJyc3RyaXAocyk7CisJCQltYWtlc3RyKCZzc2hfdG1wdWlkLHMpOworCQkJYnJlYWs7Cisg ICAgICAgICAgICAgICAgICAgICAgY2FzZSBTU0hTV19QV0Q6CisJCQlpZiAoIWNtZ2JyaygpKSB7 CisJCQkgICAgcHJpbnRmKCI/VGhpcyBzd2l0Y2ggcmVxdWlyZXMgYW4gYXJndW1lbnRcbiIpOwor CQkJICAgIHJldHVybigtOSk7CisJCQl9CisJCQlkZWJvayA9IDA7CisJCQlpZiAoKHggPSBjbWZs ZCgiUGFzc3dvcmQiLCIiLCZzLHh4c3RyaW5nKSkgPCAwKSB7CisJCQkgICAgaWYgKHggPT0gLTMp IHsKKwkJCQltYWtlc3RyKCZzc2hfdG1wc3RyLCIiKTsKKwkJCSAgICB9IGVsc2UgeworCQkJCXJl dHVybih4KTsKKwkJCSAgICB9CisJCQl9IGVsc2UgeworCQkJICAgIHMgPSBicnN0cmlwKHMpOwor CQkJICAgIGlmICgoeCA9IChpbnQpc3RybGVuKHMpKSA+IFBXQlVGTCkgeworCQkJCW1ha2VzdHIo JnNsbXNnLCJJbnRlcm5hbCBlcnJvciIpOworCQkJCXByaW50ZigiP1NvcnJ5LCB0b28gbG9uZyAt IG1heCA9ICVkXG4iLFBXQlVGTCk7CisJCQkJcmV0dXJuKC05KTsKKwkJCSAgICB9CisJCQkgICAg bWFrZXN0cigmc3NoX3RtcHN0cixzKTsKKwkJCX0KKwkJCWJyZWFrOworCisJCSAgICAgIGNhc2Ug U1NIU1dfVkVSOgorCQkJaWYgKCh4ID0gY21udW0oIk51bWJlciIsIiIsMTAsJnoseHhzdHJpbmcp KSA8IDApCisJCQkgIHJldHVybih4KTsKKwkJCWlmICh6IDwgMSB8fCB6ID4gMikgeworCQkJICAg IHByaW50ZigiP091dCBvZiByYW5nZTogJWRcbiIseik7CisJCQkgICAgcmV0dXJuKC05KTsKKwkJ CX0KKyAgICAgICAgICAgICAgICAgICAgICAgIHRtcHZlciA9IHo7CisJCQlicmVhazsKKwkJICAg ICAgY2FzZSBTU0hTV19DTUQ6CisJCSAgICAgIGNhc2UgU1NIU1dfU1VCOgorCQkJaWYgKCh4ID0g Y21mbGQoIlRleHQiLCIiLCZzLHh4c3RyaW5nKSkgPCAwKQorCQkJICByZXR1cm4oeCk7CisgICAg ICAgICAgICAgICAgICAgICAgICBtYWtlc3RyKCZzc2hfdG1wY21kLHMpOworCQkJc3NoX2NhcyA9 IChjbXJlc3VsdC5ucmVzdWx0ID09IFNTSFNXX1NVQik7CisJCQlicmVhazsKKwkJICAgICAgY2Fz ZSBTU0hTV19YMTE6CisJCQlpZiAoKHggPSBjbWtleShvbm9mZiwyLCIiLCJvbiIseHhzdHJpbmcp KSA8IDApCisJCQkgIHJldHVybih4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRtcHhmdyA9 IHg7CisJCQlicmVhazsKKwkJICAgICAgZGVmYXVsdDoKKwkJICAgICAgICByZXR1cm4oLTIpOwor CQkgICAgfQorCQl9CisJCWlmICh0cmlwcysrID09IDApIHsJLyogQWZ0ZXIgZmlyc3QgdGltZSB0 aHJvdWdoICovCisJCSAgICBjbWZkYmkoJmt3LAkJLyogb25seSBwYXJzZSBzd2l0Y2hlcywgbm90 IHBvcnQuICovCisJCQkgICBfQ01LRVksCisJCQkgICAiU3dpdGNoIiwKKwkJCSAgICIiLAorCQkJ ICAgIiIsCisJCQkgICBuc3Nob3Buc3csCisJCQkgICA0LAorCQkJICAgeHhzdHJpbmcsCisJCQkg ICBzc2hvcG5zdywKKwkJCSAgIE5VTEwKKwkJCSAgICk7CisJCX0KKwkgICAgfQorCSAgICBpZiAo KHggPSBjbWNmbSgpKSA8IDApCS8qIEdldCBjb25maXJtYXRpb24gKi8KKwkgICAgICByZXR1cm4o eCk7CisgICAgICAgICAgICBpZiAoY2xza2Nvbm54KDEpIDwgMCkgewkvKiBDbG9zZSBjdXJyZW50 IEtlcm1pdCBjb25uZWN0aW9uICovCisgICAgICAgICAgICAgIGlmICggc3NoX3RtcHN0ciApIHsK KyAgICAgICAgICAgICAgICAgIG1lbXNldChzc2hfdG1wc3RyLDAsc3RybGVuKHNzaF90bXBzdHIp KTsKKyAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJnNzaF90bXBzdHIsTlVMTCk7CisgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKyAgICAgICAgICAg IH0KKwkgICAgbWFrZXN0cigmc3NoX2hzdCxsaW5lKTsJLyogU3Rhc2ggZXZlcnl0aGluZyAqLwor CSAgICBpZiAoc3NoX3RtcHVpZCkgeworICAgICAgICAgICAgICAgIGlmICghc2xfdWlkX3NhdmVk KSB7CisgICAgICAgICAgICAgICAgICAgIGNrc3RybmNweShzbF91aWRidWYsdWlkYnVmLFVJREJV RkxFTik7CisgICAgICAgICAgICAgICAgICAgIHNsX3VpZF9zYXZlZCA9IDE7CisgICAgICAgICAg ICAgICAgfQorCQlja3N0cm5jcHkodWlkYnVmLHNzaF90bXB1aWQsVUlEQlVGTEVOKTsKKwkJbWFr ZXN0cigmc3NoX3RtcHVpZCxOVUxMKTsKKwkgICAgfQorICAgICAgICAgICAgaWYgKHNzaF90bXBw b3J0KSB7CisgICAgICAgICAgICAgICAgbWFrZXN0cigmc3NoX3BydCxzc2hfdG1wcG9ydCk7Cisg ICAgICAgICAgICAgICAgbWFrZXN0cigmc3NoX3RtcHBvcnQsTlVMTCk7CisgICAgICAgICAgICB9 IGVsc2UKKyAgICAgICAgICAgICAgICBtYWtlc3RyKCZzc2hfcHJ0LE5VTEwpOworCisgICAgICAg ICAgICBpZiAoc3NoX3RtcGNtZCkgeworICAgICAgICAgICAgICAgIG1ha2VzdHIoJnNzaF9jbWQs YnJzdHJpcChzc2hfdG1wY21kKSk7CisgICAgICAgICAgICAgICAgbWFrZXN0cigmc3NoX3RtcGNt ZCxOVUxMKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIG1ha2VzdHIoJnNz aF9jbWQsTlVMTCk7CisKKyAgICAgICAgICAgIGlmICh0bXB2ZXIgPiAtMSkgeworI2lmbmRlZiBT U0hURVNUCisgICAgICAgICAgICAgICAgaWYgKCFzbF9zc2hfdmVyX3NhdmVkKSB7CisgICAgICAg ICAgICAgICAgICAgIHNsX3NzaF92ZXIgPSBzc2hfdmVyOworICAgICAgICAgICAgICAgICAgICBz bF9zc2hfdmVyX3NhdmVkID0gMTsKKyAgICAgICAgICAgICAgICB9CisjZW5kaWYgLyogU1NIVEVT VCAqLworICAgICAgICAgICAgICAgIHNzaF92ZXIgPSB0bXB2ZXI7CisgICAgICAgICAgICB9Cisg ICAgICAgICAgICBpZiAodG1weGZ3ID4gLTEpIHsKKyNpZm5kZWYgU1NIVEVTVAorICAgICAgICAg ICAgICAgIGlmICghc2xfc3NoX3hmd19zYXZlZCkgeworICAgICAgICAgICAgICAgICAgICBzbF9z c2hfeGZ3ID0gc3NoX3hmdzsKKyAgICAgICAgICAgICAgICAgICAgc2xfc3NoX3hmd19zYXZlZCA9 IDE7CisgICAgICAgICAgICAgICAgfQorI2VuZGlmIC8qIFNTSFRFU1QgKi8KKyAgICAgICAgICAg ICAgICBzc2hfeGZ3ID0gdG1weGZ3OworICAgICAgICAgICAgfQorCSAgICBpZiAoc3NoX3RtcHN0 cikgeworCQlpZiAoc3NoX3RtcHN0clswXSkgeworCQkgICAgY2tzdHJuY3B5KHB3YnVmLHNzaF90 bXBzdHIsUFdCVUZMKzEpOworCQkgICAgcHdmbGcgPSAxOworCQkgICAgcHdjcnlwdCA9IDA7CisJ CX0gZWxzZQorCQkgIHB3ZmxnID0gMDsKKwkJbWFrZXN0cigmc3NoX3RtcHN0cixOVUxMKTsKKwkg ICAgfQorCSAgICBuZXR0eXBlID0gTkVUX1NTSDsKKwkgICAgaWYgKG1kbXNhdiA8IDApCisJICAg ICAgbWRtc2F2ID0gbWRtdHlwOworCSAgICBtZG10eXAgPSAtbmV0dHlwZTsKKwkgICAgeCA9IDE7 CisKKyNpZm5kZWYgTk9TUEwKKyAgICAgICAgICAgIG1ha2VzdHIoJmdfcHN3ZCxwd2J1Zik7ICAg ICAgICAgICAgIC8qIFNhdmUgZ2xvYmFsIHB3YnVmICovCisgICAgICAgICAgICBnX3BmbGcgPSBw d2ZsZzsgICAgICAgICAgICAgICAgICAgICAvKiBhbmQgZmxhZyAqLworICAgICAgICAgICAgZ19w Y3B0ID0gcHdjcnlwdDsKKyNlbmRpZiAvKiBOT1NQTCAqLworCisJICAgIC8qIExpbmUgcGFyYW1l dGVyIHRvIHR0b3BlbigpIGlzIGlnbm9yZWQgKi8KKwkgICAgZGVidWcoRjExMCwiU1NIIGxpbmUi LGxpbmUsMCk7CisJICAgIGsgPSB0dG9wZW4obGluZSwmeCxtZG10eXAsIDApOworCSAgICBpZiAo ayA8IDApIHsKKwkJcHJpbnRmKCI/VW5hYmxlIHRvIGNvbm5lY3QgdG8gJXNcbiIsc3NoX2hzdCk7 CisJCW1kbXR5cCA9IG1kbXNhdjsKKyAgICAgICAgICAgICAgICBzbHJlc3RvcigpOworCQlyZXR1 cm4oc3VjY2VzcyA9IDApOworCSAgICB9CisJICAgIGR1cGxleCA9IDA7ICAgICAgICAgICAgIC8q IFJlbW90ZSBlY2hvICovCisJICAgIGNrc3RybmNweSh0dG5hbWUsbGluZSxUVE5BTUxFTik7IC8q IFJlY29yZCB0aGUgY29tbWFuZCAqLworCSAgICBkZWJ1ZyhGMTEwLCJzc2ggdHRuYW1lIix0dG5h bWUsMCk7CisJICAgIG1ha2VzdHIoJnNsbXNnLE5VTEwpOwkvKiBObyBTRVQgTElORSBlcnJvciBt ZXNzYWdlICovCisJICAgIGN4dHlwZSA9IENYVF9TU0g7CisjaWZuZGVmIE5PRElBTAorCSAgICBk aWFsc3RhID0gRElBX1VOSzsKKyNlbmRpZiAvKiBOT0RJQUwgKi8KKwkgICAgc3VjY2VzcyA9IDE7 CQkvKiBTRVQgTElORSBzdWNjZWVkZWQgKi8KKwkgICAgbmV0d29yayA9IDE7CQkvKiBOZXR3b3Jr IGNvbm5lY3Rpb24gKG5vdCBzZXJpYWwpICovCisJICAgIGxvY2FsID0gMTsJCQkvKiBMb2NhbCBt b2RlIChub3QgcmVtb3RlKSAqLworCSAgICBpZiAoKHJlbGlhYmxlICE9IFNFVF9PRkYgfHwgIXNl dHJlbGlhYmxlKSkKKwkgICAgICByZWxpYWJsZSA9IFNFVF9PTjsJLyogVHJhbnNwb3J0IGlzIHJl bGlhYmxlIGVuZCB0byBlbmQgKi8KKyNpZmRlZiBPUzIKKyAgICAgICAgICAgIERpYWxlclNlbmQo T1BUX0tFUk1JVF9DT05ORUNULCAwKTsKKyNlbmRpZiAvKiBPUzIgKi8KKwkgICAgc2V0Zmxvdygp OwkJCS8qIFNldCBhcHByb3ByaWF0ZSBmbG93IGNvbnRyb2wgKi8KKworCSAgICBoYXZlbGluZSA9 IDE7CisjaWZkZWYgQ0tMT0dESUFMCisjaWZkZWYgTkVUQ09OTgorCSAgICBkb2xvZ25ldCgpOwor I2VuZGlmIC8qIE5FVENPTk4gKi8KKyNlbmRpZiAvKiBDS0xPR0RJQUwgKi8KKworI2lmbmRlZiBO T1NQTAorCSAgICBpZiAobG9jYWwpIHsKKwkJaWYgKG5tYWMpIHsJCS8qIEFueSBtYWNyb3MgZGVm aW5lZD8gKi8KKwkJICAgIGludCBrOwkJLyogWWVzICovCisJCSAgICBrID0gbWxvb2sobWFjdGFi LCJvbl9vcGVuIixubWFjKTsgLyogTG9vayB0aGlzIHVwICovCisJCSAgICBpZiAoayA+PSAwKSB7 CSAgICAgICAgICAgICAgLyogSWYgZm91bmQsICovCisJCQlpZiAoZG9kbyhrLHNzaF9oc3QsMCkg PiAtMSkgICAvKiBzZXQgaXQgdXAsICovCisJCQkgIHBhcnNlcigxKTsJCSAgICAgIC8qIGFuZCBl eGVjdXRlIGl0ICovCisJCSAgICB9CisJCX0KKwkgICAgfQorI2VuZGlmIC8qIE5PU1BMICovCisj aWZkZWYgTE9DVVMJCQorCSAgICBpZiAoYXV0b2xvY3VzKQorCQlzZXRsb2N1cygxLDEpOworI2Vu ZGlmIC8qIExPQ1VTICovCisKKwkvKiBDb21tYW5kIHdhcyBjb25maXJtZWQgc28gd2UgY2FuIHBy ZS1wb3AgY29tbWFuZCBsZXZlbC4gKi8KKwkvKiBUaGlzIGlzIHNvIENPTk5FQ1QgbW9kdWxlIHdv bid0IHRoaW5rIHdlJ3JlIGV4ZWN1dGluZyBhICovCisJLyogc2NyaXB0IGlmIENPTk5FQ1Qgd2Fz IHRoZSBmaW5hbCBjb21tYW5kIGluIHRoZSBzY3JpcHQuICovCisJICAgIGlmIChjbWRsdmwgPiAw KQorCSAgICAgIHByZXBvcCgpOworCSAgICBzdWNjZXNzID0gZG9jb25lY3QoMCxjbWRsdmwgPT0g MCA/IDEgOiAwKTsKKwkgICAgaWYgKHR0Y2hrKCkgPCAwKQorCSAgICAgIGRvbG9nZW5kKCk7CisJ ICAgIHJldHVybihzdWNjZXNzKTsKKworCSAgY2FzZSBYU1NIX0NMUjoKKwkgICAgaWYgKCh5ID0g Y21rZXkoc3NoY2xyLG5zc2hjbHIsIiIsIiIsIHh4c3RyaW5nKSkgPCAwKSB7CisJICAgICAgICBp ZiAoeSA9PSAtMykgeworCQkgICAgcHJpbnRmKCI/Y2xlYXIgd2hhdD9cbiIpOworCQkgICAgcmV0 dXJuKC05KTsKKwkJfQorCSAgICAgICAgcmV0dXJuKHkpOworCSAgICB9CisJICAgIGlmICgoeCA9 IGNtY2ZtKCkpIDwgMCkKKwkgICAgICByZXR1cm4oeCk7CisJICAgIHN3aXRjaCAoeSkgeworCSAg ICAgIGNhc2UgU1NIQ19MUEY6CisgICAgICAgICAgICAgICAgc3NoX3BmX2xjbF9uID0gMDsKKwkJ YnJlYWs7CisJICAgICAgY2FzZSBTU0hDX1JQRjoKKwkJc3NoX3BmX3JtdF9uID0gMDsKKwkJYnJl YWs7CisJICAgICAgZGVmYXVsdDoKKwkJcmV0dXJuKC0yKTsKKwkgICAgfQorICAgICAgICAgICAg cmV0dXJuKHN1Y2Nlc3MgPSAxKTsJLyogb3Igd2hhdGV2ZXIgKi8KKworCSAgY2FzZSBYU1NIX0FH VDogewkJLyogU1NIIEFHRU5UICovCisJICAgICAgaW50IGRvZWFjaCA9IDA7CisJICAgICAgaWYg KCh5ID0gY21rZXkoc3NoYWdlbnQsbnNzaGFnZW50LCIiLCIiLHh4c3RyaW5nKSkgPCAwKQorCQly ZXR1cm4oeSk7CisJICAgICAgc3dpdGNoICh5KSB7CisJCWNhc2UgU1NIQV9BREQ6CQkvKiBTU0gg QUdFTlQgQUREIC4uLiAqLworCQkgIGlmICgoeCA9IGNtaWZpKCJJZGVudGl0eSBmaWxlIiwiIiwm cywmeSx4eHN0cmluZykpIDwgMCkgeworI2lmbmRlZiBTU0hURVNUCisJCSAgICAgIGlmICh4ID09 IC0zKQkvKiBObyBuYW1lIGdpdmVuICovCisJCQlkb2VhY2ggPSAxOwkvKiBzbyBkbyB0aGVtIGFs bCAqLworCQkgICAgICBlbHNlCisjZW5kaWYgLyogU1NIVEVTVCAqLworCQkJcmV0dXJuKHgpOwor CQkgIH0KKwkJICBja3N0cm5jcHkobGluZSxzLExJTkJVRlNJWik7CisJCSAgaWYgKCh4ID0gY21j Zm0oKSkgPCAwKQorCQkgICAgcmV0dXJuKHgpOworI2lmZGVmIFNTSFRFU1QKKwkJICB4ID0gMDsK KyNlbHNlCisJCSAgaWYgKGRvZWFjaCkgeworICAgICAgICAgICAgICAgICAgICAgIGludCBpOwor ICAgICAgICAgICAgICAgICAgICAgIHggPSAwOworICAgICAgICAgICAgICAgICAgICAgIGZvciAo aSA9IDA7IGkgPCBzc2hfaWRmX247IGkrKykKKwkJCXggKz0gc3NoX2FnZW50X2FkZF9maWxlKHNz aF9pZGZbaV0pOworCQkgIH0gZWxzZQorCQkgICAgeCA9IHNzaF9hZ2VudF9hZGRfZmlsZShsaW5l KTsKKyNlbmRpZiAvKiBTU0hURVNUICovCisJCSAgcmV0dXJuKHN1Y2Nlc3MgPSAoeCA9PSAwKSk7 CisKKwkJY2FzZSBTU0hBX0RFTDogewkvKiBTU0ggQUdFTlQgREVMRVRFIC4uLiAqLworCQkgICAg aW50IGRvYWxsID0gMDsKKwkJICAgIGlmICgoeCA9IGNtaWZpKCJJZGVudGl0eSBmaWxlIiwiIiwm cywmeSx4eHN0cmluZykpIDwgMCkgeworI2lmbmRlZiBTU0hURVNUCisJCQlpZiAoeCA9PSAtMykJ LyogTm8gbmFtZSBnaXZlbiAqLworCQkJICBkb2FsbCA9IDE7CS8qIHNvIGRvIHRoZW0gYWxsICov CisJCQllbHNlCisjZW5kaWYgLyogU1NIVEVTVCAqLworCQkJICByZXR1cm4oeCk7CisJCSAgICB9 CisJCSAgICBja3N0cm5jcHkobGluZSxzLExJTkJVRlNJWik7CisJCSAgICBpZiAoKHggPSBjbWNm bSgpKSA8IDApCisJCSAgICAgIHJldHVybih4KTsKKyNpZmRlZiBTU0hURVNUCisJCSAgICB4ID0g MDsKKyNlbHNlCisJCSAgICBpZiAoZG9hbGwpCisJCSAgICAgIHggPSBzc2hfYWdlbnRfZGVsZXRl X2FsbCgpOworCQkgICAgZWxzZQorCQkgICAgICB4ID0gc3NoX2FnZW50X2RlbGV0ZV9maWxlKGxp bmUpOworI2VuZGlmIC8qIFNTSFRFU1QgKi8KKwkJICAgIHJldHVybihzdWNjZXNzID0gKHggPT0g MCkpOworCQl9CisJCWNhc2UgU1NIQV9MU1Q6IHsKKwkJICAgIGludCBmaW5nZXJwcmludCA9IDA7 CisJCSAgICBpZiAoKHkgPSBjbXN3aShzc2hhZ3Rzdyxuc3NoYWd0c3csIiIsIiIseHhzdHJpbmcp KSA8IDApIHsKKwkJCWlmICh5ICE9IC0zKQorCQkJICByZXR1cm4oeSk7CisJCSAgICB9IGVsc2Ug aWYgKGNtZ2JyaygpID4gU1ApIHsKKwkJCXByaW50ZigiP1RoaXMgc3dpdGNoIGRvZXMgbm90IHRh a2UgYW4gYXJndW1lbnRcbiIpOworCQkJcmV0dXJuKC05KTsKKwkJICAgIH0gZWxzZSBpZiAoeSA9 PSBTU0hBU1dfRlApIHsKKwkJCWZpbmdlcnByaW50ID0gMTsKKwkJICAgIH0KKwkJICAgIGlmICgo eCA9IGNtY2ZtKCkpIDwgMCkKKwkJICAgICAgcmV0dXJuKHgpOworI2lmZGVmIFNTSFRFU1QKKwkJ ICAgIHJldHVybihzdWNjZXNzID0gMSk7CisjZWxzZQorCQkgICAgcmV0dXJuKHN1Y2Nlc3MgPQor CQkJICAgKHNzaF9hZ2VudF9saXN0X2lkZW50aXRpZXMoZmluZ2VycHJpbnQpID09IDApKTsKKyNl bmRpZiAvKiBTU0hURVNUICovCisJCX0KKwkJZGVmYXVsdDoKKwkJICByZXR1cm4oLTIpOworCSAg ICAgIH0KKwkgIH0KKwkgIGNhc2UgWFNTSF9BREQ6IHsJCS8qIFNTSCBBREQgKi8KKwkgICAgICAv KiBzc2ggYWRkIHsgbG9jYWwsIHJlbW90ZSB9IHBvcnQgaG9zdCBwb3J0ICovCisJICAgICAgaW50 IGN4LCBpLCBqLCBrOworCSAgICAgIGNoYXIgKiBoOworCSAgICAgIGlmICgoY3ggPSBjbWtleShh ZGRmd2QsbmFkZGZ3ZCwiIiwiIiwgeHhzdHJpbmcpKSA8IDApCisJCXJldHVybihjeCk7CisJICAg ICAgaWYgKCh4ID0gY21udW0oKGN4ID09IFNTSEZfTENMKSA/CisJCQkgICAgICJMb2NhbCBwb3J0 IG51bWJlciIgOiAiUmVtb3RlIHBvcnQgbnVtYmVyIiwKKwkJCSAgICAgIiIsMTAsJmoseHhzdHJp bmcpKSA8IDApCisJCXJldHVybih4KTsKKwkgICAgICBpZiAoKHggPSBjbWZsZCgiSG9zdCIsIiIs JnMseHhzdHJpbmcpKSA8IDApCisJCXJldHVybih4KTsKKwkgICAgICBtYWtlc3RyKCZoLHMpOwor CSAgICAgIGlmICgoeCA9IGNtbnVtKCJQb3J0IiwiIiwxMCwmayx4eHN0cmluZykpIDwgMCkKKwkJ cmV0dXJuKHgpOworCSAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkKKwkJcmV0dXJuKHgpOwor CisJICAgICAgc3dpdGNoKGN4KSB7CisJCWNhc2UgU1NIRl9MQ0w6CisJCSAgIGlmIChzc2hfcGZf bGNsX24gPT0gMzIpIHsKKwkJICAgICAgIHByaW50ZigKKyI/TWF4aW11bSBudW1iZXIgb2YgbG9j YWwgcG9ydCBmb3J3YXJkaW5ncyBhbHJlYWR5IHNwZWNpZmllZFxuIgorCQkJICAgICApOworCQkg ICAgICAgZnJlZShoKTsKKwkJICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7CisJCSAgfQorCQkg IHNzaF9wZl9sY2xbc3NoX3BmX2xjbF9uXS5wMSA9IGo7CisJCSAgbWFrZXN0cigmKHNzaF9wZl9s Y2xbc3NoX3BmX2xjbF9uXS5ob3N0KSxoKTsKKwkJICBtYWtlc3RyKCZoLE5VTEwpOworCQkgIHNz aF9wZl9sY2xbc3NoX3BmX2xjbF9uXS5wMiA9IGs7CisJCSAgc3NoX3BmX2xjbF9uKys7CisJCSAg YnJlYWs7CisJCWNhc2UgU1NIRl9STVQ6CisJCSAgaWYgKHNzaF9wZl9ybXRfbiA9PSAzMikgewor CQkgICAgICBwcmludGYoCisiP01heGltdW0gbnVtYmVyIG9mIHJlbW90ZSBwb3J0IGZvcndhcmRp bmdzIGFscmVhZHkgc3BlY2lmaWVkXG4iCisJCQkgICAgKTsKKwkJICAgICAgZnJlZShoKTsKKwkJ ICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKwkJICB9CisJCSAgc3NoX3BmX3JtdFtzc2hfcGZf cm10X25dLnAxID0gajsKKwkJICBtYWtlc3RyKCYoc3NoX3BmX3JtdFtzc2hfcGZfcm10X25dLmhv c3QpLGgpOworCQkgIG1ha2VzdHIoJmgsTlVMTCk7CisJCSAgc3NoX3BmX3JtdFtzc2hfcGZfcm10 X25dLnAyID0gazsKKwkJICBzc2hfcGZfcm10X24rKzsKKwkgICAgICB9CisJICAgICAgcmV0dXJu KHN1Y2Nlc3MgPSAxKTsKKwkgIH0KKwkgIC8qIE5vdCBzdXBwb3J0aW5nIGFyYml0cmFyeSBmb3J3 YXJkaW5nIHlldCAqLworCSAgY2FzZSBYU1NIX0ZMUDoJCS8qIFNTSCBGT1JXQVJELUxPQ0FMLVBP UlQgKi8KKwkgIGNhc2UgWFNTSF9GUlA6IHsJCS8qIFNTSCBGT1JXQVJELVJFTU9URS1QT1JUICov CisJICAgICAgaW50IGxpX3BvcnQgPSAwOworCSAgICAgIGludCB0b19wb3J0ID0gMDsKKwkgICAg ICBjaGFyICogZndfaG9zdCA9IE5VTEw7CisJICAgICAgaW50IG47CisgICAgICAgICAgICAgIGlm ICgoeCA9IGNtbnVtKGNtcmVzdWx0Lm5yZXN1bHQgPT0gWFNTSF9GTFAgPworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgImxvY2FsLXBvcnQiOiJyZW1vdGUtcG9ydCIsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAiIiwxMCwmbGlfcG9ydCx4eHN0cmluZykpIDwgMCkKKyAgICAg ICAgICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgICAgICAgaWYgKGxpX3BvcnQgPCAxIHx8 IGxpX3BvcnQgPiA2NTUzNSkgeworICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/T3V0IHJhbmdl IC0gbWluOiAxLCBtYXg6IDY1NTM1XG4iKTsKKyAgICAgICAgICAgICAgICAgIHJldHVybigtOSk7 CisgICAgICAgICAgICAgIH0KKwkgICAgICBpZiAoKHggPSBjbWZsZCgiaG9zdCIsc3NoX2hzdD9z c2hfaHN0OiIiLCZzLHh4c3RyaW5nKSkgPCAwKQorCQlyZXR1cm4oeCk7CisgICAgICAgICAgICAg IG4gPSBja3N0cm5jcHkodG1wYnVmLHMsVE1QQlVGU0laKTsKKyAgICAgICAgICAgICAgZndfaG9z dCA9IHRtcGJ1ZjsKKyAgICAgICAgICAgICAgaWYgKCh4ID0gY21udW0oImhvc3QtcG9ydCIsY2t1 aXRvYShsaV9wb3J0KSwxMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0b19wb3J0 LHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICAg ICAgICBpZiAodG9fcG9ydCA8IDEgfHwgdG9fcG9ydCA+IDY1NTM1KSB7CisgICAgICAgICAgICAg ICAgICBwcmludGYoIj9PdXQgcmFuZ2UgLSBtaW46IDEsIG1heDogNjU1MzVcbiIpOworICAgICAg ICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgICAgICAgfQorCSAgICAgIGlmICgoeCA9 IGNtY2ZtKCkpIDwgMCkKKwkJcmV0dXJuKHgpOworCSAgICAgIHN3aXRjaCAoY21yZXN1bHQubnJl c3VsdCkgeworICAgICAgICAgICAgICAgIGNhc2UgWFNTSF9GTFA6CS8qIFNTSCBGT1JXQVJELUxP Q0FMLVBPUlQgKi8KKyNpZm5kZWYgU1NIVEVTVAorICAgICAgICAgICAgICAgICAgc3NoX2Z3ZF9s b2NhbF9wb3J0KGxpX3BvcnQsZndfaG9zdCx0b19wb3J0KTsKKyNlbmRpZiAvKiBTU0hURVNUICov CisJCSAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKwkJY2FzZSBYU1NIX0ZSUDoJLyogU1NIIEZPUldB UkQtUkVNT1RFLVBPUlQgKi8KKyNpZm5kZWYgU1NIVEVTVAorICAgICAgICAgICAgICAgICAgc3No X2Z3ZF9yZW1vdGVfcG9ydChsaV9wb3J0LGZ3X2hvc3QsdG9fcG9ydCk7CisjZW5kaWYgLyogU1NI VEVTVCAqLworCQkgIHJldHVybihzdWNjZXNzID0gMSk7CisJICAgICAgfQorCSAgICAgIHJldHVy bihzdWNjZXNzID0gMSk7CisJICB9CisJY2FzZSBYU1NIX1YyOgkJLyogU1NIIFYyICovCisJICBp ZiAoKGN4ID0gY21rZXkoc3NoMnRhYixuc3NoMnRhYiwiIiwiIiwgeHhzdHJpbmcpKSA8IDApCisJ ICAgIHJldHVybihjeCk7CisJICBzd2l0Y2ggKGN4KSB7CisJICAgIGNhc2UgWFNTSDJfUktFOgor CSAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkKKwkJcmV0dXJuKHgpOworI2lmbmRlZiBTU0hU RVNUCisJICAgICAgc3NoX3YyX3Jla2V5KCk7CisjZW5kaWYgLyogU1NIVEVTVCAqLworCSAgICAg IHJldHVybihzdWNjZXNzID0gMSk7CisJICAgIGRlZmF1bHQ6CisJICAgICAgcmV0dXJuKC0yKTsK KwkgIH0KKwljYXNlIFhTU0hfS0VZOgorCSAgaWYgKChjeCA9IGNta2V5KHNzaGtleSxuc3Noa2V5 LCIiLCIiLCB4eHN0cmluZykpIDwgMCkKKwkgICAgcmV0dXJuKGN4KTsKKwkgIHN3aXRjaCAoY3gp IHsKKwkgICAgY2FzZSBTU0hLX1BBU1M6IHsJLyogQ2hhbmdlIHBhc3NwaHJhc2UgKi8KKwkgICAg ICBjaGFyICogb2xkcCA9IE5VTEwsICogbmV3cCA9IE5VTEw7CisJICAgICAgc3RydWN0IEZEQiBk Ziwgc3c7CisJICAgICAgY21mZGJpKCZzdywKKwkJICAgICBfQ01LRVksCQkvKiBmY29kZSAqLwor CQkgICAgICJGaWxlbmFtZSwgb3Igc3dpdGNoIiwgLyogaGxwbXNnICovCisJCSAgICAgIiIsCQkv KiBkZWZhdWx0ICovCisJCSAgICAgIiIsCQkvKiBhZGR0bCBzdHJpbmcgZGF0YSAqLworCQkgICAg IDIsCQkJLyogYWRkdGwgbnVtZXJpYyBkYXRhIDE6IHRibCBzaXplICovCisJCSAgICAgNCwJCQkv KiBhZGR0bCBudW1lcmljIGRhdGEgMjogNCA9IGNtc3dpICovCisJCSAgICAgeHhzdHJpbmcsCQkv KiBQcm9jZXNzaW5nIGZ1bmN0aW9uICovCisJCSAgICAgc3Noa3BzdywJCS8qIEtleXdvcmQgdGFi bGUgKi8KKwkJICAgICAmZGYJCS8qIFBvaW50ZXIgdG8gbmV4dCBGREIgKi8KKwkJICAgICApOwor CSAgICAgIGNtZmRiaSgmZGYsCQkvKiAybmQgRkRCIC0gZmlsZSBmb3IgZGlzcGxheSAqLworCQkg ICAgIF9DTUlGSSwJCS8qIG91dHB1dCBmaWxlICovCisJCSAgICAgIiIsCQkvKiBobHBtc2cgKi8K KwkJICAgICAiIiwJCS8qIGRlZmF1bHQgKi8KKwkJICAgICAiIiwJCS8qIGFkZHRsIHN0cmluZyBk YXRhICovCisJCSAgICAgMCwJCQkvKiBhZGR0bCBudW1lcmljIGRhdGEgMSAqLworCQkgICAgIDAs CQkJLyogYWRkdGwgbnVtZXJpYyBkYXRhIDIgKi8KKwkJICAgICB4eHN0cmluZywKKwkJICAgICBO VUxMLAorCQkgICAgIE5VTEwKKwkJICAgICApOworCSAgICAgIGxpbmVbMF0gPSBOVUw7CisKKwkg ICAgICB3aGlsZSAoMSkgeworCQkgIHggPSBjbWZkYigmc3cpOworCQkgIGlmICh4ID09IC0zKSBi cmVhazsKKwkJICBpZiAoeCA8IDApCisJCSAgICByZXR1cm4oeCk7CisJCSAgaWYgKGNtcmVzdWx0 LmZjb2RlICE9IF9DTUtFWSkKKwkJICAgIGJyZWFrOworCQkgIGlmICghY21nYnJrKCkpIHsKKwkJ ICAgICAgcHJpbnRmKCI/VGhpcyBzd2l0Y2ggcmVxdWlyZXMgYW4gYXJndW1lbnRcbiIpOworCQkg ICAgICByZXR1cm4oLTkpOworCQkgIH0KKwkJICBpZiAoKHkgPSBjbWZsZCgiUGFzc3BocmFzZSIs IiIsJnMseHhzdHJpbmcpKSA8IDApCisJCSAgICByZXR1cm4oeSk7CisJCSAgc3dpdGNoIChjbXJl c3VsdC5ucmVzdWx0KSB7CisJCSAgICBjYXNlIDE6CQkvKiBPbGQgKi8KKwkJICAgICAgbWFrZXN0 cigmb2xkcCxzKTsKKwkJICAgICAgYnJlYWs7CisJCSAgICBjYXNlIDI6CQkvKiBOZXcgKi8KKwkJ ICAgICAgbWFrZXN0cigmbmV3cCxzKTsKKwkJICB9CisJICAgICAgfQorCSAgICAgIGlmIChjbXJl c3VsdC5mY29kZSA9PSBfQ01JRkkpIHsgLyogRmlsZW5hbWUgKi8KKwkJICBja3N0cm5jcHkobGlu ZSxjbXJlc3VsdC5zcmVzdWx0LExJTkJVRlNJWik7CisJCSAgaWYgKHpmbnFmcChsaW5lLFRNUEJV RlNJWix0bXBidWYpKQorCQkgICAgY2tzdHJuY3B5KGxpbmUsdG1wYnVmLExJTkJVRlNJWik7CisJ ICAgICAgfQorCSAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOworCisjaWZu ZGVmIFNTSFRFU1QKKwkgICAgICB4ID0gc3Noa2V5X2NoYW5nZV9wYXNzcGhyYXNlKGxpbmVbMF0g PyBsaW5lIDogTlVMTCwKKwkJCQkJICAgICBvbGRwLCBuZXdwKTsKKyNlbmRpZiAvKiBTU0hURVNU ICovCisJICAgICAgbWFrZXN0cigmb2xkcCxOVUxMKTsKKwkgICAgICBtYWtlc3RyKCZuZXdwLE5V TEwpOworCSAgICAgIHN1Y2Nlc3MgPSAoeCA9PSAwKTsKKwkgICAgICByZXR1cm4oc3VjY2Vzcyk7 CisJICAgIH0KKwkgICAgY2FzZSBTU0hLX0NSRUE6IHsJLyogU1NIIEtFWSBDUkVBVEUgL3N3aXRj aGVzLi4uICovCisJICAgICAgaW50IGJpdHMgPSAxMDI0LCBrZXl0eXBlID0gU1NIS1RfMlI7CisJ ICAgICAgY2hhciAqIHBhc3MgPSBOVUxMLCAqIGNvbW1lbnQgPSBOVUxMOworCSAgICAgIHN0cnVj dCBGREIgZGYsIHN3OworCisgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAqIGNoYXIg KiBzc2hrZXlfZGVmYXVsdF9maWxlKGludCBrZXl0eXBlKSAKKyAgICAgICAgICAgICAgICogd2ls bCBwcm92aWRlIHRoZSBkZWZhdWx0IGZpbGVuYW1lIGZvciBhIGdpdmVuIGtleXR5cGUKKyAgICAg ICAgICAgICAgICogaXMgaXQgcG9zc2libGUgdG8gaGF2ZSB0aGUgZGVmYXVsdCB2YWx1ZSBmb3Ig dGhlIDJuZAorICAgICAgICAgICAgICAgKiBGREIgc2V0IGFuZCBjaGFuZ2VkIHdoZW4gYSAvVFlQ RSBzd2l0Y2ggaXMgcHJvdmlkZWQ/CisgICAgICAgICAgICAgICAqIFdvdWxkIHRoaXMgYWxsb3cg Zm9yIHRhYiBjb21wbGV0aW9uIG9mIHRoZSBmaWxlbmFtZT8KKyAgICAgICAgICAgICAgICovCisJ ICAgICAgY21mZGJpKCZzdywKKwkJICAgICBfQ01LRVksCQkvKiBmY29kZSAqLworCQkgICAgICJG aWxlbmFtZSwgb3Igc3dpdGNoIiwgLyogaGxwbXNnICovCisJCSAgICAgIiIsCQkvKiBkZWZhdWx0 ICovCisJCSAgICAgIiIsCQkvKiBhZGR0bCBzdHJpbmcgZGF0YSAqLworCQkgICAgIG5zc2hrY3Jl YSwJCS8qIGFkZHRsIG51bWVyaWMgZGF0YSAxOiB0Ymwgc2l6ZSAqLworCQkgICAgIDQsCQkJLyog YWRkdGwgbnVtZXJpYyBkYXRhIDI6IDQgPSBjbXN3aSAqLworCQkgICAgIHh4c3RyaW5nLAkJLyog UHJvY2Vzc2luZyBmdW5jdGlvbiAqLworCQkgICAgIHNzaGtjcmVhLAkJLyogS2V5d29yZCB0YWJs ZSAqLworCQkgICAgICZkZgkJLyogUG9pbnRlciB0byBuZXh0IEZEQiAqLworCQkgICAgICk7CisJ ICAgICAgY21mZGJpKCZkZiwJCS8qIDJuZCBGREIgLSBmaWxlIGZvciBkaXNwbGF5ICovCisJCSAg ICAgX0NNT0ZJLAkJLyogb3V0cHV0IGZpbGUgKi8KKwkJICAgICAiIiwJCS8qIGhscG1zZyAqLwor CQkgICAgICIiLAkJLyogZGVmYXVsdCAqLworCQkgICAgICIiLAkJLyogYWRkdGwgc3RyaW5nIGRh dGEgKi8KKwkJICAgICAwLAkJCS8qIGFkZHRsIG51bWVyaWMgZGF0YSAxICovCisJCSAgICAgMCwJ CQkvKiBhZGR0bCBudW1lcmljIGRhdGEgMiAqLworCQkgICAgIHh4c3RyaW5nLAorCQkgICAgIE5V TEwsCisJCSAgICAgTlVMTAorCQkgICAgICk7CisJICAgICAgbGluZVswXSA9IE5VTDsKKworCSAg ICAgIHdoaWxlICgxKSB7CisJCSAgeCA9IGNtZmRiKCZzdyk7CisJCSAgaWYgKHggPT0gLTMpIGJy ZWFrOworCQkgIGlmICh4IDwgMCkKKwkJICAgIHJldHVybih4KTsKKwkJICBpZiAoY21yZXN1bHQu ZmNvZGUgIT0gX0NNS0VZKQorCQkgICAgYnJlYWs7CisJCSAgaWYgKCFjbWdicmsoKSkgeworCQkg ICAgICBwcmludGYoIj9UaGlzIHN3aXRjaCByZXF1aXJlcyBhbiBhcmd1bWVudFxuIik7CisJCSAg ICAgIHJldHVybigtOSk7CisJCSAgfQorCQkgIHN3aXRjaCAoY21yZXN1bHQubnJlc3VsdCkgewor CQkgICAgY2FzZSBTU0hLQ19CSToJLyogL0JJVFM6biAqLworCQkgICAgICBpZiAoKHkgPSBjbW51 bSgiIiwiMTAyNCIsMTAsJnoseHhzdHJpbmcpKSA8IDApCisJCQlyZXR1cm4oeSk7CisJCSAgICAg IGlmICh6IDwgNTEyIHx8IHogPiA0MDk2KSB7CisJCQkgIHByaW50ZigiP091dCByYW5nZSAtIG1p bjogNTEyLCBtYXg6IDQwOTZcbiIpOworCQkJICByZXR1cm4oLTkpOworCQkgICAgICB9CisJCSAg ICAgIGJpdHMgPSB6OworCQkgICAgICBicmVhazsKKwkJICAgIGNhc2UgU1NIS0NfUFA6CS8qIC9Q QVNTUEhSQVNFOmJsYWggKi8KKwkJICAgICAgaWYgKCh5ID0gY21mbGQoIlBhc3NwaHJhc2UiLCIi LCZzLHh4c3RyaW5nKSkgPCAwKQorCQkJcmV0dXJuKHkpOworCQkgICAgICBtYWtlc3RyKCZwYXNz LHMpOworCQkgICAgICBicmVhazsKKwkJICAgIGNhc2UgU1NIS0NfVFk6CS8qIC9UWVBFOmtleXdv cmQgKi8KKwkJICAgICAgaWYgKCh5ID0gY21rZXkoc3Noa2N0eSxuc3Noa2N0eSwiIiwKKwkJCQkg ICAgICJ2Mi1yc2EiLHh4c3RyaW5nKSkgPCAwKQorCQkJcmV0dXJuKHkpOworCQkgICAgICBrZXl0 eXBlID0geTsKKwkJICAgICAgYnJlYWs7CisJCSAgICBjYXNlIFNTSEtDXzFSOgkvKiAvQ09NTUVO VCAqLworCQkgICAgICBpZiAoKHkgPSBjbWZsZCgiVGV4dCIsIiIsJnMseHhzdHJpbmcpKSA8IDAp CisJCQlyZXR1cm4oeSk7CisJCSAgICAgIG1ha2VzdHIoJmNvbW1lbnQscyk7CisJCSAgICAgIGJy ZWFrOworCQkgIH0KKwkgICAgICB9CisJICAgICAgaWYgKGNtcmVzdWx0LmZjb2RlID09IF9DTU9G SSkgeyAvKiBGaWxlbmFtZSAqLworICAgICAgICAgICAgICAgICAgaWYgKGNtcmVzdWx0LnNyZXN1 bHQpIHsKKyAgICAgICAgICAgICAgICAgICAgICBja3N0cm5jcHkobGluZSxjbXJlc3VsdC5zcmVz dWx0LExJTkJVRlNJWik7CisgICAgICAgICAgICAgICAgICAgICAgaWYgKHpmbnFmcChsaW5lLFRN UEJVRlNJWix0bXBidWYpKQorICAgICAgICAgICAgICAgICAgICAgICAgICBja3N0cm5jcHkobGlu ZSx0bXBidWYsTElOQlVGU0laKTsKKwkJICB9CisJICAgICAgfQorCSAgICAgIGlmICgoeSA9IGNt Y2ZtKCkpIDwgMCkgLyogQ29uZmlybSAqLworCQlyZXR1cm4oeSk7CisjaWZuZGVmIFNTSFRFU1QK KwkgICAgICB4ID0gc3Noa2V5X2NyZWF0ZShsaW5lWzBdID8gbGluZSA6IE5VTEwsCisJCQkJYml0 cywgcGFzcywga2V5dHlwZSwgY29tbWVudCk7CisJICAgICAgaWYgKHBhc3MpCisJCW1lbXNldChw YXNzLDAsc3RybGVuKHBhc3MpKTsKKyNlbmRpZiAvKiBTU0hURVNUICovCisJICAgICAgbWFrZXN0 cigmcGFzcyxOVUxMKTsKKwkgICAgICBtYWtlc3RyKCZjb21tZW50LE5VTEwpOworCSAgICAgIHJl dHVybihzdWNjZXNzID0gKHggPT0gMCkpOworCSAgICB9CisJICAgIGNhc2UgU1NIS19ESVNQOiB7 CS8qIFNTSCBLRVkgRElTUExBWSAvc3dpdGNoZXMuLi4gKi8KKwkgICAgICBjaGFyIGM7CisJICAg ICAgaW50IGluZm10ID0gMCwgb3V0Zm10ID0gMDsKKwkgICAgICBzdHJ1Y3QgRkRCIGRmLCBzdzsK KwkgICAgICBjbWZkYmkoJnN3LAorCQkgICAgIF9DTUtFWSwJCS8qIGZjb2RlICovCisJCSAgICAg IkZpbGVuYW1lLCBvciBzd2l0Y2giLCAvKiBobHBtc2cgKi8KKwkJICAgICAiIiwJCS8qIGRlZmF1 bHQgKi8KKwkJICAgICAiIiwJCS8qIGFkZHRsIHN0cmluZyBkYXRhICovCisJCSAgICAgbnNzaGRz d2ksCQkvKiBhZGR0bCBudW1lcmljIGRhdGEgMTogdGJsIHNpemUgKi8KKwkJICAgICA0LAkJCS8q IGFkZHRsIG51bWVyaWMgZGF0YSAyOiA0ID0gY21zd2kgKi8KKwkJICAgICB4eHN0cmluZywJCS8q IFByb2Nlc3NpbmcgZnVuY3Rpb24gKi8KKwkJICAgICBzc2hkc3dpLAkJLyogS2V5d29yZCB0YWJs ZSAqLworCQkgICAgICZkZgkJLyogUG9pbnRlciB0byBuZXh0IEZEQiAqLworCQkgICAgICk7CisJ ICAgICAgY21mZGJpKCZkZiwJCS8qIDJuZCBGREIgLSBmaWxlIGZvciBkaXNwbGF5ICovCisJCSAg ICAgX0NNSUZJLAkJLyogZmNvZGUgKi8KKwkJICAgICAiIiwJCS8qIGhscG1zZyAqLworCQkgICAg ICIiLAkJLyogZGVmYXVsdCAqLworCQkgICAgICIiLAkJLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8K KwkJICAgICAwLAkJCS8qIGFkZHRsIG51bWVyaWMgZGF0YSAxICovCisJCSAgICAgMCwJCQkvKiBh ZGR0bCBudW1lcmljIGRhdGEgMiAqLworCQkgICAgIHh4c3RyaW5nLAorCQkgICAgIE5VTEwsCisJ CSAgICAgTlVMTAorCQkgICAgICk7CisJICAgICAgbGluZVswXSA9IE5VTDsKKworCSAgICAgIHdo aWxlICgxKSB7CisJCSAgeCA9IGNtZmRiKCZzdyk7CisJCSAgaWYgKHggPT0gLTMpIGJyZWFrOwor CQkgIGlmICh4IDwgMCkKKwkJICAgIHJldHVybih4KTsKKwkJICBpZiAoY21yZXN1bHQuZmNvZGUg IT0gX0NNS0VZKQorCQkgICAgYnJlYWs7CisJCSAgaWYgKCFjbWdicmsoKSkgeworCQkgICAgICBw cmludGYoIj9UaGlzIHN3aXRjaCByZXF1aXJlcyBhbiBhcmd1bWVudFxuIik7CisJCSAgICAgIHJl dHVybigtOSk7CisJCSAgfQorCQkgIHN3aXRjaCAoY21yZXN1bHQubnJlc3VsdCkgeworI2lmZGVm IENPTU1FTlQKKwkJICAgIGNhc2UgU1NIS0RfSU46CS8qIC9JTi1GT1JNQVQ6ICovCisJCSAgICAg IGlmICgoeSA9IGNta2V5KHNzaGRpZm10LG5zc2hkaWZtdCwKKwkJCQkgICAgICIiLCIiLHh4c3Ry aW5nKSkgPCAwKQorCQkJcmV0dXJuKHkpOworCQkgICAgICBpbmZtdCA9IHk7CisJCSAgICAgIGJy ZWFrOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKwkJICAgIGNhc2UgU1NIS0RfT1VUOgkvKiAvRk9S TUFUOiAqLworCQkgICAgICBpZiAoKHkgPSBjbWtleShzc2hkb2ZtdCxuc3NoZG9mbXQsCisJCQkJ ICAgICAiIiwiIix4eHN0cmluZykpIDwgMCkKKwkJCXJldHVybih5KTsKKwkJICAgICAgb3V0Zm10 ID0geTsKKwkJICAgICAgYnJlYWs7CisJCSAgfQorCSAgICAgIH0KKwkgICAgICBpZiAoY21yZXN1 bHQuZmNvZGUgPT0gX0NNSUZJKSB7IC8qIEZpbGVuYW1lICovCisJCSAgY2tzdHJuY3B5KGxpbmUs Y21yZXN1bHQuc3Jlc3VsdCxMSU5CVUZTSVopOworCQkgIGlmICh6Zm5xZnAobGluZSxUTVBCVUZT SVosdG1wYnVmKSkKKwkJICAgIGNrc3RybmNweShsaW5lLHRtcGJ1ZixMSU5CVUZTSVopOworCSAg ICAgIH0KKyNpZmRlZiBDT01NRU5UCisJICAgICAgaWYgKCFsaW5lWzBdKSB7CisJCSAgcHJpbnRm KCI/S2V5IGZpbGVuYW1lIHJlcXVpcmVkXG4iKTsKKwkJICByZXR1cm4oLTkpOworCSAgICAgIH0K KyNlbmRpZiAvKiBDT01NRU5UICovCisJICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSAvKiBD b25maXJtICovCisJCXJldHVybih5KTsKKyNpZm5kZWYgU1NIVEVTVAorCSAgICAgIHN3aXRjaCAo b3V0Zm10KSB7CisJCWNhc2UgU0tERl9PU1NIOgorICAgICAgICAgICAgICAgICAgLyogMm5kIHBh cmFtIGlzIG9wdGlvbmFsIHBhc3NwaHJhc2UgKi8KKwkJICB4ID0gc3Noa2V5X2Rpc3BsYXlfcHVi bGljKGxpbmVbMF0gPyBsaW5lIDogTlVMTCwgTlVMTCk7CisJCSAgYnJlYWs7CisJCWNhc2UgU0tE Rl9TU0hDOgorICAgICAgICAgICAgICAgICAgLyogMm5kIHBhcmFtIGlzIG9wdGlvbmFsIHBhc3Nw aHJhc2UgKi8KKwkJICB4ID0gc3Noa2V5X2Rpc3BsYXlfcHVibGljX2FzX3NzaDIobGluZVswXSA/ IGxpbmUgOiBOVUxMLAorCQkJCQkJICAgIE5VTEwpOworCQkgIGJyZWFrOworCQljYXNlIFNLREZf SUVURjoKKwkJICB4ID0gc3Noa2V5X2Rpc3BsYXlfZmluZ2VycHJpbnQobGluZVswXSA/IGxpbmUg OiBOVUxMLCAxKTsKKwkJICBicmVhazsKKwkJY2FzZSBTS0RGX0ZJTkc6CisJCSAgeCA9IHNzaGtl eV9kaXNwbGF5X2ZpbmdlcnByaW50KGxpbmVbMF0gPyBsaW5lIDogTlVMTCwgMCk7CisJCSAgYnJl YWs7CisJICAgICAgfQorI2VuZGlmIC8qIFNTSFRFU1QgKi8KKwkgICAgICByZXR1cm4oc3VjY2Vz cyA9ICh4ID09IDApKTsKKwkgICAgfQorCSAgICBjYXNlIFNTSEtfVjE6CQkvKiBTU0ggS0VZIFYx IFNFVC1DT01NRU5UICovCisJICAgICAgaWYgKCh4ID0gY21rZXkoc3Noa3YxLDEsIiIsInNldC1j b21tZW50IiwgeHhzdHJpbmcpKSA8IDApCisJCXJldHVybih4KTsKKwkgICAgICBpZiAoeCAhPSAx KSByZXR1cm4oLTIpOworCSAgICAgIGlmICgoeCA9IGNtaWZpKCJLZXkgZmlsZSBuYW1lIiwiIiwm cywmeSx4eHN0cmluZykpIDwgMCkgeworCQkgIGlmICh4ID09IC0zKSB7CisJCSAgICAgIHByaW50 ZigiP05hbWUgb2Yga2V5IGZpbGUgcmVxdWlyZWRcbiIpOworCQkgICAgICByZXR1cm4oLTkpOwor CQkgIH0KKwkgICAgICB9CisJICAgICAgY2tzdHJuY3B5KGxpbmUscyxMSU5CVUZTSVopOworCSAg ICAgIGlmICgoeCA9IGNtdHh0KCJDb21tZW50IHRleHQiLCIiLCZzLHh4c3RyaW5nKSkgPCAwKQor CQlyZXR1cm4oeCk7CisjaWZuZGVmIFNTSFRFU1QKKwkgICAgICB4ID0gc3Noa2V5X3YxX2NoYW5n ZV9jb21tZW50KGxpbmUsICAvKiBmaWxlbmFtZSAqLworCQkJCQkgICBzLCAgICAgLyogbmV3IGNv bW1lbnQgKi8KKwkJCQkJICAgTlVMTCAgIC8qIHBhc3NwaHJhc2UgKi8KKwkJCQkJICAgKTsKKyNl bmRpZiAvKiBTU0hURVNUICovCisJICAgICAgc3VjY2VzcyA9ICh4ID09IDApOworCSAgICAgIHJl dHVybihzdWNjZXNzKTsKKwkgIH0KKwkgIGRlZmF1bHQ6CisJICAgIHJldHVybigtMik7CisJfQor I2Vsc2UgIC8qIFNTSEJVSUxUSU4gKi8KKyNpZmRlZiBTU0hDTUQKKwl4ID0gbmV0dHlwZTsKKwlp ZiAoKHkgPSBzZXRsaW4oWFhTU0gsMCwxKSkgPCAwKSB7CisJICAgIGlmIChlcnJubykKKwkgICAg ICBwcmludGYoIj8lc1xuIixja19lcnJzdHIoKSk7CisgICAgICAgICAgICBlbHNlCisjaWZkZWYg Q09NTUVOVAorCSAgICAvKiBUaGlzIGlzbid0IHJpZ2h0IGVpdGhlciBiZWNhdXNlIGl0IGNhdGNo ZXMgY29tbWFuZCBlZGl0aW5nICovCisJICAgICAgcHJpbnRmKCI/U29ycnksIHBzZXVkb3Rlcm1p bmFsIG9wZW4gZmFpbGVkXG4iKTsKKyAgICAgICAgICAgIGlmIChoaW50cykKKwkgICAgICBwcmlu dGYoIkhpbnQ6IFRyeSBcInNzaCAtdCAlc1wiXG4iLGxpbmUpOworI2Vsc2UKKwkgICAgICByZXR1 cm4oeSk7CisjZW5kaWYgLyogQ09NTUVOVCAqLworCSAgICBuZXR0eXBlID0geDsJCS8qIEZhaWxl ZCwgcmVzdG9yZSBuZXQgdHlwZS4gKi8KKwkgICAgdHRucHJvdG8gPSB6OwkJLyogYW5kIHByb3Rv Y29sICovCisJICAgIHN1Y2Nlc3MgPSAwOworCX0KKwlkaWRzZXRsaW4rKzsKKwluZXRzYXZlID0g eDsKKwlyZXR1cm4oeSk7CisjZW5kaWYgLyogU1NIQ01EICovCisjZW5kaWYgLyogU1NIQlVJTFRJ TiAqLworICAgIH0KKyNlbmRpZiAvKiBBTllTU0ggKi8KKworI2lmZGVmIFNTSEJVSUxUSU4KKyAg ICBpZiAoY3ggPT0gWFhTS1JNKSB7CQkJLyogU0tFUk1JVCAoU2VjdXJlIFNoZWxsIEtlcm1pdCkg Ki8KKwlleHRlcm4gaW50IG5ldHNhdmU7CisJaW50IGssIHgsIGhhdmVob3N0ID0gMCwgdHJpcHMg PSAwOworICAgICAgICBpbnQgICAgdG1wdmVyID0gLTEsIHRtcHhmdyA9IC0xOworI2lmbmRlZiBT U0hURVNUCisgICAgICAgIGV4dGVybiBpbnQgc2xfc3NoX3hmdywgc2xfc3NoX3hmd19zYXZlZDsK KyAgICAgICAgZXh0ZXJuIGludCBzbF9zc2hfdmVyLCBzbF9zc2hfdmVyX3NhdmVkOworI2VuZGlm IC8qIFNTSFRFU1QgKi8KKyAgICAgICAgZXh0ZXJuIGludCBtZG10eXAsIG1kbXNhdiwgY3h0eXBl LCBzbF91aWRfc2F2ZWQ7CisgICAgICAgIGV4dGVybiBjaGFyICogc2xtc2c7CisJZXh0ZXJuIGNo YXIgdWlkYnVmW10sIHNsX3VpZGJ1ZltdOworICAgICAgICBleHRlcm4gY2hhciBwd2J1ZltdLCAq IGdfcHN3ZDsKKyAgICAgICAgZXh0ZXJuIGludCBwd2ZsZywgcHdjcnlwdCwgZ19wZmxnLCBnX3Bj cHQsIG5vbG9jYWw7CisJc3RydWN0IEZEQiBzdywga3csIGZsOworCisgICAgICAgIGlmIChzc2hf dG1wc3RyKQorCSAgbWVtc2V0KHNzaF90bXBzdHIsMCxzdHJsZW4oc3NoX3RtcHN0cikpOworICAg ICAgICBtYWtlc3RyKCZzc2hfdG1wc3RyLE5VTEwpOworICAgICAgICBtYWtlc3RyKCZzc2hfdG1w dWlkLE5VTEwpOworICAgICAgICBtYWtlc3RyKCZzc2hfdG1wY21kLE5VTEwpOworICAgICAgICBt YWtlc3RyKCZzc2hfdG1wcG9ydCxOVUxMKTsKKworCWNtZmRiaSgma3csCQkJLyogMXN0IEZEQiAt IGNvbW1hbmRzICovCisJICAgICAgIF9DTUtFWSwJCQkvKiBmY29kZSAqLworCSAgICAgICAiaG9z dCBbIHBvcnQgXSxcbiBvciBhY3Rpb24iLCAvKiBobHBtc2cgKi8KKwkgICAgICAgIiIsCQkJLyog ZGVmYXVsdCAqLworCSAgICAgICAiIiwJCQkvKiBhZGR0bCBzdHJpbmcgZGF0YSAqLworCSAgICAg ICBuc3Noa2VybWl0LAkJLyogYWRkdGwgbnVtZXJpYyBkYXRhIDE6IHRibCBzaXplICovCisJICAg ICAgIDAsCQkJLyogYWRkdGwgbnVtZXJpYyBkYXRhIDI6IDAgPSBrZXl3b3JkICovCisJICAgICAg IHh4c3RyaW5nLAkJLyogUHJvY2Vzc2luZyBmdW5jdGlvbiAqLworCSAgICAgICBzc2hrZXJtaXQs CQkvKiBLZXl3b3JkIHRhYmxlICovCisJICAgICAgICZmbAkJCS8qIFBvaW50ZXIgdG8gbmV4dCBG REIgKi8KKwkgICAgICAgKTsKKwljbWZkYmkoJmZsLAkJCS8qIEhvc3QgKi8KKwkgICAgICAgX0NN RkxELAkJCS8qIGZjb2RlICovCisJICAgICAgICIiLAkJCS8qIGhscG1zZyAqLworCSAgICAgICAi IiwJCQkvKiBkZWZhdWx0ICovCisJICAgICAgICIiLAkJCS8qIGFkZHRsIHN0cmluZyBkYXRhICov CisJICAgICAgIDAsCQkJLyogYWRkdGwgbnVtZXJpYyBkYXRhIDEgKi8KKwkgICAgICAgMCwJCQkv KiBhZGR0bCBudW1lcmljIGRhdGEgMiAqLworCSAgICAgICB4eHN0cmluZywKKwkgICAgICAgTlVM TCwKKwkgICAgICAgTlVMTAorCSAgICAgICApOworCisJeCA9IGNtZmRiKCZrdyk7CisJaWYgKHgg PT0gLTMpIHsKKwkgICAgcHJpbnRmKCI/c2tlcm1pdCB3aGF0P1xuIik7CisJICAgIHJldHVybigt OSk7CisJfQorCWlmICh4IDwgMCkKKwkgIHJldHVybih4KTsKKwloYXZlaG9zdCA9IDA7CisJaWYg KGNtcmVzdWx0LmZjb2RlID09IF9DTUZMRCkgeworCSAgICBoYXZlaG9zdCA9IDE7CisJICAgIGNr c3RybmNweShsaW5lLGNtcmVzdWx0LnNyZXN1bHQsTElOQlVGU0laKTsgLyogSG9zdG5hbWUgKi8K KwkgICAgY21yZXN1bHQubnJlc3VsdCA9IFNLUk1fT1BOOworCX0KKwlzd2l0Y2ggKGNtcmVzdWx0 Lm5yZXN1bHQpIHsJLyogU1NIIGtleXdvcmQgKi8KKwkgIGNhc2UgU0tSTV9PUE46CQkvKiBTU0gg T1BFTiAqLworCSAgICBpZiAoIWhhdmVob3N0KSB7CisJCWlmICgoeCA9IGNtZmxkKCJIb3N0Iiwi Iiwmcyx4eHN0cmluZykpIDwgMCkKKwkJICByZXR1cm4oeCk7CisJCWNrc3RybmNweShsaW5lLHMs TElOQlVGU0laKTsKKwkgICAgfQorCSAgICAvKiBQYXJzZSBbIHBvcnQgXSBbIHN3aXRjaGVzIF0g Ki8KKwkgICAgY21mZGJpKCZrdywJCQkvKiBTd2l0Y2hlcyAqLworCQkgICBfQ01LRVksCisJCSAg ICJQb3J0IG51bWJlciBvciBzZXJ2aWNlIG5hbWUsXG5vciBzd2l0Y2giLAorCQkgICAiIiwKKwkJ ICAgIiIsCisJCSAgIG5zc2hrcm1vcG5zdywKKwkJICAgNCwKKwkJICAgeHhzdHJpbmcsCisJCSAg IHNzaGtybW9wbnN3LAorCQkgICAmZmwKKwkJICAgKTsKKwkgICAgY21mZGJpKCZmbCwJCQkvKiBQ b3J0IG51bWJlciBvciBzZXJ2aWNlIG5hbWUgKi8KKwkJICAgX0NNRkxELAorCQkgICAiIiwKKwkJ ICAgIiIsCisJCSAgICIiLAorCQkgICAwLAorCQkgICAwLAorCQkgICB4eHN0cmluZywKKwkJICAg TlVMTCwKKwkJICAgTlVMTAorCQkgICApOworCSAgICB0cmlwcyA9IDA7CQkJLyogRXhwbGFpbmVk IGJlbG93ICovCisJICAgIHdoaWxlICgxKSB7CQkJLyogUGFyc2UgcG9ydCBhbmQgc3dpdGNoZXMg Ki8KKwkJeCA9IGNtZmRiKCZrdyk7CQkvKiBHZXQgYSBmaWVsZCAqLworCQlpZiAoeCA9PSAtMykJ CS8qIFVzZXIgdHlwZWQgQ1Igc28gcXVpdCBmcm9tIGxvb3AgKi8KKwkJICBicmVhazsKKwkJaWYg KHggPCAwKQkJLyogT3RoZXIgcGFyc2UgZXJyb3IsIHBhc3MgaXQgYmFjayAqLworCQkgIHJldHVy bih4KTsKKwkJc3dpdGNoIChjbXJlc3VsdC5mY29kZSkgeyAvKiBGaWVsZCBvciBLZXl3b3JkPyAq LworICAgICAgICAgICAgICAgICAgY2FzZSBfQ01GTEQ6CQkgIC8qIEZpZWxkICovCisgICAgICAg ICAgICAgICAgICAgIG1ha2VzdHIoJnNzaF90bXBwb3J0LGNtcmVzdWx0LnNyZXN1bHQpOworCQkg ICAgYnJlYWs7CisJCSAgY2FzZSBfQ01LRVk6CQkvKiBLZXl3b3JkICovCisJCSAgICBzd2l0Y2gg KGNtcmVzdWx0Lm5yZXN1bHQpIHsJLyogV2hpY2ggb25lPyAqLworCQkgICAgICBjYXNlIFNTSFNX X1VTUjoJICAgICAgICAvKiAvVVNFUjogKi8KKwkJCWlmICghY21nYnJrKCkpIHsKKwkJCSAgICBw cmludGYoIj9UaGlzIHN3aXRjaCByZXF1aXJlcyBhbiBhcmd1bWVudFxuIik7CisJCQkgICAgcmV0 dXJuKC05KTsKKwkJCX0KKwkJCWlmICgoeSA9IGNtZmxkKCJVc2VybmFtZSIsIiIsJnMseHhzdHJp bmcpKSA8IDApCisJCQkgIHJldHVybih5KTsKKwkJCXMgPSBicnN0cmlwKHMpOworCQkJbWFrZXN0 cigmc3NoX3RtcHVpZCxzKTsKKwkJCWJyZWFrOworICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug U1NIU1dfUFdEOgorCQkJaWYgKCFjbWdicmsoKSkgeworCQkJICAgIHByaW50ZigiP1RoaXMgc3dp dGNoIHJlcXVpcmVzIGFuIGFyZ3VtZW50XG4iKTsKKwkJCSAgICByZXR1cm4oLTkpOworCQkJfQor CQkJZGVib2sgPSAwOworCQkJaWYgKCh4ID0gY21mbGQoIlBhc3N3b3JkIiwiIiwmcyx4eHN0cmlu ZykpIDwgMCkgeworCQkJICAgIGlmICh4ID09IC0zKSB7CisJCQkJbWFrZXN0cigmc3NoX3RtcHN0 ciwiIik7CisJCQkgICAgfSBlbHNlIHsKKwkJCQlyZXR1cm4oeCk7CisJCQkgICAgfQorCQkJfSBl bHNlIHsKKwkJCSAgICBzID0gYnJzdHJpcChzKTsKKwkJCSAgICBpZiAoKHggPSAoaW50KXN0cmxl bihzKSkgPiBQV0JVRkwpIHsKKwkJCQltYWtlc3RyKCZzbG1zZywiSW50ZXJuYWwgZXJyb3IiKTsK KwkJCQlwcmludGYoIj9Tb3JyeSwgdG9vIGxvbmcgLSBtYXggPSAlZFxuIixQV0JVRkwpOworCQkJ CXJldHVybigtOSk7CisJCQkgICAgfQorCQkJICAgIG1ha2VzdHIoJnNzaF90bXBzdHIscyk7CisJ CQl9CisJCQlicmVhazsKKworICAgICAgICAgICAgICAgICAgICBjYXNlIFNTSFNXX1ZFUjoKKwkJ CWlmICgoeCA9IGNtbnVtKCJOdW1iZXIiLCIiLDEwLCZ6LHh4c3RyaW5nKSkgPCAwKQorCQkJICBy ZXR1cm4oeCk7CisJCQlpZiAoeiA8IDEgfHwgeiA+IDIpIHsKKwkJCSAgICBwcmludGYoIj9PdXQg b2YgcmFuZ2U6ICVkXG4iLHopOworCQkJICAgIHJldHVybigtOSk7CisJCQl9CisgICAgICAgICAg ICAgICAgICAgICAgICB0bXB2ZXIgPSB6OworCQkJYnJlYWs7CisgICAgICAgICAgICAgICAgICAg IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTIpOworCQkgICAgfQor ICAgICAgICAgICAgICAgICAgfQorCQlpZiAodHJpcHMrKyA9PSAwKSB7CS8qIEFmdGVyIGZpcnN0 IHRpbWUgdGhyb3VnaCAqLworCQkgICAgY21mZGJpKCZrdywJCS8qIG9ubHkgcGFyc2Ugc3dpdGNo ZXMsIG5vdCBwb3J0LiAqLworCQkJICAgX0NNS0VZLAorCQkJICAgIlN3aXRjaCIsCisJCQkgICAi IiwKKwkJCSAgICIiLAorCQkJICAgbnNzaGtybW9wbnN3LAorCQkJICAgNCwKKwkJCSAgIHh4c3Ry aW5nLAorCQkJICAgc3Noa3Jtb3Buc3csCisJCQkgICBOVUxMCisJCQkgICApOworCQl9CisJICAg IH0KKwkgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKQkvKiBHZXQgY29uZmlybWF0aW9uICovCisJ ICAgICAgcmV0dXJuKHgpOworICAgICAgICAgICAgICBpZiAoY2xza2Nvbm54KDEpIDwgMCkgewkv KiBDbG9zZSBjdXJyZW50IEtlcm1pdCBjb25uZWN0aW9uICovCisgICAgICAgICAgICAgICAgICBp ZiAoIHNzaF90bXBzdHIgKSB7CisgICAgICAgICAgICAgICAgICAgICAgbWVtc2V0KHNzaF90bXBz dHIsMCxzdHJsZW4oc3NoX3RtcHN0cikpOworICAgICAgICAgICAgICAgICAgICAgIG1ha2VzdHIo JnNzaF90bXBzdHIsTlVMTCk7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg ICByZXR1cm4oc3VjY2VzcyA9IDApOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIG1h a2VzdHIoJnNzaF9oc3QsbGluZSk7CS8qIFN0YXNoIGV2ZXJ5dGhpbmcgKi8KKyAgICAgICAgICAg ICAgaWYgKHNzaF90bXB1aWQpIHsKKyAgICAgICAgICAgICAgICAgIGlmICghc2xfdWlkX3NhdmVk KSB7CisgICAgICAgICAgICAgICAgICAgICAgY2tzdHJuY3B5KHNsX3VpZGJ1Zix1aWRidWYsVUlE QlVGTEVOKTsKKyAgICAgICAgICAgICAgICAgICAgICBzbF91aWRfc2F2ZWQgPSAxOworICAgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgY2tzdHJuY3B5KHVpZGJ1Zixzc2hfdG1w dWlkLFVJREJVRkxFTik7CisgICAgICAgICAgICAgICAgICBtYWtlc3RyKCZzc2hfdG1wdWlkLE5V TEwpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGlmIChzc2hfdG1wcG9ydCkgewor ICAgICAgICAgICAgICAgICAgbWFrZXN0cigmc3NoX3BydCxzc2hfdG1wcG9ydCk7CisgICAgICAg ICAgICAgICAgICBtYWtlc3RyKCZzc2hfdG1wcG9ydCxOVUxMKTsKKyAgICAgICAgICAgICAgfSBl bHNlCisgICAgICAgICAgICAgICAgICBtYWtlc3RyKCZzc2hfcHJ0LE5VTEwpOworCisgICAgICAg ICAgICAgIC8qIFNldCB0aGUgU3Vic3lzdGVtIHRvIEtlcm1pdCAqLworICAgICAgICAgICAgICBz c2hfY2FzID0gMTsKKyAgICAgICAgICAgICAgbWFrZXN0cigmc3NoX2NtZCwia2VybWl0Iik7CisK KyAgICAgICAgICAgICAgaWYgKHRtcHZlciA+IC0xKSB7CisjaWZuZGVmIFNTSFRFU1QKKyAgICAg ICAgICAgICAgICAgIGlmICghc2xfc3NoX3Zlcl9zYXZlZCkgeworICAgICAgICAgICAgICAgICAg ICAgIHNsX3NzaF92ZXIgPSBzc2hfdmVyOworICAgICAgICAgICAgICAgICAgICAgIHNsX3NzaF92 ZXJfc2F2ZWQgPSAxOworICAgICAgICAgICAgICAgICAgfQorI2VuZGlmIC8qIFNTSFRFU1QgKi8K KyAgICAgICAgICAgICAgICAgIHNzaF92ZXIgPSB0bXB2ZXI7CisgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgLyogRGlzYWJsZSBYMTEgRm9yd2FyZGluZyAqLworI2lmbmRlZiBTU0hURVNU CisgICAgICAgICAgICAgIGlmICghc2xfc3NoX3hmd19zYXZlZCkgeworICAgICAgICAgICAgICAg ICAgc2xfc3NoX3hmdyA9IHNzaF94Znc7CisgICAgICAgICAgICAgICAgICBzbF9zc2hfeGZ3X3Nh dmVkID0gMTsKKyAgICAgICAgICAgICAgfQorI2VuZGlmIC8qIFNTSFRFU1QgKi8KKyAgICAgICAg ICAgICAgc3NoX3hmdyA9IDA7CisKKyAgICAgICAgICAgICAgaWYgKHNzaF90bXBzdHIpIHsKKyAg ICAgICAgICAgICAgICAgIGlmIChzc2hfdG1wc3RyWzBdKSB7CisgICAgICAgICAgICAgICAgICAg ICAgY2tzdHJuY3B5KHB3YnVmLHNzaF90bXBzdHIsUFdCVUZMKzEpOworICAgICAgICAgICAgICAg ICAgICAgIHB3ZmxnID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICBwd2NyeXB0ID0gMDsKKyAg ICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgIHB3ZmxnID0gMDsK KyAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJnNzaF90bXBzdHIsTlVMTCk7CisgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgbmV0dHlwZSA9IE5FVF9TU0g7CisgICAgICAgICAgICAgIGlm IChtZG1zYXYgPCAwKQorICAgICAgICAgICAgICAgICAgbWRtc2F2ID0gbWRtdHlwOworICAgICAg ICAgICAgICBtZG10eXAgPSAtbmV0dHlwZTsKKyAgICAgICAgICAgICAgeCA9IDE7CisKKyNpZm5k ZWYgTk9TUEwKKyAgICAgICAgICAgIG1ha2VzdHIoJmdfcHN3ZCxwd2J1Zik7CS8qIFNhdmUgZ2xv YmFsIHB3YnVmICovCisgICAgICAgICAgICBnX3BmbGcgPSBwd2ZsZzsJCS8qIGFuZCBmbGFnICov CisgICAgICAgICAgICBnX3BjcHQgPSBwd2NyeXB0OworI2VuZGlmIC8qIE5PU1BMICovCisKKwkg ICAgLyogTGluZSBwYXJhbWV0ZXIgdG8gdHRvcGVuKCkgaXMgaWdub3JlZCAqLworCSAgICBrID0g dHRvcGVuKGxpbmUsJngsbWRtdHlwLCAwKTsKKwkgICAgaWYgKGsgPCAwKSB7CisJCXByaW50Zigi P1VuYWJsZSB0byBjb25uZWN0IHRvICVzXG4iLHNzaF9oc3QpOworCQltZG10eXAgPSBtZG1zYXY7 CisgICAgICAgICAgICAgICAgc2xyZXN0b3IoKTsKKwkJcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKwkg ICAgfQorCSAgICBkdXBsZXggPSAwOyAgICAgICAgICAgICAvKiBSZW1vdGUgZWNobyAqLworCSAg ICBja3N0cm5jcHkodHRuYW1lLGxpbmUsVFROQU1MRU4pOyAvKiBSZWNvcmQgdGhlIGNvbW1hbmQg Ki8KKwkgICAgZGVidWcoRjExMCwic3NoIHR0bmFtZSIsdHRuYW1lLDApOworCSAgICBtYWtlc3Ry KCZzbG1zZyxOVUxMKTsJLyogTm8gU0VUIExJTkUgZXJyb3IgbWVzc2FnZSAqLworCSAgICBjeHR5 cGUgPSBDWFRfU1NIOworI2lmbmRlZiBOT0RJQUwKKwkgICAgZGlhbHN0YSA9IERJQV9VTks7Cisj ZW5kaWYgLyogTk9ESUFMICovCisJICAgIHN1Y2Nlc3MgPSAxOwkJLyogU0VUIExJTkUgc3VjY2Vl ZGVkICovCisJICAgIG5ldHdvcmsgPSAxOwkJLyogTmV0d29yayBjb25uZWN0aW9uIChub3Qgc2Vy aWFsKSAqLworCSAgICBsb2NhbCA9IDE7CQkJLyogTG9jYWwgbW9kZSAobm90IHJlbW90ZSkgKi8K KwkgICAgaWYgKChyZWxpYWJsZSAhPSBTRVRfT0ZGIHx8ICFzZXRyZWxpYWJsZSkpCisJICAgICAg cmVsaWFibGUgPSBTRVRfT047CS8qIFRyYW5zcG9ydCBpcyByZWxpYWJsZSBlbmQgdG8gZW5kICov CisjaWZkZWYgT1MyCisgICAgICAgICAgICBEaWFsZXJTZW5kKE9QVF9LRVJNSVRfQ09OTkVDVCwg MCk7CisjZW5kaWYgLyogT1MyICovCisJICAgIHNldGZsb3coKTsJCQkvKiBTZXQgYXBwcm9wcmlh dGUgZmxvdyBjb250cm9sICovCisKKwkgICAgaGF2ZWxpbmUgPSAxOworI2lmZGVmIENLTE9HRElB TAorI2lmZGVmIE5FVENPTk4KKwkgICAgZG9sb2duZXQoKTsKKyNlbmRpZiAvKiBORVRDT05OICov CisjZW5kaWYgLyogQ0tMT0dESUFMICovCisKKyNpZm5kZWYgTk9TUEwKKwkgICAgaWYgKGxvY2Fs KSB7CisJCWlmIChubWFjKSB7CQkvKiBBbnkgbWFjcm9zIGRlZmluZWQ/ICovCisJCSAgICBpbnQg azsJCS8qIFllcyAqLworCQkgICAgayA9IG1sb29rKG1hY3RhYiwib25fb3BlbiIsbm1hYyk7IC8q IExvb2sgdGhpcyB1cCAqLworCQkgICAgaWYgKGsgPj0gMCkgewkgICAgICAgICAgICAgIC8qIElm IGZvdW5kLCAqLworCQkJaWYgKGRvZG8oayxzc2hfaHN0LDApID4gLTEpICAgLyogc2V0IGl0IHVw LCAqLworCQkJICBwYXJzZXIoMSk7CQkgICAgICAvKiBhbmQgZXhlY3V0ZSBpdCAqLworCQkgICAg fQorCQl9CisJICAgIH0KKyNlbmRpZiAvKiBOT1NQTCAqLworI2lmZGVmIExPQ1VTCQkKKwkgICAg aWYgKGF1dG9sb2N1cykKKwkJc2V0bG9jdXMoMSwxKTsKKyNlbmRpZiAvKiBMT0NVUyAqLworCisJ LyogQ29tbWFuZCB3YXMgY29uZmlybWVkIHNvIHdlIGNhbiBwcmUtcG9wIGNvbW1hbmQgbGV2ZWwu ICovCisJLyogVGhpcyBpcyBzbyBDT05ORUNUIG1vZHVsZSB3b24ndCB0aGluayB3ZSdyZSBleGVj dXRpbmcgYSAqLworCS8qIHNjcmlwdCBpZiBDT05ORUNUIHdhcyB0aGUgZmluYWwgY29tbWFuZCBp biB0aGUgc2NyaXB0LiAqLworCSAgICBpZiAoY21kbHZsID4gMCkKKwkgICAgICBwcmVwb3AoKTsK KwkgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKworCSAgZGVmYXVsdDoKKwkgICAgcmV0dXJuKC0y KTsKKwl9CisgICAgfQorI2VuZGlmIC8qIFNTSEJVSUxUSU4gKi8KKworI2lmZGVmIFNGVFBfQlVJ TFRJTgorICAgIGlmIChjeCA9PSBYWFNGVFApIHsJCQkvKiBTRlRQIChTZWN1cmUgU2hlbGwgRmls ZSBUcmFuc2ZlcikgKi8KKwlleHRlcm4gaW50IG5ldHNhdmU7CisJaW50IGssIHgsIGhhdmVob3N0 ID0gMCwgdHJpcHMgPSAwOworICAgICAgICBpbnQgICAgdG1wdmVyID0gLTEsIHRtcHhmdyA9IC0x OworI2lmbmRlZiBTU0hURVNUCisgICAgICAgIGV4dGVybiBpbnQgc2xfc3NoX3hmdywgc2xfc3No X3hmd19zYXZlZDsKKyAgICAgICAgZXh0ZXJuIGludCBzbF9zc2hfdmVyLCBzbF9zc2hfdmVyX3Nh dmVkOworI2VuZGlmIC8qIFNTSFRFU1QgKi8KKyAgICAgICAgZXh0ZXJuIGludCBtZG10eXAsIG1k bXNhdiwgY3h0eXBlLCBzbF91aWRfc2F2ZWQ7CisgICAgICAgIGV4dGVybiBjaGFyICogc2xtc2c7 CisJZXh0ZXJuIGNoYXIgdWlkYnVmW10sIHNsX3VpZGJ1ZltdOworICAgICAgICBleHRlcm4gY2hh ciBwd2J1ZltdLCAqIGdfcHN3ZDsKKyAgICAgICAgZXh0ZXJuIGludCBwd2ZsZywgcHdjcnlwdCwg Z19wZmxnLCBnX3BjcHQsIG5vbG9jYWw7CisJc3RydWN0IEZEQiBzdywga3csIGZsOworCisgICAg ICAgIGlmIChzc2hfdG1wc3RyKQorCSAgbWVtc2V0KHNzaF90bXBzdHIsMCxzdHJsZW4oc3NoX3Rt cHN0cikpOworICAgICAgICBtYWtlc3RyKCZzc2hfdG1wc3RyLE5VTEwpOworICAgICAgICBtYWtl c3RyKCZzc2hfdG1wdWlkLE5VTEwpOworICAgICAgICBtYWtlc3RyKCZzc2hfdG1wY21kLE5VTEwp OworICAgICAgICBtYWtlc3RyKCZzc2hfdG1wcG9ydCxOVUxMKTsKKworCWNtZmRiaSgma3csCQkJ LyogMXN0IEZEQiAtIGNvbW1hbmRzICovCisJICAgICAgIF9DTUtFWSwJCQkvKiBmY29kZSAqLwor CSAgICAgICAiaG9zdCBbIHBvcnQgXSxcbiBvciBhY3Rpb24iLCAvKiBobHBtc2cgKi8KKwkgICAg ICAgIiIsCQkJLyogZGVmYXVsdCAqLworCSAgICAgICAiIiwJCQkvKiBhZGR0bCBzdHJpbmcgZGF0 YSAqLworCSAgICAgICBuc2Z0cGt3dGFiLAkJLyogYWRkdGwgbnVtZXJpYyBkYXRhIDE6IHRibCBz aXplICovCisJICAgICAgIDAsCQkJLyogYWRkdGwgbnVtZXJpYyBkYXRhIDI6IDAgPSBrZXl3b3Jk ICovCisJICAgICAgIHh4c3RyaW5nLAkJLyogUHJvY2Vzc2luZyBmdW5jdGlvbiAqLworCSAgICAg ICBzZnRwa3d0YWIsCQkvKiBLZXl3b3JkIHRhYmxlICovCisJICAgICAgICZmbAkJCS8qIFBvaW50 ZXIgdG8gbmV4dCBGREIgKi8KKwkgICAgICAgKTsKKwljbWZkYmkoJmZsLAkJCS8qIEhvc3QgKi8K KwkgICAgICAgX0NNRkxELAkJCS8qIGZjb2RlICovCisJICAgICAgICIiLAkJCS8qIGhscG1zZyAq LworCSAgICAgICAiIiwJCQkvKiBkZWZhdWx0ICovCisJICAgICAgICIiLAkJCS8qIGFkZHRsIHN0 cmluZyBkYXRhICovCisJICAgICAgIDAsCQkJLyogYWRkdGwgbnVtZXJpYyBkYXRhIDEgKi8KKwkg ICAgICAgMCwJCQkvKiBhZGR0bCBudW1lcmljIGRhdGEgMiAqLworCSAgICAgICB4eHN0cmluZywK KwkgICAgICAgTlVMTCwKKwkgICAgICAgTlVMTAorCSAgICAgICApOworCisJeCA9IGNtZmRiKCZr dyk7CisJaWYgKHggPT0gLTMpIHsKKwkgICAgcHJpbnRmKCI/c2Z0cCB3aGF0P1xuIik7CisJICAg IHJldHVybigtOSk7CisJfQorCWlmICh4IDwgMCkKKwkgIHJldHVybih4KTsKKwloYXZlaG9zdCA9 IDA7CisJaWYgKGNtcmVzdWx0LmZjb2RlID09IF9DTUZMRCkgeworCSAgICBoYXZlaG9zdCA9IDE7 CisJICAgIGNrc3RybmNweShsaW5lLGNtcmVzdWx0LnNyZXN1bHQsTElOQlVGU0laKTsgLyogSG9z dG5hbWUgKi8KKwkgICAgY21yZXN1bHQubnJlc3VsdCA9IFNGVFBfT1BOOworCX0KKwlzd2l0Y2gg KGNtcmVzdWx0Lm5yZXN1bHQpIHsJLyogU0ZUUCBrZXl3b3JkICovCisJICBjYXNlIFNGVFBfT1BO OgkJLyogU0ZUUCBPUEVOICovCisJICAgIGlmICghaGF2ZWhvc3QpIHsKKwkJaWYgKCh4ID0gY21m bGQoIkhvc3QiLCIiLCZzLHh4c3RyaW5nKSkgPCAwKQorCQkgIHJldHVybih4KTsKKwkJY2tzdHJu Y3B5KGxpbmUscyxMSU5CVUZTSVopOworCSAgICB9CisJICAgIC8qIFBhcnNlIFsgcG9ydCBdIFsg c3dpdGNoZXMgXSAqLworCSAgICBjbWZkYmkoJmt3LAkJCS8qIFN3aXRjaGVzICovCisJCSAgIF9D TUtFWSwKKwkJICAgIlBvcnQgbnVtYmVyIG9yIHNlcnZpY2UgbmFtZSxcbm9yIHN3aXRjaCIsCisJ CSAgICIiLAorCQkgICAiIiwKKwkJICAgbnNzaGtybW9wbnN3LAorCQkgICA0LAorCQkgICB4eHN0 cmluZywKKwkJICAgc3Noa3Jtb3Buc3csCisJCSAgICZmbAorCQkgICApOworCSAgICBjbWZkYmko JmZsLAkJCS8qIFBvcnQgbnVtYmVyIG9yIHNlcnZpY2UgbmFtZSAqLworCQkgICBfQ01GTEQsCisJ CSAgICIiLAorCQkgICAiIiwKKwkJICAgIiIsCisJCSAgIDAsCisJCSAgIDAsCisJCSAgIHh4c3Ry aW5nLAorCQkgICBOVUxMLAorCQkgICBOVUxMCisJCSAgICk7CisJICAgIHRyaXBzID0gMDsJCQkv KiBFeHBsYWluZWQgYmVsb3cgKi8KKwkgICAgd2hpbGUgKDEpIHsJCQkvKiBQYXJzZSBwb3J0IGFu ZCBzd2l0Y2hlcyAqLworCQl4ID0gY21mZGIoJmt3KTsJCS8qIEdldCBhIGZpZWxkICovCisJCWlm ICh4ID09IC0zKQkJLyogVXNlciB0eXBlZCBDUiBzbyBxdWl0IGZyb20gbG9vcCAqLworCQkgIGJy ZWFrOworCQlpZiAoeCA8IDApCQkvKiBPdGhlciBwYXJzZSBlcnJvciwgcGFzcyBpdCBiYWNrICov CisJCSAgcmV0dXJuKHgpOworCQlzd2l0Y2ggKGNtcmVzdWx0LmZjb2RlKSB7IC8qIEZpZWxkIG9y IEtleXdvcmQ/ICovCisgICAgICAgICAgICAgICAgICBjYXNlIF9DTUZMRDoJCSAgLyogRmllbGQg Ki8KKyAgICAgICAgICAgICAgICAgICAgbWFrZXN0cigmc3NoX3RtcHBvcnQsY21yZXN1bHQuc3Jl c3VsdCk7CisJCSAgICBicmVhazsKKwkJICBjYXNlIF9DTUtFWToJCS8qIEtleXdvcmQgKi8KKwkJ ICAgIHN3aXRjaCAoY21yZXN1bHQubnJlc3VsdCkgewkvKiBXaGljaCBvbmU/ICovCisJCSAgICAg IGNhc2UgU1NIU1dfVVNSOgkgICAgICAgIC8qIC9VU0VSOiAqLworCQkJaWYgKCFjbWdicmsoKSkg eworCQkJICAgIHByaW50ZigiP1RoaXMgc3dpdGNoIHJlcXVpcmVzIGFuIGFyZ3VtZW50XG4iKTsK KwkJCSAgICByZXR1cm4oLTkpOworCQkJfQorCQkJaWYgKCh5ID0gY21mbGQoIlVzZXJuYW1lIiwi Iiwmcyx4eHN0cmluZykpIDwgMCkKKwkJCSAgcmV0dXJuKHkpOworCQkJcyA9IGJyc3RyaXAocyk7 CisJCQltYWtlc3RyKCZzc2hfdG1wdWlkLHMpOworCQkJYnJlYWs7CisgICAgICAgICAgICAgICAg ICAgICAgY2FzZSBTU0hTV19QV0Q6CisJCQlpZiAoIWNtZ2JyaygpKSB7CisJCQkgICAgcHJpbnRm KCI/VGhpcyBzd2l0Y2ggcmVxdWlyZXMgYW4gYXJndW1lbnRcbiIpOworCQkJICAgIHJldHVybigt OSk7CisJCQl9CisJCQlkZWJvayA9IDA7CisJCQlpZiAoKHggPSBjbWZsZCgiUGFzc3dvcmQiLCIi LCZzLHh4c3RyaW5nKSkgPCAwKSB7CisJCQkgICAgaWYgKHggPT0gLTMpIHsKKwkJCQltYWtlc3Ry KCZzc2hfdG1wc3RyLCIiKTsKKwkJCSAgICB9IGVsc2UgeworCQkJCXJldHVybih4KTsKKwkJCSAg ICB9CisJCQl9IGVsc2UgeworCQkJICAgIHMgPSBicnN0cmlwKHMpOworCQkJICAgIGlmICgoeCA9 IChpbnQpc3RybGVuKHMpKSA+IFBXQlVGTCkgeworCQkJCW1ha2VzdHIoJnNsbXNnLCJJbnRlcm5h bCBlcnJvciIpOworCQkJCXByaW50ZigiP1NvcnJ5LCB0b28gbG9uZyAtIG1heCA9ICVkXG4iLFBX QlVGTCk7CisJCQkJcmV0dXJuKC05KTsKKwkJCSAgICB9CisJCQkgICAgbWFrZXN0cigmc3NoX3Rt cHN0cixzKTsKKwkJCX0KKwkJCWJyZWFrOworCisgICAgICAgICAgICAgICAgICAgIGNhc2UgU1NI U1dfVkVSOgorCQkJaWYgKCh4ID0gY21udW0oIk51bWJlciIsIiIsMTAsJnoseHhzdHJpbmcpKSA8 IDApCisJCQkgIHJldHVybih4KTsKKwkJCWlmICh6IDwgMSB8fCB6ID4gMikgeworCQkJICAgIHBy aW50ZigiP091dCBvZiByYW5nZTogJWRcbiIseik7CisJCQkgICAgcmV0dXJuKC05KTsKKwkJCX0K KyAgICAgICAgICAgICAgICAgICAgICAgIHRtcHZlciA9IHo7CisJCQlicmVhazsKKyAgICAgICAg ICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybigtMik7 CisJCSAgICB9CisJCX0KKwkJaWYgKHRyaXBzKysgPT0gMCkgewkvKiBBZnRlciBmaXJzdCB0aW1l IHRocm91Z2ggKi8KKwkJICAgIGNtZmRiaSgma3csCQkvKiBvbmx5IHBhcnNlIHN3aXRjaGVzLCBu b3QgcG9ydC4gKi8KKwkJCSAgIF9DTUtFWSwKKwkJCSAgICJTd2l0Y2giLAorCQkJICAgIiIsCisJ CQkgICAiIiwKKwkJCSAgIG5zc2hrcm1vcG5zdywKKwkJCSAgIDQsCisJCQkgICB4eHN0cmluZywK KwkJCSAgIHNzaGtybW9wbnN3LAorCQkJICAgTlVMTAorCQkJICAgKTsKKwkJfQorCSAgICB9CisJ ICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkJLyogR2V0IGNvbmZpcm1hdGlvbiAqLworCSAgICAg IHJldHVybih4KTsKKyAgICAgICAgICAgICAgaWYgKGNsc2tjb25ueCgxKSA8IDApIHsJLyogQ2xv c2UgY3VycmVudCBLZXJtaXQgY29ubmVjdGlvbiAqLworICAgICAgICAgICAgICAgICAgaWYgKCBz c2hfdG1wc3RyICkgeworICAgICAgICAgICAgICAgICAgICAgIG1lbXNldChzc2hfdG1wc3RyLDAs c3RybGVuKHNzaF90bXBzdHIpKTsKKyAgICAgICAgICAgICAgICAgICAgICBtYWtlc3RyKCZzc2hf dG1wc3RyLE5VTEwpOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgcmV0 dXJuKHN1Y2Nlc3MgPSAwKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBtYWtlc3Ry KCZzc2hfaHN0LGxpbmUpOwkvKiBTdGFzaCBldmVyeXRoaW5nICovCisgICAgICAgICAgICAgIGlm IChzc2hfdG1wdWlkKSB7CisgICAgICAgICAgICAgICAgICBpZiAoIXNsX3VpZF9zYXZlZCkgewor ICAgICAgICAgICAgICAgICAgICAgIGNrc3RybmNweShzbF91aWRidWYsdWlkYnVmLFVJREJVRkxF Tik7CisgICAgICAgICAgICAgICAgICAgICAgc2xfdWlkX3NhdmVkID0gMTsKKyAgICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIGNrc3RybmNweSh1aWRidWYsc3NoX3RtcHVpZCxV SURCVUZMRU4pOworICAgICAgICAgICAgICAgICAgbWFrZXN0cigmc3NoX3RtcHVpZCxOVUxMKTsK KyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBpZiAoc3NoX3RtcHBvcnQpIHsKKyAgICAg ICAgICAgICAgICAgIG1ha2VzdHIoJnNzaF9wcnQsc3NoX3RtcHBvcnQpOworICAgICAgICAgICAg ICAgICAgbWFrZXN0cigmc3NoX3RtcHBvcnQsTlVMTCk7CisgICAgICAgICAgICAgIH0gZWxzZQor ICAgICAgICAgICAgICAgICAgbWFrZXN0cigmc3NoX3BydCxOVUxMKTsKKworICAgICAgICAgICAg ICAvKiBTZXQgdGhlIFN1YnN5c3RlbSB0byBLZXJtaXQgKi8KKyAgICAgICAgICAgICAgc3NoX2Nh cyA9IDE7CisgICAgICAgICAgICAgIG1ha2VzdHIoJnNzaF9jbWQsInNmdHAiKTsKKworICAgICAg ICAgICAgICBpZiAodG1wdmVyID4gLTEpIHsKKyNpZm5kZWYgU1NIVEVTVAorICAgICAgICAgICAg ICAgICAgaWYgKCFzbF9zc2hfdmVyX3NhdmVkKSB7CisgICAgICAgICAgICAgICAgICAgICAgc2xf c3NoX3ZlciA9IHNzaF92ZXI7CisgICAgICAgICAgICAgICAgICAgICAgc2xfc3NoX3Zlcl9zYXZl ZCA9IDE7CisgICAgICAgICAgICAgICAgICB9CisjZW5kaWYgLyogU1NIVEVTVCAqLworICAgICAg ICAgICAgICAgICAgc3NoX3ZlciA9IHRtcHZlcjsKKyAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICAvKiBEaXNhYmxlIFgxMSBGb3J3YXJkaW5nICovCisjaWZuZGVmIFNTSFRFU1QKKyAgICAg ICAgICAgICAgaWYgKCFzbF9zc2hfeGZ3X3NhdmVkKSB7CisgICAgICAgICAgICAgICAgICBzbF9z c2hfeGZ3ID0gc3NoX3hmdzsKKyAgICAgICAgICAgICAgICAgIHNsX3NzaF94Zndfc2F2ZWQgPSAx OworICAgICAgICAgICAgICB9CisjZW5kaWYgLyogU1NIVEVTVCAqLworICAgICAgICAgICAgICBz c2hfeGZ3ID0gMDsKKworICAgICAgICAgICAgICBpZiAoc3NoX3RtcHN0cikgeworICAgICAgICAg ICAgICAgICAgaWYgKHNzaF90bXBzdHJbMF0pIHsKKyAgICAgICAgICAgICAgICAgICAgICBja3N0 cm5jcHkocHdidWYsc3NoX3RtcHN0cixQV0JVRkwrMSk7CisgICAgICAgICAgICAgICAgICAgICAg cHdmbGcgPSAxOworICAgICAgICAgICAgICAgICAgICAgIHB3Y3J5cHQgPSAwOworICAgICAgICAg ICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgcHdmbGcgPSAwOworICAgICAg ICAgICAgICAgICAgbWFrZXN0cigmc3NoX3RtcHN0cixOVUxMKTsKKyAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICBuZXR0eXBlID0gTkVUX1NTSDsKKyAgICAgICAgICAgICAgaWYgKG1kbXNh diA8IDApCisgICAgICAgICAgICAgICAgICBtZG1zYXYgPSBtZG10eXA7CisgICAgICAgICAgICAg IG1kbXR5cCA9IC1uZXR0eXBlOworICAgICAgICAgICAgICB4ID0gMTsKKworI2lmbmRlZiBOT1NQ TAorICAgICAgICAgICAgbWFrZXN0cigmZ19wc3dkLHB3YnVmKTsgICAgICAgICAgICAgLyogU2F2 ZSBnbG9iYWwgcHdidWYgKi8KKyAgICAgICAgICAgIGdfcGZsZyA9IHB3ZmxnOyAgICAgICAgICAg ICAgICAgICAgIC8qIGFuZCBmbGFnICovCisgICAgICAgICAgICBnX3BjcHQgPSBwd2NyeXB0Owor I2VuZGlmIC8qIE5PU1BMICovCisKKwkgICAgLyogTGluZSBwYXJhbWV0ZXIgdG8gdHRvcGVuKCkg aXMgaWdub3JlZCAqLworCSAgICBrID0gdHRvcGVuKGxpbmUsJngsbWRtdHlwLCAwKTsKKwkgICAg aWYgKGsgPCAwKSB7CisJCXByaW50ZigiP1VuYWJsZSB0byBjb25uZWN0IHRvICVzXG4iLHNzaF9o c3QpOworCQltZG10eXAgPSBtZG1zYXY7CisgICAgICAgICAgICAgICAgc2xyZXN0b3IoKTsKKwkJ cmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKwkgICAgfQorCSAgICBkdXBsZXggPSAwOyAgICAgICAgICAg ICAvKiBSZW1vdGUgZWNobyAqLworCSAgICBja3N0cm5jcHkodHRuYW1lLGxpbmUsVFROQU1MRU4p OyAvKiBSZWNvcmQgdGhlIGNvbW1hbmQgKi8KKwkgICAgZGVidWcoRjExMCwic3NoIHR0bmFtZSIs dHRuYW1lLDApOworCSAgICBtYWtlc3RyKCZzbG1zZyxOVUxMKTsJLyogTm8gU0VUIExJTkUgZXJy b3IgbWVzc2FnZSAqLworCSAgICBjeHR5cGUgPSBDWFRfU1NIOworI2lmbmRlZiBOT0RJQUwKKwkg ICAgZGlhbHN0YSA9IERJQV9VTks7CisjZW5kaWYgLyogTk9ESUFMICovCisJICAgIHN1Y2Nlc3Mg PSAxOwkJLyogU0VUIExJTkUgc3VjY2VlZGVkICovCisJICAgIG5ldHdvcmsgPSAxOwkJLyogTmV0 d29yayBjb25uZWN0aW9uIChub3Qgc2VyaWFsKSAqLworCSAgICBsb2NhbCA9IDE7CQkJLyogTG9j YWwgbW9kZSAobm90IHJlbW90ZSkgKi8KKwkgICAgaWYgKChyZWxpYWJsZSAhPSBTRVRfT0ZGIHx8 ICFzZXRyZWxpYWJsZSkpCisJICAgICAgcmVsaWFibGUgPSBTRVRfT047CS8qIFRyYW5zcG9ydCBp cyByZWxpYWJsZSBlbmQgdG8gZW5kICovCisjaWZkZWYgT1MyCisgICAgICAgICAgICBEaWFsZXJT ZW5kKE9QVF9LRVJNSVRfQ09OTkVDVCwgMCk7CisjZW5kaWYgLyogT1MyICovCisJICAgIHNldGZs b3coKTsJCQkvKiBTZXQgYXBwcm9wcmlhdGUgZmxvdyBjb250cm9sICovCisKKwkgICAgaGF2ZWxp bmUgPSAxOworI2lmZGVmIENLTE9HRElBTAorI2lmZGVmIE5FVENPTk4KKwkgICAgZG9sb2duZXQo KTsKKyNlbmRpZiAvKiBORVRDT05OICovCisjZW5kaWYgLyogQ0tMT0dESUFMICovCisKKyNpZm5k ZWYgTk9TUEwKKwkgICAgaWYgKGxvY2FsKSB7CisJCWlmIChubWFjKSB7CQkvKiBBbnkgbWFjcm9z IGRlZmluZWQ/ICovCisJCSAgICBpbnQgazsJCS8qIFllcyAqLworCQkgICAgayA9IG1sb29rKG1h Y3RhYiwib25fb3BlbiIsbm1hYyk7IC8qIExvb2sgdGhpcyB1cCAqLworCQkgICAgaWYgKGsgPj0g MCkgewkgICAgICAgICAgICAgIC8qIElmIGZvdW5kLCAqLworCQkJaWYgKGRvZG8oayxzc2hfaHN0 LDApID4gLTEpICAgLyogc2V0IGl0IHVwLCAqLworCQkJICBwYXJzZXIoMSk7CQkgICAgICAvKiBh bmQgZXhlY3V0ZSBpdCAqLworCQkgICAgfQorCQl9CisJICAgIH0KKyNlbmRpZiAvKiBOT1NQTCAq LworI2lmZGVmIExPQ1VTCQkKKwkgICAgaWYgKGF1dG9sb2N1cykKKwkJc2V0bG9jdXMoMSwxKTsK KyNlbmRpZiAvKiBMT0NVUyAqLworCisJLyogQ29tbWFuZCB3YXMgY29uZmlybWVkIHNvIHdlIGNh biBwcmUtcG9wIGNvbW1hbmQgbGV2ZWwuICovCisJLyogVGhpcyBpcyBzbyBDT05ORUNUIG1vZHVs ZSB3b24ndCB0aGluayB3ZSdyZSBleGVjdXRpbmcgYSAqLworCS8qIHNjcmlwdCBpZiBDT05ORUNU IHdhcyB0aGUgZmluYWwgY29tbWFuZCBpbiB0aGUgc2NyaXB0LiAqLworCSAgICBpZiAoY21kbHZs ID4gMCkKKwkgICAgICBwcmVwb3AoKTsKKworICAgICAgICAgICAgc3VjY2VzcyA9IHNmdHBfZG9f aW5pdCgpOworCSAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworCisJICBjYXNlIFNGVFBfQ0Q6CisJ ICBjYXNlIFNGVFBfQ0hHUlA6CisJICBjYXNlIFNGVFBfQ0hNT0Q6CisJICBjYXNlIFNGVFBfQ0hP V046CisJICBjYXNlIFNGVFBfUk06CisJICBjYXNlIFNGVFBfRElSOgorCSAgY2FzZSBTRlRQX0dF VDoKKwkgIGNhc2UgU0ZUUF9NS0RJUjoKKwkgIGNhc2UgU0ZUUF9QVVQ6CisJICBjYXNlIFNGVFBf UFdEOgorCSAgY2FzZSBTRlRQX1JFTjoKKwkgIGNhc2UgU0ZUUF9STURJUjoKKwkgIGNhc2UgU0ZU UF9MSU5LOgorCSAgY2FzZSBTRlRQX1ZFUjoKKwkgICAgaWYgKCh5ID0gY210eHQoImNvbW1hbmQg cGFyYW1ldGVycyIsIiIsJnMseHhzdHJpbmcpKSA8IDApIAorCSAgICAgIHJldHVybih5KTsKKwkg ICAgaWYgKHNzaF90Y2hrKCkgPCAwIHx8ICFzc2hfY2FzIHx8IHN0cmNtcChzc2hfY21kLCJzZnRw IikpIHsKKwkJcHJpbnRmKCI/Tm90IGNvbm5lY3RlZCB0byBTRlRQIFNlcnZpY2VcbiIpOworCQly ZXR1cm4oc3VjY2VzcyA9IDApOworCSAgICB9CisJICAgIHN1Y2Nlc3MgPSBzZnRwX2RvX2NtZChj bXJlc3VsdC5ucmVzdWx0LHMpOworCSAgICByZXR1cm4oc3VjY2Vzcyk7CisJICBkZWZhdWx0Ogor CSAgICByZXR1cm4oLTIpOworCX0KKyAgICB9CisjZW5kaWYgLyogU0ZUUF9CVUlMVElOICovCisK KyAgICBpZiAoY3ggPT0gWFhSTE9HKSB7CQkJLyogUkxPR0lOICovCisjaWZkZWYgUkxPR0NPREUK KwlpbnQgeCx6OworI2lmZGVmIE9TMgorCWlmICghdGNwX2F2YWlsKSB7CisJICAgIHByaW50Zigi P1NvcnJ5LCBlaXRoZXIgVENQL0lQIGlzIG5vdCBhdmFpbGFibGUgb24gdGhpcyBzeXN0ZW0gb3Jc blwKK25lY2Vzc2FyeSBETExzIGRpZCBub3QgbG9hZC4gIFVzZSBTSE9XIE5FVFdPUksgdG8gY2hl Y2sgbmV0d29yayBzdGF0dXMuXG4iCisJCSAgICk7CisJICAgIHN1Y2Nlc3MgPSAwOworCSAgICBy ZXR1cm4oLTkpOworCX0gZWxzZSB7CisjZW5kaWYgLyogT1MyICovCisJICAgIHggPSBuZXR0eXBl OwkJLyogU2F2ZSBuZXQgdHlwZSBpbiBjYXNlIG9mIGZhaWx1cmUgKi8KKwkgICAgeiA9IHR0bnBy b3RvOwkJLyogU2F2ZSBwcm90b2NvbCBpbiBjYXNlIG9mIGZhaWx1cmUgKi8KKwkgICAgbmV0dHlw ZSA9IE5FVF9UQ1BCOworCSAgICB0dG5wcm90byA9IE5QX1JMT0dJTjsKKwkgICAgaWYgKCh5ID0g c2V0bGluKFhZSE9TVCwwLDEpKSA8PSAwKSB7CisJCW5ldHR5cGUgPSB4OwkJLyogRmFpbGVkLCBy ZXN0b3JlIG5ldCB0eXBlLiAqLworCQl0dG5wcm90byA9IHo7CQkvKiBhbmQgcHJvdG9jb2wgKi8K KwkJc3VjY2VzcyA9IDA7CisJICAgIH0KKwkgICAgZGlkc2V0bGluKys7CisjaWZkZWYgT1MyCisJ fQorI2VuZGlmIC8qIE9TMiAqLworCXJldHVybih5KTsKKyNlbHNlCisJcHJpbnRmKCI/U29ycnks IFJMT0dJTiBpcyBub3QgY29uZmlndXJlZCBpbiB0aGlzIGNvcHkgb2YgQy1LZXJtaXQuXG4iKTsK KwlyZXR1cm4oLTkpOworI2VuZGlmIC8qIFJMT0dDT0RFICovCisgICAgfQorI2VuZGlmIC8qIE5F VENPTk4gKi8KKyNlbmRpZiAvKiBOT0xPQ0FMICovCisKKyNpZm5kZWYgTk9YTUlUCisgICAgaWYg KGN4ID09IFhYVFJBKSB7CQkJLyogVFJBTlNNSVQgKi8KKwlleHRlcm4gaW50IHhmcnhsYTsKKwlp bnQgaSwgbiwgeHBpcGUgPSAwLCB4YmluYXJ5ID0gMCwgeHhsYXRlID0gMSwgeHhub3dhaXQgPSAw LCBnZXR2YWw7CisJaW50IHh4ZWNobyA9IDA7CisJaW50IHNjYW4gPSAxOworCWNoYXIgYzsKKwlz dHJ1Y3QgRkRCIHNmLCBzdywgdHg7CQkvKiBGREJzIGZvciBwYXJzZSBmdW5jdGlvbnMgKi8KKyNp Zm5kZWYgTk9DU0VUUworCWV4dGVybiBpbnQgdGNzX3RyYW5zcDsJCS8qIFRlcm0gY2hhcnNldCBp cyB0cmFuc3BhcmVudCAqLworI2Vsc2UKKwlpbnQgdGNzX3RyYW5zcCA9IDE7CisjZW5kaWYgLyog Tk9DU0VUUyAqLworCisjaWZkZWYgQ09NTUVOVAorCXhiaW5hcnkgPSBiaW5hcnk7CQkvKiBEZWZh dWx0IHRleHQvYmluYXJ5IG1vZGUgKi8KKyNlbHNlCisJeGJpbmFyeSA9IDA7CQkJLyogRGVmYXVs dCBpcyB0ZXh0ICovCisjZW5kaWYgLyogQ09NTUVOVCAqLworCXh4ZWNobyA9IHhtaXR4OworCisJ Y21mZGJpKCZzdywJCQkvKiBGaXJzdCBGREIgLSBjb21tYW5kIHN3aXRjaGVzICovCisJICAgICAg IF9DTUtFWSwJCQkvKiBmY29kZSAqLworCSAgICAgICAiRmlsZW5hbWUsIG9yIHN3aXRjaCIsCS8q IGhscG1zZyAqLworCSAgICAgICAiIiwJCQkvKiBkZWZhdWx0ICovCisJICAgICAgICIiLAkJCS8q IGFkZHRsIHN0cmluZyBkYXRhICovCisJICAgICAgIG54bWl0c3csCQkJLyogYWRkdGwgbnVtZXJp YyBkYXRhIDE6IHRibCBzaXplICovCisJICAgICAgIDQsCQkJLyogYWRkdGwgbnVtZXJpYyBkYXRh IDI6IDQgPSBjbXN3aSAqLworCSAgICAgICB4eHN0cmluZywJCS8qIFByb2Nlc3NpbmcgZnVuY3Rp b24gKi8KKwkgICAgICAgeG1pdHN3LAkJCS8qIEtleXdvcmQgdGFibGUgKi8KKwkgICAgICAgJnNm CQkJLyogUG9pbnRlciB0byBuZXh0IEZEQiAqLworCSAgICAgICApOworCWNtZmRiaSgmc2YsCQkJ LyogMm5kIEZEQiAtIGZpbGUgdG8gc2VuZCAqLworCSAgICAgICBfQ01JRkksCQkJLyogZmNvZGUg Ki8KKwkgICAgICAgIkZpbGUgdG8gdHJhbnNtaXQiLAkvKiBobHBtc2cgKi8KKwkgICAgICAgIiIs CQkJLyogZGVmYXVsdCAqLworCSAgICAgICAiIiwJCQkvKiBhZGR0bCBzdHJpbmcgZGF0YSAqLwor CSAgICAgICAwLAkJCS8qIGFkZHRsIG51bWVyaWMgZGF0YSAxICovCisJICAgICAgIDAsCQkJLyog YWRkdGwgbnVtZXJpYyBkYXRhIDIgKi8KKwkgICAgICAgeHhzdHJpbmcsCisJICAgICAgIE5VTEws CisjaWZkZWYgUElQRVNFTkQKKwkgICAgICAgJnR4CisjZWxzZQorCSAgICAgICBOVUxMCisjZW5k aWYgLyogUElQRVNFTkQgKi8KKwkgICAgICAgKTsKKyNpZmRlZiBQSVBFU0VORAorICAgICAgICBj bWZkYmkoJnR4LAorCSAgICAgICBfQ01UWFQsCQkJLyogZmNvZGUgKi8KKwkgICAgICAgIkNvbW1h bmQiLAkJLyogaGxwbXNnICovCisJICAgICAgICIiLAkJCS8qIGRlZmF1bHQgKi8KKwkgICAgICAg IiIsCQkJLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KKwkgICAgICAgMCwJCQkvKiBhZGR0bCBudW1l cmljIGRhdGEgMSAqLworCSAgICAgICAwLAkJCS8qIGFkZHRsIG51bWVyaWMgZGF0YSAyICovCisJ ICAgICAgIHh4c3RyaW5nLAorCSAgICAgICBOVUxMLAorCSAgICAgICBOVUxMCisJICAgICAgICk7 CisjZW5kaWYgLyogUElQRVNFTkQgKi8KKworCXdoaWxlICgxKSB7CisJICAgIHggPSBjbWZkYigm c3cpOworCSAgICBpZiAoeCA8IDApCisJICAgICAgcmV0dXJuKHgpOworCSAgICBpZiAoY21yZXN1 bHQuZmNvZGUgIT0gX0NNS0VZKQorCSAgICAgIGJyZWFrOworCSAgICBjID0gY21nYnJrKCk7CQkv KiBIYXZlIHN3aXRjaCwgZ2V0IGJyZWFrIGNoYXJhY3RlciAqLworCSAgICBpZiAoKGdldHZhbCA9 IChjID09ICc6JyB8fCBjID09ICc9JykpICYmICEoY21na3dmbGdzKCkgJiBDTV9BUkcpKSB7CisJ CXByaW50ZigiP1RoaXMgc3dpdGNoIGRvZXMgbm90IHRha2UgYW4gYXJndW1lbnRcbiIpOworCQly ZXR1cm4oLTkpOworCSAgICB9CisJICAgIGlmICghZ2V0dmFsICYmIChjbWdrd2ZsZ3MoKSAmIENN X0FSRykpIHsKKwkJcHJpbnRmKCI/VGhpcyBzd2l0Y2ggcmVxdWlyZXMgYW4gYXJndW1lbnRcbiIp OworCQlyZXR1cm4oLTkpOworCSAgICB9CisJICAgIG4gPSBjbXJlc3VsdC5ucmVzdWx0OwkvKiBO dW1lcmljIHJlc3VsdCA9IHN3aXRjaCBJRCAqLworCSAgICBzd2l0Y2ggKG4pIHsJCS8qIFByb2Nl c3MgdGhlIHN3aXRjaCAqLworI2lmZGVmIFBJUEVTRU5ECisJICAgICAgY2FzZSBYTUlfQ01EOgkJ LyogVHJhbnNtaXQgZnJvbSBhIGNvbW1hbmQgKi8KKwkJaWYgKG5vcHVzaCkgeworCQkgICAgcHJp bnRmKCI/U29ycnksIHN5c3RlbSBjb21tYW5kIGFjY2VzcyBpcyBkaXNhYmxlZFxuIik7CisJCSAg ICByZXR1cm4oLTkpOworCQl9CisJCXN3LmhscG1zZyA9ICJDb21tYW5kLCBvciBzd2l0Y2giOyAv KiBDaGFuZ2UgaGVscCBtZXNzYWdlICovCisJCXhwaXBlID0gMTsJCS8qIChObyB3YXkgdG8gdW5k byB0aGlzIG9uZSkgKi8KKwkJYnJlYWs7CisjZW5kaWYgLyogUElQRVNFTkQgKi8KKworCSAgICAg IGNhc2UgWE1JX0JJTjoJCS8qIEJpbmFyeSAqLworCQl4YmluYXJ5ID0gMTsKKwkJeHhsYXRlID0g MDsJCS8qIERvbid0IHRyYW5zbGF0ZSBjaGFyc2V0cyAqLworCQlzY2FuID0gMDsKKwkJYnJlYWs7 CisKKwkgICAgICBjYXNlIFhNSV9UWFQ6CQkvKiBUZXh0ICovCisJCXhiaW5hcnkgPSAwOworCQl4 eGxhdGUgPSAhdGNzX3RyYW5zcDsJLyogVHJhbnNsYXRlIGlmIFRFUk0gQ0hBUiBub3QgVFJBTlNQ ICovCisJCXNjYW4gPSAwOworCQlicmVhazsKKworCSAgICAgIGNhc2UgWE1JX1RSQToJCS8qIFRy YW5zcGFyZW50IHRleHQgKi8KKwkJeGJpbmFyeSA9IDA7CisJCXh4bGF0ZSA9IDA7CQkvKiBCdXQg ZG9uJ3QgdHJhbnNsYXRlIGNoYXJzZXRzICovCisJCXNjYW4gPSAwOworCQlicmVhazsKKworI2lm ZGVmIENPTU1FTlQKKwkgICAgICBjYXNlIFhNSV9WUkI6CQkvKiAvVkVSQk9TRSAqLworCSAgICAg IGNhc2UgWE1JX1FVSToJCS8qIC9RVUlFVCAqLworCQlicmVhazsJCQkvKiAobm90IGltcGxlbWVu dGVkIHlldCkgKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisKKwkgICAgICBjYXNlIFhNSV9OT1c6 CQkvKiAvTk9XQUlUICovCisJCXh4bm93YWl0ID0gMTsKKwkJYnJlYWs7CisKKwkgICAgICBjYXNl IFhNSV9OT0U6CQkvKiAvTk9XQUlUICovCisJCXh4ZWNobyA9IDA7CisJCWJyZWFrOworCisJICAg ICAgZGVmYXVsdDoKKwkJcmV0dXJuKC0yKTsKKwkgICAgfQorCisJfQorCWlmIChjbXJlc3VsdC5m Y29kZSAhPSBfQ01JRkkgJiYgY21yZXN1bHQuZmNvZGUgIT0gX0NNVFhUKQorCSAgcmV0dXJuKC0y KTsKKwlja3N0cm5jcHkobGluZSxjbXJlc3VsdC5zcmVzdWx0LExJTkJVRlNJWik7IC8qIEZpbGVu YW1lICovCisJaWYgKHpmbnFmcChsaW5lLFRNUEJVRlNJWix0bXBidWYpKQorCSAgY2tzdHJuY3B5 KGxpbmUsdG1wYnVmLExJTkJVRlNJWik7CisJcyA9IGxpbmU7CisJaWYgKCh5ID0gY21jZm0oKSkg PCAwKQkJLyogQ29uZmlybSAqLworCSAgcmV0dXJuKHkpOworI2lmZGVmIENLX0FQQworCWlmICgo YXBjYWN0aXZlID09IEFQQ19MT0NBTCkgfHwKKwkgICAgKChhcGNhY3RpdmUgPT0gQVBDX1JFTU9U RSkgJiYgKCEoYXBjc3RhdHVzICYgQVBDX1VOQ0gpKSkpCisJICByZXR1cm4oc3VjY2VzcyA9IDAp OworI2VuZGlmIC8qIENLX0FQQyAqLworCWlmIChjbXJlc3VsdC5ucmVzdWx0ICE9IDApIHsKKwkg ICAgcHJpbnRmKCI/T25seSBhIHNpbmdsZSBmaWxlIG1heSBiZSB0cmFuc21pdHRlZFxuIik7CisJ ICAgIHJldHVybigtOSk7CisJfQorI2lmZGVmIFBJUEVTRU5ECisJaWYgKHhwaXBlKSB7CisJICAg IHMgPSBicnN0cmlwKHMpOworCSAgICBpZiAoISpzKSB7CisJCXByaW50ZigiP1NvcnJ5LCBhIGNv bW1hbmQgdG8gc2VuZCBmcm9tIGlzIHJlcXVpcmVkXG4iKTsKKwkJcmV0dXJuKC05KTsKKwkgICAg fQorCSAgICBwaXBlc2VuZCA9IDE7CisJfQorI2VuZGlmIC8qIFBJUEVTRU5EICovCisKKwlpZiAo c2NhbiAmJiAoZmlsZXBlZWsKKyNpZm5kZWYgTk9YRkVSCisJCSAgICAgfHwgcGF0dGVybnMKKyNl bmRpZiAvKiBOT1hGRVIgKi8KKwkJICAgICApKSB7CQkvKiBJZiB1c2VyIGRpZG4ndCBzcGVjaWZ5 IHR5cGUgKi8KKwkgICAgaW50IGssIHg7CQkJICAgICAgLyogc2NhbiB0aGUgZmlsZSB0byBzZWUg Ki8KKwkgICAgeCA9IC0xOworCSAgICBrID0gc2NhbmZpbGUocywmeCxuc2NhbmZpbGUpOworCSAg ICBpZiAoayA+IDApIHhiaW5hcnkgPSAoayA9PSBGVF9CSU4pID8gWFlGVF9CIDogWFlGVF9UOwor CX0KKwlpZiAoIXhmcnhsYSkgeHhsYXRlID0gMDsKKwlzdWNjZXNzID0gdHJhbnNtaXQocywKKwkJ CSAgIChjaGFyKSAoeHhub3dhaXQgPyAnXDAnIDogKGNoYXIpeG1pdHApLAorCQkJICAgeHhsYXRl LAorCQkJICAgeGJpbmFyeSwKKwkJCSAgIHh4ZWNobworCQkJICAgKTsKKwlyZXR1cm4oc3VjY2Vz cyk7CisgICAgfQorI2VuZGlmIC8qIE5PWE1JVCAqLworCisjaWZuZGVmIE5PRlJJTExTCisgICAg aWYgKGN4ID09IFhYVFlQICB8fCBjeCA9PSBYWENBVCB8fCBjeCA9PSBYWE1PUkUgfHwKKwljeCA9 PSBYWEhFQUQgfHwgY3ggPT0gWFhUQUlMKSB7CisJaW50IHBhZ2luZyA9IDAsIGhhdmVuYW1lID0g MCwgaGVhZCA9IDAsIHdpZHRoID0gMDsKKwlpbnQgaGVpZ2h0ID0gMCwgY291bnQgPSAwOworCWNo YXIgcGZ4YnVmWzY0XSwgKiBwcmVmaXggPSBOVUxMOworCWNoYXIgb3V0ZmlsZVtDS01BWFBBVEgr MV07CisJc3RydWN0IEZEQiBzZiwgc3c7CisJY2hhciAqIHBhdCA9IE5VTEw7CisJaW50IGluY3Mg PSAwLCBvdXRjcyA9IDAsIGNzZXQgPSAtMSwgbnVtYmVyID0gMDsKKyNpZmRlZiBVTklDT0RFCisg ICAgICAgIGNoYXIgKiB0b2NzID0gIiI7CisJZXh0ZXJuIGludCBmaWxlb3JkZXI7CisjaWZkZWYg T1MyCisjaWZkZWYgTlQKKwljaGFyIGd1aWJ1ZlsxMjhdLCAqIGd1aV90aXRsZSA9IE5VTEw7CisJ aW50ICBndWkgPSAwOworI2VuZGlmIC8qIE5UICovCisjaWZuZGVmIE5PQ1NFVFMKKwlleHRlcm4g aW50IHRjc3IsIHRjc2w7CisjZW5kaWYgLyogTk9DU0VUUyAqLworI2VuZGlmIC8qIE9TMiAqLwor I2VuZGlmIC8qIFVOSUNPREUgKi8KKworCW91dGZpbGVbMF0gPSBOVUw7CisKKwlpZiAoY3ggPT0g WFhNT1JFKQorCSAgcGFnaW5nID0gMTsKKwllbHNlIGlmIChjeCA9PSBYWENBVCkKKwkgIHBhZ2lu ZyA9IDA7CisJZWxzZQorCSAgcGFnaW5nID0gKHR5cF9wYWdlIDwgMCkgPyB4YXNrbW9yZSA6IHR5 cF9wYWdlOworCWlmIChwYWdpbmcgPCAwKQorCSAgcGFnaW5nID0gc2F2ZWFzazsKKworCWlmIChj eCA9PSBYWEhFQUQpIHsKKwkgICAgaGVhZCA9IDEwOworCSAgICBjeCA9IFhYVFlQOworCX0gZWxz ZSBpZiAoY3ggPT0gWFhUQUlMKSB7CisJICAgIGhlYWQgPSAtMTA7CisJICAgIGN4ID0gWFhUWVA7 CisJfQorCisjaWZkZWYgSUtTRAorCWlmIChpbnNlcnZlciAmJiAhRU5BQkxFRChlbl90eXApKSB7 CisJICAgIHByaW50ZigiP1NvcnJ5LCBUWVBFIGNvbW1hbmQgZGlzYWJsZWRcbiIpOworCSAgICBy ZXR1cm4oLTkpOworCX0KKyNlbmRpZiAvKiBJS1NEICovCisKKwljbWZkYmkoJnN3LAkJCS8qIDJu ZCBGREIgLSBvcHRpb25hbCAvUEFHRSBzd2l0Y2ggKi8KKwkgICAgICAgX0NNS0VZLAkJCS8qIGZj b2RlICovCisJICAgICAgICJGaWxlbmFtZSBvciBzd2l0Y2giLAkvKiBobHBtc2cgKi8KKwkgICAg ICAgIiIsCQkJLyogZGVmYXVsdCAqLworCSAgICAgICAiIiwJCQkvKiBhZGR0bCBzdHJpbmcgZGF0 YSAqLworCSAgICAgICBudHlwZXRhYiwJCS8qIGFkZHRsIG51bWVyaWMgZGF0YSAxOiB0Ymwgc2l6 ZSAqLworCSAgICAgICA0LAkJCS8qIGFkZHRsIG51bWVyaWMgZGF0YSAyOiA0ID0gY21zd2kgKi8K KwkgICAgICAgeHhzdHJpbmcsCQkvKiBQcm9jZXNzaW5nIGZ1bmN0aW9uICovCisJICAgICAgIHR5 cGV0YWIsCQkJLyogS2V5d29yZCB0YWJsZSAqLworCSAgICAgICAmc2YJCQkvKiBQb2ludGVyIHRv IG5leHQgRkRCICovCisJICAgICAgICk7CisJY21mZGJpKCZzZiwJCQkvKiAxc3QgRkRCIC0gZmls ZSB0byB0eXBlICovCisJICAgICAgIF9DTUlGSSwJCQkvKiBmY29kZSAqLworCSAgICAgICAiIiwJ CQkvKiBobHBtc2cgKi8KKwkgICAgICAgIiIsCQkJLyogZGVmYXVsdCAqLworCSAgICAgICAiIiwJ CQkvKiBhZGR0bCBzdHJpbmcgZGF0YSAqLworCSAgICAgICAwLAkJCS8qIGFkZHRsIG51bWVyaWMg ZGF0YSAxICovCisJICAgICAgIDAsCQkJLyogYWRkdGwgbnVtZXJpYyBkYXRhIDIgKi8KKwkgICAg ICAgeHhzdHJpbmcsCisJICAgICAgIE5VTEwsCisJICAgICAgIE5VTEwKKwkgICAgICAgKTsKKwor CXdoaWxlICghaGF2ZW5hbWUpIHsKKwkgICAgeCA9IGNtZmRiKCZzdyk7CQkvKiBQYXJzZSBzb21l dGhpbmcgKi8KKwkgICAgZGVidWcoRjEwMSwidHlwZSBjbWZkYiIsIiIseCk7CisJICAgIGRlYnVn KEYxMDEsInR5cGUgY21yZXN1bHQuZmNvZGUiLCIiLGNtcmVzdWx0LmZjb2RlKTsKKwkgICAgZGVi dWcoRjEwMSwidHlwZSBjbXJlc3VsdC5ucmVzdWx0IiwiIixjbXJlc3VsdC5ucmVzdWx0KTsKKwkg ICAgaWYgKHggPCAwKSB7CQkJLyogRXJyb3IgKi8KKwkJaWYgKHggPT0gLTMpIHsKKwkJICAgIHgg PSAtOTsKKwkJICAgIHByaW50ZigiP0ZpbGVuYW1lIHJlcXVpcmVkXG4iKTsKKwkJfQorCQlyZXR1 cm4oeCk7CisJICAgIH0gZWxzZSBpZiAoY21yZXN1bHQuZmNvZGUgPT0gX0NNS0VZKSB7CisJCWNo YXIgYzsgaW50IGdldHZhbDsKKwkJYyA9IGNtZ2JyaygpOworCQlnZXR2YWwgPSAoYyA9PSAnOicg fHwgYyA9PSAnPScpOworCQlpZiAoZ2V0dmFsICYmICEoY21na3dmbGdzKCkgJiBDTV9BUkcpKSB7 CisJCSAgICBwcmludGYoIj9UaGlzIHN3aXRjaCBkb2VzIG5vdCB0YWtlIGFuIGFyZ3VtZW50XG4i KTsKKwkJICAgIHJldHVybigtOSk7CisJCX0KKyNpZmRlZiBDT01NRU5UCisJCWlmICghZ2V0dmFs ICYmIChjbWdrd2ZsZ3MoKSAmIENNX0FSRykpIHsKKwkJICAgIHByaW50ZigiP1RoaXMgc3dpdGNo IHJlcXVpcmVzIGFuIGFyZ3VtZW50XG4iKTsKKwkJICAgIC8qIE5vdCBpZiBpdCBoYXMgYSBkZWZh dWx0ISAqLworCQkgICAgcmV0dXJuKC05KTsKKwkJfQorI2VuZGlmIC8qIENPTU1FTlQgKi8KKwkJ c3dpdGNoIChjbXJlc3VsdC5ucmVzdWx0KSB7CisjaWZkZWYgQ0tfVFRHV1NJWgorCQkgIGNhc2Ug VFlQX1BBRzoKKwkJICAgIHBhZ2luZyA9IDE7CisJCSAgICBicmVhazsKKworCQkgIGNhc2UgVFlQ X05PUDoKKwkJICAgIHBhZ2luZyA9IDA7CisJCSAgICBicmVhazsKKyNlbmRpZiAvKiBDS19UVEdX U0laICovCisKKwkJICBjYXNlIFRZUF9DT1U6CisJCSAgICBwYWdpbmcgPSAwOworCQkgICAgY291 bnQgPSAxOworCQkgICAgYnJlYWs7CisKKwkJICBjYXNlIFRZUF9IRUE6CisJCSAgY2FzZSBUWVBf VEFJOgorCQkgICAgeSA9IDEwOworCQkgICAgaWYgKGdldHZhbCkKKwkJICAgICAgaWYgKCh4ID0g Y21udW0oIk51bWJlciBvZiBsaW5lcyIsCisJCQkJICAgICAiMTAiLDEwLCZ5LHh4c3RyaW5nKSkg PCAwKQorCQkJcmV0dXJuKHgpOworCQkgICAgaGVhZCA9IChjbXJlc3VsdC5ucmVzdWx0ID09IFRZ UF9UQUkpID8gLXkgOiB5OworCQkgICAgYnJlYWs7CisKKwkJICBjYXNlIFRZUF9XSUQ6CisJCSAg ICB5ID0gdHlwX3dpZCA+IC0xID8gdHlwX3dpZCA6IGNtZF9jb2xzOworCQkgICAgaWYgKGdldHZh bCkKKwkJICAgICAgaWYgKCh4ID0gY21udW0oIkNvbHVtbiBhdCB3aGljaCB0byB0cnVuY2F0ZSIs CisJCQkJICAgICBja2l0b2EoeSksMTAsJnkseHhzdHJpbmcpKSA8IDApCisJCQlyZXR1cm4oeCk7 CisJCSAgICB3aWR0aCA9IHk7CisJCSAgICBicmVhazsKKworI2lmZGVmIEtVSQorCQkgIGNhc2Ug VFlQX0hJRzoKKwkJICAgIGlmIChnZXR2YWwpCisJCSAgICAgIGlmICgoeCA9IGNtbnVtKCJIZWln aHQgb2YgR1VJIGRpYWxvZyIsCisJCQkJICAgICBja2l0b2EoeSksMTAsJnkseHhzdHJpbmcpKSA8 IDApCisJCQlyZXR1cm4oeCk7CisJCSAgICBoZWlnaHQgPSB5OworCQkgICAgYnJlYWs7CisjZW5k aWYgLyogS1VJICovCisKKwkJICBjYXNlIFRZUF9QQVQ6CisJCSAgICBpZiAoIWdldHZhbCAmJiAo Y21na3dmbGdzKCkgJiBDTV9BUkcpKSB7CisJCQlwcmludGYoIj9UaGlzIHN3aXRjaCByZXF1aXJl cyBhbiBhcmd1bWVudFxuIik7CisJCQlyZXR1cm4oLTkpOworCQkgICAgfQorCQkgICAgaWYgKCh4 ID0gY21mbGQoInBhdHRlcm4iLCIiLCZzLHh4c3RyaW5nKSkgPCAwKQorCQkgICAgICByZXR1cm4o eCk7CisJCSAgICBja3N0cm5jcHkodG1wYnVmLHMsVE1QQlVGU0laKTsKKwkJICAgIHBhdCA9IHRt cGJ1ZjsKKwkJICAgIGJyZWFrOworCisJCSAgY2FzZSBUWVBfUEZYOgorCQkgICAgaWYgKCFnZXR2 YWwgJiYgKGNtZ2t3ZmxncygpICYgQ01fQVJHKSkgeworCQkJcHJpbnRmKCI/VGhpcyBzd2l0Y2gg cmVxdWlyZXMgYW4gYXJndW1lbnRcbiIpOworCQkJcmV0dXJuKC05KTsKKwkJICAgIH0KKwkJICAg IGlmICgoeCA9IGNtZmxkKCJwcmVmaXggZm9yIGVhY2ggbGluZSIsIiIsJnMseHhzdHJpbmcpKSA8 IDApCisJCSAgICAgIHJldHVybih4KTsKKwkJICAgIGlmICgoaW50KXN0cmxlbihzKSA+IDYzKSB7 CisJCQlwcmludGYoIj9Ub28gbG9uZyAtIDYzIG1heFxuIik7CisJCQlyZXR1cm4oLTkpOworCQkg ICAgfQorCQkgICAgY2tzdHJuY3B5KHBmeGJ1ZixzLDY0KTsKKwkJICAgIHByZWZpeCA9IGJyc3Ry aXAocGZ4YnVmKTsKKwkJICAgIG51bWJlciA9IDA7CisJCSAgICBicmVhazsKKworI2lmZGVmIEtV SQorCQkgIGNhc2UgVFlQX0dVSToKKwkJICAgIGlmICghZ2V0dmFsICYmIChjbWdrd2ZsZ3MoKSAm IENNX0FSRykpIHsKKwkJCXByaW50ZigiP1RoaXMgc3dpdGNoIHJlcXVpcmVzIGFuIGFyZ3VtZW50 XG4iKTsKKwkJCXJldHVybigtOSk7CisJCSAgICB9CisJCSAgICBpZiAoKHggPSBjbWZsZCgiRGlh bG9nIGJveCB0aXRsZSIsIiIsJnMseHhzdHJpbmcpKSA8IDApIHsKKwkJCWlmICh4ICE9IC0zKQor CQkJICByZXR1cm4oeCk7CisJCSAgICB9IGVsc2UgeworCQkJaWYgKChpbnQpc3RybGVuKHMpID4g MTI3KSB7CisJCQkgICAgcHJpbnRmKCI/VG9vIGxvbmcgLSAxMjcgbWF4XG4iKTsKKwkJCSAgICBy ZXR1cm4oLTkpOworCQkJfQorCQkJY2tzdHJuY3B5KGd1aWJ1ZixzLDEyOCk7CisJCQlndWlfdGl0 bGUgPSBicnN0cmlwKGd1aWJ1Zik7CisJCSAgICB9CisJCSAgICBndWkgPSAxOworCQkgICAgYnJl YWs7CisjZW5kaWYgLyogS1VJICovCisKKwkJICBjYXNlIFRZUF9OVU06CQkvKiAvTlVNQkVSICov CisJCSAgICBudW1iZXIgPSAxOworCQkgICAgcHJlZml4ID0gTlVMTDsKKwkJICAgIGJyZWFrOwor CisjaWZkZWYgVU5JQ09ERQorCQkgIGNhc2UgVFlQX1hQQToJCS8qIC9UUkFOU1BBUkVOVCAqLwor CQkgICAgaW5jcyA9IDA7CisJCSAgICBjc2V0ID0gMDsKKwkJICAgIG91dGNzID0gLTE7CisJCSAg ICBicmVhazsKKworCQkgIGNhc2UgVFlQX1hJTjoJCS8qIC9DSEFSQUNURVItU0VUOiAqLworCQkg ICAgaWYgKCFnZXR2YWwgJiYgKGNtZ2t3ZmxncygpICYgQ01fQVJHKSkgeworCQkJcHJpbnRmKCI/ VGhpcyBzd2l0Y2ggcmVxdWlyZXMgYW4gYXJndW1lbnRcbiIpOworCQkJcmV0dXJuKC05KTsKKwkJ ICAgIH0KKwkJICAgIGlmICgoaW5jcyA9IGNta2V5KGZjc3RhYixuZmlsYywKKwkJCQkgICAgICAi Y2hhcmFjdGVyLXNldCBuYW1lIiwiIix4eHN0cmluZykpIDwgMCkgeworCQkJaWYgKGluY3MgPT0g LTMpCS8qIE5vdGU6IE5vIGRlZmF1bHQgKi8KKwkJCSAgaW5jcyA9IC0yOworCQkJcmV0dXJuKGlu Y3MpOworCQkgICAgfQorCQkgICAgY3NldCA9IGluY3M7CisJCSAgICBicmVhazsKKworCQkgIGNh c2UgVFlQX1hVVDoJCS8qIC9UUkFOU0xBVEUtVE86ICovCisJCSAgICBpZiAoIWdldHZhbCAmJiAo Y21na3dmbGdzKCkgJiBDTV9BUkcpKSB7CisJCQlwcmludGYoIj9UaGlzIHN3aXRjaCByZXF1aXJl cyBhbiBhcmd1bWVudFxuIik7CisJCQlyZXR1cm4oLTkpOworCQkgICAgfQorI2lmZGVmIE9TMgor CQkgICAgaWYgKCFpbnNlcnZlciAmJiAhazk1c3Rkb3V0KSB7CisJCQl0b2NzID0gInVjczIiOwor CQkgICAgfSBlbHNlIHsKKyNpZmRlZiBDS09VTkkKKwkJCXRvY3MgPSBybG9va3VwKHR4cnRhYixu dHhydGFiLHRjc2wpOworI2Vsc2UgLyogQ0tPVU5JICovCisJCQlleHRlcm4gc3RydWN0IGtleXRh YiB0dGNzdGFiW107CisJCQlleHRlcm4gaW50IG50eHJ0YWI7CisJCQl0b2NzID0gcmxvb2t1cCh0 dGNzdGFiLG50ZXJtYyx0b2NzKTsKKwkJCWlmICghdG9jcykKKwkJCSAgdG9jcyA9IGdldGRjc2V0 KCk7CisjZW5kaWYgLyogQ0tPVU5JICovCisgICAgICAgICAgICAgICAgICAgIH0KKyNlbHNlIC8q IE9TMiAqLworCQkgICAgdG9jcyA9IGdldGRjc2V0KCk7CisjZW5kaWYgLyogT1MyICovCisJCSAg ICBpZiAoKG91dGNzID0gY21rZXkoZmNzdGFiLG5maWxjLAorCQkJCSAgICAgICAiY2hhcmFjdGVy LXNldCIsdG9jcyx4eHN0cmluZykpIDwgMCkKKwkJICAgICAgcmV0dXJuKG91dGNzKTsKKwkJICAg IGJyZWFrOworI2VuZGlmIC8qIFVOSUNPREUgKi8KKwkJICBjYXNlIFRZUF9PVVQ6CisJCSAgICBp ZiAoKHggPSBjbW9maSgiRmlsZSBmb3IgcmVzdWx0IGxpbmVzIiwiIiwKKwkJCQkgICAmcyx4eHN0 cmluZykpIDwgMCkKKwkJICAgICAgcmV0dXJuKHgpOworCQkgICAgY2tzdHJuY3B5KG91dGZpbGUs cyxDS01BWFBBVEgpOworCQkgICAgYnJlYWs7CisJCX0KKwkgICAgfSBlbHNlIGlmIChjbXJlc3Vs dC5mY29kZSA9PSBfQ01JRkkpCisJICAgICAgaGF2ZW5hbWUgPSAxOworCSAgICBlbHNlCisJICAg ICAgcmV0dXJuKC0yKTsKKwl9CisJaWYgKGhhdmVuYW1lKSB7CisJICAgIGNrc3RybmNweShsaW5l LGNtcmVzdWx0LnNyZXN1bHQsTElOQlVGU0laKTsKKwkgICAgeSA9IGNtcmVzdWx0Lm5yZXN1bHQ7 CisJfSBlbHNlIHsKKwkgICAgaWYgKCh4ID0gY21pZmkoIkZpbGVuYW1lIiwiIiwmcywmeSx4eHN0 cmluZykpIDwgMCkgeworCQlpZiAoeCA9PSAtMykgeworCQkgICAgcHJpbnRmKCI/TmFtZSBvZiBh biBleGlzdGluZyBmaWxlIHJlcXVpcmVkXG4iKTsKKwkJICAgIHJldHVybigtOSk7CisJCX0gZWxz ZSByZXR1cm4oeCk7CisJICAgIH0KKwkgICAgY2tzdHJuY3B5KGxpbmUscyxMSU5CVUZTSVopOwor CX0KKwlpZiAoeSAhPSAwKSB7CisJICAgIHByaW50ZigiP0Egc2luZ2xlIGZpbGUgcGxlYXNlXG4i KTsKKwkgICAgcmV0dXJuKC05KTsKKwl9CisjaWZkZWYgS1VJCisJaWYgKCBvdXRmaWxlWzBdICYm IGd1aSApIHsKKwkgICAgcHJpbnRmKCI/L0dVSSBhbmQgL09VVFBVVCBhcmUgaW5jb21wYXRpYmxl XG4iKTsKKwkgICAgcmV0dXJuKC05KTsKKwl9CisjZW5kaWYgLyogS1VJICovCisKKwlpZiAoKHkg PSBjbWNmbSgpKSA8IDApCQkvKiBDb25maXJtIHRoZSBjb21tYW5kICovCisJICByZXR1cm4oeSk7 CisKKyNpZmRlZiBVTklDT0RFCisJZmlsZW9yZGVyID0gLTE7CisJaWYgKGNzZXQgPCAwICYmIGZp bGVwZWVrKSB7CS8qIElmIG5vIGNoYXJzZXQgc3dpdGNoZXMgZ2l2ZW4gKi8KKwkgICAgaW50IGss IHggPSAtMTsKKwkgICAgayA9IHNjYW5maWxlKGxpbmUsJngsbnNjYW5maWxlKTsgLyogQ2FsbCBm aWxlIGFuYWx5emVyICovCisJICAgIGRlYnVnKEYxMTEsInR5cGUgc2NhbmZpbGUiLGxpbmUsayk7 CisJICAgIGRlYnVnKEYxMDEsInR5cGUgc2NhbmZpbGUgZmxhZyIsIiIseCk7CisJICAgIHN3aXRj aChrKSB7CisJICAgICAgY2FzZSBGVF9VVEY4OgkJLyogd2hpY2ggY2FuIGRldGVjdCBVVEYtOC4u LiAqLworCQljc2V0ID0gMDsKKwkJaW5jcyA9IEZDX1VURjg7CisJCWJyZWFrOworCSAgICAgIGNh c2UgRlRfVUNTMjoJCS8qIGFuZCBVQ1MtMi4uLiAqLworCQljc2V0ID0gMDsKKwkJaW5jcyA9IEZD X1VDUzI7CisJCWZpbGVvcmRlciA9IHg7CQkvKiBldmVuIGlmIHRoZXJlIGlzIG5vIEJPTS4gKi8K KwkJZGVidWcoRjEwMSwidHlwZSBmaWxlb3JkZXIiLCIiLGZpbGVvcmRlcik7CisJCWJyZWFrOwor CSAgICB9CisJfQorI2lmZGVmIE9TMgorICAgICAgICBpZiAoY3NldCA8IDApIHsJCQkvKiBJZiBp bnB1dCBjaGFyc2V0IHN0aWxsIG5vdCBrbm93biAqLworI2lmZGVmIENLT1VOSQorICAgICAgICAg ICAgdG9jcyA9IHJsb29rdXAodHhydGFiLG50eHJ0YWIsdGNzbCk7CisjZWxzZSAvKiBDS09VTkkg Ki8KKyAgICAgICAgICAgIGV4dGVybiBzdHJ1Y3Qga2V5dGFiIHR0Y3N0YWJbXTsKKyAgICAgICAg ICAgIGV4dGVybiBpbnQgbnR4cnRhYjsKKyAgICAgICAgICAgIHRvY3MgPSBybG9va3VwKHR0Y3N0 YWIsbnRlcm1jLGluY3MpOworICAgICAgICAgICAgaWYgKCF0b2NzKQorCSAgICAgIHRvY3MgPSBn ZXRkY3NldCgpOworI2VuZGlmIC8qIENLT1VOSSAqLworICAgICAgICAgICAgaW5jcyA9IGxvb2t1 cChmY3N0YWIsdG9jcyxuZmlsYywmeCk7CisgICAgICAgIH0KKyNlbmRpZiAvKiBPUzIgKi8KKwor ICAgICAgICBpZiAob3V0Y3MgPT0gMCAmJiBpbmNzICE9IDApIHsJLyogU3VwcGx5IGRlZmF1bHQg dGFyZ2V0IGNoYXJzZXQgKi8KKwkgICAgaW50IHggPSAwOwkJCS8qIGlmIHN3aXRjaCBub3QgZ2l2 ZW4uICovCisJICAgIHRvY3MgPSBnZXRkY3NldCgpOworCSAgICBvdXRjcyA9IGxvb2t1cChmY3N0 YWIsdG9jcyxuZmlsYywmeCk7CisJfQorI2Vsc2UgIC8qICFVTklDT0RFICovCisJaWYgKGNzZXQg PCAwKSBpbmNzID0gb3V0Y3MgPSAwOworI2VuZGlmIC8qIFVOSUNPREUgKi8KKworCWlmIChvdXRm aWxlWzBdICYmIHBhZ2luZykJLyogVGhpcyBjb21iaW5hdGlvbiBtYWtlcyBubyBzZW5zZSAqLwor CSAgcGFnaW5nID0gMDsJCQkvKiBzbyB0dXJuIG9mZiBwYWdpbmcgKi8KKworI2lmZGVmIEtVSQor CS8qIE5vIHBhZ2luZyB3aGVuIGRpYWxvZyBpcyB1c2VkICovCisJaWYgKCBndWkgJiYgcGFnaW5n ICkKKwkgIHBhZ2luZyA9IDA7CisKKwlpZiAoICFndWkgJiYgaGVpZ2h0ICkgeworCSAgICBwcmlu dGYoIj9UaGUgL0hFSUdIVCBzd2l0Y2ggaXMgbm90IHN1cHBvcnRlZCB3aXRob3V0IC9HVUlcbiIp OworCSAgICByZXR1cm4oLTkpOworCX0KKyNlbmRpZiAvKiBLVUkgKi8KKworCWlmIChjb3VudCkg cGFnaW5nID0gLTE7CisJZGVidWcoRjExMSwidHlwZSIsbGluZSxwYWdpbmcpOworI2lmZGVmIEtV SQorCWlmICggZ3VpICkgeworCSAgICBzID0gKGNoYXIgKikxOyAgICAvKiBvaywgaXRzIGFuIHVn bHkgaGFjayAqLworCSAgICBpZiAoZ3VpX3RleHRfcG9wdXBfY3JlYXRlKGd1aV90aXRsZSA/CisJ CQkJICAgICAgZ3VpX3RpdGxlIDogbGluZSwgaGVpZ2h0LHdpZHRoKSA8IDApIHsKKwkJcHJpbnRm KCI/L0dVSSBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgc3lzdGVtXG4iKTsKKwkJZ3VpID0gMDsKKwkJ cmV0dXJuKC05KTsKKwkgICAgfQorCSAgICB3aWR0aCA9IDA7CisJfSBlbHNlCisjZW5kaWYgLyog S1VJICovCisJICBzID0gb3V0ZmlsZTsKKwlzdWNjZXNzID0KKwkgIGRvdHlwZShsaW5lLHBhZ2lu ZywwLGhlYWQscGF0LHdpZHRoLHByZWZpeCxpbmNzLG91dGNzLHMsbnVtYmVyKTsKKwlyZXR1cm4o c3VjY2Vzcyk7CisgICAgfQorI2VuZGlmIC8qIE5PRlJJTExTICovCisKKyNpZm5kZWYgTk9DU0VU UworICAgIGlmIChjeCA9PSBYWFhMQSkgewkJCS8qIFRSQU5TTEFURSBmaWxlJ3MgY2hhcnNldCAq LworCV9QUk9UT1RZUCAoaW50IGRveGxhdGUsICggdm9pZCApICk7CisJcmV0dXJuKGRveGxhdGUo KSk7CisgICAgfQorI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKworICAgIGlmIChjeCA9PSBYWFZFUikg ewkJCS8qIFZFUlNJT04gKi8KKwlpbnQgbiA9IDA7CisJZXh0ZXJuIGNoYXIgKiBja19wYXRjaCwg KiBja19zX3Rlc3Q7CisjaWZkZWYgQ09NTUVOVAorCWV4dGVybiBpbnQgaG10b3BsaW5lOworI2Vu ZGlmIC8qIENPTU1FTlQgKi8KKwlpZiAoKHkgPSBjbWNmbSgpKSA8IDApCisgICAgICAgICAgcmV0 dXJuKHkpOworCisjaWZkZWYgQ0tfNjRCSVQKKwlwcmludGYoIlxuJXMsIGZvciVzICg2NC1iaXQp XG4gTnVtZXJpYzogJWxkIix2ZXJzaW8sY2t4c3lzLHZlcm51bSk7CisjZWxzZQorCXByaW50Zigi XG4lcywgZm9yJXNcbiBOdW1lcmljOiAlbGQiLHZlcnNpbyxja3hzeXMsdmVybnVtKTsKKyNlbmRp ZgkvKiBDS182NEJJVCAqLworCXByaW50ZigiXG5cbiIpOworICAgICAgICBwcmludGYoIkF1dGhv cnM6XG4iKTsKKwlwcmludGYoIiBGcmFuayBkYSBDcnV6LCBDb2x1bWJpYSBVbml2ZXJzaXR5XG4i KTsKKyAgICAgICAgcHJpbnRmKCIgSmVmZnJleSBFcmljIEFsdG1hbiwgU2VjdXJlIEVuZHBvaW50 cywgSW5jLiAlc1xuIiwKKwkgICAgICAgIjxqYWx0bWFuQHNlY3VyZS1lbmRwb2ludHMuY29tPiIK KwkgICAgICAgKTsKKwlwcmludGYoIiBDb250cmlidXRpb25zIGZyb20gbWFueSBvdGhlcnMuXG4i KTsKKwluID0gNzsKKwlpZiAoKmNrX3NfdGVzdCkgeworCSAgICBwcmludGYoIlxuVEhJUyBJUyBB IFRFU1QgVkVSU0lPTiwgTk9UIEZPUiBQUk9EVUNUSU9OIFVTRS5cbiIpOworCSAgICBuICs9IDI7 CisJfQorCWlmICgqY2tfcGF0Y2gpIHsKKwkgICAgcHJpbnRmKCIgUGF0Y2hlczogJXNcbiIsIGNr X3BhdGNoKTsKKwkgICAgbisrOworCX0KKwlwcmludGYoIiBUeXBlIENPUFlSSUdIVCBmb3IgY29w eXJpZ2h0IGFuZCBsaWNlbnNlLlxuXG4iKTsKKyNpZmRlZiBPUzIKKwlzaG9yZWcoKTsKKyNlbHNl CisjaWZkZWYgQ09NTUVOVAorCWhtdG9wbGluZSA9IG4rMTsKKwlobXNnYShjb3B5cmlnaHQpOwor CWhtdG9wbGluZSA9IDA7CisjZW5kaWYgLyogQ09NTUVOVCAqLworI2VuZGlmIC8qIE9TMiAqLwor CXJldHVybihzdWNjZXNzID0gMSk7CisgICAgfQorCisgICAgaWYgKGN4ID09IFhYQ1BSKSB7CQkJ LyogQ09QWVJJR0hUIG9yIExJQ0VOU0UgKi8KKyAgICAgICAgX1BST1RPVFlQKCBpbnQgaG1zZ2Fh LCAoY2hhciAqIFtdLCBjaGFyICopICk7CisgICAgICAgIGV4dGVybiBjaGFyICogY2tfY3J5ZWFy OworCWlmICgoeSA9IGNtY2ZtKCkpIDwgMCkKKyAgICAgICAgICByZXR1cm4oeSk7CisJaG1zZ2Fh KGNvcHlyaWdodCxja19jcnllYXIpOworCXJldHVybihzdWNjZXNzID0gMSk7CisgICAgfQorCisj aWZuZGVmIE1BQwkJCQkvKiBPbmx5IGZvciBtdWx0aXVzZXIgc3lzdGVtcyAqLworI2lmbmRlZiBP UzIKKyNpZm5kZWYgTk9GUklMTFMKKyAgICBpZiAoY3ggPT0gWFhXSE8pIHsJCQkvKiBXSE8gKi8K KwljaGFyICp3YzsKKyNpZmRlZiBJS1NECisJaWYgKGluc2VydmVyICYmICFFTkFCTEVEKGVuX3do bykpIHsKKwkgICAgcHJpbnRmKCI/U29ycnksIFdITyBjb21tYW5kIGRpc2FibGVkXG4iKTsKKwkg ICAgcmV0dXJuKC05KTsKKwl9CisjZW5kaWYgLyogSUtTRCAqLworI2lmZGVmIGRhdGFnZW5lcmFs CisJaWYgKCh6ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeik7CisJaWYgKG5vcHVzaCkgeworCSAg ICBwcmludGYoIj9Tb3JyeSwgd2hvIG5vdCBhbGxvd2VkXG4iKTsKKwkgICAgcmV0dXJuKHN1Y2Nl c3MgPSAwKTsKKwl9CisgICAgICAgIHhzeXN0ZW0oV0hPQ01EKTsKKyNlbHNlCisJaWYgKCh5ID0g Y210eHQoInVzZXIgbmFtZSIsIiIsJnMseHhzdHJpbmcpKSA8IDApIHJldHVybih5KTsKKyAgICAg ICAgaWYgKG5vcHVzaCkgeworCSAgICBwcmludGYoIj9Tb3JyeSwgV0hPIGNvbW1hbmQgZGlzYWJs ZWRcbiIpOworCSAgICByZXR1cm4oc3VjY2VzcyA9IDApOworCX0KKwlpZiAoISh3YyA9IGdldGVu digiQ0tfV0hPIikpKSB3YyA9IFdIT0NNRDsKKwlpZiAod2MpCisJICBpZiAoKGludCkgc3RybGVu KHdjKSA+IDApIHsKKwkgICAgICBja21ha21zZyhsaW5lLExJTkJVRlNJWix3YywiICIscyxOVUxM KTsKKwkgICAgICB4c3lzdGVtKGxpbmUpOworCSAgfQorI2VuZGlmIC8qIGRhdGFnZW5lcmFsICov CisJcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKyAgICB9CisjZW5kaWYgLyogTk9GUklMTFMgKi8KKyNl bmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBNQUMgKi8KKworI2lmbmRlZiBOT0ZSSUxMUworICAg IGlmIChjeCA9PSBYWFdSSSB8fCBjeCA9PSBYWFdSTCB8fCBjeCA9PSBYWFdSQkwpIHsgLyogV1JJ VEUgKi8KKwlpbnQgeCx5OwkJCS8qIE9uIHN0YWNrIGluIGNhc2Ugb2YgXGZleGVjKCkgKi8KKwlp ZiAoKHggPSBjbWtleSh3cml0YWIsbndyaSwidG8gZmlsZSBvciBsb2ciLCIiLHh4c3RyaW5nKSkg PCAwKSB7CisJICAgIGlmICh4ID09IC0zKSBwcmludGYoIj9Xcml0ZSB0byB3aGF0P1xuIik7CisJ ICAgIHJldHVybih4KTsKKwl9CisJaWYgKCh5ID0gY210eHQoInRleHQiLCIiLCZzLHh4c3RyaW5n KSkgPCAwKSByZXR1cm4oeSk7CisJcyA9IGJyc3RyaXAocyk7CisJc3dpdGNoICh4KSB7CisJICBj YXNlIExPR0Q6IHkgPSBaREZJTEU7IGJyZWFrOworCSAgY2FzZSBMT0dQOiB5ID0gWlBGSUxFOyBi cmVhazsKKyNpZm5kZWYgTk9MT0NBTAorCSAgY2FzZSBMT0dTOiB5ID0gWlNGSUxFOyBicmVhazsK KyNlbmRpZiAvKiBOT0xPQ0FMICovCisJICBjYXNlIExPR1Q6IHkgPSBaVEZJTEU7IGJyZWFrOwor I2lmbmRlZiBOT1NQTAorCSAgY2FzZSBMT0dXOiB5ID0gWldGSUxFOyBicmVhazsKKyNlbmRpZiAv KiBOT1NQTCAqLworCSAgY2FzZSBMT0dYOgkJCS8qIFNDUkVFTiAoc3Rkb3V0KSAqLworCSAgY2Fz ZSBMT0dFOgkJCS8qIEVSUk9SICAoc3RkZXJyKSAqLworCSAgICBpZiAoeCA9PSBMT0dFKSB7CisJ CWRlYnVnKEYxMTAsCisJCSAgICAgIChjeCA9PSBYWFdSTCkgPyAiV1JJVEVMTiBFUlJPUiIgOiAi V1JJVEUgRVJST1IiLCBzLDApOworCQlmcHJpbnRmKHN0ZGVyciwiJXMlcyIscywoY3ggPT0gWFhX UkwpID8gIlxuIiA6ICIiKTsKKwkgICAgfSBlbHNlIHsKKwkJZGVidWcoRjExMCwKKwkJICAgICAg KGN4ID09IFhYV1JMKSA/ICJXUklURUxOIFNDUkVFTiIgOiAiV1JJVEUgU0NSRUVOIiwgcywwKTsK KwkJcHJpbnRmKCIlcyVzIixzLChjeCA9PSBYWFdSTCkgPyAiXG4iIDogIiIpOworCSAgICB9CisJ ICAgIHJldHVybihzdWNjZXNzID0gMSk7CisJICBkZWZhdWx0OiByZXR1cm4oLTIpOworCX0KKwlp ZiAoY2hrZm4oeSkgPiAwKSB7CisJICAgIHggPSAoY3ggPT0gWFhXUkkpID8genNvdXQoeSxzKSA6 IHpzb3V0bCh5LHMpOworCSAgICBkZWJ1ZyhGMTExLCJXUklURSIsCisJCSAgKGN4ID09IFhYV1JJ KSA/ICJ6c291dCIgOiAienNvdXRsIiwKKwkJICB4KTsKKwkgICAgaWYgKHggPCAwKSBwcmludGYo Ij9Xcml0ZSBlcnJvclxuIik7CisJfSBlbHNlIHsKKwkgICAgeCA9IC0xOworCSAgICBwcmludGYo Ij9GaWxlIG9yIGxvZyBub3Qgb3BlblxuIik7CisJfQorCWRlYnVnKEYxMDEsIldSSVRFIHgiLCIi LHgpOworCXJldHVybihzdWNjZXNzID0gKHggPT0gMCkgPyAxIDogMCk7CisgICAgfQorI2VuZGlm IC8qIE5PRlJJTExTICovCisKKyNpZm5kZWYgTk9YRkVSCisgICAgaWYgKGN4ID09IFhYQVNDIHx8 IGN4ID09IFhYQklOKSB7CisJaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7CisjaWZk ZWYgTkVXRlRQCisvKgorICBNYWtlIEMtS2VybWl0IHdvcmsgbGlrZSBvdGhlciBmdHAgY2xpZW50 cywgd2hlcmUKKyAgdGhlIEFTQ0lJIChURVhUKSBhbmQgQklOQVJZIGNvbW1hbmRzIGFyZSBnbG9i YWwgc2V0dGluZ3MuCisqLworCWlmIChmdHBpc29wZW4oKSkgeworCSAgICBkb2Z0cGdsb2JhbHR5 cGUoKGN4ID09IFhYQVNDKSA/IFhZRlRfVCA6IFhZRlRfQik7CisJICAgIC8qIEZhbGwgdGhydS0t dGhlIGNvbW1hbmQgaXQgc2hvdWxkIGFwcGx5IHRvIGJvdGggRlRQIGFuZCBLZXJtaXQgKi8KKwkg ICAgLyogcmV0dXJuKHN1Y2Nlc3MgPSAxKTsgKi8KKwl9CisjZW5kaWYgLyogTkVXRlRQICovCisK Kwl4ZmVybW9kZSA9IFhNT0RFX007CQkvKiBTZXQgbWFudWFsIEtlcm1pdCB0cmFuc2ZlciBtb2Rl ICovCisJYmluYXJ5ID0gKGN4ID09IFhYQVNDKSA/IFhZRlRfVCA6IFhZRlRfQjsKKwlyZXR1cm4o c3VjY2VzcyA9IDEpOworICAgIH0KKyNlbmRpZiAvKiBOT1hGRVIgKi8KKworICAgIGlmIChjeCA9 PSBYWENMUykgeworCWlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOworCXkgPSBja19j bHMoKTsKKwlyZXR1cm4oc3VjY2VzcyA9ICh5ID4gLTEpID8gMSA6IDApOworICAgIH0KKworI2lm ZGVmIENLX01LRElSCisgICAgaWYgKGN4ID09IFhYTUtESVIgfHwgY3ggPT0gWFhMTUtEKSB7CisJ Y2hhciAqcDsKKyNpZmRlZiBMT0NVUworCWlmICghbG9jdXMgJiYgY3ggIT0gWFhMTUtEKSB7Cisj aWZkZWYgTk9YRkVSCisJICAgIHJldHVybigtMik7CisjZWxzZQorCSAgICByZXR1cm4oZG9ybXQo WFpNS0QpKTsKKyNlbmRpZiAvKiBOT1hGRVIgKi8KKyAgICAgICAgfQorI2VuZGlmIC8qIExPQ1VT ICovCisjaWZkZWYgSUtTRAorCWlmIChpbnNlcnZlciAmJiAhRU5BQkxFRChlbl9ta2QpKSB7CisJ ICAgIHByaW50ZigiP1NvcnJ5LCBkaXJlY3RvcnkgY3JlYXRpb24gaXMgZGlzYWJsZWRcbiIpOwor CSAgICByZXR1cm4oLTkpOworCX0KKyNlbmRpZiAvKiBJS1NEICovCisJaWYgKCh4ID0gY21mbGQo Ik5hbWUgZm9yIG5ldyBkaXJlY3RvcnkiLCIiLCZzLHh4c3RyaW5nKSkgPCAwKSB7CisJICAgIGlm ICh4ICE9IC0zKSB7CisJCXJldHVybih4KTsKKwkgICAgfSBlbHNlIHsKKwkJcHJpbnRmKCI/RGly ZWN0b3J5IG5hbWUgcmVxdWlyZWRcbiIpOworCQlyZXR1cm4oLTkpOworCSAgICB9CisJfQorCWNr c3RybmNweShsaW5lLHMsTElOQlVGU0laKTsKKwlzID0gbGluZTsKKwlpZiAoKHggPSBjbWNmbSgp KSA8IDApIHJldHVybih4KTsKKwlzID0gYnJzdHJpcChzKTsKKwliZ2NoaygpOwkJCS8qIFNldCBt c2dmbGcgKi8KKwl4ID0gY2tta2RpcigwLHMsJnAsbXNnZmxnLDApOworI2lmZGVmIENPTU1FTlQK KwlpZiAobXNnZmxnICYmIHggPT0gMCkKKwkgIHByaW50ZigiP0RpcmVjdG9yeSBhbHJlYWR5IGV4 aXN0c1xuIik7CisjZW5kaWYgLyogQ09NTUVOVCAqLworCXJldHVybihzdWNjZXNzID0gKHggPCAw KSA/IDAgOiAxKTsKKyAgICB9CisgICAgaWYgKGN4ID09IFhYUk1ESVIgfHwgY3ggPT0gWFhMUk1E KSB7IC8qIFJNRElSICovCisJY2hhciAqcDsKKyNpZmRlZiBMT0NVUworCWlmICghbG9jdXMgJiYg Y3ggIT0gWFhMUk1EKSB7CisjaWZkZWYgTk9YRkVSCisJICAgIHJldHVybigtMik7CisjZWxzZQor CSAgICByZXR1cm4oZG9ybXQoWFpSTUQpKTsKKyNlbmRpZiAvKiBOT1hGRVIgKi8KKyAgICAgICAg fQorI2VuZGlmIC8qIExPQ1VTICovCisjaWZkZWYgSUtTRAorCWlmIChpbnNlcnZlciAmJiAhRU5B QkxFRChlbl9ybWQpKSB7CisJICAgIHByaW50ZigiP1NvcnJ5LCBkaXJlY3RvcnkgcmVtb3ZhbCBp cyBkaXNhYmxlZFxuIik7CisJICAgIHJldHVybigtOSk7CisJfQorI2VuZGlmIC8qIElLU0QgKi8K KwlpZiAoKHggPSBjbWRpcigiTmFtZSBvZiBkaXJlY3RvcnkgdG8gYmUgcmVtb3ZlZCIsIiIsJnMs eHhzdHJpbmcpKSA8IDApCisJICByZXR1cm4oeCk7CisJY2tzdHJuY3B5KGxpbmUscyxMSU5CVUZT SVopOworCXMgPSBsaW5lOworCWlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOworCXMg PSBicnN0cmlwKHMpOworCXggPSBja21rZGlyKDEscywmcCxtc2dmbGcsMCk7CisJcmV0dXJuKHN1 Y2Nlc3MgPSAoeCA8IDApID8gMCA6IDEpOworICAgIH0KKyNlbmRpZiAvKiBDS19NS0RJUiAqLwor CisjaWZkZWYgVE5DT0RFCisgICAgaWYgKGN4ID09IFhYVEVMT1ApCisgICAgICByZXR1cm4oZG90 ZWxvcHQoKSk7CisjZW5kaWYgLyogVE5DT0RFICovCisKKyNpZm5kZWYgTk9QVVNICisgICAgaWYg KGN4ID09IFhYTlBTSCkgeworCWlmICgoeiA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHopOworICAg ICAgICBub3B1c2ggPSAxOworI2lmbmRlZiBOT1NFUlZFUgorICAgICAgICBlbl9ob3MgPSAwOwor I2VuZGlmIC8qIE5PU0VSVkVSICovCisjaWZkZWYgUElQRVNFTkQKKwl1c2VwaXBlcyA9IDA7Cisj ZW5kaWYgLyogUElQRVNFTkQgKi8KKyAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKyAgICB9 CisjZW5kaWYgLyogTk9QVVNIICovCisKKyNpZmRlZiBPUzIKKyAgICBpZiAoY3ggPT0gWFhOU0NS KSB7CisJaWYgKCh6ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeik7CisgICAgICAgIHR0X3Njcm9s bCA9IDA7CisgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisgICAgfQorI2VuZGlmIC8qIE9T MiAqLworCisjaWZuZGVmIE5PU1BMCisgICAgaWYgKGN4ID09IFhYTE9DQUwpCQkJLyogTE9DQUwg dmFyaWFibGUgZGVjbGFyYXRpb25zICovCisgICAgICByZXR1cm4oc3VjY2VzcyA9IGRvbG9jYWwo KSk7CisjZW5kaWYgLyogTk9TUEwgKi8KKworICAgIGlmIChjeCA9PSBYWEtFUk1JKSB7CQkvKiBU aGUgS0VSTUlUIGNvbW1hbmQgKi8KKwljaGFyICogbGlzdFs2NV07CisJZXh0ZXJuIGNoYXIgKip4 YXJndjsKKwlleHRlcm4gaW50IHhhcmdjOworCWludCBpOworCWlmICgoeSA9IGNtdHh0KCJrZXJt aXQgY29tbWFuZC1saW5lIGFyZ3VtZW50cywgLWggZm9yIGhlbHAiLAorCQkgICAgICAgIiIsJnMs eHhzdHJpbmcpKSA8IDApCisJICByZXR1cm4oeSk7CisJY2tzdHJuY3B5KGxpbmUsImtlcm1pdCAi LExJTkJVRlNJWik7CisJY2tzdHJuY2F0KGxpbmUscyxMSU5CVUZTSVotOCk7CisJeHdvcmRzKGxp bmUsNjQsbGlzdCwwKTsKKwlmb3IgKGkgPSAxOyBpIDwgNjQ7IGkrKykgeworCSAgICBpZiAoIWxp c3RbaV0pCisJICAgICAgYnJlYWs7CisJfQorCWktLTsKKwl4YXJnYyA9IGk7CisJeGFyZ3YgPSBs aXN0OworCXhhcmd2Kys7CisJc3N0YXRlID0gY21kbGluKCk7CisJaWYgKHNzdGF0ZSkgeworCSAg ICBleHRlcm4gaW50IGp1c3RvbmU7CisJICAgIGRlYnVnKEYwMDAsIktFUk1JVCBzc3RhdGUiLCIi LHNzdGF0ZSk7CisJICAgIGp1c3RvbmUgPSAxOwkJLyogRm9yY2UgcmV0dXJuIHRvIGNvbW1hbmQg bW9kZSAqLworCSAgICBwcm90bygpOwkJCS8qIGFmdGVyIHByb3RvY29sICovCisJICAgIHJldHVy bihzdWNjZXNzKTsKKwl9IGVsc2UgeworCSAgICBkZWJ1ZyhGMTAxLCJLRVJNSVQgc3N0YXRlIiwi Iixzc3RhdGUpOworCSAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwkvKiBOb3QgZXhhY3RseSByaWdo dCwgYnV0Li4uICovCisJfQorICAgIH0KKyAgICBpZiAoY3ggPT0gWFhEQVRFKSB7CQkJLyogREFU RSBjb21tYW5kICovCisJZXh0ZXJuIGNoYXIgY21kYXRlYnVmW10sICogY21kYXRlbXNnOworCisj aWZuZGVmIENPTU1FTlQKKwljaGFyICogZHA7CisJaWYgKCh5ID0gY210eHQoImRhdGUgYW5kL29y IHRpbWUsIG9yIGNhcnJpYWdlIHJldHVybiBmb3IgY3VycmVudCIsCisJCSAgICAgICAiIiwmcyx4 eHN0cmluZykpIDwgMCkKKwkgIHJldHVybih5KTsKKwlzID0gYnJzdHJpcChzKTsKKwlkcCA9IGNt Y3Z0ZGF0ZShzLDEpOworCWlmICghZHApIHsKKwkgICAgcHJpbnRmKCI/JXNcbiIsY21kYXRlbXNn ID8gY21kYXRlbXNnIDogIkRhdGUgY29udmVyc2lvbiBlcnJvciIpOworCSAgICBzdWNjZXNzID0g MDsKKwl9IGVsc2UgeworCSAgICBwcmludGYoIiVzXG4iLGRwKTsKKwkgICAgc3VjY2VzcyA9IDE7 CisJfQorI2Vsc2UKKwkvKiBUaGlzIHdvcmtzIGZpbmUgYnV0IG1lc3NlcyB1cCBteSAiZGF0ZXMi IHRvcnR1cmUtdGVzdCBzY3JpcHQgKi8KKworCWlmICgoeCA9IGNtZGF0ZSgiRGF0ZSBhbmQvb3Ig dGltZSwgb3IgY2FycmlhZ2UgcmV0dXJuIGZvciBjdXJyZW50IiwKKwkJCSIiLCZzLDAseHhzdHJp bmcpKSA8IDApIHsKKwkgICAgcmV0dXJuKHgpOworCX0gZWxzZSB7CisJICAgIHByaW50ZigiJXNc biIsY21kYXRlYnVmKTsKKwkgICAgc3VjY2VzcyA9IDE7CisJfQorI2VuZGlmIC8qIENPTU1FTlQg Ki8KKwlyZXR1cm4oc3VjY2Vzcyk7CisgICAgfQorI2lmbmRlZiBOT1BVU0gKKyNpZm5kZWYgTk9G UklMTFMKKyAgICBpZiAoY3ggPT0gWFhFRElUKQorICAgICAgcmV0dXJuKGRvZWRpdCgpKTsKKyNl bmRpZiAvKiBOT0ZSSUxMUyAqLworI2VuZGlmIC8qIE5PUFVTSCAqLworCisjaWZkZWYgQlJPV1NF UgkJCQkvKiBEZWZpbmVkIG9ubHkgaWZuZGVmIE5PUFVTSCAqLworICAgIGlmIChjeCA9PSBYWEJS T1dTKQorICAgICAgcmV0dXJuKGRvYnJvd3NlKCkpOworI2VuZGlmIC8qIEJST1dTRVIgKi8KKwor I2lmZGVmIENLX1RBUEkKKyAgICBpZiAoY3ggPT0gWFhUQVBJKSB7CQkJLyogTWljcm9zb2Z0IFRB UEkgKi8KKwlyZXR1cm4gKHN1Y2Nlc3MgPSBkb3RhcGkoKSk7CisgICAgfQorI2VuZGlmIC8qIENL X1RBUEkgKi8KKworI2lmbmRlZiBOT1hGRVIKKyAgICBpZiAoY3ggPT0gWFhXSEVSRSkgeworCWV4 dGVybiBjaGFyICogcmZzcGVjLCAqIHNmc3BlYywgKiBzcmZzcGVjLCAqIHJyZnNwZWM7CisJaWYg KCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7CisJcHJpbnRmKCJcbkZpbGUgbW9zdCByZWNl bnRseS4uLlxuXG4iKTsKKwlwcmludGYoIiAgU2VudDogICAgICAgJXNcbiIsICAgc2ZzcGVjID8g c2ZzcGVjIDogIihub25lKSIpOworCWlmIChzZnNwZWMgJiYgc3Jmc3BlYykgeworCSAgICBwcmlu dGYoIiAgU3RvcmVkIGFzOiAgJXNcbiIsICAgc3Jmc3BlYyk7CisJICAgIHByaW50ZigiXG4iKTsK Kwl9CisJcHJpbnRmKCIgIFJlY2VpdmVkOiAgICVzXG4iLCAgIHJyZnNwZWMgPyBycmZzcGVjIDog Iihub25lKSIpOworCWlmIChyZnNwZWMgJiYgcnJmc3BlYykKKwlwcmludGYoIiAgU3RvcmVkIGFz OiAgJXNcbiIsICAgcmZzcGVjKTsKKwlwcmludGYoCisiXG5JZiB0aGUgZnVsbCBwYXRoIGlzIG5v dCBzaG93biwgdGhlbiB0aGUgZmlsZSBpcyBwcm9iYWJseSBpbiB5b3VyIGN1cnJlbnRcbiIKKwkg ICAgICAgKTsKKwlwcmludGYoCisiZGlyZWN0b3J5IG9yIHlvdXIgZG93bmxvYWQgZGlyZWN0b3J5 IChpZiBhbnkgLSBTSE9XIEZJTEUgdG8gZmluZCBvdXQpLlxuXG4iCisJICAgICAgICk7CisJcmV0 dXJuKHN1Y2Nlc3MgPSAxKTsKKyAgICB9CisjZW5kaWYgLyogTk9YRkVSICovCisKKyNpZmRlZiBD S19SRUNBTEwKKyAgICBpZiAoY3ggPT0gWFhSRURPKQorICAgICAgcmV0dXJuKGRvcmVkbygpKTsK KyNlbmRpZiAvKiBDS19SRUNBTEwgKi8KKworI2lmZGVmIENLUk9PVAorICAgIGlmIChjeCA9PSBY WENIUlQpCQkJLyogQ2hhbmdlIEtlcm1pdCdzIHJvb3QgZGlyZWN0b3J5ICovCisgICAgICByZXR1 cm4oZG9jaHJvb3QoKSk7CisjZW5kaWYgLyogQ0tST09UICovCisKKyNpZmRlZiBDS19LRVJCRVJP UworICAgIGlmIChjeCA9PSBYWEFVVEgpIHsJCQkvKiBLRVJCRVJPUyAqLworCXggPSBjcF9hdXRo KCk7CQkJLyogUGFyc2UgaXQgKi8KKyNpZmRlZiBJS1NECisgICAgICAgIGlmIChpbnNlcnZlcikg eworICAgICAgICAgICAgcHJpbnRmKCI/Q29tbWFuZCBkaXNhYmxlZCBpbiBJS1NELlxyXG4iKTsK KyAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7CisgICAgICAgIH0KKyNlbmRpZiAvKiBJ S1NEICovCisJaWYgKHggPCAwKQkJCS8qIFBhc3MgcGFyc2UgZXJyb3JzIGJhY2sgKi8KKwkgIHJl dHVybih4KTsKKwlyZXR1cm4oc3VjY2VzcyA9IGRvYXV0aChjeCkpOworICAgIH0KKyNlbmRpZiAv KiBDS19LRVJCRVJPUyAqLworCisjaWZuZGVmIE5PTE9DQUwKKyAgICBpZiAoY3ggPT0gWFhURVJN KSB7CisJcmV0dXJuKHNldHRybXR5cCgpKTsKKyAgICB9CisjZW5kaWYgLyogTk9MT0NBTCAqLwor CisgICAgaWYgKGN4ID09IFhYU1RBVFVTKSB7CisJaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1 cm4oeCk7CisJcHJpbnRmKCAiICVzXG4iLCBzdWNjZXNzID8gIlNVQ0NFU1MiIDogIkZBSUxVUkUi ICk7CisJcmV0dXJuKDApOwkJCS8qIERvbid0IGNoYW5nZSBpdCAqLworICAgIH0KKworICAgIGlm IChjeCA9PSBYWEZBSUwpIHsKKwlpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKKwly ZXR1cm4oc3VjY2VzcyA9IDApOworICAgIH0KKworICAgIGlmIChjeCA9PSBYWFNVQ0MpIHsKKwlp ZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKKwlyZXR1cm4oc3VjY2VzcyA9IDEpOwor ICAgIH0KKworICAgIGlmIChjeCA9PSBYWE5MQ0wpIHsKKwlleHRlcm4gaW50IG5vbG9jYWw7CisJ aWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7CisJbm9sb2NhbCA9IDE7CisJcmV0dXJu KHN1Y2Nlc3MgPSAxKTsKKyAgICB9CisKKyNpZm5kZWYgTk9YRkVSCisgICAgaWYgKGN4ID09IFhY UkFTRykJCQkvKiBTaG9ydGN1dHMgZm9yIFJFTU9URSBjb21tYW5kcyAqLworICAgICAgcmV0dXJu KGRvcm10KFhaQVNHKSk7CisgICAgaWYgKGN4ID09IFhYUkNXRCkKKyAgICAgIHJldHVybihkb3Jt dChYWkNXRCkpOworICAgIGlmIChjeCA9PSBYWFJDUFkpCisgICAgICByZXR1cm4oZG9ybXQoWFpD UFkpKTsKKyAgICBpZiAoY3ggPT0gWFhSREVMKQorICAgICAgcmV0dXJuKGRvcm10KFhaREVMKSk7 CisgICAgaWYgKGN4ID09IFhYUkRJUikKKyAgICAgIHJldHVybihkb3JtdChYWkRJUikpOworICAg IGlmIChjeCA9PSBYWFJYSVQpCisgICAgICByZXR1cm4oZG9ybXQoWFpYSVQpKTsKKyAgICBpZiAo Y3ggPT0gWFhSSExQKQorICAgICAgcmV0dXJuKGRvcm10KFhaSExQKSk7CisgICAgaWYgKGN4ID09 IFhYUkhPUykKKyAgICAgIHJldHVybihkb3JtdChYWkhPUykpOworICAgIGlmIChjeCA9PSBYWFJL RVIpCisgICAgICByZXR1cm4oZG9ybXQoWFpLRVIpKTsKKyAgICBpZiAoY3ggPT0gWFhSUFdEKQor ICAgICAgcmV0dXJuKGRvcm10KFhaUFdEKSk7CisgICAgaWYgKGN4ID09IFhYUlFVRSkKKyAgICAg IHJldHVybihkb3JtdChYWlFVRSkpOworICAgIGlmIChjeCA9PSBYWFJSRU4pCisgICAgICByZXR1 cm4oZG9ybXQoWFpSRU4pKTsKKyAgICBpZiAoY3ggPT0gWFhSTUtEKQorICAgICAgcmV0dXJuKGRv cm10KFhaTUtEKSk7CisgICAgaWYgKGN4ID09IFhYUk1TRykKKyAgICAgIHJldHVybihkb3JtdChY Wk1TRykpOworICAgIGlmIChjeCA9PSBYWFJSTUQpCisgICAgICByZXR1cm4oZG9ybXQoWFpSTUQp KTsKKyAgICBpZiAoY3ggPT0gWFhSU0VUKQorICAgICAgcmV0dXJuKGRvcm10KFhaU0VUKSk7Cisg ICAgaWYgKGN4ID09IFhYUlNQQSkKKyAgICAgIHJldHVybihkb3JtdChYWlNQQSkpOworICAgIGlm IChjeCA9PSBYWFJUWVApCisgICAgICByZXR1cm4oZG9ybXQoWFpUWVApKTsKKyAgICBpZiAoY3gg PT0gWFhSV0hPKQorICAgICAgcmV0dXJuKGRvcm10KFhaV0hPKSk7CisgICAgaWYgKGN4ID09IFhY UkNEVVApCisgICAgICByZXR1cm4oZG9ybXQoWFpDRFUpKTsKKyAgICBpZiAoY3ggPT0gWFhSUFJJ KQorICAgICAgcmV0dXJuKGRvcm10KFhaUFJJKSk7CisjZW5kaWYgLyogTk9YRkVSICovCisKKyAg ICBpZiAoY3ggPT0gWFhSRVNFVCkgewkJLyogUkVTRVQgKi8KKwlpZiAoKHggPSBjbWNmbSgpKSA8 IDApCisJICByZXR1cm4oeCk7CisJY29uY2IoKGNoYXIpZXNjYXBlKTsJCS8qIE1ha2UgY29tbWFu ZCBlY2hvaW5nIHRvIG5vcm1hbCAqLworCWRvY2xlYW4oMCk7CQkJLyogQ2xvc2UgYWxsIGZpbGVz ICovCisJcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKyAgICB9CisKKyNpZm5kZWYgTk9YRkVSCisjaWZu ZGVmIE5PQ1NFVFMKKyAgICBpZiAoY3ggPT0gWFhBU1NPQykJCQkvKiBBU1NPQ0lBVEUgKi8KKyAg ICAgIHJldHVybihkb2Fzc29jKCkpOworI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKyNlbmRpZiAvKiBO T1hGRVIgKi8KKworI2lmbmRlZiBOT1NQTAorICAgIGlmIChjeCA9PSBYWFNISUZUKSB7CQkvKiBT SElGVCAqLworCWlmICgoeSA9IGNtbnVtKCJOdW1iZXIgb2YgYXJndW1lbnRzIHRvIHNoaWZ0Iiwi MSIsMTAsJngseHhzdHJpbmcpKSA8IDApCisJICByZXR1cm4oeSk7CisJaWYgKCh6ID0gY21jZm0o KSkgPCAwKQorCSAgcmV0dXJuKHopOworCXJldHVybihzdWNjZXNzID0gZG9zaGlmdCh4KSk7Cisg ICAgfQorI2VuZGlmIC8qIE5PU1BMICovCisKKyNpZm5kZWYgTk9IRUxQCisgICAgaWYgKGN4ID09 IFhYTUFOKQorICAgICAgcmV0dXJuKGRvbWFudWFsKCkpOworI2VuZGlmIC8qIE5PSEVMUCAqLwor CisjaWZuZGVmIE5PU1BMCisgICAgaWYgKGN4ID09IFhYU09SVCkJCQkvKiBTT1JUIGFuIGFycmF5 ICovCisgICAgICByZXR1cm4oZG9zb3J0KCkpOworI2VuZGlmIC8qIE5PU1BMICovCisKKyAgICBp ZiAoY3ggPT0gWFhQVVJHRSkgeworI2lmZGVmIElLU0QKKwlpZiAoaW5zZXJ2ZXIgJiYgKCFFTkFC TEVEKGVuX2RlbCkKKyNpZmRlZiBDS19MT0dJTgorICAgICAgICAgICAgICAgICAgICAgICAgICB8 fCBpc2d1ZXN0CisjZW5kaWYgLyogQ0tfTE9HSU4gKi8KKwkJCSApKSB7CisJICAgIHByaW50Zigi P1NvcnJ5LCBERUxFVEUgaXMgZGlzYWJsZWRcbiIpOworCSAgICByZXR1cm4oLTkpOworCX0KKyNl bmRpZiAvKiBJS1NEICovCisjaWZkZWYgQ0tfQVBDCisJaWYgKChhcGNhY3RpdmUgPT0gQVBDX0xP Q0FMKSB8fAorCSAgICAoKGFwY2FjdGl2ZSA9PSBBUENfUkVNT1RFKSAmJiAoIShhcGNzdGF0dXMg JiBBUENfVU5DSCkpKSkKKwkgIHJldHVybihzdWNjZXNzID0gMCk7CisjZW5kaWYgLyogQ0tfQVBD ICovCisjaWZkZWYgQ0tQVVJHRQorICAgICAgICByZXR1cm4oZG9wdXJnZSgpKTsKKyNlbHNlCisj aWZkZWYgVk1TCisJaWYgKCh4ID0gY210eHQoIm9wdGlvbmFsIHN3aXRjaGVzIGZvbGxvd2VkIGJ5 IGZpbGVzcGVjIiwKKwkJICAgICAgICIiLCZzLHh4c3RyaW5nKSkgPCAwKQorCSAgcmV0dXJuKHgp OworCWlmIChub3B1c2gpIHsKKwkgICAgcHJpbnRmKCI/U29ycnksIERDTCBhY2Nlc3MgaXMgZGlz YWJsZWRcbiIpOworCSAgICByZXR1cm4oLTkpOworCX0KKwlja3N0cm5jcHkobGluZSxzLExJTkJV RlNJWik7CisJcyA9IGxpbmU7CisJeCA9IG1sb29rKG1hY3RhYiwicHVyZ2UiLG5tYWMpOworCXJl dHVybihzdWNjZXNzID0gZG9kbyh4LHMsY21kc3RrW2NtZGx2bF0uY2NmbGdzKSk7CisjZWxzZQor CXJldHVybigtMik7CisjZW5kaWYgLyogVk1TICovCisjZW5kaWYgLyogQ0tQVVJHRSAqLworICAg IH0KKworI2lmbmRlZiBOT1NQTAorICAgIGlmIChjeCA9PSBYWEZBU1QpIHsKKwlpZiAoKHggPSBj bWNmbSgpKSA8IDApIHJldHVybih4KTsKKwl4ID0gbWxvb2sobWFjdGFiLCJmYXN0IixubWFjKTsK KwlyZXR1cm4oc3VjY2VzcyA9IGRvZG8oeCxOVUxMLGNtZHN0a1tjbWRsdmxdLmNjZmxncykpOwor ICAgIH0KKyAgICBpZiAoY3ggPT0gWFhDQVUpIHsKKwlpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJl dHVybih4KTsKKwl4ID0gbWxvb2sobWFjdGFiLCJjYXV0aW91cyIsbm1hYyk7CisJcmV0dXJuKHN1 Y2Nlc3MgPSBkb2RvKHgsTlVMTCxjbWRzdGtbY21kbHZsXS5jY2ZsZ3MpKTsKKyAgICB9CisgICAg aWYgKGN4ID09IFhYUk9CKSB7CisJaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7CisJ eCA9IG1sb29rKG1hY3RhYiwicm9idXN0IixubWFjKTsKKwlyZXR1cm4oc3VjY2VzcyA9IGRvZG8o eCxOVUxMLGNtZHN0a1tjbWRsdmxdLmNjZmxncykpOworICAgIH0KKyNlbmRpZiAvKiBOT1NQTCAq LworCisgICAgaWYgKGN4ID09IFhYU0NSTikgewkJCS8qIFNDUkVFTiAqLworCWludCByb3csIGNv bDsKKwlpZiAoKHggPSBjbWtleShzY250YWIsIG5zY250YWIsInNjcmVlbiBhY3Rpb24iLCIiLCB4 eHN0cmluZykpIDwgMCkKKwkgIHJldHVybih4KTsKKwlzd2l0Y2ggKHgpIHsJCQkvKiBNT1ZFLVRP IChjdXJzb3IgcG9zaXRpb24pICovCisJICBjYXNlIFNDTl9NT1Y6CisJICAgIGlmICgoeSA9IGNt bnVtKCJSb3cgKDEtYmFzZWQpIiwiIiwxMCwmeix4eHN0cmluZykpIDwgMCkKKwkgICAgICByZXR1 cm4oeSk7CisJICAgIHJvdyA9IHo7CisJICAgIHkgPSBjbW51bSgiQ29sdW1uICgxLWJhc2VkKSIs IjEiLDEwLCZ6LHh4c3RyaW5nKTsKKwkgICAgaWYgKHkgPCAwKQorCSAgICAgIHJldHVybih5KTsK KwkgICAgY29sID0gejsKKwkgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKQorCSAgICAgIHJldHVy bih5KTsKKwkgICAgaWYgKHJvdyA8IDAgfHwgY29sIDwgMCkgeworCQlwcmludGYoIj9Sb3cgYW5k IENvbHVtbiBtdXN0IGJlIDEgb3IgZ3JlYXRlclxuIik7CisJCXJldHVybigtOSk7CisJICAgIH0K KwkgICAgaWYgKGNtZF9yb3dzID4gMCAmJiByb3cgPiBjbWRfcm93cykKKwkgICAgICByb3cgPSBj bWRfcm93czsKKwkgICAgaWYgKGNtZF9jb2xzID4gMCAmJiBjb2wgPiBjbWRfY29scykKKwkgICAg ICBjb2wgPSBjbWRfY29sczsKKwkgICAgeSA9IGNrX2N1cnBvcyhyb3csY29sKTsKKwkgICAgcmV0 dXJuKHN1Y2Nlc3MgPSAoeSA+IC0xKSA/IDEgOiAwKTsKKworCSAgY2FzZSBTQ05fQ0xSOgkJCS8q IENMRUFSICovCisJICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkKKwkgICAgICByZXR1cm4oeSk7 CisJICAgIGRlYnVnKEYxMDAsInNjcmVlbiBjYWxsaW5nIGNrX2NscygpIiwiIiwwKTsKKwkgICAg eSA9IGNrX2NscygpOworCSAgICByZXR1cm4oc3VjY2VzcyA9ICh5ID4gLTEpID8gMSA6IDApOwor CisJICBjYXNlIFNDTl9DTEU6CQkJLyogQ0xFT0wgKi8KKwkgICAgaWYgKCh5ID0gY21jZm0oKSkg PCAwKQorCSAgICAgIHJldHVybih5KTsKKwkgICAgeSA9IGNrX2NsZW9sKCk7CisJICAgIHJldHVy bihzdWNjZXNzID0gKHkgPiAtMSkgPyAxIDogMCk7CisJfQorICAgIH0KKworI2lmbmRlZiBOT0hU VFAKKyNpZmRlZiBUQ1BTT0NLRVQKKyAgICBpZiAoY3ggPT0gWFhIVFRQKQorICAgICAgcmV0dXJu KGRvaHR0cCgpKTsKKyNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KKyNlbmRpZiAvKiBOT0hUVFAgKi8K KworI2lmbmRlZiBOT1NQTAorICAgIGlmIChjeCA9PSBYWEFSUkFZKSB7CQkvKiBBUlJBWSAqLwor I2lmbmRlZiBOT1NIT1cKKwlleHRlcm4gaW50IHNob3dhcnJheSgpOworI2VuZGlmIC8qIE5PU0hP VyAqLworCWlmICgoeCA9IGNta2V5KGFycmF5dGFiLCBuYXJyYXl0YWIsIkFycmF5IG9wZXJhdGlv biIsIiIseHhzdHJpbmcpKSA8IDApCisJICByZXR1cm4oeCk7CisJc3dpdGNoICh4KSB7CisJICBj YXNlIEFSUl9EQ0w6CisJICAgIHJldHVybihkb2RjbChYWERDTCkpOworCSAgY2FzZSBBUlJfU1JU OgorCSAgICByZXR1cm4oZG9zb3J0KCkpOworI2lmbmRlZiBOT1NIT1cKKwkgIGNhc2UgQVJSX1NI TzoKKwkgICAgcmV0dXJuKHNob3dhcnJheSgpKTsKKyNlbmRpZiAvKiBOT1NIT1cgKi8KKwkgIGNh c2UgQVJSX0NQWToKKwkgICAgcmV0dXJuKGNvcHlhcnJheSgpKTsKKwkgIGNhc2UgQVJSX1NFVDoK KwkgIGNhc2UgQVJSX0NMUjoKKwkgICAgcmV0dXJuKGNscmFycmF5KHgpKTsKKwkgIGNhc2UgQVJS X0RTVDoKKwkgICAgcmV0dXJuKHVuYXJyYXkoKSk7CisJICBjYXNlIEFSUl9SU1o6CisJICAgIHJl dHVybihyc3phcnJheSgpKTsKKwkgIGNhc2UgQVJSX0VRVToKKwkgICAgcmV0dXJuKGxpbmthcnJh eSgpKTsKKworCSAgZGVmYXVsdDoKKwkgICAgcHJpbnRmKCI/U29ycnksIG5vdCBpbXBsZW1lbnRl ZCB5ZXQgLSBcIiVzXCJcbiIsY21kYnVmKTsKKwkgICAgcmV0dXJuKC05KTsKKwl9CisgICAgfQor ICAgIGlmIChjeCA9PSBYWFRSQUNFKQkJCS8qIFRSQUNFICovCisgICAgICByZXR1cm4oZG90cmFj ZSgpKTsKKyNlbmRpZiAvKiBOT1NQTCAqLworCisjaWZkZWYgQ0tfUEVSTVMKKyNpZmRlZiBVTklY CisgICAgaWYgKGN4ID09IFhYQ0hNT0QpCisgICAgICByZXR1cm4oZG91Y2htb2QoKSk7CQkvKiBE byBVbml4IGNobW9kICovCisjZW5kaWYgLyogVU5JWCAqLworI2VuZGlmIC8qIENLX1BFUk1TICov CisKKyAgICBpZiAoY3ggPT0gWFhQUk9NUCkKKyAgICAgIHJldHVybihkb3Byb21wdCgpKTsKKwor ICAgIGlmIChjeCA9PSBYWEdSRVApCisgICAgICByZXR1cm4oZG9ncmVwKCkpOworCisgICAgaWYg KGN4ID09IFhYREVCVUcpIHsJCS8qIERFQlVHICovCisjaWZuZGVmIERFQlVHCisJaW50IGR1bW15 ID0gMDsKKwlyZXR1cm4oc2V0b24oJmR1bW15KSk7CisjZWxzZQorCXJldHVybihzZXRvbigmZGVi bG9nKSk7CisjZW5kaWYgLyogREVCVUcgKi8KKyAgICB9CisgICAgaWYgKGN4ID09IFhYTVNHIHx8 IGN4ID09IFhYWE1TRykgewkvKiBNRVNTQUdFICovCisJZXh0ZXJuIGludCBkZWJtc2c7CQkvKiBT Y3JpcHQgZGVidWdnaW5nIG1lc3NhZ2VzICovCisJaWYgKCh4ID0gY210eHQoIk1lc3NhZ2UgdG8g cHJpbnQgaWYgU0VUIERFQlVHIE1FU1NBR0UgaXMgT04gb3IgU1RERVJSIiwKKwkJICIiLCZzLHh4 c3RyaW5nKSkgPCAwKQorCSAgcmV0dXJuKHgpOworCWlmICghcykJCQkJLyogV2F0Y2ggb3V0IGZv ciBudWxsIHJlc3VsdCAqLworCSAgcyA9ICIiOwkJCS8qIE1ha2UgaXQgYW4gZW1wdHkgc3RyaW5n ICovCisJZWxzZSAJCQkJLyogTm90IG51bGwgKi8KKwkgIHMgPSBicnN0cmlwKHMpOwkJLyogU3Ry aXAgYnJhY2VzIGFuZCBkb3VibGVxdW90ZXMgKi8KKwlzd2l0Y2ggKGRlYm1zZykgewkJLyogTm90 IGRlYnVnZ2luZyAtIGRvbid0IHByaW50ICovCisJICBjYXNlIDA6CisJICAgIGJyZWFrOworCSAg Y2FzZSAxOgorCSAgICBwcmludGYoIiVzIixzKTsJCS8qIFByaW50IHRvIHN0ZG91dCAqLworCSAg ICBpZiAoY3ggPT0gWFhNU0cpIHByaW50ZigiXG4iKTsKKwkgICAgYnJlYWs7CisJICBjYXNlIDI6 CisJICAgIGZwcmludGYoc3RkZXJyLCIlcyIscyk7CS8qIERpdHRvIGJ1dCBwcmludCB0byBzdGRl cnIgKi8KKwkgICAgaWYgKGN4ID09IFhYTVNHKSBmcHJpbnRmKHN0ZGVyciwiXG4iKTsKKwkgICAg YnJlYWs7CisJfQorCXJldHVybigwKTsJCQkvKiBSZXR1cm4gd2l0aG91dCBhZmZlY3RpbmcgU1VD Q0VTUyAqLworICAgIH0KKworI2lmZGVmIENLTEVBUk4KKyAgICBpZiAoY3ggPT0gWFhMRUFSTikg ewkJLyogTEVBUk4gKi8KKwlzdHJ1Y3QgRkRCIG9mLCBzdywgY207CisJaW50IGNsb3NpbmcgPSAw LCBvZmYgPSAwLCBvbiA9IDAsIGNvbmZpcm1lZCA9IDA7CisJY2hhciBjOworCisJY21mZGJpKCZz dywJCQkvKiAybmQgRkRCIC0gb3B0aW9uYWwgL1BBR0Ugc3dpdGNoICovCisJICAgICAgIF9DTUtF WSwJCQkvKiBmY29kZSAqLworCSAgICAgICAiU2NyaXB0IGZpbGUgbmFtZSwgb3Igc3dpdGNoIiwg LyogaGxwbXNnICovCisJICAgICAgICIiLAkJCS8qIGRlZmF1bHQgKi8KKwkgICAgICAgIiIsCQkJ LyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KKwkgICAgICAgMywJCQkvKiBhZGR0bCBudW1lcmljIGRh dGEgMTogdGJsIHNpemUgKi8KKwkgICAgICAgNCwJCQkvKiBhZGR0bCBudW1lcmljIGRhdGEgMjog NCA9IGNtc3dpICovCisJICAgICAgIHh4c3RyaW5nLAkJLyogUHJvY2Vzc2luZyBmdW5jdGlvbiAq LworCSAgICAgICBsZWFybnN3aSwJCS8qIEtleXdvcmQgdGFibGUgKi8KKwkgICAgICAgJm9mCQkJ LyogUG9pbnRlciB0byBuZXh0IEZEQiAqLworCSAgICAgICApOworCWNtZmRiaSgmb2YsX0NNT0ZJ LCIiLCIiLCIiLDAsMCx4eHN0cmluZyxOVUxMLCZjbSk7CisJY21mZGJpKCZjbSxfQ01DRk0sIiIs IiIsIiIsMCwwLE5VTEwsTlVMTCxOVUxMKTsKKwlsaW5lWzBdID0gTlVMOworCisJd2hpbGUgKCFj b25maXJtZWQpIHsKKwkgICAgeCA9IGNtZmRiKCZzdyk7CQkvKiBQYXJzZSBzb21ldGhpbmcgKi8K KwkgICAgaWYgKHggPCAwKQorCSAgICAgIHJldHVybih4KTsKKwkgICAgc3dpdGNoIChjbXJlc3Vs dC5mY29kZSkgewkvKiBXaGF0IHdhcyBpdD8gKi8KKwkgICAgICBjYXNlIF9DTU9GSToJCS8qIE91 dHB1dCBmaWxlIG5hbWUgKi8KKwkJY2tzdHJuY3B5KGxpbmUsY21yZXN1bHQuc3Jlc3VsdCxMSU5C VUZTSVopOworCQlicmVhazsKKwkgICAgICBjYXNlIF9DTUtFWToJCS8qIFN3aXRjaCAqLworCQlj ID0gY21nYnJrKCk7CisJCWlmICgoYyA9PSAnOicgfHwgYyA9PSAnPScpICYmICEoY21na3dmbGdz KCkgJiBDTV9BUkcpKSB7CisJCSAgICBwcmludGYoIj9UaGlzIHN3aXRjaCBkb2VzIG5vdCB0YWtl IGFuIGFyZ3VtZW50XG4iKTsKKwkJICAgIHJldHVybigtOSk7CisJCX0KKwkJc3dpdGNoIChjbXJl c3VsdC5ucmVzdWx0KSB7CisJCSAgY2FzZSAyOgkJLyogL0NMT1NFICovCisJCSAgICBjbG9zaW5n ID0gMTsJLyogRmFsbCB0aHJ1IG9uIHB1cnBvc2UgKi8KKwkJICBjYXNlIDA6CQkvKiAvT0ZGICov CisJCSAgICBvZmYgPSAxOworCQkgICAgb24gPSAwOworCQkgICAgYnJlYWs7CisJCSAgY2FzZSAx OgkJLyogL09OICovCisJCSAgICBvbiA9IDE7CisJCSAgICBvZmYgPSAwOworCQkgICAgYnJlYWs7 CisJCX0KKwkJYnJlYWs7CisJICAgICAgY2FzZSBfQ01DRk06CQkvKiBDb25maXJtYXRpb24gKi8K KwkJY29uZmlybWVkKys7CisJCWJyZWFrOworCSAgICB9CisJfQorCWlmIChjbG9zaW5nKSB7CisJ ICAgIGlmIChsZWFybmZwKSB7CisJCWZjbG9zZShsZWFybmZwKTsKKwkJbGVhcm5mcCA9IE5VTEw7 CisJICAgIH0KKwkgICAgbWFrZXN0cigmbGVhcm5maWxlLE5VTEwpOworCX0KKwlpZiAobGluZVsw XSkgeworCSAgICBpZiAoIW9uICYmICFvZmYpCisJICAgICAgb24gPSAxOworCSAgICBpZiAobGVh cm5mcCkgeworCQlmY2xvc2UobGVhcm5mcCk7CisJCWxlYXJuZnAgPSBOVUxMOworCSAgICB9CisJ ICAgIG1ha2VzdHIoJmxlYXJuZmlsZSxsaW5lKTsKKwkgICAgaWYgKGxlYXJuZmlsZSkgeworCQlj aGFyICogbW9kZXMgPSAidyI7CisJCWxlYXJuZnAgPSBmb3BlbihsZWFybmZpbGUsbW9kZXMpOwor CQlpZiAoIWxlYXJuZnApIHsKKwkJICAgIGRlYnVnKEYxMTAsIkxFQVJOIGZpbGUgb3BlbiBlcnJv ciIsbGVhcm5maWxlLDApOworCQkgICAgcGVycm9yKGxlYXJuZmlsZSk7CisJCSAgICByZXR1cm4o LTkpOworCQl9IGVsc2UgeworI2lmZGVmIFpGTlFGUAorCQkgICAgaWYgKHpmbnFmcChsZWFybmZp bGUsVE1QQlVGU0laLHRtcGJ1ZikpCisJCSAgICAgIG1ha2VzdHIoJmxlYXJuZmlsZSx0bXBidWYp OworI2VuZGlmIC8qIFpGTlFGUCAqLworCQkgICAgZGVidWcoRjExMCwiTEVBUk4gZmlsZSBvcGVu IG9rIixsZWFybmZpbGUsMCk7CisJCSAgICBpZiAoIXF1aWV0KSB7CisJCQlwcmludGYoIlJlY29y ZGluZyB0byAlcy4uLlxuXG4iLGxlYXJuZmlsZSk7CisJCQlwcmludGYoCisiIFdBUk5JTkc6IElm IHlvdSB0eXBlIHlvdXIgcGFzc3dvcmQgZHVyaW5nIHNjcmlwdCByZWNvcmRpbmcsIGl0IHdpbGwg YXBwZWFyXG5cCisgaW4gdGhlIGZpbGUuICBCZSBzdXJlIHRvIGVkaXQgaXQgb3IgdGFrZSBvdGhl ciBhcHByb3ByaWF0ZSBwcmVjYXV0aW9ucy5cblxuIgorCQkJICAgICAgICk7CisJCSAgICB9CisJ CSAgICBmcHV0cyggICI7IFNjcmlwdGZpbGU6ICIsbGVhcm5mcCk7CisJCSAgICBmcHV0cyhsZWFy bmZpbGUsbGVhcm5mcCk7CisJCSAgICBmcHV0cygiXG47IERpcmVjdG9yeTogICIsbGVhcm5mcCk7 CisJCSAgICBmcHV0cyh6Z3RkaXIoKSxsZWFybmZwKTsKKwkJICAgIGZwdXRzKCJcbjsgUmVjb3Jk ZWQ6ICAgIixsZWFybmZwKTsKKwkJICAgIGZwdXRzKGNrZGF0ZSgpLGxlYXJuZnApOworCQkgICAg ZnB1dHMoIlxuIixsZWFybmZwKTsKKwkJfQorCSAgICB9CisJfQorCWlmIChvbikgeworCSAgICBs ZWFybmluZyA9IDE7CisJfSBlbHNlIGlmIChvZmYpIHsKKwkgICAgbGVhcm5pbmcgPSAwOworCX0K KwlkZWJ1ZyhGMTAxLCJMRUFSTiBsZWFybmluZyIsIiIsbGVhcm5pbmcpOworCXJldHVybihzdWNj ZXNzID0gMSk7CisgICAgfQorI2VuZGlmIC8qIENLTEVBUk4gKi8KKworI2lmZGVmIE5FV0ZUUAor ICAgIGlmIChjeCA9PSBYWFVTRVIgfHwgY3ggPT0gWFhBQ0NUKSB7CisJaWYgKCFmdHBpc29wZW4o KSkgeworCSAgICBwcmludGYoIj9GVFAgY29ubmVjdGlvbiBpcyBub3Qgb3BlblxuIik7CisJICAg IHJldHVybigtOSk7CisJfQorCXJldHVybihzdWNjZXNzID0gKGN4ID09IFhYVVNFUikgPyBkb2Z0 cHVzcigpIDogZG9mdHBhY2N0KCkpOworICAgIH0KKyAgICBpZiAoY3ggPT0gWFhTSVRFIHx8IGN4 ID09IFhYUEFTVikgeworCWlmICghZnRwaXNvcGVuKCkpIHsKKwkgICAgcHJpbnRmKCI/RlRQIGNv bm5lY3Rpb24gaXMgbm90IG9wZW5cbiIpOworCSAgICByZXR1cm4oLTkpOworCX0KKwlyZXR1cm4o c3VjY2VzcyA9IChjeCA9PSBYWFNJVEUpID8gZG9mdHBzaXRlKCkgOiBkb3NldGZ0cHBzdigpKTsK KyAgICB9CisjZW5kaWYgLyogTkVXRlRQICovCisKKyAgICBpZiAoY3ggPT0gWFhPUklFKSB7CQkJ LyogT1JJRU5UQVRJT04gKi8KKwlleHRlcm4gY2hhciAqIG15bmFtZTsKKwlpbnQgaSwgeSwgbiA9 IDA7CisgICAgICAgIGNoYXIgKiBzLCAqcCwgdmJ1ZlszMl07CisJY2hhciAqIHZhcnNbMTZdOyAg ICAgICBjaGFyICogbGVnZW5kWzE2XTsKKworCWlmICgoeSA9IGNtY2ZtKCkpIDwgMCkKKwkgIHJl dHVybih5KTsKKworCXByaW50ZigiXG5Qcm9ncmFtIG5hbWU6XG4gICVzXG5cbiIsbXluYW1lKTsK KwluICs9IDQ7CisKKyNpZmRlZiBOVAorCXZhcnNbMF0gPSAiaG9tZSI7ICAgICAgbGVnZW5kWzBd ID0gIllvdXIgaG9tZSBkaXJlY3RvcnkiOworCXZhcnNbMV0gPSAiZGlyZWN0b3J5IjsgbGVnZW5k WzFdID0gIks5NSdzIGN1cnJlbnQgZGlyZWN0b3J5IjsKKwl2YXJzWzJdID0gImV4ZWRpciI7ICAg IGxlZ2VuZFsyXSA9ICJLOTUgUHJvZ3JhbSBkaXJlY3RvcnkiOworCXZhcnNbM10gPSAiaW5pZGly IjsgICAgbGVnZW5kWzNdID0gIks5NSBJbml0aWFsaXphdGlvbiBmaWxlIGRpcmVjdG9yeSI7CisJ dmFyc1s0XSA9ICJzdGFydHVwIjsgICBsZWdlbmRbNF0gPSAiQ3VycmVudCBkaXJlY3Rvcnkgd2hl biBzdGFydGVkIjsKKwkKKyAgICAgICAgdmFyc1s1XSA9ICJjb21tb24iOworICAgICAgICBsZWdl bmRbNV0gPSAiSzk1IGRhdGEgZm9yIGFsbCB1c2VycyBhbmQgSzk1U0lURS5JTkkgZmlsZSI7CisJ CisgICAgICAgIHZhcnNbNl0gPSAicGVyc29uYWwiOyAgbGVnZW5kWzZdID0gIllvdXIgcGVyc29u YWwgZGF0YSBkaXJlY3RvcnkgdHJlZSI7CisgICAgICAgIHZhcnNbN10gPSAiZGVza3RvcCI7ICAg bGVnZW5kWzddID0gIllvdXIgZGVza29wIGRpcmVjdG9yeSB0cmVlIjsKKwkKKyAgICAgICAgdmFy c1s4XSA9ICJhcHBkYXRhIjsKKyAgICAgICAgbGVnZW5kWzhdID0gIllvdXIgcGVyc29uYWwgSzk1 IGRhdGEgdHJlZSBhbmQgSzk1Q1VTVE9NLklOSSBmaWxlIjsKKwkKKyAgICAgICAgdmFyc1s5XSA9 ICJkb3dubG9hZCI7ICBsZWdlbmRbOV0gPSAiWW91ciBLOTUgZG93bmxvYWQgZGlyZWN0b3J5IjsK KyAgICAgICAgdmFyc1sxMF0gPSAidG1wZGlyIjsgICBsZWdlbmRbMTBdID0gIllvdXIgVEVNUCBk aXJlY3RvcnkiOworCXZhcnNbMTFdID0gTlVMTDsgICAgICAgbGVnZW5kWzExXSA9IE5VTEw7CisK Kwlmb3IgKGkgPSAwOyBpIDwgMTYgJiYgdmFyc1tpXTsgaSsrKSB7CisJICAgIHByaW50ZigiJXM6 XG4iLGxlZ2VuZFtpXSk7CisJICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9y ZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7CisJICAgIGNrbWFrbXNnKHZidWYsMzIsIlxcdigi LHZhcnNbaV0sIikiLE5VTEwpOworCSAgICBwcmludGYoIiAgVmFyaWFibGU6ICAgJXNcbiIsdmJ1 Zik7CisJICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4o MCk7IGVsc2UgbiA9IDA7CisJICAgIHkgPSBUTVBCVUZTSVo7CisJICAgIHMgPSB0bXBidWY7CisJ ICAgIHp6c3RyaW5nKHZidWYsJnMsJnkpOworCSAgICBsaW5lWzBdID0gTlVMOworCSAgICBja0dl dExvbmdQYXRoTmFtZSh0bXBidWYsbGluZSxMSU5CVUZTSVopOworCSAgICBwcmludGYoIiAgTG9u ZyBuYW1lOiAgJXNcbiIsbGluZSk7CisJICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICgh YXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7CisJICAgIGxpbmVbMF0gPSBOVUw7CisJ ICAgIEdldFNob3J0UGF0aE5hbWUodG1wYnVmLGxpbmUsTElOQlVGU0laKTsKKwkgICAgcHJpbnRm KCIgIFNob3J0IG5hbWU6ICVzXG4iLGxpbmUpOworCSAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAz KSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOworICAgICAgICAgICAgcHJp bnRmKCJcbiIpOworCSAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkg cmV0dXJuKDApOyBlbHNlIG4gPSAwOworCX0KKyNlbHNlICAvKiBOVCAqLworCisJdmFyc1swXSA9 ICJob21lIjsgICAgICBsZWdlbmRbMF0gPSAiWW91ciBob21lIGRpcmVjdG9yeSI7CisJdmFyc1sx XSA9ICJkaXJlY3RvcnkiOyBsZWdlbmRbMV0gPSAiS2VybWl0J3MgY3VycmVudCBkaXJlY3Rvcnki OworCXZhcnNbMl0gPSAiZXhlZGlyIjsgICAgbGVnZW5kWzJdID0gIktlcm1pdCdzIHByb2dyYW0g ZGlyZWN0b3J5IjsKKwl2YXJzWzNdID0gImluaWRpciI7ICAgIGxlZ2VuZFszXSA9ICJJbml0aWFs aXphdGlvbiBmaWxlIGRpcmVjdG9yeSI7CisJdmFyc1s0XSA9ICJzdGFydHVwIjsgICBsZWdlbmRb NF0gPSAiQ3VycmVudCBkaXJlY3Rvcnkgd2hlbiBzdGFydGVkIjsKKwl2YXJzWzVdID0gImRvd25s b2FkIjsgIGxlZ2VuZFs1XSA9ICJLZXJtaXQgZG93bmxvYWQgZGlyZWN0b3J5IjsKKwl2YXJzWzZd ID0gTlVMTDsJICAgICAgIGxlZ2VuZFs2XSA9IE5VTEw7CisKKwlmb3IgKGkgPSAwOyBpIDwgMTYg JiYgdmFyc1tpXTsgaSsrKSB7CisJICAgIHByaW50ZigiJXM6XG4iLGxlZ2VuZFtpXSk7CisJICAg IGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2Ug biA9IDA7CisJICAgIGNrbWFrbXNnKHZidWYsMzIsIlxcdigiLHZhcnNbaV0sIikiLE5VTEwpOwor CSAgICBwcmludGYoIiAgVmFyaWFibGU6ICVzXG4iLHZidWYpOworCSAgICBpZiAoKytuID4gY21k X3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOworCSAgICB5 ID0gVE1QQlVGU0laOworCSAgICBzID0gdG1wYnVmOworCSAgICB6enN0cmluZyh2YnVmLCZzLCZ5 KTsKKyAgICAgICAgICAgIHByaW50ZigiICBWYWx1ZTogICAgJXNcbiIsdG1wYnVmKTsKKwkgICAg aWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBu ID0gMDsKKyAgICAgICAgICAgIHByaW50ZigiXG4iKTsKKwkgICAgaWYgKCsrbiA+IGNtZF9yb3dz IC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKKwl9CisjZW5kaWYg LyogTlQgKi8KKwlyZXR1cm4oc3VjY2VzcyA9IDEpOworICAgIH0KKworI2lmZGVmIE5UCisgICAg aWYgKGN4ID09IFhYRElBTEVSKSB7CisgICAgICAgIFN0YXJ0RGlhbGVyKCk7CisgICAgICAgIHJl dHVybihzdWNjZXNzID0gMSk7CisgICAgfQorI2VuZGlmIC8qIE5UICovCisKKyAgICBpZiAoY3gg PT0gWFhDT05UKSB7CQkJLyogQ09OVElOVUUgKi8KKwlpZiAoKHggPSBjbWNmbSgpKSA8IDApCisJ ICByZXR1cm4oeCk7CisJaWYgKCF4Y21kc3JjKSB7CQkJLyogQXQgcHJvbXB0OiBjb250aW51ZSBz Y3JpcHQgKi8KKwkgICAgaWYgKGNtZGx2bCA+IDApCisJICAgICAgcG9wY2x2bCgpOwkJLyogUG9w IGNvbW1hbmQgbGV2ZWwgKi8KKwkgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsJLyogYWx3YXlzIHN1 Y2NlZWRzICovCisjaWZuZGVmIE5PU1BMCisJfSBlbHNlIHsJCQkvKiBJbiBzY3JpcHQ6IHdoYXRl dmVyLi4uICovCisJICAgIHggPSBtbG9vayhtYWN0YWIsImNvbnRpbnVlIixubWFjKTsKKwkgICAg LyogRG9uJ3Qgc2V0IHN1Y2Nlc3MgKi8KKwkgICAgcmV0dXJuKGRvZG8oeCxOVUxMLGNtZHN0a1tj bWRsdmxdLmNjZmxncykpOworI2VuZGlmIC8qIE5PU1BMICovCisJfQorICAgIH0KKyNpZmRlZiBV TklYCisjaWZuZGVmIE5PUFVURU5WCisvKgorICBOT1RFOiBTeW50YXggaXMgUFVURU5WIG5hbWUg dmFsdWUsIG5vdCBQVVRFTlYgbmFtZT12YWx1ZS4KKyAgSSBjb3VsZCBjaGVjayBmb3IgdGhpcyBi dXQgaXQgd291bGQgYmUgdG9vIG11Y2ggbWFnaWMuCisqLworICAgIGlmIChjeCA9PSBYWFBVVEUp IHsJCQkvKiBQVVRFTlYgKi8KKyAgICAgICAgY2hhciAqIHQgPSB0bXBidWY7CQkvKiBDcmVhdGUg b3IgYWx0ZXIgZW52aXJvbm1lbnQgdmFyICovCisJY2hhciAqIHMxID0gTlVMTCwgKiBzMiA9IE5V TEw7CisJaWYgKCh4ID0gY21mbGQoIlZhcmlhYmxlIG5hbWUiLCIiLCZzLHh4c3RyaW5nKSkgPCAw KQorICAgICAgICAgIHJldHVybih4KTsKKwlpZiAocykgaWYgKHMgPT0gIiIpIHMgPSBOVUxMOwor CShWT0lEKSBtYWtlc3RyKCZzMSxzKTsKKwlpZiAocyAmJiAhczEpIHsKKwkgICAgcHJpbnRmKCI/ UFVURU5WIC0gbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZVxuIik7CisJICAgIHJldHVybigtOSk7 CisJfQorCWlmICgoeCA9IGNtdHh0KCJWYWx1ZSIsIiIsJnMseHhzdHJpbmcpKSA8IDApCisJICBy ZXR1cm4oeCk7CisJaWYgKHMpIGlmIChzID09ICIiKSBzID0gTlVMTDsKKwkoVk9JRCkgbWFrZXN0 cigmczIscyk7CisJc3VjY2VzcyA9IGRvcHV0ZW52KHMxLHMyKTsKKwkoVk9JRCkgbWFrZXN0cigm czEsTlVMTCk7CisJKFZPSUQpIG1ha2VzdHIoJnMyLE5VTEwpOworCXJldHVybihzdWNjZXNzKTsK KyAgICB9CisjZW5kaWYJLyogTk9QVVRFTlYgKi8KKyNlbmRpZgkvKiBVTklYICovCisKKyAgICBp ZiAoY3ggPT0gWFhOT1RBVikgewkJLyogQ29tbWFuZCBpbiB0YWJsZSBub3QgYXZhaWxhYmxlICov CisJY2tzdHJuY3B5KHRtcGJ1ZixhdG1idWYsVE1QQlVGU0laKTsKKwlpZiAoKHggPSBjbXR4dCgi UmVzdCBvZiBjb21tYW5kIiwiIiwmcyxOVUxMKSkgPCAwKQorCSAgcmV0dXJuKHgpOworCXByaW50 ZigiU29ycnksIFwiJXNcIiBub3QgY29uZmlndXJlZCBpbiB0aGlzIHZlcnNpb24gb2YgS2VybWl0 LlxuIiwKKwkgICAgICAgdG1wYnVmCisJICAgICAgICk7CisJcmV0dXJuKHN1Y2Nlc3MgPSAwKTsK KyAgICB9CisgICAgcmV0dXJuKC0yKTsJCQkJLyogTm9uZSBvZiB0aGUgYWJvdmUgKi8KKworfSAv KiBlbmQgb2YgZG9jbWQoKSAqLworCisjZW5kaWYgLyogTk9JQ1AgKi8KCmRpZmYgLS1naXQgYS9j a2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdXVzci5oIGIvY2tlcm1pdC05 LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3V1c3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwLi44Mzg5MWZiCi0tLSAvZGV2L251bGwKKysrIGIvY2tlcm1pdC05LjAu MzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3V1c3IuaApAQCAtMCwwICsxLDMwNDkgQEAKKy8q ICBDIEsgVSBVIFMgUiAuIEggIC0tICBTeW1ib2wgZGVmaW5pdGlvbnMgZm9yIEMtS2VybWl0IGNr dXVzKi5jIG1vZHVsZXMgICovCisKKy8qCisgIEF1dGhvcjogRnJhbmsgZGEgQ3J1eiA8ZmRjQGNv bHVtYmlhLmVkdT4sCisgIENvbHVtYmlhIFVuaXZlcnNpdHkgQWNhZGVtaWMgSW5mb3JtYXRpb24g U3lzdGVtcywgTmV3IFlvcmsgQ2l0eS4KKworICBDb3B5cmlnaHQgKEMpIDE5ODUsIDIwMTAsCisg ICAgVHJ1c3RlZXMgb2YgQ29sdW1iaWEgVW5pdmVyc2l0eSBpbiB0aGUgQ2l0eSBvZiBOZXcgWW9y ay4KKyAgICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgU2VlIHRoZSBDLUtlcm1pdCBDT1BZSU5HLlRY VCBmaWxlIG9yIHRoZQorICAgIGNvcHlyaWdodCB0ZXh0IGluIHRoZSBja2NtYWkuYyBtb2R1bGUg Zm9yIGRpc2NsYWltZXIgYW5kIHBlcm1pc3Npb25zLgorKi8KKyNpZm5kZWYgQ0tVVVNSX0gKKyNk ZWZpbmUgQ0tVVVNSX0gKKworI2luY2x1ZGUgImNrdWNtZC5oIgkJCS8qIEdldCBzeW1ib2xzIGZy b20gY29tbWFuZCBwYWNrYWdlICovCisKKyNpZm5kZWYgTk9MVUNBQ0hFCQkJLyogVXNlIGxvb2t1 cCgpIGNhY2hlICovCisjaWZuZGVmIE5PU1BMCQkJCS8qIFRvIHNwZWVkIHVwIHNjcmlwdCBwcm9n cmFtcyAqLworI2lmbmRlZiBVU0VfTFVDQUNIRQorI2RlZmluZSBVU0VfTFVDQUNIRQorI2VuZGlm IC8qIFVTRV9MVUNBQ0hFICovCisjZW5kaWYgLyogTk9TUEwgKi8KKyNlbmRpZiAvKiBOT0xVQ0FD SEUgKi8KKworI2lmbmRlZiBOT0RPVUJMRVFVT1RJTkcJCQkvKiBOZXcgdG8gOC4wICovCisjZGVm aW5lIERPVUJMRVFVT1RJTkcJCQkvKiBBbGxvdyBmaWVsZHMgdG8gYmUgZW5jbG9zZWQgaW4gKi8K KyNlbmRpZiAvKiBOT0RPVUJMRVFVT1RJTkcgKi8JCS8qIGRvdWJsZXF1b3Rlcy4gKi8KKworI2lm bmRlZiBOT0xPQ1VTCQkJCS8qIFNFVCBMT0NVUyAqLworI2RlZmluZSBMT0NVUworI2VuZGlmIC8q IE5PTE9DVVMgKi8KKworLyogU2l6ZXMgb2YgdGhpbmdzIC0gRk5WQUxMIGFuZCBNQVhBUkdMRU4g aW5jcmVhc2VkIGZyb20gOEsgMjAwNTA5MTIgKi8KKworI2lmZGVmIEJJR0JVRk9LCisjZGVmaW5l IEZOVkFMTCBDTURCTAkJCS8qIEZ1bmN0aW9uIHJldHVybiB2YWx1ZSBsZW5ndGggKi8KKyNkZWZp bmUgTUFYQVJHTEVOIENNREJMCQkJLyogTWF4IGZ1bmMgYXJnIGxlbmd0aCBhZnRlciBldmFsICov CisjZGVmaW5lIE1BWEFSR0xJU1QgMTAyNAkJCS8qIE1heCBudW1iZXIgb2YgYXJncyBmb3IgYSBt YWNybyAqLworI2RlZmluZSBGU1BFQ0wgQ01EQkwJCQkvKiBNYXggbGVuZ3RoIGZvciBNU0VORC9H RVQgc3RyaW5nICovCisjZGVmaW5lIE1TRU5ETUFYIDEwMjQJCQkvKiBOdW1iZXIgb2YgZmlsZXNw ZWNzIGZvciBNU0VORCAqLworI2RlZmluZSBNQUNfTUFYIDE2Mzg0CQkJLyogTWF4aW11bSBudW1i ZXIgb2YgbWFjcm9zICovCisKKyNlbHNlICAvKiBTYW1lIGFzIGFib3ZlIGJ1dCBmb3Igc21hbGxl ciBidWlsZHMuLi4gKi8KKworI2RlZmluZSBGTlZBTEwgMTAyMgorI2RlZmluZSBNQVhBUkdMRU4g MTAyMworI2RlZmluZSBNQVhBUkdMSVNUIDY0CisjZGVmaW5lIEZTUEVDTCAzMDAKKyNkZWZpbmUg TVNFTkRNQVggMTI4CisjZGVmaW5lIE1BQ19NQVggMTAyNAorI2VuZGlmIC8qIEJJR0JVRk9LICov CisKKyNkZWZpbmUgR1ZBUlMgMTI3CQkJLyogSGlnaGVzdCBnbG9iYWwgdmFyIGFsbG93ZWQgKi8K KyNpZmRlZiBCSUdCVUZPSworI2RlZmluZSBWTkFNTCA0MDk2CQkJLyogTWF4IGxlbmd0aCBmb3Ig dmFyaWFibGUgbmFtZSAqLworI2RlZmluZSBBUlJBWVJFRkxFTiAxMDI0CQkvKiBNYXggbGVuZ3Ro IGZvciBhcnJheSByZWZlcmVuY2UgKi8KKyNkZWZpbmUgRk9SREVQVEggMzIJCQkvKiBNYXhpbXVt IGRlcHRoIG9mIG5lc3RlZCBGT1IgbG9vcHMgKi8KKyNkZWZpbmUgTUFYVEFLRSA1NAkJCS8qIE1h eGltdW0gbmVzdGluZyBvZiBUQUtFIGZpbGVzICovCisjZGVmaW5lIE1BQ0xFVkVMIDEyOAkJCS8q IE1heGltdW0gbmVzdGluZyBmb3IgbWFjcm9zICovCisjZGVmaW5lIElOUEJVRlNJWiA0MDk2CQkJ LyogU2l6ZSBvZiBJTlBVVCBidWZmZXIgKi8KKyNkZWZpbmUgUFJPTVBUTCAxMDI0CQkJLyogTWF4 IGxlbmd0aCBmb3IgcHJvbXB0ICovCisjZGVmaW5lIExCTFNJWiA4MTkyCQkJLyogTWF4aW11bSBs ZW5ndGggZm9yIGEgR09UTyBsYWJlbCAqLworI2Vsc2UKKyNkZWZpbmUgVk5BTUwgMjU2CQkJLyog TWF4IGxlbmd0aCBmb3IgdmFyaWFibGUgbmFtZSAqLworI2RlZmluZSBBUlJBWVJFRkxFTiAxMjgJ CQkvKiBNYXggbGVuZ3RoIGZvciBhcnJheSByZWZlcmVuY2UgKi8KKyNkZWZpbmUgRk9SREVQVEgg MTAJCQkvKiBNYXhpbXVtIGRlcHRoIG9mIG5lc3RlZCBGT1IgbG9vcHMgKi8KKyNkZWZpbmUgTUFY VEFLRSAzMgkJCS8qIE1heGltdW0gbmVzdGluZyBvZiBUQUtFIGZpbGVzICovCisjZGVmaW5lIE1B Q0xFVkVMIDY0CQkJLyogTWF4aW11bSBuZXN0aW5nIGZvciBtYWNyb3MgKi8KKyNkZWZpbmUgSU5Q QlVGU0laIDI1NgorI2RlZmluZSBQUk9NUFRMIDI1NgkJCS8qIE1heCBsZW5ndGggZm9yIHByb21w dCAqLworI2RlZmluZSBMQkxTSVogMTI4CQkJLyogTWF4aW11bSBsZW5ndGggZm9yIGEgR09UTyBs YWJlbCAqLworI2VuZGlmIC8qIEJJR0JVRk9LICovCisjZGVmaW5lIE5BUkdTIDEwCQkJLyogTWF4 IG51bWJlciBvZiBtYWNybyBhcmd1bWVudHMgKi8KKyNkZWZpbmUgTElOQlVGU0laIChDTURCTCAr IDEwKQkJLyogU2l6ZSBvZiBsaW5lW10gYnVmZmVyICovCisjZGVmaW5lIFRNUEJVRlNJWiAoQ01E QkwgKyAxMCkJCS8qIFNpemUgb2YgdGVtcG9yYXJ5IGJ1ZmZlciAqLworCisjZGVmaW5lIENNRFNU S0wgKCBNQUNMRVZFTCArIE1BWFRBS0UgKyAyKSAvKiBDb21tYW5kIHN0YWNrIGRlcHRoICovCisK KyNpZm5kZWYgTk9QVVJHRQkJCQkvKiBQVVJHRSBjb21tYW5kICovCisjaWZkZWYgVU5JWAorI2Rl ZmluZSBDS1BVUkdFCisjZW5kaWYgLyogVU5JWCAqLworI2VuZGlmIC8qIE5PUFVSR0UgKi8KKwor I2lmbmRlZiBOT01JTlBVVAkJCS8qIE1JTlBVVCBjb21tYW5kICovCisjaWZuZGVmIE5PU1BMCisj ZGVmaW5lIENLX01JTlBVVAorI2lmbmRlZiBNSU5QTUFYCisjaWZkZWYgQklHQlVGT0sKKyNkZWZp bmUgTUlOUE1BWCA5NgkJCS8qIE1heCBudW1iZXIgb2YgTUlOUFVUIHN0cmluZ3MgKi8KKyNlbHNl CisjZGVmaW5lIE1JTlBNQVggMTYKKyNlbmRpZiAvKiBCSUdCVUZPSyAqLworI2VuZGlmIC8qIE1J TlBNQVggKi8KKyNkZWZpbmUgTUlOUEJVRkwgMjU2CQkJLyogU2l6ZSBvZiBNSU5QVVQgdGVtcCBi dWZmZXIgKi8KKyNlbmRpZiAvKiBOT1NQTCAqLworI2VuZGlmIC8qIE5PTUlOUFVUICovCisKKyNk ZWZpbmUgQVJSQVlCQVNFIDk1CQkJLyogTG93ZXN0IGFycmF5LW5hbWUgY2hhcmFjdGVyICovCisK KyNpZm5kZWYgTk9LRVJCQU5HCisjaWZuZGVmIEtFUkJBTkcKKyNkZWZpbmUgS0VSQkFORworI2Vu ZGlmIC8qIEtFUkJBTkcgKi8KKyNlbmRpZiAvKiBOT0tFUkJBTkcgKi8KKworLyogQml0IHZhbHVl cyAoMSwgMiwgNCwgOCwgLi4uKSBmb3IgdGhlIGNjZmxncyBmaWVsZCAqLworCisjZGVmaW5lIENG X0FQQyAgMQkJCS8qIEV4ZWN1dGluZyBhbiBBUEMgY29tbWFuZCAqLworI2RlZmluZSBDRl9LTUFD IDIJCQkvKiBFeGVjdXRpbmcgYSBcS21hY3JvICovCisjZGVmaW5lIENGX0NNREwgNAkJCS8qIE1h Y3JvIGZyb20gLUMgImJsYWgiIGNvbW1hbmQgbGluZSAqLworI2RlZmluZSBDRl9SRVhYIDgJCQkv KiBNYWNybyBmcm9tIFJFWFggaW50ZXJwcmV0ZXIgKi8KKyNkZWZpbmUgQ0ZfSU1BQyAxNgkJCS8q IEludGVybmFsIG1hY3JvIGxpa2UgRk9SLCBXSElMRS4uLiAqLworCitzdHJ1Y3QgY21kcHRyIHsJ CQkJLyogQ29tbWFuZCBzdGFjayBzdHJ1Y3R1cmUgKi8KKyAgICBpbnQgc3JjOwkJCQkvKiBDb21t YW5kIFNvdXJjZSAqLworICAgIGludCBsdmw7CQkJCS8qIEN1cnJlbnQgVEFLRSBvciBETyBsZXZl bCAqLworICAgIGludCBjY2ZsZ3M7CQkJCS8qIEZsYWdzICovCit9OworCitzdHJ1Y3QgbXRhYiB7 CQkJCS8qIE1hY3JvIHRhYmxlLCBsaWtlIGtleXdvcmQgdGFibGUgKi8KKyAgICBjaGFyICprd2Q7 CQkJCS8qIEJ1dCB3aXRoIHBvaW50ZXJzIGZvciB2YWxzICovCisgICAgY2hhciAqbXZhbDsJCQkJ LyogaW5zdGVhZCBvZiBpbnRzLiAqLworICAgIHNob3J0IGZsZ3M7Cit9OworCitzdHJ1Y3QgbG9j YWx2YXIgewkJCS8qIExvY2FsIHZhcmlhYmxlIHN0cnVjdHVyZS4gKi8KKyAgICBjaGFyICogbHZf bmFtZTsKKyAgICBjaGFyICogbHZfdmFsdWU7CisgICAgc3RydWN0IGxvY2FsdmFyICogbHZfbmV4 dDsKK307CisKK3N0cnVjdCBzdHJpbmdsaXN0IHsJCQkvKiBHZW5lcmFsIHB1cnBvc2Ugc3RyaW5n IGxpc3QgKi8KKyAgICBjaGFyICogc2xfbmFtZTsKKyAgICBzdHJ1Y3Qgc3RyaW5nbGlzdCAqIHNs X25leHQ7Cit9OworCitzdHJ1Y3Qgc3RyaW5naW50IHsJCQkvKiBTdHJpbmcgYW5kICh3aWRlKSBp bnRlZ2VyICovCisgICAgY2hhciAqIHN2YWw7CQkJLyogdXNlZCBtYWlubHkgd2l0aCBjb21tYW5k IHN3aXRjaGVzICovCisgICAgaW50IGl2YWw7CisgICAgQ0tfT0ZGX1Qgd3ZhbDsKK307CisKKyNp Zm5kZWYgTk9JQ1AKKy8qCisgIEMtS2VybWl0IEluaXRpYWxpemF0aW9uIGZpbGUuLi4KKworICBT eXN0ZW0tZGVwZW5kZW50IGRlZmF1bHRzIGFyZSBidWlsdCBpbnRvIHRoZSBwcm9ncmFtLCBzZWUg YmVsb3cuCisgIFRoZXNlIGNhbiBiZSBvdmVycmlkZGVuIGluIGVpdGhlciBvZiB0d28gd2F5czoK KyAgMS4gQ0tfRFNZU0lOSSBpcyBkZWZpbmVkIGF0IGNvbXBpbGUgdGltZSwgaW4gd2hpY2ggY2Fz ZSBhIGRlZmF1bHQKKyAgICAgc3lzdGVtLXdpZGUgaW5pdGlhbGl6YXRpb24gZmlsZSBuYW1lIGlz IGNob3NlbiBmcm9tIGJlbG93LCBvcjoKKyAgMjogQ0tfU1lTSU5JIGlzIGRlZmluZWQgdG8gYmUg YSBzdHJpbmcsIHdoaWNoIGxldHMgdGhlIHByb2dyYW0KKyAgICAgYnVpbGRlciBjaG9vc2UgdGhl IGluaXRpYWxpemF0aW9uIGZpbGVzcGVjIGF0IGNvbXBpbGUgdGltZS4KKyAgVGhlc2UgY2FuIGJl IGdpdmVuIG9uIHRoZSBDQyBjb21tYW5kIGxpbmUsIHNvIHRoZSBzb3VyY2UgY29kZSBuZWVkIG5v dCBiZQorICBjaGFuZ2VkLgorKi8KKworI2lmbmRlZiBDS19TWVNJTkkJCQkvKiBJZiBubyBpbml0 aWFsaXphdGlvbiBmaWxlIGdpdmVuLCAqLworI2lmZGVmIENLX0RTWVNJTkkJCQkvKiBidXQgQ0tf RFNZU0lOSSBpcyBkZWZpbmVkLi4uICovCisKKy8qIFN1cHBseSBzeXN0ZW0tZGVwZW5kZW50ICJk ZWZhdWx0IGRlZmF1bHQiIGluaXRpYWxpemF0aW9uIGZpbGUgKi8KKworI2lmZGVmIFVOSVgJCQkJ LyogRm9yIFVOSVgsIHN5c3RlbS13aWRlICovCisvKiBUaGlzIGFsbG93cyBvbmUgY29weSBvZiB0 aGUgc3RhbmRhcmQgaW5pdCBmaWxlIG9uIHRoZSB3aG9sZSBzeXN0ZW0sICovCisvKiByYXRoZXIg dGhhbiBhIHNlcGFyYXRlIGNvcHkgaW4gZWFjaCB1c2VyJ3MgaG9tZSBkaXJlY3RvcnkuICovCisj aWZkZWYgSFBVWDEwCisjZGVmaW5lIENLX1NZU0lOSSAiL3Vzci9zaGFyZS9saWIva2VybWl0L2Nr ZXJtaXQuaW5pIgorI2Vsc2UKKyNpZmRlZiBDVV9BQ0lTCisjZGVmaW5lIENLX1NZU0lOSSAiL3Vz ci9zaGFyZS9saWIva2VybWl0L2NrZXJtaXQuaW5pIgorI2Vsc2UKKyNpZmRlZiBfX2xpbnV4X18K KyNkZWZpbmUgQ0tfU1lTSU5JICIvdXNyL3NoYXJlL2tlcm1pdC9ja2VybWl0LmluaSIKKyNlbHNl CisjZGVmaW5lIENLX1NZU0lOSSAiL3Vzci9sb2NhbC9iaW4vY2tlcm1pdC5pbmkiCisjZW5kaWYg LyogbGludXggKi8KKyNlbmRpZiAvKiBDVV9BQ0lTICovCisjZW5kaWYgLyogSFBVWDEwICovCisv KiBGaWxsIGluICNlbHNlLi4jaWZkZWYncyBoZXJlIGZvciBWTVMsIE9TLzIsIGV0Yy4gKi8KKy8q IEZpbGwgaW4gbWF0Y2hpbmcgI2VuZGlmJ3MgaGVyZS4gKi8KKyNlbmRpZiAvKiBVTklYICovCisK KyNlbmRpZiAvKiBDS19EU1lTSU5JICovCisjZW5kaWYgLyogQ0tfU1lTSU5JICovCisKKyNpZmRl ZiBDS19TWVNJTkkJCQkvKiBJbml0LWZpbGUgcHJlY2VkZW5jZSAqLworI2lmbmRlZiBDS19JTklf QQkJCS8qIEEgbWVhbnMgc3lzdGVtLXdpZGUgZmlsZSBmaXJzdCAqLworI2lmbmRlZiBDS19JTklf QgkJCS8qIEIgbWVhbnMgdXNlcidzIGZpcnN0ICovCisjZGVmaW5lIENLX0lOSV9BCQkJLyogQSBp cyBkZWZhdWx0ICovCisjZW5kaWYgLyogQ0tfSU5JX0IgKi8KKyNlbmRpZiAvKiBDS19JTklfQSAq LworI2Vsc2UKKyNpZmRlZiBDS19JTklfQQkJCQkvKiBPdGhlcndpc2UgKi8KKyN1bmRlZiBDS19J TklfQQkJCQkvKiBtYWtlIHN1cmUgdGhlc2UgYXJlbid0IGRlZmluZWQgKi8KKyNlbmRpZiAvKiBD S19JTklfQSAqLworI2lmZGVmIENLX0lOSV9CCisjdW5kZWYgQ0tfSU5JX0IKKyNlbmRpZiAvKiBD S19JTklfQiAqLworI2VuZGlmIC8qIENLX1NZU0lOSSAqLworCisjaWZkZWYgQ0tfU1lTSU5JCQkJ LyogT25lIG1vcmUgY2hlY2suLi4gKi8KKyNpZmRlZiBDS19JTklfQQkJCQkvKiBNYWtlIHN1cmUg dGhleSdyZSBub3QgYm90aCAqLworI2lmZGVmIENLX0lOSV9CCQkJCS8qIGRlZmluZWQuICovCisj dW5kZWYgQ0tfSU5JX0IKKyNlbmRpZiAvKiBDS19JTklfQiAqLworI2VuZGlmIC8qIENLX0lOSV9B ICovCisjZW5kaWYgLyogQ0tfU1lTSU5JICovCisvKgorICBJZiBuZWl0aGVyIENLX0RTWVNJTkkg bm9yIENLX1NZU0lOSSBhcmUgZGVmaW5lZCwgdGhlc2UgYXJlIHRoZQorICBidWlsdC1pbiBkZWZh dWx0cyBmb3IgZWFjaCBwbGF0Zm9ybS4gIFVTRV9DVVNUT00gbWVhbnMgdG8gZXhlY3V0ZSB0aGUK KyAgY3VzdG9taXphdGlvbiBmaWxlIGF1dG9tYXRpY2FsbHkgaWYgdGhlIGluaXRpYWxpemF0aW9u IGZpbGUgaXMgbm90IGZvdW5kLgorKi8KKyNpZm5kZWYgTk9DVVNUT00KKyNpZm5kZWYgVVNFX0NV U1RPTQorI2RlZmluZSBVU0VfQ1VTVE9NCisjZW5kaWYgLyogVVNFX0NVU1RPTSAqLworI2VuZGlm IC8qIE5PQ1VTVE9NICovCisKKyNpZm5kZWYgIEtFUk1SQ0wJCQkvKiBQYXRoIGxlbmd0aCBmb3Ig aW5pdCBmaWxlICovCisjZGVmaW5lIEtFUk1SQ0wgQ0tNQVhQQVRICisjZW5kaWYgLyogIEtFUk1S Q0wgKi8KKworI2lmZGVmIHZtcworI2RlZmluZSBLRVJNUkMgIkNLRVJNSVQuSU5JIgkJLyogSW5p dCBmaWxlIG5hbWUgKi8KKyNkZWZpbmUgTVlDVVNUT00gIkNLRVJNT0QuSU5JIgkJLyogQ3VzdG9t aXphdGlvbiBmaWxlIG5hbWUgKi8KKyNlbHNlCisjaWZkZWYgT1MyCisjaWZkZWYgTlQKKyNkZWZp bmUgS0VSTVJDICJrOTUuaW5pIgorI2RlZmluZSBNWUNVU1RPTSAiazk1Y3VzdG9tLmluaSIKKyNl bHNlCisjZGVmaW5lIEtFUk1SQyAiazIuaW5pIgorI2RlZmluZSBNWUNVU1RPTSAiazJjdXN0b20u aW5pIgorI2VuZGlmIC8qIE5UICovCisjZWxzZQorI2lmZGVmIFVOSVhPUk9TSworI2RlZmluZSBL RVJNUkMgIi5rZXJtcmMiCisjZGVmaW5lIE1ZQ1VTVE9NICIubXlrZXJtcmMiCisjZWxzZQorI2lm ZGVmIFNUUkFUVVMKKyNkZWZpbmUgS0VSTVJDICJja2VybWl0LmluaSIKKyNkZWZpbmUgTVlDVVNU T00gImNrZXJtb2QuaW5pIgorI2Vsc2UKKyNkZWZpbmUgS0VSTVJDICJDS0VSTUlULklOSSIKKyNk ZWZpbmUgTVlDVVNUT00gImNrZXJtb2QuaW5pIgorI2VuZGlmIC8qIFNUUkFUVVMgKi8KKyNlbmRp ZiAvKiBVTklYT1JPU0sgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiB2bXMgKi8KKwor I2lmbmRlZiBLRVJNUkNMCisjZGVmaW5lIEtFUk1SQ0wgMjU2CisjZW5kaWYgLyogS0VSTVJDTCAq LworI2VuZGlmIC8qIE5PSUNQICovCisKKy8qIFVzZXIgaW50ZXJmYWNlIGZlYXR1cmVzICovCisK KyNpZmRlZiBDS19DVVJTRVMJCQkvKiBUaGVybW9tZXRlciAqLworI2lmbmRlZiBOT19QQ1RfQkFS CisjaWZuZGVmIENLX1BDVF9CQVIKKyNkZWZpbmUgQ0tfUENUX0JBUgorI2VuZGlmIC8qIE5PX1BD VF9CQVIgKi8KKyNlbmRpZiAvKiBDS19QQ1RfQkFSICovCisjZW5kaWYgLyogQ0tfQ1VSU0VTICov CisKKyNpZmRlZiBLVUkJCQkJLyogS1VJIHJlcXVpcmVzIHRoZSBUaGVybW9tZXRlciBjb2RlICov CisjaWZuZGVmIE5PX1BDVF9CQVIKKyNpZm5kZWYgQ0tfUENUX0JBUgorI2RlZmluZSBDS19QQ1Rf QkFSCisjZW5kaWYgLyogTk9fUENUX0JBUiAqLworI2VuZGlmIC8qIENLX1BDVF9CQVIgKi8KKyNl bmRpZiAvKiBLVUkgKi8KKworLyogSW5jbHVkZXMgKi8KKworI2lmZGVmIE1JTklYCisvKiB3aHk/ ICovCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYgLyogTUlOSVggKi8KKworLyogU3lt Ym9scyBmb3IgY29tbWFuZCBzb3VyY2UgKi8KKworI2RlZmluZSBDTURfS0IgMAkJCS8qIEtleUJv YXJkIG9yIHN0YW5kYXJkIGlucHV0ICovCisjZGVmaW5lIENNRF9URiAxCQkJLyogVEFLRSBjb21t YW5kIEZpbGUgKi8KKyNkZWZpbmUgQ01EX01EIDIJCQkvKiBNYWNybyBEZWZpbml0aW9uICovCisK Ky8qCisgIFNFVCBUUkFOU0ZFUiBDQU5DRUxMQVRJT04gY29tbWFuZCBzaG91bGQgYmUgYXZhaWxh YmxlIGluIGFsbCB2ZXJzaW9ucy4KKyAgQnV0IGZvciBub3cuLi4KKyovCisjaWZkZWYgVU5JWAkJ CQkvKiBVTklYIGhhcyBpdCAqLworI2lmbmRlZiBYRlJDQU4KKyNkZWZpbmUgWEZSQ0FOCisjZW5k aWYgLyogWEZSQ0FOICovCisjZW5kaWYgLyogVU5JWCAqLworI2lmZGVmIFZNUwkJCQkvKiBWTVMg aGFzIGl0ICovCisjaWZuZGVmIFhGUkNBTgorI2RlZmluZSBYRlJDQU4KKyNlbmRpZiAvKiBYRlJD QU4gKi8KKyNlbmRpZiAvKiBWTVMgKi8KKyNpZmRlZiBkYXRhZ2VuZXJhbAkJCS8qIERHIEFPUy9W UyBoYXMgaXQgKi8KKyNpZm5kZWYgWEZSQ0FOCisjZGVmaW5lIFhGUkNBTgorI2VuZGlmIC8qIFhG UkNBTiAqLworI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCisjaWZkZWYgU1RSQVRVUwkJCQkvKiBT dHJhdHVzIFZPUyBoYXMgaXQgKi8KKyNpZm5kZWYgWEZSQ0FOCisjZGVmaW5lIFhGUkNBTgorI2Vu ZGlmIC8qIFhGUkNBTiAqLworI2VuZGlmIC8qIFNUUkFUVVMgKi8KKyNpZmRlZiBPU0sJCQkJLyog T1MtOSAqLworI2lmbmRlZiBYRlJDQU4KKyNkZWZpbmUgWEZSQ0FOCisjZW5kaWYgLyogWEZSQ0FO ICovCisjZW5kaWYgLyogT1NLICovCisKKyNpZm5kZWYgTk9DTURMCisvKiBFeHRlbmRlZCBDb21t YW5kLUxpbmUgT3B0aW9uIENvZGVzIChrZWVwIGFscGhhYmV0aWNhbCBieSBrZXl3b3JkKSAqLwor CisjZGVmaW5lIFhBX0FOT04gMAkJCS8qIC0tYW5vbnltb3VzICovCisjZGVmaW5lIFhBX0JBRkkg MQkJCS8qIC0tYmFubmVyZmlsZSAqLworI2RlZmluZSBYQV9DREZJIDIJCQkvKiAtLWNkZmlsZSAq LworI2RlZmluZSBYQV9DRE1TIDMJCQkvKiAtLWNkbWVzc2FnZSAqLworI2RlZmluZSBYQV9IRUxQ IDQJCQkvKiAtLWhlbHAgKi8KKyNkZWZpbmUgWEFfSEVGSSA1CQkJLyogLS1oZWxwZmlsZSAqLwor I2RlZmluZSBYQV9JS0ZJIDYJCQkvKiAtLXhmZXJmaWxlICovCisjZGVmaW5lIFhBX0lLTEcgNwkJ CS8qIC0teGZlcmxvZyAqLworI2RlZmluZSBYQV9BTkZJIDgJCQkvKiAtLWluaXRmaWxlICovCisj ZGVmaW5lIFhBX1BFUk0gOQkJCS8qIC0tcGVybWlzc2lvbnMgKi8KKyNkZWZpbmUgWEFfUk9PVCAx MAkJCS8qIC0tcm9vdCAqLworI2RlZmluZSBYQV9TWVNMIDExCQkJLyogLS1zeXNsb2cgKi8KKyNk ZWZpbmUgWEFfVVNGSSAxMgkJCS8qIC0tdXNlcmZpbGUgKi8KKyNkZWZpbmUgWEFfV1RGSSAxMwkJ CS8qIC0td3RtcGZpbGUgKi8KKyNkZWZpbmUgWEFfV1RNUCAxNAkJCS8qIC0td3RtcGxvZyAqLwor I2RlZmluZSBYQV9USU1PIDE1CQkJLyogLS10aW1lb3V0ICovCisjZGVmaW5lIFhBX05PSU4gMTYJ CQkvKiAtLW5vaW50ZXJydXB0cyAqLworI2RlZmluZSBYQV9EQkFTIDE3CQkJLyogLS1kYXRhYmFz ZSAqLworI2RlZmluZSBYQV9EQkZJIDE4CQkJLyogLS1kYmZpbGUgKi8KKyNkZWZpbmUgWEFfUFJJ ViAxOQkJCS8qIC0tcHJpdmlkICovCisjZGVmaW5lIFhBX1ZFUlMgMjAJCQkvKiAtLXZlcnNpb24g Ki8KKyNkZWZpbmUgWEFfTlBSTSAyMQkJCS8qIC0tbm9wZXJtcyAqLworI2RlZmluZSBYQV9YUE9T IDIyCQkJLyogV2luZG93IHBvc2l0aW9uIFggY29vcmRpbmF0ZSAqLworI2RlZmluZSBYQV9ZUE9T IDIzCQkJLyogV2luZG93IHBvc2l0aW9uIFkgY29vcmRpbmF0ZSAqLworI2RlZmluZSBYQV9GTkFN IDI0CQkJLyogRm9udCBGYWNlbmFtZSAqLworI2RlZmluZSBYQV9GU0laIDI1CQkJLyogRm9udCBT aXplICovCisjZGVmaW5lIFhBX1RFUk0gMjYJCQkvKiBUZXJtaW5hbCB0eXBlICovCisjZGVmaW5l IFhBX0NTRVQgMjcJCQkvKiBSZW1vdGUgQ2hhcmFjdGVyIFNldCAqLworI2RlZmluZSBYQV9ST1dT IDI4CQkJLyogU2NyZWVuIHJvd3MgKGhlaWdodCkgKi8KKyNkZWZpbmUgWEFfQ09MUyAyOQkJCS8q IFNjcmVlbiBjb2x1bW5zICh3aWR0aCkgKi8KKyNkZWZpbmUgWEFfVEVMICAzMAkJCS8qIE1ha2Ug YSBUZWxuZXQgY29ubmVjdGlvbiAqLworI2RlZmluZSBYQV9GVFAgIDMxCQkJLyogTWFrZSBhbiBG VFAgY29ubmVjdGlvbiAqLworI2RlZmluZSBYQV9TU0ggIDMyCQkJLyogTWFrZSBhbiBTU0ggY29u bmVjdGlvbiAqLworI2RlZmluZSBYQV9VU0VSIDMzCQkJLyogVXNlcm5hbWUgZm9yIGxvZ2luICov CisjZGVmaW5lIFhBX1BBU1MgMzQJCQkvKiBQYXNzd29yZCBmb3IgbG9naW4gKi8KKyNkZWZpbmUg WEFfVElUTCAzNSAgICAgICAgICAgICAgICAgICAgICAvKiBXaW5kb3cgVGl0bGUgKi8KKyNkZWZp bmUgWEFfTk9NTiAzNgkJCS8qIE5vIEdVSSBNZW51IEJhciAqLworI2RlZmluZSBYQV9OT1RCIDM3 CQkJLyogTm8gR1VJIFRvb2wgQmFyICovCisjZGVmaW5lIFhBX05PU0IgMzggICAgICAgICAgICAg ICAgICAgICAgLyogTm8gR1VJIFN0YXR1cyBCYXIgKi8KKyNkZWZpbmUgWEFfTk9QVVNIIDM5ICAg ICAgICAgICAgICAgICAgICAvKiBEaXNhYmxlIGV4dGVybmFsIGNvbW1hbmRzICovCisjZGVmaW5l IFhBX05PU0NST0xMIDQwICAgICAgICAgICAgICAgICAgLyogRGlzYWJsZSBzY3JvbGxiYWNrIG9w ZXJhdGlvbnMgKi8KKyNkZWZpbmUgWEFfTk9FU0NBUEUgNDEgICAgICAgICAgICAgICAgICAvKiBE aXNhYmxlIGVzY2FwZSBmcm9tIGNvbm5lY3QgbW9kZSAqLworI2RlZmluZSBYQV9MT0NLIDQyICAg ICAgICAgICAgICAgICAgICAgIC8qIEFsbCBsb2NrZG93biBvcHRpb25zICovCisjZGVmaW5lIFhB X05PQkFSIDQzICAgICAgICAgICAgICAgICAgICAgLyogTm8gR1VJIEJhcnMgKi8KKyNkZWZpbmUg WEFfV01BWCAgNDQKKyNkZWZpbmUgWEFfV01JTiAgNDUKKyNkZWZpbmUgWEFfU0NBTEUgNDYgICAg ICAgICAgICAgICAgICAgICAvKiBHVUkgU2NhbGUgRm9udCAqLworI2RlZmluZSBYQV9DSEdEICA0 NyAgICAgICAgICAgICAgICAgICAgIC8qIEdVSSBDaGFuZ2UgRGltZW5zaW9ucyAqLworI2RlZmlu ZSBYQV9OT0NMT1NFIDQ4ICAgICAgICAgICAgICAgICAgIC8qIEdVSSBEaXNhYmxlIENsb3NlIFdp bmRvdyAqLworI2RlZmluZSBYQV9VTkJVRiA0OQkJCS8qIFVOSVggdW5idWZmZXJlZCBjb25zb2xl ICovCisjZGVmaW5lIFhBX01BWCAgNDkJCQkvKiBIaWdoZXN0IGV4dGVuZGVkIG9wdGlvbiBudW1i ZXIgKi8KKyNlbmRpZiAvKiBOT0NNREwgKi8KKworI2lmbmRlZiBOT0lDUAorLyogVG9wIExldmVs IENvbW1hbmRzICovCisvKiBWYWx1ZXMgYXNzb2NpYXRlZCB3aXRoIHRvcC1sZXZlbCBjb21tYW5k cyBtdXN0IGJlIDAgb3IgZ3JlYXRlci4gKi8KKworI2RlZmluZSBYWEJZRSAgIDAJLyogQllFICov CisjZGVmaW5lIFhYQ0xFICAgMQkvKiBDTEVBUiAqLworI2RlZmluZSBYWENMTyAgIDIJLyogQ0xP U0UgKi8KKyNkZWZpbmUgWFhDT04gICAzCS8qIENPTk5FQ1QgKi8KKyNkZWZpbmUgWFhDUFkgICA0 CS8qIENPUFkgKi8KKyNkZWZpbmUgWFhDV0QgICA1CS8qIENXRCAoQ2hhbmdlIFdvcmtpbmcgRGly ZWN0b3J5KSAqLworI2RlZmluZSBYWERFRgk2CS8qIERFRklORSAoYSBtYWNybyBvciB2YXJpYWJs ZSkgKi8KKyNkZWZpbmUgWFhERUwgICA3CS8qIChMb2NhbCkgREVMRVRFICovCisjZGVmaW5lIFhY RElSICAgOAkvKiAoTG9jYWwpIERJUkVDVE9SWSAqLworCisvKiBESVJFQ1RPUlkgQ29tbWFuZCBv cHRpb25zLi4uICovCisjZGVmaW5lIERJUl9CUkYgMQkvKiBCUklFRiAqLworI2RlZmluZSBESVJf VlJCIDIJLyogVkVSQk9TRSAqLworI2RlZmluZSBESVJfUEFHIDMJLyogUEFHRSAqLworI2RlZmlu ZSBESVJfTk9QIDQJLyogTk9QQUdFICovCisjZGVmaW5lIERJUl9JU08gNQkvKiBJU09EQVRFICov CisjZGVmaW5lIERJUl9EQVQgNgkvKiBFTkdMSVNIREFURSAqLworI2RlZmluZSBESVJfSERHIDcJ LyogSEVBRElOR1MgKi8KKyNkZWZpbmUgRElSX05PSCA4CS8qIE5PSEVBRElOR1MgKi8KKyNkZWZp bmUgRElSX1NSVCA5CS8qIFNPUlQgKi8KKyNkZWZpbmUgRElSX05PUyAxMCAgICAgIC8qIE5PU09S VCAqLworI2RlZmluZSBESVJfQVNDIDExCS8qIEFTQ0VORElORyAqLworI2RlZmluZSBESVJfRFND IDEyICAgICAgLyogREVTQ0VORElORyAqLworI2RlZmluZSBESVJfUkVDIDEzICAgICAgLyogUkVD VVJTSVZFICovCisjZGVmaW5lIERJUl9OT1IgMTQJLyogTk9SRUNVUklWRSAqLworI2RlZmluZSBE SVJfRE9UIDE1CS8qIERPVEZJTEVTICovCisjZGVmaW5lIERJUl9OT0QgMTYJLyogTk9ET1RGSUxF UyAqLworI2RlZmluZSBESVJfRElSIDE3CS8qIERJUkVDVE9SSUVTICovCisjZGVmaW5lIERJUl9G SUwgMTgJLyogRklMRVMgKi8KKyNkZWZpbmUgRElSX0FMTCAxOQkvKiBBTEwgKi8KKyNkZWZpbmUg RElSX05BTSAyMAkvKiBOQU1FUzogKi8KKyNkZWZpbmUgRElSX1RZUCAyMQkvKiBGSUxFVFlQRVMg Ki8KKyNkZWZpbmUgRElSX05PVCAyMgkvKiBOT0ZJTEVUWVBFUyAqLworI2RlZmluZSBESVJfQlVQ IDIzCS8qIEJBQ0tVUCAqLworI2RlZmluZSBESVJfTk9CIDI0CS8qIE5PQkFDS1VQICovCisjZGVm aW5lIERJUl9NU0cgMjUgICAgICAvKiBNRVNTQUdFICovCisjZGVmaW5lIERJUl9OT00gMjYgICAg ICAvKiBOT01FU1NBR0UgKi8KKyNkZWZpbmUgRElSX0FSUiAyNyAgICAgIC8qIEFSUkFZOiAqLwor I2RlZmluZSBESVJfTkFSIDI4ICAgICAgLyogTk9BUlJBWSAqLworI2RlZmluZSBESVJfRVhDIDI5 CS8qIEVYQ0VQVDogKi8KKyNkZWZpbmUgRElSX0xBUiAzMAkvKiBMQVJHRVItVEhBTjogKi8KKyNk ZWZpbmUgRElSX1NNQSAzMQkvKiBTTUFMTEVSLVRIQU46ICovCisjZGVmaW5lIERJUl9BRlQgMzIJ LyogQUZURVI6ICovCisjZGVmaW5lIERJUl9OQUYgMzMJLyogTk9ULUFGVEVSOiAqLworI2RlZmlu ZSBESVJfQkVGIDM0CS8qIEJFRk9SRTogKi8KKyNkZWZpbmUgRElSX05CRiAzNQkvKiBOT1QtQkVG T1JFOiAqLworI2RlZmluZSBESVJfU1VNIDM2CS8qIFNVTU1BUlkgKi8KKyNkZWZpbmUgRElSX0JJ TiAzNwkvKiBUWVBFIChvbmx5IHNob3cgYmluYXJ5IG9yIHRleHQpICovCisjZGVmaW5lIERJUl9M TksgMzgJLyogZm9sbG93IHN5bWxpbmtzICovCisjZGVmaW5lIERJUl9OTEsgMzkJLyogZG9uJ3Qg Zm9sbG93IHN5bWxpbmtzICovCisjZGVmaW5lIERJUl9PVVQgNDAJLyogT3V0cHV0IGZpbGUgZm9y IGxpc3RpbmcgKi8KKyNkZWZpbmUgRElSX1RPUCA0MQkvKiBUb3AgbiBsaW5lcyAqLworI2RlZmlu ZSBESVJfQ09VIDQyCS8qIENPVU5UOnZhciAqLworI2RlZmluZSBESVJfTk9MIDQzCS8qIE5PTElO S1MgKGRvbid0IHNob3cgc3ltbGlua3MgYXQgYXQgYWxsKSAqLworCisjZGVmaW5lIERJUlNfTk0g MCAgICAgICAvKiBTb3J0IGRpcmVjdG9yeSBieSBOQU1FICovCisjZGVmaW5lIERJUlNfRFQgMSAg ICAgICAvKiBTb3J0IGRpcmVjdG9yeSBieSBEQVRFICovCisjZGVmaW5lIERJUlNfU1ogMiAgICAg ICAvKiBTb3J0IGRpcmVjdG9yeSBieSBTSVpFICovCisKKyNkZWZpbmUgWFhESVMgICA5CS8qIERJ U0FCTEUgKi8KKyNkZWZpbmUgWFhFQ0ggIDEwCS8qIEVDSE8gKi8KKyNkZWZpbmUgWFhFWEkgIDEx CS8qIEVYSVQgKi8KKyNkZWZpbmUgWFhGSU4gIDEyCS8qIEZJTklTSCAqLworI2RlZmluZSBYWEdF VCAgMTMJLyogR0VUICovCisjZGVmaW5lIFhYSExQICAxNAkvKiBIRUxQICovCisjZGVmaW5lIFhY SU5QICAxNQkvKiBJTlBVVCAqLworI2RlZmluZSBYWExPQyAgMTYJLyogTE9DQUwgKi8KKyNkZWZp bmUgWFhMT0cgIDE3CS8qIExPRyAqLworI2RlZmluZSBYWE1BSSAgMTgJLyogTUFJTCAqLworI2Rl ZmluZSBYWE1PVSAgMTkJLyogKExvY2FsKSBNT1VOVCAqLworI2RlZmluZSBYWE1TRyAgMjAJLyog KExvY2FsKSBNRVNTQUdFICovCisjZGVmaW5lIFhYT1VUICAyMQkvKiBPVVRQVVQgKi8KKyNkZWZp bmUgWFhQQVUgIDIyCS8qIFBBVVNFICovCisjZGVmaW5lIFhYUFJJICAyMwkvKiAoTG9jYWwpIFBS SU5UICovCisjZGVmaW5lIFhYUVVJICAyNAkvKiBRVUlUICovCisjZGVmaW5lIFhYUkVDICAyNQkv KiBSRUNFSVZFICovCisjZGVmaW5lIFhYUkVNICAyNgkvKiBSRU1PVEUgKi8KKyNkZWZpbmUgWFhS RU4gIDI3CS8qIChMb2NhbCkgUkVOQU1FICovCisjZGVmaW5lIFhYU0VOICAyOAkvKiBTRU5EICov CisKKy8qIFNFTkQgc3dpdGNoZXMgKi8KKworI2RlZmluZSBTTkRfQklOICAwCS8qIEJpbmFyeSBt b2RlICovCisjZGVmaW5lIFNORF9ERUwgIDEJLyogRGVsZXRlIGFmdGVyICovCisjZGVmaW5lIFNO RF9FWEMgIDIJLyogRXhjZXB0ICovCisjZGVmaW5lIFNORF9MQVIgIDMJLyogTGFyZ2VyIHRoYW4g Ki8KKyNkZWZpbmUgU05EX01BSSAgNAkvKiBNYWlsICovCisjZGVmaW5lIFNORF9CRUYgIDUJLyog QmVmb3JlICovCisjZGVmaW5lIFNORF9BRlQgIDYJLyogQWZ0ZXIgKi8KKyNkZWZpbmUgU05EX1BS SSAgNwkvKiBQcmludCAqLworI2RlZmluZSBTTkRfU0hIICA4CS8qIFF1aWV0ICovCisjZGVmaW5l IFNORF9SRUMgIDkJLyogUmVjdXJzaXZlICovCisjZGVmaW5lIFNORF9TTUEgMTAJLyogU21hbGxl ciB0aGFuICovCisjZGVmaW5lIFNORF9TVEEgMTEJLyogU3RhcnRpbmctZnJvbSAqLworI2RlZmlu ZSBTTkRfVFhUIDEyCS8qIFRleHQgbW9kZSAqLworI2RlZmluZSBTTkRfQ01EIDEzCS8qIEZyb20g Y29tbWFuZCAocGlwZSkgICovCisjZGVmaW5lIFNORF9SRVMgMTQJLyogUmVzZW5kL1JlY292ZXIg Ki8KKyNkZWZpbmUgU05EX1BSTyAxNQkvKiBQcm90b2NvbCAqLworI2RlZmluZSBTTkRfQVNOIDE2 CS8qIEFzLW5hbWUgKi8KKyNkZWZpbmUgU05EX0lNRyAxNwkvKiBJbWFnZSAqLworI2RlZmluZSBT TkRfTEJMIDE4CS8qIExhYmVsZWQgKi8KKyNkZWZpbmUgU05EX05BRiAxOQkvKiBOb3QtQWZ0ZXIg Ki8KKyNkZWZpbmUgU05EX05CRSAyMAkvKiBOb3QtQmVmb3JlICovCisjZGVmaW5lIFNORF9GTFQg MjEJLyogRmlsdGVyICovCisjZGVmaW5lIFNORF9QVEggMjIJLyogUGF0aG5hbWVzICovCisjZGVm aW5lIFNORF9OQU0gMjMJLyogRmlsZW5hbWVzICovCisjZGVmaW5lIFNORF9NT1YgMjQgICAgICAv KiBNT1ZFIHRvIGFub3RoZXIgZGlyZWN0b3J5ICovCisjZGVmaW5lIFNORF9SRU4gMjUgICAgICAv KiBSRU5BTUUgYWZ0ZXIgc2VuZGluZyAqLworI2RlZmluZSBTTkRfQ0FMIDI2CS8qIENhbGlicmF0 ZSAqLworI2RlZmluZSBTTkRfRklMIDI3CS8qIEZpbGUgY29udGFpbmluZyBsaXN0IG9mIGZpbGVz IHRvIHNlbmQgKi8KKyNkZWZpbmUgU05EX05PQiAyOAkvKiBTa2lwIGJhY2t1cCBmaWxlcyAgKi8K KyNkZWZpbmUgU05EX0RPVCAyOQkvKiBJbmNsdWRlIGRvdC1maWxlcyAqLworI2RlZmluZSBTTkRf Tk9EIDMwCS8qIEV4Y2x1ZGUgZG90LWZpbGVzICovCisjZGVmaW5lIFNORF9BUlIgMzEJLyogU2Vu ZCBmcm9tIGFycmF5ICovCisjZGVmaW5lIFNORF9UWVAgMzIJLyogVFlQRSAob25seSBzZW5kIHRl eHQgKG9yIGJpbmFyeSkpICovCisjZGVmaW5lIFNORF9YUEEgMzMJLyogVFJBTlNQQVJFTlQgKi8K KyNkZWZpbmUgU05EX1BJUCAzNAkvKiBQSVBFUyAqLworI2RlZmluZSBTTkRfRVJSIDM1CS8qIEVS Uk9SICovCisjZGVmaW5lIFNORF9DU0wgMzYJLyogTG9jYWwgY2hhcmFjdGVyIHNldCAqLworI2Rl ZmluZSBTTkRfQ1NSIDM3CS8qIFJlbW90ZSBjaGFyYWN0ZXIgc2V0ICovCisjZGVmaW5lIFNORF9V UEQgMzgJLyogVXBkYXRlICovCisjZGVmaW5lIFNORF9DT0wgMzkJLyogQ29sbGlzaW9uICovCisj ZGVmaW5lIFNORF9OTUwgNDAJLyogTmFtZWxpc3QgKi8KKyNkZWZpbmUgU05EX1NSTiA0MQkvKiBT ZXJ2ZXItUmVuYW1lICovCisjZGVmaW5lIFNORF9MTksgNDIJLyogRm9sbG93IGxpbmtzICovCisj ZGVmaW5lIFNORF9OTEsgNDMJLyogRG9uJ3QgZm9sbG93IGxpbmtzICovCisjZGVmaW5lIFNORF9T SU0gNDQJLyogU2ltdWxhdGUgKi8KKyNkZWZpbmUgU05EX0RJRiA0NQkvKiBJZiBkYXRlcyBEaWZm ZXIgKi8KKyNkZWZpbmUgU05EX1BBVCA0NgkvKiBQYXR0ZXJuIHRvIHVzZSBsb2NhbGx5IHdoZW4g R0VUJ2luZyAqLworI2RlZmluZSBTTkRfTkxTIDQ3CS8qIChGVFAgb25seSkgTUdFVCBmb3JjZXMg TkxTVCAqLworI2RlZmluZSBTTkRfTUxTIDQ4CS8qIChGVFAgb25seSkgTUdFVCBmb3JjZXMgTUxT RCAqLworCisjZGVmaW5lIFNORF9NQVggNDgJLyogSGlnaGVzdCBTRU5EIHN3aXRjaCAqLworCisj ZGVmaW5lIFhYU0VSICAyOSAgIAkvKiBTRVJWRVIgKi8KKyNkZWZpbmUgWFhTRVQgIDMwCS8qIFNF VCAqLworI2RlZmluZSBYWFNIRSAgMzEJLyogQ29tbWFuZCBmb3IgU0hFTEwgKi8KKyNkZWZpbmUg WFhTSE8gIDMyCS8qIFNIT1cgKi8KKyNkZWZpbmUgWFhTUEEgIDMzCS8qIChMb2NhbCkgU1BBQ0Ug Ki8KKyNkZWZpbmUgWFhTVEEgIDM0CS8qIFNUQVRJU1RJQ1MgKi8KKyNkZWZpbmUgWFhTVUIgIDM1 CS8qIChMb2NhbCkgU1VCTUlUICovCisjZGVmaW5lIFhYVEFLICAzNgkvKiBUQUtFICovCisjZGVm aW5lIFhYVFJBICAzNwkvKiBUUkFOU01JVCAqLworI2RlZmluZSBYWFRZUCAgMzgJLyogKExvY2Fs KSBUWVBFICovCisjZGVmaW5lIFhYV0hPICAzOQkvKiAoTG9jYWwpIFdITyAqLworI2RlZmluZSBY WERJQUwgNDAJLyogKExvY2FsKSBESUFMICovCisjZGVmaW5lIFhYTE9HSSA0MQkvKiAoTG9jYWwp IFNDUklQVCAqLworI2RlZmluZSBYWENPTSAgNDIJLyogQ29tbWVudCAqLworI2RlZmluZSBYWEhB TiAgNDMgICAgICAgLyogSEFOR1VQICovCisjZGVmaW5lIFhYWExBICA0NAkvKiBUUkFOU0xBVEUg Ki8KKyNkZWZpbmUgWFhJRiAgIDQ1CS8qIElGICovCisjZGVmaW5lIFhYTEJMICA0NiAgICAgICAv KiBsYWJlbCAqLworI2RlZmluZSBYWEdPVE8gNDcJLyogR09UTyAqLworI2RlZmluZSBYWEVORCAg NDggICAgICAgLyogRU5EICovCisjZGVmaW5lIFhYU1RPICA0OSAgICAgICAvKiBTVE9QICovCisj ZGVmaW5lIFhYRE8gICA1MCAgICAgICAvKiBETyAqLworI2RlZmluZSBYWFBXRCAgNTEgICAgICAg LyogUFdEICovCisjZGVmaW5lIFhYVEVTICA1MiAgICAgICAvKiBURVNUICovCisjZGVmaW5lIFhY QVNLICA1MyAgICAgICAvKiBBU0sgKi8KKyNkZWZpbmUgWFhBU0tRIDU0ICAgICAgIC8qIEFTS1Eg Ki8KKyNkZWZpbmUgWFhBU1MgIDU1ICAgICAgIC8qIEFTU0lHTiAqLworI2RlZmluZSBYWFJFSSAg NTYgICAgICAgLyogUkVJTlBVVCAqLworI2RlZmluZSBYWElOQyAgNTcgICAgICAgLyogSU5DUkVN RU5UICovCisjZGVmaW5lIFhYREVDICA1OSAgICAgICAvKiBERUNSRU1FTlQgKi8KKyNkZWZpbmUg WFhFTFMgIDYwICAgICAgIC8qIEVMU0UgKi8KKyNkZWZpbmUgWFhFWEUgIDYxCS8qIEVYRUNVVEUg Ki8KKyNkZWZpbmUgWFhXQUkgIDYyCS8qIFdBSVQgKi8KKyNkZWZpbmUgWFhWRVIgIDYzICAgICAg IC8qIFZFUlNJT04gKi8KKyNkZWZpbmUgWFhFTkEgIDY0ICAgICAgIC8qIEVOQUJMRSAqLworI2Rl ZmluZSBYWFdSSSAgNjUgICAgICAgLyogV1JJVEUgKi8KKyNkZWZpbmUgWFhDTFMgIDY2ICAgICAg IC8qIENMUyAoY2xlYXIgc2NyZWVuKSAqLworI2RlZmluZSBYWFJFVCAgNjcJLyogUkVUVVJOICov CisjZGVmaW5lIFhYT1BFICA2OCAgICAgICAvKiBPUEVOICovCisjZGVmaW5lIFhYUkVBICA2OQkv KiBSRUFEICovCisjZGVmaW5lIFhYT04gICA3MCAgICAgICAvKiBPTiAqLworI2RlZmluZSBYWERD TCAgNzEgICAgICAgLyogREVDTEFSRSAqLworI2RlZmluZSBYWEJFRyAgNzIgICAgICAgLyogQkVH SU4gKG5vdCB1c2VkKSAqLworI2RlZmluZSBYWEZPUiAgNzIgICAgICAgLyogRk9SICovCisjZGVm aW5lIFhYV0hJICA3MyAgICAgICAvKiBXSElMRSAqLworI2RlZmluZSBYWElGWCAgNzQgICAgICAg LyogRXh0ZW5kZWQgSUYgKi8KKyNkZWZpbmUgWFhDTVMgIDc1ICAgICAgIC8qIFNFTkQgZnJvbSBj b21tYW5kIG91dHB1dCAobm90IHlldCkgKi8KKyNkZWZpbmUgWFhDTVIgIDc2ICAgICAgIC8qIFJF Q0VJVkUgdG8gYSBjb21tYW5kJ3MgaW5wdXQgKG5vdCB5ZXQpICovCisjZGVmaW5lIFhYQ01HICA3 NyAgICAgICAvKiBHRVQgdG8gYSBjb21tYW5kJ3MgaW5wdXQgKG5vdCB5ZXQpICovCisjZGVmaW5l IFhYU1VTICA3OCAgICAgICAvKiBTVVNQRU5EICovCisjZGVmaW5lIFhYRVJSICA3OSAgICAgICAv KiBFUlJPUiAqLworI2RlZmluZSBYWE1TRSAgODAgICAgICAgLyogTVNFTkQgKi8KKyNkZWZpbmUg WFhCVUcgIDgxICAgICAgIC8qIEJVRyAqLworI2RlZmluZSBYWFBBRCAgODIgICAgICAgLyogUEFE IChhcyBpbiBYLjI1IFBBRCkgQU5ZWDI1ICovCisjZGVmaW5lIFhYUkVEICA4MyAgICAgICAvKiBS RURJQUwgKi8KKyNkZWZpbmUgWFhHVEEgIDg0CS8qIF9nZXRhcmdzIChpbnZpc2libGUgaW50ZXJu YWwpICovCisjZGVmaW5lIFhYUFRBICA4NQkvKiBfcHV0YXJncyAoaW52aXNpYmxlIGludGVybmFs KSAqLworI2RlZmluZSBYWEdPSyAgODYgICAgICAgLyogR0VUT0sgLSBBc2sgZm9yIFlFUy9OTyAq LworI2RlZmluZSBYWFRFTCAgODcJLyogVEVMTkVUICovCisjZGVmaW5lIFhYQVNYICA4OAkvKiBf QVNTSUdOIChldmFsdWF0ZXMgdmFyIG5hbWUpICovCisjZGVmaW5lIFhYREZYICA4OQkvKiBfREVG SU5FIChldmFsdWF0ZXMgdmFyIG5hbWUpICovCisjZGVmaW5lIFhYUE5HICA5MAkvKiBQSU5HIChm b3IgVENQL0lQKSAqLworI2RlZmluZSBYWElOVCAgOTEgICAgICAgLyogSU5UUk9EVUNUSU9OICov CisjZGVmaW5lIFhYQ0hLICA5MgkvKiBDSEVDSyAoYSBmZWF0dXJlKSAqLworI2RlZmluZSBYWE1T TCAgOTMgICAgICAgLyogTVNMRUVQLCBNUEFVU0UgKG1pbGxpc2Vjb25kIHNsZWVwKSAqLworI2Rl ZmluZSBYWE5FVyAgOTQgICAgICAgLyogTkVXUyAqLworI2RlZmluZSBYWEFQQyAgOTUgICAgICAg LyogQVBDICovCisjZGVmaW5lIFhYRlVOICA5NiAgICAgICAvKiBSRURJUkVDVCAqLworI2RlZmlu ZSBYWFdSTCAgOTcJLyogV1JJVEUtTElORSAqLworI2RlZmluZSBYWFJFWFggOTgJLyogUmV4eCAq LworI2RlZmluZSBYWE1JTlAgMTAwCS8qIE1JTlBVVCAqLworI2RlZmluZSBYWFJTRU4gMTAxCS8q IFJFU0VORCAqLworI2RlZmluZSBYWFBTRU4gMTAyCS8qIFBTRU5EICovCisjZGVmaW5lIFhYR0VU QyAxMDMJLyogR0VUQyAqLworI2RlZmluZSBYWEVWQUwgMTA0CS8qIEVWQUxVQVRFICovCisjZGVm aW5lIFhYRldEICAxMDUJLyogRk9SV0FSRCAqLworI2RlZmluZSBYWFVQRCAgMTA2ICAgICAgLyog VVBEQVRFUyAqLworI2RlZmluZSBYWEJFRVAgMTA3ICAgICAgLyogQkVFUCAqLworI2RlZmluZSBY WE1PVkUgMTA4ICAgICAgLyogTU9WRSAqLworI2RlZmluZSBYWE1NT1ZFIDEwOSAgICAgLyogTU1P VkUgKi8KKyNkZWZpbmUgWFhSRUdFVCAxMTAgICAgIC8qIFJFR0VUICovCisjZGVmaW5lIFhYTE9P SyAgMTExCS8qIExPT0tVUCAqLworI2RlZmluZSBYWFZJRVcgIDExMiAgICAgLyogVklFVyAodGVy bWluYWwgYnVmZmVyKSAqLworI2RlZmluZSBYWEFOU1cgIDExMwkvKiBBTlNXRVIgKHRoZSBwaG9u ZSkgKi8KKyNkZWZpbmUgWFhQRElBICAxMTQJLyogUERJQUwgKHBhcnRpYWwgZGlhbCkgKi8KKyNk ZWZpbmUgWFhBU0MgICAxMTUJLyogQVNDSUkgLyBURVhUICovCisjZGVmaW5lIFhYQklOICAgMTE2 CS8qIEJJTkFSWSAqLworI2RlZmluZSBYWEZUUCAgIDExNwkvKiBGVFAgKi8KKyNkZWZpbmUgWFhN S0RJUiAxMTgJLyogTUtESVIgKi8KKyNkZWZpbmUgWFhSTURJUiAxMTkJLyogUk1ESVIgKi8KKyNk ZWZpbmUgWFhURUxPUCAxMjAJLyogVEVMT1BUICovCisjZGVmaW5lIFhYUkxPRyAgMTIxCS8qIFJM T0dJTiAqLworI2RlZmluZSBYWFVOREVGIDEyMgkvKiBVTkRFRklORSAqLworI2RlZmluZSBYWE5Q U0ggIDEyMwkvKiBOT1BVU0ggKi8KKyNkZWZpbmUgWFhBREQgICAxMjQJLyogQUREICovCisjZGVm aW5lIEFERF9TTkQgICAwICAgICAvKiBBREQgU0VORC1MSVNUICovCisjZGVmaW5lIEFERF9CSU4g ICAxICAgICAvKiBBREQgQklOQVJZLVBBVFRFUk5TICovCisjZGVmaW5lIEFERF9UWFQgICAyICAg ICAvKiBBREQgVEVYVC1QQVRURVJOUyAqLworI2RlZmluZSBYWExPQ0FMIDEyNQkvKiBMT0NBTCAq LworI2RlZmluZSBYWEtFUk1JIDEyNgkvKiBLRVJNSVQgKi8KKyNkZWZpbmUgWFhEQVRFICAxMjcJ LyogREFURSAqLworI2RlZmluZSBYWFNXSVQgIDEyOCAgICAgLyogU1dJVENIICovCisjZGVmaW5l IFhYWEZXRCAgMTI5CS8qIF9GT1JXQVJEICovCisjZGVmaW5lIFhYU0FWRSAgMTMwICAgICAvKiBT QVZFICovCisjZGVmaW5lIFhYWEVDSCAgMTMxICAgICAvKiBYRUNITyAqLworI2RlZmluZSBYWFJE QkwgIDEzMiAgICAgLyogUkVBREJMT0NLICovCisjZGVmaW5lIFhYV1JCTCAgMTMzICAgICAvKiBX UklURUJMT0NLICovCisjZGVmaW5lIFhYUkVUUiAgMTM0ICAgICAvKiBSRVRSSUVWRSAqLworI2Rl ZmluZSBYWEVJR0hUIDEzNSAgICAgLyogRUlHSFRCSVQgKi8KKyNkZWZpbmUgWFhFRElUICAxMzYJ LyogRURJVCAqLworI2RlZmluZSBYWENTRU4gIDEzNwkvKiBDU0VORCAqLworI2RlZmluZSBYWENS RUMgIDEzOAkvKiBDUkVDRUlWRSAqLworI2RlZmluZSBYWENRICAgIDEzOQkvKiBDUSAqLworI2Rl ZmluZSBYWFRBUEkgIDE0MCAgICAgLyogVEFQSSBhY3Rpb25zIHN1Y2ggYXMgZGlhbG9ncyAqLwor I2RlZmluZSBYWFJFUyAgIDE0MSAgICAgLyogUkVTRVQgKi8KKyNkZWZpbmUgWFhDR0VUICAxNDIg ICAgIC8qIENHRVQgKi8KKyNkZWZpbmUgWFhGVU5DICAxNDMgICAgIC8qIEZ1bmN0aW9uIChoZWxw LW9ubHkpICovCisjZGVmaW5lIFhYS1ZSQiAgMTQ0ICAgICAvKiBLdmVyYiAoaGVscC1vbmx5KSAq LworI2RlZmluZSBYWEJST1dTIDE0NQkvKiBCUk9XU0UgKi8KKyNkZWZpbmUgWFhNR0VUICAxNDYJ LyogTUdFVCAqLworI2RlZmluZSBYWEJBQ0sgIDE0NwkvKiBCQUNLICovCisjZGVmaW5lIFhYV0hF UkUgMTQ4CS8qIFdIRVJFICovCisjZGVmaW5lIFhYUkVETyAgMTQ5ICAgICAvKiBSRURPICovCisj ZGVmaW5lIFhYRVhDSCAgMTUwICAgICAvKiBFWENIQU5HRSAqLworI2RlZmluZSBYWFJFTVYgIDE1 MSAgICAgLyogUkVNT1ZFICovCisjZGVmaW5lIFhYQ0hSVCAgMTUyCS8qIENIUk9PVCAqLworI2Rl ZmluZSBYWE9QVFMgIDE1MwkvKiBPcHRpb25zIChoZWxwLW9ubHkpICovCisjZGVmaW5lIFhYQVVU SCAgMTU0CS8qIEFVVEhPUklaRSAqLworI2RlZmluZSBYWFBJUEUgIDE1NQkvKiBQSVBFICovCisj ZGVmaW5lIFhYU1NIICAgMTU2CS8qIFNTSCAqLworI2RlZmluZSBYWFRFUk0gIDE1NyAgICAgLyog VEVSTUlOQUwgKi8KKyNkZWZpbmUgWFhTVEFUVVMgMTU4ICAgIC8qIFNUQVRVUyAqLworI2RlZmlu ZSBYWENQUiAgIDE1OQkvKiBDT1BZUklHSFQgKi8KKyNkZWZpbmUgWFhBU1NFUiAxNjAJLyogQVNT RVJUICovCisjZGVmaW5lIFhYU1VDQyAgMTYxICAgICAvKiBTVUNDRUVEICovCisjZGVmaW5lIFhY RkFJTCAgMTYyICAgICAvKiBGQUlMICovCisjZGVmaW5lIFhYTE9HSU4gMTYzICAgICAvKiBMT0dJ TiAqLworI2RlZmluZSBYWExPR09VVCAxNjQgICAgLyogTE9HT1VUICovCisjZGVmaW5lIFhYTkxD TCAgMTY1ICAgICAvKiBOT0xPQ0FMICovCisjZGVmaW5lIFhYV0lMRCAgMTY2ICAgICAvKiBXSUxE Q0FSRFMgKGhlbHAtb25seSkgKi8KKworLyogT25lLXdvcmQgc3lub255bXMgZm9yIFJFTU9URSBj b21tYW5kcyAqLworCisjZGVmaW5lIFhYUkNQWSAgMTY3CS8qIFJFTU9URSBDT1BZICovCisjZGVm aW5lIFhYUkNXRCAgMTY4CS8qIENoYW5nZSBXb3JraW5nIERpcmVjdG9yeSAqLworI2RlZmluZSBY WFJERUwgIDE2OQkvKiBEZWxldGUgKi8KKyNkZWZpbmUgWFhSRElSICAxNzAJLyogRGlyZWN0b3J5 ICovCisjZGVmaW5lIFhYUkhMUCAgMTcxCS8qIEhlbHAgKi8KKyNkZWZpbmUgWFhSSE9TICAxNzIJ LyogSG9zdCAqLworI2RlZmluZSBYWFJLRVIgIDE3MwkvKiBLZXJtaXQgKi8KKyNkZWZpbmUgWFhS TVNHICAxNzQJLyogTWVzc2FnZSAqLworI2RlZmluZSBYWFJQUkkgIDE3NQkvKiBQcmludCAqLwor I2RlZmluZSBYWFJSRU4gIDE3NgkvKiBSZW5hbWUgKi8KKyNkZWZpbmUgWFhSU0VUICAxNzcJLyog U2V0ICovCisjZGVmaW5lIFhYUlNQQSAgMTc4CS8qIFNwYWNlICovCisjZGVmaW5lIFhYUlNVQiAg MTc5CS8qIFN1Ym1pdCAqLworI2RlZmluZSBYWFJUWVAgIDE4MAkvKiBUeXBlICovCisjZGVmaW5l IFhYUldITyAgMTgxCS8qIFdobyAqLworI2RlZmluZSBYWFJQV0QgIDE4MgkvKiBQcmludCBXb3Jr aW5nIERpcmVjdG9yeSAqLworI2RlZmluZSBYWFJRVUUgIDE4MwkvKiBRdWVyeSAqLworI2RlZmlu ZSBYWFJBU0cgIDE4NAkvKiBBc3NpZ24gKi8KKyNkZWZpbmUgWFhSTUtEICAxODUJLyogbWtkaXIg Ki8KKyNkZWZpbmUgWFhSUk1EICAxODYJLyogcm1kaXIgKi8KKyNkZWZpbmUgWFhSWElUICAxODcJ LyogRXhpdCAqLworCisvKiBUb3AtTGV2ZWwgY29tbWFuZHMsIGNvbnQnZC4uLiAqLworCisjZGVm aW5lIFhYR0VUSyAgMTg4CS8qIEdFVEtFWUNPREUgKi8KKyNkZWZpbmUgWFhNT1JFICAxODkJLyog TU9SRSAqLworI2RlZmluZSBYWFhPUFRTIDE5MAkvKiBFeHRlbmRlZC1PcHRpb25zIChoZWxwLW9u bHkpICovCisjZGVmaW5lIFhYSUtTRCAgMTkxCS8qIElLU0QgKi8KKyNkZWZpbmUgWFhSRVNFVCAx OTIJLyogUkVTRVQgKi8KKyNkZWZpbmUgWFhBU1NPQyAxOTMgICAgIC8qIEFTU09DSUFURSAqLwor CisjZGVmaW5lIEFTU09DX0ZDICAwICAgICAvKiBBU1NPQ0lBVEUgRklMRS1DSEFSQUNURVItU0VU ICovCisjZGVmaW5lIEFTU09DX1RDICAxICAgICAvKiBBU1NPQ0lBVEUgVFJBTlNGRVItQ0hBUkFD VEVSLVNFVCAqLworCisjZGVmaW5lIFhYU0hJRlQgMTk0CS8qIFNISUZUICovCisjZGVmaW5lIFhY TUFOICAgMTk1ICAgICAvKiBNQU5VQUwgKi8KKyNkZWZpbmUgWFhMUyAgICAxOTYgICAgIC8qIExT ICovCisjZGVmaW5lIFhYU09SVCAgMTk3CS8qIFNPUlQgKi8KKyNkZWZpbmUgWFhQVVJHRSAxOTgJ LyogUFVSR0UgKi8KKyNkZWZpbmUgWFhGQVNUICAxOTkJLyogRkFTVCAqLworI2RlZmluZSBYWENB VSAgIDIwMAkvKiBDQVVUSU9VUyAqLworI2RlZmluZSBYWFJPQiAgIDIwMQkvKiBST0JVU1QgKi8K KyNkZWZpbmUgWFhNQUNSTyAyMDIgICAgIC8qIEltbWVkaWF0ZSBtYWNybyAqLworI2RlZmluZSBY WFNDUk4gIDIwMwkvKiBTQ1JFRU4gKi8KKyNkZWZpbmUgWFhMTk9VVCAyMDQgICAgIC8qIExJTkVP VVQgKi8KKyNkZWZpbmUgWFhfSU5DUiAyMDUJLyogX0lOQ1JFTUVOVCAqLworI2RlZmluZSBYWF9E RUNSIDIwNgkvKiBfREVDUkVNRU5UICovCisjZGVmaW5lIFhYX0VWQUwgMjA3CS8qIF9FVkFMVUFU RSAqLworI2RlZmluZSBYWEFSUkFZIDIwOAkvKiBBUlJBWSAqLworI2RlZmluZSBYWFBBUlNFIDIw OQkvKiBQQVJTRSAqLworI2RlZmluZSBYWEhUVFAgIDIxMCAgICAgLyogSFRUUCAqLworCisjaWZk ZWYgQ0tDSEFOTkVMSU8KKyNkZWZpbmUgWFhGSUxFICAyMTEJLyogRklMRSAqLworI2RlZmluZSBY WEZfQ0wgIDIxMgkvKiBGQ0xPU0UgKi8KKyNkZWZpbmUgWFhGX0ZMICAyMTMJLyogRkZMVVNIICov CisjZGVmaW5lIFhYRl9MSSAgMjE0CS8qIEZMSVNUICovCisjZGVmaW5lIFhYRl9PUCAgMjE1CS8q IEZPUEVOICovCisjZGVmaW5lIFhYRl9SRSAgMjE2CS8qIEZSRUFEICovCisjZGVmaW5lIFhYRl9T RSAgMjE3CS8qIEZTRUVLICovCisjZGVmaW5lIFhYRl9TVCAgMjE4CS8qIEZTVEFUVVMgKi8KKyNk ZWZpbmUgWFhGX1dSICAyMTkJLyogRldSSVRFICovCisjZGVmaW5lIFhYRl9SVyAgMjIwCS8qIEZS RVdJTkQgKi8KKyNkZWZpbmUgWFhGX0NPICAyMjEJLyogRkNPVU5UICovCisjZW5kaWYgLyogQ0tD SEFOTkVMSU8gKi8KKworI2RlZmluZSBYWEVYRUMgIDIyMgkvKiBleGVjKCkgKi8KKyNkZWZpbmUg WFhUUkFDRSAyMjMJLyogVFJBQ0UgKi8KKyNkZWZpbmUgWFhOT1RBViAyMjQJLyogVGhlICJub3Qg YXZhaWxhYmxlIiBjb21tYW5kICovCisjZGVmaW5lIFhYUFRZICAgMjI1ICAgICAvKiBQVFkgKGxp a2UgUElQRSkgKi8KKyNkZWZpbmUgWFhDSE1PRCAyMjYgICAgIC8qIENITU9EICovCisjZGVmaW5l IFhYUFJPTVAgMjI3CS8qIFBST01QVCAqLworI2RlZmluZSBYWEZFQUNIIDIyOAkvKiBGT1JFQUNI ICovCisjZGVmaW5lIFhYR1JFUCAgMjI5ICAgICAvKiBHUkVQICovCisjZGVmaW5lIFhYU0VYUCAg MjMwCS8qIFMtRXhwcmVzc2lvbiAqLworI2RlZmluZSBYWFVORENMIDIzMQkvKiBVTkRFQ0xBUkUg Ki8KKyNkZWZpbmUgWFhWT0lEICAyMzIgICAgIC8qIFZPSUQgKi8KKyNkZWZpbmUgWFhQVVQgICAy MzMJLyogUFVUICovCisjZGVmaW5lIFhYVU5ERlggMjM0CS8qIF9VTkRFRklORSAqLworI2RlZmlu ZSBYWEhFQUQgIDIzNSAgICAgLyogSEVBRCAqLworI2RlZmluZSBYWFRBSUwgIDIzNiAgICAgLyog VEFJTCAqLworI2RlZmluZSBYWERFQlVHIDIzNyAgICAgLyogREVCVUcgKi8KKyNkZWZpbmUgWFhM RUFSTiAyMzggICAgIC8qIExFQVJOICovCisjZGVmaW5lIFhYUEFUICAgMjM5ICAgICAvKiBQQVRU RVJOUyAoaGVscCBvbmx5KSAqLworCisjZGVmaW5lIFhYQ0RVUCAgMjQwICAgICAvKiBDRFVQIChD aGFuZ2Ugd29ya2luZyBkaXJlY3RvcnkgdXB3YXJkcykgKi8KKyNkZWZpbmUgWFhSQ0RVUCAyNDEg ICAgIC8qIFJFTU9URSBDRFVQICovCisjZGVmaW5lIFhYQ0FUICAgMjQyCS8qIENBVCAoPSBUWVBF IC9OT1BBR0UpICovCisjZGVmaW5lIFhYRklSRVcgMjQzICAgICAvKiBGSVJFV0FMTCAoaGVscCBv bmx5KSAqLworCisjZGVmaW5lIFhYTENXRCAgMjQ0CS8qIExvY2FsIEMoVylEICovCisjZGVmaW5l IFhYTENEVSAgMjQ1CS8qIExvY2FsIENEVVAgKi8KKyNkZWZpbmUgWFhMUFdEICAyNDYJLyogTG9j YWwgUFdEICovCisjZGVmaW5lIFhYTERFTCAgMjQ3CS8qIExvY2FsIERFTEVURSAqLworI2RlZmlu ZSBYWExESVIgIDI0OAkvKiBMb2NhbCBESVJFQ1RPUlkgKi8KKyNkZWZpbmUgWFhMUkVOICAyNDkJ LyogTG9jYWwgUkVOQU1FICovCisjZGVmaW5lIFhYTE1LRCAgMjUwCS8qIExvY2FsIE1LRElSICov CisjZGVmaW5lIFhYTFJNRCAgMjUxCS8qIExvY2FsIFJNRElSICovCisjZGVmaW5lIFhYVVNFUiAg MjUyCS8qIChGVFApIFVTRVIgKi8KKyNkZWZpbmUgWFhBQ0NUICAyNTMJLyogKEZUUCkgQUNDT1VO VCAqLworI2RlZmluZSBYWExJTksgIDI1NCAgICAgLyogTElOSyBzb3VyY2UgZGVzdGluYXRpb24g Ki8KKyNkZWZpbmUgWFhPUklFICAyNTUJLyogT1JJRU5UKEFUSU9OKSAqLworI2RlZmluZSBYWERJ QUxFUiAyNTYgICAgLyogRElBTEVSICovCisjZGVmaW5lIFhYS0NEICAgMjU3ICAgICAvKiBLQ0Qg Ki8KKyNkZWZpbmUgWFhTSVRFICAyNTggICAgIC8qIChGVFApIFNJVEUgKi8KKyNkZWZpbmUgWFhQ QVNWICAyNTkgICAgIC8qIChGVFApIFBBU1NJVkUgKi8KKyNkZWZpbmUgWFhDT05UICAyNjAJLyog Q09OVElOVUUgKi8KKyNkZWZpbmUgWFhOU0NSICAyNjEJLyogTk9TQ1JPTEwgKi8KKyNkZWZpbmUg WFhTRlRQICAyNjIJLyogU0ZUUCAqLworI2RlZmluZSBYWFNLUk0gIDI2MwkvKiBTS0VSTUlUICov CisjZGVmaW5lIFhYV0RJUiAgMjY0CS8qIFdESVJFQ1RPUlkgKi8KKyNkZWZpbmUgWFhIRElSICAy NjUJLyogSERJUkVDVE9SWSAqLworI2RlZmluZSBYWFRPVUMgIDI2NgkvKiBUT1VDSCAqLworI2Rl ZmluZSBYWExPQ1UgIDI2NwkvKiBMT0NVUyAoZm9yIEhFTFApICovCisjZGVmaW5lIFhYUFVURSAg MjY4ICAgICAvKiBQVVRFTlYgKi8KKyNkZWZpbmUgWFhYTVNHICAyNjkgICAgIC8qIFhNRVNTQUdF ICovCisKKy8qIEVuZCBvZiBUb3AtTGV2ZWwgQ29tbWFuZHMgKi8KKworI2RlZmluZSBTQ05fQ0xS ICAgMAkJCS8qIFNDUkVFTiBDTEVBUiAqLworI2RlZmluZSBTQ05fQ0xFICAgMQkJCS8qIFNDUkVF TiBDTEVPTCAqLworI2RlZmluZSBTQ05fTU9WICAgMgkJCS8qIFNDUkVFTiBNT1ZFICovCisKKy8q IEFSUkFZIG9wZXJhdGlvbnMgKi8KKworI2RlZmluZSBBUlJfRENMICAgMAkJCS8qIERlY2xhcmUg Ki8KKyNkZWZpbmUgQVJSX0NQWSAgIDEJCQkvKiBDb3B5ICovCisjZGVmaW5lIEFSUl9SU1ogICAy CQkJLyogUmVzaXplICovCisjZGVmaW5lIEFSUl9TUlQgICAzCQkJLyogU29ydCAqLworI2RlZmlu ZSBBUlJfQ0xSICAgNAkJCS8qIENsZWFyICovCisjZGVmaW5lIEFSUl9TRUEgICA1CQkJLyogU2Vh cmNoICovCisjZGVmaW5lIEFSUl9EU1QgICA2CQkJLyogRGVzdHJveSAqLworI2RlZmluZSBBUlJf U0hPICAgNwkJCS8qIFNob3cgKi8KKyNkZWZpbmUgQVJSX1NFVCAgIDgJCQkvKiBTZXQgKi8KKyNk ZWZpbmUgQVJSX0VRVSAgIDkJCQkvKiBFcXVhdGUgKi8KKworLyogU09SVCBvcHRpb25zICovCisK KyNkZWZpbmUgU1JUX0NBUyAgIDAJCQkvKiAvQ0FTRSAqLworI2RlZmluZSBTUlRfS0VZICAgMQkJ CS8qIC9LRVk6biAqLworI2RlZmluZSBTUlRfUkVWICAgMgkJCS8qIC9SRVZFUlNFICovCisjZGVm aW5lIFNSVF9STkcgICAzCQkJLyogL1JBTkdFOm46bSAqLworI2RlZmluZSBTUlRfTlVNICAgNAkJ CS8qIC9OVU1FUklDICovCisKKy8qIFBVUkdFIGNvbW1hbmQgb3B0aW9ucyAqLworCisjZGVmaW5l IFBVX0tFRVAgMAkJCS8qIC9LRUVQOiAqLworI2RlZmluZSBQVV9MSVNUIDEJCQkvKiAvTElTVCAq LworI2RlZmluZSBQVV9QQUdFIDIJCQkvKiAvUEFHRSAqLworI2RlZmluZSBQVV9OT1BBIDMJCQkv KiAvTk9QQUdFICovCisjZGVmaW5lIFBVX05PREUgNAkJCS8qIC9TSU1VTEFURSAqLworI2RlZmlu ZSBQVV9ERUxFIDUJCQkvKiAvREVMRVRFICovCisjZGVmaW5lIFBVX05PTEkgNgkJCS8qIC9OT0xJ U1QgKi8KKyNkZWZpbmUgUFVfUVVJRSA3CQkJLyogL1FVSUVUICg9IE5PTElTVCkgKi8KKyNkZWZp bmUgUFVfVkVSQiA4CQkJLyogL1ZFUkJPU0UgKD0gTElTVCkgKi8KKyNkZWZpbmUgUFVfQVNLICA5 CQkJLyogL0FTSyAqLworI2RlZmluZSBQVV9OQVNLIDEwCQkJLyogL05PQVNLICovCisjZGVmaW5l IFBVX0xBUiAgMTEJCQkvKiAvTEFSR0VSLVRIQU46ICovCisjZGVmaW5lIFBVX1NNQSAgMTIJCQkv KiAvU01BTExFUi1USEFOOiAqLworI2RlZmluZSBQVV9BRlQgIDEzCQkJLyogL0FGVEVSOiAqLwor I2RlZmluZSBQVV9OQUYgIDE0CQkJLyogL05PVC1BRlRFUjogKi8KKyNkZWZpbmUgUFVfQkVGICAx NQkJCS8qIC9CRUZPUkU6ICovCisjZGVmaW5lIFBVX05CRiAgMTYJCQkvKiAvTk9ULUJFRk9SRTog Ki8KKyNkZWZpbmUgUFVfRVhDICAxNwkJCS8qIC9FWENFUFQ6ICovCisjZGVmaW5lIFBVX1JFQ1Ug MTgJCQkvKiAvUkVDVVJTSVZFICovCisjZGVmaW5lIFBVX0RPVCAgMTkJCQkvKiAvRE9URklMRVMg Ki8KKyNkZWZpbmUgUFVfTk9ET1QgMjAJCQkvKiAvTk9ET1RGSUxFUyAqLworI2RlZmluZSBQVV9I REcgIDIxCQkJLyogL0hFQURJTkcgKi8KKyNkZWZpbmUgUFVfTk9IICAyMgkJCS8qIC9OT0hFQURJ TkcgKi8KKworLyogREVMRVRFIGNvbW1hbmQgb3B0aW9ucyAqLworCisjZGVmaW5lIERFTF9OT0wg MAkJCS8qIC9OT0xJU1QgKi8KKyNkZWZpbmUgREVMX0xJUyAxCQkJLyogL0xJU1QgKi8KKyNkZWZp bmUgREVMX0hERyAyCQkJLyogL0hFQURJTkdTICovCisjZGVmaW5lIERFTF9OT0ggMgkJCS8qIC9O T0hFQURJTkdTICovCisjZGVmaW5lIERFTF9CRUYgMwkJCS8qIC9CRUZPUkU6ICovCisjZGVmaW5l IERFTF9OQkYgNAkJCS8qIC9OT1QtQkVGT1JFOiAqLworI2RlZmluZSBERUxfQUZUIDUJCQkvKiAv QUZURVI6ICovCisjZGVmaW5lIERFTF9OQUYgNgkJCS8qIC9OT1QtQUZURVI6ICovCisjZGVmaW5l IERFTF9ET1QgNwkJCS8qIC9ET1RGSUxFUyAqLworI2RlZmluZSBERUxfTk9EIDgJCQkvKiAvTk9E T1RGSUxFUyAqLworI2RlZmluZSBERUxfRVhDIDkJCQkvKiAvRVhDRVBUOiovCisjZGVmaW5lIERF TF9QQUcgMTAJCQkvKiAvUEFHRSAqLworI2RlZmluZSBERUxfTk9QIDExCQkJLyogL05PUEFHRSAq LworI2RlZmluZSBERUxfUkVDIDEyCQkJLyogL1JFQ1VSU0lWRSAqLworI2RlZmluZSBERUxfTk9S IDEzCQkJLyogL05PUkVDVVJTSVZFICovCisjZGVmaW5lIERFTF9WUkIgMTQJCQkvKiAvVkVSQk9T RSAqLworI2RlZmluZSBERUxfUVVJIDE1CQkJLyogL1FVSUVUICovCisjZGVmaW5lIERFTF9TTUEg MTYJCQkvKiAvU01BTExFUi1USEFOOiAqLworI2RlZmluZSBERUxfTEFSIDE3CQkJLyogL0xBUkdF Ui1USEFOOiAqLworI2RlZmluZSBERUxfU0lNIDE4CQkJLyogL1NJTVVMQVRFICovCisjZGVmaW5l IERFTF9BU0sgMTkJCQkvKiAvQVNLICovCisjZGVmaW5lIERFTF9OQVMgMjAJCQkvKiAvTk9BU0sg Ki8KKyNkZWZpbmUgREVMX1NVTSAyMQkJCS8qIC9TVU1NQVJZICovCisjZGVmaW5lIERFTF9ESVIg MjIJCQkvKiAvRElSRUNUT1JZICovCisjZGVmaW5lIERFTF9BTEwgMjMJCQkvKiAvQUxMICovCisj ZGVmaW5lIERFTF9UWVAgMjQJCQkvKiAvVFlQRTogKi8KKyNkZWZpbmUgREVMX0xOSyAyNQkJCS8q IC9GT0xMT1dMSU5LUyAqLworI2RlZmluZSBERUxfTkxLIDI2CQkJLyogL05PRk9MTE9XTElOS1Mg Ki8KKworLyogUkVOQU1FIHN3aXRjaGVzIHRoYXQgY2FuIGJlIHVzZWQgaW4gdGhlIHNhbWUgdGFi bGUgYXMgdGhlIERFTCBzd2l0Y2hlcyAqLworCisjZGVmaW5lIFJFTl9MT1cgMTAwCQkJLyogQ29u dmVydCB0byBsb3dlcmNhc2UgKi8KKyNkZWZpbmUgUkVOX1VQUCAxMDEJCQkvKiBDb252ZXJ0byB0 byB1cHBlcmNhc2UgKi8KKyNkZWZpbmUgUkVOX1JQTCAxMDIJCQkvKiBTdHJpbmcgcmVwbGFjZW1l bnQgKi8KKyNkZWZpbmUgUkVOX09WVyAxMDMJCQkvKiBPdmVyd3JpdGUgZmlsZSB3aXRoIHNhbWUg bmFtZSAqLworI2RlZmluZSBSRU5fWExBIDEwNAkJCS8qIFRyYW5zbGF0ZSBjaGFyYWN0ZXIgc2V0 cyAqLworI2RlZmluZSBSRU5fU1BBIDEwNQkJCS8qIEZpeCBzcGFjZXMgKi8KKworLyogRklMRSBv cGVyYXRpb25zICovCisKKyNkZWZpbmUgRklMX09QTiAgMAkJCS8qIE9QRU4gKi8KKyNkZWZpbmUg RklMX0NMUyAgMQkJCS8qIENMT1NFICovCisjZGVmaW5lIEZJTF9SRUEgIDIJCQkvKiBSRUFEICov CisjZGVmaW5lIEZJTF9HRVQgIDMJCQkvKiBHRVQgKi8KKyNkZWZpbmUgRklMX1dSSSAgNAkJCS8q IFdSSVRFICovCisjZGVmaW5lIEZJTF9SRVcgIDUJCQkvKiBSRVdJTkQgKi8KKyNkZWZpbmUgRklM X0xJUyAgNgkJCS8qIExJU1QgKi8KKyNkZWZpbmUgRklMX0ZMVSAgNwkJCS8qIEZMVVNIICovCisj ZGVmaW5lIEZJTF9TRUUgIDgJCQkvKiBTRUVLICovCisjZGVmaW5lIEZJTF9TVEEgIDkJCQkvKiBT VEFUVVMgKi8KKyNkZWZpbmUgRklMX0NPVSAxMAkJCS8qIENPVU5UICovCisKKy8qIE9QRU4gLyBD TE9TRSBpdGVtcyAqLworCisjZGVmaW5lIE9QTl9GSV9SIDEJCQkvKiBGSUxFIFJFQUQgKi8KKyNk ZWZpbmUgT1BOX0ZJX1cgMgkJCS8qIEZJTEUgV1JJVEUgKi8KKyNkZWZpbmUgT1BOX0ZJX0EgMwkJ CS8qIEZJTEUgQVBQRU5EICovCisjZGVmaW5lIE9QTl9QSV9SIDQJCQkvKiBQSVBFIFJFQUQgKi8K KyNkZWZpbmUgT1BOX1BJX1cgNQkJCS8qIFBJUEUgV1JJVEUgKi8KKyNkZWZpbmUgT1BOX1BUX1Ig NgkJCS8qIFBUWSBSRUFEICovCisjZGVmaW5lIE9QTl9QVF9XIDcJCQkvKiBQVFkgV1JJVEUgKi8K KyNkZWZpbmUgT1BOX1NFUgkgOAkJCS8qIFBPUlQgb3IgTElORSAqLworI2RlZmluZSBPUE5fTkVU CSA5CQkJLyogSE9TVCAqLworCisvKiBLRVJCRVJPUyBjb21tYW5kIHN3aXRjaGVzICovCisKKyNk ZWZpbmUgS1JCX1NfVkUgIDAJLyogL1ZFUlNJT04gKi8KKyNkZWZpbmUgS1JCX1NfQ0EgIDEJLyog L0NBQ0hFOiAqLworI2RlZmluZSBLUkJfU19NQVggMQkvKiBIaWdoZXN0IEtFUkJFUk9TIHN3aXRj aCBudW1iZXIgKi8KKworI2lmZGVmIENLX0tFUkJFUk9TCisKKy8qIEtFUkJFUk9TIGFjdGlvbnMg Ki8KKworI2RlZmluZSBLUkJfQV9JTiAgMAkvKiBJTklUSUFMSVpFICovCisjZGVmaW5lIEtSQl9B X0RFICAxCS8qIERFU1RST1kgKi8KKyNkZWZpbmUgS1JCX0FfTEMgIDIJLyogTElTVC1DUkVERU5U SUFMUyAqLworCisvKiBLRVJCRVJPUyBJTklUIHN3aXRjaGVzICovCisKKyNkZWZpbmUgS1JCX0lf RlcgIDAJLyogL0ZPUldBUkRBQkxFICovCisjZGVmaW5lIEtSQl9JX0xGICAxCS8qIC9MSUZFVElN RTogKi8KKyNkZWZpbmUgS1JCX0lfUEQgIDIJLyogL1BPU1REQVRFOiAqLworI2RlZmluZSBLUkJf SV9QUiAgMwkvKiAvUFJPWElBQkxFICovCisjZGVmaW5lIEtSQl9JX1JCICA0CS8qIC9SRU5FV0FC TEU6ICovCisjZGVmaW5lIEtSQl9JX1JOICA1CS8qIC9SRU5FVyAqLworI2RlZmluZSBLUkJfSV9T UiAgNgkvKiAvU0VSVklDRTogKi8KKyNkZWZpbmUgS1JCX0lfVkEgIDcJLyogL1ZBTElEQVRFICov CisjZGVmaW5lIEtSQl9JX1JMICA4ICAgICAvKiAvUkVBTE06ICovCisjZGVmaW5lIEtSQl9JX0lO ICA5ICAgICAvKiAvSU5TVEFOQ0U6ICovCisjZGVmaW5lIEtSQl9JX1BXICAxMCAgICAvKiAvUEFT U1dPUkQ6ICovCisjZGVmaW5lIEtSQl9JX1BBICAxMSAgICAvKiAvUFJFQVVUSCAqLworI2RlZmlu ZSBLUkJfSV9WQiAgMTIgICAgLyogL1ZFUkJPU0UgKi8KKyNkZWZpbmUgS1JCX0lfQlIgIDEzICAg IC8qIC9CUklFRiAqLworI2RlZmluZSBLUkJfSV9ORlcgMTQJLyogL05PVC1GT1JXQVJEQUJMRSAq LworI2RlZmluZSBLUkJfSV9OUFIgMTUJLyogL05PVC1QUk9YSUFCTEUgKi8KKyNkZWZpbmUgS1JC X0lfTlBBIDE2ICAgIC8qIC9OT1QtUFJFQVVUSCAqLworI2RlZmluZSBLUkJfSV9LNCAgMTcgICAg LyogL0tFUkJFUk9TNCAgICAoc2hvdWxkIGs1IGdldCBrNCBhcyB3ZWxsKSAqLworI2RlZmluZSBL UkJfSV9OSzQgMTggICAgLyogL05PLUtFUkJFUk9TNCAqLworI2RlZmluZSBLUkJfSV9QT1AgMTkg ICAgLyogL1BPUFVQICovCisjZGVmaW5lIEtSQl9JX0FEUiAyMCAgICAvKiAvQUREUkVTU0VTOiAq LworI2RlZmluZSBLUkJfSV9OQUQgMjEgICAgLyogL05PLUFERFJFU1NFUyAqLworI2RlZmluZSBL UkJfSV9NQVggMjEgICAgLyogSGlnaGVzdCBLRVJCRVJPUyBJTklUIHN3aXRjaCBudW1iZXIgKi8K KworI2VuZGlmIC8qIENLX0tFUkJFUk9TICovCisKKy8qIFNFVCBwYXJhbWV0ZXJzICovCisKKyNk ZWZpbmUgWFlCUkVBICAwCS8qIEJSRUFLIHNpbXVsYXRpb24gKi8KKyNkZWZpbmUgWFlDSEtUICAx CS8qIEJsb2NrIGNoZWNrIHR5cGUgKi8KKyNkZWZpbmUgWFlERUJVICAyCS8qIERlYnVnZ2luZyAq LworI2RlZmluZSBYWURFTEEgIDMJLyogRGVsYXkgKi8KKyNkZWZpbmUgWFlEVVBMICA0CS8qIER1 cGxleCAqLworI2RlZmluZSBYWUVPTCAgIDUJLyogRW5kLU9mLUxpbmUgKHBhY2tldCB0ZXJtaW5h dG9yKSAqLworI2RlZmluZSBYWUVTQyAgIDYJLyogRXNjYXBlIGNoYXJhY3RlciAqLworI2RlZmlu ZSBYWUZJTEUgIDcJLyogRmlsZSBQYXJhbWV0ZXJzIChzZWUgY2tja2VyLmggZm9yIHZhbHVlcykg Ki8KKwkJCS8qICh0aGlzIHNwYWNlIGF2YWlsYWJsZSkgKi8KKyNkZWZpbmUgWFlGTE9XICA5CS8q IEZsb3cgQ29udHJvbCAqLworI2RlZmluZSBYWUhBTkQgMTAJLyogSGFuZHNoYWtlICovCisjZGVm aW5lIFhZSUZEICAxMQkvKiBJbmNvbXBsZXRlIEZpbGUgRGlzcG9zaXRpb24gKi8KKyNkZWZpbmUg WFlJTUFHIDEyCS8qICJJbWFnZSBNb2RlIiAqLworI2RlZmluZSBYWUlOUFUgMTMJLyogSU5QVVQg Y29tbWFuZCBwYXJhbWV0ZXJzICovCisjZGVmaW5lIFhZTEVOICAxNAkvKiBNYXhpbXVtIHBhY2tl dCBsZW5ndGggdG8gc2VuZCAqLworI2RlZmluZSBYWUxJTkUgMTUJLyogQ29tbXVuaWNhdGlvbiBs aW5lIHRvIHVzZSAqLworCisvKiBTRVQgTElORSAvIFNFVCBIT1NUIGNvbW1hbmQgc3dpdGNoZXMg Ki8KKworI2RlZmluZSBTTF9DTlggICAwCS8qIC9DT05ORUNUICovCisjZGVmaW5lIFNMX1NSViAg IDEJLyogL1NFUlZFUiAqLworI2RlZmluZSBTTF9TSFIgICAyCS8qIC9TSEFSRSAqLworI2RlZmlu ZSBTTF9OU0ggICAzCS8qIC9OT1NIQVJFICovCisjZGVmaW5lIFNMX0JFRSAgIDQJLyogL0JFRVAg Ki8KKyNkZWZpbmUgU0xfQU5TICAgNQkvKiAvQU5TV0VSICovCisjZGVmaW5lIFNMX0RJQSAgIDYJ LyogL0RJQUw6eHh4ICovCisjZGVmaW5lIFNMX1NQRCAgIDcJLyogL1NQRUVEOnh4eCAqLworI2Rl ZmluZSBTTF9GTE8gICA4CS8qIC9GTE9XOnh4eCAqLworI2RlZmluZSBTTF9UTU8gICA5CS8qIC9U SU1FT1VUOnh4eCAqLworI2RlZmluZSBTTF9DTUQgIDEwCS8qIC9DT01NQU5EICovCisjZGVmaW5l IFNMX1BTVyAgMTEJLyogL1BBU1NXT1JEOnh4eCAqLworI2RlZmluZSBTTF9JS1MgIDEyICAgICAg LyogL0tFUk1JVC1TRVJWSUNFICovCisjZGVmaW5lIFNMX05FVCAgMTMgICAgICAvKiAvTkVUV09S Sy1UWVBFOnh4eCAqLworI2RlZmluZSBTTF9FTkMgIDE0ICAgICAgLyogL0VOQ1JZUFQ6dHlwZSAo dGVsbmV0KSAvRU5DUllQVCAocmxvZ2luKSAqLworI2RlZmluZSBTTF9LUkI0IDE1ICAgICAgLyog L0tFUkJFUk9TIDQgKHJsb2dpbi90ZWxuZXQpICovCisjZGVmaW5lIFNMX0tSQjUgMTYgICAgICAv KiAvS0VSQkVST1MgNSAocmxvZ2luL3RlbG5ldCkgKi8KKyNkZWZpbmUgU0xfU1JQICAxNyAgICAg IC8qIC9TUlAgKHRlbG5ldCkgKi8KKyNkZWZpbmUgU0xfTlRMTSAxOCAgICAgIC8qIC9OVExNICh0 ZWxuZXQpICovCisjZGVmaW5lIFNMX1NTTCAgMTkgICAgICAvKiAvU1NMICh0ZWxuZXQpICovCisj ZGVmaW5lIFNMX1VJRCAgMjAgICAgICAvKiAvVVNFUklEOnh4eHggKi8KKyNkZWZpbmUgU0xfQVVU SCAyMSAgICAgIC8qIC9BVVRIOnR5cGUgKi8KKyNkZWZpbmUgU0xfV0FJVCAyMgkvKiAvV0FJVCAq LworI2RlZmluZSBTTF9OT1dBSVQgMjMJLyogL05PV0FJVCAqLworI2RlZmluZSBTTF9QVFkgIDI0 ICAgICAgLyogL1BUWSAqLworCisjZGVmaW5lIFhZTE9HICAxNgkvKiBMb2cgZmlsZSAqLworI2Rl ZmluZSBYWU1BUksgMTcJLyogU3RhcnQgb2YgUGFja2V0IG1hcmsgKi8KKyNkZWZpbmUgWFlOUEFE IDE4CS8qIEFtb3VudCBvZiBwYWRkaW5nICovCisjZGVmaW5lIFhZUEFEQyAxOQkvKiBQYWQgY2hh cmFjdGVyICovCisjZGVmaW5lIFhZUEFSSSAyMAkvKiBQYXJpdHkgKi8KKyNkZWZpbmUgWFlQQVVT IDIxCS8qIEludGVycGFja2V0IHBhdXNlICovCisjZGVmaW5lIFhZUFJPTSAyMgkvKiBQcm9ncmFt IHByb21wdCBzdHJpbmcgKi8KKyNkZWZpbmUgWFlRQklOIDIzCS8qIDh0aC1iaXQgcHJlZml4ICov CisjZGVmaW5lIFhZUUNUTCAyNAkvKiBDb250cm9sIGNoYXJhY3RlciBwcmVmaXggKi8KKyNkZWZp bmUgWFlSRVBUIDI1CS8qIFJlcGVhdCBjb3VudCBwcmVmaXggKi8KKyNkZWZpbmUgWFlSRVRSIDI2 CS8qIFJldHJ5IGxpbWl0ICovCisjZGVmaW5lIFhZU1BFRSAyNwkvKiBMaW5lIHNwZWVkIChiYXVk IHJhdGUpICovCisjZGVmaW5lIFhZVEFDSCAyOAkvKiBDaGFyYWN0ZXIgdG8gYmUgZG91YmxlZCAq LworI2RlZmluZSBYWVRJTU8gMjkJLyogVGltZW91dCBpbnRlcnZhbCAqLworI2RlZmluZSBYWU1P RE0gMzAJLyogTW9kZW0gLSBhbHNvIHNlZSBYWURJQUwgKi8KKworI2RlZmluZSBYWVNFTkQgMzEJ LyogU0VUIFNFTkQgcGFyYW1ldGVycyAqLworI2RlZmluZSBYWVJFQ1YgMzIgICAJLyogU0VUIFJF Q0VJVkUgcGFyYW1ldGVycyAqLworI2RlZmluZSBYWVRFUk0gMzMJLyogU0VUIFRFUk1JTkFMIHBh cmFtZXRlcnMgKi8KKyNkZWZpbmUgICBYWVRCWVQgMCAgICAgIC8qICBUZXJtaW5hbCBCeXRlc2l6 ZSAoNyBvciA4KSAqLworI2RlZmluZSAgIFhZVFRZUCAxICAgICAgLyogIFRlcm1pbmFsIGVtdWxh dGlvbiBUeXBlICovCisjZGVmaW5lICAgICBUVF9OT05FICAwCS8qICAgIE5PTkUsIG5vIGVtdWxh dGlvbiAqLworI2lmZGVmIE9TMgorLyoKKyAgTm90ZSwgdGhlIHN5bWJvbHMgZm9yIFZUIGFuZCBW VC1saWtlIHRlcm1pbmFscyBzaG91bGQgYmUgaW4gYXNjZW5kaW5nCisgIG51bWVyaWNhbCBvcmRl ciwgc28gdGhhdCBoaWdoZXIgb25lcyBjYW4gYmUgdHJlYXRlZCBhcyBzdXBlcnNldHMgb2YKKyAg bG93ZXIgb25lcyB3aXRoIHJlc3BlY3QgdG8gY2FwYWJpbGl0aWVzLgorCisgIFRoaXMgaXMgbm8g bG9uZ2VyIHRoZSBjYXNlIHdpdGggdGhlIGluZmx1eCBvZiBuZXcgdGVybWluYWwgdHlwZXMuCisg IEp1c3QgbWFrZSBzdXJlIHRoYXQgdGhlIElTWFhYWFgoKSBtYWNyb3MgaW5jbHVkZSB0aGUgcHJv cGVyIGZhbWlseQorICBncm91cHMuCisqLworI2RlZmluZSAgICAgVFRfREcyMDAgICAgMSAJLyog ICAgRGF0YSBHZW5lcmFsIDIwMCAqLworI2RlZmluZSAgICAgVFRfREcyMTAgICAgMiAgCS8qICAg IERhdGEgR2VuZXJhbCAyMTAgKi8KKyNkZWZpbmUgICAgIFRUX0RHMjE3ICAgIDMgICAJLyogICAg RGF0YSBHZW5lcmFsIDIxNyAqLworI2RlZmluZSAgICAgVFRfSFAyNjIxICAgNCAJLyogICAgSGV3 bGV0dC1QYWNrYXJkIDI2MjFBICovCisjZGVmaW5lICAgICBUVF9IUFRFUk0gICA1CS8qICAgIEhl d2xldHQtUGFja2FyZCBDb25zb2xlICovCisjZGVmaW5lICAgICBUVF9IWkwxNTAwICA2IAkvKiAg ICBIYXplbHRpbmUgMTUwMCAqLworI2RlZmluZSAgICAgVFRfVkM0NDA0ICAgNyAJLyogICAgVm9s a2VyIENyYWlnIFZDNDQwNC80MDQgKi8KKyNkZWZpbmUgICAgIFRUX1dZMzAgICAgIDgJLyogICAg V1lTRS0zMC8zMCsgKi8KKyNkZWZpbmUgICAgIFRUX1dZNTAgICAgIDkgCS8qICAgIFdZU0UtNTAv NTArICovCisjZGVmaW5lICAgICBUVF9XWTYwICAgIDEwICAgICAgIC8qICAgIFdZU0UtNjAJICov CisjZGVmaW5lICAgICBUVF9XWTE2MCAgIDExICAgICAgIC8qICAgIFdZU0UtMTYwICAgKi8KKyNk ZWZpbmUgICAgIFRUX1FOWCAgICAgMTIgICAgICAgLyogICAgUU5YICovCisjZGVmaW5lICAgICBU VF9RQU5TSSAgIDEzICAgICAgIC8qICAgIFFOWCBBbnNpIGVtdWxhdGlvbiAqLworI2RlZmluZSAg ICAgVFRfVlQ1MiAgICAxNAkvKiAgICBERUMgVlQtNTIgICovCisjZGVmaW5lICAgICBUVF9IMTkg ICAgIDE1CS8qICAgIEhlYXRoLTE5ICovCisjZGVmaW5lICAgICBUVF9JQk0zMSAgIDE2ICAgICAg IC8qICAgIElCTSAzMXh4ICovCisjZGVmaW5lICAgICBUVF9TQ09BTlNJIDE3CS8qICAgIFNDT0FO U0kgKFVuaXggbW9kZSkgKi8KKyNkZWZpbmUgICAgIFRUX0FUMzg2ICAgMTggCS8qICAgIFVuaXh3 YXJlIEFUMzg2IChVbml4IG1vZGUpICovCisjZGVmaW5lICAgICBUVF9BTlNJICAgIDE5CS8qICAg IElCTSBBTlNJLlNZUyAoQkJTKSAqLworI2RlZmluZSAgICAgVFRfVklQNzgwOSAyMAkvKiAgICBI b25leXdlbGwgVklQNzgwOSAqLworI2RlZmluZSAgICAgVFRfTElOVVggICAyMSAgICAgICAvKiAg ICBMaW51eCBDb25zb2xlICovCisjZGVmaW5lICAgICBUVF9IRlQgICAgIDIyICAgICAgIC8qICAg IElCTSBIaWdoIEZ1bmN0aW9uIFRlcm1pbmFsICovCisjZGVmaW5lICAgICBUVF9BSVhURVJNIDIz ICAgICAgIC8qICAgIElCTSBBSVh0ZXJtICovCisjZGVmaW5lICAgICBUVF9TVU4gICAgIDI0ICAg ICAgIC8qICAgIFNVTiBDb25zb2xlICovCisjZGVmaW5lICAgICBUVF9CQTgwICAgIDI1ICAgICAg IC8qICAgIE5peGRvcmYgQkE4MCAqLworI2RlZmluZSAgICAgVFRfQkVPUyAgICAyNiAgICAgICAv KiAgICBCZU9TIEFuc2kgKi8KKyNkZWZpbmUgICAgIFRUX1ZUMTAwICAgMjcJLyogICAgREVDIFZU LTEwMCAqLworI2RlZmluZSAgICAgVFRfVlQxMDIgICAyOAkvKiAgICBERUMgVlQtMTAyICovCisj ZGVmaW5lICAgICBUVF9WVDIyMCAgIDI5CS8qICAgIERFQyBWVC0yMjAgKi8KKyNkZWZpbmUgICAg IFRUX1ZUMjIwUEMgMzAgICAgICAgLyogICAgREVDIFZULTIyMCB3aXRoIFBDIGtleWJvYXJkICov CisjZGVmaW5lICAgICBUVF9WVDMyMCAgIDMxCS8qICAgIERFQyBWVC0zMjAgKi8KKyNkZWZpbmUg ICAgIFRUX1ZUMzIwUEMgMzIJLyogICAgREVDIFZULTMyMCB3aXRoIFBDIGtleWJvYXJkICovCisj ZGVmaW5lICAgICBUVF9XWTM3MCAgIDMzCS8qICAgIFdZU0UgMzcwIEFOU0kgVGVybWluYWwgKi8K KyNkZWZpbmUgICAgIFRUXzk3ODAxICAgMzQgICAgICAgLyogICAgU2luaXggOTc4MDEtNXh4IHRl cm1pbmFsICovCisjZGVmaW5lICAgICBUVF9BQUEgICAgIDM1ICAgICAgIC8qICAgIEFubiBBcmJv ciBBbWJhc3NhZG9yICovCisjZGVmaW5lICAgICBUVF9UVkk5MTAgIDM2CS8qICAgIFRWSSA5MTAr ICovCisjZGVmaW5lICAgICBUVF9UVkk5MjUgIDM3ICAgICAgIC8qICAgIFRWSSA5MjUgICovCisj ZGVmaW5lICAgICBUVF9UVkk5NTAgIDM4ICAgICAgIC8qICAgIFRWSTk1MCAgICovCisjZGVmaW5l ICAgICBUVF9BRE0zQSAgIDM5ICAgICAgIC8qICAgIExTSSBBRE0gM0EgKi8KKyNkZWZpbmUgICAg IFRUX0FETTUgICAgNDAJCS8qICAgIExTSSBBRE0gNSAqLworI2RlZmluZSAgICAgVFRfVlROVCAg ICA0MSAgICAgICAvKiAgICBNaWNyb3NvZnQgTlQgVmlydHVhbCBUZXJtaW5hbCAqLworI2RlZmlu ZSAgICAgVFRfTUFYICAgVFRfVlROVAorI2RlZmluZSAgICAgVFRfVlQ0MjAgICA5NgkvKiAgICBE RUMgVlQtNDIwICovCisjZGVmaW5lICAgICBUVF9WVDUyMCAgIDk3CS8qICAgIERFQyBWVC01MjAv NTI1ICovCisjZGVmaW5lICAgICBUVF9URUs0MCA5OQkvKiAgICBUZWt0cm9uaXggNDAxeCAqLwor I2RlZmluZSAgICAgVFRfS0JNX0VNQUNTICAgVFRfTUFYKzEKKyNkZWZpbmUgICAgIFRUX0tCTV9I RUJSRVcgIFRUX01BWCsyCisjZGVmaW5lICAgICBUVF9LQk1fUlVTU0lBTiBUVF9NQVgrMworI2Rl ZmluZSAgICAgVFRfS0JNX1dQICAgICAgVFRfTUFYKzQKKworI2RlZmluZSBJU0FBQSh4KSAgICh4 ID09IFRUX0FBQSkKKyNkZWZpbmUgSVNBTlNJKHgpICAoeCA+PSBUVF9TQ09BTlNJICYmIHggPD0g VFRfQU5TSSkKKyNkZWZpbmUgSVNCQTgwKHgpICAoeCA9PSBUVF9CQTgwKQorI2RlZmluZSBJU0JF T1MoeCkgICh4ID09IFRUX0JFT1MpCisjZGVmaW5lIElTUU5YKHgpICAgKHggPT0gVFRfUU5YKQor I2RlZmluZSBJU1FBTlNJKHgpICAgKHggPT0gVFRfUUFOU0kpCisjZGVmaW5lIElTTElOVVgoeCkg KHggPT0gVFRfTElOVVgpCisjZGVmaW5lIElTU0NPKHgpICAgKHggPT0gVFRfU0NPQU5TSSkKKyNk ZWZpbmUgSVNBVDM4Nih4KSAoeCA9PSBUVF9BVDM4NikKKyNkZWZpbmUgSVNBVkFUQVIoeCkgKHgg PT0gVFRfQU5TSSkKKyNkZWZpbmUgSVNTVU4oeCkgICAgKHggPT0gVFRfU1VOKQorI2RlZmluZSBJ U1VOSVhDT04oeCkgKHggPT0gVFRfU0NPQU5TSSB8fCB4ID09IFRUX0FUMzg2IHx8IFwKKyAgICAg ICAgICAgICAgICAgICAgICB4ID09IFRUX0xJTlVYICAgfHwgeCA9PSBUVF9TVU4pCisjZGVmaW5l IElTREcyMDAoeCkgKHggPj0gVFRfREcyMDAgJiYgeCA8PSBUVF9ERzIxNykKKyNkZWZpbmUgSVNI WkwoeCkgICAoeCA9PSBUVF9IWkwxNTAwKQorI2RlZmluZSBJU0gxOSh4KSAgICh4ID09IFRUX0gx OSkKKyNkZWZpbmUgSVNJQk0zMSh4KSAoeCA9PSBUVF9JQk0zMSkKKyNkZWZpbmUgSVNUVkkoeCkg ICAoeCA+PSBUVF9UVkk5MTAgJiYgeCA8PSBUVF9UVkk5NTApCisjZGVmaW5lIElTVFZJOTEwKHgp ICh4ID09IFRUX1RWSTkxMCkKKyNkZWZpbmUgSVNUVkk5MjUoeCkgKHggPT0gVFRfVFZJOTI1KQor I2RlZmluZSBJU1RWSTk1MCh4KSAoeCA9PSBUVF9UVkk5NTApCisjZGVmaW5lIElTVlQ1Mih4KSAg KHggPT0gVFRfVlQ1MiB8fCB4ID09IFRUX0gxOSkKKyNpZmRlZiBDT01NRU5UCisjZGVmaW5lIElT VlQ1MjAoeCkgKHggPT0gVFRfVlQ1MjApCisjZGVmaW5lIElTVlQ0MjAoeCkgKHggPj0gVFRfVlQ0 MjAgJiYgeCA8PSBUVF9WVDUyMCkKKyNlbHNlIC8qIENPTU1FTlQgKi8KKy8qIFNpbmNlIHdlIGRv IG5vdCB5ZXQgc3VwcG9ydCA0MjAvNTIwIGV4dGVuZCAzMjAgKi8KKyNkZWZpbmUgSVNWVDUyMCh4 KSAoSVNWVDMyMCh4KSkKKyNkZWZpbmUgSVNWVDQyMCh4KSAoSVNWVDMyMCh4KSkKKyNlbmRpZiAv KiBDT01NRU5UICovCisjZGVmaW5lIElTVlQzMjAoeCkgKHggPj0gVFRfVlQzMjAgJiYgeCA8PSBU VF9BQUEpCisjZGVmaW5lIElTVlQyMjAoeCkgKHggPj0gVFRfVlQyMjAgJiYgeCA8PSBUVF9BQUEg fHwgXAorICAgICAgICAgICAgICAgICAgICBJU0JFT1MoeCkgfHwgSVNRQU5TSSh4KSB8fCBcCisg ICAgICAgICAgICAgICAgICAgIElTTElOVVgoeCkgfHwgSVNTVU4oeCkpCisjZGVmaW5lIElTVlQx MDIoeCkgKHggPj0gVFRfVklQNzgwOSAmJiB4IDw9IFRUX0JBODAgfHwgXAorCQkgICAgeCA9PSBU VF9WVDEwMiB8fCBJU1ZUMjIwKHgpKQorI2RlZmluZSBJU1ZUMTAwKHgpICh4ID09IFRUX1ZUMTAw IHx8IElTVlQxMDIoeCkpCisjZGVmaW5lIElTV1kzMCh4KSAgKHggPT0gVFRfV1kzMCkKKyNkZWZp bmUgSVNXWVNFKHgpICAoeCA+PSBUVF9XWTMwICYmIHggPD0gVFRfV1kxNjApCisjZGVmaW5lIElT V1k1MCh4KSAgKHggPT0gVFRfV1k1MCkKKyNkZWZpbmUgSVNXWTYwKHgpICAoeCA9PSBUVF9XWTYw IHx8IHggPT0gVFRfV1kxNjApCisjZGVmaW5lIElTV1kxNjAoeCkgKHggPT0gVFRfV1kxNjApCisj ZGVmaW5lIElTV1kzNzAoeCkgKHggPT0gVFRfV1kzNzApCisjZGVmaW5lIElTVkMoeCkgICAgKHgg PT0gVFRfVkM0NDA0KQorI2RlZmluZSBJU0hQKHgpICAgICh4ID09IFRUX0hQVEVSTSB8fCB4ID09 IFRUX0hQMjYyMSkKKyNkZWZpbmUgSVNIUFRFUk0oeCkgKHggPT0gVFRfSFBURVJNKQorI2RlZmlu ZSBJU1ZJUCh4KSAgICh4ID09IFRUX1ZJUDc4MDkpCisjZGVmaW5lIElTOTc4MDEoeCkgKHggPT0g VFRfOTc4MDEpCisjZGVmaW5lIElTSEZUKHgpICAgKHggPT0gVFRfSEZUIHx8IHggPT0gVFRfQUlY VEVSTSkKKyNkZWZpbmUgSVNBSVhURVJNKHgpICh4ID09IFRUX0FJWFRFUk0pCisjZGVmaW5lIElT VEVLKHgpICAgKHggPT0gVFRfVEVLNDApCisjZGVmaW5lIElTVlROVCh4KSAgKHggPT0gVFRfVlRO VCkKKyNkZWZpbmUgSVNBRE0zQSh4KSAoeCA9PSBUVF9BRE0zQSkKKyNkZWZpbmUgSVNBRE01KHgp ICAoeCA9PSBUVF9BRE01KQorI2VuZGlmIC8qIE9TMiAqLworCisjZGVmaW5lICAgWFlUQ1MgIDIg ICAgICAvKiAgVGVybWluYWwgQ2hhcmFjdGVyIFNldCAqLworI2RlZmluZSAgIFhZVFNPICAzCS8q ICBUZXJtaW5hbCBTaGlmdC1Jbi9TaGlmdC1PdXQgKi8KKyNkZWZpbmUgICBYWVROTCAgNCAgICAg IC8qICBUZXJtaW5hbCBuZXdsaW5lIG1vZGUgKi8KKyNpZmRlZiBPUzIKKyNkZWZpbmUgICBYWVRD T0wgNSAgICAgIC8qICBUZXJtaW5hbCBjb2xvcnMgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyNkZWZp bmUgICBYWVRFQyAgNgkvKiAgVGVybWluYWwgZWNobyA9IGR1cGxleCA9IGxvY2FsLWVjaG8gKi8K KyNpZmRlZiBPUzIKKyNkZWZpbmUgICBYWVRDVVIgNwkvKiAgVGVybWluYWwgY3Vyc29yICovCisj ZGVmaW5lICAgICBUVENfVUxJTkUgMAorI2RlZmluZSAgICAgVFRDX0hBTEYgIDEKKyNkZWZpbmUg ICAgIFRUQ19CTE9DSyAyCisjZGVmaW5lICAgWFlUQVJSIDgJLyogIFRlcm1pbmFsIGFycm93LWtl eSBtb2RlICovCisjZGVmaW5lICAgWFlUS1BEIDkgICAgICAvKiAgVGVybWluYWwga2V5cGFkIG1v ZGUgKi8KKyNkZWZpbmUgICAgVFRLX05PUk0gMCAgIC8qICAgIE5vcm1hbCBtb2RlIGZvciBhcnJv dyAvIGtleWFkIGtleXMgKi8KKyNkZWZpbmUgICAgVFRLX0FQUEwgMSAgIC8qICAgIEFwcGxpY2F0 aW9uIG1vZGUgZm9yIGFycm93IC8ga2V5YWQga2V5cyAqLworI2RlZmluZSAgIFhZVFdSUCAxMCAg ICAgLyogIFRlcm1pbmFsIHdyYXAgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyNkZWZpbmUgICBYWVRD UkQgMTEJLyogIFRlcm1pbmFsIENSLWRpc3BsYXkgKi8KKyNkZWZpbmUgICBYWVRBTlMgMTIJLyog IFRlcm1pbmFsIGFuc3dlcmJhY2sgKi8KKyNpZmRlZiBPUzIKKyNkZWZpbmUgICBYWVNDUlMgMTMg ICAgIC8qICBUZXJtaW5hbCBzY3JvbGxiYWNrIGJ1ZmZlciBzaXplICovCisjZW5kaWYgLyogT1My ICovCisjZGVmaW5lICAgWFlUQVBDIDE0CS8qICBUZXJtaW5hbCBBUEMgKi8KKyNpZmRlZiBPUzIK KyNkZWZpbmUgICBYWVRCRUwgMTUgICAgIC8qICBUZXJtaW5hbCBCZWxsICovCisjZW5kaWYgLyog T1MyICovCisjZGVmaW5lICAgWFlUREVCIDE2CS8qICBUZXJtaW5hbCBEZWJ1ZyAqLworI2lmZGVm IE9TMgorI2RlZmluZSAgIFhZVFJPTCAxNyAgICAgLyogIFRlcm1pbmFsIFJvbGxiYWNrICovCisj ZGVmaW5lICAgICBUVFJfT1ZFUiAgIDAgIC8qICBSb2xsYmFjayBPdmVyd3JpdGUgKi8KKyNkZWZp bmUgICAgIFRUUl9JTlNFUlQgMSAgLyogIFJvbGxiYWNrIEluc2VydCAqLworI2RlZmluZSAgICAg VFRSX0tFWVMgICAyICAvKiAgS2V5c3Ryb2tlcyAqLworI2RlZmluZSAgICAgICBUVFJLX0lHTiAw ICAvKiAgICBJZ25vcmUgKi8KKyNkZWZpbmUgICAgICAgVFRSS19SU1QgMiAgLyogICAgUmVzdG9y ZSBhbmQgU2VuZCAqLworI2RlZmluZSAgICAgICBUVFJLX1NORCAxICAvKiAgICBTZW5kICovCisj ZGVmaW5lICAgWFlUQ1RTIDE4ICAgICAvKiAgVGVybWluYWwgVHJhbnNtaXQtVGltZW91dCAqLwor I2RlZmluZSAgIFhZVENQRyAxOSAgICAgLyogIFRlcm1pbmFsIENvZGUgUGFnZSAqLworI2lmZGVm IENPTU1FTlQKKyNkZWZpbmUgICBYWVRIQ1UgMjAgICAgIC8qICBUZXJtaW5hbCBIaWRlLUN1cnNv ciAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyNkZWZpbmUgICBYWVRQQUMgMjEJICAgIC8qICBU ZXJtaW5hbCBPdXRwdXQtUGFjaW5nICovCisjZGVmaW5lICAgWFlUTU9VIDIyCSAgICAvKiAgVGVy bWluYWwgTW91c2UgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyNkZWZpbmUgICBYWVRISUcgMjMgICAg IC8qICBUZXJtaW5hbCBXaWR0aCAqLworI2RlZmluZSAgIFhZVFdJRCAyNCAgICAgLyogIFRlcm1p bmFsIEhlaWdodCAqLworI2lmZGVmIE9TMgorI2RlZmluZSAgIFhZVFVQRCAyNSAgICAgLyogIFRl cm1pbmFsIFNjcmVlbi11cGRhdGUgKi8KKyNkZWZpbmUgICAgVFRVX0ZBU1QgMCAgIC8qICAgICBG QVNUIGJ1dCBqZXJreSAqLworI2RlZmluZSAgICBUVFVfU01PT1RIIDEgLyogICAgIFNNT09USCBi dXQgc2xvdyAqLworI2RlZmluZSAgIFhZVEZPTiAyNiAgICAgLyogIFRlcm1pbmFsIEZ1bGwgc2Ny ZWVuIEZvbnQgKi8KKyNkZWZpbmUgICAgVFRGX1JPTSAgICAwIC8qICAgICBST00gZm9udCAqLwor I2RlZmluZSAgICBUVEZfQ1kxICAgIDEgLyogICAgIENZUklMTDEgZm9udCAqLworI2RlZmluZSAg ICBUVEZfQ1kyICAgIDIgLyogICAgIENZUklMTDIgZm9udCAqLworI2RlZmluZSAgICBUVEZfQ1kz ICAgIDMgLyogICAgIENZUklMTDMgZm9udCAqLworI2RlZmluZSAgICBUVEZfMTExICAxMTEgLyog ICAgIENQMTExIGZvbnQgKi8KKyNkZWZpbmUgICAgVFRGXzExMiAgMTEyIC8qICAgICBDUDExMiBm b250ICovCisjZGVmaW5lICAgIFRURl8xMTMgIDExMyAvKiAgICAgQ1AxMTMgZm9udCAqLworI2Rl ZmluZSAgICBUVEZfNDM3ICA0MzcgLyogICAgIENQNDM3IGZvbnQgKi8KKyNkZWZpbmUgICAgVFRG Xzg1MCAgODUwIC8qICAgICBDUDg1MCBmb250ICovCisjZGVmaW5lICAgIFRURl84NTEgIDg1MSAv KiAgICAgQ1A4NTEgZm9udCAqLworI2RlZmluZSAgICBUVEZfODUyICA4NTIgLyogICAgIENQODUy IGZvbnQgKi8KKyNkZWZpbmUgICAgVFRGXzg1MyAgODUzIC8qICAgICBDUDg1MyBmb250ICovCisj ZGVmaW5lICAgIFRURl84NjAgIDg2MCAvKiAgICAgQ1A4NjAgZm9udCAqLworI2RlZmluZSAgICBU VEZfODYxICA4NjEgLyogICAgIENQODYxIGZvbnQgKi8KKyNkZWZpbmUgICAgVFRGXzg2MiAgODYy IC8qICAgICBDUDg2MiBmb250ICovCisjZGVmaW5lICAgIFRURl84NjMgIDg2MyAvKiAgICAgQ1A4 NjMgZm9udCAqLworI2RlZmluZSAgICBUVEZfODY0ICA4NjQgLyogICAgIENQODY0IGZvbnQgKi8K KyNkZWZpbmUgICAgVFRGXzg2NSAgODY1IC8qICAgICBDUDg2NSBmb250ICovCisjZGVmaW5lICAg IFRURl84NjYgIDg2NiAvKiAgICAgQ1A4NjYgZm9udCAqLworI2RlZmluZSAgICBUVEZfODgwICA4 ODAgLyogICAgIENQODgwIGZvbnQgKi8KKyNkZWZpbmUgICAgVFRGXzg4MSAgODgxIC8qICAgICBD UDg4MSBmb250ICovCisjZGVmaW5lICAgIFRURl84ODIgIDg4MiAvKiAgICAgQ1A4ODIgZm9udCAq LworI2RlZmluZSAgICBUVEZfODgzICA4ODMgLyogICAgIENQODgzIGZvbnQgKi8KKyNkZWZpbmUg ICAgVFRGXzg4NCAgODg0IC8qICAgICBDUDg4NCBmb250ICovCisjZGVmaW5lICAgIFRURl84ODUg IDg4NSAvKiAgICAgQ1A4ODUgZm9udCAqLworI2RlZmluZSAgIFhZVFZDSCAyNyAgICAgLyogU0VU IFRFUk1JTkFMIFZJREVPLUNIQU5HRSAqLworI2RlZmluZSAgICBUVkNfRElTICAgMCAgLyogICAg IERJU0FCTEVEICovCisjZGVmaW5lICAgIFRWQ19FTkEgICAxICAvKiAgICAgRU5BQkxFRCAgKi8K KyNkZWZpbmUgICAgVFZDX1c5NSAgIDIgIC8qICAgICBXSU45NS1TQUZFICovCisjZW5kaWYgLyog T1MyICovCisjZGVmaW5lICAgWFlUQVVUT0RMIDI4ICAvKiBTRVQgVEVSTUlOQUwgQVVUT0RPV05M T0FEICovCisjZGVmaW5lICAgIFRBRF9PRkYgICAgIDAgLyogICAgT0ZGICovCisjZGVmaW5lICAg IFRBRF9PTiAgICAgIDEgLyogICAgT04gICovCisjZGVmaW5lICAgIFRBRF9LICAgICAgIDIgLyog ICAgS0VSTUlUICovCisjZGVmaW5lICAgIFRBRF9aICAgICAgIDMgLyogICAgWk1PREVNICovCisj ZGVmaW5lICAgIFRBRF9YX1NUUiAgICAgMCAvKiAgICBTVFJJTkcgKi8KKyNkZWZpbmUgICAgVEFE X1hfREVURUNUICAxIC8qICAgIERFVEVDVElPTiAoIFBBQ0tFVCwgU1RSSU5HICkgKi8KKyNkZWZp bmUgICAgVEFEX1hfQzAgICAgICAyIC8qICAgIEMwIENPTkZMSUNUUyAqLworI2RlZmluZSAgICBU QURfRVJSICAgICA0IC8qICAgIEVSUk9SIHsgU1RPUCwgQ09OVElOVUUgfSAqLworI2RlZmluZSAg ICBUQURfQVNLICAgICA1IC8qICAgIEFTSyAoZGlhbG9nKSAqLworI2RlZmluZSAgIFhZVEFVVE9V TCAyOSAgLyogU0VUIFRFUk1JTkFMIEFVVE9VUExPQUQgICAqLworI2lmZGVmIE9TMgorI2RlZmlu ZSAgIFhZVEFUVEJVRyAzMCAgLyogU0VUIFRFUk0gQVRUUi1CVUcgKi8KKyNkZWZpbmUgICBYWVRT VEFUICAgMzEgIC8qIFNFVCBURVJNIFNUQVRVU0xJTkUgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyNk ZWZpbmUgICBYWVRFU0MgICAgMzIgIC8qIFNFVCBURVJNIEVTQ0FQRS1DSEFSQUNURVIgKi8KKyNk ZWZpbmUgICBYWVRDVFJMICAgMzMgIC8qIFNFVCBURVJNIENPTlRST0xTICovCisjaWZkZWYgT1My CisjZGVmaW5lICAgWFlUQVRUUiAgIDM0ICAvKiBTRVQgVEVSTSBBVFRSSUJVVEUgcmVwcmVzZW50 YXRpb24gKi8KKyNkZWZpbmUgICBYWVRTR1JDICAgMzUgIC8qIFNFVCBURVJNIFNHUkNPTE9SUyAq LworI2VuZGlmIC8qIE9TMiAqLworI2RlZmluZSAgIFhZVExDUyAgICAzNiAgLyogU0VUIFRFUk0g TE9DQUwtQ0hBUkFDVEVSLVNFVCAqLworI2RlZmluZSAgIFhZVFJDUyAgICAzNyAgLyogU0VUIFRF Uk0gUkVNT1RFLUNIQVJBQ1RFUi1TRVQgKi8KKyNkZWZpbmUgICBYWVRVTkkgICAgMzggIC8qIFNF VCBURVJNIFVOSUNPREUgKi8KKyNkZWZpbmUgICBYWVRLRVkgICAgMzkgIC8qIFNFVCBURVJNIEtF WSAqLworI2lmZGVmIE9TMgorI2RlZmluZSAgIFhZVFNFTkQgICA0MCAgLyogU0VUIFRFUk0gU0VO RC1EQVRBICovCisjZGVmaW5lICAgWFlUU0VPQiAgIDQxICAvKiBTRVQgVEVSTSBTRU5ELUVORC1P Ri1CTE9DSyAqLworI2RlZmluZSAgIFhZVE1CRUwgICA0MiAgLyogU0VUIFRFUk0gTUFSR0lOLUJF TEwgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyNkZWZpbmUgICBYWVRJRExFICAgNDMgIC8qIFNFVCBU RVJNIElETEUtU0VORCAqLworI2lmZGVmIE9TMgorI2RlZmluZSAgIFhZVEtCTU9EICA0NCAgLyog U0VUIFRFUk0gS0VZQk9BUkQtTU9ERSAqLworI2RlZmluZSAgIFhZVFVOWCAgICA0NSAgLyogU0VU IFRFUk0gVU5JWC1NT0RFIChERykgKi8KKyNkZWZpbmUgICBYWVRBU0NSTCAgNDYgIC8qIFNFVCBU RVJNIEFVVE9TQ1JPTEwgKi8KKyNkZWZpbmUgICBYWVRBUEFHRSAgNDcgIC8qIFNFVCBURVJNIEFV VE9QQUdFICovCisjZW5kaWYgLyogT1MyICovCisjZGVmaW5lICAgWFlUUklHR0VSIDQ4ICAvKiBT RVQgVEVSTSBUUklHR0VSICovCisjaWZkZWYgT1MyCisjZGVmaW5lICAgWFlUUENURVJNIDQ5ICAv KiBTRVQgVEVSTSBQQ1RFUk0gKi8KKyNkZWZpbmUgICBYWVRPUFRJICAgNTAgIC8qIFNFVCBURVJN IFNDUkVFTi1PUFRJTUlaRSAqLworI2RlZmluZSAgIFhZVFNDTk0gICA1MSAgLyogU0VUIFRFUk0g U0NSRUVOLU1PREUgKERFQ1NDTk0pICovCisjZW5kaWYgLyogT1MyICovCisjZGVmaW5lICAgWFlU UFJOICAgIDUyICAvKiBTRVQgVEVSTSBQUklOVCB7QVVUTywgQ09QWSwgT0ZGfSAqLworI2lmZGVm IE9TMgorI2RlZmluZSAgIFhZVFNBQyAgICA1MyAgLyogU0VUIFRFUk0gU1BBQ0lORy1BVFRSSUJV VEUtQ0hBUkFDVEVSIChpbnYpICovCisjZGVmaW5lICAgWFlUU05JUE0gIDU0ICAvKiBTRVQgVEVS TSBTTkktQVVUT1JPTEwgKi8KKyNkZWZpbmUgICBYWVRTTklTTSAgNTUgIC8qIFNFVCBURVJNIFNO SS1TQ1JPTExNT0RFICovCisjZGVmaW5lICAgWFlUS0JER0wgIDU2ICAvKiBTRVQgVEVSTSBLQkQt Rk9MTE9XUy1HTC9HUiAqLworI2RlZmluZSAgIFhZVFZUTE5HICA1NyAgLyogU0VUIFRFUk0gVlQt TEFOR1VBR0UgKi8KKyNkZWZpbmUgICAgIFZUTF9OT1JUSF9BTSAgMQorI2RlZmluZSAgICAgVlRM X0JSSVRJU0ggICAyCisjZGVmaW5lICAgICBWVExfQkVMR0lBTiAgIDMKKyNkZWZpbmUgICAgIFZU TF9GUl9DQU4gICAgNAorI2RlZmluZSAgICAgVlRMX0RBTklTSCAgICA1CisjZGVmaW5lICAgICBW VExfRklOTklTSCAgIDYKKyNkZWZpbmUgICAgIFZUTF9HRVJNQU4gICAgNworI2RlZmluZSAgICAg VlRMX0RVVENIICAgICA4CisjZGVmaW5lICAgICBWVExfSVRBTElBTiAgIDkKKyNkZWZpbmUgICAg IFZUTF9TV19GUiAgICAxMAorI2RlZmluZSAgICAgVlRMX1NXX0dSICAgIDExCisjZGVmaW5lICAg ICBWVExfU1dFRElTSCAgMTIKKyNkZWZpbmUgICAgIFZUTF9OT1JXRUdJQSAxMworI2RlZmluZSAg ICAgVlRMX0ZSRU5DSCAgIDE0CisjZGVmaW5lICAgICBWVExfU1BBTklTSCAgMTUKKyNkZWZpbmUg ICAgIFZUTF9QT1JUVUdFUyAxNgorI2RlZmluZSAgICAgVlRMX0hFQlJFVyAgIDE5CisjZGVmaW5l ICAgICBWVExfR1JFRUsgICAgMjIKKyNkZWZpbmUgICAgIFZUTF9DQU5BRElBTiAyOAorI2RlZmlu ZSAgICAgVlRMX1RVUktfUSAgIDI5CisjZGVmaW5lICAgICBWVExfVFVSS19GICAgMzAKKyNkZWZp bmUgICAgIFZUTF9IVU5HQVJJQSAzMQorI2RlZmluZSAgICAgVlRMX1NMT1ZBSyAgIDMzCisjZGVm aW5lICAgICBWVExfQ1pFQ0ggICAgMzQKKyNkZWZpbmUgICAgIFZUTF9QT0xJU0ggICAzNQorI2Rl ZmluZSAgICAgVlRMX1JPTUFOSUFOIDM2CisjZGVmaW5lICAgICBWVExfU0NTICAgICAgMzgKKyNk ZWZpbmUgICAgIFZUTF9SVVNTSUFOICAzOQorI2RlZmluZSAgICAgVlRMX0xBVElOX0FNIDQwCisj ZGVmaW5lICAgWFlUVlROUkMgIDU4ICAvKiBTRVQgVEVSTSBWVC1OUkMtTU9ERSAqLworI2RlZmlu ZSAgIFhZVFNOSUNDICA1OSAgLyogU0VUIFRFUk0gU05JLUNILkNPREUgKi8KKyNkZWZpbmUgICBY WVRTTklGViAgNjAgIC8qIFNFVCBURVJNIFNOSS1GSVJNV0FSRS1WRVJTSU9OUyAqLworI2RlZmlu ZSAgIFhZVFVSTEhJICA2MSAgLyogU0VUIFRFUk0gVVJMLUhJR0hMSUdIVCAqLworI2VuZGlmIC8q IE9TMiAqLworI2RlZmluZSAgIFhZVElUTU8gICA2MiAgLyogU0VUIFRFUk0gSURMRS1USU1FT1VU ICovCisjZGVmaW5lICAgWFlUSUFDVCAgIDYzICAvKiBTRVQgVEVSTSBJRExFLUFDVElPTiAgKi8K KyNkZWZpbmUgICBYWVRMU1AgICAgNjQgIC8qIFNFVCBURVJNIExJTkUtU1BBQ0lORyAqLworI2Rl ZmluZSAgIFhZVExGRCAgICA2NQkvKiBTRVQgVEVSTSBMRi1ESVNQTEFZICAgKi8KKworI2RlZmlu ZSBYWUFUVFIgMzQgICAgICAgLyogQXR0cmlidXRlIHBhY2tldHMgICovCisjZGVmaW5lIFhZU0VS ViAzNQkvKiBTZXJ2ZXIgcGFyYW1ldGVycyAgKi8KKyNkZWZpbmUgICBYWVNFUlQgMCAgICAgIC8q ICBTZXJ2ZXIgdGltZW91dCAgICAqLworI2RlZmluZSAgIFhZU0VSRCAxCS8qICBTZXJ2ZXIgZGlz cGxheSAgICAqLworI2RlZmluZSAgIFhZU0VSSSAyICAgICAgLyogIFNlcnZlciBpZGxlICAgICAg ICovCisjZGVmaW5lICAgWFlTRVJQIDMJLyogIFNlcnZlciBnZXQtcGF0aCAgICovCisjZGVmaW5l ICAgWFlTRVJMIDQJLyogIFNlcnZlciBsb2dpbiAgICAgICovCisjZGVmaW5lICAgWFlTRVJDIDUJ LyogIFNlcnZlciBDRC1NZXNzYWdlICovCisjZGVmaW5lICAgWFlTRVJLIDYJLyogIFNlcnZlciBr ZWVwYWxpdmUgICovCisjZGVmaW5lIFhZV0lORCAzNiAgICAgICAvKiBXaW5kb3cgc2l6ZSAqLwor I2RlZmluZSBYWVhGRVIgMzcgICAgICAgLyogVHJhbnNmZXIgKi8KKyNkZWZpbmUgICBYWVhfQ0FO IDAJLyogICBDYW5jZWxsYXRpb24gICovCisjZGVmaW5lICAgWFlYX0NTRSAxCS8qICAgQ2hhcmFj dGVyLVNldCAqLworI2RlZmluZSAgIFhZWF9MU0ggMgkvKiAgIExvY2tpbmctU2hpZnQgKi8KKyNk ZWZpbmUgICBYWVhfUFJPIDMJLyogICBQcm90b2NvbCAgICAgICovCisjZGVmaW5lICAgWFlYX01P RCA0CS8qICAgTW9kZSAgICAgICAgICAqLworI2RlZmluZSAgIFhZWF9ESVMgNQkvKiAgIERpc3Bs YXkgICAgICAgKi8KKyNkZWZpbmUgICBYWVhfU0xPIDYJLyogICBTbG93LXN0YXJ0ICAgICovCisj ZGVmaW5lICAgWFlYX0NSQyA3CS8qICAgQ1JDIGNhbGN1bGF0aW9uICovCisjZGVmaW5lICAgWFlY X0JFTCA4CS8qICAgQmVsbCAqLworI2RlZmluZSAgIFhZWF9QSVAgOQkvKiAgIFBpcGVzICovCisj ZGVmaW5lICAgWFlYX0lOVCAxMCAgICAvKiAgIEludGVycnVwdGlvbiAqLworI2RlZmluZSAgIFhZ WF9YTEEgMTEgICAgLyogICAoY2hhcmFjdGVyLXNldCkgVHJhbnNsYXRpb24gT24vT2ZmICovCisj ZGVmaW5lICAgWFlYX01TRyAxMgkvKiAgIE1lc3NhZ2UgKi8KKyNkZWZpbmUgICBYWVhfUlBUIDEz CS8qICAgUmVwb3J0ICovCisjZGVmaW5lIFhZTEFORyAzOCAgICAgICAvKiBMYW5ndWFnZSAqLwor I2RlZmluZSBYWUNPVU4gMzkgICAgICAgLyogQ291bnQgKi8KKyNkZWZpbmUgWFlUQUtFIDQwICAg ICAgIC8qIFRha2UgKi8KKyNkZWZpbmUgWFlVTkNTIDQxICAgICAgIC8qIFVua25vd24tY2hhcmFj dGVyLXNldCAqLworI2RlZmluZSBYWUtFWSAgNDIgICAgICAgLyogS2V5ICovCisjZGVmaW5lIFhZ TUFDUiA0MyAgICAgICAvKiBNYWNybyAqLworI2RlZmluZSBYWUhPU1QgNDQgICAgICAgLyogSG9z dG5hbWUgb24gbmV0d29yayAqLworI2RlZmluZSBYWU5FVCAgNDUgICAgICAgLyogU0VUIE5FVFdP UksgdGhpbmdzICovCisKKyNkZWZpbmUgWFlORVRfRCA5OQkvKiBORVRXT1JLIERJUkVDVE9SWSAq LworI2RlZmluZSBYWU5FVF9UIDEwMAkvKiBORVRXT1JLIFRZUEUgKi8KKworI2RlZmluZSBYWUNB UlIgNDYJLyogQ2FycmllciAqLworI2RlZmluZSBYWVhNSVQgNDcgICAgICAgLyogVHJhbnNtaXQg Ki8KKworI2RlZmluZSBYWURJQUwgNDggICAgICAgLyogRGlhbCBvcHRpb25zICovCisKKy8qIEFu ZCBub3cgd2UgaW50ZXJydXB0IHRoZSBmbG93IHRvIGJyaW5nIHlvdSBsb3RzIG9mIHN0dWZmIGFi b3V0IGRpYWxpbmcgKi8KKworI2lmbmRlZiBNQVhUT0xMRlJFRQkvKiBNYXhpbXVtIG51bWJlciBv ZiB0b2xsLWZyZWUgYXJlYSBjb2RlcyAqLworI2RlZmluZSBNQVhUT0xMRlJFRSA4CisjZW5kaWYg LyogTUFYVE9MTEZSRUUgKi8KKworI2lmbmRlZiBNQVhUUENDCQkvKiBNYXhpbXVtIFRvbmUgb3Ig UHVsc2UgZGlhbGluZyBjb3VudHJpZXMgKi8KKyNkZWZpbmUgTUFYVFBDQyAxNjAKKyNlbmRpZiAv KiBNQVhUUENDICovCisKKyNpZm5kZWYgTUFYUEJYRVhDSAkvKiBNYXhpbXVtIG51bWJlciBvZiBQ QlggZXhjaGFuZ2VzICovCisjZGVmaW5lIE1BWFBCWEVYQ0ggOAorI2VuZGlmIC8qIE1BWFBCWEVY Q0ggKi8KKworI2lmbmRlZiBNQVhMT0NBTEFDCisjZGVmaW5lIE1BWExPQ0FMQUMgMzIKKyNlbmRp ZiAvKiBNQVhMT0NBTEFDICovCisKKyNpZm5kZWYgTUFYRE5VTVMKKyNpZmRlZiBCSUdCVUZPSwor I2RlZmluZSBNQVhERElSIDMyCS8qIE1heGltdW0gbnVtYmVyIG9mIGRpYWxpbmcgZGlyZWN0b3Jp ZXMgKi8KKyNkZWZpbmUgTUFYRE5VTVMgNDA5NQkvKiBNYXggbnVtYmVycyB0byBmZXRjaCBmcm9t IGRpYWxpbmcgZGlyZWN0b3JpZXMgKi8KKyNlbHNlCisjZGVmaW5lIE1BWERESVIgMTIKKyNkZWZp bmUgTUFYRE5VTVMgMTAyNAorI2VuZGlmIC8qIEJJR0JVRk9LICovCisjZW5kaWYgLyogTUFYRE5V TVMgKi8KKy8qCisgIElNUE9SVEFOVDogSW4gNUEoMTkyKSwgdGhlIG9sZCBTRVQgRElBTCBjb21t YW5kIHdhcyBzcGxpdCBpbnRvIHR3byBjb21tYW5kczoKKyAgU0VUIE1PREVNIChmb3IgbW9kZW0t cmVsYXRlZCBwYXJhbWV0ZXJzKSBhbmQgU0VUIERJQUwgKGZvciBkaWFsaW5nIGl0ZW1zKS4KKyAg VG8gcHJlc2VydmUgdGhlIG9sZCBmb3JtYXRzLCBldGMsIGludmlzaWJseSB3ZSBrZWVwIG9uZSBz eW1ib2wgc3BhY2UgZm9yCisgIGJvdGggY29tbWFuZHMuCisqLworI2RlZmluZSAgWFlESFVQICAw CS8qICAgRGlhbCBIYW5ndXAgKi8KKyNkZWZpbmUgIFhZRElOSSAgMSAgICAgIC8qICAgTU9ERU0g KGRpYWwpIEluaXRpYWxpemF0aW9uIHN0cmluZyAqLworI2RlZmluZSAgWFlES1NQICAyICAgICAg LyogICBNT0RFTSAoZGlhbCkgS2VybWl0LVNwb29mICovCisjZGVmaW5lICBYWURUTU8gIDMgICAg ICAvKiAgIERpYWwgVGltZW91dCAqLworI2RlZmluZSAgWFlERFBZICA0ICAgICAgLyogICBEaWFs IERpc3BsYXkgKi8KKyNkZWZpbmUgIFhZRFNQRCAgNSAgICAgIC8qICAgRGlhbCBTcGVlZCBtYXRj aGluZyAqLworI2RlZmluZSAgWFlETU5QICA2CS8qICAgTU9ERU0gKGRpYWwpIE1OUCBuZWdvdGlh dGlvbiBlbmFibGVkIChvYnNvbGV0ZSkgKi8KKyNkZWZpbmUgIFhZREVDICAgNwkvKiAgIE1PREVN IChkaWFsKSBlcnJvciBjb3JyZWN0aW9uIGVuYWJsZWQgKi8KKyNkZWZpbmUgIFhZRERDICAgOCAg ICAgIC8qICAgTU9ERU0gKGRpYWwpIGNvbXByZXNzaW9uIGVuYWJsZWQgKi8KKyNkZWZpbmUgIFhZ REhDTSAgOSAgICAgIC8qICAgTU9ERU0gKGRpYWwpIGhhbmd1cC1zdHJpbmcgKG1vdmVkIGVsc2V3 aGVyZSkgKi8KKyNkZWZpbmUgIFhZRERJUiAxMAkvKiAgIERpYWwgZGlyZWN0b3J5ICovCisjZGVm aW5lICBYWURESUEgMTEJLyogICBNT0RFTSAoZGlhbCkgZGlhbC1jb21tYW5kICovCisjZGVmaW5l ICBYWURNSFUgMTIJLyogICBNT0RFTSBIQU5HVVAgKGRpYWwgbW9kZW0taGFuZ3VwKSAqLworCisj aWZuZGVmIERFRk1ESFVQCS8qIERlZmF1bHQgTU9ERU0gSEFOR1VQLU1FVEhPRCAqLworI2RlZmlu ZSBERUZNRE1IVVAgMQkvKiAwID0gUlMyMzIsIDEgPSBtb2RlbSBjb21tYW5kICovCisjZW5kaWYg LyogREVGTURNSFVQICovCisKKyNkZWZpbmUgIFhZRE5QUiAxMyAgICAgIC8qICAgRGlhbCBQUkVG SVggKi8KKyNkZWZpbmUgIFhZRFNUUiAxNAkvKiAgIE1PREVNIENPTU1BTkQgKGRpYWwgc3RyaW5n KSAuLi4gKi8KKworI2RlZmluZSAgIFhZRFNfREMgMAkvKiAgICBEYXRhIGNvbXByZXNzaW9uICov CisjZGVmaW5lICAgWFlEU19FQyAxCS8qICAgIEVycm9yIGNvcnJlY3Rpb24gKi8KKyNkZWZpbmUg ICBYWURTX0hVIDIgICAgIC8qICAgIEhhbmd1cCBjb21tYW5kICovCisjZGVmaW5lICAgWFlEU19I VyAzICAgICAvKiAgICBIYXJkd2FyZSBmbG93IGNvbnRyb2wgKi8KKyNkZWZpbmUgICBYWURTX0lO IDQgICAgIC8qICAgIEluaXQtc3RyaW5nICovCisjZGVmaW5lICAgWFlEU19ORiA1ICAgICAvKiAg ICBObyBmbG93IGNvbnRyb2wgKi8KKyNkZWZpbmUgICBYWURTX1BYIDYgICAgIC8qICAgIFByZWZp eCAobm8sIHRoaXMgZ29lcyBpbiBTRVQgRElBTCkgKi8KKyNkZWZpbmUgICBYWURTX1NXIDcgICAg IC8qICAgIFNvZnR3YXJlIGZsb3cgY29udHJvbCAqLworI2RlZmluZSAgIFhZRFNfRFQgOCAgICAg LyogICAgVG9uZSBkaWFsaW5nIGNvbW1hbmQgKi8KKyNkZWZpbmUgICBYWURTX0RQIDkgICAgIC8q ICAgIFB1bHNlIGRpYWxpbmcgY29tbWFuZCAqLworI2RlZmluZSAgIFhZRFNfQU4gMTAgICAgLyog ICAgQXV0b2Fuc3dlciAqLworI2RlZmluZSAgIFhZRFNfUlMgMTEgICAgLyogICAgUmVzZXQgKi8K KyNkZWZpbmUgICBYWURTX01TIDEyICAgIC8qICAgIERpYWwgbW9kZSBzdHJpbmcgKi8KKyNkZWZp bmUgICBYWURTX01QIDEzICAgIC8qICAgIERpYWwgbW9kZSBwcm9tcHQgKi8KKyNkZWZpbmUgICBY WURTX1NQIDE0CS8qICAgIE1vZGVtIHNwZWFrZXIgKi8KKyNkZWZpbmUgICBYWURTX1ZPIDE1CS8q ICAgIE1vZGVtIHNwZWFrZXIgdm9sdW1lICovCisjZGVmaW5lICAgWFlEU19JRCAxNgkvKiAgICBJ Z25vcmUgZGlhbHRvbmUgKi8KKyNkZWZpbmUgICBYWURTX0kyIDE3CS8qICAgIEluaXQgc3RyaW5n ICMyICovCisKKyNkZWZpbmUgICBYWURNX0EgIDkgICAgIC8qICAgIE1ldGhvZDogQXV0byAqLwor I2RlZmluZSAgIFhZRE1fRCAgMCAgICAgLyogICAgICBEZWZhdWx0ICovCisjZGVmaW5lICAgWFlE TV9UICAyICAgICAvKiAgICAgIFRvbmUgKi8KKyNkZWZpbmUgICBYWURNX1AgIDMgICAgIC8qICAg ICAgUHVsc2UgKi8KKworI2RlZmluZSAgWFlERkMgICAxNQkvKiAgIE1PREVNIChkaWFsKSBmbG93 LWNvbnRyb2wgKi8KKyNkZWZpbmUgIFhZRE1USCAgMTYJLyogICBEaWFsIG1ldGhvZCAqLworI2Rl ZmluZSAgWFlERVNDICAxNyAgICAgLyogICBNT0RFTSAoZGlhbCkgZXNjYXBlLWNoYXJhY3RlciAq LworI2RlZmluZSAgWFlETUFYICAxOAkvKiAgIE1PREVNIChkaWFsKSBtYXhpbXVtIGludGVyZmFj ZSBzcGVlZCAqLworI2RlZmluZSAgWFlEQ0FQICAxOSAgICAgLyogICBNT0RFTSAoZGlhbCkgY2Fw YWJpbGl0aWVzICovCisjZGVmaW5lICBYWURUWVAgIDIwCS8qICAgTU9ERU0gVFlQRSAqLworI2Rl ZmluZSAgWFlESU5UICAyMQkvKiAgIERJQUwgcmV0cmllcyAqLworI2RlZmluZSAgWFlEUlRNICAy MgkvKiAgIERJQUwgdGltZSBiZXR3ZWVuIHJldHJpZXMgKi8KKyNkZWZpbmUgIFhZRE5BTSAgMjMJ LyogICBNT0RFTSBOQU1FICovCisjZGVmaW5lICBYWURMQUMgIDI0CS8qICAgRElBTCAoTE9DQUwt KUFSRUEtQ09ERSAqLworI2RlZmluZSAgWFlETUNEICAyNQkvKiAgIE1PREVNIENBUlJJRVIgKi8K KworI2RlZmluZSAgWFlEQ05GICAyNgkvKiAgIERJQUwgQ09ORklSTUFUSU9OICovCisjZGVmaW5l ICBYWURDVlQgIDI3CS8qICAgRElBTCBDT05WRVJULURJUkVDVE9SWSAqLworI2RlZmluZSAgWFlE SVhQICAyOAkvKiAgIERJQUwgSU5URVJOQVRJT05BTC1QUkVGSVggKi8KKyNkZWZpbmUgIFhZRElY UyAgMjkJLyogICBESUFMIElOVEVSTkFUSU9OQUwtU1VGRklYICovCisjZGVmaW5lICBYWURMQ0Mg IDMwCS8qICAgRElBTCBMT0NBTC1DT1VOVFJZLUNPREUgKi8KKyNkZWZpbmUgIFhZRExEUCAgMzEJ LyogICBESUFMIExPTkctRElTVEFOQ0UtUFJFRklYICovCisjZGVmaW5lICBYWURMRFMgIDMyCS8q ICAgRElBTCBMT05HLURJU1RBTkNFLVNVRkZJWCAqLworI2RlZmluZSAgWFlEUFhYICAzMwkvKiAg IERJQUwgUEJYLUVYQ0hBTkdFICovCisjZGVmaW5lICBYWURQWEkgIDM0CS8qICAgRElBTCBQQlgt SU5URVJOQUwtUFJFRklYICovCisjZGVmaW5lICBYWURQWE8gIDM1CS8qICAgRElBTCBQQlgtT1VU U0lERS1QUkVGSVggKi8KKyNkZWZpbmUgIFhZRFNGWCAgMzYJLyogICBESUFMIFNVRkZJWCAqLwor I2RlZmluZSAgWFlEU1JUICAzNwkvKiAgIERJQUwgU09SVCAqLworI2RlZmluZSAgWFlEVEZDICAz OAkvKiAgIERJQUwgVE9MTC1GUkVFLUFSRUEtQ09ERSAqLworI2RlZmluZSAgWFlEVEZQICAzOQkv KiAgIERJQUwgVE9MTC1GUkVFLVBSRUZJWCAqLworI2RlZmluZSAgWFlEVEZTICA0MAkvKiAgIERJ QUwgVE9MTC1GUkVFLVNVRkZJWCAqLworI2RlZmluZSAgWFlEQ09OICA0MSAgICAgLyogICBESUFM IENPTk5FQ1QgKi8KKyNkZWZpbmUgIFhZRFJTVFIgNDIgICAgIC8qICAgRElBTCBSRVNUUklDVCAq LworI2RlZmluZSAgWFlEUlNFVCA0MyAgICAgLyogICBNT0RFTSBSRVNFVCAqLworI2RlZmluZSAg WFlETENQICA0NAkvKiAgIERJQUwgTE9DQUwtUFJFRklYICovCisjZGVmaW5lICBYWURMQ1MgIDQ1 CS8qICAgRElBTCBMT0NBTC1TVUZGSVggKi8KKyNkZWZpbmUgIFhZRExMQUMgNDYgICAgIC8qICAg RElBTCBMQy1BUkVBLUNPREVTICovCisjZGVmaW5lICBYWURGTEQgIDQ3CS8qICAgRElBTCBGT1JD RSBMT05HLURJU1RBTkNFICovCisjZGVmaW5lICBYWURTUEsgIDQ4CS8qICAgTU9ERU0gU1BFQUtF UiAqLworI2RlZmluZSAgWFlEVk9MICA0OQkvKiAgIE1PREVNIFZPTFVNRSAqLworI2RlZmluZSAg WFlESURUICA1MAkvKiAgIElHTk9SRSBESUFMVE9ORSAqLworI2RlZmluZSAgWFlEUEFDICA1MQkv KiAgIFBBQ0lORyAqLworI2RlZmluZSAgWFlETUFDICA1MiAgICAgLyogICBNQUNSTyAqLworI2Rl ZmluZSAgWFlEUFVDQyA1MwkvKiAgIFBVTFNFLUNPVU5UUklFUyAqLworI2RlZmluZSAgWFlEVE9D QyA1NAkvKiAgIFRPTkUtQ09VTlRSSUVTICovCisjZGVmaW5lICBYWURURVNUIDU1CS8qICAgVEVT VCAqLworCisjZGVmaW5lIFhZQV9DSUQgICAxCS8qIFNFVCBBTlNXRVIgQ0FMTEVSLUlEICovCisj ZGVmaW5lIFhZQV9STkcgICAyCS8qIFNFVCBBTlNXRVIgUklOR1MgKi8KKworI2RlZmluZSBYWVNF U1MgNDkgICAgICAgLyogU0VUIFNFU1NJT04gb3B0aW9ucyAqLworI2RlZmluZSBYWUJVRiAgNTAg ICAgICAgLyogQnVmZmVyIGxlbmd0aCAqLworI2RlZmluZSBYWUJBQ0sgNTEJLyogQmFja2dyb3Vu ZCAqLworI2RlZmluZSBYWURGTFQgNTIgICAgICAgLyogRGVmYXVsdCAqLworI2RlZmluZSBYWURC TCAgNTMJLyogRG91YmxlICovCisjZGVmaW5lIFhZQ01EICA1NCAgICAgICAvKiBDT01NQU5EICov CisjZGVmaW5lIFhZQ0FTRSA1NSAgICAgICAvKiBDYXNlICovCisjZGVmaW5lIFhZQ09NUCA1NiAg ICAgICAvKiBDb21wcmVzc2lvbiAqLworI2RlZmluZSBYWVgyNSAgNTcgICAgICAgLyogWC4yNSBw YXJhbWV0ZXIgKEFOWVgyNSkgKi8KKyNkZWZpbmUgWFlQQUQgIDU4ICAgICAgIC8qIFguMyBQQUQg cGFyYW1ldGVyIChBTllYMjUpICovCisjZGVmaW5lIFhZV0lMRCA1OSAgICAgICAvKiBXaWxkY2Fy ZCBleHBhbnNpb24gbWV0aG9kICovCisKKyNkZWZpbmUgV0lMRF9PRkYgIDAJLyogV2lsZGNhcmQg ZXhwYW5zaW9uIG9mZiAqLworI2RlZmluZSBXSUxEX09OICAgMQkvKiBXaWxkY2FyZCBleHBhbnNp b24gb24gICovCisjZGVmaW5lIFdJTERfS0VSICAyCS8qIFdpbGRjYXJkIGV4cGFuc2lvbiBieSBL ZXJtaXQgKi8KKyNkZWZpbmUgV0lMRF9TSEUgIDMJLyogV2lsZGNhcmQgZXhwYW5zaW9uIGJ5IFNo ZWxsICovCisKKyNkZWZpbmUgWFlTVVNQIDYwICAgICAgIC8qIFN1c3BlbmQgKi8KKyNkZWZpbmUg WFlNQUlMIDYxCS8qIE1haWwtQ29tbWFuZCAqLworI2RlZmluZSBYWVBSSU4gNjIJLyogUHJpbnQt Q29tbWFuZCAqLworI2RlZmluZSBYWVFVSUUgNjMJLyogUXVpZXQgKi8KKyNkZWZpbmUgWFlMQ0xF IDY0CS8qIExvY2FsLWVjaG8gKi8KKyNkZWZpbmUgWFlTQ1JJIDY1CS8qIFNDUklQVCBjb21tYW5k IHBhcmFtZXRlcnMgKi8KKyNkZWZpbmUgWFlNU0dTIDY2ICAgICAgIC8qIE1FU1NBR0VzIE9OL09G RiAqLworI2lmZGVmIFROQ09ERQorI2RlZmluZSBYWVRFTCAgNjcJLyogU0VUIFRFTE5FVCBwYXJh bWV0ZXJzICovCisjZGVmaW5lICBDS19UTl9FQyAwCS8qICBURUxORVQgRUNITyAqLworI2RlZmlu ZSAgQ0tfVE5fVFQgMQkvKiAgVEVMTkVUIFRFUk1JTkFMLVRZUEUgKi8KKyNkZWZpbmUgIENLX1RO X05MIDIgICAgIC8qICBURUxORVQgTkVXTElORS1NT0RFICovCisjZGVmaW5lICBDS19UTl9CTSAz ICAgICAvKiAgVEVMTkVUIEJJTkFSWS1NT0RFICovCisjZGVmaW5lICBDS19UTl9CVUcgNCAgICAv KiAgVEVMTkVUIEJVRyAqLworI2RlZmluZSAgQ0tfVE5fRU5WIDUgICAgLyogIFRFTE5FVCBFTlZJ Uk9OTUVOVCAqLworI2RlZmluZSAgICBUTl9FTlZfVVNSICAwIC8qICAgIFZBUiBVU0VSICovCisj ZGVmaW5lICAgIFROX0VOVl9KT0IgIDEgLyogICAgVkFSIEpPQiAqLworI2RlZmluZSAgICBUTl9F TlZfQUNDVCAyIC8qICAgIFZBUiBBQ0NUICovCisjZGVmaW5lICAgIFROX0VOVl9QUk5UIDMgLyog ICAgVkFSIFBSSU5URVIgKi8KKyNkZWZpbmUgICAgVE5fRU5WX1NZUyAgNCAvKiAgICBWQVIgU1lT VEVNVFlQRSAqLworI2RlZmluZSAgICBUTl9FTlZfRElTUCA1IC8qICAgIFZBUiBESVNQTEFZICov CisjZGVmaW5lICAgIFROX0VOVl9VVkFSIDYgLyogICAgVVNFUlZBUiAqLworI2RlZmluZSAgICBU Tl9FTlZfTE9DICA3IC8qICAgIFVTRVJWQVIgTE9DQVRJT04gKi8KKyNkZWZpbmUgICAgVE5fRU5W X09OICA5OCAvKiAgICBPTiAoZW5hYmxlZCkgKi8KKyNkZWZpbmUgICAgVE5fRU5WX09GRiA5OSAv KiAgICBPRkYgKGRpc2FibGVkKSAqLworI2RlZmluZSAgQ0tfVE5fTE9DIDYgICAgLyogIFRFTE5F VCBMT0NBVElPTiAqLworI2RlZmluZSAgQ0tfVE5fQVUgIDcgICAgLyogIFRFTE5FVCBBVVRIRU5U SUNBVElPTiAqLworI2RlZmluZSAgICBUTl9BVV9GV0QgICA0IC8qICAgIEFVVEggRk9SV0FSRCAq LworI2RlZmluZSAgICBUTl9BVV9UWVAgICA1IC8qICAgIEFVVEggVFlQRSAqLworI2RlZmluZSAg ICAgIEFVVEhfTk9ORSAwIC8qICAgICAgQVVUSCBOT05FICovCisjZGVmaW5lICAgICAgQVVUSF9L UkI0IDEgLyogICAgICBBVVRIIEtlcmJlcm9zIElWICovCisjZGVmaW5lICAgICAgQVVUSF9LUkI1 IDIgLyogICAgICBBVVRIIEtlcmJlcm9zIFYgKi8KKyNkZWZpbmUgICAgICBBVVRIX1NTTCAgNyAv KiAgICAgIEFVVEggU2VjdXJlIFNvY2tldHMgTGF5ZXIgKi8KKyNkZWZpbmUgICAgICBBVVRIX1RM UyA5OCAvKiAgICAgIEFVVEggVHJhbnNwb3J0IExheWVyIFNlY3VyaXR5ICovCisjZGVmaW5lICAg ICAgQVVUSF9TUlAgIDUgLyogICAgICBBVVRIIFNlY3VyZSBSZW1vdGUgUGFzc3dvcmQgKi8KKyNk ZWZpbmUgICAgICBBVVRIX05UTE0gMTUgLyogICAgICBBVVRIIE5UIExhbiBNYW5hZ2VyICovCisj ZGVmaW5lICAgICAgQVVUSF9BVVRPIDk5IC8qICAgICBBVVRIIEFVVE9NQVRJQyAqLworI2RlZmlu ZSAgICBUTl9BVV9IT1cgIDggIC8qICAgIEFVVEggSE9XIEZMQUcgKi8KKyNkZWZpbmUgICAgVE5f QVVfRU5DICA5ICAvKiAgICBBVVRIIEVOQ1JZUFQgRkxBRyAqLworI2RlZmluZSAgQ0tfVE5fRU5D IDggICAgLyogIFRFTE5FVCBFTkNSWVBUSU9OICovCisjZGVmaW5lICAgIFROX0VOX1RZUCAgIDQg LyogICAgICBFTkNSWVBUIFRZUEUgKi8KKyNkZWZpbmUgICAgVE5fRU5fU1RBUlQgNSAvKiAgICAg IEVOQ1JZUFQgU1RBUlQgKi8KKyNkZWZpbmUgICAgVE5fRU5fU1RPUCAgNiAvKiAgICAgIEVOQ1JZ UFQgU1RPUCAgKi8KKyNkZWZpbmUgIENLX1ROX0lLUyA5ICAgIC8qICBURUxORVQgS0VSTUlULVNF UlZFUiAqLworI2RlZmluZSAgQ0tfVE5fUkUgIDEwICAgLyogIFRFTE5FVCBSRU1PVEUtRUNITyAq LworI2RlZmluZSAgQ0tfVE5fVExTIDExICAgLyogIFRFTE5FVCBTVEFSVF9UTFMgKi8KKyNkZWZp bmUgIENLX1ROX1hEICAxMiAgIC8qICBURUxORVQgWERJU1BMT0MgKi8KKyNkZWZpbmUgIENLX1RO X05BV1MgMTMgIC8qICBURUxORVQgTkFXUyAqLworI2RlZmluZSAgQ0tfVE5fV0FJVCAxNCAgLyog IFRFTE5FVCBXQUlULUZPUi1ORUdPVElBVElPTlMgKi8KKyNkZWZpbmUgIENLX1ROX1NHQSAgMTUg IC8qICBURUxORVQgU0dBICovCisjZGVmaW5lICBDS19UTl9DTElFTlQgMTYgIC8qIFRFTE5FVCBD TElFTlQgKi8KKyNkZWZpbmUgIENLX1ROX1NFUlZFUiAxNyAgLyogVEVMTkVUIFNFUlZFUiAqLwor I2RlZmluZSAgQ0tfVE5fUEhSICAgIDE4ICAvKiBURUxORVQgUFJBR01BLUhFQVJUQkVBVCAqLwor I2RlZmluZSAgQ0tfVE5fUExHICAgIDE5ICAvKiBURUxORVQgUFJBR01BLUxPR09OICovCisjZGVm aW5lICBDS19UTl9QU1AgICAgMjAgIC8qIFRFTE5FVCBQUkFHTUEtU1NQSSAqLworI2RlZmluZSAg Q0tfVE5fU0FLICAgIDIxICAvKiBURUxORVQgSUJNIFNBSyAqLworI2RlZmluZSAgQ0tfVE5fRkxX ICAgIDIyICAvKiBURUxORVQgTEZMT1cgKi8KKyNkZWZpbmUgIENLX1ROX1hGICAgICAyMyAgLyog VEVMTkVUIFRSQU5TRkVSLU1PREUgKi8KKyNkZWZpbmUgIENLX1ROX1BVSUQgICAyNCAgLyogVEVM TkVUIFBST01QVC1GT1ItVVNFUklEICovCisjZGVmaW5lICBDS19UTl9ORSAgICAgMjUgIC8qIFRF TE5FVCBOTy1FTkNSWVBULURVUklORy1YRkVSICovCisjZGVmaW5lICBDS19UTl9DUEMgICAgMjYg IC8qIFRFTE5FVCBDT00tUE9SVC1DT05UUk9MICovCisjZGVmaW5lICBDS19UTl9EQiAgICAgMjcg IC8qIFRFTE5FVCBERUJVRyAqLworI2RlZmluZSAgQ0tfVE5fRlggICAgIDI4ICAvKiBURUxORVQg Rk9SV0FSRF9YICovCisjZGVmaW5lICBDS19UTl9ETCAgICAgMjkgIC8qIFRFTE5FVCBERUxBWS1T QiAqLworI2RlZmluZSAgQ0tfVE5fU0ZVICAgIDMwICAvKiBURUxORVQgU0ZVLUNPTVBBVElCSUxJ VFkgKi8KKyNkZWZpbmUgIENLX1ROX0xPRyAgICAzMSAgLyogVEVMTkVUIExPR09VVCAqLworI2Vu ZGlmIC8qIFROQ09ERSAqLworI2RlZmluZSBYWU9VVFAgNjgJLyogT1VUUFVUIGNvbW1hbmQgcGFy YW1ldGVycyAqLworI2RlZmluZSAgIE9VVF9QQUMgMAkvKiAgIE9VVFBVVCBQQUNJTkcgKi8KKyNk ZWZpbmUgICBPVVRfRVNDIDEJLyogICBPVVRQVVQgU1BFQ0lBTC1FU0NBUEVTICovCisjZGVmaW5l IFhZRVhJVCAgNjkJLyogU0VUIEVYSVQgKi8KKyNkZWZpbmUgWFlQUlRSICA3MAkvKiBTRVQgUFJJ TlRFUiAqLworI2RlZmluZSBYWUZQQVRIIDcxCS8qIFBBVEhOQU1FICovCisKKyNpZmRlZiBPUzIK KyNkZWZpbmUgWFlNT1VTRSA3MgkvKiBNT1VTRSBTVVBQT1JUICovCisjZGVmaW5lICBYWU1fT04g ICAgIDAgICAvKiBNb3VzZSBPTi9PRkYgICAgICAgICovCisjZGVmaW5lICBYWU1fQlVUVE9OIDEg ICAvKiBEZWZpbmUgTW91c2UgRXZlbnRzICovCisjZGVmaW5lICBYWU1fQ0xFQVIgIDIgICAvKiBD bGVhciBNb3VzZSBFdmVudHMgICovCisjZGVmaW5lICBYWU1fREVCVUcgIDMgICAvKiBEZWJ1ZyBN b2RlIE9OL09GRiAqLworLyogVGhlc2UgbXVzdCBtYXRjaCBzaW1pbGFyIGRlZmluaXRpb25zIGlu IGNrb2tleS5oICovCisjZGVmaW5lICAgWFlNX0IxIDAgICAgICAvKiBNb3VzZSBCdXR0b24gT25l ICovCisjZGVmaW5lICAgWFlNX0IyIDEgICAgICAvKiBNb3VzZSBCdXR0b24gVHdvICovCisjZGVm aW5lICAgWFlNX0IzIDIgICAgICAvKiBNb3VzZSBCdXR0b24gVGhyZWUgKi8KKyNkZWZpbmUgICBY WU1fQUxUICAgMSAgICAgLyogQWx0ICovCisjZGVmaW5lICAgWFlNX0NUUkwgIDIgICAgIC8qIEN0 cmwgKi8KKyNkZWZpbmUgICBYWU1fU0hJRlQgNCAgICAgLyogU2hpZnQgKi8KKyNkZWZpbmUgICBY WU1fQzEgICAgMCAgICAgLyogU2luZ2xlIENsaWNrICovCisjZGVmaW5lICAgWFlNX0MyICAgIDgg ICAgIC8qIERvdWJsZSBDbGljayAqLworI2RlZmluZSAgIFhZTV9EUkFHICAxNiAgICAvKiBEcmFn IEV2ZW50ICovCisjZW5kaWYgLyogT1MyICovCisKKyNkZWZpbmUgWFlCRUxMIDczICAgLyogQkVM TCAqLworCisjaWZkZWYgT1MyCisjZGVmaW5lIFhZUFJUWSAgICAgNzQgICAvKiBUaHJlYWQgUHJp b3JpdHkgTGV2ZWwgKi8KKyNkZWZpbmUgICBYWVBfSURMRSAgMQorI2RlZmluZSAgIFhZUF9SRUcg ICAyCisjZGVmaW5lICAgWFlQX1NSViAgIDQKKyNkZWZpbmUgICBYWVBfUlRQICAgMworI2VuZGlm IC8qIE9TMiAqLworCisjZGVmaW5lIFhZQUxSTSAgICAgNzUJLyogU0VUIEFMQVJNICovCisjZGVm aW5lIFhZUFJPVE8gICAgNzYJLyogU0VUIFBST1RPQ09MICovCisjZGVmaW5lIFhZUFJFRklYICAg NzcgICAvKiBTRVQgUFJFRklYSU5HICovCisjZGVmaW5lIFhZTE9HSU4gICAgNzggICAvKiBMb2dp biBpbmZvIGZvciBzY3JpcHQgcHJvZ3JhbXMuLi4gKi8KKworI2RlZmluZSAgTE9HSV9VSUQgICAw CS8qIFVzZXIgSUQgICovCisjZGVmaW5lICBMT0dJX1BTVyAgIDEJLyogUGFzc3dvcmQgKi8KKyNk ZWZpbmUgIExPR0lfUFJNICAgMgkvKiBQcm9tcHQgICAqLworCisjZGVmaW5lIFhZU1RBUlRVUCAg NzkgICAgLyogU3RhcnR1cCBmaWxlICovCisjZGVmaW5lIFhZVE1QRElSICAgODAgICAgLyogVGVt cG9yYXJ5IGRpcmVjdG9yeSAqLworCisjaWZkZWYgT1MyCisjZGVmaW5lIFhZVEFQSSAgICAgODEg ICAgLyogTWljcm9zb2Z0IFRlbGVwaG9uZSBBUEkgb3B0aW9ucyAqLworI2RlZmluZSAgIFhZVEFQ SV9DRkcgICAgIDEgIC8qIFRBUEkgQ29uZmlndXJlLUxpbmUgRGlhbG9nICovCisjZGVmaW5lICAg WFlUQVBJX0RJQUwgICAgMiAgLyogVEFQSSBEaWFsaW5nLVByb3BlcnRpZXMgRGlhbG9nICovCisj ZGVmaW5lICAgWFlUQVBJX0xJTiAgICAgMyAgLyogVEFQSSBMaW5lICovCisjZGVmaW5lICAgWFlU QVBJX0xPQyAgICAgNCAgLyogVEFQSSBMb2NhdGlvbiAqLworI2RlZmluZSAgIFhZVEFQSV9QQVNT ICAgIDUgIC8qIFRBUEkgUGFzc3Rocm91Z2ggKi8KKyNkZWZpbmUgICBYWVRBUElfQ09OICAgICA2 ICAvKiBUQVBJIENvbnZlcnNpb25zICovCisjZGVmaW5lICAgWFlUQVBJX0xHSFQgICAgNyAgLyog VEFQSSBNb2RlbSBMaWdodHMgKi8KKyNkZWZpbmUgICBYWVRBUElfUFJFICAgICA4ICAvKiBUQVBJ IFByZS1kaWFsaW5nIFRlcm1pbmFsICovCisjZGVmaW5lICAgWFlUQVBJX1BTVCAgICAgOSAgLyog VEFQSSBQb3N0LWRpYWxpbmcgVGVybWluYWwgKi8KKyNkZWZpbmUgICBYWVRBUElfSU5BICAgIDEw ICAvKiBUQVBJIEluYWN0aXZpdHkgVGltZW91dCAqLworI2RlZmluZSAgIFhZVEFQSV9CTkcgICAg MTEgIC8qIFRBUEkgV2FpdCBmb3IgQ3JlZGl0IENhcmQgVG9uZSAqLworI2RlZmluZSAgIFhZVEFQ SV9NQU4gICAgMTIgIC8qIFRBUEkgTWFudWFsIERpYWxpbmcgKi8KKyNkZWZpbmUgICBYWVRBUElf VVNFICAgIDEzICAvKiBUQVBJIFVzZSBMaW5lIENvbmZpZyBzZXR0aW5ncyAqLworI2VuZGlmIC8q IE9TMiAqLworCisjaWZkZWYgVENQU09DS0VUCisjZGVmaW5lIFhZVENQICA4MiAgICAgICAvKiBU Q1Agb3B0aW9ucyAqLworI2RlZmluZSAgWFlUQ1BfTk9ERUxBWSAgIDEgIC8qIE5vIERlbGF5ICov CisjZGVmaW5lICBYWVRDUF9TRU5EQlVGICAgMiAgLyogU2VuZCBCdWZmZXIgU2l6ZSAqLworI2Rl ZmluZSAgWFlUQ1BfTElOR0VSICAgIDMgIC8qIExpbmdlciAqLworI2RlZmluZSAgWFlUQ1BfUkVD VkJVRiAgIDQgIC8qIFJlY2VpdmUgQnVmZmVyIFNpemUgKi8KKyNkZWZpbmUgIFhZVENQX0tFRVBB TElWRSA1ICAvKiBLZWVwIEFsaXZlIHBhY2tldHMgKi8KKyNkZWZpbmUgIFhZVENQX1VDWCAgICAg ICA2ICAvKiBVQ1ggMi4wIHBvcnQgc3dhYmJpbmcgYnVnICovCisjZGVmaW5lICBYWVRDUF9OQUdM RSAgICAgNyAgLyogRGVsYXkgLSBpbnZlcnNlIG9mIDEgKi8KKyNkZWZpbmUgIFhZVENQX1JETlMg ICAgICA4ICAvKiBSZXZlcnNlIEROUyBsb29rdXAgKi8KKyNkZWZpbmUgIFhZVENQX0FERFJFU1Mg ICA5ICAvKiBTZXQgcHJlZmVycmVkIElQIEFkZHJlc3MgKi8KKyNkZWZpbmUgIFhZVENQX0ROU19T UlYgIDEwICAvKiBVc2UgRE5TIFNlcnZpY2UgUmVjb3JkcyAqLworI2RlZmluZSAgWFlUQ1BfRE9O VFJPVVRFIDExIC8qIERvbnQgUm91dGUgKi8KKyNkZWZpbmUgIFhZVENQX1NPQ0tTX1NWUiAxMiAv KiBOYW1lIG9mIFNvY2tzIFNlcnZlciAqLworI2RlZmluZSAgWFlUQ1BfSFRUUF9QUk9YWSAxMyAv KiBOYW1lL1BvcnQgb2YgSFRUUCBQcm94eSBTZXJ2ZXIgKi8KKyNkZWZpbmUgIFhZVENQX1NPQ0tT X05TICAxNCAvKiBOYW1lIG9mIFNvY2tzIE5hbWUgU2VydmVyICovCisjZW5kaWYgLyogVENQU09D S0VUICovCisKKyNpZmRlZiBPUzIKKyNkZWZpbmUgWFlNU0sgIDgzICAgICAgIC8qIE1TLURPUyBL ZXJtaXQgY29tcGF0aWJpbGl0eSBvcHRpb25zICovCisjZGVmaW5lICBNU0tfQ09MT1IgMCAgICAv KiAgVGVybWluYWwgY29sb3IgaGFuZGxpbmcgICAqLworI2RlZmluZSAgTVNLX0tFWVMgIDEgICAg LyogIFNFVCBLRVkgdXNlcyBNU0sga2V5Y29kZXMgKi8KKyNkZWZpbmUgIE1TS19SRU4gICAyICAg IC8qICBGaWxlIHJlbmFtaW5nIHVzZXMgOC4zIG5vdGF0aW9uIGFsd2F5cyAqLworI2VuZGlmIC8q IE9TMiAqLworCisjZGVmaW5lIFhZREVTVCAgODQJLyogU0VUIERFU1RJTkFUSU9OIGFzIGluIE1T LURPUyBLZXJtaXQgKi8KKworI2lmZGVmIE9TMgorI2RlZmluZSBYWVdJTjk1IDg1CS8qIFNFVCBX SU45NSB3b3JrIGFyb3VuZHMgICovCisjZGVmaW5lICAgWFlXS0VZIDAJLyogICAgS2V5Ym9hcmQg dHJhbnNsYXRpb24gKi8KKyNkZWZpbmUgICBYWVdBR1IgMSAgICAgIC8qICAgIEFsdC1HciAgICAg ICAgICAgICAgICovCisjZGVmaW5lICAgWFlXT0lPIDIgICAgICAvKiAgICBPdmVybGFwcGVkIEkv TyAgICAgICAqLworI2RlZmluZSAgIFhZV0xVQyAzCS8qICAgIEx1Y2lkYSBDb25zb2xlIHN1YnN0 aXR1dGlvbnMgKi8KKyNkZWZpbmUgICBYWVdTRUxFQ1QgNCAgIC8qICAgIFNlbGVjdCBvbiBXcml0 ZSBCdWcgKi8KKyNkZWZpbmUgICBYWVc4XzMgNSAgICAgIC8qICAgIFVzZSA4LjMgZmlsZW5hbWVz PyAqLworI2RlZmluZSAgIFhZV1BPUFVQIDYgICAgLyogICAgVXNlIFBvcHVwcz8gICovCisjZGVm aW5lICAgWFlXSFNMIDcgICAgICAvKiAgICBIb3J6IFNjYW4gTGluZSBzdWJzdGl0dXRpb25zICov CisjZGVmaW5lIFhZRExSICAgODYgCS8qIFNFVCBLOTUgRElBTEVSIHdvcmsgYXJvdW5kcyAqLwor I2RlZmluZSBYWVRJVExFIDg3CS8qIFNFVCBUSVRMRSBvZiB3aW5kb3cgKi8KKyNlbmRpZiAvKiBP UzIgKi8KKworI2RlZmluZSBYWUlHTiAgIDg4CS8qIFNFVCBJR05PUkUtQ0hBUkFDVEVSICovCisj ZGVmaW5lIFhZRURJVCAgODkgICAgICAvKiBTRVQgRURJVE9SICovCisjZGVmaW5lIFhZRkxUUiAg OTAgICAgICAvKiBTRVQgeyBTRU5ELCBSRUNFSVZFIH0gRklMVEVSICovCisjZGVmaW5lIFhZQlJP V1NFIDkxICAgICAvKiBTRVQgQlJPV1NFUiAqLworI2RlZmluZSBYWUVPRiAgICA5MiAgICAgLyog RU9GICg9IEZJTEUgRU9GKSAqLworI2lmZGVmIE9TMgorI2RlZmluZSBYWUJEQ1AgICA5MyAgICAg LyogQlBSSU5URVIgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyNkZWZpbmUgWFlGTEFHICAgOTQJLyog RkxBRyAqLworI2RlZmluZSBYWUxJTUlUICA5NSAgICAgLyogU0VTU0lPTi1MSU1JVCAqLworI2Rl ZmluZSBYWUlOSUwgICA5NiAgICAgLyogUHJvdG9jb2wgbmVnb3RpYXRpb24gc3RyaW5nIG1heCBs ZW5ndGggKi8KKyNkZWZpbmUgWFlSRUxZICAgOTcgICAgIC8qIFJFTElBQkxFICovCisjZGVmaW5l IFhZU1RSRUFNIDk4ICAgICAvKiBTVFJFQU1JTkcgKi8KKyNkZWZpbmUgWFlUTE9HICAgOTkgICAg IC8qIFRSQU5TQUNUSU9OLUxPRyAqLworI2RlZmluZSBYWUNMRUFSIDEwMCAgICAgLyogQ0xFQVJD SEFOTkVMICovCisjZGVmaW5lIFhZQVVUSCAgMTAxCS8qIEFVVEhFTlRJQ0FUSU9OICovCisKKyNp ZmRlZiBUTkNPREUKKyNkZWZpbmUgWFlLUkJQUiAgIDAJLyogS2VyYmVyb3MgUHJpbmNpcGFsICov CisjZGVmaW5lIFhZS1JCUkwgICAxCS8qIEtlcmJlcm9zIFJlYWxtICovCisjZGVmaW5lIFhZS1JC Q0MgICAyCS8qIEtlcmJlcm9zIDUgQ3JlZGVudGlhbHMtQ2FjaGUgKi8KKyNkZWZpbmUgWFlLUkJT UlYgIDMgICAgIC8qIEtlcmJlcm9zIFNlcnZpY2UgTmFtZSAqLworI2RlZmluZSBYWUtSQkRCRyAg NCAgICAgLyogS2VyYmVyb3MgRGVidWdnaW5nICovCisjZGVmaW5lIFhZS1JCTElGICA1ICAgICAv KiBLZXJiZXJvcyBMaWZldGltZSAqLworI2RlZmluZSBYWUtSQlBSRSAgNiAgICAgLyogS2VyYmVy b3MgNCBQcmVhdXRoICovCisjZGVmaW5lIFhZS1JCSU5TICA3ICAgICAvKiBLZXJiZXJvcyA0IElu c3RhbmNlICovCisjZGVmaW5lIFhZS1JCRldEICA4ICAgICAvKiBLZXJiZXJvcyA1IEZvcndhcmRh YmxlICovCisjZGVmaW5lIFhZS1JCUFJYICA5ICAgICAvKiBLZXJiZXJvcyA1IFByb3hpYWJsZSAq LworI2RlZmluZSBYWUtSQlJOVyAgMTAgICAgLyogS2VyYmVyb3MgNSBSZW5ld2FibGUgbGlmZXRp bWUgKi8KKyNkZWZpbmUgWFlLUkJHRVQgIDExICAgIC8qIEtlcmJlcm9zIEF1dG8tR2V0LVRHVHMg Ki8KKyNkZWZpbmUgWFlLUkJERUwgIDEyICAgIC8qIEtlcmJlcm9zIEF1dG8tRGVzdHJveS1UR1Rz ICovCisjZGVmaW5lICAgS1JCX0RFTF9OTyAgMCAvKiAgIEtlcmJlcm9zIE5vIEF1dG8gRGVzdHJv eSAqLworI2RlZmluZSAgIEtSQl9ERUxfQ0wgIDEgLyogICBLZXJiZXJvcyBBdXRvIERlc3Rvcnkg b24gQ2xvc2UgKi8KKyNkZWZpbmUgICBLUkJfREVMX0VYICAyIC8qICAgS2VyYmVyb3MgQXV0byBE ZXN0cm95IG9uIEV4aXQgICovCisjZGVmaW5lIFhZS1JCSzVLNCAxMyAgICAvKiBLZXJiZXJvcyA1 IEdldCBLNCBUaWNrZXRzICovCisjZGVmaW5lIFhZS1JCUFJNICAxNCAgICAvKiBLZXJiZXJvcyA0 LzUgUHJvbXB0ICovCisjZGVmaW5lIFhZS1JCQURSICAxNSAgICAvKiBLZXJiZXJvcyA0LzUgQ2hl Y2tBZGRycyAqLworI2RlZmluZSBYWUtSQk5BRCAgMTYgICAgLyogS2VyYmVyb3MgNSBObyBBZGRy ZXNzZXMgKi8KKyNkZWZpbmUgWFlLUkJBREQgIDE3ICAgIC8qIEtlcmJlcm9zIDUgQWRkcmVzcyBM aXN0ICovCisjZGVmaW5lIFhZS1JCS1RCICAxOCAgICAvKiBLZXJiZXJvcyA0LzUgS2V5IFRhYmxl ICovCisjZGVmaW5lIFhZU1JQUFJNICAgMCAgICAvKiBTUlAgUHJvbXB0ICovCisjZGVmaW5lIFhZ U1NMUkNGTCAgMCAgICAvKiBTU0wvVExTIFJTQSBDZXJ0cyBmaWxlICovCisjZGVmaW5lIFhZU1NM Q09LICAgMSAgICAvKiBTU0wvVExTIENlcnRzLU9rIGZsYWcgKi8KKyNkZWZpbmUgWFlTU0xDUlEg ICAyICAgIC8qIFNTTC9UTFMgQ2VydHMtUmVxdWlyZWQgZmxhZyAqLworI2RlZmluZSBYWVNTTENM ICAgIDMgICAgLyogU1NML1RMUyBDaXBoZXIgTGlzdCAqLworI2RlZmluZSBYWVNTTERCRyAgIDQg ICAgLyogU1NML1RMUyBEZWJ1ZyBmbGFnICovCisjZGVmaW5lIFhZU1NMUktGTCAgNSAgICAvKiBT U0wvVExTIFJTQSBLZXkgRmlsZSAqLworI2RlZmluZSBYWVNTTExGTCAgIDYgICAgLyogU1NML1RM UyBMb2cgRmlsZSAqLworI2RlZmluZSBYWVNTTE9OICAgIDcgICAgLyogU1NML1RMUyBPbmx5IGZs YWcgKi8KKyNkZWZpbmUgWFlTU0xTRUMgICA4ICAgIC8qIFNTTC9UTFMgU2VjdXJlIGZsYWcgKi8K KyNkZWZpbmUgWFlTU0xWUkIgICA5ICAgIC8qIFNTTC9UTFMgVmVyYm9zZSBmbGFnICovCisjZGVm aW5lIFhZU1NMVlJGICAxMCAgICAvKiBTU0wvVExTIFZlcmlmeSBmbGFnICovCisjZGVmaW5lIFhZ U1NMRFVNICAxMSAgICAvKiBTU0wvVExTIER1bW15IGZsYWcgKi8KKyNkZWZpbmUgWFlTU0xEQ0ZM IDEyICAgIC8qIFNTTC9UTFMgRFNBIENlcnRzIGZpbGUgKi8KKyNkZWZpbmUgWFlTU0xES0ZMIDEz ICAgIC8qIFNTTC9UTFMgREggQ2VydHMgZmlsZSAqLworI2RlZmluZSBYWVNTTERQRkwgMTQgICAg LyogU1NML1RMUyBESCBQYXJhbSBmaWxlICovCisjZGVmaW5lIFhZU1NMQ1JMICAxNSAgICAvKiBT U0wvVExTIENSTCBmaWxlICovCisjZGVmaW5lIFhZU1NMQ1JMRCAxNiAgICAvKiBTU0wvVExTIENS TCBkaXIgKi8KKyNkZWZpbmUgWFlTU0xWUkZGIDE3ICAgIC8qIFNTTC9UTFMgVmVyaWZ5IGZpbGUg Ki8KKyNkZWZpbmUgWFlTU0xWUkZEIDE4ICAgIC8qIFNTTC9UTFMgVmVyaWZ5IGRpciAqLworI2Rl ZmluZSBYWVNTTFJORCAgMTkgICAgLyogU1NML1RMUyBSYW5kb20gZmlsZSAqLworI2RlZmluZSBY WVNTTERDQ0YgMjAgICAgLyogU1NML1RMUyBEU0EgQ2VydHMgQ2hhaW4gRmlsZSAqLworI2RlZmlu ZSBYWVNTTFJDQ0YgMjEgICAgLyogU1NML1RMUyBSU0EgQ2VydHMgQ2hhaW4gRmlsZSAqLworCisv KiBUaGUgZm9sbG93aW5nIG11c3QgYmUgcG93ZXJzIG9mIDIgZm9yIGEgYml0IG1hc2sgKi8KKwor I2RlZmluZSAgWFlLTENFTiAgMQkvKiBLZXJiZXJvcyBMaXN0IENyZWRlbnRpYWxzOiBFbmNyeXB0 aW9uICovCisjZGVmaW5lICBYWUtMQ0ZMICAyCS8qIEtlcmJlcm9zIExpc3QgQ3JlZGVudGlhbHM6 IEZsYWdzICovCisjZGVmaW5lICBYWUtMQ0FEICA0ICAgICAvKiBLZXJiZXJvcyBMaXN0IENyZWRl bnRpYWxzOiBBZGRyZXNzZXMgKi8KKyNlbmRpZiAvKiBUTkNPREUgKi8KKworI2RlZmluZSBYWUZV TkMgICAxMDIJLyogU0VUIEZVTkNUSU9OICovCisKKyNkZWZpbmUgIEZVTkNfREkgICAwCS8qIEZV TkNUSU9OIERJQUdOT1NUSUNTICovCisjZGVmaW5lICBGVU5DX0VSICAgMSAgICAvKiBGVU5DVElP TiBFUlJPUiAqLworCisjZGVmaW5lIFhZRlRQICAgIDEwMwkvKiBGVFAgYXBwbGljYXRpb24gKi8K KyNkZWZpbmUgWFlTTEVFUCAgMTA0CS8qIFNMRUVQIC8gUEFVU0Ugb3B0aW9ucyAqLworI2RlZmlu ZSBYWVNTSCAgICAxMDUJLyogU1NIIG9wdGlvbnMgKi8KKyNkZWZpbmUgWFlURUxPUCAgMTA2ICAg IC8qIFRFTE5FVCBPUFRJT05TIChURUxPUFQpICovCisjZGVmaW5lIFhZQ0QgICAgIDEwNyAgICAv KiBTRVQgQ0QgKi8KKyNkZWZpbmUgWFlDU0VUICAgMTA4CS8qIENIQVJBQ1RFUi1TRVQgKi8KKyNk ZWZpbmUgWFlTVE9QICAgMTA5ICAgIC8qIFNUT1AtQklUUyAqLworI2RlZmluZSBYWVNFUklBTCAx MTAJLyogU0VSSUFMICovCisjZGVmaW5lIFhZRElTQyAgIDExMSAgICAvKiBDTE9TRS1PTi1ESVND T05ORUNUICovCisjZGVmaW5lIFhZT1BUUyAgIDExMiAgICAvKiBPUFRJT05TICovCisjZGVmaW5l IFhZUThGTEcgIDExMyAgICAvKiBROEZMQUcgKGludmlzaWJsZSkgKi8KKyNkZWZpbmUgWFlUSU1F UiAgMTE0ICAgIC8qIFRJTUVSICovCisjZGVmaW5lIFhZRkFDS0IgIDExNSAgICAvKiBGLUFDSy1C VUcgKi8KKyNkZWZpbmUgWFlCVVAgICAgMTE2ICAgIC8qIFNFVCBTRU5EL1JFQ0VJVkUgQkFDS1VQ ICovCisjZGVmaW5lIFhZTU9WRSAgIDExNwkvKiBTRVQgU0VORC9SRUNFSVZFIE1PVkUtVE8gKi8K KyNkZWZpbmUgWFlSRU5BTUUgMTE4CS8qIFNFVCBTRU5EL1JFQ0VJVkUgUkVOQU1FLVRPICovCisj ZGVmaW5lIFhZSElOVFMgIDExOSAgICAvKiBTRVQgSElOVFMgKi8KKyNkZWZpbmUgWFlFVkFMICAg MTIwICAgIC8qIFNFVCBFVkFMVUFURSAqLworI2RlZmluZSBYWUZBQ0tQICAxMjEgICAgLyogRi1B Q0stUEFUSCAqLworI2RlZmluZSBYWVNZU0wgICAxMjIgICAgLyogU3lzTG9nICovCisjZGVmaW5l IFhZUU5YUEwgIDEyMwkvKiBRTlggUG9ydCBMb2NrICovCisjZGVmaW5lIFhZSUtTICAgIDEyNCAg ICAvKiBTRVQgSUtTIC4uLiAqLworI2RlZmluZSBYWVJPT1QgICAxMjUgICAgLyogU0VUIFJPT1Qg Ki8KKyNkZWZpbmUgWFlGVFBYICAgMTI2ICAgIC8qIFNFVCBGVFAgKi8KKyNkZWZpbmUgWFlTRVhQ ICAgMTI3CS8qIFNFVCBTRVhQICovCisjZGVmaW5lIFhZR1BSICAgIDEyOCAgICAvKiBTRVQgR0VU LVBVVC1SRU1PVEUgKi8KKyNkZWZpbmUgWFlMT0NVUyAgMTI5CS8qIFNFVCBMT0NVUyAqLworI2Rl ZmluZSBYWUdVSSAgICAxMzAJLyogU0VUIEdVSSAqLworI2RlZmluZSBYWUFOU1dFUiAxMzEgICAg LyogU0VUIEFOU1dFUiAqLworI2RlZmluZSBYWU1BVENIICAxMzIgICAgLyogU0VUIE1BVENIRE9U ICovCisjZGVmaW5lIFhZU0ZUUCAgIDEzMyAgICAvKiBTRVQgU0ZUUCAqLworI2RlZmluZSBYWV9S RU4gICAxMzQgICAgLyogU0VUIFJFTkFNRSAqLworI2RlZmluZSBYWUVYVFJOICAxMzUgICAgLyog U0VUIEVYVEVSTkFMLVBST1RPQ09MICovCisjZGVmaW5lIFhZVkFSRVYgIDEzNiAgICAvKiBTRVQg VkFSSUFCTEUtRVZBTFVBVElPTiAqLworCisvKiBFbmQgb2YgU0VUIGNvbW1hbmRzICovCisKKy8q IFMtRXhwcmVzc2lvbnMgLS0gZmxvYXRpbmctcG9pbnQgc3VwcG9ydCByZXF1aXJlZCAqLworCisj aWZuZGVmIENLRkxPQVQKKyNpZm5kZWYgTk9TRVhQCisjZGVmaW5lIE5PU0VYUAorI2VuZGlmIC8q IE5PU0VYUCAqLworI2VuZGlmIC8qIENLRkxPQVQgKi8KKworLyogTWF4aW11bSBudW1iZXIgb2Yg ZWxlbWVudHMgaW4gYW4gUy1FeHByZXNzaW9uICovCisKKyNpZm5kZWYgTk9TRVhQCisjaWZuZGVm IFNFWFBNQVgKKyNpZmRlZiBCSUdCVUZPSworI2RlZmluZSBTRVhQTUFYIDEwMjQKKyNlbHNlCisj ZGVmaW5lIFNFWFBNQVggMzIKKyNlbmRpZiAvKiBCSUdCVUZPSyAqLworI2VuZGlmIC8qIFNFWFBN QVggKi8KKyNlbmRpZiAvKiBOT1NFWFAgKi8KKworI2lmZGVmIEFOWVgyNQorLyogUEFEIGNvbW1h bmQgcGFyYW1ldGVycyAqLworCisjZGVmaW5lIFhZUEFETCAwICAgICAgICAvKiBjbGVhciB2aXJ0 dWFsIGNhbGwgKi8KKyNkZWZpbmUgWFlQQURTIDEgICAgICAgIC8qIHN0YXR1cyBvZiB2aXJ0dWFs IGNhbGwgKi8KKyNkZWZpbmUgWFlQQURSIDIgICAgICAgIC8qIHJlc2V0IG9mIHZpcnR1YWwgY2Fs bCAqLworI2RlZmluZSBYWVBBREkgMyAgICAgICAgLyogc2VuZCBhbiBpbnRlcnJ1cHQgcGFja2V0 ICovCisKKy8qIFVzZWQgd2l0aCBYWVgyNS4uLiAqLworI2RlZmluZSBYWVVEQVQgMCAgICAgICAv KiBYLjI1IGNhbGwgdXNlciBkYXRhICovCisjZGVmaW5lIFhZQ0xPUyAxICAgICAgIC8qIFguMjUg Y2xvc2VkIHVzZXIgZ3JvdXAgY2FsbCAqLworI2RlZmluZSBYWVJFVkMgMiAgICAgICAvKiBYLjI1 IHJldmVyc2UgY2hhcmdlIGNhbGwgKi8KKyNlbmRpZiAvKiBBTllYMjUgKi8KKworI2lmZGVmIE9T MgorLyogU0VUIFBSSU5URVIgc3dpdGNoZXMgKi8KKworI2RlZmluZSBQUk5fT1VUIDAJCQkvKiBP dXRwdXQgb25seSAqLworI2RlZmluZSBQUk5fQklEIDEJCQkvKiBCaWRpcmVjdGlvbmFsICovCisj ZGVmaW5lIFBSTl9ET1MgMgkJCS8qIERPUyBkZXZpY2UgKi8KKyNkZWZpbmUgUFJOX1dJTiAzCQkJ LyogV2luZG93cyBxdWV1ZSAqLworI2RlZmluZSBQUk5fVE1PIDQJCQkvKiBUaW1lb3V0ICovCisj ZGVmaW5lIFBSTl9UUk0gNQkJCS8qIFRlcm1pbmF0b3IgKi8KKyNkZWZpbmUgUFJOX1NFUCA2CQkJ LyogU2VwYXJhdG9yICovCisjZGVmaW5lIFBSTl9TUEQgNwkJCS8qIENPTS1wb3J0IHNwZWVkICov CisjZGVmaW5lIFBSTl9GTE8gOAkJCS8qIENPTS1wb3J0IGZsb3cgY29udHJvbCAqLworI2RlZmlu ZSBQUk5fUEFSIDkJCQkvKiBDT00tcG9ydCBwYXJpdHkgKi8KKyNkZWZpbmUgUFJOX05PTiAxMAkJ CS8qIE5vIHByaW50ZXIgKi8KKyNkZWZpbmUgUFJOX0ZJTCAxMQkJCS8qIEZpbGVuYW1lICovCisj ZGVmaW5lIFBSTl9QSVAgMTIJCQkvKiBQaXBlbmFtZSAqLworI2RlZmluZSBQUk5fUFMgIDEzICAg ICAgICAgICAgICAgICAgICAgIC8qIFRleHQgdG8gUFMgKi8KKyNkZWZpbmUgUFJOX1dJRCAxNCAg ICAgICAgICAgICAgICAgICAgICAvKiBQUyBXaWR0aCAqLworI2RlZmluZSBQUk5fTEVOIDE1ICAg ICAgICAgICAgICAgICAgICAgIC8qIFBTIExlbmd0aCAqLworI2RlZmluZSBQUk5fUkFXIDE2ICAg ICAgICAgICAgICAgICAgICAgIC8qIE5vbi1QUyAqLworI2RlZmluZSBQUk5fQ1MgIDE3ICAgICAg ICAgICAgICAgICAgICAgIC8qIENoYXJhY3RlciBTZXQgKi8KKyNkZWZpbmUgUFJOX01BWCAxNwkJ CS8qIE51bWJlciBvZiBzd2l0Y2hlcyBkZWZpbmVkICovCisKKy8qIFByaW50ZXIgdHlwZXMgKi8K KworI2RlZmluZSBQUlRfRE9TIDAJCQkvKiBET1MgKi8KKyNkZWZpbmUgUFJUX1dJTiAxCQkJLyog V2luZG93cyBRdWV1ZSAqLworI2RlZmluZSBQUlRfRklMIDIJCQkvKiBGaWxlICovCisjZGVmaW5l IFBSVF9QSVAgMwkJCS8qIFBpcGUgKi8KKyNkZWZpbmUgUFJUX05PTiA0CQkJLyogTm9uZSAqLwor CisjZGVmaW5lIFBSSU5UU1dJCisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogTk9JQ1AgKi8K KworI2lmbmRlZiBOT0RJQUwKKy8qCisgIFN5bWJvbHMgZm9yIG1vZGVtIHR5cGVzLCBtb3ZlZCBo ZXJlIGZyb20gY2t1ZGlhLmMsIE1heSAxOTk3LCBiZWNhdXNlIG5vdworICB0aGV5IGFyZSBhbHNv IHVzZWQgaW4gc29tZSBvdGhlciBtb2R1bGVzLiAgVGhlIG51bWJlcnMgTVVTVCBjb3JyZXNwb25k IHRvCisgIHRoZSBvcmRlcmluZyBvZiBlbnRyaWVzIHdpdGhpbiB0aGUgbW9kZW1wW10gYXJyYXku CisqLworI2lmZGVmIE1JTklESUFMCQkJCS8qIE1pbmltdW0gZGlhbGVyIHN1cHBvcnQgKi8KKwor I2RlZmluZSAgICAgICAgIG5fRElSRUNUICAgICAgICAgMAkvKiBEaXJlY3QgY29ubmVjdGlvbiAt LSBubyBtb2RlbSAqLworI2RlZmluZQkJbl9DQ0lUVAkJIDEJLyogQ0NJVFQvSVRVLVQgVi4yNWJp cyAqLworI2RlZmluZQkJbl9IQVlFUwkJIDIJLyogSGF5ZXMgMjQwMCAqLworI2RlZmluZQkJbl9V TktOT1dOCSAzCS8qIFVua25vd24gKi8KKyNkZWZpbmUgICAgICAgICBuX1VERUYgICAgICAgICAg IDQJLyogVXNlci1EZWZpbmVkICovCisjZGVmaW5lICAgICAgICAgbl9HRU5FUklDICAgICAgICA1 CS8qIEdlbmVyaWMgSGlnaCBTcGVlZCAqLworI2RlZmluZSAgICAgICAgIG5fSVRVVFYyNTAgICAg ICAgNgkvKiBJVFUtVCBWLjI1MCAqLworI2RlZmluZQkJTUFYX01ETQkJIDYJLyogTnVtYmVyIG9m IG1vZGVtIHR5cGVzICovCisKKyNlbHNlCQkJCQkvKiBGdWxsLWJsb3duIGRpYWxlciBzdXBwb3J0 ICovCisKKyNkZWZpbmUgICAgICAgICBuX0RJUkVDVCAgICAgICAgIDAJLyogRGlyZWN0IGNvbm5l Y3Rpb24gLS0gbm8gbW9kZW0gKi8KKyNkZWZpbmUJCW5fQVRURFRETQkgMQorI2RlZmluZSAgICAg ICAgIG5fQVRUSVNOICAgICAgICAgMgorI2RlZmluZQkJbl9BVFRNT0RFTQkgMworI2RlZmluZQkJ bl9DQ0lUVAkJIDQKKyNkZWZpbmUJCW5fQ0VSTUVURUsJIDUKKyNkZWZpbmUJCW5fREYwMwkJIDYK KyNkZWZpbmUJCW5fREYxMDAJCSA3CisjZGVmaW5lCQluX0RGMjAwCQkgOAorI2RlZmluZQkJbl9H REMJCSA5CisjZGVmaW5lCQluX0hBWUVTCQkxMAorI2RlZmluZQkJbl9QRU5SSUwJMTEKKyNkZWZp bmUJCW5fUkFDQUwJCTEyCisjZGVmaW5lCQluX1VOS05PV04gICAgICAgMTMKKyNkZWZpbmUJCW5f VkVOVEVMCTE0CisjZGVmaW5lCQluX0NPTkNPUkQJMTUKKyNkZWZpbmUJCW5fQVRUVVBDCTE2CS8q IGFrYSBVTklYIFBDIGFuZCBBVFQ3MzAwICovCisjZGVmaW5lCQluX1JPTE0gICAgICAgICAgMTcg ICAgICAvKiBSb2xtIENCWCBEQ00gKi8KKyNkZWZpbmUJCW5fTUlDUk9DT00JMTgJLyogTWljcm9j b21zIGluIFNYIGNvbW1hbmQgbW9kZSAqLworI2RlZmluZSAgICAgICAgIG5fVVNSICAgICAgICAg ICAxOQkvKiBNb2Rlcm4gVVNScyAqLworI2RlZmluZSAgICAgICAgIG5fVEVMRUJJVCAgICAgICAy MCAgICAgIC8qIFRlbGViaXRzIG9mIGFsbCBraW5kcyAqLworI2RlZmluZSAgICAgICAgIG5fRElH SVRFTCAgICAgICAyMQkvKiBEaWdpdGVsIERULTIyIChDQ0lUVCB2YXJpYW50KSAqLworI2RlZmlu ZSAgICAgICAgIG5fSF8xMjAwICAgICAgICAyMgkvKiBIYXllcyAxMjAwICovCisjZGVmaW5lCQlu X0hfVUxUUkEgICAgICAgMjMJLyogSGF5ZXMgVWx0cmEgYW5kIG1heWJlIE9wdGltYSAqLworI2Rl ZmluZQkJbl9IX0FDQ1VSQSAgICAgIDI0CS8qIEhheWVzIEFjY3VyYSBhbmQgbWF5YmUgT3B0aW1h ICovCisjZGVmaW5lICAgICAgICAgbl9QUEkgICAgICAgICAgIDI1CS8qIFByYWN0aWNhbCBQZXJp cGhlcmFscyAqLworI2RlZmluZSAgICAgICAgIG5fREFUQVBPUlQgICAgICAyNgkvKiBBVCZUIERh dGFwb3J0ICovCisjZGVmaW5lICAgICAgICAgbl9CT0NBICAgICAgICAgIDI3CS8qIEJvY2EgKi8K KyNkZWZpbmUJCW5fTU9UT1JPTEEgICAgICAyOAkvKiBNb3Rvcm9sYSBGYXN0YWxrIG9yIExpZmVz dHlsZSAqLworI2RlZmluZQkJbl9ESUdJQ09NTQkyOQkvKiBEaWdpY29tbSBDb25uZWN0aW9uICov CisjZGVmaW5lCQluX0RZTkFMSU5LICAgICAgMzAJLyogRHluYWxpbmsgMTQxNFZFICovCisjZGVm aW5lCQluX0lOVEVMCQkzMQkvKiBJbnRlbCAxNDQwMCBGYXhtb2RlbSAqLworI2RlZmluZQkJbl9V Q09NX0FUCTMyCS8qIE1pY3JvY29tcyBpbiBBVCBtb2RlICovCisjZGVmaW5lCQluX01VTFRJCQkz MwkvKiBNdWx0aXRlY2ggTVQxNDMyICovCisjZGVmaW5lCQluX1NVUFJBCQkzNAkvKiBTdXByYUZB WG1vZGVtICovCisjZGVmaW5lCSAgICAgICAgbl9aT0xUUklYCTM1CS8qIFpvbHRyaXggKi8KKyNk ZWZpbmUJCW5fWk9PTQkJMzYJLyogWm9vbSAqLworI2RlZmluZQkJbl9aWVhFTAkJMzcJLyogWnlY RUwgKi8KKyNkZWZpbmUgICAgICAgICBuX1RBUEkgICAgICAgICAgMzgJLyogVEFQSSBMaW5lIG1v ZGVtIC0gd2hhdGV2ZXIgaXQgaXMgKi8KKyNkZWZpbmUgICAgICAgICBuX1RCTkVXICAgICAgICAg MzkJLyogTmV3ZXIgVGVsZWJpdCBtb2RlbHMgKi8KKyNkZWZpbmUJCW5fTUFYVEVDSCAgICAgICA0 MAkvKiBNYXhUZWNoIFhNMjg4RUEgKi8KKyNkZWZpbmUgICAgICAgICBuX1VERUYgICAgICAgICAg NDEJLyogVXNlci1EZWZpbmVkICovCisjZGVmaW5lICAgICAgICAgbl9SV1YzMiAgICAgICAgIDQy CS8qIEdlbmVyaWMgUm9ja3dlbGwgVi4zMiAqLworI2RlZmluZSAgICAgICAgIG5fUldWMzJCICAg ICAgICA0MwkvKiBHZW5lcmljIFJvY2t3ZWxsIFYuMzJiaXMgKi8KKyNkZWZpbmUgICAgICAgICBu X1JXVjM0ICAgICAgICAgNDQJLyogR2VuZXJpYyBSb2Nrd2VsbCBWLjM0ICovCisjZGVmaW5lCQlu X01XQVZFCQk0NQkvKiBJQk0gTXdhdmUgQWRhcHRlciAqLworI2RlZmluZSAgICAgICAgIG5fVEVM RVBBVEggICAgICA0NgkvKiBHYXRld2F5IFRlbGVwYXRoICovCisjZGVmaW5lICAgICAgICAgbl9N SUNST0xJTksgICAgIDQ3CS8qIE1pY3JvTGluayBtb2RlbXMgKi8KKyNkZWZpbmUgICAgICAgICBu X0NBUkRJTkFMICAgICAgNDgJLyogQ2FyZGluYWwgbW9kZW1zICovCisjZGVmaW5lICAgICAgICAg bl9HRU5FUklDICAgICAgIDQ5ICAgICAgLyogR2VuZXJpYyBoaWdoLXNwZWVkICovCisjZGVmaW5l ICAgICAgICAgbl9YSkFDSyAgICAgICAgIDUwCS8qIE1lZ2FoZXJ0eiBYLUphY2sgKi8KKyNkZWZp bmUgICAgICAgICBuX1NQSVJJVElJICAgICAgNTEJLyogUXVpY2tjb21tIFNwaXJpdCBJSSAqLwor I2RlZmluZSAgICAgICAgIG5fTU9OVEFOQSAgICAgICA1MgkvKiBNb3Rvcm9sYSBNb250YW5hICov CisjZGVmaW5lICAgICAgICAgbl9DT01QQVEgICAgICAgIDUzCS8qIENvbXBhcSBEYXRhK0ZheCBN b2RlbSAqLworI2RlZmluZSAgICAgICAgIG5fRlVKSVRTVSAgICAgICA1NAkvKiBGdWppdHN1IEZh eC9Nb2RlbSBBZHBhdGVyICovCisjZGVmaW5lICAgICAgICAgbl9NSFpBVFQgICAgICAgIDU1CS8q IE1lZ2FoZXJ0eiBBVCZUIFYuMzQgKi8KKyNkZWZpbmUgICAgICAgICBuX1NVUFJBU09OICAgICAg NTYJLyogU3VwcmFTb25pYyAqLworI2RlZmluZSAgICAgICAgIG5fQkVTVERBVEEgICAgICA1Nwkv KiBCZXN0IERhdGEgKi8KKyNkZWZpbmUgICAgICAgICBuX0FUVDE5MDAgICAgICAgNTggICAgICAv KiBBVCZUIFNUVSBJSUkgTW9kZWwgMTkwMCAqLworI2RlZmluZSAgICAgICAgIG5fQVRUMTkxMCAg ICAgICA1OSAgICAgIC8qIEFUJlQgU1RVIElJSSBNb2RlbCAxOTEwICovCisjZGVmaW5lICAgICAg ICAgbl9LRUVQSU5UT1VDSCAgIDYwCS8qIEFUJlQgS2VlcGluVG91Y2ggKi8KKyNkZWZpbmUgICAg ICAgICBuX1VTUlgyICAgICAgICAgNjEJLyogVVNSIFhKLTE1NjAgWDIgNTZLICovCisjZGVmaW5l ICAgICAgICAgbl9ST0xNQVQgICAgICAgIDYyCS8qIFJvbG0gd2l0aCBBVCBjb21tYW5kIHNldCAq LworI2RlZmluZQkJbl9BVExBUyAgICAgICAgIDYzICAgICAgLyogQXRsYXMgLyBOZXdjb20gaXhm QyAzMy42ICovCisjZGVmaW5lICAgICAgICAgbl9DT0RFWCAgICAgICAgIDY0CS8qIE1vdG9yb2xh IENvZGV4IDMyNlggU2VyaWVzICovCisjZGVmaW5lICAgICAgICAgbl9NVDU2MzRaUFggICAgIDY1 CS8qIE11bHRpdGVjaCBNVDU2MzRaUFggKi8KKyNkZWZpbmUgICAgICAgICBuX1VMSU5LVjI1MCAg ICAgNjYJLyogTWljcm9saW5rIElUVS1UIFYuMjUwIDU2SyAqLworI2RlZmluZSAgICAgICAgIG5f SVRVVFYyNTAgICAgICA2NwkvKiBHZW5lcmljIElUVS1UIFYuMjUwICovCisjZGVmaW5lICAgICAg ICAgbl9SV1Y5MCAgICAgICAgIDY4CS8qIEdlbmVyaWMgUm9ja3dlbGwgVi45MCAqLworI2RlZmlu ZSAgICAgICAgIG5fU1VQUkFYICAgICAgICA2OSAgICAgIC8qIERpYW1vbmQgU3VwcmEgRXhwcmVz cyBWLjkwICovCisjZGVmaW5lICAgICAgICAgbl9MVUNFTlQgICAgICAgIDcwICAgICAgLyogTHVj ZW50IFZlbnVzIGNoaXBzZXQgKi8KKyNkZWZpbmUgICAgICAgICBuX1BDVEVMICAgICAgICAgNzEg ICAgICAvKiBQQ1RlbCBjaGlwc2V0ICovCisjZGVmaW5lICAgICAgICAgbl9DT05FWEFOVCAgICAg IDcyICAgICAgLyogQ29uZXhhbnQgbW9kZW0gZmFtaWx5ICovCisjZGVmaW5lCQluX1pPT01WMzQJ NzMJLyogWm9vbSAqLworI2RlZmluZQkJbl9aT09NVjkwCTc0CS8qIFpvb20gKi8KKyNkZWZpbmUg ICAgICAgICBuX1pPT01WOTIgICAgICAgNzUgICAgICAvKiBaT09NIFYuOTIgKi8KKyNkZWZpbmUg ICAgICAgICBuX01PVFNNNTYgICAgICAgNzYJLyogTW90b3JvbGEgU001NiBjaGlwc2V0ICovCisj ZGVmaW5lCQlNQVhfTURNCQk3NgkvKiBOdW1iZXIgb2YgbW9kZW0gdHlwZXMgKi8KKworI2VuZGlm IC8qIE1JTklESUFMICovCisjZW5kaWYgLyogTk9ESUFMICovCisKKyNpZm5kZWYgTk9JQ1AKKy8q IFNIT1cgY29tbWFuZCBzeW1ib2xzICovCisKKyNkZWZpbmUgU0hQQVIgMAkJCQkvKiBQYXJhbWV0 ZXJzICovCisjZGVmaW5lIFNIVkVSIDEJCQkJLyogVmVyc2lvbnMgKi8KKyNkZWZpbmUgU0hDT00g MgkJCQkvKiBDb21tdW5pY2F0aW9ucyAqLworI2RlZmluZSBTSFBSTyAzCQkJCS8qIFByb3RvY29s ICovCisjZGVmaW5lIFNIRklMIDQJCQkJLyogRmlsZSAqLworI2RlZmluZSBTSExORyA1CQkJCS8q IExhbmd1YWdlICovCisjZGVmaW5lIFNIQ09VIDYJCQkJLyogQ291bnQgKi8KKyNkZWZpbmUgU0hN QUMgNwkJCQkvKiBNYWNyb3MgKi8KKyNkZWZpbmUgU0hLRVkgOAkJCQkvKiBLZXkgKi8KKyNkZWZp bmUgU0hTQ1IgOQkJCQkvKiBTY3JpcHRzICovCisjZGVmaW5lIFNIU1BEIDEwCQkJLyogU3BlZWQg Ki8KKyNkZWZpbmUgU0hTVEEgMTEJCQkvKiBTdGF0dXMgKi8KKyNkZWZpbmUgU0hTRVIgMTIJCQkv KiBTZXJ2ZXIgKi8KKyNkZWZpbmUgU0hYTUkgMTMJCQkvKiBUcmFuc21pdCAqLworI2RlZmluZSBT SEFUVCAxNAkJCS8qIEF0dHJpYnV0ZXMgKi8KKyNkZWZpbmUgU0hNT0QgMTUJCQkvKiBNb2RlbSAq LworI2RlZmluZSBTSERGTFQgMTYJCQkvKiBEZWZhdWx0IChhcyBpbiBWTVMpICovCisjZGVmaW5l IFNIVkFSIDE3CQkJLyogU2hvdyBnbG9iYWwgdmFyaWFibGVzICovCisjZGVmaW5lIFNIQVJHIDE4 CQkJLyogU2hvdyBtYWNybyBhcmd1bWVudHMgKi8KKyNkZWZpbmUgU0hBUlIgMTkJCQkvKiBTaG93 IGFycmF5cyAqLworI2RlZmluZSBTSEJVSSAyMAkJCS8qIFNob3cgYnVpbHRpbiB2YXJpYWJsZXMg Ki8KKyNkZWZpbmUgU0hGVU4gMjEJCQkvKiBTaG93IGZ1bmN0aW9ucyAqLworI2RlZmluZSBTSFBB RCAyMgkJCS8qIFNob3cgKFguMjUpIFBBRCAqLworI2RlZmluZSBTSFRFUiAyMwkJCS8qIFNob3cg dGVybWluYWwgc2V0dGluZ3MgKi8KKyNkZWZpbmUgU0hFU0MgMjQJCQkvKiBTaG93IGVzY2FwZSBj aGFyYWN0ZXIgKi8KKyNkZWZpbmUgU0hESUEgMjUJCQkvKiBTaG93IERJQUwgcGFyYW1ldGVycyAq LworI2RlZmluZSBTSE5FVCAyNgkJCS8qIFNob3cgbmV0d29yayBwYXJhbWV0ZXJzICovCisjZGVm aW5lIFNITEJMIDI3CQkJLyogU2hvdyBWTVMgbGFiZWxlZCBmaWxlIHBhcmFtZXRlcnMgKi8KKyNk ZWZpbmUgU0hTVEsgMjgJCQkvKiBTaG93IHN0YWNrLCBNQUMgZGVidWdnaW5nICovCisjZGVmaW5l IFNIQ1NFIDI5CQkJLyogU2hvdyBjaGFyYWN0ZXIgc2V0cyAqLworI2RlZmluZSBTSEZFQSAzMAkJ CS8qIFNob3cgZmVhdHVyZXMgKi8KKyNkZWZpbmUgU0hDVEwgMzEJCQkvKiBTaG93IGNvbnRyb2wt cHJlZml4IHRhYmxlICovCisjZGVmaW5lIFNIRVhJIDMyCQkJLyogU2hvdyBFWElUIGl0ZW1zICov CisjZGVmaW5lIFNIUFJUIDMzCQkJLyogU2hvdyBwcmludGVyICovCisjZGVmaW5lIFNIQ01EIDM0 CQkJLyogU2hvdyBjb21tYW5kIHBhcmFtZXRlcnMgKi8KKyNkZWZpbmUgU0hLVkIgMzUJCQkvKiBT aG93IFxLdmVyYnMgKi8KKyNkZWZpbmUgU0hNT1UgMzYJCQkvKiBTaG93IE1vdXNlIChsaWtlIFNo b3cgS2V5KSAqLworI2RlZmluZSBTSFRBQiAzNwkJCS8qIFNob3cgVGFicyAoT1MvMikgKi8KKyNk ZWZpbmUgU0hWU0NSTiAzOAkJCS8qIFNob3cgVmlydHVhbCBTY3JlZW4gKE9TLzIpICovCisjZGVm aW5lIFNIQUxSTSAgMzkJCQkvKiBBTEFSTSAqLworI2RlZmluZSBTSFNGTCAgIDQwCQkJLyogU0VO RC1MSVNUICovCisjZGVmaW5lIFNIVURLICAgNDEgICAgICAgICAgICAgICAgICAgICAgLyogREVD IFZUIFVES3MgKE9TLzIpICovCisjZGVmaW5lIFNIREJMICAgNDIJCQkvKiBET1VCTEUvSUdOT1JF IGNoYXJhY3RlcnMgKi8KKyNkZWZpbmUgU0hFRElUICAgIDQzCQkJLyogRURJVE9SICovCisjZGVm aW5lIFNIQlJPV1NFICA0NAkJCS8qIEJST1dTRVIgKi8KKyNkZWZpbmUgU0hUQVBJICAgIDQ1CQkJ LyogVEFQSSAqLworI2RlZmluZSBTSFRBUElfTCAgNDYJCQkvKiBUQVBJIExvY2F0aW9uICovCisj ZGVmaW5lIFNIVEFQSV9NICA0NwkJCS8qIFRBUEkgTW9kZW0gUHJvcGVydGllcyAqLworI2RlZmlu ZSBTSFRBUElfQyAgNDgJCQkvKiBUQVBJIENvbW0gUHJvcGVydGllcyAgKi8KKyNkZWZpbmUgU0hU RUwgICAgIDQ5CQkJLyogU0hPVyBURUxORVQgKi8KKyNkZWZpbmUgU0hJTlAgICAgIDUwCQkJLyog U0hPVyBJTlBVVCAqLworI2RlZmluZSBTSFRSSUcgICAgNTEJCQkvKiBTSE9XIFRSSUdHRVIgKi8K KyNkZWZpbmUgU0hMT0cgICAgIDUyCQkJLyogU0hPVyBMT0dTICovCisjZGVmaW5lIFNIT1VUUCAg ICA1MwkJCS8qIFNIT1cgT1VUUFVUICovCisjZGVmaW5lIFNIT1BBVCAgICA1NAkJCS8qIFNIT1cg UEFUVEVSTlMgKi8KKyNkZWZpbmUgU0hPU1RSICAgIDU1CQkJLyogU0hPVyBTVFJFQU1JTkcgKi8K KyNkZWZpbmUgU0hPQVVUSCAgIDU2CQkJLyogU0hPVyBBVVRIRU5USUNBVElPTiAqLworI2RlZmlu ZSBTSE9GVFAgICAgNTcJCQkvKiBTSE9XIEZUUCAqLworI2RlZmluZSBTSFRPUFQgICAgNTggICAg ICAgICAgICAgICAgICAgIC8qIFNIT1cgVEVMT1BUICovCisjZGVmaW5lIFNIWE9QVCAgICA1OQkJ CS8qIFNIT1cgRVhURU5ERUQtT1BUSU9OUyAqLworI2RlZmluZSBTSENEICAgICAgNjAJCQkvKiBT SE9XIENEICovCisjZGVmaW5lIFNIQVNTT0MgICA2MQkJCS8qIFNIT1cgQVNTT0NJQVRJT05TICov CisjZGVmaW5lIFNIQ09OTlggICA2MgkJCS8qIFNIT1cgQ09OTkVDVElPTiAqLworI2RlZmluZSBT SE9QVFMgICAgNjMJCQkvKiBTSE9XIE9QVElPTlMgKi8KKyNkZWZpbmUgU0hPRkxPICAgIDY0CQkJ LyogU0hPVyBGTE9XLUNPTlRST0wgKi8KKyNkZWZpbmUgU0hPWEZFUiAgIDY1CQkJLyogU0hPVyBU UkFOU0ZFUiAqLworI2RlZmluZSBTSFRDUCAgICAgNjYgICAgICAgICAgICAgICAgICAgIC8qIFNI T1cgVENQICovCisjZGVmaW5lIFNISElTVE9SWSA2NwkJCS8qIFNIT1cgKGNvbW1hbmQpIEhJU1RP UlkgKi8KKyNkZWZpbmUgU0hTRVhQICAgIDY4CQkJLyogU0hPVyBTRVhQUkVTU0lPTlMgKi8KKyNk ZWZpbmUgU0hPU1NIICAgIDY5CQkJLyogU0hPVyBTU0ggKi8KKyNkZWZpbmUgU0hPSUtTICAgIDcw ICAgICAgICAgICAgICAgICAgICAvKiBTSE9XIElLUyAqLworI2RlZmluZSBTSE9HVUkgICAgNzEJ CQkvKiBTSE9XIEdVSSAoSzk1KSAqLworI2RlZmluZSBTSE9SRU4gICAgNzIJCQkvKiBTSE9XIFJF TkFNRSAqLworCisvKiBSRU1PVEUgY29tbWFuZCBzeW1ib2xzICovCisKKyNkZWZpbmUgWFpDUFkg IDAJLyogQ29weSAqLworI2RlZmluZSBYWkNXRCAgMQkvKiBDaGFuZ2UgV29ya2luZyBEaXJlY3Rv cnkgKi8KKyNkZWZpbmUgWFpERUwgIDIJLyogRGVsZXRlICovCisjZGVmaW5lIFhaRElSICAzCS8q IERpcmVjdG9yeSAqLworI2RlZmluZSBYWkhMUCAgNAkvKiBIZWxwICovCisjZGVmaW5lIFhaSE9T ICA1CS8qIEhvc3QgKi8KKyNkZWZpbmUgWFpLRVIgIDYJLyogS2VybWl0ICovCisjZGVmaW5lIFha TEdJICA3CS8qIExvZ2luICovCisjZGVmaW5lIFhaTEdPICA4CS8qIExvZ291dCAqLworI2RlZmlu ZSBYWk1BSSAgOQkvKiBNYWlsIDwtLSB3cm9uZywgdGhpcyBzaG91bGQgYmUgdG9wLWxldmVsICov CisjZGVmaW5lIFhaTU9VIDEwCS8qIE1vdW50ICovCisjZGVmaW5lIFhaTVNHIDExCS8qIE1lc3Nh Z2UgKi8KKyNkZWZpbmUgWFpQUkkgMTIJLyogUHJpbnQgKi8KKyNkZWZpbmUgWFpSRU4gMTMJLyog UmVuYW1lICovCisjZGVmaW5lIFhaU0VUIDE0CS8qIFNldCAqLworI2RlZmluZSBYWlNQQSAxNQkv KiBTcGFjZSAqLworI2RlZmluZSBYWlNVQiAxNgkvKiBTdWJtaXQgKi8KKyNkZWZpbmUgWFpUWVAg MTcJLyogVHlwZSAqLworI2RlZmluZSBYWldITyAxOAkvKiBXaG8gKi8KKyNkZWZpbmUgWFpQV0Qg MTkJLyogUHJpbnQgV29ya2luZyBEaXJlY3RvcnkgKi8KKyNkZWZpbmUgWFpRVUUgMjAJLyogUXVl cnkgKi8KKyNkZWZpbmUgWFpBU0cgMjEJLyogQXNzaWduICovCisjZGVmaW5lIFhaTUtEIDIyCS8q IG1rZGlyICovCisjZGVmaW5lIFhaUk1EIDIzCS8qIHJtZGlyICovCisjZGVmaW5lIFhaWElUIDI0 CS8qIEV4aXQgKi8KKyNkZWZpbmUgWFpDRFUgMjUgICAgICAgIC8qIENEVVAgKi8KKworLyogU0VU IElOUFVUIGNvbW1hbmQgcGFyYW1ldGVycyAqLworCisjZGVmaW5lIElOX0RFRiAgMAkJCS8qIERl ZmF1bHQgdGltZW91dCAqLworI2RlZmluZSBJTl9USU0gIDEJCQkvKiBUaW1lb3V0IGFjdGlvbiAq LworI2RlZmluZSBJTl9DQVMgIDIJCQkvKiBDYXNlIChtYXRjaGluZykgKi8KKyNkZWZpbmUgSU5f RUNIICAzCQkJLyogRWNobyAqLworI2RlZmluZSBJTl9TSUwgIDQJCQkvKiBTaWxlbmNlICovCisj ZGVmaW5lIElOX0JVRiAgNQkJCS8qIEJ1ZmZlciBzaXplICovCisjZGVmaW5lIElOX1BBQyAgNiAg ICAgICAgICAgICAgICAgICAgICAgLyogSW5wdXQgUGFjaW5nIChkZWJ1ZykgKi8KKyNkZWZpbmUg SU5fVFJNICA3CQkJLyogSW5wdXQgVGVybWluYWwgRGlzcGxheSAqLworI2RlZmluZSBJTl9BREwg IDgJCQkvKiBJbnB1dCBhdXRvZG93bmxvYWQgKi8KKyNkZWZpbmUgSU5fUEFUICA5CQkJLyogUGF0 dGVybiB0byBtYXRjaCAqLworI2RlZmluZSBJTl9BU0cgMTAgCQkJLyogQXNzaWduIG1hdGNoaW5n IHRleHQgdG8gdmFyaWFibGUgKi8KKyNkZWZpbmUgSU5fQ0FOIDExCQkJLyogS2V5Ym9hcmQgY2Fu Y2VsbGF0aW9uIG9mIElOUFVUICovCisjZGVmaW5lIElOX1NDQSAxMgkJCS8qIFRpbWVvdXQgc2Nh bGluZyAqLworCisvKiBFTkFCTEUvRElTQUJMRSBjb21tYW5kIHBhcmFtZXRlcnMgKi8KKworI2Rl ZmluZSBFTl9BTEwgIDAJCQkvKiBBTEwgKi8KKyNkZWZpbmUgRU5fQ1dEICAxCQkJLyogQ0QvQ1dE ICovCisjZGVmaW5lIEVOX0RJUiAgMgkJCS8qIERJUkVDVE9SWSAqLworI2RlZmluZSBFTl9GSU4g IDMJCQkvKiBGSU5JU0ggKi8KKyNkZWZpbmUgRU5fR0VUICA0CQkJLyogR0VUICovCisjZGVmaW5l IEVOX0hPUyAgNQkJCS8qIEhPU1QgY29tbWFuZCAqLworI2RlZmluZSBFTl9LRVIgIDYJCQkvKiBL RVJNSVQgY29tbWFuZCAqLworI2RlZmluZSBFTl9MT0cgIDcJCQkvKiBMT0dJTiAqLworI2RlZmlu ZSBFTl9TRU4gIDgJCQkvKiBTRU5EICovCisjZGVmaW5lIEVOX1NFVCAgOQkJCS8qIFNFVCAqLwor I2RlZmluZSBFTl9TUEEgMTAJCQkvKiBTUEFDRSAqLworI2RlZmluZSBFTl9UWVAgMTEJCQkvKiBU WVBFICovCisjZGVmaW5lIEVOX1dITyAxMgkJCS8qIFdITywgZmluZ2VyICovCisjZGVmaW5lIEVO X0RFTCAxMwkJCS8qIERlbGV0ZSAqLworI2RlZmluZSBFTl9CWUUgMTQJCQkvKiBCWUUgKGFzIG9w cG9zZWQgdG8gRklOSVNIKSAqLworI2RlZmluZSBFTl9RVUUgMTUJCQkvKiBRVUVSWSAqLworI2Rl ZmluZSBFTl9BU0cgMTYJCQkvKiBBU1NJR04gKi8KKyNkZWZpbmUgRU5fQ1BZIDE3CQkJLyogQ09Q WSAqLworI2RlZmluZSBFTl9SRU4gMTgJCQkvKiBSRU5BTUUgKi8KKyNkZWZpbmUgRU5fUkVUIDE5 CQkJLyogUkVUUklFVkUgKi8KKyNkZWZpbmUgRU5fTUFJIDIwCQkJLyogTUFJTCAqLworI2RlZmlu ZSBFTl9QUkkgMjEJCQkvKiBQUklOVCAqLworI2RlZmluZSBFTl9NS0QgMjIJCQkvKiBNS0RJUiAq LworI2RlZmluZSBFTl9STUQgMjMJCQkvKiBSTURJUiAqLworI2RlZmluZSBFTl9YSVQgMjQJCQkv KiBFWElUICovCisjZGVmaW5lIEVOX0VOQSAyNQkJCS8qIEVOQUJMRSAqLworI2VuZGlmIC8qIE5P SUNQICovCisKKyNpZm5kZWYgTk9JQ1AKKy8qIENMRUFSIGNvbW1hbmQgc3ltYm9scyAqLworI2Rl ZmluZSBDTFJfREVWICAgIDEJCQkvKiBDbGVhciBEZXZpY2UgQnVmZmVycyAqLworI2RlZmluZSBD TFJfSU5QICAgIDIJCQkvKiBDbGVhciBJbnB1dCBCdWZmZXJzICovCisjZGVmaW5lIENMUl9CVEgg ICAgQ0xSX0RFVnxDTFJfSU5QCS8qIENsZWFyIERldmljZSBhbmQgSW5wdXQgKi8KKyNkZWZpbmUg Q0xSX1NDTCAgICA0CQkJLyogQ2xlYXIgU2Nyb2xsYmFjayBidWZmZXIgKi8KKyNkZWZpbmUgQ0xS X0NNRCAgICA4CQkJLyogQ2xlYXIgQ29tbWFuZCBTY3JlZW4gKi8KKyNkZWZpbmUgQ0xSX1RSTSAg IDE2CQkJLyogQ2xlYXIgVGVybWluYWwgU2NyZWVuICovCisjZGVmaW5lIENMUl9ESUEgICAzMgkJ CS8qIENsZWFyIERpYWwgU3RhdHVzICovCisjZGVmaW5lIENMUl9TRkwgICA2NAkJCS8qIENsZWFy IFNlbmQtRmlsZS1MaXN0ICovCisjZGVmaW5lIENMUl9BUEMgIDEyOAkJCS8qIENsZWFyIEFQQyAq LworI2RlZmluZSBDTFJfQUxSICAyNTYJCQkvKiBDbGVhciBBbGFybSAqLworI2RlZmluZSBDTFJf VFhUICA1MTIJCQkvKiBDbGVhciB0ZXh0LXBhdHRlcm5zICovCisjZGVmaW5lIENMUl9CSU4gMTAy NAkJCS8qIENsZWFyIGJpbmFyeS1wYXR0ZXJucyAqLworI2RlZmluZSBDTFJfU0NSIDIwNDgJCQkv KiBDbGVhciBzY3JlZW4gKi8KKyNkZWZpbmUgQ0xSX0tCRCA0MDk2CQkJLyogQ2xlYXIga2V5Ym9h cmQgYnVmZmVyICovCisjZW5kaWYgLyogTk9JQ1AgKi8KKworLyogU3ltYm9scyBmb3IgbG9ncyAq LworCisjZGVmaW5lIExPR0QgMAkJCQkvKiBEZWJ1Z2dpbmcgKi8KKyNkZWZpbmUgTE9HUCAxCQkJ CS8qIFBhY2tldHMgKi8KKyNkZWZpbmUgTE9HUyAyCQkJCS8qIFNlc3Npb24gKi8KKyNkZWZpbmUg TE9HVCAzCQkJCS8qIFRyYW5zYWN0aW9uICovCisjZGVmaW5lIExPR1ggNAkJCQkvKiBTY3JlZW4g Ki8KKyNkZWZpbmUgTE9HUiA1CQkJCS8qIFRoZSAib3BlbiByZWFkIiBmaWxlICovCisjZGVmaW5l IExPR1cgNgkJCQkvKiBUaGUgIm9wZW4gd3JpdGUvYXBwZW5kIiBmaWxlICovCisjZGVmaW5lIExP R0UgNwkJCQkvKiBFcnJvciAoZS5nLiBzdGRlcnIpICovCisjZGVmaW5lIExPR00gOAkJCQkvKiBU aGUgZGlhbGluZyBsb2cgKi8KKworI2lmbmRlZiBOT1NQTAorLyogU3ltYm9scyBmb3IgYnVpbHRp biB2YXJpYWJsZXMgKi8KKworI2RlZmluZSBWTl9BUkdDIDAJCQkvKiBBUkdDICovCisjZGVmaW5l IFZOX0NPVU4gMQkJCS8qIENPVU5UICovCisjZGVmaW5lIFZOX0RBVEUgMgkJCS8qIERBVEUgKi8K KyNkZWZpbmUgVk5fRElSRSAzCQkJLyogRElSRUNUT1JZICovCisjZGVmaW5lIFZOX0VSUk8gNAkJ CS8qIEVSUk9STEVWRUwgKi8KKyNkZWZpbmUgVk5fVElNRSA1CQkJLyogVElNRSAqLworI2RlZmlu ZSBWTl9WRVJTIDYJCQkvKiBWRVJTSU9OICovCisjZGVmaW5lIFZOX0lCVUYgNwkJCS8qIElOUFVU IGJ1ZmZlciAqLworI2RlZmluZSBWTl9TVUNDIDgJCQkvKiBTVUNDRVNTIGZsYWcgKi8KKyNkZWZp bmUgVk5fTElORSA5CQkJLyogTElORSAqLworI2RlZmluZSBWTl9BUkdTIDEwCQkJLyogUHJvZ3Jh bSBjb21tYW5kLWxpbmUgYXJnIGNvdW50ICovCisjZGVmaW5lIFZOX1NZU1QgMTEJCQkvKiBTeXN0 ZW0gdHlwZSAqLworI2RlZmluZSBWTl9TWVNWIDEyCQkJLyogU3lzdGVtIHZlcnNpb24gKi8KKyNk ZWZpbmUgVk5fUkVUICAxMwkJCS8qIFJFVFVSTiB2YWx1ZSAqLworI2RlZmluZSBWTl9GSUxFIDE0 CQkJLyogTW9zdCByZWNlbnQgZmlsZXNwZWMgKi8KKyNkZWZpbmUgVk5fTkRBVCAxNQkJCS8qIE51 bWVyaWMgZGF0ZSB5eXl5L21tL2RkICovCisjZGVmaW5lIFZOX0hPTUUgMTYJCQkvKiBIb21lIGRp cmVjdG9yeSAqLworI2RlZmluZSBWTl9TUEVFIDE3CQkJLyogVHJhbnNtaXNzaW9uIHNwZWVkICov CisjZGVmaW5lIFZOX0hPU1QgMTgJCQkvKiBIb3N0IG5hbWUgKi8KKyNkZWZpbmUgVk5fVFRZRiAx OQkJCS8qIFRUWSBmaWxlIGRlc2NyaXB0b3IgKFVOSVggb25seSkgKi8KKyNkZWZpbmUgVk5fUFJP RyAyMAkJCS8qIFByb2dyYW0gbmFtZSAqLworI2RlZmluZSBWTl9OVElNIDIxCQkJLyogTlRJTUUg Ki8KKyNkZWZpbmUgVk5fRkZDICAyMgkJCS8qIENoYXJhY3RlcnMgaW4gbGFzdCBmaWxlIHhmZXJy ZWQgKi8KKyNkZWZpbmUgVk5fVEZDICAyMwkJCS8qIENoYXJzIGluIGxhc3QgZmlsZSBncm91cCB4 ZmVycmVkICovCisjZGVmaW5lIFZOX0NQVSAgMjQJCQkvKiBDUFUgdHlwZSAqLworI2RlZmluZSBW Tl9DTURMIDI1CQkJLyogQ29tbWFuZCBsZXZlbCAqLworI2RlZmluZSBWTl9EQVkgIDI2ICAgICAg ICAgICAgICAgICAgICAgIC8qIERheSBvZiB3ZWVrLCBzdHJpbmcgKi8KKyNkZWZpbmUgVk5fTkRB WSAyNyAgICAgICAgICAgICAgICAgICAgICAvKiBEYXkgb2Ygd2VlaywgbnVtZXJpYyAqLworI2Rl ZmluZSBWTl9MQ0wgIDI4CQkJLyogTG9jYWwgKHZzKSByZW1vdGUgbW9kZSAqLworI2RlZmluZSBW Tl9DTURTIDI5CQkJLyogQ29tbWFuZCBzb3VyY2UgKi8KKyNkZWZpbmUgVk5fQ01ERiAzMAkJCS8q IENvbW1hbmQgZmlsZSBuYW1lICovCisjZGVmaW5lIFZOX01BQyAgMzEJCQkvKiBNYWNybyBuYW1l ICovCisjZGVmaW5lIFZOX0VYSVQgMzIJCQkvKiBFeGl0IHN0YXR1cyAqLworI2RlZmluZSBWTl9J Q0hSIDMzCQkJLyogSU5QVVQgY2hhcmFjdGVyICovCisjZGVmaW5lIFZOX0lDTlQgMzQJCQkvKiBJ TlBVVCBjb3VudCAqLworI2RlZmluZSBWTl9QUlRZIDM1CQkJLyogQ3VycmVudCBwYXJpdHkgKi8K KyNkZWZpbmUgVk5fRElBTCAzNgkJCS8qIERJQUwgc3RhdHVzICovCisjZGVmaW5lIFZOX0tFWUIg MzcJCQkvKiBLZXlib2FyZCB0eXBlICovCisjZGVmaW5lIFZOX0NQUyAgMzgJCQkvKiBDaGFycyBw ZXIgc2Vjb25kLCBsYXN0IHRyYW5zZmVyICovCisjZGVmaW5lIFZOX1JQTCAgMzkJCQkvKiBSZWNl aXZlIHBhY2tldCBsZW5ndGggKi8KKyNkZWZpbmUgVk5fU1BMICA0MAkJCS8qIFNlbmQgcGFja2V0 IGxlbmd0aCAqLworI2RlZmluZSBWTl9NT0RFIDQxCQkJLyogVHJhbnNmZXIgbW9kZSAodGV4dCwg YmluYXJ5KSAqLworI2RlZmluZSBWTl9SRVhYIDQyCQkJLyogUmV4eCByZXR1cm4gdmFsdWUgKi8K KyNkZWZpbmUgVk5fTkVXTCA0MwkJCS8qIE5ld2xpbmUgY2hhcmFjdGVyIG9yIHNlcXVlbmNlICov CisjZGVmaW5lIFZOX0NPTFMgNDQJCQkvKiBDb2x1bW5zIG9uIGNvbnNvbGUgc2NyZWVuICovCisj ZGVmaW5lIFZOX1JPV1MgNDUJCQkvKiBSb3dzIG9uIGNvbnNvbGUgc2NyZWVuICovCisjZGVmaW5l IFZOX1RUWVAgNDYJCQkvKiBUZXJtaW5hbCB0eXBlICovCisjZGVmaW5lIFZOX01JTlAgNDcJCQkv KiBNSU5QVVQgcmVzdWx0ICovCisjZGVmaW5lIFZOX0NPTk4gNDgJCQkvKiBDb25uZWN0aW9uIHR5 cGUgKi8KKyNkZWZpbmUgVk5fU1lTSSA0OQkJCS8qIFN5c3RlbSBJRCAqLworI2RlZmluZSBWTl9U WiAgIDUwCQkJLyogVGltZXpvbmUgKi8KKyNkZWZpbmUgVk5fU1BBICA1MQkJCS8qIFNwYWNlICov CisjZGVmaW5lIFZOX1FVRSAgNTIJCQkvKiBRdWVyeSAqLworI2RlZmluZSBWTl9TVEFSIDUzCQkJ LyogU3RhcnR1cCBkaXJlY3RvcnkgKi8KKyNkZWZpbmUgVk5fQ1NFVCA1NAkJCS8qIExvY2FsIGNo YXJhY3RlciBzZXQgKi8KKyNkZWZpbmUgVk5fTURNICA1NQkJCS8qIE1vZGVtIHR5cGUgKi8KKyNk ZWZpbmUgVk5fRVZBTCA1NgkJCS8qIE1vc3QgcmVjZW50IEVWQUxVQVRFIHJlc3VsdCAqLworCisj ZGVmaW5lIFZOX0RfQ0MgNTcJCQkvKiBESUFMIENPVU5UUlktQ09ERSAqLworI2RlZmluZSBWTl9E X0FDIDU4CQkJLyogRElBTCBBUkVBLUNPREUgKi8KKyNkZWZpbmUgVk5fRF9JUCA1OQkJCS8qIERJ QUwgSU5URVJOQVRJT05BTC1QUkVGSVggKi8KKyNkZWZpbmUgVk5fRF9MUCA2MAkJCS8qIERJQUwg TEQtUFJFRklYICovCisKKyNkZWZpbmUgVk5fVUlEICA2MQorI2RlZmluZSBWTl9QV0QgIDYyCisj ZGVmaW5lIFZOX1BSTSAgNjMKKworI2RlZmluZSBWTl9QUk9UTyA2NAkJCS8qIFByb3RvY29sICov CisjZGVmaW5lIFZOX0RMRElSIDY1CQkJLyogRG93bmxvYWQgZGlyZWN0b3J5ICovCisKKyNkZWZp bmUgVk5fTV9BQUEgNjYJCQkvKiBGaXJzdCBNT0RFTSBvbmUgKi8KKyNkZWZpbmUgVk5fTV9JTkkg NjYJCQkvKiBNb2RlbSBpbml0IHN0cmluZyAqLworI2RlZmluZSBWTl9NX0RDTSA2NwkJCS8qIE1v ZGVtIGRpYWwgY29tbWFuZCAqLworI2RlZmluZSBWTl9NX0RDTyA2OAkJCS8qIE1vZGVtIGRhdGEg Y29tcHJlc3Npb24gb24gKi8KKyNkZWZpbmUgVk5fTV9EQ1ggNjkJCQkvKiBNb2RlbSBkYXRhIGNv bXByZXNzaW9uIG9mZiAqLworI2RlZmluZSBWTl9NX0VDTyA3MAkJCS8qIE1vZGVtIGVycm9yIGNv cnJlY3Rpb24gb24gKi8KKyNkZWZpbmUgVk5fTV9FQ1ggNzEJCQkvKiBNb2RlbSBlcnJvciBjb3Jy ZWN0aW9uIG9mZiAqLworI2RlZmluZSBWTl9NX0FBTyA3MgkJCS8qIE1vZGVtIGF1dG9hbnN3ZXIg b24gKi8KKyNkZWZpbmUgVk5fTV9BQVggNzMJCQkvKiBNb2RlbSBhdXRvYW5zd2VyIG9mZiAqLwor I2RlZmluZSBWTl9NX0hVUCA3NAkJCS8qIE1vZGVtIGhhbmd1cCBjb21tYW5kICovCisjZGVmaW5l IFZOX01fSFdGIDc1CQkJLyogTW9kZW0gaGFyZHdhcmUgZmxvdyBjb21tYW5kICovCisjZGVmaW5l IFZOX01fU1dGIDc2CQkJLyogTW9kZW0gc29mdHdhcmUgZmxvdyBjb21tYW5kICovCisjZGVmaW5l IFZOX01fTkZDIDc3CQkJLyogTW9kZW0gbm8gZmxvdy1jb250cm9sIGNvbW1hbmQgKi8KKyNkZWZp bmUgVk5fTV9QRE0gNzgJCQkvKiBNb2RlbSBwdWxzZSBkaWFsaW5nIG1vZGUgKi8KKyNkZWZpbmUg Vk5fTV9URE0gNzkJCQkvKiBNb2RlbSB0b25lIGRpYWxpbmcgbW9kZSAqLworI2RlZmluZSBWTl9N X1paWiA3OQkJCS8qIExhc3QgTU9ERU0gb25lICovCisKKyNkZWZpbmUgVk5fU0VMQ1QgODAJCQkv KiBTZWxlY3RlZCBUZXh0IGZyb20gTWFyayBNb2RlICovCisjZGVmaW5lIFZOX1RFTVAgIDgxCQkJ LyogVGVtcG9yYXJ5IGRpcmVjdG9yeSAqLworI2RlZmluZSBWTl9JU1RBVCA4MgkJCS8qIElOUFVU IGNvbW1hbmQgc3RhdHVzICovCisjZGVmaW5lIFZOX0lOSSAgIDgzCQkJLyogSU5JIChrZXJtcmMp IGRpcmVjdG9yeSAqLworI2RlZmluZSBWTl9FWEVESVIgODQJCQkvKiBFWEUgZGlyZWN0b3J5ICov CisjZGVmaW5lIFZOX0VSUk5PICA4NQkJCS8qIFZhbHVlIG9mIGVycm5vICovCisjZGVmaW5lIFZO X0VSU1RSICA4NgkJCS8qIENvcnJlc3BvbmRpbmcgZXJyb3IgbWVzc2FnZSAqLworI2RlZmluZSBW Tl9URkxOICAgODcJCQkvKiBUQUtFIGZpbGUgbGluZSBudW1iZXIgKi8KKyNkZWZpbmUgVk5fWFZO VU0gIDg4CQkJLyogUHJvZHVjdC1zcGVjaWZpYyB2ZXJzaW9uIG51bWJlciAqLworI2RlZmluZSBW Tl9SUFNJWiAgODkJCQkvKiBSZWNlaXZlIHBhY2tldCBsZW5ndGggKi8KKyNkZWZpbmUgVk5fV0lO RE8gIDkwCQkJLyogV2luZG93IHNpemUgKi8KKyNkZWZpbmUgVk5fTURNU0cgIDkxCQkJLyogTW9k ZW0gbWVzc2FnZSAqLworI2RlZmluZSBWTl9ETlVNICAgOTIJCQkvKiBEaWFsIG51bWJlciAqLwor I2RlZmluZSBWTl9BUEMgICAgOTMJCQkvKiBBUEMgYWN0aXZlICovCisjZGVmaW5lIFZOX0lQQURE UiA5NAkJCS8qIE15IElQIGFkZHJlc3MgKi8KKyNkZWZpbmUgVk5fQ1JDMTYgIDk1CQkJLyogQ1JD LTE2IG9mIG1vc3QgcmVjZW50IGZpbGUgZ3JvdXAgKi8KKyNkZWZpbmUgVk5fVFJNSyAgIDk2ICAg ICAgICAgICAgICAgICAgICAvKiBNYWNybyBleGVjdXRlZCBmcm9tIFRlcm1pbmFsIE1vZGUgKi8K KyNkZWZpbmUgVk5fUElEICAgIDk3CQkJLyogUHJvY2VzcyBJRCAqLworI2RlZmluZSBWTl9GTkFN ICAgOTgJCQkvKiBOYW1lIG9mIGZpbGUgYmVpbmcgdHJhbnNmZXJyZWQgKi8KKyNkZWZpbmUgVk5f Rk5VTSAgIDk5CQkJLyogTnVtYmVyIG9mIGZpbGUgYmVpbmcgdHJhbnNmZXJyZWQgKi8KKyNkZWZp bmUgVk5fUEVYSVQgIDEwMAkJCS8qIFByb2Nlc3MgZXhpdCBzdGF0dXMgKi8KKyNkZWZpbmUgVk5f UF9DVEwgIDEwMSAJCQkvKiBDb250cm9sIFByZWZpeCAqLworI2RlZmluZSBWTl9QXzhCSVQgMTAy CQkJLyogOC1iaXQgcHJlZml4ICovCisjZGVmaW5lIFZOX1BfUlBUICAxMDMJCQkvKiBSZXBlYXQg Y291bnQgcHJlZml4ICovCisjZGVmaW5lIFZOX0RfTENQICAxMDQJCQkvKiBESUFMIExPQ0FMLVBS RUZJWCAqLworI2RlZmluZSBWTl9VUkwgICAgMTA1CQkJLyogTGFzdCBVUkwgc2VsZWN0ZWQgKi8K KyNkZWZpbmUgVk5fUkVHTiAgIDEwNgkJCS8qIFJlZ2lzdHJhdGlvbiBOYW1lICovCisjZGVmaW5l IFZOX1JFR08gICAxMDcJCQkvKiBSZWdpc3RyYXRpb24gT3JnYW5pemF0aW9uICovCisjZGVmaW5l IFZOX1JFR1MgICAxMDgJCQkvKiBSZWdpc3RyYXRpb24gU2VyaWFsIG51bWJlciAqLworI2RlZmlu ZSBWTl9YUFJPRyAgMTA5CQkJLyogeHByb2dyYW0gKGxpa2UgeHZlcnNpb24pICovCisjZGVmaW5l IFZOX0VESVRPUiAxMTAJCQkvKiBFZGl0b3IgKi8KKyNkZWZpbmUgVk5fRURPUFQgIDExMQkJCS8q IEVkaXRvciBvcHRpb25zICovCisjZGVmaW5lIFZOX0VERklMRSAxMTIJCQkvKiBFZGl0b3IgZmls ZSAqLworI2RlZmluZSBWTl9CUk9XU1IgMTEzCQkJLyogQnJvd3NlciAqLworI2RlZmluZSBWTl9C Uk9QVCAgMTE0CQkJLyogQnJvd3NlciBvcHRpb25zICovCisjZGVmaW5lIFZOX0hFUkFMRCAxMTUJ CQkvKiBQcm9ncmFtIGhlcmFsZCAqLworI2RlZmluZSBWTl9URVNUICAgMTE2CQkJLyogUHJvZ3Jh bSB0ZXN0IGxldmVsIG9yICIwIiAqLworI2RlZmluZSBWTl9YRlNUQVQgMTE3CQkJLyogRmlsZS1U cmFuc2ZlciBzdGF0dXMgKi8KKyNkZWZpbmUgVk5fWEZNU0cgIDExOQkJCS8qIEZpbGUtVHJhbnNm ZXIgbWVzc2FnZSAqLworI2RlZmluZSBWTl9TTkRMICAgMTIwCQkJLyogU2VuZC1saXN0IHN0YXR1 cyAqLworI2RlZmluZSBWTl9UUklHICAgMTIxCQkJLyogVHJpZ2dlciB2YWx1ZSAqLworI2RlZmlu ZSBWTl9NT1VfWCAgMTIyICAgICAgICAgICAgICAgICAgIC8qIE9TLzIgTW91c2UgQ3Vyc29yIFgg Ki8KKyNkZWZpbmUgVk5fTU9VX1kgIDEyMyAgICAgICAgICAgICAgICAgICAvKiBPUy8yIE1vdXNl IEN1cnNvciBZICovCisjZGVmaW5lIFZOX1BSSU5UICAxMjQJCQkvKiBQcmludGVyICovCisjZGVm aW5lIFZOX0VTQyAgICAxMjUJCQkvKiBFc2NhcGUgY2hhcmFjdGVyICovCisjZGVmaW5lIFZOX0lO VElNRSAxMjYJCQkvKiBJTlBVVCBlbGFwc2VkIHRpbWUgKi8KKyNkZWZpbmUgVk5fSzRSTE0gIDEy NwkJCS8qIEtlcmJlcm9zIDQgUmVhbG0gKi8KKyNkZWZpbmUgVk5fSzVSTE0gIDEyOAkJCS8qIEtl cmJlcm9zIDUgUmVhbG0gKi8KKyNkZWZpbmUgVk5fSzRQUk4gIDEyOQkJCS8qIEtlcmJlcm9zIDQg UHJpbmNpcGFsICovCisjZGVmaW5lIFZOX0s1UFJOICAxMzAJCQkvKiBLZXJiZXJvcyA1IFByaW5j aXBhbCAqLworI2RlZmluZSBWTl9LNENDICAgMTMxCQkJLyogS2VyYmVyb3MgNCBDcmVkZW50aWFs cyBDYWNoZSAqLworI2RlZmluZSBWTl9LNUNDICAgMTMyCQkJLyogS2VyYmVyb3MgNSBDcmVkZW50 aWFscyBDYWNoZSAqLworI2RlZmluZSBWTl9PU05BTSAgMTMzCQkJLyogT1MgbmFtZSAqLworI2Rl ZmluZSBWTl9PU1ZFUiAgMTM0CQkJLyogT1MgdmVyc2lvbiAqLworI2RlZmluZSBWTl9PU1JFTCAg MTM1CQkJLyogT1MgcmVsZWFzZSAqLworI2RlZmluZSBWTl9OQU1FICAgMTM2CQkJLyogTmFtZSBJ IHdhcyBjYWxsZWQgYnkgKi8KKyNkZWZpbmUgVk5fTU9ETCAgIDEzNwkJCS8qIENQVSBtb2RlbCAq LworI2RlZmluZSBWTl9YMjVMQSAgMTM4CQkJLyogWC4yNSBsb2NhbCBhZGRyZXNzICovCisjZGVm aW5lIFZOX1gyNVJBICAxMzkJCQkvKiBYLjI1IHJlbW90ZSBhZGRyZXNzICovCisjZGVmaW5lIFZO X0s0U1JWICAxNDAgICAgICAgICAgICAgICAgICAgLyogS2VyYmVyb3MgNCBTZXJ2aWNlIE5hbWUg Ki8KKyNkZWZpbmUgVk5fSzVTUlYgIDE0MSAgICAgICAgICAgICAgICAgICAvKiBLZXJiZXJvcyA1 IFNlcnZpY2UgTmFtZSAqLworI2RlZmluZSBWTl9QRFNGWCAgMTQyCQkJLyogUERJQUwgc3VmZml4 ICovCisjZGVmaW5lIFZOX0RUWVBFICAxNDMJCQkvKiBESUFMIHR5cGUgKi8KKyNkZWZpbmUgVk5f TENLUElEIDE0NAkJCS8qIExvY2tmaWxlIFBJRCAoVU5JWCkgKi8KKyNkZWZpbmUgVk5fQkxLICAg IDE0NQkJCS8qIEJsb2NrIGNoZWNrICovCisjZGVmaW5lIFZOX1RGVElNICAxNDYJCQkvKiBGaWxl IHRyYW5zZmVyIGVsYXBzZWQgdGltZSAqLworI2RlZmluZSBWTl9EX1BYWCAgMTQ3IAkJCS8qIERJ QUwgUEJYLUVYQ0hBTkdFICovCisjZGVmaW5lIFZOX0hXUEFSICAxNDggCQkJLyogSGFyZHdhcmUg UGFyaXR5ICovCisjZGVmaW5lIFZOX1NFUklBTCAxNDkgCQkJLyogU0VUIFNFUklBTCB2YWx1ZSAq LworI2RlZmluZSBWTl9MQ0tESVIgMTUwCQkJLyogTG9ja2ZpbGUgZGlyZWN0b3J5IChVTklYKSAq LworCisjZGVmaW5lIFZOX0s0RU5PICAxNTEgICAgICAgICAgICAgICAgICAgLyogS2VyYmVyb3Mg NCBMYXN0IEVycm5vICovCisjZGVmaW5lIFZOX0s0RU1TRyAxNTIgICAgICAgICAgICAgICAgICAg LyogS2VyYmVyb3MgNCBMYXN0IEVyciBNc2cgKi8KKyNkZWZpbmUgVk5fSzVFTk8gIDE1MyAgICAg ICAgICAgICAgICAgICAvKiBLZXJiZXJvcyA1IExhc3QgRXJybm8gKi8KKyNkZWZpbmUgVk5fSzVF TVNHIDE1NCAgICAgICAgICAgICAgICAgICAvKiBLZXJiZXJvcyA1IExhc3QgRXJyIE1zZyAqLwor CisjZGVmaW5lIFZOX0lOVE1PICAxNTUJCQkvKiBJbnB1dCB0aW1lb3V0ICovCisjZGVmaW5lIFZO X0FVVEhTICAxNTYgICAgICAgICAgICAgICAgICAgLyogQXV0aGVudGljYXRpb24gU3RhdGUgKi8K KworI2RlZmluZSBWTl9ETV9MUCAgMTU3CQkJLyogRGlhbCBNb2RpZmllcjogTG9uZyBQYXVzZSAq LworI2RlZmluZSBWTl9ETV9TUCAgMTU4CQkJLyogRGlhbCBNb2RpZmllcjogU2hvcnQgUGF1c2Ug Ki8KKyNkZWZpbmUgVk5fRE1fUEQgIDE1OQkJCS8qIERpYWwgTW9kaWZpZXI6IFB1bHNlIERpYWwg Ki8KKyNkZWZpbmUgVk5fRE1fVEQgIDE2MAkJCS8qIERpYWwgTW9kaWZpZXI6IFRvbmUgRGlhbCAq LworI2RlZmluZSBWTl9ETV9XQSAgMTYxCQkJLyogRGlhbCBNb2RpZmllcjogV2FpdCBmb3IgQW5z d2VyICovCisjZGVmaW5lIFZOX0RNX1dEICAxNjIJCQkvKiBEaWFsIE1vZGlmaWVyOiBXYWl0IGZv ciBEaWFsdG9uZSAqLworI2RlZmluZSBWTl9ETV9SQyAgMTYzCQkJLyogRGlhbCBNb2RpZmllcjog UmV0dXJuIHRvIENvbW1hbmQgKi8KKworLyogKG1vcmUgYmVsb3cuLi4pICovCisKKyNkZWZpbmUg Vk5fVFlfTE4gIDE2NAkJCS8qIFRZUEUgY29tbWFuZCBsaW5lIG51bWJlciAqLworI2RlZmluZSBW Tl9UWV9MQyAgMTY1CQkJLyogVFlQRSBjb21tYW5kIGxpbmUgY291bnQgKi8KKyNkZWZpbmUgVk5f VFlfTE0gIDE2NgkJCS8qIFRZUEUgY29tbWFuZCBtYXRjaCBjb3VudCAqLworCisjZGVmaW5lIFZO X01BQ0xWTCAxNjcJCQkvKiBcdihtYWNsZXZlbCkgKi8KKworI2RlZmluZSBWTl9YRl9CQyAgMTY4 CQkJLyogVHJhbnNmZXIgYmxvY2tjaGVjayBlcnJvcnMgKi8KKyNkZWZpbmUgVk5fWEZfVE0gIDE2 OQkJCS8qIFRyYW5zZmVyIHRpbWVvdXRzICovCisjZGVmaW5lIFZOX1hGX1JYICAxNzAJCQkvKiBU cmFuc2ZlciByZXRyYW5zbWlzc2lvbnMgKi8KKworI2RlZmluZSBWTl9NX05BTSAgMTcxCQkJLyog TW9kZW0gZnVsbCBuYW1lICAqLworI2RlZmluZSBWTl9NU19DRCAgMTcyCQkJLyogTW9kZW0gc2ln bmFsIENEICAqLworI2RlZmluZSBWTl9NU19DVFMgMTczCQkJLyogTW9kZW0gc2lnbmFsIENUUyAq LworI2RlZmluZSBWTl9NU19EU1IgMTc0CQkJLyogTW9kZW0gc2lnbmFsIERTUiAqLworI2RlZmlu ZSBWTl9NU19EVFIgMTc1CQkJLyogTW9kZW0gc2lnbmFsIERUUiAqLworI2RlZmluZSBWTl9NU19S SSAgMTc2CQkJLyogTW9kZW0gc2lnbmFsIFJJICAqLworI2RlZmluZSBWTl9NU19SVFMgMTc3CQkJ LyogTW9kZW0gc2lnbmFsIFJUUyAqLworCisjZGVmaW5lIFZOX01BVENIICAxNzgJCQkvKiBNb3N0 IHJlY2VudCBwYXR0ZXJuIG1hdGNoICovCisjZGVmaW5lIFZOX1NMTVNHICAxNzkJCQkvKiBTRVQg TElORSAoZXJyb3IpIG1lc3NhZ2UgKi8KKyNkZWZpbmUgVk5fVFhURElSIDE4MAkJCS8qIEtlcm1p dCB0ZXh0LWZpbGUgZGlyZWN0b3J5ICovCisjZGVmaW5lIFZOX01BX1BJICAxODEJCQkvKiBNYXRo IGNvbnN0YW50IFBpICovCisjZGVmaW5lIFZOX01BX0UgICAxODIJCQkvKiBNYXRoIGNvbnN0YW50 IGUgKi8KKyNkZWZpbmUgVk5fTUFfUFIgIDE4MwkJCS8qIE1hdGggcHJlY2lzaW9uIChkaWdpdHMp ICovCisjZGVmaW5lIFZOX0NNREJMICAxODQJCQkvKiBDb21tYW5kIGJ1ZmZlciBsZW5ndGggKi8K KworI2RlZmluZSBWTl9BVVRIVCAgMTg1ICAgICAgICAgICAgICAgICAgIC8qIEF1dGhlbnRpY2F0 aW9uIFR5cGUgKi8KKworI2lmZGVmIENLQ0hBTk5FTElPCisjZGVmaW5lIFZOX0ZFUlIgICAxODYJ CQkvKiBGSUxFIGVycm9yICovCisjZGVmaW5lIFZOX0ZNQVggICAxODcJCQkvKiBGSUxFIG1heCAq LworI2RlZmluZSBWTl9GQ09VICAgMTg4CQkJLyogUmVzdWx0IG9mIGxhc3QgRklMRSBDT1VOVCAq LworI2VuZGlmIC8qIENLQ0hBTk5FTElPICovCisKKyNkZWZpbmUgVk5fRFJUUiAgIDE4OQkJCS8q IERJQUwgcmV0cnkgY291bnRlciAqLworI2RlZmluZSBWTl9DWFRJTUUgMTkwCQkJLyogRWxhcHNl ZCB0aW1lIGluIHNlc3Npb24gKi8KKyNkZWZpbmUgVk5fQllURSAgIDE5MQkJCS8qIEJ5dGUgb3Jk ZXIgKi8KKyNkZWZpbmUgVk5fQVVUSE4gIDE5MiAgICAgICAgICAgICAgICAgICAvKiBBdXRoZW50 aWNhdGlvbiBOYW1lICovCisjZGVmaW5lIFZOX0tCQ0hBUiAxOTMJCQkvKiBrYmNoYXIgKi8KKyNk ZWZpbmUgVk5fVFRZTkFNIDE5NAkJCS8qIE5hbWUgb2YgY29udHJvbGxpbmcgdGVybWluYWwgKi8K KworI2RlZmluZSBWTl9YNTA5X1MgMTk1ICAgICAgICAgICAgICAgICAgIC8qIFguNTA5IENlcnRp ZmljYXRlIFN1YmplY3QgKi8KKyNkZWZpbmUgVk5fWDUwOV9JIDE5NiAgICAgICAgICAgICAgICAg ICAvKiBYLjUwOSBDZXJ0aWZpY2F0ZSBJc3N1ZXIgICovCisKKyNkZWZpbmUgVk5fUFJPTVBUIDE5 NwkJCS8qIEMtS2VybWl0J3MgcHJvbXB0ICovCisjZGVmaW5lIFZOX0JVSUxEICAxOTgJCQkvKiBC dWlsZCBJRCBzdHJpbmcgKi8KKworI2RlZmluZSBWTl9TRVhQICAgMTk5CQkJLyogTGFzdCBTLUV4 cHJlc3Npb24gKi8KKyNkZWZpbmUgVk5fVlNFWFAgIDIwMAkJCS8qIFZhbHVlIG9mIGxhc3QgUy1F eHByZXNzaW9uICovCisjZGVmaW5lIFZOX0xTRVhQICAyMDEJCQkvKiBTRVhQIGRlcHRoICovCisK KyNkZWZpbmUgVk5fRlRJTUUgIDIwMgkJCS8qIFRpbWUgYXMgZmxvYXRpbmctcG9pbmcgbnVtYmVy ICovCisKKyNkZWZpbmUgVk5fRlRQX0MgIDIwMyAgICAgICAgICAgICAgICAgICAvKiBGVFAgUmVw bHkgQ29kZSAqLworI2RlZmluZSBWTl9GVFBfTSAgMjA0ICAgICAgICAgICAgICAgICAgIC8qIEZU UCBSZXBseSBNZXNzYWdlICovCisjZGVmaW5lIFZOX0ZUUF9TICAyMDUJCQkvKiBGVFAgU2VydmVy IHR5cGUgKi8KKyNkZWZpbmUgVk5fRlRQX0ggIDIwNgkJCS8qIEZUUCBIb3N0ICovCisjZGVmaW5l IFZOX0ZUUF9YICAyMDcJCQkvKiBGVFAgQ29ubmVjdGVkICovCisjZGVmaW5lIFZOX0ZUUF9MICAy MDgJCQkvKiBGVFAgTG9nZ2VkIGluICovCisjZGVmaW5lIFZOX0ZUUF9HICAyMDkJCQkvKiBGVFAg R0VULVBVVC1SRU1PVEUgc2V0dGluZyAqLworCisjZGVmaW5lIFZOX1NFQ1VSRSAyMTAgICAgICAg ICAgICAgICAgICAgLyogRW5jcnlwdGVkIGNvbm5lY3Rpb24gMCBvciAxICovCisKKyNkZWZpbmUg Vk5fRE1fSEYgIDIxMQkJCS8qIERpYWwgTW9kaWZpZXI6IEhvb2sgRmxhc2ggKi8KKyNkZWZpbmUg Vk5fRE1fV0IgIDIxMgkJCS8qIERpYWwgTW9kaWZpZXI6IFdhaXQgZm9yIEJvbmcgKi8KKyNkZWZp bmUgVk5fQ1hfU1RBIDIxMwkJCS8qIENYX1NUQVRVUyAqLworCisjZGVmaW5lIFZOX0ZUUF9CICAy MTQgICAgICAgICAgICAgICAgICAgLyogRlRQIENQTCAqLworI2RlZmluZSBWTl9GVFBfRCAgMjE1 ICAgICAgICAgICAgICAgICAgIC8qIEZUUCBEUEwgKi8KKyNkZWZpbmUgVk5fRlRQX1ogIDIxNiAg ICAgICAgICAgICAgICAgICAvKiBGVFAgU0VDVVJJVFkgKi8KKyNkZWZpbmUgVk5fSFRUUF9DIDIx NyAgICAgICAgICAgICAgICAgICAvKiBIVFRQIENvZGUgKi8KKyNkZWZpbmUgVk5fSFRUUF9OIDIx OCAgICAgICAgICAgICAgICAgICAvKiBIVFRQIENvbm5lY3RlZCAqLworI2RlZmluZSBWTl9IVFRQ X0ggMjE5ICAgICAgICAgICAgICAgICAgIC8qIEhUVFAgSG9zdCAqLworI2RlZmluZSBWTl9IVFRQ X00gMjIwICAgICAgICAgICAgICAgICAgIC8qIEhUVFAgTWVzc2FnZSAqLworI2RlZmluZSBWTl9I VFRQX1MgMjIxICAgICAgICAgICAgICAgICAgIC8qIEhUVFAgU2VjdXJpdHkgKi8KKworI2RlZmlu ZSBWTl9OT1cgICAgMjIyCQkJLyogVGltZXN0YW1wIHl5eXltbWRkIGhoOm1tOnNzICovCisjZGVm aW5lIFZOX0hPVVIgICAyMjMJCQkvKiBDdXJyZW50IGhvdXIgb2YgdGhlIGRheSAwLTIzICovCisK KyNkZWZpbmUgVk5fQ0lfREEgIDIyNAkJCS8qIENhbGxlciBJRCBkYXRlICovCisjZGVmaW5lIFZO X0NJX1RJICAyMjUJCQkvKiBDYWxsZXIgSUQgdGltZSAqLworI2RlZmluZSBWTl9DSV9OQSAgMjI2 CQkJLyogQ2FsbGVyIElEIG5hbWUgKi8KKyNkZWZpbmUgVk5fQ0lfTlUgIDIyNwkJCS8qIENhbGxl ciBJRCBudW1iZXIgKi8KKyNkZWZpbmUgVk5fQ0lfTUUgIDIyOAkJCS8qIENhbGxlciBJRCBtZXNz YWdlICovCisjZGVmaW5lIFZOX1BFUlNPTkFMIDIyOSAgICAgICAgICAgICAgICAgLyogUGVyc29u YWwgRGlyZWN0b3J5IG9uIFdpbmRvd3MgKi8KKyNkZWZpbmUgVk5fQVBQREFUQSAgMjMwICAgICAg ICAgICAgICAgICAvKiBVc2VyIEFwcERhdGEgZGlyZWN0b3J5ICovCisjZGVmaW5lIFZOX0NPTU1P TiAgIDIzMSAgICAgICAgICAgICAgICAgLyogQ29tbW9uIEFwcERhdGEgZGlyZWN0b3J5ICovCisj ZGVmaW5lIFZOX0RFU0tUT1AgIDIzMiAgICAgICAgICAgICAgICAgLyogVXNlciBEZXNrdG9wIGRp cmVjdG9yeSAqLworI2RlZmluZSBWTl9UTkNfU0lHICAyMzMgICAgICAgICAgICAgICAgIC8qIFJG QyAyNzE3IFNpZ25hdHVyZSAqLworCisjaWZkZWYgS1VJCisjZGVmaW5lIFZOX0dVSV9YUCAgIDIz NCAgICAgICAgICAgICAgICAgLyogR1VJIFdpbmRvdyBYIHBvc2l0aW9uICovCisjZGVmaW5lIFZO X0dVSV9ZUCAgIDIzNSAgICAgICAgICAgICAgICAgLyogR1VJIFdpbmRvdyBZIHBvc2l0aW9uICov CisjZGVmaW5lIFZOX0dVSV9YUiAgIDIzNiAgICAgICAgICAgICAgICAgLyogR1VJIFdpbmRvdyBY IHJlc29sdXRpb24gKi8KKyNkZWZpbmUgVk5fR1VJX1lSICAgMjM3ICAgICAgICAgICAgICAgICAv KiBHVUkgV2luZG93IFkgcmVzb2x1dGlvbiAqLworI2RlZmluZSBWTl9HVUlfUlVOICAyMzggICAg ICAgICAgICAgICAgIC8qIEdVSSBXaW5kb3cgUnVuIG1vZGUgKi8KKyNkZWZpbmUgVk5fR1VJX0ZO TSAgMjM5ICAgICAgICAgICAgICAgICAvKiBHVUkgV2luZG93IEZvbnQgTmFtZSAqLworI2RlZmlu ZSBWTl9HVUlfRlNaICAyNDAgICAgICAgICAgICAgICAgIC8qIEdVSSBXaW5kb3cgRm9udCBTaXpl ICovCisjZW5kaWYgLyogS1VJICovCisKKyNkZWZpbmUgVk5fTE9HX1BLVCAgMjQxICAgICAgICAg ICAgICAgICAvKiBQYWNrZXQgTG9nIEZpbGVuYW1lICovCisjZGVmaW5lIFZOX0xPR19UUkEgIDI0 MiAgICAgICAgICAgICAgICAgLyogVHJhbnNhY3Rpb24gTG9nIEZpbGVuYW1lICovCisjZGVmaW5l IFZOX0xPR19TRVMgIDI0MyAgICAgICAgICAgICAgICAgLyogU2Vzc2lvbiBMb2cgRmlsZW5hbWUg Ki8KKyNkZWZpbmUgVk5fTE9HX0RFQiAgMjQ0ICAgICAgICAgICAgICAgICAvKiBEZWJ1ZyBMb2cg RmlsZW5hbWUgKi8KKyNkZWZpbmUgVk5fTE9HX0NPTiAgMjQ1ICAgICAgICAgICAgICAgICAvKiBD b25uZWN0aW9uIExvZyBGaWxlbmFtZSAqLworCisjZGVmaW5lIFZOX0lTQ0FMRSAgIDI0NgkJCS8q IElOUFVUIHNjYWxlIGZhY3RvciAqLworI2RlZmluZSBWTl9CSVRTICAgICAyNDcJCQkvKiBCaXRz IG9mIHRoaXMgYnVpbGQgKDE2LCAzMiwgNjQpICovCisjZGVmaW5lIFZOX0xBU1RGSUwgIDI0OAkJ CS8qIExhc3QgaW5wdXQgZmlsZXNwZWMgKi8KKyNkZWZpbmUgVk5fTEFTVEtXViAgMjQ5CQkJLyog TGFzdCBcZmtleXdvcmR2YWx1ZSgpIGtleXdvcmQgKi8KKyNkZWZpbmUgVk5fRE1TRyAgICAgMjUw CQkJLyogTXNnIGNvcnJlc3BvbmRpbmcgdG8gZGlhbHN0YXR1cyAqLworI2RlZmluZSBWTl9IT1NU SVAgICAyNTEJCQkvKiBJUCBhZGRyZXNzIG9mIHJlbW90ZSBob3N0ICovCisjZGVmaW5lIFZOX0lO UE1TRyAgIDI1MgkJCS8qIE1zZyBjb3JyZXNwb25kaW5nIHRvIGluc3RhdHVzICovCisjZGVmaW5l IFZOX1ZBUkVWQUwgIDI1MwkJCS8qIFNFVCBWQVJJQUJMRS1FVkFMVUFUSU9OIHNldHRpbmcgKi8K KyNkZWZpbmUgVk5fUFJFVkNNRCAgMjU0CQkJLyogUHJldmlvdXMgY29tbWFuZCAqLworI2VuZGlm IC8qIE5PU1BMICovCisKKy8qIElOUFVUIHN0YXR1cyB2YWx1ZXMgKi8KKworI2RlZmluZSBJTlBf T0sgIDAJCQkvKiBTdWNjZWVkZWQgKi8KKyNkZWZpbmUgSU5QX1RPICAxCQkJLyogVGltZWQgb3V0 ICovCisjZGVmaW5lIElOUF9VSSAgMgkJCS8qIFVzZXIgaW50ZXJydXB0ZWQgKi8KKyNkZWZpbmUg SU5QX0lFICAzCQkJLyogSW50ZXJuYWwgZXJyb3IgKi8KKyNkZWZpbmUgSU5QX0lPICA0CQkJLyog SS9PIGVycm9yIG9yIGNvbm5lY3Rpb24gbG9zdCAqLworI2RlZmluZSBJTlBfSUtTIDUgICAgICAg ICAgICAgICAgICAgICAgIC8qIEtlcm1pdCBTZXJ2ZXIgQWN0aXZlICovCisjZGVmaW5lIElOUF9C RiAgNgkJCS8qIEJ1ZmZlciBmdWxsICovCisKKy8qIElOUFVUIHN3aXRjaCB2YWx1ZXMgKi8KKwor I2RlZmluZSBJTlBTV19OT00gMQkJCS8qIC9OT01BVENIICovCisjZGVmaW5lIElOUFNXX0NMUiAy CQkJLyogL0NMRUFSICovCisjZGVmaW5lIElOUFNXX05PVyA0CQkJLyogL05PV1JBUCAqLworI2Rl ZmluZSBJTlBTV19DT1UgOAkJCS8qIC9DT1VOVCAqLworCisjaWZuZGVmIE5PU1BMCisvKiBTeW1i b2xzIGZvciBidWlsdGluIGZ1bmN0aW9ucyAqLworCisjZGVmaW5lIEZOQVJHUyA2CQkJLyogTWF4 aW11bSBudW1iZXIgb2YgZnVuY3Rpb24gYXJncyAqLworCisjZGVmaW5lIEZOX0lORCAgICAgIDAJ CQkvKiBJbmRleCAob2Ygc3RyaW5nIDEgaW4gc3RyaW5nIDIpICovCisjZGVmaW5lIEZOX0xFTiAg ICAgIDEJCQkvKiBMZW5ndGggKG9mIHN0cmluZykgKi8KKyNkZWZpbmUgRk5fTElUICAgICAgMgkJ CS8qIExpdGVyYWwgKGRvbid0IGV4cGFuZCB0aGUgc3RyaW5nKSAqLworI2RlZmluZSBGTl9MT1cg ICAgICAzCQkJLyogTG93ZXIgKGNvbnZlcnQgdG8gbG93ZXJjYXNlKSAqLworI2RlZmluZSBGTl9N QVggICAgICA0CQkJLyogTWF4IChtYXhpbXVtKSAqLworI2RlZmluZSBGTl9NSU4gICAgICA1CQkJ LyogTWluIChtaW5pbXVtKSAqLworI2RlZmluZSBGTl9NT0QgICAgICA2CQkJLyogTW9kIChtb2R1 bHVzKSAqLworI2RlZmluZSBGTl9FVkEgICAgICA3CQkJLyogRXZhbCAoZXZhbHVhdGUgYXJpdGgg ZXhwcmVzc2lvbikgKi8KKyNkZWZpbmUgRk5fU1VCICAgICAgOAkJCS8qIFN1YnN0ciAoc3Vic3Ry aW5nKSAqLworI2RlZmluZSBGTl9VUFAgICAgICA5CQkJLyogVXBwZXIgKGNvbnZlcnQgdG8gdXBw ZXJjYXNlKSAqLworI2RlZmluZSBGTl9SRVYgICAgICAxMAkJCS8qIFJldmVyc2UgKGEgc3RyaW5n KSAqLworI2RlZmluZSBGTl9SRVAgICAgICAxMQkJCS8qIFJlcGVhdCAoYSBzdHJpbmcpICovCisj ZGVmaW5lIEZOX0VYRSAgICAgIDEyCQkJLyogRXhlY3V0ZSAoYSBtYWNybykgKi8KKyNkZWZpbmUg Rk5fVkFMICAgICAgMTMJCQkvKiBSZXR1cm4gdmFsdWUgKG9mIGEgbWFjcm8pICovCisjZGVmaW5l IEZOX0xQQSAgICAgIDE0CQkJLyogTFBBRCAobGVmdCBwYWQpICovCisjZGVmaW5lIEZOX1JQQSAg ICAgIDE1CQkJLyogUlBBRCAocmlnaHQgcGFkKSAqLworI2RlZmluZSBGTl9ERUYgICAgICAxNgkJ CS8qIERlZmluaXRpb24gb2YgYSBtYWNybywgdW5leHBhbmRlZCAqLworI2RlZmluZSBGTl9DT04g ICAgICAxNwkJCS8qIENvbnRlbnRzIG9mIGEgdmFyaWFibGUsIGRpdHRvICovCisjZGVmaW5lIEZO X0ZJTCAgICAgIDE4CQkJLyogRmlsZSBsaXN0ICovCisjZGVmaW5lIEZOX0ZDICAgICAgIDE5CQkJ LyogRmlsZSBjb3VudCAqLworI2RlZmluZSBGTl9DSFIgICAgICAyMAkJCS8qIENoYXJhY3RlciAo bGlrZSBCQVNJQyBDSFIkKCkpICovCisjZGVmaW5lIEZOX1JJRyAgICAgIDIxCQkJLyogUmlnaHQg KGxpa2UgQkFTSUMgUklHSFQkKCkpICovCisjZGVmaW5lIEZOX0NPRCAgICAgIDIyCQkJLyogQ29k ZSB2YWx1ZSBvZiBjaGFyYWN0ZXIgKi8KKyNkZWZpbmUgRk5fUlBMICAgICAgMjMJCQkvKiBSZXBs YWNlICovCisjZGVmaW5lIEZOX0ZEICAgICAgIDI0CQkJLyogRmlsZSBkYXRlICovCisjZGVmaW5l IEZOX0ZTICAgICAgIDI1CQkJLyogRmlsZSBzaXplICovCisjZGVmaW5lIEZOX1JJWCAgICAgIDI2 CQkJLyogUmluZGV4IChpbmRleCBmcm9tIHJpZ2h0KSAqLworI2RlZmluZSBGTl9WRVIgICAgICAy NwkJCS8qIFZlcmlmeSAqLworI2RlZmluZSBGTl9JUEEgICAgICAyOAkJCS8qIEZpbmQgYW5kIHJl dHVybiBJUCBhZGRyZXNzICovCisjZGVmaW5lIEZOX0NSWSAgICAgIDM5CQkJLyogLi4uICovCisj ZGVmaW5lIEZOX09PWCAgICAgIDQwCQkJLyogLi4uICovCisjZGVmaW5lIEZOX0hFWCAgICAgIDQx CQkJLyogSGV4aWZ5ICovCisjZGVmaW5lIEZOX1VOSCAgICAgIDQyCQkJLyogVW5oZXhpZnkgKi8K KyNkZWZpbmUgRk5fQlJLICAgICAgNDMJCQkvKiBCcmVhayAqLworI2RlZmluZSBGTl9TUE4gICAg ICA0NAkJCS8qIFNwYW4gKi8KKyNkZWZpbmUgRk5fVFJNICAgICAgNDUJCQkvKiBUcmltICovCisj ZGVmaW5lIEZOX0xUUiAgICAgIDQ2CQkJLyogTGVmdC1UcmltICovCisjZGVmaW5lIEZOX0NBUCAg ICAgIDQ3CQkJLyogQ2FwaXRhbGl6ZSAqLworI2RlZmluZSBGTl9UT0QgICAgICA0OAkJCS8qIFRp bWUtb2YtZGF5LXRvLXNlY3Mtc2luY2UtbWlkbml0ZSAqLworI2RlZmluZSBGTl9TRUMgICAgICA0 OQkJCS8qIFNlY3Mtc2luY2UtbWlkbml0ZS10by10aW1lLW9mLWRheSAqLworI2RlZmluZSBGTl9G Rk4gICAgICA1MAkJCS8qIEZ1bGwgZmlsZSBuYW1lICovCisjZGVmaW5lIEZOX0NISyAgICAgIDUx CQkJLyogQ2hlY2tzdW0gb2YgdGV4dCAqLworI2RlZmluZSBGTl9DUkMgICAgICA1MgkJCS8qIENS Qy0xNiBvZiB0ZXh0ICovCisjZGVmaW5lIEZOX0JTTiAgICAgIDUzCQkJLyogQmFzZW5hbWUgb2Yg ZmlsZSAqLworI2RlZmluZSBGTl9DTUQgICAgICA1NAkJCS8qIE91dHB1dCBvZiBhIGNvbW1hbmQg KGNvb2tlZCkgKi8KKyNkZWZpbmUgRk5fUkFXICAgICAgNTUJCQkvKiBPdXRwdXQgb2YgYSBjb21t YW5kIChyYXcpICovCisjZGVmaW5lIEZOX1NUWCAgICAgIDU2CQkJLyogU3RyaXAgZnJvbSByaWdo dCAqLworI2RlZmluZSBGTl9TVEwgICAgICA1NwkJCS8qIFN0cmlwIGZyb20gbGVmdCAqLworI2Rl ZmluZSBGTl9TVE4gICAgICA1OAkJCS8qIFN0cmlwIG4gY2hhcnMgKi8KKyNkZWZpbmUgRk5fU0NS Tl9DWCAgNTkJCQkvKiBTY3JlZW4gQ3Vyc29yIFggUG9zICovCisjZGVmaW5lIEZOX1NDUk5fQ1kg IDYwCQkJLyogU2NyZWVuIEN1cnNvciBZIFBvcyAqLworI2RlZmluZSBGTl9TQ1JOX1NUUiA2MQkJ CS8qIFNjcmVlbiBTdHJpbmcgKi8KKyNkZWZpbmUgRk5fMkhFWCAgICAgNjIJCQkvKiBOdW1iZXIg KG5vdCBzdHJpbmcpIHRvIGhleCAqLworI2RlZmluZSBGTl8yT0NUICAgICA2MwkJCS8qIE51bWJl ciAobm90IHN0cmluZykgdG8gb2N0YWwgKi8KKyNkZWZpbmUgRk5fUkZJTCAgICAgNjQJCQkvKiBS ZWN1cnNpdmUgZmlsZSBsaXN0ICovCisjZGVmaW5lIEZOX0RJUiAgICAgIDY1CQkJLyogRGlyZWN0 b3J5IGxpc3QgKi8KKyNkZWZpbmUgRk5fUkRJUiAgICAgNjYJCQkvKiBSZWN1cnNpdmUgZGlyZWN0 b3J5IGxpc3QgKi8KKyNkZWZpbmUgRk5fRE5BTSAgICAgNjcJCQkvKiBEaXJlY3RvcnkgcGFydCBv ZiBmaWxlbmFtZSAqLworI2RlZmluZSBGTl9SQU5EICAgICA2OAkJCS8qIFJhbmRvbSBudW1iZXIg Ki8KKyNkZWZpbmUgRk5fV09SRCAgICAgNjkJCQkvKiBXb3JkIGV4dHJhY3Rpb24gKi8KKyNkZWZp bmUgRk5fU1BMSVQgICAgNzAJCQkvKiBTcGxpdCBzdHJpbmcgaW50byB3b3JkcyAqLworI2RlZmlu ZSBGTl9LUkJfVEsgICA3MQkJCS8qIEtlcmJlcm9zIHRpY2tldHMgKi8KKyNkZWZpbmUgRk5fS1JC X05YICAgNzIJCQkvKiBLZXJiZXJvcyBuZXh0IHRpY2tldCAqLworI2RlZmluZSBGTl9LUkJfSVYg ICA3MwkJCS8qIEtlcmJlcm9zIHRpY2tldCBpcyB2YWxpZCAqLworI2RlZmluZSBGTl9LUkJfVFQg ICA3NAkJCS8qIEtlcmJlcm9zIHRpY2tldCB0aW1lICovCisjZGVmaW5lIEZOX0VSUk1TRyAgIDc1 CQkJLyogRXJyb3IgY29kZSB0byBtZXNzYWdlICovCisKKyNpZm5kZWYgVU5JWAorI2lmbmRlZiBW TVMKKyN1bmRlZiBGTl9FUlJNU0cKKyNlbmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBVTklYICov CisKKyNkZWZpbmUgRk5fRElNICAgICAgNzYJCQkvKiBEaW1lbnNpb24gb2YgYXJyYXkgKi8KKyNk ZWZpbmUgRk5fRFRJTSAgICAgNzcJCQkvKiBDb252ZXJ0IHRvIHN0YW5kYXJkIGRhdGUvdGltZSAq LworI2RlZmluZSBGTl9KREFURSAgICA3OAkJCS8qIFJlZ3VsYXIgZGF0ZSB0byBkYXkgb2YgeWVh ciAqLworI2RlZmluZSBGTl9QTkNWVCAgICA3OQkJCS8qIENvbnZlcnQgcGhvbmUgbnVtYmVyIGZv ciBkaWFsaW5nICovCisjZGVmaW5lIEZOX0RBVEVKICAgIDgwCQkJLyogRGF5IG9mIHllYXIgdG8g ZGF0ZSAqLworI2RlZmluZSBGTl9NSkQgICAgICA4MQkJCS8qIERhdGUgdG8gbW9kaWZpZWQgSnVs aWFuIGRhdGUgKi8KKyNkZWZpbmUgRk5fTUpEMiAgICAgODIJCQkvKiBNb2RpZmllZCBKdWxpYW4g ZGF0ZSB0byBkYXRlICovCisjZGVmaW5lIEZOX0RBWSAgICAgIDgzCQkJLyogRGF5IG9mIHdlZWsg b2YgZ2l2ZW4gZGF0ZSAqLworI2RlZmluZSBGTl9OREFZICAgICA4NAkJCS8qIE51bWVyaWMgZGF5 IG9mIHdlZWsgb2YgZ2l2ZW4gZGF0ZSAqLworI2RlZmluZSBGTl9USU1FICAgICA4NQkJCS8qIENv bnZlcnQgdG8gaGg6bW06c3MgKi8KKyNkZWZpbmUgRk5fTlRJTSAgICAgODYJCQkvKiBDb252ZXJ0 IHRvIHNlY29uZHMgc2luY2UgbWlkbml0ZSAqLworI2RlZmluZSBGTl9OMlRJTSAgICA4NwkJCS8q IFNlYyBzaW5jZSBtaWRuaXRlIHRvIGhoOm1tOnNzICovCisjZGVmaW5lIEZOX1BFUk0gICAgIDg4 CQkJLyogUGVybWlzc2lvbnMgb2YgZmlsZSAqLworI2RlZmluZSBGTl9LUkJfRkcgICA4OQkJCS8q IEtlcmJlcm9zIFRpY2tldCBGbGFncyAqLworI2RlZmluZSBGTl9TRUFSQ0ggICA5MAkJCS8qIFNl YXJjaCBmb3IgcGF0dGVybiBpbiBzdHJpbmcgKi8KKyNkZWZpbmUgRk5fUlNFQVJDSCAgOTEJCQkv KiBEaXR0bywgYnV0IHJpZ2h0IHRvIGxlZnQgKi8KKyNkZWZpbmUgRk5fWExBVEUgICAgOTIJCQkv KiBUcmFuc2xhdGUgc3RyaW5nIGNoYXJzZXQgKi8KKyNkZWZpbmUgRk5fQUxPT0sgICAgOTMJCQkv KiBBcnJheSBsb29rdXAgKi8KKyNkZWZpbmUgRk5fVExPT0sgICAgOTQJCQkvKiBUYWJsZSBsb29r dXAgKi8KKyNkZWZpbmUgRk5fVE9CNjQgICAgOTUJCQkvKiBFbmNvZGUgaW50byBCYXNlNjQgKi8K KyNkZWZpbmUgRk5fRk1CNjQgICAgOTYJCQkvKiBEZWNvZGUgZnJvbSBCYXNlNjQgKi8KKworI2Rl ZmluZSBGTl9BQlMgICAgICA5NwkJCS8qIEFic29sdXRlIHZhbHVlICovCisKKyNpZmRlZiBDS0ZM T0FUCisjZGVmaW5lIEZOX0ZQQUREICAgIDk4CQkJLyogRmxvYXRpbmctcG9pbnQgYWRkICovCisj ZGVmaW5lIEZOX0ZQU1VCICAgIDk5CQkJLyogRmxvYXRpbmctcG9pbnQgc3Vic3RyYWN0ICovCisj ZGVmaW5lIEZOX0ZQTVVMICAgMTAwCQkJLyogRmxvYXRpbmctcG9pbnQgbXVsdGlwbHkgKi8KKyNk ZWZpbmUgRk5fRlBESVYgICAxMDEJCQkvKiBGbG9hdGluZy1wb2ludCBkaXZpZGUgKi8KKyNkZWZp bmUgRk5fRlBFWFAgICAxMDIJCQkvKiBGbG9hdGluZy1wb2ludCBlIHRvIHRoZSB4ICovCisjZGVm aW5lIEZOX0ZQTE4gICAgMTAzCQkJLyogRmxvYXRpbmctcG9pbnQgbmF0dXJhbCBsb2cgKi8KKyNk ZWZpbmUgRk5fRlBMT0cgICAxMDQJCQkvKiBGbG9hdGluZy1wb2ludCBiYXNlLTEwIGxvZyAqLwor I2RlZmluZSBGTl9GUFBPVyAgIDEwNQkJCS8qIEZsb2F0aW5nLXBvaW50IHJhaXNlIHRvIHBvd2Vy ICovCisjZGVmaW5lIEZOX0ZQU1FSICAgMTA2CQkJLyogRmxvYXRpbmctcG9pbnQgc3F1YXJlIHJv b3QgKi8KKyNkZWZpbmUgRk5fRlBBQlMgICAxMDcJCQkvKiBGbG9hdGluZy1wb2ludCBhYnNvbHV0 ZSB2YWx1ZSAqLworI2RlZmluZSBGTl9GUE1PRCAgIDEwOAkJCS8qIEZsb2F0aW5nLXBvaW50IG1v ZHVsdXMgKi8KKyNkZWZpbmUgRk5fRlBNQVggICAxMDkJCQkvKiBGbG9hdGluZy1wb2ludCBtYXhp bXVtICovCisjZGVmaW5lIEZOX0ZQTUlOICAgMTEwCQkJLyogRmxvYXRpbmctcG9pbnQgbWluaW11 bSovCisjZGVmaW5lIEZOX0ZQSU5UICAgMTExCQkJLyogRmxvYXRpbmctcG9pbnQgdG8gaW50ZWdl ciAqLworI2RlZmluZSBGTl9GUFJPVSAgIDExMgkJCS8qIEZsb2F0aW5nLXBvaW50IHJvdW5kICov CisjZGVmaW5lIEZOX0ZQU0lOICAgMTEzCQkJLyogRlAgc2luZSAqLworI2RlZmluZSBGTl9GUENP UyAgIDExNAkJCS8qIEZQIGNvc2luZSAqLworI2RlZmluZSBGTl9GUFRBTiAgIDExNQkJCS8qIEZQ IHRhbmdlbnQgKi8KKyNlbmRpZiAvKiBDS0ZMT0FUICovCisKKyNpZmRlZiBDS0NIQU5ORUxJTwor I2RlZmluZSBGTl9GU1RBVCAgIDExNgkJCS8qIEZpbGUgc3RhdHVzICovCisjZGVmaW5lIEZOX0ZQ T1MgICAgMTE3CQkJLyogRmlsZSBwb3NpdGlvbiAqLworI2RlZmluZSBGTl9GRU9GICAgIDExOAkJ CS8qIEZpbGUgZW9mICovCisjZGVmaW5lIEZOX0ZJTE5PICAgMTE5CQkJLyogRmlsZSBudW1iZXIg LyBoYW5kbGUgKi8KKyNkZWZpbmUgRk5fRkdDSEFSICAxMjAJCQkvKiBGaWxlIGdldGNoYXIgKi8K KyNkZWZpbmUgRk5fRkdMSU5FICAxMjEJCQkvKiBGaWxlIGdldGxpbmUgKi8KKyNkZWZpbmUgRk5f RkdCTEsgICAxMjIJCQkvKiBGaWxlIGdldGJsb2NrICovCisjZGVmaW5lIEZOX0ZQQ0hBUiAgMTIz CQkJLyogRmlsZSBwdXRjaGFyICovCisjZGVmaW5lIEZOX0ZQTElORSAgMTI0CQkJLyogRmlsZSBw dXRsaW5lICovCisjZGVmaW5lIEZOX0ZQQkxLICAgMTI1CQkJLyogRmlsZSBwdXRibG9jayAqLwor I2RlZmluZSBGTl9OTElORSAgIDEyNgkJCS8qIEZpbGUgZ2V0IGN1cnJlbnQgbGluZSBudW1iZXIg Ki8KKyNkZWZpbmUgRk5fRkVSTVNHICAxMjcJCQkvKiBGaWxlIGVycm9yIG1lc3NhZ2UgKi8KKyNl bmRpZiAvKiBDS0NIQU5ORUxJTyAqLworCisjZGVmaW5lIEZOX0xFRiAgICAgMTI4CQkJLyogTGVm dCAoPSBzdWJzdHIgc3RhcnRpbmcgb24gbGVmdCkgKi8KKyNkZWZpbmUgRk5fQUFEVU1QICAxMjkJ CQkvKiBBc3NvY2lhdGl2ZSBBcnJheSBEdW1wICovCisjZGVmaW5lIEZOX1NUQiAgICAgMTMwCQkJ LyogXGZzdHJpcGIoKSAgKi8KKyNkZWZpbmUgRk5fUEFUVEVSTiAxMzEJCQkvKiBcZnBhdHRlcm4o KSAqLworI2RlZmluZSBGTl9IRVgyTiAgIDEzMgkJCS8qIFxmaGV4dG9uKCkgICovCisjZGVmaW5l IEZOX09DVDJOICAgMTMzCQkJLyogXGZvY3R0b24oKSAgKi8KKyNkZWZpbmUgRk5fSEVYMklQICAx MzQJCQkvKiBcZmhleHRvaXAoKSAqLworI2RlZmluZSBGTl9JUDJIRVggIDEzNQkJCS8qIFxmaXB0 b2hleCgpICovCisjZGVmaW5lIEZOX1JBRElYICAgMTM2CQkJLyogXGZyYWRpeCgpICAgKi8KKyNk ZWZpbmUgRk5fSk9JTiAgICAxMzcJCQkvKiBcZmpvaW4oKSAgICAqLworI2RlZmluZSBGTl9TVUJT VCAgIDEzOAkJCS8qIFxmc3Vic3RpdHV0ZSgpICovCisjZGVmaW5lIEZOX1NFWFAgICAgMTM5CQkJ LyogXGZzZXhwcmVzc2lvbigpICovCisjZGVmaW5lIEZOX0NNRFNUSyAgMTQwCQkJLyogXGZjbWRz dGFjaygpICovCisjZGVmaW5lIEZOX1RPR01UICAgMTQxCQkJLyogXGZ0b2dtdCgpICovCisjZGVm aW5lIEZOX0NNUERBVEUgMTQyCQkJLyogXGZjbXBkYXRlcygpICovCisjZGVmaW5lIEZOX0RJRkRB VEUgMTQzCQkJLyogXGZkaWZmZGF0ZXMoKSAqLworI2lmZGVmIFRDUFNPQ0tFVAorI2RlZmluZSBG Tl9IU1RBREQgIDE0NAkJCS8qIFxmYWRkcjJuYW1lKCkgKi8KKyNkZWZpbmUgRk5fSFNUTkFNICAx NDUJCQkvKiBcZm5hbWUyYWRkcigpICovCisjZW5kaWYgLyogVENQU09DS0VUICovCisjZGVmaW5l IEZOX0RFTFNFQyAgMTQ2CQkJLyogXGZkZWx0YTJzZWMoKSAqLworI2RlZmluZSBGTl9QQ19EVSAg IDE0NwkJCS8qIFBhdGggY29udmVyc2lvbiBET1MgdG8gVW5peCAqLworI2RlZmluZSBGTl9QQ19W VSAgIDE0OAkJCS8qIFBhdGggY29udmVyc2lvbiBWTVMgdG8gVW5peCAqLworI2RlZmluZSBGTl9Q Q19VRCAgIDE0OQkJCS8qIFBhdGggY29udmVyc2lvbiBVbml4IHRvIERPUyAqLworI2RlZmluZSBG Tl9QQ19VViAgIDE1MAkJCS8qIFBhdGggY29udmVyc2lvbiBVbml4IHRvIFZNUyAqLworI2RlZmlu ZSBGTl9LV1ZBTCAgIDE1MQkJCS8qIFxma2V5d29yZHZhbHVlKCkgKi8KKyNkZWZpbmUgRk5fU0xF RVAgICAxNTIJCQkvKiBcZnNsZWVwKCkgKi8KKyNkZWZpbmUgRk5fTVNMRUVQICAxNTMJCQkvKiBc Zm1zbGVlcCgpICovCisjZGVmaW5lIEZOX0xOQU1FICAgMTU0CQkJLyogXGZMb25nUGF0aE5hbWUo KSAoV2luZG93cykgKi8KKyNkZWZpbmUgRk5fU05BTUUgICAxNTUJCQkvKiBcZlNob3J0UGF0aE5h bWUoKSAoV2luZG93cykgKi8KKyNkZWZpbmUgRk5fVU5UQUIgICAxNTYJCQkvKiBcZnVudGFiaWZ5 KCkgKi8KKyNkZWZpbmUgRk5fTE9QWCAgICAxNTcJCQkvKiBcZmxvcHgoKSAqLworI2RlZmluZSBG Tl9FTUFJTCAgIDE1OAkJCS8qIFxmZW1haWxhZGRyZXNzKCkgKi8KKyNkZWZpbmUgRk5fUElDVFVS RSAxNTkJCQkvKiBcZnBpY3R1cmVpbmZvKCkgKi8KKyNkZWZpbmUgRk5fUElEICAgICAxNjAJCQkv KiBcZnBpZGluZm8oKSAqLworI2RlZmluZSBGTl9DT1VOVCAgIDE2MQkJCS8qIFxmY291bnQoKSAq LworI2RlZmluZSBGTl9GVU5DICAgIDE2MgkJCS8qIFxmZnVuY3Rpb24oKSAqLworI2RlZmluZSBG Tl9SRUNVUlNFIDE2MwkJCS8qIFxmcmVjdXJzZSgpICovCisjZGVmaW5lIEZOX1NRVUVFWkUgMTY0 CQkJLyogXGZzcXVlZXplKCkgKi8KKyNkZWZpbmUgRk5fVU5QQ1QgICAxNjUJCQkvKiBcZmRlY29k ZWhleCgpICovCisjZGVmaW5lIEZOX1NUUklOR1QgMTY2CQkJLyogXGZzdHJpbmd0eXBlKCkgKi8K KyNkZWZpbmUgRk5fU1RSQ01QICAxNjcJCQkvKiBcZnN0cmNtcCgpICovCisKKyNlbmRpZiAvKiBO T1NQTCAqLworCisvKiBUaW1lIFVuaXRzICovCisKKyNkZWZpbmUgVFVfREFZUyAgIDAKKyNkZWZp bmUgVFVfV0VFS1MgIDEKKyNkZWZpbmUgVFVfTU9OVEhTIDIKKyNkZWZpbmUgVFVfWUVBUlMgIDMK KworI2lmZGVmIENLX0NVUlNFUworLyogU2NyZWVuIGxpbmUgbnVtYmVycyBmb3IgZnVsbHNjcmVl biBmaWxlLXRyYW5zZmVyIGRpc3BsYXkgKi8KKworI2RlZmluZSBDV19CQU4gIDAJCQkvKiBDdXJz ZXMgV2luZG93IEJhbm5lciAqLworI2RlZmluZSBDV19ESVIgIDIJCQkvKiBDdXJyZW50IGRpcmVj dG9yeSAqLworI2RlZmluZSBDV19MSU4gIDMJCQkvKiBDb21tdW5pY2F0aW9uIGRldmljZSAqLwor I2RlZmluZSBDV19TUEQgIDQJCQkvKiBDb21tdW5pY2F0aW9uIHNwZWVkICovCisjZGVmaW5lIENX X1BBUiAgNQkJCS8qIFBhcml0eSAqLworI2RlZmluZSBDV19UTU8gIDYKKyNkZWZpbmUgQ1dfTkFN ICA3CQkJLyogRmlsZW5hbWUgKi8KKyNkZWZpbmUgQ1dfVFlQICA4CQkJLyogRmlsZSB0eXBlICov CisjZGVmaW5lIENXX1NJWiAgOQkJCS8qIEZpbGUgc2l6ZSAqLworI2RlZmluZSBDV19QQ0QgMTAJ CQkvKiBQZXJjZW50IGRvbmUgKi8KKworI2lmbmRlZiBDS19QQ1RfQkFSCisjZGVmaW5lIENXX1RS ICAxMQkJCS8qIFRpbWUgcmVtYWluaW5nICovCisjZGVmaW5lIENXX0NQICAxMgkJCS8qIENoYXJh Y3RlcnMgcGVyIHNlY29uZCAqLworI2RlZmluZSBDV19XUyAgMTMJCQkvKiBXaW5kb3cgc2xvdHMg Ki8KKyNkZWZpbmUgQ1dfUFQgIDE0CQkJLyogUGFja2V0IHR5cGUgKi8KKyNkZWZpbmUgQ1dfUEMg IDE1CQkJLyogUGFja2V0IGNvdW50ICovCisjZGVmaW5lIENXX1BMICAxNgkJCS8qIFBhY2tldCBs ZW5ndGggKi8KKyNkZWZpbmUgQ1dfUFIgIDE3CQkJLyogUGFja2V0IHJldHJ5ICovCisjaWZkZWYg Q09NTUVOVAorI2RlZmluZSBDV19QQiAgMTcJCQkvKiBQYWNrZXQgYmxvY2sgY2hlY2sgKi8KKyNl bmRpZiAvKiBDT01NRU5UICovCisjZWxzZSAvKiBDS19QQ1RfQkFSICovCisjZGVmaW5lIENXX0JB UiAxMQkJCS8qIFBlcmNlbnQgQmFyIFNjYWxlICovCisjZGVmaW5lIENXX1RSICAxMgkJCS8qIFRp bWUgcmVtYWluaW5nICovCisjZGVmaW5lIENXX0NQICAxMwkJCS8qIENoYXJzIHBlciBzZWMgKi8K KyNkZWZpbmUgQ1dfV1MgIDE0CQkJLyogV2luZG93IHNsb3RzICovCisjZGVmaW5lIENXX1BUICAx NQkJCS8qIFBhY2tldCB0eXBlICovCisjZGVmaW5lIENXX1BDICAxNgkJCS8qIFBhY2tldCBjb3Vu dCAqLworI2RlZmluZSBDV19QTCAgMTcJCQkvKiBQYWNrZXQgbGVuZ3RoICovCisjZGVmaW5lIENX X1BSICAxOAkJCS8qIFBhY2tldCByZXRyeSAqLworI2lmZGVmIENPTU1FTlQKKyNkZWZpbmUgQ1df UEIgIDE4CQkJLyogUGFja2V0IGJsb2NrIGNoZWNrICovCisjZW5kaWYgLyogQ09NTUVOVCAqLwor I2VuZGlmIC8qIENLX1BDVF9CQVIgKi8KKworI2RlZmluZSBDV19FUlIgMTkJCQkvKiBFcnJvciBt ZXNzYWdlICovCisjZGVmaW5lIENXX01TRyAyMAkJCS8qIEluZm8gbWVzc2FnZSAqLworI2RlZmlu ZSBDV19JTlQgMjIJCQkvKiBJbnN0cnVjdGlvbnMgKi8KKyNkZWZpbmUgQ1dfRkZDIDk5ICAgICAg ICAgICAgICAgICAgICAgICAvKiBGaWxlIENoYXJhY3RlcnMgU2VudC9SZWNlaXZlZCAqLworI2Vu ZGlmIC8qIENLX0NVUlNFUyAqLworCisjaWZuZGVmIE5PSUNQCisvKiBTYXZlIENvbW1hbmRzICov CisjZGVmaW5lIFhTS0VZICAgMAkJCS8qIEtleSBtYXAgZmlsZSAqLworI2RlZmluZSBYU0NNRCAg IDEgICAgICAgICAgICAgICAgICAgICAgIC8qIENvbW1hbmQgbW9kZSAqLworI2RlZmluZSBYU1RF Uk0gIDIgICAgICAgICAgICAgICAgICAgICAgIC8qIFRlcm1pbmFsIG1vZGUgKi8KKyNlbmRpZiAv KiBOT0lDUCAqLworCisjaWZuZGVmIE5PRElBTAorLyogRGlhbCByb3V0aW5lIHNvcnQgcHJpb3Jp dGllcyAqLworI2RlZmluZSBETl9JTlRFUk4gMAorI2RlZmluZSBETl9GUkVFICAgMQorI2RlZmlu ZSBETl9MT0NBTCAgMgorI2RlZmluZSBETl9VTksgICAgMworI2RlZmluZSBETl9MT05HICAgNAor I2RlZmluZSBETl9JTlRMICAgNQorI2VuZGlmIC8qIE5PRElBTCAqLworCisjaWZkZWYgU1NIQlVJ TFRJTgorI2RlZmluZSBYU1NIX09QTiAxCisjZGVmaW5lIFhTU0hfVjIgIDIKKyNkZWZpbmUgWFNT SF9GTFAgMworI2RlZmluZSBYU1NIX0ZSUCA0CisjZGVmaW5lIFhTU0hfQUREIDUKKyNkZWZpbmUg WFNTSF9LRVkgNgorI2RlZmluZSBYU1NIX0NMUiA3CisjZGVmaW5lIFhTU0hfQUdUIDgKKworI2Rl ZmluZSBTU0hLVF8xUiAgIDAJCQkvKiBTU0ggS0VZIFRZUEUgc3ltYm9scyAqLworI2RlZmluZSBT U0hLVF8yUiAgIDEgICAgICAgICAgICAgICAgICAgIC8qIG11c3QgbWF0Y2ggc3NoL2tleS5oIHZh bHVlcyAqLworI2RlZmluZSBTU0hLVF8yRCAgIDIKKyNkZWZpbmUgU1NIS1RfU1JQICAzCisKKyNk ZWZpbmUgU1NIS0RfSU4gICAxCQkJLyogU1NIIEtFWSBESVNQTEFZIC9JTi1GT1JNQVQgKi8KKyNk ZWZpbmUgU1NIS0RfT1VUICAyCQkJLyogU1NIIEtFWSBESVNQTEFZIC9PVVQtRk9STUFUICovCisK KyNkZWZpbmUgU0tERl9PU1NIICAxCQkJLyogS2V5IGRpc3BsYXkgZm9ybWF0IE9wZW5TU0ggKi8K KyNkZWZpbmUgU0tERl9TU0hDICAyCQkJLyogS2V5IGRpc3BsYXkgZm9ybWF0IFNTSC5DT00gKi8K KyNkZWZpbmUgU0tERl9JRVRGICAzCQkJLyogS2V5IGRpc3BsYXkgZm9ybWF0IElFVEYgKi8KKyNk ZWZpbmUgU0tERl9GSU5HICA0CQkJLyogS2V5IGRpc3BsYXkgZm9ybWF0IEZJTkdFUlBSSU5UICov CisKKyNkZWZpbmUgU1NIU1dfVVNSIDEKKyNkZWZpbmUgU1NIU1dfVkVSIDIKKyNkZWZpbmUgU1NI U1dfQ01EIDMKKyNkZWZpbmUgU1NIU1dfWDExIDQKKyNkZWZpbmUgU1NIU1dfUFdEIDUKKyNkZWZp bmUgU1NIU1dfU1VCIDYKKworI2RlZmluZSBTU0hDX0xQRiAxCisjZGVmaW5lIFNTSENfUlBGIDIK KworI2RlZmluZSBYU1NIMl9SS0UgMQorCisjZGVmaW5lIFNTSEZfTENMICAgMQorI2RlZmluZSBT U0hGX1JNVCAgIDIKKworI2RlZmluZSBTU0hBX0FERCAgIDEKKyNkZWZpbmUgU1NIQV9ERUwgICAy CisjZGVmaW5lIFNTSEFfTFNUICAgMworCisjZGVmaW5lIFNTSEFTV19GUCAxCisKKyNkZWZpbmUg U1NIS19QQVNTICAxCisjZGVmaW5lIFNTSEtfQ1JFQSAgMgorI2RlZmluZSBTU0hLX0RJU1AgIDMK KyNkZWZpbmUgU1NIS19WMSAgICA0CisKKyNkZWZpbmUgU1NIS0NfQkkgIDEKKyNkZWZpbmUgU1NI S0NfUFAgIDIKKyNkZWZpbmUgU1NIS0NfVFkgIDMKKyNkZWZpbmUgU1NIS0NfMVIgIDQKKworI2Rl ZmluZSBTS1JNX09QTiAgMQorI2VuZGlmIC8qIFNTSEJVSUxUSU4gKi8KKworI2lmZGVmIFNGVFBf QlVJTFRJTgorI2RlZmluZSBTRlRQX09QTiAgICAxCisjZGVmaW5lIFNGVFBfQ0QgICAgIDIKKyNk ZWZpbmUgU0ZUUF9DSEdSUCAgMworI2RlZmluZSBTRlRQX0NITU9EICA0CisjZGVmaW5lIFNGVFBf Q0hPV04gIDUKKyNkZWZpbmUgU0ZUUF9ESVIgICAgNgorI2RlZmluZSBTRlRQX0dFVCAgICA3Cisj ZGVmaW5lIFNGVFBfTUtESVIgIDgKKyNkZWZpbmUgU0ZUUF9QV0QgICAgOQorI2RlZmluZSBTRlRQ X1BVVCAgICAxMAorI2RlZmluZSBTRlRQX1JFTiAgICAxMQorI2RlZmluZSBTRlRQX1JNICAgICAx MgorI2RlZmluZSBTRlRQX1JNRElSICAxMworI2RlZmluZSBTRlRQX0xJTksgICAxNAorI2RlZmlu ZSBTRlRQX1ZFUiAgICAxNQorCisjZGVmaW5lIFhZX1NGVFBfUkNTIDEKKyNkZWZpbmUgWFlfU0ZU UF9FT0wgMgorI2VuZGlmIC8qIFNGVFBfQlVJTFRJTiAqLworCisvKiBBTlNJLUMgcHJvdG90eXBl cyBmb3IgdXNlciBpbnRlcmZhY2UgZnVuY3Rpb25zICovCisKKyNpZmRlZiBVTklYCitfUFJPVE9U WVAoIGludCBkb3B1dGVudiwgKCBjaGFyICosIGNoYXIgKiApICk7CisjZW5kaWYJLyogVU5JWCAq LworCitfUFJPVE9UWVAoIGludCBjaGthZXMsICggY2hhciwgaW50ICkgKTsKKworI2lmbmRlZiBO T0lDUAorX1BST1RPVFlQKCBpbnQgbWF0Y2huYW1lLCAoIGNoYXIgKiwgaW50LCBpbnQgKSApOwor X1BST1RPVFlQKCBpbnQgY2tfY2xzLCAoIHZvaWQgKSApOworX1BST1RPVFlQKCBpbnQgY2tfY2xl b2wsICggdm9pZCApICk7CitfUFJPVE9UWVAoIGludCBja19jdXJwb3MsICggaW50LCBpbnQgKSAp OworX1BST1RPVFlQKCBpbnQgY21kc3JjLCAoIHZvaWQgKSApOworX1BST1RPVFlQKCBpbnQgcGFy c2VyLCAoIGludCApICk7CitfUFJPVE9UWVAoIGludCBjaGt2YXIsIChjaGFyICopICk7CitfUFJP VE9UWVAoIGludCB6enN0cmluZywgKGNoYXIgKiwgY2hhciAqKiwgaW50ICopICk7CisjaWZuZGVm IE5PRlJJTExTCitfUFJPVE9UWVAoIGludCB5eXN0cmluZywgKGNoYXIgKiwgY2hhciAqKikgKTsK KyNlbmRpZiAvKiBOT0ZSSUxMUyAqLworX1BST1RPVFlQKCBpbnQgZ2V0bmNtLCAoY2hhciAqLCBp bnQpICk7CitfUFJPVE9UWVAoIGludCBnZXRuY3QsIChjaGFyICosIGludCwgRklMRSAqLCBpbnQp ICk7CisjZW5kaWYgLyogTk9JQ1AgKi8KK19QUk9UT1RZUCggVk9JRCBiZ2NoaywgKHZvaWQpICk7 CitfUFJPVE9UWVAoIGNoYXIgKiBudmxvb2ssIChjaGFyICopICk7CitfUFJPVE9UWVAoIGludCB4 YXJyYXksIChjaGFyICopICk7CitfUFJPVE9UWVAoIGludCBhcnJheW5hbSwgKGNoYXIgKiwgaW50 ICosIGludCAqKSApOworX1BST1RPVFlQKCBpbnQgYXJyYXlib3VuZHMsIChjaGFyICosIGludCAq LCBpbnQgKikgKTsKK19QUk9UT1RZUCggaW50IGJvdW5kc3BhaXIsIChjaGFyICosIGNoYXIgKiwg aW50ICosIGludCAqLCBjaGFyICopICk7CitfUFJPVE9UWVAoIGludCBhcnJheWl0b2EsIChpbnQp ICk7CitfUFJPVE9UWVAoIGludCBhcnJheWF0b2ksIChpbnQpICk7CitfUFJPVE9UWVAoIGNoYXIg KiBibGRsZW4sIChjaGFyICosIGNoYXIgKikgKTsKK19QUk9UT1RZUCggaW50IGNoa2FycmF5LCAo aW50LCBpbnQpICk7CitfUFJPVE9UWVAoIGludCBkY2xhcnJheSwgKGNoYXIsIGludCkgKTsKK19Q Uk9UT1RZUCggaW50IHB1c2hhcnJheSwgKGludCwgaW50KSApOworX1BST1RPVFlQKCBpbnQgcGFy c2V2YXIsIChjaGFyICosIGludCAqLCBpbnQgKikgKTsKK19QUk9UT1RZUCggaW50IG1hY2luaSwg KHZvaWQpICk7CitfUFJPVE9UWVAoIFZPSUQgaW5pdG1hYywgKHZvaWQpICk7CitfUFJPVE9UWVAo IGludCBkZWxtYWMsIChjaGFyICosIGludCkgKTsKK19QUk9UT1RZUCggaW50IGFkZG1hYywgKGNo YXIgKiwgY2hhciAqKSApOworX1BST1RPVFlQKCBpbnQgZG9tYWMsIChjaGFyICosIGNoYXIgKiwg aW50KSApOworX1BST1RPVFlQKCBpbnQgYWRkbW1hYywgKGNoYXIgKiwgY2hhciAqW10pICk7Citf UFJPVE9UWVAoIGludCBkb2J1ZywgKHZvaWQpICk7CitfUFJPVE9UWVAoIGludCBkb2NkLCAoaW50 KSApOworX1BST1RPVFlQKCBpbnQgZG9jbHNsb2csIChpbnQpICk7CitfUFJPVE9UWVAoIGludCBk b2NtZCwgKGludCkgKTsKK19QUk9UT1RZUCggaW50IGRvZGlyLCAoaW50KSApOworX1BST1RPVFlQ KCBpbnQgZG9kbywgKGludCwgY2hhciAqLCBpbnQpICk7CitfUFJPVE9UWVAoIGludCBkb2VuYWJs ZSwgKGludCwgaW50KSApOworX1BST1RPVFlQKCBpbnQgZG9nb3RvLCAoY2hhciAqLCBpbnQpICk7 CitfUFJPVE9UWVAoIGludCBkb2d0YSwgKGludCkgKTsKK19QUk9UT1RZUCggaW50IGRvaGxwLCAo aW50KSApOworX1BST1RPVFlQIChpbnQgZG9pbmNyLCAoaW50KSApOworX1BST1RPVFlQKCBpbnQg ZG9ocm10LCAoaW50KSApOworX1BST1RPVFlQKCBpbnQgZG9pZiwgKGludCkgKTsKK19QUk9UT1RZ UCggaW50IGRvaW5wdXQsIChpbnQsIGNoYXIgKltdLCBpbnRbXSwgaW50LCBpbnQpICk7CitfUFJP VE9UWVAoIGludCBkb3JlaW5wLCAoaW50LCBjaGFyICosIGludCkgKTsKK19QUk9UT1RZUCggaW50 IGRvbG9nLCAoaW50KSApOworX1BST1RPVFlQKCBpbnQgZG9sb2dpbiwgKGNoYXIgKikgKTsKK19Q Uk9UT1RZUCggaW50IGRvb3BlbiwgKHZvaWQpICk7CitfUFJPVE9UWVAoIGludCBkb3BybSwgKGlu dCwgaW50KSApOworX1BST1RPVFlQKCBpbnQgZG9yZXR1cm4sIChjaGFyICopICk7CitfUFJPVE9U WVAoIGludCBkb3JtdCwgKGludCkgKTsKK19QUk9UT1RZUCggaW50IGRvc29ydCwgKHZvaWQpICk7 CitfUFJPVE9UWVAoIGludCBkb3N0YXQsIChpbnQpICk7CitfUFJPVE9UWVAoIGludCBkb3N0b3As ICh2b2lkKSApOworX1BST1RPVFlQKCBpbnQgZG90eXBlLCAoY2hhciAqLCBpbnQsIGludCwgaW50 LCBjaGFyICosIGludCwgY2hhciAqLCBpbnQsIGludCwKKwkJCWNoYXIgKiwgaW50KSk7CitfUFJP VE9UWVAoIGludCB0cmFuc21pdCwgKGNoYXIgKiwgY2hhciwgaW50LCBpbnQsIGludCkgKTsKK19Q Uk9UT1RZUCggaW50IHhsYXRlLCAoY2hhciAqLCBjaGFyICosIGludCwgaW50KSApOworX1BST1RP VFlQKCBpbnQgbGl0Y21kLCAoY2hhciAqKiwgY2hhciAqKiwgaW50KSApOworX1BST1RPVFlQKCBp bnQgaW5jdmFyLCAoY2hhciAqLCBDS19PRkZfVCwgaW50KSApOworX1BST1RPVFlQKCBpbnQgY2tk aWFsLCAoY2hhciAqLCBpbnQsIGludCwgaW50LCBpbnQpICk7CitfUFJPVE9UWVAoIGludCBobXNn LCAoY2hhciAqKSApOworX1BST1RPVFlQKCBpbnQgaG1zZ2EsIChjaGFyICogW10pICk7CitfUFJP VE9UWVAoIGludCBtbG9vaywgKHN0cnVjdCBtdGFiIFtdLCBjaGFyICosIGludCkgKTsKK19QUk9U T1RZUCggaW50IG14bG9vaywgKHN0cnVjdCBtdGFiIFtdLCBjaGFyICosIGludCkgKTsKK19QUk9U T1RZUCggaW50IG14eGxvb2ssIChzdHJ1Y3QgbXRhYiBbXSwgY2hhciAqLCBpbnQpICk7CitfUFJP VE9UWVAoIGludCBwcnRvcHQsIChpbnQgKiwgY2hhciAqKSApOworX1BST1RPVFlQKCBDSEFSIHJm aWxvcCwgKGNoYXIgKiwgY2hhcikgKTsKK19QUk9UT1RZUCggaW50IHNldGNjLCAoY2hhciAqLCBp bnQgKikgKTsKK19QUk9UT1RZUCggaW50IHNldG51bSwgKGludCAqLCBpbnQsIGludCwgaW50KSAp OworX1BST1RPVFlQKCBpbnQgc2V0b24sIChpbnQgKikgKTsKK19QUk9UT1RZUCggaW50IHNldG9u YXV0LCAoaW50ICopICk7CitfUFJPVE9UWVAoIFZPSUQgc2htZG1saW4sICh2b2lkKSApOworX1BS T1RPVFlQKCBWT0lEIGluaXRtZG0sIChpbnQpICk7CitfUFJPVE9UWVAoIGNoYXIgKiBzaG93b2Zm LCAoaW50KSApOworX1BST1RPVFlQKCBjaGFyICogc2hvd29vYSwgKGludCkgKTsKK19QUk9UT1RZ UCggY2hhciAqIHNob3dzdHJpbmcsIChjaGFyICopICk7CitfUFJPVE9UWVAoIGludCBwa3RvcG4s IChjaGFyICosaW50KSApOworX1BST1RPVFlQKCBpbnQgdHJhb3BuLCAoY2hhciAqLGludCkgKTsK K19QUk9UT1RZUCggaW50IHNlc29wbiwgKGNoYXIgKixpbnQpICk7CitfUFJPVE9UWVAoIGludCBk ZWJvcG4sIChjaGFyICosaW50KSApOworX1BST1RPVFlQKCBpbnQgZGlhb3BuLCAoY2hhciAqLGlu dCxpbnQpICk7CitfUFJPVE9UWVAoIGludCBwcmVwb3AsICh2b2lkKSApOworX1BST1RPVFlQKCBp bnQgcG9wY2x2bCwgKHZvaWQpICk7CitfUFJPVE9UWVAoIGludCB2YXJ2YWwsIChjaGFyICosIENL X09GRl9UICopICk7CitfUFJPVE9UWVAoIGNoYXIgKiBldmFsYSwgKGNoYXIgKikgKTsKK19QUk9U T1RZUCggY2hhciAqIGV2YWx4LCAoY2hhciAqKSApOworX1BST1RPVFlQKCBpbnQgc2V0YWxhcm0s IChsb25nKSApOworX1BST1RPVFlQKCBpbnQgc2V0YXQsIChpbnQpICk7CitfUFJPVE9UWVAoIGlu dCBzZXRpbnAsICh2b2lkKSApOworX1BST1RPVFlQKCBWT0lEIGRvbG9nbmV0LCAodm9pZCkgKTsK K19QUk9UT1RZUCggVk9JRCBkb2xvZ2xpbmUsICh2b2lkKSApOworX1BST1RPVFlQKCBpbnQgc2V0 bGluLCAoaW50LCBpbnQsIGludCkgKTsKK19QUk9UT1RZUCggaW50IHNldG1vZGVtLCAodm9pZCkg KTsKK19QUk9UT1RZUCggaW50IHNldGZpbCwgKGludCkgKTsKK19QUk9UT1RZUCggY2hhciAqIGhv bWVwYXRoLCAodm9pZCkgKTsKKyNpZmRlZiBPUzIKK19QUk9UT1RZUCggaW50IHNldHRhcGksICh2 b2lkKSApIDsKKyNpZmRlZiBPUzJNT1VTRQorX1BST1RPVFlQKCBpbnQgc2V0bW91LCAodm9pZCkg KTsKKyNlbmRpZiAvKiBPUzJNT1VTRSAqLworI2VuZGlmIC8qIE9TMiAqLworI2lmZGVmIExPQ1VT CitfUFJPVE9UWVAoIFZPSUQgc2V0bG9jdXMsIChpbnQsaW50KSApOworX1BST1RPVFlQKCBWT0lE IHNldGF1dG9sb2N1cywgKGludCkgKTsKKyNlbmRpZiAvKiBMT0NVUyAqLworX1BST1RPVFlQKCBp bnQgc2V0YmVsbCwgKHZvaWQpICk7CitfUFJPVE9UWVAoIFZPSUQgc2V0Y21hc2ssIChpbnQpKTsK K19QUk9UT1RZUCggVk9JRCBzZXRhdXRvZGwsIChpbnQsaW50KSk7CitfUFJPVE9UWVAoIFZPSUQg c2V0ZGVic2VzLCAoaW50KSk7CitfUFJPVE9UWVAoIFZPSUQgc2V0c2VzbG9nLCAoaW50KSk7Citf UFJPVE9UWVAoIFZPSUQgc2V0YXByaW50LCAoaW50KSk7CitfUFJPVE9UWVAoIGludCBzZXR0cm0s ICh2b2lkKSApOworX1BST1RPVFlQKCBpbnQgc2V0dHJtdHlwLCAodm9pZCkgKTsKK19QUk9UT1RZ UCggaW50IHNldHNyLCAoaW50LCBpbnQpICk7CitfUFJPVE9UWVAoIGludCBzZXR4bWl0LCAodm9p ZCkgKTsKK19QUk9UT1RZUCggaW50IGRvc2V0a2V5LCAodm9pZCkgKTsKK19QUk9UT1RZUCggaW50 IGRvY2hrLCAodm9pZCkgKTsKK19QUk9UT1RZUCggaW50IGx1ZGlhbCwgKGNoYXIgKiwgaW50KSAp OworX1BST1RPVFlQKCBjaGFyICogZ2V0ZG51bSwgKGludCkgKTsKK19QUk9UT1RZUCggVk9JRCBn ZXRuZXRlbnYsICh2b2lkKSApOworX1BST1RPVFlQKCBpbnQgZ2V0eWVzbm8sIChjaGFyICosIGlu dCkgKTsKK19QUk9UT1RZUCggVk9JRCB4d29yZHMsIChjaGFyICosIGludCwgY2hhciAqW10sIGlu dCkgKTsKKyNpZmRlZiBPUzIKK19QUk9UT1RZUCggVk9JRCBrZXluYW1pbml0LCAodm9pZCkgKTsK KyNlbmRpZiAvKiBPUzIgKi8KK19QUk9UT1RZUCggaW50IHhsb29rdXAsIChzdHJ1Y3Qga2V5dGFi W10sIGNoYXIgKiwgaW50LCBpbnQgKikgKTsKK19QUk9UT1RZUCggY2hhciAqIHJsb29rdXAsIChz dHJ1Y3Qga2V5dGFiW10sIGludCwgaW50KSApOworX1BST1RPVFlQKCBpbnQgaHVwb2ssIChpbnQp ICk7CitfUFJPVE9UWVAoIGNoYXIgKiB6em5kYXRlLCAodm9pZCkgKTsKK19QUk9UT1RZUCggY2hh ciAqIHpqZGF0ZSwgKGNoYXIgKikgKTsKK19QUk9UT1RZUCggY2hhciAqIGp6ZGF0ZSwgKGNoYXIg KikgKTsKK19QUk9UT1RZUCggY2hhciAqIGNrZGF0ZSwgKHZvaWQpICk7CitfUFJPVE9UWVAoIGNo YXIgKiBjaGtfYWMsIChpbnQsIGNoYXJbXSkgKTsKK19QUk9UT1RZUCggY2hhciAqIGdtZG10eXAs ICh2b2lkKSApOworX1BST1RPVFlQKCBjaGFyICogZ2Ztb2RlLCAoaW50LCBpbnQpICk7CitfUFJP VE9UWVAoIGludCBzZXRkZXN0LCAodm9pZCkgKTsKK19QUk9UT1RZUCggVk9JRCBuZGluaXQsICh2 b2lkKSApOworX1BST1RPVFlQKCBpbnQgZG9zd2l0Y2gsICh2b2lkKSApOworX1BST1RPVFlQKCBp bnQgZG9sb2NhbCwgKHZvaWQpICk7CitfUFJPVE9UWVAoIGxvbmcgdG9kMnNlYywgKGNoYXIgKikg KTsKK19QUk9UT1RZUCggaW50IGx1bmV0LCAoY2hhciAqKSApOworX1BST1RPVFlQKCBpbnQgZG94 ZGlzLCAoaW50KSApOworX1BST1RPVFlQKCBpbnQgZG9zYXZlLCAoaW50KSApOworX1BST1RPVFlQ KCBpbnQgZG94c2VuZCwgKGludCkgKTsKK19QUk9UT1RZUCggaW50IGRveGdldCwgKGludCkgKTsK K19QUk9UT1RZUCggaW50IGRveGNvbm4sIChpbnQpICk7CitfUFJPVE9UWVAoIGludCBjbHNjb25u eCwgKGludCkgKTsKK19QUk9UT1RZUCggVk9JRCBmdHJlc2V0LCAodm9pZCkgKTsKKyNpZmRlZiBD S19LRVJCRVJPUworX1BST1RPVFlQIChpbnQgY3BfYXV0aCwgKCB2b2lkICkgKTsKKyNlbmRpZiAv KiBDS19LRVJCRVJPUyAqLworX1BST1RPVFlQKCBsb25nIG1qZCwgKGNoYXIgKikgKTsKK19QUk9U T1RZUCggY2hhciAqIG1qZDJkYXRlLCAobG9uZykgKTsKK19QUk9UT1RZUCggY2hhciAqIGNrZ2V0 cGlkLCAodm9pZCkgKTsKKworX1BST1RPVFlQKCBpbnQgZG9ncmVwLCAodm9pZCkgKTsKKworI2lm bmRlZiBOT0ZUUAorI2lmbmRlZiBTWVNGVFAKK19QUk9UT1RZUCggaW50IGRveGZ0cCwgKHZvaWQp ICk7CitfUFJPVE9UWVAoIGludCBkb2Z0cGhscCwgKHZvaWQpICk7CitfUFJPVE9UWVAoIGludCBk b3NldGZ0cCwgKHZvaWQpICk7CitfUFJPVE9UWVAoIGludCBkb3NldGZ0cGhscCwgKHZvaWQpICk7 CitfUFJPVE9UWVAoIGludCBzaG9mdHAsIChpbnQpICk7CisjZW5kaWYgLyogU1lTRlRQICovCisj ZW5kaWYgLyogTk9GVFAgKi8KKworX1BST1RPVFlQKCBWT0lEIGNtaGlzdG9yeSwgKHZvaWQpICk7 CitfUFJPVE9UWVAoIGNoYXIgKiBnZXRkY3NldCwgKHZvaWQpICk7CitfUFJPVE9UWVAoIGNoYXIg KiB0dGd0cG4sICh2b2lkKSApOworCisjaWZuZGVmIE5PU0hPVworX1BST1RPVFlQKCBpbnQgZG9z aG93LCAoaW50KSApOworX1BST1RPVFlQKCBpbnQgc2hvdGNwLCAoaW50KSApOworX1BST1RPVFlQ KCBWT0lEIHNob3BhciwgKHZvaWQpICk7CitfUFJPVE9UWVAoIFZPSUQgc2hvZmlsLCAodm9pZCkg KTsKK19QUk9UT1RZUCggVk9JRCBzaG9wYXJwLCAodm9pZCkgKTsKK19QUk9UT1RZUCggaW50IHNo b2F0dCwgKHZvaWQpICk7CitfUFJPVE9UWVAoIFZPSUQgc2hvdmVyLCAodm9pZCkgKTsKK19QUk9U T1RZUCggVk9JRCBzaG9jdGwsICh2b2lkKSApOworX1BST1RPVFlQKCBWT0lEIHNob2RibCwgKHZv aWQpICk7CisjaWZuZGVmIE5PU1BMCitfUFJPVE9UWVAoIGludCBzaG9tYWMsIChjaGFyICosIGNo YXIgKikgKTsKK19QUk9UT1RZUCggaW50IGRvc2hpZnQsIChpbnQpICk7CisjZW5kaWYgLyogTk9T UEwgKi8KKyNpZm5kZWYgTk9DU0VUUworX1BST1RPVFlQKCBWT0lEIHNob2NoYXJzZXQsICh2b2lk KSApOworX1BST1RPVFlQKCBWT0lEIHNob3BhcmwsICh2b2lkKSApOworX1BST1RPVFlQKCBWT0lE IHNob3RjcywgKGludCwgaW50KSApOworI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKyNpZm5kZWYgTk9M T0NBTAorX1BST1RPVFlQKCBWT0lEIHNob3BhcmMsICh2b2lkKSApOworX1BST1RPVFlQKCBpbnQg c2hvbW9kZW0sICh2b2lkKSApOworI2lmbmRlZiBOT0RJQUwKK19QUk9UT1RZUCggVk9JRCBzaG9k cywgKGNoYXIgKikgKTsKK19QUk9UT1RZUCggVk9JRCBzaG9kaWFsLCAodm9pZCkgKTsKK19QUk9U T1RZUCggaW50IGRvc2hvZGlhbCwgKHZvaWQpICk7CisjZW5kaWYgLyogTk9ESUFMICovCisjaWZu ZGVmIE5PTkVUCitfUFJPVE9UWVAoIGludCBzaG9uZXQsICh2b2lkKSApOworX1BST1RPVFlQKCBp bnQgc2hvdG9wdCwgKGludCkgKTsKK19QUk9UT1RZUCggaW50IHNob3RlbCwgKGludCkgKTsKKyNp ZmRlZiBDS19BVVRIRU5USUNBVElPTgorX1BST1RPVFlQIChpbnQgc2hvX2F1dGgsKCBpbnQgICkg KTsKKyNlbmRpZiAvKiBDS19BVVRIRU5USUNBVElPTiAqLworI2VuZGlmIC8qIE5PTkVUICovCitf UFJPVE9UWVAoIFZPSUQgc2hvbWRtLCAodm9pZCkgKTsKKyNlbmRpZiAvKiBOT0xPQ0FMICovCisj aWZkZWYgT1MyCitfUFJPVE9UWVAoIFZPSUQgc2hva2V5Y29kZSwgKGludCxpbnQpICk7CisjZWxz ZQorX1BST1RPVFlQKCBWT0lEIHNob2tleWNvZGUsIChpbnQpICk7CisjZW5kaWYgLyogT1MyICov CitfUFJPVE9UWVAoIFZPSUQgc2hvd2Fzc29jLCAodm9pZCkgKTsKK19QUk9UT1RZUCggVk9JRCBz aG93ZGlyb3B0cywgKHZvaWQpICk7CitfUFJPVE9UWVAoIFZPSUQgc2hvd2RlbG9wdHMsICh2b2lk KSApOworX1BST1RPVFlQKCBWT0lEIHNob3d0eXBvcHRzLCAodm9pZCkgKTsKK19QUk9UT1RZUCgg Vk9JRCBzaG93cHVyZ29wdHMsICh2b2lkKSApOworX1BST1RPVFlQKCBWT0lEIHNob2Zsb3csICh2 b2lkKSApOworX1BST1RPVFlQKCBWT0lEIHNob3hmZXIsICh2b2lkKSApOworI2lmZGVmIEFOWVNT SAorX1BST1RPVFlQKCBWT0lEIHNob3NzaCwgKHZvaWQpICk7CisjZW5kaWYJLyogQU5ZU1NIICov CisjZW5kaWYgLyogTk9TSE9XICovCisKK19QUk9UT1RZUCggVk9JRCBzaG9zdHJkZWYsIChDSEFS ICopICk7CisKKyNpZm5kZWYgTk9TUEwKK19QUk9UT1RZUCggaW50IGFkZGxvY2FsLCAoY2hhciAq KSApOworI2VuZGlmIC8qIE5PU1BMICovCisKK19QUk9UT1RZUCggaW50IHNldGRlbG9wdHMsICh2 b2lkKSApOworCisjaWZkZWYgVk1TCitfUFJPVE9UWVAoIGludCBjdnRkaXIsIChjaGFyICosIGNo YXIgKiwgaW50KSApOworI2VuZGlmIC8qIFZNUyAqLworCisjaWZkZWYgRk5GTE9BVAorX1BST1RP VFlQKCBWT0lEIGluaXRmbG9hdCwgKHZvaWQpICk7CisjZW5kaWYgLyogRk5GTE9BVCAqLworCisj aWZkZWYgQ0tDSEFOTkVMSU8KK19QUk9UT1RZUCggaW50IGRvZmlsZSwgKGludCkgKTsKKyNlbmRp ZiAvKiBDS0NIQU5ORUxJTyAqLworCisjaWZkZWYgQ0tST09UCitfUFJPVE9UWVAoIGludCBkb2No cm9vdCwgKHZvaWQpICk7CisjZW5kaWYgLyogQ0tST09UICovCisKKyNpZmRlZiBORVdGVFAKK19Q Uk9UT1RZUCggaW50IGRvZnRwdXNyLCAgICAodm9pZCkgKTsKK19QUk9UT1RZUCggaW50IGRvZnRw cHV0LCAgICAoaW50LGludCkgKTsKK19QUk9UT1RZUCggaW50IGRvZnRwZ2V0LCAgICAoaW50LGlu dCkgKTsKK19QUk9UT1RZUCggaW50IGRvZnRwcm10LCAgICAoaW50LGludCkgKTsKK19QUk9UT1RZ UCggaW50IGZ0cG9wZW4sICAgICAoY2hhciAqLCBjaGFyICosIGludCkgKTsKK19QUk9UT1RZUCgg aW50IGNtZGxpbmdldCwgICAoaW50KSApOworX1BST1RPVFlQKCBpbnQgY21kbGlucHV0LCAgIChp bnQpICk7CitfUFJPVE9UWVAoIGludCBkb2Z0cGFyZywgICAgKGNoYXIpICk7CitfUFJPVE9UWVAo IGludCBkb2Z0cGFjY3QsICAgKHZvaWQpICk7CitfUFJPVE9UWVAoIGludCBkb2Z0cHNpdGUsICAg KHZvaWQpICk7CitfUFJPVE9UWVAoIGludCBkb3NldGZ0cHBzdiwgKHZvaWQpICk7CitfUFJPVE9U WVAoIGludCBmdHBieWUsICAgICAgKHZvaWQpICk7CisjZW5kaWYgLyogTkVXRlRQICovCisKKyNp ZmRlZiBDT01NRU5UCisvKiBUaGVzZSBwcm90b3R5cGVzIGFyZSBubyBsb25nZXIgdXNlZCAqLwor X1BST1RPVFlQKCBjaGFyICogZ2V0ZHdzLCAoaW50KSApOworX1BST1RPVFlQKCBjaGFyICogZ2V0 ZGNzLCAoaW50KSApOworX1BST1RPVFlQKCBpbnQgZG9nZXQsIChpbnQpICk7CitfUFJPVE9UWVAo IGNoYXIgKiBhcnJheXZhbCwgKGludCwgaW50KSApOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKwor I2lmZGVmIEtVSQorX1BST1RPVFlQKGludCBCdWlsZEZvbnRUYWJsZSwKKyAgICAgICAgICAoc3Ry dWN0IGtleXRhYiAqKiBwVGFibGUsIHN0cnVjdCBrZXl0YWIgKiogcFRhYmxlMiwgaW50ICogcE4p KTsKKyNlbmRpZiAvKiBLVUkgKi8KKworX1BST1RPVFlQKGludCBjeF9uZXQsIChpbnQgbmV0LCBp bnQgcHJvdG9jb2wsIGNoYXIgKiB4aG9zdCwgY2hhciAqIHN2YywgCisgICAgICAgIGNoYXIgKiB1 c2VybmFtZSwgY2hhciAqIHBhc3N3b3JkLCBjaGFyICogY29tbWFuZCwKKyAgICAgICAgaW50IHBh cmFtMSwgaW50IHBhcmFtMiwgaW50IHBhcmFtMywgCisgICAgICAgIGludCBjeCwgaW50IHN4LCBp bnQgZmxhZywgaW50IGd1aSkpOworX1BST1RPVFlQKGludCBjeF9zZXJpYWwsIChjaGFyICpkZXZp Y2UsIAorICAgICAgICBpbnQgY3gsIGludCBzeCwgaW50IHNociwgaW50IGZsYWcsIGludCBndWks IGludCBzcGVjaWFsKSk7CisKKyNlbmRpZiAvKiBDS1VVU1JfSCAqLworCisvKiBFbmQgb2YgY2t1 dXNyLmggKi8KCmRpZmYgLS1naXQgYS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAu MzAyL2NrdXVzeC5jIGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3V1 c3guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzQ2NGY3Ci0tLSAvZGV2 L251bGwKKysrIGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3V1c3gu YwpAQCAtMCwwICsxLDk3MjEgQEAKKyNpbmNsdWRlICJja2NzeW0uaCIKKworLyogIEMgSyBVIFUg UyBYIC0tICAiVXNlciBJbnRlcmZhY2UiIGNvbW1vbiBmdW5jdGlvbnMuICovCisKKy8qCisgIEF1 dGhvcnM6CisgICAgRnJhbmsgZGEgQ3J1eiA8ZmRjQGNvbHVtYmlhLmVkdT4sCisgICAgICBUaGUg S2VybWl0IFByb2plY3QsIENvbHVtYmlhIFVuaXZlcnNpdHksIE5ldyBZb3JrIENpdHkKKyAgICBK ZWZmcmV5IEUgQWx0bWFuIDxqYWx0bWFuQHNlY3VyZS1lbmRwb2ludHMuY29tPgorICAgICAgU2Vj dXJlIEVuZHBvaW50cyBJbmMuLCBOZXcgWW9yayBDaXR5CisKKyAgQ29weXJpZ2h0IChDKSAxOTg1 LCAyMDExLAorICAgIFRydXN0ZWVzIG9mIENvbHVtYmlhIFVuaXZlcnNpdHkgaW4gdGhlIENpdHkg b2YgTmV3IFlvcmsuCisgICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFNlZSB0aGUgQy1LZXJtaXQg Q09QWUlORy5UWFQgZmlsZSBvciB0aGUKKyAgICBjb3B5cmlnaHQgdGV4dCBpbiB0aGUgY2tjbWFp LmMgbW9kdWxlIGZvciBkaXNjbGFpbWVyIGFuZCBwZXJtaXNzaW9ucy4KKyovCisKKy8qCisgIFRo aXMgbW9kdWxlIGNvbnRhaW5zIHVzZXIgaW50ZXJmYWNlIGZ1bmN0aW9ucyBuZWVkZWQgYnkgYm90 aCB0aGUgaW50ZXJhY3RpdmUKKyAgdXNlciBpbnRlcmZhY2UgYW5kIHRoZSBjb21tYW5kLWxpbmUt b25seSB1c2VyIGludGVyZmFjZSwgYXMgd2VsbCBhcyB0aGUKKyAgc2NyZWVuLWNvbnRyb2wgcm91 dGluZXMgKGN1cnNlcyBhbmQgZXF1aXZhbGVudCkuCisqLworCisvKiBJbmNsdWRlcyAqLworCisj aW5jbHVkZSAiY2tjZGViLmgiCisjaW5jbHVkZSAiY2tjYXNjLmgiCisjaW5jbHVkZSAiY2tja2Vy LmgiCisjaW5jbHVkZSAiY2t1dXNyLmgiCisjaW5jbHVkZSAiY2tjeGxhLmgiCisKKyNpZm5kZWYg Tk9IVEVSTUNBUAorI2lmZGVmIE5PVEVSTUNBUAorI2RlZmluZSBOT0hURVJNQ0FQCisjZWxzZQor I2lmbmRlZiBCU0Q0NAorI2RlZmluZSBOT0hURVJNQ0FQCisjZWxzZQorI2lmZGVmIF9fYnNkaV9f CisjZGVmaW5lIE5PSFRFUk1DQVAKKyNlbHNlCisjaWZkZWYgT1BFTkJTRAorI2RlZmluZSBOT0hU RVJNQ0FQCisjZWxzZQorI2lmZGVmIE1BQ09TWAorI2RlZmluZSBOT0hURVJNQ0FQCisjZW5kaWYg LyogTUFDT1NYICovCisjZW5kaWYgLyogT1BFTkJTRCAqLworI2VuZGlmIC8qIF9fYnNkaV9fICov CisjZW5kaWYgLyogQlNENDQgKi8KKyNlbmRpZiAvKiBOT1RFUk1DQVAgKi8KKyNlbmRpZiAvKiBO T0hURVJNQ0FQICovCisKKyNpZm5kZWYgTk9URVJNQ0FQCisjaWZkZWYgQlNENDQKKyNpZm5kZWYg Tk9IVEVSTUNBUAorI2luY2x1ZGUgPHRlcm1jYXAuaD4KKyNlbmRpZiAvKiBOT0hURVJNQ0FQICov CisjZW5kaWYgLyogQlNENDQgKi8KKyNlbHNlICAvKiAhQlNENDQgKi8KKyNpZmRlZiBsaW51eAor I2luY2x1ZGUgPHRlcm0uaD4KKyNlbmRpZiAvKiBsaW51eCAqLworI2VuZGlmIC8qIE5PVEVSTUNB UCAqLworCisjaWZkZWYgT1MyCisjaW5jbHVkZSA8c3RyaW5nLmg+CitfUFJPVE9UWVAoY2hhciAq IG9zMl9nZXRob3N0bmFtZSwgKHZvaWQpKTsKKyNkZWZpbmUgZ2V0cGlkIF9nZXRwaWQKKyNlbmRp ZiAvKiBPUzIgKi8KKyNpZmRlZiBCU0Q0NAorI2luY2x1ZGUgPGVycm5vLmg+CisjZW5kaWYgLyog QlNENDQgKi8KKworZXh0ZXJuIHh4X3N0cnAgeHhzdHJpbmc7CisKKyNpZmRlZiBPUzIKKyNpbmNs dWRlICJja2NuZXQuaCIKKyNlbHNlIC8qIE9TMiAqLworX1BST1RPVFlQKCBjaGFyICogY2tnZXRw ZWVyLCAoVk9JRCkpOworX1BST1RPVFlQKGludCBnZXRsb2NhbGlwYWRkciwgKHZvaWQpKTsKK19Q Uk9UT1RZUChpbnQgaXN0bmNvbXBvcnQsICh2b2lkKSk7CisjaWZuZGVmIE5PQ0tHRVRGUUhPU1QK K19QUk9UT1RZUCggY2hhciAqIGNrZ2V0ZnFob3N0bmFtZSwoY2hhciAqKSk7CisjZW5kaWYJLyog Tk9DS0dFVEZRSE9TVCAqLworI2lmbmRlZiBORVRDT05OCisvKgorICBXZSBzaG91bGQganVzdCBw dWxsIGluIGNrY25ldC5oIGhlcmUsIGJ1dCBpdCBjYXVzZXMgYSBjb25mbGljdCB3aXRoIGN1cnNl cy5oLgorKi8KKyNpZmRlZiBUQ1BTT0NLRVQKKyNkZWZpbmUgTkVUQ09OTgorI2Vsc2UKKyNpZmRl ZiBTVU5YMjUKKyNkZWZpbmUgTkVUQ09OTgorI2Vsc2UKKyNpZmRlZiBTVFJBVFVTWDI1CisjZGVm aW5lIE5FVENPTk4KKyNlbHNlCisjaWZkZWYgSUJNWDI1CisjZGVmaW5lIE5FVENPTk4KKyNlbHNl CisjaWZkZWYgSFBYMjUKKyNkZWZpbmUgTkVUQ09OTgorI2Vsc2UKKyNpZmRlZiBERUNORVQKKyNk ZWZpbmUgTkVUQ09OTgorI2Vsc2UKKyNpZmRlZiBOUElQRQorI2RlZmluZSBORVRDT05OCisjZWxz ZQorI2lmZGVmIENLX05FVEJJT1MKKyNkZWZpbmUgTkVUQ09OTgorI2lmZGVmIFNVUEVSTEFUCisj ZGVmaW5lIE5FVENPTk4KKyNlbHNlCisjZW5kaWYgLyogU1VQRVJMQVQgKi8KKyNlbmRpZiAvKiBU Q1BTT0NLRVQgKi8KKyNlbmRpZiAvKiBTVU5YMjUgKi8KKyNlbmRpZiAvKiBTVFJBVFVTWDI1ICov CisjZW5kaWYgLyogSUJNWDI1ICovCisjZW5kaWYgLyogSFBYMjUgKi8KKyNlbmRpZiAvKiBERUNO RVQgKi8KKyNlbmRpZiAvKiBOUElQRSAqLworI2VuZGlmIC8qIENLX05FVEJJT1MgKi8KKyNlbmRp ZiAvKiBORVRDT05OICovCisjZW5kaWYgLyogT1MyICovCisKKyNpZm5kZWYgVENQU09DS0VUCisj aWZkZWYgTVVMVElORVQKKyNkZWZpbmUgVENQU09DS0VUCisjZW5kaWYgLyogTVVMVElORVQgKi8K KyNpZmRlZiBERUNfVENQSVAKKyNkZWZpbmUgVENQU09DS0VUCisjZW5kaWYgLyogREVDX1RDUElQ ICovCisjaWZkZWYgV0lOVENQCisjZGVmaW5lIFRDUFNPQ0tFVAorI2VuZGlmIC8qIFdJTlRDUCAq LworI2lmZGVmIFRDUFdBUkUKKyNkZWZpbmUgVENQU09DS0VUCisjZW5kaWYgLyogVENQV0FSRSAq LworI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLworCisjaWZkZWYgT1MyCisjaWZkZWYgTlQKKyNpbmNs dWRlIDx3aW5kb3dzLmg+CisjaW5jbHVkZSA8dGFwaS5oPgorI2luY2x1ZGUgImNrbnRhcC5oIgor I2Vsc2UgLyogTlQgKi8KKyNkZWZpbmUgSU5DTF9WSU8KKyNpbmNsdWRlIDxvczIuaD4KKyNlbmRp ZiAvKiBOVCAqLworI2lmZGVmIENPTU1FTlQgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdv dWxkIHlvdSBiZWxpZXZlICovCisjdW5kZWYgQ09NTUVOVCAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogPG9zMi5oPiBkZWZpbmVzIHRoaXMgPyAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyNp ZmRlZiBDS19ORVRCSU9TCisjaW5jbHVkZSAiY2tvbmJpLmgiCisjZW5kaWYgLyogQ0tfTkVUQklP UyAqLworCisjaW5jbHVkZSAiY2tvY29uLmgiCitleHRlcm4gYXNjcmVlbiBjb21tYW5kc2NyZWVu OworI2lmZGVmIEtVSQorI2luY2x1ZGUgImlrdWkuaCIKKyNlbmRpZiAvKiBLVUkgKi8KKyNlbmRp ZiAvKiBPUzIgKi8KKworI2lmZGVmIE5UCisjaW5jbHVkZSAiY2tud2luLmgiCisjZW5kaWYgLyog TlQgKi8KKyNpZmRlZiBPUzIKKyNpbmNsdWRlICJja293aW4uaCIKKyNpbmNsdWRlICJja29zeW4u aCIKKyNlbmRpZiAvKiBPUzIgKi8KKworI2lmZGVmIENLX1RBUEkKK2V4dGVybiBpbnQgdHR0YXBp OworZXh0ZXJuIGludCB0YXBpcGFzczsKKyNlbmRpZiAvKiBDS19UQVBJICovCisKKyNpZmRlZiBD S19LRVJCRVJPUworI2luY2x1ZGUgImNrdWF0aC5oIgorI2VuZGlmIC8qIENLX0tFUkJFUk9TICov CisKKyNpZm5kZWYgV0lOVENQCisjaW5jbHVkZSA8c2lnbmFsLmg+CisjZW5kaWYgLyogV0lOVENQ ICovCisKKyNpZmRlZiBWTVMKKyNpbmNsdWRlIDxkZXNjcmlwLmg+CisjaW5jbHVkZSA8c3NkZWYu aD4KKyNpbmNsdWRlIDxzdHNkZWYuaD4KKyNpZm5kZWYgT0xEX1ZNUworI2luY2x1ZGUgPGxpYiRy b3V0aW5lcy5oPiAgLyogTm90IGZvciBWQVggQyAyLjMgKi8KKyNlbHNlCisjaW5jbHVkZSA8bGli ZGVmLmg+CisjZW5kaWYgLyogT0xEX1ZNUyAqLworI2lmZGVmIFdJTlRDUAorI2luY2x1ZGUgPHNp Z25hbC5oPgorI2VuZGlmIC8qIFdJTlRDUCAqLworI2VuZGlmIC8qIFZNUyAqLworCisjaWZkZWYg RENMRkRPUEVOCisvKiBmZG9wZW4oKSBuZWVkcyBkZWNsYXJpbmcgYmVjYXVzZSBpdCdzIG5vdCBk ZWNsYXJlZCBpbiA8c3RkaW8uaD4gKi8KK19QUk9UT1RZUCggRklMRSAqIGZkb3BlbiwgKGludCwg Y2hhciAqKSApOworI2VuZGlmIC8qIERDTEZET1BFTiAqLworCisjaWZkZWYgRENMUE9QRU4KKy8q IHBvcGVuKCkgbmVlZHMgZGVjbGFyaW5nIGJlY2F1c2UgaXQncyBub3QgZGVjbGFyZWQgaW4gPHN0 ZGlvLmg+ICovCitfUFJPVE9UWVAoIEZJTEUgKiBwb3BlbiwgKGNoYXIgKiwgY2hhciAqKSApOwor I2VuZGlmIC8qIERDTFBPUEVOICovCisKK2ludCB0dF9jcmQgPSAwOyAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBDYXJyaWFnZSByZXR1cm4gZGlzcGxheSAqLworaW50IHR0X2xmZCA9IDA7ICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIExpbmVmZWVkIGRpc3BsYXkgKi8KK2ludCBpbnRlcnJ1 cHRlZCA9IDA7ICAgICAgICAgICAgICAgICAgICAvKiBJbnRlcnJ1cHRlZCBmcm9tIGtleWJvYXJk IGZsYWcgKi8KK2ludCBmeGRfaW5pdGVkID0gMDsJCQkvKiBGdWxsc2NyZWVuIHN0dWZmIGluaXRp YWxpemVkICovCisKKyNpZmRlZiBERUJVRworY2hhciBkZWJmaWxbQ0tNQVhQQVRIKzFdOyAgICAg ICAgICAgICAgIC8qIERlYnVnZ2luZyBsb2cgZmlsZSBuYW1lICovCisjZW5kaWYgLyogREVCVUcg Ki8KKworI2lmZGVmIFRMT0cKK2NoYXIgdHJhZmlsW0NLTUFYUEFUSCsxXTsgICAgICAgICAgICAg ICAvKiBUcmFuc2FjdGlvbiBsb2cgZmlsZSBuYW1lICovCisjZW5kaWYgLyogVExPRyAqLworCitj aGFyIHNlc2ZpbFtDS01BWFBBVEgrMV07ICAgICAgICAgICAgICAgLyogU2Vzc2lvbiBsb2cgZmls ZSBuYW1lICovCisKKyNpZmRlZiBDS0xPR0RJQUwKK2NoYXIgZGlhZmlsW0NLTUFYUEFUSCsxXTsg ICAgICAgICAgICAgICAvKiBDb25uZWN0aW9uIGxvZyBmaWxlIG5hbWUgKi8KK2NoYXIgY3hsb2di dWZbQ1hMT0dCVUZMKzFdOyAgICAgICAgICAgICAvKiBDb25uZWN0aW9uIGxvZyByZWNvcmQgYnVm ZmVyICovCitpbnQgY3hfYWN0aXZlID0gMDsgICAgICAgICAgICAgICAgICAgICAgLyogQ29ubmVj dGlvbiBpcyBhY3RpdmUgKi8KK2V4dGVybiBpbnQgZGlhbG9nOworI2VuZGlmIC8qIENLTE9HRElB TCAqLworCisjaWZkZWYgRFlOQU1JQworc3RhdGljIGNoYXIgKmNtZHN0ciA9IE5VTEw7ICAgICAg ICAgICAgIC8qIFBsYWNlIHRvIGJ1aWxkIGdlbmVyaWMgY29tbWFuZCAqLworI2Vsc2UKKyNpZmRl ZiBwZHAxMQorc3RhdGljIGNoYXIgY21kc3RyWzI1Nl07CisjZWxzZQorc3RhdGljIGNoYXIgY21k c3RyWzQwOTZdOworI2VuZGlmIC8qIHBkcDExICovCisjZW5kaWYgLyogRFlOQU1JQyAqLworCisj aWZuZGVmIE5PTVNFTkQKK2NoYXIgZnNwZWNbQ01EQkwrNF07ICAgICAgICAgICAgICAgICAgICAv KiBGaWxlbmFtZSBzdHJpbmcgZm9yIFx2KGZpbGVzcGVjKSAqLworaW50IGZzcGVjbGVuID0gQ01E Qkw7CisjZWxzZQorY2hhciBmc3BlY1tDS01BWFBBVEgrNF07CitpbnQgZnNwZWNsZW4gPSBDS01B WFBBVEg7CisjZW5kaWYgLyogTk9NU0VORCAqLworCitjaGFyICogcmZzcGVjID0gTlVMTDsJCQkv KiBSZWNlaXZlZCBmaWxlc3BlYzogbG9jYWwgKi8KK2NoYXIgKiBwcmZzcGVjID0gTlVMTDsJCQkv KiBQcmVsaW1pbmFyeSByZnNwZWMgKi8KK2NoYXIgKiBzZnNwZWMgPSBOVUxMOwkJCS8qIFNlbnQg ZmlsZXNwZWM6IGxvY2FsICovCitjaGFyICogcHNmc3BlYyA9IE5VTEw7CQkJLyogUHJlbGltaW5h cnkgc2ZzcGVjICovCitjaGFyICogc3Jmc3BlYyA9IE5VTEw7CQkJLyogUmVjZWl2ZWQgZmlsZXNw ZWM6IHJlbW90ZSAqLworY2hhciAqIHBzcmZzcGVjID0gTlVMTDsJCQkvKiBQcmVsaW1pbmFyeSBz cmZzcGVjICovCitjaGFyICogcnJmc3BlYyA9IE5VTEw7CQkJLyogU2VudCBmaWxlc3BlYzogcmVt b3RlICovCitjaGFyICogcHJyZnNwZWMgPSBOVUxMOwkJCS8qIFByZWxpbWluYXJ5IHJyZnNwZWMg Ki8KKworaW50IHN1Y2Nlc3MgPSAxLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvbW1hbmQg c3VjY2Vzcy9mYWlsdXJlIGZsYWcgKi8KKyAgICBjbWRsdmwgPSAwLCAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBDb21tYW5kIGxldmVsICovCisgICAgYWN0aW9uID0gMCwJCQkJLyogQWN0aW9u IHNlbGVjdGVkIG9uIGNvbW1hbmQgbGluZSAqLworICAgIHNsb2d0cyA9IDAsCQkJCS8qIFNlc3Np b24tbG9nIHRpbWVzdGFtcHMgb24vb2ZmICovCisgICAgc2xvZ251bCA9IDAsCQkJLyogU2Vzc2lv bi1sb2cgbnVsbC10ZXJtaW5hdGVkIGxpbmVzICovCisjaWZkZWYgVU5JWAorICAgIHNlc3NmdCA9 IFhZRlRfVCwgICAgICAgICAgICAgICAgICAgIC8qIFNlc3Npb24gbG9nIGZpbGUgdHlwZSAqLwor I2Vsc2UKKyAgICBzZXNzZnQgPSBYWUZUX0IsCQkJLyogKHRleHQgZm9yIFVOSVggYmluYXJ5IGZv ciBvdGhlcnMpICovCisjZW5kaWYgLyogVU5JWCAqLworICAgIHBmbGFnID0gMSwgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIFByaW50IHByb21wdCAqLworICAgIG1zZ2ZsZyA9IDE7ICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIFByaW50IGluZm9ybWF0aW9uYWwgbWVzc2FnZXMgKi8KKwor ZXh0ZXJuIGludCB4YXNrbW9yZSwgc2F2ZWFzazsJCS8qIE1vcmUtcHJvbXB0aW5nICovCisKKyNp ZmRlZiBDS19BUEMKK2V4dGVybiBpbnQgYXBjYWN0aXZlOworI2VuZGlmIC8qIENLX0FQQyAqLwor LyogRXh0ZXJuYWwgdmFyaWFibGVzICovCisKK2V4dGVybiBpbnQgbG9jYWwsIHF1aWV0LCBiaW5h cnksIG5ldHdvcmssIHdoYXQsIHBhcml0eSwgeGl0c3RhLCBlc2NhcGUsCisgIHRsZXZlbCwgYmdz ZXQsIGJhY2tncmQsIHhzdXNwZW5kLCBjbWRpbnQsIG5ldHR5cGUsIHNlc2xvZywgZGZsb2M7CisK K2V4dGVybiBpbnQgY21kX3Jvd3MsIGNtZF9jb2xzLCB4Y21kc3JjOworCitleHRlcm4gY2hhciBj bWRmaWxbXTsKKworI2lmZGVmIFZNUworZXh0ZXJuIGludCBiYXRjaDsKKyNlbmRpZiAvKiBWTVMg Ki8KKworI2lmZGVmIGRhdGFnZW5lcmFsICAgICAgICAgICAgICAgICAgICAgIC8qIDIvMTIvOTIg RU5IICovCisjaW5jbHVkZSA8c3lzaWQuaD4KK2V4dGVybiBpbnQgY29uX3JlYWRzX210LCBjb25p bnRfY2gsIGNvbmludF9hdmw7CisjZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KKworZXh0ZXJuIGxv bmcgc3BlZWQ7CisKK2V4dGVybiBjaGFyIHR0bmFtZVtdLCAqZGZ0dHksICpjbWFyZywgKipjbWxp c3QsICp2ZXJzaW8sIG15aG9zdFtdOworCisjaWZuZGVmIE5PQ1NFVFMKK2V4dGVybiBpbnQgZmNo YXJzZXQsIHRjaGFyc2V0LCB4ZnJ4bGE7CitleHRlcm4gc3RydWN0IGNzaW5mbyBmY3NpbmZvW10s IHRjc2luZm9bXTsKKyNlbmRpZiAvKiBOT0NTRVRTICovCisKKyNpZmRlZiBPUzIKK2V4dGVybiB1 bnNpZ25lZCBjaGFyIGNvbG9yY21kOworI2VuZGlmIC8qIE9TMiAqLworCisjaWZkZWYgTk9YRkVS CisKK2ludCBmZGlzcGxhID0gWFlGRF9OOworCisjZWxzZSAgLyogTk9YRkVSIGlzIG5vdCBkZWZp bmVkICovCisKKyNpZmRlZiBPUzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGaWxl IHRyYW5zZmVyIGRpc3BsYXkgdHlwZSAqLworaW50IGZkaXNwbGEgPSBYWUZEX0M7ICAgICAgICAg ICAgICAgICAgIC8qIEN1cnNlcyAoZnVsbHNjcmVlbikgaWYgd2UgaGF2ZSBpdCAqLworI2Vsc2UK KyNpZmRlZiBDS19DVVJTRVMKK2ludCBmZGlzcGxhID0gWFlGRF9DOworI2Vsc2UKK2ludCBmZGlz cGxhID0gWFlGRF9TOyAgICAgICAgICAgICAgICAgICAvKiBPdGhlcndpc2UgQ1JUICovCisjZW5k aWYgLyogQ0tfQ1VSU0VTICovCisjZW5kaWYgLyogT1MyICovCisKK2V4dGVybiBzdHJ1Y3QgY2tf cCBwdGFiW107CitleHRlcm4gaW50IHByb3RvY29sLCB4ZnJiZWwsIHhmcmludDsKKworI2lmZGVm IFNUUkVBTUlORworZXh0ZXJuIGludCBzdHJlYW1pbmcsIHN0cmVhbW9rOworI2VuZGlmIC8qIFNU UkVBTUlORyAqLworCisvKiBVc2VkIGludGVybmFsbHkgKi8KKworI2lmZGVmIEtVSQorX1BST1RP VFlQKCBWT0lEIHNjcmVlbmcsIChpbnQsIGNoYXIsIGxvbmcsIGNoYXIgKikgKTsKKyNlbmRpZgkv KiBLVUkgKi8KK19QUk9UT1RZUCggVk9JRCBzY3JlZW5jLCAoaW50LCBjaGFyLCBDS19PRkZfVCwg Y2hhciAqKSApOworCisKKyNpZmRlZiBDS19DVVJTRVMKKyNpZm5kZWYgRFlOQU1JQworc3RhdGlj IGNoYXIgeHRybWJ1ZltUUk1CVUZMXTsgICAgICAgICAgIC8qIHRnZXRlbnQoKSBidWZmZXIgKi8K K2NoYXIgKiB0cm1idWYgPSB4dHJtYnVmOworI2Vsc2UKK2NoYXIgKiB0cm1idWYgPSBOVUxMOwor I2VuZGlmIC8qIERZTkFNSUMgKi8KK19QUk9UT1RZUCggc3RhdGljIFZPSUQgZHB5aW5pdCwgKHZv aWQpICk7CitfUFJPVE9UWVAoIHN0YXRpYyBsb25nIHNob2NwcywgKGludCwgQ0tfT0ZGX1QsIENL X09GRl9UKSApOworX1BST1RPVFlQKCBzdGF0aWMgQ0tfT0ZGX1Qgc2hvZXRsLCAoQ0tfT0ZGX1Qs IGxvbmcsIENLX09GRl9ULCBDS19PRkZfVCkgKTsKKyNlbmRpZiAvKiBDS19DVVJTRVMgKi8KKwor c3RhdGljIGludCBmdF93aW4gPSAwOyAgLyogRnVsbHNjcmVlbiBmaWxlIHRyYW5zZmVyIGRpc3Bs YXkgd2luZG93IGlzIGFjdGl2ZSAqLworCisvKiBWYXJpYWJsZXMgZGVjbGFyZWQgaGVyZSAqLwor CitzdGF0aWMgY2hhciAqIHNrcmVhc29uW10gPSB7CisgICAgIiIsCQkJCQkvKiAwICovCisgICAg IlJlbW90ZSBmaWxlIG5vdCBvbGRlciIsCQkvKiBTS1BfREFUICovCisgICAgIklkZW50aWNhbCBt b2RpZmljYXRpb24gdGltZXMiLAkvKiBTS1BfRVFVICovCisgICAgIlR5cGUiLAkJCQkvKiBTS1Bf VFlQICovCisgICAgIlNpemUiLAkJCQkvKiBTS1BfU0laICovCisgICAgIk5hbWUgY29sbGlzaW9u IiwJCQkvKiBTS1BfTkFNICovCisgICAgIkV4Y2VwdGlvbiBMaXN0IiwJCQkvKiBTS1BfRVhMICov CisgICAgIkRvdCBmaWxlIiwJCQkJLyogU0tQX0RPVCAqLworICAgICJCYWNrdXAgZmlsZSIsCQkJ LyogU0tQX0JLVSAqLworICAgICJSZWNvdmVyeSBub3QgbmVlZGVkIiwJCS8qIFNLUF9SRVMgKi8K KyAgICAiQWNjZXNzIGRlbmllZCIsCQkJLyogU0tQX0FDQyAqLworICAgICJOb3QgYSByZWd1bGFy IGZpbGUiLAkJLyogU0tQX05SRiAqLworICAgICJTaW11bGF0ZWQiLAkJCS8qIFNLUF9TSU0gKi8K KyAgICAiU2ltdWxhdGVkIC0gUmVtb3RlIGZpbGUgb2xkZXIiLAkvKiBTS1BfWFVQICovCisgICAg IlNpbXVsYXRlZCAtIE5vIHJlbW90ZSBmaWxlIiwJLyogU0tQX1hOWCAqLworfTsKK3N0YXRpYyBp bnQgbnNrcmVhc29uID0gKHNpemVvZihza3JlYXNvbikgLyBzaXplb2YoY2hhciAqKSk7CisKK2No YXIgKgorZ3NrcmVhc29uKG4pIGludCBuOyB7CisgICAgcmV0dXJuKChuID4gMCAmJiBuIDwgbnNr cmVhc29uKSA/IHNrcmVhc29uW25dIDogIiIpOworfQorCitjaGFyIHBrdGZpbFtDS01BWFBBVEgr MV07ICAgICAgICAgICAgICAgLyogUGFja2V0IGxvZyBmaWxlIG5hbWUgKi8KKworI2lmbmRlZiBO T01TRU5EICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE11bHRpcGxlIFNFTkQgKi8KK2NoYXIg Km1zZmlsZXNbTVNFTkRNQVhdOworI2VuZGlmIC8qIE5PTVNFTkQgKi8KKworI2lmZGVmIENLX1RJ TUVSUworZXh0ZXJuIGxvbmcgcnR0ZGVsYXk7CitleHRlcm4gaW50ICBydHRmbGc7CisjZW5kaWYg LyogQ0tfVElNRVJTICovCitleHRlcm4gaW50IHJjdnRpbW87CisKKyNpZmRlZiBDS19SRVNFTkQK K2V4dGVybiBpbnQgc2VuZG1vZGU7CitleHRlcm4gQ0tfT0ZGX1Qgc2VuZHN0YXJ0LCByc19sZW47 CisjZW5kaWYgLyogQ0tfUkVTRU5EICovCisKKyNpZmRlZiBDS19QQ1RfQkFSICAgICAgICAgICAg ICAgICAgICAgICAvKiBGaWxlIHRyYW5zZmVyIHRoZXJtb21ldGVyICovCitpbnQgdGhlcm1vbWV0 ZXIgPSAxOyAgICAgICAgICAgICAgICAgICAgLyogT04gYnkgZGVmYXVsdCAqLworI2VuZGlmIC8q IENLX1BDVF9CQVIgKi8KKworI2lmZGVmIEdGVElNRVIKK0NLRkxPQVQgZ3R2ID0gLTEuMCwgb2xk Z3R2ID0gLTEuMDsKKyNlbHNlCisjaWZuZGVmIE9TMgorc3RhdGljCisjZW5kaWYgLyogT1MyICov CisgIGxvbmcgZ3R2ID0gLTFMLCBvbGRndHYgPSAtMUw7CisjZW5kaWYgLyogR0ZUSU1FUiAqLwor CitleHRlcm4gaW50IHNlcnZlciwgYmN0dSwgcnB0ZmxnLCBlYnFmbGcsIHNwc2l6LCB1cnBzaXos IHdtYXgsIGN6c2VlbiwgY3hzZWVuLAorICB3aW5sbywgZGlzcGxhLCB0aW1pbnQsIG5wYWQsIGVi cSwgYmN0ciwgcnB0cSwgYXRjYXB1LCBscGNhcHUsCisgIHN3Y2FwdSwgd3Nsb3RuLCB3c2xvdHIs IHJ0aW1vLCBteXBhZG4sIHNxLCBjYXBhcywgcnBzaXosIHRzZWNzLAorICBwa3Rsb2csIGxzY2Fw dSwgZGVzdCwgc3J2ZGlzLCB3c2xvdHMsIHNwYWNrZXRzLCBzcGt0bCwgcnBrdGwsCisgIHJldHJh bnMsIHdjdXIsIG51bWVycnMsIGZzZWNzLCB3aGF0cnUsIGNydW5jaGVkLCB0aW1lb3V0cywKKyAg cnBhY2tldHMsIGZuY252LCBieWVfYWN0aXZlLCBkaXNjYXJkLCBpbnNlcnZlciwgZGlyYWN0aXZl LCBjZGFjdGl2ZTsKKworZXh0ZXJuIGxvbmcgZmlsY250LCBmaWxyZWosIHJwdG4sIGZpbGNwcywg dGZjcHMsIGNwcywgcGVha2NwczsKK2V4dGVybiBDS19PRkZfVCBmZmMsIHRmYywgZnNpemU7IAor Citsb25nIG9sZGNwcyA9IDBMOworCitleHRlcm4gQ0hBUiAqcmRhdGFwLCBwYWRjaCwgc2VvbCwg Y3RscSwgbXlwYWRjLCBlb2wsICplcGt0bXNnOworZXh0ZXJuIGNoYXIgKnhmcm1zZzsKKworI2lm ZGVmIElLU0RCCitGSUxFICogZGJmcCA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgLyogRmls ZSBwb2ludGVyIHRvIGRhdGFiYXNlIGZpbGUgKi8KKworaW50IGRiZW5hYmxlZCA9IDE7ICAgICAg ICAgICAgICAgICAgICAgIC8qIEZsYWcgZm9yIGRhdGFiYXNlIGlzIGVuYWJsZWQgKi8KK2V4dGVy biBpbnQgaWtkYm9wZW47ICAgICAgICAgICAgICAgICAgICAvKiBGbGFnIGZvciBkYXRhYmFzZSBp cyBvcGVuICovCisKK3Vuc2lnbmVkIGxvbmcgbXlkYnNlZWsgPSAwTDsgICAgICAgICAgICAvKiBT ZWVrIHBvaW50ZXIgdG8gbXkgcmVjb3JkICovCitpbnQgbXlkYnNsb3QgPSAwOyAgICAgICAgICAg ICAgICAgICAgICAgLyogTXkgc2xvdCBudW1iZXIgKi8KK3Vuc2lnbmVkIGxvbmcgbXlmbGFncyA9 IDBMOyAgICAgICAgICAgICAvKiBNeSBmbGFncyAqLwordW5zaWduZWQgbG9uZyBteWF0eXBlID0g MEw7ICAgICAgICAgICAgIC8qIE15IGF1dGhvcml6YXRpb24gdHlwZSAqLwordW5zaWduZWQgbG9u ZyBteWFtb2RlID0gMEw7ICAgICAgICAgICAgIC8qIE15IGF1dGhvcml6YXRpb24gbW9kZSAqLwor dW5zaWduZWQgbG9uZyBteXN0YXRlID0gMEw7ICAgICAgICAgICAgIC8qIE15IHN0YXRlIChTRU5E LCBSRUNFSVZFLCBldGMpICovCit1bnNpZ25lZCBsb25nIG15cGlkID0gMEw7ICAgICAgICAgICAg ICAgLyogTXkgUElEICovCit1bnNpZ25lZCBsb25nIG15aXAgPSAwTDsgICAgICAgICAgICAgICAg LyogTXkgSVAgYWRkcmVzcyAqLwordW5zaWduZWQgbG9uZyBwZWVyaXAgPSAwTDsgICAgICAgICAg ICAgIC8qIE15IHBlZXIncyBJUCBhZGRyZXNzICovCisKK3Vuc2lnbmVkIGxvbmcgZGJpcCA9IDBM OyAgICAgICAgICAgICAgICAvKiBJUCBhZGRyZXNzIGluIGRiIHJlY29yZCAqLwordW5zaWduZWQg bG9uZyBkYnBpZCA9IDBMOyAgICAgICAgICAgICAgIC8qIFBJRCBpbiBkYiByZWNvcmQgKi8KK3Vu c2lnbmVkIGxvbmcgZGJmbGFncyA9IDBMOyAgICAgICAgICAgICAvKiBGbGFncyBmaWVsZCBpbiBk YiByZWNvcmQgKi8KK3Vuc2lnbmVkIGxvbmcgZGJsYXN0dXNlZCA9IDBMOyAgICAgICAgICAvKiBM YXN0IGluLXVzZSByZWNvcmQgaW4gZGIgKi8KK2NoYXIgZGJyZWNbREJfUkVDTF07ICAgICAgICAg ICAgICAgICAgICAvKiBEYXRhYmFzZSByZWNvcmQgYnVmZmVyICovCisKK2NoYXIgKiBkYmRpciAg ID0gTlVMTDsgICAgICAgICAgICAgICAgICAvKiBEYXRhYmFzZSBkaXJlY3RvcnkgKi8KK2NoYXIg KiBkYmZpbGUgID0gTlVMTDsgICAgICAgICAgICAgICAgICAvKiBEYXRhYmFzZSBmaWxlIGZ1bGwg cGF0aG5hbWUgKi8KK2NoYXIgbXloZXhpcFszM10gPSB7IE5VTCwgTlVMIH07ICAgICAgICAvKiBN eSBJUCBhZGRyZXNzIGluIGhleCAqLworY2hhciBwZWVyaGV4aXBbMzNdID0geyBOVUwsIE5VTCB9 OyAgICAgIC8qIENsaWVudCdzIElQIGFkZHJlc3MgaW4gaGV4ICovCisjZW5kaWYgLyogSUtTREIg Ki8KKworI2lmZGVmIEdGVElNRVIKK2V4dGVybiBDS0ZMT0FUIGZwZnNlY3MsIGZwdHNlY3MsIGZw eGZzZWNzOworI2Vsc2UKK2V4dGVybiBsb25nIHhmc2VjczsKKyNlbmRpZiAvKiBHRlRJTUVSICov CisjZW5kaWYgLyogTk9YRkVSICovCisKKyNpZmRlZiBUQ1BTT0NLRVQKKyNpZmRlZiBORVdGVFAK K2V4dGVybiBjaGFyICogZnRwX2hvc3QsIGZ0cF9zcnZ0eXBbXTsKK2V4dGVybiBpbnQgZnRwX2Nz eCwgZnRwX2NzbCwgZnRwX2RlYjsKKyNlbmRpZiAvKiBORVdGVFAgKi8KK2V4dGVybiBjaGFyIG15 aXBhZGRyW107CisjZW5kaWYgLyogVENQU09DS0VUICovCisKKyNpZm5kZWYgTk9JQ1AKKyNpZm5k ZWYgTk9TUEwKKyAgICBleHRlcm4gc3RydWN0IG10YWIgKm1hY3RhYjsgICAgICAgICAvKiBGb3Ig T05fRVhJVCBtYWNyby4gKi8KKyAgICBleHRlcm4gaW50IG5tYWM7CisjZW5kaWYgLyogTk9TUEwg Ki8KKyNpZmRlZiBEQ01EQlVGCitleHRlcm4gY2hhciAqY21kYnVmOyAgICAgICAgICAgICAgICAg ICAgLyogQ29tbWFuZCBidWZmZXIgKi8KKyNlbHNlCitleHRlcm4gY2hhciBjbWRidWZbXTsgICAg ICAgICAgICAgICAgICAgLyogQ29tbWFuZCBidWZmZXIgKi8KKyNlbmRpZiAvKiBEQ01EQlVGICov CitleHRlcm4gaW50IGNtZF9xdW90aW5nOworI2VuZGlmIC8qIE5PSUNQICovCisKKyNpZm5kZWYg Tk9DQ1RSQVAKKyNpZmRlZiBOVAorI2luY2x1ZGUgPHNldGptcGV4Lmg+CisjZWxzZSAvKiBOVCAq LworI2luY2x1ZGUgPHNldGptcC5oPgorI2VuZGlmIC8qIE5UICovCisjaW5jbHVkZSAiY2tjc2ln LmgiCitleHRlcm4gY2tqbXBidWYgY21qYnVmOworI2VuZGlmIC8qIE5PQ0NUUkFQICovCisKK2V4 dGVybiBpbnQgeGZpbGV0eXBlLCBuc2NhbmZpbGU7CisKK2ludAorc2hvZXNjKGVzY2FwZSkgaW50 IGVzY2FwZTsgeworICAgIGV4dGVybiBjaGFyICogY2NudGFiW107CQkvKiBDMCBjb250cm9sIGNo YXJhY3RlciBuYW1lIHRhYmxlICovCisgICAgZXh0ZXJuIGludCB0dF9lc2NhcGU7CisgICAgaWYg KChlc2NhcGUgPiAwICYmIGVzY2FwZSA8IDMyKSB8fCAoZXNjYXBlID09IDEyNykpIHsKKwlwcmlu dGYoIiBFc2NhcGUgY2hhcmFjdGVyOiBDdHJsLSVjIChBU0NJSSAlZCwgJXMpOiAlc1xyXG4iLAor CSAgICAgICBjdGwoZXNjYXBlKSwKKwkgICAgICAgZXNjYXBlLAorCSAgICAgICAoZXNjYXBlID09 IDEyNyA/ICJERUwiIDogY2NudGFiW2VzY2FwZV0pLAorCSAgICAgICB0dF9lc2NhcGUgPyAiZW5h YmxlZCIgOiAiZGlzYWJsZWQiCisJICAgICAgICk7CisgICAgfSBlbHNlIHsKKwlwcmludGYoIiBF c2NhcGUgY2hhcmFjdGVyOiBDb2RlICVkIixlc2NhcGUpOworCWlmIChlc2NhcGUgPiAxNjAgJiYg ZXNjYXBlIDwgMjU2KQorCSAgcHJpbnRmKCIgKCVjKSIsZXNjYXBlKTsKKwlwcmludGYoIjogJXNc clxuIiwgdHRfZXNjYXBlID8gImVuYWJsZWQiIDogImRpc2FibGVkIik7CQorICAgIH0KKyAgICBy ZXR1cm4oMCk7Cit9CisKKyNpZm5kZWYgTk9YRkVSCisvKiAgUCBSIEUgUyBFIFQgIC0tICBSZXNl dCBnbG9iYWwgcHJvdG9jb2wgdmFyaWFibGVzICAqLworCitleHRlcm4gaW50IHJlY3Vyc2l2ZTsK KworI2lmZGVmIFBBVFRFUk5TCitpbnQgcGF0dGVybnMgPSBTRVRfQVVUTzsgICAgICAgICAgICAg ICAgLyogV2hldGhlciB0byB1c2UgZmlsZW5hbWUgcGF0dGVybnMgKi8KK2V4dGVybiBpbnQgZ19w YXR0ZXJuczsJCQkvKiBGb3Igc2F2aW5nIGFuZCByZXN0b3JpbmcgKi8KKyNlbHNlCitpbnQgcGF0 dGVybnMgPSBTRVRfT0ZGOworI2VuZGlmIC8qIFBBVFRFUk5TICovCisKKyNpZm5kZWYgTk9JQ1AK KyNpZmRlZiBDS19MQUJFTEVECitleHRlcm4gaW50IGdfbGZfb3B0cywgbGZfb3B0czsKKyNlbmRp ZiAvKiBDS19MQUJFTEVEICovCitleHRlcm4gaW50IGdfbWF0Y2hkb3QsIGdfdXNlcGlwZXMsIHVz ZXBpcGVzOworZXh0ZXJuIGludCBnX2JpbmFyeSwgZ19wcm90bywgZ19kaXNwbGEsIGdfc3BhdGgs IGdfcnBhdGgsIGdfZm5jbnY7CitleHRlcm4gaW50IGdfcmVjdXJzaXZlOworZXh0ZXJuIGludCBn X3hmZXJtb2RlLCB4ZmVybW9kZTsKK2V4dGVybiBpbnQgZ191cnBzaXosIGdfc3BzaXpmLCBnX3Nw c2l6OworZXh0ZXJuIGludCBnX3Nwc2l6ciwgZ19zcG1heCwgZ193c2xvdHIsIGdfcHJlZml4aW5n LCBnX2ZuY2FjdDsKK2V4dGVybiBpbnQgZ19mbnNwYXRoLCBnX2ZucnBhdGgsIGdfc2tpcGJ1cDsK K2V4dGVybiBpbnQgbm9saW5rczsKKyNpZmRlZiBDS1NZTUxJTksKK2V4dGVybiBpbnQgemdmc19s aW5rOworI2VuZGlmIC8qIENLU1lNTElOSyAqLworI2lmbmRlZiBOT1NQTAorZXh0ZXJuIGludCBn X3BmbGcsIHB3ZmxnLCBnX3BjcHQsIHB3Y3J5cHQ7CitleHRlcm4gY2hhciAqIGdfcHN3ZCwgcHdi dWZbXTsKKyNlbmRpZiAvKiBOT1NQTCAqLworI2VuZGlmIC8qIE5PSUNQICovCisKK2V4dGVybiBp bnQgc3BzaXpmLCBzcHNpenIsIHNwbWF4LCBwcmVmaXhpbmcsIGZuY2FjdCwgZm5zcGF0aCwgZm5y cGF0aDsKK2V4dGVybiBpbnQgbW92aW5nOyAgICAgICAgICAgICAgICAgICAgICAvKiBTRU5EIGNy aXRlcmlhICovCitleHRlcm4gY2hhciBzbmRhZnRlcltdLCBzbmRiZWZvcmVbXSwgKnNuZGV4Y2Vw dFtdLCAqcmN2ZXhjZXB0W107CitleHRlcm4gQ0tfT0ZGX1Qgc25kbGFyZ2VyLCBzbmRzbWFsbGVy LCBjYWxpYnJhdGU7CitleHRlcm4gaW50IHJtYWlsZiwgcnByaW50Ziwgc2tpcGJ1cDsKK2V4dGVy biBjaGFyIG9wdGJ1ZltdOworCisjaWZkZWYgUElQRVNFTkQKK2V4dGVybiBjaGFyICogZ19zZmls dGVyLCAqIGdfcmZpbHRlcjsKK2V4dGVybiBjaGFyICogc25kZmlsdGVyLCAqIHJjdmZpbHRlcjsK KyNlbmRpZiAvKiBQSVBFU0VORCAqLworZXh0ZXJuIGNoYXIgKiogc25kYXJyYXk7CisKK1ZPSUQK K2Z0cmVzZXQoKSB7CisjaWZuZGVmIE5PSUNQCisgICAgaW50IGk7CisgICAgZXh0ZXJuIGNoYXIg KiBmaWxlZmlsZTsKKyAgICBleHRlcm4gaW50IHJlbGlhYmxlLCB4cmVsaWFibGUsIGNfc2F2ZSwg c3Nfc2F2ZSwgc2xvc3RhcnQsIHVyY2xlYXI7CisgICAgZXh0ZXJuIGludCBvb3B0cywgb21vZGUs IG9uYW1lLCBvcGF0aCwga2FjdGl2ZSwgYXV0b3BhdGg7CisgICAgZXh0ZXJuIGNoYXIgKiBzbmRf bW92ZTsgICAgICAgICAgICAgLyogRGlyZWN0b3J5IHRvIG1vdmUgc2VudCBmaWxlcyB0byAqLwor ICAgIGV4dGVybiBjaGFyICogc25kX3JlbmFtZTsgICAgICAgICAgIC8qIFdoYXQgdG8gcmVuYW1l IHNlbnQgZmlsZXMgdG8gKi8KKyAgICBleHRlcm4gY2hhciAqIHJjdl9tb3ZlOworICAgIGV4dGVy biBjaGFyICogcmN2X3JlbmFtZTsKKyAgICBleHRlcm4gY2hhciAqIGdfc25kX21vdmU7CisgICAg ZXh0ZXJuIGNoYXIgKiBnX3NuZF9yZW5hbWU7CisgICAgZXh0ZXJuIGNoYXIgKiBnX3Jjdl9tb3Zl OworICAgIGV4dGVybiBjaGFyICogZ19yY3ZfcmVuYW1lOworCisjaWZkZWYgQ0tfVE1QRElSCisg ICAgZXh0ZXJuIGludCBmX3RtcGRpcjsKKyAgICBleHRlcm4gY2hhciBzYXZkaXJbXTsKKyNlbmRp ZiAvKiBDS19UTVBESVIgKi8KKworI2lmZGVmIENLX1NQRUVECisjaWZkZWYgQ09NTUVOVAorICAg IGV4dGVybiBpbnQgZl9jdGxwOworICAgIGV4dGVybiBzaG9ydCBzX2N0bHBbXSwgY3RscFtdOwor I2VuZGlmIC8qIENPTU1FTlQgKi8KKyNlbmRpZiAvKiBDS19TUEVFRCAqLworCisjaWZuZGVmIE5P Q1NFVFMKKyAgICBleHRlcm4gaW50IGZjc19zYXZlLCB0Y3Nfc2F2ZTsKKyAgICBleHRlcm4gaW50 IGdfeGZyeGxhLCB4ZnJ4bGE7CisjZW5kaWYgLyogTk9DU0VUUyAqLworCisvKiBSZXN0b3JlIC8g cmVzZXQgcGVyLWNvbW1hbmQgZmlsZS10cmFuc2ZlciBzd2l0Y2hlcyAqLworCisgICAgbWFrZXN0 cigmc25kX21vdmUsZ19zbmRfbW92ZSk7CisgICAgbWFrZXN0cigmcmN2X21vdmUsZ19yY3ZfbW92 ZSk7CisgICAgbWFrZXN0cigmc25kX3JlbmFtZSxnX3NuZF9yZW5hbWUpOworICAgIG1ha2VzdHIo JnJjdl9yZW5hbWUsZ19yY3ZfcmVuYW1lKTsKKworICAgIGthY3RpdmUgPSAwOyAgICAgICAgICAg ICAgICAgICAgICAgIC8qIEtlcm1pdCBwcm90b2NvbCBubyBsb25nZXIgYWN0aXZlICovCisgICAg b29wdHMgPSAtMTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogTy1QYWNrZXQgT3B0aW9ucyAq LworICAgIG9tb2RlID0gLTE7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE8tUGFja2V0IFRy YW5zZmVyIE1vZGUgKi8KKyAgICBvbmFtZSA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAgICAv KiBPLVBhY2tldCBGaWxlbmFtZSBPcHRpb25zICovCisgICAgb3BhdGggPSAtMTsgICAgICAgICAg ICAgICAgICAgICAgICAgLyogTy1QYWNrZXQgUGF0aG5hbWUgT3B0aW9ucyAqLworCisjaWZkZWYg Q0tfUkVTRU5ECisgICAgcnNfbGVuID0gMEw7CQkJLyogUkVHRVQgcG9zaXRpb24gKi8KKyNlbmRp ZiAvKiBDS19SRVNFTkQgKi8KKworI2lmZGVmIENPTU1FTlQKKyNpZmRlZiBDS19TUEVFRAorICAg IGlmIChmX2N0bHApIHsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKQorICAgICAg ICAgIGN0bHBbaV0gPSBzX2N0bHBbaV07CisgICAgICAgIGZfY3RscCA9IDA7CisgICAgfQorI2Vu ZGlmIC8qIENLX1NQRUVEICovCisjZW5kaWYgLyogQ09NTUVOVCAqLworCisjaWZkZWYgQ0tfVE1Q RElSCisgICAgaWYgKGZfdG1wZGlyKSB7CQkJLyogSWYgd2UgY2hhbmdlZCB0byBkb3dubG9hZCBk aXIgKi8KKwl6Y2hkaXIoKGNoYXIgKikgc2F2ZGlyKTsJLyogR28gYmFjayB3aGVyZSB3ZSBjYW1l IGZyb20gKi8KKwlmX3RtcGRpciA9IDA7CisgICAgfQorI2VuZGlmIC8qIENLX1RNUERJUiAqLwor CisgICAgY2FsaWJyYXRlID0gMEw7ICAgICAgICAgICAgICAgICAgICAgLyogQ2FsaWJyYXRpb24g cnVuICovCisgICAgaWYgKHhyZWxpYWJsZSA+IC0xKSB7CisJcmVsaWFibGUgPSB4cmVsaWFibGU7 CisJZGVidWcoRjEwMSwiZnRyZXNldCByZWxpYWJsZSIsIiIscmVsaWFibGUpOworICAgIH0KKyAg ICB1cmNsZWFyID0gMDsKKworICAgIGlmIChhdXRvcGF0aCkgeyAgICAgICAgICAgICAgICAgICAg IC8qIFNFVCBSRUNFSVZFIFBBVEhOQU1FUyBBVVRPICovCisgICAgICAgIGZucnBhdGggPSBQQVRI X0FVVE87CisgICAgICAgIGF1dG9wYXRoID0gMDsKKyAgICB9CisgICAgaWYgKGZpbGVmaWxlKSB7 ICAgICAgICAgICAgICAgICAgICAgLyogRmlsZSBsaXN0ICovCisgICAgICAgIHpjbG9zZShaTUZJ TEUpOworICAgICAgICBtYWtlc3RyKCZmaWxlZmlsZSxOVUxMKTsKKyAgICB9CisgICAgaWYgKGNf c2F2ZSA+IC0xKSB7ICAgICAgICAgICAgICAgICAgLyogQmxvY2sgQ2hlY2sgVHlwZSAqLworICAg ICAgICBiY3RyID0gY19zYXZlOworICAgICAgICBjX3NhdmUgPSAtMTsKKyAgICB9CisgICAgaWYg KHNzX3NhdmUgPiAtMSkgeyAgICAgICAgICAgICAgICAgLyogU2xvdyBTdGFydCAqLworICAgICAg ICBzbG9zdGFydCA9IHNzX3NhdmU7CisgICAgICAgIHNzX3NhdmUgPSAtMTsKKyAgICB9CisjaWZk ZWYgQ0tfTEFCRUxFRAorICAgIGlmIChnX2xmX29wdHMgPiAtMSkgeworICAgICAgICBsZl9vcHRz ID0gZ19sZl9vcHRzOyAgICAgICAgICAgIC8qIFJlc3RvcmUgbGFiZWxlZCB0cmFuc2ZlciBvcHRp b25zICovCisgICAgICAgIGdfbGZfb3B0cyA9IC0xOworICAgIH0KKyNlbmRpZiAvKiBDS19MQUJF TEVEICovCisKKyNpZm5kZWYgTk9DU0VUUworICAgIGlmICh0Y3Nfc2F2ZSA+IC0xKSB7ICAgICAg ICAgICAgICAgIC8qIENoYXJhY3RlciBzZXRzICovCisgICAgICAgIHRjaGFyc2V0ID0gdGNzX3Nh dmU7CisgICAgICAgIHRjc19zYXZlID0gLTE7CisgICAgfQorICAgIGlmIChmY3Nfc2F2ZSA+IC0x KSB7CisgICAgICAgIGZjaGFyc2V0ID0gZmNzX3NhdmU7CisgICAgICAgIGZjc19zYXZlID0gLTE7 CisgICAgfQorICAgIGlmIChnX3hmcnhsYSA+IC0xKSB7CisJeGZyeGxhID0gZ194ZnJ4bGE7CisJ Z194ZnJ4bGEgPSAtMTsKKyAgICB9CisgICAgc2V0eGxhdHlwZSh0Y2hhcnNldCxmY2hhcnNldCk7 ICAgICAgLyogVHJhbnNsYXRpb24gdHlwZSAqLworI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKworI2lm ZGVmIE5FVENPTk4KKyNpZm5kZWYgTk9TUEwKKyAgICBpZiAoZ19wc3dkKSB7CisgICAgICAgIGNr c3RybmNweShwd2J1ZixnX3Bzd2QsUFdCVUZMKTsKKyAgICAgICAgbWFrZXN0cigmZ19wc3dkLE5V TEwpOworICAgIH0KKyAgICBpZiAoZ19wZmxnID4gLTEpIHsKKyAgICAgICAgcHdmbGcgPSBnX3Bm bGc7CisgICAgICAgIGdfcGZsZyA9IC0xOworICAgIH0KKyAgICBpZiAoZ19wY3B0ID4gLTEpIHsK KyAgICAgICAgcHdjcnlwdCA9IGdfcGNwdDsKKyAgICAgICAgZ19wY3B0ID0gLTE7CisgICAgfQor I2VuZGlmIC8qIE5PU1BMICovCisjZW5kaWYgLyogTkVUQ09OTiAqLworCisgICAgaWYgKGdfYmlu YXJ5ID4gLTEpIHsgICAgICAgICAgICAgICAgLyogRmlsZSB0eXBlICovCisgICAgICAgIGJpbmFy eSA9IGdfYmluYXJ5OworICAgICAgICBnX2JpbmFyeSA9IC0xOworICAgIH0KKyAgICBpZiAoZ194 ZmVybW9kZSA+IC0xKSB7ICAgICAgICAgICAgICAvKiBUcmFuc2ZlciBtb2RlICovCisgICAgICAg IHhmZXJtb2RlID0gZ194ZmVybW9kZTsKKyAgICAgICAgZ194ZmVybW9kZSA9IC0xOworICAgIH0K KyNpZmRlZiBQQVRURVJOUworICAgIGlmIChnX3BhdHRlcm5zID4gLTEpIHsgICAgICAgICAgICAg IC8qIEZpbGVuYW1lIHBhdHRlcm5zICovCisgICAgICAgIHBhdHRlcm5zID0gZ19wYXR0ZXJuczsK KyAgICAgICAgZ19wYXR0ZXJucyA9IC0xOworICAgIH0KKyNlbmRpZiAvKiBQQVRURVJOUyAqLwor CisgICAgaWYgKGdfdXNlcGlwZXMgPiAtMSkgeworICAgICAgICB1c2VwaXBlcyA9IGdfdXNlcGlw ZXM7CisgICAgICAgIGdfdXNlcGlwZXMgPSAtMTsKKyAgICB9CisgICAgaWYgKGdfbWF0Y2hkb3Qg PiAtMSkgeworICAgICAgICBtYXRjaGRvdCA9IGdfbWF0Y2hkb3Q7CisgICAgICAgIGdfbWF0Y2hk b3QgPSAtMTsKKyAgICB9CisgICAgaWYgKGdfcHJvdG8gPiAtMSkgeyAgICAgICAgICAgICAgICAg LyogUHJvdG9jb2wgKi8KKyAgICAgICAgcHJvdG9jb2wgPSBnX3Byb3RvOworICAgICAgICBnX3By b3RvID0gLTE7CisgICAgfQorICAgIGlmIChnX3VycHNpeiA+IC0xKSB7CisgICAgICAgIHVycHNp eiA9IGdfdXJwc2l6OworICAgICAgICBkZWJ1ZyhGMTAxLCJmdHJlc2V0IHJlc3RvcmluZyB1cnBz aXoiLCIiLHVycHNpeik7CisgICAgICAgIGdfdXJwc2l6ID0gLTE7CisgICAgfQorICAgIGlmIChn X3Nwc2l6ZiA+IC0xKSB7CisgICAgICAgIHNwc2l6ZiA9IGdfc3BzaXpmOworICAgICAgICBkZWJ1 ZyhGMTAxLCJmdHJlc2V0IHJlc3RvcmluZyBzcHNpemYiLCIiLHNwc2l6Zik7CisgICAgICAgIGdf c3BzaXpmID0gLTE7CisgICAgfQorICAgIGlmIChnX3Nwc2l6ID4gLTEpIHsKKyAgICAgICAgc3Bz aXogPSBnX3Nwc2l6OworICAgICAgICBkZWJ1ZyhGMTAxLCJmdHJlc2V0IHJlc3RvcmluZyBzcHNp eiIsIiIsc3BzaXopOworICAgICAgICBnX3Nwc2l6ID0gLTE7CisgICAgfQorICAgIGlmIChnX3Nw c2l6ciA+IC0xKSB7CisgICAgICAgIHNwc2l6ciA9IGdfc3BzaXpyOworICAgICAgICBkZWJ1ZyhG MTAxLCJmdHJlc2V0IHJlc3RvcmluZyBzcHNpenIiLCIiLHNwc2l6cik7CisgICAgICAgIGdfc3Bz aXpyID0gLTE7CisgICAgfQorICAgIGlmIChnX3NwbWF4ID4gLTEpIHsKKyAgICAgICAgc3BtYXgg PSBnX3NwbWF4OworICAgICAgICBnX3NwbWF4ID0gLTE7CisgICAgfQorICAgIGlmIChnX3dzbG90 ciA+IC0xKSB7CisgICAgICAgIHdzbG90ciA9IGdfd3Nsb3RyOworICAgICAgICBnX3dzbG90ciA9 IC0xOworICAgIH0KKyAgICBpZiAoZ19wcmVmaXhpbmcgPiAtMSkgeworICAgICAgICBwcmVmaXhp bmcgPSBnX3ByZWZpeGluZzsKKyAgICAgICAgZ19wcmVmaXhpbmcgPSAtMTsKKyAgICB9CisgICAg aWYgKGdfZm5jYWN0ID4gLTEpIHsKKyAgICAgICAgZm5jYWN0ID0gZ19mbmNhY3Q7CisgICAgICAg IGdfZm5jYWN0ID0gLTE7CisgICAgfQorICAgIGlmIChnX2ZuY252ID4gLTEpIHsKKyAgICAgICAg Zm5jbnYgPSBnX2ZuY252OworICAgICAgICBnX2ZuY252ID0gLTE7CisgICAgfQorICAgIGlmIChn X2Zuc3BhdGggPiAtMSkgeworICAgICAgICBmbnNwYXRoID0gZ19mbnNwYXRoOworICAgICAgICBn X2Zuc3BhdGggPSAtMTsKKyAgICB9CisgICAgaWYgKGdfZm5ycGF0aCA+IC0xKSB7CisgICAgICAg IGZucnBhdGggPSBnX2ZucnBhdGg7CisgICAgICAgIGdfZm5ycGF0aCA9IC0xOworICAgIH0KKyAg ICBpZiAoZ19za2lwYnVwID4gLTEpIHsKKyAgICAgICAgc2tpcGJ1cCA9IGdfc2tpcGJ1cDsKKyAg ICAgICAgZ19za2lwYnVwID0gLTE7CisgICAgfQorICAgIG5vbGlua3MgPSAyOwkJCS8qIC9GT0xM T1dMSU5LUyBpcyBuZXZlciBnbG9iYWwgKi8KKyAgICByZWN1cnNpdmUgPSAwOyAgICAgICAgICAg ICAgICAgICAgICAvKiAvUkVDVVJTSVZFIGNhbiBuZXZlciBiZSBnbG9iYWwgKi8KKyAgICB4Zmls ZXR5cGUgPSAtMTsKKworICAgIGlmIChnX2Rpc3BsYSA+IC0xKSB7ICAgICAgICAgICAgICAgIC8q IEZpbGUgdHJhbnNmZXIgZGlzcGxheSAqLworICAgICAgICBmZGlzcGxhID0gZ19kaXNwbGE7Cisg ICAgICAgIGdfZGlzcGxhID0gLTE7CisgICAgfQorICAgIGlmIChnX3NwYXRoID4gLTEpIHsgICAg ICAgICAgICAgICAgIC8qIFNlbmQgcGF0aG5hbWVzICovCisgICAgICAgIGZuc3BhdGggPSBnX3Nw YXRoOworICAgICAgICBnX3NwYXRoID0gLTE7CisgICAgfQorICAgIGlmIChnX3JwYXRoID4gLTEp IHsgICAgICAgICAgICAgICAgIC8qIFJlY2VpdmUgcGF0aG5hbWVzICovCisgICAgICAgIGZucnBh dGggPSBnX3JwYXRoOworICAgICAgICBnX3JwYXRoID0gLTE7CisgICAgfQorICAgIGlmIChnX2Zu Y252ID4gLTEpIHsgICAgICAgICAgICAgICAgIC8qIEZpbGVuYW1lIGNvbnZlcnNpb24gKi8KKyAg ICAgICAgZm5jbnYgPSBnX2ZuY252OworICAgICAgICBnX2ZuY252ID0gLTE7CisgICAgfQorI2lm ZGVmIFBJUEVTRU5ECisgICAgbWFrZXN0cigmc25kZmlsdGVyLGdfc2ZpbHRlcik7ICAgICAgLyog U2VuZCBmaWx0ZXIgKi8KKyAgICBtYWtlc3RyKCZyY3ZmaWx0ZXIsZ19yZmlsdGVyKTsgICAgICAv KiBSZWNlaXZlIGZpbHRlciAqLworI2VuZGlmIC8qIFBJUEVTRU5EICovCisKKyNpZm5kZWYgTk9G UklMTFMKKyAgICBybWFpbGYgPSBycHJpbnRmID0gMDsgICAgICAgICAgICAgICAvKiBNQUlMIGFu ZCBQUklOVCBtb2RpZmllcnMgZm9yIFNFTkQgKi8KKyAgICBvcHRidWZbMF0gPSBOVUw7ICAgICAg ICAgICAgICAgICAgICAvKiBNQUlMIGFuZCBQUklOVCBvcHRpb25zICovCisjZW5kaWYgLyogTk9G UklMTFMgKi8KKworICAgIG1vdmluZyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJl c2V0IGRlbGV0ZS1hZnRlci1zZW5kIGluZGljYXRvciAqLworICAgIHNuZGFmdGVyWzBdICA9IE5V TDsgICAgICAgICAgICAgICAgIC8qIFJlc2V0IFNFTkQgc2VsZWN0aW9uIHN3aXRjaGVzICovCisg ICAgc25kYmVmb3JlWzBdID0gTlVMOworCisgICAgZm9yIChpID0gMDsgaSA8IE5TTkRFWENFUFQ7 IGkrKykgeworICAgICAgICBpZiAoc25kZXhjZXB0W2ldKQorICAgICAgICAgIGZyZWUoc25kZXhj ZXB0W2ldKTsKKyAgICAgICAgc25kZXhjZXB0W2ldID0gTlVMTDsKKyAgICAgICAgaWYgKHJjdmV4 Y2VwdFtpXSkKKyAgICAgICAgICBmcmVlKHJjdmV4Y2VwdFtpXSk7CisgICAgICAgIHJjdmV4Y2Vw dFtpXSA9IE5VTEw7CisgICAgfQorICAgIHNuZGxhcmdlciA9ICAoQ0tfT0ZGX1QpLTE7CisgICAg c25kc21hbGxlciA9IChDS19PRkZfVCktMTsKKyAgICBkZWJ1ZyhGMTAxLCJwcmVzZW50IHNuZHNt YWxsZXIiLCIiLHNuZHNtYWxsZXIpOworI2lmZGVmIEdGVElNRVIKKyAgICBndHYgPSAtMS4wOwor ICAgIG9sZGd0diA9IC0xLjA7CisjZWxzZQorICAgIGd0diA9IC0xTDsKKyAgICBvbGRndHYgPSAt MUw7CisjZW5kaWYgLyogR0ZUSU1FUiAqLworI2VuZGlmIC8qIE5PSUNQICovCit9CisjZW5kaWYg LyogTk9YRkVSICovCisKK2NoYXIgKgordHRndHBuKCkgewkJCQkvKiBHZXQgdHlwaWNhbCBwb3J0 IG5hbWUgKi8KKy8qCisgIElkZWFsbHkgdGhpcyByb3V0aW5lIHdvdWxkIGJlIGltcGxlbWVudGVk IGluIGVhY2ggb2YgdGhlIGNrdT9pby4qIG1vZHVsZXMsCisgIGJ1dCB0aGF0IHJlcXVpcmVzIGNo YW5naW5nIHRoZSBBUEkgZGVmaW5pdGlvbi4KKyovCisgICAgcmV0dXJuKAorI2lmZGVmIE9TMgor I2lmZGVmIE9TMk9OTFkKKyJDT00xIgorI2Vsc2UgIC8qIE9TMk9OTFkgKi8KKyJUQVBJIFsgbmFt ZSBdIG9yIENPTTEiCisjZW5kaWYgLyogT1MyT05MWSAqLworI2Vsc2UgIC8qIE9TMiAqLworI2lm ZGVmIFZNUworIlRYQTA6LCBUVEEwOiwgb3IgTFRBMDoiCisjZWxzZSAgLyogVk1TICovCisjaWZk ZWYgU09MQVJJUworIi9kZXYvY3VhL2EiCisjZWxzZSAgLyogU09MQVJJUyAqLworI2lmZGVmIEhQ VVgxMAorIi9kZXYvY3VhMHAwIgorI2Vsc2UgIC8qIEhQVVgxMCAqLworI2lmZGVmIEhQVVgKKyIv ZGV2L2N1YTAwIgorI2Vsc2UgIC8qIEhQVVggKi8KKyNpZmRlZiBfX0ZyZWVCU0RfXworIi9kZXYv Y3VhYTAiCisjZWxzZSAgLyogX19GcmVlQlNEX18gKi8KKyNpZmRlZiBfX2xpbnV4X18KKyIvZGV2 L3R0eVMwIgorI2Vsc2UgIC8qIF9fbGludXhfXyAqLworI2lmZGVmIEJTRDQ0CisiL2Rldi90dHkw MCIKKyNlbHNlICAvKiBCU0Q0NCAqLworI2lmZGVmIE9TSworIi90MSIKKyNlbHNlICAvKiBPU0sg Ki8KKyNpZmRlZiBRTlgKKyIvZGV2L3NlcjEiCisjZWxzZSAgLyogUU5YICovCisjaWZkZWYgUU5Y NgorIi9kZXYvc2VyMSIKKyNlbHNlICAvKiBRTlg2ICovCisjaWZkZWYgVU5JWFdBUkUKKyIvZGV2 L3Rlcm0vMDAgb3IgL2Rldi90dHkwMCIKKyNlbHNlICAvKiBVTklYV0FSRSAqLworI2lmZGVmIENL X1NDT1Y1CisiL2Rldi90dHkxQSIKKyNlbHNlICAvKiBDS19TQ09WNSAqLworI2lmZGVmIENLX1ND TzMyVjQKKyIvZGV2L3R0eTFBIgorI2Vsc2UgIC8qIENLX1NDTzMyVjQgKi8KKyNpZmRlZiBNX1hF TklYCisiL2Rldi90dHkxQSIKKyNlbHNlICAvKiBNX1hFTklYICovCisjaWZkZWYgQUlYUlMKKyIv ZGV2L3R0eTAiCisjZWxzZSAgLyogQUlYUlMgKi8KKyNpZmRlZiBER1VYCisiL2Rldi90dHkwMCIK KyNlbHNlICAvKiBER1VYICovCisjaWZkZWYgZGF0YWdlbmVyYWwKKyJAY29uMSIKKyNlbHNlICAv KiBkYXRhZ2VuZXJhbCAqLworI2lmZGVmIElSSVgKKyIvZGV2L3R0eW0wIgorI2Vsc2UgIC8qIElS SVggKi8KKyNpZmRlZiBTVU5PUzQKKyIvZGV2L3R0eWgwIgorI2Vsc2UgIC8qIFNVTk9TNCAqLwor I2lmZGVmIFNWNjhSM1Y2CisiL2Rldi9zY2MwIgorI2Vsc2UgIC8qIFNWNjhSM1Y2ICovCisjaWZk ZWYgTU9UU1Y4OFI0CisiL2Rldi9jb250dHkwMCIKKyNlbHNlICAvKiBNT1RTVjg4UjQgKi8KKyNp ZmRlZiBORVhUCisiL2Rldi9jdWZhIgorI2Vsc2UKKyNpZmRlZiBPU0YKKyIvZGV2L3R0eWQxIgor I2Vsc2UKKyNpZmRlZiBTSU5JWAorIi9kZXYvdHR5YzEiCisjZWxzZQorI2lmZGVmIFVOSVgKKyIv ZGV2L2N1YSwgL2Rldi9hY3UsIC9kZXYvdHR5MCwgZXRjIgorI2Vsc2UgIC8qIFVOSVggKi8KKyIo c29ycnkgbm8gZXhhbXBsZSBhdmFpbGFibGUpIgorI2VuZGlmIC8qIFVOSVggKi8KKyNlbmRpZiAv KiBTSU5JWCAqLworI2VuZGlmIC8qIE9TRiAqLworI2VuZGlmIC8qIE5FWFQgKi8KKyNlbmRpZiAv KiBNT1RTVjg4UjQgKi8KKyNlbmRpZiAvKiBTVjY4UjNWNiAqLworI2VuZGlmIC8qIFNVTk9TNCAq LworI2VuZGlmIC8qIElSSVggKi8KKyNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLworI2VuZGlmIC8q IERHVVggKi8KKyNlbmRpZiAvKiBBSVggKi8KKyNlbmRpZiAvKiBNX1hFTklYICovCisjZW5kaWYg LyogQ0tfU0NPMzJWNCAqLworI2VuZGlmIC8qIENLX1NDT1Y1ICovCisjZW5kaWYgLyogVU5JWFdB UkUgKi8KKyNlbmRpZiAvKiBRTlg2ICovCisjZW5kaWYgLyogUU5YICovCisjZW5kaWYgLyogT1NL ICovCisjZW5kaWYgLyogQlNENDQgKi8KKyNlbmRpZiAvKiBfX2xpbnV4X18gKi8KKyNlbmRpZiAv KiBfX0ZyZWVCU0RfXyAqLworI2VuZGlmIC8qIEhQVVggKi8KKyNlbmRpZiAvKiBIUFVYMTAgKi8K KyNlbmRpZiAvKiBTT0xBUklTICovCisjZW5kaWYgLyogVk1TICovCisjZW5kaWYgLyogT1MyICov CisJICAgKTsKK30KKworLyogIEMgSyBfIEUgUiBSIFMgVCBSICAtLSAgUmV0dXJuIG1lc3NhZ2Ug ZnJvbSBtb3N0IHJlY2VudCBzeXN0ZW0gZXJyb3IgKi8KKworI2lmZGVmIENLUk9PVAorZXh0ZXJu IGludCBja3Jvb3RlcnI7CisjZW5kaWYgLyogQ0tST09UICovCisKK2NoYXIgKgorY2tfZXJyc3Ry KCkgeworI2lmZGVmIFVTRV9TVFJFUlJPUgorI2lmbmRlZiBDS19BTlNJTElCUworICAgIC8qIFNo b3VsZCBoYXZlIGJlZW4gZGVjbGFyZWQgaW4gPHN0cmluZy5oPiAqLworX1BST1RPVFlQKCBjaGFy ICogc3RyZXJyb3IsIChpbnQpICk7CisjZW5kaWYgLyogQ0tfQU5TSUxJQlMgKi8KKyNpZmRlZiBD S1JPT1QKKyAgICBpZiAoY2tyb290ZXJyKQorICAgICAgcmV0dXJuKCJPZmYgbGltaXRzIik7Cisj ZW5kaWYgLyogQ0tST09UICovCisgICAgcmV0dXJuKHN0cmVycm9yKGVycm5vKSk7CisjZWxzZSAg LyogIVVTRV9TVFJFUlJPUiAqLworI2lmZGVmIFZNUworICAgIGV4dGVybiBjaGFyICogY2t2bXNl cnJzdHIodW5zaWduZWQgbG9uZyk7CisjaWZkZWYgQ0tST09UCisgICAgaWYgKGNrcm9vdGVycikK KyAgICAgIHJldHVybigiT2ZmIGxpbWl0cyIpOworI2VuZGlmIC8qIENLUk9PVCAqLworICAgIHJl dHVybihja3Ztc2VycnN0cigwTCkpOworI2Vsc2UgIC8qICFWTVMgKi8KKyNpZmRlZiBCU0Q0NAor I2lmZGVmIF9fMzg2QlNEX18KKyNpZm5kZWYgTkRTWVNFUlJMSVNUCisgICAgZXh0ZXJuIGludCBz eXNfbmVycjsKKyAgICBleHRlcm4gY2hhciAqc3lzX2Vycmxpc3RbXTsKKyNlbmRpZiAvKiBORFNZ U0VSUkxJU1QgKi8KKyNlbHNlICAvKiAhX18zODZCU0RfXyAqLworI2lmbmRlZiBfX2JzZGlfXwor I2lmbmRlZiBORFNZU0VSUkxJU1QKKyAgICBleHRlcm4gaW50IHN5c19uZXJyOworICAgIGV4dGVy biBjb25zdCBjaGFyICpjb25zdCBzeXNfZXJybGlzdFtdOworI2VuZGlmIC8qIE5EU1lTRVJSTElT VCAqLworI2VuZGlmIC8qIF9fYnNkaV9fICovCisjZW5kaWYgLyogX18zODZCU0RfXyAqLworI2lm ZGVmIENLUk9PVAorICAgIGlmIChja3Jvb3RlcnIpCisgICAgICByZXR1cm4oIk9mZiBsaW1pdHMi KTsKKyAgICBlbHNlCisjZW5kaWYgLyogQ0tST09UICovCisgICAgaWYgKGVycm5vID49IHN5c19u ZXJyKQorICAgICAgcmV0dXJuKCJFcnJvciBudW1iZXIgb3V0IG9mIHJhbmdlIik7CisgICAgZWxz ZQorICAgICAgcmV0dXJuKChjaGFyICopIHN5c19lcnJsaXN0W2Vycm5vXSk7CisjZWxzZSAvKiAh QlNENDQgKi8KKyNpZmRlZiBBVFRTVgorI2lmbmRlZiBORFNZU0VSUkxJU1QKKyAgICBleHRlcm4g aW50IHN5c19uZXJyOworICAgIGV4dGVybiBjaGFyICpzeXNfZXJybGlzdFtdOworI2VuZGlmIC8q IE5EU1lTRVJSTElTVCAqLworI2lmZGVmIENLUk9PVAorICAgIGlmIChja3Jvb3RlcnIpCisgICAg ICByZXR1cm4oIk9mZiBsaW1pdHMiKTsKKyAgICBlbHNlCisjZW5kaWYgLyogQ0tST09UICovCisg ICAgaWYgKGVycm5vID49IHN5c19uZXJyKQorICAgICAgcmV0dXJuKCJFcnJvciBudW1iZXIgb3V0 IG9mIHJhbmdlIik7CisgICAgZWxzZQorICAgICAgcmV0dXJuKChjaGFyICopIHN5c19lcnJsaXN0 W2Vycm5vXSk7CisjZWxzZSAvKiAhQVRUU1YgKi8KKyNpZmRlZiBCU0Q0CisjaWZuZGVmIE5EU1lT RVJSTElTVAorICAgIGV4dGVybiBpbnQgc3lzX25lcnI7CisgICAgZXh0ZXJuIGNoYXIgKnN5c19l cnJsaXN0W107CisjZW5kaWYgLyogTkRTWVNFUlJMSVNUICovCisjaWZkZWYgQ0tST09UCisgICAg aWYgKGNrcm9vdGVycikKKyAgICAgIHJldHVybigiT2ZmIGxpbWl0cyIpOworICAgIGVsc2UKKyNl bmRpZiAvKiBDS1JPT1QgKi8KKyAgICBpZiAoZXJybm8gPj0gc3lzX25lcnIpCisgICAgICByZXR1 cm4oIkVycm9yIG51bWJlciBvdXQgb2YgcmFuZ2UiKTsKKyAgICBlbHNlCisgICAgICByZXR1cm4o KGNoYXIgKikgc3lzX2Vycmxpc3RbZXJybm9dKTsKKyNlbHNlCisjaWZkZWYgT1MyCisjaWZuZGVm IE5EU1lTRVJSTElTVAorICAgIGV4dGVybiBjaGFyICpzeXNfZXJybGlzdFtdOworI2VuZGlmIC8q IE5EU1lTRVJSTElTVCAqLworI2lmZGVmIE5UCisgICAgZXh0ZXJuIGludF9zeXNfbmVycjsKKyNl bmRpZiAvKiBOVCAqLworICAgIGNoYXIgKmU7CisjaWZkZWYgQ0tST09UCisgICAgaWYgKGNrcm9v dGVycikKKyAgICAgIHJldHVybigiT2ZmIGxpbWl0cyIpOworI2VuZGlmIC8qIENLUk9PVCAqLwor ICAgIGUgPSAoZXJybm8gPiAtMQorI2lmZGVmIE5UCisgICAgICAgICAmJiBlcnJubyA8PSBfc3lz X25lcnIKKyNlbmRpZiAvKiBOVCAqLworICAgICAgICAgKSA/CisjaWZkZWYgTlQKKyAgICAgICAg IChjaGFyICopIHN5c19lcnJsaXN0W2Vycm5vXQorI2Vsc2UgLyogTlQgKi8KKyAgICAgICAgIC8q IEkgZG9uJ3Qga25vdyBob3cgdG8gZ2V0IGEgQ0xJQiBlcnJvciBzdHJpbmcgaW4gT1MvMiAqLwor ICAgICAgICAgc3RyZXJyb3IoZXJybm8pCisjZW5kaWYgLyogTlQgKi8KKyAgICAgICAgICAgICA6 ICIiOworICAgIHJldHVybihlID8gZSA6ICIiKTsKKyNlbHNlIC8qIE9TMiAqLworICAgIHJldHVy bigiIik7CisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogQlNENCAqLworI2VuZGlmIC8qIEFU VFNWICovCisjZW5kaWYgLyogQlNENDQgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBV U0VfU1RSRVJST1IgKi8KK30KKworI2lmZGVmIFBBVFRFUk5TCisvKgorICBGaWxlbmFtZSBwYXR0 ZXJuIHJlY29nbml0aW9uIGxpc3RzIGZvciBhdXRvbWF0aWMgdGV4dC9iaW5hcnkgc3dpdGNoaW5n LgorICBUaGVzZSBhcmUgc29tZXdoYXQgcGFzc2UgYWZ0ZXIgdGhlIGFkZGl0aW9uIG9mIHNjYW5m aWxlKCkgICg3LjApLgorICBCdXQgd2l0aCB0aGUgYWRkaXRpb24gb2YgRlRQIFtNXUdFVCwgdGhl eSdyZSBiYWNrIGluIHN0eWxlICg4LjApLgorCisgIEFsdGhvdWdoLCB3aXRoIEZUUCB0aGUgbGlz dHMgbmVlZCB0byBiZSB1c2VkIGluIHRoZSByZXZlcnNlLiAgV2l0aAorICBLZXJtaXQgdGhlIGxp c3QgaXMgdXNlZCB0byBpbXBseSB0aGUgdHlwZXMgb2YgdGhlIGxvY2FsIHN5c3RlbS4gIFdoZXJl YXMKKyAgd2l0aCBGVFAsIHRoZSBsaXN0IG11c3QgYmUgdXNlZCB0byBpbXBseSB0aGUgdHlwZSBv ZiB0aGUgcmVtb3RlIHN5c3RlbS4KKyAgVGhlcmVmb3JlLCBhbGwgcGxhdGZvcm1zIG11c3Qgbm93 IHN1cHBvcnQgYWxsIG9mIHRoZSBsaXN0cy4KKyovCitjaGFyICp0eHRwYXR0ZXJuc1tGVFBBVFRF Uk5TKzFdID0geyBOVUxMLCBOVUxMIH07CitjaGFyICpiaW5wYXR0ZXJuc1tGVFBBVFRFUk5TKzFd ID0geyBOVUxMLCBOVUxMIH07CisvKgorICBEZWZhdWx0IHBhdHRlcm4gbGlzdHMgZm9yIGVhY2gg cGxhdGZvcm0uLi4KKworICBOT1RFOiBJbiBtb3N0IGNhc2VzIHdlIGxlYXZlICIuaGxwIiwgIi5p bmkiLCBhbmQgIi5zY3IiIGFsb25lOyBhbHRob3VnaCB0aGV5CisgIGFyZSB0cmFkaXRpb25hbGx5 IHRleHQgdHlwZXMsIHRoZXkgYXJlIGJpbmFyeSBpbiBXaW5kb3dzLiAgU28gdGhleSBhcmUKKyAg aGFuZGxlZCBieSB0aGUgcHJldmFpbGluZyBTRVQgRklMRSBUWVBFLCByYXRoZXIgdGhhbiBhdXRv bWF0aWNhbGx5LgorICBTaW1pbGFybHkgZm9yICIuZGF0IiwgIi5pbmYiLCBhbmQgc28gb24uICBB bHNvICIucHMiIHNpbmNlIFBvc3RTY3JpcHQgZmlsZXMKKyAgYXJlIG5vdCBhbHdheXMgdGV4dC4g ICIubG9nIiBpcyBvbWl0dGVkIHNpbmNlIGxvZ3MgY2FuIGJlIHRleHQgb3IgYmluYXJ5LAorICBl eGNlcHQgaW4gVk1TIHRoZXkgYXJlIHVzdWFsbHkgdGV4dCwgZXRjIGV0Yy4KKworICBMYXRlciAo U2VwIDIwMDMpOiBBZGQgUG9zdFNjcmlwdCB0byBiaW5hcnkgcGF0dGVybnMuCisqLworc3RhdGlj IGNoYXIgKnR4dHBbU1lTX01BWF1bRlRQQVRURVJOU10gPSB7CisgICAgLyogVU5LTk9XTiAqLyB7 CisJTlVMTCwgTlVMTAorICAgIH0sCisgICAgewkJCQkJLyogVU5JWCAqLworICAgICIqLnR4dCIs IiouYyIsIiouaCIsIiouciIsIioudyIsIiouY3BwIiwiKi5jYyIsIioua3NjIiwiKi5id3IiLCIq LnVwZCIsCisgICAgIiouaHRtbCIsIiouaHRtIiwiKi5tc3MiLCIqLnRleCIsIioubnIiLCJbTW1d YWtlZmlsZSIsICIqLmhleCIsICIqLmhxeCIsCisgICAgIiouZm9yIiwiKi5mNzciLCIqLmYiLCIq LkYiLCIqLnMiLCIqLnBhcyIsIiouamF2YSIsIiouZWwiLCIqLmxpc3AiLCIqLnNoIiwKKyAgICAi Ki5tNCIsIioucGVybCIsIioucGwiLCIqLnBvZCIsIioucG0iLCIqLmF3ayIsIiouc25vIiwiKi5z cHQiLCIqLnNlZCIsCisgICAgIioua3NjIiwiKi5UWFQiLCAiKnJlYWQubWUiLCAiKlJFQUQuTUUi LCAiLioiLCAiKi8uKiIsICIqLm1lbSIsIioubWFjIiwKKyAgICBOVUxMCisgICAgfSwKKyAgICB7 CQkJCQkvKiBXSU4zMiAqLworICAgICIqLnR4dCIsIioua3NjIiwiKi5odG0iLCIqLmh0bWwiLCIq LmJhdCIsIiouY21kIiwiKi5qYXYiLCIqLmFzbSIsICIqLmhleCIsCisgICAgIiouaHF4IiwgIiou YyIsICIqLmgiLCAiKi5jcHAiLCAiKi5ocHAiLCAiKi5jeHgiLCAiKi5jeHgiLCAiKi53IiwKKyAg ICAiKi5qYXZhIiwgIiouYndyIiwgIioudXBkIiwgIioubWFrIiwgInJlYWQubWUiLCAiKi5tYXAi LCAibWFrZWZpbGUiLAorICAgICIqLm1lbSIsIioubWFjIiwiKi5jYyIsIioucGwiLCIqLnBvZCIs IioucG0iLCIqLm00IixOVUxMCisgICAgfSwKKyAgICB7CQkJCQkvKiBWTVMgKi8KKyAgICAiKi5j b20iLCIqLnR4dCIsIiouYyIsICAiKi5mb3IiLCIqLnBhcyIsIioucm5vIiwiKi5ybmgiLCIqLm1h ciIsIiouYmxpIiwKKyAgICAiKi5obHAiLCIqLm1zcyIsIiouZG9jIiwiKi5id3IiLCIqLmNsZCIs IiouaGV4IiwiKi5iYXMiLCIqLmluaSIsIioubG9nIiwKKyAgICAiKi5tbXMiLCIqLm9wdCIsIiou a3NjIiwiKi5wZXJsIiwiKi5wbCIsIioucG9kIiwiKi5wbSIsIiouc25vIiwiKi5zcHQiLAorICAg ICIqLm1lbSIsTlVMTAorICAgIH0sCisgICAgewkJCQkJLyogT1MyICovCisgICAgIioudHh0Iiwi Ki5rc2MiLCIqLmh0bSIsIiouaHRtbCIsIiouYmF0IiwiKi5jbWQiLCIqLmphdiIsIiouYXNtIiwg IiouaGV4IiwKKyAgICAiKi5ocXgiLCAiKi5jIiwgIiouaCIsICIqLmNwcCIsICIqLmhwcCIsICIq LmN4eCIsICIqLmN4eCIsICIqLnciLAorICAgICIqLmphdmEiLCAiKi5id3IiLCAiKi51cGQiLCAi Ki5tYWsiLCAicmVhZC5tZSIsICIqLm1hcCIsICJtYWtlZmlsZSIsCisgICAgTlVMTAorICAgIH0s CisgICAgewkJCQkJLyogRE9TICovCisgICAgIioudHh0IiwiKi5rc2MiLCIqLmh0bSIsIiouYmF0 IiwiKi5jbWQiLCIqLmphdiIsIiouYXNtIiwgIiouaGV4IiwKKyAgICAiKi5ocXgiLCAiKi5jIiwg IiouaCIsICIqLmNwcCIsICIqLmhwcCIsICIqLmN4eCIsICIqLmN4eCIsICIqLnciLAorICAgICIq LmJ3ciIsICIqLnVwZCIsICIqLm1hayIsICJyZWFkLm1lIiwgIioubWFwIiwgIm1ha2VmaWxlIiwg TlVMTAorICAgIH0sCisgICAgewkJCQkJLyogVE9QUy0xMCAqLworICAgICIqLmNtZCIsIiouaGxw IiwiKi5kb2MiLCIqLmluaSIsIioudHh0IiwiKi5tYWMiLCIqLmZvciIsIiouc2FpIiwiKi5ibGki LAorICAgICIqLnBhcyIsIiouc25vIiwiKi5zcHQiLCIqLnBjbCIsIioubXNzIiwiKi5ybm8iLCIq LmIzNiIsIioudGV4IiwiKi5wdWIiLAorICAgICIqLnJlcSIsIioucjM2IiwiKi5tZW0iLCIqLmJ3 ciIsIiouY2NsIiwiKi5jdGwiLCIqLnJuaCIsIioua3NjIixOVUxMCisgICAgfSwKKyAgICB7CQkJ CQkvKiBUT1BTLTIwICovCisgICAgIiouY21kIiwiKi5obHAiLCIqLmRvYyIsIiouaW5pIiwiKi50 eHQiLCIqLm1hYyIsIiouZm9yIiwiKi5zYWkiLCIqLmJsaSIsCisgICAgIioucGFzIiwiKi5zbm8i LCIqLnNwdCIsIioucGNsIiwiKi5tc3MiLCIqLnJubyIsIiouYjM2IiwiKi50ZXgiLCIqLnB1YiIs CisgICAgIioucmVxIiwiKi5yMzYiLCIqLm1lbSIsIiouYndyIiwiKi5jY2wiLCIqLmN0bCIsIiou cm5oIiwiKi5rc2MiLE5VTEwKKyAgICB9LAorICAgIHsJCQkJCS8qIFNUUkFUVVMgVk9TICovCisg ICAgIioudHh0IiwiKi5rc2MiLCIqLmh0bSIsIiouaHRtbCIsIiouYmF0IiwgIiouY21kIiwiKi5q YXYiLCIqLmFzbSIsIiouaGV4IiwKKyAgICAiKi5ocXgiLCIqLmMiLCAgIiouaCIsICAiKi53Iiwg ICAiKi5qYXZhIiwiKi5id3IiLCIqLnVwZCIsIioudHRwIiwiKi5jbSIsCisgICAgIioucGwxIiwi Ki5lbWFjcyIsICJyZWFkLm1lIiwgIioucGwiLCAibWFrZWZpbGUiLCBOVUxMCisgICAgfSwKKyAg ICB7CQkJCQkvKiBERyBBT1MvVlMgKi8KKyAgICAiKi50eHQiLCAiKi5jIiwgIiouaCIsICIqLnci LCAiKi5lciIsICIqLmJ3ciIsICIqLnVwZCIsICJyZWFkLm1lIiwKKyAgICAiKi5jbGkiLCAiKi5r c2MiLCBOVUxMCisgICAgfSwKKyAgICB7CQkJCQkvKiBPU0sgKi8KKyAgICAiKi5jIiwiKi5jcHAi LCIqLmgiLCIqLmEiLCIqYWtlZmlsZSIsIC8qIHByb2dyYW0gc291cmNlcyAqLworICAgICIqLmZv ciIsIiouZjc3IiwiKi5mIiwiKi5GIiwiKi5zIiwiKi5wYXMiLCIqLmphdmEiLCIqLmVsIiwiKi5s aXNwIiwKKyAgICAiKi5zaCIsIioucGVybCIsIiouYXdrIiwiKi5zbm8iLCIqLnNwdCIsIiouc2Vk IiwKKyAgICAiKi50eHQiLCIqLnciLAkJCS8qIGdlbmVyYWwgdGV4dCAqLworICAgICIqLmtzYyIs IiouYndyIiwiKi51cGQiLAorICAgICIqLmh0bWwiLCIqLmh0bSIsIioubXNzIiwiKi50ZXgiLCIq Lm5yIiwiKi5oZXgiLCAiKi5ocXgiLAorICAgICIqLlRYVCIsICIqcmVhZC5tZSIsICIqUkVBRC5N RSIsICIuKiIsICIqLy4qIiwKKyAgICBOVUxMCisgICAgfQorfTsKKworLyogTm90ZTogLkRPQyBh ZGRlZCB0byAoc29tZSkgYmluYXJ5IHBhdHRlcm5zIEp1bmUgMTk5OC4uLiBNaWNyb3NvZnQgd2lu cy4gKi8KKworc3RhdGljIGNoYXIgKmJpbnBbU1lTX01BWF1bRlRQQVRURVJOU10gPSB7CisgICAg ewkJCQkJLyogVU5LTk9XTiAqLworICAgIE5VTEwsIE5VTEwKKyAgICB9LAorICAgIHsJCQkJCS8q IFVOSVggKi8KKyAgICAiKi5neiIsIiouWiIsIioudGd6IiwiKi5naWYiLCAiKi50YXIiLCIqLnpp cCIsIioubyIsIiouc28iLCIqLmEiLCIqLm91dCIsCisgICAgIiouZXhlIiwgIiouanBnIiwgIiou anBlZyIsICIqLnRpZiIsIioudGlmZiIsICIqLnBkZiIsICIqLnNvLioiLCAiKi5jbGFzcyIsCisg ICAgIioucnBtIiwgIiouYm1wIiwgIiouYnoyIiwgIiouQk1QIiwgIiouZGxsIiwgIiouZG9jIiwg IioudnhkIiwgIiouZGN4IiwKKyAgICAiKi54bCoiLCAiKi5semgiLCAiKi5saHoiLCAiKi5hdSIs ICIqLnZvYyIsICIqLm1wZyIsICIqLm1wZWciLCJbd2tdZXJtaXQiLAorICAgICIqLnBzIiwgTlVM TAorICAgIH0sCisgICAgewkJCQkJLyogV0lOMzIgKi8KKyAgICAiKi5leGUiLCAiKi56aXAiLCAi Ki5vYmoiLCAiKi5jb20iLCAiKi5naWYiLCAiKi5qcGciLCAiKi53YXYiLCAiKi5yYW0iLAorICAg ICIqLmNsYXNzIiwiKi5jbGEiLCIqLmRsbCIsICIqLmRydiIsICIqLm9jeCIsICIqLnZieCIsICIq LmxpYiIsICIqLmljbyIsCisgICAgIiouYm1wIiwgIioudGlmIiwgIioudGFyIiwgIiouZ3oiLCAg IioudGd6IiwgIioueGwqIiwgIiouZG9jIiwgIioudnhkIiwKKyAgICAiKi5wZGYiLCAiKi5semgi LCAiKi52eGQiLCAiKi5zbmQiLCAiKi5hdSIsICIqIC52b2MiLCAiKi5tcGciLCAiKi5tcGVnIiwK KyAgICAiKi5wcyIsIE5VTEwKKyAgICB9LAorICAgIHsJCQkJCS8qIFZNUyAqLworICAgICIqLmV4 ZSIsIioub2JqIiwiKi5iYWsiLCIqLmJpbiIsIiouYWRmIiwiKi5zdGIiLCIqLm1haSIsIiouc3lz IiwiKi5kbXAiLAorICAgICIqLnBzIiwgIiouZGF0IiwiKi5wYXIiLCBOVUxMCisgICAgfSwKKyAg ICB7CQkJCQkvKiBPUzIgKi8KKyAgICAiKi5leGUiLCAiKi56aXAiLCAiKi5vYmoiLCAiKi5jb20i LCAiKi5naWYiLCAiKi5qcGciLCAiKi53YXYiLCAiKi5yYW0iLAorICAgICIqLmNsYXNzIiwgIiou Y2xhIiwgIiouZGxsIiwgIiouZHJ2IiwgIioub2N4IiwgIioudmJ4IiwgIioubGliIiwgIiouaWNv IiwKKyAgICAiKi5ibXAiLCAiKi50aWYiLCAiKi50YXIiLCAiKi5neiIsICIqLnRneiIsICIqLnhs KiIsICIqLmRvYyIsICIqLnZ4ZCIsCisgICAgIioucGRmIiwgIioucHMiLCAiKi5semgiLCBOVUxM CisgICAgfSwKKyAgICB7CQkJCQkvKiBET1MgKi8KKyAgICAiKi5leGUiLCAiKi56aXAiLCAiKi5v YmoiLCAiKi5jb20iLCAiKi5naWYiLCAiKi5qcGciLCAiKi53YXYiLCAiKi5yYW0iLAorICAgICIq LmNsYSIsICIqLmRsbCIsICIqLmRydiIsICIqLm9jeCIsICIqLnZieCIsICIqLmxpYiIsICIqLmlj byIsCisgICAgIiouYm1wIiwgIioudGlmIiwgIioudGFyIiwgIiouZ3oiLCAiKi50Z3oiLCAiKi54 bCoiLCAiKi5kb2MiLCAiKi52eGQiLAorICAgICIqLnBkZiIsICIqLnBzIiwgIioubHpoIiwgTlVM TAorICAgIH0sCisgICAgewkJCQkJLyogVE9QUzEwICovCisgICAgIiouZXhlIiwiKi5zYXYiLCIq LmJpbiIsIioucmltIiwiKi5yZWwiLCIqLnVudiIsIioubGliIiwiKi50YXAiLCIqLmR2aSIsCisg ICAgIioucHMiLCBOVUxMCisgICAgfSwKKyAgICB7CQkJCQkvKiBUT1BTMjAgKi8KKyAgICAiKi5l eGUiLCIqLnNhdiIsIiouYmluIiwiKi5yaW0iLCIqLnJlbCIsIioudW52IiwiKi5saWIiLCIqLnRh cCIsIiouZHZpIiwKKyAgICAiKi5wcyIsIE5VTEwKKyAgICB9LAorICAgIHsJCQkJCS8qIFNUUkFU VVMgVk9TICovCisgICAgIiouZXhlIiwgIiouemlwIiwgIioub2JqIiwgIiouY29tIiwgIiouZ2lm IiwgIiouanBnIiwgIioud2F2IiwgIioucmFtIiwKKyAgICAiKi5jbGFzcyIsICIqLmNsYSIsICIq LmRsbCIsICIqLmRydiIsICIqLm9jeCIsICIqLnZieCIsICIqLmxpYiIsICIqLmljbyIsCisgICAg IiouYm1wIiwgIioudGlmIiwgIioudGFyIiwgIiouZ3oiLCAiKi50Z3oiLCAiKi54bCoiLCAiKi5k b2MiLCAiKi52eGQiLAorICAgICIqLnBkZiIsICIqLnBzIiwgIioubHpoIiwgIioucG0iLCBOVUxM CisgICAgfSwKKyAgICB7CQkJCQkvKiBERyAqLworICAgICIqLm9iIiwgIioucHIiLCAiKi5kbXAi LCAiKi5wcyIsIE5VTEwKKyAgICB9LAorICAgIHsgLyogT1NLICovCisgICAgIiouZ3oiLCIqLloi LCIqLnoiLCIqLnRneiIsIioubGh6IiwiKi50YXIiLAkvKiBhcmNoaXZlcnMgKi8KKyAgICAiKi56 aXAiLCIqLmFyIiwiKi56b28iLCIqLnJwbSIsIioubHpoIiwKKyAgICAvKiBvYmplY3QgZmlsZXMs IGxpYnJhcmllcywgZXhlY3V0YWJsZXMgKi8KKyAgICAiKi5yIiwiKi5sIiwiKi5leGUiLCAiKi5k bGwiLCAiKi5zby4qIiwgIiouY2xhc3MiLAorICAgIC8qIGltYWdlcyAqLworICAgICIqLmdpZiIs ICIqLmpwZyIsICIqLmpwZWciLCAiKi50aWYiLCIqLnRpZmYiLCAiKi5wZGYiLCAiKi5wcyIsCisg ICAgIiouYm1wIiwgIiouYnoyIiwgIiouQk1QIiwiKi5wY3giLAorICAgIE5VTEwKKyAgICB9Cit9 OworCisvKgorICBTZXQgdXAgZGVmYXVsdCBwYXR0ZXJuIGxpc3RzIHNvIHRoZXkgY2FuIGJlIGZy ZWVkIGFuZCByZS1tYWxsb2MnZC4KKyAgRWFjaCBwYXR0ZXJuIGxpc3QgbXVzdCB0ZXJtaW5hdGVk IGJ5IGEgbnVsbCBlbGVtZW50LgorKi8KK1ZPSUQKK2luaXRwYXQoKSB7CisgICAgaW50IGk7Cisg ICAgZm9yIChpID0gMDsgaSA8IEZUUEFUVEVSTlM7IGkrKykgeworICAgICAgICB0eHRwYXR0ZXJu c1tpXSA9IE5VTEw7CisgICAgICAgIGJpbnBhdHRlcm5zW2ldID0gTlVMTDsKKyAgICB9CisgICAg Zm9yIChpID0gMDsgaSA8IEZUUEFUVEVSTlM7IGkrKykgeworI2lmZGVmIFVOSVgKKyAgICAgICAg bWFrZXN0cigmKHR4dHBhdHRlcm5zW2ldKSx0eHRwW1NZU19VTklYXVtpXSk7CisjZWxzZSAvKiBV TklYICovCisjaWZkZWYgT1MyCisjaWZkZWYgTlQKKyAgICAgICAgbWFrZXN0cigmKHR4dHBhdHRl cm5zW2ldKSx0eHRwW1NZU19XSU4zMl1baV0pOworI2Vsc2UgLyogTlQgKi8KKyAgICAgICAgbWFr ZXN0cigmKHR4dHBhdHRlcm5zW2ldKSx0eHRwW1NZU19PUzJdW2ldKTsKKyNlbmRpZiAvKiBOVCAq LworI2Vsc2UgLyogT1MyICovCisjaWZkZWYgVk1TCisgICAgICAgIG1ha2VzdHIoJih0eHRwYXR0 ZXJuc1tpXSksdHh0cFtTWVNfVk1TXVtpXSk7CisjZWxzZSAvKiBWTVMgKi8KKyNpZmRlZiBTVFJB VFVTCisgICAgICAgIG1ha2VzdHIoJih0eHRwYXR0ZXJuc1tpXSksdHh0cFtTWVNfVk9TXVtpXSk7 CisjZWxzZSAvKiBTVFJBVFVTICovCisjaWZkZWYgZGF0YWdlbmVyYWwKKyAgICAgICAgbWFrZXN0 cigmKHR4dHBhdHRlcm5zW2ldKSx0eHRwW1NZU19ER11baV0pOworI2Vsc2UgLyogZGF0YWdlbmVy YWwgKi8KKyNpZmRlZiBPU0sKKyAgICAgICAgbWFrZXN0cigmKHR4dHBhdHRlcm5zW2ldKSx0eHRw W1NZU19PU0tdW2ldKTsKKyNlbHNlIC8qIE9TSyAqLworICAgICAgICBtYWtlc3RyKCYodHh0cGF0 dGVybnNbaV0pLHR4dHBbU1lTX1VOS11baV0pOworI2VuZGlmIC8qIE9TSyAqLworI2VuZGlmIC8q IGRhdGFnZW5lcmFsICovCisjZW5kaWYgLyogU1RSQVRVUyAqLworI2VuZGlmIC8qIFZNUyAqLwor I2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIFVOSVggKi8KKyAgICAgICAgaWYgKCF0eHRwW2ld KQorICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBmb3IgKGkgPSAwOyBpIDwgRlRQQVRURVJO UzsgaSsrKSB7CisjaWZkZWYgVU5JWAorICAgICAgICBtYWtlc3RyKCYoYmlucGF0dGVybnNbaV0p LGJpbnBbU1lTX1VOSVhdW2ldKTsKKyNlbHNlIC8qIFVOSVggKi8KKyNpZmRlZiBPUzIKKyNpZmRl ZiBOVAorICAgICAgICBtYWtlc3RyKCYoYmlucGF0dGVybnNbaV0pLGJpbnBbU1lTX1dJTjMyXVtp XSk7CisjZWxzZSAvKiBOVCAqLworICAgICAgICBtYWtlc3RyKCYoYmlucGF0dGVybnNbaV0pLGJp bnBbU1lTX09TMl1baV0pOworI2VuZGlmIC8qIE5UICovCisjZWxzZSAvKiBPUzIgKi8KKyNpZmRl ZiBWTVMKKyAgICAgICAgbWFrZXN0cigmKGJpbnBhdHRlcm5zW2ldKSxiaW5wW1NZU19WTVNdW2ld KTsKKyNlbHNlIC8qIFZNUyAqLworI2lmZGVmIFNUUkFUVVMKKyAgICAgICAgbWFrZXN0cigmKGJp bnBhdHRlcm5zW2ldKSxiaW5wW1NZU19WT1NdW2ldKTsKKyNlbHNlIC8qIFNUUkFUVVMgKi8KKyNp ZmRlZiBkYXRhZ2VuZXJhbAorICAgICAgICBtYWtlc3RyKCYoYmlucGF0dGVybnNbaV0pLGJpbnBb U1lTX0RHXVtpXSk7CisjZWxzZSAvKiBkYXRhZ2VuZXJhbCAqLworI2lmZGVmIE9TSworICAgICAg ICBtYWtlc3RyKCYoYmlucGF0dGVybnNbaV0pLGJpbnBbU1lTX09TS11baV0pOworI2Vsc2UgLyog T1NLICovCisgICAgICAgIG1ha2VzdHIoJihiaW5wYXR0ZXJuc1tpXSksYmlucFtTWVNfVU5LXVtp XSk7CisjZW5kaWYgLyogT1NLICovCisjZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KKyNlbmRpZiAv KiBTVFJBVFVTICovCisjZW5kaWYgLyogVk1TICovCisjZW5kaWYgLyogT1MyICovCisjZW5kaWYg LyogVU5JWCAqLworICAgICAgICBpZiAoIWJpbnBbaV0pCisgICAgICAgICAgYnJlYWs7CisgICAg fQorfQorCisvKgorICBtIGEgdCBjIGggbiBhIG0gZSAgLS0gIENvbXBhcmUgZmlsZW5hbWUgd2l0 aCB0ZXh0ICYgYmluYXJ5IG5hbWUgcGF0dGVybnMuCisKKyAgUmV0dXJuczoKKyAgICAwIGlmIG5h bWUgbWF0Y2hlcyBhIHRleHQgcGF0dGVybiBidXQgbm90IGEgYmluYXJ5IHBhdHRlcm4uCisgICAg MSBpZiBuYW1lIG1hdGNoZXMgYSBiaW5hcnkgcGF0dGVybiBidXQgbm90IGEgdGV4dCBwYXR0ZXJu LgorICAgLTEgaWYgbmFtZSBtYXRjaGVzIG5vIHBhdHRlcm5zLgorICAgLTIgaWYgbmFtZSBtYXRj aGVzIGEgYmluYXJ5IHBhdHRlcm4gYW5kIGEgdGV4dCBwYXR0ZXJuLgorKi8KK2ludAorbWF0Y2hu YW1lKGZpbGVuYW1lLCBsb2NhbCwgb3MpIGNoYXIgKiBmaWxlbmFtZTsgaW50IGxvY2FsOyBpbnQg b3M7IHsKKyAgICBpbnQgcmMgPSAtMTsJCQkvKiBSZXR1cm4gY29kZSAqLworICAgIGNoYXIgKiBu YW1lLCAqIHA7CisjaWZkZWYgT1MyT1JVTklYCisgICAgY2hhciB0bXBidWZbQ0tNQVhQQVRIKzFd OworI2VuZGlmIC8qIE9TMk9SVU5JWCAqLworCisgICAgbmFtZSA9IGZpbGVuYW1lID8gZmlsZW5h bWUgOiAiIjsJLyogQ29weSBvZiBvcmlnaW5hbCBhcmcgKi8KKyAgICBpZiAocGF0dGVybnMgJiYg Km5hbWUpIHsJCS8qIElmIFBBVFRFUk5TIE9OLi4uICovCisJaW50IGk7CisKKyNpZmRlZiBPUzJP UlVOSVgKKwlpZiAoY2ttYXRjaCgiKi5+WzEtOV0qfiIsbmFtZSwxLDEpKSB7IC8qIE5hbWUgaGFz IGJhY2t1cCBzdWZmaXg/ICovCisJICAgIGludCBrOworCSAgICBrID0gY2tzdHJuY3B5KHRtcGJ1 ZixuYW1lLENLTUFYUEFUSCsxKTsgLyogWWVzLCBjb3B5IGFuZCBzdHJpcCAqLworCSAgICBmb3Ig KGkgPSBrIC0gMzsgaSA+IDQ7IGktLSkgeworCQlpZiAodG1wYnVmW2ldID09ICd+JyAmJiB0bXBi dWZbaS0xXSA9PSAnLicpIHsKKwkJICAgIHRtcGJ1ZltpLTFdID0gTlVMOworCQkgICAgYnJlYWs7 CisJCX0KKwkgICAgfQorCSAgICBuYW1lID0gdG1wYnVmOwkJLyogQW5kIHBvaW50IHRvIHN0cmlw cGVkIGNvcHkgKi8KKwl9CisjZW5kaWYgLyogT1MyT1JVTklYICovCisJenN0cmlwKG5hbWUsJnAp OwkJLyogU3RyaXAgcGF0aG5hbWUgdG9vICovCisJbmFtZSA9IHA7CisKKyAgICAgICAgaWYgKGxv Y2FsKSB7CisgICAgICAgICAgICBpZiAodHh0cGF0dGVybnNbMF0pIHsJLyogU2VhcmNoIHRleHQg cGF0dGVybnMgKi8KKyAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgRlRQQVRURVJOUyAm JiB0eHRwYXR0ZXJuc1tpXTsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChja21hdGNo KHR4dHBhdHRlcm5zW2ldLG5hbWUsZmlsZWNhc2UsMSkpIHsKKyAgICAgICAgICAgICAgICAgICAg ICAgIHJjID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAg aWYgKGJpbnBhdHRlcm5zWzBdKSB7CS8qIEFuZCBzZWFyY2ggYmluYXJ5IHBhdHRlcm5zICovCisg ICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IEZUUEFUVEVSTlMgJiYgYmlucGF0dGVybnNb aV07IGkrKykgeworICAgICAgICAgICAgICAgICAgICBpZiAoY2ttYXRjaChiaW5wYXR0ZXJuc1tp XSxuYW1lLGZpbGVjYXNlLDEpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByYyA9IChyYyA+ IC0xKSA/IC0yIDogMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCX0gZWxzZSB7 CisgICAgICAgICAgICBpZiAob3MgPj0gMCAmJiBvcyA8IFNZU19NQVgpIHsKKwkJaWYgKHR4dHBb b3NdWzBdKSB7CisJCSAgICBmb3IgKGkgPSAwOyBpIDwgRlRQQVRURVJOUyAmJiB0eHRwW29zXVtp XTsgaSsrKSB7CisJCQlpZiAoY2ttYXRjaCh0eHRwW29zXVtpXSxuYW1lLGZpbGVjYXNlLDEpKSB7 CisJCQkgICAgcmMgPSAwOworCQkJICAgIGJyZWFrOworCQkJfQorCQkgICAgfQorCQl9CisJCWlm IChiaW5wW29zXVswXSkgeworCQkgICAgZm9yIChpID0gMDsgaSA8IEZUUEFUVEVSTlMgJiYgYmlu cFtvc11baV07IGkrKykgeworCQkJaWYgKGNrbWF0Y2goYmlucFtvc11baV0sbmFtZSxmaWxlY2Fz ZSwxKSkgeworCQkJICAgIHJjID0gKHJjID4gLTEpID8gLTIgOiAxOworCQkJICAgIGJyZWFrOwor CQkJfQorCQkgICAgfQorCQl9CisJICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBkZWJ1ZyhG MTExLCJtYXRjaG5hbWUiLG5hbWUscmMpOworICAgIHJldHVybihyYyk7Cit9CisjZW5kaWYgLyog UEFUVEVSTlMgKi8KKworI2lmZGVmIFVOSUNPREUKKyNpZm5kZWYgTk9FVkVOTUFYCisjZGVmaW5l IEVWRU5NQVgKKyNlbmRpZiAvKiBOT0VWRU5NQVggKi8KKyNlbmRpZiAvKiBVTklDT0RFICovCisK Ky8qICBTIEMgQSBOIEYgSSBMIEUgIC0tICBBbmFseXplIGEgZmlsZSdzIGNvbnRlbnRzICAqLwor CisvKgorICBDYWxsIHdpdGg6CisgICAgbmFtZTogICAgUG9pbnRlciB0byBuYW1lIG9mIGV4aXN0 aW5nIGZpbGUuCisgICAgZmxhZzogICAgUG9pbnRlciB0byBpbnQgaW4gd2hpY2ggdG8gcmV0dXJu IGFkZGl0aW9uYWwgbnVtZXJpYyBkYXRhLgorCisgIFJldHVybnM6CisgICAgLTEgb24gZmFpbHVy ZSAodG8gb3BlbiBmaWxlIG9yIHRvIHJlYWQgZnJvbSBpdCkuCisgICAgSW50ZWdlciwgMC4uNCwg b24gc3VjY2VzcyBpbmRpY2F0aW5nIGZpbGUgdHlwZToKKyAgICAgMCA9IDctYml0IHRleHQgKGZs YWcgPSAtMSkKKyAgICAgMSA9IFVURi04IHRleHQgKGZsYWcgPSAtMSkKKyAgICAgMiA9IFVDUy0y IHRleHQgKGZsYWcgPSAgMDogYmlnLWVuZGlhbjsgZmxhZyA9IDE6IGxpdHRsZS1lbmRpYW4pCisg ICAgIDMgPSA4LWJpdCB0ZXh0IChmbGFnID0gIDA6IG5vIEMxIGJ5dGVzOyBmbGFnID0gMTogaW5j bHVkZXMgQzEgYnl0ZXMpCisgICAgIDQgPSBUZXh0ICAgICAgICh0eXBlIHVua25vd24pCisgICAg IDUgPSBiaW5hcnkgICAgIChmbGFnID0gLTEpCisKKyAgSWYgVU5JQ09ERSBpcyBkZWZpbmVkOgor CisgICAxLiBJZiBmaWxlIGJlZ2lucyB3aXRoIGEgdmFsaWQgQk9NLCBpdCBpcyBiZWxpZXZlZC4g IE90aGVyd2lzZSB3ZQorICAgICAgcmVhZCB0aGUgZmlyc3QgNEsgb2YgdGhlIGZpbGUgKHNpbmNl IGl0IG1pZ2h0IGJlIGVtYWlsIHdpdGggdmVyYm9zZQorICAgICAgaGVhZGVycykgYW5kIGFuYWx5 emUgaXQ6CisKKyAgIDIuIElmIGZpbGUgY29udGFpbnMgb25seSB2YWxpZCBVVEYtOCBzZXF1ZW5j ZXMsIHdlIGNhbGwgaXQgVVRGLTg7CisgICAgICBvdGhlcndpc2U6CisKKyAgIDMuIElmIHRoZSBm aWxlIGNvbnRhaW5zIGxvdHMgb2YgYWx0ZXJuYXRlIDAgYnl0ZXMsIHdlIGNhbGwgaXQgVUNTLTIs IGFuZAorICAgICAgc2V0IHRoZSBwb2xhcml0eSBhY2NvcmRpbmcgdG8gd2hldGhlciB0aGUgcHJl cG9uZGVyYW5jZSBvZiB0aGVtIGFyZSBpbgorICAgICAgZXZlbiBvciBvZGQgcG9zaXRpb25zOyBv dGhlcndpc2U6CisKKyAgIDQuIElmIEVWRU5NQVggaXMgZGVmaW5lZCBhbmQgdGhlIGZpbGUgY29u dGFpbnMgbG90cyBvZiBhbHRlcm5hdGUgYnl0ZXMgdGhhdAorICAgICAgYXJlIGlkZW50aWNhbCwg ZXZlbiBpZiB0aGV5IGFyZW4ndCB6ZXJvLCBhbmQgdGhlIG51bWJlciBvZiBzdWNoIGJ5dGVzCisg ICAgICBpcyBhdCBsZWFzdCBmb3VyIHRpbWVzIHRoZSBsZW5ndGggb2YgdGhlIG1heGltdW0gcnVu IG9mIGFsdGVybmF0aW5nCisgICAgICBpZGVudGljYWwgYnl0ZXMgb2YgdGhlIG9wcG9zaXRlIHBv bGFyaXR5LCB3ZSBjYWxsIGl0IFVDUy0yOyBvdGhlcndpc2U6CisKKyAgIDUuIElmIHRoZSBmaWxl IGNvbnRhaW5lZCBubyBieXRlcyB3aXRoIHRoZWlyIDh0aCBiaXRzIG9uIGFuZCBubyBjb250cm9s cworICAgICAgb3RoZXIgdGhhbiBDUiwgTEYsIEhULCBhbmQgRkYsIHdlIGNhbGwgaXQgQVNDSUk7 IG90aGVyd2lzZToKKworICAgNi4gSWYgaXQgY29udGFpbnMgQzAgY29udHJvbCBjaGFyYWN0ZXJz IG90aGVyIHRoYW4gQ1IsIExGLCBIVCwgYW5kIEZGLCB3ZQorICAgICAgY2FsbCBpdCBiaW5hcnk7 IG90aGVyd2lzZToKKworICAgNy4gV2UgY2FsbCBpdCA4LWJpdCB0ZXh0LCBjaGFyYWN0ZXIgc2V0 IHVua25vd24gKGNvdWxkIGJlIExhdGluLTEgb3IKKyAgICAgIGFueXRoaW5nIGVsc2UpLgorCisg ICBOb3RlIHRoYXQgbWFsZm9ybWVkIFVURi04IGlzIG5vdCBkaWFnbm9zZWQgYXMgVVRGLTguCisK KyAgIElmIFVOSUNPREUgaXMgbm90IGRlZmluZWQ6CisKKyAgIDEuIElmIHRoZSBmaWxlIGNvbnRh aW5zIEMwIGNvbnRyb2wgY2hhcmFjdGVycyBvdGhlciB0aGFuIENSLCBMRiwgSFQsIGFuZAorICAg ICAgRkYsIHdlIGNhbGwgaXQgYmluYXJ5OyBvdGhlcndpc2U6CisKKyAgIDIuIElmIHRoZSBmaWxl IGNvbnRhaW5zIGFueSA4LWJpdCBieXRlcywgd2UgY2FsbCBpdCA4LWJpdCB0ZXh0OyBvdGhlcndp c2U6CisKKyAgIDMuIFdlIGNhbGwgaXQgNy1iaXQgdGV4dC4KKworICAgSW4gdGhlIG5vbi1Vbmlj b2RlIGNhc2UsIFVDUy0yIGlzIGRpYWdub3NlZCBhcyBiaW5hcnksIGJ1dCBVVEYtOCBhcworICAg OC1iaXQgdGV4dC4KKworICAgVGhlcmUgaXMgbm8gc2lnbmlmaWNhbnQgc3BlZWQgZGlmZmVyZW5j ZSBiZXR3ZWVuIHRoZSBVbmljb2RlIGFuZAorICAgbm9uLVVuaWNvZGUgY2FzZXMuCisqLworaW50 CitzY2FuZmlsZShuYW1lLGZsYWcsbnNjYW5maWxlKSBjaGFyICogbmFtZTsgaW50ICogZmxhZywg bnNjYW5maWxlOyB7CisgICAgRklMRSAqIGZwOwkJCQkvKiBGaWxlIHBvaW50ZXIgKi8KKyAgICB1 bnNpZ25lZCBjaGFyIGJ1ZltTQ0FORklMRUJVRl07CS8qIEZpbGUgZGF0YSBidWZmZXIgZm9yIGFu YWx5c2lzICovCisgICAgaW50IHgsIHZhbCA9IC0xLCBjb3VudCA9IDA7CQkvKiBXb3JrZXJzICov CisgICAgaW50IHJjID0gLTE7CQkJLyogUmV0dXJuIGNvZGUgKi8KKyAgICBpbnQgcHYgPSAtMTsJ CQkvKiBQYXR0ZXJuLW1hdGNoIHZhbHVlICovCisgICAgaW50IGVvZiA9IDA7CQkJLyogRmxhZyBm b3IgZmlsZSBFT0YgZW5jb3VudGVyZWQgKi8KKyAgICBpbnQgYnl0ZXMgPSAwOwkJCS8qIFRvdGFs IGJ5dGUgY291bnQgKi8KKyNpZmRlZiBVTklDT0RFCisgICAgdW5zaWduZWQgaW50IGMwLCBjMTsJ CS8qIEZpcnN0IDIgZmlsZSBieXRlcyAoZm9yIEJPTSkgKi8KKyNlbmRpZiAvKiBVTklDT0RFICov CisgICAgZXh0ZXJuIGludCBwaXBlc2VuZCwgZmlsZXBlZWs7CisKKyAgICByZWdpc3RlciBpbnQg aTsJCQkvKiBMb29wIGNvbnRyb2wgKi8KKyAgICBpbnQgcmVhZHNpemUgPSAwOwkJCS8qIEhvdyBt dWNoIHRvIHJlYWQgKi8KKyAgICBpbnQgZWlnaHRiaXQgPSAwOwkJCS8qIE51bWJlciBvZiBieXRl cyB3aXRoIDh0aCBiaXQgb24gKi8KKyAgICBpbnQgYzBjb250cm9scyA9IDA7CQkJLyogQzAgbm9u LXRleHQgY29udHJvbC1jaGFyIGNvdW50ZXIgKi8KKyAgICBpbnQgYzBub25pc28gPSAwOwkJCS8q IEMwIG5vbi1JU08gY29udHJvbC1jaGFyIGNvdW50ZXIgKi8KKyAgICBpbnQgYzFjb250cm9scyA9 IDA7CQkJLyogQzEgY29udHJvbC1jaGFyYWN0ZXIgY291bnRlciAqLworICAgIHVuc2lnbmVkIGlu dCBjOwkJCS8qIEN1cnJlbnQgY2hhcmFjdGVyICovCisgICAgaW50IHJ1bm1heCA9IDA7CQkJLyog TG9uZ2VzdCBydW4gb2YgMCBieXRlcyAqLworICAgIGludCBydW56ZXJvID0gMDsJCQkvKiBSdW4g b2YgMCBieXRlcyAqLworICAgIGludCBwY3R6ZXJvID0gMDsJCQkvKiBQZXJjZW50YWdlIG9mIDAg Ynl0ZXMgKi8KKyAgICBpbnQgdHh0Y3ogPSAwOworI2lmZGVmIENLX0NUUkxaCisgICAgZXh0ZXJu IGludCBlb2ZtZXRob2Q7CisjZW5kaWYgLyogQ0tfQ1RSTFogKi8KKworI2lmZGVmIFVOSUNPREUK KyAgICBpbnQgbm90dXRmOCA9IDA7CQkJLyogTm9uemVybyBpZiBkZWZpbml0ZWx5IG5vdCBVVEYt OCAqLworICAgIGludCB1dGY4c3RhdGUgPSAwOwkJCS8qIFVURi04IHJlY29nbml6ZXIgc3RhdGUg Ki8KKyAgICBpbnQgb2RkemVybyA9IDA7CQkJLyogTnVtYmVyIG9mIDAgYnl0ZXMgaW4gb2RkIHBv c3Rpb25zICovCisgICAgaW50IGV2ZW56ZXJvID0gMDsJCQkvKiBhbmQgaW4gZXZlbiBwb3NpdGlv bnMgKi8KKyAgICBpbnQgbGZudWwgPSAwOwkJCS8qIE51bWJlciBvZiA8TEY+PE5VTD4gc2VxdWVu Y2VzICovCisgICAgaW50IGNybGYgPSAwOwkJCS8qIE51bWJlciBvZiA8Q1JMRj4gc2VxdWVuY2Vz ICovCisjZWxzZQorICAgIGludCBub3R1dGY4ID0gMTsKKyNlbmRpZiAvKiBVTklDT0RFICovCisK KyNpZmRlZiBDT01NRU5UCisjaWZkZWYgRVZFTk1BWAorICAgIGludCBvZGRydW4gPSAwLCBvZGRt YXggPSAwLCBvZGRieXRlID0gMCwgb2RkbWF4Ynl0ZSA9IDA7CisgICAgaW50IGV2ZW5ydW4gPSAw LCBldmVubWF4ID0gMCwgZXZlbmJ5dGUgPSAwLCBldmVubWF4Ynl0ZSA9IDA7CisjZW5kaWYgLyog RVZFTk1BWCAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKworI2lmbmRlZiBOT1hGRVIKKyAgICBp ZiAocGlwZXNlbmQgfHwgY2FsaWJyYXRlIHx8IHNuZGFycmF5KSAvKiBPbmx5IGZvciByZWFsIGZp bGVzICovCisgICAgICByZXR1cm4oLTEpOworI2VuZGlmIC8qIE5PWEZFUiAqLworICAgIGRlYnVn KEYxMTEsInNjYW5maWxlIixuYW1lLG5zY2FuZmlsZSk7CisjaWZkZWYgUEFUVEVSTlMKKyAgICBp ZiAoIWZpbGVwZWVrKSB7CisJcHYgPSBtYXRjaG5hbWUobmFtZSwxLC0xKTsKKwlpZiAocHYgPCAw KQorCSAgcmMgPSAtMTsKKwllbHNlCisJICByYyA9IChwdiA9PSAxKSA/IEZUX0JJTiA6IEZUX1RF WFQ7CisJZGVidWcoRjExMSwic2NhbmZpbGUgIWZpbGVwZWVrIHJlc3VsdCIsbmFtZSxyYyk7CisJ cmV0dXJuKHJjKTsKKyAgICB9CisjZW5kaWYgLyogUEFUVEVSTlMgKi8KKworI2lmZGVmIFZNUwor LyogV2UgZG9uJ3Qgc2NhbiBpbiBWTVMgd2hlcmUgdGV4dCBmaWxlcyBoYXZlIHZhcmlvdXMgcmVj b3JkIGZvcm1hdHMgaW4gICovCisvKiB3aGljaCByZWNvcmQgaGVhZGVycyBjb250YWluIHNlZW1p bmdseSBub24tdGV4dCBieXRlcy4gIFNvIHRoZSBiZXN0ICAgKi8KKy8qIHdlIGNhbiBkbyBpbiBW TVMgaXMgdGVsbCB3aGV0aGVyIHRoZSBmaWxlIGlzIHRleHQgb3IgYmluYXJ5LCBwZXJpb2QuICAq LworICAgIHsKKwlpbnQgYiwgeDsKKwliID0gYmluYXJ5OwkJCS8qIFNhdmUgY3VycmVudCBiaW5h cnkgc2V0dGluZyAqLworCWlmICh6b3BlbmkoWklGSUxFLG5hbWUpID4gMCkgewkvKiBJbiBWTVMg dGhpcyBzZXRzIGJpbmFyeSAqLworCSAgICB4ID0gYmluYXJ5OwkJCS8qIEdldCByZXN1bHQgKi8K KwkgICAgemNsb3NlKFpJRklMRSk7CQkvKiBDbG9zZSB0aGUgZmlsZSAqLworCSAgICBiaW5hcnkg PSBiOwkJCS8qIFJlc3RvcmUgcHJldmlvdXMgYmluYXJ5IHNldHRpbmcgKi8KKwkgICAgcmMgPSB4 ID8gRlRfQklOIDogRlRfVEVYVDsKKwkgICAgdmFsID0gMDsKKwkgICAgZ290byB4c2NhbmZpbGU7 CisJfQorICAgIH0KKyNlbmRpZiAvKiBWTVMgKi8KKworICAgIGVvZiA9IDA7CQkJCS8qIEVuZC1v Zi1maWxlIHJlYWNoZWQgaW5kaWNhdG9yICovCisjaWZkZWYgT1MyCisgICAgZnAgPSBmb3Blbihu YW1lLCAicmIiKTsJCS8qIE9wZW4gdGhlIGZpbGUgaW4gYmluYXJ5IG1vZGUgKi8KKyNlbHNlCisg ICAgZnAgPSBmb3BlbihuYW1lLCAiciIpOworI2VuZGlmIC8qIE9TMiAqLworCisgICAgaWYgKCFm cCkJCQkJLyogRmFpbGVkPyAqLworICAgICAgcmV0dXJuKC0xKTsKKworICAgIHdoaWxlICgxKSB7 CQkJCS8qIE9uZSBvciBtb3JlIGd1bHBzIGZyb20gZmlsZSAqLworCWlmIChlb2YpIHsJCQkvKiBF T0YgZnJvbSBsYXN0IHRpbWU/ICovCisJICAgIGRlYnVnKEYxMTEsInNjYW5maWxlIGF0IEVPRiIs bmFtZSxieXRlcyk7CisJICAgIGlmIChydW56ZXJvID4gcnVubWF4KQorCSAgICAgIHJ1bm1heCA9 IHJ1bnplcm87CisJICAgIGJyZWFrOworCX0KKwlpZiAobnNjYW5maWxlIDwgMCkgewkJLyogUmVh ZGluZyB3aG9sZSBmaWxlICovCisJICAgIHJlYWRzaXplID0gU0NBTkZJTEVCVUY7CisJfSBlbHNl IHsJCQkvKiBSZWFkaW5nIGZpcnN0IG5zY2FuZmlsZWUgYnl0ZXMgKi8KKwkgICAgcmVhZHNpemUg PSBuc2NhbmZpbGUgLSBieXRlczsKKwkgICAgaWYgKHJlYWRzaXplIDwgMSkKKwkgICAgICBicmVh azsKKwkgICAgaWYgKHJlYWRzaXplID4gU0NBTkZJTEVCVUYpCisJICAgICAgcmVhZHNpemUgPSBT Q0FORklMRUJVRjsKKwl9CisJZGVidWcoRjEwMSwic2NhbmZpbGUgcmVhZHNpemUiLCIiLHJlYWRz aXplKTsKKwljb3VudCA9IGZyZWFkKGJ1ZiwxLHJlYWRzaXplLGZwKTsgLyogUmVhZCBhIGJ1ZmZl ciAqLworCWlmIChjb3VudCA9PSBFT0YgfHwgY291bnQgPT0gMCkgeworCSAgICBkZWJ1ZyhGMTEx LCJzY2FuZmlsZSBFT0YiLG5hbWUsY291bnQpOworCSAgICBicmVhazsKKwl9CisJZGVidWcoRjEx MSwic2NhbmZpbGUgYnVmZmVyIG9rIixuYW1lLGNvdW50KTsKKworCWlmIChieXRlcyA9PSAwICYm IGNvdW50ID4gOCkgeworCSAgICAvKiBQREYgZmlsZXMgY2FuIGxvb2sgbGlrZSB0ZXh0IGluIHRo ZSBiZWdpbm5pbmcuICovCisJICAgIGlmICghY2tzdHJjbXAoKGNoYXIgKilidWYsIiVQREYtMS4i LDcsMSkpIHsKKwkJaWYgKGlzZGlnaXQoYnVmWzddKSkgeworCQkgICAgaWYgKGJ1Zls4XSA9PSAn XDAxNScgfHwKKwkJCWNvdW50ID4gOSAmJiBidWZbOF0gPT0gU1AgJiYgYnVmWzldID09ICdcMDE1 JykgeworI2lmZGVmIERFQlVHCisJCQlidWZbOF0gPSBOVUw7CisJCQlkZWJ1ZyhGMTEwLCJzY2Fu ZmlsZSBQREYiLGJ1ZiwwKTsKKyNlbmRpZiAvKiBERUJVRyAqLworCQkJYmluYXJ5ID0gMTsJLyog QnV0IHRoZXkgYXJlIGJpbmFyeS4gKi8KKwkJCWJyZWFrOworCQkgICAgfQorCQl9CisJICAgIH0g ZWxzZSBpZiAoIWNrc3RyY21wKChjaGFyICopYnVmLCIlIVBTLUFkbyIsOCwxKSkgeworCQkvKiBE aXR0byBmb3IgUG9zdFNjcmlwdCAqLworI2lmZGVmIERFQlVHCisJCWludCBpOworCQlmb3IgKGkg PSA4OyBpIDwgY291bnQ7IGkrKykgeworCQkgICAgaWYgKGJ1ZltpXSA8ICchJykgeworCQkJYnVm W2ldID0gTlVMOworCQkJYnJlYWs7CisJCSAgICB9CisJCX0KKwkJZGVidWcoRjExMCwic2NhbmZp bGUgUG9zdFNjcmlwdCIsYnVmLDApOworI2VuZGlmIC8qIERFQlVHICovCisJCWJpbmFyeSA9IDE7 CisJCWJyZWFrOworI2lmbmRlZiBOT1BDTFNDQU4KKwkgICAgfSBlbHNlIGlmICghY2tzdHJjbXAo KGNoYXIgKilidWYsIikgSFAtUENMIiw4LDEpKSB7CisJCS8qIEhQIFBDTCBwcmludGVyIGxhbmd1 YWdlICovCisjaWZkZWYgREVCVUcKKwkJaW50IGk7CisJCWZvciAoaSA9IDg7IGkgPCBjb3VudDsg aSsrKSB7CisJCSAgICBpZiAoYnVmW2ldIDwgJyEnKSB7CisJCQlidWZbaV0gPSBOVUw7CisJCQli cmVhazsKKwkJICAgIH0KKwkJfQorCQlkZWJ1ZyhGMTEwLCJzY2FuZmlsZSBQQ0wiLGJ1ZiwwKTsK KyNlbmRpZiAvKiBERUJVRyAqLworCQliaW5hcnkgPSAxOworCQlicmVhazsKKwkgICAgfSAKKyNl bmRpZiAvKiBOT1BDTFNDQU4gKi8KKyNpZm5kZWYgTk9QSkxTQ0FOCisJICAgICAgZWxzZSBpZiAo YnVmWzBdID09ICdcMDMzJyAmJiAoYnVmWzFdID09ICdFJyB8fCBidWZbMV0gPT0gJyUnKSkgewor CQkvKiBEaXR0byBmb3IgUEpMIEpvYiBwcmludGVyIGhlYWRlciAqLworI2lmZGVmIERFQlVHCisJ CWludCBpOworCQlmb3IgKGkgPSAyOyBpIDwgY291bnQ7IGkrKykgeworCQkgICAgaWYgKGJ1Zltp XSA8ICchJykgeworCQkJYnVmW2ldID0gTlVMOworCQkJYnJlYWs7CisJCSAgICB9CisJCX0KKwkJ ZGVidWcoRjExMCwic2NhbmZpbGUgUEpMIEpvYiBwcmludGVyIGhlYWRlciIsYnVmLDApOworI2Vu ZGlmIC8qIERFQlVHICovCisJCWJpbmFyeSA9IDE7CisJCWJyZWFrOworI2VuZGlmIC8qIE5PUEpM U0NBTiAqLworCSAgICB9CisJfQorCisjaWZkZWYgVU5JQ09ERQorCWlmIChieXRlcyA9PSAwICYm IGNvdW50ID4gMSkgeworCSAgICBpbnQgaW5jbF9jbnQgPSAwOworCisJICAgIC8qIEZpcnN0IGxv b2sgZm9yIEJPTSAqLworCisJICAgIGMwID0gKHVuc2lnbmVkKSgodW5zaWduZWQpYnVmWzBdJjB4 RkYpOyAvKiBGaXJzdCBmaWxlIGJ5dGUgKi8KKwkgICAgYzEgPSAodW5zaWduZWQpKCh1bnNpZ25l ZClidWZbMV0mMHhGRik7IC8qIFNlY29uZCBieXRlICovCisKKwkgICAgaWYgKGMwID09IDB4RkUg JiYgYzEgPT0gMHhGRikgewkvKiBVQ1MtMiBCRSAqLworCQlyYyA9IEZUX1VDUzI7CisJCXZhbCA9 IDA7CisJCWRlYnVnKEYxMTEsInNjYW5maWxlIFVDUzIgQk9NIEJFIixja2l0b2EodmFsKSxyYyk7 CisJCWluY2xfY250Kys7CisJICAgIH0gZWxzZSBpZiAoYzAgPT0gMHhGRiAmJiBjMSA9PSAweEZF KSB7IC8qIFVDUy0yIExFICovCisJCXJjID0gRlRfVUNTMjsKKwkJdmFsID0gMTsKKwkJZGVidWco RjExMSwic2NhbmZpbGUgVUNTMiBCT00gTEUiLGNraXRvYSh2YWwpLHJjKTsKKwkJaW5jbF9jbnQr KzsKKwkgICAgfSBlbHNlIGlmIChjb3VudCA+IDIpIGlmIChjMCA9PSAweEVGICYmIGMxID09IDB4 QkIgJiYKKwkJICAgICAgICh1bnNpZ25lZCkoKHVuc2lnbmVkKWJ1ZlsyXSYweEZGKSA9PSAweEJG KSB7CisJCXJjID0gRlRfVVRGODsKKwkJZGVidWcoRjExMSwic2NhbmZpbGUgVVRGOCBCT00iLGNr aXRvYSh2YWwpLHJjKTsKKwkJaW5jbF9jbnQrKzsKKwkgICAgfQorCSAgICBpZiAoaW5jbF9jbnQp IHsJCS8qIEhhdmUgQk9NICovCisJCWJ5dGVzICs9IGNvdW50OworCQlnb3RvIHhzY2FuZmlsZTsK KwkgICAgfQorCX0KKyNlbmRpZiAvKiBVTklDT0RFICovCisKKwlieXRlcyArPSBjb3VudDsJCQkv KiBDb3VudCBieXRlcyByZWFkICovCisJZW9mID0gZmVvZihmcCk7CQkJLyogRmxhZyBmb3IgYXQg RU9GICAqLworCisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsJLyogRm9yIGVhY2ggYnl0 ZS4uLiAqLworCSAgICBjID0gKHVuc2lnbmVkKWJ1ZltpXTsJLyogRm9yIGVhc2Ugb2YgcmVmZXJl bmNlICovCisJICAgIGlmICghYykgewkJCS8qIFplcm8gYnl0ZT8gKi8KKyNpZmRlZiBFVkVOTUFY CisJCWlmIChpJjEpCQkvKiBJbiBvZGQgcG9zaXRpb24gKi8KKwkJICBvZGR6ZXJvKys7CisJCWVs c2UKKwkJICBldmVuemVybysrOwkJLyogSW4gZXZlbiBwb3NpdGlvbiAqLworI2VuZGlmIC8qIEVW RU5NQVggKi8KKwkJcnVuemVybysrOworCSAgICB9IGVsc2UgewkJCS8qIE5vdCBhIHplcm8gYnl0 ZSAqLworCQlpZiAocnVuemVybyA+IHJ1bm1heCkKKwkJICBydW5tYXggPSBydW56ZXJvOworCQlp ZiAocnVubWF4ID4gMikJCS8qIFRoYXQncyBhbGwgd2UgbmVlZCB0byBiZSBjZXJ0YWluICovCisJ CSAgYnJlYWs7CQkvKiBpdCdzIGEgYmluYXJ5IGZpbGUuICovCisJCXJ1bnplcm8gPSAwOworCSAg ICB9CisKKyNpZmRlZiBDT01NRU5UCisjaWZkZWYgRVZFTk1BWAorCisvKiBUaGlzIGlzIHRvIGNh dGNoIFVDUy0yIHdpdGggYSBub24tQVNDSUksIG5vbi1MYXRpbi0xIHJlcGVydG9pcmUgICovCisK KwkgICAgaWYgKGkgPiAxKSB7CSAgICAgIC8qIExvb2sgZm9yIHJ1bnMgb2YgYWx0ZXJuYXRpbmcg Y2hhcnMgKi8KKwkJaWYgKGkmMSkgeworCQkgICAgaWYgKGMgPT0gYnVmW2ktMl0pIHsgLyogSW4g b2RkIHBvc2l0aW9ucyAqLworCQkJb2RkcnVuKys7CisJCQlvZGRieXRlID0gYzsKKwkJICAgIH0g ZWxzZSB7CisJCQlvZGRtYXggPSBvZGRydW47CisJCQlvZGRtYXhieXRlID0gb2RkYnl0ZTsKKwkJ ICAgIH0KKwkJfSBlbHNlIHsJCS8qIGFuZCBldmVuIHBvc2l0aW9ucyAqLworCQkgICAgaWYgKGMg PT0gYnVmW2ktMl0pIHsKKwkJCWV2ZW5ydW4rKzsKKwkJCWV2ZW5ieXRlID0gYzsKKwkJICAgIH0g ZWxzZSB7CisJCQlldmVubWF4ID0gZXZlbnJ1bjsKKwkJCWV2ZW5tYXhieXRlID0gZXZlbmJ5dGU7 CisJCSAgICB9CisJCX0KKwkgICAgfQorI2VuZGlmIC8qIEVWRU5NQVggKi8KKyNlbmRpZiAvKiBD T01NRU5UICovCisKKwkgICAgaWYgKChjICYgMHg4MCkgPT0gMCkgewkvKiBXZSBoYXZlIGEgNy1i aXQgYnl0ZSAqLworI2lmZGVmIFVOSUNPREUKKwkJaWYgKGkgPiAwICYmIGMgPT0gMTApIHsgLyog TGluZWZlZWQgKi8KKwkJICAgIGlmIChidWZbaS0xXSA9PSAwKSBsZm51bCsrOyAvKiBQcmVjZWRl ZCBieSBOVUwgKi8KKwkJICAgIGVsc2UgaWYgKGJ1ZltpLTFdID09IDEzKSBjcmxmKys7IC8qIG9y IGJ5IENSLi4uICovCisJCX0KKyNlbmRpZiAvKiBVTklDT0RFICovCisJCWlmIChjIDwgJyAnKSB7 CQkvKiBDaGVjayBmb3IgQ08gY29udHJvbHMgKi8KKwkJICAgIGlmIChjICE9IExGICYmIGMgIT0g Q1IgJiYgYyAhPSBIVCAmJiBjICE9IEZGKSB7CisJCQljMGNvbnRyb2xzKys7CisJCQlpZiAoYyAh PSBFU0MgJiYgYyAhPSBTTyAmJiBjICE9IFNJKQorCQkJICBjMG5vbmlzbysrOworCQkgICAgfQor CQkgICAgaWYgKChjID09ICdcMDMyJykJLyogQ3RybC1aICovCisjaWZkZWYgQ09NTUVOVAorCQkJ JiYgZW9mICYmIChpID49IGNvdW50IC0gMikKKyNlbmRpZiAvKiBDT01NRU5UICovCisJCQkpIHsK KwkJCWMwY29udHJvbHMtLTsKKwkJCWMwbm9uaXNvLS07CisjaWZkZWYgQ0tfQ1RSTFoKKwkJCWlm IChlb2ZtZXRob2QgPT0gWFlFT0ZfWiAmJiB0eHRjeiA9PSAwKSB7CisJCQkgICAgaWYgKGMwY29u dHJvbHMgPT0gMCkgLyogQWxsIHRleHQgcHJpb3IgdG8gQ3RybC1aICovCisJCQkgICAgICB0eHRj eiA9IDE7CisJCQl9CisjZW5kaWYgLyogQ0tfQ1RSTFogKi8KKwkJICAgIH0KKwkJfQorI2lmZGVm IFVOSUNPREUKKwkJaWYgKCFub3R1dGY4ICYmIHV0ZjhzdGF0ZSkgeyAvKiBJbiBVVEYtOCBzZXF1 ZW5jZT8gKi8KKwkJICAgIHV0ZjhzdGF0ZSA9IDA7CisJCSAgICBkZWJ1ZyhGMDAwLCJzY2FuZmls ZSIsIjctYml0IGJ5dGUgaW4gVVRGOCBzZXF1ZW5jZSIsYyk7CisJCSAgICBub3R1dGY4Kys7CQkv KiBUaGVuIGl0J3Mgbm90IFVURi04ICovCisJCSAgICBjb250aW51ZTsKKwkJfQorI2VuZGlmIC8q IFVOSUNPREUgKi8KKwkgICAgfSBlbHNlIHsJCQkvKiBXZSBoYXZlIGFuIDgtYml0IGJ5dGUgKi8K KwkJZWlnaHRiaXQrKzsJCS8qIENvdW50IGl0ICovCisJCWlmIChjID49IDB4ODAgJiYgYyA8IDB4 QTApIC8qIENoZWNrIGZvciBDMSBjb250cm9scyAqLworCQkgIGMxY29udHJvbHMrKzsKKyNpZmRl ZiBVTklDT0RFCisJCWlmICghbm90dXRmOCkgewkJLyogSWYgaXQgbWlnaHQgc3RpbGwgYmUgVVRG OC4uLiAqLworCQkgICAgc3dpdGNoICh1dGY4c3RhdGUpIHsgLyogRW50ZXIgdGhlIFVURi04IHN0 YXRlIG1hY2hpbmUgKi8KKwkJICAgICAgY2FzZSAwOgkJIC8qIEZpcnN0IGJ5dGUuLi4gKi8KKwkJ CWlmICgoYyAmIDB4RTApID09IDB4QzApIHsgLyogVGVsbHMgbnVtYmVyIG9mICovCisJCQkgICAg dXRmOHN0YXRlID0gMTsgICAgICAgIC8qIHN1YnNlcXVlbnQgYnl0ZXMgKi8KKwkJCX0gZWxzZSBp ZiAoKGMgJiAweEYwKSA9PSAweEUwKSB7CisJCQkgICAgdXRmOHN0YXRlID0gMjsKKwkJCX0gZWxz ZSBpZiAoKGMgJiAweEY4KSA9PSAweEYwKSB7CisJCQkgICAgdXRmOHN0YXRlID0gMzsKKwkJCX0g ZWxzZSB7CisJCQkgICAgbm90dXRmOCsrOworCQkJfQorCQkJYnJlYWs7CisJCSAgICAgIGNhc2Ug MToJCS8qIFN1YnNlcXVlbnQgYnl0ZSAqLworCQkgICAgICBjYXNlIDI6CisJCSAgICAgIGNhc2Ug MzoKKwkJCWlmICgoYyAmIDB4QzApICE9IDB4ODApIHsgLyogTXVzdCBzdGFydCB3aXRoIDEwICov CisJCQkgICAgZGVidWcoRjAwMCwic2NhbmZpbGUiLAorCQkJCSAgImJhZCBieXRlIGluIFVURjgg c2VxdWVuY2UiLGMpOworCQkJICAgIG5vdHV0ZjgrKzsKKwkJCSAgICBicmVhazsKKwkJCX0KKwkJ CXV0ZjhzdGF0ZS0tOwkvKiBHb29kLCBvbmUgbGVzcyBpbiB0aGlzIHNlcXVlbmNlICovCisJCQli cmVhazsKKwkJICAgICAgZGVmYXVsdDoJCS8qIFNob3VsZG4ndCBoYXBwZW4gKi8KKwkJCWRlYnVn KEYxMTEsInNjYW5maWxlIiwiYmFkIFVURjggc3RhdGUiLHV0ZjhzdGF0ZSk7CisJCQlub3R1dGY4 Kys7CisJCSAgICB9CisJCX0KKyNlbmRpZiAvKiBVTklDT0RFICovCisJICAgIH0KKwl9CisgICAg fQorICAgIGZjbG9zZShmcCk7CQkJCS8qIENsb3NlIHRoZSBmaWxlICovCisgICAgZGVidWcoRjEw MSwic2NhbmZpbGUgYnl0ZXMiLCIiLGJ5dGVzKTsKKworICAgIGlmIChieXRlcyA9PSAwKQkJCS8q IElmIG5vdGhpbmcgd2FzIHJlYWQgKi8KKyAgICAgIHJldHVybigtMSk7CQkJLyogd2UncmUgZG9u ZS4gKi8KKworI2lmZGVmIEVWRU5NQVgKKyAgICAvKiBJbiBjYXNlIHdlIGhhZCBhIHJ1biB0aGF0 IG5ldmVyIGJyb2tlLi4uICovCisjaWZkZWYgQ09NTUVOVAorICAgIGlmIChvZGRtYXggPT0gMCkg eworCW9kZG1heCA9IG9kZHJ1bjsKKwlvZGRtYXhieXRlID0gb2RkYnl0ZTsKKyAgICB9CisgICAg aWYgKGV2ZW5tYXggPT0gMCkgeworCWV2ZW5tYXggPSBldmVucnVuOworCWV2ZW5tYXhieXRlID0g ZXZlbmJ5dGU7CisgICAgfQorI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICBpZiAocnVubWF4ID09 IDApIHsKKwlydW5tYXggPSBydW56ZXJvOworICAgIH0KKyNlbmRpZiAvKiBFVkVOTUFYICovCisK KyNpZmRlZiBVTklDT0RFCisgICAgaWYgKGJ5dGVzID4gMTAwKQkJCS8qIEJ5dGVzIGlzIG5vdCAw ICovCisgICAgICBwY3R6ZXJvID0gKGV2ZW56ZXJvICsgb2RkemVybykgLyAoYnl0ZXMgLyAxMDAp OworICAgIGVsc2UKKyAgICAgIHBjdHplcm8gPSAoKGV2ZW56ZXJvICsgb2RkemVybykgKiAxMDAp IC8gYnl0ZXM7CisjZW5kaWYgLyogVU5JQ09ERSAqLworCisjaWZkZWYgREVCVUcKKyAgICBpZiAo ZGVibG9nKSB7CQkJLyogSWYgZGVidWdnaW5nLCBkdW1wIHN0YXRpc3RpY3MgKi8KKwlkZWJ1ZyhG MTAxLCJzY2FuZmlsZSBjMGNvbnRyb2xzICIsIiIsYzBjb250cm9scyk7CisJZGVidWcoRjEwMSwi c2NhbmZpbGUgYzBub25pc28gICAiLCIiLGMwbm9uaXNvKTsKKwlkZWJ1ZyhGMTAxLCJzY2FuZmls ZSBjMWNvbnRyb2xzICIsIiIsYzFjb250cm9scyk7CisJZGVidWcoRjEwMSwic2NhbmZpbGUgZWln aHRiaXQgICAiLCIiLGVpZ2h0Yml0KTsKKyNpZmRlZiBVTklDT0RFCisJZGVidWcoRjEwMSwic2Nh bmZpbGUgY3JsZiAgICAgICAiLCIiLGNybGYpOworCWRlYnVnKEYxMDEsInNjYW5maWxlIGxmbnVs ICAgICAgIiwiIixsZm51bCk7CisJZGVidWcoRjEwMSwic2NhbmZpbGUgbm90dXRmOCAgICAiLCIi LG5vdHV0ZjgpOworCWRlYnVnKEYxMDEsInNjYW5maWxlIGV2ZW56ZXJvICAgIiwiIixldmVuemVy byk7CisJZGVidWcoRjEwMSwic2NhbmZpbGUgb2RkemVybyAgICAiLCIiLG9kZHplcm8pOworCWRl YnVnKEYxMDEsInNjYW5maWxlIGV2ZW4vb2RkICAgIiwiIiwoZXZlbnplcm8gLyAob2RkemVybyAr IDEpKSk7CisJZGVidWcoRjEwMSwic2NhbmZpbGUgb2RkL2V2ZW4gICAiLCIiLChvZGR6ZXJvIC8g KGV2ZW56ZXJvICsgMSkpKTsKKwlkZWJ1ZyhGMTAxLCJzY2FuZmlsZSBwY3R6ZXJvICAgICIsIiIs cGN0emVybyk7CisjZW5kaWYgLyogVU5JQ09ERSAqLworI2lmZGVmIENPTU1FTlQKKyNpZmRlZiBF VkVOTUFYCisJZGVidWcoRjEwMSwic2NhbmZpbGUgb2RkbWF4ICAgICAiLCIiLG9kZG1heCk7CisJ ZGVidWcoRjEwMSwic2NhbmZpbGUgb2RkbWF4Ynl0ZSAiLCIiLG9kZG1heGJ5dGUpOworCWRlYnVn KEYxMDEsInNjYW5maWxlIGV2ZW5tYXggICAgIiwiIixldmVubWF4KTsKKwlkZWJ1ZyhGMTAxLCJz Y2FuZmlsZSBldmVubWF4Ynl0ZSIsIiIsZXZlbm1heGJ5dGUpOworI2VuZGlmIC8qIEVWRU5NQVgg Ki8KKyNlbmRpZiAvKiBDT01NRU5UICovCisJZGVidWcoRjEwMSwic2NhbmZpbGUgcnVubWF4ICAg ICAiLCIiLHJ1bm1heCk7CisgICAgfQorI2VuZGlmIC8qIERFQlVHICovCisKKyNpZmRlZiBVTklD T0RFCisgICAgeCA9IGVpZ2h0Yml0ID8gYnl0ZXMgLyAyMCA6IGJ5dGVzIC8gNDsgLyogRm9yIFVD Uy0yLi4uICovCisKKyAgICBpZiAocnVubWF4ID4gMikgewkJCS8qIEZpbGUgaGFzIHJ1biBvZiBt b3JlIHRoYW4gMiBOVUxzICovCisJZGVidWcoRjEwMCwic2NhbmZpbGUgQklOIHJ1bm1heCIsIiIs MCk7CisJcmMgPSBGVF9CSU47CQkJLyogc28gaXQgY2FuJ3QgYmUgYW55IGtpbmQgb2YgdGV4dC4g Ki8KKwlnb3RvIHhzY2FuZmlsZTsKKworICAgIH0gZWxzZSBpZiAocmMgPT0gRlRfVUNTMiB8fCAo cmMgPT0gRlRfVVRGOCAmJiBydW5tYXggPT0gMCkpIHsKKwlnb3RvIHhzY2FuZmlsZTsJCQkvKiBG aWxlIHN0YXJ0cyB3aXRoIGEgQk9NICovCisKKyAgICB9IGVsc2UgaWYgKGVpZ2h0Yml0ID4gMCAm JiAhbm90dXRmOCkgeyAvKiBGaWxlIGhhcyA4LWJpdCBkYXRhICovCisJaWYgKHJ1bm1heCA+IDAp IHsJCSAgIC8qIGFuZCBydW5zIG9mIE5VTHMgKi8KKwkgICAgZGVidWcoRjEwMCwic2NhbmZpbGUg QklOIChublVURjgpIHJ1bm1heCIsIiIsMCk7CisJICAgIHJjID0gRlRfQklOOwkJICAgLyogVVRG LTggZG9lc24ndCBoYXZlIE5VTHMgKi8KKwl9IGVsc2UgewkJCSAgIC8qIE5vIE5VTHMgKi8KKwkg ICAgZGVidWcoRjEwMCwic2NhbmZpbGUgVVRGOCAobm5VVEY4ICsgcnVubWF4ID09IDApIiwiIiww KTsKKwkgICAgcmMgPSBGVF9VVEY4OwkJICAgLyogYW5kIG5vdCBub3QgVVRGLTgsIHNvIGlzIFVU Ri04ICovCisJfQorCWdvdG8geHNjYW5maWxlOworICAgIH0KKy8qCisgIEZvciBVQ1MtMiBkZXRl Y3Rpb24sIHNlZSBpZiB0aGUgdGV4dCBjb250YWlucyBsaW5lcyBkZWxpbWl0ZWQgYnkKKyAgQVND SUkgY29udHJvbHMgYW5kIGNvbnRhaW5pbmcgc3BhY2VzLCBBU0NJSSBkaWdpdHMsIG9yIG90aGVy IEFTQ0lJCisgIGNoYXJhY3RlcnMsIHRodXMgZm9yY2luZyB0aGUgcHJlc2VuY2Ugb2YgYSBjZXJ0 YWluIHBlcmNlbnRhZ2Ugb2YgemVybyBieXRlcy4KKyAgRm9yIHRoaXMgcHVycG9zZSByZXF1aXJl IDIwJSB6ZXJvIGJ5dGVzLCB3aXRoIGF0IGxlYXN0IHNpeCB0aW1lcyBhcyBtYW55CisgIGluIGV2 ZW4gKG9kZCkgcG9zaXRpb25zIGFzIGluIG9kZCAoZXZlbikgcG9zaXRpb25zLgorKi8KKyAgICBp ZiAoKGV2ZW56ZXJvID49IHggJiYgb2RkemVybyA9PSAwKSB8fAorCSgoKChldmVuemVybyAvIChv ZGR6ZXJvICsgMSkpID4gNikgJiYgKHBjdHplcm8gPiAyMCkpICYmCisJKGNybGYgPT0gMCkgJiYK KwkobGZudWwgPiAxKSkKKwkpIHsKKwkgICAgZGVidWcoRjEwMCwic2NhbmZpbGUgVUNTMiBub0JP TSBCRSAoZXZlbi9vZGR6ZXJvKSIsIiIsMCk7CisJcmMgPSBGVF9VQ1MyOworCXZhbCA9IDA7Cisg ICAgfSBlbHNlIGlmICgoZXZlbnplcm8gPT0gMCAmJiBvZGR6ZXJvID49IHgpIHx8CisJICAgICAg ICgoKChvZGR6ZXJvIC8gKGV2ZW56ZXJvICsgMSkpID4gNikgJiYgKHBjdHplcm8gPiAyMCkpICYm CisJICAgICAgIChjcmxmID09IDApICYmCisJICAgICAgIChsZm51bCA+IDEpKQorCSAgICAgICAp IHsKKwlkZWJ1ZyhGMTAwLCJzY2FuZmlsZSBVQ1MyIG5vQk9NIExFIChldmVuL29kZHplcm8pIiwi IiwwKTsKKwlyYyA9IEZUX1VDUzI7CisJdmFsID0gMTsKKworI2lmZGVmIENPTU1FTlQKKyNpZmRl ZiBFVkVOTUFYCisvKgorICBJZiB0aGUgdGVzdHMgYWJvdmUgZmFpbCwgd2Ugc3RpbGwgbWlnaHQg aGF2ZSBVQ1MtMiBpZiB0aGVyZSBhcmUgc2lnbmlmaWNhbnQKKyAgcnVucyBvZiBpZGVudGljYWwg Ynl0ZXMgaW4gYWx0ZXJuYXRpbmcgcG9zaXRpb25zLCBidXQgb25seSBpZiBpdCBhbHNvIGhhcwor ICB1bnVzdWFsIEMwIGNvbnRyb2xzIChvdGhlcndpc2Ugd2UnZCBwaWNrIHVwIGhleCBmaWxlcyBo ZXJlKS4gIE5PVEU6IFdlCisgIGRvbid0IGFjdHVhbGx5IGRvIHRoaXMgLS0gRVZFTk1BWCBpcyBu b3QgZGVmaW5lZCAoc2VlIGNvbW1lbnRzIGFib3ZlIGF0CisgIGZpcnN0IG9jY3VycmVuY2Ugb2Yg RVZFTk1BWCkuCisqLworICAgIH0gZWxzZSBpZiAoYzBub25pc28gJiYgZXZlbm1heCA+IGJ5dGVz IC8gNCkgeworCWRlYnVnKEYxMDAsInNjYW5maWxlIFVDUzIgQkUgKGV2ZW5tYXgpIiwiIiwwKTsK KwlyYyA9IEZUX1VDUzI7CisJdmFsID0gMDsKKyAgICB9IGVsc2UgaWYgKGMwbm9uaXNvICYmIG9k ZG1heCA+IGJ5dGVzIC8gNCkgeworCWRlYnVnKEYxMDAsInNjYW5maWxlIFVDUzIgTEUgKGV2ZW5t YXgpIiwiIiwwKTsKKwlyYyA9IEZUX1VDUzI7CisJdmFsID0gMTsKKyNlbmRpZiAvKiBFVkVOTUFY ICovCisjZW5kaWYgLyogQ09NTUVOVCAqLworCisgICAgfQorLyoKKyAgSXQgc2VlbXMgdG8gYmUg VUNTLTIgYnV0IGxldCdzIGJlIG1vcmUgY2VydGFpbiBzaW5jZSB0aGVyZSBpcyBubyBCT00uLi4K KyAgSWYgdGhlIG51bWJlciBvZiA3LSBhbmQgOC1iaXQgY2hhcmFjdGVycyBpcyBhcHByb3hpbWF0 ZWx5IGVxdWFsLCBpdCBtaWdodAorICBiZSBhIGNvbXByZXNzZWQgZmlsZS4gIEluIHRoaXMgY2Fz ZSB3ZSBkZWNpZGUgYmFzZWQgb24gdGhlIG5hbWUuCisqLworICAgIGlmIChyYyA9PSBGVF9VQ1My KSB7CisJaWYgKGVpZ2h0Yml0ID4gMCkgeworCSAgICBpbnQgaiwgazsKKwkgICAgaiA9IChjMWNv bnRyb2xzICogMTAwKSAvIChjMGNvbnRyb2xzICsgMSk7CisJICAgIGRlYnVnKEYxMDEsInNjYW5m aWxlIGMxL2MwICAgICAgIiwiIixqKTsKKwkgICAgayA9IChieXRlcyAqIDEwMCkgLyBlaWdodGJp dDsKKwkgICAgZGVidWcoRjEwMSwic2NhbmZpbGUgcGN0IDhiaXQgICAiLCIiLGspOworCSAgICBp ZiAoayA+IDQwICYmIGsgPCA2MCAmJiBqID4gNjApIHsKKwkJaWYgKGNrbWF0Y2goInsqLlosKi5n eiwqLnppcCwqLlpJUH0iLG5hbWUsMSwxKSkgeworCQkgICAgZGVidWcoRjExMCwic2NhbmZpbGUg OC1iaXQgQklOIGNvbXByZXNzZWQiLG5hbWUsMCk7CisJCSAgICByYyA9IEZUX0JJTjsKKwkJICAg IGdvdG8geHNjYW5maWxlOworCQl9CisJICAgIH0KKwl9CisJLyogU21hbGwgZmlsZSAtIG5vdCBl bm91Z2ggZXZpZGVuY2UgdW5sZXNzIC4uLiAqLworCisJaWYgKGJ5dGVzIDwgMTAwKSB7CisJICAg IGlmIChvZGR6ZXJvICE9IDAgJiYgZXZlbnplcm8gIT0gMCkgeworCQlkZWJ1ZyhGMTAwLCJzY2Fu ZmlsZSBzbWFsbCBVQ1MyIGRvdWJ0ZnVsIiwiIiwwKTsKKwkJcmMgPSBGVF9CSU47CisJCWdvdG8g eHNjYW5maWxlOworCSAgICB9IGVsc2UgaWYgKG9kZHplcm8gPT0gMCAmJiBldmVuemVybyA9PSAw KSB7CisJCXJjID0gZWlnaHRiaXQgPyBGVF84QklUIDogRlRfN0JJVDsKKwkgICAgfQorCX0KKwln b3RvIHhzY2FuZmlsZTsJCQkvKiBTZWVtcyB0byBiZSBVQ1MtMiAqLworICAgIH0KKworLyogSWYg bm9uZSBvZiB0aGUgYWJvdmUsIGl0J3MgcHJvYmFibHkgbm90IFVuaWNvZGUuICAqLworCisgICAg aWYgKCFlaWdodGJpdCkgewkJCS8qIEl0J3MgNy1iaXQgKi8KKwlpZiAoYzBjb250cm9scykgewkJ LyogVGhpcyB3b3VsZCBiZSBzdHJhbmdlICovCisJICAgIGlmICgoYzBub25pc28gPiAwKSAmJiAo dHh0Y3ogPT0gMCkpIHsKKwkJZGVidWcoRjEwMCwic2NhbmZpbGUgNy1iaXQgQklOIChjMGNvbmlz bykiLCIiLDApOworCQlyYyA9IEZUX0JJTjsKKwkgICAgfSBlbHNlIHsKKwkJZGVidWcoRjEwMCwi c2NhbmZpbGUgNy1iaXQgSVNPMjAyMiBURVhUIChubyBjMG5vbmlzbykiLCIiLDApOworCQlyYyA9 IEZUXzdCSVQ7CisJICAgIH0KKwl9IGVsc2UgewkJCS8qIDctYml0IHRleHQgKi8KKwkgICAgZGVi dWcoRjEwMCwic2NhbmZpbGUgNy1iaXQgVEVYVCAobm8gYzBjb250cm9scykiLCIiLDApOworCSAg ICByYyA9IEZUXzdCSVQ7CisJfQorICAgIH0gZWxzZSBpZiAoIWMwbm9uaXNvIHx8IHR4dGN6KSB7 CS8qIDgtYml0IHRleHQgKi8KKwlkZWJ1ZyhGMTAwLCJzY2FuZmlsZSA4LWJpdCBURVhUIChubyBj MG5vbmlzbykiLCIiLDApOworCXJjID0gRlRfOEJJVDsKKwl2YWwgPSBjMWNvbnRyb2xzID8gMSA6 IDA7CisgICAgfSBlbHNlIHsJCQkJLyogOC1iaXQgYmluYXJ5ICovCisJZGVidWcoRjEwMCwic2Nh bmZpbGUgOC1iaXQgQklOIChjMG5vbmlzbykiLCIiLDApOworCXJjID0gRlRfQklOOworICAgIH0K KworI2Vsc2UgIC8qICFVTklDT0RFICovCisKKyAgICBpZiAoYzBub25pc28pIHsKKwlkZWJ1ZyhG MTAwLCJzY2FuZmlsZSA4LWJpdCBCSU4gKGMwbm9uaXNvKSIsIiIsMCk7CisJcmMgPSBGVF9CSU47 CisgICAgfSBlbHNlIGlmIChlaWdodGJpdCkgeworCWRlYnVnKEYxMDAsInNjYW5maWxlIDgtYml0 IFRFWFQgKG5vIGMwbm9uaXNvKSIsIiIsMCk7CisJcmMgPSBGVF84QklUOworCXZhbCA9IGMxY29u dHJvbHMgPyAxIDogMDsKKyAgICB9IGVsc2UgeworCWRlYnVnKEYxMDAsInNjYW5maWxlIDctYml0 IFRFWFQgKG5vIGMwbm9uaXNvKSIsIiIsMCk7CisJcmMgPSBGVF83QklUOworICAgIH0KKworI2Vu ZGlmIC8qIFVOSUNPREUgKi8KKworICB4c2NhbmZpbGU6CisgICAgaWYgKGZsYWcpICpmbGFnID0g dmFsOworICAgIGRlYnVnKEYxMDEsInNjYW5maWxlIHJlc3VsdCAgICAgIiwiIixyYyk7CisgICAg cmV0dXJuKHJjKTsKK30KKworLyoKKyAgc2NhbnN0cmluZyAtIGxpa2Ugc2NhbiBmaWxlIGJ1dCBm b3IgYSBzdHJpbmcuCisgIFRoaXMgaXMganVzdCBhIHF1aWNrIGJ1dGNoZXJ5IG9mIHNjYW5maWxl IHdpdGhvdXQgdGhpbmtpbmcgdG9vIG11Y2guCisqLworaW50CitzY2Fuc3RyaW5nKHMpIGNoYXIg KiBzOyB7CisgICAgaW50IHgsIHZhbCA9IC0xLCBjb3VudCA9IDA7CQkvKiBXb3JrZXJzICovCisg ICAgaW50IHJjID0gLTE7CQkJLyogUmV0dXJuIGNvZGUgKi8KKyAgICBpbnQgcHYgPSAtMTsJCQkv KiBQYXR0ZXJuLW1hdGNoIHZhbHVlICovCisgICAgaW50IGJ5dGVzID0gMDsJCQkvKiBUb3RhbCBi eXRlIGNvdW50ICovCisjaWZkZWYgVU5JQ09ERQorICAgIHVuc2lnbmVkIGludCBjMCwgYzE7CQkv KiBGaXJzdCAyIGZpbGUgYnl0ZXMgKGZvciBCT00pICovCisjZW5kaWYgLyogVU5JQ09ERSAqLwor ICAgIGV4dGVybiBpbnQgcGlwZXNlbmQsIGZpbGVwZWVrOworCisgICAgcmVnaXN0ZXIgaW50IGk7 CQkJLyogTG9vcCBjb250cm9sICovCisgICAgaW50IHJlYWRzaXplID0gMDsJCQkvKiBIb3cgbXVj aCB0byByZWFkICovCisgICAgaW50IGVpZ2h0Yml0ID0gMDsJCQkvKiBOdW1iZXIgb2YgYnl0ZXMg d2l0aCA4dGggYml0IG9uICovCisgICAgaW50IGMwY29udHJvbHMgPSAwOwkJCS8qIEMwIG5vbi10 ZXh0IGNvbnRyb2wtY2hhciBjb3VudGVyICovCisgICAgaW50IGMwbm9uaXNvID0gMDsJCQkvKiBD MCBub24tSVNPIGNvbnRyb2wtY2hhciBjb3VudGVyICovCisgICAgaW50IGMxY29udHJvbHMgPSAw OwkJCS8qIEMxIGNvbnRyb2wtY2hhcmFjdGVyIGNvdW50ZXIgKi8KKyAgICB1bnNpZ25lZCBpbnQg YzsJCQkvKiBDdXJyZW50IGNoYXJhY3RlciAqLworICAgIGludCBydW5tYXggPSAwOwkJCS8qIExv bmdlc3QgcnVuIG9mIDAgYnl0ZXMgKi8KKyAgICBpbnQgcnVuemVybyA9IDA7CQkJLyogUnVuIG9m IDAgYnl0ZXMgKi8KKyAgICBpbnQgcGN0emVybyA9IDA7CQkJLyogUGVyY2VudGFnZSBvZiAwIGJ5 dGVzICovCisgICAgaW50IHR4dGN6ID0gMDsKKworI2lmZGVmIFVOSUNPREUKKyAgICBpbnQgbm90 dXRmOCA9IDA7CQkJLyogTm9uemVybyBpZiBkZWZpbml0ZWx5IG5vdCBVVEYtOCAqLworICAgIGlu dCB1dGY4c3RhdGUgPSAwOwkJCS8qIFVURi04IHJlY29nbml6ZXIgc3RhdGUgKi8KKyAgICBpbnQg b2RkemVybyA9IDA7CQkJLyogTnVtYmVyIG9mIDAgYnl0ZXMgaW4gb2RkIHBvc3Rpb25zICovCisg ICAgaW50IGV2ZW56ZXJvID0gMDsJCQkvKiBhbmQgaW4gZXZlbiBwb3NpdGlvbnMgKi8KKyAgICBp bnQgbGZudWwgPSAwOwkJCS8qIE51bWJlciBvZiA8TEY+PE5VTD4gc2VxdWVuY2VzICovCisgICAg aW50IGNybGYgPSAwOwkJCS8qIE51bWJlciBvZiA8Q1JMRj4gc2VxdWVuY2VzICovCisjZWxzZQor ICAgIGludCBub3R1dGY4ID0gMTsKKyNlbmRpZiAvKiBVTklDT0RFICovCisKKyAgICBjaGFyICog YnVmID0gczsKKyAgICBpZiAoIXMpIHMgPSAiIjsKKyAgICBjb3VudCA9IHN0cmxlbihzKTsKKwor I2lmZGVmIFVOSUNPREUKKyAgICBpZiAoYnl0ZXMgPT0gMCAmJiBjb3VudCA+IDEpIHsKKwlpbnQg aW5jbF9jbnQgPSAwOworCisJLyogRmlyc3QgbG9vayBmb3IgQk9NICovCisKKwljMCA9ICh1bnNp Z25lZCkoKHVuc2lnbmVkKWJ1ZlswXSYweEZGKTsgLyogRmlyc3QgZmlsZSBieXRlICovCisJYzEg PSAodW5zaWduZWQpKCh1bnNpZ25lZClidWZbMV0mMHhGRik7IC8qIFNlY29uZCBieXRlICovCisK KwlpZiAoYzAgPT0gMHhGRSAmJiBjMSA9PSAweEZGKSB7CS8qIFVDUy0yIEJFICovCisJICAgIHJj ID0gRlRfVUNTMjsKKwkgICAgdmFsID0gMDsKKwkgICAgZGVidWcoRjExMSwic2NhbnN0cmluZyBV Q1MyIEJPTSBCRSIsY2tpdG9hKHZhbCkscmMpOworCSAgICBpbmNsX2NudCsrOworCX0gZWxzZSBp ZiAoYzAgPT0gMHhGRiAmJiBjMSA9PSAweEZFKSB7IC8qIFVDUy0yIExFICovCisJICAgIHJjID0g RlRfVUNTMjsKKwkgICAgdmFsID0gMTsKKwkgICAgZGVidWcoRjExMSwic2NhbnN0cmluZyBVQ1My IEJPTSBMRSIsY2tpdG9hKHZhbCkscmMpOworCSAgICBpbmNsX2NudCsrOworCX0gZWxzZSBpZiAo Y291bnQgPiAyKSBpZiAoYzAgPT0gMHhFRiAmJiBjMSA9PSAweEJCICYmCisJCSAgICh1bnNpZ25l ZCkoKHVuc2lnbmVkKWJ1ZlsyXSYweEZGKSA9PSAweEJGKSB7CisJICAgIHJjID0gRlRfVVRGODsK KwkgICAgZGVidWcoRjExMSwic2NhbnN0cmluZyBVVEY4IEJPTSIsY2tpdG9hKHZhbCkscmMpOwor CSAgICBpbmNsX2NudCsrOworCX0KKwlpZiAoaW5jbF9jbnQpIHsJCS8qIEhhdmUgQk9NICovCisJ ICAgIGJ5dGVzICs9IGNvdW50OworCSAgICBnb3RvIHhzY2Fuc3RyaW5nOworCX0KKyAgICB9Cisj ZW5kaWYgLyogVU5JQ09ERSAqLworCisgICAgYnl0ZXMgKz0gY291bnQ7CQkJLyogQ291bnQgYnl0 ZXMgcmVhZCAqLworCisgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsJLyogRm9yIGVh Y2ggYnl0ZS4uLiAqLworCWMgPSAodW5zaWduZWQpYnVmW2ldOwkvKiBGb3IgZWFzZSBvZiByZWZl cmVuY2UgKi8KKwlpZiAoIWMpIHsJCQkvKiBaZXJvIGJ5dGU/ICovCisJICAgIGdvdG8geHNjYW5z dHJpbmc7CS8qIE51bGwgdGVybWluYXRlZCBzdHJpbmcgKi8KKwl9CisJaWYgKChjICYgMHg4MCkg PT0gMCkgewkvKiBXZSBoYXZlIGEgNy1iaXQgYnl0ZSAqLworI2lmZGVmIFVOSUNPREUKKwkgICAg aWYgKGkgPiAwICYmIGMgPT0gMTApIHsgLyogTGluZWZlZWQgKi8KKwkJaWYgKGJ1ZltpLTFdID09 IDApIGxmbnVsKys7IC8qIFByZWNlZGVkIGJ5IE5VTCAqLworCQllbHNlIGlmIChidWZbaS0xXSA9 PSAxMykgY3JsZisrOyAvKiBvciBieSBDUi4uLiAqLworCSAgICB9CisjZW5kaWYgLyogVU5JQ09E RSAqLworCSAgICBpZiAoYyA8ICcgJykgewkJLyogQ2hlY2sgZm9yIENPIGNvbnRyb2xzICovCisJ CWlmIChjICE9IExGICYmIGMgIT0gQ1IgJiYgYyAhPSBIVCAmJiBjICE9IEZGKSB7CisJCSAgICBj MGNvbnRyb2xzKys7CisJCSAgICBpZiAoYyAhPSBFU0MgJiYgYyAhPSBTTyAmJiBjICE9IFNJKQor CQkgICAgICBjMG5vbmlzbysrOworCQl9CisJCWlmICgoYyA9PSAnXDAzMicpCS8qIEN0cmwtWiAq LworCQkgICAgKSB7CisJCSAgICBjMGNvbnRyb2xzLS07CisJCSAgICBjMG5vbmlzby0tOworCQl9 CisJICAgIH0KKyNpZmRlZiBVTklDT0RFCisJICAgIGlmICghbm90dXRmOCAmJiB1dGY4c3RhdGUp IHsgLyogSW4gVVRGLTggc2VxdWVuY2U/ICovCisJCXV0ZjhzdGF0ZSA9IDA7CisJCWRlYnVnKEYw MDAsInNjYW5zdHJpbmciLCI3LWJpdCBieXRlIGluIFVURjggc2VxdWVuY2UiLGMpOworCQlub3R1 dGY4Kys7CQkvKiBUaGVuIGl0J3Mgbm90IFVURi04ICovCisJCWNvbnRpbnVlOworCSAgICB9Cisj ZW5kaWYgLyogVU5JQ09ERSAqLworCX0gZWxzZSB7CQkJLyogV2UgaGF2ZSBhbiA4LWJpdCBieXRl ICovCisJICAgIGVpZ2h0Yml0Kys7CQkvKiBDb3VudCBpdCAqLworCSAgICBpZiAoYyA+PSAweDgw ICYmIGMgPCAweEEwKSAvKiBDaGVjayBmb3IgQzEgY29udHJvbHMgKi8KKwkgICAgICBjMWNvbnRy b2xzKys7CisjaWZkZWYgVU5JQ09ERQorCSAgICBpZiAoIW5vdHV0ZjgpIHsJCS8qIElmIGl0IG1p Z2h0IHN0aWxsIGJlIFVURjguLi4gKi8KKwkJc3dpdGNoICh1dGY4c3RhdGUpIHsgLyogRW50ZXIg dGhlIFVURi04IHN0YXRlIG1hY2hpbmUgKi8KKwkJICBjYXNlIDA6CQkgLyogRmlyc3QgYnl0ZS4u LiAqLworCQkgICAgaWYgKChjICYgMHhFMCkgPT0gMHhDMCkgeyAvKiBUZWxscyBudW1iZXIgb2Yg Ki8KKwkJCXV0ZjhzdGF0ZSA9IDE7ICAgICAgICAvKiBzdWJzZXF1ZW50IGJ5dGVzICovCisJCSAg ICB9IGVsc2UgaWYgKChjICYgMHhGMCkgPT0gMHhFMCkgeworCQkJdXRmOHN0YXRlID0gMjsKKwkJ ICAgIH0gZWxzZSBpZiAoKGMgJiAweEY4KSA9PSAweEYwKSB7CisJCQl1dGY4c3RhdGUgPSAzOwor CQkgICAgfSBlbHNlIHsKKwkJCW5vdHV0ZjgrKzsKKwkJICAgIH0KKwkJICAgIGJyZWFrOworCQkg IGNhc2UgMToJCS8qIFN1YnNlcXVlbnQgYnl0ZSAqLworCQkgIGNhc2UgMjoKKwkJICBjYXNlIDM6 CisJCSAgICBpZiAoKGMgJiAweEMwKSAhPSAweDgwKSB7IC8qIE11c3Qgc3RhcnQgd2l0aCAxMCAq LworCQkJZGVidWcoRjAwMCwic2NhbnN0cmluZyIsCisJCQkgICAgICAiYmFkIGJ5dGUgaW4gVVRG OCBzZXF1ZW5jZSIsYyk7CisJCQlub3R1dGY4Kys7CisJCQlicmVhazsKKwkJICAgIH0KKwkJICAg IHV0ZjhzdGF0ZS0tOwkvKiBHb29kLCBvbmUgbGVzcyBpbiB0aGlzIHNlcXVlbmNlICovCisJCSAg ICBicmVhazsKKwkJICBkZWZhdWx0OgkJLyogU2hvdWxkbid0IGhhcHBlbiAqLworCQkgICAgZGVi dWcoRjExMSwic2NhbnN0cmluZyIsImJhZCBVVEY4IHN0YXRlIix1dGY4c3RhdGUpOworCQkgICAg bm90dXRmOCsrOworCQl9CisJICAgIH0KKyNlbmRpZiAvKiBVTklDT0RFICovCisJfQorICAgIH0K KyAgICBpZiAoYnl0ZXMgPT0gMCkJCQkvKiBJZiBub3RoaW5nIHdhcyByZWFkICovCisgICAgICBy ZXR1cm4oLTEpOwkJCS8qIHdlJ3JlIGRvbmUuICovCisKKyNpZmRlZiBVTklDT0RFCisgICAgaWYg KGJ5dGVzID4gMTAwKQkJCS8qIEJ5dGVzIGlzIG5vdCAwICovCisgICAgICBwY3R6ZXJvID0gKGV2 ZW56ZXJvICsgb2RkemVybykgLyAoYnl0ZXMgLyAxMDApOworICAgIGVsc2UKKyAgICAgIHBjdHpl cm8gPSAoKGV2ZW56ZXJvICsgb2RkemVybykgKiAxMDApIC8gYnl0ZXM7CisjZW5kaWYgLyogVU5J Q09ERSAqLworCisjaWZkZWYgVU5JQ09ERQorICAgIHggPSBlaWdodGJpdCA/IGJ5dGVzIC8gMjAg OiBieXRlcyAvIDQ7IC8qIEZvciBVQ1MtMi4uLiAqLworCisgICAgaWYgKHJ1bm1heCA+IDIpIHsJ CQkvKiBGaWxlIGhhcyBydW4gb2YgbW9yZSB0aGFuIDIgTlVMcyAqLworCWRlYnVnKEYxMDAsInNj YW5zdHJpbmcgQklOIHJ1bm1heCIsIiIsMCk7CisJcmMgPSBGVF9CSU47CQkJLyogc28gaXQgY2Fu J3QgYmUgYW55IGtpbmQgb2YgdGV4dC4gKi8KKwlnb3RvIHhzY2Fuc3RyaW5nOworCisgICAgfSBl bHNlIGlmIChyYyA9PSBGVF9VQ1MyIHx8IChyYyA9PSBGVF9VVEY4ICYmIHJ1bm1heCA9PSAwKSkg eworCWdvdG8geHNjYW5zdHJpbmc7CQkJLyogRmlsZSBzdGFydHMgd2l0aCBhIEJPTSAqLworCisg ICAgfSBlbHNlIGlmIChlaWdodGJpdCA+IDAgJiYgIW5vdHV0ZjgpIHsgLyogRmlsZSBoYXMgOC1i aXQgZGF0YSAqLworCWlmIChydW5tYXggPiAwKSB7CQkgICAvKiBhbmQgcnVucyBvZiBOVUxzICov CisJICAgIGRlYnVnKEYxMDAsInNjYW5zdHJpbmcgQklOIChublVURjgpIHJ1bm1heCIsIiIsMCk7 CisJICAgIHJjID0gRlRfQklOOwkJICAgLyogVVRGLTggZG9lc24ndCBoYXZlIE5VTHMgKi8KKwl9 IGVsc2UgewkJCSAgIC8qIE5vIE5VTHMgKi8KKwkgICAgZGVidWcoRjEwMCwic2NhbnN0cmluZyBV VEY4IChublVURjggKyBydW5tYXggPT0gMCkiLCIiLDApOworCSAgICByYyA9IEZUX1VURjg7CQkg ICAvKiBhbmQgbm90IG5vdCBVVEYtOCwgc28gaXMgVVRGLTggKi8KKwl9CisJZ290byB4c2NhbnN0 cmluZzsKKyAgICB9CisvKgorICBJdCBzZWVtcyB0byBiZSBVQ1MtMiBidXQgbGV0J3MgYmUgbW9y ZSBjZXJ0YWluIHNpbmNlIHRoZXJlIGlzIG5vIEJPTS4uLgorICBJZiB0aGUgbnVtYmVyIG9mIDct IGFuZCA4LWJpdCBjaGFyYWN0ZXJzIGlzIGFwcHJveGltYXRlbHkgZXF1YWwsIGl0IG1pZ2h0Cisg IGJlIGEgY29tcHJlc3NlZCBmaWxlLiAgSW4gdGhpcyBjYXNlIHdlIGRlY2lkZSBiYXNlZCBvbiB0 aGUgbmFtZS4KKyovCisgICAgaWYgKHJjID09IEZUX1VDUzIpIHsKKwlpZiAoYnl0ZXMgPCAxMDAp IHsKKwkgICAgaWYgKG9kZHplcm8gIT0gMCAmJiBldmVuemVybyAhPSAwKSB7CisJCWRlYnVnKEYx MDAsInNjYW5zdHJpbmcgc21hbGwgVUNTMiBkb3VidGZ1bCIsIiIsMCk7CisJCXJjID0gRlRfQklO OworCQlnb3RvIHhzY2Fuc3RyaW5nOworCSAgICB9IGVsc2UgaWYgKG9kZHplcm8gPT0gMCAmJiBl dmVuemVybyA9PSAwKSB7CisJCXJjID0gZWlnaHRiaXQgPyBGVF84QklUIDogRlRfN0JJVDsKKwkg ICAgfQorCX0KKwlnb3RvIHhzY2Fuc3RyaW5nOwkJCS8qIFNlZW1zIHRvIGJlIFVDUy0yICovCisg ICAgfQorCisvKiBJZiBub25lIG9mIHRoZSBhYm92ZSwgaXQncyBwcm9iYWJseSBub3QgVW5pY29k ZS4gICovCisKKyAgICBpZiAoIWVpZ2h0Yml0KSB7CQkJLyogSXQncyA3LWJpdCAqLworCWlmIChj MGNvbnRyb2xzKSB7CQkvKiBUaGlzIHdvdWxkIGJlIHN0cmFuZ2UgKi8KKwkgICAgaWYgKChjMG5v bmlzbyA+IDApICYmICh0eHRjeiA9PSAwKSkgeworCQlkZWJ1ZyhGMTAwLCJzY2Fuc3RyaW5nIDct Yml0IEJJTiAoYzBjb25pc28pIiwiIiwwKTsKKwkJcmMgPSBGVF9CSU47CisJICAgIH0gZWxzZSB7 CisJCWRlYnVnKEYxMDAsInNjYW5zdHJpbmcgNy1iaXQgSVNPMjAyMiBURVhUIChubyBjMG5vbmlz bykiLCIiLDApOworCQlyYyA9IEZUXzdCSVQ7CisJICAgIH0KKwl9IGVsc2UgewkJCS8qIDctYml0 IHRleHQgKi8KKwkgICAgZGVidWcoRjEwMCwic2NhbnN0cmluZyA3LWJpdCBURVhUIChubyBjMGNv bnRyb2xzKSIsIiIsMCk7CisJICAgIHJjID0gRlRfN0JJVDsKKwl9CisgICAgfSBlbHNlIGlmICgh YzBub25pc28gfHwgdHh0Y3opIHsJLyogOC1iaXQgdGV4dCAqLworCWRlYnVnKEYxMDAsInNjYW5z dHJpbmcgOC1iaXQgVEVYVCAobm8gYzBub25pc28pIiwiIiwwKTsKKwlyYyA9IEZUXzhCSVQ7CisJ dmFsID0gYzFjb250cm9scyA/IDEgOiAwOworICAgIH0gZWxzZSB7CQkJCS8qIDgtYml0IGJpbmFy eSAqLworCWRlYnVnKEYxMDAsInNjYW5zdHJpbmcgOC1iaXQgQklOIChjMG5vbmlzbykiLCIiLDAp OworCXJjID0gRlRfQklOOworICAgIH0KKworI2Vsc2UgIC8qICFVTklDT0RFICovCisKKyAgICBp ZiAoYzBub25pc28pIHsKKwlkZWJ1ZyhGMTAwLCJzY2Fuc3RyaW5nIDgtYml0IEJJTiAoYzBub25p c28pIiwiIiwwKTsKKwlyYyA9IEZUX0JJTjsKKyAgICB9IGVsc2UgaWYgKGVpZ2h0Yml0KSB7CisJ ZGVidWcoRjEwMCwic2NhbnN0cmluZyA4LWJpdCBURVhUIChubyBjMG5vbmlzbykiLCIiLDApOwor CXJjID0gRlRfOEJJVDsKKwl2YWwgPSBjMWNvbnRyb2xzID8gMSA6IDA7CisgICAgfSBlbHNlIHsK KwlkZWJ1ZyhGMTAwLCJzY2Fuc3RyaW5nIDctYml0IFRFWFQgKG5vIGMwbm9uaXNvKSIsIiIsMCk7 CisJcmMgPSBGVF83QklUOworICAgIH0KKworI2VuZGlmIC8qIFVOSUNPREUgKi8KKworICB4c2Nh bnN0cmluZzoKKyAgICBkZWJ1ZyhGMTAxLCJzY2Fuc3RyaW5nIHJlc3VsdCAgICAgIiwiIixyYyk7 CisgICAgcmV0dXJuKHJjKTsKK30KKworCisKKy8qICBGIEkgTCBFIFMgRSBMIEUgQyBUICAtLSAg U2VsZWN0IHRoaXMgZmlsZSBmb3Igc2VuZGluZyAgKi8KKworaW50CisjaWZkZWYgQ0tfQU5TSUMK K2ZpbGVzZWxlY3QoCisgICAgY2hhciAqZiwgY2hhciAqc2EsIGNoYXIgKnNiLCBjaGFyICpzbmEs IGNoYXIgKnNuYiwKKyAgICBDS19PRkZfVCBtaW5zaXosIENLX09GRl9UIG1heHNpeiwKKyAgICBp bnQgbmJ1LCBpbnQgbnhsaXN0LAorICAgIGNoYXIgKiogeGxpc3QKKykKKyNlbHNlCitmaWxlc2Vs ZWN0KGYsc2Esc2Isc25hLHNuYixtaW5zaXosbWF4c2l6LG5idSxueGxpc3QseGxpc3QpCisgY2hh ciAqZiwqc2EsKnNiLCpzbmEsKnNuYjsgQ0tfT0ZGX1QgbWluc2l6LG1heHNpejsKKyBpbnQgbmJ1 LG54bGlzdDsgY2hhciAqKiB4bGlzdDsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogZmlsZXNl bGVjdCAqLyB7CisgICAgY2hhciAqZmRhdGU7CisgICAgaW50IG47CisgICAgQ0tfT0ZGX1QgejsK KworICAgIGRlYnVnKEYxMTEsImZpbGVzZWxlY3QgbWluc2l6Iixja2ZzdG9hKG1pbnNpeiksbWlu c2l6KTsKKyAgICBkZWJ1ZyhGMTExLCJmaWxlc2VsZWN0IG1heHNpeiIsY2tmc3RvYShtYXhzaXop LG1heHNpeik7CisgICAgZGVidWcoRjExMSwiZmlsZXNlbGVjdCAoQ0tfT0ZGX1QpLTEiLGNrZnN0 b2EoKENLX09GRl9UKS0xKSwoQ0tfT0ZGX1QpLTEpOworCisgICAgaWYgKCFzYSkgc2EgPSAiIjsK KyAgICBpZiAoIXNiKSBzYiA9ICIiOworICAgIGlmICghc25hKSBzbmEgPSAiIjsKKyAgICBpZiAo IXNuYikgc25iID0gIiI7CisKKyNpZmRlZiBDS1NZTUxJTksKKyNpZm5kZWYgTk9JQ1AKKyNpZm5k ZWYgTk9YRkVSCisgICAgaWYgKG5vbGlua3MpIHsKKwlDS19PRkZfVCB6ejsKKwl6eiA9IHpnZXRm cyhmKTsKKwlkZWJ1ZyhGMTExLCJmaWxlc2VsZWN0IE5PTElOS1MgemdldGZzIixmLHp6KTsKKwlp ZiAoenogPCAoQ0tfT0ZGX1QpMCkKKwkgIHJldHVybigwKTsKKwlkZWJ1ZyhGMTExLCJmaWxlc2Vs ZWN0IE5PTElOS1Mgemdmc19saW5rIixmLHpnZnNfbGluayk7CisJaWYgKHpnZnNfbGluaykKKwkg IHJldHVybigwKTsKKyAgICB9CisjZW5kaWYgLyogTk9YRkVSICovCisjZW5kaWYgLyogTk9JQ1Ag Ki8KKyNlbmRpZiAvKiBDS1NZTUxJTksgKi8KKworICAgIGRlYnVnKEYxMTAsImZpbGVzZWxlY3Qi LGYsMCk7CisgICAgaWYgKCpzYSB8fCAqc2IgfHwgKnNuYSB8fCAqc25iKSB7CisJZmRhdGUgPSB6 ZmNkYXQoZik7CQkvKiBEYXRlL3RpbWUgb2YgdGhpcyBmaWxlICovCisJaWYgKCFmZGF0ZSkgZmRh dGUgPSAiIjsKKwluID0gc3RybGVuKGZkYXRlKTsKKwlkZWJ1ZyhGMTExLCJmaWxlc2VsZWN0IGZk YXRlIixmZGF0ZSxuKTsKKwlpZiAobiAhPSAxNykJCQkvKiBGYWlsZWQgdG8gZ2V0IGl0ICovCisJ ICByZXR1cm4oMSk7CisJLyogL0FGVEVSOiAqLworCWlmIChzYVswXSAmJiAoc3RyY21wKGZkYXRl LChjaGFyICopc2EpIDw9IDApKSB7CisJICAgIGRlYnVnKEYxMTAsImZpbGVzZWxlY3Qgc2EiLHNh LDApOworCSAgICAvKiB0bG9nKEYxMTAsIlNraXBwaW5nICh0b28gb2xkKSIsZiwwKTsgKi8KKwkg ICAgcmV0dXJuKDApOworCX0KKwkvKiAvQkVGT1JFOiAqLworCWlmIChzYlswXSAmJiAoc3RyY21w KGZkYXRlLChjaGFyICopc2IpID49IDApKSB7CisJICAgIGRlYnVnKEYxMTAsImZpbGVzZWxlY3Qg c2IiLHNiLDApOworCSAgICAvKiB0bG9nKEYxMTAsIlNraXBwaW5nICh0b28gbmV3KSIsZiwwKTsg Ki8KKwkgICAgcmV0dXJuKDApOworCX0KKwkvKiAvTk9ULUFGVEVSOiAqLworCWlmIChzbmFbMF0g JiYgKHN0cmNtcChmZGF0ZSwoY2hhciAqKXNuYSkgPiAwKSkgeworCSAgICBkZWJ1ZyhGMTEwLCJm aWxlc2VsZWN0IHNuYSIsc25hLDApOworCSAgICAvKiB0bG9nKEYxMTAsIlNraXBwaW5nICh0b28g bmV3KSIsZiwwKTsgKi8KKwkgICAgcmV0dXJuKDApOworCX0KKwkvKiAvTk9ULUJFRk9SRTogKi8K KwlpZiAoc25iWzBdICYmIChzdHJjbXAoZmRhdGUsKGNoYXIgKilzbmIpIDwgMCkpIHsKKwkgICAg ZGVidWcoRjExMCwiZmlsZXNlbGVjdCBzbmIiLHNuYiwwKTsKKwkgICAgLyogdGxvZyhGMTEwLCJT a2lwcGluZyAodG9vIG9sZCkiLGYsMCk7ICovCisJICAgIHJldHVybigwKTsKKwl9CisgICAgfQor ICAgIC8qIFNtYWxsZXIgb3IgbGFyZ2VyICovCisgICAgaWYgKG1pbnNpeiA+IChDS19PRkZfVCkt MSB8fCBtYXhzaXogPiAoQ0tfT0ZGX1QpLTEpIHsKKwl6ID0gemNoa2koZik7CQkJLyogR2V0IHNp emUgKi8KKwlkZWJ1ZyhGMTAxLCJmaWxlc2VsZWN0IGZpbGVzaXplIiwiIix6KTsKKwlpZiAoeiA8 IChDS19PRkZfVCkwKQorCSAgcmV0dXJuKDEpOworCWlmICgobWluc2l6ID4gKENLX09GRl9UKS0x KSAmJiAoeiA+PSBtaW5zaXopKSB7CisJICAgIGRlYnVnKEYxMTEsImZpbGVzZWxlY3QgbWluc2l6 IHNraXBwaW5nIixmLG1pbnNpeik7CisJICAgIC8qIHRsb2coRjExMSwiU2tpcHBpbmcgKHRvbyBi aWcpIixmLHopOyAqLworCSAgICByZXR1cm4oMCk7CisJfQorCWlmICgobWF4c2l6ID4gKENLX09G Rl9UKS0xKSAmJiAoeiA8PSBtYXhzaXopKSB7CisJICAgIGRlYnVnKEYxMTEsImZpbGVzZWxlY3Qg bWF4c2l6IHNraXBwaW5nIixmLG1heHNpeik7CisJICAgIC8qIHRsb2coRjExMCwiU2tpcHBpbmcg KHRvbyBzbWFsbCkiLGYsMCk7ICovCisJICAgIHJldHVybigwKTsKKwl9CisgICAgfQorICAgIGlm IChuYnUpIHsJCQkJLyogU2tpcHBpbmcgYmFja3VwIGZpbGVzPyAqLworCWlmIChja21hdGNoKAor I2lmZGVmIENLUkVHRVgKKwkJICAgICIqLn5bMC05XSp+IgkvKiBOb3QgcGVyZmVjdCBidXQgY2xv c2UgZW5vdWdoLiAqLworI2Vsc2UKKwkJICAgICIqLn4qfiIJCS8qIExlc3MgY2xvc2UuICovCisj ZW5kaWYgLyogQ0tSRUdFWCAqLworCQkgICAgLGYsZmlsZWNhc2UsMSkpIHsKKwkgICAgZGVidWco RjExMCwiZmlsZXNlbGVjdCBza2lwcGluZyBiYWNrdXAiLGYsMCk7CisJICAgIHJldHVybigwKTsK Kwl9CisgICAgfQorICAgIGZvciAobiA9IDA7IHhsaXN0ICYmIG4gPCBueGxpc3Q7IG4rKykgewor CWlmICgheGxpc3Rbbl0pIHsKKwkgICAgZGVidWcoRjEwMSwiZmlsZXNlbGVjdCB4bGlzdCBlbXB0 eSIsMCxuKTsKKwkgICAgYnJlYWs7CisJfQorCWlmIChja21hdGNoKHhsaXN0W25dLGYsZmlsZWNh c2UsMSkpIHsKKwkgICAgZGVidWcoRjExMSwiZmlsZXNlbGVjdCB4bGlzdCIseGxpc3Rbbl0sbik7 CisJICAgIGRlYnVnKEYxMTAsImZpbGVzZWxlY3Qgc2tpcHBpbmciLGYsMCk7CisJICAgIHJldHVy bigwKTsKKwl9CisgICAgfQorICAgIGlmICh4ZmlsZXR5cGUgPiAtMSkgeworCW4gPSBzY2FuZmls ZShmLE5VTEwsbnNjYW5maWxlKTsKKwlpZiAobiA8IDApIHsKKwkgICAgbiA9IGJpbmFyeSA/IDEg OiAwOworCX0gZWxzZSB7CisJICAgIG4gPSAobiA9PSBGVF9CSU4pID8gMSA6IDA7CisJfQorCWlm IChuICE9IHhmaWxldHlwZSkKKwkgIHJldHVybigwKTsKKyAgICB9CisgICAgZGVidWcoRjExMCwi ZmlsZXNlbGVjdCBzZWxlY3RpbmciLGYsMCk7CisgICAgcmV0dXJuKDEpOworfQorCisKKyNpZmRl ZiBUQ1BTT0NLRVQKKyNpZmRlZiBOVAorZXh0ZXJuIGludCBXU0FTYWZlVG9DYW5jZWw7CisjZW5k aWYgLyogTlQgKi8KKyNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KKworVk9JRAorc2V0ZmxvdygpIHsK KyAgICBleHRlcm4gaW50IGZsb3csIGF1dG9mbG93LCBtZG10eXAsIGN4dHlwZSwgY3hmbG93W107 CisjaWZuZGVmIE5PRElBTAorICAgIGV4dGVybiBpbnQgZGlhbGNhcGFzLCBkaWFsZmM7CisgICAg ZXh0ZXJuIE1ETUlORiAqIG1vZGVtcFtdOworICAgIE1ETUlORiAqIHAgPSBOVUxMOworICAgIGxv bmcgYml0cyA9IDA7CisjZW5kaWYgLyogTk9ESUFMICovCisKKyAgICBkZWJ1ZyhGMTAxLCJzZXRm bG93IGF1dG9mbG93IiwiIixhdXRvZmxvdyk7CisKKy8qICNpZmRlZiBDT01NRU5UICovCisvKiBX SFkgV0FTIFRISVMgQ09NTUVOVEVEIE9VVD8gKi8KKyAgICBpZiAoIWF1dG9mbG93KSAgICAgICAg ICAgICAgICAgICAgICAvKiBPbmx5IGlmIEZMT1cgaXMgQVVUTyAqLworICAgICAgcmV0dXJuOwor LyogI2VuZGlmICovIC8qIENPTU1FTlQgKi8KKworICAgIGRlYnVnKEYxMDEsInNldGZsb3cgbG9j YWwiLCIiLGxvY2FsKTsKKyAgICBkZWJ1ZyhGMTAxLCJzZXRmbG93IG5ldHdvcmsiLCIiLG5ldHdv cmspOworICAgIGRlYnVnKEYxMDEsInNldGZsb3cgY3h0eXBlIiwiIixjeHR5cGUpOworCisjaWZk ZWYgVE5fQ09NUE9SVAorICAgIGlmIChuZXR3b3JrICYmIGlzdG5jb21wb3J0KCkpIHsKKwlmbG93 ID0gY3hmbG93W0NYVF9NT0RFTV07CisgICAgICAgIGRlYnVnKEYxMDEsInNldGZsb3cgVE5fQ09N UE9SVCBmbG93IiwiIixmbG93KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZiAvKiBU Tl9DT01QT1JUICovCisKKyAgICBpZiAobmV0d29yayB8fCAhbG9jYWwgfHwgY3h0eXBlID09IENY VF9ESVJFQ1QpIHsKKyAgICAgICAgZmxvdyA9IGN4Zmxvd1tjeHR5cGVdOyAgICAgICAgICAvKiBT ZXQgYXBwcm9wcmlhdGUgZmxvdyBjb250cm9sICovCisgICAgICAgIGRlYnVnKEYxMDEsInNldGZs b3cgZmxvdyIsIiIsZmxvdyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKGN4dHlw ZSAhPSBDWFRfTU9ERU0pICAgICAgICAgICAgLyogQ29ubmVjdGlvbiB0eXBlIHNob3VsZCBiZSBt b2RlbSAqLworICAgICAgcmV0dXJuOworCisjaWZuZGVmIE5PRElBTAorICAgIGJpdHMgPSBkaWFs Y2FwYXM7ICAgICAgICAgICAgICAgICAgIC8qIENhcGFiaWxpdHkgYml0cyAqLworICAgIGlmICgh Yml0cykgeyAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vIGJpdHM/ICovCisgICAgICAgIHAg PSBtb2RlbXBbbWRtdHlwXTsgICAgICAgICAgICAgLyogTG9vayBpbiBtb2RlbSBpbmZvIHN0cnVj dHVyZSAqLworICAgICAgICBpZiAocCkKKyAgICAgICAgICBiaXRzID0gcC0+Y2FwYXM7CisgICAg fQorICAgIGlmIChkaWFsZmMgPT0gRkxPX0FVVE8pIHsgICAgICAgICAgIC8qIElmIERJQUwgZmxv dyBpcyBBVVRPICovCisjaWZkZWYgQ0tfUlRTQ1RTICAgICAgICAgICAgICAgICAgICAgICAgLyog SWYgd2UgY2FuIGRvIFJUUy9DVFMgZmxvdyBjb250cm9sICovCisgICAgICAgIGlmIChiaXRzICYg Q0tEX0hXKSAgICAgICAgICAgICAgLyogYW5kIG1vZGVtIGNhbiBkbyBpdCB0b28gKi8KKyAgICAg ICAgICBmbG93ID0gRkxPX1JUU0M7ICAgICAgICAgICAgICAvKiB0aGVuIHN3aXRjaCB0byBSVFMv Q1RTICovCisgICAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogb3RoZXJ3 aXNlICovCisgICAgICAgICAgZmxvdyA9IEZMT19YT05YOyAgICAgICAgICAgICAgLyogdXNlIFhv bi9Yb2ZmLiAqLworI2Vsc2UKKyNpZm5kZWYgTkVYVAorI2lmbmRlZiBJUklYCisgICAgICAgIGZs b3cgPSBGTE9fWE9OWDsgICAgICAgICAgICAgICAgLyogVXNlIFhvbi9Yb2ZmLiAqLworI2VuZGlm IC8qIElSSVggKi8KKyNlbmRpZiAvKiBORVhUICovCisjZW5kaWYgLyogQ0tfUlRTQ1RTICovCisg ICAgfQorI2VuZGlmIC8qIE5PRElBTCAqLworICAgIGRlYnVnKEYxMDEsInNldGZsb3cgbW9kZW0g ZmxvdyIsIiIsZmxvdyk7CisgICAgcmV0dXJuOworfQorCisjaWZuZGVmIE5PTE9DQUwKKyNpZmRl ZiBDS19UUklHR0VSCisKKy8qICBBIFUgVCBPIEUgWCBJIFQgQyBIIEsgIC0tICBDaGVjayBmb3Ig Q09OTkVDVC1tb2RlIHRyaWdnZXIgc3RyaW5nICAqLworLyoKKyAgUmV0dXJucyAtMSBpZiB0cmln Z2VyIG5vdCBmb3VuZCwgb3IgZWxzZSB0aGUgdHJpZ2dlciBpbmRleCwgMCBvciBncmVhdGVyLgor ICAoUmVwbGFjZSB3aXRoIGZhbmNpZXIgYW5kIG1vcmUgZWZmaWNpZW50IG1hdGNoZXIgbGF0ZXIu Li4pCisgIE5PVEU6IHRvIHByZXZlbnQgdW5uZWNlc3NhcnkgZnVuY3Rpb24gY2FsbCBvdmVyaGVh ZCwgY2FsbCB0aGlzIHdheToKKworICAgIHggPSB0dF90cmlnZ2VyWzBdID8gYXV0b2V4aXRjaGso YykgOiAtMTsKKworKi8KK2ludAorI2lmZGVmIENLX0FOU0lDCithdXRvZXhpdGNoayhDSEFSIGMp CisjZWxzZQorYXV0b2V4aXRjaGsoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCisv KiBhdXRvZXhpdGNoayAqLyB7CisgICAgZXh0ZXJuIENIQVIgKiB0dF90cm1hdGNoW107CisgICAg ZXh0ZXJuIGNoYXIgKiB0dF90cmlnZ2VyW107CisgICAgaW50IGk7CisgICAgZm9yIChpID0gMDsg aSA8IFRSSUdHRVJTOyBpKyspIHsKKyAgICAgICAgaWYgKCF0dF90cmlnZ2VyW2ldKSB7ICAgICAg ICAgICAvKiBObyBtb3JlIHRyaWdnZXJzIGluIGxpc3QgKi8KKyAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICB9IGVsc2UgaWYgKCp0dF90cmlnZ2VyW2ldKSB7CisgICAgICAgICAgICBpZiAoIXR0 X3RybWF0Y2hbaV0pICAgICAgICAgLyogSnVzdCBzdGFydGluZz8gKi8KKyAgICAgICAgICAgICAg dHRfdHJtYXRjaFtpXSA9IChDSEFSICopdHRfdHJpZ2dlcltpXTsgLyogU2V0IG1hdGNoIHBvaW50 ZXIgKi8KKyAgICAgICAgICAgIGlmIChjID09ICp0dF90cm1hdGNoW2ldKSB7ICAvKiBDb21wYXJl IHRoaXMgY2hhcmFjdGVyICovCisgICAgICAgICAgICAgICAgdHRfdHJtYXRjaFtpXSsrOyAgICAg ICAgLyogSXQgbWF0Y2hlcyAqLworICAgICAgICAgICAgICAgIGlmICghKnR0X3RybWF0Y2hbaV0p IHsgIC8qIEVuZCBvZiBtYXRjaCBzdHJpbmc/ICovCisgICAgICAgICAgICAgICAgICAgIHR0X3Ry bWF0Y2hbaV0gPSAoQ0hBUiAqKSB0dF90cmlnZ2VyW2ldOyAvKiBZZXMsIHJld2luZCwgKi8KKyAg ICAgICAgICAgICAgICAgICAgZGVidWcoRjEwMSwiYXV0b2V4aXRjaGsiLHR0X3RyaWdnZXJbaV0s aSk7IC8qIGxvZywgKi8KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuKGkpOyAgICAgICAgICAv KiBhbmQgcmV0dXJuIHN1Y2Nlc3MgKi8KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9 IGVsc2UgICAgICAgICAgICAgICAgICAgICAgLyogTm8gbWF0Y2ggKi8KKyAgICAgICAgICAgICAg dHRfdHJtYXRjaFtpXSA9IChDSEFSICopIHR0X3RyaWdnZXJbaV07IC8qIFJld2luZCBtYXRjaCBz dHJpbmcgKi8KKyAgICAgICAgfSAvKiBhbmQgZ28gb24gdGhlIG5leHQgbWF0Y2ggc3RyaW5nICov CisgICAgfQorICAgIHJldHVybigtMSk7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vIG1h dGNoIGZvdW5kICovCit9CisjZW5kaWYgLyogQ0tfVFJJR0dFUiAqLworCisjaWZuZGVmIE5PU0hP VworLyogIFMgSCBPIE0gRCBNICAtLSAgU2hvdyBtb2RlbSBzaWduYWxzICAqLworCitWT0lECitz aG9tZG0oKSB7CisvKgorICBOb3RlIHVzZSBvZiAiXHJcbiIgdG8gbWFrZSBzdXJlIHRoaXMgcmVw b3J0IHByaW50cyByaWdodCwgZXZlbiB3aGVuCisgIGNhbGxlZCBkdXJpbmcgQ09OTkVDVCBtb2Rl LgorKi8KKyAgICBpbnQgeTsKKyAgICB5ID0gdHRnbWRtKCk7CisgICAgc3dpdGNoICh5KSB7Cisg ICAgICBjYXNlIC0zOiBwcmludGYoCisgICAgICAgICAgICAgICAgICJNb2RlbSBzaWduYWxzIHVu YXZhaWxhYmxlIGluIHRoaXMgdmVyc2lvbiBvZiBLZXJtaXRcclxuIik7CisgICAgICAgICAgICAg ICBicmVhazsKKyAgICAgIGNhc2UgLTI6IHByaW50ZigiTm8gbW9kZW0gY29udHJvbCBmb3IgdGhp cyBkZXZpY2VcclxuIik7IGJyZWFrOworICAgICAgY2FzZSAtMTogcHJpbnRmKCJNb2RlbSBzaWdu YWxzIHVuYXZhaWxhYmxlXHJcbiIpOyBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisjaWZuZGVmIE1B QworICAgICAgICBwcmludGYoCisgICAgICAgICAgIiBDYXJyaWVyIERldGVjdCAgICAgIChDRCk6 ICAlc1xyXG4iLCh5ICYgQk1fRENEKSA/ICJPbiI6ICJPZmYiKTsKKyAgICAgICAgcHJpbnRmKAor ICAgICAgICAgICIgRGF0YXNldCBSZWFkeSAgICAgICAoRFNSKTogJXNcclxuIiwoeSAmIEJNX0RT UikgPyAiT24iOiAiT2ZmIik7CisjZW5kaWYgLyogTUFDICovCisgICAgICAgIHByaW50ZigKKyAg ICAgICAgICAiIENsZWFyIFRvIFNlbmQgICAgICAgKENUUyk6ICVzXHJcbiIsKHkgJiBCTV9DVFMp ID8gIk9uIjogIk9mZiIpOworI2lmbmRlZiBTVFJBVFVTCisjaWZuZGVmIE1BQworICAgICAgICBw cmludGYoCisgICAgICAgICAgIiBSaW5nIEluZGljYXRvciAgICAgIChSSSk6ICAlc1xyXG4iLCh5 ICYgQk1fUk5HKSA/ICJPbiI6ICJPZmYiKTsKKyNlbmRpZiAvKiBNQUMgKi8KKyAgICAgICAgcHJp bnRmKAorICAgICAgICAgICIgRGF0YSBUZXJtaW5hbCBSZWFkeSAoRFRSKTogJXNcclxuIiwKKyNp ZmRlZiBOVAorICAgICAgICAgICIodW5rbm93bikiCisjZWxzZSAvKiBOVCAqLworICAgICAgICAg ICh5ICYgQk1fRFRSKSA/ICJPbiI6ICJPZmYiCisjZW5kaWYgLyogTlQgKi8KKyAgICAgICAgICAp OworI2lmbmRlZiBNQUMKKyAgICAgICAgcHJpbnRmKAorICAgICAgICAgICIgUmVxdWVzdCBUbyBT ZW5kICAgICAoUlRTKTogJXNcclxuIiwKKyNpZmRlZiBOVAorICAgICAgICAgICIodW5rbm93biki CisjZWxzZSAvKiBOVCAqLworICAgICAgICAgICh5ICYgQk1fUlRTKSA/ICJPbiI6ICJPZmYiCisj ZW5kaWYgLyogTlQgKi8KKyAgICAgICAgICApOworI2VuZGlmIC8qIE1BQyAqLworI2VuZGlmIC8q IFNUUkFUVVMgKi8KKyAgICB9CisjaWZkZWYgQkVUQURFQlVHCisjaWZkZWYgQ0tfVEFQSQorICAg IGlmICh0dHRhcGkgJiYgIXRhcGlwYXNzKSB7CisgICAgICAgIExQREVWQ0ZHICAgICAgICBscERl dkNmZyA9IE5VTEw7CisgICAgICAgIExQQ09NTUNPTkZJRyAgICBscENvbW1Db25maWcgPSBOVUxM OworICAgICAgICBMUE1PREVNU0VUVElOR1MgbHBNb2RlbVNldHRpbmdzID0gTlVMTDsKKyAgICAg ICAgRENCICogICAgICAgICAgIGxwRENCID0gTlVMTDsKKworICAgICAgICBpZiAoY2t0YXBpR2V0 TW9kZW1TZXR0aW5ncygmbHBEZXZDZmcsJmxwTW9kZW1TZXR0aW5ncywKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICZscENvbW1Db25maWcsJmxwRENCKSkgeworICAgICAgICAg ICAgcHJpbnRmKCJcbiIpOworICAgICAgICAgICAgY2t0YXBpRGlzcGxheU1vZGVtU2V0dGluZ3Mo bHBEZXZDZmcsbHBNb2RlbVNldHRpbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbHBDb21tQ29uZmlnLGxwRENCKTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAv KiBDS19UQVBJICovCisjZW5kaWYgLyogQkVUQURFQlVHICovCit9CisjZW5kaWYgLyogTk9TSE9X ICovCisjZW5kaWYgLyogTk9MT0NBTCAqLworCisjaWZuZGVmIE5PWEZFUgorLyogIFMgRCBFIEIg VSAgLS0gUmVjb3JkIHNwYXIgcmVzdWx0cyBpbiBkZWJ1Z2dpbmcgbG9nICAqLworCitWT0lECitz ZGVidShsZW4pIGludCBsZW47IHsKKyAgICBkZWJ1ZyhGMTExLCJzcGFyOiBkYXRhIiwoY2hhciAq KSByZGF0YXAsbGVuKTsKKyAgICBkZWJ1ZyhGMTAxLCIgc3BzaXogIiwiIiwgc3BzaXopOworICAg IGRlYnVnKEYxMDEsIiB0aW1pbnQiLCIiLHRpbWludCk7CisgICAgZGVidWcoRjEwMSwiIG5wYWQg ICIsIiIsICBucGFkKTsKKyAgICBkZWJ1ZyhGMTAxLCIgcGFkY2ggIiwiIiwgcGFkY2gpOworICAg IGRlYnVnKEYxMDEsIiBzZW9sICAiLCIiLCAgc2VvbCk7CisgICAgZGVidWcoRjEwMSwiIGN0bHEg ICIsIiIsICBjdGxxKTsKKyAgICBkZWJ1ZyhGMTAxLCIgZWJxICAgIiwiIiwgICBlYnEpOworICAg IGRlYnVnKEYxMDEsIiBlYnFmbGciLCIiLGVicWZsZyk7CisgICAgZGVidWcoRjEwMSwiIGJjdHIg ICIsIiIsICBiY3RyKTsKKyAgICBkZWJ1ZyhGMTAxLCIgcnB0cSAgIiwiIiwgIHJwdHEpOworICAg IGRlYnVnKEYxMDEsIiBycHRmbGciLCIiLHJwdGZsZyk7CisgICAgZGVidWcoRjEwMSwiIGxzY2Fw dSIsIiIsbHNjYXB1KTsKKyAgICBkZWJ1ZyhGMTAxLCIgYXRjYXB1IiwiIixhdGNhcHUpOworICAg IGRlYnVnKEYxMDEsIiBscGNhcHUiLCIiLGxwY2FwdSk7CisgICAgZGVidWcoRjEwMSwiIHN3Y2Fw dSIsIiIsc3djYXB1KTsKKyAgICBkZWJ1ZyhGMTAxLCIgd3Nsb3RuIiwiIiwgd3Nsb3RuKTsKKyAg ICBkZWJ1ZyhGMTAxLCIgd2hhdHJ1IiwiIiwgd2hhdHJ1KTsKK30KKy8qICBSIEQgRSBCIFUgLS0g RGVidWdnaW5nIGRpc3BsYXkgb2YgcnBhcigpIHZhbHVlcyAgKi8KKworVk9JRAorcmRlYnUoZCxs ZW4pIENIQVIgKmQ7IGludCBsZW47IHsKKyAgICBkZWJ1ZyhGMTExLCJycGFyOiBkYXRhIixkLGxl bik7CisgICAgZGVidWcoRjEwMSwiIHJwc2l6ICIsIiIsIHh1bmNoYXIoZFswXSkpOworICAgIGRl YnVnKEYxMDEsIiBydGltbyAiLCIiLCBydGltbyk7CisgICAgZGVidWcoRjEwMSwiIG15cGFkbiIs IiIsbXlwYWRuKTsKKyAgICBkZWJ1ZyhGMTAxLCIgbXlwYWRjIiwiIixteXBhZGMpOworICAgIGRl YnVnKEYxMDEsIiBlb2wgICAiLCIiLCAgIGVvbCk7CisgICAgZGVidWcoRjEwMSwiIGN0bHEgICIs IiIsICBjdGxxKTsKKyAgICBkZWJ1ZyhGMTAxLCIgc3EgICAgIiwiIiwgICAgc3EpOworICAgIGRl YnVnKEYxMDEsIiBlYnEgICAiLCIiLCAgIGVicSk7CisgICAgZGVidWcoRjEwMSwiIGVicWZsZyIs IiIsZWJxZmxnKTsKKyAgICBkZWJ1ZyhGMTAxLCIgYmN0ciAgIiwiIiwgIGJjdHIpOworICAgIGRl YnVnKEYxMDEsIiBycHRxICAiLCIiLCAgZFs4XSk7CisgICAgZGVidWcoRjEwMSwiIHJwdGZsZyIs IiIscnB0ZmxnKTsKKyAgICBkZWJ1ZyhGMTAxLCIgY2FwYXMgIiwiIiwgY2FwYXMpOworICAgIGRl YnVnKEYxMDEsIiBiaXRzICAiLCIiLGRbY2FwYXNdKTsKKyAgICBkZWJ1ZyhGMTAxLCIgbHNjYXB1 IiwiIixsc2NhcHUpOworICAgIGRlYnVnKEYxMDEsIiBhdGNhcHUiLCIiLGF0Y2FwdSk7CisgICAg ZGVidWcoRjEwMSwiIGxwY2FwdSIsIiIsbHBjYXB1KTsKKyAgICBkZWJ1ZyhGMTAxLCIgc3djYXB1 IiwiIixzd2NhcHUpOworICAgIGRlYnVnKEYxMDEsIiB3c2xvdHIiLCIiLCB3c2xvdHIpOworICAg IGRlYnVnKEYxMDEsIiBycHNpeihleHRlbmRlZCkiLCIiLHJwc2l6KTsKK30KKworI2lmZGVmIENP TU1FTlQKKy8qICBDIEggSyBFIFIgUiAgLS0gIERlY2lkZSB3aGV0aGVyIHRvIGV4aXQgdXBvbiBh IHByb3RvY29sIGVycm9yICAqLworCitWT0lECitjaGtlcnIoKSB7CisgICAgaWYgKGJhY2tncmQg JiYgIXNlcnZlcikgZmF0YWwoIlByb3RvY29sIGVycm9yIik7Cit9CisjZW5kaWYgLyogQ09NTUVO VCAqLworI2VuZGlmIC8qIE5PWEZFUiAqLworCisvKiAgRiBBIFQgQSBMICAtLSAgRmF0YWwgZXJy b3IgbWVzc2FnZSAqLworCitWT0lECitmYXRhbChtc2cpIGNoYXIgKm1zZzsgeworICAgIGV4dGVy biBpbnQgaW5pdGZsZzsKKyAgICBzdGF0aWMgaW50IGluaXRpbmcgPSAwOworICAgIGlmICghbXNn KSBtc2cgPSAiIjsKKyAgICBkZWJ1ZyhGMTExLCJmYXRhbCIsbXNnLGluaXRmbGcpOworCisgICAg aWYgKCFpbml0ZmxnKSB7CQkJLyogSWYgY2FsbGVkIGZyb20gcHJlc2NhbiAqLworCWlmIChpbml0 aW5nKQkJCS8qIG9yIGNhbGxlZCBmcm9tIHN5c2luaXQoKSAqLworICAgICAgICAgIGV4aXQoMjUz KTsKKwlpbml0aW5nID0gMTsKKwlzeXNpbml0KCk7CisgICAgfQorCisgICAgZGVidWcoRjExMSwi ZmF0YWwiLG1zZyx4aXRzdGEpOworICAgIHRsb2coRjExMCwiRmF0YWw6Iixtc2csMEwpOworI2lm ZGVmIFZNUworICAgIGlmIChzdHJuY21wKG1zZywiJUNLRVJNSVQiLDgpKQorICAgICAgY29ub2wo IiVDS0VSTUlULUUtRkFUQUwsICIpOworICAgIGNvbm9sbChtc2cpOworI2Vsc2UgLyogIVZNUyAq LworICAgIGNvbm9sbChtc2cpOworI2VuZGlmIC8qIFZNUyAqLworI2lmZGVmIE9TMgorI2lmbmRl ZiBOT1hGRVIKKyAgICBpZiAoeGZyYmVsKSB7CisgICAgICAgIGJsZWVwKEJQX0ZBSUwpOworICAg ICAgICBzbGVlcCgxKTsKKyAgICAgICAgYmxlZXAoQlBfRkFJTCk7CisgICAgfQorI2VuZGlmIC8q IE5PWEZFUiAqLworCisjZW5kaWYgLyogT1MyICovCisgICAgZG9leGl0KEJBRF9FWElULHhpdHN0 YSB8IDEpOyAgICAgICAgLyogRXhpdCBpbmRpY2F0aW5nIGZhaWx1cmUgKi8KK30KKworI2lmbmRl ZiBOT1hGRVIKKy8qICBCIEwgRCBMIEUgTiAgLS0gIE1ha2UgbGVuZ3RoLWVuY29kZWQgY29weSBv ZiBzdHJpbmcgICovCisKK2NoYXIgKgorYmxkbGVuKHN0cixkZXN0KSBjaGFyICpzdHIsICpkZXN0 OyB7CisgICAgaW50IGxlbjsKKyAgICBsZW4gPSAoaW50KXN0cmxlbihzdHIpOworICAgIGlmIChs ZW4gPiA5NCkKKyAgICAgICpkZXN0ID0gU1A7CisgICAgZWxzZQorICAgICAgKmRlc3QgPSAoY2hh cikgdG9jaGFyKGxlbik7CisgICAgc3RyY3B5KGRlc3QrMSxzdHIpOwkJCS8qIENoZWNrZWQgYmVs b3cgaW4gc2V0Z2VuKCkgKi8KKyAgICByZXR1cm4oZGVzdCtsZW4rMSk7Cit9CisKKworLyogIFMg RSBUIEcgRSBOICAtLSAgQ29uc3RydWN0IGEgZ2VuZXJpYyBjb21tYW5kICAqLworLyoKKyAgQ2Fs bCB3aXRoIEdlbmVyaWMgY29tbWFuZCBjaGFyYWN0ZXIgZm9sbG93ZWQgYnkgdGhyZWUgc3RyaW5n IGFyZ3VtZW50cy4KKyAgVHJhaWxpbmcgc3RyaW5ncyBhcmUgYWxsb3dlZCB0byBiZSBlbXB0eSAo IiIpLiAgRWFjaCBzdHJpbmcgZXhjZXB0IHRoZSBsYXN0CisgIG5vbi1lbXB0eSBzdHJpbmcgbXVz dCBiZSBsZXNzIHRoYW4gOTUgY2hhcmFjdGVycyBsb25nLiAgVGhlIGZpbmFsIG5vbmVtcHR5Cisg IHN0cmluZyBpcyBhbGxvd2VkIHRvIGJlIGxvbmdlci4KKyovCitDSEFSCisjaWZkZWYgQ0tfQU5T SUMKK3NldGdlbihjaGFyIHR5cGUsIGNoYXIgKiBhcmcxLCBjaGFyICogYXJnMiwgY2hhciAqIGFy ZzMpCisjZWxzZQorc2V0Z2VuKHR5cGUsYXJnMSxhcmcyLGFyZzMpIGNoYXIgdHlwZSwgKmFyZzEs ICphcmcyLCAqYXJnMzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogc2V0Z2VuICovIHsKKyAg ICBjaGFyICp1cHN0ciwgKmNwOworI2lmZGVmIERZTkFNSUMKKyAgICBpZiAoIWNtZHN0cikKKyAg ICAgIGlmICghKGNtZHN0ciA9IG1hbGxvYyhNQVhTUCArIDEpKSkKKyAgICAgICAgZmF0YWwoInNl dGdlbjogY2FuJ3QgYWxsb2NhdGUgbWVtb3J5Iik7CisjZW5kaWYgLyogRFlOQU1JQyAqLworCisg ICAgY3AgPSBjbWRzdHI7CisgICAgKmNwKysgPSB0eXBlOworICAgICpjcCA9IE5VTDsKKyAgICBp ZiAoIWFyZzEpIGFyZzEgPSAiIjsKKyAgICBpZiAoIWFyZzIpIGFyZzIgPSAiIjsKKyAgICBpZiAo IWFyZzMpIGFyZzMgPSAiIjsKKyAgICBpZiAoKChpbnQpc3RybGVuKGFyZzEpKyhpbnQpc3RybGVu KGFyZzIpKyhpbnQpc3RybGVuKGFyZzMpKzQpIDwgTUFYU1ApIHsKKwlpZiAoKmFyZzEgIT0gTlVM KSB7CisJICAgIHVwc3RyID0gYmxkbGVuKGFyZzEsY3ApOworCSAgICBpZiAoKmFyZzIgIT0gTlVM KSB7CisJCXVwc3RyID0gYmxkbGVuKGFyZzIsdXBzdHIpOworCQlpZiAoKmFyZzMgIT0gTlVMKSBi bGRsZW4oYXJnMyx1cHN0cik7CisJICAgIH0KKwl9CisJY21hcmcgPSBjbWRzdHI7CisJZGVidWco RjExMCwic2V0Z2VuIixjbWFyZywwKTsKKwlyZXR1cm4oJ2cnKTsKKyAgICB9CisgICAgcmV0dXJu KCdFJyk7Cit9CisjZW5kaWYgLyogTk9YRkVSICovCisKKyNpZm5kZWYgTk9NU0VORAorc3RhdGlj IGNoYXIgKm1nYnVmcCA9IE5VTEw7CisKKy8qICBGIE4gUCBBIFIgUyBFICAtLSAgKi8KKworLyoK KyAgQXJndW1lbnQgaXMgYSBjaGFyYWN0ZXIgc3RyaW5nIGNvbnRhaW5pbmcgb25lIG9yIG1vcmUg ZmlsZXNwZWNzLgorICBUaGlzIGZ1bmN0aW9uIGJyZWFrcyB0aGUgc3RyaW5nIGFwYXJ0IGludG8g YW4gYXJyYXkgb2YgcG9pbnRlcnMsIG9uZQorICB0byBlYWNoIGZpbGVzcGVjLCBhbmQgcmV0dXJu cyB0aGUgbnVtYmVyIG9mIGZpbGVzcGVjcy4gIFVzZWQgYnkgc2VydmVyCisgIHdoZW4gaXQgcmVj ZWl2ZXMgYSBHRVQgY29tbWFuZCB0byBhbGxvdyBpdCB0byBwcm9jZXNzIG11bHRpcGxlIGZpbGUK KyAgc3BlY2lmaWNhdGlvbnMgaW4gb25lIHRyYW5zYWN0aW9uLiAgU2V0cyBjbWxpc3QgdG8gcG9p bnQgdG8gYSBsaXN0IG9mCisgIGZpbGUgcG9pbnRlcnMsIGV4YWN0bHkgYXMgaWYgdGhleSB3ZXJl IGNvbW1hbmQgbGluZSBhcmd1bWVudHMuCisKKyAgVGhpcyB2ZXJzaW9uIG9mIGZucGFyc2UgdHJl YXRzIHNwYWNlcyBhcyBmaWxlbmFtZSBzZXBhcmF0b3JzLiAgSWYgeW91cgorICBvcGVyYXRpbmcg c3lzdGVtIGFsbG93cyBzcGFjZXMgaW4gZmlsZW5hbWVzLCB5b3UnbGwgbmVlZCBhIGRpZmZlcmVu dAorICBzZXBhcmF0b3IuCisKKyAgVGhpcyB2ZXJzaW9uIG9mIGZucGFyc2UgbWFsbG9jcyBhIHN0 cmluZyBidWZmZXIgdG8gY29udGFpbiB0aGUgbmFtZXMuICBJdAorICBjYW5ub3QgYXNzdW1lIHRo YXQgdGhlIHN0cmluZyB0aGF0IGlzIHBvaW50ZWQgdG8gYnkgdGhlIGFyZ3VtZW50IGlzIHNhZmUu CisqLworaW50CitmbnBhcnNlKHN0cmluZykgY2hhciAqc3RyaW5nOyB7CisgICAgY2hhciAqcCwg KnMsICpxOworICAgIGludCByID0gMCwgeDsgICAgICAgICAgICAgICAgICAgICAgIC8qIFJldHVy biBjb2RlICovCisjaWZkZWYgUkVDVVJTSVZFCisgICAgZGVidWcoRjExMSwiZm5wYXJzZSIsc3Ry aW5nLHJlY3Vyc2l2ZSk7CisjZW5kaWYgLyogUkVDVVJTSVZFICovCisKKyAgICBpZiAobWdidWZw KSBmcmVlKG1nYnVmcCk7ICAgICAgICAgICAvKiBGcmVlIHRoaXMgZnJvbSBsYXN0IHRpbWUuICov CisgICAgbWdidWZwID0gbWFsbG9jKChpbnQpc3RybGVuKHN0cmluZykrMik7CisgICAgaWYgKCFt Z2J1ZnApIHsKKyAgICAgICAgZGVidWcoRjEwMCwiZm5wYXJzZSBtYWxsb2MgZXJyb3IiLCIiLDAp OworICAgICAgICByZXR1cm4oMCk7CisgICAgfQorI2lmbmRlZiBOT0lDUAorI2lmbmRlZiBOT1NQ TAorICAgIGNrc3RybmNweShmc3BlYyxzdHJpbmcsZnNwZWNsZW4pOyAgIC8qIE1ha2UgY29weSBm b3IgXHYoZmlsZXNwZWMpICovCisjZW5kaWYgLyogTk9TUEwgKi8KKyNlbmRpZiAvKiBOT0lDUCAq LworICAgIHMgPSBzdHJpbmc7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIElucHV0IHN0cmlu ZyAqLworICAgIHAgPSBxID0gbWdidWZwOyAgICAgICAgICAgICAgICAgICAgIC8qIFBvaW50IHRv IHRoZSBjb3B5ICovCisgICAgciA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog SW5pdGlhbGl6ZSBvdXIgcmV0dXJuIGNvZGUgKi8KKyAgICB3aGlsZSAoKnMgPT0gU1AgfHwgKnMg PT0gSFQpICAgICAgICAvKiBTa2lwIGxlYWRpbmcgc3BhY2VzIGFuZCB0YWJzICovCisgICAgICBz Kys7CisgICAgZm9yICh4ID0gc3RybGVuKHMpOyAgICAgICAgICAgICAgICAgLyogU3RyaXAgdHJh aWxpbmcgc3BhY2VzICovCisgICAgICAgICAoeCA+IDEpICYmIChzW3gtMV0gPT0gU1AgfHwgc1t4 LTFdID09IEhUKTsKKyAgICAgICAgIHgtLSkKKyAgICAgIHNbeC0xXSA9IE5VTDsKKyAgICB3aGls ZSAoMSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBMb29wIHRocm91Z2ggcmVzdCBvZiBz dHJpbmcgKi8KKyAgICAgICAgaWYgKCpzID09IENNRFEpIHsgICAgICAgICAgICAgICAvKiBCYWNr c2xhc2ggKHF1b3RlIGNoYXJhY3Rlcik/ICovCisgICAgICAgICAgICBpZiAoKHggPSB4eGVzYygm cykpID4gLTEpIHsgLyogR28gaW50ZXJwcmV0IGl0LiAqLworICAgICAgICAgICAgICAgICpxKysg PSAoY2hhcikgeDsgICAgICAgIC8qIE51bWVyaWMgYmFja3NsYXNoIGNvZGUsIG9rICovCisgICAg ICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgLyogSnVzdCBsZXQgaXQgcXVvdGUg bmV4dCBjaGFyICovCisgICAgICAgICAgICAgICAgcysrOyAgICAgICAgICAgICAgICAgICAgLyog Z2V0IHBhc3QgdGhlIGJhY2tzbGFzaCAqLworICAgICAgICAgICAgICAgICpxKysgPSAqcysrOyAg ICAgICAgICAgIC8qIGRlcG9zaXQgbmV4dCBjaGFyICovCisgICAgICAgICAgICB9CisgICAgICAg ICAgICBjb250aW51ZTsKKyAgICAgICAgfSBlbHNlIGlmICgqcyA9PSBTUCB8fCAqcyA9PSBOVUwp IHsgLyogVW5xdW90ZWQgc3BhY2Ugb3IgTlVMPyAqLworICAgICAgICAgICAgKnErKyA9IE5VTDsg ICAgICAgICAgICAgICAgIC8qIEVuZCBvZiBvdXRwdXQgZmlsZW5hbWUuICovCisgICAgICAgICAg ICBtc2ZpbGVzW3JdID0gcDsgICAgICAgICAgICAgLyogQWRkIHRoaXMgZmlsZW5hbWUgdG8gdGhl IGxpc3QgKi8KKyAgICAgICAgICAgIGRlYnVnKEYxMTEsImZucGFyc2UiLG1zZmlsZXNbcl0scik7 CisgICAgICAgICAgICByKys7ICAgICAgICAgICAgICAgICAgICAgICAgLyogQ291bnQgaXQgKi8K KyAgICAgICAgICAgIGlmICgqcyA9PSBOVUwpIGJyZWFrOyAgICAgICAvKiBFbmQgb2Ygc3RyaW5n PyAqLworICAgICAgICAgICAgd2hpbGUgKCpzID09IFNQKSBzKys7ICAgICAgIC8qIFNraXAgcmVw ZWF0ZWQgc3BhY2VzICovCisgICAgICAgICAgICBwID0gcTsgICAgICAgICAgICAgICAgICAgICAg LyogU3RhcnQgb2YgbmV4dCBuYW1lICovCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg fSBlbHNlICpxKysgPSAqczsgICAgICAgICAgICAgICAvKiBPdGhlcndpc2UgY29weSB0aGUgY2hh cmFjdGVyICovCisgICAgICAgIHMrKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTmV4 dCBpbnB1dCBjaGFyYWN0ZXIgKi8KKyAgICB9CisgICAgZGVidWcoRjEwMSwiZm5wYXJzZSByIiwi IixyKTsKKyAgICBtc2ZpbGVzW3JdID0gIiI7ICAgICAgICAgICAgICAgICAgICAvKiBQdXQgZW1w dHkgc3RyaW5nIGF0IGVuZCBvZiBsaXN0ICovCisgICAgY21saXN0ID0gbXNmaWxlczsKKyAgICBy ZXR1cm4ocik7Cit9CisjZW5kaWYgLyogTk9NU0VORCAqLworCitjaGFyICogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogZGJjaHIoKSBmb3IgREVCVUcgU0VTU0lPTiAqLworZGJj aHIoYykgaW50IGM7IHsKKyAgICBzdGF0aWMgY2hhciBzWzhdOworICAgIGNoYXIgKmNwID0gczsK KworICAgIGMgJj0gMHhmZjsKKyAgICBpZiAoYyAmIDB4ODApIHsgICAgICAgICAgICAgICAgICAg ICAvKiA4dGggYml0IG9uICovCisgICAgICAgICpjcCsrID0gJ34nOworICAgICAgICBjICY9IDB4 N2Y7CisgICAgfQorICAgIGlmIChjIDwgU1ApIHsgICAgICAgICAgICAgICAgICAgICAgIC8qIENv bnRyb2wgY2hhcmFjdGVyICovCisgICAgICAgICpjcCsrID0gJ14nOworICAgICAgICAqY3ArKyA9 IChjaGFyKSBjdGwoYyk7CisgICAgfSBlbHNlIGlmIChjID09IERFTCkgeworICAgICAgICAqY3Ar KyA9ICdeJzsKKyAgICAgICAgKmNwKysgPSAnPyc7CisgICAgfSBlbHNlIHsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogUHJpbnRpbmcgY2hhcmFjdGVyICovCisgICAgICAgICpjcCsrID0g KGNoYXIpIGM7CisgICAgfQorICAgICpjcCA9ICdcMCc7ICAgICAgICAgICAgICAgICAgICAgICAg IC8qIFRlcm1pbmF0ZSBzdHJpbmcgKi8KKyAgICBjcCA9IHM7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBSZXR1cm4gcG9pbnRlciB0byBpdCAqLworICAgIHJldHVybihjcCk7Cit9CisK Ky8qICBDIEsgSCBPIFMgVCAgLS0gIEdldCBuYW1lIG9mIGxvY2FsIGhvc3QgKHdoZXJlIEMtS2Vy bWl0IGlzIHJ1bm5pbmcpICAqLworCisvKgorICBDYWxsIHdpdGggcG9pbnRlciB0byBidWZmZXIg dG8gcHV0IGhvc3RuYW1lIGluLCBhbmQgbGVuZ3RoIG9mIGJ1ZmZlci4KKyAgQ29waWVzIGhvc3Ru YW1lIGludG8gYnVmZmVyIG9uIHN1Y2Nlc3MsIHB1dHMgbnVsbCBzdHJpbmcgaW4gYnVmZmVyIG9u CisgIGZhaWx1cmUuCisqLworI2lmZGVmIEJTRDQ0CisjZGVmaW5lIEJTRDQKKyN1bmRlZiBBVFRT VgorI2VuZGlmIC8qIEJTRDQ0ICovCisKKyNpZmRlZiBTVk9SUE9TSVgKKyNpZm5kZWYgQlNENDQK KyNpZm5kZWYgYXBvbGxvCisjaW5jbHVkZSA8c3lzL3V0c25hbWUuaD4KKyNlbmRpZiAvKiBhcG9s bG8gKi8KKyNlbmRpZiAvKiBCU0Q0NCAqLworI2Vsc2UKKyNpZmRlZiBCRUxMVjEwCisjaW5jbHVk ZSA8dXRzbmFtZS5oPgorI2VuZGlmIC8qIEJFTExWMTAgKi8KKyNlbmRpZiAvKiBTVk9SUE9TSVgq LworCisjaWZkZWYgQ0tTWVNMT0cKK2V4dGVybiBjaGFyIHVpZGJ1ZltdLCAqIGNsaWVudGhvc3Q7 CisjZW5kaWYgLyogQ0tTWVNMT0cgKi8KKworVk9JRAorY2tob3N0KHZ2YnVmLHZ2bGVuKSBjaGFy ICogdnZidWY7IGludCB2dmxlbjsgeworCisjaWZuZGVmIE5PUFVTSAorICAgIGV4dGVybiBpbnQg bm9wdXNoOworI2lmbmRlZiBOT1NFUlZFUgorICAgIGV4dGVybiBpbnQgZW5faG9zOworI2VuZGlm IC8qIE5PU0VSVkVSICovCisjZW5kaWYgLyogTk9QVVNIICovCisKKyNpZmRlZiBwZHAxMQorICAg ICp2dmJ1ZiA9IE5VTDsKKyNlbHNlICAvKiBFdmVyeXRoaW5nIGVsc2UgLSByZXN0IG9mIHRoaXMg cm91dGluZSAqLworCisgICAgY2hhciAqZzsKKyAgICBpbnQgaGF2ZWZ1bGwgPSAwOworI2lmZGVm IFZNUworICAgIGludCB4OworI2VuZGlmIC8qIFZNUyAqLworCisjaWZkZWYgU1ZPUlBPU0lYCisj aWZuZGVmIEJTRDQ0CisjaWZuZGVmIF8zODZCU0QKKyNpZm5kZWYgQVBPTExPU1IxMAorICAgIHN0 cnVjdCB1dHNuYW1lIGhuYW1lOworI2VuZGlmIC8qIEFQT0xMT1NSMTAgKi8KKyNlbmRpZiAvKiBf Mzg2QlNEICovCisjZW5kaWYgLyogQlNENDQgKi8KKyNlbmRpZiAvKiBTVk9SUE9TSVggKi8KKyNp ZmRlZiBkYXRhZ2VuZXJhbAorICAgIGludCBhYzAgPSAoY2hhciAqKSB2dmJ1ZiwgYWMxID0gLTEs IGFjMiA9IDA7CisjZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KKworI2lmbmRlZiBOT1BVU0gKKyAg ICBpZiAoZ2V0ZW52KCJDS19OT1BVU0giKSkgeyAgICAgICAgICAvKiBObyBzaGVsbCBhY2Nlc3Mg YWxsb3dlZCAqLworICAgICAgICBub3B1c2ggPSAxOyAgICAgICAgICAgICAgICAgICAgIC8qIG9u IHRoaXMgaG9zdC4uLiAqLworI2lmbmRlZiBOT1NFUlZFUgorICAgICAgICBlbl9ob3MgPSAwOwor I2VuZGlmIC8qIE5PU0VSVkVSICovCisgICAgfQorI2VuZGlmIC8qIE5PUFVTSCAqLworCisgICAg KnZ2YnVmID0gTlVMOyAgICAgICAgICAgICAgICAgICAgICAgLyogSG93IGxldCdzIGdldCBvdXIg aG9zdCBuYW1lIC4uLiAqLworCisjaWZuZGVmIEJFTExWMTAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogRG9lcyBub3QgaGF2ZSBnZXRob3N0bmFtZSgpICovCisjaWZuZGVmIE9YT1MKKyNpZmRl ZiBTVk9SUE9TSVgKKyNpZmRlZiBBUE9MTE9TUjEwCisgICAgY2tzdHJuY3B5KHZ2YnVmLCJBcG9s bG8iLHZ2bGVuKTsKKyNlbHNlCisjaWZkZWYgQlNENDQKKyAgICBpZiAoZ2V0aG9zdG5hbWUodnZi dWYsdnZsZW4pIDwgMCkKKyAgICAgICp2dmJ1ZiA9IE5VTDsKKyNlbHNlCisjaWZkZWYgXzM4NkJT RAorICAgIGlmIChnZXRob3N0bmFtZSh2dmJ1Zix2dmxlbikgPCAwKSAqdnZidWYgPSBOVUw7Cisj ZWxzZQorI2lmZGVmIFFOWAorI2lmZGVmIFRDUFNPQ0tFVAorICAgIGlmIChnZXRob3N0bmFtZSh2 dmJ1Zix2dmxlbikgPCAwKSAqdnZidWYgPSBOVUw7CisjZWxzZQorICAgIGlmICh1bmFtZSgmaG5h bWUpID4gLTEpIGNrc3RybmNweSh2dmJ1ZixobmFtZS5ub2RlbmFtZSx2dmxlbik7CisjZW5kaWYg LyogVENQU09DS0VUICovCisjZWxzZSAvKiBTVk9SUE9TSVggYnV0IG5vdCBfMzg2QlNEIG9yIEJT RDQ0ICovCisjaWZkZWYgX19pYTY0X18KKyAgICBpZiAodW5hbWUoJmhuYW1lKSA+IC0xKSBja3N0 cm5jcHkodnZidWYsaG5hbWUubm9kZW5hbWUsdnZsZW4pOworI2Vsc2UKKyAgICBpZiAodW5hbWUo JmhuYW1lKSA+IC0xKSB7CisJY2hhciAqIHA7CisJcCA9IGhuYW1lLm5vZGVuYW1lOworI2lmZGVm IFRDUFNPQ0tFVAorI2lmbmRlZiBOT0NLR0VURlFIT1NUCisJaWYgKCFja3N0cmNocihwLCcuJykp CisJICBwID0gKGNoYXIgKilja2dldGZxaG9zdG5hbWUocCk7CisjZW5kaWYgLyogTk9DS0dFVEZR SE9TVCAqLworI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLworCWlmICghcCkgcCA9ICIiOworCWlmICgh KnApIHAgPSAiKHVua25vd24pIjsKKwlja3N0cm5jcHkodnZidWYscCx2dmxlbik7CisgICAgfQor I2VuZGlmIC8qIF9faWE2NF9fICovCisjZW5kaWYgLyogUU5YICovCisjZW5kaWYgLyogXzM4NkJT RCAqLworI2VuZGlmIC8qIEJTRDQ0ICovCisjZW5kaWYgLyogQVBPTExPU1IxMCAqLworI2Vsc2Ug LyogIVNWT1JQT1NJWCAqLworI2lmZGVmIEJTRDQKKyAgICBpZiAoZ2V0aG9zdG5hbWUodnZidWYs dnZsZW4pIDwgMCkgKnZ2YnVmID0gTlVMOworI2Vsc2UgLyogIUJTRDQgKi8KKyNpZmRlZiBWTVMK KyAgICBnID0gZ2V0ZW52KCJTWVMkTk9ERSIpOworICAgIGlmIChnKSBja3N0cm5jcHkodnZidWYs Zyx2dmxlbik7CisgICAgeCA9IChpbnQpc3RybGVuKHZ2YnVmKTsKKyAgICBpZiAoeCA+IDEgJiYg dnZidWZbeC0xXSA9PSAnOicgJiYgdnZidWZbeC0yXSA9PSAnOicpIHZ2YnVmW3gtMl0gPSBOVUw7 CisjZWxzZQorI2lmZGVmIGRhdGFnZW5lcmFsCisgICAgaWYgKHN5cygkSE5BTUUsJmFjMCwmYWMx LCZhYzIpID09IDApIC8qIHN1Y2Nlc3NmdWwgKi8KKyAgICAgICAgdnZsZW4gPSBhYzIgKyAxOyAg ICAgICAgICAgICAgICAvKiBlbmggLSBoYXZlIHRvIGFkZCBvbmUgKi8KKyNlbHNlCisjaWZkZWYg T1MyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogT1MvMiAqLworICAgIGcgPSBvczJf Z2V0aG9zdG5hbWUoKTsKKyAgICBpZiAoZykgY2tzdHJuY3B5KHZ2YnVmLGcsdnZsZW4pOworI2Vs c2UgLyogT1MyICovCisjaWZkZWYgT1NLCisjaWZkZWYgVENQU09DS0VUCisgICAgICAgIGlmIChn ZXRob3N0bmFtZSh2dmJ1ZiwgdnZsZW4pIDwgMCkgKnZ2YnVmID0gTlVMOworI2VuZGlmIC8qIFRD UFNPQ0tFVCAqLworI2VuZGlmIC8qIE9TSyAqLworI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8q IGRhdGFnZW5lcmFsICovCisjZW5kaWYgLyogVk1TICovCisjZW5kaWYgLyogQlNENCAqLworI2Vu ZGlmIC8qIFNWT1JQT1NJWCAqLworI2Vsc2UgLyogT1hPUyAqLworICAgIC8qIElmIFRDUC9JUCBp cyBub3QgaW5zdGFsbGVkLCBnZXRob3N0bmFtZSgpIGZhaWxzLCB1c2UgdW5hbWUoKSAqLworICAg IGlmIChnZXRob3N0bmFtZSh2dmJ1Zix2dmxlbikgPCAwKSB7CisgICAgICAgIGlmICh1bmFtZSgm aG5hbWUpID4gLTEpCisgICAgICAgICAgICBja3N0cm5jcHkodnZidWYsaG5hbWUubm9kZW5hbWUs dnZsZW4pOworICAgICAgICBlbHNlCisgICAgICAgICAgICAqdnZidWYgPSBOVUw7CisgICAgfQor I2VuZGlmIC8qIE9YT1MgKi8KKyNlbmRpZiAvKiBCRUxMVjEwICovCisgICAgaWYgKCp2dmJ1ZiA9 PSBOVUwpIHsgICAgICAgICAgICAgICAgLyogSWYgaXQncyBzdGlsbCBlbXB0eSAqLworICAgICAg ICBnID0gZ2V0ZW52KCJIT1NUIik7ICAgICAgICAgICAgIC8qIHRyeSB0aGlzICovCisgICAgICAg IGlmIChnKSBja3N0cm5jcHkodnZidWYsZyx2dmxlbik7CisgICAgfQorICAgIHZ2YnVmW3Z2bGVu LTFdID0gTlVMOyAgICAgICAgICAgICAgIC8qIE1ha2Ugc3VyZSByZXN1bHQgaXMgdGVybWluYXRl ZC4gKi8KKyNlbmRpZiAvKiBwZHAxMSAqLworfQorI2lmZGVmIEJTRDQ0CisjdW5kZWYgQlNENAor I2RlZmluZSBBVFRTVgorI2VuZGlmIC8qIEJTRDQ0ICovCisKKy8qCisgIEEgUyBLIE0gTyBSIEUg IC0tICBQb29yIHBlcnNvbidzICJtb3JlIi4KKyAgUmV0dXJucyAwIGlmIG5vIG1vcmUsIDEgaWYg bW9yZSB3YW50ZWQuCisqLworaW50Cithc2ttb3JlKCkgeworICAgIGNoYXIgYzsKKyAgICBpbnQg cnYsIGN4OworI2lmZGVmIElLU0QKKyAgICBleHRlcm4gaW50IHRpbWVsaW1pdDsKKyNlbmRpZiAv KiBJS1NEICovCisjaWZkZWYgSUtTRENPTkYKKyAgICBleHRlcm4gaW50IGlrc2RjZjsKKyNlbmRp ZiAvKiBJS1NEQ09ORiAqLworI2lmZGVmIENLX0FQQworICAgIGV4dGVybiBpbnQgYXBjc3RhdHVz LCBhcGNhY3RpdmU7CisjZW5kaWYgLyogQ0tfQVBDICovCisKKyNpZmRlZiBOT0lDUAorICAgIHJl dHVybigxKTsKKyNlbHNlCisgICAgaWYgKCF4YXNrbW9yZSkKKyAgICAgIHJldHVybigxKTsKKyNp ZmRlZiBJS1NEQ09ORgorICAgIGlmIChpbnNlcnZlciAmJiAhaWtzZGNmKQorICAgICAgcmV0dXJu KDEpOworI2VuZGlmIC8qIElLU0RDT05GICovCisjaWZkZWYgQ0tfQVBDCisgICAgaWYgKGFwY2Fj dGl2ZSA9PSBBUENfTE9DQUwgfHwKKyAgICAgICAgKGFwY2FjdGl2ZSA9PSBBUENfUkVNT1RFICYm IChhcGNzdGF0dXMgJiBBUENfTk9JTlApKSkKKyAgICAgICAgcmV0dXJuKDEpOworI2VuZGlmIC8q IENLX0FQQyAqLworI2lmZGVmIFZNUworICAgIGlmIChiYXRjaCkKKyAgICAgIHJldHVybigxKTsK KyNlbHNlCisjaWZkZWYgVU5JWAorICAgIGlmIChiYWNrZ3JkKQorICAgICAgcmV0dXJuKDEpOwor I2VuZGlmIC8qIFVOSVggKi8KKyNlbmRpZiAvKiBWTVMgKi8KKworI2lmbmRlZiBWTVMKKyAgICBj b25jYigoY2hhcillc2NhcGUpOyAgICAgICAgICAgICAgICAvKiBGb3JjZSBDQlJFQUsgbW9kZS4g Ki8KKyNlbmRpZiAvKiBWTVMgKi8KKworICAgIHJ2ID0gLTE7CisgICAgd2hpbGUgKHJ2IDwgMCkg eworI2lmbmRlZiBPUzIKKyAgICAgICAgcHJpbnRmKCJtb3JlPyAiKTsKKyNpZmRlZiBVTklYCisj aWZkZWYgTk9TRVRCVUYKKyAgICAgICAgZmZsdXNoKHN0ZG91dCk7CisjZW5kaWYgLyogTk9TRVRC VUYgKi8KKyNlbmRpZiAvKiBVTklYICovCisjZWxzZQorICAgICAgICBwcmludGYoIm1vcmU/ICIp OworICAgICAgICBmZmx1c2goc3Rkb3V0KTsKKyNlbmRpZiAvKiBPUzIgKi8KKworI2lmZGVmIElL U0QKKyAgICAgICAgaWYgKGluc2VydmVyKSB7CisgICAgICAgICAgICBjeCA9IGNtZGdldGModGlt ZWxpbWl0KTsKKyAgICAgICAgICAgIGlmIChjeCA8IC0xICYmIHRpbWVsaW1pdCkgeworICAgICAg ICAgICAgICAgIHByaW50ZigiXG4/SUtTIGlkbGUgdGltZW91dCAtIEdvb2RieWUuXG4iKTsKKyAg ICAgICAgICAgICAgICBkb2V4aXQoR09PRF9FWElULDApOworICAgICAgICAgICAgfSBlbHNlIGlm IChjeCA9PSAtMSkgewkvKiBDb25uZWN0aW9uIGxvc3QgKi8KKyAgICAgICAgICAgICAgICBkb2V4 aXQoQkFEX0VYSVQsMCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjID0gKGNoYXIpIGN4 OworICAgICAgICB9IGVsc2UgeworI2VuZGlmIC8qIElLU0QgKi8KKyNpZmRlZiBWTVMKKwkgICAg Y29uYmluKChjaGFyKWVzY2FwZSk7CS8qIFByb3RlY3QgYWdhaW5zdCBDdHJsLVogKi8KKwkgICAg Y3ggPSBjb25pbmMoMCk7CisJICAgIGNvbmNiKChjaGFyKWVzY2FwZSk7CisjZWxzZQorCSAgICBj eCA9IGNtZGdldGMoMCk7CisjZW5kaWYgLyogVk1TICovCisJICAgIGRlYnVnKEYxMDEsImFza21v cmUgY21kZ2V0YyIsIiIsY3gpOworCSAgICBpZiAoY3ggPT0gRU9GKSB7CisJCWRlYnVnKEYxMDAs ImFza21vcmUgRU9GIiwiIiwwKTsKKyNpZmRlZiBWTVMKKwkJYyA9ICdcMDMyJzsKKyNlbHNlCisJ CWMgPSAnbic7CisjZW5kaWYgLyogVk1TICovCisJICAgIH0gZWxzZSB7CisJCWMgPSAoY2hhcilj eDsKKwkgICAgfQorCSAgICBkZWJ1ZyhGMTAxLCJhc2ttb3JlIGMiLCIiLGMpOworCisjaWZkZWYg SUtTRAorCX0KKyNlbmRpZiAvKiBJS1NEICovCisgICAgICAgIHN3aXRjaCAoYykgeworICAgICAg ICAgIC8qIFllcyAqLworCSAgY2FzZSAncCc6IGNhc2UgJ1AnOiBjYXNlICdnJzogY2FzZSAnRyc6 IC8qIFByb2NlZWQgb3IgR28gKi8KKwkgICAgeGFza21vcmUgPSAwOworCSAgICAvKiBmYWxsIHRo cnUgb24gcHVycG9zZSAqLworCisgICAgICAgICAgY2FzZSBTUDogY2FzZSAneSc6IGNhc2UgJ1kn OiBjYXNlIDAxMjogIGNhc2UgMDE1OgorI2lmZGVmIE9TSworICAgICAgICAgICAgd3JpdGUoMSwg IlwwMTUgICAgICBcMDE1Iiwgc2l6ZW9mICJcMDE1ICAgICAgXDAxNSIgLSAxKTsKKyNlbHNlCisg ICAgICAgICAgICBwcmludGYoIlwwMTUgICAgICBcMDE1Iik7CisjZW5kaWYgLyogT1NLICovCisg ICAgICAgICAgICBydiA9IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAvKiBObyAq LworICAgICAgICAgIGNhc2UgJ24nOiBjYXNlICdOJzogY2FzZSAncSc6IGNhc2UgJ1EnOgorI2lm ZGVmIE9TSworICAgICAgICAgICAgcHJpbnRmKCJcbiIpOworI2Vsc2UKKyAgICAgICAgICAgIHBy aW50ZigiXDAxNVwwMTIiKTsKKyNlbmRpZiAvKiBPU0sgKi8KKyAgICAgICAgICAgIHJ2ID0gMDsK KyAgICAgICAgICAgIGJyZWFrOworCSAgY2FzZSAnXDAwMyc6CisJICBjYXNlICdcMDA0JzoKKwkg IGNhc2UgJ1wwMzInOgorI2lmZGVmIE9TSworCSAgICBwcmludGYoIl4lYy4uLlxuIiwgKGMgKyAw MTAwKSk7CisjZWxzZQorCSAgICBwcmludGYoIl4lYy4uLlwwMTVcMDEyIiwgKGMgKyAwMTAwKSk7 CisjZW5kaWYgLyogT1NLICovCisJICAgIHJ2ID0gMDsKKwkgICAgYnJlYWs7CisgICAgICAgICAg LyogSW52YWxpZCBhbnN3ZXIgKi8KKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgZGVi dWcoRjExMSwiYXNrbW9yZSIsImludmFsaWQgYW5zd2VyIixjKTsKKyAgICAgICAgICAgIHByaW50 ZigiWSBvciBzcGFjZS1iYXIgZm9yIHllcywgTiBmb3Igbm8sIEcgdG8gc2hvdyB0aGUgcmVzdFxu Iik7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorI2lmZGVmIE9TMgorICAgICAg ICBwcmludGYoIlxyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXHIiKTsKKyAgICAgICAgZmZsdXNoKHN0ZG91dCk7CisjZW5kaWYgLyogT1MyICovCisg ICAgfQorICAgIHJldHVybihydik7CisjZW5kaWYgLyogTk9JQ1AgKi8KK30KKworLyogIFQgUiBB IFAgIC0tICBUZXJtaW5hbCBpbnRlcnJ1cHQgaGFuZGxlciAqLworCitTSUdUWVAKKyNpZmRlZiBD S19BTlNJQwordHJhcChpbnQgc2lnKQorI2Vsc2UKK3RyYXAoc2lnKSBpbnQgc2lnOworI2VuZGlm IC8qIENLX0FOU0lDICovCisvKiB0cmFwICovIHsKKyAgICBleHRlcm4gaW50IGJfc2F2ZSwgZl9z YXZlOworI2lmbmRlZiBOT0lDUAorICAgIGV4dGVybiBpbnQgdGltZWxpbWl0OworI2VuZGlmIC8q IE5PSUNQICovCisjaWZkZWYgT1MyCisgICAgZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3RhcnRmbGFn czsKKyNpZm5kZWYgTk9TRVRLRVkKKyAgICBleHRlcm4gaW50IG9zMmdrczsKKyNlbmRpZiAvKiBO T1NFVEtFWSAqLworICAgIGludCBpOworI2VuZGlmIC8qIE9TMiAqLworI2lmbmRlZiBOT1NQTAor ICAgIGV4dGVybiBpbnQgaV9hY3RpdmUsIGluc3RhdHVzOworI2VuZGlmIC8qIE5PU1BMICovCisj aWZkZWYgVk1TCisgICAgaW50IGk7IEZJTEUgKmY7CisjZW5kaWYgLyogVk1TICovCisgICAgZXh0 ZXJuIGludCB6Y2hrb2QsIHpjaGtpZDsKKyNpZm5kZWYgTk9TUEwKKyAgICBleHRlcm4gaW50IHVu a21hY3JvOworI2VuZGlmIC8qIE5PU1BMICovCisKKyAgICBkZWJvayA9IDE7CisjaWZkZWYgTlRT SUcKKyAgICBjb25ub2koKTsKKyNlbmRpZiAvKiBOVFNJRyAqLworI2lmZGVmIF9fRU1YX18KKyAg ICBzaWduYWwoU0lHSU5ULCBTSUdfQUNLKTsKKyNlbmRpZgorI2lmZGVmIEdFTURPUworLyogR0VN IGlzIG5vdCByZWVudHJhbnQsIG5vIGkvbyBmcm9tIGludGVycnVwdCBsZXZlbCAqLworICAgIGNr bG9uZ2ptcChjbWpidWYsMSk7ICAgICAgICAgICAgICAgIC8qIEp1bXAgYmFjayB0byBwYXJzZXIg bm93ISAqLworI2VuZGlmIC8qIEdFTURPUyAqLworCisjaWZkZWYgREVCVUcKKyAgICBpZiAoZGVi bG9nKSB7CisJZGVidWcoRjEwMCwiKioqKioqKioqKioqKioqKioqKioqIiwiIiwwKTsKKwlpZiAo c2lnID09IFNJR0lOVCkKKwkgIGRlYnVnKEYxMDEsInRyYXAgY2F1Z2h0IFNJR0lOVCIsIiIsc2ln KTsKKwllbHNlIAorCSAgZGVidWcoRjEwMSwidHJhcCBjYXVnaHQgc2lnbmFsIiwiIixzaWcpOwor CWRlYnVnKEYxMDAsIioqKioqKioqKioqKioqKioqKioqKiIsIiIsMCk7CisgICAgfQorI2VuZGlm IC8qIERFQlVHICovCisKKyNpZmRlZiBPUzIKKyAgICBpZiAoIHNpZyA9PSBTSUdCUkVBSyAmJiAo c3RhcnRmbGFncyAmIDEyOCkgKSB7CisgICAgICAgIGRlYnVnKEYxMDEsInRyYXAgaWdub3Jpbmcg U0lHQlJFQUsiLCIiLHNpZyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYgLyogT1My ICovCisKKyNpZm5kZWYgTk9JQ1AKKyAgICB0aW1lbGltaXQgPSAwOyAgICAgICAgICAgICAgICAg ICAgICAvKiBJbiBjYXNlIHRpbWVkIEFTSyBpbnRlcnJ1cHRlZCAqLworI2lmbmRlZiBOT1NQTAor ICAgIHVua21hY3JvID0gMDsJCQkvKiBPciBPTl9VTktOT1dOX01BQ1JPIGludGVycnVwdGVkLi4g Ki8KKyNlbmRpZiAvKiBOT1NQTCAqLworI2VuZGlmIC8qIE5PSUNQICovCisgICAgemNoa29kID0g MDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogT3IgZmlsZSBleHBhbnNpb24gaW50ZXJydXB0 ZWQuLi4gKi8KKyAgICB6Y2hraWQgPSAwOworICAgIGludGVycnVwdGVkID0gMTsKKworICAgIGlm ICh3aGF0ICYgV19DT05ORUNUKSB7CQkvKiBBcmUgd2UgaW4gQ09OTkVDVCBtb2RlPyAqLworLyoK KyAgVGhlIEhQIHdvcmtzdGF0aW9uIFJlc2V0IGtleSBzZW5kcyBzb21lIGtpbmQgb2YgdWViZXIt U0lHSU5UIHRoYXQgY2FuIG5vdAorICBiZSBTSUdfSUdOb3JlZCwgc28gd2Ugd2luZCB1cCBoZXJl IHNvbWVob3cgKGV2ZW4gdGhvdWdoIHRoaXMgaXMgKm5vdCogdGhlCisgIGN1cnJlbnQgU0lHSU5U IGhhbmRsZXIpLiAgSnVzdCByZXR1cm4uCisqLworICAgICAgICBkZWJ1ZyhGMTAxLCJ0cmFwOiBT SUdJTlQgY2F1Z2h0IGR1cmluZyBDT05ORUNUIiwiIixzaWcpOworICAgICAgICBTSUdSRVRVUk47 CisgICAgfQorI2lmbmRlZiBOT1NQTAorICAgIGlmIChpX2FjdGl2ZSkgeyAgICAgICAgICAgICAg ICAgICAgIC8qIElOUFVUIGNvbW1hbmQgd2FzIGFjdGl2ZT8gKi8KKyAgICAgICAgaV9hY3RpdmUg PSAwOyAgICAgICAgICAgICAgICAgICAvKiBOb3QgYW55IG1vcmUuLi4gKi8KKyAgICAgICAgaW5z dGF0dXMgPSBJTlBfVUk7ICAgICAgICAgICAgICAvKiBJTlBVVCBzdGF0dXMgPSBVc2VyIEludGVy cnVwdGVkICovCisgICAgfQorI2VuZGlmIC8qIE5PU1BMICovCisKKyNpZm5kZWYgTk9YRkVSCisg ICAgZnRyZXNldCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVzdG9yZSBnbG9iYWwg cHJvdG9jb2wgc2V0dGluZ3MgKi8KKyAgICBiaW5hcnkgPSBiX3NhdmU7ICAgICAgICAgICAgICAg ICAgICAvKiBUaGVuIHJlc3RvcmUgdGhlc2UgKi8KKyAgICBmbmNudiAgPSBmX3NhdmU7CisgICAg YnllX2FjdGl2ZSA9IDA7CisgICAgZGlyYWN0aXZlID0gMDsKKyAgICBjZGFjdGl2ZSA9IDA7Cisj ZW5kaWYgLyogTk9YRkVSICovCisgICAgemNsb3NlKFpJRklMRSk7ICAgICAgICAgICAgICAgICAg ICAgLyogSWYgd2Ugd2VyZSB0cmFuc2ZlcnJpbmcgYSBmaWxlLCAqLworICAgIHpjbG9zZShaT0ZJ TEUpOyAgICAgICAgICAgICAgICAgICAgIC8qIGNsb3NlIGl0LiAqLworI2lmbmRlZiBOT0lDUAor ICAgIGNtZHNxdW8oY21kX3F1b3RpbmcpOyAgICAgICAgICAgICAgIC8qIElmIGNvbW1hbmQgcXVv dGluZyB3YXMgdHVybmVkIG9mZiAqLworI2lmZGVmIENLTEVBUk4KKyAgICB7CisJZXh0ZXJuIEZJ TEUgKiBsZWFybmZwOworCWV4dGVybiBpbnQgbGVhcm5pbmc7CisJaWYgKGxlYXJuZnApIHsKKwkg ICAgZmNsb3NlKGxlYXJuZnApOworCSAgICBsZWFybmZwID0gTlVMTDsKKwkgICAgbGVhcm5pbmcg PSAwOworCX0KKyAgICB9CisjZW5kaWYgLyogQ0tMRUFSTiAqLworI2VuZGlmIC8qIE5PSUNQICov CisjaWZkZWYgQ0tfQVBDCisgICAgZGVsbWFjKCJfYXBjX2NvbW1hbmRzIiwxKTsKKyAgICBhcGNh Y3RpdmUgPSBBUENfSU5BQ1RJVkU7CisjZW5kaWYgLyogQ0tfQVBDICovCisKKyNpZmRlZiBWTVMK Ky8qCisgIEZpeCB0ZXJtaW5hbC4KKyovCisgICAgaWYgKGZ0X3dpbikgeyAgICAgICAgICAgICAg ICAgICAgICAgLyogSWYgY3Vyc2VzIHdpbmRvdyBvcGVuICovCisgICAgICAgIGRlYnVnKEYxMDAs Il5DIHRyYXAoKSBjdXJzZXMiLCIiLDApOworICAgICAgICB4eHNjcmVlbihTQ1JfQ1csMCwwTCwi Iik7ICAgICAgIC8qIENsb3NlIGl0ICovCisgICAgICAgIGNvbnJlcygpOyAgICAgICAgICAgICAg ICAgICAgICAgLyogUmVzdG9yZSB0ZXJtaW5hbCAqLworICAgICAgICBpID0gcHJpbnRmKCJeQy4u LiIpOyAgICAgICAgICAgIC8qIEVjaG8gXkMgdG8gc3RhbmRhcmQgb3V0cHV0ICovCisgICAgfSBl bHNlIHsKKyAgICAgICAgY29ucmVzKCk7CisgICAgICAgIGkgPSBwcmludGYoIl5DLi4uXG4iKTsg ICAgICAgICAgLyogRWNobyBeQyB0byBzdGFuZGFyZCBvdXRwdXQgKi8KKyAgICB9CisgICAgaWYg KGkgPCAxICYmIGZlcnJvcihzdGRvdXQpKSB7ICAgICAgLyogSWYgdGhlcmUgd2FzIGFuIGVycm9y ICovCisgICAgICAgIGRlYnVnKEYxMDAsIl5DIHRyYXAoKSBlcnJvciIsIiIsMCk7CisgICAgICAg IGZjbG9zZShzdGRvdXQpOyAgICAgICAgICAgICAgICAgLyogY2xvc2Ugc3RhbmRhcmQgb3V0cHV0 ICovCisgICAgICAgIGYgPSBmb3BlbihkZnR0eSwgInciKTsgICAgICAgICAgLyogb3BlbiB0aGUg Y29udHJvbGxpbmcgdGVybWluYWwgKi8KKyAgICAgICAgaWYgKGYpIHN0ZG91dCA9IGY7ICAgICAg ICAgICAgICAvKiBhbmQgbWFrZSBpdCBzdGFuZGFyZCBvdXRwdXQgKi8KKyAgICAgICAgcHJpbnRm KCJeQy4uLlxuIik7ICAgICAgICAgICAgICAvKiBhbmQgZWNobyB0aGUgXkMgYWdhaW4uICovCisg ICAgfQorI2Vsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vdCBWTVMg Ki8KKyNpZmRlZiBTVFJBVFVTCisgICAgY29ucmVzKCk7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogU2V0IGNvbnNvbGUgYmFjayB0byBub3JtYWwgbW9kZSAqLworI2VuZGlmIC8qIFNUUkFU VVMgKi8KKyNpZm5kZWYgTk9YRkVSCisgICAgaWYgKGZ0X3dpbikgeyAgICAgICAgICAgICAgICAg ICAgICAgLyogSWYgY3Vyc2VzIHdpbmRvdyBvcGVuLCAqLworICAgICAgICBkZWJ1ZyhGMTAwLCJe QyB0cmFwKCkgY3Vyc2VzIiwiIiwwKTsKKyAgICAgICAgeHhzY3JlZW4oU0NSX0NXLDAsMEwsIiIp OwkvKiBjbG9zZSBpdC4gKi8KKyAgICAgICAgcHJpbnRmKCJeQy4uLiIpOyAgICAgICAgICAgICAg ICAvKiBFY2hvIF5DIHRvIHN0YW5kYXJkIG91dHB1dCAqLworICAgIH0gZWxzZSB7CisjZW5kaWYg LyogTk9YRkVSICovCisgICAgICAgIHByaW50ZigiXkMuLi5cbiIpOworI2lmbmRlZiBOT1hGRVIK KyAgICB9CisjZW5kaWYgLyogTk9YRkVSICovCisjZW5kaWYgLyogVk1TICovCisjaWZkZWYgZGF0 YWdlbmVyYWwKKyAgICBjb25ub2lfbXQoKTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBLaWxs IGFzeW5jaCB0YXNrIHRoYXQgbGlzdGVucyB0byAqLworICAgIHR0aW1vZmYoKTsKKyAgICBjb25y ZXMoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0aGUga2V5Ym9hcmQgKi8KKyNlbmRp ZiAvKiBkYXRhZ2VuZXJhbCAqLworCisjaWZuZGVmIE5PQ0NUUkFQCisvKiAgVGhpcyBpcyBzdHVw aWQgLS0gZXZlcnkgdmVyc2lvbiBzaG91bGQgaGF2ZSB0dGltb2ZmKCkuLi4gICovCisjaWZkZWYg VU5JWAorICAgIHR0aW1vZmYoKTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFR1cm4gb2Zm IGFueSB0aW1lciBpbnRlcnJ1cHRzICovCisjZWxzZQorI2lmZGVmIE9TSworICAgIHR0aW1vZmYo KTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFR1cm4gb2ZmIGFueSB0aW1lciBpbnRlcnJ1 cHRzICovCisjZWxzZQorI2lmZGVmIFNUUkFUVVMKKyAgICB0dGltb2ZmKCk7ICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBUdXJuIG9mZiBhbnkgdGltZXIgaW50ZXJydXB0cyAqLworI2Vsc2UK KyNpZmRlZiBPUzIKKyNpZm5kZWYgTk9TRVRLRVkKKyAgICBvczJna3MgPSAxOyAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBUdXJuIGJhY2sgb24ga2V5Y29kZSBtYXBwaW5nICAqLworI2VuZGlm IC8qIE5PU0VUS0VZICovCisjaWZuZGVmIE5PTE9DQUwKKyAgICBmb3IgKGkgPSAwOyBpIDwgVk5V TTsgaSsrKQorICAgICAgVnNjcm5SZXNldFBvcHVwKGkpOworI2VuZGlmIC8qIE5PTE9DQUwgKi8K KyNpZmRlZiBUQ1BTT0NLRVQKKyNpZmRlZiBOVAorICAgIC8qIFdTQUlzQmxvY2tpbmcoKSByZXR1 cm5zIEZBTFNFIGluIFdpbjk1IGR1cmluZyBhIGJsb2NraW5nIGFjY2VwdCBjYWxsICovCisgICAg aWYgKCBXU0FTYWZlVG9DYW5jZWwgLyogJiYgV1NBSXNCbG9ja2luZygpICovICkgeworICAgICAg ICBXU0FDYW5jZWxCbG9ja2luZ0NhbGwoKTsKKyAgICB9CisjZW5kaWYgLyogTlQgKi8KKyNlbmRp ZiAvKiBUQ1BTT0NLRVQgKi8KKyNpZmRlZiBDS19ORVRCSU9TCisgICAgTkNCQ2FuY2VsT3V0c3Rh bmRpbmcoKTsKKyNlbmRpZiAvKiBDS19ORVRCSU9TICovCisgICAgdHRpbW9mZigpOyAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogVHVybiBvZmYgYW55IHRpbWVyIGludGVycnVwdHMgKi8KKyNl bHNlCisjaWZkZWYgVk1TCisgICAgdHRpbW9mZigpOyAgICAgICAgICAgICAgICAgICAgICAgICAg LyogVHVybiBvZmYgYW55IHRpbWVyIGludGVycnVwdHMgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKyNl bmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBTVFJBVFVTICovCisjZW5kaWYgLyogT1NLICovCisj ZW5kaWYgLyogVU5JWCAqLworCisjaWZkZWYgTkVUUFRZCisgICAgLyogQ2xlYW4gdXAgQ3RybC1D IG91dCBvZiBSRURJUkVDVCBvciBleHRlcm5hbCBwcm90b2NvbCAqLworICAgIHsKKwlleHRlcm4g UElEX1QgcHR5X2ZvcmtfcGlkOworCWV4dGVybiBpbnQgcHR5X21hc3Rlcl9mZCwgcHR5X3NsYXZl X2ZkOworCWludCB4OworCisJc2lnbmFsKFNJR0NITEQsU0lHX0lHTik7CS8qIFdlIGRvbid0IHdh bnQgdGhpcyBhbnkgbW9yZSAqLworCisJZGVidWcoRjEwMSwidHJhcCBwdHlfbWFzdGVyX2ZkIiwi IixwdHlfbWFzdGVyX2ZkKTsKKwlpZiAocHR5X21hc3Rlcl9mZCA+IDIpIHsKKwkgICAgeCA9IGNs b3NlKHB0eV9tYXN0ZXJfZmQpOworCSAgICBkZWJ1ZyhGMTAxLCJ0cmFwIHB0eV9tYXN0ZXJfZmQg Y2xvc2UiLCIiLHgpOworCX0KKwlwdHlfbWFzdGVyX2ZkID0gLTE7CisJZGVidWcoRjEwMSwidHJh cCBwdHlfc2xhdmVfZmQiLCIiLHB0eV9zbGF2ZV9mZCk7CisJaWYgKHB0eV9zbGF2ZV9mZCA+IDIp IHsKKwkgICAgeCA9IGNsb3NlKHB0eV9zbGF2ZV9mZCk7CisJICAgIGRlYnVnKEYxMDEsInRyYXAg cHR5X3NsYXZlX2ZkIGNsb3NlIiwiIix4KTsKKwl9CisJcHR5X3NsYXZlX2ZkID0gLTE7CisJZGVi dWcoRjEwMSwidHJhcCBwdHlfZm9ya19waWQiLCIiLHB0eV9mb3JrX3BpZCk7CisJaWYgKHB0eV9m b3JrX3BpZCA+IDApIHsKKwkgICAgeCA9IGtpbGwocHR5X2ZvcmtfcGlkLDApOwkvKiBTZWUgaWYg dGhlIGZvcmsgaXMgcmVhbGx5IHRoZXJlICovCisJICAgIGRlYnVnKEYxMTEsInRyYXAgcHR5X2Zv cmtfcGlkIGtpbGwgMCBlcnJubyIsY2tpdG9hKHgpLGVycm5vKTsKKwkgICAgaWYgKHggPT0gMCkg ewkJLyogU2VlbXMgdG8gYmUgYWN0aXZlICovCisJCXggPSBraWxsKHB0eV9mb3JrX3BpZCxTSUdI VVApOyAvKiBBc2sgaXQgdG8gY2xlYW4gdXAgJiBleGl0ICovCisJCWRlYnVnKEYxMDEsInRyYXAg cHR5X2ZvcmtfcGlkIGtpbGwgU0lHSFVQIiwiIix4KTsKKwkJbXNsZWVwKDEwMCk7CisJCWVycm5v ID0gMDsKKwkJeCA9IGtpbGwocHR5X2ZvcmtfcGlkLDApOyAvKiBJcyBpdCBzdGlsbCB0aGVyZT8g Ki8KKwkJaWYgKHggPT0gMAorI2lmZGVmIEVTUkNICisJCSAgICAvKiBUaGlzIG1vZHVsZSBpcyBu b3QgYWx3YXlzIGV4cG9zZWQgdG8gPGVycm5vLmg+ICovCisJCSAgICB8fCBlcnJubyAhPSBFU1JD SAorI2VuZGlmCS8qIEVTUkNIICovCisJCSAgICApIHsKKwkJICAgIHggPSBraWxsKHB0eV9mb3Jr X3BpZCxTSUdLSUxMKTsKKwkJICAgIGRlYnVnKEYxMDEsInRyYXAgcHR5X2ZvcmtfcGlkIGtpbGwg U0lHS0lMTCIsIiIseCk7CisJCX0KKwkgICAgfQorCSAgICBwdHlfZm9ya19waWQgPSAtMTsKKwl9 CisgICAgfQorI2VuZGlmCS8qIE5FVFBUWSAqLworCisjaWZkZWYgT1NLCisgICAgc2lnbWFzaygt MSk7CisvKgorICBXZSBhcmUgaW4gYW4gaW50ZXJjZXB0IHJvdXRpbmUgYnV0IGRvIG5vdCBwZXJm b3JtIGEgRiRSVEUgKGRvbmUgaW1wbGljaXRseQorICBieSBydHMpLiAgV2UgaGF2ZSB0byBkZWNy ZW1lbnQgdGhlIHNpZ21hc2sgYXMgRiRSVEUgZG9lcy4gIFdhcm5pbmc6IGxvbmdqdW1wCisgIG9u bHkgcmVzdG9yZXMgdGhlIGNwdSByZWdpc3RlcnMsIE5PVCB0aGUgZnB1IHJlZ2lzdGVycy4gIFNv IGRvbid0IHVzZSBmcHUgYXQKKyAgYWxsIG9yIGF0IGxlYXN0IGRvbid0IHVzZSBjb21tb24gZnB1 IChkb3VibGUgb3IgZmxvYXQpIHJlZ2lzdGVyIHZhcmlhYmxlcy4KKyovCisjZW5kaWYgLyogT1NL ICovCisKKyNpZmRlZiBOVFNJRworICAgIFBvc3RDdHJsQ1NlbSgpOworI2Vsc2UgLyogTlRTSUcg Ki8KKyAgICBkZWJ1ZyhGMTAwLCJ0cmFwIGFib3V0IHRvIGxvbmdqbXAiLCIiLDApOworI2lmZGVm IE5UCisgICAgY2tsb25nam1wKGNramFkZHIoY21qYnVmKSwxKTsKKyNlbHNlIC8qIE5UICovCisg ICAgY2tsb25nam1wKGNtamJ1ZiwxKTsKKyNlbmRpZiAvKiBOVCAqLworI2VuZGlmIC8qIE5UU0lH ICovCisjZWxzZSAvKiBOT0NDVFJBUCAqLworLyogTm8gQ3RybC1DIHRyYXAsIGp1c3QgZXhpdC4g Ki8KKyNpZmRlZiBDS19DVVJTRVMgICAgICAgICAgICAgICAgICAgICAgICAvKiBDdXJzZXMgc3Vw cG9ydD8gKi8KKyAgICB4eHNjcmVlbihTQ1JfQ1csMCwwTCwiIik7ICAgICAgICAgICAvKiBDbG9z ZSBjdXJzZXMgd2luZG93ICovCisjZW5kaWYgLyogQ0tfQ1VSU0VTICovCisgICAgZG9leGl0KEJB RF9FWElULHdoYXQpOyAgICAgICAgICAgICAgLyogRXhpdCBwb29ybHkgKi8KKyNlbmRpZiAvKiBO T0NDVFJBUCAqLworICAgIFNJR1JFVFVSTjsKK30KKworCisvKiAgQyBLIF8gVCBJIE0gRSAgLS0g UmV0dXJucyBwb2ludGVyIHRvIGN1cnJlbnQgdGltZS4gKi8KKworY2hhciAqCitja190aW1lKCkg eworICAgIHN0YXRpYyBjaGFyIHRidWZbMTBdOworICAgIGNoYXIgKnA7CisgICAgaW50IHg7CisK KyAgICB6dGltZSgmcCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAiVGh1IEZlYiAgOCAx MjowMDowMCAxOTkwIiAqLworICAgIGlmICghcCkgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIGxpa2UgYXNjdGltZSgpISAqLworICAgICAgcmV0dXJuKCIiKTsKKyAgICBpZiAoKnApIHsK KyAgICAgICAgZm9yICh4ID0gMTE7IHggPCAxOTsgeCsrKSAgICAgICAvKiBjb3B5IGhoOm1tOnNz ICovCisgICAgICAgICAgdGJ1Zlt4IC0gMTFdID0gcFt4XTsgICAgICAgICAgLyogdG8gdGJ1ZiAq LworICAgICAgICB0YnVmWzhdID0gTlVMOyAgICAgICAgICAgICAgICAgIC8qIHRlcm1pbmF0ZSAq LworICAgIH0KKyAgICByZXR1cm4odGJ1Zik7ICAgICAgICAgICAgICAgICAgICAgICAvKiBhbmQg cmV0dXJuIGl0ICovCit9CisKKy8qICBDIEMgXyBDIEwgRSBBIE4gIC0tICBDbGVhbnVwIGFmdGVy IHRlcm1pbmFsIGludGVycnVwdCBoYW5kbGVyICovCisKKyNpZmRlZiBHRU1ET1MKK2ludAorY2Nf Y2xlYW4oKSB7CisgICAgemNsb3NlKFpJRklMRSk7ICAgICAgICAgICAgICAgICAgICAgLyogSWYg d2Ugd2VyZSB0cmFuc2ZlcnJpbmcgYSBmaWxlLCAqLworICAgIHpjbG9zZShaT0ZJTEUpOyAgICAg ICAgICAgICAgICAgICAgIC8qIGNsb3NlIGl0LiAqLworICAgIHByaW50ZigiXkMuLi5cbiIpOyAg ICAgICAgICAgICAgICAgIC8qIE5vdCBWTVMsIG5vIHByb2JsZW0uLi4gKi8KK30KKyNlbmRpZiAv KiBHRU1ET1MgKi8KKworCisvKiAgUyBUIFAgVCBSIEEgUCAtLSBIYW5kbGUgU0lHVFNUUCAoc3Vz cGVuZCkgc2lnbmFscyAqLworCitTSUdUWVAKKyNpZmRlZiBDS19BTlNJQworc3RwdHJhcChpbnQg c2lnKQorI2Vsc2UKK3N0cHRyYXAoc2lnKSBpbnQgc2lnOworI2VuZGlmIC8qIENLX0FOU0lDICov CisvKiBzdHB0cmFwICovIHsKKworI2lmbmRlZiBOT0pDCisgICAgaW50IHg7IGV4dGVybiBpbnQg Y21mbGdzOworICAgIGRlYnVnKEYxMDEsInN0cHRyYXAoKSBjYXVnaHQgc2lnbmFsIiwiIixzaWcp OworICAgIGlmICgheHN1c3BlbmQpIHsKKyAgICAgICAgcHJpbnRmKCJcclxuc3VzcGVuZCBkaXNh YmxlZFxyXG4iKTsKKyNpZm5kZWYgTk9JQ1AKKyAgICAgICAgaWYgKHdoYXQgJiBXX0NPTU1BTkQp IHsJCS8qIElmIHdlIHdlcmUgcGFyc2luZyBjb21tYW5kcyAqLworICAgICAgICAgICAgcHJvbXB0 KHh4c3RyaW5nKTsgICAgICAgICAgIC8qIHJlaXNzdWUgdGhlIHByb21wdCBhbmQgcGFydGlhbCAq LworICAgICAgICAgICAgaWYgKCFjbWZsZ3MpICAgICAgICAgICAgICAgIC8qIGNvbW1hbmQgKGlm IGFueSkgKi8KKyAgICAgICAgICAgICAgcHJpbnRmKCIlcyIsY21kYnVmKTsKKyAgICAgICAgfQor I2VuZGlmIC8qIE5PSUNQICovCisgICAgfSBlbHNlIHsKKyAgICAgICAgY29ucmVzKCk7ICAgICAg ICAgICAgICAgICAgICAgICAvKiBSZXNldCB0aGUgY29uc29sZSAqLworI2lmbmRlZiBPUzIKKyAg ICAgICAgLyogRmx1c2ggcGVuZGluZyBvdXRwdXQgZmlyc3QsIGluIGNhc2Ugd2UgYXJlIGNvbnRp bnVlZCAqLworICAgICAgICAvKiBpbiB0aGUgYmFja2dyb3VuZCwgd2hpY2ggY291bGQgbWFrZSB1 cyBibG9jayAqLworICAgICAgICBmZmx1c2goc3Rkb3V0KTsKKworICAgICAgICB4ID0gcHN1c3Bl bmQoeHN1c3BlbmQpOwkJLyogVHJ5IHRvIHN1c3BlbmQuICovCisgICAgICAgIGlmICh4IDwgMCkK KyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAgICBwcmludGYoIkpvYiBjb250cm9sIG5vdCBzdXBw b3J0ZWRcclxuIik7CisgICAgICAgIGNvbmludCh0cmFwLHN0cHRyYXApOyAgICAgICAgICAgLyog UmVhcm0gdGhlIHRyYXAuICovCisgICAgICAgIGRlYnVnKEYxMDAsInN0cHRyYXAgYmFjayBmcm9t IHN1c3BlbmQiLCIiLDApOworICAgICAgICBzd2l0Y2ggKHdoYXQpIHsKKyAgICAgICAgICBjYXNl IFdfQ09OTkVDVDogICAgICAgICAgICAgICAvKiBJZiBzdXNwZW5kZWQgZHVyaW5nIENPTk5FQ1Q/ ICovCisgICAgICAgICAgICBjb25iaW4oKGNoYXIpZXNjYXBlKTsgICAgICAgLyogcHV0IGNvbnNv bGUgYmFjayBpbiBiaW5hcnkgbW9kZSAqLworICAgICAgICAgICAgZGVidWcoRjEwMCwic3RwdHJh cCBXX0NPTk5FQ1QiLCIiLDApOworICAgICAgICAgICAgYnJlYWs7CisjaWZuZGVmIE5PSUNQCisg ICAgICAgICAgY2FzZSBXX0NPTU1BTkQ6ICAgICAgICAgICAgICAgLyogU3VzcGVuZGVkIGluIGNv bW1hbmQgbW9kZSAqLworICAgICAgICAgICAgZGVidWcoRjEwMSwic3RwdHJhcCBXX0NPTU1BTkQg cGZsYWciLCIiLHBmbGFnKTsKKyAgICAgICAgICAgIGNvbmNiKChjaGFyKWVzY2FwZSk7ICAgICAg ICAvKiBQdXQgYmFjayBDQlJFQUsgdHR5IG1vZGUgKi8KKyAgICAgICAgICAgIGlmIChwZmxhZykg eyAgICAgICAgICAgICAgICAvKiBJZiBjb21tYW5kIHBhcnNpbmcgd2FzICovCisgICAgICAgICAg ICAgICAgcHJvbXB0KHh4c3RyaW5nKTsgICAgICAgLyogcmVpc3N1ZSB0aGUgcHJvbXB0IGFuZCBw YXJ0aWFsICovCisgICAgICAgICAgICAgICAgaWYgKCFjbWZsZ3MpICAgICAgICAgICAgLyogY29t bWFuZCAoaWYgYW55KSAqLworICAgICAgICAgICAgICAgICAgcHJpbnRmKCIlcyIsY21kYnVmKTsK KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIE5PSUNQICovCisg ICAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgLyogQWxsIG90aGVyIGNhc2Vz Li4uICovCisgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJzdHB0cmFwIGRlZmF1bHQiLCIiLDApOwor ICAgICAgICAgICAgY29uY2IoKGNoYXIpZXNjYXBlKTsgICAgICAgIC8qIFB1dCBpdCBiYWNrIGlu IENCUkVBSyBtb2RlICovCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyNl bmRpZiAvKiBOT0pDICovCisgICAgU0lHUkVUVVJOOworfQorCisjaWZkZWYgVExPRworI2RlZmlu ZSBUQlVGTCAzMDAKKworLyogIFQgTCBPIEcgIC0tICBMb2cgYSByZWNvcmQgaW4gdGhlIHRyYW5z YWN0aW9uIGZpbGUgICovCisvKgorIENhbGwgd2l0aCBhIGZvcm1hdCBhbmQgMyBhcmd1bWVudHM6 IHR3byBzdHJpbmdzIGFuZCBhIG51bWJlcjoKKyAgIGYgICAgIC0gRm9ybWF0LCBhIGJpdCBzdHJp bmcgaW4gcmFuZ2UgMC03LCBiaXQgeCBpcyBvbiwgYXJnICN4IGlzIHByaW50ZWQuCisgICBzMSxz MiAtIFN0cmluZyBhcmd1bWVudHMgMCBhbmQgMS4KKyAgIG4gICAgIC0gTG9uZywgYXJndW1lbnQg Mi4KKyovCitWT0lECisjaWZkZWYgQ0tfQU5TSUMKK2RvdGxvZyhpbnQgZiwgY2hhciAqczEsIGNo YXIgKnMyLCBDS19PRkZfVCBuKQorI2Vsc2UKK2RvdGxvZyhmLHMxLHMyLG4pIGludCBmOyBDS19P RkZfVCBuOyBjaGFyICpzMSwgKnMyOworI2VuZGlmIC8qIENLX0FOU0lDICovCisvKiBkb3Rsb2cg Ki8geworICAgIHN0YXRpYyBjaGFyIHNbVEJVRkxdOworICAgIGV4dGVybiBpbnQgdGxvZ2ZtdDsK KyAgICBjaGFyICpzcCA9IHM7IGludCB4OworICAgIGlmICghczEpIHMxID0gIiI7CisgICAgaWYg KCFzMikgczIgPSAiIjsKKworICAgIGlmICghdHJhbG9nKSByZXR1cm47ICAgICAgICAgICAgICAg IC8qIElmIG5vIHRyYW5zYWN0aW9uIGxvZywgZG9uJ3QgKi8KKyAgICBpZiAodGxvZ2ZtdCAhPSAx KSByZXR1cm47CisgICAgc3dpdGNoIChmKSB7CisgICAgICBjYXNlIEYwMDA6ICAgICAgICAgICAg ICAgICAgICAgICAgLyogMCAoc3BlY2lhbCkgInMxIG4gczIiICAqLworICAgICAgICBpZiAoKGlu dClzdHJsZW4oczEpICsgKGludClzdHJsZW4oczIpICsgMTUgPiBUQlVGTCkKKyAgICAgICAgICBz cHJpbnRmKHNwLCI/VC1Mb2cgc3RyaW5nIHRvbyBsb25nIik7CisgICAgICAgIGVsc2UKKwkgIHNw cmludGYoc3AsIiVzICVzICVzIixzMSxja2ZzdG9hKG4pLHMyKTsKKyAgICAgICAgaWYgKHpzb3V0 bChaVEZJTEUscykgPCAwKSB0cmFsb2cgPSAwOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug RjAwMTogICAgICAgICAgICAgICAgICAgICAgICAvKiAxLCAiIG4iICovCisgICAgICAgIHNwcmlu dGYoc3AsIiAlcyIsY2tmc3RvYShuKSk7CisgICAgICAgIGlmICh6c291dGwoWlRGSUxFLHMpIDwg MCkgdHJhbG9nID0gMDsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEYwMTA6ICAgICAgICAg ICAgICAgICAgICAgICAgLyogMiwgIltzMl0iICovCisgICAgICAgIHggPSAoaW50KXN0cmxlbihz Mik7CisgICAgICAgIGlmIChzMlt4XSA9PSAnXG4nKSBzMlt4XSA9ICdcMCc7CisgICAgICAgIGlm ICh4ICsgNiA+IFRCVUZMKQorICAgICAgICAgIHNwcmludGYoc3AsIj9TdHJpbmcgdG9vIGxvbmci KTsKKyAgICAgICAgZWxzZSBzcHJpbnRmKHNwLCJbJXNdIixzMik7CisgICAgICAgIGlmICh6c291 dGwoWlRGSUxFLCIiKSA8IDApIHRyYWxvZyA9IDA7CisgICAgICAgIGJyZWFrOworICAgICAgY2Fz ZSBGMDExOiAgICAgICAgICAgICAgICAgICAgICAgIC8qIDMsICJbczJdIG4iICovCisgICAgICAg IHggPSAoaW50KXN0cmxlbihzMik7CisgICAgICAgIGlmIChzMlt4XSA9PSAnXG4nKSBzMlt4XSA9 ICdcMCc7CisgICAgICAgIGlmICh4ICsgNiA+IFRCVUZMKQorICAgICAgICAgIHNwcmludGYoc3As Ij9TdHJpbmcgdG9vIGxvbmciKTsKKyAgICAgICAgZWxzZSBzcHJpbnRmKHNwLCJbJXNdICVzIixz Mixja2ZzdG9hKG4pKTsKKyAgICAgICAgaWYgKHpzb3V0bChaVEZJTEUscykgPCAwKSB0cmFsb2cg PSAwOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRjEwMDogICAgICAgICAgICAgICAgICAg ICAgICAvKiA0LCAiczEiICovCisgICAgICAgIGlmICh6c291dGwoWlRGSUxFLHMxKSA8IDApIHRy YWxvZyA9IDA7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBGMTAxOiAgICAgICAgICAgICAg ICAgICAgICAgIC8qIDUsICJzMTogbiIgKi8KKyAgICAgICAgaWYgKChpbnQpc3RybGVuKHMxKSAr IDE1ID4gVEJVRkwpCisgICAgICAgICAgc3ByaW50ZihzcCwiP1N0cmluZyB0b28gbG9uZyIpOwor ICAgICAgICBlbHNlIHNwcmludGYoc3AsIiVzOiAlcyIsczEsY2tmc3RvYShuKSk7CisgICAgICAg IGlmICh6c291dGwoWlRGSUxFLHMpIDwgMCkgdHJhbG9nID0gMDsKKyAgICAgICAgYnJlYWs7Cisg ICAgICBjYXNlIEYxMTA6ICAgICAgICAgICAgICAgICAgICAgICAgLyogNiwgInMxIHMyIiAqLwor ICAgICAgICB4ID0gKGludClzdHJsZW4oczIpOworICAgICAgICBpZiAoczJbeF0gPT0gJ1xuJykg czJbeF0gPSAnXDAnOworICAgICAgICBpZiAoKGludClzdHJsZW4oczEpICsgeCArIDQgPiBUQlVG TCkKKyAgICAgICAgICBzcHJpbnRmKHNwLCI/U3RyaW5nIHRvbyBsb25nIik7CisgICAgICAgIGVs c2UKKwkgIHNwcmludGYoc3AsIiVzJXMlcyIsczEsKCgqczIgPT0gJzonKSA/ICIiIDogIiAiKSxz Mik7CisgICAgICAgIGlmICh6c291dGwoWlRGSUxFLHMpIDwgMCkgdHJhbG9nID0gMDsKKyAgICAg ICAgYnJlYWs7CisgICAgICBjYXNlIEYxMTE6ICAgICAgICAgICAgICAgICAgICAgICAgLyogNywg InMxIHMyOiBuIiAqLworICAgICAgICB4ID0gKGludClzdHJsZW4oczIpOworICAgICAgICBpZiAo czJbeF0gPT0gJ1xuJykgczJbeF0gPSAnXDAnOworICAgICAgICBpZiAoKGludClzdHJsZW4oczEp ICsgeCArIDE1ID4gVEJVRkwpCisgICAgICAgICAgc3ByaW50ZihzcCwiP1N0cmluZyB0b28gbG9u ZyIpOworICAgICAgICBlbHNlCisJICBzcHJpbnRmKHNwLCIlcyVzJXM6ICVzIixzMSwoKCpzMiA9 PSAnOicpID8gIiIgOiAiICIpLHMyLGNrZnN0b2EobikpOworICAgICAgICBpZiAoenNvdXRsKFpU RklMRSxzKSA8IDApIHRyYWxvZyA9IDA7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoK KyAgICAgICAgc3ByaW50ZihzcCwiP0ludmFsaWQgZm9ybWF0IGZvciB0bG9nKCkgLSAlZCIsZik7 CisgICAgICAgIGlmICh6c291dGwoWlRGSUxFLHMpIDwgMCkgdHJhbG9nID0gMDsKKyAgICB9Cit9 CisKKy8qCisgIEQgTyBYIEwgTyBHCisKKyAgVGhpcyBpcyB0aGUgdHJhbnNhY3Rpb24tbG9nIHdy aXRlciBmb3IgQlJJRUYgZm9ybWF0LgorICBUaGUgaWRlYSBpcyBwcm9kdWNlIG9uZSByZWNvcmQg KGxpbmUpIHBlciBmaWxlLiAgRWFjaCByZWNvcmQKKyAgaGFzIHRoZSBmb2xsb3dpbmcgZGVsaW1p dGVkIGZpZWxkczoKKyAgICBEYXRlICh5eXl5bW1kZCkKKyAgICBUaW1lIChoaDptbTpzcykKKyAg ICBBY3Rpb246IFNFTkQgb3IgUkVDVgorICAgIEZpbGUgbmFtZQorICAgIEZpbGUgc2l6ZQorICAg IFRyYW5zZmVyIG1vZGUgKHRleHQsIGJpbmFyeSwgaW1hZ2UsIGxhYmVsZWQsIGV0YykuCisgICAg U3RhdHVzOiBPSyBvciBGQUlMRUQKKyAgICBGcmVlLWZvcm0gY29tbWVudHMgaW4gZG91YmxlcXVv dGVzCisgIFRoZSBkZWZhdWx0IHNlcGFyYXRvciBpcyBjb21tYS4KKyAgSWYgYSBmaWVsZCBjb250 YWlucyB0aGUgc2VwYXJhdG9yLCBpdCBpcyBlbmNsb3NlZCBpbiBkb3VibGVxdW90ZXMuCisqLwor Vk9JRAorI2lmZGVmIENLX0FOU0lDCitkb3hsb2coaW50IHgsIGNoYXIgKiBmbiwgQ0tfT0ZGX1Qg ZnMsIGludCBmbSwgaW50IHN0YXR1cywgY2hhciAqIG1zZykKKyNlbHNlCitkb3hsb2coeCwgZm4s IGZzLCBmbSwgc3RhdHVzLCBtc2cpCisgICAgaW50IHg7IGNoYXIgKiBmbjsgQ0tfT0ZGX1QgZnM7 IGludCBmbTsgaW50IHN0YXR1czsgY2hhciAqIG1zZzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLwor LyogZG94bG9nICovIHsKKyAgICBleHRlcm4gaW50IHRsb2dzZXA7CisgICAgY2hhciBzZXBbMl07 CisgICAgY2hhciBidWZbQ0tNQVhQQVRIKzI1Nl0sICogYnVmcDsKKyAgICBjaGFyIHRtcGJ1Zlsz Ml07CisgICAgY2hhciAqIHMsICogcDsKKyAgICBpbnQgbGVuLCBsZWZ0LCBmdHAgPSAwLCBrOwor CisgICAgaWYgKCF0cmFsb2cpIHJldHVybjsgICAgICAgICAgICAgICAgLyogSWYgbm8gdHJhbnNh Y3Rpb24gbG9nLCBkb24ndCAqLworCisgICAgaWYgKCFmbikgZm4gPSAiIjsgICAgICAgICAgICAg ICAgICAgLyogUHJvdGVjdCBhZ2FpbnN0IG51bGwgcG9pbnRlcnMgKi8KKyAgICBpZiAoIW1zZykg bXNnID0gIiI7CisgICAgaWYgKHggJiBXX0ZUUCkKKyAgICAgIGZ0cCsrOworCisgICAgc2VwWzBd ID0gKGNoYXIpIHRsb2dzZXA7CisgICAgc2VwWzFdID0gTlVMOworICAgIGlmICghc2VwWzBdKSBz ZXBbMF0gPSAnLCc7CisKKyAgICBidWZwID0gYnVmOworICAgIGxlZnQgPSBzaXplb2YoYnVmKTsK KyAgICBkZWJ1ZyhGMTAxLCJYWFggZG94bG9nIGxlZnQgMSIsIiIsbGVmdCk7CisKKyAgICBwID0g enpuZGF0ZSgpOyAgICAgICAgICAgICAgICAgICAgICAvKiBEYXRlICovCisgICAgY2ttYWttc2co YnVmLCBsZWZ0LCBwID8gcCA6ICIwMDAwMDAwMCIsIHNlcCwgTlVMTCwgTlVMTCk7CisgICAgYnVm cCArPSA5OworICAgIGxlZnQgLT0gOTsKKyAgICBkZWJ1ZyhGMTExLCJYWFggZG94bG9nIGxlZnQg MiIsYnVmLGxlZnQpOworCisgICAgenRpbWUoJnApOworICAgIGNrc3RybmNweShidWZwLHArMTEs bGVmdCk7CisgICAgYnVmcCArPSA4OworICAgIGxlZnQgLT0gODsKKyAgICBkZWJ1ZyhGMTExLCJY WFggZG94bG9nIGxlZnQgMyIsYnVmLGxlZnQpOworCisgICAgaWYgKGZ0cCkgeworCWlmICghKHgg JiAoV19TRU5EfFdfUkVDVikpKQorCSAgcmV0dXJuOworCXMgPSAgKHggJiBXX1NFTkQpID8gIlBV VCIgOiAiR0VUIjsKKwlrID0gMzsKKyAgICB9IGVsc2UgeworCXMgPSAgKHggJiBXX1NFTkQpID8g IlNFTkQiIDogIlJFQ1YiOworCWsgPSA0OworICAgIH0KKyAgICBja21ha21zZyhidWZwLGxlZnQs c2VwLHMsc2VwLE5VTEwpOworICAgIGJ1ZnAgKz0gayArIDI7CisgICAgbGVmdCAtPSAoayArIDIp OworICAgIGRlYnVnKEYxMTEsIlhYWCBkb3hsb2cgbGVmdCA0IixidWYsbGVmdCk7CisKKyAgICBz ID0gIiI7CisgICAgaWYgKGNrc3RyY2hyKGZuLHNlcFswXSkpCQkvKiBGaWxlbmFtZSAqLworICAg ICAgcyA9ICJcIiI7CisgICAgY2ttYWttc2coYnVmcCxsZWZ0LHMsZm4scyxzZXApOworICAgIHNw cmludGYodG1wYnVmLCIlcyIsY2tmc3RvYShmcykpOwkvKiBTaXplICovCisgICAgY2tzdHJuY2F0 KGJ1Zix0bXBidWYsQ0tNQVhQQVRIKTsKKyAgICBja3N0cm5jYXQoYnVmLHNlcCxDS01BWFBBVEgp OworICAgIGRlYnVnKEYxMTAsImRveGxvZyA0IixidWYsMCk7CisKKyNpZmRlZiBOT0lDUAorICAg IC8qIFRyYW5zZmVyIG1vZGUgKi8KKyAgICBja3N0cm5jcHkodG1wYnVmLCAoYmluYXJ5ID8gImJp bmFyeSIgOiAidGV4dCIpLCBUTVBCVUZTSVopOworI2Vsc2UKKyAgICBja3N0cm5jcHkodG1wYnVm LGdmbW9kZShmbSwwKSxUTVBCVUZTSVopOworI2VuZGlmIC8qIE5PSUNQICovCisgICAgaWYgKGNr c3RyY2hyKHRtcGJ1ZixzZXBbMF0pKSB7ICAgICAgLyogTWlnaHQgY29udGFpbiBzcGFjZXMgKi8K KyAgICAgICAgY2tzdHJuY2F0KGJ1ZiwiXCIiLENLTUFYUEFUSCk7CisgICAgICAgIGNrc3RybmNh dChidWYsdG1wYnVmLENLTUFYUEFUSCk7CisgICAgICAgIGNrc3RybmNhdChidWYsIlwiIixDS01B WFBBVEgpOworICAgIH0gZWxzZQorICAgICAgY2tzdHJuY2F0KGJ1Zix0bXBidWYsQ0tNQVhQQVRI KTsKKyAgICBja3N0cm5jYXQoYnVmLHNlcCxDS01BWFBBVEgpOworICAgIGRlYnVnKEYxMTAsImRv eGxvZyA1IixidWYsMCk7CisKKyAgICBja3N0cm5jYXQoYnVmLCBzdGF0dXMgPyAiRkFJTEVEIiA6 ICJPSyIsQ0tNQVhQQVRIKTsKKyAgICBsZW4gPSBzdHJsZW4oYnVmKTsKKyAgICBsZWZ0ID0gQ0tN QVhQQVRIKzI1NiAtIGxlbjsKKyAgICBpZiAobGVmdCA8IDIpIGZhdGFsKCJkb3hsb2cgYnVmZmVy IG92ZXJsb3ciKTsKKworICAgIGRlYnVnKEYxMTEsIlhYWCBkb3hsb2cgbGVmdCA1IixidWYsbGVm dCk7CisKKyAgICBkZWJ1ZyhGMTEwLCJkb3hsb2cgYnVmIDEiLCBidWYsIGxlbik7CisgICAgcyA9 IGJ1ZiArIGxlbjsKKyAgICBpZiAoc3RhdHVzID09IDAgJiYgbGVmdCA+IDMyKSB7CisgICAgICAg IGxvbmcgY3BzID0gMEw7CisjaWZkZWYgR0ZUSU1FUgorCWRlYnVnKEYxMDEsIkRPWExPRyBmcHhm c2VjcyIsIiIsKGxvbmcpKGZweGZzZWNzICogMTAwMCkpOworICAgICAgICBpZiAoZnB4ZnNlY3Mp IGNwcyA9IChsb25nKSgoQ0tGTE9BVCkgZnMgLyBmcHhmc2Vjcyk7CisgICAgICAgIHNwcmludGYo cywiJXNcIiUwLjNmc2VjICVsZGNwc1wiIixzZXAsZnB4ZnNlY3MsY3BzKTsKKyNlbHNlCisgICAg ICAgIGlmICh4ZnNlY3MpIGNwcyA9IGZzIC8geGZzZWNzOworICAgICAgICBzcHJpbnRmKHMsIiVz XCIlbGRzZWMgJWxkY3BzXCIiLHNlcCx4ZnNlY3MsY3BzKTsKKyNlbmRpZiAvKiBHRlRJTUVSICov CisgICAgfSBlbHNlIGlmICgoaW50KXN0cmxlbihtc2cpICsgNCA8IGxlZnQpIHsKKyAgICAgICAg c3ByaW50ZihzLCIlc1wiJXNcIiIsc2VwLG1zZyk7CisgICAgfQorICAgIGRlYnVnKEYxMTEsIlhY WCBkb3hsb2cgbGVmdCA1IixidWYsbGVmdCk7CisKKyAgICBkZWJ1ZyhGMTEwLCJkb3hsb2cgNSIs YnVmLDApOworICAgIHggPSB6c291dGwoWlRGSUxFLGJ1Zik7CisgICAgZGVidWcoRjEwMSwiZG94 bG9nIHpzb3V0bCIsIiIseCk7CisgICAgaWYgKHggPCAwKSB0cmFsb2cgPSAwOworfQorI2VuZGlm IC8qIFRMT0cgKi8KKworI2lmbmRlZiBNQUMKKy8qCisgIFRoZSByZXN0IG9mIHRoaXMgZmlsZSBp cyBmb3IgYWxsIGltcGxlbWVudGF0aW9ucyBidXQgdGhlIE1hY2ludG9zaC4KKyovCisKKyNpZmRl ZiBDS19DVVJTRVMKK3N0YXRpYyBpbnQgcmVwYWludCA9IDA7ICAgICAgICAgICAgICAgICAvKiBU cmFuc2ZlciBkaXNwbGF5IG5lZWRzIHJlcGFpbnRpbmcgKi8KKyNlbmRpZiAvKiBDS19DVVJTRVMg Ki8KKworI2lmbmRlZiBOT1hGRVIKKy8qICBDIEggSyBJIE4gVCAgLS0gIENoZWNrIGZvciBjb25z b2xlIGludGVycnVwdHMgICovCisKKy8qCisgIFVzZWQgZHVyaW5nIGZpbGUgdHJhbnNmZXIgaW4g bG9jYWwgbW9kZSBvbmx5OgorICAuIElmIHVzZXIgaGFzIG5vdCB0b3VjaGVkIHRoZSBrZXlib2Fy ZCwgcmV0dXJucyAwIHdpdGggbm8gc2lkZSBlZmZlY3RzLgorICAuIElmIHVzZXIgdHlwZWQgUyBv ciBBIChldGMsIHNlZSBiZWxvdykgcHJpbnRzIHN0YXR1cyBtZXNzYWdlIGFuZCByZXR1cm5zIDAu CisgIC4gSWYgdXNlciB0eXBlZCBYIG9yIEYgKGV0Yywgc2VlIGJlbG93KSByZXR1cm5zIDAgd2l0 aCBjeHNlZW4gc2V0IHRvIDEuCisgIC4gSWYgdXNlciB0eXBlZCBaIG9yIEIgKGV0Yywgc2VlIGJl bG93KSByZXR1cm5zIDAgd2l0aCBjenNlZW4gc2V0IHRvIDEuCisgIC4gSWYgdXNlciB0eXBlZCBF IG9yIEMgKGV0Yywgc2VlIGJlbG93KSByZXR1cm5zIC0xLgorKi8KK2ludAorY2hraW50KCkgewor ICAgIGludCBjaCwgY24sIG9mZDsgbG9uZyB6ejsKKyAgICBpZiAoIXhmcmludCkKKyAgICAgIHJl dHVybigwKTsKKyAgICBpZiAoKCFsb2NhbCkgfHwgKHF1aWV0KSkgcmV0dXJuKDApOyAvKiBPbmx5 IGRvIHRoaXMgaWYgbG9jYWwgJiBub3QgcXVpZXQgKi8KKyNpZmRlZiBkYXRhZ2VuZXJhbAorICAg IGlmIChjb25fcmVhZHNfbXQpICAgICAgICAgICAgICAgICAgIC8qIGlmIGNvbmludF9tdCB0YXNr IGlzIGFjdGl2ZSAqLworICAgICAgaWYgKGNvbmludF9hdmwpIHsgICAgICAgICAgICAgICAgIC8q IGFuZCB0aGVyZSdzIGFuIGludGVycnVwdCBwZW5kaW5nICovCisgICAgICAgICAgY24gPSAxOyAg ICAgICAgICAgICAgICAgICAgICAgLyogcHJvY2VzcyBpdCAqLworICAgICAgICAgIGNoID0gY29u aW50X2NoOworICAgICAgICAgIGNvbmludF9hdmwgPSAwOyAgICAgICAgICAgICAgIC8qIHR1cm4g b2ZmIGZsYWcgc28gY29uaW50X210IGNhbiAqLworICAgICAgfSBlbHNlICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIHByb2NlZWQgKi8KKyAgICAgICAgcmV0dXJuKDApOworICAgIGVsc2Ug ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlmIGNvbmludF9tdCBub3QgYWN0aXZl ICovCisgICAgICBpZiAoKGNoID0gY29uaW5jKDIpKSA8IDApICAgICAgICAgLyogdHJ5IHRvIGdl dCBjaGFyIG1hbnVhbGx5ICovCisgICAgICAgIHJldHVybigwKTsgICAgICAgICAgICAgICAgICAg ICAgLyogSS9PIGVycm9yLCBvciBubyBkYXRhICovCisgICAgICBlbHNlICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogaWYgc3VjY2Vzc2Z1bCwgc2V0IGNuIHNvIHdlICovCisgICAgICAg IGNuID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgLyoga25vdyB3ZSBnb3Qgb25lICovCisg ICAgZGVidWcoRjEwMSwiY2hraW50IGdvdCBrZXlib2FyZCBjaGFyYWN0ZXIiLGNoLGNuKTsKKyNl bHNlIC8qICFkYXRhZ2VuZXJhbCAqLworI2lmZGVmIE5UU0lHCisgICAgeworICAgICAgICBleHRl cm4gaW50IFRsc0luZGV4OworICAgICAgICBzdHJ1Y3QgX3RocmVhZGluZm8gKiB0aHJlYWRpbmZv OworICAgICAgICB0aHJlYWRpbmZvID0gKHN0cnVjdCBfdGhyZWFkaW5mbyAqKSBUbHNHZXRWYWx1 ZShUbHNJbmRleCk7CisgICAgICAgIGlmICh0aHJlYWRpbmZvKSB7CisgICAgICAgICAgICBpZiAo IVdhaXRTZW0odGhyZWFkaW5mby0+RGllU2VtLDApKQorICAgICAgICAgICAgICByZXR1cm4gLTE7 ICAgICAgICAgICAgICAgIC8qIENhbmNlbCBJbW1lZGlhdGVseSAqLworICAgICAgICB9CisgICAg fQorI2VuZGlmIC8qIE5UU0lHICovCisgICAgY24gPSBjb25jaGsoKTsgICAgICAgICAgICAgICAg ICAgICAgLyogQW55IGlucHV0IHdhaXRpbmc/ICovCisgICAgZGVidWcoRjEwMSwiY29uY2hrIiwi Iixjbik7CisgICAgaWYgKGNuIDwgMSkgcmV0dXJuKDApOworICAgIGNoID0gY29uaW5jKDUpIDsK KyAgICBkZWJ1ZyhGMTAxLCJjb25pbmMiLCIiLGNoKTsKKyAgICBpZiAoY2ggPCAwKSByZXR1cm4o MCk7CisjZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KKworICAgIGNoICY9IDAxNzc7CisgICAgc3dp dGNoIChjaCkgeworICAgICAgY2FzZSAnQSc6IGNhc2UgJ2EnOiBjYXNlIDAwMDE6ICAgIC8qIFN0 YXR1cyByZXBvcnQgKi8KKyAgICAgIGNhc2UgJ1MnOiBjYXNlICdzJzoKKyAgICAgICAgaWYgKGZk aXNwbGEgIT0gWFlGRF9SICYmIGZkaXNwbGEgIT0gWFlGRF9TICYmIGZkaXNwbGEgIT0gWFlGRF9O KQorICAgICAgICAgIHJldHVybigwKTsgICAgICAgICAgICAgICAgICAgIC8qIE9ubHkgZm9yIHNl cmlhbCwgc2ltcGxlIG9yIG5vbmUgKi8KKyAgICAgICAgb2ZkID0gZmRpc3BsYTsgICAgICAgICAg ICAgICAgICAvKiBbTUZdIFNhdmUgZmlsZSBkaXNwbGF5IHR5cGUgKi8KKyAgICAgICAgaWYgKGZk aXNwbGEgPT0gWFlGRF9OKQorICAgICAgICAgIGZkaXNwbGEgPSBYWUZEX1I7ICAgICAgICAgICAg IC8qIFtNRl0gUHJldGVuZCBzZXJpYWwgaWYgbm8gZGlzcGxheSAqLworICAgICAgICB4eHNjcmVl bihTQ1JfVE4sMCwwbCwiU3RhdHVzIHJlcG9ydDoiKTsKKyAgICAgICAgeHhzY3JlZW4oU0NSX1RO LDAsMGwsIiBmaWxlIHR5cGU6ICIpOworICAgICAgICBpZiAoYmluYXJ5KSB7CisgICAgICAgICAg ICBzd2l0Y2goYmluYXJ5KSB7CisgICAgICAgICAgICAgIGNhc2UgWFlGVF9MOiB4eHNjcmVlbihT Q1JfVFosMCwwbCwibGFiZWxlZCIpOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBYWUZUX0k6 IHh4c2NyZWVuKFNDUl9UWiwwLDBsLCJpbWFnZSIpOyBicmVhazsKKyAgICAgICAgICAgICAgY2Fz ZSBYWUZUX1U6IHh4c2NyZWVuKFNDUl9UWiwwLDBsLCJiaW5hcnkgdW5kZWZpbmVkIik7IGJyZWFr OworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICBjYXNlIFhZRlRfQjogeHhz Y3JlZW4oU0NSX1RaLDAsMGwsImJpbmFyeSIpOyBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg ICAgfSBlbHNlIHsKKyNpZmRlZiBOT0NTRVRTCisgICAgICAgICAgICB4eHNjcmVlbihTQ1JfVFos MCwwbCwidGV4dCIpOworI2Vsc2UKKyAgICAgICAgICAgIHh4c2NyZWVuKFNDUl9UVSwwLDBsLCJ0 ZXh0LCAiKTsKKyAgICAgICAgICAgIGlmICh0Y2hhcnNldCA9PSBUQ19UUkFOU1AgfHwgeGZyeGxh ID09IDApIHsKKyAgICAgICAgICAgICAgICB4eHNjcmVlbihTQ1JfVFosMCwwbCwidHJhbnNwYXJl bnQiKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKHdoYXQgJiBX X1NFTkQpIHsKKyAgICAgICAgICAgICAgICAgICAgeHhzY3JlZW4oU0NSX1RaLDAsMGwsdGNzaW5m b1t0Y2hhcnNldF0ua2V5d29yZCk7CisgICAgICAgICAgICAgICAgICAgIHh4c2NyZWVuKFNDUl9U VSwwLDBsLCIgPT4gIik7CisgICAgICAgICAgICAgICAgICAgIHh4c2NyZWVuKFNDUl9UWiwwLDBs LGZjc2luZm9bZmNoYXJzZXRdLmtleXdvcmQpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg ICAgICAgICAgICAgICAgICAgIHh4c2NyZWVuKFNDUl9UWiwwLDBsLGZjc2luZm9bZmNoYXJzZXRd LmtleXdvcmQpOworICAgICAgICAgICAgICAgICAgICB4eHNjcmVlbihTQ1JfVFUsMCwwbCwiID0+ ICIpOworICAgICAgICAgICAgICAgICAgICB4eHNjcmVlbihTQ1JfVFosMCwwbCx0Y3NpbmZvW3Rj aGFyc2V0XS5rZXl3b3JkKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisjZW5k aWYgLyogTk9DU0VUUyAqLworICAgICAgICB9CisgICAgICAgIHh4c2NyZWVuKFNDUl9RRSwwLGZp bGNudCwiIGZpbGUgbnVtYmVyIik7CisgICAgICAgIGlmIChmc2l6ZSkgeHhzY3JlZW4oU0NSX1FF LDAsZnNpemUsIiBzaXplIik7CisgICAgICAgIHh4c2NyZWVuKFNDUl9RRSwwLGZmYywiIGNoYXJh Y3RlcnMgc28gZmFyIik7CisgICAgICAgIGlmIChmc2l6ZSA+IDBMKSB7CisjaWZkZWYgQ0tfUkVT RU5ECisgICAgICAgICAgICB6eiA9IHdoYXQgJiBXX1NFTkQgPyBzZW5kc3RhcnQgOiB3aGF0ICYg V19SRUNWID8gcnNfbGVuIDogMDsKKyAgICAgICAgICAgIHp6ID0gKCAoZmZjICsgenopICogMTAw TCApIC8gZnNpemU7CisjZWxzZQorICAgICAgICAgICAgenogPSAoIGZmYyAqIDEwMEwgKSAvIGZz aXplOworI2VuZGlmIC8qIENLX1JFU0VORCAqLworICAgICAgICAgICAgeHhzY3JlZW4oU0NSX1FF LDAsenosICAgICAgIiBwZXJjZW50IGRvbmUiKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoYmN0 dSA9PSA0KSB7ICAgICAgICAgICAgICAgIC8qIEJsb2NrIGNoZWNrICovCisgICAgICAgICAgICB4 eHNjcmVlbihTQ1JfVFUsMCwwTCwiIGJsb2NrIGNoZWNrOiAiKTsKKyAgICAgICAgICAgIHh4c2Ny ZWVuKFNDUl9UWiwwLDBMLCJibGFuay1mcmVlLTIiKTsKKyAgICAgICAgfSBlbHNlIHh4c2NyZWVu KFNDUl9RRSwwLChsb25nKWJjdHUsICAiIGJsb2NrIGNoZWNrIik7CisgICAgICAgIHh4c2NyZWVu KFNDUl9RRSwwLChsb25nKXJwdGZsZywiIGNvbXByZXNzaW9uIik7CisgICAgICAgIHh4c2NyZWVu KFNDUl9RRSwwLChsb25nKWVicWZsZywiIDh0aC1iaXQgcHJlZml4aW5nIik7CisgICAgICAgIHh4 c2NyZWVuKFNDUl9RRSwwLChsb25nKWxzY2FwdSwiIGxvY2tpbmcgc2hpZnRzIik7CisgICAgICAg IGlmICghbmV0d29yaykKKyAgICAgICAgICB4eHNjcmVlbihTQ1JfUUUsMCwgc3BlZWQsICIgc3Bl ZWQiKTsKKyAgICAgICAgaWYgKHdoYXQgJiBXX1NFTkQpCisKKyAgICAgICAgICB4eHNjcmVlbihT Q1JfUUUsMCxzcHNpeiwgIiBwYWNrZXQgbGVuZ3RoIik7CisgICAgICAgIGVsc2UgaWYgKHdoYXQg JiBXX1JFQ1YgfHwgd2hhdCAmIFdfUkVNTykKKyAgICAgICAgICB4eHNjcmVlbihTQ1JfUUUsMCx1 cnBzaXosIiBwYWNrZXQgbGVuZ3RoIik7CisgICAgICAgIHh4c2NyZWVuKFNDUl9RRSwwLHdzbG90 cywgICIgd2luZG93IHNsb3RzIik7CisgICAgICAgIGZkaXNwbGEgPSBvZmQ7IC8qIFtNRl0gUmVz dG9yZSBmaWxlIGRpc3BsYXkgdHlwZSAqLworICAgICAgICByZXR1cm4oMCk7CisKKyAgICAgIGNh c2UgJ0InOiBjYXNlICdiJzogY2FzZSAwMDAyOiAgICAvKiBDYW5jZWwgYmF0Y2ggKi8KKyAgICAg IGNhc2UgJ1onOiBjYXNlICd6JzogY2FzZSAwMDMyOgorICAgICAgICBjenNlZW4gPSAxOworICAg ICAgICBpbnRlcnJ1cHRlZCA9IDE7CisgICAgICAgIHh4c2NyZWVuKFNDUl9TVCxTVF9NU0csMGws CisgICAgICAgICAgICAgICAgICgoKHdoYXQgJiBXX1JFQ1YpICYmICh3c2xvdHMgPiAxKSkgPwor ICAgICAgICAgICAgICAgICAgIkNhbmNlbGluZyBiYXRjaCwgd2FpdC4uLiAiIDoKKyAgICAgICAg ICAgICAgICAgICJDYW5jZWxpbmcgYmF0Y2guLi4gIikKKyAgICAgICAgICAgICAgICAgKTsKKyAg ICAgICAgcmV0dXJuKDApOworCisgICAgICBjYXNlICdGJzogY2FzZSAnZic6IGNhc2UgMDAwNjog ICAgLyogQ2FuY2VsIGZpbGUgKi8KKyAgICAgIGNhc2UgJ1gnOiBjYXNlICd4JzogY2FzZSAwMDMw OgorICAgICAgICBjeHNlZW4gPSAxOworICAgICAgICBpbnRlcnJ1cHRlZCA9IDE7CisgICAgICAg IHh4c2NyZWVuKFNDUl9TVCxTVF9NU0csMGwsCisgICAgICAgICAgICAgICAgICgoKHdoYXQgJiBX X1JFQ1YpICYmICh3c2xvdHMgPiAxKSkgPworICAgICAgICAgICAgICAgICAgIkNhbmNlbGluZyBm aWxlLCB3YWl0Li4uICIgOgorICAgICAgICAgICAgICAgICAgIkNhbmNlbGluZyBmaWxlLi4uICIp CisgICAgICAgICAgICAgICAgICk7CisgICAgICAgIHJldHVybigwKTsKKworICAgICAgY2FzZSAn Uic6IGNhc2UgJ3InOiBjYXNlIDAwMjI6ICAgIC8qIFJlc2VuZCBwYWNrZXQgKi8KKyAgICAgIGNh c2UgMDAxNTogY2FzZSAwMDEyOgorI2lmZGVmIFNUUkVBTUlORworICAgICAgICBpZiAoc3RyZWFt aW5nKQorICAgICAgICAgIHJldHVybigwKTsKKyNlbmRpZiAvKiBTVFJFQU1JTkcgKi8KKyAgICAg ICAgeHhzY3JlZW4oU0NSX1NULFNUX01TRywwbCwiUmVzZW5kaW5nIHBhY2tldC4uLiAiKTsKKyAg ICAgICAgbnVtZXJycysrOworICAgICAgICByZXNlbmQod2lubG8pOworICAgICAgICByZXR1cm4o MCk7CisKKyNpZmRlZiBkYXRhZ2VuZXJhbAorICAgICAgY2FzZSAnXDAzJzogICAgICAgICAgICAg ICAgICAgICAgIC8qIFdlJ3JlIG5vdCB0cmFwcGluZyBeQydzIHdpdGggKi8KKyAgICAgICAgdHJh cCgwKTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBzaWduYWxzLCBzbyB3ZSBjaGVjayBoZXJl ICAgICovCisjZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KKworICAgICAgY2FzZSAnQyc6IGNhc2Ug J2MnOiAgICAgICAgICAgICAgIC8qIEN0cmwtQyAqLworI2lmbmRlZiBkYXRhZ2VuZXJhbAorICAg ICAgY2FzZSAnXDAzJzoKKyNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLworCisgICAgICBjYXNlICdF JzogY2FzZSAnZSc6ICAgICAgICAgICAgICAgLyogU2VuZCBlcnJvciBwYWNrZXQgKi8KKyAgICAg IGNhc2UgMDAwNToKKyAgICAgICAgaW50ZXJydXB0ZWQgPSAxOworICAgICAgICByZXR1cm4oLTEp OworCisjaWZkZWYgQ0tfQ1VSU0VTCisgICAgICBjYXNlIDAwMTQ6ICAgICAgICAgICAgICAgICAg ICAgICAgLyogQ3RybC1MIHRvIHJlZnJlc2ggc2NyZWVuICovCisgICAgICBjYXNlICdMJzogY2Fz ZSAnbCc6ICAgICAgICAgICAgICAgLyogQWxzbyBhY2NlcHQgTCAodXBwZXIsIGxvd2VyKSAqLwor ICAgICAgY2FzZSAwMDI3OiAgICAgICAgICAgICAgICAgICAgICAgIC8qIEN0cmwtVyBzeW5vbnlt IGZvciBWTVMgJiBJbmdyZXMgKi8KKyAgICAgICAgcmVwYWludCA9IDE7CisgICAgICAgIHJldHVy bigwKTsKKyNlbmRpZiAvKiBDS19DVVJTRVMgKi8KKworICAgICAgY2FzZSAnVCc6CisgICAgICBj YXNlICd0JzoJCQkJLyogVHVybiBvbiBkZWJ1Zy1sb2cgdGltZXN0YW1wcyAqLworI2lmZGVmIERF QlVHCisJeworCSAgICBleHRlcm4gaW50IGRlYnRpbTsKKwkgICAgaWYgKGNoID09ICdUJykgewor CQlkZWJ0aW0gPSAxOworCQl4eHNjcmVlbihTQ1JfU1QsU1RfTVNHLDBsLAorCQkJICJEZWJ1ZyB0 aW1lc3RhbXBzIE9uLi4uICIpOworCSAgICB9IGVsc2UgeworCQlkZWJ0aW0gPSAxOworCQl4eHNj cmVlbihTQ1JfU1QsU1RfTVNHLDBsLAorCQkJICJEZWJ1ZyB0aW1lc3RhbXBzIE9mZi4uLiAiKTsK KwkgICAgfQorCX0KKyNlbmRpZiAvKiBERUJVRyAqLworCXJldHVybigwKTsKKworICAgICAgY2Fz ZSAnRCc6CisjaWZkZWYgREVCVUcKKwlpZiAoIWRlYmxvZykgeworCSAgICBkZWJvcG4oImRlYnVn LmxvZyIsMCk7CisJICAgIGlmIChkZWJsb2cpIHsKKwkJeHhzY3JlZW4oU0NSX1NULFNUX01TRyww bCwiZGVidWcubG9nIG9wZW4uLi4gIik7CisJICAgIH0gZWxzZSB7CisJCXh4c2NyZWVuKFNDUl9T VCxTVF9NU0csMGwsImRlYnVnLmxvZyBvcGVuIEZBSUxFRC4uLiAiKTsKKwkgICAgfQorCX0gZWxz ZSB7CisJICAgIHh4c2NyZWVuKFNDUl9TVCxTVF9NU0csMGwsIkRlYnVnIGxvZyBPbi4uLiAiKTsK Kwl9CisJaWYgKGRlYmxvZykKKwkgIGRlYm9rID0gMTsKKyNlbmRpZiAvKiBERUJVRyAqLworCXJl dHVybigwKTsKKworICAgICAgY2FzZSAnZCc6CQkJCS8qIFR1cm4gb2ZmIGRlYnVnZ2luZyAqLwor I2lmZGVmIERFQlVHCisJaWYgKGRlYmxvZykKKwkgIHh4c2NyZWVuKFNDUl9TVCxTVF9NU0csMGws IkRlYnVnIGxvZyBPZmYuLi4gIik7CisJZGVib2sgPSAwOworI2VuZGlmIC8qIERFQlVHICovCisJ cmV0dXJuKDApOworCisgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgLyog QW55dGhpbmcgZWxzZSwgcHJpbnQgbWVzc2FnZSAqLworICAgICAgICBpbnRtc2coMUwpOworICAg ICAgICByZXR1cm4oMCk7CisgICAgfQorfQorCisvKiAgSSBOIFQgTSBTIEcgIC0tICBJc3N1ZSBt ZXNzYWdlIGFib3V0IHRlcm1pbmFsIGludGVycnVwdHMgICovCisKK1ZPSUQKKyNpZmRlZiBDS19B TlNJQworaW50bXNnKGxvbmcgbikKKyNlbHNlCitpbnRtc2cobikgbG9uZyBuOworI2VuZGlmIC8q IENLX0FOU0lDICovCisvKiBpbnRtc2cgKi8geworI2lmZGVmIENLX05FRURfU0lHCisgICAgY2hh ciBidWZbODBdOworI2VuZGlmIC8qIENLX05FRURfU0lHICovCisKKyAgICBpZiAoIWRpc3BsYSB8 fCBxdWlldCkgICAgICAgICAgICAgICAvKiBOb3QgaWYgd2UncmUgYmVpbmcgcXVpZXQgKi8KKyAg ICAgIHJldHVybjsKKyAgICBpZiAoc2VydmVyICYmICghc3J2ZGlzIHx8IG4gPiAtMUwpKSAvKiBT cGVjaWFsIGZvciBzZXJ2ZXIgKi8KKyAgICAgIHJldHVybjsKKyNpZmRlZiBDS19ORUVEX1NJRwor ICAgIGJ1ZlswXSA9IE5VTDsgICAgICAgICAgICAgICAgICAgICAgIC8qIEtlZXAgY29tcGlsZXJz IGhhcHB5ICovCisjZW5kaWYgLyogQ0tfTkVFRF9TSUcgKi8KKyNpZm5kZWYgT1hPUworI2lmZGVm IFNWT1JQT1NJWAorICAgIGNvbmNoaygpOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENs ZWFyIG91dCBwZW5kaW5nIGVzY2FwZS1zaWduYWxzICovCisjZW5kaWYgLyogU1ZPUlBPU0lYICov CisjZW5kaWYgLyogISBPWE9TICovCisjaWZkZWYgVk1TCisgICAgY29ucmVzKCk7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogU28gQ3RybC1DIHdpbGwgd29yayAqLworI2VuZGlmIC8qIFZN UyAqLworICAgIGlmICgoIXNlcnZlciAmJiBuID09IDFMKSB8fCAoc2VydmVyICYmIG4gPCAwTCkp IHsKKworI2lmZGVmIENLX05FRURfU0lHCisgICAgICAgIGlmICh4ZnJpbnQpIHsKKwkgICAgY2tt YWttc2coYnVmLAorCQkgICAgIDgwLAorCQkgICAgICJUeXBlIGVzY2FwZSBjaGFyYWN0ZXIgKCIs CisJCSAgICAgZGJjaHIoZXNjYXBlKSwKKwkJICAgICAiKSBmb2xsb3dlZCBieToiLAorCQkgICAg IE5VTEwKKwkJICAgICApOworICAgICAgICAgICAgeHhzY3JlZW4oU0NSX1ROLDAsMGwsYnVmKTsK KyAgICAgICAgfQorI2VuZGlmIC8qIENLX05FRURfU0lHICovCisKKyAgICAgICAgaWYgKHhmcmlu dCkgeworICAgICAgICAgICAgaWYgKHByb3RvY29sID09IFBST1RPX0spIHsKKyB4eHNjcmVlbihT Q1JfVE4sMCwwbCwiWCB0byBjYW5jZWwgZmlsZSwgIENSIHRvIHJlc2VuZCBjdXJyZW50IHBhY2tl dCIpOworIHh4c2NyZWVuKFNDUl9UTiwwLDBsLCJaIHRvIGNhbmNlbCBncm91cCwgQSBmb3Igc3Rh dHVzIHJlcG9ydCIpOworIHh4c2NyZWVuKFNDUl9UTiwwLDBsLCJFIHRvIHNlbmQgRXJyb3IgcGFj a2V0LCBDdHJsLUMgdG8gcXVpdCBpbW1lZGlhdGVseTogIik7CisgICAgICAgICAgICB9IGVsc2Ug eworICAgICAgICAgICAgICAgIHh4c2NyZWVuKFNDUl9UTiwwLDBsLCJDdHJsLUMgdG8gY2FuY2Vs IGZpbGUgdHJhbnNmZXI6ICIpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAg ICAgICAgICAgeHhzY3JlZW4oU0NSX1ROLDAsMGwsIlRyYW5zZmVyIGludGVycnVwdGlvbiBkaXNh YmxlZC4gIik7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSB4eHNjcmVlbihTQ1JfVFUsMCww bCwiICIpOworfQorCisjaWZuZGVmIE5PRElTUExBWQorc3RhdGljIGludCBuZXdkcHkgPSAwOyAg ICAgICAgICAgICAgICAgIC8qIE5ldyBkaXNwbGF5IGZsYWcgKi8KK3N0YXRpYyBjaGFyIGZidWZb ODBdOyAgICAgICAgICAgICAgICAgICAvKiBGaWxlbmFtZSBidWZmZXIgKi8KK3N0YXRpYyBjaGFy IGFidWZbODBdOyAgICAgICAgICAgICAgICAgICAvKiBBcy1uYW1lIGJ1ZmZlciAqLworc3RhdGlj IGNoYXIgYTJidWZbODBdOyAgICAgICAgICAgICAgICAgIC8qIFNlY29uZCBBcy1uYW1lIGJ1ZmZl ciAqLworc3RhdGljIENLX09GRl9UIG9sZGZmYyA9IDBMOworc3RhdGljIENLX09GRl9UIGRvdHMg PSAwTDsKK3N0YXRpYyBpbnQgaHBvcyA9IDA7CisKK3N0YXRpYyBWT0lEICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBJbml0aWFsaXplIFNlcmlhbCBvciBDUlQgZGlzcGxheSAqLworZHB5 aW5pdCgpIHsKKyAgICBpbnQgbSA9IDAsIG4gPSAwOworICAgIGNoYXIgKiBzID0gIiI7CisKKyAg ICBuZXdkcHkgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgRG9uJ3QgZG8gdGhpcyBh Z2FpbiAqLworICAgIG9sZGZmYyA9IChDS19PRkZfVCkwOwkJLyogIFJlc2V0IHRoaXMgKi8KKyAg ICBkb3RzID0gKENLX09GRl9UKTA7CQkJLyogIGFuZCB0aGlzLi4gKi8KKyAgICBvbGRjcHMgPSBj cHMgPSAwTDsKKworICAgIGNvbm9sbCgiIik7CQkJCS8qIE5ldyBsaW5lICovCisgICAgaWYgKHdo YXQgJiBXX1NFTkQpIHMgPSAiU2VuZGluZzogIjsJLyogQWN0aW9uICovCisgICAgZWxzZSBpZiAo d2hhdCAmIFdfUkVDVikgcyA9ICJSZWNlaXZpbmc6ICI7CisgICAgbiA9IChpbnQpc3RybGVuKHMp ICsgKGludClzdHJsZW4oZmJ1Zik7CisgICAgY29ub2woZmJ1Zik7CisgICAgbSA9IChpbnQpc3Ry bGVuKGFidWYpICsgNDsKKyAgICBpZiAobiArIG0gPiBjbWRfY29scykgeworICAgICAgICBjb25v bGwoIiIpOworICAgICAgICBuID0gMDsKKyAgICB9IGVsc2UKKyAgICAgIG4gKz0gbTsKKyAgICBp ZiAoKmFidWYpIHsKKyAgICAgICAgY29ub2woIiA9PiAiKTsKKyAgICAgICAgY29ub2woYWJ1Zik7 CisgICAgfQorICAgIG0gPSAoaW50KXN0cmxlbihhMmJ1ZikgKyA0OworICAgIGlmIChuICsgbSA+ IGNtZF9jb2xzKSB7CisgICAgICAgIGNvbm9sbCgiIik7CisgICAgICAgIG4gPSAwOworICAgIH0g ZWxzZQorICAgICAgbiArPSBtOworICAgIGlmICgqYTJidWYpIHsKKyAgICAgICAgY29ub2woIiA9 PiAiKTsKKyAgICAgICAgY29ub2woYTJidWYpOworICAgIH0KKyAgICAqZmJ1ZiA9IE5VTDsgKmFi dWYgPSBOVUw7ICphMmJ1ZiA9IE5VTDsKKyAgICBjb25vbGwoIiIpOworICAgIGlmIChmc2l6ZSA+ IChDS19PRkZfVCktMSkgewkJLyogU2l6ZSAqLworICAgICAgICBzcHJpbnRmKGZidWYsIlNpemU6 ICVzLCBUeXBlOiAiLGNrZnN0b2EoZnNpemUpKTsgLyogU0FGRSAoODApICovCisgICAgICAgIGNv bm9sKGZidWYpOyAqZmJ1ZiA9IE5VTDsKKyAgICB9IGVsc2UgY29ub2woIlNpemU6IHVua25vd24s IFR5cGU6ICIpOworICAgIGlmIChiaW5hcnkpIHsJCQkvKiBUeXBlICovCisgICAgICAgIHN3aXRj aChiaW5hcnkpIHsKKyAgICAgICAgICAgICAgY2FzZSBYWUZUX0w6IGNvbm9sKCJsYWJlbGVkIik7 IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIFhZRlRfSTogY29ub2woImltYWdlIik7IGJyZWFr OworICAgICAgICAgICAgICBjYXNlIFhZRlRfVTogY29ub2woImJpbmFyeSB1bmRlZmluZWQiKTsg YnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgIGNhc2UgWFlGVF9C OiBjb25vbCgiYmluYXJ5Iik7IGJyZWFrOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyNpZmRl ZiBOT0NTRVRTCisgICAgICAgIGNvbm9sKCJ0ZXh0Iik7CisjZWxzZQorICAgICAgICBjb25vbCgi dGV4dCwgIik7CisgICAgICAgIGlmICh0Y2hhcnNldCA9PSBUQ19UUkFOU1AgfHwgeGZyeGxhID09 IDApIHsKKyAgICAgICAgICAgIGNvbm9sKCJ0cmFuc3BhcmVudCIpOworICAgICAgICB9IGVsc2Ug eworICAgICAgICAgICAgaWYgKHdoYXQgJiBXX1NFTkQpIHsKKyAgICAgICAgICAgICAgICBjb25v bChmY3NpbmZvW2ZjaGFyc2V0XS5rZXl3b3JkKTsKKyAgICAgICAgICAgICAgICBjb25vbCgiID0+ ICIpOworICAgICAgICAgICAgICAgIGNvbm9sKHRjc2luZm9bdGNoYXJzZXRdLmtleXdvcmQpOwor ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBjb25vbCh0Y3NpbmZvW3RjaGFy c2V0XS5rZXl3b3JkKTsKKyAgICAgICAgICAgICAgICBjb25vbCgiID0+ICIpOworICAgICAgICAg ICAgICAgIGNvbm9sKGZjc2luZm9bZmNoYXJzZXRdLmtleXdvcmQpOworICAgICAgICAgICAgfQor ICAgICAgICB9CisjZW5kaWYgLyogTk9DU0VUUyAqLworICAgIH0KKyNpZmRlZiBTVFJFQU1JTkcK KyAgICBpZiAoc3RyZWFtaW5nKQorICAgICAgY29ub2woIiwgU1RSRUFNSU5HIik7CisjZW5kaWYg LyogU1RSRUFNSU5HICovCisgICAgY29ub2xsKCIiKTsKKworICAgIGlmIChmZGlzcGxhID09IFhZ RkRfUykgeyAgICAgICAgICAgIC8qIENSVCBmaWVsZCBoZWFkaW5ncyAqLworLyoKKyAgRGVmaW5l IENLX0NQUyB0byBzaG93IGN1cnJlbnQgdHJhbnNmZXIgcmF0ZS4KKyAgTGVhdmUgaXQgdW5kZWZp bmVkIHRvIHNob3cgZXN0aW1hdGVkIHRpbWUgcmVtYWluaW5nLgorICBFc3RpbWF0ZWQtdGltZS1y ZW1haW5pbmcgY29kZSBmcm9tIEFuZHkgRnlmZSwgbm90IHRlc3RlZCBvbgorICBwYXRob2xvZ2lj YWwgY2FzZXMuCisqLworI2RlZmluZSBDS19DUFMKKworI2lmZGVmIENLX0NQUworICAgICAgICBj b25vbGwoIiAgICBGaWxlICAgUGVyY2VudCAgICAgICBQYWNrZXQiKTsKKyAgICAgICAgY29ub2xs KCIgICAgQnl0ZXMgIERvbmUgICAgIENQUyAgTGVuZ3RoIik7CisjZWxzZQorICAgICAgICBjb25v bGwoIiAgICBGaWxlICAgUGVyY2VudCAgU2VjcyBQYWNrZXQiKTsKKyAgICAgICAgY29ub2xsKCIg ICAgQnl0ZXMgIERvbmUgICAgIExlZnQgTGVuZ3RoIik7CisjZW5kaWYgLyogQ0tfQ1BTICovCisg ICAgICAgIG5ld2RweSA9IDA7CisgICAgfQorICAgIGhwb3MgPSAwOworfQorCisvKgorICBzaG93 cGt0KGMpCisgIGMgPSBjb21wbGV0aW9uIGNvZGU6IDAgbWVhbnMgdHJhbnNmZXIgaW4gcHJvZ3Jl c3MsIG5vbnplcm8gbWVhbnMgaXQncyBkb25lLgorICBTaG93IHRoZSBmaWxlIHRyYW5zZmVyIHBy b2dyZXNzIGNvdW50ZXIgYW5kIHBlcmhhcHMgdmVyYm9zZSBwYWNrZXQgdHlwZS4KKyovCitWT0lE CisjaWZkZWYgQ0tfQU5TSUMKK3Nob3dwa3QoY2hhciBjKQorI2Vsc2UKK3Nob3dwa3QoYykgY2hh ciBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCisvKiBzaG93cGt0ICovIHsKKworI2lmbmRlZiBH RlRJTUVSCisgICAgbG9uZyBldDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRWxhcHNl ZCB0aW1lLCBlbnRpcmUgYmF0Y2ggICovCisjZW5kaWYgLyogR0ZUSU1FUiAqLworICAgIENLX09G Rl9UIGhvd2ZhcjsJCQkvKiBIb3cgZmFyIGludG8gZmlsZSAqLworICAgIGxvbmcgcGQ7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIFBlcmNlbnQgZG9uZSwgdGhpcyBmaWxlICAgICAqLwor ICAgIGxvbmcgdHA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRyYW5zZmVyIHJhdGUs IGVudGlyZSBiYXRjaCAqLworICAgIGxvbmcgcHM7ICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIFBhY2tldCBzaXplLCBjdXJyZW50IHBhY2tldCAqLworICAgIENLX09GRl9UIG15dGZjOwkJ CS8qIExvY2FsIGNvcHkgb2YgYnl0ZSBjb3VudGVyICAqLworCisjaWZkZWYgR0ZUSU1FUgorICAg IENLRkxPQVQgdG5vdzsKKyNlbmRpZiAvKiBHRlRJTUVSICovCisKKyAgICBpZiAobmV3ZHB5KSAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBQdXQgdXAgZmlsZW5hbWVzLCBldGMsICovCisgICAg ICBkcHlpbml0KCk7ICAgICAgICAgICAgICAgICAgICAgICAgLyogaWYgdGhleSdyZSBub3QgdGhl cmUgYWxyZWFkeS4gKi8KKworICAgIGhvd2ZhciA9IGZmYzsgICAgICAgICAgICAgICAgICAgICAg IC8qIEhvdyBmYXIgKi8KKy8qCisgIENhbGN1bGF0ZSBDUFMgcmF0ZSBldmVuIGlmIG5vdCBkaXNw bGF5aW5nIG9uIHNjcmVlbiBmb3IgdXNlIGluIGZpbGUKKyAgdHJhbnNmZXIgc3RhdGlzdGljcy4K KyovCisjaWZkZWYgR0ZUSU1FUgorICAgIHRub3cgPSBnZnRpbWVyKCk7ICAgICAgICAgICAgICAg ICAgIC8qIFRpbWUgc2luY2Ugd2Ugc3RhcnRlZCAqLworICAgIHBzID0gKHdoYXQgJiBXX1JFQ1Yp ID8gcnBrdGwgOiBzcGt0bDsgLyogUGFja2V0IHNpemUgKi8KKyNpZmRlZiBDS19SRVNFTkQKKyAg ICBpZiAod2hhdCAmIFdfU0VORCkJCQkvKiBJbiBjYXNlIHdlIGRpZG4ndCBzdGFydCBhdCAqLwor ICAgICAgaG93ZmFyICs9IHNlbmRzdGFydDsgICAgICAgICAgICAgIC8qICB0aGUgYmVnaW5uaW5n Li4uICovCisgICAgZWxzZSBpZiAod2hhdCAmIFdfUkVDVikKKyAgICAgIGhvd2ZhciArPSByc19s ZW47CisjZW5kaWYgLyogQ0tfUkVTRU5EICovCisgICAgcGQgPSAtMTsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogUGVyY2VudCBkb25lLiAqLworICAgIGlmIChjID09IE5VTCkgeyAgICAg ICAgICAgICAgICAgICAgIC8qIFN0aWxsIGdvaW5nLCBmaWd1cmUgJSBkb25lICovCisgICAgICAg IGlmICghZnNpemUpIHJldHVybjsJCS8qIEVtcHR5IGZpbGUsIGRvbid0IGJvdGhlciAqLworICAg ICAgICBwZCA9IChmc2l6ZSA+IDk5KSA/IChob3dmYXIgLyAoZnNpemUgLyAoQ0tfT0ZGX1QpMTAw KSkgOiAwOworICAgICAgICBpZiAocGQgPiAxMDApIHBkID0gMTAwOyAgICAgICAgIC8qIEV4cGFu c2lvbiAqLworICAgIH0KKyAgICBpZiAoYyAhPSBOVUwpCisgICAgICBpZiAoIWN4c2VlbiAmJiAh ZGlzY2FyZCAmJiAhY3pzZWVuKQorICAgICAgICBwZCA9IDEwMDsgICAgICAgICAgICAgICAgICAg ICAgIC8qIEZpbGUgY29tcGxldGUsIHNvIDEwMCUuICovCisKKyAgICBteXRmYyA9IChwZCA8IDEw MCkgPyB0ZmMgKyBmZmMgOiB0ZmM7ICAgIC8qIENQUyAqLworICAgIHRwID0gKGxvbmcpKCh0bm93 ID4gMC4wKSA/IChDS0ZMT0FUKSBteXRmYyAvIHRub3cgOiAwKTsKKyAgICBpZiAoYyAmJiAodHAg PT0gMCkpCisgICAgICB0cCA9IGZmYzsKKworICAgIGNwcyA9IHRwOyAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIFNldCBnbG9iYWwgdmFyaWFibGUgKi8KKyAgICBpZiAoY3BzID4gcGVha2Nw cyAmJiAgICAgICAgICAgICAgICAvKiBQZWFrIHRyYW5zZmVyIHJhdGUgKi8KKyAgICAgICAgICgo d2hhdCAmIFdfU0VORCAmJiBzcGFja2V0cyA+IHdzbG90cyArIDQpIHx8CisJICAoISh3aGF0ICYg V19TRU5EKSAmJiBzcGFja2V0cyA+IDEwKSkpIHsKKyAgICAgICAgcGVha2NwcyA9IGNwczsKKyAg ICB9CisKKyNlbHNlICAvKiBOb3QgR0ZUSU1FUiAqLworCisgICAgZXQgPSBndGltZXIoKTsgICAg ICAgICAgICAgICAgICAgICAgLyogRWxhcHNlZCB0aW1lICAqLworICAgIHBzID0gKHdoYXQgJiBX X1JFQ1YpID8gcnBrdGwgOiBzcGt0bDsgLyogUGFja2V0IGxlbmd0aCAqLworI2lmZGVmIENLX1JF U0VORAorICAgIGlmICh3aGF0ICYgV19TRU5EKQkJCS8qIEFuZCBpZiB3ZSBkaWRuJ3Qgc3RhcnQg YXQgKi8KKyAgICAgIGhvd2ZhciArPSBzZW5kc3RhcnQ7ICAgICAgICAgICAgICAvKiAgdGhlIGJl Z2lubmluZy4uLiAqLworICAgIGVsc2UgaWYgKHdoYXQgJiBXX1JFQ1YpCisgICAgICBob3dmYXIg Kz0gcnNfbGVuOworI2VuZGlmIC8qIENLX1JFU0VORCAqLworICAgIHBkID0gLTE7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIFBlcmNlbnQgZG9uZS4gKi8KKyAgICBpZiAoYyA9PSBOVUwp IHsgICAgICAgICAgICAgICAgICAgICAvKiBTdGlsbCBnb2luZywgZmlndXJlICUgZG9uZSAqLwor ICAgICAgICBpZiAoZnNpemUgPT0gMEwpIHJldHVybjsgICAgICAgIC8qIEVtcHR5IGZpbGUsIGRv bid0IGJvdGhlciAqLworICAgICAgICBwZCA9IChmc2l6ZSA+IDk5KSA/IChob3dmYXIgLyAoZnNp emUgLyAoQ0tfT0ZGX1QpMTAwKSkgOiAwOworICAgICAgICBpZiAocGQgPiAxMDApIHBkID0gMTAw OyAgICAgICAgIC8qIEV4cGFuc2lvbiAqLworICAgIH0KKyAgICBpZiAoYyAhPSBOVUwpCisgICAg ICBpZiAoIWN4c2VlbiAmJiAhZGlzY2FyZCAmJiAhY3pzZWVuKQorICAgICAgICBwZCA9IDEwMDsg ICAgICAgICAgICAgICAgICAgICAgIC8qIEZpbGUgY29tcGxldGUsIHNvIDEwMCUuICovCisKKwor I2lmbmRlZiBDS19DUFMKKy8qCisgIGZzZWNzID0gdGltZSAoZnJvbSBndGltZXIpIHRoYXQgdGhp cyBmaWxlIHN0YXJ0ZWQgKHNldCBpbiBzZmlsZSgpKS4KKyAgUmF0ZSBzbyBmYXIgaXMgZmZjIC8g KGV0IC0gZnNlY3MpLCAgZXN0aW1hdGVkIHRpbWUgZm9yIHJlbWFpbmluZyBieXRlcworICBpcyAo ZnNpemUgLSBmZmMpIC8gKGZmYyAvIChldCAtIGZzZWNzKSkuCisqLworICAgIHRwID0gKGhvd2Zh ciA+IDApID8gKGZzaXplIC0gaG93ZmFyKSAqIChldCAtIGZzZWNzKSAvIGhvd2ZhciA6IDA7Cisj ZW5kaWYgLyogQ0tfQ1BTICovCisKKyNpZmRlZiBDS19DUFMKKyAgICBteXRmYyA9IChwZCA8IDEw MCkgPyB0ZmMgKyBmZmMgOiB0ZmM7CisgICAgdHAgPSAoZXQgPiAwKSA/IG15dGZjIC8gZXQgOiAw OwkvKiBUcmFuc2ZlciByYXRlICovCisgICAgaWYgKGMgJiYgKHRwID09IDApKQkJCS8qIFdhdGNo IG91dCBmb3Igc3Vic2Vjb25kIHRpbWVzICovCisgICAgICAgIHRwID0gZmZjOworCisgICAgY3Bz ID0gdHA7CQkJCS8qIFNldCBnbG9iYWwgdmFyaWFibGUgKi8KKyAgICBpZiAoY3BzID4gcGVha2Nw cyAmJiAgICAgICAgICAgICAgICAvKiBQZWFrIHRyYW5zZmVyIHJhdGUgKi8KKyAgICAgICAgICgo d2hhdCAmIFdfU0VORCAmJiBzcGFja2V0cyA+IHdzbG90cyArIDQpIHx8CisJICAoISh3aGF0ICYg V19TRU5EKSAmJiBzcGFja2V0cyA+IDEwKSkpIHsKKyAgICAgICAgcGVha2NwcyA9IGNwczsKKyAg ICB9CisjZW5kaWYgLyogQ0tfQ1BTICovCisKKyNlbmRpZiAvKiBHRlRJTUVSICovCisKKyAgICBp ZiAoZmRpc3BsYSA9PSBYWUZEX1MpIHsgICAgICAgICAgICAvKiBDUlQgZGlzcGxheSAqLworICAg ICAgICBjaGFyIGJ1ZmZlclsxMjhdOworCS8qIFRoZXNlIHNwcmludGZzIHNob3VsZCBiZSBzYWZl IHVudGlsIHdlIGhhdmUgMzItZGlnaXQgbnVtYmVycyAqLworCisgICAgICAgIGlmIChwZCA+IC0x TCkKKyAgICAgICAgICBzcHJpbnRmKGJ1ZmZlciwgIiVjJTlzJTVsZCUlJThsZCU4bGQgIiwgQ1Is Y2tmc3RvYShob3dmYXIpLHBkLHRwLHBzKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIHNwcmlu dGYoYnVmZmVyLCAiJWMlOXMgICAgICAlOGxkJThsZCAiLCBDUixja2ZzdG9hKGhvd2ZhciksdHAs cHMpOworICAgICAgICBjb25vbChidWZmZXIpOworICAgICAgICBocG9zID0gMzE7CisgICAgfSBl bHNlIGlmIChmZGlzcGxhID09IFhZRkRfUikgeyAgICAgLyogU0VSSUFMICovCisgICAgICAgIGxv bmcgaSwgazsKKyAgICAgICAgaWYgKGhvd2ZhciAtIG9sZGZmYyA8IDEwMjQpICAgICAvKiBVcGRh dGUgZGlzcGxheSBldmVyeSAxSyAqLworICAgICAgICAgIHJldHVybjsKKyAgICAgICAgb2xkZmZj ID0gaG93ZmFyOyAgICAgICAgICAgICAgICAvKiBUaW1lIGZvciBuZXcgZGlzcGxheSAqLworICAg ICAgICBrID0gKGhvd2ZhciAvIDEwMjRMKSAtIGRvdHM7ICAgIC8qIEhvdyBtYW55IEsgc28gZmFy ICovCisgICAgICAgIGZvciAoaSA9IDBMOyBpIDwgazsgaSsrKSB7CisgICAgICAgICAgICBpZiAo aHBvcysrID4gKGNtZF9jb2xzIC0gMykpIHsgLyogVGltZSB0byB3cmFwPyAqLworICAgICAgICAg ICAgICAgIGNvbm9sbCgiIik7CisgICAgICAgICAgICAgICAgaHBvcyA9IDA7CisgICAgICAgICAg ICB9CisgICAgICAgICAgICBjb25vYygnLicpOyAgICAgICAgICAgICAgICAgLyogUHJpbnQgYSBk b3QgZm9yIHRoaXMgSyAqLworICAgICAgICAgICAgZG90cysrOyAgICAgICAgICAgICAgICAgICAg IC8qIENvdW50IGl0ICovCisgICAgICAgIH0KKyAgICB9Cit9CisKKworLyogIEMgSyBTIEMgUiBF IEUgTiAgLS0gIFNjcmVlbiBkaXNwbGF5IGZ1bmN0aW9uICAqLworCisvKgorICBja3NjcmVlbihm LGMsbixzKQorICAgIGYgLSBhcmd1bWVudCBkZXNjcmlwdG9yCisgICAgYyAtIGEgY2hhcmFjdGVy IG9yIHNtYWxsIGludGVnZXIKKyAgICBuIC0gYSBsb25nIGludGVnZXIKKyAgICBzIC0gYSBzdHJp bmcuCisKKyAgYW5kIGdsb2JhbCBmZGlzcGxhID0gU0VUIEZJTEUgRElTUExBWSB2YWx1ZToKKwor ICAgIFhZRkRfTiA9IE5PTkUKKyAgICBYWUZEX1IgPSBTRVJJQUw6ICAgICBEb3RzLCBldGMsIHdv cmtzIG9uIGFueSB0ZXJtaW5hbCwgZXZlbiBoYXJkY29weS4KKyAgICBYWUZEX1MgPSBDUlQ6ICAg ICAgICBXb3JrcyBvbiBhbnkgQ1JULCB3cml0ZXMgb3ZlciBjdXJyZW50IGxpbmUuCisgICAgWFlG RF9DID0gRlVMTFNDUkVFTjogUmVxdWlyZXMgdGVybWluYWwtZGVwZW5kZW50IHNjcmVlbiBjb250 cm9sLgorICAgIFhZRkRfQiA9IEJSSUVGOiAgICAgIExpa2UgU0VSSUFMIGJ1dCBvbmx5IGZpbGVu YW1lICYgY29tcGxldGlvbiBzdGF0dXMuCisgICAgWFlGRF9HID0gR1VJOyAgICAgICAgV2luZG93 cyBHVUksIHNhbWUgYmVoYXZpb3IgYXMgRlVMTFNDUkVFTgorKi8KK1ZPSUQKKyNpZmRlZiBDS19B TlNJQworY2tzY3JlZW4oaW50IGYsIGNoYXIgYyxDS19PRkZfVCBuLGNoYXIgKnMpCisjZWxzZQor Y2tzY3JlZW4oZixjLG4scykgaW50IGY7IGNoYXIgYzsgQ0tfT0ZGX1QgbjsgY2hhciAqczsKKyNl bmRpZiAvKiBDS19BTlNJQyAqLworLyogc2NyZWVuICovIHsKKyAgICBjaGFyIGJ1Zls4MF07Cisg ICAgaW50IGxlbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTGVuZ3RoIG9mIHN0cmlu ZyAqLworI2lmZGVmIFVOSVgKKyNpZm5kZWYgTk9KQworICAgIGludCBvYmc7CitfUFJPVE9UWVAo IFZPSUQgY29uYmd0LCAoaW50KSApOworI2VuZGlmIC8qIE5PSkMgKi8KKyNlbmRpZiAvKiBVTklY ICovCisgICAgaW50IGZ0cCA9IDA7CisKKyAgICBmdHAgPSAod2hhdCAmIFdfRlRQKSA/IDEgOiAw OwkvKiBGVFAgb3IgS2VybWl0PyAqLworCisgICAgaWYgKCFsb2NhbCAmJiAhZnRwKQkJCS8qIElu IHJlbW90ZSBtb2RlIC0gZG9uJ3QgZG8gdGhpcyAqLworICAgICAgcmV0dXJuOworCisgICAgaWYg KCFzKSBzID0gIiI7CisKKyAgICBpZiAoIWZ4ZF9pbml0ZWQpICAgICAgICAgICAgICAgICAgICAv KiBJbml0aWFsaXplIGlmIG5lY2Vzc2FyeSAqLworICAgICAgZnhkaW5pdChmZGlzcGxhKTsKKwor I2lmZGVmIFVOSVgKKyNpZm5kZWYgTk9KQworICAgIG9iZyA9IGJhY2tncmQ7ICAgICAgICAgICAg ICAgICAgICAgIC8qIFByZXZpb3VzIGJhY2tncm91bmQgc3RhdHVzICovCisgICAgY29uYmd0KDEp OyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2VlIGlmIHJ1bm5pbmcgaW4gYmFja2dyb3Vu ZCAqLworICAgIGlmICghYmFja2dyZCAmJiBvYmcpIHsgICAgICAgICAgICAgIC8qIEp1c3QgY2Ft ZSBpbnRvIGZvcmVncm91bmQ/ICovCisgICAgICAgIGNvbmNiKChjaGFyKWVzY2FwZSk7ICAgICAg ICAgICAgLyogUHV0IGNvbnNvbGUgYmFjayBpbiBDQlJFQUsgbW9kZSAqLworICAgICAgICBzZXRp bnQoKTsgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlc3RvcmUgaW50ZXJydXB0cyAqLworICAg IH0KKyNlbmRpZiAvKiBOT0pDICovCisjZW5kaWYgLyogVU5JWCAqLworCisgICAgaWYgKChmICE9 IFNDUl9XTSkgJiYgKGYgIT0gU0NSX0VNKSkgLyogQWx3YXlzIHVwZGF0ZSB3YXJuaW5ncyAmIGVy cm9ycyAqLworICAgICAgaWYgKCFkaXNwbGEgfHwKKyAgICAgICAgICAoYmFja2dyZCAmJiBiZ3Nl dCkgfHwKKyAgICAgICAgICBmZGlzcGxhID09IFhZRkRfTiB8fAorICAgICAgICAgIChzZXJ2ZXIg JiYgIXNydmRpcykKKyAgICAgICAgICApCisgICAgICAgIHJldHVybjsKKworI2lmZGVmIFZNUwor ICAgIGlmIChmID09IFNDUl9GTikgICAgICAgICAgICAgICAgICAgIC8qIFZNUyAtIHNob3J0ZW4g dGhlIG5hbWUgKi8KKyAgICAgIHMgPSB6cmVsbmFtZShzLHpndGRpcigpKTsKKyNlbmRpZiAvKiBW TVMgKi8KKworICAgIGlmIChkZXN0ID09IERFU1RfUykgICAgICAgICAgICAgICAgIC8qIFNFVCBE RVNUSU5BVElPTiBTQ1JFRU4gKi8KKyAgICAgIHJldHVybjsgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiAgd291bGQgaW50ZXJmZXJlLi4uICovCisKKyNpZmRlZiBLVUkKKyAgICBpZiAoZmRp c3BsYSA9PSBYWUZEX0cpIHsgICAgICAgICAgICAvKiBJZiBndWkgZGlzcGxheSBzZWxlY3RlZCAq LworICAgICAgICBzY3JlZW5nKGYsYyxuLHMpOyAgICAgICAgICAgICAgIC8qIGNhbGwgdGhlIGd1 aSB2ZXJzaW9uICovCisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYgLyogS1VJICovCisj aWZkZWYgQ0tfQ1VSU0VTCisgICAgaWYgKGZkaXNwbGEgPT0gWFlGRF9DKSB7ICAgICAgICAgICAg LyogSWYgZnVsbHNjcmVlbiBkaXNwbGF5IHNlbGVjdGVkICovCisgICAgICAgIHNjcmVlbmMoZixj LG4scyk7ICAgICAgICAgICAgICAgLyogY2FsbCB0aGUgZnVsbHNjcmVlbiB2ZXJzaW9uICovCisg ICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYgLyogQ0tfQ1VSU0VTICovCisKKyAgICBsZW4g PSAoaW50KXN0cmxlbihzKTsgICAgICAgICAgICAgICAvKiBMZW5ndGggb2Ygc3RyaW5nICovCisK KyAgICBzd2l0Y2ggKGYpIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBIYW5kbGUgb3VyIGZ1 bmN0aW9uIGNvZGUgKi8KKyAgICAgIGNhc2UgU0NSX0ZOOiAgICAgICAgICAgICAgICAgICAgICAv KiBGaWxlbmFtZSAqLworICAgICAgICBpZiAoZmRpc3BsYSA9PSBYWUZEX0IpIHsKKyNpZmRlZiBO RVdGVFAKKwkgICAgaWYgKGZ0cCkKKwkgICAgICBwcmludGYoIiAlcyAlcyIsIHdoYXQgJiBXX1NF TkQgPyAiUFVUIiA6ICJHRVQiLCBzKTsKKwkgICAgZWxzZQorI2VuZGlmIC8qIE5FV0ZUUCAqLwor CSAgICAgIHByaW50ZigiICVzICVzIiwgd2hhdCAmIFdfU0VORCA/ICJTRU5EIiA6ICJSRUNWIiwg cyk7CisjaWZkZWYgVU5JWAorICAgICAgICAgICAgZmZsdXNoKHN0ZG91dCk7CisjZW5kaWYgLyog VU5JWCAqLworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisjaWZkZWYgTUFDCisgICAg ICAgIGNvbm9sbCgiIik7IGNvbm9sKHMpOyBjb25vYyhTUCk7IGhwb3MgPSBsZW4gKyAxOworI2Vs c2UKKyAgICAgICAgY2tzdHJuY3B5KGZidWYscyw4MCk7CisgICAgICAgIGFidWZbMF0gPSBhMmJ1 ZlswXSA9IE5VTDsKKyAgICAgICAgbmV3ZHB5ID0gMTsgICAgICAgICAgICAgICAgICAgICAvKiBO ZXcgZmlsZSBzbyByZWZyZXNoIGRpc3BsYXkgKi8KKyNlbmRpZiAvKiBNQUMgKi8KKyAgICAgICAg cmV0dXJuOworCisgICAgICBjYXNlIFNDUl9BTjogICAgICAgICAgICAgICAgICAgICAgLyogQXMt bmFtZSAqLworICAgICAgICBpZiAoZmRpc3BsYSA9PSBYWUZEX0IpIHsKKyNpZmRlZiBDT01NRU5U CisgICAgICAgICAgICBwcmludGYoIihhcyAlcykgIixzKTsKKyNlbmRpZiAvKiBDT01NRU5UICov CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyNpZmRlZiBNQUMKKyAgICAgICAgaWYg KGhwb3MgKyBsZW4gPiA3NSkgeyBjb25vbGwoIiIpOyBocG9zID0gMDsgfQorICAgICAgICBjb25v bCgiPT4gIik7IGNvbm9sKHMpOworICAgICAgICBpZiAoKGhwb3MgKz0gKGxlbiArIDMpKSA+IDc4 KSB7IGNvbm9sbCgiIik7IGhwb3MgPSAwOyB9CisjZWxzZQorICAgICAgICBpZiAoYWJ1ZlswXSkg eworICAgICAgICAgICAgY2tzdHJuY3B5KGEyYnVmLHMsODApOworICAgICAgICB9IGVsc2Ugewor ICAgICAgICAgICAgY2tzdHJuY3B5KGFidWYscyw4MCk7CisgICAgICAgIH0KKyNlbmRpZiAvKiBN QUMgKi8KKyAgICAgICAgcmV0dXJuOworCisgICAgICBjYXNlIFNDUl9GUzogICAgICAgICAgICAg ICAgICAgICAgLyogRmlsZS1zaXplICovCisgICAgICAgIGlmIChmZGlzcGxhID09IFhZRkRfQikg eworICAgICAgICAgICAgcHJpbnRmKCIgKCVzKSAoJXMgYnl0ZSVzKSIsCisjaWZkZWYgTk9JQ1AK KyAgICAgICAgICAgICAgICAgICAoYmluYXJ5ID8gImJpbmFyeSIgOiAidGV4dCIpCisjZWxzZQor ICAgICAgICAgICAgICAgICAgIGdmbW9kZShiaW5hcnksMCkKKyNlbmRpZiAvKiBOT0lDUCAqLwor ICAgICAgICAgICAgICAgICAgICwgY2tmc3RvYShuKSwgbiA9PSAxID8gIiIgOiAicyIpOworI2lm ZGVmIFVOSVgKKyAgICAgICAgICAgIGZmbHVzaChzdGRvdXQpOworI2VuZGlmIC8qIFVOSVggKi8K KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorI2lmZGVmIE1BQworICAgICAgICBzcHJp bnRmKGJ1ZiwiLCBTaXplOiAlcyIsY2tmc3RvYShuKSk7ICBjb25vbGwoYnVmKTsgIGhwb3MgPSAw OworI2VuZGlmIC8qIE1BQyAqLworICAgICAgICByZXR1cm47CisKKyAgICAgIGNhc2UgU0NSX1hE OiAgICAgICAgICAgICAgICAgICAgICAvKiBYLXBhY2tldCBkYXRhICovCisgICAgICAgIGlmIChm ZGlzcGxhID09IFhZRkRfQikKKyAgICAgICAgICByZXR1cm47CisjaWZkZWYgTUFDCisgICAgICAg IGNvbm9sbCgiIik7IGNvbm9sbChzKTsgaHBvcyA9IDA7CisjZWxzZQorICAgICAgICBja3N0cm5j cHkoZmJ1ZixzLDgwKTsKKyAgICAgICAgYWJ1ZlswXSA9IGEyYnVmWzBdID0gTlVMOworI2VuZGlm IC8qIE1BQyAqLworICAgICAgICByZXR1cm47CisKKyAgICAgIGNhc2UgU0NSX1NUOiAgICAgICAg ICAgICAgICAgICAgICAvKiBGaWxlIHN0YXR1cyAqLworICAgICAgICBzd2l0Y2ggKGMpIHsKKyAg ICAgICAgICBjYXNlIFNUX09LOiAgICAgICAgICAgICAgICAgICAvKiBUcmFuc2ZlcnJlZCBPSyAq LworICAgICAgICAgICAgc2hvd3BrdCgnWicpOyAgICAgICAgICAgICAgIC8qIFVwZGF0ZSBudW1i ZXJzIG9uZSBsYXN0IHRpbWUgKi8KKyAgICAgICAgICAgIGlmIChmZGlzcGxhID09IFhZRkRfQikg eworI2lmZGVmIEdGVElNRVIKKwkJaWYgKGZweGZzZWNzKQorCQkgIHByaW50ZigiOiBPSyAoJTAu M2Ygc2VjLCAlbGQgY3BzKSIsZnB4ZnNlY3MsCisJCQkgKGxvbmcpKChDS0ZMT0FUKWZmYyAvIGZw eGZzZWNzKSk7CisjZWxzZQorCQlpZiAoeGZzZWNzKQorCQkgIHByaW50ZigiOiBPSyAoJWQgc2Vj LCAlbGQgY3BzKSIseGZzZWNzLGZmYy94ZnNlY3MpOworI2VuZGlmIC8qIEdGVElNRVIgKi8KKwkJ cHJpbnRmKCJcbiIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIGlmICgoaHBvcyArPSA1KSA+IDc4KSBjb25vbGwoIiIpOyAvKiBXcmFwIHNjcmVl biBsaW5lLiAqLworICAgICAgICAgICAgY29ub2xsKCIgW09LXSIpOyBocG9zID0gMDsgIC8qIFBy aW50IE9LIG1lc3NhZ2UuICovCisgICAgICAgICAgICBpZiAoZmRpc3BsYSA9PSBYWUZEX1MpIHsg ICAgLyogV2UgZGlkbid0IHNob3cgWiBwYWNrZXQgd2hlbiAqLworICAgICAgICAgICAgICAgIGNv bm9jKCdaJyk7ICAgICAgICAgICAgIC8qIGl0IGNhbWUsIHNvIHNob3cgaXQgbm93LiAqLworICAg ICAgICAgICAgICAgIGhwb3MgPSAxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJu OworCisgICAgICAgICAgY2FzZSBTVF9ESVNDOiAgICAgICAgICAgICAgICAgLyogIERpc2NhcmRl ZCAqLworICAgICAgICAgICAgaWYgKGZkaXNwbGEgPT0gWFlGRF9CKSB7CisgICAgICAgICAgICAg ICAgcHJpbnRmKCI6IERJU0NBUkRFRFxuIik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg ICAgICAgICAgfQorICAgICAgICAgICAgaWYgKChocG9zICs9IDEyKSA+IDc4KSBjb25vbGwoIiIp OworICAgICAgICAgICAgY29ub2xsKCIgW2Rpc2NhcmRlZF0iKTsgaHBvcyA9IDA7CisgICAgICAg ICAgICByZXR1cm47CisKKyAgICAgICAgICBjYXNlIFNUX0lOVDogICAgICAgICAgICAgICAgICAv KiAgSW50ZXJydXB0ZWQgKi8KKyAgICAgICAgICAgIGlmIChmZGlzcGxhID09IFhZRkRfQikgewor ICAgICAgICAgICAgICAgIHByaW50ZigiOiBJTlRFUlJVUFRFRFxuIik7CisgICAgICAgICAgICAg ICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKChocG9zICs9IDE0KSA+ IDc4KSBjb25vbGwoIiIpOworICAgICAgICAgICAgY29ub2xsKCIgW2ludGVycnVwdGVkXSIpOyBo cG9zID0gMDsKKyAgICAgICAgICAgIHJldHVybjsKKworCSAgY2FzZSBTVF9TSU06CisgICAgICAg ICAgICBpZiAoZmRpc3BsYSA9PSBYWUZEX0IpIHsKKwkJaWYgKG4gPT0gU0tQX1hOWCkKKwkJICBw cmludGYoIjogV09VTEQgQkUgVFJBTlNGRVJSRUQgKE5ldyBmaWxlKVxuIik7CisJCWVsc2UgaWYg KG4gPT0gU0tQX1hVUCkKKwkJICBwcmludGYoIjogV09VTEQgQkUgVFJBTlNGRVJSRUQgKFJlbW90 ZSBmaWxlIG9sZGVyKVxuIik7CisJCWVsc2UgaWYgKG4gPT0gU0tQX1NJTSkKKwkJICBwcmludGYo IjogV09VTEQgQkUgVFJBTlNGRVJSRURcbiIpOworCQllbHNlIGlmIChuID4gMCAmJiBuIDwgbnNr cmVhc29uKQorCQkgIHByaW50ZigiOiBTS0lQUEVEICglcylcbiIsc2tyZWFzb25bbl0pOworCQll bHNlCisJCSAgcHJpbnRmKCI6IFNLSVBQRURcbiIpOworICAgICAgICAgICAgICAgIHJldHVybjsK KyAgICAgICAgICAgIH0gZWxzZSBpZiAoZmRpc3BsYSA9PSBYWUZEX1MpIHsKKyAgICAgICAgICAg ICAgICBpZiAoZmRpc3BsYSA9PSBYWUZEX1MgJiYgZmJ1ZlswXSkgeyAvKiBDUlQgZGlzcGxheSAq LworICAgICAgICAgICAgICAgICAgICBjb25vbGwoIiIpOyAgICAgICAgIC8qIE5ldyBsaW5lICov CisgICAgICAgICAgICAgICAgICAgIGlmICh3aGF0ICYgV19TRU5EKSBjb25vbCgiV291bGQgU2Vu ZDogIik7IC8qIEFjdGlvbiAqLworICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh3aGF0ICYg V19SRUNWKSBjb25vbCgiV291bGQgUmVjZWl2ZTogIik7CisgICAgICAgICAgICAgICAgICAgIGNv bm9sKGZidWYpOworICAgICAgICAgICAgICAgICAgICBpZiAoKmFidWYpIGNvbm9sKCIgPT4gIik7 IGNvbm9sKGFidWYpOyAvKiBOYW1lcyAqLworICAgICAgICAgICAgICAgICAgICBpZiAoKmEyYnVm KSBjb25vbCgiID0+ICIpOyBjb25vbChhMmJ1Zik7IC8qIE5hbWVzICovCisgICAgICAgICAgICAg ICAgICAgICpmYnVmID0gTlVMOyAqYWJ1ZiA9IE5VTDsgKmEyYnVmID0gTlVMOworICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgICBjb25vbGwoIiBbc2ltdWxhdGVkXSIpOworICAgICAg ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgoaHBvcyAr PSAxMCkgPiA3OCkgY29ub2xsKCIiKTsKKyAgICAgICAgICAgIGNvbm9sKCIgW3NpbXVsYXRlZF0i KTsgaHBvcyA9IDA7CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICBjYXNlIFNUX1NL SVA6ICAgICAgICAgICAgICAgICAvKiAgU2tpcHBlZCAqLworICAgICAgICAgICAgaWYgKGZkaXNw bGEgPT0gWFlGRF9CKSB7CisJCWlmIChuID09IFNLUF9YTlgpCisJCSAgcHJpbnRmKCI6IFdPVUxE IEJFIFRSQU5TRkVSUkVEIChOZXcgZmlsZSlcbiIpOworCQllbHNlIGlmIChuID09IFNLUF9YVVAp CisJCSAgcHJpbnRmKCI6IFdPVUxEIEJFIFRSQU5TRkVSUkVEIChSZW1vdGUgZmlsZSBvbGRlcilc biIpOworCQllbHNlIGlmIChuID09IFNLUF9TSU0pCisJCSAgcHJpbnRmKCI6IFdPVUxEIEJFIFRS QU5TRkVSUkVEXG4iKTsKKwkJZWxzZSBpZiAobiA+IDAgJiYgbiA8IG5za3JlYXNvbikKKwkJICBw cmludGYoIjogU0tJUFBFRCAoJXMpXG4iLHNrcmVhc29uW25dKTsKKwkJZWxzZQorCQkgIHByaW50 ZigiOiBTS0lQUEVEXG4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9 IGVsc2UgaWYgKGZkaXNwbGEgPT0gWFlGRF9TKSB7CisgICAgICAgICAgICAgICAgaWYgKGZkaXNw bGEgPT0gWFlGRF9TICYmIGZidWZbMF0pIHsgLyogQ1JUIGRpc3BsYXkgKi8KKyAgICAgICAgICAg ICAgICAgICAgY29ub2xsKCIiKTsgICAgICAgICAvKiBOZXcgbGluZSAqLworICAgICAgICAgICAg ICAgICAgICBpZiAod2hhdCAmIFdfU0VORCkgY29ub2woIlNlbmRpbmc6ICIpOyAvKiBBY3Rpb24g Ki8KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAod2hhdCAmIFdfUkVDVikgY29ub2woIlJl Y2VpdmluZzogIik7CisgICAgICAgICAgICAgICAgICAgIGNvbm9sKGZidWYpOworICAgICAgICAg ICAgICAgICAgICBpZiAoKmFidWYpIGNvbm9sKCIgPT4gIik7IGNvbm9sKGFidWYpOyAvKiBOYW1l cyAqLworICAgICAgICAgICAgICAgICAgICBpZiAoKmEyYnVmKSBjb25vbCgiID0+ICIpOyBjb25v bChhMmJ1Zik7IC8qIE5hbWVzICovCisgICAgICAgICAgICAgICAgICAgICpmYnVmID0gTlVMOyAq YWJ1ZiA9IE5VTDsgKmEyYnVmID0gTlVMOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg ICAgICBjb25vbGwoIiBbc2tpcHBlZF0iKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg ICAgICAgICB9CisgICAgICAgICAgICBpZiAoKGhwb3MgKz0gMTApID4gNzgpIGNvbm9sbCgiIik7 CisJICAgIGNvbm9sKCIgIik7IGNvbm9sKGZidWYpOworICAgICAgICAgICAgY29ub2xsKCIgW3Nr aXBwZWRdIik7IGhwb3MgPSAwOworICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgY2Fz ZSBTVF9FUlI6ICAgICAgICAgICAgICAgICAgLyogRXJyb3IgKi8KKyAgICAgICAgICAgIGlmIChm ZGlzcGxhID09IFhZRkRfQikgeworICAgICAgICAgICAgICAgIHByaW50ZigiOiBFUlJPUjogJXNc biIscyk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAg ICAgY29ub2xsKCIiKTsKKyAgICAgICAgICAgIGNvbm9sKCJFcnJvcjogIik7IGNvbm9sbChzKTsg aHBvcyA9IDA7CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICBjYXNlIFNUX01TRzog ICAgICAgICAgICAgICAgICAvKiBNZXNzYWdlICovCisjaWZkZWYgTkVXRlRQCisgICAgICAgICAg ICBpZiAoZmRpc3BsYSA9PSBYWUZEX0IpIHsKKyAgICAgICAgICAgICAgICBpZiAoZnRwICYmIGZ0 cF9kZWIpCisJCSAgcHJpbnRmKCI6IE1FU1NBR0U6ICVzXG4iLHMpOworICAgICAgICAgICAgICAg IHJldHVybjsKKyAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBORVdGVFAgKi8KKyAgICAgICAgICAg IGNvbm9sbCgiIik7CisgICAgICAgICAgICBjb25vbCgiTWVzc2FnZTogIik7CisgICAgICAgICAg ICBjb25vbGwocyk7CisgICAgICAgICAgICBocG9zID0gMDsKKyAgICAgICAgICAgIHJldHVybjsK KworICAgICAgICAgIGNhc2UgU1RfUkVGVTogICAgICAgICAgICAgICAgIC8qIFJlZnVzZWQgKi8K KyAgICAgICAgICAgIGlmIChmZGlzcGxhID09IFhZRkRfQikgeworICAgICAgICAgICAgICAgIHBy aW50ZigiOiBSRUZVU0VEXG4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg ICB9IGVsc2UgaWYgKGZkaXNwbGEgPT0gWFlGRF9TKSB7CisgICAgICAgICAgICAgICAgaWYgKGZk aXNwbGEgPT0gWFlGRF9TICYmIGZidWZbMF0pIHsgLyogQ1JUIGRpc3BsYXkgKi8KKyAgICAgICAg ICAgICAgICAgICAgY29ub2xsKCIiKTsgICAgICAgICAvKiBOZXcgbGluZSAqLworICAgICAgICAg ICAgICAgICAgICBpZiAod2hhdCAmIFdfU0VORCkgY29ub2woIlNlbmRpbmc6ICIpOyAvKiBBY3Rp b24gKi8KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAod2hhdCAmIFdfUkVDVikgY29ub2wo IlJlY2VpdmluZzogIik7CisgICAgICAgICAgICAgICAgICAgIGNvbm9sKGZidWYpOworICAgICAg ICAgICAgICAgICAgICBpZiAoKmFidWYpIGNvbm9sKCIgPT4gIik7IGNvbm9sKGFidWYpOyAgICAg IC8qIE5hbWVzICovCisgICAgICAgICAgICAgICAgICAgIGlmICgqYTJidWYpIGNvbm9sKCIgPT4g Iik7IGNvbm9sKGEyYnVmKTsgICAgLyogTmFtZXMgKi8KKyAgICAgICAgICAgICAgICAgICAgKmZi dWYgPSBOVUw7ICphYnVmID0gTlVMOyAqYTJidWYgPSBOVUw7CisgICAgICAgICAgICAgICAgICAg IGNvbm9sbCgiIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNvbm9sKCJS ZWZ1c2VkOiAiKTsgY29ub2xsKHMpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgICAgIGNvbm9sbCgiIik7CisgICAgICAgICAgICBjb25vbCgiUmVmdXNl ZDogIik7IGNvbm9sbChzKTsgaHBvcyA9IDA7CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAg ICAgICBjYXNlIFNUX0lOQzogICAgICAgICAgICAgICAgICAvKiBJbmNvbXBsZXRlICovCisgICAg ICAgICAgICBpZiAoZmRpc3BsYSA9PSBYWUZEX0IpIHsKKyAgICAgICAgICAgICAgICBwcmludGYo IjogSU5DT01QTEVURVxuIik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg fQorICAgICAgICAgICAgaWYgKChocG9zICs9IDEyKSA+IDc4KSBjb25vbGwoIiIpOworICAgICAg ICAgICAgY29ub2xsKCIgW2luY29tcGxldGVdIik7IGhwb3MgPSAwOworICAgICAgICAgICAgcmV0 dXJuOworCisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGNvbm9sbCgiKioqIHNjcmVl bigpIGNhbGxlZCB3aXRoIGJhZCBzdGF0dXMgKioqIik7CisgICAgICAgICAgICBocG9zID0gMDsK KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisjaWZkZWYgTUFDCisgICAgICBjYXNl IFNDUl9QTjogICAgICAgICAgICAgICAgICAgICAgLyogUGFja2V0IG51bWJlciAqLworICAgICAg ICBpZiAoZmRpc3BsYSA9PSBYWUZEX0IpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg fQorCWNrbWFrbXNnKGJ1Ziw4MCxzLCI6ICIsY2tsdG9hKG4pLE5VTEwpOworICAgICAgICBjb25v bChidWYpOyBocG9zICs9IChpbnQpc3RybGVuKGJ1Zik7IHJldHVybjsKKyNlbmRpZiAvKiBNQUMg Ki8KKworICAgICAgY2FzZSBTQ1JfUFQ6ICAgICAgICAgICAgICAgICAgICAgIC8qIFBhY2tldCB0 eXBlIG9yIHBzZXVkb3R5cGUgKi8KKyAgICAgICAgaWYgKGZkaXNwbGEgPT0gWFlGRF9CKQorICAg ICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKGMgPT0gJ1knKSByZXR1cm47ICAgICAgICAgICAv KiBEb24ndCBib3RoZXIgd2l0aCBBQ0tzICovCisgICAgICAgIGlmIChjID09ICdEJykgeyAgICAg ICAgICAgICAgICAgLyogSW4gZGF0YSB0cmFuc2ZlciBwaGFzZSwgKi8KKyAgICAgICAgICAgIHNo b3dwa3QoTlVMKTsgICAgICAgICAgICAgICAvKiBzaG93IHByb2dyZXNzLiAqLworICAgICAgICAg ICAgcmV0dXJuOworICAgICAgICB9CisjaWZuZGVmIEFNSUdBCisgICAgICAgIGlmIChocG9zKysg PiA3NykgeyAgICAgICAgICAgICAgLyogSWYgbmVhciByaWdodCBtYXJnaW4sICovCisgICAgICAg ICAgICBjb25vbGwoIiIpOyAgICAgICAgICAgICAgICAgLyogU3RhcnQgbmV3IGxpbmUgKi8KKyAg ICAgICAgICAgIGhwb3MgPSAwOyAgICAgICAgICAgICAgICAgICAvKiBhbmQgcmVzZXQgY291bnRl ci4gKi8KKyAgICAgICAgfQorI2VuZGlmIC8qIEFNSUdBICovCisgICAgICAgIGlmIChjID09ICda JyAmJiBmZGlzcGxhID09IFhZRkRfUykKKyAgICAgICAgICByZXR1cm47CisgICAgICAgIGVsc2UK KyAgICAgICAgICBjb25vYyhjKTsgICAgICAgICAgICAgICAgICAgICAvKiBEaXNwbGF5IHRoZSBw YWNrZXQgdHlwZS4gKi8KKyNpZmRlZiBBTUlHQQorICAgICAgICBpZiAoYyA9PSAnRycpIGNvbm9s bCgiIik7ICAgICAgIC8qIE5ldyBsaW5lIGFmdGVyIEcgcGFja2V0cyAqLworI2VuZGlmIC8qIEFN SUdBICovCisgICAgICAgIHJldHVybjsKKworICAgICAgY2FzZSBTQ1JfVEM6ICAgICAgICAgICAg ICAgICAgICAgIC8qIFRyYW5zYWN0aW9uIGNvbXBsZXRlICovCisgICAgICAgIGlmICh4ZnJiZWwp IGJsZWVwKEJQX05PVEUpOworICAgICAgICBpZiAoZmRpc3BsYSA9PSBYWUZEX0IpIHsgICAgICAg IC8qIEJyaWVmIGRpc3BsYXkuLi4gKi8KKyAgICAgICAgICAgIGlmIChmaWxjbnQgPiAxKSB7Cisg ICAgICAgICAgICAgICAgbG9uZyBmeDsKKyAgICAgICAgICAgICAgICBmeCA9IGZpbGNudCAtIGZp bHJlajsKKyAgICAgICAgICAgICAgICBwcmludGYoIiBTVU1NQVJZOiAlbGQgZmlsZSVzIiwgZngs ICgoZnggPT0gMSkgPyAiIiA6ICJzIikpOworICAgICAgICAgICAgICAgIHByaW50ZigiLCAlcyBi eXRlJXMiLCBja2ZzdG9hKHRmYyksICgodGZjID09IDEpID8gIiIgOiAicyIpKTsKKyNpZmRlZiBH RlRJTUVSCisgICAgICAgICAgICAgICAgcHJpbnRmKCIsICUwLjNmIHNlYywgJWxkIGNwcyIsIGZw dHNlY3MsIHRmY3BzKTsKKyNlbHNlCisgICAgICAgICAgICAgICAgcHJpbnRmKCIsICVsZCBzZWMs ICVsZCBjcHMiLCB0c2VjcywgdGZjcHMpOworI2VuZGlmIC8qIEdGVElNRVIgKi8KKyAgICAgICAg ICAgICAgICBwcmludGYoIi5cbiIpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2Ugewor ICAgICAgICAgICAgY29ub2xsKCIiKTsKKyAgICAgICAgfQorI2lmZGVmIFVOSVgKKyAgICAgICAg ZmZsdXNoKHN0ZG91dCk7CisjZW5kaWYgLyogVU5JWCAqLworICAgICAgICByZXR1cm47CisKKyAg ICAgIGNhc2UgU0NSX0VNOiAgICAgICAgICAgICAgICAgICAgICAvKiBFcnJvciBtZXNzYWdlICov CisgICAgICAgIGlmIChmZGlzcGxhID09IFhZRkRfQikgeworICAgICAgICAgICAgcHJpbnRmKCIg RVJST1I6ICVzXG4iLHMpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg IGNvbm9sbCgiIik7IGNvbm9jKCc/Jyk7IGNvbm9sbChzKTsgaHBvcyA9IDA7IHJldHVybjsKKwor ICAgICAgY2FzZSBTQ1JfV006ICAgICAgICAgICAgICAgICAgICAgIC8qIFdhcm5pbmcgbWVzc2Fn ZSAqLworICAgICAgICBpZiAoZmRpc3BsYSA9PSBYWUZEX0IpIHsKKyAgICAgICAgICAgIHByaW50 ZigiIFdBUk5JTkc6ICVzXG4iLHMpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg ICAgICAgIGNvbm9sbCgiIik7IGNvbm9sbChzKTsgaHBvcyA9IDA7IHJldHVybjsKKworICAgICAg Y2FzZSBTQ1JfTVM6ICAgICAgICAgICAgICAgICAgICAgIC8qIE1lc3NhZ2UgZnJvbSBvdGhlciBL ZXJtaXQgKi8KKyAgICAgICAgaWYgKGZkaXNwbGEgPT0gWFlGRF9CKSB7CisgICAgICAgICAgICBw cmludGYoIiBNRVNTQUdFOiAlc1xuIixzKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg fQorICAgICAgICBjb25vbGwoIiIpOyBjb25vbGwocyk7IGhwb3MgPSAwOyByZXR1cm47CisKKyAg ICAgIGNhc2UgU0NSX1RVOiAgICAgICAgICAgICAgICAgICAgICAvKiBVbmRlbGltaXRlZCB0ZXh0 ICovCisgICAgICAgIGlmIChmZGlzcGxhID09IFhZRkRfQikKKyAgICAgICAgICByZXR1cm47Cisg ICAgICAgIGlmICgoaHBvcyArPSBsZW4pID4gNzcpIHsgY29ub2xsKCIiKTsgaHBvcyA9IGxlbjsg fQorICAgICAgICBjb25vbChzKTsgcmV0dXJuOworCisgICAgICBjYXNlIFNDUl9UTjogICAgICAg ICAgICAgICAgICAgICAgLyogVGV4dCBkZWxpbWl0ZWQgYXQgYmVnaW5uaW5nICovCisgICAgICAg IGlmIChmZGlzcGxhID09IFhZRkRfQikKKyAgICAgICAgICByZXR1cm47CisgICAgICAgIGNvbm9s bCgiIik7IGNvbm9sKHMpOyBocG9zID0gbGVuOyByZXR1cm47CisKKyAgICAgIGNhc2UgU0NSX1Ra OiAgICAgICAgICAgICAgICAgICAgICAvKiBUZXh0IGRlbGltaXRlZCBhdCBlbmQgKi8KKyAgICAg ICAgaWYgKGZkaXNwbGEgPT0gWFlGRF9CKQorICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYg KChocG9zICs9IGxlbikgPiA3NykgeyBjb25vbGwoIiIpOyBocG9zID0gbGVuOyB9CisgICAgICAg IGNvbm9sbChzKTsgcmV0dXJuOworCisgICAgICBjYXNlIFNDUl9RRTogICAgICAgICAgICAgICAg ICAgICAgLyogUXVhbnRpdHkgZXF1YWxzICovCisgICAgICAgIGlmIChmZGlzcGxhID09IFhZRkRf QikKKyAgICAgICAgICByZXR1cm47CisJY2ttYWttc2coYnVmLDgwLHMsIjogIixja2x0b2Eobiks TlVMTCk7CisgICAgICAgIGNvbm9sbChidWYpOyBocG9zID0gMDsgcmV0dXJuOworCisgICAgICBj YXNlIFNDUl9DVzogICAgICAgICAgICAgICAgICAgICAgLyogQ2xvc2UgZnVsbHNjcmVlbiB3aW5k b3cgKi8KKyAgICAgICAgcmV0dXJuOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBObyB3aW5k b3cgdG8gY2xvc2UgKi8KKworICAgICAgY2FzZSBTQ1JfQ0Q6CisgICAgICAgIHJldHVybjsKKwor ICAgICAgZGVmYXVsdDoKKyAgICAgICAgY29ub2xsKCIqKiogc2NyZWVuKCkgY2FsbGVkIHdpdGgg YmFkIG9iamVjdCAqKioiKTsKKyAgICAgICAgaHBvcyA9IDA7CisgICAgICAgIHJldHVybjsKKyAg ICB9Cit9CisjZW5kaWYgLyogTk9ESVNQTEFZICovCisKKy8qICBFIFIgTSBTIEcgIC0tICBOb25m YXRhbCBlcnJvciBtZXNzYWdlICAqLworCisvKiBTaG91bGQgYmUgdXNlZCBvbmx5IGZvciBwcmlu dGluZyB0aGUgbWVzc2FnZSB0ZXh0IGZyb20gYW4gRXJyb3IgcGFja2V0LiAqLworCitWT0lECitl cm1zZyhtc2cpIGNoYXIgKm1zZzsgeyAgICAgICAgICAgICAgICAgLyogUHJpbnQgZXJyb3IgbWVz c2FnZSAqLworICAgIGRlYnVnKEYxMTAsImVybXNnIixtc2csMCk7CisgICAgaWYgKGxvY2FsKQor ICAgICAgeHhzY3JlZW4oU0NSX0VNLDAsMEwsbXNnKTsKKyAgICB0bG9nKEYxMTAsIlByb3RvY29s IEVycm9yOiIsbXNnLDBMKTsKK30KKyNlbmRpZiAvKiBOT1hGRVIgKi8KKworVk9JRAorc2V0c2Vz bG9nKHgpIGludCB4OyB7CisgICAgc2VzbG9nID0geDsKKyNpZmRlZiBLVUkKKyAgICBLdWlTZXRQ cm9wZXJ0eShLVUlfVEVSTV9DQVBUVVJFLHgsMCk7CisjZW5kaWYgLyogS1VJICovCit9CisKK1ZP SUQKK2RvY2xlYW4oZmMpIGludCBmYzsgeyAgICAgICAgICAgICAgICAgICAvKiBHZW5lcmFsIGNs ZWFudXAgKi8KKyNpZmRlZiBPUzJPUlVOSVgKKyAgICBleHRlcm4gaW50IHR0eWZkOworI2VuZGlm IC8qIE9TMk9SVU5JWCAqLworICAgIGV4dGVybiBpbnQgIGtlZXA7CisgICAgZXh0ZXJuIGludCBl eGl0aGFuZ3VwOworI2lmbmRlZiBOT1hGRVIKKyAgICBleHRlcm4gY2hhciBmaWxuYW1bXTsKKyNl bmRpZiAvKiBOT1hGRVIgKi8KKyNpZm5kZWYgTk9JQ1AKKyAgICBpbnQgeDsKKworICAgIGlmIChm YyA+IDApCisgICAgICBkb3N0b3AoKTsgICAgICAgICAgICAgICAgIC8qIFN0b3AgYWxsIGNvbW1h bmQgZmlsZXMgYW5kIGVuZCBtYWNyb3MgKi8KKyNlbmRpZiAvKiBOT0lDUCAqLworCisjaWZuZGVm IE5PWEZFUgorICAgIGlmIChwa3Rsb2cpIHsKKyAgICAgICAgKnBrdGZpbCA9ICdcMCc7CisgICAg ICAgIHBrdGxvZyA9IDA7CisgICAgICAgIHpjbG9zZShaUEZJTEUpOworICAgIH0KKyNlbmRpZiAv KiBOT1hGRVIgKi8KKyAgICBpZiAoc2VzbG9nKSB7CisgICAgICAgICpzZXNmaWwgPSAnXDAnOwor ICAgICAgICBzZXRzZXNsb2coMCk7CisgICAgICAgIHpjbG9zZShaU0ZJTEUpOworICAgIH0KKyNp ZmRlZiBUTE9HCisgICAgaWYgKHRyYWxvZykgeworICAgICAgICB0bG9nKEYxMDAsIlRyYW5zYWN0 aW9uIExvZyBDbG9zZWQiLCIiLDBMKTsKKyAgICAgICAgKnRyYWZpbCA9ICdcMCc7CisgICAgICAg IHRyYWxvZyA9IDA7CisgICAgICAgIHpjbG9zZShaVEZJTEUpOworICAgIH0KKyNlbmRpZiAvKiBU TE9HICovCisKKyAgICBkZWJ1ZyhGMTAwLCJkb2NsZWFuIGNhbGxpbmcgZG9sb2dlbmQiLCIiLDAp OworICAgIGRvbG9nZW5kKCk7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVuZCBjdXJyZW50 IGxvZyByZWNvcmQgaWYgYW55ICovCisjaWZkZWYgQ09NTUVOVAorICAgIGlmIChkaWFsb2cpIHsg ICAgICAgICAgICAgICAgICAgICAgIC8qIElmIGNvbm5lY3Rpb24gbG9nIG9wZW4gKi8KKwlkaWFs b2cgPSAwOworICAgICAgICAqZGlhZmlsID0gJ1wwJzsgICAgICAgICAgICAgICAgIC8qIGNsb3Nl IGl0LiAqLworICAgICAgICB6Y2xvc2UoWkRJRklMKTsKKyAgICB9CisjZW5kaWYgLyogQ09NTUVO VCAqLworCisjaWZuZGVmIE5PSUNQCisjaWZuZGVmIE5PU1BMCisgICAgemNsb3NlKFpSRklMRSk7 ICAgICAgICAgICAgICAgICAgICAgLyogUkVBRCBhbmQgV1JJVEUgZmlsZXMsIGlmIGFueS4gKi8K KyAgICB6Y2xvc2UoWldGSUxFKTsKKyNpZm5kZWYgTk9YRkVSCisgICAgemNsb3NlKFpJRklMRSk7 ICAgICAgICAgICAgICAgICAgICAgLyogQW5kIG90aGVyIGZpbGVzIHRvbyAqLworICAgIHggPSBj aGtmbihaT0ZJTEUpOwkJCS8qIERvd25sb2FkIGluIHByb2dyZXNzPyAqLworICAgIGRlYnVnKEYx MTEsImRvY2xlYW4gY2hrZm4gWk9GSUxFIixmaWxuYW0seCk7CisgICAgZGVidWcoRjExMSwiZG9j bGVhbiBrZWVwIiwiIixrZWVwKTsKKyAgICB6Y2xvc2UoWk9GSUxFKTsJCQkvKiBDbG9zZSBvdXRw dXQgZmlsZSAqLworICAgIGlmICh4ID4gMCAmJiAha2VlcCkgewkJLyogSWYgaXQgd2FzIGJlaW5n IGRvd25sb2FkZWQgKi8KKwlpZiAoZmlsbmFtWzBdKQorCSAgeCA9IHpkZWxldChmaWxuYW0pOwkJ LyogRGVsZXRlIGlmIElOQ09NUExFVEUgPSBESVNDQVJEICovCisJZGVidWcoRjExMSwiZG9jbGVh biBkb3dubG9hZCBmaWxlbmFtZSIsZmlsbmFtLHgpOworICAgIH0KKyNlbmRpZiAvKiBOT1hGRVIg Ki8KKyAgICB6Y2xvc2UoWlNZU0ZOKTsKKyAgICB6Y2xvc2UoWk1GSUxFKTsKKworICAgIGlmIChm YyA8IDEpIHsgICAgICAgICAgICAgICAgICAgICAgIC8qIFJFU0VUaW5nLCBub3QgRVhJVGluZyAq LworI2lmZGVmIERFQlVHCisgICAgICAgIGlmIChkZWJsb2cpIHsgICAgICAgICAgICAgICAgICAg LyogQ2xvc2UgdGhlIGRlYnVnIGxvZy4gKi8KKyAgICAgICAgICAgICpkZWJmaWwgPSAnXDAnOwor ICAgICAgICAgICAgZGVibG9nID0gMDsKKyAgICAgICAgICAgIHpjbG9zZShaREZJTEUpOworICAg ICAgICB9CisjZW5kaWYgLyogREVCVUcgKi8KKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRp ZiAvKiBOT1NQTCAqLworI2VuZGlmIC8qIE5PSUNQICovCisKKyNpZm5kZWYgTk9MT0NBTAorICAg IGRlYnVnKEYxMDEsImRvY2xlYW4gZXhpdGhhbmd1cCIsIiIsZXhpdGhhbmd1cCk7CisgICAgaWYg KGxvY2FsICYmIGV4aXRoYW5ndXApIHsJCS8qIENsb3NlIGNvbW11bmljYXRpb24gY29ubmVjdGlv biAqLworICAgICAgICBleHRlcm4gaW50IGhhc2xvY2s7CisJaW50IHg7CisJCisJeCA9IHR0Y2hr KCk7CisJZGVidWcoRjEwMSwiZG9jbGVhbiB0dGNoaygpIiwiIix4KTsKKyNpZmRlZiBPUzJPUlVO SVgKKwlkZWJ1ZyhGMTAxLCJkb2NsZWFuIHR0eWZkIiwiIix0dHlmZCk7CisjZW5kaWYgLyogT1My T1JVTklYICovCisgICAgICAgIGlmICh4ID49IDAKKyNpZmRlZiBPUzIKKyAgICAgICAgICAgIHx8 IHR0eWZkICE9IC0xCisjZWxzZQorI2lmZGVmIFVOSVgKKyAgICAgICAgICAgIHx8IGhhc2xvY2sg ICAgICAgICAgICAgICAgICAvKiBNYWtlIHN1cmUgd2UgZ2V0IGxvY2tmaWxlISAqLworICAgICAg ICAgICAgfHwgKCFuZXR3b3JrICYmIHR0eWZkID4gLTEpCisjZW5kaWYgLyogVU5JWCAqLworI2Vu ZGlmIC8qIE9TMiAqLworICAgICAgICAgICAgKSB7CisgICAgICAgICAgICBleHRlcm4gaW50IHdh c2Nsb3NlZCwgd2h5Y2xvc2VkOworCSAgICBkZWJ1ZyhGMTAwLCJkb2NsZWFuIGhhbmdpbmcgdXAg YW5kIGNsb3NpbmciLCIiLDApOworICAgICAgICAgICAgaWYgKG1zZ2ZsZykgeworI2lmZGVmIFVO SVgKKyAgICAgICAgICAgICAgICBmZmx1c2goc3Rkb3V0KTsKKyNlbmRpZiAvKiBVTklYICovCisg ICAgICAgICAgICAgICAgcHJpbnRmKCJDbG9zaW5nICVzLi4uIix0dG5hbWUpOworICAgICAgICAg ICAgfQorI2lmbmRlZiBOT0RJQUwKKyAgICAgICAgICAgIG1kbWh1cCgpOyAgICAgICAgICAgICAg ICAgICAvKiBIYW5ndXAgdGhlIG1vZGVtPz8/ICovCisjZW5kaWYgLyogTk9ESUFMICovCisgICAg ICAgICAgICB0dGNsb3MoMCk7ICAgICAgICAgICAgICAgICAgLyogQ2xvc2UgZXh0ZXJuYWwgbGlu ZSwgaWYgYW55ICovCisgICAgICAgICAgICBpZiAobXNnZmxnKSB7CisgICAgICAgICAgICAgICAg cHJpbnRmKCJPS1xuIik7CisjaWZkZWYgVU5JWAorICAgICAgICAgICAgICAgIGZmbHVzaChzdGRv dXQpOworI2VuZGlmIC8qIFVOSVggKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh3 YXNjbG9zZWQpIHsKKyAgICAgICAgICAgICAgICB3aHljbG9zZWQgPSBXQ19DTE9TOworI2lmbmRl ZiBOT1NQTAorICAgICAgICAgICAgICAgIGlmIChubWFjKSB7ICAgICAgICAgICAgIC8qIEFueSBt YWNyb3MgZGVmaW5lZD8gKi8KKyAgICAgICAgICAgICAgICAgICAgaW50IGs7ICAgICAgICAgICAg ICAvKiBZZXMgKi8KKyAgICAgICAgICAgICAgICAgICAgayA9IG1sb29rKG1hY3RhYiwib25fY2xv c2UiLG5tYWMpOyAgLyogTG9vayB0aGlzIHVwICovCisgICAgICAgICAgICAgICAgICAgIGlmIChr ID49IDApIHsgICAgICAgICAgICAgICAgICAgICAgIC8qIElmIGZvdW5kLCAqLworICAgICAgICAg ICAgICAgICAgICAgICAgd2FzY2xvc2VkID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8q IHByaW50ZigiT05fQ0xPU0UgRE9DTEVBTlxuIik7ICovCisgICAgICAgICAgICAgICAgICAgICAg ICAqKG1hY3RhYltrXS5rd2QpID0gTlVMOyAgICAgICAgIC8qIFNlZSBjb21tZW50IGJlbG93ICov CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZG9kbyhrLGNraXRvYSh3aHljbG9zZWQpLDAp ID4gLTEpIC8qIHNldCBpdCB1cCwgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2Vy KDEpOyAgICAgICAgICAgICAgICAgICAgLyogYW5kIGV4ZWN1dGUgaXQgKi8KKyAgICAgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBOT1NQTCAqLworICAgICAg ICAgICAgICAgIHdhc2Nsb3NlZCA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg ICAgY2tzdHJuY3B5KHR0bmFtZSxkZnR0eSxUVE5BTUxFTik7IC8qIFJlc3RvcmUgZGVmYXVsdCB0 dHkgKi8KKyAgICAgICAgbG9jYWwgPSBkZmxvYzsgICAgICAgICAgICAgICAgICAvKiBBbmQgZGVm YXVsdCByZW1vdGUvbG9jYWwgc3RhdHVzICovCisgICAgfQorI2lmZGVmIERFQlVHCisgICAgZWxz ZSBpZiAobG9jYWwpIGRlYnVnKEYxMDAsImRvY2xlYW4gaGFuZ3VwL2Nsb3NlIHNraXBwZWQiLCIi LDApOworI2VuZGlmIC8qIERFQlVHICovCisjZW5kaWYgLyogTk9MT0NBTCAqLworCisjaWZkZWYg TkVXRlRQCisgICAgZnRwYnllKCk7CQkJCS8qIElmIEZUUCBjb25uZWN0aW9uIG9wZW4sIGNsb3Nl IGl0ICovCisjZW5kaWYgLyogTkVXRlRQICovCisKKyNpZmRlZiBJS1NECisgICAgaWYgKGluc2Vy dmVyKQorICAgICAgdHRjbG9zKDApOwkJCS8qIElmIElLU0QsIGNsb3NlIHNvY2tldCAqLworI2Vu ZGlmIC8qIElLU0QgKi8KKworI2lmbmRlZiBOT1NQTAorLyoKKyAgSWYgYSBtYWNybyBuYW1lZCAi b25fZXhpdCIgaXMgZGVmaW5lZCwgZXhlY3V0ZSBpdC4gIEFsc28gcmVtb3ZlIGl0IGZyb20gdGhl CisgIG1hY3JvIHRhYmxlLCBpbiBjYXNlIGl0cyBkZWZpbml0aW9uIGluY2x1ZGVzIGFuIEVYSVQg b3IgUVVJVCBjb21tYW5kLCB3aGljaAorICB3b3VsZCBjYXVzZSBtdWNoIHJlY3Vyc2lvbiBhbmQg d291bGQgcHJldmVudCB0aGUgcHJvZ3JhbSBmcm9tIGV2ZXIgYWN0dWFsbHkKKyAgRVhJVGluZy4K KyovCisgICAgaWYgKG5tYWMpIHsgICAgICAgICAgICAgICAgICAgICAgICAgLyogQW55IG1hY3Jv cyBkZWZpbmVkPyAqLworICAgICAgICBpbnQgazsgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IFllcyAqLworICAgICAgICBjaGFyICogY21kID0gIm9uX2V4aXQiOyAgICAgICAgIC8qIE1TVkMg Mi54IGNvbXBpbGVyIGVycm9yICovCisgICAgICAgIGsgPSBtbG9vayhtYWN0YWIsY21kLG5tYWMp OyAgICAgLyogTG9vayB1cCAib25fZXhpdCIgKi8KKyAgICAgICAgaWYgKGsgPj0gMCkgeyAgICAg ICAgICAgICAgICAgICAvKiBJZiBmb3VuZCwgKi8KKyNpZmRlZiBDT01NRU5UCisJICAgIC8qIFRo aXMgbWFrZXMgYSBtZXNzIGlmIE9OX0VYSVQgaXRzZWxmIGV4ZWN1dGVzIG1hY3JvcyAqLworICAg ICAgICAgICAgKihtYWN0YWJba10ua3dkKSA9IE5VTDsgICAgIC8qIHBva2UgaXRzIG5hbWUgZnJv bSB0aGUgdGFibGUsICovCisjZWxzZQorCSAgICAvKiBSZXBsYWNlIHRoZSBrZXl3b3JkIHdpdGgg c29tZXRoaW5nIHRoYXQgZG9lc24ndCB3cmVjayB0aGUgKi8KKwkgICAgLyogb3JkZXIgb2YgdGhl IGtleXdvcmQgdGFibGUgKi8KKwkgICAgY2tzdHJuY3B5KG1hY3RhYltrXS5rd2QsIm9uX2V4eHgi LDgpOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAgICAgIGlmIChkb2RvKGssIiIsMCkg PiAtMSkgICAgICAvKiBzZXQgaXQgdXAsICovCisgICAgICAgICAgICAgIHBhcnNlcigxKTsgICAg ICAgICAgICAgICAgLyogYW5kIGV4ZWN1dGUgaXQgKi8KKyAgICAgICAgfQorICAgIH0KKyNlbmRp ZiAvKiBOT1NQTCAqLworLyoKKyAgUHV0IGNvbnNvbGUgdGVybWluYWwgYmFjayB0byBub3JtYWwu ICBUaGlzIGlzIGRvbmUgaGVyZSBiZWNhdXNlIHRoZQorICBPTl9FWElUIG1hY3JvIGNhbGxzIHRo ZSBwYXJzZXIsIHdoaWNoIG1lZGRsZXMgd2l0aCBjb25zb2xlIHRlcm1pbmFsIG1vZGVzLgorKi8K KyAgICBjb25yZXMoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXN0b3JlIGNvbnNv bGUgdGVybWluYWwuICovCisKKyNpZmRlZiBDT01NRU5UCisvKiBTaG91bGQgYmUgbm8gbmVlZCBm b3IgdGhpcywgYW5kIG1heWJlIGl0J3Mgc2NyZXdpbmcgdGhpbmdzIHVwPyAqLworICAgIGNvbm5v aSgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFR1cm4gb2ZmIGNvbnNvbGUgaW50ZXJy dXB0IHRyYXBzICovCisjZW5kaWYgLyogQ09NTUVOVCAqLworCisgICAgLyogRGVsZXRlIHRoZSBT dGFydHVwIEZpbGUgaWYgd2UgYXJlIHN1cHBvc2VkIHRvLiAqLworI2lmbmRlZiBOT0lDUAorICAg IHsKKyAgICAgICAgZXh0ZXJuIGludCBEZWxldGVTdGFydHVwRmlsZTsKKyAgICAgICAgZGVidWco RjExMSwiZG9jbGVhbiBEZWxldGVTdGFydHVwRmlsZSIsY21kZmlsLERlbGV0ZVN0YXJ0dXBGaWxl KTsKKyAgICAgICAgaWYgKERlbGV0ZVN0YXJ0dXBGaWxlKSB7CisgICAgICAgICAgICBpbnQgcmMg PSB6ZGVsZXQoY21kZmlsKTsKKyAgICAgICAgICAgIGRlYnVnKEYxMTEsImRvY2xlYW4gemRlbGV0 IixjbWRmaWwscmMpOworICAgICAgICB9CisgICAgfQorI2VuZGlmIC8qIE5PSUNQICovCisgICAg c3lzY2xlYW51cCgpOyAgICAgICAgICAgICAgICAgICAgICAgLyogU3lzdGVtLWRlcGVuZGVudCBj bGVhbnVwLCBsYXN0ICovCit9CisKKy8qICBEIE8gRSBYIEkgVCAgLS0gIEV4aXQgZnJvbSB0aGUg cHJvZ3JhbS4gICovCisKKy8qCisgIEZpcnN0IGFyZyBpcyBnZW5lcmFsLCBzeXN0ZW0taW5kZXBl bmRlbnQgc3ltYm9sOiBHT09EX0VYSVQgb3IgQkFEX0VYSVQuCisgIElmIHNlY29uZCBhcmcgaXMg LTEsIHRha2UgMXN0IGFyZyBsaXRlcmFsbHkuCisgIElmIHNlY29uZCBhcmcgaXMgbm90IC0xLCB3 b3JrIGl0IGludG8gdGhlIGV4aXQgY29kZS4KKyovCitWT0lECitkb2V4aXQoZXhpdHN0YXQsY29k ZSkgaW50IGV4aXRzdGF0LCBjb2RlOyB7CisgICAgZXh0ZXJuIGludCB4X2xvZ2dlZCwgcXVpdHRp bmc7CisjaWZkZWYgT1MyCisgICAgZXh0ZXJuIGludCBkaXNwbGF5X2RlbW87CisgICAgZXh0ZXJu IGludCBTeXNJbml0ZWQ7CisjZW5kaWYgLyogT1MyICovCisjaWZkZWYgQ0tfS0VSQkVST1MKKyNp ZmRlZiBLUkI0CisgICAgZXh0ZXJuIGludCBrcmI0X2F1dG9kZWw7CisjZW5kaWYgLyogS1JCNCAq LworI2lmZGVmIEtSQjUKKyAgICBleHRlcm4gaW50IGtyYjVfYXV0b2RlbDsKKyNlbmRpZiAvKiBL UkI1ICovCisjZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KKworI2lmZGVmIFZNUworICAgIGNoYXIg ZW52c3RyWzY0XTsKKyAgICBzdGF0aWMgJERFU0NSSVBUT1Ioc3ltbmFtLCJDS0VSTUlUX1NUQVRV UyIpOworICAgIHN0YXRpYyBzdHJ1Y3QgZHNjJGRlc2NyaXB0b3JfcyBzeW12YWw7CisjZW5kaWYg LyogVk1TICovCisgICAgaW50IGk7CisKKyNpZmRlZiBERUJVRworI2lmZGVmIFVTRV9MVUNBQ0hF CisgICAgZXh0ZXJuIGxvbmcgbHVjYWxscywgbHVoaXRzLCB4eGhpdHMsIGx1bG9vcDsKKyAgICBl eHRlcm4gaW50IGx1c2l6ZTsKKyNlbmRpZiAvKiBVU0VfTFVDQUNIRSAqLworI2lmbmRlZiBOT1NQ TAorICAgIGV4dGVybiBpbnQgY21kc3RhdHNbXTsKKyNlbmRpZiAvKiBOT1NQTCAqLworCisgICAg cXVpdHRpbmcrKzsKKworI2lmZGVmIE9TMgorICAgIGlmICggIVN5c0luaXRlZCApIHsKKyAgICAg ICAgc3RhdGljIGludCBpbml0aW5nID0gMDsKKyAgICAgICAgaWYgKCBpbml0aW5nICkKKwkgIGV4 aXQoMjUzKTsKKyAgICAgICAgaW5pdGluZyA9IDE7CisgICAgICAgIHN5c2luaXQoKTsKKyAgICB9 CisjZW5kaWYgLyogT1MyICovCisKKyAgICBpZiAoZGVibG9nKSB7CisjaWZkZWYgVVNFX0xVQ0FD SEUKKwlkZWJ1ZyhGMTAxLCJsb29rdXAgY2FjaGUgc2l6ZSIsIiIsbHVzaXplKTsKKwlkZWJ1ZyhG MTAxLCJsb29rdXAgY2FsbHMgLi4uLiIsIiIsbHVjYWxscyk7CisJZGVidWcoRjEwMSwibG9va3Vw IGNhY2hlIGhpdHMiLCIiLGx1aGl0cyk7CisJZGVidWcoRjEwMSwibG9va3VwIHN0YXJ0IGhpdHMi LCIiLHh4aGl0cyk7CisJZGVidWcoRjEwMSwibG9va3VwIGxvb3AgaXRlcmF0aW9ucyIsIiIsbHVs b29wKTsKKyNlbmRpZiAvKiBVU0VfTFVDQUNIRSAqLworI2lmbmRlZiBOT1NQTAorCWZvciAoaSA9 IDA7IGkgPCAyNTY7IGkrKykgeworCSAgICBpZiAoY21kc3RhdHNbaV0pCisJICAgICAgZGVidWco RjExMSwiQ01TVEFUUyIsY2tpdG9hKGkpLGNtZHN0YXRzW2ldKTsKKwl9CisjZW5kaWYgLyogTk9T UEwgKi8KKwlkZWJ1ZyhGMTAxLCJkb2V4aXQgZXhpdHN0YXQiLCIiLGV4aXRzdGF0KTsKKwlkZWJ1 ZyhGMTAxLCJkb2V4aXQgY29kZSIsIiIsY29kZSk7CisJZGVidWcoRjEwMSwiZG9leGl0IHhpdHN0 YSIsIiIseGl0c3RhKTsKKyAgICB9CisjZW5kaWYgLyogREVCVUcgKi8KKworI2lmZGVmIENLX0tF UkJFUk9TCisgICAgLyogSWYgd2UgYXJlIGF1dG9tYXRpY2FsbHkgZGVzdHJveWluZyBLZXJiZXJv cyBjcmVkZW50aWFscyBvbiBFeGl0ICovCisgICAgLyogZG8gaXQgbm93LiAqLworI2lmZGVmIEtS QjQKKyAgICBpZiAoa3JiNF9hdXRvZGVsID09IEtSQl9ERUxfRVgpIHsKKyAgICAgICAgZXh0ZXJu IHN0cnVjdCBrcmJfb3BfZGF0YSBrcmJfb3A7CisgICAgICAgIGtyYl9vcC52ZXJzaW9uID0gNDsK KyAgICAgICAga3JiX29wLmNhY2hlID0gTlVMTDsKKyAgICAgICAgY2tfa3JiNF9kZXN0cm95KCZr cmJfb3ApOworICAgIH0KKyNlbmRpZiAvKiBLUkI0ICovCisjaWZkZWYgS1JCNQorICAgIGlmIChr cmI1X2F1dG9kZWwgPT0gS1JCX0RFTF9FWCkgeworICAgICAgICBleHRlcm4gc3RydWN0IGtyYl9v cF9kYXRhIGtyYl9vcDsKKyAgICAgICAgZXh0ZXJuIGNoYXIgKiBrcmI1X2RfY2M7CisgICAgICAg IGtyYl9vcC52ZXJzaW9uID0gNTsKKyAgICAgICAga3JiX29wLmNhY2hlID0ga3JiNV9kX2NjOwor ICAgICAgICBja19rcmI1X2Rlc3Ryb3koJmtyYl9vcCk7CisgICAgfQorI2VuZGlmIC8qIEtSQjUg Ki8KKyNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLworCisjaWZuZGVmIE5PTE9DQUwKKyNpZmRlZiBP UzIKKyAgICBpZiAoU3lzSW5pdGVkKQorICAgIHsKKyNpZmRlZiBEQ01EQlVGCisgICAgICAgIGV4 dGVybiBzdHJ1Y3QgY21kcHRyICpjbWRzdGs7CisjZWxzZQorICAgICAgICBleHRlcm4gc3RydWN0 IGNtZHB0ciBjbWRzdGtbXTsKKyNlbmRpZiAvKiBEQ01EQlVGICovCisgICAgICAgIGV4dGVybiBp bnQgdHRfc3RhdHVzW107CisgICAgICAgIGV4dGVybiBpbnQgdm1vZGU7CisKKyAgICAgICAgLyog SWYgdGhlcmUgaXMgYSBkZW1vIHNjcmVlbiB0byBiZSBkaXNwbGF5ZWQsIGRpc3BsYXkgaXQgKi8K KyAgICAgICAgaWYgKGRpc3BsYXlfZGVtbykgeworICAgICAgICAgICAgZGVtb3Njcm4oVkNNRCk7 CisgICAgICAgICAgICBkaXNwbGF5X2RlbW8gPSAwOworICAgICAgICB9CisjaWZuZGVmIEtVSQor ICAgICAgICAvKiBUaGlzIGlzIGdvaW5nIHRvIGJlIGhpZGVvdXMuICBJZiB3ZSBoYXZlIGEgc3Rh dHVzIGxpbmUgKi8KKyAgICAgICAgLyogaW4gdGhlIGNvbW1hbmQgd2luZG93IHR1cm4gaXQgb2Zm IGJlZm9yZSB3ZSBleGl0LiAgICAgICovCisKKyAgICAgICAgaWYgKCB0dF9zdGF0dXNbVkNNRF0g JiYgdm1vZGUgPT0gVkNNRCApIHsKKyAgICAgICAgICAgIGRvbWFjKCJfY2xlYXJfc3RhdHVzbGlu ZSIsInNldCBjb21tYW5kIHN0YXR1c2xpbmUgb2ZmIiwKKyAgICAgICAgICAgICAgICAgICBjbWRz dGtbY21kbHZsXS5jY2ZsZ3MpOworICAgICAgICAgICAgZGVsbWFjKCJfY2xlYXJfc3RhdHVzbGlu ZSIsMSk7CisgICAgICAgICAgICBSZXF1ZXN0U2NyZWVuTXV0ZXgoLTEpOworICAgICAgICAgICAg VnNjcm5Jc0RpcnR5KHZtb2RlKTsKKyAgICAgICAgICAgIFJlbGVhc2VTY3JlZW5NdXRleCgpOwor ICAgICAgICAgICAgd2hpbGUgKCBJc1ZzY3JuRGlydHkodm1vZGUpICkKKyAgICAgICAgICAgICAg ICBtc2xlZXAoMjAwKTsKKyAgICAgICAgICAgIFJlcXVlc3RTY3JlZW5NdXRleCgtMSk7CisgICAg ICAgICAgICBSZWxlYXNlU2NyZWVuTXV0ZXgoKTsKKyAgICAgICAgfQorI2VuZGlmIC8qIEtVSSAq LworICAgICAgICBEaWFsZXJTZW5kKE9QVF9LRVJNSVRfRVhJVCxleGl0c3RhdCk7CisjaWZuZGVm IEtVSQorICAgICAgICBkZWJ1ZyhGMTAwLCJkb2V4aXQgYWJvdXQgdG8gbXNsZWVwIiwiIiwwKTsK KworICAgICAgICBpZiAoIGlzV2luOTUoKSApCisgICAgICAgICAgICBtc2xlZXAoMjUwKTsKKyNl bmRpZiAvKiBLVUkgKi8KKyAgICB9CisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogTk9MT0NB TCAqLworCisjaWZkZWYgSUtTRAorI2lmZGVmIENLX0xPR0lOCisgICAgaWYgKGluc2VydmVyICYm IHhfbG9nZ2VkKSB7CisjaWZuZGVmIE5PU1BMCisvKgorICBJZiBhIG1hY3JvIG5hbWVkICJvbl9s b2dvdXQiIGlzIGRlZmluZWQsIGV4ZWN1dGUgaXQuICBBbHNvIHJlbW92ZSBpdCBmcm9tIHRoZQor ICBtYWNybyB0YWJsZSwgaW4gY2FzZSBpdHMgZGVmaW5pdGlvbiBpbmNsdWRlcyBhbiBFWElUIG9y IFFVSVQgY29tbWFuZCwgd2hpY2gKKyAgd291bGQgY2F1c2UgbXVjaCByZWN1cnNpb24gYW5kIHdv dWxkIHByZXZlbnQgdGhlIHByb2dyYW0gZnJvbSBldmVyIGFjdHVhbGx5CisgIEVYSVRpbmcuCisq LworCWlmIChubWFjKSB7CQkJLyogQW55IG1hY3JvcyBkZWZpbmVkPyAqLworCSAgICBpbnQgazsJ CQkvKiBZZXMgKi8KKwkgICAgY2hhciAqIGNtZCA9ICJvbl9sb2dvdXQiOwkvKiBNU1ZDIDIueCBj b21waWxlciBlcnJvciAqLworCSAgICBrID0gbWxvb2sobWFjdGFiLGNtZCxubWFjKTsJLyogTG9v ayB1cCAib25fbG9nb3V0IiAqLworCSAgICBpZiAoayA+PSAwKSB7CQkvKiBJZiBmb3VuZCwgKi8K KwkJKihtYWN0YWJba10ua3dkKSA9IE5VTDsJLyogcG9rZSBpdHMgbmFtZSBmcm9tIHRoZSB0YWJs ZSwgKi8KKwkJaWYgKGRvZG8oaywiIiwwKSA+IC0xKQkvKiBzZXQgaXQgdXAsICovCisJCSAgcGFy c2VyKDEpOwkJLyogYW5kIGV4ZWN1dGUgaXQgKi8KKwkgICAgfQorCX0KKyNlbmRpZiAvKiBOT1NQ TCAqLworCXp2bG9nb3V0KCk7CisgICAgfQorI2VuZGlmIC8qIENLX0xPR0lOICovCisjZW5kaWYg LyogSUtTRCAqLworCisgICAgZGVidWcoRjEwMCwiZG9leGl0IGFib3V0IHRvIGRvY2xlYW4iLCIi LDApOworICAgIGRvY2xlYW4oMSk7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENsZWFuIHVw IG1vc3QgdGhpbmdzICovCisKKyNpZmRlZiBWTVMKKyAgICBpZiAoY29kZSA9PSAtMSkKKyAgICAg IGNvZGUgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTaW5jZSB3ZSBzZXQgdHdvIGRp ZmZlcmVudCBpdGVtcyAqLworICAgIHNwcmludGYoZW52c3RyLCIlZCIsIGV4aXRzdGF0IHwgY29k ZSk7IC8qIFNBRkUgKi8KKyAgICBzeW12YWwuZHNjJHdfbGVuZ3RoID0gKGludClzdHJsZW4oZW52 c3RyKTsKKyAgICBzeW12YWwuZHNjJGFfcG9pbnRlciA9IGVudnN0cjsKKyAgICBzeW12YWwuZHNj JGJfY2xhc3MgPSBEU0MkS19DTEFTU19TOworICAgIHN5bXZhbC5kc2MkYl9kdHlwZSA9IERTQyRL X0RUWVBFX1Q7CisgICAgaSA9IDI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU3Rv cmUgaW4gZ2xvYmFsIHRhYmxlICovCisjaWZkZWYgQ09NTUVOVCAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogTWFydGluIFppbnNlciAqLworICAgIExJQiRTRVRfU1lNQk9MKCZzeW1uYW0sICZz eW12YWwsICZpKTsKKyNlbHNlCisgICAgbGliJHNldF9zeW1ib2woJnN5bW5hbSwgJnN5bXZhbCwg JmkpOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICBpZiAoZXhpdHN0YXQgPT0gQkFEX0VYSVQp CisgICAgICBleGl0c3RhdCA9IFNTJF9BQk9SVCB8IFNUUyRNX0lOSElCX01TRzsKKyAgICBpZiAo ZXhpdHN0YXQgPT0gR09PRF9FWElUKQorICAgICAgZXhpdHN0YXQgPSBTUyRfTk9STUFMIHwgU1RT JE1fSU5ISUJfTVNHOworI2Vsc2UgLyogTm90IFZNUyAqLworICAgIGlmIChjb2RlICE9IC0xKSAg ICAgICAgICAgICAgICAgICAgIC8qIFRha2UgMXN0IGFyZyBsaXRlcmFsbHkgKi8KKyAgICAgIGV4 aXRzdGF0IHw9IGNvZGU7CisjZW5kaWYgLyogVk1TICovCisKKyNpZmRlZiBJS1NECisjaWZkZWYg SUtTREIKKyAgICBkZWJ1ZyhGMTAxLCJkb2V4aXQgaWtkYm9wZW4iLCIiLGlrZGJvcGVuKTsKKyAg ICBpZiAoaWtkYm9wZW4gJiYgZGJmcCkgeyAgICAgICAgICAgICAvKiBJZiBJS1NEIGRhdGFiYXNl IG9wZW4gKi8KKyAgICAgICAgaW50IHg7CisgICAgICAgIHggPSBmcmVlc2xvdChteWRic2xvdCk7 ICAgICAgICAgLyogRnJlZSBvdXIgc2xvdC4uLiAqLworICAgICAgICBkZWJ1ZyhGMTAxLCJkb2V4 aXQgZnJlZXNsb3QiLCIiLHgpOworICAgICAgICBmY2xvc2UoZGJmcCk7ICAgICAgICAgICAgICAg ICAgIC8qIGFuZCBjbG9zZSBpdC4gKi8KKyAgICB9CisjZW5kaWYgLyogSUtTREIgKi8KKyNlbmRp ZiAvKiBJS1NEICovCisKKy8qIFdlIGhhdmUgcHV0IHRoaXMgb2ZmIHRpbGwgdGhlIHZlcnkgbGFz dCBtb21lbnQuLi4gKi8KKworI2lmZGVmIERFQlVHCisgICAgaWYgKGRlYmxvZykgeyAgICAgICAg ICAgICAgICAgICAgICAgLyogQ2xvc2UgdGhlIGRlYnVnIGxvZy4gKi8KKyAgICAgICAgZGVidWco RjEwMSwiQy1LZXJtaXQgRVhJVCBzdGF0dXMiLCIiLGV4aXRzdGF0KTsKKyAgICAgICAgKmRlYmZp bCA9ICdcMCc7CisgICAgICAgIGRlYmxvZyA9IDA7CisgICAgICAgIHpjbG9zZShaREZJTEUpOwor ICAgIH0KKyNlbmRpZiAvKiBERUJVRyAqLworCisjaWZkZWYgT1MyCisgICAgX2V4aXQoZXhpdHN0 YXQpOyAgICAgICAgICAgIC8qIEV4aXQgZnJvbSBDLUtlcm1pdCAobm8gbWF0dGVyIHdoYXQpICov CisjZWxzZSAvKiBPUzIgKi8KKyAgICBleGl0KGV4aXRzdGF0KTsgICAgICAgICAgICAgICAgICAg ICAvKiBFeGl0IGZyb20gQy1LZXJtaXQgKi8KKyNlbmRpZiAvKiBPUzIgKi8KK30KKworVk9JRAor YmdjaGsoKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENoZWNrIGJhY2tncm91 bmQgc3RhdHVzICovCisgICAgaWYgKGJnc2V0IDwgMCkgeyAgICAgICAgICAgICAgICAgICAgLyog VGhleSBkaWRuJ3QgdHlwZSBTRVQgQkFDS0dST1VORCAqLworI2lmZGVmIFZNUyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIFNldCBwcm9tcHQgZmxhZyBiYXNlZCBvbiAqLworICAgICAg ICBwZmxhZyA9ICFiYXRjaDsgICAgICAgICAgICAgICAgIC8qIHdoYXQgd2UgZGV0ZWN0ZWQgYXQg c3RhcnR1cC4gKi8KKyNlbHNlCisgICAgICAgIHBmbGFnID0gIWJhY2tncmQ7CisjZW5kaWYgLyog Vk1TICovCisgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogT3RoZXJ3 aXNlIFNFVCBCQUNLR1JPVU5EIHZhbHVlICovCisgICAgICAgIHBmbGFnID0gKGJnc2V0ID09IDAg PyAxIDogMCk7CisgICAgfQorCisjaWZuZGVmIE5PSUNQCisgICAgLyogTWVzc2FnZSBmbGFnIG9u IG9ubHkgaWYgYXQgdG9wIGxldmVsLCBwZmxhZyBpcyBvbiwgYW5kIFFVSUVUIGlzIE9GRiAqLwor ICAgIGlmICgheGNtZHNyYykKKyAgICAgIG1zZ2ZsZyA9IChwZmxhZyA9PSAwKSA/IDAgOiAhcXVp ZXQ7CisgICAgZWxzZSBtc2dmbGcgPSAwOworI2Vsc2UKKyAgICBtc2dmbGcgPSAwOworI2VuZGlm IC8qIE5PSUNQICovCit9CisKKy8qIFNldCBjb25zb2xlIGludGVycnVwdHMgKi8KKworVk9JRAor c2V0aW50KCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFjY29yZGluZyB0byBT RVQgQ09NTUFORCBJTlRFUlJVUCAqLworICAgIGludCB4ID0gMDsKKyAgICBpZiAoY21kaW50KSAg eCB8PSAxOworICAgIGlmICh4c3VzcGVuZCkgeCB8PSAyOworICAgIGRlYnVnKEYxMDEsInNldGlu dCIsIiIseCk7CisKKyAgICBzd2l0Y2ggKHgpIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBT ZXQgdGhlIGRlc2lyZWQgY29tYmluYXRpb24gKi8KKyAgICAgIGNhc2UgMDogY29ubm9pKCk7IGJy ZWFrOyAgICAgICAgICAvKiBObyBpbnRlcnJ1cHRzICovCisgICAgICBjYXNlIDE6IGNvbmludCh0 cmFwLFNJR19JR04pOyBicmVhazsKKyAgICAgIGNhc2UgMjogY29uaW50KFNJR19JR04sc3RwdHJh cCk7IGJyZWFrOworICAgICAgY2FzZSAzOiBjb25pbnQodHJhcCxzdHB0cmFwKTsgYnJlYWs7Cisg ICAgfQorICAgIGJnY2hrKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENoZWNrIGJh Y2tncm91bmQgc3RhdHVzICovCit9CisKKyNpZmRlZiBERUJVRworLyogIEQgRSBCIFUgRyAgLS0g IEVudGVyIGEgcmVjb3JkIGluIHRoZSBkZWJ1Z2dpbmcgbG9nICAqLworCisvKgorIENhbGwgd2l0 aCBhIGZvcm1hdCwgdHdvIHN0cmluZ3MsIGFuZCBhIG51bWJlcjoKKyAgIGYgIC0gRm9ybWF0LCBh IGJpdCBzdHJpbmcgaW4gcmFuZ2UgMC03LgorICAgICAgICBJZiBiaXQgeCBpcyBvbiwgdGhlbiBh cmd1bWVudCBudW1iZXIgeCBpcyBwcmludGVkLgorICAgczEgLSBTdHJpbmcsIGFyZ3VtZW50IG51 bWJlciAxLiAgSWYgc2VsZWN0ZWQsIHByaW50ZWQgYXMgaXMuCisgICBzMiAtIFN0cmluZywgYXJn dW1lbnQgbnVtYmVyIDIuICBJZiBzZWxlY3RlZCwgcHJpbnRlZCBpbiBicmFja2V0cy4KKyAgIG4g IC0gTG9uZyBpbnQsIGFyZ3VtZW50IDMuICBJZiBzZWxlY3RlZCwgcHJpbnRlZCBwcmVjZWRlZCBi eSBlcXVhbHMgc2lnbi4KKworICAgZj0wIGlzIHNwZWNpYWw6IHByaW50IHMxLHMyLCBhbmQgaW50 ZXJwcmV0IG4gYXMgYSBjaGFyLgorCisgICBmPUYwMTEgKDMpIGlzIGFsc28gc3BlY2lhbDsgaW4g dGhpcyBjYXNlIHMyIGlzIGludGVycGV0ZWQgYXMgYSBjb3VudGVkCisgICBzdHJpbmcgdGhhdCBt aWdodCBjb250YWluIE5VTHMuICBuIGlzIHRoZSBsZW5ndGguICBJZiBuIGlzIG5lZ2F0aXZlLCB0 aGlzCisgICBtZWFucyB0aGUgc3RyaW5nIGhhcyBiZWVuIHRydW5jYXRlZCBhbmQgIi4uIiBzaG91 bGQgYmUgcHJpbnRlZCBhZnRlciB0aGUKKyAgIGZpcnN0IG4gYnl0ZXMuICBOVUwgYW5kIExGIGJ5 dGVzIGFyZSBwcmludGVkIGFzICI8TlVMPiIgYW5kICI8TEY+Ii4KKworICAgR2xvYmFsczoKKyAg ICAgZGVibG9nOiBub256ZXJvIGlmIGRlYnVnIGxvZyBvcGVuLgorICAgICBkZWJvazogIG5vbnpl cm8gaWYgb2sgdG8gd3JpdGUgZW50cmllcy4KKyovCisvKgorICBXQVJOSU5HOiBEb24ndCBjaGFu Z2UgREVCVUZMIHdpdGhvdXQgY2hhbmdpbmcgc3ByaW50ZigpIGZvcm1hdHMgYmVsb3csCisgIGFj Y29yZGluZ2x5LgorKi8KKyNkZWZpbmUgREJVRkwgNDAwMAorLyoKKyAgV0FSTklORzogVGhpcyBy b3V0aW5lIGlzIG5vdCB0aHJlYWQtc2FmZSwgZXNwZWNpYWxseSB3aGVuIEtlcm1pdCBpcworICBl eGVjdXRpbmcgb24gbXVsdGlwbGUgQ1BVcyAtLSBhcyBkaWZmZXJlbnQgdGhyZWFkcyB3cml0ZSB0 byB0aGUgc2FtZQorICBzdGF0aWMgYnVmZmVyLCB0aGUgZGVidWcgc3RhdGVtZW50cyBhcmUgYWxs IGludGVybGVhdmVkLiAgVG8gYmUgZml4ZWQKKyAgbGF0ZXIuLi4KKyovCitzdGF0aWMgY2hhciAq ZGJwdHIgPSAoY2hhciAqKTA7CisKK2ludAorI2lmZGVmIENLX0FOU0lDCitkb2RlYnVnKGludCBm LCBjaGFyICpzMSwgY2hhciAqczIsIENLX09GRl9UIG4pCisjZWxzZQorZG9kZWJ1ZyhmLHMxLHMy LG4pIGludCBmOyBjaGFyICpzMSwgKnMyOyBDS19PRkZfVCBuOworI2VuZGlmIC8qIENLX0FOU0lD ICovCisvKiBkb2RlYnVnICovIHsKKyAgICBjaGFyICpzcDsKKyAgICBpbnQgbGVuMSwgbGVuMjsK KyAgICBleHRlcm4gaW50IGRlYnRpbTsKKyNpZmRlZiBPUzIKKyAgICBleHRlcm4gaW50IFN5c0lu aXRlZDsKKyNlbmRpZiAvKiBPUzIgKi8KKworICAgIGlmICghZGVibG9nIHx8ICFkZWJvaykKKyAg ICAgIHJldHVybigwKTsKKworI2lmZGVmIENPTU1FTlQKKyAgICAvKiBleHBlbnNpdmUuLi4gKi8K KyAgICBpZiAoIWNoa2ZuKFpERklMRSkpCQkJLyogRGVidWcgbG9nIG5vdCBvcGVuLCBkb24ndC4g Ki8KKyAgICAgIHJldHVybigwKTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgaWYgKCFkYnB0 cikgeyAgICAgICAgICAgICAgICAgICAgICAgLyogQWxsb2NhdGUgbWVtb3J5IGJ1ZmZlciAqLwor ICAgICAgICBkYnB0ciA9IG1hbGxvYyhEQlVGTCs0KTsgICAgICAgIC8qIFRoaXMgb25seSBoYXBw ZW5zIG9uY2UgKi8KKyAgICAgICAgaWYgKCFkYnB0cikgeworICAgICAgICAgICAgemNsb3NlKFpE RklMRSk7CisgICAgICAgICAgICByZXR1cm4oMCk7CisgICAgICAgIH0KKyAgICB9CisvKgorICBU aGlzIHByZXZlbnRzIGluZmluaXRlIHJlY3Vyc2lvbiBpbiBjYXNlIHdlIGFjY2lkZW50YWxseSBw dXQgYSBkZWJ1ZygpCisgIGNhbGwgaW4gdGhpcyByb3V0aW5lLCBvciBjYWxsIGFub3RoZXIgcm91 dGluZSB0aGF0IGNvbnRhaW5zIGRlYnVnKCkgY2FsbHMuCisgIEZyb20gdGhpcyBwb2ludCBvbiwg YWxsIHJldHVybnMgZnJvbSB0aGlzIHJldHVybiBtdXN0IGJlIHZpYSBnb3RvIHhkZWJ1ZywKKyAg d2hpY2ggc2V0cyBkZWJsb2cgYmFjayB0byAxLgorKi8KKyNpZmRlZiBPUzIKKyAgICBpZiAoU3lz SW5pdGVkKSB7CisJaWYgKFJlcXVlc3REZWJ1Z011dGV4KDMwMDAwKSkKKwkgICAgZ290byB4ZGVi dWc7CisgICAgfQorI2Vsc2UgLyogT1MyICovCisgICAgZGVibG9nID0gMDsgICAgICAgICAgICAg ICAgICAgICAgICAgLyogUHJldmVudCBpbmZpbml0ZSByZWN1cnNpb24gKi8KKyNlbmRpZiAvKiBP UzIgKi8KKworICAgIGlmIChkZWJ0aW0pIHsgICAgICAgICAgICAgICAgICAgICAgIC8qIFRpbWVz dGFtcCAqLworICAgICAgICBjaGFyICp0YiwgdHNidWZbNDhdOworICAgICAgICB6dGltZSgmdGIp OworICAgICAgICBja3N0cm5jcHkodHNidWYsdGIsMzIpOworICAgICAgICBpZiAoenRtc2VjID4g LTFMKSB7CisJICAgIHNwcmludGYodHNidWYrMTksIi4lMDNsZCAiLHp0bXNlYyk7IC8qIFNBRkUg Ki8KKwl9IGVsc2UgeworCSAgICB0c2J1ZlsxOV0gPSAnOic7CisJICAgIHRzYnVmWzIwXSA9IFNQ OworCSAgICB0c2J1ZlsyMV0gPSBOVUw7CisJfQorICAgICAgICB6c291dChaREZJTEUsdHNidWYr MTEpOworICAgIH0KKyAgICBpZiAoIXMxKSBzMT0iKE5VTEwpIjsKKyAgICBpZiAoIXMyKSBzMj0i KE5VTEwpIjsKKworICAgIGxlbjEgPSBzdHJsZW4oczEpOworICAgIGxlbjIgPSBzdHJsZW4oczIp OworCisjaWZkZWYgQ09NTUVOVAorLyoKKyAgVGhpcyBzaG91bGQgd29yaywgYnV0IGl0IGRvZXNu J3QuCisgIFNvIGluc3RlYWQgd2UnbGwgY29wZSB3aXRoIG92ZXJmbG93IHZpYSBzcHJpbnRmIGZv cm1hdHMuCisgIE4uQi46IFVORk9SVFVOQVRFTFksIHRoaXMgbWVhbnMgd2UgaGF2ZSB0byBwdXQg Y29uc3RhbnRzIGluIHRoZQorICBzcHJpbnRmIGZvcm1hdHMuCisqLworICAgIGlmIChmICE9IEYw MTEgJiYgKCFmIHx8IChmICYgNikpKSB7IC8qIFN0cmluZyBhcmd1bWVudChzKSBpbmNsdWRlZD8g Ki8KKyAgICAgICAgeCA9IChpbnQpIHN0cmxlbihzMSkgKyAoaW50KSBzdHJsZW4oczIpICsgMTg7 CisgICAgICAgIGlmICh4ID4gZGJ1ZmwpIHsgICAgICAgICAgICAgICAgLyogTG9uZ2VyIHRoYW4g YnVmZmVyPyAqLworICAgICAgICAgICAgaWYgKGRicHRyKSAgICAgICAgICAgICAgICAgIC8qIFll cywgZnJlZSBwcmV2aW91cyBidWZmZXIgKi8KKyAgICAgICAgICAgICAgZnJlZShkYnB0cik7Cisg ICAgICAgICAgICBkYnB0ciA9IChjaGFyICopIG1hbGxvYyh4ICsgMik7IC8qIEFsbG9jYXRlIGEg bmV3IG9uZSAqLworICAgICAgICAgICAgaWYgKCFkYnB0cikgeworICAgICAgICAgICAgICAgIHpz b3V0bChaREZJTEUsIkRFQlVHOiBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlIik7CisgICAgICAg ICAgICAgICAgZGVibG9nID0gMDsKKyAgICAgICAgICAgICAgICB6Y2xvc2UoWkRGSUxFKTsKKyAg ICAgICAgICAgICAgICBnb3RvIHhkZWJ1ZzsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg ICAgICAgICAgZGJ1ZmwgPSB4OworICAgICAgICAgICAgICAgIHNwcmludGYoZGJwdHIsIkRFQlVH OiBCdWZmZXIgZXhwYW5kZWQgdG8gJWRcbiIsIHggKyAxOCk7CisgICAgICAgICAgICAgICAgenNv dXRsKFpERklMRSxkYnB0cik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisjZW5k aWYgLyogQ09NTUVOVCAqLworCisjaWZkZWYgQ09NTUVOVAorLyogVGhlIGFmb3JlbWVudGlvbmVk IHNwcmludGYoKSBmb3JtYXRzIHdlcmUgbGlrZSB0aGlzOiAqLworICAgICAgICBpZiAobiA+IDMx ICYmIG4gPCAxMjcpCisgICAgICAgICAgc3ByaW50ZihzcCwiJS4xMDBzJS4yMDAwczolY1xuIixz MSxzMiwoQ0hBUikgbik7CisgICAgICAgIGVsc2UgaWYgKG4gPCAzMiB8fCBuID09IDEyNykKKyAg ICAgICAgICBzcHJpbnRmKHNwLCIlLjEwMHMlLjIwMDBzOl4lY1xuIixzMSxzMiwoQ0hBUikgKChu KzY0KSAmIDB4N0YpKTsKKyAgICAgICAgZWxzZSBpZiAobiA+IDEyNyAmJiBuIDwgMTYwKQorICAg ICAgICAgIHNwcmludGYoc3AsIiUuMTAwcyUuMjAwMHM6fl4lY1xuIixzMSxzMiwoQ0hBUikoKG4t NjQpICYgMHg3RikpOworICAgICAgICBlbHNlIGlmIChuID4gMTU5ICYmIG4gPCAyNTYpCisgICAg ICAgICAgc3ByaW50ZihzcCwiJS4xMDBzJS4yMDAwczp+JWNcbiIsczEsczIsKENIQVIpIChuICYg MHg3RikpOworICAgICAgICBlbHNlIHNwcmludGYoc3AsIiUuMTAwcyUuMjAwMHM6JWxkXG4iLHMx LHMyLG4pOworLyoKKyAgQnV0LCBuYXR1cmFsbHksIGl0IHR1cm5zIG91dCB0aGVzZSBhcmUgbm90 IHBvcnRhYmxlIGVpdGhlciwgc28gbm93CisgIHdlIGRvIHRoZSBzdHVwaWRlc3QgcG9zc2libGUg dGhpbmcuCisqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKworI2lmZGVmIEJJR0JVRk9LCisvKiBO ZWVkIHRvIGFjY2VwdCBsb25nZXIgc3RyaW5ncyB3aGVuIGRlYnVnZ2luZyBhdXRoZW50aWNhdGVk IGNvbm5lY3Rpb25zICovCisgICAgaWYgKGYgPT0gRjAxMCkgeworICAgICAgICBpZiAobGVuMiAr IDIgPj0gREJVRkwpIHMyID0gIihzdHJpbmcgdG9vIGxvbmcpIjsKKyAgICB9IGVsc2UgaWYgKGYg IT0gRjAxMSAmJiBmICE9IEYxMDApIHsKKyAgICAgICAgaWYgKGxlbjEgPiAxMDApIHMxID0gIihz dHJpbmcgdG9vIGxvbmcpIjsKKyAgICAgICAgaWYgKGxlbjIgKyAxMDEgPj0gREJVRkwpIHMyID0g IihzdHJpbmcgdG9vIGxvbmcpIjsKKyAgICB9CisjZWxzZQorICAgIGlmIChmICE9IEYwMTEpIHsK KyAgICAgICAgaWYgKGxlbjEgPiAxMDApIHMxID0gIihzdHJpbmcgdG9vIGxvbmcpIjsKKyAgICAg ICAgaWYgKGxlbjIgKyAxMDEgPj0gREJVRkwpIHMyID0gIihzdHJpbmcgdG9vIGxvbmcpIjsKKyAg ICB9CisjZW5kaWYgLyogQklHQlVGT0sgKi8KKworICAgIHNwID0gZGJwdHI7CisKKyAgICBzd2l0 Y2ggKGYpIHsgICAgICAgICAgICAgICAgLyogV3JpdGUgbG9nIHJlY29yZCBhY2NvcmRpbmcgdG8g Zm9ybWF0LiAqLworICAgICAgY2FzZSBGMDAwOiAgICAgICAgICAgICAgICAvKiAwID0gcHJpbnQg Ym90aCBzdHJpbmdzLCBhbmQgbiBhcyBhIGNoYXIuICovCisgICAgICAgIGlmIChsZW4yID4gMCkg eworICAgICAgICAgICAgaWYgKChuID4gMzEgJiYgbiA8IDEyNykgfHwgKG4gPiAxNTkgJiYgbiA8 IDI1NikpCisgICAgICAgICAgICAgIHNwcmludGYoc3AsIiVzWyVzXT0lY1xuIixzMSxzMiwoQ0hB Uikgbik7CisgICAgICAgICAgICBlbHNlIGlmIChuIDwgMzIgfHwgbiA9PSAxMjcpCisgICAgICAg ICAgICAgIHNwcmludGYoc3AsIiVzWyVzXT1eJWNcbiIsczEsczIsKENIQVIpICgobis2NCkgJiAw eDdGKSk7CisgICAgICAgICAgICBlbHNlIGlmIChuID4gMTI3ICYmIG4gPCAxNjApCisgICAgICAg ICAgICAgIHNwcmludGYoc3AsIiVzWyVzXT1+XiVjXG4iLHMxLHMyLChDSEFSKSgobi02NCkgJiAw eDdGKSk7CisgICAgICAgICAgICBlbHNlIHNwcmludGYoc3AsIiVzWyVzXT0weCVsWFxuIixzMSxz MiwobG9uZyluKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICgobiA+IDMxICYm IG4gPCAxMjcpIHx8IChuID4gMTU5ICYmIG4gPCAyNTYpKQorICAgICAgICAgICAgICBzcHJpbnRm KHNwLCIlcz0lY1xuIixzMSwoQ0hBUikgbik7CisgICAgICAgICAgICBlbHNlIGlmIChuIDwgMzIg fHwgbiA9PSAxMjcpCisgICAgICAgICAgICAgIHNwcmludGYoc3AsIiVzPV4lY1xuIixzMSwoQ0hB UikgKChuKzY0KSAmIDB4N0YpKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKG4gPiAxMjcgJiYgbiA8 IDE2MCkKKyAgICAgICAgICAgICAgc3ByaW50ZihzcCwiJXM9fl4lY1xuIixzMSwoQ0hBUikoKG4t NjQpICYgMHg3RikpOworICAgICAgICAgICAgZWxzZSBzcHJpbnRmKHNwLCIlcz0weCVsWFxuIixz MSwobG9uZyluKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoenNvdXQoWkRGSUxFLGRicHRyKSA8 IDApIHsKKyAgICAgICAgICAgIGRlYmxvZyA9IDA7CisgICAgICAgICAgICB6Y2xvc2UoWkRGSUxF KTsKKyAgICAgICAgfQorI2lmZGVmIENLU1lTTE9HCisgICAgICAgIGlmIChja3hzeXNsb2cgPj0g U1lTTEdfREIgJiYgY2t4bG9nZ2luZykgeworICAgICAgICAgICAgY2tzeXNsb2coU1lTTEdfREIs MSwiZGVidWciLGRicHRyLE5VTEwpOworICAgICAgICB9CisjZW5kaWYgLyogQ0tTWVNMT0cgKi8K KyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgRjAwMTogICAgICAgICAgICAgICAgICAgICAg ICAvKiAxLCAiPW4iICovCisjaWZkZWYgQ09NTUVOVAorICAgICAgICAvKiBUaGlzIHdhcyBuZXZl ciB1c2VkICovCisgICAgICAgIHNwcmludGYoc3AsIj0lc1xuIixja2ZzdG9hKG4pKTsKKyNlbHNl CisgICAgICAgIC8qIExpa2UgRjExMSwgYnV0IHNob3dzIG51bWJlciBuIGluIGhleCAqLworCWNr bWFreG1zZyhzcCxEQlVGTCwKKwkJICBzMSwKKwkJICAoKnMxID8gIjoiIDogIiIpLAorCQkgIHMy LAorCQkgICgqczIgPyAiOiIgOiAiIiksCisJCSAgY2tsdG94KG4pLAorCQkgICJcbiIsCisJCSAg TlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwKKwkJICApOworI2VuZGlmIC8qIENPTU1FTlQg Ki8KKyAgICAgICAgaWYgKHpzb3V0KFpERklMRSxkYnB0cikgPCAwKSB7CisgICAgICAgICAgICBk ZWJsb2cgPSAwOworICAgICAgICAgICAgemNsb3NlKFpERklMRSk7CisgICAgICAgIH0KKyNpZmRl ZiBDS1NZU0xPRworICAgICAgICBpZiAoY2t4c3lzbG9nID49IFNZU0xHX0RCICYmIGNreGxvZ2dp bmcpIHsKKyAgICAgICAgICAgIGNrc3lzbG9nKFNZU0xHX0RCLDEsImRlYnVnIixkYnB0cixOVUxM KTsKKyAgICAgICAgfQorI2VuZGlmIC8qIENLU1lTTE9HICovCisgICAgICAgIGJyZWFrOworCisv KgorICBUaGlzIG9uZSB3YXMgbmV2ZXIgdXNlZCBzbyAoT2N0b2JlciAyMDAwKSB3ZSBub3cgdXNl IGl0IGxpa2UgRjAxMSwKKyAgZXhjZXB0IGluIHRoaXMgY2FzZSB3ZSB0cmVhdCBzMiBhcyBOVUwg dGVybWluYXRlZC4KKyovCisgICAgICBjYXNlIEYwMTA6CisJbiA9IC1kZWJ4bGVuOworLyoKKyAg VGhpcyBvbmUgdHJlYXRzIG4gYXMgdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nIHMyLCB3aGljaCBt YXkgY29udGFpbiBOVUxzLgorICBJdCdzIGdvb2QgZm9yIGxvZ2dpbmcgTlVMLWJlYXJpbmcgZGF0 YSBpbiB0aGUgZGVidWcgbG9nLgorKi8KKyAgICAgIGNhc2UgRjAxMTogeworCSAgaW50IGksIGos IGNvbnRkID0gMDsKKwkgIGNoYXIgKiBwID0gczIsICpwYnVmID0gTlVMTDsJLyogcCA9IHNvdXJj ZSBwb2ludGVyICovCisJICBpbnQgbTsJCQkvKiBwYnVmID0gZGVzdGluYXRpb24gcG9pbnRlciAq LworCisJICBpZiAoZiA9PSBGMDExKSB7CisJICAgICAgaWYgKG4gPCAwKSB7CQkvKiBuID0gc2l6 ZSBvZiBzb3VyY2UgKi8KKwkJICBuID0gMCAtIG47CQkvKiBOZWdhdGl2ZSBtZWFucyB0byBhZGQg Ii4uLiIgKi8KKwkJICBjb250ZCA9IDE7CisJICAgICAgfQorCSAgfSBlbHNlIHsKKwkgICAgICBp bnQgeCwgZmxhZyA9IDA7CisJICAgICAgeCA9IHN0cmxlbihzMik7CisJICAgICAgaWYgKG4gPCAw KSB7CisJCSAgZmxhZyA9IDE7CisJCSAgbiA9IDAgLSBuOworCSAgICAgIH0KKwkgICAgICBpZiAo eCA8IG4pCisJCW4gPSB4OworCSAgfQorCSAgaWYgKG4gPT0gMCkJCQkvKiAwIG1lYW5zIGRvIG5v dGhpbmcgKi8KKwkgICAgZ290byB4ZGVidWc7CisJICBtID0gREJVRkwgLSA4OwkJLyogR2V0IHNp emUgZm9yIGludGVycHJldGVkIHBhcnQgKi8KKwkgIGlmIChuID4gbSkJCQkvKiBFbnN1cmUgcmVx dWVzdGVkIHNpemUgbm90IHRvbyBiaWcgKi8KKwkgICAgbiA9IG07CisJICBwYnVmID0gZGJwdHI7 CQkJLyogQ29uc3RydWN0aW9uIHBvaW50ZXIgKi8KKwkgIGkgPSAwOworCSAgcGJ1ZltpKytdID0g J1snOwkJLyogSW50ZXJwcmV0IHRoZSBzdHJpbmcgaW50byBpdCAqLworCSAgZm9yIChqID0gMDsg aiA8IG4gJiYgaSA8IG0tNDsgcCsrLGorKykgeyAvKiBjaGFyIGJ5IGNoYXIuLi4gKi8KKwkgICAg ICBpZiAoKnAgPT0gTEYpIHsKKwkJICBpZiAoaSA+PSBtLTQpCisJCSAgICBicmVhazsKKwkJICBw YnVmW2krK10gPSAnPCc7CisJCSAgcGJ1ZltpKytdID0gJ0wnOworCQkgIHBidWZbaSsrXSA9ICdG JzsKKwkJICBwYnVmW2krK10gPSAnPic7CisJCSAgY29udGludWU7CisJICAgICAgfSBlbHNlIGlm ICgqcCA9PSBDUikgeworCQkgIGlmIChpID49IG0tNCkKKwkJICAgIGJyZWFrOworCQkgIHBidWZb aSsrXSA9ICc8JzsKKwkJICBwYnVmW2krK10gPSAnQyc7CisJCSAgcGJ1ZltpKytdID0gJ1InOwor CQkgIHBidWZbaSsrXSA9ICc+JzsKKwkJICBjb250aW51ZTsKKwkgICAgICB9IGVsc2UgaWYgKCpw ID09IEhUKSB7CisJCSAgaWYgKGkgPj0gbS01KQorCQkgICAgYnJlYWs7CisJCSAgcGJ1ZltpKytd ID0gJzwnOworCQkgIHBidWZbaSsrXSA9ICdUJzsKKwkJICBwYnVmW2krK10gPSAnQSc7CisJCSAg cGJ1ZltpKytdID0gJ0InOworCQkgIHBidWZbaSsrXSA9ICc+JzsKKwkJICBjb250aW51ZTsKKwkg ICAgICB9IGVsc2UgaWYgKCpwKSB7CisJCSAgcGJ1ZltpKytdID0gKnA7CisJCSAgY29udGludWU7 CisJICAgICAgfSBlbHNlIHsKKwkJICBpZiAoaSA+PSBtLTUpCisJCSAgICBicmVhazsKKwkJICBw YnVmW2krK10gPSAnPCc7CisJCSAgcGJ1ZltpKytdID0gJ04nOworCQkgIHBidWZbaSsrXSA9ICdV JzsKKwkJICBwYnVmW2krK10gPSAnTCc7CisJCSAgcGJ1ZltpKytdID0gJz4nOworCQkgIGNvbnRp bnVlOworCSAgICAgIH0KKwkgIH0KKwkgIGlmIChpIDwgbS0yICYmICgqcCB8fCBjb250ZCkpIHsK KwkgICAgICBwYnVmW2krK10gPSAnLic7CisJICAgICAgcGJ1ZltpKytdID0gJy4nOworCSAgfQor CSAgcGJ1ZltpKytdID0gJ10nOworCSAgcGJ1ZltpXSA9IE5VTDsKKwkgIGlmICh6c291dChaREZJ TEUsczEpIDwgMCkgeworCSAgICAgIGRlYmxvZyA9IDA7CisJICAgICAgemNsb3NlKFpERklMRSk7 CisJICB9CisJICBpZiAoenNvdXRsKFpERklMRSxwYnVmKSA8IDApIHsKKwkgICAgICBkZWJsb2cg PSAwOworCSAgICAgIHpjbG9zZShaREZJTEUpOworCSAgfQorI2lmZGVmIENLU1lTTE9HCisJICBp ZiAoY2t4c3lzbG9nID49IFNZU0xHX0RCICYmIGNreGxvZ2dpbmcpIHsKKwkgICAgICBja3N5c2xv ZyhTWVNMR19EQiwxLCJkZWJ1ZyIsczEscGJ1Zik7CisJICB9CisjZW5kaWYgLyogQ0tTWVNMT0cg Ki8KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBGMTAwOiAgICAgICAg ICAgICAgICAgICAgICAgIC8qIDQsICJzMSIgKi8KKyAgICAgICAgaWYgKHpzb3V0bChaREZJTEUs czEpIDwgMCkgeworICAgICAgICAgICAgZGVibG9nID0gMDsKKyAgICAgICAgICAgIHpjbG9zZSha REZJTEUpOworICAgICAgICB9CisjaWZkZWYgQ0tTWVNMT0cKKyAgICAgICAgaWYgKGNreHN5c2xv ZyA+PSBTWVNMR19EQiAmJiBja3hsb2dnaW5nKSB7CisgICAgICAgICAgICBja3N5c2xvZyhTWVNM R19EQiwxLCJkZWJ1ZyIsczEsTlVMTCk7CisgICAgICAgIH0KKyNlbmRpZiAvKiBDS1NZU0xPRyAq LworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRjEwMTogICAgICAgICAgICAgICAgICAgICAg ICAvKiA1LCAiczE9biIgKi8KKyAgICAgICAgc3ByaW50ZihzcCwiJXM9JXNcbiIsczEsY2tmc3Rv YShuKSk7CisgICAgICAgIGlmICh6c291dChaREZJTEUsZGJwdHIpIDwgMCkgeworICAgICAgICAg ICAgZGVibG9nID0gMDsKKyAgICAgICAgICAgIHpjbG9zZShaREZJTEUpOworICAgICAgICB9Cisj aWZkZWYgQ0tTWVNMT0cKKyAgICAgICAgaWYgKGNreHN5c2xvZyA+PSBTWVNMR19EQiAmJiBja3hs b2dnaW5nKSB7CisgICAgICAgICAgICBja3N5c2xvZyhTWVNMR19EQiwxLCJkZWJ1ZyIsZGJwdHIs TlVMTCk7CisgICAgICAgIH0KKyNlbmRpZiAvKiBDS1NZU0xPRyAqLworICAgICAgICBicmVhazsK KyAgICAgIGNhc2UgRjExMDogICAgICAgICAgICAgICAgICAgICAgICAvKiA2LCAiczFbczJdIiAq LworICAgICAgICBzcHJpbnRmKHNwLCIlc1slc11cbiIsczEsczIpOworICAgICAgICBpZiAoenNv dXQoWkRGSUxFLGRicHRyKSA8IDApIHsKKyAgICAgICAgICAgIGRlYmxvZyA9IDA7CisgICAgICAg ICAgICB6Y2xvc2UoWkRGSUxFKTsKKyAgICAgICAgfQorI2lmZGVmIENLU1lTTE9HCisgICAgICAg IGlmIChja3hzeXNsb2cgPj0gU1lTTEdfREIgJiYgY2t4bG9nZ2luZykgeworICAgICAgICAgICAg Y2tzeXNsb2coU1lTTEdfREIsMSwiZGVidWciLGRicHRyLE5VTEwpOworICAgICAgICB9CisjZW5k aWYgLyogQ0tTWVNMT0cgKi8KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEYxMTE6ICAgICAg ICAgICAgICAgICAgICAgICAgLyogNywgInMxW3MyXT1uIiAqLworICAgICAgICBzcHJpbnRmKHNw LCIlc1slc109JXNcbiIsczEsczIsY2tmc3RvYShuKSk7CisgICAgICAgIGlmICh6c291dChaREZJ TEUsZGJwdHIpIDwgMCkgeworICAgICAgICAgICAgZGVibG9nID0gMDsKKyAgICAgICAgICAgIHpj bG9zZShaREZJTEUpOworICAgICAgICB9CisjaWZkZWYgQ0tTWVNMT0cKKyAgICAgICAgaWYgKGNr eHN5c2xvZyA+PSBTWVNMR19EQiAmJiBja3hsb2dnaW5nKSB7CisgICAgICAgICAgICBja3N5c2xv ZyhTWVNMR19EQiwxLCJkZWJ1ZyIsZGJwdHIsTlVMTCk7CisgICAgICAgIH0KKyNlbmRpZiAvKiBD S1NZU0xPRyAqLworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHNwcmlu dGYoc3AsIlxuP0ludmFsaWQgZm9ybWF0IGZvciBkZWJ1ZygpIC0gJWRcbiIsZik7CisgICAgICAg IGlmICh6c291dChaREZJTEUsZGJwdHIpIDwgMCkgeworICAgICAgICAgICAgZGVibG9nID0gMDsK KyAgICAgICAgICAgIHpjbG9zZShaREZJTEUpOworICAgICAgICB9CisjaWZkZWYgQ0tTWVNMT0cK KyAgICAgICAgaWYgKGNreHN5c2xvZyA+PSBTWVNMR19EQiAmJiBja3hsb2dnaW5nKSB7CisgICAg ICAgICAgICBja3N5c2xvZyhTWVNMR19EQiwxLCJkZWJ1ZyIsZGJwdHIsTlVMTCk7CisgICAgICAg IH0KKyNlbmRpZiAvKiBDS1NZU0xPRyAqLworICAgICAgICBicmVhazsKKyAgICB9CisgIHhkZWJ1 ZzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ29tbW9uIGV4aXQgcG9pbnQgKi8K KyNpZmRlZiBPUzIKKyAgICBpZiAoU3lzSW5pdGVkKQorCVJlbGVhc2VEZWJ1Z011dGV4KCk7Cisj ZWxzZSAvKiBPUzIgKi8KKyAgICBkZWJsb2cgPSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAv KiBSZXN0b3JlIHRoaXMgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyAgICByZXR1cm4oMCk7Cit9CisK K2ludAorI2lmZGVmIENLX0FOU0lDCitkb2hleGR1bXAoQ0hBUiAqbXNnLCBDSEFSICpzdCwgaW50 IGNudCkKKyNlbHNlCitkb2hleGR1bXAobXNnLHN0LGNudCkgQ0hBUiAqbXNnOyBDSEFSICpzdDsg aW50IGNudDsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogZG9oZXhkdW1wICovIHsKKyAgICBp bnQgaSA9IDAsIGogPSAwLCBrID0gMDsKKyAgICBjaGFyIHRtcFs4XTsKKyNpZmRlZiBPUzIKKyAg ICBleHRlcm4gaW50IFN5c0luaXRlZDsKKyNlbmRpZiAvKiBPUzIgKi8KKworICAgIGlmICghZGVi bG9nKSByZXR1cm4oMCk7CQkvKiBJZiBubyBkZWJ1ZyBsb2csIGRvbid0LiAqLworICAgIGlmICgh ZGJwdHIpIHsgICAgICAgICAgICAgICAgICAgICAgIC8qIEFsbG9jYXRlIG1lbW9yeSBidWZmZXIg Ki8KKyAgICAgICAgZGJwdHIgPSBtYWxsb2MoREJVRkwrMSk7ICAgICAgICAvKiBUaGlzIG9ubHkg aGFwcGVucyBvbmNlICovCisgICAgICAgIGlmICghZGJwdHIpIHsKKyAgICAgICAgICAgIGRlYmxv ZyA9IDA7CisgICAgICAgICAgICB6Y2xvc2UoWkRGSUxFKTsKKyAgICAgICAgICAgIHJldHVybigw KTsKKyAgICAgICAgfQorICAgIH0KKworI2lmZGVmIE9TMgorICAgIGlmIChTeXNJbml0ZWQpIHsK KwlpZiAoUmVxdWVzdERlYnVnTXV0ZXgoMzAwMDApKQorCSAgICBnb3RvIHhkZWJ1ZzsKKyAgICB9 CisjZWxzZSAvKiBPUzIgKi8KKyAgICBkZWJsb2cgPSAwOyAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBQcmV2ZW50IGluZmluaXRlIHJlY3Vyc2lvbiAqLworI2VuZGlmIC8qIE9TMiAqLworCisg ICAgaWYgKG1zZyAhPSBOVUxMKSB7CisJY2ttYWt4bXNnKGRicHRyLAorCQkgIERCVUZMLAorCQkg ICJIRVhEVU1QOiAiLAorCQkgIChjaGFyICopbXNnLAorCQkgICIgKCIsCisJCSAgY2tpdG9hKGNu dCksCisJCSAgIiBieXRlcylcbiIsCisJCSAgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEws TlVMTAorCQkgKTsKKyAgICAgICAgaWYgKHpzb3V0KFpERklMRSxkYnB0cikgPCAwKSB7CisgICAg ICAgICAgICBkZWJsb2cgPSAwOworICAgICAgICAgICAgemNsb3NlKFpERklMRSk7CisJICAgIGdv dG8geGRlYnVnOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKwlja21ha21zZyhkYnB0ciwKKwkJ IERCVUZMLAorCQkgIkhFWERVTVA6ICgiLAorCQkgY2tpdG9hKGNudCksCisJCSAiIGJ5dGVzKVxu IiwKKwkJIE5VTEwKKwkJICk7CisgICAgICAgIHpzb3V0KFpERklMRSxkYnB0cik7CisgICAgICAg IGlmICh6c291dChaREZJTEUsZGJwdHIpIDwgMCkgeworICAgICAgICAgICAgZGVibG9nID0gMDsK KyAgICAgICAgICAgIHpjbG9zZShaREZJTEUpOworCSAgICBnb3RvIHhkZWJ1ZzsKKyAgICAgICAg fQorICAgIH0KKyAgICBmb3IgKGkgPSAwOyBpIDwgY250OyBpKyspIHsKKyAgICAgICAgZGJwdHJb MF0gPSAnXDAnOworICAgICAgICBmb3IgKGogPSAwIDsgKGogPCAxNik7IGorKykgeworICAgICAg ICAgICAgaWYgKChpICsgaikgPCBjbnQpCisJICAgICAgc3ByaW50Zih0bXAsCisJCSAgICAgICIl cyUwMnggIiwKKwkJICAgICAgKGogPT0gOCA/ICJ8ICIgOiAiIiksCisJCSAgICAgIChDSEFSKSBz dFtpICsgal0KKwkJICAgICAgKTsKKyAgICAgICAgICAgIGVsc2UKKwkgICAgICBzcHJpbnRmKHRt cCwKKwkJICAgICAgIiVzICAgIiwKKwkJICAgICAgKGogPT0gOCA/ICJ8ICIgOiAiIikKKwkJICAg ICAgKTsKKyAgICAgICAgICAgIGNrc3RybmNhdChkYnB0cix0bXAsREJVRkwrMSk7CisgICAgICAg IH0KKyAgICAgICAgY2tzdHJuY2F0KGRicHRyLCIgIixEQlVGTCsxKTsKKyAgICAgICAgZm9yIChr ID0gMDsgKGsgPCAxNikgJiYgKChpICsgaykgPCBjbnQpOyBrKyspIHsKKyAgICAgICAgICAgIHNw cmludGYodG1wLAorICAgICAgICAgICAgICAgICAgICAiJXMlYyIsCisgICAgICAgICAgICAgICAg ICAgIChrID09IDggPyAiICIgOiAiIiksCisgICAgICAgICAgICAgICAgICAgIGlzcHJpbnQoc3Rb aSArIGtdKSA/IHN0W2kgKyBrXSA6ICcuJworICAgICAgICAgICAgICAgICAgICApOworICAgICAg ICAgICAgY2tzdHJuY2F0KGRicHRyLHRtcCxEQlVGTCsxKTsKKyAgICAgICAgfQorICAgICAgICBj a3N0cm5jYXQoZGJwdHIsIlxuIixEQlVGTCsxKTsKKyAgICAgICAgaSArPSBqIC0gMTsKKyAgICAg ICAgaWYgKHpzb3V0KFpERklMRSxkYnB0cikgPCAwKSB7CisgICAgICAgICAgICBkZWJsb2cgPSAw OworICAgICAgICAgICAgemNsb3NlKFpERklMRSk7CisJICAgIGdvdG8geGRlYnVnOworICAgICAg ICB9CisgICAgfSAvKiBlbmQgZm9yICovCisKKworICB4ZGVidWc6CisjaWZkZWYgT1MyCisgICAg aWYgKFN5c0luaXRlZCkKKyAgICAgIFJlbGVhc2VEZWJ1Z011dGV4KCk7CisjZWxzZSAvKiBPUzIg Ki8KKyAgICBkZWJsb2cgPSAxOworI2VuZGlmIC8qIE9TMiAqLworICAgIHJldHVybigwKTsKK30K KyNlbmRpZiAvKiBERUJVRyAqLworCisvKiAgU2Vzc2lvbiBMb2cuLi4gKi8KKworaW50IHRzc3Rh dGUgPSAwOworCitWT0lECisjaWZkZWYgT1MyCitsb2djaGFyKHVuc2lnbmVkIHNob3J0IGMpCisj ZWxzZSAvKiBPUzIgKi8KKyNpZmRlZiBDS19BTlNJQworbG9nY2hhcihjaGFyIGMpCisjZWxzZQor bG9nY2hhcihjKSBjaGFyIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKyNlbmRpZiAvKiBPUzIg Ki8KKy8qIGxvZ2NoYXIgKi8geyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBMb2cgY2hhcmFj dGVyIGMgdG8gc2Vzc2lvbiBsb2cgKi8KKyAgICBleHRlcm4gaW50IHNsb2dudWw7CisgICAgaW50 IG9rdG9sb2cgPSAwOworI2lmbmRlZiBOT0xPQ0FMCisgICAgaWYgKCFzZXNsb2cpCisgICAgICBy ZXR1cm47CisKKyAgICBpZiAoKHNlc3NmdCAhPSBYWUZUX1QpIHx8ICgKKyNpZmRlZiBVTklYCisJ IGMgIT0gJ1xyJyAmJgorI2Vsc2UKKyNpZmRlZiBkYXRhZ2VuZXJhbAorCSBjICE9ICdccicgJiYK KyNlbHNlCisjaWZkZWYgU1RSQVRVUworCSBjICE9ICdccicgJiYKKyNlbHNlCisjaWZkZWYgQU1J R0EKKwkgYyAhPSAnXHInICYmCisjZWxzZQorI2lmZGVmIEdFTURPUworCSBjICE9ICdccicgJiYK KyNlbmRpZiAvKiBHRU1ET1MgKi8KKyNlbmRpZiAvKiBBTUlHQSAqLworI2VuZGlmIC8qIFNUUkFU VVMgKi8KKyNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLworI2VuZGlmIC8qIFVOSVggKi8KKyNpZmRl ZiBPU0sKKwkgYyAhPSAnXG4nICYmCisjZWxzZQorI2lmZGVmIE1BQworCSBjICE9ICdcbicgJiYK KyNlbmRpZiAvKiBNQUMgKi8KKyNlbmRpZiAvKiBPU0sgKi8KKwkgYyAhPSBYT04gJiYKKwkgYyAh PSBYT0ZGKSkKKyAgICAgIG9rdG9sb2cgPSAxOworICAgIGlmIChjID09ICdcMCcgJiYgIXNlc3Nm dCkJCS8qIE5VTCBpbiB0ZXh0IG1vZGUgKi8KKyAgICAgIGlmIChzbG9nbnVsKSBva3RvbG9nID0g MTsJCS8qIG9ubHkgaWYgcGFkZGluZyAoMjAwOS8xMC8yMikgKi8KKyAgICBpZiAoIW9rdG9sb2cp CisgICAgICByZXR1cm47CisgICAgaWYgKHNsb2d0cykgewkJCS8qIExvZyBpcyB0aW1lc3RhbXBl ZCAqLworCWlmICh0c3N0YXRlID09IDApIHsJCS8qIFN0YXRlID0gYmV0d2Vlbi1saW5lcyAqLwor CSAgICBjaGFyICogcDsJCQkvKiB6c3RpbWUoKSBwb2ludGVyICovCisJICAgIGNoYXIgdHNbNDhd OwkJLyogdGltZXN0YW1wIGJ1ZmZlciAqLworCSAgICB6dGltZSgmcCk7CQkJLyogR2V0IGFzY3Rp bWUoKSBzdHJpbmcgKi8KKwkgICAgY2tzdHJuY3B5KHRzLHAsMzIpOwkJLyogTWFrZSBzYWZlIGNv cHkgKi8KKwkgICAgaWYgKHp0bXNlYyA+IC0xTCkgewkJLyogQWRkIG1zZWNzIGlmIHdlIGhhdmUg dGhlbSAqLworCQlzcHJpbnRmKCZ0c1sxOV0sIi4lMDNsZDogIix6dG1zZWMpOyAvKiBTQUZFICov CisJICAgIH0gZWxzZSB7CisJCXRzWzE5XSA9ICc6JzsKKwkJdHNbMjBdID0gU1A7CisJCXRzWzIx XSA9IE5VTDsKKwkgICAgfQorCSAgICBpZiAoenNvdXQoWlNGSUxFLCZ0c1sxMV0pIDwgMCkKKwkg ICAgICBnb3RvIHhsb2djaGFyOworCX0KKyAgICB9CisgICAgaWYgKGMgPT0gJ1xuJykJCQkvKiBB dCBlbmQgb2YgbGluZT8gKi8KKyAgICAgIHRzc3RhdGUgPSAwOwkJCS8qIHllcyAqLworICAgIGVs c2UKKyAgICAgIHRzc3RhdGUgPSAxOwkJCS8qIG5vICovCisgICAgaWYgKHpjaG91dChaU0ZJTEUs KENIQVIpKGMgJiAweEZGKSkgPCAwKSAvKiBMb2cgdGhlIGNoYXJhY3RlciAqLworICAgICAgZ290 byB4bG9nY2hhcjsKKyAgICBpZiAodHNzdGF0ZSA9PSAwICYmIHNsb2dudWwgIT0gMCkgewkvKiBO dWxsLXRlcm1pbmF0aW5nIGxpbmVzPyAqLworCWlmICh6Y2hvdXQoWlNGSUxFLChDSEFSKTApIDwg MCkJLyogQWRkIGEgTlVMICovCisJICBnb3RvIHhsb2djaGFyOworICAgIH0KKyAgICByZXR1cm47 CisKKyAgeGxvZ2NoYXI6CisgICAgY29ub2xsKCIiKTsKKyAgICBjb25vbGwoIkVSUk9SIFdSSVRJ TkcgU0VTU0lPTiBMT0csIExPRyBDTE9TRUQhIik7CisgICAgc2V0c2VzbG9nKDApOworICAgIHpj bG9zZShaU0ZJTEUpOworI2VuZGlmIC8qIE5PTE9DQUwgKi8KK30KKworVk9JRAorbG9nc3RyKHMs IGxlbikgY2hhciAqIHM7IGludCBsZW47IHsgICAgIC8qIExvZyBzdHJpbmcgdG8gc2Vzc2lvbiBs b2cgKi8KKyNpZm5kZWYgTk9MT0NBTAorICAgIGludCBuID0gMDsKKyAgICBpZiAoIXMpCisgICAg ICByZXR1cm47CisgICAgd2hpbGUgKHNlc2xvZyAmJiAobiA8IGxlbikpCisgICAgICBsb2djaGFy KHNbbisrXSk7CisjZW5kaWYgLyogTk9MT0NBTCAqLworfQorCisjaWZkZWYgQ0tfQ1VSU0VTCitp bnQKK2NrX3JlcGFpbnQoKSB7CisgICAgcmVwYWludCA9IDE7CisgICAgcmV0dXJuKDApOworfQor CisjaWZkZWYgU1RSQVRVUworLyogVk9TIGhhcyBjdXJzZXMgYnV0IG5vIHRnZXRlbnQoKSAqLwor aW50Cit0Z2V0ZW50KHMxLCBzMikgY2hhciAqIHMxLCAqIHMyOyB7CisgICAgcmV0dXJuKDEpOwor fQorI2VuZGlmIC8qIFNUUkFUVVMgKi8KKworI2lmZGVmIFZNUworI2lmZGVmIF9fREVDQworX1BS T1RPVFlQKGludCB0Z2V0ZW50LChjaGFyICosIGNoYXIgKikpOworI2VuZGlmIC8qIF9fREVDQyAq LworI2VuZGlmIC8qIFZNUyAqLworCisvKgorICBUaGVyZSBhcmUgdGhyZWUgZGlmZmVyZW50IHdh eXMgdG8gZG8gZnVsbHNjcmVlbiBvbiBWTVMuCisgIDEuIFVzZSB0aGUgcmVhbCBjdXJzZXMgbGli cmFyeSwgVkFYQ0NVUlNFLgorICAyLiBVc2UgZG8taXQteW91cnNlbGYgY29kZS4KKyAgMy4gVXNl IHRoZSBTY3JlZW4gTWFuYWdlciwgU01HJC4KKworICBNZXRob2QgMSBkb2Vzbid0IHdvcmsgcXVp dGUgcmlnaHQ7IHlvdSBjYW4ndCBjYWxsIGVuZHdpbigpLCBzbyBvbmNlIHlvdSd2ZQorICBzdGFy dGVkIGN1cnNlcyBtb2RlLCB5b3UgY2FuIG5ldmVyIGxlYXZlLgorCisgIE1ldGhvZCAyIGRvZXNu J3Qgb3B0aW1pemUgdGhlIHNjcmVlbiwgYW5kIHNvIG11Y2ggbW9yZSB0aW1lIGlzIHNwZW50IGlu CisgIHNjcmVlbiB3cml0ZXMuICBUaGlzIGFjdHVhbGx5IGNhdXNlcyBmaWxlIHRyYW5zZmVycyB0 byBmYWlsIGJlY2F1c2UgdGhlCisgIHR0eSBkZXZpY2UgaW5wdXQgYnVmZmVyIGNhbiBiZSBvdmVy cnVuIHdoaWxlIHRoZSBzY3JlZW4gaXMgYmVpbmcgdXBkYXRlZCwKKyAgZXNwZWNpYWxseSBvbiBh IHNsb3cgTWljcm9WQVggdGhhdCBoYXMgc21hbGwgdHlwZWFoZWFkIGJ1ZmZlcnMuCisKKyAgSW4g dGhlIGZvbGxvd2luZyAjaWZkZWYgYmxvY2ssICNkZWZpbmUgb25lIG9mIHRoZW0gYW5kICN1bmRl ZiB0aGUgb3RoZXIgMi4KKworICBTbyBub3cgbGV0J3MgdHJ5IG1ldGhvZCAzLi4uCisqLworI2lm ZGVmIFZNUworI2RlZmluZSBDS19TTUcgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNjcmVl biBNYW5hZ2VyICovCisjdW5kZWYgTVlDVVJTRVMgICAgICAgICAgICAgICAgICAgICAgICAgLyog RG8taXQteW91cnNlbGYgKi8KKyN1bmRlZiBWTVNDVVJTRSAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBWQVhDQ1VSU0UgbGlicmFyeSAqLworI2VuZGlmIC8qIFZNUyAqLworLyoKKyAgQnV0IGp1 c3QgYmVmb3JlIE5ldyBZZWFycywgMjAwMCwgdGhlIFNNRyBsaWJyYXJ5IHNlZW1lZCB0byBicmVh ayBvbgorICBib3RoIFZNUyBzeXN0ZW1zIHdlIGhhdmUgaGVyZSAoYW4gQWxwaGEgd2l0aCBWTVMg Ny4xIGFuZCBhIFZBWCB3aXRoIDUuNSkuCisgIFNvIGJhY2sgdG8gTVlDVVJTRVMsIHdoaWNoIHdv cmtzIGZpbmUuCisqLworI2lmZGVmIFZNUworI3VuZGVmIENLX1NNRworI2RlZmluZSBNWUNVUlNF UworI2VuZGlmIC8qIFZNUyAqLworCisjaWZkZWYgTVlDVVJTRVMKKyNkZWZpbmUgc3Rkc2NyIDAK KyNpZmRlZiBDS19XUkVGUkVTSAorI3VuZGVmIENLX1dSRUZSRVNICisjZW5kaWYgLyogQ0tfV1JF RlJFU0ggKi8KKyNlbmRpZiAvKiBNWUNVUlNFUyAqLworCisvKiAgUyBDIFIgRSBFIE4gQyAgLS0g IFNjcmVlbiBkaXNwbGF5IGZ1bmN0aW9uLCB1c2VzIGN1cnNlcyAgKi8KKworLyogSWRlYSBmb3Ig Y3Vyc2VzIGRpc3BsYXkgY29udHJpYnV0ZWQgYnkgQ2hyaXMgUHJhdHQgb2YgQVBWIEJha2VyLCBV SyAqLworCisvKiBBdm9pZCBjb25maWN0cyB3aXRoIGN1cnNlcy5oICovCisKKyNpZmRlZiBRTlgK Ky8qIFNhbWUgYXMgY2tjYXNjLmgsIGJ1dCBpbiBhIGRpZmZlcmVudCByYWRpeC4uLiAqLworI2lm ZGVmIEVTQworI3VuZGVmIEVTQworI2VuZGlmIC8qIEVTQyAqLworI2VuZGlmIC8qIFFOWCAqLwor CisjaWZuZGVmIE1ZQ1VSU0VTCisjdW5kZWYgVk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogVGhpcyB3YXMgZGVmaW5lZCBpbiBja2NkZWIuaCAqLworI2VuZGlmIC8qIE1ZQ1VSU0VT ICovCisKKyN1bmRlZiBCUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUaGVzZSB3 ZXJlIGRlZmluZWQgaW4gY2tjYXNjLmggKi8KKyN1bmRlZiBDUgorI3VuZGVmIE5MCisjdW5kZWYg U08KKyNpZmRlZiBVUworI3VuZGVmIFVTCisjZW5kaWYJLyogVVMgKi8KKyN1bmRlZiBTUCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVc2VkIGluIG5jdXJzZXMgKi8KKyNkZWZpbmUg Q0hSX1NQIDMyICAgICAgICAgICAgICAgICAgICAgICAvKiBVc2UgdGhpcyBpbnN0ZWFkICovCisK KyNpZmRlZiBWTVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBWTVMgZnVsbHNjcmVl biBkaXNwbGF5ICovCisjaWZkZWYgTVlDVVJTRVMgICAgICAgICAgICAgICAgICAgICAgICAgLyog RG8taXQteW91cnNlbGYgbWV0aG9kICovCitleHRlcm4gaW50IGlzdnQ1MjsgICAgICAgICAgICAg ICAgICAgICAgLyogRnJvbSBDS1ZUSU8uQyAqLworI2RlZmluZSBwcmludHcgcHJpbnRmCisjZWxz ZQorI2lmZGVmIFZNU0NVUlNFICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFZNUyBjdXJzZXMg bGlicmFyeSBWQVhDQ1VSU0UgKi8KKyNpbmNsdWRlIDxjdXJzZXMuaD4KKy8qIE5vdGU6IFNjcmVl biBtYW5hZ2VyIGRvZXNuJ3QgbmVlZCBhIGhlYWRlciBmaWxlICovCisjZW5kaWYgLyogVk1TQ1VS U0UgKi8KKyNlbmRpZiAvKiBNWUNVUlNFUyAqLworI2Vsc2UgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIE5vdCBWTVMgKi8KKyNpZmRlZiBNWUNVUlNFUyAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBEby1pdC15b3Vyc2VsZiBtZXRob2QgKi8KKyNkZWZpbmUgaXN2dDUyIDAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBVc2VkIGJ5IE9TLzIsIFZULTEwMC9BTlNJIGFsd2F5 cyAqLworI2lmZGVmIENLWFBSSU5URgorI2RlZmluZSBwcmludHcgY2t4cHJpbnRmCisjZWxzZSAv KiBDS1hQUklOVEYgKi8KKyNpZmRlZiBLVUkKKyNkZWZpbmUgcHJpbnR3IFZzY3JucHJpbnR3Cisj ZWxzZSAvKiBLVUkgKi8KKyNkZWZpbmUgcHJpbnR3IHByaW50ZgorI2VuZGlmIC8qIEtVSSAqLwor I2VuZGlmIC8qIENLWFBSSU5URiAqLworI2Vsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIFVzZSByZWFsIGN1cnNlcyAqLworI2lmZGVmIENLX05DVVJTRVMgICAgICAgICAg ICAgICAgICAgICAgIC8qIG9yIG5jdXJzZXMuLi4gKi8KKyNpZmRlZiBDS1hQUklOVEYgICAgICAg ICAgICAgICAgICAgICAgICAvKiBPdXIgcHJpbnRmIG1hY3JvIGNvbmZsaWN0cyB3aXRoICovCisj dW5kZWYgcHJpbnRmICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdXNlIG9mICJwcmludGYi IGluIG5jdXJzZXMuaCAqLworI2VuZGlmIC8qIENLWFBSSU5URiAqLworI2luY2x1ZGUgPG5jdXJz ZXMuaD4KKyNpZmRlZiBDS1hQUklOVEYKKyNkZWZpbmUgcHJpbnRmIGNreHByaW50ZgorI2VuZGlm IC8qIENLWFBSSU5URiAqLworI2Vsc2UgIC8qIE5vdCBuY3Vyc2VzICovCisjaWZkZWYgQ0tYUFJJ TlRGICAgICAgICAgICAgICAgICAgICAgICAgLyogT3VyIHByaW50ZiBtYWNybyBjb25mbGljdHMg d2l0aCAqLworI3VuZGVmIHByaW50ZiAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHVzZSBv ZiAicHJpbnRmIiBpbiBjdXJzZXMuaCAqLworI2VuZGlmIC8qIENLWFBSSU5URiAqLworI2lmZGVm IE1fWEVOSVgJCQkJLyogU0NPIFhFTklYLi4uICovCisjaWZkZWYgTV9URVJNQ0FQCisjdW5kZWYg TV9URVJNQ0FQCisjZW5kaWYgLyogTV9URVJNQ0FQICovCisjaWZuZGVmIE1fVEVSTUlORk8KKyNk ZWZpbmUgTV9URVJNSU5GTworI2VuZGlmIC8qIE1fVEVSTUlORk8gKi8KKyNlbmRpZiAvKiBNX1hF TklYICovCisjaWZkZWYgUlRBSVgKKyN1bmRlZiBOTFMJCQkJLyogQXZvaWQgJ3JlZGVjbGFyYXRp b24gb2YgZnJlZScuICovCisjZW5kaWYgLyogUlRBSVggKi8KKyNpbmNsdWRlIDxjdXJzZXMuaD4K KyNpZmRlZiBDS1hQUklOVEYKKyNkZWZpbmUgcHJpbnRmIGNreHByaW50ZgorI2VuZGlmIC8qIENL WFBSSU5URiAqLworI2VuZGlmIC8qIENLX05DVVJTRVMgKi8KKyNlbmRpZiAvKiBNWUNVUlNFUyAq LworI2VuZGlmIC8qIFZNUyAqLworCisjaWZkZWYgQlVHOTk5CitfUFJPVE9UWVAoaW50IHRnZXRl bnQsKGNoYXIgKiwgY2hhciAqKSk7CitfUFJPVE9UWVAoY2hhciAqdGdldHN0ciwoY2hhciAqLCBj aGFyICoqKSk7CitfUFJPVE9UWVAoaW50IHRwdXRzLChjaGFyICosIGludCwgaW50ICgqKSgpKSk7 CitfUFJPVE9UWVAoY2hhciAqdGdvdG8sKGNvbnN0IGNoYXIgKiwgaW50LCBpbnQpKTsKKyNlbmRp ZgkvKiBCVUc5OTkgKi8KKyNpZmRlZiBsaW51eAorI2luY2x1ZGUgPHRlcm0uaD4KKyNlbmRpZgor CisjZW5kaWYgLyogQ0tfQ1VSU0VTICovCisKKy8qICBGIFggRCBJIE4gSSBUICAtLSAgRmlsZSBY ZmVyIERpc3BsYXkgSW5pdGlhbGl6YXRpb24gICovCisKKyNpZmRlZiBDS19DVVJTRVMKKyNpZm5k ZWYgTVlDVVJTRVMKKyNpZm5kZWYgQ0tfU01HCitzdGF0aWMKKyNpZmRlZiBDS19BTlNJQworLyog Q2FuJ3QgdXNlIFZPSUQgYmVjYXVzZSBvZiBjdXJzZXMuaCAqLwordm9pZAorY2tfdGVybXNldChp bnQpOworI2Vsc2UKK2NrX3Rlcm1zZXQoKTsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworI2VuZGlm IC8qIENLX1NNRyAqLworI2VuZGlmIC8qIE1ZQ1VSU0VTICovCisjZW5kaWYgLyogQ0tfQ1VSU0VT ICovCisKKyNpZmRlZiBOT1RFUk1DQVAKK3N0YXRpYyBpbnQgbm90ZXJtY2FwID0gMTsKKyNlbHNl CitzdGF0aWMgaW50IG5vdGVybWNhcCA9IDA7CisjZW5kaWYgLyogTk9URVJNQ0FQICovCisKKyNp Zm5kZWYgTk9ESVNQTEFZCitDS1ZPSUQKK2Z4ZGluaXQoeGRpc3BsYSkgaW50IHhkaXNwbGE7IHsK KyNpZm5kZWYgQ09IRVJFTlQKKyNpZm5kZWYgT1MyCisjaWZuZGVmIFNUUkFUVVMKKyAgICBjaGFy ICpzOworICAgIGludCB4LCBkdW1teTsKKworICAgIGRlYnVnKEYxMDEsImZ4ZGluaXQgeGRpc3Bs YSIsIiIseGRpc3BsYSk7CisgICAgZGVidWcoRjEwMSwiZnhkaW5pdCBmeGRfaW5pdGVkIiwiIixm eGRfaW5pdGVkKTsKKworI2lmZGVmIElLU0QKKyNpZm5kZWYgTk9YRkVSCisgICAgLyogTm8gY3Vy c2VzIGZvciBJS1NEICovCisgICAgaWYgKGluc2VydmVyKSB7CisgICAgICAgIGZkaXNwbGEgPSBY WUZEX047CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKGZ4ZF9pbml0ZWQpICAgICAg ICAgICAgICAgICAgICAgLyogT25seSBkbyB0aGlzIG9uY2UgKi8KKyAgICAgIHJldHVybjsKKyNl bmRpZiAvKiBOT1hGRVIgKi8KKyNlbmRpZiAvKiBJS1NEICovCisKKyAgICBpZiAoeGRpc3BsYSA9 PSBYWUZEX1IgfHwgeGRpc3BsYSA9PSBYWUZEX1MgfHwgeGRpc3BsYSA9PSBYWUZEX0IpIHsKKwlp ZiAoeGZybXNnKSB7CisJICAgIHByaW50ZigiJXNcbiIseGZybXNnKTsKKwkgICAgbWFrZXN0cigm eGZybXNnLE5VTEwpOworCX0KKyAgICB9CisKKyNpZmRlZiBDS19DVVJTRVMKKyNpZmRlZiBWTVMK KyAgICAvKiBGb3JjZSBCUklFRiBpbiBCYXRjaCBsb2dzICovCisgICAgaWYgKGJhdGNoICYmICh4 ZGlzcGxhID09IFhZRkRfQyB8fCB4ZGlzcGxhID09IFhZRkRfUykpCisgICAgICB4ZGlzcGxhID0g WFlGRF9COworI2Vsc2UKKyAgICBpZiAoeGRpc3BsYSA9PSBYWUZEX0MgfHwgeGRpc3BsYSA9PSA5 OTk5KSB7CisKKyNpZmRlZiBEWU5BTUlDCisgICAgICAgIGlmICghdHJtYnVmKSB7CisvKgorICBB bGxvY2F0ZSB0Z2V0ZW50KCkgYnVmZmVyLiAgTWFrZSBpdCBiaWcgLS0gc29tZSB0ZXJtY2FwcyBj YW4gYmUgaHVnZTsKKyAgdGdldGVudCgpIG1lcnJpbHkgd3JpdGVzIHBhc3QgdGhlIGVuZCBvZiB0 aGUgYnVmZmVyLCBjYXVzaW5nIGNvcmUgZHVtcHMKKyAgb3Igd29yc2UuCisqLworICAgICAgICAg ICAgdHJtYnVmID0gKGNoYXIgKiltYWxsb2MoVFJNQlVGTCk7CisgICAgICAgICAgICBpZiAoIXRy bWJ1ZikgeworICAgICAgICAgICAgICAgIG5vdGVybWNhcCA9IDE7CisgICAgICAgICAgICAgICAg ZGVidWcoRjEwMSwiZnhkaW5pdCBtYWxsb2MgdHJtYnVmIiwiRkFJTEVEIixUUk1CVUZMKTsKKyAg ICAgICAgICAgICAgICBmZGlzcGxhID0gWFlGRF9TOworICAgICAgICAgICAgICAgIHJldHVybjsK KyAgICAgICAgICAgIH0KKyNpZmRlZiBDT01NRU5UCisgICAgICAgICAgICBkZWJ1ZyhGMTExLCJm eGRpbml0IG1hbGxvYyB0cm1idWYiLCJPSyIsVFJNQlVGTCk7CisgICAgICAgICAgICBkZWJ1ZyhG MDAxLCJmeGRpbml0IHRybWJ1ZiIsIiIsdHJtYnVmKTsKKyAgICAgICAgICAgIG1lbXNldCh0cm1i dWYsJ1wwJywoc2l6ZV90KVRSTUJVRkwpOworICAgICAgICAgICAgZGVidWcoRjEwMCwiZnhkaW5p dCBtZW1zZXQgT0siLCIiLDApOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAgfQorI2Vu ZGlmIC8qIERZTkFNSUMgKi8KKworICAgICAgICBkZWJ1ZyhGMTAwLCJmeGRpbml0IGJlZm9yZSBn ZXRlbnYoVEVSTSkiLCIiLDApOworICAgICAgICBzID0gZ2V0ZW52KCJURVJNIik7CisgICAgICAg IGRlYnVnKEYxMTAsImZ4ZGluaXQgYWZ0ZXIgZ2V0ZW52KFRFUk0pIixzLDApOworICAgICAgICBp ZiAoIXMpIHMgPSAiIjsKKyAgICAgICAgaWYgKCpzKSB7CisgICAgICAgICAgICBkZWJ1ZyhGMTEw LCJmeGRpbml0IGJlZm9yZSB0Z2V0ZW50KCkiLHMsMCk7CisgICAgICAgICAgICB4ID0gdGdldGVu dCh0cm1idWYscyk7CisgICAgICAgICAgICBkZWJ1ZyhGMTExLCJmeGRpbml0IHRnZXRlbnQiLHMs eCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB4ID0gMDsKKyAgICAgICAgICAgIG5v dGVybWNhcCA9IDE7CisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJmeGRpbml0IFRFUk0gbnVsbCAt IG5vIHRnZXRlbnQiLHMsMCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHggPCAxICYmICFxdWll dCAmJiAhYmFja2dyZAorI2lmZGVmIFZNUworICAgICAgICAgICAgJiYgIWJhdGNoCisjZW5kaWYg LyogVk1TICovCisgICAgICAgICAgICApIHsKKyAgICAgICAgICAgIHByaW50ZigiV2FybmluZzog dGVybWluYWwgdHlwZSB1bmtub3duOiBcIiVzXCJcbiIscyk7CisjaWZkZWYgQ09NTUVOVAorCSAg ICAvKiBDb25mdXNpbmcgLSBub2JvZHkga25vd3Mgd2hhdCB0aGlzIG1lYW5zICovCisgICAgICAg ICAgICBwcmludGYoIlNDUkVFTiBjb21tYW5kIHdpbGwgdXNlIEFOU0kgc2VxdWVuY2VzLlxuIik7 CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAgICAgICAgaWYgKGxvY2FsKQorICAgICAgICAg ICAgICBwcmludGYoIkZ1bGxzY3JlZW4gZmlsZSB0cmFuc2ZlciBkaXNwbGF5IGRpc2FibGVkLlxu Iik7CisgICAgICAgICAgICBmZGlzcGxhID0gWFlGRF9TOworICAgICAgICB9CisjaWZuZGVmIE1Z Q1VSU0VTCisjaWZuZGVmIENLX1NNRworICAgICAgICBja190ZXJtc2V0KHgpOworI2VuZGlmIC8q IENLX1NNRyAqLworI2VuZGlmIC8qIE1ZQ1VSU0VTICovCisgICAgICAgIGZ4ZF9pbml0ZWQgPSAx OworICAgIH0KKyNlbmRpZiAvKiBDS19DVVJTRVMgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKyNlbmRp ZiAvKiBTVFJBVFVTICovCisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogQ09IRVJFTlQgKi8K K30KKyNlbmRpZiAvKiBOT0RJU1BMQVkgKi8KKworI2lmZGVmIENLX0NVUlNFUworI2lmZGVmIENL X1NNRworLyoKKyAgTG9uZyBzZWN0aW9uIGZvciBTY3JlZW4gTWFuYWdlciBzdGFydHMgaGVyZS4u LgorICBCeSBXaWxsaWFtIEJhZGVyLgorKi8KKyNpbmNsdWRlICJja3Z2bXMuaCIKKyNpZmRlZiBP TERfVk1TCisjaW5jbHVkZSA8c21nZGVmLmg+ICAgICAgICAgICAgICAgICAgICAgLyogdXNlIHRo aXMgb24gVkFYIEMgMi40ICovCisvKiAjaW5jbHVkZSA8c21nbXNnLmg+ICovCisjZWxzZQorI2lu Y2x1ZGUgPHNtZyRyb3V0aW5lcy5oPiAgICAgICAgICAgICAgIC8qIE1hcnRpbiBaaW5zZXIgKi8K KyNlbmRpZiAvKiBPTERfVk1TICovCisKK2V4dGVybiB1bnNpZ25lZCBpbnQgdm1zX3N0YXR1czsg ICAgIC8qIFVzZWQgZm9yIHN5c3RlbSBzZXJ2aWNlIHJldHVybiBzdGF0dXMgKi8KKworc3RhdGlj IGxvbmcgc21nX3Bhc3RlYm9hcmRfaWQgPSAtMTsgICAgIC8qIHBhc3RlYm9hcmQgaWRlbnRpZmll ciAqLworc3RhdGljIGxvbmcgc21nX2Rpc3BsYXlfaWQgPSAtMTsgICAgICAgIC8qIGRpc3BsYXkg aWRlbnRpZmllciAqLworc3RhdGljIGludCBzbWdfb3BlbiA9IDA7ICAgICAgICAgICAgICAgIC8q IGZsYWcgaWYgc21nIGN1cnJlbnQgb3BlbiAqLworc3RhdGljIGludCBzbWdfaW5pdGVkID0gMDsg ICAgICAgICAgICAgIC8qIGZsYWcgaWYgc21nIGluaXRpYWxpemVkICovCisKKyNpZmRlZiBDT01N RU5UCisjZGVmaW5lIGNscnRvZW9sKCkgICAgICBTTUckRVJBU0VfTElORSgmc21nX2Rpc3BsYXlf aWQsIDAsIDApCisKKyNkZWZpbmUgY2xlYXIoKSAgICAgICAgIFNNRyRFUkFTRV9ESVNQTEFZKCZz bWdfZGlzcGxheV9pZCwgMCwgMCwgMCwgMCkKKworI2RlZmluZSB0b3VjaHdpbihzY3IpICAgU01H JFJFUEFJTlRfU0NSRUVOKCZzbWdfcGFzdGVib2FyZF9pZCkKKworI2Vsc2UgIC8qIE5vdCBDT01N RU5UICovCisKKyNkZWZpbmUgY2xydG9lb2woKSAgICAgIHNtZyRlcmFzZV9saW5lKCZzbWdfZGlz cGxheV9pZCwgMCwgMCkKKworI2RlZmluZSBjbGVhcigpICAgICAgICAgc21nJGVyYXNlX2Rpc3Bs YXkoJnNtZ19kaXNwbGF5X2lkLCAwLCAwLCAwLCAwKQorCisjZGVmaW5lIHRvdWNod2luKHNjcikg ICBzbWckcmVwYWludF9zY3JlZW4oJnNtZ19wYXN0ZWJvYXJkX2lkKQorI2VuZGlmIC8qIENPTU1F TlQgKi8KKworI2RlZmluZSBjbGVhcm9rKGN1cnNjcixvaykgICAgICAgICAgICAgIC8qIExldCB3 cmVmcmVzaCgpIGRvIHRoZSB3b3JrICovCisKKyNkZWZpbmUgd3JlZnJlc2goY3Vyc3JjKSB0b3Vj aHdpbihzY3IpCisKK3N0YXRpYyB2b2lkCittb3ZlKHJvdywgY29sKSBpbnQgcm93LCBjb2w7IHsK KyAgICAvKiBDaGFuZ2UgZnJvbSAwLWJhc2VkIGZvciBjdXJzZXMgdG8gMS1iYXNlZCBmb3IgU01H ICovCisgICAgaWYgKCFzbWdfb3BlbikKKyAgICAgIHJldHVybjsKKyAgICArK3JvdzsgKytjb2w7 CisgICAgZGVidWcoRjExMSwiVk1TIHNtZyBtb3ZlIixja2l0b2Eocm93KSxjb2wpOworI2lmZGVm IENPTU1FTlQgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1hcnRpbiBaaW5zZXIgKi8KKyAg ICBDSEVDS19FUlIoIm1vdmU6IHNtZyRzZXRfY3Vyc29yX2FicyIsCisgICAgICAgICAgICAgIFNN RyRTRVRfQ1VSU09SX0FCUygmc21nX2Rpc3BsYXlfaWQsICZyb3csICZjb2wpKTsKKyNlbHNlCisg ICAgQ0hFQ0tfRVJSKCJtb3ZlOiBzbWckc2V0X2N1cnNvcl9hYnMiLAorICAgICAgICAgICAgICBz bWckc2V0X2N1cnNvcl9hYnMoJnNtZ19kaXNwbGF5X2lkLCAmcm93LCAmY29sKSk7CisjZW5kaWYg LyogQ09NTUVOVCAqLworICAgIGRlYnVnKEYxMDEsIlZNUyBzbWcgbW92ZSB2bXNfc3RhdHVzIiwi Iix2bXNfc3RhdHVzKTsKK30KKworI2lmZGVmIFZNU19WNDAKKyNkZWZpbmUgT0xEX1ZNUworI2Vu ZGlmIC8qIFZNU19WNDAgKi8KKyNpZmRlZiBWTVNfVjQyCisjZGVmaW5lIE9MRF9WTVMKKyNlbmRp ZiAvKiBWTVNfVjQyICovCisjaWZkZWYgVk1TX1Y0NAorI2RlZmluZSBPTERfVk1TCisjZW5kaWYg LyogVk1TX1Y0NCAqLworCitzdGF0aWMgaW50Citpbml0c2NyKCkgeworICAgIGludCByb3dzID0g MjQsIGNvbHMgPSA4MDsKKyAgICBpbnQgcm93ID0gMSwgY29sID0gMTsKKworICAgIGRlYnVnKEYx MDEsIlZNUyBpbml0c2NyIHNtZ19wYXN0ZWJvYXJkX2lkIEEiLCIiLHNtZ19wYXN0ZWJvYXJkX2lk KTsKKworICAgIGlmIChzbWdfcGFzdGVib2FyZF9pZCA9PSAtMSkgeyAvKiBPcGVuIHRoZSBzY3Jl ZW4gKi8KKyNpZmRlZiBPTERfVk1TICAgICAgICAgICAgICAgICAgICAgLyogTm90ZTogUm91dGlu ZSBjYWxscyBsb3dlcmNhc2VkIDkvOTYgKi8KKyAgICAgICAgQ0hFQ0tfRVJSKCJpbml0c2NyOiBz bWckY3JlYXRlX3Bhc3RlYm9hcmQiLAorICAgICAgICAgICAgICAgICAgc21nJGNyZWF0ZV9wYXN0 ZWJvYXJkKCZzbWdfcGFzdGVib2FyZF9pZCwgMCwgMCwgMCwgMCkpOworI2Vsc2UKKyAgICAgICAg LyogRm9yIFZNUyBWNSwgbm90IHRlc3RlZCAqLworICAgICAgICBDSEVDS19FUlIoImluaXRzY3I6 IHNtZyRjcmVhdGVfcGFzdGVib2FyZCIsCisgICAgICAgICAgICAgICAgICBzbWckY3JlYXRlX3Bh c3RlYm9hcmQoJnNtZ19wYXN0ZWJvYXJkX2lkLCAwLCAwLCAwLCAwLCAwKSk7CisjZW5kaWYgLyog T0xEX1ZNUyAqLworICAgIH0KKyAgICBkZWJ1ZyhGMTAxLCJWTVMgaW5pdHNjciBzbWdfcGFzdGVi b2FyZF9pZCBCIiwiIixzbWdfcGFzdGVib2FyZF9pZCk7CisgICAgaWYgKHNtZ19wYXN0ZWJvYXJk X2lkID09IC0xKSB7CisJcHJpbnRmKCI/RXJyb3IgaW5pdGlhbGl6aW5nIGZ1bGxzY3JlZW4gZGlz cGxheVxuIik7CisJZmRpc3BsYSA9IFhZRkRfUzsKKwlkcHlpbml0KCk7CisJcmV0dXJuKDApOwor ICAgIH0KKyAgICBkZWJ1ZyhGMTAxLCJWTVMgaW5pdHNjciBzbWdfZGlzcGxheV9pZCIsIiIsc21n X2Rpc3BsYXlfaWQpOworICAgIGlmIChzbWdfZGlzcGxheV9pZCA9PSAtMSkgeyAgICAgICAgIC8q IENyZWF0ZSBhIGRpc3BsYXkgd2luZG93ICovCisKKyNpZmRlZiBDT01NRU5UICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBNYXJ0aW4gWmluc2VyICovCisgICAgICAgIENIRUNLX0VSUigiaW5p dHNjcjogc21nJGNyZWF0ZV92aXJ0dWFsX2Rpc3BsYXkiLAorICAgICAgICAgICAgICAgICAgU01H JENSRUFURV9WSVJUVUFMX0RJU1BMQVkoJnJvd3MsICZjb2xzLCAmc21nX2Rpc3BsYXlfaWQsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwKSk7CisK KyAgICAgICAgLyogQ29ubmVjdCB0aGUgZGlzcGxheSB3aW5kb3cgdG8gdGhlIHNjcmVlbiAqLwor ICAgICAgICBDSEVDS19FUlIoImluaXRzY3I6IHNtZyRwYXN0ZV92aXJ0dWFsX2Rpc3BsYXkiLAor ICAgICAgICAgICAgICAgICAgU01HJFBBU1RFX1ZJUlRVQUxfRElTUExBWSgmc21nX2Rpc3BsYXlf aWQsJnNtZ19wYXN0ZWJvYXJkX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAmcm93LCZjb2wpKTsKKyNlbHNlCisgICAgICAgIENIRUNLX0VSUigiaW5pdHNj cjogc21nJGNyZWF0ZV92aXJ0dWFsX2Rpc3BsYXkiLAorICAgICAgICAgICAgICAgICAgc21nJGNy ZWF0ZV92aXJ0dWFsX2Rpc3BsYXkoJnJvd3MsICZjb2xzLCAmc21nX2Rpc3BsYXlfaWQsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwKSk7CisKKyAg ICAgICAgLyogQ29ubmVjdCB0aGUgZGlzcGxheSB3aW5kb3cgdG8gdGhlIHNjcmVlbiAqLworICAg ICAgICBDSEVDS19FUlIoImluaXRzY3I6IHNtZyRwYXN0ZV92aXJ0dWFsX2Rpc3BsYXkiLAorICAg ICAgICAgICAgICAgICAgc21nJHBhc3RlX3ZpcnR1YWxfZGlzcGxheSgmc21nX2Rpc3BsYXlfaWQs JnNtZ19wYXN0ZWJvYXJkX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAmcm93LCZjb2wpKTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgfQorICAgIGRl YnVnKEYxMDEsIlZNUyBpbml0c2NyIHNtZ19vcGVuIEEiLCIiLHNtZ19vcGVuKTsKKyAgICBpZiAo IXNtZ19vcGVuKSB7ICAgICAgICAgICAgICAgICAgICAvKiBTdGFydCBhIGJhdGNoIHVwZGF0ZSAq LworICAgICAgICBzbWdfb3BlbiA9IDE7CisjaWZkZWYgQ09NTUVOVAorICAgICAgICBDSEVDS19F UlIoImluaXRzY3I6IHNtZyRiZWdpbl9wYXN0ZWJvYXJkX3VwZGF0ZSIsCisgICAgICAgICAgICAg ICAgICBTTUckQkVHSU5fUEFTVEVCT0FSRF9VUERBVEUoJnNtZ19wYXN0ZWJvYXJkX2lkKSk7Cisj ZWxzZQorICAgICAgICBDSEVDS19FUlIoImluaXRzY3I6IHNtZyRiZWdpbl9wYXN0ZWJvYXJkX3Vw ZGF0ZSIsCisgICAgICAgICAgICAgICAgICBzbWckYmVnaW5fcGFzdGVib2FyZF91cGRhdGUoJnNt Z19wYXN0ZWJvYXJkX2lkKSk7CisjZW5kaWYgLyogQ09NTUVOVCAqLworCWRlYnVnKEYxMDEsIlZN UyBpbml0c2NyIHNtZyRiZWdpbl9wYXN0ZWJvYXJkX3VwZGF0ZSIsIiIsdm1zX3N0YXR1cyk7Cisg ICAgfQorICAgIGRlYnVnKEYxMDEsIlZNUyBpbml0c2NyIHNtZ19vcGVuIEIiLCIiLHNtZ19vcGVu KTsKKyAgICBzbWdfaW5pdGVkID0gMTsKKyAgICByZXR1cm4oMSk7Cit9CisKK3N0YXRpYyB2b2lk CityZWZyZXNoKCkgeworICAgIGRlYnVnKEYxMDEsInJlZnJlc2ggc21nX3Bhc3RlYm9hcmRfaWQi LCIiLHNtZ19wYXN0ZWJvYXJkX2lkKTsKKworICAgIGlmIChzbWdfb3BlbiA9PSAwIHx8IHNtZ19w YXN0ZWJvYXJkX2lkID09IC0xKQorICAgICAgcmV0dXJuOworCisjaWZkZWYgQ09NTUVOVCAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogTWFydGluIFppbnNlciAqLworICAgIENIRUNLX0VSUigi cmVmcmVzaDogc21nJGVuZF9wYXN0ZWJvYXJkX3VwZGF0ZSIsCisgICAgICAgICAgICAgIFNNRyRF TkRfUEFTVEVCT0FSRF9VUERBVEUoJnNtZ19wYXN0ZWJvYXJkX2lkKSk7CisgICAgQ0hFQ0tfRVJS KCJyZWZyZXNoOiBzbWckYmVnaW5fcGFzdGVib2FyZF91cGRhdGUiLAorICAgICAgICAgICAgICBT TUckQkVHSU5fUEFTVEVCT0FSRF9VUERBVEUoJnNtZ19wYXN0ZWJvYXJkX2lkKSk7CisjZWxzZQor ICAgIENIRUNLX0VSUigicmVmcmVzaDogc21nJGVuZF9wYXN0ZWJvYXJkX3VwZGF0ZSIsCisgICAg ICAgICAgICAgIHNtZyRlbmRfcGFzdGVib2FyZF91cGRhdGUoJnNtZ19wYXN0ZWJvYXJkX2lkKSk7 CisgICAgQ0hFQ0tfRVJSKCJyZWZyZXNoOiBzbWckYmVnaW5fcGFzdGVib2FyZF91cGRhdGUiLAor ICAgICAgICAgICAgICBzbWckYmVnaW5fcGFzdGVib2FyZF91cGRhdGUoJnNtZ19wYXN0ZWJvYXJk X2lkKSk7CisjZW5kaWYgLyogQ09NTUVOVCAqLworfQorCitzdGF0aWMgdm9pZAorZW5kd2luKCkg eworICAgIGlmICghc21nX29wZW4pCisgICAgICByZXR1cm47CisKKyAgICBzbWdfb3BlbiA9IDA7 CisKKyNpZmRlZiBDT01NRU5UCisgICAgQ0hFQ0tfRVJSKCJlbmR3aW46IHNtZyRlbmRfcGFzdGVi b2FyZF91cGRhdGUiLAorICAgICAgICAgICAgICBTTUckRU5EX1BBU1RFQk9BUkRfVVBEQVRFKCZz bWdfcGFzdGVib2FyZF9pZCkpOworI2Vsc2UKKyAgICBDSEVDS19FUlIoImVuZHdpbjogc21nJGVu ZF9wYXN0ZWJvYXJkX3VwZGF0ZSIsCisgICAgICAgICAgICAgIHNtZyRlbmRfcGFzdGVib2FyZF91 cGRhdGUoJnNtZ19wYXN0ZWJvYXJkX2lkKSk7CisjZW5kaWYgLyogQ09NTUVOVCAqLworCisgICAg bW92ZSgyMiwgMCk7CisKKyNpZmRlZiBDT01NRU5UCisvKgorICBUaGVzZSBjYWxscyBjbGVhciB0 aGUgc2NyZWVuLgorICAoY29udmVydCByb3V0aW5lIGNhbGxzIHRvIGxvd2VyY2FzZSAtIE1hcnRp biBaaW5zZXIpCisqLworICAgIENIRUNLX0VSUigiZW5kd2luOiBzbWckZGVsZXRlX3ZpcnR1YWxf ZGlzcGxheSIsCisgICAgICAgICAgICAgIFNNRyRERUxFVEVfVklSVFVBTF9ESVNQTEFZKCZzbWdf ZGlzcGxheV9pZCkpOworICAgIHNtZ19kaXNwbGF5X2lkID0gLTE7CisKKyAgICBDSEVDS19FUlIo ImVuZHdpbjogc21nJGRlbGV0ZV9wYXN0ZWJvYXJkIiwKKyAgICAgICAgICAgICAgU01HJERFTEVU RV9QQVNURUJPQVJEKCZzbWdfcGFzdGVib2FyZF9pZCwgMCkpOworICAgIHNtZ19wYXN0ZWJvYXJk X2lkID0gLTE7CisjZW5kaWYgLyogQ09NTUVOVCAqLworfQorCisjaWZkZWYgQ09NTUVOVAorLyog REVDQyA2LjIgc2NyZWFtcyBibG9vZHkgbXVyZGVyIGFib3V0IHByaW50dyAoIm5vdCBlbm91Z2gg YXJncyIpICovCisvKiBidXQgYWRkaW5nIHRoZSBmb2xsb3dpbmcgcHJvdG90eXBlIG9ubHkgbWFr ZXMgaXQgaG9sbGVyIGxvdWRlci4gKi8KKyNpZmRlZiBfX0RFQ0MKKy8qICJ2YXJhcmdzIiBwcm90 b3R5cGUgZm9yIHByaW50dyAqLworX1BST1RPVFlQKHN0YXRpYyBpbnQgcHJpbnR3LChjaGFyICos IC4uLikpOworI2VuZGlmIC8qIF9fREVDQyAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKworI2lm ZGVmIF9fREVDQworI2luY2x1ZGUgPHN0ZGFyZy5oPgorX1BST1RPVFlQKHN0YXRpYyB2b2lkIHBy aW50dywoY2hhciAqLCAuLi4pKTsKK3N0YXRpYyB2b2lkCitwcmludHcoY2hhciAqc3RyLC4uLikg eworICAgIGNoYXIgYnVmWzI1NV07CisgICAgdmFfbGlzdCBhcDsKKyAgICAkREVTQ1JJUFRPUih0 ZXh0X2RzYywgMCk7CisgICAgdGV4dF9kc2MuZHNjJGFfcG9pbnRlcj1idWY7CisgICAgaWYgKCFz bWdfb3BlbikKKyAgICAgIHJldHVybjsKKyAgICB2YV9zdGFydChhcCxzdHIpOworICAgIHRleHRf ZHNjLmRzYyR3X2xlbmd0aCA9IHZzcHJpbnRmKGJ1Ziwgc3RyLCBhcCk7CisgICAgdmFfZW5kKGFw KTsKKyAgICBDSEVDS19FUlIoInByaW50dzogc21nJHB1dF9jaGFycyIsCisgICAgICAgICAgICAg IHNtZyRwdXRfY2hhcnMoJnNtZ19kaXNwbGF5X2lkLCAmdGV4dF9kc2MsIDAsIDAsIDAsIDAsIDAp KTsKK30KKyNlbHNlCitzdGF0aWMgdm9pZAorcHJpbnR3KHN0ciwgYTEsIGEyLCBhMywgYTQsIGE1 LCBhNiwgYTcsIGE4KQorICAgIGNoYXIgKnN0cjsKKyAgICBsb25nIGExLCBhMiwgYTMsIGE0LCBh NSwgYTYsIGE3LCBhODsKKy8qIHByaW50dyAqLyB7CisgICAgY2hhciBidWZbMjU1XTsKKyAgICAk REVTQ1JJUFRPUih0ZXh0X2RzYywgMCk7CisgICAgaWYgKCFzbWdfb3BlbikKKyAgICAgIHJldHVy bjsKKyAgICB0ZXh0X2RzYy5kc2MkYV9wb2ludGVyPWJ1ZjsKKyAgICB0ZXh0X2RzYy5kc2Mkd19s ZW5ndGggPSBzcHJpbnRmKGJ1Ziwgc3RyLCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNywgYTgp OworICAgIENIRUNLX0VSUigicHJpbnR3OiBzbWckcHV0X2NoYXJzIiwKKyAgICAgICAgICAgICAg c21nJHB1dF9jaGFycygmc21nX2Rpc3BsYXlfaWQsICZ0ZXh0X2RzYywgMCwgMCwgMCwgMCwgMCkp OworfQorI2VuZGlmIC8qIF9fREVDQyAqLworCisjZGVmaW5lIENLX0NVUlBPUworaW50Citja19j dXJwb3Mocm93LCBjb2wpIHsKKyAgICBkZWJ1ZyhGMTExLCJWTVMgc21nIGNrX2N1cnBvcyIsY2tp dG9hKHJvdyksY29sKTsKKyAgICBpZiAoIXNtZ19pbml0ZWQgfHwgIXNtZ19vcGVuKSB7CisgICAg ICAgIGluaXRzY3IoKTsKKyAgICB9CisgICAgZGVidWcoRjEwMSwiVk1TIHNtZyBjdXJwb3Mgc21n X29wZW4iLCIiLHNtZ19vcGVuKTsKKyAgICBpZiAoIXNtZ19vcGVuKQorICAgICAgcmV0dXJuKDAp OworICAgIGRlYnVnKEYxMTEsIlZNUyBzbWcgY2tfY3VycG9zIixja2l0b2Eocm93LTEpLGNvbC0x KTsKKyAgICBtb3ZlKHJvdyAtIDEsIGNvbCAtIDEpOyAgICAgICAgICAgICAvKiBTTUcgaXMgMC1i YXNlZCAqLworICAgIHJlZnJlc2goKTsKKyAgICAvKiBlbmR3aW4oKTsgKi8KKyAgICByZXR1cm4o MCk7Cit9CisKK2ludAorY2tfY2xzKCkgeworICAgIGRlYnVnKEYxMDEsIlZNUyBzbWcgY2tfY2xz IHNtZ19pbml0ZWQiLCIiLHNtZ19pbml0ZWQpOworICAgIGlmICghc21nX2luaXRlZCB8fCAhc21n X29wZW4pIHsKKyAgICAgICAgaW5pdHNjcigpOworICAgIH0KKyAgICBkZWJ1ZyhGMTAxLCJWTVMg c21nIGNrX2NscyBzbWdfb3BlbiIsIiIsc21nX29wZW4pOworICAgIGlmICghc21nX29wZW4pCisg ICAgICByZXR1cm4oMCk7CisgICAgY2xlYXIoKTsKKyAgICByZWZyZXNoKCk7CisgICAgLyogZW5k d2luKCk7ICovCisgICAgcmV0dXJuKDApOworfQorCitpbnQKK2NrX2NsZW9sKCkgeworICAgIGRl YnVnKEYxMDEsIlZNUyBzbWcgY2tfY2xlb2wgc21nX2luaXRlZCIsIiIsc21nX2luaXRlZCk7Cisg ICAgaWYgKCFzbWdfaW5pdGVkIHx8ICFzbWdfb3BlbikgeworICAgICAgICBpbml0c2NyKCk7Cisg ICAgfQorICAgIGRlYnVnKEYxMDEsIlZNUyBzbWcgY2tfY2xlb2wgc21nX29wZW4iLCIiLHNtZ19v cGVuKTsKKyAgICBpZiAoIXNtZ19vcGVuKQorICAgICAgcmV0dXJuKDApOworICAgIGNscnRvZW9s KCk7CisgICAgcmVmcmVzaCgpOworICAgIC8qIGVuZHdpbigpOyAqLworICAgIHJldHVybigwKTsK K30KKyNlbmRpZiAvKiBDS19TTUcgKi8KKworI2lmZGVmIE1ZQ1VSU0VTCisvKgorICBEby1pdC15 b3Vyc2VsZiBjdXJzZXMgaW1wbGVtZW50YXRpb24gZm9yIFZNUywgT1MvMiBhbmQgb3RoZXIgQU5T SS9WVC0xMDAncy4KKyAgU3VwcG9ydHMgb25seSB0aGUgVlQ1MiBhbmQgVlQxeHggKGFuZCBsYXRl ciBWVDJ4eC8zeHgvNHh4KSB0ZXJtaW5hbHMuCisgIEJ5IFRlcnJ5IEtlbm5lZHksIFN0IFBldGVy cyBDb2xsZWdlLgorCisgIEZpcnN0LCBzb21lIHN0dWZmIHdlIGNhbiBqdXN0IGlnbm9yZToKKyov CisKK3N0YXRpYyBpbnQKK3RvdWNod2luKHgpIGludCB4OyB7CisgICAgcmV0dXJuKDApOworfQor c3RhdGljIGludAoraW5pdHNjcigpIHsKKyAgICByZXR1cm4oMCk7Cit9CitzdGF0aWMgaW50City ZWZyZXNoKCkgeworICAgIHJldHVybigwKTsKK30KK3N0YXRpYyBpbnQKK2VuZHdpbigpIHsKKyAg ICByZXR1cm4oMCk7Cit9CisKKy8qCisgKiBOb3csIHNvbWUgc3R1ZmYgd2UgbmVlZCB0byBkbzoK KyAqLworCitfUFJPVE9UWVAoIGludCBtb3ZlLCAoaW50LCBpbnQpICk7CisjaWZuZGVmIE9TMgor aW50Cittb3ZlKHJvdywgY29sKSBpbnQgcm93LCBjb2w7IHsKKyAgICBpZiAoaXN2dDUyKQorICAg ICAgcHJpbnRmKCJcMDMzWSVjJWMiLCByb3cgKyAwMzcsIGNvbCArIDAzNyk7CisgICAgZWxzZQor ICAgICAgcHJpbnRmKCJcMDMzWyVkOyVkSCIsIHJvdyArIDEsIGNvbCArIDEpOworICAgIHJldHVy bigwKTsKK30KKworaW50CitjbGVhcigpIHsKKyAgICBtb3ZlKDAsMCk7CisgICAgaWYgKGlzdnQ1 MikKKyAgICAgIHByaW50ZigiXDAzM0oiKTsKKyAgICBlbHNlCisgICAgICBwcmludGYoIlwwMzNb SiIpOworICAgIHJldHVybigwKTsKK30KKworaW50CitjbHJ0b2VvbCgpIHsKKyAgICBpZiAoaXN2 dDUyKQorICAgICAgcHJpbnRmKCJcMDMzSyIpOworICAgIGVsc2UKKyAgICAgIHByaW50ZigiXDAz M1tLIik7CisgICAgcmV0dXJuKDApOworfQorCisjZGVmaW5lIENLX0NVUlBPUworaW50Citja19j bHMoKSB7CisgICAgcmV0dXJuKGNsZWFyKCkpOworfQorCitpbnQKK2NrX2NsZW9sKCkgeworICAg IHJldHVybihjbHJ0b2VvbCgpKTsKK30KKworaW50Citja19jdXJwb3Mocm93LCBjb2wpIGludCBy b3csIGNvbDsgeworICAgIG1vdmUocm93LCBjb2wpOworICAgIHJldHVybigwKTsKK30KKworI2Vs c2UgLyogT1MyICovCisvKiBXaW5kb3dzIE5UIGFuZCBXaW5kb3dzIDk1IGRvIG5vdCBwcm92aWRl IEFOU0kgZW11bGF0aW9uICovCisvKiBUaGVyZWZvcmUgd2UgbWlnaHQgYXMgd2VsbCBub3QgdXNl IGl0IGZvciBPUy8yIGVpdGhlciAgICovCisKK2ludAorbW92ZShyb3csIGNvbCkgaW50IHJvdywg Y29sOyB7CisjaWZuZGVmIE9ORVRFUk1VUEQKKyAgICBTZXRDdXJQb3Mocm93LCBjb2wpOworI2Vu ZGlmIC8qIE9ORVRFUk1VUEQgKi8KKyAgICBsZ290b3h5KCBWQ01ELCBjb2wrMSwgcm93KzEpOwor ICAgIFZzY3JuSXNEaXJ0eShWQ01EKTsKKyAgICByZXR1cm4oMCk7Cit9CisKK2ludAorY2xlYXIo KSB7CisgICAgdmlvY2VsbCBjZWxsOworICAgIG1vdmUoMCwwKTsKKyNpZmRlZiBPTkVURVJNVVBE CisgICAgaWYgKFZzY3JuR2V0QnVmZmVyU2l6ZShWQ01EKSA+IDApIHsKKyAgICAgICAgVnNjcm5T Y3JvbGwoVkNNRCwgVVBXQVJELCAwLAorICAgICAgICAgICAgICAgICAgICBWc2NybkdldEhlaWdo dChWQ01EKS0oMSksCisgICAgICAgICAgICAgICAgICAgIFZzY3JuR2V0SGVpZ2h0KFZDTUQpLSgw KSwgVFJVRSwgQ0hSX1NQKTsKKyAgICAgICAgY2xlYXJ0ZXJtc2NyZWVuKFZDTUQpOworICAgIH0K KyNlbHNlCisgICAgY2VsbC5jID0gJyAnOworICAgIGNlbGwuYSA9IGNvbG9yY21kOworICAgIFdy dE5DZWxsKGNlbGwsIGNtZF9yb3dzICogY21kX2NvbHMsIDAsIDApOworI2VuZGlmIC8qIE9ORVRF Uk1VUEQgKi8KKyAgICByZXR1cm4oMCk7Cit9CisKK2ludAorY2xydG9lb2woKSB7CisgICAgVVNI T1JUIHJvdywgY29sOworICAgIHZpb2NlbGwgY2VsbDsKKworICAgIGNlbGwuYyA9ICcgJzsKKyAg ICBjZWxsLmEgPSBjb2xvcmNtZDsKKyNpZm5kZWYgT05FVEVSTVVQRAorICAgIEdldEN1clBvcygm cm93LCAmY29sICk7CisgICAgV3J0TkNlbGwoY2VsbCwgY21kX2NvbHMgLSBjb2wgLTEsIHJvdywg Y29sKTsKKyNlbmRpZiAvKiBPTkVURVJNVVBEICovCisgICAgY2xydG9lb2xuKFZDTUQsQ0hSX1NQ KTsKKyAgICByZXR1cm4oMCk7Cit9CisKKyNkZWZpbmUgQ0tfQ1VSUE9TCitpbnQKK2NrX2N1cnBv cyhyb3csIGNvbCkgaW50IHJvdywgY29sOyB7CisgICAgbW92ZShyb3csIGNvbCk7CisgICAgcmV0 dXJuKDApOworfQorCitpbnQKK2NrX2NscygpIHsKKyAgICByZXR1cm4oY2xlYXIoKSk7Cit9CisK K2ludAorY2tfY2xlb2woKSB7CisgICAgcmV0dXJuKGNscnRvZW9sKCkpOworfQorCisjZW5kaWYg LyogT1MyICovCisjZW5kaWYgLyogTVlDVVJTRVMgKi8KKworI2lmbmRlZiBOT1RFUk1DQVAKKyNp Zm5kZWYgQ0tfQ1VSUE9TCisjZGVmaW5lIENLX0NVUlBPUworCisvKiBUZXJtY2FwL1Rlcm1pbmZv IHNlY3Rpb24gKi8KKworc3RhdGljIGNoYXIgY3VyX2Nsc1szMl0gPSB7IE5VTCwgTlVMIH07Citz dGF0aWMgY2hhciBjdXJfY2xlb2xbMzJdID0geyBOVUwsIE5VTCB9Oworc3RhdGljIGNoYXIgY3Vy X2NtWzY0XSA9IHsgTlVMLCBOVUwgfTsKK3N0YXRpYyBjaGFyIHRnc2J1ZlsxMjhdID0geyBOVUws IE5VTCB9OworCitzdGF0aWMKKyNpZmRlZiBDS19BTlNJQwordm9pZAorI2VuZGlmIC8qIENLX0FO U0lDICovCitja190ZXJtc2V0KHgpIGludCB4OyB7CisgICAgY3VyX2Nsc1swXSA9IE5VTDsKKyAg ICBjdXJfY2xlb2xbMF0gPSBOVUw7CisgICAgY3VyX2NtWzBdID0gTlVMOworI2lmZGVmIHRnZXRl bnQKKyAgICBkZWJ1ZyhGMTAwLCJ0Z2V0ZW50IGlzIGEgbWFjcm8iLCIiLDApOworI2VuZGlmIC8q IHRnZXRlbnQgKi8KKyNpZmRlZiB0Z2V0c3RyCisgICAgZGVidWcoRjEwMCwidGdldHN0ciBpcyBh IG1hY3JvIiwiIiwwKTsKKyNlbmRpZiAvKiB0Z2V0c3RyICovCisjaWZkZWYgdHB1dHMKKyAgICBk ZWJ1ZyhGMTAwLCJ0cHV0cyBpcyBhIG1hY3JvIiwiIiwwKTsKKyNlbmRpZiAvKiB0cHV0cyAqLwor I2lmZGVmIHRnb3RvCisgICAgZGVidWcoRjEwMCwidGdvdG8gaXMgYSBtYWNybyIsIiIsMCk7Cisj ZW5kaWYgLyogdGdvdG8gKi8KKyNpZmRlZiBOT1RFUk1DQVAKKyAgICAvKiB0Z2V0c3RyKCkgZ2V0 cyBhIHNlZ21lbnRhdGlvbiBmYXVsdCBvbiBPU0YvMSAqLworICAgIGRlYnVnKEYxMDAsImNrX3Rl cm1zZXQgTk9URVJNQ0FQIiwiIiwwKTsKKyNlbHNlCisgICAgaWYgKG5vdGVybWNhcCkgeworICAg ICAgICBkZWJ1ZyhGMTAwLCJja190ZXJtc2V0IG5vdGVybWNhcCIsIiIsMCk7CisgICAgICAgIHJl dHVybjsKKyAgICB9CisgICAgZGVidWcoRjEwMSwiY2tfdGVybXNldCB4IiwiIix4KTsKKyAgICBp ZiAoeCA+IDApIHsKKyAgICAgICAgY2hhciAqIGJwOworICAgICAgICBicCA9IHRnc2J1ZjsKKyAg ICAgICAgKmJwID0gTlVMOworICAgICAgICBkZWJ1ZyhGMTEwLCJja190ZXJtc2V0IGNhbGxpbmcg dGdldHN0ciIsImNsIiwwKTsKKyAgICAgICAgaWYgKHRnZXRzdHIoImNsIiwgJmJwKSkgeyAgICAg ICAvKiBHZXQgY2xlYXItc2NyZWVuIGNvZGUgKi8KKyAgICAgICAgICAgIGRlYnVnKEYxMTAsImNr X3Rlcm1zZXQgdGdldHN0ciBjbCIsdGdzYnVmLCIiKTsKKyAgICAgICAgICAgIGlmICgoaW50KXN0 cmxlbih0Z3NidWYpIDwgMzIpCisgICAgICAgICAgICAgIGNrc3RybmNweShjdXJfY2xzLHRnc2J1 ZiwzMik7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgIHJldHVybjsKKyAgICAgICAgYnAgPSB0 Z3NidWY7CisgICAgICAgIGlmICh0Z2V0c3RyKCJjZSIsICZicCkpIHsgICAgICAgLyogR2V0IGNs ZWFyLXRvLWVuZC1vZi1saW5lIGNvZGUgKi8KKyAgICAgICAgICAgIGRlYnVnKEYxMTAsImNrX3Rl cm1zZXQgdGdldHN0ciBjZSIsdGdzYnVmLCIiKTsKKyAgICAgICAgICAgIGlmICgoaW50KXN0cmxl bih0Z3NidWYpIDwgMzIpCisgICAgICAgICAgICAgIGNrc3RybmNweShjdXJfY2xlb2wsdGdzYnVm LDMyKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgcmV0dXJuOworICAgICAgICBicCA9IHRn c2J1ZjsKKyAgICAgICAgaWYgKHRnZXRzdHIoImNtIiwgJmJwKSkgeyAgICAgICAvKiBHZXQgY3Vy c29yLW1vdmVtZW50IGNvZGUgKi8KKyAgICAgICAgICAgIGRlYnVnKEYxMTAsImNrX3Rlcm1zZXQg dGdldHN0ciBjbSIsdGdzYnVmLCIiKTsKKyAgICAgICAgICAgIGlmICgoaW50KXN0cmxlbih0Z3Ni dWYpIDwgNjQpCisgICAgICAgICAgICAgIGNrc3RybmNweShjdXJfY20sdGdzYnVmLDY0KTsKKyAg ICAgICAgfSBlbHNlCisgICAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZiAvKiBOT1RFUk1D QVAgKi8KK30KKworI2lmbmRlZiBUUFVUU0ZOVFlQRQorI2lmZGVmIFRQVVRTSVNWT0lECisjZGVm aW5lIFRQVVRTRk5UWVBFIHZvaWQKKyNlbHNlCisjZGVmaW5lIFRQVVRTRk5UWVBFIGludAorI2Vu ZGlmIC8qIFRQVVRTSVNWT0lEICovCisjZW5kaWYgLyogVFBVVFNGTlRZUEUgKi8KKworI2lmbmRl ZiBUUFVUU0FSR1RZUEUKKyNpZmRlZiBIUFVYOQorI2RlZmluZSBUUFVUU0FSR1RZUEUgY2hhcgor I2Vsc2UKKyNpZmRlZiBIUFVYMTAKKyNkZWZpbmUgVFBVVFNBUkdUWVBFIGNoYXIKKyNlbHNlCisj ZGVmaW5lIFRQVVRTQVJHVFlQRSBpbnQKKyNlbmRpZiAvKiBIUFVYMTAgKi8KKyNlbmRpZiAvKiBI UFVYOSAqLworI2VuZGlmIC8qIFRQVVRTQVJHVFlQRSAqLworCitzdGF0aWMgVFBVVFNGTlRZUEUK KyNpZmRlZiBDS19BTlNJQworY2tfb3V0YyhUUFVUU0FSR1RZUEUgeCkKKyNlbHNlCitja19vdXRj KHgpIFRQVVRTQVJHVFlQRSB4OworI2VuZGlmIC8qIENLX0FOU0lDICovCit7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVG8gc2F0aXNmeSB0cHV0cygpIGFyZzMgcHJv dG90eXBlICovCisgICAgaW50IHJjOworICAgIGNoYXIgYzsKKyAgICBjID0gKGNoYXIpIHg7Cisg ICAgcmMgPSAoaW5zZXJ2ZXIpID8gdHRvYyhjKSA6IGNvbm9jKGMpOworI2lmbmRlZiBUUFVUU0lT Vk9JRAorICAgIHJldHVybihyYyk7CisjZW5kaWYgLyogVFBVVFNJU1ZPSUQgKi8KK30KKworaW50 Citja19jdXJwb3Mocm93LCBjb2wpIGludCByb3csIGNvbDsgeworI2lmZGVmIENLX0FOU0lDCisg ICAgVFBVVFNGTlRZUEUgKCpmbikoVFBVVFNBUkdUWVBFKTsKKyNlbHNlCisgICAgVFBVVFNGTlRZ UEUgKCpmbikoKTsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworICAgIGlmICghZnhkX2luaXRlZCkK KyAgICAgIGZ4ZGluaXQoOTk5OSk7CisgICAgaWYgKCFjdXJfY21bMF0pIHsgICAgICAgICAgICAg ICAgICAgLyogV2UgZG9uJ3QgaGF2ZSBlc2NhcGUgc2VxdWVuY2VzICovCisjaWZkZWYgQ09NTUVO VAorICAgICAgICByZXR1cm4oLTEpOyAgICAgICAgICAgICAgICAgICAgIC8qIERvIG5vdGhpbmcg Ki8KKyNlbHNlCisgICAgICAgIC8qIEJvdGggQy1LZXJtaXQncyBTQ1JFRU4gY29tbWFuZCBhbmQg QU5TSS9WVDEwMCBhcmUgMS1iYXNlZCAqLworICAgICAgICBwcmludGYoIlwwMzNbJWQ7JWRIIiwg cm93LCBjb2wpOyAvKiBPciBkZWZhdWx0IHRvIEFOU0kgKi8KKyNlbmRpZiAvKiBDT01NRU5UICov CisgICAgfSBlbHNlIHsKKyAgICAgICAgZm4gPSBja19vdXRjOworICAgICAgICAvKiB0ZXJtY2Fw L3Rlcm1pbmZvIGlzIDAtYmFzZWQgKi8KKyAgICAgICAgdHB1dHMoCisjaWZkZWYgVFBVVFNBUkcx Q09OU1QKKyAgICAgICAgICAgICAgKGNvbnN0IGNoYXIgKikKKyNlbmRpZiAvKiBUUFVUU0FSRzFD T05TVCAqLworICAgICAgICAgICAgICB0Z290byhjdXJfY20sY29sLTEscm93LTEpLDEsZm4pOwor ICAgIH0KKyAgICByZXR1cm4oMCk7Cit9CisKK2ludAorY2tfY2xzKCkgeworI2lmZGVmIENLX0FO U0lDCisgICAgVFBVVFNGTlRZUEUgKCpmbikoVFBVVFNBUkdUWVBFKTsKKyNlbHNlCisgICAgVFBV VFNGTlRZUEUgKCpmbikoKTsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworICAgIGlmICghZnhkX2lu aXRlZCkKKyAgICAgIGZ4ZGluaXQoOTk5OSk7CisgICAgaWYgKCFjdXJfY2xzWzBdKSB7ICAgICAg ICAgICAgICAgICAgLyogSWYgd2UgZG9uJ3QgaGF2ZSBlc2NhcGUgc2VxdWVuY2VzICovCisjaWZk ZWYgQ09NTUVOVAorICAgICAgICByZXR1cm4oLTEpOyAgICAgICAgICAgICAgICAgICAgIC8qIERv IG5vdGhpbmcgKi8KKyNlbHNlCisgICAgICAgIHByaW50ZigiXDAzM1s7SFwwMzNbMkoiKTsgICAg ICAgLyogT3IgZGVmYXVsdCB0byBBTlNJICovCisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgIH0g ZWxzZSB7CisgICAgICAgIGZuID0gY2tfb3V0YzsKKyAgICAgICAgZGVidWcoRjExMSwiY2tfY2xz IDIiLGN1cl9jbHMsZnhkX2luaXRlZCk7CisgICAgICAgIHRwdXRzKGN1cl9jbHMsY21kX3Jvd3Ms Zm4pOworICAgIH0KKyAgICByZXR1cm4oMCk7Cit9CisKK2ludAorY2tfY2xlb2woKSB7CisjaWZk ZWYgQ0tfQU5TSUMKKyAgICBUUFVUU0ZOVFlQRSAoKmZuKShUUFVUU0FSR1RZUEUpOworI2Vsc2UK KyAgICBUUFVUU0ZOVFlQRSAoKmZuKSgpOworI2VuZGlmIC8qIENLX0FOU0lDICovCisgICAgaWYg KCFmeGRfaW5pdGVkKQorICAgICAgZnhkaW5pdCg5OTk5KTsKKyAgICBpZiAoIWN1cl9jbGVvbFsw XSkgeyAgICAgICAgICAgICAgICAvKiBJZiB3ZSBkb24ndCBoYXZlIGVzY2FwZSBzZXF1ZW5jZXMg Ki8KKyNpZmRlZiBDT01NRU5UCisgICAgICAgIHJldHVybigtMSk7ICAgICAgICAgICAgICAgICAg ICAgLyogRG8gbm90aGluZyAqLworI2Vsc2UKKyAgICAgICAgcHJpbnRmKCJcMDMzW0siKTsgICAg ICAgICAgICAgICAvKiBPciB1c2UgQU5TSSAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICB9 IGVsc2UgeworICAgICAgICBmbiA9IGNrX291dGM7CisgICAgICAgIHRwdXRzKGN1cl9jbGVvbCwx LGZuKTsKKyAgICB9CisgICAgcmV0dXJuKDApOworfQorI2VuZGlmIC8qIENLX0NVUlBPUyAqLwor I2Vsc2UKK3N0YXRpYyB2b2lkCitja190ZXJtc2V0KHgpIGludCB4OyB7CisgICAgaWYgKHgpIHJl dHVybjsKK30KKyNlbmRpZiAvKiBOT1RFUk1DQVAgKi8KKworI2lmbmRlZiBDS19DVVJQT1MKKyNk ZWZpbmUgQ0tfQ1VSUE9TCitpbnQKK2NrX2NscygpIHsKKyAgICBwcmludGYoIlwwMzNbO0hcMDMz WzJKIik7CisgICAgcmV0dXJuKDApOworfQorCitpbnQKK2NrX2NsZW9sKCkgeworICAgIHByaW50 ZigiXDAzM1tLIik7CisgICAgcmV0dXJuKDApOworfQorCitpbnQKK2NrX2N1cnBvcyhyb3csIGNv bCkgaW50IHJvdywgY29sOyB7CisgICAgcHJpbnRmKCJcMDMzWyVkOyVkSCIsIHJvdywgY29sKTsK KyAgICByZXR1cm4oMCk7Cit9CisjZW5kaWYgLyogQ0tfQ1VSUE9TICovCisKKworI2lmbmRlZiBO T1hGRVIKK3N0YXRpYyBpbnQgY2luaXQgPSAwOyAgICAgICAgICAgICAgICAgICAvKiBGbGFnIGZv ciBjdXJzZXMgaW5pdCdkICovCitzdGF0aWMgaW50IGNlbmR3ID0gMDsgICAgICAgICAgICAgICAg ICAgLyogZW5kd2luKCkgd2FzIGNhbGxlZCAqLworCitzdGF0aWMKKyNpZmRlZiBDS19BTlNJQyAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBCZWNhdXNlIFZPSUQgdXNlZCBieSBjdXJzZXMuaCAq Lwordm9pZAorI2Vsc2UKKyNpZmRlZiBNWUNVUlNFUworVk9JRAorI2Vsc2UKK2ludAorI2VuZGlm IC8qIE1ZQ1VSU0VTICovCisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKyNpZmRlZiBDS19BTlNJQyAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBVcGRhdGUgJSB0cmFuc2ZlcmVkIGFuZCAlIGJhciAq LwordXBkcGN0KGxvbmcgb2xkLCBsb25nIG5ldykKKyNlbHNlIC8qIENLX0FOU0lDICovCit1cGRw Y3Qob2xkLCBuZXcpIGxvbmcgb2xkLCBuZXc7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIHVw ZHBjdCAqLyB7CisjaWZkZWYgQ09NTUVOVAorICAgIGludCBtLCBuOworICAgIG1vdmUoQ1dfUENE LDIyKTsKKyAgICBwcmludHcoIiVsZCIsIG5ldyk7CisjaWZkZWYgS1VJCisjaWZuZGVmIEs5NUcK KyAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX1BDRCwgKGxv bmcpIG5ldyk7CisjZW5kaWYgLyogSzk1RyAqLworI2VuZGlmIC8qIEtVSSAqLworI2lmZGVmIENL X1BDVF9CQVIKKyAgICBpZiAodGhlcm1vbWV0ZXIpIHsKKyAgICAgICAgaWYgKG9sZCA+IG5ldykg eworICAgICAgICAgICAgb2xkID0gMDsKKyAgICAgICAgICAgIG1vdmUoQ1dfUENELCAyNik7Cisg ICAgICAgICAgICBjbHJ0b2VvbCgpOworICAgICAgICB9CisgICAgICAgIG0gPSBvbGQvMjsKKyAg ICAgICAgbW92ZShDV19QQ0QsIDI2ICsgbSk7CisgICAgICAgIG4gPSBuZXcgLyAyIC0gbTsKKyNp Zm5kZWYgT1MyCisgICAgICAgIHdoaWxlIChuID4gMCkgeworICAgICAgICAgICAgaWYgKChtICsg MSkgJSA1ID09IDApCisgICAgICAgICAgICAgIHByaW50dygiKiIpOworICAgICAgICAgICAgZWxz ZQorICAgICAgICAgICAgICBwcmludHcoIj0iKTsKKyAgICAgICAgICAgIG0rKzsKKyAgICAgICAg ICAgIG4tLTsKKyAgICAgICAgfQorICAgICAgICBpZiAobmV3ICUgMiAhPSAwKSBwcmludHcoIi0i KTsKKyAgICAgICAgLyogbW92ZShDV19QQ0QsIDIyKzUzKTsgKi8KKyNlbHNlIC8qIE9TMiAqLwor ICAgICAgICB3aGlsZSAobiA+IDApIHsKKyAgICAgICAgICAgIHByaW50dygiJWMiLCAnXDMzMycp OworICAgICAgICAgICAgbSsrOyBuLS07CisgICAgICAgIH0KKyAgICAgICAgaWYgKG5ldyAlIDIg IT0gMCkKKyAgICAgICAgICBwcmludHcoIiVjIiwgJ1wyNjEnKTsKKyNlbmRpZiAvKiBPUzIgKi8K KyAgICB9CisjZW5kaWYgLyogQ0tfUENUX0JBUiAqLworICAgIC8qIGNscnRvZW9sKCk7ICovCisj ZWxzZSAgLyogIUNPTU1FTlQgKi8KKyNpZmRlZiBPUzIKKyNkZWZpbmUgQ0hBUjEgICAnXDMzMycg ICAgICAgICAgLyogT1MyIC0gQ1A0MzcgKi8KKyNkZWZpbmUgQ0hBUjIgICAnXDI2MScKKyNlbHNl CisjZGVmaW5lIENIQVIxICAgJy8nICAgICAgICAgICAgIC8qIERlZmF1bHQgKi8KKyNkZWZpbmUg Q0hBUjIgICAnLScKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICBkZWJ1ZyhGMTAxLCJ1cGRwY3Qgb2xk IiwiIixvbGQpOworICAgIGRlYnVnKEYxMDEsInVwZHBjdCBuZXciLCIiLG5ldyk7CisgICAgbW92 ZShDV19QQ0QsMjIpOworICAgIHByaW50dygiJS0zbGQiLCBuZXcpOyAvKiAgKHdhcykgICBwcmlu dHcoIiVsZCIsIG5ldyk7ICAqLworI2lmZGVmIEtVSQorI2lmbmRlZiBLOTVHCisgICAgS3VpU2V0 UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfUENELCAobG9uZykgbmV3ICk7 CisjZW5kaWYgLyogSzk1RyAqLworI2VuZGlmIC8qIEtVSSAqLworI2lmZGVmIENLX1BDVF9CQVIK KyAgICBpZiAodGhlcm1vbWV0ZXIpIHsKKyAgICAgICAgaW50IG0sIG47CisKKyAgICAgICAgaWYg KG9sZCA+IG5ldykgeworICAgICAgICAgICAgb2xkID0gMCA7CisgICAgICAgICAgICBtb3ZlKENX X1BDRCwgMjYpOworICAgICAgICAgICAgY2xydG9lb2woKTsKKyAgICAgICAgfQorICAgICAgICBp ZiAobmV3IDw9IDEwMEwpIHsKKyAgICAgICAgICAgIG0gPSBvbGQgLyAyOworICAgICAgICAgICAg biA9IG5ldyAvIDIgLSBtOworICAgICAgICAgICAgbW92ZShDV19QQ0QsIDI2K20pOworICAgICAg ICAgICAgd2hpbGUgKG4tLSA+IDApCisgICAgICAgICAgICAgIHByaW50dygiJWMiLCBDSEFSMSk7 CisgICAgICAgICAgICBpZiAobmV3ICUgMiAhPSAwKQorICAgICAgICAgICAgICBwcmludHcoIiVj IiwgQ0hBUjIpOworICAgICAgICB9CisgICAgfQorI2VuZGlmIC8qIENLX1BDVF9CQVIgKi8KKyNl bmRpZiAvKiBDT01NRU5UICovCit9CisKK3N0YXRpYyBDS19PRkZfVCBvbGRfdHIgPSAoQ0tfT0ZG X1QpLTE7CS8qIFRpbWUgcmVtYWluaW5nIHByZXZpb3VzbHkgKi8KKworc3RhdGljIENLX09GRl9U CisjaWZkZWYgQ0tfQU5TSUMKK3Nob2V0bChDS19PRkZfVCBvbGRfdHIsIGxvbmcgY3BzLCBDS19P RkZfVCBmc2l6LCBDS19PRkZfVCBob3dmYXIpCisjZWxzZQorICAgIHNob2V0bChvbGRfdHIsIGNw cywgZnNpeiwgaG93ZmFyKSBsb25nIGNwczsgQ0tfT0ZGX1Qgb2xkX3RyLCBmc2l6LCBob3dmYXI7 CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIHNob2V0bCAqLyB7ICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBFc3RpbWF0ZWQgdGltZSBsZWZ0IGluIHRyYW5zZmVyICovCisgICAgQ0tfT0ZG X1QgdHI7CQkJLyogVGltZSByZW1haW5pbmcsIHNlY29uZHMgKi8KKworI2lmZGVmIEdGVElNRVIK KyAgICBpZiAoZnNpeiA+IDBMICYmIGNwcyA+IDBMKQorICAgICAgdHIgPSAoQ0tfT0ZGX1QpKChD S0ZMT0FUKShmc2l6IC0gaG93ZmFyKSAvIChDS0ZMT0FUKWNwcyk7CisgICAgZWxzZQorICAgICAg dHIgPSAoQ0tfT0ZGX1QpLTE7CisjZWxzZQorICAgIHRyID0gKGZzaXogPiAwTCAmJiBjcHMgPiAw TCkgPworICAgICAgKChmc2l6IC0gaG93ZmFyKSAvIGNwcykgOgorICAgICAgICAoQ0tfT0ZGX1Qp LTE7CisjZW5kaWYgLyogR0ZUSU1FUiAqLworICAgIG1vdmUoQ1dfVFIsMjIpOworICAgIGlmICh0 ciA+IChDS19PRkZfVCktMSkgeworICAgICAgICBpZiAodHIgIT0gb2xkX3RyKSB7CisgICAgICAg ICAgICBwcmludHcoIiVzIixoaG1tc3ModHIpKTsKKyNpZmRlZiBLVUkKKyNpZm5kZWYgSzk1Rwor ICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKUNXX1RS LCAobG9uZyloaG1tc3ModHIpKTsKKyNlbmRpZiAvKiBLOTVHICovCisjZW5kaWYgLyogS1VJICov CisgICAgICAgICAgICBjbHJ0b2VvbCgpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAg ICAgcHJpbnR3KCIodW5rbm93bikiKTsKKyNpZmRlZiBLVUkKKyNpZm5kZWYgSzk1RworICAgICAg ICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19UUiwgKGxvbmcp ICIodW5rbm93bikiICk7CisjZW5kaWYgLyogSzk1RyAqLworI2VuZGlmIC8qIEtVSSAqLworICAg ICAgICBjbHJ0b2VvbCgpOworICAgIH0KKyAgICByZXR1cm4odHIpOworfQorCitzdGF0aWMgbG9u ZworI2lmZGVmIENLX0FOU0lDCitzaG9jcHMoaW50IHBjdCwgQ0tfT0ZGX1QgZnNpeiwgQ0tfT0ZG X1QgaG93ZmFyKQorI2Vsc2UKK3Nob2NwcyhwY3QsIGZzaXosIGhvd2ZhcikgaW50IHBjdDsgQ0tf T0ZGX1QgZnNpeiwgaG93ZmFyOworI2VuZGlmIC8qIENLX0FOU0lDICovCisvKiBzaG9jcHMgKi8g eworI2lmZGVmIENQU19XRUlHSFRFRAorICAgIHN0YXRpYyBDS19PRkZfVCBvbGRmZmMgPSAwTDsK KyNlbmRpZiAvKiBDUFNfV0VJR0hURUQgKi8KKyNpZmRlZiBHRlRJTUVSCisgICAgQ0tGTE9BVCBz ZWNzLCB4eDsKKyNlbHNlCisgICAgQ0tfT0ZGX1Qgc2VjcywgeHg7CisjZW5kaWYgLyogR0ZUSU1F UiAqLworCisjaWZkZWYgR0ZUSU1FUgorICAgIHh4ID0gKGd0diA+PSAwLjApID8gZ3R2IDogMC4w OyAgICAgIC8qIEZsb2F0aW5nLXBvaW50IHZlcnNpb24gKi8KKyAgICBndHYgPSBnZnRpbWVyKCk7 CisgICAgaWYgKChndHYgLSBvbGRndHYpIDwgKENLRkxPQVQpIDEuMCkgLyogT25seSBkbyB0aGlz IG9uY2UgcGVyIHNlY29uZCAqLworICAgICAgcmV0dXJuKG9sZGNwcyk7CisgICAgb2xkZ3R2ID0g eHg7CisjZWxzZQorICAgIHh4ID0gKGd0diA+PSAwKSA/IGd0diA6IDA7ICAgICAgICAgIC8qIFdo b2xlLW51bWJlciB2ZXJzaW9uICovCisgICAgZ3R2ID0gZ3RpbWVyKCk7CisgICAgaWYgKChndHYg LSBvbGRndHYpIDwgMSkKKyAgICAgIHJldHVybihvbGRjcHMpOworICAgIG9sZGd0diA9IHh4Owor I2VuZGlmIC8qIEdGVElNRVIgKi8KKworI2lmZGVmIENQU19XRUlHSFRFRAorICAgIC8qIGRlYnVn KEYxMDAsIlNIT0NQUzogV0VJR0hURUQiLCIiLDApOyAqLworICAgIGlmIChndHYgIT0gb2xkZ3R2 KSB7ICAgICAgICAgICAgICAgIC8qIFRoZSBmaXJzdCBwYWNrZXQgaXMgaWdub3JlZCAqLworICAg ICAgICBpZiAoZmZjIDwgb2xkZmZjKQorICAgICAgICAgIG9sZGZmYyA9IGZmYzsKKyAgICAgICAg b2xkY3BzID0gY3BzOworICAgICAgICBpZiAob2xkY3BzICYmIG9sZGd0diA+CisjaWZkZWYgR0ZU SU1FUgorICAgICAgICAgICAgMS4wCisjZWxzZQorICAgICAgICAgICAgMQorI2VuZGlmIC8qIEdG VElNRVIgKi8KKyAgICAgICAgICAgICkgeyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUaGUg Zmlyc3Qgc2Vjb25kIGlzIGlnbm9yZWQgKi8KKy8qCisgIFRoaXMgdmVyc2lvbiBvZiBzaG9jcHMo KSBwcm9kdWNlcyBhIHdlaWdodGVkIGF2ZXJhZ2UgdGhhdCBzb21lCisgIHBlb3BsZSBsaWtlLCBi dXQgbW9zdCBwZW9wbGUgZmluZCBpdCBkaXNjb25jZXJ0aW5nIGFuZCBib21iYXJkIHVzCisgIHdp dGggcXVlc3Rpb25zIGFuZCBjb21wbGFpbnRzIGFib3V0IHdoeSB0aGUgQ1BTIGZpZ3VyZSBmbHVj dHVhdGVzIHNvCisgIHdpbGRseS4gIFNvIG5vdyB5b3Ugb25seSBnZXQgdGhlIHdlaWdodGVkIGF2 ZXJhZ2UgaWYgeW91IGJ1aWxkIHRoZQorICBwcm9ncmFtIHlvdXJzZWxmIHdpdGggQ1BTX1dFSUdI VEVEIGRlZmluZWQuCisqLworI2lmbmRlZiBDUFNfVklOQ0UKKyNpZmRlZiBHRlRJTUVSCisgICAg ICAgICAgICBjcHMgPSAobG9uZykoKCgoQ0tGTE9BVClvbGRjcHMgKiAzLjApICsKKyAgICAgICAg ICAgICAgICAgICAoQ0tGTE9BVCkoZmZjIC0gb2xkZmZjKSAvIChndHYtb2xkZ3R2KSApIC8gNC4w KTsKKyNlbHNlCisgICAgICAgICAgICBjcHMgPSAoIChvbGRjcHMgKiAzKSArIChmZmMgLSBvbGRm ZmMpIC8gKGd0di1vbGRndHYpICkgLyA0OworI2VuZGlmIC8qIEdGVElNRVIgKi8KKyNlbHNlCisv KiBBbmQgYW4gYWx0ZXJuYXRlIHdlaWdodGluZyBzY2hlbWUgZnJvbSBWaW5jZW50IEZhdGljYS4u LiAqLworICAgICAgICAgICAgY3BzID0gKDMgKgorICAgICAgICAgICAgICgoMStwY3QvMzAwKSpv bGRmZmMvb2xkZ3R2KygxLXBjdC8xMDApKihmZmMtb2xkZmZjKS8oZ3R2LW9sZGd0dikpKQorICAg ICAgICAgICAgICAvIDQ7CisjZW5kaWYgLyogQ1BTX1ZJTkNFICovCisgICAgICAgIH0gZWxzZSB7 CisgICAgICAgICAgICAvKiBObyB3ZWlnaHRlZCBhdmVyYWdlIHNpbmNlIHRoZXJlIGlzIG5vdGhp bmcgdG8gd2VpZ2ggKi8KKyNpZmRlZiBHRlRJTUVSCisgICAgICAgICAgICBjcHMgPSAobG9uZyko Z3R2ICE9IDAuMCA/CisgICAgICAgICAgICAgIChDS0ZMT0FUKShmZmMgLSBvbGRmZmMpIC8gKGd0 diAtIG9sZGd0dikgOgorICAgICAgICAgICAgICAgIChmZmMgLSBvbGRmZmMpKSA7CisjZWxzZQor ICAgICAgICAgICAgY3BzID0gZ3R2ID8gKGZmYyAtIG9sZGZmYykgLyAoZ3R2IC0gb2xkZ3R2KSA6 IChmZmMgLSBvbGRmZmMpIDsKKyNlbmRpZiAvKiBHRlRJTUVSICovCisgICAgICAgIH0KKyNpZmRl ZiBDT01NRU5UCisjaWZkZWYgREVCVUcKKyAgICAgICAgaWYgKGRlYmxvZykgeworICAgICAgICAg ICAgZGVidWcoRjEwMSwiU0hPQ1BTOiBwY3QgICAiLCIiLHBjdCk7CisgICAgICAgICAgICBkZWJ1 ZyhGMTAxLCJTSE9DUFM6IGd0diAgICIsIiIsZ3R2KTsKKyAgICAgICAgICAgIGRlYnVnKEYxMDEs IlNIT0NQUzogb2xkZ3R2IiwiIixvbGRndHYpOworICAgICAgICAgICAgZGVidWcoRjEwMSwiU0hP Q1BTOiBkZ3R2ICAiLCIiLChsb25nKShndHYtb2xkZ3R2KSk7CisgICAgICAgICAgICBkZWJ1ZyhG MTAxLCJTSE9DUFM6IGZmYyAgICIsIiIsZmZjKTsKKyAgICAgICAgICAgIGRlYnVnKEYxMDEsIlNI T0NQUzogb2xkZmZjIiwiIixvbGRmZmMpOworICAgICAgICAgICAgZGVidWcoRjEwMSwiU0hPQ1BT OiBkZmZjICAiLCIiLGZmYy1vbGRmZmMpOworICAgICAgICAgICAgZGVidWcoRjEwMSwiU0hPQ1BT OiBjcHMgICAiLCIiLGNwcyk7CisgICAgICAgIH0KKyNlbmRpZiAvKiBERUJVRyAqLworI2VuZGlm IC8qIENPTU1FTlQgKi8KKyAgICAgICAgbW92ZShDV19DUCwyMik7CisgICAgICAgIHByaW50dygi JWxkIiwgY3BzKTsKKyNpZmRlZiBLVUkKKyNpZm5kZWYgSzk1RworICAgICAgICBLdWlTZXRQcm9w ZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19DUCwgKGxvbmcpIGNwcyApOworI2Vu ZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBLVUkgKi8KKyAgICAgICAgY2xydG9lb2woKTsKKyAg ICAgICAgb2xkZmZjID0gZmZjOworICAgIH0KKyNlbHNlIC8qICFDUFNfV0VJR0hURUQgKi8KKyNp ZmRlZiBDT01NRU5UCisjaWZkZWYgREVCVUcKKyAgICBpZiAoZGVibG9nKSB7CisJZGVidWcoRjEw MCwiU0hPQ1BTOiBOT1QgV0VJR0hURUQiLCIiLDApOworICAgICAgICBkZWJ1ZyhGMTAxLCJTSE9D UFM6IHBjdCAgICAiLCIiLHBjdCk7CisgICAgICAgIGRlYnVnKEYxMDEsIlNIT0NQUzogZ3R2ICAg ICIsIiIsZ3R2KTsKKyAgICAgICAgZGVidWcoRjEwMSwiU0hPQ1BTOiBvbGRndHYgIiwiIixvbGRn dHYpOworICAgICAgICBkZWJ1ZyhGMTAxLCJTSE9DUFM6IGRndHYgICAiLCIiLChsb25nKWd0diAt IChsb25nKW9sZGd0dik7CisgICAgICAgIGRlYnVnKEYxMDEsIlNIT0NQUzogZmZjICAgICIsIiIs ZmZjKTsKKyAgICAgICAgZGVidWcoRjEwMSwiU0hPQ1BTOiBvbGRmZmMgIiwiIixvbGRmZmMpOwor ICAgICAgICBkZWJ1ZyhGMTAxLCJTSE9DUFM6IGRmZmMgICAiLCIiLGZmYy1vbGRmZmMpOworICAg ICAgICBkZWJ1ZyhGMTAxLCJTSE9DUFM6IGNwcyAgICAiLCIiLGNwcyk7CisgICAgICAgIGRlYnVn KEYxMDEsIlNIT0NQUzogZmlsY250ICIsIiIsZmlsY250KTsKKyNpZmRlZiBHRlRJTUVSCisgICAg ICAgIGRlYnVnKEYxMDEsIlNIT0NQUzogZnBmc2VjcyIsIiIsZnBmc2Vjcyk7CisjZW5kaWYgLyog R0ZUSU1FUiAqLworICAgIH0KKyAgICBkZWJ1ZyhGMTAxLCJzaG9jcHMgZ3R2IiwiIixndHYpOwor I2VuZGlmIC8qIERFQlVHICovCisjaWZkZWYgR0ZUSU1FUgorI2VuZGlmIC8qIENPTU1FTlQgKi8K KyAgICAvKiBkZWJ1ZyhGMTAxLCJzaG9jcHMgZnBmc2VjcyIsIiIsZnBmc2Vjcyk7ICovCisgICAg c2VjcyA9IGd0diAtIGZwZnNlY3M7CisgICAgLyogZGVidWcoRjEwMSwic2hvY3BzIHNlY3MiLCIi LChsb25nKXNlY3MpOyAqLworICAgIGlmIChzZWNzID4gMC4wKSB7CisgICAgICAgIGNwcyA9IChs b25nKSgoQ0tGTE9BVCkgZmZjIC8gc2Vjcyk7CisgICAgICAgIC8qIGRlYnVnKEYxMDEsInNob2Nw cyBjcHMiLCIiLGNwcyk7ICovCisgICAgICAgIG1vdmUoQ1dfQ1AsMjIpOworI2lmZGVmIEtVSQor I2lmbmRlZiBLOTVHCisgICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwg KGxvbmcpIENXX0NQLCAobG9uZykgY3BzICk7CisjZW5kaWYgLyogSzk1RyAqLworI2VuZGlmIC8q IEtVSSAqLworICAgICAgICBwcmludHcoIiVsZCIsIGNwcyk7CisgICAgICAgIGNscnRvZW9sKCk7 CisgICAgfQorI2Vsc2UgIC8qIE5vdCBHRlRJTUVSICovCisgICAgaWYgKChzZWNzID0gZ3R2IC0g ZnNlY3MpID4gMCkgeworICAgICAgICBjcHMgPSAoc2VjcyA8IDFMKSA/IGZmYyA6IGZmYyAvIHNl Y3M7CisgICAgICAgIG1vdmUoQ1dfQ1AsMjIpOworI2lmZGVmIEtVSQorI2lmbmRlZiBLOTVHCisg ICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX0NQLCAo bG9uZykgY3BzICk7CisjZW5kaWYgLyogSzk1RyAqLworI2VuZGlmIC8qIEtVSSAqLworICAgICAg ICBwcmludHcoIiVsZCIsIGNwcyk7CisgICAgICAgIGNscnRvZW9sKCk7CisgICAgfQorI2VuZGlm IC8qIEdGVElNRVIgKi8KKyNlbmRpZiAvKiBDUFNfV0VJR0hURUQgKi8KKworICAgIGlmIChjcHMg PiBwZWFrY3BzICYmICAgICAgICAgICAgICAgIC8qIFBlYWsgdHJhbnNmZXIgcmF0ZSAqLworICAg ICAgICAoKHdoYXQgJiBXX1NFTkQgJiYgc3BhY2tldHMgPiB3c2xvdHMgKyA0KSB8fAorCSAoISh3 aGF0ICYgV19TRU5EKSAmJiBzcGFja2V0cyA+IDEwKSkpIHsKKyAgICAgICAgcGVha2NwcyA9IGNw czsKKyAgICB9CisgICAgb2xkX3RyID0gc2hvZXRsKG9sZF90ciwgY3BzLCBmc2l6LCBob3dmYXIp OworICAgIHJldHVybihjcHMpOworfQorCitzdGF0aWMKKyNpZmRlZiBDS19BTlNJQyAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBCZWNhdXNlIFZPSUQgdXNlZCBieSBjdXJzZXMuaCAqLwordm9p ZAorI2Vsc2UKKyNpZmRlZiBNWUNVUlNFUworVk9JRAorI2Vsc2UKK2ludAorI2VuZGlmIC8qIE1Z Q1VSU0VTICovCisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3NjcmZ0KCkgeyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBEaXNwbGF5IGZpbGUgdHlwZSAqLworICAgIGNoYXIgeGZlcnN0 clsyNTZdOworICAgIHhmZXJzdHJbMF0gPSBOVUw7CisgICAgZGVidWcoRjEwMSwic2NyZnQgYmlu YXJ5IiwiIixiaW5hcnkpOworICAgIGlmIChiaW5hcnkpIHsKKyAgICAgICAgc3dpdGNoKGJpbmFy eSkgeworICAgICAgICAgIGNhc2UgWFlGVF9MOgorICAgICAgICAgICAgY2tzdHJuY3B5KHhmZXJz dHIsIkxBQkVMRUQiLDI1Nik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIFhZ RlRfSToKKyAgICAgICAgICAgIGNrc3RybmNweSh4ZmVyc3RyLCJJTUFHRSIsMjU2KTsKKyAgICAg ICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgWFlGVF9VOgorICAgICAgICAgICAgY2tzdHJu Y3B5KHhmZXJzdHIsIkJJTkFSWSBVTkRFRklORUQiLDI1Nik7CisgICAgICAgICAgICBicmVhazsK KwkgIGNhc2UgWFlGVF9NOgorICAgICAgICAgICAgY2tzdHJuY3B5KHhmZXJzdHIsIk1BQ0JJTkFS WSIsMjU2KTsKKyAgICAgICAgICAgIGJyZWFrOworCSAgY2FzZSBYWUZUX1g6CisgICAgICAgICAg ICBja3N0cm5jcHkoeGZlcnN0ciwiVEVORVgiLDI1Nik7CisgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIGNhc2UgWFlGVF9COgorICAgICAgICAgICAgY2tz dHJuY3B5KHhmZXJzdHIsIkJJTkFSWSIsMjU2KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg ICB9CisjaWZkZWYgQ0tfUkVTRU5ECisgICAgICAgIGlmICh3aGF0ICYgV19TRU5EICYmIHNlbmRz dGFydCA+IDBMKSB7CisgICAgICAgICAgICBpZiAoc2VuZG1vZGUgPT0gU01fUFNFTkQpIHsKKyAg ICAgICAgICAgICAgICBja3N0cm5jYXQoeGZlcnN0ciwgIiAvIHBhcnRpYWwiLCAyNTYpOworICAg ICAgICAgICAgfSBlbHNlIGlmIChzZW5kbW9kZSA9PSBTTV9SRVNFTkQpIHsKKyAgICAgICAgICAg ICAgICBja3N0cm5jYXQoeGZlcnN0ciwgIiAvIHJlc2VuZCIsIDI1Nik7CisgICAgICAgICAgICB9 CisgICAgICAgIH0gZWxzZSBpZiAod2hhdCAmIFdfUkVDViAmJiByc19sZW4gPiAwTCkgeworICAg ICAgICAgICAgY2tzdHJuY2F0KHhmZXJzdHIsICIgLyByZXNlbmQiLCAyNTYpOworICAgICAgICB9 CisjZW5kaWYgLyogQ0tfUkVTRU5EICovCisgICAgfSBlbHNlIHsKKworI2lmbmRlZiBOT0NTRVRT CisgICAgICAgIGNrc3RybmNweSh4ZmVyc3RyLCJURVhUIiwyNTYpOworI2lmZGVmIE5FV0ZUUAor I2lmbmRlZiBOT1VOSUNPREUKKwlpZiAod2hhdCAmIFdfRlRQKSB7CisJICAgIGlmIChmdHBfY3N4 IDwgMCkKKwkgICAgICBja3N0cm5jYXQoeGZlcnN0ciwiIChubyB0cmFuc2xhdGlvbikiLCAyNTYp OworCSAgICBlbHNlCisJICAgICAgY2ttYWt4bXNnKCZ4ZmVyc3RyWzRdLDI1MiwKKwkJICAgICAg ICIgKCIsCisJCSAgICAgICBmY3NpbmZvWyh3aGF0ICYgV19TRU5EKSA/IGZ0cF9jc2wgOiBmdHBf Y3N4XS5rZXl3b3JkLAorCQkgICAgICAgIiA9PiAiLAorCQkgICAgICAgZmNzaW5mb1sod2hhdCAm IFdfU0VORCkgPyBmdHBfY3N4IDogZnRwX2NzbF0ua2V5d29yZCwKKwkJICAgICAgICIpIiwKKwkJ ICAgICAgIE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwKKwkJICAgICAgICk7CisJ fSBlbHNlCisjZW5kaWYgLyogTk9VTklDT0RFICovCisjZW5kaWYgLyogTkVXRlRQICovCisJICBp ZiAodGNoYXJzZXQgPT0gVENfVFJBTlNQKSB7CisgICAgICAgICAgICBja3N0cm5jYXQoeGZlcnN0 ciwgIiAobm8gdHJhbnNsYXRpb24pIiwgMjU2KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg ICAgIGlmICh3aGF0ICYgV19TRU5EKSB7CisgICAgICAgICAgICAgICAgc3ByaW50ZiggJnhmZXJz dHJbc3RybGVuKHhmZXJzdHIpXSwgLyogc2FmZSAqLworICAgICAgICAgICAgICAgICAgICAgICAg IiAoJXMgPT4gJXMpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZjc2luZm9bZmNoYXJzZXRd LmtleXdvcmQsIC8qIGJ1aWx0LWluIGtleXdvcmRzICovCisgICAgICAgICAgICAgICAgICAgICAg ICB0Y3NpbmZvW3RjaGFyc2V0XS5rZXl3b3JkICAvKiBsZW5ndGhzIGFyZSBjb250cm9sbGVkICov CisJCQkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzcHJpbnRmKCAm eGZlcnN0cltzdHJsZW4oeGZlcnN0cildLCAvKiBzYWZlICovCisgICAgICAgICAgICAgICAgICAg ICAgICAiICglcyA9PiAlcykiLAorICAgICAgICAgICAgICAgICAgICAgICAgdGNzaW5mb1t0Y2hh cnNldF0ua2V5d29yZCwgLyogYnVpbHQtaW4ga2V5d29yZHMgKi8KKyAgICAgICAgICAgICAgICAg ICAgICAgIGZjc2luZm9bZmNoYXJzZXRdLmtleXdvcmQpOyAvKiBsZW5ndGhzIGNvbnRyb2xsZWQg Ki8KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKyAgICB9 CisgICAgbW92ZShDV19UWVAsMjIpOworICAgIHByaW50dygiJXMiLCB4ZmVyc3RyKTsKKyAgICBj bHJ0b2VvbCgpOworI2lmZGVmIEtVSQorI2lmbmRlZiBLOTVHCisgICAgS3VpU2V0UHJvcGVydHko IEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfVFlQLCAobG9uZykgeGZlcnN0ciApOworI2Vu ZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBLVUkgKi8KKyAgICByZXR1cm47Cit9CisKKyNpZmRl ZiBDS19ORVdURVJNCitzdGF0aWMgRklMRSAqY2tfc3Rkb3V0ID0gTlVMTDsKK3N0YXRpYyBpbnQg Y2tfZmQgPSAtMTsKKyNlbmRpZiAvKiBDS19ORVdURVJNICovCisKK3N0YXRpYyBsb25nIHBjdCA9 IDBMLCBvbGRwY3QgPSAwTCwgb2xkcnR0ID0gLTFMOworc3RhdGljIGludCBvbGR0eXAgPSAwLCBv bGR3aW4gPSAtMSwgb2xkdHJ5ID0gLTEsIG9sZGxlbiA9IC0xLCBvbGR0aW0gPSAtMTsKKworI2lm ZGVmIE5FVENPTk4KK3N0YXRpYyBjaGFyICpuZXRuYW1lW10gPSB7CisgICAgIm5vbmUiLAkJCQkv KiAwMCAqLworICAgICJUQ1AvSVAiLAkJCQkvKiAwMSBUQ1AgKFNvY2tldHMpICovCisgICAgIlRD UC9JUCIsCQkJCS8qIDAyIFRDUCAoU3RyZWFtcykgKi8KKyAgICAiWC4yNSIsCQkJCS8qIDAzIFN1 bkxpbmsgWC4yNCAgKi8KKyAgICAiREVDbmV0IiwJCQkJLyogMDQgREVDbmV0ICAqLworICAgICJW QVggUFNJIiwJCQkJLyogMDUgVkFYIFBTSSAqLworICAgICJOYW1lZCBQaXBlcyIsCQkJLyogMDYg TEFOIE1hbmFnZXIgTmFtZWQgUGlwZSAqLworICAgICJYLjI1IiwJCQkJLyogMDcgU3RyYXR1cyBW T1MgWC4yNSAqLworICAgICJOZXRCSU9TIiwJCQkJLyogMDggSUJNIE5FVEJJT1MgKi8KKyAgICAi U3VwZXJMQVQiLAkJCQkvKiAwNyBNZXJpZGlhbiBTdXBlckxBVCAqLworICAgICJGaWxlIiwJCQkJ LyogMTAgRmlsZSAqLworICAgICJDb21tYW5kIiwJCQkJLyogMTEgU3VicHJvY2VzcyAocGlwZSkg Ki8KKyAgICAiRExMIiwJCQkJLyogMTIgRExMIGRvZXMgaS9vICovCisgICAgIlguMjUiLAkJCQkv KiAxMyBJQk0gQUlYTGluayBYLjI1ICovCisgICAgIlguMjUiLAkJCQkvKiAxNCBIUC1VWCBYLjI1 ICovCisgICAgIlBUWSIsCQkJCS8qIDE1IFBzZXVkb3Rlcm1pbmFsICovCisgICAgIlNTSCIsCQkJ CS8qIDE2IFNTSCAqLworICAgICI8RVJST1I+IiwJCQkJLyogMTcgSW4gY2FzZSBuZXcgdHlwZXMg YXJlIGFkZGVkICovCisgICAgIjxFUlJPUj4iLAkJCQkvKiAxOCBidXQgbm9ib2R5IHJlbWVtYmVy cyB0byB1cGRhdGUgKi8KKyAgICAiPEVSUk9SPiIsCQkJCS8qIDE5IHRoaXMgdGFibGUgLi4uICov CisgICAgTlVMTAkJCQkvKiAyMCAqLworfTsKK3N0YXRpYyBpbnQgbm5ldG5hbWUgPSAoc2l6ZW9m KG5ldG5hbWUpIC8gc2l6ZW9mKGNoYXIgKikpOworCisjZW5kaWYgLyogTkVUQ09OTiAqLworCisj aWZkZWYgQ0tfQU5TSUMKK3ZvaWQKK3NjcmVlbmMoaW50IGYsIGNoYXIgYyxDS19PRkZfVCBuLGNo YXIgKnMpCisjZWxzZQorQ0tWT0lECitzY3JlZW5jKGYsYyxuLHMpCitpbnQgZjsgICAgICAgICAg LyogYXJndW1lbnQgZGVzY3JpcHRvciAqLworY2hhciBjOyAgICAgICAgIC8qIGEgY2hhcmFjdGVy IG9yIHNtYWxsIGludGVnZXIgKi8KK0NLX09GRl9UIG47ICAgICAvKiBhIGxvbmcgaW50ZWdlciAq LworY2hhciAqczsgICAgICAgIC8qIGEgc3RyaW5nICovCisjZW5kaWYgLyogQ0tfQU5TSUMgKi8K Ky8qIHNjcmVlbmMoKSAqLyB7CisjaWZkZWYgQ0tfU1NMCisgICAgZXh0ZXJuIGludCB0bHNfYWN0 aXZlX2ZsYWcsIHNzbF9hY3RpdmVfZmxhZzsKKyNlbmRpZiAvKiBDS19TU0wgKi8KKyNpZmRlZiBS TE9HQ09ERQorICAgIGV4dGVybiBpbnQgdHRucHJvdG87CisjZW5kaWYgLyogUkxPR0NPREUgKi8K KyAgICBzdGF0aWMgaW50IHEgPSAwOworICAgIHN0YXRpYyBsb25nIGZjbnQgPSAwTDsJCS8qIE51 bWJlciBvZiBmaWxlcyB0cmFuc2ZlcnJlZCAqLworICAgIHN0YXRpYyBDS19PRkZfVCBmc2l6ID0g KENLX09GRl9UKS0xOyAvKiBDb3B5IG9mIGZpbGUgc2l6ZSAqLworICAgIHN0YXRpYyBDS19PRkZf VCBmYnl0ID0gMEw7IC8qIFRvdGFsIGZpbGUgYnl0ZXMgb2YgYWxsIGZpbGVzIHRyYW5zZmVycmVk ICovCisgICAgc3RhdGljIENLX09GRl9UIGhvd2ZhciA9IDBMOyAvKiBIb3cgbXVjaCBvZiBjdXJy ZW50IGZpbGUgaGFzIGJlZW4geGZlcidkICovCisgICAgc3RhdGljIGludCAgcGN0bGJsID0gMEw7 ICAvKiBQZXJjZW50IGRvbmUgdnMgQnl0ZXMgc28gZmFyICovCisgICAgbG9uZyBjcHMgPSAwTDsK KworICAgIGludCBuZXQgPSAwOworICAgIGludCB4bmV0ID0gMDsKKyAgICBpbnQgZnRwID0gMDsK KyAgICBpbnQgbGVuOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBMZW5ndGggb2Ygc3Ry aW5nICovCisgICAgaW50IGVycm9ycyA9IDA7ICAgICAgICAgICAgICAgICAgICAgLyogRXJyb3Ig Y291bnRlciAqLworICAgIGludCB4OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdv cmtlciAqLworCisgICAgZGVidWcoRjEwMSwic2NyZWVuYyBjaW5pdCIsIiIsY2luaXQpOworICAg IGRlYnVnKEYxMDEsInNjcmVlbmMgY2VuZHciLCIiLGNlbmR3KTsKKworICAgIGlmICghcykgcyA9 ICIiOyAgICAgICAgICAgICAgICAgICAgIC8qIEFsd2F5cyBkbyB0aGlzLiAqLworCisgICAgZnRw ID0gKHdoYXQgJiBXX0ZUUCkgPyAxIDogMDsJLyogRlRQIG9yIEtlcm1pdCAqLworICAgIG5ldCA9 IG5ldHdvcmsgfHwgZnRwOworICAgIHhuZXQgPSBmdHAgPyAxIDogbmV0dHlwZTsJCS8qIE5FVF9U Q1BCID09IDEgKi8KKworICAgIGlmIChjaW5pdCA9PSAwIHx8IGNlbmR3ID4gMCkgeyAgICAgIC8q IEhhbmRsZSBib3JkZXJsaW5lIGNhc2VzLi4uICovCisgICAgICAgIGlmIChmID09IFNDUl9DVykg eyAgICAgICAgICAgICAgLyogQ2xvc2Ugd2luZG93LCBidXQgaXQncyBub3Qgb3BlbiAqLworICAg ICAgICAgICAgZnRfd2luID0gMDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg ICAgICBkZWJ1ZyhGMTExLCJzY3JlZW5jIEEiLHMsZik7CisgICAgICAgIGlmIChmID09IFNDUl9F TSB8fAorICAgICAgICAgICAoZiA9PSBTQ1JfUFQgJiYgYyA9PSAnRScpKSB7IC8qIEZhdGFsIGVy cm9yIGJlZm9yZSB3aW5kb3cgb3BlbiAqLworICAgICAgICAgICAgY29ub2xsKCIiKTsgY29ub2Mo Jz8nKTsgY29ub2xsKHMpOyByZXR1cm47IC8qIFJlZ3VsYXIgZGlzcGxheSAqLworICAgICAgICB9 CisgICAgfQorICAgIGlmIChjaW5pdCA9PSAwKSB7ICAgICAgICAgICAgICAgICAgIC8qIE9ubHkg Y2FsbCBpbml0c2NyKCkgb25jZSAqLworCWNoYXIgKiBzOworCS8qIENoZWNrIHRoZXNlIG5vdyAt LSBpZiB0aGV5IGFyZSBkZWZpbmVkIGJ1dCBub3QgbnVtZXJpYyAqLworCS8qIHRoZXkgY2FuIGNy YXNoIGN1cnNlcyAqLworCXMgPSBnZXRlbnYoIkxJTkVTIik7CisJaWYgKHMpIGlmICghcmRpZ2l0 cyhzKSkgeworCSAgICBwcmludGYoIj9MSU5FUyB2YXJpYWJsZSBub3QgbnVtZXJpYzogXCIlc1wi LlxuIixzKTsKKwkgICAgcHJpbnRmKCIoRnVsbHNjcmVlbiBkaXNwbGF5IGRpc2FibGVkKVxuIik7 CisJICAgIGZkaXNwbGEgPSBYWUZEX1M7CisJICAgIHJldHVybjsKKwl9CisJcyA9IGdldGVudigi Q09MVU1OUyIpOworCWlmIChzKSBpZiAoIXJkaWdpdHMocykpIHsKKwkgICAgcHJpbnRmKCI/Q09M VU1OUyB2YXJpYWJsZSBub3QgbnVtZXJpYzogXCIlc1wiLlxuIixzKTsKKwkgICAgcHJpbnRmKCIo RnVsbHNjcmVlbiBkaXNwbGF5IGRpc2FibGVkKVxuIik7CisJICAgIGZkaXNwbGEgPSBYWUZEX1M7 CisJICAgIHJldHVybjsKKwl9CisgICAgICAgIGNlbmR3ID0gMTsgICAgICAgICAgICAgICAgICAg ICAgLyogTmV3IHdpbmRvdyBuZWVkcyByZXBhaW50aW5nICovCisjaWZkZWYgQ09NTUVOVAorICAg ICAgICBpZiAoIWluaXRzY3IoKSkgeyAgICAgICAgICAgICAgIC8qIE9vcHMsIGNhbid0IGluaXRp YWxpemUgd2luZG93PyAqLworLyoKKyAgSW4gZmFjdCwgdGhpcyBkb2Vzbid0IGhhcHBlbi4gICJt YW4gY3Vyc2VzIiBzYXlzIGluaXRzY3IoKSBoYWx0cyB0aGUKKyAgZW50aXJlIHByb2dyYW0gaWYg aXQgZmFpbHMsIHdoaWNoIGlzIHRydWUgb24gdGhlIHN5c3RlbXMgd2hlcmUgSSd2ZQorICB0ZXN0 ZWQgaXQuICBJdCB3aWxsIGZhaWwgaWYgeW91ciB0ZXJtaW5hbCB0eXBlIGlzIG5vdCBrbm93biB0 byBpdC4KKyAgVGhhdCdzIHdoeSBTRVQgRklMRSBESVNQTEFZIEZVTExTQ1JFRU4gY2FsbHMgdGdl dGVudCgpIHRvIG1ha2Ugc3VyZSB0aGUKKyAgdGVybWluYWwgdHlwZSBpcyBrbm93biBiZWZvcmUg YWxsb3dpbmcgYSBjdXJzZXMgZGlzcGxheS4KKyovCisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVy ciwiQ1VSU0VTIElOSVRTQ1IgRVJST1JcclxuIik7CisgICAgICAgICAgICBmZGlzcGxhID0gWFlG RF9TOyAgICAgICAgICAgLyogRmFsbCBiYWNrIHRvIENSVCBkaXNwbGF5ICovCisgICAgICAgICAg ICByZXR1cm47CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjaW5pdCsrOyAgICAgICAg ICAgICAgICAgICAgLyogV2luZG93IGluaXRpYWxpemVkIG9rICovCisgICAgICAgICAgICBkZWJ1 ZyhGMTAwLCJDVVJTRVMgSU5JVFNDUiBPSyIsIiIsMCk7CisgICAgICAgIH0KKyNlbHNlICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTYXZlIHNvbWUgbWVtb3J5LiAqLworI2lm ZGVmIENLX05FV1RFUk0KKyAgICAgICAgLyogKEZyb20gQW5keSBGeWZlIDxhbmR5QHZsc2kuY3Mu Y2FsdGVjaC5lZHU+KQorICAgICAgICAgICBTeXN0ZW0gViBjdXJzZXMgc2VlbXMgdG8gcmVzZXJ2 ZSB0aGUgcmlnaHQgdG8gYWx0ZXIgdGhlIGJ1ZmZlcmluZworICAgICAgICAgICBvbiB0aGUgb3V0 cHV0IEZJTEUqIHdpdGhvdXQgcmVzdG9yaW5nIGl0LiAgRm9ydHVuYXRlbHkgU3lzdGVtIFYKKyAg ICAgICAgICAgY3Vyc2VzIHByb3ZpZGVzIG5ld3Rlcm0oKSwgYW4gYWx0ZXJuYXRpdmUgdG8gaW5p dHNjcigpLCB0aGF0CisgICAgICAgICAgIGFsbG93cyB1cyB0byBzcGVjaWZ5IGV4cGxpY2l0bHkg dGhlIHRlcm1pbmFsIHR5cGUgYW5kIGlucHV0IGFuZAorICAgICAgICAgICBvdXRwdXQgRklMRSBw b2ludGVycy4gIFRodXMgd2UgZHVwbGljYXRlIHN0ZG91dCwgYW5kIGxldCBjdXJzZXMKKyAgICAg ICAgICAgaGF2ZSB0aGUgY29weS4gIFRoZSBvcmlnaW5hbCByZW1haW5zIHVuYWx0ZXJlZC4gIFVu Zm9ydHVuYXRlbHksCisgICAgICAgICAgIG5ld3Rlcm0oKSBzZWVtcyB0byBiZSBwYXJ0aWN1bGFy IHRvIFN5c3RlbSBWLgorICAgICAgICAqLworICAgICAgICBzID0gZ2V0ZW52KCJURVJNIik7Cisg ICAgICAgIGlmIChja19mZCA8IDApIHsKKyAgICAgICAgICAgIGNrX2ZkID0gZHVwKGZpbGVubyhz dGRvdXQpKTsKKyAgICAgICAgICAgIGNrX3N0ZG91dCA9IChja19mZCA+PSAwKSA/IChGSUxFICop ZmRvcGVuKGNrX2ZkLCAidyIpIDogTlVMTDsKKyAgICAgICAgfQorICAgICAgICBkZWJ1ZyhGMTAw LCJzY3JlZW5jIG5ld3Rlcm0uLi4iLCIiLDApOworCisvKiBOT1RFOiBJdCBtaWdodCBiZSBuZWNl c3NhcnkgdG8gZG8gdGhpcyB3aXRoIHN0ZGluIHRvbyEgKi8KKy8qIFRoaXMgd291bGQgaGF2ZSBi ZWVuIHRoZSBjYXNlIGluIEZyZWVCU0QgNC4xIGJ1dCB0aGV5IGZpeGVkIHRoZSAqLworLyogcHJv YmxlbSBieSByZXN0b3JpbmcgdGhlIGJ1ZmZlcmluZyBvZiBzdGRpbiBiZWZvcmUgdGhlIGZpbmFs IHJlbGVhc2UuICovCisvKiAoQnV0IFQuRS4gRGlja2V5IHNheXMgc3RkaW4gaXMgbm90IGJ1ZmZl cmVkPykgKi8KKworICAgICAgICBpZiAoY2tfc3Rkb3V0ID09IE5VTEwgfHwgbmV3dGVybShzLCBj a19zdGRvdXQsIHN0ZGluKSA9PSAwKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwKKyAg ICAgICAgICAgICAgIkZ1bGxzY3JlZW4gZGlzcGxheSBub3Qgc3VwcG9ydGVkIGZvciB0ZXJtaW5h bCB0eXBlOiAlc1xyXG4iLHMpOworICAgICAgICAgICAgZmRpc3BsYSA9IFhZRkRfUzsgICAgICAg ICAgIC8qIFVzZSBDUlQgaW5zdGVhZCAqLworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9 CisgICAgICAgIGRlYnVnKEYxMDAsInNjcmVlbmMgbmV3dGVybSBvayIsIiIsMCk7CisjZWxzZQor ICAgICAgICBkZWJ1ZyhGMTAwLCJzY3JlZW4gY2FsbGluZyBpbml0c2NyIiwiIiwwKTsKKyAgICAg ICAgaW5pdHNjcigpOyAgICAgICAgICAgICAgICAgICAgICAvKiBJbml0aWFsaXplIGN1cnNlcy4g Ki8KKyAgICAgICAgZGVidWcoRjEwMCwic2NyZWVuIGluaXRzY3Igb2siLCIiLDApOworI2VuZGlm IC8qIENLX05FV1RFUk0gKi8KKyAgICAgICAgY2luaXQrKzsgICAgICAgICAgICAgICAgICAgICAg ICAvKiBSZW1lbWJlciBjdXJzZXMgd2FzIGluaXRpYWxpemVkLiAqLworI2VuZGlmIC8qIENPTU1F TlQgKi8KKyAgICB9CisgICAgZnRfd2luID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgLyog V2luZG93IGlzIG9wZW4gKi8KKyAgICBpZiAocmVwYWludCkgeworI2lmZGVmIENLX1dSRUZSRVNI CisvKgorICBUaGlzIHRvdGFsbHkgcmVwYWludHMgdGhlIHNjcmVlbiwganVzdCB3aGF0IHdlIHdh bnQsIGJ1dCB3ZSBjYW4gb25seQorICBkbyB0aGlzIHdpdGggcmVhbCBjdXJzZXMsIGFuZCB0aGVu IG9ubHkgaWYgY2xlYXJvaygpIGFuZCB3cmVmcmVzaCgpIGFyZQorICBwcm92aWRlZCBpbiB0aGUg Y3Vyc2VzIGxpYnJhcnkuCisqLworI2lmZGVmIE9TMgorICAgICAgICBSZXN0b3JlQ21kTW9kZSgp OworI2Vsc2UKKyNpZmRlZiBRTlgKKyNpZm5kZWYgUU5YMTYKKyAgICAgICAgY2xlYXJvayhzdGRz Y3IsIDEpOyAgICAgICAgICAgICAvKiBRTlggZG9lc24ndCBoYXZlIGN1cnNjciAqLworI2VuZGlm IC8qIFFOWDE2ICovCisgICAgICAgIHdyZWZyZXNoKHN0ZHNjcik7CisjZWxzZQorICAgICAgICB3 cmVmcmVzaChjdXJzY3IpOworI2VuZGlmIC8qIFFOWCAqLworI2VuZGlmIC8qIE9TMiAqLworI2Vs c2UgIC8qIE5vIENLX1dSRUZSRVNIICovCisvKgorICBLZXJtaXQncyBkby1pdC15b3Vyc2VsZiBt ZXRob2QsIHdvcmtzIHdpdGggYWxsIHR5cGVzIG9mIGZ1bGxzY3JlZW4KKyAgc3VwcG9ydCwgYnV0 IGRvZXMgbm90IHJlcGFpbnQgYWxsIHRoZSBmaWVsZHMuICBGb3IgZXhhbXBsZSwgdGhlIGZpbGVu YW1lCisgIGlzIGxvc3QsIGJlY2F1c2UgaXQgYXJyaXZlcyBhdCBhIGNlcnRhaW4gdGltZSBhbmQg bmV2ZXIgY29tZXMgYWdhaW4sIGFuZAorICBLZXJtaXQgcHJlc2VudGx5IGRvZXMgbm90IHNhdmUg aXQgYW55d2hlcmUuICBNYWtpbmcgdGhpcyBtZXRob2Qgd29yayBmb3IKKyAgYWxsIGZpZWxkcyB3 b3VsZCBiZSBhIHJhdGhlciBtYWpvciByZWNvZGluZyB0YXNrLCBkdXBsaWNhdGluZyB3aGF0IGN1 cnNlcworICBhbHJlYWR5IGRvZXMsIGFuZCB3b3VsZCBhZGQgYSBsb3Qgb2YgY29tcGxleGl0eSBh bmQgc3RvcmFnZSBzcGFjZS4KKyovCisgICAgICAgIGNlbmR3ID0gMTsKKyNlbmRpZiAvKiBDS19X UkVGUkVTSCAqLworICAgICAgICByZXBhaW50ID0gMDsKKyAgICB9CisgICAgaWYgKGNlbmR3KSB7 ICAgICAgICAgICAgICAgICAgICAgICAgLyogZW5kd2luKCkgd2FzIGNhbGxlZCBwcmV2aW91c2x5 ICovCisjaWZkZWYgVk1TCisgICAgICAgIGluaXRzY3IoKTsgICAgICAgICAgICAgICAgICAgICAg LyogKG9yIHNob3VsZCBoYXZlIGJlZW4hKSAqLworICAgICAgICBjbGVhcigpOworICAgICAgICB0 b3VjaHdpbihzdGRzY3IpOworICAgICAgICByZWZyZXNoKCk7CisjZWxzZQorI2lmZGVmIFFOWAor LyoKKyAgSW4gUU5YLCBpZiB3ZSBkb24ndCBjYWxsIGluaXRzY3IoKSBoZXJlIHdlIGNvcmUgZHVt cC4KKyAgSSBkb24ndCBoYXZlIGFueSBRTlggY3Vyc2VzIGRvY3VtZW50YXRpb24sIGJ1dCBvdGhl ciBjdXJzZXMgbWFudWFscworICBzYXkgdGhhdCBpbml0c2NyKCkgc2hvdWxkIGJlIGNhbGxlZCBv bmx5IG9uY2UgcGVyIGFwcGxpY2F0aW9uLCBhbmQKKyAgZXhwZXJpZW5jZSBzaG93cyB0aGF0IG9u IG90aGVyIHN5c3RlbXMsIGNhbGxpbmcgaW5pdHNjcigpIGhlcmUgZ2VuZXJhbGx5CisgIHJlc3Vs dHMgaW4gYSBjb3JlIGR1bXAuCisqLworICAgICAgICBkZWJ1ZyhGMTAwLCJzY3JlZW5jIHJlLWNh bGxpbmcgaW5pdHNjciBRTlgiLCIiLDApOworICAgICAgICBpbml0c2NyKCk7CisgICAgICAgIGNs ZWFyKCk7CisgICAgICAgIHJlZnJlc2goKTsKKyNpZmRlZiBDT01NRU5UCisvKgorICBCdXQgZXZl biBzbywgc2Vjb25kIGFuZCBzdWJzZXF1ZW50IGN1cnNlcyBkaXNwbGF5cyBhcmUgbWVzc2VkIHVw LgorICBDYWxsaW5nIHRvdWNod2luLCByZWZyZXNoLCBldGMsIGRvZXNuJ3QgbWFrZSBhbnkgZGlm ZmVyZW5jZS4KKyovCisgICAgICAgIGRlYnVnKEYxMDAsInNjcmVlbmMgY2FsbGluZyB0b3VjaHdp biBRTlgiLCIiLDApOworICAgICAgICB0b3VjaHdpbihzdGRzY3IpOworICAgICAgICBkZWJ1ZyhG MTAwLCJzY3JlZW5jIGNhbGxpbmcgcmVmcmVzaCBRTlgiLCIiLDApOworICAgICAgICByZWZyZXNo KCk7CisjZW5kaWYgLyogQ09NTUVOVCAqLworCisjZWxzZSAvKiBBbGwgb3RoZXJzLi4uICovCisg ICAgICAgIGRlYnVnKEYxMDAsInNjcmVlbmMgY2FsbGluZyBjbGVhciIsIiIsMCk7CisgICAgICAg IGNsZWFyKCk7CisgICAgICAgIGRlYnVnKEYxMDAsInNjcmVlbmMgY2xlYXIgb2siLCIiLDApOwor I2VuZGlmIC8qIFFOWCAqLworI2VuZGlmIC8qIFZNUyAqLworICAgICAgICBkZWJ1ZyhGMTAwLCJz Y3JlZW5jIHNldHVwIG9rIiwiIiwwKTsKKyAgICAgICAgZGVidWcoRjEwMCwic2NyZWVuYyBkb2lu ZyBmaXJzdCBtb3ZlIiwiIiwwKTsKKyAgICAgICAgbW92ZShDV19CQU4sMCk7ICAgICAgICAgICAg ICAgICAvKiBEaXNwbGF5IHRoZSBiYW5uZXIgKi8KKyAgICAgICAgZGVidWcoRjExMCwic2NyZWVu YyBteWhvc3QiLG15aG9zdCwwKTsKKyNpZmRlZiBUQ1BTT0NLRVQKKyAgICAgICAgZGVidWcoRjEx MCwic2NyZWVuYyBteWlwYWRkciIsbXlpcGFkZHIsMCk7CisjZW5kaWYgLyogVENQU09DS0VUICov CisjaWZkZWYgSFBVWDEwMTAKKyAgICAgICAgZGVidWcoRjEwMCwic2NyZWVuYyBjYWxsaW5nIGZp cnN0IHByaW50dy4uLiIsIiIsMCk7CisvKiBSaWdodCBoZXJlIGlzIHdoZXJlIEhQLVVYIDEwLjEw IGxpYnhjdXJzZS4xIFJldiA3Ni4yMCBoYW5ncy4uLiAqLworI2VuZGlmIC8qIEhQVVgxMDEwICov CisgICAgICAgIGlmIChteWhvc3RbMF0pIHsKKyNpZmRlZiBUQ1BTT0NLRVQKKyAgICAgICAgICAg IGlmICghbXlpcGFkZHJbMF0KKyNpZmRlZiBPUzIKKyAgICAgICAgICAgICAgICAgLyogV2UgbmVl ZCB0byBwZXJmb3JtIHRoaXMgdGVzdCBiZWNhdXNlIG9uIG5vbi1UQ1AvSVAgKi8KKyAgICAgICAg ICAgICAgICAgLyogc3lzdGVtcyB0aGUgY2FsbCB0byBnZXRsb2NhbGlwYWRkcigpIHJlc3VsdHMg aW4gYSAgKi8KKyAgICAgICAgICAgICAgICAgLyogRE5TIExvb2t1cCB3aGljaCB0YWtlcyBzZXZl cmFsIG1pbnV0ZXMgdG8gdGltZSBvdXQgKi8KKyAgICAgICAgICAgICAgICAgJiYgbmV0ICYmCisg ICAgICAgICAgICAgICAgICh4bmV0ID09IE5FVF9UQ1BBIHx8IHhuZXQgPT0gTkVUX1RDUEIKKyNp ZmRlZiBTU0hCVUlMVElOCisgICAgICAgICAgICAgICAgICB8fCB4bmV0ID09IE5FVF9TU0gKKyNl bmRpZiAvKiBTU0hCVUlMVElOICovCisgICAgICAgICAgICAgICAgICApCisjZW5kaWYgLyogT1My ICovCisgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgZ2V0bG9jYWxpcGFkZHIoKTsK KyAgICAgICAgICAgIGlmIChteWlwYWRkclswXSAmJiBzdHJjbXAoKGNoYXIgKilteWhvc3QsKGNo YXIgKilteWlwYWRkcikpCisgICAgICAgICAgICAgIHByaW50dygiJXMsICVzIFslc10iLHZlcnNp bywoY2hhciAqKW15aG9zdCwoY2hhciAqKW15aXBhZGRyKTsKKyAgICAgICAgICAgIGVsc2UKKyNl bmRpZiAvKiBUQ1BTT0NLRVQgKi8KKyAgICAgICAgICAgICAgcHJpbnR3KCIlcywgJXMiLHZlcnNp bywoY2hhciAqKW15aG9zdCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwcmludHco IiVzIix2ZXJzaW8pOworICAgICAgICB9CisjaWZkZWYgSFBVWDEwMTAKKyAgICAgICAgZGVidWco RjEwMCwic2NyZWVuYyBmaXJzdCBwcmludHcgcmV0dXJucyIsIiIsMCk7CisjZW5kaWYgLyogSFBV WDEwMTAgKi8KKyAgICAgICAgbW92ZShDV19ESVIsMyk7CisgICAgICAgIHByaW50dygiQ3VycmVu dCBEaXJlY3Rvcnk6ICVzIix6Z3RkaXIoKSk7CisjaWZkZWYgS1VJCisjaWZuZGVmIEs5NUcKKyAg ICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfRElSLCAo bG9uZykgemd0ZGlyKCkgKTsKKyNlbmRpZiAvKiBLOTVHICovCisjZW5kaWYgLyogS1VJICovCisg ICAgICAgIGlmIChuZXQpIHsKKyAgICAgICAgICAgIG1vdmUoQ1dfTElOLDgpOworICAgICAgICAg ICAgcHJpbnR3KCJOZXR3b3JrIEhvc3Q6ICVzIiwKKyNpZmRlZiBORVdGVFAKKwkJICAgZnRwID8g KGZ0cF9ob3N0ID8gZnRwX2hvc3QgOiAiKHVua25vd24pIikgOgorI2VuZGlmIC8qIE5FV0ZUUCAq LworCQkgICB0dG5hbWUKKwkJICAgKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1v dmUoQ1dfTElOLDApOworICAgICAgICAgICAgcHJpbnR3KCJDb21tdW5pY2F0aW9uIERldmljZTog JXMiLHR0bmFtZSk7CisgICAgICAgIH0KKyNpZmRlZiBLVUkKKyNpZm5kZWYgSzk1RworICAgICAg ICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19MSU4sIChsb25n KSB0dG5hbWUgKTsKKyNlbmRpZiAvKiBLOTVHICovCisjZW5kaWYgLyogS1VJICovCisKKyAgICAg ICAgaWYgKG5ldCkgeworICAgICAgICAgICAgbW92ZShDV19TUEQsOCk7CisgICAgICAgICAgICBw cmludHcoIk5ldHdvcmsgVHlwZTogIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBt b3ZlKENXX1NQRCwxKTsKKyAgICAgICAgICAgIHByaW50dygiQ29tbXVuaWNhdGlvbiBTcGVlZDog Iik7CisgICAgICAgIH0KKyAgICAgICAgbW92ZShDV19TUEQsMjIpOyAgICAgICAgICAgICAgICAv KiBTZXJpYWwgc3BlZWQgb3IgbmV0d29yayB0eXBlICovCisgICAgICAgIGlmIChuZXQpIHsKKyNp ZmRlZiBORVRDT05OCisJICAgIGludCBzZWN1cmUgPSAwOworCSAgICBjaGFyICogeG5hbWU7CisJ ICAgIGlmICh4bmV0ID4gbm5ldG5hbWUpCisJICAgICAgeG5hbWUgPSAiW0VSUk9SXSI7CisJICAg IGVsc2UKKwkgICAgICB4bmFtZSA9IG5ldG5hbWVbeG5ldF07CisjaWZkZWYgTkVXRlRQCisgICAg ICAgICAgICBpZiAoZnRwKSB7CisJCWlmIChmdHBpc3NlY3VyZSgpKQorCQkgIHNlY3VyZSA9IDE7 CisJICAgIH0gZWxzZQorI2VuZGlmIC8qIE5FV0ZUUCAqLworCSAgICAgIGlmICgwCisjaWZkZWYg U1NIQlVJTFRJTgorICAgICAgICAgICAgICAgIHx8IElTX1NTSCgpCisjZW5kaWYgLyogU1NIQlVJ TFRJTiAqLworI2lmZGVmIENLX0VOQ1JZUFRJT04KKyAgICAgICAgICAgICAgICB8fCBja190bl9l bmNyeXB0aW5nKCkgJiYgY2tfdG5fZGVjcnlwdGluZygpCisjZW5kaWYgLyogQ0tfRU5DUllQVElP TiAqLworI2lmZGVmIENLX1NTTAorICAgICAgICAgICAgICAgIHx8IHRsc19hY3RpdmVfZmxhZyB8 fCBzc2xfYWN0aXZlX2ZsYWcKKyNlbmRpZiAvKiBDS19TU0wgKi8KKyNpZmRlZiBSTE9HQ09ERQor I2lmZGVmIENLX0tFUkJFUk9TCisjaWZkZWYgQ0tfRU5DUllQVElPTgorICAgICAgICAgICAgICAg IHx8IHR0bnByb3RvID09IE5QX0VLNExPR0lOIHx8IHR0bnByb3RvID09IE5QX0VLNUxPR0lOCisj ZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLworI2VuZGlmIC8qIENLX0tFUkJFUk9TICovCisjZW5k aWYgLyogUkxPR0NPREUgKi8KKyAgICAgICAgICAgICAgICAgKSB7CisJCXNlY3VyZSA9IDE7CisJ ICAgIH0KKwkgICAgaWYgKHNlY3VyZSkgeworI2lmZGVmIEtVSQorI2lmbmRlZiBLOTVHCisgICAg ICAgICAgICAgICAgY2hhciBidWZbMzBdOworICAgICAgICAgICAgICAgIHNwcmludGYoYnVmLCIl cyAoU0VDVVJFKSIseG5hbWUpOworICAgICAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9G SUxFX1RSQU5TRkVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19T UEQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIGJ1ZgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICk7CisjZW5kaWYgLyogSzk1RyAqLworI2VuZGlmIC8qIEtV SSAqLworICAgICAgICAgICAgICAgIHByaW50dygiJXMgKFNFQ1VSRSkiLHhuYW1lKTsKKyAgICAg ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcHJpbnR3KCIlcyIseG5hbWUpOworI2lm ZGVmIEtVSQorI2lmbmRlZiBLOTVHCisgICAgICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJ X0ZJTEVfVFJBTlNGRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENX X1NQRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgeG5hbWUKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICApOworI2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAv KiBLVUkgKi8KKyAgICAgICAgICAgIH0KKyNlbHNlCisgICAgICAgICAgICBwcmludHcoIihuZXR3 b3JrKSIpOworI2lmZGVmIEtVSQorI2lmbmRlZiBLOTVHCisgICAgICAgICAgICBLdWlTZXRQcm9w ZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25n KSBDV19TUEQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgIihuZXR3b3JrKSIK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisjZW5kaWYgLyogSzk1RyAqLworI2VuZGlm IC8qIEtVSSAqLworI2VuZGlmIC8qIE5FVENPTk4gKi8KKyAgICAgICAgfSBlbHNlIHsKKyAgICAg ICAgICAgIGlmIChzcGVlZCA8IDBMKQorICAgICAgICAgICAgICBzcGVlZCA9IHR0Z3NwZCgpOwor ICAgICAgICAgICAgaWYgKHNwZWVkID4gMEwpIHsKKyAgICAgICAgICAgICAgICBpZiAoc3BlZWQg PT0gODg4MCkgeworICAgICAgICAgICAgICAgICAgICBwcmludHcoIjc1LzEyMDAiKTsKKyNpZmRl ZiBLVUkKKyNpZm5kZWYgSzk1RworICAgICAgICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShL VUlfRklMRV9UUkFOU0ZFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxv bmcpIENXX1NQRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpICI3 NS8xMjAwIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworI2VuZGlmIC8q IEs5NUcgKi8KKyNlbmRpZiAvKiBLVUkgKi8KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg ICAgICAgICAgICAgICAgICBjaGFyIHNwZWVkYnVmWzY0XSA7CisgICAgICAgICAgICAgICAgICAg IHNwcmludGYoc3BlZWRidWYsICIlbGQiLCBzcGVlZCk7CisgICAgICAgICAgICAgICAgICAgIHBy aW50dygiJXMiLHNwZWVkYnVmKTsKKyNpZmRlZiBLVUkKKyNpZm5kZWYgSzk1RworICAgICAgICAg ICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX1NQRCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKGxvbmcpIHNwZWVkYnVmCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICk7CisjZW5kaWYgLyogSzk1RyAqLworI2VuZGlmIC8qIEtVSSAqLworICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcHJp bnR3KCJ1bmtub3duIik7CisjaWZkZWYgS1VJCisjaWZuZGVmIEs5NUcKKyAgICAgICAgICAgICAg ICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAobG9uZykgQ1dfU1BELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IChsb25nKSAiKHVua25vd24pIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Cisj ZW5kaWYgLyogSzk1RyAqLworI2VuZGlmIC8qIEtVSSAqLworICAgICAgICAgICAgfQorICAgICAg ICB9CisgICAgICAgIG1vdmUoQ1dfUEFSLDE0KTsKKyAgICAgICAgcHJpbnR3KCJQYXJpdHk6ICVz IixmdHAgPyAibm9uZSIgOiBwYXJuYW0oKGNoYXIpcGFyaXR5KSk7CisjaWZkZWYgS1VJCisjaWZu ZGVmIEs5NUcKKyAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCisgICAg ICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19QQVIsCisgICAgICAgICAgICAgICAgICAgICAg IChsb25nKSBwYXJuYW0oKGNoYXIpcGFyaXR5KQorICAgICAgICAgICAgICAgICAgICAgICApOwor I2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBLVUkgKi8KKyNpZmRlZiBDS19USU1FUlMKKyAg ICAgICAgaWYgKC8qIHJ0dGZsZyAmJiAqLyBwcm90b2NvbCA9PSBQUk9UT19LKSB7CisgICAgICAg ICAgICBtb3ZlKENXX1RNTywgOSk7IHByaW50dygiUlRUL1RpbWVvdXQ6Iik7IH0KKyNlbmRpZiAv KiBDS19USU1FUlMgKi8KKyAgICAgICAgbW92ZShDV19UWVAsMTEpOyBwcmludHcoIkZpbGUgVHlw ZToiKTsKKyAgICAgICAgbW92ZShDV19TSVosMTEpOyBwcmludHcoIkZpbGUgU2l6ZToiKTsKKyAg ICAgICAgbW92ZShDV19QQ0QsIDgpOworICAgICAgICBjbHJ0b2VvbCgpOworICAgICAgICBwY3Rs YmwgPSAod2hhdCAmIFdfU0VORCk7CisgICAgICAgIHByaW50dygiJXM6IiwgcGN0bGJsID8gIlBl cmNlbnQgRG9uZSIgOiAiQnl0ZXMgU28gRmFyIik7CisKKyNpZmRlZiBYWVpfSU5URVJOQUwKKyAg ICAgICAgbW92ZShDV19CQVIsIDEpOworICAgICAgICBwcmludHcoIiUxMHMgUHJvdG9jb2w6Iiwg ZnRwID8gIkZUUCIgOiBwdGFiW3Byb3RvY29sXS5wX25hbWUpOworI2VuZGlmIC8qIFhZWl9JTlRF Uk5BTCAqLworI2lmZGVmIENLX1BDVF9CQVIKKyAgICAgICAgaWYgKHRoZXJtb21ldGVyKSB7Cisg ICAgICAgICAgICBvbGRwY3QgPSBwY3QgPSAwOworICAgICAgICAgICAgbW92ZShDV19CQVIsMjIp OworICAgICAgICAgICAgcHJpbnR3KCIgICAgLi4uMTAuLi4yMC4uLjMwLi4uNDAuLi41MC4uLjYw Li4uNzAuLi44MC4uLjkwLi4xMDAiKTsKKyAgICAgICAgICAgIG1vdmUoQ1dfQkFSLDIyKzU2KTsK KyAgICAgICAgfQorI2VuZGlmIC8qIENLX1BDVF9CQVIgKi8KKyAgICAgICAgbW92ZShDV19UUiwg IDEpOyBwcmludHcoIkVzdGltYXRlZCBUaW1lIExlZnQ6Iik7CisgICAgICAgIG1vdmUoQ1dfQ1As ICAyKTsgcHJpbnR3KCJUcmFuc2ZlciBSYXRlLCBDUFM6Iik7CisgICAgICAgIG1vdmUoQ1dfV1Ms ICA4KTsgcHJpbnR3KCJXaW5kb3cgU2xvdHM6JXMiLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoKHByb3RvY29sID09IFBST1RPX0spICYmICFmdHApID8KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIiIgOiAiIE4vQSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKTsKKyAgICAgICAgbW92ZShDV19QVCwgIDkpOyBwcmludHcoIlBhY2tldCBUeXBlOiIp OworICAgICAgICBpZiAoZnRwIHx8IHByb3RvY29sICE9IFBST1RPX0spIHsKKwkgICAgbW92ZShD V19QVCwyMik7CisgICAgICAgICAgICBwcmludHcoIiVzIiwgIk4vQSIpOworICAgICAgICAgICAg bW92ZShDV19QQywgIDExKTsgcHJpbnR3KCJJL08gQ291bnQ6Iik7CisgICAgICAgICAgICBtb3Zl KENXX1BMLCAgMTApOyBwcmludHcoIkkvTyBMZW5ndGg6Iik7CisgICAgICAgIH0gZWxzZSB7Cisg ICAgICAgICAgICBtb3ZlKENXX1BDLCAgOCk7IHByaW50dygiUGFja2V0IENvdW50OiIpOworICAg ICAgICAgICAgbW92ZShDV19QTCwgIDcpOyBwcmludHcoIlBhY2tldCBMZW5ndGg6Iik7CisgICAg ICAgIH0KKyNpZm5kZWYgQ09NTUVOVAorICAgICAgICBtb3ZlKENXX1BSLCAgOSk7IHByaW50dygi RXJyb3IgQ291bnQ6Iik7CisjZWxzZQorICAgICAgICBtb3ZlKENXX1BSLCAgMik7IHByaW50dygi UGFja2V0IFJldHJ5IENvdW50OiIpOworI2VuZGlmCisjaWZkZWYgQ09NTUVOVAorICAgICAgICBt b3ZlKENXX1BCLCAgMik7IHByaW50dygiUGFja2V0IEJsb2NrIENoZWNrOiIpOworI2VuZGlmIC8q IENPTU1FTlQgKi8KKyAgICAgICAgbW92ZShDV19FUlIsMTApOyBwcmludHcoIkxhc3QgRXJyb3I6 Iik7CisgICAgICAgIG1vdmUoQ1dfTVNHLCA4KTsgcHJpbnR3KCJMYXN0IE1lc3NhZ2U6Iik7CisJ aWYgKHhmcm1zZykgeworCSAgICBtb3ZlKENXX01TRywgMjIpOyBwcmludHcoIiVzIix4ZnJtc2cp OworCSAgICBtYWtlc3RyKCZ4ZnJtc2csTlVMTCk7CisJfQorICAgICAgICBtb3ZlKENXX0lOVCwg MCk7CisgICAgICAgIGlmICgheGZyaW50KSB7CisgICAgICAgICAgICBwcmludHcoIihUcmFuc2Zl ciBpbnRlcnJ1cHRpb24gaXMgZGlzYWJsZWQpIik7CisgICAgICAgIH0gZWxzZSB7CisjaWZkZWYg Q0tfTkVFRF9TSUcKKyAgICAgICAgICAgIHByaW50dygKKyI8JXM+WCB0byBjYW5jZWwgZmlsZSwg PCVzPlogdG8gY2FuY2VsIGdyb3VwLCA8JXM+PENSPiB0byByZXNlbmQgbGFzdCBwYWNrZXQiLAor ICAgICAgICAgICAgICAgICAgIGRiY2hyKGVzY2FwZSksIGRiY2hyKGVzY2FwZSksIGRiY2hyKGVz Y2FwZSkKKyAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgbW92ZShDV19JTlQgKyAx LCAwKTsKKyAgICAgICAgICAgIHByaW50dygKKyI8JXM+RSB0byBzZW5kIEVycm9yIHBhY2tldCwg XkMgdG8gcXVpdCBpbW1lZGlhdGVseSwgPCVzPkwgdG8gcmVmcmVzaCBzY3JlZW4uIiwKKyAgICAg ICAgICAgICAgICAgICBkYmNocihlc2NhcGUpLCBkYmNocihlc2NhcGUpCisgICAgICAgICAgICAg ICAgICAgKTsKKyNlbHNlIC8qICFDS19ORUVEX1NJRyAqLworICAgICAgICAgICAgbW92ZShDV19J TlQsIDApOworI2lmZGVmIE9TMgorICAgICAgICAgICAgaWYgKHByb3RvY29sID09IFBST1RPX0sp IHsKKyAgICAgICAgICAgICAgICBwcmludHcoCisiWCB0byBjYW5jZWwgZmlsZSwgWiB0byBjYW5j ZWwgZ3JvdXAsIDxFbnRlcj4gdG8gcmVzZW5kIGxhc3QgcGFja2V0LCIKKyAgICAgICAgICAgICAg ICAgICAgICAgKTsKKyAgICAgICAgICAgIH0KKyNlbHNlIC8qICFPUzIgKi8KKyNpZmRlZiBWTVMg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJbiBWTVMgYXZvaWQgYm90dG9tIGxpbmUg Ki8KKyAgICAgICAgICAgIHByaW50dygKKyJYOiBDYW5jZWwgdGhpcyBmaWxlOyBFOiBDYW5jZWwg dHJhbnNmZXI7IF5DOiBRdWl0IG5vdzsgXlc6IFJlZnJlc2ggc2NyZWVuLiIKKyAgICAgICAgICAg ICAgICAgICApOworI2Vsc2UKKyAgICAgICAgICAgIHByaW50dygKKyJYIHRvIGNhbmNlbCBmaWxl LCBaIHRvIGNhbmNlbCBncm91cCwgPENSPiB0byByZXNlbmQgbGFzdCBwYWNrZXQsIgorICAgICAg ICAgICAgICAgICAgICk7CisjZW5kaWYgLyogVk1TICovCisjZW5kaWYgLyogT1MyICovCisKKyNp Zm5kZWYgVk1TCisgICAgICAgICAgICBtb3ZlKENXX0lOVCArIDEsIDApOworICAgICAgICAgICAg aWYgKHByb3RvY29sID09IFBST1RPX0spIHsKKyAgICAgICAgICAgICAgICBwcmludHcoCisiRSB0 byBzZW5kIEVycm9yIHBhY2tldCwgXkMgdG8gcXVpdCBpbW1lZGlhdGVseSwgXkwgdG8gcmVmcmVz aCBzY3JlZW4uIgorICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgfSBlbHNl IHsKKyAgICAgICAgICAgICAgICBwcmludHcoIl5DIHRvIGNhbmNlbCBmaWxlIHRyYW5zZmVyLiIp OworICAgICAgICAgICAgfQorI2VuZGlmIC8qIFZNUyAqLworI2VuZGlmIC8qIENLX05FRURfU0lH ICovCisgICAgICAgIH0KKyAgICAgICAgcmVmcmVzaCgpOworICAgICAgICBjZW5kdyA9IDA7Cisg ICAgfQorICAgIGRlYnVnKEYxMDEsIlNDUkVFTkMgc3dpdGNoIiwiIixmKTsKKyAgICBkZWJ1ZyhG MDAwLCJTQ1JFRU5DIGMiLCIiLGMpOworICAgIGRlYnVnKEYxMDEsIlNDUkVFTkMgbiIsIiIsbik7 CisKKyAgICBsZW4gPSBzdHJsZW4ocyk7ICAgICAgICAgICAgICAgICAgICAvKiBMZW5ndGggb2Yg YXJndW1lbnQgc3RyaW5nICovCisgICAgc3dpdGNoIChmKSB7ICAgICAgICAgICAgICAgICAgICAg ICAgLyogSGFuZGxlIG91ciBmdW5jdGlvbiBjb2RlICovCisgICAgICBjYXNlIFNDUl9GTjogICAg ICAgICAgICAgICAgICAgICAgLyogRmlsZW5hbWUgKi8KKyAgICAgICAgb2xkcGN0ID0gcGN0ID0g MEw7ICAgICAgICAgICAgICAvKiBSZXNldCBwZXJjZW50cyAqLworI2lmZGVmIEdGVElNRVIKKyAg ICAgICAgZ3R2ID0gKENLRkxPQVQpIC0xLjA7CisgICAgICAgIC8qIG9sZGd0diA9IChDS0ZMT0FU KSAtMS4wOyAqLworI2Vsc2UKKyAgICAgICAgZ3R2ID0gLTFMOworICAgICAgICAvKiBvbGRndHYg PSAtMUw7ICovCisjZW5kaWYgLyogR0ZUSU1FUiAqLworICAgICAgICBvbGR3aW4gPSAtMTsKKyAg ICAgICAgZnNpeiA9IChDS19PRkZfVCktMTsJCS8qIEludmFsaWRhdGUgcHJldmlvdXMgZmlsZSBz aXplICovCisgICAgICAgIG1vdmUoQ1dfUENELDIyKTsgICAgICAgICAgICAgICAgLyogRXJhc2Ug cGVyY2VudCBkb25lIGZyb20gbGFzdCB0aW1lICovCisjaWZkZWYgS1VJCisjaWZuZGVmIEs5NUcK KyAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfUENE LCAobG9uZykgMCApOworICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIs IChsb25nKSBDV19GRkMsIChsb25nKSAwICk7CisjZW5kaWYgLyogSzk1RyAqLworI2VuZGlmIC8q IEtVSSAqLworICAgICAgICBjbHJ0b2VvbCgpOworICAgICAgICBtb3ZlKENXX1NJWiwyMik7ICAg ICAgICAgICAgICAgIC8qIEVyYXNlIGZpbGUgc2l6ZSBmcm9tIGxhc3QgdGltZSAqLworI2lmZGVm IEtVSQorI2lmbmRlZiBLOTVHCisgICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFO U0ZFUiwgKGxvbmcpIENXX1NJWiwgKGxvbmcpIDAgKTsKKyNlbmRpZiAvKiBLOTVHICovCisjZW5k aWYgLyogS1VJICovCisgICAgICAgIGNscnRvZW9sKCk7CisgICAgICAgIG1vdmUoQ1dfRVJSLDIy KTsgICAgICAgICAgICAgICAgLyogQW5kIGxhc3QgZXJyb3IgbWVzc2FnZSAqLworI2lmZGVmIEtV SQorI2lmbmRlZiBLOTVHCisgICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZF UiwgKGxvbmcpIENXX0VSUiwgKGxvbmcpICIiICk7CisjZW5kaWYgLyogSzk1RyAqLworI2VuZGlm IC8qIEtVSSAqLworICAgICAgICBjbHJ0b2VvbCgpOworI2lmZGVmIENPTU1FTlQKKyNpZmRlZiBT VFJFQU1JTkcKKyAgICAgICAgaWYgKHByb3RvY29sID09IFBST1RPX0sgJiYgc3RyZWFtb2spIHsK KyAgICAgICAgICAgIG1vdmUoQ1dfQkFSLCAxKTsKKyNpZmRlZiBYWVpfSU5URVJOQUwKKyAgICAg ICAgICAgIHByaW50dygiICAgS2VybWl0IFNUUkVBTUlORzoiKTsKKyNlbHNlCisgICAgICAgICAg ICBwcmludHcoIiAgICAgICAgICBTVFJFQU1JTkc6Iik7CisjZW5kaWYgLyogWFlaX0lOVEVSTkFM ICovCisgICAgICAgIH0KKyNlbmRpZiAvKiBTVFJFQU1JTkcgKi8KKyNlbmRpZiAvKiBDT01NRU5U ICovCisKKyAgICAgICAgaWYgKHdoYXQgJiBXX1NFTkQpIHsJCS8qIElmIHdlJ3JlIHNlbmRpbmcu Li4gKi8KKyNpZmRlZiBORVdGVFAKKwkgICAgaWYgKHdoYXQgJiBXX0ZUUCkgewkJLyogRlRQICov CisgICAgICAgICAgICAgICAgbW92ZShDV19OQU0sMTApOworICAgICAgICAgICAgICAgIHByaW50 dygiICAgRlRQIFBVVDoiKTsKKwkgICAgfSBlbHNlCisjZW5kaWYgLyogTkVXRlRQICovCisjaWZk ZWYgQ0tfUkVTRU5ECisgICAgICAgICAgICBzd2l0Y2ggKHNlbmRtb2RlKSB7CQkvKiBLZXJtaXQg Ki8KKyAgICAgICAgICAgICAgY2FzZSBTTV9SRVNFTkQ6CisgICAgICAgICAgICAgICAgbW92ZShD V19OQU0sMTApOworICAgICAgICAgICAgICAgIHByaW50dygiIFJFU0VORElORzoiKTsKKyAgICAg ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg ICBtb3ZlKENXX05BTSwxMCk7CisgICAgICAgICAgICAgICAgcHJpbnR3KCIgICBTRU5ESU5HOiIp OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorI2Vsc2UKKyAgICAgICAg ICAgIG1vdmUoQ1dfTkFNLDEwKTsKKyAgICAgICAgICAgIHByaW50dygiICAgU0VORElORzoiKTsK KyNlbmRpZiAvKiBDS19SRVNFTkQgKi8KKworICAgICAgICB9IGVsc2UgaWYgKHdoYXQgJiBXX1JF Q1YpIHsJLyogSWYgd2UncmUgcmVjZWl2aW5nLi4uICovCisjaWZkZWYgTkVXRlRQCisJICAgIGlm ICh3aGF0ICYgV19GVFApIHsJCS8qIEZUUCAqLworICAgICAgICAgICAgICAgIG1vdmUoQ1dfTkFN LDEwKTsKKyAgICAgICAgICAgICAgICBwcmludHcoIiAgIEZUUCBHRVQ6Iik7CisJICAgIH0gZWxz ZSB7CisjZW5kaWYgLyogTkVXRlRQICovCisJCW1vdmUoQ1dfTkFNLDEwKTsKKwkJcHJpbnR3KCIg UkVDRUlWSU5HOiIpOworI2lmZGVmIE5FV0ZUUAorCSAgICB9CisgICAgICAgIH0gZWxzZSBpZiAo d2hhdCA9PSAoV19GVFB8V19GVF9ERUxFKSkgeworCQltb3ZlKENXX05BTSwxMCk7CisJCXByaW50 dygiRlRQIERFTEVURToiKTsKKyNlbmRpZiAvKiBORVdGVFAgKi8KKyAgICAgICAgfSBlbHNlIHsg ICAgICAgICAgICAgICAgICAgICAgICAvKiBJZiB3ZSBkb24ndCBrbm93Li4uICovCisgICAgICAg ICAgICBtb3ZlKENXX05BTSwxMCk7ICAgICAgICAgICAgLyogKHNob3VsZCBuZXZlciBzZWUgdGhp cykgKi8KKyAgICAgICAgICAgIHByaW50dygiIEZpbGUgTmFtZToiKTsKKyAgICAgICAgfQorICAg ICAgICBtb3ZlKENXX05BTSwyMik7ICAgICAgICAgICAgICAgIC8qIERpc3BsYXkgdGhlIGZpbGVu YW1lICovCisgICAgICAgIGlmIChsZW4gPiA1NykgeworICAgICAgICAgICAgcHJpbnR3KCIlLjU1 cy4uIixzKTsKKyAgICAgICAgICAgIGxlbiA9IDU3OworICAgICAgICB9IGVsc2UgcHJpbnR3KCIl cyIscyk7CisjaWZkZWYgS1VJCisjaWZuZGVmIEs5NUcKKyAgICAgICAgS3VpU2V0UHJvcGVydHko IEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfTkFNLCAobG9uZykgcyApOworI2VuZGlmIC8q IEs5NUcgKi8KKyNlbmRpZiAvKiBLVUkgKi8KKyAgICAgICAgcSA9IGxlbjsgICAgICAgICAgICAg ICAgICAgICAgICAvKiBSZW1lbWJlciBuYW1lIGxlbmd0aCBmb3IgbGF0ZXIgKi8KKyAgICAgICAg Y2xydG9lb2woKTsKKyAgICAgICAgc2NyZnQoKTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBE aXNwbGF5IGZpbGUgdHlwZSAoY2FuIGNoYW5nZSkgKi8KKyAgICAgICAgcmVmcmVzaCgpOworI2lm ZGVmIE9TMgorICAgICAgICBTYXZlQ21kTW9kZSgwLCAwKTsKKyNlbmRpZiAvKiBPUzIgKi8KKyAg ICAgICAgcmV0dXJuOworCisgICAgICBjYXNlIFNDUl9BTjogICAgICAgICAgICAgICAgICAgICAg LyogRmlsZSBhcy1uYW1lICovCisgICAgICAgIGlmIChxICsgbGVuICsgNCA8IDU4KSB7ICAgICAg ICAgLyogV2lsbCBmaXQgKi8KKyAgICAgICAgICAgIG1vdmUoQ1dfTkFNLCAyMiArIHEpOworICAg ICAgICAgICAgcHJpbnR3KCIgPT4gJXMiLHMpOworI2lmZGVmIEtVSQorI2lmbmRlZiBLOTVHCisg ICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19O QU0sIChsb25nKSBzICk7CisjZW5kaWYgLyogSzk1RyAqLworI2VuZGlmIC8qIEtVSSAqLworICAg ICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRvbyBsb25nICovCisgICAg ICAgICAgICBtb3ZlKENXX05BTSwgMjIpOyAgICAgICAgICAgLyogT3ZlcndyaXRlIHByZXZpb3Vz IG5hbWUgKi8KKyAgICAgICAgICAgIHEgPSAwOworICAgICAgICAgICAgaWYgKGxlbiArIDQgPiA1 NykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHdnMTUgKi8KKyAgICAgICAg ICAgICAgICBwcmludHcoIiA9PiAlLjUxcy4uIixzKTsgICAgICAgICAgICAgICAgICAgICAgICAv KiB3ZzE1ICovCisgICAgICAgICAgICAgICAgbGVuID0gNTM7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogd2cxNSAqLworICAgICAgICAgICAgfSBlbHNlIHByaW50dygi ID0+ICVzIixzKTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHdnMTUgKi8KKyNpZmRlZiBL VUkKKyNpZm5kZWYgSzk1RworICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RS QU5TRkVSLCAobG9uZykgQ1dfTkFNLCAobG9uZykgcyAgKTsKKyNlbmRpZiAvKiBLOTVHICovCisj ZW5kaWYgLyogS1VJICovCisgICAgICAgIH0KKyAgICAgICAgcSArPSBsZW4gKyA0OyAgICAgICAg ICAgICAgICAgICAvKiBSZW1lbWJlciBob3Jpem9udGFsIHBvc2l0aW9uICovCisgICAgICAgIGNs cnRvZW9sKCk7CisgICAgICAgIHJlZnJlc2goKTsKKyNpZmRlZiBPUzIKKyAgICAgICAgU2F2ZUNt ZE1vZGUoMCwgMCk7CisjZW5kaWYgLyogT1MyICovCisgICAgICAgIHJldHVybjsKKworICAgICAg Y2FzZSBTQ1JfRlM6ICAgICAgICAgICAgICAgICAgICAgIC8qIEZpbGUgc2l6ZSAqLworICAgICAg ICBmc2l6ID0gbjsKKyAgICAgICAgbW92ZShDV19TSVosMjIpOworICAgICAgICBpZiAoZnNpeiA+ IChDS19PRkZfVCktMSkgeworI2lmZGVmIEtVSQorI2lmbmRlZiBLOTVHCisgICAgICAgICAgICBL dWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19TSVosIChsb25nKSBu ICk7CisjZW5kaWYgLyogSzk1RyAqLworI2VuZGlmIC8qIEtVSSAqLworICAgICAgICAgICAgcHJp bnR3KCIlcyIsY2tmc3RvYShuKSk7CisgICAgICAgIH0KKwlpZiAoZnNpeiA9PSAtMkwpIHsKKwkg ICAgcHJpbnR3KCJQT1NTSUJMWSBFWENFRURTIExPQ0FMIEZJTEUgU0laRSBMSU1JVCIpOworCX0K KyAgICAgICAgY2xydG9lb2woKTsKKyNpZmRlZiBDT01NRU5UCisgICAgICAgIG1vdmUoQ1dfUENE LCA4KTsKKyAgICAgICAgaWYgKGZzaXogPiAoQ0tfT0ZGX1QpLTEpIHsJLyogUHV0IHVwIHBlcmNl bnQgbGFiZWwgKi8KKyAgICAgICAgICAgIHBjdGxibCA9IDE7CisJICAgIGNscnRvZW9sKCk7Cisg ICAgICAgICAgICBwcmludHcoIlBlcmNlbnQgRG9uZToiKTsKKyAgICAgICAgfQorI2Vsc2UKKwlt b3ZlKENXX1BDRCwgOCk7CisJY2xydG9lb2woKTsKKyAgICAgICAgaWYgKGZzaXogPiAoQ0tfT0ZG X1QpLTEpIHsJLyogUHV0IHVwIHBlcmNlbnQgbGFiZWwgKi8KKyAgICAgICAgICAgIHBjdGxibCA9 IDE7CisgICAgICAgICAgICBwcmludHcoIlBlcmNlbnQgRG9uZToiKTsKKyAgICAgICAgfSBlbHNl IHsKKyAgICAgICAgICAgIHBjdGxibCA9IDA7CisgICAgICAgICAgICBwcmludHcoIkJ5dGVzIFNv IEZhcjoiKTsKKwl9CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAgICBjbHJ0b2VvbCgpOwor ICAgICAgICBzY3JmdCgpOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZpbGUgdHlwZSAqLwor ICAgICAgICByZWZyZXNoKCk7CisjaWZkZWYgT1MyCisgICAgICAgIFNhdmVDbWRNb2RlKDAsIDAp OworI2VuZGlmIC8qIE9TMiAqLworICAgICAgICByZXR1cm47CisKKyAgICAgIGNhc2UgU0NSX1BU OiAgICAgICAgICAgICAgICAgICAgICAvKiBQYWNrZXQgdHlwZSBvciBwc2V1ZG90eXBlICovCisg ICAgICAgIGlmIChzcGFja2V0cyA8IDUpIHsKKyAgICAgICAgICAgIGV4dGVybiBpbnQgc3lzaW5k ZXg7CisgICAgICAgICAgICBleHRlcm4gc3RydWN0IHN5c2RhdGEgc3lzaWRsaXN0W107CisgICAg ICAgICAgICAvKiBUaGluZ3MgdGhhdCB3b24ndCBjaGFuZ2UgYWZ0ZXIgdGhlIDR0aCBwYWNrZXQg Ki8KKyAgICAgICAgICAgIG1vdmUoQ1dfUEFSLDIyKTsKKyAgICAgICAgICAgIHByaW50dygiJXMi LHBhcm5hbSgoY2hhcilwYXJpdHkpKTsKKyNpZmRlZiBLVUkKKyNpZm5kZWYgSzk1RworICAgICAg ICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgKGxvbmcpIENXX1BBUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChs b25nKSBwYXJuYW0oKGNoYXIpcGFyaXR5KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsK KyNlbmRpZiAvKiBLOTVHICovCisjZW5kaWYgLyogS1VJICovCisgICAgICAgICAgICBjbHJ0b2Vv bCgpOworI2lmZGVmIENPTU1FTlQKKyAgICAgICAgICAgIG1vdmUoQ1dfUEIsIDIyKTsgICAgICAg ICAgICAvKiBCbG9jayBjaGVjayBvbiB0aGlzIHBhY2tldCAqLworICAgICAgICAgICAgaWYgKGJj dHUgPT0gNCkKKyAgICAgICAgICAgICAgcHJpbnR3KCJCIik7CisgICAgICAgICAgICBlbHNlCisg ICAgICAgICAgICAgIHByaW50dygiJWQiLGJjdHUpOworICAgICAgICAgICAgY2xydG9lb2woKTsK KyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgICAgICAgICBpZiAoCisjaWZkZWYgTkVXRlRQCisJ CShmdHAgJiYgKHNwYWNrZXRzID09IDEgfHwgcnBhY2tldHMgPT0gMSkpIHx8CisjZW5kaWYgLyog TkVXRlRQICovCisJCXNwYWNrZXRzID09IDQKKwkJKSB7CisgICAgICAgICAgICAgICAgbW92ZShD V19MSU4sOCk7CisgICAgICAgICAgICAgICAgaWYgKAorI2lmZGVmIE5FV0ZUUAorCQkgICAgZnRw IHx8CisjZW5kaWYgLyogTkVXRlRQICovCisJCSAgICAoKHByb3RvY29sID09IFBST1RPX0spICYm IChzeXNpbmRleCA+IC0xKSkKKwkJICAgICkgeworICAgICAgICAgICAgICAgICAgICBpZiAobmV0 KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtb3ZlKENXX0xJTiw4KTsKKyAgICAgICAgICAg ICAgICAgICAgICAgIHByaW50dygiTmV0d29yayBIb3N0OiAlcyAoJXMpIiwKKyNpZmRlZiBORVdG VFAKKwkJCSAgICAgICBmdHAgPyAoZnRwX2hvc3QgPyBmdHBfaG9zdCA6ICIiKSA6CisjZW5kaWYg LyogTkVXRlRQICovCisJCQkgICAgICAgdHRuYW1lLAorI2lmZGVmIE5FV0ZUUAorCQkJICAgICAg IGZ0cCA/IGZ0cF9zcnZ0eXAgOgorI2VuZGlmIC8qIE5FV0ZUUCAqLworCQkJICAgICAgIHN5c2lk bGlzdFtzeXNpbmRleF0uc2lkX25hbWUKKwkJCSAgICAgICApOworICAgICAgICAgICAgICAgICAg ICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgbW92ZShDV19MSU4sMCk7CisgICAg ICAgICAgICAgICAgICAgICAgICBwcmludHcoIkNvbW11bmljYXRpb24gRGV2aWNlOiAlcyAocmVt b3RlIGhvc3QgaXMgJXMpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHRuYW1lLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNpZGxpc3Rbc3lzaW5kZXhdLnNpZF9uYW1l CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgICAgICAgY2xydG9lb2woKTsKKyAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICB9CisgICAgICAgIH0KKyNpZmRlZiBDS19USU1FUlMKKyAgICAgICAgaWYgKC8qIHJ0 dGZsZyAmJiAqLyBwcm90b2NvbCA9PSBQUk9UT19LKSB7CisgICAgICAgICAgICBsb25nIHh4Owor ICAgICAgICAgICAgaWYgKAorI2lmZGVmIFNUUkVBTUlORworICAgICAgICAgICAgICAgIHN0cmVh bWluZyAmJiBvbGR3aW4gIT0gLTIKKyNlbHNlCisgICAgICAgICAgICAgICAgMAorI2VuZGlmIC8q IFNUUkVBTUlORyAqLworICAgICAgICAgICAgICAgICkgeworICAgICAgICAgICAgICAgIG1vdmUo Q1dfVE1PLCAyMik7CisgICAgICAgICAgICAgICAgcHJpbnR3KCIwMCAvIDAwIik7CisgICAgICAg ICAgICAgICAgY2xydG9lb2woKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg ICAgeHggPSAocnR0ZGVsYXkgKyA1MDApIC8gMTAwMDsKKyAgICAgICAgICAgICAgICBpZiAoeHgg IT0gb2xkcnR0IHx8IHJjdnRpbW8gIT0gb2xkdGltKSB7CisgICAgICAgICAgICAgICAgICAgIG1v dmUoQ1dfVE1PLCAyMik7CisgICAgICAgICAgICAgICAgICAgIHByaW50dygiJTAybGQgLyAlMDJk IiwgeHgsIHJjdnRpbW8pOworICAgICAgICAgICAgICAgICAgICBvbGRydHQgPSB4eDsKKyAgICAg ICAgICAgICAgICAgICAgb2xkdGltID0gcmN2dGltbzsKKyAgICAgICAgICAgICAgICAgICAgY2xy dG9lb2woKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyNl bmRpZiAvKiBDS19USU1FUlMgKi8KKworICAgICAgICB4ID0gKHdoYXQgJiBXX1JFQ1YpID8gICAg ICAgICAgLyogUGFja2V0IGxlbmd0aCAqLworICAgICAgICAgIHJwa3RsKyhwcm90b2NvbD09UFJP VE9fSz8xOjApIDoKKyAgICAgICAgICAgIHNwa3RsOworICAgICAgICBpZiAoeCAhPSBvbGRsZW4p IHsgICAgICAgICAgICAgIC8qIEJ1dCBvbmx5IGlmIGl0IGNoYW5nZWQuICovCisgICAgICAgICAg ICBtb3ZlKENXX1BMLCAyMik7CisgICAgICAgICAgICBwcmludHcoIiVkIix4KTsKKyNpZmRlZiBL VUkKKyNpZm5kZWYgSzk1RworICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RS QU5TRkVSLCAobG9uZykgQ1dfUEwsIChsb25nKSB4ICk7CisjZW5kaWYgLyogSzk1RyAqLworI2Vu ZGlmIC8qIEtVSSAqLworICAgICAgICAgICAgY2xydG9lb2woKTsKKyAgICAgICAgICAgIG9sZGxl biA9IHg7CisgICAgICAgIH0KKyAgICAgICAgbW92ZShDV19QQywgMjIpOyAgICAgICAgICAgICAg ICAvKiBQYWNrZXQgY291bnQgKGFsd2F5cykuICovCisKKyAgICAgICAgcHJpbnR3KCIlZCIsICh3 aGF0ICYgV19SRUNWKSA/IHJwYWNrZXRzIDogc3BhY2tldHMpOworI2lmZGVmIEtVSQorI2lmbmRl ZiBLOTVHCisgICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcp IENXX1BDLCAobG9uZykgc3BhY2tldHMgKTsKKyNlbmRpZiAvKiBLOTVHICovCisjZW5kaWYgLyog S1VJICovCisgICAgICAgIGNscnRvZW9sKCk7CisKKyAgICAgICAgaWYgKHByb3RvY29sID09IFBS T1RPX0sgJiYgIWZ0cCkgeyAvKiBXaW5kb3cgc2xvdHMgKi8KKyAgICAgICAgICAgIGNoYXIgd3Nb MTZdOworICAgICAgICAgICAgaW50IGZsYWc7CisgICAgICAgICAgICBmbGFnID0gMDsKKyNpZmRl ZiBTVFJFQU1JTkcKKyAgICAgICAgICAgIGlmIChzdHJlYW1pbmcpIHsKKyAgICAgICAgICAgICAg ICBpZiAob2xkd2luICE9IC0yKSB7CisgICAgICAgICAgICAgICAgICAgIHNwcmludGYod3MsIlNU UkVBTUlORyIpOworICAgICAgICAgICAgICAgICAgICBmbGFnID0gMTsKKyAgICAgICAgICAgICAg ICAgICAgb2xkd2luID0gLTI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNl CisjZW5kaWYgLyogU1RSRUFNSU5HICovCisgICAgICAgICAgICAgIGlmICh3Y3VyICE9IG9sZHdp bikgeworICAgICAgICAgICAgICAgICAgc3ByaW50Zih3cywgIiVkIG9mICVkIiwgd2N1ciA8IDEg PyAxIDogd2N1ciwgd3Nsb3RuKTsKKyAgICAgICAgICAgICAgICAgIGZsYWcgPSAxOworICAgICAg ICAgICAgICAgICAgb2xkd2luID0gd2N1cjsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAg aWYgKGZsYWcpIHsKKyAgICAgICAgICAgICAgICBtb3ZlKENXX1dTLCAyMik7CisgICAgICAgICAg ICAgICAgcHJpbnR3KCIlcyIsIHdzKTsKKyAgICAgICAgICAgICAgICBjbHJ0b2VvbCgpOworI2lm ZGVmIEtVSQorI2lmbmRlZiBLOTVHCisgICAgICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtV SV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfV1MsIChsb25nKSB3cyApOworI2VuZGlmIC8qIEs5 NUcgKi8KKyNlbmRpZiAvKiBLVUkgKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg ICBlcnJvcnMgPSByZXRyYW5zICsgY3J1bmNoZWQgKyB0aW1lb3V0czsKKyAgICAgICAgaWYgKGVy cm9ycyAhPSBvbGR0cnkpIHsgICAgICAgICAvKiBSZXRyeSBjb3VudCwgaWYgY2hhbmdlZCAqLwor ICAgICAgICAgICAgbW92ZShDV19QUiwgMjIpOworICAgICAgICAgICAgcHJpbnR3KCIlZCIsZXJy b3JzKTsKKyNpZmRlZiBLVUkKKyNpZm5kZWYgSzk1RworICAgICAgICAgICAgS3VpU2V0UHJvcGVy dHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfUFIsIChsb25nKSBlcnJvcnMgKTsKKyNl bmRpZiAvKiBLOTVHICovCisjZW5kaWYgLyogS1VJICovCisgICAgICAgICAgICBjbHJ0b2VvbCgp OworICAgICAgICAgICAgb2xkdHJ5ID0gZXJyb3JzOworICAgICAgICB9CisJLyogU2VuZGVyJ3Mg cGFja2V0IHR5cGUgKi8KKyAgICAgICAgaWYgKCFmdHAgJiYgKGMgIT0gb2xkdHlwICYmIGMgIT0g J1knICYmIGMgIT0gJ04nKSkgeworICAgICAgICAgICAgY2hhciB0eXBlWzJdOworICAgICAgICAg ICAgc3ByaW50Zih0eXBlLCAiJWMiLGMpOworICAgICAgICAgICAgbW92ZShDV19QVCwyMik7Cisg ICAgICAgICAgICBwcmludHcoIiVzIiwgdHlwZSk7CisjaWZkZWYgS1VJCisjaWZuZGVmIEs5NUcK KyAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENX X1BULCAobG9uZykgdHlwZSApOworI2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBLVUkgKi8K KyAgICAgICAgICAgIGNscnRvZW9sKCk7CisgICAgICAgICAgICBvbGR0eXAgPSBjOworICAgICAg ICB9CisgICAgICAgIHN3aXRjaCAoYykgeyAgICAgICAgICAgICAgICAgICAgLyogTm93IGhhbmRs ZSBzcGVjaWZpYyBwYWNrZXQgdHlwZXMgKi8KKyAgICAgICAgICBjYXNlICdTJzogICAgICAgICAg ICAgICAgICAgICAvKiBCZWdpbm5pbmcgb2YgdHJhbnNmZXIgKi8KKyAgICAgICAgICAgIGZjbnQg PSBmYnl0ID0gMEw7ICAgICAgICAgICAvKiBDbGVhciBjb3VudGVycyAqLworI2lmZGVmIEdGVElN RVIKKyAgICAgICAgICAgIGd0diA9IC0xLjA7CisjZWxzZSAvKiBHRlRJTUVSICovCisgICAgICAg ICAgICBndHYgPSAtMUw7ICAgICAgICAgICAgICAgICAgLyogQW5kIG9sZC9uZXcgdGhpbmdzLi4u ICovCisjZW5kaWYgLyogR0ZUSU1FUiAqLworICAgICAgICAgICAgb2xkcGN0ID0gcGN0ID0gMEw7 CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgJ1onOiAgICAgICAgICAgICAg ICAgICAgIC8qIG9yIEVPRiAqLworICAgICAgICAgICAgZGVidWcoRjEwMSwic2NyZWVuYyBTQ1Jf UFQgWiBwa3RudW0iLCIiLG4pOworICAgICAgICAgICAgZGVidWcoRjEwMSwic2NyZWVuYyBTQ1Jf UFQgWiBvbGRwY3QiLCIiLG9sZHBjdCk7CisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJzY3JlZW5j IFNDUl9QVCBaIHBjdCIsIiIscGN0KTsKKyAgICAgICAgICBjYXNlICdEJzogICAgICAgICAgICAg ICAgICAgICAvKiBEYXRhIHBhY2tldCAqLworICAgICAgICAgICAgaWYgKGZzaXogPiAwTCkgeyAg ICAgICAgICAgIC8qIFNob3cgcGVyY2VudCBkb25lIGlmIGtub3duICovCisgICAgICAgICAgICAg ICAgb2xkcGN0ID0gcGN0OyAgICAgICAgICAgLyogUmVtZW1iZXIgcHJldmlvdXMgcGVyY2VudCAq LworICAgICAgICAgICAgICAgIGhvd2ZhciA9IGZmYzsKKyNpZmRlZiBDS19SRVNFTkQKKyAgICAg ICAgICAgICAgICBpZiAod2hhdCAmIFdfU0VORCkJLyogQWNjb3VudCBmb3IgUFNFTkQgb3IgUkVT RU5EICovCisgICAgICAgICAgICAgICAgICBob3dmYXIgKz0gc2VuZHN0YXJ0OworICAgICAgICAg ICAgICAgIGVsc2UgaWYgKHdoYXQgJiBXX1JFQ1YpCisgICAgICAgICAgICAgICAgICBob3dmYXIg Kz0gcnNfbGVuOworI2VuZGlmIC8qIENLX1JFU0VORCAqLworICAgICAgICAgICAgICAgIC8qIFBl cmNlbnQgZG9uZSwgdG8gYmUgZGlzcGxheWVkLi4uICovCisgICAgICAgICAgICAgICAgaWYgKGMg PT0gJ1onKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghZGlzY2FyZCAmJiAhY3hzZWVuICYm ICFjenNlZW4pIHBjdCA9IDEwMEw7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAg ICAgICAgICBwY3QgPSAoZnNpeiA+IDk5TCkgPyAoaG93ZmFyIC8gKGZzaXogLyAxMDBMKSkgOiAw TDsKKyAgICAgICAgICAgICAgICBpZiAocGN0ID4gMTAwTCB8fCAgICAgICAvKiBBbGxvdyBmb3Ig ZXhwYW5zaW9uIGFuZCAqLworICAgICAgICAgICAgICAgICAgIChvbGRwY3QgPT0gOTlMICYmIHBj dCA8IDBMKSkgLyogb3RoZXIgYm91bmRhcnkgY29uZGl0aW9ucyAqLworICAgICAgICAgICAgICAg ICAgcGN0ID0gMTAwTDsKKyAgICAgICAgICAgICAgICBpZiAocGN0ICE9IG9sZHBjdCkgICAgICAv KiBPbmx5IGRvIHRoaXMgMTAwIHRpbWVzIHBlciBmaWxlICovCisgICAgICAgICAgICAgICAgICB1 cGRwY3Qob2xkcGN0LCBwY3QpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg ICBtb3ZlKENXX1BDRCwyMik7CisgICAgICAgICAgICAgICAgcHJpbnR3KCIlcyIsIGNrZnN0b2Eo ZmZjKSk7CisgICAgICAgICAgICB9CisjaWZkZWYgS1VJCisjaWZuZGVmIEs5NUcKKyAgICAgICAg ICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfRkZDLCAobG9u ZykgaG93ZmFyKTsKKyNlbmRpZiAvKiBLOTVHICovCisjZW5kaWYgLyogS1VJICovCisgICAgICAg ICAgICBjcHMgPSBzaG9jcHMoKGludCkgcGN0LCBmc2l6LCBob3dmYXIpOworICAgICAgICAgICAg Lyogb2xkX3RyID0gc2hvZXRsKG9sZF90ciwgY3BzLCBmc2l6LCBob3dmYXIpOyAqLworICAgICAg ICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlICclJzogICAgICAgICAgICAgICAgICAgICAv KiBUaW1lb3V0cywgcmV0cmFuc21pc3Npb25zICovCisgICAgICAgICAgICBjcHMgPSBzaG9jcHMo KGludCkgcGN0LCBmc2l6LCBob3dmYXIpOworICAgICAgICAgICAgLyogb2xkX3RyID0gc2hvZXRs KG9sZF90ciwgY3BzLCBmc2l6LCBob3dmYXIpOyAqLworCisgICAgICAgICAgICBlcnJvcnMgPSBy ZXRyYW5zICsgY3J1bmNoZWQgKyB0aW1lb3V0czsKKyAgICAgICAgICAgIGlmIChlcnJvcnMgIT0g b2xkdHJ5KSB7ICAgICAvKiBFcnJvciBjb3VudCwgaWYgY2hhbmdlZCAqLworICAgICAgICAgICAg ICAgIG1vdmUoQ1dfUFIsIDIyKTsKKyAgICAgICAgICAgICAgICBwcmludHcoIiVkIixlcnJvcnMp OworICAgICAgICAgICAgICAgIGNscnRvZW9sKCk7CisjaWZkZWYgS1VJCisjaWZuZGVmIEs5NUcK KyAgICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgQ1dfUFIsIChsb25nKSBlcnJvcnMKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworI2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRp ZiAvKiBLVUkgKi8KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgb2xkdHJ5ID0g ZXJyb3JzOworICAgICAgICAgICAgICAgIGlmIChzKSBpZiAoKnMpIHsKKyAgICAgICAgICAgICAg ICAgICAgbW92ZShDV19FUlIsMjIpOworICAgICAgICAgICAgICAgICAgICBwcmludHcoIiVzIixz KTsKKyAgICAgICAgICAgICAgICAgICAgY2xydG9lb2woKTsKKyNpZmRlZiBLVUkKKyNpZm5kZWYg Szk1RworICAgICAgICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZF UiwgKGxvbmcpIENXX0VSUiwgKGxvbmcpIHMpOworI2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAv KiBLVUkgKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAg Y2FzZSAnRSc6ICAgICAgICAgICAgICAgICAgICAgLyogRXJyb3IgcGFja2V0ICovCisjaWZkZWYg Q09NTUVOVAorICAgICAgICAgICAgbW92ZShDV19FUlIsMjIpOyAgICAgICAgICAgIC8qIFByaW50 IGl0cyBkYXRhIGZpZWxkICovCisgICAgICAgICAgICBpZiAoKnMpIHsKKyAgICAgICAgICAgICAg ICBwcmludHcoIiVzIixzKTsKKyNpZmRlZiBLVUkKKyNpZm5kZWYgSzk1RworICAgICAgICAgICAg ICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX0VSUiwgKGxv bmcpIHMgKTsKKyNlbmRpZiAvKiBLOTVHICovCisjZW5kaWYgLyogS1VJICovCisgICAgICAgICAg ICB9CisgICAgICAgICAgICBjbHJ0b2VvbCgpOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAg ICAgICAgIGZjbnQgPSBmYnl0ID0gMEw7ICAgICAgICAgICAvKiBTbyBubyBieXRlcyBmb3IgdGhp cyBmaWxlICovCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlICdRJzogICAgICAg ICAgICAgICAgICAgICAvKiBDcnVuY2hlZCBwYWNrZXQgKi8KKyAgICAgICAgICAgIGNwcyA9IHNo b2NwcygoaW50KSBwY3QsIGZzaXosIGhvd2Zhcik7CisgICAgICAgICAgICAvKiBvbGRfdHIgPSBz aG9ldGwob2xkX3RyLCBjcHMsIGZzaXosIGhvd2Zhcik7ICovCisgICAgICAgICAgICBtb3ZlKENX X0VSUiwyMik7CisgICAgICAgICAgICBwcmludHcoIkRhbWFnZWQgUGFja2V0Iik7CisjaWZkZWYg S1VJCisjaWZuZGVmIEs5NUcKKyAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RS QU5TRkVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX0VSUiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIChsb25nKSAiRGFtYWdlZCBQYWNrZXQiCisgICAgICAgICAg ICAgICAgICAgICAgICAgICApOworI2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBLVUkgKi8K KyAgICAgICAgICAgIGNscnRvZW9sKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBj YXNlICdxJzogICAgICAgICAgICAgICAgICAgICAvKiBDdHJsLUMgb3IgY29ubmVjdGlvbiBsb3N0 ICovCisgICAgICAgICAgICBtb3ZlKENXX01TRywyMik7CisJICAgIGNscnRvZW9sKCk7CisgICAg ICAgICAgICBpZiAoIXMpIHMgPSAiIjsKKyAgICAgICAgICAgIHByaW50dygiJXMiLCAqcyA/IHMg OiAiVXNlciBpbnRlcnJ1cHRpb24gb3IgY29ubmVjdGlvbiBsb3N0Iik7CisjaWZkZWYgS1VJCisj aWZuZGVmIEs5NUcKKyAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVS LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX01TRywKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgIChsb25nKSBzCisgICAgICAgICAgICAgICAgICAgICAgICAgICApOwor I2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBLVUkgKi8KKyAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICAgIGNhc2UgJ1QnOiAgICAgICAgICAgICAgICAgICAgIC8qIFRpbWVvdXQgKi8KKyAg ICAgICAgICAgIGNwcyA9IHNob2NwcygoaW50KSBwY3QsIGZzaXosIGhvd2Zhcik7CisgICAgICAg ICAgICAvKiBvbGRfdHIgPSBzaG9ldGwob2xkX3RyLCBjcHMsIGZzaXosIGhvd2Zhcik7ICovCisg ICAgICAgICAgICBtb3ZlKENXX0VSUiwyMik7CisgICAgICAgICAgICBwcmludHcoIlRpbWVvdXQg JWQgc2VjIixyY3Z0aW1vKTsKKyNpZmRlZiBLVUkKKyNpZm5kZWYgSzk1RworICAgICAgICAgICAg S3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAobG9uZykgQ1dfRVJSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpICJU aW1lb3V0IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyNlbmRpZiAvKiBLOTVHICov CisjZW5kaWYgLyogS1VJICovCisgICAgICAgICAgICBjbHJ0b2VvbCgpOworICAgICAgICAgICAg ZXJyb3JzID0gcmV0cmFucyArIGNydW5jaGVkICsgdGltZW91dHM7CisgICAgICAgICAgICBpZiAo ZXJyb3JzICE9IG9sZHRyeSkgeyAgICAgLyogRXJyb3IgY291bnQsIGlmIGNoYW5nZWQgKi8KKyAg ICAgICAgICAgICAgICBtb3ZlKENXX1BSLCAyMik7CisgICAgICAgICAgICAgICAgcHJpbnR3KCIl ZCIsZXJyb3JzKTsKKyNpZmRlZiBLVUkKKyNpZm5kZWYgSzk1RworICAgICAgICAgICAgICAgIEt1 aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChsb25nKSBDV19QUiwgKGxvbmcpIGVycm9ycworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICk7CisjZW5kaWYgLyogSzk1RyAqLworI2VuZGlmIC8qIEtVSSAqLworICAgICAg ICAgICAgICAgIGNscnRvZW9sKCk7CisgICAgICAgICAgICAgICAgb2xkdHJ5ID0gZXJyb3JzOwor ICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDogICAg ICAgICAgICAgICAgICAgICAgLyogT3RoZXJzLCBkbyBub3RoaW5nICovCisgICAgICAgICAgICBi cmVhazsKKyAgICAgICAgfQorICAgICAgICByZWZyZXNoKCk7CisjaWZkZWYgT1MyCisgICAgICAg IFNhdmVDbWRNb2RlKDAsIDApOworI2VuZGlmIC8qIE9TMiAqLworICAgICAgICByZXR1cm47CisK KyAgICAgIGNhc2UgU0NSX1NUOiAgICAgICAgICAgICAgICAgICAgICAvKiBGaWxlIHRyYW5zZmVy IHN0YXR1cyAqLworICAgICAgICBkZWJ1ZyhGMTAxLCJzY3JlZW5jIFNDUl9TVCBjIiwiIixjKTsK KyAgICAgICAgZGVidWcoRjEwMSwic2NyZWVuYyBTQ1JfU1Qgc3VjY2VzcyIsIiIsc3VjY2Vzcyk7 CisgICAgICAgIGRlYnVnKEYxMDEsInNjcmVlbmMgU0NSX1NUIGN4c2VlbiIsIiIsY3hzZWVuKTsK KyNpZmRlZiBDT01NRU5UCisgICAgICAgIG1vdmUoQ1dfUENELDIyKTsgICAgICAgICAgICAgICAg LyogVXBkYXRlIHBlcmNlbnQgZG9uZSAqLworICAgICAgICBpZiAoYyA9PSBTVF9PSykgeyAgICAg ICAgICAgICAgIC8qIE9LLCBwcmludCAxMDAgJSAqLworICAgICAgICAgICAgaWYgKHBjdGxibCkK KyAgICAgICAgICAgICAgdXBkcGN0KG9sZHBjdCwxMDApOworICAgICAgICAgICAgZWxzZQorICAg ICAgICAgICAgICBwcmludHcoIiVzIiwgY2tmc3RvYShmZmMpKTsKKyNpZmRlZiBLVUkKKyNpZm5k ZWYgSzk1RworICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsIChs b25nKSBDV19GRkMsIChsb25nKSBmZmMpOworI2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBL VUkgKi8KKyAgICAgICAgICAgIHBjdCA9IDEwMDsKKyAgICAgICAgICAgIG9sZHBjdCA9IDA7Cisg ICAgICAgIH0gZWxzZSBpZiAoZnNpeiA+IDBMKSAgICAgICAgICAgLyogTm90IE9LLCB1cGRhdGUg ZmluYWwgcGVyY2VudCAqLworLyoKKyAgVGhlIGVsc2UgcGFydCB3cml0ZXMgYWxsIG92ZXIgdGhl IHNjcmVlbiAtLSBob3dmYXIgYW5kL29yIGZzaXogaGF2ZQorICBiZWVuIHJlc2V0IGFzIGEgY29u c2VxdWVuY2Ugb2YgdGhlIG5vdC1PS25lc3Mgb2YgdGhlIHRyYW5zZmVyLgorKi8KKyAgICAgICAg ICBpZiAocGN0bGJsKQorICAgICAgICAgICAgdXBkcGN0KG9sZHBjdCwgKGhvd2ZhciAqIDEwMEwp IC8gZnNpeik7CisgICAgICAgIGNscnRvZW9sKCk7CisjZWxzZQorICAgICAgICBpZiAoYyA9PSBT VF9PSykgeyAgICAgICAgICAgICAgIC8qIE9LLCBwcmludCAxMDAgJSAqLworICAgICAgICAgICAg bW92ZShDV19QQ0QsMjIpOyAgICAgICAgICAgIC8qIFVwZGF0ZSBwZXJjZW50IGRvbmUgKi8KKyAg ICAgICAgICAgIGlmIChwY3RsYmwpIHsKKwkJaWYgKG9sZHBjdCA9PSAwKQkvKiBTd2l0Y2hpbmcg ZnJvbSAiYnl0ZXMgc28gZmFyIiAqLworCQkgIGNscnRvZW9sKCk7CQkvKiB0byAicGVyY2VudCBk b25lIi4uLiAqLworCQl1cGRwY3Qob2xkcGN0LDEwMCk7CisJICAgIH0gZWxzZQorICAgICAgICAg ICAgICBwcmludHcoIiVzIiwgY2tmc3RvYShmZmMpKTsKKyNpZmRlZiBLVUkKKyNpZm5kZWYgSzk1 RworICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBD V19GRkMsIChsb25nKSBmZmMpOworI2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBLVUkgKi8K KyNpZmRlZiBDT01NRU5UCisgICAgICAgICAgICBwY3QgPSAxMDA7CisgICAgICAgICAgICBvbGRw Y3QgPSAwOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAgICAgIGNscnRvZW9sKCk7Cisg ICAgICAgIH0KKyNlbmRpZiAvKiBDT01NRU5UICovCisKKyNpZmRlZiBDT01NRU5UCisvKiBObywg bGVhdmUgaXQgdGhlcmUgc28gdGhleSBjYW4gcmVhZCBpdCAqLworICAgICAgICBtb3ZlKENXX01T RywyMik7ICAgICAgICAgICAgICAgIC8qIFJlbW92ZSBhbnkgcHJldmlvdXMgbWVzc2FnZSAqLwor I2lmZGVmIEtVSQorI2lmbmRlZiBLOTVHCisgICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklM RV9UUkFOU0ZFUiwgKGxvbmcpIENXX01TRywgKGxvbmcpICIiICk7CisjZW5kaWYgLyogSzk1RyAq LworI2VuZGlmIC8qIEtVSSAqLworICAgICAgICBjbHJ0b2VvbCgpOyByZWZyZXNoKCk7CisjZW5k aWYgLyogQ09NTUVOVCAqLworCisgICAgICAgIG1vdmUoQ1dfVFIsIDIyKTsKKyNpZmRlZiBLVUkK KyNpZm5kZWYgSzk1RworICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIs IChsb25nKSBDV19UUiwgKGxvbmcpICIiICk7CisjZW5kaWYgLyogSzk1RyAqLworI2VuZGlmIC8q IEtVSSAqLworICAgICAgICBjbHJ0b2VvbCgpOyByZWZyZXNoKCk7CisKKyAgICAgICAgc3dpdGNo IChjKSB7ICAgICAgICAgICAgICAgICAgICAvKiBQcmludCBuZXcgc3RhdHVzIG1lc3NhZ2UgKi8K KyAgICAgICAgICBjYXNlIFNUX09LOiAgICAgICAgICAgICAgICAgICAvKiBUcmFuc2ZlciBPSyAq LworICAgICAgICAgICAgZmNudCsrOyAgICAgICAgICAgICAgICAgICAgIC8qIENvdW50IHRoaXMg ZmlsZSAqLworCSAgICBpZiAod2hhdCA9PSAoV19GVFB8V19GVF9ERUxFKSkgeworCQltb3ZlKENX X01TRywyMik7CisJCWNscnRvZW9sKCk7CisJCXByaW50dygiRGVsZXRlIE9LIik7CisJICAgIH0g ZWxzZSB7CisJCWZieXQgKz0gZmZjOworCQltb3ZlKENXX01TRywyMik7CisJCWNscnRvZW9sKCk7 CisJCXByaW50dygiVHJhbnNmZXIgT0siKTsKKwkgICAgfQorI2lmZGVmIEtVSQorI2lmbmRlZiBL OTVHCisgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19NU0csCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAobG9uZykgIlRyYW5zZmVyIE9LIgorICAgICAgICAgICAgICAgICAgICAgICAgICAg KTsKKyNlbmRpZiAvKiBLOTVHICovCisjZW5kaWYgLyogS1VJICovCisgICAgICAgICAgICBjbHJ0 b2VvbCgpOyByZWZyZXNoKCk7CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICBjYXNl IFNUX0RJU0M6ICAgICAgICAgICAgICAgICAvKiBEaXNjYXJkZWQgKi8KKyAgICAgICAgICAgIG1v dmUoQ1dfRVJSLDIyKTsKKyAgICAgICAgICAgIHByaW50dygiRmlsZSBkaXNjYXJkZWQiKTsKKyNp ZmRlZiBLVUkKKyNpZm5kZWYgSzk1RworICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJ TEVfVFJBTlNGRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgQ1dfRVJSLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpICJGaWxlIGRpc2NhcmRlZCIKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICk7CisjZW5kaWYgLyogSzk1RyAqLworI2VuZGlmIC8qIEtV SSAqLworI2lmZGVmIENPTU1FTlQKKyAgICAgICAgICAgIHBjdCA9IG9sZHBjdCA9IDA7CisjZW5k aWYgLyogQ09NTUVOVCAqLworICAgICAgICAgICAgY2xydG9lb2woKTsgcmVmcmVzaCgpOworICAg ICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgY2FzZSBTVF9JTlQ6ICAgICAgICAgICAgICAg ICAgLyogSW50ZXJydXB0ZWQgKi8KKyAgICAgICAgICAgIG1vdmUoQ1dfRVJSLDIyKTsKKyAgICAg ICAgICAgIHByaW50dygiVHJhbnNmZXIgaW50ZXJydXB0ZWQiKTsKKyNpZmRlZiBLVUkKKyNpZm5k ZWYgSzk1RworICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgQ1dfRVJSLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgKGxvbmcpICJUcmFuc2ZlciBpbnRlcnJ1cHRlZCIKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICk7CisjZW5kaWYgLyogSzk1RyAqLworI2VuZGlmIC8qIEtVSSAqLworI2lm ZGVmIENPTU1FTlQKKyAgICAgICAgICAgIHBjdCA9IG9sZHBjdCA9IDA7CisjZW5kaWYgLyogQ09N TUVOVCAqLworICAgICAgICAgICAgY2xydG9lb2woKTsgcmVmcmVzaCgpOworICAgICAgICAgICAg cmV0dXJuOworCisgICAgICAgICAgY2FzZSBTVF9TS0lQOiAgICAgICAgICAgICAgICAgLyogU2tp cHBlZCAqLworICAgICAgICAgICAgbW92ZShDV19FUlIsMjIpOworCSAgICBpZiAobiA+IDAgJiYg biA8IG5za3JlYXNvbikKKwkgICAgICBwcmludHcoIkZpbGUgc2tpcHBlZCAoJXMpIixza3JlYXNv bltuXSk7CisJICAgIGVsc2UKKwkgICAgICBwcmludHcoIkZpbGUgc2tpcHBlZCIpOworI2lmZGVm IEtVSQorI2lmbmRlZiBLOTVHCisgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9U UkFOU0ZFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19FUlIsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgIkZpbGUgc2tpcHBlZCIKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICk7CisjZW5kaWYgLyogSzk1RyAqLworI2VuZGlmIC8qIEtVSSAqLwor I2lmZGVmIENPTU1FTlQKKyAgICAgICAgICAgIHBjdCA9IG9sZHBjdCA9IDA7CisjZW5kaWYgLyog Q09NTUVOVCAqLworICAgICAgICAgICAgY2xydG9lb2woKTsgcmVmcmVzaCgpOworICAgICAgICAg ICAgcmV0dXJuOworCisgICAgICAgICAgY2FzZSBTVF9FUlI6ICAgICAgICAgICAgICAgICAgLyog RXJyb3IgbWVzc2FnZSAqLworICAgICAgICAgICAgbW92ZShDV19FUlIsMjIpOworICAgICAgICAg ICAgaWYgKCFzKSBzID0gKGNoYXIgKillcGt0bXNnOworICAgICAgICAgICAgcHJpbnR3KCIlcyIs cyk7CisjaWZkZWYgS1VJCisjaWZuZGVmIEs5NUcKKyAgICAgICAgICAgIEt1aVNldFByb3BlcnR5 KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX0VSUiwgKGxvbmcpIHMgKTsKKyNlbmRpZiAv KiBLOTVHICovCisjZW5kaWYgLyogS1VJICovCisjaWZkZWYgQ09NTUVOVAorICAgICAgICAgICAg cGN0ID0gb2xkcGN0ID0gMDsKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgICAgICAgICBjbHJ0 b2VvbCgpOyByZWZyZXNoKCk7CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICBjYXNl IFNUX1JFRlU6ICAgICAgICAgICAgICAgICAvKiBSZWZ1c2VkICovCisgICAgICAgICAgICBtb3Zl KENXX0VSUiwyMik7CisgICAgICAgICAgICBpZiAoKnMpIHsKKyAgICAgICAgICAgICAgICBjaGFy IGVycmJ1Zls2NF0gOworICAgICAgICAgICAgICAgIHNwcmludGYoIGVycmJ1ZiwgIlJlZnVzZWQs ICVzIiwgcyApIDsKKyAgICAgICAgICAgICAgICBwcmludHcoIiVzIiwgZXJyYnVmKTsKKyNpZmRl ZiBLVUkKKyNpZm5kZWYgSzk1RworICAgICAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9G SUxFX1RSQU5TRkVSLChsb25nKSBDV19FUlIsKGxvbmcpIGVycmJ1Zik7CisjZW5kaWYgLyogSzk1 RyAqLworI2VuZGlmIC8qIEtVSSAqLworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg ICAgICBwcmludHcoIlJlZnVzZWQiKTsKKyNpZmRlZiBLVUkKKyNpZm5kZWYgSzk1RworICAgICAg ICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLChsb25nKUNXX0VSUiwo bG9uZykiUmVmdXNlZCIpOworI2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBLVUkgKi8KKyAg ICAgICAgICAgIH0KKyNpZmRlZiBDT01NRU5UCisgICAgICAgICAgICBwY3QgPSBvbGRwY3QgPSAw OworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAgICAgIGNscnRvZW9sKCk7IHJlZnJlc2go KTsKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgIGNhc2UgU1RfSU5DOgorICAgICAg ICAgICAgbW92ZShDV19FUlIsMjIpOworICAgICAgICAgICAgcHJpbnR3KCJJbmNvbXBsZXRlIik7 CisjaWZkZWYgS1VJCisjaWZuZGVmIEs5NUcKKyAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtV SV9GSUxFX1RSQU5TRkVSLChsb25nKUNXX0VSUiwobG9uZykiSW5jb21wbGV0ZSIpOworI2VuZGlm IC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBLVUkgKi8KKyNpZmRlZiBDT01NRU5UCisgICAgICAgICAg ICBwY3QgPSBvbGRwY3QgPSAwOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAgICAgIGNs cnRvZW9sKCk7IHJlZnJlc2goKTsKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgIGNh c2UgU1RfTVNHOgorICAgICAgICAgICAgbW92ZShDV19NU0csMjIpOworICAgICAgICAgICAgcHJp bnR3KCIlcyIscyk7CisjaWZkZWYgS1VJCisjaWZuZGVmIEs5NUcKKyAgICAgICAgICAgIEt1aVNl dFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLChsb25nKUNXX01TRywobG9uZylzKTsKKyNlbmRp ZiAvKiBLOTVHICovCisjZW5kaWYgLyogS1VJICovCisgICAgICAgICAgICBjbHJ0b2VvbCgpOyBy ZWZyZXNoKCk7CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICBkZWZhdWx0OiAgICAg ICAgICAgICAgICAgICAgICAvKiBCYWQgY2FsbCAqLworICAgICAgICAgICAgbW92ZShDV19FUlIs MjIpOworICAgICAgICAgICAgcHJpbnR3KCIqKiogc2NyZWVuKCkgY2FsbGVkIHdpdGggYmFkIHN0 YXR1cyAqKioiKTsKKyNpZmRlZiBLVUkKKyNpZm5kZWYgSzk1RworICAgICAgICAgICAgS3VpU2V0 UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfRVJSLAorICAgICAgICAgICAg ICAgICAgICAgICAobG9uZykgIioqKiBzY3JlZW4oKSBjYWxsZWQgd2l0aCBiYWQgc3RhdHVzICoq KiIgKTsKKyNlbmRpZiAvKiBLOTVHICovCisjZW5kaWYgLyogS1VJICovCisgICAgICAgICAgICBj bHJ0b2VvbCgpOyByZWZyZXNoKCk7IHJldHVybjsKKyAgICAgICAgfQorCisgICAgICBjYXNlIFND Ul9UQzogeyAgICAgICAgICAgICAgICAgICAgLyogVHJhbnNhY3Rpb24gY29tcGxldGUgKi8KKyAg ICAgICAgICBjaGFyIG1zZ2J1ZlsxMjhdOworICAgICAgICAgIG1vdmUoQ1dfQ1AsMjIpOyAgICAg ICAgICAgICAgIC8qIE92ZXJhbGwgdHJhbnNmZXIgcmF0ZSAqLworI2lmZGVmIEtVSQorI2lmbmRl ZiBLOTVHCisgICAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9u ZykgQ1dfQ1AsIHRmY3BzKTsKKyNlbmRpZiAvKiBLOTVHICovCisjZW5kaWYgLyogS1VJICovCisg ICAgICAgICAgcHJpbnR3KCIlcyIsIGNrZnN0b2EodGZjcHMpKTsKKyAgICAgICAgICBjbHJ0b2Vv bCgpOworICAgICAgICAgIGlmIChzdWNjZXNzKSB7CisgICAgICAgICAgICAgIG1vdmUoQ1dfTVNH LDIyKTsgICAgICAgICAgLyogUHJpbnQgc3RhdGlzdGljcyBpbiBtZXNzYWdlIGxpbmUgKi8KKyAg ICAgICAgICAgICAgY2xydG9lb2woKTsKKyAgICAgICAgICB9CisgICAgICAgICAgaWYgKHN1Y2Nl c3MpIHsKKyAgICAgICAgICAgICAgc3ByaW50Zihtc2didWYsCisgICAgICAgICAgICAgICAgICAg ICAgIlNVQ0NFU1MuICBGaWxlczogJWxkLCBCeXRlczogJXMsICVsZCBDUFMiLAorICAgICAgICAg ICAgICAgICAgICAgIGZpbGNudCAtIGZpbHJlaiwKKyAgICAgICAgICAgICAgICAgICAgICBja2Zz dG9hKGZieXQpLAorICAgICAgICAgICAgICAgICAgICAgIHRmY3BzCisgICAgICAgICAgICAgICAg ICAgICAgKTsKKyAgICAgICAgICAgICAgcHJpbnR3KCIlcyIsIG1zZ2J1Zik7CisjaWZkZWYgS1VJ CisjaWZuZGVmIEs5NUcKKyAgICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJB TlNGRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19NU0csCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBtc2didWYKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKTsKKyNlbmRpZiAvKiBLOTVHICovCisjZW5kaWYgLyogS1VJICovCisgICAg ICAgICAgICAgIGNscnRvZW9sKCk7CisKKyAgICAgICAgICB9CisgICAgICAgICAgbW92ZShDV19U UiwgMSk7CisgICAgICAgICAgcHJpbnR3KCIgICAgICAgRWxhcHNlZCBUaW1lOiAlcyIsaGhtbXNz KChsb25nKQorI2lmZGVmIEdGVElNRVIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKGZwdHNlY3MgKyAwLjUpCisjZWxzZQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0c2VjcworI2VuZGlmIC8qIEdGVElN RVIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICkpOworI2lmZGVmIEtVSQorI2lmbmRlZiBLOTVHCisgICAgICAgICAgS3VpU2V0UHJvcGVydHko S1VJX0ZJTEVfVFJBTlNGRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX1RS LAorICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBoaG1tc3MoKGxvbmcpCisjaWZkZWYg R0ZUSU1FUgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZwdHNlY3Mg KyAwLjUpCisjZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHNl Y3MKKyNlbmRpZiAvKiBHRlRJTUVSICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICApKTsKKyNlbmRpZiAvKiBLOTVHICovCisjZW5kaWYgLyogS1VJICovCisgICAgICAg ICAgY2xydG9lb2woKTsKKyAgICAgICAgICBtb3ZlKDIzLDApOyBjbHJ0b2VvbCgpOyAgICAgICAv KiBDbGVhciBpbnN0cnVjdGlvbnMgbGluZXMgKi8KKyAgICAgICAgICBtb3ZlKDIyLDApOyBjbHJ0 b2VvbCgpOyAgICAgICAvKiB0byBtYWtlIHJvb20gZm9yIHByb21wdC4gKi8KKyAgICAgICAgICBy ZWZyZXNoKCk7CisKKyNpZmRlZiBHRlRJTUVSCisgICAgICAgICAgb2xkZ3R2ID0gKENLRkxPQVQp IC0xLjA7CisjZWxzZQorICAgICAgICAgIG9sZGd0diA9IC0xTDsKKyNlbmRpZiAvKiBHRlRJTUVS ICovCisKKyNpZm5kZWYgVk1TQ1VSU0UKKwkgIGRlYnVnKEYxMDAsInNjcmVlbmMgZW5kd2luIEEi LCIiLDApOworICAgICAgICAgIGVuZHdpbigpOworI2lmZGVmIENPTU1FTlQKKy8qCisgIFdoeSBh bmQgd2hlbiB3YXMgdGhpcyBjYWxsIHRvIGNvbnJlcygpIGFkZGVkPyAgSXQgbWFrZXMgbm8gc2Vu c2UsCisgIGFuZCBpdCBicmVha3MgZWNob2luZyBvbiBTb2xhcmlzIDguCisqLworI2lmZGVmIFNP TEFSSVMKKyAgICAgICAgICBjb25yZXMoKTsKKyNlbmRpZiAvKiBTT0xBUklTICovCisjZW5kaWYg LyogQ09NTUVOVCAqLworI2VuZGlmIC8qIFZNU0NVUlNFICovCisKKyNpZmRlZiBDT01NRU5UCisg ICAgICAgICAgcGN0ID0gMTAwOyBvbGRwY3QgPSAwOyAgICAgICAgLyogUmVzZXQgdGhlc2UgZm9y IG5leHQgdGltZS4gKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgICAgICAgb2xkdHlwID0g MDsgb2xkcnR0ID0gLTFMOyBvbGR0cnkgPSAtMTsgb2xkbGVuID0gLTE7CisgICAgICAgICAgb2xk dGltID0gLTE7CisgICAgICAgICAgY2VuZHcgPSAxOworICAgICAgICAgIGlmICh4ZnJiZWwpIGJs ZWVwKEJQX05PVEUpOyAgIC8qIENsb3NlIHdpbmRvdywgdGhlbiBiZWVwLiAqLworI2lmZGVmIFVO SVgKKyAgICAgICAgICBmZmx1c2goc3Rkb3V0KTsKKyNlbmRpZiAvKiBVTklYICovCisgICAgICAg ICAgZnRfd2luID0gMDsgICAgICAgICAgICAgICAgICAgLyogV2luZG93IGNsb3NlZC4gKi8KKyAg ICAgICAgICByZXR1cm47CisgICAgICB9CisgICAgICBjYXNlIFNDUl9FTTogICAgICAgICAgICAg ICAgICAgICAgLyogRXJyb3IgcGFja2V0IChmYXRhbCkgKi8KKyAgICAgICAgbW92ZSAoQ1dfRVJS LDIyKTsKKyAgICAgICAgcHJpbnR3KCJGQUlMVVJFOiAlcyIscyk7CisjaWZkZWYgS1VJCisjaWZu ZGVmIEs5NUcKKyAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9u ZykgQ1dfRVJSLCAobG9uZykgcyApOworI2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBLVUkg Ki8KKyAgICAgICAgaWYgKHhmcmJlbCkgYmxlZXAoQlBfRkFJTCk7CisjaWZkZWYgQ09NTUVOVAor ICAgICAgICBwY3QgPSBvbGRwY3QgPSAwOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAg Y2xydG9lb2woKTsgcmVmcmVzaCgpOyByZXR1cm47CisKKyAgICAgIGNhc2UgU0NSX1FFOiAgICAg ICAgICAgICAgICAgICAgICAvKiBRdWFudGl0eSBlcXVhbHMgKi8KKyAgICAgIGNhc2UgU0NSX1RV OiAgICAgICAgICAgICAgICAgICAgICAvKiBVbmRlbGltaXRlZCB0ZXh0ICovCisgICAgICBjYXNl IFNDUl9UTjogICAgICAgICAgICAgICAgICAgICAgLyogVGV4dCBkZWxpbWl0ZWQgYXQgc3RhcnQg Ki8KKyAgICAgIGNhc2UgU0NSX1RaOiAgICAgICAgICAgICAgICAgICAgICAvKiBUZXh0IGRlbGlt aXRlZCBhdCBlbmQgKi8KKyAgICAgICAgcmV0dXJuOyAgICAgICAgICAgICAgICAgICAgICAgICAv KiAoaWdub3JlZCBpbiBmdWxsc2NyZWVuIGRpc3BsYXkpICovCisKKyAgICAgIGNhc2UgU0NSX01T OgkJCS8qIE1lc3NhZ2UgZnJvbSBLZXJtaXQgcGFydG5lciAqLworICAgICAgICBtb3ZlKENXX01T RywyMik7CisJcHJpbnR3KCIlcyIscyk7CisgICAgICAgIGNscnRvZW9sKCk7IHJlZnJlc2goKTsg cmV0dXJuOworCisgICAgICBjYXNlIFNDUl9YRDogICAgICAgICAgICAgICAgICAgICAgLyogWC1w YWNrZXQgZGF0YSAqLworICAgICAgICBwY3QgPSBvbGRwY3QgPSAwOworICAgICAgICBtb3ZlKENX X05BTSwyMik7CisgICAgICAgIHByaW50dygiJXMiLHMpOworI2lmZGVmIEtVSQorI2lmbmRlZiBL OTVHCisgICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENX X05BTSwgKGxvbmcpIHMgKTsKKyNlbmRpZiAvKiBLOTVHICovCisjZW5kaWYgLyogS1VJICovCisg ICAgICAgIGNscnRvZW9sKCk7IHJlZnJlc2goKTsgcmV0dXJuOworCisgICAgICBjYXNlIFNDUl9D VzogICAgICAgICAgICAgICAgICAgICAgLyogQ2xvc2UgV2luZG93ICovCisgICAgICAgIGNscnRv ZW9sKCk7IG1vdmUoMjMsMCk7IGNscnRvZW9sKCk7IG1vdmUoMjIsMCk7IGNscnRvZW9sKCk7Cisg ICAgICAgIHJlZnJlc2goKTsKKyNpZmRlZiBDT01NRU5UCisgICAgICAgIHBjdCA9IDEwMDsgb2xk cGN0ID0gMDsgICAgICAgICAgLyogUmVzZXQgdGhlc2UgZm9yIG5leHQgdGltZS4gKi8KKyNlbmRp ZiAvKiBDT01NRU5UICovCisgICAgICAgIG9sZHR5cCA9IDA7IG9sZHJ0dCA9IC0xTDsgb2xkdHJ5 ID0gLTE7IG9sZGxlbiA9IC0xOworICAgICAgICBvbGR0aW0gPSAtMTsKKworI2lmbmRlZiBWTVND VVJTRQorCWRlYnVnKEYxMDAsInNjcmVlbmMgZW5kd2luIEIiLCIiLDApOworICAgICAgICBlbmR3 aW4oKTsKKyNlbmRpZiAvKiBWTVNDVVJTRSAqLworICAgICAgICBmdF93aW4gPSAwOyAgICAgICAg ICAgICAgICAgICAgIC8qIEZsYWcgdGhhdCB3aW5kb3cgaXMgY2xvc2VkLiAqLworICAgICAgICBj ZW5kdyA9IDE7IHJldHVybjsKKworICAgICAgY2FzZSBTQ1JfQ0Q6ICAgICAgICAgICAgICAgICAg ICAgIC8qIERpc3BsYXkgY3VycmVudCBkaXJlY3RvcnkgKi8KKyAgICAgICAgbW92ZShDV19ESVIs MjIpOworICAgICAgICAgcHJpbnR3KCIlcyIsIHMpOworI2lmZGVmIEtVSQorI2lmbmRlZiBLOTVH CisgICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX0RJ UiwgKGxvbmcpIHMgKTsKKyNlbmRpZiAvKiBLOTVHICovCisjZW5kaWYgLyogS1VJICovCisgICAg ICAgIGNscnRvZW9sKCk7CisgICAgICAgIHJlZnJlc2goKTsKKyNpZmRlZiBPUzIKKyAgICAgICAg U2F2ZUNtZE1vZGUoMCwgMCk7CisjZW5kaWYgLyogT1MyICovCisgICAgICAgIHJldHVybjsKKwor ICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEJhZCBjYWxsICovCisg ICAgICAgIG1vdmUgKENXX0VSUiwyMik7CisjaWZkZWYgS1VJCisjaWZuZGVmIEs5NUcKKyAgICAg ICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCisgICAgICAgICAgICAgICAgICAg ICAgIChsb25nKSBDV19FUlIsCisgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSAiKioqIHNj cmVlbigpIGNhbGxlZCB3aXRoIGJhZCBmdW5jdGlvbiBjb2RlICoqKiIKKyAgICAgICAgICAgICAg ICAgICAgICAgKTsKKyNlbmRpZiAvKiBLOTVHICovCisjZW5kaWYgLyogS1VJICovCisgICAgICAg IHByaW50dygiKioqIHNjcmVlbigpIGNhbGxlZCB3aXRoIGJhZCBmdW5jdGlvbiBjb2RlICoqKiIp OworICAgICAgICBjbHJ0b2VvbCgpOyByZWZyZXNoKCk7IHJldHVybjsKKyAgICB9Cit9CisjZW5k aWYgLyogQ0tfQ1VSU0VTICovCisKKyNpZmRlZiBLVUkKKyNpZmRlZiBDS19BTlNJQwordm9pZAor c2NyZWVuZyhpbnQgZiwgY2hhciBjLGxvbmcgbixjaGFyICpzKQorI2Vsc2UKK0NLVk9JRAorc2Ny ZWVuZyhmLGMsbixzKQoraW50IGY7ICAgICAgICAgIC8qIGFyZ3VtZW50IGRlc2NyaXB0b3IgKi8K K2NoYXIgYzsgICAgICAgICAvKiBhIGNoYXJhY3RlciBvciBzbWFsbCBpbnRlZ2VyICovCitsb25n IG47ICAgICAgICAgLyogYSBsb25nIGludGVnZXIgKi8KK2NoYXIgKnM7ICAgICAgICAvKiBhIHN0 cmluZyAqLworI2VuZGlmIC8qIENLX0FOU0lDICovCisvKiBzY3JlZW5nKCkgKi8geworI2lmZGVm IENLX1NTTAorICAgIGV4dGVybiBpbnQgdGxzX2FjdGl2ZV9mbGFnLCBzc2xfYWN0aXZlX2ZsYWc7 CisjZW5kaWYgLyogQ0tfU1NMICovCisjaWZkZWYgUkxPR0NPREUKKyAgICBleHRlcm4gaW50IHR0 bnByb3RvOworI2VuZGlmIC8qIFJMT0dDT0RFICovCisgICAgc3RhdGljIGludCBxID0gMDsKKyAg ICBzdGF0aWMgQ0tfT0ZGX1QgZnNpeiA9IChDS19PRkZfVCktMTsgLyogQ29weSBvZiBmaWxlIHNp emUgKi8KKyAgICBzdGF0aWMgbG9uZyBmY250ID0gMEw7ICAgIC8qIE51bWJlciBvZiBmaWxlcyB0 cmFuc2ZlcnJlZCAqLworICAgIHN0YXRpYyBsb25nIGZieXQgPSAwTDsgICAgLyogVG90YWwgZmls ZSBieXRlcyBvZiBhbGwgZmlsZXMgdHJhbnNmZXJyZWQgKi8KKyAgICBzdGF0aWMgQ0tfT0ZGX1Qg aG93ZmFyID0gKENLX09GRl9UKTA7IC8qIEhvdyBtdWNoIG9mIGZpbGUgeGZlcidkIHNvIGZhciAq LworICAgIHN0YXRpYyBpbnQgIHBjdGxibCA9IDBMOyAgLyogUGVyY2VudCBkb25lIHZzIEJ5dGVz IHNvIGZhciAqLworICAgIGxvbmcgY3BzID0gMEw7CisKKyAgICBpbnQgbmV0ID0gMDsKKyAgICBp bnQgeG5ldCA9IDA7CisgICAgaW50IGZ0cCA9IDA7CisgICAgaW50IGxlbjsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogTGVuZ3RoIG9mIHN0cmluZyAqLworICAgIGludCBlcnJvcnMgPSAw OyAgICAgICAgICAgICAgICAgICAgIC8qIEVycm9yIGNvdW50ZXIgKi8KKyAgICBpbnQgeDsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXb3JrZXIgKi8KKworICAgIGRlYnVnKEYxMDEs InNjcmVlbmcgY2luaXQiLCIiLGNpbml0KTsKKyAgICBkZWJ1ZyhGMTAxLCJzY3JlZW5nIGNlbmR3 IiwiIixjZW5kdyk7CisKKyAgICBpZiAoIXMpIHMgPSAiIjsgICAgICAgICAgICAgICAgICAgICAv KiBBbHdheXMgZG8gdGhpcy4gKi8KKworICAgIGZ0cCA9ICh3aGF0ICYgV19GVFApID8gMSA6IDA7 CS8qIEZUUCBvciBLZXJtaXQgKi8KKyAgICBuZXQgPSBuZXR3b3JrIHx8IGZ0cDsKKyAgICB4bmV0 ID0gZnRwID8gMSA6IG5ldHR5cGU7CQkvKiBORVRfVENQQiA9PSAxICovCisKKyAgICBpZiAoY2lu aXQgPT0gMCB8fCBjZW5kdyA+IDApIHsgICAgICAvKiBIYW5kbGUgYm9yZGVybGluZSBjYXNlcy4u LiAqLworICAgICAgICBpZiAoZiA9PSBTQ1JfQ1cpIHsgICAgICAgICAgICAgIC8qIENsb3NlIHdp bmRvdywgYnV0IGl0J3Mgbm90IG9wZW4gKi8KKyAgICAgICAgICAgIGZ0X3dpbiA9IDA7CisgICAg ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgZGVidWcoRjExMSwic2NyZWVuZyBB IixzLGYpOworICAgICAgICBpZiAoZiA9PSBTQ1JfRU0gfHwKKyAgICAgICAgICAgKGYgPT0gU0NS X1BUICYmIGMgPT0gJ0UnKSkgeyAvKiBGYXRhbCBlcnJvciBiZWZvcmUgd2luZG93IG9wZW4gKi8K KyAgICAgICAgICAgIGNvbm9sbCgiIik7IGNvbm9jKCc/Jyk7IGNvbm9sbChzKTsgcmV0dXJuOyAv KiBSZWd1bGFyIGRpc3BsYXkgKi8KKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoY2luaXQgPT0g MCkgeyAgICAgICAgICAgICAgICAgICAvKiBPbmx5IGNhbGwgaW5pdHNjcigpIG9uY2UgKi8KKwkv KiBDaGVjayB0aGVzZSBub3cgLS0gaWYgdGhleSBhcmUgZGVmaW5lZCBidXQgbm90IG51bWVyaWMg Ki8KKwkvKiB0aGV5IGNhbiBjcmFzaCBjdXJzZXMgKi8KKyAgICAgICAgY2VuZHcgPSAxOyAgICAg ICAgICAgICAgICAgICAgICAvKiBOZXcgd2luZG93IG5lZWRzIHJlcGFpbnRpbmcgKi8KKyAgICAg ICAgZGVidWcoRjEwMCwic2NyZWVuZyBjYWxsaW5nIGluaXRzY3IiLCIiLDApOworICAgICAgICBp bml0c2NyKCk7ICAgICAgICAgICAgICAgICAgICAgIC8qIEluaXRpYWxpemUgY3Vyc2VzLiAqLwor ICAgICAgICBkZWJ1ZyhGMTAwLCJzY3JlZW5nIGluaXRzY3Igb2siLCIiLDApOworICAgICAgICBj aW5pdCsrOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlbWVtYmVyIGN1cnNlcyB3YXMgaW5p dGlhbGl6ZWQuICovCisgICAgfQorICAgIGZ0X3dpbiA9IDE7ICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIFdpbmRvdyBpcyBvcGVuICovCisgICAgaWYgKHJlcGFpbnQpIHsKKyNpZmRlZiBDS19X UkVGUkVTSAorLyoKKyAgVGhpcyB0b3RhbGx5IHJlcGFpbnRzIHRoZSBzY3JlZW4sIGp1c3Qgd2hh dCB3ZSB3YW50LCBidXQgd2UgY2FuIG9ubHkKKyAgZG8gdGhpcyB3aXRoIHJlYWwgY3Vyc2VzLCBh bmQgdGhlbiBvbmx5IGlmIGNsZWFyb2soKSBhbmQgd3JlZnJlc2goKSBhcmUKKyAgcHJvdmlkZWQg aW4gdGhlIGN1cnNlcyBsaWJyYXJ5LgorKi8KKyAgICAgICAgUmVzdG9yZUNtZE1vZGUoKTsKKyNl bHNlICAvKiBObyBDS19XUkVGUkVTSCAqLworLyoKKyAgS2VybWl0J3MgZG8taXQteW91cnNlbGYg bWV0aG9kLCB3b3JrcyB3aXRoIGFsbCB0eXBlcyBvZiBmdWxsc2NyZWVuCisgIHN1cHBvcnQsIGJ1 dCBkb2VzIG5vdCByZXBhaW50IGFsbCB0aGUgZmllbGRzLiAgRm9yIGV4YW1wbGUsIHRoZSBmaWxl bmFtZQorICBpcyBsb3N0LCBiZWNhdXNlIGl0IGFycml2ZXMgYXQgYSBjZXJ0YWluIHRpbWUgYW5k IG5ldmVyIGNvbWVzIGFnYWluLCBhbmQKKyAgS2VybWl0IHByZXNlbnRseSBkb2VzIG5vdCBzYXZl IGl0IGFueXdoZXJlLiAgTWFraW5nIHRoaXMgbWV0aG9kIHdvcmsgZm9yCisgIGFsbCBmaWVsZHMg d291bGQgYmUgYSByYXRoZXIgbWFqb3IgcmVjb2RpbmcgdGFzaywgZHVwbGljYXRpbmcgd2hhdCBj dXJzZXMKKyAgYWxyZWFkeSBkb2VzLCBhbmQgd291bGQgYWRkIGEgbG90IG9mIGNvbXBsZXhpdHkg YW5kIHN0b3JhZ2Ugc3BhY2UuCisqLworICAgICAgICBjZW5kdyA9IDE7CisjZW5kaWYgLyogQ0tf V1JFRlJFU0ggKi8KKyAgICAgICAgcmVwYWludCA9IDA7CisgICAgfQorICAgIGlmIChjZW5kdykg eyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVuZHdpbigpIHdhcyBjYWxsZWQgcHJldmlvdXNs eSAqLworICAgICAgICBkZWJ1ZyhGMTAwLCJzY3JlZW5nIHNldHVwIG9rIiwiIiwwKTsKKyAgICAg ICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfRElSLCAobG9u Zykgemd0ZGlyKCkgKTsKKyAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVS LCAobG9uZykgQ1dfTElOLAorICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpICgKKyNpZmRl ZiBORVdGVFAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnRwID8gKGZ0cF9ob3N0 ID8gZnRwX2hvc3QgOiAiKHVua25vd24pIikgOgorI2VuZGlmIC8qIE5FV0ZUUCAqLworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB0dG5hbWUpICk7CisKKyAgICAgICAgaWYgKG5ldCkg eworI2lmZGVmIE5FVENPTk4KKwkgICAgaW50IHNlY3VyZSA9IDA7CisJICAgIGNoYXIgKiB4bmFt ZTsKKwkgICAgaWYgKHhuZXQgPiBubmV0bmFtZSkKKwkgICAgICB4bmFtZSA9ICJbRVJST1JdIjsK KwkgICAgZWxzZQorCSAgICAgIHhuYW1lID0gbmV0bmFtZVt4bmV0XTsKKyNpZmRlZiBORVdGVFAK KyAgICAgICAgICAgIGlmIChmdHApIHsKKwkJaWYgKGZ0cGlzc2VjdXJlKCkpCisJCSAgc2VjdXJl ID0gMTsKKwkgICAgfSBlbHNlCisjZW5kaWYgLyogTkVXRlRQICovCisJICAgICAgaWYgKDAKKyNp ZmRlZiBTU0hCVUlMVElOCisgICAgICAgICAgICAgICAgfHwgSVNfU1NIKCkKKyNlbmRpZiAvKiBT U0hCVUlMVElOICovCisjaWZkZWYgQ0tfRU5DUllQVElPTgorICAgICAgICAgICAgICAgIHx8IGNr X3RuX2VuY3J5cHRpbmcoKSAmJiBja190bl9kZWNyeXB0aW5nKCkKKyNlbmRpZiAvKiBDS19FTkNS WVBUSU9OICovCisjaWZkZWYgQ0tfU1NMCisgICAgICAgICAgICAgICAgfHwgdGxzX2FjdGl2ZV9m bGFnIHx8IHNzbF9hY3RpdmVfZmxhZworI2VuZGlmIC8qIENLX1NTTCAqLworI2lmZGVmIFJMT0dD T0RFCisjaWZkZWYgQ0tfS0VSQkVST1MKKyNpZmRlZiBDS19FTkNSWVBUSU9OCisgICAgICAgICAg ICAgICAgfHwgdHRucHJvdG8gPT0gTlBfRUs0TE9HSU4gfHwgdHRucHJvdG8gPT0gTlBfRUs1TE9H SU4KKyNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCisjZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8K KyNlbmRpZiAvKiBSTE9HQ09ERSAqLworICAgICAgICAgICAgICAgICApIHsKKwkJc2VjdXJlID0g MTsKKwkgICAgfQorCSAgICBpZiAoc2VjdXJlKSB7CisgICAgICAgICAgICAgICAgY2hhciBidWZb MzBdOworICAgICAgICAgICAgICAgIHNwcmludGYoYnVmLCIlcyAoU0VDVVJFKSIseG5hbWUpOwor ICAgICAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19TUEQsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKGxvbmcpIGJ1ZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEt1aVNldFByb3BlcnR5 KEtVSV9GSUxFX1RSQU5TRkVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25n KSBDV19TUEQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIHhuYW1lCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIH0KKyNlbHNlCisg ICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgIChsb25nKSBDV19TUEQsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAobG9uZykgIihuZXR3b3JrKSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisjZW5k aWYgLyogTkVUQ09OTiAqLworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKHNwZWVk IDwgMEwpCisgICAgICAgICAgICAgIHNwZWVkID0gdHRnc3BkKCk7CisgICAgICAgICAgICBpZiAo c3BlZWQgPiAwTCkgeworICAgICAgICAgICAgICAgIGlmIChzcGVlZCA9PSA4ODgwKSB7CisgICAg ICAgICAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgQ1dfU1BELAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgIjc1LzEyMDAiCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg ICAgICAgICAgICAgY2hhciBzcGVlZGJ1Zls2NF0gOworICAgICAgICAgICAgICAgICAgICBzcHJp bnRmKHNwZWVkYnVmLCAiJWxkIiwgc3BlZWQpOworICAgICAgICAgICAgICAgICAgICBLdWlTZXRQ cm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKGxvbmcpIENXX1NQRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KGxvbmcpIHNwZWVkYnVmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Cisg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBL dWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAobG9uZykgQ1dfU1BELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChs b25nKSAiKHVua25vd24pIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAg ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJB TlNGRVIsCisgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19QQVIsCisgICAgICAgICAg ICAgICAgICAgICAgIChsb25nKSBwYXJuYW0oKGNoYXIpcGFyaXR5KQorICAgICAgICAgICAgICAg ICAgICAgICApOworICAgICAgICBwY3RsYmwgPSAod2hhdCAmIFdfU0VORCk7CisgICAgICAgIGNl bmR3ID0gMDsKKyAgICB9CisgICAgZGVidWcoRjEwMSwiU0NSRUVOQyBzd2l0Y2giLCIiLGYpOwor ICAgIGRlYnVnKEYwMDAsIlNDUkVFTkMgYyIsIiIsYyk7CisgICAgZGVidWcoRjEwMSwiU0NSRUVO QyBuIiwiIixuKTsKKworICAgIGxlbiA9IHN0cmxlbihzKTsgICAgICAgICAgICAgICAgICAgIC8q IExlbmd0aCBvZiBhcmd1bWVudCBzdHJpbmcgKi8KKyAgICBzd2l0Y2ggKGYpIHsgICAgICAgICAg ICAgICAgICAgICAgICAvKiBIYW5kbGUgb3VyIGZ1bmN0aW9uIGNvZGUgKi8KKyAgICAgIGNhc2Ug U0NSX0ZOOiAgICAgICAgICAgICAgICAgICAgICAvKiBGaWxlbmFtZSAqLworICAgICAgICBvbGRw Y3QgPSBwY3QgPSAwTDsgICAgICAgICAgICAgIC8qIFJlc2V0IHBlcmNlbnRzICovCisjaWZkZWYg R0ZUSU1FUgorICAgICAgICBndHYgPSAoQ0tGTE9BVCkgLTEuMDsKKyAgICAgICAgLyogb2xkZ3R2 ID0gKENLRkxPQVQpIC0xLjA7ICovCisjZWxzZQorICAgICAgICBndHYgPSAtMUw7CisgICAgICAg IC8qIG9sZGd0diA9IC0xTDsgKi8KKyNlbmRpZiAvKiBHRlRJTUVSICovCisgICAgICAgIG9sZHdp biA9IC0xOworICAgICAgICBmc2l6ID0gKENLX09GRl9UKS0xTDsJCS8qIEludmFsaWRhdGUgcHJl dmlvdXMgZmlsZSBzaXplICovCisgICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFO U0ZFUiwgKGxvbmcpIENXX1BDRCwgKGxvbmcpIDAgKTsKKyAgICAgICAgS3VpU2V0UHJvcGVydHko IEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfRkZDLCAobG9uZykgMCApOworICAgICAgICBL dWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19TSVosIChsb25nKSAw ICk7CisgICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENX X0VSUiwgKGxvbmcpICIiICk7CisKKyAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RS QU5TRkVSLCAobG9uZykgQ1dfTkFNLCAobG9uZykgcyApOworICAgICAgICBxID0gbGVuOyAgICAg ICAgICAgICAgICAgICAgICAgIC8qIFJlbWVtYmVyIG5hbWUgbGVuZ3RoIGZvciBsYXRlciAqLwor ICAgICAgICBzY3JmdCgpOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIERpc3BsYXkgZmlsZSB0 eXBlIChjYW4gY2hhbmdlKSAqLworI2lmZGVmIE9TMgorICAgICAgICBTYXZlQ21kTW9kZSgwLCAw KTsKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAgcmV0dXJuOworCisgICAgICBjYXNlIFNDUl9B TjogICAgICAgICAgICAgICAgICAgICAgLyogRmlsZSBhcy1uYW1lICovCisgICAgICAgIEt1aVNl dFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX05BTSwgKGxvbmcpIHMgKTsK KyNpZmRlZiBPUzIKKyAgICAgICAgU2F2ZUNtZE1vZGUoMCwgMCk7CisjZW5kaWYgLyogT1MyICov CisgICAgICAgIHJldHVybjsKKworICAgICAgY2FzZSBTQ1JfRlM6ICAgICAgICAgICAgICAgICAg ICAgIC8qIEZpbGUgc2l6ZSAqLworICAgICAgICBmc2l6ID0gbjsKKyAgICAgICAgaWYgKGZzaXog PiAoQ0tfT0ZGX1QpLTEpIHsKKyAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9U UkFOU0ZFUiwgKGxvbmcpIENXX1NJWiwgKGxvbmcpIG4gKTsKKyAgICAgICAgfQorICAgICAgICBp ZiAoZnNpeiA+IChDS19PRkZfVCktMSkgewkvKiBQdXQgdXAgcGVyY2VudCBsYWJlbCAqLworICAg ICAgICAgICAgcGN0bGJsID0gMTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHBjdGxi bCA9IDA7CisJfQorICAgICAgICBzY3JmdCgpOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZp bGUgdHlwZSAqLworI2lmZGVmIE9TMgorICAgICAgICBTYXZlQ21kTW9kZSgwLCAwKTsKKyNlbmRp ZiAvKiBPUzIgKi8KKyAgICAgICAgcmV0dXJuOworCisgICAgICBjYXNlIFNDUl9QVDogICAgICAg ICAgICAgICAgICAgICAgLyogUGFja2V0IHR5cGUgb3IgcHNldWRvdHlwZSAqLworICAgICAgICBp ZiAoc3BhY2tldHMgPCA1KSB7CisgICAgICAgICAgICBleHRlcm4gaW50IHN5c2luZGV4OworICAg ICAgICAgICAgZXh0ZXJuIHN0cnVjdCBzeXNkYXRhIHN5c2lkbGlzdFtdOworICAgICAgICAgICAg LyogVGhpbmdzIHRoYXQgd29uJ3QgY2hhbmdlIGFmdGVyIHRoZSA0dGggcGFja2V0ICovCisgICAg ICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAobG9uZykgQ1dfUEFSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg KGxvbmcpIHBhcm5hbSgoY2hhcilwYXJpdHkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAp OworICAgICAgICAgICAgaWYgKAorI2lmZGVmIE5FV0ZUUAorCQkoZnRwICYmIChzcGFja2V0cyA9 PSAxIHx8IHJwYWNrZXRzID09IDEpKSB8fAorI2VuZGlmIC8qIE5FV0ZUUCAqLworCQlzcGFja2V0 cyA9PSA0CisJCSkgeworICAgICAgICAgICAgICAgIGlmICgKKyNpZmRlZiBORVdGVFAKKwkJICAg IGZ0cCB8fAorI2VuZGlmIC8qIE5FV0ZUUCAqLworCQkgICAgKChwcm90b2NvbCA9PSBQUk9UT19L KSAmJiAoc3lzaW5kZXggPiAtMSkpCisJCSAgICApIHsKKyAgICAgICAgICAgICAgICAgICAgY2hh ciBtc2didWZbMTI4XTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5ldCkgeworICAgICAgICAg ICAgICAgICAgICAgICAgc3ByaW50Zihtc2didWYsIk5ldHdvcmsgSG9zdDogJXMgKCVzKSIsCisj aWZkZWYgTkVXRlRQCisJCQkgICAgICAgZnRwID8gKGZ0cF9ob3N0ID8gZnRwX2hvc3QgOiAiIikg OgorI2VuZGlmIC8qIE5FV0ZUUCAqLworCQkJICAgICAgIHR0bmFtZSwKKyNpZmRlZiBORVdGVFAK KwkJCSAgICAgICBmdHAgPyBmdHBfc3J2dHlwIDoKKyNlbmRpZiAvKiBORVdGVFAgKi8KKwkJCSAg ICAgICBzeXNpZGxpc3Rbc3lzaW5kZXhdLnNpZF9uYW1lCisJCQkgICAgICAgKTsKKyAgICAgICAg ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNwcmludGYobXNn YnVmLAorCQkJCSJDb21tdW5pY2F0aW9uIERldmljZTogJXMgKHJlbW90ZSBob3N0IGlzICVzKSIs CisJCQkJdHRuYW1lLAorCQkJCXN5c2lkbGlzdFtzeXNpbmRleF0uc2lkX25hbWUKKwkJCQkpOwor ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIEt1aVNldFByb3BlcnR5 KCBLVUlfRklMRV9UUkFOU0ZFUiwKKwkJCQkgICAgKGxvbmcpIENXX0xJTiwKKwkJCQkgICAgKGxv bmcpIG1zZ2J1ZgorCQkJCSAgICApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K KyAgICAgICAgfQorI2lmZGVmIENLX1RJTUVSUworICAgICAgICBpZiAoLyogcnR0ZmxnICYmICov IHByb3RvY29sID09IFBST1RPX0spIHsKKyAgICAgICAgICAgIGxvbmcgeHg7CisgICAgICAgICAg ICBpZiAoCisjaWZkZWYgU1RSRUFNSU5HCisgICAgICAgICAgICAgICAgc3RyZWFtaW5nICYmIG9s ZHdpbiAhPSAtMgorI2Vsc2UKKyAgICAgICAgICAgICAgICAwCisjZW5kaWYgLyogU1RSRUFNSU5H ICovCisgICAgICAgICAgICAgICAgKSB7CisgICAgICAgICAgICAgICAgY2hhciBtc2didWZbNjRd OworICAgICAgICAgICAgICAgIHNwcmludGYobXNnYnVmLCIwMCAvIDAwIik7CisgICAgICAgICAg ICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLAorCQkJCShsb25nKSBDV19U TU8sCisJCQkJKGxvbmcpIG1zZ2J1ZgorCQkJCSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAg ICAgICAgICAgICAgIHh4ID0gKHJ0dGRlbGF5ICsgNTAwKSAvIDEwMDA7CisgICAgICAgICAgICAg ICAgaWYgKHh4ICE9IG9sZHJ0dCB8fCByY3Z0aW1vICE9IG9sZHRpbSkgeworICAgICAgICAgICAg ICAgICAgICBjaGFyIG1zZ2J1Zls2NF07CisgICAgICAgICAgICAgICAgICAgIHNwcmludGYobXNn YnVmLCIlMDJsZCAvICUwMmQiLCB4eCwgcmN2dGltbyk7CisgICAgICAgICAgICAgICAgICAgIEt1 aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwKKwkJCQkgICAgKGxvbmcpIENXX1RNTywK KwkJCQkgICAgKGxvbmcpIG1zZ2J1ZgorCQkJCSAgICApOworICAgICAgICAgICAgICAgICAgICBv bGRydHQgPSB4eDsKKyAgICAgICAgICAgICAgICAgICAgb2xkdGltID0gcmN2dGltbzsKKyAgICAg ICAgICAgICAgICAgICAgY2xydG9lb2woKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICB9CisgICAgICAgIH0KKyNlbmRpZiAvKiBDS19USU1FUlMgKi8KKworICAgICAgICB4ID0gKHdo YXQgJiBXX1JFQ1YpID8gICAgICAgICAgLyogUGFja2V0IGxlbmd0aCAqLworICAgICAgICAgIHJw a3RsKyhwcm90b2NvbD09UFJPVE9fSz8xOjApIDoKKyAgICAgICAgICAgIHNwa3RsOworICAgICAg ICBpZiAoeCAhPSBvbGRsZW4pIHsgICAgICAgICAgICAgIC8qIEJ1dCBvbmx5IGlmIGl0IGNoYW5n ZWQuICovCisgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChs b25nKSBDV19QTCwgKGxvbmcpIHggKTsKKyAgICAgICAgICAgIG9sZGxlbiA9IHg7CisgICAgICAg IH0KKyAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1df UEMsIChsb25nKSBzcGFja2V0cyApOworCisgICAgICAgIGlmIChwcm90b2NvbCA9PSBQUk9UT19L ICYmICFmdHApIHsgLyogV2luZG93IHNsb3RzICovCisgICAgICAgICAgICBjaGFyIHdzWzE2XTsK KyAgICAgICAgICAgIGludCBmbGFnOworICAgICAgICAgICAgZmxhZyA9IDA7CisjaWZkZWYgU1RS RUFNSU5HCisgICAgICAgICAgICBpZiAoc3RyZWFtaW5nKSB7CisgICAgICAgICAgICAgICAgaWYg KG9sZHdpbiAhPSAtMikgeworICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKHdzLCJTVFJFQU1J TkciKTsKKyAgICAgICAgICAgICAgICAgICAgZmxhZyA9IDE7CisgICAgICAgICAgICAgICAgICAg IG9sZHdpbiA9IC0yOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZQorI2Vu ZGlmIC8qIFNUUkVBTUlORyAqLworICAgICAgICAgICAgICBpZiAod2N1ciAhPSBvbGR3aW4pIHsK KyAgICAgICAgICAgICAgICAgIHNwcmludGYod3MsICIlZCBvZiAlZCIsIHdjdXIgPCAxID8gMSA6 IHdjdXIsIHdzbG90bik7CisgICAgICAgICAgICAgICAgICBmbGFnID0gMTsKKyAgICAgICAgICAg ICAgICAgIG9sZHdpbiA9IHdjdXI7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChm bGFnKSB7CisgICAgICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVS LCAobG9uZykgQ1dfV1MsIChsb25nKSB3cyApOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg ICAgICAgIGVycm9ycyA9IHJldHJhbnMgKyBjcnVuY2hlZCArIHRpbWVvdXRzOworICAgICAgICBp ZiAoZXJyb3JzICE9IG9sZHRyeSkgeyAgICAgICAgIC8qIFJldHJ5IGNvdW50LCBpZiBjaGFuZ2Vk ICovCisgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25n KSBDV19QUiwgKGxvbmcpIGVycm9ycyApOworICAgICAgICAgICAgb2xkdHJ5ID0gZXJyb3JzOwor ICAgICAgICB9CisJLyogU2VuZGVyJ3MgcGFja2V0IHR5cGUgKi8KKyAgICAgICAgaWYgKCFmdHAg JiYgKGMgIT0gb2xkdHlwICYmIGMgIT0gJ1knICYmIGMgIT0gJ04nKSkgeworICAgICAgICAgICAg Y2hhciB0eXBlWzJdOworICAgICAgICAgICAgc3ByaW50Zih0eXBlLCAiJWMiLGMpOworICAgICAg ICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfUFQsIChs b25nKSB0eXBlICk7CisgICAgICAgICAgICBvbGR0eXAgPSBjOworICAgICAgICB9CisgICAgICAg IHN3aXRjaCAoYykgeyAgICAgICAgICAgICAgICAgICAgLyogTm93IGhhbmRsZSBzcGVjaWZpYyBw YWNrZXQgdHlwZXMgKi8KKyAgICAgICAgICBjYXNlICdTJzogICAgICAgICAgICAgICAgICAgICAv KiBCZWdpbm5pbmcgb2YgdHJhbnNmZXIgKi8KKyAgICAgICAgICAgIGZjbnQgPSBmYnl0ID0gMEw7 ICAgICAgICAgICAvKiBDbGVhciBjb3VudGVycyAqLworI2lmZGVmIEdGVElNRVIKKyAgICAgICAg ICAgIGd0diA9IC0xLjA7CisjZWxzZSAvKiBHRlRJTUVSICovCisgICAgICAgICAgICBndHYgPSAt MUw7ICAgICAgICAgICAgICAgICAgLyogQW5kIG9sZC9uZXcgdGhpbmdzLi4uICovCisjZW5kaWYg LyogR0ZUSU1FUiAqLworICAgICAgICAgICAgb2xkcGN0ID0gcGN0ID0gMEw7CisgICAgICAgICAg ICBicmVhazsKKworICAgICAgICAgIGNhc2UgJ1onOiAgICAgICAgICAgICAgICAgICAgIC8qIG9y IEVPRiAqLworICAgICAgICAgICAgZGVidWcoRjEwMSwic2NyZWVuZyBTQ1JfUFQgWiBwa3RudW0i LCIiLG4pOworICAgICAgICAgICAgZGVidWcoRjEwMSwic2NyZWVuZyBTQ1JfUFQgWiBvbGRwY3Qi LCIiLG9sZHBjdCk7CisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJzY3JlZW5nIFNDUl9QVCBaIHBj dCIsIiIscGN0KTsKKyAgICAgICAgICBjYXNlICdEJzogICAgICAgICAgICAgICAgICAgICAvKiBE YXRhIHBhY2tldCAqLworICAgICAgICAgICAgaWYgKGZzaXogPiAwTCkgeyAgICAgICAgICAgIC8q IFNob3cgcGVyY2VudCBkb25lIGlmIGtub3duICovCisgICAgICAgICAgICAgICAgb2xkcGN0ID0g cGN0OyAgICAgICAgICAgLyogUmVtZW1iZXIgcHJldmlvdXMgcGVyY2VudCAqLworICAgICAgICAg ICAgICAgIGhvd2ZhciA9IGZmYzsKKyNpZmRlZiBDS19SRVNFTkQKKyAgICAgICAgICAgICAgICBp ZiAod2hhdCAmIFdfU0VORCkJLyogQWNjb3VudCBmb3IgUFNFTkQgb3IgUkVTRU5EICovCisgICAg ICAgICAgICAgICAgICBob3dmYXIgKz0gc2VuZHN0YXJ0OworICAgICAgICAgICAgICAgIGVsc2Ug aWYgKHdoYXQgJiBXX1JFQ1YpCisgICAgICAgICAgICAgICAgICBob3dmYXIgKz0gcnNfbGVuOwor I2VuZGlmIC8qIENLX1JFU0VORCAqLworICAgICAgICAgICAgICAgIC8qIFBlcmNlbnQgZG9uZSwg dG8gYmUgZGlzcGxheWVkLi4uICovCisgICAgICAgICAgICAgICAgaWYgKGMgPT0gJ1onKSB7Cisg ICAgICAgICAgICAgICAgICAgIGlmICghZGlzY2FyZCAmJiAhY3hzZWVuICYmICFjenNlZW4pIHBj dCA9IDEwMEw7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICBwY3Qg PSAoZnNpeiA+IDk5TCkgPyAoaG93ZmFyIC8gKGZzaXogLyAxMDBMKSkgOiAwTDsKKyAgICAgICAg ICAgICAgICBpZiAocGN0ID4gMTAwTCB8fCAgICAgICAvKiBBbGxvdyBmb3IgZXhwYW5zaW9uIGFu ZCAqLworICAgICAgICAgICAgICAgICAgIChvbGRwY3QgPT0gOTlMICYmIHBjdCA8IDBMKSkgLyog b3RoZXIgYm91bmRhcnkgY29uZGl0aW9ucyAqLworICAgICAgICAgICAgICAgICAgcGN0ID0gMTAw TDsKKyAgICAgICAgICAgICAgICBpZiAocGN0ICE9IG9sZHBjdCkgICAgICAvKiBPbmx5IGRvIHRo aXMgMTAwIHRpbWVzIHBlciBmaWxlICovCisgICAgICAgICAgICAgICAgICB1cGRwY3Qob2xkcGN0 LCBwY3QpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBLdWlTZXRQcm9w ZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX0ZGQywgKGxvbmcpIGZmYyk7CisgICAg ICAgICAgICB9CisgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwg KGxvbmcpIENXX0ZGQywgKGxvbmcpIGhvd2Zhcik7CisgICAgICAgICAgICBjcHMgPSBzaG9jcHMo KGludCkgcGN0LCBmc2l6LCBob3dmYXIpOworICAgICAgICAgICAgLyogb2xkX3RyID0gc2hvZXRs KG9sZF90ciwgY3BzLCBmc2l6LCBob3dmYXIpOyAqLworICAgICAgICAgICAgYnJlYWs7CisKKyAg ICAgICAgICBjYXNlICclJzogICAgICAgICAgICAgICAgICAgICAvKiBUaW1lb3V0cywgcmV0cmFu c21pc3Npb25zICovCisgICAgICAgICAgICBjcHMgPSBzaG9jcHMoKGludCkgcGN0LCBmc2l6LCBo b3dmYXIpOworICAgICAgICAgICAgLyogb2xkX3RyID0gc2hvZXRsKG9sZF90ciwgY3BzLCBmc2l6 LCBob3dmYXIpOyAqLworCisgICAgICAgICAgICBlcnJvcnMgPSByZXRyYW5zICsgY3J1bmNoZWQg KyB0aW1lb3V0czsKKyAgICAgICAgICAgIGlmIChlcnJvcnMgIT0gb2xkdHJ5KSB7ICAgICAvKiBF cnJvciBjb3VudCwgaWYgY2hhbmdlZCAqLworICAgICAgICAgICAgICAgIEt1aVNldFByb3BlcnR5 KEtVSV9GSUxFX1RSQU5TRkVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25n KSBDV19QUiwKKwkJCSAgICAgICAobG9uZykgZXJyb3JzCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgb2xkdHJ5ID0g ZXJyb3JzOworICAgICAgICAgICAgICAgIGlmIChzKSBpZiAoKnMpIHsKKyAgICAgICAgICAgICAg ICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19FUlIsIChs b25nKSBzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAg Y2FzZSAnRSc6ICAgICAgICAgICAgICAgICAgICAgLyogRXJyb3IgcGFja2V0ICovCisgICAgICAg ICAgICBpZiAoKnMpIHsKKyAgICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVf VFJBTlNGRVIsIChsb25nKSBDV19FUlIsIChsb25nKSBzICk7CisgICAgICAgICAgICB9CisgICAg ICAgICAgICBmY250ID0gZmJ5dCA9IDBMOyAgICAgICAgICAgLyogU28gbm8gYnl0ZXMgZm9yIHRo aXMgZmlsZSAqLworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSAnUSc6ICAgICAg ICAgICAgICAgICAgICAgLyogQ3J1bmNoZWQgcGFja2V0ICovCisgICAgICAgICAgICBjcHMgPSBz aG9jcHMoKGludCkgcGN0LCBmc2l6LCBob3dmYXIpOworICAgICAgICAgICAgLyogb2xkX3RyID0g c2hvZXRsKG9sZF90ciwgY3BzLCBmc2l6LCBob3dmYXIpOyAqLworICAgICAgICAgICAgS3VpU2V0 UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAo bG9uZykgQ1dfRVJSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpICJEYW1hZ2Vk IFBhY2tldCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICBicmVh azsKKyAgICAgICAgICBjYXNlICdxJzogICAgICAgICAgICAgICAgICAgICAvKiBDdHJsLUMgb3Ig Y29ubmVjdGlvbiBsb3N0ICovCisgICAgICAgICAgICBpZiAoIXMpIHMgPSAiIjsKKyAgICAgICAg ICAgIGlmICghKnMpIHMgPSAiVXNlciBpbnRlcnJ1cHRpb24gb3IgY29ubmVjdGlvbiBsb3N0IjsK KyAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX01TRywKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIChsb25nKSBzCisgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAg YnJlYWs7CisgICAgICAgICAgY2FzZSAnVCc6ICAgICAgICAgICAgICAgICAgICAgLyogVGltZW91 dCAqLworICAgICAgICAgICAgY3BzID0gc2hvY3BzKChpbnQpIHBjdCwgZnNpeiwgaG93ZmFyKTsK KyAgICAgICAgICAgIC8qIG9sZF90ciA9IHNob2V0bChvbGRfdHIsIGNwcywgZnNpeiwgaG93ZmFy KTsgKi8KKyAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX0VSUiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIChsb25nKSAiVGltZW91dCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICk7 CisgICAgICAgICAgICBlcnJvcnMgPSByZXRyYW5zICsgY3J1bmNoZWQgKyB0aW1lb3V0czsKKyAg ICAgICAgICAgIGlmIChlcnJvcnMgIT0gb2xkdHJ5KSB7ICAgICAvKiBFcnJvciBjb3VudCwgaWYg Y2hhbmdlZCAqLworICAgICAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5T RkVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19QUiwgKGxvbmcp IGVycm9ycworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAg ICAgb2xkdHJ5ID0gZXJyb3JzOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgLyogT3RoZXJzLCBkbyBub3Ro aW5nICovCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorI2lmZGVmIE9TMgorICAgICAg ICBTYXZlQ21kTW9kZSgwLCAwKTsKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAgcmV0dXJuOwor CisgICAgICBjYXNlIFNDUl9TVDogICAgICAgICAgICAgICAgICAgICAgLyogRmlsZSB0cmFuc2Zl ciBzdGF0dXMgKi8KKyAgICAgICAgZGVidWcoRjEwMSwic2NyZWVuZyBTQ1JfU1QgYyIsIiIsYyk7 CisgICAgICAgIGRlYnVnKEYxMDEsInNjcmVlbmcgU0NSX1NUIHN1Y2Nlc3MiLCIiLHN1Y2Nlc3Mp OworICAgICAgICBkZWJ1ZyhGMTAxLCJzY3JlZW5nIFNDUl9TVCBjeHNlZW4iLCIiLGN4c2Vlbik7 CisjaWZkZWYgQ09NTUVOVAorICAgICAgICBpZiAoYyA9PSBTVF9PSykgeyAgICAgICAgICAgICAg IC8qIE9LLCBwcmludCAxMDAgJSAqLworICAgICAgICAgICAgaWYgKHBjdGxibCkKKyAgICAgICAg ICAgICAgdXBkcGN0KG9sZHBjdCwxMDApOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg ICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfRkZDLCAobG9u ZykgZmZjKTsKKyAgICAgICAgICAgIHBjdCA9IDEwMDsKKyAgICAgICAgICAgIG9sZHBjdCA9IDA7 CisgICAgICAgIH0gZWxzZSBpZiAoZnNpeiA+IDBMKSAgICAgICAgICAgLyogTm90IE9LLCB1cGRh dGUgZmluYWwgcGVyY2VudCAqLworLyoKKyAgVGhlIGVsc2UgcGFydCB3cml0ZXMgYWxsIG92ZXIg dGhlIHNjcmVlbiAtLSBob3dmYXIgYW5kL29yIGZzaXogaGF2ZQorICBiZWVuIHJlc2V0IGFzIGEg Y29uc2VxdWVuY2Ugb2YgdGhlIG5vdC1PS25lc3Mgb2YgdGhlIHRyYW5zZmVyLgorKi8KKyAgICAg ICAgICBpZiAocGN0bGJsKQorICAgICAgICAgICAgdXBkcGN0KG9sZHBjdCwgKGhvd2ZhciAqIDEw MEwpIC8gZnNpeik7CisjZWxzZQorICAgICAgICBpZiAoYyA9PSBTVF9PSykgeyAgICAgICAgICAg ICAgIC8qIE9LLCBwcmludCAxMDAgJSAqLworICAgICAgICAgICAgaWYgKHBjdGxibCkgeworCQl1 cGRwY3Qob2xkcGN0LDEwMCk7CisJICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIEt1aVNldFBy b3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfRkZDLCAobG9uZykgZmZjKTsKKyNp ZmRlZiBDT01NRU5UCisgICAgICAgICAgICBwY3QgPSAxMDA7CisgICAgICAgICAgICBvbGRwY3Qg PSAwOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAgfQorI2VuZGlmIC8qIENPTU1FTlQg Ki8KKworICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBD V19UUiwgKGxvbmcpICIiICk7CisKKyAgICAgICAgc3dpdGNoIChjKSB7ICAgICAgICAgICAgICAg ICAgICAvKiBQcmludCBuZXcgc3RhdHVzIG1lc3NhZ2UgKi8KKyAgICAgICAgICBjYXNlIFNUX09L OiAgICAgICAgICAgICAgICAgICAvKiBUcmFuc2ZlciBPSyAqLworICAgICAgICAgICAgZmNudCsr OyAgICAgICAgICAgICAgICAgICAgIC8qIENvdW50IHRoaXMgZmlsZSAqLworCSAgICBpZiAod2hh dCA9PSAoV19GVFB8V19GVF9ERUxFKSkgeworICAgICAgICAgICAgICAgIEt1aVNldFByb3BlcnR5 KEtVSV9GSUxFX1RSQU5TRkVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9u ZykgQ1dfTVNHLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgIkRlbGV0 ZSBPSyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKwkgICAgfSBlbHNlIHsK KwkJZmJ5dCArPSBmZmM7CisgICAgICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVf VFJBTlNGRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19NU0cs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSAiVHJhbnNmZXIgT0siCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisJICAgIH0KKyAgICAgICAgICAgIHJl dHVybjsKKworICAgICAgICAgIGNhc2UgU1RfRElTQzogICAgICAgICAgICAgICAgIC8qIERpc2Nh cmRlZCAqLworICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgQ1dfRVJSLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgKGxvbmcpICJGaWxlIGRpc2NhcmRlZCIKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICk7CisjaWZkZWYgQ09NTUVOVAorICAgICAgICAgICAgcGN0ID0gb2xkcGN0ID0gMDsK KyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICBj YXNlIFNUX0lOVDogICAgICAgICAgICAgICAgICAvKiBJbnRlcnJ1cHRlZCAqLworICAgICAgICAg ICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAobG9uZykgQ1dfRVJSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcp ICJUcmFuc2ZlciBpbnRlcnJ1cHRlZCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Cisj aWZkZWYgQ09NTUVOVAorICAgICAgICAgICAgcGN0ID0gb2xkcGN0ID0gMDsKKyNlbmRpZiAvKiBD T01NRU5UICovCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY2FzZSBTVF9TS0lQOiB7 ICAgICAgICAgICAgICAgIC8qIFNraXBwZWQgKi8KKyAgICAgICAgICAgIGNoYXIgZXJyYnVmWzY0 XSA7CisJICAgIGlmIChuID4gMCAmJiBuIDwgbnNrcmVhc29uKQorICAgICAgICAgICAgICAgIHNw cmludGYoIGVycmJ1ZiwgIkZpbGUgc2tpcHBlZCwgKCVzKSIsIHNrcmVhc29uW25dICkgOworCSAg ICBlbHNlCisgICAgICAgICAgICAgICAgc3ByaW50ZiggZXJyYnVmLCAiRmlsZSBza2lwcGVkIiAp IDsKKyAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX0VSUiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIChsb25nKSBlcnJidWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisjaWZk ZWYgQ09NTUVOVAorICAgICAgICAgICAgcGN0ID0gb2xkcGN0ID0gMDsKKyNlbmRpZiAvKiBDT01N RU5UICovCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgICBjYXNlIFNU X0VSUjogICAgICAgICAgICAgICAgICAvKiBFcnJvciBtZXNzYWdlICovCisgICAgICAgICAgICBp ZiAoIXMpIHMgPSAoY2hhciAqKWVwa3Rtc2c7CisgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eSgg S1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19FUlIsIChsb25nKSBzICk7CisjaWZkZWYgQ09N TUVOVAorICAgICAgICAgICAgcGN0ID0gb2xkcGN0ID0gMDsKKyNlbmRpZiAvKiBDT01NRU5UICov CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICBjYXNlIFNUX1JFRlU6ICAgICAgICAg ICAgICAgICAvKiBSZWZ1c2VkICovCisgICAgICAgICAgICBpZiAoKnMpIHsKKyAgICAgICAgICAg ICAgICBjaGFyIGVycmJ1Zls2NF0gOworICAgICAgICAgICAgICAgIHNwcmludGYoIGVycmJ1Ziwg IlJlZnVzZWQsICVzIiwgcyApIDsKKyAgICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlf RklMRV9UUkFOU0ZFUiwobG9uZykgQ1dfRVJSLChsb25nKSBlcnJidWYpOworICAgICAgICAgICAg fSBlbHNlIHsKKyAgICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZF UiwobG9uZylDV19FUlIsKGxvbmcpIlJlZnVzZWQiKTsKKyAgICAgICAgICAgIH0KKyNpZmRlZiBD T01NRU5UCisgICAgICAgICAgICBwY3QgPSBvbGRwY3QgPSAwOworI2VuZGlmIC8qIENPTU1FTlQg Ki8KKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgIGNhc2UgU1RfSU5DOgorICAgICAg ICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsKGxvbmcpQ1dfRVJSLChsb25n KSJJbmNvbXBsZXRlIik7CisjaWZkZWYgQ09NTUVOVAorICAgICAgICAgICAgcGN0ID0gb2xkcGN0 ID0gMDsKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAg ICAgICBjYXNlIFNUX01TRzoKKyAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RS QU5TRkVSLChsb25nKUNXX01TRywobG9uZylzKTsKKyAgICAgICAgICAgIHJldHVybjsKKworICAg ICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgIC8qIEJhZCBjYWxsICovCisgICAg ICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19FUlIs CisgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSAiKioqIHNjcmVlbigpIGNhbGxlZCB3aXRo IGJhZCBzdGF0dXMgKioqIiApOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAg ICAgIGNhc2UgU0NSX1RDOiB7ICAgICAgICAgICAgICAgICAgICAvKiBUcmFuc2FjdGlvbiBjb21w bGV0ZSAqLworICAgICAgICAgIGNoYXIgbXNnYnVmWzEyOF07CisgICAgICAgICAgS3VpU2V0UHJv cGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfQ1AsIHRmY3BzKTsKKyAgICAgICAg ICBpZiAoc3VjY2VzcykgeworICAgICAgICAgICAgICBzcHJpbnRmKG1zZ2J1ZiwKKyAgICAgICAg ICAgICAgICAgICAgICAiU1VDQ0VTUy4gIEZpbGVzOiAlcywgQnl0ZXM6ICVsZCwgJWxkIENQUyIs CisgICAgICAgICAgICAgICAgICAgICAgZmlsY250IC0gZmlscmVqLAorICAgICAgICAgICAgICAg ICAgICAgIGNrZnN0b2EoZmJ5dCksCisgICAgICAgICAgICAgICAgICAgICAgdGZjcHMKKyAgICAg ICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklM RV9UUkFOU0ZFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX01TRywK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIG1zZ2J1ZgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICApOworICAgICAgICAgIH0KKyAgICAgICAgICBLdWlTZXRQcm9wZXJ0 eShLVUlfRklMRV9UUkFOU0ZFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgQ1df VFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIGhobW1zcygobG9uZykKKyNpZmRl ZiBHRlRJTUVSCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZnB0c2Vj cyArIDAuNSkKKyNlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0 c2VjcworI2VuZGlmIC8qIEdGVElNRVIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICkpOworCisjaWZkZWYgR0ZUSU1FUgorICAgICAgICAgIG9sZGd0diA9IChDS0ZM T0FUKSAtMS4wOworI2Vsc2UKKyAgICAgICAgICBvbGRndHYgPSAtMUw7CisjZW5kaWYgLyogR0ZU SU1FUiAqLworCisjaWZkZWYgQ09NTUVOVAorICAgICAgICAgIHBjdCA9IDEwMDsgb2xkcGN0ID0g MDsgICAgICAgIC8qIFJlc2V0IHRoZXNlIGZvciBuZXh0IHRpbWUuICovCisjZW5kaWYgLyogQ09N TUVOVCAqLworICAgICAgICAgIG9sZHR5cCA9IDA7IG9sZHJ0dCA9IC0xTDsgb2xkdHJ5ID0gLTE7 IG9sZGxlbiA9IC0xOworICAgICAgICAgIG9sZHRpbSA9IC0xOworICAgICAgICAgIGNlbmR3ID0g MTsKKyAgICAgICAgICBpZiAoeGZyYmVsKSBibGVlcChCUF9OT1RFKTsgICAvKiBDbG9zZSB3aW5k b3csIHRoZW4gYmVlcC4gKi8KKyAgICAgICAgICBmdF93aW4gPSAwOyAgICAgICAgICAgICAgICAg ICAvKiBXaW5kb3cgY2xvc2VkLiAqLworICAgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICAg IGNhc2UgU0NSX0VNOiAgICAgICAgICAgICAgICAgICAgICAvKiBFcnJvciBwYWNrZXQgKGZhdGFs KSAqLworICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBD V19FUlIsIChsb25nKSBzICk7CisgICAgICAgIGlmICh4ZnJiZWwpIGJsZWVwKEJQX0ZBSUwpOwor I2lmZGVmIENPTU1FTlQKKyAgICAgICAgcGN0ID0gb2xkcGN0ID0gMDsKKyNlbmRpZiAvKiBDT01N RU5UICovCisgICAgICAgIHJldHVybjsKKworICAgICAgY2FzZSBTQ1JfUUU6ICAgICAgICAgICAg ICAgICAgICAgIC8qIFF1YW50aXR5IGVxdWFscyAqLworICAgICAgY2FzZSBTQ1JfVFU6ICAgICAg ICAgICAgICAgICAgICAgIC8qIFVuZGVsaW1pdGVkIHRleHQgKi8KKyAgICAgIGNhc2UgU0NSX1RO OiAgICAgICAgICAgICAgICAgICAgICAvKiBUZXh0IGRlbGltaXRlZCBhdCBzdGFydCAqLworICAg ICAgY2FzZSBTQ1JfVFo6ICAgICAgICAgICAgICAgICAgICAgIC8qIFRleHQgZGVsaW1pdGVkIGF0 IGVuZCAqLworICAgICAgICByZXR1cm47ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIChpZ25v cmVkIGluIGZ1bGxzY3JlZW4gZGlzcGxheSkgKi8KKworICAgICAgY2FzZSBTQ1JfWEQ6ICAgICAg ICAgICAgICAgICAgICAgIC8qIFgtcGFja2V0IGRhdGEgKi8KKyAgICAgICAgcGN0ID0gb2xkcGN0 ID0gMDsKKyAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykg Q1dfTkFNLCAobG9uZykgcyApOworICAgICAgICByZXR1cm47CisKKyAgICAgIGNhc2UgU0NSX0NX OiAgICAgICAgICAgICAgICAgICAgICAvKiBDbG9zZSBXaW5kb3cgKi8KKyNpZmRlZiBDT01NRU5U CisgICAgICAgIHBjdCA9IDEwMDsgb2xkcGN0ID0gMDsgICAgICAgICAgLyogUmVzZXQgdGhlc2Ug Zm9yIG5leHQgdGltZS4gKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgICAgIG9sZHR5cCA9 IDA7IG9sZHJ0dCA9IC0xTDsgb2xkdHJ5ID0gLTE7IG9sZGxlbiA9IC0xOworICAgICAgICBvbGR0 aW0gPSAtMTsKKworICAgICAgICBmdF93aW4gPSAwOyAgICAgICAgICAgICAgICAgICAgIC8qIEZs YWcgdGhhdCB3aW5kb3cgaXMgY2xvc2VkLiAqLworICAgICAgICBjZW5kdyA9IDE7IHJldHVybjsK KworICAgICAgY2FzZSBTQ1JfQ0Q6ICAgICAgICAgICAgICAgICAgICAgIC8qIERpc3BsYXkgY3Vy cmVudCBkaXJlY3RvcnkgKi8KKyAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5T RkVSLCAobG9uZykgQ1dfRElSLCAobG9uZykgcyApOworI2lmZGVmIE9TMgorICAgICAgICBTYXZl Q21kTW9kZSgwLCAwKTsKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAgcmV0dXJuOworCisgICAg ICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQmFkIGNhbGwgKi8KKyAgICAg ICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCisgICAgICAgICAgICAgICAgICAg ICAgIChsb25nKSBDV19FUlIsCisgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSAiKioqIHNj cmVlbigpIGNhbGxlZCB3aXRoIGJhZCBmdW5jdGlvbiBjb2RlICoqKiIKKyAgICAgICAgICAgICAg ICAgICAgICAgKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKyNlbmRpZiAvKiBLVUkgKi8K KyNlbmRpZiAvKiBNQUMgKi8KKworI2VuZGlmIC8qIE5PWEZFUiAqLworCisjaWZuZGVmIENLX0NV UlBPUworLyogRHVtbWllcyBmb3Igd2hlbiBjdXJzb3IgY29udHJvbCBpcyBub3Qgc3VwcG9ydGVk ICovCitpbnQKK2NrX2N1cnBvcyhyb3csIGNvbCkgeworICAgIHJldHVybigtMSk7Cit9CisKK2lu dAorY2tfY2xzKCkgeworICAgIHJldHVybigtMSk7Cit9CisKK2ludAorY2tfY2xlb2woKSB7Cisg ICAgcmV0dXJuKC0xKTsKK30KKyNlbmRpZiAvKiBDS19DVVJQT1MgKi8KKworI2lmbmRlZiBOT0lL U0QKKyNpZmRlZiBJS1NEQgorCitzdHJ1Y3QgaWtzZGJmbGQgZGJmbGRbXSA9IHsKKyAgIC8qIE9m ZnNldCAgICBMZW5ndGggICAgVHlwZSAgICovCisgICAgeyBEQl9GTEFHUywgZEJfRkxBR1MsIERC VF9IRVggfSwgICAgLyogIDAgZGJfRkxBR1MgRmxhZ3MgKi8KKyAgICB7IERCX0FUWVBFLCBkQl9B VFlQRSwgREJUX0hFWCB9LCAgICAvKiAgMSBkYl9BVFlQRSBBdXRoIHR5cGUgKi8KKyAgICB7IERC X0FNT0RFLCBkQl9BTU9ERSwgREJUX0hFWCB9LCAgICAvKiAgMyBkYl9BTU9ERSBBdXRoIG1vZGUg Ki8KKyAgICB7IERCX1NUQVRFLCBkQl9TVEFURSwgREJUX0hFWCB9LCAgICAvKiAgMiBkYl9TVEFU RSBTdGF0ZSAqLworICAgIHsgREJfTVlQSUQsIGRCX01ZUElELCBEQlRfSEVYIH0sICAgIC8qICA1 IGRiX01ZUElEIFBJRCAqLworICAgIHsgREJfU0FERFIsIGRCX1NBRERSLCBEQlRfSEVYIH0sICAg IC8qICA0IGRiX1NBRERSIFNlcnZlciBhZGRyZXNzICovCisgICAgeyBEQl9DQUREUiwgZEJfQ0FE RFIsIERCVF9IRVggfSwgICAgLyogIDYgZGJfQ0FERFIgQ2xpZW50IGFkZHJlc3MgKi8KKyAgICB7 IERCX1NUQVJULCBkQl9TVEFSVCwgREJUX0RBVCB9LCAgICAvKiAgNyBkYl9TVEFSVCBTZXNzaW9u IHN0YXJ0ICovCisgICAgeyBEQl9MQVNUVSwgZEJfTEFTVFUsIERCVF9EQVQgfSwgICAgLyogIDgg ZGJfTEFTVFUgTGFzdCB1cGRhdGUgKi8KKyAgICB7IERCX1VMRU4sICBkQl9VTEVOLCAgREJUX0hF WCB9LCAgICAvKiAgOSBkYl9VTEVOICBVc2VybmFtZSBsZW5ndGggKi8KKyAgICB7IERCX0RMRU4s ICBkQl9ETEVOLCAgREJUX0hFWCB9LCAgICAvKiAxMCBkYl9ETEVOICBEaXJlY3RvcnkgbmFtZSBs ZW5ndGggKi8KKyAgICB7IERCX0lMRU4sICBkQl9JTEVOLCAgREJUX0hFWCB9LCAgICAvKiAxMSBk Yl9JTEVOICBJbmZvIGxlbmd0aCAqLworICAgIHsgREJfUEFEMSwgIGRCX1BBRDEsICBEQlRfVU5E IH0sICAgIC8qIDEyIGRiX1BBRDEgIChSZXNlcnZlZCkgKi8KKyAgICB7IERCX1VTRVIsICBkQl9V U0VSLCAgREJUX1NUUiB9LCAgICAvKiAxMyBkYl9VU0VSICBVc2VybmFtZSAqLworICAgIHsgREJf RElSLCAgIGRCX0RJUiwgICBEQlRfU1RSIH0sICAgIC8qIDE0IGRiX0RJUiAgIEN1cnJlbnQgRGly ZWN0b3J5ICovCisgICAgeyBEQl9JTkZPLCAgZEJfSU5GTywgIERCVF9TVFIgfSAgICAgLyogMTUg ZGJfSU5GTyAgU3RhdGUtc3BlY2lmaWMgaW5mbyAqLworfTsKKworc3RhdGljIGNoYXIgbGNrbmFt W0NLTUFYUEFUSCsxXTsgICAgICAgIC8qIExvY2tmaWxlIHBhdGhuYW1lICovCitzdGF0aWMgY2hh ciB0bXBsY2tbQ0tNQVhQQVRIKzFdOyAgICAgICAgLyogVGVtcG9yYXJ5IGxvY2tmaWxlIG5hbWUg Ki8KKworc3RhdGljIGNoYXIgKiB1cGRtb2RlID0gICAgICAgICAgICAgICAgIC8qIFVwZGF0ZSBt b2RlIGZvciBmb3BlbigpICovCisjaWZkZWYgT1MyCisgICJyK2IiCisjZWxzZQorI2lmZGVmIFZN UworICAicitiIgorI2Vsc2UKKyAgInIrIgorI2VuZGlmIC8qIFZNUyAqLworI2VuZGlmIC8qIE9T MiAqLworICA7CisKKy8qICBEIEIgSSBOIEkgVCAgLS0gIEluaXRpYWxpemUgdGhlIElLU0QgZGF0 YWJhc2UuLi4gICovCisKK2ludAorZGJpbml0KCkgeworICAgIGV4dGVybiBpbnQgZGJpbml0ZWQ7 CisgICAgaW50IHggPSAwOworICAgIGRlYnVnKEYxMTAsImRiaW5pdCBkYmRpciAxIixkYmRpciww KTsKKyAgICBkZWJ1ZyhGMTEwLCJkYmluaXQgZGJmaWxlIDEiLGRiZmlsZSwwKTsKKyAgICBpZiAo ZGJpbml0ZWQpCisgICAgICByZXR1cm4oMCk7CisjaWZkZWYgT1MyCisgICAgaWYgKCFkYmRpcikg eworI2lmZGVmIE5UCisgICAgICAgIGNoYXIgKiBwID0gTlVMTDsKKyAgICAgICAgaWYgKCFpc1dp bjk1KCkpIHsKKyAgICAgICAgICAgIHAgPSBnZXRlbnYoIlN5c3RlbVJvb3QiKTsKKyAgICAgICAg fSBlbHNlIHsKKyAgICAgICAgICAgIHAgPSBnZXRlbnYoIndpbmJvb3RkaXIiKTsKKyAgICAgICAg ICAgIGlmICghcCkgIHAgPSBnZXRlbnYoIndpbmRpciIpOworICAgICAgICB9CisgICAgICAgIGlm ICghcCkgcCA9ICJDOi8iOworICAgICAgICBkYmRpciA9IG1hbGxvYyhzdHJsZW4ocCkrMik7Cisg ICAgICAgIHN0cmNweShkYmRpcixwKTsJCS8qIHNhZmUgKi8KKyAgICAgICAgcCA9IGRiZGlyOwor ICAgICAgICB3aGlsZSAoKnApIHsKKyAgICAgICAgICAgIGlmICgqcCA9PSAnXFwnKQorICAgICAg ICAgICAgICAqcCA9ICcvJzsKKyAgICAgICAgICAgIHArKzsKKyAgICAgICAgfQorICAgICAgICBp ZiAoKihwLTEpICE9ICcvJyApIHsKKyAgICAgICAgICAgICpwKysgPSAnLyc7CisgICAgICAgICAg ICAqcCA9ICdcMCc7CisgICAgICAgIH0KKyNlbHNlIC8qIE5UICovCisgICAgICAgIG1ha2VzdHIo JmRiZGlyLCJDOi8iKTsKKyNlbmRpZiAvKiBOVCAqLworICAgIH0KKyNlbHNlIC8qIE9TMiAqLwor ICAgIGlmICghZGJkaXIpCisgICAgICBtYWtlc3RyKCZkYmRpcixJS19EQkFTRURJUik7CisjZW5k aWYgLyogT1MyICovCisKKyAgICBpZiAoIWRiZmlsZSkgeworICAgICAgICBjaGFyICogcyA9ICIi OworICAgICAgICB4ID0gc3RybGVuKGRiZGlyKTsKKyAgICAgICAgaWYgKGRiZGlyW3gtMV0gIT0g Jy8nKSB7CisgICAgICAgICAgICBzID0gIi8iOworICAgICAgICAgICAgeCsrOworICAgICAgICB9 CisgICAgICAgIHggKz0gKGludClzdHJsZW4oSUtfREJBU0VGSUwpOworICAgICAgICBkYmZpbGUg PSAoY2hhciAqKW1hbGxvYyh4KzEpOworICAgICAgICBzcHJpbnRmKGRiZmlsZSwiJXMlcyVzIixk YmRpcixzLElLX0RCQVNFRklMKTsKKyAgICB9CisgICAgZGVidWcoRjExMCwiZGJpbml0IGRiZGly IDIiLGRiZGlyLDApOworICAgIGRlYnVnKEYxMTAsImRiaW5pdCBkYmZpbGUgMiIsZGJmaWxlLDAp OworICAgIG15cGlkID0gZ2V0cGlkKCk7ICAgICAgICAgICAgICAgICAgIC8qIEdldCBteSBwaWQg Ki8KKyAgICBkZWJ1ZyhGMTAxLCJkYmluaXQgbXlwaWQiLCIiLG15cGlkKTsKKworICAgIGlmICgh bXloZXhpcFswXSkgeyAgICAgICAgICAgICAgICAgIC8qIFNldCBteSBoZXggSVAgYWRkcmVzcyAq LworI2lmZGVmIFRDUFNPQ0tFVAorICAgICAgICBleHRlcm4gdW5zaWduZWQgbG9uZyBteXhpcGFk ZHI7CisgICAgICAgIGlmIChnZXRsb2NhbGlwYWRkcigpID4gLTEpIHsKKyAgICAgICAgICAgIG15 aXAgPSBteXhpcGFkZHI7CisgICAgICAgICAgICBzcHJpbnRmKG15aGV4aXAsIiUwOGx4IixteWlw KTsgLyogKE5lZWRzIGZpeGluZyBmb3IgSVB2NikgKi8KKyAgICAgICAgfSBlbHNlCisjZW5kaWYg LyogVENQU09DS0VUICovCisgICAgICAgICAgY2tzdHJuY3B5KG15aGV4aXAsIjAwMDAwMDAwIiw5 KTsKKyAgICB9CisgICAgZGVidWcoRjExMSwiZGJpbml0IG15aXAiLG15aGV4aXAsbXlpcCk7Cisg ICAgaWYgKCFwZWVyaGV4aXBbMF0pIHsgICAgICAgICAgICAgICAgLyogR2V0IHBlZXIncyAgaGV4 IElQIGFkZHJlc3MgKi8KKyNpZmRlZiBUQ1BTT0NLRVQKKyAgICAgICAgZXh0ZXJuIHVuc2lnbmVk IGxvbmcgcGVlcnhpcGFkZHI7CisgICAgICAgIGlmIChja2dldHBlZXIoKSkgeworICAgICAgICAg ICAgcGVlcmlwID0gcGVlcnhpcGFkZHI7CisgICAgICAgICAgICBzcHJpbnRmKHBlZXJoZXhpcCwi JTA4bHgiLHBlZXJpcCk7IC8qIChOZWVkcyBmaXhpbmcgZm9yIElQdjYpICovCisgICAgICAgICAg ICBkZWJ1ZyhGMTExLCJkYmluaXQgcGVlcmlwIixwZWVyaGV4aXAscGVlcmlwKTsKKyAgICAgICAg fSBlbHNlIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMDEsImRiaW5pdCBja2dldHBlZXIgZmFpbHVy ZSIsIiIsZXJybm8pOworICAgICAgICAgICAgY2tzdHJuY3B5KHBlZXJoZXhpcCwiMDAwMDAwMDAi LDkpOworICAgICAgICB9CisjZWxzZQorICAgICAgICBja3N0cm5jcHkocGVlcmhleGlwLCIwMDAw MDAwMCIsOSk7CisjZW5kaWYgLyogVENQU09DS0VUICovCisgICAgfQorICAgIGRlYnVnKEYxMTEs ImRiaW5pdCBwZWVyaXAiLHBlZXJoZXhpcCxwZWVyaXApOworICAgIGRlYnVnKEYxMDEsImRiaW5p dCBkYmVuYWJsZWQiLCIiLGRiZW5hYmxlZCk7CisgICAgaWYgKGRiZW5hYmxlZCAmJiBpbnNlcnZl cikgeworICAgICAgICBteWRic2xvdCA9IGdldHNsb3QoKTsKKyAgICAgICAgZGVidWcoRjExMSwi ZGJpbml0IGdldHNsb3QiLGNraXRvYShpa2Rib3BlbikseCk7CisgICAgICAgIGlmIChpa2Rib3Bl bikgZGJpbml0ZWQgPSAxOworICAgIH0KKyAgICByZXR1cm4oMCk7Cit9CisKKy8qICBVIFAgRCBT IEwgTyBUICAtLSAgVXBkYXRlIHNsb3QgbiAgKi8KKworLyoKKyAgT3BlbnMgdGhlIGRhdGFiYXNl IGlmIG5lY2Vzc2FyeSwgc2Vla3MgdG8gc2xvdCBuLCB3cml0ZXMgY3VycmVudCByZWNvcmQKKyAg YW5kIGFkZHMgY3VycmVudCB0aW1lIHRvIGxhc3QtdXBkYXRlIGZpZWxkLiAgbiBpcyB0aGUgcmVj b3JkIHNlcXVlbmNlIG51bWJlcgorICAoMCwgMSwgMiwgLi4uKSwgbm90IHRoZSBzZWVrIHBvaW50 ZXIuICAgUmV0dXJucyAtMSBvbiBmYWlsdXJlLCAwIG9uIHN1Y2Nlc3MuCisqLworaW50Cit1cGRz bG90KG4pIGludCBuOyB7ICAgICAgICAgICAgICAgICAgICAgLyogVXBkYXRlIG91ciBzbG90ICov CisgICAgaW50IHJjID0gMDsKKyAgICBDS19PRkZfVCBwb3NpdGlvbjsKKworICAgIGRlYnVnKEYx MTEsInVwZHNsb3QiLCJpa2Rib3BlbiIsaWtkYm9wZW4pOworICAgIGlmICghaWtkYm9wZW4pICAg ICAgICAgICAgICAgICAgICAgIC8qIE5vdCBpZiBub3Qgb2sgKi8KKyAgICAgIHJldHVybigwKTsK KyAgICBpZiAoIWRiZnApIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBPcGVuIGRhdGFiYXNl IGlmIG5vdCBvcGVuICovCisgICAgICAgIGRiZnAgPSBmb3BlbihkYmZpbGUsdXBkbW9kZSk7ICAg LyogSW4gdXBkYXRlIG5vLXRydW5jYXRlIG1vZGUgKi8KKyAgICAgICAgaWYgKCFkYmZwKSB7Cisg ICAgICAgICAgICBkZWJ1ZyhGMTEwLCJ1cGRzbG90IGZvcGVuIGZhaWxlZCIsZGJmaWxlLDApOwor ICAgICAgICAgICAgaWtkYm9wZW4gPSAwOworICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAg ICAgfQorICAgIH0KKyAgICAvKiBkZWJ1ZyhGMTExLCJ1cGRzbG90IGRiZmlsZSIsZGJmaWxlLGRi ZnApOyAqLworICAgIHBvc2l0aW9uID0gbiAqIERCX1JFQ0w7CisgICAgaWYgKENLRlNFRUsoZGJm cCxwb3NpdGlvbiwwKSA8IDApIHsJLyogU2VlayB0byBkZXNpcmVkIHNsb3QgKi8KKyAgICAgICAg ZGVidWcoRjExMSwidXBkc2xvdCBmc2VlayBmYWlsZWQiLGRiZmlsZSxteWRic2Vlayk7CisgICAg ICAgIGlrZGJvcGVuID0gMDsKKyAgICAgICAgcmMgPSAtMTsKKyAgICB9IGVsc2UgeworICAgICAg ICAvKiBVcGRhdGUgdGhlIHVwZGF0ZSB0aW1lICovCisgICAgICAgIHN0cm5jcHkoJmRicmVjW2Ri ZmxkW2RiX0xBU1RVXS5vZmZdLAorICAgICAgICAgICAgICAgIGNrZGF0ZSgpLAorICAgICAgICAg ICAgICAgIGRiZmxkW2RiX0xBU1RVXS5sZW4KKyAgICAgICAgICAgICAgICApOworICAgICAgICBp ZiAoZndyaXRlKGRicmVjLDEsREJfUkVDTCxkYmZwKSA8IERCX1JFQ0wpIHsgLyogV3JpdGUgdGhl IHJlY29yZCAqLworICAgICAgICAgICAgZGVidWcoRjExMCwidXBkc2xvdCBmd3JpdGUgZmFpbGVk IixkYmZpbGUsMCk7CisgICAgICAgICAgICBpa2Rib3BlbiA9IDA7CisgICAgICAgICAgICByYyA9 IC0xOworICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZsdXNoIHRo ZSB3cml0ZSAqLworICAgICAgICAgICAgZmZsdXNoKGRiZnApOworICAgICAgICB9CisgICAgfQor ICAgIHJldHVybihyYyk7Cit9CisKKy8qICBJIE4gSSBUIFMgTCBPIFQgLS0gIEluaXRpYWxpemUg c2xvdCBuIHdpdGggbXkgaW5mbyAgKi8KKworaW50Citpbml0c2xvdChuKSBpbnQgbjsgeyAgICAg ICAgICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSBzbG90ICovCisgICAgaW50IGs7CisjaWZkZWYg VENQU09DS0VUCisgICAgZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcGVlcnhpcGFkZHI7CisjZW5kaWYg LyogVENQU09DS0VUICovCisKKyAgICBkZWJ1ZyhGMTAxLCJpbml0c2xvdCIsIiIsbik7CisKKyNp ZmRlZiBVU0VfTUVNQ1BZCisgICAgbWVtc2V0KGRicmVjLDMyLERCX1JFQ0wpOworI2Vsc2UKKyAg ICBmb3IgKGsgPSAwOyBrIDwgREJfUkVDTDsgaysrKQorICAgICAgZGJyZWNba10gPSAnXDA0MCc7 CisjZW5kaWYgLyogVVNFX01FTUNQWSAqLworCisgICAgbXlmbGFncyA9IERCRl9JTlVTRTsgICAg ICAgICAgICAgICAgLyogU2V0IGluLXVzZSBmbGFnICovCisgICAgbXlzdGF0ZSA9IFdfTk9USElO RzsKKyAgICBteWF0eXBlID0gMEw7CisgICAgbXlhbW9kZSA9IDBMOworCisgICAgayA9IGRiZmxk W2RiX0ZMQUdTXS5sZW47ICAgICAgICAgICAgLyogTGVuZ3RoIG9mIGZsYWdzIGZpZWxkICovCisg ICAgc3RybmNweSgmZGJyZWNbZGJmbGRbZGJfRkxBR1NdLm9mZl0sdWxvbmd0b2hleChteWZsYWdz LGspLGspOworCisgICAgayA9IGRiZmxkW2RiX0FUWVBFXS5sZW47CisgICAgc3RybmNweSgmZGJy ZWNbZGJmbGRbZGJfQVRZUEVdLm9mZl0sdWxvbmd0b2hleChteWF0eXBlLGspLGspOworCisgICAg ayA9IGRiZmxkW2RiX0FNT0RFXS5sZW47CisgICAgc3RybmNweSgmZGJyZWNbZGJmbGRbZGJfQU1P REVdLm9mZl0sdWxvbmd0b2hleChteWFtb2RlLGspLGspOworCisgICAgayA9IGRiZmxkW2RiX1NU QVRFXS5sZW47CisgICAgc3RybmNweSgmZGJyZWNbZGJmbGRbZGJfU1RBVEVdLm9mZl0sdWxvbmd0 b2hleChteXN0YXRlLGspLGspOworCisgICAgayA9IGRiZmxkW2RiX1NBRERSXS5sZW47CisgICAg c3RybmNweSgmZGJyZWNbZGJmbGRbZGJfU0FERFJdLm9mZl0sdWxvbmd0b2hleChteWlwLGspLGsp OworCisjaWZkZWYgVENQU09DS0VUCisgICAgY2tnZXRwZWVyKCk7CisgICAgayA9IGRiZmxkW2Ri X0NBRERSXS5sZW47CisgICAgc3RybmNweSgmZGJyZWNbZGJmbGRbZGJfQ0FERFJdLm9mZl0sdWxv bmd0b2hleChwZWVyeGlwYWRkcixrKSxrKTsKKyNlbHNlCisgICAgayA9IGRiZmxkW2RiX0NBRERS XS5sZW47CisgICAgc3RybmNweSgmZGJyZWNbZGJmbGRbZGJfQ0FERFJdLm9mZl0sdWxvbmd0b2hl eCgwTCxrKSxrKTsKKyNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KKworICAgIGsgPSBkYmZsZFtkYl9N WVBJRF0ubGVuOworICAgIHN0cm5jcHkoJmRicmVjW2RiZmxkW2RiX01ZUElEXS5vZmZdLHVsb25n dG9oZXgobXlwaWQsayksayk7CisKKyAgICBrID0gZGJmbGRbZGJfU1RBUlRdLmxlbjsKKyAgICBz dHJuY3B5KCZkYnJlY1tkYmZsZFtkYl9TVEFSVF0ub2ZmXSxja2RhdGUoKSxrKTsKKworICAgIGsg PSBkYmZsZFtkYl9VTEVOXS5sZW47CisgICAgc3RybmNweSgmZGJyZWNbZGJmbGRbZGJfVUxFTl0u b2ZmXSwiMDAwMCIsNCk7CisKKyAgICBrID0gZGJmbGRbZGJfRExFTl0ubGVuOworICAgIHN0cm5j cHkoJmRicmVjW2RiZmxkW2RiX0RMRU5dLm9mZl0sIjAwMDAiLDQpOworCisgICAgayA9IGRiZmxk W2RiX0lMRU5dLmxlbjsKKyAgICBzdHJuY3B5KCZkYnJlY1tkYmZsZFtkYl9JTEVOXS5vZmZdLCIw MDAwIiw0KTsKKworICAgIHN0cm5jcHkoJmRicmVjW2RiZmxkW2RiX0lORk9dLm9mZl0sIklOSVQi LDQpOworICAgIHJldHVybih1cGRzbG90KG4pKTsKK30KKworaW50CitzbG90c3RhdGUoeCxzMSxz MixzMykgaW50IHg7IGNoYXIgKnMxLCAqczIsICpzMzsgeworICAgIGludCBrLCBsMSwgbDIsIGwz LCB6OworICAgIG15c3RhdGUgPSB4OworICAgIGRlYnVnKEYxMDEsInNsb3RzdGF0ZSBpa2Rib3Bl biIsIiIsaWtkYm9wZW4pOworICAgIGlmICghaWtkYm9wZW4pCisgICAgICByZXR1cm4oLTEpOwor ICAgIGlmICghczEpIHMxID0gIiI7CisgICAgbDEgPSBzdHJsZW4oczEpOworICAgIGlmICghczIp IHMyID0gIiI7CisgICAgbDIgPSBzdHJsZW4oczIpOworICAgIGlmICghczMpIHMzID0gIiI7Cisg ICAgbDMgPSBzdHJsZW4oczMpOworICAgIHN0cm5jcHkoJmRicmVjW0RCX1NUQVRFXSx1bG9uZ3Rv aGV4KG15c3RhdGUsNCksNCk7CisgICAgayA9IGRiZmxkW2RiX0lMRU5dLmxlbjsKKyAgICB6ID0g bDEgKyBsMiArIGwzICsgMjsKKyAgICBpZiAoeiA+IGRCX0lORk8pCisgICAgICB6ID0gZEJfSU5G TzsKKyAgICBzdHJuY3B5KCZkYnJlY1tEQl9JTEVOXSx1bG9uZ3RvaGV4KCh1bnNpZ25lZCBsb25n KXosayksayk7CisgICAgayA9IGRiZmxkW2RiX0lORk9dLmxlbjsKKyAgICB6ID0gZGJmbGRbZGJf SU5GT10ub2ZmOworICAgIGlmIChsMSA8PSBrKSB7CisgICAgICAgIGxzZXQoJmRicmVjW3pdLHMx LGwxKzEsMzIpOworICAgICAgICB6ICs9IGwxKzE7CisgICAgICAgIGsgLT0gbDErMTsKKyAgICAg ICAgaWYgKGwyIDw9IGspIHsKKyAgICAgICAgICAgIGxzZXQoJmRicmVjW3pdLHMyLGwyKzEsMzIp OworICAgICAgICAgICAgeiArPSBsMisxOworICAgICAgICAgICAgayAtPSBsMisxOworICAgICAg ICAgICAgaWYgKGwzIDw9IGspCisgICAgICAgICAgICAgIGxzZXQoJmRicmVjW3pdLHMzLGssMzIp OworICAgICAgICB9CisgICAgfQorI2lmZGVmIERFQlVHCisgICAgaWYgKGRlYmxvZykgeworICAg ICAgICBjaGFyIGJ1ZlsxMjhdOworICAgICAgICBpbnQgaTsKKyAgICAgICAgc3RybmNweShidWYs JmRicmVjW0RCX0lORk9dLDEyNyk7CisgICAgICAgIGJ1ZlsxMjddID0gTlVMOworICAgICAgICBm b3IgKGkgPSAxMjY7IGkgPiAwICYmIGJ1ZltpXSA9PSAzMjsgaS0tKSBidWZbaV0gPSAwOworICAg ICAgICBkZWJ1ZyhGMTExLCJzbG90c3RhdGUiLGJ1ZixteXN0YXRlKTsKKyAgICB9CisjZW5kaWYg LyogREVCVUcgKi8KKyAgICB6ID0gdXBkc2xvdChteWRic2xvdCk7CisgICAgZGVidWcoRjEwMSwi c2xvdHN0YXRlIHVwZHNsb3QiLCIiLHopOworICAgIHJldHVybih6KTsKK30KKworaW50CitzbG90 ZGlyKHMxLHMyKSBjaGFyICogczEsICogczI7IHsgICAgICAgLyogVXBkYXRlIGN1cnJlbnQgZGly ZWN0b3J5ICovCisgICAgaW50IGssIGxlbjEsIGxlbjI7CisgICAgaWYgKCFpa2Rib3BlbikKKyAg ICAgIHJldHVybigtMSk7CisgICAgaWYgKCFzMSkgczEgPSAiIjsKKyAgICBpZiAoIXMyKSBzMiA9 ICIiOworICAgIGxlbjEgPSBzdHJsZW4oczEpOworICAgIGxlbjIgPSBzdHJsZW4oczIpOworICAg IGsgPSBkYmZsZFtkYl9ETEVOXS5sZW47CisgICAgc3RybmNweSgmZGJyZWNbREJfRExFTl0sdWxv bmd0b2hleCgodW5zaWduZWQgbG9uZykobGVuMStsZW4yKSxrKSxrKTsKKyAgICBrID0gZGJmbGRb ZGJfRElSXS5sZW47CisgICAgaWYgKGxlbjEgPiAwKSB7CisgICAgICAgIGxzZXQoJmRicmVjW2Ri ZmxkW2RiX0RJUl0ub2ZmXSxzMSxsZW4xLDMyKTsKKyAgICAgICAgbHNldCgmZGJyZWNbZGJmbGRb ZGJfRElSXS5vZmYrbGVuMV0sczIsay1sZW4xLDMyKTsKKyAgICB9IGVsc2UgeworICAgICAgICBs c2V0KCZkYnJlY1tkYmZsZFtkYl9ESVJdLm9mZl0sczIsaywzMik7CisgICAgfQorICAgIHJldHVy bih1cGRzbG90KG15ZGJzbG90KSk7Cit9CisKKy8qICBGIFIgRSBFIFMgTCBPIFQgIC0tICBGcmVl IHNsb3QgbiAgKi8KKworaW50CitmcmVlc2xvdChuKSBpbnQgbjsgeworICAgIGludCBrOworICAg IGlmICghaWtkYm9wZW4pCisgICAgICByZXR1cm4oMCk7CisgICAgZGJmbGFncyA9IDBMOworICAg IGlmIChuID09IG15ZGJzbG90KSB7CisgICAgICAgIGRiZmxhZ3MgPSBteWZsYWdzICYgfkRCRl9J TlVTRTsKKyAgICAgICAgZGJmbGFncyAmPSB+REJGX0xPR0dFRDsKKyAgICB9CisgICAgayA9IGRi ZmxkW2RiX0ZMQUdTXS5sZW47CisgICAgc3RybmNweSgmZGJyZWNbZGJmbGRbZGJfRkxBR1NdLm9m Zl0sdWxvbmd0b2hleChkYmZsYWdzLGspLGspOworICAgIHJldHVybih1cGRzbG90KG4pKTsKK30K KworLyogIEcgRSBUIFMgTCBPIFQgIC0tICBGaW5kIGEgZnJlZSBkYXRhYmFzZSBzbG90OyByZXR1 cm5zIHNsb3QgbnVtYmVyICAqLworCisjaWZkZWYgVU5JWAorI2luY2x1ZGUgPGZjbnRsLmg+CQkJ LyogRm9yIGNyZWF0KCkgKi8KKyNlbmRpZgkvKiBVTklYICovCisKK2ludAorZ2V0c2xvdCgpIHsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZpbmQgYSBmcmVlIHNsb3QgZm9yIHVzICov CisgICAgRklMRSAqIHJmcCA9IE5VTEw7ICAgICAgICAgICAgICAgICAgLyogUmV0dXJucyBzbG90 IG51bWJlciAoMCwgMSwgLi4uKSAqLworICAgIGNoYXIgaWRzdHJpbmdbNjRdOyAgICAgICAgICAg ICAgICAgIC8qIFBJRCBzdHJpbmcgYnVmZmVyIChkZWNpbWFsKSAqLworICAgIGNoYXIgcGlkYnVm WzY0XSwgKiBzOworICAgIGludCBqLCBrLCBuLCB4LCByYyA9IC0xOworICAgIGludCBsb2NrZmQs IHRyaWVzLCBoYXZlc2xvdCA9IDA7CisgICAgbG9uZyBsb2NrcGlkOworICAgIENLX09GRl9UIGk7 CisgICAgLyogY2hhciBpcGJ1ZlsxN107ICovCisKKyAgICBpZiAoIW15aGV4aXBbMF0pICAgICAg ICAgICAgICAgICAgICAvKiBTZXQgbXkgaGV4IElQIGFkZHJlc3MgaWYgbm90IHNldCAqLworICAg ICAgY2tzdHJuY3B5KChjaGFyICopbXloZXhpcCwiN0YwMDAwMDEiLDMzKTsKKyAgICBzcHJpbnRm KGlkc3RyaW5nLCIlMDhseDolMDEwbGRcbiIsbXlpcCxteXBpZCk7CisgICAgZGVidWcoRjExMCwi Z2V0c2xvdCBpZHN0cmluZyIsIGlkc3RyaW5nLCAwKTsKKworICAgIC8qIE1ha2UgdGVtcG9yYXJ5 IGxvY2tmaWxlIG5hbWUgSVAuUElEIChoZXguaGV4KSAqLworICAgIC8qIFRoaXMgc2hvdWxkIGZp dCBpbiAxNCBjaGFycyAtLSBodWdlIFBJRHMgYXJlIHVzdWFsbHkgbm90IHBvc3NpYmxlICovCisg ICAgLyogb24gMTQtY2hhciBmaWxlbmFtZSBzeXN0ZW1zLiAqLworCisgICAgc3ByaW50Zih0bXBs Y2ssIiVzJTA4bHguJWx4IixkYmRpcixteWlwLG15cGlkKTsKKyAgICBkZWJ1ZyhGMTEwLCJnZXRz bG90IHRlbXBmaWxlIix0bXBsY2ssMCk7CisKKyAgICAvKiBNYWtlIGEgdGVtcG9yYXJ5IGZpbGUg Ki8KKworICAgIGxvY2tmZCA9IGNyZWF0KHRtcGxjaywgMDYwMCk7CS8qIEJVVCBUSElTIElTTidU IFBPUlRBQkxFICovCisgICAgaWYgKGxvY2tmZCA8IDApIHsKKyAgICAgICAgZGVidWcoRjExMSwi Z2V0c2xvY2sgdGVtcCBsb2NrZmlsZSBjcmVhdGUgZmFpbHVyZSIsIHRtcGxjaywgZXJybm8pOwor ICAgICAgICByZXR1cm4oLTEpOworICAgIH0KKyAgICAvKiBXcml0ZSBteSAoZGVjaW1hbCkgUElE IGludG8gdGhlIHRlbXAgZmlsZSAqLworCisgICAgd3JpdGUobG9ja2ZkLGlkc3RyaW5nLChpbnQp c3RybGVuKGlkc3RyaW5nKSk7CisgICAgaWYgKGNsb3NlKGxvY2tmZCkgPCAwKSB7ICAgICAgICAg ICAgLyogQ2xvc2UgbG9ja2ZpbGUgKi8KKyAgICAgICAgZGVidWcoRjEwMSwiZ2V0c2xvdCBlcnJv ciBjbG9zaW5nIHRlbXAgbG9ja2ZpbGUiLCAiIiwgZXJybm8pOworICAgICAgICByZXR1cm4oLTEp OworICAgIH0KKyAgICBzcHJpbnRmKGxja25hbSwiJXMlcyIsZGJkaXIsSUtfTE9DS0ZJTEUpOyAv KiBCdWlsZCBsb2NrZmlsZSBuYW1lICovCisgICAgZGVidWcoRjExMCwiZ2V0c2xvdCBsb2NrZmls ZSIsbGNrbmFtLDApOworCisgICAgcmZwID0gZm9wZW4obGNrbmFtLCJyIik7ICAgICAgICAgICAg LyogU2VlIGlmIGxvY2tmaWxlIGV4aXN0cyAqLworICAgIGlmIChyZnApIHsgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIElmIHNvLi4uICovCisgICAgICAgIHJzZXQocGlkYnVmLCIiLDY0LDAp OworICAgICAgICB4ID0gZnJlYWQocGlkYnVmLDEsNjMscmZwKTsgICAgIC8qIFJlYWQgSUQgc3Ry aW5nIGZyb20gaXQgKi8KKyAgICAgICAgZmNsb3NlKHJmcCk7ICAgICAgICAgICAgICAgICAgICAv KiBhbmQgY2xvc2UgaXQgcXVpY2tseSAqLworICAgICAgICBkZWJ1ZyhGMTEwLCJnZXRzbG90IGxv Y2sgZXhpc3RzIixwaWRidWYsMCk7CisgICAgICAgIGlmICh4ID4gMCkgeyAgICAgICAgICAgICAg ICAgICAgLyogSWYgd2UgaGF2ZSBhIFBJRCwgY2hlY2sgaXQgKi8KKyAgICAgICAgICAgIGNoYXIg KiBzID0gcGlkYnVmOworICAgICAgICAgICAgd2hpbGUgKCpzKSB7CisgICAgICAgICAgICAgICAg aWYgKGlzbG93ZXIoKnMpKSAqcyA9IHRvdXBwZXIoKnMpOworICAgICAgICAgICAgICAgIGlmICgq cyA9PSAnOicpIHsKKyAgICAgICAgICAgICAgICAgICAgKnMgPSBOVUw7CisgICAgICAgICAgICAg ICAgICAgIGRlYnVnKEYxMTAsImdldHNsb3QgbG9jayBJUCIscGlkYnVmLDApOworICAgICAgICAg ICAgICAgICAgICBkZWJ1ZyhGMTEwLCJndGVzbG90IG15ICAgSVAiLG15aGV4aXAsMCk7CisgICAg ICAgICAgICAgICAgICAgIGlmICghc3RyY21wKHBpZGJ1ZixteWhleGlwKSkgeyAvKiBTYW1lIElQ IGFkZHJlc3M/ICovCisgICAgICAgICAgICAgICAgICAgICAgICBsb2NrcGlkID0gYXRvbChzKzEp OyAvKiBZZXMsIG5vdyBnZXQgUElEICovCisgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhG MTAxLCJnZXRzbG90IGxvY2twaWQiLCIiLGxvY2twaWQpOworCisgICAgICAgICAgICAgICAgICAg ICAgICAvKiBDaGVjayBpZiBQSUQgbG9ja3BpZCBvbiB0aGlzIGNvbXB1dGVyIGlzIGFsaXZlICov CisgICAgICAgICAgICAgICAgICAgICAgICB4ID0gemNoa3BpZChsb2NrcGlkKTsKKyAgICAgICAg ICAgICAgICAgICAgICAgIGlmICgheCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRl YnVnKEYxMDAsImdldHNsb3QgUElEIHN0YWxlLHJlbW92aW5nIGxvY2siLCIiLDApOworICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHVubGluayhsY2tuYW0pOworICAgICAgICAgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcysrOworICAgICAgICAg ICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZGVidWcoRjExMSwiZ2V0c2xvdCBs b2NrZmlsZSBvcGVuIGZhaWx1cmUiLGxja25hbSxlcnJubyk7CisgICAgICAgIH0KKyAgICB9Cisg ICAgLyogVHJ5IElLX0xDS1RSSUVTICgxNikgdGltZXMgdG8gcmVuYW1lIHRlbXAgZmlsZSB0byBs b2NrZmlsZSAqLworCisgICAgZm9yICh0cmllcyA9IElLX0xDS1RSSUVTOyB0cmllcyA+IDA7IHRy aWVzLS0pIHsKKyAgICAgICAgaWYgKHpyZW5hbWUodG1wbGNrLGxja25hbSkgPT0gMCkKKyAgICAg ICAgICBicmVhazsKKyAgICAgICAgZGVidWcoRjEwMSwiZ2V0c2xvdCBkYXRhYmFzZSBsb2NrZWQg YnkgcGlkIiwgIiIsIGRicGlkKTsKKyAgICAgICAgc2xlZXAoSUtfTENLU0xFRVApOworICAgIH0K KyAgICBpZiAodHJpZXMgPCAxKSB7ICAgICAgICAgICAgICAgICAgICAvKiBDb3VsZG4ndCAqLwor ICAgICAgICBkZWJ1ZyhGMTEwLCJnZXRzbG90IGNyZWF0ZSBsb2NrIGZhaWx1cmUiLGxja25hbSww KTsKKyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9CisgICAgLyogSGF2ZSBsb2NrLCBvcGVuIGRh dGFiYXNlICovCisKKyAgICBkZWJ1ZyhGMTEwLCJnZXRzbG90IGhhcyBsb2NrIixsY2tuYW0sMCk7 IC8qIEhhdmUgbG9jayAqLworCisgICAgaWYgKCFkYmZpbGUpCisgICAgICByZXR1cm4oLTEpOwor CisgICAgLyogSWYgZGF0YWJhc2UgZG9lc24ndCBleGlzdCwgY3JlYXRlIGl0LiAqLworCisgICAg ZGVidWcoRjExMCwiZ2V0c2xvdCBkYmZpbGUiLGRiZmlsZSwwKTsKKyAgICBpZiAoemNoa2koZGJm aWxlKSA8IDApIHsKKyAgICAgICAgZGVidWcoRjExMCwiZ2V0c2xvdCBjcmVhdGluZyBuZXcgZGF0 YWJhc2UiLGRiZmlsZSwwKTsKKyAgICAgICAgeCA9IGNyZWF0KGRiZmlsZSwwNjYwKTsKKyAgICAg ICAgaWYgKHggPCAwKSB7CisgICAgICAgICAgICBkZWJ1ZyhGMTExLCJnZXRzbG90IGNyZWF0KCkg ZmFpbGVkIiwgZGJmaWxlLCBlcnJubyk7CisgICAgICAgICAgICBnb3RvIHhzbG90OworICAgICAg ICB9CisgICAgICAgIGNsb3NlKHgpOworICAgIH0KKyAgICBkYmZwID0gZm9wZW4oZGJmaWxlLHVw ZG1vZGUpOyAgICAgICAvKiBPcGVuIGl0IGluIHVwZGF0ZSBtb2RlICovCisgICAgaWYgKCFkYmZw KSB7CisgICAgICAgIGRlYnVnKEYxMTEsImdldHNsb3QgZm9wZW4gZmFpbGVkIixkYmZpbGUsZXJy bm8pOworICAgICAgICBnb3RvIHhzbG90OworICAgIH0KKyAgICAvKiBOb3cgZmluZCBhIGZyZWUg KG9yIG5ldykgc2xvdC4uLiAqLworCisgICAgZGJsYXN0dXNlZCA9IDBMOyAgICAgICAgICAgICAg ICAgICAgLyogU2VlayBwb2ludGVyIHRvIGxhc3QgcmVjb3JkIGludXNlICovCisgICAgbXlkYnNl ZWsgPSAwTDsgICAgICAgICAgICAgICAgICAgICAgLyogU2VlayBwb2ludGVyIGZvciBteSByZWNv cmQgKi8KKworICAgIC8qIFF1aWNrbHkgcmVhZCB0aGUgd2hvbGUgZGF0YWJhc2U7IG4gPSByZWNv cmQgY291bnRlciwgaSA9IHNlZWsgcG9pbnRlciAqLworCisgICAgZm9yIChuID0gMCwgaSA9IDA7 ICFmZW9mKGRiZnApOyBpICs9IERCX1JFQ0wsIG4rKykgeworICAgICAgICB4ID0gZnJlYWQoZGJy ZWMsMSxEQl9SRUNMLGRiZnApOyAvKiBSZWFkIGEgcmVjb3JkICovCisgICAgICAgIGlmICh4IDwg MSkgICAgICAgICAgICAgICAgICAgICAgLyogRU9GIG5vdCBjYXVnaHQgYnkgZmVvZigpICovCisg ICAgICAgICAgYnJlYWs7CisjaWZuZGVmIE5PRlRSVU5DQVRFCisgICAgICAgIGlmICh4ICE9IERC X1JFQ0wpIHsgICAgICAgICAgICAgLyogV2F0Y2ggb3V0IGZvciB0cmFpbGluZyBqdW5rICovCisg ICAgICAgICAgICBkZWJ1ZyhGMTAxLCJnZXRzbG90IGJhZCBzaXplIiwiIix4KTsgIC8qIChTaG91 bGRuJ3QgaGFwcGVuLi4uKSAqLworI2lmZGVmIENPSEVSRU5UCisgICAgICAgICAgICBjaHNpemUo ZmlsZW5vKGRiZnApLGkpOworI2Vsc2UKKyAgICAgICAgICAgIGZ0cnVuY2F0ZShmaWxlbm8oZGJm cCksKENLX09GRl9UKWkpOworI2VuZGlmIC8qIENPSEVSRU5UICovCisgICAgICAgICAgICB4ID0g MDsKKyAgICAgICAgICAgIENLRlNFRUsoZGJmcCxpLDApOworICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgIH0KKyNlbmRpZiAvKiBOT0ZUUlVOQ0FURSAqLworICAgICAgICBkZWJ1ZyhGMTAxLCJn ZXRzbG90IHJlY29yZCIsIiIsbik7CisgICAgICAgIGsgPSBkYmZsZFtkYl9GTEFHU10ub2ZmOwor ICAgICAgICBqID0gZGJmbGRbZGJfRkxBR1NdLmxlbjsKKyAgICAgICAgZGJmbGFncyA9IGhleHRv dWxvbmcoJmRicmVjW2tdLGopOworICAgICAgICBkZWJ1ZyhGMDAxLCJnZXRzbG90IGRiZmxhZ3Mi LCIiLGRiZmxhZ3MpOworICAgICAgICBrID0gZGJmbGRbZGJfTVlQSURdLm9mZjsKKyAgICAgICAg aiA9IGRiZmxkW2RiX01ZUElEXS5sZW47CisgICAgICAgIGRicGlkICA9IGhleHRvdWxvbmcoJmRi cmVjW2tdLGopOworICAgICAgICBkZWJ1ZyhGMDAxLCJnZXRzbG90IGRicGlkIiwiIixkYnBpZCk7 CisgICAgICAgIGsgPSBkYmZsZFtkYl9TQUREUl0ub2ZmOworICAgICAgICBqID0gZGJmbGRbZGJf U0FERFJdLmxlbjsKKyAgICAgICAgZGJpcCA9IGhleHRvdWxvbmcoJmRicmVjW2tdLGopOworICAg ICAgICBkZWJ1ZyhGMDAxLCJnZXRzbG90IGRiaXAiLCIiLGRiaXApOworCisgICAgICAgIGlmIChk YmZsYWdzICYgREJGX0lOVVNFKSB7ICAgICAgLyogUmVtZW1iZXIgbGFzdCBzbG90IGluIHVzZSAq LworICAgICAgICAgICAgeCA9IDA7ICAgICAgICAgICAgICAgICAgICAgIC8qIE1ha2Ugc3VyZSBp dCdzIFJFQUxMWSBpbiB1c2UgKi8KKyAgICAgICAgICAgIGlmIChkYnBpZCA9PSBteXBpZCAmJiBk YmlwID09IG15aXApIHsgLyogQ2hlY2sgZm9yIFBJRCA9PSBteSBQSUQgKi8KKyAgICAgICAgICAg ICAgICB4ID0gMTsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJnZXRzbG90IHJlY29yZCBw aWQiLCIiLGRicGlkKTsKKyAgICAgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAv KiBPciBmb3Igc3RhbGUgUElEICovCisgICAgICAgICAgICAgICAgeCA9IHpjaGtwaWQoZGJwaWQp OworICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsImdldHNsb3QgemNoa3BpZCgpIiwiIix4KTsK KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgheCkgeyAgICAgICAgICAgICAgICAgICAv KiBCb2d1cyByZWNvcmQgKi8KKyAgICAgICAgICAgICAgICB4ID0gZnJlZXNsb3Qobik7CisgICAg ICAgICAgICAgICAgZGVidWcoRjEwMSwiZ2V0c2xvdCBzdGFsZSByZWNvcmQgcGlkOiBmcmVlc2xv dCgpIiwiIix4KTsKKyAgICAgICAgICAgICAgICBpZiAoeCA+IC0xICYmICFoYXZlc2xvdCkKKyAg ICAgICAgICAgICAgICAgIGRiZmxhZ3MgPSAwOworICAgICAgICAgICAgfSBlbHNlIHsgICAgICAg ICAgICAgICAgICAgIC8qIEl0J3MgcmVhbGx5IGluIHVzZSAqLworICAgICAgICAgICAgICAgIGRi bGFzdHVzZWQgPSBpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICghaGF2 ZXNsb3QpIHsgICAgICAgICAgICAgICAgLyogSWYgSSBkb24ndCBoYXZlIGEgc2xvdCB5ZXQgKi8K KyAgICAgICAgICAgIGlmICghKGRiZmxhZ3MgJiBEQkZfSU5VU0UpKSB7ICAgICAgIC8qIENsYWlt IHRoaXMgb25lICovCisgICAgICAgICAgICAgICAgZGVidWcoRjEwMSwiZ2V0c2xvdCBmcmVlIHNs b3QiLCAiIiwgbik7CisgICAgICAgICAgICAgICAgaGF2ZXNsb3QgPSAxOworICAgICAgICAgICAg ICAgIG15ZGJzZWVrID0gaTsKKyAgICAgICAgICAgICAgICBteWRic2xvdCA9IG47ICAgICAgICAg ICAvKiBCdXQga2VlcCBnb2luZy4uLiAqLworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg fQorICAgIC8qIENvbWUgaGVyZSB3aXRoIGkgPT0gc2VlayBwb2ludGVyIHRvIGZpcnN0IHJlY29y ZCBhZnRlciBlb2YgKi8KKworICAgIGlmICghaGF2ZXNsb3QpIHsgICAgICAgICAgICAgICAgICAg IC8qIEZvdW5kIG5vIGZyZWUgc2xvdCBzbyBhZGQgdG8gZW5kICovCisgICAgICAgIGRlYnVnKEYx MDEsImdldHNsb3QgbmV3IHNsb3QiLCIiLG4pOworICAgICAgICBoYXZlc2xvdCA9IDE7CisgICAg ICAgIG15ZGJzZWVrID0gaTsKKyAgICAgICAgbXlkYnNsb3QgPSBuOworICAgIH0KKyAgICBpa2Ri b3BlbiA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAvKiBPSyB0byBtYWtlIGRhdGFiYXNlIGVu dHJpZXMgKi8KKyAgICBkZWJ1ZyhGMTAxLCJnZXRzbG90IHJlY29yZHMiLCIiLG4pOworICAgIGRl YnVnKEYxMDEsImdldHNsb3QgZGJsYXN0dXNlZCIsIiIsZGJsYXN0dXNlZCk7CisgICAgZGVidWco RjEwMSwiZ2V0c2xvdCBpIiwiIixpKTsKKworICAgIC8qIFRyaW0gc3RhbGUgcmVjb3JkcyBmcm9t IGVuZCAqLworCisjaWZuZGVmIE5PRlRSVU5DQVRFCisgICAgaWYgKGkgPiBkYmxhc3R1c2VkK0RC X1JFQ0wpIHsKKyAgICAgICAgZGVidWcoRjEwMSwiZ2V0c2xvdCB0cnVuY2F0aW5nIGF0IiwiIixk Ymxhc3R1c2VkK0RCX1JFQ0wpOworI2lmZGVmIENPSEVSRU5UCisgICAgICAgIHggPSBjaHNpemUo ZmlsZW5vKGRiZnApLGRibGFzdHVzZWQrREJfUkVDTCk7CisjZWxzZQorICAgICAgICB4ID0gZnRy dW5jYXRlKGZpbGVubyhkYmZwKSwoQ0tfT0ZGX1QpKGRibGFzdHVzZWQrREJfUkVDTCkpOworI2Vu ZGlmIC8qIENPSEVSRU5UICovCisgICAgICAgIGlmICh4IDwgMCkgICAgICAgICAgICAgICAgICAg ICAgLyogKE5vdCBmYXRhbCkgKi8KKyAgICAgICAgICBkZWJ1ZyhGMTAxLCJnZXRzbG90IGZ0cnVu Y2F0ZSBmYWlsZWQiLCAiIiwgZXJybm8pOworICAgIH0KKyNlbmRpZiAvKiBOT0ZUUlVOQ0FURSAq LworCisgICAgLyogSW5pdGlhbGl6ZSBteSByZWNvcmQgKi8KKworICAgIGlmIChpbml0c2xvdCht eWRic2xvdCkgPCAwKSB7CisgICAgICAgIGRlYnVnKEYxMDEsImdldHNsb3QgaW5pdHNsb3QoKSBl cnJvciIsIiIsbik7CisgICAgICAgIGlrZGJvcGVuID0gMDsKKyAgICAgICAgZ290byB4c2xvdDsK KyAgICB9CisgICAgZGVidWcoRjEwMSwiZ2V0c2xvdCBPSyIsIiIsbXlkYnNsb3QpOworICAgIHJj ID0gbXlkYnNsb3Q7ICAgICAgICAgICAgICAgICAgICAgIC8qIE9LIHJldHVybiBjb2RlICovCisK KyAgeHNsb3Q6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVbmxvY2sgdGhlIGRh dGFiYXNlIGFuZCByZXR1cm4gKi8KKyAgICBpZiAodW5saW5rKGxja25hbSkgPCAwKSB7CisgICAg ICAgIGRlYnVnKEYxMTEsImdldHNsb3QgbG9ja2ZpbGUgcmVtb3ZhbCBmYWlsZWQiLGxja25hbSxl cnJubyk7CisgICAgICAgIHJjID0gLTE7CisgICAgfQorICAgIHJldHVybihyYyk7Cit9CisjZW5k aWYgLyogSUtTREIgKi8KKyNlbmRpZiAvKiBOT0lLU0QgKi8KCmRpZmYgLS1naXQgYS9ja2VybWl0 LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdXVzeC5jLmM5OSBiL2NrZXJtaXQtOS4w LjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1dXN4LmMuYzk5Cm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAuLmE4YTg1N2IKLS0tIC9kZXYvbnVsbAorKysgYi9ja2VybWl0LTku MC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdXVzeC5jLmM5OQpAQCAtMCwwICsxLDk3MTgg QEAKKyNpbmNsdWRlICJja2NzeW0uaCIKKworLyogIEMgSyBVIFUgUyBYIC0tICAiVXNlciBJbnRl cmZhY2UiIGNvbW1vbiBmdW5jdGlvbnMuICovCisKKy8qCisgIEF1dGhvcnM6CisgICAgRnJhbmsg ZGEgQ3J1eiA8ZmRjQGNvbHVtYmlhLmVkdT4sCisgICAgICBUaGUgS2VybWl0IFByb2plY3QsIENv bHVtYmlhIFVuaXZlcnNpdHksIE5ldyBZb3JrIENpdHkKKyAgICBKZWZmcmV5IEUgQWx0bWFuIDxq YWx0bWFuQHNlY3VyZS1lbmRwb2ludHMuY29tPgorICAgICAgU2VjdXJlIEVuZHBvaW50cyBJbmMu LCBOZXcgWW9yayBDaXR5CisKKyAgQ29weXJpZ2h0IChDKSAxOTg1LCAyMDExLAorICAgIFRydXN0 ZWVzIG9mIENvbHVtYmlhIFVuaXZlcnNpdHkgaW4gdGhlIENpdHkgb2YgTmV3IFlvcmsuCisgICAg QWxsIHJpZ2h0cyByZXNlcnZlZC4gIFNlZSB0aGUgQy1LZXJtaXQgQ09QWUlORy5UWFQgZmlsZSBv ciB0aGUKKyAgICBjb3B5cmlnaHQgdGV4dCBpbiB0aGUgY2tjbWFpLmMgbW9kdWxlIGZvciBkaXNj bGFpbWVyIGFuZCBwZXJtaXNzaW9ucy4KKyovCisKKy8qCisgIFRoaXMgbW9kdWxlIGNvbnRhaW5z IHVzZXIgaW50ZXJmYWNlIGZ1bmN0aW9ucyBuZWVkZWQgYnkgYm90aCB0aGUgaW50ZXJhY3RpdmUK KyAgdXNlciBpbnRlcmZhY2UgYW5kIHRoZSBjb21tYW5kLWxpbmUtb25seSB1c2VyIGludGVyZmFj ZSwgYXMgd2VsbCBhcyB0aGUKKyAgc2NyZWVuLWNvbnRyb2wgcm91dGluZXMgKGN1cnNlcyBhbmQg ZXF1aXZhbGVudCkuCisqLworCisvKiBJbmNsdWRlcyAqLworCisjaW5jbHVkZSAiY2tjZGViLmgi CisjaW5jbHVkZSAiY2tjYXNjLmgiCisjaW5jbHVkZSAiY2tja2VyLmgiCisjaW5jbHVkZSAiY2t1 dXNyLmgiCisjaW5jbHVkZSAiY2tjeGxhLmgiCisKKyNpZm5kZWYgTk9IVEVSTUNBUAorI2lmZGVm IE5PVEVSTUNBUAorI2RlZmluZSBOT0hURVJNQ0FQCisjZWxzZQorI2lmbmRlZiBCU0Q0NAorI2Rl ZmluZSBOT0hURVJNQ0FQCisjZWxzZQorI2lmZGVmIF9fYnNkaV9fCisjZGVmaW5lIE5PSFRFUk1D QVAKKyNlbHNlCisjaWZkZWYgT1BFTkJTRAorI2RlZmluZSBOT0hURVJNQ0FQCisjZWxzZQorI2lm ZGVmIE1BQ09TWAorI2RlZmluZSBOT0hURVJNQ0FQCisjZW5kaWYgLyogTUFDT1NYICovCisjZW5k aWYgLyogT1BFTkJTRCAqLworI2VuZGlmIC8qIF9fYnNkaV9fICovCisjZW5kaWYgLyogQlNENDQg Ki8KKyNlbmRpZiAvKiBOT1RFUk1DQVAgKi8KKyNlbmRpZiAvKiBOT0hURVJNQ0FQICovCisKKyNp Zm5kZWYgTk9URVJNQ0FQCisjaWZkZWYgQlNENDQKKyNpZm5kZWYgTk9IVEVSTUNBUAorI2luY2x1 ZGUgPHRlcm1jYXAuaD4KKyNlbmRpZiAvKiBOT0hURVJNQ0FQICovCisjZW5kaWYgLyogQlNENDQg Ki8KKyNlbHNlICAvKiAhQlNENDQgKi8KKyNpZmRlZiBsaW51eAorI2luY2x1ZGUgPHRlcm0uaD4K KyNlbmRpZiAvKiBsaW51eCAqLworI2VuZGlmIC8qIE5PVEVSTUNBUCAqLworCisjaWZkZWYgT1My CisjaW5jbHVkZSA8c3RyaW5nLmg+CitfUFJPVE9UWVAoY2hhciAqIG9zMl9nZXRob3N0bmFtZSwg KHZvaWQpKTsKKyNkZWZpbmUgZ2V0cGlkIF9nZXRwaWQKKyNlbmRpZiAvKiBPUzIgKi8KKyNpZmRl ZiBCU0Q0NAorI2luY2x1ZGUgPGVycm5vLmg+CisjZW5kaWYgLyogQlNENDQgKi8KKworZXh0ZXJu IHh4X3N0cnAgeHhzdHJpbmc7CisKKyNpZmRlZiBPUzIKKyNpbmNsdWRlICJja2NuZXQuaCIKKyNl bHNlIC8qIE9TMiAqLworX1BST1RPVFlQKCBjaGFyICogY2tnZXRwZWVyLCAoVk9JRCkpOworX1BS T1RPVFlQKGludCBnZXRsb2NhbGlwYWRkciwgKHZvaWQpKTsKK19QUk9UT1RZUChpbnQgaXN0bmNv bXBvcnQsICh2b2lkKSk7CisjaWZuZGVmIE5PQ0tHRVRGUUhPU1QKK19QUk9UT1RZUCggY2hhciAq IGNrZ2V0ZnFob3N0bmFtZSwoY2hhciAqKSk7CisjZW5kaWYJLyogTk9DS0dFVEZRSE9TVCAqLwor I2lmbmRlZiBORVRDT05OCisvKgorICBXZSBzaG91bGQganVzdCBwdWxsIGluIGNrY25ldC5oIGhl cmUsIGJ1dCBpdCBjYXVzZXMgYSBjb25mbGljdCB3aXRoIGN1cnNlcy5oLgorKi8KKyNpZmRlZiBU Q1BTT0NLRVQKKyNkZWZpbmUgTkVUQ09OTgorI2Vsc2UKKyNpZmRlZiBTVU5YMjUKKyNkZWZpbmUg TkVUQ09OTgorI2Vsc2UKKyNpZmRlZiBTVFJBVFVTWDI1CisjZGVmaW5lIE5FVENPTk4KKyNlbHNl CisjaWZkZWYgSUJNWDI1CisjZGVmaW5lIE5FVENPTk4KKyNlbHNlCisjaWZkZWYgSFBYMjUKKyNk ZWZpbmUgTkVUQ09OTgorI2Vsc2UKKyNpZmRlZiBERUNORVQKKyNkZWZpbmUgTkVUQ09OTgorI2Vs c2UKKyNpZmRlZiBOUElQRQorI2RlZmluZSBORVRDT05OCisjZWxzZQorI2lmZGVmIENLX05FVEJJ T1MKKyNkZWZpbmUgTkVUQ09OTgorI2lmZGVmIFNVUEVSTEFUCisjZGVmaW5lIE5FVENPTk4KKyNl bHNlCisjZW5kaWYgLyogU1VQRVJMQVQgKi8KKyNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KKyNlbmRp ZiAvKiBTVU5YMjUgKi8KKyNlbmRpZiAvKiBTVFJBVFVTWDI1ICovCisjZW5kaWYgLyogSUJNWDI1 ICovCisjZW5kaWYgLyogSFBYMjUgKi8KKyNlbmRpZiAvKiBERUNORVQgKi8KKyNlbmRpZiAvKiBO UElQRSAqLworI2VuZGlmIC8qIENLX05FVEJJT1MgKi8KKyNlbmRpZiAvKiBORVRDT05OICovCisj ZW5kaWYgLyogT1MyICovCisKKyNpZm5kZWYgVENQU09DS0VUCisjaWZkZWYgTVVMVElORVQKKyNk ZWZpbmUgVENQU09DS0VUCisjZW5kaWYgLyogTVVMVElORVQgKi8KKyNpZmRlZiBERUNfVENQSVAK KyNkZWZpbmUgVENQU09DS0VUCisjZW5kaWYgLyogREVDX1RDUElQICovCisjaWZkZWYgV0lOVENQ CisjZGVmaW5lIFRDUFNPQ0tFVAorI2VuZGlmIC8qIFdJTlRDUCAqLworI2lmZGVmIFRDUFdBUkUK KyNkZWZpbmUgVENQU09DS0VUCisjZW5kaWYgLyogVENQV0FSRSAqLworI2VuZGlmIC8qIFRDUFNP Q0tFVCAqLworCisjaWZkZWYgT1MyCisjaWZkZWYgTlQKKyNpbmNsdWRlIDx3aW5kb3dzLmg+Cisj aW5jbHVkZSA8dGFwaS5oPgorI2luY2x1ZGUgImNrbnRhcC5oIgorI2Vsc2UgLyogTlQgKi8KKyNk ZWZpbmUgSU5DTF9WSU8KKyNpbmNsdWRlIDxvczIuaD4KKyNlbmRpZiAvKiBOVCAqLworI2lmZGVm IENPTU1FTlQgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdvdWxkIHlvdSBiZWxpZXZlICov CisjdW5kZWYgQ09NTUVOVCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogPG9zMi5oPiBkZWZp bmVzIHRoaXMgPyAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyNpZmRlZiBDS19ORVRCSU9TCisj aW5jbHVkZSAiY2tvbmJpLmgiCisjZW5kaWYgLyogQ0tfTkVUQklPUyAqLworCisjaW5jbHVkZSAi Y2tvY29uLmgiCitleHRlcm4gYXNjcmVlbiBjb21tYW5kc2NyZWVuOworI2lmZGVmIEtVSQorI2lu Y2x1ZGUgImlrdWkuaCIKKyNlbmRpZiAvKiBLVUkgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKworI2lm ZGVmIE5UCisjaW5jbHVkZSAiY2tud2luLmgiCisjZW5kaWYgLyogTlQgKi8KKyNpZmRlZiBPUzIK KyNpbmNsdWRlICJja293aW4uaCIKKyNpbmNsdWRlICJja29zeW4uaCIKKyNlbmRpZiAvKiBPUzIg Ki8KKworI2lmZGVmIENLX1RBUEkKK2V4dGVybiBpbnQgdHR0YXBpOworZXh0ZXJuIGludCB0YXBp cGFzczsKKyNlbmRpZiAvKiBDS19UQVBJICovCisKKyNpZmRlZiBDS19LRVJCRVJPUworI2luY2x1 ZGUgImNrdWF0aC5oIgorI2VuZGlmIC8qIENLX0tFUkJFUk9TICovCisKKyNpZm5kZWYgV0lOVENQ CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjZW5kaWYgLyogV0lOVENQICovCisKKyNpZmRlZiBWTVMK KyNpbmNsdWRlIDxkZXNjcmlwLmg+CisjaW5jbHVkZSA8c3NkZWYuaD4KKyNpbmNsdWRlIDxzdHNk ZWYuaD4KKyNpZm5kZWYgT0xEX1ZNUworI2luY2x1ZGUgPGxpYiRyb3V0aW5lcy5oPiAgLyogTm90 IGZvciBWQVggQyAyLjMgKi8KKyNlbHNlCisjaW5jbHVkZSA8bGliZGVmLmg+CisjZW5kaWYgLyog T0xEX1ZNUyAqLworI2lmZGVmIFdJTlRDUAorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2VuZGlmIC8q IFdJTlRDUCAqLworI2VuZGlmIC8qIFZNUyAqLworCisjaWZkZWYgRENMRkRPUEVOCisvKiBmZG9w ZW4oKSBuZWVkcyBkZWNsYXJpbmcgYmVjYXVzZSBpdCdzIG5vdCBkZWNsYXJlZCBpbiA8c3RkaW8u aD4gKi8KK19QUk9UT1RZUCggRklMRSAqIGZkb3BlbiwgKGludCwgY2hhciAqKSApOworI2VuZGlm IC8qIERDTEZET1BFTiAqLworCisjaWZkZWYgRENMUE9QRU4KKy8qIHBvcGVuKCkgbmVlZHMgZGVj bGFyaW5nIGJlY2F1c2UgaXQncyBub3QgZGVjbGFyZWQgaW4gPHN0ZGlvLmg+ICovCitfUFJPVE9U WVAoIEZJTEUgKiBwb3BlbiwgKGNoYXIgKiwgY2hhciAqKSApOworI2VuZGlmIC8qIERDTFBPUEVO ICovCisKK2ludCB0dF9jcmQgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDYXJyaWFn ZSByZXR1cm4gZGlzcGxheSAqLworaW50IHR0X2xmZCA9IDA7ICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIExpbmVmZWVkIGRpc3BsYXkgKi8KK2ludCBpbnRlcnJ1cHRlZCA9IDA7ICAgICAgICAg ICAgICAgICAgICAvKiBJbnRlcnJ1cHRlZCBmcm9tIGtleWJvYXJkIGZsYWcgKi8KK2ludCBmeGRf aW5pdGVkID0gMDsJCQkvKiBGdWxsc2NyZWVuIHN0dWZmIGluaXRpYWxpemVkICovCisKKyNpZmRl ZiBERUJVRworY2hhciBkZWJmaWxbQ0tNQVhQQVRIKzFdOyAgICAgICAgICAgICAgIC8qIERlYnVn Z2luZyBsb2cgZmlsZSBuYW1lICovCisjZW5kaWYgLyogREVCVUcgKi8KKworI2lmZGVmIFRMT0cK K2NoYXIgdHJhZmlsW0NLTUFYUEFUSCsxXTsgICAgICAgICAgICAgICAvKiBUcmFuc2FjdGlvbiBs b2cgZmlsZSBuYW1lICovCisjZW5kaWYgLyogVExPRyAqLworCitjaGFyIHNlc2ZpbFtDS01BWFBB VEgrMV07ICAgICAgICAgICAgICAgLyogU2Vzc2lvbiBsb2cgZmlsZSBuYW1lICovCisKKyNpZmRl ZiBDS0xPR0RJQUwKK2NoYXIgZGlhZmlsW0NLTUFYUEFUSCsxXTsgICAgICAgICAgICAgICAvKiBD b25uZWN0aW9uIGxvZyBmaWxlIG5hbWUgKi8KK2NoYXIgY3hsb2didWZbQ1hMT0dCVUZMKzFdOyAg ICAgICAgICAgICAvKiBDb25uZWN0aW9uIGxvZyByZWNvcmQgYnVmZmVyICovCitpbnQgY3hfYWN0 aXZlID0gMDsgICAgICAgICAgICAgICAgICAgICAgLyogQ29ubmVjdGlvbiBpcyBhY3RpdmUgKi8K K2V4dGVybiBpbnQgZGlhbG9nOworI2VuZGlmIC8qIENLTE9HRElBTCAqLworCisjaWZkZWYgRFlO QU1JQworc3RhdGljIGNoYXIgKmNtZHN0ciA9IE5VTEw7ICAgICAgICAgICAgIC8qIFBsYWNlIHRv IGJ1aWxkIGdlbmVyaWMgY29tbWFuZCAqLworI2Vsc2UKKyNpZmRlZiBwZHAxMQorc3RhdGljIGNo YXIgY21kc3RyWzI1Nl07CisjZWxzZQorc3RhdGljIGNoYXIgY21kc3RyWzQwOTZdOworI2VuZGlm IC8qIHBkcDExICovCisjZW5kaWYgLyogRFlOQU1JQyAqLworCisjaWZuZGVmIE5PTVNFTkQKK2No YXIgZnNwZWNbQ01EQkwrNF07ICAgICAgICAgICAgICAgICAgICAvKiBGaWxlbmFtZSBzdHJpbmcg Zm9yIFx2KGZpbGVzcGVjKSAqLworaW50IGZzcGVjbGVuID0gQ01EQkw7CisjZWxzZQorY2hhciBm c3BlY1tDS01BWFBBVEgrNF07CitpbnQgZnNwZWNsZW4gPSBDS01BWFBBVEg7CisjZW5kaWYgLyog Tk9NU0VORCAqLworCitjaGFyICogcmZzcGVjID0gTlVMTDsJCQkvKiBSZWNlaXZlZCBmaWxlc3Bl YzogbG9jYWwgKi8KK2NoYXIgKiBwcmZzcGVjID0gTlVMTDsJCQkvKiBQcmVsaW1pbmFyeSByZnNw ZWMgKi8KK2NoYXIgKiBzZnNwZWMgPSBOVUxMOwkJCS8qIFNlbnQgZmlsZXNwZWM6IGxvY2FsICov CitjaGFyICogcHNmc3BlYyA9IE5VTEw7CQkJLyogUHJlbGltaW5hcnkgc2ZzcGVjICovCitjaGFy ICogc3Jmc3BlYyA9IE5VTEw7CQkJLyogUmVjZWl2ZWQgZmlsZXNwZWM6IHJlbW90ZSAqLworY2hh ciAqIHBzcmZzcGVjID0gTlVMTDsJCQkvKiBQcmVsaW1pbmFyeSBzcmZzcGVjICovCitjaGFyICog cnJmc3BlYyA9IE5VTEw7CQkJLyogU2VudCBmaWxlc3BlYzogcmVtb3RlICovCitjaGFyICogcHJy ZnNwZWMgPSBOVUxMOwkJCS8qIFByZWxpbWluYXJ5IHJyZnNwZWMgKi8KKworaW50IHN1Y2Nlc3Mg PSAxLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvbW1hbmQgc3VjY2Vzcy9mYWlsdXJlIGZs YWcgKi8KKyAgICBjbWRsdmwgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDb21tYW5k IGxldmVsICovCisgICAgYWN0aW9uID0gMCwJCQkJLyogQWN0aW9uIHNlbGVjdGVkIG9uIGNvbW1h bmQgbGluZSAqLworICAgIHNsb2d0cyA9IDAsCQkJCS8qIFNlc3Npb24tbG9nIHRpbWVzdGFtcHMg b24vb2ZmICovCisgICAgc2xvZ251bCA9IDAsCQkJLyogU2Vzc2lvbi1sb2cgbnVsbC10ZXJtaW5h dGVkIGxpbmVzICovCisjaWZkZWYgVU5JWAorICAgIHNlc3NmdCA9IFhZRlRfVCwgICAgICAgICAg ICAgICAgICAgIC8qIFNlc3Npb24gbG9nIGZpbGUgdHlwZSAqLworI2Vsc2UKKyAgICBzZXNzZnQg PSBYWUZUX0IsCQkJLyogKHRleHQgZm9yIFVOSVggYmluYXJ5IGZvciBvdGhlcnMpICovCisjZW5k aWYgLyogVU5JWCAqLworICAgIHBmbGFnID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IFByaW50IHByb21wdCAqLworICAgIG1zZ2ZsZyA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAg IC8qIFByaW50IGluZm9ybWF0aW9uYWwgbWVzc2FnZXMgKi8KKworZXh0ZXJuIGludCB4YXNrbW9y ZSwgc2F2ZWFzazsJCS8qIE1vcmUtcHJvbXB0aW5nICovCisKKyNpZmRlZiBDS19BUEMKK2V4dGVy biBpbnQgYXBjYWN0aXZlOworI2VuZGlmIC8qIENLX0FQQyAqLworLyogRXh0ZXJuYWwgdmFyaWFi bGVzICovCisKK2V4dGVybiBpbnQgbG9jYWwsIHF1aWV0LCBiaW5hcnksIG5ldHdvcmssIHdoYXQs IHBhcml0eSwgeGl0c3RhLCBlc2NhcGUsCisgIHRsZXZlbCwgYmdzZXQsIGJhY2tncmQsIHhzdXNw ZW5kLCBjbWRpbnQsIG5ldHR5cGUsIHNlc2xvZywgZGZsb2M7CisKK2V4dGVybiBpbnQgY21kX3Jv d3MsIGNtZF9jb2xzLCB4Y21kc3JjOworCitleHRlcm4gY2hhciBjbWRmaWxbXTsKKworI2lmZGVm IFZNUworZXh0ZXJuIGludCBiYXRjaDsKKyNlbmRpZiAvKiBWTVMgKi8KKworI2lmZGVmIGRhdGFn ZW5lcmFsICAgICAgICAgICAgICAgICAgICAgIC8qIDIvMTIvOTIgRU5IICovCisjaW5jbHVkZSA8 c3lzaWQuaD4KK2V4dGVybiBpbnQgY29uX3JlYWRzX210LCBjb25pbnRfY2gsIGNvbmludF9hdmw7 CisjZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KKworZXh0ZXJuIGxvbmcgc3BlZWQ7CisKK2V4dGVy biBjaGFyIHR0bmFtZVtdLCAqZGZ0dHksICpjbWFyZywgKipjbWxpc3QsICp2ZXJzaW8sIG15aG9z dFtdOworCisjaWZuZGVmIE5PQ1NFVFMKK2V4dGVybiBpbnQgZmNoYXJzZXQsIHRjaGFyc2V0LCB4 ZnJ4bGE7CitleHRlcm4gc3RydWN0IGNzaW5mbyBmY3NpbmZvW10sIHRjc2luZm9bXTsKKyNlbmRp ZiAvKiBOT0NTRVRTICovCisKKyNpZmRlZiBPUzIKK2V4dGVybiB1bnNpZ25lZCBjaGFyIGNvbG9y Y21kOworI2VuZGlmIC8qIE9TMiAqLworCisjaWZkZWYgTk9YRkVSCisKK2ludCBmZGlzcGxhID0g WFlGRF9OOworCisjZWxzZSAgLyogTk9YRkVSIGlzIG5vdCBkZWZpbmVkICovCisKKyNpZmRlZiBP UzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGaWxlIHRyYW5zZmVyIGRpc3BsYXkg dHlwZSAqLworaW50IGZkaXNwbGEgPSBYWUZEX0M7ICAgICAgICAgICAgICAgICAgIC8qIEN1cnNl cyAoZnVsbHNjcmVlbikgaWYgd2UgaGF2ZSBpdCAqLworI2Vsc2UKKyNpZmRlZiBDS19DVVJTRVMK K2ludCBmZGlzcGxhID0gWFlGRF9DOworI2Vsc2UKK2ludCBmZGlzcGxhID0gWFlGRF9TOyAgICAg ICAgICAgICAgICAgICAvKiBPdGhlcndpc2UgQ1JUICovCisjZW5kaWYgLyogQ0tfQ1VSU0VTICov CisjZW5kaWYgLyogT1MyICovCisKK2V4dGVybiBzdHJ1Y3QgY2tfcCBwdGFiW107CitleHRlcm4g aW50IHByb3RvY29sLCB4ZnJiZWwsIHhmcmludDsKKworI2lmZGVmIFNUUkVBTUlORworZXh0ZXJu IGludCBzdHJlYW1pbmcsIHN0cmVhbW9rOworI2VuZGlmIC8qIFNUUkVBTUlORyAqLworCisvKiBV c2VkIGludGVybmFsbHkgKi8KKworI2lmZGVmIEtVSQorX1BST1RPVFlQKCBWT0lEIHNjcmVlbmcs IChpbnQsIGNoYXIsIGxvbmcsIGNoYXIgKikgKTsKKyNlbmRpZgkvKiBLVUkgKi8KK19QUk9UT1RZ UCggVk9JRCBzY3JlZW5jLCAoaW50LCBjaGFyLCBDS19PRkZfVCwgY2hhciAqKSApOworCisKKyNp ZmRlZiBDS19DVVJTRVMKKyNpZm5kZWYgRFlOQU1JQworc3RhdGljIGNoYXIgeHRybWJ1ZltUUk1C VUZMXTsgICAgICAgICAgIC8qIHRnZXRlbnQoKSBidWZmZXIgKi8KK2NoYXIgKiB0cm1idWYgPSB4 dHJtYnVmOworI2Vsc2UKK2NoYXIgKiB0cm1idWYgPSBOVUxMOworI2VuZGlmIC8qIERZTkFNSUMg Ki8KK19QUk9UT1RZUCggc3RhdGljIFZPSUQgZHB5aW5pdCwgKHZvaWQpICk7CitfUFJPVE9UWVAo IHN0YXRpYyBsb25nIHNob2NwcywgKGludCwgQ0tfT0ZGX1QsIENLX09GRl9UKSApOworX1BST1RP VFlQKCBzdGF0aWMgQ0tfT0ZGX1Qgc2hvZXRsLCAoQ0tfT0ZGX1QsIGxvbmcsIENLX09GRl9ULCBD S19PRkZfVCkgKTsKKyNlbmRpZiAvKiBDS19DVVJTRVMgKi8KKworc3RhdGljIGludCBmdF93aW4g PSAwOyAgLyogRnVsbHNjcmVlbiBmaWxlIHRyYW5zZmVyIGRpc3BsYXkgd2luZG93IGlzIGFjdGl2 ZSAqLworCisvKiBWYXJpYWJsZXMgZGVjbGFyZWQgaGVyZSAqLworCitzdGF0aWMgY2hhciAqIHNr cmVhc29uW10gPSB7CisgICAgIiIsCQkJCQkvKiAwICovCisgICAgIlJlbW90ZSBmaWxlIG5vdCBv bGRlciIsCQkvKiBTS1BfREFUICovCisgICAgIklkZW50aWNhbCBtb2RpZmljYXRpb24gdGltZXMi LAkvKiBTS1BfRVFVICovCisgICAgIlR5cGUiLAkJCQkvKiBTS1BfVFlQICovCisgICAgIlNpemUi LAkJCQkvKiBTS1BfU0laICovCisgICAgIk5hbWUgY29sbGlzaW9uIiwJCQkvKiBTS1BfTkFNICov CisgICAgIkV4Y2VwdGlvbiBMaXN0IiwJCQkvKiBTS1BfRVhMICovCisgICAgIkRvdCBmaWxlIiwJ CQkJLyogU0tQX0RPVCAqLworICAgICJCYWNrdXAgZmlsZSIsCQkJLyogU0tQX0JLVSAqLworICAg ICJSZWNvdmVyeSBub3QgbmVlZGVkIiwJCS8qIFNLUF9SRVMgKi8KKyAgICAiQWNjZXNzIGRlbmll ZCIsCQkJLyogU0tQX0FDQyAqLworICAgICJOb3QgYSByZWd1bGFyIGZpbGUiLAkJLyogU0tQX05S RiAqLworICAgICJTaW11bGF0ZWQiLAkJCS8qIFNLUF9TSU0gKi8KKyAgICAiU2ltdWxhdGVkIC0g UmVtb3RlIGZpbGUgb2xkZXIiLAkvKiBTS1BfWFVQICovCisgICAgIlNpbXVsYXRlZCAtIE5vIHJl bW90ZSBmaWxlIiwJLyogU0tQX1hOWCAqLworfTsKK3N0YXRpYyBpbnQgbnNrcmVhc29uID0gKHNp emVvZihza3JlYXNvbikgLyBzaXplb2YoY2hhciAqKSk7CisKK2NoYXIgKgorZ3NrcmVhc29uKG4p IGludCBuOyB7CisgICAgcmV0dXJuKChuID4gMCAmJiBuIDwgbnNrcmVhc29uKSA/IHNrcmVhc29u W25dIDogIiIpOworfQorCitjaGFyIHBrdGZpbFtDS01BWFBBVEgrMV07ICAgICAgICAgICAgICAg LyogUGFja2V0IGxvZyBmaWxlIG5hbWUgKi8KKworI2lmbmRlZiBOT01TRU5EICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIE11bHRpcGxlIFNFTkQgKi8KK2NoYXIgKm1zZmlsZXNbTVNFTkRNQVhd OworI2VuZGlmIC8qIE5PTVNFTkQgKi8KKworI2lmZGVmIENLX1RJTUVSUworZXh0ZXJuIGxvbmcg cnR0ZGVsYXk7CitleHRlcm4gaW50ICBydHRmbGc7CisjZW5kaWYgLyogQ0tfVElNRVJTICovCitl eHRlcm4gaW50IHJjdnRpbW87CisKKyNpZmRlZiBDS19SRVNFTkQKK2V4dGVybiBpbnQgc2VuZG1v ZGU7CitleHRlcm4gQ0tfT0ZGX1Qgc2VuZHN0YXJ0LCByc19sZW47CisjZW5kaWYgLyogQ0tfUkVT RU5EICovCisKKyNpZmRlZiBDS19QQ1RfQkFSICAgICAgICAgICAgICAgICAgICAgICAvKiBGaWxl IHRyYW5zZmVyIHRoZXJtb21ldGVyICovCitpbnQgdGhlcm1vbWV0ZXIgPSAxOyAgICAgICAgICAg ICAgICAgICAgLyogT04gYnkgZGVmYXVsdCAqLworI2VuZGlmIC8qIENLX1BDVF9CQVIgKi8KKwor I2lmZGVmIEdGVElNRVIKK0NLRkxPQVQgZ3R2ID0gLTEuMCwgb2xkZ3R2ID0gLTEuMDsKKyNlbHNl CisjaWZuZGVmIE9TMgorc3RhdGljCisjZW5kaWYgLyogT1MyICovCisgIGxvbmcgZ3R2ID0gLTFM LCBvbGRndHYgPSAtMUw7CisjZW5kaWYgLyogR0ZUSU1FUiAqLworCitleHRlcm4gaW50IHNlcnZl ciwgYmN0dSwgcnB0ZmxnLCBlYnFmbGcsIHNwc2l6LCB1cnBzaXosIHdtYXgsIGN6c2VlbiwgY3hz ZWVuLAorICB3aW5sbywgZGlzcGxhLCB0aW1pbnQsIG5wYWQsIGVicSwgYmN0ciwgcnB0cSwgYXRj YXB1LCBscGNhcHUsCisgIHN3Y2FwdSwgd3Nsb3RuLCB3c2xvdHIsIHJ0aW1vLCBteXBhZG4sIHNx LCBjYXBhcywgcnBzaXosIHRzZWNzLAorICBwa3Rsb2csIGxzY2FwdSwgZGVzdCwgc3J2ZGlzLCB3 c2xvdHMsIHNwYWNrZXRzLCBzcGt0bCwgcnBrdGwsCisgIHJldHJhbnMsIHdjdXIsIG51bWVycnMs IGZzZWNzLCB3aGF0cnUsIGNydW5jaGVkLCB0aW1lb3V0cywKKyAgcnBhY2tldHMsIGZuY252LCBi eWVfYWN0aXZlLCBkaXNjYXJkLCBpbnNlcnZlciwgZGlyYWN0aXZlLCBjZGFjdGl2ZTsKKworZXh0 ZXJuIGxvbmcgZmlsY250LCBmaWxyZWosIHJwdG4sIGZpbGNwcywgdGZjcHMsIGNwcywgcGVha2Nw czsKK2V4dGVybiBDS19PRkZfVCBmZmMsIHRmYywgZnNpemU7IAorCitsb25nIG9sZGNwcyA9IDBM OworCitleHRlcm4gQ0hBUiAqcmRhdGFwLCBwYWRjaCwgc2VvbCwgY3RscSwgbXlwYWRjLCBlb2ws ICplcGt0bXNnOworZXh0ZXJuIGNoYXIgKnhmcm1zZzsKKworI2lmZGVmIElLU0RCCitGSUxFICog ZGJmcCA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgLyogRmlsZSBwb2ludGVyIHRvIGRhdGFi YXNlIGZpbGUgKi8KKworaW50IGRiZW5hYmxlZCA9IDE7ICAgICAgICAgICAgICAgICAgICAgIC8q IEZsYWcgZm9yIGRhdGFiYXNlIGlzIGVuYWJsZWQgKi8KK2V4dGVybiBpbnQgaWtkYm9wZW47ICAg ICAgICAgICAgICAgICAgICAvKiBGbGFnIGZvciBkYXRhYmFzZSBpcyBvcGVuICovCisKK3Vuc2ln bmVkIGxvbmcgbXlkYnNlZWsgPSAwTDsgICAgICAgICAgICAvKiBTZWVrIHBvaW50ZXIgdG8gbXkg cmVjb3JkICovCitpbnQgbXlkYnNsb3QgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgLyogTXkg c2xvdCBudW1iZXIgKi8KK3Vuc2lnbmVkIGxvbmcgbXlmbGFncyA9IDBMOyAgICAgICAgICAgICAv KiBNeSBmbGFncyAqLwordW5zaWduZWQgbG9uZyBteWF0eXBlID0gMEw7ICAgICAgICAgICAgIC8q IE15IGF1dGhvcml6YXRpb24gdHlwZSAqLwordW5zaWduZWQgbG9uZyBteWFtb2RlID0gMEw7ICAg ICAgICAgICAgIC8qIE15IGF1dGhvcml6YXRpb24gbW9kZSAqLwordW5zaWduZWQgbG9uZyBteXN0 YXRlID0gMEw7ICAgICAgICAgICAgIC8qIE15IHN0YXRlIChTRU5ELCBSRUNFSVZFLCBldGMpICov Cit1bnNpZ25lZCBsb25nIG15cGlkID0gMEw7ICAgICAgICAgICAgICAgLyogTXkgUElEICovCit1 bnNpZ25lZCBsb25nIG15aXAgPSAwTDsgICAgICAgICAgICAgICAgLyogTXkgSVAgYWRkcmVzcyAq LwordW5zaWduZWQgbG9uZyBwZWVyaXAgPSAwTDsgICAgICAgICAgICAgIC8qIE15IHBlZXIncyBJ UCBhZGRyZXNzICovCisKK3Vuc2lnbmVkIGxvbmcgZGJpcCA9IDBMOyAgICAgICAgICAgICAgICAv KiBJUCBhZGRyZXNzIGluIGRiIHJlY29yZCAqLwordW5zaWduZWQgbG9uZyBkYnBpZCA9IDBMOyAg ICAgICAgICAgICAgIC8qIFBJRCBpbiBkYiByZWNvcmQgKi8KK3Vuc2lnbmVkIGxvbmcgZGJmbGFn cyA9IDBMOyAgICAgICAgICAgICAvKiBGbGFncyBmaWVsZCBpbiBkYiByZWNvcmQgKi8KK3Vuc2ln bmVkIGxvbmcgZGJsYXN0dXNlZCA9IDBMOyAgICAgICAgICAvKiBMYXN0IGluLXVzZSByZWNvcmQg aW4gZGIgKi8KK2NoYXIgZGJyZWNbREJfUkVDTF07ICAgICAgICAgICAgICAgICAgICAvKiBEYXRh YmFzZSByZWNvcmQgYnVmZmVyICovCisKK2NoYXIgKiBkYmRpciAgID0gTlVMTDsgICAgICAgICAg ICAgICAgICAvKiBEYXRhYmFzZSBkaXJlY3RvcnkgKi8KK2NoYXIgKiBkYmZpbGUgID0gTlVMTDsg ICAgICAgICAgICAgICAgICAvKiBEYXRhYmFzZSBmaWxlIGZ1bGwgcGF0aG5hbWUgKi8KK2NoYXIg bXloZXhpcFszM10gPSB7IE5VTCwgTlVMIH07ICAgICAgICAvKiBNeSBJUCBhZGRyZXNzIGluIGhl eCAqLworY2hhciBwZWVyaGV4aXBbMzNdID0geyBOVUwsIE5VTCB9OyAgICAgIC8qIENsaWVudCdz IElQIGFkZHJlc3MgaW4gaGV4ICovCisjZW5kaWYgLyogSUtTREIgKi8KKworI2lmZGVmIEdGVElN RVIKK2V4dGVybiBDS0ZMT0FUIGZwZnNlY3MsIGZwdHNlY3MsIGZweGZzZWNzOworI2Vsc2UKK2V4 dGVybiBsb25nIHhmc2VjczsKKyNlbmRpZiAvKiBHRlRJTUVSICovCisjZW5kaWYgLyogTk9YRkVS ICovCisKKyNpZmRlZiBUQ1BTT0NLRVQKKyNpZmRlZiBORVdGVFAKK2V4dGVybiBjaGFyICogZnRw X2hvc3QsIGZ0cF9zcnZ0eXBbXTsKK2V4dGVybiBpbnQgZnRwX2NzeCwgZnRwX2NzbCwgZnRwX2Rl YjsKKyNlbmRpZiAvKiBORVdGVFAgKi8KK2V4dGVybiBjaGFyIG15aXBhZGRyW107CisjZW5kaWYg LyogVENQU09DS0VUICovCisKKyNpZm5kZWYgTk9JQ1AKKyNpZm5kZWYgTk9TUEwKKyAgICBleHRl cm4gc3RydWN0IG10YWIgKm1hY3RhYjsgICAgICAgICAvKiBGb3IgT05fRVhJVCBtYWNyby4gKi8K KyAgICBleHRlcm4gaW50IG5tYWM7CisjZW5kaWYgLyogTk9TUEwgKi8KKyNpZmRlZiBEQ01EQlVG CitleHRlcm4gY2hhciAqY21kYnVmOyAgICAgICAgICAgICAgICAgICAgLyogQ29tbWFuZCBidWZm ZXIgKi8KKyNlbHNlCitleHRlcm4gY2hhciBjbWRidWZbXTsgICAgICAgICAgICAgICAgICAgLyog Q29tbWFuZCBidWZmZXIgKi8KKyNlbmRpZiAvKiBEQ01EQlVGICovCitleHRlcm4gaW50IGNtZF9x dW90aW5nOworI2VuZGlmIC8qIE5PSUNQICovCisKKyNpZm5kZWYgTk9DQ1RSQVAKKyNpZmRlZiBO VAorI2luY2x1ZGUgPHNldGptcGV4Lmg+CisjZWxzZSAvKiBOVCAqLworI2luY2x1ZGUgPHNldGpt cC5oPgorI2VuZGlmIC8qIE5UICovCisjaW5jbHVkZSAiY2tjc2lnLmgiCitleHRlcm4gY2tqbXBi dWYgY21qYnVmOworI2VuZGlmIC8qIE5PQ0NUUkFQICovCisKK2V4dGVybiBpbnQgeGZpbGV0eXBl LCBuc2NhbmZpbGU7CisKK2ludAorc2hvZXNjKGVzY2FwZSkgaW50IGVzY2FwZTsgeworICAgIGV4 dGVybiBjaGFyICogY2NudGFiW107CQkvKiBDMCBjb250cm9sIGNoYXJhY3RlciBuYW1lIHRhYmxl ICovCisgICAgZXh0ZXJuIGludCB0dF9lc2NhcGU7CisgICAgaWYgKChlc2NhcGUgPiAwICYmIGVz Y2FwZSA8IDMyKSB8fCAoZXNjYXBlID09IDEyNykpIHsKKwlwcmludGYoIiBFc2NhcGUgY2hhcmFj dGVyOiBDdHJsLSVjIChBU0NJSSAlZCwgJXMpOiAlc1xyXG4iLAorCSAgICAgICBjdGwoZXNjYXBl KSwKKwkgICAgICAgZXNjYXBlLAorCSAgICAgICAoZXNjYXBlID09IDEyNyA/ICJERUwiIDogY2Nu dGFiW2VzY2FwZV0pLAorCSAgICAgICB0dF9lc2NhcGUgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQi CisJICAgICAgICk7CisgICAgfSBlbHNlIHsKKwlwcmludGYoIiBFc2NhcGUgY2hhcmFjdGVyOiBD b2RlICVkIixlc2NhcGUpOworCWlmIChlc2NhcGUgPiAxNjAgJiYgZXNjYXBlIDwgMjU2KQorCSAg cHJpbnRmKCIgKCVjKSIsZXNjYXBlKTsKKwlwcmludGYoIjogJXNcclxuIiwgdHRfZXNjYXBlID8g ImVuYWJsZWQiIDogImRpc2FibGVkIik7CQorICAgIH0KKyAgICByZXR1cm4oMCk7Cit9CisKKyNp Zm5kZWYgTk9YRkVSCisvKiAgUCBSIEUgUyBFIFQgIC0tICBSZXNldCBnbG9iYWwgcHJvdG9jb2wg dmFyaWFibGVzICAqLworCitleHRlcm4gaW50IHJlY3Vyc2l2ZTsKKworI2lmZGVmIFBBVFRFUk5T CitpbnQgcGF0dGVybnMgPSBTRVRfQVVUTzsgICAgICAgICAgICAgICAgLyogV2hldGhlciB0byB1 c2UgZmlsZW5hbWUgcGF0dGVybnMgKi8KK2V4dGVybiBpbnQgZ19wYXR0ZXJuczsJCQkvKiBGb3Ig c2F2aW5nIGFuZCByZXN0b3JpbmcgKi8KKyNlbHNlCitpbnQgcGF0dGVybnMgPSBTRVRfT0ZGOwor I2VuZGlmIC8qIFBBVFRFUk5TICovCisKKyNpZm5kZWYgTk9JQ1AKKyNpZmRlZiBDS19MQUJFTEVE CitleHRlcm4gaW50IGdfbGZfb3B0cywgbGZfb3B0czsKKyNlbmRpZiAvKiBDS19MQUJFTEVEICov CitleHRlcm4gaW50IGdfbWF0Y2hkb3QsIGdfdXNlcGlwZXMsIHVzZXBpcGVzOworZXh0ZXJuIGlu dCBnX2JpbmFyeSwgZ19wcm90bywgZ19kaXNwbGEsIGdfc3BhdGgsIGdfcnBhdGgsIGdfZm5jbnY7 CitleHRlcm4gaW50IGdfcmVjdXJzaXZlOworZXh0ZXJuIGludCBnX3hmZXJtb2RlLCB4ZmVybW9k ZTsKK2V4dGVybiBpbnQgZ191cnBzaXosIGdfc3BzaXpmLCBnX3Nwc2l6OworZXh0ZXJuIGludCBn X3Nwc2l6ciwgZ19zcG1heCwgZ193c2xvdHIsIGdfcHJlZml4aW5nLCBnX2ZuY2FjdDsKK2V4dGVy biBpbnQgZ19mbnNwYXRoLCBnX2ZucnBhdGgsIGdfc2tpcGJ1cDsKK2V4dGVybiBpbnQgbm9saW5r czsKKyNpZmRlZiBDS1NZTUxJTksKK2V4dGVybiBpbnQgemdmc19saW5rOworI2VuZGlmIC8qIENL U1lNTElOSyAqLworI2lmbmRlZiBOT1NQTAorZXh0ZXJuIGludCBnX3BmbGcsIHB3ZmxnLCBnX3Bj cHQsIHB3Y3J5cHQ7CitleHRlcm4gY2hhciAqIGdfcHN3ZCwgcHdidWZbXTsKKyNlbmRpZiAvKiBO T1NQTCAqLworI2VuZGlmIC8qIE5PSUNQICovCisKK2V4dGVybiBpbnQgc3BzaXpmLCBzcHNpenIs IHNwbWF4LCBwcmVmaXhpbmcsIGZuY2FjdCwgZm5zcGF0aCwgZm5ycGF0aDsKK2V4dGVybiBpbnQg bW92aW5nOyAgICAgICAgICAgICAgICAgICAgICAvKiBTRU5EIGNyaXRlcmlhICovCitleHRlcm4g Y2hhciBzbmRhZnRlcltdLCBzbmRiZWZvcmVbXSwgKnNuZGV4Y2VwdFtdLCAqcmN2ZXhjZXB0W107 CitleHRlcm4gQ0tfT0ZGX1Qgc25kbGFyZ2VyLCBzbmRzbWFsbGVyLCBjYWxpYnJhdGU7CitleHRl cm4gaW50IHJtYWlsZiwgcnByaW50Ziwgc2tpcGJ1cDsKK2V4dGVybiBjaGFyIG9wdGJ1ZltdOwor CisjaWZkZWYgUElQRVNFTkQKK2V4dGVybiBjaGFyICogZ19zZmlsdGVyLCAqIGdfcmZpbHRlcjsK K2V4dGVybiBjaGFyICogc25kZmlsdGVyLCAqIHJjdmZpbHRlcjsKKyNlbmRpZiAvKiBQSVBFU0VO RCAqLworZXh0ZXJuIGNoYXIgKiogc25kYXJyYXk7CisKK1ZPSUQKK2Z0cmVzZXQoKSB7CisjaWZu ZGVmIE5PSUNQCisgICAgaW50IGk7CisgICAgZXh0ZXJuIGNoYXIgKiBmaWxlZmlsZTsKKyAgICBl eHRlcm4gaW50IHJlbGlhYmxlLCB4cmVsaWFibGUsIGNfc2F2ZSwgc3Nfc2F2ZSwgc2xvc3RhcnQs IHVyY2xlYXI7CisgICAgZXh0ZXJuIGludCBvb3B0cywgb21vZGUsIG9uYW1lLCBvcGF0aCwga2Fj dGl2ZSwgYXV0b3BhdGg7CisgICAgZXh0ZXJuIGNoYXIgKiBzbmRfbW92ZTsgICAgICAgICAgICAg LyogRGlyZWN0b3J5IHRvIG1vdmUgc2VudCBmaWxlcyB0byAqLworICAgIGV4dGVybiBjaGFyICog c25kX3JlbmFtZTsgICAgICAgICAgIC8qIFdoYXQgdG8gcmVuYW1lIHNlbnQgZmlsZXMgdG8gKi8K KyAgICBleHRlcm4gY2hhciAqIHJjdl9tb3ZlOworICAgIGV4dGVybiBjaGFyICogcmN2X3JlbmFt ZTsKKyAgICBleHRlcm4gY2hhciAqIGdfc25kX21vdmU7CisgICAgZXh0ZXJuIGNoYXIgKiBnX3Nu ZF9yZW5hbWU7CisgICAgZXh0ZXJuIGNoYXIgKiBnX3Jjdl9tb3ZlOworICAgIGV4dGVybiBjaGFy ICogZ19yY3ZfcmVuYW1lOworCisjaWZkZWYgQ0tfVE1QRElSCisgICAgZXh0ZXJuIGludCBmX3Rt cGRpcjsKKyAgICBleHRlcm4gY2hhciBzYXZkaXJbXTsKKyNlbmRpZiAvKiBDS19UTVBESVIgKi8K KworI2lmZGVmIENLX1NQRUVECisjaWZkZWYgQ09NTUVOVAorICAgIGV4dGVybiBpbnQgZl9jdGxw OworICAgIGV4dGVybiBzaG9ydCBzX2N0bHBbXSwgY3RscFtdOworI2VuZGlmIC8qIENPTU1FTlQg Ki8KKyNlbmRpZiAvKiBDS19TUEVFRCAqLworCisjaWZuZGVmIE5PQ1NFVFMKKyAgICBleHRlcm4g aW50IGZjc19zYXZlLCB0Y3Nfc2F2ZTsKKyAgICBleHRlcm4gaW50IGdfeGZyeGxhLCB4ZnJ4bGE7 CisjZW5kaWYgLyogTk9DU0VUUyAqLworCisvKiBSZXN0b3JlIC8gcmVzZXQgcGVyLWNvbW1hbmQg ZmlsZS10cmFuc2ZlciBzd2l0Y2hlcyAqLworCisgICAgbWFrZXN0cigmc25kX21vdmUsZ19zbmRf bW92ZSk7CisgICAgbWFrZXN0cigmcmN2X21vdmUsZ19yY3ZfbW92ZSk7CisgICAgbWFrZXN0cigm c25kX3JlbmFtZSxnX3NuZF9yZW5hbWUpOworICAgIG1ha2VzdHIoJnJjdl9yZW5hbWUsZ19yY3Zf cmVuYW1lKTsKKworICAgIGthY3RpdmUgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEtl cm1pdCBwcm90b2NvbCBubyBsb25nZXIgYWN0aXZlICovCisgICAgb29wdHMgPSAtMTsgICAgICAg ICAgICAgICAgICAgICAgICAgLyogTy1QYWNrZXQgT3B0aW9ucyAqLworICAgIG9tb2RlID0gLTE7 ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE8tUGFja2V0IFRyYW5zZmVyIE1vZGUgKi8KKyAg ICBvbmFtZSA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBPLVBhY2tldCBGaWxlbmFt ZSBPcHRpb25zICovCisgICAgb3BhdGggPSAtMTsgICAgICAgICAgICAgICAgICAgICAgICAgLyog Ty1QYWNrZXQgUGF0aG5hbWUgT3B0aW9ucyAqLworCisjaWZkZWYgQ0tfUkVTRU5ECisgICAgcnNf bGVuID0gMEw7CQkJLyogUkVHRVQgcG9zaXRpb24gKi8KKyNlbmRpZiAvKiBDS19SRVNFTkQgKi8K KworI2lmZGVmIENPTU1FTlQKKyNpZmRlZiBDS19TUEVFRAorICAgIGlmIChmX2N0bHApIHsKKyAg ICAgICAgZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKQorICAgICAgICAgIGN0bHBbaV0gPSBzX2N0 bHBbaV07CisgICAgICAgIGZfY3RscCA9IDA7CisgICAgfQorI2VuZGlmIC8qIENLX1NQRUVEICov CisjZW5kaWYgLyogQ09NTUVOVCAqLworCisjaWZkZWYgQ0tfVE1QRElSCisgICAgaWYgKGZfdG1w ZGlyKSB7CQkJLyogSWYgd2UgY2hhbmdlZCB0byBkb3dubG9hZCBkaXIgKi8KKwl6Y2hkaXIoKGNo YXIgKikgc2F2ZGlyKTsJLyogR28gYmFjayB3aGVyZSB3ZSBjYW1lIGZyb20gKi8KKwlmX3RtcGRp ciA9IDA7CisgICAgfQorI2VuZGlmIC8qIENLX1RNUERJUiAqLworCisgICAgY2FsaWJyYXRlID0g MEw7ICAgICAgICAgICAgICAgICAgICAgLyogQ2FsaWJyYXRpb24gcnVuICovCisgICAgaWYgKHhy ZWxpYWJsZSA+IC0xKSB7CisJcmVsaWFibGUgPSB4cmVsaWFibGU7CisJZGVidWcoRjEwMSwiZnRy ZXNldCByZWxpYWJsZSIsIiIscmVsaWFibGUpOworICAgIH0KKyAgICB1cmNsZWFyID0gMDsKKwor ICAgIGlmIChhdXRvcGF0aCkgeyAgICAgICAgICAgICAgICAgICAgIC8qIFNFVCBSRUNFSVZFIFBB VEhOQU1FUyBBVVRPICovCisgICAgICAgIGZucnBhdGggPSBQQVRIX0FVVE87CisgICAgICAgIGF1 dG9wYXRoID0gMDsKKyAgICB9CisgICAgaWYgKGZpbGVmaWxlKSB7ICAgICAgICAgICAgICAgICAg ICAgLyogRmlsZSBsaXN0ICovCisgICAgICAgIHpjbG9zZShaTUZJTEUpOworICAgICAgICBtYWtl c3RyKCZmaWxlZmlsZSxOVUxMKTsKKyAgICB9CisgICAgaWYgKGNfc2F2ZSA+IC0xKSB7ICAgICAg ICAgICAgICAgICAgLyogQmxvY2sgQ2hlY2sgVHlwZSAqLworICAgICAgICBiY3RyID0gY19zYXZl OworICAgICAgICBjX3NhdmUgPSAtMTsKKyAgICB9CisgICAgaWYgKHNzX3NhdmUgPiAtMSkgeyAg ICAgICAgICAgICAgICAgLyogU2xvdyBTdGFydCAqLworICAgICAgICBzbG9zdGFydCA9IHNzX3Nh dmU7CisgICAgICAgIHNzX3NhdmUgPSAtMTsKKyAgICB9CisjaWZkZWYgQ0tfTEFCRUxFRAorICAg IGlmIChnX2xmX29wdHMgPiAtMSkgeworICAgICAgICBsZl9vcHRzID0gZ19sZl9vcHRzOyAgICAg ICAgICAgIC8qIFJlc3RvcmUgbGFiZWxlZCB0cmFuc2ZlciBvcHRpb25zICovCisgICAgICAgIGdf bGZfb3B0cyA9IC0xOworICAgIH0KKyNlbmRpZiAvKiBDS19MQUJFTEVEICovCisKKyNpZm5kZWYg Tk9DU0VUUworICAgIGlmICh0Y3Nfc2F2ZSA+IC0xKSB7ICAgICAgICAgICAgICAgIC8qIENoYXJh Y3RlciBzZXRzICovCisgICAgICAgIHRjaGFyc2V0ID0gdGNzX3NhdmU7CisgICAgICAgIHRjc19z YXZlID0gLTE7CisgICAgfQorICAgIGlmIChmY3Nfc2F2ZSA+IC0xKSB7CisgICAgICAgIGZjaGFy c2V0ID0gZmNzX3NhdmU7CisgICAgICAgIGZjc19zYXZlID0gLTE7CisgICAgfQorICAgIGlmIChn X3hmcnhsYSA+IC0xKSB7CisJeGZyeGxhID0gZ194ZnJ4bGE7CisJZ194ZnJ4bGEgPSAtMTsKKyAg ICB9CisgICAgc2V0eGxhdHlwZSh0Y2hhcnNldCxmY2hhcnNldCk7ICAgICAgLyogVHJhbnNsYXRp b24gdHlwZSAqLworI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKworI2lmZGVmIE5FVENPTk4KKyNpZm5k ZWYgTk9TUEwKKyAgICBpZiAoZ19wc3dkKSB7CisgICAgICAgIGNrc3RybmNweShwd2J1ZixnX3Bz d2QsUFdCVUZMKTsKKyAgICAgICAgbWFrZXN0cigmZ19wc3dkLE5VTEwpOworICAgIH0KKyAgICBp ZiAoZ19wZmxnID4gLTEpIHsKKyAgICAgICAgcHdmbGcgPSBnX3BmbGc7CisgICAgICAgIGdfcGZs ZyA9IC0xOworICAgIH0KKyAgICBpZiAoZ19wY3B0ID4gLTEpIHsKKyAgICAgICAgcHdjcnlwdCA9 IGdfcGNwdDsKKyAgICAgICAgZ19wY3B0ID0gLTE7CisgICAgfQorI2VuZGlmIC8qIE5PU1BMICov CisjZW5kaWYgLyogTkVUQ09OTiAqLworCisgICAgaWYgKGdfYmluYXJ5ID4gLTEpIHsgICAgICAg ICAgICAgICAgLyogRmlsZSB0eXBlICovCisgICAgICAgIGJpbmFyeSA9IGdfYmluYXJ5OworICAg ICAgICBnX2JpbmFyeSA9IC0xOworICAgIH0KKyAgICBpZiAoZ194ZmVybW9kZSA+IC0xKSB7ICAg ICAgICAgICAgICAvKiBUcmFuc2ZlciBtb2RlICovCisgICAgICAgIHhmZXJtb2RlID0gZ194ZmVy bW9kZTsKKyAgICAgICAgZ194ZmVybW9kZSA9IC0xOworICAgIH0KKyNpZmRlZiBQQVRURVJOUwor ICAgIGlmIChnX3BhdHRlcm5zID4gLTEpIHsgICAgICAgICAgICAgIC8qIEZpbGVuYW1lIHBhdHRl cm5zICovCisgICAgICAgIHBhdHRlcm5zID0gZ19wYXR0ZXJuczsKKyAgICAgICAgZ19wYXR0ZXJu cyA9IC0xOworICAgIH0KKyNlbmRpZiAvKiBQQVRURVJOUyAqLworCisgICAgaWYgKGdfdXNlcGlw ZXMgPiAtMSkgeworICAgICAgICB1c2VwaXBlcyA9IGdfdXNlcGlwZXM7CisgICAgICAgIGdfdXNl cGlwZXMgPSAtMTsKKyAgICB9CisgICAgaWYgKGdfbWF0Y2hkb3QgPiAtMSkgeworICAgICAgICBt YXRjaGRvdCA9IGdfbWF0Y2hkb3Q7CisgICAgICAgIGdfbWF0Y2hkb3QgPSAtMTsKKyAgICB9Cisg ICAgaWYgKGdfcHJvdG8gPiAtMSkgeyAgICAgICAgICAgICAgICAgLyogUHJvdG9jb2wgKi8KKyAg ICAgICAgcHJvdG9jb2wgPSBnX3Byb3RvOworICAgICAgICBnX3Byb3RvID0gLTE7CisgICAgfQor ICAgIGlmIChnX3VycHNpeiA+IC0xKSB7CisgICAgICAgIHVycHNpeiA9IGdfdXJwc2l6OworICAg ICAgICBkZWJ1ZyhGMTAxLCJmdHJlc2V0IHJlc3RvcmluZyB1cnBzaXoiLCIiLHVycHNpeik7Cisg ICAgICAgIGdfdXJwc2l6ID0gLTE7CisgICAgfQorICAgIGlmIChnX3Nwc2l6ZiA+IC0xKSB7Cisg ICAgICAgIHNwc2l6ZiA9IGdfc3BzaXpmOworICAgICAgICBkZWJ1ZyhGMTAxLCJmdHJlc2V0IHJl c3RvcmluZyBzcHNpemYiLCIiLHNwc2l6Zik7CisgICAgICAgIGdfc3BzaXpmID0gLTE7CisgICAg fQorICAgIGlmIChnX3Nwc2l6ID4gLTEpIHsKKyAgICAgICAgc3BzaXogPSBnX3Nwc2l6OworICAg ICAgICBkZWJ1ZyhGMTAxLCJmdHJlc2V0IHJlc3RvcmluZyBzcHNpeiIsIiIsc3BzaXopOworICAg ICAgICBnX3Nwc2l6ID0gLTE7CisgICAgfQorICAgIGlmIChnX3Nwc2l6ciA+IC0xKSB7CisgICAg ICAgIHNwc2l6ciA9IGdfc3BzaXpyOworICAgICAgICBkZWJ1ZyhGMTAxLCJmdHJlc2V0IHJlc3Rv cmluZyBzcHNpenIiLCIiLHNwc2l6cik7CisgICAgICAgIGdfc3BzaXpyID0gLTE7CisgICAgfQor ICAgIGlmIChnX3NwbWF4ID4gLTEpIHsKKyAgICAgICAgc3BtYXggPSBnX3NwbWF4OworICAgICAg ICBnX3NwbWF4ID0gLTE7CisgICAgfQorICAgIGlmIChnX3dzbG90ciA+IC0xKSB7CisgICAgICAg IHdzbG90ciA9IGdfd3Nsb3RyOworICAgICAgICBnX3dzbG90ciA9IC0xOworICAgIH0KKyAgICBp ZiAoZ19wcmVmaXhpbmcgPiAtMSkgeworICAgICAgICBwcmVmaXhpbmcgPSBnX3ByZWZpeGluZzsK KyAgICAgICAgZ19wcmVmaXhpbmcgPSAtMTsKKyAgICB9CisgICAgaWYgKGdfZm5jYWN0ID4gLTEp IHsKKyAgICAgICAgZm5jYWN0ID0gZ19mbmNhY3Q7CisgICAgICAgIGdfZm5jYWN0ID0gLTE7Cisg ICAgfQorICAgIGlmIChnX2ZuY252ID4gLTEpIHsKKyAgICAgICAgZm5jbnYgPSBnX2ZuY252Owor ICAgICAgICBnX2ZuY252ID0gLTE7CisgICAgfQorICAgIGlmIChnX2Zuc3BhdGggPiAtMSkgewor ICAgICAgICBmbnNwYXRoID0gZ19mbnNwYXRoOworICAgICAgICBnX2Zuc3BhdGggPSAtMTsKKyAg ICB9CisgICAgaWYgKGdfZm5ycGF0aCA+IC0xKSB7CisgICAgICAgIGZucnBhdGggPSBnX2ZucnBh dGg7CisgICAgICAgIGdfZm5ycGF0aCA9IC0xOworICAgIH0KKyAgICBpZiAoZ19za2lwYnVwID4g LTEpIHsKKyAgICAgICAgc2tpcGJ1cCA9IGdfc2tpcGJ1cDsKKyAgICAgICAgZ19za2lwYnVwID0g LTE7CisgICAgfQorICAgIG5vbGlua3MgPSAyOwkJCS8qIC9GT0xMT1dMSU5LUyBpcyBuZXZlciBn bG9iYWwgKi8KKyAgICByZWN1cnNpdmUgPSAwOyAgICAgICAgICAgICAgICAgICAgICAvKiAvUkVD VVJTSVZFIGNhbiBuZXZlciBiZSBnbG9iYWwgKi8KKyAgICB4ZmlsZXR5cGUgPSAtMTsKKworICAg IGlmIChnX2Rpc3BsYSA+IC0xKSB7ICAgICAgICAgICAgICAgIC8qIEZpbGUgdHJhbnNmZXIgZGlz cGxheSAqLworICAgICAgICBmZGlzcGxhID0gZ19kaXNwbGE7CisgICAgICAgIGdfZGlzcGxhID0g LTE7CisgICAgfQorICAgIGlmIChnX3NwYXRoID4gLTEpIHsgICAgICAgICAgICAgICAgIC8qIFNl bmQgcGF0aG5hbWVzICovCisgICAgICAgIGZuc3BhdGggPSBnX3NwYXRoOworICAgICAgICBnX3Nw YXRoID0gLTE7CisgICAgfQorICAgIGlmIChnX3JwYXRoID4gLTEpIHsgICAgICAgICAgICAgICAg IC8qIFJlY2VpdmUgcGF0aG5hbWVzICovCisgICAgICAgIGZucnBhdGggPSBnX3JwYXRoOworICAg ICAgICBnX3JwYXRoID0gLTE7CisgICAgfQorICAgIGlmIChnX2ZuY252ID4gLTEpIHsgICAgICAg ICAgICAgICAgIC8qIEZpbGVuYW1lIGNvbnZlcnNpb24gKi8KKyAgICAgICAgZm5jbnYgPSBnX2Zu Y252OworICAgICAgICBnX2ZuY252ID0gLTE7CisgICAgfQorI2lmZGVmIFBJUEVTRU5ECisgICAg bWFrZXN0cigmc25kZmlsdGVyLGdfc2ZpbHRlcik7ICAgICAgLyogU2VuZCBmaWx0ZXIgKi8KKyAg ICBtYWtlc3RyKCZyY3ZmaWx0ZXIsZ19yZmlsdGVyKTsgICAgICAvKiBSZWNlaXZlIGZpbHRlciAq LworI2VuZGlmIC8qIFBJUEVTRU5EICovCisKKyNpZm5kZWYgTk9GUklMTFMKKyAgICBybWFpbGYg PSBycHJpbnRmID0gMDsgICAgICAgICAgICAgICAvKiBNQUlMIGFuZCBQUklOVCBtb2RpZmllcnMg Zm9yIFNFTkQgKi8KKyAgICBvcHRidWZbMF0gPSBOVUw7ICAgICAgICAgICAgICAgICAgICAvKiBN QUlMIGFuZCBQUklOVCBvcHRpb25zICovCisjZW5kaWYgLyogTk9GUklMTFMgKi8KKworICAgIG1v dmluZyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlc2V0IGRlbGV0ZS1hZnRlci1z ZW5kIGluZGljYXRvciAqLworICAgIHNuZGFmdGVyWzBdICA9IE5VTDsgICAgICAgICAgICAgICAg IC8qIFJlc2V0IFNFTkQgc2VsZWN0aW9uIHN3aXRjaGVzICovCisgICAgc25kYmVmb3JlWzBdID0g TlVMOworCisgICAgZm9yIChpID0gMDsgaSA8IE5TTkRFWENFUFQ7IGkrKykgeworICAgICAgICBp ZiAoc25kZXhjZXB0W2ldKQorICAgICAgICAgIGZyZWUoc25kZXhjZXB0W2ldKTsKKyAgICAgICAg c25kZXhjZXB0W2ldID0gTlVMTDsKKyAgICAgICAgaWYgKHJjdmV4Y2VwdFtpXSkKKyAgICAgICAg ICBmcmVlKHJjdmV4Y2VwdFtpXSk7CisgICAgICAgIHJjdmV4Y2VwdFtpXSA9IE5VTEw7CisgICAg fQorICAgIHNuZGxhcmdlciA9ICAoQ0tfT0ZGX1QpLTE7CisgICAgc25kc21hbGxlciA9IChDS19P RkZfVCktMTsKKyAgICBkZWJ1ZyhGMTAxLCJwcmVzZW50IHNuZHNtYWxsZXIiLCIiLHNuZHNtYWxs ZXIpOworI2lmZGVmIEdGVElNRVIKKyAgICBndHYgPSAtMS4wOworICAgIG9sZGd0diA9IC0xLjA7 CisjZWxzZQorICAgIGd0diA9IC0xTDsKKyAgICBvbGRndHYgPSAtMUw7CisjZW5kaWYgLyogR0ZU SU1FUiAqLworI2VuZGlmIC8qIE5PSUNQICovCit9CisjZW5kaWYgLyogTk9YRkVSICovCisKK2No YXIgKgordHRndHBuKCkgewkJCQkvKiBHZXQgdHlwaWNhbCBwb3J0IG5hbWUgKi8KKy8qCisgIElk ZWFsbHkgdGhpcyByb3V0aW5lIHdvdWxkIGJlIGltcGxlbWVudGVkIGluIGVhY2ggb2YgdGhlIGNr dT9pby4qIG1vZHVsZXMsCisgIGJ1dCB0aGF0IHJlcXVpcmVzIGNoYW5naW5nIHRoZSBBUEkgZGVm aW5pdGlvbi4KKyovCisgICAgcmV0dXJuKAorI2lmZGVmIE9TMgorI2lmZGVmIE9TMk9OTFkKKyJD T00xIgorI2Vsc2UgIC8qIE9TMk9OTFkgKi8KKyJUQVBJIFsgbmFtZSBdIG9yIENPTTEiCisjZW5k aWYgLyogT1MyT05MWSAqLworI2Vsc2UgIC8qIE9TMiAqLworI2lmZGVmIFZNUworIlRYQTA6LCBU VEEwOiwgb3IgTFRBMDoiCisjZWxzZSAgLyogVk1TICovCisjaWZkZWYgU09MQVJJUworIi9kZXYv Y3VhL2EiCisjZWxzZSAgLyogU09MQVJJUyAqLworI2lmZGVmIEhQVVgxMAorIi9kZXYvY3VhMHAw IgorI2Vsc2UgIC8qIEhQVVgxMCAqLworI2lmZGVmIEhQVVgKKyIvZGV2L2N1YTAwIgorI2Vsc2Ug IC8qIEhQVVggKi8KKyNpZmRlZiBfX0ZyZWVCU0RfXworIi9kZXYvY3VhYTAiCisjZWxzZSAgLyog X19GcmVlQlNEX18gKi8KKyNpZmRlZiBfX2xpbnV4X18KKyIvZGV2L3R0eVMwIgorI2Vsc2UgIC8q IF9fbGludXhfXyAqLworI2lmZGVmIEJTRDQ0CisiL2Rldi90dHkwMCIKKyNlbHNlICAvKiBCU0Q0 NCAqLworI2lmZGVmIE9TSworIi90MSIKKyNlbHNlICAvKiBPU0sgKi8KKyNpZmRlZiBRTlgKKyIv ZGV2L3NlcjEiCisjZWxzZSAgLyogUU5YICovCisjaWZkZWYgUU5YNgorIi9kZXYvc2VyMSIKKyNl bHNlICAvKiBRTlg2ICovCisjaWZkZWYgVU5JWFdBUkUKKyIvZGV2L3Rlcm0vMDAgb3IgL2Rldi90 dHkwMCIKKyNlbHNlICAvKiBVTklYV0FSRSAqLworI2lmZGVmIENLX1NDT1Y1CisiL2Rldi90dHkx QSIKKyNlbHNlICAvKiBDS19TQ09WNSAqLworI2lmZGVmIENLX1NDTzMyVjQKKyIvZGV2L3R0eTFB IgorI2Vsc2UgIC8qIENLX1NDTzMyVjQgKi8KKyNpZmRlZiBNX1hFTklYCisiL2Rldi90dHkxQSIK KyNlbHNlICAvKiBNX1hFTklYICovCisjaWZkZWYgQUlYUlMKKyIvZGV2L3R0eTAiCisjZWxzZSAg LyogQUlYUlMgKi8KKyNpZmRlZiBER1VYCisiL2Rldi90dHkwMCIKKyNlbHNlICAvKiBER1VYICov CisjaWZkZWYgZGF0YWdlbmVyYWwKKyJAY29uMSIKKyNlbHNlICAvKiBkYXRhZ2VuZXJhbCAqLwor I2lmZGVmIElSSVgKKyIvZGV2L3R0eW0wIgorI2Vsc2UgIC8qIElSSVggKi8KKyNpZmRlZiBTVU5P UzQKKyIvZGV2L3R0eWgwIgorI2Vsc2UgIC8qIFNVTk9TNCAqLworI2lmZGVmIFNWNjhSM1Y2Cisi L2Rldi9zY2MwIgorI2Vsc2UgIC8qIFNWNjhSM1Y2ICovCisjaWZkZWYgTU9UU1Y4OFI0CisiL2Rl di9jb250dHkwMCIKKyNlbHNlICAvKiBNT1RTVjg4UjQgKi8KKyNpZmRlZiBORVhUCisiL2Rldi9j dWZhIgorI2Vsc2UKKyNpZmRlZiBPU0YKKyIvZGV2L3R0eWQxIgorI2Vsc2UKKyNpZmRlZiBTSU5J WAorIi9kZXYvdHR5YzEiCisjZWxzZQorI2lmZGVmIFVOSVgKKyIvZGV2L2N1YSwgL2Rldi9hY3Us IC9kZXYvdHR5MCwgZXRjIgorI2Vsc2UgIC8qIFVOSVggKi8KKyIoc29ycnkgbm8gZXhhbXBsZSBh dmFpbGFibGUpIgorI2VuZGlmIC8qIFVOSVggKi8KKyNlbmRpZiAvKiBTSU5JWCAqLworI2VuZGlm IC8qIE9TRiAqLworI2VuZGlmIC8qIE5FWFQgKi8KKyNlbmRpZiAvKiBNT1RTVjg4UjQgKi8KKyNl bmRpZiAvKiBTVjY4UjNWNiAqLworI2VuZGlmIC8qIFNVTk9TNCAqLworI2VuZGlmIC8qIElSSVgg Ki8KKyNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLworI2VuZGlmIC8qIERHVVggKi8KKyNlbmRpZiAv KiBBSVggKi8KKyNlbmRpZiAvKiBNX1hFTklYICovCisjZW5kaWYgLyogQ0tfU0NPMzJWNCAqLwor I2VuZGlmIC8qIENLX1NDT1Y1ICovCisjZW5kaWYgLyogVU5JWFdBUkUgKi8KKyNlbmRpZiAvKiBR Tlg2ICovCisjZW5kaWYgLyogUU5YICovCisjZW5kaWYgLyogT1NLICovCisjZW5kaWYgLyogQlNE NDQgKi8KKyNlbmRpZiAvKiBfX2xpbnV4X18gKi8KKyNlbmRpZiAvKiBfX0ZyZWVCU0RfXyAqLwor I2VuZGlmIC8qIEhQVVggKi8KKyNlbmRpZiAvKiBIUFVYMTAgKi8KKyNlbmRpZiAvKiBTT0xBUklT ICovCisjZW5kaWYgLyogVk1TICovCisjZW5kaWYgLyogT1MyICovCisJICAgKTsKK30KKworLyog IEMgSyBfIEUgUiBSIFMgVCBSICAtLSAgUmV0dXJuIG1lc3NhZ2UgZnJvbSBtb3N0IHJlY2VudCBz eXN0ZW0gZXJyb3IgKi8KKworI2lmZGVmIENLUk9PVAorZXh0ZXJuIGludCBja3Jvb3RlcnI7Cisj ZW5kaWYgLyogQ0tST09UICovCisKK2NoYXIgKgorY2tfZXJyc3RyKCkgeworI2lmZGVmIFVTRV9T VFJFUlJPUgorI2lmbmRlZiBDS19BTlNJTElCUworICAgIC8qIFNob3VsZCBoYXZlIGJlZW4gZGVj bGFyZWQgaW4gPHN0cmluZy5oPiAqLworX1BST1RPVFlQKCBjaGFyICogc3RyZXJyb3IsIChpbnQp ICk7CisjZW5kaWYgLyogQ0tfQU5TSUxJQlMgKi8KKyNpZmRlZiBDS1JPT1QKKyAgICBpZiAoY2ty b290ZXJyKQorICAgICAgcmV0dXJuKCJPZmYgbGltaXRzIik7CisjZW5kaWYgLyogQ0tST09UICov CisgICAgcmV0dXJuKHN0cmVycm9yKGVycm5vKSk7CisjZWxzZSAgLyogIVVTRV9TVFJFUlJPUiAq LworI2lmZGVmIFZNUworICAgIGV4dGVybiBjaGFyICogY2t2bXNlcnJzdHIodW5zaWduZWQgbG9u Zyk7CisjaWZkZWYgQ0tST09UCisgICAgaWYgKGNrcm9vdGVycikKKyAgICAgIHJldHVybigiT2Zm IGxpbWl0cyIpOworI2VuZGlmIC8qIENLUk9PVCAqLworICAgIHJldHVybihja3Ztc2VycnN0cigw TCkpOworI2Vsc2UgIC8qICFWTVMgKi8KKyNpZmRlZiBCU0Q0NAorI2lmZGVmIF9fMzg2QlNEX18K KyNpZm5kZWYgTkRTWVNFUlJMSVNUCisgICAgZXh0ZXJuIGludCBzeXNfbmVycjsKKyAgICBleHRl cm4gY2hhciAqc3lzX2Vycmxpc3RbXTsKKyNlbmRpZiAvKiBORFNZU0VSUkxJU1QgKi8KKyNlbHNl ICAvKiAhX18zODZCU0RfXyAqLworI2lmbmRlZiBfX2JzZGlfXworI2lmbmRlZiBORFNZU0VSUkxJ U1QKKyAgICBleHRlcm4gaW50IHN5c19uZXJyOworICAgIGV4dGVybiBjb25zdCBjaGFyICpjb25z dCBzeXNfZXJybGlzdFtdOworI2VuZGlmIC8qIE5EU1lTRVJSTElTVCAqLworI2VuZGlmIC8qIF9f YnNkaV9fICovCisjZW5kaWYgLyogX18zODZCU0RfXyAqLworI2lmZGVmIENLUk9PVAorICAgIGlm IChja3Jvb3RlcnIpCisgICAgICByZXR1cm4oIk9mZiBsaW1pdHMiKTsKKyAgICBlbHNlCisjZW5k aWYgLyogQ0tST09UICovCisgICAgaWYgKGVycm5vID49IHN5c19uZXJyKQorICAgICAgcmV0dXJu KCJFcnJvciBudW1iZXIgb3V0IG9mIHJhbmdlIik7CisgICAgZWxzZQorICAgICAgcmV0dXJuKChj aGFyICopIHN5c19lcnJsaXN0W2Vycm5vXSk7CisjZWxzZSAvKiAhQlNENDQgKi8KKyNpZmRlZiBB VFRTVgorI2lmbmRlZiBORFNZU0VSUkxJU1QKKyAgICBleHRlcm4gaW50IHN5c19uZXJyOworICAg IGV4dGVybiBjaGFyICpzeXNfZXJybGlzdFtdOworI2VuZGlmIC8qIE5EU1lTRVJSTElTVCAqLwor I2lmZGVmIENLUk9PVAorICAgIGlmIChja3Jvb3RlcnIpCisgICAgICByZXR1cm4oIk9mZiBsaW1p dHMiKTsKKyAgICBlbHNlCisjZW5kaWYgLyogQ0tST09UICovCisgICAgaWYgKGVycm5vID49IHN5 c19uZXJyKQorICAgICAgcmV0dXJuKCJFcnJvciBudW1iZXIgb3V0IG9mIHJhbmdlIik7CisgICAg ZWxzZQorICAgICAgcmV0dXJuKChjaGFyICopIHN5c19lcnJsaXN0W2Vycm5vXSk7CisjZWxzZSAv KiAhQVRUU1YgKi8KKyNpZmRlZiBCU0Q0CisjaWZuZGVmIE5EU1lTRVJSTElTVAorICAgIGV4dGVy biBpbnQgc3lzX25lcnI7CisgICAgZXh0ZXJuIGNoYXIgKnN5c19lcnJsaXN0W107CisjZW5kaWYg LyogTkRTWVNFUlJMSVNUICovCisjaWZkZWYgQ0tST09UCisgICAgaWYgKGNrcm9vdGVycikKKyAg ICAgIHJldHVybigiT2ZmIGxpbWl0cyIpOworICAgIGVsc2UKKyNlbmRpZiAvKiBDS1JPT1QgKi8K KyAgICBpZiAoZXJybm8gPj0gc3lzX25lcnIpCisgICAgICByZXR1cm4oIkVycm9yIG51bWJlciBv dXQgb2YgcmFuZ2UiKTsKKyAgICBlbHNlCisgICAgICByZXR1cm4oKGNoYXIgKikgc3lzX2Vycmxp c3RbZXJybm9dKTsKKyNlbHNlCisjaWZkZWYgT1MyCisjaWZuZGVmIE5EU1lTRVJSTElTVAorICAg IGV4dGVybiBjaGFyICpzeXNfZXJybGlzdFtdOworI2VuZGlmIC8qIE5EU1lTRVJSTElTVCAqLwor I2lmZGVmIE5UCisgICAgZXh0ZXJuIGludF9zeXNfbmVycjsKKyNlbmRpZiAvKiBOVCAqLworICAg IGNoYXIgKmU7CisjaWZkZWYgQ0tST09UCisgICAgaWYgKGNrcm9vdGVycikKKyAgICAgIHJldHVy bigiT2ZmIGxpbWl0cyIpOworI2VuZGlmIC8qIENLUk9PVCAqLworICAgIGUgPSAoZXJybm8gPiAt MQorI2lmZGVmIE5UCisgICAgICAgICAmJiBlcnJubyA8PSBfc3lzX25lcnIKKyNlbmRpZiAvKiBO VCAqLworICAgICAgICAgKSA/CisjaWZkZWYgTlQKKyAgICAgICAgIChjaGFyICopIHN5c19lcnJs aXN0W2Vycm5vXQorI2Vsc2UgLyogTlQgKi8KKyAgICAgICAgIC8qIEkgZG9uJ3Qga25vdyBob3cg dG8gZ2V0IGEgQ0xJQiBlcnJvciBzdHJpbmcgaW4gT1MvMiAqLworICAgICAgICAgc3RyZXJyb3Io ZXJybm8pCisjZW5kaWYgLyogTlQgKi8KKyAgICAgICAgICAgICA6ICIiOworICAgIHJldHVybihl ID8gZSA6ICIiKTsKKyNlbHNlIC8qIE9TMiAqLworICAgIHJldHVybigiIik7CisjZW5kaWYgLyog T1MyICovCisjZW5kaWYgLyogQlNENCAqLworI2VuZGlmIC8qIEFUVFNWICovCisjZW5kaWYgLyog QlNENDQgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBVU0VfU1RSRVJST1IgKi8KK30K KworI2lmZGVmIFBBVFRFUk5TCisvKgorICBGaWxlbmFtZSBwYXR0ZXJuIHJlY29nbml0aW9uIGxp c3RzIGZvciBhdXRvbWF0aWMgdGV4dC9iaW5hcnkgc3dpdGNoaW5nLgorICBUaGVzZSBhcmUgc29t ZXdoYXQgcGFzc2UgYWZ0ZXIgdGhlIGFkZGl0aW9uIG9mIHNjYW5maWxlKCkgICg3LjApLgorICBC dXQgd2l0aCB0aGUgYWRkaXRpb24gb2YgRlRQIFtNXUdFVCwgdGhleSdyZSBiYWNrIGluIHN0eWxl ICg4LjApLgorCisgIEFsdGhvdWdoLCB3aXRoIEZUUCB0aGUgbGlzdHMgbmVlZCB0byBiZSB1c2Vk IGluIHRoZSByZXZlcnNlLiAgV2l0aAorICBLZXJtaXQgdGhlIGxpc3QgaXMgdXNlZCB0byBpbXBs eSB0aGUgdHlwZXMgb2YgdGhlIGxvY2FsIHN5c3RlbS4gIFdoZXJlYXMKKyAgd2l0aCBGVFAsIHRo ZSBsaXN0IG11c3QgYmUgdXNlZCB0byBpbXBseSB0aGUgdHlwZSBvZiB0aGUgcmVtb3RlIHN5c3Rl bS4KKyAgVGhlcmVmb3JlLCBhbGwgcGxhdGZvcm1zIG11c3Qgbm93IHN1cHBvcnQgYWxsIG9mIHRo ZSBsaXN0cy4KKyovCitjaGFyICp0eHRwYXR0ZXJuc1tGVFBBVFRFUk5TKzFdID0geyBOVUxMLCBO VUxMIH07CitjaGFyICpiaW5wYXR0ZXJuc1tGVFBBVFRFUk5TKzFdID0geyBOVUxMLCBOVUxMIH07 CisvKgorICBEZWZhdWx0IHBhdHRlcm4gbGlzdHMgZm9yIGVhY2ggcGxhdGZvcm0uLi4KKworICBO T1RFOiBJbiBtb3N0IGNhc2VzIHdlIGxlYXZlICIuaGxwIiwgIi5pbmkiLCBhbmQgIi5zY3IiIGFs b25lOyBhbHRob3VnaCB0aGV5CisgIGFyZSB0cmFkaXRpb25hbGx5IHRleHQgdHlwZXMsIHRoZXkg YXJlIGJpbmFyeSBpbiBXaW5kb3dzLiAgU28gdGhleSBhcmUKKyAgaGFuZGxlZCBieSB0aGUgcHJl dmFpbGluZyBTRVQgRklMRSBUWVBFLCByYXRoZXIgdGhhbiBhdXRvbWF0aWNhbGx5LgorICBTaW1p bGFybHkgZm9yICIuZGF0IiwgIi5pbmYiLCBhbmQgc28gb24uICBBbHNvICIucHMiIHNpbmNlIFBv c3RTY3JpcHQgZmlsZXMKKyAgYXJlIG5vdCBhbHdheXMgdGV4dC4gICIubG9nIiBpcyBvbWl0dGVk IHNpbmNlIGxvZ3MgY2FuIGJlIHRleHQgb3IgYmluYXJ5LAorICBleGNlcHQgaW4gVk1TIHRoZXkg YXJlIHVzdWFsbHkgdGV4dCwgZXRjIGV0Yy4KKworICBMYXRlciAoU2VwIDIwMDMpOiBBZGQgUG9z dFNjcmlwdCB0byBiaW5hcnkgcGF0dGVybnMuCisqLworc3RhdGljIGNoYXIgKnR4dHBbU1lTX01B WF1bRlRQQVRURVJOU10gPSB7CisgICAgLyogVU5LTk9XTiAqLyB7CisJTlVMTCwgTlVMTAorICAg IH0sCisgICAgewkJCQkJLyogVU5JWCAqLworICAgICIqLnR4dCIsIiouYyIsIiouaCIsIiouciIs IioudyIsIiouY3BwIiwiKi5jYyIsIioua3NjIiwiKi5id3IiLCIqLnVwZCIsCisgICAgIiouaHRt bCIsIiouaHRtIiwiKi5tc3MiLCIqLnRleCIsIioubnIiLCJbTW1dYWtlZmlsZSIsICIqLmhleCIs ICIqLmhxeCIsCisgICAgIiouZm9yIiwiKi5mNzciLCIqLmYiLCIqLkYiLCIqLnMiLCIqLnBhcyIs IiouamF2YSIsIiouZWwiLCIqLmxpc3AiLCIqLnNoIiwKKyAgICAiKi5tNCIsIioucGVybCIsIiou cGwiLCIqLnBvZCIsIioucG0iLCIqLmF3ayIsIiouc25vIiwiKi5zcHQiLCIqLnNlZCIsCisgICAg Iioua3NjIiwiKi5UWFQiLCAiKnJlYWQubWUiLCAiKlJFQUQuTUUiLCAiLioiLCAiKi8uKiIsICIq Lm1lbSIsIioubWFjIiwKKyAgICBOVUxMCisgICAgfSwKKyAgICB7CQkJCQkvKiBXSU4zMiAqLwor ICAgICIqLnR4dCIsIioua3NjIiwiKi5odG0iLCIqLmh0bWwiLCIqLmJhdCIsIiouY21kIiwiKi5q YXYiLCIqLmFzbSIsICIqLmhleCIsCisgICAgIiouaHF4IiwgIiouYyIsICIqLmgiLCAiKi5jcHAi LCAiKi5ocHAiLCAiKi5jeHgiLCAiKi5jeHgiLCAiKi53IiwKKyAgICAiKi5qYXZhIiwgIiouYndy IiwgIioudXBkIiwgIioubWFrIiwgInJlYWQubWUiLCAiKi5tYXAiLCAibWFrZWZpbGUiLAorICAg ICIqLm1lbSIsIioubWFjIiwiKi5jYyIsIioucGwiLCIqLnBvZCIsIioucG0iLCIqLm00IixOVUxM CisgICAgfSwKKyAgICB7CQkJCQkvKiBWTVMgKi8KKyAgICAiKi5jb20iLCIqLnR4dCIsIiouYyIs ICAiKi5mb3IiLCIqLnBhcyIsIioucm5vIiwiKi5ybmgiLCIqLm1hciIsIiouYmxpIiwKKyAgICAi Ki5obHAiLCIqLm1zcyIsIiouZG9jIiwiKi5id3IiLCIqLmNsZCIsIiouaGV4IiwiKi5iYXMiLCIq LmluaSIsIioubG9nIiwKKyAgICAiKi5tbXMiLCIqLm9wdCIsIioua3NjIiwiKi5wZXJsIiwiKi5w bCIsIioucG9kIiwiKi5wbSIsIiouc25vIiwiKi5zcHQiLAorICAgICIqLm1lbSIsTlVMTAorICAg IH0sCisgICAgewkJCQkJLyogT1MyICovCisgICAgIioudHh0IiwiKi5rc2MiLCIqLmh0bSIsIiou aHRtbCIsIiouYmF0IiwiKi5jbWQiLCIqLmphdiIsIiouYXNtIiwgIiouaGV4IiwKKyAgICAiKi5o cXgiLCAiKi5jIiwgIiouaCIsICIqLmNwcCIsICIqLmhwcCIsICIqLmN4eCIsICIqLmN4eCIsICIq LnciLAorICAgICIqLmphdmEiLCAiKi5id3IiLCAiKi51cGQiLCAiKi5tYWsiLCAicmVhZC5tZSIs ICIqLm1hcCIsICJtYWtlZmlsZSIsCisgICAgTlVMTAorICAgIH0sCisgICAgewkJCQkJLyogRE9T ICovCisgICAgIioudHh0IiwiKi5rc2MiLCIqLmh0bSIsIiouYmF0IiwiKi5jbWQiLCIqLmphdiIs IiouYXNtIiwgIiouaGV4IiwKKyAgICAiKi5ocXgiLCAiKi5jIiwgIiouaCIsICIqLmNwcCIsICIq LmhwcCIsICIqLmN4eCIsICIqLmN4eCIsICIqLnciLAorICAgICIqLmJ3ciIsICIqLnVwZCIsICIq Lm1hayIsICJyZWFkLm1lIiwgIioubWFwIiwgIm1ha2VmaWxlIiwgTlVMTAorICAgIH0sCisgICAg ewkJCQkJLyogVE9QUy0xMCAqLworICAgICIqLmNtZCIsIiouaGxwIiwiKi5kb2MiLCIqLmluaSIs IioudHh0IiwiKi5tYWMiLCIqLmZvciIsIiouc2FpIiwiKi5ibGkiLAorICAgICIqLnBhcyIsIiou c25vIiwiKi5zcHQiLCIqLnBjbCIsIioubXNzIiwiKi5ybm8iLCIqLmIzNiIsIioudGV4IiwiKi5w dWIiLAorICAgICIqLnJlcSIsIioucjM2IiwiKi5tZW0iLCIqLmJ3ciIsIiouY2NsIiwiKi5jdGwi LCIqLnJuaCIsIioua3NjIixOVUxMCisgICAgfSwKKyAgICB7CQkJCQkvKiBUT1BTLTIwICovCisg ICAgIiouY21kIiwiKi5obHAiLCIqLmRvYyIsIiouaW5pIiwiKi50eHQiLCIqLm1hYyIsIiouZm9y IiwiKi5zYWkiLCIqLmJsaSIsCisgICAgIioucGFzIiwiKi5zbm8iLCIqLnNwdCIsIioucGNsIiwi Ki5tc3MiLCIqLnJubyIsIiouYjM2IiwiKi50ZXgiLCIqLnB1YiIsCisgICAgIioucmVxIiwiKi5y MzYiLCIqLm1lbSIsIiouYndyIiwiKi5jY2wiLCIqLmN0bCIsIioucm5oIiwiKi5rc2MiLE5VTEwK KyAgICB9LAorICAgIHsJCQkJCS8qIFNUUkFUVVMgVk9TICovCisgICAgIioudHh0IiwiKi5rc2Mi LCIqLmh0bSIsIiouaHRtbCIsIiouYmF0IiwgIiouY21kIiwiKi5qYXYiLCIqLmFzbSIsIiouaGV4 IiwKKyAgICAiKi5ocXgiLCIqLmMiLCAgIiouaCIsICAiKi53IiwgICAiKi5qYXZhIiwiKi5id3Ii LCIqLnVwZCIsIioudHRwIiwiKi5jbSIsCisgICAgIioucGwxIiwiKi5lbWFjcyIsICJyZWFkLm1l IiwgIioucGwiLCAibWFrZWZpbGUiLCBOVUxMCisgICAgfSwKKyAgICB7CQkJCQkvKiBERyBBT1Mv VlMgKi8KKyAgICAiKi50eHQiLCAiKi5jIiwgIiouaCIsICIqLnciLCAiKi5lciIsICIqLmJ3ciIs ICIqLnVwZCIsICJyZWFkLm1lIiwKKyAgICAiKi5jbGkiLCAiKi5rc2MiLCBOVUxMCisgICAgfSwK KyAgICB7CQkJCQkvKiBPU0sgKi8KKyAgICAiKi5jIiwiKi5jcHAiLCIqLmgiLCIqLmEiLCIqYWtl ZmlsZSIsIC8qIHByb2dyYW0gc291cmNlcyAqLworICAgICIqLmZvciIsIiouZjc3IiwiKi5mIiwi Ki5GIiwiKi5zIiwiKi5wYXMiLCIqLmphdmEiLCIqLmVsIiwiKi5saXNwIiwKKyAgICAiKi5zaCIs IioucGVybCIsIiouYXdrIiwiKi5zbm8iLCIqLnNwdCIsIiouc2VkIiwKKyAgICAiKi50eHQiLCIq LnciLAkJCS8qIGdlbmVyYWwgdGV4dCAqLworICAgICIqLmtzYyIsIiouYndyIiwiKi51cGQiLAor ICAgICIqLmh0bWwiLCIqLmh0bSIsIioubXNzIiwiKi50ZXgiLCIqLm5yIiwiKi5oZXgiLCAiKi5o cXgiLAorICAgICIqLlRYVCIsICIqcmVhZC5tZSIsICIqUkVBRC5NRSIsICIuKiIsICIqLy4qIiwK KyAgICBOVUxMCisgICAgfQorfTsKKworLyogTm90ZTogLkRPQyBhZGRlZCB0byAoc29tZSkgYmlu YXJ5IHBhdHRlcm5zIEp1bmUgMTk5OC4uLiBNaWNyb3NvZnQgd2lucy4gKi8KKworc3RhdGljIGNo YXIgKmJpbnBbU1lTX01BWF1bRlRQQVRURVJOU10gPSB7CisgICAgewkJCQkJLyogVU5LTk9XTiAq LworICAgIE5VTEwsIE5VTEwKKyAgICB9LAorICAgIHsJCQkJCS8qIFVOSVggKi8KKyAgICAiKi5n eiIsIiouWiIsIioudGd6IiwiKi5naWYiLCAiKi50YXIiLCIqLnppcCIsIioubyIsIiouc28iLCIq LmEiLCIqLm91dCIsCisgICAgIiouZXhlIiwgIiouanBnIiwgIiouanBlZyIsICIqLnRpZiIsIiou dGlmZiIsICIqLnBkZiIsICIqLnNvLioiLCAiKi5jbGFzcyIsCisgICAgIioucnBtIiwgIiouYm1w IiwgIiouYnoyIiwgIiouQk1QIiwgIiouZGxsIiwgIiouZG9jIiwgIioudnhkIiwgIiouZGN4IiwK KyAgICAiKi54bCoiLCAiKi5semgiLCAiKi5saHoiLCAiKi5hdSIsICIqLnZvYyIsICIqLm1wZyIs ICIqLm1wZWciLCJbd2tdZXJtaXQiLAorICAgICIqLnBzIiwgTlVMTAorICAgIH0sCisgICAgewkJ CQkJLyogV0lOMzIgKi8KKyAgICAiKi5leGUiLCAiKi56aXAiLCAiKi5vYmoiLCAiKi5jb20iLCAi Ki5naWYiLCAiKi5qcGciLCAiKi53YXYiLCAiKi5yYW0iLAorICAgICIqLmNsYXNzIiwiKi5jbGEi LCIqLmRsbCIsICIqLmRydiIsICIqLm9jeCIsICIqLnZieCIsICIqLmxpYiIsICIqLmljbyIsCisg ICAgIiouYm1wIiwgIioudGlmIiwgIioudGFyIiwgIiouZ3oiLCAgIioudGd6IiwgIioueGwqIiwg IiouZG9jIiwgIioudnhkIiwKKyAgICAiKi5wZGYiLCAiKi5semgiLCAiKi52eGQiLCAiKi5zbmQi LCAiKi5hdSIsICIqIC52b2MiLCAiKi5tcGciLCAiKi5tcGVnIiwKKyAgICAiKi5wcyIsIE5VTEwK KyAgICB9LAorICAgIHsJCQkJCS8qIFZNUyAqLworICAgICIqLmV4ZSIsIioub2JqIiwiKi5iYWsi LCIqLmJpbiIsIiouYWRmIiwiKi5zdGIiLCIqLm1haSIsIiouc3lzIiwiKi5kbXAiLAorICAgICIq LnBzIiwgIiouZGF0IiwiKi5wYXIiLCBOVUxMCisgICAgfSwKKyAgICB7CQkJCQkvKiBPUzIgKi8K KyAgICAiKi5leGUiLCAiKi56aXAiLCAiKi5vYmoiLCAiKi5jb20iLCAiKi5naWYiLCAiKi5qcGci LCAiKi53YXYiLCAiKi5yYW0iLAorICAgICIqLmNsYXNzIiwgIiouY2xhIiwgIiouZGxsIiwgIiou ZHJ2IiwgIioub2N4IiwgIioudmJ4IiwgIioubGliIiwgIiouaWNvIiwKKyAgICAiKi5ibXAiLCAi Ki50aWYiLCAiKi50YXIiLCAiKi5neiIsICIqLnRneiIsICIqLnhsKiIsICIqLmRvYyIsICIqLnZ4 ZCIsCisgICAgIioucGRmIiwgIioucHMiLCAiKi5semgiLCBOVUxMCisgICAgfSwKKyAgICB7CQkJ CQkvKiBET1MgKi8KKyAgICAiKi5leGUiLCAiKi56aXAiLCAiKi5vYmoiLCAiKi5jb20iLCAiKi5n aWYiLCAiKi5qcGciLCAiKi53YXYiLCAiKi5yYW0iLAorICAgICIqLmNsYSIsICIqLmRsbCIsICIq LmRydiIsICIqLm9jeCIsICIqLnZieCIsICIqLmxpYiIsICIqLmljbyIsCisgICAgIiouYm1wIiwg IioudGlmIiwgIioudGFyIiwgIiouZ3oiLCAiKi50Z3oiLCAiKi54bCoiLCAiKi5kb2MiLCAiKi52 eGQiLAorICAgICIqLnBkZiIsICIqLnBzIiwgIioubHpoIiwgTlVMTAorICAgIH0sCisgICAgewkJ CQkJLyogVE9QUzEwICovCisgICAgIiouZXhlIiwiKi5zYXYiLCIqLmJpbiIsIioucmltIiwiKi5y ZWwiLCIqLnVudiIsIioubGliIiwiKi50YXAiLCIqLmR2aSIsCisgICAgIioucHMiLCBOVUxMCisg ICAgfSwKKyAgICB7CQkJCQkvKiBUT1BTMjAgKi8KKyAgICAiKi5leGUiLCIqLnNhdiIsIiouYmlu IiwiKi5yaW0iLCIqLnJlbCIsIioudW52IiwiKi5saWIiLCIqLnRhcCIsIiouZHZpIiwKKyAgICAi Ki5wcyIsIE5VTEwKKyAgICB9LAorICAgIHsJCQkJCS8qIFNUUkFUVVMgVk9TICovCisgICAgIiou ZXhlIiwgIiouemlwIiwgIioub2JqIiwgIiouY29tIiwgIiouZ2lmIiwgIiouanBnIiwgIioud2F2 IiwgIioucmFtIiwKKyAgICAiKi5jbGFzcyIsICIqLmNsYSIsICIqLmRsbCIsICIqLmRydiIsICIq Lm9jeCIsICIqLnZieCIsICIqLmxpYiIsICIqLmljbyIsCisgICAgIiouYm1wIiwgIioudGlmIiwg IioudGFyIiwgIiouZ3oiLCAiKi50Z3oiLCAiKi54bCoiLCAiKi5kb2MiLCAiKi52eGQiLAorICAg ICIqLnBkZiIsICIqLnBzIiwgIioubHpoIiwgIioucG0iLCBOVUxMCisgICAgfSwKKyAgICB7CQkJ CQkvKiBERyAqLworICAgICIqLm9iIiwgIioucHIiLCAiKi5kbXAiLCAiKi5wcyIsIE5VTEwKKyAg ICB9LAorICAgIHsgLyogT1NLICovCisgICAgIiouZ3oiLCIqLloiLCIqLnoiLCIqLnRneiIsIiou bGh6IiwiKi50YXIiLAkvKiBhcmNoaXZlcnMgKi8KKyAgICAiKi56aXAiLCIqLmFyIiwiKi56b28i LCIqLnJwbSIsIioubHpoIiwKKyAgICAvKiBvYmplY3QgZmlsZXMsIGxpYnJhcmllcywgZXhlY3V0 YWJsZXMgKi8KKyAgICAiKi5yIiwiKi5sIiwiKi5leGUiLCAiKi5kbGwiLCAiKi5zby4qIiwgIiou Y2xhc3MiLAorICAgIC8qIGltYWdlcyAqLworICAgICIqLmdpZiIsICIqLmpwZyIsICIqLmpwZWci LCAiKi50aWYiLCIqLnRpZmYiLCAiKi5wZGYiLCAiKi5wcyIsCisgICAgIiouYm1wIiwgIiouYnoy IiwgIiouQk1QIiwiKi5wY3giLAorICAgIE5VTEwKKyAgICB9Cit9OworCisvKgorICBTZXQgdXAg ZGVmYXVsdCBwYXR0ZXJuIGxpc3RzIHNvIHRoZXkgY2FuIGJlIGZyZWVkIGFuZCByZS1tYWxsb2Mn ZC4KKyAgRWFjaCBwYXR0ZXJuIGxpc3QgbXVzdCB0ZXJtaW5hdGVkIGJ5IGEgbnVsbCBlbGVtZW50 LgorKi8KK1ZPSUQKK2luaXRwYXQoKSB7CisgICAgaW50IGk7CisgICAgZm9yIChpID0gMDsgaSA8 IEZUUEFUVEVSTlM7IGkrKykgeworICAgICAgICB0eHRwYXR0ZXJuc1tpXSA9IE5VTEw7CisgICAg ICAgIGJpbnBhdHRlcm5zW2ldID0gTlVMTDsKKyAgICB9CisgICAgZm9yIChpID0gMDsgaSA8IEZU UEFUVEVSTlM7IGkrKykgeworI2lmZGVmIFVOSVgKKyAgICAgICAgbWFrZXN0cigmKHR4dHBhdHRl cm5zW2ldKSx0eHRwW1NZU19VTklYXVtpXSk7CisjZWxzZSAvKiBVTklYICovCisjaWZkZWYgT1My CisjaWZkZWYgTlQKKyAgICAgICAgbWFrZXN0cigmKHR4dHBhdHRlcm5zW2ldKSx0eHRwW1NZU19X SU4zMl1baV0pOworI2Vsc2UgLyogTlQgKi8KKyAgICAgICAgbWFrZXN0cigmKHR4dHBhdHRlcm5z W2ldKSx0eHRwW1NZU19PUzJdW2ldKTsKKyNlbmRpZiAvKiBOVCAqLworI2Vsc2UgLyogT1MyICov CisjaWZkZWYgVk1TCisgICAgICAgIG1ha2VzdHIoJih0eHRwYXR0ZXJuc1tpXSksdHh0cFtTWVNf Vk1TXVtpXSk7CisjZWxzZSAvKiBWTVMgKi8KKyNpZmRlZiBTVFJBVFVTCisgICAgICAgIG1ha2Vz dHIoJih0eHRwYXR0ZXJuc1tpXSksdHh0cFtTWVNfVk9TXVtpXSk7CisjZWxzZSAvKiBTVFJBVFVT ICovCisjaWZkZWYgZGF0YWdlbmVyYWwKKyAgICAgICAgbWFrZXN0cigmKHR4dHBhdHRlcm5zW2ld KSx0eHRwW1NZU19ER11baV0pOworI2Vsc2UgLyogZGF0YWdlbmVyYWwgKi8KKyNpZmRlZiBPU0sK KyAgICAgICAgbWFrZXN0cigmKHR4dHBhdHRlcm5zW2ldKSx0eHRwW1NZU19PU0tdW2ldKTsKKyNl bHNlIC8qIE9TSyAqLworICAgICAgICBtYWtlc3RyKCYodHh0cGF0dGVybnNbaV0pLHR4dHBbU1lT X1VOS11baV0pOworI2VuZGlmIC8qIE9TSyAqLworI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCisj ZW5kaWYgLyogU1RSQVRVUyAqLworI2VuZGlmIC8qIFZNUyAqLworI2VuZGlmIC8qIE9TMiAqLwor I2VuZGlmIC8qIFVOSVggKi8KKyAgICAgICAgaWYgKCF0eHRwW2ldKQorICAgICAgICAgIGJyZWFr OworICAgIH0KKyAgICBmb3IgKGkgPSAwOyBpIDwgRlRQQVRURVJOUzsgaSsrKSB7CisjaWZkZWYg VU5JWAorICAgICAgICBtYWtlc3RyKCYoYmlucGF0dGVybnNbaV0pLGJpbnBbU1lTX1VOSVhdW2ld KTsKKyNlbHNlIC8qIFVOSVggKi8KKyNpZmRlZiBPUzIKKyNpZmRlZiBOVAorICAgICAgICBtYWtl c3RyKCYoYmlucGF0dGVybnNbaV0pLGJpbnBbU1lTX1dJTjMyXVtpXSk7CisjZWxzZSAvKiBOVCAq LworICAgICAgICBtYWtlc3RyKCYoYmlucGF0dGVybnNbaV0pLGJpbnBbU1lTX09TMl1baV0pOwor I2VuZGlmIC8qIE5UICovCisjZWxzZSAvKiBPUzIgKi8KKyNpZmRlZiBWTVMKKyAgICAgICAgbWFr ZXN0cigmKGJpbnBhdHRlcm5zW2ldKSxiaW5wW1NZU19WTVNdW2ldKTsKKyNlbHNlIC8qIFZNUyAq LworI2lmZGVmIFNUUkFUVVMKKyAgICAgICAgbWFrZXN0cigmKGJpbnBhdHRlcm5zW2ldKSxiaW5w W1NZU19WT1NdW2ldKTsKKyNlbHNlIC8qIFNUUkFUVVMgKi8KKyNpZmRlZiBkYXRhZ2VuZXJhbAor ICAgICAgICBtYWtlc3RyKCYoYmlucGF0dGVybnNbaV0pLGJpbnBbU1lTX0RHXVtpXSk7CisjZWxz ZSAvKiBkYXRhZ2VuZXJhbCAqLworI2lmZGVmIE9TSworICAgICAgICBtYWtlc3RyKCYoYmlucGF0 dGVybnNbaV0pLGJpbnBbU1lTX09TS11baV0pOworI2Vsc2UgLyogT1NLICovCisgICAgICAgIG1h a2VzdHIoJihiaW5wYXR0ZXJuc1tpXSksYmlucFtTWVNfVU5LXVtpXSk7CisjZW5kaWYgLyogT1NL ICovCisjZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KKyNlbmRpZiAvKiBTVFJBVFVTICovCisjZW5k aWYgLyogVk1TICovCisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogVU5JWCAqLworICAgICAg ICBpZiAoIWJpbnBbaV0pCisgICAgICAgICAgYnJlYWs7CisgICAgfQorfQorCisvKgorICBtIGEg dCBjIGggbiBhIG0gZSAgLS0gIENvbXBhcmUgZmlsZW5hbWUgd2l0aCB0ZXh0ICYgYmluYXJ5IG5h bWUgcGF0dGVybnMuCisKKyAgUmV0dXJuczoKKyAgICAwIGlmIG5hbWUgbWF0Y2hlcyBhIHRleHQg cGF0dGVybiBidXQgbm90IGEgYmluYXJ5IHBhdHRlcm4uCisgICAgMSBpZiBuYW1lIG1hdGNoZXMg YSBiaW5hcnkgcGF0dGVybiBidXQgbm90IGEgdGV4dCBwYXR0ZXJuLgorICAgLTEgaWYgbmFtZSBt YXRjaGVzIG5vIHBhdHRlcm5zLgorICAgLTIgaWYgbmFtZSBtYXRjaGVzIGEgYmluYXJ5IHBhdHRl cm4gYW5kIGEgdGV4dCBwYXR0ZXJuLgorKi8KK2ludAorbWF0Y2huYW1lKGZpbGVuYW1lLCBsb2Nh bCwgb3MpIGNoYXIgKiBmaWxlbmFtZTsgaW50IGxvY2FsOyBpbnQgb3M7IHsKKyAgICBpbnQgcmMg PSAtMTsJCQkvKiBSZXR1cm4gY29kZSAqLworICAgIGNoYXIgKiBuYW1lLCAqIHA7CisjaWZkZWYg T1MyT1JVTklYCisgICAgY2hhciB0bXBidWZbQ0tNQVhQQVRIKzFdOworI2VuZGlmIC8qIE9TMk9S VU5JWCAqLworCisgICAgbmFtZSA9IGZpbGVuYW1lID8gZmlsZW5hbWUgOiAiIjsJLyogQ29weSBv ZiBvcmlnaW5hbCBhcmcgKi8KKyAgICBpZiAocGF0dGVybnMgJiYgKm5hbWUpIHsJCS8qIElmIFBB VFRFUk5TIE9OLi4uICovCisJaW50IGk7CisKKyNpZmRlZiBPUzJPUlVOSVgKKwlpZiAoY2ttYXRj aCgiKi5+WzEtOV0qfiIsbmFtZSwxLDEpKSB7IC8qIE5hbWUgaGFzIGJhY2t1cCBzdWZmaXg/ICov CisJICAgIGludCBrOworCSAgICBrID0gY2tzdHJuY3B5KHRtcGJ1ZixuYW1lLENLTUFYUEFUSCsx KTsgLyogWWVzLCBjb3B5IGFuZCBzdHJpcCAqLworCSAgICBmb3IgKGkgPSBrIC0gMzsgaSA+IDQ7 IGktLSkgeworCQlpZiAodG1wYnVmW2ldID09ICd+JyAmJiB0bXBidWZbaS0xXSA9PSAnLicpIHsK KwkJICAgIHRtcGJ1ZltpLTFdID0gTlVMOworCQkgICAgYnJlYWs7CisJCX0KKwkgICAgfQorCSAg ICBuYW1lID0gdG1wYnVmOwkJLyogQW5kIHBvaW50IHRvIHN0cmlwcGVkIGNvcHkgKi8KKwl9Cisj ZW5kaWYgLyogT1MyT1JVTklYICovCisJenN0cmlwKG5hbWUsJnApOwkJLyogU3RyaXAgcGF0aG5h bWUgdG9vICovCisJbmFtZSA9IHA7CisKKyAgICAgICAgaWYgKGxvY2FsKSB7CisgICAgICAgICAg ICBpZiAodHh0cGF0dGVybnNbMF0pIHsJLyogU2VhcmNoIHRleHQgcGF0dGVybnMgKi8KKyAgICAg ICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgRlRQQVRURVJOUyAmJiB0eHRwYXR0ZXJuc1tpXTsg aSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChja21hdGNoKHR4dHBhdHRlcm5zW2ldLG5h bWUsZmlsZWNhc2UsMSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJjID0gMDsKKyAgICAg ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGJpbnBhdHRlcm5zWzBd KSB7CS8qIEFuZCBzZWFyY2ggYmluYXJ5IHBhdHRlcm5zICovCisgICAgICAgICAgICAgICAgZm9y IChpID0gMDsgaSA8IEZUUEFUVEVSTlMgJiYgYmlucGF0dGVybnNbaV07IGkrKykgeworICAgICAg ICAgICAgICAgICAgICBpZiAoY2ttYXRjaChiaW5wYXR0ZXJuc1tpXSxuYW1lLGZpbGVjYXNlLDEp KSB7CisgICAgICAgICAgICAgICAgICAgICAgICByYyA9IChyYyA+IC0xKSA/IC0yIDogMTsKKyAg ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCX0gZWxzZSB7CisgICAgICAgICAgICBpZiAo b3MgPj0gMCAmJiBvcyA8IFNZU19NQVgpIHsKKwkJaWYgKHR4dHBbb3NdWzBdKSB7CisJCSAgICBm b3IgKGkgPSAwOyBpIDwgRlRQQVRURVJOUyAmJiB0eHRwW29zXVtpXTsgaSsrKSB7CisJCQlpZiAo Y2ttYXRjaCh0eHRwW29zXVtpXSxuYW1lLGZpbGVjYXNlLDEpKSB7CisJCQkgICAgcmMgPSAwOwor CQkJICAgIGJyZWFrOworCQkJfQorCQkgICAgfQorCQl9CisJCWlmIChiaW5wW29zXVswXSkgewor CQkgICAgZm9yIChpID0gMDsgaSA8IEZUUEFUVEVSTlMgJiYgYmlucFtvc11baV07IGkrKykgewor CQkJaWYgKGNrbWF0Y2goYmlucFtvc11baV0sbmFtZSxmaWxlY2FzZSwxKSkgeworCQkJICAgIHJj ID0gKHJjID4gLTEpID8gLTIgOiAxOworCQkJICAgIGJyZWFrOworCQkJfQorCQkgICAgfQorCQl9 CisJICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBkZWJ1ZyhGMTExLCJtYXRjaG5hbWUiLG5h bWUscmMpOworICAgIHJldHVybihyYyk7Cit9CisjZW5kaWYgLyogUEFUVEVSTlMgKi8KKworI2lm ZGVmIFVOSUNPREUKKyNpZm5kZWYgTk9FVkVOTUFYCisjZGVmaW5lIEVWRU5NQVgKKyNlbmRpZiAv KiBOT0VWRU5NQVggKi8KKyNlbmRpZiAvKiBVTklDT0RFICovCisKKy8qICBTIEMgQSBOIEYgSSBM IEUgIC0tICBBbmFseXplIGEgZmlsZSdzIGNvbnRlbnRzICAqLworCisvKgorICBDYWxsIHdpdGg6 CisgICAgbmFtZTogICAgUG9pbnRlciB0byBuYW1lIG9mIGV4aXN0aW5nIGZpbGUuCisgICAgZmxh ZzogICAgUG9pbnRlciB0byBpbnQgaW4gd2hpY2ggdG8gcmV0dXJuIGFkZGl0aW9uYWwgbnVtZXJp YyBkYXRhLgorCisgIFJldHVybnM6CisgICAgLTEgb24gZmFpbHVyZSAodG8gb3BlbiBmaWxlIG9y IHRvIHJlYWQgZnJvbSBpdCkuCisgICAgSW50ZWdlciwgMC4uNCwgb24gc3VjY2VzcyBpbmRpY2F0 aW5nIGZpbGUgdHlwZToKKyAgICAgMCA9IDctYml0IHRleHQgKGZsYWcgPSAtMSkKKyAgICAgMSA9 IFVURi04IHRleHQgKGZsYWcgPSAtMSkKKyAgICAgMiA9IFVDUy0yIHRleHQgKGZsYWcgPSAgMDog YmlnLWVuZGlhbjsgZmxhZyA9IDE6IGxpdHRsZS1lbmRpYW4pCisgICAgIDMgPSA4LWJpdCB0ZXh0 IChmbGFnID0gIDA6IG5vIEMxIGJ5dGVzOyBmbGFnID0gMTogaW5jbHVkZXMgQzEgYnl0ZXMpCisg ICAgIDQgPSBUZXh0ICAgICAgICh0eXBlIHVua25vd24pCisgICAgIDUgPSBiaW5hcnkgICAgIChm bGFnID0gLTEpCisKKyAgSWYgVU5JQ09ERSBpcyBkZWZpbmVkOgorCisgICAxLiBJZiBmaWxlIGJl Z2lucyB3aXRoIGEgdmFsaWQgQk9NLCBpdCBpcyBiZWxpZXZlZC4gIE90aGVyd2lzZSB3ZQorICAg ICAgcmVhZCB0aGUgZmlyc3QgNEsgb2YgdGhlIGZpbGUgKHNpbmNlIGl0IG1pZ2h0IGJlIGVtYWls IHdpdGggdmVyYm9zZQorICAgICAgaGVhZGVycykgYW5kIGFuYWx5emUgaXQ6CisKKyAgIDIuIElm IGZpbGUgY29udGFpbnMgb25seSB2YWxpZCBVVEYtOCBzZXF1ZW5jZXMsIHdlIGNhbGwgaXQgVVRG LTg7CisgICAgICBvdGhlcndpc2U6CisKKyAgIDMuIElmIHRoZSBmaWxlIGNvbnRhaW5zIGxvdHMg b2YgYWx0ZXJuYXRlIDAgYnl0ZXMsIHdlIGNhbGwgaXQgVUNTLTIsIGFuZAorICAgICAgc2V0IHRo ZSBwb2xhcml0eSBhY2NvcmRpbmcgdG8gd2hldGhlciB0aGUgcHJlcG9uZGVyYW5jZSBvZiB0aGVt IGFyZSBpbgorICAgICAgZXZlbiBvciBvZGQgcG9zaXRpb25zOyBvdGhlcndpc2U6CisKKyAgIDQu IElmIEVWRU5NQVggaXMgZGVmaW5lZCBhbmQgdGhlIGZpbGUgY29udGFpbnMgbG90cyBvZiBhbHRl cm5hdGUgYnl0ZXMgdGhhdAorICAgICAgYXJlIGlkZW50aWNhbCwgZXZlbiBpZiB0aGV5IGFyZW4n dCB6ZXJvLCBhbmQgdGhlIG51bWJlciBvZiBzdWNoIGJ5dGVzCisgICAgICBpcyBhdCBsZWFzdCBm b3VyIHRpbWVzIHRoZSBsZW5ndGggb2YgdGhlIG1heGltdW0gcnVuIG9mIGFsdGVybmF0aW5nCisg ICAgICBpZGVudGljYWwgYnl0ZXMgb2YgdGhlIG9wcG9zaXRlIHBvbGFyaXR5LCB3ZSBjYWxsIGl0 IFVDUy0yOyBvdGhlcndpc2U6CisKKyAgIDUuIElmIHRoZSBmaWxlIGNvbnRhaW5lZCBubyBieXRl cyB3aXRoIHRoZWlyIDh0aCBiaXRzIG9uIGFuZCBubyBjb250cm9scworICAgICAgb3RoZXIgdGhh biBDUiwgTEYsIEhULCBhbmQgRkYsIHdlIGNhbGwgaXQgQVNDSUk7IG90aGVyd2lzZToKKworICAg Ni4gSWYgaXQgY29udGFpbnMgQzAgY29udHJvbCBjaGFyYWN0ZXJzIG90aGVyIHRoYW4gQ1IsIExG LCBIVCwgYW5kIEZGLCB3ZQorICAgICAgY2FsbCBpdCBiaW5hcnk7IG90aGVyd2lzZToKKworICAg Ny4gV2UgY2FsbCBpdCA4LWJpdCB0ZXh0LCBjaGFyYWN0ZXIgc2V0IHVua25vd24gKGNvdWxkIGJl IExhdGluLTEgb3IKKyAgICAgIGFueXRoaW5nIGVsc2UpLgorCisgICBOb3RlIHRoYXQgbWFsZm9y bWVkIFVURi04IGlzIG5vdCBkaWFnbm9zZWQgYXMgVVRGLTguCisKKyAgIElmIFVOSUNPREUgaXMg bm90IGRlZmluZWQ6CisKKyAgIDEuIElmIHRoZSBmaWxlIGNvbnRhaW5zIEMwIGNvbnRyb2wgY2hh cmFjdGVycyBvdGhlciB0aGFuIENSLCBMRiwgSFQsIGFuZAorICAgICAgRkYsIHdlIGNhbGwgaXQg YmluYXJ5OyBvdGhlcndpc2U6CisKKyAgIDIuIElmIHRoZSBmaWxlIGNvbnRhaW5zIGFueSA4LWJp dCBieXRlcywgd2UgY2FsbCBpdCA4LWJpdCB0ZXh0OyBvdGhlcndpc2U6CisKKyAgIDMuIFdlIGNh bGwgaXQgNy1iaXQgdGV4dC4KKworICAgSW4gdGhlIG5vbi1Vbmljb2RlIGNhc2UsIFVDUy0yIGlz IGRpYWdub3NlZCBhcyBiaW5hcnksIGJ1dCBVVEYtOCBhcworICAgOC1iaXQgdGV4dC4KKworICAg VGhlcmUgaXMgbm8gc2lnbmlmaWNhbnQgc3BlZWQgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBVbmlj b2RlIGFuZAorICAgbm9uLVVuaWNvZGUgY2FzZXMuCisqLworaW50CitzY2FuZmlsZShuYW1lLGZs YWcsbnNjYW5maWxlKSBjaGFyICogbmFtZTsgaW50ICogZmxhZywgbnNjYW5maWxlOyB7CisgICAg RklMRSAqIGZwOwkJCQkvKiBGaWxlIHBvaW50ZXIgKi8KKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZltT Q0FORklMRUJVRl07CS8qIEZpbGUgZGF0YSBidWZmZXIgZm9yIGFuYWx5c2lzICovCisgICAgaW50 IHgsIHZhbCA9IC0xLCBjb3VudCA9IDA7CQkvKiBXb3JrZXJzICovCisgICAgaW50IHJjID0gLTE7 CQkJLyogUmV0dXJuIGNvZGUgKi8KKyAgICBpbnQgcHYgPSAtMTsJCQkvKiBQYXR0ZXJuLW1hdGNo IHZhbHVlICovCisgICAgaW50IGVvZiA9IDA7CQkJLyogRmxhZyBmb3IgZmlsZSBFT0YgZW5jb3Vu dGVyZWQgKi8KKyAgICBpbnQgYnl0ZXMgPSAwOwkJCS8qIFRvdGFsIGJ5dGUgY291bnQgKi8KKyNp ZmRlZiBVTklDT0RFCisgICAgdW5zaWduZWQgaW50IGMwLCBjMTsJCS8qIEZpcnN0IDIgZmlsZSBi eXRlcyAoZm9yIEJPTSkgKi8KKyNlbmRpZiAvKiBVTklDT0RFICovCisgICAgZXh0ZXJuIGludCBw aXBlc2VuZCwgZmlsZXBlZWs7CisKKyAgICByZWdpc3RlciBpbnQgaTsJCQkvKiBMb29wIGNvbnRy b2wgKi8KKyAgICBpbnQgcmVhZHNpemUgPSAwOwkJCS8qIEhvdyBtdWNoIHRvIHJlYWQgKi8KKyAg ICBpbnQgZWlnaHRiaXQgPSAwOwkJCS8qIE51bWJlciBvZiBieXRlcyB3aXRoIDh0aCBiaXQgb24g Ki8KKyAgICBpbnQgYzBjb250cm9scyA9IDA7CQkJLyogQzAgbm9uLXRleHQgY29udHJvbC1jaGFy IGNvdW50ZXIgKi8KKyAgICBpbnQgYzBub25pc28gPSAwOwkJCS8qIEMwIG5vbi1JU08gY29udHJv bC1jaGFyIGNvdW50ZXIgKi8KKyAgICBpbnQgYzFjb250cm9scyA9IDA7CQkJLyogQzEgY29udHJv bC1jaGFyYWN0ZXIgY291bnRlciAqLworICAgIHVuc2lnbmVkIGludCBjOwkJCS8qIEN1cnJlbnQg Y2hhcmFjdGVyICovCisgICAgaW50IHJ1bm1heCA9IDA7CQkJLyogTG9uZ2VzdCBydW4gb2YgMCBi eXRlcyAqLworICAgIGludCBydW56ZXJvID0gMDsJCQkvKiBSdW4gb2YgMCBieXRlcyAqLworICAg IGludCBwY3R6ZXJvID0gMDsJCQkvKiBQZXJjZW50YWdlIG9mIDAgYnl0ZXMgKi8KKyAgICBpbnQg dHh0Y3ogPSAwOworI2lmZGVmIENLX0NUUkxaCisgICAgZXh0ZXJuIGludCBlb2ZtZXRob2Q7Cisj ZW5kaWYgLyogQ0tfQ1RSTFogKi8KKworI2lmZGVmIFVOSUNPREUKKyAgICBpbnQgbm90dXRmOCA9 IDA7CQkJLyogTm9uemVybyBpZiBkZWZpbml0ZWx5IG5vdCBVVEYtOCAqLworICAgIGludCB1dGY4 c3RhdGUgPSAwOwkJCS8qIFVURi04IHJlY29nbml6ZXIgc3RhdGUgKi8KKyAgICBpbnQgb2RkemVy byA9IDA7CQkJLyogTnVtYmVyIG9mIDAgYnl0ZXMgaW4gb2RkIHBvc3Rpb25zICovCisgICAgaW50 IGV2ZW56ZXJvID0gMDsJCQkvKiBhbmQgaW4gZXZlbiBwb3NpdGlvbnMgKi8KKyAgICBpbnQgbGZu dWwgPSAwOwkJCS8qIE51bWJlciBvZiA8TEY+PE5VTD4gc2VxdWVuY2VzICovCisgICAgaW50IGNy bGYgPSAwOwkJCS8qIE51bWJlciBvZiA8Q1JMRj4gc2VxdWVuY2VzICovCisjZWxzZQorICAgIGlu dCBub3R1dGY4ID0gMTsKKyNlbmRpZiAvKiBVTklDT0RFICovCisKKyNpZmRlZiBDT01NRU5UCisj aWZkZWYgRVZFTk1BWAorICAgIGludCBvZGRydW4gPSAwLCBvZGRtYXggPSAwLCBvZGRieXRlID0g MCwgb2RkbWF4Ynl0ZSA9IDA7CisgICAgaW50IGV2ZW5ydW4gPSAwLCBldmVubWF4ID0gMCwgZXZl bmJ5dGUgPSAwLCBldmVubWF4Ynl0ZSA9IDA7CisjZW5kaWYgLyogRVZFTk1BWCAqLworI2VuZGlm IC8qIENPTU1FTlQgKi8KKworI2lmbmRlZiBOT1hGRVIKKyAgICBpZiAocGlwZXNlbmQgfHwgY2Fs aWJyYXRlIHx8IHNuZGFycmF5KSAvKiBPbmx5IGZvciByZWFsIGZpbGVzICovCisgICAgICByZXR1 cm4oLTEpOworI2VuZGlmIC8qIE5PWEZFUiAqLworICAgIGRlYnVnKEYxMTEsInNjYW5maWxlIixu YW1lLG5zY2FuZmlsZSk7CisjaWZkZWYgUEFUVEVSTlMKKyAgICBpZiAoIWZpbGVwZWVrKSB7CisJ cHYgPSBtYXRjaG5hbWUobmFtZSwxLC0xKTsKKwlpZiAocHYgPCAwKQorCSAgcmMgPSAtMTsKKwll bHNlCisJICByYyA9IChwdiA9PSAxKSA/IEZUX0JJTiA6IEZUX1RFWFQ7CisJZGVidWcoRjExMSwi c2NhbmZpbGUgIWZpbGVwZWVrIHJlc3VsdCIsbmFtZSxyYyk7CisJcmV0dXJuKHJjKTsKKyAgICB9 CisjZW5kaWYgLyogUEFUVEVSTlMgKi8KKworI2lmZGVmIFZNUworLyogV2UgZG9uJ3Qgc2NhbiBp biBWTVMgd2hlcmUgdGV4dCBmaWxlcyBoYXZlIHZhcmlvdXMgcmVjb3JkIGZvcm1hdHMgaW4gICov CisvKiB3aGljaCByZWNvcmQgaGVhZGVycyBjb250YWluIHNlZW1pbmdseSBub24tdGV4dCBieXRl cy4gIFNvIHRoZSBiZXN0ICAgKi8KKy8qIHdlIGNhbiBkbyBpbiBWTVMgaXMgdGVsbCB3aGV0aGVy IHRoZSBmaWxlIGlzIHRleHQgb3IgYmluYXJ5LCBwZXJpb2QuICAqLworICAgIHsKKwlpbnQgYiwg eDsKKwliID0gYmluYXJ5OwkJCS8qIFNhdmUgY3VycmVudCBiaW5hcnkgc2V0dGluZyAqLworCWlm ICh6b3BlbmkoWklGSUxFLG5hbWUpID4gMCkgewkvKiBJbiBWTVMgdGhpcyBzZXRzIGJpbmFyeSAq LworCSAgICB4ID0gYmluYXJ5OwkJCS8qIEdldCByZXN1bHQgKi8KKwkgICAgemNsb3NlKFpJRklM RSk7CQkvKiBDbG9zZSB0aGUgZmlsZSAqLworCSAgICBiaW5hcnkgPSBiOwkJCS8qIFJlc3RvcmUg cHJldmlvdXMgYmluYXJ5IHNldHRpbmcgKi8KKwkgICAgcmMgPSB4ID8gRlRfQklOIDogRlRfVEVY VDsKKwkgICAgdmFsID0gMDsKKwkgICAgZ290byB4c2NhbmZpbGU7CisJfQorICAgIH0KKyNlbmRp ZiAvKiBWTVMgKi8KKworICAgIGVvZiA9IDA7CQkJCS8qIEVuZC1vZi1maWxlIHJlYWNoZWQgaW5k aWNhdG9yICovCisjaWZkZWYgT1MyCisgICAgZnAgPSBmb3BlbihuYW1lLCAicmIiKTsJCS8qIE9w ZW4gdGhlIGZpbGUgaW4gYmluYXJ5IG1vZGUgKi8KKyNlbHNlCisgICAgZnAgPSBmb3BlbihuYW1l LCAiciIpOworI2VuZGlmIC8qIE9TMiAqLworCisgICAgaWYgKCFmcCkJCQkJLyogRmFpbGVkPyAq LworICAgICAgcmV0dXJuKC0xKTsKKworICAgIHdoaWxlICgxKSB7CQkJCS8qIE9uZSBvciBtb3Jl IGd1bHBzIGZyb20gZmlsZSAqLworCWlmIChlb2YpIHsJCQkvKiBFT0YgZnJvbSBsYXN0IHRpbWU/ ICovCisJICAgIGRlYnVnKEYxMTEsInNjYW5maWxlIGF0IEVPRiIsbmFtZSxieXRlcyk7CisJICAg IGlmIChydW56ZXJvID4gcnVubWF4KQorCSAgICAgIHJ1bm1heCA9IHJ1bnplcm87CisJICAgIGJy ZWFrOworCX0KKwlpZiAobnNjYW5maWxlIDwgMCkgewkJLyogUmVhZGluZyB3aG9sZSBmaWxlICov CisJICAgIHJlYWRzaXplID0gU0NBTkZJTEVCVUY7CisJfSBlbHNlIHsJCQkvKiBSZWFkaW5nIGZp cnN0IG5zY2FuZmlsZWUgYnl0ZXMgKi8KKwkgICAgcmVhZHNpemUgPSBuc2NhbmZpbGUgLSBieXRl czsKKwkgICAgaWYgKHJlYWRzaXplIDwgMSkKKwkgICAgICBicmVhazsKKwkgICAgaWYgKHJlYWRz aXplID4gU0NBTkZJTEVCVUYpCisJICAgICAgcmVhZHNpemUgPSBTQ0FORklMRUJVRjsKKwl9CisJ ZGVidWcoRjEwMSwic2NhbmZpbGUgcmVhZHNpemUiLCIiLHJlYWRzaXplKTsKKwljb3VudCA9IGZy ZWFkKGJ1ZiwxLHJlYWRzaXplLGZwKTsgLyogUmVhZCBhIGJ1ZmZlciAqLworCWlmIChjb3VudCA9 PSBFT0YgfHwgY291bnQgPT0gMCkgeworCSAgICBkZWJ1ZyhGMTExLCJzY2FuZmlsZSBFT0YiLG5h bWUsY291bnQpOworCSAgICBicmVhazsKKwl9CisJZGVidWcoRjExMSwic2NhbmZpbGUgYnVmZmVy IG9rIixuYW1lLGNvdW50KTsKKworCWlmIChieXRlcyA9PSAwICYmIGNvdW50ID4gOCkgeworCSAg ICAvKiBQREYgZmlsZXMgY2FuIGxvb2sgbGlrZSB0ZXh0IGluIHRoZSBiZWdpbm5pbmcuICovCisJ ICAgIGlmICghY2tzdHJjbXAoKGNoYXIgKilidWYsIiVQREYtMS4iLDcsMSkpIHsKKwkJaWYgKGlz ZGlnaXQoYnVmWzddKSkgeworCQkgICAgaWYgKGJ1Zls4XSA9PSAnXDAxNScgfHwKKwkJCWNvdW50 ID4gOSAmJiBidWZbOF0gPT0gU1AgJiYgYnVmWzldID09ICdcMDE1JykgeworI2lmZGVmIERFQlVH CisJCQlidWZbOF0gPSBOVUw7CisJCQlkZWJ1ZyhGMTEwLCJzY2FuZmlsZSBQREYiLGJ1ZiwwKTsK KyNlbmRpZiAvKiBERUJVRyAqLworCQkJYmluYXJ5ID0gMTsJLyogQnV0IHRoZXkgYXJlIGJpbmFy eS4gKi8KKwkJCWJyZWFrOworCQkgICAgfQorCQl9CisJICAgIH0gZWxzZSBpZiAoIWNrc3RyY21w KChjaGFyICopYnVmLCIlIVBTLUFkbyIsOCwxKSkgeworCQkvKiBEaXR0byBmb3IgUG9zdFNjcmlw dCAqLworI2lmZGVmIERFQlVHCisJCWludCBpOworCQlmb3IgKGkgPSA4OyBpIDwgY291bnQ7IGkr KykgeworCQkgICAgaWYgKGJ1ZltpXSA8ICchJykgeworCQkJYnVmW2ldID0gTlVMOworCQkJYnJl YWs7CisJCSAgICB9CisJCX0KKwkJZGVidWcoRjExMCwic2NhbmZpbGUgUG9zdFNjcmlwdCIsYnVm LDApOworI2VuZGlmIC8qIERFQlVHICovCisJCWJpbmFyeSA9IDE7CisJCWJyZWFrOworI2lmbmRl ZiBOT1BDTFNDQU4KKwkgICAgfSBlbHNlIGlmICghY2tzdHJjbXAoKGNoYXIgKilidWYsIikgSFAt UENMIiw4LDEpKSB7CisJCS8qIEhQIFBDTCBwcmludGVyIGxhbmd1YWdlICovCisjaWZkZWYgREVC VUcKKwkJaW50IGk7CisJCWZvciAoaSA9IDg7IGkgPCBjb3VudDsgaSsrKSB7CisJCSAgICBpZiAo YnVmW2ldIDwgJyEnKSB7CisJCQlidWZbaV0gPSBOVUw7CisJCQlicmVhazsKKwkJICAgIH0KKwkJ fQorCQlkZWJ1ZyhGMTEwLCJzY2FuZmlsZSBQQ0wiLGJ1ZiwwKTsKKyNlbmRpZiAvKiBERUJVRyAq LworCQliaW5hcnkgPSAxOworCQlicmVhazsKKwkgICAgfSAKKyNlbmRpZiAvKiBOT1BDTFNDQU4g Ki8KKyNpZm5kZWYgTk9QSkxTQ0FOCisJICAgICAgZWxzZSBpZiAoYnVmWzBdID09ICdcMDMzJyAm JiAoYnVmWzFdID09ICdFJyB8fCBidWZbMV0gPT0gJyUnKSkgeworCQkvKiBEaXR0byBmb3IgUEpM IEpvYiBwcmludGVyIGhlYWRlciAqLworI2lmZGVmIERFQlVHCisJCWludCBpOworCQlmb3IgKGkg PSAyOyBpIDwgY291bnQ7IGkrKykgeworCQkgICAgaWYgKGJ1ZltpXSA8ICchJykgeworCQkJYnVm W2ldID0gTlVMOworCQkJYnJlYWs7CisJCSAgICB9CisJCX0KKwkJZGVidWcoRjExMCwic2NhbmZp bGUgUEpMIEpvYiBwcmludGVyIGhlYWRlciIsYnVmLDApOworI2VuZGlmIC8qIERFQlVHICovCisJ CWJpbmFyeSA9IDE7CisJCWJyZWFrOworI2VuZGlmIC8qIE5PUEpMU0NBTiAqLworCSAgICB9CisJ fQorCisjaWZkZWYgVU5JQ09ERQorCWlmIChieXRlcyA9PSAwICYmIGNvdW50ID4gMSkgeworCSAg ICBpbnQgaW5jbF9jbnQgPSAwOworCisJICAgIC8qIEZpcnN0IGxvb2sgZm9yIEJPTSAqLworCisJ ICAgIGMwID0gKHVuc2lnbmVkKSgodW5zaWduZWQpYnVmWzBdJjB4RkYpOyAvKiBGaXJzdCBmaWxl IGJ5dGUgKi8KKwkgICAgYzEgPSAodW5zaWduZWQpKCh1bnNpZ25lZClidWZbMV0mMHhGRik7IC8q IFNlY29uZCBieXRlICovCisKKwkgICAgaWYgKGMwID09IDB4RkUgJiYgYzEgPT0gMHhGRikgewkv KiBVQ1MtMiBCRSAqLworCQlyYyA9IEZUX1VDUzI7CisJCXZhbCA9IDA7CisJCWRlYnVnKEYxMTEs InNjYW5maWxlIFVDUzIgQk9NIEJFIixja2l0b2EodmFsKSxyYyk7CisJCWluY2xfY250Kys7CisJ ICAgIH0gZWxzZSBpZiAoYzAgPT0gMHhGRiAmJiBjMSA9PSAweEZFKSB7IC8qIFVDUy0yIExFICov CisJCXJjID0gRlRfVUNTMjsKKwkJdmFsID0gMTsKKwkJZGVidWcoRjExMSwic2NhbmZpbGUgVUNT MiBCT00gTEUiLGNraXRvYSh2YWwpLHJjKTsKKwkJaW5jbF9jbnQrKzsKKwkgICAgfSBlbHNlIGlm IChjb3VudCA+IDIpIGlmIChjMCA9PSAweEVGICYmIGMxID09IDB4QkIgJiYKKwkJICAgICAgICh1 bnNpZ25lZCkoKHVuc2lnbmVkKWJ1ZlsyXSYweEZGKSA9PSAweEJGKSB7CisJCXJjID0gRlRfVVRG ODsKKwkJZGVidWcoRjExMSwic2NhbmZpbGUgVVRGOCBCT00iLGNraXRvYSh2YWwpLHJjKTsKKwkJ aW5jbF9jbnQrKzsKKwkgICAgfQorCSAgICBpZiAoaW5jbF9jbnQpIHsJCS8qIEhhdmUgQk9NICov CisJCWJ5dGVzICs9IGNvdW50OworCQlnb3RvIHhzY2FuZmlsZTsKKwkgICAgfQorCX0KKyNlbmRp ZiAvKiBVTklDT0RFICovCisKKwlieXRlcyArPSBjb3VudDsJCQkvKiBDb3VudCBieXRlcyByZWFk ICovCisJZW9mID0gZmVvZihmcCk7CQkJLyogRmxhZyBmb3IgYXQgRU9GICAqLworCisJZm9yIChp ID0gMDsgaSA8IGNvdW50OyBpKyspIHsJLyogRm9yIGVhY2ggYnl0ZS4uLiAqLworCSAgICBjID0g KHVuc2lnbmVkKWJ1ZltpXTsJLyogRm9yIGVhc2Ugb2YgcmVmZXJlbmNlICovCisJICAgIGlmICgh YykgewkJCS8qIFplcm8gYnl0ZT8gKi8KKyNpZmRlZiBFVkVOTUFYCisJCWlmIChpJjEpCQkvKiBJ biBvZGQgcG9zaXRpb24gKi8KKwkJICBvZGR6ZXJvKys7CisJCWVsc2UKKwkJICBldmVuemVybysr OwkJLyogSW4gZXZlbiBwb3NpdGlvbiAqLworI2VuZGlmIC8qIEVWRU5NQVggKi8KKwkJcnVuemVy bysrOworCSAgICB9IGVsc2UgewkJCS8qIE5vdCBhIHplcm8gYnl0ZSAqLworCQlpZiAocnVuemVy byA+IHJ1bm1heCkKKwkJICBydW5tYXggPSBydW56ZXJvOworCQlpZiAocnVubWF4ID4gMikJCS8q IFRoYXQncyBhbGwgd2UgbmVlZCB0byBiZSBjZXJ0YWluICovCisJCSAgYnJlYWs7CQkvKiBpdCdz IGEgYmluYXJ5IGZpbGUuICovCisJCXJ1bnplcm8gPSAwOworCSAgICB9CisKKyNpZmRlZiBDT01N RU5UCisjaWZkZWYgRVZFTk1BWAorCisvKiBUaGlzIGlzIHRvIGNhdGNoIFVDUy0yIHdpdGggYSBu b24tQVNDSUksIG5vbi1MYXRpbi0xIHJlcGVydG9pcmUgICovCisKKwkgICAgaWYgKGkgPiAxKSB7 CSAgICAgIC8qIExvb2sgZm9yIHJ1bnMgb2YgYWx0ZXJuYXRpbmcgY2hhcnMgKi8KKwkJaWYgKGkm MSkgeworCQkgICAgaWYgKGMgPT0gYnVmW2ktMl0pIHsgLyogSW4gb2RkIHBvc2l0aW9ucyAqLwor CQkJb2RkcnVuKys7CisJCQlvZGRieXRlID0gYzsKKwkJICAgIH0gZWxzZSB7CisJCQlvZGRtYXgg PSBvZGRydW47CisJCQlvZGRtYXhieXRlID0gb2RkYnl0ZTsKKwkJICAgIH0KKwkJfSBlbHNlIHsJ CS8qIGFuZCBldmVuIHBvc2l0aW9ucyAqLworCQkgICAgaWYgKGMgPT0gYnVmW2ktMl0pIHsKKwkJ CWV2ZW5ydW4rKzsKKwkJCWV2ZW5ieXRlID0gYzsKKwkJICAgIH0gZWxzZSB7CisJCQlldmVubWF4 ID0gZXZlbnJ1bjsKKwkJCWV2ZW5tYXhieXRlID0gZXZlbmJ5dGU7CisJCSAgICB9CisJCX0KKwkg ICAgfQorI2VuZGlmIC8qIEVWRU5NQVggKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisKKwkgICAg aWYgKChjICYgMHg4MCkgPT0gMCkgewkvKiBXZSBoYXZlIGEgNy1iaXQgYnl0ZSAqLworI2lmZGVm IFVOSUNPREUKKwkJaWYgKGkgPiAwICYmIGMgPT0gMTApIHsgLyogTGluZWZlZWQgKi8KKwkJICAg IGlmIChidWZbaS0xXSA9PSAwKSBsZm51bCsrOyAvKiBQcmVjZWRlZCBieSBOVUwgKi8KKwkJICAg IGVsc2UgaWYgKGJ1ZltpLTFdID09IDEzKSBjcmxmKys7IC8qIG9yIGJ5IENSLi4uICovCisJCX0K KyNlbmRpZiAvKiBVTklDT0RFICovCisJCWlmIChjIDwgJyAnKSB7CQkvKiBDaGVjayBmb3IgQ08g Y29udHJvbHMgKi8KKwkJICAgIGlmIChjICE9IExGICYmIGMgIT0gQ1IgJiYgYyAhPSBIVCAmJiBj ICE9IEZGKSB7CisJCQljMGNvbnRyb2xzKys7CisJCQlpZiAoYyAhPSBFU0MgJiYgYyAhPSBTTyAm JiBjICE9IFNJKQorCQkJICBjMG5vbmlzbysrOworCQkgICAgfQorCQkgICAgaWYgKChjID09ICdc MDMyJykJLyogQ3RybC1aICovCisjaWZkZWYgQ09NTUVOVAorCQkJJiYgZW9mICYmIChpID49IGNv dW50IC0gMikKKyNlbmRpZiAvKiBDT01NRU5UICovCisJCQkpIHsKKwkJCWMwY29udHJvbHMtLTsK KwkJCWMwbm9uaXNvLS07CisjaWZkZWYgQ0tfQ1RSTFoKKwkJCWlmIChlb2ZtZXRob2QgPT0gWFlF T0ZfWiAmJiB0eHRjeiA9PSAwKSB7CisJCQkgICAgaWYgKGMwY29udHJvbHMgPT0gMCkgLyogQWxs IHRleHQgcHJpb3IgdG8gQ3RybC1aICovCisJCQkgICAgICB0eHRjeiA9IDE7CisJCQl9CisjZW5k aWYgLyogQ0tfQ1RSTFogKi8KKwkJICAgIH0KKwkJfQorI2lmZGVmIFVOSUNPREUKKwkJaWYgKCFu b3R1dGY4ICYmIHV0ZjhzdGF0ZSkgeyAvKiBJbiBVVEYtOCBzZXF1ZW5jZT8gKi8KKwkJICAgIHV0 ZjhzdGF0ZSA9IDA7CisJCSAgICBkZWJ1ZyhGMDAwLCJzY2FuZmlsZSIsIjctYml0IGJ5dGUgaW4g VVRGOCBzZXF1ZW5jZSIsYyk7CisJCSAgICBub3R1dGY4Kys7CQkvKiBUaGVuIGl0J3Mgbm90IFVU Ri04ICovCisJCSAgICBjb250aW51ZTsKKwkJfQorI2VuZGlmIC8qIFVOSUNPREUgKi8KKwkgICAg fSBlbHNlIHsJCQkvKiBXZSBoYXZlIGFuIDgtYml0IGJ5dGUgKi8KKwkJZWlnaHRiaXQrKzsJCS8q IENvdW50IGl0ICovCisJCWlmIChjID49IDB4ODAgJiYgYyA8IDB4QTApIC8qIENoZWNrIGZvciBD MSBjb250cm9scyAqLworCQkgIGMxY29udHJvbHMrKzsKKyNpZmRlZiBVTklDT0RFCisJCWlmICgh bm90dXRmOCkgewkJLyogSWYgaXQgbWlnaHQgc3RpbGwgYmUgVVRGOC4uLiAqLworCQkgICAgc3dp dGNoICh1dGY4c3RhdGUpIHsgLyogRW50ZXIgdGhlIFVURi04IHN0YXRlIG1hY2hpbmUgKi8KKwkJ ICAgICAgY2FzZSAwOgkJIC8qIEZpcnN0IGJ5dGUuLi4gKi8KKwkJCWlmICgoYyAmIDB4RTApID09 IDB4QzApIHsgLyogVGVsbHMgbnVtYmVyIG9mICovCisJCQkgICAgdXRmOHN0YXRlID0gMTsgICAg ICAgIC8qIHN1YnNlcXVlbnQgYnl0ZXMgKi8KKwkJCX0gZWxzZSBpZiAoKGMgJiAweEYwKSA9PSAw eEUwKSB7CisJCQkgICAgdXRmOHN0YXRlID0gMjsKKwkJCX0gZWxzZSBpZiAoKGMgJiAweEY4KSA9 PSAweEYwKSB7CisJCQkgICAgdXRmOHN0YXRlID0gMzsKKwkJCX0gZWxzZSB7CisJCQkgICAgbm90 dXRmOCsrOworCQkJfQorCQkJYnJlYWs7CisJCSAgICAgIGNhc2UgMToJCS8qIFN1YnNlcXVlbnQg Ynl0ZSAqLworCQkgICAgICBjYXNlIDI6CisJCSAgICAgIGNhc2UgMzoKKwkJCWlmICgoYyAmIDB4 QzApICE9IDB4ODApIHsgLyogTXVzdCBzdGFydCB3aXRoIDEwICovCisJCQkgICAgZGVidWcoRjAw MCwic2NhbmZpbGUiLAorCQkJCSAgImJhZCBieXRlIGluIFVURjggc2VxdWVuY2UiLGMpOworCQkJ ICAgIG5vdHV0ZjgrKzsKKwkJCSAgICBicmVhazsKKwkJCX0KKwkJCXV0ZjhzdGF0ZS0tOwkvKiBH b29kLCBvbmUgbGVzcyBpbiB0aGlzIHNlcXVlbmNlICovCisJCQlicmVhazsKKwkJICAgICAgZGVm YXVsdDoJCS8qIFNob3VsZG4ndCBoYXBwZW4gKi8KKwkJCWRlYnVnKEYxMTEsInNjYW5maWxlIiwi YmFkIFVURjggc3RhdGUiLHV0ZjhzdGF0ZSk7CisJCQlub3R1dGY4Kys7CisJCSAgICB9CisJCX0K KyNlbmRpZiAvKiBVTklDT0RFICovCisJICAgIH0KKwl9CisgICAgfQorICAgIGZjbG9zZShmcCk7 CQkJCS8qIENsb3NlIHRoZSBmaWxlICovCisgICAgZGVidWcoRjEwMSwic2NhbmZpbGUgYnl0ZXMi LCIiLGJ5dGVzKTsKKworICAgIGlmIChieXRlcyA9PSAwKQkJCS8qIElmIG5vdGhpbmcgd2FzIHJl YWQgKi8KKyAgICAgIHJldHVybigtMSk7CQkJLyogd2UncmUgZG9uZS4gKi8KKworI2lmZGVmIEVW RU5NQVgKKyAgICAvKiBJbiBjYXNlIHdlIGhhZCBhIHJ1biB0aGF0IG5ldmVyIGJyb2tlLi4uICov CisjaWZkZWYgQ09NTUVOVAorICAgIGlmIChvZGRtYXggPT0gMCkgeworCW9kZG1heCA9IG9kZHJ1 bjsKKwlvZGRtYXhieXRlID0gb2RkYnl0ZTsKKyAgICB9CisgICAgaWYgKGV2ZW5tYXggPT0gMCkg eworCWV2ZW5tYXggPSBldmVucnVuOworCWV2ZW5tYXhieXRlID0gZXZlbmJ5dGU7CisgICAgfQor I2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICBpZiAocnVubWF4ID09IDApIHsKKwlydW5tYXggPSBy dW56ZXJvOworICAgIH0KKyNlbmRpZiAvKiBFVkVOTUFYICovCisKKyNpZmRlZiBVTklDT0RFCisg ICAgaWYgKGJ5dGVzID4gMTAwKQkJCS8qIEJ5dGVzIGlzIG5vdCAwICovCisgICAgICBwY3R6ZXJv ID0gKGV2ZW56ZXJvICsgb2RkemVybykgLyAoYnl0ZXMgLyAxMDApOworICAgIGVsc2UKKyAgICAg IHBjdHplcm8gPSAoKGV2ZW56ZXJvICsgb2RkemVybykgKiAxMDApIC8gYnl0ZXM7CisjZW5kaWYg LyogVU5JQ09ERSAqLworCisjaWZkZWYgREVCVUcKKyAgICBpZiAoZGVibG9nKSB7CQkJLyogSWYg ZGVidWdnaW5nLCBkdW1wIHN0YXRpc3RpY3MgKi8KKwlkZWJ1ZyhGMTAxLCJzY2FuZmlsZSBjMGNv bnRyb2xzICIsIiIsYzBjb250cm9scyk7CisJZGVidWcoRjEwMSwic2NhbmZpbGUgYzBub25pc28g ICAiLCIiLGMwbm9uaXNvKTsKKwlkZWJ1ZyhGMTAxLCJzY2FuZmlsZSBjMWNvbnRyb2xzICIsIiIs YzFjb250cm9scyk7CisJZGVidWcoRjEwMSwic2NhbmZpbGUgZWlnaHRiaXQgICAiLCIiLGVpZ2h0 Yml0KTsKKyNpZmRlZiBVTklDT0RFCisJZGVidWcoRjEwMSwic2NhbmZpbGUgY3JsZiAgICAgICAi LCIiLGNybGYpOworCWRlYnVnKEYxMDEsInNjYW5maWxlIGxmbnVsICAgICAgIiwiIixsZm51bCk7 CisJZGVidWcoRjEwMSwic2NhbmZpbGUgbm90dXRmOCAgICAiLCIiLG5vdHV0ZjgpOworCWRlYnVn KEYxMDEsInNjYW5maWxlIGV2ZW56ZXJvICAgIiwiIixldmVuemVybyk7CisJZGVidWcoRjEwMSwi c2NhbmZpbGUgb2RkemVybyAgICAiLCIiLG9kZHplcm8pOworCWRlYnVnKEYxMDEsInNjYW5maWxl IGV2ZW4vb2RkICAgIiwiIiwoZXZlbnplcm8gLyAob2RkemVybyArIDEpKSk7CisJZGVidWcoRjEw MSwic2NhbmZpbGUgb2RkL2V2ZW4gICAiLCIiLChvZGR6ZXJvIC8gKGV2ZW56ZXJvICsgMSkpKTsK KwlkZWJ1ZyhGMTAxLCJzY2FuZmlsZSBwY3R6ZXJvICAgICIsIiIscGN0emVybyk7CisjZW5kaWYg LyogVU5JQ09ERSAqLworI2lmZGVmIENPTU1FTlQKKyNpZmRlZiBFVkVOTUFYCisJZGVidWcoRjEw MSwic2NhbmZpbGUgb2RkbWF4ICAgICAiLCIiLG9kZG1heCk7CisJZGVidWcoRjEwMSwic2NhbmZp bGUgb2RkbWF4Ynl0ZSAiLCIiLG9kZG1heGJ5dGUpOworCWRlYnVnKEYxMDEsInNjYW5maWxlIGV2 ZW5tYXggICAgIiwiIixldmVubWF4KTsKKwlkZWJ1ZyhGMTAxLCJzY2FuZmlsZSBldmVubWF4Ynl0 ZSIsIiIsZXZlbm1heGJ5dGUpOworI2VuZGlmIC8qIEVWRU5NQVggKi8KKyNlbmRpZiAvKiBDT01N RU5UICovCisJZGVidWcoRjEwMSwic2NhbmZpbGUgcnVubWF4ICAgICAiLCIiLHJ1bm1heCk7Cisg ICAgfQorI2VuZGlmIC8qIERFQlVHICovCisKKyNpZmRlZiBVTklDT0RFCisgICAgeCA9IGVpZ2h0 Yml0ID8gYnl0ZXMgLyAyMCA6IGJ5dGVzIC8gNDsgLyogRm9yIFVDUy0yLi4uICovCisKKyAgICBp ZiAocnVubWF4ID4gMikgewkJCS8qIEZpbGUgaGFzIHJ1biBvZiBtb3JlIHRoYW4gMiBOVUxzICov CisJZGVidWcoRjEwMCwic2NhbmZpbGUgQklOIHJ1bm1heCIsIiIsMCk7CisJcmMgPSBGVF9CSU47 CQkJLyogc28gaXQgY2FuJ3QgYmUgYW55IGtpbmQgb2YgdGV4dC4gKi8KKwlnb3RvIHhzY2FuZmls ZTsKKworICAgIH0gZWxzZSBpZiAocmMgPT0gRlRfVUNTMiB8fCAocmMgPT0gRlRfVVRGOCAmJiBy dW5tYXggPT0gMCkpIHsKKwlnb3RvIHhzY2FuZmlsZTsJCQkvKiBGaWxlIHN0YXJ0cyB3aXRoIGEg Qk9NICovCisKKyAgICB9IGVsc2UgaWYgKGVpZ2h0Yml0ID4gMCAmJiAhbm90dXRmOCkgeyAvKiBG aWxlIGhhcyA4LWJpdCBkYXRhICovCisJaWYgKHJ1bm1heCA+IDApIHsJCSAgIC8qIGFuZCBydW5z IG9mIE5VTHMgKi8KKwkgICAgZGVidWcoRjEwMCwic2NhbmZpbGUgQklOIChublVURjgpIHJ1bm1h eCIsIiIsMCk7CisJICAgIHJjID0gRlRfQklOOwkJICAgLyogVVRGLTggZG9lc24ndCBoYXZlIE5V THMgKi8KKwl9IGVsc2UgewkJCSAgIC8qIE5vIE5VTHMgKi8KKwkgICAgZGVidWcoRjEwMCwic2Nh bmZpbGUgVVRGOCAobm5VVEY4ICsgcnVubWF4ID09IDApIiwiIiwwKTsKKwkgICAgcmMgPSBGVF9V VEY4OwkJICAgLyogYW5kIG5vdCBub3QgVVRGLTgsIHNvIGlzIFVURi04ICovCisJfQorCWdvdG8g eHNjYW5maWxlOworICAgIH0KKy8qCisgIEZvciBVQ1MtMiBkZXRlY3Rpb24sIHNlZSBpZiB0aGUg dGV4dCBjb250YWlucyBsaW5lcyBkZWxpbWl0ZWQgYnkKKyAgQVNDSUkgY29udHJvbHMgYW5kIGNv bnRhaW5pbmcgc3BhY2VzLCBBU0NJSSBkaWdpdHMsIG9yIG90aGVyIEFTQ0lJCisgIGNoYXJhY3Rl cnMsIHRodXMgZm9yY2luZyB0aGUgcHJlc2VuY2Ugb2YgYSBjZXJ0YWluIHBlcmNlbnRhZ2Ugb2Yg emVybyBieXRlcy4KKyAgRm9yIHRoaXMgcHVycG9zZSByZXF1aXJlIDIwJSB6ZXJvIGJ5dGVzLCB3 aXRoIGF0IGxlYXN0IHNpeCB0aW1lcyBhcyBtYW55CisgIGluIGV2ZW4gKG9kZCkgcG9zaXRpb25z IGFzIGluIG9kZCAoZXZlbikgcG9zaXRpb25zLgorKi8KKyAgICBpZiAoKGV2ZW56ZXJvID49IHgg JiYgb2RkemVybyA9PSAwKSB8fAorCSgoKChldmVuemVybyAvIChvZGR6ZXJvICsgMSkpID4gNikg JiYgKHBjdHplcm8gPiAyMCkpICYmCisJKGNybGYgPT0gMCkgJiYKKwkobGZudWwgPiAxKSkKKwkp IHsKKwkgICAgZGVidWcoRjEwMCwic2NhbmZpbGUgVUNTMiBub0JPTSBCRSAoZXZlbi9vZGR6ZXJv KSIsIiIsMCk7CisJcmMgPSBGVF9VQ1MyOworCXZhbCA9IDA7CisgICAgfSBlbHNlIGlmICgoZXZl bnplcm8gPT0gMCAmJiBvZGR6ZXJvID49IHgpIHx8CisJICAgICAgICgoKChvZGR6ZXJvIC8gKGV2 ZW56ZXJvICsgMSkpID4gNikgJiYgKHBjdHplcm8gPiAyMCkpICYmCisJICAgICAgIChjcmxmID09 IDApICYmCisJICAgICAgIChsZm51bCA+IDEpKQorCSAgICAgICApIHsKKwlkZWJ1ZyhGMTAwLCJz Y2FuZmlsZSBVQ1MyIG5vQk9NIExFIChldmVuL29kZHplcm8pIiwiIiwwKTsKKwlyYyA9IEZUX1VD UzI7CisJdmFsID0gMTsKKworI2lmZGVmIENPTU1FTlQKKyNpZmRlZiBFVkVOTUFYCisvKgorICBJ ZiB0aGUgdGVzdHMgYWJvdmUgZmFpbCwgd2Ugc3RpbGwgbWlnaHQgaGF2ZSBVQ1MtMiBpZiB0aGVy ZSBhcmUgc2lnbmlmaWNhbnQKKyAgcnVucyBvZiBpZGVudGljYWwgYnl0ZXMgaW4gYWx0ZXJuYXRp bmcgcG9zaXRpb25zLCBidXQgb25seSBpZiBpdCBhbHNvIGhhcworICB1bnVzdWFsIEMwIGNvbnRy b2xzIChvdGhlcndpc2Ugd2UnZCBwaWNrIHVwIGhleCBmaWxlcyBoZXJlKS4gIE5PVEU6IFdlCisg IGRvbid0IGFjdHVhbGx5IGRvIHRoaXMgLS0gRVZFTk1BWCBpcyBub3QgZGVmaW5lZCAoc2VlIGNv bW1lbnRzIGFib3ZlIGF0CisgIGZpcnN0IG9jY3VycmVuY2Ugb2YgRVZFTk1BWCkuCisqLworICAg IH0gZWxzZSBpZiAoYzBub25pc28gJiYgZXZlbm1heCA+IGJ5dGVzIC8gNCkgeworCWRlYnVnKEYx MDAsInNjYW5maWxlIFVDUzIgQkUgKGV2ZW5tYXgpIiwiIiwwKTsKKwlyYyA9IEZUX1VDUzI7CisJ dmFsID0gMDsKKyAgICB9IGVsc2UgaWYgKGMwbm9uaXNvICYmIG9kZG1heCA+IGJ5dGVzIC8gNCkg eworCWRlYnVnKEYxMDAsInNjYW5maWxlIFVDUzIgTEUgKGV2ZW5tYXgpIiwiIiwwKTsKKwlyYyA9 IEZUX1VDUzI7CisJdmFsID0gMTsKKyNlbmRpZiAvKiBFVkVOTUFYICovCisjZW5kaWYgLyogQ09N TUVOVCAqLworCisgICAgfQorLyoKKyAgSXQgc2VlbXMgdG8gYmUgVUNTLTIgYnV0IGxldCdzIGJl IG1vcmUgY2VydGFpbiBzaW5jZSB0aGVyZSBpcyBubyBCT00uLi4KKyAgSWYgdGhlIG51bWJlciBv ZiA3LSBhbmQgOC1iaXQgY2hhcmFjdGVycyBpcyBhcHByb3hpbWF0ZWx5IGVxdWFsLCBpdCBtaWdo dAorICBiZSBhIGNvbXByZXNzZWQgZmlsZS4gIEluIHRoaXMgY2FzZSB3ZSBkZWNpZGUgYmFzZWQg b24gdGhlIG5hbWUuCisqLworICAgIGlmIChyYyA9PSBGVF9VQ1MyKSB7CisJaWYgKGVpZ2h0Yml0 ID4gMCkgeworCSAgICBpbnQgaiwgazsKKwkgICAgaiA9IChjMWNvbnRyb2xzICogMTAwKSAvIChj MGNvbnRyb2xzICsgMSk7CisJICAgIGRlYnVnKEYxMDEsInNjYW5maWxlIGMxL2MwICAgICAgIiwi IixqKTsKKwkgICAgayA9IChieXRlcyAqIDEwMCkgLyBlaWdodGJpdDsKKwkgICAgZGVidWcoRjEw MSwic2NhbmZpbGUgcGN0IDhiaXQgICAiLCIiLGspOworCSAgICBpZiAoayA+IDQwICYmIGsgPCA2 MCAmJiBqID4gNjApIHsKKwkJaWYgKGNrbWF0Y2goInsqLlosKi5neiwqLnppcCwqLlpJUH0iLG5h bWUsMSwxKSkgeworCQkgICAgZGVidWcoRjExMCwic2NhbmZpbGUgOC1iaXQgQklOIGNvbXByZXNz ZWQiLG5hbWUsMCk7CisJCSAgICByYyA9IEZUX0JJTjsKKwkJICAgIGdvdG8geHNjYW5maWxlOwor CQl9CisJICAgIH0KKwl9CisJLyogU21hbGwgZmlsZSAtIG5vdCBlbm91Z2ggZXZpZGVuY2UgdW5s ZXNzIC4uLiAqLworCisJaWYgKGJ5dGVzIDwgMTAwKSB7CisJICAgIGlmIChvZGR6ZXJvICE9IDAg JiYgZXZlbnplcm8gIT0gMCkgeworCQlkZWJ1ZyhGMTAwLCJzY2FuZmlsZSBzbWFsbCBVQ1MyIGRv dWJ0ZnVsIiwiIiwwKTsKKwkJcmMgPSBGVF9CSU47CisJCWdvdG8geHNjYW5maWxlOworCSAgICB9 IGVsc2UgaWYgKG9kZHplcm8gPT0gMCAmJiBldmVuemVybyA9PSAwKSB7CisJCXJjID0gZWlnaHRi aXQgPyBGVF84QklUIDogRlRfN0JJVDsKKwkgICAgfQorCX0KKwlnb3RvIHhzY2FuZmlsZTsJCQkv KiBTZWVtcyB0byBiZSBVQ1MtMiAqLworICAgIH0KKworLyogSWYgbm9uZSBvZiB0aGUgYWJvdmUs IGl0J3MgcHJvYmFibHkgbm90IFVuaWNvZGUuICAqLworCisgICAgaWYgKCFlaWdodGJpdCkgewkJ CS8qIEl0J3MgNy1iaXQgKi8KKwlpZiAoYzBjb250cm9scykgewkJLyogVGhpcyB3b3VsZCBiZSBz dHJhbmdlICovCisJICAgIGlmICgoYzBub25pc28gPiAwKSAmJiAodHh0Y3ogPT0gMCkpIHsKKwkJ ZGVidWcoRjEwMCwic2NhbmZpbGUgNy1iaXQgQklOIChjMGNvbmlzbykiLCIiLDApOworCQlyYyA9 IEZUX0JJTjsKKwkgICAgfSBlbHNlIHsKKwkJZGVidWcoRjEwMCwic2NhbmZpbGUgNy1iaXQgSVNP MjAyMiBURVhUIChubyBjMG5vbmlzbykiLCIiLDApOworCQlyYyA9IEZUXzdCSVQ7CisJICAgIH0K Kwl9IGVsc2UgewkJCS8qIDctYml0IHRleHQgKi8KKwkgICAgZGVidWcoRjEwMCwic2NhbmZpbGUg Ny1iaXQgVEVYVCAobm8gYzBjb250cm9scykiLCIiLDApOworCSAgICByYyA9IEZUXzdCSVQ7CisJ fQorICAgIH0gZWxzZSBpZiAoIWMwbm9uaXNvIHx8IHR4dGN6KSB7CS8qIDgtYml0IHRleHQgKi8K KwlkZWJ1ZyhGMTAwLCJzY2FuZmlsZSA4LWJpdCBURVhUIChubyBjMG5vbmlzbykiLCIiLDApOwor CXJjID0gRlRfOEJJVDsKKwl2YWwgPSBjMWNvbnRyb2xzID8gMSA6IDA7CisgICAgfSBlbHNlIHsJ CQkJLyogOC1iaXQgYmluYXJ5ICovCisJZGVidWcoRjEwMCwic2NhbmZpbGUgOC1iaXQgQklOIChj MG5vbmlzbykiLCIiLDApOworCXJjID0gRlRfQklOOworICAgIH0KKworI2Vsc2UgIC8qICFVTklD T0RFICovCisKKyAgICBpZiAoYzBub25pc28pIHsKKwlkZWJ1ZyhGMTAwLCJzY2FuZmlsZSA4LWJp dCBCSU4gKGMwbm9uaXNvKSIsIiIsMCk7CisJcmMgPSBGVF9CSU47CisgICAgfSBlbHNlIGlmIChl aWdodGJpdCkgeworCWRlYnVnKEYxMDAsInNjYW5maWxlIDgtYml0IFRFWFQgKG5vIGMwbm9uaXNv KSIsIiIsMCk7CisJcmMgPSBGVF84QklUOworCXZhbCA9IGMxY29udHJvbHMgPyAxIDogMDsKKyAg ICB9IGVsc2UgeworCWRlYnVnKEYxMDAsInNjYW5maWxlIDctYml0IFRFWFQgKG5vIGMwbm9uaXNv KSIsIiIsMCk7CisJcmMgPSBGVF83QklUOworICAgIH0KKworI2VuZGlmIC8qIFVOSUNPREUgKi8K KworICB4c2NhbmZpbGU6CisgICAgaWYgKGZsYWcpICpmbGFnID0gdmFsOworICAgIGRlYnVnKEYx MDEsInNjYW5maWxlIHJlc3VsdCAgICAgIiwiIixyYyk7CisgICAgcmV0dXJuKHJjKTsKK30KKwor LyoKKyAgc2NhbnN0cmluZyAtIGxpa2Ugc2NhbiBmaWxlIGJ1dCBmb3IgYSBzdHJpbmcuCisgIFRo aXMgaXMganVzdCBhIHF1aWNrIGJ1dGNoZXJ5IG9mIHNjYW5maWxlIHdpdGhvdXQgdGhpbmtpbmcg dG9vIG11Y2guCisqLworaW50CitzY2Fuc3RyaW5nKHMpIGNoYXIgKiBzOyB7CisgICAgaW50IHgs IHZhbCA9IC0xLCBjb3VudCA9IDA7CQkvKiBXb3JrZXJzICovCisgICAgaW50IHJjID0gLTE7CQkJ LyogUmV0dXJuIGNvZGUgKi8KKyAgICBpbnQgcHYgPSAtMTsJCQkvKiBQYXR0ZXJuLW1hdGNoIHZh bHVlICovCisgICAgaW50IGJ5dGVzID0gMDsJCQkvKiBUb3RhbCBieXRlIGNvdW50ICovCisjaWZk ZWYgVU5JQ09ERQorICAgIHVuc2lnbmVkIGludCBjMCwgYzE7CQkvKiBGaXJzdCAyIGZpbGUgYnl0 ZXMgKGZvciBCT00pICovCisjZW5kaWYgLyogVU5JQ09ERSAqLworICAgIGV4dGVybiBpbnQgcGlw ZXNlbmQsIGZpbGVwZWVrOworCisgICAgcmVnaXN0ZXIgaW50IGk7CQkJLyogTG9vcCBjb250cm9s ICovCisgICAgaW50IHJlYWRzaXplID0gMDsJCQkvKiBIb3cgbXVjaCB0byByZWFkICovCisgICAg aW50IGVpZ2h0Yml0ID0gMDsJCQkvKiBOdW1iZXIgb2YgYnl0ZXMgd2l0aCA4dGggYml0IG9uICov CisgICAgaW50IGMwY29udHJvbHMgPSAwOwkJCS8qIEMwIG5vbi10ZXh0IGNvbnRyb2wtY2hhciBj b3VudGVyICovCisgICAgaW50IGMwbm9uaXNvID0gMDsJCQkvKiBDMCBub24tSVNPIGNvbnRyb2wt Y2hhciBjb3VudGVyICovCisgICAgaW50IGMxY29udHJvbHMgPSAwOwkJCS8qIEMxIGNvbnRyb2wt Y2hhcmFjdGVyIGNvdW50ZXIgKi8KKyAgICB1bnNpZ25lZCBpbnQgYzsJCQkvKiBDdXJyZW50IGNo YXJhY3RlciAqLworICAgIGludCBydW5tYXggPSAwOwkJCS8qIExvbmdlc3QgcnVuIG9mIDAgYnl0 ZXMgKi8KKyAgICBpbnQgcnVuemVybyA9IDA7CQkJLyogUnVuIG9mIDAgYnl0ZXMgKi8KKyAgICBp bnQgcGN0emVybyA9IDA7CQkJLyogUGVyY2VudGFnZSBvZiAwIGJ5dGVzICovCisgICAgaW50IHR4 dGN6ID0gMDsKKworI2lmZGVmIFVOSUNPREUKKyAgICBpbnQgbm90dXRmOCA9IDA7CQkJLyogTm9u emVybyBpZiBkZWZpbml0ZWx5IG5vdCBVVEYtOCAqLworICAgIGludCB1dGY4c3RhdGUgPSAwOwkJ CS8qIFVURi04IHJlY29nbml6ZXIgc3RhdGUgKi8KKyAgICBpbnQgb2RkemVybyA9IDA7CQkJLyog TnVtYmVyIG9mIDAgYnl0ZXMgaW4gb2RkIHBvc3Rpb25zICovCisgICAgaW50IGV2ZW56ZXJvID0g MDsJCQkvKiBhbmQgaW4gZXZlbiBwb3NpdGlvbnMgKi8KKyAgICBpbnQgbGZudWwgPSAwOwkJCS8q IE51bWJlciBvZiA8TEY+PE5VTD4gc2VxdWVuY2VzICovCisgICAgaW50IGNybGYgPSAwOwkJCS8q IE51bWJlciBvZiA8Q1JMRj4gc2VxdWVuY2VzICovCisjZWxzZQorICAgIGludCBub3R1dGY4ID0g MTsKKyNlbmRpZiAvKiBVTklDT0RFICovCisKKyAgICBjaGFyICogYnVmID0gczsKKyAgICBpZiAo IXMpIHMgPSAiIjsKKyAgICBjb3VudCA9IHN0cmxlbihzKTsKKworI2lmZGVmIFVOSUNPREUKKyAg ICBpZiAoYnl0ZXMgPT0gMCAmJiBjb3VudCA+IDEpIHsKKwlpbnQgaW5jbF9jbnQgPSAwOworCisJ LyogRmlyc3QgbG9vayBmb3IgQk9NICovCisKKwljMCA9ICh1bnNpZ25lZCkoKHVuc2lnbmVkKWJ1 ZlswXSYweEZGKTsgLyogRmlyc3QgZmlsZSBieXRlICovCisJYzEgPSAodW5zaWduZWQpKCh1bnNp Z25lZClidWZbMV0mMHhGRik7IC8qIFNlY29uZCBieXRlICovCisKKwlpZiAoYzAgPT0gMHhGRSAm JiBjMSA9PSAweEZGKSB7CS8qIFVDUy0yIEJFICovCisJICAgIHJjID0gRlRfVUNTMjsKKwkgICAg dmFsID0gMDsKKwkgICAgZGVidWcoRjExMSwic2NhbnN0cmluZyBVQ1MyIEJPTSBCRSIsY2tpdG9h KHZhbCkscmMpOworCSAgICBpbmNsX2NudCsrOworCX0gZWxzZSBpZiAoYzAgPT0gMHhGRiAmJiBj MSA9PSAweEZFKSB7IC8qIFVDUy0yIExFICovCisJICAgIHJjID0gRlRfVUNTMjsKKwkgICAgdmFs ID0gMTsKKwkgICAgZGVidWcoRjExMSwic2NhbnN0cmluZyBVQ1MyIEJPTSBMRSIsY2tpdG9hKHZh bCkscmMpOworCSAgICBpbmNsX2NudCsrOworCX0gZWxzZSBpZiAoY291bnQgPiAyKSBpZiAoYzAg PT0gMHhFRiAmJiBjMSA9PSAweEJCICYmCisJCSAgICh1bnNpZ25lZCkoKHVuc2lnbmVkKWJ1Zlsy XSYweEZGKSA9PSAweEJGKSB7CisJICAgIHJjID0gRlRfVVRGODsKKwkgICAgZGVidWcoRjExMSwi c2NhbnN0cmluZyBVVEY4IEJPTSIsY2tpdG9hKHZhbCkscmMpOworCSAgICBpbmNsX2NudCsrOwor CX0KKwlpZiAoaW5jbF9jbnQpIHsJCS8qIEhhdmUgQk9NICovCisJICAgIGJ5dGVzICs9IGNvdW50 OworCSAgICBnb3RvIHhzY2Fuc3RyaW5nOworCX0KKyAgICB9CisjZW5kaWYgLyogVU5JQ09ERSAq LworCisgICAgYnl0ZXMgKz0gY291bnQ7CQkJLyogQ291bnQgYnl0ZXMgcmVhZCAqLworCisgICAg Zm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsJLyogRm9yIGVhY2ggYnl0ZS4uLiAqLworCWMg PSAodW5zaWduZWQpYnVmW2ldOwkvKiBGb3IgZWFzZSBvZiByZWZlcmVuY2UgKi8KKwlpZiAoIWMp IHsJCQkvKiBaZXJvIGJ5dGU/ICovCisJICAgIGdvdG8geHNjYW5zdHJpbmc7CS8qIE51bGwgdGVy bWluYXRlZCBzdHJpbmcgKi8KKwl9CisJaWYgKChjICYgMHg4MCkgPT0gMCkgewkvKiBXZSBoYXZl IGEgNy1iaXQgYnl0ZSAqLworI2lmZGVmIFVOSUNPREUKKwkgICAgaWYgKGkgPiAwICYmIGMgPT0g MTApIHsgLyogTGluZWZlZWQgKi8KKwkJaWYgKGJ1ZltpLTFdID09IDApIGxmbnVsKys7IC8qIFBy ZWNlZGVkIGJ5IE5VTCAqLworCQllbHNlIGlmIChidWZbaS0xXSA9PSAxMykgY3JsZisrOyAvKiBv ciBieSBDUi4uLiAqLworCSAgICB9CisjZW5kaWYgLyogVU5JQ09ERSAqLworCSAgICBpZiAoYyA8 ICcgJykgewkJLyogQ2hlY2sgZm9yIENPIGNvbnRyb2xzICovCisJCWlmIChjICE9IExGICYmIGMg IT0gQ1IgJiYgYyAhPSBIVCAmJiBjICE9IEZGKSB7CisJCSAgICBjMGNvbnRyb2xzKys7CisJCSAg ICBpZiAoYyAhPSBFU0MgJiYgYyAhPSBTTyAmJiBjICE9IFNJKQorCQkgICAgICBjMG5vbmlzbysr OworCQl9CisJCWlmICgoYyA9PSAnXDAzMicpCS8qIEN0cmwtWiAqLworCQkgICAgKSB7CisJCSAg ICBjMGNvbnRyb2xzLS07CisJCSAgICBjMG5vbmlzby0tOworCQl9CisJICAgIH0KKyNpZmRlZiBV TklDT0RFCisJICAgIGlmICghbm90dXRmOCAmJiB1dGY4c3RhdGUpIHsgLyogSW4gVVRGLTggc2Vx dWVuY2U/ICovCisJCXV0ZjhzdGF0ZSA9IDA7CisJCWRlYnVnKEYwMDAsInNjYW5zdHJpbmciLCI3 LWJpdCBieXRlIGluIFVURjggc2VxdWVuY2UiLGMpOworCQlub3R1dGY4Kys7CQkvKiBUaGVuIGl0 J3Mgbm90IFVURi04ICovCisJCWNvbnRpbnVlOworCSAgICB9CisjZW5kaWYgLyogVU5JQ09ERSAq LworCX0gZWxzZSB7CQkJLyogV2UgaGF2ZSBhbiA4LWJpdCBieXRlICovCisJICAgIGVpZ2h0Yml0 Kys7CQkvKiBDb3VudCBpdCAqLworCSAgICBpZiAoYyA+PSAweDgwICYmIGMgPCAweEEwKSAvKiBD aGVjayBmb3IgQzEgY29udHJvbHMgKi8KKwkgICAgICBjMWNvbnRyb2xzKys7CisjaWZkZWYgVU5J Q09ERQorCSAgICBpZiAoIW5vdHV0ZjgpIHsJCS8qIElmIGl0IG1pZ2h0IHN0aWxsIGJlIFVURjgu Li4gKi8KKwkJc3dpdGNoICh1dGY4c3RhdGUpIHsgLyogRW50ZXIgdGhlIFVURi04IHN0YXRlIG1h Y2hpbmUgKi8KKwkJICBjYXNlIDA6CQkgLyogRmlyc3QgYnl0ZS4uLiAqLworCQkgICAgaWYgKChj ICYgMHhFMCkgPT0gMHhDMCkgeyAvKiBUZWxscyBudW1iZXIgb2YgKi8KKwkJCXV0ZjhzdGF0ZSA9 IDE7ICAgICAgICAvKiBzdWJzZXF1ZW50IGJ5dGVzICovCisJCSAgICB9IGVsc2UgaWYgKChjICYg MHhGMCkgPT0gMHhFMCkgeworCQkJdXRmOHN0YXRlID0gMjsKKwkJICAgIH0gZWxzZSBpZiAoKGMg JiAweEY4KSA9PSAweEYwKSB7CisJCQl1dGY4c3RhdGUgPSAzOworCQkgICAgfSBlbHNlIHsKKwkJ CW5vdHV0ZjgrKzsKKwkJICAgIH0KKwkJICAgIGJyZWFrOworCQkgIGNhc2UgMToJCS8qIFN1YnNl cXVlbnQgYnl0ZSAqLworCQkgIGNhc2UgMjoKKwkJICBjYXNlIDM6CisJCSAgICBpZiAoKGMgJiAw eEMwKSAhPSAweDgwKSB7IC8qIE11c3Qgc3RhcnQgd2l0aCAxMCAqLworCQkJZGVidWcoRjAwMCwi c2NhbnN0cmluZyIsCisJCQkgICAgICAiYmFkIGJ5dGUgaW4gVVRGOCBzZXF1ZW5jZSIsYyk7CisJ CQlub3R1dGY4Kys7CisJCQlicmVhazsKKwkJICAgIH0KKwkJICAgIHV0ZjhzdGF0ZS0tOwkvKiBH b29kLCBvbmUgbGVzcyBpbiB0aGlzIHNlcXVlbmNlICovCisJCSAgICBicmVhazsKKwkJICBkZWZh dWx0OgkJLyogU2hvdWxkbid0IGhhcHBlbiAqLworCQkgICAgZGVidWcoRjExMSwic2NhbnN0cmlu ZyIsImJhZCBVVEY4IHN0YXRlIix1dGY4c3RhdGUpOworCQkgICAgbm90dXRmOCsrOworCQl9CisJ ICAgIH0KKyNlbmRpZiAvKiBVTklDT0RFICovCisJfQorICAgIH0KKyAgICBpZiAoYnl0ZXMgPT0g MCkJCQkvKiBJZiBub3RoaW5nIHdhcyByZWFkICovCisgICAgICByZXR1cm4oLTEpOwkJCS8qIHdl J3JlIGRvbmUuICovCisKKyNpZmRlZiBVTklDT0RFCisgICAgaWYgKGJ5dGVzID4gMTAwKQkJCS8q IEJ5dGVzIGlzIG5vdCAwICovCisgICAgICBwY3R6ZXJvID0gKGV2ZW56ZXJvICsgb2RkemVybykg LyAoYnl0ZXMgLyAxMDApOworICAgIGVsc2UKKyAgICAgIHBjdHplcm8gPSAoKGV2ZW56ZXJvICsg b2RkemVybykgKiAxMDApIC8gYnl0ZXM7CisjZW5kaWYgLyogVU5JQ09ERSAqLworCisjaWZkZWYg VU5JQ09ERQorICAgIHggPSBlaWdodGJpdCA/IGJ5dGVzIC8gMjAgOiBieXRlcyAvIDQ7IC8qIEZv ciBVQ1MtMi4uLiAqLworCisgICAgaWYgKHJ1bm1heCA+IDIpIHsJCQkvKiBGaWxlIGhhcyBydW4g b2YgbW9yZSB0aGFuIDIgTlVMcyAqLworCWRlYnVnKEYxMDAsInNjYW5zdHJpbmcgQklOIHJ1bm1h eCIsIiIsMCk7CisJcmMgPSBGVF9CSU47CQkJLyogc28gaXQgY2FuJ3QgYmUgYW55IGtpbmQgb2Yg dGV4dC4gKi8KKwlnb3RvIHhzY2Fuc3RyaW5nOworCisgICAgfSBlbHNlIGlmIChyYyA9PSBGVF9V Q1MyIHx8IChyYyA9PSBGVF9VVEY4ICYmIHJ1bm1heCA9PSAwKSkgeworCWdvdG8geHNjYW5zdHJp bmc7CQkJLyogRmlsZSBzdGFydHMgd2l0aCBhIEJPTSAqLworCisgICAgfSBlbHNlIGlmIChlaWdo dGJpdCA+IDAgJiYgIW5vdHV0ZjgpIHsgLyogRmlsZSBoYXMgOC1iaXQgZGF0YSAqLworCWlmIChy dW5tYXggPiAwKSB7CQkgICAvKiBhbmQgcnVucyBvZiBOVUxzICovCisJICAgIGRlYnVnKEYxMDAs InNjYW5zdHJpbmcgQklOIChublVURjgpIHJ1bm1heCIsIiIsMCk7CisJICAgIHJjID0gRlRfQklO OwkJICAgLyogVVRGLTggZG9lc24ndCBoYXZlIE5VTHMgKi8KKwl9IGVsc2UgewkJCSAgIC8qIE5v IE5VTHMgKi8KKwkgICAgZGVidWcoRjEwMCwic2NhbnN0cmluZyBVVEY4IChublVURjggKyBydW5t YXggPT0gMCkiLCIiLDApOworCSAgICByYyA9IEZUX1VURjg7CQkgICAvKiBhbmQgbm90IG5vdCBV VEYtOCwgc28gaXMgVVRGLTggKi8KKwl9CisJZ290byB4c2NhbnN0cmluZzsKKyAgICB9CisvKgor ICBJdCBzZWVtcyB0byBiZSBVQ1MtMiBidXQgbGV0J3MgYmUgbW9yZSBjZXJ0YWluIHNpbmNlIHRo ZXJlIGlzIG5vIEJPTS4uLgorICBJZiB0aGUgbnVtYmVyIG9mIDctIGFuZCA4LWJpdCBjaGFyYWN0 ZXJzIGlzIGFwcHJveGltYXRlbHkgZXF1YWwsIGl0IG1pZ2h0CisgIGJlIGEgY29tcHJlc3NlZCBm aWxlLiAgSW4gdGhpcyBjYXNlIHdlIGRlY2lkZSBiYXNlZCBvbiB0aGUgbmFtZS4KKyovCisgICAg aWYgKHJjID09IEZUX1VDUzIpIHsKKwlpZiAoYnl0ZXMgPCAxMDApIHsKKwkgICAgaWYgKG9kZHpl cm8gIT0gMCAmJiBldmVuemVybyAhPSAwKSB7CisJCWRlYnVnKEYxMDAsInNjYW5zdHJpbmcgc21h bGwgVUNTMiBkb3VidGZ1bCIsIiIsMCk7CisJCXJjID0gRlRfQklOOworCQlnb3RvIHhzY2Fuc3Ry aW5nOworCSAgICB9IGVsc2UgaWYgKG9kZHplcm8gPT0gMCAmJiBldmVuemVybyA9PSAwKSB7CisJ CXJjID0gZWlnaHRiaXQgPyBGVF84QklUIDogRlRfN0JJVDsKKwkgICAgfQorCX0KKwlnb3RvIHhz Y2Fuc3RyaW5nOwkJCS8qIFNlZW1zIHRvIGJlIFVDUy0yICovCisgICAgfQorCisvKiBJZiBub25l IG9mIHRoZSBhYm92ZSwgaXQncyBwcm9iYWJseSBub3QgVW5pY29kZS4gICovCisKKyAgICBpZiAo IWVpZ2h0Yml0KSB7CQkJLyogSXQncyA3LWJpdCAqLworCWlmIChjMGNvbnRyb2xzKSB7CQkvKiBU aGlzIHdvdWxkIGJlIHN0cmFuZ2UgKi8KKwkgICAgaWYgKChjMG5vbmlzbyA+IDApICYmICh0eHRj eiA9PSAwKSkgeworCQlkZWJ1ZyhGMTAwLCJzY2Fuc3RyaW5nIDctYml0IEJJTiAoYzBjb25pc28p IiwiIiwwKTsKKwkJcmMgPSBGVF9CSU47CisJICAgIH0gZWxzZSB7CisJCWRlYnVnKEYxMDAsInNj YW5zdHJpbmcgNy1iaXQgSVNPMjAyMiBURVhUIChubyBjMG5vbmlzbykiLCIiLDApOworCQlyYyA9 IEZUXzdCSVQ7CisJICAgIH0KKwl9IGVsc2UgewkJCS8qIDctYml0IHRleHQgKi8KKwkgICAgZGVi dWcoRjEwMCwic2NhbnN0cmluZyA3LWJpdCBURVhUIChubyBjMGNvbnRyb2xzKSIsIiIsMCk7CisJ ICAgIHJjID0gRlRfN0JJVDsKKwl9CisgICAgfSBlbHNlIGlmICghYzBub25pc28gfHwgdHh0Y3op IHsJLyogOC1iaXQgdGV4dCAqLworCWRlYnVnKEYxMDAsInNjYW5zdHJpbmcgOC1iaXQgVEVYVCAo bm8gYzBub25pc28pIiwiIiwwKTsKKwlyYyA9IEZUXzhCSVQ7CisJdmFsID0gYzFjb250cm9scyA/ IDEgOiAwOworICAgIH0gZWxzZSB7CQkJCS8qIDgtYml0IGJpbmFyeSAqLworCWRlYnVnKEYxMDAs InNjYW5zdHJpbmcgOC1iaXQgQklOIChjMG5vbmlzbykiLCIiLDApOworCXJjID0gRlRfQklOOwor ICAgIH0KKworI2Vsc2UgIC8qICFVTklDT0RFICovCisKKyAgICBpZiAoYzBub25pc28pIHsKKwlk ZWJ1ZyhGMTAwLCJzY2Fuc3RyaW5nIDgtYml0IEJJTiAoYzBub25pc28pIiwiIiwwKTsKKwlyYyA9 IEZUX0JJTjsKKyAgICB9IGVsc2UgaWYgKGVpZ2h0Yml0KSB7CisJZGVidWcoRjEwMCwic2NhbnN0 cmluZyA4LWJpdCBURVhUIChubyBjMG5vbmlzbykiLCIiLDApOworCXJjID0gRlRfOEJJVDsKKwl2 YWwgPSBjMWNvbnRyb2xzID8gMSA6IDA7CisgICAgfSBlbHNlIHsKKwlkZWJ1ZyhGMTAwLCJzY2Fu c3RyaW5nIDctYml0IFRFWFQgKG5vIGMwbm9uaXNvKSIsIiIsMCk7CisJcmMgPSBGVF83QklUOwor ICAgIH0KKworI2VuZGlmIC8qIFVOSUNPREUgKi8KKworICB4c2NhbnN0cmluZzoKKyAgICBkZWJ1 ZyhGMTAxLCJzY2Fuc3RyaW5nIHJlc3VsdCAgICAgIiwiIixyYyk7CisgICAgcmV0dXJuKHJjKTsK K30KKworCisKKy8qICBGIEkgTCBFIFMgRSBMIEUgQyBUICAtLSAgU2VsZWN0IHRoaXMgZmlsZSBm b3Igc2VuZGluZyAgKi8KKworaW50CisjaWZkZWYgQ0tfQU5TSUMKK2ZpbGVzZWxlY3QoCisgICAg Y2hhciAqZiwgY2hhciAqc2EsIGNoYXIgKnNiLCBjaGFyICpzbmEsIGNoYXIgKnNuYiwKKyAgICBD S19PRkZfVCBtaW5zaXosIENLX09GRl9UIG1heHNpeiwKKyAgICBpbnQgbmJ1LCBpbnQgbnhsaXN0 LAorICAgIGNoYXIgKiogeGxpc3QKKykKKyNlbHNlCitmaWxlc2VsZWN0KGYsc2Esc2Isc25hLHNu YixtaW5zaXosbWF4c2l6LG5idSxueGxpc3QseGxpc3QpCisgY2hhciAqZiwqc2EsKnNiLCpzbmEs KnNuYjsgQ0tfT0ZGX1QgbWluc2l6LG1heHNpejsKKyBpbnQgbmJ1LG54bGlzdDsgY2hhciAqKiB4 bGlzdDsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogZmlsZXNlbGVjdCAqLyB7CisgICAgY2hh ciAqZmRhdGU7CisgICAgaW50IG47CisgICAgQ0tfT0ZGX1QgejsKKworICAgIGRlYnVnKEYxMTEs ImZpbGVzZWxlY3QgbWluc2l6Iixja2ZzdG9hKG1pbnNpeiksbWluc2l6KTsKKyAgICBkZWJ1ZyhG MTExLCJmaWxlc2VsZWN0IG1heHNpeiIsY2tmc3RvYShtYXhzaXopLG1heHNpeik7CisgICAgZGVi dWcoRjExMSwiZmlsZXNlbGVjdCAoQ0tfT0ZGX1QpLTEiLGNrZnN0b2EoKENLX09GRl9UKS0xKSwo Q0tfT0ZGX1QpLTEpOworCisgICAgaWYgKCFzYSkgc2EgPSAiIjsKKyAgICBpZiAoIXNiKSBzYiA9 ICIiOworICAgIGlmICghc25hKSBzbmEgPSAiIjsKKyAgICBpZiAoIXNuYikgc25iID0gIiI7CisK KyNpZmRlZiBDS1NZTUxJTksKKyNpZm5kZWYgTk9JQ1AKKyNpZm5kZWYgTk9YRkVSCisgICAgaWYg KG5vbGlua3MpIHsKKwlDS19PRkZfVCB6ejsKKwl6eiA9IHpnZXRmcyhmKTsKKwlkZWJ1ZyhGMTEx LCJmaWxlc2VsZWN0IE5PTElOS1MgemdldGZzIixmLHp6KTsKKwlpZiAoenogPCAoQ0tfT0ZGX1Qp MCkKKwkgIHJldHVybigwKTsKKwlkZWJ1ZyhGMTExLCJmaWxlc2VsZWN0IE5PTElOS1Mgemdmc19s aW5rIixmLHpnZnNfbGluayk7CisJaWYgKHpnZnNfbGluaykKKwkgIHJldHVybigwKTsKKyAgICB9 CisjZW5kaWYgLyogTk9YRkVSICovCisjZW5kaWYgLyogTk9JQ1AgKi8KKyNlbmRpZiAvKiBDS1NZ TUxJTksgKi8KKworICAgIGRlYnVnKEYxMTAsImZpbGVzZWxlY3QiLGYsMCk7CisgICAgaWYgKCpz YSB8fCAqc2IgfHwgKnNuYSB8fCAqc25iKSB7CisJZmRhdGUgPSB6ZmNkYXQoZik7CQkvKiBEYXRl L3RpbWUgb2YgdGhpcyBmaWxlICovCisJaWYgKCFmZGF0ZSkgZmRhdGUgPSAiIjsKKwluID0gc3Ry bGVuKGZkYXRlKTsKKwlkZWJ1ZyhGMTExLCJmaWxlc2VsZWN0IGZkYXRlIixmZGF0ZSxuKTsKKwlp ZiAobiAhPSAxNykJCQkvKiBGYWlsZWQgdG8gZ2V0IGl0ICovCisJICByZXR1cm4oMSk7CisJLyog L0FGVEVSOiAqLworCWlmIChzYVswXSAmJiAoc3RyY21wKGZkYXRlLChjaGFyICopc2EpIDw9IDAp KSB7CisJICAgIGRlYnVnKEYxMTAsImZpbGVzZWxlY3Qgc2EiLHNhLDApOworCSAgICAvKiB0bG9n KEYxMTAsIlNraXBwaW5nICh0b28gb2xkKSIsZiwwKTsgKi8KKwkgICAgcmV0dXJuKDApOworCX0K KwkvKiAvQkVGT1JFOiAqLworCWlmIChzYlswXSAmJiAoc3RyY21wKGZkYXRlLChjaGFyICopc2Ip ID49IDApKSB7CisJICAgIGRlYnVnKEYxMTAsImZpbGVzZWxlY3Qgc2IiLHNiLDApOworCSAgICAv KiB0bG9nKEYxMTAsIlNraXBwaW5nICh0b28gbmV3KSIsZiwwKTsgKi8KKwkgICAgcmV0dXJuKDAp OworCX0KKwkvKiAvTk9ULUFGVEVSOiAqLworCWlmIChzbmFbMF0gJiYgKHN0cmNtcChmZGF0ZSwo Y2hhciAqKXNuYSkgPiAwKSkgeworCSAgICBkZWJ1ZyhGMTEwLCJmaWxlc2VsZWN0IHNuYSIsc25h LDApOworCSAgICAvKiB0bG9nKEYxMTAsIlNraXBwaW5nICh0b28gbmV3KSIsZiwwKTsgKi8KKwkg ICAgcmV0dXJuKDApOworCX0KKwkvKiAvTk9ULUJFRk9SRTogKi8KKwlpZiAoc25iWzBdICYmIChz dHJjbXAoZmRhdGUsKGNoYXIgKilzbmIpIDwgMCkpIHsKKwkgICAgZGVidWcoRjExMCwiZmlsZXNl bGVjdCBzbmIiLHNuYiwwKTsKKwkgICAgLyogdGxvZyhGMTEwLCJTa2lwcGluZyAodG9vIG9sZCki LGYsMCk7ICovCisJICAgIHJldHVybigwKTsKKwl9CisgICAgfQorICAgIC8qIFNtYWxsZXIgb3Ig bGFyZ2VyICovCisgICAgaWYgKG1pbnNpeiA+IChDS19PRkZfVCktMSB8fCBtYXhzaXogPiAoQ0tf T0ZGX1QpLTEpIHsKKwl6ID0gemNoa2koZik7CQkJLyogR2V0IHNpemUgKi8KKwlkZWJ1ZyhGMTAx LCJmaWxlc2VsZWN0IGZpbGVzaXplIiwiIix6KTsKKwlpZiAoeiA8IChDS19PRkZfVCkwKQorCSAg cmV0dXJuKDEpOworCWlmICgobWluc2l6ID4gKENLX09GRl9UKS0xKSAmJiAoeiA+PSBtaW5zaXop KSB7CisJICAgIGRlYnVnKEYxMTEsImZpbGVzZWxlY3QgbWluc2l6IHNraXBwaW5nIixmLG1pbnNp eik7CisJICAgIC8qIHRsb2coRjExMSwiU2tpcHBpbmcgKHRvbyBiaWcpIixmLHopOyAqLworCSAg ICByZXR1cm4oMCk7CisJfQorCWlmICgobWF4c2l6ID4gKENLX09GRl9UKS0xKSAmJiAoeiA8PSBt YXhzaXopKSB7CisJICAgIGRlYnVnKEYxMTEsImZpbGVzZWxlY3QgbWF4c2l6IHNraXBwaW5nIixm LG1heHNpeik7CisJICAgIC8qIHRsb2coRjExMCwiU2tpcHBpbmcgKHRvbyBzbWFsbCkiLGYsMCk7 ICovCisJICAgIHJldHVybigwKTsKKwl9CisgICAgfQorICAgIGlmIChuYnUpIHsJCQkJLyogU2tp cHBpbmcgYmFja3VwIGZpbGVzPyAqLworCWlmIChja21hdGNoKAorI2lmZGVmIENLUkVHRVgKKwkJ ICAgICIqLn5bMC05XSp+IgkvKiBOb3QgcGVyZmVjdCBidXQgY2xvc2UgZW5vdWdoLiAqLworI2Vs c2UKKwkJICAgICIqLn4qfiIJCS8qIExlc3MgY2xvc2UuICovCisjZW5kaWYgLyogQ0tSRUdFWCAq LworCQkgICAgLGYsZmlsZWNhc2UsMSkpIHsKKwkgICAgZGVidWcoRjExMCwiZmlsZXNlbGVjdCBz a2lwcGluZyBiYWNrdXAiLGYsMCk7CisJICAgIHJldHVybigwKTsKKwl9CisgICAgfQorICAgIGZv ciAobiA9IDA7IHhsaXN0ICYmIG4gPCBueGxpc3Q7IG4rKykgeworCWlmICgheGxpc3Rbbl0pIHsK KwkgICAgZGVidWcoRjEwMSwiZmlsZXNlbGVjdCB4bGlzdCBlbXB0eSIsMCxuKTsKKwkgICAgYnJl YWs7CisJfQorCWlmIChja21hdGNoKHhsaXN0W25dLGYsZmlsZWNhc2UsMSkpIHsKKwkgICAgZGVi dWcoRjExMSwiZmlsZXNlbGVjdCB4bGlzdCIseGxpc3Rbbl0sbik7CisJICAgIGRlYnVnKEYxMTAs ImZpbGVzZWxlY3Qgc2tpcHBpbmciLGYsMCk7CisJICAgIHJldHVybigwKTsKKwl9CisgICAgfQor ICAgIGlmICh4ZmlsZXR5cGUgPiAtMSkgeworCW4gPSBzY2FuZmlsZShmLE5VTEwsbnNjYW5maWxl KTsKKwlpZiAobiA8IDApIHsKKwkgICAgbiA9IGJpbmFyeSA/IDEgOiAwOworCX0gZWxzZSB7CisJ ICAgIG4gPSAobiA9PSBGVF9CSU4pID8gMSA6IDA7CisJfQorCWlmIChuICE9IHhmaWxldHlwZSkK KwkgIHJldHVybigwKTsKKyAgICB9CisgICAgZGVidWcoRjExMCwiZmlsZXNlbGVjdCBzZWxlY3Rp bmciLGYsMCk7CisgICAgcmV0dXJuKDEpOworfQorCisKKyNpZmRlZiBUQ1BTT0NLRVQKKyNpZmRl ZiBOVAorZXh0ZXJuIGludCBXU0FTYWZlVG9DYW5jZWw7CisjZW5kaWYgLyogTlQgKi8KKyNlbmRp ZiAvKiBUQ1BTT0NLRVQgKi8KKworVk9JRAorc2V0ZmxvdygpIHsKKyAgICBleHRlcm4gaW50IGZs b3csIGF1dG9mbG93LCBtZG10eXAsIGN4dHlwZSwgY3hmbG93W107CisjaWZuZGVmIE5PRElBTAor ICAgIGV4dGVybiBpbnQgZGlhbGNhcGFzLCBkaWFsZmM7CisgICAgZXh0ZXJuIE1ETUlORiAqIG1v ZGVtcFtdOworICAgIE1ETUlORiAqIHAgPSBOVUxMOworICAgIGxvbmcgYml0cyA9IDA7CisjZW5k aWYgLyogTk9ESUFMICovCisKKyAgICBkZWJ1ZyhGMTAxLCJzZXRmbG93IGF1dG9mbG93IiwiIixh dXRvZmxvdyk7CisKKy8qICNpZmRlZiBDT01NRU5UICovCisvKiBXSFkgV0FTIFRISVMgQ09NTUVO VEVEIE9VVD8gKi8KKyAgICBpZiAoIWF1dG9mbG93KSAgICAgICAgICAgICAgICAgICAgICAvKiBP bmx5IGlmIEZMT1cgaXMgQVVUTyAqLworICAgICAgcmV0dXJuOworLyogI2VuZGlmICovIC8qIENP TU1FTlQgKi8KKworICAgIGRlYnVnKEYxMDEsInNldGZsb3cgbG9jYWwiLCIiLGxvY2FsKTsKKyAg ICBkZWJ1ZyhGMTAxLCJzZXRmbG93IG5ldHdvcmsiLCIiLG5ldHdvcmspOworICAgIGRlYnVnKEYx MDEsInNldGZsb3cgY3h0eXBlIiwiIixjeHR5cGUpOworCisjaWZkZWYgVE5fQ09NUE9SVAorICAg IGlmIChuZXR3b3JrICYmIGlzdG5jb21wb3J0KCkpIHsKKwlmbG93ID0gY3hmbG93W0NYVF9NT0RF TV07CisgICAgICAgIGRlYnVnKEYxMDEsInNldGZsb3cgVE5fQ09NUE9SVCBmbG93IiwiIixmbG93 KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZiAvKiBUTl9DT01QT1JUICovCisKKyAg ICBpZiAobmV0d29yayB8fCAhbG9jYWwgfHwgY3h0eXBlID09IENYVF9ESVJFQ1QpIHsKKyAgICAg ICAgZmxvdyA9IGN4Zmxvd1tjeHR5cGVdOyAgICAgICAgICAvKiBTZXQgYXBwcm9wcmlhdGUgZmxv dyBjb250cm9sICovCisgICAgICAgIGRlYnVnKEYxMDEsInNldGZsb3cgZmxvdyIsIiIsZmxvdyk7 CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKGN4dHlwZSAhPSBDWFRfTU9ERU0pICAg ICAgICAgICAgLyogQ29ubmVjdGlvbiB0eXBlIHNob3VsZCBiZSBtb2RlbSAqLworICAgICAgcmV0 dXJuOworCisjaWZuZGVmIE5PRElBTAorICAgIGJpdHMgPSBkaWFsY2FwYXM7ICAgICAgICAgICAg ICAgICAgIC8qIENhcGFiaWxpdHkgYml0cyAqLworICAgIGlmICghYml0cykgeyAgICAgICAgICAg ICAgICAgICAgICAgIC8qIE5vIGJpdHM/ICovCisgICAgICAgIHAgPSBtb2RlbXBbbWRtdHlwXTsg ICAgICAgICAgICAgLyogTG9vayBpbiBtb2RlbSBpbmZvIHN0cnVjdHVyZSAqLworICAgICAgICBp ZiAocCkKKyAgICAgICAgICBiaXRzID0gcC0+Y2FwYXM7CisgICAgfQorICAgIGlmIChkaWFsZmMg PT0gRkxPX0FVVE8pIHsgICAgICAgICAgIC8qIElmIERJQUwgZmxvdyBpcyBBVVRPICovCisjaWZk ZWYgQ0tfUlRTQ1RTICAgICAgICAgICAgICAgICAgICAgICAgLyogSWYgd2UgY2FuIGRvIFJUUy9D VFMgZmxvdyBjb250cm9sICovCisgICAgICAgIGlmIChiaXRzICYgQ0tEX0hXKSAgICAgICAgICAg ICAgLyogYW5kIG1vZGVtIGNhbiBkbyBpdCB0b28gKi8KKyAgICAgICAgICBmbG93ID0gRkxPX1JU U0M7ICAgICAgICAgICAgICAvKiB0aGVuIHN3aXRjaCB0byBSVFMvQ1RTICovCisgICAgICAgIGVs c2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogb3RoZXJ3aXNlICovCisgICAgICAgICAg ZmxvdyA9IEZMT19YT05YOyAgICAgICAgICAgICAgLyogdXNlIFhvbi9Yb2ZmLiAqLworI2Vsc2UK KyNpZm5kZWYgTkVYVAorI2lmbmRlZiBJUklYCisgICAgICAgIGZsb3cgPSBGTE9fWE9OWDsgICAg ICAgICAgICAgICAgLyogVXNlIFhvbi9Yb2ZmLiAqLworI2VuZGlmIC8qIElSSVggKi8KKyNlbmRp ZiAvKiBORVhUICovCisjZW5kaWYgLyogQ0tfUlRTQ1RTICovCisgICAgfQorI2VuZGlmIC8qIE5P RElBTCAqLworICAgIGRlYnVnKEYxMDEsInNldGZsb3cgbW9kZW0gZmxvdyIsIiIsZmxvdyk7Cisg ICAgcmV0dXJuOworfQorCisjaWZuZGVmIE5PTE9DQUwKKyNpZmRlZiBDS19UUklHR0VSCisKKy8q ICBBIFUgVCBPIEUgWCBJIFQgQyBIIEsgIC0tICBDaGVjayBmb3IgQ09OTkVDVC1tb2RlIHRyaWdn ZXIgc3RyaW5nICAqLworLyoKKyAgUmV0dXJucyAtMSBpZiB0cmlnZ2VyIG5vdCBmb3VuZCwgb3Ig ZWxzZSB0aGUgdHJpZ2dlciBpbmRleCwgMCBvciBncmVhdGVyLgorICAoUmVwbGFjZSB3aXRoIGZh bmNpZXIgYW5kIG1vcmUgZWZmaWNpZW50IG1hdGNoZXIgbGF0ZXIuLi4pCisgIE5PVEU6IHRvIHBy ZXZlbnQgdW5uZWNlc3NhcnkgZnVuY3Rpb24gY2FsbCBvdmVyaGVhZCwgY2FsbCB0aGlzIHdheToK KworICAgIHggPSB0dF90cmlnZ2VyWzBdID8gYXV0b2V4aXRjaGsoYykgOiAtMTsKKworKi8KK2lu dAorI2lmZGVmIENLX0FOU0lDCithdXRvZXhpdGNoayhDSEFSIGMpCisjZWxzZQorYXV0b2V4aXRj aGsoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCisvKiBhdXRvZXhpdGNoayAqLyB7 CisgICAgZXh0ZXJuIENIQVIgKiB0dF90cm1hdGNoW107CisgICAgZXh0ZXJuIGNoYXIgKiB0dF90 cmlnZ2VyW107CisgICAgaW50IGk7CisgICAgZm9yIChpID0gMDsgaSA8IFRSSUdHRVJTOyBpKysp IHsKKyAgICAgICAgaWYgKCF0dF90cmlnZ2VyW2ldKSB7ICAgICAgICAgICAvKiBObyBtb3JlIHRy aWdnZXJzIGluIGxpc3QgKi8KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9IGVsc2UgaWYg KCp0dF90cmlnZ2VyW2ldKSB7CisgICAgICAgICAgICBpZiAoIXR0X3RybWF0Y2hbaV0pICAgICAg ICAgLyogSnVzdCBzdGFydGluZz8gKi8KKyAgICAgICAgICAgICAgdHRfdHJtYXRjaFtpXSA9IChD SEFSICopdHRfdHJpZ2dlcltpXTsgLyogU2V0IG1hdGNoIHBvaW50ZXIgKi8KKyAgICAgICAgICAg IGlmIChjID09ICp0dF90cm1hdGNoW2ldKSB7ICAvKiBDb21wYXJlIHRoaXMgY2hhcmFjdGVyICov CisgICAgICAgICAgICAgICAgdHRfdHJtYXRjaFtpXSsrOyAgICAgICAgLyogSXQgbWF0Y2hlcyAq LworICAgICAgICAgICAgICAgIGlmICghKnR0X3RybWF0Y2hbaV0pIHsgIC8qIEVuZCBvZiBtYXRj aCBzdHJpbmc/ICovCisgICAgICAgICAgICAgICAgICAgIHR0X3RybWF0Y2hbaV0gPSAoQ0hBUiAq KSB0dF90cmlnZ2VyW2ldOyAvKiBZZXMsIHJld2luZCwgKi8KKyAgICAgICAgICAgICAgICAgICAg ZGVidWcoRjEwMSwiYXV0b2V4aXRjaGsiLHR0X3RyaWdnZXJbaV0saSk7IC8qIGxvZywgKi8KKyAg ICAgICAgICAgICAgICAgICAgcmV0dXJuKGkpOyAgICAgICAgICAvKiBhbmQgcmV0dXJuIHN1Y2Nl c3MgKi8KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgICAgICAgICAgICAg ICAgICAgICAgLyogTm8gbWF0Y2ggKi8KKyAgICAgICAgICAgICAgdHRfdHJtYXRjaFtpXSA9IChD SEFSICopIHR0X3RyaWdnZXJbaV07IC8qIFJld2luZCBtYXRjaCBzdHJpbmcgKi8KKyAgICAgICAg fSAvKiBhbmQgZ28gb24gdGhlIG5leHQgbWF0Y2ggc3RyaW5nICovCisgICAgfQorICAgIHJldHVy bigtMSk7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vIG1hdGNoIGZvdW5kICovCit9Cisj ZW5kaWYgLyogQ0tfVFJJR0dFUiAqLworCisjaWZuZGVmIE5PU0hPVworLyogIFMgSCBPIE0gRCBN ICAtLSAgU2hvdyBtb2RlbSBzaWduYWxzICAqLworCitWT0lECitzaG9tZG0oKSB7CisvKgorICBO b3RlIHVzZSBvZiAiXHJcbiIgdG8gbWFrZSBzdXJlIHRoaXMgcmVwb3J0IHByaW50cyByaWdodCwg ZXZlbiB3aGVuCisgIGNhbGxlZCBkdXJpbmcgQ09OTkVDVCBtb2RlLgorKi8KKyAgICBpbnQgeTsK KyAgICB5ID0gdHRnbWRtKCk7CisgICAgc3dpdGNoICh5KSB7CisgICAgICBjYXNlIC0zOiBwcmlu dGYoCisgICAgICAgICAgICAgICAgICJNb2RlbSBzaWduYWxzIHVuYXZhaWxhYmxlIGluIHRoaXMg dmVyc2lvbiBvZiBLZXJtaXRcclxuIik7CisgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNh c2UgLTI6IHByaW50ZigiTm8gbW9kZW0gY29udHJvbCBmb3IgdGhpcyBkZXZpY2VcclxuIik7IGJy ZWFrOworICAgICAgY2FzZSAtMTogcHJpbnRmKCJNb2RlbSBzaWduYWxzIHVuYXZhaWxhYmxlXHJc biIpOyBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisjaWZuZGVmIE1BQworICAgICAgICBwcmludGYo CisgICAgICAgICAgIiBDYXJyaWVyIERldGVjdCAgICAgIChDRCk6ICAlc1xyXG4iLCh5ICYgQk1f RENEKSA/ICJPbiI6ICJPZmYiKTsKKyAgICAgICAgcHJpbnRmKAorICAgICAgICAgICIgRGF0YXNl dCBSZWFkeSAgICAgICAoRFNSKTogJXNcclxuIiwoeSAmIEJNX0RTUikgPyAiT24iOiAiT2ZmIik7 CisjZW5kaWYgLyogTUFDICovCisgICAgICAgIHByaW50ZigKKyAgICAgICAgICAiIENsZWFyIFRv IFNlbmQgICAgICAgKENUUyk6ICVzXHJcbiIsKHkgJiBCTV9DVFMpID8gIk9uIjogIk9mZiIpOwor I2lmbmRlZiBTVFJBVFVTCisjaWZuZGVmIE1BQworICAgICAgICBwcmludGYoCisgICAgICAgICAg IiBSaW5nIEluZGljYXRvciAgICAgIChSSSk6ICAlc1xyXG4iLCh5ICYgQk1fUk5HKSA/ICJPbiI6 ICJPZmYiKTsKKyNlbmRpZiAvKiBNQUMgKi8KKyAgICAgICAgcHJpbnRmKAorICAgICAgICAgICIg RGF0YSBUZXJtaW5hbCBSZWFkeSAoRFRSKTogJXNcclxuIiwKKyNpZmRlZiBOVAorICAgICAgICAg ICIodW5rbm93bikiCisjZWxzZSAvKiBOVCAqLworICAgICAgICAgICh5ICYgQk1fRFRSKSA/ICJP biI6ICJPZmYiCisjZW5kaWYgLyogTlQgKi8KKyAgICAgICAgICApOworI2lmbmRlZiBNQUMKKyAg ICAgICAgcHJpbnRmKAorICAgICAgICAgICIgUmVxdWVzdCBUbyBTZW5kICAgICAoUlRTKTogJXNc clxuIiwKKyNpZmRlZiBOVAorICAgICAgICAgICIodW5rbm93bikiCisjZWxzZSAvKiBOVCAqLwor ICAgICAgICAgICh5ICYgQk1fUlRTKSA/ICJPbiI6ICJPZmYiCisjZW5kaWYgLyogTlQgKi8KKyAg ICAgICAgICApOworI2VuZGlmIC8qIE1BQyAqLworI2VuZGlmIC8qIFNUUkFUVVMgKi8KKyAgICB9 CisjaWZkZWYgQkVUQURFQlVHCisjaWZkZWYgQ0tfVEFQSQorICAgIGlmICh0dHRhcGkgJiYgIXRh cGlwYXNzKSB7CisgICAgICAgIExQREVWQ0ZHICAgICAgICBscERldkNmZyA9IE5VTEw7CisgICAg ICAgIExQQ09NTUNPTkZJRyAgICBscENvbW1Db25maWcgPSBOVUxMOworICAgICAgICBMUE1PREVN U0VUVElOR1MgbHBNb2RlbVNldHRpbmdzID0gTlVMTDsKKyAgICAgICAgRENCICogICAgICAgICAg IGxwRENCID0gTlVMTDsKKworICAgICAgICBpZiAoY2t0YXBpR2V0TW9kZW1TZXR0aW5ncygmbHBE ZXZDZmcsJmxwTW9kZW1TZXR0aW5ncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICZscENvbW1Db25maWcsJmxwRENCKSkgeworICAgICAgICAgICAgcHJpbnRmKCJcbiIpOwor ICAgICAgICAgICAgY2t0YXBpRGlzcGxheU1vZGVtU2V0dGluZ3MobHBEZXZDZmcsbHBNb2RlbVNl dHRpbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHBDb21tQ29u ZmlnLGxwRENCKTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBDS19UQVBJICovCisjZW5k aWYgLyogQkVUQURFQlVHICovCit9CisjZW5kaWYgLyogTk9TSE9XICovCisjZW5kaWYgLyogTk9M T0NBTCAqLworCisjaWZuZGVmIE5PWEZFUgorLyogIFMgRCBFIEIgVSAgLS0gUmVjb3JkIHNwYXIg cmVzdWx0cyBpbiBkZWJ1Z2dpbmcgbG9nICAqLworCitWT0lECitzZGVidShsZW4pIGludCBsZW47 IHsKKyAgICBkZWJ1ZyhGMTExLCJzcGFyOiBkYXRhIiwoY2hhciAqKSByZGF0YXAsbGVuKTsKKyAg ICBkZWJ1ZyhGMTAxLCIgc3BzaXogIiwiIiwgc3BzaXopOworICAgIGRlYnVnKEYxMDEsIiB0aW1p bnQiLCIiLHRpbWludCk7CisgICAgZGVidWcoRjEwMSwiIG5wYWQgICIsIiIsICBucGFkKTsKKyAg ICBkZWJ1ZyhGMTAxLCIgcGFkY2ggIiwiIiwgcGFkY2gpOworICAgIGRlYnVnKEYxMDEsIiBzZW9s ICAiLCIiLCAgc2VvbCk7CisgICAgZGVidWcoRjEwMSwiIGN0bHEgICIsIiIsICBjdGxxKTsKKyAg ICBkZWJ1ZyhGMTAxLCIgZWJxICAgIiwiIiwgICBlYnEpOworICAgIGRlYnVnKEYxMDEsIiBlYnFm bGciLCIiLGVicWZsZyk7CisgICAgZGVidWcoRjEwMSwiIGJjdHIgICIsIiIsICBiY3RyKTsKKyAg ICBkZWJ1ZyhGMTAxLCIgcnB0cSAgIiwiIiwgIHJwdHEpOworICAgIGRlYnVnKEYxMDEsIiBycHRm bGciLCIiLHJwdGZsZyk7CisgICAgZGVidWcoRjEwMSwiIGxzY2FwdSIsIiIsbHNjYXB1KTsKKyAg ICBkZWJ1ZyhGMTAxLCIgYXRjYXB1IiwiIixhdGNhcHUpOworICAgIGRlYnVnKEYxMDEsIiBscGNh cHUiLCIiLGxwY2FwdSk7CisgICAgZGVidWcoRjEwMSwiIHN3Y2FwdSIsIiIsc3djYXB1KTsKKyAg ICBkZWJ1ZyhGMTAxLCIgd3Nsb3RuIiwiIiwgd3Nsb3RuKTsKKyAgICBkZWJ1ZyhGMTAxLCIgd2hh dHJ1IiwiIiwgd2hhdHJ1KTsKK30KKy8qICBSIEQgRSBCIFUgLS0gRGVidWdnaW5nIGRpc3BsYXkg b2YgcnBhcigpIHZhbHVlcyAgKi8KKworVk9JRAorcmRlYnUoZCxsZW4pIENIQVIgKmQ7IGludCBs ZW47IHsKKyAgICBkZWJ1ZyhGMTExLCJycGFyOiBkYXRhIixkLGxlbik7CisgICAgZGVidWcoRjEw MSwiIHJwc2l6ICIsIiIsIHh1bmNoYXIoZFswXSkpOworICAgIGRlYnVnKEYxMDEsIiBydGltbyAi LCIiLCBydGltbyk7CisgICAgZGVidWcoRjEwMSwiIG15cGFkbiIsIiIsbXlwYWRuKTsKKyAgICBk ZWJ1ZyhGMTAxLCIgbXlwYWRjIiwiIixteXBhZGMpOworICAgIGRlYnVnKEYxMDEsIiBlb2wgICAi LCIiLCAgIGVvbCk7CisgICAgZGVidWcoRjEwMSwiIGN0bHEgICIsIiIsICBjdGxxKTsKKyAgICBk ZWJ1ZyhGMTAxLCIgc3EgICAgIiwiIiwgICAgc3EpOworICAgIGRlYnVnKEYxMDEsIiBlYnEgICAi LCIiLCAgIGVicSk7CisgICAgZGVidWcoRjEwMSwiIGVicWZsZyIsIiIsZWJxZmxnKTsKKyAgICBk ZWJ1ZyhGMTAxLCIgYmN0ciAgIiwiIiwgIGJjdHIpOworICAgIGRlYnVnKEYxMDEsIiBycHRxICAi LCIiLCAgZFs4XSk7CisgICAgZGVidWcoRjEwMSwiIHJwdGZsZyIsIiIscnB0ZmxnKTsKKyAgICBk ZWJ1ZyhGMTAxLCIgY2FwYXMgIiwiIiwgY2FwYXMpOworICAgIGRlYnVnKEYxMDEsIiBiaXRzICAi LCIiLGRbY2FwYXNdKTsKKyAgICBkZWJ1ZyhGMTAxLCIgbHNjYXB1IiwiIixsc2NhcHUpOworICAg IGRlYnVnKEYxMDEsIiBhdGNhcHUiLCIiLGF0Y2FwdSk7CisgICAgZGVidWcoRjEwMSwiIGxwY2Fw dSIsIiIsbHBjYXB1KTsKKyAgICBkZWJ1ZyhGMTAxLCIgc3djYXB1IiwiIixzd2NhcHUpOworICAg IGRlYnVnKEYxMDEsIiB3c2xvdHIiLCIiLCB3c2xvdHIpOworICAgIGRlYnVnKEYxMDEsIiBycHNp eihleHRlbmRlZCkiLCIiLHJwc2l6KTsKK30KKworI2lmZGVmIENPTU1FTlQKKy8qICBDIEggSyBF IFIgUiAgLS0gIERlY2lkZSB3aGV0aGVyIHRvIGV4aXQgdXBvbiBhIHByb3RvY29sIGVycm9yICAq LworCitWT0lECitjaGtlcnIoKSB7CisgICAgaWYgKGJhY2tncmQgJiYgIXNlcnZlcikgZmF0YWwo IlByb3RvY29sIGVycm9yIik7Cit9CisjZW5kaWYgLyogQ09NTUVOVCAqLworI2VuZGlmIC8qIE5P WEZFUiAqLworCisvKiAgRiBBIFQgQSBMICAtLSAgRmF0YWwgZXJyb3IgbWVzc2FnZSAqLworCitW T0lECitmYXRhbChtc2cpIGNoYXIgKm1zZzsgeworICAgIGV4dGVybiBpbnQgaW5pdGZsZzsKKyAg ICBzdGF0aWMgaW50IGluaXRpbmcgPSAwOworICAgIGlmICghbXNnKSBtc2cgPSAiIjsKKyAgICBk ZWJ1ZyhGMTExLCJmYXRhbCIsbXNnLGluaXRmbGcpOworCisgICAgaWYgKCFpbml0ZmxnKSB7CQkJ LyogSWYgY2FsbGVkIGZyb20gcHJlc2NhbiAqLworCWlmIChpbml0aW5nKQkJCS8qIG9yIGNhbGxl ZCBmcm9tIHN5c2luaXQoKSAqLworICAgICAgICAgIGV4aXQoMjUzKTsKKwlpbml0aW5nID0gMTsK KwlzeXNpbml0KCk7CisgICAgfQorCisgICAgZGVidWcoRjExMSwiZmF0YWwiLG1zZyx4aXRzdGEp OworICAgIHRsb2coRjExMCwiRmF0YWw6Iixtc2csMEwpOworI2lmZGVmIFZNUworICAgIGlmIChz dHJuY21wKG1zZywiJUNLRVJNSVQiLDgpKQorICAgICAgY29ub2woIiVDS0VSTUlULUUtRkFUQUws ICIpOworICAgIGNvbm9sbChtc2cpOworI2Vsc2UgLyogIVZNUyAqLworICAgIGNvbm9sbChtc2cp OworI2VuZGlmIC8qIFZNUyAqLworI2lmZGVmIE9TMgorI2lmbmRlZiBOT1hGRVIKKyAgICBpZiAo eGZyYmVsKSB7CisgICAgICAgIGJsZWVwKEJQX0ZBSUwpOworICAgICAgICBzbGVlcCgxKTsKKyAg ICAgICAgYmxlZXAoQlBfRkFJTCk7CisgICAgfQorI2VuZGlmIC8qIE5PWEZFUiAqLworCisjZW5k aWYgLyogT1MyICovCisgICAgZG9leGl0KEJBRF9FWElULHhpdHN0YSB8IDEpOyAgICAgICAgLyog RXhpdCBpbmRpY2F0aW5nIGZhaWx1cmUgKi8KK30KKworI2lmbmRlZiBOT1hGRVIKKy8qICBCIEwg RCBMIEUgTiAgLS0gIE1ha2UgbGVuZ3RoLWVuY29kZWQgY29weSBvZiBzdHJpbmcgICovCisKK2No YXIgKgorYmxkbGVuKHN0cixkZXN0KSBjaGFyICpzdHIsICpkZXN0OyB7CisgICAgaW50IGxlbjsK KyAgICBsZW4gPSAoaW50KXN0cmxlbihzdHIpOworICAgIGlmIChsZW4gPiA5NCkKKyAgICAgICpk ZXN0ID0gU1A7CisgICAgZWxzZQorICAgICAgKmRlc3QgPSAoY2hhcikgdG9jaGFyKGxlbik7Cisg ICAgc3RyY3B5KGRlc3QrMSxzdHIpOwkJCS8qIENoZWNrZWQgYmVsb3cgaW4gc2V0Z2VuKCkgKi8K KyAgICByZXR1cm4oZGVzdCtsZW4rMSk7Cit9CisKKworLyogIFMgRSBUIEcgRSBOICAtLSAgQ29u c3RydWN0IGEgZ2VuZXJpYyBjb21tYW5kICAqLworLyoKKyAgQ2FsbCB3aXRoIEdlbmVyaWMgY29t bWFuZCBjaGFyYWN0ZXIgZm9sbG93ZWQgYnkgdGhyZWUgc3RyaW5nIGFyZ3VtZW50cy4KKyAgVHJh aWxpbmcgc3RyaW5ncyBhcmUgYWxsb3dlZCB0byBiZSBlbXB0eSAoIiIpLiAgRWFjaCBzdHJpbmcg ZXhjZXB0IHRoZSBsYXN0CisgIG5vbi1lbXB0eSBzdHJpbmcgbXVzdCBiZSBsZXNzIHRoYW4gOTUg Y2hhcmFjdGVycyBsb25nLiAgVGhlIGZpbmFsIG5vbmVtcHR5CisgIHN0cmluZyBpcyBhbGxvd2Vk IHRvIGJlIGxvbmdlci4KKyovCitDSEFSCisjaWZkZWYgQ0tfQU5TSUMKK3NldGdlbihjaGFyIHR5 cGUsIGNoYXIgKiBhcmcxLCBjaGFyICogYXJnMiwgY2hhciAqIGFyZzMpCisjZWxzZQorc2V0Z2Vu KHR5cGUsYXJnMSxhcmcyLGFyZzMpIGNoYXIgdHlwZSwgKmFyZzEsICphcmcyLCAqYXJnMzsKKyNl bmRpZiAvKiBDS19BTlNJQyAqLworLyogc2V0Z2VuICovIHsKKyAgICBjaGFyICp1cHN0ciwgKmNw OworI2lmZGVmIERZTkFNSUMKKyAgICBpZiAoIWNtZHN0cikKKyAgICAgIGlmICghKGNtZHN0ciA9 IG1hbGxvYyhNQVhTUCArIDEpKSkKKyAgICAgICAgZmF0YWwoInNldGdlbjogY2FuJ3QgYWxsb2Nh dGUgbWVtb3J5Iik7CisjZW5kaWYgLyogRFlOQU1JQyAqLworCisgICAgY3AgPSBjbWRzdHI7Cisg ICAgKmNwKysgPSB0eXBlOworICAgICpjcCA9IE5VTDsKKyAgICBpZiAoIWFyZzEpIGFyZzEgPSAi IjsKKyAgICBpZiAoIWFyZzIpIGFyZzIgPSAiIjsKKyAgICBpZiAoIWFyZzMpIGFyZzMgPSAiIjsK KyAgICBpZiAoKChpbnQpc3RybGVuKGFyZzEpKyhpbnQpc3RybGVuKGFyZzIpKyhpbnQpc3RybGVu KGFyZzMpKzQpIDwgTUFYU1ApIHsKKwlpZiAoKmFyZzEgIT0gTlVMKSB7CisJICAgIHVwc3RyID0g YmxkbGVuKGFyZzEsY3ApOworCSAgICBpZiAoKmFyZzIgIT0gTlVMKSB7CisJCXVwc3RyID0gYmxk bGVuKGFyZzIsdXBzdHIpOworCQlpZiAoKmFyZzMgIT0gTlVMKSBibGRsZW4oYXJnMyx1cHN0cik7 CisJICAgIH0KKwl9CisJY21hcmcgPSBjbWRzdHI7CisJZGVidWcoRjExMCwic2V0Z2VuIixjbWFy ZywwKTsKKwlyZXR1cm4oJ2cnKTsKKyAgICB9CisgICAgcmV0dXJuKCdFJyk7Cit9CisjZW5kaWYg LyogTk9YRkVSICovCisKKyNpZm5kZWYgTk9NU0VORAorc3RhdGljIGNoYXIgKm1nYnVmcCA9IE5V TEw7CisKKy8qICBGIE4gUCBBIFIgUyBFICAtLSAgKi8KKworLyoKKyAgQXJndW1lbnQgaXMgYSBj aGFyYWN0ZXIgc3RyaW5nIGNvbnRhaW5pbmcgb25lIG9yIG1vcmUgZmlsZXNwZWNzLgorICBUaGlz IGZ1bmN0aW9uIGJyZWFrcyB0aGUgc3RyaW5nIGFwYXJ0IGludG8gYW4gYXJyYXkgb2YgcG9pbnRl cnMsIG9uZQorICB0byBlYWNoIGZpbGVzcGVjLCBhbmQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGZp bGVzcGVjcy4gIFVzZWQgYnkgc2VydmVyCisgIHdoZW4gaXQgcmVjZWl2ZXMgYSBHRVQgY29tbWFu ZCB0byBhbGxvdyBpdCB0byBwcm9jZXNzIG11bHRpcGxlIGZpbGUKKyAgc3BlY2lmaWNhdGlvbnMg aW4gb25lIHRyYW5zYWN0aW9uLiAgU2V0cyBjbWxpc3QgdG8gcG9pbnQgdG8gYSBsaXN0IG9mCisg IGZpbGUgcG9pbnRlcnMsIGV4YWN0bHkgYXMgaWYgdGhleSB3ZXJlIGNvbW1hbmQgbGluZSBhcmd1 bWVudHMuCisKKyAgVGhpcyB2ZXJzaW9uIG9mIGZucGFyc2UgdHJlYXRzIHNwYWNlcyBhcyBmaWxl bmFtZSBzZXBhcmF0b3JzLiAgSWYgeW91cgorICBvcGVyYXRpbmcgc3lzdGVtIGFsbG93cyBzcGFj ZXMgaW4gZmlsZW5hbWVzLCB5b3UnbGwgbmVlZCBhIGRpZmZlcmVudAorICBzZXBhcmF0b3IuCisK KyAgVGhpcyB2ZXJzaW9uIG9mIGZucGFyc2UgbWFsbG9jcyBhIHN0cmluZyBidWZmZXIgdG8gY29u dGFpbiB0aGUgbmFtZXMuICBJdAorICBjYW5ub3QgYXNzdW1lIHRoYXQgdGhlIHN0cmluZyB0aGF0 IGlzIHBvaW50ZWQgdG8gYnkgdGhlIGFyZ3VtZW50IGlzIHNhZmUuCisqLworaW50CitmbnBhcnNl KHN0cmluZykgY2hhciAqc3RyaW5nOyB7CisgICAgY2hhciAqcCwgKnMsICpxOworICAgIGludCBy ID0gMCwgeDsgICAgICAgICAgICAgICAgICAgICAgIC8qIFJldHVybiBjb2RlICovCisjaWZkZWYg UkVDVVJTSVZFCisgICAgZGVidWcoRjExMSwiZm5wYXJzZSIsc3RyaW5nLHJlY3Vyc2l2ZSk7Cisj ZW5kaWYgLyogUkVDVVJTSVZFICovCisKKyAgICBpZiAobWdidWZwKSBmcmVlKG1nYnVmcCk7ICAg ICAgICAgICAvKiBGcmVlIHRoaXMgZnJvbSBsYXN0IHRpbWUuICovCisgICAgbWdidWZwID0gbWFs bG9jKChpbnQpc3RybGVuKHN0cmluZykrMik7CisgICAgaWYgKCFtZ2J1ZnApIHsKKyAgICAgICAg ZGVidWcoRjEwMCwiZm5wYXJzZSBtYWxsb2MgZXJyb3IiLCIiLDApOworICAgICAgICByZXR1cm4o MCk7CisgICAgfQorI2lmbmRlZiBOT0lDUAorI2lmbmRlZiBOT1NQTAorICAgIGNrc3RybmNweShm c3BlYyxzdHJpbmcsZnNwZWNsZW4pOyAgIC8qIE1ha2UgY29weSBmb3IgXHYoZmlsZXNwZWMpICov CisjZW5kaWYgLyogTk9TUEwgKi8KKyNlbmRpZiAvKiBOT0lDUCAqLworICAgIHMgPSBzdHJpbmc7 ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIElucHV0IHN0cmluZyAqLworICAgIHAgPSBxID0g bWdidWZwOyAgICAgICAgICAgICAgICAgICAgIC8qIFBvaW50IHRvIHRoZSBjb3B5ICovCisgICAg ciA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSBvdXIgcmV0 dXJuIGNvZGUgKi8KKyAgICB3aGlsZSAoKnMgPT0gU1AgfHwgKnMgPT0gSFQpICAgICAgICAvKiBT a2lwIGxlYWRpbmcgc3BhY2VzIGFuZCB0YWJzICovCisgICAgICBzKys7CisgICAgZm9yICh4ID0g c3RybGVuKHMpOyAgICAgICAgICAgICAgICAgLyogU3RyaXAgdHJhaWxpbmcgc3BhY2VzICovCisg ICAgICAgICAoeCA+IDEpICYmIChzW3gtMV0gPT0gU1AgfHwgc1t4LTFdID09IEhUKTsKKyAgICAg ICAgIHgtLSkKKyAgICAgIHNbeC0xXSA9IE5VTDsKKyAgICB3aGlsZSAoMSkgeyAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBMb29wIHRocm91Z2ggcmVzdCBvZiBzdHJpbmcgKi8KKyAgICAgICAg aWYgKCpzID09IENNRFEpIHsgICAgICAgICAgICAgICAvKiBCYWNrc2xhc2ggKHF1b3RlIGNoYXJh Y3Rlcik/ICovCisgICAgICAgICAgICBpZiAoKHggPSB4eGVzYygmcykpID4gLTEpIHsgLyogR28g aW50ZXJwcmV0IGl0LiAqLworICAgICAgICAgICAgICAgICpxKysgPSAoY2hhcikgeDsgICAgICAg IC8qIE51bWVyaWMgYmFja3NsYXNoIGNvZGUsIG9rICovCisgICAgICAgICAgICB9IGVsc2UgeyAg ICAgICAgICAgICAgICAgICAgLyogSnVzdCBsZXQgaXQgcXVvdGUgbmV4dCBjaGFyICovCisgICAg ICAgICAgICAgICAgcysrOyAgICAgICAgICAgICAgICAgICAgLyogZ2V0IHBhc3QgdGhlIGJhY2tz bGFzaCAqLworICAgICAgICAgICAgICAgICpxKysgPSAqcysrOyAgICAgICAgICAgIC8qIGRlcG9z aXQgbmV4dCBjaGFyICovCisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb250aW51ZTsKKyAg ICAgICAgfSBlbHNlIGlmICgqcyA9PSBTUCB8fCAqcyA9PSBOVUwpIHsgLyogVW5xdW90ZWQgc3Bh Y2Ugb3IgTlVMPyAqLworICAgICAgICAgICAgKnErKyA9IE5VTDsgICAgICAgICAgICAgICAgIC8q IEVuZCBvZiBvdXRwdXQgZmlsZW5hbWUuICovCisgICAgICAgICAgICBtc2ZpbGVzW3JdID0gcDsg ICAgICAgICAgICAgLyogQWRkIHRoaXMgZmlsZW5hbWUgdG8gdGhlIGxpc3QgKi8KKyAgICAgICAg ICAgIGRlYnVnKEYxMTEsImZucGFyc2UiLG1zZmlsZXNbcl0scik7CisgICAgICAgICAgICByKys7 ICAgICAgICAgICAgICAgICAgICAgICAgLyogQ291bnQgaXQgKi8KKyAgICAgICAgICAgIGlmICgq cyA9PSBOVUwpIGJyZWFrOyAgICAgICAvKiBFbmQgb2Ygc3RyaW5nPyAqLworICAgICAgICAgICAg d2hpbGUgKCpzID09IFNQKSBzKys7ICAgICAgIC8qIFNraXAgcmVwZWF0ZWQgc3BhY2VzICovCisg ICAgICAgICAgICBwID0gcTsgICAgICAgICAgICAgICAgICAgICAgLyogU3RhcnQgb2YgbmV4dCBu YW1lICovCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfSBlbHNlICpxKysgPSAqczsg ICAgICAgICAgICAgICAvKiBPdGhlcndpc2UgY29weSB0aGUgY2hhcmFjdGVyICovCisgICAgICAg IHMrKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTmV4dCBpbnB1dCBjaGFyYWN0ZXIg Ki8KKyAgICB9CisgICAgZGVidWcoRjEwMSwiZm5wYXJzZSByIiwiIixyKTsKKyAgICBtc2ZpbGVz W3JdID0gIiI7ICAgICAgICAgICAgICAgICAgICAvKiBQdXQgZW1wdHkgc3RyaW5nIGF0IGVuZCBv ZiBsaXN0ICovCisgICAgY21saXN0ID0gbXNmaWxlczsKKyAgICByZXR1cm4ocik7Cit9CisjZW5k aWYgLyogTk9NU0VORCAqLworCitjaGFyICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogZGJjaHIoKSBmb3IgREVCVUcgU0VTU0lPTiAqLworZGJjaHIoYykgaW50IGM7IHsKKyAg ICBzdGF0aWMgY2hhciBzWzhdOworICAgIGNoYXIgKmNwID0gczsKKworICAgIGMgJj0gMHhmZjsK KyAgICBpZiAoYyAmIDB4ODApIHsgICAgICAgICAgICAgICAgICAgICAvKiA4dGggYml0IG9uICov CisgICAgICAgICpjcCsrID0gJ34nOworICAgICAgICBjICY9IDB4N2Y7CisgICAgfQorICAgIGlm IChjIDwgU1ApIHsgICAgICAgICAgICAgICAgICAgICAgIC8qIENvbnRyb2wgY2hhcmFjdGVyICov CisgICAgICAgICpjcCsrID0gJ14nOworICAgICAgICAqY3ArKyA9IChjaGFyKSBjdGwoYyk7Cisg ICAgfSBlbHNlIGlmIChjID09IERFTCkgeworICAgICAgICAqY3ArKyA9ICdeJzsKKyAgICAgICAg KmNwKysgPSAnPyc7CisgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog UHJpbnRpbmcgY2hhcmFjdGVyICovCisgICAgICAgICpjcCsrID0gKGNoYXIpIGM7CisgICAgfQor ICAgICpjcCA9ICdcMCc7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRlcm1pbmF0ZSBzdHJp bmcgKi8KKyAgICBjcCA9IHM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXR1cm4g cG9pbnRlciB0byBpdCAqLworICAgIHJldHVybihjcCk7Cit9CisKKy8qICBDIEsgSCBPIFMgVCAg LS0gIEdldCBuYW1lIG9mIGxvY2FsIGhvc3QgKHdoZXJlIEMtS2VybWl0IGlzIHJ1bm5pbmcpICAq LworCisvKgorICBDYWxsIHdpdGggcG9pbnRlciB0byBidWZmZXIgdG8gcHV0IGhvc3RuYW1lIGlu LCBhbmQgbGVuZ3RoIG9mIGJ1ZmZlci4KKyAgQ29waWVzIGhvc3RuYW1lIGludG8gYnVmZmVyIG9u IHN1Y2Nlc3MsIHB1dHMgbnVsbCBzdHJpbmcgaW4gYnVmZmVyIG9uCisgIGZhaWx1cmUuCisqLwor I2lmZGVmIEJTRDQ0CisjZGVmaW5lIEJTRDQKKyN1bmRlZiBBVFRTVgorI2VuZGlmIC8qIEJTRDQ0 ICovCisKKyNpZmRlZiBTVk9SUE9TSVgKKyNpZm5kZWYgQlNENDQKKyNpZm5kZWYgYXBvbGxvCisj aW5jbHVkZSA8c3lzL3V0c25hbWUuaD4KKyNlbmRpZiAvKiBhcG9sbG8gKi8KKyNlbmRpZiAvKiBC U0Q0NCAqLworI2Vsc2UKKyNpZmRlZiBCRUxMVjEwCisjaW5jbHVkZSA8dXRzbmFtZS5oPgorI2Vu ZGlmIC8qIEJFTExWMTAgKi8KKyNlbmRpZiAvKiBTVk9SUE9TSVgqLworCisjaWZkZWYgQ0tTWVNM T0cKK2V4dGVybiBjaGFyIHVpZGJ1ZltdLCAqIGNsaWVudGhvc3Q7CisjZW5kaWYgLyogQ0tTWVNM T0cgKi8KKworVk9JRAorY2tob3N0KHZ2YnVmLHZ2bGVuKSBjaGFyICogdnZidWY7IGludCB2dmxl bjsgeworCisjaWZuZGVmIE5PUFVTSAorICAgIGV4dGVybiBpbnQgbm9wdXNoOworI2lmbmRlZiBO T1NFUlZFUgorICAgIGV4dGVybiBpbnQgZW5faG9zOworI2VuZGlmIC8qIE5PU0VSVkVSICovCisj ZW5kaWYgLyogTk9QVVNIICovCisKKyNpZmRlZiBwZHAxMQorICAgICp2dmJ1ZiA9IE5VTDsKKyNl bHNlICAvKiBFdmVyeXRoaW5nIGVsc2UgLSByZXN0IG9mIHRoaXMgcm91dGluZSAqLworCisgICAg Y2hhciAqZzsKKyAgICBpbnQgaGF2ZWZ1bGwgPSAwOworI2lmZGVmIFZNUworICAgIGludCB4Owor I2VuZGlmIC8qIFZNUyAqLworCisjaWZkZWYgU1ZPUlBPU0lYCisjaWZuZGVmIEJTRDQ0CisjaWZu ZGVmIF8zODZCU0QKKyNpZm5kZWYgQVBPTExPU1IxMAorICAgIHN0cnVjdCB1dHNuYW1lIGhuYW1l OworI2VuZGlmIC8qIEFQT0xMT1NSMTAgKi8KKyNlbmRpZiAvKiBfMzg2QlNEICovCisjZW5kaWYg LyogQlNENDQgKi8KKyNlbmRpZiAvKiBTVk9SUE9TSVggKi8KKyNpZmRlZiBkYXRhZ2VuZXJhbAor ICAgIGludCBhYzAgPSAoY2hhciAqKSB2dmJ1ZiwgYWMxID0gLTEsIGFjMiA9IDA7CisjZW5kaWYg LyogZGF0YWdlbmVyYWwgKi8KKworI2lmbmRlZiBOT1BVU0gKKyAgICBpZiAoZ2V0ZW52KCJDS19O T1BVU0giKSkgeyAgICAgICAgICAvKiBObyBzaGVsbCBhY2Nlc3MgYWxsb3dlZCAqLworICAgICAg ICBub3B1c2ggPSAxOyAgICAgICAgICAgICAgICAgICAgIC8qIG9uIHRoaXMgaG9zdC4uLiAqLwor I2lmbmRlZiBOT1NFUlZFUgorICAgICAgICBlbl9ob3MgPSAwOworI2VuZGlmIC8qIE5PU0VSVkVS ICovCisgICAgfQorI2VuZGlmIC8qIE5PUFVTSCAqLworCisgICAgKnZ2YnVmID0gTlVMOyAgICAg ICAgICAgICAgICAgICAgICAgLyogSG93IGxldCdzIGdldCBvdXIgaG9zdCBuYW1lIC4uLiAqLwor CisjaWZuZGVmIEJFTExWMTAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRG9lcyBub3QgaGF2 ZSBnZXRob3N0bmFtZSgpICovCisjaWZuZGVmIE9YT1MKKyNpZmRlZiBTVk9SUE9TSVgKKyNpZmRl ZiBBUE9MTE9TUjEwCisgICAgY2tzdHJuY3B5KHZ2YnVmLCJBcG9sbG8iLHZ2bGVuKTsKKyNlbHNl CisjaWZkZWYgQlNENDQKKyAgICBpZiAoZ2V0aG9zdG5hbWUodnZidWYsdnZsZW4pIDwgMCkKKyAg ICAgICp2dmJ1ZiA9IE5VTDsKKyNlbHNlCisjaWZkZWYgXzM4NkJTRAorICAgIGlmIChnZXRob3N0 bmFtZSh2dmJ1Zix2dmxlbikgPCAwKSAqdnZidWYgPSBOVUw7CisjZWxzZQorI2lmZGVmIFFOWAor I2lmZGVmIFRDUFNPQ0tFVAorICAgIGlmIChnZXRob3N0bmFtZSh2dmJ1Zix2dmxlbikgPCAwKSAq dnZidWYgPSBOVUw7CisjZWxzZQorICAgIGlmICh1bmFtZSgmaG5hbWUpID4gLTEpIGNrc3RybmNw eSh2dmJ1ZixobmFtZS5ub2RlbmFtZSx2dmxlbik7CisjZW5kaWYgLyogVENQU09DS0VUICovCisj ZWxzZSAvKiBTVk9SUE9TSVggYnV0IG5vdCBfMzg2QlNEIG9yIEJTRDQ0ICovCisjaWZkZWYgX19p YTY0X18KKyAgICBpZiAodW5hbWUoJmhuYW1lKSA+IC0xKSBja3N0cm5jcHkodnZidWYsaG5hbWUu bm9kZW5hbWUsdnZsZW4pOworI2Vsc2UKKyAgICBpZiAodW5hbWUoJmhuYW1lKSA+IC0xKSB7CisJ Y2hhciAqIHA7CisJcCA9IGhuYW1lLm5vZGVuYW1lOworI2lmZGVmIFRDUFNPQ0tFVAorI2lmbmRl ZiBOT0NLR0VURlFIT1NUCisJaWYgKCFja3N0cmNocihwLCcuJykpCisJICBwID0gKGNoYXIgKilj a2dldGZxaG9zdG5hbWUocCk7CisjZW5kaWYgLyogTk9DS0dFVEZRSE9TVCAqLworI2VuZGlmIC8q IFRDUFNPQ0tFVCAqLworCWlmICghcCkgcCA9ICIiOworCWlmICghKnApIHAgPSAiKHVua25vd24p IjsKKwlja3N0cm5jcHkodnZidWYscCx2dmxlbik7CisgICAgfQorI2VuZGlmIC8qIF9faWE2NF9f ICovCisjZW5kaWYgLyogUU5YICovCisjZW5kaWYgLyogXzM4NkJTRCAqLworI2VuZGlmIC8qIEJT RDQ0ICovCisjZW5kaWYgLyogQVBPTExPU1IxMCAqLworI2Vsc2UgLyogIVNWT1JQT1NJWCAqLwor I2lmZGVmIEJTRDQKKyAgICBpZiAoZ2V0aG9zdG5hbWUodnZidWYsdnZsZW4pIDwgMCkgKnZ2YnVm ID0gTlVMOworI2Vsc2UgLyogIUJTRDQgKi8KKyNpZmRlZiBWTVMKKyAgICBnID0gZ2V0ZW52KCJT WVMkTk9ERSIpOworICAgIGlmIChnKSBja3N0cm5jcHkodnZidWYsZyx2dmxlbik7CisgICAgeCA9 IChpbnQpc3RybGVuKHZ2YnVmKTsKKyAgICBpZiAoeCA+IDEgJiYgdnZidWZbeC0xXSA9PSAnOicg JiYgdnZidWZbeC0yXSA9PSAnOicpIHZ2YnVmW3gtMl0gPSBOVUw7CisjZWxzZQorI2lmZGVmIGRh dGFnZW5lcmFsCisgICAgaWYgKHN5cygkSE5BTUUsJmFjMCwmYWMxLCZhYzIpID09IDApIC8qIHN1 Y2Nlc3NmdWwgKi8KKyAgICAgICAgdnZsZW4gPSBhYzIgKyAxOyAgICAgICAgICAgICAgICAvKiBl bmggLSBoYXZlIHRvIGFkZCBvbmUgKi8KKyNlbHNlCisjaWZkZWYgT1MyICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogT1MvMiAqLworICAgIGcgPSBvczJfZ2V0aG9zdG5hbWUoKTsKKyAg ICBpZiAoZykgY2tzdHJuY3B5KHZ2YnVmLGcsdnZsZW4pOworI2Vsc2UgLyogT1MyICovCisjaWZk ZWYgT1NLCisjaWZkZWYgVENQU09DS0VUCisgICAgICAgIGlmIChnZXRob3N0bmFtZSh2dmJ1Ziwg dnZsZW4pIDwgMCkgKnZ2YnVmID0gTlVMOworI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLworI2VuZGlm IC8qIE9TSyAqLworI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCisj ZW5kaWYgLyogVk1TICovCisjZW5kaWYgLyogQlNENCAqLworI2VuZGlmIC8qIFNWT1JQT1NJWCAq LworI2Vsc2UgLyogT1hPUyAqLworICAgIC8qIElmIFRDUC9JUCBpcyBub3QgaW5zdGFsbGVkLCBn ZXRob3N0bmFtZSgpIGZhaWxzLCB1c2UgdW5hbWUoKSAqLworICAgIGlmIChnZXRob3N0bmFtZSh2 dmJ1Zix2dmxlbikgPCAwKSB7CisgICAgICAgIGlmICh1bmFtZSgmaG5hbWUpID4gLTEpCisgICAg ICAgICAgICBja3N0cm5jcHkodnZidWYsaG5hbWUubm9kZW5hbWUsdnZsZW4pOworICAgICAgICBl bHNlCisgICAgICAgICAgICAqdnZidWYgPSBOVUw7CisgICAgfQorI2VuZGlmIC8qIE9YT1MgKi8K KyNlbmRpZiAvKiBCRUxMVjEwICovCisgICAgaWYgKCp2dmJ1ZiA9PSBOVUwpIHsgICAgICAgICAg ICAgICAgLyogSWYgaXQncyBzdGlsbCBlbXB0eSAqLworICAgICAgICBnID0gZ2V0ZW52KCJIT1NU Iik7ICAgICAgICAgICAgIC8qIHRyeSB0aGlzICovCisgICAgICAgIGlmIChnKSBja3N0cm5jcHko dnZidWYsZyx2dmxlbik7CisgICAgfQorICAgIHZ2YnVmW3Z2bGVuLTFdID0gTlVMOyAgICAgICAg ICAgICAgIC8qIE1ha2Ugc3VyZSByZXN1bHQgaXMgdGVybWluYXRlZC4gKi8KKyNlbmRpZiAvKiBw ZHAxMSAqLworfQorI2lmZGVmIEJTRDQ0CisjdW5kZWYgQlNENAorI2RlZmluZSBBVFRTVgorI2Vu ZGlmIC8qIEJTRDQ0ICovCisKKy8qCisgIEEgUyBLIE0gTyBSIEUgIC0tICBQb29yIHBlcnNvbidz ICJtb3JlIi4KKyAgUmV0dXJucyAwIGlmIG5vIG1vcmUsIDEgaWYgbW9yZSB3YW50ZWQuCisqLwor aW50Cithc2ttb3JlKCkgeworICAgIGNoYXIgYzsKKyAgICBpbnQgcnYsIGN4OworI2lmZGVmIElL U0QKKyAgICBleHRlcm4gaW50IHRpbWVsaW1pdDsKKyNlbmRpZiAvKiBJS1NEICovCisjaWZkZWYg SUtTRENPTkYKKyAgICBleHRlcm4gaW50IGlrc2RjZjsKKyNlbmRpZiAvKiBJS1NEQ09ORiAqLwor I2lmZGVmIENLX0FQQworICAgIGV4dGVybiBpbnQgYXBjc3RhdHVzLCBhcGNhY3RpdmU7CisjZW5k aWYgLyogQ0tfQVBDICovCisKKyNpZmRlZiBOT0lDUAorICAgIHJldHVybigxKTsKKyNlbHNlCisg ICAgaWYgKCF4YXNrbW9yZSkKKyAgICAgIHJldHVybigxKTsKKyNpZmRlZiBJS1NEQ09ORgorICAg IGlmIChpbnNlcnZlciAmJiAhaWtzZGNmKQorICAgICAgcmV0dXJuKDEpOworI2VuZGlmIC8qIElL U0RDT05GICovCisjaWZkZWYgQ0tfQVBDCisgICAgaWYgKGFwY2FjdGl2ZSA9PSBBUENfTE9DQUwg fHwKKyAgICAgICAgKGFwY2FjdGl2ZSA9PSBBUENfUkVNT1RFICYmIChhcGNzdGF0dXMgJiBBUENf Tk9JTlApKSkKKyAgICAgICAgcmV0dXJuKDEpOworI2VuZGlmIC8qIENLX0FQQyAqLworI2lmZGVm IFZNUworICAgIGlmIChiYXRjaCkKKyAgICAgIHJldHVybigxKTsKKyNlbHNlCisjaWZkZWYgVU5J WAorICAgIGlmIChiYWNrZ3JkKQorICAgICAgcmV0dXJuKDEpOworI2VuZGlmIC8qIFVOSVggKi8K KyNlbmRpZiAvKiBWTVMgKi8KKworI2lmbmRlZiBWTVMKKyAgICBjb25jYigoY2hhcillc2NhcGUp OyAgICAgICAgICAgICAgICAvKiBGb3JjZSBDQlJFQUsgbW9kZS4gKi8KKyNlbmRpZiAvKiBWTVMg Ki8KKworICAgIHJ2ID0gLTE7CisgICAgd2hpbGUgKHJ2IDwgMCkgeworI2lmbmRlZiBPUzIKKyAg ICAgICAgcHJpbnRmKCJtb3JlPyAiKTsKKyNpZmRlZiBVTklYCisjaWZkZWYgTk9TRVRCVUYKKyAg ICAgICAgZmZsdXNoKHN0ZG91dCk7CisjZW5kaWYgLyogTk9TRVRCVUYgKi8KKyNlbmRpZiAvKiBV TklYICovCisjZWxzZQorICAgICAgICBwcmludGYoIm1vcmU/ICIpOworICAgICAgICBmZmx1c2go c3Rkb3V0KTsKKyNlbmRpZiAvKiBPUzIgKi8KKworI2lmZGVmIElLU0QKKyAgICAgICAgaWYgKGlu c2VydmVyKSB7CisgICAgICAgICAgICBjeCA9IGNtZGdldGModGltZWxpbWl0KTsKKyAgICAgICAg ICAgIGlmIChjeCA8IC0xICYmIHRpbWVsaW1pdCkgeworICAgICAgICAgICAgICAgIHByaW50Zigi XG4/SUtTIGlkbGUgdGltZW91dCAtIEdvb2RieWUuXG4iKTsKKyAgICAgICAgICAgICAgICBkb2V4 aXQoR09PRF9FWElULDApOworICAgICAgICAgICAgfSBlbHNlIGlmIChjeCA9PSAtMSkgewkvKiBD b25uZWN0aW9uIGxvc3QgKi8KKyAgICAgICAgICAgICAgICBkb2V4aXQoQkFEX0VYSVQsMCk7Cisg ICAgICAgICAgICB9CisgICAgICAgICAgICBjID0gKGNoYXIpIGN4OworICAgICAgICB9IGVsc2Ug eworI2VuZGlmIC8qIElLU0QgKi8KKyNpZmRlZiBWTVMKKwkgICAgY29uYmluKChjaGFyKWVzY2Fw ZSk7CS8qIFByb3RlY3QgYWdhaW5zdCBDdHJsLVogKi8KKwkgICAgY3ggPSBjb25pbmMoMCk7CisJ ICAgIGNvbmNiKChjaGFyKWVzY2FwZSk7CisjZWxzZQorCSAgICBjeCA9IGNtZGdldGMoMCk7Cisj ZW5kaWYgLyogVk1TICovCisJICAgIGRlYnVnKEYxMDEsImFza21vcmUgY21kZ2V0YyIsIiIsY3gp OworCSAgICBpZiAoY3ggPT0gRU9GKSB7CisJCWRlYnVnKEYxMDAsImFza21vcmUgRU9GIiwiIiww KTsKKyNpZmRlZiBWTVMKKwkJYyA9ICdcMDMyJzsKKyNlbHNlCisJCWMgPSAnbic7CisjZW5kaWYg LyogVk1TICovCisJICAgIH0gZWxzZSB7CisJCWMgPSAoY2hhciljeDsKKwkgICAgfQorCSAgICBk ZWJ1ZyhGMTAxLCJhc2ttb3JlIGMiLCIiLGMpOworCisjaWZkZWYgSUtTRAorCX0KKyNlbmRpZiAv KiBJS1NEICovCisgICAgICAgIHN3aXRjaCAoYykgeworICAgICAgICAgIC8qIFllcyAqLworCSAg Y2FzZSAncCc6IGNhc2UgJ1AnOiBjYXNlICdnJzogY2FzZSAnRyc6IC8qIFByb2NlZWQgb3IgR28g Ki8KKwkgICAgeGFza21vcmUgPSAwOworCSAgICAvKiBmYWxsIHRocnUgb24gcHVycG9zZSAqLwor CisgICAgICAgICAgY2FzZSBTUDogY2FzZSAneSc6IGNhc2UgJ1knOiBjYXNlIDAxMjogIGNhc2Ug MDE1OgorI2lmZGVmIE9TSworICAgICAgICAgICAgd3JpdGUoMSwgIlwwMTUgICAgICBcMDE1Iiwg c2l6ZW9mICJcMDE1ICAgICAgXDAxNSIgLSAxKTsKKyNlbHNlCisgICAgICAgICAgICBwcmludGYo IlwwMTUgICAgICBcMDE1Iik7CisjZW5kaWYgLyogT1NLICovCisgICAgICAgICAgICBydiA9IDE7 CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAvKiBObyAqLworICAgICAgICAgIGNhc2Ug J24nOiBjYXNlICdOJzogY2FzZSAncSc6IGNhc2UgJ1EnOgorI2lmZGVmIE9TSworICAgICAgICAg ICAgcHJpbnRmKCJcbiIpOworI2Vsc2UKKyAgICAgICAgICAgIHByaW50ZigiXDAxNVwwMTIiKTsK KyNlbmRpZiAvKiBPU0sgKi8KKyAgICAgICAgICAgIHJ2ID0gMDsKKyAgICAgICAgICAgIGJyZWFr OworCSAgY2FzZSAnXDAwMyc6CisJICBjYXNlICdcMDA0JzoKKwkgIGNhc2UgJ1wwMzInOgorI2lm ZGVmIE9TSworCSAgICBwcmludGYoIl4lYy4uLlxuIiwgKGMgKyAwMTAwKSk7CisjZWxzZQorCSAg ICBwcmludGYoIl4lYy4uLlwwMTVcMDEyIiwgKGMgKyAwMTAwKSk7CisjZW5kaWYgLyogT1NLICov CisJICAgIHJ2ID0gMDsKKwkgICAgYnJlYWs7CisgICAgICAgICAgLyogSW52YWxpZCBhbnN3ZXIg Ki8KKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgZGVidWcoRjExMSwiYXNrbW9yZSIs ImludmFsaWQgYW5zd2VyIixjKTsKKyAgICAgICAgICAgIHByaW50ZigiWSBvciBzcGFjZS1iYXIg Zm9yIHllcywgTiBmb3Igbm8sIEcgdG8gc2hvdyB0aGUgcmVzdFxuIik7CisgICAgICAgICAgICBj b250aW51ZTsKKyAgICAgICAgfQorI2lmZGVmIE9TMgorICAgICAgICBwcmludGYoIlxyICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHIiKTsKKyAgICAg ICAgZmZsdXNoKHN0ZG91dCk7CisjZW5kaWYgLyogT1MyICovCisgICAgfQorICAgIHJldHVybihy dik7CisjZW5kaWYgLyogTk9JQ1AgKi8KK30KKworLyogIFQgUiBBIFAgIC0tICBUZXJtaW5hbCBp bnRlcnJ1cHQgaGFuZGxlciAqLworCitTSUdUWVAKKyNpZmRlZiBDS19BTlNJQwordHJhcChpbnQg c2lnKQorI2Vsc2UKK3RyYXAoc2lnKSBpbnQgc2lnOworI2VuZGlmIC8qIENLX0FOU0lDICovCisv KiB0cmFwICovIHsKKyAgICBleHRlcm4gaW50IGJfc2F2ZSwgZl9zYXZlOworI2lmbmRlZiBOT0lD UAorICAgIGV4dGVybiBpbnQgdGltZWxpbWl0OworI2VuZGlmIC8qIE5PSUNQICovCisjaWZkZWYg T1MyCisgICAgZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3RhcnRmbGFnczsKKyNpZm5kZWYgTk9TRVRL RVkKKyAgICBleHRlcm4gaW50IG9zMmdrczsKKyNlbmRpZiAvKiBOT1NFVEtFWSAqLworICAgIGlu dCBpOworI2VuZGlmIC8qIE9TMiAqLworI2lmbmRlZiBOT1NQTAorICAgIGV4dGVybiBpbnQgaV9h Y3RpdmUsIGluc3RhdHVzOworI2VuZGlmIC8qIE5PU1BMICovCisjaWZkZWYgVk1TCisgICAgaW50 IGk7IEZJTEUgKmY7CisjZW5kaWYgLyogVk1TICovCisgICAgZXh0ZXJuIGludCB6Y2hrb2QsIHpj aGtpZDsKKyNpZm5kZWYgTk9TUEwKKyAgICBleHRlcm4gaW50IHVua21hY3JvOworI2VuZGlmIC8q IE5PU1BMICovCisKKyAgICBkZWJvayA9IDE7CisjaWZkZWYgTlRTSUcKKyAgICBjb25ub2koKTsK KyNlbmRpZiAvKiBOVFNJRyAqLworI2lmZGVmIF9fRU1YX18KKyAgICBzaWduYWwoU0lHSU5ULCBT SUdfQUNLKTsKKyNlbmRpZgorI2lmZGVmIEdFTURPUworLyogR0VNIGlzIG5vdCByZWVudHJhbnQs IG5vIGkvbyBmcm9tIGludGVycnVwdCBsZXZlbCAqLworICAgIGNrbG9uZ2ptcChjbWpidWYsMSk7 ICAgICAgICAgICAgICAgIC8qIEp1bXAgYmFjayB0byBwYXJzZXIgbm93ISAqLworI2VuZGlmIC8q IEdFTURPUyAqLworCisjaWZkZWYgREVCVUcKKyAgICBpZiAoZGVibG9nKSB7CisJZGVidWcoRjEw MCwiKioqKioqKioqKioqKioqKioqKioqIiwiIiwwKTsKKwlpZiAoc2lnID09IFNJR0lOVCkKKwkg IGRlYnVnKEYxMDEsInRyYXAgY2F1Z2h0IFNJR0lOVCIsIiIsc2lnKTsKKwllbHNlIAorCSAgZGVi dWcoRjEwMSwidHJhcCBjYXVnaHQgc2lnbmFsIiwiIixzaWcpOworCWRlYnVnKEYxMDAsIioqKioq KioqKioqKioqKioqKioqKiIsIiIsMCk7CisgICAgfQorI2VuZGlmIC8qIERFQlVHICovCisKKyNp ZmRlZiBPUzIKKyAgICBpZiAoIHNpZyA9PSBTSUdCUkVBSyAmJiAoc3RhcnRmbGFncyAmIDEyOCkg KSB7CisgICAgICAgIGRlYnVnKEYxMDEsInRyYXAgaWdub3JpbmcgU0lHQlJFQUsiLCIiLHNpZyk7 CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYgLyogT1MyICovCisKKyNpZm5kZWYgTk9J Q1AKKyAgICB0aW1lbGltaXQgPSAwOyAgICAgICAgICAgICAgICAgICAgICAvKiBJbiBjYXNlIHRp bWVkIEFTSyBpbnRlcnJ1cHRlZCAqLworI2lmbmRlZiBOT1NQTAorICAgIHVua21hY3JvID0gMDsJ CQkvKiBPciBPTl9VTktOT1dOX01BQ1JPIGludGVycnVwdGVkLi4gKi8KKyNlbmRpZiAvKiBOT1NQ TCAqLworI2VuZGlmIC8qIE5PSUNQICovCisgICAgemNoa29kID0gMDsgICAgICAgICAgICAgICAg ICAgICAgICAgLyogT3IgZmlsZSBleHBhbnNpb24gaW50ZXJydXB0ZWQuLi4gKi8KKyAgICB6Y2hr aWQgPSAwOworICAgIGludGVycnVwdGVkID0gMTsKKworICAgIGlmICh3aGF0ICYgV19DT05ORUNU KSB7CQkvKiBBcmUgd2UgaW4gQ09OTkVDVCBtb2RlPyAqLworLyoKKyAgVGhlIEhQIHdvcmtzdGF0 aW9uIFJlc2V0IGtleSBzZW5kcyBzb21lIGtpbmQgb2YgdWViZXItU0lHSU5UIHRoYXQgY2FuIG5v dAorICBiZSBTSUdfSUdOb3JlZCwgc28gd2Ugd2luZCB1cCBoZXJlIHNvbWVob3cgKGV2ZW4gdGhv dWdoIHRoaXMgaXMgKm5vdCogdGhlCisgIGN1cnJlbnQgU0lHSU5UIGhhbmRsZXIpLiAgSnVzdCBy ZXR1cm4uCisqLworICAgICAgICBkZWJ1ZyhGMTAxLCJ0cmFwOiBTSUdJTlQgY2F1Z2h0IGR1cmlu ZyBDT05ORUNUIiwiIixzaWcpOworICAgICAgICBTSUdSRVRVUk47CisgICAgfQorI2lmbmRlZiBO T1NQTAorICAgIGlmIChpX2FjdGl2ZSkgeyAgICAgICAgICAgICAgICAgICAgIC8qIElOUFVUIGNv bW1hbmQgd2FzIGFjdGl2ZT8gKi8KKyAgICAgICAgaV9hY3RpdmUgPSAwOyAgICAgICAgICAgICAg ICAgICAvKiBOb3QgYW55IG1vcmUuLi4gKi8KKyAgICAgICAgaW5zdGF0dXMgPSBJTlBfVUk7ICAg ICAgICAgICAgICAvKiBJTlBVVCBzdGF0dXMgPSBVc2VyIEludGVycnVwdGVkICovCisgICAgfQor I2VuZGlmIC8qIE5PU1BMICovCisKKyNpZm5kZWYgTk9YRkVSCisgICAgZnRyZXNldCgpOyAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogUmVzdG9yZSBnbG9iYWwgcHJvdG9jb2wgc2V0dGluZ3Mg Ki8KKyAgICBiaW5hcnkgPSBiX3NhdmU7ICAgICAgICAgICAgICAgICAgICAvKiBUaGVuIHJlc3Rv cmUgdGhlc2UgKi8KKyAgICBmbmNudiAgPSBmX3NhdmU7CisgICAgYnllX2FjdGl2ZSA9IDA7Cisg ICAgZGlyYWN0aXZlID0gMDsKKyAgICBjZGFjdGl2ZSA9IDA7CisjZW5kaWYgLyogTk9YRkVSICov CisgICAgemNsb3NlKFpJRklMRSk7ICAgICAgICAgICAgICAgICAgICAgLyogSWYgd2Ugd2VyZSB0 cmFuc2ZlcnJpbmcgYSBmaWxlLCAqLworICAgIHpjbG9zZShaT0ZJTEUpOyAgICAgICAgICAgICAg ICAgICAgIC8qIGNsb3NlIGl0LiAqLworI2lmbmRlZiBOT0lDUAorICAgIGNtZHNxdW8oY21kX3F1 b3RpbmcpOyAgICAgICAgICAgICAgIC8qIElmIGNvbW1hbmQgcXVvdGluZyB3YXMgdHVybmVkIG9m ZiAqLworI2lmZGVmIENLTEVBUk4KKyAgICB7CisJZXh0ZXJuIEZJTEUgKiBsZWFybmZwOworCWV4 dGVybiBpbnQgbGVhcm5pbmc7CisJaWYgKGxlYXJuZnApIHsKKwkgICAgZmNsb3NlKGxlYXJuZnAp OworCSAgICBsZWFybmZwID0gTlVMTDsKKwkgICAgbGVhcm5pbmcgPSAwOworCX0KKyAgICB9Cisj ZW5kaWYgLyogQ0tMRUFSTiAqLworI2VuZGlmIC8qIE5PSUNQICovCisjaWZkZWYgQ0tfQVBDCisg ICAgZGVsbWFjKCJfYXBjX2NvbW1hbmRzIiwxKTsKKyAgICBhcGNhY3RpdmUgPSBBUENfSU5BQ1RJ VkU7CisjZW5kaWYgLyogQ0tfQVBDICovCisKKyNpZmRlZiBWTVMKKy8qCisgIEZpeCB0ZXJtaW5h bC4KKyovCisgICAgaWYgKGZ0X3dpbikgeyAgICAgICAgICAgICAgICAgICAgICAgLyogSWYgY3Vy c2VzIHdpbmRvdyBvcGVuICovCisgICAgICAgIGRlYnVnKEYxMDAsIl5DIHRyYXAoKSBjdXJzZXMi LCIiLDApOworICAgICAgICB4eHNjcmVlbihTQ1JfQ1csMCwwTCwiIik7ICAgICAgIC8qIENsb3Nl IGl0ICovCisgICAgICAgIGNvbnJlcygpOyAgICAgICAgICAgICAgICAgICAgICAgLyogUmVzdG9y ZSB0ZXJtaW5hbCAqLworICAgICAgICBpID0gcHJpbnRmKCJeQy4uLiIpOyAgICAgICAgICAgIC8q IEVjaG8gXkMgdG8gc3RhbmRhcmQgb3V0cHV0ICovCisgICAgfSBlbHNlIHsKKyAgICAgICAgY29u cmVzKCk7CisgICAgICAgIGkgPSBwcmludGYoIl5DLi4uXG4iKTsgICAgICAgICAgLyogRWNobyBe QyB0byBzdGFuZGFyZCBvdXRwdXQgKi8KKyAgICB9CisgICAgaWYgKGkgPCAxICYmIGZlcnJvcihz dGRvdXQpKSB7ICAgICAgLyogSWYgdGhlcmUgd2FzIGFuIGVycm9yICovCisgICAgICAgIGRlYnVn KEYxMDAsIl5DIHRyYXAoKSBlcnJvciIsIiIsMCk7CisgICAgICAgIGZjbG9zZShzdGRvdXQpOyAg ICAgICAgICAgICAgICAgLyogY2xvc2Ugc3RhbmRhcmQgb3V0cHV0ICovCisgICAgICAgIGYgPSBm b3BlbihkZnR0eSwgInciKTsgICAgICAgICAgLyogb3BlbiB0aGUgY29udHJvbGxpbmcgdGVybWlu YWwgKi8KKyAgICAgICAgaWYgKGYpIHN0ZG91dCA9IGY7ICAgICAgICAgICAgICAvKiBhbmQgbWFr ZSBpdCBzdGFuZGFyZCBvdXRwdXQgKi8KKyAgICAgICAgcHJpbnRmKCJeQy4uLlxuIik7ICAgICAg ICAgICAgICAvKiBhbmQgZWNobyB0aGUgXkMgYWdhaW4uICovCisgICAgfQorI2Vsc2UgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vdCBWTVMgKi8KKyNpZmRlZiBTVFJBVFVT CisgICAgY29ucmVzKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2V0IGNvbnNvbGUg YmFjayB0byBub3JtYWwgbW9kZSAqLworI2VuZGlmIC8qIFNUUkFUVVMgKi8KKyNpZm5kZWYgTk9Y RkVSCisgICAgaWYgKGZ0X3dpbikgeyAgICAgICAgICAgICAgICAgICAgICAgLyogSWYgY3Vyc2Vz IHdpbmRvdyBvcGVuLCAqLworICAgICAgICBkZWJ1ZyhGMTAwLCJeQyB0cmFwKCkgY3Vyc2VzIiwi IiwwKTsKKyAgICAgICAgeHhzY3JlZW4oU0NSX0NXLDAsMEwsIiIpOwkvKiBjbG9zZSBpdC4gKi8K KyAgICAgICAgcHJpbnRmKCJeQy4uLiIpOyAgICAgICAgICAgICAgICAvKiBFY2hvIF5DIHRvIHN0 YW5kYXJkIG91dHB1dCAqLworICAgIH0gZWxzZSB7CisjZW5kaWYgLyogTk9YRkVSICovCisgICAg ICAgIHByaW50ZigiXkMuLi5cbiIpOworI2lmbmRlZiBOT1hGRVIKKyAgICB9CisjZW5kaWYgLyog Tk9YRkVSICovCisjZW5kaWYgLyogVk1TICovCisjaWZkZWYgZGF0YWdlbmVyYWwKKyAgICBjb25u b2lfbXQoKTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBLaWxsIGFzeW5jaCB0YXNrIHRoYXQg bGlzdGVucyB0byAqLworICAgIHR0aW1vZmYoKTsKKyAgICBjb25yZXMoKTsgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiB0aGUga2V5Ym9hcmQgKi8KKyNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAq LworCisjaWZuZGVmIE5PQ0NUUkFQCisvKiAgVGhpcyBpcyBzdHVwaWQgLS0gZXZlcnkgdmVyc2lv biBzaG91bGQgaGF2ZSB0dGltb2ZmKCkuLi4gICovCisjaWZkZWYgVU5JWAorICAgIHR0aW1vZmYo KTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFR1cm4gb2ZmIGFueSB0aW1lciBpbnRlcnJ1 cHRzICovCisjZWxzZQorI2lmZGVmIE9TSworICAgIHR0aW1vZmYoKTsgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIFR1cm4gb2ZmIGFueSB0aW1lciBpbnRlcnJ1cHRzICovCisjZWxzZQorI2lm ZGVmIFNUUkFUVVMKKyAgICB0dGltb2ZmKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBU dXJuIG9mZiBhbnkgdGltZXIgaW50ZXJydXB0cyAqLworI2Vsc2UKKyNpZmRlZiBPUzIKKyNpZm5k ZWYgTk9TRVRLRVkKKyAgICBvczJna3MgPSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBU dXJuIGJhY2sgb24ga2V5Y29kZSBtYXBwaW5nICAqLworI2VuZGlmIC8qIE5PU0VUS0VZICovCisj aWZuZGVmIE5PTE9DQUwKKyAgICBmb3IgKGkgPSAwOyBpIDwgVk5VTTsgaSsrKQorICAgICAgVnNj cm5SZXNldFBvcHVwKGkpOworI2VuZGlmIC8qIE5PTE9DQUwgKi8KKyNpZmRlZiBUQ1BTT0NLRVQK KyNpZmRlZiBOVAorICAgIC8qIFdTQUlzQmxvY2tpbmcoKSByZXR1cm5zIEZBTFNFIGluIFdpbjk1 IGR1cmluZyBhIGJsb2NraW5nIGFjY2VwdCBjYWxsICovCisgICAgaWYgKCBXU0FTYWZlVG9DYW5j ZWwgLyogJiYgV1NBSXNCbG9ja2luZygpICovICkgeworICAgICAgICBXU0FDYW5jZWxCbG9ja2lu Z0NhbGwoKTsKKyAgICB9CisjZW5kaWYgLyogTlQgKi8KKyNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8K KyNpZmRlZiBDS19ORVRCSU9TCisgICAgTkNCQ2FuY2VsT3V0c3RhbmRpbmcoKTsKKyNlbmRpZiAv KiBDS19ORVRCSU9TICovCisgICAgdHRpbW9mZigpOyAgICAgICAgICAgICAgICAgICAgICAgICAg LyogVHVybiBvZmYgYW55IHRpbWVyIGludGVycnVwdHMgKi8KKyNlbHNlCisjaWZkZWYgVk1TCisg ICAgdHRpbW9mZigpOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVHVybiBvZmYgYW55IHRp bWVyIGludGVycnVwdHMgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyNl bmRpZiAvKiBTVFJBVFVTICovCisjZW5kaWYgLyogT1NLICovCisjZW5kaWYgLyogVU5JWCAqLwor CisjaWZkZWYgTkVUUFRZCisgICAgLyogQ2xlYW4gdXAgQ3RybC1DIG91dCBvZiBSRURJUkVDVCBv ciBleHRlcm5hbCBwcm90b2NvbCAqLworICAgIHsKKwlleHRlcm4gUElEX1QgcHR5X2ZvcmtfcGlk OworCWV4dGVybiBpbnQgcHR5X21hc3Rlcl9mZCwgcHR5X3NsYXZlX2ZkOworCWludCB4OworCisJ c2lnbmFsKFNJR0NITEQsU0lHX0lHTik7CS8qIFdlIGRvbid0IHdhbnQgdGhpcyBhbnkgbW9yZSAq LworCisJZGVidWcoRjEwMSwidHJhcCBwdHlfbWFzdGVyX2ZkIiwiIixwdHlfbWFzdGVyX2ZkKTsK KwlpZiAocHR5X21hc3Rlcl9mZCA+IDIpIHsKKwkgICAgeCA9IGNsb3NlKHB0eV9tYXN0ZXJfZmQp OworCSAgICBkZWJ1ZyhGMTAxLCJ0cmFwIHB0eV9tYXN0ZXJfZmQgY2xvc2UiLCIiLHgpOworCX0K KwlwdHlfbWFzdGVyX2ZkID0gLTE7CisJZGVidWcoRjEwMSwidHJhcCBwdHlfc2xhdmVfZmQiLCIi LHB0eV9zbGF2ZV9mZCk7CisJaWYgKHB0eV9zbGF2ZV9mZCA+IDIpIHsKKwkgICAgeCA9IGNsb3Nl KHB0eV9zbGF2ZV9mZCk7CisJICAgIGRlYnVnKEYxMDEsInRyYXAgcHR5X3NsYXZlX2ZkIGNsb3Nl IiwiIix4KTsKKwl9CisJcHR5X3NsYXZlX2ZkID0gLTE7CisJZGVidWcoRjEwMSwidHJhcCBwdHlf Zm9ya19waWQiLCIiLHB0eV9mb3JrX3BpZCk7CisJaWYgKHB0eV9mb3JrX3BpZCA+IDApIHsKKwkg ICAgeCA9IGtpbGwocHR5X2ZvcmtfcGlkLDApOwkvKiBTZWUgaWYgdGhlIGZvcmsgaXMgcmVhbGx5 IHRoZXJlICovCisJICAgIGRlYnVnKEYxMTEsInRyYXAgcHR5X2ZvcmtfcGlkIGtpbGwgMCBlcnJu byIsY2tpdG9hKHgpLGVycm5vKTsKKwkgICAgaWYgKHggPT0gMCkgewkJLyogU2VlbXMgdG8gYmUg YWN0aXZlICovCisJCXggPSBraWxsKHB0eV9mb3JrX3BpZCxTSUdIVVApOyAvKiBBc2sgaXQgdG8g Y2xlYW4gdXAgJiBleGl0ICovCisJCWRlYnVnKEYxMDEsInRyYXAgcHR5X2ZvcmtfcGlkIGtpbGwg U0lHSFVQIiwiIix4KTsKKwkJbXNsZWVwKDEwMCk7CisJCWVycm5vID0gMDsKKwkJeCA9IGtpbGwo cHR5X2ZvcmtfcGlkLDApOyAvKiBJcyBpdCBzdGlsbCB0aGVyZT8gKi8KKwkJaWYgKHggPT0gMAor I2lmZGVmIEVTUkNICisJCSAgICAvKiBUaGlzIG1vZHVsZSBpcyBub3QgYWx3YXlzIGV4cG9zZWQg dG8gPGVycm5vLmg+ICovCisJCSAgICB8fCBlcnJubyAhPSBFU1JDSAorI2VuZGlmCS8qIEVTUkNI ICovCisJCSAgICApIHsKKwkJICAgIHggPSBraWxsKHB0eV9mb3JrX3BpZCxTSUdLSUxMKTsKKwkJ ICAgIGRlYnVnKEYxMDEsInRyYXAgcHR5X2ZvcmtfcGlkIGtpbGwgU0lHS0lMTCIsIiIseCk7CisJ CX0KKwkgICAgfQorCSAgICBwdHlfZm9ya19waWQgPSAtMTsKKwl9CisgICAgfQorI2VuZGlmCS8q IE5FVFBUWSAqLworCisjaWZkZWYgT1NLCisgICAgc2lnbWFzaygtMSk7CisvKgorICBXZSBhcmUg aW4gYW4gaW50ZXJjZXB0IHJvdXRpbmUgYnV0IGRvIG5vdCBwZXJmb3JtIGEgRiRSVEUgKGRvbmUg aW1wbGljaXRseQorICBieSBydHMpLiAgV2UgaGF2ZSB0byBkZWNyZW1lbnQgdGhlIHNpZ21hc2sg YXMgRiRSVEUgZG9lcy4gIFdhcm5pbmc6IGxvbmdqdW1wCisgIG9ubHkgcmVzdG9yZXMgdGhlIGNw dSByZWdpc3RlcnMsIE5PVCB0aGUgZnB1IHJlZ2lzdGVycy4gIFNvIGRvbid0IHVzZSBmcHUgYXQK KyAgYWxsIG9yIGF0IGxlYXN0IGRvbid0IHVzZSBjb21tb24gZnB1IChkb3VibGUgb3IgZmxvYXQp IHJlZ2lzdGVyIHZhcmlhYmxlcy4KKyovCisjZW5kaWYgLyogT1NLICovCisKKyNpZmRlZiBOVFNJ RworICAgIFBvc3RDdHJsQ1NlbSgpOworI2Vsc2UgLyogTlRTSUcgKi8KKyAgICBkZWJ1ZyhGMTAw LCJ0cmFwIGFib3V0IHRvIGxvbmdqbXAiLCIiLDApOworI2lmZGVmIE5UCisgICAgY2tsb25nam1w KGNramFkZHIoY21qYnVmKSwxKTsKKyNlbHNlIC8qIE5UICovCisgICAgY2tsb25nam1wKGNtamJ1 ZiwxKTsKKyNlbmRpZiAvKiBOVCAqLworI2VuZGlmIC8qIE5UU0lHICovCisjZWxzZSAvKiBOT0ND VFJBUCAqLworLyogTm8gQ3RybC1DIHRyYXAsIGp1c3QgZXhpdC4gKi8KKyNpZmRlZiBDS19DVVJT RVMgICAgICAgICAgICAgICAgICAgICAgICAvKiBDdXJzZXMgc3VwcG9ydD8gKi8KKyAgICB4eHNj cmVlbihTQ1JfQ1csMCwwTCwiIik7ICAgICAgICAgICAvKiBDbG9zZSBjdXJzZXMgd2luZG93ICov CisjZW5kaWYgLyogQ0tfQ1VSU0VTICovCisgICAgZG9leGl0KEJBRF9FWElULHdoYXQpOyAgICAg ICAgICAgICAgLyogRXhpdCBwb29ybHkgKi8KKyNlbmRpZiAvKiBOT0NDVFJBUCAqLworICAgIFNJ R1JFVFVSTjsKK30KKworCisvKiAgQyBLIF8gVCBJIE0gRSAgLS0gUmV0dXJucyBwb2ludGVyIHRv IGN1cnJlbnQgdGltZS4gKi8KKworY2hhciAqCitja190aW1lKCkgeworICAgIHN0YXRpYyBjaGFy IHRidWZbMTBdOworICAgIGNoYXIgKnA7CisgICAgaW50IHg7CisKKyAgICB6dGltZSgmcCk7ICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiAiVGh1IEZlYiAgOCAxMjowMDowMCAxOTkwIiAqLwor ICAgIGlmICghcCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGxpa2UgYXNjdGltZSgp ISAqLworICAgICAgcmV0dXJuKCIiKTsKKyAgICBpZiAoKnApIHsKKyAgICAgICAgZm9yICh4ID0g MTE7IHggPCAxOTsgeCsrKSAgICAgICAvKiBjb3B5IGhoOm1tOnNzICovCisgICAgICAgICAgdGJ1 Zlt4IC0gMTFdID0gcFt4XTsgICAgICAgICAgLyogdG8gdGJ1ZiAqLworICAgICAgICB0YnVmWzhd ID0gTlVMOyAgICAgICAgICAgICAgICAgIC8qIHRlcm1pbmF0ZSAqLworICAgIH0KKyAgICByZXR1 cm4odGJ1Zik7ICAgICAgICAgICAgICAgICAgICAgICAvKiBhbmQgcmV0dXJuIGl0ICovCit9CisK Ky8qICBDIEMgXyBDIEwgRSBBIE4gIC0tICBDbGVhbnVwIGFmdGVyIHRlcm1pbmFsIGludGVycnVw dCBoYW5kbGVyICovCisKKyNpZmRlZiBHRU1ET1MKK2ludAorY2NfY2xlYW4oKSB7CisgICAgemNs b3NlKFpJRklMRSk7ICAgICAgICAgICAgICAgICAgICAgLyogSWYgd2Ugd2VyZSB0cmFuc2ZlcnJp bmcgYSBmaWxlLCAqLworICAgIHpjbG9zZShaT0ZJTEUpOyAgICAgICAgICAgICAgICAgICAgIC8q IGNsb3NlIGl0LiAqLworICAgIHByaW50ZigiXkMuLi5cbiIpOyAgICAgICAgICAgICAgICAgIC8q IE5vdCBWTVMsIG5vIHByb2JsZW0uLi4gKi8KK30KKyNlbmRpZiAvKiBHRU1ET1MgKi8KKworCisv KiAgUyBUIFAgVCBSIEEgUCAtLSBIYW5kbGUgU0lHVFNUUCAoc3VzcGVuZCkgc2lnbmFscyAqLwor CitTSUdUWVAKKyNpZmRlZiBDS19BTlNJQworc3RwdHJhcChpbnQgc2lnKQorI2Vsc2UKK3N0cHRy YXAoc2lnKSBpbnQgc2lnOworI2VuZGlmIC8qIENLX0FOU0lDICovCisvKiBzdHB0cmFwICovIHsK KworI2lmbmRlZiBOT0pDCisgICAgaW50IHg7IGV4dGVybiBpbnQgY21mbGdzOworICAgIGRlYnVn KEYxMDEsInN0cHRyYXAoKSBjYXVnaHQgc2lnbmFsIiwiIixzaWcpOworICAgIGlmICgheHN1c3Bl bmQpIHsKKyAgICAgICAgcHJpbnRmKCJcclxuc3VzcGVuZCBkaXNhYmxlZFxyXG4iKTsKKyNpZm5k ZWYgTk9JQ1AKKyAgICAgICAgaWYgKHdoYXQgJiBXX0NPTU1BTkQpIHsJCS8qIElmIHdlIHdlcmUg cGFyc2luZyBjb21tYW5kcyAqLworICAgICAgICAgICAgcHJvbXB0KHh4c3RyaW5nKTsgICAgICAg ICAgIC8qIHJlaXNzdWUgdGhlIHByb21wdCBhbmQgcGFydGlhbCAqLworICAgICAgICAgICAgaWYg KCFjbWZsZ3MpICAgICAgICAgICAgICAgIC8qIGNvbW1hbmQgKGlmIGFueSkgKi8KKyAgICAgICAg ICAgICAgcHJpbnRmKCIlcyIsY21kYnVmKTsKKyAgICAgICAgfQorI2VuZGlmIC8qIE5PSUNQICov CisgICAgfSBlbHNlIHsKKyAgICAgICAgY29ucmVzKCk7ICAgICAgICAgICAgICAgICAgICAgICAv KiBSZXNldCB0aGUgY29uc29sZSAqLworI2lmbmRlZiBPUzIKKyAgICAgICAgLyogRmx1c2ggcGVu ZGluZyBvdXRwdXQgZmlyc3QsIGluIGNhc2Ugd2UgYXJlIGNvbnRpbnVlZCAqLworICAgICAgICAv KiBpbiB0aGUgYmFja2dyb3VuZCwgd2hpY2ggY291bGQgbWFrZSB1cyBibG9jayAqLworICAgICAg ICBmZmx1c2goc3Rkb3V0KTsKKworICAgICAgICB4ID0gcHN1c3BlbmQoeHN1c3BlbmQpOwkJLyog VHJ5IHRvIHN1c3BlbmQuICovCisgICAgICAgIGlmICh4IDwgMCkKKyNlbmRpZiAvKiBPUzIgKi8K KyAgICAgICAgICBwcmludGYoIkpvYiBjb250cm9sIG5vdCBzdXBwb3J0ZWRcclxuIik7CisgICAg ICAgIGNvbmludCh0cmFwLHN0cHRyYXApOyAgICAgICAgICAgLyogUmVhcm0gdGhlIHRyYXAuICov CisgICAgICAgIGRlYnVnKEYxMDAsInN0cHRyYXAgYmFjayBmcm9tIHN1c3BlbmQiLCIiLDApOwor ICAgICAgICBzd2l0Y2ggKHdoYXQpIHsKKyAgICAgICAgICBjYXNlIFdfQ09OTkVDVDogICAgICAg ICAgICAgICAvKiBJZiBzdXNwZW5kZWQgZHVyaW5nIENPTk5FQ1Q/ICovCisgICAgICAgICAgICBj b25iaW4oKGNoYXIpZXNjYXBlKTsgICAgICAgLyogcHV0IGNvbnNvbGUgYmFjayBpbiBiaW5hcnkg bW9kZSAqLworICAgICAgICAgICAgZGVidWcoRjEwMCwic3RwdHJhcCBXX0NPTk5FQ1QiLCIiLDAp OworICAgICAgICAgICAgYnJlYWs7CisjaWZuZGVmIE5PSUNQCisgICAgICAgICAgY2FzZSBXX0NP TU1BTkQ6ICAgICAgICAgICAgICAgLyogU3VzcGVuZGVkIGluIGNvbW1hbmQgbW9kZSAqLworICAg ICAgICAgICAgZGVidWcoRjEwMSwic3RwdHJhcCBXX0NPTU1BTkQgcGZsYWciLCIiLHBmbGFnKTsK KyAgICAgICAgICAgIGNvbmNiKChjaGFyKWVzY2FwZSk7ICAgICAgICAvKiBQdXQgYmFjayBDQlJF QUsgdHR5IG1vZGUgKi8KKyAgICAgICAgICAgIGlmIChwZmxhZykgeyAgICAgICAgICAgICAgICAv KiBJZiBjb21tYW5kIHBhcnNpbmcgd2FzICovCisgICAgICAgICAgICAgICAgcHJvbXB0KHh4c3Ry aW5nKTsgICAgICAgLyogcmVpc3N1ZSB0aGUgcHJvbXB0IGFuZCBwYXJ0aWFsICovCisgICAgICAg ICAgICAgICAgaWYgKCFjbWZsZ3MpICAgICAgICAgICAgLyogY29tbWFuZCAoaWYgYW55KSAqLwor ICAgICAgICAgICAgICAgICAgcHJpbnRmKCIlcyIsY21kYnVmKTsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIE5PSUNQICovCisgICAgICAgICAgZGVmYXVsdDog ICAgICAgICAgICAgICAgICAgICAgLyogQWxsIG90aGVyIGNhc2VzLi4uICovCisgICAgICAgICAg ICBkZWJ1ZyhGMTAwLCJzdHB0cmFwIGRlZmF1bHQiLCIiLDApOworICAgICAgICAgICAgY29uY2Io KGNoYXIpZXNjYXBlKTsgICAgICAgIC8qIFB1dCBpdCBiYWNrIGluIENCUkVBSyBtb2RlICovCisg ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBOT0pDICovCisg ICAgU0lHUkVUVVJOOworfQorCisjaWZkZWYgVExPRworI2RlZmluZSBUQlVGTCAzMDAKKworLyog IFQgTCBPIEcgIC0tICBMb2cgYSByZWNvcmQgaW4gdGhlIHRyYW5zYWN0aW9uIGZpbGUgICovCisv KgorIENhbGwgd2l0aCBhIGZvcm1hdCBhbmQgMyBhcmd1bWVudHM6IHR3byBzdHJpbmdzIGFuZCBh IG51bWJlcjoKKyAgIGYgICAgIC0gRm9ybWF0LCBhIGJpdCBzdHJpbmcgaW4gcmFuZ2UgMC03LCBi aXQgeCBpcyBvbiwgYXJnICN4IGlzIHByaW50ZWQuCisgICBzMSxzMiAtIFN0cmluZyBhcmd1bWVu dHMgMCBhbmQgMS4KKyAgIG4gICAgIC0gTG9uZywgYXJndW1lbnQgMi4KKyovCitWT0lECisjaWZk ZWYgQ0tfQU5TSUMKK2RvdGxvZyhpbnQgZiwgY2hhciAqczEsIGNoYXIgKnMyLCBDS19PRkZfVCBu KQorI2Vsc2UKK2RvdGxvZyhmLHMxLHMyLG4pIGludCBmOyBDS19PRkZfVCBuOyBjaGFyICpzMSwg KnMyOworI2VuZGlmIC8qIENLX0FOU0lDICovCisvKiBkb3Rsb2cgKi8geworICAgIHN0YXRpYyBj aGFyIHNbVEJVRkxdOworICAgIGV4dGVybiBpbnQgdGxvZ2ZtdDsKKyAgICBjaGFyICpzcCA9IHM7 IGludCB4OworICAgIGlmICghczEpIHMxID0gIiI7CisgICAgaWYgKCFzMikgczIgPSAiIjsKKwor ICAgIGlmICghdHJhbG9nKSByZXR1cm47ICAgICAgICAgICAgICAgIC8qIElmIG5vIHRyYW5zYWN0 aW9uIGxvZywgZG9uJ3QgKi8KKyAgICBpZiAodGxvZ2ZtdCAhPSAxKSByZXR1cm47CisgICAgc3dp dGNoIChmKSB7CisgICAgICBjYXNlIEYwMDA6ICAgICAgICAgICAgICAgICAgICAgICAgLyogMCAo c3BlY2lhbCkgInMxIG4gczIiICAqLworICAgICAgICBpZiAoKGludClzdHJsZW4oczEpICsgKGlu dClzdHJsZW4oczIpICsgMTUgPiBUQlVGTCkKKyAgICAgICAgICBzcHJpbnRmKHNwLCI/VC1Mb2cg c3RyaW5nIHRvbyBsb25nIik7CisgICAgICAgIGVsc2UKKwkgIHNwcmludGYoc3AsIiVzICVzICVz IixzMSxja2ZzdG9hKG4pLHMyKTsKKyAgICAgICAgaWYgKHpzb3V0bChaVEZJTEUscykgPCAwKSB0 cmFsb2cgPSAwOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRjAwMTogICAgICAgICAgICAg ICAgICAgICAgICAvKiAxLCAiIG4iICovCisgICAgICAgIHNwcmludGYoc3AsIiAlcyIsY2tmc3Rv YShuKSk7CisgICAgICAgIGlmICh6c291dGwoWlRGSUxFLHMpIDwgMCkgdHJhbG9nID0gMDsKKyAg ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEYwMTA6ICAgICAgICAgICAgICAgICAgICAgICAgLyog MiwgIltzMl0iICovCisgICAgICAgIHggPSAoaW50KXN0cmxlbihzMik7CisgICAgICAgIGlmIChz Mlt4XSA9PSAnXG4nKSBzMlt4XSA9ICdcMCc7CisgICAgICAgIGlmICh4ICsgNiA+IFRCVUZMKQor ICAgICAgICAgIHNwcmludGYoc3AsIj9TdHJpbmcgdG9vIGxvbmciKTsKKyAgICAgICAgZWxzZSBz cHJpbnRmKHNwLCJbJXNdIixzMik7CisgICAgICAgIGlmICh6c291dGwoWlRGSUxFLCIiKSA8IDAp IHRyYWxvZyA9IDA7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBGMDExOiAgICAgICAgICAg ICAgICAgICAgICAgIC8qIDMsICJbczJdIG4iICovCisgICAgICAgIHggPSAoaW50KXN0cmxlbihz Mik7CisgICAgICAgIGlmIChzMlt4XSA9PSAnXG4nKSBzMlt4XSA9ICdcMCc7CisgICAgICAgIGlm ICh4ICsgNiA+IFRCVUZMKQorICAgICAgICAgIHNwcmludGYoc3AsIj9TdHJpbmcgdG9vIGxvbmci KTsKKyAgICAgICAgZWxzZSBzcHJpbnRmKHNwLCJbJXNdICVzIixzMixja2ZzdG9hKG4pKTsKKyAg ICAgICAgaWYgKHpzb3V0bChaVEZJTEUscykgPCAwKSB0cmFsb2cgPSAwOworICAgICAgICBicmVh azsKKyAgICAgIGNhc2UgRjEwMDogICAgICAgICAgICAgICAgICAgICAgICAvKiA0LCAiczEiICov CisgICAgICAgIGlmICh6c291dGwoWlRGSUxFLHMxKSA8IDApIHRyYWxvZyA9IDA7CisgICAgICAg IGJyZWFrOworICAgICAgY2FzZSBGMTAxOiAgICAgICAgICAgICAgICAgICAgICAgIC8qIDUsICJz MTogbiIgKi8KKyAgICAgICAgaWYgKChpbnQpc3RybGVuKHMxKSArIDE1ID4gVEJVRkwpCisgICAg ICAgICAgc3ByaW50ZihzcCwiP1N0cmluZyB0b28gbG9uZyIpOworICAgICAgICBlbHNlIHNwcmlu dGYoc3AsIiVzOiAlcyIsczEsY2tmc3RvYShuKSk7CisgICAgICAgIGlmICh6c291dGwoWlRGSUxF LHMpIDwgMCkgdHJhbG9nID0gMDsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEYxMTA6ICAg ICAgICAgICAgICAgICAgICAgICAgLyogNiwgInMxIHMyIiAqLworICAgICAgICB4ID0gKGludClz dHJsZW4oczIpOworICAgICAgICBpZiAoczJbeF0gPT0gJ1xuJykgczJbeF0gPSAnXDAnOworICAg ICAgICBpZiAoKGludClzdHJsZW4oczEpICsgeCArIDQgPiBUQlVGTCkKKyAgICAgICAgICBzcHJp bnRmKHNwLCI/U3RyaW5nIHRvbyBsb25nIik7CisgICAgICAgIGVsc2UKKwkgIHNwcmludGYoc3As IiVzJXMlcyIsczEsKCgqczIgPT0gJzonKSA/ICIiIDogIiAiKSxzMik7CisgICAgICAgIGlmICh6 c291dGwoWlRGSUxFLHMpIDwgMCkgdHJhbG9nID0gMDsKKyAgICAgICAgYnJlYWs7CisgICAgICBj YXNlIEYxMTE6ICAgICAgICAgICAgICAgICAgICAgICAgLyogNywgInMxIHMyOiBuIiAqLworICAg ICAgICB4ID0gKGludClzdHJsZW4oczIpOworICAgICAgICBpZiAoczJbeF0gPT0gJ1xuJykgczJb eF0gPSAnXDAnOworICAgICAgICBpZiAoKGludClzdHJsZW4oczEpICsgeCArIDE1ID4gVEJVRkwp CisgICAgICAgICAgc3ByaW50ZihzcCwiP1N0cmluZyB0b28gbG9uZyIpOworICAgICAgICBlbHNl CisJICBzcHJpbnRmKHNwLCIlcyVzJXM6ICVzIixzMSwoKCpzMiA9PSAnOicpID8gIiIgOiAiICIp LHMyLGNrZnN0b2EobikpOworICAgICAgICBpZiAoenNvdXRsKFpURklMRSxzKSA8IDApIHRyYWxv ZyA9IDA7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgc3ByaW50Zihz cCwiP0ludmFsaWQgZm9ybWF0IGZvciB0bG9nKCkgLSAlZCIsZik7CisgICAgICAgIGlmICh6c291 dGwoWlRGSUxFLHMpIDwgMCkgdHJhbG9nID0gMDsKKyAgICB9Cit9CisKKy8qCisgIEQgTyBYIEwg TyBHCisKKyAgVGhpcyBpcyB0aGUgdHJhbnNhY3Rpb24tbG9nIHdyaXRlciBmb3IgQlJJRUYgZm9y bWF0LgorICBUaGUgaWRlYSBpcyBwcm9kdWNlIG9uZSByZWNvcmQgKGxpbmUpIHBlciBmaWxlLiAg RWFjaCByZWNvcmQKKyAgaGFzIHRoZSBmb2xsb3dpbmcgZGVsaW1pdGVkIGZpZWxkczoKKyAgICBE YXRlICh5eXl5bW1kZCkKKyAgICBUaW1lIChoaDptbTpzcykKKyAgICBBY3Rpb246IFNFTkQgb3Ig UkVDVgorICAgIEZpbGUgbmFtZQorICAgIEZpbGUgc2l6ZQorICAgIFRyYW5zZmVyIG1vZGUgKHRl eHQsIGJpbmFyeSwgaW1hZ2UsIGxhYmVsZWQsIGV0YykuCisgICAgU3RhdHVzOiBPSyBvciBGQUlM RUQKKyAgICBGcmVlLWZvcm0gY29tbWVudHMgaW4gZG91YmxlcXVvdGVzCisgIFRoZSBkZWZhdWx0 IHNlcGFyYXRvciBpcyBjb21tYS4KKyAgSWYgYSBmaWVsZCBjb250YWlucyB0aGUgc2VwYXJhdG9y LCBpdCBpcyBlbmNsb3NlZCBpbiBkb3VibGVxdW90ZXMuCisqLworVk9JRAorI2lmZGVmIENLX0FO U0lDCitkb3hsb2coaW50IHgsIGNoYXIgKiBmbiwgQ0tfT0ZGX1QgZnMsIGludCBmbSwgaW50IHN0 YXR1cywgY2hhciAqIG1zZykKKyNlbHNlCitkb3hsb2coeCwgZm4sIGZzLCBmbSwgc3RhdHVzLCBt c2cpCisgICAgaW50IHg7IGNoYXIgKiBmbjsgQ0tfT0ZGX1QgZnM7IGludCBmbTsgaW50IHN0YXR1 czsgY2hhciAqIG1zZzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogZG94bG9nICovIHsKKyAg ICBleHRlcm4gaW50IHRsb2dzZXA7CisgICAgY2hhciBzZXBbMl07CisgICAgY2hhciBidWZbQ0tN QVhQQVRIKzI1Nl0sICogYnVmcDsKKyAgICBjaGFyIHRtcGJ1ZlszMl07CisgICAgY2hhciAqIHMs ICogcDsKKyAgICBpbnQgbGVuLCBsZWZ0LCBmdHAgPSAwLCBrOworCisgICAgaWYgKCF0cmFsb2cp IHJldHVybjsgICAgICAgICAgICAgICAgLyogSWYgbm8gdHJhbnNhY3Rpb24gbG9nLCBkb24ndCAq LworCisgICAgaWYgKCFmbikgZm4gPSAiIjsgICAgICAgICAgICAgICAgICAgLyogUHJvdGVjdCBh Z2FpbnN0IG51bGwgcG9pbnRlcnMgKi8KKyAgICBpZiAoIW1zZykgbXNnID0gIiI7CisgICAgaWYg KHggJiBXX0ZUUCkKKyAgICAgIGZ0cCsrOworCisgICAgc2VwWzBdID0gKGNoYXIpIHRsb2dzZXA7 CisgICAgc2VwWzFdID0gTlVMOworICAgIGlmICghc2VwWzBdKSBzZXBbMF0gPSAnLCc7CisKKyAg ICBidWZwID0gYnVmOworICAgIGxlZnQgPSBzaXplb2YoYnVmKTsKKyAgICBkZWJ1ZyhGMTAxLCJY WFggZG94bG9nIGxlZnQgMSIsIiIsbGVmdCk7CisKKyAgICBwID0genpuZGF0ZSgpOyAgICAgICAg ICAgICAgICAgICAgICAvKiBEYXRlICovCisgICAgY2ttYWttc2coYnVmLCBsZWZ0LCBwID8gcCA6 ICIwMDAwMDAwMCIsIHNlcCwgTlVMTCwgTlVMTCk7CisgICAgYnVmcCArPSA5OworICAgIGxlZnQg LT0gOTsKKyAgICBkZWJ1ZyhGMTExLCJYWFggZG94bG9nIGxlZnQgMiIsYnVmLGxlZnQpOworCisg ICAgenRpbWUoJnApOworICAgIGNrc3RybmNweShidWZwLHArMTEsbGVmdCk7CisgICAgYnVmcCAr PSA4OworICAgIGxlZnQgLT0gODsKKyAgICBkZWJ1ZyhGMTExLCJYWFggZG94bG9nIGxlZnQgMyIs YnVmLGxlZnQpOworCisgICAgaWYgKGZ0cCkgeworCWlmICghKHggJiAoV19TRU5EfFdfUkVDVikp KQorCSAgcmV0dXJuOworCXMgPSAgKHggJiBXX1NFTkQpID8gIlBVVCIgOiAiR0VUIjsKKwlrID0g MzsKKyAgICB9IGVsc2UgeworCXMgPSAgKHggJiBXX1NFTkQpID8gIlNFTkQiIDogIlJFQ1YiOwor CWsgPSA0OworICAgIH0KKyAgICBja21ha21zZyhidWZwLGxlZnQsc2VwLHMsc2VwLE5VTEwpOwor ICAgIGJ1ZnAgKz0gayArIDI7CisgICAgbGVmdCAtPSAoayArIDIpOworICAgIGRlYnVnKEYxMTEs IlhYWCBkb3hsb2cgbGVmdCA0IixidWYsbGVmdCk7CisKKyAgICBzID0gIiI7CisgICAgaWYgKGNr c3RyY2hyKGZuLHNlcFswXSkpCQkvKiBGaWxlbmFtZSAqLworICAgICAgcyA9ICJcIiI7CisgICAg Y2ttYWttc2coYnVmcCxsZWZ0LHMsZm4scyxzZXApOworICAgIHNwcmludGYodG1wYnVmLCIlcyIs Y2tmc3RvYShmcykpOwkvKiBTaXplICovCisgICAgY2tzdHJuY2F0KGJ1Zix0bXBidWYsQ0tNQVhQ QVRIKTsKKyAgICBja3N0cm5jYXQoYnVmLHNlcCxDS01BWFBBVEgpOworICAgIGRlYnVnKEYxMTAs ImRveGxvZyA0IixidWYsMCk7CisKKyNpZmRlZiBOT0lDUAorICAgIC8qIFRyYW5zZmVyIG1vZGUg Ki8KKyAgICBja3N0cm5jcHkodG1wYnVmLCAoYmluYXJ5ID8gImJpbmFyeSIgOiAidGV4dCIpLCBU TVBCVUZTSVopOworI2Vsc2UKKyAgICBja3N0cm5jcHkodG1wYnVmLGdmbW9kZShmbSwwKSxUTVBC VUZTSVopOworI2VuZGlmIC8qIE5PSUNQICovCisgICAgaWYgKGNrc3RyY2hyKHRtcGJ1ZixzZXBb MF0pKSB7ICAgICAgLyogTWlnaHQgY29udGFpbiBzcGFjZXMgKi8KKyAgICAgICAgY2tzdHJuY2F0 KGJ1ZiwiXCIiLENLTUFYUEFUSCk7CisgICAgICAgIGNrc3RybmNhdChidWYsdG1wYnVmLENLTUFY UEFUSCk7CisgICAgICAgIGNrc3RybmNhdChidWYsIlwiIixDS01BWFBBVEgpOworICAgIH0gZWxz ZQorICAgICAgY2tzdHJuY2F0KGJ1Zix0bXBidWYsQ0tNQVhQQVRIKTsKKyAgICBja3N0cm5jYXQo YnVmLHNlcCxDS01BWFBBVEgpOworICAgIGRlYnVnKEYxMTAsImRveGxvZyA1IixidWYsMCk7CisK KyAgICBja3N0cm5jYXQoYnVmLCBzdGF0dXMgPyAiRkFJTEVEIiA6ICJPSyIsQ0tNQVhQQVRIKTsK KyAgICBsZW4gPSBzdHJsZW4oYnVmKTsKKyAgICBsZWZ0ID0gQ0tNQVhQQVRIKzI1NiAtIGxlbjsK KyAgICBpZiAobGVmdCA8IDIpIGZhdGFsKCJkb3hsb2cgYnVmZmVyIG92ZXJsb3ciKTsKKworICAg IGRlYnVnKEYxMTEsIlhYWCBkb3hsb2cgbGVmdCA1IixidWYsbGVmdCk7CisKKyAgICBkZWJ1ZyhG MTEwLCJkb3hsb2cgYnVmIDEiLCBidWYsIGxlbik7CisgICAgcyA9IGJ1ZiArIGxlbjsKKyAgICBp ZiAoc3RhdHVzID09IDAgJiYgbGVmdCA+IDMyKSB7CisgICAgICAgIGxvbmcgY3BzID0gMEw7Cisj aWZkZWYgR0ZUSU1FUgorCWRlYnVnKEYxMDEsIkRPWExPRyBmcHhmc2VjcyIsIiIsKGxvbmcpKGZw eGZzZWNzICogMTAwMCkpOworICAgICAgICBpZiAoZnB4ZnNlY3MpIGNwcyA9IChsb25nKSgoQ0tG TE9BVCkgZnMgLyBmcHhmc2Vjcyk7CisgICAgICAgIHNwcmludGYocywiJXNcIiUwLjNmc2VjICVs ZGNwc1wiIixzZXAsZnB4ZnNlY3MsY3BzKTsKKyNlbHNlCisgICAgICAgIGlmICh4ZnNlY3MpIGNw cyA9IGZzIC8geGZzZWNzOworICAgICAgICBzcHJpbnRmKHMsIiVzXCIlbGRzZWMgJWxkY3BzXCIi LHNlcCx4ZnNlY3MsY3BzKTsKKyNlbmRpZiAvKiBHRlRJTUVSICovCisgICAgfSBlbHNlIGlmICgo aW50KXN0cmxlbihtc2cpICsgNCA8IGxlZnQpIHsKKyAgICAgICAgc3ByaW50ZihzLCIlc1wiJXNc IiIsc2VwLG1zZyk7CisgICAgfQorICAgIGRlYnVnKEYxMTEsIlhYWCBkb3hsb2cgbGVmdCA1Iixi dWYsbGVmdCk7CisKKyAgICBkZWJ1ZyhGMTEwLCJkb3hsb2cgNSIsYnVmLDApOworICAgIHggPSB6 c291dGwoWlRGSUxFLGJ1Zik7CisgICAgZGVidWcoRjEwMSwiZG94bG9nIHpzb3V0bCIsIiIseCk7 CisgICAgaWYgKHggPCAwKSB0cmFsb2cgPSAwOworfQorI2VuZGlmIC8qIFRMT0cgKi8KKworI2lm bmRlZiBNQUMKKy8qCisgIFRoZSByZXN0IG9mIHRoaXMgZmlsZSBpcyBmb3IgYWxsIGltcGxlbWVu dGF0aW9ucyBidXQgdGhlIE1hY2ludG9zaC4KKyovCisKKyNpZmRlZiBDS19DVVJTRVMKK3N0YXRp YyBpbnQgcmVwYWludCA9IDA7ICAgICAgICAgICAgICAgICAvKiBUcmFuc2ZlciBkaXNwbGF5IG5l ZWRzIHJlcGFpbnRpbmcgKi8KKyNlbmRpZiAvKiBDS19DVVJTRVMgKi8KKworI2lmbmRlZiBOT1hG RVIKKy8qICBDIEggSyBJIE4gVCAgLS0gIENoZWNrIGZvciBjb25zb2xlIGludGVycnVwdHMgICov CisKKy8qCisgIFVzZWQgZHVyaW5nIGZpbGUgdHJhbnNmZXIgaW4gbG9jYWwgbW9kZSBvbmx5Ogor ICAuIElmIHVzZXIgaGFzIG5vdCB0b3VjaGVkIHRoZSBrZXlib2FyZCwgcmV0dXJucyAwIHdpdGgg bm8gc2lkZSBlZmZlY3RzLgorICAuIElmIHVzZXIgdHlwZWQgUyBvciBBIChldGMsIHNlZSBiZWxv dykgcHJpbnRzIHN0YXR1cyBtZXNzYWdlIGFuZCByZXR1cm5zIDAuCisgIC4gSWYgdXNlciB0eXBl ZCBYIG9yIEYgKGV0Yywgc2VlIGJlbG93KSByZXR1cm5zIDAgd2l0aCBjeHNlZW4gc2V0IHRvIDEu CisgIC4gSWYgdXNlciB0eXBlZCBaIG9yIEIgKGV0Yywgc2VlIGJlbG93KSByZXR1cm5zIDAgd2l0 aCBjenNlZW4gc2V0IHRvIDEuCisgIC4gSWYgdXNlciB0eXBlZCBFIG9yIEMgKGV0Yywgc2VlIGJl bG93KSByZXR1cm5zIC0xLgorKi8KK2ludAorY2hraW50KCkgeworICAgIGludCBjaCwgY24sIG9m ZDsgbG9uZyB6ejsKKyAgICBpZiAoIXhmcmludCkKKyAgICAgIHJldHVybigwKTsKKyAgICBpZiAo KCFsb2NhbCkgfHwgKHF1aWV0KSkgcmV0dXJuKDApOyAvKiBPbmx5IGRvIHRoaXMgaWYgbG9jYWwg JiBub3QgcXVpZXQgKi8KKyNpZmRlZiBkYXRhZ2VuZXJhbAorICAgIGlmIChjb25fcmVhZHNfbXQp ICAgICAgICAgICAgICAgICAgIC8qIGlmIGNvbmludF9tdCB0YXNrIGlzIGFjdGl2ZSAqLworICAg ICAgaWYgKGNvbmludF9hdmwpIHsgICAgICAgICAgICAgICAgIC8qIGFuZCB0aGVyZSdzIGFuIGlu dGVycnVwdCBwZW5kaW5nICovCisgICAgICAgICAgY24gPSAxOyAgICAgICAgICAgICAgICAgICAg ICAgLyogcHJvY2VzcyBpdCAqLworICAgICAgICAgIGNoID0gY29uaW50X2NoOworICAgICAgICAg IGNvbmludF9hdmwgPSAwOyAgICAgICAgICAgICAgIC8qIHR1cm4gb2ZmIGZsYWcgc28gY29uaW50 X210IGNhbiAqLworICAgICAgfSBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHBy b2NlZWQgKi8KKyAgICAgICAgcmV0dXJuKDApOworICAgIGVsc2UgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIGlmIGNvbmludF9tdCBub3QgYWN0aXZlICovCisgICAgICBpZiAoKGNo ID0gY29uaW5jKDIpKSA8IDApICAgICAgICAgLyogdHJ5IHRvIGdldCBjaGFyIG1hbnVhbGx5ICov CisgICAgICAgIHJldHVybigwKTsgICAgICAgICAgICAgICAgICAgICAgLyogSS9PIGVycm9yLCBv ciBubyBkYXRhICovCisgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog aWYgc3VjY2Vzc2Z1bCwgc2V0IGNuIHNvIHdlICovCisgICAgICAgIGNuID0gMTsgICAgICAgICAg ICAgICAgICAgICAgICAgLyoga25vdyB3ZSBnb3Qgb25lICovCisgICAgZGVidWcoRjEwMSwiY2hr aW50IGdvdCBrZXlib2FyZCBjaGFyYWN0ZXIiLGNoLGNuKTsKKyNlbHNlIC8qICFkYXRhZ2VuZXJh bCAqLworI2lmZGVmIE5UU0lHCisgICAgeworICAgICAgICBleHRlcm4gaW50IFRsc0luZGV4Owor ICAgICAgICBzdHJ1Y3QgX3RocmVhZGluZm8gKiB0aHJlYWRpbmZvOworICAgICAgICB0aHJlYWRp bmZvID0gKHN0cnVjdCBfdGhyZWFkaW5mbyAqKSBUbHNHZXRWYWx1ZShUbHNJbmRleCk7CisgICAg ICAgIGlmICh0aHJlYWRpbmZvKSB7CisgICAgICAgICAgICBpZiAoIVdhaXRTZW0odGhyZWFkaW5m by0+RGllU2VtLDApKQorICAgICAgICAgICAgICByZXR1cm4gLTE7ICAgICAgICAgICAgICAgIC8q IENhbmNlbCBJbW1lZGlhdGVseSAqLworICAgICAgICB9CisgICAgfQorI2VuZGlmIC8qIE5UU0lH ICovCisgICAgY24gPSBjb25jaGsoKTsgICAgICAgICAgICAgICAgICAgICAgLyogQW55IGlucHV0 IHdhaXRpbmc/ICovCisgICAgZGVidWcoRjEwMSwiY29uY2hrIiwiIixjbik7CisgICAgaWYgKGNu IDwgMSkgcmV0dXJuKDApOworICAgIGNoID0gY29uaW5jKDUpIDsKKyAgICBkZWJ1ZyhGMTAxLCJj b25pbmMiLCIiLGNoKTsKKyAgICBpZiAoY2ggPCAwKSByZXR1cm4oMCk7CisjZW5kaWYgLyogZGF0 YWdlbmVyYWwgKi8KKworICAgIGNoICY9IDAxNzc7CisgICAgc3dpdGNoIChjaCkgeworICAgICAg Y2FzZSAnQSc6IGNhc2UgJ2EnOiBjYXNlIDAwMDE6ICAgIC8qIFN0YXR1cyByZXBvcnQgKi8KKyAg ICAgIGNhc2UgJ1MnOiBjYXNlICdzJzoKKyAgICAgICAgaWYgKGZkaXNwbGEgIT0gWFlGRF9SICYm IGZkaXNwbGEgIT0gWFlGRF9TICYmIGZkaXNwbGEgIT0gWFlGRF9OKQorICAgICAgICAgIHJldHVy bigwKTsgICAgICAgICAgICAgICAgICAgIC8qIE9ubHkgZm9yIHNlcmlhbCwgc2ltcGxlIG9yIG5v bmUgKi8KKyAgICAgICAgb2ZkID0gZmRpc3BsYTsgICAgICAgICAgICAgICAgICAvKiBbTUZdIFNh dmUgZmlsZSBkaXNwbGF5IHR5cGUgKi8KKyAgICAgICAgaWYgKGZkaXNwbGEgPT0gWFlGRF9OKQor ICAgICAgICAgIGZkaXNwbGEgPSBYWUZEX1I7ICAgICAgICAgICAgIC8qIFtNRl0gUHJldGVuZCBz ZXJpYWwgaWYgbm8gZGlzcGxheSAqLworICAgICAgICB4eHNjcmVlbihTQ1JfVE4sMCwwbCwiU3Rh dHVzIHJlcG9ydDoiKTsKKyAgICAgICAgeHhzY3JlZW4oU0NSX1ROLDAsMGwsIiBmaWxlIHR5cGU6 ICIpOworICAgICAgICBpZiAoYmluYXJ5KSB7CisgICAgICAgICAgICBzd2l0Y2goYmluYXJ5KSB7 CisgICAgICAgICAgICAgIGNhc2UgWFlGVF9MOiB4eHNjcmVlbihTQ1JfVFosMCwwbCwibGFiZWxl ZCIpOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBYWUZUX0k6IHh4c2NyZWVuKFNDUl9UWiww LDBsLCJpbWFnZSIpOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBYWUZUX1U6IHh4c2NyZWVu KFNDUl9UWiwwLDBsLCJiaW5hcnkgdW5kZWZpbmVkIik7IGJyZWFrOworICAgICAgICAgICAgICBk ZWZhdWx0OgorICAgICAgICAgICAgICBjYXNlIFhZRlRfQjogeHhzY3JlZW4oU0NSX1RaLDAsMGws ImJpbmFyeSIpOyBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyNpZmRl ZiBOT0NTRVRTCisgICAgICAgICAgICB4eHNjcmVlbihTQ1JfVFosMCwwbCwidGV4dCIpOworI2Vs c2UKKyAgICAgICAgICAgIHh4c2NyZWVuKFNDUl9UVSwwLDBsLCJ0ZXh0LCAiKTsKKyAgICAgICAg ICAgIGlmICh0Y2hhcnNldCA9PSBUQ19UUkFOU1AgfHwgeGZyeGxhID09IDApIHsKKyAgICAgICAg ICAgICAgICB4eHNjcmVlbihTQ1JfVFosMCwwbCwidHJhbnNwYXJlbnQiKTsKKyAgICAgICAgICAg IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKHdoYXQgJiBXX1NFTkQpIHsKKyAgICAgICAg ICAgICAgICAgICAgeHhzY3JlZW4oU0NSX1RaLDAsMGwsdGNzaW5mb1t0Y2hhcnNldF0ua2V5d29y ZCk7CisgICAgICAgICAgICAgICAgICAgIHh4c2NyZWVuKFNDUl9UVSwwLDBsLCIgPT4gIik7Cisg ICAgICAgICAgICAgICAgICAgIHh4c2NyZWVuKFNDUl9UWiwwLDBsLGZjc2luZm9bZmNoYXJzZXRd LmtleXdvcmQpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg IHh4c2NyZWVuKFNDUl9UWiwwLDBsLGZjc2luZm9bZmNoYXJzZXRdLmtleXdvcmQpOworICAgICAg ICAgICAgICAgICAgICB4eHNjcmVlbihTQ1JfVFUsMCwwbCwiID0+ICIpOworICAgICAgICAgICAg ICAgICAgICB4eHNjcmVlbihTQ1JfVFosMCwwbCx0Y3NpbmZvW3RjaGFyc2V0XS5rZXl3b3JkKTsK KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisjZW5kaWYgLyogTk9DU0VUUyAqLwor ICAgICAgICB9CisgICAgICAgIHh4c2NyZWVuKFNDUl9RRSwwLGZpbGNudCwiIGZpbGUgbnVtYmVy Iik7CisgICAgICAgIGlmIChmc2l6ZSkgeHhzY3JlZW4oU0NSX1FFLDAsZnNpemUsIiBzaXplIik7 CisgICAgICAgIHh4c2NyZWVuKFNDUl9RRSwwLGZmYywiIGNoYXJhY3RlcnMgc28gZmFyIik7Cisg ICAgICAgIGlmIChmc2l6ZSA+IDBMKSB7CisjaWZkZWYgQ0tfUkVTRU5ECisgICAgICAgICAgICB6 eiA9IHdoYXQgJiBXX1NFTkQgPyBzZW5kc3RhcnQgOiB3aGF0ICYgV19SRUNWID8gcnNfbGVuIDog MDsKKyAgICAgICAgICAgIHp6ID0gKCAoZmZjICsgenopICogMTAwTCApIC8gZnNpemU7CisjZWxz ZQorICAgICAgICAgICAgenogPSAoIGZmYyAqIDEwMEwgKSAvIGZzaXplOworI2VuZGlmIC8qIENL X1JFU0VORCAqLworICAgICAgICAgICAgeHhzY3JlZW4oU0NSX1FFLDAsenosICAgICAgIiBwZXJj ZW50IGRvbmUiKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoYmN0dSA9PSA0KSB7ICAgICAgICAg ICAgICAgIC8qIEJsb2NrIGNoZWNrICovCisgICAgICAgICAgICB4eHNjcmVlbihTQ1JfVFUsMCww TCwiIGJsb2NrIGNoZWNrOiAiKTsKKyAgICAgICAgICAgIHh4c2NyZWVuKFNDUl9UWiwwLDBMLCJi bGFuay1mcmVlLTIiKTsKKyAgICAgICAgfSBlbHNlIHh4c2NyZWVuKFNDUl9RRSwwLChsb25nKWJj dHUsICAiIGJsb2NrIGNoZWNrIik7CisgICAgICAgIHh4c2NyZWVuKFNDUl9RRSwwLChsb25nKXJw dGZsZywiIGNvbXByZXNzaW9uIik7CisgICAgICAgIHh4c2NyZWVuKFNDUl9RRSwwLChsb25nKWVi cWZsZywiIDh0aC1iaXQgcHJlZml4aW5nIik7CisgICAgICAgIHh4c2NyZWVuKFNDUl9RRSwwLChs b25nKWxzY2FwdSwiIGxvY2tpbmcgc2hpZnRzIik7CisgICAgICAgIGlmICghbmV0d29yaykKKyAg ICAgICAgICB4eHNjcmVlbihTQ1JfUUUsMCwgc3BlZWQsICIgc3BlZWQiKTsKKyAgICAgICAgaWYg KHdoYXQgJiBXX1NFTkQpCisKKyAgICAgICAgICB4eHNjcmVlbihTQ1JfUUUsMCxzcHNpeiwgIiBw YWNrZXQgbGVuZ3RoIik7CisgICAgICAgIGVsc2UgaWYgKHdoYXQgJiBXX1JFQ1YgfHwgd2hhdCAm IFdfUkVNTykKKyAgICAgICAgICB4eHNjcmVlbihTQ1JfUUUsMCx1cnBzaXosIiBwYWNrZXQgbGVu Z3RoIik7CisgICAgICAgIHh4c2NyZWVuKFNDUl9RRSwwLHdzbG90cywgICIgd2luZG93IHNsb3Rz Iik7CisgICAgICAgIGZkaXNwbGEgPSBvZmQ7IC8qIFtNRl0gUmVzdG9yZSBmaWxlIGRpc3BsYXkg dHlwZSAqLworICAgICAgICByZXR1cm4oMCk7CisKKyAgICAgIGNhc2UgJ0InOiBjYXNlICdiJzog Y2FzZSAwMDAyOiAgICAvKiBDYW5jZWwgYmF0Y2ggKi8KKyAgICAgIGNhc2UgJ1onOiBjYXNlICd6 JzogY2FzZSAwMDMyOgorICAgICAgICBjenNlZW4gPSAxOworICAgICAgICBpbnRlcnJ1cHRlZCA9 IDE7CisgICAgICAgIHh4c2NyZWVuKFNDUl9TVCxTVF9NU0csMGwsCisgICAgICAgICAgICAgICAg ICgoKHdoYXQgJiBXX1JFQ1YpICYmICh3c2xvdHMgPiAxKSkgPworICAgICAgICAgICAgICAgICAg IkNhbmNlbGluZyBiYXRjaCwgd2FpdC4uLiAiIDoKKyAgICAgICAgICAgICAgICAgICJDYW5jZWxp bmcgYmF0Y2guLi4gIikKKyAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgcmV0dXJuKDApOwor CisgICAgICBjYXNlICdGJzogY2FzZSAnZic6IGNhc2UgMDAwNjogICAgLyogQ2FuY2VsIGZpbGUg Ki8KKyAgICAgIGNhc2UgJ1gnOiBjYXNlICd4JzogY2FzZSAwMDMwOgorICAgICAgICBjeHNlZW4g PSAxOworICAgICAgICBpbnRlcnJ1cHRlZCA9IDE7CisgICAgICAgIHh4c2NyZWVuKFNDUl9TVCxT VF9NU0csMGwsCisgICAgICAgICAgICAgICAgICgoKHdoYXQgJiBXX1JFQ1YpICYmICh3c2xvdHMg PiAxKSkgPworICAgICAgICAgICAgICAgICAgIkNhbmNlbGluZyBmaWxlLCB3YWl0Li4uICIgOgor ICAgICAgICAgICAgICAgICAgIkNhbmNlbGluZyBmaWxlLi4uICIpCisgICAgICAgICAgICAgICAg ICk7CisgICAgICAgIHJldHVybigwKTsKKworICAgICAgY2FzZSAnUic6IGNhc2UgJ3InOiBjYXNl IDAwMjI6ICAgIC8qIFJlc2VuZCBwYWNrZXQgKi8KKyAgICAgIGNhc2UgMDAxNTogY2FzZSAwMDEy OgorI2lmZGVmIFNUUkVBTUlORworICAgICAgICBpZiAoc3RyZWFtaW5nKQorICAgICAgICAgIHJl dHVybigwKTsKKyNlbmRpZiAvKiBTVFJFQU1JTkcgKi8KKyAgICAgICAgeHhzY3JlZW4oU0NSX1NU LFNUX01TRywwbCwiUmVzZW5kaW5nIHBhY2tldC4uLiAiKTsKKyAgICAgICAgbnVtZXJycysrOwor ICAgICAgICByZXNlbmQod2lubG8pOworICAgICAgICByZXR1cm4oMCk7CisKKyNpZmRlZiBkYXRh Z2VuZXJhbAorICAgICAgY2FzZSAnXDAzJzogICAgICAgICAgICAgICAgICAgICAgIC8qIFdlJ3Jl IG5vdCB0cmFwcGluZyBeQydzIHdpdGggKi8KKyAgICAgICAgdHJhcCgwKTsgICAgICAgICAgICAg ICAgICAgICAgICAvKiBzaWduYWxzLCBzbyB3ZSBjaGVjayBoZXJlICAgICovCisjZW5kaWYgLyog ZGF0YWdlbmVyYWwgKi8KKworICAgICAgY2FzZSAnQyc6IGNhc2UgJ2MnOiAgICAgICAgICAgICAg IC8qIEN0cmwtQyAqLworI2lmbmRlZiBkYXRhZ2VuZXJhbAorICAgICAgY2FzZSAnXDAzJzoKKyNl bmRpZiAvKiBkYXRhZ2VuZXJhbCAqLworCisgICAgICBjYXNlICdFJzogY2FzZSAnZSc6ICAgICAg ICAgICAgICAgLyogU2VuZCBlcnJvciBwYWNrZXQgKi8KKyAgICAgIGNhc2UgMDAwNToKKyAgICAg ICAgaW50ZXJydXB0ZWQgPSAxOworICAgICAgICByZXR1cm4oLTEpOworCisjaWZkZWYgQ0tfQ1VS U0VTCisgICAgICBjYXNlIDAwMTQ6ICAgICAgICAgICAgICAgICAgICAgICAgLyogQ3RybC1MIHRv IHJlZnJlc2ggc2NyZWVuICovCisgICAgICBjYXNlICdMJzogY2FzZSAnbCc6ICAgICAgICAgICAg ICAgLyogQWxzbyBhY2NlcHQgTCAodXBwZXIsIGxvd2VyKSAqLworICAgICAgY2FzZSAwMDI3OiAg ICAgICAgICAgICAgICAgICAgICAgIC8qIEN0cmwtVyBzeW5vbnltIGZvciBWTVMgJiBJbmdyZXMg Ki8KKyAgICAgICAgcmVwYWludCA9IDE7CisgICAgICAgIHJldHVybigwKTsKKyNlbmRpZiAvKiBD S19DVVJTRVMgKi8KKworICAgICAgY2FzZSAnVCc6CisgICAgICBjYXNlICd0JzoJCQkJLyogVHVy biBvbiBkZWJ1Zy1sb2cgdGltZXN0YW1wcyAqLworI2lmZGVmIERFQlVHCisJeworCSAgICBleHRl cm4gaW50IGRlYnRpbTsKKwkgICAgaWYgKGNoID09ICdUJykgeworCQlkZWJ0aW0gPSAxOworCQl4 eHNjcmVlbihTQ1JfU1QsU1RfTVNHLDBsLAorCQkJICJEZWJ1ZyB0aW1lc3RhbXBzIE9uLi4uICIp OworCSAgICB9IGVsc2UgeworCQlkZWJ0aW0gPSAxOworCQl4eHNjcmVlbihTQ1JfU1QsU1RfTVNH LDBsLAorCQkJICJEZWJ1ZyB0aW1lc3RhbXBzIE9mZi4uLiAiKTsKKwkgICAgfQorCX0KKyNlbmRp ZiAvKiBERUJVRyAqLworCXJldHVybigwKTsKKworICAgICAgY2FzZSAnRCc6CisjaWZkZWYgREVC VUcKKwlpZiAoIWRlYmxvZykgeworCSAgICBkZWJvcG4oImRlYnVnLmxvZyIsMCk7CisJICAgIGlm IChkZWJsb2cpIHsKKwkJeHhzY3JlZW4oU0NSX1NULFNUX01TRywwbCwiZGVidWcubG9nIG9wZW4u Li4gIik7CisJICAgIH0gZWxzZSB7CisJCXh4c2NyZWVuKFNDUl9TVCxTVF9NU0csMGwsImRlYnVn LmxvZyBvcGVuIEZBSUxFRC4uLiAiKTsKKwkgICAgfQorCX0gZWxzZSB7CisJICAgIHh4c2NyZWVu KFNDUl9TVCxTVF9NU0csMGwsIkRlYnVnIGxvZyBPbi4uLiAiKTsKKwl9CisJaWYgKGRlYmxvZykK KwkgIGRlYm9rID0gMTsKKyNlbmRpZiAvKiBERUJVRyAqLworCXJldHVybigwKTsKKworICAgICAg Y2FzZSAnZCc6CQkJCS8qIFR1cm4gb2ZmIGRlYnVnZ2luZyAqLworI2lmZGVmIERFQlVHCisJaWYg KGRlYmxvZykKKwkgIHh4c2NyZWVuKFNDUl9TVCxTVF9NU0csMGwsIkRlYnVnIGxvZyBPZmYuLi4g Iik7CisJZGVib2sgPSAwOworI2VuZGlmIC8qIERFQlVHICovCisJcmV0dXJuKDApOworCisgICAg ICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQW55dGhpbmcgZWxzZSwgcHJp bnQgbWVzc2FnZSAqLworICAgICAgICBpbnRtc2coMUwpOworICAgICAgICByZXR1cm4oMCk7Cisg ICAgfQorfQorCisvKiAgSSBOIFQgTSBTIEcgIC0tICBJc3N1ZSBtZXNzYWdlIGFib3V0IHRlcm1p bmFsIGludGVycnVwdHMgICovCisKK1ZPSUQKKyNpZmRlZiBDS19BTlNJQworaW50bXNnKGxvbmcg bikKKyNlbHNlCitpbnRtc2cobikgbG9uZyBuOworI2VuZGlmIC8qIENLX0FOU0lDICovCisvKiBp bnRtc2cgKi8geworI2lmZGVmIENLX05FRURfU0lHCisgICAgY2hhciBidWZbODBdOworI2VuZGlm IC8qIENLX05FRURfU0lHICovCisKKyAgICBpZiAoIWRpc3BsYSB8fCBxdWlldCkgICAgICAgICAg ICAgICAvKiBOb3QgaWYgd2UncmUgYmVpbmcgcXVpZXQgKi8KKyAgICAgIHJldHVybjsKKyAgICBp ZiAoc2VydmVyICYmICghc3J2ZGlzIHx8IG4gPiAtMUwpKSAvKiBTcGVjaWFsIGZvciBzZXJ2ZXIg Ki8KKyAgICAgIHJldHVybjsKKyNpZmRlZiBDS19ORUVEX1NJRworICAgIGJ1ZlswXSA9IE5VTDsg ICAgICAgICAgICAgICAgICAgICAgIC8qIEtlZXAgY29tcGlsZXJzIGhhcHB5ICovCisjZW5kaWYg LyogQ0tfTkVFRF9TSUcgKi8KKyNpZm5kZWYgT1hPUworI2lmZGVmIFNWT1JQT1NJWAorICAgIGNv bmNoaygpOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIG91dCBwZW5kaW5nIGVz Y2FwZS1zaWduYWxzICovCisjZW5kaWYgLyogU1ZPUlBPU0lYICovCisjZW5kaWYgLyogISBPWE9T ICovCisjaWZkZWYgVk1TCisgICAgY29ucmVzKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogU28gQ3RybC1DIHdpbGwgd29yayAqLworI2VuZGlmIC8qIFZNUyAqLworICAgIGlmICgoIXNl cnZlciAmJiBuID09IDFMKSB8fCAoc2VydmVyICYmIG4gPCAwTCkpIHsKKworI2lmZGVmIENLX05F RURfU0lHCisgICAgICAgIGlmICh4ZnJpbnQpIHsKKwkgICAgY2ttYWttc2coYnVmLAorCQkgICAg IDgwLAorCQkgICAgICJUeXBlIGVzY2FwZSBjaGFyYWN0ZXIgKCIsCisJCSAgICAgZGJjaHIoZXNj YXBlKSwKKwkJICAgICAiKSBmb2xsb3dlZCBieToiLAorCQkgICAgIE5VTEwKKwkJICAgICApOwor ICAgICAgICAgICAgeHhzY3JlZW4oU0NSX1ROLDAsMGwsYnVmKTsKKyAgICAgICAgfQorI2VuZGlm IC8qIENLX05FRURfU0lHICovCisKKyAgICAgICAgaWYgKHhmcmludCkgeworICAgICAgICAgICAg aWYgKHByb3RvY29sID09IFBST1RPX0spIHsKKyB4eHNjcmVlbihTQ1JfVE4sMCwwbCwiWCB0byBj YW5jZWwgZmlsZSwgIENSIHRvIHJlc2VuZCBjdXJyZW50IHBhY2tldCIpOworIHh4c2NyZWVuKFND Ul9UTiwwLDBsLCJaIHRvIGNhbmNlbCBncm91cCwgQSBmb3Igc3RhdHVzIHJlcG9ydCIpOworIHh4 c2NyZWVuKFNDUl9UTiwwLDBsLCJFIHRvIHNlbmQgRXJyb3IgcGFja2V0LCBDdHJsLUMgdG8gcXVp dCBpbW1lZGlhdGVseTogIik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg IHh4c2NyZWVuKFNDUl9UTiwwLDBsLCJDdHJsLUMgdG8gY2FuY2VsIGZpbGUgdHJhbnNmZXI6ICIp OworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgeHhzY3JlZW4o U0NSX1ROLDAsMGwsIlRyYW5zZmVyIGludGVycnVwdGlvbiBkaXNhYmxlZC4gIik7CisgICAgICAg IH0KKyAgICB9CisgICAgZWxzZSB4eHNjcmVlbihTQ1JfVFUsMCwwbCwiICIpOworfQorCisjaWZu ZGVmIE5PRElTUExBWQorc3RhdGljIGludCBuZXdkcHkgPSAwOyAgICAgICAgICAgICAgICAgIC8q IE5ldyBkaXNwbGF5IGZsYWcgKi8KK3N0YXRpYyBjaGFyIGZidWZbODBdOyAgICAgICAgICAgICAg ICAgICAvKiBGaWxlbmFtZSBidWZmZXIgKi8KK3N0YXRpYyBjaGFyIGFidWZbODBdOyAgICAgICAg ICAgICAgICAgICAvKiBBcy1uYW1lIGJ1ZmZlciAqLworc3RhdGljIGNoYXIgYTJidWZbODBdOyAg ICAgICAgICAgICAgICAgIC8qIFNlY29uZCBBcy1uYW1lIGJ1ZmZlciAqLworc3RhdGljIENLX09G Rl9UIG9sZGZmYyA9IDBMOworc3RhdGljIENLX09GRl9UIGRvdHMgPSAwTDsKK3N0YXRpYyBpbnQg aHBvcyA9IDA7CisKK3N0YXRpYyBWT0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJ bml0aWFsaXplIFNlcmlhbCBvciBDUlQgZGlzcGxheSAqLworZHB5aW5pdCgpIHsKKyAgICBpbnQg bSA9IDAsIG4gPSAwOworICAgIGNoYXIgKiBzID0gIiI7CisKKyAgICBuZXdkcHkgPSAwOyAgICAg ICAgICAgICAgICAgICAgICAgICAvKiAgRG9uJ3QgZG8gdGhpcyBhZ2FpbiAqLworICAgIG9sZGZm YyA9IChDS19PRkZfVCkwOwkJLyogIFJlc2V0IHRoaXMgKi8KKyAgICBkb3RzID0gKENLX09GRl9U KTA7CQkJLyogIGFuZCB0aGlzLi4gKi8KKyAgICBvbGRjcHMgPSBjcHMgPSAwTDsKKworICAgIGNv bm9sbCgiIik7CQkJCS8qIE5ldyBsaW5lICovCisgICAgaWYgKHdoYXQgJiBXX1NFTkQpIHMgPSAi U2VuZGluZzogIjsJLyogQWN0aW9uICovCisgICAgZWxzZSBpZiAod2hhdCAmIFdfUkVDVikgcyA9 ICJSZWNlaXZpbmc6ICI7CisgICAgbiA9IChpbnQpc3RybGVuKHMpICsgKGludClzdHJsZW4oZmJ1 Zik7CisgICAgY29ub2woZmJ1Zik7CisgICAgbSA9IChpbnQpc3RybGVuKGFidWYpICsgNDsKKyAg ICBpZiAobiArIG0gPiBjbWRfY29scykgeworICAgICAgICBjb25vbGwoIiIpOworICAgICAgICBu ID0gMDsKKyAgICB9IGVsc2UKKyAgICAgIG4gKz0gbTsKKyAgICBpZiAoKmFidWYpIHsKKyAgICAg ICAgY29ub2woIiA9PiAiKTsKKyAgICAgICAgY29ub2woYWJ1Zik7CisgICAgfQorICAgIG0gPSAo aW50KXN0cmxlbihhMmJ1ZikgKyA0OworICAgIGlmIChuICsgbSA+IGNtZF9jb2xzKSB7CisgICAg ICAgIGNvbm9sbCgiIik7CisgICAgICAgIG4gPSAwOworICAgIH0gZWxzZQorICAgICAgbiArPSBt OworICAgIGlmICgqYTJidWYpIHsKKyAgICAgICAgY29ub2woIiA9PiAiKTsKKyAgICAgICAgY29u b2woYTJidWYpOworICAgIH0KKyAgICAqZmJ1ZiA9IE5VTDsgKmFidWYgPSBOVUw7ICphMmJ1ZiA9 IE5VTDsKKyAgICBjb25vbGwoIiIpOworICAgIGlmIChmc2l6ZSA+IChDS19PRkZfVCktMSkgewkJ LyogU2l6ZSAqLworICAgICAgICBzcHJpbnRmKGZidWYsIlNpemU6ICVzLCBUeXBlOiAiLGNrZnN0 b2EoZnNpemUpKTsgLyogU0FGRSAoODApICovCisgICAgICAgIGNvbm9sKGZidWYpOyAqZmJ1ZiA9 IE5VTDsKKyAgICB9IGVsc2UgY29ub2woIlNpemU6IHVua25vd24sIFR5cGU6ICIpOworICAgIGlm IChiaW5hcnkpIHsJCQkvKiBUeXBlICovCisgICAgICAgIHN3aXRjaChiaW5hcnkpIHsKKyAgICAg ICAgICAgICAgY2FzZSBYWUZUX0w6IGNvbm9sKCJsYWJlbGVkIik7IGJyZWFrOworICAgICAgICAg ICAgICBjYXNlIFhZRlRfSTogY29ub2woImltYWdlIik7IGJyZWFrOworICAgICAgICAgICAgICBj YXNlIFhZRlRfVTogY29ub2woImJpbmFyeSB1bmRlZmluZWQiKTsgYnJlYWs7CisgICAgICAgICAg ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgIGNhc2UgWFlGVF9COiBjb25vbCgiYmluYXJ5Iik7 IGJyZWFrOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyNpZmRlZiBOT0NTRVRTCisgICAgICAg IGNvbm9sKCJ0ZXh0Iik7CisjZWxzZQorICAgICAgICBjb25vbCgidGV4dCwgIik7CisgICAgICAg IGlmICh0Y2hhcnNldCA9PSBUQ19UUkFOU1AgfHwgeGZyeGxhID09IDApIHsKKyAgICAgICAgICAg IGNvbm9sKCJ0cmFuc3BhcmVudCIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYg KHdoYXQgJiBXX1NFTkQpIHsKKyAgICAgICAgICAgICAgICBjb25vbChmY3NpbmZvW2ZjaGFyc2V0 XS5rZXl3b3JkKTsKKyAgICAgICAgICAgICAgICBjb25vbCgiID0+ICIpOworICAgICAgICAgICAg ICAgIGNvbm9sKHRjc2luZm9bdGNoYXJzZXRdLmtleXdvcmQpOworICAgICAgICAgICAgfSBlbHNl IHsKKyAgICAgICAgICAgICAgICBjb25vbCh0Y3NpbmZvW3RjaGFyc2V0XS5rZXl3b3JkKTsKKyAg ICAgICAgICAgICAgICBjb25vbCgiID0+ICIpOworICAgICAgICAgICAgICAgIGNvbm9sKGZjc2lu Zm9bZmNoYXJzZXRdLmtleXdvcmQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisjZW5kaWYg LyogTk9DU0VUUyAqLworICAgIH0KKyNpZmRlZiBTVFJFQU1JTkcKKyAgICBpZiAoc3RyZWFtaW5n KQorICAgICAgY29ub2woIiwgU1RSRUFNSU5HIik7CisjZW5kaWYgLyogU1RSRUFNSU5HICovCisg ICAgY29ub2xsKCIiKTsKKworICAgIGlmIChmZGlzcGxhID09IFhZRkRfUykgeyAgICAgICAgICAg IC8qIENSVCBmaWVsZCBoZWFkaW5ncyAqLworLyoKKyAgRGVmaW5lIENLX0NQUyB0byBzaG93IGN1 cnJlbnQgdHJhbnNmZXIgcmF0ZS4KKyAgTGVhdmUgaXQgdW5kZWZpbmVkIHRvIHNob3cgZXN0aW1h dGVkIHRpbWUgcmVtYWluaW5nLgorICBFc3RpbWF0ZWQtdGltZS1yZW1haW5pbmcgY29kZSBmcm9t IEFuZHkgRnlmZSwgbm90IHRlc3RlZCBvbgorICBwYXRob2xvZ2ljYWwgY2FzZXMuCisqLworI2Rl ZmluZSBDS19DUFMKKworI2lmZGVmIENLX0NQUworICAgICAgICBjb25vbGwoIiAgICBGaWxlICAg UGVyY2VudCAgICAgICBQYWNrZXQiKTsKKyAgICAgICAgY29ub2xsKCIgICAgQnl0ZXMgIERvbmUg ICAgIENQUyAgTGVuZ3RoIik7CisjZWxzZQorICAgICAgICBjb25vbGwoIiAgICBGaWxlICAgUGVy Y2VudCAgU2VjcyBQYWNrZXQiKTsKKyAgICAgICAgY29ub2xsKCIgICAgQnl0ZXMgIERvbmUgICAg IExlZnQgTGVuZ3RoIik7CisjZW5kaWYgLyogQ0tfQ1BTICovCisgICAgICAgIG5ld2RweSA9IDA7 CisgICAgfQorICAgIGhwb3MgPSAwOworfQorCisvKgorICBzaG93cGt0KGMpCisgIGMgPSBjb21w bGV0aW9uIGNvZGU6IDAgbWVhbnMgdHJhbnNmZXIgaW4gcHJvZ3Jlc3MsIG5vbnplcm8gbWVhbnMg aXQncyBkb25lLgorICBTaG93IHRoZSBmaWxlIHRyYW5zZmVyIHByb2dyZXNzIGNvdW50ZXIgYW5k IHBlcmhhcHMgdmVyYm9zZSBwYWNrZXQgdHlwZS4KKyovCitWT0lECisjaWZkZWYgQ0tfQU5TSUMK K3Nob3dwa3QoY2hhciBjKQorI2Vsc2UKK3Nob3dwa3QoYykgY2hhciBjOworI2VuZGlmIC8qIENL X0FOU0lDICovCisvKiBzaG93cGt0ICovIHsKKworI2lmbmRlZiBHRlRJTUVSCisgICAgbG9uZyBl dDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRWxhcHNlZCB0aW1lLCBlbnRpcmUgYmF0 Y2ggICovCisjZW5kaWYgLyogR0ZUSU1FUiAqLworICAgIENLX09GRl9UIGhvd2ZhcjsJCQkvKiBI b3cgZmFyIGludG8gZmlsZSAqLworICAgIGxvbmcgcGQ7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIFBlcmNlbnQgZG9uZSwgdGhpcyBmaWxlICAgICAqLworICAgIGxvbmcgdHA7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIFRyYW5zZmVyIHJhdGUsIGVudGlyZSBiYXRjaCAqLwor ICAgIGxvbmcgcHM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBhY2tldCBzaXplLCBj dXJyZW50IHBhY2tldCAqLworICAgIENLX09GRl9UIG15dGZjOwkJCS8qIExvY2FsIGNvcHkgb2Yg Ynl0ZSBjb3VudGVyICAqLworCisjaWZkZWYgR0ZUSU1FUgorICAgIENLRkxPQVQgdG5vdzsKKyNl bmRpZiAvKiBHRlRJTUVSICovCisKKyAgICBpZiAobmV3ZHB5KSAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBQdXQgdXAgZmlsZW5hbWVzLCBldGMsICovCisgICAgICBkcHlpbml0KCk7ICAgICAg ICAgICAgICAgICAgICAgICAgLyogaWYgdGhleSdyZSBub3QgdGhlcmUgYWxyZWFkeS4gKi8KKwor ICAgIGhvd2ZhciA9IGZmYzsgICAgICAgICAgICAgICAgICAgICAgIC8qIEhvdyBmYXIgKi8KKy8q CisgIENhbGN1bGF0ZSBDUFMgcmF0ZSBldmVuIGlmIG5vdCBkaXNwbGF5aW5nIG9uIHNjcmVlbiBm b3IgdXNlIGluIGZpbGUKKyAgdHJhbnNmZXIgc3RhdGlzdGljcy4KKyovCisjaWZkZWYgR0ZUSU1F UgorICAgIHRub3cgPSBnZnRpbWVyKCk7ICAgICAgICAgICAgICAgICAgIC8qIFRpbWUgc2luY2Ug d2Ugc3RhcnRlZCAqLworICAgIHBzID0gKHdoYXQgJiBXX1JFQ1YpID8gcnBrdGwgOiBzcGt0bDsg LyogUGFja2V0IHNpemUgKi8KKyNpZmRlZiBDS19SRVNFTkQKKyAgICBpZiAod2hhdCAmIFdfU0VO RCkJCQkvKiBJbiBjYXNlIHdlIGRpZG4ndCBzdGFydCBhdCAqLworICAgICAgaG93ZmFyICs9IHNl bmRzdGFydDsgICAgICAgICAgICAgIC8qICB0aGUgYmVnaW5uaW5nLi4uICovCisgICAgZWxzZSBp ZiAod2hhdCAmIFdfUkVDVikKKyAgICAgIGhvd2ZhciArPSByc19sZW47CisjZW5kaWYgLyogQ0tf UkVTRU5EICovCisgICAgcGQgPSAtMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUGVy Y2VudCBkb25lLiAqLworICAgIGlmIChjID09IE5VTCkgeyAgICAgICAgICAgICAgICAgICAgIC8q IFN0aWxsIGdvaW5nLCBmaWd1cmUgJSBkb25lICovCisgICAgICAgIGlmICghZnNpemUpIHJldHVy bjsJCS8qIEVtcHR5IGZpbGUsIGRvbid0IGJvdGhlciAqLworICAgICAgICBwZCA9IChmc2l6ZSA+ IDk5KSA/IChob3dmYXIgLyAoZnNpemUgLyAoQ0tfT0ZGX1QpMTAwKSkgOiAwOworICAgICAgICBp ZiAocGQgPiAxMDApIHBkID0gMTAwOyAgICAgICAgIC8qIEV4cGFuc2lvbiAqLworICAgIH0KKyAg ICBpZiAoYyAhPSBOVUwpCisgICAgICBpZiAoIWN4c2VlbiAmJiAhZGlzY2FyZCAmJiAhY3pzZWVu KQorICAgICAgICBwZCA9IDEwMDsgICAgICAgICAgICAgICAgICAgICAgIC8qIEZpbGUgY29tcGxl dGUsIHNvIDEwMCUuICovCisKKyAgICBteXRmYyA9IChwZCA8IDEwMCkgPyB0ZmMgKyBmZmMgOiB0 ZmM7ICAgIC8qIENQUyAqLworICAgIHRwID0gKGxvbmcpKCh0bm93ID4gMC4wKSA/IChDS0ZMT0FU KSBteXRmYyAvIHRub3cgOiAwKTsKKyAgICBpZiAoYyAmJiAodHAgPT0gMCkpCisgICAgICB0cCA9 IGZmYzsKKworICAgIGNwcyA9IHRwOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNldCBn bG9iYWwgdmFyaWFibGUgKi8KKyAgICBpZiAoY3BzID4gcGVha2NwcyAmJiAgICAgICAgICAgICAg ICAvKiBQZWFrIHRyYW5zZmVyIHJhdGUgKi8KKyAgICAgICAgICgod2hhdCAmIFdfU0VORCAmJiBz cGFja2V0cyA+IHdzbG90cyArIDQpIHx8CisJICAoISh3aGF0ICYgV19TRU5EKSAmJiBzcGFja2V0 cyA+IDEwKSkpIHsKKyAgICAgICAgcGVha2NwcyA9IGNwczsKKyAgICB9CisKKyNlbHNlICAvKiBO b3QgR0ZUSU1FUiAqLworCisgICAgZXQgPSBndGltZXIoKTsgICAgICAgICAgICAgICAgICAgICAg LyogRWxhcHNlZCB0aW1lICAqLworICAgIHBzID0gKHdoYXQgJiBXX1JFQ1YpID8gcnBrdGwgOiBz cGt0bDsgLyogUGFja2V0IGxlbmd0aCAqLworI2lmZGVmIENLX1JFU0VORAorICAgIGlmICh3aGF0 ICYgV19TRU5EKQkJCS8qIEFuZCBpZiB3ZSBkaWRuJ3Qgc3RhcnQgYXQgKi8KKyAgICAgIGhvd2Zh ciArPSBzZW5kc3RhcnQ7ICAgICAgICAgICAgICAvKiAgdGhlIGJlZ2lubmluZy4uLiAqLworICAg IGVsc2UgaWYgKHdoYXQgJiBXX1JFQ1YpCisgICAgICBob3dmYXIgKz0gcnNfbGVuOworI2VuZGlm IC8qIENLX1JFU0VORCAqLworICAgIHBkID0gLTE7ICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIFBlcmNlbnQgZG9uZS4gKi8KKyAgICBpZiAoYyA9PSBOVUwpIHsgICAgICAgICAgICAgICAg ICAgICAvKiBTdGlsbCBnb2luZywgZmlndXJlICUgZG9uZSAqLworICAgICAgICBpZiAoZnNpemUg PT0gMEwpIHJldHVybjsgICAgICAgIC8qIEVtcHR5IGZpbGUsIGRvbid0IGJvdGhlciAqLworICAg ICAgICBwZCA9IChmc2l6ZSA+IDk5KSA/IChob3dmYXIgLyAoZnNpemUgLyAoQ0tfT0ZGX1QpMTAw KSkgOiAwOworICAgICAgICBpZiAocGQgPiAxMDApIHBkID0gMTAwOyAgICAgICAgIC8qIEV4cGFu c2lvbiAqLworICAgIH0KKyAgICBpZiAoYyAhPSBOVUwpCisgICAgICBpZiAoIWN4c2VlbiAmJiAh ZGlzY2FyZCAmJiAhY3pzZWVuKQorICAgICAgICBwZCA9IDEwMDsgICAgICAgICAgICAgICAgICAg ICAgIC8qIEZpbGUgY29tcGxldGUsIHNvIDEwMCUuICovCisKKworI2lmbmRlZiBDS19DUFMKKy8q CisgIGZzZWNzID0gdGltZSAoZnJvbSBndGltZXIpIHRoYXQgdGhpcyBmaWxlIHN0YXJ0ZWQgKHNl dCBpbiBzZmlsZSgpKS4KKyAgUmF0ZSBzbyBmYXIgaXMgZmZjIC8gKGV0IC0gZnNlY3MpLCAgZXN0 aW1hdGVkIHRpbWUgZm9yIHJlbWFpbmluZyBieXRlcworICBpcyAoZnNpemUgLSBmZmMpIC8gKGZm YyAvIChldCAtIGZzZWNzKSkuCisqLworICAgIHRwID0gKGhvd2ZhciA+IDApID8gKGZzaXplIC0g aG93ZmFyKSAqIChldCAtIGZzZWNzKSAvIGhvd2ZhciA6IDA7CisjZW5kaWYgLyogQ0tfQ1BTICov CisKKyNpZmRlZiBDS19DUFMKKyAgICBteXRmYyA9IChwZCA8IDEwMCkgPyB0ZmMgKyBmZmMgOiB0 ZmM7CisgICAgdHAgPSAoZXQgPiAwKSA/IG15dGZjIC8gZXQgOiAwOwkvKiBUcmFuc2ZlciByYXRl ICovCisgICAgaWYgKGMgJiYgKHRwID09IDApKQkJCS8qIFdhdGNoIG91dCBmb3Igc3Vic2Vjb25k IHRpbWVzICovCisgICAgICAgIHRwID0gZmZjOworCisgICAgY3BzID0gdHA7CQkJCS8qIFNldCBn bG9iYWwgdmFyaWFibGUgKi8KKyAgICBpZiAoY3BzID4gcGVha2NwcyAmJiAgICAgICAgICAgICAg ICAvKiBQZWFrIHRyYW5zZmVyIHJhdGUgKi8KKyAgICAgICAgICgod2hhdCAmIFdfU0VORCAmJiBz cGFja2V0cyA+IHdzbG90cyArIDQpIHx8CisJICAoISh3aGF0ICYgV19TRU5EKSAmJiBzcGFja2V0 cyA+IDEwKSkpIHsKKyAgICAgICAgcGVha2NwcyA9IGNwczsKKyAgICB9CisjZW5kaWYgLyogQ0tf Q1BTICovCisKKyNlbmRpZiAvKiBHRlRJTUVSICovCisKKyAgICBpZiAoZmRpc3BsYSA9PSBYWUZE X1MpIHsgICAgICAgICAgICAvKiBDUlQgZGlzcGxheSAqLworICAgICAgICBjaGFyIGJ1ZmZlclsx MjhdOworCS8qIFRoZXNlIHNwcmludGZzIHNob3VsZCBiZSBzYWZlIHVudGlsIHdlIGhhdmUgMzIt ZGlnaXQgbnVtYmVycyAqLworCisgICAgICAgIGlmIChwZCA+IC0xTCkKKyAgICAgICAgICBzcHJp bnRmKGJ1ZmZlciwgIiVjJTlzJTVsZCUlJThsZCU4bGQgIiwgQ1IsY2tmc3RvYShob3dmYXIpLHBk LHRwLHBzKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIHNwcmludGYoYnVmZmVyLCAiJWMlOXMg ICAgICAlOGxkJThsZCAiLCBDUixja2ZzdG9hKGhvd2ZhciksdHAscHMpOworICAgICAgICBjb25v bChidWZmZXIpOworICAgICAgICBocG9zID0gMzE7CisgICAgfSBlbHNlIGlmIChmZGlzcGxhID09 IFhZRkRfUikgeyAgICAgLyogU0VSSUFMICovCisgICAgICAgIGxvbmcgaSwgazsKKyAgICAgICAg aWYgKGhvd2ZhciAtIG9sZGZmYyA8IDEwMjQpICAgICAvKiBVcGRhdGUgZGlzcGxheSBldmVyeSAx SyAqLworICAgICAgICAgIHJldHVybjsKKyAgICAgICAgb2xkZmZjID0gaG93ZmFyOyAgICAgICAg ICAgICAgICAvKiBUaW1lIGZvciBuZXcgZGlzcGxheSAqLworICAgICAgICBrID0gKGhvd2ZhciAv IDEwMjRMKSAtIGRvdHM7ICAgIC8qIEhvdyBtYW55IEsgc28gZmFyICovCisgICAgICAgIGZvciAo aSA9IDBMOyBpIDwgazsgaSsrKSB7CisgICAgICAgICAgICBpZiAoaHBvcysrID4gKGNtZF9jb2xz IC0gMykpIHsgLyogVGltZSB0byB3cmFwPyAqLworICAgICAgICAgICAgICAgIGNvbm9sbCgiIik7 CisgICAgICAgICAgICAgICAgaHBvcyA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBj b25vYygnLicpOyAgICAgICAgICAgICAgICAgLyogUHJpbnQgYSBkb3QgZm9yIHRoaXMgSyAqLwor ICAgICAgICAgICAgZG90cysrOyAgICAgICAgICAgICAgICAgICAgIC8qIENvdW50IGl0ICovCisg ICAgICAgIH0KKyAgICB9Cit9CisKKworLyogIEMgSyBTIEMgUiBFIEUgTiAgLS0gIFNjcmVlbiBk aXNwbGF5IGZ1bmN0aW9uICAqLworCisvKgorICBja3NjcmVlbihmLGMsbixzKQorICAgIGYgLSBh cmd1bWVudCBkZXNjcmlwdG9yCisgICAgYyAtIGEgY2hhcmFjdGVyIG9yIHNtYWxsIGludGVnZXIK KyAgICBuIC0gYSBsb25nIGludGVnZXIKKyAgICBzIC0gYSBzdHJpbmcuCisKKyAgYW5kIGdsb2Jh bCBmZGlzcGxhID0gU0VUIEZJTEUgRElTUExBWSB2YWx1ZToKKworICAgIFhZRkRfTiA9IE5PTkUK KyAgICBYWUZEX1IgPSBTRVJJQUw6ICAgICBEb3RzLCBldGMsIHdvcmtzIG9uIGFueSB0ZXJtaW5h bCwgZXZlbiBoYXJkY29weS4KKyAgICBYWUZEX1MgPSBDUlQ6ICAgICAgICBXb3JrcyBvbiBhbnkg Q1JULCB3cml0ZXMgb3ZlciBjdXJyZW50IGxpbmUuCisgICAgWFlGRF9DID0gRlVMTFNDUkVFTjog UmVxdWlyZXMgdGVybWluYWwtZGVwZW5kZW50IHNjcmVlbiBjb250cm9sLgorICAgIFhZRkRfQiA9 IEJSSUVGOiAgICAgIExpa2UgU0VSSUFMIGJ1dCBvbmx5IGZpbGVuYW1lICYgY29tcGxldGlvbiBz dGF0dXMuCisgICAgWFlGRF9HID0gR1VJOyAgICAgICAgV2luZG93cyBHVUksIHNhbWUgYmVoYXZp b3IgYXMgRlVMTFNDUkVFTgorKi8KK1ZPSUQKKyNpZmRlZiBDS19BTlNJQworY2tzY3JlZW4oaW50 IGYsIGNoYXIgYyxDS19PRkZfVCBuLGNoYXIgKnMpCisjZWxzZQorY2tzY3JlZW4oZixjLG4scykg aW50IGY7IGNoYXIgYzsgQ0tfT0ZGX1QgbjsgY2hhciAqczsKKyNlbmRpZiAvKiBDS19BTlNJQyAq LworLyogc2NyZWVuICovIHsKKyAgICBjaGFyIGJ1Zls4MF07CisgICAgaW50IGxlbjsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogTGVuZ3RoIG9mIHN0cmluZyAqLworI2lmZGVmIFVOSVgK KyNpZm5kZWYgTk9KQworICAgIGludCBvYmc7CitfUFJPVE9UWVAoIFZPSUQgY29uYmd0LCAoaW50 KSApOworI2VuZGlmIC8qIE5PSkMgKi8KKyNlbmRpZiAvKiBVTklYICovCisgICAgaW50IGZ0cCA9 IDA7CisKKyAgICBmdHAgPSAod2hhdCAmIFdfRlRQKSA/IDEgOiAwOwkvKiBGVFAgb3IgS2VybWl0 PyAqLworCisgICAgaWYgKCFsb2NhbCAmJiAhZnRwKQkJCS8qIEluIHJlbW90ZSBtb2RlIC0gZG9u J3QgZG8gdGhpcyAqLworICAgICAgcmV0dXJuOworCisgICAgaWYgKCFzKSBzID0gIiI7CisKKyAg ICBpZiAoIWZ4ZF9pbml0ZWQpICAgICAgICAgICAgICAgICAgICAvKiBJbml0aWFsaXplIGlmIG5l Y2Vzc2FyeSAqLworICAgICAgZnhkaW5pdChmZGlzcGxhKTsKKworI2lmZGVmIFVOSVgKKyNpZm5k ZWYgTk9KQworICAgIG9iZyA9IGJhY2tncmQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIFByZXZp b3VzIGJhY2tncm91bmQgc3RhdHVzICovCisgICAgY29uYmd0KDEpOyAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogU2VlIGlmIHJ1bm5pbmcgaW4gYmFja2dyb3VuZCAqLworICAgIGlmICghYmFj a2dyZCAmJiBvYmcpIHsgICAgICAgICAgICAgIC8qIEp1c3QgY2FtZSBpbnRvIGZvcmVncm91bmQ/ ICovCisgICAgICAgIGNvbmNiKChjaGFyKWVzY2FwZSk7ICAgICAgICAgICAgLyogUHV0IGNvbnNv bGUgYmFjayBpbiBDQlJFQUsgbW9kZSAqLworICAgICAgICBzZXRpbnQoKTsgICAgICAgICAgICAg ICAgICAgICAgIC8qIFJlc3RvcmUgaW50ZXJydXB0cyAqLworICAgIH0KKyNlbmRpZiAvKiBOT0pD ICovCisjZW5kaWYgLyogVU5JWCAqLworCisgICAgaWYgKChmICE9IFNDUl9XTSkgJiYgKGYgIT0g U0NSX0VNKSkgLyogQWx3YXlzIHVwZGF0ZSB3YXJuaW5ncyAmIGVycm9ycyAqLworICAgICAgaWYg KCFkaXNwbGEgfHwKKyAgICAgICAgICAoYmFja2dyZCAmJiBiZ3NldCkgfHwKKyAgICAgICAgICBm ZGlzcGxhID09IFhZRkRfTiB8fAorICAgICAgICAgIChzZXJ2ZXIgJiYgIXNydmRpcykKKyAgICAg ICAgICApCisgICAgICAgIHJldHVybjsKKworI2lmZGVmIFZNUworICAgIGlmIChmID09IFNDUl9G TikgICAgICAgICAgICAgICAgICAgIC8qIFZNUyAtIHNob3J0ZW4gdGhlIG5hbWUgKi8KKyAgICAg IHMgPSB6cmVsbmFtZShzLHpndGRpcigpKTsKKyNlbmRpZiAvKiBWTVMgKi8KKworICAgIGlmIChk ZXN0ID09IERFU1RfUykgICAgICAgICAgICAgICAgIC8qIFNFVCBERVNUSU5BVElPTiBTQ1JFRU4g Ki8KKyAgICAgIHJldHVybjsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgd291bGQgaW50 ZXJmZXJlLi4uICovCisKKyNpZmRlZiBLVUkKKyAgICBpZiAoZmRpc3BsYSA9PSBYWUZEX0cpIHsg ICAgICAgICAgICAvKiBJZiBndWkgZGlzcGxheSBzZWxlY3RlZCAqLworICAgICAgICBzY3JlZW5n KGYsYyxuLHMpOyAgICAgICAgICAgICAgIC8qIGNhbGwgdGhlIGd1aSB2ZXJzaW9uICovCisgICAg ICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYgLyogS1VJICovCisjaWZkZWYgQ0tfQ1VSU0VTCisg ICAgaWYgKGZkaXNwbGEgPT0gWFlGRF9DKSB7ICAgICAgICAgICAgLyogSWYgZnVsbHNjcmVlbiBk aXNwbGF5IHNlbGVjdGVkICovCisgICAgICAgIHNjcmVlbmMoZixjLG4scyk7ICAgICAgICAgICAg ICAgLyogY2FsbCB0aGUgZnVsbHNjcmVlbiB2ZXJzaW9uICovCisgICAgICAgIHJldHVybjsKKyAg ICB9CisjZW5kaWYgLyogQ0tfQ1VSU0VTICovCisKKyAgICBsZW4gPSAoaW50KXN0cmxlbihzKTsg ICAgICAgICAgICAgICAvKiBMZW5ndGggb2Ygc3RyaW5nICovCisKKyAgICBzd2l0Y2ggKGYpIHsg ICAgICAgICAgICAgICAgICAgICAgICAvKiBIYW5kbGUgb3VyIGZ1bmN0aW9uIGNvZGUgKi8KKyAg ICAgIGNhc2UgU0NSX0ZOOiAgICAgICAgICAgICAgICAgICAgICAvKiBGaWxlbmFtZSAqLworICAg ICAgICBpZiAoZmRpc3BsYSA9PSBYWUZEX0IpIHsKKyNpZmRlZiBORVdGVFAKKwkgICAgaWYgKGZ0 cCkKKwkgICAgICBwcmludGYoIiAlcyAlcyIsIHdoYXQgJiBXX1NFTkQgPyAiUFVUIiA6ICJHRVQi LCBzKTsKKwkgICAgZWxzZQorI2VuZGlmIC8qIE5FV0ZUUCAqLworCSAgICAgIHByaW50ZigiICVz ICVzIiwgd2hhdCAmIFdfU0VORCA/ICJTRU5EIiA6ICJSRUNWIiwgcyk7CisjaWZkZWYgVU5JWAor ICAgICAgICAgICAgZmZsdXNoKHN0ZG91dCk7CisjZW5kaWYgLyogVU5JWCAqLworICAgICAgICAg ICAgcmV0dXJuOworICAgICAgICB9CisjaWZkZWYgTUFDCisgICAgICAgIGNvbm9sbCgiIik7IGNv bm9sKHMpOyBjb25vYyhTUCk7IGhwb3MgPSBsZW4gKyAxOworI2Vsc2UKKyAgICAgICAgY2tzdHJu Y3B5KGZidWYscyw4MCk7CisgICAgICAgIGFidWZbMF0gPSBhMmJ1ZlswXSA9IE5VTDsKKyAgICAg ICAgbmV3ZHB5ID0gMTsgICAgICAgICAgICAgICAgICAgICAvKiBOZXcgZmlsZSBzbyByZWZyZXNo IGRpc3BsYXkgKi8KKyNlbmRpZiAvKiBNQUMgKi8KKyAgICAgICAgcmV0dXJuOworCisgICAgICBj YXNlIFNDUl9BTjogICAgICAgICAgICAgICAgICAgICAgLyogQXMtbmFtZSAqLworICAgICAgICBp ZiAoZmRpc3BsYSA9PSBYWUZEX0IpIHsKKyNpZmRlZiBDT01NRU5UCisgICAgICAgICAgICBwcmlu dGYoIihhcyAlcykgIixzKTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgICAgICAgICByZXR1 cm47CisgICAgICAgIH0KKyNpZmRlZiBNQUMKKyAgICAgICAgaWYgKGhwb3MgKyBsZW4gPiA3NSkg eyBjb25vbGwoIiIpOyBocG9zID0gMDsgfQorICAgICAgICBjb25vbCgiPT4gIik7IGNvbm9sKHMp OworICAgICAgICBpZiAoKGhwb3MgKz0gKGxlbiArIDMpKSA+IDc4KSB7IGNvbm9sbCgiIik7IGhw b3MgPSAwOyB9CisjZWxzZQorICAgICAgICBpZiAoYWJ1ZlswXSkgeworICAgICAgICAgICAgY2tz dHJuY3B5KGEyYnVmLHMsODApOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgY2tzdHJu Y3B5KGFidWYscyw4MCk7CisgICAgICAgIH0KKyNlbmRpZiAvKiBNQUMgKi8KKyAgICAgICAgcmV0 dXJuOworCisgICAgICBjYXNlIFNDUl9GUzogICAgICAgICAgICAgICAgICAgICAgLyogRmlsZS1z aXplICovCisgICAgICAgIGlmIChmZGlzcGxhID09IFhZRkRfQikgeworICAgICAgICAgICAgcHJp bnRmKCIgKCVzKSAoJXMgYnl0ZSVzKSIsCisjaWZkZWYgTk9JQ1AKKyAgICAgICAgICAgICAgICAg ICAoYmluYXJ5ID8gImJpbmFyeSIgOiAidGV4dCIpCisjZWxzZQorICAgICAgICAgICAgICAgICAg IGdmbW9kZShiaW5hcnksMCkKKyNlbmRpZiAvKiBOT0lDUCAqLworICAgICAgICAgICAgICAgICAg ICwgY2tmc3RvYShuKSwgbiA9PSAxID8gIiIgOiAicyIpOworI2lmZGVmIFVOSVgKKyAgICAgICAg ICAgIGZmbHVzaChzdGRvdXQpOworI2VuZGlmIC8qIFVOSVggKi8KKyAgICAgICAgICAgIHJldHVy bjsKKyAgICAgICAgfQorI2lmZGVmIE1BQworICAgICAgICBzcHJpbnRmKGJ1ZiwiLCBTaXplOiAl cyIsY2tmc3RvYShuKSk7ICBjb25vbGwoYnVmKTsgIGhwb3MgPSAwOworI2VuZGlmIC8qIE1BQyAq LworICAgICAgICByZXR1cm47CisKKyAgICAgIGNhc2UgU0NSX1hEOiAgICAgICAgICAgICAgICAg ICAgICAvKiBYLXBhY2tldCBkYXRhICovCisgICAgICAgIGlmIChmZGlzcGxhID09IFhZRkRfQikK KyAgICAgICAgICByZXR1cm47CisjaWZkZWYgTUFDCisgICAgICAgIGNvbm9sbCgiIik7IGNvbm9s bChzKTsgaHBvcyA9IDA7CisjZWxzZQorICAgICAgICBja3N0cm5jcHkoZmJ1ZixzLDgwKTsKKyAg ICAgICAgYWJ1ZlswXSA9IGEyYnVmWzBdID0gTlVMOworI2VuZGlmIC8qIE1BQyAqLworICAgICAg ICByZXR1cm47CisKKyAgICAgIGNhc2UgU0NSX1NUOiAgICAgICAgICAgICAgICAgICAgICAvKiBG aWxlIHN0YXR1cyAqLworICAgICAgICBzd2l0Y2ggKGMpIHsKKyAgICAgICAgICBjYXNlIFNUX09L OiAgICAgICAgICAgICAgICAgICAvKiBUcmFuc2ZlcnJlZCBPSyAqLworICAgICAgICAgICAgc2hv d3BrdCgnWicpOyAgICAgICAgICAgICAgIC8qIFVwZGF0ZSBudW1iZXJzIG9uZSBsYXN0IHRpbWUg Ki8KKyAgICAgICAgICAgIGlmIChmZGlzcGxhID09IFhZRkRfQikgeworI2lmZGVmIEdGVElNRVIK KwkJaWYgKGZweGZzZWNzKQorCQkgIHByaW50ZigiOiBPSyAoJTAuM2Ygc2VjLCAlbGQgY3BzKSIs ZnB4ZnNlY3MsCisJCQkgKGxvbmcpKChDS0ZMT0FUKWZmYyAvIGZweGZzZWNzKSk7CisjZWxzZQor CQlpZiAoeGZzZWNzKQorCQkgIHByaW50ZigiOiBPSyAoJWQgc2VjLCAlbGQgY3BzKSIseGZzZWNz LGZmYy94ZnNlY3MpOworI2VuZGlmIC8qIEdGVElNRVIgKi8KKwkJcHJpbnRmKCJcbiIpOworICAg ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgoaHBv cyArPSA1KSA+IDc4KSBjb25vbGwoIiIpOyAvKiBXcmFwIHNjcmVlbiBsaW5lLiAqLworICAgICAg ICAgICAgY29ub2xsKCIgW09LXSIpOyBocG9zID0gMDsgIC8qIFByaW50IE9LIG1lc3NhZ2UuICov CisgICAgICAgICAgICBpZiAoZmRpc3BsYSA9PSBYWUZEX1MpIHsgICAgLyogV2UgZGlkbid0IHNo b3cgWiBwYWNrZXQgd2hlbiAqLworICAgICAgICAgICAgICAgIGNvbm9jKCdaJyk7ICAgICAgICAg ICAgIC8qIGl0IGNhbWUsIHNvIHNob3cgaXQgbm93LiAqLworICAgICAgICAgICAgICAgIGhwb3Mg PSAxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgY2Fz ZSBTVF9ESVNDOiAgICAgICAgICAgICAgICAgLyogIERpc2NhcmRlZCAqLworICAgICAgICAgICAg aWYgKGZkaXNwbGEgPT0gWFlGRF9CKSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCI6IERJU0NB UkRFRFxuIik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAg ICAgICAgaWYgKChocG9zICs9IDEyKSA+IDc4KSBjb25vbGwoIiIpOworICAgICAgICAgICAgY29u b2xsKCIgW2Rpc2NhcmRlZF0iKTsgaHBvcyA9IDA7CisgICAgICAgICAgICByZXR1cm47CisKKyAg ICAgICAgICBjYXNlIFNUX0lOVDogICAgICAgICAgICAgICAgICAvKiAgSW50ZXJydXB0ZWQgKi8K KyAgICAgICAgICAgIGlmIChmZGlzcGxhID09IFhZRkRfQikgeworICAgICAgICAgICAgICAgIHBy aW50ZigiOiBJTlRFUlJVUFRFRFxuIik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg ICAgICAgfQorICAgICAgICAgICAgaWYgKChocG9zICs9IDE0KSA+IDc4KSBjb25vbGwoIiIpOwor ICAgICAgICAgICAgY29ub2xsKCIgW2ludGVycnVwdGVkXSIpOyBocG9zID0gMDsKKyAgICAgICAg ICAgIHJldHVybjsKKworCSAgY2FzZSBTVF9TSU06CisgICAgICAgICAgICBpZiAoZmRpc3BsYSA9 PSBYWUZEX0IpIHsKKwkJaWYgKG4gPT0gU0tQX1hOWCkKKwkJICBwcmludGYoIjogV09VTEQgQkUg VFJBTlNGRVJSRUQgKE5ldyBmaWxlKVxuIik7CisJCWVsc2UgaWYgKG4gPT0gU0tQX1hVUCkKKwkJ ICBwcmludGYoIjogV09VTEQgQkUgVFJBTlNGRVJSRUQgKFJlbW90ZSBmaWxlIG9sZGVyKVxuIik7 CisJCWVsc2UgaWYgKG4gPT0gU0tQX1NJTSkKKwkJICBwcmludGYoIjogV09VTEQgQkUgVFJBTlNG RVJSRURcbiIpOworCQllbHNlIGlmIChuID4gMCAmJiBuIDwgbnNrcmVhc29uKQorCQkgIHByaW50 ZigiOiBTS0lQUEVEICglcylcbiIsc2tyZWFzb25bbl0pOworCQllbHNlCisJCSAgcHJpbnRmKCI6 IFNLSVBQRURcbiIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0gZWxz ZSBpZiAoZmRpc3BsYSA9PSBYWUZEX1MpIHsKKyAgICAgICAgICAgICAgICBpZiAoZmRpc3BsYSA9 PSBYWUZEX1MgJiYgZmJ1ZlswXSkgeyAvKiBDUlQgZGlzcGxheSAqLworICAgICAgICAgICAgICAg ICAgICBjb25vbGwoIiIpOyAgICAgICAgIC8qIE5ldyBsaW5lICovCisgICAgICAgICAgICAgICAg ICAgIGlmICh3aGF0ICYgV19TRU5EKSBjb25vbCgiV291bGQgU2VuZDogIik7IC8qIEFjdGlvbiAq LworICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh3aGF0ICYgV19SRUNWKSBjb25vbCgiV291 bGQgUmVjZWl2ZTogIik7CisgICAgICAgICAgICAgICAgICAgIGNvbm9sKGZidWYpOworICAgICAg ICAgICAgICAgICAgICBpZiAoKmFidWYpIGNvbm9sKCIgPT4gIik7IGNvbm9sKGFidWYpOyAvKiBO YW1lcyAqLworICAgICAgICAgICAgICAgICAgICBpZiAoKmEyYnVmKSBjb25vbCgiID0+ICIpOyBj b25vbChhMmJ1Zik7IC8qIE5hbWVzICovCisgICAgICAgICAgICAgICAgICAgICpmYnVmID0gTlVM OyAqYWJ1ZiA9IE5VTDsgKmEyYnVmID0gTlVMOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgICAgICBjb25vbGwoIiBbc2ltdWxhdGVkXSIpOworICAgICAgICAgICAgICAgIHJldHVybjsK KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgoaHBvcyArPSAxMCkgPiA3OCkgY29ub2xs KCIiKTsKKyAgICAgICAgICAgIGNvbm9sKCIgW3NpbXVsYXRlZF0iKTsgaHBvcyA9IDA7CisgICAg ICAgICAgICByZXR1cm47CisKKyAgICAgICAgICBjYXNlIFNUX1NLSVA6ICAgICAgICAgICAgICAg ICAvKiAgU2tpcHBlZCAqLworICAgICAgICAgICAgaWYgKGZkaXNwbGEgPT0gWFlGRF9CKSB7CisJ CWlmIChuID09IFNLUF9YTlgpCisJCSAgcHJpbnRmKCI6IFdPVUxEIEJFIFRSQU5TRkVSUkVEIChO ZXcgZmlsZSlcbiIpOworCQllbHNlIGlmIChuID09IFNLUF9YVVApCisJCSAgcHJpbnRmKCI6IFdP VUxEIEJFIFRSQU5TRkVSUkVEIChSZW1vdGUgZmlsZSBvbGRlcilcbiIpOworCQllbHNlIGlmIChu ID09IFNLUF9TSU0pCisJCSAgcHJpbnRmKCI6IFdPVUxEIEJFIFRSQU5TRkVSUkVEXG4iKTsKKwkJ ZWxzZSBpZiAobiA+IDAgJiYgbiA8IG5za3JlYXNvbikKKwkJICBwcmludGYoIjogU0tJUFBFRCAo JXMpXG4iLHNrcmVhc29uW25dKTsKKwkJZWxzZQorCQkgIHByaW50ZigiOiBTS0lQUEVEXG4iKTsK KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9IGVsc2UgaWYgKGZkaXNwbGEg PT0gWFlGRF9TKSB7CisgICAgICAgICAgICAgICAgaWYgKGZkaXNwbGEgPT0gWFlGRF9TICYmIGZi dWZbMF0pIHsgLyogQ1JUIGRpc3BsYXkgKi8KKyAgICAgICAgICAgICAgICAgICAgY29ub2xsKCIi KTsgICAgICAgICAvKiBOZXcgbGluZSAqLworICAgICAgICAgICAgICAgICAgICBpZiAod2hhdCAm IFdfU0VORCkgY29ub2woIlNlbmRpbmc6ICIpOyAvKiBBY3Rpb24gKi8KKyAgICAgICAgICAgICAg ICAgICAgZWxzZSBpZiAod2hhdCAmIFdfUkVDVikgY29ub2woIlJlY2VpdmluZzogIik7CisgICAg ICAgICAgICAgICAgICAgIGNvbm9sKGZidWYpOworICAgICAgICAgICAgICAgICAgICBpZiAoKmFi dWYpIGNvbm9sKCIgPT4gIik7IGNvbm9sKGFidWYpOyAvKiBOYW1lcyAqLworICAgICAgICAgICAg ICAgICAgICBpZiAoKmEyYnVmKSBjb25vbCgiID0+ICIpOyBjb25vbChhMmJ1Zik7IC8qIE5hbWVz ICovCisgICAgICAgICAgICAgICAgICAgICpmYnVmID0gTlVMOyAqYWJ1ZiA9IE5VTDsgKmEyYnVm ID0gTlVMOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjb25vbGwoIiBbc2tp cHBlZF0iKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAg ICAgICBpZiAoKGhwb3MgKz0gMTApID4gNzgpIGNvbm9sbCgiIik7CisJICAgIGNvbm9sKCIgIik7 IGNvbm9sKGZidWYpOworICAgICAgICAgICAgY29ub2xsKCIgW3NraXBwZWRdIik7IGhwb3MgPSAw OworICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgY2FzZSBTVF9FUlI6ICAgICAgICAg ICAgICAgICAgLyogRXJyb3IgKi8KKyAgICAgICAgICAgIGlmIChmZGlzcGxhID09IFhZRkRfQikg eworICAgICAgICAgICAgICAgIHByaW50ZigiOiBFUlJPUjogJXNcbiIscyk7CisgICAgICAgICAg ICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY29ub2xsKCIiKTsKKyAg ICAgICAgICAgIGNvbm9sKCJFcnJvcjogIik7IGNvbm9sbChzKTsgaHBvcyA9IDA7CisgICAgICAg ICAgICByZXR1cm47CisKKyAgICAgICAgICBjYXNlIFNUX01TRzogICAgICAgICAgICAgICAgICAv KiBNZXNzYWdlICovCisjaWZkZWYgTkVXRlRQCisgICAgICAgICAgICBpZiAoZmRpc3BsYSA9PSBY WUZEX0IpIHsKKyAgICAgICAgICAgICAgICBpZiAoZnRwICYmIGZ0cF9kZWIpCisJCSAgcHJpbnRm KCI6IE1FU1NBR0U6ICVzXG4iLHMpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg ICAgIH0KKyNlbmRpZiAvKiBORVdGVFAgKi8KKyAgICAgICAgICAgIGNvbm9sbCgiIik7CisgICAg ICAgICAgICBjb25vbCgiTWVzc2FnZTogIik7CisgICAgICAgICAgICBjb25vbGwocyk7CisgICAg ICAgICAgICBocG9zID0gMDsKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgIGNhc2Ug U1RfUkVGVTogICAgICAgICAgICAgICAgIC8qIFJlZnVzZWQgKi8KKyAgICAgICAgICAgIGlmIChm ZGlzcGxhID09IFhZRkRfQikgeworICAgICAgICAgICAgICAgIHByaW50ZigiOiBSRUZVU0VEXG4i KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9IGVsc2UgaWYgKGZkaXNw bGEgPT0gWFlGRF9TKSB7CisgICAgICAgICAgICAgICAgaWYgKGZkaXNwbGEgPT0gWFlGRF9TICYm IGZidWZbMF0pIHsgLyogQ1JUIGRpc3BsYXkgKi8KKyAgICAgICAgICAgICAgICAgICAgY29ub2xs KCIiKTsgICAgICAgICAvKiBOZXcgbGluZSAqLworICAgICAgICAgICAgICAgICAgICBpZiAod2hh dCAmIFdfU0VORCkgY29ub2woIlNlbmRpbmc6ICIpOyAvKiBBY3Rpb24gKi8KKyAgICAgICAgICAg ICAgICAgICAgZWxzZSBpZiAod2hhdCAmIFdfUkVDVikgY29ub2woIlJlY2VpdmluZzogIik7Cisg ICAgICAgICAgICAgICAgICAgIGNvbm9sKGZidWYpOworICAgICAgICAgICAgICAgICAgICBpZiAo KmFidWYpIGNvbm9sKCIgPT4gIik7IGNvbm9sKGFidWYpOyAgICAgIC8qIE5hbWVzICovCisgICAg ICAgICAgICAgICAgICAgIGlmICgqYTJidWYpIGNvbm9sKCIgPT4gIik7IGNvbm9sKGEyYnVmKTsg ICAgLyogTmFtZXMgKi8KKyAgICAgICAgICAgICAgICAgICAgKmZidWYgPSBOVUw7ICphYnVmID0g TlVMOyAqYTJidWYgPSBOVUw7CisgICAgICAgICAgICAgICAgICAgIGNvbm9sbCgiIik7CisgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNvbm9sKCJSZWZ1c2VkOiAiKTsgY29ub2xs KHMpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg IGNvbm9sbCgiIik7CisgICAgICAgICAgICBjb25vbCgiUmVmdXNlZDogIik7IGNvbm9sbChzKTsg aHBvcyA9IDA7CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICBjYXNlIFNUX0lOQzog ICAgICAgICAgICAgICAgICAvKiBJbmNvbXBsZXRlICovCisgICAgICAgICAgICBpZiAoZmRpc3Bs YSA9PSBYWUZEX0IpIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIjogSU5DT01QTEVURVxuIik7 CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg KChocG9zICs9IDEyKSA+IDc4KSBjb25vbGwoIiIpOworICAgICAgICAgICAgY29ub2xsKCIgW2lu Y29tcGxldGVdIik7IGhwb3MgPSAwOworICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAg ZGVmYXVsdDoKKyAgICAgICAgICAgIGNvbm9sbCgiKioqIHNjcmVlbigpIGNhbGxlZCB3aXRoIGJh ZCBzdGF0dXMgKioqIik7CisgICAgICAgICAgICBocG9zID0gMDsKKyAgICAgICAgICAgIHJldHVy bjsKKyAgICAgICAgfQorCisjaWZkZWYgTUFDCisgICAgICBjYXNlIFNDUl9QTjogICAgICAgICAg ICAgICAgICAgICAgLyogUGFja2V0IG51bWJlciAqLworICAgICAgICBpZiAoZmRpc3BsYSA9PSBY WUZEX0IpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCWNrbWFrbXNnKGJ1Ziw4 MCxzLCI6ICIsY2tsdG9hKG4pLE5VTEwpOworICAgICAgICBjb25vbChidWYpOyBocG9zICs9IChp bnQpc3RybGVuKGJ1Zik7IHJldHVybjsKKyNlbmRpZiAvKiBNQUMgKi8KKworICAgICAgY2FzZSBT Q1JfUFQ6ICAgICAgICAgICAgICAgICAgICAgIC8qIFBhY2tldCB0eXBlIG9yIHBzZXVkb3R5cGUg Ki8KKyAgICAgICAgaWYgKGZkaXNwbGEgPT0gWFlGRF9CKQorICAgICAgICAgIHJldHVybjsKKyAg ICAgICAgaWYgKGMgPT0gJ1knKSByZXR1cm47ICAgICAgICAgICAvKiBEb24ndCBib3RoZXIgd2l0 aCBBQ0tzICovCisgICAgICAgIGlmIChjID09ICdEJykgeyAgICAgICAgICAgICAgICAgLyogSW4g ZGF0YSB0cmFuc2ZlciBwaGFzZSwgKi8KKyAgICAgICAgICAgIHNob3dwa3QoTlVMKTsgICAgICAg ICAgICAgICAvKiBzaG93IHByb2dyZXNzLiAqLworICAgICAgICAgICAgcmV0dXJuOworICAgICAg ICB9CisjaWZuZGVmIEFNSUdBCisgICAgICAgIGlmIChocG9zKysgPiA3NykgeyAgICAgICAgICAg ICAgLyogSWYgbmVhciByaWdodCBtYXJnaW4sICovCisgICAgICAgICAgICBjb25vbGwoIiIpOyAg ICAgICAgICAgICAgICAgLyogU3RhcnQgbmV3IGxpbmUgKi8KKyAgICAgICAgICAgIGhwb3MgPSAw OyAgICAgICAgICAgICAgICAgICAvKiBhbmQgcmVzZXQgY291bnRlci4gKi8KKyAgICAgICAgfQor I2VuZGlmIC8qIEFNSUdBICovCisgICAgICAgIGlmIChjID09ICdaJyAmJiBmZGlzcGxhID09IFhZ RkRfUykKKyAgICAgICAgICByZXR1cm47CisgICAgICAgIGVsc2UKKyAgICAgICAgICBjb25vYyhj KTsgICAgICAgICAgICAgICAgICAgICAvKiBEaXNwbGF5IHRoZSBwYWNrZXQgdHlwZS4gKi8KKyNp ZmRlZiBBTUlHQQorICAgICAgICBpZiAoYyA9PSAnRycpIGNvbm9sbCgiIik7ICAgICAgIC8qIE5l dyBsaW5lIGFmdGVyIEcgcGFja2V0cyAqLworI2VuZGlmIC8qIEFNSUdBICovCisgICAgICAgIHJl dHVybjsKKworICAgICAgY2FzZSBTQ1JfVEM6ICAgICAgICAgICAgICAgICAgICAgIC8qIFRyYW5z YWN0aW9uIGNvbXBsZXRlICovCisgICAgICAgIGlmICh4ZnJiZWwpIGJsZWVwKEJQX05PVEUpOwor ICAgICAgICBpZiAoZmRpc3BsYSA9PSBYWUZEX0IpIHsgICAgICAgIC8qIEJyaWVmIGRpc3BsYXku Li4gKi8KKyAgICAgICAgICAgIGlmIChmaWxjbnQgPiAxKSB7CisgICAgICAgICAgICAgICAgbG9u ZyBmeDsKKyAgICAgICAgICAgICAgICBmeCA9IGZpbGNudCAtIGZpbHJlajsKKyAgICAgICAgICAg ICAgICBwcmludGYoIiBTVU1NQVJZOiAlbGQgZmlsZSVzIiwgZngsICgoZnggPT0gMSkgPyAiIiA6 ICJzIikpOworICAgICAgICAgICAgICAgIHByaW50ZigiLCAlcyBieXRlJXMiLCBja2ZzdG9hKHRm YyksICgodGZjID09IDEpID8gIiIgOiAicyIpKTsKKyNpZmRlZiBHRlRJTUVSCisgICAgICAgICAg ICAgICAgcHJpbnRmKCIsICUwLjNmIHNlYywgJWxkIGNwcyIsIGZwdHNlY3MsIHRmY3BzKTsKKyNl bHNlCisgICAgICAgICAgICAgICAgcHJpbnRmKCIsICVsZCBzZWMsICVsZCBjcHMiLCB0c2Vjcywg dGZjcHMpOworI2VuZGlmIC8qIEdGVElNRVIgKi8KKyAgICAgICAgICAgICAgICBwcmludGYoIi5c biIpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgY29ub2xs KCIiKTsKKyAgICAgICAgfQorI2lmZGVmIFVOSVgKKyAgICAgICAgZmZsdXNoKHN0ZG91dCk7Cisj ZW5kaWYgLyogVU5JWCAqLworICAgICAgICByZXR1cm47CisKKyAgICAgIGNhc2UgU0NSX0VNOiAg ICAgICAgICAgICAgICAgICAgICAvKiBFcnJvciBtZXNzYWdlICovCisgICAgICAgIGlmIChmZGlz cGxhID09IFhZRkRfQikgeworICAgICAgICAgICAgcHJpbnRmKCIgRVJST1I6ICVzXG4iLHMpOwor ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGNvbm9sbCgiIik7IGNvbm9j KCc/Jyk7IGNvbm9sbChzKTsgaHBvcyA9IDA7IHJldHVybjsKKworICAgICAgY2FzZSBTQ1JfV006 ICAgICAgICAgICAgICAgICAgICAgIC8qIFdhcm5pbmcgbWVzc2FnZSAqLworICAgICAgICBpZiAo ZmRpc3BsYSA9PSBYWUZEX0IpIHsKKyAgICAgICAgICAgIHByaW50ZigiIFdBUk5JTkc6ICVzXG4i LHMpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGNvbm9sbCgiIik7 IGNvbm9sbChzKTsgaHBvcyA9IDA7IHJldHVybjsKKworICAgICAgY2FzZSBTQ1JfTVM6ICAgICAg ICAgICAgICAgICAgICAgIC8qIE1lc3NhZ2UgZnJvbSBvdGhlciBLZXJtaXQgKi8KKyAgICAgICAg aWYgKGZkaXNwbGEgPT0gWFlGRF9CKSB7CisgICAgICAgICAgICBwcmludGYoIiBNRVNTQUdFOiAl c1xuIixzKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBjb25vbGwo IiIpOyBjb25vbGwocyk7IGhwb3MgPSAwOyByZXR1cm47CisKKyAgICAgIGNhc2UgU0NSX1RVOiAg ICAgICAgICAgICAgICAgICAgICAvKiBVbmRlbGltaXRlZCB0ZXh0ICovCisgICAgICAgIGlmIChm ZGlzcGxhID09IFhZRkRfQikKKyAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmICgoaHBvcyAr PSBsZW4pID4gNzcpIHsgY29ub2xsKCIiKTsgaHBvcyA9IGxlbjsgfQorICAgICAgICBjb25vbChz KTsgcmV0dXJuOworCisgICAgICBjYXNlIFNDUl9UTjogICAgICAgICAgICAgICAgICAgICAgLyog VGV4dCBkZWxpbWl0ZWQgYXQgYmVnaW5uaW5nICovCisgICAgICAgIGlmIChmZGlzcGxhID09IFhZ RkRfQikKKyAgICAgICAgICByZXR1cm47CisgICAgICAgIGNvbm9sbCgiIik7IGNvbm9sKHMpOyBo cG9zID0gbGVuOyByZXR1cm47CisKKyAgICAgIGNhc2UgU0NSX1RaOiAgICAgICAgICAgICAgICAg ICAgICAvKiBUZXh0IGRlbGltaXRlZCBhdCBlbmQgKi8KKyAgICAgICAgaWYgKGZkaXNwbGEgPT0g WFlGRF9CKQorICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKChocG9zICs9IGxlbikgPiA3 NykgeyBjb25vbGwoIiIpOyBocG9zID0gbGVuOyB9CisgICAgICAgIGNvbm9sbChzKTsgcmV0dXJu OworCisgICAgICBjYXNlIFNDUl9RRTogICAgICAgICAgICAgICAgICAgICAgLyogUXVhbnRpdHkg ZXF1YWxzICovCisgICAgICAgIGlmIChmZGlzcGxhID09IFhZRkRfQikKKyAgICAgICAgICByZXR1 cm47CisJY2ttYWttc2coYnVmLDgwLHMsIjogIixja2x0b2EobiksTlVMTCk7CisgICAgICAgIGNv bm9sbChidWYpOyBocG9zID0gMDsgcmV0dXJuOworCisgICAgICBjYXNlIFNDUl9DVzogICAgICAg ICAgICAgICAgICAgICAgLyogQ2xvc2UgZnVsbHNjcmVlbiB3aW5kb3cgKi8KKyAgICAgICAgcmV0 dXJuOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBObyB3aW5kb3cgdG8gY2xvc2UgKi8KKwor ICAgICAgY2FzZSBTQ1JfQ0Q6CisgICAgICAgIHJldHVybjsKKworICAgICAgZGVmYXVsdDoKKyAg ICAgICAgY29ub2xsKCIqKiogc2NyZWVuKCkgY2FsbGVkIHdpdGggYmFkIG9iamVjdCAqKioiKTsK KyAgICAgICAgaHBvcyA9IDA7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisjZW5kaWYgLyog Tk9ESVNQTEFZICovCisKKy8qICBFIFIgTSBTIEcgIC0tICBOb25mYXRhbCBlcnJvciBtZXNzYWdl ICAqLworCisvKiBTaG91bGQgYmUgdXNlZCBvbmx5IGZvciBwcmludGluZyB0aGUgbWVzc2FnZSB0 ZXh0IGZyb20gYW4gRXJyb3IgcGFja2V0LiAqLworCitWT0lECitlcm1zZyhtc2cpIGNoYXIgKm1z ZzsgeyAgICAgICAgICAgICAgICAgLyogUHJpbnQgZXJyb3IgbWVzc2FnZSAqLworICAgIGRlYnVn KEYxMTAsImVybXNnIixtc2csMCk7CisgICAgaWYgKGxvY2FsKQorICAgICAgeHhzY3JlZW4oU0NS X0VNLDAsMEwsbXNnKTsKKyAgICB0bG9nKEYxMTAsIlByb3RvY29sIEVycm9yOiIsbXNnLDBMKTsK K30KKyNlbmRpZiAvKiBOT1hGRVIgKi8KKworVk9JRAorc2V0c2VzbG9nKHgpIGludCB4OyB7Cisg ICAgc2VzbG9nID0geDsKKyNpZmRlZiBLVUkKKyAgICBLdWlTZXRQcm9wZXJ0eShLVUlfVEVSTV9D QVBUVVJFLHgsMCk7CisjZW5kaWYgLyogS1VJICovCit9CisKK1ZPSUQKK2RvY2xlYW4oZmMpIGlu dCBmYzsgeyAgICAgICAgICAgICAgICAgICAvKiBHZW5lcmFsIGNsZWFudXAgKi8KKyNpZmRlZiBP UzJPUlVOSVgKKyAgICBleHRlcm4gaW50IHR0eWZkOworI2VuZGlmIC8qIE9TMk9SVU5JWCAqLwor ICAgIGV4dGVybiBpbnQgIGtlZXA7CisgICAgZXh0ZXJuIGludCBleGl0aGFuZ3VwOworI2lmbmRl ZiBOT1hGRVIKKyAgICBleHRlcm4gY2hhciBmaWxuYW1bXTsKKyNlbmRpZiAvKiBOT1hGRVIgKi8K KyNpZm5kZWYgTk9JQ1AKKyAgICBpbnQgeDsKKworICAgIGlmIChmYyA+IDApCisgICAgICBkb3N0 b3AoKTsgICAgICAgICAgICAgICAgIC8qIFN0b3AgYWxsIGNvbW1hbmQgZmlsZXMgYW5kIGVuZCBt YWNyb3MgKi8KKyNlbmRpZiAvKiBOT0lDUCAqLworCisjaWZuZGVmIE5PWEZFUgorICAgIGlmIChw a3Rsb2cpIHsKKyAgICAgICAgKnBrdGZpbCA9ICdcMCc7CisgICAgICAgIHBrdGxvZyA9IDA7Cisg ICAgICAgIHpjbG9zZShaUEZJTEUpOworICAgIH0KKyNlbmRpZiAvKiBOT1hGRVIgKi8KKyAgICBp ZiAoc2VzbG9nKSB7CisgICAgICAgICpzZXNmaWwgPSAnXDAnOworICAgICAgICBzZXRzZXNsb2co MCk7CisgICAgICAgIHpjbG9zZShaU0ZJTEUpOworICAgIH0KKyNpZmRlZiBUTE9HCisgICAgaWYg KHRyYWxvZykgeworICAgICAgICB0bG9nKEYxMDAsIlRyYW5zYWN0aW9uIExvZyBDbG9zZWQiLCIi LDBMKTsKKyAgICAgICAgKnRyYWZpbCA9ICdcMCc7CisgICAgICAgIHRyYWxvZyA9IDA7CisgICAg ICAgIHpjbG9zZShaVEZJTEUpOworICAgIH0KKyNlbmRpZiAvKiBUTE9HICovCisKKyAgICBkZWJ1 ZyhGMTAwLCJkb2NsZWFuIGNhbGxpbmcgZG9sb2dlbmQiLCIiLDApOworICAgIGRvbG9nZW5kKCk7 ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVuZCBjdXJyZW50IGxvZyByZWNvcmQgaWYgYW55 ICovCisjaWZkZWYgQ09NTUVOVAorICAgIGlmIChkaWFsb2cpIHsgICAgICAgICAgICAgICAgICAg ICAgIC8qIElmIGNvbm5lY3Rpb24gbG9nIG9wZW4gKi8KKwlkaWFsb2cgPSAwOworICAgICAgICAq ZGlhZmlsID0gJ1wwJzsgICAgICAgICAgICAgICAgIC8qIGNsb3NlIGl0LiAqLworICAgICAgICB6 Y2xvc2UoWkRJRklMKTsKKyAgICB9CisjZW5kaWYgLyogQ09NTUVOVCAqLworCisjaWZuZGVmIE5P SUNQCisjaWZuZGVmIE5PU1BMCisgICAgemNsb3NlKFpSRklMRSk7ICAgICAgICAgICAgICAgICAg ICAgLyogUkVBRCBhbmQgV1JJVEUgZmlsZXMsIGlmIGFueS4gKi8KKyAgICB6Y2xvc2UoWldGSUxF KTsKKyNpZm5kZWYgTk9YRkVSCisgICAgemNsb3NlKFpJRklMRSk7ICAgICAgICAgICAgICAgICAg ICAgLyogQW5kIG90aGVyIGZpbGVzIHRvbyAqLworICAgIHggPSBjaGtmbihaT0ZJTEUpOwkJCS8q IERvd25sb2FkIGluIHByb2dyZXNzPyAqLworICAgIGRlYnVnKEYxMTEsImRvY2xlYW4gY2hrZm4g Wk9GSUxFIixmaWxuYW0seCk7CisgICAgZGVidWcoRjExMSwiZG9jbGVhbiBrZWVwIiwiIixrZWVw KTsKKyAgICB6Y2xvc2UoWk9GSUxFKTsJCQkvKiBDbG9zZSBvdXRwdXQgZmlsZSAqLworICAgIGlm ICh4ID4gMCAmJiAha2VlcCkgewkJLyogSWYgaXQgd2FzIGJlaW5nIGRvd25sb2FkZWQgKi8KKwlp ZiAoZmlsbmFtWzBdKQorCSAgeCA9IHpkZWxldChmaWxuYW0pOwkJLyogRGVsZXRlIGlmIElOQ09N UExFVEUgPSBESVNDQVJEICovCisJZGVidWcoRjExMSwiZG9jbGVhbiBkb3dubG9hZCBmaWxlbmFt ZSIsZmlsbmFtLHgpOworICAgIH0KKyNlbmRpZiAvKiBOT1hGRVIgKi8KKyAgICB6Y2xvc2UoWlNZ U0ZOKTsKKyAgICB6Y2xvc2UoWk1GSUxFKTsKKworICAgIGlmIChmYyA8IDEpIHsgICAgICAgICAg ICAgICAgICAgICAgIC8qIFJFU0VUaW5nLCBub3QgRVhJVGluZyAqLworI2lmZGVmIERFQlVHCisg ICAgICAgIGlmIChkZWJsb2cpIHsgICAgICAgICAgICAgICAgICAgLyogQ2xvc2UgdGhlIGRlYnVn IGxvZy4gKi8KKyAgICAgICAgICAgICpkZWJmaWwgPSAnXDAnOworICAgICAgICAgICAgZGVibG9n ID0gMDsKKyAgICAgICAgICAgIHpjbG9zZShaREZJTEUpOworICAgICAgICB9CisjZW5kaWYgLyog REVCVUcgKi8KKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZiAvKiBOT1NQTCAqLworI2Vu ZGlmIC8qIE5PSUNQICovCisKKyNpZm5kZWYgTk9MT0NBTAorICAgIGRlYnVnKEYxMDEsImRvY2xl YW4gZXhpdGhhbmd1cCIsIiIsZXhpdGhhbmd1cCk7CisgICAgaWYgKGxvY2FsICYmIGV4aXRoYW5n dXApIHsJCS8qIENsb3NlIGNvbW11bmljYXRpb24gY29ubmVjdGlvbiAqLworICAgICAgICBleHRl cm4gaW50IGhhc2xvY2s7CisJaW50IHg7CisJCisJeCA9IHR0Y2hrKCk7CisJZGVidWcoRjEwMSwi ZG9jbGVhbiB0dGNoaygpIiwiIix4KTsKKyNpZmRlZiBPUzJPUlVOSVgKKwlkZWJ1ZyhGMTAxLCJk b2NsZWFuIHR0eWZkIiwiIix0dHlmZCk7CisjZW5kaWYgLyogT1MyT1JVTklYICovCisgICAgICAg IGlmICh4ID49IDAKKyNpZmRlZiBPUzIKKyAgICAgICAgICAgIHx8IHR0eWZkICE9IC0xCisjZWxz ZQorI2lmZGVmIFVOSVgKKyAgICAgICAgICAgIHx8IGhhc2xvY2sgICAgICAgICAgICAgICAgICAv KiBNYWtlIHN1cmUgd2UgZ2V0IGxvY2tmaWxlISAqLworICAgICAgICAgICAgfHwgKCFuZXR3b3Jr ICYmIHR0eWZkID4gLTEpCisjZW5kaWYgLyogVU5JWCAqLworI2VuZGlmIC8qIE9TMiAqLworICAg ICAgICAgICAgKSB7CisgICAgICAgICAgICBleHRlcm4gaW50IHdhc2Nsb3NlZCwgd2h5Y2xvc2Vk OworCSAgICBkZWJ1ZyhGMTAwLCJkb2NsZWFuIGhhbmdpbmcgdXAgYW5kIGNsb3NpbmciLCIiLDAp OworICAgICAgICAgICAgaWYgKG1zZ2ZsZykgeworI2lmZGVmIFVOSVgKKyAgICAgICAgICAgICAg ICBmZmx1c2goc3Rkb3V0KTsKKyNlbmRpZiAvKiBVTklYICovCisgICAgICAgICAgICAgICAgcHJp bnRmKCJDbG9zaW5nICVzLi4uIix0dG5hbWUpOworICAgICAgICAgICAgfQorI2lmbmRlZiBOT0RJ QUwKKyAgICAgICAgICAgIG1kbWh1cCgpOyAgICAgICAgICAgICAgICAgICAvKiBIYW5ndXAgdGhl IG1vZGVtPz8/ICovCisjZW5kaWYgLyogTk9ESUFMICovCisgICAgICAgICAgICB0dGNsb3MoMCk7 ICAgICAgICAgICAgICAgICAgLyogQ2xvc2UgZXh0ZXJuYWwgbGluZSwgaWYgYW55ICovCisgICAg ICAgICAgICBpZiAobXNnZmxnKSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCJPS1xuIik7Cisj aWZkZWYgVU5JWAorICAgICAgICAgICAgICAgIGZmbHVzaChzdGRvdXQpOworI2VuZGlmIC8qIFVO SVggKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh3YXNjbG9zZWQpIHsKKyAgICAg ICAgICAgICAgICB3aHljbG9zZWQgPSBXQ19DTE9TOworI2lmbmRlZiBOT1NQTAorICAgICAgICAg ICAgICAgIGlmIChubWFjKSB7ICAgICAgICAgICAgIC8qIEFueSBtYWNyb3MgZGVmaW5lZD8gKi8K KyAgICAgICAgICAgICAgICAgICAgaW50IGs7ICAgICAgICAgICAgICAvKiBZZXMgKi8KKyAgICAg ICAgICAgICAgICAgICAgayA9IG1sb29rKG1hY3RhYiwib25fY2xvc2UiLG5tYWMpOyAgLyogTG9v ayB0aGlzIHVwICovCisgICAgICAgICAgICAgICAgICAgIGlmIChrID49IDApIHsgICAgICAgICAg ICAgICAgICAgICAgIC8qIElmIGZvdW5kLCAqLworICAgICAgICAgICAgICAgICAgICAgICAgd2Fz Y2xvc2VkID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHByaW50ZigiT05fQ0xPU0Ug RE9DTEVBTlxuIik7ICovCisgICAgICAgICAgICAgICAgICAgICAgICAqKG1hY3RhYltrXS5rd2Qp ID0gTlVMOyAgICAgICAgIC8qIFNlZSBjb21tZW50IGJlbG93ICovCisgICAgICAgICAgICAgICAg ICAgICAgICBpZiAoZG9kbyhrLGNraXRvYSh3aHljbG9zZWQpLDApID4gLTEpIC8qIHNldCBpdCB1 cCwgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VyKDEpOyAgICAgICAgICAgICAg ICAgICAgLyogYW5kIGV4ZWN1dGUgaXQgKi8KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICAgIH0KKyNlbmRpZiAvKiBOT1NQTCAqLworICAgICAgICAgICAgICAgIHdhc2Nsb3Nl ZCA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgY2tzdHJuY3B5KHR0bmFt ZSxkZnR0eSxUVE5BTUxFTik7IC8qIFJlc3RvcmUgZGVmYXVsdCB0dHkgKi8KKyAgICAgICAgbG9j YWwgPSBkZmxvYzsgICAgICAgICAgICAgICAgICAvKiBBbmQgZGVmYXVsdCByZW1vdGUvbG9jYWwg c3RhdHVzICovCisgICAgfQorI2lmZGVmIERFQlVHCisgICAgZWxzZSBpZiAobG9jYWwpIGRlYnVn KEYxMDAsImRvY2xlYW4gaGFuZ3VwL2Nsb3NlIHNraXBwZWQiLCIiLDApOworI2VuZGlmIC8qIERF QlVHICovCisjZW5kaWYgLyogTk9MT0NBTCAqLworCisjaWZkZWYgTkVXRlRQCisgICAgZnRwYnll KCk7CQkJCS8qIElmIEZUUCBjb25uZWN0aW9uIG9wZW4sIGNsb3NlIGl0ICovCisjZW5kaWYgLyog TkVXRlRQICovCisKKyNpZmRlZiBJS1NECisgICAgaWYgKGluc2VydmVyKQorICAgICAgdHRjbG9z KDApOwkJCS8qIElmIElLU0QsIGNsb3NlIHNvY2tldCAqLworI2VuZGlmIC8qIElLU0QgKi8KKwor I2lmbmRlZiBOT1NQTAorLyoKKyAgSWYgYSBtYWNybyBuYW1lZCAib25fZXhpdCIgaXMgZGVmaW5l ZCwgZXhlY3V0ZSBpdC4gIEFsc28gcmVtb3ZlIGl0IGZyb20gdGhlCisgIG1hY3JvIHRhYmxlLCBp biBjYXNlIGl0cyBkZWZpbml0aW9uIGluY2x1ZGVzIGFuIEVYSVQgb3IgUVVJVCBjb21tYW5kLCB3 aGljaAorICB3b3VsZCBjYXVzZSBtdWNoIHJlY3Vyc2lvbiBhbmQgd291bGQgcHJldmVudCB0aGUg cHJvZ3JhbSBmcm9tIGV2ZXIgYWN0dWFsbHkKKyAgRVhJVGluZy4KKyovCisgICAgaWYgKG5tYWMp IHsgICAgICAgICAgICAgICAgICAgICAgICAgLyogQW55IG1hY3JvcyBkZWZpbmVkPyAqLworICAg ICAgICBpbnQgazsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFllcyAqLworICAgICAgICBj aGFyICogY21kID0gIm9uX2V4aXQiOyAgICAgICAgIC8qIE1TVkMgMi54IGNvbXBpbGVyIGVycm9y ICovCisgICAgICAgIGsgPSBtbG9vayhtYWN0YWIsY21kLG5tYWMpOyAgICAgLyogTG9vayB1cCAi b25fZXhpdCIgKi8KKyAgICAgICAgaWYgKGsgPj0gMCkgeyAgICAgICAgICAgICAgICAgICAvKiBJ ZiBmb3VuZCwgKi8KKyNpZmRlZiBDT01NRU5UCisJICAgIC8qIFRoaXMgbWFrZXMgYSBtZXNzIGlm IE9OX0VYSVQgaXRzZWxmIGV4ZWN1dGVzIG1hY3JvcyAqLworICAgICAgICAgICAgKihtYWN0YWJb a10ua3dkKSA9IE5VTDsgICAgIC8qIHBva2UgaXRzIG5hbWUgZnJvbSB0aGUgdGFibGUsICovCisj ZWxzZQorCSAgICAvKiBSZXBsYWNlIHRoZSBrZXl3b3JkIHdpdGggc29tZXRoaW5nIHRoYXQgZG9l c24ndCB3cmVjayB0aGUgKi8KKwkgICAgLyogb3JkZXIgb2YgdGhlIGtleXdvcmQgdGFibGUgKi8K KwkgICAgY2tzdHJuY3B5KG1hY3RhYltrXS5rd2QsIm9uX2V4eHgiLDgpOworI2VuZGlmIC8qIENP TU1FTlQgKi8KKyAgICAgICAgICAgIGlmIChkb2RvKGssIiIsMCkgPiAtMSkgICAgICAvKiBzZXQg aXQgdXAsICovCisgICAgICAgICAgICAgIHBhcnNlcigxKTsgICAgICAgICAgICAgICAgLyogYW5k IGV4ZWN1dGUgaXQgKi8KKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBOT1NQTCAqLworLyoK KyAgUHV0IGNvbnNvbGUgdGVybWluYWwgYmFjayB0byBub3JtYWwuICBUaGlzIGlzIGRvbmUgaGVy ZSBiZWNhdXNlIHRoZQorICBPTl9FWElUIG1hY3JvIGNhbGxzIHRoZSBwYXJzZXIsIHdoaWNoIG1l ZGRsZXMgd2l0aCBjb25zb2xlIHRlcm1pbmFsIG1vZGVzLgorKi8KKyAgICBjb25yZXMoKTsgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXN0b3JlIGNvbnNvbGUgdGVybWluYWwuICovCisK KyNpZmRlZiBDT01NRU5UCisvKiBTaG91bGQgYmUgbm8gbmVlZCBmb3IgdGhpcywgYW5kIG1heWJl IGl0J3Mgc2NyZXdpbmcgdGhpbmdzIHVwPyAqLworICAgIGNvbm5vaSgpOyAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIFR1cm4gb2ZmIGNvbnNvbGUgaW50ZXJydXB0IHRyYXBzICovCisjZW5k aWYgLyogQ09NTUVOVCAqLworCisgICAgLyogRGVsZXRlIHRoZSBTdGFydHVwIEZpbGUgaWYgd2Ug YXJlIHN1cHBvc2VkIHRvLiAqLworI2lmbmRlZiBOT0lDUAorICAgIHsKKyAgICAgICAgZXh0ZXJu IGludCBEZWxldGVTdGFydHVwRmlsZTsKKyAgICAgICAgZGVidWcoRjExMSwiZG9jbGVhbiBEZWxl dGVTdGFydHVwRmlsZSIsY21kZmlsLERlbGV0ZVN0YXJ0dXBGaWxlKTsKKyAgICAgICAgaWYgKERl bGV0ZVN0YXJ0dXBGaWxlKSB7CisgICAgICAgICAgICBpbnQgcmMgPSB6ZGVsZXQoY21kZmlsKTsK KyAgICAgICAgICAgIGRlYnVnKEYxMTEsImRvY2xlYW4gemRlbGV0IixjbWRmaWwscmMpOworICAg ICAgICB9CisgICAgfQorI2VuZGlmIC8qIE5PSUNQICovCisgICAgc3lzY2xlYW51cCgpOyAgICAg ICAgICAgICAgICAgICAgICAgLyogU3lzdGVtLWRlcGVuZGVudCBjbGVhbnVwLCBsYXN0ICovCit9 CisKKy8qICBEIE8gRSBYIEkgVCAgLS0gIEV4aXQgZnJvbSB0aGUgcHJvZ3JhbS4gICovCisKKy8q CisgIEZpcnN0IGFyZyBpcyBnZW5lcmFsLCBzeXN0ZW0taW5kZXBlbmRlbnQgc3ltYm9sOiBHT09E X0VYSVQgb3IgQkFEX0VYSVQuCisgIElmIHNlY29uZCBhcmcgaXMgLTEsIHRha2UgMXN0IGFyZyBs aXRlcmFsbHkuCisgIElmIHNlY29uZCBhcmcgaXMgbm90IC0xLCB3b3JrIGl0IGludG8gdGhlIGV4 aXQgY29kZS4KKyovCitWT0lECitkb2V4aXQoZXhpdHN0YXQsY29kZSkgaW50IGV4aXRzdGF0LCBj b2RlOyB7CisgICAgZXh0ZXJuIGludCB4X2xvZ2dlZCwgcXVpdHRpbmc7CisjaWZkZWYgT1MyCisg ICAgZXh0ZXJuIGludCBkaXNwbGF5X2RlbW87CisgICAgZXh0ZXJuIGludCBTeXNJbml0ZWQ7Cisj ZW5kaWYgLyogT1MyICovCisjaWZkZWYgQ0tfS0VSQkVST1MKKyNpZmRlZiBLUkI0CisgICAgZXh0 ZXJuIGludCBrcmI0X2F1dG9kZWw7CisjZW5kaWYgLyogS1JCNCAqLworI2lmZGVmIEtSQjUKKyAg ICBleHRlcm4gaW50IGtyYjVfYXV0b2RlbDsKKyNlbmRpZiAvKiBLUkI1ICovCisjZW5kaWYgLyog Q0tfS0VSQkVST1MgKi8KKworI2lmZGVmIFZNUworICAgIGNoYXIgZW52c3RyWzY0XTsKKyAgICBz dGF0aWMgJERFU0NSSVBUT1Ioc3ltbmFtLCJDS0VSTUlUX1NUQVRVUyIpOworICAgIHN0YXRpYyBz dHJ1Y3QgZHNjJGRlc2NyaXB0b3JfcyBzeW12YWw7CisjZW5kaWYgLyogVk1TICovCisgICAgaW50 IGk7CisKKyNpZmRlZiBERUJVRworI2lmZGVmIFVTRV9MVUNBQ0hFCisgICAgZXh0ZXJuIGxvbmcg bHVjYWxscywgbHVoaXRzLCB4eGhpdHMsIGx1bG9vcDsKKyAgICBleHRlcm4gaW50IGx1c2l6ZTsK KyNlbmRpZiAvKiBVU0VfTFVDQUNIRSAqLworI2lmbmRlZiBOT1NQTAorICAgIGV4dGVybiBpbnQg Y21kc3RhdHNbXTsKKyNlbmRpZiAvKiBOT1NQTCAqLworCisgICAgcXVpdHRpbmcrKzsKKworI2lm ZGVmIE9TMgorICAgIGlmICggIVN5c0luaXRlZCApIHsKKyAgICAgICAgc3RhdGljIGludCBpbml0 aW5nID0gMDsKKyAgICAgICAgaWYgKCBpbml0aW5nICkKKwkgIGV4aXQoMjUzKTsKKyAgICAgICAg aW5pdGluZyA9IDE7CisgICAgICAgIHN5c2luaXQoKTsKKyAgICB9CisjZW5kaWYgLyogT1MyICov CisKKyAgICBpZiAoZGVibG9nKSB7CisjaWZkZWYgVVNFX0xVQ0FDSEUKKwlkZWJ1ZyhGMTAxLCJs b29rdXAgY2FjaGUgc2l6ZSIsIiIsbHVzaXplKTsKKwlkZWJ1ZyhGMTAxLCJsb29rdXAgY2FsbHMg Li4uLiIsIiIsbHVjYWxscyk7CisJZGVidWcoRjEwMSwibG9va3VwIGNhY2hlIGhpdHMiLCIiLGx1 aGl0cyk7CisJZGVidWcoRjEwMSwibG9va3VwIHN0YXJ0IGhpdHMiLCIiLHh4aGl0cyk7CisJZGVi dWcoRjEwMSwibG9va3VwIGxvb3AgaXRlcmF0aW9ucyIsIiIsbHVsb29wKTsKKyNlbmRpZiAvKiBV U0VfTFVDQUNIRSAqLworI2lmbmRlZiBOT1NQTAorCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykg eworCSAgICBpZiAoY21kc3RhdHNbaV0pCisJICAgICAgZGVidWcoRjExMSwiQ01TVEFUUyIsY2tp dG9hKGkpLGNtZHN0YXRzW2ldKTsKKwl9CisjZW5kaWYgLyogTk9TUEwgKi8KKwlkZWJ1ZyhGMTAx LCJkb2V4aXQgZXhpdHN0YXQiLCIiLGV4aXRzdGF0KTsKKwlkZWJ1ZyhGMTAxLCJkb2V4aXQgY29k ZSIsIiIsY29kZSk7CisJZGVidWcoRjEwMSwiZG9leGl0IHhpdHN0YSIsIiIseGl0c3RhKTsKKyAg ICB9CisjZW5kaWYgLyogREVCVUcgKi8KKworI2lmZGVmIENLX0tFUkJFUk9TCisgICAgLyogSWYg d2UgYXJlIGF1dG9tYXRpY2FsbHkgZGVzdHJveWluZyBLZXJiZXJvcyBjcmVkZW50aWFscyBvbiBF eGl0ICovCisgICAgLyogZG8gaXQgbm93LiAqLworI2lmZGVmIEtSQjQKKyAgICBpZiAoa3JiNF9h dXRvZGVsID09IEtSQl9ERUxfRVgpIHsKKyAgICAgICAgZXh0ZXJuIHN0cnVjdCBrcmJfb3BfZGF0 YSBrcmJfb3A7CisgICAgICAgIGtyYl9vcC52ZXJzaW9uID0gNDsKKyAgICAgICAga3JiX29wLmNh Y2hlID0gTlVMTDsKKyAgICAgICAgY2tfa3JiNF9kZXN0cm95KCZrcmJfb3ApOworICAgIH0KKyNl bmRpZiAvKiBLUkI0ICovCisjaWZkZWYgS1JCNQorICAgIGlmIChrcmI1X2F1dG9kZWwgPT0gS1JC X0RFTF9FWCkgeworICAgICAgICBleHRlcm4gc3RydWN0IGtyYl9vcF9kYXRhIGtyYl9vcDsKKyAg ICAgICAgZXh0ZXJuIGNoYXIgKiBrcmI1X2RfY2M7CisgICAgICAgIGtyYl9vcC52ZXJzaW9uID0g NTsKKyAgICAgICAga3JiX29wLmNhY2hlID0ga3JiNV9kX2NjOworICAgICAgICBja19rcmI1X2Rl c3Ryb3koJmtyYl9vcCk7CisgICAgfQorI2VuZGlmIC8qIEtSQjUgKi8KKyNlbmRpZiAvKiBDS19L RVJCRVJPUyAqLworCisjaWZuZGVmIE5PTE9DQUwKKyNpZmRlZiBPUzIKKyAgICBpZiAoU3lzSW5p dGVkKQorICAgIHsKKyNpZmRlZiBEQ01EQlVGCisgICAgICAgIGV4dGVybiBzdHJ1Y3QgY21kcHRy ICpjbWRzdGs7CisjZWxzZQorICAgICAgICBleHRlcm4gc3RydWN0IGNtZHB0ciBjbWRzdGtbXTsK KyNlbmRpZiAvKiBEQ01EQlVGICovCisgICAgICAgIGV4dGVybiBpbnQgdHRfc3RhdHVzW107Cisg ICAgICAgIGV4dGVybiBpbnQgdm1vZGU7CisKKyAgICAgICAgLyogSWYgdGhlcmUgaXMgYSBkZW1v IHNjcmVlbiB0byBiZSBkaXNwbGF5ZWQsIGRpc3BsYXkgaXQgKi8KKyAgICAgICAgaWYgKGRpc3Bs YXlfZGVtbykgeworICAgICAgICAgICAgZGVtb3Njcm4oVkNNRCk7CisgICAgICAgICAgICBkaXNw bGF5X2RlbW8gPSAwOworICAgICAgICB9CisjaWZuZGVmIEtVSQorICAgICAgICAvKiBUaGlzIGlz IGdvaW5nIHRvIGJlIGhpZGVvdXMuICBJZiB3ZSBoYXZlIGEgc3RhdHVzIGxpbmUgKi8KKyAgICAg ICAgLyogaW4gdGhlIGNvbW1hbmQgd2luZG93IHR1cm4gaXQgb2ZmIGJlZm9yZSB3ZSBleGl0LiAg ICAgICovCisKKyAgICAgICAgaWYgKCB0dF9zdGF0dXNbVkNNRF0gJiYgdm1vZGUgPT0gVkNNRCAp IHsKKyAgICAgICAgICAgIGRvbWFjKCJfY2xlYXJfc3RhdHVzbGluZSIsInNldCBjb21tYW5kIHN0 YXR1c2xpbmUgb2ZmIiwKKyAgICAgICAgICAgICAgICAgICBjbWRzdGtbY21kbHZsXS5jY2ZsZ3Mp OworICAgICAgICAgICAgZGVsbWFjKCJfY2xlYXJfc3RhdHVzbGluZSIsMSk7CisgICAgICAgICAg ICBSZXF1ZXN0U2NyZWVuTXV0ZXgoLTEpOworICAgICAgICAgICAgVnNjcm5Jc0RpcnR5KHZtb2Rl KTsKKyAgICAgICAgICAgIFJlbGVhc2VTY3JlZW5NdXRleCgpOworICAgICAgICAgICAgd2hpbGUg KCBJc1ZzY3JuRGlydHkodm1vZGUpICkKKyAgICAgICAgICAgICAgICBtc2xlZXAoMjAwKTsKKyAg ICAgICAgICAgIFJlcXVlc3RTY3JlZW5NdXRleCgtMSk7CisgICAgICAgICAgICBSZWxlYXNlU2Ny ZWVuTXV0ZXgoKTsKKyAgICAgICAgfQorI2VuZGlmIC8qIEtVSSAqLworICAgICAgICBEaWFsZXJT ZW5kKE9QVF9LRVJNSVRfRVhJVCxleGl0c3RhdCk7CisjaWZuZGVmIEtVSQorICAgICAgICBkZWJ1 ZyhGMTAwLCJkb2V4aXQgYWJvdXQgdG8gbXNsZWVwIiwiIiwwKTsKKworICAgICAgICBpZiAoIGlz V2luOTUoKSApCisgICAgICAgICAgICBtc2xlZXAoMjUwKTsKKyNlbmRpZiAvKiBLVUkgKi8KKyAg ICB9CisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogTk9MT0NBTCAqLworCisjaWZkZWYgSUtT RAorI2lmZGVmIENLX0xPR0lOCisgICAgaWYgKGluc2VydmVyICYmIHhfbG9nZ2VkKSB7CisjaWZu ZGVmIE5PU1BMCisvKgorICBJZiBhIG1hY3JvIG5hbWVkICJvbl9sb2dvdXQiIGlzIGRlZmluZWQs IGV4ZWN1dGUgaXQuICBBbHNvIHJlbW92ZSBpdCBmcm9tIHRoZQorICBtYWNybyB0YWJsZSwgaW4g Y2FzZSBpdHMgZGVmaW5pdGlvbiBpbmNsdWRlcyBhbiBFWElUIG9yIFFVSVQgY29tbWFuZCwgd2hp Y2gKKyAgd291bGQgY2F1c2UgbXVjaCByZWN1cnNpb24gYW5kIHdvdWxkIHByZXZlbnQgdGhlIHBy b2dyYW0gZnJvbSBldmVyIGFjdHVhbGx5CisgIEVYSVRpbmcuCisqLworCWlmIChubWFjKSB7CQkJ LyogQW55IG1hY3JvcyBkZWZpbmVkPyAqLworCSAgICBpbnQgazsJCQkvKiBZZXMgKi8KKwkgICAg Y2hhciAqIGNtZCA9ICJvbl9sb2dvdXQiOwkvKiBNU1ZDIDIueCBjb21waWxlciBlcnJvciAqLwor CSAgICBrID0gbWxvb2sobWFjdGFiLGNtZCxubWFjKTsJLyogTG9vayB1cCAib25fbG9nb3V0IiAq LworCSAgICBpZiAoayA+PSAwKSB7CQkvKiBJZiBmb3VuZCwgKi8KKwkJKihtYWN0YWJba10ua3dk KSA9IE5VTDsJLyogcG9rZSBpdHMgbmFtZSBmcm9tIHRoZSB0YWJsZSwgKi8KKwkJaWYgKGRvZG8o aywiIiwwKSA+IC0xKQkvKiBzZXQgaXQgdXAsICovCisJCSAgcGFyc2VyKDEpOwkJLyogYW5kIGV4 ZWN1dGUgaXQgKi8KKwkgICAgfQorCX0KKyNlbmRpZiAvKiBOT1NQTCAqLworCXp2bG9nb3V0KCk7 CisgICAgfQorI2VuZGlmIC8qIENLX0xPR0lOICovCisjZW5kaWYgLyogSUtTRCAqLworCisgICAg ZGVidWcoRjEwMCwiZG9leGl0IGFib3V0IHRvIGRvY2xlYW4iLCIiLDApOworICAgIGRvY2xlYW4o MSk7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENsZWFuIHVwIG1vc3QgdGhpbmdzICovCisK KyNpZmRlZiBWTVMKKyAgICBpZiAoY29kZSA9PSAtMSkKKyAgICAgIGNvZGUgPSAwOyAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBTaW5jZSB3ZSBzZXQgdHdvIGRpZmZlcmVudCBpdGVtcyAqLwor ICAgIHNwcmludGYoZW52c3RyLCIlZCIsIGV4aXRzdGF0IHwgY29kZSk7IC8qIFNBRkUgKi8KKyAg ICBzeW12YWwuZHNjJHdfbGVuZ3RoID0gKGludClzdHJsZW4oZW52c3RyKTsKKyAgICBzeW12YWwu ZHNjJGFfcG9pbnRlciA9IGVudnN0cjsKKyAgICBzeW12YWwuZHNjJGJfY2xhc3MgPSBEU0MkS19D TEFTU19TOworICAgIHN5bXZhbC5kc2MkYl9kdHlwZSA9IERTQyRLX0RUWVBFX1Q7CisgICAgaSA9 IDI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU3RvcmUgaW4gZ2xvYmFsIHRhYmxl ICovCisjaWZkZWYgQ09NTUVOVCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTWFydGluIFpp bnNlciAqLworICAgIExJQiRTRVRfU1lNQk9MKCZzeW1uYW0sICZzeW12YWwsICZpKTsKKyNlbHNl CisgICAgbGliJHNldF9zeW1ib2woJnN5bW5hbSwgJnN5bXZhbCwgJmkpOworI2VuZGlmIC8qIENP TU1FTlQgKi8KKyAgICBpZiAoZXhpdHN0YXQgPT0gQkFEX0VYSVQpCisgICAgICBleGl0c3RhdCA9 IFNTJF9BQk9SVCB8IFNUUyRNX0lOSElCX01TRzsKKyAgICBpZiAoZXhpdHN0YXQgPT0gR09PRF9F WElUKQorICAgICAgZXhpdHN0YXQgPSBTUyRfTk9STUFMIHwgU1RTJE1fSU5ISUJfTVNHOworI2Vs c2UgLyogTm90IFZNUyAqLworICAgIGlmIChjb2RlICE9IC0xKSAgICAgICAgICAgICAgICAgICAg IC8qIFRha2UgMXN0IGFyZyBsaXRlcmFsbHkgKi8KKyAgICAgIGV4aXRzdGF0IHw9IGNvZGU7Cisj ZW5kaWYgLyogVk1TICovCisKKyNpZmRlZiBJS1NECisjaWZkZWYgSUtTREIKKyAgICBkZWJ1ZyhG MTAxLCJkb2V4aXQgaWtkYm9wZW4iLCIiLGlrZGJvcGVuKTsKKyAgICBpZiAoaWtkYm9wZW4gJiYg ZGJmcCkgeyAgICAgICAgICAgICAvKiBJZiBJS1NEIGRhdGFiYXNlIG9wZW4gKi8KKyAgICAgICAg aW50IHg7CisgICAgICAgIHggPSBmcmVlc2xvdChteWRic2xvdCk7ICAgICAgICAgLyogRnJlZSBv dXIgc2xvdC4uLiAqLworICAgICAgICBkZWJ1ZyhGMTAxLCJkb2V4aXQgZnJlZXNsb3QiLCIiLHgp OworICAgICAgICBmY2xvc2UoZGJmcCk7ICAgICAgICAgICAgICAgICAgIC8qIGFuZCBjbG9zZSBp dC4gKi8KKyAgICB9CisjZW5kaWYgLyogSUtTREIgKi8KKyNlbmRpZiAvKiBJS1NEICovCisKKy8q IFdlIGhhdmUgcHV0IHRoaXMgb2ZmIHRpbGwgdGhlIHZlcnkgbGFzdCBtb21lbnQuLi4gKi8KKwor I2lmZGVmIERFQlVHCisgICAgaWYgKGRlYmxvZykgeyAgICAgICAgICAgICAgICAgICAgICAgLyog Q2xvc2UgdGhlIGRlYnVnIGxvZy4gKi8KKyAgICAgICAgZGVidWcoRjEwMSwiQy1LZXJtaXQgRVhJ VCBzdGF0dXMiLCIiLGV4aXRzdGF0KTsKKyAgICAgICAgKmRlYmZpbCA9ICdcMCc7CisgICAgICAg IGRlYmxvZyA9IDA7CisgICAgICAgIHpjbG9zZShaREZJTEUpOworICAgIH0KKyNlbmRpZiAvKiBE RUJVRyAqLworCisjaWZkZWYgT1MyCisgICAgX2V4aXQoZXhpdHN0YXQpOyAgICAgICAgICAgIC8q IEV4aXQgZnJvbSBDLUtlcm1pdCAobm8gbWF0dGVyIHdoYXQpICovCisjZWxzZSAvKiBPUzIgKi8K KyAgICBleGl0KGV4aXRzdGF0KTsgICAgICAgICAgICAgICAgICAgICAvKiBFeGl0IGZyb20gQy1L ZXJtaXQgKi8KKyNlbmRpZiAvKiBPUzIgKi8KK30KKworVk9JRAorYmdjaGsoKSB7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIENoZWNrIGJhY2tncm91bmQgc3RhdHVzICovCisgICAg aWYgKGJnc2V0IDwgMCkgeyAgICAgICAgICAgICAgICAgICAgLyogVGhleSBkaWRuJ3QgdHlwZSBT RVQgQkFDS0dST1VORCAqLworI2lmZGVmIFZNUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIFNldCBwcm9tcHQgZmxhZyBiYXNlZCBvbiAqLworICAgICAgICBwZmxhZyA9ICFiYXRjaDsg ICAgICAgICAgICAgICAgIC8qIHdoYXQgd2UgZGV0ZWN0ZWQgYXQgc3RhcnR1cC4gKi8KKyNlbHNl CisgICAgICAgIHBmbGFnID0gIWJhY2tncmQ7CisjZW5kaWYgLyogVk1TICovCisgICAgfSBlbHNl IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogT3RoZXJ3aXNlIFNFVCBCQUNLR1JPVU5E IHZhbHVlICovCisgICAgICAgIHBmbGFnID0gKGJnc2V0ID09IDAgPyAxIDogMCk7CisgICAgfQor CisjaWZuZGVmIE5PSUNQCisgICAgLyogTWVzc2FnZSBmbGFnIG9uIG9ubHkgaWYgYXQgdG9wIGxl dmVsLCBwZmxhZyBpcyBvbiwgYW5kIFFVSUVUIGlzIE9GRiAqLworICAgIGlmICgheGNtZHNyYykK KyAgICAgIG1zZ2ZsZyA9IChwZmxhZyA9PSAwKSA/IDAgOiAhcXVpZXQ7CisgICAgZWxzZSBtc2dm bGcgPSAwOworI2Vsc2UKKyAgICBtc2dmbGcgPSAwOworI2VuZGlmIC8qIE5PSUNQICovCit9CisK Ky8qIFNldCBjb25zb2xlIGludGVycnVwdHMgKi8KKworVk9JRAorc2V0aW50KCkgeyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIEFjY29yZGluZyB0byBTRVQgQ09NTUFORCBJTlRFUlJV UCAqLworICAgIGludCB4ID0gMDsKKyAgICBpZiAoY21kaW50KSAgeCB8PSAxOworICAgIGlmICh4 c3VzcGVuZCkgeCB8PSAyOworICAgIGRlYnVnKEYxMDEsInNldGludCIsIiIseCk7CisKKyAgICBz d2l0Y2ggKHgpIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBTZXQgdGhlIGRlc2lyZWQgY29t YmluYXRpb24gKi8KKyAgICAgIGNhc2UgMDogY29ubm9pKCk7IGJyZWFrOyAgICAgICAgICAvKiBO byBpbnRlcnJ1cHRzICovCisgICAgICBjYXNlIDE6IGNvbmludCh0cmFwLFNJR19JR04pOyBicmVh azsKKyAgICAgIGNhc2UgMjogY29uaW50KFNJR19JR04sc3RwdHJhcCk7IGJyZWFrOworICAgICAg Y2FzZSAzOiBjb25pbnQodHJhcCxzdHB0cmFwKTsgYnJlYWs7CisgICAgfQorICAgIGJnY2hrKCk7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENoZWNrIGJhY2tncm91bmQgc3RhdHVzICov Cit9CisKKyNpZmRlZiBERUJVRworLyogIEQgRSBCIFUgRyAgLS0gIEVudGVyIGEgcmVjb3JkIGlu IHRoZSBkZWJ1Z2dpbmcgbG9nICAqLworCisvKgorIENhbGwgd2l0aCBhIGZvcm1hdCwgdHdvIHN0 cmluZ3MsIGFuZCBhIG51bWJlcjoKKyAgIGYgIC0gRm9ybWF0LCBhIGJpdCBzdHJpbmcgaW4gcmFu Z2UgMC03LgorICAgICAgICBJZiBiaXQgeCBpcyBvbiwgdGhlbiBhcmd1bWVudCBudW1iZXIgeCBp cyBwcmludGVkLgorICAgczEgLSBTdHJpbmcsIGFyZ3VtZW50IG51bWJlciAxLiAgSWYgc2VsZWN0 ZWQsIHByaW50ZWQgYXMgaXMuCisgICBzMiAtIFN0cmluZywgYXJndW1lbnQgbnVtYmVyIDIuICBJ ZiBzZWxlY3RlZCwgcHJpbnRlZCBpbiBicmFja2V0cy4KKyAgIG4gIC0gTG9uZyBpbnQsIGFyZ3Vt ZW50IDMuICBJZiBzZWxlY3RlZCwgcHJpbnRlZCBwcmVjZWRlZCBieSBlcXVhbHMgc2lnbi4KKwor ICAgZj0wIGlzIHNwZWNpYWw6IHByaW50IHMxLHMyLCBhbmQgaW50ZXJwcmV0IG4gYXMgYSBjaGFy LgorCisgICBmPUYwMTEgKDMpIGlzIGFsc28gc3BlY2lhbDsgaW4gdGhpcyBjYXNlIHMyIGlzIGlu dGVycGV0ZWQgYXMgYSBjb3VudGVkCisgICBzdHJpbmcgdGhhdCBtaWdodCBjb250YWluIE5VTHMu ICBuIGlzIHRoZSBsZW5ndGguICBJZiBuIGlzIG5lZ2F0aXZlLCB0aGlzCisgICBtZWFucyB0aGUg c3RyaW5nIGhhcyBiZWVuIHRydW5jYXRlZCBhbmQgIi4uIiBzaG91bGQgYmUgcHJpbnRlZCBhZnRl ciB0aGUKKyAgIGZpcnN0IG4gYnl0ZXMuICBOVUwgYW5kIExGIGJ5dGVzIGFyZSBwcmludGVkIGFz ICI8TlVMPiIgYW5kICI8TEY+Ii4KKworICAgR2xvYmFsczoKKyAgICAgZGVibG9nOiBub256ZXJv IGlmIGRlYnVnIGxvZyBvcGVuLgorICAgICBkZWJvazogIG5vbnplcm8gaWYgb2sgdG8gd3JpdGUg ZW50cmllcy4KKyovCisvKgorICBXQVJOSU5HOiBEb24ndCBjaGFuZ2UgREVCVUZMIHdpdGhvdXQg Y2hhbmdpbmcgc3ByaW50ZigpIGZvcm1hdHMgYmVsb3csCisgIGFjY29yZGluZ2x5LgorKi8KKyNk ZWZpbmUgREJVRkwgNDAwMAorLyoKKyAgV0FSTklORzogVGhpcyByb3V0aW5lIGlzIG5vdCB0aHJl YWQtc2FmZSwgZXNwZWNpYWxseSB3aGVuIEtlcm1pdCBpcworICBleGVjdXRpbmcgb24gbXVsdGlw bGUgQ1BVcyAtLSBhcyBkaWZmZXJlbnQgdGhyZWFkcyB3cml0ZSB0byB0aGUgc2FtZQorICBzdGF0 aWMgYnVmZmVyLCB0aGUgZGVidWcgc3RhdGVtZW50cyBhcmUgYWxsIGludGVybGVhdmVkLiAgVG8g YmUgZml4ZWQKKyAgbGF0ZXIuLi4KKyovCitzdGF0aWMgY2hhciAqZGJwdHIgPSAoY2hhciAqKTA7 CisKK2ludAorI2lmZGVmIENLX0FOU0lDCitkb2RlYnVnKGludCBmLCBjaGFyICpzMSwgY2hhciAq czIsIENLX09GRl9UIG4pCisjZWxzZQorZG9kZWJ1ZyhmLHMxLHMyLG4pIGludCBmOyBjaGFyICpz MSwgKnMyOyBDS19PRkZfVCBuOworI2VuZGlmIC8qIENLX0FOU0lDICovCisvKiBkb2RlYnVnICov IHsKKyAgICBjaGFyICpzcDsKKyAgICBpbnQgbGVuMSwgbGVuMjsKKyAgICBleHRlcm4gaW50IGRl YnRpbTsKKyNpZmRlZiBPUzIKKyAgICBleHRlcm4gaW50IFN5c0luaXRlZDsKKyNlbmRpZiAvKiBP UzIgKi8KKworICAgIGlmICghZGVibG9nIHx8ICFkZWJvaykKKyAgICAgIHJldHVybigwKTsKKwor I2lmZGVmIENPTU1FTlQKKyAgICAvKiBleHBlbnNpdmUuLi4gKi8KKyAgICBpZiAoIWNoa2ZuKFpE RklMRSkpCQkJLyogRGVidWcgbG9nIG5vdCBvcGVuLCBkb24ndC4gKi8KKyAgICAgIHJldHVybigw KTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgaWYgKCFkYnB0cikgeyAgICAgICAgICAgICAg ICAgICAgICAgLyogQWxsb2NhdGUgbWVtb3J5IGJ1ZmZlciAqLworICAgICAgICBkYnB0ciA9IG1h bGxvYyhEQlVGTCs0KTsgICAgICAgIC8qIFRoaXMgb25seSBoYXBwZW5zIG9uY2UgKi8KKyAgICAg ICAgaWYgKCFkYnB0cikgeworICAgICAgICAgICAgemNsb3NlKFpERklMRSk7CisgICAgICAgICAg ICByZXR1cm4oMCk7CisgICAgICAgIH0KKyAgICB9CisvKgorICBUaGlzIHByZXZlbnRzIGluZmlu aXRlIHJlY3Vyc2lvbiBpbiBjYXNlIHdlIGFjY2lkZW50YWxseSBwdXQgYSBkZWJ1ZygpCisgIGNh bGwgaW4gdGhpcyByb3V0aW5lLCBvciBjYWxsIGFub3RoZXIgcm91dGluZSB0aGF0IGNvbnRhaW5z IGRlYnVnKCkgY2FsbHMuCisgIEZyb20gdGhpcyBwb2ludCBvbiwgYWxsIHJldHVybnMgZnJvbSB0 aGlzIHJldHVybiBtdXN0IGJlIHZpYSBnb3RvIHhkZWJ1ZywKKyAgd2hpY2ggc2V0cyBkZWJsb2cg YmFjayB0byAxLgorKi8KKyNpZmRlZiBPUzIKKyAgICBpZiAoU3lzSW5pdGVkKSB7CisJaWYgKFJl cXVlc3REZWJ1Z011dGV4KDMwMDAwKSkKKwkgICAgZ290byB4ZGVidWc7CisgICAgfQorI2Vsc2Ug LyogT1MyICovCisgICAgZGVibG9nID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogUHJl dmVudCBpbmZpbml0ZSByZWN1cnNpb24gKi8KKyNlbmRpZiAvKiBPUzIgKi8KKworICAgIGlmIChk ZWJ0aW0pIHsgICAgICAgICAgICAgICAgICAgICAgIC8qIFRpbWVzdGFtcCAqLworICAgICAgICBj aGFyICp0YiwgdHNidWZbNDhdOworICAgICAgICB6dGltZSgmdGIpOworICAgICAgICBja3N0cm5j cHkodHNidWYsdGIsMzIpOworICAgICAgICBpZiAoenRtc2VjID4gLTFMKSB7CisJICAgIHNwcmlu dGYodHNidWYrMTksIi4lMDNsZCAiLHp0bXNlYyk7IC8qIFNBRkUgKi8KKwl9IGVsc2UgeworCSAg ICB0c2J1ZlsxOV0gPSAnOic7CisJICAgIHRzYnVmWzIwXSA9IFNQOworCSAgICB0c2J1ZlsyMV0g PSBOVUw7CisJfQorICAgICAgICB6c291dChaREZJTEUsdHNidWYrMTEpOworICAgIH0KKyAgICBp ZiAoIXMxKSBzMT0iKE5VTEwpIjsKKyAgICBpZiAoIXMyKSBzMj0iKE5VTEwpIjsKKworICAgIGxl bjEgPSBzdHJsZW4oczEpOworICAgIGxlbjIgPSBzdHJsZW4oczIpOworCisjaWZkZWYgQ09NTUVO VAorLyoKKyAgVGhpcyBzaG91bGQgd29yaywgYnV0IGl0IGRvZXNuJ3QuCisgIFNvIGluc3RlYWQg d2UnbGwgY29wZSB3aXRoIG92ZXJmbG93IHZpYSBzcHJpbnRmIGZvcm1hdHMuCisgIE4uQi46IFVO Rk9SVFVOQVRFTFksIHRoaXMgbWVhbnMgd2UgaGF2ZSB0byBwdXQgY29uc3RhbnRzIGluIHRoZQor ICBzcHJpbnRmIGZvcm1hdHMuCisqLworICAgIGlmIChmICE9IEYwMTEgJiYgKCFmIHx8IChmICYg NikpKSB7IC8qIFN0cmluZyBhcmd1bWVudChzKSBpbmNsdWRlZD8gKi8KKyAgICAgICAgeCA9IChp bnQpIHN0cmxlbihzMSkgKyAoaW50KSBzdHJsZW4oczIpICsgMTg7CisgICAgICAgIGlmICh4ID4g ZGJ1ZmwpIHsgICAgICAgICAgICAgICAgLyogTG9uZ2VyIHRoYW4gYnVmZmVyPyAqLworICAgICAg ICAgICAgaWYgKGRicHRyKSAgICAgICAgICAgICAgICAgIC8qIFllcywgZnJlZSBwcmV2aW91cyBi dWZmZXIgKi8KKyAgICAgICAgICAgICAgZnJlZShkYnB0cik7CisgICAgICAgICAgICBkYnB0ciA9 IChjaGFyICopIG1hbGxvYyh4ICsgMik7IC8qIEFsbG9jYXRlIGEgbmV3IG9uZSAqLworICAgICAg ICAgICAgaWYgKCFkYnB0cikgeworICAgICAgICAgICAgICAgIHpzb3V0bChaREZJTEUsIkRFQlVH OiBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlIik7CisgICAgICAgICAgICAgICAgZGVibG9nID0g MDsKKyAgICAgICAgICAgICAgICB6Y2xvc2UoWkRGSUxFKTsKKyAgICAgICAgICAgICAgICBnb3Rv IHhkZWJ1ZzsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZGJ1ZmwgPSB4 OworICAgICAgICAgICAgICAgIHNwcmludGYoZGJwdHIsIkRFQlVHOiBCdWZmZXIgZXhwYW5kZWQg dG8gJWRcbiIsIHggKyAxOCk7CisgICAgICAgICAgICAgICAgenNvdXRsKFpERklMRSxkYnB0cik7 CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgLyogQ09NTUVOVCAqLwor CisjaWZkZWYgQ09NTUVOVAorLyogVGhlIGFmb3JlbWVudGlvbmVkIHNwcmludGYoKSBmb3JtYXRz IHdlcmUgbGlrZSB0aGlzOiAqLworICAgICAgICBpZiAobiA+IDMxICYmIG4gPCAxMjcpCisgICAg ICAgICAgc3ByaW50ZihzcCwiJS4xMDBzJS4yMDAwczolY1xuIixzMSxzMiwoQ0hBUikgbik7Cisg ICAgICAgIGVsc2UgaWYgKG4gPCAzMiB8fCBuID09IDEyNykKKyAgICAgICAgICBzcHJpbnRmKHNw LCIlLjEwMHMlLjIwMDBzOl4lY1xuIixzMSxzMiwoQ0hBUikgKChuKzY0KSAmIDB4N0YpKTsKKyAg ICAgICAgZWxzZSBpZiAobiA+IDEyNyAmJiBuIDwgMTYwKQorICAgICAgICAgIHNwcmludGYoc3As IiUuMTAwcyUuMjAwMHM6fl4lY1xuIixzMSxzMiwoQ0hBUikoKG4tNjQpICYgMHg3RikpOworICAg ICAgICBlbHNlIGlmIChuID4gMTU5ICYmIG4gPCAyNTYpCisgICAgICAgICAgc3ByaW50ZihzcCwi JS4xMDBzJS4yMDAwczp+JWNcbiIsczEsczIsKENIQVIpIChuICYgMHg3RikpOworICAgICAgICBl bHNlIHNwcmludGYoc3AsIiUuMTAwcyUuMjAwMHM6JWxkXG4iLHMxLHMyLG4pOworLyoKKyAgQnV0 LCBuYXR1cmFsbHksIGl0IHR1cm5zIG91dCB0aGVzZSBhcmUgbm90IHBvcnRhYmxlIGVpdGhlciwg c28gbm93CisgIHdlIGRvIHRoZSBzdHVwaWRlc3QgcG9zc2libGUgdGhpbmcuCisqLworI2VuZGlm IC8qIENPTU1FTlQgKi8KKworI2lmZGVmIEJJR0JVRk9LCisvKiBOZWVkIHRvIGFjY2VwdCBsb25n ZXIgc3RyaW5ncyB3aGVuIGRlYnVnZ2luZyBhdXRoZW50aWNhdGVkIGNvbm5lY3Rpb25zICovCisg ICAgaWYgKGYgPT0gRjAxMCkgeworICAgICAgICBpZiAobGVuMiArIDIgPj0gREJVRkwpIHMyID0g IihzdHJpbmcgdG9vIGxvbmcpIjsKKyAgICB9IGVsc2UgaWYgKGYgIT0gRjAxMSAmJiBmICE9IEYx MDApIHsKKyAgICAgICAgaWYgKGxlbjEgPiAxMDApIHMxID0gIihzdHJpbmcgdG9vIGxvbmcpIjsK KyAgICAgICAgaWYgKGxlbjIgKyAxMDEgPj0gREJVRkwpIHMyID0gIihzdHJpbmcgdG9vIGxvbmcp IjsKKyAgICB9CisjZWxzZQorICAgIGlmIChmICE9IEYwMTEpIHsKKyAgICAgICAgaWYgKGxlbjEg PiAxMDApIHMxID0gIihzdHJpbmcgdG9vIGxvbmcpIjsKKyAgICAgICAgaWYgKGxlbjIgKyAxMDEg Pj0gREJVRkwpIHMyID0gIihzdHJpbmcgdG9vIGxvbmcpIjsKKyAgICB9CisjZW5kaWYgLyogQklH QlVGT0sgKi8KKworICAgIHNwID0gZGJwdHI7CisKKyAgICBzd2l0Y2ggKGYpIHsgICAgICAgICAg ICAgICAgLyogV3JpdGUgbG9nIHJlY29yZCBhY2NvcmRpbmcgdG8gZm9ybWF0LiAqLworICAgICAg Y2FzZSBGMDAwOiAgICAgICAgICAgICAgICAvKiAwID0gcHJpbnQgYm90aCBzdHJpbmdzLCBhbmQg biBhcyBhIGNoYXIuICovCisgICAgICAgIGlmIChsZW4yID4gMCkgeworICAgICAgICAgICAgaWYg KChuID4gMzEgJiYgbiA8IDEyNykgfHwgKG4gPiAxNTkgJiYgbiA8IDI1NikpCisgICAgICAgICAg ICAgIHNwcmludGYoc3AsIiVzWyVzXT0lY1xuIixzMSxzMiwoQ0hBUikgbik7CisgICAgICAgICAg ICBlbHNlIGlmIChuIDwgMzIgfHwgbiA9PSAxMjcpCisgICAgICAgICAgICAgIHNwcmludGYoc3As IiVzWyVzXT1eJWNcbiIsczEsczIsKENIQVIpICgobis2NCkgJiAweDdGKSk7CisgICAgICAgICAg ICBlbHNlIGlmIChuID4gMTI3ICYmIG4gPCAxNjApCisgICAgICAgICAgICAgIHNwcmludGYoc3As IiVzWyVzXT1+XiVjXG4iLHMxLHMyLChDSEFSKSgobi02NCkgJiAweDdGKSk7CisgICAgICAgICAg ICBlbHNlIHNwcmludGYoc3AsIiVzWyVzXT0weCVsWFxuIixzMSxzMiwobG9uZyluKTsKKyAgICAg ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICgobiA+IDMxICYmIG4gPCAxMjcpIHx8IChuID4g MTU5ICYmIG4gPCAyNTYpKQorICAgICAgICAgICAgICBzcHJpbnRmKHNwLCIlcz0lY1xuIixzMSwo Q0hBUikgbik7CisgICAgICAgICAgICBlbHNlIGlmIChuIDwgMzIgfHwgbiA9PSAxMjcpCisgICAg ICAgICAgICAgIHNwcmludGYoc3AsIiVzPV4lY1xuIixzMSwoQ0hBUikgKChuKzY0KSAmIDB4N0Yp KTsKKyAgICAgICAgICAgIGVsc2UgaWYgKG4gPiAxMjcgJiYgbiA8IDE2MCkKKyAgICAgICAgICAg ICAgc3ByaW50ZihzcCwiJXM9fl4lY1xuIixzMSwoQ0hBUikoKG4tNjQpICYgMHg3RikpOworICAg ICAgICAgICAgZWxzZSBzcHJpbnRmKHNwLCIlcz0weCVsWFxuIixzMSwobG9uZyluKTsKKyAgICAg ICAgfQorICAgICAgICBpZiAoenNvdXQoWkRGSUxFLGRicHRyKSA8IDApIHsKKyAgICAgICAgICAg IGRlYmxvZyA9IDA7CisgICAgICAgICAgICB6Y2xvc2UoWkRGSUxFKTsKKyAgICAgICAgfQorI2lm ZGVmIENLU1lTTE9HCisgICAgICAgIGlmIChja3hzeXNsb2cgPj0gU1lTTEdfREIgJiYgY2t4bG9n Z2luZykgeworICAgICAgICAgICAgY2tzeXNsb2coU1lTTEdfREIsMSwiZGVidWciLGRicHRyLE5V TEwpOworICAgICAgICB9CisjZW5kaWYgLyogQ0tTWVNMT0cgKi8KKyAgICAgICAgYnJlYWs7CisK KyAgICAgIGNhc2UgRjAwMTogICAgICAgICAgICAgICAgICAgICAgICAvKiAxLCAiPW4iICovCisj aWZkZWYgQ09NTUVOVAorICAgICAgICAvKiBUaGlzIHdhcyBuZXZlciB1c2VkICovCisgICAgICAg IHNwcmludGYoc3AsIj0lc1xuIixja2ZzdG9hKG4pKTsKKyNlbHNlCisgICAgICAgIC8qIExpa2Ug RjExMSwgYnV0IHNob3dzIG51bWJlciBuIGluIGhleCAqLworCWNrbWFreG1zZyhzcCxEQlVGTCwK KwkJICBzMSwKKwkJICAoKnMxID8gIjoiIDogIiIpLAorCQkgIHMyLAorCQkgICgqczIgPyAiOiIg OiAiIiksCisJCSAgY2tsdG94KG4pLAorCQkgICJcbiIsCisJCSAgTlVMTCxOVUxMLE5VTEwsTlVM TCxOVUxMLE5VTEwKKwkJICApOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAgaWYgKHpz b3V0KFpERklMRSxkYnB0cikgPCAwKSB7CisgICAgICAgICAgICBkZWJsb2cgPSAwOworICAgICAg ICAgICAgemNsb3NlKFpERklMRSk7CisgICAgICAgIH0KKyNpZmRlZiBDS1NZU0xPRworICAgICAg ICBpZiAoY2t4c3lzbG9nID49IFNZU0xHX0RCICYmIGNreGxvZ2dpbmcpIHsKKyAgICAgICAgICAg IGNrc3lzbG9nKFNZU0xHX0RCLDEsImRlYnVnIixkYnB0cixOVUxMKTsKKyAgICAgICAgfQorI2Vu ZGlmIC8qIENLU1lTTE9HICovCisgICAgICAgIGJyZWFrOworCisvKgorICBUaGlzIG9uZSB3YXMg bmV2ZXIgdXNlZCBzbyAoT2N0b2JlciAyMDAwKSB3ZSBub3cgdXNlIGl0IGxpa2UgRjAxMSwKKyAg ZXhjZXB0IGluIHRoaXMgY2FzZSB3ZSB0cmVhdCBzMiBhcyBOVUwgdGVybWluYXRlZC4KKyovCisg ICAgICBjYXNlIEYwMTA6CisJbiA9IC1kZWJ4bGVuOworLyoKKyAgVGhpcyBvbmUgdHJlYXRzIG4g YXMgdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nIHMyLCB3aGljaCBtYXkgY29udGFpbiBOVUxzLgor ICBJdCdzIGdvb2QgZm9yIGxvZ2dpbmcgTlVMLWJlYXJpbmcgZGF0YSBpbiB0aGUgZGVidWcgbG9n LgorKi8KKyAgICAgIGNhc2UgRjAxMTogeworCSAgaW50IGksIGosIGNvbnRkID0gMDsKKwkgIGNo YXIgKiBwID0gczIsICpwYnVmID0gTlVMTDsJLyogcCA9IHNvdXJjZSBwb2ludGVyICovCisJICBp bnQgbTsJCQkvKiBwYnVmID0gZGVzdGluYXRpb24gcG9pbnRlciAqLworCisJICBpZiAoZiA9PSBG MDExKSB7CisJICAgICAgaWYgKG4gPCAwKSB7CQkvKiBuID0gc2l6ZSBvZiBzb3VyY2UgKi8KKwkJ ICBuID0gMCAtIG47CQkvKiBOZWdhdGl2ZSBtZWFucyB0byBhZGQgIi4uLiIgKi8KKwkJICBjb250 ZCA9IDE7CisJICAgICAgfQorCSAgfSBlbHNlIHsKKwkgICAgICBpbnQgeCwgZmxhZyA9IDA7CisJ ICAgICAgeCA9IHN0cmxlbihzMik7CisJICAgICAgaWYgKG4gPCAwKSB7CisJCSAgZmxhZyA9IDE7 CisJCSAgbiA9IDAgLSBuOworCSAgICAgIH0KKwkgICAgICBpZiAoeCA8IG4pCisJCW4gPSB4Owor CSAgfQorCSAgaWYgKG4gPT0gMCkJCQkvKiAwIG1lYW5zIGRvIG5vdGhpbmcgKi8KKwkgICAgZ290 byB4ZGVidWc7CisJICBtID0gREJVRkwgLSA4OwkJLyogR2V0IHNpemUgZm9yIGludGVycHJldGVk IHBhcnQgKi8KKwkgIGlmIChuID4gbSkJCQkvKiBFbnN1cmUgcmVxdWVzdGVkIHNpemUgbm90IHRv byBiaWcgKi8KKwkgICAgbiA9IG07CisJICBwYnVmID0gZGJwdHI7CQkJLyogQ29uc3RydWN0aW9u IHBvaW50ZXIgKi8KKwkgIGkgPSAwOworCSAgcGJ1ZltpKytdID0gJ1snOwkJLyogSW50ZXJwcmV0 IHRoZSBzdHJpbmcgaW50byBpdCAqLworCSAgZm9yIChqID0gMDsgaiA8IG4gJiYgaSA8IG0tNDsg cCsrLGorKykgeyAvKiBjaGFyIGJ5IGNoYXIuLi4gKi8KKwkgICAgICBpZiAoKnAgPT0gTEYpIHsK KwkJICBpZiAoaSA+PSBtLTQpCisJCSAgICBicmVhazsKKwkJICBwYnVmW2krK10gPSAnPCc7CisJ CSAgcGJ1ZltpKytdID0gJ0wnOworCQkgIHBidWZbaSsrXSA9ICdGJzsKKwkJICBwYnVmW2krK10g PSAnPic7CisJCSAgY29udGludWU7CisJICAgICAgfSBlbHNlIGlmICgqcCA9PSBDUikgeworCQkg IGlmIChpID49IG0tNCkKKwkJICAgIGJyZWFrOworCQkgIHBidWZbaSsrXSA9ICc8JzsKKwkJICBw YnVmW2krK10gPSAnQyc7CisJCSAgcGJ1ZltpKytdID0gJ1InOworCQkgIHBidWZbaSsrXSA9ICc+ JzsKKwkJICBjb250aW51ZTsKKwkgICAgICB9IGVsc2UgaWYgKCpwID09IEhUKSB7CisJCSAgaWYg KGkgPj0gbS01KQorCQkgICAgYnJlYWs7CisJCSAgcGJ1ZltpKytdID0gJzwnOworCQkgIHBidWZb aSsrXSA9ICdUJzsKKwkJICBwYnVmW2krK10gPSAnQSc7CisJCSAgcGJ1ZltpKytdID0gJ0InOwor CQkgIHBidWZbaSsrXSA9ICc+JzsKKwkJICBjb250aW51ZTsKKwkgICAgICB9IGVsc2UgaWYgKCpw KSB7CisJCSAgcGJ1ZltpKytdID0gKnA7CisJCSAgY29udGludWU7CisJICAgICAgfSBlbHNlIHsK KwkJICBpZiAoaSA+PSBtLTUpCisJCSAgICBicmVhazsKKwkJICBwYnVmW2krK10gPSAnPCc7CisJ CSAgcGJ1ZltpKytdID0gJ04nOworCQkgIHBidWZbaSsrXSA9ICdVJzsKKwkJICBwYnVmW2krK10g PSAnTCc7CisJCSAgcGJ1ZltpKytdID0gJz4nOworCQkgIGNvbnRpbnVlOworCSAgICAgIH0KKwkg IH0KKwkgIGlmIChpIDwgbS0yICYmICgqcCB8fCBjb250ZCkpIHsKKwkgICAgICBwYnVmW2krK10g PSAnLic7CisJICAgICAgcGJ1ZltpKytdID0gJy4nOworCSAgfQorCSAgcGJ1ZltpKytdID0gJ10n OworCSAgcGJ1ZltpXSA9IE5VTDsKKwkgIGlmICh6c291dChaREZJTEUsczEpIDwgMCkgeworCSAg ICAgIGRlYmxvZyA9IDA7CisJICAgICAgemNsb3NlKFpERklMRSk7CisJICB9CisJICBpZiAoenNv dXRsKFpERklMRSxwYnVmKSA8IDApIHsKKwkgICAgICBkZWJsb2cgPSAwOworCSAgICAgIHpjbG9z ZShaREZJTEUpOworCSAgfQorI2lmZGVmIENLU1lTTE9HCisJICBpZiAoY2t4c3lzbG9nID49IFNZ U0xHX0RCICYmIGNreGxvZ2dpbmcpIHsKKwkgICAgICBja3N5c2xvZyhTWVNMR19EQiwxLCJkZWJ1 ZyIsczEscGJ1Zik7CisJICB9CisjZW5kaWYgLyogQ0tTWVNMT0cgKi8KKyAgICAgICAgfQorICAg ICAgICBicmVhazsKKworICAgICAgY2FzZSBGMTAwOiAgICAgICAgICAgICAgICAgICAgICAgIC8q IDQsICJzMSIgKi8KKyAgICAgICAgaWYgKHpzb3V0bChaREZJTEUsczEpIDwgMCkgeworICAgICAg ICAgICAgZGVibG9nID0gMDsKKyAgICAgICAgICAgIHpjbG9zZShaREZJTEUpOworICAgICAgICB9 CisjaWZkZWYgQ0tTWVNMT0cKKyAgICAgICAgaWYgKGNreHN5c2xvZyA+PSBTWVNMR19EQiAmJiBj a3hsb2dnaW5nKSB7CisgICAgICAgICAgICBja3N5c2xvZyhTWVNMR19EQiwxLCJkZWJ1ZyIsczEs TlVMTCk7CisgICAgICAgIH0KKyNlbmRpZiAvKiBDS1NZU0xPRyAqLworICAgICAgICBicmVhazsK KyAgICAgIGNhc2UgRjEwMTogICAgICAgICAgICAgICAgICAgICAgICAvKiA1LCAiczE9biIgKi8K KyAgICAgICAgc3ByaW50ZihzcCwiJXM9JXNcbiIsczEsY2tmc3RvYShuKSk7CisgICAgICAgIGlm ICh6c291dChaREZJTEUsZGJwdHIpIDwgMCkgeworICAgICAgICAgICAgZGVibG9nID0gMDsKKyAg ICAgICAgICAgIHpjbG9zZShaREZJTEUpOworICAgICAgICB9CisjaWZkZWYgQ0tTWVNMT0cKKyAg ICAgICAgaWYgKGNreHN5c2xvZyA+PSBTWVNMR19EQiAmJiBja3hsb2dnaW5nKSB7CisgICAgICAg ICAgICBja3N5c2xvZyhTWVNMR19EQiwxLCJkZWJ1ZyIsZGJwdHIsTlVMTCk7CisgICAgICAgIH0K KyNlbmRpZiAvKiBDS1NZU0xPRyAqLworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRjExMDog ICAgICAgICAgICAgICAgICAgICAgICAvKiA2LCAiczFbczJdIiAqLworICAgICAgICBzcHJpbnRm KHNwLCIlc1slc11cbiIsczEsczIpOworICAgICAgICBpZiAoenNvdXQoWkRGSUxFLGRicHRyKSA8 IDApIHsKKyAgICAgICAgICAgIGRlYmxvZyA9IDA7CisgICAgICAgICAgICB6Y2xvc2UoWkRGSUxF KTsKKyAgICAgICAgfQorI2lmZGVmIENLU1lTTE9HCisgICAgICAgIGlmIChja3hzeXNsb2cgPj0g U1lTTEdfREIgJiYgY2t4bG9nZ2luZykgeworICAgICAgICAgICAgY2tzeXNsb2coU1lTTEdfREIs MSwiZGVidWciLGRicHRyLE5VTEwpOworICAgICAgICB9CisjZW5kaWYgLyogQ0tTWVNMT0cgKi8K KyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEYxMTE6ICAgICAgICAgICAgICAgICAgICAgICAg LyogNywgInMxW3MyXT1uIiAqLworICAgICAgICBzcHJpbnRmKHNwLCIlc1slc109JXNcbiIsczEs czIsY2tmc3RvYShuKSk7CisgICAgICAgIGlmICh6c291dChaREZJTEUsZGJwdHIpIDwgMCkgewor ICAgICAgICAgICAgZGVibG9nID0gMDsKKyAgICAgICAgICAgIHpjbG9zZShaREZJTEUpOworICAg ICAgICB9CisjaWZkZWYgQ0tTWVNMT0cKKyAgICAgICAgaWYgKGNreHN5c2xvZyA+PSBTWVNMR19E QiAmJiBja3hsb2dnaW5nKSB7CisgICAgICAgICAgICBja3N5c2xvZyhTWVNMR19EQiwxLCJkZWJ1 ZyIsZGJwdHIsTlVMTCk7CisgICAgICAgIH0KKyNlbmRpZiAvKiBDS1NZU0xPRyAqLworICAgICAg ICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHNwcmludGYoc3AsIlxuP0ludmFsaWQg Zm9ybWF0IGZvciBkZWJ1ZygpIC0gJWRcbiIsZik7CisgICAgICAgIGlmICh6c291dChaREZJTEUs ZGJwdHIpIDwgMCkgeworICAgICAgICAgICAgZGVibG9nID0gMDsKKyAgICAgICAgICAgIHpjbG9z ZShaREZJTEUpOworICAgICAgICB9CisjaWZkZWYgQ0tTWVNMT0cKKyAgICAgICAgaWYgKGNreHN5 c2xvZyA+PSBTWVNMR19EQiAmJiBja3hsb2dnaW5nKSB7CisgICAgICAgICAgICBja3N5c2xvZyhT WVNMR19EQiwxLCJkZWJ1ZyIsZGJwdHIsTlVMTCk7CisgICAgICAgIH0KKyNlbmRpZiAvKiBDS1NZ U0xPRyAqLworICAgICAgICBicmVhazsKKyAgICB9CisgIHhkZWJ1ZzogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogQ29tbW9uIGV4aXQgcG9pbnQgKi8KKyNpZmRlZiBPUzIKKyAgICBp ZiAoU3lzSW5pdGVkKQorCVJlbGVhc2VEZWJ1Z011dGV4KCk7CisjZWxzZSAvKiBPUzIgKi8KKyAg ICBkZWJsb2cgPSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXN0b3JlIHRoaXMgKi8K KyNlbmRpZiAvKiBPUzIgKi8KKyAgICByZXR1cm4oMCk7Cit9CisKK2ludAorI2lmZGVmIENLX0FO U0lDCitkb2hleGR1bXAoQ0hBUiAqbXNnLCBDSEFSICpzdCwgaW50IGNudCkKKyNlbHNlCitkb2hl eGR1bXAobXNnLHN0LGNudCkgQ0hBUiAqbXNnOyBDSEFSICpzdDsgaW50IGNudDsKKyNlbmRpZiAv KiBDS19BTlNJQyAqLworLyogZG9oZXhkdW1wICovIHsKKyAgICBpbnQgaSA9IDAsIGogPSAwLCBr ID0gMDsKKyAgICBjaGFyIHRtcFs4XTsKKyNpZmRlZiBPUzIKKyAgICBleHRlcm4gaW50IFN5c0lu aXRlZDsKKyNlbmRpZiAvKiBPUzIgKi8KKworICAgIGlmICghZGVibG9nKSByZXR1cm4oMCk7CQkv KiBJZiBubyBkZWJ1ZyBsb2csIGRvbid0LiAqLworICAgIGlmICghZGJwdHIpIHsgICAgICAgICAg ICAgICAgICAgICAgIC8qIEFsbG9jYXRlIG1lbW9yeSBidWZmZXIgKi8KKyAgICAgICAgZGJwdHIg PSBtYWxsb2MoREJVRkwrMSk7ICAgICAgICAvKiBUaGlzIG9ubHkgaGFwcGVucyBvbmNlICovCisg ICAgICAgIGlmICghZGJwdHIpIHsKKyAgICAgICAgICAgIGRlYmxvZyA9IDA7CisgICAgICAgICAg ICB6Y2xvc2UoWkRGSUxFKTsKKyAgICAgICAgICAgIHJldHVybigwKTsKKyAgICAgICAgfQorICAg IH0KKworI2lmZGVmIE9TMgorICAgIGlmIChTeXNJbml0ZWQpIHsKKwlpZiAoUmVxdWVzdERlYnVn TXV0ZXgoMzAwMDApKQorCSAgICBnb3RvIHhkZWJ1ZzsKKyAgICB9CisjZWxzZSAvKiBPUzIgKi8K KyAgICBkZWJsb2cgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQcmV2ZW50IGluZmlu aXRlIHJlY3Vyc2lvbiAqLworI2VuZGlmIC8qIE9TMiAqLworCisgICAgaWYgKG1zZyAhPSBOVUxM KSB7CisJY2ttYWt4bXNnKGRicHRyLAorCQkgIERCVUZMLAorCQkgICJIRVhEVU1QOiAiLAorCQkg IChjaGFyICopbXNnLAorCQkgICIgKCIsCisJCSAgY2tpdG9hKGNudCksCisJCSAgIiBieXRlcylc biIsCisJCSAgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTAorCQkgKTsKKyAgICAg ICAgaWYgKHpzb3V0KFpERklMRSxkYnB0cikgPCAwKSB7CisgICAgICAgICAgICBkZWJsb2cgPSAw OworICAgICAgICAgICAgemNsb3NlKFpERklMRSk7CisJICAgIGdvdG8geGRlYnVnOworICAgICAg ICB9CisgICAgfSBlbHNlIHsKKwlja21ha21zZyhkYnB0ciwKKwkJIERCVUZMLAorCQkgIkhFWERV TVA6ICgiLAorCQkgY2tpdG9hKGNudCksCisJCSAiIGJ5dGVzKVxuIiwKKwkJIE5VTEwKKwkJICk7 CisgICAgICAgIHpzb3V0KFpERklMRSxkYnB0cik7CisgICAgICAgIGlmICh6c291dChaREZJTEUs ZGJwdHIpIDwgMCkgeworICAgICAgICAgICAgZGVibG9nID0gMDsKKyAgICAgICAgICAgIHpjbG9z ZShaREZJTEUpOworCSAgICBnb3RvIHhkZWJ1ZzsKKyAgICAgICAgfQorICAgIH0KKyAgICBmb3Ig KGkgPSAwOyBpIDwgY250OyBpKyspIHsKKyAgICAgICAgZGJwdHJbMF0gPSAnXDAnOworICAgICAg ICBmb3IgKGogPSAwIDsgKGogPCAxNik7IGorKykgeworICAgICAgICAgICAgaWYgKChpICsgaikg PCBjbnQpCisJICAgICAgc3ByaW50Zih0bXAsCisJCSAgICAgICIlcyUwMnggIiwKKwkJICAgICAg KGogPT0gOCA/ICJ8ICIgOiAiIiksCisJCSAgICAgIChDSEFSKSBzdFtpICsgal0KKwkJICAgICAg KTsKKyAgICAgICAgICAgIGVsc2UKKwkgICAgICBzcHJpbnRmKHRtcCwKKwkJICAgICAgIiVzICAg IiwKKwkJICAgICAgKGogPT0gOCA/ICJ8ICIgOiAiIikKKwkJICAgICAgKTsKKyAgICAgICAgICAg IGNrc3RybmNhdChkYnB0cix0bXAsREJVRkwrMSk7CisgICAgICAgIH0KKyAgICAgICAgY2tzdHJu Y2F0KGRicHRyLCIgIixEQlVGTCsxKTsKKyAgICAgICAgZm9yIChrID0gMDsgKGsgPCAxNikgJiYg KChpICsgaykgPCBjbnQpOyBrKyspIHsKKyAgICAgICAgICAgIHNwcmludGYodG1wLAorICAgICAg ICAgICAgICAgICAgICAiJXMlYyIsCisgICAgICAgICAgICAgICAgICAgIChrID09IDggPyAiICIg OiAiIiksCisgICAgICAgICAgICAgICAgICAgIGlzcHJpbnQoc3RbaSArIGtdKSA/IHN0W2kgKyBr XSA6ICcuJworICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgY2tzdHJuY2F0KGRi cHRyLHRtcCxEQlVGTCsxKTsKKyAgICAgICAgfQorICAgICAgICBja3N0cm5jYXQoZGJwdHIsIlxu IixEQlVGTCsxKTsKKyAgICAgICAgaSArPSBqIC0gMTsKKyAgICAgICAgaWYgKHpzb3V0KFpERklM RSxkYnB0cikgPCAwKSB7CisgICAgICAgICAgICBkZWJsb2cgPSAwOworICAgICAgICAgICAgemNs b3NlKFpERklMRSk7CisJICAgIGdvdG8geGRlYnVnOworICAgICAgICB9CisgICAgfSAvKiBlbmQg Zm9yICovCisKKworICB4ZGVidWc6CisjaWZkZWYgT1MyCisgICAgaWYgKFN5c0luaXRlZCkKKyAg ICAgIFJlbGVhc2VEZWJ1Z011dGV4KCk7CisjZWxzZSAvKiBPUzIgKi8KKyAgICBkZWJsb2cgPSAx OworI2VuZGlmIC8qIE9TMiAqLworICAgIHJldHVybigwKTsKK30KKyNlbmRpZiAvKiBERUJVRyAq LworCisvKiAgU2Vzc2lvbiBMb2cuLi4gKi8KKworaW50IHRzc3RhdGUgPSAwOworCitWT0lECisj aWZkZWYgT1MyCitsb2djaGFyKHVuc2lnbmVkIHNob3J0IGMpCisjZWxzZSAvKiBPUzIgKi8KKyNp ZmRlZiBDS19BTlNJQworbG9nY2hhcihjaGFyIGMpCisjZWxzZQorbG9nY2hhcihjKSBjaGFyIGM7 CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKy8qIGxvZ2NoYXIgKi8g eyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBMb2cgY2hhcmFjdGVyIGMgdG8gc2Vzc2lvbiBs b2cgKi8KKyAgICBleHRlcm4gaW50IHNsb2dudWw7CisgICAgaW50IG9rdG9sb2cgPSAwOworI2lm bmRlZiBOT0xPQ0FMCisgICAgaWYgKCFzZXNsb2cpCisgICAgICByZXR1cm47CisKKyAgICBpZiAo KHNlc3NmdCAhPSBYWUZUX1QpIHx8ICgKKyNpZmRlZiBVTklYCisJIGMgIT0gJ1xyJyAmJgorI2Vs c2UKKyNpZmRlZiBkYXRhZ2VuZXJhbAorCSBjICE9ICdccicgJiYKKyNlbHNlCisjaWZkZWYgU1RS QVRVUworCSBjICE9ICdccicgJiYKKyNlbHNlCisjaWZkZWYgQU1JR0EKKwkgYyAhPSAnXHInICYm CisjZWxzZQorI2lmZGVmIEdFTURPUworCSBjICE9ICdccicgJiYKKyNlbmRpZiAvKiBHRU1ET1Mg Ki8KKyNlbmRpZiAvKiBBTUlHQSAqLworI2VuZGlmIC8qIFNUUkFUVVMgKi8KKyNlbmRpZiAvKiBk YXRhZ2VuZXJhbCAqLworI2VuZGlmIC8qIFVOSVggKi8KKyNpZmRlZiBPU0sKKwkgYyAhPSAnXG4n ICYmCisjZWxzZQorI2lmZGVmIE1BQworCSBjICE9ICdcbicgJiYKKyNlbmRpZiAvKiBNQUMgKi8K KyNlbmRpZiAvKiBPU0sgKi8KKwkgYyAhPSBYT04gJiYKKwkgYyAhPSBYT0ZGKSkKKyAgICAgIG9r dG9sb2cgPSAxOworICAgIGlmIChjID09ICdcMCcgJiYgIXNlc3NmdCkJCS8qIE5VTCBpbiB0ZXh0 IG1vZGUgKi8KKyAgICAgIGlmIChzbG9nbnVsKSBva3RvbG9nID0gMTsJCS8qIG9ubHkgaWYgcGFk ZGluZyAoMjAwOS8xMC8yMikgKi8KKyAgICBpZiAoIW9rdG9sb2cpCisgICAgICByZXR1cm47Cisg ICAgaWYgKHNsb2d0cykgewkJCS8qIExvZyBpcyB0aW1lc3RhbXBlZCAqLworCWlmICh0c3N0YXRl ID09IDApIHsJCS8qIFN0YXRlID0gYmV0d2Vlbi1saW5lcyAqLworCSAgICBjaGFyICogcDsJCQkv KiB6c3RpbWUoKSBwb2ludGVyICovCisJICAgIGNoYXIgdHNbNDhdOwkJLyogdGltZXN0YW1wIGJ1 ZmZlciAqLworCSAgICB6dGltZSgmcCk7CQkJLyogR2V0IGFzY3RpbWUoKSBzdHJpbmcgKi8KKwkg ICAgY2tzdHJuY3B5KHRzLHAsMzIpOwkJLyogTWFrZSBzYWZlIGNvcHkgKi8KKwkgICAgaWYgKHp0 bXNlYyA+IC0xTCkgewkJLyogQWRkIG1zZWNzIGlmIHdlIGhhdmUgdGhlbSAqLworCQlzcHJpbnRm KCZ0c1sxOV0sIi4lMDNsZDogIix6dG1zZWMpOyAvKiBTQUZFICovCisJICAgIH0gZWxzZSB7CisJ CXRzWzE5XSA9ICc6JzsKKwkJdHNbMjBdID0gU1A7CisJCXRzWzIxXSA9IE5VTDsKKwkgICAgfQor CSAgICBpZiAoenNvdXQoWlNGSUxFLCZ0c1sxMV0pIDwgMCkKKwkgICAgICBnb3RvIHhsb2djaGFy OworCX0KKyAgICB9CisgICAgaWYgKGMgPT0gJ1xuJykJCQkvKiBBdCBlbmQgb2YgbGluZT8gKi8K KyAgICAgIHRzc3RhdGUgPSAwOwkJCS8qIHllcyAqLworICAgIGVsc2UKKyAgICAgIHRzc3RhdGUg PSAxOwkJCS8qIG5vICovCisgICAgaWYgKHpjaG91dChaU0ZJTEUsKENIQVIpKGMgJiAweEZGKSkg PCAwKSAvKiBMb2cgdGhlIGNoYXJhY3RlciAqLworICAgICAgZ290byB4bG9nY2hhcjsKKyAgICBp ZiAodHNzdGF0ZSA9PSAwICYmIHNsb2dudWwgIT0gMCkgewkvKiBOdWxsLXRlcm1pbmF0aW5nIGxp bmVzPyAqLworCWlmICh6Y2hvdXQoWlNGSUxFLChDSEFSKTApIDwgMCkJLyogQWRkIGEgTlVMICov CisJICBnb3RvIHhsb2djaGFyOworICAgIH0KKyAgICByZXR1cm47CisKKyAgeGxvZ2NoYXI6Cisg ICAgY29ub2xsKCIiKTsKKyAgICBjb25vbGwoIkVSUk9SIFdSSVRJTkcgU0VTU0lPTiBMT0csIExP RyBDTE9TRUQhIik7CisgICAgc2V0c2VzbG9nKDApOworICAgIHpjbG9zZShaU0ZJTEUpOworI2Vu ZGlmIC8qIE5PTE9DQUwgKi8KK30KKworVk9JRAorbG9nc3RyKHMsIGxlbikgY2hhciAqIHM7IGlu dCBsZW47IHsgICAgIC8qIExvZyBzdHJpbmcgdG8gc2Vzc2lvbiBsb2cgKi8KKyNpZm5kZWYgTk9M T0NBTAorICAgIGludCBuID0gMDsKKyAgICBpZiAoIXMpCisgICAgICByZXR1cm47CisgICAgd2hp bGUgKHNlc2xvZyAmJiAobiA8IGxlbikpCisgICAgICBsb2djaGFyKHNbbisrXSk7CisjZW5kaWYg LyogTk9MT0NBTCAqLworfQorCisjaWZkZWYgQ0tfQ1VSU0VTCitpbnQKK2NrX3JlcGFpbnQoKSB7 CisgICAgcmVwYWludCA9IDE7CisgICAgcmV0dXJuKDApOworfQorCisjaWZkZWYgU1RSQVRVUwor LyogVk9TIGhhcyBjdXJzZXMgYnV0IG5vIHRnZXRlbnQoKSAqLworaW50Cit0Z2V0ZW50KHMxLCBz MikgY2hhciAqIHMxLCAqIHMyOyB7CisgICAgcmV0dXJuKDEpOworfQorI2VuZGlmIC8qIFNUUkFU VVMgKi8KKworI2lmZGVmIFZNUworI2lmZGVmIF9fREVDQworX1BST1RPVFlQKGludCB0Z2V0ZW50 LChjaGFyICosIGNoYXIgKikpOworI2VuZGlmIC8qIF9fREVDQyAqLworI2VuZGlmIC8qIFZNUyAq LworCisvKgorICBUaGVyZSBhcmUgdGhyZWUgZGlmZmVyZW50IHdheXMgdG8gZG8gZnVsbHNjcmVl biBvbiBWTVMuCisgIDEuIFVzZSB0aGUgcmVhbCBjdXJzZXMgbGlicmFyeSwgVkFYQ0NVUlNFLgor ICAyLiBVc2UgZG8taXQteW91cnNlbGYgY29kZS4KKyAgMy4gVXNlIHRoZSBTY3JlZW4gTWFuYWdl ciwgU01HJC4KKworICBNZXRob2QgMSBkb2Vzbid0IHdvcmsgcXVpdGUgcmlnaHQ7IHlvdSBjYW4n dCBjYWxsIGVuZHdpbigpLCBzbyBvbmNlIHlvdSd2ZQorICBzdGFydGVkIGN1cnNlcyBtb2RlLCB5 b3UgY2FuIG5ldmVyIGxlYXZlLgorCisgIE1ldGhvZCAyIGRvZXNuJ3Qgb3B0aW1pemUgdGhlIHNj cmVlbiwgYW5kIHNvIG11Y2ggbW9yZSB0aW1lIGlzIHNwZW50IGluCisgIHNjcmVlbiB3cml0ZXMu ICBUaGlzIGFjdHVhbGx5IGNhdXNlcyBmaWxlIHRyYW5zZmVycyB0byBmYWlsIGJlY2F1c2UgdGhl CisgIHR0eSBkZXZpY2UgaW5wdXQgYnVmZmVyIGNhbiBiZSBvdmVycnVuIHdoaWxlIHRoZSBzY3Jl ZW4gaXMgYmVpbmcgdXBkYXRlZCwKKyAgZXNwZWNpYWxseSBvbiBhIHNsb3cgTWljcm9WQVggdGhh dCBoYXMgc21hbGwgdHlwZWFoZWFkIGJ1ZmZlcnMuCisKKyAgSW4gdGhlIGZvbGxvd2luZyAjaWZk ZWYgYmxvY2ssICNkZWZpbmUgb25lIG9mIHRoZW0gYW5kICN1bmRlZiB0aGUgb3RoZXIgMi4KKwor ICBTbyBub3cgbGV0J3MgdHJ5IG1ldGhvZCAzLi4uCisqLworI2lmZGVmIFZNUworI2RlZmluZSBD S19TTUcgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNjcmVlbiBNYW5hZ2VyICovCisjdW5k ZWYgTVlDVVJTRVMgICAgICAgICAgICAgICAgICAgICAgICAgLyogRG8taXQteW91cnNlbGYgKi8K KyN1bmRlZiBWTVNDVVJTRSAgICAgICAgICAgICAgICAgICAgICAgICAvKiBWQVhDQ1VSU0UgbGli cmFyeSAqLworI2VuZGlmIC8qIFZNUyAqLworLyoKKyAgQnV0IGp1c3QgYmVmb3JlIE5ldyBZZWFy cywgMjAwMCwgdGhlIFNNRyBsaWJyYXJ5IHNlZW1lZCB0byBicmVhayBvbgorICBib3RoIFZNUyBz eXN0ZW1zIHdlIGhhdmUgaGVyZSAoYW4gQWxwaGEgd2l0aCBWTVMgNy4xIGFuZCBhIFZBWCB3aXRo IDUuNSkuCisgIFNvIGJhY2sgdG8gTVlDVVJTRVMsIHdoaWNoIHdvcmtzIGZpbmUuCisqLworI2lm ZGVmIFZNUworI3VuZGVmIENLX1NNRworI2RlZmluZSBNWUNVUlNFUworI2VuZGlmIC8qIFZNUyAq LworCisjaWZkZWYgTVlDVVJTRVMKKyNkZWZpbmUgc3Rkc2NyIDAKKyNpZmRlZiBDS19XUkVGUkVT SAorI3VuZGVmIENLX1dSRUZSRVNICisjZW5kaWYgLyogQ0tfV1JFRlJFU0ggKi8KKyNlbmRpZiAv KiBNWUNVUlNFUyAqLworCisvKiAgUyBDIFIgRSBFIE4gQyAgLS0gIFNjcmVlbiBkaXNwbGF5IGZ1 bmN0aW9uLCB1c2VzIGN1cnNlcyAgKi8KKworLyogSWRlYSBmb3IgY3Vyc2VzIGRpc3BsYXkgY29u dHJpYnV0ZWQgYnkgQ2hyaXMgUHJhdHQgb2YgQVBWIEJha2VyLCBVSyAqLworCisvKiBBdm9pZCBj b25maWN0cyB3aXRoIGN1cnNlcy5oICovCisKKyNpZmRlZiBRTlgKKy8qIFNhbWUgYXMgY2tjYXNj LmgsIGJ1dCBpbiBhIGRpZmZlcmVudCByYWRpeC4uLiAqLworI2lmZGVmIEVTQworI3VuZGVmIEVT QworI2VuZGlmIC8qIEVTQyAqLworI2VuZGlmIC8qIFFOWCAqLworCisjaWZuZGVmIE1ZQ1VSU0VT CisjdW5kZWYgVk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVGhpcyB3YXMgZGVm aW5lZCBpbiBja2NkZWIuaCAqLworI2VuZGlmIC8qIE1ZQ1VSU0VTICovCisKKyN1bmRlZiBCUyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUaGVzZSB3ZXJlIGRlZmluZWQgaW4gY2tj YXNjLmggKi8KKyN1bmRlZiBDUgorI3VuZGVmIE5MCisjdW5kZWYgU08KKyNpZmRlZiBVUworI3Vu ZGVmIFVTCisjZW5kaWYJLyogVVMgKi8KKyN1bmRlZiBTUCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBVc2VkIGluIG5jdXJzZXMgKi8KKyNkZWZpbmUgQ0hSX1NQIDMyICAgICAgICAg ICAgICAgICAgICAgICAvKiBVc2UgdGhpcyBpbnN0ZWFkICovCisKKyNpZmRlZiBWTVMgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBWTVMgZnVsbHNjcmVlbiBkaXNwbGF5ICovCisjaWZk ZWYgTVlDVVJTRVMgICAgICAgICAgICAgICAgICAgICAgICAgLyogRG8taXQteW91cnNlbGYgbWV0 aG9kICovCitleHRlcm4gaW50IGlzdnQ1MjsgICAgICAgICAgICAgICAgICAgICAgLyogRnJvbSBD S1ZUSU8uQyAqLworI2RlZmluZSBwcmludHcgcHJpbnRmCisjZWxzZQorI2lmZGVmIFZNU0NVUlNF ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFZNUyBjdXJzZXMgbGlicmFyeSBWQVhDQ1VSU0Ug Ki8KKyNpbmNsdWRlIDxjdXJzZXMuaD4KKy8qIE5vdGU6IFNjcmVlbiBtYW5hZ2VyIGRvZXNuJ3Qg bmVlZCBhIGhlYWRlciBmaWxlICovCisjZW5kaWYgLyogVk1TQ1VSU0UgKi8KKyNlbmRpZiAvKiBN WUNVUlNFUyAqLworI2Vsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5v dCBWTVMgKi8KKyNpZmRlZiBNWUNVUlNFUyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEby1p dC15b3Vyc2VsZiBtZXRob2QgKi8KKyNkZWZpbmUgaXN2dDUyIDAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBVc2VkIGJ5IE9TLzIsIFZULTEwMC9BTlNJIGFsd2F5cyAqLworI2lmZGVmIENLWFBS SU5URgorI2RlZmluZSBwcmludHcgY2t4cHJpbnRmCisjZWxzZSAvKiBDS1hQUklOVEYgKi8KKyNp ZmRlZiBLVUkKKyNkZWZpbmUgcHJpbnR3IFZzY3JucHJpbnR3CisjZWxzZSAvKiBLVUkgKi8KKyNk ZWZpbmUgcHJpbnR3IHByaW50ZgorI2VuZGlmIC8qIEtVSSAqLworI2VuZGlmIC8qIENLWFBSSU5U RiAqLworI2Vsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVzZSByZWFs IGN1cnNlcyAqLworI2lmZGVmIENLX05DVVJTRVMgICAgICAgICAgICAgICAgICAgICAgIC8qIG9y IG5jdXJzZXMuLi4gKi8KKyNpZmRlZiBDS1hQUklOVEYgICAgICAgICAgICAgICAgICAgICAgICAv KiBPdXIgcHJpbnRmIG1hY3JvIGNvbmZsaWN0cyB3aXRoICovCisjdW5kZWYgcHJpbnRmICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogdXNlIG9mICJwcmludGYiIGluIG5jdXJzZXMuaCAqLwor I2VuZGlmIC8qIENLWFBSSU5URiAqLworI2luY2x1ZGUgPG5jdXJzZXMuaD4KKyNpZmRlZiBDS1hQ UklOVEYKKyNkZWZpbmUgcHJpbnRmIGNreHByaW50ZgorI2VuZGlmIC8qIENLWFBSSU5URiAqLwor I2Vsc2UgIC8qIE5vdCBuY3Vyc2VzICovCisjaWZkZWYgQ0tYUFJJTlRGICAgICAgICAgICAgICAg ICAgICAgICAgLyogT3VyIHByaW50ZiBtYWNybyBjb25mbGljdHMgd2l0aCAqLworI3VuZGVmIHBy aW50ZiAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHVzZSBvZiAicHJpbnRmIiBpbiBjdXJz ZXMuaCAqLworI2VuZGlmIC8qIENLWFBSSU5URiAqLworI2lmZGVmIE1fWEVOSVgJCQkJLyogU0NP IFhFTklYLi4uICovCisjaWZkZWYgTV9URVJNQ0FQCisjdW5kZWYgTV9URVJNQ0FQCisjZW5kaWYg LyogTV9URVJNQ0FQICovCisjaWZuZGVmIE1fVEVSTUlORk8KKyNkZWZpbmUgTV9URVJNSU5GTwor I2VuZGlmIC8qIE1fVEVSTUlORk8gKi8KKyNlbmRpZiAvKiBNX1hFTklYICovCisjaWZkZWYgUlRB SVgKKyN1bmRlZiBOTFMJCQkJLyogQXZvaWQgJ3JlZGVjbGFyYXRpb24gb2YgZnJlZScuICovCisj ZW5kaWYgLyogUlRBSVggKi8KKyNpbmNsdWRlIDxjdXJzZXMuaD4KKyNpZmRlZiBDS1hQUklOVEYK KyNkZWZpbmUgcHJpbnRmIGNreHByaW50ZgorI2VuZGlmIC8qIENLWFBSSU5URiAqLworI2VuZGlm IC8qIENLX05DVVJTRVMgKi8KKyNlbmRpZiAvKiBNWUNVUlNFUyAqLworI2VuZGlmIC8qIFZNUyAq LworCisjaWZkZWYgQlVHOTk5CitfUFJPVE9UWVAoaW50IHRnZXRlbnQsKGNoYXIgKiwgY2hhciAq KSk7CitfUFJPVE9UWVAoY2hhciAqdGdldHN0ciwoY2hhciAqLCBjaGFyICoqKSk7CitfUFJPVE9U WVAoaW50IHRwdXRzLChjaGFyICosIGludCwgaW50ICgqKSgpKSk7CitfUFJPVE9UWVAoY2hhciAq dGdvdG8sKGNvbnN0IGNoYXIgKiwgaW50LCBpbnQpKTsKKyNlbmRpZgkvKiBCVUc5OTkgKi8KKwor I2VuZGlmIC8qIENLX0NVUlNFUyAqLworCisvKiAgRiBYIEQgSSBOIEkgVCAgLS0gIEZpbGUgWGZl ciBEaXNwbGF5IEluaXRpYWxpemF0aW9uICAqLworCisjaWZkZWYgQ0tfQ1VSU0VTCisjaWZuZGVm IE1ZQ1VSU0VTCisjaWZuZGVmIENLX1NNRworc3RhdGljCisjaWZkZWYgQ0tfQU5TSUMKKy8qIENh bid0IHVzZSBWT0lEIGJlY2F1c2Ugb2YgY3Vyc2VzLmggKi8KK3ZvaWQKK2NrX3Rlcm1zZXQoaW50 KTsKKyNlbHNlCitja190ZXJtc2V0KCk7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKyNlbmRpZiAv KiBDS19TTUcgKi8KKyNlbmRpZiAvKiBNWUNVUlNFUyAqLworI2VuZGlmIC8qIENLX0NVUlNFUyAq LworCisjaWZkZWYgTk9URVJNQ0FQCitzdGF0aWMgaW50IG5vdGVybWNhcCA9IDE7CisjZWxzZQor c3RhdGljIGludCBub3Rlcm1jYXAgPSAwOworI2VuZGlmIC8qIE5PVEVSTUNBUCAqLworCisjaWZu ZGVmIE5PRElTUExBWQorQ0tWT0lECitmeGRpbml0KHhkaXNwbGEpIGludCB4ZGlzcGxhOyB7Cisj aWZuZGVmIENPSEVSRU5UCisjaWZuZGVmIE9TMgorI2lmbmRlZiBTVFJBVFVTCisgICAgY2hhciAq czsKKyAgICBpbnQgeCwgZHVtbXk7CisKKyAgICBkZWJ1ZyhGMTAxLCJmeGRpbml0IHhkaXNwbGEi LCIiLHhkaXNwbGEpOworICAgIGRlYnVnKEYxMDEsImZ4ZGluaXQgZnhkX2luaXRlZCIsIiIsZnhk X2luaXRlZCk7CisKKyNpZmRlZiBJS1NECisjaWZuZGVmIE5PWEZFUgorICAgIC8qIE5vIGN1cnNl cyBmb3IgSUtTRCAqLworICAgIGlmIChpbnNlcnZlcikgeworICAgICAgICBmZGlzcGxhID0gWFlG RF9OOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChmeGRfaW5pdGVkKSAgICAgICAg ICAgICAgICAgICAgIC8qIE9ubHkgZG8gdGhpcyBvbmNlICovCisgICAgICByZXR1cm47CisjZW5k aWYgLyogTk9YRkVSICovCisjZW5kaWYgLyogSUtTRCAqLworCisgICAgaWYgKHhkaXNwbGEgPT0g WFlGRF9SIHx8IHhkaXNwbGEgPT0gWFlGRF9TIHx8IHhkaXNwbGEgPT0gWFlGRF9CKSB7CisJaWYg KHhmcm1zZykgeworCSAgICBwcmludGYoIiVzXG4iLHhmcm1zZyk7CisJICAgIG1ha2VzdHIoJnhm cm1zZyxOVUxMKTsKKwl9CisgICAgfQorCisjaWZkZWYgQ0tfQ1VSU0VTCisjaWZkZWYgVk1TCisg ICAgLyogRm9yY2UgQlJJRUYgaW4gQmF0Y2ggbG9ncyAqLworICAgIGlmIChiYXRjaCAmJiAoeGRp c3BsYSA9PSBYWUZEX0MgfHwgeGRpc3BsYSA9PSBYWUZEX1MpKQorICAgICAgeGRpc3BsYSA9IFhZ RkRfQjsKKyNlbHNlCisgICAgaWYgKHhkaXNwbGEgPT0gWFlGRF9DIHx8IHhkaXNwbGEgPT0gOTk5 OSkgeworCisjaWZkZWYgRFlOQU1JQworICAgICAgICBpZiAoIXRybWJ1ZikgeworLyoKKyAgQWxs b2NhdGUgdGdldGVudCgpIGJ1ZmZlci4gIE1ha2UgaXQgYmlnIC0tIHNvbWUgdGVybWNhcHMgY2Fu IGJlIGh1Z2U7CisgIHRnZXRlbnQoKSBtZXJyaWx5IHdyaXRlcyBwYXN0IHRoZSBlbmQgb2YgdGhl IGJ1ZmZlciwgY2F1c2luZyBjb3JlIGR1bXBzCisgIG9yIHdvcnNlLgorKi8KKyAgICAgICAgICAg IHRybWJ1ZiA9IChjaGFyICopbWFsbG9jKFRSTUJVRkwpOworICAgICAgICAgICAgaWYgKCF0cm1i dWYpIHsKKyAgICAgICAgICAgICAgICBub3Rlcm1jYXAgPSAxOworICAgICAgICAgICAgICAgIGRl YnVnKEYxMDEsImZ4ZGluaXQgbWFsbG9jIHRybWJ1ZiIsIkZBSUxFRCIsVFJNQlVGTCk7CisgICAg ICAgICAgICAgICAgZmRpc3BsYSA9IFhZRkRfUzsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg ICAgICAgICAgICB9CisjaWZkZWYgQ09NTUVOVAorICAgICAgICAgICAgZGVidWcoRjExMSwiZnhk aW5pdCBtYWxsb2MgdHJtYnVmIiwiT0siLFRSTUJVRkwpOworICAgICAgICAgICAgZGVidWcoRjAw MSwiZnhkaW5pdCB0cm1idWYiLCIiLHRybWJ1Zik7CisgICAgICAgICAgICBtZW1zZXQodHJtYnVm LCdcMCcsKHNpemVfdClUUk1CVUZMKTsKKyAgICAgICAgICAgIGRlYnVnKEYxMDAsImZ4ZGluaXQg bWVtc2V0IE9LIiwiIiwwKTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgICAgIH0KKyNlbmRp ZiAvKiBEWU5BTUlDICovCisKKyAgICAgICAgZGVidWcoRjEwMCwiZnhkaW5pdCBiZWZvcmUgZ2V0 ZW52KFRFUk0pIiwiIiwwKTsKKyAgICAgICAgcyA9IGdldGVudigiVEVSTSIpOworICAgICAgICBk ZWJ1ZyhGMTEwLCJmeGRpbml0IGFmdGVyIGdldGVudihURVJNKSIscywwKTsKKyAgICAgICAgaWYg KCFzKSBzID0gIiI7CisgICAgICAgIGlmICgqcykgeworICAgICAgICAgICAgZGVidWcoRjExMCwi ZnhkaW5pdCBiZWZvcmUgdGdldGVudCgpIixzLDApOworICAgICAgICAgICAgeCA9IHRnZXRlbnQo dHJtYnVmLHMpOworICAgICAgICAgICAgZGVidWcoRjExMSwiZnhkaW5pdCB0Z2V0ZW50IixzLHgp OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgeCA9IDA7CisgICAgICAgICAgICBub3Rl cm1jYXAgPSAxOworICAgICAgICAgICAgZGVidWcoRjExMCwiZnhkaW5pdCBURVJNIG51bGwgLSBu byB0Z2V0ZW50IixzLDApOworICAgICAgICB9CisgICAgICAgIGlmICh4IDwgMSAmJiAhcXVpZXQg JiYgIWJhY2tncmQKKyNpZmRlZiBWTVMKKyAgICAgICAgICAgICYmICFiYXRjaAorI2VuZGlmIC8q IFZNUyAqLworICAgICAgICAgICAgKSB7CisgICAgICAgICAgICBwcmludGYoIldhcm5pbmc6IHRl cm1pbmFsIHR5cGUgdW5rbm93bjogXCIlc1wiXG4iLHMpOworI2lmZGVmIENPTU1FTlQKKwkgICAg LyogQ29uZnVzaW5nIC0gbm9ib2R5IGtub3dzIHdoYXQgdGhpcyBtZWFucyAqLworICAgICAgICAg ICAgcHJpbnRmKCJTQ1JFRU4gY29tbWFuZCB3aWxsIHVzZSBBTlNJIHNlcXVlbmNlcy5cbiIpOwor I2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAgICAgIGlmIChsb2NhbCkKKyAgICAgICAgICAg ICAgcHJpbnRmKCJGdWxsc2NyZWVuIGZpbGUgdHJhbnNmZXIgZGlzcGxheSBkaXNhYmxlZC5cbiIp OworICAgICAgICAgICAgZmRpc3BsYSA9IFhZRkRfUzsKKyAgICAgICAgfQorI2lmbmRlZiBNWUNV UlNFUworI2lmbmRlZiBDS19TTUcKKyAgICAgICAgY2tfdGVybXNldCh4KTsKKyNlbmRpZiAvKiBD S19TTUcgKi8KKyNlbmRpZiAvKiBNWUNVUlNFUyAqLworICAgICAgICBmeGRfaW5pdGVkID0gMTsK KyAgICB9CisjZW5kaWYgLyogQ0tfQ1VSU0VTICovCisjZW5kaWYgLyogVk1TICovCisjZW5kaWYg LyogU1RSQVRVUyAqLworI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIENPSEVSRU5UICovCit9 CisjZW5kaWYgLyogTk9ESVNQTEFZICovCisKKyNpZmRlZiBDS19DVVJTRVMKKyNpZmRlZiBDS19T TUcKKy8qCisgIExvbmcgc2VjdGlvbiBmb3IgU2NyZWVuIE1hbmFnZXIgc3RhcnRzIGhlcmUuLi4K KyAgQnkgV2lsbGlhbSBCYWRlci4KKyovCisjaW5jbHVkZSAiY2t2dm1zLmgiCisjaWZkZWYgT0xE X1ZNUworI2luY2x1ZGUgPHNtZ2RlZi5oPiAgICAgICAgICAgICAgICAgICAgIC8qIHVzZSB0aGlz IG9uIFZBWCBDIDIuNCAqLworLyogI2luY2x1ZGUgPHNtZ21zZy5oPiAqLworI2Vsc2UKKyNpbmNs dWRlIDxzbWckcm91dGluZXMuaD4gICAgICAgICAgICAgICAvKiBNYXJ0aW4gWmluc2VyICovCisj ZW5kaWYgLyogT0xEX1ZNUyAqLworCitleHRlcm4gdW5zaWduZWQgaW50IHZtc19zdGF0dXM7ICAg ICAvKiBVc2VkIGZvciBzeXN0ZW0gc2VydmljZSByZXR1cm4gc3RhdHVzICovCisKK3N0YXRpYyBs b25nIHNtZ19wYXN0ZWJvYXJkX2lkID0gLTE7ICAgICAvKiBwYXN0ZWJvYXJkIGlkZW50aWZpZXIg Ki8KK3N0YXRpYyBsb25nIHNtZ19kaXNwbGF5X2lkID0gLTE7ICAgICAgICAvKiBkaXNwbGF5IGlk ZW50aWZpZXIgKi8KK3N0YXRpYyBpbnQgc21nX29wZW4gPSAwOyAgICAgICAgICAgICAgICAvKiBm bGFnIGlmIHNtZyBjdXJyZW50IG9wZW4gKi8KK3N0YXRpYyBpbnQgc21nX2luaXRlZCA9IDA7ICAg ICAgICAgICAgICAvKiBmbGFnIGlmIHNtZyBpbml0aWFsaXplZCAqLworCisjaWZkZWYgQ09NTUVO VAorI2RlZmluZSBjbHJ0b2VvbCgpICAgICAgU01HJEVSQVNFX0xJTkUoJnNtZ19kaXNwbGF5X2lk LCAwLCAwKQorCisjZGVmaW5lIGNsZWFyKCkgICAgICAgICBTTUckRVJBU0VfRElTUExBWSgmc21n X2Rpc3BsYXlfaWQsIDAsIDAsIDAsIDApCisKKyNkZWZpbmUgdG91Y2h3aW4oc2NyKSAgIFNNRyRS RVBBSU5UX1NDUkVFTigmc21nX3Bhc3RlYm9hcmRfaWQpCisKKyNlbHNlICAvKiBOb3QgQ09NTUVO VCAqLworCisjZGVmaW5lIGNscnRvZW9sKCkgICAgICBzbWckZXJhc2VfbGluZSgmc21nX2Rpc3Bs YXlfaWQsIDAsIDApCisKKyNkZWZpbmUgY2xlYXIoKSAgICAgICAgIHNtZyRlcmFzZV9kaXNwbGF5 KCZzbWdfZGlzcGxheV9pZCwgMCwgMCwgMCwgMCkKKworI2RlZmluZSB0b3VjaHdpbihzY3IpICAg c21nJHJlcGFpbnRfc2NyZWVuKCZzbWdfcGFzdGVib2FyZF9pZCkKKyNlbmRpZiAvKiBDT01NRU5U ICovCisKKyNkZWZpbmUgY2xlYXJvayhjdXJzY3Isb2spICAgICAgICAgICAgICAvKiBMZXQgd3Jl ZnJlc2goKSBkbyB0aGUgd29yayAqLworCisjZGVmaW5lIHdyZWZyZXNoKGN1cnNyYykgdG91Y2h3 aW4oc2NyKQorCitzdGF0aWMgdm9pZAorbW92ZShyb3csIGNvbCkgaW50IHJvdywgY29sOyB7Cisg ICAgLyogQ2hhbmdlIGZyb20gMC1iYXNlZCBmb3IgY3Vyc2VzIHRvIDEtYmFzZWQgZm9yIFNNRyAq LworICAgIGlmICghc21nX29wZW4pCisgICAgICByZXR1cm47CisgICAgKytyb3c7ICsrY29sOwor ICAgIGRlYnVnKEYxMTEsIlZNUyBzbWcgbW92ZSIsY2tpdG9hKHJvdyksY29sKTsKKyNpZmRlZiBD T01NRU5UICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBNYXJ0aW4gWmluc2VyICovCisgICAg Q0hFQ0tfRVJSKCJtb3ZlOiBzbWckc2V0X2N1cnNvcl9hYnMiLAorICAgICAgICAgICAgICBTTUck U0VUX0NVUlNPUl9BQlMoJnNtZ19kaXNwbGF5X2lkLCAmcm93LCAmY29sKSk7CisjZWxzZQorICAg IENIRUNLX0VSUigibW92ZTogc21nJHNldF9jdXJzb3JfYWJzIiwKKyAgICAgICAgICAgICAgc21n JHNldF9jdXJzb3JfYWJzKCZzbWdfZGlzcGxheV9pZCwgJnJvdywgJmNvbCkpOworI2VuZGlmIC8q IENPTU1FTlQgKi8KKyAgICBkZWJ1ZyhGMTAxLCJWTVMgc21nIG1vdmUgdm1zX3N0YXR1cyIsIiIs dm1zX3N0YXR1cyk7Cit9CisKKyNpZmRlZiBWTVNfVjQwCisjZGVmaW5lIE9MRF9WTVMKKyNlbmRp ZiAvKiBWTVNfVjQwICovCisjaWZkZWYgVk1TX1Y0MgorI2RlZmluZSBPTERfVk1TCisjZW5kaWYg LyogVk1TX1Y0MiAqLworI2lmZGVmIFZNU19WNDQKKyNkZWZpbmUgT0xEX1ZNUworI2VuZGlmIC8q IFZNU19WNDQgKi8KKworc3RhdGljIGludAoraW5pdHNjcigpIHsKKyAgICBpbnQgcm93cyA9IDI0 LCBjb2xzID0gODA7CisgICAgaW50IHJvdyA9IDEsIGNvbCA9IDE7CisKKyAgICBkZWJ1ZyhGMTAx LCJWTVMgaW5pdHNjciBzbWdfcGFzdGVib2FyZF9pZCBBIiwiIixzbWdfcGFzdGVib2FyZF9pZCk7 CisKKyAgICBpZiAoc21nX3Bhc3RlYm9hcmRfaWQgPT0gLTEpIHsgLyogT3BlbiB0aGUgc2NyZWVu ICovCisjaWZkZWYgT0xEX1ZNUyAgICAgICAgICAgICAgICAgICAgIC8qIE5vdGU6IFJvdXRpbmUg Y2FsbHMgbG93ZXJjYXNlZCA5Lzk2ICovCisgICAgICAgIENIRUNLX0VSUigiaW5pdHNjcjogc21n JGNyZWF0ZV9wYXN0ZWJvYXJkIiwKKyAgICAgICAgICAgICAgICAgIHNtZyRjcmVhdGVfcGFzdGVi b2FyZCgmc21nX3Bhc3RlYm9hcmRfaWQsIDAsIDAsIDAsIDApKTsKKyNlbHNlCisgICAgICAgIC8q IEZvciBWTVMgVjUsIG5vdCB0ZXN0ZWQgKi8KKyAgICAgICAgQ0hFQ0tfRVJSKCJpbml0c2NyOiBz bWckY3JlYXRlX3Bhc3RlYm9hcmQiLAorICAgICAgICAgICAgICAgICAgc21nJGNyZWF0ZV9wYXN0 ZWJvYXJkKCZzbWdfcGFzdGVib2FyZF9pZCwgMCwgMCwgMCwgMCwgMCkpOworI2VuZGlmIC8qIE9M RF9WTVMgKi8KKyAgICB9CisgICAgZGVidWcoRjEwMSwiVk1TIGluaXRzY3Igc21nX3Bhc3RlYm9h cmRfaWQgQiIsIiIsc21nX3Bhc3RlYm9hcmRfaWQpOworICAgIGlmIChzbWdfcGFzdGVib2FyZF9p ZCA9PSAtMSkgeworCXByaW50ZigiP0Vycm9yIGluaXRpYWxpemluZyBmdWxsc2NyZWVuIGRpc3Bs YXlcbiIpOworCWZkaXNwbGEgPSBYWUZEX1M7CisJZHB5aW5pdCgpOworCXJldHVybigwKTsKKyAg ICB9CisgICAgZGVidWcoRjEwMSwiVk1TIGluaXRzY3Igc21nX2Rpc3BsYXlfaWQiLCIiLHNtZ19k aXNwbGF5X2lkKTsKKyAgICBpZiAoc21nX2Rpc3BsYXlfaWQgPT0gLTEpIHsgICAgICAgICAvKiBD cmVhdGUgYSBkaXNwbGF5IHdpbmRvdyAqLworCisjaWZkZWYgQ09NTUVOVCAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogTWFydGluIFppbnNlciAqLworICAgICAgICBDSEVDS19FUlIoImluaXRz Y3I6IHNtZyRjcmVhdGVfdmlydHVhbF9kaXNwbGF5IiwKKyAgICAgICAgICAgICAgICAgIFNNRyRD UkVBVEVfVklSVFVBTF9ESVNQTEFZKCZyb3dzLCAmY29scywgJnNtZ19kaXNwbGF5X2lkLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCkpOworCisg ICAgICAgIC8qIENvbm5lY3QgdGhlIGRpc3BsYXkgd2luZG93IHRvIHRoZSBzY3JlZW4gKi8KKyAg ICAgICAgQ0hFQ0tfRVJSKCJpbml0c2NyOiBzbWckcGFzdGVfdmlydHVhbF9kaXNwbGF5IiwKKyAg ICAgICAgICAgICAgICAgIFNNRyRQQVNURV9WSVJUVUFMX0RJU1BMQVkoJnNtZ19kaXNwbGF5X2lk LCZzbWdfcGFzdGVib2FyZF9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJnJvdywmY29sKSk7CisjZWxzZQorICAgICAgICBDSEVDS19FUlIoImluaXRzY3I6 IHNtZyRjcmVhdGVfdmlydHVhbF9kaXNwbGF5IiwKKyAgICAgICAgICAgICAgICAgIHNtZyRjcmVh dGVfdmlydHVhbF9kaXNwbGF5KCZyb3dzLCAmY29scywgJnNtZ19kaXNwbGF5X2lkLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCkpOworCisgICAg ICAgIC8qIENvbm5lY3QgdGhlIGRpc3BsYXkgd2luZG93IHRvIHRoZSBzY3JlZW4gKi8KKyAgICAg ICAgQ0hFQ0tfRVJSKCJpbml0c2NyOiBzbWckcGFzdGVfdmlydHVhbF9kaXNwbGF5IiwKKyAgICAg ICAgICAgICAgICAgIHNtZyRwYXN0ZV92aXJ0dWFsX2Rpc3BsYXkoJnNtZ19kaXNwbGF5X2lkLCZz bWdfcGFzdGVib2FyZF9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJnJvdywmY29sKSk7CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgIH0KKyAgICBkZWJ1 ZyhGMTAxLCJWTVMgaW5pdHNjciBzbWdfb3BlbiBBIiwiIixzbWdfb3Blbik7CisgICAgaWYgKCFz bWdfb3BlbikgeyAgICAgICAgICAgICAgICAgICAgLyogU3RhcnQgYSBiYXRjaCB1cGRhdGUgKi8K KyAgICAgICAgc21nX29wZW4gPSAxOworI2lmZGVmIENPTU1FTlQKKyAgICAgICAgQ0hFQ0tfRVJS KCJpbml0c2NyOiBzbWckYmVnaW5fcGFzdGVib2FyZF91cGRhdGUiLAorICAgICAgICAgICAgICAg ICAgU01HJEJFR0lOX1BBU1RFQk9BUkRfVVBEQVRFKCZzbWdfcGFzdGVib2FyZF9pZCkpOworI2Vs c2UKKyAgICAgICAgQ0hFQ0tfRVJSKCJpbml0c2NyOiBzbWckYmVnaW5fcGFzdGVib2FyZF91cGRh dGUiLAorICAgICAgICAgICAgICAgICAgc21nJGJlZ2luX3Bhc3RlYm9hcmRfdXBkYXRlKCZzbWdf cGFzdGVib2FyZF9pZCkpOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKwlkZWJ1ZyhGMTAxLCJWTVMg aW5pdHNjciBzbWckYmVnaW5fcGFzdGVib2FyZF91cGRhdGUiLCIiLHZtc19zdGF0dXMpOworICAg IH0KKyAgICBkZWJ1ZyhGMTAxLCJWTVMgaW5pdHNjciBzbWdfb3BlbiBCIiwiIixzbWdfb3Blbik7 CisgICAgc21nX2luaXRlZCA9IDE7CisgICAgcmV0dXJuKDEpOworfQorCitzdGF0aWMgdm9pZAor cmVmcmVzaCgpIHsKKyAgICBkZWJ1ZyhGMTAxLCJyZWZyZXNoIHNtZ19wYXN0ZWJvYXJkX2lkIiwi IixzbWdfcGFzdGVib2FyZF9pZCk7CisKKyAgICBpZiAoc21nX29wZW4gPT0gMCB8fCBzbWdfcGFz dGVib2FyZF9pZCA9PSAtMSkKKyAgICAgIHJldHVybjsKKworI2lmZGVmIENPTU1FTlQgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIE1hcnRpbiBaaW5zZXIgKi8KKyAgICBDSEVDS19FUlIoInJl ZnJlc2g6IHNtZyRlbmRfcGFzdGVib2FyZF91cGRhdGUiLAorICAgICAgICAgICAgICBTTUckRU5E X1BBU1RFQk9BUkRfVVBEQVRFKCZzbWdfcGFzdGVib2FyZF9pZCkpOworICAgIENIRUNLX0VSUigi cmVmcmVzaDogc21nJGJlZ2luX3Bhc3RlYm9hcmRfdXBkYXRlIiwKKyAgICAgICAgICAgICAgU01H JEJFR0lOX1BBU1RFQk9BUkRfVVBEQVRFKCZzbWdfcGFzdGVib2FyZF9pZCkpOworI2Vsc2UKKyAg ICBDSEVDS19FUlIoInJlZnJlc2g6IHNtZyRlbmRfcGFzdGVib2FyZF91cGRhdGUiLAorICAgICAg ICAgICAgICBzbWckZW5kX3Bhc3RlYm9hcmRfdXBkYXRlKCZzbWdfcGFzdGVib2FyZF9pZCkpOwor ICAgIENIRUNLX0VSUigicmVmcmVzaDogc21nJGJlZ2luX3Bhc3RlYm9hcmRfdXBkYXRlIiwKKyAg ICAgICAgICAgICAgc21nJGJlZ2luX3Bhc3RlYm9hcmRfdXBkYXRlKCZzbWdfcGFzdGVib2FyZF9p ZCkpOworI2VuZGlmIC8qIENPTU1FTlQgKi8KK30KKworc3RhdGljIHZvaWQKK2VuZHdpbigpIHsK KyAgICBpZiAoIXNtZ19vcGVuKQorICAgICAgcmV0dXJuOworCisgICAgc21nX29wZW4gPSAwOwor CisjaWZkZWYgQ09NTUVOVAorICAgIENIRUNLX0VSUigiZW5kd2luOiBzbWckZW5kX3Bhc3RlYm9h cmRfdXBkYXRlIiwKKyAgICAgICAgICAgICAgU01HJEVORF9QQVNURUJPQVJEX1VQREFURSgmc21n X3Bhc3RlYm9hcmRfaWQpKTsKKyNlbHNlCisgICAgQ0hFQ0tfRVJSKCJlbmR3aW46IHNtZyRlbmRf cGFzdGVib2FyZF91cGRhdGUiLAorICAgICAgICAgICAgICBzbWckZW5kX3Bhc3RlYm9hcmRfdXBk YXRlKCZzbWdfcGFzdGVib2FyZF9pZCkpOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKworICAgIG1v dmUoMjIsIDApOworCisjaWZkZWYgQ09NTUVOVAorLyoKKyAgVGhlc2UgY2FsbHMgY2xlYXIgdGhl IHNjcmVlbi4KKyAgKGNvbnZlcnQgcm91dGluZSBjYWxscyB0byBsb3dlcmNhc2UgLSBNYXJ0aW4g Wmluc2VyKQorKi8KKyAgICBDSEVDS19FUlIoImVuZHdpbjogc21nJGRlbGV0ZV92aXJ0dWFsX2Rp c3BsYXkiLAorICAgICAgICAgICAgICBTTUckREVMRVRFX1ZJUlRVQUxfRElTUExBWSgmc21nX2Rp c3BsYXlfaWQpKTsKKyAgICBzbWdfZGlzcGxheV9pZCA9IC0xOworCisgICAgQ0hFQ0tfRVJSKCJl bmR3aW46IHNtZyRkZWxldGVfcGFzdGVib2FyZCIsCisgICAgICAgICAgICAgIFNNRyRERUxFVEVf UEFTVEVCT0FSRCgmc21nX3Bhc3RlYm9hcmRfaWQsIDApKTsKKyAgICBzbWdfcGFzdGVib2FyZF9p ZCA9IC0xOworI2VuZGlmIC8qIENPTU1FTlQgKi8KK30KKworI2lmZGVmIENPTU1FTlQKKy8qIERF Q0MgNi4yIHNjcmVhbXMgYmxvb2R5IG11cmRlciBhYm91dCBwcmludHcgKCJub3QgZW5vdWdoIGFy Z3MiKSAqLworLyogYnV0IGFkZGluZyB0aGUgZm9sbG93aW5nIHByb3RvdHlwZSBvbmx5IG1ha2Vz IGl0IGhvbGxlciBsb3VkZXIuICovCisjaWZkZWYgX19ERUNDCisvKiAidmFyYXJncyIgcHJvdG90 eXBlIGZvciBwcmludHcgKi8KK19QUk9UT1RZUChzdGF0aWMgaW50IHByaW50dywoY2hhciAqLCAu Li4pKTsKKyNlbmRpZiAvKiBfX0RFQ0MgKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisKKyNpZmRl ZiBfX0RFQ0MKKyNpbmNsdWRlIDxzdGRhcmcuaD4KK19QUk9UT1RZUChzdGF0aWMgdm9pZCBwcmlu dHcsKGNoYXIgKiwgLi4uKSk7CitzdGF0aWMgdm9pZAorcHJpbnR3KGNoYXIgKnN0ciwuLi4pIHsK KyAgICBjaGFyIGJ1ZlsyNTVdOworICAgIHZhX2xpc3QgYXA7CisgICAgJERFU0NSSVBUT1IodGV4 dF9kc2MsIDApOworICAgIHRleHRfZHNjLmRzYyRhX3BvaW50ZXI9YnVmOworICAgIGlmICghc21n X29wZW4pCisgICAgICByZXR1cm47CisgICAgdmFfc3RhcnQoYXAsc3RyKTsKKyAgICB0ZXh0X2Rz Yy5kc2Mkd19sZW5ndGggPSB2c3ByaW50ZihidWYsIHN0ciwgYXApOworICAgIHZhX2VuZChhcCk7 CisgICAgQ0hFQ0tfRVJSKCJwcmludHc6IHNtZyRwdXRfY2hhcnMiLAorICAgICAgICAgICAgICBz bWckcHV0X2NoYXJzKCZzbWdfZGlzcGxheV9pZCwgJnRleHRfZHNjLCAwLCAwLCAwLCAwLCAwKSk7 Cit9CisjZWxzZQorc3RhdGljIHZvaWQKK3ByaW50dyhzdHIsIGExLCBhMiwgYTMsIGE0LCBhNSwg YTYsIGE3LCBhOCkKKyAgICBjaGFyICpzdHI7CisgICAgbG9uZyBhMSwgYTIsIGEzLCBhNCwgYTUs IGE2LCBhNywgYTg7CisvKiBwcmludHcgKi8geworICAgIGNoYXIgYnVmWzI1NV07CisgICAgJERF U0NSSVBUT1IodGV4dF9kc2MsIDApOworICAgIGlmICghc21nX29wZW4pCisgICAgICByZXR1cm47 CisgICAgdGV4dF9kc2MuZHNjJGFfcG9pbnRlcj1idWY7CisgICAgdGV4dF9kc2MuZHNjJHdfbGVu Z3RoID0gc3ByaW50ZihidWYsIHN0ciwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4KTsK KyAgICBDSEVDS19FUlIoInByaW50dzogc21nJHB1dF9jaGFycyIsCisgICAgICAgICAgICAgIHNt ZyRwdXRfY2hhcnMoJnNtZ19kaXNwbGF5X2lkLCAmdGV4dF9kc2MsIDAsIDAsIDAsIDAsIDApKTsK K30KKyNlbmRpZiAvKiBfX0RFQ0MgKi8KKworI2RlZmluZSBDS19DVVJQT1MKK2ludAorY2tfY3Vy cG9zKHJvdywgY29sKSB7CisgICAgZGVidWcoRjExMSwiVk1TIHNtZyBja19jdXJwb3MiLGNraXRv YShyb3cpLGNvbCk7CisgICAgaWYgKCFzbWdfaW5pdGVkIHx8ICFzbWdfb3BlbikgeworICAgICAg ICBpbml0c2NyKCk7CisgICAgfQorICAgIGRlYnVnKEYxMDEsIlZNUyBzbWcgY3VycG9zIHNtZ19v cGVuIiwiIixzbWdfb3Blbik7CisgICAgaWYgKCFzbWdfb3BlbikKKyAgICAgIHJldHVybigwKTsK KyAgICBkZWJ1ZyhGMTExLCJWTVMgc21nIGNrX2N1cnBvcyIsY2tpdG9hKHJvdy0xKSxjb2wtMSk7 CisgICAgbW92ZShyb3cgLSAxLCBjb2wgLSAxKTsgICAgICAgICAgICAgLyogU01HIGlzIDAtYmFz ZWQgKi8KKyAgICByZWZyZXNoKCk7CisgICAgLyogZW5kd2luKCk7ICovCisgICAgcmV0dXJuKDAp OworfQorCitpbnQKK2NrX2NscygpIHsKKyAgICBkZWJ1ZyhGMTAxLCJWTVMgc21nIGNrX2NscyBz bWdfaW5pdGVkIiwiIixzbWdfaW5pdGVkKTsKKyAgICBpZiAoIXNtZ19pbml0ZWQgfHwgIXNtZ19v cGVuKSB7CisgICAgICAgIGluaXRzY3IoKTsKKyAgICB9CisgICAgZGVidWcoRjEwMSwiVk1TIHNt ZyBja19jbHMgc21nX29wZW4iLCIiLHNtZ19vcGVuKTsKKyAgICBpZiAoIXNtZ19vcGVuKQorICAg ICAgcmV0dXJuKDApOworICAgIGNsZWFyKCk7CisgICAgcmVmcmVzaCgpOworICAgIC8qIGVuZHdp bigpOyAqLworICAgIHJldHVybigwKTsKK30KKworaW50Citja19jbGVvbCgpIHsKKyAgICBkZWJ1 ZyhGMTAxLCJWTVMgc21nIGNrX2NsZW9sIHNtZ19pbml0ZWQiLCIiLHNtZ19pbml0ZWQpOworICAg IGlmICghc21nX2luaXRlZCB8fCAhc21nX29wZW4pIHsKKyAgICAgICAgaW5pdHNjcigpOworICAg IH0KKyAgICBkZWJ1ZyhGMTAxLCJWTVMgc21nIGNrX2NsZW9sIHNtZ19vcGVuIiwiIixzbWdfb3Bl bik7CisgICAgaWYgKCFzbWdfb3BlbikKKyAgICAgIHJldHVybigwKTsKKyAgICBjbHJ0b2VvbCgp OworICAgIHJlZnJlc2goKTsKKyAgICAvKiBlbmR3aW4oKTsgKi8KKyAgICByZXR1cm4oMCk7Cit9 CisjZW5kaWYgLyogQ0tfU01HICovCisKKyNpZmRlZiBNWUNVUlNFUworLyoKKyAgRG8taXQteW91 cnNlbGYgY3Vyc2VzIGltcGxlbWVudGF0aW9uIGZvciBWTVMsIE9TLzIgYW5kIG90aGVyIEFOU0kv VlQtMTAwJ3MuCisgIFN1cHBvcnRzIG9ubHkgdGhlIFZUNTIgYW5kIFZUMXh4IChhbmQgbGF0ZXIg VlQyeHgvM3h4LzR4eCkgdGVybWluYWxzLgorICBCeSBUZXJyeSBLZW5uZWR5LCBTdCBQZXRlcnMg Q29sbGVnZS4KKworICBGaXJzdCwgc29tZSBzdHVmZiB3ZSBjYW4ganVzdCBpZ25vcmU6CisqLwor CitzdGF0aWMgaW50Cit0b3VjaHdpbih4KSBpbnQgeDsgeworICAgIHJldHVybigwKTsKK30KK3N0 YXRpYyBpbnQKK2luaXRzY3IoKSB7CisgICAgcmV0dXJuKDApOworfQorc3RhdGljIGludAorcmVm cmVzaCgpIHsKKyAgICByZXR1cm4oMCk7Cit9CitzdGF0aWMgaW50CitlbmR3aW4oKSB7CisgICAg cmV0dXJuKDApOworfQorCisvKgorICogTm93LCBzb21lIHN0dWZmIHdlIG5lZWQgdG8gZG86Cisg Ki8KKworX1BST1RPVFlQKCBpbnQgbW92ZSwgKGludCwgaW50KSApOworI2lmbmRlZiBPUzIKK2lu dAorbW92ZShyb3csIGNvbCkgaW50IHJvdywgY29sOyB7CisgICAgaWYgKGlzdnQ1MikKKyAgICAg IHByaW50ZigiXDAzM1klYyVjIiwgcm93ICsgMDM3LCBjb2wgKyAwMzcpOworICAgIGVsc2UKKyAg ICAgIHByaW50ZigiXDAzM1slZDslZEgiLCByb3cgKyAxLCBjb2wgKyAxKTsKKyAgICByZXR1cm4o MCk7Cit9CisKK2ludAorY2xlYXIoKSB7CisgICAgbW92ZSgwLDApOworICAgIGlmIChpc3Z0NTIp CisgICAgICBwcmludGYoIlwwMzNKIik7CisgICAgZWxzZQorICAgICAgcHJpbnRmKCJcMDMzW0oi KTsKKyAgICByZXR1cm4oMCk7Cit9CisKK2ludAorY2xydG9lb2woKSB7CisgICAgaWYgKGlzdnQ1 MikKKyAgICAgIHByaW50ZigiXDAzM0siKTsKKyAgICBlbHNlCisgICAgICBwcmludGYoIlwwMzNb SyIpOworICAgIHJldHVybigwKTsKK30KKworI2RlZmluZSBDS19DVVJQT1MKK2ludAorY2tfY2xz KCkgeworICAgIHJldHVybihjbGVhcigpKTsKK30KKworaW50Citja19jbGVvbCgpIHsKKyAgICBy ZXR1cm4oY2xydG9lb2woKSk7Cit9CisKK2ludAorY2tfY3VycG9zKHJvdywgY29sKSBpbnQgcm93 LCBjb2w7IHsKKyAgICBtb3ZlKHJvdywgY29sKTsKKyAgICByZXR1cm4oMCk7Cit9CisKKyNlbHNl IC8qIE9TMiAqLworLyogV2luZG93cyBOVCBhbmQgV2luZG93cyA5NSBkbyBub3QgcHJvdmlkZSBB TlNJIGVtdWxhdGlvbiAqLworLyogVGhlcmVmb3JlIHdlIG1pZ2h0IGFzIHdlbGwgbm90IHVzZSBp dCBmb3IgT1MvMiBlaXRoZXIgICAqLworCitpbnQKK21vdmUocm93LCBjb2wpIGludCByb3csIGNv bDsgeworI2lmbmRlZiBPTkVURVJNVVBECisgICAgU2V0Q3VyUG9zKHJvdywgY29sKTsKKyNlbmRp ZiAvKiBPTkVURVJNVVBEICovCisgICAgbGdvdG94eSggVkNNRCwgY29sKzEsIHJvdysxKTsKKyAg ICBWc2NybklzRGlydHkoVkNNRCk7CisgICAgcmV0dXJuKDApOworfQorCitpbnQKK2NsZWFyKCkg eworICAgIHZpb2NlbGwgY2VsbDsKKyAgICBtb3ZlKDAsMCk7CisjaWZkZWYgT05FVEVSTVVQRAor ICAgIGlmIChWc2NybkdldEJ1ZmZlclNpemUoVkNNRCkgPiAwKSB7CisgICAgICAgIFZzY3JuU2Ny b2xsKFZDTUQsIFVQV0FSRCwgMCwKKyAgICAgICAgICAgICAgICAgICAgVnNjcm5HZXRIZWlnaHQo VkNNRCktKDEpLAorICAgICAgICAgICAgICAgICAgICBWc2NybkdldEhlaWdodChWQ01EKS0oMCks IFRSVUUsIENIUl9TUCk7CisgICAgICAgIGNsZWFydGVybXNjcmVlbihWQ01EKTsKKyAgICB9Cisj ZWxzZQorICAgIGNlbGwuYyA9ICcgJzsKKyAgICBjZWxsLmEgPSBjb2xvcmNtZDsKKyAgICBXcnRO Q2VsbChjZWxsLCBjbWRfcm93cyAqIGNtZF9jb2xzLCAwLCAwKTsKKyNlbmRpZiAvKiBPTkVURVJN VVBEICovCisgICAgcmV0dXJuKDApOworfQorCitpbnQKK2NscnRvZW9sKCkgeworICAgIFVTSE9S VCByb3csIGNvbDsKKyAgICB2aW9jZWxsIGNlbGw7CisKKyAgICBjZWxsLmMgPSAnICc7CisgICAg Y2VsbC5hID0gY29sb3JjbWQ7CisjaWZuZGVmIE9ORVRFUk1VUEQKKyAgICBHZXRDdXJQb3MoJnJv dywgJmNvbCApOworICAgIFdydE5DZWxsKGNlbGwsIGNtZF9jb2xzIC0gY29sIC0xLCByb3csIGNv bCk7CisjZW5kaWYgLyogT05FVEVSTVVQRCAqLworICAgIGNscnRvZW9sbihWQ01ELENIUl9TUCk7 CisgICAgcmV0dXJuKDApOworfQorCisjZGVmaW5lIENLX0NVUlBPUworaW50Citja19jdXJwb3Mo cm93LCBjb2wpIGludCByb3csIGNvbDsgeworICAgIG1vdmUocm93LCBjb2wpOworICAgIHJldHVy bigwKTsKK30KKworaW50Citja19jbHMoKSB7CisgICAgcmV0dXJuKGNsZWFyKCkpOworfQorCitp bnQKK2NrX2NsZW9sKCkgeworICAgIHJldHVybihjbHJ0b2VvbCgpKTsKK30KKworI2VuZGlmIC8q IE9TMiAqLworI2VuZGlmIC8qIE1ZQ1VSU0VTICovCisKKyNpZm5kZWYgTk9URVJNQ0FQCisjaWZu ZGVmIENLX0NVUlBPUworI2RlZmluZSBDS19DVVJQT1MKKworLyogVGVybWNhcC9UZXJtaW5mbyBz ZWN0aW9uICovCisKK3N0YXRpYyBjaGFyIGN1cl9jbHNbMzJdID0geyBOVUwsIE5VTCB9Oworc3Rh dGljIGNoYXIgY3VyX2NsZW9sWzMyXSA9IHsgTlVMLCBOVUwgfTsKK3N0YXRpYyBjaGFyIGN1cl9j bVs2NF0gPSB7IE5VTCwgTlVMIH07CitzdGF0aWMgY2hhciB0Z3NidWZbMTI4XSA9IHsgTlVMLCBO VUwgfTsKKworc3RhdGljCisjaWZkZWYgQ0tfQU5TSUMKK3ZvaWQKKyNlbmRpZiAvKiBDS19BTlNJ QyAqLworY2tfdGVybXNldCh4KSBpbnQgeDsgeworICAgIGN1cl9jbHNbMF0gPSBOVUw7CisgICAg Y3VyX2NsZW9sWzBdID0gTlVMOworICAgIGN1cl9jbVswXSA9IE5VTDsKKyNpZmRlZiB0Z2V0ZW50 CisgICAgZGVidWcoRjEwMCwidGdldGVudCBpcyBhIG1hY3JvIiwiIiwwKTsKKyNlbmRpZiAvKiB0 Z2V0ZW50ICovCisjaWZkZWYgdGdldHN0cgorICAgIGRlYnVnKEYxMDAsInRnZXRzdHIgaXMgYSBt YWNybyIsIiIsMCk7CisjZW5kaWYgLyogdGdldHN0ciAqLworI2lmZGVmIHRwdXRzCisgICAgZGVi dWcoRjEwMCwidHB1dHMgaXMgYSBtYWNybyIsIiIsMCk7CisjZW5kaWYgLyogdHB1dHMgKi8KKyNp ZmRlZiB0Z290bworICAgIGRlYnVnKEYxMDAsInRnb3RvIGlzIGEgbWFjcm8iLCIiLDApOworI2Vu ZGlmIC8qIHRnb3RvICovCisjaWZkZWYgTk9URVJNQ0FQCisgICAgLyogdGdldHN0cigpIGdldHMg YSBzZWdtZW50YXRpb24gZmF1bHQgb24gT1NGLzEgKi8KKyAgICBkZWJ1ZyhGMTAwLCJja190ZXJt c2V0IE5PVEVSTUNBUCIsIiIsMCk7CisjZWxzZQorICAgIGlmIChub3Rlcm1jYXApIHsKKyAgICAg ICAgZGVidWcoRjEwMCwiY2tfdGVybXNldCBub3Rlcm1jYXAiLCIiLDApOworICAgICAgICByZXR1 cm47CisgICAgfQorICAgIGRlYnVnKEYxMDEsImNrX3Rlcm1zZXQgeCIsIiIseCk7CisgICAgaWYg KHggPiAwKSB7CisgICAgICAgIGNoYXIgKiBicDsKKyAgICAgICAgYnAgPSB0Z3NidWY7CisgICAg ICAgICpicCA9IE5VTDsKKyAgICAgICAgZGVidWcoRjExMCwiY2tfdGVybXNldCBjYWxsaW5nIHRn ZXRzdHIiLCJjbCIsMCk7CisgICAgICAgIGlmICh0Z2V0c3RyKCJjbCIsICZicCkpIHsgICAgICAg LyogR2V0IGNsZWFyLXNjcmVlbiBjb2RlICovCisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJja190 ZXJtc2V0IHRnZXRzdHIgY2wiLHRnc2J1ZiwiIik7CisgICAgICAgICAgICBpZiAoKGludClzdHJs ZW4odGdzYnVmKSA8IDMyKQorICAgICAgICAgICAgICBja3N0cm5jcHkoY3VyX2Nscyx0Z3NidWYs MzIpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICByZXR1cm47CisgICAgICAgIGJwID0gdGdz YnVmOworICAgICAgICBpZiAodGdldHN0cigiY2UiLCAmYnApKSB7ICAgICAgIC8qIEdldCBjbGVh ci10by1lbmQtb2YtbGluZSBjb2RlICovCisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJja190ZXJt c2V0IHRnZXRzdHIgY2UiLHRnc2J1ZiwiIik7CisgICAgICAgICAgICBpZiAoKGludClzdHJsZW4o dGdzYnVmKSA8IDMyKQorICAgICAgICAgICAgICBja3N0cm5jcHkoY3VyX2NsZW9sLHRnc2J1Ziwz Mik7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgIHJldHVybjsKKyAgICAgICAgYnAgPSB0Z3Ni dWY7CisgICAgICAgIGlmICh0Z2V0c3RyKCJjbSIsICZicCkpIHsgICAgICAgLyogR2V0IGN1cnNv ci1tb3ZlbWVudCBjb2RlICovCisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJja190ZXJtc2V0IHRn ZXRzdHIgY20iLHRnc2J1ZiwiIik7CisgICAgICAgICAgICBpZiAoKGludClzdHJsZW4odGdzYnVm KSA8IDY0KQorICAgICAgICAgICAgICBja3N0cm5jcHkoY3VyX2NtLHRnc2J1Ziw2NCk7CisgICAg ICAgIH0gZWxzZQorICAgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYgLyogTk9URVJNQ0FQ ICovCit9CisKKyNpZm5kZWYgVFBVVFNGTlRZUEUKKyNpZmRlZiBUUFVUU0lTVk9JRAorI2RlZmlu ZSBUUFVUU0ZOVFlQRSB2b2lkCisjZWxzZQorI2RlZmluZSBUUFVUU0ZOVFlQRSBpbnQKKyNlbmRp ZiAvKiBUUFVUU0lTVk9JRCAqLworI2VuZGlmIC8qIFRQVVRTRk5UWVBFICovCisKKyNpZm5kZWYg VFBVVFNBUkdUWVBFCisjaWZkZWYgSFBVWDkKKyNkZWZpbmUgVFBVVFNBUkdUWVBFIGNoYXIKKyNl bHNlCisjaWZkZWYgSFBVWDEwCisjZGVmaW5lIFRQVVRTQVJHVFlQRSBjaGFyCisjZWxzZQorI2Rl ZmluZSBUUFVUU0FSR1RZUEUgaW50CisjZW5kaWYgLyogSFBVWDEwICovCisjZW5kaWYgLyogSFBV WDkgKi8KKyNlbmRpZiAvKiBUUFVUU0FSR1RZUEUgKi8KKworc3RhdGljIFRQVVRTRk5UWVBFCisj aWZkZWYgQ0tfQU5TSUMKK2NrX291dGMoVFBVVFNBUkdUWVBFIHgpCisjZWxzZQorY2tfb3V0Yyh4 KSBUUFVUU0FSR1RZUEUgeDsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRvIHNhdGlzZnkgdHB1dHMoKSBhcmczIHByb3Rv dHlwZSAqLworICAgIGludCByYzsKKyAgICBjaGFyIGM7CisgICAgYyA9IChjaGFyKSB4OworICAg IHJjID0gKGluc2VydmVyKSA/IHR0b2MoYykgOiBjb25vYyhjKTsKKyNpZm5kZWYgVFBVVFNJU1ZP SUQKKyAgICByZXR1cm4ocmMpOworI2VuZGlmIC8qIFRQVVRTSVNWT0lEICovCit9CisKK2ludAor Y2tfY3VycG9zKHJvdywgY29sKSBpbnQgcm93LCBjb2w7IHsKKyNpZmRlZiBDS19BTlNJQworICAg IFRQVVRTRk5UWVBFICgqZm4pKFRQVVRTQVJHVFlQRSk7CisjZWxzZQorICAgIFRQVVRTRk5UWVBF ICgqZm4pKCk7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKyAgICBpZiAoIWZ4ZF9pbml0ZWQpCisg ICAgICBmeGRpbml0KDk5OTkpOworICAgIGlmICghY3VyX2NtWzBdKSB7ICAgICAgICAgICAgICAg ICAgIC8qIFdlIGRvbid0IGhhdmUgZXNjYXBlIHNlcXVlbmNlcyAqLworI2lmZGVmIENPTU1FTlQK KyAgICAgICAgcmV0dXJuKC0xKTsgICAgICAgICAgICAgICAgICAgICAvKiBEbyBub3RoaW5nICov CisjZWxzZQorICAgICAgICAvKiBCb3RoIEMtS2VybWl0J3MgU0NSRUVOIGNvbW1hbmQgYW5kIEFO U0kvVlQxMDAgYXJlIDEtYmFzZWQgKi8KKyAgICAgICAgcHJpbnRmKCJcMDMzWyVkOyVkSCIsIHJv dywgY29sKTsgLyogT3IgZGVmYXVsdCB0byBBTlNJICovCisjZW5kaWYgLyogQ09NTUVOVCAqLwor ICAgIH0gZWxzZSB7CisgICAgICAgIGZuID0gY2tfb3V0YzsKKyAgICAgICAgLyogdGVybWNhcC90 ZXJtaW5mbyBpcyAwLWJhc2VkICovCisgICAgICAgIHRwdXRzKAorI2lmZGVmIFRQVVRTQVJHMUNP TlNUCisgICAgICAgICAgICAgIChjb25zdCBjaGFyICopCisjZW5kaWYgLyogVFBVVFNBUkcxQ09O U1QgKi8KKyAgICAgICAgICAgICAgdGdvdG8oY3VyX2NtLGNvbC0xLHJvdy0xKSwxLGZuKTsKKyAg ICB9CisgICAgcmV0dXJuKDApOworfQorCitpbnQKK2NrX2NscygpIHsKKyNpZmRlZiBDS19BTlNJ QworICAgIFRQVVRTRk5UWVBFICgqZm4pKFRQVVRTQVJHVFlQRSk7CisjZWxzZQorICAgIFRQVVRT Rk5UWVBFICgqZm4pKCk7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKyAgICBpZiAoIWZ4ZF9pbml0 ZWQpCisgICAgICBmeGRpbml0KDk5OTkpOworICAgIGlmICghY3VyX2Nsc1swXSkgeyAgICAgICAg ICAgICAgICAgIC8qIElmIHdlIGRvbid0IGhhdmUgZXNjYXBlIHNlcXVlbmNlcyAqLworI2lmZGVm IENPTU1FTlQKKyAgICAgICAgcmV0dXJuKC0xKTsgICAgICAgICAgICAgICAgICAgICAvKiBEbyBu b3RoaW5nICovCisjZWxzZQorICAgICAgICBwcmludGYoIlwwMzNbO0hcMDMzWzJKIik7ICAgICAg IC8qIE9yIGRlZmF1bHQgdG8gQU5TSSAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICB9IGVs c2UgeworICAgICAgICBmbiA9IGNrX291dGM7CisgICAgICAgIGRlYnVnKEYxMTEsImNrX2NscyAy IixjdXJfY2xzLGZ4ZF9pbml0ZWQpOworICAgICAgICB0cHV0cyhjdXJfY2xzLGNtZF9yb3dzLGZu KTsKKyAgICB9CisgICAgcmV0dXJuKDApOworfQorCitpbnQKK2NrX2NsZW9sKCkgeworI2lmZGVm IENLX0FOU0lDCisgICAgVFBVVFNGTlRZUEUgKCpmbikoVFBVVFNBUkdUWVBFKTsKKyNlbHNlCisg ICAgVFBVVFNGTlRZUEUgKCpmbikoKTsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworICAgIGlmICgh ZnhkX2luaXRlZCkKKyAgICAgIGZ4ZGluaXQoOTk5OSk7CisgICAgaWYgKCFjdXJfY2xlb2xbMF0p IHsgICAgICAgICAgICAgICAgLyogSWYgd2UgZG9uJ3QgaGF2ZSBlc2NhcGUgc2VxdWVuY2VzICov CisjaWZkZWYgQ09NTUVOVAorICAgICAgICByZXR1cm4oLTEpOyAgICAgICAgICAgICAgICAgICAg IC8qIERvIG5vdGhpbmcgKi8KKyNlbHNlCisgICAgICAgIHByaW50ZigiXDAzM1tLIik7ICAgICAg ICAgICAgICAgLyogT3IgdXNlIEFOU0kgKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgfSBl bHNlIHsKKyAgICAgICAgZm4gPSBja19vdXRjOworICAgICAgICB0cHV0cyhjdXJfY2xlb2wsMSxm bik7CisgICAgfQorICAgIHJldHVybigwKTsKK30KKyNlbmRpZiAvKiBDS19DVVJQT1MgKi8KKyNl bHNlCitzdGF0aWMgdm9pZAorY2tfdGVybXNldCh4KSBpbnQgeDsgeworICAgIGlmICh4KSByZXR1 cm47Cit9CisjZW5kaWYgLyogTk9URVJNQ0FQICovCisKKyNpZm5kZWYgQ0tfQ1VSUE9TCisjZGVm aW5lIENLX0NVUlBPUworaW50Citja19jbHMoKSB7CisgICAgcHJpbnRmKCJcMDMzWztIXDAzM1sy SiIpOworICAgIHJldHVybigwKTsKK30KKworaW50Citja19jbGVvbCgpIHsKKyAgICBwcmludGYo IlwwMzNbSyIpOworICAgIHJldHVybigwKTsKK30KKworaW50Citja19jdXJwb3Mocm93LCBjb2wp IGludCByb3csIGNvbDsgeworICAgIHByaW50ZigiXDAzM1slZDslZEgiLCByb3csIGNvbCk7Cisg ICAgcmV0dXJuKDApOworfQorI2VuZGlmIC8qIENLX0NVUlBPUyAqLworCisKKyNpZm5kZWYgTk9Y RkVSCitzdGF0aWMgaW50IGNpbml0ID0gMDsgICAgICAgICAgICAgICAgICAgLyogRmxhZyBmb3Ig Y3Vyc2VzIGluaXQnZCAqLworc3RhdGljIGludCBjZW5kdyA9IDA7ICAgICAgICAgICAgICAgICAg IC8qIGVuZHdpbigpIHdhcyBjYWxsZWQgKi8KKworc3RhdGljCisjaWZkZWYgQ0tfQU5TSUMgICAg ICAgICAgICAgICAgICAgICAgICAgLyogQmVjYXVzZSBWT0lEIHVzZWQgYnkgY3Vyc2VzLmggKi8K K3ZvaWQKKyNlbHNlCisjaWZkZWYgTVlDVVJTRVMKK1ZPSUQKKyNlbHNlCitpbnQKKyNlbmRpZiAv KiBNWUNVUlNFUyAqLworI2VuZGlmIC8qIENLX0FOU0lDICovCisjaWZkZWYgQ0tfQU5TSUMgICAg ICAgICAgICAgICAgICAgICAgICAgLyogVXBkYXRlICUgdHJhbnNmZXJlZCBhbmQgJSBiYXIgKi8K K3VwZHBjdChsb25nIG9sZCwgbG9uZyBuZXcpCisjZWxzZSAvKiBDS19BTlNJQyAqLwordXBkcGN0 KG9sZCwgbmV3KSBsb25nIG9sZCwgbmV3OworI2VuZGlmIC8qIENLX0FOU0lDICovCisvKiB1cGRw Y3QgKi8geworI2lmZGVmIENPTU1FTlQKKyAgICBpbnQgbSwgbjsKKyAgICBtb3ZlKENXX1BDRCwy Mik7CisgICAgcHJpbnR3KCIlbGQiLCBuZXcpOworI2lmZGVmIEtVSQorI2lmbmRlZiBLOTVHCisg ICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19QQ0QsIChsb25n KSBuZXcpOworI2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBLVUkgKi8KKyNpZmRlZiBDS19Q Q1RfQkFSCisgICAgaWYgKHRoZXJtb21ldGVyKSB7CisgICAgICAgIGlmIChvbGQgPiBuZXcpIHsK KyAgICAgICAgICAgIG9sZCA9IDA7CisgICAgICAgICAgICBtb3ZlKENXX1BDRCwgMjYpOworICAg ICAgICAgICAgY2xydG9lb2woKTsKKyAgICAgICAgfQorICAgICAgICBtID0gb2xkLzI7CisgICAg ICAgIG1vdmUoQ1dfUENELCAyNiArIG0pOworICAgICAgICBuID0gbmV3IC8gMiAtIG07CisjaWZu ZGVmIE9TMgorICAgICAgICB3aGlsZSAobiA+IDApIHsKKyAgICAgICAgICAgIGlmICgobSArIDEp ICUgNSA9PSAwKQorICAgICAgICAgICAgICBwcmludHcoIioiKTsKKyAgICAgICAgICAgIGVsc2UK KyAgICAgICAgICAgICAgcHJpbnR3KCI9Iik7CisgICAgICAgICAgICBtKys7CisgICAgICAgICAg ICBuLS07CisgICAgICAgIH0KKyAgICAgICAgaWYgKG5ldyAlIDIgIT0gMCkgcHJpbnR3KCItIik7 CisgICAgICAgIC8qIG1vdmUoQ1dfUENELCAyMis1Myk7ICovCisjZWxzZSAvKiBPUzIgKi8KKyAg ICAgICAgd2hpbGUgKG4gPiAwKSB7CisgICAgICAgICAgICBwcmludHcoIiVjIiwgJ1wzMzMnKTsK KyAgICAgICAgICAgIG0rKzsgbi0tOworICAgICAgICB9CisgICAgICAgIGlmIChuZXcgJSAyICE9 IDApCisgICAgICAgICAgcHJpbnR3KCIlYyIsICdcMjYxJyk7CisjZW5kaWYgLyogT1MyICovCisg ICAgfQorI2VuZGlmIC8qIENLX1BDVF9CQVIgKi8KKyAgICAvKiBjbHJ0b2VvbCgpOyAqLworI2Vs c2UgIC8qICFDT01NRU5UICovCisjaWZkZWYgT1MyCisjZGVmaW5lIENIQVIxICAgJ1wzMzMnICAg ICAgICAgIC8qIE9TMiAtIENQNDM3ICovCisjZGVmaW5lIENIQVIyICAgJ1wyNjEnCisjZWxzZQor I2RlZmluZSBDSEFSMSAgICcvJyAgICAgICAgICAgICAvKiBEZWZhdWx0ICovCisjZGVmaW5lIENI QVIyICAgJy0nCisjZW5kaWYgLyogT1MyICovCisgICAgZGVidWcoRjEwMSwidXBkcGN0IG9sZCIs IiIsb2xkKTsKKyAgICBkZWJ1ZyhGMTAxLCJ1cGRwY3QgbmV3IiwiIixuZXcpOworICAgIG1vdmUo Q1dfUENELDIyKTsKKyAgICBwcmludHcoIiUtM2xkIiwgbmV3KTsgLyogICh3YXMpICAgcHJpbnR3 KCIlbGQiLCBuZXcpOyAgKi8KKyNpZmRlZiBLVUkKKyNpZm5kZWYgSzk1RworICAgIEt1aVNldFBy b3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX1BDRCwgKGxvbmcpIG5ldyApOwor I2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBLVUkgKi8KKyNpZmRlZiBDS19QQ1RfQkFSCisg ICAgaWYgKHRoZXJtb21ldGVyKSB7CisgICAgICAgIGludCBtLCBuOworCisgICAgICAgIGlmIChv bGQgPiBuZXcpIHsKKyAgICAgICAgICAgIG9sZCA9IDAgOworICAgICAgICAgICAgbW92ZShDV19Q Q0QsIDI2KTsKKyAgICAgICAgICAgIGNscnRvZW9sKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYg KG5ldyA8PSAxMDBMKSB7CisgICAgICAgICAgICBtID0gb2xkIC8gMjsKKyAgICAgICAgICAgIG4g PSBuZXcgLyAyIC0gbTsKKyAgICAgICAgICAgIG1vdmUoQ1dfUENELCAyNittKTsKKyAgICAgICAg ICAgIHdoaWxlIChuLS0gPiAwKQorICAgICAgICAgICAgICBwcmludHcoIiVjIiwgQ0hBUjEpOwor ICAgICAgICAgICAgaWYgKG5ldyAlIDIgIT0gMCkKKyAgICAgICAgICAgICAgcHJpbnR3KCIlYyIs IENIQVIyKTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBDS19QQ1RfQkFSICovCisjZW5k aWYgLyogQ09NTUVOVCAqLworfQorCitzdGF0aWMgQ0tfT0ZGX1Qgb2xkX3RyID0gKENLX09GRl9U KS0xOwkvKiBUaW1lIHJlbWFpbmluZyBwcmV2aW91c2x5ICovCisKK3N0YXRpYyBDS19PRkZfVAor I2lmZGVmIENLX0FOU0lDCitzaG9ldGwoQ0tfT0ZGX1Qgb2xkX3RyLCBsb25nIGNwcywgQ0tfT0ZG X1QgZnNpeiwgQ0tfT0ZGX1QgaG93ZmFyKQorI2Vsc2UKKyAgICBzaG9ldGwob2xkX3RyLCBjcHMs IGZzaXosIGhvd2ZhcikgbG9uZyBjcHM7IENLX09GRl9UIG9sZF90ciwgZnNpeiwgaG93ZmFyOwor I2VuZGlmIC8qIENLX0FOU0lDICovCisvKiBzaG9ldGwgKi8geyAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogRXN0aW1hdGVkIHRpbWUgbGVmdCBpbiB0cmFuc2ZlciAqLworICAgIENLX09GRl9U IHRyOwkJCS8qIFRpbWUgcmVtYWluaW5nLCBzZWNvbmRzICovCisKKyNpZmRlZiBHRlRJTUVSCisg ICAgaWYgKGZzaXogPiAwTCAmJiBjcHMgPiAwTCkKKyAgICAgIHRyID0gKENLX09GRl9UKSgoQ0tG TE9BVCkoZnNpeiAtIGhvd2ZhcikgLyAoQ0tGTE9BVCljcHMpOworICAgIGVsc2UKKyAgICAgIHRy ID0gKENLX09GRl9UKS0xOworI2Vsc2UKKyAgICB0ciA9IChmc2l6ID4gMEwgJiYgY3BzID4gMEwp ID8KKyAgICAgICgoZnNpeiAtIGhvd2ZhcikgLyBjcHMpIDoKKyAgICAgICAgKENLX09GRl9UKS0x OworI2VuZGlmIC8qIEdGVElNRVIgKi8KKyAgICBtb3ZlKENXX1RSLDIyKTsKKyAgICBpZiAodHIg PiAoQ0tfT0ZGX1QpLTEpIHsKKyAgICAgICAgaWYgKHRyICE9IG9sZF90cikgeworICAgICAgICAg ICAgcHJpbnR3KCIlcyIsaGhtbXNzKHRyKSk7CisjaWZkZWYgS1VJCisjaWZuZGVmIEs5NUcKKyAg ICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZylDV19UUiwg KGxvbmcpaGhtbXNzKHRyKSk7CisjZW5kaWYgLyogSzk1RyAqLworI2VuZGlmIC8qIEtVSSAqLwor ICAgICAgICAgICAgY2xydG9lb2woKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAg IHByaW50dygiKHVua25vd24pIik7CisjaWZkZWYgS1VJCisjaWZuZGVmIEs5NUcKKyAgICAgICAg S3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfVFIsIChsb25nKSAi KHVua25vd24pIiApOworI2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBLVUkgKi8KKyAgICAg ICAgY2xydG9lb2woKTsKKyAgICB9CisgICAgcmV0dXJuKHRyKTsKK30KKworc3RhdGljIGxvbmcK KyNpZmRlZiBDS19BTlNJQworc2hvY3BzKGludCBwY3QsIENLX09GRl9UIGZzaXosIENLX09GRl9U IGhvd2ZhcikKKyNlbHNlCitzaG9jcHMocGN0LCBmc2l6LCBob3dmYXIpIGludCBwY3Q7IENLX09G Rl9UIGZzaXosIGhvd2ZhcjsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogc2hvY3BzICovIHsK KyNpZmRlZiBDUFNfV0VJR0hURUQKKyAgICBzdGF0aWMgQ0tfT0ZGX1Qgb2xkZmZjID0gMEw7Cisj ZW5kaWYgLyogQ1BTX1dFSUdIVEVEICovCisjaWZkZWYgR0ZUSU1FUgorICAgIENLRkxPQVQgc2Vj cywgeHg7CisjZWxzZQorICAgIENLX09GRl9UIHNlY3MsIHh4OworI2VuZGlmIC8qIEdGVElNRVIg Ki8KKworI2lmZGVmIEdGVElNRVIKKyAgICB4eCA9IChndHYgPj0gMC4wKSA/IGd0diA6IDAuMDsg ICAgICAvKiBGbG9hdGluZy1wb2ludCB2ZXJzaW9uICovCisgICAgZ3R2ID0gZ2Z0aW1lcigpOwor ICAgIGlmICgoZ3R2IC0gb2xkZ3R2KSA8IChDS0ZMT0FUKSAxLjApIC8qIE9ubHkgZG8gdGhpcyBv bmNlIHBlciBzZWNvbmQgKi8KKyAgICAgIHJldHVybihvbGRjcHMpOworICAgIG9sZGd0diA9IHh4 OworI2Vsc2UKKyAgICB4eCA9IChndHYgPj0gMCkgPyBndHYgOiAwOyAgICAgICAgICAvKiBXaG9s ZS1udW1iZXIgdmVyc2lvbiAqLworICAgIGd0diA9IGd0aW1lcigpOworICAgIGlmICgoZ3R2IC0g b2xkZ3R2KSA8IDEpCisgICAgICByZXR1cm4ob2xkY3BzKTsKKyAgICBvbGRndHYgPSB4eDsKKyNl bmRpZiAvKiBHRlRJTUVSICovCisKKyNpZmRlZiBDUFNfV0VJR0hURUQKKyAgICAvKiBkZWJ1ZyhG MTAwLCJTSE9DUFM6IFdFSUdIVEVEIiwiIiwwKTsgKi8KKyAgICBpZiAoZ3R2ICE9IG9sZGd0dikg eyAgICAgICAgICAgICAgICAvKiBUaGUgZmlyc3QgcGFja2V0IGlzIGlnbm9yZWQgKi8KKyAgICAg ICAgaWYgKGZmYyA8IG9sZGZmYykKKyAgICAgICAgICBvbGRmZmMgPSBmZmM7CisgICAgICAgIG9s ZGNwcyA9IGNwczsKKyAgICAgICAgaWYgKG9sZGNwcyAmJiBvbGRndHYgPgorI2lmZGVmIEdGVElN RVIKKyAgICAgICAgICAgIDEuMAorI2Vsc2UKKyAgICAgICAgICAgIDEKKyNlbmRpZiAvKiBHRlRJ TUVSICovCisgICAgICAgICAgICApIHsgICAgICAgICAgICAgICAgICAgICAgICAgLyogVGhlIGZp cnN0IHNlY29uZCBpcyBpZ25vcmVkICovCisvKgorICBUaGlzIHZlcnNpb24gb2Ygc2hvY3BzKCkg cHJvZHVjZXMgYSB3ZWlnaHRlZCBhdmVyYWdlIHRoYXQgc29tZQorICBwZW9wbGUgbGlrZSwgYnV0 IG1vc3QgcGVvcGxlIGZpbmQgaXQgZGlzY29uY2VydGluZyBhbmQgYm9tYmFyZCB1cworICB3aXRo IHF1ZXN0aW9ucyBhbmQgY29tcGxhaW50cyBhYm91dCB3aHkgdGhlIENQUyBmaWd1cmUgZmx1Y3R1 YXRlcyBzbworICB3aWxkbHkuICBTbyBub3cgeW91IG9ubHkgZ2V0IHRoZSB3ZWlnaHRlZCBhdmVy YWdlIGlmIHlvdSBidWlsZCB0aGUKKyAgcHJvZ3JhbSB5b3Vyc2VsZiB3aXRoIENQU19XRUlHSFRF RCBkZWZpbmVkLgorKi8KKyNpZm5kZWYgQ1BTX1ZJTkNFCisjaWZkZWYgR0ZUSU1FUgorICAgICAg ICAgICAgY3BzID0gKGxvbmcpKCgoKENLRkxPQVQpb2xkY3BzICogMy4wKSArCisgICAgICAgICAg ICAgICAgICAgKENLRkxPQVQpKGZmYyAtIG9sZGZmYykgLyAoZ3R2LW9sZGd0dikgKSAvIDQuMCk7 CisjZWxzZQorICAgICAgICAgICAgY3BzID0gKCAob2xkY3BzICogMykgKyAoZmZjIC0gb2xkZmZj KSAvIChndHYtb2xkZ3R2KSApIC8gNDsKKyNlbmRpZiAvKiBHRlRJTUVSICovCisjZWxzZQorLyog QW5kIGFuIGFsdGVybmF0ZSB3ZWlnaHRpbmcgc2NoZW1lIGZyb20gVmluY2VudCBGYXRpY2EuLi4g Ki8KKyAgICAgICAgICAgIGNwcyA9ICgzICoKKyAgICAgICAgICAgICAoKDErcGN0LzMwMCkqb2xk ZmZjL29sZGd0disoMS1wY3QvMTAwKSooZmZjLW9sZGZmYykvKGd0di1vbGRndHYpKSkKKyAgICAg ICAgICAgICAgLyA0OworI2VuZGlmIC8qIENQU19WSU5DRSAqLworICAgICAgICB9IGVsc2Ugewor ICAgICAgICAgICAgLyogTm8gd2VpZ2h0ZWQgYXZlcmFnZSBzaW5jZSB0aGVyZSBpcyBub3RoaW5n IHRvIHdlaWdoICovCisjaWZkZWYgR0ZUSU1FUgorICAgICAgICAgICAgY3BzID0gKGxvbmcpKGd0 diAhPSAwLjAgPworICAgICAgICAgICAgICAoQ0tGTE9BVCkoZmZjIC0gb2xkZmZjKSAvIChndHYg LSBvbGRndHYpIDoKKyAgICAgICAgICAgICAgICAoZmZjIC0gb2xkZmZjKSkgOworI2Vsc2UKKyAg ICAgICAgICAgIGNwcyA9IGd0diA/IChmZmMgLSBvbGRmZmMpIC8gKGd0diAtIG9sZGd0dikgOiAo ZmZjIC0gb2xkZmZjKSA7CisjZW5kaWYgLyogR0ZUSU1FUiAqLworICAgICAgICB9CisjaWZkZWYg Q09NTUVOVAorI2lmZGVmIERFQlVHCisgICAgICAgIGlmIChkZWJsb2cpIHsKKyAgICAgICAgICAg IGRlYnVnKEYxMDEsIlNIT0NQUzogcGN0ICAgIiwiIixwY3QpOworICAgICAgICAgICAgZGVidWco RjEwMSwiU0hPQ1BTOiBndHYgICAiLCIiLGd0dik7CisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJT SE9DUFM6IG9sZGd0diIsIiIsb2xkZ3R2KTsKKyAgICAgICAgICAgIGRlYnVnKEYxMDEsIlNIT0NQ UzogZGd0diAgIiwiIiwobG9uZykoZ3R2LW9sZGd0dikpOworICAgICAgICAgICAgZGVidWcoRjEw MSwiU0hPQ1BTOiBmZmMgICAiLCIiLGZmYyk7CisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJTSE9D UFM6IG9sZGZmYyIsIiIsb2xkZmZjKTsKKyAgICAgICAgICAgIGRlYnVnKEYxMDEsIlNIT0NQUzog ZGZmYyAgIiwiIixmZmMtb2xkZmZjKTsKKyAgICAgICAgICAgIGRlYnVnKEYxMDEsIlNIT0NQUzog Y3BzICAgIiwiIixjcHMpOworICAgICAgICB9CisjZW5kaWYgLyogREVCVUcgKi8KKyNlbmRpZiAv KiBDT01NRU5UICovCisgICAgICAgIG1vdmUoQ1dfQ1AsMjIpOworICAgICAgICBwcmludHcoIiVs ZCIsIGNwcyk7CisjaWZkZWYgS1VJCisjaWZuZGVmIEs5NUcKKyAgICAgICAgS3VpU2V0UHJvcGVy dHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfQ1AsIChsb25nKSBjcHMgKTsKKyNlbmRp ZiAvKiBLOTVHICovCisjZW5kaWYgLyogS1VJICovCisgICAgICAgIGNscnRvZW9sKCk7CisgICAg ICAgIG9sZGZmYyA9IGZmYzsKKyAgICB9CisjZWxzZSAvKiAhQ1BTX1dFSUdIVEVEICovCisjaWZk ZWYgQ09NTUVOVAorI2lmZGVmIERFQlVHCisgICAgaWYgKGRlYmxvZykgeworCWRlYnVnKEYxMDAs IlNIT0NQUzogTk9UIFdFSUdIVEVEIiwiIiwwKTsKKyAgICAgICAgZGVidWcoRjEwMSwiU0hPQ1BT OiBwY3QgICAgIiwiIixwY3QpOworICAgICAgICBkZWJ1ZyhGMTAxLCJTSE9DUFM6IGd0diAgICAi LCIiLGd0dik7CisgICAgICAgIGRlYnVnKEYxMDEsIlNIT0NQUzogb2xkZ3R2ICIsIiIsb2xkZ3R2 KTsKKyAgICAgICAgZGVidWcoRjEwMSwiU0hPQ1BTOiBkZ3R2ICAgIiwiIiwobG9uZylndHYgLSAo bG9uZylvbGRndHYpOworICAgICAgICBkZWJ1ZyhGMTAxLCJTSE9DUFM6IGZmYyAgICAiLCIiLGZm Yyk7CisgICAgICAgIGRlYnVnKEYxMDEsIlNIT0NQUzogb2xkZmZjICIsIiIsb2xkZmZjKTsKKyAg ICAgICAgZGVidWcoRjEwMSwiU0hPQ1BTOiBkZmZjICAgIiwiIixmZmMtb2xkZmZjKTsKKyAgICAg ICAgZGVidWcoRjEwMSwiU0hPQ1BTOiBjcHMgICAgIiwiIixjcHMpOworICAgICAgICBkZWJ1ZyhG MTAxLCJTSE9DUFM6IGZpbGNudCAiLCIiLGZpbGNudCk7CisjaWZkZWYgR0ZUSU1FUgorICAgICAg ICBkZWJ1ZyhGMTAxLCJTSE9DUFM6IGZwZnNlY3MiLCIiLGZwZnNlY3MpOworI2VuZGlmIC8qIEdG VElNRVIgKi8KKyAgICB9CisgICAgZGVidWcoRjEwMSwic2hvY3BzIGd0diIsIiIsZ3R2KTsKKyNl bmRpZiAvKiBERUJVRyAqLworI2lmZGVmIEdGVElNRVIKKyNlbmRpZiAvKiBDT01NRU5UICovCisg ICAgLyogZGVidWcoRjEwMSwic2hvY3BzIGZwZnNlY3MiLCIiLGZwZnNlY3MpOyAqLworICAgIHNl Y3MgPSBndHYgLSBmcGZzZWNzOworICAgIC8qIGRlYnVnKEYxMDEsInNob2NwcyBzZWNzIiwiIiwo bG9uZylzZWNzKTsgKi8KKyAgICBpZiAoc2VjcyA+IDAuMCkgeworICAgICAgICBjcHMgPSAobG9u ZykoKENLRkxPQVQpIGZmYyAvIHNlY3MpOworICAgICAgICAvKiBkZWJ1ZyhGMTAxLCJzaG9jcHMg Y3BzIiwiIixjcHMpOyAqLworICAgICAgICBtb3ZlKENXX0NQLDIyKTsKKyNpZmRlZiBLVUkKKyNp Zm5kZWYgSzk1RworICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChs b25nKSBDV19DUCwgKGxvbmcpIGNwcyApOworI2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBL VUkgKi8KKyAgICAgICAgcHJpbnR3KCIlbGQiLCBjcHMpOworICAgICAgICBjbHJ0b2VvbCgpOwor ICAgIH0KKyNlbHNlICAvKiBOb3QgR0ZUSU1FUiAqLworICAgIGlmICgoc2VjcyA9IGd0diAtIGZz ZWNzKSA+IDApIHsKKyAgICAgICAgY3BzID0gKHNlY3MgPCAxTCkgPyBmZmMgOiBmZmMgLyBzZWNz OworICAgICAgICBtb3ZlKENXX0NQLDIyKTsKKyNpZmRlZiBLVUkKKyNpZm5kZWYgSzk1RworICAg ICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19DUCwgKGxv bmcpIGNwcyApOworI2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBLVUkgKi8KKyAgICAgICAg cHJpbnR3KCIlbGQiLCBjcHMpOworICAgICAgICBjbHJ0b2VvbCgpOworICAgIH0KKyNlbmRpZiAv KiBHRlRJTUVSICovCisjZW5kaWYgLyogQ1BTX1dFSUdIVEVEICovCisKKyAgICBpZiAoY3BzID4g cGVha2NwcyAmJiAgICAgICAgICAgICAgICAvKiBQZWFrIHRyYW5zZmVyIHJhdGUgKi8KKyAgICAg ICAgKCh3aGF0ICYgV19TRU5EICYmIHNwYWNrZXRzID4gd3Nsb3RzICsgNCkgfHwKKwkgKCEod2hh dCAmIFdfU0VORCkgJiYgc3BhY2tldHMgPiAxMCkpKSB7CisgICAgICAgIHBlYWtjcHMgPSBjcHM7 CisgICAgfQorICAgIG9sZF90ciA9IHNob2V0bChvbGRfdHIsIGNwcywgZnNpeiwgaG93ZmFyKTsK KyAgICByZXR1cm4oY3BzKTsKK30KKworc3RhdGljCisjaWZkZWYgQ0tfQU5TSUMgICAgICAgICAg ICAgICAgICAgICAgICAgLyogQmVjYXVzZSBWT0lEIHVzZWQgYnkgY3Vyc2VzLmggKi8KK3ZvaWQK KyNlbHNlCisjaWZkZWYgTVlDVVJTRVMKK1ZPSUQKKyNlbHNlCitpbnQKKyNlbmRpZiAvKiBNWUNV UlNFUyAqLworI2VuZGlmIC8qIENLX0FOU0lDICovCitzY3JmdCgpIHsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogRGlzcGxheSBmaWxlIHR5cGUgKi8KKyAgICBjaGFyIHhmZXJzdHJb MjU2XTsKKyAgICB4ZmVyc3RyWzBdID0gTlVMOworICAgIGRlYnVnKEYxMDEsInNjcmZ0IGJpbmFy eSIsIiIsYmluYXJ5KTsKKyAgICBpZiAoYmluYXJ5KSB7CisgICAgICAgIHN3aXRjaChiaW5hcnkp IHsKKyAgICAgICAgICBjYXNlIFhZRlRfTDoKKyAgICAgICAgICAgIGNrc3RybmNweSh4ZmVyc3Ry LCJMQUJFTEVEIiwyNTYpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBYWUZU X0k6CisgICAgICAgICAgICBja3N0cm5jcHkoeGZlcnN0ciwiSU1BR0UiLDI1Nik7CisgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIFhZRlRfVToKKyAgICAgICAgICAgIGNrc3RybmNw eSh4ZmVyc3RyLCJCSU5BUlkgVU5ERUZJTkVEIiwyNTYpOworICAgICAgICAgICAgYnJlYWs7CisJ ICBjYXNlIFhZRlRfTToKKyAgICAgICAgICAgIGNrc3RybmNweSh4ZmVyc3RyLCJNQUNCSU5BUlki LDI1Nik7CisgICAgICAgICAgICBicmVhazsKKwkgIGNhc2UgWFlGVF9YOgorICAgICAgICAgICAg Y2tzdHJuY3B5KHhmZXJzdHIsIlRFTkVYIiwyNTYpOworICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICBjYXNlIFhZRlRfQjoKKyAgICAgICAgICAgIGNrc3Ry bmNweSh4ZmVyc3RyLCJCSU5BUlkiLDI1Nik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg fQorI2lmZGVmIENLX1JFU0VORAorICAgICAgICBpZiAod2hhdCAmIFdfU0VORCAmJiBzZW5kc3Rh cnQgPiAwTCkgeworICAgICAgICAgICAgaWYgKHNlbmRtb2RlID09IFNNX1BTRU5EKSB7CisgICAg ICAgICAgICAgICAgY2tzdHJuY2F0KHhmZXJzdHIsICIgLyBwYXJ0aWFsIiwgMjU2KTsKKyAgICAg ICAgICAgIH0gZWxzZSBpZiAoc2VuZG1vZGUgPT0gU01fUkVTRU5EKSB7CisgICAgICAgICAgICAg ICAgY2tzdHJuY2F0KHhmZXJzdHIsICIgLyByZXNlbmQiLCAyNTYpOworICAgICAgICAgICAgfQor ICAgICAgICB9IGVsc2UgaWYgKHdoYXQgJiBXX1JFQ1YgJiYgcnNfbGVuID4gMEwpIHsKKyAgICAg ICAgICAgIGNrc3RybmNhdCh4ZmVyc3RyLCAiIC8gcmVzZW5kIiwgMjU2KTsKKyAgICAgICAgfQor I2VuZGlmIC8qIENLX1JFU0VORCAqLworICAgIH0gZWxzZSB7CisKKyNpZm5kZWYgTk9DU0VUUwor ICAgICAgICBja3N0cm5jcHkoeGZlcnN0ciwiVEVYVCIsMjU2KTsKKyNpZmRlZiBORVdGVFAKKyNp Zm5kZWYgTk9VTklDT0RFCisJaWYgKHdoYXQgJiBXX0ZUUCkgeworCSAgICBpZiAoZnRwX2NzeCA8 IDApCisJICAgICAgY2tzdHJuY2F0KHhmZXJzdHIsIiAobm8gdHJhbnNsYXRpb24pIiwgMjU2KTsK KwkgICAgZWxzZQorCSAgICAgIGNrbWFreG1zZygmeGZlcnN0cls0XSwyNTIsCisJCSAgICAgICAi ICgiLAorCQkgICAgICAgZmNzaW5mb1sod2hhdCAmIFdfU0VORCkgPyBmdHBfY3NsIDogZnRwX2Nz eF0ua2V5d29yZCwKKwkJICAgICAgICIgPT4gIiwKKwkJICAgICAgIGZjc2luZm9bKHdoYXQgJiBX X1NFTkQpID8gZnRwX2NzeCA6IGZ0cF9jc2xdLmtleXdvcmQsCisJCSAgICAgICAiKSIsCisJCSAg ICAgICBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMCisJCSAgICAgICApOworCX0g ZWxzZQorI2VuZGlmIC8qIE5PVU5JQ09ERSAqLworI2VuZGlmIC8qIE5FV0ZUUCAqLworCSAgaWYg KHRjaGFyc2V0ID09IFRDX1RSQU5TUCkgeworICAgICAgICAgICAgY2tzdHJuY2F0KHhmZXJzdHIs ICIgKG5vIHRyYW5zbGF0aW9uKSIsIDI1Nik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg ICBpZiAod2hhdCAmIFdfU0VORCkgeworICAgICAgICAgICAgICAgIHNwcmludGYoICZ4ZmVyc3Ry W3N0cmxlbih4ZmVyc3RyKV0sIC8qIHNhZmUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICIg KCVzID0+ICVzKSIsCisgICAgICAgICAgICAgICAgICAgICAgICBmY3NpbmZvW2ZjaGFyc2V0XS5r ZXl3b3JkLCAvKiBidWlsdC1pbiBrZXl3b3JkcyAqLworICAgICAgICAgICAgICAgICAgICAgICAg dGNzaW5mb1t0Y2hhcnNldF0ua2V5d29yZCAgLyogbGVuZ3RocyBhcmUgY29udHJvbGxlZCAqLwor CQkJKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3ByaW50ZiggJnhm ZXJzdHJbc3RybGVuKHhmZXJzdHIpXSwgLyogc2FmZSAqLworICAgICAgICAgICAgICAgICAgICAg ICAgIiAoJXMgPT4gJXMpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRjc2luZm9bdGNoYXJz ZXRdLmtleXdvcmQsIC8qIGJ1aWx0LWluIGtleXdvcmRzICovCisgICAgICAgICAgICAgICAgICAg ICAgICBmY3NpbmZvW2ZjaGFyc2V0XS5rZXl3b3JkKTsgLyogbGVuZ3RocyBjb250cm9sbGVkICov CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyNlbmRpZiAvKiBOT0NTRVRTICovCisgICAgfQor ICAgIG1vdmUoQ1dfVFlQLDIyKTsKKyAgICBwcmludHcoIiVzIiwgeGZlcnN0cik7CisgICAgY2xy dG9lb2woKTsKKyNpZmRlZiBLVUkKKyNpZm5kZWYgSzk1RworICAgIEt1aVNldFByb3BlcnR5KCBL VUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX1RZUCwgKGxvbmcpIHhmZXJzdHIgKTsKKyNlbmRp ZiAvKiBLOTVHICovCisjZW5kaWYgLyogS1VJICovCisgICAgcmV0dXJuOworfQorCisjaWZkZWYg Q0tfTkVXVEVSTQorc3RhdGljIEZJTEUgKmNrX3N0ZG91dCA9IE5VTEw7CitzdGF0aWMgaW50IGNr X2ZkID0gLTE7CisjZW5kaWYgLyogQ0tfTkVXVEVSTSAqLworCitzdGF0aWMgbG9uZyBwY3QgPSAw TCwgb2xkcGN0ID0gMEwsIG9sZHJ0dCA9IC0xTDsKK3N0YXRpYyBpbnQgb2xkdHlwID0gMCwgb2xk d2luID0gLTEsIG9sZHRyeSA9IC0xLCBvbGRsZW4gPSAtMSwgb2xkdGltID0gLTE7CisKKyNpZmRl ZiBORVRDT05OCitzdGF0aWMgY2hhciAqbmV0bmFtZVtdID0geworICAgICJub25lIiwJCQkJLyog MDAgKi8KKyAgICAiVENQL0lQIiwJCQkJLyogMDEgVENQIChTb2NrZXRzKSAqLworICAgICJUQ1Av SVAiLAkJCQkvKiAwMiBUQ1AgKFN0cmVhbXMpICovCisgICAgIlguMjUiLAkJCQkvKiAwMyBTdW5M aW5rIFguMjQgICovCisgICAgIkRFQ25ldCIsCQkJCS8qIDA0IERFQ25ldCAgKi8KKyAgICAiVkFY IFBTSSIsCQkJCS8qIDA1IFZBWCBQU0kgKi8KKyAgICAiTmFtZWQgUGlwZXMiLAkJCS8qIDA2IExB TiBNYW5hZ2VyIE5hbWVkIFBpcGUgKi8KKyAgICAiWC4yNSIsCQkJCS8qIDA3IFN0cmF0dXMgVk9T IFguMjUgKi8KKyAgICAiTmV0QklPUyIsCQkJCS8qIDA4IElCTSBORVRCSU9TICovCisgICAgIlN1 cGVyTEFUIiwJCQkJLyogMDcgTWVyaWRpYW4gU3VwZXJMQVQgKi8KKyAgICAiRmlsZSIsCQkJCS8q IDEwIEZpbGUgKi8KKyAgICAiQ29tbWFuZCIsCQkJCS8qIDExIFN1YnByb2Nlc3MgKHBpcGUpICov CisgICAgIkRMTCIsCQkJCS8qIDEyIERMTCBkb2VzIGkvbyAqLworICAgICJYLjI1IiwJCQkJLyog MTMgSUJNIEFJWExpbmsgWC4yNSAqLworICAgICJYLjI1IiwJCQkJLyogMTQgSFAtVVggWC4yNSAq LworICAgICJQVFkiLAkJCQkvKiAxNSBQc2V1ZG90ZXJtaW5hbCAqLworICAgICJTU0giLAkJCQkv KiAxNiBTU0ggKi8KKyAgICAiPEVSUk9SPiIsCQkJCS8qIDE3IEluIGNhc2UgbmV3IHR5cGVzIGFy ZSBhZGRlZCAqLworICAgICI8RVJST1I+IiwJCQkJLyogMTggYnV0IG5vYm9keSByZW1lbWJlcnMg dG8gdXBkYXRlICovCisgICAgIjxFUlJPUj4iLAkJCQkvKiAxOSB0aGlzIHRhYmxlIC4uLiAqLwor ICAgIE5VTEwJCQkJLyogMjAgKi8KK307CitzdGF0aWMgaW50IG5uZXRuYW1lID0gKHNpemVvZihu ZXRuYW1lKSAvIHNpemVvZihjaGFyICopKTsKKworI2VuZGlmIC8qIE5FVENPTk4gKi8KKworI2lm ZGVmIENLX0FOU0lDCit2b2lkCitzY3JlZW5jKGludCBmLCBjaGFyIGMsQ0tfT0ZGX1QgbixjaGFy ICpzKQorI2Vsc2UKK0NLVk9JRAorc2NyZWVuYyhmLGMsbixzKQoraW50IGY7ICAgICAgICAgIC8q IGFyZ3VtZW50IGRlc2NyaXB0b3IgKi8KK2NoYXIgYzsgICAgICAgICAvKiBhIGNoYXJhY3RlciBv ciBzbWFsbCBpbnRlZ2VyICovCitDS19PRkZfVCBuOyAgICAgLyogYSBsb25nIGludGVnZXIgKi8K K2NoYXIgKnM7ICAgICAgICAvKiBhIHN0cmluZyAqLworI2VuZGlmIC8qIENLX0FOU0lDICovCisv KiBzY3JlZW5jKCkgKi8geworI2lmZGVmIENLX1NTTAorICAgIGV4dGVybiBpbnQgdGxzX2FjdGl2 ZV9mbGFnLCBzc2xfYWN0aXZlX2ZsYWc7CisjZW5kaWYgLyogQ0tfU1NMICovCisjaWZkZWYgUkxP R0NPREUKKyAgICBleHRlcm4gaW50IHR0bnByb3RvOworI2VuZGlmIC8qIFJMT0dDT0RFICovCisg ICAgc3RhdGljIGludCBxID0gMDsKKyAgICBzdGF0aWMgbG9uZyBmY250ID0gMEw7CQkvKiBOdW1i ZXIgb2YgZmlsZXMgdHJhbnNmZXJyZWQgKi8KKyAgICBzdGF0aWMgQ0tfT0ZGX1QgZnNpeiA9IChD S19PRkZfVCktMTsgLyogQ29weSBvZiBmaWxlIHNpemUgKi8KKyAgICBzdGF0aWMgQ0tfT0ZGX1Qg ZmJ5dCA9IDBMOyAvKiBUb3RhbCBmaWxlIGJ5dGVzIG9mIGFsbCBmaWxlcyB0cmFuc2ZlcnJlZCAq LworICAgIHN0YXRpYyBDS19PRkZfVCBob3dmYXIgPSAwTDsgLyogSG93IG11Y2ggb2YgY3VycmVu dCBmaWxlIGhhcyBiZWVuIHhmZXInZCAqLworICAgIHN0YXRpYyBpbnQgIHBjdGxibCA9IDBMOyAg LyogUGVyY2VudCBkb25lIHZzIEJ5dGVzIHNvIGZhciAqLworICAgIGxvbmcgY3BzID0gMEw7CisK KyAgICBpbnQgbmV0ID0gMDsKKyAgICBpbnQgeG5ldCA9IDA7CisgICAgaW50IGZ0cCA9IDA7Cisg ICAgaW50IGxlbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTGVuZ3RoIG9mIHN0cmlu ZyAqLworICAgIGludCBlcnJvcnMgPSAwOyAgICAgICAgICAgICAgICAgICAgIC8qIEVycm9yIGNv dW50ZXIgKi8KKyAgICBpbnQgeDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXb3Jr ZXIgKi8KKworICAgIGRlYnVnKEYxMDEsInNjcmVlbmMgY2luaXQiLCIiLGNpbml0KTsKKyAgICBk ZWJ1ZyhGMTAxLCJzY3JlZW5jIGNlbmR3IiwiIixjZW5kdyk7CisKKyAgICBpZiAoIXMpIHMgPSAi IjsgICAgICAgICAgICAgICAgICAgICAvKiBBbHdheXMgZG8gdGhpcy4gKi8KKworICAgIGZ0cCA9 ICh3aGF0ICYgV19GVFApID8gMSA6IDA7CS8qIEZUUCBvciBLZXJtaXQgKi8KKyAgICBuZXQgPSBu ZXR3b3JrIHx8IGZ0cDsKKyAgICB4bmV0ID0gZnRwID8gMSA6IG5ldHR5cGU7CQkvKiBORVRfVENQ QiA9PSAxICovCisKKyAgICBpZiAoY2luaXQgPT0gMCB8fCBjZW5kdyA+IDApIHsgICAgICAvKiBI YW5kbGUgYm9yZGVybGluZSBjYXNlcy4uLiAqLworICAgICAgICBpZiAoZiA9PSBTQ1JfQ1cpIHsg ICAgICAgICAgICAgIC8qIENsb3NlIHdpbmRvdywgYnV0IGl0J3Mgbm90IG9wZW4gKi8KKyAgICAg ICAgICAgIGZ0X3dpbiA9IDA7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAg ICAgZGVidWcoRjExMSwic2NyZWVuYyBBIixzLGYpOworICAgICAgICBpZiAoZiA9PSBTQ1JfRU0g fHwKKyAgICAgICAgICAgKGYgPT0gU0NSX1BUICYmIGMgPT0gJ0UnKSkgeyAvKiBGYXRhbCBlcnJv ciBiZWZvcmUgd2luZG93IG9wZW4gKi8KKyAgICAgICAgICAgIGNvbm9sbCgiIik7IGNvbm9jKCc/ Jyk7IGNvbm9sbChzKTsgcmV0dXJuOyAvKiBSZWd1bGFyIGRpc3BsYXkgKi8KKyAgICAgICAgfQor ICAgIH0KKyAgICBpZiAoY2luaXQgPT0gMCkgeyAgICAgICAgICAgICAgICAgICAvKiBPbmx5IGNh bGwgaW5pdHNjcigpIG9uY2UgKi8KKwljaGFyICogczsKKwkvKiBDaGVjayB0aGVzZSBub3cgLS0g aWYgdGhleSBhcmUgZGVmaW5lZCBidXQgbm90IG51bWVyaWMgKi8KKwkvKiB0aGV5IGNhbiBjcmFz aCBjdXJzZXMgKi8KKwlzID0gZ2V0ZW52KCJMSU5FUyIpOworCWlmIChzKSBpZiAoIXJkaWdpdHMo cykpIHsKKwkgICAgcHJpbnRmKCI/TElORVMgdmFyaWFibGUgbm90IG51bWVyaWM6IFwiJXNcIi5c biIscyk7CisJICAgIHByaW50ZigiKEZ1bGxzY3JlZW4gZGlzcGxheSBkaXNhYmxlZClcbiIpOwor CSAgICBmZGlzcGxhID0gWFlGRF9TOworCSAgICByZXR1cm47CisJfQorCXMgPSBnZXRlbnYoIkNP TFVNTlMiKTsKKwlpZiAocykgaWYgKCFyZGlnaXRzKHMpKSB7CisJICAgIHByaW50ZigiP0NPTFVN TlMgdmFyaWFibGUgbm90IG51bWVyaWM6IFwiJXNcIi5cbiIscyk7CisJICAgIHByaW50ZigiKEZ1 bGxzY3JlZW4gZGlzcGxheSBkaXNhYmxlZClcbiIpOworCSAgICBmZGlzcGxhID0gWFlGRF9TOwor CSAgICByZXR1cm47CisJfQorICAgICAgICBjZW5kdyA9IDE7ICAgICAgICAgICAgICAgICAgICAg IC8qIE5ldyB3aW5kb3cgbmVlZHMgcmVwYWludGluZyAqLworI2lmZGVmIENPTU1FTlQKKyAgICAg ICAgaWYgKCFpbml0c2NyKCkpIHsgICAgICAgICAgICAgICAvKiBPb3BzLCBjYW4ndCBpbml0aWFs aXplIHdpbmRvdz8gKi8KKy8qCisgIEluIGZhY3QsIHRoaXMgZG9lc24ndCBoYXBwZW4uICAibWFu IGN1cnNlcyIgc2F5cyBpbml0c2NyKCkgaGFsdHMgdGhlCisgIGVudGlyZSBwcm9ncmFtIGlmIGl0 IGZhaWxzLCB3aGljaCBpcyB0cnVlIG9uIHRoZSBzeXN0ZW1zIHdoZXJlIEkndmUKKyAgdGVzdGVk IGl0LiAgSXQgd2lsbCBmYWlsIGlmIHlvdXIgdGVybWluYWwgdHlwZSBpcyBub3Qga25vd24gdG8g aXQuCisgIFRoYXQncyB3aHkgU0VUIEZJTEUgRElTUExBWSBGVUxMU0NSRUVOIGNhbGxzIHRnZXRl bnQoKSB0byBtYWtlIHN1cmUgdGhlCisgIHRlcm1pbmFsIHR5cGUgaXMga25vd24gYmVmb3JlIGFs bG93aW5nIGEgY3Vyc2VzIGRpc3BsYXkuCisqLworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIs IkNVUlNFUyBJTklUU0NSIEVSUk9SXHJcbiIpOworICAgICAgICAgICAgZmRpc3BsYSA9IFhZRkRf UzsgICAgICAgICAgIC8qIEZhbGwgYmFjayB0byBDUlQgZGlzcGxheSAqLworICAgICAgICAgICAg cmV0dXJuOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgY2luaXQrKzsgICAgICAgICAg ICAgICAgICAgIC8qIFdpbmRvdyBpbml0aWFsaXplZCBvayAqLworICAgICAgICAgICAgZGVidWco RjEwMCwiQ1VSU0VTIElOSVRTQ1IgT0siLCIiLDApOworICAgICAgICB9CisjZWxzZSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2F2ZSBzb21lIG1lbW9yeS4gKi8KKyNpZmRl ZiBDS19ORVdURVJNCisgICAgICAgIC8qIChGcm9tIEFuZHkgRnlmZSA8YW5keUB2bHNpLmNzLmNh bHRlY2guZWR1PikKKyAgICAgICAgICAgU3lzdGVtIFYgY3Vyc2VzIHNlZW1zIHRvIHJlc2VydmUg dGhlIHJpZ2h0IHRvIGFsdGVyIHRoZSBidWZmZXJpbmcKKyAgICAgICAgICAgb24gdGhlIG91dHB1 dCBGSUxFKiB3aXRob3V0IHJlc3RvcmluZyBpdC4gIEZvcnR1bmF0ZWx5IFN5c3RlbSBWCisgICAg ICAgICAgIGN1cnNlcyBwcm92aWRlcyBuZXd0ZXJtKCksIGFuIGFsdGVybmF0aXZlIHRvIGluaXRz Y3IoKSwgdGhhdAorICAgICAgICAgICBhbGxvd3MgdXMgdG8gc3BlY2lmeSBleHBsaWNpdGx5IHRo ZSB0ZXJtaW5hbCB0eXBlIGFuZCBpbnB1dCBhbmQKKyAgICAgICAgICAgb3V0cHV0IEZJTEUgcG9p bnRlcnMuICBUaHVzIHdlIGR1cGxpY2F0ZSBzdGRvdXQsIGFuZCBsZXQgY3Vyc2VzCisgICAgICAg ICAgIGhhdmUgdGhlIGNvcHkuICBUaGUgb3JpZ2luYWwgcmVtYWlucyB1bmFsdGVyZWQuICBVbmZv cnR1bmF0ZWx5LAorICAgICAgICAgICBuZXd0ZXJtKCkgc2VlbXMgdG8gYmUgcGFydGljdWxhciB0 byBTeXN0ZW0gVi4KKyAgICAgICAgKi8KKyAgICAgICAgcyA9IGdldGVudigiVEVSTSIpOworICAg ICAgICBpZiAoY2tfZmQgPCAwKSB7CisgICAgICAgICAgICBja19mZCA9IGR1cChmaWxlbm8oc3Rk b3V0KSk7CisgICAgICAgICAgICBja19zdGRvdXQgPSAoY2tfZmQgPj0gMCkgPyAoRklMRSAqKWZk b3Blbihja19mZCwgInciKSA6IE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgZGVidWcoRjEwMCwi c2NyZWVuYyBuZXd0ZXJtLi4uIiwiIiwwKTsKKworLyogTk9URTogSXQgbWlnaHQgYmUgbmVjZXNz YXJ5IHRvIGRvIHRoaXMgd2l0aCBzdGRpbiB0b28hICovCisvKiBUaGlzIHdvdWxkIGhhdmUgYmVl biB0aGUgY2FzZSBpbiBGcmVlQlNEIDQuMSBidXQgdGhleSBmaXhlZCB0aGUgKi8KKy8qIHByb2Js ZW0gYnkgcmVzdG9yaW5nIHRoZSBidWZmZXJpbmcgb2Ygc3RkaW4gYmVmb3JlIHRoZSBmaW5hbCBy ZWxlYXNlLiAqLworLyogKEJ1dCBULkUuIERpY2tleSBzYXlzIHN0ZGluIGlzIG5vdCBidWZmZXJl ZD8pICovCisKKyAgICAgICAgaWYgKGNrX3N0ZG91dCA9PSBOVUxMIHx8IG5ld3Rlcm0ocywgY2tf c3Rkb3V0LCBzdGRpbikgPT0gMCkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsCisgICAg ICAgICAgICAgICJGdWxsc2NyZWVuIGRpc3BsYXkgbm90IHN1cHBvcnRlZCBmb3IgdGVybWluYWwg dHlwZTogJXNcclxuIixzKTsKKyAgICAgICAgICAgIGZkaXNwbGEgPSBYWUZEX1M7ICAgICAgICAg ICAvKiBVc2UgQ1JUIGluc3RlYWQgKi8KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor ICAgICAgICBkZWJ1ZyhGMTAwLCJzY3JlZW5jIG5ld3Rlcm0gb2siLCIiLDApOworI2Vsc2UKKyAg ICAgICAgZGVidWcoRjEwMCwic2NyZWVuIGNhbGxpbmcgaW5pdHNjciIsIiIsMCk7CisgICAgICAg IGluaXRzY3IoKTsgICAgICAgICAgICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSBjdXJzZXMuICov CisgICAgICAgIGRlYnVnKEYxMDAsInNjcmVlbiBpbml0c2NyIG9rIiwiIiwwKTsKKyNlbmRpZiAv KiBDS19ORVdURVJNICovCisgICAgICAgIGNpbml0Kys7ICAgICAgICAgICAgICAgICAgICAgICAg LyogUmVtZW1iZXIgY3Vyc2VzIHdhcyBpbml0aWFsaXplZC4gKi8KKyNlbmRpZiAvKiBDT01NRU5U ICovCisgICAgfQorICAgIGZ0X3dpbiA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdp bmRvdyBpcyBvcGVuICovCisgICAgaWYgKHJlcGFpbnQpIHsKKyNpZmRlZiBDS19XUkVGUkVTSAor LyoKKyAgVGhpcyB0b3RhbGx5IHJlcGFpbnRzIHRoZSBzY3JlZW4sIGp1c3Qgd2hhdCB3ZSB3YW50 LCBidXQgd2UgY2FuIG9ubHkKKyAgZG8gdGhpcyB3aXRoIHJlYWwgY3Vyc2VzLCBhbmQgdGhlbiBv bmx5IGlmIGNsZWFyb2soKSBhbmQgd3JlZnJlc2goKSBhcmUKKyAgcHJvdmlkZWQgaW4gdGhlIGN1 cnNlcyBsaWJyYXJ5LgorKi8KKyNpZmRlZiBPUzIKKyAgICAgICAgUmVzdG9yZUNtZE1vZGUoKTsK KyNlbHNlCisjaWZkZWYgUU5YCisjaWZuZGVmIFFOWDE2CisgICAgICAgIGNsZWFyb2soc3Rkc2Ny LCAxKTsgICAgICAgICAgICAgLyogUU5YIGRvZXNuJ3QgaGF2ZSBjdXJzY3IgKi8KKyNlbmRpZiAv KiBRTlgxNiAqLworICAgICAgICB3cmVmcmVzaChzdGRzY3IpOworI2Vsc2UKKyAgICAgICAgd3Jl ZnJlc2goY3Vyc2NyKTsKKyNlbmRpZiAvKiBRTlggKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyNlbHNl ICAvKiBObyBDS19XUkVGUkVTSCAqLworLyoKKyAgS2VybWl0J3MgZG8taXQteW91cnNlbGYgbWV0 aG9kLCB3b3JrcyB3aXRoIGFsbCB0eXBlcyBvZiBmdWxsc2NyZWVuCisgIHN1cHBvcnQsIGJ1dCBk b2VzIG5vdCByZXBhaW50IGFsbCB0aGUgZmllbGRzLiAgRm9yIGV4YW1wbGUsIHRoZSBmaWxlbmFt ZQorICBpcyBsb3N0LCBiZWNhdXNlIGl0IGFycml2ZXMgYXQgYSBjZXJ0YWluIHRpbWUgYW5kIG5l dmVyIGNvbWVzIGFnYWluLCBhbmQKKyAgS2VybWl0IHByZXNlbnRseSBkb2VzIG5vdCBzYXZlIGl0 IGFueXdoZXJlLiAgTWFraW5nIHRoaXMgbWV0aG9kIHdvcmsgZm9yCisgIGFsbCBmaWVsZHMgd291 bGQgYmUgYSByYXRoZXIgbWFqb3IgcmVjb2RpbmcgdGFzaywgZHVwbGljYXRpbmcgd2hhdCBjdXJz ZXMKKyAgYWxyZWFkeSBkb2VzLCBhbmQgd291bGQgYWRkIGEgbG90IG9mIGNvbXBsZXhpdHkgYW5k IHN0b3JhZ2Ugc3BhY2UuCisqLworICAgICAgICBjZW5kdyA9IDE7CisjZW5kaWYgLyogQ0tfV1JF RlJFU0ggKi8KKyAgICAgICAgcmVwYWludCA9IDA7CisgICAgfQorICAgIGlmIChjZW5kdykgeyAg ICAgICAgICAgICAgICAgICAgICAgIC8qIGVuZHdpbigpIHdhcyBjYWxsZWQgcHJldmlvdXNseSAq LworI2lmZGVmIFZNUworICAgICAgICBpbml0c2NyKCk7ICAgICAgICAgICAgICAgICAgICAgIC8q IChvciBzaG91bGQgaGF2ZSBiZWVuISkgKi8KKyAgICAgICAgY2xlYXIoKTsKKyAgICAgICAgdG91 Y2h3aW4oc3Rkc2NyKTsKKyAgICAgICAgcmVmcmVzaCgpOworI2Vsc2UKKyNpZmRlZiBRTlgKKy8q CisgIEluIFFOWCwgaWYgd2UgZG9uJ3QgY2FsbCBpbml0c2NyKCkgaGVyZSB3ZSBjb3JlIGR1bXAu CisgIEkgZG9uJ3QgaGF2ZSBhbnkgUU5YIGN1cnNlcyBkb2N1bWVudGF0aW9uLCBidXQgb3RoZXIg Y3Vyc2VzIG1hbnVhbHMKKyAgc2F5IHRoYXQgaW5pdHNjcigpIHNob3VsZCBiZSBjYWxsZWQgb25s eSBvbmNlIHBlciBhcHBsaWNhdGlvbiwgYW5kCisgIGV4cGVyaWVuY2Ugc2hvd3MgdGhhdCBvbiBv dGhlciBzeXN0ZW1zLCBjYWxsaW5nIGluaXRzY3IoKSBoZXJlIGdlbmVyYWxseQorICByZXN1bHRz IGluIGEgY29yZSBkdW1wLgorKi8KKyAgICAgICAgZGVidWcoRjEwMCwic2NyZWVuYyByZS1jYWxs aW5nIGluaXRzY3IgUU5YIiwiIiwwKTsKKyAgICAgICAgaW5pdHNjcigpOworICAgICAgICBjbGVh cigpOworICAgICAgICByZWZyZXNoKCk7CisjaWZkZWYgQ09NTUVOVAorLyoKKyAgQnV0IGV2ZW4g c28sIHNlY29uZCBhbmQgc3Vic2VxdWVudCBjdXJzZXMgZGlzcGxheXMgYXJlIG1lc3NlZCB1cC4K KyAgQ2FsbGluZyB0b3VjaHdpbiwgcmVmcmVzaCwgZXRjLCBkb2Vzbid0IG1ha2UgYW55IGRpZmZl cmVuY2UuCisqLworICAgICAgICBkZWJ1ZyhGMTAwLCJzY3JlZW5jIGNhbGxpbmcgdG91Y2h3aW4g UU5YIiwiIiwwKTsKKyAgICAgICAgdG91Y2h3aW4oc3Rkc2NyKTsKKyAgICAgICAgZGVidWcoRjEw MCwic2NyZWVuYyBjYWxsaW5nIHJlZnJlc2ggUU5YIiwiIiwwKTsKKyAgICAgICAgcmVmcmVzaCgp OworI2VuZGlmIC8qIENPTU1FTlQgKi8KKworI2Vsc2UgLyogQWxsIG90aGVycy4uLiAqLworICAg ICAgICBkZWJ1ZyhGMTAwLCJzY3JlZW5jIGNhbGxpbmcgY2xlYXIiLCIiLDApOworICAgICAgICBj bGVhcigpOworICAgICAgICBkZWJ1ZyhGMTAwLCJzY3JlZW5jIGNsZWFyIG9rIiwiIiwwKTsKKyNl bmRpZiAvKiBRTlggKi8KKyNlbmRpZiAvKiBWTVMgKi8KKyAgICAgICAgZGVidWcoRjEwMCwic2Ny ZWVuYyBzZXR1cCBvayIsIiIsMCk7CisgICAgICAgIGRlYnVnKEYxMDAsInNjcmVlbmMgZG9pbmcg Zmlyc3QgbW92ZSIsIiIsMCk7CisgICAgICAgIG1vdmUoQ1dfQkFOLDApOyAgICAgICAgICAgICAg ICAgLyogRGlzcGxheSB0aGUgYmFubmVyICovCisgICAgICAgIGRlYnVnKEYxMTAsInNjcmVlbmMg bXlob3N0IixteWhvc3QsMCk7CisjaWZkZWYgVENQU09DS0VUCisgICAgICAgIGRlYnVnKEYxMTAs InNjcmVlbmMgbXlpcGFkZHIiLG15aXBhZGRyLDApOworI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLwor I2lmZGVmIEhQVVgxMDEwCisgICAgICAgIGRlYnVnKEYxMDAsInNjcmVlbmMgY2FsbGluZyBmaXJz dCBwcmludHcuLi4iLCIiLDApOworLyogUmlnaHQgaGVyZSBpcyB3aGVyZSBIUC1VWCAxMC4xMCBs aWJ4Y3Vyc2UuMSBSZXYgNzYuMjAgaGFuZ3MuLi4gKi8KKyNlbmRpZiAvKiBIUFVYMTAxMCAqLwor ICAgICAgICBpZiAobXlob3N0WzBdKSB7CisjaWZkZWYgVENQU09DS0VUCisgICAgICAgICAgICBp ZiAoIW15aXBhZGRyWzBdCisjaWZkZWYgT1MyCisgICAgICAgICAgICAgICAgIC8qIFdlIG5lZWQg dG8gcGVyZm9ybSB0aGlzIHRlc3QgYmVjYXVzZSBvbiBub24tVENQL0lQICovCisgICAgICAgICAg ICAgICAgIC8qIHN5c3RlbXMgdGhlIGNhbGwgdG8gZ2V0bG9jYWxpcGFkZHIoKSByZXN1bHRzIGlu IGEgICovCisgICAgICAgICAgICAgICAgIC8qIEROUyBMb29rdXAgd2hpY2ggdGFrZXMgc2V2ZXJh bCBtaW51dGVzIHRvIHRpbWUgb3V0ICovCisgICAgICAgICAgICAgICAgICYmIG5ldCAmJgorICAg ICAgICAgICAgICAgICAoeG5ldCA9PSBORVRfVENQQSB8fCB4bmV0ID09IE5FVF9UQ1BCCisjaWZk ZWYgU1NIQlVJTFRJTgorICAgICAgICAgICAgICAgICAgfHwgeG5ldCA9PSBORVRfU1NICisjZW5k aWYgLyogU1NIQlVJTFRJTiAqLworICAgICAgICAgICAgICAgICAgKQorI2VuZGlmIC8qIE9TMiAq LworICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgIGdldGxvY2FsaXBhZGRyKCk7Cisg ICAgICAgICAgICBpZiAobXlpcGFkZHJbMF0gJiYgc3RyY21wKChjaGFyICopbXlob3N0LChjaGFy ICopbXlpcGFkZHIpKQorICAgICAgICAgICAgICBwcmludHcoIiVzLCAlcyBbJXNdIix2ZXJzaW8s KGNoYXIgKilteWhvc3QsKGNoYXIgKilteWlwYWRkcik7CisgICAgICAgICAgICBlbHNlCisjZW5k aWYgLyogVENQU09DS0VUICovCisgICAgICAgICAgICAgIHByaW50dygiJXMsICVzIix2ZXJzaW8s KGNoYXIgKilteWhvc3QpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcHJpbnR3KCIl cyIsdmVyc2lvKTsKKyAgICAgICAgfQorI2lmZGVmIEhQVVgxMDEwCisgICAgICAgIGRlYnVnKEYx MDAsInNjcmVlbmMgZmlyc3QgcHJpbnR3IHJldHVybnMiLCIiLDApOworI2VuZGlmIC8qIEhQVVgx MDEwICovCisgICAgICAgIG1vdmUoQ1dfRElSLDMpOworICAgICAgICBwcmludHcoIkN1cnJlbnQg RGlyZWN0b3J5OiAlcyIsemd0ZGlyKCkpOworI2lmZGVmIEtVSQorI2lmbmRlZiBLOTVHCisgICAg ICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX0RJUiwgKGxv bmcpIHpndGRpcigpICk7CisjZW5kaWYgLyogSzk1RyAqLworI2VuZGlmIC8qIEtVSSAqLworICAg ICAgICBpZiAobmV0KSB7CisgICAgICAgICAgICBtb3ZlKENXX0xJTiw4KTsKKyAgICAgICAgICAg IHByaW50dygiTmV0d29yayBIb3N0OiAlcyIsCisjaWZkZWYgTkVXRlRQCisJCSAgIGZ0cCA/IChm dHBfaG9zdCA/IGZ0cF9ob3N0IDogIih1bmtub3duKSIpIDoKKyNlbmRpZiAvKiBORVdGVFAgKi8K KwkJICAgdHRuYW1lCisJCSAgICk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtb3Zl KENXX0xJTiwwKTsKKyAgICAgICAgICAgIHByaW50dygiQ29tbXVuaWNhdGlvbiBEZXZpY2U6ICVz Iix0dG5hbWUpOworICAgICAgICB9CisjaWZkZWYgS1VJCisjaWZuZGVmIEs5NUcKKyAgICAgICAg S3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfTElOLCAobG9uZykg dHRuYW1lICk7CisjZW5kaWYgLyogSzk1RyAqLworI2VuZGlmIC8qIEtVSSAqLworCisgICAgICAg IGlmIChuZXQpIHsKKyAgICAgICAgICAgIG1vdmUoQ1dfU1BELDgpOworICAgICAgICAgICAgcHJp bnR3KCJOZXR3b3JrIFR5cGU6ICIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbW92 ZShDV19TUEQsMSk7CisgICAgICAgICAgICBwcmludHcoIkNvbW11bmljYXRpb24gU3BlZWQ6ICIp OworICAgICAgICB9CisgICAgICAgIG1vdmUoQ1dfU1BELDIyKTsgICAgICAgICAgICAgICAgLyog U2VyaWFsIHNwZWVkIG9yIG5ldHdvcmsgdHlwZSAqLworICAgICAgICBpZiAobmV0KSB7CisjaWZk ZWYgTkVUQ09OTgorCSAgICBpbnQgc2VjdXJlID0gMDsKKwkgICAgY2hhciAqIHhuYW1lOworCSAg ICBpZiAoeG5ldCA+IG5uZXRuYW1lKQorCSAgICAgIHhuYW1lID0gIltFUlJPUl0iOworCSAgICBl bHNlCisJICAgICAgeG5hbWUgPSBuZXRuYW1lW3huZXRdOworI2lmZGVmIE5FV0ZUUAorICAgICAg ICAgICAgaWYgKGZ0cCkgeworCQlpZiAoZnRwaXNzZWN1cmUoKSkKKwkJICBzZWN1cmUgPSAxOwor CSAgICB9IGVsc2UKKyNlbmRpZiAvKiBORVdGVFAgKi8KKwkgICAgICBpZiAoMAorI2lmZGVmIFNT SEJVSUxUSU4KKyAgICAgICAgICAgICAgICB8fCBJU19TU0goKQorI2VuZGlmIC8qIFNTSEJVSUxU SU4gKi8KKyNpZmRlZiBDS19FTkNSWVBUSU9OCisgICAgICAgICAgICAgICAgfHwgY2tfdG5fZW5j cnlwdGluZygpICYmIGNrX3RuX2RlY3J5cHRpbmcoKQorI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04g Ki8KKyNpZmRlZiBDS19TU0wKKyAgICAgICAgICAgICAgICB8fCB0bHNfYWN0aXZlX2ZsYWcgfHwg c3NsX2FjdGl2ZV9mbGFnCisjZW5kaWYgLyogQ0tfU1NMICovCisjaWZkZWYgUkxPR0NPREUKKyNp ZmRlZiBDS19LRVJCRVJPUworI2lmZGVmIENLX0VOQ1JZUFRJT04KKyAgICAgICAgICAgICAgICB8 fCB0dG5wcm90byA9PSBOUF9FSzRMT0dJTiB8fCB0dG5wcm90byA9PSBOUF9FSzVMT0dJTgorI2Vu ZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KKyNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLworI2VuZGlm IC8qIFJMT0dDT0RFICovCisgICAgICAgICAgICAgICAgICkgeworCQlzZWN1cmUgPSAxOworCSAg ICB9CisJICAgIGlmIChzZWN1cmUpIHsKKyNpZmRlZiBLVUkKKyNpZm5kZWYgSzk1RworICAgICAg ICAgICAgICAgIGNoYXIgYnVmWzMwXTsKKyAgICAgICAgICAgICAgICBzcHJpbnRmKGJ1ZiwiJXMg KFNFQ1VSRSkiLHhuYW1lKTsKKyAgICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklM RV9UUkFOU0ZFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgQ1dfU1BE LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBidWYKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICApOworI2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBLVUkg Ki8KKyAgICAgICAgICAgICAgICBwcmludHcoIiVzIChTRUNVUkUpIix4bmFtZSk7CisgICAgICAg ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHByaW50dygiJXMiLHhuYW1lKTsKKyNpZmRl ZiBLVUkKKyNpZm5kZWYgSzk1RworICAgICAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9G SUxFX1RSQU5TRkVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19T UEQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIHhuYW1lCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyNlbmRpZiAvKiBLOTVHICovCisjZW5kaWYgLyog S1VJICovCisgICAgICAgICAgICB9CisjZWxzZQorICAgICAgICAgICAgcHJpbnR3KCIobmV0d29y aykiKTsKKyNpZmRlZiBLVUkKKyNpZm5kZWYgSzk1RworICAgICAgICAgICAgS3VpU2V0UHJvcGVy dHkoS1VJX0ZJTEVfVFJBTlNGRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykg Q1dfU1BELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpICIobmV0d29yaykiCisg ICAgICAgICAgICAgICAgICAgICAgICAgICApOworI2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAv KiBLVUkgKi8KKyNlbmRpZiAvKiBORVRDT05OICovCisgICAgICAgIH0gZWxzZSB7CisgICAgICAg ICAgICBpZiAoc3BlZWQgPCAwTCkKKyAgICAgICAgICAgICAgc3BlZWQgPSB0dGdzcGQoKTsKKyAg ICAgICAgICAgIGlmIChzcGVlZCA+IDBMKSB7CisgICAgICAgICAgICAgICAgaWYgKHNwZWVkID09 IDg4ODApIHsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnR3KCI3NS8xMjAwIik7CisjaWZkZWYg S1VJCisjaWZuZGVmIEs5NUcKKyAgICAgICAgICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJ X0ZJTEVfVFJBTlNGRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25n KSBDV19TUEQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSAiNzUv MTIwMCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyNlbmRpZiAvKiBL OTVHICovCisjZW5kaWYgLyogS1VJICovCisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg ICAgICAgICAgICAgICAgY2hhciBzcGVlZGJ1Zls2NF0gOworICAgICAgICAgICAgICAgICAgICBz cHJpbnRmKHNwZWVkYnVmLCAiJWxkIiwgc3BlZWQpOworICAgICAgICAgICAgICAgICAgICBwcmlu dHcoIiVzIixzcGVlZGJ1Zik7CisjaWZkZWYgS1VJCisjaWZuZGVmIEs5NUcKKyAgICAgICAgICAg ICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19TUEQsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChsb25nKSBzcGVlZGJ1ZgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICApOworI2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBLVUkgKi8KKyAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHByaW50 dygidW5rbm93biIpOworI2lmZGVmIEtVSQorI2lmbmRlZiBLOTVHCisgICAgICAgICAgICAgICAg S3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKGxvbmcpIENXX1NQRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo bG9uZykgIih1bmtub3duKSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworI2Vu ZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBLVUkgKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAg fQorICAgICAgICBtb3ZlKENXX1BBUiwxNCk7CisgICAgICAgIHByaW50dygiUGFyaXR5OiAlcyIs ZnRwID8gIm5vbmUiIDogcGFybmFtKChjaGFyKXBhcml0eSkpOworI2lmZGVmIEtVSQorI2lmbmRl ZiBLOTVHCisgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAorICAgICAg ICAgICAgICAgICAgICAgICAobG9uZykgQ1dfUEFSLAorICAgICAgICAgICAgICAgICAgICAgICAo bG9uZykgcGFybmFtKChjaGFyKXBhcml0eSkKKyAgICAgICAgICAgICAgICAgICAgICAgKTsKKyNl bmRpZiAvKiBLOTVHICovCisjZW5kaWYgLyogS1VJICovCisjaWZkZWYgQ0tfVElNRVJTCisgICAg ICAgIGlmICgvKiBydHRmbGcgJiYgKi8gcHJvdG9jb2wgPT0gUFJPVE9fSykgeworICAgICAgICAg ICAgbW92ZShDV19UTU8sIDkpOyBwcmludHcoIlJUVC9UaW1lb3V0OiIpOyB9CisjZW5kaWYgLyog Q0tfVElNRVJTICovCisgICAgICAgIG1vdmUoQ1dfVFlQLDExKTsgcHJpbnR3KCJGaWxlIFR5cGU6 Iik7CisgICAgICAgIG1vdmUoQ1dfU0laLDExKTsgcHJpbnR3KCJGaWxlIFNpemU6Iik7CisgICAg ICAgIG1vdmUoQ1dfUENELCA4KTsKKyAgICAgICAgY2xydG9lb2woKTsKKyAgICAgICAgcGN0bGJs ID0gKHdoYXQgJiBXX1NFTkQpOworICAgICAgICBwcmludHcoIiVzOiIsIHBjdGxibCA/ICJQZXJj ZW50IERvbmUiIDogIkJ5dGVzIFNvIEZhciIpOworCisjaWZkZWYgWFlaX0lOVEVSTkFMCisgICAg ICAgIG1vdmUoQ1dfQkFSLCAxKTsKKyAgICAgICAgcHJpbnR3KCIlMTBzIFByb3RvY29sOiIsIGZ0 cCA/ICJGVFAiIDogcHRhYltwcm90b2NvbF0ucF9uYW1lKTsKKyNlbmRpZiAvKiBYWVpfSU5URVJO QUwgKi8KKyNpZmRlZiBDS19QQ1RfQkFSCisgICAgICAgIGlmICh0aGVybW9tZXRlcikgeworICAg ICAgICAgICAgb2xkcGN0ID0gcGN0ID0gMDsKKyAgICAgICAgICAgIG1vdmUoQ1dfQkFSLDIyKTsK KyAgICAgICAgICAgIHByaW50dygiICAgIC4uLjEwLi4uMjAuLi4zMC4uLjQwLi4uNTAuLi42MC4u LjcwLi4uODAuLi45MC4uMTAwIik7CisgICAgICAgICAgICBtb3ZlKENXX0JBUiwyMis1Nik7Cisg ICAgICAgIH0KKyNlbmRpZiAvKiBDS19QQ1RfQkFSICovCisgICAgICAgIG1vdmUoQ1dfVFIsICAx KTsgcHJpbnR3KCJFc3RpbWF0ZWQgVGltZSBMZWZ0OiIpOworICAgICAgICBtb3ZlKENXX0NQLCAg Mik7IHByaW50dygiVHJhbnNmZXIgUmF0ZSwgQ1BTOiIpOworICAgICAgICBtb3ZlKENXX1dTLCAg OCk7IHByaW50dygiV2luZG93IFNsb3RzOiVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKChwcm90b2NvbCA9PSBQUk9UT19LKSAmJiAhZnRwKSA/CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICIiIDogIiBOL0EiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICk7CisgICAgICAgIG1vdmUoQ1dfUFQsICA5KTsgcHJpbnR3KCJQYWNrZXQgVHlwZToiKTsK KyAgICAgICAgaWYgKGZ0cCB8fCBwcm90b2NvbCAhPSBQUk9UT19LKSB7CisJICAgIG1vdmUoQ1df UFQsMjIpOworICAgICAgICAgICAgcHJpbnR3KCIlcyIsICJOL0EiKTsKKyAgICAgICAgICAgIG1v dmUoQ1dfUEMsICAxMSk7IHByaW50dygiSS9PIENvdW50OiIpOworICAgICAgICAgICAgbW92ZShD V19QTCwgIDEwKTsgcHJpbnR3KCJJL08gTGVuZ3RoOiIpOworICAgICAgICB9IGVsc2UgeworICAg ICAgICAgICAgbW92ZShDV19QQywgIDgpOyBwcmludHcoIlBhY2tldCBDb3VudDoiKTsKKyAgICAg ICAgICAgIG1vdmUoQ1dfUEwsICA3KTsgcHJpbnR3KCJQYWNrZXQgTGVuZ3RoOiIpOworICAgICAg ICB9CisjaWZuZGVmIENPTU1FTlQKKyAgICAgICAgbW92ZShDV19QUiwgIDkpOyBwcmludHcoIkVy cm9yIENvdW50OiIpOworI2Vsc2UKKyAgICAgICAgbW92ZShDV19QUiwgIDIpOyBwcmludHcoIlBh Y2tldCBSZXRyeSBDb3VudDoiKTsKKyNlbmRpZgorI2lmZGVmIENPTU1FTlQKKyAgICAgICAgbW92 ZShDV19QQiwgIDIpOyBwcmludHcoIlBhY2tldCBCbG9jayBDaGVjazoiKTsKKyNlbmRpZiAvKiBD T01NRU5UICovCisgICAgICAgIG1vdmUoQ1dfRVJSLDEwKTsgcHJpbnR3KCJMYXN0IEVycm9yOiIp OworICAgICAgICBtb3ZlKENXX01TRywgOCk7IHByaW50dygiTGFzdCBNZXNzYWdlOiIpOworCWlm ICh4ZnJtc2cpIHsKKwkgICAgbW92ZShDV19NU0csIDIyKTsgcHJpbnR3KCIlcyIseGZybXNnKTsK KwkgICAgbWFrZXN0cigmeGZybXNnLE5VTEwpOworCX0KKyAgICAgICAgbW92ZShDV19JTlQsIDAp OworICAgICAgICBpZiAoIXhmcmludCkgeworICAgICAgICAgICAgcHJpbnR3KCIoVHJhbnNmZXIg aW50ZXJydXB0aW9uIGlzIGRpc2FibGVkKSIpOworICAgICAgICB9IGVsc2UgeworI2lmZGVmIENL X05FRURfU0lHCisgICAgICAgICAgICBwcmludHcoCisiPCVzPlggdG8gY2FuY2VsIGZpbGUsIDwl cz5aIHRvIGNhbmNlbCBncm91cCwgPCVzPjxDUj4gdG8gcmVzZW5kIGxhc3QgcGFja2V0IiwKKyAg ICAgICAgICAgICAgICAgICBkYmNocihlc2NhcGUpLCBkYmNocihlc2NhcGUpLCBkYmNocihlc2Nh cGUpCisgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIG1vdmUoQ1dfSU5UICsgMSwg MCk7CisgICAgICAgICAgICBwcmludHcoCisiPCVzPkUgdG8gc2VuZCBFcnJvciBwYWNrZXQsIF5D IHRvIHF1aXQgaW1tZWRpYXRlbHksIDwlcz5MIHRvIHJlZnJlc2ggc2NyZWVuLiIsCisgICAgICAg ICAgICAgICAgICAgZGJjaHIoZXNjYXBlKSwgZGJjaHIoZXNjYXBlKQorICAgICAgICAgICAgICAg ICAgICk7CisjZWxzZSAvKiAhQ0tfTkVFRF9TSUcgKi8KKyAgICAgICAgICAgIG1vdmUoQ1dfSU5U LCAwKTsKKyNpZmRlZiBPUzIKKyAgICAgICAgICAgIGlmIChwcm90b2NvbCA9PSBQUk9UT19LKSB7 CisgICAgICAgICAgICAgICAgcHJpbnR3KAorIlggdG8gY2FuY2VsIGZpbGUsIFogdG8gY2FuY2Vs IGdyb3VwLCA8RW50ZXI+IHRvIHJlc2VuZCBsYXN0IHBhY2tldCwiCisgICAgICAgICAgICAgICAg ICAgICAgICk7CisgICAgICAgICAgICB9CisjZWxzZSAvKiAhT1MyICovCisjaWZkZWYgVk1TICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSW4gVk1TIGF2b2lkIGJvdHRvbSBsaW5lICov CisgICAgICAgICAgICBwcmludHcoCisiWDogQ2FuY2VsIHRoaXMgZmlsZTsgRTogQ2FuY2VsIHRy YW5zZmVyOyBeQzogUXVpdCBub3c7IF5XOiBSZWZyZXNoIHNjcmVlbi4iCisgICAgICAgICAgICAg ICAgICAgKTsKKyNlbHNlCisgICAgICAgICAgICBwcmludHcoCisiWCB0byBjYW5jZWwgZmlsZSwg WiB0byBjYW5jZWwgZ3JvdXAsIDxDUj4gdG8gcmVzZW5kIGxhc3QgcGFja2V0LCIKKyAgICAgICAg ICAgICAgICAgICApOworI2VuZGlmIC8qIFZNUyAqLworI2VuZGlmIC8qIE9TMiAqLworCisjaWZu ZGVmIFZNUworICAgICAgICAgICAgbW92ZShDV19JTlQgKyAxLCAwKTsKKyAgICAgICAgICAgIGlm IChwcm90b2NvbCA9PSBQUk9UT19LKSB7CisgICAgICAgICAgICAgICAgcHJpbnR3KAorIkUgdG8g c2VuZCBFcnJvciBwYWNrZXQsIF5DIHRvIHF1aXQgaW1tZWRpYXRlbHksIF5MIHRvIHJlZnJlc2gg c2NyZWVuLiIKKyAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIH0gZWxzZSB7 CisgICAgICAgICAgICAgICAgcHJpbnR3KCJeQyB0byBjYW5jZWwgZmlsZSB0cmFuc2Zlci4iKTsK KyAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBDS19ORUVEX1NJRyAq LworICAgICAgICB9CisgICAgICAgIHJlZnJlc2goKTsKKyAgICAgICAgY2VuZHcgPSAwOworICAg IH0KKyAgICBkZWJ1ZyhGMTAxLCJTQ1JFRU5DIHN3aXRjaCIsIiIsZik7CisgICAgZGVidWcoRjAw MCwiU0NSRUVOQyBjIiwiIixjKTsKKyAgICBkZWJ1ZyhGMTAxLCJTQ1JFRU5DIG4iLCIiLG4pOwor CisgICAgbGVuID0gc3RybGVuKHMpOyAgICAgICAgICAgICAgICAgICAgLyogTGVuZ3RoIG9mIGFy Z3VtZW50IHN0cmluZyAqLworICAgIHN3aXRjaCAoZikgeyAgICAgICAgICAgICAgICAgICAgICAg IC8qIEhhbmRsZSBvdXIgZnVuY3Rpb24gY29kZSAqLworICAgICAgY2FzZSBTQ1JfRk46ICAgICAg ICAgICAgICAgICAgICAgIC8qIEZpbGVuYW1lICovCisgICAgICAgIG9sZHBjdCA9IHBjdCA9IDBM OyAgICAgICAgICAgICAgLyogUmVzZXQgcGVyY2VudHMgKi8KKyNpZmRlZiBHRlRJTUVSCisgICAg ICAgIGd0diA9IChDS0ZMT0FUKSAtMS4wOworICAgICAgICAvKiBvbGRndHYgPSAoQ0tGTE9BVCkg LTEuMDsgKi8KKyNlbHNlCisgICAgICAgIGd0diA9IC0xTDsKKyAgICAgICAgLyogb2xkZ3R2ID0g LTFMOyAqLworI2VuZGlmIC8qIEdGVElNRVIgKi8KKyAgICAgICAgb2xkd2luID0gLTE7CisgICAg ICAgIGZzaXogPSAoQ0tfT0ZGX1QpLTE7CQkvKiBJbnZhbGlkYXRlIHByZXZpb3VzIGZpbGUgc2l6 ZSAqLworICAgICAgICBtb3ZlKENXX1BDRCwyMik7ICAgICAgICAgICAgICAgIC8qIEVyYXNlIHBl cmNlbnQgZG9uZSBmcm9tIGxhc3QgdGltZSAqLworI2lmZGVmIEtVSQorI2lmbmRlZiBLOTVHCisg ICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX1BDRCwg KGxvbmcpIDAgKTsKKyAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAo bG9uZykgQ1dfRkZDLCAobG9uZykgMCApOworI2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBL VUkgKi8KKyAgICAgICAgY2xydG9lb2woKTsKKyAgICAgICAgbW92ZShDV19TSVosMjIpOyAgICAg ICAgICAgICAgICAvKiBFcmFzZSBmaWxlIHNpemUgZnJvbSBsYXN0IHRpbWUgKi8KKyNpZmRlZiBL VUkKKyNpZm5kZWYgSzk1RworICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNG RVIsIChsb25nKSBDV19TSVosIChsb25nKSAwICk7CisjZW5kaWYgLyogSzk1RyAqLworI2VuZGlm IC8qIEtVSSAqLworICAgICAgICBjbHJ0b2VvbCgpOworICAgICAgICBtb3ZlKENXX0VSUiwyMik7 ICAgICAgICAgICAgICAgIC8qIEFuZCBsYXN0IGVycm9yIG1lc3NhZ2UgKi8KKyNpZmRlZiBLVUkK KyNpZm5kZWYgSzk1RworICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIs IChsb25nKSBDV19FUlIsIChsb25nKSAiIiApOworI2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAv KiBLVUkgKi8KKyAgICAgICAgY2xydG9lb2woKTsKKyNpZmRlZiBDT01NRU5UCisjaWZkZWYgU1RS RUFNSU5HCisgICAgICAgIGlmIChwcm90b2NvbCA9PSBQUk9UT19LICYmIHN0cmVhbW9rKSB7Cisg ICAgICAgICAgICBtb3ZlKENXX0JBUiwgMSk7CisjaWZkZWYgWFlaX0lOVEVSTkFMCisgICAgICAg ICAgICBwcmludHcoIiAgIEtlcm1pdCBTVFJFQU1JTkc6Iik7CisjZWxzZQorICAgICAgICAgICAg cHJpbnR3KCIgICAgICAgICAgU1RSRUFNSU5HOiIpOworI2VuZGlmIC8qIFhZWl9JTlRFUk5BTCAq LworICAgICAgICB9CisjZW5kaWYgLyogU1RSRUFNSU5HICovCisjZW5kaWYgLyogQ09NTUVOVCAq LworCisgICAgICAgIGlmICh3aGF0ICYgV19TRU5EKSB7CQkvKiBJZiB3ZSdyZSBzZW5kaW5nLi4u ICovCisjaWZkZWYgTkVXRlRQCisJICAgIGlmICh3aGF0ICYgV19GVFApIHsJCS8qIEZUUCAqLwor ICAgICAgICAgICAgICAgIG1vdmUoQ1dfTkFNLDEwKTsKKyAgICAgICAgICAgICAgICBwcmludHco IiAgIEZUUCBQVVQ6Iik7CisJICAgIH0gZWxzZQorI2VuZGlmIC8qIE5FV0ZUUCAqLworI2lmZGVm IENLX1JFU0VORAorICAgICAgICAgICAgc3dpdGNoIChzZW5kbW9kZSkgewkJLyogS2VybWl0ICov CisgICAgICAgICAgICAgIGNhc2UgU01fUkVTRU5EOgorICAgICAgICAgICAgICAgIG1vdmUoQ1df TkFNLDEwKTsKKyAgICAgICAgICAgICAgICBwcmludHcoIiBSRVNFTkRJTkc6Iik7CisgICAgICAg ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg bW92ZShDV19OQU0sMTApOworICAgICAgICAgICAgICAgIHByaW50dygiICAgU0VORElORzoiKTsK KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyNlbHNlCisgICAgICAgICAg ICBtb3ZlKENXX05BTSwxMCk7CisgICAgICAgICAgICBwcmludHcoIiAgIFNFTkRJTkc6Iik7Cisj ZW5kaWYgLyogQ0tfUkVTRU5EICovCisKKyAgICAgICAgfSBlbHNlIGlmICh3aGF0ICYgV19SRUNW KSB7CS8qIElmIHdlJ3JlIHJlY2VpdmluZy4uLiAqLworI2lmZGVmIE5FV0ZUUAorCSAgICBpZiAo d2hhdCAmIFdfRlRQKSB7CQkvKiBGVFAgKi8KKyAgICAgICAgICAgICAgICBtb3ZlKENXX05BTSwx MCk7CisgICAgICAgICAgICAgICAgcHJpbnR3KCIgICBGVFAgR0VUOiIpOworCSAgICB9IGVsc2Ug eworI2VuZGlmIC8qIE5FV0ZUUCAqLworCQltb3ZlKENXX05BTSwxMCk7CisJCXByaW50dygiIFJF Q0VJVklORzoiKTsKKyNpZmRlZiBORVdGVFAKKwkgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHdo YXQgPT0gKFdfRlRQfFdfRlRfREVMRSkpIHsKKwkJbW92ZShDV19OQU0sMTApOworCQlwcmludHco IkZUUCBERUxFVEU6Iik7CisjZW5kaWYgLyogTkVXRlRQICovCisgICAgICAgIH0gZWxzZSB7ICAg ICAgICAgICAgICAgICAgICAgICAgLyogSWYgd2UgZG9uJ3Qga25vdy4uLiAqLworICAgICAgICAg ICAgbW92ZShDV19OQU0sMTApOyAgICAgICAgICAgIC8qIChzaG91bGQgbmV2ZXIgc2VlIHRoaXMp ICovCisgICAgICAgICAgICBwcmludHcoIiBGaWxlIE5hbWU6Iik7CisgICAgICAgIH0KKyAgICAg ICAgbW92ZShDV19OQU0sMjIpOyAgICAgICAgICAgICAgICAvKiBEaXNwbGF5IHRoZSBmaWxlbmFt ZSAqLworICAgICAgICBpZiAobGVuID4gNTcpIHsKKyAgICAgICAgICAgIHByaW50dygiJS41NXMu LiIscyk7CisgICAgICAgICAgICBsZW4gPSA1NzsKKyAgICAgICAgfSBlbHNlIHByaW50dygiJXMi LHMpOworI2lmZGVmIEtVSQorI2lmbmRlZiBLOTVHCisgICAgICAgIEt1aVNldFByb3BlcnR5KCBL VUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX05BTSwgKGxvbmcpIHMgKTsKKyNlbmRpZiAvKiBL OTVHICovCisjZW5kaWYgLyogS1VJICovCisgICAgICAgIHEgPSBsZW47ICAgICAgICAgICAgICAg ICAgICAgICAgLyogUmVtZW1iZXIgbmFtZSBsZW5ndGggZm9yIGxhdGVyICovCisgICAgICAgIGNs cnRvZW9sKCk7CisgICAgICAgIHNjcmZ0KCk7ICAgICAgICAgICAgICAgICAgICAgICAgLyogRGlz cGxheSBmaWxlIHR5cGUgKGNhbiBjaGFuZ2UpICovCisgICAgICAgIHJlZnJlc2goKTsKKyNpZmRl ZiBPUzIKKyAgICAgICAgU2F2ZUNtZE1vZGUoMCwgMCk7CisjZW5kaWYgLyogT1MyICovCisgICAg ICAgIHJldHVybjsKKworICAgICAgY2FzZSBTQ1JfQU46ICAgICAgICAgICAgICAgICAgICAgIC8q IEZpbGUgYXMtbmFtZSAqLworICAgICAgICBpZiAocSArIGxlbiArIDQgPCA1OCkgeyAgICAgICAg IC8qIFdpbGwgZml0ICovCisgICAgICAgICAgICBtb3ZlKENXX05BTSwgMjIgKyBxKTsKKyAgICAg ICAgICAgIHByaW50dygiID0+ICVzIixzKTsKKyNpZmRlZiBLVUkKKyNpZm5kZWYgSzk1RworICAg ICAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfTkFN LCAobG9uZykgcyApOworI2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBLVUkgKi8KKyAgICAg ICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBUb28gbG9uZyAqLworICAgICAg ICAgICAgbW92ZShDV19OQU0sIDIyKTsgICAgICAgICAgIC8qIE92ZXJ3cml0ZSBwcmV2aW91cyBu YW1lICovCisgICAgICAgICAgICBxID0gMDsKKyAgICAgICAgICAgIGlmIChsZW4gKyA0ID4gNTcp IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB3ZzE1ICovCisgICAgICAgICAg ICAgICAgcHJpbnR3KCIgPT4gJS41MXMuLiIscyk7ICAgICAgICAgICAgICAgICAgICAgICAgLyog d2cxNSAqLworICAgICAgICAgICAgICAgIGxlbiA9IDUzOyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIHdnMTUgKi8KKyAgICAgICAgICAgIH0gZWxzZSBwcmludHcoIiA9 PiAlcyIscyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB3ZzE1ICovCisjaWZkZWYgS1VJ CisjaWZuZGVmIEs5NUcKKyAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFO U0ZFUiwgKGxvbmcpIENXX05BTSwgKGxvbmcpIHMgICk7CisjZW5kaWYgLyogSzk1RyAqLworI2Vu ZGlmIC8qIEtVSSAqLworICAgICAgICB9CisgICAgICAgIHEgKz0gbGVuICsgNDsgICAgICAgICAg ICAgICAgICAgLyogUmVtZW1iZXIgaG9yaXpvbnRhbCBwb3NpdGlvbiAqLworICAgICAgICBjbHJ0 b2VvbCgpOworICAgICAgICByZWZyZXNoKCk7CisjaWZkZWYgT1MyCisgICAgICAgIFNhdmVDbWRN b2RlKDAsIDApOworI2VuZGlmIC8qIE9TMiAqLworICAgICAgICByZXR1cm47CisKKyAgICAgIGNh c2UgU0NSX0ZTOiAgICAgICAgICAgICAgICAgICAgICAvKiBGaWxlIHNpemUgKi8KKyAgICAgICAg ZnNpeiA9IG47CisgICAgICAgIG1vdmUoQ1dfU0laLDIyKTsKKyAgICAgICAgaWYgKGZzaXogPiAo Q0tfT0ZGX1QpLTEpIHsKKyNpZmRlZiBLVUkKKyNpZm5kZWYgSzk1RworICAgICAgICAgICAgS3Vp U2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfU0laLCAobG9uZykgbiAp OworI2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBLVUkgKi8KKyAgICAgICAgICAgIHByaW50 dygiJXMiLGNrZnN0b2EobikpOworICAgICAgICB9CisJaWYgKGZzaXogPT0gLTJMKSB7CisJICAg IHByaW50dygiUE9TU0lCTFkgRVhDRUVEUyBMT0NBTCBGSUxFIFNJWkUgTElNSVQiKTsKKwl9Cisg ICAgICAgIGNscnRvZW9sKCk7CisjaWZkZWYgQ09NTUVOVAorICAgICAgICBtb3ZlKENXX1BDRCwg OCk7CisgICAgICAgIGlmIChmc2l6ID4gKENLX09GRl9UKS0xKSB7CS8qIFB1dCB1cCBwZXJjZW50 IGxhYmVsICovCisgICAgICAgICAgICBwY3RsYmwgPSAxOworCSAgICBjbHJ0b2VvbCgpOworICAg ICAgICAgICAgcHJpbnR3KCJQZXJjZW50IERvbmU6Iik7CisgICAgICAgIH0KKyNlbHNlCisJbW92 ZShDV19QQ0QsIDgpOworCWNscnRvZW9sKCk7CisgICAgICAgIGlmIChmc2l6ID4gKENLX09GRl9U KS0xKSB7CS8qIFB1dCB1cCBwZXJjZW50IGxhYmVsICovCisgICAgICAgICAgICBwY3RsYmwgPSAx OworICAgICAgICAgICAgcHJpbnR3KCJQZXJjZW50IERvbmU6Iik7CisgICAgICAgIH0gZWxzZSB7 CisgICAgICAgICAgICBwY3RsYmwgPSAwOworICAgICAgICAgICAgcHJpbnR3KCJCeXRlcyBTbyBG YXI6Iik7CisJfQorI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAgY2xydG9lb2woKTsKKyAg ICAgICAgc2NyZnQoKTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBGaWxlIHR5cGUgKi8KKyAg ICAgICAgcmVmcmVzaCgpOworI2lmZGVmIE9TMgorICAgICAgICBTYXZlQ21kTW9kZSgwLCAwKTsK KyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAgcmV0dXJuOworCisgICAgICBjYXNlIFNDUl9QVDog ICAgICAgICAgICAgICAgICAgICAgLyogUGFja2V0IHR5cGUgb3IgcHNldWRvdHlwZSAqLworICAg ICAgICBpZiAoc3BhY2tldHMgPCA1KSB7CisgICAgICAgICAgICBleHRlcm4gaW50IHN5c2luZGV4 OworICAgICAgICAgICAgZXh0ZXJuIHN0cnVjdCBzeXNkYXRhIHN5c2lkbGlzdFtdOworICAgICAg ICAgICAgLyogVGhpbmdzIHRoYXQgd29uJ3QgY2hhbmdlIGFmdGVyIHRoZSA0dGggcGFja2V0ICov CisgICAgICAgICAgICBtb3ZlKENXX1BBUiwyMik7CisgICAgICAgICAgICBwcmludHcoIiVzIixw YXJuYW0oKGNoYXIpcGFyaXR5KSk7CisjaWZkZWYgS1VJCisjaWZuZGVmIEs5NUcKKyAgICAgICAg ICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIChsb25nKSBDV19QQVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9u ZykgcGFybmFtKChjaGFyKXBhcml0eSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Cisj ZW5kaWYgLyogSzk1RyAqLworI2VuZGlmIC8qIEtVSSAqLworICAgICAgICAgICAgY2xydG9lb2wo KTsKKyNpZmRlZiBDT01NRU5UCisgICAgICAgICAgICBtb3ZlKENXX1BCLCAyMik7ICAgICAgICAg ICAgLyogQmxvY2sgY2hlY2sgb24gdGhpcyBwYWNrZXQgKi8KKyAgICAgICAgICAgIGlmIChiY3R1 ID09IDQpCisgICAgICAgICAgICAgIHByaW50dygiQiIpOworICAgICAgICAgICAgZWxzZQorICAg ICAgICAgICAgICBwcmludHcoIiVkIixiY3R1KTsKKyAgICAgICAgICAgIGNscnRvZW9sKCk7Cisj ZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAgICAgICAgaWYgKAorI2lmZGVmIE5FV0ZUUAorCQko ZnRwICYmIChzcGFja2V0cyA9PSAxIHx8IHJwYWNrZXRzID09IDEpKSB8fAorI2VuZGlmIC8qIE5F V0ZUUCAqLworCQlzcGFja2V0cyA9PSA0CisJCSkgeworICAgICAgICAgICAgICAgIG1vdmUoQ1df TElOLDgpOworICAgICAgICAgICAgICAgIGlmICgKKyNpZmRlZiBORVdGVFAKKwkJICAgIGZ0cCB8 fAorI2VuZGlmIC8qIE5FV0ZUUCAqLworCQkgICAgKChwcm90b2NvbCA9PSBQUk9UT19LKSAmJiAo c3lzaW5kZXggPiAtMSkpCisJCSAgICApIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5ldCkg eworICAgICAgICAgICAgICAgICAgICAgICAgbW92ZShDV19MSU4sOCk7CisgICAgICAgICAgICAg ICAgICAgICAgICBwcmludHcoIk5ldHdvcmsgSG9zdDogJXMgKCVzKSIsCisjaWZkZWYgTkVXRlRQ CisJCQkgICAgICAgZnRwID8gKGZ0cF9ob3N0ID8gZnRwX2hvc3QgOiAiIikgOgorI2VuZGlmIC8q IE5FV0ZUUCAqLworCQkJICAgICAgIHR0bmFtZSwKKyNpZmRlZiBORVdGVFAKKwkJCSAgICAgICBm dHAgPyBmdHBfc3J2dHlwIDoKKyNlbmRpZiAvKiBORVdGVFAgKi8KKwkJCSAgICAgICBzeXNpZGxp c3Rbc3lzaW5kZXhdLnNpZF9uYW1lCisJCQkgICAgICAgKTsKKyAgICAgICAgICAgICAgICAgICAg fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vdmUoQ1dfTElOLDApOworICAgICAg ICAgICAgICAgICAgICAgICAgcHJpbnR3KCJDb21tdW5pY2F0aW9uIERldmljZTogJXMgKHJlbW90 ZSBob3N0IGlzICVzKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR0bmFtZSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzaWRsaXN0W3N5c2luZGV4XS5zaWRfbmFtZQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgICAgICAgIGNscnRvZW9sKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgfQorICAgICAgICB9CisjaWZkZWYgQ0tfVElNRVJTCisgICAgICAgIGlmICgvKiBydHRm bGcgJiYgKi8gcHJvdG9jb2wgPT0gUFJPVE9fSykgeworICAgICAgICAgICAgbG9uZyB4eDsKKyAg ICAgICAgICAgIGlmICgKKyNpZmRlZiBTVFJFQU1JTkcKKyAgICAgICAgICAgICAgICBzdHJlYW1p bmcgJiYgb2xkd2luICE9IC0yCisjZWxzZQorICAgICAgICAgICAgICAgIDAKKyNlbmRpZiAvKiBT VFJFQU1JTkcgKi8KKyAgICAgICAgICAgICAgICApIHsKKyAgICAgICAgICAgICAgICBtb3ZlKENX X1RNTywgMjIpOworICAgICAgICAgICAgICAgIHByaW50dygiMDAgLyAwMCIpOworICAgICAgICAg ICAgICAgIGNscnRvZW9sKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg IHh4ID0gKHJ0dGRlbGF5ICsgNTAwKSAvIDEwMDA7CisgICAgICAgICAgICAgICAgaWYgKHh4ICE9 IG9sZHJ0dCB8fCByY3Z0aW1vICE9IG9sZHRpbSkgeworICAgICAgICAgICAgICAgICAgICBtb3Zl KENXX1RNTywgMjIpOworICAgICAgICAgICAgICAgICAgICBwcmludHcoIiUwMmxkIC8gJTAyZCIs IHh4LCByY3Z0aW1vKTsKKyAgICAgICAgICAgICAgICAgICAgb2xkcnR0ID0geHg7CisgICAgICAg ICAgICAgICAgICAgIG9sZHRpbSA9IHJjdnRpbW87CisgICAgICAgICAgICAgICAgICAgIGNscnRv ZW9sKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisjZW5k aWYgLyogQ0tfVElNRVJTICovCisKKyAgICAgICAgeCA9ICh3aGF0ICYgV19SRUNWKSA/ICAgICAg ICAgIC8qIFBhY2tldCBsZW5ndGggKi8KKyAgICAgICAgICBycGt0bCsocHJvdG9jb2w9PVBST1RP X0s/MTowKSA6CisgICAgICAgICAgICBzcGt0bDsKKyAgICAgICAgaWYgKHggIT0gb2xkbGVuKSB7 ICAgICAgICAgICAgICAvKiBCdXQgb25seSBpZiBpdCBjaGFuZ2VkLiAqLworICAgICAgICAgICAg bW92ZShDV19QTCwgMjIpOworICAgICAgICAgICAgcHJpbnR3KCIlZCIseCk7CisjaWZkZWYgS1VJ CisjaWZuZGVmIEs5NUcKKyAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFO U0ZFUiwgKGxvbmcpIENXX1BMLCAobG9uZykgeCApOworI2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRp ZiAvKiBLVUkgKi8KKyAgICAgICAgICAgIGNscnRvZW9sKCk7CisgICAgICAgICAgICBvbGRsZW4g PSB4OworICAgICAgICB9CisgICAgICAgIG1vdmUoQ1dfUEMsIDIyKTsgICAgICAgICAgICAgICAg LyogUGFja2V0IGNvdW50IChhbHdheXMpLiAqLworCisgICAgICAgIHByaW50dygiJWQiLCAod2hh dCAmIFdfUkVDVikgPyBycGFja2V0cyA6IHNwYWNrZXRzKTsKKyNpZmRlZiBLVUkKKyNpZm5kZWYg Szk1RworICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBD V19QQywgKGxvbmcpIHNwYWNrZXRzICk7CisjZW5kaWYgLyogSzk1RyAqLworI2VuZGlmIC8qIEtV SSAqLworICAgICAgICBjbHJ0b2VvbCgpOworCisgICAgICAgIGlmIChwcm90b2NvbCA9PSBQUk9U T19LICYmICFmdHApIHsgLyogV2luZG93IHNsb3RzICovCisgICAgICAgICAgICBjaGFyIHdzWzE2 XTsKKyAgICAgICAgICAgIGludCBmbGFnOworICAgICAgICAgICAgZmxhZyA9IDA7CisjaWZkZWYg U1RSRUFNSU5HCisgICAgICAgICAgICBpZiAoc3RyZWFtaW5nKSB7CisgICAgICAgICAgICAgICAg aWYgKG9sZHdpbiAhPSAtMikgeworICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKHdzLCJTVFJF QU1JTkciKTsKKyAgICAgICAgICAgICAgICAgICAgZmxhZyA9IDE7CisgICAgICAgICAgICAgICAg ICAgIG9sZHdpbiA9IC0yOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZQor I2VuZGlmIC8qIFNUUkVBTUlORyAqLworICAgICAgICAgICAgICBpZiAod2N1ciAhPSBvbGR3aW4p IHsKKyAgICAgICAgICAgICAgICAgIHNwcmludGYod3MsICIlZCBvZiAlZCIsIHdjdXIgPCAxID8g MSA6IHdjdXIsIHdzbG90bik7CisgICAgICAgICAgICAgICAgICBmbGFnID0gMTsKKyAgICAgICAg ICAgICAgICAgIG9sZHdpbiA9IHdjdXI7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm IChmbGFnKSB7CisgICAgICAgICAgICAgICAgbW92ZShDV19XUywgMjIpOworICAgICAgICAgICAg ICAgIHByaW50dygiJXMiLCB3cyk7CisgICAgICAgICAgICAgICAgY2xydG9lb2woKTsKKyNpZmRl ZiBLVUkKKyNpZm5kZWYgSzk1RworICAgICAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlf RklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX1dTLCAobG9uZykgd3MgKTsKKyNlbmRpZiAvKiBLOTVH ICovCisjZW5kaWYgLyogS1VJICovCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg ZXJyb3JzID0gcmV0cmFucyArIGNydW5jaGVkICsgdGltZW91dHM7CisgICAgICAgIGlmIChlcnJv cnMgIT0gb2xkdHJ5KSB7ICAgICAgICAgLyogUmV0cnkgY291bnQsIGlmIGNoYW5nZWQgKi8KKyAg ICAgICAgICAgIG1vdmUoQ1dfUFIsIDIyKTsKKyAgICAgICAgICAgIHByaW50dygiJWQiLGVycm9y cyk7CisjaWZkZWYgS1VJCisjaWZuZGVmIEs5NUcKKyAgICAgICAgICAgIEt1aVNldFByb3BlcnR5 KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX1BSLCAobG9uZykgZXJyb3JzICk7CisjZW5k aWYgLyogSzk1RyAqLworI2VuZGlmIC8qIEtVSSAqLworICAgICAgICAgICAgY2xydG9lb2woKTsK KyAgICAgICAgICAgIG9sZHRyeSA9IGVycm9yczsKKyAgICAgICAgfQorCS8qIFNlbmRlcidzIHBh Y2tldCB0eXBlICovCisgICAgICAgIGlmICghZnRwICYmIChjICE9IG9sZHR5cCAmJiBjICE9ICdZ JyAmJiBjICE9ICdOJykpIHsKKyAgICAgICAgICAgIGNoYXIgdHlwZVsyXTsKKyAgICAgICAgICAg IHNwcmludGYodHlwZSwgIiVjIixjKTsKKyAgICAgICAgICAgIG1vdmUoQ1dfUFQsMjIpOworICAg ICAgICAgICAgcHJpbnR3KCIlcyIsIHR5cGUpOworI2lmZGVmIEtVSQorI2lmbmRlZiBLOTVHCisg ICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19Q VCwgKGxvbmcpIHR5cGUgKTsKKyNlbmRpZiAvKiBLOTVHICovCisjZW5kaWYgLyogS1VJICovCisg ICAgICAgICAgICBjbHJ0b2VvbCgpOworICAgICAgICAgICAgb2xkdHlwID0gYzsKKyAgICAgICAg fQorICAgICAgICBzd2l0Y2ggKGMpIHsgICAgICAgICAgICAgICAgICAgIC8qIE5vdyBoYW5kbGUg c3BlY2lmaWMgcGFja2V0IHR5cGVzICovCisgICAgICAgICAgY2FzZSAnUyc6ICAgICAgICAgICAg ICAgICAgICAgLyogQmVnaW5uaW5nIG9mIHRyYW5zZmVyICovCisgICAgICAgICAgICBmY250ID0g ZmJ5dCA9IDBMOyAgICAgICAgICAgLyogQ2xlYXIgY291bnRlcnMgKi8KKyNpZmRlZiBHRlRJTUVS CisgICAgICAgICAgICBndHYgPSAtMS4wOworI2Vsc2UgLyogR0ZUSU1FUiAqLworICAgICAgICAg ICAgZ3R2ID0gLTFMOyAgICAgICAgICAgICAgICAgIC8qIEFuZCBvbGQvbmV3IHRoaW5ncy4uLiAq LworI2VuZGlmIC8qIEdGVElNRVIgKi8KKyAgICAgICAgICAgIG9sZHBjdCA9IHBjdCA9IDBMOwor ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlICdaJzogICAgICAgICAgICAgICAg ICAgICAvKiBvciBFT0YgKi8KKyAgICAgICAgICAgIGRlYnVnKEYxMDEsInNjcmVlbmMgU0NSX1BU IFogcGt0bnVtIiwiIixuKTsKKyAgICAgICAgICAgIGRlYnVnKEYxMDEsInNjcmVlbmMgU0NSX1BU IFogb2xkcGN0IiwiIixvbGRwY3QpOworICAgICAgICAgICAgZGVidWcoRjEwMSwic2NyZWVuYyBT Q1JfUFQgWiBwY3QiLCIiLHBjdCk7CisgICAgICAgICAgY2FzZSAnRCc6ICAgICAgICAgICAgICAg ICAgICAgLyogRGF0YSBwYWNrZXQgKi8KKyAgICAgICAgICAgIGlmIChmc2l6ID4gMEwpIHsgICAg ICAgICAgICAvKiBTaG93IHBlcmNlbnQgZG9uZSBpZiBrbm93biAqLworICAgICAgICAgICAgICAg IG9sZHBjdCA9IHBjdDsgICAgICAgICAgIC8qIFJlbWVtYmVyIHByZXZpb3VzIHBlcmNlbnQgKi8K KyAgICAgICAgICAgICAgICBob3dmYXIgPSBmZmM7CisjaWZkZWYgQ0tfUkVTRU5ECisgICAgICAg ICAgICAgICAgaWYgKHdoYXQgJiBXX1NFTkQpCS8qIEFjY291bnQgZm9yIFBTRU5EIG9yIFJFU0VO RCAqLworICAgICAgICAgICAgICAgICAgaG93ZmFyICs9IHNlbmRzdGFydDsKKyAgICAgICAgICAg ICAgICBlbHNlIGlmICh3aGF0ICYgV19SRUNWKQorICAgICAgICAgICAgICAgICAgaG93ZmFyICs9 IHJzX2xlbjsKKyNlbmRpZiAvKiBDS19SRVNFTkQgKi8KKyAgICAgICAgICAgICAgICAvKiBQZXJj ZW50IGRvbmUsIHRvIGJlIGRpc3BsYXllZC4uLiAqLworICAgICAgICAgICAgICAgIGlmIChjID09 ICdaJykgeworICAgICAgICAgICAgICAgICAgICBpZiAoIWRpc2NhcmQgJiYgIWN4c2VlbiAmJiAh Y3pzZWVuKSBwY3QgPSAxMDBMOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAg ICAgICAgcGN0ID0gKGZzaXogPiA5OUwpID8gKGhvd2ZhciAvIChmc2l6IC8gMTAwTCkpIDogMEw7 CisgICAgICAgICAgICAgICAgaWYgKHBjdCA+IDEwMEwgfHwgICAgICAgLyogQWxsb3cgZm9yIGV4 cGFuc2lvbiBhbmQgKi8KKyAgICAgICAgICAgICAgICAgICAob2xkcGN0ID09IDk5TCAmJiBwY3Qg PCAwTCkpIC8qIG90aGVyIGJvdW5kYXJ5IGNvbmRpdGlvbnMgKi8KKyAgICAgICAgICAgICAgICAg IHBjdCA9IDEwMEw7CisgICAgICAgICAgICAgICAgaWYgKHBjdCAhPSBvbGRwY3QpICAgICAgLyog T25seSBkbyB0aGlzIDEwMCB0aW1lcyBwZXIgZmlsZSAqLworICAgICAgICAgICAgICAgICAgdXBk cGN0KG9sZHBjdCwgcGN0KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg bW92ZShDV19QQ0QsMjIpOworICAgICAgICAgICAgICAgIHByaW50dygiJXMiLCBja2ZzdG9hKGZm YykpOworICAgICAgICAgICAgfQorI2lmZGVmIEtVSQorI2lmbmRlZiBLOTVHCisgICAgICAgICAg ICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX0ZGQywgKGxvbmcp IGhvd2Zhcik7CisjZW5kaWYgLyogSzk1RyAqLworI2VuZGlmIC8qIEtVSSAqLworICAgICAgICAg ICAgY3BzID0gc2hvY3BzKChpbnQpIHBjdCwgZnNpeiwgaG93ZmFyKTsKKyAgICAgICAgICAgIC8q IG9sZF90ciA9IHNob2V0bChvbGRfdHIsIGNwcywgZnNpeiwgaG93ZmFyKTsgKi8KKyAgICAgICAg ICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSAnJSc6ICAgICAgICAgICAgICAgICAgICAgLyog VGltZW91dHMsIHJldHJhbnNtaXNzaW9ucyAqLworICAgICAgICAgICAgY3BzID0gc2hvY3BzKChp bnQpIHBjdCwgZnNpeiwgaG93ZmFyKTsKKyAgICAgICAgICAgIC8qIG9sZF90ciA9IHNob2V0bChv bGRfdHIsIGNwcywgZnNpeiwgaG93ZmFyKTsgKi8KKworICAgICAgICAgICAgZXJyb3JzID0gcmV0 cmFucyArIGNydW5jaGVkICsgdGltZW91dHM7CisgICAgICAgICAgICBpZiAoZXJyb3JzICE9IG9s ZHRyeSkgeyAgICAgLyogRXJyb3IgY291bnQsIGlmIGNoYW5nZWQgKi8KKyAgICAgICAgICAgICAg ICBtb3ZlKENXX1BSLCAyMik7CisgICAgICAgICAgICAgICAgcHJpbnR3KCIlZCIsZXJyb3JzKTsK KyAgICAgICAgICAgICAgICBjbHJ0b2VvbCgpOworI2lmZGVmIEtVSQorI2lmbmRlZiBLOTVHCisg ICAgICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX1BSLCAobG9uZykgZXJyb3JzCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyNlbmRpZiAvKiBLOTVHICovCisjZW5kaWYg LyogS1VJICovCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG9sZHRyeSA9IGVy cm9yczsKKyAgICAgICAgICAgICAgICBpZiAocykgaWYgKCpzKSB7CisgICAgICAgICAgICAgICAg ICAgIG1vdmUoQ1dfRVJSLDIyKTsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnR3KCIlcyIscyk7 CisgICAgICAgICAgICAgICAgICAgIGNscnRvZW9sKCk7CisjaWZkZWYgS1VJCisjaWZuZGVmIEs5 NUcKKyAgICAgICAgICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIs IChsb25nKSBDV19FUlIsIChsb25nKSBzKTsKKyNlbmRpZiAvKiBLOTVHICovCisjZW5kaWYgLyog S1VJICovCisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNh c2UgJ0UnOiAgICAgICAgICAgICAgICAgICAgIC8qIEVycm9yIHBhY2tldCAqLworI2lmZGVmIENP TU1FTlQKKyAgICAgICAgICAgIG1vdmUoQ1dfRVJSLDIyKTsgICAgICAgICAgICAvKiBQcmludCBp dHMgZGF0YSBmaWVsZCAqLworICAgICAgICAgICAgaWYgKCpzKSB7CisgICAgICAgICAgICAgICAg cHJpbnR3KCIlcyIscyk7CisjaWZkZWYgS1VJCisjaWZuZGVmIEs5NUcKKyAgICAgICAgICAgICAg ICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19FUlIsIChsb25n KSBzICk7CisjZW5kaWYgLyogSzk1RyAqLworI2VuZGlmIC8qIEtVSSAqLworICAgICAgICAgICAg fQorICAgICAgICAgICAgY2xydG9lb2woKTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgICAg ICAgICBmY250ID0gZmJ5dCA9IDBMOyAgICAgICAgICAgLyogU28gbm8gYnl0ZXMgZm9yIHRoaXMg ZmlsZSAqLworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSAnUSc6ICAgICAgICAg ICAgICAgICAgICAgLyogQ3J1bmNoZWQgcGFja2V0ICovCisgICAgICAgICAgICBjcHMgPSBzaG9j cHMoKGludCkgcGN0LCBmc2l6LCBob3dmYXIpOworICAgICAgICAgICAgLyogb2xkX3RyID0gc2hv ZXRsKG9sZF90ciwgY3BzLCBmc2l6LCBob3dmYXIpOyAqLworICAgICAgICAgICAgbW92ZShDV19F UlIsMjIpOworICAgICAgICAgICAgcHJpbnR3KCJEYW1hZ2VkIFBhY2tldCIpOworI2lmZGVmIEtV SQorI2lmbmRlZiBLOTVHCisgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFO U0ZFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19FUlIsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAobG9uZykgIkRhbWFnZWQgUGFja2V0IgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgKTsKKyNlbmRpZiAvKiBLOTVHICovCisjZW5kaWYgLyogS1VJICovCisg ICAgICAgICAgICBjbHJ0b2VvbCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2Fz ZSAncSc6ICAgICAgICAgICAgICAgICAgICAgLyogQ3RybC1DIG9yIGNvbm5lY3Rpb24gbG9zdCAq LworICAgICAgICAgICAgbW92ZShDV19NU0csMjIpOworCSAgICBjbHJ0b2VvbCgpOworICAgICAg ICAgICAgaWYgKCFzKSBzID0gIiI7CisgICAgICAgICAgICBwcmludHcoIiVzIiwgKnMgPyBzIDog IlVzZXIgaW50ZXJydXB0aW9uIG9yIGNvbm5lY3Rpb24gbG9zdCIpOworI2lmZGVmIEtVSQorI2lm bmRlZiBLOTVHCisgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19NU0csCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAobG9uZykgcworICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyNl bmRpZiAvKiBLOTVHICovCisjZW5kaWYgLyogS1VJICovCisgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgICBjYXNlICdUJzogICAgICAgICAgICAgICAgICAgICAvKiBUaW1lb3V0ICovCisgICAg ICAgICAgICBjcHMgPSBzaG9jcHMoKGludCkgcGN0LCBmc2l6LCBob3dmYXIpOworICAgICAgICAg ICAgLyogb2xkX3RyID0gc2hvZXRsKG9sZF90ciwgY3BzLCBmc2l6LCBob3dmYXIpOyAqLworICAg ICAgICAgICAgbW92ZShDV19FUlIsMjIpOworICAgICAgICAgICAgcHJpbnR3KCJUaW1lb3V0ICVk IHNlYyIscmN2dGltbyk7CisjaWZkZWYgS1VJCisjaWZuZGVmIEs5NUcKKyAgICAgICAgICAgIEt1 aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgKGxvbmcpIENXX0VSUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSAiVGlt ZW91dCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisjZW5kaWYgLyogSzk1RyAqLwor I2VuZGlmIC8qIEtVSSAqLworICAgICAgICAgICAgY2xydG9lb2woKTsKKyAgICAgICAgICAgIGVy cm9ycyA9IHJldHJhbnMgKyBjcnVuY2hlZCArIHRpbWVvdXRzOworICAgICAgICAgICAgaWYgKGVy cm9ycyAhPSBvbGR0cnkpIHsgICAgIC8qIEVycm9yIGNvdW50LCBpZiBjaGFuZ2VkICovCisgICAg ICAgICAgICAgICAgbW92ZShDV19QUiwgMjIpOworICAgICAgICAgICAgICAgIHByaW50dygiJWQi LGVycm9ycyk7CisjaWZkZWYgS1VJCisjaWZuZGVmIEs5NUcKKyAgICAgICAgICAgICAgICBLdWlT ZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAobG9uZykgQ1dfUFIsIChsb25nKSBlcnJvcnMKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICApOworI2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBLVUkgKi8KKyAgICAgICAg ICAgICAgICBjbHJ0b2VvbCgpOworICAgICAgICAgICAgICAgIG9sZHRyeSA9IGVycm9yczsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6ICAgICAg ICAgICAgICAgICAgICAgIC8qIE90aGVycywgZG8gbm90aGluZyAqLworICAgICAgICAgICAgYnJl YWs7CisgICAgICAgIH0KKyAgICAgICAgcmVmcmVzaCgpOworI2lmZGVmIE9TMgorICAgICAgICBT YXZlQ21kTW9kZSgwLCAwKTsKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAgcmV0dXJuOworCisg ICAgICBjYXNlIFNDUl9TVDogICAgICAgICAgICAgICAgICAgICAgLyogRmlsZSB0cmFuc2ZlciBz dGF0dXMgKi8KKyAgICAgICAgZGVidWcoRjEwMSwic2NyZWVuYyBTQ1JfU1QgYyIsIiIsYyk7Cisg ICAgICAgIGRlYnVnKEYxMDEsInNjcmVlbmMgU0NSX1NUIHN1Y2Nlc3MiLCIiLHN1Y2Nlc3MpOwor ICAgICAgICBkZWJ1ZyhGMTAxLCJzY3JlZW5jIFNDUl9TVCBjeHNlZW4iLCIiLGN4c2Vlbik7Cisj aWZkZWYgQ09NTUVOVAorICAgICAgICBtb3ZlKENXX1BDRCwyMik7ICAgICAgICAgICAgICAgIC8q IFVwZGF0ZSBwZXJjZW50IGRvbmUgKi8KKyAgICAgICAgaWYgKGMgPT0gU1RfT0spIHsgICAgICAg ICAgICAgICAvKiBPSywgcHJpbnQgMTAwICUgKi8KKyAgICAgICAgICAgIGlmIChwY3RsYmwpCisg ICAgICAgICAgICAgIHVwZHBjdChvbGRwY3QsMTAwKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg ICAgICAgICAgcHJpbnR3KCIlcyIsIGNrZnN0b2EoZmZjKSk7CisjaWZkZWYgS1VJCisjaWZuZGVm IEs5NUcKKyAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLCAobG9u ZykgQ1dfRkZDLCAobG9uZykgZmZjKTsKKyNlbmRpZiAvKiBLOTVHICovCisjZW5kaWYgLyogS1VJ ICovCisgICAgICAgICAgICBwY3QgPSAxMDA7CisgICAgICAgICAgICBvbGRwY3QgPSAwOworICAg ICAgICB9IGVsc2UgaWYgKGZzaXogPiAwTCkgICAgICAgICAgIC8qIE5vdCBPSywgdXBkYXRlIGZp bmFsIHBlcmNlbnQgKi8KKy8qCisgIFRoZSBlbHNlIHBhcnQgd3JpdGVzIGFsbCBvdmVyIHRoZSBz Y3JlZW4gLS0gaG93ZmFyIGFuZC9vciBmc2l6IGhhdmUKKyAgYmVlbiByZXNldCBhcyBhIGNvbnNl cXVlbmNlIG9mIHRoZSBub3QtT0tuZXNzIG9mIHRoZSB0cmFuc2Zlci4KKyovCisgICAgICAgICAg aWYgKHBjdGxibCkKKyAgICAgICAgICAgIHVwZHBjdChvbGRwY3QsIChob3dmYXIgKiAxMDBMKSAv IGZzaXopOworICAgICAgICBjbHJ0b2VvbCgpOworI2Vsc2UKKyAgICAgICAgaWYgKGMgPT0gU1Rf T0spIHsgICAgICAgICAgICAgICAvKiBPSywgcHJpbnQgMTAwICUgKi8KKyAgICAgICAgICAgIG1v dmUoQ1dfUENELDIyKTsgICAgICAgICAgICAvKiBVcGRhdGUgcGVyY2VudCBkb25lICovCisgICAg ICAgICAgICBpZiAocGN0bGJsKSB7CisJCWlmIChvbGRwY3QgPT0gMCkJLyogU3dpdGNoaW5nIGZy b20gImJ5dGVzIHNvIGZhciIgKi8KKwkJICBjbHJ0b2VvbCgpOwkJLyogdG8gInBlcmNlbnQgZG9u ZSIuLi4gKi8KKwkJdXBkcGN0KG9sZHBjdCwxMDApOworCSAgICB9IGVsc2UKKyAgICAgICAgICAg ICAgcHJpbnR3KCIlcyIsIGNrZnN0b2EoZmZjKSk7CisjaWZkZWYgS1VJCisjaWZuZGVmIEs5NUcK KyAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1df RkZDLCAobG9uZykgZmZjKTsKKyNlbmRpZiAvKiBLOTVHICovCisjZW5kaWYgLyogS1VJICovCisj aWZkZWYgQ09NTUVOVAorICAgICAgICAgICAgcGN0ID0gMTAwOworICAgICAgICAgICAgb2xkcGN0 ID0gMDsKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgICAgICAgICBjbHJ0b2VvbCgpOworICAg ICAgICB9CisjZW5kaWYgLyogQ09NTUVOVCAqLworCisjaWZkZWYgQ09NTUVOVAorLyogTm8sIGxl YXZlIGl0IHRoZXJlIHNvIHRoZXkgY2FuIHJlYWQgaXQgKi8KKyAgICAgICAgbW92ZShDV19NU0cs MjIpOyAgICAgICAgICAgICAgICAvKiBSZW1vdmUgYW55IHByZXZpb3VzIG1lc3NhZ2UgKi8KKyNp ZmRlZiBLVUkKKyNpZm5kZWYgSzk1RworICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVf VFJBTlNGRVIsIChsb25nKSBDV19NU0csIChsb25nKSAiIiApOworI2VuZGlmIC8qIEs5NUcgKi8K KyNlbmRpZiAvKiBLVUkgKi8KKyAgICAgICAgY2xydG9lb2woKTsgcmVmcmVzaCgpOworI2VuZGlm IC8qIENPTU1FTlQgKi8KKworICAgICAgICBtb3ZlKENXX1RSLCAyMik7CisjaWZkZWYgS1VJCisj aWZuZGVmIEs5NUcKKyAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAo bG9uZykgQ1dfVFIsIChsb25nKSAiIiApOworI2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBL VUkgKi8KKyAgICAgICAgY2xydG9lb2woKTsgcmVmcmVzaCgpOworCisgICAgICAgIHN3aXRjaCAo YykgeyAgICAgICAgICAgICAgICAgICAgLyogUHJpbnQgbmV3IHN0YXR1cyBtZXNzYWdlICovCisg ICAgICAgICAgY2FzZSBTVF9PSzogICAgICAgICAgICAgICAgICAgLyogVHJhbnNmZXIgT0sgKi8K KyAgICAgICAgICAgIGZjbnQrKzsgICAgICAgICAgICAgICAgICAgICAvKiBDb3VudCB0aGlzIGZp bGUgKi8KKwkgICAgaWYgKHdoYXQgPT0gKFdfRlRQfFdfRlRfREVMRSkpIHsKKwkJbW92ZShDV19N U0csMjIpOworCQljbHJ0b2VvbCgpOworCQlwcmludHcoIkRlbGV0ZSBPSyIpOworCSAgICB9IGVs c2UgeworCQlmYnl0ICs9IGZmYzsKKwkJbW92ZShDV19NU0csMjIpOworCQljbHJ0b2VvbCgpOwor CQlwcmludHcoIlRyYW5zZmVyIE9LIik7CisJICAgIH0KKyNpZmRlZiBLVUkKKyNpZm5kZWYgSzk1 RworICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAobG9uZykgQ1dfTVNHLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgKGxvbmcpICJUcmFuc2ZlciBPSyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICk7 CisjZW5kaWYgLyogSzk1RyAqLworI2VuZGlmIC8qIEtVSSAqLworICAgICAgICAgICAgY2xydG9l b2woKTsgcmVmcmVzaCgpOworICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgY2FzZSBT VF9ESVNDOiAgICAgICAgICAgICAgICAgLyogRGlzY2FyZGVkICovCisgICAgICAgICAgICBtb3Zl KENXX0VSUiwyMik7CisgICAgICAgICAgICBwcmludHcoIkZpbGUgZGlzY2FyZGVkIik7CisjaWZk ZWYgS1VJCisjaWZuZGVmIEs5NUcKKyAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxF X1RSQU5TRkVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX0VSUiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSAiRmlsZSBkaXNjYXJkZWQiCisgICAgICAg ICAgICAgICAgICAgICAgICAgICApOworI2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBLVUkg Ki8KKyNpZmRlZiBDT01NRU5UCisgICAgICAgICAgICBwY3QgPSBvbGRwY3QgPSAwOworI2VuZGlm IC8qIENPTU1FTlQgKi8KKyAgICAgICAgICAgIGNscnRvZW9sKCk7IHJlZnJlc2goKTsKKyAgICAg ICAgICAgIHJldHVybjsKKworICAgICAgICAgIGNhc2UgU1RfSU5UOiAgICAgICAgICAgICAgICAg IC8qIEludGVycnVwdGVkICovCisgICAgICAgICAgICBtb3ZlKENXX0VSUiwyMik7CisgICAgICAg ICAgICBwcmludHcoIlRyYW5zZmVyIGludGVycnVwdGVkIik7CisjaWZkZWYgS1VJCisjaWZuZGVm IEs5NUcKKyAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX0VSUiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIChsb25nKSAiVHJhbnNmZXIgaW50ZXJydXB0ZWQiCisgICAgICAgICAgICAgICAg ICAgICAgICAgICApOworI2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBLVUkgKi8KKyNpZmRl ZiBDT01NRU5UCisgICAgICAgICAgICBwY3QgPSBvbGRwY3QgPSAwOworI2VuZGlmIC8qIENPTU1F TlQgKi8KKyAgICAgICAgICAgIGNscnRvZW9sKCk7IHJlZnJlc2goKTsKKyAgICAgICAgICAgIHJl dHVybjsKKworICAgICAgICAgIGNhc2UgU1RfU0tJUDogICAgICAgICAgICAgICAgIC8qIFNraXBw ZWQgKi8KKyAgICAgICAgICAgIG1vdmUoQ1dfRVJSLDIyKTsKKwkgICAgaWYgKG4gPiAwICYmIG4g PCBuc2tyZWFzb24pCisJICAgICAgcHJpbnR3KCJGaWxlIHNraXBwZWQgKCVzKSIsc2tyZWFzb25b bl0pOworCSAgICBlbHNlCisJICAgICAgcHJpbnR3KCJGaWxlIHNraXBwZWQiKTsKKyNpZmRlZiBL VUkKKyNpZm5kZWYgSzk1RworICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJB TlNGRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgQ1dfRVJSLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgKGxvbmcpICJGaWxlIHNraXBwZWQiCisgICAgICAgICAgICAg ICAgICAgICAgICAgICApOworI2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBLVUkgKi8KKyNp ZmRlZiBDT01NRU5UCisgICAgICAgICAgICBwY3QgPSBvbGRwY3QgPSAwOworI2VuZGlmIC8qIENP TU1FTlQgKi8KKyAgICAgICAgICAgIGNscnRvZW9sKCk7IHJlZnJlc2goKTsKKyAgICAgICAgICAg IHJldHVybjsKKworICAgICAgICAgIGNhc2UgU1RfRVJSOiAgICAgICAgICAgICAgICAgIC8qIEVy cm9yIG1lc3NhZ2UgKi8KKyAgICAgICAgICAgIG1vdmUoQ1dfRVJSLDIyKTsKKyAgICAgICAgICAg IGlmICghcykgcyA9IChjaGFyICopZXBrdG1zZzsKKyAgICAgICAgICAgIHByaW50dygiJXMiLHMp OworI2lmZGVmIEtVSQorI2lmbmRlZiBLOTVHCisgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eSgg S1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19FUlIsIChsb25nKSBzICk7CisjZW5kaWYgLyog Szk1RyAqLworI2VuZGlmIC8qIEtVSSAqLworI2lmZGVmIENPTU1FTlQKKyAgICAgICAgICAgIHBj dCA9IG9sZHBjdCA9IDA7CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAgICAgICAgY2xydG9l b2woKTsgcmVmcmVzaCgpOworICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgY2FzZSBT VF9SRUZVOiAgICAgICAgICAgICAgICAgLyogUmVmdXNlZCAqLworICAgICAgICAgICAgbW92ZShD V19FUlIsMjIpOworICAgICAgICAgICAgaWYgKCpzKSB7CisgICAgICAgICAgICAgICAgY2hhciBl cnJidWZbNjRdIDsKKyAgICAgICAgICAgICAgICBzcHJpbnRmKCBlcnJidWYsICJSZWZ1c2VkLCAl cyIsIHMgKSA7CisgICAgICAgICAgICAgICAgcHJpbnR3KCIlcyIsIGVycmJ1Zik7CisjaWZkZWYg S1VJCisjaWZuZGVmIEs5NUcKKyAgICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklM RV9UUkFOU0ZFUiwobG9uZykgQ1dfRVJSLChsb25nKSBlcnJidWYpOworI2VuZGlmIC8qIEs5NUcg Ki8KKyNlbmRpZiAvKiBLVUkgKi8KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg ICAgcHJpbnR3KCJSZWZ1c2VkIik7CisjaWZkZWYgS1VJCisjaWZuZGVmIEs5NUcKKyAgICAgICAg ICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwobG9uZylDV19FUlIsKGxv bmcpIlJlZnVzZWQiKTsKKyNlbmRpZiAvKiBLOTVHICovCisjZW5kaWYgLyogS1VJICovCisgICAg ICAgICAgICB9CisjaWZkZWYgQ09NTUVOVAorICAgICAgICAgICAgcGN0ID0gb2xkcGN0ID0gMDsK KyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgICAgICAgICBjbHJ0b2VvbCgpOyByZWZyZXNoKCk7 CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICBjYXNlIFNUX0lOQzoKKyAgICAgICAg ICAgIG1vdmUoQ1dfRVJSLDIyKTsKKyAgICAgICAgICAgIHByaW50dygiSW5jb21wbGV0ZSIpOwor I2lmZGVmIEtVSQorI2lmbmRlZiBLOTVHCisgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlf RklMRV9UUkFOU0ZFUiwobG9uZylDV19FUlIsKGxvbmcpIkluY29tcGxldGUiKTsKKyNlbmRpZiAv KiBLOTVHICovCisjZW5kaWYgLyogS1VJICovCisjaWZkZWYgQ09NTUVOVAorICAgICAgICAgICAg cGN0ID0gb2xkcGN0ID0gMDsKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgICAgICAgICBjbHJ0 b2VvbCgpOyByZWZyZXNoKCk7CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICBjYXNl IFNUX01TRzoKKyAgICAgICAgICAgIG1vdmUoQ1dfTVNHLDIyKTsKKyAgICAgICAgICAgIHByaW50 dygiJXMiLHMpOworI2lmZGVmIEtVSQorI2lmbmRlZiBLOTVHCisgICAgICAgICAgICBLdWlTZXRQ cm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwobG9uZylDV19NU0csKGxvbmcpcyk7CisjZW5kaWYg LyogSzk1RyAqLworI2VuZGlmIC8qIEtVSSAqLworICAgICAgICAgICAgY2xydG9lb2woKTsgcmVm cmVzaCgpOworICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgZGVmYXVsdDogICAgICAg ICAgICAgICAgICAgICAgLyogQmFkIGNhbGwgKi8KKyAgICAgICAgICAgIG1vdmUoQ1dfRVJSLDIy KTsKKyAgICAgICAgICAgIHByaW50dygiKioqIHNjcmVlbigpIGNhbGxlZCB3aXRoIGJhZCBzdGF0 dXMgKioqIik7CisjaWZkZWYgS1VJCisjaWZuZGVmIEs5NUcKKyAgICAgICAgICAgIEt1aVNldFBy b3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX0VSUiwKKyAgICAgICAgICAgICAg ICAgICAgICAgKGxvbmcpICIqKiogc2NyZWVuKCkgY2FsbGVkIHdpdGggYmFkIHN0YXR1cyAqKioi ICk7CisjZW5kaWYgLyogSzk1RyAqLworI2VuZGlmIC8qIEtVSSAqLworICAgICAgICAgICAgY2xy dG9lb2woKTsgcmVmcmVzaCgpOyByZXR1cm47CisgICAgICAgIH0KKworICAgICAgY2FzZSBTQ1Jf VEM6IHsgICAgICAgICAgICAgICAgICAgIC8qIFRyYW5zYWN0aW9uIGNvbXBsZXRlICovCisgICAg ICAgICAgY2hhciBtc2didWZbMTI4XTsKKyAgICAgICAgICBtb3ZlKENXX0NQLDIyKTsgICAgICAg ICAgICAgICAvKiBPdmVyYWxsIHRyYW5zZmVyIHJhdGUgKi8KKyNpZmRlZiBLVUkKKyNpZm5kZWYg Szk1RworICAgICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcp IENXX0NQLCB0ZmNwcyk7CisjZW5kaWYgLyogSzk1RyAqLworI2VuZGlmIC8qIEtVSSAqLworICAg ICAgICAgIHByaW50dygiJXMiLCBja2ZzdG9hKHRmY3BzKSk7CisgICAgICAgICAgY2xydG9lb2wo KTsKKyAgICAgICAgICBpZiAoc3VjY2VzcykgeworICAgICAgICAgICAgICBtb3ZlKENXX01TRywy Mik7ICAgICAgICAgIC8qIFByaW50IHN0YXRpc3RpY3MgaW4gbWVzc2FnZSBsaW5lICovCisgICAg ICAgICAgICAgIGNscnRvZW9sKCk7CisgICAgICAgICAgfQorICAgICAgICAgIGlmIChzdWNjZXNz KSB7CisgICAgICAgICAgICAgIHNwcmludGYobXNnYnVmLAorICAgICAgICAgICAgICAgICAgICAg ICJTVUNDRVNTLiAgRmlsZXM6ICVsZCwgQnl0ZXM6ICVzLCAlbGQgQ1BTIiwKKyAgICAgICAgICAg ICAgICAgICAgICBmaWxjbnQgLSBmaWxyZWosCisgICAgICAgICAgICAgICAgICAgICAgY2tmc3Rv YShmYnl0KSwKKyAgICAgICAgICAgICAgICAgICAgICB0ZmNwcworICAgICAgICAgICAgICAgICAg ICAgICk7CisgICAgICAgICAgICAgIHByaW50dygiJXMiLCBtc2didWYpOworI2lmZGVmIEtVSQor I2lmbmRlZiBLOTVHCisgICAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5T RkVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgQ1dfTVNHLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgbXNnYnVmCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICk7CisjZW5kaWYgLyogSzk1RyAqLworI2VuZGlmIC8qIEtVSSAqLworICAgICAg ICAgICAgICBjbHJ0b2VvbCgpOworCisgICAgICAgICAgfQorICAgICAgICAgIG1vdmUoQ1dfVFIs IDEpOworICAgICAgICAgIHByaW50dygiICAgICAgIEVsYXBzZWQgVGltZTogJXMiLGhobW1zcygo bG9uZykKKyNpZmRlZiBHRlRJTUVSCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChmcHRzZWNzICsgMC41KQorI2Vsc2UKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHNlY3MKKyNlbmRpZiAvKiBHRlRJTUVS ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAp KTsKKyNpZmRlZiBLVUkKKyNpZm5kZWYgSzk1RworICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtV SV9GSUxFX1RSQU5TRkVSLAorICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19UUiwK KyAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgaGhtbXNzKChsb25nKQorI2lmZGVmIEdG VElNRVIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmcHRzZWNzICsg MC41KQorI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzZWNz CisjZW5kaWYgLyogR0ZUSU1FUiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKSk7CisjZW5kaWYgLyogSzk1RyAqLworI2VuZGlmIC8qIEtVSSAqLworICAgICAgICAg IGNscnRvZW9sKCk7CisgICAgICAgICAgbW92ZSgyMywwKTsgY2xydG9lb2woKTsgICAgICAgLyog Q2xlYXIgaW5zdHJ1Y3Rpb25zIGxpbmVzICovCisgICAgICAgICAgbW92ZSgyMiwwKTsgY2xydG9l b2woKTsgICAgICAgLyogdG8gbWFrZSByb29tIGZvciBwcm9tcHQuICovCisgICAgICAgICAgcmVm cmVzaCgpOworCisjaWZkZWYgR0ZUSU1FUgorICAgICAgICAgIG9sZGd0diA9IChDS0ZMT0FUKSAt MS4wOworI2Vsc2UKKyAgICAgICAgICBvbGRndHYgPSAtMUw7CisjZW5kaWYgLyogR0ZUSU1FUiAq LworCisjaWZuZGVmIFZNU0NVUlNFCisJICBkZWJ1ZyhGMTAwLCJzY3JlZW5jIGVuZHdpbiBBIiwi IiwwKTsKKyAgICAgICAgICBlbmR3aW4oKTsKKyNpZmRlZiBDT01NRU5UCisvKgorICBXaHkgYW5k IHdoZW4gd2FzIHRoaXMgY2FsbCB0byBjb25yZXMoKSBhZGRlZD8gIEl0IG1ha2VzIG5vIHNlbnNl LAorICBhbmQgaXQgYnJlYWtzIGVjaG9pbmcgb24gU29sYXJpcyA4LgorKi8KKyNpZmRlZiBTT0xB UklTCisgICAgICAgICAgY29ucmVzKCk7CisjZW5kaWYgLyogU09MQVJJUyAqLworI2VuZGlmIC8q IENPTU1FTlQgKi8KKyNlbmRpZiAvKiBWTVNDVVJTRSAqLworCisjaWZkZWYgQ09NTUVOVAorICAg ICAgICAgIHBjdCA9IDEwMDsgb2xkcGN0ID0gMDsgICAgICAgIC8qIFJlc2V0IHRoZXNlIGZvciBu ZXh0IHRpbWUuICovCisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAgICAgIG9sZHR5cCA9IDA7 IG9sZHJ0dCA9IC0xTDsgb2xkdHJ5ID0gLTE7IG9sZGxlbiA9IC0xOworICAgICAgICAgIG9sZHRp bSA9IC0xOworICAgICAgICAgIGNlbmR3ID0gMTsKKyAgICAgICAgICBpZiAoeGZyYmVsKSBibGVl cChCUF9OT1RFKTsgICAvKiBDbG9zZSB3aW5kb3csIHRoZW4gYmVlcC4gKi8KKyNpZmRlZiBVTklY CisgICAgICAgICAgZmZsdXNoKHN0ZG91dCk7CisjZW5kaWYgLyogVU5JWCAqLworICAgICAgICAg IGZ0X3dpbiA9IDA7ICAgICAgICAgICAgICAgICAgIC8qIFdpbmRvdyBjbG9zZWQuICovCisgICAg ICAgICAgcmV0dXJuOworICAgICAgfQorICAgICAgY2FzZSBTQ1JfRU06ICAgICAgICAgICAgICAg ICAgICAgIC8qIEVycm9yIHBhY2tldCAoZmF0YWwpICovCisgICAgICAgIG1vdmUgKENXX0VSUiwy Mik7CisgICAgICAgIHByaW50dygiRkFJTFVSRTogJXMiLHMpOworI2lmZGVmIEtVSQorI2lmbmRl ZiBLOTVHCisgICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcp IENXX0VSUiwgKGxvbmcpIHMgKTsKKyNlbmRpZiAvKiBLOTVHICovCisjZW5kaWYgLyogS1VJICov CisgICAgICAgIGlmICh4ZnJiZWwpIGJsZWVwKEJQX0ZBSUwpOworI2lmZGVmIENPTU1FTlQKKyAg ICAgICAgcGN0ID0gb2xkcGN0ID0gMDsKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgICAgIGNs cnRvZW9sKCk7IHJlZnJlc2goKTsgcmV0dXJuOworCisgICAgICBjYXNlIFNDUl9RRTogICAgICAg ICAgICAgICAgICAgICAgLyogUXVhbnRpdHkgZXF1YWxzICovCisgICAgICBjYXNlIFNDUl9UVTog ICAgICAgICAgICAgICAgICAgICAgLyogVW5kZWxpbWl0ZWQgdGV4dCAqLworICAgICAgY2FzZSBT Q1JfVE46ICAgICAgICAgICAgICAgICAgICAgIC8qIFRleHQgZGVsaW1pdGVkIGF0IHN0YXJ0ICov CisgICAgICBjYXNlIFNDUl9UWjogICAgICAgICAgICAgICAgICAgICAgLyogVGV4dCBkZWxpbWl0 ZWQgYXQgZW5kICovCisgICAgICAgIHJldHVybjsgICAgICAgICAgICAgICAgICAgICAgICAgLyog KGlnbm9yZWQgaW4gZnVsbHNjcmVlbiBkaXNwbGF5KSAqLworCisgICAgICBjYXNlIFNDUl9NUzoJ CQkvKiBNZXNzYWdlIGZyb20gS2VybWl0IHBhcnRuZXIgKi8KKyAgICAgICAgbW92ZShDV19NU0cs MjIpOworCXByaW50dygiJXMiLHMpOworICAgICAgICBjbHJ0b2VvbCgpOyByZWZyZXNoKCk7IHJl dHVybjsKKworICAgICAgY2FzZSBTQ1JfWEQ6ICAgICAgICAgICAgICAgICAgICAgIC8qIFgtcGFj a2V0IGRhdGEgKi8KKyAgICAgICAgcGN0ID0gb2xkcGN0ID0gMDsKKyAgICAgICAgbW92ZShDV19O QU0sMjIpOworICAgICAgICBwcmludHcoIiVzIixzKTsKKyNpZmRlZiBLVUkKKyNpZm5kZWYgSzk1 RworICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19O QU0sIChsb25nKSBzICk7CisjZW5kaWYgLyogSzk1RyAqLworI2VuZGlmIC8qIEtVSSAqLworICAg ICAgICBjbHJ0b2VvbCgpOyByZWZyZXNoKCk7IHJldHVybjsKKworICAgICAgY2FzZSBTQ1JfQ1c6 ICAgICAgICAgICAgICAgICAgICAgIC8qIENsb3NlIFdpbmRvdyAqLworICAgICAgICBjbHJ0b2Vv bCgpOyBtb3ZlKDIzLDApOyBjbHJ0b2VvbCgpOyBtb3ZlKDIyLDApOyBjbHJ0b2VvbCgpOworICAg ICAgICByZWZyZXNoKCk7CisjaWZkZWYgQ09NTUVOVAorICAgICAgICBwY3QgPSAxMDA7IG9sZHBj dCA9IDA7ICAgICAgICAgIC8qIFJlc2V0IHRoZXNlIGZvciBuZXh0IHRpbWUuICovCisjZW5kaWYg LyogQ09NTUVOVCAqLworICAgICAgICBvbGR0eXAgPSAwOyBvbGRydHQgPSAtMUw7IG9sZHRyeSA9 IC0xOyBvbGRsZW4gPSAtMTsKKyAgICAgICAgb2xkdGltID0gLTE7CisKKyNpZm5kZWYgVk1TQ1VS U0UKKwlkZWJ1ZyhGMTAwLCJzY3JlZW5jIGVuZHdpbiBCIiwiIiwwKTsKKyAgICAgICAgZW5kd2lu KCk7CisjZW5kaWYgLyogVk1TQ1VSU0UgKi8KKyAgICAgICAgZnRfd2luID0gMDsgICAgICAgICAg ICAgICAgICAgICAvKiBGbGFnIHRoYXQgd2luZG93IGlzIGNsb3NlZC4gKi8KKyAgICAgICAgY2Vu ZHcgPSAxOyByZXR1cm47CisKKyAgICAgIGNhc2UgU0NSX0NEOiAgICAgICAgICAgICAgICAgICAg ICAvKiBEaXNwbGF5IGN1cnJlbnQgZGlyZWN0b3J5ICovCisgICAgICAgIG1vdmUoQ1dfRElSLDIy KTsKKyAgICAgICAgIHByaW50dygiJXMiLCBzKTsKKyNpZmRlZiBLVUkKKyNpZm5kZWYgSzk1Rwor ICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19ESVIs IChsb25nKSBzICk7CisjZW5kaWYgLyogSzk1RyAqLworI2VuZGlmIC8qIEtVSSAqLworICAgICAg ICBjbHJ0b2VvbCgpOworICAgICAgICByZWZyZXNoKCk7CisjaWZkZWYgT1MyCisgICAgICAgIFNh dmVDbWRNb2RlKDAsIDApOworI2VuZGlmIC8qIE9TMiAqLworICAgICAgICByZXR1cm47CisKKyAg ICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBCYWQgY2FsbCAqLworICAg ICAgICBtb3ZlIChDV19FUlIsMjIpOworI2lmZGVmIEtVSQorI2lmbmRlZiBLOTVHCisgICAgICAg IEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAorICAgICAgICAgICAgICAgICAgICAg ICAobG9uZykgQ1dfRVJSLAorICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgIioqKiBzY3Jl ZW4oKSBjYWxsZWQgd2l0aCBiYWQgZnVuY3Rpb24gY29kZSAqKioiCisgICAgICAgICAgICAgICAg ICAgICAgICk7CisjZW5kaWYgLyogSzk1RyAqLworI2VuZGlmIC8qIEtVSSAqLworICAgICAgICBw cmludHcoIioqKiBzY3JlZW4oKSBjYWxsZWQgd2l0aCBiYWQgZnVuY3Rpb24gY29kZSAqKioiKTsK KyAgICAgICAgY2xydG9lb2woKTsgcmVmcmVzaCgpOyByZXR1cm47CisgICAgfQorfQorI2VuZGlm IC8qIENLX0NVUlNFUyAqLworCisjaWZkZWYgS1VJCisjaWZkZWYgQ0tfQU5TSUMKK3ZvaWQKK3Nj cmVlbmcoaW50IGYsIGNoYXIgYyxsb25nIG4sY2hhciAqcykKKyNlbHNlCitDS1ZPSUQKK3NjcmVl bmcoZixjLG4scykKK2ludCBmOyAgICAgICAgICAvKiBhcmd1bWVudCBkZXNjcmlwdG9yICovCitj aGFyIGM7ICAgICAgICAgLyogYSBjaGFyYWN0ZXIgb3Igc21hbGwgaW50ZWdlciAqLworbG9uZyBu OyAgICAgICAgIC8qIGEgbG9uZyBpbnRlZ2VyICovCitjaGFyICpzOyAgICAgICAgLyogYSBzdHJp bmcgKi8KKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogc2NyZWVuZygpICovIHsKKyNpZmRlZiBD S19TU0wKKyAgICBleHRlcm4gaW50IHRsc19hY3RpdmVfZmxhZywgc3NsX2FjdGl2ZV9mbGFnOwor I2VuZGlmIC8qIENLX1NTTCAqLworI2lmZGVmIFJMT0dDT0RFCisgICAgZXh0ZXJuIGludCB0dG5w cm90bzsKKyNlbmRpZiAvKiBSTE9HQ09ERSAqLworICAgIHN0YXRpYyBpbnQgcSA9IDA7CisgICAg c3RhdGljIENLX09GRl9UIGZzaXogPSAoQ0tfT0ZGX1QpLTE7IC8qIENvcHkgb2YgZmlsZSBzaXpl ICovCisgICAgc3RhdGljIGxvbmcgZmNudCA9IDBMOyAgICAvKiBOdW1iZXIgb2YgZmlsZXMgdHJh bnNmZXJyZWQgKi8KKyAgICBzdGF0aWMgbG9uZyBmYnl0ID0gMEw7ICAgIC8qIFRvdGFsIGZpbGUg Ynl0ZXMgb2YgYWxsIGZpbGVzIHRyYW5zZmVycmVkICovCisgICAgc3RhdGljIENLX09GRl9UIGhv d2ZhciA9IChDS19PRkZfVCkwOyAvKiBIb3cgbXVjaCBvZiBmaWxlIHhmZXInZCBzbyBmYXIgKi8K KyAgICBzdGF0aWMgaW50ICBwY3RsYmwgPSAwTDsgIC8qIFBlcmNlbnQgZG9uZSB2cyBCeXRlcyBz byBmYXIgKi8KKyAgICBsb25nIGNwcyA9IDBMOworCisgICAgaW50IG5ldCA9IDA7CisgICAgaW50 IHhuZXQgPSAwOworICAgIGludCBmdHAgPSAwOworICAgIGludCBsZW47ICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIExlbmd0aCBvZiBzdHJpbmcgKi8KKyAgICBpbnQgZXJyb3JzID0gMDsg ICAgICAgICAgICAgICAgICAgICAvKiBFcnJvciBjb3VudGVyICovCisgICAgaW50IHg7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogV29ya2VyICovCisKKyAgICBkZWJ1ZyhGMTAxLCJz Y3JlZW5nIGNpbml0IiwiIixjaW5pdCk7CisgICAgZGVidWcoRjEwMSwic2NyZWVuZyBjZW5kdyIs IiIsY2VuZHcpOworCisgICAgaWYgKCFzKSBzID0gIiI7ICAgICAgICAgICAgICAgICAgICAgLyog QWx3YXlzIGRvIHRoaXMuICovCisKKyAgICBmdHAgPSAod2hhdCAmIFdfRlRQKSA/IDEgOiAwOwkv KiBGVFAgb3IgS2VybWl0ICovCisgICAgbmV0ID0gbmV0d29yayB8fCBmdHA7CisgICAgeG5ldCA9 IGZ0cCA/IDEgOiBuZXR0eXBlOwkJLyogTkVUX1RDUEIgPT0gMSAqLworCisgICAgaWYgKGNpbml0 ID09IDAgfHwgY2VuZHcgPiAwKSB7ICAgICAgLyogSGFuZGxlIGJvcmRlcmxpbmUgY2FzZXMuLi4g Ki8KKyAgICAgICAgaWYgKGYgPT0gU0NSX0NXKSB7ICAgICAgICAgICAgICAvKiBDbG9zZSB3aW5k b3csIGJ1dCBpdCdzIG5vdCBvcGVuICovCisgICAgICAgICAgICBmdF93aW4gPSAwOworICAgICAg ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGRlYnVnKEYxMTEsInNjcmVlbmcgQSIs cyxmKTsKKyAgICAgICAgaWYgKGYgPT0gU0NSX0VNIHx8CisgICAgICAgICAgIChmID09IFNDUl9Q VCAmJiBjID09ICdFJykpIHsgLyogRmF0YWwgZXJyb3IgYmVmb3JlIHdpbmRvdyBvcGVuICovCisg ICAgICAgICAgICBjb25vbGwoIiIpOyBjb25vYygnPycpOyBjb25vbGwocyk7IHJldHVybjsgLyog UmVndWxhciBkaXNwbGF5ICovCisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGNpbml0ID09IDAp IHsgICAgICAgICAgICAgICAgICAgLyogT25seSBjYWxsIGluaXRzY3IoKSBvbmNlICovCisJLyog Q2hlY2sgdGhlc2Ugbm93IC0tIGlmIHRoZXkgYXJlIGRlZmluZWQgYnV0IG5vdCBudW1lcmljICov CisJLyogdGhleSBjYW4gY3Jhc2ggY3Vyc2VzICovCisgICAgICAgIGNlbmR3ID0gMTsgICAgICAg ICAgICAgICAgICAgICAgLyogTmV3IHdpbmRvdyBuZWVkcyByZXBhaW50aW5nICovCisgICAgICAg IGRlYnVnKEYxMDAsInNjcmVlbmcgY2FsbGluZyBpbml0c2NyIiwiIiwwKTsKKyAgICAgICAgaW5p dHNjcigpOyAgICAgICAgICAgICAgICAgICAgICAvKiBJbml0aWFsaXplIGN1cnNlcy4gKi8KKyAg ICAgICAgZGVidWcoRjEwMCwic2NyZWVuZyBpbml0c2NyIG9rIiwiIiwwKTsKKyAgICAgICAgY2lu aXQrKzsgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZW1lbWJlciBjdXJzZXMgd2FzIGluaXRp YWxpemVkLiAqLworICAgIH0KKyAgICBmdF93aW4gPSAxOyAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBXaW5kb3cgaXMgb3BlbiAqLworICAgIGlmIChyZXBhaW50KSB7CisjaWZkZWYgQ0tfV1JF RlJFU0gKKy8qCisgIFRoaXMgdG90YWxseSByZXBhaW50cyB0aGUgc2NyZWVuLCBqdXN0IHdoYXQg d2Ugd2FudCwgYnV0IHdlIGNhbiBvbmx5CisgIGRvIHRoaXMgd2l0aCByZWFsIGN1cnNlcywgYW5k IHRoZW4gb25seSBpZiBjbGVhcm9rKCkgYW5kIHdyZWZyZXNoKCkgYXJlCisgIHByb3ZpZGVkIGlu IHRoZSBjdXJzZXMgbGlicmFyeS4KKyovCisgICAgICAgIFJlc3RvcmVDbWRNb2RlKCk7CisjZWxz ZSAgLyogTm8gQ0tfV1JFRlJFU0ggKi8KKy8qCisgIEtlcm1pdCdzIGRvLWl0LXlvdXJzZWxmIG1l dGhvZCwgd29ya3Mgd2l0aCBhbGwgdHlwZXMgb2YgZnVsbHNjcmVlbgorICBzdXBwb3J0LCBidXQg ZG9lcyBub3QgcmVwYWludCBhbGwgdGhlIGZpZWxkcy4gIEZvciBleGFtcGxlLCB0aGUgZmlsZW5h bWUKKyAgaXMgbG9zdCwgYmVjYXVzZSBpdCBhcnJpdmVzIGF0IGEgY2VydGFpbiB0aW1lIGFuZCBu ZXZlciBjb21lcyBhZ2FpbiwgYW5kCisgIEtlcm1pdCBwcmVzZW50bHkgZG9lcyBub3Qgc2F2ZSBp dCBhbnl3aGVyZS4gIE1ha2luZyB0aGlzIG1ldGhvZCB3b3JrIGZvcgorICBhbGwgZmllbGRzIHdv dWxkIGJlIGEgcmF0aGVyIG1ham9yIHJlY29kaW5nIHRhc2ssIGR1cGxpY2F0aW5nIHdoYXQgY3Vy c2VzCisgIGFscmVhZHkgZG9lcywgYW5kIHdvdWxkIGFkZCBhIGxvdCBvZiBjb21wbGV4aXR5IGFu ZCBzdG9yYWdlIHNwYWNlLgorKi8KKyAgICAgICAgY2VuZHcgPSAxOworI2VuZGlmIC8qIENLX1dS RUZSRVNIICovCisgICAgICAgIHJlcGFpbnQgPSAwOworICAgIH0KKyAgICBpZiAoY2VuZHcpIHsg ICAgICAgICAgICAgICAgICAgICAgICAvKiBlbmR3aW4oKSB3YXMgY2FsbGVkIHByZXZpb3VzbHkg Ki8KKyAgICAgICAgZGVidWcoRjEwMCwic2NyZWVuZyBzZXR1cCBvayIsIiIsMCk7CisgICAgICAg IEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX0RJUiwgKGxvbmcp IHpndGRpcigpICk7CisgICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwg KGxvbmcpIENXX0xJTiwKKyAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSAoCisjaWZkZWYg TkVXRlRQCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ0cCA/IChmdHBfaG9zdCA/ IGZ0cF9ob3N0IDogIih1bmtub3duKSIpIDoKKyNlbmRpZiAvKiBORVdGVFAgKi8KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdHRuYW1lKSApOworCisgICAgICAgIGlmIChuZXQpIHsK KyNpZmRlZiBORVRDT05OCisJICAgIGludCBzZWN1cmUgPSAwOworCSAgICBjaGFyICogeG5hbWU7 CisJICAgIGlmICh4bmV0ID4gbm5ldG5hbWUpCisJICAgICAgeG5hbWUgPSAiW0VSUk9SXSI7CisJ ICAgIGVsc2UKKwkgICAgICB4bmFtZSA9IG5ldG5hbWVbeG5ldF07CisjaWZkZWYgTkVXRlRQCisg ICAgICAgICAgICBpZiAoZnRwKSB7CisJCWlmIChmdHBpc3NlY3VyZSgpKQorCQkgIHNlY3VyZSA9 IDE7CisJICAgIH0gZWxzZQorI2VuZGlmIC8qIE5FV0ZUUCAqLworCSAgICAgIGlmICgwCisjaWZk ZWYgU1NIQlVJTFRJTgorICAgICAgICAgICAgICAgIHx8IElTX1NTSCgpCisjZW5kaWYgLyogU1NI QlVJTFRJTiAqLworI2lmZGVmIENLX0VOQ1JZUFRJT04KKyAgICAgICAgICAgICAgICB8fCBja190 bl9lbmNyeXB0aW5nKCkgJiYgY2tfdG5fZGVjcnlwdGluZygpCisjZW5kaWYgLyogQ0tfRU5DUllQ VElPTiAqLworI2lmZGVmIENLX1NTTAorICAgICAgICAgICAgICAgIHx8IHRsc19hY3RpdmVfZmxh ZyB8fCBzc2xfYWN0aXZlX2ZsYWcKKyNlbmRpZiAvKiBDS19TU0wgKi8KKyNpZmRlZiBSTE9HQ09E RQorI2lmZGVmIENLX0tFUkJFUk9TCisjaWZkZWYgQ0tfRU5DUllQVElPTgorICAgICAgICAgICAg ICAgIHx8IHR0bnByb3RvID09IE5QX0VLNExPR0lOIHx8IHR0bnByb3RvID09IE5QX0VLNUxPR0lO CisjZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLworI2VuZGlmIC8qIENLX0tFUkJFUk9TICovCisj ZW5kaWYgLyogUkxPR0NPREUgKi8KKyAgICAgICAgICAgICAgICAgKSB7CisJCXNlY3VyZSA9IDE7 CisJICAgIH0KKwkgICAgaWYgKHNlY3VyZSkgeworICAgICAgICAgICAgICAgIGNoYXIgYnVmWzMw XTsKKyAgICAgICAgICAgICAgICBzcHJpbnRmKGJ1ZiwiJXMgKFNFQ1VSRSkiLHhuYW1lKTsKKyAg ICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgQ1dfU1BELAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChsb25nKSBidWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAp OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShL VUlfRklMRV9UUkFOU0ZFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykg Q1dfU1BELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSB4bmFtZQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICB9CisjZWxzZQorICAg ICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAobG9uZykgQ1dfU1BELAorICAgICAgICAgICAgICAgICAgICAgICAgICAg KGxvbmcpICIobmV0d29yaykiCisgICAgICAgICAgICAgICAgICAgICAgICAgICApOworI2VuZGlm IC8qIE5FVENPTk4gKi8KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChzcGVlZCA8 IDBMKQorICAgICAgICAgICAgICBzcGVlZCA9IHR0Z3NwZCgpOworICAgICAgICAgICAgaWYgKHNw ZWVkID4gMEwpIHsKKyAgICAgICAgICAgICAgICBpZiAoc3BlZWQgPT0gODg4MCkgeworICAgICAg ICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX1NQRCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKGxvbmcpICI3NS8xMjAwIgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg ICAgICAgICAgIGNoYXIgc3BlZWRidWZbNjRdIDsKKyAgICAgICAgICAgICAgICAgICAgc3ByaW50 ZihzcGVlZGJ1ZiwgIiVsZCIsIHNwZWVkKTsKKyAgICAgICAgICAgICAgICAgICAgS3VpU2V0UHJv cGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChsb25nKSBDV19TUEQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChs b25nKSBzcGVlZGJ1ZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgS3Vp U2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKGxvbmcpIENXX1NQRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9u ZykgIih1bmtub3duKSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAg ICAgICAgfQorICAgICAgICB9CisgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5T RkVSLAorICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgQ1dfUEFSLAorICAgICAgICAgICAg ICAgICAgICAgICAobG9uZykgcGFybmFtKChjaGFyKXBhcml0eSkKKyAgICAgICAgICAgICAgICAg ICAgICAgKTsKKyAgICAgICAgcGN0bGJsID0gKHdoYXQgJiBXX1NFTkQpOworICAgICAgICBjZW5k dyA9IDA7CisgICAgfQorICAgIGRlYnVnKEYxMDEsIlNDUkVFTkMgc3dpdGNoIiwiIixmKTsKKyAg ICBkZWJ1ZyhGMDAwLCJTQ1JFRU5DIGMiLCIiLGMpOworICAgIGRlYnVnKEYxMDEsIlNDUkVFTkMg biIsIiIsbik7CisKKyAgICBsZW4gPSBzdHJsZW4ocyk7ICAgICAgICAgICAgICAgICAgICAvKiBM ZW5ndGggb2YgYXJndW1lbnQgc3RyaW5nICovCisgICAgc3dpdGNoIChmKSB7ICAgICAgICAgICAg ICAgICAgICAgICAgLyogSGFuZGxlIG91ciBmdW5jdGlvbiBjb2RlICovCisgICAgICBjYXNlIFND Ul9GTjogICAgICAgICAgICAgICAgICAgICAgLyogRmlsZW5hbWUgKi8KKyAgICAgICAgb2xkcGN0 ID0gcGN0ID0gMEw7ICAgICAgICAgICAgICAvKiBSZXNldCBwZXJjZW50cyAqLworI2lmZGVmIEdG VElNRVIKKyAgICAgICAgZ3R2ID0gKENLRkxPQVQpIC0xLjA7CisgICAgICAgIC8qIG9sZGd0diA9 IChDS0ZMT0FUKSAtMS4wOyAqLworI2Vsc2UKKyAgICAgICAgZ3R2ID0gLTFMOworICAgICAgICAv KiBvbGRndHYgPSAtMUw7ICovCisjZW5kaWYgLyogR0ZUSU1FUiAqLworICAgICAgICBvbGR3aW4g PSAtMTsKKyAgICAgICAgZnNpeiA9IChDS19PRkZfVCktMUw7CQkvKiBJbnZhbGlkYXRlIHByZXZp b3VzIGZpbGUgc2l6ZSAqLworICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNG RVIsIChsb25nKSBDV19QQ0QsIChsb25nKSAwICk7CisgICAgICAgIEt1aVNldFByb3BlcnR5KCBL VUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX0ZGQywgKGxvbmcpIDAgKTsKKyAgICAgICAgS3Vp U2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfU0laLCAobG9uZykgMCAp OworICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19F UlIsIChsb25nKSAiIiApOworCisgICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFO U0ZFUiwgKGxvbmcpIENXX05BTSwgKGxvbmcpIHMgKTsKKyAgICAgICAgcSA9IGxlbjsgICAgICAg ICAgICAgICAgICAgICAgICAvKiBSZW1lbWJlciBuYW1lIGxlbmd0aCBmb3IgbGF0ZXIgKi8KKyAg ICAgICAgc2NyZnQoKTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBEaXNwbGF5IGZpbGUgdHlw ZSAoY2FuIGNoYW5nZSkgKi8KKyNpZmRlZiBPUzIKKyAgICAgICAgU2F2ZUNtZE1vZGUoMCwgMCk7 CisjZW5kaWYgLyogT1MyICovCisgICAgICAgIHJldHVybjsKKworICAgICAgY2FzZSBTQ1JfQU46 ICAgICAgICAgICAgICAgICAgICAgIC8qIEZpbGUgYXMtbmFtZSAqLworICAgICAgICBLdWlTZXRQ cm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19OQU0sIChsb25nKSBzICk7Cisj aWZkZWYgT1MyCisgICAgICAgIFNhdmVDbWRNb2RlKDAsIDApOworI2VuZGlmIC8qIE9TMiAqLwor ICAgICAgICByZXR1cm47CisKKyAgICAgIGNhc2UgU0NSX0ZTOiAgICAgICAgICAgICAgICAgICAg ICAvKiBGaWxlIHNpemUgKi8KKyAgICAgICAgZnNpeiA9IG47CisgICAgICAgIGlmIChmc2l6ID4g KENLX09GRl9UKS0xKSB7CisgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJB TlNGRVIsIChsb25nKSBDV19TSVosIChsb25nKSBuICk7CisgICAgICAgIH0KKyAgICAgICAgaWYg KGZzaXogPiAoQ0tfT0ZGX1QpLTEpIHsJLyogUHV0IHVwIHBlcmNlbnQgbGFiZWwgKi8KKyAgICAg ICAgICAgIHBjdGxibCA9IDE7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwY3RsYmwg PSAwOworCX0KKyAgICAgICAgc2NyZnQoKTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBGaWxl IHR5cGUgKi8KKyNpZmRlZiBPUzIKKyAgICAgICAgU2F2ZUNtZE1vZGUoMCwgMCk7CisjZW5kaWYg LyogT1MyICovCisgICAgICAgIHJldHVybjsKKworICAgICAgY2FzZSBTQ1JfUFQ6ICAgICAgICAg ICAgICAgICAgICAgIC8qIFBhY2tldCB0eXBlIG9yIHBzZXVkb3R5cGUgKi8KKyAgICAgICAgaWYg KHNwYWNrZXRzIDwgNSkgeworICAgICAgICAgICAgZXh0ZXJuIGludCBzeXNpbmRleDsKKyAgICAg ICAgICAgIGV4dGVybiBzdHJ1Y3Qgc3lzZGF0YSBzeXNpZGxpc3RbXTsKKyAgICAgICAgICAgIC8q IFRoaW5ncyB0aGF0IHdvbid0IGNoYW5nZSBhZnRlciB0aGUgNHRoIHBhY2tldCAqLworICAgICAg ICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgKGxvbmcpIENXX1BBUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChs b25nKSBwYXJuYW0oKGNoYXIpcGFyaXR5KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsK KyAgICAgICAgICAgIGlmICgKKyNpZmRlZiBORVdGVFAKKwkJKGZ0cCAmJiAoc3BhY2tldHMgPT0g MSB8fCBycGFja2V0cyA9PSAxKSkgfHwKKyNlbmRpZiAvKiBORVdGVFAgKi8KKwkJc3BhY2tldHMg PT0gNAorCQkpIHsKKyAgICAgICAgICAgICAgICBpZiAoCisjaWZkZWYgTkVXRlRQCisJCSAgICBm dHAgfHwKKyNlbmRpZiAvKiBORVdGVFAgKi8KKwkJICAgICgocHJvdG9jb2wgPT0gUFJPVE9fSykg JiYgKHN5c2luZGV4ID4gLTEpKQorCQkgICAgKSB7CisgICAgICAgICAgICAgICAgICAgIGNoYXIg bXNnYnVmWzEyOF07CisgICAgICAgICAgICAgICAgICAgIGlmIChuZXQpIHsKKyAgICAgICAgICAg ICAgICAgICAgICAgIHNwcmludGYobXNnYnVmLCJOZXR3b3JrIEhvc3Q6ICVzICglcykiLAorI2lm ZGVmIE5FV0ZUUAorCQkJICAgICAgIGZ0cCA/IChmdHBfaG9zdCA/IGZ0cF9ob3N0IDogIiIpIDoK KyNlbmRpZiAvKiBORVdGVFAgKi8KKwkJCSAgICAgICB0dG5hbWUsCisjaWZkZWYgTkVXRlRQCisJ CQkgICAgICAgZnRwID8gZnRwX3NydnR5cCA6CisjZW5kaWYgLyogTkVXRlRQICovCisJCQkgICAg ICAgc3lzaWRsaXN0W3N5c2luZGV4XS5zaWRfbmFtZQorCQkJICAgICAgICk7CisgICAgICAgICAg ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKG1zZ2J1 ZiwKKwkJCQkiQ29tbXVuaWNhdGlvbiBEZXZpY2U6ICVzIChyZW1vdGUgaG9zdCBpcyAlcykiLAor CQkJCXR0bmFtZSwKKwkJCQlzeXNpZGxpc3Rbc3lzaW5kZXhdLnNpZF9uYW1lCisJCQkJKTsKKyAg ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eSgg S1VJX0ZJTEVfVFJBTlNGRVIsCisJCQkJICAgIChsb25nKSBDV19MSU4sCisJCQkJICAgIChsb25n KSBtc2didWYKKwkJCQkgICAgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg ICAgICAgIH0KKyNpZmRlZiBDS19USU1FUlMKKyAgICAgICAgaWYgKC8qIHJ0dGZsZyAmJiAqLyBw cm90b2NvbCA9PSBQUk9UT19LKSB7CisgICAgICAgICAgICBsb25nIHh4OworICAgICAgICAgICAg aWYgKAorI2lmZGVmIFNUUkVBTUlORworICAgICAgICAgICAgICAgIHN0cmVhbWluZyAmJiBvbGR3 aW4gIT0gLTIKKyNlbHNlCisgICAgICAgICAgICAgICAgMAorI2VuZGlmIC8qIFNUUkVBTUlORyAq LworICAgICAgICAgICAgICAgICkgeworICAgICAgICAgICAgICAgIGNoYXIgbXNnYnVmWzY0XTsK KyAgICAgICAgICAgICAgICBzcHJpbnRmKG1zZ2J1ZiwiMDAgLyAwMCIpOworICAgICAgICAgICAg ICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwKKwkJCQkobG9uZykgQ1dfVE1P LAorCQkJCShsb25nKSBtc2didWYKKwkJCQkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg ICAgICAgICAgICB4eCA9IChydHRkZWxheSArIDUwMCkgLyAxMDAwOworICAgICAgICAgICAgICAg IGlmICh4eCAhPSBvbGRydHQgfHwgcmN2dGltbyAhPSBvbGR0aW0pIHsKKyAgICAgICAgICAgICAg ICAgICAgY2hhciBtc2didWZbNjRdOworICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKG1zZ2J1 ZiwiJTAybGQgLyAlMDJkIiwgeHgsIHJjdnRpbW8pOworICAgICAgICAgICAgICAgICAgICBLdWlT ZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsCisJCQkJICAgIChsb25nKSBDV19UTU8sCisJ CQkJICAgIChsb25nKSBtc2didWYKKwkJCQkgICAgKTsKKyAgICAgICAgICAgICAgICAgICAgb2xk cnR0ID0geHg7CisgICAgICAgICAgICAgICAgICAgIG9sZHRpbSA9IHJjdnRpbW87CisgICAgICAg ICAgICAgICAgICAgIGNscnRvZW9sKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg fQorICAgICAgICB9CisjZW5kaWYgLyogQ0tfVElNRVJTICovCisKKyAgICAgICAgeCA9ICh3aGF0 ICYgV19SRUNWKSA/ICAgICAgICAgIC8qIFBhY2tldCBsZW5ndGggKi8KKyAgICAgICAgICBycGt0 bCsocHJvdG9jb2w9PVBST1RPX0s/MTowKSA6CisgICAgICAgICAgICBzcGt0bDsKKyAgICAgICAg aWYgKHggIT0gb2xkbGVuKSB7ICAgICAgICAgICAgICAvKiBCdXQgb25seSBpZiBpdCBjaGFuZ2Vk LiAqLworICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9u ZykgQ1dfUEwsIChsb25nKSB4ICk7CisgICAgICAgICAgICBvbGRsZW4gPSB4OworICAgICAgICB9 CisgICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX1BD LCAobG9uZykgc3BhY2tldHMgKTsKKworICAgICAgICBpZiAocHJvdG9jb2wgPT0gUFJPVE9fSyAm JiAhZnRwKSB7IC8qIFdpbmRvdyBzbG90cyAqLworICAgICAgICAgICAgY2hhciB3c1sxNl07Cisg ICAgICAgICAgICBpbnQgZmxhZzsKKyAgICAgICAgICAgIGZsYWcgPSAwOworI2lmZGVmIFNUUkVB TUlORworICAgICAgICAgICAgaWYgKHN0cmVhbWluZykgeworICAgICAgICAgICAgICAgIGlmIChv bGR3aW4gIT0gLTIpIHsKKyAgICAgICAgICAgICAgICAgICAgc3ByaW50Zih3cywiU1RSRUFNSU5H Iik7CisgICAgICAgICAgICAgICAgICAgIGZsYWcgPSAxOworICAgICAgICAgICAgICAgICAgICBv bGR3aW4gPSAtMjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UKKyNlbmRp ZiAvKiBTVFJFQU1JTkcgKi8KKyAgICAgICAgICAgICAgaWYgKHdjdXIgIT0gb2xkd2luKSB7Cisg ICAgICAgICAgICAgICAgICBzcHJpbnRmKHdzLCAiJWQgb2YgJWQiLCB3Y3VyIDwgMSA/IDEgOiB3 Y3VyLCB3c2xvdG4pOworICAgICAgICAgICAgICAgICAgZmxhZyA9IDE7CisgICAgICAgICAgICAg ICAgICBvbGR3aW4gPSB3Y3VyOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZmxh ZykgeworICAgICAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwg KGxvbmcpIENXX1dTLCAobG9uZykgd3MgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg ICAgICBlcnJvcnMgPSByZXRyYW5zICsgY3J1bmNoZWQgKyB0aW1lb3V0czsKKyAgICAgICAgaWYg KGVycm9ycyAhPSBvbGR0cnkpIHsgICAgICAgICAvKiBSZXRyeSBjb3VudCwgaWYgY2hhbmdlZCAq LworICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykg Q1dfUFIsIChsb25nKSBlcnJvcnMgKTsKKyAgICAgICAgICAgIG9sZHRyeSA9IGVycm9yczsKKyAg ICAgICAgfQorCS8qIFNlbmRlcidzIHBhY2tldCB0eXBlICovCisgICAgICAgIGlmICghZnRwICYm IChjICE9IG9sZHR5cCAmJiBjICE9ICdZJyAmJiBjICE9ICdOJykpIHsKKyAgICAgICAgICAgIGNo YXIgdHlwZVsyXTsKKyAgICAgICAgICAgIHNwcmludGYodHlwZSwgIiVjIixjKTsKKyAgICAgICAg ICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX1BULCAobG9u ZykgdHlwZSApOworICAgICAgICAgICAgb2xkdHlwID0gYzsKKyAgICAgICAgfQorICAgICAgICBz d2l0Y2ggKGMpIHsgICAgICAgICAgICAgICAgICAgIC8qIE5vdyBoYW5kbGUgc3BlY2lmaWMgcGFj a2V0IHR5cGVzICovCisgICAgICAgICAgY2FzZSAnUyc6ICAgICAgICAgICAgICAgICAgICAgLyog QmVnaW5uaW5nIG9mIHRyYW5zZmVyICovCisgICAgICAgICAgICBmY250ID0gZmJ5dCA9IDBMOyAg ICAgICAgICAgLyogQ2xlYXIgY291bnRlcnMgKi8KKyNpZmRlZiBHRlRJTUVSCisgICAgICAgICAg ICBndHYgPSAtMS4wOworI2Vsc2UgLyogR0ZUSU1FUiAqLworICAgICAgICAgICAgZ3R2ID0gLTFM OyAgICAgICAgICAgICAgICAgIC8qIEFuZCBvbGQvbmV3IHRoaW5ncy4uLiAqLworI2VuZGlmIC8q IEdGVElNRVIgKi8KKyAgICAgICAgICAgIG9sZHBjdCA9IHBjdCA9IDBMOworICAgICAgICAgICAg YnJlYWs7CisKKyAgICAgICAgICBjYXNlICdaJzogICAgICAgICAgICAgICAgICAgICAvKiBvciBF T0YgKi8KKyAgICAgICAgICAgIGRlYnVnKEYxMDEsInNjcmVlbmcgU0NSX1BUIFogcGt0bnVtIiwi IixuKTsKKyAgICAgICAgICAgIGRlYnVnKEYxMDEsInNjcmVlbmcgU0NSX1BUIFogb2xkcGN0Iiwi IixvbGRwY3QpOworICAgICAgICAgICAgZGVidWcoRjEwMSwic2NyZWVuZyBTQ1JfUFQgWiBwY3Qi LCIiLHBjdCk7CisgICAgICAgICAgY2FzZSAnRCc6ICAgICAgICAgICAgICAgICAgICAgLyogRGF0 YSBwYWNrZXQgKi8KKyAgICAgICAgICAgIGlmIChmc2l6ID4gMEwpIHsgICAgICAgICAgICAvKiBT aG93IHBlcmNlbnQgZG9uZSBpZiBrbm93biAqLworICAgICAgICAgICAgICAgIG9sZHBjdCA9IHBj dDsgICAgICAgICAgIC8qIFJlbWVtYmVyIHByZXZpb3VzIHBlcmNlbnQgKi8KKyAgICAgICAgICAg ICAgICBob3dmYXIgPSBmZmM7CisjaWZkZWYgQ0tfUkVTRU5ECisgICAgICAgICAgICAgICAgaWYg KHdoYXQgJiBXX1NFTkQpCS8qIEFjY291bnQgZm9yIFBTRU5EIG9yIFJFU0VORCAqLworICAgICAg ICAgICAgICAgICAgaG93ZmFyICs9IHNlbmRzdGFydDsKKyAgICAgICAgICAgICAgICBlbHNlIGlm ICh3aGF0ICYgV19SRUNWKQorICAgICAgICAgICAgICAgICAgaG93ZmFyICs9IHJzX2xlbjsKKyNl bmRpZiAvKiBDS19SRVNFTkQgKi8KKyAgICAgICAgICAgICAgICAvKiBQZXJjZW50IGRvbmUsIHRv IGJlIGRpc3BsYXllZC4uLiAqLworICAgICAgICAgICAgICAgIGlmIChjID09ICdaJykgeworICAg ICAgICAgICAgICAgICAgICBpZiAoIWRpc2NhcmQgJiYgIWN4c2VlbiAmJiAhY3pzZWVuKSBwY3Qg PSAxMDBMOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgcGN0ID0g KGZzaXogPiA5OUwpID8gKGhvd2ZhciAvIChmc2l6IC8gMTAwTCkpIDogMEw7CisgICAgICAgICAg ICAgICAgaWYgKHBjdCA+IDEwMEwgfHwgICAgICAgLyogQWxsb3cgZm9yIGV4cGFuc2lvbiBhbmQg Ki8KKyAgICAgICAgICAgICAgICAgICAob2xkcGN0ID09IDk5TCAmJiBwY3QgPCAwTCkpIC8qIG90 aGVyIGJvdW5kYXJ5IGNvbmRpdGlvbnMgKi8KKyAgICAgICAgICAgICAgICAgIHBjdCA9IDEwMEw7 CisgICAgICAgICAgICAgICAgaWYgKHBjdCAhPSBvbGRwY3QpICAgICAgLyogT25seSBkbyB0aGlz IDEwMCB0aW1lcyBwZXIgZmlsZSAqLworICAgICAgICAgICAgICAgICAgdXBkcGN0KG9sZHBjdCwg cGN0KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgS3VpU2V0UHJvcGVy dHkoS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19GRkMsIChsb25nKSBmZmMpOworICAgICAg ICAgICAgfQorICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsIChs b25nKSBDV19GRkMsIChsb25nKSBob3dmYXIpOworICAgICAgICAgICAgY3BzID0gc2hvY3BzKChp bnQpIHBjdCwgZnNpeiwgaG93ZmFyKTsKKyAgICAgICAgICAgIC8qIG9sZF90ciA9IHNob2V0bChv bGRfdHIsIGNwcywgZnNpeiwgaG93ZmFyKTsgKi8KKyAgICAgICAgICAgIGJyZWFrOworCisgICAg ICAgICAgY2FzZSAnJSc6ICAgICAgICAgICAgICAgICAgICAgLyogVGltZW91dHMsIHJldHJhbnNt aXNzaW9ucyAqLworICAgICAgICAgICAgY3BzID0gc2hvY3BzKChpbnQpIHBjdCwgZnNpeiwgaG93 ZmFyKTsKKyAgICAgICAgICAgIC8qIG9sZF90ciA9IHNob2V0bChvbGRfdHIsIGNwcywgZnNpeiwg aG93ZmFyKTsgKi8KKworICAgICAgICAgICAgZXJyb3JzID0gcmV0cmFucyArIGNydW5jaGVkICsg dGltZW91dHM7CisgICAgICAgICAgICBpZiAoZXJyb3JzICE9IG9sZHRyeSkgeyAgICAgLyogRXJy b3IgY291bnQsIGlmIGNoYW5nZWQgKi8KKyAgICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShL VUlfRklMRV9UUkFOU0ZFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykg Q1dfUFIsCisJCQkgICAgICAgKGxvbmcpIGVycm9ycworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG9sZHRyeSA9IGVy cm9yczsKKyAgICAgICAgICAgICAgICBpZiAocykgaWYgKCpzKSB7CisgICAgICAgICAgICAgICAg ICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfRVJSLCAobG9u Zykgcyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNh c2UgJ0UnOiAgICAgICAgICAgICAgICAgICAgIC8qIEVycm9yIHBhY2tldCAqLworICAgICAgICAg ICAgaWYgKCpzKSB7CisgICAgICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RS QU5TRkVSLCAobG9uZykgQ1dfRVJSLCAobG9uZykgcyApOworICAgICAgICAgICAgfQorICAgICAg ICAgICAgZmNudCA9IGZieXQgPSAwTDsgICAgICAgICAgIC8qIFNvIG5vIGJ5dGVzIGZvciB0aGlz IGZpbGUgKi8KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgJ1EnOiAgICAgICAg ICAgICAgICAgICAgIC8qIENydW5jaGVkIHBhY2tldCAqLworICAgICAgICAgICAgY3BzID0gc2hv Y3BzKChpbnQpIHBjdCwgZnNpeiwgaG93ZmFyKTsKKyAgICAgICAgICAgIC8qIG9sZF90ciA9IHNo b2V0bChvbGRfdHIsIGNwcywgZnNpeiwgaG93ZmFyKTsgKi8KKyAgICAgICAgICAgIEt1aVNldFBy b3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxv bmcpIENXX0VSUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSAiRGFtYWdlZCBQ YWNrZXQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgYnJlYWs7 CisgICAgICAgICAgY2FzZSAncSc6ICAgICAgICAgICAgICAgICAgICAgLyogQ3RybC1DIG9yIGNv bm5lY3Rpb24gbG9zdCAqLworICAgICAgICAgICAgaWYgKCFzKSBzID0gIiI7CisgICAgICAgICAg ICBpZiAoISpzKSBzID0gIlVzZXIgaW50ZXJydXB0aW9uIG9yIGNvbm5lY3Rpb24gbG9zdCI7Cisg ICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgIChsb25nKSBDV19NU0csCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAobG9uZykgcworICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIGJy ZWFrOworICAgICAgICAgIGNhc2UgJ1QnOiAgICAgICAgICAgICAgICAgICAgIC8qIFRpbWVvdXQg Ki8KKyAgICAgICAgICAgIGNwcyA9IHNob2NwcygoaW50KSBwY3QsIGZzaXosIGhvd2Zhcik7Cisg ICAgICAgICAgICAvKiBvbGRfdHIgPSBzaG9ldGwob2xkX3RyLCBjcHMsIGZzaXosIGhvd2Zhcik7 ICovCisgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19FUlIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAobG9uZykgIlRpbWVvdXQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICApOwor ICAgICAgICAgICAgZXJyb3JzID0gcmV0cmFucyArIGNydW5jaGVkICsgdGltZW91dHM7CisgICAg ICAgICAgICBpZiAoZXJyb3JzICE9IG9sZHRyeSkgeyAgICAgLyogRXJyb3IgY291bnQsIGlmIGNo YW5nZWQgKi8KKyAgICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZF UiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgQ1dfUFIsIChsb25nKSBl cnJvcnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAg IG9sZHRyeSA9IGVycm9yczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAg ICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgIC8qIE90aGVycywgZG8gbm90aGlu ZyAqLworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyNpZmRlZiBPUzIKKyAgICAgICAg U2F2ZUNtZE1vZGUoMCwgMCk7CisjZW5kaWYgLyogT1MyICovCisgICAgICAgIHJldHVybjsKKwor ICAgICAgY2FzZSBTQ1JfU1Q6ICAgICAgICAgICAgICAgICAgICAgIC8qIEZpbGUgdHJhbnNmZXIg c3RhdHVzICovCisgICAgICAgIGRlYnVnKEYxMDEsInNjcmVlbmcgU0NSX1NUIGMiLCIiLGMpOwor ICAgICAgICBkZWJ1ZyhGMTAxLCJzY3JlZW5nIFNDUl9TVCBzdWNjZXNzIiwiIixzdWNjZXNzKTsK KyAgICAgICAgZGVidWcoRjEwMSwic2NyZWVuZyBTQ1JfU1QgY3hzZWVuIiwiIixjeHNlZW4pOwor I2lmZGVmIENPTU1FTlQKKyAgICAgICAgaWYgKGMgPT0gU1RfT0spIHsgICAgICAgICAgICAgICAv KiBPSywgcHJpbnQgMTAwICUgKi8KKyAgICAgICAgICAgIGlmIChwY3RsYmwpCisgICAgICAgICAg ICAgIHVwZHBjdChvbGRwY3QsMTAwKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg ICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX0ZGQywgKGxvbmcp IGZmYyk7CisgICAgICAgICAgICBwY3QgPSAxMDA7CisgICAgICAgICAgICBvbGRwY3QgPSAwOwor ICAgICAgICB9IGVsc2UgaWYgKGZzaXogPiAwTCkgICAgICAgICAgIC8qIE5vdCBPSywgdXBkYXRl IGZpbmFsIHBlcmNlbnQgKi8KKy8qCisgIFRoZSBlbHNlIHBhcnQgd3JpdGVzIGFsbCBvdmVyIHRo ZSBzY3JlZW4gLS0gaG93ZmFyIGFuZC9vciBmc2l6IGhhdmUKKyAgYmVlbiByZXNldCBhcyBhIGNv bnNlcXVlbmNlIG9mIHRoZSBub3QtT0tuZXNzIG9mIHRoZSB0cmFuc2Zlci4KKyovCisgICAgICAg ICAgaWYgKHBjdGxibCkKKyAgICAgICAgICAgIHVwZHBjdChvbGRwY3QsIChob3dmYXIgKiAxMDBM KSAvIGZzaXopOworI2Vsc2UKKyAgICAgICAgaWYgKGMgPT0gU1RfT0spIHsgICAgICAgICAgICAg ICAvKiBPSywgcHJpbnQgMTAwICUgKi8KKyAgICAgICAgICAgIGlmIChwY3RsYmwpIHsKKwkJdXBk cGN0KG9sZHBjdCwxMDApOworCSAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBLdWlTZXRQcm9w ZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX0ZGQywgKGxvbmcpIGZmYyk7CisjaWZk ZWYgQ09NTUVOVAorICAgICAgICAgICAgcGN0ID0gMTAwOworICAgICAgICAgICAgb2xkcGN0ID0g MDsKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgICAgIH0KKyNlbmRpZiAvKiBDT01NRU5UICov CisKKyAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1df VFIsIChsb25nKSAiIiApOworCisgICAgICAgIHN3aXRjaCAoYykgeyAgICAgICAgICAgICAgICAg ICAgLyogUHJpbnQgbmV3IHN0YXR1cyBtZXNzYWdlICovCisgICAgICAgICAgY2FzZSBTVF9PSzog ICAgICAgICAgICAgICAgICAgLyogVHJhbnNmZXIgT0sgKi8KKyAgICAgICAgICAgIGZjbnQrKzsg ICAgICAgICAgICAgICAgICAgICAvKiBDb3VudCB0aGlzIGZpbGUgKi8KKwkgICAgaWYgKHdoYXQg PT0gKFdfRlRQfFdfRlRfREVMRSkpIHsKKyAgICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShL VUlfRklMRV9UUkFOU0ZFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcp IENXX01TRywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpICJEZWxldGUg T0siCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisJICAgIH0gZWxzZSB7CisJ CWZieXQgKz0gZmZjOworICAgICAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RS QU5TRkVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgQ1dfTVNHLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgIlRyYW5zZmVyIE9LIgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworCSAgICB9CisgICAgICAgICAgICByZXR1 cm47CisKKyAgICAgICAgICBjYXNlIFNUX0RJU0M6ICAgICAgICAgICAgICAgICAvKiBEaXNjYXJk ZWQgKi8KKyAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX0VSUiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIChsb25nKSAiRmlsZSBkaXNjYXJkZWQiCisgICAgICAgICAgICAgICAgICAgICAg ICAgICApOworI2lmZGVmIENPTU1FTlQKKyAgICAgICAgICAgIHBjdCA9IG9sZHBjdCA9IDA7Cisj ZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgY2Fz ZSBTVF9JTlQ6ICAgICAgICAgICAgICAgICAgLyogSW50ZXJydXB0ZWQgKi8KKyAgICAgICAgICAg IEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgKGxvbmcpIENXX0VSUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSAi VHJhbnNmZXIgaW50ZXJydXB0ZWQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICApOworI2lm ZGVmIENPTU1FTlQKKyAgICAgICAgICAgIHBjdCA9IG9sZHBjdCA9IDA7CisjZW5kaWYgLyogQ09N TUVOVCAqLworICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNhc2UgU1RfU0tJUDogeyAg ICAgICAgICAgICAgICAvKiBTa2lwcGVkICovCisgICAgICAgICAgICBjaGFyIGVycmJ1Zls2NF0g OworCSAgICBpZiAobiA+IDAgJiYgbiA8IG5za3JlYXNvbikKKyAgICAgICAgICAgICAgICBzcHJp bnRmKCBlcnJidWYsICJGaWxlIHNraXBwZWQsICglcykiLCBza3JlYXNvbltuXSApIDsKKwkgICAg ZWxzZQorICAgICAgICAgICAgICAgIHNwcmludGYoIGVycmJ1ZiwgIkZpbGUgc2tpcHBlZCIgKSA7 CisgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19FUlIsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAobG9uZykgZXJyYnVmCisgICAgICAgICAgICAgICAgICAgICAgICAgICApOworI2lmZGVm IENPTU1FTlQKKyAgICAgICAgICAgIHBjdCA9IG9sZHBjdCA9IDA7CisjZW5kaWYgLyogQ09NTUVO VCAqLworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgICAgY2FzZSBTVF9F UlI6ICAgICAgICAgICAgICAgICAgLyogRXJyb3IgbWVzc2FnZSAqLworICAgICAgICAgICAgaWYg KCFzKSBzID0gKGNoYXIgKillcGt0bXNnOworICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtV SV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfRVJSLCAobG9uZykgcyApOworI2lmZGVmIENPTU1F TlQKKyAgICAgICAgICAgIHBjdCA9IG9sZHBjdCA9IDA7CisjZW5kaWYgLyogQ09NTUVOVCAqLwor ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgY2FzZSBTVF9SRUZVOiAgICAgICAgICAg ICAgICAgLyogUmVmdXNlZCAqLworICAgICAgICAgICAgaWYgKCpzKSB7CisgICAgICAgICAgICAg ICAgY2hhciBlcnJidWZbNjRdIDsKKyAgICAgICAgICAgICAgICBzcHJpbnRmKCBlcnJidWYsICJS ZWZ1c2VkLCAlcyIsIHMgKSA7CisgICAgICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJ TEVfVFJBTlNGRVIsKGxvbmcpIENXX0VSUiwobG9uZykgZXJyYnVmKTsKKyAgICAgICAgICAgIH0g ZWxzZSB7CisgICAgICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIs KGxvbmcpQ1dfRVJSLChsb25nKSJSZWZ1c2VkIik7CisgICAgICAgICAgICB9CisjaWZkZWYgQ09N TUVOVAorICAgICAgICAgICAgcGN0ID0gb2xkcGN0ID0gMDsKKyNlbmRpZiAvKiBDT01NRU5UICov CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICBjYXNlIFNUX0lOQzoKKyAgICAgICAg ICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLChsb25nKUNXX0VSUiwobG9uZyki SW5jb21wbGV0ZSIpOworI2lmZGVmIENPTU1FTlQKKyAgICAgICAgICAgIHBjdCA9IG9sZHBjdCA9 IDA7CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg ICAgY2FzZSBTVF9NU0c6CisgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFO U0ZFUiwobG9uZylDV19NU0csKGxvbmcpcyk7CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAg ICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAvKiBCYWQgY2FsbCAqLworICAgICAg ICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfRVJSLAor ICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgIioqKiBzY3JlZW4oKSBjYWxsZWQgd2l0aCBi YWQgc3RhdHVzICoqKiIgKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAg ICBjYXNlIFNDUl9UQzogeyAgICAgICAgICAgICAgICAgICAgLyogVHJhbnNhY3Rpb24gY29tcGxl dGUgKi8KKyAgICAgICAgICBjaGFyIG1zZ2J1ZlsxMjhdOworICAgICAgICAgIEt1aVNldFByb3Bl cnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX0NQLCB0ZmNwcyk7CisgICAgICAgICAg aWYgKHN1Y2Nlc3MpIHsKKyAgICAgICAgICAgICAgc3ByaW50Zihtc2didWYsCisgICAgICAgICAg ICAgICAgICAgICAgIlNVQ0NFU1MuICBGaWxlczogJXMsIEJ5dGVzOiAlbGQsICVsZCBDUFMiLAor ICAgICAgICAgICAgICAgICAgICAgIGZpbGNudCAtIGZpbHJlaiwKKyAgICAgICAgICAgICAgICAg ICAgICBja2ZzdG9hKGZieXQpLAorICAgICAgICAgICAgICAgICAgICAgIHRmY3BzCisgICAgICAg ICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVf VFJBTlNGRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19NU0csCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBtc2didWYKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICB9CisgICAgICAgICAgS3VpU2V0UHJvcGVydHko S1VJX0ZJTEVfVFJBTlNGRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX1RS LAorICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBoaG1tc3MoKGxvbmcpCisjaWZkZWYg R0ZUSU1FUgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZwdHNlY3Mg KyAwLjUpCisjZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHNl Y3MKKyNlbmRpZiAvKiBHRlRJTUVSICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICApKTsKKworI2lmZGVmIEdGVElNRVIKKyAgICAgICAgICBvbGRndHYgPSAoQ0tGTE9B VCkgLTEuMDsKKyNlbHNlCisgICAgICAgICAgb2xkZ3R2ID0gLTFMOworI2VuZGlmIC8qIEdGVElN RVIgKi8KKworI2lmZGVmIENPTU1FTlQKKyAgICAgICAgICBwY3QgPSAxMDA7IG9sZHBjdCA9IDA7 ICAgICAgICAvKiBSZXNldCB0aGVzZSBmb3IgbmV4dCB0aW1lLiAqLworI2VuZGlmIC8qIENPTU1F TlQgKi8KKyAgICAgICAgICBvbGR0eXAgPSAwOyBvbGRydHQgPSAtMUw7IG9sZHRyeSA9IC0xOyBv bGRsZW4gPSAtMTsKKyAgICAgICAgICBvbGR0aW0gPSAtMTsKKyAgICAgICAgICBjZW5kdyA9IDE7 CisgICAgICAgICAgaWYgKHhmcmJlbCkgYmxlZXAoQlBfTk9URSk7ICAgLyogQ2xvc2Ugd2luZG93 LCB0aGVuIGJlZXAuICovCisgICAgICAgICAgZnRfd2luID0gMDsgICAgICAgICAgICAgICAgICAg LyogV2luZG93IGNsb3NlZC4gKi8KKyAgICAgICAgICByZXR1cm47CisgICAgICB9CisgICAgICBj YXNlIFNDUl9FTTogICAgICAgICAgICAgICAgICAgICAgLyogRXJyb3IgcGFja2V0IChmYXRhbCkg Ki8KKyAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1df RVJSLCAobG9uZykgcyApOworICAgICAgICBpZiAoeGZyYmVsKSBibGVlcChCUF9GQUlMKTsKKyNp ZmRlZiBDT01NRU5UCisgICAgICAgIHBjdCA9IG9sZHBjdCA9IDA7CisjZW5kaWYgLyogQ09NTUVO VCAqLworICAgICAgICByZXR1cm47CisKKyAgICAgIGNhc2UgU0NSX1FFOiAgICAgICAgICAgICAg ICAgICAgICAvKiBRdWFudGl0eSBlcXVhbHMgKi8KKyAgICAgIGNhc2UgU0NSX1RVOiAgICAgICAg ICAgICAgICAgICAgICAvKiBVbmRlbGltaXRlZCB0ZXh0ICovCisgICAgICBjYXNlIFNDUl9UTjog ICAgICAgICAgICAgICAgICAgICAgLyogVGV4dCBkZWxpbWl0ZWQgYXQgc3RhcnQgKi8KKyAgICAg IGNhc2UgU0NSX1RaOiAgICAgICAgICAgICAgICAgICAgICAvKiBUZXh0IGRlbGltaXRlZCBhdCBl bmQgKi8KKyAgICAgICAgcmV0dXJuOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiAoaWdub3Jl ZCBpbiBmdWxsc2NyZWVuIGRpc3BsYXkpICovCisKKyAgICAgIGNhc2UgU0NSX1hEOiAgICAgICAg ICAgICAgICAgICAgICAvKiBYLXBhY2tldCBkYXRhICovCisgICAgICAgIHBjdCA9IG9sZHBjdCA9 IDA7CisgICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENX X05BTSwgKGxvbmcpIHMgKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgICBjYXNlIFNDUl9DVzog ICAgICAgICAgICAgICAgICAgICAgLyogQ2xvc2UgV2luZG93ICovCisjaWZkZWYgQ09NTUVOVAor ICAgICAgICBwY3QgPSAxMDA7IG9sZHBjdCA9IDA7ICAgICAgICAgIC8qIFJlc2V0IHRoZXNlIGZv ciBuZXh0IHRpbWUuICovCisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAgICBvbGR0eXAgPSAw OyBvbGRydHQgPSAtMUw7IG9sZHRyeSA9IC0xOyBvbGRsZW4gPSAtMTsKKyAgICAgICAgb2xkdGlt ID0gLTE7CisKKyAgICAgICAgZnRfd2luID0gMDsgICAgICAgICAgICAgICAgICAgICAvKiBGbGFn IHRoYXQgd2luZG93IGlzIGNsb3NlZC4gKi8KKyAgICAgICAgY2VuZHcgPSAxOyByZXR1cm47CisK KyAgICAgIGNhc2UgU0NSX0NEOiAgICAgICAgICAgICAgICAgICAgICAvKiBEaXNwbGF5IGN1cnJl bnQgZGlyZWN0b3J5ICovCisgICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZF UiwgKGxvbmcpIENXX0RJUiwgKGxvbmcpIHMgKTsKKyNpZmRlZiBPUzIKKyAgICAgICAgU2F2ZUNt ZE1vZGUoMCwgMCk7CisjZW5kaWYgLyogT1MyICovCisgICAgICAgIHJldHVybjsKKworICAgICAg ZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEJhZCBjYWxsICovCisgICAgICAg IEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAorICAgICAgICAgICAgICAgICAgICAg ICAobG9uZykgQ1dfRVJSLAorICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgIioqKiBzY3Jl ZW4oKSBjYWxsZWQgd2l0aCBiYWQgZnVuY3Rpb24gY29kZSAqKioiCisgICAgICAgICAgICAgICAg ICAgICAgICk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisjZW5kaWYgLyogS1VJICovCisj ZW5kaWYgLyogTUFDICovCisKKyNlbmRpZiAvKiBOT1hGRVIgKi8KKworI2lmbmRlZiBDS19DVVJQ T1MKKy8qIER1bW1pZXMgZm9yIHdoZW4gY3Vyc29yIGNvbnRyb2wgaXMgbm90IHN1cHBvcnRlZCAq LworaW50Citja19jdXJwb3Mocm93LCBjb2wpIHsKKyAgICByZXR1cm4oLTEpOworfQorCitpbnQK K2NrX2NscygpIHsKKyAgICByZXR1cm4oLTEpOworfQorCitpbnQKK2NrX2NsZW9sKCkgeworICAg IHJldHVybigtMSk7Cit9CisjZW5kaWYgLyogQ0tfQ1VSUE9TICovCisKKyNpZm5kZWYgTk9JS1NE CisjaWZkZWYgSUtTREIKKworc3RydWN0IGlrc2RiZmxkIGRiZmxkW10gPSB7CisgICAvKiBPZmZz ZXQgICAgTGVuZ3RoICAgIFR5cGUgICAqLworICAgIHsgREJfRkxBR1MsIGRCX0ZMQUdTLCBEQlRf SEVYIH0sICAgIC8qICAwIGRiX0ZMQUdTIEZsYWdzICovCisgICAgeyBEQl9BVFlQRSwgZEJfQVRZ UEUsIERCVF9IRVggfSwgICAgLyogIDEgZGJfQVRZUEUgQXV0aCB0eXBlICovCisgICAgeyBEQl9B TU9ERSwgZEJfQU1PREUsIERCVF9IRVggfSwgICAgLyogIDMgZGJfQU1PREUgQXV0aCBtb2RlICov CisgICAgeyBEQl9TVEFURSwgZEJfU1RBVEUsIERCVF9IRVggfSwgICAgLyogIDIgZGJfU1RBVEUg U3RhdGUgKi8KKyAgICB7IERCX01ZUElELCBkQl9NWVBJRCwgREJUX0hFWCB9LCAgICAvKiAgNSBk Yl9NWVBJRCBQSUQgKi8KKyAgICB7IERCX1NBRERSLCBkQl9TQUREUiwgREJUX0hFWCB9LCAgICAv KiAgNCBkYl9TQUREUiBTZXJ2ZXIgYWRkcmVzcyAqLworICAgIHsgREJfQ0FERFIsIGRCX0NBRERS LCBEQlRfSEVYIH0sICAgIC8qICA2IGRiX0NBRERSIENsaWVudCBhZGRyZXNzICovCisgICAgeyBE Ql9TVEFSVCwgZEJfU1RBUlQsIERCVF9EQVQgfSwgICAgLyogIDcgZGJfU1RBUlQgU2Vzc2lvbiBz dGFydCAqLworICAgIHsgREJfTEFTVFUsIGRCX0xBU1RVLCBEQlRfREFUIH0sICAgIC8qICA4IGRi X0xBU1RVIExhc3QgdXBkYXRlICovCisgICAgeyBEQl9VTEVOLCAgZEJfVUxFTiwgIERCVF9IRVgg fSwgICAgLyogIDkgZGJfVUxFTiAgVXNlcm5hbWUgbGVuZ3RoICovCisgICAgeyBEQl9ETEVOLCAg ZEJfRExFTiwgIERCVF9IRVggfSwgICAgLyogMTAgZGJfRExFTiAgRGlyZWN0b3J5IG5hbWUgbGVu Z3RoICovCisgICAgeyBEQl9JTEVOLCAgZEJfSUxFTiwgIERCVF9IRVggfSwgICAgLyogMTEgZGJf SUxFTiAgSW5mbyBsZW5ndGggKi8KKyAgICB7IERCX1BBRDEsICBkQl9QQUQxLCAgREJUX1VORCB9 LCAgICAvKiAxMiBkYl9QQUQxICAoUmVzZXJ2ZWQpICovCisgICAgeyBEQl9VU0VSLCAgZEJfVVNF UiwgIERCVF9TVFIgfSwgICAgLyogMTMgZGJfVVNFUiAgVXNlcm5hbWUgKi8KKyAgICB7IERCX0RJ UiwgICBkQl9ESVIsICAgREJUX1NUUiB9LCAgICAvKiAxNCBkYl9ESVIgICBDdXJyZW50IERpcmVj dG9yeSAqLworICAgIHsgREJfSU5GTywgIGRCX0lORk8sICBEQlRfU1RSIH0gICAgIC8qIDE1IGRi X0lORk8gIFN0YXRlLXNwZWNpZmljIGluZm8gKi8KK307CisKK3N0YXRpYyBjaGFyIGxja25hbVtD S01BWFBBVEgrMV07ICAgICAgICAvKiBMb2NrZmlsZSBwYXRobmFtZSAqLworc3RhdGljIGNoYXIg dG1wbGNrW0NLTUFYUEFUSCsxXTsgICAgICAgIC8qIFRlbXBvcmFyeSBsb2NrZmlsZSBuYW1lICov CisKK3N0YXRpYyBjaGFyICogdXBkbW9kZSA9ICAgICAgICAgICAgICAgICAvKiBVcGRhdGUgbW9k ZSBmb3IgZm9wZW4oKSAqLworI2lmZGVmIE9TMgorICAicitiIgorI2Vsc2UKKyNpZmRlZiBWTVMK KyAgInIrYiIKKyNlbHNlCisgICJyKyIKKyNlbmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBPUzIg Ki8KKyAgOworCisvKiAgRCBCIEkgTiBJIFQgIC0tICBJbml0aWFsaXplIHRoZSBJS1NEIGRhdGFi YXNlLi4uICAqLworCitpbnQKK2RiaW5pdCgpIHsKKyAgICBleHRlcm4gaW50IGRiaW5pdGVkOwor ICAgIGludCB4ID0gMDsKKyAgICBkZWJ1ZyhGMTEwLCJkYmluaXQgZGJkaXIgMSIsZGJkaXIsMCk7 CisgICAgZGVidWcoRjExMCwiZGJpbml0IGRiZmlsZSAxIixkYmZpbGUsMCk7CisgICAgaWYgKGRi aW5pdGVkKQorICAgICAgcmV0dXJuKDApOworI2lmZGVmIE9TMgorICAgIGlmICghZGJkaXIpIHsK KyNpZmRlZiBOVAorICAgICAgICBjaGFyICogcCA9IE5VTEw7CisgICAgICAgIGlmICghaXNXaW45 NSgpKSB7CisgICAgICAgICAgICBwID0gZ2V0ZW52KCJTeXN0ZW1Sb290Iik7CisgICAgICAgIH0g ZWxzZSB7CisgICAgICAgICAgICBwID0gZ2V0ZW52KCJ3aW5ib290ZGlyIik7CisgICAgICAgICAg ICBpZiAoIXApICBwID0gZ2V0ZW52KCJ3aW5kaXIiKTsKKyAgICAgICAgfQorICAgICAgICBpZiAo IXApIHAgPSAiQzovIjsKKyAgICAgICAgZGJkaXIgPSBtYWxsb2Moc3RybGVuKHApKzIpOworICAg ICAgICBzdHJjcHkoZGJkaXIscCk7CQkvKiBzYWZlICovCisgICAgICAgIHAgPSBkYmRpcjsKKyAg ICAgICAgd2hpbGUgKCpwKSB7CisgICAgICAgICAgICBpZiAoKnAgPT0gJ1xcJykKKyAgICAgICAg ICAgICAgKnAgPSAnLyc7CisgICAgICAgICAgICBwKys7CisgICAgICAgIH0KKyAgICAgICAgaWYg KCoocC0xKSAhPSAnLycgKSB7CisgICAgICAgICAgICAqcCsrID0gJy8nOworICAgICAgICAgICAg KnAgPSAnXDAnOworICAgICAgICB9CisjZWxzZSAvKiBOVCAqLworICAgICAgICBtYWtlc3RyKCZk YmRpciwiQzovIik7CisjZW5kaWYgLyogTlQgKi8KKyAgICB9CisjZWxzZSAvKiBPUzIgKi8KKyAg ICBpZiAoIWRiZGlyKQorICAgICAgbWFrZXN0cigmZGJkaXIsSUtfREJBU0VESVIpOworI2VuZGlm IC8qIE9TMiAqLworCisgICAgaWYgKCFkYmZpbGUpIHsKKyAgICAgICAgY2hhciAqIHMgPSAiIjsK KyAgICAgICAgeCA9IHN0cmxlbihkYmRpcik7CisgICAgICAgIGlmIChkYmRpclt4LTFdICE9ICcv JykgeworICAgICAgICAgICAgcyA9ICIvIjsKKyAgICAgICAgICAgIHgrKzsKKyAgICAgICAgfQor ICAgICAgICB4ICs9IChpbnQpc3RybGVuKElLX0RCQVNFRklMKTsKKyAgICAgICAgZGJmaWxlID0g KGNoYXIgKiltYWxsb2MoeCsxKTsKKyAgICAgICAgc3ByaW50ZihkYmZpbGUsIiVzJXMlcyIsZGJk aXIscyxJS19EQkFTRUZJTCk7CisgICAgfQorICAgIGRlYnVnKEYxMTAsImRiaW5pdCBkYmRpciAy IixkYmRpciwwKTsKKyAgICBkZWJ1ZyhGMTEwLCJkYmluaXQgZGJmaWxlIDIiLGRiZmlsZSwwKTsK KyAgICBteXBpZCA9IGdldHBpZCgpOyAgICAgICAgICAgICAgICAgICAvKiBHZXQgbXkgcGlkICov CisgICAgZGVidWcoRjEwMSwiZGJpbml0IG15cGlkIiwiIixteXBpZCk7CisKKyAgICBpZiAoIW15 aGV4aXBbMF0pIHsgICAgICAgICAgICAgICAgICAvKiBTZXQgbXkgaGV4IElQIGFkZHJlc3MgKi8K KyNpZmRlZiBUQ1BTT0NLRVQKKyAgICAgICAgZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbXl4aXBhZGRy OworICAgICAgICBpZiAoZ2V0bG9jYWxpcGFkZHIoKSA+IC0xKSB7CisgICAgICAgICAgICBteWlw ID0gbXl4aXBhZGRyOworICAgICAgICAgICAgc3ByaW50ZihteWhleGlwLCIlMDhseCIsbXlpcCk7 IC8qIChOZWVkcyBmaXhpbmcgZm9yIElQdjYpICovCisgICAgICAgIH0gZWxzZQorI2VuZGlmIC8q IFRDUFNPQ0tFVCAqLworICAgICAgICAgIGNrc3RybmNweShteWhleGlwLCIwMDAwMDAwMCIsOSk7 CisgICAgfQorICAgIGRlYnVnKEYxMTEsImRiaW5pdCBteWlwIixteWhleGlwLG15aXApOworICAg IGlmICghcGVlcmhleGlwWzBdKSB7ICAgICAgICAgICAgICAgIC8qIEdldCBwZWVyJ3MgIGhleCBJ UCBhZGRyZXNzICovCisjaWZkZWYgVENQU09DS0VUCisgICAgICAgIGV4dGVybiB1bnNpZ25lZCBs b25nIHBlZXJ4aXBhZGRyOworICAgICAgICBpZiAoY2tnZXRwZWVyKCkpIHsKKyAgICAgICAgICAg IHBlZXJpcCA9IHBlZXJ4aXBhZGRyOworICAgICAgICAgICAgc3ByaW50ZihwZWVyaGV4aXAsIiUw OGx4IixwZWVyaXApOyAvKiAoTmVlZHMgZml4aW5nIGZvciBJUHY2KSAqLworICAgICAgICAgICAg ZGVidWcoRjExMSwiZGJpbml0IHBlZXJpcCIscGVlcmhleGlwLHBlZXJpcCk7CisgICAgICAgIH0g ZWxzZSB7CisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJkYmluaXQgY2tnZXRwZWVyIGZhaWx1cmUi LCIiLGVycm5vKTsKKyAgICAgICAgICAgIGNrc3RybmNweShwZWVyaGV4aXAsIjAwMDAwMDAwIiw5 KTsKKyAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgY2tzdHJuY3B5KHBlZXJoZXhpcCwiMDAwMDAw MDAiLDkpOworI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLworICAgIH0KKyAgICBkZWJ1ZyhGMTExLCJk YmluaXQgcGVlcmlwIixwZWVyaGV4aXAscGVlcmlwKTsKKyAgICBkZWJ1ZyhGMTAxLCJkYmluaXQg ZGJlbmFibGVkIiwiIixkYmVuYWJsZWQpOworICAgIGlmIChkYmVuYWJsZWQgJiYgaW5zZXJ2ZXIp IHsKKyAgICAgICAgbXlkYnNsb3QgPSBnZXRzbG90KCk7CisgICAgICAgIGRlYnVnKEYxMTEsImRi aW5pdCBnZXRzbG90Iixja2l0b2EoaWtkYm9wZW4pLHgpOworICAgICAgICBpZiAoaWtkYm9wZW4p IGRiaW5pdGVkID0gMTsKKyAgICB9CisgICAgcmV0dXJuKDApOworfQorCisvKiAgVSBQIEQgUyBM IE8gVCAgLS0gIFVwZGF0ZSBzbG90IG4gICovCisKKy8qCisgIE9wZW5zIHRoZSBkYXRhYmFzZSBp ZiBuZWNlc3NhcnksIHNlZWtzIHRvIHNsb3Qgbiwgd3JpdGVzIGN1cnJlbnQgcmVjb3JkCisgIGFu ZCBhZGRzIGN1cnJlbnQgdGltZSB0byBsYXN0LXVwZGF0ZSBmaWVsZC4gIG4gaXMgdGhlIHJlY29y ZCBzZXF1ZW5jZSBudW1iZXIKKyAgKDAsIDEsIDIsIC4uLiksIG5vdCB0aGUgc2VlayBwb2ludGVy LiAgIFJldHVybnMgLTEgb24gZmFpbHVyZSwgMCBvbiBzdWNjZXNzLgorKi8KK2ludAordXBkc2xv dChuKSBpbnQgbjsgeyAgICAgICAgICAgICAgICAgICAgIC8qIFVwZGF0ZSBvdXIgc2xvdCAqLwor ICAgIGludCByYyA9IDA7CisgICAgQ0tfT0ZGX1QgcG9zaXRpb247CisKKyAgICBkZWJ1ZyhGMTEx LCJ1cGRzbG90IiwiaWtkYm9wZW4iLGlrZGJvcGVuKTsKKyAgICBpZiAoIWlrZGJvcGVuKSAgICAg ICAgICAgICAgICAgICAgICAvKiBOb3QgaWYgbm90IG9rICovCisgICAgICByZXR1cm4oMCk7Cisg ICAgaWYgKCFkYmZwKSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogT3BlbiBkYXRhYmFzZSBp ZiBub3Qgb3BlbiAqLworICAgICAgICBkYmZwID0gZm9wZW4oZGJmaWxlLHVwZG1vZGUpOyAgIC8q IEluIHVwZGF0ZSBuby10cnVuY2F0ZSBtb2RlICovCisgICAgICAgIGlmICghZGJmcCkgeworICAg ICAgICAgICAgZGVidWcoRjExMCwidXBkc2xvdCBmb3BlbiBmYWlsZWQiLGRiZmlsZSwwKTsKKyAg ICAgICAgICAgIGlrZGJvcGVuID0gMDsKKyAgICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAg IH0KKyAgICB9CisgICAgLyogZGVidWcoRjExMSwidXBkc2xvdCBkYmZpbGUiLGRiZmlsZSxkYmZw KTsgKi8KKyAgICBwb3NpdGlvbiA9IG4gKiBEQl9SRUNMOworICAgIGlmIChDS0ZTRUVLKGRiZnAs cG9zaXRpb24sMCkgPCAwKSB7CS8qIFNlZWsgdG8gZGVzaXJlZCBzbG90ICovCisgICAgICAgIGRl YnVnKEYxMTEsInVwZHNsb3QgZnNlZWsgZmFpbGVkIixkYmZpbGUsbXlkYnNlZWspOworICAgICAg ICBpa2Rib3BlbiA9IDA7CisgICAgICAgIHJjID0gLTE7CisgICAgfSBlbHNlIHsKKyAgICAgICAg LyogVXBkYXRlIHRoZSB1cGRhdGUgdGltZSAqLworICAgICAgICBzdHJuY3B5KCZkYnJlY1tkYmZs ZFtkYl9MQVNUVV0ub2ZmXSwKKyAgICAgICAgICAgICAgICBja2RhdGUoKSwKKyAgICAgICAgICAg ICAgICBkYmZsZFtkYl9MQVNUVV0ubGVuCisgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgaWYg KGZ3cml0ZShkYnJlYywxLERCX1JFQ0wsZGJmcCkgPCBEQl9SRUNMKSB7IC8qIFdyaXRlIHRoZSBy ZWNvcmQgKi8KKyAgICAgICAgICAgIGRlYnVnKEYxMTAsInVwZHNsb3QgZndyaXRlIGZhaWxlZCIs ZGJmaWxlLDApOworICAgICAgICAgICAgaWtkYm9wZW4gPSAwOworICAgICAgICAgICAgcmMgPSAt MTsKKyAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBGbHVzaCB0aGUg d3JpdGUgKi8KKyAgICAgICAgICAgIGZmbHVzaChkYmZwKTsKKyAgICAgICAgfQorICAgIH0KKyAg ICByZXR1cm4ocmMpOworfQorCisvKiAgSSBOIEkgVCBTIEwgTyBUIC0tICBJbml0aWFsaXplIHNs b3QgbiB3aXRoIG15IGluZm8gICovCisKK2ludAoraW5pdHNsb3QobikgaW50IG47IHsgICAgICAg ICAgICAgICAgICAgIC8qIEluaXRpYWxpemUgc2xvdCAqLworICAgIGludCBrOworI2lmZGVmIFRD UFNPQ0tFVAorICAgIGV4dGVybiB1bnNpZ25lZCBsb25nIHBlZXJ4aXBhZGRyOworI2VuZGlmIC8q IFRDUFNPQ0tFVCAqLworCisgICAgZGVidWcoRjEwMSwiaW5pdHNsb3QiLCIiLG4pOworCisjaWZk ZWYgVVNFX01FTUNQWQorICAgIG1lbXNldChkYnJlYywzMixEQl9SRUNMKTsKKyNlbHNlCisgICAg Zm9yIChrID0gMDsgayA8IERCX1JFQ0w7IGsrKykKKyAgICAgIGRicmVjW2tdID0gJ1wwNDAnOwor I2VuZGlmIC8qIFVTRV9NRU1DUFkgKi8KKworICAgIG15ZmxhZ3MgPSBEQkZfSU5VU0U7ICAgICAg ICAgICAgICAgIC8qIFNldCBpbi11c2UgZmxhZyAqLworICAgIG15c3RhdGUgPSBXX05PVEhJTkc7 CisgICAgbXlhdHlwZSA9IDBMOworICAgIG15YW1vZGUgPSAwTDsKKworICAgIGsgPSBkYmZsZFtk Yl9GTEFHU10ubGVuOyAgICAgICAgICAgIC8qIExlbmd0aCBvZiBmbGFncyBmaWVsZCAqLworICAg IHN0cm5jcHkoJmRicmVjW2RiZmxkW2RiX0ZMQUdTXS5vZmZdLHVsb25ndG9oZXgobXlmbGFncyxr KSxrKTsKKworICAgIGsgPSBkYmZsZFtkYl9BVFlQRV0ubGVuOworICAgIHN0cm5jcHkoJmRicmVj W2RiZmxkW2RiX0FUWVBFXS5vZmZdLHVsb25ndG9oZXgobXlhdHlwZSxrKSxrKTsKKworICAgIGsg PSBkYmZsZFtkYl9BTU9ERV0ubGVuOworICAgIHN0cm5jcHkoJmRicmVjW2RiZmxkW2RiX0FNT0RF XS5vZmZdLHVsb25ndG9oZXgobXlhbW9kZSxrKSxrKTsKKworICAgIGsgPSBkYmZsZFtkYl9TVEFU RV0ubGVuOworICAgIHN0cm5jcHkoJmRicmVjW2RiZmxkW2RiX1NUQVRFXS5vZmZdLHVsb25ndG9o ZXgobXlzdGF0ZSxrKSxrKTsKKworICAgIGsgPSBkYmZsZFtkYl9TQUREUl0ubGVuOworICAgIHN0 cm5jcHkoJmRicmVjW2RiZmxkW2RiX1NBRERSXS5vZmZdLHVsb25ndG9oZXgobXlpcCxrKSxrKTsK KworI2lmZGVmIFRDUFNPQ0tFVAorICAgIGNrZ2V0cGVlcigpOworICAgIGsgPSBkYmZsZFtkYl9D QUREUl0ubGVuOworICAgIHN0cm5jcHkoJmRicmVjW2RiZmxkW2RiX0NBRERSXS5vZmZdLHVsb25n dG9oZXgocGVlcnhpcGFkZHIsayksayk7CisjZWxzZQorICAgIGsgPSBkYmZsZFtkYl9DQUREUl0u bGVuOworICAgIHN0cm5jcHkoJmRicmVjW2RiZmxkW2RiX0NBRERSXS5vZmZdLHVsb25ndG9oZXgo MEwsayksayk7CisjZW5kaWYgLyogVENQU09DS0VUICovCisKKyAgICBrID0gZGJmbGRbZGJfTVlQ SURdLmxlbjsKKyAgICBzdHJuY3B5KCZkYnJlY1tkYmZsZFtkYl9NWVBJRF0ub2ZmXSx1bG9uZ3Rv aGV4KG15cGlkLGspLGspOworCisgICAgayA9IGRiZmxkW2RiX1NUQVJUXS5sZW47CisgICAgc3Ry bmNweSgmZGJyZWNbZGJmbGRbZGJfU1RBUlRdLm9mZl0sY2tkYXRlKCksayk7CisKKyAgICBrID0g ZGJmbGRbZGJfVUxFTl0ubGVuOworICAgIHN0cm5jcHkoJmRicmVjW2RiZmxkW2RiX1VMRU5dLm9m Zl0sIjAwMDAiLDQpOworCisgICAgayA9IGRiZmxkW2RiX0RMRU5dLmxlbjsKKyAgICBzdHJuY3B5 KCZkYnJlY1tkYmZsZFtkYl9ETEVOXS5vZmZdLCIwMDAwIiw0KTsKKworICAgIGsgPSBkYmZsZFtk Yl9JTEVOXS5sZW47CisgICAgc3RybmNweSgmZGJyZWNbZGJmbGRbZGJfSUxFTl0ub2ZmXSwiMDAw MCIsNCk7CisKKyAgICBzdHJuY3B5KCZkYnJlY1tkYmZsZFtkYl9JTkZPXS5vZmZdLCJJTklUIiw0 KTsKKyAgICByZXR1cm4odXBkc2xvdChuKSk7Cit9CisKK2ludAorc2xvdHN0YXRlKHgsczEsczIs czMpIGludCB4OyBjaGFyICpzMSwgKnMyLCAqczM7IHsKKyAgICBpbnQgaywgbDEsIGwyLCBsMywg ejsKKyAgICBteXN0YXRlID0geDsKKyAgICBkZWJ1ZyhGMTAxLCJzbG90c3RhdGUgaWtkYm9wZW4i LCIiLGlrZGJvcGVuKTsKKyAgICBpZiAoIWlrZGJvcGVuKQorICAgICAgcmV0dXJuKC0xKTsKKyAg ICBpZiAoIXMxKSBzMSA9ICIiOworICAgIGwxID0gc3RybGVuKHMxKTsKKyAgICBpZiAoIXMyKSBz MiA9ICIiOworICAgIGwyID0gc3RybGVuKHMyKTsKKyAgICBpZiAoIXMzKSBzMyA9ICIiOworICAg IGwzID0gc3RybGVuKHMzKTsKKyAgICBzdHJuY3B5KCZkYnJlY1tEQl9TVEFURV0sdWxvbmd0b2hl eChteXN0YXRlLDQpLDQpOworICAgIGsgPSBkYmZsZFtkYl9JTEVOXS5sZW47CisgICAgeiA9IGwx ICsgbDIgKyBsMyArIDI7CisgICAgaWYgKHogPiBkQl9JTkZPKQorICAgICAgeiA9IGRCX0lORk87 CisgICAgc3RybmNweSgmZGJyZWNbREJfSUxFTl0sdWxvbmd0b2hleCgodW5zaWduZWQgbG9uZyl6 LGspLGspOworICAgIGsgPSBkYmZsZFtkYl9JTkZPXS5sZW47CisgICAgeiA9IGRiZmxkW2RiX0lO Rk9dLm9mZjsKKyAgICBpZiAobDEgPD0gaykgeworICAgICAgICBsc2V0KCZkYnJlY1t6XSxzMSxs MSsxLDMyKTsKKyAgICAgICAgeiArPSBsMSsxOworICAgICAgICBrIC09IGwxKzE7CisgICAgICAg IGlmIChsMiA8PSBrKSB7CisgICAgICAgICAgICBsc2V0KCZkYnJlY1t6XSxzMixsMisxLDMyKTsK KyAgICAgICAgICAgIHogKz0gbDIrMTsKKyAgICAgICAgICAgIGsgLT0gbDIrMTsKKyAgICAgICAg ICAgIGlmIChsMyA8PSBrKQorICAgICAgICAgICAgICBsc2V0KCZkYnJlY1t6XSxzMyxrLDMyKTsK KyAgICAgICAgfQorICAgIH0KKyNpZmRlZiBERUJVRworICAgIGlmIChkZWJsb2cpIHsKKyAgICAg ICAgY2hhciBidWZbMTI4XTsKKyAgICAgICAgaW50IGk7CisgICAgICAgIHN0cm5jcHkoYnVmLCZk YnJlY1tEQl9JTkZPXSwxMjcpOworICAgICAgICBidWZbMTI3XSA9IE5VTDsKKyAgICAgICAgZm9y IChpID0gMTI2OyBpID4gMCAmJiBidWZbaV0gPT0gMzI7IGktLSkgYnVmW2ldID0gMDsKKyAgICAg ICAgZGVidWcoRjExMSwic2xvdHN0YXRlIixidWYsbXlzdGF0ZSk7CisgICAgfQorI2VuZGlmIC8q IERFQlVHICovCisgICAgeiA9IHVwZHNsb3QobXlkYnNsb3QpOworICAgIGRlYnVnKEYxMDEsInNs b3RzdGF0ZSB1cGRzbG90IiwiIix6KTsKKyAgICByZXR1cm4oeik7Cit9CisKK2ludAorc2xvdGRp cihzMSxzMikgY2hhciAqIHMxLCAqIHMyOyB7ICAgICAgIC8qIFVwZGF0ZSBjdXJyZW50IGRpcmVj dG9yeSAqLworICAgIGludCBrLCBsZW4xLCBsZW4yOworICAgIGlmICghaWtkYm9wZW4pCisgICAg ICByZXR1cm4oLTEpOworICAgIGlmICghczEpIHMxID0gIiI7CisgICAgaWYgKCFzMikgczIgPSAi IjsKKyAgICBsZW4xID0gc3RybGVuKHMxKTsKKyAgICBsZW4yID0gc3RybGVuKHMyKTsKKyAgICBr ID0gZGJmbGRbZGJfRExFTl0ubGVuOworICAgIHN0cm5jcHkoJmRicmVjW0RCX0RMRU5dLHVsb25n dG9oZXgoKHVuc2lnbmVkIGxvbmcpKGxlbjErbGVuMiksayksayk7CisgICAgayA9IGRiZmxkW2Ri X0RJUl0ubGVuOworICAgIGlmIChsZW4xID4gMCkgeworICAgICAgICBsc2V0KCZkYnJlY1tkYmZs ZFtkYl9ESVJdLm9mZl0sczEsbGVuMSwzMik7CisgICAgICAgIGxzZXQoJmRicmVjW2RiZmxkW2Ri X0RJUl0ub2ZmK2xlbjFdLHMyLGstbGVuMSwzMik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbHNl dCgmZGJyZWNbZGJmbGRbZGJfRElSXS5vZmZdLHMyLGssMzIpOworICAgIH0KKyAgICByZXR1cm4o dXBkc2xvdChteWRic2xvdCkpOworfQorCisvKiAgRiBSIEUgRSBTIEwgTyBUICAtLSAgRnJlZSBz bG90IG4gICovCisKK2ludAorZnJlZXNsb3QobikgaW50IG47IHsKKyAgICBpbnQgazsKKyAgICBp ZiAoIWlrZGJvcGVuKQorICAgICAgcmV0dXJuKDApOworICAgIGRiZmxhZ3MgPSAwTDsKKyAgICBp ZiAobiA9PSBteWRic2xvdCkgeworICAgICAgICBkYmZsYWdzID0gbXlmbGFncyAmIH5EQkZfSU5V U0U7CisgICAgICAgIGRiZmxhZ3MgJj0gfkRCRl9MT0dHRUQ7CisgICAgfQorICAgIGsgPSBkYmZs ZFtkYl9GTEFHU10ubGVuOworICAgIHN0cm5jcHkoJmRicmVjW2RiZmxkW2RiX0ZMQUdTXS5vZmZd LHVsb25ndG9oZXgoZGJmbGFncyxrKSxrKTsKKyAgICByZXR1cm4odXBkc2xvdChuKSk7Cit9CisK Ky8qICBHIEUgVCBTIEwgTyBUICAtLSAgRmluZCBhIGZyZWUgZGF0YWJhc2Ugc2xvdDsgcmV0dXJu cyBzbG90IG51bWJlciAgKi8KKworI2lmZGVmIFVOSVgKKyNpbmNsdWRlIDxmY250bC5oPgkJCS8q IEZvciBjcmVhdCgpICovCisjZW5kaWYJLyogVU5JWCAqLworCitpbnQKK2dldHNsb3QoKSB7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGaW5kIGEgZnJlZSBzbG90IGZvciB1cyAqLwor ICAgIEZJTEUgKiByZnAgPSBOVUxMOyAgICAgICAgICAgICAgICAgIC8qIFJldHVybnMgc2xvdCBu dW1iZXIgKDAsIDEsIC4uLikgKi8KKyAgICBjaGFyIGlkc3RyaW5nWzY0XTsgICAgICAgICAgICAg ICAgICAvKiBQSUQgc3RyaW5nIGJ1ZmZlciAoZGVjaW1hbCkgKi8KKyAgICBjaGFyIHBpZGJ1Zls2 NF0sICogczsKKyAgICBpbnQgaiwgaywgbiwgeCwgcmMgPSAtMTsKKyAgICBpbnQgbG9ja2ZkLCB0 cmllcywgaGF2ZXNsb3QgPSAwOworICAgIGxvbmcgbG9ja3BpZDsKKyAgICBDS19PRkZfVCBpOwor ICAgIC8qIGNoYXIgaXBidWZbMTddOyAqLworCisgICAgaWYgKCFteWhleGlwWzBdKSAgICAgICAg ICAgICAgICAgICAgLyogU2V0IG15IGhleCBJUCBhZGRyZXNzIGlmIG5vdCBzZXQgKi8KKyAgICAg IGNrc3RybmNweSgoY2hhciAqKW15aGV4aXAsIjdGMDAwMDAxIiwzMyk7CisgICAgc3ByaW50Zihp ZHN0cmluZywiJTA4bHg6JTAxMGxkXG4iLG15aXAsbXlwaWQpOworICAgIGRlYnVnKEYxMTAsImdl dHNsb3QgaWRzdHJpbmciLCBpZHN0cmluZywgMCk7CisKKyAgICAvKiBNYWtlIHRlbXBvcmFyeSBs b2NrZmlsZSBuYW1lIElQLlBJRCAoaGV4LmhleCkgKi8KKyAgICAvKiBUaGlzIHNob3VsZCBmaXQg aW4gMTQgY2hhcnMgLS0gaHVnZSBQSURzIGFyZSB1c3VhbGx5IG5vdCBwb3NzaWJsZSAqLworICAg IC8qIG9uIDE0LWNoYXIgZmlsZW5hbWUgc3lzdGVtcy4gKi8KKworICAgIHNwcmludGYodG1wbGNr LCIlcyUwOGx4LiVseCIsZGJkaXIsbXlpcCxteXBpZCk7CisgICAgZGVidWcoRjExMCwiZ2V0c2xv dCB0ZW1wZmlsZSIsdG1wbGNrLDApOworCisgICAgLyogTWFrZSBhIHRlbXBvcmFyeSBmaWxlICov CisKKyAgICBsb2NrZmQgPSBjcmVhdCh0bXBsY2ssIDA2MDApOwkvKiBCVVQgVEhJUyBJU04nVCBQ T1JUQUJMRSAqLworICAgIGlmIChsb2NrZmQgPCAwKSB7CisgICAgICAgIGRlYnVnKEYxMTEsImdl dHNsb2NrIHRlbXAgbG9ja2ZpbGUgY3JlYXRlIGZhaWx1cmUiLCB0bXBsY2ssIGVycm5vKTsKKyAg ICAgICAgcmV0dXJuKC0xKTsKKyAgICB9CisgICAgLyogV3JpdGUgbXkgKGRlY2ltYWwpIFBJRCBp bnRvIHRoZSB0ZW1wIGZpbGUgKi8KKworICAgIHdyaXRlKGxvY2tmZCxpZHN0cmluZywoaW50KXN0 cmxlbihpZHN0cmluZykpOworICAgIGlmIChjbG9zZShsb2NrZmQpIDwgMCkgeyAgICAgICAgICAg IC8qIENsb3NlIGxvY2tmaWxlICovCisgICAgICAgIGRlYnVnKEYxMDEsImdldHNsb3QgZXJyb3Ig Y2xvc2luZyB0ZW1wIGxvY2tmaWxlIiwgIiIsIGVycm5vKTsKKyAgICAgICAgcmV0dXJuKC0xKTsK KyAgICB9CisgICAgc3ByaW50ZihsY2tuYW0sIiVzJXMiLGRiZGlyLElLX0xPQ0tGSUxFKTsgLyog QnVpbGQgbG9ja2ZpbGUgbmFtZSAqLworICAgIGRlYnVnKEYxMTAsImdldHNsb3QgbG9ja2ZpbGUi LGxja25hbSwwKTsKKworICAgIHJmcCA9IGZvcGVuKGxja25hbSwiciIpOyAgICAgICAgICAgIC8q IFNlZSBpZiBsb2NrZmlsZSBleGlzdHMgKi8KKyAgICBpZiAocmZwKSB7ICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBJZiBzby4uLiAqLworICAgICAgICByc2V0KHBpZGJ1ZiwiIiw2NCwwKTsK KyAgICAgICAgeCA9IGZyZWFkKHBpZGJ1ZiwxLDYzLHJmcCk7ICAgICAvKiBSZWFkIElEIHN0cmlu ZyBmcm9tIGl0ICovCisgICAgICAgIGZjbG9zZShyZnApOyAgICAgICAgICAgICAgICAgICAgLyog YW5kIGNsb3NlIGl0IHF1aWNrbHkgKi8KKyAgICAgICAgZGVidWcoRjExMCwiZ2V0c2xvdCBsb2Nr IGV4aXN0cyIscGlkYnVmLDApOworICAgICAgICBpZiAoeCA+IDApIHsgICAgICAgICAgICAgICAg ICAgIC8qIElmIHdlIGhhdmUgYSBQSUQsIGNoZWNrIGl0ICovCisgICAgICAgICAgICBjaGFyICog cyA9IHBpZGJ1ZjsKKyAgICAgICAgICAgIHdoaWxlICgqcykgeworICAgICAgICAgICAgICAgIGlm IChpc2xvd2VyKCpzKSkgKnMgPSB0b3VwcGVyKCpzKTsKKyAgICAgICAgICAgICAgICBpZiAoKnMg PT0gJzonKSB7CisgICAgICAgICAgICAgICAgICAgICpzID0gTlVMOworICAgICAgICAgICAgICAg ICAgICBkZWJ1ZyhGMTEwLCJnZXRzbG90IGxvY2sgSVAiLHBpZGJ1ZiwwKTsKKyAgICAgICAgICAg ICAgICAgICAgZGVidWcoRjExMCwiZ3Rlc2xvdCBteSAgIElQIixteWhleGlwLDApOworICAgICAg ICAgICAgICAgICAgICBpZiAoIXN0cmNtcChwaWRidWYsbXloZXhpcCkpIHsgLyogU2FtZSBJUCBh ZGRyZXNzPyAqLworICAgICAgICAgICAgICAgICAgICAgICAgbG9ja3BpZCA9IGF0b2wocysxKTsg LyogWWVzLCBub3cgZ2V0IFBJRCAqLworICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEw MSwiZ2V0c2xvdCBsb2NrcGlkIiwiIixsb2NrcGlkKTsKKworICAgICAgICAgICAgICAgICAgICAg ICAgLyogQ2hlY2sgaWYgUElEIGxvY2twaWQgb24gdGhpcyBjb21wdXRlciBpcyBhbGl2ZSAqLwor ICAgICAgICAgICAgICAgICAgICAgICAgeCA9IHpjaGtwaWQobG9ja3BpZCk7CisgICAgICAgICAg ICAgICAgICAgICAgICBpZiAoIXgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1 ZyhGMTAwLCJnZXRzbG90IFBJRCBzdGFsZSxyZW1vdmluZyBsb2NrIiwiIiwwKTsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICB1bmxpbmsobGNrbmFtKTsKKyAgICAgICAgICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHMrKzsKKyAgICAgICAgICAg IH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMTEsImdldHNsb3QgbG9j a2ZpbGUgb3BlbiBmYWlsdXJlIixsY2tuYW0sZXJybm8pOworICAgICAgICB9CisgICAgfQorICAg IC8qIFRyeSBJS19MQ0tUUklFUyAoMTYpIHRpbWVzIHRvIHJlbmFtZSB0ZW1wIGZpbGUgdG8gbG9j a2ZpbGUgKi8KKworICAgIGZvciAodHJpZXMgPSBJS19MQ0tUUklFUzsgdHJpZXMgPiAwOyB0cmll cy0tKSB7CisgICAgICAgIGlmICh6cmVuYW1lKHRtcGxjayxsY2tuYW0pID09IDApCisgICAgICAg ICAgYnJlYWs7CisgICAgICAgIGRlYnVnKEYxMDEsImdldHNsb3QgZGF0YWJhc2UgbG9ja2VkIGJ5 IHBpZCIsICIiLCBkYnBpZCk7CisgICAgICAgIHNsZWVwKElLX0xDS1NMRUVQKTsKKyAgICB9Cisg ICAgaWYgKHRyaWVzIDwgMSkgeyAgICAgICAgICAgICAgICAgICAgLyogQ291bGRuJ3QgKi8KKyAg ICAgICAgZGVidWcoRjExMCwiZ2V0c2xvdCBjcmVhdGUgbG9jayBmYWlsdXJlIixsY2tuYW0sMCk7 CisgICAgICAgIHJldHVybigtMSk7CisgICAgfQorICAgIC8qIEhhdmUgbG9jaywgb3BlbiBkYXRh YmFzZSAqLworCisgICAgZGVidWcoRjExMCwiZ2V0c2xvdCBoYXMgbG9jayIsbGNrbmFtLDApOyAv KiBIYXZlIGxvY2sgKi8KKworICAgIGlmICghZGJmaWxlKQorICAgICAgcmV0dXJuKC0xKTsKKwor ICAgIC8qIElmIGRhdGFiYXNlIGRvZXNuJ3QgZXhpc3QsIGNyZWF0ZSBpdC4gKi8KKworICAgIGRl YnVnKEYxMTAsImdldHNsb3QgZGJmaWxlIixkYmZpbGUsMCk7CisgICAgaWYgKHpjaGtpKGRiZmls ZSkgPCAwKSB7CisgICAgICAgIGRlYnVnKEYxMTAsImdldHNsb3QgY3JlYXRpbmcgbmV3IGRhdGFi YXNlIixkYmZpbGUsMCk7CisgICAgICAgIHggPSBjcmVhdChkYmZpbGUsMDY2MCk7CisgICAgICAg IGlmICh4IDwgMCkgeworICAgICAgICAgICAgZGVidWcoRjExMSwiZ2V0c2xvdCBjcmVhdCgpIGZh aWxlZCIsIGRiZmlsZSwgZXJybm8pOworICAgICAgICAgICAgZ290byB4c2xvdDsKKyAgICAgICAg fQorICAgICAgICBjbG9zZSh4KTsKKyAgICB9CisgICAgZGJmcCA9IGZvcGVuKGRiZmlsZSx1cGRt b2RlKTsgICAgICAgLyogT3BlbiBpdCBpbiB1cGRhdGUgbW9kZSAqLworICAgIGlmICghZGJmcCkg eworICAgICAgICBkZWJ1ZyhGMTExLCJnZXRzbG90IGZvcGVuIGZhaWxlZCIsZGJmaWxlLGVycm5v KTsKKyAgICAgICAgZ290byB4c2xvdDsKKyAgICB9CisgICAgLyogTm93IGZpbmQgYSBmcmVlIChv ciBuZXcpIHNsb3QuLi4gKi8KKworICAgIGRibGFzdHVzZWQgPSAwTDsgICAgICAgICAgICAgICAg ICAgIC8qIFNlZWsgcG9pbnRlciB0byBsYXN0IHJlY29yZCBpbnVzZSAqLworICAgIG15ZGJzZWVr ID0gMEw7ICAgICAgICAgICAgICAgICAgICAgIC8qIFNlZWsgcG9pbnRlciBmb3IgbXkgcmVjb3Jk ICovCisKKyAgICAvKiBRdWlja2x5IHJlYWQgdGhlIHdob2xlIGRhdGFiYXNlOyBuID0gcmVjb3Jk IGNvdW50ZXIsIGkgPSBzZWVrIHBvaW50ZXIgKi8KKworICAgIGZvciAobiA9IDAsIGkgPSAwOyAh ZmVvZihkYmZwKTsgaSArPSBEQl9SRUNMLCBuKyspIHsKKyAgICAgICAgeCA9IGZyZWFkKGRicmVj LDEsREJfUkVDTCxkYmZwKTsgLyogUmVhZCBhIHJlY29yZCAqLworICAgICAgICBpZiAoeCA8IDEp ICAgICAgICAgICAgICAgICAgICAgIC8qIEVPRiBub3QgY2F1Z2h0IGJ5IGZlb2YoKSAqLworICAg ICAgICAgIGJyZWFrOworI2lmbmRlZiBOT0ZUUlVOQ0FURQorICAgICAgICBpZiAoeCAhPSBEQl9S RUNMKSB7ICAgICAgICAgICAgIC8qIFdhdGNoIG91dCBmb3IgdHJhaWxpbmcganVuayAqLworICAg ICAgICAgICAgZGVidWcoRjEwMSwiZ2V0c2xvdCBiYWQgc2l6ZSIsIiIseCk7ICAvKiAoU2hvdWxk bid0IGhhcHBlbi4uLikgKi8KKyNpZmRlZiBDT0hFUkVOVAorICAgICAgICAgICAgY2hzaXplKGZp bGVubyhkYmZwKSxpKTsKKyNlbHNlCisgICAgICAgICAgICBmdHJ1bmNhdGUoZmlsZW5vKGRiZnAp LChDS19PRkZfVClpKTsKKyNlbmRpZiAvKiBDT0hFUkVOVCAqLworICAgICAgICAgICAgeCA9IDA7 CisgICAgICAgICAgICBDS0ZTRUVLKGRiZnAsaSwwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg ICAgICB9CisjZW5kaWYgLyogTk9GVFJVTkNBVEUgKi8KKyAgICAgICAgZGVidWcoRjEwMSwiZ2V0 c2xvdCByZWNvcmQiLCIiLG4pOworICAgICAgICBrID0gZGJmbGRbZGJfRkxBR1NdLm9mZjsKKyAg ICAgICAgaiA9IGRiZmxkW2RiX0ZMQUdTXS5sZW47CisgICAgICAgIGRiZmxhZ3MgPSBoZXh0b3Vs b25nKCZkYnJlY1trXSxqKTsKKyAgICAgICAgZGVidWcoRjAwMSwiZ2V0c2xvdCBkYmZsYWdzIiwi IixkYmZsYWdzKTsKKyAgICAgICAgayA9IGRiZmxkW2RiX01ZUElEXS5vZmY7CisgICAgICAgIGog PSBkYmZsZFtkYl9NWVBJRF0ubGVuOworICAgICAgICBkYnBpZCAgPSBoZXh0b3Vsb25nKCZkYnJl Y1trXSxqKTsKKyAgICAgICAgZGVidWcoRjAwMSwiZ2V0c2xvdCBkYnBpZCIsIiIsZGJwaWQpOwor ICAgICAgICBrID0gZGJmbGRbZGJfU0FERFJdLm9mZjsKKyAgICAgICAgaiA9IGRiZmxkW2RiX1NB RERSXS5sZW47CisgICAgICAgIGRiaXAgPSBoZXh0b3Vsb25nKCZkYnJlY1trXSxqKTsKKyAgICAg ICAgZGVidWcoRjAwMSwiZ2V0c2xvdCBkYmlwIiwiIixkYmlwKTsKKworICAgICAgICBpZiAoZGJm bGFncyAmIERCRl9JTlVTRSkgeyAgICAgIC8qIFJlbWVtYmVyIGxhc3Qgc2xvdCBpbiB1c2UgKi8K KyAgICAgICAgICAgIHggPSAwOyAgICAgICAgICAgICAgICAgICAgICAvKiBNYWtlIHN1cmUgaXQn cyBSRUFMTFkgaW4gdXNlICovCisgICAgICAgICAgICBpZiAoZGJwaWQgPT0gbXlwaWQgJiYgZGJp cCA9PSBteWlwKSB7IC8qIENoZWNrIGZvciBQSUQgPT0gbXkgUElEICovCisgICAgICAgICAgICAg ICAgeCA9IDE7CisgICAgICAgICAgICAgICAgZGVidWcoRjEwMSwiZ2V0c2xvdCByZWNvcmQgcGlk IiwiIixkYnBpZCk7CisgICAgICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgLyog T3IgZm9yIHN0YWxlIFBJRCAqLworICAgICAgICAgICAgICAgIHggPSB6Y2hrcGlkKGRicGlkKTsK KyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJnZXRzbG90IHpjaGtwaWQoKSIsIiIseCk7Cisg ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIXgpIHsgICAgICAgICAgICAgICAgICAgLyog Qm9ndXMgcmVjb3JkICovCisgICAgICAgICAgICAgICAgeCA9IGZyZWVzbG90KG4pOworICAgICAg ICAgICAgICAgIGRlYnVnKEYxMDEsImdldHNsb3Qgc3RhbGUgcmVjb3JkIHBpZDogZnJlZXNsb3Qo KSIsIiIseCk7CisgICAgICAgICAgICAgICAgaWYgKHggPiAtMSAmJiAhaGF2ZXNsb3QpCisgICAg ICAgICAgICAgICAgICBkYmZsYWdzID0gMDsKKyAgICAgICAgICAgIH0gZWxzZSB7ICAgICAgICAg ICAgICAgICAgICAvKiBJdCdzIHJlYWxseSBpbiB1c2UgKi8KKyAgICAgICAgICAgICAgICBkYmxh c3R1c2VkID0gaTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoIWhhdmVz bG90KSB7ICAgICAgICAgICAgICAgIC8qIElmIEkgZG9uJ3QgaGF2ZSBhIHNsb3QgeWV0ICovCisg ICAgICAgICAgICBpZiAoIShkYmZsYWdzICYgREJGX0lOVVNFKSkgeyAgICAgICAvKiBDbGFpbSB0 aGlzIG9uZSAqLworICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsImdldHNsb3QgZnJlZSBzbG90 IiwgIiIsIG4pOworICAgICAgICAgICAgICAgIGhhdmVzbG90ID0gMTsKKyAgICAgICAgICAgICAg ICBteWRic2VlayA9IGk7CisgICAgICAgICAgICAgICAgbXlkYnNsb3QgPSBuOyAgICAgICAgICAg LyogQnV0IGtlZXAgZ29pbmcuLi4gKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K KyAgICAvKiBDb21lIGhlcmUgd2l0aCBpID09IHNlZWsgcG9pbnRlciB0byBmaXJzdCByZWNvcmQg YWZ0ZXIgZW9mICovCisKKyAgICBpZiAoIWhhdmVzbG90KSB7ICAgICAgICAgICAgICAgICAgICAv KiBGb3VuZCBubyBmcmVlIHNsb3Qgc28gYWRkIHRvIGVuZCAqLworICAgICAgICBkZWJ1ZyhGMTAx LCJnZXRzbG90IG5ldyBzbG90IiwiIixuKTsKKyAgICAgICAgaGF2ZXNsb3QgPSAxOworICAgICAg ICBteWRic2VlayA9IGk7CisgICAgICAgIG15ZGJzbG90ID0gbjsKKyAgICB9CisgICAgaWtkYm9w ZW4gPSAxOyAgICAgICAgICAgICAgICAgICAgICAgLyogT0sgdG8gbWFrZSBkYXRhYmFzZSBlbnRy aWVzICovCisgICAgZGVidWcoRjEwMSwiZ2V0c2xvdCByZWNvcmRzIiwiIixuKTsKKyAgICBkZWJ1 ZyhGMTAxLCJnZXRzbG90IGRibGFzdHVzZWQiLCIiLGRibGFzdHVzZWQpOworICAgIGRlYnVnKEYx MDEsImdldHNsb3QgaSIsIiIsaSk7CisKKyAgICAvKiBUcmltIHN0YWxlIHJlY29yZHMgZnJvbSBl bmQgKi8KKworI2lmbmRlZiBOT0ZUUlVOQ0FURQorICAgIGlmIChpID4gZGJsYXN0dXNlZCtEQl9S RUNMKSB7CisgICAgICAgIGRlYnVnKEYxMDEsImdldHNsb3QgdHJ1bmNhdGluZyBhdCIsIiIsZGJs YXN0dXNlZCtEQl9SRUNMKTsKKyNpZmRlZiBDT0hFUkVOVAorICAgICAgICB4ID0gY2hzaXplKGZp bGVubyhkYmZwKSxkYmxhc3R1c2VkK0RCX1JFQ0wpOworI2Vsc2UKKyAgICAgICAgeCA9IGZ0cnVu Y2F0ZShmaWxlbm8oZGJmcCksKENLX09GRl9UKShkYmxhc3R1c2VkK0RCX1JFQ0wpKTsKKyNlbmRp ZiAvKiBDT0hFUkVOVCAqLworICAgICAgICBpZiAoeCA8IDApICAgICAgICAgICAgICAgICAgICAg IC8qIChOb3QgZmF0YWwpICovCisgICAgICAgICAgZGVidWcoRjEwMSwiZ2V0c2xvdCBmdHJ1bmNh dGUgZmFpbGVkIiwgIiIsIGVycm5vKTsKKyAgICB9CisjZW5kaWYgLyogTk9GVFJVTkNBVEUgKi8K KworICAgIC8qIEluaXRpYWxpemUgbXkgcmVjb3JkICovCisKKyAgICBpZiAoaW5pdHNsb3QobXlk YnNsb3QpIDwgMCkgeworICAgICAgICBkZWJ1ZyhGMTAxLCJnZXRzbG90IGluaXRzbG90KCkgZXJy b3IiLCIiLG4pOworICAgICAgICBpa2Rib3BlbiA9IDA7CisgICAgICAgIGdvdG8geHNsb3Q7Cisg ICAgfQorICAgIGRlYnVnKEYxMDEsImdldHNsb3QgT0siLCIiLG15ZGJzbG90KTsKKyAgICByYyA9 IG15ZGJzbG90OyAgICAgICAgICAgICAgICAgICAgICAvKiBPSyByZXR1cm4gY29kZSAqLworCisg IHhzbG90OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVW5sb2NrIHRoZSBkYXRh YmFzZSBhbmQgcmV0dXJuICovCisgICAgaWYgKHVubGluayhsY2tuYW0pIDwgMCkgeworICAgICAg ICBkZWJ1ZyhGMTExLCJnZXRzbG90IGxvY2tmaWxlIHJlbW92YWwgZmFpbGVkIixsY2tuYW0sZXJy bm8pOworICAgICAgICByYyA9IC0xOworICAgIH0KKyAgICByZXR1cm4ocmMpOworfQorI2VuZGlm IC8qIElLU0RCICovCisjZW5kaWYgLyogTk9JS1NEICovCgpkaWZmIC0tZ2l0IGEvY2tlcm1pdC05 LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3V1c3guYy5wcmludHcgYi9ja2VybWl0LTku MC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdXVzeC5jLnByaW50dwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzMyYmVkCi0tLSAvZGV2L251bGwKKysrIGIvY2tlcm1p dC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3V1c3guYy5wcmludHcKQEAgLTAsMCAr MSw5NzE4IEBACisjaW5jbHVkZSAiY2tjc3ltLmgiCisKKy8qICBDIEsgVSBVIFMgWCAtLSAgIlVz ZXIgSW50ZXJmYWNlIiBjb21tb24gZnVuY3Rpb25zLiAqLworCisvKgorICBBdXRob3JzOgorICAg IEZyYW5rIGRhIENydXogPGZkY0Bjb2x1bWJpYS5lZHU+LAorICAgICAgVGhlIEtlcm1pdCBQcm9q ZWN0LCBDb2x1bWJpYSBVbml2ZXJzaXR5LCBOZXcgWW9yayBDaXR5CisgICAgSmVmZnJleSBFIEFs dG1hbiA8amFsdG1hbkBzZWN1cmUtZW5kcG9pbnRzLmNvbT4KKyAgICAgIFNlY3VyZSBFbmRwb2lu dHMgSW5jLiwgTmV3IFlvcmsgQ2l0eQorCisgIENvcHlyaWdodCAoQykgMTk4NSwgMjAxMSwKKyAg ICBUcnVzdGVlcyBvZiBDb2x1bWJpYSBVbml2ZXJzaXR5IGluIHRoZSBDaXR5IG9mIE5ldyBZb3Jr LgorICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBTZWUgdGhlIEMtS2VybWl0IENPUFlJTkcuVFhU IGZpbGUgb3IgdGhlCisgICAgY29weXJpZ2h0IHRleHQgaW4gdGhlIGNrY21haS5jIG1vZHVsZSBm b3IgZGlzY2xhaW1lciBhbmQgcGVybWlzc2lvbnMuCisqLworCisvKgorICBUaGlzIG1vZHVsZSBj b250YWlucyB1c2VyIGludGVyZmFjZSBmdW5jdGlvbnMgbmVlZGVkIGJ5IGJvdGggdGhlIGludGVy YWN0aXZlCisgIHVzZXIgaW50ZXJmYWNlIGFuZCB0aGUgY29tbWFuZC1saW5lLW9ubHkgdXNlciBp bnRlcmZhY2UsIGFzIHdlbGwgYXMgdGhlCisgIHNjcmVlbi1jb250cm9sIHJvdXRpbmVzIChjdXJz ZXMgYW5kIGVxdWl2YWxlbnQpLgorKi8KKworLyogSW5jbHVkZXMgKi8KKworI2luY2x1ZGUgImNr Y2RlYi5oIgorI2luY2x1ZGUgImNrY2FzYy5oIgorI2luY2x1ZGUgImNrY2tlci5oIgorI2luY2x1 ZGUgImNrdXVzci5oIgorI2luY2x1ZGUgImNrY3hsYS5oIgorCisjaWZuZGVmIE5PSFRFUk1DQVAK KyNpZmRlZiBOT1RFUk1DQVAKKyNkZWZpbmUgTk9IVEVSTUNBUAorI2Vsc2UKKyNpZm5kZWYgQlNE NDQKKyNkZWZpbmUgTk9IVEVSTUNBUAorI2Vsc2UKKyNpZmRlZiBfX2JzZGlfXworI2RlZmluZSBO T0hURVJNQ0FQCisjZWxzZQorI2lmZGVmIE9QRU5CU0QKKyNkZWZpbmUgTk9IVEVSTUNBUAorI2Vs c2UKKyNpZmRlZiBNQUNPU1gKKyNkZWZpbmUgTk9IVEVSTUNBUAorI2VuZGlmIC8qIE1BQ09TWCAq LworI2VuZGlmIC8qIE9QRU5CU0QgKi8KKyNlbmRpZiAvKiBfX2JzZGlfXyAqLworI2VuZGlmIC8q IEJTRDQ0ICovCisjZW5kaWYgLyogTk9URVJNQ0FQICovCisjZW5kaWYgLyogTk9IVEVSTUNBUCAq LworCisjaWZuZGVmIE5PVEVSTUNBUAorI2lmZGVmIEJTRDQ0CisjaWZuZGVmIE5PSFRFUk1DQVAK KyNpbmNsdWRlIDx0ZXJtY2FwLmg+CisjZW5kaWYgLyogTk9IVEVSTUNBUCAqLworI2VuZGlmIC8q IEJTRDQ0ICovCisjZWxzZSAgLyogIUJTRDQ0ICovCisjaWZkZWYgbGludXgKKyNpbmNsdWRlIDx0 ZXJtLmg+CisjZW5kaWYgLyogbGludXggKi8KKyNlbmRpZiAvKiBOT1RFUk1DQVAgKi8KKworI2lm ZGVmIE9TMgorI2luY2x1ZGUgPHN0cmluZy5oPgorX1BST1RPVFlQKGNoYXIgKiBvczJfZ2V0aG9z dG5hbWUsICh2b2lkKSk7CisjZGVmaW5lIGdldHBpZCBfZ2V0cGlkCisjZW5kaWYgLyogT1MyICov CisjaWZkZWYgQlNENDQKKyNpbmNsdWRlIDxlcnJuby5oPgorI2VuZGlmIC8qIEJTRDQ0ICovCisK K2V4dGVybiB4eF9zdHJwIHh4c3RyaW5nOworCisjaWZkZWYgT1MyCisjaW5jbHVkZSAiY2tjbmV0 LmgiCisjZWxzZSAvKiBPUzIgKi8KK19QUk9UT1RZUCggY2hhciAqIGNrZ2V0cGVlciwgKFZPSUQp KTsKK19QUk9UT1RZUChpbnQgZ2V0bG9jYWxpcGFkZHIsICh2b2lkKSk7CitfUFJPVE9UWVAoaW50 IGlzdG5jb21wb3J0LCAodm9pZCkpOworI2lmbmRlZiBOT0NLR0VURlFIT1NUCitfUFJPVE9UWVAo IGNoYXIgKiBja2dldGZxaG9zdG5hbWUsKGNoYXIgKikpOworI2VuZGlmCS8qIE5PQ0tHRVRGUUhP U1QgKi8KKyNpZm5kZWYgTkVUQ09OTgorLyoKKyAgV2Ugc2hvdWxkIGp1c3QgcHVsbCBpbiBja2Nu ZXQuaCBoZXJlLCBidXQgaXQgY2F1c2VzIGEgY29uZmxpY3Qgd2l0aCBjdXJzZXMuaC4KKyovCisj aWZkZWYgVENQU09DS0VUCisjZGVmaW5lIE5FVENPTk4KKyNlbHNlCisjaWZkZWYgU1VOWDI1Cisj ZGVmaW5lIE5FVENPTk4KKyNlbHNlCisjaWZkZWYgU1RSQVRVU1gyNQorI2RlZmluZSBORVRDT05O CisjZWxzZQorI2lmZGVmIElCTVgyNQorI2RlZmluZSBORVRDT05OCisjZWxzZQorI2lmZGVmIEhQ WDI1CisjZGVmaW5lIE5FVENPTk4KKyNlbHNlCisjaWZkZWYgREVDTkVUCisjZGVmaW5lIE5FVENP Tk4KKyNlbHNlCisjaWZkZWYgTlBJUEUKKyNkZWZpbmUgTkVUQ09OTgorI2Vsc2UKKyNpZmRlZiBD S19ORVRCSU9TCisjZGVmaW5lIE5FVENPTk4KKyNpZmRlZiBTVVBFUkxBVAorI2RlZmluZSBORVRD T05OCisjZWxzZQorI2VuZGlmIC8qIFNVUEVSTEFUICovCisjZW5kaWYgLyogVENQU09DS0VUICov CisjZW5kaWYgLyogU1VOWDI1ICovCisjZW5kaWYgLyogU1RSQVRVU1gyNSAqLworI2VuZGlmIC8q IElCTVgyNSAqLworI2VuZGlmIC8qIEhQWDI1ICovCisjZW5kaWYgLyogREVDTkVUICovCisjZW5k aWYgLyogTlBJUEUgKi8KKyNlbmRpZiAvKiBDS19ORVRCSU9TICovCisjZW5kaWYgLyogTkVUQ09O TiAqLworI2VuZGlmIC8qIE9TMiAqLworCisjaWZuZGVmIFRDUFNPQ0tFVAorI2lmZGVmIE1VTFRJ TkVUCisjZGVmaW5lIFRDUFNPQ0tFVAorI2VuZGlmIC8qIE1VTFRJTkVUICovCisjaWZkZWYgREVD X1RDUElQCisjZGVmaW5lIFRDUFNPQ0tFVAorI2VuZGlmIC8qIERFQ19UQ1BJUCAqLworI2lmZGVm IFdJTlRDUAorI2RlZmluZSBUQ1BTT0NLRVQKKyNlbmRpZiAvKiBXSU5UQ1AgKi8KKyNpZmRlZiBU Q1BXQVJFCisjZGVmaW5lIFRDUFNPQ0tFVAorI2VuZGlmIC8qIFRDUFdBUkUgKi8KKyNlbmRpZiAv KiBUQ1BTT0NLRVQgKi8KKworI2lmZGVmIE9TMgorI2lmZGVmIE5UCisjaW5jbHVkZSA8d2luZG93 cy5oPgorI2luY2x1ZGUgPHRhcGkuaD4KKyNpbmNsdWRlICJja250YXAuaCIKKyNlbHNlIC8qIE5U ICovCisjZGVmaW5lIElOQ0xfVklPCisjaW5jbHVkZSA8b3MyLmg+CisjZW5kaWYgLyogTlQgKi8K KyNpZmRlZiBDT01NRU5UICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXb3VsZCB5b3UgYmVs aWV2ZSAqLworI3VuZGVmIENPTU1FTlQgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDxvczIu aD4gZGVmaW5lcyB0aGlzID8gKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisjaWZkZWYgQ0tfTkVU QklPUworI2luY2x1ZGUgImNrb25iaS5oIgorI2VuZGlmIC8qIENLX05FVEJJT1MgKi8KKworI2lu Y2x1ZGUgImNrb2Nvbi5oIgorZXh0ZXJuIGFzY3JlZW4gY29tbWFuZHNjcmVlbjsKKyNpZmRlZiBL VUkKKyNpbmNsdWRlICJpa3VpLmgiCisjZW5kaWYgLyogS1VJICovCisjZW5kaWYgLyogT1MyICov CisKKyNpZmRlZiBOVAorI2luY2x1ZGUgImNrbndpbi5oIgorI2VuZGlmIC8qIE5UICovCisjaWZk ZWYgT1MyCisjaW5jbHVkZSAiY2tvd2luLmgiCisjaW5jbHVkZSAiY2tvc3luLmgiCisjZW5kaWYg LyogT1MyICovCisKKyNpZmRlZiBDS19UQVBJCitleHRlcm4gaW50IHR0dGFwaTsKK2V4dGVybiBp bnQgdGFwaXBhc3M7CisjZW5kaWYgLyogQ0tfVEFQSSAqLworCisjaWZkZWYgQ0tfS0VSQkVST1MK KyNpbmNsdWRlICJja3VhdGguaCIKKyNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLworCisjaWZuZGVm IFdJTlRDUAorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2VuZGlmIC8qIFdJTlRDUCAqLworCisjaWZk ZWYgVk1TCisjaW5jbHVkZSA8ZGVzY3JpcC5oPgorI2luY2x1ZGUgPHNzZGVmLmg+CisjaW5jbHVk ZSA8c3RzZGVmLmg+CisjaWZuZGVmIE9MRF9WTVMKKyNpbmNsdWRlIDxsaWIkcm91dGluZXMuaD4g IC8qIE5vdCBmb3IgVkFYIEMgMi4zICovCisjZWxzZQorI2luY2x1ZGUgPGxpYmRlZi5oPgorI2Vu ZGlmIC8qIE9MRF9WTVMgKi8KKyNpZmRlZiBXSU5UQ1AKKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNl bmRpZiAvKiBXSU5UQ1AgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKworI2lmZGVmIERDTEZET1BFTgor LyogZmRvcGVuKCkgbmVlZHMgZGVjbGFyaW5nIGJlY2F1c2UgaXQncyBub3QgZGVjbGFyZWQgaW4g PHN0ZGlvLmg+ICovCitfUFJPVE9UWVAoIEZJTEUgKiBmZG9wZW4sIChpbnQsIGNoYXIgKikgKTsK KyNlbmRpZiAvKiBEQ0xGRE9QRU4gKi8KKworI2lmZGVmIERDTFBPUEVOCisvKiBwb3BlbigpIG5l ZWRzIGRlY2xhcmluZyBiZWNhdXNlIGl0J3Mgbm90IGRlY2xhcmVkIGluIDxzdGRpby5oPiAqLwor X1BST1RPVFlQKCBGSUxFICogcG9wZW4sIChjaGFyICosIGNoYXIgKikgKTsKKyNlbmRpZiAvKiBE Q0xQT1BFTiAqLworCitpbnQgdHRfY3JkID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgLyog Q2FycmlhZ2UgcmV0dXJuIGRpc3BsYXkgKi8KK2ludCB0dF9sZmQgPSAwOyAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBMaW5lZmVlZCBkaXNwbGF5ICovCitpbnQgaW50ZXJydXB0ZWQgPSAwOyAg ICAgICAgICAgICAgICAgICAgLyogSW50ZXJydXB0ZWQgZnJvbSBrZXlib2FyZCBmbGFnICovCitp bnQgZnhkX2luaXRlZCA9IDA7CQkJLyogRnVsbHNjcmVlbiBzdHVmZiBpbml0aWFsaXplZCAqLwor CisjaWZkZWYgREVCVUcKK2NoYXIgZGViZmlsW0NLTUFYUEFUSCsxXTsgICAgICAgICAgICAgICAv KiBEZWJ1Z2dpbmcgbG9nIGZpbGUgbmFtZSAqLworI2VuZGlmIC8qIERFQlVHICovCisKKyNpZmRl ZiBUTE9HCitjaGFyIHRyYWZpbFtDS01BWFBBVEgrMV07ICAgICAgICAgICAgICAgLyogVHJhbnNh Y3Rpb24gbG9nIGZpbGUgbmFtZSAqLworI2VuZGlmIC8qIFRMT0cgKi8KKworY2hhciBzZXNmaWxb Q0tNQVhQQVRIKzFdOyAgICAgICAgICAgICAgIC8qIFNlc3Npb24gbG9nIGZpbGUgbmFtZSAqLwor CisjaWZkZWYgQ0tMT0dESUFMCitjaGFyIGRpYWZpbFtDS01BWFBBVEgrMV07ICAgICAgICAgICAg ICAgLyogQ29ubmVjdGlvbiBsb2cgZmlsZSBuYW1lICovCitjaGFyIGN4bG9nYnVmW0NYTE9HQlVG TCsxXTsgICAgICAgICAgICAgLyogQ29ubmVjdGlvbiBsb2cgcmVjb3JkIGJ1ZmZlciAqLworaW50 IGN4X2FjdGl2ZSA9IDA7ICAgICAgICAgICAgICAgICAgICAgIC8qIENvbm5lY3Rpb24gaXMgYWN0 aXZlICovCitleHRlcm4gaW50IGRpYWxvZzsKKyNlbmRpZiAvKiBDS0xPR0RJQUwgKi8KKworI2lm ZGVmIERZTkFNSUMKK3N0YXRpYyBjaGFyICpjbWRzdHIgPSBOVUxMOyAgICAgICAgICAgICAvKiBQ bGFjZSB0byBidWlsZCBnZW5lcmljIGNvbW1hbmQgKi8KKyNlbHNlCisjaWZkZWYgcGRwMTEKK3N0 YXRpYyBjaGFyIGNtZHN0clsyNTZdOworI2Vsc2UKK3N0YXRpYyBjaGFyIGNtZHN0cls0MDk2XTsK KyNlbmRpZiAvKiBwZHAxMSAqLworI2VuZGlmIC8qIERZTkFNSUMgKi8KKworI2lmbmRlZiBOT01T RU5ECitjaGFyIGZzcGVjW0NNREJMKzRdOyAgICAgICAgICAgICAgICAgICAgLyogRmlsZW5hbWUg c3RyaW5nIGZvciBcdihmaWxlc3BlYykgKi8KK2ludCBmc3BlY2xlbiA9IENNREJMOworI2Vsc2UK K2NoYXIgZnNwZWNbQ0tNQVhQQVRIKzRdOworaW50IGZzcGVjbGVuID0gQ0tNQVhQQVRIOworI2Vu ZGlmIC8qIE5PTVNFTkQgKi8KKworY2hhciAqIHJmc3BlYyA9IE5VTEw7CQkJLyogUmVjZWl2ZWQg ZmlsZXNwZWM6IGxvY2FsICovCitjaGFyICogcHJmc3BlYyA9IE5VTEw7CQkJLyogUHJlbGltaW5h cnkgcmZzcGVjICovCitjaGFyICogc2ZzcGVjID0gTlVMTDsJCQkvKiBTZW50IGZpbGVzcGVjOiBs b2NhbCAqLworY2hhciAqIHBzZnNwZWMgPSBOVUxMOwkJCS8qIFByZWxpbWluYXJ5IHNmc3BlYyAq LworY2hhciAqIHNyZnNwZWMgPSBOVUxMOwkJCS8qIFJlY2VpdmVkIGZpbGVzcGVjOiByZW1vdGUg Ki8KK2NoYXIgKiBwc3Jmc3BlYyA9IE5VTEw7CQkJLyogUHJlbGltaW5hcnkgc3Jmc3BlYyAqLwor Y2hhciAqIHJyZnNwZWMgPSBOVUxMOwkJCS8qIFNlbnQgZmlsZXNwZWM6IHJlbW90ZSAqLworY2hh ciAqIHBycmZzcGVjID0gTlVMTDsJCQkvKiBQcmVsaW1pbmFyeSBycmZzcGVjICovCisKK2ludCBz dWNjZXNzID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAvKiBDb21tYW5kIHN1Y2Nlc3MvZmFp bHVyZSBmbGFnICovCisgICAgY21kbHZsID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgLyog Q29tbWFuZCBsZXZlbCAqLworICAgIGFjdGlvbiA9IDAsCQkJCS8qIEFjdGlvbiBzZWxlY3RlZCBv biBjb21tYW5kIGxpbmUgKi8KKyAgICBzbG9ndHMgPSAwLAkJCQkvKiBTZXNzaW9uLWxvZyB0aW1l c3RhbXBzIG9uL29mZiAqLworICAgIHNsb2dudWwgPSAwLAkJCS8qIFNlc3Npb24tbG9nIG51bGwt dGVybWluYXRlZCBsaW5lcyAqLworI2lmZGVmIFVOSVgKKyAgICBzZXNzZnQgPSBYWUZUX1QsICAg ICAgICAgICAgICAgICAgICAvKiBTZXNzaW9uIGxvZyBmaWxlIHR5cGUgKi8KKyNlbHNlCisgICAg c2Vzc2Z0ID0gWFlGVF9CLAkJCS8qICh0ZXh0IGZvciBVTklYIGJpbmFyeSBmb3Igb3RoZXJzKSAq LworI2VuZGlmIC8qIFVOSVggKi8KKyAgICBwZmxhZyA9IDEsICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBQcmludCBwcm9tcHQgKi8KKyAgICBtc2dmbGcgPSAxOyAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBQcmludCBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzICovCisKK2V4dGVybiBpbnQg eGFza21vcmUsIHNhdmVhc2s7CQkvKiBNb3JlLXByb21wdGluZyAqLworCisjaWZkZWYgQ0tfQVBD CitleHRlcm4gaW50IGFwY2FjdGl2ZTsKKyNlbmRpZiAvKiBDS19BUEMgKi8KKy8qIEV4dGVybmFs IHZhcmlhYmxlcyAqLworCitleHRlcm4gaW50IGxvY2FsLCBxdWlldCwgYmluYXJ5LCBuZXR3b3Jr LCB3aGF0LCBwYXJpdHksIHhpdHN0YSwgZXNjYXBlLAorICB0bGV2ZWwsIGJnc2V0LCBiYWNrZ3Jk LCB4c3VzcGVuZCwgY21kaW50LCBuZXR0eXBlLCBzZXNsb2csIGRmbG9jOworCitleHRlcm4gaW50 IGNtZF9yb3dzLCBjbWRfY29scywgeGNtZHNyYzsKKworZXh0ZXJuIGNoYXIgY21kZmlsW107CisK KyNpZmRlZiBWTVMKK2V4dGVybiBpbnQgYmF0Y2g7CisjZW5kaWYgLyogVk1TICovCisKKyNpZmRl ZiBkYXRhZ2VuZXJhbCAgICAgICAgICAgICAgICAgICAgICAvKiAyLzEyLzkyIEVOSCAqLworI2lu Y2x1ZGUgPHN5c2lkLmg+CitleHRlcm4gaW50IGNvbl9yZWFkc19tdCwgY29uaW50X2NoLCBjb25p bnRfYXZsOworI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCisKK2V4dGVybiBsb25nIHNwZWVkOwor CitleHRlcm4gY2hhciB0dG5hbWVbXSwgKmRmdHR5LCAqY21hcmcsICoqY21saXN0LCAqdmVyc2lv LCBteWhvc3RbXTsKKworI2lmbmRlZiBOT0NTRVRTCitleHRlcm4gaW50IGZjaGFyc2V0LCB0Y2hh cnNldCwgeGZyeGxhOworZXh0ZXJuIHN0cnVjdCBjc2luZm8gZmNzaW5mb1tdLCB0Y3NpbmZvW107 CisjZW5kaWYgLyogTk9DU0VUUyAqLworCisjaWZkZWYgT1MyCitleHRlcm4gdW5zaWduZWQgY2hh ciBjb2xvcmNtZDsKKyNlbmRpZiAvKiBPUzIgKi8KKworI2lmZGVmIE5PWEZFUgorCitpbnQgZmRp c3BsYSA9IFhZRkRfTjsKKworI2Vsc2UgIC8qIE5PWEZFUiBpcyBub3QgZGVmaW5lZCAqLworCisj aWZkZWYgT1MyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRmlsZSB0cmFuc2ZlciBk aXNwbGF5IHR5cGUgKi8KK2ludCBmZGlzcGxhID0gWFlGRF9DOyAgICAgICAgICAgICAgICAgICAv KiBDdXJzZXMgKGZ1bGxzY3JlZW4pIGlmIHdlIGhhdmUgaXQgKi8KKyNlbHNlCisjaWZkZWYgQ0tf Q1VSU0VTCitpbnQgZmRpc3BsYSA9IFhZRkRfQzsKKyNlbHNlCitpbnQgZmRpc3BsYSA9IFhZRkRf UzsgICAgICAgICAgICAgICAgICAgLyogT3RoZXJ3aXNlIENSVCAqLworI2VuZGlmIC8qIENLX0NV UlNFUyAqLworI2VuZGlmIC8qIE9TMiAqLworCitleHRlcm4gc3RydWN0IGNrX3AgcHRhYltdOwor ZXh0ZXJuIGludCBwcm90b2NvbCwgeGZyYmVsLCB4ZnJpbnQ7CisKKyNpZmRlZiBTVFJFQU1JTkcK K2V4dGVybiBpbnQgc3RyZWFtaW5nLCBzdHJlYW1vazsKKyNlbmRpZiAvKiBTVFJFQU1JTkcgKi8K KworLyogVXNlZCBpbnRlcm5hbGx5ICovCisKKyNpZmRlZiBLVUkKK19QUk9UT1RZUCggVk9JRCBz Y3JlZW5nLCAoaW50LCBjaGFyLCBsb25nLCBjaGFyICopICk7CisjZW5kaWYJLyogS1VJICovCitf UFJPVE9UWVAoIFZPSUQgc2NyZWVuYywgKGludCwgY2hhciwgQ0tfT0ZGX1QsIGNoYXIgKikgKTsK KworCisjaWZkZWYgQ0tfQ1VSU0VTCisjaWZuZGVmIERZTkFNSUMKK3N0YXRpYyBjaGFyIHh0cm1i dWZbVFJNQlVGTF07ICAgICAgICAgICAvKiB0Z2V0ZW50KCkgYnVmZmVyICovCitjaGFyICogdHJt YnVmID0geHRybWJ1ZjsKKyNlbHNlCitjaGFyICogdHJtYnVmID0gTlVMTDsKKyNlbmRpZiAvKiBE WU5BTUlDICovCitfUFJPVE9UWVAoIHN0YXRpYyBWT0lEIGRweWluaXQsICh2b2lkKSApOworX1BS T1RPVFlQKCBzdGF0aWMgbG9uZyBzaG9jcHMsIChpbnQsIENLX09GRl9ULCBDS19PRkZfVCkgKTsK K19QUk9UT1RZUCggc3RhdGljIENLX09GRl9UIHNob2V0bCwgKENLX09GRl9ULCBsb25nLCBDS19P RkZfVCwgQ0tfT0ZGX1QpICk7CisjZW5kaWYgLyogQ0tfQ1VSU0VTICovCisKK3N0YXRpYyBpbnQg ZnRfd2luID0gMDsgIC8qIEZ1bGxzY3JlZW4gZmlsZSB0cmFuc2ZlciBkaXNwbGF5IHdpbmRvdyBp cyBhY3RpdmUgKi8KKworLyogVmFyaWFibGVzIGRlY2xhcmVkIGhlcmUgKi8KKworc3RhdGljIGNo YXIgKiBza3JlYXNvbltdID0geworICAgICIiLAkJCQkJLyogMCAqLworICAgICJSZW1vdGUgZmls ZSBub3Qgb2xkZXIiLAkJLyogU0tQX0RBVCAqLworICAgICJJZGVudGljYWwgbW9kaWZpY2F0aW9u IHRpbWVzIiwJLyogU0tQX0VRVSAqLworICAgICJUeXBlIiwJCQkJLyogU0tQX1RZUCAqLworICAg ICJTaXplIiwJCQkJLyogU0tQX1NJWiAqLworICAgICJOYW1lIGNvbGxpc2lvbiIsCQkJLyogU0tQ X05BTSAqLworICAgICJFeGNlcHRpb24gTGlzdCIsCQkJLyogU0tQX0VYTCAqLworICAgICJEb3Qg ZmlsZSIsCQkJCS8qIFNLUF9ET1QgKi8KKyAgICAiQmFja3VwIGZpbGUiLAkJCS8qIFNLUF9CS1Ug Ki8KKyAgICAiUmVjb3Zlcnkgbm90IG5lZWRlZCIsCQkvKiBTS1BfUkVTICovCisgICAgIkFjY2Vz cyBkZW5pZWQiLAkJCS8qIFNLUF9BQ0MgKi8KKyAgICAiTm90IGEgcmVndWxhciBmaWxlIiwJCS8q IFNLUF9OUkYgKi8KKyAgICAiU2ltdWxhdGVkIiwJCQkvKiBTS1BfU0lNICovCisgICAgIlNpbXVs YXRlZCAtIFJlbW90ZSBmaWxlIG9sZGVyIiwJLyogU0tQX1hVUCAqLworICAgICJTaW11bGF0ZWQg LSBObyByZW1vdGUgZmlsZSIsCS8qIFNLUF9YTlggKi8KK307CitzdGF0aWMgaW50IG5za3JlYXNv biA9IChzaXplb2Yoc2tyZWFzb24pIC8gc2l6ZW9mKGNoYXIgKikpOworCitjaGFyICoKK2dza3Jl YXNvbihuKSBpbnQgbjsgeworICAgIHJldHVybigobiA+IDAgJiYgbiA8IG5za3JlYXNvbikgPyBz a3JlYXNvbltuXSA6ICIiKTsKK30KKworY2hhciBwa3RmaWxbQ0tNQVhQQVRIKzFdOyAgICAgICAg ICAgICAgIC8qIFBhY2tldCBsb2cgZmlsZSBuYW1lICovCisKKyNpZm5kZWYgTk9NU0VORCAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBNdWx0aXBsZSBTRU5EICovCitjaGFyICptc2ZpbGVzW01T RU5ETUFYXTsKKyNlbmRpZiAvKiBOT01TRU5EICovCisKKyNpZmRlZiBDS19USU1FUlMKK2V4dGVy biBsb25nIHJ0dGRlbGF5OworZXh0ZXJuIGludCAgcnR0ZmxnOworI2VuZGlmIC8qIENLX1RJTUVS UyAqLworZXh0ZXJuIGludCByY3Z0aW1vOworCisjaWZkZWYgQ0tfUkVTRU5ECitleHRlcm4gaW50 IHNlbmRtb2RlOworZXh0ZXJuIENLX09GRl9UIHNlbmRzdGFydCwgcnNfbGVuOworI2VuZGlmIC8q IENLX1JFU0VORCAqLworCisjaWZkZWYgQ0tfUENUX0JBUiAgICAgICAgICAgICAgICAgICAgICAg LyogRmlsZSB0cmFuc2ZlciB0aGVybW9tZXRlciAqLworaW50IHRoZXJtb21ldGVyID0gMTsgICAg ICAgICAgICAgICAgICAgIC8qIE9OIGJ5IGRlZmF1bHQgKi8KKyNlbmRpZiAvKiBDS19QQ1RfQkFS ICovCisKKyNpZmRlZiBHRlRJTUVSCitDS0ZMT0FUIGd0diA9IC0xLjAsIG9sZGd0diA9IC0xLjA7 CisjZWxzZQorI2lmbmRlZiBPUzIKK3N0YXRpYworI2VuZGlmIC8qIE9TMiAqLworICBsb25nIGd0 diA9IC0xTCwgb2xkZ3R2ID0gLTFMOworI2VuZGlmIC8qIEdGVElNRVIgKi8KKworZXh0ZXJuIGlu dCBzZXJ2ZXIsIGJjdHUsIHJwdGZsZywgZWJxZmxnLCBzcHNpeiwgdXJwc2l6LCB3bWF4LCBjenNl ZW4sIGN4c2VlbiwKKyAgd2lubG8sIGRpc3BsYSwgdGltaW50LCBucGFkLCBlYnEsIGJjdHIsIHJw dHEsIGF0Y2FwdSwgbHBjYXB1LAorICBzd2NhcHUsIHdzbG90biwgd3Nsb3RyLCBydGltbywgbXlw YWRuLCBzcSwgY2FwYXMsIHJwc2l6LCB0c2VjcywKKyAgcGt0bG9nLCBsc2NhcHUsIGRlc3QsIHNy dmRpcywgd3Nsb3RzLCBzcGFja2V0cywgc3BrdGwsIHJwa3RsLAorICByZXRyYW5zLCB3Y3VyLCBu dW1lcnJzLCBmc2Vjcywgd2hhdHJ1LCBjcnVuY2hlZCwgdGltZW91dHMsCisgIHJwYWNrZXRzLCBm bmNudiwgYnllX2FjdGl2ZSwgZGlzY2FyZCwgaW5zZXJ2ZXIsIGRpcmFjdGl2ZSwgY2RhY3RpdmU7 CisKK2V4dGVybiBsb25nIGZpbGNudCwgZmlscmVqLCBycHRuLCBmaWxjcHMsIHRmY3BzLCBjcHMs IHBlYWtjcHM7CitleHRlcm4gQ0tfT0ZGX1QgZmZjLCB0ZmMsIGZzaXplOyAKKworbG9uZyBvbGRj cHMgPSAwTDsKKworZXh0ZXJuIENIQVIgKnJkYXRhcCwgcGFkY2gsIHNlb2wsIGN0bHEsIG15cGFk YywgZW9sLCAqZXBrdG1zZzsKK2V4dGVybiBjaGFyICp4ZnJtc2c7CisKKyNpZmRlZiBJS1NEQgor RklMRSAqIGRiZnAgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgIC8qIEZpbGUgcG9pbnRlciB0 byBkYXRhYmFzZSBmaWxlICovCisKK2ludCBkYmVuYWJsZWQgPSAxOyAgICAgICAgICAgICAgICAg ICAgICAvKiBGbGFnIGZvciBkYXRhYmFzZSBpcyBlbmFibGVkICovCitleHRlcm4gaW50IGlrZGJv cGVuOyAgICAgICAgICAgICAgICAgICAgLyogRmxhZyBmb3IgZGF0YWJhc2UgaXMgb3BlbiAqLwor Cit1bnNpZ25lZCBsb25nIG15ZGJzZWVrID0gMEw7ICAgICAgICAgICAgLyogU2VlayBwb2ludGVy IHRvIG15IHJlY29yZCAqLworaW50IG15ZGJzbG90ID0gMDsgICAgICAgICAgICAgICAgICAgICAg IC8qIE15IHNsb3QgbnVtYmVyICovCit1bnNpZ25lZCBsb25nIG15ZmxhZ3MgPSAwTDsgICAgICAg ICAgICAgLyogTXkgZmxhZ3MgKi8KK3Vuc2lnbmVkIGxvbmcgbXlhdHlwZSA9IDBMOyAgICAgICAg ICAgICAvKiBNeSBhdXRob3JpemF0aW9uIHR5cGUgKi8KK3Vuc2lnbmVkIGxvbmcgbXlhbW9kZSA9 IDBMOyAgICAgICAgICAgICAvKiBNeSBhdXRob3JpemF0aW9uIG1vZGUgKi8KK3Vuc2lnbmVkIGxv bmcgbXlzdGF0ZSA9IDBMOyAgICAgICAgICAgICAvKiBNeSBzdGF0ZSAoU0VORCwgUkVDRUlWRSwg ZXRjKSAqLwordW5zaWduZWQgbG9uZyBteXBpZCA9IDBMOyAgICAgICAgICAgICAgIC8qIE15IFBJ RCAqLwordW5zaWduZWQgbG9uZyBteWlwID0gMEw7ICAgICAgICAgICAgICAgIC8qIE15IElQIGFk ZHJlc3MgKi8KK3Vuc2lnbmVkIGxvbmcgcGVlcmlwID0gMEw7ICAgICAgICAgICAgICAvKiBNeSBw ZWVyJ3MgSVAgYWRkcmVzcyAqLworCit1bnNpZ25lZCBsb25nIGRiaXAgPSAwTDsgICAgICAgICAg ICAgICAgLyogSVAgYWRkcmVzcyBpbiBkYiByZWNvcmQgKi8KK3Vuc2lnbmVkIGxvbmcgZGJwaWQg PSAwTDsgICAgICAgICAgICAgICAvKiBQSUQgaW4gZGIgcmVjb3JkICovCit1bnNpZ25lZCBsb25n IGRiZmxhZ3MgPSAwTDsgICAgICAgICAgICAgLyogRmxhZ3MgZmllbGQgaW4gZGIgcmVjb3JkICov Cit1bnNpZ25lZCBsb25nIGRibGFzdHVzZWQgPSAwTDsgICAgICAgICAgLyogTGFzdCBpbi11c2Ug cmVjb3JkIGluIGRiICovCitjaGFyIGRicmVjW0RCX1JFQ0xdOyAgICAgICAgICAgICAgICAgICAg LyogRGF0YWJhc2UgcmVjb3JkIGJ1ZmZlciAqLworCitjaGFyICogZGJkaXIgICA9IE5VTEw7ICAg ICAgICAgICAgICAgICAgLyogRGF0YWJhc2UgZGlyZWN0b3J5ICovCitjaGFyICogZGJmaWxlICA9 IE5VTEw7ICAgICAgICAgICAgICAgICAgLyogRGF0YWJhc2UgZmlsZSBmdWxsIHBhdGhuYW1lICov CitjaGFyIG15aGV4aXBbMzNdID0geyBOVUwsIE5VTCB9OyAgICAgICAgLyogTXkgSVAgYWRkcmVz cyBpbiBoZXggKi8KK2NoYXIgcGVlcmhleGlwWzMzXSA9IHsgTlVMLCBOVUwgfTsgICAgICAvKiBD bGllbnQncyBJUCBhZGRyZXNzIGluIGhleCAqLworI2VuZGlmIC8qIElLU0RCICovCisKKyNpZmRl ZiBHRlRJTUVSCitleHRlcm4gQ0tGTE9BVCBmcGZzZWNzLCBmcHRzZWNzLCBmcHhmc2VjczsKKyNl bHNlCitleHRlcm4gbG9uZyB4ZnNlY3M7CisjZW5kaWYgLyogR0ZUSU1FUiAqLworI2VuZGlmIC8q IE5PWEZFUiAqLworCisjaWZkZWYgVENQU09DS0VUCisjaWZkZWYgTkVXRlRQCitleHRlcm4gY2hh ciAqIGZ0cF9ob3N0LCBmdHBfc3J2dHlwW107CitleHRlcm4gaW50IGZ0cF9jc3gsIGZ0cF9jc2ws IGZ0cF9kZWI7CisjZW5kaWYgLyogTkVXRlRQICovCitleHRlcm4gY2hhciBteWlwYWRkcltdOwor I2VuZGlmIC8qIFRDUFNPQ0tFVCAqLworCisjaWZuZGVmIE5PSUNQCisjaWZuZGVmIE5PU1BMCisg ICAgZXh0ZXJuIHN0cnVjdCBtdGFiICptYWN0YWI7ICAgICAgICAgLyogRm9yIE9OX0VYSVQgbWFj cm8uICovCisgICAgZXh0ZXJuIGludCBubWFjOworI2VuZGlmIC8qIE5PU1BMICovCisjaWZkZWYg RENNREJVRgorZXh0ZXJuIGNoYXIgKmNtZGJ1ZjsgICAgICAgICAgICAgICAgICAgIC8qIENvbW1h bmQgYnVmZmVyICovCisjZWxzZQorZXh0ZXJuIGNoYXIgY21kYnVmW107ICAgICAgICAgICAgICAg ICAgIC8qIENvbW1hbmQgYnVmZmVyICovCisjZW5kaWYgLyogRENNREJVRiAqLworZXh0ZXJuIGlu dCBjbWRfcXVvdGluZzsKKyNlbmRpZiAvKiBOT0lDUCAqLworCisjaWZuZGVmIE5PQ0NUUkFQCisj aWZkZWYgTlQKKyNpbmNsdWRlIDxzZXRqbXBleC5oPgorI2Vsc2UgLyogTlQgKi8KKyNpbmNsdWRl IDxzZXRqbXAuaD4KKyNlbmRpZiAvKiBOVCAqLworI2luY2x1ZGUgImNrY3NpZy5oIgorZXh0ZXJu IGNram1wYnVmIGNtamJ1ZjsKKyNlbmRpZiAvKiBOT0NDVFJBUCAqLworCitleHRlcm4gaW50IHhm aWxldHlwZSwgbnNjYW5maWxlOworCitpbnQKK3Nob2VzYyhlc2NhcGUpIGludCBlc2NhcGU7IHsK KyAgICBleHRlcm4gY2hhciAqIGNjbnRhYltdOwkJLyogQzAgY29udHJvbCBjaGFyYWN0ZXIgbmFt ZSB0YWJsZSAqLworICAgIGV4dGVybiBpbnQgdHRfZXNjYXBlOworICAgIGlmICgoZXNjYXBlID4g MCAmJiBlc2NhcGUgPCAzMikgfHwgKGVzY2FwZSA9PSAxMjcpKSB7CisJcHJpbnRmKCIgRXNjYXBl IGNoYXJhY3RlcjogQ3RybC0lYyAoQVNDSUkgJWQsICVzKTogJXNcclxuIiwKKwkgICAgICAgY3Rs KGVzY2FwZSksCisJICAgICAgIGVzY2FwZSwKKwkgICAgICAgKGVzY2FwZSA9PSAxMjcgPyAiREVM IiA6IGNjbnRhYltlc2NhcGVdKSwKKwkgICAgICAgdHRfZXNjYXBlID8gImVuYWJsZWQiIDogImRp c2FibGVkIgorCSAgICAgICApOworICAgIH0gZWxzZSB7CisJcHJpbnRmKCIgRXNjYXBlIGNoYXJh Y3RlcjogQ29kZSAlZCIsZXNjYXBlKTsKKwlpZiAoZXNjYXBlID4gMTYwICYmIGVzY2FwZSA8IDI1 NikKKwkgIHByaW50ZigiICglYykiLGVzY2FwZSk7CisJcHJpbnRmKCI6ICVzXHJcbiIsIHR0X2Vz Y2FwZSA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpOwkKKyAgICB9CisgICAgcmV0dXJuKDApOwor fQorCisjaWZuZGVmIE5PWEZFUgorLyogIFAgUiBFIFMgRSBUICAtLSAgUmVzZXQgZ2xvYmFsIHBy b3RvY29sIHZhcmlhYmxlcyAgKi8KKworZXh0ZXJuIGludCByZWN1cnNpdmU7CisKKyNpZmRlZiBQ QVRURVJOUworaW50IHBhdHRlcm5zID0gU0VUX0FVVE87ICAgICAgICAgICAgICAgIC8qIFdoZXRo ZXIgdG8gdXNlIGZpbGVuYW1lIHBhdHRlcm5zICovCitleHRlcm4gaW50IGdfcGF0dGVybnM7CQkJ LyogRm9yIHNhdmluZyBhbmQgcmVzdG9yaW5nICovCisjZWxzZQoraW50IHBhdHRlcm5zID0gU0VU X09GRjsKKyNlbmRpZiAvKiBQQVRURVJOUyAqLworCisjaWZuZGVmIE5PSUNQCisjaWZkZWYgQ0tf TEFCRUxFRAorZXh0ZXJuIGludCBnX2xmX29wdHMsIGxmX29wdHM7CisjZW5kaWYgLyogQ0tfTEFC RUxFRCAqLworZXh0ZXJuIGludCBnX21hdGNoZG90LCBnX3VzZXBpcGVzLCB1c2VwaXBlczsKK2V4 dGVybiBpbnQgZ19iaW5hcnksIGdfcHJvdG8sIGdfZGlzcGxhLCBnX3NwYXRoLCBnX3JwYXRoLCBn X2ZuY252OworZXh0ZXJuIGludCBnX3JlY3Vyc2l2ZTsKK2V4dGVybiBpbnQgZ194ZmVybW9kZSwg eGZlcm1vZGU7CitleHRlcm4gaW50IGdfdXJwc2l6LCBnX3Nwc2l6ZiwgZ19zcHNpejsKK2V4dGVy biBpbnQgZ19zcHNpenIsIGdfc3BtYXgsIGdfd3Nsb3RyLCBnX3ByZWZpeGluZywgZ19mbmNhY3Q7 CitleHRlcm4gaW50IGdfZm5zcGF0aCwgZ19mbnJwYXRoLCBnX3NraXBidXA7CitleHRlcm4gaW50 IG5vbGlua3M7CisjaWZkZWYgQ0tTWU1MSU5LCitleHRlcm4gaW50IHpnZnNfbGluazsKKyNlbmRp ZiAvKiBDS1NZTUxJTksgKi8KKyNpZm5kZWYgTk9TUEwKK2V4dGVybiBpbnQgZ19wZmxnLCBwd2Zs ZywgZ19wY3B0LCBwd2NyeXB0OworZXh0ZXJuIGNoYXIgKiBnX3Bzd2QsIHB3YnVmW107CisjZW5k aWYgLyogTk9TUEwgKi8KKyNlbmRpZiAvKiBOT0lDUCAqLworCitleHRlcm4gaW50IHNwc2l6Ziwg c3BzaXpyLCBzcG1heCwgcHJlZml4aW5nLCBmbmNhY3QsIGZuc3BhdGgsIGZucnBhdGg7CitleHRl cm4gaW50IG1vdmluZzsgICAgICAgICAgICAgICAgICAgICAgLyogU0VORCBjcml0ZXJpYSAqLwor ZXh0ZXJuIGNoYXIgc25kYWZ0ZXJbXSwgc25kYmVmb3JlW10sICpzbmRleGNlcHRbXSwgKnJjdmV4 Y2VwdFtdOworZXh0ZXJuIENLX09GRl9UIHNuZGxhcmdlciwgc25kc21hbGxlciwgY2FsaWJyYXRl OworZXh0ZXJuIGludCBybWFpbGYsIHJwcmludGYsIHNraXBidXA7CitleHRlcm4gY2hhciBvcHRi dWZbXTsKKworI2lmZGVmIFBJUEVTRU5ECitleHRlcm4gY2hhciAqIGdfc2ZpbHRlciwgKiBnX3Jm aWx0ZXI7CitleHRlcm4gY2hhciAqIHNuZGZpbHRlciwgKiByY3ZmaWx0ZXI7CisjZW5kaWYgLyog UElQRVNFTkQgKi8KK2V4dGVybiBjaGFyICoqIHNuZGFycmF5OworCitWT0lECitmdHJlc2V0KCkg eworI2lmbmRlZiBOT0lDUAorICAgIGludCBpOworICAgIGV4dGVybiBjaGFyICogZmlsZWZpbGU7 CisgICAgZXh0ZXJuIGludCByZWxpYWJsZSwgeHJlbGlhYmxlLCBjX3NhdmUsIHNzX3NhdmUsIHNs b3N0YXJ0LCB1cmNsZWFyOworICAgIGV4dGVybiBpbnQgb29wdHMsIG9tb2RlLCBvbmFtZSwgb3Bh dGgsIGthY3RpdmUsIGF1dG9wYXRoOworICAgIGV4dGVybiBjaGFyICogc25kX21vdmU7ICAgICAg ICAgICAgIC8qIERpcmVjdG9yeSB0byBtb3ZlIHNlbnQgZmlsZXMgdG8gKi8KKyAgICBleHRlcm4g Y2hhciAqIHNuZF9yZW5hbWU7ICAgICAgICAgICAvKiBXaGF0IHRvIHJlbmFtZSBzZW50IGZpbGVz IHRvICovCisgICAgZXh0ZXJuIGNoYXIgKiByY3ZfbW92ZTsKKyAgICBleHRlcm4gY2hhciAqIHJj dl9yZW5hbWU7CisgICAgZXh0ZXJuIGNoYXIgKiBnX3NuZF9tb3ZlOworICAgIGV4dGVybiBjaGFy ICogZ19zbmRfcmVuYW1lOworICAgIGV4dGVybiBjaGFyICogZ19yY3ZfbW92ZTsKKyAgICBleHRl cm4gY2hhciAqIGdfcmN2X3JlbmFtZTsKKworI2lmZGVmIENLX1RNUERJUgorICAgIGV4dGVybiBp bnQgZl90bXBkaXI7CisgICAgZXh0ZXJuIGNoYXIgc2F2ZGlyW107CisjZW5kaWYgLyogQ0tfVE1Q RElSICovCisKKyNpZmRlZiBDS19TUEVFRAorI2lmZGVmIENPTU1FTlQKKyAgICBleHRlcm4gaW50 IGZfY3RscDsKKyAgICBleHRlcm4gc2hvcnQgc19jdGxwW10sIGN0bHBbXTsKKyNlbmRpZiAvKiBD T01NRU5UICovCisjZW5kaWYgLyogQ0tfU1BFRUQgKi8KKworI2lmbmRlZiBOT0NTRVRTCisgICAg ZXh0ZXJuIGludCBmY3Nfc2F2ZSwgdGNzX3NhdmU7CisgICAgZXh0ZXJuIGludCBnX3hmcnhsYSwg eGZyeGxhOworI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKworLyogUmVzdG9yZSAvIHJlc2V0IHBlci1j b21tYW5kIGZpbGUtdHJhbnNmZXIgc3dpdGNoZXMgKi8KKworICAgIG1ha2VzdHIoJnNuZF9tb3Zl LGdfc25kX21vdmUpOworICAgIG1ha2VzdHIoJnJjdl9tb3ZlLGdfcmN2X21vdmUpOworICAgIG1h a2VzdHIoJnNuZF9yZW5hbWUsZ19zbmRfcmVuYW1lKTsKKyAgICBtYWtlc3RyKCZyY3ZfcmVuYW1l LGdfcmN2X3JlbmFtZSk7CisKKyAgICBrYWN0aXZlID0gMDsgICAgICAgICAgICAgICAgICAgICAg ICAvKiBLZXJtaXQgcHJvdG9jb2wgbm8gbG9uZ2VyIGFjdGl2ZSAqLworICAgIG9vcHRzID0gLTE7 ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE8tUGFja2V0IE9wdGlvbnMgKi8KKyAgICBvbW9k ZSA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBPLVBhY2tldCBUcmFuc2ZlciBNb2Rl ICovCisgICAgb25hbWUgPSAtMTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogTy1QYWNrZXQg RmlsZW5hbWUgT3B0aW9ucyAqLworICAgIG9wYXRoID0gLTE7ICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIE8tUGFja2V0IFBhdGhuYW1lIE9wdGlvbnMgKi8KKworI2lmZGVmIENLX1JFU0VORAor ICAgIHJzX2xlbiA9IDBMOwkJCS8qIFJFR0VUIHBvc2l0aW9uICovCisjZW5kaWYgLyogQ0tfUkVT RU5EICovCisKKyNpZmRlZiBDT01NRU5UCisjaWZkZWYgQ0tfU1BFRUQKKyAgICBpZiAoZl9jdGxw KSB7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKKyAgICAgICAgICBjdGxwW2ld ID0gc19jdGxwW2ldOworICAgICAgICBmX2N0bHAgPSAwOworICAgIH0KKyNlbmRpZiAvKiBDS19T UEVFRCAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKworI2lmZGVmIENLX1RNUERJUgorICAgIGlm IChmX3RtcGRpcikgewkJCS8qIElmIHdlIGNoYW5nZWQgdG8gZG93bmxvYWQgZGlyICovCisJemNo ZGlyKChjaGFyICopIHNhdmRpcik7CS8qIEdvIGJhY2sgd2hlcmUgd2UgY2FtZSBmcm9tICovCisJ Zl90bXBkaXIgPSAwOworICAgIH0KKyNlbmRpZiAvKiBDS19UTVBESVIgKi8KKworICAgIGNhbGli cmF0ZSA9IDBMOyAgICAgICAgICAgICAgICAgICAgIC8qIENhbGlicmF0aW9uIHJ1biAqLworICAg IGlmICh4cmVsaWFibGUgPiAtMSkgeworCXJlbGlhYmxlID0geHJlbGlhYmxlOworCWRlYnVnKEYx MDEsImZ0cmVzZXQgcmVsaWFibGUiLCIiLHJlbGlhYmxlKTsKKyAgICB9CisgICAgdXJjbGVhciA9 IDA7CisKKyAgICBpZiAoYXV0b3BhdGgpIHsgICAgICAgICAgICAgICAgICAgICAvKiBTRVQgUkVD RUlWRSBQQVRITkFNRVMgQVVUTyAqLworICAgICAgICBmbnJwYXRoID0gUEFUSF9BVVRPOworICAg ICAgICBhdXRvcGF0aCA9IDA7CisgICAgfQorICAgIGlmIChmaWxlZmlsZSkgeyAgICAgICAgICAg ICAgICAgICAgIC8qIEZpbGUgbGlzdCAqLworICAgICAgICB6Y2xvc2UoWk1GSUxFKTsKKyAgICAg ICAgbWFrZXN0cigmZmlsZWZpbGUsTlVMTCk7CisgICAgfQorICAgIGlmIChjX3NhdmUgPiAtMSkg eyAgICAgICAgICAgICAgICAgIC8qIEJsb2NrIENoZWNrIFR5cGUgKi8KKyAgICAgICAgYmN0ciA9 IGNfc2F2ZTsKKyAgICAgICAgY19zYXZlID0gLTE7CisgICAgfQorICAgIGlmIChzc19zYXZlID4g LTEpIHsgICAgICAgICAgICAgICAgIC8qIFNsb3cgU3RhcnQgKi8KKyAgICAgICAgc2xvc3RhcnQg PSBzc19zYXZlOworICAgICAgICBzc19zYXZlID0gLTE7CisgICAgfQorI2lmZGVmIENLX0xBQkVM RUQKKyAgICBpZiAoZ19sZl9vcHRzID4gLTEpIHsKKyAgICAgICAgbGZfb3B0cyA9IGdfbGZfb3B0 czsgICAgICAgICAgICAvKiBSZXN0b3JlIGxhYmVsZWQgdHJhbnNmZXIgb3B0aW9ucyAqLworICAg ICAgICBnX2xmX29wdHMgPSAtMTsKKyAgICB9CisjZW5kaWYgLyogQ0tfTEFCRUxFRCAqLworCisj aWZuZGVmIE5PQ1NFVFMKKyAgICBpZiAodGNzX3NhdmUgPiAtMSkgeyAgICAgICAgICAgICAgICAv KiBDaGFyYWN0ZXIgc2V0cyAqLworICAgICAgICB0Y2hhcnNldCA9IHRjc19zYXZlOworICAgICAg ICB0Y3Nfc2F2ZSA9IC0xOworICAgIH0KKyAgICBpZiAoZmNzX3NhdmUgPiAtMSkgeworICAgICAg ICBmY2hhcnNldCA9IGZjc19zYXZlOworICAgICAgICBmY3Nfc2F2ZSA9IC0xOworICAgIH0KKyAg ICBpZiAoZ194ZnJ4bGEgPiAtMSkgeworCXhmcnhsYSA9IGdfeGZyeGxhOworCWdfeGZyeGxhID0g LTE7CisgICAgfQorICAgIHNldHhsYXR5cGUodGNoYXJzZXQsZmNoYXJzZXQpOyAgICAgIC8qIFRy YW5zbGF0aW9uIHR5cGUgKi8KKyNlbmRpZiAvKiBOT0NTRVRTICovCisKKyNpZmRlZiBORVRDT05O CisjaWZuZGVmIE5PU1BMCisgICAgaWYgKGdfcHN3ZCkgeworICAgICAgICBja3N0cm5jcHkocHdi dWYsZ19wc3dkLFBXQlVGTCk7CisgICAgICAgIG1ha2VzdHIoJmdfcHN3ZCxOVUxMKTsKKyAgICB9 CisgICAgaWYgKGdfcGZsZyA+IC0xKSB7CisgICAgICAgIHB3ZmxnID0gZ19wZmxnOworICAgICAg ICBnX3BmbGcgPSAtMTsKKyAgICB9CisgICAgaWYgKGdfcGNwdCA+IC0xKSB7CisgICAgICAgIHB3 Y3J5cHQgPSBnX3BjcHQ7CisgICAgICAgIGdfcGNwdCA9IC0xOworICAgIH0KKyNlbmRpZiAvKiBO T1NQTCAqLworI2VuZGlmIC8qIE5FVENPTk4gKi8KKworICAgIGlmIChnX2JpbmFyeSA+IC0xKSB7 ICAgICAgICAgICAgICAgIC8qIEZpbGUgdHlwZSAqLworICAgICAgICBiaW5hcnkgPSBnX2JpbmFy eTsKKyAgICAgICAgZ19iaW5hcnkgPSAtMTsKKyAgICB9CisgICAgaWYgKGdfeGZlcm1vZGUgPiAt MSkgeyAgICAgICAgICAgICAgLyogVHJhbnNmZXIgbW9kZSAqLworICAgICAgICB4ZmVybW9kZSA9 IGdfeGZlcm1vZGU7CisgICAgICAgIGdfeGZlcm1vZGUgPSAtMTsKKyAgICB9CisjaWZkZWYgUEFU VEVSTlMKKyAgICBpZiAoZ19wYXR0ZXJucyA+IC0xKSB7ICAgICAgICAgICAgICAvKiBGaWxlbmFt ZSBwYXR0ZXJucyAqLworICAgICAgICBwYXR0ZXJucyA9IGdfcGF0dGVybnM7CisgICAgICAgIGdf cGF0dGVybnMgPSAtMTsKKyAgICB9CisjZW5kaWYgLyogUEFUVEVSTlMgKi8KKworICAgIGlmIChn X3VzZXBpcGVzID4gLTEpIHsKKyAgICAgICAgdXNlcGlwZXMgPSBnX3VzZXBpcGVzOworICAgICAg ICBnX3VzZXBpcGVzID0gLTE7CisgICAgfQorICAgIGlmIChnX21hdGNoZG90ID4gLTEpIHsKKyAg ICAgICAgbWF0Y2hkb3QgPSBnX21hdGNoZG90OworICAgICAgICBnX21hdGNoZG90ID0gLTE7Cisg ICAgfQorICAgIGlmIChnX3Byb3RvID4gLTEpIHsgICAgICAgICAgICAgICAgIC8qIFByb3RvY29s ICovCisgICAgICAgIHByb3RvY29sID0gZ19wcm90bzsKKyAgICAgICAgZ19wcm90byA9IC0xOwor ICAgIH0KKyAgICBpZiAoZ191cnBzaXogPiAtMSkgeworICAgICAgICB1cnBzaXogPSBnX3VycHNp ejsKKyAgICAgICAgZGVidWcoRjEwMSwiZnRyZXNldCByZXN0b3JpbmcgdXJwc2l6IiwiIix1cnBz aXopOworICAgICAgICBnX3VycHNpeiA9IC0xOworICAgIH0KKyAgICBpZiAoZ19zcHNpemYgPiAt MSkgeworICAgICAgICBzcHNpemYgPSBnX3Nwc2l6ZjsKKyAgICAgICAgZGVidWcoRjEwMSwiZnRy ZXNldCByZXN0b3Jpbmcgc3BzaXpmIiwiIixzcHNpemYpOworICAgICAgICBnX3Nwc2l6ZiA9IC0x OworICAgIH0KKyAgICBpZiAoZ19zcHNpeiA+IC0xKSB7CisgICAgICAgIHNwc2l6ID0gZ19zcHNp ejsKKyAgICAgICAgZGVidWcoRjEwMSwiZnRyZXNldCByZXN0b3Jpbmcgc3BzaXoiLCIiLHNwc2l6 KTsKKyAgICAgICAgZ19zcHNpeiA9IC0xOworICAgIH0KKyAgICBpZiAoZ19zcHNpenIgPiAtMSkg eworICAgICAgICBzcHNpenIgPSBnX3Nwc2l6cjsKKyAgICAgICAgZGVidWcoRjEwMSwiZnRyZXNl dCByZXN0b3Jpbmcgc3BzaXpyIiwiIixzcHNpenIpOworICAgICAgICBnX3Nwc2l6ciA9IC0xOwor ICAgIH0KKyAgICBpZiAoZ19zcG1heCA+IC0xKSB7CisgICAgICAgIHNwbWF4ID0gZ19zcG1heDsK KyAgICAgICAgZ19zcG1heCA9IC0xOworICAgIH0KKyAgICBpZiAoZ193c2xvdHIgPiAtMSkgewor ICAgICAgICB3c2xvdHIgPSBnX3dzbG90cjsKKyAgICAgICAgZ193c2xvdHIgPSAtMTsKKyAgICB9 CisgICAgaWYgKGdfcHJlZml4aW5nID4gLTEpIHsKKyAgICAgICAgcHJlZml4aW5nID0gZ19wcmVm aXhpbmc7CisgICAgICAgIGdfcHJlZml4aW5nID0gLTE7CisgICAgfQorICAgIGlmIChnX2ZuY2Fj dCA+IC0xKSB7CisgICAgICAgIGZuY2FjdCA9IGdfZm5jYWN0OworICAgICAgICBnX2ZuY2FjdCA9 IC0xOworICAgIH0KKyAgICBpZiAoZ19mbmNudiA+IC0xKSB7CisgICAgICAgIGZuY252ID0gZ19m bmNudjsKKyAgICAgICAgZ19mbmNudiA9IC0xOworICAgIH0KKyAgICBpZiAoZ19mbnNwYXRoID4g LTEpIHsKKyAgICAgICAgZm5zcGF0aCA9IGdfZm5zcGF0aDsKKyAgICAgICAgZ19mbnNwYXRoID0g LTE7CisgICAgfQorICAgIGlmIChnX2ZucnBhdGggPiAtMSkgeworICAgICAgICBmbnJwYXRoID0g Z19mbnJwYXRoOworICAgICAgICBnX2ZucnBhdGggPSAtMTsKKyAgICB9CisgICAgaWYgKGdfc2tp cGJ1cCA+IC0xKSB7CisgICAgICAgIHNraXBidXAgPSBnX3NraXBidXA7CisgICAgICAgIGdfc2tp cGJ1cCA9IC0xOworICAgIH0KKyAgICBub2xpbmtzID0gMjsJCQkvKiAvRk9MTE9XTElOS1MgaXMg bmV2ZXIgZ2xvYmFsICovCisgICAgcmVjdXJzaXZlID0gMDsgICAgICAgICAgICAgICAgICAgICAg LyogL1JFQ1VSU0lWRSBjYW4gbmV2ZXIgYmUgZ2xvYmFsICovCisgICAgeGZpbGV0eXBlID0gLTE7 CisKKyAgICBpZiAoZ19kaXNwbGEgPiAtMSkgeyAgICAgICAgICAgICAgICAvKiBGaWxlIHRyYW5z ZmVyIGRpc3BsYXkgKi8KKyAgICAgICAgZmRpc3BsYSA9IGdfZGlzcGxhOworICAgICAgICBnX2Rp c3BsYSA9IC0xOworICAgIH0KKyAgICBpZiAoZ19zcGF0aCA+IC0xKSB7ICAgICAgICAgICAgICAg ICAvKiBTZW5kIHBhdGhuYW1lcyAqLworICAgICAgICBmbnNwYXRoID0gZ19zcGF0aDsKKyAgICAg ICAgZ19zcGF0aCA9IC0xOworICAgIH0KKyAgICBpZiAoZ19ycGF0aCA+IC0xKSB7ICAgICAgICAg ICAgICAgICAvKiBSZWNlaXZlIHBhdGhuYW1lcyAqLworICAgICAgICBmbnJwYXRoID0gZ19ycGF0 aDsKKyAgICAgICAgZ19ycGF0aCA9IC0xOworICAgIH0KKyAgICBpZiAoZ19mbmNudiA+IC0xKSB7 ICAgICAgICAgICAgICAgICAvKiBGaWxlbmFtZSBjb252ZXJzaW9uICovCisgICAgICAgIGZuY252 ID0gZ19mbmNudjsKKyAgICAgICAgZ19mbmNudiA9IC0xOworICAgIH0KKyNpZmRlZiBQSVBFU0VO RAorICAgIG1ha2VzdHIoJnNuZGZpbHRlcixnX3NmaWx0ZXIpOyAgICAgIC8qIFNlbmQgZmlsdGVy ICovCisgICAgbWFrZXN0cigmcmN2ZmlsdGVyLGdfcmZpbHRlcik7ICAgICAgLyogUmVjZWl2ZSBm aWx0ZXIgKi8KKyNlbmRpZiAvKiBQSVBFU0VORCAqLworCisjaWZuZGVmIE5PRlJJTExTCisgICAg cm1haWxmID0gcnByaW50ZiA9IDA7ICAgICAgICAgICAgICAgLyogTUFJTCBhbmQgUFJJTlQgbW9k aWZpZXJzIGZvciBTRU5EICovCisgICAgb3B0YnVmWzBdID0gTlVMOyAgICAgICAgICAgICAgICAg ICAgLyogTUFJTCBhbmQgUFJJTlQgb3B0aW9ucyAqLworI2VuZGlmIC8qIE5PRlJJTExTICovCisK KyAgICBtb3ZpbmcgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXNldCBkZWxldGUt YWZ0ZXItc2VuZCBpbmRpY2F0b3IgKi8KKyAgICBzbmRhZnRlclswXSAgPSBOVUw7ICAgICAgICAg ICAgICAgICAvKiBSZXNldCBTRU5EIHNlbGVjdGlvbiBzd2l0Y2hlcyAqLworICAgIHNuZGJlZm9y ZVswXSA9IE5VTDsKKworICAgIGZvciAoaSA9IDA7IGkgPCBOU05ERVhDRVBUOyBpKyspIHsKKyAg ICAgICAgaWYgKHNuZGV4Y2VwdFtpXSkKKyAgICAgICAgICBmcmVlKHNuZGV4Y2VwdFtpXSk7Cisg ICAgICAgIHNuZGV4Y2VwdFtpXSA9IE5VTEw7CisgICAgICAgIGlmIChyY3ZleGNlcHRbaV0pCisg ICAgICAgICAgZnJlZShyY3ZleGNlcHRbaV0pOworICAgICAgICByY3ZleGNlcHRbaV0gPSBOVUxM OworICAgIH0KKyAgICBzbmRsYXJnZXIgPSAgKENLX09GRl9UKS0xOworICAgIHNuZHNtYWxsZXIg PSAoQ0tfT0ZGX1QpLTE7CisgICAgZGVidWcoRjEwMSwicHJlc2VudCBzbmRzbWFsbGVyIiwiIixz bmRzbWFsbGVyKTsKKyNpZmRlZiBHRlRJTUVSCisgICAgZ3R2ID0gLTEuMDsKKyAgICBvbGRndHYg PSAtMS4wOworI2Vsc2UKKyAgICBndHYgPSAtMUw7CisgICAgb2xkZ3R2ID0gLTFMOworI2VuZGlm IC8qIEdGVElNRVIgKi8KKyNlbmRpZiAvKiBOT0lDUCAqLworfQorI2VuZGlmIC8qIE5PWEZFUiAq LworCitjaGFyICoKK3R0Z3RwbigpIHsJCQkJLyogR2V0IHR5cGljYWwgcG9ydCBuYW1lICovCisv KgorICBJZGVhbGx5IHRoaXMgcm91dGluZSB3b3VsZCBiZSBpbXBsZW1lbnRlZCBpbiBlYWNoIG9m IHRoZSBja3U/aW8uKiBtb2R1bGVzLAorICBidXQgdGhhdCByZXF1aXJlcyBjaGFuZ2luZyB0aGUg QVBJIGRlZmluaXRpb24uCisqLworICAgIHJldHVybigKKyNpZmRlZiBPUzIKKyNpZmRlZiBPUzJP TkxZCisiQ09NMSIKKyNlbHNlICAvKiBPUzJPTkxZICovCisiVEFQSSBbIG5hbWUgXSBvciBDT00x IgorI2VuZGlmIC8qIE9TMk9OTFkgKi8KKyNlbHNlICAvKiBPUzIgKi8KKyNpZmRlZiBWTVMKKyJU WEEwOiwgVFRBMDosIG9yIExUQTA6IgorI2Vsc2UgIC8qIFZNUyAqLworI2lmZGVmIFNPTEFSSVMK KyIvZGV2L2N1YS9hIgorI2Vsc2UgIC8qIFNPTEFSSVMgKi8KKyNpZmRlZiBIUFVYMTAKKyIvZGV2 L2N1YTBwMCIKKyNlbHNlICAvKiBIUFVYMTAgKi8KKyNpZmRlZiBIUFVYCisiL2Rldi9jdWEwMCIK KyNlbHNlICAvKiBIUFVYICovCisjaWZkZWYgX19GcmVlQlNEX18KKyIvZGV2L2N1YWEwIgorI2Vs c2UgIC8qIF9fRnJlZUJTRF9fICovCisjaWZkZWYgX19saW51eF9fCisiL2Rldi90dHlTMCIKKyNl bHNlICAvKiBfX2xpbnV4X18gKi8KKyNpZmRlZiBCU0Q0NAorIi9kZXYvdHR5MDAiCisjZWxzZSAg LyogQlNENDQgKi8KKyNpZmRlZiBPU0sKKyIvdDEiCisjZWxzZSAgLyogT1NLICovCisjaWZkZWYg UU5YCisiL2Rldi9zZXIxIgorI2Vsc2UgIC8qIFFOWCAqLworI2lmZGVmIFFOWDYKKyIvZGV2L3Nl cjEiCisjZWxzZSAgLyogUU5YNiAqLworI2lmZGVmIFVOSVhXQVJFCisiL2Rldi90ZXJtLzAwIG9y IC9kZXYvdHR5MDAiCisjZWxzZSAgLyogVU5JWFdBUkUgKi8KKyNpZmRlZiBDS19TQ09WNQorIi9k ZXYvdHR5MUEiCisjZWxzZSAgLyogQ0tfU0NPVjUgKi8KKyNpZmRlZiBDS19TQ08zMlY0CisiL2Rl di90dHkxQSIKKyNlbHNlICAvKiBDS19TQ08zMlY0ICovCisjaWZkZWYgTV9YRU5JWAorIi9kZXYv dHR5MUEiCisjZWxzZSAgLyogTV9YRU5JWCAqLworI2lmZGVmIEFJWFJTCisiL2Rldi90dHkwIgor I2Vsc2UgIC8qIEFJWFJTICovCisjaWZkZWYgREdVWAorIi9kZXYvdHR5MDAiCisjZWxzZSAgLyog REdVWCAqLworI2lmZGVmIGRhdGFnZW5lcmFsCisiQGNvbjEiCisjZWxzZSAgLyogZGF0YWdlbmVy YWwgKi8KKyNpZmRlZiBJUklYCisiL2Rldi90dHltMCIKKyNlbHNlICAvKiBJUklYICovCisjaWZk ZWYgU1VOT1M0CisiL2Rldi90dHloMCIKKyNlbHNlICAvKiBTVU5PUzQgKi8KKyNpZmRlZiBTVjY4 UjNWNgorIi9kZXYvc2NjMCIKKyNlbHNlICAvKiBTVjY4UjNWNiAqLworI2lmZGVmIE1PVFNWODhS NAorIi9kZXYvY29udHR5MDAiCisjZWxzZSAgLyogTU9UU1Y4OFI0ICovCisjaWZkZWYgTkVYVAor Ii9kZXYvY3VmYSIKKyNlbHNlCisjaWZkZWYgT1NGCisiL2Rldi90dHlkMSIKKyNlbHNlCisjaWZk ZWYgU0lOSVgKKyIvZGV2L3R0eWMxIgorI2Vsc2UKKyNpZmRlZiBVTklYCisiL2Rldi9jdWEsIC9k ZXYvYWN1LCAvZGV2L3R0eTAsIGV0YyIKKyNlbHNlICAvKiBVTklYICovCisiKHNvcnJ5IG5vIGV4 YW1wbGUgYXZhaWxhYmxlKSIKKyNlbmRpZiAvKiBVTklYICovCisjZW5kaWYgLyogU0lOSVggKi8K KyNlbmRpZiAvKiBPU0YgKi8KKyNlbmRpZiAvKiBORVhUICovCisjZW5kaWYgLyogTU9UU1Y4OFI0 ICovCisjZW5kaWYgLyogU1Y2OFIzVjYgKi8KKyNlbmRpZiAvKiBTVU5PUzQgKi8KKyNlbmRpZiAv KiBJUklYICovCisjZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KKyNlbmRpZiAvKiBER1VYICovCisj ZW5kaWYgLyogQUlYICovCisjZW5kaWYgLyogTV9YRU5JWCAqLworI2VuZGlmIC8qIENLX1NDTzMy VjQgKi8KKyNlbmRpZiAvKiBDS19TQ09WNSAqLworI2VuZGlmIC8qIFVOSVhXQVJFICovCisjZW5k aWYgLyogUU5YNiAqLworI2VuZGlmIC8qIFFOWCAqLworI2VuZGlmIC8qIE9TSyAqLworI2VuZGlm IC8qIEJTRDQ0ICovCisjZW5kaWYgLyogX19saW51eF9fICovCisjZW5kaWYgLyogX19GcmVlQlNE X18gKi8KKyNlbmRpZiAvKiBIUFVYICovCisjZW5kaWYgLyogSFBVWDEwICovCisjZW5kaWYgLyog U09MQVJJUyAqLworI2VuZGlmIC8qIFZNUyAqLworI2VuZGlmIC8qIE9TMiAqLworCSAgICk7Cit9 CisKKy8qICBDIEsgXyBFIFIgUiBTIFQgUiAgLS0gIFJldHVybiBtZXNzYWdlIGZyb20gbW9zdCBy ZWNlbnQgc3lzdGVtIGVycm9yICovCisKKyNpZmRlZiBDS1JPT1QKK2V4dGVybiBpbnQgY2tyb290 ZXJyOworI2VuZGlmIC8qIENLUk9PVCAqLworCitjaGFyICoKK2NrX2VycnN0cigpIHsKKyNpZmRl ZiBVU0VfU1RSRVJST1IKKyNpZm5kZWYgQ0tfQU5TSUxJQlMKKyAgICAvKiBTaG91bGQgaGF2ZSBi ZWVuIGRlY2xhcmVkIGluIDxzdHJpbmcuaD4gKi8KK19QUk9UT1RZUCggY2hhciAqIHN0cmVycm9y LCAoaW50KSApOworI2VuZGlmIC8qIENLX0FOU0lMSUJTICovCisjaWZkZWYgQ0tST09UCisgICAg aWYgKGNrcm9vdGVycikKKyAgICAgIHJldHVybigiT2ZmIGxpbWl0cyIpOworI2VuZGlmIC8qIENL Uk9PVCAqLworICAgIHJldHVybihzdHJlcnJvcihlcnJubykpOworI2Vsc2UgIC8qICFVU0VfU1RS RVJST1IgKi8KKyNpZmRlZiBWTVMKKyAgICBleHRlcm4gY2hhciAqIGNrdm1zZXJyc3RyKHVuc2ln bmVkIGxvbmcpOworI2lmZGVmIENLUk9PVAorICAgIGlmIChja3Jvb3RlcnIpCisgICAgICByZXR1 cm4oIk9mZiBsaW1pdHMiKTsKKyNlbmRpZiAvKiBDS1JPT1QgKi8KKyAgICByZXR1cm4oY2t2bXNl cnJzdHIoMEwpKTsKKyNlbHNlICAvKiAhVk1TICovCisjaWZkZWYgQlNENDQKKyNpZmRlZiBfXzM4 NkJTRF9fCisjaWZuZGVmIE5EU1lTRVJSTElTVAorICAgIGV4dGVybiBpbnQgc3lzX25lcnI7Cisg ICAgZXh0ZXJuIGNoYXIgKnN5c19lcnJsaXN0W107CisjZW5kaWYgLyogTkRTWVNFUlJMSVNUICov CisjZWxzZSAgLyogIV9fMzg2QlNEX18gKi8KKyNpZm5kZWYgX19ic2RpX18KKyNpZm5kZWYgTkRT WVNFUlJMSVNUCisgICAgZXh0ZXJuIGludCBzeXNfbmVycjsKKyAgICBleHRlcm4gY29uc3QgY2hh ciAqY29uc3Qgc3lzX2Vycmxpc3RbXTsKKyNlbmRpZiAvKiBORFNZU0VSUkxJU1QgKi8KKyNlbmRp ZiAvKiBfX2JzZGlfXyAqLworI2VuZGlmIC8qIF9fMzg2QlNEX18gKi8KKyNpZmRlZiBDS1JPT1QK KyAgICBpZiAoY2tyb290ZXJyKQorICAgICAgcmV0dXJuKCJPZmYgbGltaXRzIik7CisgICAgZWxz ZQorI2VuZGlmIC8qIENLUk9PVCAqLworICAgIGlmIChlcnJubyA+PSBzeXNfbmVycikKKyAgICAg IHJldHVybigiRXJyb3IgbnVtYmVyIG91dCBvZiByYW5nZSIpOworICAgIGVsc2UKKyAgICAgIHJl dHVybigoY2hhciAqKSBzeXNfZXJybGlzdFtlcnJub10pOworI2Vsc2UgLyogIUJTRDQ0ICovCisj aWZkZWYgQVRUU1YKKyNpZm5kZWYgTkRTWVNFUlJMSVNUCisgICAgZXh0ZXJuIGludCBzeXNfbmVy cjsKKyAgICBleHRlcm4gY2hhciAqc3lzX2Vycmxpc3RbXTsKKyNlbmRpZiAvKiBORFNZU0VSUkxJ U1QgKi8KKyNpZmRlZiBDS1JPT1QKKyAgICBpZiAoY2tyb290ZXJyKQorICAgICAgcmV0dXJuKCJP ZmYgbGltaXRzIik7CisgICAgZWxzZQorI2VuZGlmIC8qIENLUk9PVCAqLworICAgIGlmIChlcnJu byA+PSBzeXNfbmVycikKKyAgICAgIHJldHVybigiRXJyb3IgbnVtYmVyIG91dCBvZiByYW5nZSIp OworICAgIGVsc2UKKyAgICAgIHJldHVybigoY2hhciAqKSBzeXNfZXJybGlzdFtlcnJub10pOwor I2Vsc2UgLyogIUFUVFNWICovCisjaWZkZWYgQlNENAorI2lmbmRlZiBORFNZU0VSUkxJU1QKKyAg ICBleHRlcm4gaW50IHN5c19uZXJyOworICAgIGV4dGVybiBjaGFyICpzeXNfZXJybGlzdFtdOwor I2VuZGlmIC8qIE5EU1lTRVJSTElTVCAqLworI2lmZGVmIENLUk9PVAorICAgIGlmIChja3Jvb3Rl cnIpCisgICAgICByZXR1cm4oIk9mZiBsaW1pdHMiKTsKKyAgICBlbHNlCisjZW5kaWYgLyogQ0tS T09UICovCisgICAgaWYgKGVycm5vID49IHN5c19uZXJyKQorICAgICAgcmV0dXJuKCJFcnJvciBu dW1iZXIgb3V0IG9mIHJhbmdlIik7CisgICAgZWxzZQorICAgICAgcmV0dXJuKChjaGFyICopIHN5 c19lcnJsaXN0W2Vycm5vXSk7CisjZWxzZQorI2lmZGVmIE9TMgorI2lmbmRlZiBORFNZU0VSUkxJ U1QKKyAgICBleHRlcm4gY2hhciAqc3lzX2Vycmxpc3RbXTsKKyNlbmRpZiAvKiBORFNZU0VSUkxJ U1QgKi8KKyNpZmRlZiBOVAorICAgIGV4dGVybiBpbnRfc3lzX25lcnI7CisjZW5kaWYgLyogTlQg Ki8KKyAgICBjaGFyICplOworI2lmZGVmIENLUk9PVAorICAgIGlmIChja3Jvb3RlcnIpCisgICAg ICByZXR1cm4oIk9mZiBsaW1pdHMiKTsKKyNlbmRpZiAvKiBDS1JPT1QgKi8KKyAgICBlID0gKGVy cm5vID4gLTEKKyNpZmRlZiBOVAorICAgICAgICAgJiYgZXJybm8gPD0gX3N5c19uZXJyCisjZW5k aWYgLyogTlQgKi8KKyAgICAgICAgICkgPworI2lmZGVmIE5UCisgICAgICAgICAoY2hhciAqKSBz eXNfZXJybGlzdFtlcnJub10KKyNlbHNlIC8qIE5UICovCisgICAgICAgICAvKiBJIGRvbid0IGtu b3cgaG93IHRvIGdldCBhIENMSUIgZXJyb3Igc3RyaW5nIGluIE9TLzIgKi8KKyAgICAgICAgIHN0 cmVycm9yKGVycm5vKQorI2VuZGlmIC8qIE5UICovCisgICAgICAgICAgICAgOiAiIjsKKyAgICBy ZXR1cm4oZSA/IGUgOiAiIik7CisjZWxzZSAvKiBPUzIgKi8KKyAgICByZXR1cm4oIiIpOworI2Vu ZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIEJTRDQgKi8KKyNlbmRpZiAvKiBBVFRTViAqLworI2Vu ZGlmIC8qIEJTRDQ0ICovCisjZW5kaWYgLyogVk1TICovCisjZW5kaWYgLyogVVNFX1NUUkVSUk9S ICovCit9CisKKyNpZmRlZiBQQVRURVJOUworLyoKKyAgRmlsZW5hbWUgcGF0dGVybiByZWNvZ25p dGlvbiBsaXN0cyBmb3IgYXV0b21hdGljIHRleHQvYmluYXJ5IHN3aXRjaGluZy4KKyAgVGhlc2Ug YXJlIHNvbWV3aGF0IHBhc3NlIGFmdGVyIHRoZSBhZGRpdGlvbiBvZiBzY2FuZmlsZSgpICAoNy4w KS4KKyAgQnV0IHdpdGggdGhlIGFkZGl0aW9uIG9mIEZUUCBbTV1HRVQsIHRoZXkncmUgYmFjayBp biBzdHlsZSAoOC4wKS4KKworICBBbHRob3VnaCwgd2l0aCBGVFAgdGhlIGxpc3RzIG5lZWQgdG8g YmUgdXNlZCBpbiB0aGUgcmV2ZXJzZS4gIFdpdGgKKyAgS2VybWl0IHRoZSBsaXN0IGlzIHVzZWQg dG8gaW1wbHkgdGhlIHR5cGVzIG9mIHRoZSBsb2NhbCBzeXN0ZW0uICBXaGVyZWFzCisgIHdpdGgg RlRQLCB0aGUgbGlzdCBtdXN0IGJlIHVzZWQgdG8gaW1wbHkgdGhlIHR5cGUgb2YgdGhlIHJlbW90 ZSBzeXN0ZW0uCisgIFRoZXJlZm9yZSwgYWxsIHBsYXRmb3JtcyBtdXN0IG5vdyBzdXBwb3J0IGFs bCBvZiB0aGUgbGlzdHMuCisqLworY2hhciAqdHh0cGF0dGVybnNbRlRQQVRURVJOUysxXSA9IHsg TlVMTCwgTlVMTCB9OworY2hhciAqYmlucGF0dGVybnNbRlRQQVRURVJOUysxXSA9IHsgTlVMTCwg TlVMTCB9OworLyoKKyAgRGVmYXVsdCBwYXR0ZXJuIGxpc3RzIGZvciBlYWNoIHBsYXRmb3JtLi4u CisKKyAgTk9URTogSW4gbW9zdCBjYXNlcyB3ZSBsZWF2ZSAiLmhscCIsICIuaW5pIiwgYW5kICIu c2NyIiBhbG9uZTsgYWx0aG91Z2ggdGhleQorICBhcmUgdHJhZGl0aW9uYWxseSB0ZXh0IHR5cGVz LCB0aGV5IGFyZSBiaW5hcnkgaW4gV2luZG93cy4gIFNvIHRoZXkgYXJlCisgIGhhbmRsZWQgYnkg dGhlIHByZXZhaWxpbmcgU0VUIEZJTEUgVFlQRSwgcmF0aGVyIHRoYW4gYXV0b21hdGljYWxseS4K KyAgU2ltaWxhcmx5IGZvciAiLmRhdCIsICIuaW5mIiwgYW5kIHNvIG9uLiAgQWxzbyAiLnBzIiBz aW5jZSBQb3N0U2NyaXB0IGZpbGVzCisgIGFyZSBub3QgYWx3YXlzIHRleHQuICAiLmxvZyIgaXMg b21pdHRlZCBzaW5jZSBsb2dzIGNhbiBiZSB0ZXh0IG9yIGJpbmFyeSwKKyAgZXhjZXB0IGluIFZN UyB0aGV5IGFyZSB1c3VhbGx5IHRleHQsIGV0YyBldGMuCisKKyAgTGF0ZXIgKFNlcCAyMDAzKTog QWRkIFBvc3RTY3JpcHQgdG8gYmluYXJ5IHBhdHRlcm5zLgorKi8KK3N0YXRpYyBjaGFyICp0eHRw W1NZU19NQVhdW0ZUUEFUVEVSTlNdID0geworICAgIC8qIFVOS05PV04gKi8geworCU5VTEwsIE5V TEwKKyAgICB9LAorICAgIHsJCQkJCS8qIFVOSVggKi8KKyAgICAiKi50eHQiLCIqLmMiLCIqLmgi LCIqLnIiLCIqLnciLCIqLmNwcCIsIiouY2MiLCIqLmtzYyIsIiouYndyIiwiKi51cGQiLAorICAg ICIqLmh0bWwiLCIqLmh0bSIsIioubXNzIiwiKi50ZXgiLCIqLm5yIiwiW01tXWFrZWZpbGUiLCAi Ki5oZXgiLCAiKi5ocXgiLAorICAgICIqLmZvciIsIiouZjc3IiwiKi5mIiwiKi5GIiwiKi5zIiwi Ki5wYXMiLCIqLmphdmEiLCIqLmVsIiwiKi5saXNwIiwiKi5zaCIsCisgICAgIioubTQiLCIqLnBl cmwiLCIqLnBsIiwiKi5wb2QiLCIqLnBtIiwiKi5hd2siLCIqLnNubyIsIiouc3B0IiwiKi5zZWQi LAorICAgICIqLmtzYyIsIiouVFhUIiwgIipyZWFkLm1lIiwgIipSRUFELk1FIiwgIi4qIiwgIiov LioiLCAiKi5tZW0iLCIqLm1hYyIsCisgICAgTlVMTAorICAgIH0sCisgICAgewkJCQkJLyogV0lO MzIgKi8KKyAgICAiKi50eHQiLCIqLmtzYyIsIiouaHRtIiwiKi5odG1sIiwiKi5iYXQiLCIqLmNt ZCIsIiouamF2IiwiKi5hc20iLCAiKi5oZXgiLAorICAgICIqLmhxeCIsICIqLmMiLCAiKi5oIiwg IiouY3BwIiwgIiouaHBwIiwgIiouY3h4IiwgIiouY3h4IiwgIioudyIsCisgICAgIiouamF2YSIs ICIqLmJ3ciIsICIqLnVwZCIsICIqLm1hayIsICJyZWFkLm1lIiwgIioubWFwIiwgIm1ha2VmaWxl IiwKKyAgICAiKi5tZW0iLCIqLm1hYyIsIiouY2MiLCIqLnBsIiwiKi5wb2QiLCIqLnBtIiwiKi5t NCIsTlVMTAorICAgIH0sCisgICAgewkJCQkJLyogVk1TICovCisgICAgIiouY29tIiwiKi50eHQi LCIqLmMiLCAgIiouZm9yIiwiKi5wYXMiLCIqLnJubyIsIioucm5oIiwiKi5tYXIiLCIqLmJsaSIs CisgICAgIiouaGxwIiwiKi5tc3MiLCIqLmRvYyIsIiouYndyIiwiKi5jbGQiLCIqLmhleCIsIiou YmFzIiwiKi5pbmkiLCIqLmxvZyIsCisgICAgIioubW1zIiwiKi5vcHQiLCIqLmtzYyIsIioucGVy bCIsIioucGwiLCIqLnBvZCIsIioucG0iLCIqLnNubyIsIiouc3B0IiwKKyAgICAiKi5tZW0iLE5V TEwKKyAgICB9LAorICAgIHsJCQkJCS8qIE9TMiAqLworICAgICIqLnR4dCIsIioua3NjIiwiKi5o dG0iLCIqLmh0bWwiLCIqLmJhdCIsIiouY21kIiwiKi5qYXYiLCIqLmFzbSIsICIqLmhleCIsCisg ICAgIiouaHF4IiwgIiouYyIsICIqLmgiLCAiKi5jcHAiLCAiKi5ocHAiLCAiKi5jeHgiLCAiKi5j eHgiLCAiKi53IiwKKyAgICAiKi5qYXZhIiwgIiouYndyIiwgIioudXBkIiwgIioubWFrIiwgInJl YWQubWUiLCAiKi5tYXAiLCAibWFrZWZpbGUiLAorICAgIE5VTEwKKyAgICB9LAorICAgIHsJCQkJ CS8qIERPUyAqLworICAgICIqLnR4dCIsIioua3NjIiwiKi5odG0iLCIqLmJhdCIsIiouY21kIiwi Ki5qYXYiLCIqLmFzbSIsICIqLmhleCIsCisgICAgIiouaHF4IiwgIiouYyIsICIqLmgiLCAiKi5j cHAiLCAiKi5ocHAiLCAiKi5jeHgiLCAiKi5jeHgiLCAiKi53IiwKKyAgICAiKi5id3IiLCAiKi51 cGQiLCAiKi5tYWsiLCAicmVhZC5tZSIsICIqLm1hcCIsICJtYWtlZmlsZSIsIE5VTEwKKyAgICB9 LAorICAgIHsJCQkJCS8qIFRPUFMtMTAgKi8KKyAgICAiKi5jbWQiLCIqLmhscCIsIiouZG9jIiwi Ki5pbmkiLCIqLnR4dCIsIioubWFjIiwiKi5mb3IiLCIqLnNhaSIsIiouYmxpIiwKKyAgICAiKi5w YXMiLCIqLnNubyIsIiouc3B0IiwiKi5wY2wiLCIqLm1zcyIsIioucm5vIiwiKi5iMzYiLCIqLnRl eCIsIioucHViIiwKKyAgICAiKi5yZXEiLCIqLnIzNiIsIioubWVtIiwiKi5id3IiLCIqLmNjbCIs IiouY3RsIiwiKi5ybmgiLCIqLmtzYyIsTlVMTAorICAgIH0sCisgICAgewkJCQkJLyogVE9QUy0y MCAqLworICAgICIqLmNtZCIsIiouaGxwIiwiKi5kb2MiLCIqLmluaSIsIioudHh0IiwiKi5tYWMi LCIqLmZvciIsIiouc2FpIiwiKi5ibGkiLAorICAgICIqLnBhcyIsIiouc25vIiwiKi5zcHQiLCIq LnBjbCIsIioubXNzIiwiKi5ybm8iLCIqLmIzNiIsIioudGV4IiwiKi5wdWIiLAorICAgICIqLnJl cSIsIioucjM2IiwiKi5tZW0iLCIqLmJ3ciIsIiouY2NsIiwiKi5jdGwiLCIqLnJuaCIsIioua3Nj IixOVUxMCisgICAgfSwKKyAgICB7CQkJCQkvKiBTVFJBVFVTIFZPUyAqLworICAgICIqLnR4dCIs Iioua3NjIiwiKi5odG0iLCIqLmh0bWwiLCIqLmJhdCIsICIqLmNtZCIsIiouamF2IiwiKi5hc20i LCIqLmhleCIsCisgICAgIiouaHF4IiwiKi5jIiwgICIqLmgiLCAgIioudyIsICAgIiouamF2YSIs IiouYndyIiwiKi51cGQiLCIqLnR0cCIsIiouY20iLAorICAgICIqLnBsMSIsIiouZW1hY3MiLCAi cmVhZC5tZSIsICIqLnBsIiwgIm1ha2VmaWxlIiwgTlVMTAorICAgIH0sCisgICAgewkJCQkJLyog REcgQU9TL1ZTICovCisgICAgIioudHh0IiwgIiouYyIsICIqLmgiLCAiKi53IiwgIiouZXIiLCAi Ki5id3IiLCAiKi51cGQiLCAicmVhZC5tZSIsCisgICAgIiouY2xpIiwgIioua3NjIiwgTlVMTAor ICAgIH0sCisgICAgewkJCQkJLyogT1NLICovCisgICAgIiouYyIsIiouY3BwIiwiKi5oIiwiKi5h IiwiKmFrZWZpbGUiLCAvKiBwcm9ncmFtIHNvdXJjZXMgKi8KKyAgICAiKi5mb3IiLCIqLmY3NyIs IiouZiIsIiouRiIsIioucyIsIioucGFzIiwiKi5qYXZhIiwiKi5lbCIsIioubGlzcCIsCisgICAg Iiouc2giLCIqLnBlcmwiLCIqLmF3ayIsIiouc25vIiwiKi5zcHQiLCIqLnNlZCIsCisgICAgIiou dHh0IiwiKi53IiwJCQkvKiBnZW5lcmFsIHRleHQgKi8KKyAgICAiKi5rc2MiLCIqLmJ3ciIsIiou dXBkIiwKKyAgICAiKi5odG1sIiwiKi5odG0iLCIqLm1zcyIsIioudGV4IiwiKi5uciIsIiouaGV4 IiwgIiouaHF4IiwKKyAgICAiKi5UWFQiLCAiKnJlYWQubWUiLCAiKlJFQUQuTUUiLCAiLioiLCAi Ki8uKiIsCisgICAgTlVMTAorICAgIH0KK307CisKKy8qIE5vdGU6IC5ET0MgYWRkZWQgdG8gKHNv bWUpIGJpbmFyeSBwYXR0ZXJucyBKdW5lIDE5OTguLi4gTWljcm9zb2Z0IHdpbnMuICovCisKK3N0 YXRpYyBjaGFyICpiaW5wW1NZU19NQVhdW0ZUUEFUVEVSTlNdID0geworICAgIHsJCQkJCS8qIFVO S05PV04gKi8KKyAgICBOVUxMLCBOVUxMCisgICAgfSwKKyAgICB7CQkJCQkvKiBVTklYICovCisg ICAgIiouZ3oiLCIqLloiLCIqLnRneiIsIiouZ2lmIiwgIioudGFyIiwiKi56aXAiLCIqLm8iLCIq LnNvIiwiKi5hIiwiKi5vdXQiLAorICAgICIqLmV4ZSIsICIqLmpwZyIsICIqLmpwZWciLCAiKi50 aWYiLCIqLnRpZmYiLCAiKi5wZGYiLCAiKi5zby4qIiwgIiouY2xhc3MiLAorICAgICIqLnJwbSIs ICIqLmJtcCIsICIqLmJ6MiIsICIqLkJNUCIsICIqLmRsbCIsICIqLmRvYyIsICIqLnZ4ZCIsICIq LmRjeCIsCisgICAgIioueGwqIiwgIioubHpoIiwgIioubGh6IiwgIiouYXUiLCAiKi52b2MiLCAi Ki5tcGciLCAiKi5tcGVnIiwiW3drXWVybWl0IiwKKyAgICAiKi5wcyIsIE5VTEwKKyAgICB9LAor ICAgIHsJCQkJCS8qIFdJTjMyICovCisgICAgIiouZXhlIiwgIiouemlwIiwgIioub2JqIiwgIiou Y29tIiwgIiouZ2lmIiwgIiouanBnIiwgIioud2F2IiwgIioucmFtIiwKKyAgICAiKi5jbGFzcyIs IiouY2xhIiwiKi5kbGwiLCAiKi5kcnYiLCAiKi5vY3giLCAiKi52YngiLCAiKi5saWIiLCAiKi5p Y28iLAorICAgICIqLmJtcCIsICIqLnRpZiIsICIqLnRhciIsICIqLmd6IiwgICIqLnRneiIsICIq LnhsKiIsICIqLmRvYyIsICIqLnZ4ZCIsCisgICAgIioucGRmIiwgIioubHpoIiwgIioudnhkIiwg Iiouc25kIiwgIiouYXUiLCAiKiAudm9jIiwgIioubXBnIiwgIioubXBlZyIsCisgICAgIioucHMi LCBOVUxMCisgICAgfSwKKyAgICB7CQkJCQkvKiBWTVMgKi8KKyAgICAiKi5leGUiLCIqLm9iaiIs IiouYmFrIiwiKi5iaW4iLCIqLmFkZiIsIiouc3RiIiwiKi5tYWkiLCIqLnN5cyIsIiouZG1wIiwK KyAgICAiKi5wcyIsICIqLmRhdCIsIioucGFyIiwgTlVMTAorICAgIH0sCisgICAgewkJCQkJLyog T1MyICovCisgICAgIiouZXhlIiwgIiouemlwIiwgIioub2JqIiwgIiouY29tIiwgIiouZ2lmIiwg IiouanBnIiwgIioud2F2IiwgIioucmFtIiwKKyAgICAiKi5jbGFzcyIsICIqLmNsYSIsICIqLmRs bCIsICIqLmRydiIsICIqLm9jeCIsICIqLnZieCIsICIqLmxpYiIsICIqLmljbyIsCisgICAgIiou Ym1wIiwgIioudGlmIiwgIioudGFyIiwgIiouZ3oiLCAiKi50Z3oiLCAiKi54bCoiLCAiKi5kb2Mi LCAiKi52eGQiLAorICAgICIqLnBkZiIsICIqLnBzIiwgIioubHpoIiwgTlVMTAorICAgIH0sCisg ICAgewkJCQkJLyogRE9TICovCisgICAgIiouZXhlIiwgIiouemlwIiwgIioub2JqIiwgIiouY29t IiwgIiouZ2lmIiwgIiouanBnIiwgIioud2F2IiwgIioucmFtIiwKKyAgICAiKi5jbGEiLCAiKi5k bGwiLCAiKi5kcnYiLCAiKi5vY3giLCAiKi52YngiLCAiKi5saWIiLCAiKi5pY28iLAorICAgICIq LmJtcCIsICIqLnRpZiIsICIqLnRhciIsICIqLmd6IiwgIioudGd6IiwgIioueGwqIiwgIiouZG9j IiwgIioudnhkIiwKKyAgICAiKi5wZGYiLCAiKi5wcyIsICIqLmx6aCIsIE5VTEwKKyAgICB9LAor ICAgIHsJCQkJCS8qIFRPUFMxMCAqLworICAgICIqLmV4ZSIsIiouc2F2IiwiKi5iaW4iLCIqLnJp bSIsIioucmVsIiwiKi51bnYiLCIqLmxpYiIsIioudGFwIiwiKi5kdmkiLAorICAgICIqLnBzIiwg TlVMTAorICAgIH0sCisgICAgewkJCQkJLyogVE9QUzIwICovCisgICAgIiouZXhlIiwiKi5zYXYi LCIqLmJpbiIsIioucmltIiwiKi5yZWwiLCIqLnVudiIsIioubGliIiwiKi50YXAiLCIqLmR2aSIs CisgICAgIioucHMiLCBOVUxMCisgICAgfSwKKyAgICB7CQkJCQkvKiBTVFJBVFVTIFZPUyAqLwor ICAgICIqLmV4ZSIsICIqLnppcCIsICIqLm9iaiIsICIqLmNvbSIsICIqLmdpZiIsICIqLmpwZyIs ICIqLndhdiIsICIqLnJhbSIsCisgICAgIiouY2xhc3MiLCAiKi5jbGEiLCAiKi5kbGwiLCAiKi5k cnYiLCAiKi5vY3giLCAiKi52YngiLCAiKi5saWIiLCAiKi5pY28iLAorICAgICIqLmJtcCIsICIq LnRpZiIsICIqLnRhciIsICIqLmd6IiwgIioudGd6IiwgIioueGwqIiwgIiouZG9jIiwgIioudnhk IiwKKyAgICAiKi5wZGYiLCAiKi5wcyIsICIqLmx6aCIsICIqLnBtIiwgTlVMTAorICAgIH0sCisg ICAgewkJCQkJLyogREcgKi8KKyAgICAiKi5vYiIsICIqLnByIiwgIiouZG1wIiwgIioucHMiLCBO VUxMCisgICAgfSwKKyAgICB7IC8qIE9TSyAqLworICAgICIqLmd6IiwiKi5aIiwiKi56IiwiKi50 Z3oiLCIqLmxoeiIsIioudGFyIiwJLyogYXJjaGl2ZXJzICovCisgICAgIiouemlwIiwiKi5hciIs Iiouem9vIiwiKi5ycG0iLCIqLmx6aCIsCisgICAgLyogb2JqZWN0IGZpbGVzLCBsaWJyYXJpZXMs IGV4ZWN1dGFibGVzICovCisgICAgIiouciIsIioubCIsIiouZXhlIiwgIiouZGxsIiwgIiouc28u KiIsICIqLmNsYXNzIiwKKyAgICAvKiBpbWFnZXMgKi8KKyAgICAiKi5naWYiLCAiKi5qcGciLCAi Ki5qcGVnIiwgIioudGlmIiwiKi50aWZmIiwgIioucGRmIiwgIioucHMiLAorICAgICIqLmJtcCIs ICIqLmJ6MiIsICIqLkJNUCIsIioucGN4IiwKKyAgICBOVUxMCisgICAgfQorfTsKKworLyoKKyAg U2V0IHVwIGRlZmF1bHQgcGF0dGVybiBsaXN0cyBzbyB0aGV5IGNhbiBiZSBmcmVlZCBhbmQgcmUt bWFsbG9jJ2QuCisgIEVhY2ggcGF0dGVybiBsaXN0IG11c3QgdGVybWluYXRlZCBieSBhIG51bGwg ZWxlbWVudC4KKyovCitWT0lECitpbml0cGF0KCkgeworICAgIGludCBpOworICAgIGZvciAoaSA9 IDA7IGkgPCBGVFBBVFRFUk5TOyBpKyspIHsKKyAgICAgICAgdHh0cGF0dGVybnNbaV0gPSBOVUxM OworICAgICAgICBiaW5wYXR0ZXJuc1tpXSA9IE5VTEw7CisgICAgfQorICAgIGZvciAoaSA9IDA7 IGkgPCBGVFBBVFRFUk5TOyBpKyspIHsKKyNpZmRlZiBVTklYCisgICAgICAgIG1ha2VzdHIoJih0 eHRwYXR0ZXJuc1tpXSksdHh0cFtTWVNfVU5JWF1baV0pOworI2Vsc2UgLyogVU5JWCAqLworI2lm ZGVmIE9TMgorI2lmZGVmIE5UCisgICAgICAgIG1ha2VzdHIoJih0eHRwYXR0ZXJuc1tpXSksdHh0 cFtTWVNfV0lOMzJdW2ldKTsKKyNlbHNlIC8qIE5UICovCisgICAgICAgIG1ha2VzdHIoJih0eHRw YXR0ZXJuc1tpXSksdHh0cFtTWVNfT1MyXVtpXSk7CisjZW5kaWYgLyogTlQgKi8KKyNlbHNlIC8q IE9TMiAqLworI2lmZGVmIFZNUworICAgICAgICBtYWtlc3RyKCYodHh0cGF0dGVybnNbaV0pLHR4 dHBbU1lTX1ZNU11baV0pOworI2Vsc2UgLyogVk1TICovCisjaWZkZWYgU1RSQVRVUworICAgICAg ICBtYWtlc3RyKCYodHh0cGF0dGVybnNbaV0pLHR4dHBbU1lTX1ZPU11baV0pOworI2Vsc2UgLyog U1RSQVRVUyAqLworI2lmZGVmIGRhdGFnZW5lcmFsCisgICAgICAgIG1ha2VzdHIoJih0eHRwYXR0 ZXJuc1tpXSksdHh0cFtTWVNfREddW2ldKTsKKyNlbHNlIC8qIGRhdGFnZW5lcmFsICovCisjaWZk ZWYgT1NLCisgICAgICAgIG1ha2VzdHIoJih0eHRwYXR0ZXJuc1tpXSksdHh0cFtTWVNfT1NLXVtp XSk7CisjZWxzZSAvKiBPU0sgKi8KKyAgICAgICAgbWFrZXN0cigmKHR4dHBhdHRlcm5zW2ldKSx0 eHRwW1NZU19VTktdW2ldKTsKKyNlbmRpZiAvKiBPU0sgKi8KKyNlbmRpZiAvKiBkYXRhZ2VuZXJh bCAqLworI2VuZGlmIC8qIFNUUkFUVVMgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBP UzIgKi8KKyNlbmRpZiAvKiBVTklYICovCisgICAgICAgIGlmICghdHh0cFtpXSkKKyAgICAgICAg ICBicmVhazsKKyAgICB9CisgICAgZm9yIChpID0gMDsgaSA8IEZUUEFUVEVSTlM7IGkrKykgewor I2lmZGVmIFVOSVgKKyAgICAgICAgbWFrZXN0cigmKGJpbnBhdHRlcm5zW2ldKSxiaW5wW1NZU19V TklYXVtpXSk7CisjZWxzZSAvKiBVTklYICovCisjaWZkZWYgT1MyCisjaWZkZWYgTlQKKyAgICAg ICAgbWFrZXN0cigmKGJpbnBhdHRlcm5zW2ldKSxiaW5wW1NZU19XSU4zMl1baV0pOworI2Vsc2Ug LyogTlQgKi8KKyAgICAgICAgbWFrZXN0cigmKGJpbnBhdHRlcm5zW2ldKSxiaW5wW1NZU19PUzJd W2ldKTsKKyNlbmRpZiAvKiBOVCAqLworI2Vsc2UgLyogT1MyICovCisjaWZkZWYgVk1TCisgICAg ICAgIG1ha2VzdHIoJihiaW5wYXR0ZXJuc1tpXSksYmlucFtTWVNfVk1TXVtpXSk7CisjZWxzZSAv KiBWTVMgKi8KKyNpZmRlZiBTVFJBVFVTCisgICAgICAgIG1ha2VzdHIoJihiaW5wYXR0ZXJuc1tp XSksYmlucFtTWVNfVk9TXVtpXSk7CisjZWxzZSAvKiBTVFJBVFVTICovCisjaWZkZWYgZGF0YWdl bmVyYWwKKyAgICAgICAgbWFrZXN0cigmKGJpbnBhdHRlcm5zW2ldKSxiaW5wW1NZU19ER11baV0p OworI2Vsc2UgLyogZGF0YWdlbmVyYWwgKi8KKyNpZmRlZiBPU0sKKyAgICAgICAgbWFrZXN0cigm KGJpbnBhdHRlcm5zW2ldKSxiaW5wW1NZU19PU0tdW2ldKTsKKyNlbHNlIC8qIE9TSyAqLworICAg ICAgICBtYWtlc3RyKCYoYmlucGF0dGVybnNbaV0pLGJpbnBbU1lTX1VOS11baV0pOworI2VuZGlm IC8qIE9TSyAqLworI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCisjZW5kaWYgLyogU1RSQVRVUyAq LworI2VuZGlmIC8qIFZNUyAqLworI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIFVOSVggKi8K KyAgICAgICAgaWYgKCFiaW5wW2ldKQorICAgICAgICAgIGJyZWFrOworICAgIH0KK30KKworLyoK KyAgbSBhIHQgYyBoIG4gYSBtIGUgIC0tICBDb21wYXJlIGZpbGVuYW1lIHdpdGggdGV4dCAmIGJp bmFyeSBuYW1lIHBhdHRlcm5zLgorCisgIFJldHVybnM6CisgICAgMCBpZiBuYW1lIG1hdGNoZXMg YSB0ZXh0IHBhdHRlcm4gYnV0IG5vdCBhIGJpbmFyeSBwYXR0ZXJuLgorICAgIDEgaWYgbmFtZSBt YXRjaGVzIGEgYmluYXJ5IHBhdHRlcm4gYnV0IG5vdCBhIHRleHQgcGF0dGVybi4KKyAgIC0xIGlm IG5hbWUgbWF0Y2hlcyBubyBwYXR0ZXJucy4KKyAgIC0yIGlmIG5hbWUgbWF0Y2hlcyBhIGJpbmFy eSBwYXR0ZXJuIGFuZCBhIHRleHQgcGF0dGVybi4KKyovCitpbnQKK21hdGNobmFtZShmaWxlbmFt ZSwgbG9jYWwsIG9zKSBjaGFyICogZmlsZW5hbWU7IGludCBsb2NhbDsgaW50IG9zOyB7CisgICAg aW50IHJjID0gLTE7CQkJLyogUmV0dXJuIGNvZGUgKi8KKyAgICBjaGFyICogbmFtZSwgKiBwOwor I2lmZGVmIE9TMk9SVU5JWAorICAgIGNoYXIgdG1wYnVmW0NLTUFYUEFUSCsxXTsKKyNlbmRpZiAv KiBPUzJPUlVOSVggKi8KKworICAgIG5hbWUgPSBmaWxlbmFtZSA/IGZpbGVuYW1lIDogIiI7CS8q IENvcHkgb2Ygb3JpZ2luYWwgYXJnICovCisgICAgaWYgKHBhdHRlcm5zICYmICpuYW1lKSB7CQkv KiBJZiBQQVRURVJOUyBPTi4uLiAqLworCWludCBpOworCisjaWZkZWYgT1MyT1JVTklYCisJaWYg KGNrbWF0Y2goIiouflsxLTldKn4iLG5hbWUsMSwxKSkgeyAvKiBOYW1lIGhhcyBiYWNrdXAgc3Vm Zml4PyAqLworCSAgICBpbnQgazsKKwkgICAgayA9IGNrc3RybmNweSh0bXBidWYsbmFtZSxDS01B WFBBVEgrMSk7IC8qIFllcywgY29weSBhbmQgc3RyaXAgKi8KKwkgICAgZm9yIChpID0gayAtIDM7 IGkgPiA0OyBpLS0pIHsKKwkJaWYgKHRtcGJ1ZltpXSA9PSAnficgJiYgdG1wYnVmW2ktMV0gPT0g Jy4nKSB7CisJCSAgICB0bXBidWZbaS0xXSA9IE5VTDsKKwkJICAgIGJyZWFrOworCQl9CisJICAg IH0KKwkgICAgbmFtZSA9IHRtcGJ1ZjsJCS8qIEFuZCBwb2ludCB0byBzdHJpcHBlZCBjb3B5ICov CisJfQorI2VuZGlmIC8qIE9TMk9SVU5JWCAqLworCXpzdHJpcChuYW1lLCZwKTsJCS8qIFN0cmlw IHBhdGhuYW1lIHRvbyAqLworCW5hbWUgPSBwOworCisgICAgICAgIGlmIChsb2NhbCkgeworICAg ICAgICAgICAgaWYgKHR4dHBhdHRlcm5zWzBdKSB7CS8qIFNlYXJjaCB0ZXh0IHBhdHRlcm5zICov CisgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IEZUUEFUVEVSTlMgJiYgdHh0cGF0dGVy bnNbaV07IGkrKykgeworICAgICAgICAgICAgICAgICAgICBpZiAoY2ttYXRjaCh0eHRwYXR0ZXJu c1tpXSxuYW1lLGZpbGVjYXNlLDEpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByYyA9IDA7 CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChiaW5wYXR0 ZXJuc1swXSkgewkvKiBBbmQgc2VhcmNoIGJpbmFyeSBwYXR0ZXJucyAqLworICAgICAgICAgICAg ICAgIGZvciAoaSA9IDA7IGkgPCBGVFBBVFRFUk5TICYmIGJpbnBhdHRlcm5zW2ldOyBpKyspIHsK KyAgICAgICAgICAgICAgICAgICAgaWYgKGNrbWF0Y2goYmlucGF0dGVybnNbaV0sbmFtZSxmaWxl Y2FzZSwxKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmMgPSAocmMgPiAtMSkgPyAtMiA6 IDE7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg fQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKwl9IGVsc2UgeworICAgICAgICAg ICAgaWYgKG9zID49IDAgJiYgb3MgPCBTWVNfTUFYKSB7CisJCWlmICh0eHRwW29zXVswXSkgewor CQkgICAgZm9yIChpID0gMDsgaSA8IEZUUEFUVEVSTlMgJiYgdHh0cFtvc11baV07IGkrKykgewor CQkJaWYgKGNrbWF0Y2godHh0cFtvc11baV0sbmFtZSxmaWxlY2FzZSwxKSkgeworCQkJICAgIHJj ID0gMDsKKwkJCSAgICBicmVhazsKKwkJCX0KKwkJICAgIH0KKwkJfQorCQlpZiAoYmlucFtvc11b MF0pIHsKKwkJICAgIGZvciAoaSA9IDA7IGkgPCBGVFBBVFRFUk5TICYmIGJpbnBbb3NdW2ldOyBp KyspIHsKKwkJCWlmIChja21hdGNoKGJpbnBbb3NdW2ldLG5hbWUsZmlsZWNhc2UsMSkpIHsKKwkJ CSAgICByYyA9IChyYyA+IC0xKSA/IC0yIDogMTsKKwkJCSAgICBicmVhazsKKwkJCX0KKwkJICAg IH0KKwkJfQorCSAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZGVidWcoRjExMSwibWF0Y2hu YW1lIixuYW1lLHJjKTsKKyAgICByZXR1cm4ocmMpOworfQorI2VuZGlmIC8qIFBBVFRFUk5TICov CisKKyNpZmRlZiBVTklDT0RFCisjaWZuZGVmIE5PRVZFTk1BWAorI2RlZmluZSBFVkVOTUFYCisj ZW5kaWYgLyogTk9FVkVOTUFYICovCisjZW5kaWYgLyogVU5JQ09ERSAqLworCisvKiAgUyBDIEEg TiBGIEkgTCBFICAtLSAgQW5hbHl6ZSBhIGZpbGUncyBjb250ZW50cyAgKi8KKworLyoKKyAgQ2Fs bCB3aXRoOgorICAgIG5hbWU6ICAgIFBvaW50ZXIgdG8gbmFtZSBvZiBleGlzdGluZyBmaWxlLgor ICAgIGZsYWc6ICAgIFBvaW50ZXIgdG8gaW50IGluIHdoaWNoIHRvIHJldHVybiBhZGRpdGlvbmFs IG51bWVyaWMgZGF0YS4KKworICBSZXR1cm5zOgorICAgIC0xIG9uIGZhaWx1cmUgKHRvIG9wZW4g ZmlsZSBvciB0byByZWFkIGZyb20gaXQpLgorICAgIEludGVnZXIsIDAuLjQsIG9uIHN1Y2Nlc3Mg aW5kaWNhdGluZyBmaWxlIHR5cGU6CisgICAgIDAgPSA3LWJpdCB0ZXh0IChmbGFnID0gLTEpCisg ICAgIDEgPSBVVEYtOCB0ZXh0IChmbGFnID0gLTEpCisgICAgIDIgPSBVQ1MtMiB0ZXh0IChmbGFn ID0gIDA6IGJpZy1lbmRpYW47IGZsYWcgPSAxOiBsaXR0bGUtZW5kaWFuKQorICAgICAzID0gOC1i aXQgdGV4dCAoZmxhZyA9ICAwOiBubyBDMSBieXRlczsgZmxhZyA9IDE6IGluY2x1ZGVzIEMxIGJ5 dGVzKQorICAgICA0ID0gVGV4dCAgICAgICAodHlwZSB1bmtub3duKQorICAgICA1ID0gYmluYXJ5 ICAgICAoZmxhZyA9IC0xKQorCisgIElmIFVOSUNPREUgaXMgZGVmaW5lZDoKKworICAgMS4gSWYg ZmlsZSBiZWdpbnMgd2l0aCBhIHZhbGlkIEJPTSwgaXQgaXMgYmVsaWV2ZWQuICBPdGhlcndpc2Ug d2UKKyAgICAgIHJlYWQgdGhlIGZpcnN0IDRLIG9mIHRoZSBmaWxlIChzaW5jZSBpdCBtaWdodCBi ZSBlbWFpbCB3aXRoIHZlcmJvc2UKKyAgICAgIGhlYWRlcnMpIGFuZCBhbmFseXplIGl0OgorCisg ICAyLiBJZiBmaWxlIGNvbnRhaW5zIG9ubHkgdmFsaWQgVVRGLTggc2VxdWVuY2VzLCB3ZSBjYWxs IGl0IFVURi04OworICAgICAgb3RoZXJ3aXNlOgorCisgICAzLiBJZiB0aGUgZmlsZSBjb250YWlu cyBsb3RzIG9mIGFsdGVybmF0ZSAwIGJ5dGVzLCB3ZSBjYWxsIGl0IFVDUy0yLCBhbmQKKyAgICAg IHNldCB0aGUgcG9sYXJpdHkgYWNjb3JkaW5nIHRvIHdoZXRoZXIgdGhlIHByZXBvbmRlcmFuY2Ug b2YgdGhlbSBhcmUgaW4KKyAgICAgIGV2ZW4gb3Igb2RkIHBvc2l0aW9uczsgb3RoZXJ3aXNlOgor CisgICA0LiBJZiBFVkVOTUFYIGlzIGRlZmluZWQgYW5kIHRoZSBmaWxlIGNvbnRhaW5zIGxvdHMg b2YgYWx0ZXJuYXRlIGJ5dGVzIHRoYXQKKyAgICAgIGFyZSBpZGVudGljYWwsIGV2ZW4gaWYgdGhl eSBhcmVuJ3QgemVybywgYW5kIHRoZSBudW1iZXIgb2Ygc3VjaCBieXRlcworICAgICAgaXMgYXQg bGVhc3QgZm91ciB0aW1lcyB0aGUgbGVuZ3RoIG9mIHRoZSBtYXhpbXVtIHJ1biBvZiBhbHRlcm5h dGluZworICAgICAgaWRlbnRpY2FsIGJ5dGVzIG9mIHRoZSBvcHBvc2l0ZSBwb2xhcml0eSwgd2Ug Y2FsbCBpdCBVQ1MtMjsgb3RoZXJ3aXNlOgorCisgICA1LiBJZiB0aGUgZmlsZSBjb250YWluZWQg bm8gYnl0ZXMgd2l0aCB0aGVpciA4dGggYml0cyBvbiBhbmQgbm8gY29udHJvbHMKKyAgICAgIG90 aGVyIHRoYW4gQ1IsIExGLCBIVCwgYW5kIEZGLCB3ZSBjYWxsIGl0IEFTQ0lJOyBvdGhlcndpc2U6 CisKKyAgIDYuIElmIGl0IGNvbnRhaW5zIEMwIGNvbnRyb2wgY2hhcmFjdGVycyBvdGhlciB0aGFu IENSLCBMRiwgSFQsIGFuZCBGRiwgd2UKKyAgICAgIGNhbGwgaXQgYmluYXJ5OyBvdGhlcndpc2U6 CisKKyAgIDcuIFdlIGNhbGwgaXQgOC1iaXQgdGV4dCwgY2hhcmFjdGVyIHNldCB1bmtub3duIChj b3VsZCBiZSBMYXRpbi0xIG9yCisgICAgICBhbnl0aGluZyBlbHNlKS4KKworICAgTm90ZSB0aGF0 IG1hbGZvcm1lZCBVVEYtOCBpcyBub3QgZGlhZ25vc2VkIGFzIFVURi04LgorCisgICBJZiBVTklD T0RFIGlzIG5vdCBkZWZpbmVkOgorCisgICAxLiBJZiB0aGUgZmlsZSBjb250YWlucyBDMCBjb250 cm9sIGNoYXJhY3RlcnMgb3RoZXIgdGhhbiBDUiwgTEYsIEhULCBhbmQKKyAgICAgIEZGLCB3ZSBj YWxsIGl0IGJpbmFyeTsgb3RoZXJ3aXNlOgorCisgICAyLiBJZiB0aGUgZmlsZSBjb250YWlucyBh bnkgOC1iaXQgYnl0ZXMsIHdlIGNhbGwgaXQgOC1iaXQgdGV4dDsgb3RoZXJ3aXNlOgorCisgICAz LiBXZSBjYWxsIGl0IDctYml0IHRleHQuCisKKyAgIEluIHRoZSBub24tVW5pY29kZSBjYXNlLCBV Q1MtMiBpcyBkaWFnbm9zZWQgYXMgYmluYXJ5LCBidXQgVVRGLTggYXMKKyAgIDgtYml0IHRleHQu CisKKyAgIFRoZXJlIGlzIG5vIHNpZ25pZmljYW50IHNwZWVkIGRpZmZlcmVuY2UgYmV0d2VlbiB0 aGUgVW5pY29kZSBhbmQKKyAgIG5vbi1Vbmljb2RlIGNhc2VzLgorKi8KK2ludAorc2NhbmZpbGUo bmFtZSxmbGFnLG5zY2FuZmlsZSkgY2hhciAqIG5hbWU7IGludCAqIGZsYWcsIG5zY2FuZmlsZTsg eworICAgIEZJTEUgKiBmcDsJCQkJLyogRmlsZSBwb2ludGVyICovCisgICAgdW5zaWduZWQgY2hh ciBidWZbU0NBTkZJTEVCVUZdOwkvKiBGaWxlIGRhdGEgYnVmZmVyIGZvciBhbmFseXNpcyAqLwor ICAgIGludCB4LCB2YWwgPSAtMSwgY291bnQgPSAwOwkJLyogV29ya2VycyAqLworICAgIGludCBy YyA9IC0xOwkJCS8qIFJldHVybiBjb2RlICovCisgICAgaW50IHB2ID0gLTE7CQkJLyogUGF0dGVy bi1tYXRjaCB2YWx1ZSAqLworICAgIGludCBlb2YgPSAwOwkJCS8qIEZsYWcgZm9yIGZpbGUgRU9G IGVuY291bnRlcmVkICovCisgICAgaW50IGJ5dGVzID0gMDsJCQkvKiBUb3RhbCBieXRlIGNvdW50 ICovCisjaWZkZWYgVU5JQ09ERQorICAgIHVuc2lnbmVkIGludCBjMCwgYzE7CQkvKiBGaXJzdCAy IGZpbGUgYnl0ZXMgKGZvciBCT00pICovCisjZW5kaWYgLyogVU5JQ09ERSAqLworICAgIGV4dGVy biBpbnQgcGlwZXNlbmQsIGZpbGVwZWVrOworCisgICAgcmVnaXN0ZXIgaW50IGk7CQkJLyogTG9v cCBjb250cm9sICovCisgICAgaW50IHJlYWRzaXplID0gMDsJCQkvKiBIb3cgbXVjaCB0byByZWFk ICovCisgICAgaW50IGVpZ2h0Yml0ID0gMDsJCQkvKiBOdW1iZXIgb2YgYnl0ZXMgd2l0aCA4dGgg Yml0IG9uICovCisgICAgaW50IGMwY29udHJvbHMgPSAwOwkJCS8qIEMwIG5vbi10ZXh0IGNvbnRy b2wtY2hhciBjb3VudGVyICovCisgICAgaW50IGMwbm9uaXNvID0gMDsJCQkvKiBDMCBub24tSVNP IGNvbnRyb2wtY2hhciBjb3VudGVyICovCisgICAgaW50IGMxY29udHJvbHMgPSAwOwkJCS8qIEMx IGNvbnRyb2wtY2hhcmFjdGVyIGNvdW50ZXIgKi8KKyAgICB1bnNpZ25lZCBpbnQgYzsJCQkvKiBD dXJyZW50IGNoYXJhY3RlciAqLworICAgIGludCBydW5tYXggPSAwOwkJCS8qIExvbmdlc3QgcnVu IG9mIDAgYnl0ZXMgKi8KKyAgICBpbnQgcnVuemVybyA9IDA7CQkJLyogUnVuIG9mIDAgYnl0ZXMg Ki8KKyAgICBpbnQgcGN0emVybyA9IDA7CQkJLyogUGVyY2VudGFnZSBvZiAwIGJ5dGVzICovCisg ICAgaW50IHR4dGN6ID0gMDsKKyNpZmRlZiBDS19DVFJMWgorICAgIGV4dGVybiBpbnQgZW9mbWV0 aG9kOworI2VuZGlmIC8qIENLX0NUUkxaICovCisKKyNpZmRlZiBVTklDT0RFCisgICAgaW50IG5v dHV0ZjggPSAwOwkJCS8qIE5vbnplcm8gaWYgZGVmaW5pdGVseSBub3QgVVRGLTggKi8KKyAgICBp bnQgdXRmOHN0YXRlID0gMDsJCQkvKiBVVEYtOCByZWNvZ25pemVyIHN0YXRlICovCisgICAgaW50 IG9kZHplcm8gPSAwOwkJCS8qIE51bWJlciBvZiAwIGJ5dGVzIGluIG9kZCBwb3N0aW9ucyAqLwor ICAgIGludCBldmVuemVybyA9IDA7CQkJLyogYW5kIGluIGV2ZW4gcG9zaXRpb25zICovCisgICAg aW50IGxmbnVsID0gMDsJCQkvKiBOdW1iZXIgb2YgPExGPjxOVUw+IHNlcXVlbmNlcyAqLworICAg IGludCBjcmxmID0gMDsJCQkvKiBOdW1iZXIgb2YgPENSTEY+IHNlcXVlbmNlcyAqLworI2Vsc2UK KyAgICBpbnQgbm90dXRmOCA9IDE7CisjZW5kaWYgLyogVU5JQ09ERSAqLworCisjaWZkZWYgQ09N TUVOVAorI2lmZGVmIEVWRU5NQVgKKyAgICBpbnQgb2RkcnVuID0gMCwgb2RkbWF4ID0gMCwgb2Rk Ynl0ZSA9IDAsIG9kZG1heGJ5dGUgPSAwOworICAgIGludCBldmVucnVuID0gMCwgZXZlbm1heCA9 IDAsIGV2ZW5ieXRlID0gMCwgZXZlbm1heGJ5dGUgPSAwOworI2VuZGlmIC8qIEVWRU5NQVggKi8K KyNlbmRpZiAvKiBDT01NRU5UICovCisKKyNpZm5kZWYgTk9YRkVSCisgICAgaWYgKHBpcGVzZW5k IHx8IGNhbGlicmF0ZSB8fCBzbmRhcnJheSkgLyogT25seSBmb3IgcmVhbCBmaWxlcyAqLworICAg ICAgcmV0dXJuKC0xKTsKKyNlbmRpZiAvKiBOT1hGRVIgKi8KKyAgICBkZWJ1ZyhGMTExLCJzY2Fu ZmlsZSIsbmFtZSxuc2NhbmZpbGUpOworI2lmZGVmIFBBVFRFUk5TCisgICAgaWYgKCFmaWxlcGVl aykgeworCXB2ID0gbWF0Y2huYW1lKG5hbWUsMSwtMSk7CisJaWYgKHB2IDwgMCkKKwkgIHJjID0g LTE7CisJZWxzZQorCSAgcmMgPSAocHYgPT0gMSkgPyBGVF9CSU4gOiBGVF9URVhUOworCWRlYnVn KEYxMTEsInNjYW5maWxlICFmaWxlcGVlayByZXN1bHQiLG5hbWUscmMpOworCXJldHVybihyYyk7 CisgICAgfQorI2VuZGlmIC8qIFBBVFRFUk5TICovCisKKyNpZmRlZiBWTVMKKy8qIFdlIGRvbid0 IHNjYW4gaW4gVk1TIHdoZXJlIHRleHQgZmlsZXMgaGF2ZSB2YXJpb3VzIHJlY29yZCBmb3JtYXRz IGluICAqLworLyogd2hpY2ggcmVjb3JkIGhlYWRlcnMgY29udGFpbiBzZWVtaW5nbHkgbm9uLXRl eHQgYnl0ZXMuICBTbyB0aGUgYmVzdCAgICovCisvKiB3ZSBjYW4gZG8gaW4gVk1TIGlzIHRlbGwg d2hldGhlciB0aGUgZmlsZSBpcyB0ZXh0IG9yIGJpbmFyeSwgcGVyaW9kLiAgKi8KKyAgICB7CisJ aW50IGIsIHg7CisJYiA9IGJpbmFyeTsJCQkvKiBTYXZlIGN1cnJlbnQgYmluYXJ5IHNldHRpbmcg Ki8KKwlpZiAoem9wZW5pKFpJRklMRSxuYW1lKSA+IDApIHsJLyogSW4gVk1TIHRoaXMgc2V0cyBi aW5hcnkgKi8KKwkgICAgeCA9IGJpbmFyeTsJCQkvKiBHZXQgcmVzdWx0ICovCisJICAgIHpjbG9z ZShaSUZJTEUpOwkJLyogQ2xvc2UgdGhlIGZpbGUgKi8KKwkgICAgYmluYXJ5ID0gYjsJCQkvKiBS ZXN0b3JlIHByZXZpb3VzIGJpbmFyeSBzZXR0aW5nICovCisJICAgIHJjID0geCA/IEZUX0JJTiA6 IEZUX1RFWFQ7CisJICAgIHZhbCA9IDA7CisJICAgIGdvdG8geHNjYW5maWxlOworCX0KKyAgICB9 CisjZW5kaWYgLyogVk1TICovCisKKyAgICBlb2YgPSAwOwkJCQkvKiBFbmQtb2YtZmlsZSByZWFj aGVkIGluZGljYXRvciAqLworI2lmZGVmIE9TMgorICAgIGZwID0gZm9wZW4obmFtZSwgInJiIik7 CQkvKiBPcGVuIHRoZSBmaWxlIGluIGJpbmFyeSBtb2RlICovCisjZWxzZQorICAgIGZwID0gZm9w ZW4obmFtZSwgInIiKTsKKyNlbmRpZiAvKiBPUzIgKi8KKworICAgIGlmICghZnApCQkJCS8qIEZh aWxlZD8gKi8KKyAgICAgIHJldHVybigtMSk7CisKKyAgICB3aGlsZSAoMSkgewkJCQkvKiBPbmUg b3IgbW9yZSBndWxwcyBmcm9tIGZpbGUgKi8KKwlpZiAoZW9mKSB7CQkJLyogRU9GIGZyb20gbGFz dCB0aW1lPyAqLworCSAgICBkZWJ1ZyhGMTExLCJzY2FuZmlsZSBhdCBFT0YiLG5hbWUsYnl0ZXMp OworCSAgICBpZiAocnVuemVybyA+IHJ1bm1heCkKKwkgICAgICBydW5tYXggPSBydW56ZXJvOwor CSAgICBicmVhazsKKwl9CisJaWYgKG5zY2FuZmlsZSA8IDApIHsJCS8qIFJlYWRpbmcgd2hvbGUg ZmlsZSAqLworCSAgICByZWFkc2l6ZSA9IFNDQU5GSUxFQlVGOworCX0gZWxzZSB7CQkJLyogUmVh ZGluZyBmaXJzdCBuc2NhbmZpbGVlIGJ5dGVzICovCisJICAgIHJlYWRzaXplID0gbnNjYW5maWxl IC0gYnl0ZXM7CisJICAgIGlmIChyZWFkc2l6ZSA8IDEpCisJICAgICAgYnJlYWs7CisJICAgIGlm IChyZWFkc2l6ZSA+IFNDQU5GSUxFQlVGKQorCSAgICAgIHJlYWRzaXplID0gU0NBTkZJTEVCVUY7 CisJfQorCWRlYnVnKEYxMDEsInNjYW5maWxlIHJlYWRzaXplIiwiIixyZWFkc2l6ZSk7CisJY291 bnQgPSBmcmVhZChidWYsMSxyZWFkc2l6ZSxmcCk7IC8qIFJlYWQgYSBidWZmZXIgKi8KKwlpZiAo Y291bnQgPT0gRU9GIHx8IGNvdW50ID09IDApIHsKKwkgICAgZGVidWcoRjExMSwic2NhbmZpbGUg RU9GIixuYW1lLGNvdW50KTsKKwkgICAgYnJlYWs7CisJfQorCWRlYnVnKEYxMTEsInNjYW5maWxl IGJ1ZmZlciBvayIsbmFtZSxjb3VudCk7CisKKwlpZiAoYnl0ZXMgPT0gMCAmJiBjb3VudCA+IDgp IHsKKwkgICAgLyogUERGIGZpbGVzIGNhbiBsb29rIGxpa2UgdGV4dCBpbiB0aGUgYmVnaW5uaW5n LiAqLworCSAgICBpZiAoIWNrc3RyY21wKChjaGFyICopYnVmLCIlUERGLTEuIiw3LDEpKSB7CisJ CWlmIChpc2RpZ2l0KGJ1Zls3XSkpIHsKKwkJICAgIGlmIChidWZbOF0gPT0gJ1wwMTUnIHx8CisJ CQljb3VudCA+IDkgJiYgYnVmWzhdID09IFNQICYmIGJ1Zls5XSA9PSAnXDAxNScpIHsKKyNpZmRl ZiBERUJVRworCQkJYnVmWzhdID0gTlVMOworCQkJZGVidWcoRjExMCwic2NhbmZpbGUgUERGIixi dWYsMCk7CisjZW5kaWYgLyogREVCVUcgKi8KKwkJCWJpbmFyeSA9IDE7CS8qIEJ1dCB0aGV5IGFy ZSBiaW5hcnkuICovCisJCQlicmVhazsKKwkJICAgIH0KKwkJfQorCSAgICB9IGVsc2UgaWYgKCFj a3N0cmNtcCgoY2hhciAqKWJ1ZiwiJSFQUy1BZG8iLDgsMSkpIHsKKwkJLyogRGl0dG8gZm9yIFBv c3RTY3JpcHQgKi8KKyNpZmRlZiBERUJVRworCQlpbnQgaTsKKwkJZm9yIChpID0gODsgaSA8IGNv dW50OyBpKyspIHsKKwkJICAgIGlmIChidWZbaV0gPCAnIScpIHsKKwkJCWJ1ZltpXSA9IE5VTDsK KwkJCWJyZWFrOworCQkgICAgfQorCQl9CisJCWRlYnVnKEYxMTAsInNjYW5maWxlIFBvc3RTY3Jp cHQiLGJ1ZiwwKTsKKyNlbmRpZiAvKiBERUJVRyAqLworCQliaW5hcnkgPSAxOworCQlicmVhazsK KyNpZm5kZWYgTk9QQ0xTQ0FOCisJICAgIH0gZWxzZSBpZiAoIWNrc3RyY21wKChjaGFyICopYnVm LCIpIEhQLVBDTCIsOCwxKSkgeworCQkvKiBIUCBQQ0wgcHJpbnRlciBsYW5ndWFnZSAqLworI2lm ZGVmIERFQlVHCisJCWludCBpOworCQlmb3IgKGkgPSA4OyBpIDwgY291bnQ7IGkrKykgeworCQkg ICAgaWYgKGJ1ZltpXSA8ICchJykgeworCQkJYnVmW2ldID0gTlVMOworCQkJYnJlYWs7CisJCSAg ICB9CisJCX0KKwkJZGVidWcoRjExMCwic2NhbmZpbGUgUENMIixidWYsMCk7CisjZW5kaWYgLyog REVCVUcgKi8KKwkJYmluYXJ5ID0gMTsKKwkJYnJlYWs7CisJICAgIH0gCisjZW5kaWYgLyogTk9Q Q0xTQ0FOICovCisjaWZuZGVmIE5PUEpMU0NBTgorCSAgICAgIGVsc2UgaWYgKGJ1ZlswXSA9PSAn XDAzMycgJiYgKGJ1ZlsxXSA9PSAnRScgfHwgYnVmWzFdID09ICclJykpIHsKKwkJLyogRGl0dG8g Zm9yIFBKTCBKb2IgcHJpbnRlciBoZWFkZXIgKi8KKyNpZmRlZiBERUJVRworCQlpbnQgaTsKKwkJ Zm9yIChpID0gMjsgaSA8IGNvdW50OyBpKyspIHsKKwkJICAgIGlmIChidWZbaV0gPCAnIScpIHsK KwkJCWJ1ZltpXSA9IE5VTDsKKwkJCWJyZWFrOworCQkgICAgfQorCQl9CisJCWRlYnVnKEYxMTAs InNjYW5maWxlIFBKTCBKb2IgcHJpbnRlciBoZWFkZXIiLGJ1ZiwwKTsKKyNlbmRpZiAvKiBERUJV RyAqLworCQliaW5hcnkgPSAxOworCQlicmVhazsKKyNlbmRpZiAvKiBOT1BKTFNDQU4gKi8KKwkg ICAgfQorCX0KKworI2lmZGVmIFVOSUNPREUKKwlpZiAoYnl0ZXMgPT0gMCAmJiBjb3VudCA+IDEp IHsKKwkgICAgaW50IGluY2xfY250ID0gMDsKKworCSAgICAvKiBGaXJzdCBsb29rIGZvciBCT00g Ki8KKworCSAgICBjMCA9ICh1bnNpZ25lZCkoKHVuc2lnbmVkKWJ1ZlswXSYweEZGKTsgLyogRmly c3QgZmlsZSBieXRlICovCisJICAgIGMxID0gKHVuc2lnbmVkKSgodW5zaWduZWQpYnVmWzFdJjB4 RkYpOyAvKiBTZWNvbmQgYnl0ZSAqLworCisJICAgIGlmIChjMCA9PSAweEZFICYmIGMxID09IDB4 RkYpIHsJLyogVUNTLTIgQkUgKi8KKwkJcmMgPSBGVF9VQ1MyOworCQl2YWwgPSAwOworCQlkZWJ1 ZyhGMTExLCJzY2FuZmlsZSBVQ1MyIEJPTSBCRSIsY2tpdG9hKHZhbCkscmMpOworCQlpbmNsX2Nu dCsrOworCSAgICB9IGVsc2UgaWYgKGMwID09IDB4RkYgJiYgYzEgPT0gMHhGRSkgeyAvKiBVQ1Mt MiBMRSAqLworCQlyYyA9IEZUX1VDUzI7CisJCXZhbCA9IDE7CisJCWRlYnVnKEYxMTEsInNjYW5m aWxlIFVDUzIgQk9NIExFIixja2l0b2EodmFsKSxyYyk7CisJCWluY2xfY250Kys7CisJICAgIH0g ZWxzZSBpZiAoY291bnQgPiAyKSBpZiAoYzAgPT0gMHhFRiAmJiBjMSA9PSAweEJCICYmCisJCSAg ICAgICAodW5zaWduZWQpKCh1bnNpZ25lZClidWZbMl0mMHhGRikgPT0gMHhCRikgeworCQlyYyA9 IEZUX1VURjg7CisJCWRlYnVnKEYxMTEsInNjYW5maWxlIFVURjggQk9NIixja2l0b2EodmFsKSxy Yyk7CisJCWluY2xfY250Kys7CisJICAgIH0KKwkgICAgaWYgKGluY2xfY250KSB7CQkvKiBIYXZl IEJPTSAqLworCQlieXRlcyArPSBjb3VudDsKKwkJZ290byB4c2NhbmZpbGU7CisJICAgIH0KKwl9 CisjZW5kaWYgLyogVU5JQ09ERSAqLworCisJYnl0ZXMgKz0gY291bnQ7CQkJLyogQ291bnQgYnl0 ZXMgcmVhZCAqLworCWVvZiA9IGZlb2YoZnApOwkJCS8qIEZsYWcgZm9yIGF0IEVPRiAgKi8KKwor CWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CS8qIEZvciBlYWNoIGJ5dGUuLi4gKi8KKwkg ICAgYyA9ICh1bnNpZ25lZClidWZbaV07CS8qIEZvciBlYXNlIG9mIHJlZmVyZW5jZSAqLworCSAg ICBpZiAoIWMpIHsJCQkvKiBaZXJvIGJ5dGU/ICovCisjaWZkZWYgRVZFTk1BWAorCQlpZiAoaSYx KQkJLyogSW4gb2RkIHBvc2l0aW9uICovCisJCSAgb2RkemVybysrOworCQllbHNlCisJCSAgZXZl bnplcm8rKzsJCS8qIEluIGV2ZW4gcG9zaXRpb24gKi8KKyNlbmRpZiAvKiBFVkVOTUFYICovCisJ CXJ1bnplcm8rKzsKKwkgICAgfSBlbHNlIHsJCQkvKiBOb3QgYSB6ZXJvIGJ5dGUgKi8KKwkJaWYg KHJ1bnplcm8gPiBydW5tYXgpCisJCSAgcnVubWF4ID0gcnVuemVybzsKKwkJaWYgKHJ1bm1heCA+ IDIpCQkvKiBUaGF0J3MgYWxsIHdlIG5lZWQgdG8gYmUgY2VydGFpbiAqLworCQkgIGJyZWFrOwkJ LyogaXQncyBhIGJpbmFyeSBmaWxlLiAqLworCQlydW56ZXJvID0gMDsKKwkgICAgfQorCisjaWZk ZWYgQ09NTUVOVAorI2lmZGVmIEVWRU5NQVgKKworLyogVGhpcyBpcyB0byBjYXRjaCBVQ1MtMiB3 aXRoIGEgbm9uLUFTQ0lJLCBub24tTGF0aW4tMSByZXBlcnRvaXJlICAqLworCisJICAgIGlmIChp ID4gMSkgewkgICAgICAvKiBMb29rIGZvciBydW5zIG9mIGFsdGVybmF0aW5nIGNoYXJzICovCisJ CWlmIChpJjEpIHsKKwkJICAgIGlmIChjID09IGJ1ZltpLTJdKSB7IC8qIEluIG9kZCBwb3NpdGlv bnMgKi8KKwkJCW9kZHJ1bisrOworCQkJb2RkYnl0ZSA9IGM7CisJCSAgICB9IGVsc2UgeworCQkJ b2RkbWF4ID0gb2RkcnVuOworCQkJb2RkbWF4Ynl0ZSA9IG9kZGJ5dGU7CisJCSAgICB9CisJCX0g ZWxzZSB7CQkvKiBhbmQgZXZlbiBwb3NpdGlvbnMgKi8KKwkJICAgIGlmIChjID09IGJ1ZltpLTJd KSB7CisJCQlldmVucnVuKys7CisJCQlldmVuYnl0ZSA9IGM7CisJCSAgICB9IGVsc2UgeworCQkJ ZXZlbm1heCA9IGV2ZW5ydW47CisJCQlldmVubWF4Ynl0ZSA9IGV2ZW5ieXRlOworCQkgICAgfQor CQl9CisJICAgIH0KKyNlbmRpZiAvKiBFVkVOTUFYICovCisjZW5kaWYgLyogQ09NTUVOVCAqLwor CisJICAgIGlmICgoYyAmIDB4ODApID09IDApIHsJLyogV2UgaGF2ZSBhIDctYml0IGJ5dGUgKi8K KyNpZmRlZiBVTklDT0RFCisJCWlmIChpID4gMCAmJiBjID09IDEwKSB7IC8qIExpbmVmZWVkICov CisJCSAgICBpZiAoYnVmW2ktMV0gPT0gMCkgbGZudWwrKzsgLyogUHJlY2VkZWQgYnkgTlVMICov CisJCSAgICBlbHNlIGlmIChidWZbaS0xXSA9PSAxMykgY3JsZisrOyAvKiBvciBieSBDUi4uLiAq LworCQl9CisjZW5kaWYgLyogVU5JQ09ERSAqLworCQlpZiAoYyA8ICcgJykgewkJLyogQ2hlY2sg Zm9yIENPIGNvbnRyb2xzICovCisJCSAgICBpZiAoYyAhPSBMRiAmJiBjICE9IENSICYmIGMgIT0g SFQgJiYgYyAhPSBGRikgeworCQkJYzBjb250cm9scysrOworCQkJaWYgKGMgIT0gRVNDICYmIGMg IT0gU08gJiYgYyAhPSBTSSkKKwkJCSAgYzBub25pc28rKzsKKwkJICAgIH0KKwkJICAgIGlmICgo YyA9PSAnXDAzMicpCS8qIEN0cmwtWiAqLworI2lmZGVmIENPTU1FTlQKKwkJCSYmIGVvZiAmJiAo aSA+PSBjb3VudCAtIDIpCisjZW5kaWYgLyogQ09NTUVOVCAqLworCQkJKSB7CisJCQljMGNvbnRy b2xzLS07CisJCQljMG5vbmlzby0tOworI2lmZGVmIENLX0NUUkxaCisJCQlpZiAoZW9mbWV0aG9k ID09IFhZRU9GX1ogJiYgdHh0Y3ogPT0gMCkgeworCQkJICAgIGlmIChjMGNvbnRyb2xzID09IDAp IC8qIEFsbCB0ZXh0IHByaW9yIHRvIEN0cmwtWiAqLworCQkJICAgICAgdHh0Y3ogPSAxOworCQkJ fQorI2VuZGlmIC8qIENLX0NUUkxaICovCisJCSAgICB9CisJCX0KKyNpZmRlZiBVTklDT0RFCisJ CWlmICghbm90dXRmOCAmJiB1dGY4c3RhdGUpIHsgLyogSW4gVVRGLTggc2VxdWVuY2U/ICovCisJ CSAgICB1dGY4c3RhdGUgPSAwOworCQkgICAgZGVidWcoRjAwMCwic2NhbmZpbGUiLCI3LWJpdCBi eXRlIGluIFVURjggc2VxdWVuY2UiLGMpOworCQkgICAgbm90dXRmOCsrOwkJLyogVGhlbiBpdCdz IG5vdCBVVEYtOCAqLworCQkgICAgY29udGludWU7CisJCX0KKyNlbmRpZiAvKiBVTklDT0RFICov CisJICAgIH0gZWxzZSB7CQkJLyogV2UgaGF2ZSBhbiA4LWJpdCBieXRlICovCisJCWVpZ2h0Yml0 Kys7CQkvKiBDb3VudCBpdCAqLworCQlpZiAoYyA+PSAweDgwICYmIGMgPCAweEEwKSAvKiBDaGVj ayBmb3IgQzEgY29udHJvbHMgKi8KKwkJICBjMWNvbnRyb2xzKys7CisjaWZkZWYgVU5JQ09ERQor CQlpZiAoIW5vdHV0ZjgpIHsJCS8qIElmIGl0IG1pZ2h0IHN0aWxsIGJlIFVURjguLi4gKi8KKwkJ ICAgIHN3aXRjaCAodXRmOHN0YXRlKSB7IC8qIEVudGVyIHRoZSBVVEYtOCBzdGF0ZSBtYWNoaW5l ICovCisJCSAgICAgIGNhc2UgMDoJCSAvKiBGaXJzdCBieXRlLi4uICovCisJCQlpZiAoKGMgJiAw eEUwKSA9PSAweEMwKSB7IC8qIFRlbGxzIG51bWJlciBvZiAqLworCQkJICAgIHV0ZjhzdGF0ZSA9 IDE7ICAgICAgICAvKiBzdWJzZXF1ZW50IGJ5dGVzICovCisJCQl9IGVsc2UgaWYgKChjICYgMHhG MCkgPT0gMHhFMCkgeworCQkJICAgIHV0ZjhzdGF0ZSA9IDI7CisJCQl9IGVsc2UgaWYgKChjICYg MHhGOCkgPT0gMHhGMCkgeworCQkJICAgIHV0ZjhzdGF0ZSA9IDM7CisJCQl9IGVsc2UgeworCQkJ ICAgIG5vdHV0ZjgrKzsKKwkJCX0KKwkJCWJyZWFrOworCQkgICAgICBjYXNlIDE6CQkvKiBTdWJz ZXF1ZW50IGJ5dGUgKi8KKwkJICAgICAgY2FzZSAyOgorCQkgICAgICBjYXNlIDM6CisJCQlpZiAo KGMgJiAweEMwKSAhPSAweDgwKSB7IC8qIE11c3Qgc3RhcnQgd2l0aCAxMCAqLworCQkJICAgIGRl YnVnKEYwMDAsInNjYW5maWxlIiwKKwkJCQkgICJiYWQgYnl0ZSBpbiBVVEY4IHNlcXVlbmNlIixj KTsKKwkJCSAgICBub3R1dGY4Kys7CisJCQkgICAgYnJlYWs7CisJCQl9CisJCQl1dGY4c3RhdGUt LTsJLyogR29vZCwgb25lIGxlc3MgaW4gdGhpcyBzZXF1ZW5jZSAqLworCQkJYnJlYWs7CisJCSAg ICAgIGRlZmF1bHQ6CQkvKiBTaG91bGRuJ3QgaGFwcGVuICovCisJCQlkZWJ1ZyhGMTExLCJzY2Fu ZmlsZSIsImJhZCBVVEY4IHN0YXRlIix1dGY4c3RhdGUpOworCQkJbm90dXRmOCsrOworCQkgICAg fQorCQl9CisjZW5kaWYgLyogVU5JQ09ERSAqLworCSAgICB9CisJfQorICAgIH0KKyAgICBmY2xv c2UoZnApOwkJCQkvKiBDbG9zZSB0aGUgZmlsZSAqLworICAgIGRlYnVnKEYxMDEsInNjYW5maWxl IGJ5dGVzIiwiIixieXRlcyk7CisKKyAgICBpZiAoYnl0ZXMgPT0gMCkJCQkvKiBJZiBub3RoaW5n IHdhcyByZWFkICovCisgICAgICByZXR1cm4oLTEpOwkJCS8qIHdlJ3JlIGRvbmUuICovCisKKyNp ZmRlZiBFVkVOTUFYCisgICAgLyogSW4gY2FzZSB3ZSBoYWQgYSBydW4gdGhhdCBuZXZlciBicm9r ZS4uLiAqLworI2lmZGVmIENPTU1FTlQKKyAgICBpZiAob2RkbWF4ID09IDApIHsKKwlvZGRtYXgg PSBvZGRydW47CisJb2RkbWF4Ynl0ZSA9IG9kZGJ5dGU7CisgICAgfQorICAgIGlmIChldmVubWF4 ID09IDApIHsKKwlldmVubWF4ID0gZXZlbnJ1bjsKKwlldmVubWF4Ynl0ZSA9IGV2ZW5ieXRlOwor ICAgIH0KKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgaWYgKHJ1bm1heCA9PSAwKSB7CisJcnVu bWF4ID0gcnVuemVybzsKKyAgICB9CisjZW5kaWYgLyogRVZFTk1BWCAqLworCisjaWZkZWYgVU5J Q09ERQorICAgIGlmIChieXRlcyA+IDEwMCkJCQkvKiBCeXRlcyBpcyBub3QgMCAqLworICAgICAg cGN0emVybyA9IChldmVuemVybyArIG9kZHplcm8pIC8gKGJ5dGVzIC8gMTAwKTsKKyAgICBlbHNl CisgICAgICBwY3R6ZXJvID0gKChldmVuemVybyArIG9kZHplcm8pICogMTAwKSAvIGJ5dGVzOwor I2VuZGlmIC8qIFVOSUNPREUgKi8KKworI2lmZGVmIERFQlVHCisgICAgaWYgKGRlYmxvZykgewkJ CS8qIElmIGRlYnVnZ2luZywgZHVtcCBzdGF0aXN0aWNzICovCisJZGVidWcoRjEwMSwic2NhbmZp bGUgYzBjb250cm9scyAiLCIiLGMwY29udHJvbHMpOworCWRlYnVnKEYxMDEsInNjYW5maWxlIGMw bm9uaXNvICAgIiwiIixjMG5vbmlzbyk7CisJZGVidWcoRjEwMSwic2NhbmZpbGUgYzFjb250cm9s cyAiLCIiLGMxY29udHJvbHMpOworCWRlYnVnKEYxMDEsInNjYW5maWxlIGVpZ2h0Yml0ICAgIiwi IixlaWdodGJpdCk7CisjaWZkZWYgVU5JQ09ERQorCWRlYnVnKEYxMDEsInNjYW5maWxlIGNybGYg ICAgICAgIiwiIixjcmxmKTsKKwlkZWJ1ZyhGMTAxLCJzY2FuZmlsZSBsZm51bCAgICAgICIsIiIs bGZudWwpOworCWRlYnVnKEYxMDEsInNjYW5maWxlIG5vdHV0ZjggICAgIiwiIixub3R1dGY4KTsK KwlkZWJ1ZyhGMTAxLCJzY2FuZmlsZSBldmVuemVybyAgICIsIiIsZXZlbnplcm8pOworCWRlYnVn KEYxMDEsInNjYW5maWxlIG9kZHplcm8gICAgIiwiIixvZGR6ZXJvKTsKKwlkZWJ1ZyhGMTAxLCJz Y2FuZmlsZSBldmVuL29kZCAgICIsIiIsKGV2ZW56ZXJvIC8gKG9kZHplcm8gKyAxKSkpOworCWRl YnVnKEYxMDEsInNjYW5maWxlIG9kZC9ldmVuICAgIiwiIiwob2RkemVybyAvIChldmVuemVybyAr IDEpKSk7CisJZGVidWcoRjEwMSwic2NhbmZpbGUgcGN0emVybyAgICAiLCIiLHBjdHplcm8pOwor I2VuZGlmIC8qIFVOSUNPREUgKi8KKyNpZmRlZiBDT01NRU5UCisjaWZkZWYgRVZFTk1BWAorCWRl YnVnKEYxMDEsInNjYW5maWxlIG9kZG1heCAgICAgIiwiIixvZGRtYXgpOworCWRlYnVnKEYxMDEs InNjYW5maWxlIG9kZG1heGJ5dGUgIiwiIixvZGRtYXhieXRlKTsKKwlkZWJ1ZyhGMTAxLCJzY2Fu ZmlsZSBldmVubWF4ICAgICIsIiIsZXZlbm1heCk7CisJZGVidWcoRjEwMSwic2NhbmZpbGUgZXZl bm1heGJ5dGUiLCIiLGV2ZW5tYXhieXRlKTsKKyNlbmRpZiAvKiBFVkVOTUFYICovCisjZW5kaWYg LyogQ09NTUVOVCAqLworCWRlYnVnKEYxMDEsInNjYW5maWxlIHJ1bm1heCAgICAgIiwiIixydW5t YXgpOworICAgIH0KKyNlbmRpZiAvKiBERUJVRyAqLworCisjaWZkZWYgVU5JQ09ERQorICAgIHgg PSBlaWdodGJpdCA/IGJ5dGVzIC8gMjAgOiBieXRlcyAvIDQ7IC8qIEZvciBVQ1MtMi4uLiAqLwor CisgICAgaWYgKHJ1bm1heCA+IDIpIHsJCQkvKiBGaWxlIGhhcyBydW4gb2YgbW9yZSB0aGFuIDIg TlVMcyAqLworCWRlYnVnKEYxMDAsInNjYW5maWxlIEJJTiBydW5tYXgiLCIiLDApOworCXJjID0g RlRfQklOOwkJCS8qIHNvIGl0IGNhbid0IGJlIGFueSBraW5kIG9mIHRleHQuICovCisJZ290byB4 c2NhbmZpbGU7CisKKyAgICB9IGVsc2UgaWYgKHJjID09IEZUX1VDUzIgfHwgKHJjID09IEZUX1VU RjggJiYgcnVubWF4ID09IDApKSB7CisJZ290byB4c2NhbmZpbGU7CQkJLyogRmlsZSBzdGFydHMg d2l0aCBhIEJPTSAqLworCisgICAgfSBlbHNlIGlmIChlaWdodGJpdCA+IDAgJiYgIW5vdHV0Zjgp IHsgLyogRmlsZSBoYXMgOC1iaXQgZGF0YSAqLworCWlmIChydW5tYXggPiAwKSB7CQkgICAvKiBh bmQgcnVucyBvZiBOVUxzICovCisJICAgIGRlYnVnKEYxMDAsInNjYW5maWxlIEJJTiAobm5VVEY4 KSBydW5tYXgiLCIiLDApOworCSAgICByYyA9IEZUX0JJTjsJCSAgIC8qIFVURi04IGRvZXNuJ3Qg aGF2ZSBOVUxzICovCisJfSBlbHNlIHsJCQkgICAvKiBObyBOVUxzICovCisJICAgIGRlYnVnKEYx MDAsInNjYW5maWxlIFVURjggKG5uVVRGOCArIHJ1bm1heCA9PSAwKSIsIiIsMCk7CisJICAgIHJj ID0gRlRfVVRGODsJCSAgIC8qIGFuZCBub3Qgbm90IFVURi04LCBzbyBpcyBVVEYtOCAqLworCX0K Kwlnb3RvIHhzY2FuZmlsZTsKKyAgICB9CisvKgorICBGb3IgVUNTLTIgZGV0ZWN0aW9uLCBzZWUg aWYgdGhlIHRleHQgY29udGFpbnMgbGluZXMgZGVsaW1pdGVkIGJ5CisgIEFTQ0lJIGNvbnRyb2xz IGFuZCBjb250YWluaW5nIHNwYWNlcywgQVNDSUkgZGlnaXRzLCBvciBvdGhlciBBU0NJSQorICBj aGFyYWN0ZXJzLCB0aHVzIGZvcmNpbmcgdGhlIHByZXNlbmNlIG9mIGEgY2VydGFpbiBwZXJjZW50 YWdlIG9mIHplcm8gYnl0ZXMuCisgIEZvciB0aGlzIHB1cnBvc2UgcmVxdWlyZSAyMCUgemVybyBi eXRlcywgd2l0aCBhdCBsZWFzdCBzaXggdGltZXMgYXMgbWFueQorICBpbiBldmVuIChvZGQpIHBv c2l0aW9ucyBhcyBpbiBvZGQgKGV2ZW4pIHBvc2l0aW9ucy4KKyovCisgICAgaWYgKChldmVuemVy byA+PSB4ICYmIG9kZHplcm8gPT0gMCkgfHwKKwkoKCgoZXZlbnplcm8gLyAob2RkemVybyArIDEp KSA+IDYpICYmIChwY3R6ZXJvID4gMjApKSAmJgorCShjcmxmID09IDApICYmCisJKGxmbnVsID4g MSkpCisJKSB7CisJICAgIGRlYnVnKEYxMDAsInNjYW5maWxlIFVDUzIgbm9CT00gQkUgKGV2ZW4v b2RkemVybykiLCIiLDApOworCXJjID0gRlRfVUNTMjsKKwl2YWwgPSAwOworICAgIH0gZWxzZSBp ZiAoKGV2ZW56ZXJvID09IDAgJiYgb2RkemVybyA+PSB4KSB8fAorCSAgICAgICAoKCgob2RkemVy byAvIChldmVuemVybyArIDEpKSA+IDYpICYmIChwY3R6ZXJvID4gMjApKSAmJgorCSAgICAgICAo Y3JsZiA9PSAwKSAmJgorCSAgICAgICAobGZudWwgPiAxKSkKKwkgICAgICAgKSB7CisJZGVidWco RjEwMCwic2NhbmZpbGUgVUNTMiBub0JPTSBMRSAoZXZlbi9vZGR6ZXJvKSIsIiIsMCk7CisJcmMg PSBGVF9VQ1MyOworCXZhbCA9IDE7CisKKyNpZmRlZiBDT01NRU5UCisjaWZkZWYgRVZFTk1BWAor LyoKKyAgSWYgdGhlIHRlc3RzIGFib3ZlIGZhaWwsIHdlIHN0aWxsIG1pZ2h0IGhhdmUgVUNTLTIg aWYgdGhlcmUgYXJlIHNpZ25pZmljYW50CisgIHJ1bnMgb2YgaWRlbnRpY2FsIGJ5dGVzIGluIGFs dGVybmF0aW5nIHBvc2l0aW9ucywgYnV0IG9ubHkgaWYgaXQgYWxzbyBoYXMKKyAgdW51c3VhbCBD MCBjb250cm9scyAob3RoZXJ3aXNlIHdlJ2QgcGljayB1cCBoZXggZmlsZXMgaGVyZSkuICBOT1RF OiBXZQorICBkb24ndCBhY3R1YWxseSBkbyB0aGlzIC0tIEVWRU5NQVggaXMgbm90IGRlZmluZWQg KHNlZSBjb21tZW50cyBhYm92ZSBhdAorICBmaXJzdCBvY2N1cnJlbmNlIG9mIEVWRU5NQVgpLgor Ki8KKyAgICB9IGVsc2UgaWYgKGMwbm9uaXNvICYmIGV2ZW5tYXggPiBieXRlcyAvIDQpIHsKKwlk ZWJ1ZyhGMTAwLCJzY2FuZmlsZSBVQ1MyIEJFIChldmVubWF4KSIsIiIsMCk7CisJcmMgPSBGVF9V Q1MyOworCXZhbCA9IDA7CisgICAgfSBlbHNlIGlmIChjMG5vbmlzbyAmJiBvZGRtYXggPiBieXRl cyAvIDQpIHsKKwlkZWJ1ZyhGMTAwLCJzY2FuZmlsZSBVQ1MyIExFIChldmVubWF4KSIsIiIsMCk7 CisJcmMgPSBGVF9VQ1MyOworCXZhbCA9IDE7CisjZW5kaWYgLyogRVZFTk1BWCAqLworI2VuZGlm IC8qIENPTU1FTlQgKi8KKworICAgIH0KKy8qCisgIEl0IHNlZW1zIHRvIGJlIFVDUy0yIGJ1dCBs ZXQncyBiZSBtb3JlIGNlcnRhaW4gc2luY2UgdGhlcmUgaXMgbm8gQk9NLi4uCisgIElmIHRoZSBu dW1iZXIgb2YgNy0gYW5kIDgtYml0IGNoYXJhY3RlcnMgaXMgYXBwcm94aW1hdGVseSBlcXVhbCwg aXQgbWlnaHQKKyAgYmUgYSBjb21wcmVzc2VkIGZpbGUuICBJbiB0aGlzIGNhc2Ugd2UgZGVjaWRl IGJhc2VkIG9uIHRoZSBuYW1lLgorKi8KKyAgICBpZiAocmMgPT0gRlRfVUNTMikgeworCWlmIChl aWdodGJpdCA+IDApIHsKKwkgICAgaW50IGosIGs7CisJICAgIGogPSAoYzFjb250cm9scyAqIDEw MCkgLyAoYzBjb250cm9scyArIDEpOworCSAgICBkZWJ1ZyhGMTAxLCJzY2FuZmlsZSBjMS9jMCAg ICAgICIsIiIsaik7CisJICAgIGsgPSAoYnl0ZXMgKiAxMDApIC8gZWlnaHRiaXQ7CisJICAgIGRl YnVnKEYxMDEsInNjYW5maWxlIHBjdCA4Yml0ICAgIiwiIixrKTsKKwkgICAgaWYgKGsgPiA0MCAm JiBrIDwgNjAgJiYgaiA+IDYwKSB7CisJCWlmIChja21hdGNoKCJ7Ki5aLCouZ3osKi56aXAsKi5a SVB9IixuYW1lLDEsMSkpIHsKKwkJICAgIGRlYnVnKEYxMTAsInNjYW5maWxlIDgtYml0IEJJTiBj b21wcmVzc2VkIixuYW1lLDApOworCQkgICAgcmMgPSBGVF9CSU47CisJCSAgICBnb3RvIHhzY2Fu ZmlsZTsKKwkJfQorCSAgICB9CisJfQorCS8qIFNtYWxsIGZpbGUgLSBub3QgZW5vdWdoIGV2aWRl bmNlIHVubGVzcyAuLi4gKi8KKworCWlmIChieXRlcyA8IDEwMCkgeworCSAgICBpZiAob2RkemVy byAhPSAwICYmIGV2ZW56ZXJvICE9IDApIHsKKwkJZGVidWcoRjEwMCwic2NhbmZpbGUgc21hbGwg VUNTMiBkb3VidGZ1bCIsIiIsMCk7CisJCXJjID0gRlRfQklOOworCQlnb3RvIHhzY2FuZmlsZTsK KwkgICAgfSBlbHNlIGlmIChvZGR6ZXJvID09IDAgJiYgZXZlbnplcm8gPT0gMCkgeworCQlyYyA9 IGVpZ2h0Yml0ID8gRlRfOEJJVCA6IEZUXzdCSVQ7CisJICAgIH0KKwl9CisJZ290byB4c2NhbmZp bGU7CQkJLyogU2VlbXMgdG8gYmUgVUNTLTIgKi8KKyAgICB9CisKKy8qIElmIG5vbmUgb2YgdGhl IGFib3ZlLCBpdCdzIHByb2JhYmx5IG5vdCBVbmljb2RlLiAgKi8KKworICAgIGlmICghZWlnaHRi aXQpIHsJCQkvKiBJdCdzIDctYml0ICovCisJaWYgKGMwY29udHJvbHMpIHsJCS8qIFRoaXMgd291 bGQgYmUgc3RyYW5nZSAqLworCSAgICBpZiAoKGMwbm9uaXNvID4gMCkgJiYgKHR4dGN6ID09IDAp KSB7CisJCWRlYnVnKEYxMDAsInNjYW5maWxlIDctYml0IEJJTiAoYzBjb25pc28pIiwiIiwwKTsK KwkJcmMgPSBGVF9CSU47CisJICAgIH0gZWxzZSB7CisJCWRlYnVnKEYxMDAsInNjYW5maWxlIDct Yml0IElTTzIwMjIgVEVYVCAobm8gYzBub25pc28pIiwiIiwwKTsKKwkJcmMgPSBGVF83QklUOwor CSAgICB9CisJfSBlbHNlIHsJCQkvKiA3LWJpdCB0ZXh0ICovCisJICAgIGRlYnVnKEYxMDAsInNj YW5maWxlIDctYml0IFRFWFQgKG5vIGMwY29udHJvbHMpIiwiIiwwKTsKKwkgICAgcmMgPSBGVF83 QklUOworCX0KKyAgICB9IGVsc2UgaWYgKCFjMG5vbmlzbyB8fCB0eHRjeikgewkvKiA4LWJpdCB0 ZXh0ICovCisJZGVidWcoRjEwMCwic2NhbmZpbGUgOC1iaXQgVEVYVCAobm8gYzBub25pc28pIiwi IiwwKTsKKwlyYyA9IEZUXzhCSVQ7CisJdmFsID0gYzFjb250cm9scyA/IDEgOiAwOworICAgIH0g ZWxzZSB7CQkJCS8qIDgtYml0IGJpbmFyeSAqLworCWRlYnVnKEYxMDAsInNjYW5maWxlIDgtYml0 IEJJTiAoYzBub25pc28pIiwiIiwwKTsKKwlyYyA9IEZUX0JJTjsKKyAgICB9CisKKyNlbHNlICAv KiAhVU5JQ09ERSAqLworCisgICAgaWYgKGMwbm9uaXNvKSB7CisJZGVidWcoRjEwMCwic2NhbmZp bGUgOC1iaXQgQklOIChjMG5vbmlzbykiLCIiLDApOworCXJjID0gRlRfQklOOworICAgIH0gZWxz ZSBpZiAoZWlnaHRiaXQpIHsKKwlkZWJ1ZyhGMTAwLCJzY2FuZmlsZSA4LWJpdCBURVhUIChubyBj MG5vbmlzbykiLCIiLDApOworCXJjID0gRlRfOEJJVDsKKwl2YWwgPSBjMWNvbnRyb2xzID8gMSA6 IDA7CisgICAgfSBlbHNlIHsKKwlkZWJ1ZyhGMTAwLCJzY2FuZmlsZSA3LWJpdCBURVhUIChubyBj MG5vbmlzbykiLCIiLDApOworCXJjID0gRlRfN0JJVDsKKyAgICB9CisKKyNlbmRpZiAvKiBVTklD T0RFICovCisKKyAgeHNjYW5maWxlOgorICAgIGlmIChmbGFnKSAqZmxhZyA9IHZhbDsKKyAgICBk ZWJ1ZyhGMTAxLCJzY2FuZmlsZSByZXN1bHQgICAgICIsIiIscmMpOworICAgIHJldHVybihyYyk7 Cit9CisKKy8qCisgIHNjYW5zdHJpbmcgLSBsaWtlIHNjYW4gZmlsZSBidXQgZm9yIGEgc3RyaW5n LgorICBUaGlzIGlzIGp1c3QgYSBxdWljayBidXRjaGVyeSBvZiBzY2FuZmlsZSB3aXRob3V0IHRo aW5raW5nIHRvbyBtdWNoLgorKi8KK2ludAorc2NhbnN0cmluZyhzKSBjaGFyICogczsgeworICAg IGludCB4LCB2YWwgPSAtMSwgY291bnQgPSAwOwkJLyogV29ya2VycyAqLworICAgIGludCByYyA9 IC0xOwkJCS8qIFJldHVybiBjb2RlICovCisgICAgaW50IHB2ID0gLTE7CQkJLyogUGF0dGVybi1t YXRjaCB2YWx1ZSAqLworICAgIGludCBieXRlcyA9IDA7CQkJLyogVG90YWwgYnl0ZSBjb3VudCAq LworI2lmZGVmIFVOSUNPREUKKyAgICB1bnNpZ25lZCBpbnQgYzAsIGMxOwkJLyogRmlyc3QgMiBm aWxlIGJ5dGVzIChmb3IgQk9NKSAqLworI2VuZGlmIC8qIFVOSUNPREUgKi8KKyAgICBleHRlcm4g aW50IHBpcGVzZW5kLCBmaWxlcGVlazsKKworICAgIHJlZ2lzdGVyIGludCBpOwkJCS8qIExvb3Ag Y29udHJvbCAqLworICAgIGludCByZWFkc2l6ZSA9IDA7CQkJLyogSG93IG11Y2ggdG8gcmVhZCAq LworICAgIGludCBlaWdodGJpdCA9IDA7CQkJLyogTnVtYmVyIG9mIGJ5dGVzIHdpdGggOHRoIGJp dCBvbiAqLworICAgIGludCBjMGNvbnRyb2xzID0gMDsJCQkvKiBDMCBub24tdGV4dCBjb250cm9s LWNoYXIgY291bnRlciAqLworICAgIGludCBjMG5vbmlzbyA9IDA7CQkJLyogQzAgbm9uLUlTTyBj b250cm9sLWNoYXIgY291bnRlciAqLworICAgIGludCBjMWNvbnRyb2xzID0gMDsJCQkvKiBDMSBj b250cm9sLWNoYXJhY3RlciBjb3VudGVyICovCisgICAgdW5zaWduZWQgaW50IGM7CQkJLyogQ3Vy cmVudCBjaGFyYWN0ZXIgKi8KKyAgICBpbnQgcnVubWF4ID0gMDsJCQkvKiBMb25nZXN0IHJ1biBv ZiAwIGJ5dGVzICovCisgICAgaW50IHJ1bnplcm8gPSAwOwkJCS8qIFJ1biBvZiAwIGJ5dGVzICov CisgICAgaW50IHBjdHplcm8gPSAwOwkJCS8qIFBlcmNlbnRhZ2Ugb2YgMCBieXRlcyAqLworICAg IGludCB0eHRjeiA9IDA7CisKKyNpZmRlZiBVTklDT0RFCisgICAgaW50IG5vdHV0ZjggPSAwOwkJ CS8qIE5vbnplcm8gaWYgZGVmaW5pdGVseSBub3QgVVRGLTggKi8KKyAgICBpbnQgdXRmOHN0YXRl ID0gMDsJCQkvKiBVVEYtOCByZWNvZ25pemVyIHN0YXRlICovCisgICAgaW50IG9kZHplcm8gPSAw OwkJCS8qIE51bWJlciBvZiAwIGJ5dGVzIGluIG9kZCBwb3N0aW9ucyAqLworICAgIGludCBldmVu emVybyA9IDA7CQkJLyogYW5kIGluIGV2ZW4gcG9zaXRpb25zICovCisgICAgaW50IGxmbnVsID0g MDsJCQkvKiBOdW1iZXIgb2YgPExGPjxOVUw+IHNlcXVlbmNlcyAqLworICAgIGludCBjcmxmID0g MDsJCQkvKiBOdW1iZXIgb2YgPENSTEY+IHNlcXVlbmNlcyAqLworI2Vsc2UKKyAgICBpbnQgbm90 dXRmOCA9IDE7CisjZW5kaWYgLyogVU5JQ09ERSAqLworCisgICAgY2hhciAqIGJ1ZiA9IHM7Cisg ICAgaWYgKCFzKSBzID0gIiI7CisgICAgY291bnQgPSBzdHJsZW4ocyk7CisKKyNpZmRlZiBVTklD T0RFCisgICAgaWYgKGJ5dGVzID09IDAgJiYgY291bnQgPiAxKSB7CisJaW50IGluY2xfY250ID0g MDsKKworCS8qIEZpcnN0IGxvb2sgZm9yIEJPTSAqLworCisJYzAgPSAodW5zaWduZWQpKCh1bnNp Z25lZClidWZbMF0mMHhGRik7IC8qIEZpcnN0IGZpbGUgYnl0ZSAqLworCWMxID0gKHVuc2lnbmVk KSgodW5zaWduZWQpYnVmWzFdJjB4RkYpOyAvKiBTZWNvbmQgYnl0ZSAqLworCisJaWYgKGMwID09 IDB4RkUgJiYgYzEgPT0gMHhGRikgewkvKiBVQ1MtMiBCRSAqLworCSAgICByYyA9IEZUX1VDUzI7 CisJICAgIHZhbCA9IDA7CisJICAgIGRlYnVnKEYxMTEsInNjYW5zdHJpbmcgVUNTMiBCT00gQkUi LGNraXRvYSh2YWwpLHJjKTsKKwkgICAgaW5jbF9jbnQrKzsKKwl9IGVsc2UgaWYgKGMwID09IDB4 RkYgJiYgYzEgPT0gMHhGRSkgeyAvKiBVQ1MtMiBMRSAqLworCSAgICByYyA9IEZUX1VDUzI7CisJ ICAgIHZhbCA9IDE7CisJICAgIGRlYnVnKEYxMTEsInNjYW5zdHJpbmcgVUNTMiBCT00gTEUiLGNr aXRvYSh2YWwpLHJjKTsKKwkgICAgaW5jbF9jbnQrKzsKKwl9IGVsc2UgaWYgKGNvdW50ID4gMikg aWYgKGMwID09IDB4RUYgJiYgYzEgPT0gMHhCQiAmJgorCQkgICAodW5zaWduZWQpKCh1bnNpZ25l ZClidWZbMl0mMHhGRikgPT0gMHhCRikgeworCSAgICByYyA9IEZUX1VURjg7CisJICAgIGRlYnVn KEYxMTEsInNjYW5zdHJpbmcgVVRGOCBCT00iLGNraXRvYSh2YWwpLHJjKTsKKwkgICAgaW5jbF9j bnQrKzsKKwl9CisJaWYgKGluY2xfY250KSB7CQkvKiBIYXZlIEJPTSAqLworCSAgICBieXRlcyAr PSBjb3VudDsKKwkgICAgZ290byB4c2NhbnN0cmluZzsKKwl9CisgICAgfQorI2VuZGlmIC8qIFVO SUNPREUgKi8KKworICAgIGJ5dGVzICs9IGNvdW50OwkJCS8qIENvdW50IGJ5dGVzIHJlYWQgKi8K KworICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CS8qIEZvciBlYWNoIGJ5dGUuLi4g Ki8KKwljID0gKHVuc2lnbmVkKWJ1ZltpXTsJLyogRm9yIGVhc2Ugb2YgcmVmZXJlbmNlICovCisJ aWYgKCFjKSB7CQkJLyogWmVybyBieXRlPyAqLworCSAgICBnb3RvIHhzY2Fuc3RyaW5nOwkvKiBO dWxsIHRlcm1pbmF0ZWQgc3RyaW5nICovCisJfQorCWlmICgoYyAmIDB4ODApID09IDApIHsJLyog V2UgaGF2ZSBhIDctYml0IGJ5dGUgKi8KKyNpZmRlZiBVTklDT0RFCisJICAgIGlmIChpID4gMCAm JiBjID09IDEwKSB7IC8qIExpbmVmZWVkICovCisJCWlmIChidWZbaS0xXSA9PSAwKSBsZm51bCsr OyAvKiBQcmVjZWRlZCBieSBOVUwgKi8KKwkJZWxzZSBpZiAoYnVmW2ktMV0gPT0gMTMpIGNybGYr KzsgLyogb3IgYnkgQ1IuLi4gKi8KKwkgICAgfQorI2VuZGlmIC8qIFVOSUNPREUgKi8KKwkgICAg aWYgKGMgPCAnICcpIHsJCS8qIENoZWNrIGZvciBDTyBjb250cm9scyAqLworCQlpZiAoYyAhPSBM RiAmJiBjICE9IENSICYmIGMgIT0gSFQgJiYgYyAhPSBGRikgeworCQkgICAgYzBjb250cm9scysr OworCQkgICAgaWYgKGMgIT0gRVNDICYmIGMgIT0gU08gJiYgYyAhPSBTSSkKKwkJICAgICAgYzBu b25pc28rKzsKKwkJfQorCQlpZiAoKGMgPT0gJ1wwMzInKQkvKiBDdHJsLVogKi8KKwkJICAgICkg eworCQkgICAgYzBjb250cm9scy0tOworCQkgICAgYzBub25pc28tLTsKKwkJfQorCSAgICB9Cisj aWZkZWYgVU5JQ09ERQorCSAgICBpZiAoIW5vdHV0ZjggJiYgdXRmOHN0YXRlKSB7IC8qIEluIFVU Ri04IHNlcXVlbmNlPyAqLworCQl1dGY4c3RhdGUgPSAwOworCQlkZWJ1ZyhGMDAwLCJzY2Fuc3Ry aW5nIiwiNy1iaXQgYnl0ZSBpbiBVVEY4IHNlcXVlbmNlIixjKTsKKwkJbm90dXRmOCsrOwkJLyog VGhlbiBpdCdzIG5vdCBVVEYtOCAqLworCQljb250aW51ZTsKKwkgICAgfQorI2VuZGlmIC8qIFVO SUNPREUgKi8KKwl9IGVsc2UgewkJCS8qIFdlIGhhdmUgYW4gOC1iaXQgYnl0ZSAqLworCSAgICBl aWdodGJpdCsrOwkJLyogQ291bnQgaXQgKi8KKwkgICAgaWYgKGMgPj0gMHg4MCAmJiBjIDwgMHhB MCkgLyogQ2hlY2sgZm9yIEMxIGNvbnRyb2xzICovCisJICAgICAgYzFjb250cm9scysrOworI2lm ZGVmIFVOSUNPREUKKwkgICAgaWYgKCFub3R1dGY4KSB7CQkvKiBJZiBpdCBtaWdodCBzdGlsbCBi ZSBVVEY4Li4uICovCisJCXN3aXRjaCAodXRmOHN0YXRlKSB7IC8qIEVudGVyIHRoZSBVVEYtOCBz dGF0ZSBtYWNoaW5lICovCisJCSAgY2FzZSAwOgkJIC8qIEZpcnN0IGJ5dGUuLi4gKi8KKwkJICAg IGlmICgoYyAmIDB4RTApID09IDB4QzApIHsgLyogVGVsbHMgbnVtYmVyIG9mICovCisJCQl1dGY4 c3RhdGUgPSAxOyAgICAgICAgLyogc3Vic2VxdWVudCBieXRlcyAqLworCQkgICAgfSBlbHNlIGlm ICgoYyAmIDB4RjApID09IDB4RTApIHsKKwkJCXV0ZjhzdGF0ZSA9IDI7CisJCSAgICB9IGVsc2Ug aWYgKChjICYgMHhGOCkgPT0gMHhGMCkgeworCQkJdXRmOHN0YXRlID0gMzsKKwkJICAgIH0gZWxz ZSB7CisJCQlub3R1dGY4Kys7CisJCSAgICB9CisJCSAgICBicmVhazsKKwkJICBjYXNlIDE6CQkv KiBTdWJzZXF1ZW50IGJ5dGUgKi8KKwkJICBjYXNlIDI6CisJCSAgY2FzZSAzOgorCQkgICAgaWYg KChjICYgMHhDMCkgIT0gMHg4MCkgeyAvKiBNdXN0IHN0YXJ0IHdpdGggMTAgKi8KKwkJCWRlYnVn KEYwMDAsInNjYW5zdHJpbmciLAorCQkJICAgICAgImJhZCBieXRlIGluIFVURjggc2VxdWVuY2Ui LGMpOworCQkJbm90dXRmOCsrOworCQkJYnJlYWs7CisJCSAgICB9CisJCSAgICB1dGY4c3RhdGUt LTsJLyogR29vZCwgb25lIGxlc3MgaW4gdGhpcyBzZXF1ZW5jZSAqLworCQkgICAgYnJlYWs7CisJ CSAgZGVmYXVsdDoJCS8qIFNob3VsZG4ndCBoYXBwZW4gKi8KKwkJICAgIGRlYnVnKEYxMTEsInNj YW5zdHJpbmciLCJiYWQgVVRGOCBzdGF0ZSIsdXRmOHN0YXRlKTsKKwkJICAgIG5vdHV0ZjgrKzsK KwkJfQorCSAgICB9CisjZW5kaWYgLyogVU5JQ09ERSAqLworCX0KKyAgICB9CisgICAgaWYgKGJ5 dGVzID09IDApCQkJLyogSWYgbm90aGluZyB3YXMgcmVhZCAqLworICAgICAgcmV0dXJuKC0xKTsJ CQkvKiB3ZSdyZSBkb25lLiAqLworCisjaWZkZWYgVU5JQ09ERQorICAgIGlmIChieXRlcyA+IDEw MCkJCQkvKiBCeXRlcyBpcyBub3QgMCAqLworICAgICAgcGN0emVybyA9IChldmVuemVybyArIG9k ZHplcm8pIC8gKGJ5dGVzIC8gMTAwKTsKKyAgICBlbHNlCisgICAgICBwY3R6ZXJvID0gKChldmVu emVybyArIG9kZHplcm8pICogMTAwKSAvIGJ5dGVzOworI2VuZGlmIC8qIFVOSUNPREUgKi8KKwor I2lmZGVmIFVOSUNPREUKKyAgICB4ID0gZWlnaHRiaXQgPyBieXRlcyAvIDIwIDogYnl0ZXMgLyA0 OyAvKiBGb3IgVUNTLTIuLi4gKi8KKworICAgIGlmIChydW5tYXggPiAyKSB7CQkJLyogRmlsZSBo YXMgcnVuIG9mIG1vcmUgdGhhbiAyIE5VTHMgKi8KKwlkZWJ1ZyhGMTAwLCJzY2Fuc3RyaW5nIEJJ TiBydW5tYXgiLCIiLDApOworCXJjID0gRlRfQklOOwkJCS8qIHNvIGl0IGNhbid0IGJlIGFueSBr aW5kIG9mIHRleHQuICovCisJZ290byB4c2NhbnN0cmluZzsKKworICAgIH0gZWxzZSBpZiAocmMg PT0gRlRfVUNTMiB8fCAocmMgPT0gRlRfVVRGOCAmJiBydW5tYXggPT0gMCkpIHsKKwlnb3RvIHhz Y2Fuc3RyaW5nOwkJCS8qIEZpbGUgc3RhcnRzIHdpdGggYSBCT00gKi8KKworICAgIH0gZWxzZSBp ZiAoZWlnaHRiaXQgPiAwICYmICFub3R1dGY4KSB7IC8qIEZpbGUgaGFzIDgtYml0IGRhdGEgKi8K KwlpZiAocnVubWF4ID4gMCkgewkJICAgLyogYW5kIHJ1bnMgb2YgTlVMcyAqLworCSAgICBkZWJ1 ZyhGMTAwLCJzY2Fuc3RyaW5nIEJJTiAobm5VVEY4KSBydW5tYXgiLCIiLDApOworCSAgICByYyA9 IEZUX0JJTjsJCSAgIC8qIFVURi04IGRvZXNuJ3QgaGF2ZSBOVUxzICovCisJfSBlbHNlIHsJCQkg ICAvKiBObyBOVUxzICovCisJICAgIGRlYnVnKEYxMDAsInNjYW5zdHJpbmcgVVRGOCAobm5VVEY4 ICsgcnVubWF4ID09IDApIiwiIiwwKTsKKwkgICAgcmMgPSBGVF9VVEY4OwkJICAgLyogYW5kIG5v dCBub3QgVVRGLTgsIHNvIGlzIFVURi04ICovCisJfQorCWdvdG8geHNjYW5zdHJpbmc7CisgICAg fQorLyoKKyAgSXQgc2VlbXMgdG8gYmUgVUNTLTIgYnV0IGxldCdzIGJlIG1vcmUgY2VydGFpbiBz aW5jZSB0aGVyZSBpcyBubyBCT00uLi4KKyAgSWYgdGhlIG51bWJlciBvZiA3LSBhbmQgOC1iaXQg Y2hhcmFjdGVycyBpcyBhcHByb3hpbWF0ZWx5IGVxdWFsLCBpdCBtaWdodAorICBiZSBhIGNvbXBy ZXNzZWQgZmlsZS4gIEluIHRoaXMgY2FzZSB3ZSBkZWNpZGUgYmFzZWQgb24gdGhlIG5hbWUuCisq LworICAgIGlmIChyYyA9PSBGVF9VQ1MyKSB7CisJaWYgKGJ5dGVzIDwgMTAwKSB7CisJICAgIGlm IChvZGR6ZXJvICE9IDAgJiYgZXZlbnplcm8gIT0gMCkgeworCQlkZWJ1ZyhGMTAwLCJzY2Fuc3Ry aW5nIHNtYWxsIFVDUzIgZG91YnRmdWwiLCIiLDApOworCQlyYyA9IEZUX0JJTjsKKwkJZ290byB4 c2NhbnN0cmluZzsKKwkgICAgfSBlbHNlIGlmIChvZGR6ZXJvID09IDAgJiYgZXZlbnplcm8gPT0g MCkgeworCQlyYyA9IGVpZ2h0Yml0ID8gRlRfOEJJVCA6IEZUXzdCSVQ7CisJICAgIH0KKwl9CisJ Z290byB4c2NhbnN0cmluZzsJCQkvKiBTZWVtcyB0byBiZSBVQ1MtMiAqLworICAgIH0KKworLyog SWYgbm9uZSBvZiB0aGUgYWJvdmUsIGl0J3MgcHJvYmFibHkgbm90IFVuaWNvZGUuICAqLworCisg ICAgaWYgKCFlaWdodGJpdCkgewkJCS8qIEl0J3MgNy1iaXQgKi8KKwlpZiAoYzBjb250cm9scykg ewkJLyogVGhpcyB3b3VsZCBiZSBzdHJhbmdlICovCisJICAgIGlmICgoYzBub25pc28gPiAwKSAm JiAodHh0Y3ogPT0gMCkpIHsKKwkJZGVidWcoRjEwMCwic2NhbnN0cmluZyA3LWJpdCBCSU4gKGMw Y29uaXNvKSIsIiIsMCk7CisJCXJjID0gRlRfQklOOworCSAgICB9IGVsc2UgeworCQlkZWJ1ZyhG MTAwLCJzY2Fuc3RyaW5nIDctYml0IElTTzIwMjIgVEVYVCAobm8gYzBub25pc28pIiwiIiwwKTsK KwkJcmMgPSBGVF83QklUOworCSAgICB9CisJfSBlbHNlIHsJCQkvKiA3LWJpdCB0ZXh0ICovCisJ ICAgIGRlYnVnKEYxMDAsInNjYW5zdHJpbmcgNy1iaXQgVEVYVCAobm8gYzBjb250cm9scykiLCIi LDApOworCSAgICByYyA9IEZUXzdCSVQ7CisJfQorICAgIH0gZWxzZSBpZiAoIWMwbm9uaXNvIHx8 IHR4dGN6KSB7CS8qIDgtYml0IHRleHQgKi8KKwlkZWJ1ZyhGMTAwLCJzY2Fuc3RyaW5nIDgtYml0 IFRFWFQgKG5vIGMwbm9uaXNvKSIsIiIsMCk7CisJcmMgPSBGVF84QklUOworCXZhbCA9IGMxY29u dHJvbHMgPyAxIDogMDsKKyAgICB9IGVsc2UgewkJCQkvKiA4LWJpdCBiaW5hcnkgKi8KKwlkZWJ1 ZyhGMTAwLCJzY2Fuc3RyaW5nIDgtYml0IEJJTiAoYzBub25pc28pIiwiIiwwKTsKKwlyYyA9IEZU X0JJTjsKKyAgICB9CisKKyNlbHNlICAvKiAhVU5JQ09ERSAqLworCisgICAgaWYgKGMwbm9uaXNv KSB7CisJZGVidWcoRjEwMCwic2NhbnN0cmluZyA4LWJpdCBCSU4gKGMwbm9uaXNvKSIsIiIsMCk7 CisJcmMgPSBGVF9CSU47CisgICAgfSBlbHNlIGlmIChlaWdodGJpdCkgeworCWRlYnVnKEYxMDAs InNjYW5zdHJpbmcgOC1iaXQgVEVYVCAobm8gYzBub25pc28pIiwiIiwwKTsKKwlyYyA9IEZUXzhC SVQ7CisJdmFsID0gYzFjb250cm9scyA/IDEgOiAwOworICAgIH0gZWxzZSB7CisJZGVidWcoRjEw MCwic2NhbnN0cmluZyA3LWJpdCBURVhUIChubyBjMG5vbmlzbykiLCIiLDApOworCXJjID0gRlRf N0JJVDsKKyAgICB9CisKKyNlbmRpZiAvKiBVTklDT0RFICovCisKKyAgeHNjYW5zdHJpbmc6Cisg ICAgZGVidWcoRjEwMSwic2NhbnN0cmluZyByZXN1bHQgICAgICIsIiIscmMpOworICAgIHJldHVy bihyYyk7Cit9CisKKworCisvKiAgRiBJIEwgRSBTIEUgTCBFIEMgVCAgLS0gIFNlbGVjdCB0aGlz IGZpbGUgZm9yIHNlbmRpbmcgICovCisKK2ludAorI2lmZGVmIENLX0FOU0lDCitmaWxlc2VsZWN0 KAorICAgIGNoYXIgKmYsIGNoYXIgKnNhLCBjaGFyICpzYiwgY2hhciAqc25hLCBjaGFyICpzbmIs CisgICAgQ0tfT0ZGX1QgbWluc2l6LCBDS19PRkZfVCBtYXhzaXosCisgICAgaW50IG5idSwgaW50 IG54bGlzdCwKKyAgICBjaGFyICoqIHhsaXN0CispCisjZWxzZQorZmlsZXNlbGVjdChmLHNhLHNi LHNuYSxzbmIsbWluc2l6LG1heHNpeixuYnUsbnhsaXN0LHhsaXN0KQorIGNoYXIgKmYsKnNhLCpz Yiwqc25hLCpzbmI7IENLX09GRl9UIG1pbnNpeixtYXhzaXo7CisgaW50IG5idSxueGxpc3Q7IGNo YXIgKiogeGxpc3Q7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIGZpbGVzZWxlY3QgKi8gewor ICAgIGNoYXIgKmZkYXRlOworICAgIGludCBuOworICAgIENLX09GRl9UIHo7CisKKyAgICBkZWJ1 ZyhGMTExLCJmaWxlc2VsZWN0IG1pbnNpeiIsY2tmc3RvYShtaW5zaXopLG1pbnNpeik7CisgICAg ZGVidWcoRjExMSwiZmlsZXNlbGVjdCBtYXhzaXoiLGNrZnN0b2EobWF4c2l6KSxtYXhzaXopOwor ICAgIGRlYnVnKEYxMTEsImZpbGVzZWxlY3QgKENLX09GRl9UKS0xIixja2ZzdG9hKChDS19PRkZf VCktMSksKENLX09GRl9UKS0xKTsKKworICAgIGlmICghc2EpIHNhID0gIiI7CisgICAgaWYgKCFz Yikgc2IgPSAiIjsKKyAgICBpZiAoIXNuYSkgc25hID0gIiI7CisgICAgaWYgKCFzbmIpIHNuYiA9 ICIiOworCisjaWZkZWYgQ0tTWU1MSU5LCisjaWZuZGVmIE5PSUNQCisjaWZuZGVmIE5PWEZFUgor ICAgIGlmIChub2xpbmtzKSB7CisJQ0tfT0ZGX1Qgeno7CisJenogPSB6Z2V0ZnMoZik7CisJZGVi dWcoRjExMSwiZmlsZXNlbGVjdCBOT0xJTktTIHpnZXRmcyIsZix6eik7CisJaWYgKHp6IDwgKENL X09GRl9UKTApCisJICByZXR1cm4oMCk7CisJZGVidWcoRjExMSwiZmlsZXNlbGVjdCBOT0xJTktT IHpnZnNfbGluayIsZix6Z2ZzX2xpbmspOworCWlmICh6Z2ZzX2xpbmspCisJICByZXR1cm4oMCk7 CisgICAgfQorI2VuZGlmIC8qIE5PWEZFUiAqLworI2VuZGlmIC8qIE5PSUNQICovCisjZW5kaWYg LyogQ0tTWU1MSU5LICovCisKKyAgICBkZWJ1ZyhGMTEwLCJmaWxlc2VsZWN0IixmLDApOworICAg IGlmICgqc2EgfHwgKnNiIHx8ICpzbmEgfHwgKnNuYikgeworCWZkYXRlID0gemZjZGF0KGYpOwkJ LyogRGF0ZS90aW1lIG9mIHRoaXMgZmlsZSAqLworCWlmICghZmRhdGUpIGZkYXRlID0gIiI7CisJ biA9IHN0cmxlbihmZGF0ZSk7CisJZGVidWcoRjExMSwiZmlsZXNlbGVjdCBmZGF0ZSIsZmRhdGUs bik7CisJaWYgKG4gIT0gMTcpCQkJLyogRmFpbGVkIHRvIGdldCBpdCAqLworCSAgcmV0dXJuKDEp OworCS8qIC9BRlRFUjogKi8KKwlpZiAoc2FbMF0gJiYgKHN0cmNtcChmZGF0ZSwoY2hhciAqKXNh KSA8PSAwKSkgeworCSAgICBkZWJ1ZyhGMTEwLCJmaWxlc2VsZWN0IHNhIixzYSwwKTsKKwkgICAg LyogdGxvZyhGMTEwLCJTa2lwcGluZyAodG9vIG9sZCkiLGYsMCk7ICovCisJICAgIHJldHVybigw KTsKKwl9CisJLyogL0JFRk9SRTogKi8KKwlpZiAoc2JbMF0gJiYgKHN0cmNtcChmZGF0ZSwoY2hh ciAqKXNiKSA+PSAwKSkgeworCSAgICBkZWJ1ZyhGMTEwLCJmaWxlc2VsZWN0IHNiIixzYiwwKTsK KwkgICAgLyogdGxvZyhGMTEwLCJTa2lwcGluZyAodG9vIG5ldykiLGYsMCk7ICovCisJICAgIHJl dHVybigwKTsKKwl9CisJLyogL05PVC1BRlRFUjogKi8KKwlpZiAoc25hWzBdICYmIChzdHJjbXAo ZmRhdGUsKGNoYXIgKilzbmEpID4gMCkpIHsKKwkgICAgZGVidWcoRjExMCwiZmlsZXNlbGVjdCBz bmEiLHNuYSwwKTsKKwkgICAgLyogdGxvZyhGMTEwLCJTa2lwcGluZyAodG9vIG5ldykiLGYsMCk7 ICovCisJICAgIHJldHVybigwKTsKKwl9CisJLyogL05PVC1CRUZPUkU6ICovCisJaWYgKHNuYlsw XSAmJiAoc3RyY21wKGZkYXRlLChjaGFyICopc25iKSA8IDApKSB7CisJICAgIGRlYnVnKEYxMTAs ImZpbGVzZWxlY3Qgc25iIixzbmIsMCk7CisJICAgIC8qIHRsb2coRjExMCwiU2tpcHBpbmcgKHRv byBvbGQpIixmLDApOyAqLworCSAgICByZXR1cm4oMCk7CisJfQorICAgIH0KKyAgICAvKiBTbWFs bGVyIG9yIGxhcmdlciAqLworICAgIGlmIChtaW5zaXogPiAoQ0tfT0ZGX1QpLTEgfHwgbWF4c2l6 ID4gKENLX09GRl9UKS0xKSB7CisJeiA9IHpjaGtpKGYpOwkJCS8qIEdldCBzaXplICovCisJZGVi dWcoRjEwMSwiZmlsZXNlbGVjdCBmaWxlc2l6ZSIsIiIseik7CisJaWYgKHogPCAoQ0tfT0ZGX1Qp MCkKKwkgIHJldHVybigxKTsKKwlpZiAoKG1pbnNpeiA+IChDS19PRkZfVCktMSkgJiYgKHogPj0g bWluc2l6KSkgeworCSAgICBkZWJ1ZyhGMTExLCJmaWxlc2VsZWN0IG1pbnNpeiBza2lwcGluZyIs ZixtaW5zaXopOworCSAgICAvKiB0bG9nKEYxMTEsIlNraXBwaW5nICh0b28gYmlnKSIsZix6KTsg Ki8KKwkgICAgcmV0dXJuKDApOworCX0KKwlpZiAoKG1heHNpeiA+IChDS19PRkZfVCktMSkgJiYg KHogPD0gbWF4c2l6KSkgeworCSAgICBkZWJ1ZyhGMTExLCJmaWxlc2VsZWN0IG1heHNpeiBza2lw cGluZyIsZixtYXhzaXopOworCSAgICAvKiB0bG9nKEYxMTAsIlNraXBwaW5nICh0b28gc21hbGwp IixmLDApOyAqLworCSAgICByZXR1cm4oMCk7CisJfQorICAgIH0KKyAgICBpZiAobmJ1KSB7CQkJ CS8qIFNraXBwaW5nIGJhY2t1cCBmaWxlcz8gKi8KKwlpZiAoY2ttYXRjaCgKKyNpZmRlZiBDS1JF R0VYCisJCSAgICAiKi5+WzAtOV0qfiIJLyogTm90IHBlcmZlY3QgYnV0IGNsb3NlIGVub3VnaC4g Ki8KKyNlbHNlCisJCSAgICAiKi5+Kn4iCQkvKiBMZXNzIGNsb3NlLiAqLworI2VuZGlmIC8qIENL UkVHRVggKi8KKwkJICAgICxmLGZpbGVjYXNlLDEpKSB7CisJICAgIGRlYnVnKEYxMTAsImZpbGVz ZWxlY3Qgc2tpcHBpbmcgYmFja3VwIixmLDApOworCSAgICByZXR1cm4oMCk7CisJfQorICAgIH0K KyAgICBmb3IgKG4gPSAwOyB4bGlzdCAmJiBuIDwgbnhsaXN0OyBuKyspIHsKKwlpZiAoIXhsaXN0 W25dKSB7CisJICAgIGRlYnVnKEYxMDEsImZpbGVzZWxlY3QgeGxpc3QgZW1wdHkiLDAsbik7CisJ ICAgIGJyZWFrOworCX0KKwlpZiAoY2ttYXRjaCh4bGlzdFtuXSxmLGZpbGVjYXNlLDEpKSB7CisJ ICAgIGRlYnVnKEYxMTEsImZpbGVzZWxlY3QgeGxpc3QiLHhsaXN0W25dLG4pOworCSAgICBkZWJ1 ZyhGMTEwLCJmaWxlc2VsZWN0IHNraXBwaW5nIixmLDApOworCSAgICByZXR1cm4oMCk7CisJfQor ICAgIH0KKyAgICBpZiAoeGZpbGV0eXBlID4gLTEpIHsKKwluID0gc2NhbmZpbGUoZixOVUxMLG5z Y2FuZmlsZSk7CisJaWYgKG4gPCAwKSB7CisJICAgIG4gPSBiaW5hcnkgPyAxIDogMDsKKwl9IGVs c2UgeworCSAgICBuID0gKG4gPT0gRlRfQklOKSA/IDEgOiAwOworCX0KKwlpZiAobiAhPSB4Zmls ZXR5cGUpCisJICByZXR1cm4oMCk7CisgICAgfQorICAgIGRlYnVnKEYxMTAsImZpbGVzZWxlY3Qg c2VsZWN0aW5nIixmLDApOworICAgIHJldHVybigxKTsKK30KKworCisjaWZkZWYgVENQU09DS0VU CisjaWZkZWYgTlQKK2V4dGVybiBpbnQgV1NBU2FmZVRvQ2FuY2VsOworI2VuZGlmIC8qIE5UICov CisjZW5kaWYgLyogVENQU09DS0VUICovCisKK1ZPSUQKK3NldGZsb3coKSB7CisgICAgZXh0ZXJu IGludCBmbG93LCBhdXRvZmxvdywgbWRtdHlwLCBjeHR5cGUsIGN4Zmxvd1tdOworI2lmbmRlZiBO T0RJQUwKKyAgICBleHRlcm4gaW50IGRpYWxjYXBhcywgZGlhbGZjOworICAgIGV4dGVybiBNRE1J TkYgKiBtb2RlbXBbXTsKKyAgICBNRE1JTkYgKiBwID0gTlVMTDsKKyAgICBsb25nIGJpdHMgPSAw OworI2VuZGlmIC8qIE5PRElBTCAqLworCisgICAgZGVidWcoRjEwMSwic2V0ZmxvdyBhdXRvZmxv dyIsIiIsYXV0b2Zsb3cpOworCisvKiAjaWZkZWYgQ09NTUVOVCAqLworLyogV0hZIFdBUyBUSElT IENPTU1FTlRFRCBPVVQ/ICovCisgICAgaWYgKCFhdXRvZmxvdykgICAgICAgICAgICAgICAgICAg ICAgLyogT25seSBpZiBGTE9XIGlzIEFVVE8gKi8KKyAgICAgIHJldHVybjsKKy8qICNlbmRpZiAq LyAvKiBDT01NRU5UICovCisKKyAgICBkZWJ1ZyhGMTAxLCJzZXRmbG93IGxvY2FsIiwiIixsb2Nh bCk7CisgICAgZGVidWcoRjEwMSwic2V0ZmxvdyBuZXR3b3JrIiwiIixuZXR3b3JrKTsKKyAgICBk ZWJ1ZyhGMTAxLCJzZXRmbG93IGN4dHlwZSIsIiIsY3h0eXBlKTsKKworI2lmZGVmIFROX0NPTVBP UlQKKyAgICBpZiAobmV0d29yayAmJiBpc3RuY29tcG9ydCgpKSB7CisJZmxvdyA9IGN4Zmxvd1tD WFRfTU9ERU1dOworICAgICAgICBkZWJ1ZyhGMTAxLCJzZXRmbG93IFROX0NPTVBPUlQgZmxvdyIs IiIsZmxvdyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYgLyogVE5fQ09NUE9SVCAq LworCisgICAgaWYgKG5ldHdvcmsgfHwgIWxvY2FsIHx8IGN4dHlwZSA9PSBDWFRfRElSRUNUKSB7 CisgICAgICAgIGZsb3cgPSBjeGZsb3dbY3h0eXBlXTsgICAgICAgICAgLyogU2V0IGFwcHJvcHJp YXRlIGZsb3cgY29udHJvbCAqLworICAgICAgICBkZWJ1ZyhGMTAxLCJzZXRmbG93IGZsb3ciLCIi LGZsb3cpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChjeHR5cGUgIT0gQ1hUX01P REVNKSAgICAgICAgICAgIC8qIENvbm5lY3Rpb24gdHlwZSBzaG91bGQgYmUgbW9kZW0gKi8KKyAg ICAgIHJldHVybjsKKworI2lmbmRlZiBOT0RJQUwKKyAgICBiaXRzID0gZGlhbGNhcGFzOyAgICAg ICAgICAgICAgICAgICAvKiBDYXBhYmlsaXR5IGJpdHMgKi8KKyAgICBpZiAoIWJpdHMpIHsgICAg ICAgICAgICAgICAgICAgICAgICAvKiBObyBiaXRzPyAqLworICAgICAgICBwID0gbW9kZW1wW21k bXR5cF07ICAgICAgICAgICAgIC8qIExvb2sgaW4gbW9kZW0gaW5mbyBzdHJ1Y3R1cmUgKi8KKyAg ICAgICAgaWYgKHApCisgICAgICAgICAgYml0cyA9IHAtPmNhcGFzOworICAgIH0KKyAgICBpZiAo ZGlhbGZjID09IEZMT19BVVRPKSB7ICAgICAgICAgICAvKiBJZiBESUFMIGZsb3cgaXMgQVVUTyAq LworI2lmZGVmIENLX1JUU0NUUyAgICAgICAgICAgICAgICAgICAgICAgIC8qIElmIHdlIGNhbiBk byBSVFMvQ1RTIGZsb3cgY29udHJvbCAqLworICAgICAgICBpZiAoYml0cyAmIENLRF9IVykgICAg ICAgICAgICAgIC8qIGFuZCBtb2RlbSBjYW4gZG8gaXQgdG9vICovCisgICAgICAgICAgZmxvdyA9 IEZMT19SVFNDOyAgICAgICAgICAgICAgLyogdGhlbiBzd2l0Y2ggdG8gUlRTL0NUUyAqLworICAg ICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG90aGVyd2lzZSAqLworICAg ICAgICAgIGZsb3cgPSBGTE9fWE9OWDsgICAgICAgICAgICAgIC8qIHVzZSBYb24vWG9mZi4gKi8K KyNlbHNlCisjaWZuZGVmIE5FWFQKKyNpZm5kZWYgSVJJWAorICAgICAgICBmbG93ID0gRkxPX1hP Tlg7ICAgICAgICAgICAgICAgIC8qIFVzZSBYb24vWG9mZi4gKi8KKyNlbmRpZiAvKiBJUklYICov CisjZW5kaWYgLyogTkVYVCAqLworI2VuZGlmIC8qIENLX1JUU0NUUyAqLworICAgIH0KKyNlbmRp ZiAvKiBOT0RJQUwgKi8KKyAgICBkZWJ1ZyhGMTAxLCJzZXRmbG93IG1vZGVtIGZsb3ciLCIiLGZs b3cpOworICAgIHJldHVybjsKK30KKworI2lmbmRlZiBOT0xPQ0FMCisjaWZkZWYgQ0tfVFJJR0dF UgorCisvKiAgQSBVIFQgTyBFIFggSSBUIEMgSCBLICAtLSAgQ2hlY2sgZm9yIENPTk5FQ1QtbW9k ZSB0cmlnZ2VyIHN0cmluZyAgKi8KKy8qCisgIFJldHVybnMgLTEgaWYgdHJpZ2dlciBub3QgZm91 bmQsIG9yIGVsc2UgdGhlIHRyaWdnZXIgaW5kZXgsIDAgb3IgZ3JlYXRlci4KKyAgKFJlcGxhY2Ug d2l0aCBmYW5jaWVyIGFuZCBtb3JlIGVmZmljaWVudCBtYXRjaGVyIGxhdGVyLi4uKQorICBOT1RF OiB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IGZ1bmN0aW9uIGNhbGwgb3ZlcmhlYWQsIGNhbGwgdGhp cyB3YXk6CisKKyAgICB4ID0gdHRfdHJpZ2dlclswXSA/IGF1dG9leGl0Y2hrKGMpIDogLTE7CisK KyovCitpbnQKKyNpZmRlZiBDS19BTlNJQworYXV0b2V4aXRjaGsoQ0hBUiBjKQorI2Vsc2UKK2F1 dG9leGl0Y2hrKGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogYXV0b2V4aXRj aGsgKi8geworICAgIGV4dGVybiBDSEFSICogdHRfdHJtYXRjaFtdOworICAgIGV4dGVybiBjaGFy ICogdHRfdHJpZ2dlcltdOworICAgIGludCBpOworICAgIGZvciAoaSA9IDA7IGkgPCBUUklHR0VS UzsgaSsrKSB7CisgICAgICAgIGlmICghdHRfdHJpZ2dlcltpXSkgeyAgICAgICAgICAgLyogTm8g bW9yZSB0cmlnZ2VycyBpbiBsaXN0ICovCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfSBl bHNlIGlmICgqdHRfdHJpZ2dlcltpXSkgeworICAgICAgICAgICAgaWYgKCF0dF90cm1hdGNoW2ld KSAgICAgICAgIC8qIEp1c3Qgc3RhcnRpbmc/ICovCisgICAgICAgICAgICAgIHR0X3RybWF0Y2hb aV0gPSAoQ0hBUiAqKXR0X3RyaWdnZXJbaV07IC8qIFNldCBtYXRjaCBwb2ludGVyICovCisgICAg ICAgICAgICBpZiAoYyA9PSAqdHRfdHJtYXRjaFtpXSkgeyAgLyogQ29tcGFyZSB0aGlzIGNoYXJh Y3RlciAqLworICAgICAgICAgICAgICAgIHR0X3RybWF0Y2hbaV0rKzsgICAgICAgIC8qIEl0IG1h dGNoZXMgKi8KKyAgICAgICAgICAgICAgICBpZiAoISp0dF90cm1hdGNoW2ldKSB7ICAvKiBFbmQg b2YgbWF0Y2ggc3RyaW5nPyAqLworICAgICAgICAgICAgICAgICAgICB0dF90cm1hdGNoW2ldID0g KENIQVIgKikgdHRfdHJpZ2dlcltpXTsgLyogWWVzLCByZXdpbmQsICovCisgICAgICAgICAgICAg ICAgICAgIGRlYnVnKEYxMDEsImF1dG9leGl0Y2hrIix0dF90cmlnZ2VyW2ldLGkpOyAvKiBsb2cs ICovCisgICAgICAgICAgICAgICAgICAgIHJldHVybihpKTsgICAgICAgICAgLyogYW5kIHJldHVy biBzdWNjZXNzICovCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlICAgICAg ICAgICAgICAgICAgICAgIC8qIE5vIG1hdGNoICovCisgICAgICAgICAgICAgIHR0X3RybWF0Y2hb aV0gPSAoQ0hBUiAqKSB0dF90cmlnZ2VyW2ldOyAvKiBSZXdpbmQgbWF0Y2ggc3RyaW5nICovCisg ICAgICAgIH0gLyogYW5kIGdvIG9uIHRoZSBuZXh0IG1hdGNoIHN0cmluZyAqLworICAgIH0KKyAg ICByZXR1cm4oLTEpOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBObyBtYXRjaCBmb3VuZCAq LworfQorI2VuZGlmIC8qIENLX1RSSUdHRVIgKi8KKworI2lmbmRlZiBOT1NIT1cKKy8qICBTIEgg TyBNIEQgTSAgLS0gIFNob3cgbW9kZW0gc2lnbmFscyAgKi8KKworVk9JRAorc2hvbWRtKCkgewor LyoKKyAgTm90ZSB1c2Ugb2YgIlxyXG4iIHRvIG1ha2Ugc3VyZSB0aGlzIHJlcG9ydCBwcmludHMg cmlnaHQsIGV2ZW4gd2hlbgorICBjYWxsZWQgZHVyaW5nIENPTk5FQ1QgbW9kZS4KKyovCisgICAg aW50IHk7CisgICAgeSA9IHR0Z21kbSgpOworICAgIHN3aXRjaCAoeSkgeworICAgICAgY2FzZSAt MzogcHJpbnRmKAorICAgICAgICAgICAgICAgICAiTW9kZW0gc2lnbmFscyB1bmF2YWlsYWJsZSBp biB0aGlzIHZlcnNpb24gb2YgS2VybWl0XHJcbiIpOworICAgICAgICAgICAgICAgYnJlYWs7Cisg ICAgICBjYXNlIC0yOiBwcmludGYoIk5vIG1vZGVtIGNvbnRyb2wgZm9yIHRoaXMgZGV2aWNlXHJc biIpOyBicmVhazsKKyAgICAgIGNhc2UgLTE6IHByaW50ZigiTW9kZW0gc2lnbmFscyB1bmF2YWls YWJsZVxyXG4iKTsgYnJlYWs7CisgICAgICBkZWZhdWx0OgorI2lmbmRlZiBNQUMKKyAgICAgICAg cHJpbnRmKAorICAgICAgICAgICIgQ2FycmllciBEZXRlY3QgICAgICAoQ0QpOiAgJXNcclxuIiwo eSAmIEJNX0RDRCkgPyAiT24iOiAiT2ZmIik7CisgICAgICAgIHByaW50ZigKKyAgICAgICAgICAi IERhdGFzZXQgUmVhZHkgICAgICAgKERTUik6ICVzXHJcbiIsKHkgJiBCTV9EU1IpID8gIk9uIjog Ik9mZiIpOworI2VuZGlmIC8qIE1BQyAqLworICAgICAgICBwcmludGYoCisgICAgICAgICAgIiBD bGVhciBUbyBTZW5kICAgICAgIChDVFMpOiAlc1xyXG4iLCh5ICYgQk1fQ1RTKSA/ICJPbiI6ICJP ZmYiKTsKKyNpZm5kZWYgU1RSQVRVUworI2lmbmRlZiBNQUMKKyAgICAgICAgcHJpbnRmKAorICAg ICAgICAgICIgUmluZyBJbmRpY2F0b3IgICAgICAoUkkpOiAgJXNcclxuIiwoeSAmIEJNX1JORykg PyAiT24iOiAiT2ZmIik7CisjZW5kaWYgLyogTUFDICovCisgICAgICAgIHByaW50ZigKKyAgICAg ICAgICAiIERhdGEgVGVybWluYWwgUmVhZHkgKERUUik6ICVzXHJcbiIsCisjaWZkZWYgTlQKKyAg ICAgICAgICAiKHVua25vd24pIgorI2Vsc2UgLyogTlQgKi8KKyAgICAgICAgICAoeSAmIEJNX0RU UikgPyAiT24iOiAiT2ZmIgorI2VuZGlmIC8qIE5UICovCisgICAgICAgICAgKTsKKyNpZm5kZWYg TUFDCisgICAgICAgIHByaW50ZigKKyAgICAgICAgICAiIFJlcXVlc3QgVG8gU2VuZCAgICAgKFJU Uyk6ICVzXHJcbiIsCisjaWZkZWYgTlQKKyAgICAgICAgICAiKHVua25vd24pIgorI2Vsc2UgLyog TlQgKi8KKyAgICAgICAgICAoeSAmIEJNX1JUUykgPyAiT24iOiAiT2ZmIgorI2VuZGlmIC8qIE5U ICovCisgICAgICAgICAgKTsKKyNlbmRpZiAvKiBNQUMgKi8KKyNlbmRpZiAvKiBTVFJBVFVTICov CisgICAgfQorI2lmZGVmIEJFVEFERUJVRworI2lmZGVmIENLX1RBUEkKKyAgICBpZiAodHR0YXBp ICYmICF0YXBpcGFzcykgeworICAgICAgICBMUERFVkNGRyAgICAgICAgbHBEZXZDZmcgPSBOVUxM OworICAgICAgICBMUENPTU1DT05GSUcgICAgbHBDb21tQ29uZmlnID0gTlVMTDsKKyAgICAgICAg TFBNT0RFTVNFVFRJTkdTIGxwTW9kZW1TZXR0aW5ncyA9IE5VTEw7CisgICAgICAgIERDQiAqICAg ICAgICAgICBscERDQiA9IE5VTEw7CisKKyAgICAgICAgaWYgKGNrdGFwaUdldE1vZGVtU2V0dGlu Z3MoJmxwRGV2Q2ZnLCZscE1vZGVtU2V0dGluZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAmbHBDb21tQ29uZmlnLCZscERDQikpIHsKKyAgICAgICAgICAgIHByaW50Zigi XG4iKTsKKyAgICAgICAgICAgIGNrdGFwaURpc3BsYXlNb2RlbVNldHRpbmdzKGxwRGV2Q2ZnLGxw TW9kZW1TZXR0aW5ncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxw Q29tbUNvbmZpZyxscERDQik7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgLyogQ0tfVEFQSSAq LworI2VuZGlmIC8qIEJFVEFERUJVRyAqLworfQorI2VuZGlmIC8qIE5PU0hPVyAqLworI2VuZGlm IC8qIE5PTE9DQUwgKi8KKworI2lmbmRlZiBOT1hGRVIKKy8qICBTIEQgRSBCIFUgIC0tIFJlY29y ZCBzcGFyIHJlc3VsdHMgaW4gZGVidWdnaW5nIGxvZyAgKi8KKworVk9JRAorc2RlYnUobGVuKSBp bnQgbGVuOyB7CisgICAgZGVidWcoRjExMSwic3BhcjogZGF0YSIsKGNoYXIgKikgcmRhdGFwLGxl bik7CisgICAgZGVidWcoRjEwMSwiIHNwc2l6ICIsIiIsIHNwc2l6KTsKKyAgICBkZWJ1ZyhGMTAx LCIgdGltaW50IiwiIix0aW1pbnQpOworICAgIGRlYnVnKEYxMDEsIiBucGFkICAiLCIiLCAgbnBh ZCk7CisgICAgZGVidWcoRjEwMSwiIHBhZGNoICIsIiIsIHBhZGNoKTsKKyAgICBkZWJ1ZyhGMTAx LCIgc2VvbCAgIiwiIiwgIHNlb2wpOworICAgIGRlYnVnKEYxMDEsIiBjdGxxICAiLCIiLCAgY3Rs cSk7CisgICAgZGVidWcoRjEwMSwiIGVicSAgICIsIiIsICAgZWJxKTsKKyAgICBkZWJ1ZyhGMTAx LCIgZWJxZmxnIiwiIixlYnFmbGcpOworICAgIGRlYnVnKEYxMDEsIiBiY3RyICAiLCIiLCAgYmN0 cik7CisgICAgZGVidWcoRjEwMSwiIHJwdHEgICIsIiIsICBycHRxKTsKKyAgICBkZWJ1ZyhGMTAx LCIgcnB0ZmxnIiwiIixycHRmbGcpOworICAgIGRlYnVnKEYxMDEsIiBsc2NhcHUiLCIiLGxzY2Fw dSk7CisgICAgZGVidWcoRjEwMSwiIGF0Y2FwdSIsIiIsYXRjYXB1KTsKKyAgICBkZWJ1ZyhGMTAx LCIgbHBjYXB1IiwiIixscGNhcHUpOworICAgIGRlYnVnKEYxMDEsIiBzd2NhcHUiLCIiLHN3Y2Fw dSk7CisgICAgZGVidWcoRjEwMSwiIHdzbG90biIsIiIsIHdzbG90bik7CisgICAgZGVidWcoRjEw MSwiIHdoYXRydSIsIiIsIHdoYXRydSk7Cit9CisvKiAgUiBEIEUgQiBVIC0tIERlYnVnZ2luZyBk aXNwbGF5IG9mIHJwYXIoKSB2YWx1ZXMgICovCisKK1ZPSUQKK3JkZWJ1KGQsbGVuKSBDSEFSICpk OyBpbnQgbGVuOyB7CisgICAgZGVidWcoRjExMSwicnBhcjogZGF0YSIsZCxsZW4pOworICAgIGRl YnVnKEYxMDEsIiBycHNpeiAiLCIiLCB4dW5jaGFyKGRbMF0pKTsKKyAgICBkZWJ1ZyhGMTAxLCIg cnRpbW8gIiwiIiwgcnRpbW8pOworICAgIGRlYnVnKEYxMDEsIiBteXBhZG4iLCIiLG15cGFkbik7 CisgICAgZGVidWcoRjEwMSwiIG15cGFkYyIsIiIsbXlwYWRjKTsKKyAgICBkZWJ1ZyhGMTAxLCIg ZW9sICAgIiwiIiwgICBlb2wpOworICAgIGRlYnVnKEYxMDEsIiBjdGxxICAiLCIiLCAgY3RscSk7 CisgICAgZGVidWcoRjEwMSwiIHNxICAgICIsIiIsICAgIHNxKTsKKyAgICBkZWJ1ZyhGMTAxLCIg ZWJxICAgIiwiIiwgICBlYnEpOworICAgIGRlYnVnKEYxMDEsIiBlYnFmbGciLCIiLGVicWZsZyk7 CisgICAgZGVidWcoRjEwMSwiIGJjdHIgICIsIiIsICBiY3RyKTsKKyAgICBkZWJ1ZyhGMTAxLCIg cnB0cSAgIiwiIiwgIGRbOF0pOworICAgIGRlYnVnKEYxMDEsIiBycHRmbGciLCIiLHJwdGZsZyk7 CisgICAgZGVidWcoRjEwMSwiIGNhcGFzICIsIiIsIGNhcGFzKTsKKyAgICBkZWJ1ZyhGMTAxLCIg Yml0cyAgIiwiIixkW2NhcGFzXSk7CisgICAgZGVidWcoRjEwMSwiIGxzY2FwdSIsIiIsbHNjYXB1 KTsKKyAgICBkZWJ1ZyhGMTAxLCIgYXRjYXB1IiwiIixhdGNhcHUpOworICAgIGRlYnVnKEYxMDEs IiBscGNhcHUiLCIiLGxwY2FwdSk7CisgICAgZGVidWcoRjEwMSwiIHN3Y2FwdSIsIiIsc3djYXB1 KTsKKyAgICBkZWJ1ZyhGMTAxLCIgd3Nsb3RyIiwiIiwgd3Nsb3RyKTsKKyAgICBkZWJ1ZyhGMTAx LCIgcnBzaXooZXh0ZW5kZWQpIiwiIixycHNpeik7Cit9CisKKyNpZmRlZiBDT01NRU5UCisvKiAg QyBIIEsgRSBSIFIgIC0tICBEZWNpZGUgd2hldGhlciB0byBleGl0IHVwb24gYSBwcm90b2NvbCBl cnJvciAgKi8KKworVk9JRAorY2hrZXJyKCkgeworICAgIGlmIChiYWNrZ3JkICYmICFzZXJ2ZXIp IGZhdGFsKCJQcm90b2NvbCBlcnJvciIpOworfQorI2VuZGlmIC8qIENPTU1FTlQgKi8KKyNlbmRp ZiAvKiBOT1hGRVIgKi8KKworLyogIEYgQSBUIEEgTCAgLS0gIEZhdGFsIGVycm9yIG1lc3NhZ2Ug Ki8KKworVk9JRAorZmF0YWwobXNnKSBjaGFyICptc2c7IHsKKyAgICBleHRlcm4gaW50IGluaXRm bGc7CisgICAgc3RhdGljIGludCBpbml0aW5nID0gMDsKKyAgICBpZiAoIW1zZykgbXNnID0gIiI7 CisgICAgZGVidWcoRjExMSwiZmF0YWwiLG1zZyxpbml0ZmxnKTsKKworICAgIGlmICghaW5pdGZs ZykgewkJCS8qIElmIGNhbGxlZCBmcm9tIHByZXNjYW4gKi8KKwlpZiAoaW5pdGluZykJCQkvKiBv ciBjYWxsZWQgZnJvbSBzeXNpbml0KCkgKi8KKyAgICAgICAgICBleGl0KDI1Myk7CisJaW5pdGlu ZyA9IDE7CisJc3lzaW5pdCgpOworICAgIH0KKworICAgIGRlYnVnKEYxMTEsImZhdGFsIixtc2cs eGl0c3RhKTsKKyAgICB0bG9nKEYxMTAsIkZhdGFsOiIsbXNnLDBMKTsKKyNpZmRlZiBWTVMKKyAg ICBpZiAoc3RybmNtcChtc2csIiVDS0VSTUlUIiw4KSkKKyAgICAgIGNvbm9sKCIlQ0tFUk1JVC1F LUZBVEFMLCAiKTsKKyAgICBjb25vbGwobXNnKTsKKyNlbHNlIC8qICFWTVMgKi8KKyAgICBjb25v bGwobXNnKTsKKyNlbmRpZiAvKiBWTVMgKi8KKyNpZmRlZiBPUzIKKyNpZm5kZWYgTk9YRkVSCisg ICAgaWYgKHhmcmJlbCkgeworICAgICAgICBibGVlcChCUF9GQUlMKTsKKyAgICAgICAgc2xlZXAo MSk7CisgICAgICAgIGJsZWVwKEJQX0ZBSUwpOworICAgIH0KKyNlbmRpZiAvKiBOT1hGRVIgKi8K KworI2VuZGlmIC8qIE9TMiAqLworICAgIGRvZXhpdChCQURfRVhJVCx4aXRzdGEgfCAxKTsgICAg ICAgIC8qIEV4aXQgaW5kaWNhdGluZyBmYWlsdXJlICovCit9CisKKyNpZm5kZWYgTk9YRkVSCisv KiAgQiBMIEQgTCBFIE4gIC0tICBNYWtlIGxlbmd0aC1lbmNvZGVkIGNvcHkgb2Ygc3RyaW5nICAq LworCitjaGFyICoKK2JsZGxlbihzdHIsZGVzdCkgY2hhciAqc3RyLCAqZGVzdDsgeworICAgIGlu dCBsZW47CisgICAgbGVuID0gKGludClzdHJsZW4oc3RyKTsKKyAgICBpZiAobGVuID4gOTQpCisg ICAgICAqZGVzdCA9IFNQOworICAgIGVsc2UKKyAgICAgICpkZXN0ID0gKGNoYXIpIHRvY2hhcihs ZW4pOworICAgIHN0cmNweShkZXN0KzEsc3RyKTsJCQkvKiBDaGVja2VkIGJlbG93IGluIHNldGdl bigpICovCisgICAgcmV0dXJuKGRlc3QrbGVuKzEpOworfQorCisKKy8qICBTIEUgVCBHIEUgTiAg LS0gIENvbnN0cnVjdCBhIGdlbmVyaWMgY29tbWFuZCAgKi8KKy8qCisgIENhbGwgd2l0aCBHZW5l cmljIGNvbW1hbmQgY2hhcmFjdGVyIGZvbGxvd2VkIGJ5IHRocmVlIHN0cmluZyBhcmd1bWVudHMu CisgIFRyYWlsaW5nIHN0cmluZ3MgYXJlIGFsbG93ZWQgdG8gYmUgZW1wdHkgKCIiKS4gIEVhY2gg c3RyaW5nIGV4Y2VwdCB0aGUgbGFzdAorICBub24tZW1wdHkgc3RyaW5nIG11c3QgYmUgbGVzcyB0 aGFuIDk1IGNoYXJhY3RlcnMgbG9uZy4gIFRoZSBmaW5hbCBub25lbXB0eQorICBzdHJpbmcgaXMg YWxsb3dlZCB0byBiZSBsb25nZXIuCisqLworQ0hBUgorI2lmZGVmIENLX0FOU0lDCitzZXRnZW4o Y2hhciB0eXBlLCBjaGFyICogYXJnMSwgY2hhciAqIGFyZzIsIGNoYXIgKiBhcmczKQorI2Vsc2UK K3NldGdlbih0eXBlLGFyZzEsYXJnMixhcmczKSBjaGFyIHR5cGUsICphcmcxLCAqYXJnMiwgKmFy ZzM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIHNldGdlbiAqLyB7CisgICAgY2hhciAqdXBz dHIsICpjcDsKKyNpZmRlZiBEWU5BTUlDCisgICAgaWYgKCFjbWRzdHIpCisgICAgICBpZiAoIShj bWRzdHIgPSBtYWxsb2MoTUFYU1AgKyAxKSkpCisgICAgICAgIGZhdGFsKCJzZXRnZW46IGNhbid0 IGFsbG9jYXRlIG1lbW9yeSIpOworI2VuZGlmIC8qIERZTkFNSUMgKi8KKworICAgIGNwID0gY21k c3RyOworICAgICpjcCsrID0gdHlwZTsKKyAgICAqY3AgPSBOVUw7CisgICAgaWYgKCFhcmcxKSBh cmcxID0gIiI7CisgICAgaWYgKCFhcmcyKSBhcmcyID0gIiI7CisgICAgaWYgKCFhcmczKSBhcmcz ID0gIiI7CisgICAgaWYgKCgoaW50KXN0cmxlbihhcmcxKSsoaW50KXN0cmxlbihhcmcyKSsoaW50 KXN0cmxlbihhcmczKSs0KSA8IE1BWFNQKSB7CisJaWYgKCphcmcxICE9IE5VTCkgeworCSAgICB1 cHN0ciA9IGJsZGxlbihhcmcxLGNwKTsKKwkgICAgaWYgKCphcmcyICE9IE5VTCkgeworCQl1cHN0 ciA9IGJsZGxlbihhcmcyLHVwc3RyKTsKKwkJaWYgKCphcmczICE9IE5VTCkgYmxkbGVuKGFyZzMs dXBzdHIpOworCSAgICB9CisJfQorCWNtYXJnID0gY21kc3RyOworCWRlYnVnKEYxMTAsInNldGdl biIsY21hcmcsMCk7CisJcmV0dXJuKCdnJyk7CisgICAgfQorICAgIHJldHVybignRScpOworfQor I2VuZGlmIC8qIE5PWEZFUiAqLworCisjaWZuZGVmIE5PTVNFTkQKK3N0YXRpYyBjaGFyICptZ2J1 ZnAgPSBOVUxMOworCisvKiAgRiBOIFAgQSBSIFMgRSAgLS0gICovCisKKy8qCisgIEFyZ3VtZW50 IGlzIGEgY2hhcmFjdGVyIHN0cmluZyBjb250YWluaW5nIG9uZSBvciBtb3JlIGZpbGVzcGVjcy4K KyAgVGhpcyBmdW5jdGlvbiBicmVha3MgdGhlIHN0cmluZyBhcGFydCBpbnRvIGFuIGFycmF5IG9m IHBvaW50ZXJzLCBvbmUKKyAgdG8gZWFjaCBmaWxlc3BlYywgYW5kIHJldHVybnMgdGhlIG51bWJl ciBvZiBmaWxlc3BlY3MuICBVc2VkIGJ5IHNlcnZlcgorICB3aGVuIGl0IHJlY2VpdmVzIGEgR0VU IGNvbW1hbmQgdG8gYWxsb3cgaXQgdG8gcHJvY2VzcyBtdWx0aXBsZSBmaWxlCisgIHNwZWNpZmlj YXRpb25zIGluIG9uZSB0cmFuc2FjdGlvbi4gIFNldHMgY21saXN0IHRvIHBvaW50IHRvIGEgbGlz dCBvZgorICBmaWxlIHBvaW50ZXJzLCBleGFjdGx5IGFzIGlmIHRoZXkgd2VyZSBjb21tYW5kIGxp bmUgYXJndW1lbnRzLgorCisgIFRoaXMgdmVyc2lvbiBvZiBmbnBhcnNlIHRyZWF0cyBzcGFjZXMg YXMgZmlsZW5hbWUgc2VwYXJhdG9ycy4gIElmIHlvdXIKKyAgb3BlcmF0aW5nIHN5c3RlbSBhbGxv d3Mgc3BhY2VzIGluIGZpbGVuYW1lcywgeW91J2xsIG5lZWQgYSBkaWZmZXJlbnQKKyAgc2VwYXJh dG9yLgorCisgIFRoaXMgdmVyc2lvbiBvZiBmbnBhcnNlIG1hbGxvY3MgYSBzdHJpbmcgYnVmZmVy IHRvIGNvbnRhaW4gdGhlIG5hbWVzLiAgSXQKKyAgY2Fubm90IGFzc3VtZSB0aGF0IHRoZSBzdHJp bmcgdGhhdCBpcyBwb2ludGVkIHRvIGJ5IHRoZSBhcmd1bWVudCBpcyBzYWZlLgorKi8KK2ludAor Zm5wYXJzZShzdHJpbmcpIGNoYXIgKnN0cmluZzsgeworICAgIGNoYXIgKnAsICpzLCAqcTsKKyAg ICBpbnQgciA9IDAsIHg7ICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXR1cm4gY29kZSAqLwor I2lmZGVmIFJFQ1VSU0lWRQorICAgIGRlYnVnKEYxMTEsImZucGFyc2UiLHN0cmluZyxyZWN1cnNp dmUpOworI2VuZGlmIC8qIFJFQ1VSU0lWRSAqLworCisgICAgaWYgKG1nYnVmcCkgZnJlZShtZ2J1 ZnApOyAgICAgICAgICAgLyogRnJlZSB0aGlzIGZyb20gbGFzdCB0aW1lLiAqLworICAgIG1nYnVm cCA9IG1hbGxvYygoaW50KXN0cmxlbihzdHJpbmcpKzIpOworICAgIGlmICghbWdidWZwKSB7Cisg ICAgICAgIGRlYnVnKEYxMDAsImZucGFyc2UgbWFsbG9jIGVycm9yIiwiIiwwKTsKKyAgICAgICAg cmV0dXJuKDApOworICAgIH0KKyNpZm5kZWYgTk9JQ1AKKyNpZm5kZWYgTk9TUEwKKyAgICBja3N0 cm5jcHkoZnNwZWMsc3RyaW5nLGZzcGVjbGVuKTsgICAvKiBNYWtlIGNvcHkgZm9yIFx2KGZpbGVz cGVjKSAqLworI2VuZGlmIC8qIE5PU1BMICovCisjZW5kaWYgLyogTk9JQ1AgKi8KKyAgICBzID0g c3RyaW5nOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJbnB1dCBzdHJpbmcgKi8KKyAgICBw ID0gcSA9IG1nYnVmcDsgICAgICAgICAgICAgICAgICAgICAvKiBQb2ludCB0byB0aGUgY29weSAq LworICAgIHIgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEluaXRpYWxpemUg b3VyIHJldHVybiBjb2RlICovCisgICAgd2hpbGUgKCpzID09IFNQIHx8ICpzID09IEhUKSAgICAg ICAgLyogU2tpcCBsZWFkaW5nIHNwYWNlcyBhbmQgdGFicyAqLworICAgICAgcysrOworICAgIGZv ciAoeCA9IHN0cmxlbihzKTsgICAgICAgICAgICAgICAgIC8qIFN0cmlwIHRyYWlsaW5nIHNwYWNl cyAqLworICAgICAgICAgKHggPiAxKSAmJiAoc1t4LTFdID09IFNQIHx8IHNbeC0xXSA9PSBIVCk7 CisgICAgICAgICB4LS0pCisgICAgICBzW3gtMV0gPSBOVUw7CisgICAgd2hpbGUgKDEpIHsgICAg ICAgICAgICAgICAgICAgICAgICAgLyogTG9vcCB0aHJvdWdoIHJlc3Qgb2Ygc3RyaW5nICovCisg ICAgICAgIGlmICgqcyA9PSBDTURRKSB7ICAgICAgICAgICAgICAgLyogQmFja3NsYXNoIChxdW90 ZSBjaGFyYWN0ZXIpPyAqLworICAgICAgICAgICAgaWYgKCh4ID0geHhlc2MoJnMpKSA+IC0xKSB7 IC8qIEdvIGludGVycHJldCBpdC4gKi8KKyAgICAgICAgICAgICAgICAqcSsrID0gKGNoYXIpIHg7 ICAgICAgICAvKiBOdW1lcmljIGJhY2tzbGFzaCBjb2RlLCBvayAqLworICAgICAgICAgICAgfSBl bHNlIHsgICAgICAgICAgICAgICAgICAgIC8qIEp1c3QgbGV0IGl0IHF1b3RlIG5leHQgY2hhciAq LworICAgICAgICAgICAgICAgIHMrKzsgICAgICAgICAgICAgICAgICAgIC8qIGdldCBwYXN0IHRo ZSBiYWNrc2xhc2ggKi8KKyAgICAgICAgICAgICAgICAqcSsrID0gKnMrKzsgICAgICAgICAgICAv KiBkZXBvc2l0IG5leHQgY2hhciAqLworICAgICAgICAgICAgfQorICAgICAgICAgICAgY29udGlu dWU7CisgICAgICAgIH0gZWxzZSBpZiAoKnMgPT0gU1AgfHwgKnMgPT0gTlVMKSB7IC8qIFVucXVv dGVkIHNwYWNlIG9yIE5VTD8gKi8KKyAgICAgICAgICAgICpxKysgPSBOVUw7ICAgICAgICAgICAg ICAgICAvKiBFbmQgb2Ygb3V0cHV0IGZpbGVuYW1lLiAqLworICAgICAgICAgICAgbXNmaWxlc1ty XSA9IHA7ICAgICAgICAgICAgIC8qIEFkZCB0aGlzIGZpbGVuYW1lIHRvIHRoZSBsaXN0ICovCisg ICAgICAgICAgICBkZWJ1ZyhGMTExLCJmbnBhcnNlIixtc2ZpbGVzW3JdLHIpOworICAgICAgICAg ICAgcisrOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvdW50IGl0ICovCisgICAgICAgICAg ICBpZiAoKnMgPT0gTlVMKSBicmVhazsgICAgICAgLyogRW5kIG9mIHN0cmluZz8gKi8KKyAgICAg ICAgICAgIHdoaWxlICgqcyA9PSBTUCkgcysrOyAgICAgICAvKiBTa2lwIHJlcGVhdGVkIHNwYWNl cyAqLworICAgICAgICAgICAgcCA9IHE7ICAgICAgICAgICAgICAgICAgICAgIC8qIFN0YXJ0IG9m IG5leHQgbmFtZSAqLworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0gZWxzZSAqcSsr ID0gKnM7ICAgICAgICAgICAgICAgLyogT3RoZXJ3aXNlIGNvcHkgdGhlIGNoYXJhY3RlciAqLwor ICAgICAgICBzKys7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5leHQgaW5wdXQgY2hh cmFjdGVyICovCisgICAgfQorICAgIGRlYnVnKEYxMDEsImZucGFyc2UgciIsIiIscik7CisgICAg bXNmaWxlc1tyXSA9ICIiOyAgICAgICAgICAgICAgICAgICAgLyogUHV0IGVtcHR5IHN0cmluZyBh dCBlbmQgb2YgbGlzdCAqLworICAgIGNtbGlzdCA9IG1zZmlsZXM7CisgICAgcmV0dXJuKHIpOwor fQorI2VuZGlmIC8qIE5PTVNFTkQgKi8KKworY2hhciAqICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIGRiY2hyKCkgZm9yIERFQlVHIFNFU1NJT04gKi8KK2RiY2hyKGMpIGludCBj OyB7CisgICAgc3RhdGljIGNoYXIgc1s4XTsKKyAgICBjaGFyICpjcCA9IHM7CisKKyAgICBjICY9 IDB4ZmY7CisgICAgaWYgKGMgJiAweDgwKSB7ICAgICAgICAgICAgICAgICAgICAgLyogOHRoIGJp dCBvbiAqLworICAgICAgICAqY3ArKyA9ICd+JzsKKyAgICAgICAgYyAmPSAweDdmOworICAgIH0K KyAgICBpZiAoYyA8IFNQKSB7ICAgICAgICAgICAgICAgICAgICAgICAvKiBDb250cm9sIGNoYXJh Y3RlciAqLworICAgICAgICAqY3ArKyA9ICdeJzsKKyAgICAgICAgKmNwKysgPSAoY2hhcikgY3Rs KGMpOworICAgIH0gZWxzZSBpZiAoYyA9PSBERUwpIHsKKyAgICAgICAgKmNwKysgPSAnXic7Cisg ICAgICAgICpjcCsrID0gJz8nOworICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIFByaW50aW5nIGNoYXJhY3RlciAqLworICAgICAgICAqY3ArKyA9IChjaGFyKSBjOwor ICAgIH0KKyAgICAqY3AgPSAnXDAnOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUZXJtaW5h dGUgc3RyaW5nICovCisgICAgY3AgPSBzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog UmV0dXJuIHBvaW50ZXIgdG8gaXQgKi8KKyAgICByZXR1cm4oY3ApOworfQorCisvKiAgQyBLIEgg TyBTIFQgIC0tICBHZXQgbmFtZSBvZiBsb2NhbCBob3N0ICh3aGVyZSBDLUtlcm1pdCBpcyBydW5u aW5nKSAgKi8KKworLyoKKyAgQ2FsbCB3aXRoIHBvaW50ZXIgdG8gYnVmZmVyIHRvIHB1dCBob3N0 bmFtZSBpbiwgYW5kIGxlbmd0aCBvZiBidWZmZXIuCisgIENvcGllcyBob3N0bmFtZSBpbnRvIGJ1 ZmZlciBvbiBzdWNjZXNzLCBwdXRzIG51bGwgc3RyaW5nIGluIGJ1ZmZlciBvbgorICBmYWlsdXJl LgorKi8KKyNpZmRlZiBCU0Q0NAorI2RlZmluZSBCU0Q0CisjdW5kZWYgQVRUU1YKKyNlbmRpZiAv KiBCU0Q0NCAqLworCisjaWZkZWYgU1ZPUlBPU0lYCisjaWZuZGVmIEJTRDQ0CisjaWZuZGVmIGFw b2xsbworI2luY2x1ZGUgPHN5cy91dHNuYW1lLmg+CisjZW5kaWYgLyogYXBvbGxvICovCisjZW5k aWYgLyogQlNENDQgKi8KKyNlbHNlCisjaWZkZWYgQkVMTFYxMAorI2luY2x1ZGUgPHV0c25hbWUu aD4KKyNlbmRpZiAvKiBCRUxMVjEwICovCisjZW5kaWYgLyogU1ZPUlBPU0lYKi8KKworI2lmZGVm IENLU1lTTE9HCitleHRlcm4gY2hhciB1aWRidWZbXSwgKiBjbGllbnRob3N0OworI2VuZGlmIC8q IENLU1lTTE9HICovCisKK1ZPSUQKK2NraG9zdCh2dmJ1Zix2dmxlbikgY2hhciAqIHZ2YnVmOyBp bnQgdnZsZW47IHsKKworI2lmbmRlZiBOT1BVU0gKKyAgICBleHRlcm4gaW50IG5vcHVzaDsKKyNp Zm5kZWYgTk9TRVJWRVIKKyAgICBleHRlcm4gaW50IGVuX2hvczsKKyNlbmRpZiAvKiBOT1NFUlZF UiAqLworI2VuZGlmIC8qIE5PUFVTSCAqLworCisjaWZkZWYgcGRwMTEKKyAgICAqdnZidWYgPSBO VUw7CisjZWxzZSAgLyogRXZlcnl0aGluZyBlbHNlIC0gcmVzdCBvZiB0aGlzIHJvdXRpbmUgKi8K KworICAgIGNoYXIgKmc7CisgICAgaW50IGhhdmVmdWxsID0gMDsKKyNpZmRlZiBWTVMKKyAgICBp bnQgeDsKKyNlbmRpZiAvKiBWTVMgKi8KKworI2lmZGVmIFNWT1JQT1NJWAorI2lmbmRlZiBCU0Q0 NAorI2lmbmRlZiBfMzg2QlNECisjaWZuZGVmIEFQT0xMT1NSMTAKKyAgICBzdHJ1Y3QgdXRzbmFt ZSBobmFtZTsKKyNlbmRpZiAvKiBBUE9MTE9TUjEwICovCisjZW5kaWYgLyogXzM4NkJTRCAqLwor I2VuZGlmIC8qIEJTRDQ0ICovCisjZW5kaWYgLyogU1ZPUlBPU0lYICovCisjaWZkZWYgZGF0YWdl bmVyYWwKKyAgICBpbnQgYWMwID0gKGNoYXIgKikgdnZidWYsIGFjMSA9IC0xLCBhYzIgPSAwOwor I2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCisKKyNpZm5kZWYgTk9QVVNICisgICAgaWYgKGdldGVu digiQ0tfTk9QVVNIIikpIHsgICAgICAgICAgLyogTm8gc2hlbGwgYWNjZXNzIGFsbG93ZWQgKi8K KyAgICAgICAgbm9wdXNoID0gMTsgICAgICAgICAgICAgICAgICAgICAvKiBvbiB0aGlzIGhvc3Qu Li4gKi8KKyNpZm5kZWYgTk9TRVJWRVIKKyAgICAgICAgZW5faG9zID0gMDsKKyNlbmRpZiAvKiBO T1NFUlZFUiAqLworICAgIH0KKyNlbmRpZiAvKiBOT1BVU0ggKi8KKworICAgICp2dmJ1ZiA9IE5V TDsgICAgICAgICAgICAgICAgICAgICAgIC8qIEhvdyBsZXQncyBnZXQgb3VyIGhvc3QgbmFtZSAu Li4gKi8KKworI2lmbmRlZiBCRUxMVjEwICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERvZXMg bm90IGhhdmUgZ2V0aG9zdG5hbWUoKSAqLworI2lmbmRlZiBPWE9TCisjaWZkZWYgU1ZPUlBPU0lY CisjaWZkZWYgQVBPTExPU1IxMAorICAgIGNrc3RybmNweSh2dmJ1ZiwiQXBvbGxvIix2dmxlbik7 CisjZWxzZQorI2lmZGVmIEJTRDQ0CisgICAgaWYgKGdldGhvc3RuYW1lKHZ2YnVmLHZ2bGVuKSA8 IDApCisgICAgICAqdnZidWYgPSBOVUw7CisjZWxzZQorI2lmZGVmIF8zODZCU0QKKyAgICBpZiAo Z2V0aG9zdG5hbWUodnZidWYsdnZsZW4pIDwgMCkgKnZ2YnVmID0gTlVMOworI2Vsc2UKKyNpZmRl ZiBRTlgKKyNpZmRlZiBUQ1BTT0NLRVQKKyAgICBpZiAoZ2V0aG9zdG5hbWUodnZidWYsdnZsZW4p IDwgMCkgKnZ2YnVmID0gTlVMOworI2Vsc2UKKyAgICBpZiAodW5hbWUoJmhuYW1lKSA+IC0xKSBj a3N0cm5jcHkodnZidWYsaG5hbWUubm9kZW5hbWUsdnZsZW4pOworI2VuZGlmIC8qIFRDUFNPQ0tF VCAqLworI2Vsc2UgLyogU1ZPUlBPU0lYIGJ1dCBub3QgXzM4NkJTRCBvciBCU0Q0NCAqLworI2lm ZGVmIF9faWE2NF9fCisgICAgaWYgKHVuYW1lKCZobmFtZSkgPiAtMSkgY2tzdHJuY3B5KHZ2YnVm LGhuYW1lLm5vZGVuYW1lLHZ2bGVuKTsKKyNlbHNlCisgICAgaWYgKHVuYW1lKCZobmFtZSkgPiAt MSkgeworCWNoYXIgKiBwOworCXAgPSBobmFtZS5ub2RlbmFtZTsKKyNpZmRlZiBUQ1BTT0NLRVQK KyNpZm5kZWYgTk9DS0dFVEZRSE9TVAorCWlmICghY2tzdHJjaHIocCwnLicpKQorCSAgcCA9IChj aGFyICopY2tnZXRmcWhvc3RuYW1lKHApOworI2VuZGlmIC8qIE5PQ0tHRVRGUUhPU1QgKi8KKyNl bmRpZiAvKiBUQ1BTT0NLRVQgKi8KKwlpZiAoIXApIHAgPSAiIjsKKwlpZiAoISpwKSBwID0gIih1 bmtub3duKSI7CisJY2tzdHJuY3B5KHZ2YnVmLHAsdnZsZW4pOworICAgIH0KKyNlbmRpZiAvKiBf X2lhNjRfXyAqLworI2VuZGlmIC8qIFFOWCAqLworI2VuZGlmIC8qIF8zODZCU0QgKi8KKyNlbmRp ZiAvKiBCU0Q0NCAqLworI2VuZGlmIC8qIEFQT0xMT1NSMTAgKi8KKyNlbHNlIC8qICFTVk9SUE9T SVggKi8KKyNpZmRlZiBCU0Q0CisgICAgaWYgKGdldGhvc3RuYW1lKHZ2YnVmLHZ2bGVuKSA8IDAp ICp2dmJ1ZiA9IE5VTDsKKyNlbHNlIC8qICFCU0Q0ICovCisjaWZkZWYgVk1TCisgICAgZyA9IGdl dGVudigiU1lTJE5PREUiKTsKKyAgICBpZiAoZykgY2tzdHJuY3B5KHZ2YnVmLGcsdnZsZW4pOwor ICAgIHggPSAoaW50KXN0cmxlbih2dmJ1Zik7CisgICAgaWYgKHggPiAxICYmIHZ2YnVmW3gtMV0g PT0gJzonICYmIHZ2YnVmW3gtMl0gPT0gJzonKSB2dmJ1Zlt4LTJdID0gTlVMOworI2Vsc2UKKyNp ZmRlZiBkYXRhZ2VuZXJhbAorICAgIGlmIChzeXMoJEhOQU1FLCZhYzAsJmFjMSwmYWMyKSA9PSAw KSAvKiBzdWNjZXNzZnVsICovCisgICAgICAgIHZ2bGVuID0gYWMyICsgMTsgICAgICAgICAgICAg ICAgLyogZW5oIC0gaGF2ZSB0byBhZGQgb25lICovCisjZWxzZQorI2lmZGVmIE9TMiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIE9TLzIgKi8KKyAgICBnID0gb3MyX2dldGhvc3RuYW1l KCk7CisgICAgaWYgKGcpIGNrc3RybmNweSh2dmJ1ZixnLHZ2bGVuKTsKKyNlbHNlIC8qIE9TMiAq LworI2lmZGVmIE9TSworI2lmZGVmIFRDUFNPQ0tFVAorICAgICAgICBpZiAoZ2V0aG9zdG5hbWUo dnZidWYsIHZ2bGVuKSA8IDApICp2dmJ1ZiA9IE5VTDsKKyNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8K KyNlbmRpZiAvKiBPU0sgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBkYXRhZ2VuZXJh bCAqLworI2VuZGlmIC8qIFZNUyAqLworI2VuZGlmIC8qIEJTRDQgKi8KKyNlbmRpZiAvKiBTVk9S UE9TSVggKi8KKyNlbHNlIC8qIE9YT1MgKi8KKyAgICAvKiBJZiBUQ1AvSVAgaXMgbm90IGluc3Rh bGxlZCwgZ2V0aG9zdG5hbWUoKSBmYWlscywgdXNlIHVuYW1lKCkgKi8KKyAgICBpZiAoZ2V0aG9z dG5hbWUodnZidWYsdnZsZW4pIDwgMCkgeworICAgICAgICBpZiAodW5hbWUoJmhuYW1lKSA+IC0x KQorICAgICAgICAgICAgY2tzdHJuY3B5KHZ2YnVmLGhuYW1lLm5vZGVuYW1lLHZ2bGVuKTsKKyAg ICAgICAgZWxzZQorICAgICAgICAgICAgKnZ2YnVmID0gTlVMOworICAgIH0KKyNlbmRpZiAvKiBP WE9TICovCisjZW5kaWYgLyogQkVMTFYxMCAqLworICAgIGlmICgqdnZidWYgPT0gTlVMKSB7ICAg ICAgICAgICAgICAgIC8qIElmIGl0J3Mgc3RpbGwgZW1wdHkgKi8KKyAgICAgICAgZyA9IGdldGVu digiSE9TVCIpOyAgICAgICAgICAgICAvKiB0cnkgdGhpcyAqLworICAgICAgICBpZiAoZykgY2tz dHJuY3B5KHZ2YnVmLGcsdnZsZW4pOworICAgIH0KKyAgICB2dmJ1Zlt2dmxlbi0xXSA9IE5VTDsg ICAgICAgICAgICAgICAvKiBNYWtlIHN1cmUgcmVzdWx0IGlzIHRlcm1pbmF0ZWQuICovCisjZW5k aWYgLyogcGRwMTEgKi8KK30KKyNpZmRlZiBCU0Q0NAorI3VuZGVmIEJTRDQKKyNkZWZpbmUgQVRU U1YKKyNlbmRpZiAvKiBCU0Q0NCAqLworCisvKgorICBBIFMgSyBNIE8gUiBFICAtLSAgUG9vciBw ZXJzb24ncyAibW9yZSIuCisgIFJldHVybnMgMCBpZiBubyBtb3JlLCAxIGlmIG1vcmUgd2FudGVk LgorKi8KK2ludAorYXNrbW9yZSgpIHsKKyAgICBjaGFyIGM7CisgICAgaW50IHJ2LCBjeDsKKyNp ZmRlZiBJS1NECisgICAgZXh0ZXJuIGludCB0aW1lbGltaXQ7CisjZW5kaWYgLyogSUtTRCAqLwor I2lmZGVmIElLU0RDT05GCisgICAgZXh0ZXJuIGludCBpa3NkY2Y7CisjZW5kaWYgLyogSUtTRENP TkYgKi8KKyNpZmRlZiBDS19BUEMKKyAgICBleHRlcm4gaW50IGFwY3N0YXR1cywgYXBjYWN0aXZl OworI2VuZGlmIC8qIENLX0FQQyAqLworCisjaWZkZWYgTk9JQ1AKKyAgICByZXR1cm4oMSk7Cisj ZWxzZQorICAgIGlmICgheGFza21vcmUpCisgICAgICByZXR1cm4oMSk7CisjaWZkZWYgSUtTRENP TkYKKyAgICBpZiAoaW5zZXJ2ZXIgJiYgIWlrc2RjZikKKyAgICAgIHJldHVybigxKTsKKyNlbmRp ZiAvKiBJS1NEQ09ORiAqLworI2lmZGVmIENLX0FQQworICAgIGlmIChhcGNhY3RpdmUgPT0gQVBD X0xPQ0FMIHx8CisgICAgICAgIChhcGNhY3RpdmUgPT0gQVBDX1JFTU9URSAmJiAoYXBjc3RhdHVz ICYgQVBDX05PSU5QKSkpCisgICAgICAgIHJldHVybigxKTsKKyNlbmRpZiAvKiBDS19BUEMgKi8K KyNpZmRlZiBWTVMKKyAgICBpZiAoYmF0Y2gpCisgICAgICByZXR1cm4oMSk7CisjZWxzZQorI2lm ZGVmIFVOSVgKKyAgICBpZiAoYmFja2dyZCkKKyAgICAgIHJldHVybigxKTsKKyNlbmRpZiAvKiBV TklYICovCisjZW5kaWYgLyogVk1TICovCisKKyNpZm5kZWYgVk1TCisgICAgY29uY2IoKGNoYXIp ZXNjYXBlKTsgICAgICAgICAgICAgICAgLyogRm9yY2UgQ0JSRUFLIG1vZGUuICovCisjZW5kaWYg LyogVk1TICovCisKKyAgICBydiA9IC0xOworICAgIHdoaWxlIChydiA8IDApIHsKKyNpZm5kZWYg T1MyCisgICAgICAgIHByaW50ZigibW9yZT8gIik7CisjaWZkZWYgVU5JWAorI2lmZGVmIE5PU0VU QlVGCisgICAgICAgIGZmbHVzaChzdGRvdXQpOworI2VuZGlmIC8qIE5PU0VUQlVGICovCisjZW5k aWYgLyogVU5JWCAqLworI2Vsc2UKKyAgICAgICAgcHJpbnRmKCJtb3JlPyAiKTsKKyAgICAgICAg ZmZsdXNoKHN0ZG91dCk7CisjZW5kaWYgLyogT1MyICovCisKKyNpZmRlZiBJS1NECisgICAgICAg IGlmIChpbnNlcnZlcikgeworICAgICAgICAgICAgY3ggPSBjbWRnZXRjKHRpbWVsaW1pdCk7Cisg ICAgICAgICAgICBpZiAoY3ggPCAtMSAmJiB0aW1lbGltaXQpIHsKKyAgICAgICAgICAgICAgICBw cmludGYoIlxuP0lLUyBpZGxlIHRpbWVvdXQgLSBHb29kYnllLlxuIik7CisgICAgICAgICAgICAg ICAgZG9leGl0KEdPT0RfRVhJVCwwKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoY3ggPT0gLTEp IHsJLyogQ29ubmVjdGlvbiBsb3N0ICovCisgICAgICAgICAgICAgICAgZG9leGl0KEJBRF9FWElU LDApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYyA9IChjaGFyKSBjeDsKKyAgICAgICAg fSBlbHNlIHsKKyNlbmRpZiAvKiBJS1NEICovCisjaWZkZWYgVk1TCisJICAgIGNvbmJpbigoY2hh cillc2NhcGUpOwkvKiBQcm90ZWN0IGFnYWluc3QgQ3RybC1aICovCisJICAgIGN4ID0gY29uaW5j KDApOworCSAgICBjb25jYigoY2hhcillc2NhcGUpOworI2Vsc2UKKwkgICAgY3ggPSBjbWRnZXRj KDApOworI2VuZGlmIC8qIFZNUyAqLworCSAgICBkZWJ1ZyhGMTAxLCJhc2ttb3JlIGNtZGdldGMi LCIiLGN4KTsKKwkgICAgaWYgKGN4ID09IEVPRikgeworCQlkZWJ1ZyhGMTAwLCJhc2ttb3JlIEVP RiIsIiIsMCk7CisjaWZkZWYgVk1TCisJCWMgPSAnXDAzMic7CisjZWxzZQorCQljID0gJ24nOwor I2VuZGlmIC8qIFZNUyAqLworCSAgICB9IGVsc2UgeworCQljID0gKGNoYXIpY3g7CisJICAgIH0K KwkgICAgZGVidWcoRjEwMSwiYXNrbW9yZSBjIiwiIixjKTsKKworI2lmZGVmIElLU0QKKwl9Cisj ZW5kaWYgLyogSUtTRCAqLworICAgICAgICBzd2l0Y2ggKGMpIHsKKyAgICAgICAgICAvKiBZZXMg Ki8KKwkgIGNhc2UgJ3AnOiBjYXNlICdQJzogY2FzZSAnZyc6IGNhc2UgJ0cnOiAvKiBQcm9jZWVk IG9yIEdvICovCisJICAgIHhhc2ttb3JlID0gMDsKKwkgICAgLyogZmFsbCB0aHJ1IG9uIHB1cnBv c2UgKi8KKworICAgICAgICAgIGNhc2UgU1A6IGNhc2UgJ3knOiBjYXNlICdZJzogY2FzZSAwMTI6 ICBjYXNlIDAxNToKKyNpZmRlZiBPU0sKKyAgICAgICAgICAgIHdyaXRlKDEsICJcMDE1ICAgICAg XDAxNSIsIHNpemVvZiAiXDAxNSAgICAgIFwwMTUiIC0gMSk7CisjZWxzZQorICAgICAgICAgICAg cHJpbnRmKCJcMDE1ICAgICAgXDAxNSIpOworI2VuZGlmIC8qIE9TSyAqLworICAgICAgICAgICAg cnYgPSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgLyogTm8gKi8KKyAgICAgICAg ICBjYXNlICduJzogY2FzZSAnTic6IGNhc2UgJ3EnOiBjYXNlICdRJzoKKyNpZmRlZiBPU0sKKyAg ICAgICAgICAgIHByaW50ZigiXG4iKTsKKyNlbHNlCisgICAgICAgICAgICBwcmludGYoIlwwMTVc MDEyIik7CisjZW5kaWYgLyogT1NLICovCisgICAgICAgICAgICBydiA9IDA7CisgICAgICAgICAg ICBicmVhazsKKwkgIGNhc2UgJ1wwMDMnOgorCSAgY2FzZSAnXDAwNCc6CisJICBjYXNlICdcMDMy JzoKKyNpZmRlZiBPU0sKKwkgICAgcHJpbnRmKCJeJWMuLi5cbiIsIChjICsgMDEwMCkpOworI2Vs c2UKKwkgICAgcHJpbnRmKCJeJWMuLi5cMDE1XDAxMiIsIChjICsgMDEwMCkpOworI2VuZGlmIC8q IE9TSyAqLworCSAgICBydiA9IDA7CisJICAgIGJyZWFrOworICAgICAgICAgIC8qIEludmFsaWQg YW5zd2VyICovCisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGRlYnVnKEYxMTEsImFz a21vcmUiLCJpbnZhbGlkIGFuc3dlciIsYyk7CisgICAgICAgICAgICBwcmludGYoIlkgb3Igc3Bh Y2UtYmFyIGZvciB5ZXMsIE4gZm9yIG5vLCBHIHRvIHNob3cgdGhlIHJlc3RcbiIpOworICAgICAg ICAgICAgY29udGludWU7CisgICAgICAgIH0KKyNpZmRlZiBPUzIKKyAgICAgICAgcHJpbnRmKCJc ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyIik7 CisgICAgICAgIGZmbHVzaChzdGRvdXQpOworI2VuZGlmIC8qIE9TMiAqLworICAgIH0KKyAgICBy ZXR1cm4ocnYpOworI2VuZGlmIC8qIE5PSUNQICovCit9CisKKy8qICBUIFIgQSBQICAtLSAgVGVy bWluYWwgaW50ZXJydXB0IGhhbmRsZXIgKi8KKworU0lHVFlQCisjaWZkZWYgQ0tfQU5TSUMKK3Ry YXAoaW50IHNpZykKKyNlbHNlCit0cmFwKHNpZykgaW50IHNpZzsKKyNlbmRpZiAvKiBDS19BTlNJ QyAqLworLyogdHJhcCAqLyB7CisgICAgZXh0ZXJuIGludCBiX3NhdmUsIGZfc2F2ZTsKKyNpZm5k ZWYgTk9JQ1AKKyAgICBleHRlcm4gaW50IHRpbWVsaW1pdDsKKyNlbmRpZiAvKiBOT0lDUCAqLwor I2lmZGVmIE9TMgorICAgIGV4dGVybiB1bnNpZ25lZCBsb25nIHN0YXJ0ZmxhZ3M7CisjaWZuZGVm IE5PU0VUS0VZCisgICAgZXh0ZXJuIGludCBvczJna3M7CisjZW5kaWYgLyogTk9TRVRLRVkgKi8K KyAgICBpbnQgaTsKKyNlbmRpZiAvKiBPUzIgKi8KKyNpZm5kZWYgTk9TUEwKKyAgICBleHRlcm4g aW50IGlfYWN0aXZlLCBpbnN0YXR1czsKKyNlbmRpZiAvKiBOT1NQTCAqLworI2lmZGVmIFZNUwor ICAgIGludCBpOyBGSUxFICpmOworI2VuZGlmIC8qIFZNUyAqLworICAgIGV4dGVybiBpbnQgemNo a29kLCB6Y2hraWQ7CisjaWZuZGVmIE5PU1BMCisgICAgZXh0ZXJuIGludCB1bmttYWNybzsKKyNl bmRpZiAvKiBOT1NQTCAqLworCisgICAgZGVib2sgPSAxOworI2lmZGVmIE5UU0lHCisgICAgY29u bm9pKCk7CisjZW5kaWYgLyogTlRTSUcgKi8KKyNpZmRlZiBfX0VNWF9fCisgICAgc2lnbmFsKFNJ R0lOVCwgU0lHX0FDSyk7CisjZW5kaWYKKyNpZmRlZiBHRU1ET1MKKy8qIEdFTSBpcyBub3QgcmVl bnRyYW50LCBubyBpL28gZnJvbSBpbnRlcnJ1cHQgbGV2ZWwgKi8KKyAgICBja2xvbmdqbXAoY21q YnVmLDEpOyAgICAgICAgICAgICAgICAvKiBKdW1wIGJhY2sgdG8gcGFyc2VyIG5vdyEgKi8KKyNl bmRpZiAvKiBHRU1ET1MgKi8KKworI2lmZGVmIERFQlVHCisgICAgaWYgKGRlYmxvZykgeworCWRl YnVnKEYxMDAsIioqKioqKioqKioqKioqKioqKioqKiIsIiIsMCk7CisJaWYgKHNpZyA9PSBTSUdJ TlQpCisJICBkZWJ1ZyhGMTAxLCJ0cmFwIGNhdWdodCBTSUdJTlQiLCIiLHNpZyk7CisJZWxzZSAK KwkgIGRlYnVnKEYxMDEsInRyYXAgY2F1Z2h0IHNpZ25hbCIsIiIsc2lnKTsKKwlkZWJ1ZyhGMTAw LCIqKioqKioqKioqKioqKioqKioqKioiLCIiLDApOworICAgIH0KKyNlbmRpZiAvKiBERUJVRyAq LworCisjaWZkZWYgT1MyCisgICAgaWYgKCBzaWcgPT0gU0lHQlJFQUsgJiYgKHN0YXJ0ZmxhZ3Mg JiAxMjgpICkgeworICAgICAgICBkZWJ1ZyhGMTAxLCJ0cmFwIGlnbm9yaW5nIFNJR0JSRUFLIiwi IixzaWcpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmIC8qIE9TMiAqLworCisjaWZu ZGVmIE5PSUNQCisgICAgdGltZWxpbWl0ID0gMDsgICAgICAgICAgICAgICAgICAgICAgLyogSW4g Y2FzZSB0aW1lZCBBU0sgaW50ZXJydXB0ZWQgKi8KKyNpZm5kZWYgTk9TUEwKKyAgICB1bmttYWNy byA9IDA7CQkJLyogT3IgT05fVU5LTk9XTl9NQUNSTyBpbnRlcnJ1cHRlZC4uICovCisjZW5kaWYg LyogTk9TUEwgKi8KKyNlbmRpZiAvKiBOT0lDUCAqLworICAgIHpjaGtvZCA9IDA7ICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIE9yIGZpbGUgZXhwYW5zaW9uIGludGVycnVwdGVkLi4uICovCisg ICAgemNoa2lkID0gMDsKKyAgICBpbnRlcnJ1cHRlZCA9IDE7CisKKyAgICBpZiAod2hhdCAmIFdf Q09OTkVDVCkgewkJLyogQXJlIHdlIGluIENPTk5FQ1QgbW9kZT8gKi8KKy8qCisgIFRoZSBIUCB3 b3Jrc3RhdGlvbiBSZXNldCBrZXkgc2VuZHMgc29tZSBraW5kIG9mIHVlYmVyLVNJR0lOVCB0aGF0 IGNhbiBub3QKKyAgYmUgU0lHX0lHTm9yZWQsIHNvIHdlIHdpbmQgdXAgaGVyZSBzb21laG93IChl dmVuIHRob3VnaCB0aGlzIGlzICpub3QqIHRoZQorICBjdXJyZW50IFNJR0lOVCBoYW5kbGVyKS4g IEp1c3QgcmV0dXJuLgorKi8KKyAgICAgICAgZGVidWcoRjEwMSwidHJhcDogU0lHSU5UIGNhdWdo dCBkdXJpbmcgQ09OTkVDVCIsIiIsc2lnKTsKKyAgICAgICAgU0lHUkVUVVJOOworICAgIH0KKyNp Zm5kZWYgTk9TUEwKKyAgICBpZiAoaV9hY3RpdmUpIHsgICAgICAgICAgICAgICAgICAgICAvKiBJ TlBVVCBjb21tYW5kIHdhcyBhY3RpdmU/ICovCisgICAgICAgIGlfYWN0aXZlID0gMDsgICAgICAg ICAgICAgICAgICAgLyogTm90IGFueSBtb3JlLi4uICovCisgICAgICAgIGluc3RhdHVzID0gSU5Q X1VJOyAgICAgICAgICAgICAgLyogSU5QVVQgc3RhdHVzID0gVXNlciBJbnRlcnJ1cHRlZCAqLwor ICAgIH0KKyNlbmRpZiAvKiBOT1NQTCAqLworCisjaWZuZGVmIE5PWEZFUgorICAgIGZ0cmVzZXQo KTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlc3RvcmUgZ2xvYmFsIHByb3RvY29sIHNl dHRpbmdzICovCisgICAgYmluYXJ5ID0gYl9zYXZlOyAgICAgICAgICAgICAgICAgICAgLyogVGhl biByZXN0b3JlIHRoZXNlICovCisgICAgZm5jbnYgID0gZl9zYXZlOworICAgIGJ5ZV9hY3RpdmUg PSAwOworICAgIGRpcmFjdGl2ZSA9IDA7CisgICAgY2RhY3RpdmUgPSAwOworI2VuZGlmIC8qIE5P WEZFUiAqLworICAgIHpjbG9zZShaSUZJTEUpOyAgICAgICAgICAgICAgICAgICAgIC8qIElmIHdl IHdlcmUgdHJhbnNmZXJyaW5nIGEgZmlsZSwgKi8KKyAgICB6Y2xvc2UoWk9GSUxFKTsgICAgICAg ICAgICAgICAgICAgICAvKiBjbG9zZSBpdC4gKi8KKyNpZm5kZWYgTk9JQ1AKKyAgICBjbWRzcXVv KGNtZF9xdW90aW5nKTsgICAgICAgICAgICAgICAvKiBJZiBjb21tYW5kIHF1b3Rpbmcgd2FzIHR1 cm5lZCBvZmYgKi8KKyNpZmRlZiBDS0xFQVJOCisgICAgeworCWV4dGVybiBGSUxFICogbGVhcm5m cDsKKwlleHRlcm4gaW50IGxlYXJuaW5nOworCWlmIChsZWFybmZwKSB7CisJICAgIGZjbG9zZShs ZWFybmZwKTsKKwkgICAgbGVhcm5mcCA9IE5VTEw7CisJICAgIGxlYXJuaW5nID0gMDsKKwl9Cisg ICAgfQorI2VuZGlmIC8qIENLTEVBUk4gKi8KKyNlbmRpZiAvKiBOT0lDUCAqLworI2lmZGVmIENL X0FQQworICAgIGRlbG1hYygiX2FwY19jb21tYW5kcyIsMSk7CisgICAgYXBjYWN0aXZlID0gQVBD X0lOQUNUSVZFOworI2VuZGlmIC8qIENLX0FQQyAqLworCisjaWZkZWYgVk1TCisvKgorICBGaXgg dGVybWluYWwuCisqLworICAgIGlmIChmdF93aW4pIHsgICAgICAgICAgICAgICAgICAgICAgIC8q IElmIGN1cnNlcyB3aW5kb3cgb3BlbiAqLworICAgICAgICBkZWJ1ZyhGMTAwLCJeQyB0cmFwKCkg Y3Vyc2VzIiwiIiwwKTsKKyAgICAgICAgeHhzY3JlZW4oU0NSX0NXLDAsMEwsIiIpOyAgICAgICAv KiBDbG9zZSBpdCAqLworICAgICAgICBjb25yZXMoKTsgICAgICAgICAgICAgICAgICAgICAgIC8q IFJlc3RvcmUgdGVybWluYWwgKi8KKyAgICAgICAgaSA9IHByaW50ZigiXkMuLi4iKTsgICAgICAg ICAgICAvKiBFY2hvIF5DIHRvIHN0YW5kYXJkIG91dHB1dCAqLworICAgIH0gZWxzZSB7CisgICAg ICAgIGNvbnJlcygpOworICAgICAgICBpID0gcHJpbnRmKCJeQy4uLlxuIik7ICAgICAgICAgIC8q IEVjaG8gXkMgdG8gc3RhbmRhcmQgb3V0cHV0ICovCisgICAgfQorICAgIGlmIChpIDwgMSAmJiBm ZXJyb3Ioc3Rkb3V0KSkgeyAgICAgIC8qIElmIHRoZXJlIHdhcyBhbiBlcnJvciAqLworICAgICAg ICBkZWJ1ZyhGMTAwLCJeQyB0cmFwKCkgZXJyb3IiLCIiLDApOworICAgICAgICBmY2xvc2Uoc3Rk b3V0KTsgICAgICAgICAgICAgICAgIC8qIGNsb3NlIHN0YW5kYXJkIG91dHB1dCAqLworICAgICAg ICBmID0gZm9wZW4oZGZ0dHksICJ3Iik7ICAgICAgICAgIC8qIG9wZW4gdGhlIGNvbnRyb2xsaW5n IHRlcm1pbmFsICovCisgICAgICAgIGlmIChmKSBzdGRvdXQgPSBmOyAgICAgICAgICAgICAgLyog YW5kIG1ha2UgaXQgc3RhbmRhcmQgb3V0cHV0ICovCisgICAgICAgIHByaW50ZigiXkMuLi5cbiIp OyAgICAgICAgICAgICAgLyogYW5kIGVjaG8gdGhlIF5DIGFnYWluLiAqLworICAgIH0KKyNlbHNl ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOb3QgVk1TICovCisjaWZkZWYg U1RSQVRVUworICAgIGNvbnJlcygpOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNldCBj b25zb2xlIGJhY2sgdG8gbm9ybWFsIG1vZGUgKi8KKyNlbmRpZiAvKiBTVFJBVFVTICovCisjaWZu ZGVmIE5PWEZFUgorICAgIGlmIChmdF93aW4pIHsgICAgICAgICAgICAgICAgICAgICAgIC8qIElm IGN1cnNlcyB3aW5kb3cgb3BlbiwgKi8KKyAgICAgICAgZGVidWcoRjEwMCwiXkMgdHJhcCgpIGN1 cnNlcyIsIiIsMCk7CisgICAgICAgIHh4c2NyZWVuKFNDUl9DVywwLDBMLCIiKTsJLyogY2xvc2Ug aXQuICovCisgICAgICAgIHByaW50ZigiXkMuLi4iKTsgICAgICAgICAgICAgICAgLyogRWNobyBe QyB0byBzdGFuZGFyZCBvdXRwdXQgKi8KKyAgICB9IGVsc2UgeworI2VuZGlmIC8qIE5PWEZFUiAq LworICAgICAgICBwcmludGYoIl5DLi4uXG4iKTsKKyNpZm5kZWYgTk9YRkVSCisgICAgfQorI2Vu ZGlmIC8qIE5PWEZFUiAqLworI2VuZGlmIC8qIFZNUyAqLworI2lmZGVmIGRhdGFnZW5lcmFsCisg ICAgY29ubm9pX210KCk7ICAgICAgICAgICAgICAgICAgICAgICAgLyogS2lsbCBhc3luY2ggdGFz ayB0aGF0IGxpc3RlbnMgdG8gKi8KKyAgICB0dGltb2ZmKCk7CisgICAgY29ucmVzKCk7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogdGhlIGtleWJvYXJkICovCisjZW5kaWYgLyogZGF0YWdl bmVyYWwgKi8KKworI2lmbmRlZiBOT0NDVFJBUAorLyogIFRoaXMgaXMgc3R1cGlkIC0tIGV2ZXJ5 IHZlcnNpb24gc2hvdWxkIGhhdmUgdHRpbW9mZigpLi4uICAqLworI2lmZGVmIFVOSVgKKyAgICB0 dGltb2ZmKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUdXJuIG9mZiBhbnkgdGltZXIg aW50ZXJydXB0cyAqLworI2Vsc2UKKyNpZmRlZiBPU0sKKyAgICB0dGltb2ZmKCk7ICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBUdXJuIG9mZiBhbnkgdGltZXIgaW50ZXJydXB0cyAqLworI2Vs c2UKKyNpZmRlZiBTVFJBVFVTCisgICAgdHRpbW9mZigpOyAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogVHVybiBvZmYgYW55IHRpbWVyIGludGVycnVwdHMgKi8KKyNlbHNlCisjaWZkZWYgT1My CisjaWZuZGVmIE5PU0VUS0VZCisgICAgb3MyZ2tzID0gMTsgICAgICAgICAgICAgICAgICAgICAg ICAgLyogVHVybiBiYWNrIG9uIGtleWNvZGUgbWFwcGluZyAgKi8KKyNlbmRpZiAvKiBOT1NFVEtF WSAqLworI2lmbmRlZiBOT0xPQ0FMCisgICAgZm9yIChpID0gMDsgaSA8IFZOVU07IGkrKykKKyAg ICAgIFZzY3JuUmVzZXRQb3B1cChpKTsKKyNlbmRpZiAvKiBOT0xPQ0FMICovCisjaWZkZWYgVENQ U09DS0VUCisjaWZkZWYgTlQKKyAgICAvKiBXU0FJc0Jsb2NraW5nKCkgcmV0dXJucyBGQUxTRSBp biBXaW45NSBkdXJpbmcgYSBibG9ja2luZyBhY2NlcHQgY2FsbCAqLworICAgIGlmICggV1NBU2Fm ZVRvQ2FuY2VsIC8qICYmIFdTQUlzQmxvY2tpbmcoKSAqLyApIHsKKyAgICAgICAgV1NBQ2FuY2Vs QmxvY2tpbmdDYWxsKCk7CisgICAgfQorI2VuZGlmIC8qIE5UICovCisjZW5kaWYgLyogVENQU09D S0VUICovCisjaWZkZWYgQ0tfTkVUQklPUworICAgIE5DQkNhbmNlbE91dHN0YW5kaW5nKCk7Cisj ZW5kaWYgLyogQ0tfTkVUQklPUyAqLworICAgIHR0aW1vZmYoKTsgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIFR1cm4gb2ZmIGFueSB0aW1lciBpbnRlcnJ1cHRzICovCisjZWxzZQorI2lmZGVm IFZNUworICAgIHR0aW1vZmYoKTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFR1cm4gb2Zm IGFueSB0aW1lciBpbnRlcnJ1cHRzICovCisjZW5kaWYgLyogVk1TICovCisjZW5kaWYgLyogT1My ICovCisjZW5kaWYgLyogU1RSQVRVUyAqLworI2VuZGlmIC8qIE9TSyAqLworI2VuZGlmIC8qIFVO SVggKi8KKworI2lmZGVmIE5FVFBUWQorICAgIC8qIENsZWFuIHVwIEN0cmwtQyBvdXQgb2YgUkVE SVJFQ1Qgb3IgZXh0ZXJuYWwgcHJvdG9jb2wgKi8KKyAgICB7CisJZXh0ZXJuIFBJRF9UIHB0eV9m b3JrX3BpZDsKKwlleHRlcm4gaW50IHB0eV9tYXN0ZXJfZmQsIHB0eV9zbGF2ZV9mZDsKKwlpbnQg eDsKKworCXNpZ25hbChTSUdDSExELFNJR19JR04pOwkvKiBXZSBkb24ndCB3YW50IHRoaXMgYW55 IG1vcmUgKi8KKworCWRlYnVnKEYxMDEsInRyYXAgcHR5X21hc3Rlcl9mZCIsIiIscHR5X21hc3Rl cl9mZCk7CisJaWYgKHB0eV9tYXN0ZXJfZmQgPiAyKSB7CisJICAgIHggPSBjbG9zZShwdHlfbWFz dGVyX2ZkKTsKKwkgICAgZGVidWcoRjEwMSwidHJhcCBwdHlfbWFzdGVyX2ZkIGNsb3NlIiwiIix4 KTsKKwl9CisJcHR5X21hc3Rlcl9mZCA9IC0xOworCWRlYnVnKEYxMDEsInRyYXAgcHR5X3NsYXZl X2ZkIiwiIixwdHlfc2xhdmVfZmQpOworCWlmIChwdHlfc2xhdmVfZmQgPiAyKSB7CisJICAgIHgg PSBjbG9zZShwdHlfc2xhdmVfZmQpOworCSAgICBkZWJ1ZyhGMTAxLCJ0cmFwIHB0eV9zbGF2ZV9m ZCBjbG9zZSIsIiIseCk7CisJfQorCXB0eV9zbGF2ZV9mZCA9IC0xOworCWRlYnVnKEYxMDEsInRy YXAgcHR5X2ZvcmtfcGlkIiwiIixwdHlfZm9ya19waWQpOworCWlmIChwdHlfZm9ya19waWQgPiAw KSB7CisJICAgIHggPSBraWxsKHB0eV9mb3JrX3BpZCwwKTsJLyogU2VlIGlmIHRoZSBmb3JrIGlz IHJlYWxseSB0aGVyZSAqLworCSAgICBkZWJ1ZyhGMTExLCJ0cmFwIHB0eV9mb3JrX3BpZCBraWxs IDAgZXJybm8iLGNraXRvYSh4KSxlcnJubyk7CisJICAgIGlmICh4ID09IDApIHsJCS8qIFNlZW1z IHRvIGJlIGFjdGl2ZSAqLworCQl4ID0ga2lsbChwdHlfZm9ya19waWQsU0lHSFVQKTsgLyogQXNr IGl0IHRvIGNsZWFuIHVwICYgZXhpdCAqLworCQlkZWJ1ZyhGMTAxLCJ0cmFwIHB0eV9mb3JrX3Bp ZCBraWxsIFNJR0hVUCIsIiIseCk7CisJCW1zbGVlcCgxMDApOworCQllcnJubyA9IDA7CisJCXgg PSBraWxsKHB0eV9mb3JrX3BpZCwwKTsgLyogSXMgaXQgc3RpbGwgdGhlcmU/ICovCisJCWlmICh4 ID09IDAKKyNpZmRlZiBFU1JDSAorCQkgICAgLyogVGhpcyBtb2R1bGUgaXMgbm90IGFsd2F5cyBl eHBvc2VkIHRvIDxlcnJuby5oPiAqLworCQkgICAgfHwgZXJybm8gIT0gRVNSQ0gKKyNlbmRpZgkv KiBFU1JDSCAqLworCQkgICAgKSB7CisJCSAgICB4ID0ga2lsbChwdHlfZm9ya19waWQsU0lHS0lM TCk7CisJCSAgICBkZWJ1ZyhGMTAxLCJ0cmFwIHB0eV9mb3JrX3BpZCBraWxsIFNJR0tJTEwiLCIi LHgpOworCQl9CisJICAgIH0KKwkgICAgcHR5X2ZvcmtfcGlkID0gLTE7CisJfQorICAgIH0KKyNl bmRpZgkvKiBORVRQVFkgKi8KKworI2lmZGVmIE9TSworICAgIHNpZ21hc2soLTEpOworLyoKKyAg V2UgYXJlIGluIGFuIGludGVyY2VwdCByb3V0aW5lIGJ1dCBkbyBub3QgcGVyZm9ybSBhIEYkUlRF IChkb25lIGltcGxpY2l0bHkKKyAgYnkgcnRzKS4gIFdlIGhhdmUgdG8gZGVjcmVtZW50IHRoZSBz aWdtYXNrIGFzIEYkUlRFIGRvZXMuICBXYXJuaW5nOiBsb25nanVtcAorICBvbmx5IHJlc3RvcmVz IHRoZSBjcHUgcmVnaXN0ZXJzLCBOT1QgdGhlIGZwdSByZWdpc3RlcnMuICBTbyBkb24ndCB1c2Ug ZnB1IGF0CisgIGFsbCBvciBhdCBsZWFzdCBkb24ndCB1c2UgY29tbW9uIGZwdSAoZG91YmxlIG9y IGZsb2F0KSByZWdpc3RlciB2YXJpYWJsZXMuCisqLworI2VuZGlmIC8qIE9TSyAqLworCisjaWZk ZWYgTlRTSUcKKyAgICBQb3N0Q3RybENTZW0oKTsKKyNlbHNlIC8qIE5UU0lHICovCisgICAgZGVi dWcoRjEwMCwidHJhcCBhYm91dCB0byBsb25nam1wIiwiIiwwKTsKKyNpZmRlZiBOVAorICAgIGNr bG9uZ2ptcChja2phZGRyKGNtamJ1ZiksMSk7CisjZWxzZSAvKiBOVCAqLworICAgIGNrbG9uZ2pt cChjbWpidWYsMSk7CisjZW5kaWYgLyogTlQgKi8KKyNlbmRpZiAvKiBOVFNJRyAqLworI2Vsc2Ug LyogTk9DQ1RSQVAgKi8KKy8qIE5vIEN0cmwtQyB0cmFwLCBqdXN0IGV4aXQuICovCisjaWZkZWYg Q0tfQ1VSU0VTICAgICAgICAgICAgICAgICAgICAgICAgLyogQ3Vyc2VzIHN1cHBvcnQ/ICovCisg ICAgeHhzY3JlZW4oU0NSX0NXLDAsMEwsIiIpOyAgICAgICAgICAgLyogQ2xvc2UgY3Vyc2VzIHdp bmRvdyAqLworI2VuZGlmIC8qIENLX0NVUlNFUyAqLworICAgIGRvZXhpdChCQURfRVhJVCx3aGF0 KTsgICAgICAgICAgICAgIC8qIEV4aXQgcG9vcmx5ICovCisjZW5kaWYgLyogTk9DQ1RSQVAgKi8K KyAgICBTSUdSRVRVUk47Cit9CisKKworLyogIEMgSyBfIFQgSSBNIEUgIC0tIFJldHVybnMgcG9p bnRlciB0byBjdXJyZW50IHRpbWUuICovCisKK2NoYXIgKgorY2tfdGltZSgpIHsKKyAgICBzdGF0 aWMgY2hhciB0YnVmWzEwXTsKKyAgICBjaGFyICpwOworICAgIGludCB4OworCisgICAgenRpbWUo JnApOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIlRodSBGZWIgIDggMTI6MDA6MDAgMTk5 MCIgKi8KKyAgICBpZiAoIXApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsaWtlIGFz Y3RpbWUoKSEgKi8KKyAgICAgIHJldHVybigiIik7CisgICAgaWYgKCpwKSB7CisgICAgICAgIGZv ciAoeCA9IDExOyB4IDwgMTk7IHgrKykgICAgICAgLyogY29weSBoaDptbTpzcyAqLworICAgICAg ICAgIHRidWZbeCAtIDExXSA9IHBbeF07ICAgICAgICAgIC8qIHRvIHRidWYgKi8KKyAgICAgICAg dGJ1Zls4XSA9IE5VTDsgICAgICAgICAgICAgICAgICAvKiB0ZXJtaW5hdGUgKi8KKyAgICB9Cisg ICAgcmV0dXJuKHRidWYpOyAgICAgICAgICAgICAgICAgICAgICAgLyogYW5kIHJldHVybiBpdCAq LworfQorCisvKiAgQyBDIF8gQyBMIEUgQSBOICAtLSAgQ2xlYW51cCBhZnRlciB0ZXJtaW5hbCBp bnRlcnJ1cHQgaGFuZGxlciAqLworCisjaWZkZWYgR0VNRE9TCitpbnQKK2NjX2NsZWFuKCkgewor ICAgIHpjbG9zZShaSUZJTEUpOyAgICAgICAgICAgICAgICAgICAgIC8qIElmIHdlIHdlcmUgdHJh bnNmZXJyaW5nIGEgZmlsZSwgKi8KKyAgICB6Y2xvc2UoWk9GSUxFKTsgICAgICAgICAgICAgICAg ICAgICAvKiBjbG9zZSBpdC4gKi8KKyAgICBwcmludGYoIl5DLi4uXG4iKTsgICAgICAgICAgICAg ICAgICAvKiBOb3QgVk1TLCBubyBwcm9ibGVtLi4uICovCit9CisjZW5kaWYgLyogR0VNRE9TICov CisKKworLyogIFMgVCBQIFQgUiBBIFAgLS0gSGFuZGxlIFNJR1RTVFAgKHN1c3BlbmQpIHNpZ25h bHMgKi8KKworU0lHVFlQCisjaWZkZWYgQ0tfQU5TSUMKK3N0cHRyYXAoaW50IHNpZykKKyNlbHNl CitzdHB0cmFwKHNpZykgaW50IHNpZzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogc3RwdHJh cCAqLyB7CisKKyNpZm5kZWYgTk9KQworICAgIGludCB4OyBleHRlcm4gaW50IGNtZmxnczsKKyAg ICBkZWJ1ZyhGMTAxLCJzdHB0cmFwKCkgY2F1Z2h0IHNpZ25hbCIsIiIsc2lnKTsKKyAgICBpZiAo IXhzdXNwZW5kKSB7CisgICAgICAgIHByaW50ZigiXHJcbnN1c3BlbmQgZGlzYWJsZWRcclxuIik7 CisjaWZuZGVmIE5PSUNQCisgICAgICAgIGlmICh3aGF0ICYgV19DT01NQU5EKSB7CQkvKiBJZiB3 ZSB3ZXJlIHBhcnNpbmcgY29tbWFuZHMgKi8KKyAgICAgICAgICAgIHByb21wdCh4eHN0cmluZyk7 ICAgICAgICAgICAvKiByZWlzc3VlIHRoZSBwcm9tcHQgYW5kIHBhcnRpYWwgKi8KKyAgICAgICAg ICAgIGlmICghY21mbGdzKSAgICAgICAgICAgICAgICAvKiBjb21tYW5kIChpZiBhbnkpICovCisg ICAgICAgICAgICAgIHByaW50ZigiJXMiLGNtZGJ1Zik7CisgICAgICAgIH0KKyNlbmRpZiAvKiBO T0lDUCAqLworICAgIH0gZWxzZSB7CisgICAgICAgIGNvbnJlcygpOyAgICAgICAgICAgICAgICAg ICAgICAgLyogUmVzZXQgdGhlIGNvbnNvbGUgKi8KKyNpZm5kZWYgT1MyCisgICAgICAgIC8qIEZs dXNoIHBlbmRpbmcgb3V0cHV0IGZpcnN0LCBpbiBjYXNlIHdlIGFyZSBjb250aW51ZWQgKi8KKyAg ICAgICAgLyogaW4gdGhlIGJhY2tncm91bmQsIHdoaWNoIGNvdWxkIG1ha2UgdXMgYmxvY2sgKi8K KyAgICAgICAgZmZsdXNoKHN0ZG91dCk7CisKKyAgICAgICAgeCA9IHBzdXNwZW5kKHhzdXNwZW5k KTsJCS8qIFRyeSB0byBzdXNwZW5kLiAqLworICAgICAgICBpZiAoeCA8IDApCisjZW5kaWYgLyog T1MyICovCisgICAgICAgICAgcHJpbnRmKCJKb2IgY29udHJvbCBub3Qgc3VwcG9ydGVkXHJcbiIp OworICAgICAgICBjb25pbnQodHJhcCxzdHB0cmFwKTsgICAgICAgICAgIC8qIFJlYXJtIHRoZSB0 cmFwLiAqLworICAgICAgICBkZWJ1ZyhGMTAwLCJzdHB0cmFwIGJhY2sgZnJvbSBzdXNwZW5kIiwi IiwwKTsKKyAgICAgICAgc3dpdGNoICh3aGF0KSB7CisgICAgICAgICAgY2FzZSBXX0NPTk5FQ1Q6 ICAgICAgICAgICAgICAgLyogSWYgc3VzcGVuZGVkIGR1cmluZyBDT05ORUNUPyAqLworICAgICAg ICAgICAgY29uYmluKChjaGFyKWVzY2FwZSk7ICAgICAgIC8qIHB1dCBjb25zb2xlIGJhY2sgaW4g YmluYXJ5IG1vZGUgKi8KKyAgICAgICAgICAgIGRlYnVnKEYxMDAsInN0cHRyYXAgV19DT05ORUNU IiwiIiwwKTsKKyAgICAgICAgICAgIGJyZWFrOworI2lmbmRlZiBOT0lDUAorICAgICAgICAgIGNh c2UgV19DT01NQU5EOiAgICAgICAgICAgICAgIC8qIFN1c3BlbmRlZCBpbiBjb21tYW5kIG1vZGUg Ki8KKyAgICAgICAgICAgIGRlYnVnKEYxMDEsInN0cHRyYXAgV19DT01NQU5EIHBmbGFnIiwiIixw ZmxhZyk7CisgICAgICAgICAgICBjb25jYigoY2hhcillc2NhcGUpOyAgICAgICAgLyogUHV0IGJh Y2sgQ0JSRUFLIHR0eSBtb2RlICovCisgICAgICAgICAgICBpZiAocGZsYWcpIHsgICAgICAgICAg ICAgICAgLyogSWYgY29tbWFuZCBwYXJzaW5nIHdhcyAqLworICAgICAgICAgICAgICAgIHByb21w dCh4eHN0cmluZyk7ICAgICAgIC8qIHJlaXNzdWUgdGhlIHByb21wdCBhbmQgcGFydGlhbCAqLwor ICAgICAgICAgICAgICAgIGlmICghY21mbGdzKSAgICAgICAgICAgIC8qIGNvbW1hbmQgKGlmIGFu eSkgKi8KKyAgICAgICAgICAgICAgICAgIHByaW50ZigiJXMiLGNtZGJ1Zik7CisgICAgICAgICAg ICB9CisgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBOT0lDUCAqLworICAgICAgICAgIGRl ZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgIC8qIEFsbCBvdGhlciBjYXNlcy4uLiAqLworICAg ICAgICAgICAgZGVidWcoRjEwMCwic3RwdHJhcCBkZWZhdWx0IiwiIiwwKTsKKyAgICAgICAgICAg IGNvbmNiKChjaGFyKWVzY2FwZSk7ICAgICAgICAvKiBQdXQgaXQgYmFjayBpbiBDQlJFQUsgbW9k ZSAqLworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgLyogTk9K QyAqLworICAgIFNJR1JFVFVSTjsKK30KKworI2lmZGVmIFRMT0cKKyNkZWZpbmUgVEJVRkwgMzAw CisKKy8qICBUIEwgTyBHICAtLSAgTG9nIGEgcmVjb3JkIGluIHRoZSB0cmFuc2FjdGlvbiBmaWxl ICAqLworLyoKKyBDYWxsIHdpdGggYSBmb3JtYXQgYW5kIDMgYXJndW1lbnRzOiB0d28gc3RyaW5n cyBhbmQgYSBudW1iZXI6CisgICBmICAgICAtIEZvcm1hdCwgYSBiaXQgc3RyaW5nIGluIHJhbmdl IDAtNywgYml0IHggaXMgb24sIGFyZyAjeCBpcyBwcmludGVkLgorICAgczEsczIgLSBTdHJpbmcg YXJndW1lbnRzIDAgYW5kIDEuCisgICBuICAgICAtIExvbmcsIGFyZ3VtZW50IDIuCisqLworVk9J RAorI2lmZGVmIENLX0FOU0lDCitkb3Rsb2coaW50IGYsIGNoYXIgKnMxLCBjaGFyICpzMiwgQ0tf T0ZGX1QgbikKKyNlbHNlCitkb3Rsb2coZixzMSxzMixuKSBpbnQgZjsgQ0tfT0ZGX1QgbjsgY2hh ciAqczEsICpzMjsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogZG90bG9nICovIHsKKyAgICBz dGF0aWMgY2hhciBzW1RCVUZMXTsKKyAgICBleHRlcm4gaW50IHRsb2dmbXQ7CisgICAgY2hhciAq c3AgPSBzOyBpbnQgeDsKKyAgICBpZiAoIXMxKSBzMSA9ICIiOworICAgIGlmICghczIpIHMyID0g IiI7CisKKyAgICBpZiAoIXRyYWxvZykgcmV0dXJuOyAgICAgICAgICAgICAgICAvKiBJZiBubyB0 cmFuc2FjdGlvbiBsb2csIGRvbid0ICovCisgICAgaWYgKHRsb2dmbXQgIT0gMSkgcmV0dXJuOwor ICAgIHN3aXRjaCAoZikgeworICAgICAgY2FzZSBGMDAwOiAgICAgICAgICAgICAgICAgICAgICAg IC8qIDAgKHNwZWNpYWwpICJzMSBuIHMyIiAgKi8KKyAgICAgICAgaWYgKChpbnQpc3RybGVuKHMx KSArIChpbnQpc3RybGVuKHMyKSArIDE1ID4gVEJVRkwpCisgICAgICAgICAgc3ByaW50ZihzcCwi P1QtTG9nIHN0cmluZyB0b28gbG9uZyIpOworICAgICAgICBlbHNlCisJICBzcHJpbnRmKHNwLCIl cyAlcyAlcyIsczEsY2tmc3RvYShuKSxzMik7CisgICAgICAgIGlmICh6c291dGwoWlRGSUxFLHMp IDwgMCkgdHJhbG9nID0gMDsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEYwMDE6ICAgICAg ICAgICAgICAgICAgICAgICAgLyogMSwgIiBuIiAqLworICAgICAgICBzcHJpbnRmKHNwLCIgJXMi LGNrZnN0b2EobikpOworICAgICAgICBpZiAoenNvdXRsKFpURklMRSxzKSA8IDApIHRyYWxvZyA9 IDA7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBGMDEwOiAgICAgICAgICAgICAgICAgICAg ICAgIC8qIDIsICJbczJdIiAqLworICAgICAgICB4ID0gKGludClzdHJsZW4oczIpOworICAgICAg ICBpZiAoczJbeF0gPT0gJ1xuJykgczJbeF0gPSAnXDAnOworICAgICAgICBpZiAoeCArIDYgPiBU QlVGTCkKKyAgICAgICAgICBzcHJpbnRmKHNwLCI/U3RyaW5nIHRvbyBsb25nIik7CisgICAgICAg IGVsc2Ugc3ByaW50ZihzcCwiWyVzXSIsczIpOworICAgICAgICBpZiAoenNvdXRsKFpURklMRSwi IikgPCAwKSB0cmFsb2cgPSAwOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRjAxMTogICAg ICAgICAgICAgICAgICAgICAgICAvKiAzLCAiW3MyXSBuIiAqLworICAgICAgICB4ID0gKGludClz dHJsZW4oczIpOworICAgICAgICBpZiAoczJbeF0gPT0gJ1xuJykgczJbeF0gPSAnXDAnOworICAg ICAgICBpZiAoeCArIDYgPiBUQlVGTCkKKyAgICAgICAgICBzcHJpbnRmKHNwLCI/U3RyaW5nIHRv byBsb25nIik7CisgICAgICAgIGVsc2Ugc3ByaW50ZihzcCwiWyVzXSAlcyIsczIsY2tmc3RvYShu KSk7CisgICAgICAgIGlmICh6c291dGwoWlRGSUxFLHMpIDwgMCkgdHJhbG9nID0gMDsKKyAgICAg ICAgYnJlYWs7CisgICAgICBjYXNlIEYxMDA6ICAgICAgICAgICAgICAgICAgICAgICAgLyogNCwg InMxIiAqLworICAgICAgICBpZiAoenNvdXRsKFpURklMRSxzMSkgPCAwKSB0cmFsb2cgPSAwOwor ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRjEwMTogICAgICAgICAgICAgICAgICAgICAgICAv KiA1LCAiczE6IG4iICovCisgICAgICAgIGlmICgoaW50KXN0cmxlbihzMSkgKyAxNSA+IFRCVUZM KQorICAgICAgICAgIHNwcmludGYoc3AsIj9TdHJpbmcgdG9vIGxvbmciKTsKKyAgICAgICAgZWxz ZSBzcHJpbnRmKHNwLCIlczogJXMiLHMxLGNrZnN0b2EobikpOworICAgICAgICBpZiAoenNvdXRs KFpURklMRSxzKSA8IDApIHRyYWxvZyA9IDA7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBG MTEwOiAgICAgICAgICAgICAgICAgICAgICAgIC8qIDYsICJzMSBzMiIgKi8KKyAgICAgICAgeCA9 IChpbnQpc3RybGVuKHMyKTsKKyAgICAgICAgaWYgKHMyW3hdID09ICdcbicpIHMyW3hdID0gJ1ww JzsKKyAgICAgICAgaWYgKChpbnQpc3RybGVuKHMxKSArIHggKyA0ID4gVEJVRkwpCisgICAgICAg ICAgc3ByaW50ZihzcCwiP1N0cmluZyB0b28gbG9uZyIpOworICAgICAgICBlbHNlCisJICBzcHJp bnRmKHNwLCIlcyVzJXMiLHMxLCgoKnMyID09ICc6JykgPyAiIiA6ICIgIiksczIpOworICAgICAg ICBpZiAoenNvdXRsKFpURklMRSxzKSA8IDApIHRyYWxvZyA9IDA7CisgICAgICAgIGJyZWFrOwor ICAgICAgY2FzZSBGMTExOiAgICAgICAgICAgICAgICAgICAgICAgIC8qIDcsICJzMSBzMjogbiIg Ki8KKyAgICAgICAgeCA9IChpbnQpc3RybGVuKHMyKTsKKyAgICAgICAgaWYgKHMyW3hdID09ICdc bicpIHMyW3hdID0gJ1wwJzsKKyAgICAgICAgaWYgKChpbnQpc3RybGVuKHMxKSArIHggKyAxNSA+ IFRCVUZMKQorICAgICAgICAgIHNwcmludGYoc3AsIj9TdHJpbmcgdG9vIGxvbmciKTsKKyAgICAg ICAgZWxzZQorCSAgc3ByaW50ZihzcCwiJXMlcyVzOiAlcyIsczEsKCgqczIgPT0gJzonKSA/ICIi IDogIiAiKSxzMixja2ZzdG9hKG4pKTsKKyAgICAgICAgaWYgKHpzb3V0bChaVEZJTEUscykgPCAw KSB0cmFsb2cgPSAwOworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHNw cmludGYoc3AsIj9JbnZhbGlkIGZvcm1hdCBmb3IgdGxvZygpIC0gJWQiLGYpOworICAgICAgICBp ZiAoenNvdXRsKFpURklMRSxzKSA8IDApIHRyYWxvZyA9IDA7CisgICAgfQorfQorCisvKgorICBE IE8gWCBMIE8gRworCisgIFRoaXMgaXMgdGhlIHRyYW5zYWN0aW9uLWxvZyB3cml0ZXIgZm9yIEJS SUVGIGZvcm1hdC4KKyAgVGhlIGlkZWEgaXMgcHJvZHVjZSBvbmUgcmVjb3JkIChsaW5lKSBwZXIg ZmlsZS4gIEVhY2ggcmVjb3JkCisgIGhhcyB0aGUgZm9sbG93aW5nIGRlbGltaXRlZCBmaWVsZHM6 CisgICAgRGF0ZSAoeXl5eW1tZGQpCisgICAgVGltZSAoaGg6bW06c3MpCisgICAgQWN0aW9uOiBT RU5EIG9yIFJFQ1YKKyAgICBGaWxlIG5hbWUKKyAgICBGaWxlIHNpemUKKyAgICBUcmFuc2ZlciBt b2RlICh0ZXh0LCBiaW5hcnksIGltYWdlLCBsYWJlbGVkLCBldGMpLgorICAgIFN0YXR1czogT0sg b3IgRkFJTEVECisgICAgRnJlZS1mb3JtIGNvbW1lbnRzIGluIGRvdWJsZXF1b3RlcworICBUaGUg ZGVmYXVsdCBzZXBhcmF0b3IgaXMgY29tbWEuCisgIElmIGEgZmllbGQgY29udGFpbnMgdGhlIHNl cGFyYXRvciwgaXQgaXMgZW5jbG9zZWQgaW4gZG91YmxlcXVvdGVzLgorKi8KK1ZPSUQKKyNpZmRl ZiBDS19BTlNJQworZG94bG9nKGludCB4LCBjaGFyICogZm4sIENLX09GRl9UIGZzLCBpbnQgZm0s IGludCBzdGF0dXMsIGNoYXIgKiBtc2cpCisjZWxzZQorZG94bG9nKHgsIGZuLCBmcywgZm0sIHN0 YXR1cywgbXNnKQorICAgIGludCB4OyBjaGFyICogZm47IENLX09GRl9UIGZzOyBpbnQgZm07IGlu dCBzdGF0dXM7IGNoYXIgKiBtc2c7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIGRveGxvZyAq LyB7CisgICAgZXh0ZXJuIGludCB0bG9nc2VwOworICAgIGNoYXIgc2VwWzJdOworICAgIGNoYXIg YnVmW0NLTUFYUEFUSCsyNTZdLCAqIGJ1ZnA7CisgICAgY2hhciB0bXBidWZbMzJdOworICAgIGNo YXIgKiBzLCAqIHA7CisgICAgaW50IGxlbiwgbGVmdCwgZnRwID0gMCwgazsKKworICAgIGlmICgh dHJhbG9nKSByZXR1cm47ICAgICAgICAgICAgICAgIC8qIElmIG5vIHRyYW5zYWN0aW9uIGxvZywg ZG9uJ3QgKi8KKworICAgIGlmICghZm4pIGZuID0gIiI7ICAgICAgICAgICAgICAgICAgIC8qIFBy b3RlY3QgYWdhaW5zdCBudWxsIHBvaW50ZXJzICovCisgICAgaWYgKCFtc2cpIG1zZyA9ICIiOwor ICAgIGlmICh4ICYgV19GVFApCisgICAgICBmdHArKzsKKworICAgIHNlcFswXSA9IChjaGFyKSB0 bG9nc2VwOworICAgIHNlcFsxXSA9IE5VTDsKKyAgICBpZiAoIXNlcFswXSkgc2VwWzBdID0gJywn OworCisgICAgYnVmcCA9IGJ1ZjsKKyAgICBsZWZ0ID0gc2l6ZW9mKGJ1Zik7CisgICAgZGVidWco RjEwMSwiWFhYIGRveGxvZyBsZWZ0IDEiLCIiLGxlZnQpOworCisgICAgcCA9IHp6bmRhdGUoKTsg ICAgICAgICAgICAgICAgICAgICAgLyogRGF0ZSAqLworICAgIGNrbWFrbXNnKGJ1ZiwgbGVmdCwg cCA/IHAgOiAiMDAwMDAwMDAiLCBzZXAsIE5VTEwsIE5VTEwpOworICAgIGJ1ZnAgKz0gOTsKKyAg ICBsZWZ0IC09IDk7CisgICAgZGVidWcoRjExMSwiWFhYIGRveGxvZyBsZWZ0IDIiLGJ1ZixsZWZ0 KTsKKworICAgIHp0aW1lKCZwKTsKKyAgICBja3N0cm5jcHkoYnVmcCxwKzExLGxlZnQpOworICAg IGJ1ZnAgKz0gODsKKyAgICBsZWZ0IC09IDg7CisgICAgZGVidWcoRjExMSwiWFhYIGRveGxvZyBs ZWZ0IDMiLGJ1ZixsZWZ0KTsKKworICAgIGlmIChmdHApIHsKKwlpZiAoISh4ICYgKFdfU0VORHxX X1JFQ1YpKSkKKwkgIHJldHVybjsKKwlzID0gICh4ICYgV19TRU5EKSA/ICJQVVQiIDogIkdFVCI7 CisJayA9IDM7CisgICAgfSBlbHNlIHsKKwlzID0gICh4ICYgV19TRU5EKSA/ICJTRU5EIiA6ICJS RUNWIjsKKwlrID0gNDsKKyAgICB9CisgICAgY2ttYWttc2coYnVmcCxsZWZ0LHNlcCxzLHNlcCxO VUxMKTsKKyAgICBidWZwICs9IGsgKyAyOworICAgIGxlZnQgLT0gKGsgKyAyKTsKKyAgICBkZWJ1 ZyhGMTExLCJYWFggZG94bG9nIGxlZnQgNCIsYnVmLGxlZnQpOworCisgICAgcyA9ICIiOworICAg IGlmIChja3N0cmNocihmbixzZXBbMF0pKQkJLyogRmlsZW5hbWUgKi8KKyAgICAgIHMgPSAiXCIi OworICAgIGNrbWFrbXNnKGJ1ZnAsbGVmdCxzLGZuLHMsc2VwKTsKKyAgICBzcHJpbnRmKHRtcGJ1 ZiwiJXMiLGNrZnN0b2EoZnMpKTsJLyogU2l6ZSAqLworICAgIGNrc3RybmNhdChidWYsdG1wYnVm LENLTUFYUEFUSCk7CisgICAgY2tzdHJuY2F0KGJ1ZixzZXAsQ0tNQVhQQVRIKTsKKyAgICBkZWJ1 ZyhGMTEwLCJkb3hsb2cgNCIsYnVmLDApOworCisjaWZkZWYgTk9JQ1AKKyAgICAvKiBUcmFuc2Zl ciBtb2RlICovCisgICAgY2tzdHJuY3B5KHRtcGJ1ZiwgKGJpbmFyeSA/ICJiaW5hcnkiIDogInRl eHQiKSwgVE1QQlVGU0laKTsKKyNlbHNlCisgICAgY2tzdHJuY3B5KHRtcGJ1ZixnZm1vZGUoZm0s MCksVE1QQlVGU0laKTsKKyNlbmRpZiAvKiBOT0lDUCAqLworICAgIGlmIChja3N0cmNocih0bXBi dWYsc2VwWzBdKSkgeyAgICAgIC8qIE1pZ2h0IGNvbnRhaW4gc3BhY2VzICovCisgICAgICAgIGNr c3RybmNhdChidWYsIlwiIixDS01BWFBBVEgpOworICAgICAgICBja3N0cm5jYXQoYnVmLHRtcGJ1 ZixDS01BWFBBVEgpOworICAgICAgICBja3N0cm5jYXQoYnVmLCJcIiIsQ0tNQVhQQVRIKTsKKyAg ICB9IGVsc2UKKyAgICAgIGNrc3RybmNhdChidWYsdG1wYnVmLENLTUFYUEFUSCk7CisgICAgY2tz dHJuY2F0KGJ1ZixzZXAsQ0tNQVhQQVRIKTsKKyAgICBkZWJ1ZyhGMTEwLCJkb3hsb2cgNSIsYnVm LDApOworCisgICAgY2tzdHJuY2F0KGJ1Ziwgc3RhdHVzID8gIkZBSUxFRCIgOiAiT0siLENLTUFY UEFUSCk7CisgICAgbGVuID0gc3RybGVuKGJ1Zik7CisgICAgbGVmdCA9IENLTUFYUEFUSCsyNTYg LSBsZW47CisgICAgaWYgKGxlZnQgPCAyKSBmYXRhbCgiZG94bG9nIGJ1ZmZlciBvdmVybG93Iik7 CisKKyAgICBkZWJ1ZyhGMTExLCJYWFggZG94bG9nIGxlZnQgNSIsYnVmLGxlZnQpOworCisgICAg ZGVidWcoRjExMCwiZG94bG9nIGJ1ZiAxIiwgYnVmLCBsZW4pOworICAgIHMgPSBidWYgKyBsZW47 CisgICAgaWYgKHN0YXR1cyA9PSAwICYmIGxlZnQgPiAzMikgeworICAgICAgICBsb25nIGNwcyA9 IDBMOworI2lmZGVmIEdGVElNRVIKKwlkZWJ1ZyhGMTAxLCJET1hMT0cgZnB4ZnNlY3MiLCIiLChs b25nKShmcHhmc2VjcyAqIDEwMDApKTsKKyAgICAgICAgaWYgKGZweGZzZWNzKSBjcHMgPSAobG9u ZykoKENLRkxPQVQpIGZzIC8gZnB4ZnNlY3MpOworICAgICAgICBzcHJpbnRmKHMsIiVzXCIlMC4z ZnNlYyAlbGRjcHNcIiIsc2VwLGZweGZzZWNzLGNwcyk7CisjZWxzZQorICAgICAgICBpZiAoeGZz ZWNzKSBjcHMgPSBmcyAvIHhmc2VjczsKKyAgICAgICAgc3ByaW50ZihzLCIlc1wiJWxkc2VjICVs ZGNwc1wiIixzZXAseGZzZWNzLGNwcyk7CisjZW5kaWYgLyogR0ZUSU1FUiAqLworICAgIH0gZWxz ZSBpZiAoKGludClzdHJsZW4obXNnKSArIDQgPCBsZWZ0KSB7CisgICAgICAgIHNwcmludGYocywi JXNcIiVzXCIiLHNlcCxtc2cpOworICAgIH0KKyAgICBkZWJ1ZyhGMTExLCJYWFggZG94bG9nIGxl ZnQgNSIsYnVmLGxlZnQpOworCisgICAgZGVidWcoRjExMCwiZG94bG9nIDUiLGJ1ZiwwKTsKKyAg ICB4ID0genNvdXRsKFpURklMRSxidWYpOworICAgIGRlYnVnKEYxMDEsImRveGxvZyB6c291dGwi LCIiLHgpOworICAgIGlmICh4IDwgMCkgdHJhbG9nID0gMDsKK30KKyNlbmRpZiAvKiBUTE9HICov CisKKyNpZm5kZWYgTUFDCisvKgorICBUaGUgcmVzdCBvZiB0aGlzIGZpbGUgaXMgZm9yIGFsbCBp bXBsZW1lbnRhdGlvbnMgYnV0IHRoZSBNYWNpbnRvc2guCisqLworCisjaWZkZWYgQ0tfQ1VSU0VT CitzdGF0aWMgaW50IHJlcGFpbnQgPSAwOyAgICAgICAgICAgICAgICAgLyogVHJhbnNmZXIgZGlz cGxheSBuZWVkcyByZXBhaW50aW5nICovCisjZW5kaWYgLyogQ0tfQ1VSU0VTICovCisKKyNpZm5k ZWYgTk9YRkVSCisvKiAgQyBIIEsgSSBOIFQgIC0tICBDaGVjayBmb3IgY29uc29sZSBpbnRlcnJ1 cHRzICAqLworCisvKgorICBVc2VkIGR1cmluZyBmaWxlIHRyYW5zZmVyIGluIGxvY2FsIG1vZGUg b25seToKKyAgLiBJZiB1c2VyIGhhcyBub3QgdG91Y2hlZCB0aGUga2V5Ym9hcmQsIHJldHVybnMg MCB3aXRoIG5vIHNpZGUgZWZmZWN0cy4KKyAgLiBJZiB1c2VyIHR5cGVkIFMgb3IgQSAoZXRjLCBz ZWUgYmVsb3cpIHByaW50cyBzdGF0dXMgbWVzc2FnZSBhbmQgcmV0dXJucyAwLgorICAuIElmIHVz ZXIgdHlwZWQgWCBvciBGIChldGMsIHNlZSBiZWxvdykgcmV0dXJucyAwIHdpdGggY3hzZWVuIHNl dCB0byAxLgorICAuIElmIHVzZXIgdHlwZWQgWiBvciBCIChldGMsIHNlZSBiZWxvdykgcmV0dXJu cyAwIHdpdGggY3pzZWVuIHNldCB0byAxLgorICAuIElmIHVzZXIgdHlwZWQgRSBvciBDIChldGMs IHNlZSBiZWxvdykgcmV0dXJucyAtMS4KKyovCitpbnQKK2Noa2ludCgpIHsKKyAgICBpbnQgY2gs IGNuLCBvZmQ7IGxvbmcgeno7CisgICAgaWYgKCF4ZnJpbnQpCisgICAgICByZXR1cm4oMCk7Cisg ICAgaWYgKCghbG9jYWwpIHx8IChxdWlldCkpIHJldHVybigwKTsgLyogT25seSBkbyB0aGlzIGlm IGxvY2FsICYgbm90IHF1aWV0ICovCisjaWZkZWYgZGF0YWdlbmVyYWwKKyAgICBpZiAoY29uX3Jl YWRzX210KSAgICAgICAgICAgICAgICAgICAvKiBpZiBjb25pbnRfbXQgdGFzayBpcyBhY3RpdmUg Ki8KKyAgICAgIGlmIChjb25pbnRfYXZsKSB7ICAgICAgICAgICAgICAgICAvKiBhbmQgdGhlcmUn cyBhbiBpbnRlcnJ1cHQgcGVuZGluZyAqLworICAgICAgICAgIGNuID0gMTsgICAgICAgICAgICAg ICAgICAgICAgIC8qIHByb2Nlc3MgaXQgKi8KKyAgICAgICAgICBjaCA9IGNvbmludF9jaDsKKyAg ICAgICAgICBjb25pbnRfYXZsID0gMDsgICAgICAgICAgICAgICAvKiB0dXJuIG9mZiBmbGFnIHNv IGNvbmludF9tdCBjYW4gKi8KKyAgICAgIH0gZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBwcm9jZWVkICovCisgICAgICAgIHJldHVybigwKTsKKyAgICBlbHNlICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBpZiBjb25pbnRfbXQgbm90IGFjdGl2ZSAqLworICAgICAg aWYgKChjaCA9IGNvbmluYygyKSkgPCAwKSAgICAgICAgIC8qIHRyeSB0byBnZXQgY2hhciBtYW51 YWxseSAqLworICAgICAgICByZXR1cm4oMCk7ICAgICAgICAgICAgICAgICAgICAgIC8qIEkvTyBl cnJvciwgb3Igbm8gZGF0YSAqLworICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIGlmIHN1Y2Nlc3NmdWwsIHNldCBjbiBzbyB3ZSAqLworICAgICAgICBjbiA9IDE7ICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIGtub3cgd2UgZ290IG9uZSAqLworICAgIGRlYnVnKEYx MDEsImNoa2ludCBnb3Qga2V5Ym9hcmQgY2hhcmFjdGVyIixjaCxjbik7CisjZWxzZSAvKiAhZGF0 YWdlbmVyYWwgKi8KKyNpZmRlZiBOVFNJRworICAgIHsKKyAgICAgICAgZXh0ZXJuIGludCBUbHNJ bmRleDsKKyAgICAgICAgc3RydWN0IF90aHJlYWRpbmZvICogdGhyZWFkaW5mbzsKKyAgICAgICAg dGhyZWFkaW5mbyA9IChzdHJ1Y3QgX3RocmVhZGluZm8gKikgVGxzR2V0VmFsdWUoVGxzSW5kZXgp OworICAgICAgICBpZiAodGhyZWFkaW5mbykgeworICAgICAgICAgICAgaWYgKCFXYWl0U2VtKHRo cmVhZGluZm8tPkRpZVNlbSwwKSkKKyAgICAgICAgICAgICAgcmV0dXJuIC0xOyAgICAgICAgICAg ICAgICAvKiBDYW5jZWwgSW1tZWRpYXRlbHkgKi8KKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAv KiBOVFNJRyAqLworICAgIGNuID0gY29uY2hrKCk7ICAgICAgICAgICAgICAgICAgICAgIC8qIEFu eSBpbnB1dCB3YWl0aW5nPyAqLworICAgIGRlYnVnKEYxMDEsImNvbmNoayIsIiIsY24pOworICAg IGlmIChjbiA8IDEpIHJldHVybigwKTsKKyAgICBjaCA9IGNvbmluYyg1KSA7CisgICAgZGVidWco RjEwMSwiY29uaW5jIiwiIixjaCk7CisgICAgaWYgKGNoIDwgMCkgcmV0dXJuKDApOworI2VuZGlm IC8qIGRhdGFnZW5lcmFsICovCisKKyAgICBjaCAmPSAwMTc3OworICAgIHN3aXRjaCAoY2gpIHsK KyAgICAgIGNhc2UgJ0EnOiBjYXNlICdhJzogY2FzZSAwMDAxOiAgICAvKiBTdGF0dXMgcmVwb3J0 ICovCisgICAgICBjYXNlICdTJzogY2FzZSAncyc6CisgICAgICAgIGlmIChmZGlzcGxhICE9IFhZ RkRfUiAmJiBmZGlzcGxhICE9IFhZRkRfUyAmJiBmZGlzcGxhICE9IFhZRkRfTikKKyAgICAgICAg ICByZXR1cm4oMCk7ICAgICAgICAgICAgICAgICAgICAvKiBPbmx5IGZvciBzZXJpYWwsIHNpbXBs ZSBvciBub25lICovCisgICAgICAgIG9mZCA9IGZkaXNwbGE7ICAgICAgICAgICAgICAgICAgLyog W01GXSBTYXZlIGZpbGUgZGlzcGxheSB0eXBlICovCisgICAgICAgIGlmIChmZGlzcGxhID09IFhZ RkRfTikKKyAgICAgICAgICBmZGlzcGxhID0gWFlGRF9SOyAgICAgICAgICAgICAvKiBbTUZdIFBy ZXRlbmQgc2VyaWFsIGlmIG5vIGRpc3BsYXkgKi8KKyAgICAgICAgeHhzY3JlZW4oU0NSX1ROLDAs MGwsIlN0YXR1cyByZXBvcnQ6Iik7CisgICAgICAgIHh4c2NyZWVuKFNDUl9UTiwwLDBsLCIgZmls ZSB0eXBlOiAiKTsKKyAgICAgICAgaWYgKGJpbmFyeSkgeworICAgICAgICAgICAgc3dpdGNoKGJp bmFyeSkgeworICAgICAgICAgICAgICBjYXNlIFhZRlRfTDogeHhzY3JlZW4oU0NSX1RaLDAsMGws ImxhYmVsZWQiKTsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgWFlGVF9JOiB4eHNjcmVlbihT Q1JfVFosMCwwbCwiaW1hZ2UiKTsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgWFlGVF9VOiB4 eHNjcmVlbihTQ1JfVFosMCwwbCwiYmluYXJ5IHVuZGVmaW5lZCIpOyBicmVhazsKKyAgICAgICAg ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgY2FzZSBYWUZUX0I6IHh4c2NyZWVuKFNDUl9U WiwwLDBsLCJiaW5hcnkiKTsgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7 CisjaWZkZWYgTk9DU0VUUworICAgICAgICAgICAgeHhzY3JlZW4oU0NSX1RaLDAsMGwsInRleHQi KTsKKyNlbHNlCisgICAgICAgICAgICB4eHNjcmVlbihTQ1JfVFUsMCwwbCwidGV4dCwgIik7Cisg ICAgICAgICAgICBpZiAodGNoYXJzZXQgPT0gVENfVFJBTlNQIHx8IHhmcnhsYSA9PSAwKSB7Cisg ICAgICAgICAgICAgICAgeHhzY3JlZW4oU0NSX1RaLDAsMGwsInRyYW5zcGFyZW50Iik7CisgICAg ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmICh3aGF0ICYgV19TRU5EKSB7Cisg ICAgICAgICAgICAgICAgICAgIHh4c2NyZWVuKFNDUl9UWiwwLDBsLHRjc2luZm9bdGNoYXJzZXRd LmtleXdvcmQpOworICAgICAgICAgICAgICAgICAgICB4eHNjcmVlbihTQ1JfVFUsMCwwbCwiID0+ ICIpOworICAgICAgICAgICAgICAgICAgICB4eHNjcmVlbihTQ1JfVFosMCwwbCxmY3NpbmZvW2Zj aGFyc2V0XS5rZXl3b3JkKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg ICAgICAgICB4eHNjcmVlbihTQ1JfVFosMCwwbCxmY3NpbmZvW2ZjaGFyc2V0XS5rZXl3b3JkKTsK KyAgICAgICAgICAgICAgICAgICAgeHhzY3JlZW4oU0NSX1RVLDAsMGwsIiA9PiAiKTsKKyAgICAg ICAgICAgICAgICAgICAgeHhzY3JlZW4oU0NSX1RaLDAsMGwsdGNzaW5mb1t0Y2hhcnNldF0ua2V5 d29yZCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorI2VuZGlmIC8qIE5PQ1NF VFMgKi8KKyAgICAgICAgfQorICAgICAgICB4eHNjcmVlbihTQ1JfUUUsMCxmaWxjbnQsIiBmaWxl IG51bWJlciIpOworICAgICAgICBpZiAoZnNpemUpIHh4c2NyZWVuKFNDUl9RRSwwLGZzaXplLCIg c2l6ZSIpOworICAgICAgICB4eHNjcmVlbihTQ1JfUUUsMCxmZmMsIiBjaGFyYWN0ZXJzIHNvIGZh ciIpOworICAgICAgICBpZiAoZnNpemUgPiAwTCkgeworI2lmZGVmIENLX1JFU0VORAorICAgICAg ICAgICAgenogPSB3aGF0ICYgV19TRU5EID8gc2VuZHN0YXJ0IDogd2hhdCAmIFdfUkVDViA/IHJz X2xlbiA6IDA7CisgICAgICAgICAgICB6eiA9ICggKGZmYyArIHp6KSAqIDEwMEwgKSAvIGZzaXpl OworI2Vsc2UKKyAgICAgICAgICAgIHp6ID0gKCBmZmMgKiAxMDBMICkgLyBmc2l6ZTsKKyNlbmRp ZiAvKiBDS19SRVNFTkQgKi8KKyAgICAgICAgICAgIHh4c2NyZWVuKFNDUl9RRSwwLHp6LCAgICAg ICIgcGVyY2VudCBkb25lIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGJjdHUgPT0gNCkgeyAg ICAgICAgICAgICAgICAvKiBCbG9jayBjaGVjayAqLworICAgICAgICAgICAgeHhzY3JlZW4oU0NS X1RVLDAsMEwsIiBibG9jayBjaGVjazogIik7CisgICAgICAgICAgICB4eHNjcmVlbihTQ1JfVFos MCwwTCwiYmxhbmstZnJlZS0yIik7CisgICAgICAgIH0gZWxzZSB4eHNjcmVlbihTQ1JfUUUsMCwo bG9uZyliY3R1LCAgIiBibG9jayBjaGVjayIpOworICAgICAgICB4eHNjcmVlbihTQ1JfUUUsMCwo bG9uZylycHRmbGcsIiBjb21wcmVzc2lvbiIpOworICAgICAgICB4eHNjcmVlbihTQ1JfUUUsMCwo bG9uZyllYnFmbGcsIiA4dGgtYml0IHByZWZpeGluZyIpOworICAgICAgICB4eHNjcmVlbihTQ1Jf UUUsMCwobG9uZylsc2NhcHUsIiBsb2NraW5nIHNoaWZ0cyIpOworICAgICAgICBpZiAoIW5ldHdv cmspCisgICAgICAgICAgeHhzY3JlZW4oU0NSX1FFLDAsIHNwZWVkLCAiIHNwZWVkIik7CisgICAg ICAgIGlmICh3aGF0ICYgV19TRU5EKQorCisgICAgICAgICAgeHhzY3JlZW4oU0NSX1FFLDAsc3Bz aXosICIgcGFja2V0IGxlbmd0aCIpOworICAgICAgICBlbHNlIGlmICh3aGF0ICYgV19SRUNWIHx8 IHdoYXQgJiBXX1JFTU8pCisgICAgICAgICAgeHhzY3JlZW4oU0NSX1FFLDAsdXJwc2l6LCIgcGFj a2V0IGxlbmd0aCIpOworICAgICAgICB4eHNjcmVlbihTQ1JfUUUsMCx3c2xvdHMsICAiIHdpbmRv dyBzbG90cyIpOworICAgICAgICBmZGlzcGxhID0gb2ZkOyAvKiBbTUZdIFJlc3RvcmUgZmlsZSBk aXNwbGF5IHR5cGUgKi8KKyAgICAgICAgcmV0dXJuKDApOworCisgICAgICBjYXNlICdCJzogY2Fz ZSAnYic6IGNhc2UgMDAwMjogICAgLyogQ2FuY2VsIGJhdGNoICovCisgICAgICBjYXNlICdaJzog Y2FzZSAneic6IGNhc2UgMDAzMjoKKyAgICAgICAgY3pzZWVuID0gMTsKKyAgICAgICAgaW50ZXJy dXB0ZWQgPSAxOworICAgICAgICB4eHNjcmVlbihTQ1JfU1QsU1RfTVNHLDBsLAorICAgICAgICAg ICAgICAgICAoKCh3aGF0ICYgV19SRUNWKSAmJiAod3Nsb3RzID4gMSkpID8KKyAgICAgICAgICAg ICAgICAgICJDYW5jZWxpbmcgYmF0Y2gsIHdhaXQuLi4gIiA6CisgICAgICAgICAgICAgICAgICAi Q2FuY2VsaW5nIGJhdGNoLi4uICIpCisgICAgICAgICAgICAgICAgICk7CisgICAgICAgIHJldHVy bigwKTsKKworICAgICAgY2FzZSAnRic6IGNhc2UgJ2YnOiBjYXNlIDAwMDY6ICAgIC8qIENhbmNl bCBmaWxlICovCisgICAgICBjYXNlICdYJzogY2FzZSAneCc6IGNhc2UgMDAzMDoKKyAgICAgICAg Y3hzZWVuID0gMTsKKyAgICAgICAgaW50ZXJydXB0ZWQgPSAxOworICAgICAgICB4eHNjcmVlbihT Q1JfU1QsU1RfTVNHLDBsLAorICAgICAgICAgICAgICAgICAoKCh3aGF0ICYgV19SRUNWKSAmJiAo d3Nsb3RzID4gMSkpID8KKyAgICAgICAgICAgICAgICAgICJDYW5jZWxpbmcgZmlsZSwgd2FpdC4u LiAiIDoKKyAgICAgICAgICAgICAgICAgICJDYW5jZWxpbmcgZmlsZS4uLiAiKQorICAgICAgICAg ICAgICAgICApOworICAgICAgICByZXR1cm4oMCk7CisKKyAgICAgIGNhc2UgJ1InOiBjYXNlICdy JzogY2FzZSAwMDIyOiAgICAvKiBSZXNlbmQgcGFja2V0ICovCisgICAgICBjYXNlIDAwMTU6IGNh c2UgMDAxMjoKKyNpZmRlZiBTVFJFQU1JTkcKKyAgICAgICAgaWYgKHN0cmVhbWluZykKKyAgICAg ICAgICByZXR1cm4oMCk7CisjZW5kaWYgLyogU1RSRUFNSU5HICovCisgICAgICAgIHh4c2NyZWVu KFNDUl9TVCxTVF9NU0csMGwsIlJlc2VuZGluZyBwYWNrZXQuLi4gIik7CisgICAgICAgIG51bWVy cnMrKzsKKyAgICAgICAgcmVzZW5kKHdpbmxvKTsKKyAgICAgICAgcmV0dXJuKDApOworCisjaWZk ZWYgZGF0YWdlbmVyYWwKKyAgICAgIGNhc2UgJ1wwMyc6ICAgICAgICAgICAgICAgICAgICAgICAv KiBXZSdyZSBub3QgdHJhcHBpbmcgXkMncyB3aXRoICovCisgICAgICAgIHRyYXAoMCk7ICAgICAg ICAgICAgICAgICAgICAgICAgLyogc2lnbmFscywgc28gd2UgY2hlY2sgaGVyZSAgICAqLworI2Vu ZGlmIC8qIGRhdGFnZW5lcmFsICovCisKKyAgICAgIGNhc2UgJ0MnOiBjYXNlICdjJzogICAgICAg ICAgICAgICAvKiBDdHJsLUMgKi8KKyNpZm5kZWYgZGF0YWdlbmVyYWwKKyAgICAgIGNhc2UgJ1ww Myc6CisjZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KKworICAgICAgY2FzZSAnRSc6IGNhc2UgJ2Un OiAgICAgICAgICAgICAgIC8qIFNlbmQgZXJyb3IgcGFja2V0ICovCisgICAgICBjYXNlIDAwMDU6 CisgICAgICAgIGludGVycnVwdGVkID0gMTsKKyAgICAgICAgcmV0dXJuKC0xKTsKKworI2lmZGVm IENLX0NVUlNFUworICAgICAgY2FzZSAwMDE0OiAgICAgICAgICAgICAgICAgICAgICAgIC8qIEN0 cmwtTCB0byByZWZyZXNoIHNjcmVlbiAqLworICAgICAgY2FzZSAnTCc6IGNhc2UgJ2wnOiAgICAg ICAgICAgICAgIC8qIEFsc28gYWNjZXB0IEwgKHVwcGVyLCBsb3dlcikgKi8KKyAgICAgIGNhc2Ug MDAyNzogICAgICAgICAgICAgICAgICAgICAgICAvKiBDdHJsLVcgc3lub255bSBmb3IgVk1TICYg SW5ncmVzICovCisgICAgICAgIHJlcGFpbnQgPSAxOworICAgICAgICByZXR1cm4oMCk7CisjZW5k aWYgLyogQ0tfQ1VSU0VTICovCisKKyAgICAgIGNhc2UgJ1QnOgorICAgICAgY2FzZSAndCc6CQkJ CS8qIFR1cm4gb24gZGVidWctbG9nIHRpbWVzdGFtcHMgKi8KKyNpZmRlZiBERUJVRworCXsKKwkg ICAgZXh0ZXJuIGludCBkZWJ0aW07CisJICAgIGlmIChjaCA9PSAnVCcpIHsKKwkJZGVidGltID0g MTsKKwkJeHhzY3JlZW4oU0NSX1NULFNUX01TRywwbCwKKwkJCSAiRGVidWcgdGltZXN0YW1wcyBP bi4uLiAiKTsKKwkgICAgfSBlbHNlIHsKKwkJZGVidGltID0gMTsKKwkJeHhzY3JlZW4oU0NSX1NU LFNUX01TRywwbCwKKwkJCSAiRGVidWcgdGltZXN0YW1wcyBPZmYuLi4gIik7CisJICAgIH0KKwl9 CisjZW5kaWYgLyogREVCVUcgKi8KKwlyZXR1cm4oMCk7CisKKyAgICAgIGNhc2UgJ0QnOgorI2lm ZGVmIERFQlVHCisJaWYgKCFkZWJsb2cpIHsKKwkgICAgZGVib3BuKCJkZWJ1Zy5sb2ciLDApOwor CSAgICBpZiAoZGVibG9nKSB7CisJCXh4c2NyZWVuKFNDUl9TVCxTVF9NU0csMGwsImRlYnVnLmxv ZyBvcGVuLi4uICIpOworCSAgICB9IGVsc2UgeworCQl4eHNjcmVlbihTQ1JfU1QsU1RfTVNHLDBs LCJkZWJ1Zy5sb2cgb3BlbiBGQUlMRUQuLi4gIik7CisJICAgIH0KKwl9IGVsc2UgeworCSAgICB4 eHNjcmVlbihTQ1JfU1QsU1RfTVNHLDBsLCJEZWJ1ZyBsb2cgT24uLi4gIik7CisJfQorCWlmIChk ZWJsb2cpCisJICBkZWJvayA9IDE7CisjZW5kaWYgLyogREVCVUcgKi8KKwlyZXR1cm4oMCk7CisK KyAgICAgIGNhc2UgJ2QnOgkJCQkvKiBUdXJuIG9mZiBkZWJ1Z2dpbmcgKi8KKyNpZmRlZiBERUJV RworCWlmIChkZWJsb2cpCisJICB4eHNjcmVlbihTQ1JfU1QsU1RfTVNHLDBsLCJEZWJ1ZyBsb2cg T2ZmLi4uICIpOworCWRlYm9rID0gMDsKKyNlbmRpZiAvKiBERUJVRyAqLworCXJldHVybigwKTsK KworICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFueXRoaW5nIGVs c2UsIHByaW50IG1lc3NhZ2UgKi8KKyAgICAgICAgaW50bXNnKDFMKTsKKyAgICAgICAgcmV0dXJu KDApOworICAgIH0KK30KKworLyogIEkgTiBUIE0gUyBHICAtLSAgSXNzdWUgbWVzc2FnZSBhYm91 dCB0ZXJtaW5hbCBpbnRlcnJ1cHRzICAqLworCitWT0lECisjaWZkZWYgQ0tfQU5TSUMKK2ludG1z Zyhsb25nIG4pCisjZWxzZQoraW50bXNnKG4pIGxvbmcgbjsKKyNlbmRpZiAvKiBDS19BTlNJQyAq LworLyogaW50bXNnICovIHsKKyNpZmRlZiBDS19ORUVEX1NJRworICAgIGNoYXIgYnVmWzgwXTsK KyNlbmRpZiAvKiBDS19ORUVEX1NJRyAqLworCisgICAgaWYgKCFkaXNwbGEgfHwgcXVpZXQpICAg ICAgICAgICAgICAgLyogTm90IGlmIHdlJ3JlIGJlaW5nIHF1aWV0ICovCisgICAgICByZXR1cm47 CisgICAgaWYgKHNlcnZlciAmJiAoIXNydmRpcyB8fCBuID4gLTFMKSkgLyogU3BlY2lhbCBmb3Ig c2VydmVyICovCisgICAgICByZXR1cm47CisjaWZkZWYgQ0tfTkVFRF9TSUcKKyAgICBidWZbMF0g PSBOVUw7ICAgICAgICAgICAgICAgICAgICAgICAvKiBLZWVwIGNvbXBpbGVycyBoYXBweSAqLwor I2VuZGlmIC8qIENLX05FRURfU0lHICovCisjaWZuZGVmIE9YT1MKKyNpZmRlZiBTVk9SUE9TSVgK KyAgICBjb25jaGsoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBvdXQgcGVu ZGluZyBlc2NhcGUtc2lnbmFscyAqLworI2VuZGlmIC8qIFNWT1JQT1NJWCAqLworI2VuZGlmIC8q ICEgT1hPUyAqLworI2lmZGVmIFZNUworICAgIGNvbnJlcygpOyAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIFNvIEN0cmwtQyB3aWxsIHdvcmsgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKyAgICBp ZiAoKCFzZXJ2ZXIgJiYgbiA9PSAxTCkgfHwgKHNlcnZlciAmJiBuIDwgMEwpKSB7CisKKyNpZmRl ZiBDS19ORUVEX1NJRworICAgICAgICBpZiAoeGZyaW50KSB7CisJICAgIGNrbWFrbXNnKGJ1ZiwK KwkJICAgICA4MCwKKwkJICAgICAiVHlwZSBlc2NhcGUgY2hhcmFjdGVyICgiLAorCQkgICAgIGRi Y2hyKGVzY2FwZSksCisJCSAgICAgIikgZm9sbG93ZWQgYnk6IiwKKwkJICAgICBOVUxMCisJCSAg ICAgKTsKKyAgICAgICAgICAgIHh4c2NyZWVuKFNDUl9UTiwwLDBsLGJ1Zik7CisgICAgICAgIH0K KyNlbmRpZiAvKiBDS19ORUVEX1NJRyAqLworCisgICAgICAgIGlmICh4ZnJpbnQpIHsKKyAgICAg ICAgICAgIGlmIChwcm90b2NvbCA9PSBQUk9UT19LKSB7CisgeHhzY3JlZW4oU0NSX1ROLDAsMGws IlggdG8gY2FuY2VsIGZpbGUsICBDUiB0byByZXNlbmQgY3VycmVudCBwYWNrZXQiKTsKKyB4eHNj cmVlbihTQ1JfVE4sMCwwbCwiWiB0byBjYW5jZWwgZ3JvdXAsIEEgZm9yIHN0YXR1cyByZXBvcnQi KTsKKyB4eHNjcmVlbihTQ1JfVE4sMCwwbCwiRSB0byBzZW5kIEVycm9yIHBhY2tldCwgQ3RybC1D IHRvIHF1aXQgaW1tZWRpYXRlbHk6ICIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg ICAgICAgICB4eHNjcmVlbihTQ1JfVE4sMCwwbCwiQ3RybC1DIHRvIGNhbmNlbCBmaWxlIHRyYW5z ZmVyOiAiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHh4 c2NyZWVuKFNDUl9UTiwwLDBsLCJUcmFuc2ZlciBpbnRlcnJ1cHRpb24gZGlzYWJsZWQuICIpOwor ICAgICAgICB9CisgICAgfQorICAgIGVsc2UgeHhzY3JlZW4oU0NSX1RVLDAsMGwsIiAiKTsKK30K KworI2lmbmRlZiBOT0RJU1BMQVkKK3N0YXRpYyBpbnQgbmV3ZHB5ID0gMDsgICAgICAgICAgICAg ICAgICAvKiBOZXcgZGlzcGxheSBmbGFnICovCitzdGF0aWMgY2hhciBmYnVmWzgwXTsgICAgICAg ICAgICAgICAgICAgLyogRmlsZW5hbWUgYnVmZmVyICovCitzdGF0aWMgY2hhciBhYnVmWzgwXTsg ICAgICAgICAgICAgICAgICAgLyogQXMtbmFtZSBidWZmZXIgKi8KK3N0YXRpYyBjaGFyIGEyYnVm WzgwXTsgICAgICAgICAgICAgICAgICAvKiBTZWNvbmQgQXMtbmFtZSBidWZmZXIgKi8KK3N0YXRp YyBDS19PRkZfVCBvbGRmZmMgPSAwTDsKK3N0YXRpYyBDS19PRkZfVCBkb3RzID0gMEw7CitzdGF0 aWMgaW50IGhwb3MgPSAwOworCitzdGF0aWMgVk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogSW5pdGlhbGl6ZSBTZXJpYWwgb3IgQ1JUIGRpc3BsYXkgKi8KK2RweWluaXQoKSB7Cisg ICAgaW50IG0gPSAwLCBuID0gMDsKKyAgICBjaGFyICogcyA9ICIiOworCisgICAgbmV3ZHB5ID0g MDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogIERvbid0IGRvIHRoaXMgYWdhaW4gKi8KKyAg ICBvbGRmZmMgPSAoQ0tfT0ZGX1QpMDsJCS8qICBSZXNldCB0aGlzICovCisgICAgZG90cyA9IChD S19PRkZfVCkwOwkJCS8qICBhbmQgdGhpcy4uICovCisgICAgb2xkY3BzID0gY3BzID0gMEw7CisK KyAgICBjb25vbGwoIiIpOwkJCQkvKiBOZXcgbGluZSAqLworICAgIGlmICh3aGF0ICYgV19TRU5E KSBzID0gIlNlbmRpbmc6ICI7CS8qIEFjdGlvbiAqLworICAgIGVsc2UgaWYgKHdoYXQgJiBXX1JF Q1YpIHMgPSAiUmVjZWl2aW5nOiAiOworICAgIG4gPSAoaW50KXN0cmxlbihzKSArIChpbnQpc3Ry bGVuKGZidWYpOworICAgIGNvbm9sKGZidWYpOworICAgIG0gPSAoaW50KXN0cmxlbihhYnVmKSAr IDQ7CisgICAgaWYgKG4gKyBtID4gY21kX2NvbHMpIHsKKyAgICAgICAgY29ub2xsKCIiKTsKKyAg ICAgICAgbiA9IDA7CisgICAgfSBlbHNlCisgICAgICBuICs9IG07CisgICAgaWYgKCphYnVmKSB7 CisgICAgICAgIGNvbm9sKCIgPT4gIik7CisgICAgICAgIGNvbm9sKGFidWYpOworICAgIH0KKyAg ICBtID0gKGludClzdHJsZW4oYTJidWYpICsgNDsKKyAgICBpZiAobiArIG0gPiBjbWRfY29scykg eworICAgICAgICBjb25vbGwoIiIpOworICAgICAgICBuID0gMDsKKyAgICB9IGVsc2UKKyAgICAg IG4gKz0gbTsKKyAgICBpZiAoKmEyYnVmKSB7CisgICAgICAgIGNvbm9sKCIgPT4gIik7CisgICAg ICAgIGNvbm9sKGEyYnVmKTsKKyAgICB9CisgICAgKmZidWYgPSBOVUw7ICphYnVmID0gTlVMOyAq YTJidWYgPSBOVUw7CisgICAgY29ub2xsKCIiKTsKKyAgICBpZiAoZnNpemUgPiAoQ0tfT0ZGX1Qp LTEpIHsJCS8qIFNpemUgKi8KKyAgICAgICAgc3ByaW50ZihmYnVmLCJTaXplOiAlcywgVHlwZTog Iixja2ZzdG9hKGZzaXplKSk7IC8qIFNBRkUgKDgwKSAqLworICAgICAgICBjb25vbChmYnVmKTsg KmZidWYgPSBOVUw7CisgICAgfSBlbHNlIGNvbm9sKCJTaXplOiB1bmtub3duLCBUeXBlOiAiKTsK KyAgICBpZiAoYmluYXJ5KSB7CQkJLyogVHlwZSAqLworICAgICAgICBzd2l0Y2goYmluYXJ5KSB7 CisgICAgICAgICAgICAgIGNhc2UgWFlGVF9MOiBjb25vbCgibGFiZWxlZCIpOyBicmVhazsKKyAg ICAgICAgICAgICAgY2FzZSBYWUZUX0k6IGNvbm9sKCJpbWFnZSIpOyBicmVhazsKKyAgICAgICAg ICAgICAgY2FzZSBYWUZUX1U6IGNvbm9sKCJiaW5hcnkgdW5kZWZpbmVkIik7IGJyZWFrOworICAg ICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICBjYXNlIFhZRlRfQjogY29ub2woImJp bmFyeSIpOyBicmVhazsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisjaWZkZWYgTk9DU0VUUwor ICAgICAgICBjb25vbCgidGV4dCIpOworI2Vsc2UKKyAgICAgICAgY29ub2woInRleHQsICIpOwor ICAgICAgICBpZiAodGNoYXJzZXQgPT0gVENfVFJBTlNQIHx8IHhmcnhsYSA9PSAwKSB7CisgICAg ICAgICAgICBjb25vbCgidHJhbnNwYXJlbnQiKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg ICAgIGlmICh3aGF0ICYgV19TRU5EKSB7CisgICAgICAgICAgICAgICAgY29ub2woZmNzaW5mb1tm Y2hhcnNldF0ua2V5d29yZCk7CisgICAgICAgICAgICAgICAgY29ub2woIiA9PiAiKTsKKyAgICAg ICAgICAgICAgICBjb25vbCh0Y3NpbmZvW3RjaGFyc2V0XS5rZXl3b3JkKTsKKyAgICAgICAgICAg IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgY29ub2wodGNzaW5mb1t0Y2hhcnNldF0ua2V5d29y ZCk7CisgICAgICAgICAgICAgICAgY29ub2woIiA9PiAiKTsKKyAgICAgICAgICAgICAgICBjb25v bChmY3NpbmZvW2ZjaGFyc2V0XS5rZXl3b3JkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor I2VuZGlmIC8qIE5PQ1NFVFMgKi8KKyAgICB9CisjaWZkZWYgU1RSRUFNSU5HCisgICAgaWYgKHN0 cmVhbWluZykKKyAgICAgIGNvbm9sKCIsIFNUUkVBTUlORyIpOworI2VuZGlmIC8qIFNUUkVBTUlO RyAqLworICAgIGNvbm9sbCgiIik7CisKKyAgICBpZiAoZmRpc3BsYSA9PSBYWUZEX1MpIHsgICAg ICAgICAgICAvKiBDUlQgZmllbGQgaGVhZGluZ3MgKi8KKy8qCisgIERlZmluZSBDS19DUFMgdG8g c2hvdyBjdXJyZW50IHRyYW5zZmVyIHJhdGUuCisgIExlYXZlIGl0IHVuZGVmaW5lZCB0byBzaG93 IGVzdGltYXRlZCB0aW1lIHJlbWFpbmluZy4KKyAgRXN0aW1hdGVkLXRpbWUtcmVtYWluaW5nIGNv ZGUgZnJvbSBBbmR5IEZ5ZmUsIG5vdCB0ZXN0ZWQgb24KKyAgcGF0aG9sb2dpY2FsIGNhc2VzLgor Ki8KKyNkZWZpbmUgQ0tfQ1BTCisKKyNpZmRlZiBDS19DUFMKKyAgICAgICAgY29ub2xsKCIgICAg RmlsZSAgIFBlcmNlbnQgICAgICAgUGFja2V0Iik7CisgICAgICAgIGNvbm9sbCgiICAgIEJ5dGVz ICBEb25lICAgICBDUFMgIExlbmd0aCIpOworI2Vsc2UKKyAgICAgICAgY29ub2xsKCIgICAgRmls ZSAgIFBlcmNlbnQgIFNlY3MgUGFja2V0Iik7CisgICAgICAgIGNvbm9sbCgiICAgIEJ5dGVzICBE b25lICAgICBMZWZ0IExlbmd0aCIpOworI2VuZGlmIC8qIENLX0NQUyAqLworICAgICAgICBuZXdk cHkgPSAwOworICAgIH0KKyAgICBocG9zID0gMDsKK30KKworLyoKKyAgc2hvd3BrdChjKQorICBj ID0gY29tcGxldGlvbiBjb2RlOiAwIG1lYW5zIHRyYW5zZmVyIGluIHByb2dyZXNzLCBub256ZXJv IG1lYW5zIGl0J3MgZG9uZS4KKyAgU2hvdyB0aGUgZmlsZSB0cmFuc2ZlciBwcm9ncmVzcyBjb3Vu dGVyIGFuZCBwZXJoYXBzIHZlcmJvc2UgcGFja2V0IHR5cGUuCisqLworVk9JRAorI2lmZGVmIENL X0FOU0lDCitzaG93cGt0KGNoYXIgYykKKyNlbHNlCitzaG93cGt0KGMpIGNoYXIgYzsKKyNlbmRp ZiAvKiBDS19BTlNJQyAqLworLyogc2hvd3BrdCAqLyB7CisKKyNpZm5kZWYgR0ZUSU1FUgorICAg IGxvbmcgZXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVsYXBzZWQgdGltZSwgZW50 aXJlIGJhdGNoICAqLworI2VuZGlmIC8qIEdGVElNRVIgKi8KKyAgICBDS19PRkZfVCBob3dmYXI7 CQkJLyogSG93IGZhciBpbnRvIGZpbGUgKi8KKyAgICBsb25nIHBkOyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBQZXJjZW50IGRvbmUsIHRoaXMgZmlsZSAgICAgKi8KKyAgICBsb25nIHRw OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUcmFuc2ZlciByYXRlLCBlbnRpcmUgYmF0 Y2ggKi8KKyAgICBsb25nIHBzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQYWNrZXQg c2l6ZSwgY3VycmVudCBwYWNrZXQgKi8KKyAgICBDS19PRkZfVCBteXRmYzsJCQkvKiBMb2NhbCBj b3B5IG9mIGJ5dGUgY291bnRlciAgKi8KKworI2lmZGVmIEdGVElNRVIKKyAgICBDS0ZMT0FUIHRu b3c7CisjZW5kaWYgLyogR0ZUSU1FUiAqLworCisgICAgaWYgKG5ld2RweSkgICAgICAgICAgICAg ICAgICAgICAgICAgLyogUHV0IHVwIGZpbGVuYW1lcywgZXRjLCAqLworICAgICAgZHB5aW5pdCgp OyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlmIHRoZXkncmUgbm90IHRoZXJlIGFscmVhZHku ICovCisKKyAgICBob3dmYXIgPSBmZmM7ICAgICAgICAgICAgICAgICAgICAgICAvKiBIb3cgZmFy ICovCisvKgorICBDYWxjdWxhdGUgQ1BTIHJhdGUgZXZlbiBpZiBub3QgZGlzcGxheWluZyBvbiBz Y3JlZW4gZm9yIHVzZSBpbiBmaWxlCisgIHRyYW5zZmVyIHN0YXRpc3RpY3MuCisqLworI2lmZGVm IEdGVElNRVIKKyAgICB0bm93ID0gZ2Z0aW1lcigpOyAgICAgICAgICAgICAgICAgICAvKiBUaW1l IHNpbmNlIHdlIHN0YXJ0ZWQgKi8KKyAgICBwcyA9ICh3aGF0ICYgV19SRUNWKSA/IHJwa3RsIDog c3BrdGw7IC8qIFBhY2tldCBzaXplICovCisjaWZkZWYgQ0tfUkVTRU5ECisgICAgaWYgKHdoYXQg JiBXX1NFTkQpCQkJLyogSW4gY2FzZSB3ZSBkaWRuJ3Qgc3RhcnQgYXQgKi8KKyAgICAgIGhvd2Zh ciArPSBzZW5kc3RhcnQ7ICAgICAgICAgICAgICAvKiAgdGhlIGJlZ2lubmluZy4uLiAqLworICAg IGVsc2UgaWYgKHdoYXQgJiBXX1JFQ1YpCisgICAgICBob3dmYXIgKz0gcnNfbGVuOworI2VuZGlm IC8qIENLX1JFU0VORCAqLworICAgIHBkID0gLTE7ICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIFBlcmNlbnQgZG9uZS4gKi8KKyAgICBpZiAoYyA9PSBOVUwpIHsgICAgICAgICAgICAgICAg ICAgICAvKiBTdGlsbCBnb2luZywgZmlndXJlICUgZG9uZSAqLworICAgICAgICBpZiAoIWZzaXpl KSByZXR1cm47CQkvKiBFbXB0eSBmaWxlLCBkb24ndCBib3RoZXIgKi8KKyAgICAgICAgcGQgPSAo ZnNpemUgPiA5OSkgPyAoaG93ZmFyIC8gKGZzaXplIC8gKENLX09GRl9UKTEwMCkpIDogMDsKKyAg ICAgICAgaWYgKHBkID4gMTAwKSBwZCA9IDEwMDsgICAgICAgICAvKiBFeHBhbnNpb24gKi8KKyAg ICB9CisgICAgaWYgKGMgIT0gTlVMKQorICAgICAgaWYgKCFjeHNlZW4gJiYgIWRpc2NhcmQgJiYg IWN6c2VlbikKKyAgICAgICAgcGQgPSAxMDA7ICAgICAgICAgICAgICAgICAgICAgICAvKiBGaWxl IGNvbXBsZXRlLCBzbyAxMDAlLiAqLworCisgICAgbXl0ZmMgPSAocGQgPCAxMDApID8gdGZjICsg ZmZjIDogdGZjOyAgICAvKiBDUFMgKi8KKyAgICB0cCA9IChsb25nKSgodG5vdyA+IDAuMCkgPyAo Q0tGTE9BVCkgbXl0ZmMgLyB0bm93IDogMCk7CisgICAgaWYgKGMgJiYgKHRwID09IDApKQorICAg ICAgdHAgPSBmZmM7CisKKyAgICBjcHMgPSB0cDsgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBTZXQgZ2xvYmFsIHZhcmlhYmxlICovCisgICAgaWYgKGNwcyA+IHBlYWtjcHMgJiYgICAgICAg ICAgICAgICAgLyogUGVhayB0cmFuc2ZlciByYXRlICovCisgICAgICAgICAoKHdoYXQgJiBXX1NF TkQgJiYgc3BhY2tldHMgPiB3c2xvdHMgKyA0KSB8fAorCSAgKCEod2hhdCAmIFdfU0VORCkgJiYg c3BhY2tldHMgPiAxMCkpKSB7CisgICAgICAgIHBlYWtjcHMgPSBjcHM7CisgICAgfQorCisjZWxz ZSAgLyogTm90IEdGVElNRVIgKi8KKworICAgIGV0ID0gZ3RpbWVyKCk7ICAgICAgICAgICAgICAg ICAgICAgIC8qIEVsYXBzZWQgdGltZSAgKi8KKyAgICBwcyA9ICh3aGF0ICYgV19SRUNWKSA/IHJw a3RsIDogc3BrdGw7IC8qIFBhY2tldCBsZW5ndGggKi8KKyNpZmRlZiBDS19SRVNFTkQKKyAgICBp ZiAod2hhdCAmIFdfU0VORCkJCQkvKiBBbmQgaWYgd2UgZGlkbid0IHN0YXJ0IGF0ICovCisgICAg ICBob3dmYXIgKz0gc2VuZHN0YXJ0OyAgICAgICAgICAgICAgLyogIHRoZSBiZWdpbm5pbmcuLi4g Ki8KKyAgICBlbHNlIGlmICh3aGF0ICYgV19SRUNWKQorICAgICAgaG93ZmFyICs9IHJzX2xlbjsK KyNlbmRpZiAvKiBDS19SRVNFTkQgKi8KKyAgICBwZCA9IC0xOyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBQZXJjZW50IGRvbmUuICovCisgICAgaWYgKGMgPT0gTlVMKSB7ICAgICAgICAg ICAgICAgICAgICAgLyogU3RpbGwgZ29pbmcsIGZpZ3VyZSAlIGRvbmUgKi8KKyAgICAgICAgaWYg KGZzaXplID09IDBMKSByZXR1cm47ICAgICAgICAvKiBFbXB0eSBmaWxlLCBkb24ndCBib3RoZXIg Ki8KKyAgICAgICAgcGQgPSAoZnNpemUgPiA5OSkgPyAoaG93ZmFyIC8gKGZzaXplIC8gKENLX09G Rl9UKTEwMCkpIDogMDsKKyAgICAgICAgaWYgKHBkID4gMTAwKSBwZCA9IDEwMDsgICAgICAgICAv KiBFeHBhbnNpb24gKi8KKyAgICB9CisgICAgaWYgKGMgIT0gTlVMKQorICAgICAgaWYgKCFjeHNl ZW4gJiYgIWRpc2NhcmQgJiYgIWN6c2VlbikKKyAgICAgICAgcGQgPSAxMDA7ICAgICAgICAgICAg ICAgICAgICAgICAvKiBGaWxlIGNvbXBsZXRlLCBzbyAxMDAlLiAqLworCisKKyNpZm5kZWYgQ0tf Q1BTCisvKgorICBmc2VjcyA9IHRpbWUgKGZyb20gZ3RpbWVyKSB0aGF0IHRoaXMgZmlsZSBzdGFy dGVkIChzZXQgaW4gc2ZpbGUoKSkuCisgIFJhdGUgc28gZmFyIGlzIGZmYyAvIChldCAtIGZzZWNz KSwgIGVzdGltYXRlZCB0aW1lIGZvciByZW1haW5pbmcgYnl0ZXMKKyAgaXMgKGZzaXplIC0gZmZj KSAvIChmZmMgLyAoZXQgLSBmc2VjcykpLgorKi8KKyAgICB0cCA9IChob3dmYXIgPiAwKSA/IChm c2l6ZSAtIGhvd2ZhcikgKiAoZXQgLSBmc2VjcykgLyBob3dmYXIgOiAwOworI2VuZGlmIC8qIENL X0NQUyAqLworCisjaWZkZWYgQ0tfQ1BTCisgICAgbXl0ZmMgPSAocGQgPCAxMDApID8gdGZjICsg ZmZjIDogdGZjOworICAgIHRwID0gKGV0ID4gMCkgPyBteXRmYyAvIGV0IDogMDsJLyogVHJhbnNm ZXIgcmF0ZSAqLworICAgIGlmIChjICYmICh0cCA9PSAwKSkJCQkvKiBXYXRjaCBvdXQgZm9yIHN1 YnNlY29uZCB0aW1lcyAqLworICAgICAgICB0cCA9IGZmYzsKKworICAgIGNwcyA9IHRwOwkJCQkv KiBTZXQgZ2xvYmFsIHZhcmlhYmxlICovCisgICAgaWYgKGNwcyA+IHBlYWtjcHMgJiYgICAgICAg ICAgICAgICAgLyogUGVhayB0cmFuc2ZlciByYXRlICovCisgICAgICAgICAoKHdoYXQgJiBXX1NF TkQgJiYgc3BhY2tldHMgPiB3c2xvdHMgKyA0KSB8fAorCSAgKCEod2hhdCAmIFdfU0VORCkgJiYg c3BhY2tldHMgPiAxMCkpKSB7CisgICAgICAgIHBlYWtjcHMgPSBjcHM7CisgICAgfQorI2VuZGlm IC8qIENLX0NQUyAqLworCisjZW5kaWYgLyogR0ZUSU1FUiAqLworCisgICAgaWYgKGZkaXNwbGEg PT0gWFlGRF9TKSB7ICAgICAgICAgICAgLyogQ1JUIGRpc3BsYXkgKi8KKyAgICAgICAgY2hhciBi dWZmZXJbMTI4XTsKKwkvKiBUaGVzZSBzcHJpbnRmcyBzaG91bGQgYmUgc2FmZSB1bnRpbCB3ZSBo YXZlIDMyLWRpZ2l0IG51bWJlcnMgKi8KKworICAgICAgICBpZiAocGQgPiAtMUwpCisgICAgICAg ICAgc3ByaW50ZihidWZmZXIsICIlYyU5cyU1bGQlJSU4bGQlOGxkICIsIENSLGNrZnN0b2EoaG93 ZmFyKSxwZCx0cCxwcyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBzcHJpbnRmKGJ1ZmZlciwg IiVjJTlzICAgICAgJThsZCU4bGQgIiwgQ1IsY2tmc3RvYShob3dmYXIpLHRwLHBzKTsKKyAgICAg ICAgY29ub2woYnVmZmVyKTsKKyAgICAgICAgaHBvcyA9IDMxOworICAgIH0gZWxzZSBpZiAoZmRp c3BsYSA9PSBYWUZEX1IpIHsgICAgIC8qIFNFUklBTCAqLworICAgICAgICBsb25nIGksIGs7Cisg ICAgICAgIGlmIChob3dmYXIgLSBvbGRmZmMgPCAxMDI0KSAgICAgLyogVXBkYXRlIGRpc3BsYXkg ZXZlcnkgMUsgKi8KKyAgICAgICAgICByZXR1cm47CisgICAgICAgIG9sZGZmYyA9IGhvd2Zhcjsg ICAgICAgICAgICAgICAgLyogVGltZSBmb3IgbmV3IGRpc3BsYXkgKi8KKyAgICAgICAgayA9ICho b3dmYXIgLyAxMDI0TCkgLSBkb3RzOyAgICAvKiBIb3cgbWFueSBLIHNvIGZhciAqLworICAgICAg ICBmb3IgKGkgPSAwTDsgaSA8IGs7IGkrKykgeworICAgICAgICAgICAgaWYgKGhwb3MrKyA+IChj bWRfY29scyAtIDMpKSB7IC8qIFRpbWUgdG8gd3JhcD8gKi8KKyAgICAgICAgICAgICAgICBjb25v bGwoIiIpOworICAgICAgICAgICAgICAgIGhwb3MgPSAwOworICAgICAgICAgICAgfQorICAgICAg ICAgICAgY29ub2MoJy4nKTsgICAgICAgICAgICAgICAgIC8qIFByaW50IGEgZG90IGZvciB0aGlz IEsgKi8KKyAgICAgICAgICAgIGRvdHMrKzsgICAgICAgICAgICAgICAgICAgICAvKiBDb3VudCBp dCAqLworICAgICAgICB9CisgICAgfQorfQorCisKKy8qICBDIEsgUyBDIFIgRSBFIE4gIC0tICBT Y3JlZW4gZGlzcGxheSBmdW5jdGlvbiAgKi8KKworLyoKKyAgY2tzY3JlZW4oZixjLG4scykKKyAg ICBmIC0gYXJndW1lbnQgZGVzY3JpcHRvcgorICAgIGMgLSBhIGNoYXJhY3RlciBvciBzbWFsbCBp bnRlZ2VyCisgICAgbiAtIGEgbG9uZyBpbnRlZ2VyCisgICAgcyAtIGEgc3RyaW5nLgorCisgIGFu ZCBnbG9iYWwgZmRpc3BsYSA9IFNFVCBGSUxFIERJU1BMQVkgdmFsdWU6CisKKyAgICBYWUZEX04g PSBOT05FCisgICAgWFlGRF9SID0gU0VSSUFMOiAgICAgRG90cywgZXRjLCB3b3JrcyBvbiBhbnkg dGVybWluYWwsIGV2ZW4gaGFyZGNvcHkuCisgICAgWFlGRF9TID0gQ1JUOiAgICAgICAgV29ya3Mg b24gYW55IENSVCwgd3JpdGVzIG92ZXIgY3VycmVudCBsaW5lLgorICAgIFhZRkRfQyA9IEZVTExT Q1JFRU46IFJlcXVpcmVzIHRlcm1pbmFsLWRlcGVuZGVudCBzY3JlZW4gY29udHJvbC4KKyAgICBY WUZEX0IgPSBCUklFRjogICAgICBMaWtlIFNFUklBTCBidXQgb25seSBmaWxlbmFtZSAmIGNvbXBs ZXRpb24gc3RhdHVzLgorICAgIFhZRkRfRyA9IEdVSTsgICAgICAgIFdpbmRvd3MgR1VJLCBzYW1l IGJlaGF2aW9yIGFzIEZVTExTQ1JFRU4KKyovCitWT0lECisjaWZkZWYgQ0tfQU5TSUMKK2Nrc2Ny ZWVuKGludCBmLCBjaGFyIGMsQ0tfT0ZGX1QgbixjaGFyICpzKQorI2Vsc2UKK2Nrc2NyZWVuKGYs YyxuLHMpIGludCBmOyBjaGFyIGM7IENLX09GRl9UIG47IGNoYXIgKnM7CisjZW5kaWYgLyogQ0tf QU5TSUMgKi8KKy8qIHNjcmVlbiAqLyB7CisgICAgY2hhciBidWZbODBdOworICAgIGludCBsZW47 ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExlbmd0aCBvZiBzdHJpbmcgKi8KKyNpZmRl ZiBVTklYCisjaWZuZGVmIE5PSkMKKyAgICBpbnQgb2JnOworX1BST1RPVFlQKCBWT0lEIGNvbmJn dCwgKGludCkgKTsKKyNlbmRpZiAvKiBOT0pDICovCisjZW5kaWYgLyogVU5JWCAqLworICAgIGlu dCBmdHAgPSAwOworCisgICAgZnRwID0gKHdoYXQgJiBXX0ZUUCkgPyAxIDogMDsJLyogRlRQIG9y IEtlcm1pdD8gKi8KKworICAgIGlmICghbG9jYWwgJiYgIWZ0cCkJCQkvKiBJbiByZW1vdGUgbW9k ZSAtIGRvbid0IGRvIHRoaXMgKi8KKyAgICAgIHJldHVybjsKKworICAgIGlmICghcykgcyA9ICIi OworCisgICAgaWYgKCFmeGRfaW5pdGVkKSAgICAgICAgICAgICAgICAgICAgLyogSW5pdGlhbGl6 ZSBpZiBuZWNlc3NhcnkgKi8KKyAgICAgIGZ4ZGluaXQoZmRpc3BsYSk7CisKKyNpZmRlZiBVTklY CisjaWZuZGVmIE5PSkMKKyAgICBvYmcgPSBiYWNrZ3JkOyAgICAgICAgICAgICAgICAgICAgICAv KiBQcmV2aW91cyBiYWNrZ3JvdW5kIHN0YXR1cyAqLworICAgIGNvbmJndCgxKTsgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIFNlZSBpZiBydW5uaW5nIGluIGJhY2tncm91bmQgKi8KKyAgICBp ZiAoIWJhY2tncmQgJiYgb2JnKSB7ICAgICAgICAgICAgICAvKiBKdXN0IGNhbWUgaW50byBmb3Jl Z3JvdW5kPyAqLworICAgICAgICBjb25jYigoY2hhcillc2NhcGUpOyAgICAgICAgICAgIC8qIFB1 dCBjb25zb2xlIGJhY2sgaW4gQ0JSRUFLIG1vZGUgKi8KKyAgICAgICAgc2V0aW50KCk7ICAgICAg ICAgICAgICAgICAgICAgICAvKiBSZXN0b3JlIGludGVycnVwdHMgKi8KKyAgICB9CisjZW5kaWYg LyogTk9KQyAqLworI2VuZGlmIC8qIFVOSVggKi8KKworICAgIGlmICgoZiAhPSBTQ1JfV00pICYm IChmICE9IFNDUl9FTSkpIC8qIEFsd2F5cyB1cGRhdGUgd2FybmluZ3MgJiBlcnJvcnMgKi8KKyAg ICAgIGlmICghZGlzcGxhIHx8CisgICAgICAgICAgKGJhY2tncmQgJiYgYmdzZXQpIHx8CisgICAg ICAgICAgZmRpc3BsYSA9PSBYWUZEX04gfHwKKyAgICAgICAgICAoc2VydmVyICYmICFzcnZkaXMp CisgICAgICAgICAgKQorICAgICAgICByZXR1cm47CisKKyNpZmRlZiBWTVMKKyAgICBpZiAoZiA9 PSBTQ1JfRk4pICAgICAgICAgICAgICAgICAgICAvKiBWTVMgLSBzaG9ydGVuIHRoZSBuYW1lICov CisgICAgICBzID0genJlbG5hbWUocyx6Z3RkaXIoKSk7CisjZW5kaWYgLyogVk1TICovCisKKyAg ICBpZiAoZGVzdCA9PSBERVNUX1MpICAgICAgICAgICAgICAgICAvKiBTRVQgREVTVElOQVRJT04g U0NSRUVOICovCisgICAgICByZXR1cm47ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIHdv dWxkIGludGVyZmVyZS4uLiAqLworCisjaWZkZWYgS1VJCisgICAgaWYgKGZkaXNwbGEgPT0gWFlG RF9HKSB7ICAgICAgICAgICAgLyogSWYgZ3VpIGRpc3BsYXkgc2VsZWN0ZWQgKi8KKyAgICAgICAg c2NyZWVuZyhmLGMsbixzKTsgICAgICAgICAgICAgICAvKiBjYWxsIHRoZSBndWkgdmVyc2lvbiAq LworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmIC8qIEtVSSAqLworI2lmZGVmIENLX0NV UlNFUworICAgIGlmIChmZGlzcGxhID09IFhZRkRfQykgeyAgICAgICAgICAgIC8qIElmIGZ1bGxz Y3JlZW4gZGlzcGxheSBzZWxlY3RlZCAqLworICAgICAgICBzY3JlZW5jKGYsYyxuLHMpOyAgICAg ICAgICAgICAgIC8qIGNhbGwgdGhlIGZ1bGxzY3JlZW4gdmVyc2lvbiAqLworICAgICAgICByZXR1 cm47CisgICAgfQorI2VuZGlmIC8qIENLX0NVUlNFUyAqLworCisgICAgbGVuID0gKGludClzdHJs ZW4ocyk7ICAgICAgICAgICAgICAgLyogTGVuZ3RoIG9mIHN0cmluZyAqLworCisgICAgc3dpdGNo IChmKSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogSGFuZGxlIG91ciBmdW5jdGlvbiBjb2Rl ICovCisgICAgICBjYXNlIFNDUl9GTjogICAgICAgICAgICAgICAgICAgICAgLyogRmlsZW5hbWUg Ki8KKyAgICAgICAgaWYgKGZkaXNwbGEgPT0gWFlGRF9CKSB7CisjaWZkZWYgTkVXRlRQCisJICAg IGlmIChmdHApCisJICAgICAgcHJpbnRmKCIgJXMgJXMiLCB3aGF0ICYgV19TRU5EID8gIlBVVCIg OiAiR0VUIiwgcyk7CisJICAgIGVsc2UKKyNlbmRpZiAvKiBORVdGVFAgKi8KKwkgICAgICBwcmlu dGYoIiAlcyAlcyIsIHdoYXQgJiBXX1NFTkQgPyAiU0VORCIgOiAiUkVDViIsIHMpOworI2lmZGVm IFVOSVgKKyAgICAgICAgICAgIGZmbHVzaChzdGRvdXQpOworI2VuZGlmIC8qIFVOSVggKi8KKyAg ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorI2lmZGVmIE1BQworICAgICAgICBjb25vbGwo IiIpOyBjb25vbChzKTsgY29ub2MoU1ApOyBocG9zID0gbGVuICsgMTsKKyNlbHNlCisgICAgICAg IGNrc3RybmNweShmYnVmLHMsODApOworICAgICAgICBhYnVmWzBdID0gYTJidWZbMF0gPSBOVUw7 CisgICAgICAgIG5ld2RweSA9IDE7ICAgICAgICAgICAgICAgICAgICAgLyogTmV3IGZpbGUgc28g cmVmcmVzaCBkaXNwbGF5ICovCisjZW5kaWYgLyogTUFDICovCisgICAgICAgIHJldHVybjsKKwor ICAgICAgY2FzZSBTQ1JfQU46ICAgICAgICAgICAgICAgICAgICAgIC8qIEFzLW5hbWUgKi8KKyAg ICAgICAgaWYgKGZkaXNwbGEgPT0gWFlGRF9CKSB7CisjaWZkZWYgQ09NTUVOVAorICAgICAgICAg ICAgcHJpbnRmKCIoYXMgJXMpICIscyk7CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAgICAg ICAgcmV0dXJuOworICAgICAgICB9CisjaWZkZWYgTUFDCisgICAgICAgIGlmIChocG9zICsgbGVu ID4gNzUpIHsgY29ub2xsKCIiKTsgaHBvcyA9IDA7IH0KKyAgICAgICAgY29ub2woIj0+ICIpOyBj b25vbChzKTsKKyAgICAgICAgaWYgKChocG9zICs9IChsZW4gKyAzKSkgPiA3OCkgeyBjb25vbGwo IiIpOyBocG9zID0gMDsgfQorI2Vsc2UKKyAgICAgICAgaWYgKGFidWZbMF0pIHsKKyAgICAgICAg ICAgIGNrc3RybmNweShhMmJ1ZixzLDgwKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg IGNrc3RybmNweShhYnVmLHMsODApOworICAgICAgICB9CisjZW5kaWYgLyogTUFDICovCisgICAg ICAgIHJldHVybjsKKworICAgICAgY2FzZSBTQ1JfRlM6ICAgICAgICAgICAgICAgICAgICAgIC8q IEZpbGUtc2l6ZSAqLworICAgICAgICBpZiAoZmRpc3BsYSA9PSBYWUZEX0IpIHsKKyAgICAgICAg ICAgIHByaW50ZigiICglcykgKCVzIGJ5dGUlcykiLAorI2lmZGVmIE5PSUNQCisgICAgICAgICAg ICAgICAgICAgKGJpbmFyeSA/ICJiaW5hcnkiIDogInRleHQiKQorI2Vsc2UKKyAgICAgICAgICAg ICAgICAgICBnZm1vZGUoYmluYXJ5LDApCisjZW5kaWYgLyogTk9JQ1AgKi8KKyAgICAgICAgICAg ICAgICAgICAsIGNrZnN0b2EobiksIG4gPT0gMSA/ICIiIDogInMiKTsKKyNpZmRlZiBVTklYCisg ICAgICAgICAgICBmZmx1c2goc3Rkb3V0KTsKKyNlbmRpZiAvKiBVTklYICovCisgICAgICAgICAg ICByZXR1cm47CisgICAgICAgIH0KKyNpZmRlZiBNQUMKKyAgICAgICAgc3ByaW50ZihidWYsIiwg U2l6ZTogJXMiLGNrZnN0b2EobikpOyAgY29ub2xsKGJ1Zik7ICBocG9zID0gMDsKKyNlbmRpZiAv KiBNQUMgKi8KKyAgICAgICAgcmV0dXJuOworCisgICAgICBjYXNlIFNDUl9YRDogICAgICAgICAg ICAgICAgICAgICAgLyogWC1wYWNrZXQgZGF0YSAqLworICAgICAgICBpZiAoZmRpc3BsYSA9PSBY WUZEX0IpCisgICAgICAgICAgcmV0dXJuOworI2lmZGVmIE1BQworICAgICAgICBjb25vbGwoIiIp OyBjb25vbGwocyk7IGhwb3MgPSAwOworI2Vsc2UKKyAgICAgICAgY2tzdHJuY3B5KGZidWYscyw4 MCk7CisgICAgICAgIGFidWZbMF0gPSBhMmJ1ZlswXSA9IE5VTDsKKyNlbmRpZiAvKiBNQUMgKi8K KyAgICAgICAgcmV0dXJuOworCisgICAgICBjYXNlIFNDUl9TVDogICAgICAgICAgICAgICAgICAg ICAgLyogRmlsZSBzdGF0dXMgKi8KKyAgICAgICAgc3dpdGNoIChjKSB7CisgICAgICAgICAgY2Fz ZSBTVF9PSzogICAgICAgICAgICAgICAgICAgLyogVHJhbnNmZXJyZWQgT0sgKi8KKyAgICAgICAg ICAgIHNob3dwa3QoJ1onKTsgICAgICAgICAgICAgICAvKiBVcGRhdGUgbnVtYmVycyBvbmUgbGFz dCB0aW1lICovCisgICAgICAgICAgICBpZiAoZmRpc3BsYSA9PSBYWUZEX0IpIHsKKyNpZmRlZiBH RlRJTUVSCisJCWlmIChmcHhmc2VjcykKKwkJICBwcmludGYoIjogT0sgKCUwLjNmIHNlYywgJWxk IGNwcykiLGZweGZzZWNzLAorCQkJIChsb25nKSgoQ0tGTE9BVClmZmMgLyBmcHhmc2VjcykpOwor I2Vsc2UKKwkJaWYgKHhmc2VjcykKKwkJICBwcmludGYoIjogT0sgKCVkIHNlYywgJWxkIGNwcyki LHhmc2VjcyxmZmMveGZzZWNzKTsKKyNlbmRpZiAvKiBHRlRJTUVSICovCisJCXByaW50ZigiXG4i KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp ZiAoKGhwb3MgKz0gNSkgPiA3OCkgY29ub2xsKCIiKTsgLyogV3JhcCBzY3JlZW4gbGluZS4gKi8K KyAgICAgICAgICAgIGNvbm9sbCgiIFtPS10iKTsgaHBvcyA9IDA7ICAvKiBQcmludCBPSyBtZXNz YWdlLiAqLworICAgICAgICAgICAgaWYgKGZkaXNwbGEgPT0gWFlGRF9TKSB7ICAgIC8qIFdlIGRp ZG4ndCBzaG93IFogcGFja2V0IHdoZW4gKi8KKyAgICAgICAgICAgICAgICBjb25vYygnWicpOyAg ICAgICAgICAgICAvKiBpdCBjYW1lLCBzbyBzaG93IGl0IG5vdy4gKi8KKyAgICAgICAgICAgICAg ICBocG9zID0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAg ICAgIGNhc2UgU1RfRElTQzogICAgICAgICAgICAgICAgIC8qICBEaXNjYXJkZWQgKi8KKyAgICAg ICAgICAgIGlmIChmZGlzcGxhID09IFhZRkRfQikgeworICAgICAgICAgICAgICAgIHByaW50Zigi OiBESVNDQVJERURcbiIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0K KyAgICAgICAgICAgIGlmICgoaHBvcyArPSAxMikgPiA3OCkgY29ub2xsKCIiKTsKKyAgICAgICAg ICAgIGNvbm9sbCgiIFtkaXNjYXJkZWRdIik7IGhwb3MgPSAwOworICAgICAgICAgICAgcmV0dXJu OworCisgICAgICAgICAgY2FzZSBTVF9JTlQ6ICAgICAgICAgICAgICAgICAgLyogIEludGVycnVw dGVkICovCisgICAgICAgICAgICBpZiAoZmRpc3BsYSA9PSBYWUZEX0IpIHsKKyAgICAgICAgICAg ICAgICBwcmludGYoIjogSU5URVJSVVBURURcbiIpOworICAgICAgICAgICAgICAgIHJldHVybjsK KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgoaHBvcyArPSAxNCkgPiA3OCkgY29ub2xs KCIiKTsKKyAgICAgICAgICAgIGNvbm9sbCgiIFtpbnRlcnJ1cHRlZF0iKTsgaHBvcyA9IDA7Cisg ICAgICAgICAgICByZXR1cm47CisKKwkgIGNhc2UgU1RfU0lNOgorICAgICAgICAgICAgaWYgKGZk aXNwbGEgPT0gWFlGRF9CKSB7CisJCWlmIChuID09IFNLUF9YTlgpCisJCSAgcHJpbnRmKCI6IFdP VUxEIEJFIFRSQU5TRkVSUkVEIChOZXcgZmlsZSlcbiIpOworCQllbHNlIGlmIChuID09IFNLUF9Y VVApCisJCSAgcHJpbnRmKCI6IFdPVUxEIEJFIFRSQU5TRkVSUkVEIChSZW1vdGUgZmlsZSBvbGRl cilcbiIpOworCQllbHNlIGlmIChuID09IFNLUF9TSU0pCisJCSAgcHJpbnRmKCI6IFdPVUxEIEJF IFRSQU5TRkVSUkVEXG4iKTsKKwkJZWxzZSBpZiAobiA+IDAgJiYgbiA8IG5za3JlYXNvbikKKwkJ ICBwcmludGYoIjogU0tJUFBFRCAoJXMpXG4iLHNrcmVhc29uW25dKTsKKwkJZWxzZQorCQkgIHBy aW50ZigiOiBTS0lQUEVEXG4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg ICB9IGVsc2UgaWYgKGZkaXNwbGEgPT0gWFlGRF9TKSB7CisgICAgICAgICAgICAgICAgaWYgKGZk aXNwbGEgPT0gWFlGRF9TICYmIGZidWZbMF0pIHsgLyogQ1JUIGRpc3BsYXkgKi8KKyAgICAgICAg ICAgICAgICAgICAgY29ub2xsKCIiKTsgICAgICAgICAvKiBOZXcgbGluZSAqLworICAgICAgICAg ICAgICAgICAgICBpZiAod2hhdCAmIFdfU0VORCkgY29ub2woIldvdWxkIFNlbmQ6ICIpOyAvKiBB Y3Rpb24gKi8KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAod2hhdCAmIFdfUkVDVikgY29u b2woIldvdWxkIFJlY2VpdmU6ICIpOworICAgICAgICAgICAgICAgICAgICBjb25vbChmYnVmKTsK KyAgICAgICAgICAgICAgICAgICAgaWYgKCphYnVmKSBjb25vbCgiID0+ICIpOyBjb25vbChhYnVm KTsgLyogTmFtZXMgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKCphMmJ1ZikgY29ub2woIiA9 PiAiKTsgY29ub2woYTJidWYpOyAvKiBOYW1lcyAqLworICAgICAgICAgICAgICAgICAgICAqZmJ1 ZiA9IE5VTDsgKmFidWYgPSBOVUw7ICphMmJ1ZiA9IE5VTDsKKyAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgICAgY29ub2xsKCIgW3NpbXVsYXRlZF0iKTsKKyAgICAgICAgICAgICAgICBy ZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoKGhwb3MgKz0gMTApID4gNzgp IGNvbm9sbCgiIik7CisgICAgICAgICAgICBjb25vbCgiIFtzaW11bGF0ZWRdIik7IGhwb3MgPSAw OworICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgY2FzZSBTVF9TS0lQOiAgICAgICAg ICAgICAgICAgLyogIFNraXBwZWQgKi8KKyAgICAgICAgICAgIGlmIChmZGlzcGxhID09IFhZRkRf QikgeworCQlpZiAobiA9PSBTS1BfWE5YKQorCQkgIHByaW50ZigiOiBXT1VMRCBCRSBUUkFOU0ZF UlJFRCAoTmV3IGZpbGUpXG4iKTsKKwkJZWxzZSBpZiAobiA9PSBTS1BfWFVQKQorCQkgIHByaW50 ZigiOiBXT1VMRCBCRSBUUkFOU0ZFUlJFRCAoUmVtb3RlIGZpbGUgb2xkZXIpXG4iKTsKKwkJZWxz ZSBpZiAobiA9PSBTS1BfU0lNKQorCQkgIHByaW50ZigiOiBXT1VMRCBCRSBUUkFOU0ZFUlJFRFxu Iik7CisJCWVsc2UgaWYgKG4gPiAwICYmIG4gPCBuc2tyZWFzb24pCisJCSAgcHJpbnRmKCI6IFNL SVBQRUQgKCVzKVxuIixza3JlYXNvbltuXSk7CisJCWVsc2UKKwkJICBwcmludGYoIjogU0tJUFBF RFxuIik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfSBlbHNlIGlmIChm ZGlzcGxhID09IFhZRkRfUykgeworICAgICAgICAgICAgICAgIGlmIChmZGlzcGxhID09IFhZRkRf UyAmJiBmYnVmWzBdKSB7IC8qIENSVCBkaXNwbGF5ICovCisgICAgICAgICAgICAgICAgICAgIGNv bm9sbCgiIik7ICAgICAgICAgLyogTmV3IGxpbmUgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYg KHdoYXQgJiBXX1NFTkQpIGNvbm9sKCJTZW5kaW5nOiAiKTsgLyogQWN0aW9uICovCisgICAgICAg ICAgICAgICAgICAgIGVsc2UgaWYgKHdoYXQgJiBXX1JFQ1YpIGNvbm9sKCJSZWNlaXZpbmc6ICIp OworICAgICAgICAgICAgICAgICAgICBjb25vbChmYnVmKTsKKyAgICAgICAgICAgICAgICAgICAg aWYgKCphYnVmKSBjb25vbCgiID0+ICIpOyBjb25vbChhYnVmKTsgLyogTmFtZXMgKi8KKyAgICAg ICAgICAgICAgICAgICAgaWYgKCphMmJ1ZikgY29ub2woIiA9PiAiKTsgY29ub2woYTJidWYpOyAv KiBOYW1lcyAqLworICAgICAgICAgICAgICAgICAgICAqZmJ1ZiA9IE5VTDsgKmFidWYgPSBOVUw7 ICphMmJ1ZiA9IE5VTDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY29ub2xs KCIgW3NraXBwZWRdIik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor ICAgICAgICAgICAgaWYgKChocG9zICs9IDEwKSA+IDc4KSBjb25vbGwoIiIpOworCSAgICBjb25v bCgiICIpOyBjb25vbChmYnVmKTsKKyAgICAgICAgICAgIGNvbm9sbCgiIFtza2lwcGVkXSIpOyBo cG9zID0gMDsKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgIGNhc2UgU1RfRVJSOiAg ICAgICAgICAgICAgICAgIC8qIEVycm9yICovCisgICAgICAgICAgICBpZiAoZmRpc3BsYSA9PSBY WUZEX0IpIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIjogRVJST1I6ICVzXG4iLHMpOworICAg ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbm9sbCgi Iik7CisgICAgICAgICAgICBjb25vbCgiRXJyb3I6ICIpOyBjb25vbGwocyk7IGhwb3MgPSAwOwor ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgY2FzZSBTVF9NU0c6ICAgICAgICAgICAg ICAgICAgLyogTWVzc2FnZSAqLworI2lmZGVmIE5FV0ZUUAorICAgICAgICAgICAgaWYgKGZkaXNw bGEgPT0gWFlGRF9CKSB7CisgICAgICAgICAgICAgICAgaWYgKGZ0cCAmJiBmdHBfZGViKQorCQkg IHByaW50ZigiOiBNRVNTQUdFOiAlc1xuIixzKTsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg ICAgICAgICAgICB9CisjZW5kaWYgLyogTkVXRlRQICovCisgICAgICAgICAgICBjb25vbGwoIiIp OworICAgICAgICAgICAgY29ub2woIk1lc3NhZ2U6ICIpOworICAgICAgICAgICAgY29ub2xsKHMp OworICAgICAgICAgICAgaHBvcyA9IDA7CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg ICBjYXNlIFNUX1JFRlU6ICAgICAgICAgICAgICAgICAvKiBSZWZ1c2VkICovCisgICAgICAgICAg ICBpZiAoZmRpc3BsYSA9PSBYWUZEX0IpIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIjogUkVG VVNFRFxuIik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfSBlbHNlIGlm IChmZGlzcGxhID09IFhZRkRfUykgeworICAgICAgICAgICAgICAgIGlmIChmZGlzcGxhID09IFhZ RkRfUyAmJiBmYnVmWzBdKSB7IC8qIENSVCBkaXNwbGF5ICovCisgICAgICAgICAgICAgICAgICAg IGNvbm9sbCgiIik7ICAgICAgICAgLyogTmV3IGxpbmUgKi8KKyAgICAgICAgICAgICAgICAgICAg aWYgKHdoYXQgJiBXX1NFTkQpIGNvbm9sKCJTZW5kaW5nOiAiKTsgLyogQWN0aW9uICovCisgICAg ICAgICAgICAgICAgICAgIGVsc2UgaWYgKHdoYXQgJiBXX1JFQ1YpIGNvbm9sKCJSZWNlaXZpbmc6 ICIpOworICAgICAgICAgICAgICAgICAgICBjb25vbChmYnVmKTsKKyAgICAgICAgICAgICAgICAg ICAgaWYgKCphYnVmKSBjb25vbCgiID0+ICIpOyBjb25vbChhYnVmKTsgICAgICAvKiBOYW1lcyAq LworICAgICAgICAgICAgICAgICAgICBpZiAoKmEyYnVmKSBjb25vbCgiID0+ICIpOyBjb25vbChh MmJ1Zik7ICAgIC8qIE5hbWVzICovCisgICAgICAgICAgICAgICAgICAgICpmYnVmID0gTlVMOyAq YWJ1ZiA9IE5VTDsgKmEyYnVmID0gTlVMOworICAgICAgICAgICAgICAgICAgICBjb25vbGwoIiIp OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjb25vbCgiUmVmdXNlZDogIik7 IGNvbm9sbChzKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAg ICAgICAgICBjb25vbGwoIiIpOworICAgICAgICAgICAgY29ub2woIlJlZnVzZWQ6ICIpOyBjb25v bGwocyk7IGhwb3MgPSAwOworICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgY2FzZSBT VF9JTkM6ICAgICAgICAgICAgICAgICAgLyogSW5jb21wbGV0ZSAqLworICAgICAgICAgICAgaWYg KGZkaXNwbGEgPT0gWFlGRF9CKSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCI6IElOQ09NUExF VEVcbiIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIGlmICgoaHBvcyArPSAxMikgPiA3OCkgY29ub2xsKCIiKTsKKyAgICAgICAgICAgIGNvbm9s bCgiIFtpbmNvbXBsZXRlXSIpOyBocG9zID0gMDsKKyAgICAgICAgICAgIHJldHVybjsKKworICAg ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBjb25vbGwoIioqKiBzY3JlZW4oKSBjYWxsZWQg d2l0aCBiYWQgc3RhdHVzICoqKiIpOworICAgICAgICAgICAgaHBvcyA9IDA7CisgICAgICAgICAg ICByZXR1cm47CisgICAgICAgIH0KKworI2lmZGVmIE1BQworICAgICAgY2FzZSBTQ1JfUE46ICAg ICAgICAgICAgICAgICAgICAgIC8qIFBhY2tldCBudW1iZXIgKi8KKyAgICAgICAgaWYgKGZkaXNw bGEgPT0gWFlGRF9CKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwlja21ha21z ZyhidWYsODAscywiOiAiLGNrbHRvYShuKSxOVUxMKTsKKyAgICAgICAgY29ub2woYnVmKTsgaHBv cyArPSAoaW50KXN0cmxlbihidWYpOyByZXR1cm47CisjZW5kaWYgLyogTUFDICovCisKKyAgICAg IGNhc2UgU0NSX1BUOiAgICAgICAgICAgICAgICAgICAgICAvKiBQYWNrZXQgdHlwZSBvciBwc2V1 ZG90eXBlICovCisgICAgICAgIGlmIChmZGlzcGxhID09IFhZRkRfQikKKyAgICAgICAgICByZXR1 cm47CisgICAgICAgIGlmIChjID09ICdZJykgcmV0dXJuOyAgICAgICAgICAgLyogRG9uJ3QgYm90 aGVyIHdpdGggQUNLcyAqLworICAgICAgICBpZiAoYyA9PSAnRCcpIHsgICAgICAgICAgICAgICAg IC8qIEluIGRhdGEgdHJhbnNmZXIgcGhhc2UsICovCisgICAgICAgICAgICBzaG93cGt0KE5VTCk7 ICAgICAgICAgICAgICAgLyogc2hvdyBwcm9ncmVzcy4gKi8KKyAgICAgICAgICAgIHJldHVybjsK KyAgICAgICAgfQorI2lmbmRlZiBBTUlHQQorICAgICAgICBpZiAoaHBvcysrID4gNzcpIHsgICAg ICAgICAgICAgIC8qIElmIG5lYXIgcmlnaHQgbWFyZ2luLCAqLworICAgICAgICAgICAgY29ub2xs KCIiKTsgICAgICAgICAgICAgICAgIC8qIFN0YXJ0IG5ldyBsaW5lICovCisgICAgICAgICAgICBo cG9zID0gMDsgICAgICAgICAgICAgICAgICAgLyogYW5kIHJlc2V0IGNvdW50ZXIuICovCisgICAg ICAgIH0KKyNlbmRpZiAvKiBBTUlHQSAqLworICAgICAgICBpZiAoYyA9PSAnWicgJiYgZmRpc3Bs YSA9PSBYWUZEX1MpCisgICAgICAgICAgcmV0dXJuOworICAgICAgICBlbHNlCisgICAgICAgICAg Y29ub2MoYyk7ICAgICAgICAgICAgICAgICAgICAgLyogRGlzcGxheSB0aGUgcGFja2V0IHR5cGUu ICovCisjaWZkZWYgQU1JR0EKKyAgICAgICAgaWYgKGMgPT0gJ0cnKSBjb25vbGwoIiIpOyAgICAg ICAvKiBOZXcgbGluZSBhZnRlciBHIHBhY2tldHMgKi8KKyNlbmRpZiAvKiBBTUlHQSAqLworICAg ICAgICByZXR1cm47CisKKyAgICAgIGNhc2UgU0NSX1RDOiAgICAgICAgICAgICAgICAgICAgICAv KiBUcmFuc2FjdGlvbiBjb21wbGV0ZSAqLworICAgICAgICBpZiAoeGZyYmVsKSBibGVlcChCUF9O T1RFKTsKKyAgICAgICAgaWYgKGZkaXNwbGEgPT0gWFlGRF9CKSB7ICAgICAgICAvKiBCcmllZiBk aXNwbGF5Li4uICovCisgICAgICAgICAgICBpZiAoZmlsY250ID4gMSkgeworICAgICAgICAgICAg ICAgIGxvbmcgZng7CisgICAgICAgICAgICAgICAgZnggPSBmaWxjbnQgLSBmaWxyZWo7CisgICAg ICAgICAgICAgICAgcHJpbnRmKCIgU1VNTUFSWTogJWxkIGZpbGUlcyIsIGZ4LCAoKGZ4ID09IDEp ID8gIiIgOiAicyIpKTsKKyAgICAgICAgICAgICAgICBwcmludGYoIiwgJXMgYnl0ZSVzIiwgY2tm c3RvYSh0ZmMpLCAoKHRmYyA9PSAxKSA/ICIiIDogInMiKSk7CisjaWZkZWYgR0ZUSU1FUgorICAg ICAgICAgICAgICAgIHByaW50ZigiLCAlMC4zZiBzZWMsICVsZCBjcHMiLCBmcHRzZWNzLCB0ZmNw cyk7CisjZWxzZQorICAgICAgICAgICAgICAgIHByaW50ZigiLCAlbGQgc2VjLCAlbGQgY3BzIiwg dHNlY3MsIHRmY3BzKTsKKyNlbmRpZiAvKiBHRlRJTUVSICovCisgICAgICAgICAgICAgICAgcHJp bnRmKCIuXG4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg IGNvbm9sbCgiIik7CisgICAgICAgIH0KKyNpZmRlZiBVTklYCisgICAgICAgIGZmbHVzaChzdGRv dXQpOworI2VuZGlmIC8qIFVOSVggKi8KKyAgICAgICAgcmV0dXJuOworCisgICAgICBjYXNlIFND Ul9FTTogICAgICAgICAgICAgICAgICAgICAgLyogRXJyb3IgbWVzc2FnZSAqLworICAgICAgICBp ZiAoZmRpc3BsYSA9PSBYWUZEX0IpIHsKKyAgICAgICAgICAgIHByaW50ZigiIEVSUk9SOiAlc1xu IixzKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBjb25vbGwoIiIp OyBjb25vYygnPycpOyBjb25vbGwocyk7IGhwb3MgPSAwOyByZXR1cm47CisKKyAgICAgIGNhc2Ug U0NSX1dNOiAgICAgICAgICAgICAgICAgICAgICAvKiBXYXJuaW5nIG1lc3NhZ2UgKi8KKyAgICAg ICAgaWYgKGZkaXNwbGEgPT0gWFlGRF9CKSB7CisgICAgICAgICAgICBwcmludGYoIiBXQVJOSU5H OiAlc1xuIixzKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBjb25v bGwoIiIpOyBjb25vbGwocyk7IGhwb3MgPSAwOyByZXR1cm47CisKKyAgICAgIGNhc2UgU0NSX01T OiAgICAgICAgICAgICAgICAgICAgICAvKiBNZXNzYWdlIGZyb20gb3RoZXIgS2VybWl0ICovCisg ICAgICAgIGlmIChmZGlzcGxhID09IFhZRkRfQikgeworICAgICAgICAgICAgcHJpbnRmKCIgTUVT U0FHRTogJXNcbiIscyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAg Y29ub2xsKCIiKTsgY29ub2xsKHMpOyBocG9zID0gMDsgcmV0dXJuOworCisgICAgICBjYXNlIFND Ul9UVTogICAgICAgICAgICAgICAgICAgICAgLyogVW5kZWxpbWl0ZWQgdGV4dCAqLworICAgICAg ICBpZiAoZmRpc3BsYSA9PSBYWUZEX0IpCisgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAo KGhwb3MgKz0gbGVuKSA+IDc3KSB7IGNvbm9sbCgiIik7IGhwb3MgPSBsZW47IH0KKyAgICAgICAg Y29ub2wocyk7IHJldHVybjsKKworICAgICAgY2FzZSBTQ1JfVE46ICAgICAgICAgICAgICAgICAg ICAgIC8qIFRleHQgZGVsaW1pdGVkIGF0IGJlZ2lubmluZyAqLworICAgICAgICBpZiAoZmRpc3Bs YSA9PSBYWUZEX0IpCisgICAgICAgICAgcmV0dXJuOworICAgICAgICBjb25vbGwoIiIpOyBjb25v bChzKTsgaHBvcyA9IGxlbjsgcmV0dXJuOworCisgICAgICBjYXNlIFNDUl9UWjogICAgICAgICAg ICAgICAgICAgICAgLyogVGV4dCBkZWxpbWl0ZWQgYXQgZW5kICovCisgICAgICAgIGlmIChmZGlz cGxhID09IFhZRkRfQikKKyAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmICgoaHBvcyArPSBs ZW4pID4gNzcpIHsgY29ub2xsKCIiKTsgaHBvcyA9IGxlbjsgfQorICAgICAgICBjb25vbGwocyk7 IHJldHVybjsKKworICAgICAgY2FzZSBTQ1JfUUU6ICAgICAgICAgICAgICAgICAgICAgIC8qIFF1 YW50aXR5IGVxdWFscyAqLworICAgICAgICBpZiAoZmRpc3BsYSA9PSBYWUZEX0IpCisgICAgICAg ICAgcmV0dXJuOworCWNrbWFrbXNnKGJ1Ziw4MCxzLCI6ICIsY2tsdG9hKG4pLE5VTEwpOworICAg ICAgICBjb25vbGwoYnVmKTsgaHBvcyA9IDA7IHJldHVybjsKKworICAgICAgY2FzZSBTQ1JfQ1c6 ICAgICAgICAgICAgICAgICAgICAgIC8qIENsb3NlIGZ1bGxzY3JlZW4gd2luZG93ICovCisgICAg ICAgIHJldHVybjsgICAgICAgICAgICAgICAgICAgICAgICAgLyogTm8gd2luZG93IHRvIGNsb3Nl ICovCisKKyAgICAgIGNhc2UgU0NSX0NEOgorICAgICAgICByZXR1cm47CisKKyAgICAgIGRlZmF1 bHQ6CisgICAgICAgIGNvbm9sbCgiKioqIHNjcmVlbigpIGNhbGxlZCB3aXRoIGJhZCBvYmplY3Qg KioqIik7CisgICAgICAgIGhwb3MgPSAwOworICAgICAgICByZXR1cm47CisgICAgfQorfQorI2Vu ZGlmIC8qIE5PRElTUExBWSAqLworCisvKiAgRSBSIE0gUyBHICAtLSAgTm9uZmF0YWwgZXJyb3Ig bWVzc2FnZSAgKi8KKworLyogU2hvdWxkIGJlIHVzZWQgb25seSBmb3IgcHJpbnRpbmcgdGhlIG1l c3NhZ2UgdGV4dCBmcm9tIGFuIEVycm9yIHBhY2tldC4gKi8KKworVk9JRAorZXJtc2cobXNnKSBj aGFyICptc2c7IHsgICAgICAgICAgICAgICAgIC8qIFByaW50IGVycm9yIG1lc3NhZ2UgKi8KKyAg ICBkZWJ1ZyhGMTEwLCJlcm1zZyIsbXNnLDApOworICAgIGlmIChsb2NhbCkKKyAgICAgIHh4c2Ny ZWVuKFNDUl9FTSwwLDBMLG1zZyk7CisgICAgdGxvZyhGMTEwLCJQcm90b2NvbCBFcnJvcjoiLG1z ZywwTCk7Cit9CisjZW5kaWYgLyogTk9YRkVSICovCisKK1ZPSUQKK3NldHNlc2xvZyh4KSBpbnQg eDsgeworICAgIHNlc2xvZyA9IHg7CisjaWZkZWYgS1VJCisgICAgS3VpU2V0UHJvcGVydHkoS1VJ X1RFUk1fQ0FQVFVSRSx4LDApOworI2VuZGlmIC8qIEtVSSAqLworfQorCitWT0lECitkb2NsZWFu KGZjKSBpbnQgZmM7IHsgICAgICAgICAgICAgICAgICAgLyogR2VuZXJhbCBjbGVhbnVwICovCisj aWZkZWYgT1MyT1JVTklYCisgICAgZXh0ZXJuIGludCB0dHlmZDsKKyNlbmRpZiAvKiBPUzJPUlVO SVggKi8KKyAgICBleHRlcm4gaW50ICBrZWVwOworICAgIGV4dGVybiBpbnQgZXhpdGhhbmd1cDsK KyNpZm5kZWYgTk9YRkVSCisgICAgZXh0ZXJuIGNoYXIgZmlsbmFtW107CisjZW5kaWYgLyogTk9Y RkVSICovCisjaWZuZGVmIE5PSUNQCisgICAgaW50IHg7CisKKyAgICBpZiAoZmMgPiAwKQorICAg ICAgZG9zdG9wKCk7ICAgICAgICAgICAgICAgICAvKiBTdG9wIGFsbCBjb21tYW5kIGZpbGVzIGFu ZCBlbmQgbWFjcm9zICovCisjZW5kaWYgLyogTk9JQ1AgKi8KKworI2lmbmRlZiBOT1hGRVIKKyAg ICBpZiAocGt0bG9nKSB7CisgICAgICAgICpwa3RmaWwgPSAnXDAnOworICAgICAgICBwa3Rsb2cg PSAwOworICAgICAgICB6Y2xvc2UoWlBGSUxFKTsKKyAgICB9CisjZW5kaWYgLyogTk9YRkVSICov CisgICAgaWYgKHNlc2xvZykgeworICAgICAgICAqc2VzZmlsID0gJ1wwJzsKKyAgICAgICAgc2V0 c2VzbG9nKDApOworICAgICAgICB6Y2xvc2UoWlNGSUxFKTsKKyAgICB9CisjaWZkZWYgVExPRwor ICAgIGlmICh0cmFsb2cpIHsKKyAgICAgICAgdGxvZyhGMTAwLCJUcmFuc2FjdGlvbiBMb2cgQ2xv c2VkIiwiIiwwTCk7CisgICAgICAgICp0cmFmaWwgPSAnXDAnOworICAgICAgICB0cmFsb2cgPSAw OworICAgICAgICB6Y2xvc2UoWlRGSUxFKTsKKyAgICB9CisjZW5kaWYgLyogVExPRyAqLworCisg ICAgZGVidWcoRjEwMCwiZG9jbGVhbiBjYWxsaW5nIGRvbG9nZW5kIiwiIiwwKTsKKyAgICBkb2xv Z2VuZCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFbmQgY3VycmVudCBsb2cgcmVjb3Jk IGlmIGFueSAqLworI2lmZGVmIENPTU1FTlQKKyAgICBpZiAoZGlhbG9nKSB7ICAgICAgICAgICAg ICAgICAgICAgICAvKiBJZiBjb25uZWN0aW9uIGxvZyBvcGVuICovCisJZGlhbG9nID0gMDsKKyAg ICAgICAgKmRpYWZpbCA9ICdcMCc7ICAgICAgICAgICAgICAgICAvKiBjbG9zZSBpdC4gKi8KKyAg ICAgICAgemNsb3NlKFpESUZJTCk7CisgICAgfQorI2VuZGlmIC8qIENPTU1FTlQgKi8KKworI2lm bmRlZiBOT0lDUAorI2lmbmRlZiBOT1NQTAorICAgIHpjbG9zZShaUkZJTEUpOyAgICAgICAgICAg ICAgICAgICAgIC8qIFJFQUQgYW5kIFdSSVRFIGZpbGVzLCBpZiBhbnkuICovCisgICAgemNsb3Nl KFpXRklMRSk7CisjaWZuZGVmIE5PWEZFUgorICAgIHpjbG9zZShaSUZJTEUpOyAgICAgICAgICAg ICAgICAgICAgIC8qIEFuZCBvdGhlciBmaWxlcyB0b28gKi8KKyAgICB4ID0gY2hrZm4oWk9GSUxF KTsJCQkvKiBEb3dubG9hZCBpbiBwcm9ncmVzcz8gKi8KKyAgICBkZWJ1ZyhGMTExLCJkb2NsZWFu IGNoa2ZuIFpPRklMRSIsZmlsbmFtLHgpOworICAgIGRlYnVnKEYxMTEsImRvY2xlYW4ga2VlcCIs IiIsa2VlcCk7CisgICAgemNsb3NlKFpPRklMRSk7CQkJLyogQ2xvc2Ugb3V0cHV0IGZpbGUgKi8K KyAgICBpZiAoeCA+IDAgJiYgIWtlZXApIHsJCS8qIElmIGl0IHdhcyBiZWluZyBkb3dubG9hZGVk ICovCisJaWYgKGZpbG5hbVswXSkKKwkgIHggPSB6ZGVsZXQoZmlsbmFtKTsJCS8qIERlbGV0ZSBp ZiBJTkNPTVBMRVRFID0gRElTQ0FSRCAqLworCWRlYnVnKEYxMTEsImRvY2xlYW4gZG93bmxvYWQg ZmlsZW5hbWUiLGZpbG5hbSx4KTsKKyAgICB9CisjZW5kaWYgLyogTk9YRkVSICovCisgICAgemNs b3NlKFpTWVNGTik7CisgICAgemNsb3NlKFpNRklMRSk7CisKKyAgICBpZiAoZmMgPCAxKSB7ICAg ICAgICAgICAgICAgICAgICAgICAvKiBSRVNFVGluZywgbm90IEVYSVRpbmcgKi8KKyNpZmRlZiBE RUJVRworICAgICAgICBpZiAoZGVibG9nKSB7ICAgICAgICAgICAgICAgICAgIC8qIENsb3NlIHRo ZSBkZWJ1ZyBsb2cuICovCisgICAgICAgICAgICAqZGViZmlsID0gJ1wwJzsKKyAgICAgICAgICAg IGRlYmxvZyA9IDA7CisgICAgICAgICAgICB6Y2xvc2UoWkRGSUxFKTsKKyAgICAgICAgfQorI2Vu ZGlmIC8qIERFQlVHICovCisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYgLyogTk9TUEwg Ki8KKyNlbmRpZiAvKiBOT0lDUCAqLworCisjaWZuZGVmIE5PTE9DQUwKKyAgICBkZWJ1ZyhGMTAx LCJkb2NsZWFuIGV4aXRoYW5ndXAiLCIiLGV4aXRoYW5ndXApOworICAgIGlmIChsb2NhbCAmJiBl eGl0aGFuZ3VwKSB7CQkvKiBDbG9zZSBjb21tdW5pY2F0aW9uIGNvbm5lY3Rpb24gKi8KKyAgICAg ICAgZXh0ZXJuIGludCBoYXNsb2NrOworCWludCB4OworCQorCXggPSB0dGNoaygpOworCWRlYnVn KEYxMDEsImRvY2xlYW4gdHRjaGsoKSIsIiIseCk7CisjaWZkZWYgT1MyT1JVTklYCisJZGVidWco RjEwMSwiZG9jbGVhbiB0dHlmZCIsIiIsdHR5ZmQpOworI2VuZGlmIC8qIE9TMk9SVU5JWCAqLwor ICAgICAgICBpZiAoeCA+PSAwCisjaWZkZWYgT1MyCisgICAgICAgICAgICB8fCB0dHlmZCAhPSAt MQorI2Vsc2UKKyNpZmRlZiBVTklYCisgICAgICAgICAgICB8fCBoYXNsb2NrICAgICAgICAgICAg ICAgICAgLyogTWFrZSBzdXJlIHdlIGdldCBsb2NrZmlsZSEgKi8KKyAgICAgICAgICAgIHx8ICgh bmV0d29yayAmJiB0dHlmZCA+IC0xKQorI2VuZGlmIC8qIFVOSVggKi8KKyNlbmRpZiAvKiBPUzIg Ki8KKyAgICAgICAgICAgICkgeworICAgICAgICAgICAgZXh0ZXJuIGludCB3YXNjbG9zZWQsIHdo eWNsb3NlZDsKKwkgICAgZGVidWcoRjEwMCwiZG9jbGVhbiBoYW5naW5nIHVwIGFuZCBjbG9zaW5n IiwiIiwwKTsKKyAgICAgICAgICAgIGlmIChtc2dmbGcpIHsKKyNpZmRlZiBVTklYCisgICAgICAg ICAgICAgICAgZmZsdXNoKHN0ZG91dCk7CisjZW5kaWYgLyogVU5JWCAqLworICAgICAgICAgICAg ICAgIHByaW50ZigiQ2xvc2luZyAlcy4uLiIsdHRuYW1lKTsKKyAgICAgICAgICAgIH0KKyNpZm5k ZWYgTk9ESUFMCisgICAgICAgICAgICBtZG1odXAoKTsgICAgICAgICAgICAgICAgICAgLyogSGFu Z3VwIHRoZSBtb2RlbT8/PyAqLworI2VuZGlmIC8qIE5PRElBTCAqLworICAgICAgICAgICAgdHRj bG9zKDApOyAgICAgICAgICAgICAgICAgIC8qIENsb3NlIGV4dGVybmFsIGxpbmUsIGlmIGFueSAq LworICAgICAgICAgICAgaWYgKG1zZ2ZsZykgeworICAgICAgICAgICAgICAgIHByaW50ZigiT0tc biIpOworI2lmZGVmIFVOSVgKKyAgICAgICAgICAgICAgICBmZmx1c2goc3Rkb3V0KTsKKyNlbmRp ZiAvKiBVTklYICovCisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAod2FzY2xvc2VkKSB7 CisgICAgICAgICAgICAgICAgd2h5Y2xvc2VkID0gV0NfQ0xPUzsKKyNpZm5kZWYgTk9TUEwKKyAg ICAgICAgICAgICAgICBpZiAobm1hYykgeyAgICAgICAgICAgICAvKiBBbnkgbWFjcm9zIGRlZmlu ZWQ/ICovCisgICAgICAgICAgICAgICAgICAgIGludCBrOyAgICAgICAgICAgICAgLyogWWVzICov CisgICAgICAgICAgICAgICAgICAgIGsgPSBtbG9vayhtYWN0YWIsIm9uX2Nsb3NlIixubWFjKTsg IC8qIExvb2sgdGhpcyB1cCAqLworICAgICAgICAgICAgICAgICAgICBpZiAoayA+PSAwKSB7ICAg ICAgICAgICAgICAgICAgICAgICAvKiBJZiBmb3VuZCwgKi8KKyAgICAgICAgICAgICAgICAgICAg ICAgIHdhc2Nsb3NlZCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAvKiBwcmludGYoIk9O X0NMT1NFIERPQ0xFQU5cbiIpOyAqLworICAgICAgICAgICAgICAgICAgICAgICAgKihtYWN0YWJb a10ua3dkKSA9IE5VTDsgICAgICAgICAvKiBTZWUgY29tbWVudCBiZWxvdyAqLworICAgICAgICAg ICAgICAgICAgICAgICAgaWYgKGRvZG8oayxja2l0b2Eod2h5Y2xvc2VkKSwwKSA+IC0xKSAvKiBz ZXQgaXQgdXAsICovCisgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlcigxKTsgICAgICAg ICAgICAgICAgICAgIC8qIGFuZCBleGVjdXRlIGl0ICovCisgICAgICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgICB9CisjZW5kaWYgLyogTk9TUEwgKi8KKyAgICAgICAgICAgICAgICB3 YXNjbG9zZWQgPSAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGNrc3RybmNw eSh0dG5hbWUsZGZ0dHksVFROQU1MRU4pOyAvKiBSZXN0b3JlIGRlZmF1bHQgdHR5ICovCisgICAg ICAgIGxvY2FsID0gZGZsb2M7ICAgICAgICAgICAgICAgICAgLyogQW5kIGRlZmF1bHQgcmVtb3Rl L2xvY2FsIHN0YXR1cyAqLworICAgIH0KKyNpZmRlZiBERUJVRworICAgIGVsc2UgaWYgKGxvY2Fs KSBkZWJ1ZyhGMTAwLCJkb2NsZWFuIGhhbmd1cC9jbG9zZSBza2lwcGVkIiwiIiwwKTsKKyNlbmRp ZiAvKiBERUJVRyAqLworI2VuZGlmIC8qIE5PTE9DQUwgKi8KKworI2lmZGVmIE5FV0ZUUAorICAg IGZ0cGJ5ZSgpOwkJCQkvKiBJZiBGVFAgY29ubmVjdGlvbiBvcGVuLCBjbG9zZSBpdCAqLworI2Vu ZGlmIC8qIE5FV0ZUUCAqLworCisjaWZkZWYgSUtTRAorICAgIGlmIChpbnNlcnZlcikKKyAgICAg IHR0Y2xvcygwKTsJCQkvKiBJZiBJS1NELCBjbG9zZSBzb2NrZXQgKi8KKyNlbmRpZiAvKiBJS1NE ICovCisKKyNpZm5kZWYgTk9TUEwKKy8qCisgIElmIGEgbWFjcm8gbmFtZWQgIm9uX2V4aXQiIGlz IGRlZmluZWQsIGV4ZWN1dGUgaXQuICBBbHNvIHJlbW92ZSBpdCBmcm9tIHRoZQorICBtYWNybyB0 YWJsZSwgaW4gY2FzZSBpdHMgZGVmaW5pdGlvbiBpbmNsdWRlcyBhbiBFWElUIG9yIFFVSVQgY29t bWFuZCwgd2hpY2gKKyAgd291bGQgY2F1c2UgbXVjaCByZWN1cnNpb24gYW5kIHdvdWxkIHByZXZl bnQgdGhlIHByb2dyYW0gZnJvbSBldmVyIGFjdHVhbGx5CisgIEVYSVRpbmcuCisqLworICAgIGlm IChubWFjKSB7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFueSBtYWNyb3MgZGVmaW5lZD8g Ki8KKyAgICAgICAgaW50IGs7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBZZXMgKi8KKyAg ICAgICAgY2hhciAqIGNtZCA9ICJvbl9leGl0IjsgICAgICAgICAvKiBNU1ZDIDIueCBjb21waWxl ciBlcnJvciAqLworICAgICAgICBrID0gbWxvb2sobWFjdGFiLGNtZCxubWFjKTsgICAgIC8qIExv b2sgdXAgIm9uX2V4aXQiICovCisgICAgICAgIGlmIChrID49IDApIHsgICAgICAgICAgICAgICAg ICAgLyogSWYgZm91bmQsICovCisjaWZkZWYgQ09NTUVOVAorCSAgICAvKiBUaGlzIG1ha2VzIGEg bWVzcyBpZiBPTl9FWElUIGl0c2VsZiBleGVjdXRlcyBtYWNyb3MgKi8KKyAgICAgICAgICAgICoo bWFjdGFiW2tdLmt3ZCkgPSBOVUw7ICAgICAvKiBwb2tlIGl0cyBuYW1lIGZyb20gdGhlIHRhYmxl LCAqLworI2Vsc2UKKwkgICAgLyogUmVwbGFjZSB0aGUga2V5d29yZCB3aXRoIHNvbWV0aGluZyB0 aGF0IGRvZXNuJ3Qgd3JlY2sgdGhlICovCisJICAgIC8qIG9yZGVyIG9mIHRoZSBrZXl3b3JkIHRh YmxlICovCisJICAgIGNrc3RybmNweShtYWN0YWJba10ua3dkLCJvbl9leHh4Iiw4KTsKKyNlbmRp ZiAvKiBDT01NRU5UICovCisgICAgICAgICAgICBpZiAoZG9kbyhrLCIiLDApID4gLTEpICAgICAg Lyogc2V0IGl0IHVwLCAqLworICAgICAgICAgICAgICBwYXJzZXIoMSk7ICAgICAgICAgICAgICAg IC8qIGFuZCBleGVjdXRlIGl0ICovCisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgLyogTk9TUEwg Ki8KKy8qCisgIFB1dCBjb25zb2xlIHRlcm1pbmFsIGJhY2sgdG8gbm9ybWFsLiAgVGhpcyBpcyBk b25lIGhlcmUgYmVjYXVzZSB0aGUKKyAgT05fRVhJVCBtYWNybyBjYWxscyB0aGUgcGFyc2VyLCB3 aGljaCBtZWRkbGVzIHdpdGggY29uc29sZSB0ZXJtaW5hbCBtb2Rlcy4KKyovCisgICAgY29ucmVz KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVzdG9yZSBjb25zb2xlIHRlcm1pbmFs LiAqLworCisjaWZkZWYgQ09NTUVOVAorLyogU2hvdWxkIGJlIG5vIG5lZWQgZm9yIHRoaXMsIGFu ZCBtYXliZSBpdCdzIHNjcmV3aW5nIHRoaW5ncyB1cD8gKi8KKyAgICBjb25ub2koKTsgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBUdXJuIG9mZiBjb25zb2xlIGludGVycnVwdCB0cmFwcyAq LworI2VuZGlmIC8qIENPTU1FTlQgKi8KKworICAgIC8qIERlbGV0ZSB0aGUgU3RhcnR1cCBGaWxl IGlmIHdlIGFyZSBzdXBwb3NlZCB0by4gKi8KKyNpZm5kZWYgTk9JQ1AKKyAgICB7CisgICAgICAg IGV4dGVybiBpbnQgRGVsZXRlU3RhcnR1cEZpbGU7CisgICAgICAgIGRlYnVnKEYxMTEsImRvY2xl YW4gRGVsZXRlU3RhcnR1cEZpbGUiLGNtZGZpbCxEZWxldGVTdGFydHVwRmlsZSk7CisgICAgICAg IGlmIChEZWxldGVTdGFydHVwRmlsZSkgeworICAgICAgICAgICAgaW50IHJjID0gemRlbGV0KGNt ZGZpbCk7CisgICAgICAgICAgICBkZWJ1ZyhGMTExLCJkb2NsZWFuIHpkZWxldCIsY21kZmlsLHJj KTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBOT0lDUCAqLworICAgIHN5c2NsZWFudXAo KTsgICAgICAgICAgICAgICAgICAgICAgIC8qIFN5c3RlbS1kZXBlbmRlbnQgY2xlYW51cCwgbGFz dCAqLworfQorCisvKiAgRCBPIEUgWCBJIFQgIC0tICBFeGl0IGZyb20gdGhlIHByb2dyYW0uICAq LworCisvKgorICBGaXJzdCBhcmcgaXMgZ2VuZXJhbCwgc3lzdGVtLWluZGVwZW5kZW50IHN5bWJv bDogR09PRF9FWElUIG9yIEJBRF9FWElULgorICBJZiBzZWNvbmQgYXJnIGlzIC0xLCB0YWtlIDFz dCBhcmcgbGl0ZXJhbGx5LgorICBJZiBzZWNvbmQgYXJnIGlzIG5vdCAtMSwgd29yayBpdCBpbnRv IHRoZSBleGl0IGNvZGUuCisqLworVk9JRAorZG9leGl0KGV4aXRzdGF0LGNvZGUpIGludCBleGl0 c3RhdCwgY29kZTsgeworICAgIGV4dGVybiBpbnQgeF9sb2dnZWQsIHF1aXR0aW5nOworI2lmZGVm IE9TMgorICAgIGV4dGVybiBpbnQgZGlzcGxheV9kZW1vOworICAgIGV4dGVybiBpbnQgU3lzSW5p dGVkOworI2VuZGlmIC8qIE9TMiAqLworI2lmZGVmIENLX0tFUkJFUk9TCisjaWZkZWYgS1JCNAor ICAgIGV4dGVybiBpbnQga3JiNF9hdXRvZGVsOworI2VuZGlmIC8qIEtSQjQgKi8KKyNpZmRlZiBL UkI1CisgICAgZXh0ZXJuIGludCBrcmI1X2F1dG9kZWw7CisjZW5kaWYgLyogS1JCNSAqLworI2Vu ZGlmIC8qIENLX0tFUkJFUk9TICovCisKKyNpZmRlZiBWTVMKKyAgICBjaGFyIGVudnN0cls2NF07 CisgICAgc3RhdGljICRERVNDUklQVE9SKHN5bW5hbSwiQ0tFUk1JVF9TVEFUVVMiKTsKKyAgICBz dGF0aWMgc3RydWN0IGRzYyRkZXNjcmlwdG9yX3Mgc3ltdmFsOworI2VuZGlmIC8qIFZNUyAqLwor ICAgIGludCBpOworCisjaWZkZWYgREVCVUcKKyNpZmRlZiBVU0VfTFVDQUNIRQorICAgIGV4dGVy biBsb25nIGx1Y2FsbHMsIGx1aGl0cywgeHhoaXRzLCBsdWxvb3A7CisgICAgZXh0ZXJuIGludCBs dXNpemU7CisjZW5kaWYgLyogVVNFX0xVQ0FDSEUgKi8KKyNpZm5kZWYgTk9TUEwKKyAgICBleHRl cm4gaW50IGNtZHN0YXRzW107CisjZW5kaWYgLyogTk9TUEwgKi8KKworICAgIHF1aXR0aW5nKys7 CisKKyNpZmRlZiBPUzIKKyAgICBpZiAoICFTeXNJbml0ZWQgKSB7CisgICAgICAgIHN0YXRpYyBp bnQgaW5pdGluZyA9IDA7CisgICAgICAgIGlmICggaW5pdGluZyApCisJICBleGl0KDI1Myk7Cisg ICAgICAgIGluaXRpbmcgPSAxOworICAgICAgICBzeXNpbml0KCk7CisgICAgfQorI2VuZGlmIC8q IE9TMiAqLworCisgICAgaWYgKGRlYmxvZykgeworI2lmZGVmIFVTRV9MVUNBQ0hFCisJZGVidWco RjEwMSwibG9va3VwIGNhY2hlIHNpemUiLCIiLGx1c2l6ZSk7CisJZGVidWcoRjEwMSwibG9va3Vw IGNhbGxzIC4uLi4iLCIiLGx1Y2FsbHMpOworCWRlYnVnKEYxMDEsImxvb2t1cCBjYWNoZSBoaXRz IiwiIixsdWhpdHMpOworCWRlYnVnKEYxMDEsImxvb2t1cCBzdGFydCBoaXRzIiwiIix4eGhpdHMp OworCWRlYnVnKEYxMDEsImxvb2t1cCBsb29wIGl0ZXJhdGlvbnMiLCIiLGx1bG9vcCk7CisjZW5k aWYgLyogVVNFX0xVQ0FDSEUgKi8KKyNpZm5kZWYgTk9TUEwKKwlmb3IgKGkgPSAwOyBpIDwgMjU2 OyBpKyspIHsKKwkgICAgaWYgKGNtZHN0YXRzW2ldKQorCSAgICAgIGRlYnVnKEYxMTEsIkNNU1RB VFMiLGNraXRvYShpKSxjbWRzdGF0c1tpXSk7CisJfQorI2VuZGlmIC8qIE5PU1BMICovCisJZGVi dWcoRjEwMSwiZG9leGl0IGV4aXRzdGF0IiwiIixleGl0c3RhdCk7CisJZGVidWcoRjEwMSwiZG9l eGl0IGNvZGUiLCIiLGNvZGUpOworCWRlYnVnKEYxMDEsImRvZXhpdCB4aXRzdGEiLCIiLHhpdHN0 YSk7CisgICAgfQorI2VuZGlmIC8qIERFQlVHICovCisKKyNpZmRlZiBDS19LRVJCRVJPUworICAg IC8qIElmIHdlIGFyZSBhdXRvbWF0aWNhbGx5IGRlc3Ryb3lpbmcgS2VyYmVyb3MgY3JlZGVudGlh bHMgb24gRXhpdCAqLworICAgIC8qIGRvIGl0IG5vdy4gKi8KKyNpZmRlZiBLUkI0CisgICAgaWYg KGtyYjRfYXV0b2RlbCA9PSBLUkJfREVMX0VYKSB7CisgICAgICAgIGV4dGVybiBzdHJ1Y3Qga3Ji X29wX2RhdGEga3JiX29wOworICAgICAgICBrcmJfb3AudmVyc2lvbiA9IDQ7CisgICAgICAgIGty Yl9vcC5jYWNoZSA9IE5VTEw7CisgICAgICAgIGNrX2tyYjRfZGVzdHJveSgma3JiX29wKTsKKyAg ICB9CisjZW5kaWYgLyogS1JCNCAqLworI2lmZGVmIEtSQjUKKyAgICBpZiAoa3JiNV9hdXRvZGVs ID09IEtSQl9ERUxfRVgpIHsKKyAgICAgICAgZXh0ZXJuIHN0cnVjdCBrcmJfb3BfZGF0YSBrcmJf b3A7CisgICAgICAgIGV4dGVybiBjaGFyICoga3JiNV9kX2NjOworICAgICAgICBrcmJfb3AudmVy c2lvbiA9IDU7CisgICAgICAgIGtyYl9vcC5jYWNoZSA9IGtyYjVfZF9jYzsKKyAgICAgICAgY2tf a3JiNV9kZXN0cm95KCZrcmJfb3ApOworICAgIH0KKyNlbmRpZiAvKiBLUkI1ICovCisjZW5kaWYg LyogQ0tfS0VSQkVST1MgKi8KKworI2lmbmRlZiBOT0xPQ0FMCisjaWZkZWYgT1MyCisgICAgaWYg KFN5c0luaXRlZCkKKyAgICB7CisjaWZkZWYgRENNREJVRgorICAgICAgICBleHRlcm4gc3RydWN0 IGNtZHB0ciAqY21kc3RrOworI2Vsc2UKKyAgICAgICAgZXh0ZXJuIHN0cnVjdCBjbWRwdHIgY21k c3RrW107CisjZW5kaWYgLyogRENNREJVRiAqLworICAgICAgICBleHRlcm4gaW50IHR0X3N0YXR1 c1tdOworICAgICAgICBleHRlcm4gaW50IHZtb2RlOworCisgICAgICAgIC8qIElmIHRoZXJlIGlz IGEgZGVtbyBzY3JlZW4gdG8gYmUgZGlzcGxheWVkLCBkaXNwbGF5IGl0ICovCisgICAgICAgIGlm IChkaXNwbGF5X2RlbW8pIHsKKyAgICAgICAgICAgIGRlbW9zY3JuKFZDTUQpOworICAgICAgICAg ICAgZGlzcGxheV9kZW1vID0gMDsKKyAgICAgICAgfQorI2lmbmRlZiBLVUkKKyAgICAgICAgLyog VGhpcyBpcyBnb2luZyB0byBiZSBoaWRlb3VzLiAgSWYgd2UgaGF2ZSBhIHN0YXR1cyBsaW5lICov CisgICAgICAgIC8qIGluIHRoZSBjb21tYW5kIHdpbmRvdyB0dXJuIGl0IG9mZiBiZWZvcmUgd2Ug ZXhpdC4gICAgICAqLworCisgICAgICAgIGlmICggdHRfc3RhdHVzW1ZDTURdICYmIHZtb2RlID09 IFZDTUQgKSB7CisgICAgICAgICAgICBkb21hYygiX2NsZWFyX3N0YXR1c2xpbmUiLCJzZXQgY29t bWFuZCBzdGF0dXNsaW5lIG9mZiIsCisgICAgICAgICAgICAgICAgICAgY21kc3RrW2NtZGx2bF0u Y2NmbGdzKTsKKyAgICAgICAgICAgIGRlbG1hYygiX2NsZWFyX3N0YXR1c2xpbmUiLDEpOworICAg ICAgICAgICAgUmVxdWVzdFNjcmVlbk11dGV4KC0xKTsKKyAgICAgICAgICAgIFZzY3JuSXNEaXJ0 eSh2bW9kZSk7CisgICAgICAgICAgICBSZWxlYXNlU2NyZWVuTXV0ZXgoKTsKKyAgICAgICAgICAg IHdoaWxlICggSXNWc2NybkRpcnR5KHZtb2RlKSApCisgICAgICAgICAgICAgICAgbXNsZWVwKDIw MCk7CisgICAgICAgICAgICBSZXF1ZXN0U2NyZWVuTXV0ZXgoLTEpOworICAgICAgICAgICAgUmVs ZWFzZVNjcmVlbk11dGV4KCk7CisgICAgICAgIH0KKyNlbmRpZiAvKiBLVUkgKi8KKyAgICAgICAg RGlhbGVyU2VuZChPUFRfS0VSTUlUX0VYSVQsZXhpdHN0YXQpOworI2lmbmRlZiBLVUkKKyAgICAg ICAgZGVidWcoRjEwMCwiZG9leGl0IGFib3V0IHRvIG1zbGVlcCIsIiIsMCk7CisKKyAgICAgICAg aWYgKCBpc1dpbjk1KCkgKQorICAgICAgICAgICAgbXNsZWVwKDI1MCk7CisjZW5kaWYgLyogS1VJ ICovCisgICAgfQorI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIE5PTE9DQUwgKi8KKworI2lm ZGVmIElLU0QKKyNpZmRlZiBDS19MT0dJTgorICAgIGlmIChpbnNlcnZlciAmJiB4X2xvZ2dlZCkg eworI2lmbmRlZiBOT1NQTAorLyoKKyAgSWYgYSBtYWNybyBuYW1lZCAib25fbG9nb3V0IiBpcyBk ZWZpbmVkLCBleGVjdXRlIGl0LiAgQWxzbyByZW1vdmUgaXQgZnJvbSB0aGUKKyAgbWFjcm8gdGFi bGUsIGluIGNhc2UgaXRzIGRlZmluaXRpb24gaW5jbHVkZXMgYW4gRVhJVCBvciBRVUlUIGNvbW1h bmQsIHdoaWNoCisgIHdvdWxkIGNhdXNlIG11Y2ggcmVjdXJzaW9uIGFuZCB3b3VsZCBwcmV2ZW50 IHRoZSBwcm9ncmFtIGZyb20gZXZlciBhY3R1YWxseQorICBFWElUaW5nLgorKi8KKwlpZiAobm1h YykgewkJCS8qIEFueSBtYWNyb3MgZGVmaW5lZD8gKi8KKwkgICAgaW50IGs7CQkJLyogWWVzICov CisJICAgIGNoYXIgKiBjbWQgPSAib25fbG9nb3V0IjsJLyogTVNWQyAyLnggY29tcGlsZXIgZXJy b3IgKi8KKwkgICAgayA9IG1sb29rKG1hY3RhYixjbWQsbm1hYyk7CS8qIExvb2sgdXAgIm9uX2xv Z291dCIgKi8KKwkgICAgaWYgKGsgPj0gMCkgewkJLyogSWYgZm91bmQsICovCisJCSoobWFjdGFi W2tdLmt3ZCkgPSBOVUw7CS8qIHBva2UgaXRzIG5hbWUgZnJvbSB0aGUgdGFibGUsICovCisJCWlm IChkb2RvKGssIiIsMCkgPiAtMSkJLyogc2V0IGl0IHVwLCAqLworCQkgIHBhcnNlcigxKTsJCS8q IGFuZCBleGVjdXRlIGl0ICovCisJICAgIH0KKwl9CisjZW5kaWYgLyogTk9TUEwgKi8KKwl6dmxv Z291dCgpOworICAgIH0KKyNlbmRpZiAvKiBDS19MT0dJTiAqLworI2VuZGlmIC8qIElLU0QgKi8K KworICAgIGRlYnVnKEYxMDAsImRvZXhpdCBhYm91dCB0byBkb2NsZWFuIiwiIiwwKTsKKyAgICBk b2NsZWFuKDEpOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVhbiB1cCBtb3N0IHRoaW5n cyAqLworCisjaWZkZWYgVk1TCisgICAgaWYgKGNvZGUgPT0gLTEpCisgICAgICBjb2RlID0gMDsg ICAgICAgICAgICAgICAgICAgICAgICAgLyogU2luY2Ugd2Ugc2V0IHR3byBkaWZmZXJlbnQgaXRl bXMgKi8KKyAgICBzcHJpbnRmKGVudnN0ciwiJWQiLCBleGl0c3RhdCB8IGNvZGUpOyAvKiBTQUZF ICovCisgICAgc3ltdmFsLmRzYyR3X2xlbmd0aCA9IChpbnQpc3RybGVuKGVudnN0cik7CisgICAg c3ltdmFsLmRzYyRhX3BvaW50ZXIgPSBlbnZzdHI7CisgICAgc3ltdmFsLmRzYyRiX2NsYXNzID0g RFNDJEtfQ0xBU1NfUzsKKyAgICBzeW12YWwuZHNjJGJfZHR5cGUgPSBEU0MkS19EVFlQRV9UOwor ICAgIGkgPSAyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFN0b3JlIGluIGdsb2Jh bCB0YWJsZSAqLworI2lmZGVmIENPTU1FTlQgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1h cnRpbiBaaW5zZXIgKi8KKyAgICBMSUIkU0VUX1NZTUJPTCgmc3ltbmFtLCAmc3ltdmFsLCAmaSk7 CisjZWxzZQorICAgIGxpYiRzZXRfc3ltYm9sKCZzeW1uYW0sICZzeW12YWwsICZpKTsKKyNlbmRp ZiAvKiBDT01NRU5UICovCisgICAgaWYgKGV4aXRzdGF0ID09IEJBRF9FWElUKQorICAgICAgZXhp dHN0YXQgPSBTUyRfQUJPUlQgfCBTVFMkTV9JTkhJQl9NU0c7CisgICAgaWYgKGV4aXRzdGF0ID09 IEdPT0RfRVhJVCkKKyAgICAgIGV4aXRzdGF0ID0gU1MkX05PUk1BTCB8IFNUUyRNX0lOSElCX01T RzsKKyNlbHNlIC8qIE5vdCBWTVMgKi8KKyAgICBpZiAoY29kZSAhPSAtMSkgICAgICAgICAgICAg ICAgICAgICAvKiBUYWtlIDFzdCBhcmcgbGl0ZXJhbGx5ICovCisgICAgICBleGl0c3RhdCB8PSBj b2RlOworI2VuZGlmIC8qIFZNUyAqLworCisjaWZkZWYgSUtTRAorI2lmZGVmIElLU0RCCisgICAg ZGVidWcoRjEwMSwiZG9leGl0IGlrZGJvcGVuIiwiIixpa2Rib3Blbik7CisgICAgaWYgKGlrZGJv cGVuICYmIGRiZnApIHsgICAgICAgICAgICAgLyogSWYgSUtTRCBkYXRhYmFzZSBvcGVuICovCisg ICAgICAgIGludCB4OworICAgICAgICB4ID0gZnJlZXNsb3QobXlkYnNsb3QpOyAgICAgICAgIC8q IEZyZWUgb3VyIHNsb3QuLi4gKi8KKyAgICAgICAgZGVidWcoRjEwMSwiZG9leGl0IGZyZWVzbG90 IiwiIix4KTsKKyAgICAgICAgZmNsb3NlKGRiZnApOyAgICAgICAgICAgICAgICAgICAvKiBhbmQg Y2xvc2UgaXQuICovCisgICAgfQorI2VuZGlmIC8qIElLU0RCICovCisjZW5kaWYgLyogSUtTRCAq LworCisvKiBXZSBoYXZlIHB1dCB0aGlzIG9mZiB0aWxsIHRoZSB2ZXJ5IGxhc3QgbW9tZW50Li4u ICovCisKKyNpZmRlZiBERUJVRworICAgIGlmIChkZWJsb2cpIHsgICAgICAgICAgICAgICAgICAg ICAgIC8qIENsb3NlIHRoZSBkZWJ1ZyBsb2cuICovCisgICAgICAgIGRlYnVnKEYxMDEsIkMtS2Vy bWl0IEVYSVQgc3RhdHVzIiwiIixleGl0c3RhdCk7CisgICAgICAgICpkZWJmaWwgPSAnXDAnOwor ICAgICAgICBkZWJsb2cgPSAwOworICAgICAgICB6Y2xvc2UoWkRGSUxFKTsKKyAgICB9CisjZW5k aWYgLyogREVCVUcgKi8KKworI2lmZGVmIE9TMgorICAgIF9leGl0KGV4aXRzdGF0KTsgICAgICAg ICAgICAvKiBFeGl0IGZyb20gQy1LZXJtaXQgKG5vIG1hdHRlciB3aGF0KSAqLworI2Vsc2UgLyog T1MyICovCisgICAgZXhpdChleGl0c3RhdCk7ICAgICAgICAgICAgICAgICAgICAgLyogRXhpdCBm cm9tIEMtS2VybWl0ICovCisjZW5kaWYgLyogT1MyICovCit9CisKK1ZPSUQKK2JnY2hrKCkgeyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDaGVjayBiYWNrZ3JvdW5kIHN0YXR1cyAq LworICAgIGlmIChiZ3NldCA8IDApIHsgICAgICAgICAgICAgICAgICAgIC8qIFRoZXkgZGlkbid0 IHR5cGUgU0VUIEJBQ0tHUk9VTkQgKi8KKyNpZmRlZiBWTVMgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBTZXQgcHJvbXB0IGZsYWcgYmFzZWQgb24gKi8KKyAgICAgICAgcGZsYWcgPSAh YmF0Y2g7ICAgICAgICAgICAgICAgICAvKiB3aGF0IHdlIGRldGVjdGVkIGF0IHN0YXJ0dXAuICov CisjZWxzZQorICAgICAgICBwZmxhZyA9ICFiYWNrZ3JkOworI2VuZGlmIC8qIFZNUyAqLworICAg IH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE90aGVyd2lzZSBTRVQgQkFD S0dST1VORCB2YWx1ZSAqLworICAgICAgICBwZmxhZyA9IChiZ3NldCA9PSAwID8gMSA6IDApOwor ICAgIH0KKworI2lmbmRlZiBOT0lDUAorICAgIC8qIE1lc3NhZ2UgZmxhZyBvbiBvbmx5IGlmIGF0 IHRvcCBsZXZlbCwgcGZsYWcgaXMgb24sIGFuZCBRVUlFVCBpcyBPRkYgKi8KKyAgICBpZiAoIXhj bWRzcmMpCisgICAgICBtc2dmbGcgPSAocGZsYWcgPT0gMCkgPyAwIDogIXF1aWV0OworICAgIGVs c2UgbXNnZmxnID0gMDsKKyNlbHNlCisgICAgbXNnZmxnID0gMDsKKyNlbmRpZiAvKiBOT0lDUCAq LworfQorCisvKiBTZXQgY29uc29sZSBpbnRlcnJ1cHRzICovCisKK1ZPSUQKK3NldGludCgpIHsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBY2NvcmRpbmcgdG8gU0VUIENPTU1BTkQg SU5URVJSVVAgKi8KKyAgICBpbnQgeCA9IDA7CisgICAgaWYgKGNtZGludCkgIHggfD0gMTsKKyAg ICBpZiAoeHN1c3BlbmQpIHggfD0gMjsKKyAgICBkZWJ1ZyhGMTAxLCJzZXRpbnQiLCIiLHgpOwor CisgICAgc3dpdGNoICh4KSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogU2V0IHRoZSBkZXNp cmVkIGNvbWJpbmF0aW9uICovCisgICAgICBjYXNlIDA6IGNvbm5vaSgpOyBicmVhazsgICAgICAg ICAgLyogTm8gaW50ZXJydXB0cyAqLworICAgICAgY2FzZSAxOiBjb25pbnQodHJhcCxTSUdfSUdO KTsgYnJlYWs7CisgICAgICBjYXNlIDI6IGNvbmludChTSUdfSUdOLHN0cHRyYXApOyBicmVhazsK KyAgICAgIGNhc2UgMzogY29uaW50KHRyYXAsc3RwdHJhcCk7IGJyZWFrOworICAgIH0KKyAgICBi Z2NoaygpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDaGVjayBiYWNrZ3JvdW5kIHN0 YXR1cyAqLworfQorCisjaWZkZWYgREVCVUcKKy8qICBEIEUgQiBVIEcgIC0tICBFbnRlciBhIHJl Y29yZCBpbiB0aGUgZGVidWdnaW5nIGxvZyAgKi8KKworLyoKKyBDYWxsIHdpdGggYSBmb3JtYXQs IHR3byBzdHJpbmdzLCBhbmQgYSBudW1iZXI6CisgICBmICAtIEZvcm1hdCwgYSBiaXQgc3RyaW5n IGluIHJhbmdlIDAtNy4KKyAgICAgICAgSWYgYml0IHggaXMgb24sIHRoZW4gYXJndW1lbnQgbnVt YmVyIHggaXMgcHJpbnRlZC4KKyAgIHMxIC0gU3RyaW5nLCBhcmd1bWVudCBudW1iZXIgMS4gIElm IHNlbGVjdGVkLCBwcmludGVkIGFzIGlzLgorICAgczIgLSBTdHJpbmcsIGFyZ3VtZW50IG51bWJl ciAyLiAgSWYgc2VsZWN0ZWQsIHByaW50ZWQgaW4gYnJhY2tldHMuCisgICBuICAtIExvbmcgaW50 LCBhcmd1bWVudCAzLiAgSWYgc2VsZWN0ZWQsIHByaW50ZWQgcHJlY2VkZWQgYnkgZXF1YWxzIHNp Z24uCisKKyAgIGY9MCBpcyBzcGVjaWFsOiBwcmludCBzMSxzMiwgYW5kIGludGVycHJldCBuIGFz IGEgY2hhci4KKworICAgZj1GMDExICgzKSBpcyBhbHNvIHNwZWNpYWw7IGluIHRoaXMgY2FzZSBz MiBpcyBpbnRlcnBldGVkIGFzIGEgY291bnRlZAorICAgc3RyaW5nIHRoYXQgbWlnaHQgY29udGFp biBOVUxzLiAgbiBpcyB0aGUgbGVuZ3RoLiAgSWYgbiBpcyBuZWdhdGl2ZSwgdGhpcworICAgbWVh bnMgdGhlIHN0cmluZyBoYXMgYmVlbiB0cnVuY2F0ZWQgYW5kICIuLiIgc2hvdWxkIGJlIHByaW50 ZWQgYWZ0ZXIgdGhlCisgICBmaXJzdCBuIGJ5dGVzLiAgTlVMIGFuZCBMRiBieXRlcyBhcmUgcHJp bnRlZCBhcyAiPE5VTD4iIGFuZCAiPExGPiIuCisKKyAgIEdsb2JhbHM6CisgICAgIGRlYmxvZzog bm9uemVybyBpZiBkZWJ1ZyBsb2cgb3Blbi4KKyAgICAgZGVib2s6ICBub256ZXJvIGlmIG9rIHRv IHdyaXRlIGVudHJpZXMuCisqLworLyoKKyAgV0FSTklORzogRG9uJ3QgY2hhbmdlIERFQlVGTCB3 aXRob3V0IGNoYW5naW5nIHNwcmludGYoKSBmb3JtYXRzIGJlbG93LAorICBhY2NvcmRpbmdseS4K KyovCisjZGVmaW5lIERCVUZMIDQwMDAKKy8qCisgIFdBUk5JTkc6IFRoaXMgcm91dGluZSBpcyBu b3QgdGhyZWFkLXNhZmUsIGVzcGVjaWFsbHkgd2hlbiBLZXJtaXQgaXMKKyAgZXhlY3V0aW5nIG9u IG11bHRpcGxlIENQVXMgLS0gYXMgZGlmZmVyZW50IHRocmVhZHMgd3JpdGUgdG8gdGhlIHNhbWUK KyAgc3RhdGljIGJ1ZmZlciwgdGhlIGRlYnVnIHN0YXRlbWVudHMgYXJlIGFsbCBpbnRlcmxlYXZl ZC4gIFRvIGJlIGZpeGVkCisgIGxhdGVyLi4uCisqLworc3RhdGljIGNoYXIgKmRicHRyID0gKGNo YXIgKikwOworCitpbnQKKyNpZmRlZiBDS19BTlNJQworZG9kZWJ1ZyhpbnQgZiwgY2hhciAqczEs IGNoYXIgKnMyLCBDS19PRkZfVCBuKQorI2Vsc2UKK2RvZGVidWcoZixzMSxzMixuKSBpbnQgZjsg Y2hhciAqczEsICpzMjsgQ0tfT0ZGX1QgbjsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogZG9k ZWJ1ZyAqLyB7CisgICAgY2hhciAqc3A7CisgICAgaW50IGxlbjEsIGxlbjI7CisgICAgZXh0ZXJu IGludCBkZWJ0aW07CisjaWZkZWYgT1MyCisgICAgZXh0ZXJuIGludCBTeXNJbml0ZWQ7CisjZW5k aWYgLyogT1MyICovCisKKyAgICBpZiAoIWRlYmxvZyB8fCAhZGVib2spCisgICAgICByZXR1cm4o MCk7CisKKyNpZmRlZiBDT01NRU5UCisgICAgLyogZXhwZW5zaXZlLi4uICovCisgICAgaWYgKCFj aGtmbihaREZJTEUpKQkJCS8qIERlYnVnIGxvZyBub3Qgb3BlbiwgZG9uJ3QuICovCisgICAgICBy ZXR1cm4oMCk7CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgIGlmICghZGJwdHIpIHsgICAgICAg ICAgICAgICAgICAgICAgIC8qIEFsbG9jYXRlIG1lbW9yeSBidWZmZXIgKi8KKyAgICAgICAgZGJw dHIgPSBtYWxsb2MoREJVRkwrNCk7ICAgICAgICAvKiBUaGlzIG9ubHkgaGFwcGVucyBvbmNlICov CisgICAgICAgIGlmICghZGJwdHIpIHsKKyAgICAgICAgICAgIHpjbG9zZShaREZJTEUpOworICAg ICAgICAgICAgcmV0dXJuKDApOworICAgICAgICB9CisgICAgfQorLyoKKyAgVGhpcyBwcmV2ZW50 cyBpbmZpbml0ZSByZWN1cnNpb24gaW4gY2FzZSB3ZSBhY2NpZGVudGFsbHkgcHV0IGEgZGVidWco KQorICBjYWxsIGluIHRoaXMgcm91dGluZSwgb3IgY2FsbCBhbm90aGVyIHJvdXRpbmUgdGhhdCBj b250YWlucyBkZWJ1ZygpIGNhbGxzLgorICBGcm9tIHRoaXMgcG9pbnQgb24sIGFsbCByZXR1cm5z IGZyb20gdGhpcyByZXR1cm4gbXVzdCBiZSB2aWEgZ290byB4ZGVidWcsCisgIHdoaWNoIHNldHMg ZGVibG9nIGJhY2sgdG8gMS4KKyovCisjaWZkZWYgT1MyCisgICAgaWYgKFN5c0luaXRlZCkgewor CWlmIChSZXF1ZXN0RGVidWdNdXRleCgzMDAwMCkpCisJICAgIGdvdG8geGRlYnVnOworICAgIH0K KyNlbHNlIC8qIE9TMiAqLworICAgIGRlYmxvZyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAg IC8qIFByZXZlbnQgaW5maW5pdGUgcmVjdXJzaW9uICovCisjZW5kaWYgLyogT1MyICovCisKKyAg ICBpZiAoZGVidGltKSB7ICAgICAgICAgICAgICAgICAgICAgICAvKiBUaW1lc3RhbXAgKi8KKyAg ICAgICAgY2hhciAqdGIsIHRzYnVmWzQ4XTsKKyAgICAgICAgenRpbWUoJnRiKTsKKyAgICAgICAg Y2tzdHJuY3B5KHRzYnVmLHRiLDMyKTsKKyAgICAgICAgaWYgKHp0bXNlYyA+IC0xTCkgeworCSAg ICBzcHJpbnRmKHRzYnVmKzE5LCIuJTAzbGQgIix6dG1zZWMpOyAvKiBTQUZFICovCisJfSBlbHNl IHsKKwkgICAgdHNidWZbMTldID0gJzonOworCSAgICB0c2J1ZlsyMF0gPSBTUDsKKwkgICAgdHNi dWZbMjFdID0gTlVMOworCX0KKyAgICAgICAgenNvdXQoWkRGSUxFLHRzYnVmKzExKTsKKyAgICB9 CisgICAgaWYgKCFzMSkgczE9IihOVUxMKSI7CisgICAgaWYgKCFzMikgczI9IihOVUxMKSI7CisK KyAgICBsZW4xID0gc3RybGVuKHMxKTsKKyAgICBsZW4yID0gc3RybGVuKHMyKTsKKworI2lmZGVm IENPTU1FTlQKKy8qCisgIFRoaXMgc2hvdWxkIHdvcmssIGJ1dCBpdCBkb2Vzbid0LgorICBTbyBp bnN0ZWFkIHdlJ2xsIGNvcGUgd2l0aCBvdmVyZmxvdyB2aWEgc3ByaW50ZiBmb3JtYXRzLgorICBO LkIuOiBVTkZPUlRVTkFURUxZLCB0aGlzIG1lYW5zIHdlIGhhdmUgdG8gcHV0IGNvbnN0YW50cyBp biB0aGUKKyAgc3ByaW50ZiBmb3JtYXRzLgorKi8KKyAgICBpZiAoZiAhPSBGMDExICYmICghZiB8 fCAoZiAmIDYpKSkgeyAvKiBTdHJpbmcgYXJndW1lbnQocykgaW5jbHVkZWQ/ICovCisgICAgICAg IHggPSAoaW50KSBzdHJsZW4oczEpICsgKGludCkgc3RybGVuKHMyKSArIDE4OworICAgICAgICBp ZiAoeCA+IGRidWZsKSB7ICAgICAgICAgICAgICAgIC8qIExvbmdlciB0aGFuIGJ1ZmZlcj8gKi8K KyAgICAgICAgICAgIGlmIChkYnB0cikgICAgICAgICAgICAgICAgICAvKiBZZXMsIGZyZWUgcHJl dmlvdXMgYnVmZmVyICovCisgICAgICAgICAgICAgIGZyZWUoZGJwdHIpOworICAgICAgICAgICAg ZGJwdHIgPSAoY2hhciAqKSBtYWxsb2MoeCArIDIpOyAvKiBBbGxvY2F0ZSBhIG5ldyBvbmUgKi8K KyAgICAgICAgICAgIGlmICghZGJwdHIpIHsKKyAgICAgICAgICAgICAgICB6c291dGwoWkRGSUxF LCJERUJVRzogTWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSIpOworICAgICAgICAgICAgICAgIGRl YmxvZyA9IDA7CisgICAgICAgICAgICAgICAgemNsb3NlKFpERklMRSk7CisgICAgICAgICAgICAg ICAgZ290byB4ZGVidWc7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGRi dWZsID0geDsKKyAgICAgICAgICAgICAgICBzcHJpbnRmKGRicHRyLCJERUJVRzogQnVmZmVyIGV4 cGFuZGVkIHRvICVkXG4iLCB4ICsgMTgpOworICAgICAgICAgICAgICAgIHpzb3V0bChaREZJTEUs ZGJwdHIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorI2VuZGlmIC8qIENPTU1F TlQgKi8KKworI2lmZGVmIENPTU1FTlQKKy8qIFRoZSBhZm9yZW1lbnRpb25lZCBzcHJpbnRmKCkg Zm9ybWF0cyB3ZXJlIGxpa2UgdGhpczogKi8KKyAgICAgICAgaWYgKG4gPiAzMSAmJiBuIDwgMTI3 KQorICAgICAgICAgIHNwcmludGYoc3AsIiUuMTAwcyUuMjAwMHM6JWNcbiIsczEsczIsKENIQVIp IG4pOworICAgICAgICBlbHNlIGlmIChuIDwgMzIgfHwgbiA9PSAxMjcpCisgICAgICAgICAgc3By aW50ZihzcCwiJS4xMDBzJS4yMDAwczpeJWNcbiIsczEsczIsKENIQVIpICgobis2NCkgJiAweDdG KSk7CisgICAgICAgIGVsc2UgaWYgKG4gPiAxMjcgJiYgbiA8IDE2MCkKKyAgICAgICAgICBzcHJp bnRmKHNwLCIlLjEwMHMlLjIwMDBzOn5eJWNcbiIsczEsczIsKENIQVIpKChuLTY0KSAmIDB4N0Yp KTsKKyAgICAgICAgZWxzZSBpZiAobiA+IDE1OSAmJiBuIDwgMjU2KQorICAgICAgICAgIHNwcmlu dGYoc3AsIiUuMTAwcyUuMjAwMHM6fiVjXG4iLHMxLHMyLChDSEFSKSAobiAmIDB4N0YpKTsKKyAg ICAgICAgZWxzZSBzcHJpbnRmKHNwLCIlLjEwMHMlLjIwMDBzOiVsZFxuIixzMSxzMixuKTsKKy8q CisgIEJ1dCwgbmF0dXJhbGx5LCBpdCB0dXJucyBvdXQgdGhlc2UgYXJlIG5vdCBwb3J0YWJsZSBl aXRoZXIsIHNvIG5vdworICB3ZSBkbyB0aGUgc3R1cGlkZXN0IHBvc3NpYmxlIHRoaW5nLgorKi8K KyNlbmRpZiAvKiBDT01NRU5UICovCisKKyNpZmRlZiBCSUdCVUZPSworLyogTmVlZCB0byBhY2Nl cHQgbG9uZ2VyIHN0cmluZ3Mgd2hlbiBkZWJ1Z2dpbmcgYXV0aGVudGljYXRlZCBjb25uZWN0aW9u cyAqLworICAgIGlmIChmID09IEYwMTApIHsKKyAgICAgICAgaWYgKGxlbjIgKyAyID49IERCVUZM KSBzMiA9ICIoc3RyaW5nIHRvbyBsb25nKSI7CisgICAgfSBlbHNlIGlmIChmICE9IEYwMTEgJiYg ZiAhPSBGMTAwKSB7CisgICAgICAgIGlmIChsZW4xID4gMTAwKSBzMSA9ICIoc3RyaW5nIHRvbyBs b25nKSI7CisgICAgICAgIGlmIChsZW4yICsgMTAxID49IERCVUZMKSBzMiA9ICIoc3RyaW5nIHRv byBsb25nKSI7CisgICAgfQorI2Vsc2UKKyAgICBpZiAoZiAhPSBGMDExKSB7CisgICAgICAgIGlm IChsZW4xID4gMTAwKSBzMSA9ICIoc3RyaW5nIHRvbyBsb25nKSI7CisgICAgICAgIGlmIChsZW4y ICsgMTAxID49IERCVUZMKSBzMiA9ICIoc3RyaW5nIHRvbyBsb25nKSI7CisgICAgfQorI2VuZGlm IC8qIEJJR0JVRk9LICovCisKKyAgICBzcCA9IGRicHRyOworCisgICAgc3dpdGNoIChmKSB7ICAg ICAgICAgICAgICAgIC8qIFdyaXRlIGxvZyByZWNvcmQgYWNjb3JkaW5nIHRvIGZvcm1hdC4gKi8K KyAgICAgIGNhc2UgRjAwMDogICAgICAgICAgICAgICAgLyogMCA9IHByaW50IGJvdGggc3RyaW5n cywgYW5kIG4gYXMgYSBjaGFyLiAqLworICAgICAgICBpZiAobGVuMiA+IDApIHsKKyAgICAgICAg ICAgIGlmICgobiA+IDMxICYmIG4gPCAxMjcpIHx8IChuID4gMTU5ICYmIG4gPCAyNTYpKQorICAg ICAgICAgICAgICBzcHJpbnRmKHNwLCIlc1slc109JWNcbiIsczEsczIsKENIQVIpIG4pOworICAg ICAgICAgICAgZWxzZSBpZiAobiA8IDMyIHx8IG4gPT0gMTI3KQorICAgICAgICAgICAgICBzcHJp bnRmKHNwLCIlc1slc109XiVjXG4iLHMxLHMyLChDSEFSKSAoKG4rNjQpICYgMHg3RikpOworICAg ICAgICAgICAgZWxzZSBpZiAobiA+IDEyNyAmJiBuIDwgMTYwKQorICAgICAgICAgICAgICBzcHJp bnRmKHNwLCIlc1slc109fl4lY1xuIixzMSxzMiwoQ0hBUikoKG4tNjQpICYgMHg3RikpOworICAg ICAgICAgICAgZWxzZSBzcHJpbnRmKHNwLCIlc1slc109MHglbFhcbiIsczEsczIsKGxvbmcpbik7 CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoKG4gPiAzMSAmJiBuIDwgMTI3KSB8 fCAobiA+IDE1OSAmJiBuIDwgMjU2KSkKKyAgICAgICAgICAgICAgc3ByaW50ZihzcCwiJXM9JWNc biIsczEsKENIQVIpIG4pOworICAgICAgICAgICAgZWxzZSBpZiAobiA8IDMyIHx8IG4gPT0gMTI3 KQorICAgICAgICAgICAgICBzcHJpbnRmKHNwLCIlcz1eJWNcbiIsczEsKENIQVIpICgobis2NCkg JiAweDdGKSk7CisgICAgICAgICAgICBlbHNlIGlmIChuID4gMTI3ICYmIG4gPCAxNjApCisgICAg ICAgICAgICAgIHNwcmludGYoc3AsIiVzPX5eJWNcbiIsczEsKENIQVIpKChuLTY0KSAmIDB4N0Yp KTsKKyAgICAgICAgICAgIGVsc2Ugc3ByaW50ZihzcCwiJXM9MHglbFhcbiIsczEsKGxvbmcpbik7 CisgICAgICAgIH0KKyAgICAgICAgaWYgKHpzb3V0KFpERklMRSxkYnB0cikgPCAwKSB7CisgICAg ICAgICAgICBkZWJsb2cgPSAwOworICAgICAgICAgICAgemNsb3NlKFpERklMRSk7CisgICAgICAg IH0KKyNpZmRlZiBDS1NZU0xPRworICAgICAgICBpZiAoY2t4c3lzbG9nID49IFNZU0xHX0RCICYm IGNreGxvZ2dpbmcpIHsKKyAgICAgICAgICAgIGNrc3lzbG9nKFNZU0xHX0RCLDEsImRlYnVnIixk YnB0cixOVUxMKTsKKyAgICAgICAgfQorI2VuZGlmIC8qIENLU1lTTE9HICovCisgICAgICAgIGJy ZWFrOworCisgICAgICBjYXNlIEYwMDE6ICAgICAgICAgICAgICAgICAgICAgICAgLyogMSwgIj1u IiAqLworI2lmZGVmIENPTU1FTlQKKyAgICAgICAgLyogVGhpcyB3YXMgbmV2ZXIgdXNlZCAqLwor ICAgICAgICBzcHJpbnRmKHNwLCI9JXNcbiIsY2tmc3RvYShuKSk7CisjZWxzZQorICAgICAgICAv KiBMaWtlIEYxMTEsIGJ1dCBzaG93cyBudW1iZXIgbiBpbiBoZXggKi8KKwlja21ha3htc2coc3As REJVRkwsCisJCSAgczEsCisJCSAgKCpzMSA/ICI6IiA6ICIiKSwKKwkJICBzMiwKKwkJICAoKnMy ID8gIjoiIDogIiIpLAorCQkgIGNrbHRveChuKSwKKwkJICAiXG4iLAorCQkgIE5VTEwsTlVMTCxO VUxMLE5VTEwsTlVMTCxOVUxMCisJCSAgKTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgICAg IGlmICh6c291dChaREZJTEUsZGJwdHIpIDwgMCkgeworICAgICAgICAgICAgZGVibG9nID0gMDsK KyAgICAgICAgICAgIHpjbG9zZShaREZJTEUpOworICAgICAgICB9CisjaWZkZWYgQ0tTWVNMT0cK KyAgICAgICAgaWYgKGNreHN5c2xvZyA+PSBTWVNMR19EQiAmJiBja3hsb2dnaW5nKSB7CisgICAg ICAgICAgICBja3N5c2xvZyhTWVNMR19EQiwxLCJkZWJ1ZyIsZGJwdHIsTlVMTCk7CisgICAgICAg IH0KKyNlbmRpZiAvKiBDS1NZU0xPRyAqLworICAgICAgICBicmVhazsKKworLyoKKyAgVGhpcyBv bmUgd2FzIG5ldmVyIHVzZWQgc28gKE9jdG9iZXIgMjAwMCkgd2Ugbm93IHVzZSBpdCBsaWtlIEYw MTEsCisgIGV4Y2VwdCBpbiB0aGlzIGNhc2Ugd2UgdHJlYXQgczIgYXMgTlVMIHRlcm1pbmF0ZWQu CisqLworICAgICAgY2FzZSBGMDEwOgorCW4gPSAtZGVieGxlbjsKKy8qCisgIFRoaXMgb25lIHRy ZWF0cyBuIGFzIHRoZSBsZW5ndGggb2YgdGhlIHN0cmluZyBzMiwgd2hpY2ggbWF5IGNvbnRhaW4g TlVMcy4KKyAgSXQncyBnb29kIGZvciBsb2dnaW5nIE5VTC1iZWFyaW5nIGRhdGEgaW4gdGhlIGRl YnVnIGxvZy4KKyovCisgICAgICBjYXNlIEYwMTE6IHsKKwkgIGludCBpLCBqLCBjb250ZCA9IDA7 CisJICBjaGFyICogcCA9IHMyLCAqcGJ1ZiA9IE5VTEw7CS8qIHAgPSBzb3VyY2UgcG9pbnRlciAq LworCSAgaW50IG07CQkJLyogcGJ1ZiA9IGRlc3RpbmF0aW9uIHBvaW50ZXIgKi8KKworCSAgaWYg KGYgPT0gRjAxMSkgeworCSAgICAgIGlmIChuIDwgMCkgewkJLyogbiA9IHNpemUgb2Ygc291cmNl ICovCisJCSAgbiA9IDAgLSBuOwkJLyogTmVnYXRpdmUgbWVhbnMgdG8gYWRkICIuLi4iICovCisJ CSAgY29udGQgPSAxOworCSAgICAgIH0KKwkgIH0gZWxzZSB7CisJICAgICAgaW50IHgsIGZsYWcg PSAwOworCSAgICAgIHggPSBzdHJsZW4oczIpOworCSAgICAgIGlmIChuIDwgMCkgeworCQkgIGZs YWcgPSAxOworCQkgIG4gPSAwIC0gbjsKKwkgICAgICB9CisJICAgICAgaWYgKHggPCBuKQorCQlu ID0geDsKKwkgIH0KKwkgIGlmIChuID09IDApCQkJLyogMCBtZWFucyBkbyBub3RoaW5nICovCisJ ICAgIGdvdG8geGRlYnVnOworCSAgbSA9IERCVUZMIC0gODsJCS8qIEdldCBzaXplIGZvciBpbnRl cnByZXRlZCBwYXJ0ICovCisJICBpZiAobiA+IG0pCQkJLyogRW5zdXJlIHJlcXVlc3RlZCBzaXpl IG5vdCB0b28gYmlnICovCisJICAgIG4gPSBtOworCSAgcGJ1ZiA9IGRicHRyOwkJCS8qIENvbnN0 cnVjdGlvbiBwb2ludGVyICovCisJICBpID0gMDsKKwkgIHBidWZbaSsrXSA9ICdbJzsJCS8qIElu dGVycHJldCB0aGUgc3RyaW5nIGludG8gaXQgKi8KKwkgIGZvciAoaiA9IDA7IGogPCBuICYmIGkg PCBtLTQ7IHArKyxqKyspIHsgLyogY2hhciBieSBjaGFyLi4uICovCisJICAgICAgaWYgKCpwID09 IExGKSB7CisJCSAgaWYgKGkgPj0gbS00KQorCQkgICAgYnJlYWs7CisJCSAgcGJ1ZltpKytdID0g JzwnOworCQkgIHBidWZbaSsrXSA9ICdMJzsKKwkJICBwYnVmW2krK10gPSAnRic7CisJCSAgcGJ1 ZltpKytdID0gJz4nOworCQkgIGNvbnRpbnVlOworCSAgICAgIH0gZWxzZSBpZiAoKnAgPT0gQ1Ip IHsKKwkJICBpZiAoaSA+PSBtLTQpCisJCSAgICBicmVhazsKKwkJICBwYnVmW2krK10gPSAnPCc7 CisJCSAgcGJ1ZltpKytdID0gJ0MnOworCQkgIHBidWZbaSsrXSA9ICdSJzsKKwkJICBwYnVmW2kr K10gPSAnPic7CisJCSAgY29udGludWU7CisJICAgICAgfSBlbHNlIGlmICgqcCA9PSBIVCkgewor CQkgIGlmIChpID49IG0tNSkKKwkJICAgIGJyZWFrOworCQkgIHBidWZbaSsrXSA9ICc8JzsKKwkJ ICBwYnVmW2krK10gPSAnVCc7CisJCSAgcGJ1ZltpKytdID0gJ0EnOworCQkgIHBidWZbaSsrXSA9 ICdCJzsKKwkJICBwYnVmW2krK10gPSAnPic7CisJCSAgY29udGludWU7CisJICAgICAgfSBlbHNl IGlmICgqcCkgeworCQkgIHBidWZbaSsrXSA9ICpwOworCQkgIGNvbnRpbnVlOworCSAgICAgIH0g ZWxzZSB7CisJCSAgaWYgKGkgPj0gbS01KQorCQkgICAgYnJlYWs7CisJCSAgcGJ1ZltpKytdID0g JzwnOworCQkgIHBidWZbaSsrXSA9ICdOJzsKKwkJICBwYnVmW2krK10gPSAnVSc7CisJCSAgcGJ1 ZltpKytdID0gJ0wnOworCQkgIHBidWZbaSsrXSA9ICc+JzsKKwkJICBjb250aW51ZTsKKwkgICAg ICB9CisJICB9CisJICBpZiAoaSA8IG0tMiAmJiAoKnAgfHwgY29udGQpKSB7CisJICAgICAgcGJ1 ZltpKytdID0gJy4nOworCSAgICAgIHBidWZbaSsrXSA9ICcuJzsKKwkgIH0KKwkgIHBidWZbaSsr XSA9ICddJzsKKwkgIHBidWZbaV0gPSBOVUw7CisJICBpZiAoenNvdXQoWkRGSUxFLHMxKSA8IDAp IHsKKwkgICAgICBkZWJsb2cgPSAwOworCSAgICAgIHpjbG9zZShaREZJTEUpOworCSAgfQorCSAg aWYgKHpzb3V0bChaREZJTEUscGJ1ZikgPCAwKSB7CisJICAgICAgZGVibG9nID0gMDsKKwkgICAg ICB6Y2xvc2UoWkRGSUxFKTsKKwkgIH0KKyNpZmRlZiBDS1NZU0xPRworCSAgaWYgKGNreHN5c2xv ZyA+PSBTWVNMR19EQiAmJiBja3hsb2dnaW5nKSB7CisJICAgICAgY2tzeXNsb2coU1lTTEdfREIs MSwiZGVidWciLHMxLHBidWYpOworCSAgfQorI2VuZGlmIC8qIENLU1lTTE9HICovCisgICAgICAg IH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgRjEwMDogICAgICAgICAgICAgICAgICAg ICAgICAvKiA0LCAiczEiICovCisgICAgICAgIGlmICh6c291dGwoWkRGSUxFLHMxKSA8IDApIHsK KyAgICAgICAgICAgIGRlYmxvZyA9IDA7CisgICAgICAgICAgICB6Y2xvc2UoWkRGSUxFKTsKKyAg ICAgICAgfQorI2lmZGVmIENLU1lTTE9HCisgICAgICAgIGlmIChja3hzeXNsb2cgPj0gU1lTTEdf REIgJiYgY2t4bG9nZ2luZykgeworICAgICAgICAgICAgY2tzeXNsb2coU1lTTEdfREIsMSwiZGVi dWciLHMxLE5VTEwpOworICAgICAgICB9CisjZW5kaWYgLyogQ0tTWVNMT0cgKi8KKyAgICAgICAg YnJlYWs7CisgICAgICBjYXNlIEYxMDE6ICAgICAgICAgICAgICAgICAgICAgICAgLyogNSwgInMx PW4iICovCisgICAgICAgIHNwcmludGYoc3AsIiVzPSVzXG4iLHMxLGNrZnN0b2EobikpOworICAg ICAgICBpZiAoenNvdXQoWkRGSUxFLGRicHRyKSA8IDApIHsKKyAgICAgICAgICAgIGRlYmxvZyA9 IDA7CisgICAgICAgICAgICB6Y2xvc2UoWkRGSUxFKTsKKyAgICAgICAgfQorI2lmZGVmIENLU1lT TE9HCisgICAgICAgIGlmIChja3hzeXNsb2cgPj0gU1lTTEdfREIgJiYgY2t4bG9nZ2luZykgewor ICAgICAgICAgICAgY2tzeXNsb2coU1lTTEdfREIsMSwiZGVidWciLGRicHRyLE5VTEwpOworICAg ICAgICB9CisjZW5kaWYgLyogQ0tTWVNMT0cgKi8KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNl IEYxMTA6ICAgICAgICAgICAgICAgICAgICAgICAgLyogNiwgInMxW3MyXSIgKi8KKyAgICAgICAg c3ByaW50ZihzcCwiJXNbJXNdXG4iLHMxLHMyKTsKKyAgICAgICAgaWYgKHpzb3V0KFpERklMRSxk YnB0cikgPCAwKSB7CisgICAgICAgICAgICBkZWJsb2cgPSAwOworICAgICAgICAgICAgemNsb3Nl KFpERklMRSk7CisgICAgICAgIH0KKyNpZmRlZiBDS1NZU0xPRworICAgICAgICBpZiAoY2t4c3lz bG9nID49IFNZU0xHX0RCICYmIGNreGxvZ2dpbmcpIHsKKyAgICAgICAgICAgIGNrc3lzbG9nKFNZ U0xHX0RCLDEsImRlYnVnIixkYnB0cixOVUxMKTsKKyAgICAgICAgfQorI2VuZGlmIC8qIENLU1lT TE9HICovCisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBGMTExOiAgICAgICAgICAgICAgICAg ICAgICAgIC8qIDcsICJzMVtzMl09biIgKi8KKyAgICAgICAgc3ByaW50ZihzcCwiJXNbJXNdPSVz XG4iLHMxLHMyLGNrZnN0b2EobikpOworICAgICAgICBpZiAoenNvdXQoWkRGSUxFLGRicHRyKSA8 IDApIHsKKyAgICAgICAgICAgIGRlYmxvZyA9IDA7CisgICAgICAgICAgICB6Y2xvc2UoWkRGSUxF KTsKKyAgICAgICAgfQorI2lmZGVmIENLU1lTTE9HCisgICAgICAgIGlmIChja3hzeXNsb2cgPj0g U1lTTEdfREIgJiYgY2t4bG9nZ2luZykgeworICAgICAgICAgICAgY2tzeXNsb2coU1lTTEdfREIs MSwiZGVidWciLGRicHRyLE5VTEwpOworICAgICAgICB9CisjZW5kaWYgLyogQ0tTWVNMT0cgKi8K KyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICBzcHJpbnRmKHNwLCJcbj9J bnZhbGlkIGZvcm1hdCBmb3IgZGVidWcoKSAtICVkXG4iLGYpOworICAgICAgICBpZiAoenNvdXQo WkRGSUxFLGRicHRyKSA8IDApIHsKKyAgICAgICAgICAgIGRlYmxvZyA9IDA7CisgICAgICAgICAg ICB6Y2xvc2UoWkRGSUxFKTsKKyAgICAgICAgfQorI2lmZGVmIENLU1lTTE9HCisgICAgICAgIGlm IChja3hzeXNsb2cgPj0gU1lTTEdfREIgJiYgY2t4bG9nZ2luZykgeworICAgICAgICAgICAgY2tz eXNsb2coU1lTTEdfREIsMSwiZGVidWciLGRicHRyLE5VTEwpOworICAgICAgICB9CisjZW5kaWYg LyogQ0tTWVNMT0cgKi8KKyAgICAgICAgYnJlYWs7CisgICAgfQorICB4ZGVidWc6ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIENvbW1vbiBleGl0IHBvaW50ICovCisjaWZkZWYgT1My CisgICAgaWYgKFN5c0luaXRlZCkKKwlSZWxlYXNlRGVidWdNdXRleCgpOworI2Vsc2UgLyogT1My ICovCisgICAgZGVibG9nID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVzdG9yZSB0 aGlzICovCisjZW5kaWYgLyogT1MyICovCisgICAgcmV0dXJuKDApOworfQorCitpbnQKKyNpZmRl ZiBDS19BTlNJQworZG9oZXhkdW1wKENIQVIgKm1zZywgQ0hBUiAqc3QsIGludCBjbnQpCisjZWxz ZQorZG9oZXhkdW1wKG1zZyxzdCxjbnQpIENIQVIgKm1zZzsgQ0hBUiAqc3Q7IGludCBjbnQ7Cisj ZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIGRvaGV4ZHVtcCAqLyB7CisgICAgaW50IGkgPSAwLCBq ID0gMCwgayA9IDA7CisgICAgY2hhciB0bXBbOF07CisjaWZkZWYgT1MyCisgICAgZXh0ZXJuIGlu dCBTeXNJbml0ZWQ7CisjZW5kaWYgLyogT1MyICovCisKKyAgICBpZiAoIWRlYmxvZykgcmV0dXJu KDApOwkJLyogSWYgbm8gZGVidWcgbG9nLCBkb24ndC4gKi8KKyAgICBpZiAoIWRicHRyKSB7ICAg ICAgICAgICAgICAgICAgICAgICAvKiBBbGxvY2F0ZSBtZW1vcnkgYnVmZmVyICovCisgICAgICAg IGRicHRyID0gbWFsbG9jKERCVUZMKzEpOyAgICAgICAgLyogVGhpcyBvbmx5IGhhcHBlbnMgb25j ZSAqLworICAgICAgICBpZiAoIWRicHRyKSB7CisgICAgICAgICAgICBkZWJsb2cgPSAwOworICAg ICAgICAgICAgemNsb3NlKFpERklMRSk7CisgICAgICAgICAgICByZXR1cm4oMCk7CisgICAgICAg IH0KKyAgICB9CisKKyNpZmRlZiBPUzIKKyAgICBpZiAoU3lzSW5pdGVkKSB7CisJaWYgKFJlcXVl c3REZWJ1Z011dGV4KDMwMDAwKSkKKwkgICAgZ290byB4ZGVidWc7CisgICAgfQorI2Vsc2UgLyog T1MyICovCisgICAgZGVibG9nID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogUHJldmVu dCBpbmZpbml0ZSByZWN1cnNpb24gKi8KKyNlbmRpZiAvKiBPUzIgKi8KKworICAgIGlmIChtc2cg IT0gTlVMTCkgeworCWNrbWFreG1zZyhkYnB0ciwKKwkJICBEQlVGTCwKKwkJICAiSEVYRFVNUDog IiwKKwkJICAoY2hhciAqKW1zZywKKwkJICAiICgiLAorCQkgIGNraXRvYShjbnQpLAorCQkgICIg Ynl0ZXMpXG4iLAorCQkgIE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwKKwkJICk7 CisgICAgICAgIGlmICh6c291dChaREZJTEUsZGJwdHIpIDwgMCkgeworICAgICAgICAgICAgZGVi bG9nID0gMDsKKyAgICAgICAgICAgIHpjbG9zZShaREZJTEUpOworCSAgICBnb3RvIHhkZWJ1ZzsK KyAgICAgICAgfQorICAgIH0gZWxzZSB7CisJY2ttYWttc2coZGJwdHIsCisJCSBEQlVGTCwKKwkJ ICJIRVhEVU1QOiAoIiwKKwkJIGNraXRvYShjbnQpLAorCQkgIiBieXRlcylcbiIsCisJCSBOVUxM CisJCSApOworICAgICAgICB6c291dChaREZJTEUsZGJwdHIpOworICAgICAgICBpZiAoenNvdXQo WkRGSUxFLGRicHRyKSA8IDApIHsKKyAgICAgICAgICAgIGRlYmxvZyA9IDA7CisgICAgICAgICAg ICB6Y2xvc2UoWkRGSUxFKTsKKwkgICAgZ290byB4ZGVidWc7CisgICAgICAgIH0KKyAgICB9Cisg ICAgZm9yIChpID0gMDsgaSA8IGNudDsgaSsrKSB7CisgICAgICAgIGRicHRyWzBdID0gJ1wwJzsK KyAgICAgICAgZm9yIChqID0gMCA7IChqIDwgMTYpOyBqKyspIHsKKyAgICAgICAgICAgIGlmICgo aSArIGopIDwgY250KQorCSAgICAgIHNwcmludGYodG1wLAorCQkgICAgICAiJXMlMDJ4ICIsCisJ CSAgICAgIChqID09IDggPyAifCAiIDogIiIpLAorCQkgICAgICAoQ0hBUikgc3RbaSArIGpdCisJ CSAgICAgICk7CisgICAgICAgICAgICBlbHNlCisJICAgICAgc3ByaW50Zih0bXAsCisJCSAgICAg ICIlcyAgICIsCisJCSAgICAgIChqID09IDggPyAifCAiIDogIiIpCisJCSAgICAgICk7CisgICAg ICAgICAgICBja3N0cm5jYXQoZGJwdHIsdG1wLERCVUZMKzEpOworICAgICAgICB9CisgICAgICAg IGNrc3RybmNhdChkYnB0ciwiICIsREJVRkwrMSk7CisgICAgICAgIGZvciAoayA9IDA7IChrIDwg MTYpICYmICgoaSArIGspIDwgY250KTsgaysrKSB7CisgICAgICAgICAgICBzcHJpbnRmKHRtcCwK KyAgICAgICAgICAgICAgICAgICAgIiVzJWMiLAorICAgICAgICAgICAgICAgICAgICAoayA9PSA4 ID8gIiAiIDogIiIpLAorICAgICAgICAgICAgICAgICAgICBpc3ByaW50KHN0W2kgKyBrXSkgPyBz dFtpICsga10gOiAnLicKKyAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIGNrc3Ry bmNhdChkYnB0cix0bXAsREJVRkwrMSk7CisgICAgICAgIH0KKyAgICAgICAgY2tzdHJuY2F0KGRi cHRyLCJcbiIsREJVRkwrMSk7CisgICAgICAgIGkgKz0gaiAtIDE7CisgICAgICAgIGlmICh6c291 dChaREZJTEUsZGJwdHIpIDwgMCkgeworICAgICAgICAgICAgZGVibG9nID0gMDsKKyAgICAgICAg ICAgIHpjbG9zZShaREZJTEUpOworCSAgICBnb3RvIHhkZWJ1ZzsKKyAgICAgICAgfQorICAgIH0g LyogZW5kIGZvciAqLworCisKKyAgeGRlYnVnOgorI2lmZGVmIE9TMgorICAgIGlmIChTeXNJbml0 ZWQpCisgICAgICBSZWxlYXNlRGVidWdNdXRleCgpOworI2Vsc2UgLyogT1MyICovCisgICAgZGVi bG9nID0gMTsKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICByZXR1cm4oMCk7Cit9CisjZW5kaWYgLyog REVCVUcgKi8KKworLyogIFNlc3Npb24gTG9nLi4uICovCisKK2ludCB0c3N0YXRlID0gMDsKKwor Vk9JRAorI2lmZGVmIE9TMgorbG9nY2hhcih1bnNpZ25lZCBzaG9ydCBjKQorI2Vsc2UgLyogT1My ICovCisjaWZkZWYgQ0tfQU5TSUMKK2xvZ2NoYXIoY2hhciBjKQorI2Vsc2UKK2xvZ2NoYXIoYykg Y2hhciBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCisjZW5kaWYgLyogT1MyICovCisvKiBsb2dj aGFyICovIHsgICAgICAgICAgICAgICAgICAgICAgICAgLyogTG9nIGNoYXJhY3RlciBjIHRvIHNl c3Npb24gbG9nICovCisgICAgZXh0ZXJuIGludCBzbG9nbnVsOworICAgIGludCBva3RvbG9nID0g MDsKKyNpZm5kZWYgTk9MT0NBTAorICAgIGlmICghc2VzbG9nKQorICAgICAgcmV0dXJuOworCisg ICAgaWYgKChzZXNzZnQgIT0gWFlGVF9UKSB8fCAoCisjaWZkZWYgVU5JWAorCSBjICE9ICdccicg JiYKKyNlbHNlCisjaWZkZWYgZGF0YWdlbmVyYWwKKwkgYyAhPSAnXHInICYmCisjZWxzZQorI2lm ZGVmIFNUUkFUVVMKKwkgYyAhPSAnXHInICYmCisjZWxzZQorI2lmZGVmIEFNSUdBCisJIGMgIT0g J1xyJyAmJgorI2Vsc2UKKyNpZmRlZiBHRU1ET1MKKwkgYyAhPSAnXHInICYmCisjZW5kaWYgLyog R0VNRE9TICovCisjZW5kaWYgLyogQU1JR0EgKi8KKyNlbmRpZiAvKiBTVFJBVFVTICovCisjZW5k aWYgLyogZGF0YWdlbmVyYWwgKi8KKyNlbmRpZiAvKiBVTklYICovCisjaWZkZWYgT1NLCisJIGMg IT0gJ1xuJyAmJgorI2Vsc2UKKyNpZmRlZiBNQUMKKwkgYyAhPSAnXG4nICYmCisjZW5kaWYgLyog TUFDICovCisjZW5kaWYgLyogT1NLICovCisJIGMgIT0gWE9OICYmCisJIGMgIT0gWE9GRikpCisg ICAgICBva3RvbG9nID0gMTsKKyAgICBpZiAoYyA9PSAnXDAnICYmICFzZXNzZnQpCQkvKiBOVUwg aW4gdGV4dCBtb2RlICovCisgICAgICBpZiAoc2xvZ251bCkgb2t0b2xvZyA9IDE7CQkvKiBvbmx5 IGlmIHBhZGRpbmcgKDIwMDkvMTAvMjIpICovCisgICAgaWYgKCFva3RvbG9nKQorICAgICAgcmV0 dXJuOworICAgIGlmIChzbG9ndHMpIHsJCQkvKiBMb2cgaXMgdGltZXN0YW1wZWQgKi8KKwlpZiAo dHNzdGF0ZSA9PSAwKSB7CQkvKiBTdGF0ZSA9IGJldHdlZW4tbGluZXMgKi8KKwkgICAgY2hhciAq IHA7CQkJLyogenN0aW1lKCkgcG9pbnRlciAqLworCSAgICBjaGFyIHRzWzQ4XTsJCS8qIHRpbWVz dGFtcCBidWZmZXIgKi8KKwkgICAgenRpbWUoJnApOwkJCS8qIEdldCBhc2N0aW1lKCkgc3RyaW5n ICovCisJICAgIGNrc3RybmNweSh0cyxwLDMyKTsJCS8qIE1ha2Ugc2FmZSBjb3B5ICovCisJICAg IGlmICh6dG1zZWMgPiAtMUwpIHsJCS8qIEFkZCBtc2VjcyBpZiB3ZSBoYXZlIHRoZW0gKi8KKwkJ c3ByaW50ZigmdHNbMTldLCIuJTAzbGQ6ICIsenRtc2VjKTsgLyogU0FGRSAqLworCSAgICB9IGVs c2UgeworCQl0c1sxOV0gPSAnOic7CisJCXRzWzIwXSA9IFNQOworCQl0c1syMV0gPSBOVUw7CisJ ICAgIH0KKwkgICAgaWYgKHpzb3V0KFpTRklMRSwmdHNbMTFdKSA8IDApCisJICAgICAgZ290byB4 bG9nY2hhcjsKKwl9CisgICAgfQorICAgIGlmIChjID09ICdcbicpCQkJLyogQXQgZW5kIG9mIGxp bmU/ICovCisgICAgICB0c3N0YXRlID0gMDsJCQkvKiB5ZXMgKi8KKyAgICBlbHNlCisgICAgICB0 c3N0YXRlID0gMTsJCQkvKiBubyAqLworICAgIGlmICh6Y2hvdXQoWlNGSUxFLChDSEFSKShjICYg MHhGRikpIDwgMCkgLyogTG9nIHRoZSBjaGFyYWN0ZXIgKi8KKyAgICAgIGdvdG8geGxvZ2NoYXI7 CisgICAgaWYgKHRzc3RhdGUgPT0gMCAmJiBzbG9nbnVsICE9IDApIHsJLyogTnVsbC10ZXJtaW5h dGluZyBsaW5lcz8gKi8KKwlpZiAoemNob3V0KFpTRklMRSwoQ0hBUikwKSA8IDApCS8qIEFkZCBh IE5VTCAqLworCSAgZ290byB4bG9nY2hhcjsKKyAgICB9CisgICAgcmV0dXJuOworCisgIHhsb2dj aGFyOgorICAgIGNvbm9sbCgiIik7CisgICAgY29ub2xsKCJFUlJPUiBXUklUSU5HIFNFU1NJT04g TE9HLCBMT0cgQ0xPU0VEISIpOworICAgIHNldHNlc2xvZygwKTsKKyAgICB6Y2xvc2UoWlNGSUxF KTsKKyNlbmRpZiAvKiBOT0xPQ0FMICovCit9CisKK1ZPSUQKK2xvZ3N0cihzLCBsZW4pIGNoYXIg KiBzOyBpbnQgbGVuOyB7ICAgICAvKiBMb2cgc3RyaW5nIHRvIHNlc3Npb24gbG9nICovCisjaWZu ZGVmIE5PTE9DQUwKKyAgICBpbnQgbiA9IDA7CisgICAgaWYgKCFzKQorICAgICAgcmV0dXJuOwor ICAgIHdoaWxlIChzZXNsb2cgJiYgKG4gPCBsZW4pKQorICAgICAgbG9nY2hhcihzW24rK10pOwor I2VuZGlmIC8qIE5PTE9DQUwgKi8KK30KKworI2lmZGVmIENLX0NVUlNFUworaW50Citja19yZXBh aW50KCkgeworICAgIHJlcGFpbnQgPSAxOworICAgIHJldHVybigwKTsKK30KKworI2lmZGVmIFNU UkFUVVMKKy8qIFZPUyBoYXMgY3Vyc2VzIGJ1dCBubyB0Z2V0ZW50KCkgKi8KK2ludAordGdldGVu dChzMSwgczIpIGNoYXIgKiBzMSwgKiBzMjsgeworICAgIHJldHVybigxKTsKK30KKyNlbmRpZiAv KiBTVFJBVFVTICovCisKKyNpZmRlZiBWTVMKKyNpZmRlZiBfX0RFQ0MKK19QUk9UT1RZUChpbnQg dGdldGVudCwoY2hhciAqLCBjaGFyICopKTsKKyNlbmRpZiAvKiBfX0RFQ0MgKi8KKyNlbmRpZiAv KiBWTVMgKi8KKworLyoKKyAgVGhlcmUgYXJlIHRocmVlIGRpZmZlcmVudCB3YXlzIHRvIGRvIGZ1 bGxzY3JlZW4gb24gVk1TLgorICAxLiBVc2UgdGhlIHJlYWwgY3Vyc2VzIGxpYnJhcnksIFZBWEND VVJTRS4KKyAgMi4gVXNlIGRvLWl0LXlvdXJzZWxmIGNvZGUuCisgIDMuIFVzZSB0aGUgU2NyZWVu IE1hbmFnZXIsIFNNRyQuCisKKyAgTWV0aG9kIDEgZG9lc24ndCB3b3JrIHF1aXRlIHJpZ2h0OyB5 b3UgY2FuJ3QgY2FsbCBlbmR3aW4oKSwgc28gb25jZSB5b3UndmUKKyAgc3RhcnRlZCBjdXJzZXMg bW9kZSwgeW91IGNhbiBuZXZlciBsZWF2ZS4KKworICBNZXRob2QgMiBkb2Vzbid0IG9wdGltaXpl IHRoZSBzY3JlZW4sIGFuZCBzbyBtdWNoIG1vcmUgdGltZSBpcyBzcGVudCBpbgorICBzY3JlZW4g d3JpdGVzLiAgVGhpcyBhY3R1YWxseSBjYXVzZXMgZmlsZSB0cmFuc2ZlcnMgdG8gZmFpbCBiZWNh dXNlIHRoZQorICB0dHkgZGV2aWNlIGlucHV0IGJ1ZmZlciBjYW4gYmUgb3ZlcnJ1biB3aGlsZSB0 aGUgc2NyZWVuIGlzIGJlaW5nIHVwZGF0ZWQsCisgIGVzcGVjaWFsbHkgb24gYSBzbG93IE1pY3Jv VkFYIHRoYXQgaGFzIHNtYWxsIHR5cGVhaGVhZCBidWZmZXJzLgorCisgIEluIHRoZSBmb2xsb3dp bmcgI2lmZGVmIGJsb2NrLCAjZGVmaW5lIG9uZSBvZiB0aGVtIGFuZCAjdW5kZWYgdGhlIG90aGVy IDIuCisKKyAgU28gbm93IGxldCdzIHRyeSBtZXRob2QgMy4uLgorKi8KKyNpZmRlZiBWTVMKKyNk ZWZpbmUgQ0tfU01HICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTY3JlZW4gTWFuYWdlciAq LworI3VuZGVmIE1ZQ1VSU0VTICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERvLWl0LXlvdXJz ZWxmICovCisjdW5kZWYgVk1TQ1VSU0UgICAgICAgICAgICAgICAgICAgICAgICAgLyogVkFYQ0NV UlNFIGxpYnJhcnkgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKy8qCisgIEJ1dCBqdXN0IGJlZm9yZSBO ZXcgWWVhcnMsIDIwMDAsIHRoZSBTTUcgbGlicmFyeSBzZWVtZWQgdG8gYnJlYWsgb24KKyAgYm90 aCBWTVMgc3lzdGVtcyB3ZSBoYXZlIGhlcmUgKGFuIEFscGhhIHdpdGggVk1TIDcuMSBhbmQgYSBW QVggd2l0aCA1LjUpLgorICBTbyBiYWNrIHRvIE1ZQ1VSU0VTLCB3aGljaCB3b3JrcyBmaW5lLgor Ki8KKyNpZmRlZiBWTVMKKyN1bmRlZiBDS19TTUcKKyNkZWZpbmUgTVlDVVJTRVMKKyNlbmRpZiAv KiBWTVMgKi8KKworI2lmZGVmIE1ZQ1VSU0VTCisjZGVmaW5lIHN0ZHNjciAwCisjaWZkZWYgQ0tf V1JFRlJFU0gKKyN1bmRlZiBDS19XUkVGUkVTSAorI2VuZGlmIC8qIENLX1dSRUZSRVNIICovCisj ZW5kaWYgLyogTVlDVVJTRVMgKi8KKworLyogIFMgQyBSIEUgRSBOIEMgIC0tICBTY3JlZW4gZGlz cGxheSBmdW5jdGlvbiwgdXNlcyBjdXJzZXMgICovCisKKy8qIElkZWEgZm9yIGN1cnNlcyBkaXNw bGF5IGNvbnRyaWJ1dGVkIGJ5IENocmlzIFByYXR0IG9mIEFQViBCYWtlciwgVUsgKi8KKworLyog QXZvaWQgY29uZmljdHMgd2l0aCBjdXJzZXMuaCAqLworCisjaWZkZWYgUU5YCisvKiBTYW1lIGFz IGNrY2FzYy5oLCBidXQgaW4gYSBkaWZmZXJlbnQgcmFkaXguLi4gKi8KKyNpZmRlZiBFU0MKKyN1 bmRlZiBFU0MKKyNlbmRpZiAvKiBFU0MgKi8KKyNlbmRpZiAvKiBRTlggKi8KKworI2lmbmRlZiBN WUNVUlNFUworI3VuZGVmIFZPSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRoaXMg d2FzIGRlZmluZWQgaW4gY2tjZGViLmggKi8KKyNlbmRpZiAvKiBNWUNVUlNFUyAqLworCisjdW5k ZWYgQlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVGhlc2Ugd2VyZSBkZWZpbmVk IGluIGNrY2FzYy5oICovCisjdW5kZWYgQ1IKKyN1bmRlZiBOTAorI3VuZGVmIFNPCisjaWZkZWYg VVMKKyN1bmRlZiBVUworI2VuZGlmCS8qIFVTICovCisjdW5kZWYgU1AgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogVXNlZCBpbiBuY3Vyc2VzICovCisjZGVmaW5lIENIUl9TUCAzMiAg ICAgICAgICAgICAgICAgICAgICAgLyogVXNlIHRoaXMgaW5zdGVhZCAqLworCisjaWZkZWYgVk1T ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVk1TIGZ1bGxzY3JlZW4gZGlzcGxheSAq LworI2lmZGVmIE1ZQ1VSU0VTICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERvLWl0LXlvdXJz ZWxmIG1ldGhvZCAqLworZXh0ZXJuIGludCBpc3Z0NTI7ICAgICAgICAgICAgICAgICAgICAgIC8q IEZyb20gQ0tWVElPLkMgKi8KKyNkZWZpbmUgcHJpbnR3IHByaW50ZgorI2Vsc2UKKyNpZmRlZiBW TVNDVVJTRSAgICAgICAgICAgICAgICAgICAgICAgICAvKiBWTVMgY3Vyc2VzIGxpYnJhcnkgVkFY Q0NVUlNFICovCisjaW5jbHVkZSA8Y3Vyc2VzLmg+CisvKiBOb3RlOiBTY3JlZW4gbWFuYWdlciBk b2Vzbid0IG5lZWQgYSBoZWFkZXIgZmlsZSAqLworI2VuZGlmIC8qIFZNU0NVUlNFICovCisjZW5k aWYgLyogTVlDVVJTRVMgKi8KKyNlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBOb3QgVk1TICovCisjaWZkZWYgTVlDVVJTRVMgICAgICAgICAgICAgICAgICAgICAgICAg LyogRG8taXQteW91cnNlbGYgbWV0aG9kICovCisjZGVmaW5lIGlzdnQ1MiAwICAgICAgICAgICAg ICAgICAgICAgICAgLyogVXNlZCBieSBPUy8yLCBWVC0xMDAvQU5TSSBhbHdheXMgKi8KKyNpZmRl ZiBDS1hQUklOVEYKKyNkZWZpbmUgcHJpbnR3IGNreHByaW50ZgorI2Vsc2UgLyogQ0tYUFJJTlRG ICovCisjaWZkZWYgS1VJCisjZGVmaW5lIHByaW50dyBWc2NybnByaW50dworI2Vsc2UgLyogS1VJ ICovCisjZGVmaW5lIHByaW50dyBwcmludGYKKyNlbmRpZiAvKiBLVUkgKi8KKyNlbmRpZiAvKiBD S1hQUklOVEYgKi8KKyNlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBV c2UgcmVhbCBjdXJzZXMgKi8KKyNpZmRlZiBDS19OQ1VSU0VTICAgICAgICAgICAgICAgICAgICAg ICAvKiBvciBuY3Vyc2VzLi4uICovCisjaWZkZWYgQ0tYUFJJTlRGICAgICAgICAgICAgICAgICAg ICAgICAgLyogT3VyIHByaW50ZiBtYWNybyBjb25mbGljdHMgd2l0aCAqLworI3VuZGVmIHByaW50 ZiAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHVzZSBvZiAicHJpbnRmIiBpbiBuY3Vyc2Vz LmggKi8KKyNlbmRpZiAvKiBDS1hQUklOVEYgKi8KKyNpbmNsdWRlIDxuY3Vyc2VzLmg+CisjaWZk ZWYgQ0tYUFJJTlRGCisjZGVmaW5lIHByaW50ZiBja3hwcmludGYKKyNlbmRpZiAvKiBDS1hQUklO VEYgKi8KKyNlbHNlICAvKiBOb3QgbmN1cnNlcyAqLworI2lmZGVmIENLWFBSSU5URiAgICAgICAg ICAgICAgICAgICAgICAgIC8qIE91ciBwcmludGYgbWFjcm8gY29uZmxpY3RzIHdpdGggKi8KKyN1 bmRlZiBwcmludGYgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB1c2Ugb2YgInByaW50ZiIg aW4gY3Vyc2VzLmggKi8KKyNlbmRpZiAvKiBDS1hQUklOVEYgKi8KKyNpZmRlZiBNX1hFTklYCQkJ CS8qIFNDTyBYRU5JWC4uLiAqLworI2lmZGVmIE1fVEVSTUNBUAorI3VuZGVmIE1fVEVSTUNBUAor I2VuZGlmIC8qIE1fVEVSTUNBUCAqLworI2lmbmRlZiBNX1RFUk1JTkZPCisjZGVmaW5lIE1fVEVS TUlORk8KKyNlbmRpZiAvKiBNX1RFUk1JTkZPICovCisjZW5kaWYgLyogTV9YRU5JWCAqLworI2lm ZGVmIFJUQUlYCisjdW5kZWYgTkxTCQkJCS8qIEF2b2lkICdyZWRlY2xhcmF0aW9uIG9mIGZyZWUn LiAqLworI2VuZGlmIC8qIFJUQUlYICovCisjaW5jbHVkZSA8Y3Vyc2VzLmg+CisjaWZkZWYgQ0tY UFJJTlRGCisjZGVmaW5lIHByaW50ZiBja3hwcmludGYKKyNlbmRpZiAvKiBDS1hQUklOVEYgKi8K KyNlbmRpZiAvKiBDS19OQ1VSU0VTICovCisjZW5kaWYgLyogTVlDVVJTRVMgKi8KKyNlbmRpZiAv KiBWTVMgKi8KKworI2lmZGVmIEJVRzk5OQorX1BST1RPVFlQKGludCB0Z2V0ZW50LChjaGFyICos IGNoYXIgKikpOworX1BST1RPVFlQKGNoYXIgKnRnZXRzdHIsKGNoYXIgKiwgY2hhciAqKikpOwor X1BST1RPVFlQKGludCB0cHV0cywoY2hhciAqLCBpbnQsIGludCAoKikoKSkpOworX1BST1RPVFlQ KGNoYXIgKnRnb3RvLChjb25zdCBjaGFyICosIGludCwgaW50KSk7CisjZW5kaWYJLyogQlVHOTk5 ICovCisKKyNlbmRpZiAvKiBDS19DVVJTRVMgKi8KKworLyogIEYgWCBEIEkgTiBJIFQgIC0tICBG aWxlIFhmZXIgRGlzcGxheSBJbml0aWFsaXphdGlvbiAgKi8KKworI2lmZGVmIENLX0NVUlNFUwor I2lmbmRlZiBNWUNVUlNFUworI2lmbmRlZiBDS19TTUcKK3N0YXRpYworI2lmZGVmIENLX0FOU0lD CisvKiBDYW4ndCB1c2UgVk9JRCBiZWNhdXNlIG9mIGN1cnNlcy5oICovCit2b2lkCitja190ZXJt c2V0KGludCk7CisjZWxzZQorY2tfdGVybXNldCgpOworI2VuZGlmIC8qIENLX0FOU0lDICovCisj ZW5kaWYgLyogQ0tfU01HICovCisjZW5kaWYgLyogTVlDVVJTRVMgKi8KKyNlbmRpZiAvKiBDS19D VVJTRVMgKi8KKworI2lmZGVmIE5PVEVSTUNBUAorc3RhdGljIGludCBub3Rlcm1jYXAgPSAxOwor I2Vsc2UKK3N0YXRpYyBpbnQgbm90ZXJtY2FwID0gMDsKKyNlbmRpZiAvKiBOT1RFUk1DQVAgKi8K KworI2lmbmRlZiBOT0RJU1BMQVkKK0NLVk9JRAorZnhkaW5pdCh4ZGlzcGxhKSBpbnQgeGRpc3Bs YTsgeworI2lmbmRlZiBDT0hFUkVOVAorI2lmbmRlZiBPUzIKKyNpZm5kZWYgU1RSQVRVUworICAg IGNoYXIgKnM7CisgICAgaW50IHgsIGR1bW15OworCisgICAgZGVidWcoRjEwMSwiZnhkaW5pdCB4 ZGlzcGxhIiwiIix4ZGlzcGxhKTsKKyAgICBkZWJ1ZyhGMTAxLCJmeGRpbml0IGZ4ZF9pbml0ZWQi LCIiLGZ4ZF9pbml0ZWQpOworCisjaWZkZWYgSUtTRAorI2lmbmRlZiBOT1hGRVIKKyAgICAvKiBO byBjdXJzZXMgZm9yIElLU0QgKi8KKyAgICBpZiAoaW5zZXJ2ZXIpIHsKKyAgICAgICAgZmRpc3Bs YSA9IFhZRkRfTjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoZnhkX2luaXRlZCkg ICAgICAgICAgICAgICAgICAgICAvKiBPbmx5IGRvIHRoaXMgb25jZSAqLworICAgICAgcmV0dXJu OworI2VuZGlmIC8qIE5PWEZFUiAqLworI2VuZGlmIC8qIElLU0QgKi8KKworICAgIGlmICh4ZGlz cGxhID09IFhZRkRfUiB8fCB4ZGlzcGxhID09IFhZRkRfUyB8fCB4ZGlzcGxhID09IFhZRkRfQikg eworCWlmICh4ZnJtc2cpIHsKKwkgICAgcHJpbnRmKCIlc1xuIix4ZnJtc2cpOworCSAgICBtYWtl c3RyKCZ4ZnJtc2csTlVMTCk7CisJfQorICAgIH0KKworI2lmZGVmIENLX0NVUlNFUworI2lmZGVm IFZNUworICAgIC8qIEZvcmNlIEJSSUVGIGluIEJhdGNoIGxvZ3MgKi8KKyAgICBpZiAoYmF0Y2gg JiYgKHhkaXNwbGEgPT0gWFlGRF9DIHx8IHhkaXNwbGEgPT0gWFlGRF9TKSkKKyAgICAgIHhkaXNw bGEgPSBYWUZEX0I7CisjZWxzZQorICAgIGlmICh4ZGlzcGxhID09IFhZRkRfQyB8fCB4ZGlzcGxh ID09IDk5OTkpIHsKKworI2lmZGVmIERZTkFNSUMKKyAgICAgICAgaWYgKCF0cm1idWYpIHsKKy8q CisgIEFsbG9jYXRlIHRnZXRlbnQoKSBidWZmZXIuICBNYWtlIGl0IGJpZyAtLSBzb21lIHRlcm1j YXBzIGNhbiBiZSBodWdlOworICB0Z2V0ZW50KCkgbWVycmlseSB3cml0ZXMgcGFzdCB0aGUgZW5k IG9mIHRoZSBidWZmZXIsIGNhdXNpbmcgY29yZSBkdW1wcworICBvciB3b3JzZS4KKyovCisgICAg ICAgICAgICB0cm1idWYgPSAoY2hhciAqKW1hbGxvYyhUUk1CVUZMKTsKKyAgICAgICAgICAgIGlm ICghdHJtYnVmKSB7CisgICAgICAgICAgICAgICAgbm90ZXJtY2FwID0gMTsKKyAgICAgICAgICAg ICAgICBkZWJ1ZyhGMTAxLCJmeGRpbml0IG1hbGxvYyB0cm1idWYiLCJGQUlMRUQiLFRSTUJVRkwp OworICAgICAgICAgICAgICAgIGZkaXNwbGEgPSBYWUZEX1M7CisgICAgICAgICAgICAgICAgcmV0 dXJuOworICAgICAgICAgICAgfQorI2lmZGVmIENPTU1FTlQKKyAgICAgICAgICAgIGRlYnVnKEYx MTEsImZ4ZGluaXQgbWFsbG9jIHRybWJ1ZiIsIk9LIixUUk1CVUZMKTsKKyAgICAgICAgICAgIGRl YnVnKEYwMDEsImZ4ZGluaXQgdHJtYnVmIiwiIix0cm1idWYpOworICAgICAgICAgICAgbWVtc2V0 KHRybWJ1ZiwnXDAnLChzaXplX3QpVFJNQlVGTCk7CisgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJm eGRpbml0IG1lbXNldCBPSyIsIiIsMCk7CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAgICB9 CisjZW5kaWYgLyogRFlOQU1JQyAqLworCisgICAgICAgIGRlYnVnKEYxMDAsImZ4ZGluaXQgYmVm b3JlIGdldGVudihURVJNKSIsIiIsMCk7CisgICAgICAgIHMgPSBnZXRlbnYoIlRFUk0iKTsKKyAg ICAgICAgZGVidWcoRjExMCwiZnhkaW5pdCBhZnRlciBnZXRlbnYoVEVSTSkiLHMsMCk7CisgICAg ICAgIGlmICghcykgcyA9ICIiOworICAgICAgICBpZiAoKnMpIHsKKyAgICAgICAgICAgIGRlYnVn KEYxMTAsImZ4ZGluaXQgYmVmb3JlIHRnZXRlbnQoKSIscywwKTsKKyAgICAgICAgICAgIHggPSB0 Z2V0ZW50KHRybWJ1ZixzKTsKKyAgICAgICAgICAgIGRlYnVnKEYxMTEsImZ4ZGluaXQgdGdldGVu dCIscyx4KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHggPSAwOworICAgICAgICAg ICAgbm90ZXJtY2FwID0gMTsKKyAgICAgICAgICAgIGRlYnVnKEYxMTAsImZ4ZGluaXQgVEVSTSBu dWxsIC0gbm8gdGdldGVudCIscywwKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoeCA8IDEgJiYg IXF1aWV0ICYmICFiYWNrZ3JkCisjaWZkZWYgVk1TCisgICAgICAgICAgICAmJiAhYmF0Y2gKKyNl bmRpZiAvKiBWTVMgKi8KKyAgICAgICAgICAgICkgeworICAgICAgICAgICAgcHJpbnRmKCJXYXJu aW5nOiB0ZXJtaW5hbCB0eXBlIHVua25vd246IFwiJXNcIlxuIixzKTsKKyNpZmRlZiBDT01NRU5U CisJICAgIC8qIENvbmZ1c2luZyAtIG5vYm9keSBrbm93cyB3aGF0IHRoaXMgbWVhbnMgKi8KKyAg ICAgICAgICAgIHByaW50ZigiU0NSRUVOIGNvbW1hbmQgd2lsbCB1c2UgQU5TSSBzZXF1ZW5jZXMu XG4iKTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgICAgICAgICBpZiAobG9jYWwpCisgICAg ICAgICAgICAgIHByaW50ZigiRnVsbHNjcmVlbiBmaWxlIHRyYW5zZmVyIGRpc3BsYXkgZGlzYWJs ZWQuXG4iKTsKKyAgICAgICAgICAgIGZkaXNwbGEgPSBYWUZEX1M7CisgICAgICAgIH0KKyNpZm5k ZWYgTVlDVVJTRVMKKyNpZm5kZWYgQ0tfU01HCisgICAgICAgIGNrX3Rlcm1zZXQoeCk7CisjZW5k aWYgLyogQ0tfU01HICovCisjZW5kaWYgLyogTVlDVVJTRVMgKi8KKyAgICAgICAgZnhkX2luaXRl ZCA9IDE7CisgICAgfQorI2VuZGlmIC8qIENLX0NVUlNFUyAqLworI2VuZGlmIC8qIFZNUyAqLwor I2VuZGlmIC8qIFNUUkFUVVMgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBDT0hFUkVO VCAqLworfQorI2VuZGlmIC8qIE5PRElTUExBWSAqLworCisjaWZkZWYgQ0tfQ1VSU0VTCisjaWZk ZWYgQ0tfU01HCisvKgorICBMb25nIHNlY3Rpb24gZm9yIFNjcmVlbiBNYW5hZ2VyIHN0YXJ0cyBo ZXJlLi4uCisgIEJ5IFdpbGxpYW0gQmFkZXIuCisqLworI2luY2x1ZGUgImNrdnZtcy5oIgorI2lm ZGVmIE9MRF9WTVMKKyNpbmNsdWRlIDxzbWdkZWYuaD4gICAgICAgICAgICAgICAgICAgICAvKiB1 c2UgdGhpcyBvbiBWQVggQyAyLjQgKi8KKy8qICNpbmNsdWRlIDxzbWdtc2cuaD4gKi8KKyNlbHNl CisjaW5jbHVkZSA8c21nJHJvdXRpbmVzLmg+ICAgICAgICAgICAgICAgLyogTWFydGluIFppbnNl ciAqLworI2VuZGlmIC8qIE9MRF9WTVMgKi8KKworZXh0ZXJuIHVuc2lnbmVkIGludCB2bXNfc3Rh dHVzOyAgICAgLyogVXNlZCBmb3Igc3lzdGVtIHNlcnZpY2UgcmV0dXJuIHN0YXR1cyAqLworCitz dGF0aWMgbG9uZyBzbWdfcGFzdGVib2FyZF9pZCA9IC0xOyAgICAgLyogcGFzdGVib2FyZCBpZGVu dGlmaWVyICovCitzdGF0aWMgbG9uZyBzbWdfZGlzcGxheV9pZCA9IC0xOyAgICAgICAgLyogZGlz cGxheSBpZGVudGlmaWVyICovCitzdGF0aWMgaW50IHNtZ19vcGVuID0gMDsgICAgICAgICAgICAg ICAgLyogZmxhZyBpZiBzbWcgY3VycmVudCBvcGVuICovCitzdGF0aWMgaW50IHNtZ19pbml0ZWQg PSAwOyAgICAgICAgICAgICAgLyogZmxhZyBpZiBzbWcgaW5pdGlhbGl6ZWQgKi8KKworI2lmZGVm IENPTU1FTlQKKyNkZWZpbmUgY2xydG9lb2woKSAgICAgIFNNRyRFUkFTRV9MSU5FKCZzbWdfZGlz cGxheV9pZCwgMCwgMCkKKworI2RlZmluZSBjbGVhcigpICAgICAgICAgU01HJEVSQVNFX0RJU1BM QVkoJnNtZ19kaXNwbGF5X2lkLCAwLCAwLCAwLCAwKQorCisjZGVmaW5lIHRvdWNod2luKHNjcikg ICBTTUckUkVQQUlOVF9TQ1JFRU4oJnNtZ19wYXN0ZWJvYXJkX2lkKQorCisjZWxzZSAgLyogTm90 IENPTU1FTlQgKi8KKworI2RlZmluZSBjbHJ0b2VvbCgpICAgICAgc21nJGVyYXNlX2xpbmUoJnNt Z19kaXNwbGF5X2lkLCAwLCAwKQorCisjZGVmaW5lIGNsZWFyKCkgICAgICAgICBzbWckZXJhc2Vf ZGlzcGxheSgmc21nX2Rpc3BsYXlfaWQsIDAsIDAsIDAsIDApCisKKyNkZWZpbmUgdG91Y2h3aW4o c2NyKSAgIHNtZyRyZXBhaW50X3NjcmVlbigmc21nX3Bhc3RlYm9hcmRfaWQpCisjZW5kaWYgLyog Q09NTUVOVCAqLworCisjZGVmaW5lIGNsZWFyb2soY3Vyc2NyLG9rKSAgICAgICAgICAgICAgLyog TGV0IHdyZWZyZXNoKCkgZG8gdGhlIHdvcmsgKi8KKworI2RlZmluZSB3cmVmcmVzaChjdXJzcmMp IHRvdWNod2luKHNjcikKKworc3RhdGljIHZvaWQKK21vdmUocm93LCBjb2wpIGludCByb3csIGNv bDsgeworICAgIC8qIENoYW5nZSBmcm9tIDAtYmFzZWQgZm9yIGN1cnNlcyB0byAxLWJhc2VkIGZv ciBTTUcgKi8KKyAgICBpZiAoIXNtZ19vcGVuKQorICAgICAgcmV0dXJuOworICAgICsrcm93OyAr K2NvbDsKKyAgICBkZWJ1ZyhGMTExLCJWTVMgc21nIG1vdmUiLGNraXRvYShyb3cpLGNvbCk7Cisj aWZkZWYgQ09NTUVOVCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTWFydGluIFppbnNlciAq LworICAgIENIRUNLX0VSUigibW92ZTogc21nJHNldF9jdXJzb3JfYWJzIiwKKyAgICAgICAgICAg ICAgU01HJFNFVF9DVVJTT1JfQUJTKCZzbWdfZGlzcGxheV9pZCwgJnJvdywgJmNvbCkpOworI2Vs c2UKKyAgICBDSEVDS19FUlIoIm1vdmU6IHNtZyRzZXRfY3Vyc29yX2FicyIsCisgICAgICAgICAg ICAgIHNtZyRzZXRfY3Vyc29yX2Ficygmc21nX2Rpc3BsYXlfaWQsICZyb3csICZjb2wpKTsKKyNl bmRpZiAvKiBDT01NRU5UICovCisgICAgZGVidWcoRjEwMSwiVk1TIHNtZyBtb3ZlIHZtc19zdGF0 dXMiLCIiLHZtc19zdGF0dXMpOworfQorCisjaWZkZWYgVk1TX1Y0MAorI2RlZmluZSBPTERfVk1T CisjZW5kaWYgLyogVk1TX1Y0MCAqLworI2lmZGVmIFZNU19WNDIKKyNkZWZpbmUgT0xEX1ZNUwor I2VuZGlmIC8qIFZNU19WNDIgKi8KKyNpZmRlZiBWTVNfVjQ0CisjZGVmaW5lIE9MRF9WTVMKKyNl bmRpZiAvKiBWTVNfVjQ0ICovCisKK3N0YXRpYyBpbnQKK2luaXRzY3IoKSB7CisgICAgaW50IHJv d3MgPSAyNCwgY29scyA9IDgwOworICAgIGludCByb3cgPSAxLCBjb2wgPSAxOworCisgICAgZGVi dWcoRjEwMSwiVk1TIGluaXRzY3Igc21nX3Bhc3RlYm9hcmRfaWQgQSIsIiIsc21nX3Bhc3RlYm9h cmRfaWQpOworCisgICAgaWYgKHNtZ19wYXN0ZWJvYXJkX2lkID09IC0xKSB7IC8qIE9wZW4gdGhl IHNjcmVlbiAqLworI2lmZGVmIE9MRF9WTVMgICAgICAgICAgICAgICAgICAgICAvKiBOb3RlOiBS b3V0aW5lIGNhbGxzIGxvd2VyY2FzZWQgOS85NiAqLworICAgICAgICBDSEVDS19FUlIoImluaXRz Y3I6IHNtZyRjcmVhdGVfcGFzdGVib2FyZCIsCisgICAgICAgICAgICAgICAgICBzbWckY3JlYXRl X3Bhc3RlYm9hcmQoJnNtZ19wYXN0ZWJvYXJkX2lkLCAwLCAwLCAwLCAwKSk7CisjZWxzZQorICAg ICAgICAvKiBGb3IgVk1TIFY1LCBub3QgdGVzdGVkICovCisgICAgICAgIENIRUNLX0VSUigiaW5p dHNjcjogc21nJGNyZWF0ZV9wYXN0ZWJvYXJkIiwKKyAgICAgICAgICAgICAgICAgIHNtZyRjcmVh dGVfcGFzdGVib2FyZCgmc21nX3Bhc3RlYm9hcmRfaWQsIDAsIDAsIDAsIDAsIDApKTsKKyNlbmRp ZiAvKiBPTERfVk1TICovCisgICAgfQorICAgIGRlYnVnKEYxMDEsIlZNUyBpbml0c2NyIHNtZ19w YXN0ZWJvYXJkX2lkIEIiLCIiLHNtZ19wYXN0ZWJvYXJkX2lkKTsKKyAgICBpZiAoc21nX3Bhc3Rl Ym9hcmRfaWQgPT0gLTEpIHsKKwlwcmludGYoIj9FcnJvciBpbml0aWFsaXppbmcgZnVsbHNjcmVl biBkaXNwbGF5XG4iKTsKKwlmZGlzcGxhID0gWFlGRF9TOworCWRweWluaXQoKTsKKwlyZXR1cm4o MCk7CisgICAgfQorICAgIGRlYnVnKEYxMDEsIlZNUyBpbml0c2NyIHNtZ19kaXNwbGF5X2lkIiwi IixzbWdfZGlzcGxheV9pZCk7CisgICAgaWYgKHNtZ19kaXNwbGF5X2lkID09IC0xKSB7ICAgICAg ICAgLyogQ3JlYXRlIGEgZGlzcGxheSB3aW5kb3cgKi8KKworI2lmZGVmIENPTU1FTlQgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIE1hcnRpbiBaaW5zZXIgKi8KKyAgICAgICAgQ0hFQ0tfRVJS KCJpbml0c2NyOiBzbWckY3JlYXRlX3ZpcnR1YWxfZGlzcGxheSIsCisgICAgICAgICAgICAgICAg ICBTTUckQ1JFQVRFX1ZJUlRVQUxfRElTUExBWSgmcm93cywgJmNvbHMsICZzbWdfZGlzcGxheV9p ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAp KTsKKworICAgICAgICAvKiBDb25uZWN0IHRoZSBkaXNwbGF5IHdpbmRvdyB0byB0aGUgc2NyZWVu ICovCisgICAgICAgIENIRUNLX0VSUigiaW5pdHNjcjogc21nJHBhc3RlX3ZpcnR1YWxfZGlzcGxh eSIsCisgICAgICAgICAgICAgICAgICBTTUckUEFTVEVfVklSVFVBTF9ESVNQTEFZKCZzbWdfZGlz cGxheV9pZCwmc21nX3Bhc3RlYm9hcmRfaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICZyb3csJmNvbCkpOworI2Vsc2UKKyAgICAgICAgQ0hFQ0tfRVJSKCJp bml0c2NyOiBzbWckY3JlYXRlX3ZpcnR1YWxfZGlzcGxheSIsCisgICAgICAgICAgICAgICAgICBz bWckY3JlYXRlX3ZpcnR1YWxfZGlzcGxheSgmcm93cywgJmNvbHMsICZzbWdfZGlzcGxheV9pZCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDApKTsK KworICAgICAgICAvKiBDb25uZWN0IHRoZSBkaXNwbGF5IHdpbmRvdyB0byB0aGUgc2NyZWVuICov CisgICAgICAgIENIRUNLX0VSUigiaW5pdHNjcjogc21nJHBhc3RlX3ZpcnR1YWxfZGlzcGxheSIs CisgICAgICAgICAgICAgICAgICBzbWckcGFzdGVfdmlydHVhbF9kaXNwbGF5KCZzbWdfZGlzcGxh eV9pZCwmc21nX3Bhc3RlYm9hcmRfaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICZyb3csJmNvbCkpOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICB9Cisg ICAgZGVidWcoRjEwMSwiVk1TIGluaXRzY3Igc21nX29wZW4gQSIsIiIsc21nX29wZW4pOworICAg IGlmICghc21nX29wZW4pIHsgICAgICAgICAgICAgICAgICAgIC8qIFN0YXJ0IGEgYmF0Y2ggdXBk YXRlICovCisgICAgICAgIHNtZ19vcGVuID0gMTsKKyNpZmRlZiBDT01NRU5UCisgICAgICAgIENI RUNLX0VSUigiaW5pdHNjcjogc21nJGJlZ2luX3Bhc3RlYm9hcmRfdXBkYXRlIiwKKyAgICAgICAg ICAgICAgICAgIFNNRyRCRUdJTl9QQVNURUJPQVJEX1VQREFURSgmc21nX3Bhc3RlYm9hcmRfaWQp KTsKKyNlbHNlCisgICAgICAgIENIRUNLX0VSUigiaW5pdHNjcjogc21nJGJlZ2luX3Bhc3RlYm9h cmRfdXBkYXRlIiwKKyAgICAgICAgICAgICAgICAgIHNtZyRiZWdpbl9wYXN0ZWJvYXJkX3VwZGF0 ZSgmc21nX3Bhc3RlYm9hcmRfaWQpKTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisJZGVidWcoRjEw MSwiVk1TIGluaXRzY3Igc21nJGJlZ2luX3Bhc3RlYm9hcmRfdXBkYXRlIiwiIix2bXNfc3RhdHVz KTsKKyAgICB9CisgICAgZGVidWcoRjEwMSwiVk1TIGluaXRzY3Igc21nX29wZW4gQiIsIiIsc21n X29wZW4pOworICAgIHNtZ19pbml0ZWQgPSAxOworICAgIHJldHVybigxKTsKK30KKworc3RhdGlj IHZvaWQKK3JlZnJlc2goKSB7CisgICAgZGVidWcoRjEwMSwicmVmcmVzaCBzbWdfcGFzdGVib2Fy ZF9pZCIsIiIsc21nX3Bhc3RlYm9hcmRfaWQpOworCisgICAgaWYgKHNtZ19vcGVuID09IDAgfHwg c21nX3Bhc3RlYm9hcmRfaWQgPT0gLTEpCisgICAgICByZXR1cm47CisKKyNpZmRlZiBDT01NRU5U ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBNYXJ0aW4gWmluc2VyICovCisgICAgQ0hFQ0tf RVJSKCJyZWZyZXNoOiBzbWckZW5kX3Bhc3RlYm9hcmRfdXBkYXRlIiwKKyAgICAgICAgICAgICAg U01HJEVORF9QQVNURUJPQVJEX1VQREFURSgmc21nX3Bhc3RlYm9hcmRfaWQpKTsKKyAgICBDSEVD S19FUlIoInJlZnJlc2g6IHNtZyRiZWdpbl9wYXN0ZWJvYXJkX3VwZGF0ZSIsCisgICAgICAgICAg ICAgIFNNRyRCRUdJTl9QQVNURUJPQVJEX1VQREFURSgmc21nX3Bhc3RlYm9hcmRfaWQpKTsKKyNl bHNlCisgICAgQ0hFQ0tfRVJSKCJyZWZyZXNoOiBzbWckZW5kX3Bhc3RlYm9hcmRfdXBkYXRlIiwK KyAgICAgICAgICAgICAgc21nJGVuZF9wYXN0ZWJvYXJkX3VwZGF0ZSgmc21nX3Bhc3RlYm9hcmRf aWQpKTsKKyAgICBDSEVDS19FUlIoInJlZnJlc2g6IHNtZyRiZWdpbl9wYXN0ZWJvYXJkX3VwZGF0 ZSIsCisgICAgICAgICAgICAgIHNtZyRiZWdpbl9wYXN0ZWJvYXJkX3VwZGF0ZSgmc21nX3Bhc3Rl Ym9hcmRfaWQpKTsKKyNlbmRpZiAvKiBDT01NRU5UICovCit9CisKK3N0YXRpYyB2b2lkCitlbmR3 aW4oKSB7CisgICAgaWYgKCFzbWdfb3BlbikKKyAgICAgIHJldHVybjsKKworICAgIHNtZ19vcGVu ID0gMDsKKworI2lmZGVmIENPTU1FTlQKKyAgICBDSEVDS19FUlIoImVuZHdpbjogc21nJGVuZF9w YXN0ZWJvYXJkX3VwZGF0ZSIsCisgICAgICAgICAgICAgIFNNRyRFTkRfUEFTVEVCT0FSRF9VUERB VEUoJnNtZ19wYXN0ZWJvYXJkX2lkKSk7CisjZWxzZQorICAgIENIRUNLX0VSUigiZW5kd2luOiBz bWckZW5kX3Bhc3RlYm9hcmRfdXBkYXRlIiwKKyAgICAgICAgICAgICAgc21nJGVuZF9wYXN0ZWJv YXJkX3VwZGF0ZSgmc21nX3Bhc3RlYm9hcmRfaWQpKTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisK KyAgICBtb3ZlKDIyLCAwKTsKKworI2lmZGVmIENPTU1FTlQKKy8qCisgIFRoZXNlIGNhbGxzIGNs ZWFyIHRoZSBzY3JlZW4uCisgIChjb252ZXJ0IHJvdXRpbmUgY2FsbHMgdG8gbG93ZXJjYXNlIC0g TWFydGluIFppbnNlcikKKyovCisgICAgQ0hFQ0tfRVJSKCJlbmR3aW46IHNtZyRkZWxldGVfdmly dHVhbF9kaXNwbGF5IiwKKyAgICAgICAgICAgICAgU01HJERFTEVURV9WSVJUVUFMX0RJU1BMQVko JnNtZ19kaXNwbGF5X2lkKSk7CisgICAgc21nX2Rpc3BsYXlfaWQgPSAtMTsKKworICAgIENIRUNL X0VSUigiZW5kd2luOiBzbWckZGVsZXRlX3Bhc3RlYm9hcmQiLAorICAgICAgICAgICAgICBTTUck REVMRVRFX1BBU1RFQk9BUkQoJnNtZ19wYXN0ZWJvYXJkX2lkLCAwKSk7CisgICAgc21nX3Bhc3Rl Ym9hcmRfaWQgPSAtMTsKKyNlbmRpZiAvKiBDT01NRU5UICovCit9CisKKyNpZmRlZiBDT01NRU5U CisvKiBERUNDIDYuMiBzY3JlYW1zIGJsb29keSBtdXJkZXIgYWJvdXQgcHJpbnR3ICgibm90IGVu b3VnaCBhcmdzIikgKi8KKy8qIGJ1dCBhZGRpbmcgdGhlIGZvbGxvd2luZyBwcm90b3R5cGUgb25s eSBtYWtlcyBpdCBob2xsZXIgbG91ZGVyLiAqLworI2lmZGVmIF9fREVDQworLyogInZhcmFyZ3Mi IHByb3RvdHlwZSBmb3IgcHJpbnR3ICovCitfUFJPVE9UWVAoc3RhdGljIGludCBwcmludHcsKGNo YXIgKiwgLi4uKSk7CisjZW5kaWYgLyogX19ERUNDICovCisjZW5kaWYgLyogQ09NTUVOVCAqLwor CisjaWZkZWYgX19ERUNDCisjaW5jbHVkZSA8c3RkYXJnLmg+CitfUFJPVE9UWVAoc3RhdGljIHZv aWQgcHJpbnR3LChjaGFyICosIC4uLikpOworc3RhdGljIHZvaWQKK3ByaW50dyhjaGFyICpzdHIs Li4uKSB7CisgICAgY2hhciBidWZbMjU1XTsKKyAgICB2YV9saXN0IGFwOworICAgICRERVNDUklQ VE9SKHRleHRfZHNjLCAwKTsKKyAgICB0ZXh0X2RzYy5kc2MkYV9wb2ludGVyPWJ1ZjsKKyAgICBp ZiAoIXNtZ19vcGVuKQorICAgICAgcmV0dXJuOworICAgIHZhX3N0YXJ0KGFwLHN0cik7CisgICAg dGV4dF9kc2MuZHNjJHdfbGVuZ3RoID0gdnNwcmludGYoYnVmLCBzdHIsIGFwKTsKKyAgICB2YV9l bmQoYXApOworICAgIENIRUNLX0VSUigicHJpbnR3OiBzbWckcHV0X2NoYXJzIiwKKyAgICAgICAg ICAgICAgc21nJHB1dF9jaGFycygmc21nX2Rpc3BsYXlfaWQsICZ0ZXh0X2RzYywgMCwgMCwgMCwg MCwgMCkpOworfQorI2Vsc2UKK3N0YXRpYyB2b2lkCitwcmludHcoc3RyLCBhMSwgYTIsIGEzLCBh NCwgYTUsIGE2LCBhNywgYTgpCisgICAgY2hhciAqc3RyOworICAgIGxvbmcgYTEsIGEyLCBhMywg YTQsIGE1LCBhNiwgYTcsIGE4OworLyogcHJpbnR3ICovIHsKKyAgICBjaGFyIGJ1ZlsyNTVdOwor ICAgICRERVNDUklQVE9SKHRleHRfZHNjLCAwKTsKKyAgICBpZiAoIXNtZ19vcGVuKQorICAgICAg cmV0dXJuOworICAgIHRleHRfZHNjLmRzYyRhX3BvaW50ZXI9YnVmOworICAgIHRleHRfZHNjLmRz YyR3X2xlbmd0aCA9IHNwcmludGYoYnVmLCBzdHIsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3 LCBhOCk7CisgICAgQ0hFQ0tfRVJSKCJwcmludHc6IHNtZyRwdXRfY2hhcnMiLAorICAgICAgICAg ICAgICBzbWckcHV0X2NoYXJzKCZzbWdfZGlzcGxheV9pZCwgJnRleHRfZHNjLCAwLCAwLCAwLCAw LCAwKSk7Cit9CisjZW5kaWYgLyogX19ERUNDICovCisKKyNkZWZpbmUgQ0tfQ1VSUE9TCitpbnQK K2NrX2N1cnBvcyhyb3csIGNvbCkgeworICAgIGRlYnVnKEYxMTEsIlZNUyBzbWcgY2tfY3VycG9z Iixja2l0b2Eocm93KSxjb2wpOworICAgIGlmICghc21nX2luaXRlZCB8fCAhc21nX29wZW4pIHsK KyAgICAgICAgaW5pdHNjcigpOworICAgIH0KKyAgICBkZWJ1ZyhGMTAxLCJWTVMgc21nIGN1cnBv cyBzbWdfb3BlbiIsIiIsc21nX29wZW4pOworICAgIGlmICghc21nX29wZW4pCisgICAgICByZXR1 cm4oMCk7CisgICAgZGVidWcoRjExMSwiVk1TIHNtZyBja19jdXJwb3MiLGNraXRvYShyb3ctMSks Y29sLTEpOworICAgIG1vdmUocm93IC0gMSwgY29sIC0gMSk7ICAgICAgICAgICAgIC8qIFNNRyBp cyAwLWJhc2VkICovCisgICAgcmVmcmVzaCgpOworICAgIC8qIGVuZHdpbigpOyAqLworICAgIHJl dHVybigwKTsKK30KKworaW50Citja19jbHMoKSB7CisgICAgZGVidWcoRjEwMSwiVk1TIHNtZyBj a19jbHMgc21nX2luaXRlZCIsIiIsc21nX2luaXRlZCk7CisgICAgaWYgKCFzbWdfaW5pdGVkIHx8 ICFzbWdfb3BlbikgeworICAgICAgICBpbml0c2NyKCk7CisgICAgfQorICAgIGRlYnVnKEYxMDEs IlZNUyBzbWcgY2tfY2xzIHNtZ19vcGVuIiwiIixzbWdfb3Blbik7CisgICAgaWYgKCFzbWdfb3Bl bikKKyAgICAgIHJldHVybigwKTsKKyAgICBjbGVhcigpOworICAgIHJlZnJlc2goKTsKKyAgICAv KiBlbmR3aW4oKTsgKi8KKyAgICByZXR1cm4oMCk7Cit9CisKK2ludAorY2tfY2xlb2woKSB7Cisg ICAgZGVidWcoRjEwMSwiVk1TIHNtZyBja19jbGVvbCBzbWdfaW5pdGVkIiwiIixzbWdfaW5pdGVk KTsKKyAgICBpZiAoIXNtZ19pbml0ZWQgfHwgIXNtZ19vcGVuKSB7CisgICAgICAgIGluaXRzY3Io KTsKKyAgICB9CisgICAgZGVidWcoRjEwMSwiVk1TIHNtZyBja19jbGVvbCBzbWdfb3BlbiIsIiIs c21nX29wZW4pOworICAgIGlmICghc21nX29wZW4pCisgICAgICByZXR1cm4oMCk7CisgICAgY2xy dG9lb2woKTsKKyAgICByZWZyZXNoKCk7CisgICAgLyogZW5kd2luKCk7ICovCisgICAgcmV0dXJu KDApOworfQorI2VuZGlmIC8qIENLX1NNRyAqLworCisjaWZkZWYgTVlDVVJTRVMKKy8qCisgIERv LWl0LXlvdXJzZWxmIGN1cnNlcyBpbXBsZW1lbnRhdGlvbiBmb3IgVk1TLCBPUy8yIGFuZCBvdGhl ciBBTlNJL1ZULTEwMCdzLgorICBTdXBwb3J0cyBvbmx5IHRoZSBWVDUyIGFuZCBWVDF4eCAoYW5k IGxhdGVyIFZUMnh4LzN4eC80eHgpIHRlcm1pbmFscy4KKyAgQnkgVGVycnkgS2VubmVkeSwgU3Qg UGV0ZXJzIENvbGxlZ2UuCisKKyAgRmlyc3QsIHNvbWUgc3R1ZmYgd2UgY2FuIGp1c3QgaWdub3Jl OgorKi8KKworc3RhdGljIGludAordG91Y2h3aW4oeCkgaW50IHg7IHsKKyAgICByZXR1cm4oMCk7 Cit9CitzdGF0aWMgaW50Citpbml0c2NyKCkgeworICAgIHJldHVybigwKTsKK30KK3N0YXRpYyBp bnQKK3JlZnJlc2goKSB7CisgICAgcmV0dXJuKDApOworfQorc3RhdGljIGludAorZW5kd2luKCkg eworICAgIHJldHVybigwKTsKK30KKworLyoKKyAqIE5vdywgc29tZSBzdHVmZiB3ZSBuZWVkIHRv IGRvOgorICovCisKK19QUk9UT1RZUCggaW50IG1vdmUsIChpbnQsIGludCkgKTsKKyNpZm5kZWYg T1MyCitpbnQKK21vdmUocm93LCBjb2wpIGludCByb3csIGNvbDsgeworICAgIGlmIChpc3Z0NTIp CisgICAgICBwcmludGYoIlwwMzNZJWMlYyIsIHJvdyArIDAzNywgY29sICsgMDM3KTsKKyAgICBl bHNlCisgICAgICBwcmludGYoIlwwMzNbJWQ7JWRIIiwgcm93ICsgMSwgY29sICsgMSk7CisgICAg cmV0dXJuKDApOworfQorCitpbnQKK2NsZWFyKCkgeworICAgIG1vdmUoMCwwKTsKKyAgICBpZiAo aXN2dDUyKQorICAgICAgcHJpbnRmKCJcMDMzSiIpOworICAgIGVsc2UKKyAgICAgIHByaW50Zigi XDAzM1tKIik7CisgICAgcmV0dXJuKDApOworfQorCitpbnQKK2NscnRvZW9sKCkgeworICAgIGlm IChpc3Z0NTIpCisgICAgICBwcmludGYoIlwwMzNLIik7CisgICAgZWxzZQorICAgICAgcHJpbnRm KCJcMDMzW0siKTsKKyAgICByZXR1cm4oMCk7Cit9CisKKyNkZWZpbmUgQ0tfQ1VSUE9TCitpbnQK K2NrX2NscygpIHsKKyAgICByZXR1cm4oY2xlYXIoKSk7Cit9CisKK2ludAorY2tfY2xlb2woKSB7 CisgICAgcmV0dXJuKGNscnRvZW9sKCkpOworfQorCitpbnQKK2NrX2N1cnBvcyhyb3csIGNvbCkg aW50IHJvdywgY29sOyB7CisgICAgbW92ZShyb3csIGNvbCk7CisgICAgcmV0dXJuKDApOworfQor CisjZWxzZSAvKiBPUzIgKi8KKy8qIFdpbmRvd3MgTlQgYW5kIFdpbmRvd3MgOTUgZG8gbm90IHBy b3ZpZGUgQU5TSSBlbXVsYXRpb24gKi8KKy8qIFRoZXJlZm9yZSB3ZSBtaWdodCBhcyB3ZWxsIG5v dCB1c2UgaXQgZm9yIE9TLzIgZWl0aGVyICAgKi8KKworaW50Cittb3ZlKHJvdywgY29sKSBpbnQg cm93LCBjb2w7IHsKKyNpZm5kZWYgT05FVEVSTVVQRAorICAgIFNldEN1clBvcyhyb3csIGNvbCk7 CisjZW5kaWYgLyogT05FVEVSTVVQRCAqLworICAgIGxnb3RveHkoIFZDTUQsIGNvbCsxLCByb3cr MSk7CisgICAgVnNjcm5Jc0RpcnR5KFZDTUQpOworICAgIHJldHVybigwKTsKK30KKworaW50Citj bGVhcigpIHsKKyAgICB2aW9jZWxsIGNlbGw7CisgICAgbW92ZSgwLDApOworI2lmZGVmIE9ORVRF Uk1VUEQKKyAgICBpZiAoVnNjcm5HZXRCdWZmZXJTaXplKFZDTUQpID4gMCkgeworICAgICAgICBW c2NyblNjcm9sbChWQ01ELCBVUFdBUkQsIDAsCisgICAgICAgICAgICAgICAgICAgIFZzY3JuR2V0 SGVpZ2h0KFZDTUQpLSgxKSwKKyAgICAgICAgICAgICAgICAgICAgVnNjcm5HZXRIZWlnaHQoVkNN RCktKDApLCBUUlVFLCBDSFJfU1ApOworICAgICAgICBjbGVhcnRlcm1zY3JlZW4oVkNNRCk7Cisg ICAgfQorI2Vsc2UKKyAgICBjZWxsLmMgPSAnICc7CisgICAgY2VsbC5hID0gY29sb3JjbWQ7Cisg ICAgV3J0TkNlbGwoY2VsbCwgY21kX3Jvd3MgKiBjbWRfY29scywgMCwgMCk7CisjZW5kaWYgLyog T05FVEVSTVVQRCAqLworICAgIHJldHVybigwKTsKK30KKworaW50CitjbHJ0b2VvbCgpIHsKKyAg ICBVU0hPUlQgcm93LCBjb2w7CisgICAgdmlvY2VsbCBjZWxsOworCisgICAgY2VsbC5jID0gJyAn OworICAgIGNlbGwuYSA9IGNvbG9yY21kOworI2lmbmRlZiBPTkVURVJNVVBECisgICAgR2V0Q3Vy UG9zKCZyb3csICZjb2wgKTsKKyAgICBXcnROQ2VsbChjZWxsLCBjbWRfY29scyAtIGNvbCAtMSwg cm93LCBjb2wpOworI2VuZGlmIC8qIE9ORVRFUk1VUEQgKi8KKyAgICBjbHJ0b2VvbG4oVkNNRCxD SFJfU1ApOworICAgIHJldHVybigwKTsKK30KKworI2RlZmluZSBDS19DVVJQT1MKK2ludAorY2tf Y3VycG9zKHJvdywgY29sKSBpbnQgcm93LCBjb2w7IHsKKyAgICBtb3ZlKHJvdywgY29sKTsKKyAg ICByZXR1cm4oMCk7Cit9CisKK2ludAorY2tfY2xzKCkgeworICAgIHJldHVybihjbGVhcigpKTsK K30KKworaW50Citja19jbGVvbCgpIHsKKyAgICByZXR1cm4oY2xydG9lb2woKSk7Cit9CisKKyNl bmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBNWUNVUlNFUyAqLworCisjaWZuZGVmIE5PVEVSTUNB UAorI2lmbmRlZiBDS19DVVJQT1MKKyNkZWZpbmUgQ0tfQ1VSUE9TCisKKy8qIFRlcm1jYXAvVGVy bWluZm8gc2VjdGlvbiAqLworCitzdGF0aWMgY2hhciBjdXJfY2xzWzMyXSA9IHsgTlVMLCBOVUwg fTsKK3N0YXRpYyBjaGFyIGN1cl9jbGVvbFszMl0gPSB7IE5VTCwgTlVMIH07CitzdGF0aWMgY2hh ciBjdXJfY21bNjRdID0geyBOVUwsIE5VTCB9Oworc3RhdGljIGNoYXIgdGdzYnVmWzEyOF0gPSB7 IE5VTCwgTlVMIH07CisKK3N0YXRpYworI2lmZGVmIENLX0FOU0lDCit2b2lkCisjZW5kaWYgLyog Q0tfQU5TSUMgKi8KK2NrX3Rlcm1zZXQoeCkgaW50IHg7IHsKKyAgICBjdXJfY2xzWzBdID0gTlVM OworICAgIGN1cl9jbGVvbFswXSA9IE5VTDsKKyAgICBjdXJfY21bMF0gPSBOVUw7CisjaWZkZWYg dGdldGVudAorICAgIGRlYnVnKEYxMDAsInRnZXRlbnQgaXMgYSBtYWNybyIsIiIsMCk7CisjZW5k aWYgLyogdGdldGVudCAqLworI2lmZGVmIHRnZXRzdHIKKyAgICBkZWJ1ZyhGMTAwLCJ0Z2V0c3Ry IGlzIGEgbWFjcm8iLCIiLDApOworI2VuZGlmIC8qIHRnZXRzdHIgKi8KKyNpZmRlZiB0cHV0cwor ICAgIGRlYnVnKEYxMDAsInRwdXRzIGlzIGEgbWFjcm8iLCIiLDApOworI2VuZGlmIC8qIHRwdXRz ICovCisjaWZkZWYgdGdvdG8KKyAgICBkZWJ1ZyhGMTAwLCJ0Z290byBpcyBhIG1hY3JvIiwiIiww KTsKKyNlbmRpZiAvKiB0Z290byAqLworI2lmZGVmIE5PVEVSTUNBUAorICAgIC8qIHRnZXRzdHIo KSBnZXRzIGEgc2VnbWVudGF0aW9uIGZhdWx0IG9uIE9TRi8xICovCisgICAgZGVidWcoRjEwMCwi Y2tfdGVybXNldCBOT1RFUk1DQVAiLCIiLDApOworI2Vsc2UKKyAgICBpZiAobm90ZXJtY2FwKSB7 CisgICAgICAgIGRlYnVnKEYxMDAsImNrX3Rlcm1zZXQgbm90ZXJtY2FwIiwiIiwwKTsKKyAgICAg ICAgcmV0dXJuOworICAgIH0KKyAgICBkZWJ1ZyhGMTAxLCJja190ZXJtc2V0IHgiLCIiLHgpOwor ICAgIGlmICh4ID4gMCkgeworICAgICAgICBjaGFyICogYnA7CisgICAgICAgIGJwID0gdGdzYnVm OworICAgICAgICAqYnAgPSBOVUw7CisgICAgICAgIGRlYnVnKEYxMTAsImNrX3Rlcm1zZXQgY2Fs bGluZyB0Z2V0c3RyIiwiY2wiLDApOworICAgICAgICBpZiAodGdldHN0cigiY2wiLCAmYnApKSB7 ICAgICAgIC8qIEdldCBjbGVhci1zY3JlZW4gY29kZSAqLworICAgICAgICAgICAgZGVidWcoRjEx MCwiY2tfdGVybXNldCB0Z2V0c3RyIGNsIix0Z3NidWYsIiIpOworICAgICAgICAgICAgaWYgKChp bnQpc3RybGVuKHRnc2J1ZikgPCAzMikKKyAgICAgICAgICAgICAgY2tzdHJuY3B5KGN1cl9jbHMs dGdzYnVmLDMyKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgcmV0dXJuOworICAgICAgICBi cCA9IHRnc2J1ZjsKKyAgICAgICAgaWYgKHRnZXRzdHIoImNlIiwgJmJwKSkgeyAgICAgICAvKiBH ZXQgY2xlYXItdG8tZW5kLW9mLWxpbmUgY29kZSAqLworICAgICAgICAgICAgZGVidWcoRjExMCwi Y2tfdGVybXNldCB0Z2V0c3RyIGNlIix0Z3NidWYsIiIpOworICAgICAgICAgICAgaWYgKChpbnQp c3RybGVuKHRnc2J1ZikgPCAzMikKKyAgICAgICAgICAgICAgY2tzdHJuY3B5KGN1cl9jbGVvbCx0 Z3NidWYsMzIpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICByZXR1cm47CisgICAgICAgIGJw ID0gdGdzYnVmOworICAgICAgICBpZiAodGdldHN0cigiY20iLCAmYnApKSB7ICAgICAgIC8qIEdl dCBjdXJzb3ItbW92ZW1lbnQgY29kZSAqLworICAgICAgICAgICAgZGVidWcoRjExMCwiY2tfdGVy bXNldCB0Z2V0c3RyIGNtIix0Z3NidWYsIiIpOworICAgICAgICAgICAgaWYgKChpbnQpc3RybGVu KHRnc2J1ZikgPCA2NCkKKyAgICAgICAgICAgICAgY2tzdHJuY3B5KGN1cl9jbSx0Z3NidWYsNjQp OworICAgICAgICB9IGVsc2UKKyAgICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmIC8qIE5P VEVSTUNBUCAqLworfQorCisjaWZuZGVmIFRQVVRTRk5UWVBFCisjaWZkZWYgVFBVVFNJU1ZPSUQK KyNkZWZpbmUgVFBVVFNGTlRZUEUgdm9pZAorI2Vsc2UKKyNkZWZpbmUgVFBVVFNGTlRZUEUgaW50 CisjZW5kaWYgLyogVFBVVFNJU1ZPSUQgKi8KKyNlbmRpZiAvKiBUUFVUU0ZOVFlQRSAqLworCisj aWZuZGVmIFRQVVRTQVJHVFlQRQorI2lmZGVmIEhQVVg5CisjZGVmaW5lIFRQVVRTQVJHVFlQRSBj aGFyCisjZWxzZQorI2lmZGVmIEhQVVgxMAorI2RlZmluZSBUUFVUU0FSR1RZUEUgY2hhcgorI2Vs c2UKKyNkZWZpbmUgVFBVVFNBUkdUWVBFIGludAorI2VuZGlmIC8qIEhQVVgxMCAqLworI2VuZGlm IC8qIEhQVVg5ICovCisjZW5kaWYgLyogVFBVVFNBUkdUWVBFICovCisKK3N0YXRpYyBUUFVUU0ZO VFlQRQorI2lmZGVmIENLX0FOU0lDCitja19vdXRjKFRQVVRTQVJHVFlQRSB4KQorI2Vsc2UKK2Nr X291dGMoeCkgVFBVVFNBUkdUWVBFIHg7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUbyBzYXRpc2Z5IHRwdXRzKCkgYXJn MyBwcm90b3R5cGUgKi8KKyAgICBpbnQgcmM7CisgICAgY2hhciBjOworICAgIGMgPSAoY2hhcikg eDsKKyAgICByYyA9IChpbnNlcnZlcikgPyB0dG9jKGMpIDogY29ub2MoYyk7CisjaWZuZGVmIFRQ VVRTSVNWT0lECisgICAgcmV0dXJuKHJjKTsKKyNlbmRpZiAvKiBUUFVUU0lTVk9JRCAqLworfQor CitpbnQKK2NrX2N1cnBvcyhyb3csIGNvbCkgaW50IHJvdywgY29sOyB7CisjaWZkZWYgQ0tfQU5T SUMKKyAgICBUUFVUU0ZOVFlQRSAoKmZuKShUUFVUU0FSR1RZUEUpOworI2Vsc2UKKyAgICBUUFVU U0ZOVFlQRSAoKmZuKSgpOworI2VuZGlmIC8qIENLX0FOU0lDICovCisgICAgaWYgKCFmeGRfaW5p dGVkKQorICAgICAgZnhkaW5pdCg5OTk5KTsKKyAgICBpZiAoIWN1cl9jbVswXSkgeyAgICAgICAg ICAgICAgICAgICAvKiBXZSBkb24ndCBoYXZlIGVzY2FwZSBzZXF1ZW5jZXMgKi8KKyNpZmRlZiBD T01NRU5UCisgICAgICAgIHJldHVybigtMSk7ICAgICAgICAgICAgICAgICAgICAgLyogRG8gbm90 aGluZyAqLworI2Vsc2UKKyAgICAgICAgLyogQm90aCBDLUtlcm1pdCdzIFNDUkVFTiBjb21tYW5k IGFuZCBBTlNJL1ZUMTAwIGFyZSAxLWJhc2VkICovCisgICAgICAgIHByaW50ZigiXDAzM1slZDsl ZEgiLCByb3csIGNvbCk7IC8qIE9yIGRlZmF1bHQgdG8gQU5TSSAqLworI2VuZGlmIC8qIENPTU1F TlQgKi8KKyAgICB9IGVsc2UgeworICAgICAgICBmbiA9IGNrX291dGM7CisgICAgICAgIC8qIHRl cm1jYXAvdGVybWluZm8gaXMgMC1iYXNlZCAqLworICAgICAgICB0cHV0cygKKyNpZmRlZiBUUFVU U0FSRzFDT05TVAorICAgICAgICAgICAgICAoY29uc3QgY2hhciAqKQorI2VuZGlmIC8qIFRQVVRT QVJHMUNPTlNUICovCisgICAgICAgICAgICAgIHRnb3RvKGN1cl9jbSxjb2wtMSxyb3ctMSksMSxm bik7CisgICAgfQorICAgIHJldHVybigwKTsKK30KKworaW50Citja19jbHMoKSB7CisjaWZkZWYg Q0tfQU5TSUMKKyAgICBUUFVUU0ZOVFlQRSAoKmZuKShUUFVUU0FSR1RZUEUpOworI2Vsc2UKKyAg ICBUUFVUU0ZOVFlQRSAoKmZuKSgpOworI2VuZGlmIC8qIENLX0FOU0lDICovCisgICAgaWYgKCFm eGRfaW5pdGVkKQorICAgICAgZnhkaW5pdCg5OTk5KTsKKyAgICBpZiAoIWN1cl9jbHNbMF0pIHsg ICAgICAgICAgICAgICAgICAvKiBJZiB3ZSBkb24ndCBoYXZlIGVzY2FwZSBzZXF1ZW5jZXMgKi8K KyNpZmRlZiBDT01NRU5UCisgICAgICAgIHJldHVybigtMSk7ICAgICAgICAgICAgICAgICAgICAg LyogRG8gbm90aGluZyAqLworI2Vsc2UKKyAgICAgICAgcHJpbnRmKCJcMDMzWztIXDAzM1sySiIp OyAgICAgICAvKiBPciBkZWZhdWx0IHRvIEFOU0kgKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisg ICAgfSBlbHNlIHsKKyAgICAgICAgZm4gPSBja19vdXRjOworICAgICAgICBkZWJ1ZyhGMTExLCJj a19jbHMgMiIsY3VyX2NscyxmeGRfaW5pdGVkKTsKKyAgICAgICAgdHB1dHMoY3VyX2NscyxjbWRf cm93cyxmbik7CisgICAgfQorICAgIHJldHVybigwKTsKK30KKworaW50Citja19jbGVvbCgpIHsK KyNpZmRlZiBDS19BTlNJQworICAgIFRQVVRTRk5UWVBFICgqZm4pKFRQVVRTQVJHVFlQRSk7Cisj ZWxzZQorICAgIFRQVVRTRk5UWVBFICgqZm4pKCk7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKyAg ICBpZiAoIWZ4ZF9pbml0ZWQpCisgICAgICBmeGRpbml0KDk5OTkpOworICAgIGlmICghY3VyX2Ns ZW9sWzBdKSB7ICAgICAgICAgICAgICAgIC8qIElmIHdlIGRvbid0IGhhdmUgZXNjYXBlIHNlcXVl bmNlcyAqLworI2lmZGVmIENPTU1FTlQKKyAgICAgICAgcmV0dXJuKC0xKTsgICAgICAgICAgICAg ICAgICAgICAvKiBEbyBub3RoaW5nICovCisjZWxzZQorICAgICAgICBwcmludGYoIlwwMzNbSyIp OyAgICAgICAgICAgICAgIC8qIE9yIHVzZSBBTlNJICovCisjZW5kaWYgLyogQ09NTUVOVCAqLwor ICAgIH0gZWxzZSB7CisgICAgICAgIGZuID0gY2tfb3V0YzsKKyAgICAgICAgdHB1dHMoY3VyX2Ns ZW9sLDEsZm4pOworICAgIH0KKyAgICByZXR1cm4oMCk7Cit9CisjZW5kaWYgLyogQ0tfQ1VSUE9T ICovCisjZWxzZQorc3RhdGljIHZvaWQKK2NrX3Rlcm1zZXQoeCkgaW50IHg7IHsKKyAgICBpZiAo eCkgcmV0dXJuOworfQorI2VuZGlmIC8qIE5PVEVSTUNBUCAqLworCisjaWZuZGVmIENLX0NVUlBP UworI2RlZmluZSBDS19DVVJQT1MKK2ludAorY2tfY2xzKCkgeworICAgIHByaW50ZigiXDAzM1s7 SFwwMzNbMkoiKTsKKyAgICByZXR1cm4oMCk7Cit9CisKK2ludAorY2tfY2xlb2woKSB7CisgICAg cHJpbnRmKCJcMDMzW0siKTsKKyAgICByZXR1cm4oMCk7Cit9CisKK2ludAorY2tfY3VycG9zKHJv dywgY29sKSBpbnQgcm93LCBjb2w7IHsKKyAgICBwcmludGYoIlwwMzNbJWQ7JWRIIiwgcm93LCBj b2wpOworICAgIHJldHVybigwKTsKK30KKyNlbmRpZiAvKiBDS19DVVJQT1MgKi8KKworCisjaWZu ZGVmIE5PWEZFUgorc3RhdGljIGludCBjaW5pdCA9IDA7ICAgICAgICAgICAgICAgICAgIC8qIEZs YWcgZm9yIGN1cnNlcyBpbml0J2QgKi8KK3N0YXRpYyBpbnQgY2VuZHcgPSAwOyAgICAgICAgICAg ICAgICAgICAvKiBlbmR3aW4oKSB3YXMgY2FsbGVkICovCisKK3N0YXRpYworI2lmZGVmIENLX0FO U0lDICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEJlY2F1c2UgVk9JRCB1c2VkIGJ5IGN1cnNl cy5oICovCit2b2lkCisjZWxzZQorI2lmZGVmIE1ZQ1VSU0VTCitWT0lECisjZWxzZQoraW50Cisj ZW5kaWYgLyogTVlDVVJTRVMgKi8KKyNlbmRpZiAvKiBDS19BTlNJQyAqLworI2lmZGVmIENLX0FO U0lDICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVwZGF0ZSAlIHRyYW5zZmVyZWQgYW5kICUg YmFyICovCit1cGRwY3QobG9uZyBvbGQsIGxvbmcgbmV3KQorI2Vsc2UgLyogQ0tfQU5TSUMgKi8K K3VwZHBjdChvbGQsIG5ldykgbG9uZyBvbGQsIG5ldzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLwor LyogdXBkcGN0ICovIHsKKyNpZmRlZiBDT01NRU5UCisgICAgaW50IG0sIG47CisgICAgbW92ZShD V19QQ0QsMjIpOworICAgIHByaW50dygiJWxkIiwgbmV3KTsKKyNpZmRlZiBLVUkKKyNpZm5kZWYg Szk1RworICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfUENE LCAobG9uZykgbmV3KTsKKyNlbmRpZiAvKiBLOTVHICovCisjZW5kaWYgLyogS1VJICovCisjaWZk ZWYgQ0tfUENUX0JBUgorICAgIGlmICh0aGVybW9tZXRlcikgeworICAgICAgICBpZiAob2xkID4g bmV3KSB7CisgICAgICAgICAgICBvbGQgPSAwOworICAgICAgICAgICAgbW92ZShDV19QQ0QsIDI2 KTsKKyAgICAgICAgICAgIGNscnRvZW9sKCk7CisgICAgICAgIH0KKyAgICAgICAgbSA9IG9sZC8y OworICAgICAgICBtb3ZlKENXX1BDRCwgMjYgKyBtKTsKKyAgICAgICAgbiA9IG5ldyAvIDIgLSBt OworI2lmbmRlZiBPUzIKKyAgICAgICAgd2hpbGUgKG4gPiAwKSB7CisgICAgICAgICAgICBpZiAo KG0gKyAxKSAlIDUgPT0gMCkKKyAgICAgICAgICAgICAgcHJpbnR3KCIqIik7CisgICAgICAgICAg ICBlbHNlCisgICAgICAgICAgICAgIHByaW50dygiPSIpOworICAgICAgICAgICAgbSsrOworICAg ICAgICAgICAgbi0tOworICAgICAgICB9CisgICAgICAgIGlmIChuZXcgJSAyICE9IDApIHByaW50 dygiLSIpOworICAgICAgICAvKiBtb3ZlKENXX1BDRCwgMjIrNTMpOyAqLworI2Vsc2UgLyogT1My ICovCisgICAgICAgIHdoaWxlIChuID4gMCkgeworICAgICAgICAgICAgcHJpbnR3KCIlYyIsICdc MzMzJyk7CisgICAgICAgICAgICBtKys7IG4tLTsKKyAgICAgICAgfQorICAgICAgICBpZiAobmV3 ICUgMiAhPSAwKQorICAgICAgICAgIHByaW50dygiJWMiLCAnXDI2MScpOworI2VuZGlmIC8qIE9T MiAqLworICAgIH0KKyNlbmRpZiAvKiBDS19QQ1RfQkFSICovCisgICAgLyogY2xydG9lb2woKTsg Ki8KKyNlbHNlICAvKiAhQ09NTUVOVCAqLworI2lmZGVmIE9TMgorI2RlZmluZSBDSEFSMSAgICdc MzMzJyAgICAgICAgICAvKiBPUzIgLSBDUDQzNyAqLworI2RlZmluZSBDSEFSMiAgICdcMjYxJwor I2Vsc2UKKyNkZWZpbmUgQ0hBUjEgICAnLycgICAgICAgICAgICAgLyogRGVmYXVsdCAqLworI2Rl ZmluZSBDSEFSMiAgICctJworI2VuZGlmIC8qIE9TMiAqLworICAgIGRlYnVnKEYxMDEsInVwZHBj dCBvbGQiLCIiLG9sZCk7CisgICAgZGVidWcoRjEwMSwidXBkcGN0IG5ldyIsIiIsbmV3KTsKKyAg ICBtb3ZlKENXX1BDRCwyMik7CisgICAgcHJpbnR3KCIlLTNsZCIsIG5ldyk7IC8qICAod2FzKSAg IHByaW50dygiJWxkIiwgbmV3KTsgICovCisjaWZkZWYgS1VJCisjaWZuZGVmIEs5NUcKKyAgICBL dWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19QQ0QsIChsb25nKSBu ZXcgKTsKKyNlbmRpZiAvKiBLOTVHICovCisjZW5kaWYgLyogS1VJICovCisjaWZkZWYgQ0tfUENU X0JBUgorICAgIGlmICh0aGVybW9tZXRlcikgeworICAgICAgICBpbnQgbSwgbjsKKworICAgICAg ICBpZiAob2xkID4gbmV3KSB7CisgICAgICAgICAgICBvbGQgPSAwIDsKKyAgICAgICAgICAgIG1v dmUoQ1dfUENELCAyNik7CisgICAgICAgICAgICBjbHJ0b2VvbCgpOworICAgICAgICB9CisgICAg ICAgIGlmIChuZXcgPD0gMTAwTCkgeworICAgICAgICAgICAgbSA9IG9sZCAvIDI7CisgICAgICAg ICAgICBuID0gbmV3IC8gMiAtIG07CisgICAgICAgICAgICBtb3ZlKENXX1BDRCwgMjYrbSk7Cisg ICAgICAgICAgICB3aGlsZSAobi0tID4gMCkKKyAgICAgICAgICAgICAgcHJpbnR3KCIlYyIsIENI QVIxKTsKKyAgICAgICAgICAgIGlmIChuZXcgJSAyICE9IDApCisgICAgICAgICAgICAgIHByaW50 dygiJWMiLCBDSEFSMik7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgLyogQ0tfUENUX0JBUiAq LworI2VuZGlmIC8qIENPTU1FTlQgKi8KK30KKworc3RhdGljIENLX09GRl9UIG9sZF90ciA9IChD S19PRkZfVCktMTsJLyogVGltZSByZW1haW5pbmcgcHJldmlvdXNseSAqLworCitzdGF0aWMgQ0tf T0ZGX1QKKyNpZmRlZiBDS19BTlNJQworc2hvZXRsKENLX09GRl9UIG9sZF90ciwgbG9uZyBjcHMs IENLX09GRl9UIGZzaXosIENLX09GRl9UIGhvd2ZhcikKKyNlbHNlCisgICAgc2hvZXRsKG9sZF90 ciwgY3BzLCBmc2l6LCBob3dmYXIpIGxvbmcgY3BzOyBDS19PRkZfVCBvbGRfdHIsIGZzaXosIGhv d2ZhcjsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogc2hvZXRsICovIHsgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIEVzdGltYXRlZCB0aW1lIGxlZnQgaW4gdHJhbnNmZXIgKi8KKyAgICBD S19PRkZfVCB0cjsJCQkvKiBUaW1lIHJlbWFpbmluZywgc2Vjb25kcyAqLworCisjaWZkZWYgR0ZU SU1FUgorICAgIGlmIChmc2l6ID4gMEwgJiYgY3BzID4gMEwpCisgICAgICB0ciA9IChDS19PRkZf VCkoKENLRkxPQVQpKGZzaXogLSBob3dmYXIpIC8gKENLRkxPQVQpY3BzKTsKKyAgICBlbHNlCisg ICAgICB0ciA9IChDS19PRkZfVCktMTsKKyNlbHNlCisgICAgdHIgPSAoZnNpeiA+IDBMICYmIGNw cyA+IDBMKSA/CisgICAgICAoKGZzaXogLSBob3dmYXIpIC8gY3BzKSA6CisgICAgICAgIChDS19P RkZfVCktMTsKKyNlbmRpZiAvKiBHRlRJTUVSICovCisgICAgbW92ZShDV19UUiwyMik7CisgICAg aWYgKHRyID4gKENLX09GRl9UKS0xKSB7CisgICAgICAgIGlmICh0ciAhPSBvbGRfdHIpIHsKKyAg ICAgICAgICAgIHByaW50dygiJXMiLGhobW1zcyh0cikpOworI2lmZGVmIEtVSQorI2lmbmRlZiBL OTVHCisgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcp Q1dfVFIsIChsb25nKWhobW1zcyh0cikpOworI2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBL VUkgKi8KKyAgICAgICAgICAgIGNscnRvZW9sKCk7CisgICAgICAgIH0KKyAgICB9IGVsc2Ugewor ICAgICAgICBwcmludHcoIih1bmtub3duKSIpOworI2lmZGVmIEtVSQorI2lmbmRlZiBLOTVHCisg ICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX1RSLCAo bG9uZykgIih1bmtub3duKSIgKTsKKyNlbmRpZiAvKiBLOTVHICovCisjZW5kaWYgLyogS1VJICov CisgICAgICAgIGNscnRvZW9sKCk7CisgICAgfQorICAgIHJldHVybih0cik7Cit9CisKK3N0YXRp YyBsb25nCisjaWZkZWYgQ0tfQU5TSUMKK3Nob2NwcyhpbnQgcGN0LCBDS19PRkZfVCBmc2l6LCBD S19PRkZfVCBob3dmYXIpCisjZWxzZQorc2hvY3BzKHBjdCwgZnNpeiwgaG93ZmFyKSBpbnQgcGN0 OyBDS19PRkZfVCBmc2l6LCBob3dmYXI7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIHNob2Nw cyAqLyB7CisjaWZkZWYgQ1BTX1dFSUdIVEVECisgICAgc3RhdGljIENLX09GRl9UIG9sZGZmYyA9 IDBMOworI2VuZGlmIC8qIENQU19XRUlHSFRFRCAqLworI2lmZGVmIEdGVElNRVIKKyAgICBDS0ZM T0FUIHNlY3MsIHh4OworI2Vsc2UKKyAgICBDS19PRkZfVCBzZWNzLCB4eDsKKyNlbmRpZiAvKiBH RlRJTUVSICovCisKKyNpZmRlZiBHRlRJTUVSCisgICAgeHggPSAoZ3R2ID49IDAuMCkgPyBndHYg OiAwLjA7ICAgICAgLyogRmxvYXRpbmctcG9pbnQgdmVyc2lvbiAqLworICAgIGd0diA9IGdmdGlt ZXIoKTsKKyAgICBpZiAoKGd0diAtIG9sZGd0dikgPCAoQ0tGTE9BVCkgMS4wKSAvKiBPbmx5IGRv IHRoaXMgb25jZSBwZXIgc2Vjb25kICovCisgICAgICByZXR1cm4ob2xkY3BzKTsKKyAgICBvbGRn dHYgPSB4eDsKKyNlbHNlCisgICAgeHggPSAoZ3R2ID49IDApID8gZ3R2IDogMDsgICAgICAgICAg LyogV2hvbGUtbnVtYmVyIHZlcnNpb24gKi8KKyAgICBndHYgPSBndGltZXIoKTsKKyAgICBpZiAo KGd0diAtIG9sZGd0dikgPCAxKQorICAgICAgcmV0dXJuKG9sZGNwcyk7CisgICAgb2xkZ3R2ID0g eHg7CisjZW5kaWYgLyogR0ZUSU1FUiAqLworCisjaWZkZWYgQ1BTX1dFSUdIVEVECisgICAgLyog ZGVidWcoRjEwMCwiU0hPQ1BTOiBXRUlHSFRFRCIsIiIsMCk7ICovCisgICAgaWYgKGd0diAhPSBv bGRndHYpIHsgICAgICAgICAgICAgICAgLyogVGhlIGZpcnN0IHBhY2tldCBpcyBpZ25vcmVkICov CisgICAgICAgIGlmIChmZmMgPCBvbGRmZmMpCisgICAgICAgICAgb2xkZmZjID0gZmZjOworICAg ICAgICBvbGRjcHMgPSBjcHM7CisgICAgICAgIGlmIChvbGRjcHMgJiYgb2xkZ3R2ID4KKyNpZmRl ZiBHRlRJTUVSCisgICAgICAgICAgICAxLjAKKyNlbHNlCisgICAgICAgICAgICAxCisjZW5kaWYg LyogR0ZUSU1FUiAqLworICAgICAgICAgICAgKSB7ICAgICAgICAgICAgICAgICAgICAgICAgIC8q IFRoZSBmaXJzdCBzZWNvbmQgaXMgaWdub3JlZCAqLworLyoKKyAgVGhpcyB2ZXJzaW9uIG9mIHNo b2NwcygpIHByb2R1Y2VzIGEgd2VpZ2h0ZWQgYXZlcmFnZSB0aGF0IHNvbWUKKyAgcGVvcGxlIGxp a2UsIGJ1dCBtb3N0IHBlb3BsZSBmaW5kIGl0IGRpc2NvbmNlcnRpbmcgYW5kIGJvbWJhcmQgdXMK KyAgd2l0aCBxdWVzdGlvbnMgYW5kIGNvbXBsYWludHMgYWJvdXQgd2h5IHRoZSBDUFMgZmlndXJl IGZsdWN0dWF0ZXMgc28KKyAgd2lsZGx5LiAgU28gbm93IHlvdSBvbmx5IGdldCB0aGUgd2VpZ2h0 ZWQgYXZlcmFnZSBpZiB5b3UgYnVpbGQgdGhlCisgIHByb2dyYW0geW91cnNlbGYgd2l0aCBDUFNf V0VJR0hURUQgZGVmaW5lZC4KKyovCisjaWZuZGVmIENQU19WSU5DRQorI2lmZGVmIEdGVElNRVIK KyAgICAgICAgICAgIGNwcyA9IChsb25nKSgoKChDS0ZMT0FUKW9sZGNwcyAqIDMuMCkgKworICAg ICAgICAgICAgICAgICAgIChDS0ZMT0FUKShmZmMgLSBvbGRmZmMpIC8gKGd0di1vbGRndHYpICkg LyA0LjApOworI2Vsc2UKKyAgICAgICAgICAgIGNwcyA9ICggKG9sZGNwcyAqIDMpICsgKGZmYyAt IG9sZGZmYykgLyAoZ3R2LW9sZGd0dikgKSAvIDQ7CisjZW5kaWYgLyogR0ZUSU1FUiAqLworI2Vs c2UKKy8qIEFuZCBhbiBhbHRlcm5hdGUgd2VpZ2h0aW5nIHNjaGVtZSBmcm9tIFZpbmNlbnQgRmF0 aWNhLi4uICovCisgICAgICAgICAgICBjcHMgPSAoMyAqCisgICAgICAgICAgICAgKCgxK3BjdC8z MDApKm9sZGZmYy9vbGRndHYrKDEtcGN0LzEwMCkqKGZmYy1vbGRmZmMpLyhndHYtb2xkZ3R2KSkp CisgICAgICAgICAgICAgIC8gNDsKKyNlbmRpZiAvKiBDUFNfVklOQ0UgKi8KKyAgICAgICAgfSBl bHNlIHsKKyAgICAgICAgICAgIC8qIE5vIHdlaWdodGVkIGF2ZXJhZ2Ugc2luY2UgdGhlcmUgaXMg bm90aGluZyB0byB3ZWlnaCAqLworI2lmZGVmIEdGVElNRVIKKyAgICAgICAgICAgIGNwcyA9IChs b25nKShndHYgIT0gMC4wID8KKyAgICAgICAgICAgICAgKENLRkxPQVQpKGZmYyAtIG9sZGZmYykg LyAoZ3R2IC0gb2xkZ3R2KSA6CisgICAgICAgICAgICAgICAgKGZmYyAtIG9sZGZmYykpIDsKKyNl bHNlCisgICAgICAgICAgICBjcHMgPSBndHYgPyAoZmZjIC0gb2xkZmZjKSAvIChndHYgLSBvbGRn dHYpIDogKGZmYyAtIG9sZGZmYykgOworI2VuZGlmIC8qIEdGVElNRVIgKi8KKyAgICAgICAgfQor I2lmZGVmIENPTU1FTlQKKyNpZmRlZiBERUJVRworICAgICAgICBpZiAoZGVibG9nKSB7CisgICAg ICAgICAgICBkZWJ1ZyhGMTAxLCJTSE9DUFM6IHBjdCAgICIsIiIscGN0KTsKKyAgICAgICAgICAg IGRlYnVnKEYxMDEsIlNIT0NQUzogZ3R2ICAgIiwiIixndHYpOworICAgICAgICAgICAgZGVidWco RjEwMSwiU0hPQ1BTOiBvbGRndHYiLCIiLG9sZGd0dik7CisgICAgICAgICAgICBkZWJ1ZyhGMTAx LCJTSE9DUFM6IGRndHYgICIsIiIsKGxvbmcpKGd0di1vbGRndHYpKTsKKyAgICAgICAgICAgIGRl YnVnKEYxMDEsIlNIT0NQUzogZmZjICAgIiwiIixmZmMpOworICAgICAgICAgICAgZGVidWcoRjEw MSwiU0hPQ1BTOiBvbGRmZmMiLCIiLG9sZGZmYyk7CisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJT SE9DUFM6IGRmZmMgICIsIiIsZmZjLW9sZGZmYyk7CisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJT SE9DUFM6IGNwcyAgICIsIiIsY3BzKTsKKyAgICAgICAgfQorI2VuZGlmIC8qIERFQlVHICovCisj ZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAgICBtb3ZlKENXX0NQLDIyKTsKKyAgICAgICAgcHJp bnR3KCIlbGQiLCBjcHMpOworI2lmZGVmIEtVSQorI2lmbmRlZiBLOTVHCisgICAgICAgIEt1aVNl dFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX0NQLCAobG9uZykgY3BzICk7 CisjZW5kaWYgLyogSzk1RyAqLworI2VuZGlmIC8qIEtVSSAqLworICAgICAgICBjbHJ0b2VvbCgp OworICAgICAgICBvbGRmZmMgPSBmZmM7CisgICAgfQorI2Vsc2UgLyogIUNQU19XRUlHSFRFRCAq LworI2lmZGVmIENPTU1FTlQKKyNpZmRlZiBERUJVRworICAgIGlmIChkZWJsb2cpIHsKKwlkZWJ1 ZyhGMTAwLCJTSE9DUFM6IE5PVCBXRUlHSFRFRCIsIiIsMCk7CisgICAgICAgIGRlYnVnKEYxMDEs IlNIT0NQUzogcGN0ICAgICIsIiIscGN0KTsKKyAgICAgICAgZGVidWcoRjEwMSwiU0hPQ1BTOiBn dHYgICAgIiwiIixndHYpOworICAgICAgICBkZWJ1ZyhGMTAxLCJTSE9DUFM6IG9sZGd0diAiLCIi LG9sZGd0dik7CisgICAgICAgIGRlYnVnKEYxMDEsIlNIT0NQUzogZGd0diAgICIsIiIsKGxvbmcp Z3R2IC0gKGxvbmcpb2xkZ3R2KTsKKyAgICAgICAgZGVidWcoRjEwMSwiU0hPQ1BTOiBmZmMgICAg IiwiIixmZmMpOworICAgICAgICBkZWJ1ZyhGMTAxLCJTSE9DUFM6IG9sZGZmYyAiLCIiLG9sZGZm Yyk7CisgICAgICAgIGRlYnVnKEYxMDEsIlNIT0NQUzogZGZmYyAgICIsIiIsZmZjLW9sZGZmYyk7 CisgICAgICAgIGRlYnVnKEYxMDEsIlNIT0NQUzogY3BzICAgICIsIiIsY3BzKTsKKyAgICAgICAg ZGVidWcoRjEwMSwiU0hPQ1BTOiBmaWxjbnQgIiwiIixmaWxjbnQpOworI2lmZGVmIEdGVElNRVIK KyAgICAgICAgZGVidWcoRjEwMSwiU0hPQ1BTOiBmcGZzZWNzIiwiIixmcGZzZWNzKTsKKyNlbmRp ZiAvKiBHRlRJTUVSICovCisgICAgfQorICAgIGRlYnVnKEYxMDEsInNob2NwcyBndHYiLCIiLGd0 dik7CisjZW5kaWYgLyogREVCVUcgKi8KKyNpZmRlZiBHRlRJTUVSCisjZW5kaWYgLyogQ09NTUVO VCAqLworICAgIC8qIGRlYnVnKEYxMDEsInNob2NwcyBmcGZzZWNzIiwiIixmcGZzZWNzKTsgKi8K KyAgICBzZWNzID0gZ3R2IC0gZnBmc2VjczsKKyAgICAvKiBkZWJ1ZyhGMTAxLCJzaG9jcHMgc2Vj cyIsIiIsKGxvbmcpc2Vjcyk7ICovCisgICAgaWYgKHNlY3MgPiAwLjApIHsKKyAgICAgICAgY3Bz ID0gKGxvbmcpKChDS0ZMT0FUKSBmZmMgLyBzZWNzKTsKKyAgICAgICAgLyogZGVidWcoRjEwMSwi c2hvY3BzIGNwcyIsIiIsY3BzKTsgKi8KKyAgICAgICAgbW92ZShDV19DUCwyMik7CisjaWZkZWYg S1VJCisjaWZuZGVmIEs5NUcKKyAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5T RkVSLCAobG9uZykgQ1dfQ1AsIChsb25nKSBjcHMgKTsKKyNlbmRpZiAvKiBLOTVHICovCisjZW5k aWYgLyogS1VJICovCisgICAgICAgIHByaW50dygiJWxkIiwgY3BzKTsKKyAgICAgICAgY2xydG9l b2woKTsKKyAgICB9CisjZWxzZSAgLyogTm90IEdGVElNRVIgKi8KKyAgICBpZiAoKHNlY3MgPSBn dHYgLSBmc2VjcykgPiAwKSB7CisgICAgICAgIGNwcyA9IChzZWNzIDwgMUwpID8gZmZjIDogZmZj IC8gc2VjczsKKyAgICAgICAgbW92ZShDV19DUCwyMik7CisjaWZkZWYgS1VJCisjaWZuZGVmIEs5 NUcKKyAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1df Q1AsIChsb25nKSBjcHMgKTsKKyNlbmRpZiAvKiBLOTVHICovCisjZW5kaWYgLyogS1VJICovCisg ICAgICAgIHByaW50dygiJWxkIiwgY3BzKTsKKyAgICAgICAgY2xydG9lb2woKTsKKyAgICB9Cisj ZW5kaWYgLyogR0ZUSU1FUiAqLworI2VuZGlmIC8qIENQU19XRUlHSFRFRCAqLworCisgICAgaWYg KGNwcyA+IHBlYWtjcHMgJiYgICAgICAgICAgICAgICAgLyogUGVhayB0cmFuc2ZlciByYXRlICov CisgICAgICAgICgod2hhdCAmIFdfU0VORCAmJiBzcGFja2V0cyA+IHdzbG90cyArIDQpIHx8CisJ ICghKHdoYXQgJiBXX1NFTkQpICYmIHNwYWNrZXRzID4gMTApKSkgeworICAgICAgICBwZWFrY3Bz ID0gY3BzOworICAgIH0KKyAgICBvbGRfdHIgPSBzaG9ldGwob2xkX3RyLCBjcHMsIGZzaXosIGhv d2Zhcik7CisgICAgcmV0dXJuKGNwcyk7Cit9CisKK3N0YXRpYworI2lmZGVmIENLX0FOU0lDICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIEJlY2F1c2UgVk9JRCB1c2VkIGJ5IGN1cnNlcy5oICov Cit2b2lkCisjZWxzZQorI2lmZGVmIE1ZQ1VSU0VTCitWT0lECisjZWxzZQoraW50CisjZW5kaWYg LyogTVlDVVJTRVMgKi8KKyNlbmRpZiAvKiBDS19BTlNJQyAqLworc2NyZnQoKSB7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIERpc3BsYXkgZmlsZSB0eXBlICovCisgICAgY2hhciB4 ZmVyc3RyWzI1Nl07CisgICAgeGZlcnN0clswXSA9IE5VTDsKKyAgICBkZWJ1ZyhGMTAxLCJzY3Jm dCBiaW5hcnkiLCIiLGJpbmFyeSk7CisgICAgaWYgKGJpbmFyeSkgeworICAgICAgICBzd2l0Y2go YmluYXJ5KSB7CisgICAgICAgICAgY2FzZSBYWUZUX0w6CisgICAgICAgICAgICBja3N0cm5jcHko eGZlcnN0ciwiTEFCRUxFRCIsMjU2KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNh c2UgWFlGVF9JOgorICAgICAgICAgICAgY2tzdHJuY3B5KHhmZXJzdHIsIklNQUdFIiwyNTYpOwor ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBYWUZUX1U6CisgICAgICAgICAgICBj a3N0cm5jcHkoeGZlcnN0ciwiQklOQVJZIFVOREVGSU5FRCIsMjU2KTsKKyAgICAgICAgICAgIGJy ZWFrOworCSAgY2FzZSBYWUZUX006CisgICAgICAgICAgICBja3N0cm5jcHkoeGZlcnN0ciwiTUFD QklOQVJZIiwyNTYpOworICAgICAgICAgICAgYnJlYWs7CisJICBjYXNlIFhZRlRfWDoKKyAgICAg ICAgICAgIGNrc3RybmNweSh4ZmVyc3RyLCJURU5FWCIsMjU2KTsKKyAgICAgICAgICAgIGJyZWFr OworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgY2FzZSBYWUZUX0I6CisgICAgICAgICAg ICBja3N0cm5jcHkoeGZlcnN0ciwiQklOQVJZIiwyNTYpOworICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgIH0KKyNpZmRlZiBDS19SRVNFTkQKKyAgICAgICAgaWYgKHdoYXQgJiBXX1NFTkQgJiYg c2VuZHN0YXJ0ID4gMEwpIHsKKyAgICAgICAgICAgIGlmIChzZW5kbW9kZSA9PSBTTV9QU0VORCkg eworICAgICAgICAgICAgICAgIGNrc3RybmNhdCh4ZmVyc3RyLCAiIC8gcGFydGlhbCIsIDI1Nik7 CisgICAgICAgICAgICB9IGVsc2UgaWYgKHNlbmRtb2RlID09IFNNX1JFU0VORCkgeworICAgICAg ICAgICAgICAgIGNrc3RybmNhdCh4ZmVyc3RyLCAiIC8gcmVzZW5kIiwgMjU2KTsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICh3aGF0ICYgV19SRUNWICYmIHJzX2xlbiA+IDBMKSB7 CisgICAgICAgICAgICBja3N0cm5jYXQoeGZlcnN0ciwgIiAvIHJlc2VuZCIsIDI1Nik7CisgICAg ICAgIH0KKyNlbmRpZiAvKiBDS19SRVNFTkQgKi8KKyAgICB9IGVsc2UgeworCisjaWZuZGVmIE5P Q1NFVFMKKyAgICAgICAgY2tzdHJuY3B5KHhmZXJzdHIsIlRFWFQiLDI1Nik7CisjaWZkZWYgTkVX RlRQCisjaWZuZGVmIE5PVU5JQ09ERQorCWlmICh3aGF0ICYgV19GVFApIHsKKwkgICAgaWYgKGZ0 cF9jc3ggPCAwKQorCSAgICAgIGNrc3RybmNhdCh4ZmVyc3RyLCIgKG5vIHRyYW5zbGF0aW9uKSIs IDI1Nik7CisJICAgIGVsc2UKKwkgICAgICBja21ha3htc2coJnhmZXJzdHJbNF0sMjUyLAorCQkg ICAgICAgIiAoIiwKKwkJICAgICAgIGZjc2luZm9bKHdoYXQgJiBXX1NFTkQpID8gZnRwX2NzbCA6 IGZ0cF9jc3hdLmtleXdvcmQsCisJCSAgICAgICAiID0+ICIsCisJCSAgICAgICBmY3NpbmZvWyh3 aGF0ICYgV19TRU5EKSA/IGZ0cF9jc3ggOiBmdHBfY3NsXS5rZXl3b3JkLAorCQkgICAgICAgIiki LAorCQkgICAgICAgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTAorCQkgICAgICAg KTsKKwl9IGVsc2UKKyNlbmRpZiAvKiBOT1VOSUNPREUgKi8KKyNlbmRpZiAvKiBORVdGVFAgKi8K KwkgIGlmICh0Y2hhcnNldCA9PSBUQ19UUkFOU1ApIHsKKyAgICAgICAgICAgIGNrc3RybmNhdCh4 ZmVyc3RyLCAiIChubyB0cmFuc2xhdGlvbikiLCAyNTYpOworICAgICAgICB9IGVsc2UgeworICAg ICAgICAgICAgaWYgKHdoYXQgJiBXX1NFTkQpIHsKKyAgICAgICAgICAgICAgICBzcHJpbnRmKCAm eGZlcnN0cltzdHJsZW4oeGZlcnN0cildLCAvKiBzYWZlICovCisgICAgICAgICAgICAgICAgICAg ICAgICAiICglcyA9PiAlcykiLAorICAgICAgICAgICAgICAgICAgICAgICAgZmNzaW5mb1tmY2hh cnNldF0ua2V5d29yZCwgLyogYnVpbHQtaW4ga2V5d29yZHMgKi8KKyAgICAgICAgICAgICAgICAg ICAgICAgIHRjc2luZm9bdGNoYXJzZXRdLmtleXdvcmQgIC8qIGxlbmd0aHMgYXJlIGNvbnRyb2xs ZWQgKi8KKwkJCSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNwcmlu dGYoICZ4ZmVyc3RyW3N0cmxlbih4ZmVyc3RyKV0sIC8qIHNhZmUgKi8KKyAgICAgICAgICAgICAg ICAgICAgICAgICIgKCVzID0+ICVzKSIsCisgICAgICAgICAgICAgICAgICAgICAgICB0Y3NpbmZv W3RjaGFyc2V0XS5rZXl3b3JkLCAvKiBidWlsdC1pbiBrZXl3b3JkcyAqLworICAgICAgICAgICAg ICAgICAgICAgICAgZmNzaW5mb1tmY2hhcnNldF0ua2V5d29yZCk7IC8qIGxlbmd0aHMgY29udHJv bGxlZCAqLworICAgICAgICAgICAgfQorICAgICAgICB9CisjZW5kaWYgLyogTk9DU0VUUyAqLwor ICAgIH0KKyAgICBtb3ZlKENXX1RZUCwyMik7CisgICAgcHJpbnR3KCIlcyIsIHhmZXJzdHIpOwor ICAgIGNscnRvZW9sKCk7CisjaWZkZWYgS1VJCisjaWZuZGVmIEs5NUcKKyAgICBLdWlTZXRQcm9w ZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19UWVAsIChsb25nKSB4ZmVyc3RyICk7 CisjZW5kaWYgLyogSzk1RyAqLworI2VuZGlmIC8qIEtVSSAqLworICAgIHJldHVybjsKK30KKwor I2lmZGVmIENLX05FV1RFUk0KK3N0YXRpYyBGSUxFICpja19zdGRvdXQgPSBOVUxMOworc3RhdGlj IGludCBja19mZCA9IC0xOworI2VuZGlmIC8qIENLX05FV1RFUk0gKi8KKworc3RhdGljIGxvbmcg cGN0ID0gMEwsIG9sZHBjdCA9IDBMLCBvbGRydHQgPSAtMUw7CitzdGF0aWMgaW50IG9sZHR5cCA9 IDAsIG9sZHdpbiA9IC0xLCBvbGR0cnkgPSAtMSwgb2xkbGVuID0gLTEsIG9sZHRpbSA9IC0xOwor CisjaWZkZWYgTkVUQ09OTgorc3RhdGljIGNoYXIgKm5ldG5hbWVbXSA9IHsKKyAgICAibm9uZSIs CQkJCS8qIDAwICovCisgICAgIlRDUC9JUCIsCQkJCS8qIDAxIFRDUCAoU29ja2V0cykgKi8KKyAg ICAiVENQL0lQIiwJCQkJLyogMDIgVENQIChTdHJlYW1zKSAqLworICAgICJYLjI1IiwJCQkJLyog MDMgU3VuTGluayBYLjI0ICAqLworICAgICJERUNuZXQiLAkJCQkvKiAwNCBERUNuZXQgICovCisg ICAgIlZBWCBQU0kiLAkJCQkvKiAwNSBWQVggUFNJICovCisgICAgIk5hbWVkIFBpcGVzIiwJCQkv KiAwNiBMQU4gTWFuYWdlciBOYW1lZCBQaXBlICovCisgICAgIlguMjUiLAkJCQkvKiAwNyBTdHJh dHVzIFZPUyBYLjI1ICovCisgICAgIk5ldEJJT1MiLAkJCQkvKiAwOCBJQk0gTkVUQklPUyAqLwor ICAgICJTdXBlckxBVCIsCQkJCS8qIDA3IE1lcmlkaWFuIFN1cGVyTEFUICovCisgICAgIkZpbGUi LAkJCQkvKiAxMCBGaWxlICovCisgICAgIkNvbW1hbmQiLAkJCQkvKiAxMSBTdWJwcm9jZXNzIChw aXBlKSAqLworICAgICJETEwiLAkJCQkvKiAxMiBETEwgZG9lcyBpL28gKi8KKyAgICAiWC4yNSIs CQkJCS8qIDEzIElCTSBBSVhMaW5rIFguMjUgKi8KKyAgICAiWC4yNSIsCQkJCS8qIDE0IEhQLVVY IFguMjUgKi8KKyAgICAiUFRZIiwJCQkJLyogMTUgUHNldWRvdGVybWluYWwgKi8KKyAgICAiU1NI IiwJCQkJLyogMTYgU1NIICovCisgICAgIjxFUlJPUj4iLAkJCQkvKiAxNyBJbiBjYXNlIG5ldyB0 eXBlcyBhcmUgYWRkZWQgKi8KKyAgICAiPEVSUk9SPiIsCQkJCS8qIDE4IGJ1dCBub2JvZHkgcmVt ZW1iZXJzIHRvIHVwZGF0ZSAqLworICAgICI8RVJST1I+IiwJCQkJLyogMTkgdGhpcyB0YWJsZSAu Li4gKi8KKyAgICBOVUxMCQkJCS8qIDIwICovCit9Oworc3RhdGljIGludCBubmV0bmFtZSA9IChz aXplb2YobmV0bmFtZSkgLyBzaXplb2YoY2hhciAqKSk7CisKKyNlbmRpZiAvKiBORVRDT05OICov CisKKyNpZmRlZiBDS19BTlNJQwordm9pZAorc2NyZWVuYyhpbnQgZiwgY2hhciBjLENLX09GRl9U IG4sY2hhciAqcykKKyNlbHNlCitDS1ZPSUQKK3NjcmVlbmMoZixjLG4scykKK2ludCBmOyAgICAg ICAgICAvKiBhcmd1bWVudCBkZXNjcmlwdG9yICovCitjaGFyIGM7ICAgICAgICAgLyogYSBjaGFy YWN0ZXIgb3Igc21hbGwgaW50ZWdlciAqLworQ0tfT0ZGX1QgbjsgICAgIC8qIGEgbG9uZyBpbnRl Z2VyICovCitjaGFyICpzOyAgICAgICAgLyogYSBzdHJpbmcgKi8KKyNlbmRpZiAvKiBDS19BTlNJ QyAqLworLyogc2NyZWVuYygpICovIHsKKyNpZmRlZiBDS19TU0wKKyAgICBleHRlcm4gaW50IHRs c19hY3RpdmVfZmxhZywgc3NsX2FjdGl2ZV9mbGFnOworI2VuZGlmIC8qIENLX1NTTCAqLworI2lm ZGVmIFJMT0dDT0RFCisgICAgZXh0ZXJuIGludCB0dG5wcm90bzsKKyNlbmRpZiAvKiBSTE9HQ09E RSAqLworICAgIHN0YXRpYyBpbnQgcSA9IDA7CisgICAgc3RhdGljIGxvbmcgZmNudCA9IDBMOwkJ LyogTnVtYmVyIG9mIGZpbGVzIHRyYW5zZmVycmVkICovCisgICAgc3RhdGljIENLX09GRl9UIGZz aXogPSAoQ0tfT0ZGX1QpLTE7IC8qIENvcHkgb2YgZmlsZSBzaXplICovCisgICAgc3RhdGljIENL X09GRl9UIGZieXQgPSAwTDsgLyogVG90YWwgZmlsZSBieXRlcyBvZiBhbGwgZmlsZXMgdHJhbnNm ZXJyZWQgKi8KKyAgICBzdGF0aWMgQ0tfT0ZGX1QgaG93ZmFyID0gMEw7IC8qIEhvdyBtdWNoIG9m IGN1cnJlbnQgZmlsZSBoYXMgYmVlbiB4ZmVyJ2QgKi8KKyAgICBzdGF0aWMgaW50ICBwY3RsYmwg PSAwTDsgIC8qIFBlcmNlbnQgZG9uZSB2cyBCeXRlcyBzbyBmYXIgKi8KKyAgICBsb25nIGNwcyA9 IDBMOworCisgICAgaW50IG5ldCA9IDA7CisgICAgaW50IHhuZXQgPSAwOworICAgIGludCBmdHAg PSAwOworICAgIGludCBsZW47ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExlbmd0aCBv ZiBzdHJpbmcgKi8KKyAgICBpbnQgZXJyb3JzID0gMDsgICAgICAgICAgICAgICAgICAgICAvKiBF cnJvciBjb3VudGVyICovCisgICAgaW50IHg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogV29ya2VyICovCisKKyAgICBkZWJ1ZyhGMTAxLCJzY3JlZW5jIGNpbml0IiwiIixjaW5pdCk7 CisgICAgZGVidWcoRjEwMSwic2NyZWVuYyBjZW5kdyIsIiIsY2VuZHcpOworCisgICAgaWYgKCFz KSBzID0gIiI7ICAgICAgICAgICAgICAgICAgICAgLyogQWx3YXlzIGRvIHRoaXMuICovCisKKyAg ICBmdHAgPSAod2hhdCAmIFdfRlRQKSA/IDEgOiAwOwkvKiBGVFAgb3IgS2VybWl0ICovCisgICAg bmV0ID0gbmV0d29yayB8fCBmdHA7CisgICAgeG5ldCA9IGZ0cCA/IDEgOiBuZXR0eXBlOwkJLyog TkVUX1RDUEIgPT0gMSAqLworCisgICAgaWYgKGNpbml0ID09IDAgfHwgY2VuZHcgPiAwKSB7ICAg ICAgLyogSGFuZGxlIGJvcmRlcmxpbmUgY2FzZXMuLi4gKi8KKyAgICAgICAgaWYgKGYgPT0gU0NS X0NXKSB7ICAgICAgICAgICAgICAvKiBDbG9zZSB3aW5kb3csIGJ1dCBpdCdzIG5vdCBvcGVuICov CisgICAgICAgICAgICBmdF93aW4gPSAwOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9 CisgICAgICAgIGRlYnVnKEYxMTEsInNjcmVlbmMgQSIscyxmKTsKKyAgICAgICAgaWYgKGYgPT0g U0NSX0VNIHx8CisgICAgICAgICAgIChmID09IFNDUl9QVCAmJiBjID09ICdFJykpIHsgLyogRmF0 YWwgZXJyb3IgYmVmb3JlIHdpbmRvdyBvcGVuICovCisgICAgICAgICAgICBjb25vbGwoIiIpOyBj b25vYygnPycpOyBjb25vbGwocyk7IHJldHVybjsgLyogUmVndWxhciBkaXNwbGF5ICovCisgICAg ICAgIH0KKyAgICB9CisgICAgaWYgKGNpbml0ID09IDApIHsgICAgICAgICAgICAgICAgICAgLyog T25seSBjYWxsIGluaXRzY3IoKSBvbmNlICovCisJY2hhciAqIHM7CisJLyogQ2hlY2sgdGhlc2Ug bm93IC0tIGlmIHRoZXkgYXJlIGRlZmluZWQgYnV0IG5vdCBudW1lcmljICovCisJLyogdGhleSBj YW4gY3Jhc2ggY3Vyc2VzICovCisJcyA9IGdldGVudigiTElORVMiKTsKKwlpZiAocykgaWYgKCFy ZGlnaXRzKHMpKSB7CisJICAgIHByaW50ZigiP0xJTkVTIHZhcmlhYmxlIG5vdCBudW1lcmljOiBc IiVzXCIuXG4iLHMpOworCSAgICBwcmludGYoIihGdWxsc2NyZWVuIGRpc3BsYXkgZGlzYWJsZWQp XG4iKTsKKwkgICAgZmRpc3BsYSA9IFhZRkRfUzsKKwkgICAgcmV0dXJuOworCX0KKwlzID0gZ2V0 ZW52KCJDT0xVTU5TIik7CisJaWYgKHMpIGlmICghcmRpZ2l0cyhzKSkgeworCSAgICBwcmludGYo Ij9DT0xVTU5TIHZhcmlhYmxlIG5vdCBudW1lcmljOiBcIiVzXCIuXG4iLHMpOworCSAgICBwcmlu dGYoIihGdWxsc2NyZWVuIGRpc3BsYXkgZGlzYWJsZWQpXG4iKTsKKwkgICAgZmRpc3BsYSA9IFhZ RkRfUzsKKwkgICAgcmV0dXJuOworCX0KKyAgICAgICAgY2VuZHcgPSAxOyAgICAgICAgICAgICAg ICAgICAgICAvKiBOZXcgd2luZG93IG5lZWRzIHJlcGFpbnRpbmcgKi8KKyNpZmRlZiBDT01NRU5U CisgICAgICAgIGlmICghaW5pdHNjcigpKSB7ICAgICAgICAgICAgICAgLyogT29wcywgY2FuJ3Qg aW5pdGlhbGl6ZSB3aW5kb3c/ICovCisvKgorICBJbiBmYWN0LCB0aGlzIGRvZXNuJ3QgaGFwcGVu LiAgIm1hbiBjdXJzZXMiIHNheXMgaW5pdHNjcigpIGhhbHRzIHRoZQorICBlbnRpcmUgcHJvZ3Jh bSBpZiBpdCBmYWlscywgd2hpY2ggaXMgdHJ1ZSBvbiB0aGUgc3lzdGVtcyB3aGVyZSBJJ3ZlCisg IHRlc3RlZCBpdC4gIEl0IHdpbGwgZmFpbCBpZiB5b3VyIHRlcm1pbmFsIHR5cGUgaXMgbm90IGtu b3duIHRvIGl0LgorICBUaGF0J3Mgd2h5IFNFVCBGSUxFIERJU1BMQVkgRlVMTFNDUkVFTiBjYWxs cyB0Z2V0ZW50KCkgdG8gbWFrZSBzdXJlIHRoZQorICB0ZXJtaW5hbCB0eXBlIGlzIGtub3duIGJl Zm9yZSBhbGxvd2luZyBhIGN1cnNlcyBkaXNwbGF5LgorKi8KKyAgICAgICAgICAgIGZwcmludGYo c3RkZXJyLCJDVVJTRVMgSU5JVFNDUiBFUlJPUlxyXG4iKTsKKyAgICAgICAgICAgIGZkaXNwbGEg PSBYWUZEX1M7ICAgICAgICAgICAvKiBGYWxsIGJhY2sgdG8gQ1JUIGRpc3BsYXkgKi8KKyAgICAg ICAgICAgIHJldHVybjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNpbml0Kys7ICAg ICAgICAgICAgICAgICAgICAvKiBXaW5kb3cgaW5pdGlhbGl6ZWQgb2sgKi8KKyAgICAgICAgICAg IGRlYnVnKEYxMDAsIkNVUlNFUyBJTklUU0NSIE9LIiwiIiwwKTsKKyAgICAgICAgfQorI2Vsc2Ug ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNhdmUgc29tZSBtZW1vcnkuICov CisjaWZkZWYgQ0tfTkVXVEVSTQorICAgICAgICAvKiAoRnJvbSBBbmR5IEZ5ZmUgPGFuZHlAdmxz aS5jcy5jYWx0ZWNoLmVkdT4pCisgICAgICAgICAgIFN5c3RlbSBWIGN1cnNlcyBzZWVtcyB0byBy ZXNlcnZlIHRoZSByaWdodCB0byBhbHRlciB0aGUgYnVmZmVyaW5nCisgICAgICAgICAgIG9uIHRo ZSBvdXRwdXQgRklMRSogd2l0aG91dCByZXN0b3JpbmcgaXQuICBGb3J0dW5hdGVseSBTeXN0ZW0g VgorICAgICAgICAgICBjdXJzZXMgcHJvdmlkZXMgbmV3dGVybSgpLCBhbiBhbHRlcm5hdGl2ZSB0 byBpbml0c2NyKCksIHRoYXQKKyAgICAgICAgICAgYWxsb3dzIHVzIHRvIHNwZWNpZnkgZXhwbGlj aXRseSB0aGUgdGVybWluYWwgdHlwZSBhbmQgaW5wdXQgYW5kCisgICAgICAgICAgIG91dHB1dCBG SUxFIHBvaW50ZXJzLiAgVGh1cyB3ZSBkdXBsaWNhdGUgc3Rkb3V0LCBhbmQgbGV0IGN1cnNlcwor ICAgICAgICAgICBoYXZlIHRoZSBjb3B5LiAgVGhlIG9yaWdpbmFsIHJlbWFpbnMgdW5hbHRlcmVk LiAgVW5mb3J0dW5hdGVseSwKKyAgICAgICAgICAgbmV3dGVybSgpIHNlZW1zIHRvIGJlIHBhcnRp Y3VsYXIgdG8gU3lzdGVtIFYuCisgICAgICAgICovCisgICAgICAgIHMgPSBnZXRlbnYoIlRFUk0i KTsKKyAgICAgICAgaWYgKGNrX2ZkIDwgMCkgeworICAgICAgICAgICAgY2tfZmQgPSBkdXAoZmls ZW5vKHN0ZG91dCkpOworICAgICAgICAgICAgY2tfc3Rkb3V0ID0gKGNrX2ZkID49IDApID8gKEZJ TEUgKilmZG9wZW4oY2tfZmQsICJ3IikgOiBOVUxMOworICAgICAgICB9CisgICAgICAgIGRlYnVn KEYxMDAsInNjcmVlbmMgbmV3dGVybS4uLiIsIiIsMCk7CisKKy8qIE5PVEU6IEl0IG1pZ2h0IGJl IG5lY2Vzc2FyeSB0byBkbyB0aGlzIHdpdGggc3RkaW4gdG9vISAqLworLyogVGhpcyB3b3VsZCBo YXZlIGJlZW4gdGhlIGNhc2UgaW4gRnJlZUJTRCA0LjEgYnV0IHRoZXkgZml4ZWQgdGhlICovCisv KiBwcm9ibGVtIGJ5IHJlc3RvcmluZyB0aGUgYnVmZmVyaW5nIG9mIHN0ZGluIGJlZm9yZSB0aGUg ZmluYWwgcmVsZWFzZS4gKi8KKy8qIChCdXQgVC5FLiBEaWNrZXkgc2F5cyBzdGRpbiBpcyBub3Qg YnVmZmVyZWQ/KSAqLworCisgICAgICAgIGlmIChja19zdGRvdXQgPT0gTlVMTCB8fCBuZXd0ZXJt KHMsIGNrX3N0ZG91dCwgc3RkaW4pID09IDApIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJy LAorICAgICAgICAgICAgICAiRnVsbHNjcmVlbiBkaXNwbGF5IG5vdCBzdXBwb3J0ZWQgZm9yIHRl cm1pbmFsIHR5cGU6ICVzXHJcbiIscyk7CisgICAgICAgICAgICBmZGlzcGxhID0gWFlGRF9TOyAg ICAgICAgICAgLyogVXNlIENSVCBpbnN0ZWFkICovCisgICAgICAgICAgICByZXR1cm47CisgICAg ICAgIH0KKyAgICAgICAgZGVidWcoRjEwMCwic2NyZWVuYyBuZXd0ZXJtIG9rIiwiIiwwKTsKKyNl bHNlCisgICAgICAgIGRlYnVnKEYxMDAsInNjcmVlbiBjYWxsaW5nIGluaXRzY3IiLCIiLDApOwor ICAgICAgICBpbml0c2NyKCk7ICAgICAgICAgICAgICAgICAgICAgIC8qIEluaXRpYWxpemUgY3Vy c2VzLiAqLworICAgICAgICBkZWJ1ZyhGMTAwLCJzY3JlZW4gaW5pdHNjciBvayIsIiIsMCk7Cisj ZW5kaWYgLyogQ0tfTkVXVEVSTSAqLworICAgICAgICBjaW5pdCsrOyAgICAgICAgICAgICAgICAg ICAgICAgIC8qIFJlbWVtYmVyIGN1cnNlcyB3YXMgaW5pdGlhbGl6ZWQuICovCisjZW5kaWYgLyog Q09NTUVOVCAqLworICAgIH0KKyAgICBmdF93aW4gPSAxOyAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBXaW5kb3cgaXMgb3BlbiAqLworICAgIGlmIChyZXBhaW50KSB7CisjaWZkZWYgQ0tfV1JF RlJFU0gKKy8qCisgIFRoaXMgdG90YWxseSByZXBhaW50cyB0aGUgc2NyZWVuLCBqdXN0IHdoYXQg d2Ugd2FudCwgYnV0IHdlIGNhbiBvbmx5CisgIGRvIHRoaXMgd2l0aCByZWFsIGN1cnNlcywgYW5k IHRoZW4gb25seSBpZiBjbGVhcm9rKCkgYW5kIHdyZWZyZXNoKCkgYXJlCisgIHByb3ZpZGVkIGlu IHRoZSBjdXJzZXMgbGlicmFyeS4KKyovCisjaWZkZWYgT1MyCisgICAgICAgIFJlc3RvcmVDbWRN b2RlKCk7CisjZWxzZQorI2lmZGVmIFFOWAorI2lmbmRlZiBRTlgxNgorICAgICAgICBjbGVhcm9r KHN0ZHNjciwgMSk7ICAgICAgICAgICAgIC8qIFFOWCBkb2Vzbid0IGhhdmUgY3Vyc2NyICovCisj ZW5kaWYgLyogUU5YMTYgKi8KKyAgICAgICAgd3JlZnJlc2goc3Rkc2NyKTsKKyNlbHNlCisgICAg ICAgIHdyZWZyZXNoKGN1cnNjcik7CisjZW5kaWYgLyogUU5YICovCisjZW5kaWYgLyogT1MyICov CisjZWxzZSAgLyogTm8gQ0tfV1JFRlJFU0ggKi8KKy8qCisgIEtlcm1pdCdzIGRvLWl0LXlvdXJz ZWxmIG1ldGhvZCwgd29ya3Mgd2l0aCBhbGwgdHlwZXMgb2YgZnVsbHNjcmVlbgorICBzdXBwb3J0 LCBidXQgZG9lcyBub3QgcmVwYWludCBhbGwgdGhlIGZpZWxkcy4gIEZvciBleGFtcGxlLCB0aGUg ZmlsZW5hbWUKKyAgaXMgbG9zdCwgYmVjYXVzZSBpdCBhcnJpdmVzIGF0IGEgY2VydGFpbiB0aW1l IGFuZCBuZXZlciBjb21lcyBhZ2FpbiwgYW5kCisgIEtlcm1pdCBwcmVzZW50bHkgZG9lcyBub3Qg c2F2ZSBpdCBhbnl3aGVyZS4gIE1ha2luZyB0aGlzIG1ldGhvZCB3b3JrIGZvcgorICBhbGwgZmll bGRzIHdvdWxkIGJlIGEgcmF0aGVyIG1ham9yIHJlY29kaW5nIHRhc2ssIGR1cGxpY2F0aW5nIHdo YXQgY3Vyc2VzCisgIGFscmVhZHkgZG9lcywgYW5kIHdvdWxkIGFkZCBhIGxvdCBvZiBjb21wbGV4 aXR5IGFuZCBzdG9yYWdlIHNwYWNlLgorKi8KKyAgICAgICAgY2VuZHcgPSAxOworI2VuZGlmIC8q IENLX1dSRUZSRVNIICovCisgICAgICAgIHJlcGFpbnQgPSAwOworICAgIH0KKyAgICBpZiAoY2Vu ZHcpIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBlbmR3aW4oKSB3YXMgY2FsbGVkIHByZXZp b3VzbHkgKi8KKyNpZmRlZiBWTVMKKyAgICAgICAgaW5pdHNjcigpOyAgICAgICAgICAgICAgICAg ICAgICAvKiAob3Igc2hvdWxkIGhhdmUgYmVlbiEpICovCisgICAgICAgIGNsZWFyKCk7CisgICAg ICAgIHRvdWNod2luKHN0ZHNjcik7CisgICAgICAgIHJlZnJlc2goKTsKKyNlbHNlCisjaWZkZWYg UU5YCisvKgorICBJbiBRTlgsIGlmIHdlIGRvbid0IGNhbGwgaW5pdHNjcigpIGhlcmUgd2UgY29y ZSBkdW1wLgorICBJIGRvbid0IGhhdmUgYW55IFFOWCBjdXJzZXMgZG9jdW1lbnRhdGlvbiwgYnV0 IG90aGVyIGN1cnNlcyBtYW51YWxzCisgIHNheSB0aGF0IGluaXRzY3IoKSBzaG91bGQgYmUgY2Fs bGVkIG9ubHkgb25jZSBwZXIgYXBwbGljYXRpb24sIGFuZAorICBleHBlcmllbmNlIHNob3dzIHRo YXQgb24gb3RoZXIgc3lzdGVtcywgY2FsbGluZyBpbml0c2NyKCkgaGVyZSBnZW5lcmFsbHkKKyAg cmVzdWx0cyBpbiBhIGNvcmUgZHVtcC4KKyovCisgICAgICAgIGRlYnVnKEYxMDAsInNjcmVlbmMg cmUtY2FsbGluZyBpbml0c2NyIFFOWCIsIiIsMCk7CisgICAgICAgIGluaXRzY3IoKTsKKyAgICAg ICAgY2xlYXIoKTsKKyAgICAgICAgcmVmcmVzaCgpOworI2lmZGVmIENPTU1FTlQKKy8qCisgIEJ1 dCBldmVuIHNvLCBzZWNvbmQgYW5kIHN1YnNlcXVlbnQgY3Vyc2VzIGRpc3BsYXlzIGFyZSBtZXNz ZWQgdXAuCisgIENhbGxpbmcgdG91Y2h3aW4sIHJlZnJlc2gsIGV0YywgZG9lc24ndCBtYWtlIGFu eSBkaWZmZXJlbmNlLgorKi8KKyAgICAgICAgZGVidWcoRjEwMCwic2NyZWVuYyBjYWxsaW5nIHRv dWNod2luIFFOWCIsIiIsMCk7CisgICAgICAgIHRvdWNod2luKHN0ZHNjcik7CisgICAgICAgIGRl YnVnKEYxMDAsInNjcmVlbmMgY2FsbGluZyByZWZyZXNoIFFOWCIsIiIsMCk7CisgICAgICAgIHJl ZnJlc2goKTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisKKyNlbHNlIC8qIEFsbCBvdGhlcnMuLi4g Ki8KKyAgICAgICAgZGVidWcoRjEwMCwic2NyZWVuYyBjYWxsaW5nIGNsZWFyIiwiIiwwKTsKKyAg ICAgICAgY2xlYXIoKTsKKyAgICAgICAgZGVidWcoRjEwMCwic2NyZWVuYyBjbGVhciBvayIsIiIs MCk7CisjZW5kaWYgLyogUU5YICovCisjZW5kaWYgLyogVk1TICovCisgICAgICAgIGRlYnVnKEYx MDAsInNjcmVlbmMgc2V0dXAgb2siLCIiLDApOworICAgICAgICBkZWJ1ZyhGMTAwLCJzY3JlZW5j IGRvaW5nIGZpcnN0IG1vdmUiLCIiLDApOworICAgICAgICBtb3ZlKENXX0JBTiwwKTsgICAgICAg ICAgICAgICAgIC8qIERpc3BsYXkgdGhlIGJhbm5lciAqLworICAgICAgICBkZWJ1ZyhGMTEwLCJz Y3JlZW5jIG15aG9zdCIsbXlob3N0LDApOworI2lmZGVmIFRDUFNPQ0tFVAorICAgICAgICBkZWJ1 ZyhGMTEwLCJzY3JlZW5jIG15aXBhZGRyIixteWlwYWRkciwwKTsKKyNlbmRpZiAvKiBUQ1BTT0NL RVQgKi8KKyNpZmRlZiBIUFVYMTAxMAorICAgICAgICBkZWJ1ZyhGMTAwLCJzY3JlZW5jIGNhbGxp bmcgZmlyc3QgcHJpbnR3Li4uIiwiIiwwKTsKKy8qIFJpZ2h0IGhlcmUgaXMgd2hlcmUgSFAtVVgg MTAuMTAgbGlieGN1cnNlLjEgUmV2IDc2LjIwIGhhbmdzLi4uICovCisjZW5kaWYgLyogSFBVWDEw MTAgKi8KKyAgICAgICAgaWYgKG15aG9zdFswXSkgeworI2lmZGVmIFRDUFNPQ0tFVAorICAgICAg ICAgICAgaWYgKCFteWlwYWRkclswXQorI2lmZGVmIE9TMgorICAgICAgICAgICAgICAgICAvKiBX ZSBuZWVkIHRvIHBlcmZvcm0gdGhpcyB0ZXN0IGJlY2F1c2Ugb24gbm9uLVRDUC9JUCAqLworICAg ICAgICAgICAgICAgICAvKiBzeXN0ZW1zIHRoZSBjYWxsIHRvIGdldGxvY2FsaXBhZGRyKCkgcmVz dWx0cyBpbiBhICAqLworICAgICAgICAgICAgICAgICAvKiBETlMgTG9va3VwIHdoaWNoIHRha2Vz IHNldmVyYWwgbWludXRlcyB0byB0aW1lIG91dCAqLworICAgICAgICAgICAgICAgICAmJiBuZXQg JiYKKyAgICAgICAgICAgICAgICAgKHhuZXQgPT0gTkVUX1RDUEEgfHwgeG5ldCA9PSBORVRfVENQ QgorI2lmZGVmIFNTSEJVSUxUSU4KKyAgICAgICAgICAgICAgICAgIHx8IHhuZXQgPT0gTkVUX1NT SAorI2VuZGlmIC8qIFNTSEJVSUxUSU4gKi8KKyAgICAgICAgICAgICAgICAgICkKKyNlbmRpZiAv KiBPUzIgKi8KKyAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICBnZXRsb2NhbGlwYWRk cigpOworICAgICAgICAgICAgaWYgKG15aXBhZGRyWzBdICYmIHN0cmNtcCgoY2hhciAqKW15aG9z dCwoY2hhciAqKW15aXBhZGRyKSkKKyAgICAgICAgICAgICAgcHJpbnR3KCIlcywgJXMgWyVzXSIs dmVyc2lvLChjaGFyICopbXlob3N0LChjaGFyICopbXlpcGFkZHIpOworICAgICAgICAgICAgZWxz ZQorI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLworICAgICAgICAgICAgICBwcmludHcoIiVzLCAlcyIs dmVyc2lvLChjaGFyICopbXlob3N0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHBy aW50dygiJXMiLHZlcnNpbyk7CisgICAgICAgIH0KKyNpZmRlZiBIUFVYMTAxMAorICAgICAgICBk ZWJ1ZyhGMTAwLCJzY3JlZW5jIGZpcnN0IHByaW50dyByZXR1cm5zIiwiIiwwKTsKKyNlbmRpZiAv KiBIUFVYMTAxMCAqLworICAgICAgICBtb3ZlKENXX0RJUiwzKTsKKyAgICAgICAgcHJpbnR3KCJD dXJyZW50IERpcmVjdG9yeTogJXMiLHpndGRpcigpKTsKKyNpZmRlZiBLVUkKKyNpZm5kZWYgSzk1 RworICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19E SVIsIChsb25nKSB6Z3RkaXIoKSApOworI2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBLVUkg Ki8KKyAgICAgICAgaWYgKG5ldCkgeworICAgICAgICAgICAgbW92ZShDV19MSU4sOCk7CisgICAg ICAgICAgICBwcmludHcoIk5ldHdvcmsgSG9zdDogJXMiLAorI2lmZGVmIE5FV0ZUUAorCQkgICBm dHAgPyAoZnRwX2hvc3QgPyBmdHBfaG9zdCA6ICIodW5rbm93bikiKSA6CisjZW5kaWYgLyogTkVX RlRQICovCisJCSAgIHR0bmFtZQorCQkgICApOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg ICAgbW92ZShDV19MSU4sMCk7CisgICAgICAgICAgICBwcmludHcoIkNvbW11bmljYXRpb24gRGV2 aWNlOiAlcyIsdHRuYW1lKTsKKyAgICAgICAgfQorI2lmZGVmIEtVSQorI2lmbmRlZiBLOTVHCisg ICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX0xJTiwg KGxvbmcpIHR0bmFtZSApOworI2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBLVUkgKi8KKwor ICAgICAgICBpZiAobmV0KSB7CisgICAgICAgICAgICBtb3ZlKENXX1NQRCw4KTsKKyAgICAgICAg ICAgIHByaW50dygiTmV0d29yayBUeXBlOiAiKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg ICAgIG1vdmUoQ1dfU1BELDEpOworICAgICAgICAgICAgcHJpbnR3KCJDb21tdW5pY2F0aW9uIFNw ZWVkOiAiKTsKKyAgICAgICAgfQorICAgICAgICBtb3ZlKENXX1NQRCwyMik7ICAgICAgICAgICAg ICAgIC8qIFNlcmlhbCBzcGVlZCBvciBuZXR3b3JrIHR5cGUgKi8KKyAgICAgICAgaWYgKG5ldCkg eworI2lmZGVmIE5FVENPTk4KKwkgICAgaW50IHNlY3VyZSA9IDA7CisJICAgIGNoYXIgKiB4bmFt ZTsKKwkgICAgaWYgKHhuZXQgPiBubmV0bmFtZSkKKwkgICAgICB4bmFtZSA9ICJbRVJST1JdIjsK KwkgICAgZWxzZQorCSAgICAgIHhuYW1lID0gbmV0bmFtZVt4bmV0XTsKKyNpZmRlZiBORVdGVFAK KyAgICAgICAgICAgIGlmIChmdHApIHsKKwkJaWYgKGZ0cGlzc2VjdXJlKCkpCisJCSAgc2VjdXJl ID0gMTsKKwkgICAgfSBlbHNlCisjZW5kaWYgLyogTkVXRlRQICovCisJICAgICAgaWYgKDAKKyNp ZmRlZiBTU0hCVUlMVElOCisgICAgICAgICAgICAgICAgfHwgSVNfU1NIKCkKKyNlbmRpZiAvKiBT U0hCVUlMVElOICovCisjaWZkZWYgQ0tfRU5DUllQVElPTgorICAgICAgICAgICAgICAgIHx8IGNr X3RuX2VuY3J5cHRpbmcoKSAmJiBja190bl9kZWNyeXB0aW5nKCkKKyNlbmRpZiAvKiBDS19FTkNS WVBUSU9OICovCisjaWZkZWYgQ0tfU1NMCisgICAgICAgICAgICAgICAgfHwgdGxzX2FjdGl2ZV9m bGFnIHx8IHNzbF9hY3RpdmVfZmxhZworI2VuZGlmIC8qIENLX1NTTCAqLworI2lmZGVmIFJMT0dD T0RFCisjaWZkZWYgQ0tfS0VSQkVST1MKKyNpZmRlZiBDS19FTkNSWVBUSU9OCisgICAgICAgICAg ICAgICAgfHwgdHRucHJvdG8gPT0gTlBfRUs0TE9HSU4gfHwgdHRucHJvdG8gPT0gTlBfRUs1TE9H SU4KKyNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCisjZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8K KyNlbmRpZiAvKiBSTE9HQ09ERSAqLworICAgICAgICAgICAgICAgICApIHsKKwkJc2VjdXJlID0g MTsKKwkgICAgfQorCSAgICBpZiAoc2VjdXJlKSB7CisjaWZkZWYgS1VJCisjaWZuZGVmIEs5NUcK KyAgICAgICAgICAgICAgICBjaGFyIGJ1ZlszMF07CisgICAgICAgICAgICAgICAgc3ByaW50Zihi dWYsIiVzIChTRUNVUkUpIix4bmFtZSk7CisgICAgICAgICAgICAgICAgS3VpU2V0UHJvcGVydHko S1VJX0ZJTEVfVFJBTlNGRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcp IENXX1NQRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgYnVmCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyNlbmRpZiAvKiBLOTVHICovCisjZW5kaWYg LyogS1VJICovCisgICAgICAgICAgICAgICAgcHJpbnR3KCIlcyAoU0VDVVJFKSIseG5hbWUpOwor ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwcmludHcoIiVzIix4bmFtZSk7 CisjaWZkZWYgS1VJCisjaWZuZGVmIEs5NUcKKyAgICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0 eShLVUlfRklMRV9UUkFOU0ZFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9u ZykgQ1dfU1BELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSB4bmFtZQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisjZW5kaWYgLyogSzk1RyAqLworI2Vu ZGlmIC8qIEtVSSAqLworICAgICAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgICAgIHByaW50dygi KG5ldHdvcmspIik7CisjaWZkZWYgS1VJCisjaWZuZGVmIEs5NUcKKyAgICAgICAgICAgIEt1aVNl dFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg KGxvbmcpIENXX1NQRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSAiKG5ldHdv cmspIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyNlbmRpZiAvKiBLOTVHICovCisj ZW5kaWYgLyogS1VJICovCisjZW5kaWYgLyogTkVUQ09OTiAqLworICAgICAgICB9IGVsc2Ugewor ICAgICAgICAgICAgaWYgKHNwZWVkIDwgMEwpCisgICAgICAgICAgICAgIHNwZWVkID0gdHRnc3Bk KCk7CisgICAgICAgICAgICBpZiAoc3BlZWQgPiAwTCkgeworICAgICAgICAgICAgICAgIGlmIChz cGVlZCA9PSA4ODgwKSB7CisgICAgICAgICAgICAgICAgICAgIHByaW50dygiNzUvMTIwMCIpOwor I2lmZGVmIEtVSQorI2lmbmRlZiBLOTVHCisgICAgICAgICAgICAgICAgICAgIEt1aVNldFByb3Bl cnR5KEtVSV9GSUxFX1RSQU5TRkVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAobG9uZykgQ1dfU1BELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9u ZykgIjc1LzEyMDAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisjZW5k aWYgLyogSzk1RyAqLworI2VuZGlmIC8qIEtVSSAqLworICAgICAgICAgICAgICAgIH0gZWxzZSB7 CisgICAgICAgICAgICAgICAgICAgIGNoYXIgc3BlZWRidWZbNjRdIDsKKyAgICAgICAgICAgICAg ICAgICAgc3ByaW50ZihzcGVlZGJ1ZiwgIiVsZCIsIHNwZWVkKTsKKyAgICAgICAgICAgICAgICAg ICAgcHJpbnR3KCIlcyIsc3BlZWRidWYpOworI2lmZGVmIEtVSQorI2lmbmRlZiBLOTVHCisgICAg ICAgICAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgQ1dfU1BELAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgc3BlZWRidWYKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKTsKKyNlbmRpZiAvKiBLOTVHICovCisjZW5kaWYgLyogS1VJICov CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg ICBwcmludHcoInVua25vd24iKTsKKyNpZmRlZiBLVUkKKyNpZm5kZWYgSzk1RworICAgICAgICAg ICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChsb25nKSBDV19TUEQsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKGxvbmcpICIodW5rbm93bikiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KTsKKyNlbmRpZiAvKiBLOTVHICovCisjZW5kaWYgLyogS1VJICovCisgICAgICAgICAgICB9Cisg ICAgICAgIH0KKyAgICAgICAgbW92ZShDV19QQVIsMTQpOworICAgICAgICBwcmludHcoIlBhcml0 eTogJXMiLGZ0cCA/ICJub25lIiA6IHBhcm5hbSgoY2hhcilwYXJpdHkpKTsKKyNpZmRlZiBLVUkK KyNpZm5kZWYgSzk1RworICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwK KyAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX1BBUiwKKyAgICAgICAgICAgICAgICAg ICAgICAgKGxvbmcpIHBhcm5hbSgoY2hhcilwYXJpdHkpCisgICAgICAgICAgICAgICAgICAgICAg ICk7CisjZW5kaWYgLyogSzk1RyAqLworI2VuZGlmIC8qIEtVSSAqLworI2lmZGVmIENLX1RJTUVS UworICAgICAgICBpZiAoLyogcnR0ZmxnICYmICovIHByb3RvY29sID09IFBST1RPX0spIHsKKyAg ICAgICAgICAgIG1vdmUoQ1dfVE1PLCA5KTsgcHJpbnR3KCJSVFQvVGltZW91dDoiKTsgfQorI2Vu ZGlmIC8qIENLX1RJTUVSUyAqLworICAgICAgICBtb3ZlKENXX1RZUCwxMSk7IHByaW50dygiRmls ZSBUeXBlOiIpOworICAgICAgICBtb3ZlKENXX1NJWiwxMSk7IHByaW50dygiRmlsZSBTaXplOiIp OworICAgICAgICBtb3ZlKENXX1BDRCwgOCk7CisgICAgICAgIGNscnRvZW9sKCk7CisgICAgICAg IHBjdGxibCA9ICh3aGF0ICYgV19TRU5EKTsKKyAgICAgICAgcHJpbnR3KCIlczoiLCBwY3RsYmwg PyAiUGVyY2VudCBEb25lIiA6ICJCeXRlcyBTbyBGYXIiKTsKKworI2lmZGVmIFhZWl9JTlRFUk5B TAorICAgICAgICBtb3ZlKENXX0JBUiwgMSk7CisgICAgICAgIHByaW50dygiJTEwcyBQcm90b2Nv bDoiLCBmdHAgPyAiRlRQIiA6IHB0YWJbcHJvdG9jb2xdLnBfbmFtZSk7CisjZW5kaWYgLyogWFla X0lOVEVSTkFMICovCisjaWZkZWYgQ0tfUENUX0JBUgorICAgICAgICBpZiAodGhlcm1vbWV0ZXIp IHsKKyAgICAgICAgICAgIG9sZHBjdCA9IHBjdCA9IDA7CisgICAgICAgICAgICBtb3ZlKENXX0JB UiwyMik7CisgICAgICAgICAgICBwcmludHcoIiAgICAuLi4xMC4uLjIwLi4uMzAuLi40MC4uLjUw Li4uNjAuLi43MC4uLjgwLi4uOTAuLjEwMCIpOworICAgICAgICAgICAgbW92ZShDV19CQVIsMjIr NTYpOworICAgICAgICB9CisjZW5kaWYgLyogQ0tfUENUX0JBUiAqLworICAgICAgICBtb3ZlKENX X1RSLCAgMSk7IHByaW50dygiRXN0aW1hdGVkIFRpbWUgTGVmdDoiKTsKKyAgICAgICAgbW92ZShD V19DUCwgIDIpOyBwcmludHcoIlRyYW5zZmVyIFJhdGUsIENQUzoiKTsKKyAgICAgICAgbW92ZShD V19XUywgIDgpOyBwcmludHcoIldpbmRvdyBTbG90czolcyIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICgocHJvdG9jb2wgPT0gUFJPVE9fSykgJiYgIWZ0cCkgPworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAiIiA6ICIgTi9BIgorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICApOworICAgICAgICBtb3ZlKENXX1BULCAgOSk7IHByaW50dygiUGFja2V0IFR5 cGU6Iik7CisgICAgICAgIGlmIChmdHAgfHwgcHJvdG9jb2wgIT0gUFJPVE9fSykgeworCSAgICBt b3ZlKENXX1BULDIyKTsKKyAgICAgICAgICAgIHByaW50dygiJXMiLCAiTi9BIik7CisgICAgICAg ICAgICBtb3ZlKENXX1BDLCAgMTEpOyBwcmludHcoIkkvTyBDb3VudDoiKTsKKyAgICAgICAgICAg IG1vdmUoQ1dfUEwsICAxMCk7IHByaW50dygiSS9PIExlbmd0aDoiKTsKKyAgICAgICAgfSBlbHNl IHsKKyAgICAgICAgICAgIG1vdmUoQ1dfUEMsICA4KTsgcHJpbnR3KCJQYWNrZXQgQ291bnQ6Iik7 CisgICAgICAgICAgICBtb3ZlKENXX1BMLCAgNyk7IHByaW50dygiUGFja2V0IExlbmd0aDoiKTsK KyAgICAgICAgfQorI2lmbmRlZiBDT01NRU5UCisgICAgICAgIG1vdmUoQ1dfUFIsICA5KTsgcHJp bnR3KCJFcnJvciBDb3VudDoiKTsKKyNlbHNlCisgICAgICAgIG1vdmUoQ1dfUFIsICAyKTsgcHJp bnR3KCJQYWNrZXQgUmV0cnkgQ291bnQ6Iik7CisjZW5kaWYKKyNpZmRlZiBDT01NRU5UCisgICAg ICAgIG1vdmUoQ1dfUEIsICAyKTsgcHJpbnR3KCJQYWNrZXQgQmxvY2sgQ2hlY2s6Iik7CisjZW5k aWYgLyogQ09NTUVOVCAqLworICAgICAgICBtb3ZlKENXX0VSUiwxMCk7IHByaW50dygiTGFzdCBF cnJvcjoiKTsKKyAgICAgICAgbW92ZShDV19NU0csIDgpOyBwcmludHcoIkxhc3QgTWVzc2FnZToi KTsKKwlpZiAoeGZybXNnKSB7CisJICAgIG1vdmUoQ1dfTVNHLCAyMik7IHByaW50dygiJXMiLHhm cm1zZyk7CisJICAgIG1ha2VzdHIoJnhmcm1zZyxOVUxMKTsKKwl9CisgICAgICAgIG1vdmUoQ1df SU5ULCAwKTsKKyAgICAgICAgaWYgKCF4ZnJpbnQpIHsKKyAgICAgICAgICAgIHByaW50dygiKFRy YW5zZmVyIGludGVycnVwdGlvbiBpcyBkaXNhYmxlZCkiKTsKKyAgICAgICAgfSBlbHNlIHsKKyNp ZmRlZiBDS19ORUVEX1NJRworICAgICAgICAgICAgcHJpbnR3KAorIjwlcz5YIHRvIGNhbmNlbCBm aWxlLCA8JXM+WiB0byBjYW5jZWwgZ3JvdXAsIDwlcz48Q1I+IHRvIHJlc2VuZCBsYXN0IHBhY2tl dCIsCisgICAgICAgICAgICAgICAgICAgZGJjaHIoZXNjYXBlKSwgZGJjaHIoZXNjYXBlKSwgZGJj aHIoZXNjYXBlKQorICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICBtb3ZlKENXX0lO VCArIDEsIDApOworICAgICAgICAgICAgcHJpbnR3KAorIjwlcz5FIHRvIHNlbmQgRXJyb3IgcGFj a2V0LCBeQyB0byBxdWl0IGltbWVkaWF0ZWx5LCA8JXM+TCB0byByZWZyZXNoIHNjcmVlbi4iLAor ICAgICAgICAgICAgICAgICAgIGRiY2hyKGVzY2FwZSksIGRiY2hyKGVzY2FwZSkKKyAgICAgICAg ICAgICAgICAgICApOworI2Vsc2UgLyogIUNLX05FRURfU0lHICovCisgICAgICAgICAgICBtb3Zl KENXX0lOVCwgMCk7CisjaWZkZWYgT1MyCisgICAgICAgICAgICBpZiAocHJvdG9jb2wgPT0gUFJP VE9fSykgeworICAgICAgICAgICAgICAgIHByaW50dygKKyJYIHRvIGNhbmNlbCBmaWxlLCBaIHRv IGNhbmNlbCBncm91cCwgPEVudGVyPiB0byByZXNlbmQgbGFzdCBwYWNrZXQsIgorICAgICAgICAg ICAgICAgICAgICAgICApOworICAgICAgICAgICAgfQorI2Vsc2UgLyogIU9TMiAqLworI2lmZGVm IFZNUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEluIFZNUyBhdm9pZCBib3R0b20g bGluZSAqLworICAgICAgICAgICAgcHJpbnR3KAorIlg6IENhbmNlbCB0aGlzIGZpbGU7IEU6IENh bmNlbCB0cmFuc2ZlcjsgXkM6IFF1aXQgbm93OyBeVzogUmVmcmVzaCBzY3JlZW4uIgorICAgICAg ICAgICAgICAgICAgICk7CisjZWxzZQorICAgICAgICAgICAgcHJpbnR3KAorIlggdG8gY2FuY2Vs IGZpbGUsIFogdG8gY2FuY2VsIGdyb3VwLCA8Q1I+IHRvIHJlc2VuZCBsYXN0IHBhY2tldCwiCisg ICAgICAgICAgICAgICAgICAgKTsKKyNlbmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBPUzIgKi8K KworI2lmbmRlZiBWTVMKKyAgICAgICAgICAgIG1vdmUoQ1dfSU5UICsgMSwgMCk7CisgICAgICAg ICAgICBpZiAocHJvdG9jb2wgPT0gUFJPVE9fSykgeworICAgICAgICAgICAgICAgIHByaW50dygK KyJFIHRvIHNlbmQgRXJyb3IgcGFja2V0LCBeQyB0byBxdWl0IGltbWVkaWF0ZWx5LCBeTCB0byBy ZWZyZXNoIHNjcmVlbi4iCisgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICB9 IGVsc2UgeworICAgICAgICAgICAgICAgIHByaW50dygiXkMgdG8gY2FuY2VsIGZpbGUgdHJhbnNm ZXIuIik7CisgICAgICAgICAgICB9CisjZW5kaWYgLyogVk1TICovCisjZW5kaWYgLyogQ0tfTkVF RF9TSUcgKi8KKyAgICAgICAgfQorICAgICAgICByZWZyZXNoKCk7CisgICAgICAgIGNlbmR3ID0g MDsKKyAgICB9CisgICAgZGVidWcoRjEwMSwiU0NSRUVOQyBzd2l0Y2giLCIiLGYpOworICAgIGRl YnVnKEYwMDAsIlNDUkVFTkMgYyIsIiIsYyk7CisgICAgZGVidWcoRjEwMSwiU0NSRUVOQyBuIiwi IixuKTsKKworICAgIGxlbiA9IHN0cmxlbihzKTsgICAgICAgICAgICAgICAgICAgIC8qIExlbmd0 aCBvZiBhcmd1bWVudCBzdHJpbmcgKi8KKyAgICBzd2l0Y2ggKGYpIHsgICAgICAgICAgICAgICAg ICAgICAgICAvKiBIYW5kbGUgb3VyIGZ1bmN0aW9uIGNvZGUgKi8KKyAgICAgIGNhc2UgU0NSX0ZO OiAgICAgICAgICAgICAgICAgICAgICAvKiBGaWxlbmFtZSAqLworICAgICAgICBvbGRwY3QgPSBw Y3QgPSAwTDsgICAgICAgICAgICAgIC8qIFJlc2V0IHBlcmNlbnRzICovCisjaWZkZWYgR0ZUSU1F UgorICAgICAgICBndHYgPSAoQ0tGTE9BVCkgLTEuMDsKKyAgICAgICAgLyogb2xkZ3R2ID0gKENL RkxPQVQpIC0xLjA7ICovCisjZWxzZQorICAgICAgICBndHYgPSAtMUw7CisgICAgICAgIC8qIG9s ZGd0diA9IC0xTDsgKi8KKyNlbmRpZiAvKiBHRlRJTUVSICovCisgICAgICAgIG9sZHdpbiA9IC0x OworICAgICAgICBmc2l6ID0gKENLX09GRl9UKS0xOwkJLyogSW52YWxpZGF0ZSBwcmV2aW91cyBm aWxlIHNpemUgKi8KKyAgICAgICAgbW92ZShDV19QQ0QsMjIpOyAgICAgICAgICAgICAgICAvKiBF cmFzZSBwZXJjZW50IGRvbmUgZnJvbSBsYXN0IHRpbWUgKi8KKyNpZmRlZiBLVUkKKyNpZm5kZWYg Szk1RworICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBD V19QQ0QsIChsb25nKSAwICk7CisgICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFO U0ZFUiwgKGxvbmcpIENXX0ZGQywgKGxvbmcpIDAgKTsKKyNlbmRpZiAvKiBLOTVHICovCisjZW5k aWYgLyogS1VJICovCisgICAgICAgIGNscnRvZW9sKCk7CisgICAgICAgIG1vdmUoQ1dfU0laLDIy KTsgICAgICAgICAgICAgICAgLyogRXJhc2UgZmlsZSBzaXplIGZyb20gbGFzdCB0aW1lICovCisj aWZkZWYgS1VJCisjaWZuZGVmIEs5NUcKKyAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxF X1RSQU5TRkVSLCAobG9uZykgQ1dfU0laLCAobG9uZykgMCApOworI2VuZGlmIC8qIEs5NUcgKi8K KyNlbmRpZiAvKiBLVUkgKi8KKyAgICAgICAgY2xydG9lb2woKTsKKyAgICAgICAgbW92ZShDV19F UlIsMjIpOyAgICAgICAgICAgICAgICAvKiBBbmQgbGFzdCBlcnJvciBtZXNzYWdlICovCisjaWZk ZWYgS1VJCisjaWZuZGVmIEs5NUcKKyAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RS QU5TRkVSLCAobG9uZykgQ1dfRVJSLCAobG9uZykgIiIgKTsKKyNlbmRpZiAvKiBLOTVHICovCisj ZW5kaWYgLyogS1VJICovCisgICAgICAgIGNscnRvZW9sKCk7CisjaWZkZWYgQ09NTUVOVAorI2lm ZGVmIFNUUkVBTUlORworICAgICAgICBpZiAocHJvdG9jb2wgPT0gUFJPVE9fSyAmJiBzdHJlYW1v aykgeworICAgICAgICAgICAgbW92ZShDV19CQVIsIDEpOworI2lmZGVmIFhZWl9JTlRFUk5BTAor ICAgICAgICAgICAgcHJpbnR3KCIgICBLZXJtaXQgU1RSRUFNSU5HOiIpOworI2Vsc2UKKyAgICAg ICAgICAgIHByaW50dygiICAgICAgICAgIFNUUkVBTUlORzoiKTsKKyNlbmRpZiAvKiBYWVpfSU5U RVJOQUwgKi8KKyAgICAgICAgfQorI2VuZGlmIC8qIFNUUkVBTUlORyAqLworI2VuZGlmIC8qIENP TU1FTlQgKi8KKworICAgICAgICBpZiAod2hhdCAmIFdfU0VORCkgewkJLyogSWYgd2UncmUgc2Vu ZGluZy4uLiAqLworI2lmZGVmIE5FV0ZUUAorCSAgICBpZiAod2hhdCAmIFdfRlRQKSB7CQkvKiBG VFAgKi8KKyAgICAgICAgICAgICAgICBtb3ZlKENXX05BTSwxMCk7CisgICAgICAgICAgICAgICAg cHJpbnR3KCIgICBGVFAgUFVUOiIpOworCSAgICB9IGVsc2UKKyNlbmRpZiAvKiBORVdGVFAgKi8K KyNpZmRlZiBDS19SRVNFTkQKKyAgICAgICAgICAgIHN3aXRjaCAoc2VuZG1vZGUpIHsJCS8qIEtl cm1pdCAqLworICAgICAgICAgICAgICBjYXNlIFNNX1JFU0VORDoKKyAgICAgICAgICAgICAgICBt b3ZlKENXX05BTSwxMCk7CisgICAgICAgICAgICAgICAgcHJpbnR3KCIgUkVTRU5ESU5HOiIpOwor ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg ICAgICAgIG1vdmUoQ1dfTkFNLDEwKTsKKyAgICAgICAgICAgICAgICBwcmludHcoIiAgIFNFTkRJ Tkc6Iik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisjZWxzZQorICAg ICAgICAgICAgbW92ZShDV19OQU0sMTApOworICAgICAgICAgICAgcHJpbnR3KCIgICBTRU5ESU5H OiIpOworI2VuZGlmIC8qIENLX1JFU0VORCAqLworCisgICAgICAgIH0gZWxzZSBpZiAod2hhdCAm IFdfUkVDVikgewkvKiBJZiB3ZSdyZSByZWNlaXZpbmcuLi4gKi8KKyNpZmRlZiBORVdGVFAKKwkg ICAgaWYgKHdoYXQgJiBXX0ZUUCkgewkJLyogRlRQICovCisgICAgICAgICAgICAgICAgbW92ZShD V19OQU0sMTApOworICAgICAgICAgICAgICAgIHByaW50dygiICAgRlRQIEdFVDoiKTsKKwkgICAg fSBlbHNlIHsKKyNlbmRpZiAvKiBORVdGVFAgKi8KKwkJbW92ZShDV19OQU0sMTApOworCQlwcmlu dHcoIiBSRUNFSVZJTkc6Iik7CisjaWZkZWYgTkVXRlRQCisJICAgIH0KKyAgICAgICAgfSBlbHNl IGlmICh3aGF0ID09IChXX0ZUUHxXX0ZUX0RFTEUpKSB7CisJCW1vdmUoQ1dfTkFNLDEwKTsKKwkJ cHJpbnR3KCJGVFAgREVMRVRFOiIpOworI2VuZGlmIC8qIE5FV0ZUUCAqLworICAgICAgICB9IGVs c2UgeyAgICAgICAgICAgICAgICAgICAgICAgIC8qIElmIHdlIGRvbid0IGtub3cuLi4gKi8KKyAg ICAgICAgICAgIG1vdmUoQ1dfTkFNLDEwKTsgICAgICAgICAgICAvKiAoc2hvdWxkIG5ldmVyIHNl ZSB0aGlzKSAqLworICAgICAgICAgICAgcHJpbnR3KCIgRmlsZSBOYW1lOiIpOworICAgICAgICB9 CisgICAgICAgIG1vdmUoQ1dfTkFNLDIyKTsgICAgICAgICAgICAgICAgLyogRGlzcGxheSB0aGUg ZmlsZW5hbWUgKi8KKyAgICAgICAgaWYgKGxlbiA+IDU3KSB7CisgICAgICAgICAgICBwcmludHco IiUuNTVzLi4iLHMpOworICAgICAgICAgICAgbGVuID0gNTc7CisgICAgICAgIH0gZWxzZSBwcmlu dHcoIiVzIixzKTsKKyNpZmRlZiBLVUkKKyNpZm5kZWYgSzk1RworICAgICAgICBLdWlTZXRQcm9w ZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19OQU0sIChsb25nKSBzICk7CisjZW5k aWYgLyogSzk1RyAqLworI2VuZGlmIC8qIEtVSSAqLworICAgICAgICBxID0gbGVuOyAgICAgICAg ICAgICAgICAgICAgICAgIC8qIFJlbWVtYmVyIG5hbWUgbGVuZ3RoIGZvciBsYXRlciAqLworICAg ICAgICBjbHJ0b2VvbCgpOworICAgICAgICBzY3JmdCgpOyAgICAgICAgICAgICAgICAgICAgICAg IC8qIERpc3BsYXkgZmlsZSB0eXBlIChjYW4gY2hhbmdlKSAqLworICAgICAgICByZWZyZXNoKCk7 CisjaWZkZWYgT1MyCisgICAgICAgIFNhdmVDbWRNb2RlKDAsIDApOworI2VuZGlmIC8qIE9TMiAq LworICAgICAgICByZXR1cm47CisKKyAgICAgIGNhc2UgU0NSX0FOOiAgICAgICAgICAgICAgICAg ICAgICAvKiBGaWxlIGFzLW5hbWUgKi8KKyAgICAgICAgaWYgKHEgKyBsZW4gKyA0IDwgNTgpIHsg ICAgICAgICAvKiBXaWxsIGZpdCAqLworICAgICAgICAgICAgbW92ZShDV19OQU0sIDIyICsgcSk7 CisgICAgICAgICAgICBwcmludHcoIiA9PiAlcyIscyk7CisjaWZkZWYgS1VJCisjaWZuZGVmIEs5 NUcKKyAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcp IENXX05BTSwgKGxvbmcpIHMgKTsKKyNlbmRpZiAvKiBLOTVHICovCisjZW5kaWYgLyogS1VJICov CisgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogVG9vIGxvbmcgKi8K KyAgICAgICAgICAgIG1vdmUoQ1dfTkFNLCAyMik7ICAgICAgICAgICAvKiBPdmVyd3JpdGUgcHJl dmlvdXMgbmFtZSAqLworICAgICAgICAgICAgcSA9IDA7CisgICAgICAgICAgICBpZiAobGVuICsg NCA+IDU3KSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogd2cxNSAqLworICAg ICAgICAgICAgICAgIHByaW50dygiID0+ICUuNTFzLi4iLHMpOyAgICAgICAgICAgICAgICAgICAg ICAgIC8qIHdnMTUgKi8KKyAgICAgICAgICAgICAgICBsZW4gPSA1MzsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiB3ZzE1ICovCisgICAgICAgICAgICB9IGVsc2UgcHJp bnR3KCIgPT4gJXMiLHMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogd2cxNSAqLworI2lm ZGVmIEtVSQorI2lmbmRlZiBLOTVHCisgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJ TEVfVFJBTlNGRVIsIChsb25nKSBDV19OQU0sIChsb25nKSBzICApOworI2VuZGlmIC8qIEs5NUcg Ki8KKyNlbmRpZiAvKiBLVUkgKi8KKyAgICAgICAgfQorICAgICAgICBxICs9IGxlbiArIDQ7ICAg ICAgICAgICAgICAgICAgIC8qIFJlbWVtYmVyIGhvcml6b250YWwgcG9zaXRpb24gKi8KKyAgICAg ICAgY2xydG9lb2woKTsKKyAgICAgICAgcmVmcmVzaCgpOworI2lmZGVmIE9TMgorICAgICAgICBT YXZlQ21kTW9kZSgwLCAwKTsKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAgcmV0dXJuOworCisg ICAgICBjYXNlIFNDUl9GUzogICAgICAgICAgICAgICAgICAgICAgLyogRmlsZSBzaXplICovCisg ICAgICAgIGZzaXogPSBuOworICAgICAgICBtb3ZlKENXX1NJWiwyMik7CisgICAgICAgIGlmIChm c2l6ID4gKENLX09GRl9UKS0xKSB7CisjaWZkZWYgS1VJCisjaWZuZGVmIEs5NUcKKyAgICAgICAg ICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX1NJWiwgKGxv bmcpIG4gKTsKKyNlbmRpZiAvKiBLOTVHICovCisjZW5kaWYgLyogS1VJICovCisgICAgICAgICAg ICBwcmludHcoIiVzIixja2ZzdG9hKG4pKTsKKyAgICAgICAgfQorCWlmIChmc2l6ID09IC0yTCkg eworCSAgICBwcmludHcoIlBPU1NJQkxZIEVYQ0VFRFMgTE9DQUwgRklMRSBTSVpFIExJTUlUIik7 CisJfQorICAgICAgICBjbHJ0b2VvbCgpOworI2lmZGVmIENPTU1FTlQKKyAgICAgICAgbW92ZShD V19QQ0QsIDgpOworICAgICAgICBpZiAoZnNpeiA+IChDS19PRkZfVCktMSkgewkvKiBQdXQgdXAg cGVyY2VudCBsYWJlbCAqLworICAgICAgICAgICAgcGN0bGJsID0gMTsKKwkgICAgY2xydG9lb2wo KTsKKyAgICAgICAgICAgIHByaW50dygiUGVyY2VudCBEb25lOiIpOworICAgICAgICB9CisjZWxz ZQorCW1vdmUoQ1dfUENELCA4KTsKKwljbHJ0b2VvbCgpOworICAgICAgICBpZiAoZnNpeiA+IChD S19PRkZfVCktMSkgewkvKiBQdXQgdXAgcGVyY2VudCBsYWJlbCAqLworICAgICAgICAgICAgcGN0 bGJsID0gMTsKKyAgICAgICAgICAgIHByaW50dygiUGVyY2VudCBEb25lOiIpOworICAgICAgICB9 IGVsc2UgeworICAgICAgICAgICAgcGN0bGJsID0gMDsKKyAgICAgICAgICAgIHByaW50dygiQnl0 ZXMgU28gRmFyOiIpOworCX0KKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgICAgIGNscnRvZW9s KCk7CisgICAgICAgIHNjcmZ0KCk7ICAgICAgICAgICAgICAgICAgICAgICAgLyogRmlsZSB0eXBl ICovCisgICAgICAgIHJlZnJlc2goKTsKKyNpZmRlZiBPUzIKKyAgICAgICAgU2F2ZUNtZE1vZGUo MCwgMCk7CisjZW5kaWYgLyogT1MyICovCisgICAgICAgIHJldHVybjsKKworICAgICAgY2FzZSBT Q1JfUFQ6ICAgICAgICAgICAgICAgICAgICAgIC8qIFBhY2tldCB0eXBlIG9yIHBzZXVkb3R5cGUg Ki8KKyAgICAgICAgaWYgKHNwYWNrZXRzIDwgNSkgeworICAgICAgICAgICAgZXh0ZXJuIGludCBz eXNpbmRleDsKKyAgICAgICAgICAgIGV4dGVybiBzdHJ1Y3Qgc3lzZGF0YSBzeXNpZGxpc3RbXTsK KyAgICAgICAgICAgIC8qIFRoaW5ncyB0aGF0IHdvbid0IGNoYW5nZSBhZnRlciB0aGUgNHRoIHBh Y2tldCAqLworICAgICAgICAgICAgbW92ZShDV19QQVIsMjIpOworICAgICAgICAgICAgcHJpbnR3 KCIlcyIscGFybmFtKChjaGFyKXBhcml0eSkpOworI2lmZGVmIEtVSQorI2lmbmRlZiBLOTVHCisg ICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAobG9uZykgQ1dfUEFSLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgKGxvbmcpIHBhcm5hbSgoY2hhcilwYXJpdHkpCisgICAgICAgICAgICAgICAgICAgICAgICAg ICApOworI2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBLVUkgKi8KKyAgICAgICAgICAgIGNs cnRvZW9sKCk7CisjaWZkZWYgQ09NTUVOVAorICAgICAgICAgICAgbW92ZShDV19QQiwgMjIpOyAg ICAgICAgICAgIC8qIEJsb2NrIGNoZWNrIG9uIHRoaXMgcGFja2V0ICovCisgICAgICAgICAgICBp ZiAoYmN0dSA9PSA0KQorICAgICAgICAgICAgICBwcmludHcoIkIiKTsKKyAgICAgICAgICAgIGVs c2UKKyAgICAgICAgICAgICAgcHJpbnR3KCIlZCIsYmN0dSk7CisgICAgICAgICAgICBjbHJ0b2Vv bCgpOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAgICAgIGlmICgKKyNpZmRlZiBORVdG VFAKKwkJKGZ0cCAmJiAoc3BhY2tldHMgPT0gMSB8fCBycGFja2V0cyA9PSAxKSkgfHwKKyNlbmRp ZiAvKiBORVdGVFAgKi8KKwkJc3BhY2tldHMgPT0gNAorCQkpIHsKKyAgICAgICAgICAgICAgICBt b3ZlKENXX0xJTiw4KTsKKyAgICAgICAgICAgICAgICBpZiAoCisjaWZkZWYgTkVXRlRQCisJCSAg ICBmdHAgfHwKKyNlbmRpZiAvKiBORVdGVFAgKi8KKwkJICAgICgocHJvdG9jb2wgPT0gUFJPVE9f SykgJiYgKHN5c2luZGV4ID4gLTEpKQorCQkgICAgKSB7CisgICAgICAgICAgICAgICAgICAgIGlm IChuZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vdmUoQ1dfTElOLDgpOworICAgICAg ICAgICAgICAgICAgICAgICAgcHJpbnR3KCJOZXR3b3JrIEhvc3Q6ICVzICglcykiLAorI2lmZGVm IE5FV0ZUUAorCQkJICAgICAgIGZ0cCA/IChmdHBfaG9zdCA/IGZ0cF9ob3N0IDogIiIpIDoKKyNl bmRpZiAvKiBORVdGVFAgKi8KKwkJCSAgICAgICB0dG5hbWUsCisjaWZkZWYgTkVXRlRQCisJCQkg ICAgICAgZnRwID8gZnRwX3NydnR5cCA6CisjZW5kaWYgLyogTkVXRlRQICovCisJCQkgICAgICAg c3lzaWRsaXN0W3N5c2luZGV4XS5zaWRfbmFtZQorCQkJICAgICAgICk7CisgICAgICAgICAgICAg ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtb3ZlKENXX0xJTiwwKTsK KyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50dygiQ29tbXVuaWNhdGlvbiBEZXZpY2U6ICVz IChyZW1vdGUgaG9zdCBpcyAlcykiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dG5h bWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c2lkbGlzdFtzeXNpbmRleF0uc2lk X25hbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICAgICAgICBjbHJ0b2VvbCgpOworICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorI2lmZGVmIENLX1RJTUVSUworICAgICAgICBpZiAo LyogcnR0ZmxnICYmICovIHByb3RvY29sID09IFBST1RPX0spIHsKKyAgICAgICAgICAgIGxvbmcg eHg7CisgICAgICAgICAgICBpZiAoCisjaWZkZWYgU1RSRUFNSU5HCisgICAgICAgICAgICAgICAg c3RyZWFtaW5nICYmIG9sZHdpbiAhPSAtMgorI2Vsc2UKKyAgICAgICAgICAgICAgICAwCisjZW5k aWYgLyogU1RSRUFNSU5HICovCisgICAgICAgICAgICAgICAgKSB7CisgICAgICAgICAgICAgICAg bW92ZShDV19UTU8sIDIyKTsKKyAgICAgICAgICAgICAgICBwcmludHcoIjAwIC8gMDAiKTsKKyAg ICAgICAgICAgICAgICBjbHJ0b2VvbCgpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg ICAgICAgICB4eCA9IChydHRkZWxheSArIDUwMCkgLyAxMDAwOworICAgICAgICAgICAgICAgIGlm ICh4eCAhPSBvbGRydHQgfHwgcmN2dGltbyAhPSBvbGR0aW0pIHsKKyAgICAgICAgICAgICAgICAg ICAgbW92ZShDV19UTU8sIDIyKTsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnR3KCIlMDJsZCAv ICUwMmQiLCB4eCwgcmN2dGltbyk7CisgICAgICAgICAgICAgICAgICAgIG9sZHJ0dCA9IHh4Owor ICAgICAgICAgICAgICAgICAgICBvbGR0aW0gPSByY3Z0aW1vOworICAgICAgICAgICAgICAgICAg ICBjbHJ0b2VvbCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg fQorI2VuZGlmIC8qIENLX1RJTUVSUyAqLworCisgICAgICAgIHggPSAod2hhdCAmIFdfUkVDVikg PyAgICAgICAgICAvKiBQYWNrZXQgbGVuZ3RoICovCisgICAgICAgICAgcnBrdGwrKHByb3RvY29s PT1QUk9UT19LPzE6MCkgOgorICAgICAgICAgICAgc3BrdGw7CisgICAgICAgIGlmICh4ICE9IG9s ZGxlbikgeyAgICAgICAgICAgICAgLyogQnV0IG9ubHkgaWYgaXQgY2hhbmdlZC4gKi8KKyAgICAg ICAgICAgIG1vdmUoQ1dfUEwsIDIyKTsKKyAgICAgICAgICAgIHByaW50dygiJWQiLHgpOworI2lm ZGVmIEtVSQorI2lmbmRlZiBLOTVHCisgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJ TEVfVFJBTlNGRVIsIChsb25nKSBDV19QTCwgKGxvbmcpIHggKTsKKyNlbmRpZiAvKiBLOTVHICov CisjZW5kaWYgLyogS1VJICovCisgICAgICAgICAgICBjbHJ0b2VvbCgpOworICAgICAgICAgICAg b2xkbGVuID0geDsKKyAgICAgICAgfQorICAgICAgICBtb3ZlKENXX1BDLCAyMik7ICAgICAgICAg ICAgICAgIC8qIFBhY2tldCBjb3VudCAoYWx3YXlzKS4gKi8KKworICAgICAgICBwcmludHcoIiVk IiwgKHdoYXQgJiBXX1JFQ1YpID8gcnBhY2tldHMgOiBzcGFja2V0cyk7CisjaWZkZWYgS1VJCisj aWZuZGVmIEs5NUcKKyAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAo bG9uZykgQ1dfUEMsIChsb25nKSBzcGFja2V0cyApOworI2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRp ZiAvKiBLVUkgKi8KKyAgICAgICAgY2xydG9lb2woKTsKKworICAgICAgICBpZiAocHJvdG9jb2wg PT0gUFJPVE9fSyAmJiAhZnRwKSB7IC8qIFdpbmRvdyBzbG90cyAqLworICAgICAgICAgICAgY2hh ciB3c1sxNl07CisgICAgICAgICAgICBpbnQgZmxhZzsKKyAgICAgICAgICAgIGZsYWcgPSAwOwor I2lmZGVmIFNUUkVBTUlORworICAgICAgICAgICAgaWYgKHN0cmVhbWluZykgeworICAgICAgICAg ICAgICAgIGlmIChvbGR3aW4gIT0gLTIpIHsKKyAgICAgICAgICAgICAgICAgICAgc3ByaW50Zih3 cywiU1RSRUFNSU5HIik7CisgICAgICAgICAgICAgICAgICAgIGZsYWcgPSAxOworICAgICAgICAg ICAgICAgICAgICBvbGR3aW4gPSAtMjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9 IGVsc2UKKyNlbmRpZiAvKiBTVFJFQU1JTkcgKi8KKyAgICAgICAgICAgICAgaWYgKHdjdXIgIT0g b2xkd2luKSB7CisgICAgICAgICAgICAgICAgICBzcHJpbnRmKHdzLCAiJWQgb2YgJWQiLCB3Y3Vy IDwgMSA/IDEgOiB3Y3VyLCB3c2xvdG4pOworICAgICAgICAgICAgICAgICAgZmxhZyA9IDE7Cisg ICAgICAgICAgICAgICAgICBvbGR3aW4gPSB3Y3VyOworICAgICAgICAgICAgICB9CisgICAgICAg ICAgICBpZiAoZmxhZykgeworICAgICAgICAgICAgICAgIG1vdmUoQ1dfV1MsIDIyKTsKKyAgICAg ICAgICAgICAgICBwcmludHcoIiVzIiwgd3MpOworICAgICAgICAgICAgICAgIGNscnRvZW9sKCk7 CisjaWZkZWYgS1VJCisjaWZuZGVmIEs5NUcKKyAgICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0 eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19XUywgKGxvbmcpIHdzICk7CisjZW5kaWYg LyogSzk1RyAqLworI2VuZGlmIC8qIEtVSSAqLworICAgICAgICAgICAgfQorICAgICAgICB9Cisg ICAgICAgIGVycm9ycyA9IHJldHJhbnMgKyBjcnVuY2hlZCArIHRpbWVvdXRzOworICAgICAgICBp ZiAoZXJyb3JzICE9IG9sZHRyeSkgeyAgICAgICAgIC8qIFJldHJ5IGNvdW50LCBpZiBjaGFuZ2Vk ICovCisgICAgICAgICAgICBtb3ZlKENXX1BSLCAyMik7CisgICAgICAgICAgICBwcmludHcoIiVk IixlcnJvcnMpOworI2lmZGVmIEtVSQorI2lmbmRlZiBLOTVHCisgICAgICAgICAgICBLdWlTZXRQ cm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19QUiwgKGxvbmcpIGVycm9ycyAp OworI2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBLVUkgKi8KKyAgICAgICAgICAgIGNscnRv ZW9sKCk7CisgICAgICAgICAgICBvbGR0cnkgPSBlcnJvcnM7CisgICAgICAgIH0KKwkvKiBTZW5k ZXIncyBwYWNrZXQgdHlwZSAqLworICAgICAgICBpZiAoIWZ0cCAmJiAoYyAhPSBvbGR0eXAgJiYg YyAhPSAnWScgJiYgYyAhPSAnTicpKSB7CisgICAgICAgICAgICBjaGFyIHR5cGVbMl07CisgICAg ICAgICAgICBzcHJpbnRmKHR5cGUsICIlYyIsYyk7CisgICAgICAgICAgICBtb3ZlKENXX1BULDIy KTsKKyAgICAgICAgICAgIHByaW50dygiJXMiLCB0eXBlKTsKKyNpZmRlZiBLVUkKKyNpZm5kZWYg Szk1RworICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9u ZykgQ1dfUFQsIChsb25nKSB0eXBlICk7CisjZW5kaWYgLyogSzk1RyAqLworI2VuZGlmIC8qIEtV SSAqLworICAgICAgICAgICAgY2xydG9lb2woKTsKKyAgICAgICAgICAgIG9sZHR5cCA9IGM7Cisg ICAgICAgIH0KKyAgICAgICAgc3dpdGNoIChjKSB7ICAgICAgICAgICAgICAgICAgICAvKiBOb3cg aGFuZGxlIHNwZWNpZmljIHBhY2tldCB0eXBlcyAqLworICAgICAgICAgIGNhc2UgJ1MnOiAgICAg ICAgICAgICAgICAgICAgIC8qIEJlZ2lubmluZyBvZiB0cmFuc2ZlciAqLworICAgICAgICAgICAg ZmNudCA9IGZieXQgPSAwTDsgICAgICAgICAgIC8qIENsZWFyIGNvdW50ZXJzICovCisjaWZkZWYg R0ZUSU1FUgorICAgICAgICAgICAgZ3R2ID0gLTEuMDsKKyNlbHNlIC8qIEdGVElNRVIgKi8KKyAg ICAgICAgICAgIGd0diA9IC0xTDsgICAgICAgICAgICAgICAgICAvKiBBbmQgb2xkL25ldyB0aGlu Z3MuLi4gKi8KKyNlbmRpZiAvKiBHRlRJTUVSICovCisgICAgICAgICAgICBvbGRwY3QgPSBwY3Qg PSAwTDsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSAnWic6ICAgICAgICAg ICAgICAgICAgICAgLyogb3IgRU9GICovCisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJzY3JlZW5j IFNDUl9QVCBaIHBrdG51bSIsIiIsbik7CisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJzY3JlZW5j IFNDUl9QVCBaIG9sZHBjdCIsIiIsb2xkcGN0KTsKKyAgICAgICAgICAgIGRlYnVnKEYxMDEsInNj cmVlbmMgU0NSX1BUIFogcGN0IiwiIixwY3QpOworICAgICAgICAgIGNhc2UgJ0QnOiAgICAgICAg ICAgICAgICAgICAgIC8qIERhdGEgcGFja2V0ICovCisgICAgICAgICAgICBpZiAoZnNpeiA+IDBM KSB7ICAgICAgICAgICAgLyogU2hvdyBwZXJjZW50IGRvbmUgaWYga25vd24gKi8KKyAgICAgICAg ICAgICAgICBvbGRwY3QgPSBwY3Q7ICAgICAgICAgICAvKiBSZW1lbWJlciBwcmV2aW91cyBwZXJj ZW50ICovCisgICAgICAgICAgICAgICAgaG93ZmFyID0gZmZjOworI2lmZGVmIENLX1JFU0VORAor ICAgICAgICAgICAgICAgIGlmICh3aGF0ICYgV19TRU5EKQkvKiBBY2NvdW50IGZvciBQU0VORCBv ciBSRVNFTkQgKi8KKyAgICAgICAgICAgICAgICAgIGhvd2ZhciArPSBzZW5kc3RhcnQ7CisgICAg ICAgICAgICAgICAgZWxzZSBpZiAod2hhdCAmIFdfUkVDVikKKyAgICAgICAgICAgICAgICAgIGhv d2ZhciArPSByc19sZW47CisjZW5kaWYgLyogQ0tfUkVTRU5EICovCisgICAgICAgICAgICAgICAg LyogUGVyY2VudCBkb25lLCB0byBiZSBkaXNwbGF5ZWQuLi4gKi8KKyAgICAgICAgICAgICAgICBp ZiAoYyA9PSAnWicpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFkaXNjYXJkICYmICFjeHNl ZW4gJiYgIWN6c2VlbikgcGN0ID0gMTAwTDsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAg ICAgICAgICAgICAgIHBjdCA9IChmc2l6ID4gOTlMKSA/IChob3dmYXIgLyAoZnNpeiAvIDEwMEwp KSA6IDBMOworICAgICAgICAgICAgICAgIGlmIChwY3QgPiAxMDBMIHx8ICAgICAgIC8qIEFsbG93 IGZvciBleHBhbnNpb24gYW5kICovCisgICAgICAgICAgICAgICAgICAgKG9sZHBjdCA9PSA5OUwg JiYgcGN0IDwgMEwpKSAvKiBvdGhlciBib3VuZGFyeSBjb25kaXRpb25zICovCisgICAgICAgICAg ICAgICAgICBwY3QgPSAxMDBMOworICAgICAgICAgICAgICAgIGlmIChwY3QgIT0gb2xkcGN0KSAg ICAgIC8qIE9ubHkgZG8gdGhpcyAxMDAgdGltZXMgcGVyIGZpbGUgKi8KKyAgICAgICAgICAgICAg ICAgIHVwZHBjdChvbGRwY3QsIHBjdCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg ICAgICAgIG1vdmUoQ1dfUENELDIyKTsKKyAgICAgICAgICAgICAgICBwcmludHcoIiVzIiwgY2tm c3RvYShmZmMpKTsKKyAgICAgICAgICAgIH0KKyNpZmRlZiBLVUkKKyNpZm5kZWYgSzk1RworICAg ICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19GRkMs IChsb25nKSBob3dmYXIpOworI2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBLVUkgKi8KKyAg ICAgICAgICAgIGNwcyA9IHNob2NwcygoaW50KSBwY3QsIGZzaXosIGhvd2Zhcik7CisgICAgICAg ICAgICAvKiBvbGRfdHIgPSBzaG9ldGwob2xkX3RyLCBjcHMsIGZzaXosIGhvd2Zhcik7ICovCisg ICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgJyUnOiAgICAgICAgICAgICAgICAg ICAgIC8qIFRpbWVvdXRzLCByZXRyYW5zbWlzc2lvbnMgKi8KKyAgICAgICAgICAgIGNwcyA9IHNo b2NwcygoaW50KSBwY3QsIGZzaXosIGhvd2Zhcik7CisgICAgICAgICAgICAvKiBvbGRfdHIgPSBz aG9ldGwob2xkX3RyLCBjcHMsIGZzaXosIGhvd2Zhcik7ICovCisKKyAgICAgICAgICAgIGVycm9y cyA9IHJldHJhbnMgKyBjcnVuY2hlZCArIHRpbWVvdXRzOworICAgICAgICAgICAgaWYgKGVycm9y cyAhPSBvbGR0cnkpIHsgICAgIC8qIEVycm9yIGNvdW50LCBpZiBjaGFuZ2VkICovCisgICAgICAg ICAgICAgICAgbW92ZShDV19QUiwgMjIpOworICAgICAgICAgICAgICAgIHByaW50dygiJWQiLGVy cm9ycyk7CisgICAgICAgICAgICAgICAgY2xydG9lb2woKTsKKyNpZmRlZiBLVUkKKyNpZm5kZWYg Szk1RworICAgICAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19QUiwgKGxvbmcpIGVycm9y cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisjZW5kaWYgLyogSzk1RyAqLwor I2VuZGlmIC8qIEtVSSAqLworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBvbGR0 cnkgPSBlcnJvcnM7CisgICAgICAgICAgICAgICAgaWYgKHMpIGlmICgqcykgeworICAgICAgICAg ICAgICAgICAgICBtb3ZlKENXX0VSUiwyMik7CisgICAgICAgICAgICAgICAgICAgIHByaW50dygi JXMiLHMpOworICAgICAgICAgICAgICAgICAgICBjbHJ0b2VvbCgpOworI2lmZGVmIEtVSQorI2lm bmRlZiBLOTVHCisgICAgICAgICAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RS QU5TRkVSLCAobG9uZykgQ1dfRVJSLCAobG9uZykgcyk7CisjZW5kaWYgLyogSzk1RyAqLworI2Vu ZGlmIC8qIEtVSSAqLworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg ICAgICBjYXNlICdFJzogICAgICAgICAgICAgICAgICAgICAvKiBFcnJvciBwYWNrZXQgKi8KKyNp ZmRlZiBDT01NRU5UCisgICAgICAgICAgICBtb3ZlKENXX0VSUiwyMik7ICAgICAgICAgICAgLyog UHJpbnQgaXRzIGRhdGEgZmllbGQgKi8KKyAgICAgICAgICAgIGlmICgqcykgeworICAgICAgICAg ICAgICAgIHByaW50dygiJXMiLHMpOworI2lmZGVmIEtVSQorI2lmbmRlZiBLOTVHCisgICAgICAg ICAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfRVJS LCAobG9uZykgcyApOworI2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBLVUkgKi8KKyAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIGNscnRvZW9sKCk7CisjZW5kaWYgLyogQ09NTUVOVCAqLwor ICAgICAgICAgICAgZmNudCA9IGZieXQgPSAwTDsgICAgICAgICAgIC8qIFNvIG5vIGJ5dGVzIGZv ciB0aGlzIGZpbGUgKi8KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgJ1EnOiAg ICAgICAgICAgICAgICAgICAgIC8qIENydW5jaGVkIHBhY2tldCAqLworICAgICAgICAgICAgY3Bz ID0gc2hvY3BzKChpbnQpIHBjdCwgZnNpeiwgaG93ZmFyKTsKKyAgICAgICAgICAgIC8qIG9sZF90 ciA9IHNob2V0bChvbGRfdHIsIGNwcywgZnNpeiwgaG93ZmFyKTsgKi8KKyAgICAgICAgICAgIG1v dmUoQ1dfRVJSLDIyKTsKKyAgICAgICAgICAgIHByaW50dygiRGFtYWdlZCBQYWNrZXQiKTsKKyNp ZmRlZiBLVUkKKyNpZm5kZWYgSzk1RworICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJ TEVfVFJBTlNGRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgQ1dfRVJSLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpICJEYW1hZ2VkIFBhY2tldCIKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICk7CisjZW5kaWYgLyogSzk1RyAqLworI2VuZGlmIC8qIEtV SSAqLworICAgICAgICAgICAgY2xydG9lb2woKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg ICAgIGNhc2UgJ3EnOiAgICAgICAgICAgICAgICAgICAgIC8qIEN0cmwtQyBvciBjb25uZWN0aW9u IGxvc3QgKi8KKyAgICAgICAgICAgIG1vdmUoQ1dfTVNHLDIyKTsKKwkgICAgY2xydG9lb2woKTsK KyAgICAgICAgICAgIGlmICghcykgcyA9ICIiOworICAgICAgICAgICAgcHJpbnR3KCpzID8gcyA6 ICJVc2VyIGludGVycnVwdGlvbiBvciBjb25uZWN0aW9uIGxvc3QiKTsKKyNpZmRlZiBLVUkKKyNp Zm5kZWYgSzk1RworICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgQ1dfTVNHLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgKGxvbmcpIHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Cisj ZW5kaWYgLyogSzk1RyAqLworI2VuZGlmIC8qIEtVSSAqLworICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgICAgY2FzZSAnVCc6ICAgICAgICAgICAgICAgICAgICAgLyogVGltZW91dCAqLworICAg ICAgICAgICAgY3BzID0gc2hvY3BzKChpbnQpIHBjdCwgZnNpeiwgaG93ZmFyKTsKKyAgICAgICAg ICAgIC8qIG9sZF90ciA9IHNob2V0bChvbGRfdHIsIGNwcywgZnNpeiwgaG93ZmFyKTsgKi8KKyAg ICAgICAgICAgIG1vdmUoQ1dfRVJSLDIyKTsKKyAgICAgICAgICAgIHByaW50dygiVGltZW91dCAl ZCBzZWMiLHJjdnRpbW8pOworI2lmZGVmIEtVSQorI2lmbmRlZiBLOTVHCisgICAgICAgICAgICBL dWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIChsb25nKSBDV19FUlIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgIlRp bWVvdXQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICApOworI2VuZGlmIC8qIEs5NUcgKi8K KyNlbmRpZiAvKiBLVUkgKi8KKyAgICAgICAgICAgIGNscnRvZW9sKCk7CisgICAgICAgICAgICBl cnJvcnMgPSByZXRyYW5zICsgY3J1bmNoZWQgKyB0aW1lb3V0czsKKyAgICAgICAgICAgIGlmIChl cnJvcnMgIT0gb2xkdHJ5KSB7ICAgICAvKiBFcnJvciBjb3VudCwgaWYgY2hhbmdlZCAqLworICAg ICAgICAgICAgICAgIG1vdmUoQ1dfUFIsIDIyKTsKKyAgICAgICAgICAgICAgICBwcmludHcoIiVk IixlcnJvcnMpOworI2lmZGVmIEtVSQorI2lmbmRlZiBLOTVHCisgICAgICAgICAgICAgICAgS3Vp U2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKGxvbmcpIENXX1BSLCAobG9uZykgZXJyb3JzCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKTsKKyNlbmRpZiAvKiBLOTVHICovCisjZW5kaWYgLyogS1VJICovCisgICAgICAg ICAgICAgICAgY2xydG9lb2woKTsKKyAgICAgICAgICAgICAgICBvbGR0cnkgPSBlcnJvcnM7Cisg ICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OiAgICAg ICAgICAgICAgICAgICAgICAvKiBPdGhlcnMsIGRvIG5vdGhpbmcgKi8KKyAgICAgICAgICAgIGJy ZWFrOworICAgICAgICB9CisgICAgICAgIHJlZnJlc2goKTsKKyNpZmRlZiBPUzIKKyAgICAgICAg U2F2ZUNtZE1vZGUoMCwgMCk7CisjZW5kaWYgLyogT1MyICovCisgICAgICAgIHJldHVybjsKKwor ICAgICAgY2FzZSBTQ1JfU1Q6ICAgICAgICAgICAgICAgICAgICAgIC8qIEZpbGUgdHJhbnNmZXIg c3RhdHVzICovCisgICAgICAgIGRlYnVnKEYxMDEsInNjcmVlbmMgU0NSX1NUIGMiLCIiLGMpOwor ICAgICAgICBkZWJ1ZyhGMTAxLCJzY3JlZW5jIFNDUl9TVCBzdWNjZXNzIiwiIixzdWNjZXNzKTsK KyAgICAgICAgZGVidWcoRjEwMSwic2NyZWVuYyBTQ1JfU1QgY3hzZWVuIiwiIixjeHNlZW4pOwor I2lmZGVmIENPTU1FTlQKKyAgICAgICAgbW92ZShDV19QQ0QsMjIpOyAgICAgICAgICAgICAgICAv KiBVcGRhdGUgcGVyY2VudCBkb25lICovCisgICAgICAgIGlmIChjID09IFNUX09LKSB7ICAgICAg ICAgICAgICAgLyogT0ssIHByaW50IDEwMCAlICovCisgICAgICAgICAgICBpZiAocGN0bGJsKQor ICAgICAgICAgICAgICB1cGRwY3Qob2xkcGN0LDEwMCk7CisgICAgICAgICAgICBlbHNlCisgICAg ICAgICAgICAgIHByaW50dygiJXMiLCBja2ZzdG9hKGZmYykpOworI2lmZGVmIEtVSQorI2lmbmRl ZiBLOTVHCisgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwgKGxv bmcpIENXX0ZGQywgKGxvbmcpIGZmYyk7CisjZW5kaWYgLyogSzk1RyAqLworI2VuZGlmIC8qIEtV SSAqLworICAgICAgICAgICAgcGN0ID0gMTAwOworICAgICAgICAgICAgb2xkcGN0ID0gMDsKKyAg ICAgICAgfSBlbHNlIGlmIChmc2l6ID4gMEwpICAgICAgICAgICAvKiBOb3QgT0ssIHVwZGF0ZSBm aW5hbCBwZXJjZW50ICovCisvKgorICBUaGUgZWxzZSBwYXJ0IHdyaXRlcyBhbGwgb3ZlciB0aGUg c2NyZWVuIC0tIGhvd2ZhciBhbmQvb3IgZnNpeiBoYXZlCisgIGJlZW4gcmVzZXQgYXMgYSBjb25z ZXF1ZW5jZSBvZiB0aGUgbm90LU9LbmVzcyBvZiB0aGUgdHJhbnNmZXIuCisqLworICAgICAgICAg IGlmIChwY3RsYmwpCisgICAgICAgICAgICB1cGRwY3Qob2xkcGN0LCAoaG93ZmFyICogMTAwTCkg LyBmc2l6KTsKKyAgICAgICAgY2xydG9lb2woKTsKKyNlbHNlCisgICAgICAgIGlmIChjID09IFNU X09LKSB7ICAgICAgICAgICAgICAgLyogT0ssIHByaW50IDEwMCAlICovCisgICAgICAgICAgICBt b3ZlKENXX1BDRCwyMik7ICAgICAgICAgICAgLyogVXBkYXRlIHBlcmNlbnQgZG9uZSAqLworICAg ICAgICAgICAgaWYgKHBjdGxibCkgeworCQlpZiAob2xkcGN0ID09IDApCS8qIFN3aXRjaGluZyBm cm9tICJieXRlcyBzbyBmYXIiICovCisJCSAgY2xydG9lb2woKTsJCS8qIHRvICJwZXJjZW50IGRv bmUiLi4uICovCisJCXVwZHBjdChvbGRwY3QsMTAwKTsKKwkgICAgfSBlbHNlCisgICAgICAgICAg ICAgIHByaW50dygiJXMiLCBja2ZzdG9hKGZmYykpOworI2lmZGVmIEtVSQorI2lmbmRlZiBLOTVH CisgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENX X0ZGQywgKGxvbmcpIGZmYyk7CisjZW5kaWYgLyogSzk1RyAqLworI2VuZGlmIC8qIEtVSSAqLwor I2lmZGVmIENPTU1FTlQKKyAgICAgICAgICAgIHBjdCA9IDEwMDsKKyAgICAgICAgICAgIG9sZHBj dCA9IDA7CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAgICAgICAgY2xydG9lb2woKTsKKyAg ICAgICAgfQorI2VuZGlmIC8qIENPTU1FTlQgKi8KKworI2lmZGVmIENPTU1FTlQKKy8qIE5vLCBs ZWF2ZSBpdCB0aGVyZSBzbyB0aGV5IGNhbiByZWFkIGl0ICovCisgICAgICAgIG1vdmUoQ1dfTVNH LDIyKTsgICAgICAgICAgICAgICAgLyogUmVtb3ZlIGFueSBwcmV2aW91cyBtZXNzYWdlICovCisj aWZkZWYgS1VJCisjaWZuZGVmIEs5NUcKKyAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxF X1RSQU5TRkVSLCAobG9uZykgQ1dfTVNHLCAobG9uZykgIiIgKTsKKyNlbmRpZiAvKiBLOTVHICov CisjZW5kaWYgLyogS1VJICovCisgICAgICAgIGNscnRvZW9sKCk7IHJlZnJlc2goKTsKKyNlbmRp ZiAvKiBDT01NRU5UICovCisKKyAgICAgICAgbW92ZShDV19UUiwgMjIpOworI2lmZGVmIEtVSQor I2lmbmRlZiBLOTVHCisgICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwg KGxvbmcpIENXX1RSLCAobG9uZykgIiIgKTsKKyNlbmRpZiAvKiBLOTVHICovCisjZW5kaWYgLyog S1VJICovCisgICAgICAgIGNscnRvZW9sKCk7IHJlZnJlc2goKTsKKworICAgICAgICBzd2l0Y2gg KGMpIHsgICAgICAgICAgICAgICAgICAgIC8qIFByaW50IG5ldyBzdGF0dXMgbWVzc2FnZSAqLwor ICAgICAgICAgIGNhc2UgU1RfT0s6ICAgICAgICAgICAgICAgICAgIC8qIFRyYW5zZmVyIE9LICov CisgICAgICAgICAgICBmY250Kys7ICAgICAgICAgICAgICAgICAgICAgLyogQ291bnQgdGhpcyBm aWxlICovCisJICAgIGlmICh3aGF0ID09IChXX0ZUUHxXX0ZUX0RFTEUpKSB7CisJCW1vdmUoQ1df TVNHLDIyKTsKKwkJY2xydG9lb2woKTsKKwkJcHJpbnR3KCJEZWxldGUgT0siKTsKKwkgICAgfSBl bHNlIHsKKwkJZmJ5dCArPSBmZmM7CisJCW1vdmUoQ1dfTVNHLDIyKTsKKwkJY2xydG9lb2woKTsK KwkJcHJpbnR3KCJUcmFuc2ZlciBPSyIpOworCSAgICB9CisjaWZkZWYgS1VJCisjaWZuZGVmIEs5 NUcKKyAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX01TRywKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIChsb25nKSAiVHJhbnNmZXIgT0siCisgICAgICAgICAgICAgICAgICAgICAgICAgICAp OworI2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBLVUkgKi8KKyAgICAgICAgICAgIGNscnRv ZW9sKCk7IHJlZnJlc2goKTsKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgIGNhc2Ug U1RfRElTQzogICAgICAgICAgICAgICAgIC8qIERpc2NhcmRlZCAqLworICAgICAgICAgICAgbW92 ZShDV19FUlIsMjIpOworICAgICAgICAgICAgcHJpbnR3KCJGaWxlIGRpc2NhcmRlZCIpOworI2lm ZGVmIEtVSQorI2lmbmRlZiBLOTVHCisgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklM RV9UUkFOU0ZFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19FUlIsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgIkZpbGUgZGlzY2FyZGVkIgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgKTsKKyNlbmRpZiAvKiBLOTVHICovCisjZW5kaWYgLyogS1VJ ICovCisjaWZkZWYgQ09NTUVOVAorICAgICAgICAgICAgcGN0ID0gb2xkcGN0ID0gMDsKKyNlbmRp ZiAvKiBDT01NRU5UICovCisgICAgICAgICAgICBjbHJ0b2VvbCgpOyByZWZyZXNoKCk7CisgICAg ICAgICAgICByZXR1cm47CisKKyAgICAgICAgICBjYXNlIFNUX0lOVDogICAgICAgICAgICAgICAg ICAvKiBJbnRlcnJ1cHRlZCAqLworICAgICAgICAgICAgbW92ZShDV19FUlIsMjIpOworICAgICAg ICAgICAgcHJpbnR3KCJUcmFuc2ZlciBpbnRlcnJ1cHRlZCIpOworI2lmZGVmIEtVSQorI2lmbmRl ZiBLOTVHCisgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19FUlIsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAobG9uZykgIlRyYW5zZmVyIGludGVycnVwdGVkIgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgKTsKKyNlbmRpZiAvKiBLOTVHICovCisjZW5kaWYgLyogS1VJICovCisjaWZk ZWYgQ09NTUVOVAorICAgICAgICAgICAgcGN0ID0gb2xkcGN0ID0gMDsKKyNlbmRpZiAvKiBDT01N RU5UICovCisgICAgICAgICAgICBjbHJ0b2VvbCgpOyByZWZyZXNoKCk7CisgICAgICAgICAgICBy ZXR1cm47CisKKyAgICAgICAgICBjYXNlIFNUX1NLSVA6ICAgICAgICAgICAgICAgICAvKiBTa2lw cGVkICovCisgICAgICAgICAgICBtb3ZlKENXX0VSUiwyMik7CisJICAgIGlmIChuID4gMCAmJiBu IDwgbnNrcmVhc29uKQorCSAgICAgIHByaW50dygiRmlsZSBza2lwcGVkICglcykiLHNrcmVhc29u W25dKTsKKwkgICAgZWxzZQorCSAgICAgIHByaW50dygiRmlsZSBza2lwcGVkIik7CisjaWZkZWYg S1VJCisjaWZuZGVmIEs5NUcKKyAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RS QU5TRkVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX0VSUiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIChsb25nKSAiRmlsZSBza2lwcGVkIgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgKTsKKyNlbmRpZiAvKiBLOTVHICovCisjZW5kaWYgLyogS1VJICovCisj aWZkZWYgQ09NTUVOVAorICAgICAgICAgICAgcGN0ID0gb2xkcGN0ID0gMDsKKyNlbmRpZiAvKiBD T01NRU5UICovCisgICAgICAgICAgICBjbHJ0b2VvbCgpOyByZWZyZXNoKCk7CisgICAgICAgICAg ICByZXR1cm47CisKKyAgICAgICAgICBjYXNlIFNUX0VSUjogICAgICAgICAgICAgICAgICAvKiBF cnJvciBtZXNzYWdlICovCisgICAgICAgICAgICBtb3ZlKENXX0VSUiwyMik7CisgICAgICAgICAg ICBpZiAoIXMpIHMgPSAoY2hhciAqKWVwa3Rtc2c7CisgICAgICAgICAgICBwcmludHcoIiVzIixz KTsKKyNpZmRlZiBLVUkKKyNpZm5kZWYgSzk1RworICAgICAgICAgICAgS3VpU2V0UHJvcGVydHko IEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfRVJSLCAobG9uZykgcyApOworI2VuZGlmIC8q IEs5NUcgKi8KKyNlbmRpZiAvKiBLVUkgKi8KKyNpZmRlZiBDT01NRU5UCisgICAgICAgICAgICBw Y3QgPSBvbGRwY3QgPSAwOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAgICAgIGNscnRv ZW9sKCk7IHJlZnJlc2goKTsKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgIGNhc2Ug U1RfUkVGVTogICAgICAgICAgICAgICAgIC8qIFJlZnVzZWQgKi8KKyAgICAgICAgICAgIG1vdmUo Q1dfRVJSLDIyKTsKKyAgICAgICAgICAgIGlmICgqcykgeworICAgICAgICAgICAgICAgIGNoYXIg ZXJyYnVmWzY0XSA7CisgICAgICAgICAgICAgICAgc3ByaW50ZiggZXJyYnVmLCAiUmVmdXNlZCwg JXMiLCBzICkgOworICAgICAgICAgICAgICAgIHByaW50dygiJXMiLCBlcnJidWYpOworI2lmZGVm IEtVSQorI2lmbmRlZiBLOTVHCisgICAgICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJ TEVfVFJBTlNGRVIsKGxvbmcpIENXX0VSUiwobG9uZykgZXJyYnVmKTsKKyNlbmRpZiAvKiBLOTVH ICovCisjZW5kaWYgLyogS1VJICovCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg ICAgIHByaW50dygiUmVmdXNlZCIpOworI2lmZGVmIEtVSQorI2lmbmRlZiBLOTVHCisgICAgICAg ICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsKGxvbmcpQ1dfRVJSLChs b25nKSJSZWZ1c2VkIik7CisjZW5kaWYgLyogSzk1RyAqLworI2VuZGlmIC8qIEtVSSAqLworICAg ICAgICAgICAgfQorI2lmZGVmIENPTU1FTlQKKyAgICAgICAgICAgIHBjdCA9IG9sZHBjdCA9IDA7 CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAgICAgICAgY2xydG9lb2woKTsgcmVmcmVzaCgp OworICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgY2FzZSBTVF9JTkM6CisgICAgICAg ICAgICBtb3ZlKENXX0VSUiwyMik7CisgICAgICAgICAgICBwcmludHcoIkluY29tcGxldGUiKTsK KyNpZmRlZiBLVUkKKyNpZm5kZWYgSzk1RworICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJ X0ZJTEVfVFJBTlNGRVIsKGxvbmcpQ1dfRVJSLChsb25nKSJJbmNvbXBsZXRlIik7CisjZW5kaWYg LyogSzk1RyAqLworI2VuZGlmIC8qIEtVSSAqLworI2lmZGVmIENPTU1FTlQKKyAgICAgICAgICAg IHBjdCA9IG9sZHBjdCA9IDA7CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAgICAgICAgY2xy dG9lb2woKTsgcmVmcmVzaCgpOworICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgY2Fz ZSBTVF9NU0c6CisgICAgICAgICAgICBtb3ZlKENXX01TRywyMik7CisgICAgICAgICAgICBwcmlu dHcoIiVzIixzKTsKKyNpZmRlZiBLVUkKKyNpZm5kZWYgSzk1RworICAgICAgICAgICAgS3VpU2V0 UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsKGxvbmcpQ1dfTVNHLChsb25nKXMpOworI2VuZGlm IC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBLVUkgKi8KKyAgICAgICAgICAgIGNscnRvZW9sKCk7IHJl ZnJlc2goKTsKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgIGRlZmF1bHQ6ICAgICAg ICAgICAgICAgICAgICAgIC8qIEJhZCBjYWxsICovCisgICAgICAgICAgICBtb3ZlKENXX0VSUiwy Mik7CisgICAgICAgICAgICBwcmludHcoIioqKiBzY3JlZW4oKSBjYWxsZWQgd2l0aCBiYWQgc3Rh dHVzICoqKiIpOworI2lmZGVmIEtVSQorI2lmbmRlZiBLOTVHCisgICAgICAgICAgICBLdWlTZXRQ cm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19FUlIsCisgICAgICAgICAgICAg ICAgICAgICAgIChsb25nKSAiKioqIHNjcmVlbigpIGNhbGxlZCB3aXRoIGJhZCBzdGF0dXMgKioq IiApOworI2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBLVUkgKi8KKyAgICAgICAgICAgIGNs cnRvZW9sKCk7IHJlZnJlc2goKTsgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgIGNhc2UgU0NS X1RDOiB7ICAgICAgICAgICAgICAgICAgICAvKiBUcmFuc2FjdGlvbiBjb21wbGV0ZSAqLworICAg ICAgICAgIGNoYXIgbXNnYnVmWzEyOF07CisgICAgICAgICAgbW92ZShDV19DUCwyMik7ICAgICAg ICAgICAgICAgLyogT3ZlcmFsbCB0cmFuc2ZlciByYXRlICovCisjaWZkZWYgS1VJCisjaWZuZGVm IEs5NUcKKyAgICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25n KSBDV19DUCwgdGZjcHMpOworI2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBLVUkgKi8KKyAg ICAgICAgICBwcmludHcoIiVzIiwgY2tmc3RvYSh0ZmNwcykpOworICAgICAgICAgIGNscnRvZW9s KCk7CisgICAgICAgICAgaWYgKHN1Y2Nlc3MpIHsKKyAgICAgICAgICAgICAgbW92ZShDV19NU0cs MjIpOyAgICAgICAgICAvKiBQcmludCBzdGF0aXN0aWNzIGluIG1lc3NhZ2UgbGluZSAqLworICAg ICAgICAgICAgICBjbHJ0b2VvbCgpOworICAgICAgICAgIH0KKyAgICAgICAgICBpZiAoc3VjY2Vz cykgeworICAgICAgICAgICAgICBzcHJpbnRmKG1zZ2J1ZiwKKyAgICAgICAgICAgICAgICAgICAg ICAiU1VDQ0VTUy4gIEZpbGVzOiAlbGQsIEJ5dGVzOiAlcywgJWxkIENQUyIsCisgICAgICAgICAg ICAgICAgICAgICAgZmlsY250IC0gZmlscmVqLAorICAgICAgICAgICAgICAgICAgICAgIGNrZnN0 b2EoZmJ5dCksCisgICAgICAgICAgICAgICAgICAgICAgdGZjcHMKKyAgICAgICAgICAgICAgICAg ICAgICApOworICAgICAgICAgICAgICBwcmludHcoIiVzIiwgbXNnYnVmKTsKKyNpZmRlZiBLVUkK KyNpZm5kZWYgSzk1RworICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFO U0ZFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX01TRywKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIG1zZ2J1ZgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICApOworI2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBLVUkgKi8KKyAgICAg ICAgICAgICAgY2xydG9lb2woKTsKKworICAgICAgICAgIH0KKyAgICAgICAgICBtb3ZlKENXX1RS LCAxKTsKKyAgICAgICAgICBwcmludHcoIiAgICAgICBFbGFwc2VkIFRpbWU6ICVzIixoaG1tc3Mo KGxvbmcpCisjaWZkZWYgR0ZUSU1FUgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoZnB0c2VjcyArIDAuNSkKKyNlbHNlCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzZWNzCisjZW5kaWYgLyogR0ZUSU1F UiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KSk7CisjaWZkZWYgS1VJCisjaWZuZGVmIEs5NUcKKyAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShL VUlfRklMRV9UUkFOU0ZFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgQ1dfVFIs CisgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIGhobW1zcygobG9uZykKKyNpZmRlZiBH RlRJTUVSCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZnB0c2VjcyAr IDAuNSkKKyNlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0c2Vj cworI2VuZGlmIC8qIEdGVElNRVIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICkpOworI2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBLVUkgKi8KKyAgICAgICAg ICBjbHJ0b2VvbCgpOworICAgICAgICAgIG1vdmUoMjMsMCk7IGNscnRvZW9sKCk7ICAgICAgIC8q IENsZWFyIGluc3RydWN0aW9ucyBsaW5lcyAqLworICAgICAgICAgIG1vdmUoMjIsMCk7IGNscnRv ZW9sKCk7ICAgICAgIC8qIHRvIG1ha2Ugcm9vbSBmb3IgcHJvbXB0LiAqLworICAgICAgICAgIHJl ZnJlc2goKTsKKworI2lmZGVmIEdGVElNRVIKKyAgICAgICAgICBvbGRndHYgPSAoQ0tGTE9BVCkg LTEuMDsKKyNlbHNlCisgICAgICAgICAgb2xkZ3R2ID0gLTFMOworI2VuZGlmIC8qIEdGVElNRVIg Ki8KKworI2lmbmRlZiBWTVNDVVJTRQorCSAgZGVidWcoRjEwMCwic2NyZWVuYyBlbmR3aW4gQSIs IiIsMCk7CisgICAgICAgICAgZW5kd2luKCk7CisjaWZkZWYgQ09NTUVOVAorLyoKKyAgV2h5IGFu ZCB3aGVuIHdhcyB0aGlzIGNhbGwgdG8gY29ucmVzKCkgYWRkZWQ/ICBJdCBtYWtlcyBubyBzZW5z ZSwKKyAgYW5kIGl0IGJyZWFrcyBlY2hvaW5nIG9uIFNvbGFyaXMgOC4KKyovCisjaWZkZWYgU09M QVJJUworICAgICAgICAgIGNvbnJlcygpOworI2VuZGlmIC8qIFNPTEFSSVMgKi8KKyNlbmRpZiAv KiBDT01NRU5UICovCisjZW5kaWYgLyogVk1TQ1VSU0UgKi8KKworI2lmZGVmIENPTU1FTlQKKyAg ICAgICAgICBwY3QgPSAxMDA7IG9sZHBjdCA9IDA7ICAgICAgICAvKiBSZXNldCB0aGVzZSBmb3Ig bmV4dCB0aW1lLiAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAgICBvbGR0eXAgPSAw OyBvbGRydHQgPSAtMUw7IG9sZHRyeSA9IC0xOyBvbGRsZW4gPSAtMTsKKyAgICAgICAgICBvbGR0 aW0gPSAtMTsKKyAgICAgICAgICBjZW5kdyA9IDE7CisgICAgICAgICAgaWYgKHhmcmJlbCkgYmxl ZXAoQlBfTk9URSk7ICAgLyogQ2xvc2Ugd2luZG93LCB0aGVuIGJlZXAuICovCisjaWZkZWYgVU5J WAorICAgICAgICAgIGZmbHVzaChzdGRvdXQpOworI2VuZGlmIC8qIFVOSVggKi8KKyAgICAgICAg ICBmdF93aW4gPSAwOyAgICAgICAgICAgICAgICAgICAvKiBXaW5kb3cgY2xvc2VkLiAqLworICAg ICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICAgIGNhc2UgU0NSX0VNOiAgICAgICAgICAgICAg ICAgICAgICAvKiBFcnJvciBwYWNrZXQgKGZhdGFsKSAqLworICAgICAgICBtb3ZlIChDV19FUlIs MjIpOworICAgICAgICBwcmludHcoIkZBSUxVUkU6ICVzIixzKTsKKyNpZmRlZiBLVUkKKyNpZm5k ZWYgSzk1RworICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25n KSBDV19FUlIsIChsb25nKSBzICk7CisjZW5kaWYgLyogSzk1RyAqLworI2VuZGlmIC8qIEtVSSAq LworICAgICAgICBpZiAoeGZyYmVsKSBibGVlcChCUF9GQUlMKTsKKyNpZmRlZiBDT01NRU5UCisg ICAgICAgIHBjdCA9IG9sZHBjdCA9IDA7CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAgICBj bHJ0b2VvbCgpOyByZWZyZXNoKCk7IHJldHVybjsKKworICAgICAgY2FzZSBTQ1JfUUU6ICAgICAg ICAgICAgICAgICAgICAgIC8qIFF1YW50aXR5IGVxdWFscyAqLworICAgICAgY2FzZSBTQ1JfVFU6 ICAgICAgICAgICAgICAgICAgICAgIC8qIFVuZGVsaW1pdGVkIHRleHQgKi8KKyAgICAgIGNhc2Ug U0NSX1ROOiAgICAgICAgICAgICAgICAgICAgICAvKiBUZXh0IGRlbGltaXRlZCBhdCBzdGFydCAq LworICAgICAgY2FzZSBTQ1JfVFo6ICAgICAgICAgICAgICAgICAgICAgIC8qIFRleHQgZGVsaW1p dGVkIGF0IGVuZCAqLworICAgICAgICByZXR1cm47ICAgICAgICAgICAgICAgICAgICAgICAgIC8q IChpZ25vcmVkIGluIGZ1bGxzY3JlZW4gZGlzcGxheSkgKi8KKworICAgICAgY2FzZSBTQ1JfTVM6 CQkJLyogTWVzc2FnZSBmcm9tIEtlcm1pdCBwYXJ0bmVyICovCisgICAgICAgIG1vdmUoQ1dfTVNH LDIyKTsKKwlwcmludHcoIiVzIixzKTsKKyAgICAgICAgY2xydG9lb2woKTsgcmVmcmVzaCgpOyBy ZXR1cm47CisKKyAgICAgIGNhc2UgU0NSX1hEOiAgICAgICAgICAgICAgICAgICAgICAvKiBYLXBh Y2tldCBkYXRhICovCisgICAgICAgIHBjdCA9IG9sZHBjdCA9IDA7CisgICAgICAgIG1vdmUoQ1df TkFNLDIyKTsKKyAgICAgICAgcHJpbnR3KCIlcyIscyk7CisjaWZkZWYgS1VJCisjaWZuZGVmIEs5 NUcKKyAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1df TkFNLCAobG9uZykgcyApOworI2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBLVUkgKi8KKyAg ICAgICAgY2xydG9lb2woKTsgcmVmcmVzaCgpOyByZXR1cm47CisKKyAgICAgIGNhc2UgU0NSX0NX OiAgICAgICAgICAgICAgICAgICAgICAvKiBDbG9zZSBXaW5kb3cgKi8KKyAgICAgICAgY2xydG9l b2woKTsgbW92ZSgyMywwKTsgY2xydG9lb2woKTsgbW92ZSgyMiwwKTsgY2xydG9lb2woKTsKKyAg ICAgICAgcmVmcmVzaCgpOworI2lmZGVmIENPTU1FTlQKKyAgICAgICAgcGN0ID0gMTAwOyBvbGRw Y3QgPSAwOyAgICAgICAgICAvKiBSZXNldCB0aGVzZSBmb3IgbmV4dCB0aW1lLiAqLworI2VuZGlm IC8qIENPTU1FTlQgKi8KKyAgICAgICAgb2xkdHlwID0gMDsgb2xkcnR0ID0gLTFMOyBvbGR0cnkg PSAtMTsgb2xkbGVuID0gLTE7CisgICAgICAgIG9sZHRpbSA9IC0xOworCisjaWZuZGVmIFZNU0NV UlNFCisJZGVidWcoRjEwMCwic2NyZWVuYyBlbmR3aW4gQiIsIiIsMCk7CisgICAgICAgIGVuZHdp bigpOworI2VuZGlmIC8qIFZNU0NVUlNFICovCisgICAgICAgIGZ0X3dpbiA9IDA7ICAgICAgICAg ICAgICAgICAgICAgLyogRmxhZyB0aGF0IHdpbmRvdyBpcyBjbG9zZWQuICovCisgICAgICAgIGNl bmR3ID0gMTsgcmV0dXJuOworCisgICAgICBjYXNlIFNDUl9DRDogICAgICAgICAgICAgICAgICAg ICAgLyogRGlzcGxheSBjdXJyZW50IGRpcmVjdG9yeSAqLworICAgICAgICBtb3ZlKENXX0RJUiwy Mik7CisgICAgICAgICBwcmludHcoIiVzIiwgcyk7CisjaWZkZWYgS1VJCisjaWZuZGVmIEs5NUcK KyAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfRElS LCAobG9uZykgcyApOworI2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBLVUkgKi8KKyAgICAg ICAgY2xydG9lb2woKTsKKyAgICAgICAgcmVmcmVzaCgpOworI2lmZGVmIE9TMgorICAgICAgICBT YXZlQ21kTW9kZSgwLCAwKTsKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAgcmV0dXJuOworCisg ICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQmFkIGNhbGwgKi8KKyAg ICAgICAgbW92ZSAoQ1dfRVJSLDIyKTsKKyNpZmRlZiBLVUkKKyNpZm5kZWYgSzk1RworICAgICAg ICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKKyAgICAgICAgICAgICAgICAgICAg ICAgKGxvbmcpIENXX0VSUiwKKyAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpICIqKiogc2Ny ZWVuKCkgY2FsbGVkIHdpdGggYmFkIGZ1bmN0aW9uIGNvZGUgKioqIgorICAgICAgICAgICAgICAg ICAgICAgICApOworI2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBLVUkgKi8KKyAgICAgICAg cHJpbnR3KCIqKiogc2NyZWVuKCkgY2FsbGVkIHdpdGggYmFkIGZ1bmN0aW9uIGNvZGUgKioqIik7 CisgICAgICAgIGNscnRvZW9sKCk7IHJlZnJlc2goKTsgcmV0dXJuOworICAgIH0KK30KKyNlbmRp ZiAvKiBDS19DVVJTRVMgKi8KKworI2lmZGVmIEtVSQorI2lmZGVmIENLX0FOU0lDCit2b2lkCitz Y3JlZW5nKGludCBmLCBjaGFyIGMsbG9uZyBuLGNoYXIgKnMpCisjZWxzZQorQ0tWT0lECitzY3Jl ZW5nKGYsYyxuLHMpCitpbnQgZjsgICAgICAgICAgLyogYXJndW1lbnQgZGVzY3JpcHRvciAqLwor Y2hhciBjOyAgICAgICAgIC8qIGEgY2hhcmFjdGVyIG9yIHNtYWxsIGludGVnZXIgKi8KK2xvbmcg bjsgICAgICAgICAvKiBhIGxvbmcgaW50ZWdlciAqLworY2hhciAqczsgICAgICAgIC8qIGEgc3Ry aW5nICovCisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIHNjcmVlbmcoKSAqLyB7CisjaWZkZWYg Q0tfU1NMCisgICAgZXh0ZXJuIGludCB0bHNfYWN0aXZlX2ZsYWcsIHNzbF9hY3RpdmVfZmxhZzsK KyNlbmRpZiAvKiBDS19TU0wgKi8KKyNpZmRlZiBSTE9HQ09ERQorICAgIGV4dGVybiBpbnQgdHRu cHJvdG87CisjZW5kaWYgLyogUkxPR0NPREUgKi8KKyAgICBzdGF0aWMgaW50IHEgPSAwOworICAg IHN0YXRpYyBDS19PRkZfVCBmc2l6ID0gKENLX09GRl9UKS0xOyAvKiBDb3B5IG9mIGZpbGUgc2l6 ZSAqLworICAgIHN0YXRpYyBsb25nIGZjbnQgPSAwTDsgICAgLyogTnVtYmVyIG9mIGZpbGVzIHRy YW5zZmVycmVkICovCisgICAgc3RhdGljIGxvbmcgZmJ5dCA9IDBMOyAgICAvKiBUb3RhbCBmaWxl IGJ5dGVzIG9mIGFsbCBmaWxlcyB0cmFuc2ZlcnJlZCAqLworICAgIHN0YXRpYyBDS19PRkZfVCBo b3dmYXIgPSAoQ0tfT0ZGX1QpMDsgLyogSG93IG11Y2ggb2YgZmlsZSB4ZmVyJ2Qgc28gZmFyICov CisgICAgc3RhdGljIGludCAgcGN0bGJsID0gMEw7ICAvKiBQZXJjZW50IGRvbmUgdnMgQnl0ZXMg c28gZmFyICovCisgICAgbG9uZyBjcHMgPSAwTDsKKworICAgIGludCBuZXQgPSAwOworICAgIGlu dCB4bmV0ID0gMDsKKyAgICBpbnQgZnRwID0gMDsKKyAgICBpbnQgbGVuOyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBMZW5ndGggb2Ygc3RyaW5nICovCisgICAgaW50IGVycm9ycyA9IDA7 ICAgICAgICAgICAgICAgICAgICAgLyogRXJyb3IgY291bnRlciAqLworICAgIGludCB4OyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdvcmtlciAqLworCisgICAgZGVidWcoRjEwMSwi c2NyZWVuZyBjaW5pdCIsIiIsY2luaXQpOworICAgIGRlYnVnKEYxMDEsInNjcmVlbmcgY2VuZHci LCIiLGNlbmR3KTsKKworICAgIGlmICghcykgcyA9ICIiOyAgICAgICAgICAgICAgICAgICAgIC8q IEFsd2F5cyBkbyB0aGlzLiAqLworCisgICAgZnRwID0gKHdoYXQgJiBXX0ZUUCkgPyAxIDogMDsJ LyogRlRQIG9yIEtlcm1pdCAqLworICAgIG5ldCA9IG5ldHdvcmsgfHwgZnRwOworICAgIHhuZXQg PSBmdHAgPyAxIDogbmV0dHlwZTsJCS8qIE5FVF9UQ1BCID09IDEgKi8KKworICAgIGlmIChjaW5p dCA9PSAwIHx8IGNlbmR3ID4gMCkgeyAgICAgIC8qIEhhbmRsZSBib3JkZXJsaW5lIGNhc2VzLi4u ICovCisgICAgICAgIGlmIChmID09IFNDUl9DVykgeyAgICAgICAgICAgICAgLyogQ2xvc2Ugd2lu ZG93LCBidXQgaXQncyBub3Qgb3BlbiAqLworICAgICAgICAgICAgZnRfd2luID0gMDsKKyAgICAg ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBkZWJ1ZyhGMTExLCJzY3JlZW5nIEEi LHMsZik7CisgICAgICAgIGlmIChmID09IFNDUl9FTSB8fAorICAgICAgICAgICAoZiA9PSBTQ1Jf UFQgJiYgYyA9PSAnRScpKSB7IC8qIEZhdGFsIGVycm9yIGJlZm9yZSB3aW5kb3cgb3BlbiAqLwor ICAgICAgICAgICAgY29ub2xsKCIiKTsgY29ub2MoJz8nKTsgY29ub2xsKHMpOyByZXR1cm47IC8q IFJlZ3VsYXIgZGlzcGxheSAqLworICAgICAgICB9CisgICAgfQorICAgIGlmIChjaW5pdCA9PSAw KSB7ICAgICAgICAgICAgICAgICAgIC8qIE9ubHkgY2FsbCBpbml0c2NyKCkgb25jZSAqLworCS8q IENoZWNrIHRoZXNlIG5vdyAtLSBpZiB0aGV5IGFyZSBkZWZpbmVkIGJ1dCBub3QgbnVtZXJpYyAq LworCS8qIHRoZXkgY2FuIGNyYXNoIGN1cnNlcyAqLworICAgICAgICBjZW5kdyA9IDE7ICAgICAg ICAgICAgICAgICAgICAgIC8qIE5ldyB3aW5kb3cgbmVlZHMgcmVwYWludGluZyAqLworICAgICAg ICBkZWJ1ZyhGMTAwLCJzY3JlZW5nIGNhbGxpbmcgaW5pdHNjciIsIiIsMCk7CisgICAgICAgIGlu aXRzY3IoKTsgICAgICAgICAgICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSBjdXJzZXMuICovCisg ICAgICAgIGRlYnVnKEYxMDAsInNjcmVlbmcgaW5pdHNjciBvayIsIiIsMCk7CisgICAgICAgIGNp bml0Kys7ICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVtZW1iZXIgY3Vyc2VzIHdhcyBpbml0 aWFsaXplZC4gKi8KKyAgICB9CisgICAgZnRfd2luID0gMTsgICAgICAgICAgICAgICAgICAgICAg ICAgLyogV2luZG93IGlzIG9wZW4gKi8KKyAgICBpZiAocmVwYWludCkgeworI2lmZGVmIENLX1dS RUZSRVNICisvKgorICBUaGlzIHRvdGFsbHkgcmVwYWludHMgdGhlIHNjcmVlbiwganVzdCB3aGF0 IHdlIHdhbnQsIGJ1dCB3ZSBjYW4gb25seQorICBkbyB0aGlzIHdpdGggcmVhbCBjdXJzZXMsIGFu ZCB0aGVuIG9ubHkgaWYgY2xlYXJvaygpIGFuZCB3cmVmcmVzaCgpIGFyZQorICBwcm92aWRlZCBp biB0aGUgY3Vyc2VzIGxpYnJhcnkuCisqLworICAgICAgICBSZXN0b3JlQ21kTW9kZSgpOworI2Vs c2UgIC8qIE5vIENLX1dSRUZSRVNIICovCisvKgorICBLZXJtaXQncyBkby1pdC15b3Vyc2VsZiBt ZXRob2QsIHdvcmtzIHdpdGggYWxsIHR5cGVzIG9mIGZ1bGxzY3JlZW4KKyAgc3VwcG9ydCwgYnV0 IGRvZXMgbm90IHJlcGFpbnQgYWxsIHRoZSBmaWVsZHMuICBGb3IgZXhhbXBsZSwgdGhlIGZpbGVu YW1lCisgIGlzIGxvc3QsIGJlY2F1c2UgaXQgYXJyaXZlcyBhdCBhIGNlcnRhaW4gdGltZSBhbmQg bmV2ZXIgY29tZXMgYWdhaW4sIGFuZAorICBLZXJtaXQgcHJlc2VudGx5IGRvZXMgbm90IHNhdmUg aXQgYW55d2hlcmUuICBNYWtpbmcgdGhpcyBtZXRob2Qgd29yayBmb3IKKyAgYWxsIGZpZWxkcyB3 b3VsZCBiZSBhIHJhdGhlciBtYWpvciByZWNvZGluZyB0YXNrLCBkdXBsaWNhdGluZyB3aGF0IGN1 cnNlcworICBhbHJlYWR5IGRvZXMsIGFuZCB3b3VsZCBhZGQgYSBsb3Qgb2YgY29tcGxleGl0eSBh bmQgc3RvcmFnZSBzcGFjZS4KKyovCisgICAgICAgIGNlbmR3ID0gMTsKKyNlbmRpZiAvKiBDS19X UkVGUkVTSCAqLworICAgICAgICByZXBhaW50ID0gMDsKKyAgICB9CisgICAgaWYgKGNlbmR3KSB7 ICAgICAgICAgICAgICAgICAgICAgICAgLyogZW5kd2luKCkgd2FzIGNhbGxlZCBwcmV2aW91c2x5 ICovCisgICAgICAgIGRlYnVnKEYxMDAsInNjcmVlbmcgc2V0dXAgb2siLCIiLDApOworICAgICAg ICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19ESVIsIChsb25n KSB6Z3RkaXIoKSApOworICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIs IChsb25nKSBDV19MSU4sCisgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgKAorI2lmZGVm IE5FV0ZUUAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdHAgPyAoZnRwX2hvc3Qg PyBmdHBfaG9zdCA6ICIodW5rbm93bikiKSA6CisjZW5kaWYgLyogTkVXRlRQICovCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHR0bmFtZSkgKTsKKworICAgICAgICBpZiAobmV0KSB7 CisjaWZkZWYgTkVUQ09OTgorCSAgICBpbnQgc2VjdXJlID0gMDsKKwkgICAgY2hhciAqIHhuYW1l OworCSAgICBpZiAoeG5ldCA+IG5uZXRuYW1lKQorCSAgICAgIHhuYW1lID0gIltFUlJPUl0iOwor CSAgICBlbHNlCisJICAgICAgeG5hbWUgPSBuZXRuYW1lW3huZXRdOworI2lmZGVmIE5FV0ZUUAor ICAgICAgICAgICAgaWYgKGZ0cCkgeworCQlpZiAoZnRwaXNzZWN1cmUoKSkKKwkJICBzZWN1cmUg PSAxOworCSAgICB9IGVsc2UKKyNlbmRpZiAvKiBORVdGVFAgKi8KKwkgICAgICBpZiAoMAorI2lm ZGVmIFNTSEJVSUxUSU4KKyAgICAgICAgICAgICAgICB8fCBJU19TU0goKQorI2VuZGlmIC8qIFNT SEJVSUxUSU4gKi8KKyNpZmRlZiBDS19FTkNSWVBUSU9OCisgICAgICAgICAgICAgICAgfHwgY2tf dG5fZW5jcnlwdGluZygpICYmIGNrX3RuX2RlY3J5cHRpbmcoKQorI2VuZGlmIC8qIENLX0VOQ1JZ UFRJT04gKi8KKyNpZmRlZiBDS19TU0wKKyAgICAgICAgICAgICAgICB8fCB0bHNfYWN0aXZlX2Zs YWcgfHwgc3NsX2FjdGl2ZV9mbGFnCisjZW5kaWYgLyogQ0tfU1NMICovCisjaWZkZWYgUkxPR0NP REUKKyNpZmRlZiBDS19LRVJCRVJPUworI2lmZGVmIENLX0VOQ1JZUFRJT04KKyAgICAgICAgICAg ICAgICB8fCB0dG5wcm90byA9PSBOUF9FSzRMT0dJTiB8fCB0dG5wcm90byA9PSBOUF9FSzVMT0dJ TgorI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KKyNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLwor I2VuZGlmIC8qIFJMT0dDT0RFICovCisgICAgICAgICAgICAgICAgICkgeworCQlzZWN1cmUgPSAx OworCSAgICB9CisJICAgIGlmIChzZWN1cmUpIHsKKyAgICAgICAgICAgICAgICBjaGFyIGJ1Zlsz MF07CisgICAgICAgICAgICAgICAgc3ByaW50ZihidWYsIiVzIChTRUNVUkUpIix4bmFtZSk7Cisg ICAgICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX1NQRCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAobG9uZykgYnVmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgS3VpU2V0UHJvcGVydHko S1VJX0ZJTEVfVFJBTlNGRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcp IENXX1NQRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgeG5hbWUKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgfQorI2Vsc2UKKyAg ICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgKGxvbmcpIENXX1NQRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg IChsb25nKSAiKG5ldHdvcmspIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyNlbmRp ZiAvKiBORVRDT05OICovCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoc3BlZWQg PCAwTCkKKyAgICAgICAgICAgICAgc3BlZWQgPSB0dGdzcGQoKTsKKyAgICAgICAgICAgIGlmIChz cGVlZCA+IDBMKSB7CisgICAgICAgICAgICAgICAgaWYgKHNwZWVkID09IDg4ODApIHsKKyAgICAg ICAgICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19TUEQsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChsb25nKSAiNzUvMTIwMCIKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg ICAgICAgICAgICBjaGFyIHNwZWVkYnVmWzY0XSA7CisgICAgICAgICAgICAgICAgICAgIHNwcmlu dGYoc3BlZWRidWYsICIlbGQiLCBzcGVlZCk7CisgICAgICAgICAgICAgICAgICAgIEt1aVNldFBy b3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAobG9uZykgQ1dfU1BELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo bG9uZykgc3BlZWRidWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEt1 aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChsb25nKSBDV19TUEQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxv bmcpICIodW5rbm93bikiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAg ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFO U0ZFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX1BBUiwKKyAgICAgICAgICAg ICAgICAgICAgICAgKGxvbmcpIHBhcm5hbSgoY2hhcilwYXJpdHkpCisgICAgICAgICAgICAgICAg ICAgICAgICk7CisgICAgICAgIHBjdGxibCA9ICh3aGF0ICYgV19TRU5EKTsKKyAgICAgICAgY2Vu ZHcgPSAwOworICAgIH0KKyAgICBkZWJ1ZyhGMTAxLCJTQ1JFRU5DIHN3aXRjaCIsIiIsZik7Cisg ICAgZGVidWcoRjAwMCwiU0NSRUVOQyBjIiwiIixjKTsKKyAgICBkZWJ1ZyhGMTAxLCJTQ1JFRU5D IG4iLCIiLG4pOworCisgICAgbGVuID0gc3RybGVuKHMpOyAgICAgICAgICAgICAgICAgICAgLyog TGVuZ3RoIG9mIGFyZ3VtZW50IHN0cmluZyAqLworICAgIHN3aXRjaCAoZikgeyAgICAgICAgICAg ICAgICAgICAgICAgIC8qIEhhbmRsZSBvdXIgZnVuY3Rpb24gY29kZSAqLworICAgICAgY2FzZSBT Q1JfRk46ICAgICAgICAgICAgICAgICAgICAgIC8qIEZpbGVuYW1lICovCisgICAgICAgIG9sZHBj dCA9IHBjdCA9IDBMOyAgICAgICAgICAgICAgLyogUmVzZXQgcGVyY2VudHMgKi8KKyNpZmRlZiBH RlRJTUVSCisgICAgICAgIGd0diA9IChDS0ZMT0FUKSAtMS4wOworICAgICAgICAvKiBvbGRndHYg PSAoQ0tGTE9BVCkgLTEuMDsgKi8KKyNlbHNlCisgICAgICAgIGd0diA9IC0xTDsKKyAgICAgICAg Lyogb2xkZ3R2ID0gLTFMOyAqLworI2VuZGlmIC8qIEdGVElNRVIgKi8KKyAgICAgICAgb2xkd2lu ID0gLTE7CisgICAgICAgIGZzaXogPSAoQ0tfT0ZGX1QpLTFMOwkJLyogSW52YWxpZGF0ZSBwcmV2 aW91cyBmaWxlIHNpemUgKi8KKyAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5T RkVSLCAobG9uZykgQ1dfUENELCAobG9uZykgMCApOworICAgICAgICBLdWlTZXRQcm9wZXJ0eSgg S1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19GRkMsIChsb25nKSAwICk7CisgICAgICAgIEt1 aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX1NJWiwgKGxvbmcpIDAg KTsKKyAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1df RVJSLCAobG9uZykgIiIgKTsKKworICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJB TlNGRVIsIChsb25nKSBDV19OQU0sIChsb25nKSBzICk7CisgICAgICAgIHEgPSBsZW47ICAgICAg ICAgICAgICAgICAgICAgICAgLyogUmVtZW1iZXIgbmFtZSBsZW5ndGggZm9yIGxhdGVyICovCisg ICAgICAgIHNjcmZ0KCk7ICAgICAgICAgICAgICAgICAgICAgICAgLyogRGlzcGxheSBmaWxlIHR5 cGUgKGNhbiBjaGFuZ2UpICovCisjaWZkZWYgT1MyCisgICAgICAgIFNhdmVDbWRNb2RlKDAsIDAp OworI2VuZGlmIC8qIE9TMiAqLworICAgICAgICByZXR1cm47CisKKyAgICAgIGNhc2UgU0NSX0FO OiAgICAgICAgICAgICAgICAgICAgICAvKiBGaWxlIGFzLW5hbWUgKi8KKyAgICAgICAgS3VpU2V0 UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfTkFNLCAobG9uZykgcyApOwor I2lmZGVmIE9TMgorICAgICAgICBTYXZlQ21kTW9kZSgwLCAwKTsKKyNlbmRpZiAvKiBPUzIgKi8K KyAgICAgICAgcmV0dXJuOworCisgICAgICBjYXNlIFNDUl9GUzogICAgICAgICAgICAgICAgICAg ICAgLyogRmlsZSBzaXplICovCisgICAgICAgIGZzaXogPSBuOworICAgICAgICBpZiAoZnNpeiA+ IChDS19PRkZfVCktMSkgeworICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RS QU5TRkVSLCAobG9uZykgQ1dfU0laLCAobG9uZykgbiApOworICAgICAgICB9CisgICAgICAgIGlm IChmc2l6ID4gKENLX09GRl9UKS0xKSB7CS8qIFB1dCB1cCBwZXJjZW50IGxhYmVsICovCisgICAg ICAgICAgICBwY3RsYmwgPSAxOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcGN0bGJs ID0gMDsKKwl9CisgICAgICAgIHNjcmZ0KCk7ICAgICAgICAgICAgICAgICAgICAgICAgLyogRmls ZSB0eXBlICovCisjaWZkZWYgT1MyCisgICAgICAgIFNhdmVDbWRNb2RlKDAsIDApOworI2VuZGlm IC8qIE9TMiAqLworICAgICAgICByZXR1cm47CisKKyAgICAgIGNhc2UgU0NSX1BUOiAgICAgICAg ICAgICAgICAgICAgICAvKiBQYWNrZXQgdHlwZSBvciBwc2V1ZG90eXBlICovCisgICAgICAgIGlm IChzcGFja2V0cyA8IDUpIHsKKyAgICAgICAgICAgIGV4dGVybiBpbnQgc3lzaW5kZXg7CisgICAg ICAgICAgICBleHRlcm4gc3RydWN0IHN5c2RhdGEgc3lzaWRsaXN0W107CisgICAgICAgICAgICAv KiBUaGluZ3MgdGhhdCB3b24ndCBjaGFuZ2UgYWZ0ZXIgdGhlIDR0aCBwYWNrZXQgKi8KKyAgICAg ICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgIChsb25nKSBDV19QQVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAo bG9uZykgcGFybmFtKChjaGFyKXBhcml0eSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICk7 CisgICAgICAgICAgICBpZiAoCisjaWZkZWYgTkVXRlRQCisJCShmdHAgJiYgKHNwYWNrZXRzID09 IDEgfHwgcnBhY2tldHMgPT0gMSkpIHx8CisjZW5kaWYgLyogTkVXRlRQICovCisJCXNwYWNrZXRz ID09IDQKKwkJKSB7CisgICAgICAgICAgICAgICAgaWYgKAorI2lmZGVmIE5FV0ZUUAorCQkgICAg ZnRwIHx8CisjZW5kaWYgLyogTkVXRlRQICovCisJCSAgICAoKHByb3RvY29sID09IFBST1RPX0sp ICYmIChzeXNpbmRleCA+IC0xKSkKKwkJICAgICkgeworICAgICAgICAgICAgICAgICAgICBjaGFy IG1zZ2J1ZlsxMjhdOworICAgICAgICAgICAgICAgICAgICBpZiAobmV0KSB7CisgICAgICAgICAg ICAgICAgICAgICAgICBzcHJpbnRmKG1zZ2J1ZiwiTmV0d29yayBIb3N0OiAlcyAoJXMpIiwKKyNp ZmRlZiBORVdGVFAKKwkJCSAgICAgICBmdHAgPyAoZnRwX2hvc3QgPyBmdHBfaG9zdCA6ICIiKSA6 CisjZW5kaWYgLyogTkVXRlRQICovCisJCQkgICAgICAgdHRuYW1lLAorI2lmZGVmIE5FV0ZUUAor CQkJICAgICAgIGZ0cCA/IGZ0cF9zcnZ0eXAgOgorI2VuZGlmIC8qIE5FV0ZUUCAqLworCQkJICAg ICAgIHN5c2lkbGlzdFtzeXNpbmRleF0uc2lkX25hbWUKKwkJCSAgICAgICApOworICAgICAgICAg ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgc3ByaW50Zihtc2di dWYsCisJCQkJIkNvbW11bmljYXRpb24gRGV2aWNlOiAlcyAocmVtb3RlIGhvc3QgaXMgJXMpIiwK KwkJCQl0dG5hbWUsCisJCQkJc3lzaWRsaXN0W3N5c2luZGV4XS5zaWRfbmFtZQorCQkJCSk7Cisg ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgS3VpU2V0UHJvcGVydHko IEtVSV9GSUxFX1RSQU5TRkVSLAorCQkJCSAgICAobG9uZykgQ1dfTElOLAorCQkJCSAgICAobG9u ZykgbXNnYnVmCisJCQkJICAgICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor ICAgICAgICB9CisjaWZkZWYgQ0tfVElNRVJTCisgICAgICAgIGlmICgvKiBydHRmbGcgJiYgKi8g cHJvdG9jb2wgPT0gUFJPVE9fSykgeworICAgICAgICAgICAgbG9uZyB4eDsKKyAgICAgICAgICAg IGlmICgKKyNpZmRlZiBTVFJFQU1JTkcKKyAgICAgICAgICAgICAgICBzdHJlYW1pbmcgJiYgb2xk d2luICE9IC0yCisjZWxzZQorICAgICAgICAgICAgICAgIDAKKyNlbmRpZiAvKiBTVFJFQU1JTkcg Ki8KKyAgICAgICAgICAgICAgICApIHsKKyAgICAgICAgICAgICAgICBjaGFyIG1zZ2J1Zls2NF07 CisgICAgICAgICAgICAgICAgc3ByaW50Zihtc2didWYsIjAwIC8gMDAiKTsKKyAgICAgICAgICAg ICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsCisJCQkJKGxvbmcpIENXX1RN TywKKwkJCQkobG9uZykgbXNnYnVmCisJCQkJKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg ICAgICAgICAgICAgeHggPSAocnR0ZGVsYXkgKyA1MDApIC8gMTAwMDsKKyAgICAgICAgICAgICAg ICBpZiAoeHggIT0gb2xkcnR0IHx8IHJjdnRpbW8gIT0gb2xkdGltKSB7CisgICAgICAgICAgICAg ICAgICAgIGNoYXIgbXNnYnVmWzY0XTsKKyAgICAgICAgICAgICAgICAgICAgc3ByaW50Zihtc2di dWYsIiUwMmxkIC8gJTAyZCIsIHh4LCByY3Z0aW1vKTsKKyAgICAgICAgICAgICAgICAgICAgS3Vp U2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLAorCQkJCSAgICAobG9uZykgQ1dfVE1PLAor CQkJCSAgICAobG9uZykgbXNnYnVmCisJCQkJICAgICk7CisgICAgICAgICAgICAgICAgICAgIG9s ZHJ0dCA9IHh4OworICAgICAgICAgICAgICAgICAgICBvbGR0aW0gPSByY3Z0aW1vOworICAgICAg ICAgICAgICAgICAgICBjbHJ0b2VvbCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg IH0KKyAgICAgICAgfQorI2VuZGlmIC8qIENLX1RJTUVSUyAqLworCisgICAgICAgIHggPSAod2hh dCAmIFdfUkVDVikgPyAgICAgICAgICAvKiBQYWNrZXQgbGVuZ3RoICovCisgICAgICAgICAgcnBr dGwrKHByb3RvY29sPT1QUk9UT19LPzE6MCkgOgorICAgICAgICAgICAgc3BrdGw7CisgICAgICAg IGlmICh4ICE9IG9sZGxlbikgeyAgICAgICAgICAgICAgLyogQnV0IG9ubHkgaWYgaXQgY2hhbmdl ZC4gKi8KKyAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxv bmcpIENXX1BMLCAobG9uZykgeCApOworICAgICAgICAgICAgb2xkbGVuID0geDsKKyAgICAgICAg fQorICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19Q QywgKGxvbmcpIHNwYWNrZXRzICk7CisKKyAgICAgICAgaWYgKHByb3RvY29sID09IFBST1RPX0sg JiYgIWZ0cCkgeyAvKiBXaW5kb3cgc2xvdHMgKi8KKyAgICAgICAgICAgIGNoYXIgd3NbMTZdOwor ICAgICAgICAgICAgaW50IGZsYWc7CisgICAgICAgICAgICBmbGFnID0gMDsKKyNpZmRlZiBTVFJF QU1JTkcKKyAgICAgICAgICAgIGlmIChzdHJlYW1pbmcpIHsKKyAgICAgICAgICAgICAgICBpZiAo b2xkd2luICE9IC0yKSB7CisgICAgICAgICAgICAgICAgICAgIHNwcmludGYod3MsIlNUUkVBTUlO RyIpOworICAgICAgICAgICAgICAgICAgICBmbGFnID0gMTsKKyAgICAgICAgICAgICAgICAgICAg b2xkd2luID0gLTI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlCisjZW5k aWYgLyogU1RSRUFNSU5HICovCisgICAgICAgICAgICAgIGlmICh3Y3VyICE9IG9sZHdpbikgewor ICAgICAgICAgICAgICAgICAgc3ByaW50Zih3cywgIiVkIG9mICVkIiwgd2N1ciA8IDEgPyAxIDog d2N1ciwgd3Nsb3RuKTsKKyAgICAgICAgICAgICAgICAgIGZsYWcgPSAxOworICAgICAgICAgICAg ICAgICAgb2xkd2luID0gd2N1cjsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGZs YWcpIHsKKyAgICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIs IChsb25nKSBDV19XUywgKGxvbmcpIHdzICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg ICAgICAgZXJyb3JzID0gcmV0cmFucyArIGNydW5jaGVkICsgdGltZW91dHM7CisgICAgICAgIGlm IChlcnJvcnMgIT0gb2xkdHJ5KSB7ICAgICAgICAgLyogUmV0cnkgY291bnQsIGlmIGNoYW5nZWQg Ki8KKyAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcp IENXX1BSLCAobG9uZykgZXJyb3JzICk7CisgICAgICAgICAgICBvbGR0cnkgPSBlcnJvcnM7Cisg ICAgICAgIH0KKwkvKiBTZW5kZXIncyBwYWNrZXQgdHlwZSAqLworICAgICAgICBpZiAoIWZ0cCAm JiAoYyAhPSBvbGR0eXAgJiYgYyAhPSAnWScgJiYgYyAhPSAnTicpKSB7CisgICAgICAgICAgICBj aGFyIHR5cGVbMl07CisgICAgICAgICAgICBzcHJpbnRmKHR5cGUsICIlYyIsYyk7CisgICAgICAg ICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19QVCwgKGxv bmcpIHR5cGUgKTsKKyAgICAgICAgICAgIG9sZHR5cCA9IGM7CisgICAgICAgIH0KKyAgICAgICAg c3dpdGNoIChjKSB7ICAgICAgICAgICAgICAgICAgICAvKiBOb3cgaGFuZGxlIHNwZWNpZmljIHBh Y2tldCB0eXBlcyAqLworICAgICAgICAgIGNhc2UgJ1MnOiAgICAgICAgICAgICAgICAgICAgIC8q IEJlZ2lubmluZyBvZiB0cmFuc2ZlciAqLworICAgICAgICAgICAgZmNudCA9IGZieXQgPSAwTDsg ICAgICAgICAgIC8qIENsZWFyIGNvdW50ZXJzICovCisjaWZkZWYgR0ZUSU1FUgorICAgICAgICAg ICAgZ3R2ID0gLTEuMDsKKyNlbHNlIC8qIEdGVElNRVIgKi8KKyAgICAgICAgICAgIGd0diA9IC0x TDsgICAgICAgICAgICAgICAgICAvKiBBbmQgb2xkL25ldyB0aGluZ3MuLi4gKi8KKyNlbmRpZiAv KiBHRlRJTUVSICovCisgICAgICAgICAgICBvbGRwY3QgPSBwY3QgPSAwTDsKKyAgICAgICAgICAg IGJyZWFrOworCisgICAgICAgICAgY2FzZSAnWic6ICAgICAgICAgICAgICAgICAgICAgLyogb3Ig RU9GICovCisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJzY3JlZW5nIFNDUl9QVCBaIHBrdG51bSIs IiIsbik7CisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJzY3JlZW5nIFNDUl9QVCBaIG9sZHBjdCIs IiIsb2xkcGN0KTsKKyAgICAgICAgICAgIGRlYnVnKEYxMDEsInNjcmVlbmcgU0NSX1BUIFogcGN0 IiwiIixwY3QpOworICAgICAgICAgIGNhc2UgJ0QnOiAgICAgICAgICAgICAgICAgICAgIC8qIERh dGEgcGFja2V0ICovCisgICAgICAgICAgICBpZiAoZnNpeiA+IDBMKSB7ICAgICAgICAgICAgLyog U2hvdyBwZXJjZW50IGRvbmUgaWYga25vd24gKi8KKyAgICAgICAgICAgICAgICBvbGRwY3QgPSBw Y3Q7ICAgICAgICAgICAvKiBSZW1lbWJlciBwcmV2aW91cyBwZXJjZW50ICovCisgICAgICAgICAg ICAgICAgaG93ZmFyID0gZmZjOworI2lmZGVmIENLX1JFU0VORAorICAgICAgICAgICAgICAgIGlm ICh3aGF0ICYgV19TRU5EKQkvKiBBY2NvdW50IGZvciBQU0VORCBvciBSRVNFTkQgKi8KKyAgICAg ICAgICAgICAgICAgIGhvd2ZhciArPSBzZW5kc3RhcnQ7CisgICAgICAgICAgICAgICAgZWxzZSBp ZiAod2hhdCAmIFdfUkVDVikKKyAgICAgICAgICAgICAgICAgIGhvd2ZhciArPSByc19sZW47Cisj ZW5kaWYgLyogQ0tfUkVTRU5EICovCisgICAgICAgICAgICAgICAgLyogUGVyY2VudCBkb25lLCB0 byBiZSBkaXNwbGF5ZWQuLi4gKi8KKyAgICAgICAgICAgICAgICBpZiAoYyA9PSAnWicpIHsKKyAg ICAgICAgICAgICAgICAgICAgaWYgKCFkaXNjYXJkICYmICFjeHNlZW4gJiYgIWN6c2VlbikgcGN0 ID0gMTAwTDsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgIHBjdCA9 IChmc2l6ID4gOTlMKSA/IChob3dmYXIgLyAoZnNpeiAvIDEwMEwpKSA6IDBMOworICAgICAgICAg ICAgICAgIGlmIChwY3QgPiAxMDBMIHx8ICAgICAgIC8qIEFsbG93IGZvciBleHBhbnNpb24gYW5k ICovCisgICAgICAgICAgICAgICAgICAgKG9sZHBjdCA9PSA5OUwgJiYgcGN0IDwgMEwpKSAvKiBv dGhlciBib3VuZGFyeSBjb25kaXRpb25zICovCisgICAgICAgICAgICAgICAgICBwY3QgPSAxMDBM OworICAgICAgICAgICAgICAgIGlmIChwY3QgIT0gb2xkcGN0KSAgICAgIC8qIE9ubHkgZG8gdGhp cyAxMDAgdGltZXMgcGVyIGZpbGUgKi8KKyAgICAgICAgICAgICAgICAgIHVwZHBjdChvbGRwY3Qs IHBjdCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEt1aVNldFByb3Bl cnR5KEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfRkZDLCAobG9uZykgZmZjKTsKKyAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLCAo bG9uZykgQ1dfRkZDLCAobG9uZykgaG93ZmFyKTsKKyAgICAgICAgICAgIGNwcyA9IHNob2Nwcygo aW50KSBwY3QsIGZzaXosIGhvd2Zhcik7CisgICAgICAgICAgICAvKiBvbGRfdHIgPSBzaG9ldGwo b2xkX3RyLCBjcHMsIGZzaXosIGhvd2Zhcik7ICovCisgICAgICAgICAgICBicmVhazsKKworICAg ICAgICAgIGNhc2UgJyUnOiAgICAgICAgICAgICAgICAgICAgIC8qIFRpbWVvdXRzLCByZXRyYW5z bWlzc2lvbnMgKi8KKyAgICAgICAgICAgIGNwcyA9IHNob2NwcygoaW50KSBwY3QsIGZzaXosIGhv d2Zhcik7CisgICAgICAgICAgICAvKiBvbGRfdHIgPSBzaG9ldGwob2xkX3RyLCBjcHMsIGZzaXos IGhvd2Zhcik7ICovCisKKyAgICAgICAgICAgIGVycm9ycyA9IHJldHJhbnMgKyBjcnVuY2hlZCAr IHRpbWVvdXRzOworICAgICAgICAgICAgaWYgKGVycm9ycyAhPSBvbGR0cnkpIHsgICAgIC8qIEVy cm9yIGNvdW50LCBpZiBjaGFuZ2VkICovCisgICAgICAgICAgICAgICAgS3VpU2V0UHJvcGVydHko S1VJX0ZJTEVfVFJBTlNGRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcp IENXX1BSLAorCQkJICAgICAgIChsb25nKSBlcnJvcnMKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBvbGR0cnkgPSBl cnJvcnM7CisgICAgICAgICAgICAgICAgaWYgKHMpIGlmICgqcykgeworICAgICAgICAgICAgICAg ICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX0VSUiwgKGxv bmcpIHMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBj YXNlICdFJzogICAgICAgICAgICAgICAgICAgICAvKiBFcnJvciBwYWNrZXQgKi8KKyAgICAgICAg ICAgIGlmICgqcykgeworICAgICAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9U UkFOU0ZFUiwgKGxvbmcpIENXX0VSUiwgKGxvbmcpIHMgKTsKKyAgICAgICAgICAgIH0KKyAgICAg ICAgICAgIGZjbnQgPSBmYnl0ID0gMEw7ICAgICAgICAgICAvKiBTbyBubyBieXRlcyBmb3IgdGhp cyBmaWxlICovCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlICdRJzogICAgICAg ICAgICAgICAgICAgICAvKiBDcnVuY2hlZCBwYWNrZXQgKi8KKyAgICAgICAgICAgIGNwcyA9IHNo b2NwcygoaW50KSBwY3QsIGZzaXosIGhvd2Zhcik7CisgICAgICAgICAgICAvKiBvbGRfdHIgPSBz aG9ldGwob2xkX3RyLCBjcHMsIGZzaXosIGhvd2Zhcik7ICovCisgICAgICAgICAgICBLdWlTZXRQ cm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChs b25nKSBDV19FUlIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgIkRhbWFnZWQg UGFja2V0IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIGJyZWFr OworICAgICAgICAgIGNhc2UgJ3EnOiAgICAgICAgICAgICAgICAgICAgIC8qIEN0cmwtQyBvciBj b25uZWN0aW9uIGxvc3QgKi8KKyAgICAgICAgICAgIGlmICghcykgcyA9ICIiOworICAgICAgICAg ICAgaWYgKCEqcykgcyA9ICJVc2VyIGludGVycnVwdGlvbiBvciBjb25uZWN0aW9uIGxvc3QiOwor ICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAobG9uZykgQ1dfTVNHLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgKGxvbmcpIHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICBi cmVhazsKKyAgICAgICAgICBjYXNlICdUJzogICAgICAgICAgICAgICAgICAgICAvKiBUaW1lb3V0 ICovCisgICAgICAgICAgICBjcHMgPSBzaG9jcHMoKGludCkgcGN0LCBmc2l6LCBob3dmYXIpOwor ICAgICAgICAgICAgLyogb2xkX3RyID0gc2hvZXRsKG9sZF90ciwgY3BzLCBmc2l6LCBob3dmYXIp OyAqLworICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgQ1dfRVJSLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgKGxvbmcpICJUaW1lb3V0IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsK KyAgICAgICAgICAgIGVycm9ycyA9IHJldHJhbnMgKyBjcnVuY2hlZCArIHRpbWVvdXRzOworICAg ICAgICAgICAgaWYgKGVycm9ycyAhPSBvbGR0cnkpIHsgICAgIC8qIEVycm9yIGNvdW50LCBpZiBj aGFuZ2VkICovCisgICAgICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNG RVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX1BSLCAobG9uZykg ZXJyb3JzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAg ICBvbGR0cnkgPSBlcnJvcnM7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAvKiBPdGhlcnMsIGRvIG5vdGhp bmcgKi8KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisjaWZkZWYgT1MyCisgICAgICAg IFNhdmVDbWRNb2RlKDAsIDApOworI2VuZGlmIC8qIE9TMiAqLworICAgICAgICByZXR1cm47CisK KyAgICAgIGNhc2UgU0NSX1NUOiAgICAgICAgICAgICAgICAgICAgICAvKiBGaWxlIHRyYW5zZmVy IHN0YXR1cyAqLworICAgICAgICBkZWJ1ZyhGMTAxLCJzY3JlZW5nIFNDUl9TVCBjIiwiIixjKTsK KyAgICAgICAgZGVidWcoRjEwMSwic2NyZWVuZyBTQ1JfU1Qgc3VjY2VzcyIsIiIsc3VjY2Vzcyk7 CisgICAgICAgIGRlYnVnKEYxMDEsInNjcmVlbmcgU0NSX1NUIGN4c2VlbiIsIiIsY3hzZWVuKTsK KyNpZmRlZiBDT01NRU5UCisgICAgICAgIGlmIChjID09IFNUX09LKSB7ICAgICAgICAgICAgICAg LyogT0ssIHByaW50IDEwMCAlICovCisgICAgICAgICAgICBpZiAocGN0bGJsKQorICAgICAgICAg ICAgICB1cGRwY3Qob2xkcGN0LDEwMCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg ICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19GRkMsIChsb25n KSBmZmMpOworICAgICAgICAgICAgcGN0ID0gMTAwOworICAgICAgICAgICAgb2xkcGN0ID0gMDsK KyAgICAgICAgfSBlbHNlIGlmIChmc2l6ID4gMEwpICAgICAgICAgICAvKiBOb3QgT0ssIHVwZGF0 ZSBmaW5hbCBwZXJjZW50ICovCisvKgorICBUaGUgZWxzZSBwYXJ0IHdyaXRlcyBhbGwgb3ZlciB0 aGUgc2NyZWVuIC0tIGhvd2ZhciBhbmQvb3IgZnNpeiBoYXZlCisgIGJlZW4gcmVzZXQgYXMgYSBj b25zZXF1ZW5jZSBvZiB0aGUgbm90LU9LbmVzcyBvZiB0aGUgdHJhbnNmZXIuCisqLworICAgICAg ICAgIGlmIChwY3RsYmwpCisgICAgICAgICAgICB1cGRwY3Qob2xkcGN0LCAoaG93ZmFyICogMTAw TCkgLyBmc2l6KTsKKyNlbHNlCisgICAgICAgIGlmIChjID09IFNUX09LKSB7ICAgICAgICAgICAg ICAgLyogT0ssIHByaW50IDEwMCAlICovCisgICAgICAgICAgICBpZiAocGN0bGJsKSB7CisJCXVw ZHBjdChvbGRwY3QsMTAwKTsKKwkgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgS3VpU2V0UHJv cGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19GRkMsIChsb25nKSBmZmMpOworI2lm ZGVmIENPTU1FTlQKKyAgICAgICAgICAgIHBjdCA9IDEwMDsKKyAgICAgICAgICAgIG9sZHBjdCA9 IDA7CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAgICB9CisjZW5kaWYgLyogQ09NTUVOVCAq LworCisgICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENX X1RSLCAobG9uZykgIiIgKTsKKworICAgICAgICBzd2l0Y2ggKGMpIHsgICAgICAgICAgICAgICAg ICAgIC8qIFByaW50IG5ldyBzdGF0dXMgbWVzc2FnZSAqLworICAgICAgICAgIGNhc2UgU1RfT0s6 ICAgICAgICAgICAgICAgICAgIC8qIFRyYW5zZmVyIE9LICovCisgICAgICAgICAgICBmY250Kys7 ICAgICAgICAgICAgICAgICAgICAgLyogQ291bnQgdGhpcyBmaWxlICovCisJICAgIGlmICh3aGF0 ID09IChXX0ZUUHxXX0ZUX0RFTEUpKSB7CisgICAgICAgICAgICAgICAgS3VpU2V0UHJvcGVydHko S1VJX0ZJTEVfVFJBTlNGRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25n KSBDV19NU0csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSAiRGVsZXRl IE9LIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworCSAgICB9IGVsc2Ugewor CQlmYnl0ICs9IGZmYzsKKyAgICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9U UkFOU0ZFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX01TRywK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpICJUcmFuc2ZlciBPSyIKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKwkgICAgfQorICAgICAgICAgICAgcmV0 dXJuOworCisgICAgICAgICAgY2FzZSBTVF9ESVNDOiAgICAgICAgICAgICAgICAgLyogRGlzY2Fy ZGVkICovCisgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19FUlIsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAobG9uZykgIkZpbGUgZGlzY2FyZGVkIgorICAgICAgICAgICAgICAgICAgICAg ICAgICAgKTsKKyNpZmRlZiBDT01NRU5UCisgICAgICAgICAgICBwY3QgPSBvbGRwY3QgPSAwOwor I2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgIGNh c2UgU1RfSU5UOiAgICAgICAgICAgICAgICAgIC8qIEludGVycnVwdGVkICovCisgICAgICAgICAg ICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIChsb25nKSBDV19FUlIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykg IlRyYW5zZmVyIGludGVycnVwdGVkIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyNp ZmRlZiBDT01NRU5UCisgICAgICAgICAgICBwY3QgPSBvbGRwY3QgPSAwOworI2VuZGlmIC8qIENP TU1FTlQgKi8KKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBjYXNlIFNUX1NLSVA6IHsg ICAgICAgICAgICAgICAgLyogU2tpcHBlZCAqLworICAgICAgICAgICAgY2hhciBlcnJidWZbNjRd IDsKKwkgICAgaWYgKG4gPiAwICYmIG4gPCBuc2tyZWFzb24pCisgICAgICAgICAgICAgICAgc3By aW50ZiggZXJyYnVmLCAiRmlsZSBza2lwcGVkLCAoJXMpIiwgc2tyZWFzb25bbl0gKSA7CisJICAg IGVsc2UKKyAgICAgICAgICAgICAgICBzcHJpbnRmKCBlcnJidWYsICJGaWxlIHNraXBwZWQiICkg OworICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAobG9uZykgQ1dfRVJSLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgKGxvbmcpIGVycmJ1ZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyNpZmRl ZiBDT01NRU5UCisgICAgICAgICAgICBwY3QgPSBvbGRwY3QgPSAwOworI2VuZGlmIC8qIENPTU1F TlQgKi8KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAgIGNhc2UgU1Rf RVJSOiAgICAgICAgICAgICAgICAgIC8qIEVycm9yIG1lc3NhZ2UgKi8KKyAgICAgICAgICAgIGlm ICghcykgcyA9IChjaGFyICopZXBrdG1zZzsKKyAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KCBL VUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX0VSUiwgKGxvbmcpIHMgKTsKKyNpZmRlZiBDT01N RU5UCisgICAgICAgICAgICBwY3QgPSBvbGRwY3QgPSAwOworI2VuZGlmIC8qIENPTU1FTlQgKi8K KyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgIGNhc2UgU1RfUkVGVTogICAgICAgICAg ICAgICAgIC8qIFJlZnVzZWQgKi8KKyAgICAgICAgICAgIGlmICgqcykgeworICAgICAgICAgICAg ICAgIGNoYXIgZXJyYnVmWzY0XSA7CisgICAgICAgICAgICAgICAgc3ByaW50ZiggZXJyYnVmLCAi UmVmdXNlZCwgJXMiLCBzICkgOworICAgICAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9G SUxFX1RSQU5TRkVSLChsb25nKSBDV19FUlIsKGxvbmcpIGVycmJ1Zik7CisgICAgICAgICAgICB9 IGVsc2UgeworICAgICAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVS LChsb25nKUNXX0VSUiwobG9uZykiUmVmdXNlZCIpOworICAgICAgICAgICAgfQorI2lmZGVmIENP TU1FTlQKKyAgICAgICAgICAgIHBjdCA9IG9sZHBjdCA9IDA7CisjZW5kaWYgLyogQ09NTUVOVCAq LworICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgY2FzZSBTVF9JTkM6CisgICAgICAg ICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwobG9uZylDV19FUlIsKGxvbmcp IkluY29tcGxldGUiKTsKKyNpZmRlZiBDT01NRU5UCisgICAgICAgICAgICBwY3QgPSBvbGRwY3Qg PSAwOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAg ICAgIGNhc2UgU1RfTVNHOgorICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJB TlNGRVIsKGxvbmcpQ1dfTVNHLChsb25nKXMpOworICAgICAgICAgICAgcmV0dXJuOworCisgICAg ICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgLyogQmFkIGNhbGwgKi8KKyAgICAg ICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX0VSUiwK KyAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpICIqKiogc2NyZWVuKCkgY2FsbGVkIHdpdGgg YmFkIHN0YXR1cyAqKioiICk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg ICAgY2FzZSBTQ1JfVEM6IHsgICAgICAgICAgICAgICAgICAgIC8qIFRyYW5zYWN0aW9uIGNvbXBs ZXRlICovCisgICAgICAgICAgY2hhciBtc2didWZbMTI4XTsKKyAgICAgICAgICBLdWlTZXRQcm9w ZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19DUCwgdGZjcHMpOworICAgICAgICAg IGlmIChzdWNjZXNzKSB7CisgICAgICAgICAgICAgIHNwcmludGYobXNnYnVmLAorICAgICAgICAg ICAgICAgICAgICAgICJTVUNDRVNTLiAgRmlsZXM6ICVzLCBCeXRlczogJWxkLCAlbGQgQ1BTIiwK KyAgICAgICAgICAgICAgICAgICAgICBmaWxjbnQgLSBmaWxyZWosCisgICAgICAgICAgICAgICAg ICAgICAgY2tmc3RvYShmYnl0KSwKKyAgICAgICAgICAgICAgICAgICAgICB0ZmNwcworICAgICAg ICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxF X1RSQU5TRkVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgQ1dfTVNHLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgbXNnYnVmCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgfQorICAgICAgICAgIEt1aVNldFByb3BlcnR5 KEtVSV9GSUxFX1RSQU5TRkVSLAorICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19U UiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgaGhtbXNzKChsb25nKQorI2lmZGVm IEdGVElNRVIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmcHRzZWNz ICsgMC41KQorI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRz ZWNzCisjZW5kaWYgLyogR0ZUSU1FUiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKSk7CisKKyNpZmRlZiBHRlRJTUVSCisgICAgICAgICAgb2xkZ3R2ID0gKENLRkxP QVQpIC0xLjA7CisjZWxzZQorICAgICAgICAgIG9sZGd0diA9IC0xTDsKKyNlbmRpZiAvKiBHRlRJ TUVSICovCisKKyNpZmRlZiBDT01NRU5UCisgICAgICAgICAgcGN0ID0gMTAwOyBvbGRwY3QgPSAw OyAgICAgICAgLyogUmVzZXQgdGhlc2UgZm9yIG5leHQgdGltZS4gKi8KKyNlbmRpZiAvKiBDT01N RU5UICovCisgICAgICAgICAgb2xkdHlwID0gMDsgb2xkcnR0ID0gLTFMOyBvbGR0cnkgPSAtMTsg b2xkbGVuID0gLTE7CisgICAgICAgICAgb2xkdGltID0gLTE7CisgICAgICAgICAgY2VuZHcgPSAx OworICAgICAgICAgIGlmICh4ZnJiZWwpIGJsZWVwKEJQX05PVEUpOyAgIC8qIENsb3NlIHdpbmRv dywgdGhlbiBiZWVwLiAqLworICAgICAgICAgIGZ0X3dpbiA9IDA7ICAgICAgICAgICAgICAgICAg IC8qIFdpbmRvdyBjbG9zZWQuICovCisgICAgICAgICAgcmV0dXJuOworICAgICAgfQorICAgICAg Y2FzZSBTQ1JfRU06ICAgICAgICAgICAgICAgICAgICAgIC8qIEVycm9yIHBhY2tldCAoZmF0YWwp ICovCisgICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENX X0VSUiwgKGxvbmcpIHMgKTsKKyAgICAgICAgaWYgKHhmcmJlbCkgYmxlZXAoQlBfRkFJTCk7Cisj aWZkZWYgQ09NTUVOVAorICAgICAgICBwY3QgPSBvbGRwY3QgPSAwOworI2VuZGlmIC8qIENPTU1F TlQgKi8KKyAgICAgICAgcmV0dXJuOworCisgICAgICBjYXNlIFNDUl9RRTogICAgICAgICAgICAg ICAgICAgICAgLyogUXVhbnRpdHkgZXF1YWxzICovCisgICAgICBjYXNlIFNDUl9UVTogICAgICAg ICAgICAgICAgICAgICAgLyogVW5kZWxpbWl0ZWQgdGV4dCAqLworICAgICAgY2FzZSBTQ1JfVE46 ICAgICAgICAgICAgICAgICAgICAgIC8qIFRleHQgZGVsaW1pdGVkIGF0IHN0YXJ0ICovCisgICAg ICBjYXNlIFNDUl9UWjogICAgICAgICAgICAgICAgICAgICAgLyogVGV4dCBkZWxpbWl0ZWQgYXQg ZW5kICovCisgICAgICAgIHJldHVybjsgICAgICAgICAgICAgICAgICAgICAgICAgLyogKGlnbm9y ZWQgaW4gZnVsbHNjcmVlbiBkaXNwbGF5KSAqLworCisgICAgICBjYXNlIFNDUl9YRDogICAgICAg ICAgICAgICAgICAgICAgLyogWC1wYWNrZXQgZGF0YSAqLworICAgICAgICBwY3QgPSBvbGRwY3Qg PSAwOworICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBD V19OQU0sIChsb25nKSBzICk7CisgICAgICAgIHJldHVybjsKKworICAgICAgY2FzZSBTQ1JfQ1c6 ICAgICAgICAgICAgICAgICAgICAgIC8qIENsb3NlIFdpbmRvdyAqLworI2lmZGVmIENPTU1FTlQK KyAgICAgICAgcGN0ID0gMTAwOyBvbGRwY3QgPSAwOyAgICAgICAgICAvKiBSZXNldCB0aGVzZSBm b3IgbmV4dCB0aW1lLiAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAgb2xkdHlwID0g MDsgb2xkcnR0ID0gLTFMOyBvbGR0cnkgPSAtMTsgb2xkbGVuID0gLTE7CisgICAgICAgIG9sZHRp bSA9IC0xOworCisgICAgICAgIGZ0X3dpbiA9IDA7ICAgICAgICAgICAgICAgICAgICAgLyogRmxh ZyB0aGF0IHdpbmRvdyBpcyBjbG9zZWQuICovCisgICAgICAgIGNlbmR3ID0gMTsgcmV0dXJuOwor CisgICAgICBjYXNlIFNDUl9DRDogICAgICAgICAgICAgICAgICAgICAgLyogRGlzcGxheSBjdXJy ZW50IGRpcmVjdG9yeSAqLworICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNG RVIsIChsb25nKSBDV19ESVIsIChsb25nKSBzICk7CisjaWZkZWYgT1MyCisgICAgICAgIFNhdmVD bWRNb2RlKDAsIDApOworI2VuZGlmIC8qIE9TMiAqLworICAgICAgICByZXR1cm47CisKKyAgICAg IGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBCYWQgY2FsbCAqLworICAgICAg ICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKKyAgICAgICAgICAgICAgICAgICAg ICAgKGxvbmcpIENXX0VSUiwKKyAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpICIqKiogc2Ny ZWVuKCkgY2FsbGVkIHdpdGggYmFkIGZ1bmN0aW9uIGNvZGUgKioqIgorICAgICAgICAgICAgICAg ICAgICAgICApOworICAgICAgICByZXR1cm47CisgICAgfQorfQorI2VuZGlmIC8qIEtVSSAqLwor I2VuZGlmIC8qIE1BQyAqLworCisjZW5kaWYgLyogTk9YRkVSICovCisKKyNpZm5kZWYgQ0tfQ1VS UE9TCisvKiBEdW1taWVzIGZvciB3aGVuIGN1cnNvciBjb250cm9sIGlzIG5vdCBzdXBwb3J0ZWQg Ki8KK2ludAorY2tfY3VycG9zKHJvdywgY29sKSB7CisgICAgcmV0dXJuKC0xKTsKK30KKworaW50 Citja19jbHMoKSB7CisgICAgcmV0dXJuKC0xKTsKK30KKworaW50Citja19jbGVvbCgpIHsKKyAg ICByZXR1cm4oLTEpOworfQorI2VuZGlmIC8qIENLX0NVUlBPUyAqLworCisjaWZuZGVmIE5PSUtT RAorI2lmZGVmIElLU0RCCisKK3N0cnVjdCBpa3NkYmZsZCBkYmZsZFtdID0geworICAgLyogT2Zm c2V0ICAgIExlbmd0aCAgICBUeXBlICAgKi8KKyAgICB7IERCX0ZMQUdTLCBkQl9GTEFHUywgREJU X0hFWCB9LCAgICAvKiAgMCBkYl9GTEFHUyBGbGFncyAqLworICAgIHsgREJfQVRZUEUsIGRCX0FU WVBFLCBEQlRfSEVYIH0sICAgIC8qICAxIGRiX0FUWVBFIEF1dGggdHlwZSAqLworICAgIHsgREJf QU1PREUsIGRCX0FNT0RFLCBEQlRfSEVYIH0sICAgIC8qICAzIGRiX0FNT0RFIEF1dGggbW9kZSAq LworICAgIHsgREJfU1RBVEUsIGRCX1NUQVRFLCBEQlRfSEVYIH0sICAgIC8qICAyIGRiX1NUQVRF IFN0YXRlICovCisgICAgeyBEQl9NWVBJRCwgZEJfTVlQSUQsIERCVF9IRVggfSwgICAgLyogIDUg ZGJfTVlQSUQgUElEICovCisgICAgeyBEQl9TQUREUiwgZEJfU0FERFIsIERCVF9IRVggfSwgICAg LyogIDQgZGJfU0FERFIgU2VydmVyIGFkZHJlc3MgKi8KKyAgICB7IERCX0NBRERSLCBkQl9DQURE UiwgREJUX0hFWCB9LCAgICAvKiAgNiBkYl9DQUREUiBDbGllbnQgYWRkcmVzcyAqLworICAgIHsg REJfU1RBUlQsIGRCX1NUQVJULCBEQlRfREFUIH0sICAgIC8qICA3IGRiX1NUQVJUIFNlc3Npb24g c3RhcnQgKi8KKyAgICB7IERCX0xBU1RVLCBkQl9MQVNUVSwgREJUX0RBVCB9LCAgICAvKiAgOCBk Yl9MQVNUVSBMYXN0IHVwZGF0ZSAqLworICAgIHsgREJfVUxFTiwgIGRCX1VMRU4sICBEQlRfSEVY IH0sICAgIC8qICA5IGRiX1VMRU4gIFVzZXJuYW1lIGxlbmd0aCAqLworICAgIHsgREJfRExFTiwg IGRCX0RMRU4sICBEQlRfSEVYIH0sICAgIC8qIDEwIGRiX0RMRU4gIERpcmVjdG9yeSBuYW1lIGxl bmd0aCAqLworICAgIHsgREJfSUxFTiwgIGRCX0lMRU4sICBEQlRfSEVYIH0sICAgIC8qIDExIGRi X0lMRU4gIEluZm8gbGVuZ3RoICovCisgICAgeyBEQl9QQUQxLCAgZEJfUEFEMSwgIERCVF9VTkQg fSwgICAgLyogMTIgZGJfUEFEMSAgKFJlc2VydmVkKSAqLworICAgIHsgREJfVVNFUiwgIGRCX1VT RVIsICBEQlRfU1RSIH0sICAgIC8qIDEzIGRiX1VTRVIgIFVzZXJuYW1lICovCisgICAgeyBEQl9E SVIsICAgZEJfRElSLCAgIERCVF9TVFIgfSwgICAgLyogMTQgZGJfRElSICAgQ3VycmVudCBEaXJl Y3RvcnkgKi8KKyAgICB7IERCX0lORk8sICBkQl9JTkZPLCAgREJUX1NUUiB9ICAgICAvKiAxNSBk Yl9JTkZPICBTdGF0ZS1zcGVjaWZpYyBpbmZvICovCit9OworCitzdGF0aWMgY2hhciBsY2tuYW1b Q0tNQVhQQVRIKzFdOyAgICAgICAgLyogTG9ja2ZpbGUgcGF0aG5hbWUgKi8KK3N0YXRpYyBjaGFy IHRtcGxja1tDS01BWFBBVEgrMV07ICAgICAgICAvKiBUZW1wb3JhcnkgbG9ja2ZpbGUgbmFtZSAq LworCitzdGF0aWMgY2hhciAqIHVwZG1vZGUgPSAgICAgICAgICAgICAgICAgLyogVXBkYXRlIG1v ZGUgZm9yIGZvcGVuKCkgKi8KKyNpZmRlZiBPUzIKKyAgInIrYiIKKyNlbHNlCisjaWZkZWYgVk1T CisgICJyK2IiCisjZWxzZQorICAicisiCisjZW5kaWYgLyogVk1TICovCisjZW5kaWYgLyogT1My ICovCisgIDsKKworLyogIEQgQiBJIE4gSSBUICAtLSAgSW5pdGlhbGl6ZSB0aGUgSUtTRCBkYXRh YmFzZS4uLiAgKi8KKworaW50CitkYmluaXQoKSB7CisgICAgZXh0ZXJuIGludCBkYmluaXRlZDsK KyAgICBpbnQgeCA9IDA7CisgICAgZGVidWcoRjExMCwiZGJpbml0IGRiZGlyIDEiLGRiZGlyLDAp OworICAgIGRlYnVnKEYxMTAsImRiaW5pdCBkYmZpbGUgMSIsZGJmaWxlLDApOworICAgIGlmIChk YmluaXRlZCkKKyAgICAgIHJldHVybigwKTsKKyNpZmRlZiBPUzIKKyAgICBpZiAoIWRiZGlyKSB7 CisjaWZkZWYgTlQKKyAgICAgICAgY2hhciAqIHAgPSBOVUxMOworICAgICAgICBpZiAoIWlzV2lu OTUoKSkgeworICAgICAgICAgICAgcCA9IGdldGVudigiU3lzdGVtUm9vdCIpOworICAgICAgICB9 IGVsc2UgeworICAgICAgICAgICAgcCA9IGdldGVudigid2luYm9vdGRpciIpOworICAgICAgICAg ICAgaWYgKCFwKSAgcCA9IGdldGVudigid2luZGlyIik7CisgICAgICAgIH0KKyAgICAgICAgaWYg KCFwKSBwID0gIkM6LyI7CisgICAgICAgIGRiZGlyID0gbWFsbG9jKHN0cmxlbihwKSsyKTsKKyAg ICAgICAgc3RyY3B5KGRiZGlyLHApOwkJLyogc2FmZSAqLworICAgICAgICBwID0gZGJkaXI7Cisg ICAgICAgIHdoaWxlICgqcCkgeworICAgICAgICAgICAgaWYgKCpwID09ICdcXCcpCisgICAgICAg ICAgICAgICpwID0gJy8nOworICAgICAgICAgICAgcCsrOworICAgICAgICB9CisgICAgICAgIGlm ICgqKHAtMSkgIT0gJy8nICkgeworICAgICAgICAgICAgKnArKyA9ICcvJzsKKyAgICAgICAgICAg ICpwID0gJ1wwJzsKKyAgICAgICAgfQorI2Vsc2UgLyogTlQgKi8KKyAgICAgICAgbWFrZXN0cigm ZGJkaXIsIkM6LyIpOworI2VuZGlmIC8qIE5UICovCisgICAgfQorI2Vsc2UgLyogT1MyICovCisg ICAgaWYgKCFkYmRpcikKKyAgICAgIG1ha2VzdHIoJmRiZGlyLElLX0RCQVNFRElSKTsKKyNlbmRp ZiAvKiBPUzIgKi8KKworICAgIGlmICghZGJmaWxlKSB7CisgICAgICAgIGNoYXIgKiBzID0gIiI7 CisgICAgICAgIHggPSBzdHJsZW4oZGJkaXIpOworICAgICAgICBpZiAoZGJkaXJbeC0xXSAhPSAn LycpIHsKKyAgICAgICAgICAgIHMgPSAiLyI7CisgICAgICAgICAgICB4Kys7CisgICAgICAgIH0K KyAgICAgICAgeCArPSAoaW50KXN0cmxlbihJS19EQkFTRUZJTCk7CisgICAgICAgIGRiZmlsZSA9 IChjaGFyICopbWFsbG9jKHgrMSk7CisgICAgICAgIHNwcmludGYoZGJmaWxlLCIlcyVzJXMiLGRi ZGlyLHMsSUtfREJBU0VGSUwpOworICAgIH0KKyAgICBkZWJ1ZyhGMTEwLCJkYmluaXQgZGJkaXIg MiIsZGJkaXIsMCk7CisgICAgZGVidWcoRjExMCwiZGJpbml0IGRiZmlsZSAyIixkYmZpbGUsMCk7 CisgICAgbXlwaWQgPSBnZXRwaWQoKTsgICAgICAgICAgICAgICAgICAgLyogR2V0IG15IHBpZCAq LworICAgIGRlYnVnKEYxMDEsImRiaW5pdCBteXBpZCIsIiIsbXlwaWQpOworCisgICAgaWYgKCFt eWhleGlwWzBdKSB7ICAgICAgICAgICAgICAgICAgLyogU2V0IG15IGhleCBJUCBhZGRyZXNzICov CisjaWZkZWYgVENQU09DS0VUCisgICAgICAgIGV4dGVybiB1bnNpZ25lZCBsb25nIG15eGlwYWRk cjsKKyAgICAgICAgaWYgKGdldGxvY2FsaXBhZGRyKCkgPiAtMSkgeworICAgICAgICAgICAgbXlp cCA9IG15eGlwYWRkcjsKKyAgICAgICAgICAgIHNwcmludGYobXloZXhpcCwiJTA4bHgiLG15aXAp OyAvKiAoTmVlZHMgZml4aW5nIGZvciBJUHY2KSAqLworICAgICAgICB9IGVsc2UKKyNlbmRpZiAv KiBUQ1BTT0NLRVQgKi8KKyAgICAgICAgICBja3N0cm5jcHkobXloZXhpcCwiMDAwMDAwMDAiLDkp OworICAgIH0KKyAgICBkZWJ1ZyhGMTExLCJkYmluaXQgbXlpcCIsbXloZXhpcCxteWlwKTsKKyAg ICBpZiAoIXBlZXJoZXhpcFswXSkgeyAgICAgICAgICAgICAgICAvKiBHZXQgcGVlcidzICBoZXgg SVAgYWRkcmVzcyAqLworI2lmZGVmIFRDUFNPQ0tFVAorICAgICAgICBleHRlcm4gdW5zaWduZWQg bG9uZyBwZWVyeGlwYWRkcjsKKyAgICAgICAgaWYgKGNrZ2V0cGVlcigpKSB7CisgICAgICAgICAg ICBwZWVyaXAgPSBwZWVyeGlwYWRkcjsKKyAgICAgICAgICAgIHNwcmludGYocGVlcmhleGlwLCIl MDhseCIscGVlcmlwKTsgLyogKE5lZWRzIGZpeGluZyBmb3IgSVB2NikgKi8KKyAgICAgICAgICAg IGRlYnVnKEYxMTEsImRiaW5pdCBwZWVyaXAiLHBlZXJoZXhpcCxwZWVyaXApOworICAgICAgICB9 IGVsc2UgeworICAgICAgICAgICAgZGVidWcoRjEwMSwiZGJpbml0IGNrZ2V0cGVlciBmYWlsdXJl IiwiIixlcnJubyk7CisgICAgICAgICAgICBja3N0cm5jcHkocGVlcmhleGlwLCIwMDAwMDAwMCIs OSk7CisgICAgICAgIH0KKyNlbHNlCisgICAgICAgIGNrc3RybmNweShwZWVyaGV4aXAsIjAwMDAw MDAwIiw5KTsKKyNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KKyAgICB9CisgICAgZGVidWcoRjExMSwi ZGJpbml0IHBlZXJpcCIscGVlcmhleGlwLHBlZXJpcCk7CisgICAgZGVidWcoRjEwMSwiZGJpbml0 IGRiZW5hYmxlZCIsIiIsZGJlbmFibGVkKTsKKyAgICBpZiAoZGJlbmFibGVkICYmIGluc2VydmVy KSB7CisgICAgICAgIG15ZGJzbG90ID0gZ2V0c2xvdCgpOworICAgICAgICBkZWJ1ZyhGMTExLCJk YmluaXQgZ2V0c2xvdCIsY2tpdG9hKGlrZGJvcGVuKSx4KTsKKyAgICAgICAgaWYgKGlrZGJvcGVu KSBkYmluaXRlZCA9IDE7CisgICAgfQorICAgIHJldHVybigwKTsKK30KKworLyogIFUgUCBEIFMg TCBPIFQgIC0tICBVcGRhdGUgc2xvdCBuICAqLworCisvKgorICBPcGVucyB0aGUgZGF0YWJhc2Ug aWYgbmVjZXNzYXJ5LCBzZWVrcyB0byBzbG90IG4sIHdyaXRlcyBjdXJyZW50IHJlY29yZAorICBh bmQgYWRkcyBjdXJyZW50IHRpbWUgdG8gbGFzdC11cGRhdGUgZmllbGQuICBuIGlzIHRoZSByZWNv cmQgc2VxdWVuY2UgbnVtYmVyCisgICgwLCAxLCAyLCAuLi4pLCBub3QgdGhlIHNlZWsgcG9pbnRl ci4gICBSZXR1cm5zIC0xIG9uIGZhaWx1cmUsIDAgb24gc3VjY2Vzcy4KKyovCitpbnQKK3VwZHNs b3QobikgaW50IG47IHsgICAgICAgICAgICAgICAgICAgICAvKiBVcGRhdGUgb3VyIHNsb3QgKi8K KyAgICBpbnQgcmMgPSAwOworICAgIENLX09GRl9UIHBvc2l0aW9uOworCisgICAgZGVidWcoRjEx MSwidXBkc2xvdCIsImlrZGJvcGVuIixpa2Rib3Blbik7CisgICAgaWYgKCFpa2Rib3BlbikgICAg ICAgICAgICAgICAgICAgICAgLyogTm90IGlmIG5vdCBvayAqLworICAgICAgcmV0dXJuKDApOwor ICAgIGlmICghZGJmcCkgeyAgICAgICAgICAgICAgICAgICAgICAgIC8qIE9wZW4gZGF0YWJhc2Ug aWYgbm90IG9wZW4gKi8KKyAgICAgICAgZGJmcCA9IGZvcGVuKGRiZmlsZSx1cGRtb2RlKTsgICAv KiBJbiB1cGRhdGUgbm8tdHJ1bmNhdGUgbW9kZSAqLworICAgICAgICBpZiAoIWRiZnApIHsKKyAg ICAgICAgICAgIGRlYnVnKEYxMTAsInVwZHNsb3QgZm9wZW4gZmFpbGVkIixkYmZpbGUsMCk7Cisg ICAgICAgICAgICBpa2Rib3BlbiA9IDA7CisgICAgICAgICAgICByZXR1cm4oLTEpOworICAgICAg ICB9CisgICAgfQorICAgIC8qIGRlYnVnKEYxMTEsInVwZHNsb3QgZGJmaWxlIixkYmZpbGUsZGJm cCk7ICovCisgICAgcG9zaXRpb24gPSBuICogREJfUkVDTDsKKyAgICBpZiAoQ0tGU0VFSyhkYmZw LHBvc2l0aW9uLDApIDwgMCkgewkvKiBTZWVrIHRvIGRlc2lyZWQgc2xvdCAqLworICAgICAgICBk ZWJ1ZyhGMTExLCJ1cGRzbG90IGZzZWVrIGZhaWxlZCIsZGJmaWxlLG15ZGJzZWVrKTsKKyAgICAg ICAgaWtkYm9wZW4gPSAwOworICAgICAgICByYyA9IC0xOworICAgIH0gZWxzZSB7CisgICAgICAg IC8qIFVwZGF0ZSB0aGUgdXBkYXRlIHRpbWUgKi8KKyAgICAgICAgc3RybmNweSgmZGJyZWNbZGJm bGRbZGJfTEFTVFVdLm9mZl0sCisgICAgICAgICAgICAgICAgY2tkYXRlKCksCisgICAgICAgICAg ICAgICAgZGJmbGRbZGJfTEFTVFVdLmxlbgorICAgICAgICAgICAgICAgICk7CisgICAgICAgIGlm IChmd3JpdGUoZGJyZWMsMSxEQl9SRUNMLGRiZnApIDwgREJfUkVDTCkgeyAvKiBXcml0ZSB0aGUg cmVjb3JkICovCisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJ1cGRzbG90IGZ3cml0ZSBmYWlsZWQi LGRiZmlsZSwwKTsKKyAgICAgICAgICAgIGlrZGJvcGVuID0gMDsKKyAgICAgICAgICAgIHJjID0g LTE7CisgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogRmx1c2ggdGhl IHdyaXRlICovCisgICAgICAgICAgICBmZmx1c2goZGJmcCk7CisgICAgICAgIH0KKyAgICB9Cisg ICAgcmV0dXJuKHJjKTsKK30KKworLyogIEkgTiBJIFQgUyBMIE8gVCAtLSAgSW5pdGlhbGl6ZSBz bG90IG4gd2l0aCBteSBpbmZvICAqLworCitpbnQKK2luaXRzbG90KG4pIGludCBuOyB7ICAgICAg ICAgICAgICAgICAgICAvKiBJbml0aWFsaXplIHNsb3QgKi8KKyAgICBpbnQgazsKKyNpZmRlZiBU Q1BTT0NLRVQKKyAgICBleHRlcm4gdW5zaWduZWQgbG9uZyBwZWVyeGlwYWRkcjsKKyNlbmRpZiAv KiBUQ1BTT0NLRVQgKi8KKworICAgIGRlYnVnKEYxMDEsImluaXRzbG90IiwiIixuKTsKKworI2lm ZGVmIFVTRV9NRU1DUFkKKyAgICBtZW1zZXQoZGJyZWMsMzIsREJfUkVDTCk7CisjZWxzZQorICAg IGZvciAoayA9IDA7IGsgPCBEQl9SRUNMOyBrKyspCisgICAgICBkYnJlY1trXSA9ICdcMDQwJzsK KyNlbmRpZiAvKiBVU0VfTUVNQ1BZICovCisKKyAgICBteWZsYWdzID0gREJGX0lOVVNFOyAgICAg ICAgICAgICAgICAvKiBTZXQgaW4tdXNlIGZsYWcgKi8KKyAgICBteXN0YXRlID0gV19OT1RISU5H OworICAgIG15YXR5cGUgPSAwTDsKKyAgICBteWFtb2RlID0gMEw7CisKKyAgICBrID0gZGJmbGRb ZGJfRkxBR1NdLmxlbjsgICAgICAgICAgICAvKiBMZW5ndGggb2YgZmxhZ3MgZmllbGQgKi8KKyAg ICBzdHJuY3B5KCZkYnJlY1tkYmZsZFtkYl9GTEFHU10ub2ZmXSx1bG9uZ3RvaGV4KG15ZmxhZ3Ms ayksayk7CisKKyAgICBrID0gZGJmbGRbZGJfQVRZUEVdLmxlbjsKKyAgICBzdHJuY3B5KCZkYnJl Y1tkYmZsZFtkYl9BVFlQRV0ub2ZmXSx1bG9uZ3RvaGV4KG15YXR5cGUsayksayk7CisKKyAgICBr ID0gZGJmbGRbZGJfQU1PREVdLmxlbjsKKyAgICBzdHJuY3B5KCZkYnJlY1tkYmZsZFtkYl9BTU9E RV0ub2ZmXSx1bG9uZ3RvaGV4KG15YW1vZGUsayksayk7CisKKyAgICBrID0gZGJmbGRbZGJfU1RB VEVdLmxlbjsKKyAgICBzdHJuY3B5KCZkYnJlY1tkYmZsZFtkYl9TVEFURV0ub2ZmXSx1bG9uZ3Rv aGV4KG15c3RhdGUsayksayk7CisKKyAgICBrID0gZGJmbGRbZGJfU0FERFJdLmxlbjsKKyAgICBz dHJuY3B5KCZkYnJlY1tkYmZsZFtkYl9TQUREUl0ub2ZmXSx1bG9uZ3RvaGV4KG15aXAsayksayk7 CisKKyNpZmRlZiBUQ1BTT0NLRVQKKyAgICBja2dldHBlZXIoKTsKKyAgICBrID0gZGJmbGRbZGJf Q0FERFJdLmxlbjsKKyAgICBzdHJuY3B5KCZkYnJlY1tkYmZsZFtkYl9DQUREUl0ub2ZmXSx1bG9u Z3RvaGV4KHBlZXJ4aXBhZGRyLGspLGspOworI2Vsc2UKKyAgICBrID0gZGJmbGRbZGJfQ0FERFJd LmxlbjsKKyAgICBzdHJuY3B5KCZkYnJlY1tkYmZsZFtkYl9DQUREUl0ub2ZmXSx1bG9uZ3RvaGV4 KDBMLGspLGspOworI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLworCisgICAgayA9IGRiZmxkW2RiX01Z UElEXS5sZW47CisgICAgc3RybmNweSgmZGJyZWNbZGJmbGRbZGJfTVlQSURdLm9mZl0sdWxvbmd0 b2hleChteXBpZCxrKSxrKTsKKworICAgIGsgPSBkYmZsZFtkYl9TVEFSVF0ubGVuOworICAgIHN0 cm5jcHkoJmRicmVjW2RiZmxkW2RiX1NUQVJUXS5vZmZdLGNrZGF0ZSgpLGspOworCisgICAgayA9 IGRiZmxkW2RiX1VMRU5dLmxlbjsKKyAgICBzdHJuY3B5KCZkYnJlY1tkYmZsZFtkYl9VTEVOXS5v ZmZdLCIwMDAwIiw0KTsKKworICAgIGsgPSBkYmZsZFtkYl9ETEVOXS5sZW47CisgICAgc3RybmNw eSgmZGJyZWNbZGJmbGRbZGJfRExFTl0ub2ZmXSwiMDAwMCIsNCk7CisKKyAgICBrID0gZGJmbGRb ZGJfSUxFTl0ubGVuOworICAgIHN0cm5jcHkoJmRicmVjW2RiZmxkW2RiX0lMRU5dLm9mZl0sIjAw MDAiLDQpOworCisgICAgc3RybmNweSgmZGJyZWNbZGJmbGRbZGJfSU5GT10ub2ZmXSwiSU5JVCIs NCk7CisgICAgcmV0dXJuKHVwZHNsb3QobikpOworfQorCitpbnQKK3Nsb3RzdGF0ZSh4LHMxLHMy LHMzKSBpbnQgeDsgY2hhciAqczEsICpzMiwgKnMzOyB7CisgICAgaW50IGssIGwxLCBsMiwgbDMs IHo7CisgICAgbXlzdGF0ZSA9IHg7CisgICAgZGVidWcoRjEwMSwic2xvdHN0YXRlIGlrZGJvcGVu IiwiIixpa2Rib3Blbik7CisgICAgaWYgKCFpa2Rib3BlbikKKyAgICAgIHJldHVybigtMSk7Cisg ICAgaWYgKCFzMSkgczEgPSAiIjsKKyAgICBsMSA9IHN0cmxlbihzMSk7CisgICAgaWYgKCFzMikg czIgPSAiIjsKKyAgICBsMiA9IHN0cmxlbihzMik7CisgICAgaWYgKCFzMykgczMgPSAiIjsKKyAg ICBsMyA9IHN0cmxlbihzMyk7CisgICAgc3RybmNweSgmZGJyZWNbREJfU1RBVEVdLHVsb25ndG9o ZXgobXlzdGF0ZSw0KSw0KTsKKyAgICBrID0gZGJmbGRbZGJfSUxFTl0ubGVuOworICAgIHogPSBs MSArIGwyICsgbDMgKyAyOworICAgIGlmICh6ID4gZEJfSU5GTykKKyAgICAgIHogPSBkQl9JTkZP OworICAgIHN0cm5jcHkoJmRicmVjW0RCX0lMRU5dLHVsb25ndG9oZXgoKHVuc2lnbmVkIGxvbmcp eixrKSxrKTsKKyAgICBrID0gZGJmbGRbZGJfSU5GT10ubGVuOworICAgIHogPSBkYmZsZFtkYl9J TkZPXS5vZmY7CisgICAgaWYgKGwxIDw9IGspIHsKKyAgICAgICAgbHNldCgmZGJyZWNbel0sczEs bDErMSwzMik7CisgICAgICAgIHogKz0gbDErMTsKKyAgICAgICAgayAtPSBsMSsxOworICAgICAg ICBpZiAobDIgPD0gaykgeworICAgICAgICAgICAgbHNldCgmZGJyZWNbel0sczIsbDIrMSwzMik7 CisgICAgICAgICAgICB6ICs9IGwyKzE7CisgICAgICAgICAgICBrIC09IGwyKzE7CisgICAgICAg ICAgICBpZiAobDMgPD0gaykKKyAgICAgICAgICAgICAgbHNldCgmZGJyZWNbel0sczMsaywzMik7 CisgICAgICAgIH0KKyAgICB9CisjaWZkZWYgREVCVUcKKyAgICBpZiAoZGVibG9nKSB7CisgICAg ICAgIGNoYXIgYnVmWzEyOF07CisgICAgICAgIGludCBpOworICAgICAgICBzdHJuY3B5KGJ1Ziwm ZGJyZWNbREJfSU5GT10sMTI3KTsKKyAgICAgICAgYnVmWzEyN10gPSBOVUw7CisgICAgICAgIGZv ciAoaSA9IDEyNjsgaSA+IDAgJiYgYnVmW2ldID09IDMyOyBpLS0pIGJ1ZltpXSA9IDA7CisgICAg ICAgIGRlYnVnKEYxMTEsInNsb3RzdGF0ZSIsYnVmLG15c3RhdGUpOworICAgIH0KKyNlbmRpZiAv KiBERUJVRyAqLworICAgIHogPSB1cGRzbG90KG15ZGJzbG90KTsKKyAgICBkZWJ1ZyhGMTAxLCJz bG90c3RhdGUgdXBkc2xvdCIsIiIseik7CisgICAgcmV0dXJuKHopOworfQorCitpbnQKK3Nsb3Rk aXIoczEsczIpIGNoYXIgKiBzMSwgKiBzMjsgeyAgICAgICAvKiBVcGRhdGUgY3VycmVudCBkaXJl Y3RvcnkgKi8KKyAgICBpbnQgaywgbGVuMSwgbGVuMjsKKyAgICBpZiAoIWlrZGJvcGVuKQorICAg ICAgcmV0dXJuKC0xKTsKKyAgICBpZiAoIXMxKSBzMSA9ICIiOworICAgIGlmICghczIpIHMyID0g IiI7CisgICAgbGVuMSA9IHN0cmxlbihzMSk7CisgICAgbGVuMiA9IHN0cmxlbihzMik7CisgICAg ayA9IGRiZmxkW2RiX0RMRU5dLmxlbjsKKyAgICBzdHJuY3B5KCZkYnJlY1tEQl9ETEVOXSx1bG9u Z3RvaGV4KCh1bnNpZ25lZCBsb25nKShsZW4xK2xlbjIpLGspLGspOworICAgIGsgPSBkYmZsZFtk Yl9ESVJdLmxlbjsKKyAgICBpZiAobGVuMSA+IDApIHsKKyAgICAgICAgbHNldCgmZGJyZWNbZGJm bGRbZGJfRElSXS5vZmZdLHMxLGxlbjEsMzIpOworICAgICAgICBsc2V0KCZkYnJlY1tkYmZsZFtk Yl9ESVJdLm9mZitsZW4xXSxzMixrLWxlbjEsMzIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGxz ZXQoJmRicmVjW2RiZmxkW2RiX0RJUl0ub2ZmXSxzMixrLDMyKTsKKyAgICB9CisgICAgcmV0dXJu KHVwZHNsb3QobXlkYnNsb3QpKTsKK30KKworLyogIEYgUiBFIEUgUyBMIE8gVCAgLS0gIEZyZWUg c2xvdCBuICAqLworCitpbnQKK2ZyZWVzbG90KG4pIGludCBuOyB7CisgICAgaW50IGs7CisgICAg aWYgKCFpa2Rib3BlbikKKyAgICAgIHJldHVybigwKTsKKyAgICBkYmZsYWdzID0gMEw7CisgICAg aWYgKG4gPT0gbXlkYnNsb3QpIHsKKyAgICAgICAgZGJmbGFncyA9IG15ZmxhZ3MgJiB+REJGX0lO VVNFOworICAgICAgICBkYmZsYWdzICY9IH5EQkZfTE9HR0VEOworICAgIH0KKyAgICBrID0gZGJm bGRbZGJfRkxBR1NdLmxlbjsKKyAgICBzdHJuY3B5KCZkYnJlY1tkYmZsZFtkYl9GTEFHU10ub2Zm XSx1bG9uZ3RvaGV4KGRiZmxhZ3Msayksayk7CisgICAgcmV0dXJuKHVwZHNsb3QobikpOworfQor CisvKiAgRyBFIFQgUyBMIE8gVCAgLS0gIEZpbmQgYSBmcmVlIGRhdGFiYXNlIHNsb3Q7IHJldHVy bnMgc2xvdCBudW1iZXIgICovCisKKyNpZmRlZiBVTklYCisjaW5jbHVkZSA8ZmNudGwuaD4JCQkv KiBGb3IgY3JlYXQoKSAqLworI2VuZGlmCS8qIFVOSVggKi8KKworaW50CitnZXRzbG90KCkgeyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRmluZCBhIGZyZWUgc2xvdCBmb3IgdXMgKi8K KyAgICBGSUxFICogcmZwID0gTlVMTDsgICAgICAgICAgICAgICAgICAvKiBSZXR1cm5zIHNsb3Qg bnVtYmVyICgwLCAxLCAuLi4pICovCisgICAgY2hhciBpZHN0cmluZ1s2NF07ICAgICAgICAgICAg ICAgICAgLyogUElEIHN0cmluZyBidWZmZXIgKGRlY2ltYWwpICovCisgICAgY2hhciBwaWRidWZb NjRdLCAqIHM7CisgICAgaW50IGosIGssIG4sIHgsIHJjID0gLTE7CisgICAgaW50IGxvY2tmZCwg dHJpZXMsIGhhdmVzbG90ID0gMDsKKyAgICBsb25nIGxvY2twaWQ7CisgICAgQ0tfT0ZGX1QgaTsK KyAgICAvKiBjaGFyIGlwYnVmWzE3XTsgKi8KKworICAgIGlmICghbXloZXhpcFswXSkgICAgICAg ICAgICAgICAgICAgIC8qIFNldCBteSBoZXggSVAgYWRkcmVzcyBpZiBub3Qgc2V0ICovCisgICAg ICBja3N0cm5jcHkoKGNoYXIgKilteWhleGlwLCI3RjAwMDAwMSIsMzMpOworICAgIHNwcmludGYo aWRzdHJpbmcsIiUwOGx4OiUwMTBsZFxuIixteWlwLG15cGlkKTsKKyAgICBkZWJ1ZyhGMTEwLCJn ZXRzbG90IGlkc3RyaW5nIiwgaWRzdHJpbmcsIDApOworCisgICAgLyogTWFrZSB0ZW1wb3Jhcnkg bG9ja2ZpbGUgbmFtZSBJUC5QSUQgKGhleC5oZXgpICovCisgICAgLyogVGhpcyBzaG91bGQgZml0 IGluIDE0IGNoYXJzIC0tIGh1Z2UgUElEcyBhcmUgdXN1YWxseSBub3QgcG9zc2libGUgKi8KKyAg ICAvKiBvbiAxNC1jaGFyIGZpbGVuYW1lIHN5c3RlbXMuICovCisKKyAgICBzcHJpbnRmKHRtcGxj aywiJXMlMDhseC4lbHgiLGRiZGlyLG15aXAsbXlwaWQpOworICAgIGRlYnVnKEYxMTAsImdldHNs b3QgdGVtcGZpbGUiLHRtcGxjaywwKTsKKworICAgIC8qIE1ha2UgYSB0ZW1wb3JhcnkgZmlsZSAq LworCisgICAgbG9ja2ZkID0gY3JlYXQodG1wbGNrLCAwNjAwKTsJLyogQlVUIFRISVMgSVNOJ1Qg UE9SVEFCTEUgKi8KKyAgICBpZiAobG9ja2ZkIDwgMCkgeworICAgICAgICBkZWJ1ZyhGMTExLCJn ZXRzbG9jayB0ZW1wIGxvY2tmaWxlIGNyZWF0ZSBmYWlsdXJlIiwgdG1wbGNrLCBlcnJubyk7Cisg ICAgICAgIHJldHVybigtMSk7CisgICAgfQorICAgIC8qIFdyaXRlIG15IChkZWNpbWFsKSBQSUQg aW50byB0aGUgdGVtcCBmaWxlICovCisKKyAgICB3cml0ZShsb2NrZmQsaWRzdHJpbmcsKGludClz dHJsZW4oaWRzdHJpbmcpKTsKKyAgICBpZiAoY2xvc2UobG9ja2ZkKSA8IDApIHsgICAgICAgICAg ICAvKiBDbG9zZSBsb2NrZmlsZSAqLworICAgICAgICBkZWJ1ZyhGMTAxLCJnZXRzbG90IGVycm9y IGNsb3NpbmcgdGVtcCBsb2NrZmlsZSIsICIiLCBlcnJubyk7CisgICAgICAgIHJldHVybigtMSk7 CisgICAgfQorICAgIHNwcmludGYobGNrbmFtLCIlcyVzIixkYmRpcixJS19MT0NLRklMRSk7IC8q IEJ1aWxkIGxvY2tmaWxlIG5hbWUgKi8KKyAgICBkZWJ1ZyhGMTEwLCJnZXRzbG90IGxvY2tmaWxl IixsY2tuYW0sMCk7CisKKyAgICByZnAgPSBmb3BlbihsY2tuYW0sInIiKTsgICAgICAgICAgICAv KiBTZWUgaWYgbG9ja2ZpbGUgZXhpc3RzICovCisgICAgaWYgKHJmcCkgeyAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogSWYgc28uLi4gKi8KKyAgICAgICAgcnNldChwaWRidWYsIiIsNjQsMCk7 CisgICAgICAgIHggPSBmcmVhZChwaWRidWYsMSw2MyxyZnApOyAgICAgLyogUmVhZCBJRCBzdHJp bmcgZnJvbSBpdCAqLworICAgICAgICBmY2xvc2UocmZwKTsgICAgICAgICAgICAgICAgICAgIC8q IGFuZCBjbG9zZSBpdCBxdWlja2x5ICovCisgICAgICAgIGRlYnVnKEYxMTAsImdldHNsb3QgbG9j ayBleGlzdHMiLHBpZGJ1ZiwwKTsKKyAgICAgICAgaWYgKHggPiAwKSB7ICAgICAgICAgICAgICAg ICAgICAvKiBJZiB3ZSBoYXZlIGEgUElELCBjaGVjayBpdCAqLworICAgICAgICAgICAgY2hhciAq IHMgPSBwaWRidWY7CisgICAgICAgICAgICB3aGlsZSAoKnMpIHsKKyAgICAgICAgICAgICAgICBp ZiAoaXNsb3dlcigqcykpICpzID0gdG91cHBlcigqcyk7CisgICAgICAgICAgICAgICAgaWYgKCpz ID09ICc6JykgeworICAgICAgICAgICAgICAgICAgICAqcyA9IE5VTDsKKyAgICAgICAgICAgICAg ICAgICAgZGVidWcoRjExMCwiZ2V0c2xvdCBsb2NrIElQIixwaWRidWYsMCk7CisgICAgICAgICAg ICAgICAgICAgIGRlYnVnKEYxMTAsImd0ZXNsb3QgbXkgICBJUCIsbXloZXhpcCwwKTsKKyAgICAg ICAgICAgICAgICAgICAgaWYgKCFzdHJjbXAocGlkYnVmLG15aGV4aXApKSB7IC8qIFNhbWUgSVAg YWRkcmVzcz8gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGxvY2twaWQgPSBhdG9sKHMrMSk7 IC8qIFllcywgbm93IGdldCBQSUQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYx MDEsImdldHNsb3QgbG9ja3BpZCIsIiIsbG9ja3BpZCk7CisKKyAgICAgICAgICAgICAgICAgICAg ICAgIC8qIENoZWNrIGlmIFBJRCBsb2NrcGlkIG9uIHRoaXMgY29tcHV0ZXIgaXMgYWxpdmUgKi8K KyAgICAgICAgICAgICAgICAgICAgICAgIHggPSB6Y2hrcGlkKGxvY2twaWQpOworICAgICAgICAg ICAgICAgICAgICAgICAgaWYgKCF4KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVi dWcoRjEwMCwiZ2V0c2xvdCBQSUQgc3RhbGUscmVtb3ZpbmcgbG9jayIsIiIsMCk7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdW5saW5rKGxja25hbSk7CisgICAgICAgICAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzKys7CisgICAgICAgICAg ICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkZWJ1ZyhGMTExLCJnZXRzbG90IGxv Y2tmaWxlIG9wZW4gZmFpbHVyZSIsbGNrbmFtLGVycm5vKTsKKyAgICAgICAgfQorICAgIH0KKyAg ICAvKiBUcnkgSUtfTENLVFJJRVMgKDE2KSB0aW1lcyB0byByZW5hbWUgdGVtcCBmaWxlIHRvIGxv Y2tmaWxlICovCisKKyAgICBmb3IgKHRyaWVzID0gSUtfTENLVFJJRVM7IHRyaWVzID4gMDsgdHJp ZXMtLSkgeworICAgICAgICBpZiAoenJlbmFtZSh0bXBsY2ssbGNrbmFtKSA9PSAwKQorICAgICAg ICAgIGJyZWFrOworICAgICAgICBkZWJ1ZyhGMTAxLCJnZXRzbG90IGRhdGFiYXNlIGxvY2tlZCBi eSBwaWQiLCAiIiwgZGJwaWQpOworICAgICAgICBzbGVlcChJS19MQ0tTTEVFUCk7CisgICAgfQor ICAgIGlmICh0cmllcyA8IDEpIHsgICAgICAgICAgICAgICAgICAgIC8qIENvdWxkbid0ICovCisg ICAgICAgIGRlYnVnKEYxMTAsImdldHNsb3QgY3JlYXRlIGxvY2sgZmFpbHVyZSIsbGNrbmFtLDAp OworICAgICAgICByZXR1cm4oLTEpOworICAgIH0KKyAgICAvKiBIYXZlIGxvY2ssIG9wZW4gZGF0 YWJhc2UgKi8KKworICAgIGRlYnVnKEYxMTAsImdldHNsb3QgaGFzIGxvY2siLGxja25hbSwwKTsg LyogSGF2ZSBsb2NrICovCisKKyAgICBpZiAoIWRiZmlsZSkKKyAgICAgIHJldHVybigtMSk7CisK KyAgICAvKiBJZiBkYXRhYmFzZSBkb2Vzbid0IGV4aXN0LCBjcmVhdGUgaXQuICovCisKKyAgICBk ZWJ1ZyhGMTEwLCJnZXRzbG90IGRiZmlsZSIsZGJmaWxlLDApOworICAgIGlmICh6Y2hraShkYmZp bGUpIDwgMCkgeworICAgICAgICBkZWJ1ZyhGMTEwLCJnZXRzbG90IGNyZWF0aW5nIG5ldyBkYXRh YmFzZSIsZGJmaWxlLDApOworICAgICAgICB4ID0gY3JlYXQoZGJmaWxlLDA2NjApOworICAgICAg ICBpZiAoeCA8IDApIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMTEsImdldHNsb3QgY3JlYXQoKSBm YWlsZWQiLCBkYmZpbGUsIGVycm5vKTsKKyAgICAgICAgICAgIGdvdG8geHNsb3Q7CisgICAgICAg IH0KKyAgICAgICAgY2xvc2UoeCk7CisgICAgfQorICAgIGRiZnAgPSBmb3BlbihkYmZpbGUsdXBk bW9kZSk7ICAgICAgIC8qIE9wZW4gaXQgaW4gdXBkYXRlIG1vZGUgKi8KKyAgICBpZiAoIWRiZnAp IHsKKyAgICAgICAgZGVidWcoRjExMSwiZ2V0c2xvdCBmb3BlbiBmYWlsZWQiLGRiZmlsZSxlcnJu byk7CisgICAgICAgIGdvdG8geHNsb3Q7CisgICAgfQorICAgIC8qIE5vdyBmaW5kIGEgZnJlZSAo b3IgbmV3KSBzbG90Li4uICovCisKKyAgICBkYmxhc3R1c2VkID0gMEw7ICAgICAgICAgICAgICAg ICAgICAvKiBTZWVrIHBvaW50ZXIgdG8gbGFzdCByZWNvcmQgaW51c2UgKi8KKyAgICBteWRic2Vl ayA9IDBMOyAgICAgICAgICAgICAgICAgICAgICAvKiBTZWVrIHBvaW50ZXIgZm9yIG15IHJlY29y ZCAqLworCisgICAgLyogUXVpY2tseSByZWFkIHRoZSB3aG9sZSBkYXRhYmFzZTsgbiA9IHJlY29y ZCBjb3VudGVyLCBpID0gc2VlayBwb2ludGVyICovCisKKyAgICBmb3IgKG4gPSAwLCBpID0gMDsg IWZlb2YoZGJmcCk7IGkgKz0gREJfUkVDTCwgbisrKSB7CisgICAgICAgIHggPSBmcmVhZChkYnJl YywxLERCX1JFQ0wsZGJmcCk7IC8qIFJlYWQgYSByZWNvcmQgKi8KKyAgICAgICAgaWYgKHggPCAx KSAgICAgICAgICAgICAgICAgICAgICAvKiBFT0Ygbm90IGNhdWdodCBieSBmZW9mKCkgKi8KKyAg ICAgICAgICBicmVhazsKKyNpZm5kZWYgTk9GVFJVTkNBVEUKKyAgICAgICAgaWYgKHggIT0gREJf UkVDTCkgeyAgICAgICAgICAgICAvKiBXYXRjaCBvdXQgZm9yIHRyYWlsaW5nIGp1bmsgKi8KKyAg ICAgICAgICAgIGRlYnVnKEYxMDEsImdldHNsb3QgYmFkIHNpemUiLCIiLHgpOyAgLyogKFNob3Vs ZG4ndCBoYXBwZW4uLi4pICovCisjaWZkZWYgQ09IRVJFTlQKKyAgICAgICAgICAgIGNoc2l6ZShm aWxlbm8oZGJmcCksaSk7CisjZWxzZQorICAgICAgICAgICAgZnRydW5jYXRlKGZpbGVubyhkYmZw KSwoQ0tfT0ZGX1QpaSk7CisjZW5kaWYgLyogQ09IRVJFTlQgKi8KKyAgICAgICAgICAgIHggPSAw OworICAgICAgICAgICAgQ0tGU0VFSyhkYmZwLGksMCk7CisgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgfQorI2VuZGlmIC8qIE5PRlRSVU5DQVRFICovCisgICAgICAgIGRlYnVnKEYxMDEsImdl dHNsb3QgcmVjb3JkIiwiIixuKTsKKyAgICAgICAgayA9IGRiZmxkW2RiX0ZMQUdTXS5vZmY7Cisg ICAgICAgIGogPSBkYmZsZFtkYl9GTEFHU10ubGVuOworICAgICAgICBkYmZsYWdzID0gaGV4dG91 bG9uZygmZGJyZWNba10saik7CisgICAgICAgIGRlYnVnKEYwMDEsImdldHNsb3QgZGJmbGFncyIs IiIsZGJmbGFncyk7CisgICAgICAgIGsgPSBkYmZsZFtkYl9NWVBJRF0ub2ZmOworICAgICAgICBq ID0gZGJmbGRbZGJfTVlQSURdLmxlbjsKKyAgICAgICAgZGJwaWQgID0gaGV4dG91bG9uZygmZGJy ZWNba10saik7CisgICAgICAgIGRlYnVnKEYwMDEsImdldHNsb3QgZGJwaWQiLCIiLGRicGlkKTsK KyAgICAgICAgayA9IGRiZmxkW2RiX1NBRERSXS5vZmY7CisgICAgICAgIGogPSBkYmZsZFtkYl9T QUREUl0ubGVuOworICAgICAgICBkYmlwID0gaGV4dG91bG9uZygmZGJyZWNba10saik7CisgICAg ICAgIGRlYnVnKEYwMDEsImdldHNsb3QgZGJpcCIsIiIsZGJpcCk7CisKKyAgICAgICAgaWYgKGRi ZmxhZ3MgJiBEQkZfSU5VU0UpIHsgICAgICAvKiBSZW1lbWJlciBsYXN0IHNsb3QgaW4gdXNlICov CisgICAgICAgICAgICB4ID0gMDsgICAgICAgICAgICAgICAgICAgICAgLyogTWFrZSBzdXJlIGl0 J3MgUkVBTExZIGluIHVzZSAqLworICAgICAgICAgICAgaWYgKGRicGlkID09IG15cGlkICYmIGRi aXAgPT0gbXlpcCkgeyAvKiBDaGVjayBmb3IgUElEID09IG15IFBJRCAqLworICAgICAgICAgICAg ICAgIHggPSAxOworICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsImdldHNsb3QgcmVjb3JkIHBp ZCIsIiIsZGJwaWQpOworICAgICAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgIC8q IE9yIGZvciBzdGFsZSBQSUQgKi8KKyAgICAgICAgICAgICAgICB4ID0gemNoa3BpZChkYnBpZCk7 CisgICAgICAgICAgICAgICAgZGVidWcoRjEwMSwiZ2V0c2xvdCB6Y2hrcGlkKCkiLCIiLHgpOwor ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCF4KSB7ICAgICAgICAgICAgICAgICAgIC8q IEJvZ3VzIHJlY29yZCAqLworICAgICAgICAgICAgICAgIHggPSBmcmVlc2xvdChuKTsKKyAgICAg ICAgICAgICAgICBkZWJ1ZyhGMTAxLCJnZXRzbG90IHN0YWxlIHJlY29yZCBwaWQ6IGZyZWVzbG90 KCkiLCIiLHgpOworICAgICAgICAgICAgICAgIGlmICh4ID4gLTEgJiYgIWhhdmVzbG90KQorICAg ICAgICAgICAgICAgICAgZGJmbGFncyA9IDA7CisgICAgICAgICAgICB9IGVsc2UgeyAgICAgICAg ICAgICAgICAgICAgLyogSXQncyByZWFsbHkgaW4gdXNlICovCisgICAgICAgICAgICAgICAgZGJs YXN0dXNlZCA9IGk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFoYXZl c2xvdCkgeyAgICAgICAgICAgICAgICAvKiBJZiBJIGRvbid0IGhhdmUgYSBzbG90IHlldCAqLwor ICAgICAgICAgICAgaWYgKCEoZGJmbGFncyAmIERCRl9JTlVTRSkpIHsgICAgICAgLyogQ2xhaW0g dGhpcyBvbmUgKi8KKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJnZXRzbG90IGZyZWUgc2xv dCIsICIiLCBuKTsKKyAgICAgICAgICAgICAgICBoYXZlc2xvdCA9IDE7CisgICAgICAgICAgICAg ICAgbXlkYnNlZWsgPSBpOworICAgICAgICAgICAgICAgIG15ZGJzbG90ID0gbjsgICAgICAgICAg IC8qIEJ1dCBrZWVwIGdvaW5nLi4uICovCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9 CisgICAgLyogQ29tZSBoZXJlIHdpdGggaSA9PSBzZWVrIHBvaW50ZXIgdG8gZmlyc3QgcmVjb3Jk IGFmdGVyIGVvZiAqLworCisgICAgaWYgKCFoYXZlc2xvdCkgeyAgICAgICAgICAgICAgICAgICAg LyogRm91bmQgbm8gZnJlZSBzbG90IHNvIGFkZCB0byBlbmQgKi8KKyAgICAgICAgZGVidWcoRjEw MSwiZ2V0c2xvdCBuZXcgc2xvdCIsIiIsbik7CisgICAgICAgIGhhdmVzbG90ID0gMTsKKyAgICAg ICAgbXlkYnNlZWsgPSBpOworICAgICAgICBteWRic2xvdCA9IG47CisgICAgfQorICAgIGlrZGJv cGVuID0gMTsgICAgICAgICAgICAgICAgICAgICAgIC8qIE9LIHRvIG1ha2UgZGF0YWJhc2UgZW50 cmllcyAqLworICAgIGRlYnVnKEYxMDEsImdldHNsb3QgcmVjb3JkcyIsIiIsbik7CisgICAgZGVi dWcoRjEwMSwiZ2V0c2xvdCBkYmxhc3R1c2VkIiwiIixkYmxhc3R1c2VkKTsKKyAgICBkZWJ1ZyhG MTAxLCJnZXRzbG90IGkiLCIiLGkpOworCisgICAgLyogVHJpbSBzdGFsZSByZWNvcmRzIGZyb20g ZW5kICovCisKKyNpZm5kZWYgTk9GVFJVTkNBVEUKKyAgICBpZiAoaSA+IGRibGFzdHVzZWQrREJf UkVDTCkgeworICAgICAgICBkZWJ1ZyhGMTAxLCJnZXRzbG90IHRydW5jYXRpbmcgYXQiLCIiLGRi bGFzdHVzZWQrREJfUkVDTCk7CisjaWZkZWYgQ09IRVJFTlQKKyAgICAgICAgeCA9IGNoc2l6ZShm aWxlbm8oZGJmcCksZGJsYXN0dXNlZCtEQl9SRUNMKTsKKyNlbHNlCisgICAgICAgIHggPSBmdHJ1 bmNhdGUoZmlsZW5vKGRiZnApLChDS19PRkZfVCkoZGJsYXN0dXNlZCtEQl9SRUNMKSk7CisjZW5k aWYgLyogQ09IRVJFTlQgKi8KKyAgICAgICAgaWYgKHggPCAwKSAgICAgICAgICAgICAgICAgICAg ICAvKiAoTm90IGZhdGFsKSAqLworICAgICAgICAgIGRlYnVnKEYxMDEsImdldHNsb3QgZnRydW5j YXRlIGZhaWxlZCIsICIiLCBlcnJubyk7CisgICAgfQorI2VuZGlmIC8qIE5PRlRSVU5DQVRFICov CisKKyAgICAvKiBJbml0aWFsaXplIG15IHJlY29yZCAqLworCisgICAgaWYgKGluaXRzbG90KG15 ZGJzbG90KSA8IDApIHsKKyAgICAgICAgZGVidWcoRjEwMSwiZ2V0c2xvdCBpbml0c2xvdCgpIGVy cm9yIiwiIixuKTsKKyAgICAgICAgaWtkYm9wZW4gPSAwOworICAgICAgICBnb3RvIHhzbG90Owor ICAgIH0KKyAgICBkZWJ1ZyhGMTAxLCJnZXRzbG90IE9LIiwiIixteWRic2xvdCk7CisgICAgcmMg PSBteWRic2xvdDsgICAgICAgICAgICAgICAgICAgICAgLyogT0sgcmV0dXJuIGNvZGUgKi8KKwor ICB4c2xvdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVubG9jayB0aGUgZGF0 YWJhc2UgYW5kIHJldHVybiAqLworICAgIGlmICh1bmxpbmsobGNrbmFtKSA8IDApIHsKKyAgICAg ICAgZGVidWcoRjExMSwiZ2V0c2xvdCBsb2NrZmlsZSByZW1vdmFsIGZhaWxlZCIsbGNrbmFtLGVy cm5vKTsKKyAgICAgICAgcmMgPSAtMTsKKyAgICB9CisgICAgcmV0dXJuKHJjKTsKK30KKyNlbmRp ZiAvKiBJS1NEQiAqLworI2VuZGlmIC8qIE5PSUtTRCAqLwoKZGlmZiAtLWdpdCBhL2NrZXJtaXQt OS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1dXN5LmMgYi9ja2VybWl0LTkuMC4zMDIt YnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdXVzeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAuLjE4MDJiMDUKLS0tIC9kZXYvbnVsbAorKysgYi9ja2VybWl0LTkuMC4zMDItYnVp bGQvY2tlcm1pdC05LjAuMzAyL2NrdXVzeS5jCkBAIC0wLDAgKzEsNDc0NCBAQAorI2luY2x1ZGUg ImNrY3N5bS5oIgorI2RlZmluZSBYRkFUQUwgZmF0YWwKKworLyogIEMgSyBVIFUgUyBZIC0tICAi VXNlciBJbnRlcmZhY2UiIGZvciBDLUtlcm1pdCBLZXJtaXQsIHBhcnQgWSAgKi8KKworLyogIENv bW1hbmQtTGluZSBBcmd1bWVudCBQYXJzZXIgKi8KKworLyoKKyAgQXV0aG9yczoKKyAgICBGcmFu ayBkYSBDcnV6IDxmZGNAY29sdW1iaWEuZWR1PiwKKyAgICAgIFRoZSBLZXJtaXQgUHJvamVjdCwg Q29sdW1iaWEgVW5pdmVyc2l0eSwgTmV3IFlvcmsgQ2l0eQorICAgIEplZmZyZXkgRSBBbHRtYW4g PGphbHRtYW5Ac2VjdXJlLWVuZHBvaW50cy5jb20+CisgICAgICBTZWN1cmUgRW5kcG9pbnRzIElu Yy4sIE5ldyBZb3JrIENpdHkKKworICBDb3B5cmlnaHQgKEMpIDE5ODUsIDIwMDksCisgICAgVHJ1 c3RlZXMgb2YgQ29sdW1iaWEgVW5pdmVyc2l0eSBpbiB0aGUgQ2l0eSBvZiBOZXcgWW9yay4KKyAg ICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgU2VlIHRoZSBDLUtlcm1pdCBDT1BZSU5HLlRYVCBmaWxl IG9yIHRoZQorICAgIGNvcHlyaWdodCB0ZXh0IGluIHRoZSBja2NtYWkuYyBtb2R1bGUgZm9yIGRp c2NsYWltZXIgYW5kIHBlcm1pc3Npb25zLgorKi8KKyNpbmNsdWRlICJja2NkZWIuaCIKKworY2hh ciAqIGJhbm5lcmZpbGUgPSBOVUxMOworY2hhciAqIGhlbHBmaWxlID0gTlVMTDsKK2V4dGVybiBp bnQgeGZlcmxvZywgZmlsZXBlZWssIG5vbGlua3M7CitleHRlcm4gY2hhciAqIHhmZXJmaWxlOwor ZXh0ZXJuIGludCBkZWJ0aW07CisKKyNpbmNsdWRlICJja2Nhc2MuaCIKKyNpbmNsdWRlICJja2Nr ZXIuaCIKKyNpbmNsdWRlICJja3VjbWQuaCIKKyNpbmNsdWRlICJja2NuZXQuaCIKKyNpbmNsdWRl ICJja3V1c3IuaCIKKyNpbmNsdWRlICJja2N4bGEuaCIKKyNpZmRlZiBDS19TU0wKKyNpbmNsdWRl ICJja19zc2wuaCIKKyNlbmRpZiAvKiBDS19TU0wgKi8KKyNpbmNsdWRlIDxzaWduYWwuaD4KKwor I2lmZGVmIE9TMgorI2luY2x1ZGUgPGlvLmg+CisjaWZkZWYgS1VJCisjaW5jbHVkZSAiaWt1aS5o IgorZXh0ZXJuIHN0cnVjdCBfa3VpX2luaXQga3VpX2luaXQ7CisjZW5kaWYgLyogS1VJICovCisj ZW5kaWYgLyogT1MyICovCisKK2V4dGVybiBpbnQgaW5zZXJ2ZXIsIGZuY252LCBmX3NhdmUsIHhm ZXJtb2RlOworI2lmZGVmIFBBVFRFUk5TCitleHRlcm4gaW50IHBhdHRlcm5zOworI2VuZGlmIC8q IFBBVFRFUk5TICovCisKKyNpZm5kZWYgTk9JQ1AKK2V4dGVybiBpbnQgY21kaW50OworI2VuZGlm IC8qIE5PSUNQICovCitleHRlcm4gaW50IHhzdXNwZW5kOworCisjaWZkZWYgTkVUQ09OTgorI2lm ZGVmIEFOWVgyNQorZXh0ZXJuIGludCByZXZjYWxsLCBjbG9zZ3IsIGN1ZGF0YTsKK2V4dGVybiBj aGFyIHVkYXRhW107CitleHRlcm4gaW50IHgyNWZkOworI2VuZGlmIC8qIEFOWVgyNSAqLworI2lm bmRlZiBWTVMKKyNpZm5kZWYgT1MyCisjaWZuZGVmIE9TSworZXh0ZXJuCisjZW5kaWYgLyogT1NL ICovCisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogVk1TICovCisKK2ludCB0ZWxuZXRmZDsK K2V4dGVybiBzdHJ1Y3Qga2V5dGFiIG5ldGNtZFtdOworZXh0ZXJuIGludCB0bl9leGl0OworI2lm bmRlZiBOT0lDUAorI2lmbmRlZiBOT0RJQUwKK2V4dGVybiBpbnQgbm5ldHMsIG5uZXRkaXI7ICAg ICAgICAgICAgICAvKiBOZXR3b3JrIHNlcnZpY2VzIGRpcmVjdG9yeSAqLworZXh0ZXJuIGNoYXIg Km5ldGRpcltdOworZXh0ZXJuIGNoYXIgKm5oX3BbXTsgICAgICAgICAgICAgICAgICAgIC8qIE5l dHdvcmsgZGlyZWN0b3J5IGVudHJ5IHBvaW50ZXJzICovCitleHRlcm4gY2hhciAqbmhfcDJbXTsg ICAgICAgICAgICAgICAgICAgLyogTmV0d29yayBkaXJlY3RvcnkgZW50cnkgbmV0dHlwZSAqLwor ZXh0ZXJuIGNoYXIgKm5oX3B4WzRdW01BWEROVU1TICsgMV07CisjZW5kaWYgLyogTk9ESUFMICov CitleHRlcm4gaW50IG5oY291bnQ7CitleHRlcm4gY2hhciAqIG5fbmFtZTsgICAgICAgICAgICAg ICAgICAgLyogTmV0d29yayBuYW1lIHBvaW50ZXIgKi8KKyNlbmRpZiAvKiBOT0lDUCAqLworI2Vu ZGlmIC8qIE5FVENPTk4gKi8KKworI2lmbmRlZiBOT1NQTAorZXh0ZXJuIGludCBubWFjOworZXh0 ZXJuIHN0cnVjdCBtdGFiICptYWN0YWI7CisjZW5kaWYgLyogTk9TUEwgKi8KK2V4dGVybiBjaGFy IHVpZGJ1ZltdOworCisjaWZkZWYgQ0tfTE9HSU4KK2V4dGVybiBpbnQgbG9naW50aW1vOworI2Vu ZGlmIC8qIENLX0xPR0lOICovCisKK2V4dGVybiBjaGFyICogbXluYW1lLCAqIGRmdHR5OworZXh0 ZXJuIGludCBob3djYWxsZWQ7CisKK2V4dGVybiBjaGFyICpja3hzeXMsICpja3pzeXMsICoqeGFy Z3YsICp4YXJnMCwgKipjbWxpc3QsICpjbGNtZHM7CisKK2V4dGVybiBpbnQgYWN0aW9uLCBjZmxn LCB4YXJnYywgY25mbGcsIGxvY2FsLCBxdWlldCwgZXNjYXBlLCBuZXR3b3JrLCBtZG10eXAsCisg IGJnc2V0LCBiYWNrZ3JkLCB4YXJncywgYmluYXJ5LCBwYXJpdHksIHR1cm4sIHR1cm5jaCwgZHVw bGV4LCBmbG93LCBjbGZpbHMsCisgIG5vaW5pdCwgc3RheWZsZywgbmV0dHlwZSwgY2ZpbGVmLCBu b2hlcmFsZCwgY21hc2ssIGNtZG1zaywgZXhpdG9uY2xvc2UsCisgIGhhdmVsaW5lLCBqdXN0b25l LCBjeHR5cGUsIHhmaW5pc2gsIHR0bnByb3RvOworCitleHRlcm4gbG9uZyBzcGVlZDsKK2V4dGVy biBjaGFyIHR0bmFtZVtdOworZXh0ZXJuIGNoYXIgKiBwaXBlZGF0YSwgKiBjbWRmaWw7CisKKyNp Zm5kZWYgTk9YRkVSCitleHRlcm4gY2hhciAqY21hcmcsICpjbWFyZzI7CisKK2V4dGVybiBpbnQg bmZpbHMsIHN0ZG91Ziwgc3RkaW5mLCBkaXNwbGEsIG1heHJwcywgcnBzaXosIGNrd2FybiwgdXJw c2l6LAorICB3c2xvdHIsIHN3Y2FwciwgY2tkZWxheSwgcmVjdXJzaXZlLCByZWxpYWJsZSwgeHJl bGlhYmxlLCBmbnNwYXRoLCBmbmNhY3QsCisgIGNsZWFycnEsIHNldHJlbGlhYmxlOworCisjaWZk ZWYgUElQRVNFTkQKK2V4dGVybiBpbnQgdXNlcGlwZXMsIHBpcGVzZW5kOworI2VuZGlmIC8qIFBJ UEVTRU5EICovCitleHRlcm4gaW50IHByb3RvY29sOworI2VuZGlmIC8qIE5PWEZFUiAqLworCisj aWZuZGVmIE5PUFVTSAorZXh0ZXJuIGludCBub3B1c2g7CisjZW5kaWYgLyogTk9QVVNIICovCisK KyNpZmRlZiBPUzIKK2V4dGVybiBzdHJ1Y3Qga2V5dGFiIG9zMmRldnRhYltdOworZXh0ZXJuIGlu dCBub3MyZGV2OworZXh0ZXJuIGludCB0dHNsaXA7CitleHRlcm4gaW50IHR0X3Njcm9sbCwgdHRf ZXNjYXBlOworI2lmZGVmIE9TMlBNCitleHRlcm4gaW50IG9zMnBtOworI2VuZGlmIC8qIE9TMlBN ICovCisjZW5kaWYgLyogT1MyICovCisKKyNpZmRlZiBDS19ORVRCSU9TCitleHRlcm4gdW5zaWdu ZWQgY2hhciBOZXRCaW9zQWRhcHRlcjsKKyNlbmRpZiAvKiBDS19ORVRCSU9TICovCisKKyNpZmRl ZiBYRkFUQUwKKyN1bmRlZiBYRkFUQUwKKyNlbmRpZiAvKiBYRkFUQUwgKi8KKworI2lmZGVmIFRO Q09ERQorX1BST1RPVFlQKHN0YXRpYyBpbnQgZG90bmFyZywgKGNoYXIgeCkgKTsKKyNlbmRpZiAv KiBUTkNPREUgKi8KKyNpZmRlZiBSTE9HQ09ERQorX1BST1RPVFlQKHN0YXRpYyBpbnQgZG9ybGdh cmcsIChjaGFyIHgpICk7CisjZW5kaWYgLyogUkxPR0NPREUgKi8KKyNpZmRlZiBTU0hCVUlMVElO CitfUFJPVE9UWVAoc3RhdGljIGludCBkb3NzaGFyZywgKGNoYXIgeCkgKTsKKyNlbmRpZiAvKiBT U0hCVUlMVElOICovCisKK2ludCBoYXZlZnRwdWlkID0gMDsJCQkvKiBIYXZlIEZUUCB1c2VyIElE ICovCitzdGF0aWMgaW50IGhhdmVfY3ggPSAwOwkJCS8qIEhhdmUgY29ubmVjdGlvbiAqLworCitz dGF0aWMgY2hhciAqIGZhaWxtc2cgPSBOVUxMOwkJLyogRmFpbHVyZSBtZXNzYWdlICovCisKKyNp ZmRlZiBORVdGVFAKK2V4dGVybiBjaGFyICogZnRwX2hvc3Q7CisjZW5kaWYgLyogTkVXRlRQICov CisKK2V4dGVybiBpbnQgd2hhdDsKKworI2lmbmRlZiBOT0lDUAorI2lmbmRlZiBOT0RJQUwKK2V4 dGVybiBpbnQgbm1kbSwgdGVsZXBob255OworZXh0ZXJuIHN0cnVjdCBrZXl0YWIgbWRtdGFiW107 CitleHRlcm4gaW50IHVzZXJtZG0sIGRpYWx1ZHQ7CisjZW5kaWYgLyogTk9ESUFMICovCitfUFJP VE9UWVAoc3RhdGljIGludCBwbXNnLCAoY2hhciAqKSApOworX1BST1RPVFlQKHN0YXRpYyBpbnQg Zm1zZywgKGNoYXIgKikgKTsKK3N0YXRpYyBpbnQgcG1zZyhzKSBjaGFyICpzOyB7IHByaW50Zigi JXNcbiIsIHMpOyByZXR1cm4oMCk7IH0KK3N0YXRpYyBpbnQgZm1zZyhzKSBjaGFyICpzOyB7IGZh dGFsKHMpOyByZXR1cm4oMCk7IH0KKyNkZWZpbmUgWEZBVEFMKHMpIHJldHVybih3aGF0PT1XX0NP TU1BTkQ/cG1zZyhzKTpmbXNnKHMpKQorI2Vsc2UKKyNkZWZpbmUgWEZBVEFMIGZhdGFsCisjZW5k aWYgLyogTk9JQ1AgKi8KKworI2lmbmRlZiBOT0hUVFAKKyNkZWZpbmUgSFRUUF9HRVQgMQorI2Rl ZmluZSBIVFRQX1BVVCAyCisjZGVmaW5lIEhUVFBfSEVEIDMKKyNlbmRpZiAvKiBOT0hUVFAgKi8K KworI2lmZGVmIENLX1VSTAorLyogVVJMcyB3ZSByZWNvZ25pemUgKi8KKworI2RlZmluZSBVUkxf RlRQICAgIDEKKyNkZWZpbmUgVVJMX0hUVFAgICAyCisjZGVmaW5lIFVSTF9IVFRQUyAgMworI2Rl ZmluZSBVUkxfSUtTRCAgIDQKKyNkZWZpbmUgVVJMX1RFTE5FVCA1CisjZGVmaW5lIFVSTF9MT0dJ TiAgNgorCitzdHJ1Y3Qga2V5dGFiIHVybHRhYltdID0geworI2lmZGVmIE5FV0ZUUAorICAgICJm dHAiLCAgICBVUkxfRlRQLCAgICAwLAorI2VuZGlmIC8qIE5FV0ZUUCAqLworI2lmbmRlZiBOT0hU VFAKKyAgICAiaHR0cCIsICAgVVJMX0hUVFAsICAgMCwKKyAgICAiaHR0cHMiLCAgVVJMX0hUVFBT LCAgMCwKKyNlbmRpZiAvKiBOT0hUVFAgKi8KKyAgICAiaWtzZCIsICAgVVJMX0lLU0QsICAgMCwK KyAgICAia2VybWl0IiwgVVJMX0lLU0QsICAgMCwKKyAgICAidGVsbmV0IiwgVVJMX1RFTE5FVCwg MCwKKyAgICAiIiwgMCwgMAorfTsKK2ludCBudXJsdGFiID0gc2l6ZW9mKHVybHRhYikvc2l6ZW9m KHN0cnVjdCBrZXl0YWIpIC0gMTsKKworI2lmbmRlZiBVUkxCVUZMRU4KKyNkZWZpbmUgVVJMQlVG TEVOIDEwMjQKKyNlbmRpZiAvKiBVUkxCVUZMRU4gKi8KK3N0YXRpYyBjaGFyIHVybGJ1ZltVUkxC VUZMRU5dOworc3RydWN0IHVybGRhdGEgZ191cmwgPSB7TlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxM LE5VTEwsTlVMTH07CisKKy8qIHUgciBsIHAgYSByIHMgZSAgLS0gIFBhcnNlIGEgcG9zc2libGUg VVJMICovCisKKy8qCisgIFJldHVybnMgMCBpZiB0aGUgY2FuZGlkYXRlIGRvZXMgbm90IHNlZW0g dG8gYmUgYSBVUkwuCisgIFJldHVybnMgMSBpZiBpdCBtaWdodCBiZSBhIFVSTCwgd2l0aCB0aGUg YWJvdmUgcG9pbnRlcnMgc2V0IHRvIGl0cyBwaWVjZXM6CisgICAgc2VydmljZSA6IFsgLy8gXSBb IHVzZXIgWyA6IHBhc3N3b3JkIF0gQCBdIGhvc3QgWyA6IHNlcnZpY2UgXSBbIC8gcGF0aCBdIC0K KyAgICAgICAgICAgICAgWyA/IG5hbWUgWyA9IHZhbHVlIF1dCisKKyAgRXhhbXBsZTogZnRwOi8v ZHMuaW50ZXJuaWMubmV0OjIxL3JmYy9yZmMxMjM0LnR4dAorICAgIHVybC5zdmMgPSBbZnRwXQor ICAgIHVybC51c3IgPSBbKE5VTEwpXQorICAgIHVybC5wc3cgPSBbKE5VTEwpXQorICAgIHVybC5o b3MgPSBbZHMuaW50ZXJuaWMubmV0XQorICAgIHVybC5wb3IgPSBbMjFdCisgICAgdXJsLnB0aCA9 IFtyZmMvcmZjMTIzNC50eHRdCisKKyAgSXQgbWlnaHQgYmUgYSBVUkwgaWYgaXQgY29udGFpbnMg YSBwb3NzaWJsZSBzZXJ2aWNlIG5hbWUgZm9sbG93ZWQgYnkgYQorICBhIGNvbG9uICg6KS4gIFRo dXMgInRlbG5ldDp4eXpjb3JwLmNvbSIgaXMgYSBtaW5pbWFsIFVSTCwgd2hlcmVhcyBhCisgIGZ1 bGwtYmxvd24gZXhhbXBsZSB3b3VsZCBiZToKKworICAgIGZ0cDovL29sZ2E6c2VjcmV0QGZ0cC54 eXpjb3JwLmNvbS9wdWJsaWMvb29mYS50eHQKKworICBUaGUgY2FsbGVyIG11c3QgdmVyaWZ5IHRo ZSByZXN1bHRzLCBpLmUuIHRoYXQgdGhlIHNlcnZpY2Ugc3RyaW5nIGlzIGEgcmVhbAorICBUQ1Ag c2VydmljZSwgZXRjLiAgVGhpcyByb3V0aW5lIGp1c3QgcGFyc2VzIHRoZSBmaWVsZHMuCisKKyAg c3RydWN0IHVybGRhdGEgZGVmaW5lZCBpbiBja2NrZXIuaAorKi8KKworaW50Cit1cmxwYXJzZShz LHVybCkgY2hhciAqczsgc3RydWN0IHVybGRhdGEgKiB1cmw7IHsKKyAgICBjaGFyICogcCA9IE5V TEwsICogdXJsYnVmID0gTlVMTDsKKyAgICBpbnQgeDsKKworICAgIGlmICghcyB8fCAhdXJsKQor ICAgICAgICByZXR1cm4oMCk7CisKKyAgICBpZiAoISpzKQorICAgICAgICByZXR1cm4oMCk7CisK KyAgICBtYWtlc3RyKCZ1cmxidWYscyk7CisKKyAgICBpZiAodXJsLT5zYXYpIHsJCQkvKiBJbiBj YXNlIHdlIHdlcmUgY2FsbGVkIGJlZm9yZS4uLiAqLworICAgICAgICBmcmVlKHVybC0+c2F2KTsK KyAgICAgICAgdXJsLT5zYXYgPSBOVUxMOworICAgIH0KKyAgICBpZiAodXJsLT5zdmMpIHsKKyAg ICAgICAgZnJlZSh1cmwtPnN2Yyk7CisgICAgICAgIHVybC0+c3ZjID0gTlVMTDsKKyAgICB9Cisg ICAgaWYgKHVybC0+aG9zKSB7CisgICAgICAgIGZyZWUodXJsLT5ob3MpOworICAgICAgICB1cmwt PmhvcyA9IE5VTEw7CisgICAgfQorICAgIGlmICh1cmwtPnBvcikgeworICAgICAgICBmcmVlKHVy bC0+cG9yKTsKKyAgICAgICAgdXJsLT5wb3IgPSBOVUxMOworICAgIH0KKyAgICBpZiAodXJsLT51 c3IpIHsKKyAgICAgICAgZnJlZSh1cmwtPnVzcik7CisgICAgICAgIHVybC0+dXNyID0gTlVMTDsK KyAgICB9CisgICAgaWYgKHVybC0+cHN3KSB7CisgICAgICAgIGZyZWUodXJsLT5wc3cpOworICAg ICAgICB1cmwtPnBzdyA9IE5VTEw7CisgICAgfQorICAgIGlmICh1cmwtPnB0aCkgeworICAgICAg ICBmcmVlKHVybC0+cHRoKTsKKyAgICAgICAgdXJsLT5wdGggPSBOVUxMOworICAgIH0KKyAgICBp ZiAodXJsLT5ub3B0cykgeworICAgICAgICBpbnQgaTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8 IHVybC0+bm9wdHMgJiYgaSA8IE1BWF9VUkxfT1BUUzsgaSsrICkgeworICAgICAgICAgICAgaWYg KHVybC0+b3B0W2ldLm5hbSkgeworICAgICAgICAgICAgICAgIGZyZWUodXJsLT5vcHRbaV0ubmFt KTsKKyAgICAgICAgICAgICAgICB1cmwtPm9wdFtpXS5uYW0gPSBOVUxMOworICAgICAgICAgICAg fQorICAgICAgICAgICAgaWYgKHVybC0+b3B0W2ldLnZhbCkgeworICAgICAgICAgICAgICAgIGZy ZWUodXJsLT5vcHRbaV0udmFsKTsKKyAgICAgICAgICAgICAgICB1cmwtPm9wdFtpXS52YWwgPSBO VUxMOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHVybC0+bm9wdHMgPSAwOwor ICAgIH0KKyAgICBwID0gdXJsYnVmOwkJCQkvKiBXYXMgYSBzZXJ2aWNlIHJlcXVlc3RlZD8gKi8K KyAgICB3aGlsZSAoKnAgJiYgKnAgIT0gJzonKQkJLyogTG9vayBmb3IgY29sb24gKi8KKyAgICAg IHArKzsKKyAgICBpZiAoKnAgPT0gJzonKSB7ICAgICAgICAgICAgICAgICAgICAvKiBIYXZlIGEg Y29sb24gKi8KKyAgICAgICAgKnArKyA9IE5VTDsJCQkvKiBHZXQgc2VydmljZSBuYW1lIG9yIG51 bWJlciAqLworICAgICAgICBpZiAoKnAgPT0gJzonKQkJCS8qIGEgc2Vjb25kIGNvbG9uICovCisg ICAgICAgICAgKnArKyA9IE5VTDsJCQkvKiBnZXQgcmlkIG9mIHRoYXQgb25lIHRvbyAqLworICAg ICAgICB3aGlsZSAoKnAgPT0gJy8nKSAqcCsrID0gTlVMOwkvKiBhbmQgc2xhc2hlcyAqLworI2lm ZGVmIENPTU1FTlQKKyAgICAgICAgLyogVHJhaWxpbmcgc2xhc2ggaXMgcGFydCBvZiBwYXRoIC0g bGVhdmUgaXQgLSBqYWx0bWFuICovCisgICAgICAgIHggPSBzdHJsZW4ocCk7ICAgICAgICAgICAg ICAgICAgLyogTGVuZ3RoIG9mIHJlbWFpbmRlciAqLworICAgICAgICBpZiAocFt4LTFdID09ICcv JykgICAgICAgICAgICAgIC8qIElmIHRoZXJlIGlzIGEgdHJhaWxpbmcgc2xhc2ggKi8KKyAgICAg ICAgICBwW3gtMV0gPSBOVUw7CQkJLyogcmVtb3ZlIGl0LiAqLworI2VuZGlmIC8qIENPTU1FTlQg Ki8KKyAgICAgICAgaWYgKHVybGJ1ZlswXSkgewkJLyogQW55dGhpbmcgbGVmdD8gKi8KKyAgICAg ICAgICAgIGNoYXIgKnEgPSBwLCAqciA9IHAsICp3ID0gcDsKKwkgICAgbWFrZXN0cigmdXJsLT5z dmMsdXJsYnVmKTsKKworICAgICAgICAgICAgd2hpbGUgKCpwICE9IE5VTCAmJiAqcCAhPSAnQCcp IC8qIGxvb2sgZm9yIEAgKi8KKwkgICAgICBwKys7CisgICAgICAgICAgICBpZiAoKnAgPT0gJ0An KSB7CQkvKiBTaWduaWZpZXMgdXNlciBJRCwgbWF5YmUgcGFzc3dvcmQgKi8KKyAgICAgICAgICAg ICAgICAqcCsrID0gTlVMOworCQl1cmwtPmhvcyA9IHA7CisgICAgICAgICAgICAgICAgd2hpbGUg KCp3ICE9IE5VTCAmJiAqdyAhPSAnOicpCisgICAgICAgICAgICAgICAgICB3Kys7CisgICAgICAg ICAgICAgICAgaWYgKCp3ID09ICc6JykKKyAgICAgICAgICAgICAgICAgICp3KysgPSBOVUw7CisJ CXVybC0+dXNyID0gcjsJCS8qIFVzZXJuYW1lICovCisJCWlmICgqdykKKwkJICB1cmwtPnBzdyA9 IHc7CQkvKiBQYXNzd29yZCAqLworICAgICAgICAgICAgICAgIHEgPSBwOworICAgICAgICAgICAg fSBlbHNlIHsJCQkvKiBObyB1c2VybmFtZSBvciBwYXNzd29yZCAqLworICAgICAgICAgICAgICAg IHAgPSBxOworCQl1cmwtPmhvcyA9IHA7CisgICAgICAgICAgICB9CisjaWZkZWYgQ09NTUVOVAor CSAgICBkZWJ1ZyhGMTExLCJ1cmxwYXJzZSB1cmwtPnVzciIsdXJsLT51c3IsdXJsLT51c3IpOwor CSAgICBkZWJ1ZyhGMTExLCJ1cmxwYXJzZSB1cmwtPnBzdyIsdXJsLT51c3IsdXJsLT5wc3cpOwor CSAgICBkZWJ1ZyhGMTExLCJ1cmxwYXJzZSB1cmwtPmhvcyIsdXJsLT51c3IsdXJsLT5ob3MpOwor I2VuZGlmCS8qIENPTU1FTlQgKi8KKworICAgICAgICAgICAgd2hpbGUgKCpwICE9IE5VTCAmJiAq cCAhPSAnOicgJiYgKnAgIT0gJy8nKQkvKiBQb3J0PyAqLworICAgICAgICAgICAgICBwKys7Cisg ICAgICAgICAgICBpZiAoKnAgPT0gJzonKSB7CQkvKiBUQ1AgcG9ydCAqLworICAgICAgICAgICAg ICAgICpwKysgPSBOVUw7CisgICAgICAgICAgICAgICAgciA9IHA7CisJCXVybC0+cG9yID0gcjsK KyAgICAgICAgICAgICAgICB3aGlsZSAoKnAgIT0gTlVMICYmICpwICE9ICcvJykKKwkJICBwKys7 CisgICAgICAgICAgICAgICAgLyogJy8nIGlzIHBhcnQgb2YgcGF0aCwgbGVhdmUgaXQgdW50aWwg d2UgY2FuIGNvcHkgKi8KKyAgICAgICAgICAgICAgICBpZiAoKnAgPT0gJy8nKSB7CisJCSAgICBt YWtlc3RyKCZ1cmwtPnB0aCxwKTsgIC8qIFBhdGggKi8KKwkJICAgICpwID0gTlVMOworICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CQkJLyogTm8gcG9ydCAqLworICAgICAg ICAgICAgICAgIC8qICcvJyBpcyBwYXJ0IG9mIHBhdGgsIGxlYXZlIGl0ICovCisgICAgICAgICAg ICAgICAgaWYgKCpwID09ICcvJykgeworCQkgICAgbWFrZXN0cigmdXJsLT5wdGgscCk7ICAvKiBQ YXRoICovCisJCSAgICAqcCA9IE5VTDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9 CisgICAgICAgIH0KKwkvKiBDb3B5IG5vbi1OVUxMIHJlc3VsdCBzdHJpbmdzICovCisJaWYgKHVy bC0+c3ZjKSBpZiAoKnVybC0+c3ZjKSB7CisgICAgICAgICAgICBwID0gdXJsLT5zdmM7CisgICAg ICAgICAgICB1cmwtPnN2YyA9IE5VTEw7CisgICAgICAgICAgICBtYWtlc3RyKCZ1cmwtPnN2Yyxw KTsKKyAgICAgICAgfQorCWlmICh1cmwtPmhvcykgaWYgKCp1cmwtPmhvcykgeworICAgICAgICAg ICAgcCA9IHVybC0+aG9zOworICAgICAgICAgICAgdXJsLT5ob3MgPSBOVUxMOworICAgICAgICAg ICAgbWFrZXN0cigmdXJsLT5ob3MscCk7CisgICAgICAgIH0KKwlpZiAodXJsLT5wb3IpIGlmICgq dXJsLT5wb3IpIHsKKyAgICAgICAgICAgIHAgPSB1cmwtPnBvcjsKKyAgICAgICAgICAgIHVybC0+ cG9yID0gTlVMTDsKKyAgICAgICAgICAgIG1ha2VzdHIoJnVybC0+cG9yLHApOworICAgICAgICB9 CisvKgorICBXQVJOSU5HIChXZWQgT2N0ICA5IDE2OjA5OjAzIDIwMDIpOiBXZSBub3cgYWxsb3cg dGhlIHVzZXJuYW1lIGFuZAorICBwYXNzd29yZCB0byBiZSBlbXB0eSBzdHJpbmdzLiAgVGhlc2Ug YXJlIHRyZWF0ZWQgZGlmZmVyZW50bHkgZnJvbSBudWxsCisgIHBvaW50ZXJzOiBhbiBlbXB0eSBz dHJpbmcgbWVhbnMgdGhlIFVSTCBpbmNsdWRlZCB1c2VybmFtZSBhbmQvb3IgcGFzc3dvcmQKKyAg ZmllbGRzIHRoYXQgd2VyZSBlbXB0eSwgZS5nLiBmdHA6Ly86QGZ0cC54eXpjb3JwLmNvbS9zb21l cGF0aC9zb21lZmlsZSwKKyAgd2hpY2ggY2F1c2VzIHRoZSBjbGllbnQgdG8gcHJvbXB0IGZvciB0 aGUgdXNlcm5hbWUgYW5kL29yIHBhc3N3b3JkLgorKi8KKwlpZiAodXJsLT51c3IpIC8qIGlmICgq dXJsLT51c3IpICovIHsKKyAgICAgICAgICAgIHAgPSB1cmwtPnVzcjsKKyAgICAgICAgICAgIHVy bC0+dXNyID0gTlVMTDsKKyAgICAgICAgICAgIG1ha2VzdHIoJnVybC0+dXNyLHApOworICAgICAg ICB9CisJaWYgKHVybC0+cHN3KSAvKiBpZiAoKnVybC0+cHN3KSAqLyB7CisgICAgICAgICAgICBw ID0gdXJsLT5wc3c7CisgICAgICAgICAgICB1cmwtPnBzdyA9IE5VTEw7CisgICAgICAgICAgICBt YWtlc3RyKCZ1cmwtPnBzdyxwKTsKKyAgICAgICAgfQorICAgICAgICAvKiBTYXZlIGEgY29weSBv ZiB0aGUgZnVsbCB1cmwgaWYgb25lIHdhcyBmb3VuZC4gKi8KKwlpZiAodXJsLT5zdmMpIAorCSAg bWFrZXN0cigmdXJsLT5zYXYscyk7CisgICAgICAgIGZyZWUodXJsYnVmKTsKKwlyZXR1cm4odXJs LT5zdmMgPyAxIDogMCk7CisgICAgfQorICAgIHJldHVybigwKTsKK30KKyNlbmRpZiAvKiBDS19V UkwgKi8KKworI2lmbmRlZiBOT0NNREwKKworY2hhciAqaGxwMVtdID0geworI2lmbmRlZiBOT0lD UAorIiBbZmlsZW5hbWVdIFsteCBhcmcgWy14IGFyZ10uLi5bLXl5eV0uLl0gWyA9IHRleHQgXSBd XG4iLAorI2Vsc2UKKyJbLXggYXJnIFsteCBhcmddLi4uWy15eXldLi5dXG4iLAorI2VuZGlmIC8q IE5PSUNQICovCisiXG4iLAorIiAgLXggaXMgYW4gb3B0aW9uIHJlcXVpcmluZyBhbiBhcmd1bWVu dCwgLXkgYW4gb3B0aW9uIHdpdGggbm8gYXJndW1lbnQuXG4iLAorIiAgSWYgdGhlIGZpcnN0IGNv bW1hbmQtbGluZSBhcmd1bWVudCBpcyB0aGUgbmFtZSBvZiBhIGZpbGUsIGludGVyYWN0aXZlLVxu IiwKKyIgIG1vZGUgY29tbWFuZHMgYXJlIGV4ZWN1dGVkIGZyb20gdGhlIGZpbGUuICBUaGUgJz0n IGFyZ3VtZW50IHRlbGxzIEtlcm1pdFxuIiwKKyIgIG5vdCB0byBwYXJzZSB0aGUgcmVtYWluZGVy IG9mIHRoZSBjb21tYW5kIGxpbmUsIGJ1dCB0byBtYWtlIHRoZSB3b3Jkc1xuIiwKKyIgIGZvbGxv d2luZyAnPScgYXZhaWxhYmxlIGFzIFxcJTEsIFxcJTIsIC4uLiBcXCU5LiAgVGhlIGNvbW1hbmQg ZmlsZSBcCisoaWYgYW55KVxuIiwKKyIgIGlzIGV4ZWN1dGVkIGJlZm9yZSB0aGUgY29tbWFuZC1s aW5lIG9wdGlvbnMuXG4iLAorIlxuIiwKKyNpZm5kZWYgTk9JQ1AKKyJJZiBubyBhY3Rpb24gY29t bWFuZCBpcyBpbmNsdWRlZCwgb3IgLVMgaXMsIHRoZW4gYWZ0ZXIgdGhlIGNvbW1hbmQgbGluZSBp c1xuIiwKKyJleGVjdXRlZCwgS2VybWl0IGlzc3VlcyBpdHMgcHJvbXB0IGFuZCB3YWl0cyBmb3Ig eW91IHRvIHR5cGUgY29tbWFuZHMuXG4iLAorI2Vsc2UKKyJPcGVyYXRpb24gYnkgY29tbWFuZC1s aW5lIG9wdGlvbnMgb25seS5cbiIsCisjZW5kaWYgLyogTk9JQ1AgKi8KKyIiCit9OworCitzdGF0 aWMKK2NoYXIgKmhscDJbXSA9IHsKKyIgIFtvcHRpb24tbGlzdF0gaG9zdFs6cG9ydF0gW3BvcnRd XG4iLAorIiAgVGhlIG9wdGlvbi1saXN0IGNvbnNpc3RzIG9mIHplcm8sIG9uZSwgb3IgbW9yZSBv ZjpcbiIsCisiICAtOCAgICAgICAgICAgICAgICBOZWdvdGlhdGUgVGVsbmV0IEJpbmFyeSBpbiBi b3RoIGRpcmVjdGlvbnNcbiIsCisiICAtYSAgICAgICAgICAgICAgICBSZXF1aXJlIHVzZSBvZiBU ZWxuZXQgYXV0aGVudGljYXRpb25cbiIsCisiICAtZCAgICAgICAgICAgICAgICBUdXJuIG9uIGRl YnVnIG1vZGVcbiIsCisiICAtRSAgICAgICAgICAgICAgICBObyBlc2NhcGUgY2hhcmFjdGVyXG4i LAorIiAgLUsgICAgICAgICAgICAgICAgUmVmdXNlIHVzZSBvZiBhdXRoZW50aWNhdGlvbjsgZG8g bm90IHNlbmQgdXNlcm5hbWVcbiIsCisiICAtbCB1c2VyICAgICAgICAgICBTZXQgdXNlcm5hbWUg YW5kIHJlcXVlc3QgVGVsbmV0IGF1dGhlbnRpY2F0aW9uXG4iLAorIiAgLUwgICAgICAgICAgICAg ICAgTmVnb3RpYXRlIFRlbG5ldCBCaW5hcnkgT3V0cHV0IG9ubHlcbiIsCisiICAteCAgICAgICAg ICAgICAgICBSZXF1aXJlIEVuY3J5cHRpb25cbiIsCisiICAtRCAgICAgICAgICAgICAgICBEaXNh YmxlIGZvcndhcmQtWFxuIiwKKyIgIC1UIGNlcnQ9ZmlsZSAgICAgIFVzZSBjZXJ0aWZpY2F0ZSBp biBmaWxlXG4iLAorIiAgLVQga2V5PWZpbGUgICAgICAgVXNlIHByaXZhdGUga2V5IGluIGZpbGVc biIsCisiICAtVCBjcmxmaWxlPWZpbGUgICBVc2UgQ1JMIGluIGZpbGVcbiIsCisiICAtVCBjcmxk aXI9ZGlyICAgICBVc2UgQ1JMcyBpbiBkaXJlY3RvcnlcbiIsCisiICAtVCBjaXBoZXI9c3RyaW5n ICBVc2Ugb25seSBjaXBoZXJzIGluIHN0cmluZ1xuIiwKKyIgIC1mICAgICAgICAgICAgICAgIEZv cndhcmQgY3JlZGVudGlhbHMgdG8gaG9zdFxuIiwKKyIgIC1rIHJlYWxtICAgICAgICAgIFNldCBk ZWZhdWx0IEtlcmJlcm9zIHJlYWxtXG4iLAorIiIKK307CisKK3N0YXRpYworY2hhciAqaGxwM1td ID0geyAgICAgICAgLyogcmxvZ2luICovCisiICBbb3B0aW9uLWxpc3RdIGhvc3RbOnBvcnRdIFtw b3J0XVxuIiwKKyIgIFRoZSBvcHRpb24tbGlzdCBjb25zaXN0cyBvZiB6ZXJvLCBvbmUsIG9yIG1v cmUgb2Y6XG4iLAorIiAgLWQgICAgICAgICAgICAgICAgVHVybiBvbiBkZWJ1ZyBtb2RlXG4iLAor IiAgLWwgdXNlciAgICAgICAgICAgU2V0IHVzZXJuYW1lXG4iLAorIiIKK307CisKK3N0YXRpYwor Y2hhciAqaGxwNFtdID0geyAgICAgICAgLyogc3NoICovCisiICBbb3B0aW9uLWxpc3RdIGhvc3Rb OnBvcnRdIFtwb3J0XVxuIiwKKyIgIFRoZSBvcHRpb24tbGlzdCBjb25zaXN0cyBvZiB6ZXJvLCBv bmUsIG9yIG1vcmUgb2Y6XG4iLAorI2lmZGVmIE9TMgorIiAgLSMgZmxhZ3MgICAgICAgICAgS2Vy bWl0IDk1IFN0YXJ0dXAgRmxhZ3NcbiIsCisiICAgICAgIDEgICAgICAgICAgICAgIHR1cm4gb2Zm IFdpbjk1IHNwZWNpYWwgZml4ZXNcbiIsCisiICAgICAgIDIgICAgICAgICAgICAgIGRvIG5vdCBs b2FkIG9wdGlvbmFsIG5ldHdvcmsgZGxsc1xuIiwKKyIgICAgICAgNCAgICAgICAgICAgICAgZG8g bm90IGxvYWQgb3B0aW9uYWwgdGFwaSBkbGxzXG4iLAorIiAgICAgICA4ICAgICAgICAgICAgICBk byBub3QgbG9hZCBvcHRpb25hbCBrZXJiZXJvcyBkbGxzXG4iLAorIiAgICAgIDE2ICAgICAgICAg ICAgICBkbyBub3QgbG9hZCBvcHRpb25hbCB6bW9kZW0gZGxsc1xuIiwKKyIgICAgICAzMiAgICAg ICAgICAgICAgdXNlIHN0ZGluIGZvciBpbnB1dCBpbnN0ZWFkIG9mIHRoZSBjb25zb2xlXG4iLAor IiAgICAgIDY0ICAgICAgICAgICAgICB1c2Ugc3Rkb3V0IGZvciBvdXRwdXQgaW5zdGVhZCBvZiB0 aGUgY29uc29sZVxuIiwKKyIgICAgIDEyOCAgICAgICAgICAgICAgZG8gbm90IHRlcm1pbmF0ZSBw cm9jZXNzIGluIHJlc3BvbnNlIHRvIFNlc3Npb24gTG9nb2ZmXG4iLAorI2VuZGlmIC8qIE9TMiAq LworIiAgLWQgICAgICAgICAgICAgICAgVHVybiBvbiBkZWJ1ZyBtb2RlXG4iLAorIiAgLVkgICAg ICAgICAgICAgICAgRGlzYWJsZSBpbml0IGZpbGUgcHJvY2Vzc2luZ1xuIiwKKyIgIC1sIHVzZXIg ICAgICAgICAgIFNldCB1c2VybmFtZVxuIiwKKyIiCit9OworCisvKiBDb21tYW5kLWxpbmUgb3B0 aW9uIGhlbHAgbGluZXMuICBVcGRhdGUgdGhpcyB3aGVuIGFkZGluZyBuZXcgb3B0aW9ucyEgKi8K KworY2hhciAqIG9wdGhscFsxMjhdOyAgICAgICAgICAgICAgICAgICAgIC8qIE9wdGlvbiBoZWxw ICovCitjaGFyICogYXJnaGxwWzEyOF07ICAgICAgICAgICAgICAgICAgICAgLyogQXJndW1lbnQg Zm9yIG9wdGlvbiAqLworaW50IG9wdGFjdFsxMjhdOyAgICAgICAgICAgICAgICAgICAgICAgIC8q IEFjdGlvbi1vcHRpb24gZmxhZyAqLworCitWT0lECitmYXRhbDIobXNnMSxtc2cyKSBjaGFyICpt c2cxLCAqbXNnMjsgeworICAgIGNoYXIgYnVmWzI1Nl07CisgICAgaWYgKCFtc2cxKSBtc2cxID0g IiI7CisgICAgaWYgKCFtc2cyKSBtc2cyID0gIiI7CisgICAgY2ttYWttc2coYnVmLDI1NiwiXCIi LG1zZzEsIlwiIC0gIixtc2cyKTsKKyNpZm5kZWYgTk9JQ1AKKyAgICBpZiAod2hhdCA9PSBXX0NP TU1BTkQpCisgICAgICBwcmludGYoIiVzXG4iLGJ1Zik7CisgICAgZWxzZQorI2VuZGlmIC8qIE5P SUNQICovCisgICAgICBmYXRhbCgoY2hhciAqKWJ1Zik7Cit9CisKK3N0YXRpYyBTSUdUWVAKKyNp ZmRlZiBDS19BTlNJCitjbF9pbnQoaW50IGR1bW15KQorI2Vsc2UgLyogQ0tfQU5TSSAqLworY2xf aW50KGR1bW15KSBpbnQgZHVtbXk7CisjZW5kaWYgLyogQ0tfQU5TSSAqLworewkJCQkJLyogQ29t bWFuZC1saW5lIGludGVycnVwdCBoYW5kbGVyICovCisgICAgZG9leGl0KEJBRF9FWElULDEpOwor ICAgIFNJR1JFVFVSTjsKK30KKworI2lmZGVmIE5FV0ZUUAorZXh0ZXJuIGludCBmdHBfYWN0aW9u LCBmdHBfY21kbGluOworCitzdGF0aWMgaW50Cit4eF9mdHAoaG9zdCwgcG9ydCkgY2hhciAqIGhv c3QsICogcG9ydDsgeworI2lmZGVmIENLX1VSTAorICAgIGV4dGVybiBpbnQgaGF2ZXVybDsKKyNl bmRpZiAvKiBDS19VUkwgKi8KKyAgICBleHRlcm4gY2hhciAqIGZ0cF9sb2duYW1lOworICAgIGlu dCB1c2VfdGxzID0gMDsKKyAgICBjaGFyICogcDsKKworICAgIGlmIChwb3J0KSBpZiAoISpwb3J0 KSBwb3J0ID0gTlVMTDsKKworICAgIGlmICghaG9zdCkKKyAgICAgIHJldHVybigwKTsKKyAgICBp ZiAoISpob3N0KQorICAgICAgcmV0dXJuKDApOworICAgIGRlYnVnKEYxMTEsImZ0cCB4eF9mdHAg aG9zdCIsZnRwX2hvc3QsaGF2ZWZ0cHVpZCk7CisgICAgZGVidWcoRjExMSwiZnRwIHh4X2Z0cCB1 aWRidWYgMSIsdWlkYnVmLGhhdmVmdHB1aWQpOworICAgIGZ0cF9jbWRsaW4gPSAxOwkJCS8qIDEg PSBGVFAgc3RhcnRlZCBmcm9tIGNvbW1hbmQgbGluZSAqLworICAgIGlmIChuZmlscyA+IDApCisg ICAgICBmdHBfY21kbGluKys7CQkJLyogMiA9IHNhbWUgcGx1cyBmaWxlIHRyYW5zZmVyICovCisK KyNpZm5kZWYgTk9VUkwKKyAgICAvKiBkZWJ1ZyhGMTExLCJmdHAgeHhfZnRwIGdfdXJsLnVzciIs Z191cmwudXNyLGdfdXJsLnVzcik7ICovCisgICAgaWYgKGhhdmV1cmwgJiYgZ191cmwudXNyKSB7 CQkvKiBXZWQgT2N0ICA5IDE1OjE1OjIyIDIwMDIgKi8KKwlpZiAoISooZ191cmwudXNyKSkgewkJ LyogRm9yY2UgdXNlcm5hbWUgcHJvbXB0IGlmICovCisJICAgIGhhdmVmdHB1aWQgPSAwOwkJLyog ImZ0cDovLzpAaG9zdCIgZ2l2ZW4uICovCisJICAgIHVpZGJ1ZlswXSA9IE5VTDsKKwkgICAgbWFr ZXN0cigmZnRwX2xvZ25hbWUsTlVMTCk7CisJfQkgIAorCWRlYnVnKEYxMTEsImZ0cCB4eF9mdHAg dWlkYnVmIDIiLHVpZGJ1ZixoYXZlZnRwdWlkKTsKKyAgICB9CisjZW5kaWYgLyogTk9VUkwgKi8K KyAgICBkZWJ1ZyhGMTExLCJmdHAgeHhfZnRwIHVpZGJ1ZiAzIix1aWRidWYsaGF2ZWZ0cHVpZCk7 CisgICAgaWYgKGhhdmVmdHB1aWQpIHsKKwltYWtlc3RyKCZmdHBfbG9nbmFtZSx1aWRidWYpOwor CWRlYnVnKEYxMTEsImZ0cF9sb2duYW1lIixmdHBfbG9nbmFtZSxoYXZlZnRwdWlkKTsKKyAgICB9 CisgICAgaWYgKCFwb3J0KSB7CisJaWYgKChwID0gY2tzdHJjaHIoZnRwX2hvc3QsJzonKSkpCisJ ICAqcCsrID0gTlVMOworCXBvcnQgPSBwOworICAgIH0KKyAgICBpZiAoIXBvcnQpIHsKKyNpZmRl ZiBDS19VUkwKKyAgICAgICAgaWYgKGhhdmV1cmwpIHsKKwkgICAgaWYgKGdfdXJsLnBvcikgCisJ ICAgICAgcG9ydCA9IGdfdXJsLnBvcjsKKyAgICAgICAgICAgIGVsc2UgaWYgKGdfdXJsLnN2YykK KwkgICAgICBwb3J0ID0gZ191cmwuc3ZjOworICAgICAgICAgICAgZWxzZSAKKwkgICAgICBwb3J0 ID0gImZ0cCI7CisgICAgICAgIH0gZWxzZQorI2VuZGlmIC8qIENLX1VSTCAqLworCSAgcG9ydCA9 ICJmdHAiOworICAgIH0KKworI2lmZGVmIENLX1NTTAorICAgIGlmIChoYXZldXJsICYmIGdfdXJs LnN2YykKKyAgICAgIHVzZV90bHMgPSAhY2tzdHJjbXAoImZ0cHMiLGdfdXJsLnN2YywtMSwwKTsK KyNlbmRpZiAvKiBDS19TU0wgKi8KKworICAgIGlmIChmdHBvcGVuKGZ0cF9ob3N0LHBvcnQsdXNl X3RscykgPCAxKQorICAgICAgcmV0dXJuKC0xKTsKKyAgICBkZWJ1ZyhGMTExLCJmdHAgeHhfZnRw IGFjdGlvbiIsY2tjdG9hKChjaGFyKWZ0cF9hY3Rpb24pLG5maWxzKTsKKyAgICBpZiAobmZpbHMg PiAwKSB7CisJc3dpdGNoIChmdHBfYWN0aW9uKSB7CisJICBjYXNlICdnJzoKKwkgICAgcmV0dXJu KGNtZGxpbmdldChzdGF5ZmxnKSk7CisJICBjYXNlICdwJzoKKwkgIGNhc2UgJ3MnOgorCSAgICBy ZXR1cm4oY21kbGlucHV0KHN0YXlmbGcpKTsKKwl9CisgICAgfQorICAgIHJldHVybigxKTsKK30K KyNlbmRpZiAvKiBORVdGVFAgKi8KKworCisjaWZuZGVmIE5PSFRUUAorc3RhdGljCitjaGFyICog aHR0cF9obHBbXSA9IHsKKyAgICAiIC1oICAgICAgICAgICAgIFRoaXMgbWVzc2FnZS5cbiIsCisg ICAgIiAtZCAgICAgICAgICAgICBEZWJ1ZyB0byBkZWJ1Zy5sb2cuXG4iLAorICAgICIgLVMgICAg ICAgICAgICAgU3RheSAoaXNzdWUgY29tbWFuZCBwcm9tcHQgd2hlbiBkb25lKS5cbiIsCisgICAg IiAtWSAgICAgICAgICAgICBEbyBub3QgZXhlY3V0ZSBLZXJtaXQgaW5pdGlhbGl6YXRpb24gZmls ZS5cbiIsCisgICAgIiAtcSAgICAgICAgICAgICBRdWlldCAoc3VwcHJlc3MgbW9zdCBtZXNzYWdl cykuXG4iLAorICAgICIgLXUgbmFtZSAgICAgICAgVXNlcm5hbWUuXG4iLAorICAgICIgLVAgcGFz c3dvcmQgICAgUGFzc3dvcmQuXG4iLAorICAgICIgLWcgcGF0aG5hbWUgICAgR2V0IHJlbW90ZSBw YXRobmFtZS5cbiIsCisgICAgIiAtcCBwYXRobmFtZSAgICBQdXQgcmVtb3RlIHBhdGhuYW1lLlxu IiwKKyAgICAiIC1IIHBhdGhuYW1lICAgIEhlYWQgcmVtb3RlIHBhdGhuYW1lLlxuIiwKKyAgICAi IC1sIHBhdGhuYW1lICAgIExvY2FsIHBhdGggZm9yIC1nLCAtcCwgYW5kIC1ILlxuIiwKKyNpZmRl ZiBDS19TU0wKKyAgICAiIC16IG9wdFs9dmFsdWVdIFNlY3VyaXR5IG9wdGlvbnMuLi5cbiIsCisg ICAgIiAgICBjZXJ0PWZpbGUgICBDbGllbnQgY2VydGlmaWNhdGUgZmlsZVxuIiwKKyAgICAiICAg IGNlcnRzb2sgICAgIEFjY2VwdCBhbGwgY2VydGlmaWNhdGVzXG4iLAorICAgICIgICAga2V5PWZp bGUgICAgQ2xpZW50IHByaXZhdGUga2V5IGZpbGVcbiIsCisgICAgIiAgICBzZWN1cmUgICAgICBV c2UgU1NMXG4iLAorICAgICIgICAgdmVyaWZ5PW4gICAgMCA9IG5vbmUsIDEgPSBwZWVyICwgMiA9 IGNlcnRpZmljYXRlIHJlcXVpcmVkXG4iLAorI2VuZGlmIC8qIENLX1NTTCAqLworICAgICIiCit9 OworCisjZGVmaW5lIEhUX0NFUlRGSSAwCisjZGVmaW5lIEhUX09LQ0VSVCAxCisjZGVmaW5lIEhU X0tFWSAgICAyCisjZGVmaW5lIEhUX1NFQ1VSRSAzCisjZGVmaW5lIEhUX1ZFUklGWSA0CisKK3N0 YXRpYyBzdHJ1Y3Qga2V5dGFiIGh0dHB6dGFiW10gPSB7CisgICAgeyAiY2VydCIsICAgIEhUX0NF UlRGSSwgQ01fQVJHIH0sCisgICAgeyAiY2VydHNvayIsIEhUX09LQ0VSVCwgMCB9LAorICAgIHsg ImtleSIsICAgICBIVF9LRVksICAgIENNX0FSRyB9LAorICAgIHsgInNlY3VyZSIsICBIVF9TRUNV UkUsIDAgfSwKKyAgICB7ICJ2ZXJpZnkiLCAgSFRfVkVSSUZZLCBDTV9BUkcgfSwKKyAgICB7ICIi LCAwLCAwIH0KK307CitzdGF0aWMgaW50IG5odHRwenRhYiA9IHNpemVvZihodHRwenRhYikgLyBz aXplb2Yoc3RydWN0IGtleXRhYikgLSAxOworI2VuZGlmIC8qIE5PSFRUUCAqLworCisvKiAgVSBT IEEgRyBFICovCisKK1ZPSUQKK3VzYWdlKCkgeworI2lmZGVmIE1JTklYCisgICAgY29ub2woIlVz YWdlOiAiKTsKKyAgICBjb25vbCh4YXJnMCk7CisgICAgY29ub2woIiBbLXggYXJnIFsteCBhcmdd Li4uWy15eXldLi5dIF1cbiIpOworI2Vsc2UKKyAgICBjb25vbCgiVXNhZ2U6ICIpOworICAgIGNv bm9sKHhhcmcwKTsKKyAgICBpZiAoaG93Y2FsbGVkID09IElfQU1fS0VSTUlUIHx8IGhvd2NhbGxl ZCA9PSBJX0FNX0lLU0QgfHwKKyAgICAgICAgaG93Y2FsbGVkID09IElfQU1fU1NIU1VCKQorICAg ICAgY29ub2xhKGhscDEpOworICAgIGVsc2UgaWYgKGhvd2NhbGxlZCA9PSBJX0FNX1RFTE5FVCkK KyAgICAgIGNvbm9sYShobHAyKTsKKyAgICBlbHNlIGlmIChob3djYWxsZWQgPT0gSV9BTV9STE9H SU4pCisgICAgICBjb25vbGEoaGxwMyk7CisgICAgZWxzZSBpZiAoaG93Y2FsbGVkID09IElfQU1f U1NIKQorICAgICAgY29ub2xhKGhscDQpOworICAgIGlmIChob3djYWxsZWQgPT0gSV9BTV9LRVJN SVQgfHwgaG93Y2FsbGVkID09IElfQU1fSUtTRCB8fAorICAgICAgICBob3djYWxsZWQgPT0gSV9B TV9TU0hTVUIpIHsKKwlpbnQgYzsKKwljb25vbGwoIiIpOworCWNvbm9sbCgiQ29tcGxldGUgbGlz dGluZyBvZiBjb21tYW5kLWxpbmUgb3B0aW9uczoiKTsKKwljb25vbGwoIiIpOworCWZvciAoYyA9 IDMxOyBjIDwgMTI4OyBjKyspIHsKKwkgICAgaWYgKCFvcHRobHBbY10pCisJICAgICAgY29udGlu dWU7CisJICAgIGlmIChhcmdobHBbY10pIHsKKwkJcHJpbnRmKCIgLSVjIDxhcmc+JXNcbiIsCisJ CSAgICAgICAoY2hhciljLAorCQkgICAgICAgKG9wdGFjdFtjXSA/ICIgKGFjdGlvbiBvcHRpb24p IiA6ICIiKQorCQkgICAgICAgKTsKKwkJcHJpbnRmKCIgICAgICVzXG4iLG9wdGhscFtjXSk7CisJ CXByaW50ZigiICAgICBBcmd1bWVudDogJXNcblxuIixhcmdobHBbY10pOworCSAgICB9IGVsc2Ug ewkJCS8qIE9wdGlvbiB3aXRob3V0IGFyZyAqLworCQlwcmludGYoIiAtJWMgICVzJXNcbiIsCisJ CSAgICAgICAoY2hhciljLCBvcHRobHBbY10sCisJCSAgICAgICAob3B0YWN0W2NdPyIgKGFjdGlv biBvcHRpb24pIjoiIikKKwkJICAgICAgICk7CisJCXByaW50ZigiICAgICBBcmd1bWVudDogKG5v bmUpXG5cbiIpOworCSAgICB9CisJfQorI2lmZGVmIE9TMk9SVU5JWAorCXByaW50ZigiVG8gcHJl dmVudCB0aGlzIG1lc3NhZ2UgZnJvbSBzY3JvbGxpbmcsIHVzZSAnJXMgLWggfCBtb3JlJy5cbiIs CisJICAgICAgIHhhcmcwKTsKKyNlbmRpZiAvKiBPUzJPUlVOSVggKi8KKwlwcmludGYoIkZvciBh IGxpc3Qgb2YgZXh0ZW5kZWQgb3B0aW9ucyB1c2UgJyVzIC0taGVscCcuXG4iLAorCSAgICAgICB4 YXJnMCk7CisgICAgfQorI2VuZGlmIC8qIE1JTklYICovCit9CisKKworLyogIEMgTSBEIEwgSSBO ICAtLSAgR2V0IGFyZ3VtZW50cyBmcm9tIGNvbW1hbmQgbGluZSAgKi8KKworaW50CitjbWRsaW4o KSB7CisgICAgY2hhciB4OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTG9jYWwgZ2Vu ZXJhbC1wdXJwb3NlIGNoYXIgKi8KKyAgICBleHRlcm4gaW50IGhhdmV1cmw7CisKKyNpZmRlZiBO RVdGVFAKKyAgICBjaGFyICogcG9ydCA9IE5VTEw7CisjZW5kaWYgLyogTkVXRlRQICovCisKKyNp Zm5kZWYgTk9YRkVSCisgICAgY21hcmcgPSAiIjsgICAgICAgICAgICAgICAgICAgICAgICAgLyog SW5pdGlhbGl6ZSBnbG9iYWxzICovCisgICAgY21hcmcyID0gIiI7CisjZW5kaWYgLyogTk9YRkVS ICovCisgICAgYWN0aW9uID0gMDsKKyAgICBjZmxnID0gMDsKKworICAgIHNpZ25hbChTSUdJTlQs Y2xfaW50KTsKKworLyogSGVyZSB3ZSBoYW5kbGUgZGlmZmVyZW50ICJDb21tYW5kIExpbmUgUGVy c29uYWxpdGllcyIgKi8KKworI2lmZGVmIFRDUFNPQ0tFVAorI2lmbmRlZiBOT0hUVFAKKyAgICBp ZiAoaG93Y2FsbGVkID09IElfQU1fSFRUUCkgeyAgICAgICAvKiBJZiBJIHdhcyBjYWxsZWQgYXMg SFRUUC4uLiAqLworCWNoYXIgcmRuc1sxMjhdOworI2lmZGVmIE9TMgorCWNoYXIgKiBhZ2VudCA9 ICJLZXJtaXQgOTUiOworI2Vsc2UgICAKKwljaGFyICogYWdlbnQgPSAiQy1LZXJtaXQiOworI2Vu ZGlmIC8qIE9TMiAqLworCisgICAgICAgIGRlYnVnKEYxMDAsImh0dHAgcGVyc29uYWxpdHkiLCIi LDApOworI2lmZGVmIENLX1VSTAorICAgICAgICBpZiAoaGF2ZXVybCkgeworICAgICAgICAgICAg aW50IHR5cGU7CisgICAgICAgICAgICBjaGFyICogbGZpbGU7CisKKwkgICAgdHlwZSA9IGxvb2t1 cCh1cmx0YWIsZ191cmwuc3ZjLG51cmx0YWIsTlVMTCk7CisgICAgICAgICAgICBpZiAoISh0eXBl ID09IFVSTF9IVFRQIHx8IHR5cGUgPT0gVVJMX0hUVFBTKSkgeworICAgICAgICAgICAgICAgIHBy aW50ZigiP0ludGVybmFsIEVycm9yOiBIVFRQIGNvbW1hbmQgbGluZSBwcm9jZXNzaW5nXG4iKTsK KyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJFcnJvcjogSFRUUCBjb21tYW5kIGxpbmUgcHJv Y2Vzc2luZyIsIiIsMCk7CisgICAgICAgICAgICAgICAgZG9leGl0KEJBRF9FWElULDEpOworICAg ICAgICAgICAgfQorICAgICAgICAgICAgcmRuc1swXSA9ICdcMCc7CisgICAgICAgICAgICBsZmls ZSA9ICIiOworICAgICAgICAgICAgeCA9IChodHRwX29wZW4oZ191cmwuaG9zLGdfdXJsLnBvciA/ IGdfdXJsLnBvciA6IGdfdXJsLnN2YywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBl ID09IFVSTF9IVFRQUywgcmRucywxMjgsTlVMTCkgPT0gMCk7CisgICAgICAgICAgICBpZiAoeCkg eworI2lmZGVmIEtVSQorCQljaGFyIGFzbmFtZVtDS01BWFBBVEgrMV07CisjZW5kaWYgLyogS1VJ ICovCisgICAgICAgICAgICAgICAgaWYgKCFxdWlldCkgeworICAgICAgICAgICAgICAgICAgICBp ZiAocmRuc1swXSkKKwkJICAgICAgcHJpbnRmKCJDb25uZWN0ZWQgdG8gJXMgWyVzXVxyXG4iLGdf dXJsLmhvcyxyZG5zKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorCQkgICAgICBwcmludGYo IkNvbm5lY3RlZCB0byAlc1xyXG4iLGdfdXJsLmhvcyk7CisgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICAgIGlmIChnX3VybC5wdGgpCisgICAgICAgICAgICAgICAgICB6c3RyaXAoZ191 cmwucHRoLCZsZmlsZSk7CisgICAgICAgICAgICAgICAgZWxzZQorCQkgIGdfdXJsLnB0aCA9ICIv IjsKKworICAgICAgICAgICAgICAgIGlmICghKmxmaWxlKQorICAgICAgICAgICAgICAgICAgbGZp bGUgPSAiaW5kZXguaHRtbCI7CisKKyNpZmRlZiBLVUkKKwkJaWYgKHVxX2ZpbGUoTlVMTCwJLyog Szk1IEdVSTogUHV0IHVwIGZpbGUgYm94LiAqLworCQkJICAgIE5VTEwsCS8qIChub3QgdGVzdGVk Li4uKSAqLworCQkJICAgIDQsCisJCQkgICAgTlVMTCwKKwkJCSAgICBsZmlsZSwKKwkJCSAgICBh c25hbWUsCisJCQkgICAgQ0tNQVhQQVRIKzEKKwkJCSAgICApID4gMCkKKwkJICBsZmlsZSA9IGFz bmFtZTsKKyNlbmRpZiAvKiBLVUkgKi8KKworICAgICAgICAgICAgICAgIHggPSBodHRwX2dldChh Z2VudCwKKwkJCSAgICAgTlVMTCwJLyogaGRybGlzdCAqLworCQkJICAgICBnX3VybC51c3IsCisJ CQkgICAgIGdfdXJsLnBzdywKKwkJCSAgICAgMCwKKwkJCSAgICAgbGZpbGUsCisJCQkgICAgIGdf dXJsLnB0aCwKKwkJCSAgICAgMAkJLyogc3RkaW8gKi8KKwkJCSAgICAgKTsKKyAgICAgICAgICAg ICAgICB4ID0gKGh0dHBfY2xvc2UoKSA9PSAwKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg ICAgICAgICAgICAgaWYgKCFxdWlldCkKKwkJICBwcmludGYoIj9IVFRQIENvbm5lY3Rpb24gZmFp bGVkLlxyXG4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRvZXhpdCh4ID8gR09PRF9F WElUIDogQkFEX0VYSVQsIC0xKTsKKyAgICAgICAgfSBlbHNlIAorI2VuZGlmIC8qIENLX1VSTCAq LworCSAgeworCSAgICAgIGludCBodHRwX2FjdGlvbiA9IDA7CisJICAgICAgY2hhciAqIGhvc3Qg PSBOVUxMLCAqIHN2YyA9IE5VTEwsICogbHBhdGggPSBOVUxMOworCSAgICAgIGNoYXIgKiB1c2Vy ID0gTlVMTCwgKiBwc3dkID0gTlVMTCwgKiBwYXRoID0gTlVMTDsKKwkgICAgICBjaGFyICogeHA7 CisKKwkgICAgICB3aGlsZSAoLS14YXJnYyA+IDApIHsJLyogR28gdGhyb3VnaCBjb21tYW5kIGxp bmUgd29yZHMgKi8KKwkJICB4YXJndisrOworCQkgIGRlYnVnKEYxMTEsImNtZGxpbiBodHRwIHhh cmd2IiwqeGFyZ3YseGFyZ2MpOworCQkgIHhwID0gKnhhcmd2KzE7CisJCSAgaWYgKCoqeGFyZ3Yg PT0gJy0nKSB7IC8qIEdvdCBhbiBvcHRpb24gKi8KKwkJICAgICAgaW50IHh4OworCQkgICAgICB4 ID0gKigqeGFyZ3YrMSk7CS8qIEdldCB0aGUgb3B0aW9uIGxldHRlciAqLworCQkgICAgICBzd2l0 Y2ggKHgpIHsKKwkJCWNhc2UgJ2QnOgkvKiBEZWJ1ZyAqLworI2lmZGVmIERFQlVHCisJCQkgIGlm IChkZWJsb2cpIHsKKwkJCSAgICAgIGRlYnRpbSA9IDE7CisJCQkgIH0gZWxzZSB7CisJCQkgICAg ICBkZWJsb2cgPSBkZWJvcG4oImRlYnVnLmxvZyIsMCk7CisJCQkgIH0KKyNlbmRpZiAvKiBERUJV RyAqLworCQkJICBicmVhazsKKwkJCWNhc2UgJ1MnOgkvKiBTdGF5ICovCisJCQljYXNlICdZJzoJ LyogTm8gaW5pdGlhbGl6YXRpb24gZmlsZSAqLworCQkJICBicmVhazsJLyogKGFscmVhZHkgZG9u ZSBpbiBwcmVzY2FuKSAqLworCQkJY2FzZSAncSc6CS8qIFF1aWV0ICovCisJCQkgIHF1aWV0ID0g MTsKKwkJCSAgYnJlYWs7CisJCQljYXNlICd1JzoJLyogT3B0aW9ucyB0aGF0IHJlcXVpcmUgYXJn dW1lbnRzICovCisJCQljYXNlICdQJzoKKwkJCWNhc2UgJ2cnOgorCQkJY2FzZSAncCc6CisJCQlj YXNlICdIJzoKKwkJCWNhc2UgJ2wnOgorCQkJICBpZiAoKih4cCsxKSkgeworCQkJICAgICAgWEZB VEFMKCJJbnZhbGlkIGFyZ3VtZW50IGJ1bmRsaW5nIik7CisJCQkgIH0KKwkJCSAgeGFyZ3YrKywg eGFyZ2MtLTsKKwkJCSAgaWYgKCh4YXJnYyA8IDEpIHx8ICgqKnhhcmd2ID09ICctJykpIHsKKwkJ CSAgICAgIFhGQVRBTCgiTWlzc2luZyBhcmd1bWVudCIpOworCQkJICB9CisJCQkgIHN3aXRjaCAo eCkgeworCQkJICAgIGNhc2UgJ3UnOgorCQkJICAgICAgdXNlciA9ICp4YXJndjsKKwkJCSAgICAg IGJyZWFrOworCQkJICAgIGNhc2UgJ1AnOgorCQkJICAgICAgcHN3ZCA9ICp4YXJndjsKKwkJCSAg ICAgIGJyZWFrOworCQkJICAgIGNhc2UgJ2wnOgorCQkJICAgICAgaWYgKGh0dHBfYWN0aW9uICE9 IEhUVFBfUFVUKQorCQkJCWxwYXRoID0gKnhhcmd2OworCQkJICAgICAgYnJlYWs7CisJCQkgICAg Y2FzZSAnZyc6CisJCQkgICAgICBodHRwX2FjdGlvbiA9IEhUVFBfR0VUOworCQkJICAgICAgcGF0 aCA9ICp4YXJndjsKKwkJCSAgICAgIGRlYnVnKEYxMTEsImNtZGxpbiBodHRwIEdFVCIscGF0aCxo dHRwX2FjdGlvbik7CisJCQkgICAgICBicmVhazsKKwkJCSAgICBjYXNlICdwJzoKKwkJCSAgICAg IGh0dHBfYWN0aW9uID0gSFRUUF9QVVQ7CisJCQkgICAgICBwYXRoID0gKnhhcmd2OworCQkJICAg ICAgYnJlYWs7CisJCQkgICAgY2FzZSAnSCc6CisJCQkgICAgICBodHRwX2FjdGlvbiA9IEhUVFBf SEVEOworCQkJICAgICAgcGF0aCA9ICp4YXJndjsKKwkJCSAgfQorCQkJICBicmVhazsKKworI2lm ZGVmIENLX1NTTAorICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAneic6IHsKKwkJCSAgICAv KiAqeGFyZ3YgY29udGFpbnMgYSB2YWx1ZSBvZiB0aGUgZm9ybSB0YWc9dmFsdWUgKi8KKwkJCSAg ICAvKiB3ZSBuZWVkIHRvIGxvb2t1cCB0aGUgdGFnIGFuZCBzYXZlIHRoZSB2YWx1ZSAgKi8KKwkJ CSAgICBpbnQgeCx5LHo7CisJCQkgICAgY2hhciAqIHAsICogcTsKKwkJCSAgICBtYWtlc3RyKCZw LCp4YXJndik7CisJCQkgICAgeSA9IGNraW5kZXgoIj0iLHAsMCwwLDEpOworCQkJICAgIGlmICh5 ID4gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBbeS0xXSA9ICdcMCc7CisJCQkg ICAgeCA9IGxvb2t1cChodHRwenRhYixwLG5odHRwenRhYiwmeik7CisJCQkgICAgaWYgKHggPCAw KSB7CisJCQkJcHJpbnRmKCI/SW52YWxpZCBzZWN1cml0eSBvcHRpb246IFwiJXNcIlxuIixwKTsK KwkJCSAgICB9IGVsc2UgeworCQkJCXByaW50ZigiU2VjdXJpdHkgb3B0aW9uOiBcIiVzIixwKTsK KwkJCQlpZiAoaHR0cHp0YWJbel0uZmxncyAmIENNX0FSRykgeworCQkJCSAgICBxID0gJnBbeV07 CisJCQkJICAgIGlmICghKnEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGZhdGFsKCI/TWlzc2luZyByZXF1aXJlZCB2YWx1ZSIpOworCQkJCX0KKwkJCQkvKiAteiBvcHRp b25zIHcvYXJncyAqLworCQkJCXN3aXRjaCAoaHR0cHp0YWJbel0ua3d2YWwpIHsKKwkJCQkgIGNh c2UgSFRfQ0VSVEZJOgorCQkJCSAgICBtYWtlc3RyKCZzc2xfcnNhX2NlcnRfZmlsZSxxKTsKKwkJ CQkgICAgYnJlYWs7CisJCQkJICBjYXNlIEhUX09LQ0VSVDoKKwkJCQkgICAgc3NsX2NlcnRzb2tf ZmxhZyA9IDE7CisJCQkJICAgIGJyZWFrOworCQkJCSAgY2FzZSBIVF9LRVk6CisJCQkJICAgIG1h a2VzdHIoJnNzbF9yc2Ffa2V5X2ZpbGUscSk7CisJCQkJICAgIGJyZWFrOworCQkJCSAgY2FzZSBI VF9TRUNVUkU6CisJCQkJICAgIHN2Yz0iaHR0cHMiOworCQkJCSAgICBicmVhazsKKwkJCQkgIGNh c2UgSFRfVkVSSUZZOgorCQkJCSAgICBpZiAoIXJkaWdpdHMocSkpCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiP0JhZCBudW1iZXI6ICVzXG4iLHEpOworCQkJ CSAgICBzc2xfdmVyaWZ5X2ZsYWcgPSBhdG9pKHEpOworCQkJCSAgICBicmVhazsKKwkJCQl9CisJ CQkgICAgfQorCQkJICAgIGZyZWUocCk7CisJCQkgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg ICAgICAgICB9CisjZW5kaWYgLyogQ0tfU1NMICovCisKKwkJCWNhc2UgJ2gnOgkvKiBIZWxwICov CisJCQlkZWZhdWx0OgorCQkJICBwcmludGYoIlVzYWdlOiAlcyBob3N0IFsgb3B0aW9ucy4uLiBd XG4iLHhhcmcwKTsKKwkJCSAgY29ub2xhKGh0dHBfaGxwKTsKKwkJCSAgZG9leGl0KEdPT0RfRVhJ VCwtMSk7CisJCSAgICAgIH0KKwkJICB9IGVsc2UgewkJLyogTm8gZGFzaCAtIG11c3QgYmUgaG9z dG5hbWUgKi8KKwkJICAgICAgaG9zdCA9ICp4YXJndjsKKwkJICAgICAgaWYgKHhhcmdjID4gMSkg eworCQkJICBzdmMgPSAqKHhhcmd2KzEpOworCQkJICBpZiAoc3ZjKSBpZiAoKnN2YyA9PSAnLScg fHwgISpzdmMpCisJCQkgICAgc3ZjID0gTlVMTDsKKwkJCSAgaWYgKHN2YykgeworCQkJICAgICAg eGFyZ3YrKzsKKwkJCSAgICAgIHhhcmdjLS07CisJCQkgIH0KKwkJICAgICAgfQorCQkgIH0KKwkg ICAgICB9CisJICAgICAgaWYgKCFzdmMpIHN2YyA9ICIiOworCSAgICAgIGlmICghKnN2Yykgc3Zj ID0gImh0dHAiOworCSAgICAgIGlmICghaG9zdCkgWEZBVEFMKCJObyBodHRwIGhvc3QgZ2l2ZW4i KTsKKworCSAgICAgIC8qIENoZWNrIGFjdGlvbiBhcmdzIGJlZm9yZSBvcGVuaW5nIHRoZSBjb25u ZWN0aW9uICovCisJICAgICAgaWYgKGh0dHBfYWN0aW9uKSB7CisJCSAgaWYgKGh0dHBfYWN0aW9u ID09IEhUVFBfUFVUKSB7CisJCSAgICAgIGlmICghbHBhdGgpCisJCQlYRkFUQUwoIk5vIGxvY2Fs IHBhdGggZm9yIGh0dHAgUFVUIik7CisJCSAgfQorCQkgIGlmICghcGF0aCkKKwkJICAgIFhGQVRB TCgiTm8gcmVtb3RlIHBhdGggZm9yIGh0dHAgYWN0aW9uIik7CisJICAgICAgfQorCSAgICAgIC8q IE5vdyBpdCdzIE9LIHRvIG9wZW4gdGhlIGNvbm5lY3Rpb24gKi8KKwkgICAgICByZG5zWzBdID0g TlVMOworCSAgICAgIHggPSAoaHR0cF9vcGVuKGhvc3QsCisJCQkgICAgIHN2YywhY2tzdHJjbXAo Imh0dHBzIixzdmMsLTEsMCkscmRucywxMjgsTlVMTAorCQkJICAgICApID09IDApOworCSAgICAg IGlmICgheCkgeworCQkgIGlmICghcXVpZXQpCisJCSAgICBwcmludGYoIj9IVFRQIENvbm5lY3Rp b24gZmFpbGVkLlxyXG4iKTsKKwkJICBkb2V4aXQoQkFEX0VYSVQsLTEpOworCSAgICAgIH0KKwkg ICAgICBpZiAoIXF1aWV0KSB7CisJCSAgaWYgKHJkbnNbMF0pCisJCSAgICBwcmludGYoIkNvbm5l Y3RlZCB0byAlcyBbJXNdXHJcbiIsaG9zdCxyZG5zKTsKKwkJICBlbHNlCisJCSAgICBwcmludGYo IkNvbm5lY3RlZCB0byAlc1xyXG4iLGhvc3QpOworCSAgICAgIH0KKwkgICAgICBpZiAoaHR0cF9h Y3Rpb24pIHsKKyAgICAgICAgICAgICAgICAgIGludCBwY3B5ID0gMDsKKwkJICBpZiAoaHR0cF9h Y3Rpb24gIT0gSFRUUF9QVVQpIHsgLyogU3VwcGx5IGRlZmF1bHQgKi8KKwkJICAgICAgaWYgKCFs cGF0aCkgewkJIC8qIGxvY2FsIHBhdGguLi4gKi8KKwkJCSAgenN0cmlwKHBhdGgsJmxwYXRoKTsK KwkJCSAgaWYgKCFscGF0aCkKKwkJCSAgICBscGF0aCA9ICIiOworCQkJICBpZiAoISpscGF0aCkK KwkJCSAgICBscGF0aCA9ICJpbmRleC5odG1sIjsKKwkJICAgICAgfQorCQkgIH0KKyAgICAgICAg ICAgICAgICAgIGlmICgqcGF0aCAhPSAnLycpIHsKKyAgICAgICAgICAgICAgICAgICAgICBjaGFy ICogcCA9IChjaGFyICopIG1hbGxvYyhzdHJsZW4ocGF0aCkrMik7CisgICAgICAgICAgICAgICAg ICAgICAgaWYgKCFwKSBmYXRhbCgiP01lbW9yeSBhbGxvY2F0aW9uIGVycm9yXG4iKTsKKyAgICAg ICAgICAgICAgICAgICAgICAqcCA9ICcvJzsKKyAgICAgICAgICAgICAgICAgICAgICBzdHJjcHko JnBbMV0scGF0aCk7ICAgICAgLyogc2FmZSAqLworICAgICAgICAgICAgICAgICAgICAgIHBhdGgg PSBwOworICAgICAgICAgICAgICAgICAgICAgIHBjcHkgPSAxOworICAgICAgICAgICAgICAgICAg fQorCQkgIHN3aXRjaCAoaHR0cF9hY3Rpb24pIHsKKwkJICAgIGNhc2UgSFRUUF9HRVQ6CisJCSAg ICAgIHggPSBodHRwX2dldChhZ2VudCxOVUxMLHVzZXIscHN3ZCwwLGxwYXRoLHBhdGgsMCk7CisJ CSAgICAgIGJyZWFrOworCQkgICAgICAKKwkJICAgIGNhc2UgSFRUUF9QVVQ6CisJCSAgICAgIHgg PSBodHRwX3B1dChhZ2VudCxOVUxMLCJ0ZXh0L0hUTUwiLAorCQkJCSAgIHVzZXIscHN3ZCwwLGxw YXRoLHBhdGgsTlVMTCwwKTsKKwkJICAgICAgYnJlYWs7CisKKwkJICAgIGNhc2UgSFRUUF9IRUQ6 CisJCSAgICAgIHggPSBodHRwX2hlYWQoYWdlbnQsTlVMTCx1c2VyLHBzd2QsMCxscGF0aCxwYXRo LDApOworCQkgICAgICBicmVhazsKKwkJICB9CisJCSAgZGVidWcoRjEwMSwiY21kbGluZSBodHRw IHJlc3VsdCIsIiIseCk7CisgICAgICAgICAgICAgICAgICB4ID0gKGh0dHBfY2xvc2UoKSA9PSAw KTsKKyAgICAgICAgICAgICAgICAgIGlmIChwY3B5KSBmcmVlKHBhdGgpOworICAgICAgICAgICAg ICAgICAgZG9leGl0KHggPyBHT09EX0VYSVQgOiBCQURfRVhJVCwgLTEpOworCSAgICAgIH0KKwkg ICAgICByZXR1cm4oMCk7CisJICB9CisgICAgfSBlbHNlCisjZW5kaWYgLyogTk9IVFRQICovCisj aWZkZWYgTkVXRlRQCisgICAgICBpZiAoaG93Y2FsbGVkID09IElfQU1fRlRQKSB7CS8qIElmIEkg d2FzIGNhbGxlZCBhcyBGVFAuLi4gKi8KKwkgIGRlYnVnKEYxMDAsImZ0cCBwZXJzb25hbGl0eSIs IiIsMCk7CisjaWZkZWYgQ0tfVVJMCisJICBpZiAoaGF2ZXVybCkKKyAgICAgICAgICAgIGRvZnRw YXJnKCdVJyk7CisJICBlbHNlIAorI2VuZGlmIC8qIENLX1VSTCAqLworCSAgICB7CisJCXdoaWxl ICgtLXhhcmdjID4gMCkgewkvKiBHbyB0aHJvdWdoIGNvbW1hbmQgbGluZSB3b3JkcyAqLworCQkg ICAgeGFyZ3YrKzsKKwkJICAgIGRlYnVnKEYxMTEsImNtZGxpbiBmdHAgeGFyZ3YiLCp4YXJndix4 YXJnYyk7CisJCSAgICBpZiAoKip4YXJndiA9PSAnLScpIHsgLyogR290IGFuIG9wdGlvbiAqLwor CQkJaW50IHh4OworCQkJeCA9ICooKnhhcmd2KzEpOyAvKiBHZXQgdGhlIG9wdGlvbiBsZXR0ZXIg Ki8KKwkJCXh4ID0gZG9mdHBhcmcoeCk7CisJCQlpZiAoeHggPCAwKSB7CisJCQkgICAgaWYgKHdo YXQgPT0gV19DT01NQU5EKQorCQkJICAgICAgcmV0dXJuKDApOworCQkJICAgIGVsc2UKKwkJCSAg ICAgIGRvZXhpdChCQURfRVhJVCwxKTsKKwkJCX0KKwkJICAgIH0gZWxzZSB7CQkvKiBObyBkYXNo IC0gbXVzdCBiZSBob3N0bmFtZSAqLworCQkJbWFrZXN0cigmZnRwX2hvc3QsKnhhcmd2KTsKKwkJ CWlmICh4YXJnYyA+IDEpIHsKKwkJCSAgICBwb3J0ID0gKih4YXJndisxKTsKKwkJCSAgICBpZiAo cG9ydCkgaWYgKCpwb3J0ID09ICctJyB8fCAhKnBvcnQpCisJCQkgICAgICBwb3J0ID0gTlVMTDsK KwkJCSAgICBpZiAocG9ydCkgeworCQkJCXhhcmd2Kys7CisJCQkJeGFyZ2MtLTsKKwkJCSAgICB9 CisJCQl9CisJCQlkZWJ1ZyhGMTEwLCJjbWRsaW4gZnRwIGhvc3QiLGZ0cF9ob3N0LDApOworCQkJ ZGVidWcoRjExMCwiY21kbGluIGZ0cCBwb3J0Iixwb3J0LDApOworCQkgICAgfQorCQl9IC8qIHdo aWxlICovCisJICAgIH0gLyogaWYgKGhhdmV1cmwpICovCisKKwkgIGlmIChmdHBfaG9zdCkgewor CSAgICAgIGludCB4eDsKKyNpZmRlZiBOT0RJQUwKKwkgICAgICB4eCA9IHh4X2Z0cChmdHBfaG9z dCxwb3J0KTsKKwkgICAgICBpZiAoeHggPCAwICYmIChoYXZldXJsIHx8IGZ0cF9jbWRsaW4gPiAx KSkgZG9leGl0KEJBRF9FWElULC0xKTsKKyNlbHNlCisjaWZkZWYgTk9JQ1AKKwkgICAgICB4eCA9 IHh4X2Z0cChmdHBfaG9zdCxwb3J0KTsKKwkgICAgICBpZiAoeHggPCAwICYmIChoYXZldXJsIHx8 IGZ0cF9jbWRsaW4gPiAxKSkgZG9leGl0KEJBRF9FWElULC0xKTsKKyNlbHNlCisJICAgICAgaWYg KCpmdHBfaG9zdCA9PSAnPScpIHsJLyogU2tpcCBkaXJlY3RvcnkgbG9va3VwICovCisJCSAgeHgg PSB4eF9mdHAoJmZ0cF9ob3N0WzFdLHBvcnQpOworCQkgIGlmICh4eCA8IDAgJiYgKGhhdmV1cmwg fHwgZnRwX2NtZGxpbiA+IDEpKQorCQkgICAgZG9leGl0KEJBRF9FWElULC0xKTsKKwkgICAgICB9 IGVsc2UgewkJCS8qIFdhbnQgbG9va3VwICovCisJCSAgaW50IGk7CisJCSAgbmhjb3VudCA9IDA7 CQkvKiBDaGVjayBuZXR3b3JrIGRpcmVjdG9yeSAqLworCQkgIGRlYnVnKEYxMDEsImNtZGxpbiBu bmV0ZGlyIiwiIixubmV0ZGlyKTsKKwkJICBpZiAobm5ldGRpciA+IDApCS8qIElmIHRoZXJlIGlz IGEgZGlyZWN0b3J5Li4uICovCisJCSAgICBsdW5ldChmdHBfaG9zdCk7CS8qIExvb2sgdXAgdGhl IG5hbWUgKi8KKwkJICBlbHNlCQkJLyogSWYgbm8gZGlyZWN0b3J5ICovCisJCSAgICBuaGNvdW50 ID0gMDsJLyogd2UgZGlkbid0IGZpbmQgYW55dGhpbmcgdGhlcmUgKi8KKyNpZmRlZiBERUJVRwor CQkgIGlmIChkZWJsb2cpIHsKKwkJICAgICAgZGVidWcoRjEwMSwiY21kbGluIGx1bmV0IG5oY291 bnQiLCIiLG5oY291bnQpOworCQkgICAgICBpZiAobmhjb3VudCA+IDApIHsKKwkJCSAgZGVidWco RjExMCwiY21kbGluIGx1bmV0IG5oX3BbMF0iLG5oX3BbMF0sMCk7CisJCQkgIGRlYnVnKEYxMTAs ImNtZGxpbiBsdW5ldCBuaF9wMlswXSIsbmhfcDJbMF0sMCk7CisJCQkgIGRlYnVnKEYxMTAsImNt ZGxpbiBsdW5ldCBuaF9weFswXVswXSIsCisJCQkJbmhfcHhbMF1bMF0sMCk7CisJCSAgICAgIH0K KwkJICB9CisjZW5kaWYgLyogREVCVUcgKi8KKwkJICBpZiAobmhjb3VudCA9PSAwKSB7CisJCSAg ICAgIHh4ID0geHhfZnRwKGZ0cF9ob3N0LHBvcnQpOworCQkgICAgICBpZiAoeHggPCAwICYmICho YXZldXJsIHx8IGZ0cF9jbWRsaW4gPiAxKSkKKwkJCWRvZXhpdChCQURfRVhJVCwtMSk7CisJCSAg fSBlbHNlIHsKKwkJICAgICAgZm9yIChpID0gMDsgaSA8IG5oY291bnQ7IGkrKykgeworCQkJICBp ZiAoY2tzdHJjbXAobmhfcDJbaV0sInRjcC9pcCIsNiwwKSkKKwkJCSAgICBjb250aW51ZTsKKwkJ CSAgbWFrZXN0cigmZnRwX2hvc3QsbmhfcFtpXSk7CisJCQkgIGRlYnVnKEYxMTAsImNtZGxpbiBj YWxsaW5nIHh4X2Z0cCIsZnRwX2hvc3QsMCk7CisJCQkgIGlmICghcXVpZXQpCisJCQkgICAgcHJp bnRmKCJUcnlpbmcgJXMuLi5cbiIsZnRwX2hvc3QpOworCQkJICBpZiAoeHhfZnRwKGZ0cF9ob3N0 LHBvcnQpID4gLTEpCisJCQkgICAgYnJlYWs7CisJCSAgICAgIH0KKwkJICB9CisJICAgICAgfQor I2VuZGlmIC8qIE5PRElBTCAqLworI2VuZGlmIC8qIE5PSUNQICovCisJICAgICAgaWYgKCFmdHBp c2Nvbm5lY3RlZCgpKQorCQlkb2V4aXQoQkFEX0VYSVQsLTEpOworCSAgfQorCSAgcmV0dXJuKDAp OworICAgICAgfQorI2VuZGlmIC8qIE5FV0ZUUCAqLworCisjaWZkZWYgVE5DT0RFCisgICAgaWYg KGhvd2NhbGxlZCA9PSBJX0FNX1RFTE5FVCkgeyAgICAgLyogSWYgSSB3YXMgY2FsbGVkIGFzIFRl bG5ldC4uLiAqLworCisgICAgICAgIHdoaWxlICgtLXhhcmdjID4gMCkgewkJLyogR28gdGhyb3Vn aCBjb21tYW5kIGxpbmUgd29yZHMgKi8KKyAgICAgICAgICAgIHhhcmd2Kys7CisgICAgICAgICAg ICBkZWJ1ZyhGMTExLCJjbWRsaW4gdGVsbmV0IHhhcmd2IiwqeGFyZ3YseGFyZ2MpOworICAgICAg ICAgICAgaWYgKCoqeGFyZ3YgPT0gJz0nKQorCSAgICAgIHJldHVybigwKTsKKyAgICAgICAgICAg IGlmICghc3RyY21wKCp4YXJndiwiLS0iKSkJLyogZ2V0b3B0KCkgY29uZm9ybWFuY2UgKi8KKwkg ICAgICByZXR1cm4oMCk7CisjaWZkZWYgVk1TCisgICAgICAgICAgICBlbHNlIGlmICgqKnhhcmd2 ID09ICcvJykKKwkgICAgICBjb250aW51ZTsKKyNlbmRpZiAvKiBWTVMgKi8KKyAgICAgICAgICAg IGVsc2UgaWYgKCoqeGFyZ3YgPT0gJy0nKSB7CS8qIEdvdCBhbiBvcHRpb24gKGJlZ2lucyB3aXRo IGRhc2gpICovCisgICAgICAgICAgICAgICAgaW50IHh4OworICAgICAgICAgICAgICAgIHggPSAq KCp4YXJndisxKTsJLyogR2V0IHRoZSBvcHRpb24gbGV0dGVyICovCisgICAgICAgICAgICAgICAg ZGVidWcoRjExMSwiY21kbGluIHRlbG5ldCBhcmdzIDEiLCp4YXJndix4YXJnYyk7CisgICAgICAg ICAgICAgICAgeHggPSBkb3RuYXJnKHgpOworICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsImNt ZGxpbiB0ZWxuZXQgZG9hcmciLCIiLHh4KTsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJj bWRsaW4gdGVsbmV0IGFyZ3MgMiIsKnhhcmd2LHhhcmdjKTsKKyAgICAgICAgICAgICAgICBpZiAo eHggPCAwKSB7CisjaWZuZGVmIE5PSUNQCisgICAgICAgICAgICAgICAgICAgIGlmICh3aGF0ID09 IFdfQ09NTUFORCkKKwkJICAgICAgcmV0dXJuKDApOworICAgICAgICAgICAgICAgICAgICBlbHNl CisjZW5kaWYgLyogTk9JQ1AgKi8KKwkJICAgICAgeworI2lmZGVmIE9TMgorCQkJICBzbGVlcCgx KTsJLyogR2l2ZSBpdCBhIGNoYW5jZS4uLiAqLworI2VuZGlmIC8qIE9TMiAqLworCQkJICBkb2V4 aXQoQkFEX0VYSVQsMSk7IC8qIEdvIGhhbmRsZSBvcHRpb24gKi8KKwkJICAgICAgfQorICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CQkJLyogTm8gZGFzaCBtdXN0IGJlIGhv c3RuYW1lICovCisgICAgICAgICAgICAgICAgY2tzdHJuY3B5KHR0bmFtZSwqeGFyZ3YsVFROQU1M RU4rMSk7CisgICAgICAgICAgICAgICAgZGVidWcoRjExMCwiY21kbGluIHRlbG5ldCBob3N0Iix0 dG5hbWUsMCk7CisKKyNpZm5kZWYgTk9JQ1AKKyNpZm5kZWYgTk9ESUFMCisgICAgICAgICAgICAg ICAgbmhjb3VudCA9IDA7CQkvKiBDaGVjayBuZXR3b3JrIGRpcmVjdG9yeSAqLworICAgICAgICAg ICAgICAgIGRlYnVnKEYxMDEsImNtZGxpbiB0ZWxuZXQgbm5ldGRpciIsIiIsbm5ldGRpcik7Cisg ICAgICAgICAgICAgICAgaWYgKG5uZXRkaXIgPiAwKQkvKiBJZiB0aGVyZSBpcyBhIGRpcmVjdG9y eS4uLiAqLworCQkgIGx1bmV0KCp4YXJndik7CS8qIExvb2sgdXAgdGhlIG5hbWUgKi8KKyAgICAg ICAgICAgICAgICBlbHNlCQkJLyogSWYgbm8gZGlyZWN0b3J5ICovCisJCSAgbmhjb3VudCA9IDA7 CQkvKiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZyB0aGVyZSAqLworI2lmZGVmIERFQlVHCisgICAg ICAgICAgICAgICAgaWYgKGRlYmxvZykgeworICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAx LCJjbWRsaW4gdGVsbmV0IGx1bmV0IG5oY291bnQiLCIiLG5oY291bnQpOworICAgICAgICAgICAg ICAgICAgICBpZiAobmhjb3VudCA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVn KEYxMTAsImNtZGxpbiB0ZWxuZXQgbHVuZXQgbmhfcFswXSIsbmhfcFswXSwwKTsKKyAgICAgICAg ICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsImNtZGxpbiB0ZWxuZXQgbHVuZXQgbmhfcDJbMF0i LG5oX3AyWzBdLDApOworICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoRjExMCwiY21kbGlu IHRlbG5ldCBsdW5ldCBuaF9weFswXVswXSIsCisJCQkgICAgICBuaF9weFswXVswXSwwKTsKKyAg ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBERUJVRyAq LworICAgICAgICAgICAgICAgIGlmIChuaGNvdW50ID4gMCAmJiBuaF9wMlswXSkgLyogSWYgbmV0 d29yayB0eXBlIHNwZWNpZmllZCAqLworCQkgIGlmIChja3N0cmNtcChuaF9wMlswXSwidGNwL2lw Iiw2LDApKSAvKiBpdCBtdXN0IGJlIFRDUC9JUCAqLworCQkgICAgbmhjb3VudCA9IDA7CisgICAg ICAgICAgICAgICAgaWYgKG5oY291bnQgPT0gMSkgewkvKiBTdGlsbCBPSywgc28gbWFrZSBzdWJz dGl0dXRpb24gKi8KKyAgICAgICAgICAgICAgICAgICAgY2tzdHJuY3B5KHR0bmFtZSxuaF9wWzBd LFRUTkFNTEVOKzEpOworICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJjbWRsaW4gdGVs bmV0IGx1bmV0IHN1YnN0aXR1dGlvbiIsdHRuYW1lLDApOworICAgICAgICAgICAgICAgIH0KKyNl bmRpZiAvKiBOT0RJQUwgKi8KKyNlbmRpZiAvKiBOT0lDUCAqLworCisgICAgICAgICAgICAgICAg aWYgKC0teGFyZ2MgPiAwICYmICFoYXZldXJsKSB7IC8qIFNlcnZpY2UgZnJvbSBjb21tYW5kIGxp bmU/ICovCisgICAgICAgICAgICAgICAgICAgIHhhcmd2Kys7CisgICAgICAgICAgICAgICAgICAg IGNrc3RybmNhdCh0dG5hbWUsIjoiLFRUTkFNTEVOKzEpOworICAgICAgICAgICAgICAgICAgICBj a3N0cm5jYXQodHRuYW1lLCp4YXJndixUVE5BTUxFTisxKTsKKyAgICAgICAgICAgICAgICAgICAg ZGVidWcoRjExMCwiY21kbGluIHRlbG5ldCBob3N0MiIsdHRuYW1lLDApOworICAgICAgICAgICAg ICAgIH0KKyNpZm5kZWYgTk9JQ1AKKyNpZm5kZWYgTk9ESUFMCisgICAgICAgICAgICAgICAgZWxz ZSBpZiAobmhjb3VudCkgewkvKiBObyAtIGhvdyBhYm91dCBpbiBuZXQgZGlyZWN0b3J5PyAqLwor ICAgICAgICAgICAgICAgICAgICBpZiAobmhfcHhbMF1bMF0pIHsKKyAgICAgICAgICAgICAgICAg ICAgICAgIGNrc3RybmNhdCh0dG5hbWUsIjoiLFRUTkFNTEVOKzEpOworICAgICAgICAgICAgICAg ICAgICAgICAgY2tzdHJuY2F0KHR0bmFtZSxuaF9weFswXVswXSxUVE5BTUxFTisxKTsKKyAgICAg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBOT0RJQUwgKi8K KyNlbmRpZiAvKiBOT0lDUCAqLworICAgICAgICAgICAgICAgIGxvY2FsID0gMTsJCS8qIFRyeSB0 byBvcGVuIHRoZSBjb25uZWN0aW9uICovCisgICAgICAgICAgICAgICAgbmV0dHlwZSA9IE5FVF9U Q1BCOworICAgICAgICAgICAgICAgIG1kbXR5cCA9IC1uZXR0eXBlOworICAgICAgICAgICAgICAg IGlmICh0dG9wZW4odHRuYW1lLCZsb2NhbCxtZG10eXAsMCkgPCAwKSB7CisgICAgICAgICAgICAg ICAgICAgIFhGQVRBTCgiY2FuJ3Qgb3BlbiBob3N0IGNvbm5lY3Rpb24iKTsKKyAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgICAgbmV0d29yayA9IDE7CQkvKiBJdCdzIG9wZW4gKi8KKyNp ZmRlZiBDS0xPR0RJQUwKKyAgICAgICAgICAgICAgICBkb2xvZ25ldCgpOworI2VuZGlmIC8qIENL TE9HRElBTCAqLworI2lmbmRlZiBOT1hGRVIKKyAgICAgICAgICAgICAgICByZWxpYWJsZSA9IDE7 CQkvKiBJdCdzIHJlbGlhYmxlICovCisgICAgICAgICAgICAgICAgeHJlbGlhYmxlID0gMTsJCS8q IC4uLiAqLworICAgICAgICAgICAgICAgIHNldHJlbGlhYmxlID0gMTsKKyNlbmRpZiAvKiBOT1hG RVIgKi8KKyAgICAgICAgICAgICAgICBjZmxnID0gMTsJCS8qIENvbm5lY3QgKi8KKyAgICAgICAg ICAgICAgICBzdGF5ZmxnID0gMTsJCS8qIFN0YXkgKi8KKyAgICAgICAgICAgICAgICB0bl9leGl0 ID0gMTsJCS8qIFRlbG5ldC1saWtlIGV4aXQgY29uZGl0aW9uICovCisgICAgICAgICAgICAgICAg cXVpZXQgPSAxOworICAgICAgICAgICAgICAgIGV4aXRvbmNsb3NlID0gMTsJLyogRXhpdCB3aGVu IGNvbm5lY3Rpb24gY2xvc2VzICovCisjaWZuZGVmIE5PU1BMCisgICAgICAgICAgICAgICAgaWYg KGxvY2FsKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChubWFjKSB7CQkvKiBBbnkgbWFjcm9z IGRlZmluZWQ/ICovCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgazsJCS8qIFllcyAqLwor ICAgICAgICAgICAgICAgICAgICAgICAgayA9IG1sb29rKG1hY3RhYiwib25fb3BlbiIsbm1hYyk7 IC8qIExvb2sgdGhpcyB1cCAqLworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGsgPj0gMCkg eyAgICAgICAgICAgICAgICAgICAgIC8qIElmIGZvdW5kLCAqLworICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGlmIChkb2RvKGssdHRuYW1lLDApID4gLTEpICAgIC8qIHNldCBpdCB1cCwgKi8K KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VyKDEpOyAgICAgICAgICAgICAg ICAvKiBhbmQgZXhlY3V0ZSBpdCAqLworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorI2VuZGlmIC8qIE5PU1BMICovCisg ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg cmV0dXJuKDApOworICAgIH0KKyNlbmRpZiAvKiBUTkNPREUgKi8KKyNpZmRlZiBSTE9HQ09ERQor ICAgIGVsc2UgaWYgKGhvd2NhbGxlZCA9PSBJX0FNX1JMT0dJTikgeyAvKiBJZiBJIHdhcyBjYWxs ZWQgYXMgUmxvZ2luLi4uICovCisgICAgICAgIHdoaWxlICgtLXhhcmdjID4gMCkgewkJLyogR28g dGhyb3VnaCBjb21tYW5kIGxpbmUgd29yZHMgKi8KKyAgICAgICAgICAgIHhhcmd2Kys7CisgICAg ICAgICAgICBkZWJ1ZyhGMTExLCJjbWRsaW4gcmxvZ2luIHhhcmd2IiwqeGFyZ3YseGFyZ2MpOwor ICAgICAgICAgICAgaWYgKCoqeGFyZ3YgPT0gJz0nKQorCSAgICAgIHJldHVybigwKTsKKyAgICAg ICAgICAgIGlmICghc3RyY21wKCp4YXJndiwiLS0iKSkJLyogZ2V0b3B0KCkgY29uZm9ybWFuY2Ug Ki8KKwkgICAgICByZXR1cm4oMCk7CisjaWZkZWYgVk1TCisgICAgICAgICAgICBlbHNlIGlmICgq Knhhcmd2ID09ICcvJykKKwkgICAgICBjb250aW51ZTsKKyNlbmRpZiAvKiBWTVMgKi8KKyAgICAg ICAgICAgIGVsc2UgaWYgKCoqeGFyZ3YgPT0gJy0nKSB7CS8qIEdvdCBhbiBvcHRpb24gKGJlZ2lu cyB3aXRoIGRhc2gpICovCisgICAgICAgICAgICAgICAgaW50IHh4OworICAgICAgICAgICAgICAg IHggPSAqKCp4YXJndisxKTsJLyogR2V0IHRoZSBvcHRpb24gbGV0dGVyICovCisgICAgICAgICAg ICAgICAgZGVidWcoRjExMSwiY21kbGluIHJsb2dpbiBhcmdzIDEiLCp4YXJndix4YXJnYyk7Cisg ICAgICAgICAgICAgICAgeHggPSBkb3JsZ2FyZyh4KTsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhG MTAxLCJjbWRsaW4gcmxvZ2luIGRvYXJnIiwiIix4eCk7CisgICAgICAgICAgICAgICAgZGVidWco RjExMSwiY21kbGluIHJsb2dpbiBhcmdzIDIiLCp4YXJndix4YXJnYyk7CisgICAgICAgICAgICAg ICAgaWYgKHh4IDwgMCkgeworI2lmbmRlZiBOT0lDUAorICAgICAgICAgICAgICAgICAgICBpZiAo d2hhdCA9PSBXX0NPTU1BTkQpCisJCSAgICAgIHJldHVybigwKTsKKyAgICAgICAgICAgICAgICAg ICAgZWxzZQorI2VuZGlmIC8qIE5PSUNQICovCisJCSAgICAgIHsKKyNpZmRlZiBPUzIKKwkJCSAg c2xlZXAoMSk7CS8qIEdpdmUgaXQgYSBjaGFuY2UuLi4gKi8KKyNlbmRpZiAvKiBPUzIgKi8KKwkJ CSAgZG9leGl0KEJBRF9FWElULDEpOyAvKiBHbyBoYW5kbGUgb3B0aW9uICovCisJCSAgICAgIH0K KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgewkJCS8qIE5vIGRhc2ggbXVz dCBiZSBob3N0bmFtZSAqLworICAgICAgICAgICAgICAgIGNrc3RybmNweSh0dG5hbWUsKnhhcmd2 LFRUTkFNTEVOKzEpOworICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsImNtZGxpbiBybG9naW4g aG9zdCIsdHRuYW1lLDApOworCisjaWZuZGVmIE5PSUNQCisjaWZuZGVmIE5PRElBTAorICAgICAg ICAgICAgICAgIG5oY291bnQgPSAwOwkJLyogQ2hlY2sgbmV0d29yayBkaXJlY3RvcnkgKi8KKyAg ICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJjbWRsaW4gcmxvZ2luIG5uZXRkaXIiLCIiLG5uZXRk aXIpOworICAgICAgICAgICAgICAgIGlmIChubmV0ZGlyID4gMCkJLyogSWYgdGhlcmUgaXMgYSBk aXJlY3RvcnkuLi4gKi8KKwkJICBsdW5ldCgqeGFyZ3YpOwkvKiBMb29rIHVwIHRoZSBuYW1lICov CisgICAgICAgICAgICAgICAgZWxzZQkJCS8qIElmIG5vIGRpcmVjdG9yeSAqLworCQkgIG5oY291 bnQgPSAwOwkJLyogd2UgZGlkbid0IGZpbmQgYW55dGhpbmcgdGhlcmUgKi8KKyNpZmRlZiBERUJV RworICAgICAgICAgICAgICAgIGlmIChkZWJsb2cpIHsKKyAgICAgICAgICAgICAgICAgICAgZGVi dWcoRjEwMSwiY21kbGluIHJsb2dpbiBsdW5ldCBuaGNvdW50IiwiIixuaGNvdW50KTsKKyAgICAg ICAgICAgICAgICAgICAgaWYgKG5oY291bnQgPiAwKSB7CisgICAgICAgICAgICAgICAgICAgICAg ICBkZWJ1ZyhGMTEwLCJjbWRsaW4gcmxvZ2luIGx1bmV0IG5oX3BbMF0iLG5oX3BbMF0sMCk7Cisg ICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJjbWRsaW4gcmxvZ2luIGx1bmV0IG5o X3AyWzBdIixuaF9wMlswXSwwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAs ImNtZGxpbiBybG9naW4gbHVuZXQgbmhfcHhbMF1bMF0iLAorCQkJICAgICAgbmhfcHhbMF1bMF0s MCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisjZW5kaWYgLyog REVCVUcgKi8KKyAgICAgICAgICAgICAgICBpZiAobmhjb3VudCA+IDAgJiYgbmhfcDJbMF0pIC8q IElmIG5ldHdvcmsgdHlwZSBzcGVjaWZpZWQgKi8KKwkJICBpZiAoY2tzdHJjbXAobmhfcDJbMF0s InRjcC9pcCIsNiwwKSkgLyogaXQgbXVzdCBiZSBUQ1AvSVAgKi8KKwkJICAgIG5oY291bnQgPSAw OworICAgICAgICAgICAgICAgIGlmIChuaGNvdW50ID09IDEpIHsJLyogU3RpbGwgT0ssIHNvIG1h a2Ugc3Vic3RpdHV0aW9uICovCisgICAgICAgICAgICAgICAgICAgIGNrc3RybmNweSh0dG5hbWUs bmhfcFswXSxUVE5BTUxFTisxKTsKKyAgICAgICAgICAgICAgICAgICAgZGVidWcoRjExMCwiY21k bGluIHJsb2dpbiBsdW5ldCBzdWJzdGl0dXRpb24iLHR0bmFtZSwwKTsKKyAgICAgICAgICAgICAg ICB9CisjZW5kaWYgLyogTk9ESUFMICovCisjZW5kaWYgLyogTk9JQ1AgKi8KKworICAgICAgICAg ICAgICAgIGlmICghaGF2ZXVybCkgeyAvKiBTZXJ2aWNlIGZyb20gY29tbWFuZCBsaW5lPyAqLwor ICAgICAgICAgICAgICAgICAgICBja3N0cm5jYXQodHRuYW1lLCI6bG9naW4iLFRUTkFNTEVOKzEp OworICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJjbWRsaW4gcmxvZ2luIGhvc3QyIix0 dG5hbWUsMCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGxvY2FsID0gMTsJ CS8qIFRyeSB0byBvcGVuIHRoZSBjb25uZWN0aW9uICovCisgICAgICAgICAgICAgICAgbmV0dHlw ZSA9IE5FVF9UQ1BCOworICAgICAgICAgICAgICAgIG1kbXR5cCA9IC1uZXR0eXBlOworICAgICAg ICAgICAgICAgIGlmICh0dG9wZW4odHRuYW1lLCZsb2NhbCxtZG10eXAsMCkgPCAwKSB7CisgICAg ICAgICAgICAgICAgICAgIFhGQVRBTCgiY2FuJ3Qgb3BlbiBob3N0IGNvbm5lY3Rpb24iKTsKKyAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbmV0d29yayA9IDE7CQkvKiBJdCdzIG9w ZW4gKi8KKyNpZmRlZiBDS0xPR0RJQUwKKyAgICAgICAgICAgICAgICBkb2xvZ25ldCgpOworI2Vu ZGlmIC8qIENLTE9HRElBTCAqLworI2lmbmRlZiBOT1hGRVIKKyAgICAgICAgICAgICAgICByZWxp YWJsZSA9IDE7CQkvKiBJdCdzIHJlbGlhYmxlICovCisgICAgICAgICAgICAgICAgeHJlbGlhYmxl ID0gMTsJCS8qIC4uLiAqLworICAgICAgICAgICAgICAgIHNldHJlbGlhYmxlID0gMTsKKyNlbmRp ZiAvKiBOT1hGRVIgKi8KKyAgICAgICAgICAgICAgICBjZmxnID0gMTsJCS8qIENvbm5lY3QgKi8K KyAgICAgICAgICAgICAgICBzdGF5ZmxnID0gMTsJCS8qIFN0YXkgKi8KKyAgICAgICAgICAgICAg ICB0bl9leGl0ID0gMTsJCS8qIFRlbG5ldC1saWtlIGV4aXQgY29uZGl0aW9uICovCisgICAgICAg ICAgICAgICAgcXVpZXQgPSAxOworICAgICAgICAgICAgICAgIGV4aXRvbmNsb3NlID0gMTsJLyog RXhpdCB3aGVuIGNvbm5lY3Rpb24gY2xvc2VzICovCisjaWZuZGVmIE5PU1BMCisgICAgICAgICAg ICAgICAgaWYgKGxvY2FsKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChubWFjKSB7CQkvKiBB bnkgbWFjcm9zIGRlZmluZWQ/ICovCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgazsJCS8q IFllcyAqLworICAgICAgICAgICAgICAgICAgICAgICAgayA9IG1sb29rKG1hY3RhYiwib25fb3Bl biIsbm1hYyk7IC8qIExvb2sgdGhpcyB1cCAqLworICAgICAgICAgICAgICAgICAgICAgICAgaWYg KGsgPj0gMCkgeyAgICAgICAgICAgICAgICAgICAgIC8qIElmIGZvdW5kLCAqLworICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGlmIChkb2RvKGssdHRuYW1lLDApID4gLTEpICAgIC8qIHNldCBp dCB1cCwgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VyKDEpOyAgICAg ICAgICAgICAgICAvKiBhbmQgZXhlY3V0ZSBpdCAqLworICAgICAgICAgICAgICAgICAgICAgICAg fQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorI2VuZGlmIC8qIE5P U1BMICovCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0K KyAgICAgICAgcmV0dXJuKDApOworICAgIH0KKyNlbmRpZiAvKiBSTE9HQ09ERSAqLworI2VuZGlm IC8qIFRDUFNPQ0tFVCAqLworCisjaWZkZWYgU1NIQlVJTFRJTgorICAgICAgaWYgKGhvd2NhbGxl ZCA9PSBJX0FNX1NTSCkgewkvKiBJZiBJIHdhcyBjYWxsZWQgYXMgU1NILi4uICovCisgICAgICAg ICAgZXh0ZXJuIGNoYXIgKiBzc2hfaHN0LCAqIHNzaF9jbWQsICogc3NoX3BydDsKKwkgIGRlYnVn KEYxMDAsInNzaCBwZXJzb25hbGl0eSIsIiIsMCk7CisjaWZkZWYgQ0tfVVJMCisJICBpZiAoaGF2 ZXVybCkgeworICAgICAgICAgICAgICBtYWtlc3RyKCZzc2hfaHN0LGdfdXJsLmhvcyk7CisgICAg ICAgICAgICAgIG1ha2VzdHIoJnNzaF9wcnQsZ191cmwuc3ZjKTsKKwkgICAgICBja3N0cm5jcHko dHRuYW1lLHNzaF9oc3QsVFROQU1MRU4rMSk7CisgICAgICAgICAgICAgIGNrc3RybmNhdCh0dG5h bWUsIjoiLFRUTkFNTEVOKzEpOworICAgICAgICAgICAgICBja3N0cm5jYXQodHRuYW1lLHNzaF9w cnQsVFROQU1MRU4rMSk7CisgICAgICAgICAgfQorCSAgZWxzZSAKKyNlbmRpZiAvKiBDS19VUkwg Ki8KKwkgIHsKKyAgICAgICAgICAgICAgd2hpbGUgKC0teGFyZ2MgPiAwKSB7CS8qIEdvIHRocm91 Z2ggY29tbWFuZCBsaW5lIHdvcmRzICovCisgICAgICAgICAgICAgICAgICB4YXJndisrOworICAg ICAgICAgICAgICAgICAgZGVidWcoRjExMSwiY21kbGluIHNzaCB4YXJndiIsKnhhcmd2LHhhcmdj KTsKKyAgICAgICAgICAgICAgICAgIGlmICgqKnhhcmd2ID09ICc9JykKKyAgICAgICAgICAgICAg ICAgICAgICByZXR1cm4oMCk7CisgICAgICAgICAgICAgICAgICBpZiAoIXN0cmNtcCgqeGFyZ3Ys Ii0tIikpIC8qIGdldG9wdCgpIGNvbmZvcm1hbmNlICovCisgICAgICAgICAgICAgICAgICAgICAg cmV0dXJuKDApOworI2lmZGVmIFZNUworICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKip4YXJn diA9PSAnLycpCisgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisjZW5kaWYgLyogVk1T ICovCisJCSAgLyogR290IGFuIG9wdGlvbiAoYmVnaW5zIHdpdGggZGFzaCkgKi8KKyAgICAgICAg ICAgICAgICAgIGVsc2UgaWYgKCoqeGFyZ3YgPT0gJy0nKSB7CisgICAgICAgICAgICAgICAgICAg ICAgaW50IHh4OworICAgICAgICAgICAgICAgICAgICAgIHggPSAqKCp4YXJndisxKTsJLyogR2V0 IHRoZSBvcHRpb24gbGV0dGVyICovCisgICAgICAgICAgICAgICAgICAgICAgZGVidWcoRjExMSwi Y21kbGluIGFyZ3MgMSIsKnhhcmd2LHhhcmdjKTsKKyAgICAgICAgICAgICAgICAgICAgICB4eCA9 IGRvc3NoYXJnKHgpOworICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsImNtZGxpbiBk b2FyZyIsIiIseHgpOworICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsImNtZGxpbiBh cmdzIDIiLCp4YXJndix4YXJnYyk7CisgICAgICAgICAgICAgICAgICAgICAgaWYgKHh4IDwgMCkg eworI2lmbmRlZiBOT0lDUAorICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAod2hhdCA9PSBX X0NPTU1BTkQpCisJCQkgICAgcmV0dXJuKDApOworICAgICAgICAgICAgICAgICAgICAgICAgICBl bHNlCisjZW5kaWYgLyogTk9JQ1AgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgeworI2lm ZGVmIE9TMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xlZXAoMSk7CS8qIEdpdmUg aXQgYSBjaGFuY2UuLi4gKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGRvZXhpdChCQURfRVhJVCwxKTsgLyogR28gaGFuZGxlIG9wdGlvbiAqLworICAg ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICAgICAgfSBlbHNlIHsJCQkvKiBObyBkYXNoIG11c3QgYmUgaG9zdG5hbWUgKi8KKyAg ICAgICAgICAgICAgICAgICAgICBja3N0cm5jcHkodHRuYW1lLCp4YXJndixUVE5BTUxFTisxKTsK KyAgICAgICAgICAgICAgICAgICAgICBtYWtlc3RyKCZzc2hfaHN0LHR0bmFtZSk7CisgICAgICAg ICAgICAgICAgICAgICAgZGVidWcoRjExMCwiY21kbGluIHNzaCBob3N0Iix0dG5hbWUsMCk7Cisj aWZuZGVmIE5PSUNQCisjaWZuZGVmIE5PRElBTAorICAgICAgICAgICAgICAgICAgICAgIG5oY291 bnQgPSAwOwkJLyogQ2hlY2sgbmV0d29yayBkaXJlY3RvcnkgKi8KKyAgICAgICAgICAgICAgICAg ICAgICBkZWJ1ZyhGMTAxLCJjbWRsaW4gbm5ldGRpciIsIiIsbm5ldGRpcik7CisgICAgICAgICAg ICAgICAgICAgICAgaWYgKG5uZXRkaXIgPiAwKQkvKiBJZiB0aGVyZSBpcyBhIGRpcmVjdG9yeS4u LiAqLworCQkJbHVuZXQoKnhhcmd2KTsJLyogTG9vayB1cCB0aGUgbmFtZSAqLworICAgICAgICAg ICAgICAgICAgICAgIGVsc2UJCS8qIElmIG5vIGRpcmVjdG9yeSAqLworCQkJbmhjb3VudCA9IDA7 CS8qIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nIHRoZXJlICovCisjaWZkZWYgREVCVUcKKyAgICAg ICAgICAgICAgICAgICAgICBpZiAoZGVibG9nKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg IGRlYnVnKEYxMDEsImNtZGxpbiBsdW5ldCBuaGNvdW50IiwiIixuaGNvdW50KTsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgaWYgKG5oY291bnQgPiAwKSB7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBkZWJ1ZyhGMTEwLCJjbWRsaW4gbHVuZXQgbmhfcFswXSIsbmhfcFswXSwwKTsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsImNtZGxpbiBsdW5ldCBu aF9wMlswXSIsbmhfcDJbMF0sMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1 ZyhGMTEwLAorCQkJCSAgICAiY21kbGluIGx1bmV0IG5oX3B4WzBdWzBdIixuaF9weFswXVswXSww KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgIH0K KyNlbmRpZiAvKiBERUJVRyAqLworCQkgICAgICAvKiBJZiBuZXR3b3JrIHR5cGUgc3BlY2lmaWVk ICovCisJCSAgICAgIC8qIGl0IG11c3QgYmUgVENQL0lQICovCisgICAgICAgICAgICAgICAgICAg ICAgaWYgKG5oY291bnQgPiAwICYmIG5oX3AyWzBdKQorCQkJaWYgKGNrc3RyY21wKG5oX3AyWzBd LCJ0Y3AvaXAiLDYsMCkpCisJCQkgIG5oY291bnQgPSAwOworICAgICAgICAgICAgICAgICAgICAg IGlmIChuaGNvdW50ID09IDEpIHsgLyogU3RpbGwgT0ssIHNvIG1ha2Ugc3Vic3RpdHV0aW9uICov CisgICAgICAgICAgICAgICAgICAgICAgICAgIGNrc3RybmNweSh0dG5hbWUsbmhfcFswXSxUVE5B TUxFTisxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZXN0cigmc3NoX2hzdCx0dG5h bWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJjbWRsaW4gbHVuZXQg c3Vic3RpdHV0aW9uIix0dG5hbWUsMCk7CisgICAgICAgICAgICAgICAgICAgICAgfQorI2VuZGlm IC8qIE5PRElBTCAqLworI2VuZGlmIC8qIE5PSUNQICovCisJCSAgICAgIC8qIFNlcnZpY2UgZnJv bSBjb21tYW5kIGxpbmU/ICovCisgICAgICAgICAgICAgICAgICAgICAgaWYgKC0teGFyZ2MgPiAw ICYmICFoYXZldXJsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgIHhhcmd2Kys7CisgICAg ICAgICAgICAgICAgICAgICAgICAgIGNrc3RybmNhdCh0dG5hbWUsIjoiLFRUTkFNTEVOKzEpOwor ICAgICAgICAgICAgICAgICAgICAgICAgICBja3N0cm5jYXQodHRuYW1lLCp4YXJndixUVE5BTUxF TisxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZXN0cigmc3NoX3BydCwqeGFyZ3Yp OworICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJjbWRsaW4gdGVsbmV0IGhv c3QyIix0dG5hbWUsMCk7CisgICAgICAgICAgICAgICAgICAgICAgfQorI2lmZGVmIENPTU1FTlQK KyAgICAgICAgICAgICAgICAgICAgICAvKiBEbyBub3Qgc3Vic3RpdHV0ZSBuZXQgZGlyIHNlcnZp Y2UgZm9yIHNzaCBwb3J0ICovCisjaWZuZGVmIE5PSUNQCisjaWZuZGVmIE5PRElBTAorCQkgICAg ICAvKiBObyAtIGhvdyBhYm91dCBpbiBuZXQgZGlyZWN0b3J5PyAqLworICAgICAgICAgICAgICAg ICAgICAgIGVsc2UgaWYgKG5oY291bnQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg KG5oX3B4WzBdWzBdKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBja3N0cm5jYXQo dHRuYW1lLCI6IixUVE5BTUxFTisxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNr c3RybmNhdCh0dG5hbWUsbmhfcHhbMF1bMF0sVFROQU1MRU4rMSk7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBtYWtlc3RyKCZzc2hfcHJ0LG5oX3B4WzBdWzBdKTsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgIH0KKworI2VuZGlmIC8qIE5P RElBTCAqLworI2VuZGlmIC8qIE5PSUNQICovCisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAg ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg ICB9CisgICAgICAgICAgfQorICAgICAgICAgIGxvY2FsID0gMTsJCQkvKiBUcnkgdG8gb3BlbiB0 aGUgY29ubmVjdGlvbiAqLworICAgICAgICAgIG5ldHR5cGUgPSBORVRfU1NIOworICAgICAgICAg IG1kbXR5cCA9IC1uZXR0eXBlOworICAgICAgICAgIGlmICh0dG9wZW4odHRuYW1lLCZsb2NhbCxt ZG10eXAsMCkgPCAwKSB7CisgICAgICAgICAgICAgIFhGQVRBTCgiY2FuJ3Qgb3BlbiBob3N0IGNv bm5lY3Rpb24iKTsKKyAgICAgICAgICB9CisgICAgICAgICAgbmV0d29yayA9IDE7CQkJLyogSXQn cyBvcGVuICovCisjaWZkZWYgQ0tMT0dESUFMCisgICAgICAgICAgZG9sb2duZXQoKTsKKyNlbmRp ZiAvKiBDS0xPR0RJQUwgKi8KKyNpZm5kZWYgTk9YRkVSCisgICAgICAgICAgcmVsaWFibGUgPSAx OwkJCS8qIEl0J3MgcmVsaWFibGUgKi8KKyAgICAgICAgICB4cmVsaWFibGUgPSAxOwkJLyogLi4u ICovCisgICAgICAgICAgc2V0cmVsaWFibGUgPSAxOworI2VuZGlmIC8qIE5PWEZFUiAqLworICAg ICAgICAgIGNmbGcgPSAxOwkJCS8qIENvbm5lY3QgKi8KKyAgICAgICAgICBzdGF5ZmxnID0gMTsJ CQkvKiBTdGF5ICovCisgICAgICAgICAgdG5fZXhpdCA9IDE7CQkJLyogVGVsbmV0LWxpa2UgZXhp dCBjb25kaXRpb24gKi8KKyAgICAgICAgICBxdWlldCA9IDE7CisgICAgICAgICAgZXhpdG9uY2xv c2UgPSAxOwkJLyogRXhpdCB3aGVuIGNvbm5lY3Rpb24gY2xvc2VzICovCisjaWZuZGVmIE5PU1BM CisgICAgICAgICAgaWYgKGxvY2FsKSB7CisgICAgICAgICAgICAgIGlmIChubWFjKSB7CQkvKiBB bnkgbWFjcm9zIGRlZmluZWQ/ICovCisgICAgICAgICAgICAgICAgICBpbnQgazsJCS8qIFllcyAq LworICAgICAgICAgICAgICAgICAgayA9IG1sb29rKG1hY3RhYiwib25fb3BlbiIsbm1hYyk7IC8q IExvb2sgdGhpcyB1cCAqLworICAgICAgICAgICAgICAgICAgaWYgKGsgPj0gMCkgeyAgICAgICAg ICAgICAgICAgICAgIC8qIElmIGZvdW5kLCAqLworICAgICAgICAgICAgICAgICAgICAgIGlmIChk b2RvKGssdHRuYW1lLDApID4gLTEpICAgIC8qIHNldCBpdCB1cCwgKi8KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgcGFyc2VyKDEpOyAgICAgICAgICAgICAgICAvKiBhbmQgZXhlY3V0ZSBpdCAq LworICAgICAgICAgICAgICAgICAgfSAKKyAgICAgICAgICAgICAgfSAgICAgCisgICAgICAgICAg fQorI2VuZGlmIC8qIE5PU1BMICovCisJICByZXR1cm4oMCk7CisgICAgICB9CisjZW5kaWYgLyog U1NIQlVJTFRJTiAqLworCisgICAgaWYgKGhvd2NhbGxlZCA9PSBJX0FNX1NTSFNVQikKKyAgICAg IHJldHVybigwKTsKKworLyoKKyAgRnJvbSBoZXJlIGRvd246IFdlIHdlcmUgY2FsbGVkIGFzICJr ZXJtaXQiIG9yICJpa3NkIi4KKworICBJZiB3ZSB3ZXJlIHN0YXJ0ZWQgZGlyZWN0bHkgZnJvbSBh IEtlcm1pdCBzY3JpcHQgZmlsZSwKKyAgdGhlIGZpbGVuYW1lIG9mIHRoZSBzY3JpcHQgaXMgaW4g YXJndlsxXSwgc28gc2tpcCBwYXN0IGl0LgorKi8KKyAgICBpZiAoeGFyZ2MgPiAxKSB7CisgICAg ICAgIGludCBuID0gMTsKKyAgICAgICAgaWYgKCp4YXJndlsxXSAhPSAnLScpIHsKKworI2lmZGVm IEtFUkJBTkcKKyAgICAgICAgICAgIC8qIElmIHdlIHdlcmUgc3RhcnRlZCB3aXRoIGEgS2VyYmFu ZyBzY3JpcHQsIHRoZSBzY3JpcHQgKi8KKyAgICAgICAgICAgIC8qIGFyZ3VtZW50cyB3ZXJlIGFs cmVhZHkgcGlja2VkIHVwIGluIHByZXNjYW4gLyBjbWRpbmkoKSAqLworICAgICAgICAgICAgLyog YW5kIHRoZXJlIGlzIG5vdGhpbmcgaGVyZSBmb3IgdXMgYW55d2F5LiAqLworICAgICAgICAgICAg aWYgKCFzdHJjbXAoeGFyZ3ZbMV0sIisiKSkKKyAgICAgICAgICAgICAgcmV0dXJuKDApOworI2Vu ZGlmIC8qIEtFUkJBTkcgKi8KKworICAgICAgICAgICAgaWYgKGNmaWxlZikgeyAgICAgICAgICAg ICAgIC8qIENvbW1hbmQgZmlsZSBmb3VuZCBpbiBwcmVzY2FuKCkgKi8KKyAgICAgICAgICAgICAg ICB4YXJnYyAtPSBuOyAgICAgICAgICAgICAvKiBTa2lwIHBhc3QgaXQgKi8KKyAgICAgICAgICAg ICAgICB4YXJndiArPSBuOworICAgICAgICAgICAgICAgIGNmaWxlZiA9IDA7CisgICAgICAgICAg ICAgICAgZGVidWcoRjEwMSwiY21kbGluIGNmaWxlZiBzZXQgdG8gMCIsIiIsY2ZpbGVmKTsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKy8qCisgIFJlZ3VsYXIgVW5peC1zdHlsZSBj b21tYW5kIGxpbmUgcGFyc2VyLCBtb3N0bHkgY29uZm9ybWluZyB3aXRoICdBIFByb3Bvc2VkCisg IENvbW1hbmQgU3ludGF4IFN0YW5kYXJkIGZvciBVbml4IFN5c3RlbXMnLCBIZW1lbndheSAmIEFy bWl0YWdlLCBVbml4L1dvcmxkLAorICBWb2wuMSwgTm8uMywgMTk4NC4KKyovCisgICAgd2hpbGUg KC0teGFyZ2MgPiAwKSB7ICAgICAgICAgICAgICAgLyogR28gdGhyb3VnaCBjb21tYW5kIGxpbmUg d29yZHMgKi8KKyAgICAgICAgeGFyZ3YrKzsKKyAgICAgICAgZGVidWcoRjExMSwiY21kbGluIHhh cmd2IiwqeGFyZ3YseGFyZ2MpOworICAgICAgICBpZiAoKip4YXJndiA9PSAnPScpCisgICAgICAg ICAgcmV0dXJuKDApOworICAgICAgICBpZiAoIXN0cmNtcCgqeGFyZ3YsIi0tIikpICAgICAgIC8q IGdldG9wdCgpIGNvbmZvcm1hbmNlICovCisgICAgICAgICAgcmV0dXJuKDApOworI2lmZGVmIFZN UworICAgICAgICBlbHNlIGlmICgqKnhhcmd2ID09ICcvJykKKyAgICAgICAgICBjb250aW51ZTsK KyNlbmRpZiAvKiBWTVMgKi8KKyAgICAgICAgZWxzZSBpZiAoKip4YXJndiA9PSAnLScpIHsgICAg ICAvKiBHb3QgYW4gb3B0aW9uIChiZWdpbnMgd2l0aCBkYXNoKSAqLworICAgICAgICAgICAgaW50 IHh4OworICAgICAgICAgICAgeCA9ICooKnhhcmd2KzEpOyAgICAgICAgICAgIC8qIEdldCB0aGUg b3B0aW9uIGxldHRlciAqLworICAgICAgICAgICAgZGVidWcoRjExMSwiY21kbGluIGFyZ3MgMSIs Knhhcmd2LHhhcmdjKTsKKyAgICAgICAgICAgIHh4ID0gZG9hcmcoeCk7CisgICAgICAgICAgICBk ZWJ1ZyhGMTAxLCJjbWRsaW4gZG9hcmciLCIiLHh4KTsKKyAgICAgICAgICAgIGRlYnVnKEYxMTEs ImNtZGxpbiBhcmdzIDIiLCp4YXJndix4YXJnYyk7CisgICAgICAgICAgICBpZiAoeHggPCAwKSB7 CisjaWZuZGVmIE5PSUNQCisgICAgICAgICAgICAgICAgaWYgKHdoYXQgPT0gV19DT01NQU5EKQor ICAgICAgICAgICAgICAgICAgcmV0dXJuKDApOworICAgICAgICAgICAgICAgIGVsc2UKKyNlbmRp ZiAvKiBOT0lDUCAqLworICAgICAgICAgICAgICAgICAgeworI2lmZGVmIE9TMgorICAgICAgICAg ICAgICAgICAgICAgIHNsZWVwKDEpOyAgICAgICAgIC8qIEdpdmUgaXQgYSBjaGFuY2UuLi4gKi8K KyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAgICAgICAgICAgICAgICBkb2V4aXQoQkFEX0VYSVQs MSk7IC8qIEdvIGhhbmRsZSBvcHRpb24gKi8KKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICghaGF2ZXVybCkgewkJLyogTm8gZGFzaCB3aGVyZSBl eHBlY3RlZCAqLworCSAgICBjaGFyIHhidWZbMzJdOworICAgICAgICAgICAgY2hhciBidWZbMTI4 XTsKKwkgICAgaW50IGs7CisJICAgIGsgPSBja3N0cm5jcHkoeGJ1ZiwqeGFyZ3YsNDApOworCSAg ICBpZiAoayA+IDMwKSB7CisJCXhidWZbMzBdID0gJy4nOworCQl4YnVmWzI5XSA9ICcuJzsKKwkJ eGJ1ZlsyOF0gPSAnLic7CisJICAgIH0KKwkgICAgeGJ1ZlszMV0gPSBOVUw7CisgICAgICAgICAg ICBja21ha21zZyhidWYsCisJCSAgICAgMTI4LAorCQkgICAgICJpbnZhbGlkIGNvbW1hbmQtbGlu ZSBvcHRpb24sIHR5cGUgXCIiLAorCQkgICAgIG15bmFtZSwKKwkJICAgICAiIC1oXCIgZm9yIGhl bHAiLAorCQkgICAgIE5VTEwKKwkJICAgICApOworCSAgICBmYXRhbDIoeGJ1ZixidWYpOworICAg ICAgICB9CisgICAgfQorI2lmZGVmIERFQlVHCisgICAgaWYgKGRlYmxvZykgeworI2lmbmRlZiBO T0lDUAorICAgICAgICBkZWJ1ZyhGMTAxLCJjbWRsaW4gd2hhdCIsIiIsd2hhdCk7CisjZW5kaWYg LyogTk9JQ1AgKi8KKyAgICAgICAgZGVidWcoRjEwMSwiY21kbGluIGFjdGlvbiIsIiIsYWN0aW9u KTsKKyNpZm5kZWYgTk9YRkVSCisgICAgICAgIGRlYnVnKEYxMDEsImNtZGxpbiBzdGRvdWYiLCIi LHN0ZG91Zik7CisjZW5kaWYgLyogTk9YRkVSICovCisgICAgfQorI2VuZGlmIC8qIERFQlVHICov CisKKyNpZmRlZiBOT0lDUAorICAgIGlmICghYWN0aW9uICYmICFjZmxnICYmICFjbmZsZykgewor ICAgICAgICBkZWJ1ZyhGMTAwLCJjbWRsaW4gTk9JQ1AgZmF0YWwgbm8gYWN0aW9uIiwiIiwwKTsK KyAgICAgICAgWEZBVEFMKCI/Tm8gYWN0aW9ucyBzcGVjaWZpZWQgb24gY29tbWFuZCBsaW5lIik7 CisgICAgfQorI2Vsc2UKKyAgICBpZiAoaW5zZXJ2ZXIgJiYgd2hhdCA9PSAwKSB7ICAgICAgICAv KiBJbnRlcm5ldCBLZXJtaXQgc2VydmVyIGNoZWNrcyAqLworICAgICAgICBpZiAobG9jYWwgfHwg KGFjdGlvbiAhPSAwICYmIGFjdGlvbiAhPSAneCcpKSB7CisgICAgICAgICAgICBpZiAobG9jYWwp CisgICAgICAgICAgICAgIHByaW50ZigibG9jYWxcclxuIik7CisgICAgICAgICAgICBpZiAoYWN0 aW9uKQorICAgICAgICAgICAgICBwcmludGYoImFjdGlvbj0lY1xyXG4iLGFjdGlvbik7CisgICAg ICAgICAgICBkZWJ1ZyhGMTAwLCJjbWRsaW4gZmF0YWwgMSIsIiIsMCk7CisgICAgICAgICAgICBY RkFUQUwoIk5vIGFjdGlvbnMgb3IgY29ubmVjdGlvbnMgYWxsb3dlZCB3aXRoIC1BIik7CisgICAg ICAgIH0KKyAgICB9CisjZW5kaWYgLyogTk9JQ1AgKi8KKworI2lmbmRlZiBOT0xPQ0FMCisgICAg aWYgKCFsb2NhbCkgeworICAgICAgICBpZiAoKGFjdGlvbiA9PSAnYycpIHx8IChjZmxnICE9IDAp KSB7CisgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJjbWRsaW4gZmF0YWwgMiIsIiIsMCk7CisgICAg ICAgICAgICBYRkFUQUwoIi1sIG9yIC1qIG9yIC1YIHJlcXVpcmVkIik7CisgICAgICAgIH0KKyAg ICB9CisjZW5kaWYgLyogTk9MT0NBTCAqLworI2lmbmRlZiBOT1hGRVIKKyAgICBpZiAoKmNtYXJn MiAhPSAwKSB7CisgICAgICAgIGlmICgoYWN0aW9uICE9ICdzJykgJiYgKGFjdGlvbiAhPSAncicp ICYmIChhY3Rpb24gIT0gJ3YnKSkgeworICAgICAgICAgICAgZGVidWcoRjEwMCwiY21kbGluIGZh dGFsIDMiLCIiLDApOworICAgICAgICAgICAgWEZBVEFMKCItYSB3aXRob3V0IC1zLCAtciwgb3Ig LWciKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoYWN0aW9uID09ICdyJyB8fCBhY3Rpb24gPT0g J3YnKSB7CisjaWZkZWYgQ0tfVE1QRElSCisgICAgICAgICAgICBpZiAoaXNkaXIoY21hcmcyKSkg eyAgICAgICAgLyogLWEgaXMgYSBkaXJlY3RvcnkgKi8KKyAgICAgICAgICAgICAgICBpZiAoIXpj aGRpcihjbWFyZzIpKSB7ICAvKiB0cnkgdG8gY2hhbmdlIHRvIGl0ICovCisgICAgICAgICAgICAg ICAgICAgIGRlYnVnKEYxMDAsImNtZGxpbiBmYXRhbCA0IiwiIiwwKTsKKyAgICAgICAgICAgICAg ICAgICAgWEZBVEFMKCJjYW4ndCBjaGFuZ2UgdG8gJy1hJyBkaXJlY3RvcnkiKTsKKyAgICAgICAg ICAgICAgICB9IGVsc2UgY21hcmcyID0gIiI7CisgICAgICAgICAgICB9IGVsc2UKKyNlbmRpZiAv KiBDS19UTVBESVIgKi8KKyAgICAgICAgICAgICAgaWYgKHpjaGtvKGNtYXJnMikgPCAwKSB7Cisg ICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJjbWRsaW4gZmF0YWwgNSIsIiIsMCk7CisgICAg ICAgICAgICAgICAgICBYRkFUQUwoIndyaXRlIGFjY2VzcyB0byAtYSBmaWxlIGRlbmllZCIpOwor ICAgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKChhY3Rpb24gPT0gJ3Yn KSAmJiAoc3Rkb3VmKSAmJiAoIWxvY2FsKSkgeworICAgICAgICBpZiAoaXNfYV90dHkoMSkpIHsK KyAgICAgICAgICAgIGRlYnVnKEYxMDAsImNtZGxpbiBmYXRhbCA2IiwiIiwwKTsKKyAgICAgICAg ICAgIFhGQVRBTCgidW5yZWRpcmVjdGVkIC1rIGNhbiBvbmx5IGJlIHVzZWQgaW4gbG9jYWwgbW9k ZSIpOworICAgICAgICB9CisgICAgfQorICAgIGlmICgoYWN0aW9uID09ICdzJykgfHwgKGFjdGlv biA9PSAndicpIHx8CisgICAgICAgIChhY3Rpb24gPT0gJ3InKSB8fCAoYWN0aW9uID09ICd4Jykp IHsKKyAgICAgICAgaWYgKGxvY2FsKQorICAgICAgICAgIGRpc3BsYSA9IDE7CisgICAgICAgIGlm IChzdGRvdWYpIHsKKyAgICAgICAgICAgIGRpc3BsYSA9IDA7CisgICAgICAgICAgICBxdWlldCA9 IDE7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKHF1aWV0KSBkaXNwbGEgPSAwOyAgICAgICAg ICAgICAgLyogTm8gZGlzcGxheSBpZiBxdWlldCByZXF1ZXN0ZWQgKi8KKyNlbmRpZiAvKiBOT1hG RVIgKi8KKyNpZmRlZiBERUJVRworICAgIGlmIChhY3Rpb24pCisgICAgICBkZWJ1ZyhGMDAwLCJj bWRsaW4gcmV0dXJucyBhY3Rpb24iLCIiLGFjdGlvbik7CisgICAgZWxzZQorICAgICAgZGVidWco RjEwMSwiY21kbGluIHJldHVybnMgYWN0aW9uIiwiIixhY3Rpb24pOworI2VuZGlmIC8qIERFQlVH ICovCisKKyAgICByZXR1cm4oYWN0aW9uKTsgICAgICAgICAgICAgICAgICAgICAvKiBUaGVuIGRv IGFueSByZXF1ZXN0ZWQgcHJvdG9jb2wgKi8KK30KKworLyogRXh0ZW5kZWQgYXJndW1lbnQgcGFy c2luZzogLS1rZXl3b3JkWzp2YWx1ZV0gKG9yID12YWx1ZSkgKi8KKworLyoKKyAgWEFfeHh4eCBz eW1ib2xzIGFyZSBkZWZpbmVkIGluIGNrdXVzci5oLgorICBJZiB5b3UgYWRkIGEgbmV3IG9uZSwg YWxzbyByZW1lbWJlciB0byB1cGRhdGUgZG9zaG93KCksCisgIFNIWE9QVCBzZWN0aW9uLCBpbiBj a3V1czUuYy4KKyovCitzdHJ1Y3Qga2V5dGFiIHhhcmd0YWJbXSA9IHsKKyNpZmRlZiBDS19MT0dJ TgorICAgIHsgImFub255bW91cyIsICAgWEFfQU5PTiwgQ01fQVJHfENNX1BSRSB9LAorI2VuZGlm IC8qIENLX0xPR0lOICovCisgICAgeyAiYmFubmVyZmlsZSIsICBYQV9CQUZJLCBDTV9BUkcgfSwK KyAgICB7ICJjZGZpbGUiLCAgICAgIFhBX0NERkksIENNX0FSRyB9LAorICAgIHsgImNkbWVzc2Fn ZSIsICAgWEFfQ0RNUywgQ01fQVJHIH0sCisgICAgeyAiY2Rtc2ciLCAgICAgICBYQV9DRE1TLCBD TV9BUkd8Q01fSU5WIH0sCisjaWZkZWYgS1VJCisgICAgeyAiY2hhbmdlZGltIiwgICBYQV9DSEdE LCBDTV9QUkUgfSwKKyNlbmRpZiAvKiBLVUkgKi8KKyNpZm5kZWYgTk9DU0VUUworICAgIHsgImNo YXJzZXQiLCAgICAgWEFfQ1NFVCwgQ01fQVJHfENNX1BSRSB9LAorI2VuZGlmIC8qIE5PQ1NFVFMg Ki8KKyNpZmRlZiBJS1NEQgorICAgIHsgImRhdGFiYXNlIiwgICAgWEFfREJBUywgQ01fQVJHfENN X1BSRSB9LAorICAgIHsgImRiZmlsZSIsICAgICAgWEFfREJGSSwgQ01fQVJHfENNX1BSRSB9LAor I2VuZGlmIC8qIElLU0RCICovCisjaWZkZWYgS1VJCisgICAgeyAiZmFjZW5hbWUiLCAgICBYQV9G TkFNLCBDTV9BUkd8Q01fUFJFfENNX0lOViB9LAorICAgIHsgImZvbnRuYW1lIiwgICAgWEFfRk5B TSwgQ01fQVJHfENNX1BSRSB9LAorICAgIHsgImZvbnRzaXplIiwgICAgWEFfRlNJWiwgQ01fQVJH fENNX1BSRSB9LAorI2VuZGlmIC8qIEtVSSAqLworI2lmZGVmIENPTU1FTlQKKyNpZmRlZiBORVdG VFAKKyAgICB7ICJmdHAiLCAgICAgICAgIFhBX0ZUUCwgIENNX0FSRyB9LAorI2VuZGlmIC8qIE5F V0ZUUCAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyNpZm5kZWYgTk9MT0NBTAorI2lmZGVmIE9T MgorICAgIHsgImhlaWdodCIsICAgICAgWEFfUk9XUywgQ01fQVJHfENNX1BSRSB9LAorI2VuZGlm IC8qIE9TMiAqLworI2VuZGlmIC8qIE5PTE9DQUwgKi8KKyAgICB7ICJoZWxwIiwgICAgICAgIFhB X0hFTFAsIDAgfSwKKyNpZm5kZWYgTk9IRUxQCisgICAgeyAiaGVscGZpbGUiLCAgICBYQV9IRUZJ LCBDTV9BUkcgfSwKKyNlbmRpZiAvKiBOT0hFTFAgKi8KKyNpZmRlZiBDS19MT0dJTgorICAgIHsg ImluaXRmaWxlIiwgICAgWEFfQU5GSSwgQ01fQVJHfENNX1BSRSB9LAorI2VuZGlmIC8qIENLX0xP R0lOICovCisjaWZkZWYgT1MyCisgICAgeyAibG9ja2Rvd24iLCAgICBYQV9MT0NLLCBDTV9QUkUg fSwKKyNpZmRlZiBLVUkKKyAgICB7ICJtYXhpbWl6ZSIsICAgIFhBX1dNQVgsICBDTV9QUkUgfSwK KyAgICB7ICJtaW5pbWl6ZSIsICAgIFhBX1dNSU4sICBDTV9QUkUgfSwKKyAgICB7ICJub2JhcnMi LCAgICAgIFhBX05PQkFSLCBDTV9QUkUgfSwKKyAgICB7ICJub2Nsb3NlIiAsICAgIFhBX05PQ0xP U0UsIENNX1BSRSB9LAorI2VuZGlmIC8qIEtVSSAqLworICAgIHsgIm5vZXNjYXBlIiwgICAgWEFf Tk9FU0NBUEUsIENNX1BSRSB9LAorI2VuZGlmIC8qIE9TMiAqLworICAgIHsgIm5vaW50ZXJydXB0 cyIsWEFfTk9JTiwgQ01fUFJFIH0sCisjaWZkZWYgS1VJCisgICAgeyAibm9tZW51YmFyIiwgICBY QV9OT01OLCBDTV9QUkUgfSwKKyNlbmRpZiAvKiBLVUkgKi8KKyAgICB7ICJub3Blcm1zIiwgICAg IFhBX05QUk0sIDAgfSwKKyNpZm5kZWYgTk9QVVNICisgICAgeyAibm9wdXNoIiwgICAgICBYQV9O T1BVU0gsIENNX1BSRSB9LAorI2VuZGlmIC8qIE5PUFVTSCAqLworI2lmZGVmIE9TMgorICAgIHsg Im5vc2Nyb2xsIiwgICAgWEFfTk9TQ1JPTEwsIENNX1BSRSB9LAorI2VuZGlmIC8qIE9TMiAqLwor I2lmZGVmIEtVSQorICAgIHsgIm5vc3RhdHVzYmFyIiwgWEFfTk9TQiwgQ01fUFJFIH0sCisgICAg eyAibm90b29sYmFyIiwgICBYQV9OT1RCLCBDTV9QUkUgfSwKKyNlbmRpZiAvKiBLVUkgKi8KKyNp ZmRlZiBDT01NRU5UCisgICAgeyAicGFzc3dvcmQiLCAgICBYQV9QQVNTLCBDTV9BUkd8Q01fSU5W IH0sCisjZW5kaWYgLyogQ09NTUVOVCAqLworI2lmZGVmIENLX0xPR0lOCisjaWZuZGVmIE5PWEZF UgorI2lmZGVmIENLX1BFUk0KKyAgICB7ICJwZXJtaXNzaW9ucyIsIFhBX1BFUk0sIENNX0FSR3xD TV9QUkUgfSwKKyAgICB7ICJwZXJtcyIsICAgICAgIFhBX1BFUk0sIENNX0FSR3xDTV9QUkV8Q01f SU5WIH0sCisjZW5kaWYgLyogQ0tfUEVSTSAqLworI2VuZGlmIC8qIE5PWEZFUiAqLworI2lmZGVm IFVOSVgKKyAgICB7ICJwcml2aWQiLCAgICAgIFhBX1BSSVYsIENNX0FSR3xDTV9QUkUgfSwKKyNl bmRpZiAvKiBVTklYICovCisjaWZuZGVmIE5PTE9DQUwKKyNpZm5kZWYgTk9DU0VUUworICAgIHsg InJjaGFyc2V0IiwgICAgWEFfQ1NFVCwgQ01fQVJHfENNX1BSRXxDTV9JTlYgfSwKKyNlbmRpZiAv KiBOT0NTRVRTICovCisjZW5kaWYgLyogTk9MT0NBTCAqLworI2lmZGVmIFVOSVgKKyAgICB7ICJy b290IiwgICAgICAgIFhBX1JPT1QsIENNX0FSR3xDTV9QUkUgfSwKKyNlbHNlIC8qIFVOSVggKi8K KyNpZmRlZiBDS1JPT1QKKyAgICB7ICJyb290IiwgICAgICAgIFhBX1JPT1QsIENNX0FSR3xDTV9Q UkUgfSwKKyNlbmRpZiAvKiBDS1JPT1QgKi8KKyNlbmRpZiAvKiBVTklYICovCisjaWZkZWYgS1VJ CisgICAgeyAic2NhbGVmb250IiwgICBYQV9TQ0FMRSwgQ01fUFJFIH0sCisjZW5kaWYgLyogS1VJ ICovCisjaWZkZWYgQ09NTUVOVAorI2lmZGVmIFNTSEJVSUxUSU4KKyAgICB7ICJzc2giLCAgICAg ICAgIFhBX1NTSCwgIENNX0FSRyB9LAorI2VuZGlmIC8qIFNTSEJVSUxUSU4gKi8KKyNlbmRpZiAv KiBDT01NRU5UICovCisjaWZkZWYgQ0tTWVNMT0cKKyAgICB7ICJzeXNsb2ciLCAgICAgIFhBX1NZ U0wsIENNX0FSR3xDTV9QUkUgfSwKKyNlbmRpZiAvKiBDS1NZU0xPRyAqLworI2lmbmRlZiBOT0xP Q0FMCisjaWZkZWYgQ09NTUVOVAorI2lmZGVmIFROQ09ERQorICAgIHsgInRlbG5ldCIsICAgICAg WEFfVEVMLCAgQ01fQVJHIH0sCisjZW5kaWYgLyogVE5DT0RFICovCisjZW5kaWYgLyogQ09NTUVO VCAqLworICAgIHsgInRlcm10eXBlIiwgICAgWEFfVEVSTSwgQ01fQVJHfENNX1BSRSB9LAorI2Vu ZGlmIC8qIE5PTE9DQUwgKi8KKyAgICB7ICJ0aW1lb3V0IiwgICAgIFhBX1RJTU8sIENNX0FSR3xD TV9QUkUgfSwKKyNpZm5kZWYgTk9MT0NBTAorI2lmZGVmIE9TMgorICAgIHsgInRpdGxlIiwgICAg ICAgWEFfVElUTCwgQ01fQVJHIH0sCisjZW5kaWYgLyogT1MyICovCisjaWZkZWYgVU5JWAorICAg IHsgInVuYnVmZmVyZWQiLCAgWEFfVU5CVUYsIDAgfSwKKyNlbmRpZgkvKiBVTklYICovCisjaWZu ZGVmIE5PU1BMCisgICAgeyAidXNlciIsICAgICAgICBYQV9VU0VSLCBDTV9BUkcgfSwKKyNlbmRp ZiAvKiBOT1NQTCAqLworI2VuZGlmIC8qIE5PTE9DQUwgKi8KKyAgICB7ICJ1c2VyZmlsZSIsICAg IFhBX1VTRkksIENNX0FSR3xDTV9QUkUgfSwKKyAgICB7ICJ2ZXJzaW9uIiwgICAgIFhBX1ZFUlMs IDAgfSwKKyNpZm5kZWYgTk9MT0NBTAorI2lmZGVmIE9TMgorICAgIHsgIndpZHRoIiwgICAgICAg WEFfQ09MUywgQ01fQVJHfENNX1BSRSB9LAorI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIE5P TE9DQUwgKi8KKyNpZmRlZiBDS1dUTVAKKyAgICB7ICJ3dG1wZmlsZSIsICAgIFhBX1dURkksIENN X0FSR3xDTV9QUkUgfSwKKyAgICB7ICJ3dG1wbG9nIiwgICAgIFhBX1dUTVAsIENNX0FSR3xDTV9Q UkUgfSwKKyNlbmRpZiAvKiBDS1dUTVAgKi8KKyNlbmRpZiAvKiBDS19MT0dJTiAqLworICAgIHsg InhmZXJmaWxlIiwgICAgWEFfSUtGSSwgQ01fQVJHfENNX1BSRSB9LAorICAgIHsgInhmZXJsb2ci LCAgICAgWEFfSUtMRywgQ01fQVJHfENNX1BSRSB9LAorI2lmbmRlZiBOT0xPQ0FMCisjaWZkZWYg S1VJCisgICAgeyAieHBvcyIsICAgICAgICBYQV9YUE9TLCBDTV9BUkd8Q01fUFJFIH0sCisgICAg eyAieXBvcyIsICAgICAgICBYQV9ZUE9TLCBDTV9BUkd8Q01fUFJFIH0sCisjZW5kaWYgLyogS1VJ ICovCisjZW5kaWYgLyogTk9MT0NBTCAqLworICAgIHsiIiwgMCwgMCB9Cit9OworaW50IG54YXJn cyA9IHNpemVvZih4YXJndGFiKS9zaXplb2Yoc3RydWN0IGtleXRhYikgLSAxOworCitzdGF0aWMg c3RydWN0IGtleXRhYiBva3RhYltdID0geworICAgIHsgIjAiLCAgICAgMCwgMCB9LAorICAgIHsg IjEiLCAgICAgMSwgMCB9LAorICAgIHsgIjIiLCAgICAgMiwgMCB9LAorICAgIHsgIjMiLCAgICAg MywgMCB9LAorICAgIHsgIjQiLCAgICAgNCwgMCB9LAorICAgIHsgIjUiLCAgICAgNSwgMCB9LAor ICAgIHsgIjYiLCAgICAgNiwgMCB9LAorICAgIHsgIjciLCAgICAgNywgMCB9LAorICAgIHsgIjgi LCAgICAgOCwgMCB9LAorICAgIHsgIjkiLCAgICAgOSwgMCB9LAorICAgIHsgImZhbHNlIiwgMCwg MCB9LAorICAgIHsgIm5vIiwgICAgMCwgMCB9LAorICAgIHsgIm9mZiIsICAgMCwgMCB9LAorICAg IHsgIm9rIiwgICAgMSwgMCB9LAorICAgIHsgIm9uIiwgICAgMSwgMCB9LAorICAgIHsgInRydWUi LCAgMSwgMCB9LAorICAgIHsgInllcyIsICAgMSwgMCB9Cit9Oworc3RhdGljIGludCBub2t0YWIg PSBzaXplb2Yob2t0YWIpL3NpemVvZihzdHJ1Y3Qga2V5dGFiKTsKKworI2RlZmluZSBYQVJHQlVG TCAzMgorCitjaGFyICogeG9wdGhscFtYQV9NQVgrMV07ICAgICAgICAgICAgICAgLyogRXh0ZW5k ZWQgb3B0aW9uIGhlbHAgKi8KK2NoYXIgKiB4YXJnaGxwW1hBX01BWCsxXTsgICAgICAgICAgICAg ICAvKiBFeHRlbmRlZCBhcmd1bWVudCBmb3Igb3B0aW9uICovCisKK3N0YXRpYyBWT0lECitpbml4 b3B0aGxwKCkgeworICAgIGludCBpLCBqOworICAgIGZvciAoaSA9IDA7IGkgPD0gWEFfTUFYOyBp KyspIHsgICAgIC8qIEluaXRpYWxpemUgYWxsIHRvIG51bGwgKi8KKyAgICAgICAgeG9wdGhscFtp XSA9IE5VTEw7CisgICAgICAgIHhhcmdobHBbaV0gPSBOVUxMOworICAgIH0KKyAgICBmb3IgKGkg PSAwOyBpIDwgbnhhcmdzOyBpKyspIHsgICAgICAvKiBUaGVuIGZvciBlYWNoIGRlZmluZWQga2V5 d29yZCAqLworICAgICAgICBqID0geGFyZ3RhYltpXS5rd3ZhbDsgICAgICAgICAgIC8qIGluZGV4 IGJ5IGFzc29jaWF0ZWQgdmFsdWUgKi8KKyAgICAgICAgaWYgKGogPCAwIHx8IGogPiBYQV9NQVgp CisgICAgICAgICAgY29udGludWU7CisgICAgICAgIHN3aXRjaCAoaikgeworI2lmZGVmIENLX0xP R0lOCisgICAgICAgICAgY2FzZSBYQV9BTk9OOiAgICAgICAgICAgICAgICAgLyogIi0tYW5vbnlt b3VzIiAqLworICAgICAgICAgICAgeG9wdGhscFtqXSA9ICItLWFub255bW91czp7b24sb2ZmfSBb SUtTRCBvbmx5XSI7CisgICAgICAgICAgICB4YXJnaGxwW2pdID0gIldoZXRoZXIgdG8gYWxsb3cg YW5vbnltb3VzIElLU0QgbG9naW5zIjsKKyAgICAgICAgICAgIGJyZWFrOworI2lmZGVmIFVOSVgK KwkgIGNhc2UgWEFfUFJJVjoKKyAgICAgICAgICAgIHhvcHRobHBbal0gPSAiLS1wcml2aWQ6e29u LG9mZn0gW0lLU0Qgb25seV0iOworICAgICAgICAgICAgeGFyZ2hscFtqXSA9ICJXaGV0aGVyIHRv IGFsbG93IHByaXZpbGVnZWQgSURzIHRvIGxvZ2luIHRvIElLU0QiOworICAgICAgICAgICAgYnJl YWs7CisjZW5kaWYgLyogVU5JWCAqLworI2VuZGlmIC8qIENLX0xPR0lOICovCisgICAgICAgICAg Y2FzZSBYQV9CQUZJOiAgICAgICAgICAgICAgICAgLyogIi0tYmFubmVyZmlsZSIgKi8KKyAgICAg ICAgICAgIHhvcHRobHBbal0gPSAiLS1iYW5uZXJmaWxlOjxmaWxlbmFtZT4iOworICAgICAgICAg ICAgeGFyZ2hscFtqXSA9ICJGaWxlIHRvIGRpc3BsYXkgdXBvbiBzdGFydHVwIG9yIElLU0QgbG9n aW4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBYQV9DREZJOiAgICAgICAg ICAgICAgICAgLyogIi0tY2RmaWxlIiAqLworICAgICAgICAgICAgeG9wdGhscFtqXSA9ICItLWNk ZmlsZTo8ZmlsZW5hbWU+IjsKKyAgICAgICAgICAgIHhhcmdobHBbal0gPSAiRmlsZSB0byBkaXNw bGF5IHdoZW4gc2VydmVyIGNoYW5nZXMgZGlyZWN0b3J5IjsKKyAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICAgIGNhc2UgWEFfQ0RNUzogICAgICAgICAgICAgICAgIC8qICItLWNkbWVzc2FnZSIg Ki8KKyAgICAgICAgICAgIHhvcHRobHBbal0gPSAiLS1jZG1lc3NhZ2U6e29uLG9mZn0iOworICAg ICAgICAgICAgeGFyZ2hscFtqXSA9ICJXaGV0aGVyIHRvIGRpc3BsYXkgQ0QgbWVzc2FnZSBmaWxl IjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgWEFfSEVMUDogICAgICAgICAg ICAgICAgIC8qICItLWhlbHAiICovCisgICAgICAgICAgICB4b3B0aGxwW2pdID0gIi0taGVscCI7 CisgICAgICAgICAgICB4YXJnaGxwW2pdID0gIlByaW50IHRoaXMgaGVscCB0ZXh0IGFib3V0IGV4 dGVuZGVkIG9wdGlvbnMiOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBYQV9I RUZJOiAgICAgICAgICAgICAgICAgLyogIi0taGVscCIgKi8KKyAgICAgICAgICAgIHhvcHRobHBb al0gPSAiLS1oZWxwZmlsZTo8ZmlsZW5hbWU+IjsKKyAgICAgICAgICAgIHhhcmdobHBbal0gPSAi RmlsZSBjb250YWluaW5nIGN1c3RvbSBpbmZvIGZvciBIRUxQIGNvbW1hbmQiOworICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBYQV9JS0ZJOiAgICAgICAgICAgICAgICAgLyogIi0t eGZlcmZpbGUiICovCisgICAgICAgICAgICB4b3B0aGxwW2pdID0gIi0teGZlcmZpbGU6PGZpbGVu YW1lPiBbSUtTRCBvbmx5XSI7CisgICAgICAgICAgICB4YXJnaGxwW2pdID0gIk5hbWUgb2YgZnRw ZC1saWtlIGxvZ2ZpbGUuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgWEFf SUtMRzogICAgICAgICAgICAgICAgIC8qICItLXhmZXJsb2ciICovCisgICAgICAgICAgICB4b3B0 aGxwW2pdID0gIi0teGZlcmxvZzp7b24sb2ZmfSBbSUtTRCBvbmx5XSI7CisgICAgICAgICAgICB4 YXJnaGxwW2pdID0gIldoZXRoZXIgdG8ga2VlcCBhbiBmdHBkLWxpa2UgbG9nZmlsZS4iOworICAg ICAgICAgICAgYnJlYWs7CisjaWZkZWYgQ0tfTE9HSU4KKyAgICAgICAgICBjYXNlIFhBX0FORkk6 ICAgICAgICAgICAgICAgICAvKiAiLS1pbml0ZmlsZSIgKi8KKyAgICAgICAgICAgIHhvcHRobHBb al0gPSAiLS1pbml0ZmlsZTo8ZmlsZW5hbWU+IFtJS1NEIG9ubHldIjsKKyAgICAgICAgICAgIHhh cmdobHBbal0gPSAiSW5pdGlhbGl6YXRpb24gZmlsZSBmb3IgYW5vbnltb3VzIHVzZXJzLiI7Cisg ICAgICAgICAgICBicmVhazsKKyNpZmRlZiBDS19QRVJNCisgICAgICAgICAgY2FzZSBYQV9QRVJN OiAgICAgICAgICAgICAgICAgLyogIi0tcGVybWlzc2lvbnMiICovCisgICAgICAgICAgICB4b3B0 aGxwW2pdID0gIi0tcGVybWlzc2lvbnM6PG9jdGFsbnVtPiBbSUtTRCBvbmx5XSI7CisgICAgICAg ICAgICB4YXJnaGxwW2pdID0gIlBlcm1pc3Npb25zIGZvciBmaWxlcyB1cGxvYWRlZCBieSBhbm9u eW1vdXMgdXNlcnMuIjsKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIENLX1BFUk0gKi8K KyNpZmRlZiBVTklYCisgICAgICAgICAgY2FzZSBYQV9ST09UOiAgICAgICAgICAgICAgICAgLyog Ii0tcm9vdCIgKi8KKyAgICAgICAgICAgIHhvcHRobHBbal0gPSAiLS1yb290OjxkaXJlY3Rvcnk+ IFtJS1NEIG9ubHldIjsKKyAgICAgICAgICAgIHhhcmdobHBbal0gPSAiRmlsZS1zeXN0ZW0gcm9v dCBmb3IgYW5vbnltb3VzIHVzZXJzLiI7CisgICAgICAgICAgICBicmVhazsKKyNlbHNlIC8qIFVO SVggKi8KKyNpZmRlZiBDS1JPT1QKKyAgICAgICAgICBjYXNlIFhBX1JPT1Q6ICAgICAgICAgICAg ICAgICAvKiAiLS1yb290IiAqLworICAgICAgICAgICAgeG9wdGhscFtqXSA9ICItLXJvb3Q6PGRp cmVjdG9yeT4gW0lLU0Qgb25seV0iOworICAgICAgICAgICAgeGFyZ2hscFtqXSA9ICJGaWxlLXN5 c3RlbSByb290IGZvciBhbm9ueW1vdXMgdXNlcnMuIjsKKyAgICAgICAgICAgIGJyZWFrOworI2Vu ZGlmIC8qIENLUk9PVCAqLworI2VuZGlmIC8qIFVOSVggKi8KKyNlbmRpZiAvKiBDS19MT0dJTiAq LworI2lmZGVmIENLU1lTTE9HCisgICAgICAgICAgY2FzZSBYQV9TWVNMOiAgICAgICAgICAgICAg ICAgLyogIi0tc3lzbG9nIiAqLworICAgICAgICAgICAgeG9wdGhscFtqXSA9ICItLXN5c2xvZzo8 ZGlnaXQ+IFtJS1NEIG9ubHldIjsKKyAgICAgICAgICAgIHhhcmdobHBbal0gPSAiU3lzbG9nIHJl Y29yZGluZyBsZXZlbCwgMC02LiI7CisgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBDS1NZ U0xPRyAqLworICAgICAgICAgIGNhc2UgWEFfVVNGSTogICAgICAgICAgICAgICAgIC8qICItLXVz ZXJmaWxlIiAqLworICAgICAgICAgICAgeG9wdGhscFtqXSA9ICItLXVzZXJmaWxlOjxmaWxlbmFt ZT4gW0lLU0Qgb25seV0iOworICAgICAgICAgICAgeGFyZ2hscFtqXSA9ICJGb3JiaWRkZW4gdXNl ciBmaWxlLiI7CisgICAgICAgICAgICBicmVhazsKKyNpZmRlZiBDS1dUTVAKKyAgICAgICAgICBj YXNlIFhBX1dURkk6ICAgICAgICAgICAgICAgICAvKiAiLS13dG1wZmlsZSIgKi8KKyAgICAgICAg ICAgIHhvcHRobHBbal0gPSAiLS13dG1wZmlsZTo8ZmlsZW5hbWU+IFtJS1NEIG9ubHldIjsKKyAg ICAgICAgICAgIHhhcmdobHBbal0gPSAiTmFtZSBvZiB3dG1wIGxvZ2ZpbGUuIjsKKyAgICAgICAg ICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgWEFfV1RNUDogICAgICAgICAgICAgICAgIC8qICIt LXd0bXBsb2ciICovCisgICAgICAgICAgICB4b3B0aGxwW2pdID0gIi0td3RtcGxvZzp7b24sb2Zm fSBbSUtTRCBvbmx5XSI7CisgICAgICAgICAgICB4YXJnaGxwW2pdID0gIldoZXRoZXIgdG8ga2Vl cCBhIHd0bXAgbG9nZmlsZS4iOworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogQ0tXVE1Q ICovCisjaWZkZWYgQ0tfTE9HSU4KKyAgICAgICAgICBjYXNlIFhBX1RJTU86ICAgICAgICAgICAg ICAgICAvKiAiLS10aW1lb3V0IiAqLworICAgICAgICAgICAgeG9wdGhscFtqXSA9ICItLXRpbWVv dXQ6PHNlY29uZHM+IFtJS1NEIG9ubHldIjsKKyAgICAgICAgICAgIHhhcmdobHBbal0gPQorICJI b3cgbG9uZyB0byB3YWl0IGZvciBsb2dpbiBiZWZvcmUgY2xvc2luZyB0aGUgY29ubmVjdGlvbi4i OworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogQ0tfTE9HSU4gKi8KKyAgICAgICAgICBj YXNlIFhBX05PSU46CisgICAgICAgICAgICB4b3B0aGxwW2pdID0gIi0tbm9pbnRlcnJ1cHRzIjsK KyAgICAgICAgICAgIHhhcmdobHBbal0gPSAiRGlzYWJsZSBrZXlib2FyZCBpbnRlcnJ1cHRzLiI7 CisgICAgICAgICAgICBicmVhazsKKyNpZmRlZiBVTklYCisgICAgICAgICAgY2FzZSBYQV9VTkJV RjoKKyAgICAgICAgICAgIHhvcHRobHBbal0gPSAiLS11bmJ1ZmZlcmVkIjsKKyAgICAgICAgICAg IHhhcmdobHBbal0gPSAiRm9yY2UgdW5idWZmZXJlZCBjb25zb2xlIGkvby4iOworICAgICAgICAg ICAgYnJlYWs7CisjZW5kaWYJLyogVU5JWCAqLworI2lmZGVmIElLU0RCCisgICAgICAgICAgY2Fz ZSBYQV9EQkFTOgorICAgICAgICAgICAgeG9wdGhscFtqXSA9ICItLWRhdGFiYXNlOntvbixvZmZ9 IjsKKyAgICAgICAgICAgIHhhcmdobHBbal0gPSAiRW5hYmxlL0Rpc2FibGUgSUtTRCBkYXRhYmFz ZSAoSUtTRCBvbmx5KSI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIFhBX0RC Rkk6CisgICAgICAgICAgICB4b3B0aGxwW2pdID0gIi0tZGJmaWxlOjxmaWxlbmFtZT4iOworICAg ICAgICAgICAgeGFyZ2hscFtqXSA9ICJTcGVjaWZ5IElLU0QgZGF0YWJhc2UgZmlsZSAoSUtTRCBv bmx5KSI7CisgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBJS1NEQiAqLworI2lmZGVmIENL X1BFUk1TCisJICBjYXNlIFhBX05QUk06CisgICAgICAgICAgICB4b3B0aGxwW2pdID0gIi0tbm9w ZXJtcyI7CisgICAgICAgICAgICB4YXJnaGxwW2pdID0gIkRpc2FibGUgZmlsZS10cmFuc2ZlciBQ ZXJtaXNzaW9ucyBhdHRyaWJ1dGUuIjsKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIENL X1BFUk1TICovCisjaWZkZWYgS1VJCisgICAgICAgICAgY2FzZSBYQV9DSEdEOgorCSAgICB4b3B0 aGxwW2pdID0gIi0tY2hhbmdlZGltIjsKKwkgICAgeGFyZ2hscFtqXSA9ICJDaGFuZ2UgRGltZW5z aW9uIG9uIFdpbmRvdyBSZXNpemUiOworICAgICAgICAgIGNhc2UgWEFfU0NBTEU6CisJICAgIHhv cHRobHBbal0gPSAiLS1zY2FsZWZvbnQiOworCSAgICB4YXJnaGxwW2pdID0gIlNjYWxlIEZvbnQg b24gV2luZG93IFJlc2l6ZSI7CisgICAgICAgICAgY2FzZSBYQV9XTUFYOgorCSAgICB4b3B0aGxw W2pdID0gIi0tbWF4aW1pemUiOworCSAgICB4YXJnaGxwW2pdID0gInN0YXJ0IEs5NUcgd2luZG93 IG1heGltaXplZC4iOworCSAgICBicmVhazsKKyAgICAgICAgICBjYXNlIFhBX1dNSU46CisJICAg IHhvcHRobHBbal0gPSAiLS1taW5pbWl6ZSI7CisJICAgIHhhcmdobHBbal0gPSAic3RhcnQgSzk1 RyB3aW5kb3cgbWluaW1pemVkLiI7CisJICAgIGJyZWFrOworCSAgY2FzZSBYQV9YUE9TOgorCSAg ICB4b3B0aGxwW2pdID0gIi0teHBvczpuIjsKKwkgICAgeGFyZ2hscFtqXSA9ICJYLWNvb3JkaW5h dGUgb2Ygd2luZG93IHBvc2l0aW9uIChudW1iZXIpLiI7CisJICAgIGJyZWFrOworCSAgY2FzZSBY QV9ZUE9TOgorCSAgICB4b3B0aGxwW2pdID0gIi0teXBvczpuIjsKKwkgICAgeGFyZ2hscFtqXSA9 ICJZLWNvb3JkaW5hdGUgb2Ygd2luZG93IHBvc2l0aW9uIChudW1iZXIpLiI7CisJICAgIGJyZWFr OworCSAgY2FzZSBYQV9GTkFNOgorCSAgICB4b3B0aGxwW2pdID0gIi0tZm9udG5hbWU6cyAob3Ig LS1mYWNlbmFtZTpzKSI7CisJICAgIHhhcmdobHBbal0gPSAiRm9udC90eXBlZmFjZSBuYW1lOiBz dHJpbmcgd2l0aCBfIHJlcGxhY2luZyBibGFuay4iOworCSAgICBicmVhazsKKwkgIGNhc2UgWEFf RlNJWjoKKwkgICAgeG9wdGhscFtqXSA9ICItLWZvbnRzaXplOm4iOworCSAgICB4YXJnaGxwW2pd ID0gIkZvbnQgcG9pbnQgc2l6ZSAobnVtYmVyKS4iOworCSAgICBicmVhazsKKyAgICAgICAgICBj YXNlIFhBX05PTU46CisgICAgICAgICAgICB4b3B0aGxwW2pdID0gIi0tbm9tZW51YmFyIjsKKyAg ICAgICAgICAgIHhhcmdobHBbal0gPSAiTm8gTWVudSBCYXIiOworICAgICAgICAgICAgYnJlYWs7 CisgICAgICAgICAgY2FzZSBYQV9OT1RCOgorICAgICAgICAgICAgeG9wdGhscFtqXSA9ICItLW5v dG9vbGJhciI7CisgICAgICAgICAgICB4YXJnaGxwW2pdID0gIk5vIFRvb2wgQmFyIjsKKyAgICAg ICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgWEFfTk9TQjoKKyAgICAgICAgICAgIHhvcHRo bHBbal0gPSAiLS1ub3N0YXR1c2JhciI7CisgICAgICAgICAgICB4YXJnaGxwW2pdID0gIk5vIFN0 YXR1cyBCYXIiOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBYQV9OT0JBUjoK KyAgICAgICAgICAgIHhvcHRobHBbal0gPSAiLS1ub2JhcnMiOworICAgICAgICAgICAgeGFyZ2hs cFtqXSA9ICJObyBNZW51LCBTdGF0dXMsIG9yIFRvb2wgQmFycyI7CisgICAgICAgICAgICBicmVh azsKKyNlbmRpZiAvKiBLVUkgKi8KKyNpZm5kZWYgTk9QVVNICisgICAgICAgICAgY2FzZSBYQV9O T1BVU0g6CisJICAgIHhvcHRobHBbal0gPSAiLS1ub3B1c2giOworCSAgICB4YXJnaGxwW2pdID0g IkRpc2FibGUgZXh0ZXJuYWwgY29tbWFuZCBleGVjdXRpb24uIjsKKwkgICAgYnJlYWs7CisjZW5k aWYgLyogTk9QVVNIICovCisjaWZkZWYgT1MyCisgICAgICAgICAgY2FzZSBYQV9MT0NLOgorCSAg ICB4b3B0aGxwW2pdID0gIi0tbG9ja2Rvd24iOworCSAgICB4YXJnaGxwW2pdID0gIkVuYWJsZSBh bGwgbG9ja2Rvd24gb3B0aW9ucy4iOworCSAgICBicmVhazsKKyAgICAgICAgICBjYXNlIFhBX05P Q0xPU0U6CisgICAgICAgICAgICB4b3B0aGxwW2pdID0gIi0tbm9jbG9zZSI7CisgICAgICAgICAg ICB4YXJnaGxwW2pdID0gIkRpc2FibGUgQ2xvc2UgV2luZG93IGFuZCBNZW51IEV4aXQuIjsKKyAg ICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgWEFfTk9TQ1JPTEw6CisJICAgIHhvcHRo bHBbal0gPSAiLS1ub3Njcm9sbCI7CisJICAgIHhhcmdobHBbal0gPSAiRGlzYWJsZSBzY3JvbGxi YWNrIG9wZXJhdGlvbnMuIjsKKwkgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBYQV9OT0VTQ0FQ RToKKwkgICAgeG9wdGhscFtqXSA9ICItLW5vZXNjYXBlIjsKKwkgICAgeGFyZ2hscFtqXSA9ICJE aXNhYmxlIGVzY2FwZSBmcm9tIGNvbm5lY3QgbW9kZS4iOworCSAgICBicmVhazsKKwkgIGNhc2Ug WEFfUk9XUzoKKwkgICAgeG9wdGhscFtqXSA9ICItLWhlaWdodDpuIjsKKwkgICAgeGFyZ2hscFtq XSA9ICJTY3JlZW4gaGVpZ2h0IChudW1iZXIgb2Ygcm93cykuIjsKKwkgICAgYnJlYWs7CisJICBj YXNlIFhBX0NPTFM6CisJICAgIHhvcHRobHBbal0gPSAiLS13aWR0aDpuIjsKKwkgICAgeGFyZ2hs cFtqXSA9ICJTY3JlZW4gd2lkdGggKG51bWJlciBvZiBjb2x1bW5zKS4iOworCSAgICBicmVhazsK KyAgICAgICAgICBjYXNlIFhBX1RJVEw6CisgICAgICAgICAgICB4b3B0aGxwW2pdID0gIi0tdGl0 bGU6c3RyaW5nIjsKKyAgICAgICAgICAgIHhhcmdobHBbal0gPSAiV2luZG93IFRpdGxlLiI7Cisg ICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBPUzIgKi8KKwkgIGNhc2UgWEFfQ1NFVDoKKwkg ICAgeG9wdGhscFtqXSA9ICItLXJjaGFyc2V0Om5hbWUiOworCSAgICB4YXJnaGxwW2pdID0gIk5h bWUgb2YgcmVtb3RlIHRlcm1pbmFsIGNoYXJhY3RlciBzZXQuIjsKKwkgICAgYnJlYWs7CisJICBj YXNlIFhBX1RFUk06CisJICAgIHhvcHRobHBbal0gPSAiLS10ZXJtdHlwZTpuYW1lIjsKKyNpZmRl ZiBPUzIKKwkgICAgeGFyZ2hscFtqXSA9ICJDaG9vc2UgdGVybWluYWwgZW11bGF0aW9uLiI7Cisj ZWxzZQorCSAgICB4YXJnaGxwW2pdID0gIkNob29zZSB0ZXJtaW5hbCB0eXBlLiI7CisjZW5kaWYg LyogT1MyICovCisJICAgIGJyZWFrOworCSAgY2FzZSBYQV9VU0VSOgorCSAgICB4b3B0aGxwW2pd ID0gIi0tdXNlcjpuYW1lIjsKKyNpZm5kZWYgTkVUQ09OTgorCSAgICB4YXJnaGxwW2pdID0gIlVz ZXJuYW1lIChmb3IgbmV0d29yayBsb2dpbikiOworI2Vsc2UKKwkgICAgeGFyZ2hscFtqXSA9ICJV c2VybmFtZS4iOworI2VuZGlmIC8qIE5FVENPTk4gKi8KKwkgICAgYnJlYWs7CisgICAgICAgfQor ICAgIH0KK30KKworVk9JRAoraW5pb3B0aGxwKCkgeworICAgIGludCBpOworICAgIGZvciAoaSA9 IDA7IGkgPCAxMjg7IGkrKykgeworICAgICAgICBvcHRhY3RbaV0gPSAwOworICAgICAgICBzd2l0 Y2goaSkgeworI2lmZGVmIE9TMgorICAgICAgICAgIGNhc2UgJyMnOiAgICAgICAgICAgICAgICAg ICAgIC8qIEs5NSBTdGFydHVwIEZsYWdzICovCisgICAgICAgICAgICBvcHRobHBbaV0gPSAiS2Vy bWl0IDk1IFN0YXJ0dXAgRmxhZ3MiOworICAgICAgICAgICAgYXJnaGxwW2ldID0gIlxuIlwKKyAg ICAgICAgICAgICAgIiAgIDEgLSB0dXJuIG9mZiBXaW45NSBzcGVjaWFsIGZpeGVzXG4iXAorICAg ICAgICAgICAgICAiICAgMiAtIGRvIG5vdCBsb2FkIG9wdGlvbmFsIG5ldHdvcmsgZGxsc1xuIlwK KyAgICAgICAgICAgICAgIiAgIDQgLSBkbyBub3QgbG9hZCBvcHRpb25hbCB0YXBpIGRsbHNcbiJc CisgICAgICAgICAgICAgICIgICA4IC0gZG8gbm90IGxvYWQgb3B0aW9uYWwga2VyYmVyb3MgZGxs c1xuIlwKKyAgICAgICAgICAgICAgIiAgMTYgLSBkbyBub3QgbG9hZCBvcHRpb25hbCB6bW9kZW0g ZGxsc1xuIlwKKyAgICAgICAgICAgICAgIiAgMzIgLSB1c2Ugc3RkaW4gZm9yIGlucHV0IGluc3Rl YWQgb2YgdGhlIGNvbnNvbGVcbiJcCisgICAgICAgICAgICAgICIgIDY0IC0gdXNlIHN0ZG91dCBm b3Igb3V0cHV0IGluc3RlYWQgb2YgdGhlIGNvbnNvbGVcbiJcCisgICAgICAgICAgICAgICIgMTI4 IC0gZG8gbm90IHRlcm1pbmF0ZSBwcm9jZXNzIGluIHJlc3BvbnNlIHRvIFNlc3Npb24gTG9nb2Zm IjsKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIE9TMiAqLworICAgICAgICAgIGNhc2Ug JzAnOiAgICAgICAgICAgICAgICAgICAgIC8qIEluIHRoZSBtaWRkbGUgKi8KKyAgICAgICAgICAg IG9wdGhscFtpXSA9CisgICAgICAgICAgICAgICIxMDAlIHRyYW5zcGFyZW50IENPTk5FQ1QgbW9k ZSBmb3IgXCJpbi10aGUtbWlkZGxlXCIgb3BlcmF0aW9uIjsKKyAgICAgICAgICAgIGFyZ2hscFtp XSA9IE5VTEw7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgJzgnOgorICAg ICAgICAgICAgb3B0aGxwW2ldID0gIkNvbm5lY3Rpb24gaXMgOC1iaXQgY2xlYW4iOworICAgICAg ICAgICAgYXJnaGxwW2ldID0gTlVMTDsKKyAgICAgICAgICAgIGJyZWFrOworCisjaWZkZWYgTkVX RlRQCisgICAgICAgICAgY2FzZSAnOSc6CisgICAgICAgICAgICBvcHRobHBbaV0gPSAiTWFrZSBh IGNvbm5lY3Rpb24gdG8gYW4gRlRQIHNlcnZlciI7CisgICAgICAgICAgICBhcmdobHBbaV0gPSAi SVAtYWRkcmVzcy1vci1ob3N0bmFtZVs6b3B0aW9uYWwtVENQLXBvcnRdIjsKKyAgICAgICAgICAg IGJyZWFrOworI2VuZGlmIC8qIE5FV0ZUUCAqLworCisjaWZkZWYgSUtTRAorICAgICAgICAgIGNh c2UgJ0EnOgorICAgICAgICAgICAgb3B0aGxwW2ldID0gIktlcm1pdCBpcyB0byBiZSBzdGFydGVk IGFzIGFuIEludGVybmV0IHNlcnZpY2UiOworI2lmZGVmIE5UCisgICAgICAgICAgICBhcmdobHBb aV0gPSAiICBzb2NrZXQgaGFuZGxlIG9mIGluY29taW5nIGNvbm5lY3Rpb24iOworI2Vsc2UgLyog TlQgKi8KKyAgICAgICAgICAgIGFyZ2hscFtpXSA9IE5VTEw7CisjZW5kaWYgLyogTlQgKi8KKyAg ICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIElLU0QgKi8KKyAgICAgICAgICBjYXNlICdCJzog b3B0aGxwW2ldID0KKwkgICJLZXJtaXQgaXMgcnVubmluZyBpbiBCYXRjaCBvciBCYWNrZ3JvdW5k IChubyBjb250cm9sbGluZyB0ZXJtaW5hbCkiOworICAgICAgICAgICAgYnJlYWs7CisjaWZuZGVm IE5PU1BMCisgICAgICAgICAgY2FzZSAnQyc6CisgICAgICAgICAgICBvcHRobHBbaV0gPSAiSW50 ZXJhY3RpdmUtbW9kZSBDb21tYW5kcyB0byBiZSBleGVjdXRlZCI7CisgICAgICAgICAgICBhcmdo bHBbaV0gPSAiQ29tbWFuZHMgc2VwYXJhdGVkIGJ5IGNvbW1hcywgbGlzdCBpbiBkb3VibGVxdW90 ZXMiOworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogTk9TUEwgKi8KKyAgICAgICAgICBj YXNlICdEJzoKKyAgICAgICAgICAgIG9wdGhscFtpXSA9ICJEZWxheSBiZWZvcmUgc3RhcnRpbmcg dG8gc2VuZCI7CisgICAgICAgICAgICBhcmdobHBbaV0gPSAiTnVtYmVyIG9mIHNlY29uZHMiOwor ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSAnRSc6CisgICAgICAgICAgICBvcHRo bHBbaV0gPSAiRXhpdCBhdXRvbWF0aWNhbGx5IHdoZW4gY29ubmVjdGlvbiBjbG9zZXMiOworICAg ICAgICAgICAgYXJnaGxwW2ldID0gTlVMTDsKKyAgICAgICAgICAgIGJyZWFrOworI2lmZGVmIFRD UFNPQ0tFVAorICAgICAgICAgIGNhc2UgJ0YnOgorICAgICAgICAgICAgb3B0aGxwW2ldID0gIlVz ZSBhbiBleGlzdGluZyBUQ1AgY29ubmVjdGlvbiI7CisgICAgICAgICAgICBhcmdobHBbaV0gPSAi TnVtZXJpYyBmaWxlIGRlc2NyaXB0b3Igb2Ygb3BlbiBUQ1AgY29ubmVjdGlvbiI7CisgICAgICAg ICAgICBicmVhazsKKyNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KKyAgICAgICAgICBjYXNlICdHJzoK KyAgICAgICAgICAgIG9wdGhscFtpXSA9ICJHRVQgZnJvbSBzZXJ2ZXIsIHNlbmQgdG8gc3RhbmRh cmQgb3V0cHV0IjsKKyAgICAgICAgICAgIGFyZ2hscFtpXSA9ICJSZW1vdGUgZmlsZSBzcGVjaWZp Y2F0aW9uIjsKKyAgICAgICAgICAgIG9wdGFjdFtpXSA9IDE7CisgICAgICAgICAgICBicmVhazsK KyAgICAgICAgICBjYXNlICdIJzoKKyAgICAgICAgICAgIG9wdGhscFtpXSA9ICJTdXBwcmVzcyBw cm9ncmFtIHN0YXJ0dXAgSGVyYWxkIGFuZCBncmVldGluZyI7CisgICAgICAgICAgICBhcmdobHBb aV0gPSBOVUxMOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSAnSSc6CisgICAg ICAgICAgICBvcHRobHBbaV0gPSAiQ29ubmVjdGlvbiBpcyByZWxpYWJsZSwgc3RyZWFtaW5nIGlz IGFsbG93ZWQiOworICAgICAgICAgICAgYXJnaGxwW2ldID0gTlVMTDsKKyAgICAgICAgICAgIGJy ZWFrOworI2lmZGVmIFRDUFNPQ0tFVAorICAgICAgICAgIGNhc2UgJ0onOgorICAgICAgICAgICAg b3B0aGxwW2ldID0gIidCZSBsaWtlIFRlbG5ldCciOworICAgICAgICAgICAgYXJnaGxwW2ldID0g IklQIGhvc3RuYW1lL2FkZHJlc3Mgb3B0aW9uYWxseSBmb2xsb3dlZCBieSBzZXJ2aWNlIjsKKyAg ICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLworICAgICAgICAgIGNhc2Ug J0wnOgorICAgICAgICAgICAgb3B0aGxwW2ldID0gIlJlY3Vyc2l2ZSBkaXJlY3RvcnkgZGVzY2Vu dCBmb3IgZmlsZXMgaW4gLXMgb3B0aW9uIjsKKyAgICAgICAgICAgIGFyZ2hscFtpXSA9IE5VTEw7 CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlICdNJzoKKyAgICAgICAgICAgIG9w dGhscFtpXSA9ICJNeSB1c2VyIG5hbWUgKGZvciB1c2Ugd2l0aCBUZWxuZXQsIFJsb2dpbiwgZXRj KSI7CisgICAgICAgICAgICBhcmdobHBbaV0gPSAiVXNlcm5hbWUgc3RyaW5nIjsKKyAgICAgICAg ICAgIGJyZWFrOworI2lmZGVmIE5FVEJJT1MKKyAgICAgICAgICBjYXNlICdOJzoKKyAgICAgICAg ICAgIG9wdGhscFtpXSA9ICJORVRCSU9TIGFkYXB0ZXIgbnVtYmVyIjsKKyAgICAgICAgICAgIGFy Z2hscFtpXSA9ICJOdW1iZXIiOworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogTkVUQklP UyAqLworICAgICAgICAgIGNhc2UgJ08nOiAgICAgICAgICAgICAgICAgICAgIC8qIEJlIGEgc2Vy dmVyIGZvciBPbmUgY29tbWFuZCBvbmx5ICovCisgICAgICAgICAgICBvcHRobHBbaV0gPSAiQmUg YSBzZXJ2ZXIgZm9yIE9uZSBjb21tYW5kIG9ubHkiOworICAgICAgICAgICAgYXJnaGxwW2ldID0g TlVMTDsKKyAgICAgICAgICAgIG9wdGFjdFtpXSA9IDE7CisgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgICBjYXNlICdQJzoKKyAgICAgICAgICAgIG9wdGhscFtpXSA9ICJEb24ndCBjb252ZXJ0 IGZpbGUgKFBhdGgpIG5hbWVzIjsKKyAgICAgICAgICAgIGFyZ2hscFtpXSA9IE5VTEw7CisgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlICdRJzoKKyAgICAgICAgICAgIG9wdGhscFtp XSA9ICJRdWljayAoRkFTVCkgS2VybWl0IHByb3RvY29sIHNldHRpbmdzIjsKKyAgICAgICAgICAg IGFyZ2hscFtpXSA9IE5VTEw7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlICdS JzogICAgICAgICAgICAgICAgICAgICAvKiBSZW1vdGUtT25seSAqLworICAgICAgICAgICAgb3B0 aGxwW2ldID0gIlJlbW90ZS1vbmx5IChtYWtlcyBJRiBSRU1PVEUgdHJ1ZSkiOworICAgICAgICAg ICAgYXJnaGxwW2ldID0gTlVMTDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2Ug J1MnOiAgICAgICAgICAgICAgICAgICAgIC8qICJTdGF5IiAtIGVudGVyIGludGVyYWN0aXZlICov CisgICAgICAgICAgICBvcHRobHBbaV0gPSAiU3RheSAoZW50ZXIgY29tbWFuZCBwYXJzZXIgYWZ0 ZXIgYWN0aW9uIG9wdGlvbnMpIjsKKyAgICAgICAgICAgIGFyZ2hscFtpXSA9IE5VTEw7CisgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlICdUJzogICAgICAgICAgICAgICAgICAgICAv KiBUZXh0IGZpbGUgdHJhbnNmZXIgbW9kZSAqLworICAgICAgICAgICAgb3B0aGxwW2ldID0gIlRy YW5zZmVyIGZpbGVzIGluIFRleHQgbW9kZSI7CisgICAgICAgICAgICBhcmdobHBbaV0gPSBOVUxM OworICAgICAgICAgICAgYnJlYWs7CisjaWZkZWYgQU5ZWDI1CisgICAgICAgICAgY2FzZSAnVSc6 ICAgICAgICAgICAgICAgICAgICAgLyogWC4yNSBjYWxsIHVzZXIgZGF0YSAqLworICAgICAgICAg ICAgb3B0aGxwW2ldID0gIlguMjUgY2FsbCBVc2VyIGRhdGEiOworICAgICAgICAgICAgYXJnaGxw W2ldID0gIkNhbGwtdXNlci1kYXRhIHN0cmluZyI7CisgICAgICAgICAgICBicmVhazsKKyNlbmRp ZiAvKiBBTllYMjUgKi8KKyAgICAgICAgICBjYXNlICdWJzogICAgICAgICAgICAgICAgICAgICAv KiBObyBhdXRvbWF0aWMgZmlsZXR5cGUgc3dpdGNoaW5nICovCisgICAgICAgICAgICBvcHRobHBb aV0gPSAiRGlzYWJsZSBhdXRvbWF0aWMgcGVyLWZpbGUgdGV4dC9iaW5hcnkgc3dpdGNoaW5nIjsK KyAgICAgICAgICAgIGFyZ2hscFtpXSA9IE5VTEw7CisgICAgICAgICAgICBicmVhazsKKyNpZmRl ZiBDT01NRU5UCisjaWZkZWYgT1MyCisgICAgICAgICAgY2FzZSAnVyc6ICAgICAgICAgICAgICAg ICAgICAgLyogV2luMzIgV2luZG93IEhhbmRsZSAqLworICAgICAgICAgICAgb3B0aGxwW2ldID0g IiI7CisgICAgICAgICAgICBhcmdobHBbaV0gPSBOVUxMOworICAgICAgICAgICAgYnJlYWs7Cisj ZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogQ09NTUVOVCAqLworI2lmZGVmIEFOWVgyNQorICAg ICAgICAgIGNhc2UgJ1gnOiAgICAgICAgICAgICAgICAgICAgIC8qIFNFVCBIT1NUIHRvIFguMjUg YWRkcmVzcyAqLworICAgICAgICAgICAgb3B0aGxwW2ldID0gIk1ha2UgYW4gWC4yNSBjb25uZWN0 aW9uIjsKKyAgICAgICAgICAgIGFyZ2hscFtpXSA9ICJYLjI1IG9yIFguMTIxIGFkZHJlc3MiOwor ICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogQU5ZWDI1ICovCisgICAgICAgICAgY2FzZSAn WSc6ICAgICAgICAgICAgICAgICAgICAgLyogTm8gaW5pdGlhbGl6YXRpb24gZmlsZSAqLworICAg ICAgICAgICAgb3B0aGxwW2ldID0gIlNraXAgaW5pdGlhbGl6YXRpb24gZmlsZSI7CisgICAgICAg ICAgICBhcmdobHBbaV0gPSBOVUxMOworICAgICAgICAgICAgYnJlYWs7CisjaWZkZWYgQU5ZWDI1 CisgICAgICAgICAgY2FzZSAnWic6ICAgICAgICAgICAgICAgICAgICAgLyogU0VUIEhPU1QgdG8g WC4yNSBmaWxlIGRlc2NyaXB0b3IgKi8KKyAgICAgICAgICAgIG9wdGhscFtpXSA9ICJNYWtlIGFu IFguMjUgY29ubmVjdGlvbiI7CisgICAgICAgICAgICBhcmdobHBbaV0gPSAiTnVtZXJpYyBmaWxl IGRlc2NyaXB0b3Igb2Ygb3BlbiBYLjI1IGNvbm5lY3Rpb24iOworICAgICAgICAgICAgYnJlYWs7 CisjZW5kaWYgLyogQU5ZWDI1ICovCisgICAgICAgICAgY2FzZSAnYSc6ICAgICAgICAgICAgICAg ICAgICAgLyogYXMtbmFtZSAqLworICAgICAgICAgICAgb3B0aGxwW2ldID0gIkFzLW5hbWUgZm9y IGZpbGUocykgaW4gLXMsIC1yLCBvciAtZyI7CisgICAgICAgICAgICBhcmdobHBbaV0gPSAiQXMt bmFtZSBzdHJpbmcgKGFsdGVybmF0aXZlIGZpbGVuYW1lKSI7CisgICAgICAgICAgICBicmVhazsK KyAgICAgICAgICBjYXNlICdiJzogICAgICAgICAgICAgICAgICAgICAvKiBTZXQgYml0cy1wZXIt c2Vjb25kIGZvciBzZXJpYWwgKi8KKyAgICAgICAgICAgIG9wdGhscFtpXSA9ICJTcGVlZCBmb3Ig c2VyaWFsIGRldmljZSI7CisgICAgICAgICAgICBhcmdobHBbaV0gPSAiTnVtZXJpYyBCaXRzIHBl ciBzZWNvbmQiOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSAnYyc6ICAgICAg ICAgICAgICAgICAgICAgLyogQ29ubmVjdCBiZWZvcmUgKi8KKyAgICAgICAgICAgIG9wdGFjdFtp XSA9IDE7CisgICAgICAgICAgICBvcHRobHBbaV0gPSAiQ09OTkVDVCBiZWZvcmUgdHJhbnNmZXJy aW5nIGZpbGVzIjsKKyAgICAgICAgICAgIGFyZ2hscFtpXSA9IE5VTEw7CisgICAgICAgICAgICBi cmVhazsKKyAgICAgICAgICBjYXNlICdkJzogICAgICAgICAgICAgICAgICAgICAvKiBERUJVRyAq LworICAgICAgICAgICAgb3B0aGxwW2ldID0gIkNyZWF0ZSBkZWJ1Zy5sb2cgZmlsZSAoYSBzZWNv bmQgLWQgYWRkcyB0aW1lc3RhbXBzKSI7CisgICAgICAgICAgICBhcmdobHBbaV0gPSBOVUxMOwor ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSAnZSc6ICAgICAgICAgICAgICAgICAg ICAgLyogRXh0ZW5kZWQgcGFja2V0IGxlbmd0aCAqLworICAgICAgICAgICAgb3B0aGxwW2ldID0g Ik1heGltdW0gbGVuZ3RoIGZvciBpbmNvbWluZyBmaWxlLXRyYW5zZmVyIHBhY2tldHMiOworICAg ICAgICAgICAgYXJnaGxwW2ldID0gIkxlbmd0aCBpbiBieXRlcyI7CisgICAgICAgICAgICBicmVh azsKKyAgICAgICAgICBjYXNlICdmJzogICAgICAgICAgICAgICAgICAgICAvKiBmaW5pc2ggKi8K KyAgICAgICAgICAgIG9wdGFjdFtpXSA9IDE7CisgICAgICAgICAgICBvcHRobHBbaV0gPSAiU2Vu ZCBGaW5pc2ggY29tbWFuZCB0byBhIEtlcm1pdCBzZXJ2ZXIiOworICAgICAgICAgICAgYXJnaGxw W2ldID0gTlVMTDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgJ2cnOiAgICAg ICAgICAgICAgICAgICAgIC8qIGdldCAqLworICAgICAgICAgICAgb3B0YWN0W2ldID0gMTsKKyAg ICAgICAgICAgIG9wdGhscFtpXSA9ICJHRVQgZmlsZShzKSBmcm9tIGEgS2VybWl0IHNlcnZlciI7 CisgICAgICAgICAgICBhcmdobHBbaV0gPSAiUmVtb3RlIGZpbGUgc3BlY2lmaWNhdGlvbiI7Cisg ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlICdoJzogICAgICAgICAgICAgICAgICAg ICAvKiBoZWxwICovCisgICAgICAgICAgICBvcHRhY3RbaV0gPSAxOworI2lmZGVmIE9TMk9SVU5J WAorICAgICAgICAgICAgb3B0aGxwW2ldID0KKwkgICAgICAiUHJpbnQgdGhpcyBtZXNzYWdlIChw aXBlIHRocnUgJ21vcmUnIHRvIHByZXZlbnQgc2Nyb2xsaW5nKSI7CisjZWxzZQorCSAgICAgICJQ cmludCB0aGlzIG1lc3NhZ2UiOworI2VuZGlmIC8qIE9TMk9SVU5JWCAqLworICAgICAgICAgICAg YXJnaGxwW2ldID0gTlVMTDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgJ2kn OiAgICAgICAgICAgICAgICAgICAgIC8qIFRyZWF0IGZpbGVzIGFzIGJpbmFyeSAqLworICAgICAg ICAgICAgb3B0aGxwW2ldID0iVHJhbnNmZXIgZmlsZXMgaW4gYmluYXJ5IG1vZGUiOworICAgICAg ICAgICAgYXJnaGxwW2ldID0gTlVMTDsKKyAgICAgICAgICAgIGJyZWFrOworI2lmZGVmIFRDUFNP Q0tFVAorICAgICAgICAgIGNhc2UgJ2onOiAgICAgICAgICAgICAgICAgICAgIC8qIFNFVCBIT1NU IChUQ1AvSVAgc29ja2V0KSAqLworICAgICAgICAgICAgb3B0aGxwW2ldID0gIk1ha2UgYSBUQ1Ag Y29ubmVjdGlvbiI7CisgICAgICAgICAgICBhcmdobHBbaV0gPQorCSAgICAgICJUQ1AgaG9zdCBu YW1lL2FkZHJlc3MgYW5kIG9wdGlvbmFsIHNlcnZpY2UgbmFtZSBvciBudW1iZXIiOworICAgICAg ICAgICAgYnJlYWs7CisjZW5kaWYgLyogVENQU09DS0VUICovCisgICAgICAgICAgY2FzZSAnayc6 ICAgICAgICAgICAgICAgICAgICAgLyogcmVjZWl2ZSB0byBzdGRvdXQgKi8KKyAgICAgICAgICAg IG9wdGFjdFtpXSA9IDE7CisgICAgICAgICAgICBvcHRobHBbaV0gPSAiUkVDRUlWRSBmaWxlKHMp IHRvIHN0YW5kYXJkIG91dHB1dCI7CisgICAgICAgICAgICBhcmdobHBbaV0gPSBOVUxMOworICAg ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSAnbCc6ICAgICAgICAgICAgICAgICAgICAg LyogU0VUIExJTkUgKi8KKyAgICAgICAgICAgIG9wdGhscFtpXSA9ICJNYWtlIGNvbm5lY3Rpb24g b24gc2VyaWFsIGNvbW11bmljYXRpb25zIGRldmljZSI7CisgICAgICAgICAgICBhcmdobHBbaV0g PSAiU2VyaWFsIGRldmljZSBuYW1lIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNh c2UgJ20nOiAgICAgICAgICAgICAgICAgICAgIC8qIE1vZGVtIHR5cGUgKi8KKyAgICAgICAgICAg IG9wdGhscFtpXSA9ICJNb2RlbSB0eXBlIGZvciB1c2Ugd2l0aCAtbCBkZXZpY2UiOworICAgICAg ICAgICAgYXJnaGxwW2ldID0gIk1vZGVtIG5hbWUgYXMgaW4gU0VUIE1PREVNIFRZUEUgY29tbWFu ZCI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlICduJzogICAgICAgICAgICAg ICAgICAgICAvKiBjb25uZWN0IGFmdGVyICovCisgICAgICAgICAgICBvcHRhY3RbaV0gPSAxOwor ICAgICAgICAgICAgb3B0aGxwW2ldID0gIkNPTk5FQ1QgYWZ0ZXIgdHJhbnNmZXJyaW5nIGZpbGVz IjsKKyAgICAgICAgICAgIGFyZ2hscFtpXSA9IE5VTEw7CisgICAgICAgICAgICBicmVhazsKKyNp ZmRlZiBBTllYMjUKKyAgICAgICAgICBjYXNlICdvJzogICAgICAgICAgICAgICAgICAgICAvKiBY LjI1IGNsb3NlZCB1c2VyIGdyb3VwICovCisgICAgICAgICAgICBvcHRobHBbaV0gPSAiWC4yNSBj bG9zZWQgdXNlciBncm91cCI7CisgICAgICAgICAgICBhcmdobHBbaV0gPSAiVXNlciBncm91cCBz dHJpbmciOworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogQU5ZWDI1ICovCisgICAgICAg ICAgY2FzZSAncCc6ICAgICAgICAgICAgICAgICAgICAgLyogU0VUIFBBUklUWSAqLworICAgICAg ICAgICAgb3B0aGxwW2ldID0gIlBhcml0eSI7CisgICAgICAgICAgICBhcmdobHBbaV0gPSAiT25l IG9mIHRoZSBmb2xsb3dpbmc6IGV2ZW4sIG9kZCwgbWFyaywgbm9uZSwgc3BhY2UiOworICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSAncSc6ICAgICAgICAgICAgICAgICAgICAgLyog UXVpZXQgKi8KKyAgICAgICAgICAgIG9wdGhscFtpXSA9ICJRdWlldCAoc3VwcHJlc3MgbW9zdCBt ZXNzYWdlcykiOworICAgICAgICAgICAgYXJnaGxwW2ldID0gTlVMTDsKKyAgICAgICAgICAgIGJy ZWFrOworICAgICAgICAgIGNhc2UgJ3InOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlY2VpdmUg Ki8KKyAgICAgICAgICAgIG9wdGFjdFtpXSA9IDE7CisgICAgICAgICAgICBvcHRobHBbaV0gPSAi UkVDRUlWRSBmaWxlKHMpIjsKKyAgICAgICAgICAgIGFyZ2hscFtpXSA9IE5VTEw7CisgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgICBjYXNlICdzJzogICAgICAgICAgICAgICAgICAgICAvKiBz ZW5kICovCisgICAgICAgICAgICBvcHRhY3RbaV0gPSAxOworICAgICAgICAgICAgb3B0aGxwW2ld ID0gIlNFTkQgZmlsZShzKSI7CisgICAgICAgICAgICBhcmdobHBbaV0gPSAiT25lIG9yIG1vcmUg ZmlsZSBzcGVjaWZpY2F0aW9ucyI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNl ICd0JzogICAgICAgICAgICAgICAgICAgICAvKiBMaW5lIHR1cm5hcm91bmQgaGFuZHNoYWtlICov CisgICAgICAgICAgICBvcHRobHBbaV0gPSAiWE9OIFR1cm5hcm91bmQgY2hhcmFjdGVyIGZvciBo YWxmLWR1cGxleCBjb25uZWN0aW9ucyI7CisgICAgICAgICAgICBhcmdobHBbaV0gPSBOVUxMOwor ICAgICAgICAgICAgYnJlYWs7CisjaWZkZWYgQU5ZWDI1CisgICAgICAgICAgY2FzZSAndSc6ICAg ICAgICAgICAgICAgICAgICAgLyogWC4yNSByZXZlcnNlIGNoYXJnZSBjYWxsICovCisgICAgICAg ICAgICBvcHRobHBbaV0gPSAiWC4yNSByZXZlcnNlIGNoYXJnZSBjYWxsIjsKKyAgICAgICAgICAg IGFyZ2hscFtpXSA9IE5VTEw7CisgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBBTllYMjUg Ki8KKyAgICAgICAgICBjYXNlICd2JzogICAgICAgICAgICAgICAgICAgICAvKiBWaW5kb3cgc2l6 ZSAqLworICAgICAgICAgICAgb3B0aGxwW2ldID0gIldpbmRvdyBzaXplIjsKKyAgICAgICAgICAg IGFyZ2hscFtpXSA9ICJOdW1iZXIsIDEgdG8gMzIiOworICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICAgY2FzZSAndyc6ICAgICAgICAgICAgICAgICAgICAgLyogV3JpdGVvdmVyICovCisgICAg ICAgICAgICBvcHRobHBbaV0gPSAiSW5jb21pbmcgZmlsZXMgV3JpdGUgb3ZlciBleGlzdGluZyBm aWxlcyI7CisgICAgICAgICAgICBhcmdobHBbaV0gPSBOVUxMOworICAgICAgICAgICAgYnJlYWs7 CisgICAgICAgICAgY2FzZSAneCc6ICAgICAgICAgICAgICAgICAgICAgLyogU2VydmVyICovCisg ICAgICAgICAgICBvcHRhY3RbaV0gPSAxOworICAgICAgICAgICAgb3B0aGxwW2ldID0gIkJlIGEg S2VybWl0IFNFUlZFUiI7CisgICAgICAgICAgICBhcmdobHBbaV0gPSBOVUxMOworICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgICAgY2FzZSAneSc6ICAgICAgICAgICAgICAgICAgICAgLyogQWx0 ZXJuYXRlIGluaXQtZmlsZSBuYW1lICovCisgICAgICAgICAgICBvcHRobHBbaV0gPSAiQWx0ZXJu YXRpdmUgaW5pdGlhbGl6YXRpb24gZmlsZSI7CisgICAgICAgICAgICBhcmdobHBbaV0gPSAiRmls ZSBzcGVjaWZpY2F0aW9uIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgJ3on OiAgICAgICAgICAgICAgICAgICAgIC8qIE5vdCBiYWNrZ3JvdW5kICovCisgICAgICAgICAgICBv cHRobHBbaV0gPSAiRm9yY2UgZm9yZWdyb3VuZCBiZWhhdmlvciI7CisgICAgICAgICAgICBhcmdo bHBbaV0gPSBOVUxMOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAg ICAgICAgICAgIG9wdGhscFtpXSA9IE5VTEw7CisgICAgICAgICAgICBhcmdobHBbaV0gPSBOVUxM OworICAgICAgICB9CisgICAgfQorICAgIGluaXhvcHRobHAoKTsKK30KKworaW50Citkb3hhcmco cyxwcmUpIGNoYXIgKiogczsgaW50IHByZTsgeworI2lmZGVmIElLU0QKKyNpZmRlZiBDS19MT0dJ TgorICAgIGV4dGVybiBpbnQgY2t4c3lzbG9nLCBja3h3dG1wLCBja3hhbm9uOworI2lmZGVmIFVO SVgKKyAgICBleHRlcm4gaW50IGNreHByaXY7CisjZW5kaWYgLyogVU5JWCAqLworI2lmZGVmIENL X1BFUk1TCisgICAgZXh0ZXJuIGludCBja3hwZXJtczsKKyNlbmRpZiAvKiBDS19QRVJNUyAqLwor ICAgIGV4dGVybiBjaGFyICogYW5vbmZpbGUsICogdXNlcmZpbGUsICogYW5vbnJvb3Q7CisjZW5k aWYgLyogQ0tfTE9HSU4gKi8KKyNpZmRlZiBDS1dUTVAKKyAgICBleHRlcm4gY2hhciAqIHd0bXBm aWxlOworI2VuZGlmIC8qIENLV1RNUCAqLworI2VuZGlmIC8qIElLU0QgKi8KKyAgICBleHRlcm4g aW50IHNydmNkbXNnOworICAgIGV4dGVybiBjaGFyICogY2Rtc2dmaWxlW10sICogY2Rtc2dzdHI7 CisgICAgY2hhciB0bXBidWZbQ0tNQVhQQVRIKzFdOworCisgICAgaW50IGksIHgsIHksIHosIGhh dmVhcmcgPSAwOworICAgIGNoYXIgYnVmW1hBUkdCVUZMXSwgYywgKiBwOworCisgICAgaWYgKG54 YXJncyA8IDEpCisgICAgICByZXR1cm4oLTEpOworCisgICAgYyA9ICooKnMgKyAxKTsgICAgICAg ICAgICAgICAgICAgICAgLyogSHlwaGVuIG9yIFBsdXMgc2lnbiAqLworCisgICAgcCA9ICpzICsg MjsKKyAgICBmb3IgKGkgPSAwOyAqcCAmJiBpIDwgWEFSR0JVRkw7IGkrKykgeworICAgICAgICBi dWZbaV0gPSAqcCsrOworICAgICAgICBpZiAoYnVmW2ldID09ICc9JyB8fCBidWZbaV0gPT0gJzon KSB7CisgICAgICAgICAgICBoYXZlYXJnID0gMTsKKyAgICAgICAgICAgIGJ1ZltpXSA9IE5VTDsK KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9IGVsc2UgaWYgKGJ1ZltpXSA8ICcgJykgewor ICAgICAgICAgICAgYnVmW2ldID0gTlVMOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K KyAgICB9CisgICAgaWYgKGkgPiBYQVJHQlVGTCAtIDEpCisgICAgICByZXR1cm4oLTEpOworICAg IGJ1ZltpXSA9IE5VTDsKKworICAgIHggPSBsb29rdXAoeGFyZ3RhYixidWYsbnhhcmdzLCZ6KTsg IC8qIExvb2t1cCB0aGUgb3B0aW9uIGtleXdvcmQgKi8KKworICAgIGlmICh4IDwgMCkgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIE9uIGFueSBraW5kIG9mIGVycm9yICovCisgICAgICByZXR1 cm4oLTEpOyAgICAgICAgICAgICAgICAgICAgICAgLyogZmFpbC4gKi8KKworICAgIC8qIEhhbmRs ZSBwcmVzY2FuIHZlcnN1cyBwb3N0LWluaXRpYWxpemF0aW9uIGZpbGUgKi8KKworICAgIGlmICgo KHhhcmd0YWJbel0uZmxncyAmIENNX1BSRSkgfHwgKGMgPT0gJysnKSkgJiYgIXByZSkKKyAgICAg IHJldHVybigwKTsKKyAgICBlbHNlIGlmIChwcmUgJiYgISh4YXJndGFiW3pdLmZsZ3MgJiBDTV9Q UkUpICYmIChjICE9ICcrJykpCisgICAgICByZXR1cm4oMCk7CisKKyAgICAvKiBFbnN1cmUgdGhh dCBhcmd1bWVudCBpcyBnaXZlbiBpZiBhbmQgb25seSBpZiByZXF1aXJlZCAqLworCisgICAgcCA9 IGhhdmVhcmcgPyAqcyArIGkgKyAzIDogTlVMTDsKKworICAgIGlmICgoeGFyZ3RhYlt6XS5mbGdz ICYgQ01fQVJHKSAmJiAhaGF2ZWFyZykKKyAgICAgIHJldHVybigtMSk7CisgICAgZWxzZSBpZiAo KCEoeGFyZ3RhYlt6XS5mbGdzICYgQ01fQVJHKSkgJiYgaGF2ZWFyZykKKyAgICAgIHJldHVybigt MSk7CisKKyAgICBzd2l0Y2ggKHgpIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBPSyB0byBw cm9jZXNzIHRoaXMgb3B0aW9uLi4uICovCisjaWZkZWYgQ0tTWVNMT0cKKyAgICAgIGNhc2UgWEFf U1lTTDogICAgICAgICAgICAgICAgICAgICAvKiBJS1M6IFN5c2xvZyBsZXZlbCAqLworICAgICAg ICB5ID0gMDsKKyAgICAgICAgaWYgKGlzZGlnaXQoKnApKSB7CisgICAgICAgICAgICB3aGlsZSAo KnApIHsKKyAgICAgICAgICAgICAgICBpZiAoKnAgPCAnMCcgfHwgKnAgPiAnOScpCisgICAgICAg ICAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICAgICAgICAgIHkgPSB5ICogMTAgKyAoKnAr KyAtICcwJyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB5 ID0gbG9va3VwKG9rdGFiLHAsbm9rdGFiLCZ6KTsKKyAgICAgICAgICAgIGlmICh5ID4gMCkgeSA9 IFNZU0xHX0RGOyAgICAvKiBZZXMgPSBkZWZhdWx0IGxvZ2dpbmcgbGV2ZWwgKi8KKyAgICAgICAg fQorI2lmbmRlZiBTWVNMT0dMRVZFTAorICAgICAgICAvKiBJZiBzcGVjaWZpZWQgb24gY2MgY29t bWFuZCBsaW5lLCB1c2VyIGNhbid0IGNoYW5nZSBpdC4gKi8KKyAgICAgICAgaWYgKCFpbnNlcnZl cikgICAgICAgICAgICAgICAgICAvKiBEb24ndCBhbGxvdyB2b2x1bWlub3VzIHN5c2xvZ2dpbmcg Ki8KKyAgICAgICAgICBpZiAoeSA+IFNZU0xHX0ZBKSAgICAgICAgICAgICAvKiBieSBvcmRpbmFy eSB1c2Vycy4gKi8KKyAgICAgICAgICAgIHkgPSBTWVNMR19GQTsKKyNlbmRpZiAvKiBTWVNMT0dM RVZFTCAqLworICAgICAgICBpZiAoeSA8IDApIHJldHVybigtMSk7CisjaWZkZWYgREVCVUcKKyAg ICAgICAgaWYgKHkgPj0gU1lTTEdfREIpCisgICAgICAgICAgaWYgKCFkZWJsb2cpCisgICAgICAg ICAgICBkZWJsb2cgPSBkZWJvcG4oImRlYnVnLmxvZyIsMCk7CisjZW5kaWYgLyogREVCVUcgKi8K KyNpZmRlZiBTWVNMT0dMRVZFTAorICAgICAgICAvKiBJZiBzcGVjaWZpZWQgb24gY2MgY29tbWFu ZCBsaW5lLCB1c2VyIGNhbid0IGNoYW5nZSBpdC4gKi8KKyAgICAgICAgeSA9IFNZU0xPR0xFVkVM OworI2VuZGlmIC8qIFNZU0xPR0xFVkVMICovCisgICAgICAgIGNreHN5c2xvZyA9IHk7CisgICAg ICAgIC8qIHByaW50ZigiY2t4c3lzbG9nPSVkXG4iLGNreHN5c2xvZyk7ICovCisgICAgICAgIGJy ZWFrOworI2VuZGlmIC8qIENLU1lTTE9HICovCisKKyNpZmRlZiBDS19MT0dJTgorI2lmZGVmIENL V1RNUAorICAgICAgY2FzZSBYQV9XVE1QOiAgICAgICAgICAgICAgICAgICAgIC8qIElLUzogd3Rt cCBsb2cgKi8KKyAgICAgICAgeSA9IGxvb2t1cChva3RhYixwLG5va3RhYiwmeik7CisgICAgICAg IGlmICh5IDwgMCkgcmV0dXJuKC0xKTsKKyAgICAgICAgY2t4d3RtcCA9IHk7CisgICAgICAgIC8q IHByaW50ZigiY2t4d3RtcD0lZFxuIixja3h3dG1wKTsgKi8KKyAgICAgICAgYnJlYWs7CisKKyAg ICAgIGNhc2UgWEFfV1RGSTogICAgICAgICAgICAgICAgICAgICAvKiBJS1M6IHd0bXAgbG9nZmls ZSAqLworICAgICAgICBpZiAoemZucWZwKHAsQ0tNQVhQQVRILHRtcGJ1ZikpCisgICAgICAgICAg cCA9IHRtcGJ1ZjsKKyAgICAgICAgbWFrZXN0cigmd3RtcGZpbGUscCk7CisgICAgICAgIC8qIHBy aW50Zigid3RtcGZpbGU9JXNcbiIsd3RtcGZpbGUpOyAqLworICAgICAgICBicmVhazsKKyNlbmRp ZiAvKiBDS1dUTVAgKi8KKworICAgICAgY2FzZSBYQV9BTk9OOiAgICAgICAgICAgICAgICAgICAg IC8qIElLUzogQW5vbnltb3VzIGxvZ2luIGFsbG93ZWQgKi8KKyAgICAgICAgeSA9IGxvb2t1cChv a3RhYixwLG5va3RhYiwmeik7CisgICAgICAgIGlmICh5IDwgMCkgcmV0dXJuKC0xKTsKKyAgICAg ICAgY2t4YW5vbiA9IHk7CisgICAgICAgIC8qIHByaW50ZigiY2t4YW5vbj0lZFxuIixja3hhbm9u KTsgKi8KKyAgICAgICAgYnJlYWs7CisKKyNpZmRlZiBVTklYCisgICAgICBjYXNlIFhBX1BSSVY6 ICAgICAgICAgICAgICAgICAgICAgLyogSUtTOiBQcml2J2QgbG9naW4gYWxsb3dlZCAqLworICAg ICAgICB5ID0gbG9va3VwKG9rdGFiLHAsbm9rdGFiLCZ6KTsKKyAgICAgICAgaWYgKHkgPCAwKSBy ZXR1cm4oLTEpOworICAgICAgICBja3hwcml2ID0geTsKKyAgICAgICAgLyogcHJpbnRmKCJja3hw cml2PSVkXG4iLGNreHByaXYpOyAqLworICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBVTklYICov CisKKyNpZmRlZiBDS19QRVJNUworICAgICAgY2FzZSBYQV9QRVJNOiAgICAgICAgICAgICAgICAg ICAgIC8qIElLUzogQW5vbnltb3VzIFVwbG9hZCBQZXJtaXNzaW9ucyAqLworICAgICAgICB5ID0g MDsKKyAgICAgICAgd2hpbGUgKCpwKSB7CisgICAgICAgICAgICBpZiAoKnAgPCAnMCcgfHwgKnAg PiAnNycpCisgICAgICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAgICAgICB5ID0geSAqIDgg KyAoKnArKyAtICcwJyk7CisgICAgICAgIH0KKyAgICAgICAgY2t4cGVybXMgPSB5OworICAgICAg ICAvKiBwcmludGYoImNreHBlcm1zPSUwNG9cbiIsY2t4cGVybXMpOyAqLworICAgICAgICBicmVh azsKKyNlbmRpZiAvKiBDS19QRVJNUyAqLworCisgICAgICBjYXNlIFhBX0FORkk6ICAgICAgICAg ICAgICAgICAgICAgLyogQW5vbnltb3VzIGluaXQgZmlsZSAqLworCWlmICghaXNhYnNvbHV0ZShw KSkKKwkgIGlmICh6Zm5xZnAocCxDS01BWFBBVEgsdG1wYnVmKSkKKwkgICAgcCA9IHRtcGJ1ZjsK KyAgICAgICAgbWFrZXN0cigmYW5vbmZpbGUscCk7CisgICAgICAgIC8qIHByaW50ZigiYW5vbmZp bGU9JXNcbiIsYW5vbmZpbGUpOyAqLworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBYQV9V U0ZJOiAgICAgICAgICAgICAgICAgICAgIC8qIElLUzogRm9yYmlkZGVuIHVzZXIgZmlsZSAqLwor CWlmICghaXNhYnNvbHV0ZShwKSkKKwkgIGlmICh6Zm5xZnAocCxDS01BWFBBVEgsdG1wYnVmKSkK KwkgICAgcCA9IHRtcGJ1ZjsKKyAgICAgICAgbWFrZXN0cigmdXNlcmZpbGUscCk7CisgICAgICAg IC8qIHByaW50ZigidXNlcmZpbGU9JXNcbiIsdXNlcmZpbGUpOyAqLworICAgICAgICBicmVhazsK KworICAgICAgY2FzZSBYQV9ST09UOiAgICAgICAgICAgICAgICAgICAgIC8qIElLUzogQW5vbnlt b3VzIHJvb3QgKi8KKwlpZiAoIWlzYWJzb2x1dGUocCkpCisJICBpZiAoemZucWZwKHAsQ0tNQVhQ QVRILHRtcGJ1ZikpCisJICAgIHAgPSB0bXBidWY7CisgICAgICAgIG1ha2VzdHIoJmFub25yb290 LHApOworICAgICAgICAvKiBwcmludGYoImFub25yb290PSVzXG4iLGFub25yb290KTsgKi8KKyAg ICAgICAgYnJlYWs7CisjZW5kaWYgLyogQ0tfTE9HSU4gKi8KKworICAgICAgY2FzZSBYQV9DREZJ OiAgICAgICAgICAgICAgICAgICAgIC8qIENEIGZpbGVuYW1lICovCisjaWZkZWYgQ09NTUVOVAor ICAgICAgICAvKiBEbyBOT1QgZXhwYW5kIHRoaXMgb25lISAqLworICAgICAgICBpZiAoemZucWZw KHAsQ0tNQVhQQVRILHRtcGJ1ZikpCisgICAgICAgICAgcCA9IHRtcGJ1ZjsKKyNlbmRpZiAvKiBD T01NRU5UICovCisgICAgICAgIG1ha2VsaXN0KHAsY2Rtc2dmaWxlLDE2KTsKKyAgICAgICAgbWFr ZXN0cigmY2Rtc2dzdHIscCk7CisgICAgICAgIC8qIHByaW50ZigiY2Rtc2dzdHI9JXNcbiIsY2Rt c2dzdHIpOyAqLworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBYQV9DRE1TOiAgICAgICAg ICAgICAgICAgICAgIC8qIENEIG1lc3NhZ2VzICovCisgICAgICAgIHkgPSBsb29rdXAob2t0YWIs cCxub2t0YWIsJnopOworICAgICAgICBpZiAoeSA8IDApIHJldHVybigtMSk7CisgICAgICAgIHNy dmNkbXNnID0geTsKKyAgICAgICAgLyogcHJpbnRmKCJzcnZjZG1zZz0lZFxuIixzcnZjZG1zZyk7 ICovCisgICAgICAgIGJyZWFrOworCisjaWZuZGVmIE5PWEZFUgorICAgICAgY2FzZSBYQV9JS0xH OiAgICAgICAgICAgICAgICAgICAgIC8qIFRyYW5zZmVyIGxvZyBvbi9vZmYgKi8KKyAgICAgICAg eSA9IGxvb2t1cChva3RhYixwLG5va3RhYiwmeik7CisgICAgICAgIGlmICh5IDwgMCkgcmV0dXJu KC0xKTsKKyAgICAgICAgeGZlcmxvZyA9IHk7CisgICAgICAgIC8qIHByaW50ZigieGZlcmxvZz0l ZFxuIix4ZmVybG9nKTsgKi8KKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgWEFfSUtGSTog ICAgICAgICAgICAgICAgICAgICAvKiBUcmFuc2ZlciBsb2cgZmlsZSAqLworCWlmICghaXNhYnNv bHV0ZShwKSkKKwkgIGlmICh6Zm5xZnAocCxDS01BWFBBVEgsdG1wYnVmKSkKKwkgICAgcCA9IHRt cGJ1ZjsKKyAgICAgICAgbWFrZXN0cigmeGZlcmZpbGUscCk7CisgICAgICAgIHhmZXJsb2cgPSAx OworICAgICAgICAvKiBwcmludGYoInhmZXJmaWxlPSVzXG4iLHhmZXJmaWxlKTsgKi8KKyAgICAg ICAgYnJlYWs7CisKKyAgICAgIGNhc2UgWEFfQkFGSTogICAgICAgICAgICAgICAgICAgICAvKiBJ S1M6IGJhbm5lciAoZ3JlZXRpbmcpIGZpbGUgKi8KKwlpZiAoIWlzYWJzb2x1dGUocCkpCisJICBp ZiAoemZucWZwKHAsQ0tNQVhQQVRILHRtcGJ1ZikpCisJICAgIHAgPSB0bXBidWY7CisgICAgICAg IG1ha2VzdHIoJmJhbm5lcmZpbGUscCk7CisgICAgICAgIC8qIHByaW50ZigiYmFubmVyZmlsZT0l c1xuIixiYW5uZXJmaWxlKTsgKi8KKyAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogTk9YRkVSICov CisKKyNpZm5kZWYgTk9IRUxQCisgICAgICBjYXNlIFhBX0hFTFA6ICAgICAgICAgICAgICAgICAg ICAgLyogSGVscCAqLworICAgICAgICAvKiBwcmludGYoImhlbHBcbiIpOyAqLworICAgICAgICBm b3IgKGkgPSAwOyBpIDw9IFhBX01BWDsgaSsrKQorICAgICAgICAgIGlmICh4b3B0aGxwW2ldKQor ICAgICAgICAgICAgcHJpbnRmKCIlc1xuICAgJXNcblxuIix4b3B0aGxwW2ldLHhhcmdobHBbaV0p OworICAgICAgICBpZiAoc3RheWZsZyB8fCB3aGF0ID09IFdfQ09NTUFORCkKKyAgICAgICAgICBi cmVhazsKKyAgICAgICAgZWxzZQorICAgICAgICAgIGRvZXhpdChHT09EX0VYSVQsLTEpOworI2Vu ZGlmIC8qIE5PSEVMUCAqLworCisjaWZuZGVmIE5PSEVMUAorICAgICAgY2FzZSBYQV9IRUZJOiAg ICAgICAgICAgICAgICAgICAgIC8qIElLUzogY3VzdG9tIGhlbHAgZmlsZSAqLworCWlmICghaXNh YnNvbHV0ZShwKSkKKwkgIGlmICh6Zm5xZnAocCxDS01BWFBBVEgsdG1wYnVmKSkKKwkgICAgcCA9 IHRtcGJ1ZjsKKyAgICAgICAgbWFrZXN0cigmaGVscGZpbGUscCk7CisgICAgICAgIC8qIHByaW50 ZigiaGVscGZpbGU9JXNcbiIsaGVscGZpbGUpOyAqLworICAgICAgICBicmVhazsKKyNlbmRpZiAv KiBOT0hFTFAgKi8KKworI2lmZGVmIENLX0xPR0lOCisgICAgICBjYXNlIFhBX1RJTU86CisgICAg ICAgIGlmICghcmRpZ2l0cyhwKSkKKyAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICBsb2dp bnRpbW8gPSBhdG9pKHApOworICAgICAgICAvKiBwcmludGYoImxvZ2ludGltbz0lZFxuIixwKTsg Ki8KKyAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogQ0tfTE9HSU4gKi8KKworICAgICAgY2FzZSBY QV9OT0lOOiAgICAgICAgICAgICAgICAgICAgIC8qIE5vIGludGVycnVwdHMgKi8KKyNpZm5kZWYg Tk9JQ1AKKyAgICAgICAgY21kaW50ID0gMDsKKyNlbmRpZiAvKiBOT0lDUCAqLworCXhzdXNwZW5k ID0gMDsKKyAgICAgICAgYnJlYWs7CisKKyNpZmRlZiBVTklYCisgICAgICBjYXNlIFhBX1VOQlVG OgkJCS8qIFVuYnVmZmVyZWQgY29uc29sZSBpL28qLworCWJyZWFrOwkJCQkvKiBUaGlzIG9uZSBp cyBoYW5kbGVkIGluIGNrY21haS5jICovCisjZW5kaWYJLyogVU5JWCAqLworCisjaWZkZWYgSUtT REIKKyAgICAgIGNhc2UgWEFfREJGSTogeworICAgICAgICAgIGV4dGVybiBjaGFyICogZGJkaXIs ICogZGJmaWxlOworICAgICAgICAgIGV4dGVybiBpbnQgZGJlbmFibGVkOworICAgICAgICAgIHN0 cnVjdCB6Zm5mcCAqIHp6OworICAgICAgICAgIGlmICgoenogPSB6Zm5xZnAocCxDS01BWFBBVEgs dG1wYnVmKSkpIHsKKwkgICAgICBjaGFyICpzLCAqczIgPSBOVUxMOworICAgICAgICAgICAgICBt YWtlc3RyKCZkYmRpcix6ei0+ZnBhdGgpOworICAgICAgICAgICAgICBtYWtlc3RyKCZkYmZpbGUs enotPmZwYXRoKTsKKwkgICAgICBmb3IgKHMgPSBkYmRpcjsgKnM7IHMrKykgeworCQkgIGlmIChJ U0RJUlNFUCgqcykpCisJCSAgICBzMiA9IHMrMTsKKwkgICAgICB9CisJICAgICAgaWYgKHMyKSAq czIgPSBOVUw7CisJICAgICAgZGVidWcoRjExMCwiWEFfREJGSSBkYmRpciIsZGJkaXIsMCk7CisJ ICAgICAgZGVidWcoRjExMCwiWEFfREJGSSBkYmZpbGUiLGRiZmlsZSwwKTsKKyAgICAgICAgICAg ICAgZGJlbmFibGVkID0gMTsKKyAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisgICAgICB9 CisgICAgICBjYXNlIFhBX0RCQVM6IHsKKyAgICAgICAgICBleHRlcm4gaW50IGRiZW5hYmxlZDsK KyAgICAgICAgICB5ID0gbG9va3VwKG9rdGFiLHAsbm9rdGFiLCZ6KTsKKyAgICAgICAgICBpZiAo eSA8IDApIHJldHVybigtMSk7CisgICAgICAgICAgZGJlbmFibGVkID0geTsKKyAgICAgICAgICBi cmVhazsKKyAgICAgIH0KKyNlbmRpZiAvKiBJS1NEQiAqLworCisgICAgICBjYXNlIFhBX1ZFUlM6 IHsKKwkgIGV4dGVybiBjaGFyICogY2tfc192ZXIsICogY2tfc194dmVyOworCSAgcHJpbnRmKCIl cyIsY2tfc192ZXIpOworCSAgaWYgKCpja19zX3h2ZXIpCisJICAgIHByaW50ZigiIFslc11cbiIs Y2tfc194dmVyKTsKKwkgIHByaW50ZigiXG4iKTsKKwkgIGlmIChzdGF5ZmxnIHx8IHdoYXQgPT0g V19DT01NQU5EKQorCSAgICBicmVhazsKKwkgIGVsc2UKKwkgICAgZG9leGl0KEdPT0RfRVhJVCwt MSk7CisgICAgICB9CisjaWZuZGVmIE5PWEZFUgorI2lmZGVmIENLX1BFUk1TCisgICAgICBjYXNl IFhBX05QUk06IHsKKwkgIGV4dGVybiBpbnQgYXRscHJpLCBhdGxwcm8sIGF0Z3ByaSwgYXRncHJv OworCSAgYXRscHJpID0gMDsKKwkgIGF0bHBybyA9IDA7CisJICBhdGdwcmkgPSAwOworCSAgYXRn cHJvID0gMDsKKwkgIGJyZWFrOworICAgICAgfQorI2VuZGlmIC8qIENLX1BFUk1TICovCisjZW5k aWYgLyogTk9YRkVSICovCisKKyNpZmRlZiBLVUkKKyAgICAgIGNhc2UgWEFfU0NBTEU6CisgICAg ICAgIGt1aV9pbml0LnJlc2l6ZU1vZGUgPSAxOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug WEFfQ0hHRDoKKyAgICAgICAga3VpX2luaXQucmVzaXplTW9kZSA9IDI7CisgICAgICAgIGJyZWFr OworICAgICAgY2FzZSBYQV9XTUFYOgorICAgICAgICBrdWlfaW5pdC5uQ21kU2hvdyA9IFNXX01B WElNSVpFOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgWEFfV01JTjoKKyAgICAgICAga3Vp X2luaXQubkNtZFNob3cgPSBTV19NSU5JTUlaRTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNh c2UgWEFfWFBPUzoKKyAgICAgICAgaWYgKCFyZGlnaXRzKHApKQorICAgICAgICAgIHJldHVybigt MSk7CisJa3VpX2luaXQucG9zX2luaXQrKzsKKwlrdWlfaW5pdC5wb3NfeCA9IGF0b2kocCk7Cisg ICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIFhBX1lQT1M6CisgICAgICAgIGlmICghcmRpZ2l0 cyhwKSkKKyAgICAgICAgICByZXR1cm4oLTEpOworCWt1aV9pbml0LnBvc19pbml0Kys7CisJa3Vp X2luaXQucG9zX3kgPSBhdG9pKHApOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBYQV9G TkFNOiB7CisJICBleHRlcm4gc3RydWN0IF9rdWlfaW5pdCBrdWlfaW5pdDsKKwkgIGV4dGVybiBz dHJ1Y3Qga2V5dGFiICogdGVybV9mb250OworCSAgZXh0ZXJuIHN0cnVjdCBrZXl0YWIgKiBfdGVy bV9mb250OworCSAgZXh0ZXJuIGludCB0dF9mb250LCBudGVybWZvbnQ7CisJICBpbnQgeCwgejsK KwkgIGlmIChudGVybWZvbnQgPT0gMCkKKwkgICAgQnVpbGRGb250VGFibGUoJnRlcm1fZm9udCwg Jl90ZXJtX2ZvbnQsICZudGVybWZvbnQpOworCSAgaWYgKCEodGVybV9mb250ICYmIF90ZXJtX2Zv bnQgJiYgbnRlcm1mb250ID4gMCkpIHsKKyAgICAgICAgICAgIHByaW50ZigiP1VuYWJsZSB0byBj b25zdHJ1Y3QgRm9udCBGYWNlbmFtZSBUYWJsZVxuIik7CisJICAgIHJldHVybigwKTsKKyAgICAg ICAgICB9CisJICB4ID0gbG9va3VwKHRlcm1fZm9udCxwLG50ZXJtZm9udCwmeik7CisJICBpZiAo eCA8IDApIHsKKyAgICAgICAgICAgICAgeCA9IGxvb2t1cChfdGVybV9mb250LHAsbnRlcm1mb250 LCZ6KTsKKyAgICAgICAgICAgICAgaWYgKHggPCAwKSB7CisgICAgICAgICAgICAgICAgICBwcmlu dGYoIj9JbnZhbGlkIEZvbnQgRmFjZW5hbWU6ICVzXG4iLHApOworICAgICAgICAgICAgICAgICAg cmV0dXJuKDApOworICAgICAgICAgICAgICB9CisgICAgICAgICAgfQorCSAgdHRfZm9udCA9IHg7 CisJICBrdWlfaW5pdC5mYWNlX2luaXQrKzsKKwkgIG1ha2VzdHIoJmt1aV9pbml0LmZhY2VuYW1l LHRlcm1fZm9udFt6XS5rd2QpOworCSAgYnJlYWs7CisgICAgICB9CisgICAgICBjYXNlIFhBX0ZT SVo6IHsKKwkgIGV4dGVybiBzdHJ1Y3QgX2t1aV9pbml0IGt1aV9pbml0OworCSAgZXh0ZXJuIGlu dCB0dF9mb250X3NpemU7CisgICAgICAgICAgY2hhciAqIHE7CisgICAgICAgICAgaW50IGhhbGZw b2ludCA9IDA7CisKKwkgIGt1aV9pbml0LmZvbnRfaW5pdCsrOworICAgICAgICAgIGZvciAoIHE9 cCA7ICpxIDsgcSsrICkgeworICAgICAgICAgICAgICBpZiAoICpxID09ICcuJykgeworICAgICAg ICAgICAgICAgICAgKnErKyA9ICdcMCc7CisgICAgICAgICAgICAgICAgICBpZiAoIXJkaWdpdHMo cSkpCisgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgICAgICAgICAg IGlmICghKnEgfHwgYXRvaShxKSA9PSAwKQorICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAg ICAvKiBubyBoYWxmcG9pbnQgKi8KKyAgICAgICAgICAgICAgICAgIGhhbGZwb2ludCA9IDE7Cisg ICAgICAgICAgICAgICAgICBpZiAoYXRvaShxKSAhPSA1KQorICAgICAgICAgICAgICAgIHByaW50 ZigiPyBGb250IHNpemVzIGFyZSB0cmVhdGVkIGluIGhhbGYtcG9pbnQgaW5jcmVtZW50c1xuIik7 CisgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgIH0K KwkgIGlmICghcmRpZ2l0cyhwKSkKKwkgICAgcmV0dXJuKC0xKTsKKwkgIHR0X2ZvbnRfc2l6ZSA9 IGt1aV9pbml0LmZvbnRfc2l6ZSA9IDIgKiBhdG9pKHApICsgaGFsZnBvaW50OworCSAgYnJlYWs7 CisgICAgICB9CisgICAgICBjYXNlIFhBX05PTU46CisgICAgICAgIGt1aV9pbml0Lm5vbWVudWJh ciA9IDE7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBYQV9OT1RCOgorICAgICAgICBrdWlf aW5pdC5ub3Rvb2xiYXIgPSAxOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgWEFfTk9TQjoK KyAgICAgICAga3VpX2luaXQubm9zdGF0dXNiYXIgPSAxOworICAgICAgICBicmVhazsKKyAgICAg IGNhc2UgWEFfTk9CQVI6CisgICAgICAgIGt1aV9pbml0Lm5vbWVudWJhciA9IDE7CisgICAgICAg IGt1aV9pbml0Lm5vdG9vbGJhciA9IDE7CisgICAgICAgIGt1aV9pbml0Lm5vc3RhdHVzYmFyID0g MTsKKyAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogS1VJICovCisKKyNpZm5kZWYgTk9QVVNICisg ICAgY2FzZSBYQV9OT1BVU0g6CisgICAgICAgIG5vcHVzaCA9IDE7CisgICAgICAgIGJyZWFrOwor I2VuZGlmIC8qIE5PUFVTSCAqLworI2lmZGVmIE9TMgorICAgIGNhc2UgWEFfTE9DSzoKKyAgICAg ICAgdHRfc2Nyb2xsID0gMDsKKyAgICAgICAgdHRfZXNjYXBlID0gMDsKKyNpZm5kZWYgTk9QVVNI CisgICAgICAgIG5vcHVzaCA9IDE7CisjZW5kaWYKKyNpZmRlZiBLVUkKKyAgICAgICAga3VpX2lu aXQubm9tZW51YmFyID0gMTsKKyAgICAgICAga3VpX2luaXQubm90b29sYmFyID0gMTsKKyAgICAg ICAga3VpX2luaXQubm9zdGF0dXNiYXIgPSAxOworI2VuZGlmCisgICAgICAgIGJyZWFrOworI2lm ZGVmIEtVSQorICAgICAgY2FzZSBYQV9OT0NMT1NFOgorICAgICAgICBrdWlfaW5pdC5ub2Nsb3Nl ID0gMTsKKyAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogS1VJICovCisgICAgICBjYXNlIFhBX05P U0NST0xMOgorICAgICAgICB0dF9zY3JvbGwgPSAwOworICAgICAgICBicmVhazsKKyAgICAgIGNh c2UgWEFfTk9FU0NBUEU6CisgICAgICAgIHR0X2VzY2FwZSA9IDA7CisgICAgICAgIGJyZWFrOwor I2VuZGlmIC8qIE9TMiAqLworCisjaWZuZGVmIE5PTE9DQUwKKyAgICAgIGNhc2UgWEFfVEVSTTog ewkJCS8qIFRlcm1pbmFsIHR5cGUgKi8KKyAgICAgICAgICBleHRlcm4gc3RydWN0IGtleXRhYiB0 dHlwdGFiW107CisgICAgICAgICAgZXh0ZXJuIGludCBudHR5cDsKKyNpZmRlZiBUTkNPREUKKwkg IGV4dGVybiBjaGFyICogdG5fdGVybTsKKyNlbmRpZiAvKiBUTkNPREUgKi8KKyNpZmRlZiBPUzIK KwkgIGludCB4LCB6OworCSAgZXh0ZXJuIGludCB0dF90eXBlLCB0dF90eXBlX21vZGU7CisJICB4 ID0gbG9va3VwKHR0eXB0YWIscCxudHR5cCwmeik7CisJICBpZiAoeCA8IDApCisJICAgIHJldHVy bigtMSk7CisJICB0dF90eXBlX21vZGUgPSB0dF90eXBlID0geDsKKyNlbmRpZiAvKiBPUzIgKi8K KyNpZmRlZiBUTkNPREUKKwkgIG1ha2VzdHIoJnRuX3Rlcm0scCk7CisjZW5kaWYgLyogVE5DT0RF ICovCisJICBicmVhazsKKyAgICAgIH0KKyAgICAgIGNhc2UgWEFfQ1NFVDogewkJCS8qIFJlbW90 ZSBDaGFyYWN0ZXIgU2V0ICovCisjaWZuZGVmIE5PQ1NFVFMKKyNpZmRlZiBDS09VTkkKKyAgICAg ICAgICBleHRlcm4gc3RydWN0IGtleXRhYiB0eHJ0YWJbXTsKKyAgICAgICAgICBleHRlcm4gaW50 IG50eHJ0YWI7CisgICAgICAgICAgeCA9IGxvb2t1cCh0eHJ0YWIscCxudHhydGFiLCZ6KTsKKyNl bHNlIC8qIENLT1VOSSAqLworICAgICAgICAgIGV4dGVybiBzdHJ1Y3Qga2V5dGFiIHR0Y3N0YWJb XTsKKyAgICAgICAgICBleHRlcm4gaW50IG50ZXJtYzsKKyAgICAgICAgICB4ID0gbG9va3VwKHR0 Y3N0YWIscCxudGVybWMsJnopOworI2VuZGlmIC8qIENLT1VOSSAqLworCSAgaWYgKHggPCAwKQor CSAgICByZXR1cm4oLTEpOworICAgICAgICAgIHNldHJlbWNoYXJzZXQoeiw0IC8qIFRUX0dSX0FM TCAoaW4gY2t1dXM3LmMpICovKTsKKyNlbHNlIC8qIE5PQ1NFVFMgKi8KKyAgICAgICAgICByZXR1 cm4oLTEpOworI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKwkgIGJyZWFrOworICAgICAgfQorICAgICAg Y2FzZSBYQV9ST1dTOiB7CQkJLyogU2NyZWVuIHJvd3MgKGhlaWdodCkgKi8KKyNpZmRlZiBPUzIK KyAgICAgICAgICBleHRlcm4gaW50IHJvd19pbml0OworI2Vsc2UgLyogT1MyICovCisJICBleHRl cm4gaW50IHR0X3Jvd3M7CisjZW5kaWYgLyogT1MyICovCisJICBpZiAoIXJkaWdpdHMocCkpCisJ ICAgIHJldHVybigtMSk7CisjaWZkZWYgT1MyCisJICBpZiAoIW9zMl9zZXR0ZXJtaGVpZ2h0KGF0 b2kocCkpKQorCSAgICByZXR1cm4oLTEpOworICAgICAgICAgIHJvd19pbml0Kys7CisjZWxzZSAg LyogTm90IE9TLzIgKi8KKwkgIHR0X3Jvd3MgPSBhdG9pKHApOworI2VuZGlmIC8qIE9TMiAqLwor CSAgYnJlYWs7CisgICAgICB9CisgICAgICBjYXNlIFhBX0NPTFM6IHsJCQkvKiBTY3JlZW4gY29s dW1ucyAod2lkdGgpICovCisjaWZkZWYgT1MyCisgICAgICAgICAgZXh0ZXJuIGludCBjb2xfaW5p dDsKKyNlbHNlIC8qIE9TMiAqLworCSAgZXh0ZXJuIGludCB0dF9jb2xzOworI2VuZGlmIC8qIE9T MiAqLworCSAgaWYgKCFyZGlnaXRzKHApKQorCSAgICByZXR1cm4oLTEpOworI2lmZGVmIE9TMgor CSAgaWYgKCFvczJfc2V0dGVybXdpZHRoKGF0b2kocCkpKQorCSAgICByZXR1cm4oLTEpOworICAg ICAgICAgIGNvbF9pbml0Kys7CisjZWxzZSAgLyogTm90IE9TLzIgKi8KKwkgIHR0X2NvbHMgPSBh dG9pKHApOworI2VuZGlmIC8qIE9TMiAqLworCSAgYnJlYWs7CisgICAgICB9CisjaWZkZWYgT1My CisgICAgY2FzZSBYQV9USVRMOiB7CisgICAgICAgIGV4dGVybiBjaGFyIHVzZXJ0aXRsZVtdOwor ICAgICAgICBja3N0cm5jcHkodXNlcnRpdGxlLHAsNjQpOworICAgICAgICBvczJzZXR0aXRsZSgi IiwxKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorI2VuZGlmIC8qIE9TMiAqLworCisjaWZkZWYg Q09NTUVOVAkJCQkvKiBUTyBCRSBGSUxMRUQgSU4gLi4uICovCisgICAgICBjYXNlIFhBX1RFTDoJ CQkvKiBNYWtlIGEgVGVsbmV0IGNvbm5lY3Rpb24gKi8KKyAgICAgIGNhc2UgWEFfRlRQOgkJCS8q IE1ha2UgYW4gRlRQIGNvbm5lY3Rpb24gKi8KKyAgICAgIGNhc2UgWEFfU1NIOgkJCS8qIE1ha2Ug YW4gU1NIIGNvbm5lY3Rpb24gKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisKKyNpZm5kZWYgTk9T UEwKKyAgICAgIGNhc2UgWEFfVVNFUjoJCQkvKiBVc2VybmFtZSBmb3IgbG9naW4gKi8KKyNpZmRl ZiBJS1NECisJaWYgKCFpbnNlcnZlcikKKyNlbmRpZiAvKiBJS1NEICovCisJeworCSAgICBja3N0 cm5jcHkodWlkYnVmLCp4YXJndixVSURCVUZMRU4pOworCSAgICBoYXZlZnRwdWlkID0gMTsKKwl9 CisJYnJlYWs7CisjZW5kaWYgLyogTk9TUEwgKi8KKyNlbmRpZiAvKiBOT0xPQ0FMICovCisKKyAg ICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybigtMSk7CisgICAgfQorICAgIHJldHVybigwKTsK K30KKworI2lmZGVmIElLU0QKKyNpZmRlZiBJS1NEQ09ORgorI2RlZmluZSBJS1NfQU5PTiAwCisj ZGVmaW5lIElLU19CQUZJIDEKKyNkZWZpbmUgSUtTX0NERkkgMgorI2RlZmluZSBJS1NfQ0RNUyAz CisjZGVmaW5lIElLU19IRUZJIDQKKyNkZWZpbmUgSUtTX0FORkkgNQorI2RlZmluZSBJS1NfVVNG SSA2CisjZGVmaW5lIElLU19JS0xHIDcKKyNkZWZpbmUgSUtTX0lLRkkgOAorI2RlZmluZSBJS1Nf REJBUyA5CisjZGVmaW5lIElLU19EQkZJIDEwCisjZGVmaW5lIElLU19QRVJNIDExCisjZGVmaW5l IElLU19QUklWIDEyCisjZGVmaW5lIElLU19ST09UIDEzCisjZGVmaW5lIElLU19USU1PIDE0Cisj ZGVmaW5lIElLU19XVEZJIDE1CisjZGVmaW5lIElLU19XVE1QIDE2CisjZGVmaW5lIElLU19TUlZS IDE3CisjZGVmaW5lIElLU19OT0lOIDE4CisjZGVmaW5lIElLU19JTklUIDE5CisjZGVmaW5lIElL U19BTkxHIDIwCisjZGVmaW5lIElLU19BQ0NUIDIxCisjZGVmaW5lIElLU19OVERPTSAyMgorI2Rl ZmluZSBJS1NfU1lTTCAyMworCisjaWZkZWYgQ0tfTE9HSU4KK3N0YXRpYyBzdHJ1Y3Qga2V5dGFi IGlrc2FudGFiW10gPSB7CisjaWZkZWYgT1MyCisgICAgeyAiYWNjb3VudCIsICAgICBJS1NfQUND VCwgMCB9LAorI2VuZGlmIC8qIE9TMiAqLworICAgIHsgImluaXRmaWxlIiwgICAgSUtTX0FORkks IDAgfSwKKyAgICB7ICJsb2dpbiIsICAgICAgIElLU19BTkxHLCAwIH0sCisjaWZkZWYgVU5JWAor ICAgIHsgInJvb3QiLCAgICAgICAgSUtTX1JPT1QsIDAgfSwKKyNlbHNlCisjaWZkZWYgQ0tST09U CisgICAgeyAicm9vdCIsICAgICAgICBJS1NfUk9PVCwgMCB9LAorI2VuZGlmIC8qIENLUk9PVCAq LworI2VuZGlmIC8qIFVOSVggKi8KKyAgICB7ICIiLCAwLCAwIH0KK307CitzdGF0aWMgaW50IG5p a3NhbnRhYiA9IHNpemVvZihpa3NhbnRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikgLSAxOwor I2VuZGlmIC8qIENLX0xPR0lOICovCisKK3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIGlrc3RhYltdID0g eworI2lmZGVmIENLX0xPR0lOCisgICAgeyAiYW5vbnltb3VzIiwgICBJS1NfQU5PTiwgMCB9LAor I2VuZGlmIC8qIENLX0xPR0lOICovCisgICAgeyAiYmFubmVyZmlsZSIsICBJS1NfQkFGSSwgMCB9 LAorICAgIHsgImNkZmlsZSIsICAgICAgSUtTX0NERkksIDAgfSwKKyAgICB7ICJjZG1lc3NhZ2Ui LCAgIElLU19DRE1TLCAwIH0sCisgICAgeyAiY2Rtc2ciLCAgICAgICBJS1NfQ0RNUywgQ01fSU5W IH0sCisjaWZkZWYgSUtTREIKKyAgICB7ICJkYXRhYmFzZSIsICAgIElLU19EQkFTLCAwIH0sCisg ICAgeyAiZGJmaWxlIiwgICAgICBJS1NfREJGSSwgMCB9LAorI2VuZGlmIC8qIElLU0RCICovCisj aWZkZWYgQ0tfTE9HSU4KKyNpZmRlZiBOVAorICAgIHsgImRlZmF1bHQtZG9tYWluIiwgSUtTX05U RE9NLCAwIH0sCisjZW5kaWYgLyogTlQgKi8KKyNlbmRpZiAvKiBDS19MT0dJTiAqLworI2lmbmRl ZiBOT0hFTFAKKyAgICB7ICJoZWxwZmlsZSIsICAgIElLU19IRUZJLCAwIH0sCisjZW5kaWYgLyog Tk9IRUxQICovCisgICAgeyAiaW5pdGZpbGUiLCAgICBJS1NfSU5JVCwgMCB9LAorICAgIHsgIm5v LWluaXRmaWxlIiwgSUtTX05PSU4sIDAgfSwKKyNpZmRlZiBDS19MT0dJTgorI2lmZGVmIENLX1BF Uk0KKyAgICB7ICJwZXJtaXNzaW9ucyIsIElLU19QRVJNLCAwIH0sCisgICAgeyAicGVybXMiLCAg ICAgICBJS1NfUEVSTSwgQ01fSU5WIH0sCisjZW5kaWYgLyogQ0tfUEVSTSAqLworI2lmZGVmIFVO SVgKKyAgICB7ICJwcml2aWQiLCAgICAgIElLU19QUklWLCAwIH0sCisjZW5kaWYgLyogVU5JWCAq LworICAgIHsgInNlcnZlci1vbmx5IiwgSUtTX1NSVlIsIDAgfSwKKyNpZmRlZiBDS1NZU0xPRwor ICAgIHsgInN5c2xvZyIsICAgICAgSUtTX1NZU0wsIDAgfSwKKyNlbmRpZiAvKiBDS1NZU0xPRyAq LworICAgIHsgInRpbWVvdXQiLCAgICAgSUtTX1RJTU8sIDAgfSwKKyAgICB7ICJ1c2VyZmlsZSIs ICAgIElLU19VU0ZJLCAwIH0sCisjaWZkZWYgQ0tXVE1QCisgICAgeyAid3RtcGZpbGUiLCAgICBJ S1NfV1RGSSwgMCB9LAorICAgIHsgInd0bXBsb2ciLCAgICAgSUtTX1dUTVAsIDAgfSwKKyNlbmRp ZiAvKiBDS1dUTVAgKi8KKyNlbmRpZiAvKiBDS19MT0dJTiAqLworICAgIHsgInhmZXJmaWxlIiwg ICAgSUtTX0lLRkksIDAgfSwKKyAgICB7ICJ4ZmVybG9nIiwgICAgIElLU19JS0xHLCAwIH0KK307 CitzdGF0aWMgaW50IG5pa3N0YWIgPSBzaXplb2YoaWtzdGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5 dGFiKTsKKyNlbmRpZiAvKiBJS1NEQ09ORiAqLworCisjaWZuZGVmIE5PSUNQCitpbnQKK3NldGlr cygpIHsJCQkJLyogU0VUIElLUyAqLworI2lmZGVmIElLU0RDT05GCisjaWZkZWYgQ0tfTE9HSU4K KyAgICBleHRlcm4gaW50IGNreHN5c2xvZywgY2t4d3RtcCwgY2t4YW5vbjsKKyNpZmRlZiBVTklY CisgICAgZXh0ZXJuIGludCBja3hwcml2OworI2VuZGlmIC8qIFVOSVggKi8KKyNpZmRlZiBDS19Q RVJNUworICAgIGV4dGVybiBpbnQgY2t4cGVybXM7CisjZW5kaWYgLyogQ0tfUEVSTVMgKi8KKyAg ICBleHRlcm4gY2hhciAqIGFub25maWxlLCAqIHVzZXJmaWxlLCAqIGFub25yb290OworI2lmZGVm IE9TMgorICAgIGV4dGVybiBjaGFyICogYW5vbmFjY3Q7CisjZW5kaWYgLyogT1MyICovCisjaWZk ZWYgTlQKKyAgICBleHRlcm4gY2hhciAqIGlrc19kb21haW47CisjZW5kaWYgLyogTlQgKi8KKyNl bmRpZiAvKiBDS19MT0dJTiAqLworI2lmZGVmIENLV1RNUAorICAgIGV4dGVybiBjaGFyICogd3Rt cGZpbGU7CisjZW5kaWYgLyogQ0tXVE1QICovCisgICAgZXh0ZXJuIGludCBzcnZjZG1zZywgc3Vj Y2VzcywgaWtzZGNmLCByY2ZsYWcsIG5vaW5pdCwgYXJnX3g7CisgICAgZXh0ZXJuIGNoYXIgKiBj ZG1zZ2ZpbGVbXSwgKiBjZG1zZ3N0ciwgKmtlcm1yYzsKKyAgICBleHRlcm4geHhfc3RycCB4eHN0 cmluZzsKKyAgICBpbnQgeCwgeSwgejsKKyAgICBjaGFyICpzOworICAgIGNoYXIgdG1wYnVmW0NL TUFYUEFUSCsxXTsKKworICAgIGlmICgoeSA9IGNta2V5KGlrc3RhYixuaWtzdGFiLCIiLCIiLHh4 c3RyaW5nKSkgPCAwKQorICAgICAgcmV0dXJuKHkpOworCisjaWZkZWYgQ0tfTE9HSU4KKyAgICBp ZiAoeSA9PSBJS1NfQU5PTikgeworICAgICAgICBpZiAoKHkgPSBjbWtleShpa3NhbnRhYixuaWtz YW50YWIsIiIsIiIseHhzdHJpbmcpKSA8IDApCisJICByZXR1cm4oeSk7CisgICAgfQorI2VuZGlm IC8qIENLX0xPR0lOICovCisKKyAgICBzd2l0Y2ggKHkpIHsKKyNpZmRlZiBDS1NZU0xPRworICAg ICAgY2FzZSBJS1NfU1lTTDogICAgICAgICAgICAgICAgICAgICAvKiBJS1M6IFN5c2xvZyBsZXZl bCAqLworICAgICAgICBpZiAoKHogPSBjbWtleShva3RhYixub2t0YWIsIiIsIiIseHhzdHJpbmcp KSA8IDApCisJICByZXR1cm4oeik7CisgICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0 dXJuKHgpOworICAgICAgICBpZiAoaWtzZGNmKSByZXR1cm4oc3VjY2VzcyA9IDApOworI2lmbmRl ZiBTWVNMT0dMRVZFTAorICAgICAgICAvKiBJZiBzcGVjaWZpZWQgb24gY2MgY29tbWFuZCBsaW5l LCB1c2VyIGNhbid0IGNoYW5nZSBpdC4gKi8KKyAgICAgICAgaWYgKCFpbnNlcnZlcikgICAgICAg ICAgICAgICAgICAvKiBEb24ndCBhbGxvdyB2b2x1bWlub3VzIHN5c2xvZ2dpbmcgKi8KKyAgICAg ICAgICBpZiAoeSA+IFNZU0xHX0ZBKSAgICAgICAgICAgICAvKiBieSBvcmRpbmFyeSB1c2Vycy4g Ki8KKyAgICAgICAgICAgIHkgPSBTWVNMR19GQTsKKyNlbmRpZiAvKiBTWVNMT0dMRVZFTCAqLwor ICAgICAgICBpZiAoeSA8IDApIHJldHVybigtMSk7CisjaWZkZWYgREVCVUcKKyAgICAgICAgaWYg KHkgPj0gU1lTTEdfREIpCisgICAgICAgICAgaWYgKCFkZWJsb2cpCisgICAgICAgICAgICBkZWJs b2cgPSBkZWJvcG4oImRlYnVnLmxvZyIsMCk7CisjZW5kaWYgLyogREVCVUcgKi8KKyNpZmRlZiBT WVNMT0dMRVZFTAorICAgICAgICAvKiBJZiBzcGVjaWZpZWQgb24gY2MgY29tbWFuZCBsaW5lLCB1 c2VyIGNhbid0IGNoYW5nZSBpdC4gKi8KKyAgICAgICAgeSA9IFNZU0xPR0xFVkVMOworI2VuZGlm IC8qIFNZU0xPR0xFVkVMICovCisgICAgICAgIGNreHN5c2xvZyA9IHk7CisgICAgICAgIC8qIHBy aW50ZigiY2t4c3lzbG9nPSVkXG4iLGNreHN5c2xvZyk7ICovCisgICAgICAgIGJyZWFrOworI2Vu ZGlmIC8qIENLU1lTTE9HICovCisKKyNpZmRlZiBDS19MT0dJTgorI2lmZGVmIE5UCisgICAgICBj YXNlIElLU19OVERPTToKKyAgICAgICAgaWYgKCh6ID0gY210eHQoCisgIkRPTUFJTiB0byBiZSB1 c2VkIGZvciB1c2VyIGF1dGhlbnRpY2F0aW9uIHdoZW4gbm9uZSBpcyBzcGVjaWZpZWQiLAorICAg ICAgICAgICAgICAgICAgICAgICAiIiwgJnMseHhzdHJpbmcpKSA8IDApCisJICByZXR1cm4oeik7 CisgICAgICAgIGlmIChpa3NkY2YpIHJldHVybihzdWNjZXNzID0gMCk7CisgICAgICAgIGlmICgh KnMpIHM9IE5VTEw7CisgICAgICAgICAgbWFrZXN0cigmaWtzX2RvbWFpbixzKTsKKyAgICAgICAg YnJlYWs7CisjZW5kaWYgLyogTlQgKi8KKyNpZmRlZiBPUzIKKyAgICAgIGNhc2UgSUtTX0FDQ1Q6 CisgICAgICAgIGlmICgoeiA9IGNtdHh0KCJOYW1lIG9mIGxvY2FsIGFjY291bnQgdG8gdXNlIGZv ciBhbm9ueW1vdXMgbG9naW5zIiwKKwkJCSJHVUVTVCIsICZzLHh4c3RyaW5nKSkgPCAwKQorCSAg cmV0dXJuKHopOworICAgICAgICBpZiAoaWtzZGNmKSByZXR1cm4oc3VjY2VzcyA9IDApOworICAg ICAgICBpZiAoKnMpIHsKKyAgICAgICAgICAgIG1ha2VzdHIoJmFub25hY2N0LHMpOworICAgICAg ICB9IGVsc2UgaWYgKCBhbm9uYWNjdCApIHsKKwkgICAgZnJlZShhbm9uYWNjdCk7CisJICAgIGFu b25hY2N0ID0gTlVMTDsKKwl9CisgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIE9TMiAqLworICAg ICAgY2FzZSBJS1NfQU5MRzoKKyAgICAgICAgaWYgKCh6ID0gY21rZXkob2t0YWIsbm9rdGFiLCIi LCJubyIseHhzdHJpbmcpKSA8IDApCisJICByZXR1cm4oeik7CisgICAgICAgIGlmICgoeCA9IGNt Y2ZtKCkpIDwgMCkgcmV0dXJuKHgpOworICAgICAgICBpZiAoaWtzZGNmKSByZXR1cm4oc3VjY2Vz cyA9IDApOworICAgICAgICBja3hhbm9uID0gejsKKyNpZmRlZiBPUzIKKwlpZiAoY2t4YW5vbiAm JiAhYW5vbmFjY3QpCisJICBtYWtlc3RyKCZhbm9uYWNjdCwiR1VFU1QiKTsKKyNlbmRpZiAvKiBP UzIgKi8KKyAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogQ0tfTE9HSU4gKi8KKyAgICAgIGNhc2Ug SUtTX0JBRkk6CisgICAgICAgIGlmICgoeiA9IGNtaWZpKCJGaWxlbmFtZSIsIiIsJnMsJngseHhz dHJpbmcpKSA8IDApCisJICByZXR1cm4oeik7CisgICAgICAgIGlmICh4KSB7CisgICAgICAgICAg ICBwcmludGYoIj9XaWxkY2FyZHMgbm90IGFsbG93ZWRcbiIpOworICAgICAgICAgICAgcmV0dXJu KC05KTsKKyAgICAgICAgfQorICAgICAgICBkZWJ1ZyhGMTEwLCJiYW5uZXJmaWxlIGJlZm9yZSB6 Zm5xZnAoKSIscywwKTsKKyAgICAgICAgaWYgKHpmbnFmcChzLENLTUFYUEFUSCx0bXBidWYpKSB7 CisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJiYW5uZXJmaWxlIGFmdGVyIHpmbnFmcCgpIix0bXBi dWYsMCk7CisgICAgICAgICAgICBzID0gdG1wYnVmOworICAgICAgICB9CisgICAgICAgIGlmICgo eCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOworICAgICAgICBpZiAoaWtzZGNmKSByZXR1cm4o c3VjY2VzcyA9IDApOworICAgICAgICBpZiAoKnMpCisJICBtYWtlc3RyKCZiYW5uZXJmaWxlLHMp OworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgSUtTX0NERkk6CisgICAgICAgIGlmICgoeiA9 IGNtdHh0KCJsaXN0IG9mIGNkIG1lc3NhZ2UgZmlsZSBuYW1lcyIsIlJFQUQuTUUiLAorCQkgICAg ICAgJnMseHhzdHJpbmcpKSA8IDApCisJICByZXR1cm4oeik7CisgICAgICAgIGlmIChpa3NkY2Yp IHJldHVybihzdWNjZXNzID0gMCk7CisgICAgICAgIGlmICgqcykgeworICAgICAgICAgICAgbWFr ZWxpc3QocyxjZG1zZ2ZpbGUsMTYpOworICAgICAgICAgICAgbWFrZXN0cigmY2Rtc2dzdHIscyk7 CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIElLU19DRE1TOgorICAgICAg ICBpZiAoKHogPSBjbWtleShva3RhYixub2t0YWIsIiIsIm5vIix4eHN0cmluZykpIDwgMCkKKwkg IHJldHVybih6KTsKKyAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7Cisg ICAgICAgIGlmIChpa3NkY2YpIHJldHVybihzdWNjZXNzID0gMCk7CisgICAgICAgIHNydmNkbXNn ID0gejsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIElLU19IRUZJOgorICAgICAgICBpZiAo KHogPSBjbWlmaSgiRmlsZW5hbWUiLCIiLCZzLCZ4LHh4c3RyaW5nKSkgPCAwKQorCSAgcmV0dXJu KHopOworICAgICAgICBpZiAoeCkgeworICAgICAgICAgICAgcHJpbnRmKCI/V2lsZGNhcmRzIG5v dCBhbGxvd2VkXG4iKTsKKyAgICAgICAgICAgIHJldHVybigtOSk7CisgICAgICAgIH0KKyAgICAg ICAgaWYgKHpmbnFmcChzLENLTUFYUEFUSCx0bXBidWYpKQorICAgICAgICAgIHMgPSB0bXBidWY7 CisgICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOworICAgICAgICBpZiAo aWtzZGNmKSByZXR1cm4oc3VjY2VzcyA9IDApOworICAgICAgICBpZiAoKnMpCisJICBtYWtlc3Ry KCZoZWxwZmlsZSxzKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIElLU19BTkZJOgorICAg ICAgICBpZiAoKHogPSBjbWlmaSgiRmlsZW5hbWUiLCIiLCZzLCZ4LHh4c3RyaW5nKSkgPCAwKQor CSAgcmV0dXJuKHopOworICAgICAgICBpZiAoeCkgeworICAgICAgICAgICAgcHJpbnRmKCI/V2ls ZGNhcmRzIG5vdCBhbGxvd2VkXG4iKTsKKyAgICAgICAgICAgIHJldHVybigtOSk7CisgICAgICAg IH0KKyAgICAgICAgaWYgKHpmbnFmcChzLENLTUFYUEFUSCx0bXBidWYpKQorICAgICAgICAgIHMg PSB0bXBidWY7CisgICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOworICAg ICAgICBpZiAoaWtzZGNmKSByZXR1cm4oc3VjY2VzcyA9IDApOworICAgICAgICBpZiAoKnMpCisJ ICBtYWtlc3RyKCZhbm9uZmlsZSxzKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIElLU19V U0ZJOgorICAgICAgICBpZiAoKHogPSBjbWlmaSgiRmlsZW5hbWUiLCIiLCZzLCZ4LHh4c3RyaW5n KSkgPCAwKQorCSAgcmV0dXJuKHopOworICAgICAgICBpZiAoeCkgeworICAgICAgICAgICAgcHJp bnRmKCI/V2lsZGNhcmRzIG5vdCBhbGxvd2VkXG4iKTsKKyAgICAgICAgICAgIHJldHVybigtOSk7 CisgICAgICAgIH0KKyAgICAgICAgaWYgKHpmbnFmcChzLENLTUFYUEFUSCx0bXBidWYpKQorICAg ICAgICAgIHMgPSB0bXBidWY7CisgICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJu KHgpOworICAgICAgICBpZiAoaWtzZGNmKSByZXR1cm4oc3VjY2VzcyA9IDApOworICAgICAgICBp ZiAoKnMpCisJICBtYWtlc3RyKCZ1c2VyZmlsZSxzKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBj YXNlIElLU19JS0ZJOgorICAgICAgICBpZiAoKHogPSBjbWlmaSgiRmlsZW5hbWUiLCIiLCZzLCZ4 LHh4c3RyaW5nKSkgPCAwKQorCSAgcmV0dXJuKHopOworICAgICAgICBpZiAoeCkgeworICAgICAg ICAgICAgcHJpbnRmKCI/V2lsZGNhcmRzIG5vdCBhbGxvd2VkXG4iKTsKKyAgICAgICAgICAgIHJl dHVybigtOSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHpmbnFmcChzLENLTUFYUEFUSCx0bXBi dWYpKQorICAgICAgICAgIHMgPSB0bXBidWY7CisgICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwg MCkgcmV0dXJuKHgpOworICAgICAgICBpZiAoaWtzZGNmKSByZXR1cm4oc3VjY2VzcyA9IDApOwor ICAgICAgICBpZiAoKnMpIHsKKyAgICAgICAgICAgIG1ha2VzdHIoJnhmZXJmaWxlLHMpOworICAg ICAgICAgICAgeGZlcmxvZyA9IDE7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBj YXNlIElLU19JS0xHOgorICAgICAgICBpZiAoKHogPSBjbWtleShva3RhYixub2t0YWIsIiIsIm5v Iix4eHN0cmluZykpIDwgMCkKKwkgIHJldHVybih6KTsKKyAgICAgICAgaWYgKCh4ID0gY21jZm0o KSkgPCAwKSByZXR1cm4oeCk7CisgICAgICAgIGlmIChpa3NkY2YpIHJldHVybihzdWNjZXNzID0g MCk7CisgICAgICAgIHhmZXJsb2cgPSB6OworICAgICAgICBicmVhazsKKworI2lmZGVmIENLX0xP R0lOCisjaWZkZWYgQ0tfUEVSTQorICAgICAgY2FzZSBJS1NfUEVSTToKKyAgICAgICAgaWYgKCh6 ID0gY210eHQoIk9jdGFsIGZpbGUgcGVybXNzaW9uIGNvZGUiLCIwMDAiLAorCQkgICAgICAgJnMs eHhzdHJpbmcpKSA8IDApCisJICByZXR1cm4oeik7CisJaWYgKHogPCAwKSByZXR1cm4oeik7Cisg ICAgICAgIGlmIChpa3NkY2YpIHJldHVybihzdWNjZXNzID0gMCk7CisgICAgICAgIHkgPSAwOwor ICAgICAgICB3aGlsZSAoKnMpIHsKKyAgICAgICAgICAgIGlmICgqcyA8ICcwJyB8fCAqcyA+ICc3 JykKKyAgICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgICAgIHkgPSB5ICogOCArICgq cysrIC0gJzAnKTsKKyAgICAgICAgfQorICAgICAgICBja3hwZXJtcyA9IHk7CisgICAgICAgIGJy ZWFrOworI2VuZGlmIC8qIENLX1BFUk0gKi8KKyNpZmRlZiBVTklYCisgICAgICBjYXNlIElLU19Q UklWOiAgICAgICAgICAgICAgICAgICAgIC8qIElLUzogUHJpdidkIGxvZ2luIGFsbG93ZWQgKi8K KyAgICAgICAgaWYgKCh6ID0gY21rZXkob2t0YWIsbm9rdGFiLCIiLCJubyIseHhzdHJpbmcpKSA8 IDApCisJICByZXR1cm4oeik7CisgICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJu KHgpOworICAgICAgICBpZiAoaWtzZGNmKSByZXR1cm4oc3VjY2VzcyA9IDApOworICAgICAgICBj a3hwcml2ID0gejsKKyAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogVU5JWCAqLworCisgICAgICBj YXNlIElLU19ST09UOiAgICAgICAgICAgICAgICAgICAgIC8qIElLUzogQW5vbnltb3VzIHJvb3Qg Ki8KKwlpZiAoKHogPSBjbWRpcigiTmFtZSBvZiBkaXNrIGFuZC9vciBkaXJlY3RvcnkiLCIiLCZz LAorCQkgICAgICAgeHhzdHJpbmcpKSA8IDAgKSB7CisJICAgIGlmICh6ICE9IC0zKQorCSAgICAg IHJldHVybih6KTsKKwl9CisgICAgICAgIGlmICgqcykgeworCSAgICBpZiAoemZucWZwKHMsQ0tN QVhQQVRILHRtcGJ1ZikpCisJICAgICAgcyA9IHRtcGJ1ZjsKKyAgICAgICAgfSBlbHNlCisJICBz ID0gIiI7CisgICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOworICAgICAg ICBpZiAoaWtzZGNmKSByZXR1cm4oc3VjY2VzcyA9IDApOworICAgICAgICBpZiAoKnMpCisJICBt YWtlc3RyKCZhbm9ucm9vdCxzKTsKKyAgICAgICAgLyogcHJpbnRmKCJhbm9ucm9vdD0lc1xuIixh bm9ucm9vdCk7ICovCisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIElLU19USU1POgorCXog PSBjbW51bSgibG9naW4gdGltZW91dCwgc2Vjb25kcyIsIjAiLDEwLCZ4LHh4c3RyaW5nKTsKKwlp ZiAoeiA8IDApIHJldHVybih6KTsKKyAgICAgICAgaWYgKHggPCAwIHx8IHggPiA3MjAwKSB7Cisg ICAgICAgICAgICBwcmludGYoIj9WYWx1ZSBtdXN0IGJlIGJldHdlZW4gMCBhbmQgNzIwMFxyXG4i KTsKKyAgICAgICAgICAgIHJldHVybigtOSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCh6ID0g Y21jZm0oKSkgPCAwKSByZXR1cm4oeik7CisgICAgICAgIGlmIChpa3NkY2YpIHJldHVybihzdWNj ZXNzID0gMCk7CisgICAgICAgIGxvZ2ludGltbyA9IHg7CisgICAgICAgIGJyZWFrOworCisjaWZk ZWYgQ0tXVE1QCisgICAgICBjYXNlIElLU19XVE1QOiAgICAgICAgICAgICAgICAgICAgIC8qIElL Uzogd3RtcCBsb2cgKi8KKyAgICAgICAgaWYgKCh6ID0gY21rZXkob2t0YWIsbm9rdGFiLCIiLCJu byIseHhzdHJpbmcpKSA8IDApCisJICByZXR1cm4oeik7CisgICAgICAgIGlmICgoeCA9IGNtY2Zt KCkpIDwgMCkgcmV0dXJuKHgpOworICAgICAgICBpZiAoaWtzZGNmKSByZXR1cm4oc3VjY2VzcyA9 IDApOworICAgICAgICBja3h3dG1wID0gejsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2Ug SUtTX1dURkk6ICAgICAgICAgICAgICAgICAgICAgLyogSUtTOiB3dG1wIGxvZ2ZpbGUgKi8KKyAg ICAgICAgaWYgKCh6ID0gY21pZmkoIkZpbGVuYW1lIiwiIiwmcywmeCx4eHN0cmluZykpIDwgMCkK KwkgIHJldHVybih6KTsKKyAgICAgICAgaWYgKHgpIHsKKyAgICAgICAgICAgIHByaW50ZigiP1dp bGRjYXJkcyBub3QgYWxsb3dlZFxuIik7CisgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAg ICB9CisgICAgICAgIGlmICh6Zm5xZnAocyxDS01BWFBBVEgsdG1wYnVmKSkKKyAgICAgICAgICBz ID0gdG1wYnVmOworICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKKyAg ICAgICAgaWYgKGlrc2RjZikgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKyAgICAgICAgaWYgKCpzKQor CSAgbWFrZXN0cigmd3RtcGZpbGUscyk7CisgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIENLV1RN UCAqLworI2VuZGlmIC8qIENLX0xPR0lOICovCisjaWZkZWYgSUtTREIKKyAgICAgIGNhc2UgSUtT X0RCRkk6IHsKKyAgICAgICAgICBleHRlcm4gY2hhciAqIGRiZGlyLCAqIGRiZmlsZTsKKyAgICAg ICAgICBleHRlcm4gaW50IGRiZW5hYmxlZDsKKyAgICAgICAgICBzdHJ1Y3QgemZuZnAgKiB6ejsK KyAgICAgICAgICBpZiAoKHogPSBjbWlmaSgiRmlsZW5hbWUiLCIiLCZzLCZ4LHh4c3RyaW5nKSkg PCAwKQorCSAgICByZXR1cm4oeik7CisgICAgICAgICAgaWYgKHgpIHsKKyAgICAgICAgICAgICAg cHJpbnRmKCI/V2lsZGNhcmRzIG5vdCBhbGxvd2VkXG4iKTsKKyAgICAgICAgICAgICAgcmV0dXJu KC05KTsKKyAgICAgICAgICB9CisgICAgICAgICAgenogPSB6Zm5xZnAocyxDS01BWFBBVEgsdG1w YnVmKTsKKyAgICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKKyAgICAg ICAgICBpZiAoaWtzZGNmKSByZXR1cm4oc3VjY2VzcyA9IDApOworICAgICAgICAgIGlmICh6eikg eworICAgICAgICAgICAgICBtYWtlc3RyKCZkYmRpcix6ei0+ZnBhdGgpOworICAgICAgICAgICAg ICBtYWtlc3RyKCZkYmZpbGUsKGNoYXIgKil0bXBidWYpOworICAgICAgICAgICAgICBkYmVuYWJs ZWQgPSAxOworICAgICAgICAgIH0gZWxzZQorCSAgICByZXR1cm4oc3VjY2VzcyA9IDApOworICAg ICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgY2FzZSBJS1NfREJBUzogeworICAgICAgICAg IGV4dGVybiBpbnQgZGJlbmFibGVkOworICAgICAgICAgIGlmICgoeiA9IGNta2V5KG9rdGFiLG5v a3RhYiwiIiwibm8iLHh4c3RyaW5nKSkgPCAwKQorCSAgICByZXR1cm4oeik7CisgICAgICAgICAg aWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7CisgICAgICAgICAgaWYgKGlrc2RjZikg cmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKyAgICAgICAgICBkYmVuYWJsZWQgPSB6OworICAgICAgICAg IGJyZWFrOworICAgICAgfQorI2VuZGlmIC8qIElLU0RCICovCisKKyAgICAgIGNhc2UgSUtTX0lO SVQ6CisgICAgICAgIGlmICgoeiA9IGNtdHh0KCJBbHRlcm5hdGUgaW5pdCBmaWxlIHNwZWNpZmlj YXRpb24iLCIiLAorCQkgICAgICAgJnMseHhzdHJpbmcpKSA8IDApCisJICByZXR1cm4oeik7Cisg ICAgICAgIGlmICh6IDwgMCkgcmV0dXJuKHopOworICAgICAgICBpZiAoaWtzZGNmKSByZXR1cm4o c3VjY2VzcyA9IDApOworICAgICAgICBja3N0cm5jcHkoa2VybXJjLHMsS0VSTVJDTCk7CisgICAg ICAgIHJjZmxhZyA9IDE7CQkJLyogRmxhZyB0aGF0IHRoaXMgaGFzIGJlZW4gZG9uZSAqLworICAg ICAgICBicmVhazsKKworICAgICAgY2FzZSBJS1NfTk9JTjoKKyAgICAgICAgaWYgKCh6ID0gY21r ZXkob2t0YWIsbm9rdGFiLCIiLCJubyIseHhzdHJpbmcpKSA8IDApCisJICByZXR1cm4oeik7Cisg ICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOworICAgICAgICBpZiAoaWtz ZGNmKSByZXR1cm4oc3VjY2VzcyA9IDApOworICAgICAgICBub2luaXQgPSB6OworICAgICAgICBi cmVhazsKKworICAgICAgY2FzZSBJS1NfU1JWUjoKKyAgICAgICAgaWYgKCh6ID0gY21rZXkob2t0 YWIsbm9rdGFiLCIiLCJubyIseHhzdHJpbmcpKSA8IDApCisJICByZXR1cm4oeik7CisgICAgICAg IGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOworICAgICAgICBpZiAoaWtzZGNmKSBy ZXR1cm4oc3VjY2VzcyA9IDApOworICAgICAgICBhcmdfeCA9IHo7CisgICAgICAgIGJyZWFrOwor CisgICAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4oLTkpOworICAgIH0KKyAgICByZXR1cm4o c3VjY2VzcyA9IChpbnNlcnZlciA/IDEgOiAwKSk7CisjZWxzZSAvKiBJS1NEQ09ORiAqLworICAg IGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkKKyAgICAgIHJldHVybih4KTsKKyAgICByZXR1cm4oc3Vj Y2VzcyA9IDApOworI2VuZGlmIC8qIElLU0RDT05GICovCit9CisjZW5kaWYgLyogTk9JQ1AgKi8K KyNlbmRpZiAvKiBJS1NEICovCisKKy8qICBEIE8gQSBSIEcgIC0tICBEbyBhIGNvbW1hbmQtbGlu ZSBhcmd1bWVudC4gICovCisKK2ludAorI2lmZGVmIENLX0FOU0lDCitkb2FyZyhjaGFyIHgpCisj ZWxzZQorZG9hcmcoeCkgY2hhciB4OworI2VuZGlmIC8qIENLX0FOU0lDICovCisvKiBkb2FyZyAq LyB7CisgICAgaW50IGksIG4sIHksIHosIHh4OyBsb25nIHp6OyBjaGFyICp4cDsKKworI2lmZGVm IE5FVENPTk4KK2V4dGVybiBjaGFyICpsaW5lLCAqdG1wYnVmOyAgICAgICAgICAgICAvKiBDaGFy YWN0ZXIgYnVmZmVycyBmb3IgYW55dGhpbmcgKi8KKyNlbmRpZiAvKiBORVRDT05OICovCisKKyNp ZmRlZiBJS1NECisgICAgLyogSW50ZXJuZXQgS2VybWl0IFNlcnZlciBzZXQgc29tZSB3YXkgYmVz aWRlcyAtQS4uLiAqLworICAgIGlmIChpbnNlcnZlcikKKyAgICAgIGRvZmFzdCgpOworI2VuZGlm IC8qIElLU0QgKi8KKworICAgIHhwID0gKnhhcmd2KzE7ICAgICAgICAgICAgICAgICAgICAgIC8q IFBvaW50ZXIgZm9yIGJ1bmRsZWQgYXJncyAqLworICAgIGRlYnVnKEYxMTEsImRvYXJnIGVudHJ5 Iix4cCx4YXJnYyk7CisgICAgd2hpbGUgKHgpIHsKKyAgICAgICAgZGVidWcoRjAwMCwiZG9hcmcg YXJnIiwiIix4KTsKKyAgICAgICAgc3dpdGNoICh4KSB7ICAgICAgICAgICAgICAgICAgICAvKiBC aWcgc3dpdGNoIG9uIGFyZyAqLworCisjaWZuZGVmIENPTU1FTlQKKwkgIGNhc2UgJy0nOgkJCS8q IEV4dGVuZGVkIGNvbW1hbmRzLi4uICovCisJICAgIGlmIChkb3hhcmcoeGFyZ3YsMCkgPCAwKSB7 CisJCVhGQVRBTCgiRXh0ZW5kZWQgb3B0aW9uIGVycm9yIik7CisJICAgIH0gLyogRnVsbCB0aHJ1 Li4uICovCisJICBjYXNlICcrJzoJCQkvKiBFeHRlbmRlZCBjb21tYW5kIGZvciBwcmVzY2FuKCkg Ki8KKwkgICAgcmV0dXJuKDApOworI2Vsc2UgIC8qIE5PSUNQICovCisJICBjYXNlICctJzoKKwkg IGNhc2UgJysnOgorCSAgICBYRkFUQUwoIkV4dGVuZGVkIG9wdGlvbnMgbm90IGNvbmZpZ3VyZWQi KTsKKyNlbmRpZiAvKiBOT0lDUCAqLworCisjaWZuZGVmIE5PU1BMCisJICBjYXNlICdDJzogewkJ CS8qIENvbW1hbmRzIGZvciBwYXJzZXIgKi8KKwkgICAgICBjaGFyICogczsKKwkgICAgICB4YXJn disrLCB4YXJnYy0tOworCSAgICAgIGlmICgoeGFyZ2MgPCAxKSB8fCAoKip4YXJndiA9PSAnLScp KSB7CisJCSAgWEZBVEFMKCJObyBjb21tYW5kcyBnaXZlbiBmb3IgLUMiKTsKKwkgICAgICB9CisJ ICAgICAgcyA9ICp4YXJndjsJCS8qIEdldCB0aGUgYXJndW1lbnQgKG11c3QgYmUgcXVvdGVkKSAq LworCSAgICAgIGlmICghKnMpCQkJLyogSWYgZW1wdHkgcXVvdGVzICovCisJCXMgPSBOVUxMOwkJ LyogaWdub3JlIHRoaXMgb3B0aW9uICovCisJICAgICAgaWYgKHMpIHsKKwkJICBtYWtlc3RyKCZj bGNtZHMscyk7CS8qIE1ha2UgcG9rZWFibGUgY29weSAqLworCQkgIHMgPSBjbGNtZHM7CQkvKiBD aGFuZ2UgdGFicyB0byBzcGFjZXMgKi8KKwkJICB3aGlsZSAoKnMpIHsKKwkJICAgICAgaWYgKCpz ID09ICdcdCcpICpzID0gJyAnOworCQkgICAgICBzKys7CisJCSAgfQorCSAgICAgIH0KKwkgICAg ICBicmVhazsKKwkgIH0KKyNlbmRpZiAvKiBOT1NQTCAqLworCisjaWZuZGVmIE5PWEZFUgorCSAg Y2FzZSAnRCc6CQkJLyogRGVsYXkgKi8KKwkgICAgaWYgKCooeHArMSkpIHsKKwkJWEZBVEFMKCJp bnZhbGlkIGFyZ3VtZW50IGJ1bmRsaW5nIik7CisJICAgIH0KKwkgICAgeGFyZ3YrKywgeGFyZ2Mt LTsKKwkgICAgaWYgKCh4YXJnYyA8IDEpIHx8ICgqKnhhcmd2ID09ICctJykpIHsKKwkJWEZBVEFM KCJtaXNzaW5nIGRlbGF5IHZhbHVlIik7CisJICAgIH0KKwkgICAgeiA9IGF0b2koKnhhcmd2KTsJ CS8qIENvbnZlcnQgdG8gbnVtYmVyICovCisJICAgIGlmICh6ID4gLTEpCQkJLyogSWYgaW4gcmFu Z2UgKi8KKwkgICAgICBja2RlbGF5ID0gejsJCS8qIHNldCBpdCAqLworCSAgICBlbHNlIHsKKwkJ WEZBVEFMKCJiYWQgZGVsYXkgdmFsdWUiKTsKKwkgICAgfQorCSAgICBicmVhazsKKyNlbmRpZiAv KiBOT1hGRVIgKi8KKworCSAgY2FzZSAnRSc6CQkJLyogRXhpdCBvbiBjbG9zZSAqLworI2lmZGVm IE5FVENPTk4KKwkgICAgdG5fZXhpdCA9IDE7CisjZW5kaWYgLyogTkVUQ09OTiAqLworCSAgICBl eGl0b25jbG9zZSA9IDE7CisJICAgIGJyZWFrOworCisjaWZuZGVmIE5PSUNQCisJICBjYXNlICdT JzoJCQkvKiAiU3RheSIgLSBlbnRlciBpbnRlcmFjdGl2ZSAqLworCSAgICBzdGF5ZmxnID0gMTsJ CS8qIGNvbW1hbmQgcGFyc2VyIGFmdGVyIGV4ZWN1dGluZyAqLworCSAgICB4ZmluaXNoID0gMDsJ CS8qIGNvbW1hbmQtbGluZSBhY3Rpb25zLiAqLworCSAgICBicmVhazsKKyNlbmRpZiAvKiBOT0lD UCAqLworCisJICBjYXNlICdUJzoJCQkvKiBGaWxlIHRyYW5zZmVyIG1vZGUgPSB0ZXh0ICovCisJ ICAgIGJpbmFyeSA9IFhZRlRfVDsKKwkgICAgeGZlcm1vZGUgPSBYTU9ERV9NOwkJLyogVHJhbnNm ZXIgbW9kZSBtYW51YWwgKi8KKwkgICAgZmlsZXBlZWsgPSAwOworI2lmZGVmIFBBVFRFUk5TCisJ ICAgIHBhdHRlcm5zID0gMDsKKyNlbmRpZiAvKiBQQVRURVJOUyAqLworCSAgICBicmVhazsKKwor CSAgY2FzZSAnNyc6CisJICAgIGJyZWFrOworCisjaWZkZWYgSUtTRAorCSAgY2FzZSAnQSc6IHsJ CQkvKiBJbnRlcm5ldCBzZXJ2ZXIgKi8KKwkgICAgICAvKiBBbHJlYWR5IGRvbmUgaW4gcHJlc2Nh bigpICovCisJICAgICAgLyogYnV0IGltcGxpZXMgJ3gnICYmICAnUScgICAqLworI2lmZGVmIE9T MgorCSAgICAgIGNoYXIgKiBwOworCSAgICAgIGlmICgqKHhwKzEpKSB7CisJCSAgWEZBVEFMKCJp bnZhbGlkIGFyZ3VtZW50IGJ1bmRsaW5nIik7CisJICAgICAgfQorI2lmZGVmIE5UCisJICAgICAg LyogU3VwcG9ydCBmb3IgUHJhZ21hIFN5c3RlbXMgVGVsbmV0L1Rlcm1pbmFsIFNlcnZlcnMgKi8K KwkgICAgICBwID0gZ2V0ZW52KCJQUkFHTUFTWVNfSU5FVERfU09DSyIpOworCSAgICAgIGlmICgh KHAgJiYgYXRvaShwKSAhPSAwKSkgeworCQkgIHhhcmd2KyssIHhhcmdjLS07CisJCSAgaWYgKHhh cmdjIDwgMSB8fCAqKnhhcmd2ID09ICctJykgeworCQkgICAgICBYRkFUQUwoIm1pc3Npbmcgc29j a2V0IGhhbmRsZSIpOworCQkgIH0KKwkgICAgICB9CisjZWxzZSAvKiBOVCAqLworCSAgICAgIHhh cmd2KyssIHhhcmdjLS07CisJICAgICAgaWYgKHhhcmdjIDwgMSB8fCAqKnhhcmd2ID09ICctJykg eworCQkgIFhGQVRBTCgibWlzc2luZyBzb2NrZXQgaGFuZGxlIik7CisJICAgICAgfQorI2VuZGlm IC8qIE5UICovCisjZW5kaWYgLyogT1MyICovCisjaWZkZWYgTk9JQ1AgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogSWYgbm8gSW50ZXJhY3RpdmUgQ29tbWFuZCBQYXJzZXIgKi8KKwkgICAg ICBhY3Rpb24gPSAneCc7CQkvKiAtQSBpbXBsaWVzIC14LiAqLworI2VuZGlmIC8qIE5PSUNQICov CisjaWZuZGVmIE5PWEZFUgorCSAgICAgIGRvZmFzdCgpOworI2VuZGlmIC8qIE5PWEZFUiAqLwor CSAgICAgIGJyZWFrOworCSAgfQorI2VuZGlmIC8qIElLU0QgKi8KKworI2lmbmRlZiBOT1hGRVIK KwkgIGNhc2UgJ1EnOgkJCS8qIFF1aWNrIChpLmUuIEZBU1QpICovCisJICAgIGRvZmFzdCgpOwor CSAgICBicmVhazsKKyNlbmRpZiAvKiBOT1hGRVIgKi8KKworCSAgY2FzZSAnUic6CQkJLyogUmVt b3RlLU9ubHkgKi8KKwkgICAgYnJlYWs7CQkJLyogVGhpcyBpcyBoYW5kbGVkIGluIHByZXNjYW4o KS4gKi8KKworI2lmbmRlZiBOT1NFUlZFUgorCSAgY2FzZSAneCc6CQkJLyogc2VydmVyICovCisJ ICBjYXNlICdPJzoJCQkvKiAoZm9yIE9uZSBjb21tYW5kIG9ubHkpICovCisJICAgIGlmIChhY3Rp b24pIHsKKwkJWEZBVEFMKCJjb25mbGljdGluZyBhY3Rpb25zIik7CisJICAgIH0KKwkgICAgaWYg KHggPT0gJ08nKSBqdXN0b25lID0gMTsKKwkgICAgeGZpbmlzaCA9IDE7CisJICAgIGFjdGlvbiA9 ICd4JzsKKwkgICAgYnJlYWs7CisjZW5kaWYgLyogTk9TRVJWRVIgKi8KKworI2lmbmRlZiBOT1hG RVIKKwkgIGNhc2UgJ2YnOgkJCS8qIGZpbmlzaCAqLworCSAgICBpZiAoYWN0aW9uKSB7CisJCVhG QVRBTCgiY29uZmxpY3RpbmcgYWN0aW9ucyIpOworCSAgICB9CisJICAgIGFjdGlvbiA9IHNldGdl bignRicsIiIsIiIsIiIpOworCSAgICBicmVhazsKKyNlbmRpZiAvKiBOT1hGRVIgKi8KKworCSAg Y2FzZSAncic6IHsJCQkvKiByZWNlaXZlICovCisJICAgICAgaWYgKGFjdGlvbikgeworCQkgIFhG QVRBTCgiY29uZmxpY3RpbmcgYWN0aW9ucyIpOworCSAgICAgIH0KKwkgICAgICBhY3Rpb24gPSAn dic7CisJICAgICAgYnJlYWs7CisJICB9CisKKyNpZm5kZWYgTk9YRkVSCisJICBjYXNlICdrJzoJ CQkvKiByZWNlaXZlIHRvIHN0ZG91dCAqLworCSAgICBpZiAoYWN0aW9uKSB7CisJCVhGQVRBTCgi Y29uZmxpY3RpbmcgYWN0aW9ucyIpOworCSAgICB9CisJICAgIHN0ZG91ZiA9IDE7CisJICAgIGFj dGlvbiA9ICd2JzsKKwkgICAgYnJlYWs7CisKKwkgIGNhc2UgJ3MnOiB7CQkJLyogc2VuZCAqLwor CSAgICAgIGludCBmaWwyc25kLCByYzsKKwkgICAgICBpZiAoIXJlY3Vyc2l2ZSkKKwkgICAgICBu b2xpbmtzID0gMDsJCS8qIEZvbGxvdyBsaW5rcyBieSBkZWZhdWx0ICovCisKKwkgICAgICBpZiAo YWN0aW9uKSB7CisJCSAgWEZBVEFMKCJjb25mbGljdGluZyBhY3Rpb25zIik7CisJICAgICAgfQor CSAgICAgIGlmICgqKHhwKzEpKSB7CisJCSAgWEZBVEFMKCJpbnZhbGlkIGFyZ3VtZW50IGJ1bmRs aW5nIGFmdGVyIC1zIik7CisJICAgICAgfQorCSAgICAgIG5maWxzID0gMDsJCS8qIEluaXRpYWxp emUgZmlsZSBjb3VudGVyICovCisJICAgICAgZmlsMnNuZCA9IDA7CQkvKiBBc3N1bWUgbm90aGlu ZyB0byBzZW5kICAqLworCSAgICAgIHogPSAwOwkJCS8qIEZsYWcgZm9yIHN0ZGluICovCisJICAg ICAgY21saXN0ID0geGFyZ3YgKyAxOwkvKiBSZW1lbWJlciB0aGlzIHBvaW50ZXIgKi8KKwkgICAg ICB3aGlsZSAoKyt4YXJndiwgLS14YXJnYyA+IDApIHsgLyogVHJhdmVyc2UgdGhlIGxpc3QgKi8K KyNpZmRlZiBQSVBFU0VORAorCQkgIGlmICh1c2VwaXBlcyAmJiBwcm90b2NvbCA9PSBQUk9UT19L ICYmICoqeGFyZ3YgPT0gJyEnKSB7CisJCSAgICAgIGNtYXJnID0gKnhhcmd2OworCQkgICAgICBj bWFyZysrOworCQkgICAgICBkZWJ1ZyhGMTEwLCJkb2FyZyBwaXBlc2VuZCIsY21hcmcsMCk7CisJ CSAgICAgIG5maWxzID0gLTE7CisJCSAgICAgIHogPSAxOworCQkgICAgICBwaXBlc2VuZCA9IDE7 CisJCSAgfSBlbHNlCisjZW5kaWYgLyogUElQRVNFTkQgKi8KKwkJICAgIGlmICgqKnhhcmd2ID09 ICctJykgeyAvKiBDaGVjayBmb3Igc2VuZGluZyBzdGRpbiAqLworCQkJaWYgKHN0cmNtcCgqeGFy Z3YsIi0iKSAhPSAwKSAvKiBuZXh0IG9wdGlvbj8gKi8KKwkJCSAgYnJlYWs7CisJCQl6Kys7CQkv KiAiLSIgYWxvbmUgbWVhbnMgc2VuZCBmcm9tIHN0ZGluLiAqLworI2lmZGVmIFJFQ1VSU0lWRQor CQkgICAgfSBlbHNlIGlmICghc3RyY21wKCp4YXJndiwiLiIpKSB7CisJCQlmaWwyc25kID0gMTsK KwkJCW5maWxzKys7CisJCQlyZWN1cnNpdmUgPSAxOworCQkJbm9saW5rcyA9IDI7CisjZW5kaWYg LyogUkVDVVJTSVZFICovCisJCSAgICB9IGVsc2UgLyogQ2hlY2sgaWYgZmlsZSBleGlzdHMgKi8K KwkJICAgICAgaWYgKChyYyA9IHpjaGtpKCp4YXJndikpID4gLTEgfHwgKHJjID09IC0yKSkgewor CQkJICBpZiAgKHJjICE9IC0yKQorCQkJICAgIGZpbDJzbmQgPSAxOworCQkJICBuZmlscysrOwkv KiBCdW1wIGZpbGUgY291bnRlciAqLworCQkgICAgICB9IGVsc2UgaWYgKGlzd2lsZCgqeGFyZ3Yp ICYmIG56eHBhbmQoKnhhcmd2LDApID4gMCkgeworCQkgICAgICAvKiBvciBjb250YWlucyB3aWxk Y2FyZCBjaGFyYWN0ZXJzIG1hdGNoaW5nIHJlYWwgZmlsZXMgKi8KKwkJCSAgZmlsMnNuZCA9IDE7 CisJCQkgIG5maWxzKys7CisJCSAgICAgIH0gZWxzZSB7CisJCQkgIGlmICghZmFpbG1zZykKKwkJ CSAgICBmYWlsbXNnID0gKGNoYXIgKiltYWxsb2MoMjAwMCk7CisJCQkgIGlmIChmYWlsbXNnKSB7 CisJCQkgICAgICBja21ha21zZyhmYWlsbXNnLDIwMDAsCisjaWZkZWYgVk1TCisJCQkJICAgICAg ICIlQ0tFUk1JVC1FLVNFQVJDSEZBSUwgIgorI2Vsc2UKKwkJCQkgICAgICAgImtlcm1pdCAtcyAi CisjZW5kaWYJLyogVk1TICovCisJCQkJICAgICAgICwKKwkJCQkgICAgICAgKnhhcmd2LAorCQkJ CSAgICAgICAiOiAiLAorCQkJCSAgICAgICBja19lcnJzdHIoKQorCQkJCSAgICAgICApOworCQkJ ICB9CisJCSAgICAgIH0KKwkgICAgICB9CisJICAgICAgeGFyZ2MrKywgeGFyZ3YtLTsJCS8qIEFk anVzdCBhcmd2L2FyZ2MgKi8KKwkgICAgICBpZiAoIWZpbDJzbmQgJiYgeiA9PSAwKSB7CisJCSAg aWYgKCFmYWlsbXNnKSB7CisjaWZkZWYgVk1TCisJCSAgICAgIGZhaWxtc2cgPSAiJUNLRVJNSVQt RS1TRUFSQ0hGQUlMLCBubyBmaWxlcyBmb3IgLXMiOworI2Vsc2UKKwkJICAgICAgZmFpbG1zZyA9 ICJObyBmaWxlcyBmb3IgLXMiOworI2VuZGlmIC8qIFZNUyAqLworCQkgIH0KKwkJICBYRkFUQUwo ZmFpbG1zZyk7CisJICAgICAgfQorCSAgICAgIGlmICh6ID4gMSkgeworCQkgIFhGQVRBTCgia2Vy bWl0IC1zOiB0b28gbWFueSAtJ3MiKTsKKwkgICAgICB9CisJICAgICAgaWYgKHogPT0gMSAmJiBm aWwyc25kKSB7CisJCSAgWEZBVEFMKCJpbnZhbGlkIG1peHR1cmUgb2YgZmlsZW5hbWVzIGFuZCAn LScgaW4gLXMiKTsKKwkgICAgICB9CisJICAgICAgZGVidWcoRjEwMSwiZG9hcmcgcyBuZmlscyIs IiIsbmZpbHMpOworCSAgICAgIGRlYnVnKEYxMDEsImRvYXJnIHMgeiIsIiIseik7CisJICAgICAg aWYgKG5maWxzID09IDApIHsJCS8qIG5vIGZpbGUgcGFyYW1ldGVycyB3ZXJlIHNwZWNpZmllZCAq LworCQkgIGlmIChpc19hX3R0eSgwKSkgewkvKiAodXNlZCB0byBiZSBpc19hX3R0eSgxKSAtIHdo eT8pICovCisJCSAgICAgIFhGQVRBTCgic2VuZGluZyBmcm9tIHRlcm1pbmFsIG5vdCBhbGxvd2Vk Iik7CisJCSAgfSBlbHNlIHN0ZGluZiA9IDE7CisJICAgICAgfQorCSAgICAgIGRlYnVnKEYxMDEs ImRvYXJnIHMgc3RkaW5mIiwiIixzdGRpbmYpOworCSAgICAgIGRlYnVnKEYxMTEsImRvYXJnIiwq eGFyZ3YsbmZpbHMpOworCSAgICAgIGFjdGlvbiA9ICdzJzsKKwkgICAgICBicmVhazsKKwkgIH0K KworCSAgY2FzZSAnZyc6CQkJLyogZ2V0ICovCisJICBjYXNlICdHJzoJCQkvKiBnZXQgdG8gc3Rk b3V0ICovCisJICAgIGlmIChhY3Rpb24pIHsKKwkJWEZBVEFMKCJjb25mbGljdGluZyBhY3Rpb25z Iik7CisJICAgIH0KKwkgICAgaWYgKCooeHArMSkpIHsKKwkJWEZBVEFMKCJpbnZhbGlkIGFyZ3Vt ZW50IGJ1bmRsaW5nIGFmdGVyIC1nIik7CisJICAgIH0KKwkgICAgeGFyZ3YrKywgeGFyZ2MtLTsK KwkgICAgaWYgKCh4YXJnYyA9PSAwKSB8fCAoKip4YXJndiA9PSAnLScpKSB7CisJCVhGQVRBTCgi bWlzc2luZyBmaWxlbmFtZSBmb3IgLWciKTsKKwkgICAgfQorCSAgICBpZiAoeCA9PSAnRycpIHN0 ZG91ZiA9IDE7CisJICAgIGNtYXJnID0gKnhhcmd2OworCSAgICBhY3Rpb24gPSAncic7CisJICAg IGJyZWFrOworI2VuZGlmIC8qIE5PWEZFUiAqLworCisjaWZuZGVmIE5PTE9DQUwKKwkgIGNhc2Ug J2MnOgkJCS8qIGNvbm5lY3QgYmVmb3JlICovCisJICAgIGNmbGcgPSAxOworCSAgICBicmVhazsK KworCSAgY2FzZSAnbic6CQkJLyogY29ubmVjdCBhZnRlciAqLworCSAgICBjbmZsZyA9IDE7CisJ ICAgIGJyZWFrOworI2VuZGlmIC8qIE5PTE9DQUwgKi8KKworCSAgY2FzZSAnaCc6CQkJLyogaGVs cCAqLworCSAgICB1c2FnZSgpOworI2lmbmRlZiBOT0lDUAorCSAgICBpZiAoc3RheWZsZyB8fCB3 aGF0ID09IFdfQ09NTUFORCkKKwkgICAgICBicmVhazsKKwkgICAgZWxzZQorI2VuZGlmIC8qIE5P SUNQICovCisJICAgICAgZG9leGl0KEdPT0RfRVhJVCwtMSk7CisKKyNpZm5kZWYgTk9YRkVSCisJ ICBjYXNlICdhJzoJCQkvKiAiYXMiICovCisJICAgIGlmICgqKHhwKzEpKSB7CisJCVhGQVRBTCgi aW52YWxpZCBhcmd1bWVudCBidW5kbGluZyBhZnRlciAtYSIpOworCSAgICB9CisJICAgIHhhcmd2 KyssIHhhcmdjLS07CisJICAgIGlmICgoeGFyZ2MgPCAxKSB8fCAoKip4YXJndiA9PSAnLScpKSB7 CisJCVhGQVRBTCgibWlzc2luZyBuYW1lIGluIC1hIik7CisJICAgIH0KKwkgICAgY21hcmcyID0g Knhhcmd2OworCSAgICBkZWJ1ZyhGMTExLCJkb2FyZyBhIixjbWFyZzIseGFyZ2MpOworCSAgICBi cmVhazsKKyNlbmRpZiAvKiBOT1hGRVIgKi8KKworI2lmbmRlZiBOT0lDUAorCSAgY2FzZSAnWSc6 CQkJLyogTm8gaW5pdGlhbGl6YXRpb24gZmlsZSAqLworCSAgICBub2luaXQgPSAxOworCSAgICBi cmVhazsKKworCSAgY2FzZSAneSc6CQkJLyogQWx0ZXJuYXRlIGluaXQtZmlsZSBuYW1lICovCisJ ICAgIG5vaW5pdCA9IDA7CisJICAgIGlmICgqKHhwKzEpKSB7CisJCVhGQVRBTCgiaW52YWxpZCBh cmd1bWVudCBidW5kbGluZyBhZnRlciAteSIpOworCSAgICB9CisJICAgIHhhcmd2KyssIHhhcmdj LS07CisJICAgIGlmICh4YXJnYyA8IDEpIHsKKwkJWEZBVEFMKCJtaXNzaW5nIGZpbGVuYW1lIGlu IC15Iik7CisJICAgIH0KKwkgICAgLyogc3RyY3B5KGtlcm1yYywqeGFyZ3YpOyAuLi4gYWxyZWFk eSBkb25lIGluIHByZXNjYW4oKS4uLiAqLworCSAgICBicmVhazsKKyNlbmRpZiAvKiBOT0lDUCAq LworCisjaWZuZGVmIE5PWEZFUgorCSAgY2FzZSAnSSc6CQkJLyogQXNzdW1lIHdlIGhhdmUgYW4g IkludGVybmV0IiAqLworCSAgICByZWxpYWJsZSA9IDE7CQkvKiBvciBvdGhlciByZWxpYWJsZSBj b25uZWN0aW9uICovCisJICAgIHhyZWxpYWJsZSA9IDE7CisJICAgIHNldHJlbGlhYmxlID0gMTsK KworCSAgICAvKiBJJ20gbm90IHNvIHN1cmUgYWJvdXQgdGhpcyAtLSB3aGF0IGFib3V0IFZNUz8g KG5leHQgY29tbWVudCkgKi8KKwkgICAgY2xlYXJycSA9IDE7CQkvKiB0aGVyZWZvcmUgdGhlIGNo YW5uZWwgaXMgY2xlYXIgKi8KKworI2lmbmRlZiBWTVMKKy8qCisgIFNpbmNlIHRoaXMgY2FuIHRy aWdnZXIgZnVsbCBjb250cm9sLWNoYXJhY3RlciB1bnByZWZpeGluZywgd2UgbmVlZCB0bworICBl bnN1cmUgdGhhdCBvdXIgdGVybWluYWwgb3IgcHR5IGRyaXZlciBpcyBub3QgZG9pbmcgWG9uL1hv ZmY7IG90aGVyd2lzZQorICB3ZSBjYW4gYmVjb21lIGRlYWRsb2NrZWQgdGhlIGZpcnN0IHRpbWUg d2UgcmVjZWl2ZSBhIGZpbGUgdGhhdCBjb250YWlucworICBYb2ZmLgorKi8KKwkgICAgZmxvdyA9 IEZMT19OT05FOworI2VuZGlmIC8qIFZNUyAqLworCSAgICBicmVhazsKKyNlbmRpZiAvKiBOT1hG RVIgKi8KKworI2lmbmRlZiBOT0xPQ0FMCisJICBjYXNlICdsJzoJCQkvKiBTRVQgTElORSAqLwor I2lmZGVmIE5FVENPTk4KKyNpZmRlZiBBTllYMjUKKwkgIGNhc2UgJ1gnOgkJCS8qIFNFVCBIT1NU IHRvIFguMjUgYWRkcmVzcyAqLworI2lmZGVmIFNVTlgyNQorCSAgY2FzZSAnWic6CQkJLyogU0VU IEhPU1QgdG8gWC4yNSBmaWxlIGRlc2NyaXB0b3IgKi8KKyNlbmRpZiAvKiBTVU5YMjUgKi8KKyNl bmRpZiAvKiBBTllYMjUgKi8KKyNpZmRlZiBUQ1BTT0NLRVQKKwkgIGNhc2UgJ0onOgorCSAgY2Fz ZSAnaic6CQkJLyogU0VUIEhPU1QgKFRDUC9JUCBzb2NrZXQpICovCisjZW5kaWYgLyogVENQU09D S0VUICovCisjZW5kaWYgLyogTkVUQ09OTiAqLworI2lmbmRlZiBOT1hGRVIKKwkgICAgaWYgKHgg PT0gJ2onIHx8IHggPT0gJ0onIHx8IHggPT0gJ1gnIHx8IHggPT0gJ1onKSB7CisJCXJlbGlhYmxl ID0gMTsJCS8qIG9yIG90aGVyIHJlbGlhYmxlIGNvbm5lY3Rpb24gKi8KKwkJeHJlbGlhYmxlID0g MTsKKwkJc2V0cmVsaWFibGUgPSAxOworCSAgICB9CisjZW5kaWYgLyogTk9YRkVSICovCisJICAg IG5ldHdvcmsgPSAwOworCSAgICBpZiAoKih4cCsxKSkgeworCQlYRkFUQUwoImludmFsaWQgYXJn dW1lbnQgYnVuZGxpbmcgYWZ0ZXIgLWwgb3IgLWoiKTsKKwkgICAgfQorCSAgICB4YXJndisrLCB4 YXJnYy0tOworCSAgICBpZiAoKHhhcmdjIDwgMSkgfHwgKCoqeGFyZ3YgPT0gJy0nKSkgeworCQlY RkFUQUwoImNvbW11bmljYXRpb24gbGluZSBkZXZpY2UgbmFtZSBtaXNzaW5nIik7CisJICAgIH0K KworI2lmZGVmIE5FVENPTk4KKwkgICAgaWYgKHggPT0gJ0onKSB7CisJCWNmbGcgICAgPSAxOwkJ LyogQ29ubmVjdCAqLworCQlzdGF5ZmxnID0gMTsJCS8qIFN0YXkgKi8KKwkJdG5fZXhpdCA9IDE7 CQkvKiBUZWxuZXQtbGlrZSBleGl0IGNvbmRpdGlvbiAqLworCQlleGl0b25jbG9zZSA9IDE7CisJ ICAgIH0KKyNlbmRpZiAvKiBORVRDT05OICovCisJICAgIGNrc3RybmNweSh0dG5hbWUsKnhhcmd2 LFRUTkFNTEVOKzEpOworCSAgICBsb2NhbCA9IChzdHJjbXAodHRuYW1lLENUVE5BTSkgIT0gMCk7 CisJICAgIGlmIChsb2NhbCAmJiBzdHJjbXAodHRuYW1lLCIwIikgPT0gMCkKKwkgICAgICBsb2Nh bCA9IDA7CisvKgorICBOT1RFOiBXZSByZWFsbHkgZG8gbm90IG5lZWQgdG8gY2FsbCB0dG9wZW4g aGVyZSwgc2luY2UgaXQgc2hvdWxkIGJlIGNhbGxlZAorICBhZ2FpbiBsYXRlciwgYXV0b21hdGlj YWxseSwgd2hlbiB3ZSBmaXJzdCB0cnkgdG8gY29uZGl0aW9uIHRoZSBkZXZpY2UgdmlhCisgIHR0 cGt0IG9yIHR0dnQuICBDYWxsaW5nIHR0b3BlbiBoZXJlIGhhcyB0aGUgYmFkIHNpZGUgZWZmZWN0 IG9mIG1ha2luZyB0aGUKKyAgb3JkZXIgb2YgdGhlIC1iIGFuZCAtbCBvcHRpb25zIHNpZ25pZmlj YW50IHdoZW4gdGhlIG9yZGVyIG9mIGNvbW1hbmQtbGluZQorICBvcHRpb25zIHNob3VsZCBub3Qg bWF0dGVyLiAgSG93ZXZlciwgdGhlIG5ldHdvcmsgY2FzZXMgaW1tZWRpYXRlbHkgYmVsb3cKKyAg Y29tcGxpY2F0ZSBtYXR0ZXJzIGEgYml0LCBzbyB3ZSdsbCBzZXR0bGUgdGhpcyBpbiBhIGZ1dHVy ZSBlZGl0LgorKi8KKwkgICAgaWYgKHggPT0gJ2wnKSB7CisJCWlmICh0dG9wZW4odHRuYW1lLCZs b2NhbCxtZG10eXAsMCkgPCAwKSB7CisJCSAgICBYRkFUQUwoImNhbid0IG9wZW4gZGV2aWNlIik7 CisJCX0KKyNpZmRlZiBDS0xPR0RJQUwKKwkJZG9sb2dsaW5lKCk7CisjZW5kaWYgLyogQ0tMT0dE SUFMICovCisJCWRlYnVnKEYxMDEsImRvYXJnIHNwZWVkIiwiIixzcGVlZCk7CisJCWN4dHlwZSA9 IChtZG10eXAgPiAwKSA/IENYVF9NT0RFTSA6IENYVF9ESVJFQ1Q7CisJCXNwZWVkID0gdHRnc3Bk KCk7CS8qIEdldCB0aGUgc3BlZWQuICovCisJCXNldGZsb3coKTsJCS8qIERvIHNvbWV0aGluZyBh Ym91dCBmbG93IGNvbnRyb2wuICovCisjaWZuZGVmIE5PU1BMCisJCWlmIChsb2NhbCkgeworCQkg ICAgaWYgKG5tYWMpIHsJCS8qIEFueSBtYWNyb3MgZGVmaW5lZD8gKi8KKwkJCWludCBrOwkJLyog WWVzICovCisJCQlrID0gbWxvb2sobWFjdGFiLCJvbl9vcGVuIixubWFjKTsgLyogTG9vayB0aGlz IHVwICovCisJCQlpZiAoayA+PSAwKSB7CS8qIElmIGZvdW5kLCAqLworCQkJICAgIGlmIChkb2Rv KGssdHRuYW1lLDApID4gLTEpIC8qIHNldCBpdCB1cCwgKi8KKwkJCSAgICAgIHBhcnNlcigxKTsg LyogYW5kIGV4ZWN1dGUgaXQgKi8KKwkJCX0KKwkJICAgIH0KKwkJfQorI2VuZGlmIC8qIE5PU1BM ICovCisKKyNpZmRlZiBORVRDT05OCisJICAgIH0gZWxzZSB7CisJCWlmICh4ID09ICdqJyB8fCB4 ID09ICdKJykgeyAvKiBJUCBuZXR3b3JrIGhvc3QgbmFtZSAqLworCQkgICAgY2hhciAqIHMgPSBs aW5lOworCQkgICAgY2hhciAqIHNlcnZpY2UgPSB0bXBidWY7CisJCSAgICBpZiAoeGFyZ2MgPiAw KSB7CS8qIENoZWNrIGlmIGl0J3MgZm9sbG93ZWQgYnkgKi8KKwkJCS8qIEEgc2VydmljZSBuYW1l IG9yIG51bWJlciAqLworCQkJaWYgKCooeGFyZ3YrMSkgJiYgKigqKHhhcmd2KzEpKSAhPSAnLScp IHsKKwkJCSAgICB4YXJndisrLCB4YXJnYy0tOworCQkJICAgIGNrc3RybmNhdCh0dG5hbWUsIjoi LFRUTkFNTEVOKzEpOworCQkJICAgIGNrc3RybmNhdCh0dG5hbWUsKnhhcmd2LFRUTkFNTEVOKzEp OworCQkJfQorCQkgICAgfQorCQkgICAgbmV0dHlwZSA9IE5FVF9UQ1BCOworCQkgICAgbWRtdHlw ID0gLW5ldHR5cGU7CS8qIFBlcmhhcHMgYWxyZWFkeSBzZXQgaW4gaW5pdCBmaWxlICovCisJCSAg ICB0ZWxuZXRmZCA9IDE7CS8qIE9yIG1heWJlIGFuIG9wZW4gZmlsZSBkZXNjcmlwdG9yICovCisJ CSAgICBja3N0cm5jcHkobGluZSwgdHRuYW1lLCBMSU5CVUZTSVopOyAvKiBXb3JraW5nIGNvcHkg Ki8KKwkJICAgIGZvciAocyA9IGxpbmU7ICpzICE9IE5VTCAmJiAqcyAhPSAnOic7IHMrKyk7CisJ CSAgICBpZiAoKnMpIHsKKwkJCSpzKysgPSBOVUw7CisJCQlja3N0cm5jcHkoc2VydmljZSwgcywg VE1QQlVGU0laKTsKKwkJICAgIH0gZWxzZSAqc2VydmljZSA9IE5VTDsKKwkJICAgIHMgPSBsaW5l OworI2lmbmRlZiBOT0RJQUwKKyNpZm5kZWYgTk9JQ1AKKwkJICAgIC8qIExvb2sgdXAgaW4gbmV0 d29yayBkaXJlY3RvcnkgKi8KKwkJICAgIHggPSAwOworCQkgICAgaWYgKCpzID09ICc9Jykgewkv KiBJZiBudW1iZXIgc3RhcnRzIHdpdGggPSBzaWduICovCisJCQlzKys7CQkvKiBzdHJpcCBpdCAq LworCQkJd2hpbGUgKCpzID09IFNQKSAvKiBhbmQgYWxzbyBhbnkgbGVhZGluZyBzcGFjZXMgKi8K KwkJCSAgcysrOworCQkJY2tzdHJuY3B5KGxpbmUscyxMSU5CVUZTSVopOyAvKiBEbyB0aGlzIGFn YWluLiAqLworCQkJbmhjb3VudCA9IDA7CisJCSAgICB9IGVsc2UgaWYgKCFpc2RpZ2l0KGxpbmVb MF0pKSB7CisvKgorICBubmV0ZGlyIHdpbGwgYmUgZ3JlYXRlciB0aGFuIDAgaWYgdGhlIGluaXQg ZmlsZSBoYXMgYmVlbiBwcm9jZXNzZWQgYW5kIGl0CisgIGNvbnRhaW5lZCBhIFNFVCBORVRXT1JL IERJUkVDVE9SWSBjb21tYW5kLgorKi8KKwkJCXh4ID0gMDsJCS8qIEluaXRpYWxpemUgdGhpcyAq LworCQkJaWYgKG5uZXRkaXIgPiAwKSAvKiBJZiB0aGVyZSBpcyBhIGRpcmVjdG9yeS4uLiAqLwor CQkJICB4eCA9IGx1bmV0KGxpbmUpOyAvKiBMb29rIHVwIHRoZSBuYW1lICovCisJCQllbHNlCQkv KiBJZiBubyBkaXJlY3RvcnkgKi8KKwkJCSAgbmhjb3VudCA9IDA7CS8qIHdlIGRpZG4ndCBmaW5k IGFueXRoaW5nIHRoZXJlICovCisJCQlpZiAoeHggPCAwKSB7CS8qIExvb2t1cCBlcnJvcjogKi8K KwkJCSAgICBja21ha21zZyh0bXBidWYsCisJCQkJICAgICBUTVBCVUZTSVosCisJCQkJICAgICI/ RmF0YWwgbmV0d29yayBkaXJlY3RvcnkgbG9va3VwIGVycm9yIC0gIiwKKwkJCQkgICAgIGxpbmUs CisJCQkJICAgICAiXG4iLAorCQkJCSAgICAgTlVMTAorCQkJCSAgICAgKTsKKwkJCSAgICBYRkFU QUwodG1wYnVmKTsKKwkJCX0KKwkJICAgIH0KKyNlbmRpZiAvKiBOT0lDUCAqLworI2VuZGlmIC8q IE5PRElBTCAqLworCQkgICAgLyogQWRkIHNlcnZpY2UgdG8gbGluZSBzcGVjaWZpY2F0aW9uIGZv ciB0dG9wZW4oKSAqLworCQkgICAgaWYgKCpzZXJ2aWNlKSB7CS8qIFRoZXJlIGlzIGEgc2Vydmlj ZSBzcGVjaWZpZWQgKi8KKwkJCWNrc3RybmNhdChsaW5lLCAiOiIsTElOQlVGU0laKTsKKwkJCWNr c3RybmNhdChsaW5lLCBzZXJ2aWNlLExJTkJVRlNJWik7CisJCQl0dG5wcm90byA9IE5QX0RFRkFV TFQ7CisJCSAgICB9IGVsc2UgeworCQkJY2tzdHJuY2F0KGxpbmUsICI6dGVsbmV0IixMSU5CVUZT SVopOworCQkJdHRucHJvdG8gPSBOUF9URUxORVQ7CisJCSAgICB9CisKKyNpZm5kZWYgTk9JQ1AK KyNpZm5kZWYgTk9ESUFMCisJCSAgICBpZiAoKG5oY291bnQgPiAxKSAmJiAhcXVpZXQgJiYgIWJh Y2tncmQpIHsKKwkJCXByaW50ZigiJWQgZW50ciVzIGZvdW5kIGZvciBcIiVzXCIlc1xuIiwKKwkJ CSAgICAgICBuaGNvdW50LAorCQkJICAgICAgIChuaGNvdW50ID09IDEpID8gInkiIDogImllcyIs CisJCQkgICAgICAgcywKKwkJCSAgICAgICAobmhjb3VudCA+IDApID8gIjoiIDogIi4iCisJCQkg ICAgICAgKTsKKwkJCWZvciAoaSA9IDA7IGkgPCBuaGNvdW50OyBpKyspCisJCQkgIHByaW50Zigi JTNkLiAlcyAlLTEycyA9PiAlc1xuIiwKKwkJCQkgaSsxLCBuX25hbWUsIG5oX3AyW2ldLCBuaF9w W2ldCisJCQkJICk7CisJCSAgICB9CisJCSAgICBpZiAobmhjb3VudCA9PSAwKQorCQkgICAgICBu ID0gMTsKKwkJICAgIGVsc2UKKwkJICAgICAgbiA9IG5oY291bnQ7CisjZWxzZQorCQkgICAgbiA9 IDE7CisJCSAgICBuaGNvdW50ID0gMDsKKyNlbmRpZiAvKiBOT0RJQUwgKi8KKwkJICAgIGZvciAo aSA9IDA7IGkgPCBuOyBpKyspIHsKKyNpZm5kZWYgTk9ESUFMCisJCQlpZiAobmhjb3VudCA+PSAx KSB7CisJCQkgICAgLyogQ29weSB0aGUgY3VycmVudCBlbnRyeSB0byBsaW5lICovCisJCQkgICAg Y2tzdHJuY3B5KGxpbmUsbmhfcFtpXSxMSU5CVUZTSVopOworICAgICAgICAgICAgICAgICAgICAv KiBDaGVjayB0byBzZWUgaWYgdGhlIG5ldHdvcmsgZW50cnkgY29udGFpbnMgYSBzZXJ2aWNlICov CisJCQkgICAgZm9yIChzID0gbGluZSA7ICgqcyAhPSBOVUwpICYmICgqcyAhPSAnOicpOyBzKysp CisJCQkgICAgICA7CisJCQkgICAgLyogSWYgZGlyZWN0b3J5IGRvZXMgbm90IGhhdmUgYSBzZXJ2 aWNlIC4uLiAqLworCQkJICAgIC8qIGFuZCB0aGUgdXNlciBzcGVjaWZpZWQgb25lICovCisJCQkg ICAgaWYgKCEqcyAmJiAqc2VydmljZSkgeworCQkJCWNrc3RybmNhdChsaW5lLCAiOiIsTElOQlVG U0laKTsKKwkJCQlja3N0cm5jYXQobGluZSwgc2VydmljZSxMSU5CVUZTSVopOworCQkJICAgIH0K KwkJCSAgICBpZiAobG9va3VwKG5ldGNtZCxuaF9wMltpXSxubmV0cywmeikgPiAtMSkgeworCQkJ CW1kbXR5cCA9IDAgLSBuZXRjbWRbel0ua3d2YWw7CisJCQkgICAgfSBlbHNlIHsKKwkJCQlwcmlu dGYoCisJCQkJICJFcnJvciAtIG5ldHdvcmsgdHlwZSBcIiVzXCIgbm90IHN1cHBvcnRlZFxuIiwK KwkJCQkgICAgICAgbmhfcDJbaV0KKwkJCQkgICAgICAgKTsKKwkJCQljb250aW51ZTsKKwkJCSAg ICB9CisJCQl9CisjZW5kaWYgLyogTk9ESUFMICovCisJCSAgICB9CisjZW5kaWYgLyogTk9JQ1Ag Ki8KKwkJICAgIGNrc3RybmNweSh0dG5hbWUsIGxpbmUsVFROQU1MRU4rMSk7CisJCSAgICBjeHR5 cGUgPSBDWFRfVENQSVA7CS8qIFNldCBjb25uZWN0aW9uIHR5cGUgKi8KKwkJICAgIHNldGZsb3co KTsJCS8qIFNldCBhcHByb3ByaWF0ZSBmbG93IGNvbnRyb2wuICovCisjaWZkZWYgU1VOWDI1CisJ CX0gZWxzZSBpZiAoeCA9PSAnWCcpIHsJLyogWC4yNSBhZGRyZXNzICovCisJCSAgICBuZXR0eXBl ID0gTkVUX1NYMjU7CisJCSAgICBtZG10eXAgPSAtbmV0dHlwZTsKKwkJfSBlbHNlIGlmICh4ID09 ICdaJykgewkvKiBPcGVuIFguMjUgZmlsZSBkZXNjcmlwdG9yICovCisJCSAgICBuZXR0eXBlID0g TkVUX1NYMjU7CisJCSAgICBtZG10eXAgPSAtbmV0dHlwZTsKKwkJICAgIHgyNWZkID0gMTsKKyNl bmRpZiAvKiBTVU5YMjUgKi8KKyNpZmRlZiBTVFJBVFVTWDI1CisJCX0gZWxzZSBpZiAoeCA9PSAn WCcpIHsJLyogWC4yNSBhZGRyZXNzICovCisJCSAgICBuZXR0eXBlID0gTkVUX1ZYMjU7CisJCSAg ICBtZG10eXAgPSAtbmV0dHlwZTsKKyNlbmRpZiAvKiBTVFJBVFVTWDI1ICovCisjaWZkZWYgSUJN WDI1CisJCX0gZWxzZSBpZiAoeCA9PSAnWCcpIHsJLyogWC4yNSBhZGRyZXNzICovCisJCSAgICBu ZXR0eXBlID0gTkVUX0lYMjU7CisJCSAgICBtZG10eXAgPSAtbmV0dHlwZTsKKyNlbmRpZiAvKiBJ Qk1YMjUgKi8KKyNpZmRlZiBIUFgyNQorCQl9IGVsc2UgaWYgKHggPT0gJ1gnKSB7CS8qIFguMjUg YWRkcmVzcyAqLworCQkgICAgbmV0dHlwZSA9IE5FVF9IWDI1OworCQkgICAgbWRtdHlwID0gLW5l dHR5cGU7CisjZW5kaWYgLyogSFBYMjUgKi8KKwkJfQorCQlpZiAodHRvcGVuKHR0bmFtZSwmbG9j YWwsbWRtdHlwLDApIDwgMCkgeworCQkgICAgWEZBVEFMKCJjYW4ndCBvcGVuIGhvc3QgY29ubmVj dGlvbiIpOworCQl9CisJCW5ldHdvcmsgPSAxOworI2lmZGVmIENLTE9HRElBTAorCQlkb2xvZ25l dCgpOworI2VuZGlmIC8qIENLTE9HRElBTCAqLworCQljeHR5cGUgPSBDWFRfWDI1OwkvKiBTZXQg Y29ubmVjdGlvbiB0eXBlICovCisJCXNldGZsb3coKTsJCS8qIFNldCBhcHByb3ByaWF0ZSBmbG93 IGNvbnRyb2wuICovCisjaWZuZGVmIE5PU1BMCisJCWlmIChsb2NhbCkgeworCQkgICAgaWYgKG5t YWMpIHsJCS8qIEFueSBtYWNyb3MgZGVmaW5lZD8gKi8KKwkJCWludCBrOwkJLyogWWVzICovCisJ CQlrID0gbWxvb2sobWFjdGFiLCJvbl9vcGVuIixubWFjKTsgLyogTG9vayB0aGlzIHVwICovCisJ CQlpZiAoayA+PSAwKSB7CS8qIElmIGZvdW5kLCAqLworCQkJICAgIGlmIChkb2RvKGssdHRuYW1l LDApID4gLTEpIC8qIHNldCBpdCB1cCwgKi8KKwkJCSAgICAgIHBhcnNlcigxKTsgICAgICAgIC8q IGFuZCBleGVjdXRlIGl0ICovCisJCQl9CisJCSAgICB9CisJCX0KKyNlbmRpZiAvKiBOT1NQTCAq LworI2VuZGlmIC8qIE5FVENPTk4gKi8KKwkgICAgfQorCSAgICAvKiBhZGQgbW9yZSBoZXJlIC0t IGRlY25ldCwgZXRjLi4uICovCisJICAgIGhhdmVsaW5lID0gMTsKKwkgICAgYnJlYWs7CisKKyNp ZmRlZiBBTllYMjUKKwkgIGNhc2UgJ1UnOgkJCS8qIFguMjUgY2FsbCB1c2VyIGRhdGEgKi8KKwkg ICAgaWYgKCooeHArMSkpIHsKKwkJWEZBVEFMKCJpbnZhbGlkIGFyZ3VtZW50IGJ1bmRsaW5nIik7 CisJICAgIH0KKwkgICAgeGFyZ3YrKywgeGFyZ2MtLTsKKwkgICAgaWYgKCh4YXJnYyA8IDEpIHx8 ICgqKnhhcmd2ID09ICctJykpIHsKKwkJWEZBVEFMKCJtaXNzaW5nIGNhbGwgdXNlciBkYXRhIHN0 cmluZyIpOworCSAgICB9CisJICAgIGNrc3RybmNweSh1ZGF0YSwqeGFyZ3YsTUFYQ1VEQVRBKTsK KwkgICAgaWYgKChpbnQpc3RybGVuKHVkYXRhKSA8PSBNQVhDVURBVEEpIHsKKwkJY3VkYXRhID0g MTsKKwkgICAgfSBlbHNlIHsKKwkJWEZBVEFMKCJJbnZhbGlkIGNhbGwgdXNlciBkYXRhIik7CisJ ICAgIH0KKwkgICAgYnJlYWs7CisKKwkgIGNhc2UgJ28nOgkJCS8qIFguMjUgY2xvc2VkIHVzZXIg Z3JvdXAgKi8KKwkgICAgaWYgKCooeHArMSkpIHsKKwkJWEZBVEFMKCJpbnZhbGlkIGFyZ3VtZW50 IGJ1bmRsaW5nIik7CisJICAgIH0KKwkgICAgeGFyZ3YrKywgeGFyZ2MtLTsKKwkgICAgaWYgKCh4 YXJnYyA8IDEpIHx8ICgqKnhhcmd2ID09ICctJykpIHsKKwkJWEZBVEFMKCJtaXNzaW5nIGNsb3Nl ZCB1c2VyIGdyb3VwIGluZGV4Iik7CisJICAgIH0KKwkgICAgeiA9IGF0b2koKnhhcmd2KTsJCS8q IENvbnZlcnQgdG8gbnVtYmVyICovCisJICAgIGlmICh6ID49IDAgJiYgeiA8PSA5OSkgeworCQlj bG9zZ3IgPSB6OworCSAgICB9IGVsc2UgeworCQlYRkFUQUwoIkludmFsaWQgY2xvc2VkIHVzZXIg Z3JvdXAgaW5kZXgiKTsKKwkgICAgfQorCSAgICBicmVhazsKKworCSAgY2FzZSAndSc6CQkJLyog WC4yNSByZXZlcnNlIGNoYXJnZSBjYWxsICovCisJICAgIHJldmNhbGwgPSAxOworCSAgICBicmVh azsKKyNlbmRpZiAvKiBBTllYMjUgKi8KKyNlbmRpZiAvKiBOT0xPQ0FMICovCisKKwkgIGNhc2Ug J2InOgkJCS8qIEJpdHMtcGVyLXNlY29uZCBmb3Igc2VyaWFsIGRldmljZSAqLworCSAgICBpZiAo Kih4cCsxKSkgeworCQlYRkFUQUwoImludmFsaWQgYXJndW1lbnQgYnVuZGxpbmciKTsKKwkgICAg fQorCSAgICB4YXJndisrLCB4YXJnYy0tOworCSAgICBpZiAoKHhhcmdjIDwgMSkgfHwgKCoqeGFy Z3YgPT0gJy0nKSkgeworCQlYRkFUQUwoIm1pc3NpbmcgYnBzIik7CisJICAgIH0KKwkgICAgenog PSBhdG9sKCp4YXJndik7CQkvKiBDb252ZXJ0IHRvIGxvbmcgaW50ICovCisJICAgIGkgPSB6eiAv IDEwTDsKKyNpZm5kZWYgTk9MT0NBTAorCSAgICBpZiAodHRzc3BkKGkpID4gLTEpCQkvKiBDaGVj ayBhbmQgc2V0IGl0ICovCisjZW5kaWYgLyogTk9MT0NBTCAqLworCSAgICAgIHNwZWVkID0gdHRn c3BkKCk7CQkvKiBhbmQgcmVhZCBpdCBiYWNrLiAqLworI2lmbmRlZiBOT0xPQ0FMCisJICAgIGVs c2UgeworCQlYRkFUQUwoInVuc3VwcG9ydGVkIHRyYW5zbWlzc2lvbiByYXRlIik7CisJICAgIH0K KyNlbmRpZiAvKiBOT0xPQ0FMICovCisJICAgIGJyZWFrOworCisjaWZuZGVmIE5PRElBTAorI2lm bmRlZiBOT0lDUAorCSAgY2FzZSAnbSc6CQkJLyogTW9kZW0gdHlwZSAqLworCSAgICBpZiAoKih4 cCsxKSkgeworCQlYRkFUQUwoImludmFsaWQgYXJndW1lbnQgYnVuZGxpbmcgYWZ0ZXIgLW0iKTsK KwkgICAgfQorCSAgICB4YXJndisrLCB4YXJnYy0tOworCSAgICBpZiAoKHhhcmdjIDwgMSkgfHwg KCoqeGFyZ3YgPT0gJy0nKSkgeworCQlYRkFUQUwoIm1vZGVtIHR5cGUgbWlzc2luZyIpOworCSAg ICB9CisJICAgIHkgPSBsb29rdXAobWRtdGFiLCp4YXJndixubWRtLCZ6KTsKKwkgICAgaWYgKHkg PCAwKSB7CisJCVhGQVRBTCgidW5rbm93biBtb2RlbSB0eXBlIik7CisJICAgIH0KKwkgICAgdXNl cm1kbSA9IDA7CisJICAgIHVzZXJtZG0gPSAoeSA9PSBkaWFsdWR0KSA/IHggOiAwOworCSAgICBp bml0bWRtKHkpOworCSAgICBicmVhazsKKyNlbmRpZiAvKiBOT0lDUCAqLworI2VuZGlmIC8qIE5P RElBTCAqLworCisjaWZuZGVmIE5PWEZFUgorCSAgY2FzZSAnZSc6CQkJLyogRXh0ZW5kZWQgcGFj a2V0IGxlbmd0aCAqLworCSAgICBpZiAoKih4cCsxKSkgeworCQlYRkFUQUwoImludmFsaWQgYXJn dW1lbnQgYnVuZGxpbmcgYWZ0ZXIgLWUiKTsKKwkgICAgfQorCSAgICB4YXJndisrLCB4YXJnYy0t OworCSAgICBpZiAoKHhhcmdjIDwgMSkgfHwgKCoqeGFyZ3YgPT0gJy0nKSkgeworCQlYRkFUQUwo Im1pc3NpbmcgbGVuZ3RoIik7CisJICAgIH0KKwkgICAgeiA9IGF0b2koKnhhcmd2KTsJCS8qIENv bnZlcnQgdG8gbnVtYmVyICovCisJICAgIGlmICh6ID4gMTAgJiYgeiA8PSBtYXhycHMpIHsKKwkJ cnBzaXogPSB1cnBzaXogPSB6OworCQlpZiAoeiA+IDk0KSBycHNpeiA9IDk0OwkvKiBGYWxsYmFj ayBpZiBvdGhlciBLZXJtaXQgY2FuJ3QgKi8KKwkgICAgfSBlbHNlIHsKKwkJWEZBVEFMKCJVbnN1 cHBvcnRlZCBwYWNrZXQgbGVuZ3RoIik7CisJICAgIH0KKwkgICAgYnJlYWs7CisKKwkgIGNhc2Ug J3YnOgkJCS8qIFZpbmRvdyBzaXplICovCisJICAgIGlmICgqKHhwKzEpKSB7CisJCVhGQVRBTCgi aW52YWxpZCBhcmd1bWVudCBidW5kbGluZyIpOworCSAgICB9CisJICAgIHhhcmd2KyssIHhhcmdj LS07CisJICAgIGlmICgoeGFyZ2MgPCAxKSB8fCAoKip4YXJndiA9PSAnLScpKSB7CisJCVhGQVRB TCgibWlzc2luZyBvciBiYWQgd2luZG93IHNpemUiKTsKKwkgICAgfQorCSAgICB6ID0gYXRvaSgq eGFyZ3YpOwkJLyogQ29udmVydCB0byBudW1iZXIgKi8KKwkgICAgaWYgKHogPCAzMikgewkJLyog SWYgaW4gcmFuZ2UgKi8KKwkJd3Nsb3RyID0gejsJCS8qIHNldCBpdCAqLworCQlpZiAoeiA+IDEp IHN3Y2FwciA9IDE7CS8qIFNldCBjYXBhcyBiaXQgaWYgd2luZG93aW5nICovCisJICAgIH0gZWxz ZSB7CisJCVhGQVRBTCgiVW5zdXBwb3J0ZWQgcGFja2V0IGxlbmd0aCIpOworCSAgICB9CisJICAg IGJyZWFrOworI2VuZGlmIC8qIE5PWEZFUiAqLworCisJICBjYXNlICdpJzoJCQkvKiBUcmVhdCBm aWxlcyBhcyBiaW5hcnkgKi8KKwkgICAgYmluYXJ5ID0gWFlGVF9COworCSAgICB4ZmVybW9kZSA9 IFhNT0RFX007CQkvKiBUcmFuc2ZlciBtb2RlIG1hbnVhbCAqLworCSAgICBmaWxlcGVlayA9IDA7 CisjaWZkZWYgUEFUVEVSTlMKKwkgICAgcGF0dGVybnMgPSAwOworI2VuZGlmIC8qIFBBVFRFUk5T ICovCisJICAgIGJyZWFrOworCisjaWZuZGVmIE5PWEZFUgorCSAgY2FzZSAndyc6CQkJLyogV3Jp dGVvdmVyICovCisJICAgIGNrd2FybiA9IDA7CisJICAgIGZuY2FjdCA9IFhZRlhfWDsKKwkgICAg YnJlYWs7CisjZW5kaWYgLyogTk9YRkVSICovCisKKwkgIGNhc2UgJ3EnOgkJCS8qIFF1aWV0ICov CisJICAgIHF1aWV0ID0gMTsKKwkgICAgYnJlYWs7CisKKyNpZmRlZiBERUJVRworCSAgY2FzZSAn ZCc6CQkJLyogREVCVUcgKi8KKwkgICAgYnJlYWs7CQkJLyogSGFuZGxlZCBpbiBwcmVzY2FuKCkg Ki8KKyNlbmRpZiAvKiBERUJVRyAqLworCisJICBjYXNlICcwJzogewkJCS8qIEluIHRoZSBtaWRk bGUgKi8KKwkgICAgICBleHRlcm4gaW50IHR0X2VzY2FwZSwgbHNjYXByOworCSAgICAgIHR0X2Vz Y2FwZSA9IDA7CQkvKiBObyBlc2NhcGUgY2hhcmFjdGVyICovCisJICAgICAgZmxvdyA9IDA7CQkJ LyogTm8gWG9uL1hvZmYgKHdoYXQgYWJvdXQgaHdmYz8pICovCisjaWZuZGVmIE5PWEZFUgorCSAg ICAgIGxzY2FwciA9IDA7CQkvKiBObyBsb2NraW5nIHNoaWZ0cyAqLworI2VuZGlmIC8qIE5PWEZF UiAqLworI2lmZGVmIENLX0FQQworCSAgICAgIHsKKwkJICBleHRlcm4gaW50IGFwY3N0YXR1czsJ LyogTm8gQVBDcyAqLworCQkgIGFwY3N0YXR1cyA9IEFQQ19PRkY7CisJICAgICAgfQorI2VuZGlm IC8qIENLX0FQQyAqLworI2lmbmRlZiBOT0xPQ0FMCisjaWZkZWYgQ0tfQVVUT0RMCisgICAgICAg ICAgICAgIHNldGF1dG9kbCgwLDApOwkJLyogTm8gYXV0b2Rvd25sb2FkICovCisjZW5kaWYgLyog Q0tfQVVUT0RMICovCisjZW5kaWYgLyogTk9MT0NBTCAqLworI2lmbmRlZiBOT0NTRVRTCisJICAg ICAgeworCQkgIGV4dGVybiBpbnQgdGNzciwgdGNzbDsgLyogTm8gY2hhcmFjdGVyLXNldCB0cmFu c2xhdGlvbiAqLworCQkgIHRjc3IgPSAwOworCQkgIHRjc2wgPSB0Y3NyOwkJLyogTWFrZSB0aGVz ZSBlcXVhbCAqLworCSAgICAgIH0KKyNlbmRpZiAvKiBOT0NTRVRTICovCisjaWZkZWYgVE5DT0RF CisJICAgICAgVEVMT1BUX0RFRl9DX1VfTU9ERShURUxPUFRfS0VSTUlUKSA9IFROX05HX1JGOwor CSAgICAgIFRFTE9QVF9ERUZfQ19NRV9NT0RFKFRFTE9QVF9LRVJNSVQpID0gVE5fTkdfUkY7CisJ ICAgICAgVEVMT1BUX0RFRl9TX1VfTU9ERShURUxPUFRfS0VSTUlUKSA9IFROX05HX1JGOworCSAg ICAgIFRFTE9QVF9ERUZfU19NRV9NT0RFKFRFTE9QVF9LRVJNSVQpID0gVE5fTkdfUkY7CisjZW5k aWYgLyogVE5DT0RFICovCisJICB9CisvKiBGYWxsIHRocnUuLi4gKi8KKworCSAgY2FzZSAnOCc6 CQkJLyogOC1iaXQgY2xlYW4gKi8KKwkgICAgcGFyaXR5ID0gMDsKKwkgICAgY21kbXNrID0gMHhm ZjsKKwkgICAgY21hc2sgPSAweGZmOworCSAgICBicmVhazsKKworCSAgY2FzZSAnVic6IHsKKwkg ICAgICBleHRlcm4gaW50IHhmZXJtb2RlOworI2lmZGVmIFBBVFRFUk5TCisJICAgICAgZXh0ZXJu IGludCBwYXR0ZXJuczsKKwkgICAgICBwYXR0ZXJucyA9IDA7CQkvKiBObyBwYXR0ZXJucyAqLwor I2VuZGlmIC8qIFBBVFRFUk5TICovCisJICAgICAgeGZlcm1vZGUgPSBYTU9ERV9NOwkvKiBNYW51 YWwgdHJhbnNmZXIgbW9kZSAqLworCSAgICAgIGZpbGVwZWVrID0gMDsKKwkgICAgICBicmVhazsK KwkgIH0KKworCSAgY2FzZSAncCc6CQkJLyogU0VUIFBBUklUWSAqLworCSAgICBpZiAoKih4cCsx KSkgeworCQlYRkFUQUwoImludmFsaWQgYXJndW1lbnQgYnVuZGxpbmciKTsKKwkgICAgfQorCSAg ICB4YXJndisrLCB4YXJnYy0tOworCSAgICBpZiAoKHhhcmdjIDwgMSkgfHwgKCoqeGFyZ3YgPT0g Jy0nKSkgeworCQlYRkFUQUwoIm1pc3NpbmcgcGFyaXR5Iik7CisJICAgIH0KKwkgICAgc3dpdGNo KHggPSAqKnhhcmd2KSB7CisJICAgICAgY2FzZSAnZSc6CisJICAgICAgY2FzZSAnbyc6CisJICAg ICAgY2FzZSAnbSc6CisJICAgICAgY2FzZSAncyc6IHBhcml0eSA9IHg7IGJyZWFrOworCSAgICAg IGNhc2UgJ24nOiBwYXJpdHkgPSAwOyBicmVhazsKKwkgICAgICBkZWZhdWx0OiAgeyBYRkFUQUwo ImludmFsaWQgcGFyaXR5Iik7IH0KKwkgICAgfQorCSAgICBicmVhazsKKworCSAgY2FzZSAndCc6 CQkJLyogTGluZSB0dXJuYXJvdW5kIGhhbmRzaGFrZSAqLworCSAgICB0dXJuID0gMTsKKwkgICAg dHVybmNoID0gWE9OOwkJLyogWE9OIGlzIHR1cm5hcm91bmQgY2hhcmFjdGVyICovCisJICAgIGR1 cGxleCA9IDE7CQkJLyogSGFsZiBkdXBsZXggKi8KKwkgICAgZmxvdyA9IDA7CQkJLyogTm8gZmxv dyBjb250cm9sICovCisJICAgIGJyZWFrOworCisJICBjYXNlICdCJzoKKwkgICAgYmdzZXQgPSAx OwkJCS8qIEZvcmNlIGJhY2tncm91bmQgKGJhdGNoKSAqLworCSAgICBiYWNrZ3JkID0gMTsKKwkg ICAgYnJlYWs7CisKKwkgIGNhc2UgJ3onOgkJCS8qIEZvcmNlIGZvcmVncm91bmQgKi8KKwkgICAg YmdzZXQgPSAwOworCSAgICBiYWNrZ3JkID0gMDsKKwkgICAgYnJlYWs7CisKKyNpZm5kZWYgTk9Y RkVSCisjaWZkZWYgUkVDVVJTSVZFCisJICBjYXNlICdMJzoKKwkgICAgcmVjdXJzaXZlID0gMjsK KwkgICAgbm9saW5rcyA9IDI7CisJICAgIGZuc3BhdGggPSBQQVRIX1JFTDsKKwkgICAgYnJlYWs7 CisjZW5kaWYgLyogUkVDVVJTSVZFICovCisjZW5kaWYgLyogTk9YRkVSICovCisKKyNpZm5kZWYg Tk9TUEwKKwkgIGNhc2UgJ00nOgkJCS8qIE15IFVzZXIgTmFtZSAqLworCSAgICBpZiAoKih4cCsx KSkgeworCQlYRkFUQUwoImludmFsaWQgYXJndW1lbnQgYnVuZGxpbmciKTsKKwkgICAgfQorCSAg ICB4YXJndisrLCB4YXJnYy0tOworCSAgICBpZiAoKHhhcmdjIDwgMSkgfHwgKCoqeGFyZ3YgPT0g Jy0nKSkgeworCQlYRkFUQUwoIm1pc3NpbmcgdXNlcm5hbWUiKTsKKwkgICAgfQorCSAgICBpZiAo KGludClzdHJsZW4oKnhhcmd2KSA+IDYzKSB7CisJCVhGQVRBTCgidXNlcm5hbWUgdG9vIGxvbmci KTsKKwkgICAgfQorI2lmZGVmIElLU0QKKwkgICAgaWYgKCFpbnNlcnZlcikKKyNlbmRpZiAvKiBJ S1NEICovCisJICAgICAgeworCQkgIGNrc3RybmNweSh1aWRidWYsKnhhcmd2LFVJREJVRkxFTik7 CisJCSAgaGF2ZWZ0cHVpZCA9IDE7CisJICAgICAgfQorCSAgICBicmVhazsKKyNlbmRpZiAvKiBO T1NQTCAqLworCisjaWZkZWYgQ0tfTkVUQklPUworCSAgY2FzZSAnTic6CQkJLyogTmV0QmlvcyBB ZGFwdGVyIE51bWJlciBmb2xsb3dzICovCisJICAgIGlmICgqKHhwKzEpKSB7CisJCVhGQVRBTCgi aW52YWxpZCBhcmd1bWVudCBidW5kbGluZyBhZnRlciAtTiIpOworCSAgICB9CisJICAgIHhhcmd2 KyssIHhhcmdjLS07CisJICAgIGlmICgoeGFyZ2MgPCAxKSB8fCAoKip4YXJndiA9PSAnLScpKSB7 CisJCVhGQVRBTCgibWlzc2luZyBOZXRCaW9zIEFkYXB0ZXIgbnVtYmVyIik7CisJICAgIH0KKwkg ICAgaWYgKChzdHJsZW4oKnhhcmd2KSAhPSAxKSB8fAorCQkoKnhhcmd2KVswXSAhPSAnWCcgJiYK KwkJKGF0b2koKnhhcmd2KSA8IDApICYmCisJCShhdG9pKCp4YXJndikgPiA5KSkgeworCQlYRkFU QUwoIkludmFsaWQgTmV0QmlvcyBBZGFwdGVyIC0gQWRhcHRlcnMgMCB0byA5IGFyZSB2YWxpZCIp OworCSAgICB9CisJICAgIGJyZWFrOworI2VuZGlmIC8qIENLX05FVEJJT1MgKi8KKworI2lmZGVm IE5FVENPTk4KKwkgIGNhc2UgJ0YnOgorCSAgICBuZXR3b3JrID0gMTsKKwkgICAgaWYgKCooeHAr MSkpIHsKKwkJWEZBVEFMKCJpbnZhbGlkIGFyZ3VtZW50IGJ1bmRsaW5nIGFmdGVyIC1GIik7CisJ ICAgIH0KKwkgICAgeGFyZ3YrKywgeGFyZ2MtLTsKKwkgICAgaWYgKCh4YXJnYyA8IDEpIHx8ICgq Knhhcmd2ID09ICctJykpIHsKKwkJWEZBVEFMKCJuZXR3b3JrIGZpbGUgZGVzY3JpcHRvciBtaXNz aW5nIik7CisJICAgIH0KKwkgICAgY2tzdHJuY3B5KHR0bmFtZSwqeGFyZ3YsVFROQU1MRU4rMSk7 CisJICAgIG5ldHR5cGUgPSBORVRfVENQQjsKKwkgICAgbWRtdHlwID0gLW5ldHR5cGU7CisJICAg IHRlbG5ldGZkID0gMTsKKwkgICAgbG9jYWwgPSAxOworCSAgICBicmVhazsKKyNlbmRpZiAvKiBO RVRDT05OICovCisKKyNpZmRlZiBDT01NRU5UCisjaWZkZWYgT1MyUE0KKwkgIGNhc2UgJ1AnOgkJ CS8qIE9TLzIgUHJlc2VudGF0aW9uIE1hbmFnZXIgKi8KKwkgICAgaWYgKCooeHArMSkpIHsKKwkJ WEZBVEFMKCJpbnZhbGlkIGFyZ3VtZW50IGJ1bmRsaW5nIGFmdGVyIC1QIik7CisJICAgIH0KKwkg ICAgeGFyZ3YrKywgeGFyZ2MtLTsKKwkgICAgaWYgKCh4YXJnYyA8IDEpIHx8ICgqKnhhcmd2ID09 ICctJykpIHsKKwkJWEZBVEFMKCJwaXBlIGRhdGEgbWlzc2luZyIpOworCSAgICB9CisJICAgIHBp cGVkYXRhID0gKnhhcmd2OworCSAgICBicmVhazsKKyNlbmRpZiAvKiBPUzJQTSAqLworI2Vsc2UK KwkgIGNhc2UgJ1AnOgkJCS8qIEZpbGVuYW1lcyBsaXRlcmFsICovCisJICAgIGZuY252ICA9IFhZ Rk5fTDsKKwkgICAgZl9zYXZlID0gWFlGTl9MOworCSAgICBicmVhazsKKyNlbmRpZiAvKiBDT01N RU5UICovCisKKyNpZm5kZWYgTk9JQ1AKKwkgIGNhc2UgJ0gnOgorCSAgICBub2hlcmFsZCA9IDE7 CisJICAgIGJyZWFrOworI2VuZGlmIC8qIE5PSUNQICovCisKKyNpZmRlZiBPUzIKKwkgIGNhc2Ug J1cnOgorCSAgICBpZiAoKih4cCsxKSkgeworCQlYRkFUQUwoImludmFsaWQgYXJndW1lbnQgYnVu ZGxpbmcgYWZ0ZXIgLVciKTsKKwkgICAgfQorCSAgICB4YXJndisrLCB4YXJnYy0tOworCSAgICBp ZiAoKHhhcmdjIDwgMSkpIHsgLyogY291bGQgYmUgbmVnYXRpdmUgKi8KKwkJWEZBVEFMKCJXaW5k b3cgaGFuZGxlIG1pc3NpbmciKTsKKwkgICAgfQorCSAgICB4YXJndisrLCB4YXJnYy0tOworCSAg ICBpZiAoKHhhcmdjIDwgMSkgfHwgKCoqeGFyZ3YgPT0gJy0nKSkgeworCQlYRkFUQUwoIktlcm1p dCBJbnN0YW5jZSBtaXNzaW5nIik7CisJICAgIH0KKwkgICAgLyogQWN0aW9uIGRvbmUgaW4gcHJl c2NhbiAqLworCSAgICBicmVhazsKKworCSAgY2FzZSAnIyc6CQkJLyogSzk1IHN0ZGlvIHRocmVh ZHMgKi8KKwkgICAgeGFyZ3YrKywgeGFyZ2MtLTsJCS8qIFNraXAgcGFzdCBhcmd1bWVudCAqLwor CSAgICBicmVhazsJCQkvKiBBY3Rpb24gZG9uZSBpbiBwcmVzY2FuICovCisjZW5kaWYgLyogT1My ICovCisKKyNpZmRlZiBORVdGVFAKKwkgIGNhc2UgJzknOgkJCS8qIEZUUCAqLworCSAgICBpZiAo Kih4cCsxKSkgeworCQlYRkFUQUwoImludmFsaWQgYXJndW1lbnQgYnVuZGxpbmcgYWZ0ZXIgLTki KTsKKwkgICAgfQorCSAgICB4YXJndisrLCB4YXJnYy0tOworCSAgICBpZiAoKHhhcmdjIDwgMSkg fHwgKCoqeGFyZ3YgPT0gJy0nKSkgeworCQlYRkFUQUwoIkZUUCBzZXJ2ZXIgYWRkcmVzcyBtaXNz aW5nIik7CisJICAgIH0KKwkgICAgbWFrZXN0cigmZnRwX2hvc3QsKnhhcmd2KTsKKwkgICAgYnJl YWs7CisjZW5kaWYgLyogTkVXRlRQICovCisKKwkgIGRlZmF1bHQ6CisJICAgIGZhdGFsMigqeGFy Z3YsCisjaWZkZWYgTlQKKyAgICAgICAgICAgICAgICAgICAiaW52YWxpZCBjb21tYW5kLWxpbmUg b3B0aW9uLCB0eXBlIFwiazk1IC1oXCIgZm9yIGhlbHAiCisjZWxzZQorI2lmZGVmIE9TMgorICAg ICAgICAgICAgICAgICAgICJpbnZhbGlkIGNvbW1hbmQtbGluZSBvcHRpb24sIHR5cGUgXCJrMiAt aFwiIGZvciBoZWxwIgorI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAiaW52YWxpZCBjb21tYW5k LWxpbmUgb3B0aW9uLCB0eXBlIFwia2VybWl0IC1oXCIgZm9yIGhlbHAiCisjZW5kaWYgLyogT1My ICovCisjZW5kaWYgLyogTlQgKi8KKwkJICAgKTsKKyAgICAgICAgfQorCWlmICgheHApIGJyZWFr OworCXggPSAqKyt4cDsJCQkvKiBTZWUgaWYgb3B0aW9ucyBhcmUgYnVuZGxlZCAqLworICAgIH0K KyAgICByZXR1cm4oMCk7Cit9CisKKyNpZmRlZiBUTkNPREUKKy8qICBEIE8gVCBOIEEgUiBHICAt LSAgRG8gYSB0ZWxuZXQgY29tbWFuZC1saW5lIGFyZ3VtZW50LiAgKi8KKworc3RhdGljIGludAor I2lmZGVmIENLX0FOU0lDCitkb3RuYXJnKGNoYXIgeCkKKyNlbHNlCitkb3RuYXJnKHgpIGNoYXIg eDsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogZG90bmFyZyAqLyB7CisgICAgY2hhciAqeHA7 CisKKyAgICB4cCA9ICp4YXJndisxOyAgICAgICAgICAgICAgICAgICAgICAvKiBQb2ludGVyIGZv ciBidW5kbGVkIGFyZ3MgKi8KKyAgICBkZWJ1ZyhGMTExLCJkb3RuYXJnIGVudHJ5Iix4cCx4YXJn Yyk7CisgICAgd2hpbGUgKHgpIHsKKyAgICAgICAgZGVidWcoRjAwMCwiZG90bmFyZyBhcmciLCIi LHgpOworICAgICAgICBzd2l0Y2ggKHgpIHsgICAgICAgICAgICAgICAgICAgIC8qIEJpZyBzd2l0 Y2ggb24gYXJnICovCisKKyNpZm5kZWYgQ09NTUVOVAorCSAgY2FzZSAnLSc6CQkJLyogRXh0ZW5k ZWQgY29tbWFuZHMuLi4gKi8KKyAgICAgICAgICAgIGlmIChkb3hhcmcoeGFyZ3YsMCkgPCAwKSB7 CisgICAgICAgICAgICAgICAgWEZBVEFMKCJFeHRlbmRlZCBvcHRpb24gZXJyb3IiKTsKKyAgICAg ICAgICAgIH0gLyogRnVsbCB0aHJ1Li4uICovCisJICBjYXNlICcrJzoJCQkvKiBFeHRlbmRlZCBj b21tYW5kIGZvciBwcmVzY2FuKCkgKi8KKyAgICAgICAgICAgIHJldHVybigwKTsKKyNlbHNlICAv KiBDT01NRU5UICovCisJICBjYXNlICctJzoKKwkgIGNhc2UgJysnOgorCSAgICBYRkFUQUwoIkV4 dGVuZGVkIG9wdGlvbnMgbm90IGNvbmZpZ3VyZWQiKTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisK Ky8qCisgKiAtIyAgICAgICAgICAgICAgICBLZXJtaXQgOTUgU3RhcnR1cCBGbGFncworICogLTgg ICAgICAgICAgICAgICAgTmVnb3RpYXRlIFRlbG5ldCBCaW5hcnkgaW4gYm90aCBkaXJlY3Rpb25z CisgKiAtYSAgICAgICAgICAgICAgICBSZXF1aXJlIHVzZSBvZiBUZWxuZXQgYXV0aGVudGljYXRp b24KKyAqIC1jICAgICAgICAgICAgICAgIERvIG5vdCByZWFkIHRoZSAudGVsbmV0cmMgZmlsZQor ICogLWQgICAgICAgICAgICAgICAgVHVybiBvbiBkZWJ1ZyBtb2RlCisgKiAtRSAgICAgICAgICAg ICAgICBObyBlc2NhcGUgY2hhcmFjdGVyCisgKiAtZiAgICAgICAgICAgICAgICBGb3J3YXJkIGNy ZWRlbnRpYWxzIHRvIGhvc3QKKyAqIC1LICAgICAgICAgICAgICAgIFJlZnVzZSB1c2Ugb2YgYXV0 aGVudGljYXRpb247IGRvIG5vdCBzZW5kIHVzZXJuYW1lCisgKiAtayByZWFsbSAgICAgICAgICBT ZXQgZGVmYXVsdCByZWFsbQorICogLWwgdXNlciAgICAgICAgICAgU2V0IHVzZXJuYW1lIGFuZCBy ZXF1ZXN0IFRlbG5ldCBhdXRoZW50aWNhdGlvbgorICogLUwgICAgICAgICAgICAgICAgTmVnb3Rp YXRlIFRlbG5ldCBCaW5hcnkgT3V0cHV0IG9ubHkKKyAqIC1xICAgICAgICAgICAgICAgIFF1aWV0 IG1vZGUgKHN1cHByZXNzIG1lc3NhZ2VzKQorICogLVMgdG9zICAgICAgICAgICAgVXNlIHRoZSBJ UCB0eXBlLW9mLXNlcnZpY2UgdG9zCisgKiAteCAgICAgICAgICAgICAgICBSZXF1aXJlIEVuY3J5 cHRpb24KKyAqIC1EICAgICAgICAgICAgICAgIERpc2FibGUgZm9yd2FyZC1YCisgKiAtVCBjZXJ0 PWZpbGUgICAgICBVc2UgY2VydGlmaWNhdGUgaW4gZmlsZQorICogLVQga2V5PWZpbGUgICAgICAg VXNlIHByaXZhdGUga2V5IGluIGZpbGUKKyAqIC1UIGNybGZpbGU9ZmlsZSAgIFVzZSBDUkwgaW4g ZmlsZQorICogLVQgY3JsZGlyPWRpciAgICAgVXNlIENSTHMgaW4gZGlyZWN0b3J5CisgKiAtVCBj aXBoZXI9c3RyaW5nICBVc2Ugb25seSBjaXBoZXJzIGluIHN0cmluZworICogLVggYXR5cGUgICAg ICAgICAgRGlzYWJsZSB1c2Ugb2YgYXR5cGUgYXV0aGVudGljYXRpb24KKyAqIC1ZICAgICAgICAg ICAgICAgIERpc2FibGUgaW5pdCBmaWxlIHByb2Nlc3NpbmcKKyAqCisgKi8KKwkgIGNhc2UgJ2gn OgkJCS8qIGhlbHAgKi8KKwkgICAgdXNhZ2UoKTsKKwkgICAgZG9leGl0KEdPT0RfRVhJVCwtMSk7 CisJICAgIGJyZWFrOworCisJICBjYXNlICc4JzoJCQkvKiBUZWxuZXQgQmluYXJ5IGluIGJvdGgg ZGlyZWN0aW9ucyAqLworCSAgICBURUxPUFRfREVGX0NfVV9NT0RFKFRFTE9QVF9CSU5BUlkpID0g VE5fTkdfTVU7CisJICAgIFRFTE9QVF9ERUZfQ19NRV9NT0RFKFRFTE9QVF9CSU5BUlkpID0gVE5f TkdfTVU7CisJICAgIHBhcml0eSA9IDA7CisJICAgIGNtZG1zayA9IDB4ZmY7CisJICAgIGNtYXNr ID0gMHhmZjsKKwkgICAgYnJlYWs7CisKKwkgIGNhc2UgJ2EnOgkJCS8qIFJlcXVpcmUgVGVsbmV0 IEF1dGggKi8KKwkgICAgVEVMT1BUX0RFRl9DX01FX01PREUoVEVMT1BUX0FVVEhFTlRJQ0FUSU9O KSA9IFROX05HX01VOworCSAgICBicmVhazsKKworCSAgY2FzZSAnWSc6CisJICAgIHhhcmd2Kyss IHhhcmdjLS07CQkvKiBTa2lwIHBhc3QgYXJndW1lbnQgKi8KKwkgICAgYnJlYWs7CQkJLyogQWN0 aW9uIGRvbmUgaW4gcHJlc2NhbiAqLworCisjaWZkZWYgT1MyCisgICAgICAgICAgY2FzZSAnIyc6 CQkJLyogSzk1IHN0ZGlvIHRocmVhZHMgKi8KKwkgICAgeGFyZ3YrKywgeGFyZ2MtLTsJCS8qIFNr aXAgcGFzdCBhcmd1bWVudCAqLworCSAgICBicmVhazsJCQkvKiBBY3Rpb24gZG9uZSBpbiBwcmVz Y2FuICovCisjZW5kaWYgLyogT1MyICovCisKKyAgICAgICAgICBjYXNlICdxJzoJICAgICAgICAg ICAgICAgIC8qIFF1aWV0ICovCisJICAgIHF1aWV0ID0gMTsKKwkgICAgYnJlYWs7CisKKwkgIGNh c2UgJ2QnOgorI2lmZGVmIERFQlVHCisJICAgIGlmIChkZWJsb2cpIHsKKwkJZGVidGltID0gMTsK KwkgICAgfSBlbHNlIHsKKwkJZGVibG9nID0gZGVib3BuKCJkZWJ1Zy5sb2ciLDApOworCSAgICB9 CisjZW5kaWYgLyogREVCVUcgKi8KKwkgICAgYnJlYWs7CisKKwkgIGNhc2UgJ0UnOiB7CQkJLyog Tm8gRXNjYXBlIGNoYXJhY3RlciAqLworCSAgICAgIGV4dGVybiBpbnQgdHRfZXNjYXBlOworCSAg ICAgIHR0X2VzY2FwZSA9IDA7CisJICB9CisJICAgIGJyZWFrOworCisJICBjYXNlICdLJzoKKwkg ICAgVEVMT1BUX0RFRl9DX01FX01PREUoVEVMT1BUX0FVVEhFTlRJQ0FUSU9OKSA9IFROX05HX1JG OworCSAgICB1aWRidWZbMF0gPSBOVUw7CisJICAgIGJyZWFrOworCisJICBjYXNlICdsJzogLyog U2V0IHVzZXJuYW1lIGFuZCByZXF1ZXN0IHRlbG5ldCBhdXRoZW50aWNhdGlvbiAqLworCSAgICBp ZiAoKih4cCsxKSkgeworCQlYRkFUQUwoImludmFsaWQgYXJndW1lbnQgYnVuZGxpbmciKTsKKwkg ICAgfQorCSAgICB4YXJndisrLCB4YXJnYy0tOworCSAgICBpZiAoKHhhcmdjIDwgMSkgfHwgKCoq eGFyZ3YgPT0gJy0nKSkgeworCQlYRkFUQUwoIm1pc3NpbmcgdXNlcm5hbWUiKTsKKwkgICAgfQor CSAgICBpZiAoKGludClzdHJsZW4oKnhhcmd2KSA+IDYzKSB7CisJCVhGQVRBTCgidXNlcm5hbWUg dG9vIGxvbmciKTsKKwkgICAgfQorCSAgICBja3N0cm5jcHkodWlkYnVmLCp4YXJndixVSURCVUZM RU4pOworCSAgICBURUxPUFRfREVGX0NfTUVfTU9ERShURUxPUFRfQVVUSEVOVElDQVRJT04pID0g VE5fTkdfTVU7CisJICAgIGJyZWFrOworCisJICBjYXNlICdMJzoJCQkvKiBSZXF1aXJlIEJJTkFS WSBtb2RlIG91dGJvdW5kIG9ubHkgKi8KKwkgICAgVEVMT1BUX0RFRl9DX01FX01PREUoVEVMT1BU X0JJTkFSWSkgPSBUTl9OR19NVTsKKwkgICAgYnJlYWs7CisKKwkgIGNhc2UgJ3gnOgkJCS8qIFJl cXVpcmUgRW5jcnlwdGlvbiAqLworCSAgICBURUxPUFRfREVGX0NfVV9NT0RFKFRFTE9QVF9FTkNS WVBUSU9OKSA9IFROX05HX01VOworCSAgICBURUxPUFRfREVGX0NfTUVfTU9ERShURUxPUFRfRU5D UllQVElPTikgPSBUTl9OR19NVTsKKwkgICAgYnJlYWs7CisKKwkgIGNhc2UgJ0QnOgkJCS8qIERp c2FibGUgdXNlIG9mIEZvcndhcmQgWCAqLworCSAgICBURUxPUFRfREVGX0NfVV9NT0RFKFRFTE9Q VF9GT1JXQVJEX1gpID0gVE5fTkdfUkY7CisJICAgIGJyZWFrOworCisJICBjYXNlICdmJzoJCQkv KiBGb3J3YXJkIGNyZWRlbnRpYWxzIHRvIGhvc3QgKi8KKwkgICAgeworI2lmZGVmIENLX0FVVEhF TlRJQ0FUSU9OCisJCWV4dGVybiBpbnQgZm9yd2FyZF9mbGFnOworCQlmb3J3YXJkX2ZsYWcgPSAx OworI2VuZGlmCisJCWJyZWFrOworCSAgICB9CisKKwkgIGNhc2UgJ2snOiB7CisjaWZkZWYgQ0tf S0VSQkVST1MKKwkgICAgICBleHRlcm4gY2hhciAqIGtyYjVfZF9yZWFsbSwgKiBrcmI0X2RfcmVh bG07CisjZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KKwkgICAgICBpZiAoKih4cCsxKSkgeworCQkg IFhGQVRBTCgiaW52YWxpZCBhcmd1bWVudCBidW5kbGluZyIpOworCSAgICAgIH0KKwkgICAgICB4 YXJndisrLCB4YXJnYy0tOworCSAgICAgIGlmICgoeGFyZ2MgPCAxKSB8fCAoKip4YXJndiA9PSAn LScpKSB7CisJCSAgWEZBVEFMKCJtaXNzaW5nIHJlYWxtIik7CisJICAgICAgfQorI2lmZGVmIENL X0tFUkJFUk9TCisJICAgICAgaWYgKChpbnQpc3RybGVuKCp4YXJndikgPiA2MykgeworCQkgIFhG QVRBTCgicmVhbG0gdG9vIGxvbmciKTsKKwkgICAgICB9CisJICAgICAgbWFrZXN0cigma3JiNV9k X3JlYWxtLCp4YXJndik7CisJICAgICAgbWFrZXN0cigma3JiNF9kX3JlYWxtLCp4YXJndik7Cisj ZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KKwkgICAgICBicmVhazsKKwkgIH0KKworCSAgY2FzZSAn VCc6IHsKKwkgICAgICBpZiAoKih4cCsxKSkgeworCQkgIFhGQVRBTCgiaW52YWxpZCBhcmd1bWVu dCBidW5kbGluZyIpOworCSAgICAgIH0KKwkgICAgICB4YXJndisrLCB4YXJnYy0tOworCSAgICAg IGlmICgoeGFyZ2MgPCAxKSB8fCAoKip4YXJndiA9PSAnLScpKSB7CisJCSAgWEZBVEFMKCJtaXNz aW5nIGNlcnQ9LCBrZXk9LCBjcmxmaWxlPSwgY3JsZGlyPSwgb3IgY2lwaGVyPSIpOworCSAgICAg IH0KKyNpZmRlZiBDS19TU0wKKwkgICAgICBpZiAoIXN0cm5jbXAoKnhhcmd2LCJjZXJ0PSIsNSkp IHsKKwkJICBleHRlcm4gY2hhciAqIHNzbF9yc2FfY2VydF9maWxlOworCQkgIG1ha2VzdHIoJnNz bF9yc2FfY2VydF9maWxlLCYoKnhhcmd2WzVdKSk7CisJICAgICAgfSBlbHNlIGlmICggIXN0cm5j bXAoKnhhcmd2LCJrZXk9Iiw0KSApIHsKKwkJICBleHRlcm4gY2hhciAqIHNzbF9yc2Ffa2V5X2Zp bGU7CisJCSAgbWFrZXN0cigmc3NsX3JzYV9rZXlfZmlsZSwmKCp4YXJndls0XSkpOworCSAgICAg IH0gZWxzZSBpZiAoICFzdHJuY21wKCp4YXJndiwiY3JsZmlsZT0iLDgpICkgeworCQkgIGV4dGVy biBjaGFyICogc3NsX2NybF9maWxlOworCQkgIG1ha2VzdHIoJnNzbF9jcmxfZmlsZSwmKCp4YXJn dls4XSkpOworCSAgICAgIH0gZWxzZSBpZiAoICFzdHJuY21wKCp4YXJndiwiY3JsZGlyPSIsNykg KSB7CisJCSAgZXh0ZXJuIGNoYXIgKiBzc2xfY3JsX2RpcjsKKwkJICBtYWtlc3RyKCZzc2xfY3Js X2RpciwmKCp4YXJndls3XSkpOworCSAgICAgIH0gZWxzZSBpZiAoICFzdHJuY21wKCp4YXJndiwi Y2lwaGVyPSIsNykgKSB7CisJCSAgZXh0ZXJuIGNoYXIgKiBzc2xfY2lwaGVyX2xpc3Q7CisJCSAg bWFrZXN0cigmc3NsX2NpcGhlcl9saXN0LCYoKnhhcmd2WzddKSk7CisJICAgICAgfSBlbHNlIHsK KwkJICBYRkFUQUwoImludmFsaWQgcGFyYW1ldGVyIik7CisJICAgICAgfQorI2VuZGlmIC8qIENL X1NTTCAqLworCSAgICAgIGJyZWFrOworCSAgfQorCisJICBkZWZhdWx0OgorCSAgICBmYXRhbDIo Knhhcmd2LAorCQkgICAiaW52YWxpZCBjb21tYW5kLWxpbmUgb3B0aW9uLCB0eXBlIFwidGVsbmV0 IC1oXCIgZm9yIGhlbHAiCisJCSAgICk7CisgICAgICAgIH0KKworCWlmICgheHApIGJyZWFrOwor CXggPSAqKyt4cDsJCQkvKiBTZWUgaWYgb3B0aW9ucyBhcmUgYnVuZGxlZCAqLworICAgIH0KKyAg ICByZXR1cm4oMCk7Cit9CisjZW5kaWYgLyogVE5DT0RFICovCisKKyNpZmRlZiBSTE9HQ09ERQor CisvKiAgRCBPIFIgTCBHIEEgUiBHICAtLSAgRG8gYSBybG9naW4gY29tbWFuZC1saW5lIGFyZ3Vt ZW50LiAgKi8KKworc3RhdGljIGludAorI2lmZGVmIENLX0FOU0lDCitkb3JsZ2FyZyhjaGFyIHgp CisjZWxzZQorZG9ybGdhcmcoeCkgY2hhciB4OworI2VuZGlmIC8qIENLX0FOU0lDICovCisvKiBk b3JsZ2FyZyAqLyB7CisgICAgY2hhciAqeHA7CisKKyAgICB4cCA9ICp4YXJndisxOyAgICAgICAg ICAgICAgICAgICAgICAvKiBQb2ludGVyIGZvciBidW5kbGVkIGFyZ3MgKi8KKyAgICBkZWJ1ZyhG MTExLCJkb3JsZ2FyZyBlbnRyeSIseHAseGFyZ2MpOworICAgIHdoaWxlICh4KSB7CisgICAgICAg IGRlYnVnKEYwMDAsImRvcmxnYXJnIGFyZyIsIiIseCk7CisgICAgICAgIHN3aXRjaCAoeCkgeyAg ICAgICAgICAgICAgICAgICAgLyogQmlnIHN3aXRjaCBvbiBhcmcgKi8KKworI2lmbmRlZiBDT01N RU5UCisJICBjYXNlICctJzoJCQkvKiBFeHRlbmRlZCBjb21tYW5kcy4uLiAqLworICAgICAgICAg ICAgaWYgKGRveGFyZyh4YXJndiwwKSA8IDApIHsKKyAgICAgICAgICAgIFhGQVRBTCgiRXh0ZW5k ZWQgb3B0aW9uIGVycm9yIik7CisgICAgICAgICAgICB9IC8qIEZ1bGwgdGhydS4uLiAqLworCSAg Y2FzZSAnKyc6CQkJLyogRXh0ZW5kZWQgY29tbWFuZCBmb3IgcHJlc2NhbigpICovCisgICAgICAg ICAgICByZXR1cm4oMCk7CisjZWxzZSAgLyogQ09NTUVOVCAqLworCSAgY2FzZSAnLSc6CisJICBj YXNlICcrJzoKKwkgICAgWEZBVEFMKCJFeHRlbmRlZCBvcHRpb25zIG5vdCBjb25maWd1cmVkIik7 CisjZW5kaWYgLyogQ09NTUVOVCAqLworCisvKgorICogLWQgICAgICAgICAgICAgICAgRGVidWcK KyAqIC1sIHVzZXIgICAgICAgICAgIFNldCB1c2VybmFtZQorICoKKyAqLworCSAgY2FzZSAnaCc6 CQkJLyogaGVscCAqLworCSAgICB1c2FnZSgpOworCSAgICBkb2V4aXQoR09PRF9FWElULC0xKTsK KwkgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlICdZJzoKKwkgICAgeGFyZ3YrKywgeGFyZ2Mt LTsJCS8qIFNraXAgcGFzdCBhcmd1bWVudCAqLworCSAgICBicmVhazsJCQkvKiBBY3Rpb24gZG9u ZSBpbiBwcmVzY2FuICovCisjaWZkZWYgT1MyCisgICAgICAgICAgY2FzZSAnIyc6CQkJLyogSzk1 IHN0ZGlvIHRocmVhZHMgKi8KKwkgICAgeGFyZ3YrKywgeGFyZ2MtLTsJCS8qIFNraXAgcGFzdCBh cmd1bWVudCAqLworCSAgICBicmVhazsJCQkvKiBBY3Rpb24gZG9uZSBpbiBwcmVzY2FuICovCisj ZW5kaWYgLyogT1MyICovCisgICAgICAgICAgY2FzZSAncSc6CSAgICAgICAgICAgICAgICAvKiBR dWlldCAqLworCSAgICBxdWlldCA9IDE7CisJICAgIGJyZWFrOworCisJICBjYXNlICdkJzoKKyNp ZmRlZiBERUJVRworCSAgICBpZiAoZGVibG9nKSB7CisJCWRlYnRpbSA9IDE7CisJICAgIH0gZWxz ZSB7CisJCWRlYmxvZyA9IGRlYm9wbigiZGVidWcubG9nIiwwKTsKKwkgICAgfQorI2VuZGlmIC8q IERFQlVHICovCisJICAgIGJyZWFrOworCisJICBjYXNlICdsJzogLyogU2V0IHVzZXJuYW1lIGFu ZCByZXF1ZXN0IHRlbG5ldCBhdXRoZW50aWNhdGlvbiAqLworCSAgICBpZiAoKih4cCsxKSkgewor CQlYRkFUQUwoImludmFsaWQgYXJndW1lbnQgYnVuZGxpbmciKTsKKwkgICAgfQorCSAgICB4YXJn disrLCB4YXJnYy0tOworCSAgICBpZiAoKHhhcmdjIDwgMSkgfHwgKCoqeGFyZ3YgPT0gJy0nKSkg eworCQlYRkFUQUwoIm1pc3NpbmcgdXNlcm5hbWUiKTsKKwkgICAgfQorCSAgICBpZiAoKGludClz dHJsZW4oKnhhcmd2KSA+IDYzKSB7CisJCVhGQVRBTCgidXNlcm5hbWUgdG9vIGxvbmciKTsKKwkg ICAgfQorCSAgICBja3N0cm5jcHkodWlkYnVmLCp4YXJndixVSURCVUZMRU4pOworCSAgICBicmVh azsKKworCSAgZGVmYXVsdDoKKwkgICAgZmF0YWwyKCp4YXJndiwKKwkJICAgImludmFsaWQgY29t bWFuZC1saW5lIG9wdGlvbiwgdHlwZSBcInJsb2dpbiAtaFwiIGZvciBoZWxwIgorCQkgICApOwor ICAgICAgICB9CisKKwlpZiAoIXhwKSBicmVhazsKKwl4ID0gKisreHA7CQkJLyogU2VlIGlmIG9w dGlvbnMgYXJlIGJ1bmRsZWQgKi8KKyAgICB9CisgICAgcmV0dXJuKDApOworfQorI2VuZGlmIC8q IFJMT0dDT0RFICovCisKKyNpZmRlZiBTU0hCVUlMVElOCisKKy8qICBEIE8gUyBTIEggQSBSIEcg IC0tICBEbyBhIHNzaCBjb21tYW5kLWxpbmUgYXJndW1lbnQuICAqLworCitzdGF0aWMgaW50Cisj aWZkZWYgQ0tfQU5TSUMKK2Rvc3NoYXJnKGNoYXIgeCkKKyNlbHNlCitkb3NzaGFyZyh4KSBjaGFy IHg7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIGRvc3NoYXJnICovIHsKKyAgICBjaGFyICp4 cDsKKworICAgIHhwID0gKnhhcmd2KzE7ICAgICAgICAgICAgICAgICAgICAgIC8qIFBvaW50ZXIg Zm9yIGJ1bmRsZWQgYXJncyAqLworICAgIGRlYnVnKEYxMTEsImRvc3NoYXJnIGVudHJ5Iix4cCx4 YXJnYyk7CisgICAgd2hpbGUgKHgpIHsKKyAgICAgICAgZGVidWcoRjAwMCwiZG9zc2hhcmcgYXJn IiwiIix4KTsKKyAgICAgICAgc3dpdGNoICh4KSB7ICAgICAgICAgICAgICAgICAgICAvKiBCaWcg c3dpdGNoIG9uIGFyZyAqLworCisjaWZuZGVmIENPTU1FTlQKKwkgIGNhc2UgJy0nOgkJCS8qIEV4 dGVuZGVkIGNvbW1hbmRzLi4uICovCisgICAgICAgICAgICBpZiAoZG94YXJnKHhhcmd2LDApIDwg MCkgeworICAgICAgICAgICAgICAgIFhGQVRBTCgiRXh0ZW5kZWQgb3B0aW9uIGVycm9yIik7Cisg ICAgICAgICAgICB9IC8qIEZ1bGwgdGhydS4uLiAqLworCSAgY2FzZSAnKyc6CQkJLyogRXh0ZW5k ZWQgY29tbWFuZCBmb3IgcHJlc2NhbigpICovCisgICAgICAgICAgICByZXR1cm4oMCk7CisjZWxz ZSAgLyogQ09NTUVOVFAgKi8KKwkgIGNhc2UgJy0nOgorCSAgY2FzZSAnKyc6CisJICAgIFhGQVRB TCgiRXh0ZW5kZWQgb3B0aW9ucyBub3QgY29uZmlndXJlZCIpOworI2VuZGlmIC8qIENPTU1FTlQg Ki8KKworLyoKKyAqIC1kICAgICAgICAgICAgICAgIERlYnVnCisgKiAtIyBhcmdzICAgICAgICAg ICBJbml0CisgKiAtWSAgICAgICAgICAgICAgICBubyBpbml0IGZpbGUKKyAqIC1sIHVzZXIgICAg ICAgICAgIFNldCB1c2VybmFtZQorICoKKyAqLworCSAgY2FzZSAnaCc6CQkJLyogaGVscCAqLwor CSAgICB1c2FnZSgpOworCSAgICBkb2V4aXQoR09PRF9FWElULC0xKTsKKwkgICAgYnJlYWs7CisK KyAgICAgICAgICBjYXNlICdZJzoKKwkgICAgeGFyZ3YrKywgeGFyZ2MtLTsJCS8qIFNraXAgcGFz dCBhcmd1bWVudCAqLworCSAgICBicmVhazsJCQkvKiBBY3Rpb24gZG9uZSBpbiBwcmVzY2FuICov CisjaWZkZWYgT1MyCisgICAgICAgICAgY2FzZSAnIyc6CQkJLyogSzk1IHN0ZGlvIHRocmVhZHMg Ki8KKwkgICAgeGFyZ3YrKywgeGFyZ2MtLTsJCS8qIFNraXAgcGFzdCBhcmd1bWVudCAqLworCSAg ICBicmVhazsJCQkvKiBBY3Rpb24gZG9uZSBpbiBwcmVzY2FuICovCisjZW5kaWYgLyogT1MyICov CisgICAgICAgICAgY2FzZSAncSc6CSAgICAgICAgICAgICAgICAvKiBRdWlldCAqLworCSAgICBx dWlldCA9IDE7CisJICAgIGJyZWFrOworCisJICBjYXNlICdkJzoKKyNpZmRlZiBERUJVRworICAg ICAgICAgICAgICBpZiAoZGVibG9nKSB7CisgICAgICAgICAgICAgICAgICBkZWJ0aW0gPSAxOwor ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgZGVibG9nID0gZGVib3Bu KCJkZWJ1Zy5sb2ciLDApOworICAgICAgICAgICAgICB9CisjZW5kaWYgLyogREVCVUcgKi8KKwkg ICAgYnJlYWs7CisKKwkgIGNhc2UgJ2wnOiAvKiBTZXQgdXNlcm5hbWUgYW5kIHJlcXVlc3QgdGVs bmV0IGF1dGhlbnRpY2F0aW9uICovCisJICAgIGlmICgqKHhwKzEpKSB7CisJCVhGQVRBTCgiaW52 YWxpZCBhcmd1bWVudCBidW5kbGluZyIpOworCSAgICB9CisJICAgIHhhcmd2KyssIHhhcmdjLS07 CisJICAgIGlmICgoeGFyZ2MgPCAxKSB8fCAoKip4YXJndiA9PSAnLScpKSB7CisJCVhGQVRBTCgi bWlzc2luZyB1c2VybmFtZSIpOworCSAgICB9CisJICAgIGlmICgoaW50KXN0cmxlbigqeGFyZ3Yp ID4gNjMpIHsKKwkJWEZBVEFMKCJ1c2VybmFtZSB0b28gbG9uZyIpOworCSAgICB9CisJICAgIGNr c3RybmNweSh1aWRidWYsKnhhcmd2LFVJREJVRkxFTik7CisJICAgIGJyZWFrOworCisJICBkZWZh dWx0OgorCSAgICBmYXRhbDIoKnhhcmd2LAorCQkgICAiaW52YWxpZCBjb21tYW5kLWxpbmUgb3B0 aW9uLCB0eXBlIFwic3NoIC1oXCIgZm9yIGhlbHAiCisJCSAgICk7CisgICAgICAgIH0KKworCWlm ICgheHApIGJyZWFrOworCXggPSAqKyt4cDsJCQkvKiBTZWUgaWYgb3B0aW9ucyBhcmUgYnVuZGxl ZCAqLworICAgIH0KKyAgICByZXR1cm4oMCk7Cit9CisjZW5kaWYgLyogU1NIQlVJTFRJTiAqLwor CisjZWxzZSAvKiBObyBjb21tYW5kLWxpbmUgaW50ZXJmYWNlLi4uICovCisKK2ludAorY21kbGlu KCkgeworICAgIGV4dGVybiBpbnQgeGFyZ2M7CisgICAgaWYgKHhhcmdjID4gMSkgeworICAgICAg ICBYRkFUQUwoIlNvcnJ5LCBjb21tYW5kLWxpbmUgb3B0aW9ucyBkaXNhYmxlZC4iKTsKKyAgICB9 Cit9CisjZW5kaWYgLyogTk9DTURMICovCgpkaWZmIC0tZ2l0IGEvY2tlcm1pdC05LjAuMzAyLWJ1 aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3V2ZXIuaCBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2Vy bWl0LTkuMC4zMDIvY2t1dmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u N2ExMTFmYgotLS0gL2Rldi9udWxsCisrKyBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0 LTkuMC4zMDIvY2t1dmVyLmgKQEAgLTAsMCArMSwxMjYyIEBACisvKiBja3V2ZXIuaCAtLSBDLUtl cm1pdCBVTklYIFZlcnNpb24gaGVyYWxkcyAqLworLyoKKyAgQXV0aG9yOiBGcmFuayBkYSBDcnV6 IDxmZGNAY29sdW1iaWEuZWR1PiwKKyAgQ29sdW1iaWEgVW5pdmVyc2l0eSBBY2FkZW1pYyBJbmZv cm1hdGlvbiBTeXN0ZW1zLCBOZXcgWW9yayBDaXR5LgorCisgIENvcHlyaWdodCAoQykgMTk4NSwg MjAxMCwKKyAgICBUcnVzdGVlcyBvZiBDb2x1bWJpYSBVbml2ZXJzaXR5IGluIHRoZSBDaXR5IG9m IE5ldyBZb3JrLgorICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBTZWUgdGhlIEMtS2VybWl0IENP UFlJTkcuVFhUIGZpbGUgb3IgdGhlCisgICAgY29weXJpZ2h0IHRleHQgaW4gdGhlIGNrY21haS5j IG1vZHVsZSBmb3IgZGlzY2xhaW1lciBhbmQgcGVybWlzc2lvbnMuCisqLworCisjaWZuZGVmIENL VVZFUl9ICisjZGVmaW5lIENLVVZFUl9ICisKKy8qIEFycmFuZ2VkIG1vcmUgb3IgbGVzcyBhbHBo YWJldGljYWxseSBieSBjb21waWxlciBzeW1ib2wgKi8KKy8qIE11c3QgYmUgaW5jbHVkZWQgQUZU RVIgY2tjZGViLmguICovCisKKyNpZmRlZiBCRU9TCisjaWZkZWYgQkVPUzQ1CisjZGVmaW5lIEhF UkFMRCAiIEJlT1MgNC41IgorI2Vsc2UKKyNkZWZpbmUgSEVSQUxEICIgQmVPUyIKKyNlbmRpZiAv KiBCRU9TNDUgKi8KKyNlbHNlCisjaWZkZWYgQkVCT1gKKyNpZmRlZiBCRV9EUl83CisjZGVmaW5l IEhFUkFMRCAiIEJlQm94IERSNyIKKyNlbHNlCisjZGVmaW5lIEhFUkFMRCAiIEJlQm94IgorI2Vu ZGlmIC8qIEJFX0RSXzcgKi8KKyNlbmRpZiAvKiBCRUJPWCAqLworI2VuZGlmIC8qIEJFT1MgKi8K KworI2lmZGVmIEJFTExWMTAKKyNkZWZpbmUgSEVSQUxEICIgQmVsbCBMYWJzIFJlc2VhcmNoIFVO SVggVjEwIgorI2VuZGlmIC8qIEJFTExWMTAgKi8KKworI2lmZGVmIEFQT0xMT1NSMTAKKyNkZWZp bmUgSEVSQUxEICIgQXBvbGxvIFNSMTAiCisjZW5kaWYgLyogQVBPTExPU1IxMCAqLworCisjaWZk ZWYgTUFDCisjZGVmaW5lIEhFUkFMRCAiIEFwcGxlIE1hY2ludG9zaCIKKyNlbmRpZiAvKiBNQUMg Ki8KKworI2lmZGVmIEE5ODYKKyNkZWZpbmUgSEVSQUxEICIgQWx0b3MgOTg2IC8gWGVuaXggMy4w IgorI2VuZGlmIC8qIEE5ODYgKi8KKworI2lmZGVmIEFTNDAwCisjZGVmaW5lIEhFUkFMRCAiIEFT LzQwMCIKKyNlbmRpZiAvKiBBUzQwMCAqLworCisjaWZkZWYgYWVnaXMKKyNpZmRlZiBCU0Q0Cisj ZGVmaW5lIEhFUkFMRCAiIEFwb2xsbyBET01BSU4vSVggNC4yIEJTRCIKKyNlbHNlCisjaWZkZWYg QVRUU1YKKyNkZWZpbmUgSEVSQUxEICIgQXBvbGxvIERPTUFJTi9JWCBTeXN0ZW0gViIKKyNlbHNl CisjZGVmaW5lIEhFUkFMRCAiIEFwb2xsbyBBZWdpcyIKKyNlbmRpZiAvKiBCU0Q0ICAqLworI2Vu ZGlmIC8qIEFUVFNWICovCisjZW5kaWYgLyogYWVnaXMgKi8KKworI2lmbmRlZiBIRVJBTEQKKwor I2lmZGVmIEFJWFJTCisKKyNpZmRlZiBBSVg1MworI2RlZmluZSBIRVJBTEQgIiBJQk0gQUlYIDUu MyIKKyNlbHNlCisjaWZkZWYgQUlYNTIKKyNkZWZpbmUgSEVSQUxEICIgSUJNIEFJWCA1LjIiCisj ZWxzZQorI2lmZGVmIEFJWDUxCisjZGVmaW5lIEhFUkFMRCAiIElCTSBBSVggNS4xIgorI2Vsc2UK KyNpZmRlZiBBSVg0NQorI2RlZmluZSBIRVJBTEQgIiBJQk0gQUlYIDUuMCIKKyNlbHNlCisjaWZk ZWYgQUlYNDUKKyNkZWZpbmUgSEVSQUxEICIgSUJNIEFJWCA0LjUiCisjZWxzZQorI2lmZGVmIEFJ WDQ0CisjZGVmaW5lIEhFUkFMRCAiIElCTSBBSVggNC40IgorI2Vsc2UKKyNpZmRlZiBBSVg0Mwor I2RlZmluZSBIRVJBTEQgIiBJQk0gQUlYIDQuMyIKKyNlbHNlCisjaWZkZWYgQUlYNDIKKyNkZWZp bmUgSEVSQUxEICIgSUJNIEFJWCA0LjIiCisjZWxzZQorI2lmZGVmIFNWUjQKKyNpZmRlZiBBSVg0 MQorI2RlZmluZSBIRVJBTEQgIiBJQk0gQUlYIDQuMSIKKyNlbHNlCisjZGVmaW5lIEhFUkFMRCAi IElCTSBSUy82MDAwIEFJWCAzLjIiCisjZW5kaWYgLyogQUlYNDEgKi8KKyNlbHNlCisjZGVmaW5l IEhFUkFMRCAiIElCTSBSUy82MDAwIEFJWCAzLjAvMy4xIgorI2VuZGlmIC8qIFNWUjQgKi8KKyNl bmRpZiAvKiBBSVg0MiAqLworI2VuZGlmIC8qIEFJWDQzICovCisjZW5kaWYgLyogQUlYNDQgKi8K KyNlbmRpZiAvKiBBSVg0NSAqLworI2VuZGlmIC8qIEFJWDUwICovCisjZW5kaWYgLyogQUlYNTEg Ki8KKyNlbmRpZiAvKiBBSVg1MiAqLworI2VuZGlmIC8qIEFJWDUzICovCisjZW5kaWYgLyogQUlY UlMgKi8KKworI2lmZGVmIFBTMkFJWDEwCisjZGVmaW5lIEhFUkFMRCAiIElCTSBQUy8yIEFJWCAx LngiCisjZW5kaWYgLyogUFMyQUlYMTAgKi8KKworI2lmZGVmIEFJWFBTMgorI2RlZmluZSBIRVJB TEQgIiBJQk0gUFMvMiBBSVggMy54IgorI2VuZGlmIC8qIEFJWFBTMiAqLworCisjaWZkZWYgQUlY MzcwCisjaWZuZGVmIEhFUkFMRAorI2RlZmluZSBIRVJBTEQgIiBJQk0gU3lzdGVtLzM3MCBBSVgv MzcwIgorI2VuZGlmCisjZW5kaWYgLyogQUlYMzcwICovCisKKyNpZmRlZiBBSVhFU0EKKyNpZm5k ZWYgSEVSQUxECisjZGVmaW5lIEhFUkFMRCAiIElCTSBBSVgvRVNBIHZlcnNpb24gMi4xIgorI2Vu ZGlmCisjZW5kaWYgLyogQUlYRVNBICovCisKKyNpZmRlZiBBVFQ2MzAwCisjZGVmaW5lIEhFUkFM RCAiIEFUJlQgNjMwMCIKKyNlbmRpZiAvKiBBVFQ2MzAwICovCisKKyNpZmRlZiBBVFQ3MzAwCisj aWZkZWYgVU5JWDM1MU0KKyNkZWZpbmUgSEVSQUxEICIgQVQmVCA3MzAwIFVOSVggUEMgVU5JWCAz LjUxbSIKKyNlbHNlCisjZGVmaW5lIEhFUkFMRCAiIEFUJlQgNzMwMCBVTklYIFBDIgorI2VuZGlm IC8qIFVOSVgzNTFNICovCisjZW5kaWYgLyogQVRUNzMwMCAqLworCisjaWZkZWYgQVVYCisjZGVm aW5lIEhFUkFMRCAiIEFwcGxlIE1hY2ludG9zaCBBVVgiCisjZW5kaWYgLyogQVVYICovCisKKyNp ZmRlZiBCU0Q0NAorI2lmZGVmIE1BQ09TWAorI2RlZmluZSBIRVJBTEQgIiBNYWMgT1MgWCIKKyNl bHNlCisjaWZkZWYgX19PcGVuQlNEX18KKyNkZWZpbmUgSEVSQUxEICIgT3BlbkJTRCIKKyNlbHNl CisjaWZkZWYgX19ic2RpX18KKyNpZmRlZiBCU0RJNAorI2RlZmluZSBIRVJBTEQgIiBCU0RJIEJT RC9PUyA0LjAiCisjZWxzZQorI2lmZGVmIEJTREkzCisjZGVmaW5lIEhFUkFMRCAiIEJTREkgQlNE L09TIDMuMCIKKyNlbHNlCisjaWZkZWYgQlNESTIKKyNkZWZpbmUgSEVSQUxEICIgQlNESSBCU0Qv T1MgMi4wIgkvKiAxLjErKyBuYW1lLi4uICovCisjZWxzZQorI2RlZmluZSBIRVJBTEQgIiBCU0RJ IEJTRC8zODYiCQkvKiBPcmlnaW5hbCAxLjAgbmFtZSAqLworI2VuZGlmIC8qIEJTREkyICovCisj ZW5kaWYgLyogQlNESTMgKi8KKyNlbmRpZiAvKiBCU0RJNCAqLworI2Vsc2UgIC8qIF9fYnNkaV9f ICovCisjaWZkZWYgX19OZXRCU0RfXworI2lmbmRlZiBIRVJBTEQKKyNpZmRlZiBORVRCU0QxNgor I2RlZmluZSBIRVJBTEQgIiBOZXRCU0QgMS42IgorI2Vsc2UKKyNpZmRlZiBORVRCU0QxNQorI2Rl ZmluZSBIRVJBTEQgIiBOZXRCU0QgMS41IgorI2Vsc2UKKyNkZWZpbmUgSEVSQUxEICIgTmV0QlNE IgorI2VuZGlmIC8qIE5FVEJTRDE1ICovCisjZW5kaWYgLyogTkVUQlNEMTYgKi8KKyNlbmRpZiAv KiBIRVJBTEQgKi8KKyNlbHNlICAvKiBfX05ldEJTRF9fICovCisjaWZkZWYgX19GcmVlQlNEX18K KyNpZmRlZiBGUkVFQlNENTEKKyNkZWZpbmUgSEVSQUxEICIgRnJlZUJTRCA1LjEiCisjZWxzZQor I2lmZGVmIEZSRUVCU0Q1MAorI2RlZmluZSBIRVJBTEQgIiBGcmVlQlNEIDUuMCIKKyNlbHNlCisj aWZkZWYgRlJFRUJTRDQ5CisjZGVmaW5lIEhFUkFMRCAiIEZyZWVCU0QgNC45IgorI2Vsc2UKKyNp ZmRlZiBGUkVFQlNENDgKKyNkZWZpbmUgSEVSQUxEICIgRnJlZUJTRCA0LjgiCisjZWxzZQorI2lm ZGVmIEZSRUVCU0Q0NworI2RlZmluZSBIRVJBTEQgIiBGcmVlQlNEIDQuNyIKKyNlbHNlCisjaWZk ZWYgRlJFRUJTRDQ2CisjZGVmaW5lIEhFUkFMRCAiIEZyZWVCU0QgNC42IgorI2Vsc2UKKyNpZmRl ZiBGUkVFQlNENDUKKyNkZWZpbmUgSEVSQUxEICIgRnJlZUJTRCA0LjUiCisjZWxzZQorI2lmZGVm IEZSRUVCU0Q0NAorI2RlZmluZSBIRVJBTEQgIiBGcmVlQlNEIDQuNCIKKyNlbHNlCisjaWZkZWYg RlJFRUJTRDQzCisjZGVmaW5lIEhFUkFMRCAiIEZyZWVCU0QgNC4zIgorI2Vsc2UKKyNpZmRlZiBG UkVFQlNENDIKKyNkZWZpbmUgSEVSQUxEICIgRnJlZUJTRCA0LjIiCisjZWxzZQorI2lmZGVmIEZS RUVCU0Q0MQorI2RlZmluZSBIRVJBTEQgIiBGcmVlQlNEIDQuMSIKKyNlbHNlCisjaWZkZWYgRlJF RUJTRDQKKyNkZWZpbmUgSEVSQUxEICIgRnJlZUJTRCA0LjAiCisjZWxzZQorI2lmZGVmIEZSRUVC U0QzCisjZGVmaW5lIEhFUkFMRCAiIEZyZWVCU0QgMy4wIgorI2Vsc2UKKyNpZmRlZiBGUkVFQlNE MgorI2RlZmluZSBIRVJBTEQgIiBGcmVlQlNEIDIuMCIKKyNlbHNlCisjZGVmaW5lIEhFUkFMRCAi IEZyZWVCU0QiCisjZW5kaWYgLyogRlJFRUJTRDIgKi8KKyNlbmRpZiAvKiBGUkVFQlNEMyAqLwor I2VuZGlmIC8qIEZSRUVCU0Q0ICovCisjZW5kaWYgLyogRlJFRUJTRDQxICovCisjZW5kaWYgLyog RlJFRUJTRDQyICovCisjZW5kaWYgLyogRlJFRUJTRDQzICovCisjZW5kaWYgLyogRlJFRUJTRDQ0 ICovCisjZW5kaWYgLyogRlJFRUJTRDQ1ICovCisjZW5kaWYgLyogRlJFRUJTRDQ2ICovCisjZW5k aWYgLyogRlJFRUJTRDQ3ICovCisjZW5kaWYgLyogRlJFRUJTRDQ4ICovCisjZW5kaWYgLyogRlJF RUJTRDQ5ICovCisjZW5kaWYgLyogRlJFRUJTRDUwICovCisjZW5kaWYgLyogRlJFRUJTRDUxICov CisjZWxzZQorI2lmZGVmIF9fMzg2QlNEX18KKyNkZWZpbmUgSEVSQUxEICIgMzg2QlNEIgorI2Vs c2UKKyNkZWZpbmUgSEVSQUxEICIgNC40QlNEIgorI2VuZGlmIC8qIF9fMzg2QlNEX18gKi8KKyNl bmRpZiAvKiBfX0ZyZWVCU0RfXyAqLworI2VuZGlmIC8qIF9fTmV0QlNEX18gKi8KKyNlbmRpZiAv KiBfX2JzZGlfXyAqLworI2VuZGlmIC8qIF9fT3BlbkJTRF9fICovCisjZW5kaWYgLyogTUFDT1NY ICovCisjZW5kaWYgLyogQlNENDQgKi8KKworI2lmZGVmIEVOQ09SRQorI2lmZGVmIEJTRDQzCisj ZGVmaW5lIEhFUkFMRCAiIEVuY29yZSBNdWx0aW1heCBVTUFYIDQuMyIKKyNlbHNlCisjZGVmaW5l IEhFUkFMRCAiIEVuY29yZSBNdWx0aW1heCBVTUFYIDQuMiIKKyNlbmRpZgorI2VuZGlmIC8qIEVO Q09SRSAqLworCisjaWZkZWYgQlNEMjkKKyNkZWZpbmUgSEVSQUxEICIgMi45IEJTRCIKKyNlbmRp ZiAvKiBCU0QyOSAqLworCisjaWZkZWYgQlNENDEKKyNkZWZpbmUgSEVSQUxEICIgNC4xIEJTRCIK KyNlbmRpZiAvKiBCU0Q0MSAqLworCisjaWZkZWYgQzcwCisjZGVmaW5lIEhFUkFMRCAiIEJCTiBD LzcwIgorI2VuZGlmIC8qIGM3MCAqLworCisjaWZkZWYgQ0lFCisjZGVmaW5lIEhFUkFMRCAiIENJ RSBTeXN0ZW1zIDY4MC8yMCBSZWd1bHVzIgorI2VuZGlmIC8qIENJRSAqLworCisjaWZkZWYgQ09I RVJFTlQKKyNpZmRlZiBfSTM4NgorI2RlZmluZSBIRVJBTEQgIiBNV0MgQ29oZXJlbnQgMzg2IDQu eCIKKyNpZm5kZWYgaTM4NgorI2RlZmluZSBpMzg2CisjZW5kaWYgLyogaTM4NiAqLworI2Vsc2UK KyNkZWZpbmUgSEVSQUxEICIgUEMvQVQgTVdDIENvaGVyZW50IDI4NiAzLngiCisjaWZuZGVmIGky ODYKKyNkZWZpbmUgaTI4NgorI2VuZGlmIC8qIGkyODYgKi8KKyNlbmRpZiAvKiBfSTM4NiAqLwor I2VuZGlmIC8qIENPSEVSRU5UICovCisKKyNpZmRlZiBDT05WRVg5CisjZGVmaW5lIEhFUkFMRCAi IENvbnZleC9PUyIKKyNlbmRpZiAvKiBDT05WRVg5ICovCisKKyNpZmRlZiBDT05WRVgxMAorI2Rl ZmluZSBIRVJBTEQgIiBDb252ZXgvT1MgMTAuMSIKKyNlbmRpZiAvKiBDT05WRVgxMCAqLworCisj aWZkZWYgX0NSQVkKKyNpZmRlZiBfQ1JBWUNPTQorI2RlZmluZSBIRVJBTEQgIiBDcmF5IENTT1Mi CisjZWxzZSAvKiBfQ1JBWUNPTSAqLworI2RlZmluZSBIRVJBTEQgIiBDcmF5IFVOSUNPUyIKKyNl bmRpZiAvKiBfQ1JBWUNPTSAqLworI2VuZGlmIC8qIF9DUkFZICovCisKKyNpZmRlZiBER1VYCisj aWZkZWYgREdVWDU0NDIwCisjZGVmaW5lIEhFUkFMRCAiIERhdGEgR2VuZXJhbCBERy9VWCBSNC4y MCIKKyNlbHNlCisjaWZkZWYgREdVWDU0NDExCisjZGVmaW5lIEhFUkFMRCAiIERhdGEgR2VuZXJh bCBERy9VWCBSNC4xMSIKKyNlbHNlCisjaWZkZWYgREdVWDU0NDEwCisjZGVmaW5lIEhFUkFMRCAi IERhdGEgR2VuZXJhbCBERy9VWCBSNC4xMCIKKyNlbHNlCisjaWZkZWYgREdVWDU0MzEwCisjZGVm aW5lIEhFUkFMRCAiIERhdGEgR2VuZXJhbCBERy9VWCA1LjRSMy4xMCIKKyNlbHNlCisjaWZkZWYg REdVWDU0MworI2RlZmluZSBIRVJBTEQgIiBEYXRhIEdlbmVyYWwgREcvVVggNS40UjMuMDAiCisj ZWxzZQorI2lmZGVmIERHVVg1NDAKKyNkZWZpbmUgSEVSQUxEICIgRGF0YSBHZW5lcmFsIERHL1VY IDUuNCIKKyNlbHNlCisjaWZkZWYgREdVWDQzMAorI2RlZmluZSBIRVJBTEQgIiBEYXRhIEdlbmVy YWwgREcvVVggNC4zMCIKKyNlbHNlCisjZGVmaW5lIEhFUkFMRCAiIERhdGEgR2VuZXJhbCBERy9V WCIKKyNlbmRpZiAvKiBER1VYNDMwICovCisjZW5kaWYgLyogREdVWDU0MCAqLworI2VuZGlmIC8q IERHVVg1NDMgKi8KKyNlbmRpZiAvKiBER1VYNTQzMTAgKi8KKyNlbmRpZiAvKiBER1VYNTQ0MTAg Ki8KKyNlbmRpZiAvKiBER1VYNTQ0MTEgKi8KKyNlbmRpZiAvKiBER1VYNTQ0MjAgKi8KKyNlbmRp ZiAvKiBER1VYICovCisKKyNpZmRlZiBkYXRhZ2VuZXJhbAorI2lmbmRlZiBIRVJBTEQKKyNkZWZp bmUgSEVSQUxEICIgRGF0YSBHZW5lcmFsIEFPUy9WUyIKKyNlbmRpZiAvKiBIRVJBTEQgKi8KKyNl bmRpZiAvKiBkYXRhZ2VuZXJhbCAqLworCisjaWZkZWYgU0lOSVgKKyNpZmRlZiBTTkk1NDQKKyNk ZWZpbmUgSEVSQUxEICIgU2llbWVucyBOaXhkb3JmIFJlbGlhbnQgVU5JWCBWNS40NCIKKyNlbHNl CisjaWZkZWYgU05JNTQzCisjZGVmaW5lIEhFUkFMRCAiIFNpZW1lbnMgTml4ZG9yZiBSZWxpYW50 IFVOSVggVjUuNDMiCisjZWxzZQorI2lmZGVmIFNOSTU0MQorI2RlZmluZSBIRVJBTEQgIiBTaWVt ZW5zIE5peGRvcmYgU0lOSVggVjUuNDEiCisjZWxzZQorI2RlZmluZSBIRVJBTEQgIiBTaWVtZW5z IE5peGRvcmYgU0lOSVggVjUuNDIiCisjZW5kaWYgLyogU05JNTQxICovCisjZW5kaWYgLyogU05J NTQzICovCisjZW5kaWYgLyogU05JNTQ0ICovCisjZW5kaWYgLyogU0lOSVggKi8KKworI2lmZGVm IFBPV0VSTUFYCisjZGVmaW5lIEhFUkFMRCAiIENvbmN1cnJlbnQgUG93ZXJNQVggT1MiCisjZW5k aWYgLyogUE9XRVJNQVggKi8KKworI2lmZGVmIERFTExfU1ZSNAorI2RlZmluZSBIRVJBTEQgIiBE ZWxsIFN5c3RlbSBWIFI0IgorI2VuZGlmIC8qIERFTExfU1ZSNCAqLworCisjaWZkZWYgTkNSTVBS QVMKKyNkZWZpbmUgSEVSQUxEICIgTkNSIE1QLVJBUyIKKyNlbmRpZiAvKiBOQ1JNUFJBUyAqLwor CisjaWZkZWYgVU5JWFdBUkUKKyNkZWZpbmUgSEVSQUxEICIgVW5peFdhcmUiCisjZWxzZQorI2lm ZGVmIE9MRF9VTklYV0FSRQorI2RlZmluZSBIRVJBTEQgIiBVbml4V2FyZSIKKyNlbmRpZiAvKiBP TERfVU5JWFdBUkUgKi8KKyNlbmRpZiAvKiBVTklYV0FSRSAqLworCisjaWZkZWYgSUNMX1NWUjQK KyNkZWZpbmUgSEVSQUxEICIgSUNMIFN5c3RlbSBWIFI0IERSUyBOL1giCisjZW5kaWYgLyogSUNM X1NWUjQgKi8KKworI2lmZGVmIEZUMTgKKyNpZmRlZiBGVDIxCisjZGVmaW5lIEhFUkFMRCAiIEZv cnR1bmUgRm9yOlBybyAyLjEiCisjZWxzZQorI2RlZmluZSBIRVJBTEQgIiBGb3J0dW5lIEZvcjpQ cm8gMS44IgorI2VuZGlmIC8qIEZUMjEgKi8KKyNlbmRpZiAvKiBGVDE4ICovCisKKyNpZmRlZiBH RU1ET1MKKyNkZWZpbmUgSEVSQUxEICIgQXRhcmkgU1QgR0VNIDEuMCIKKyNlbmRpZiAvKiBHRU1E T1MgKi8KKworI2lmZGVmIFhGNjhSM1Y2CisjZGVmaW5lIEhFUkFMRCAiIE1vdG9yb2xhIFVOSVgg U3lzdGVtIFYvNjggUjNWNiIKKyNlbmRpZiAvKiBYRjY4UjNWNiAqLworCisjaWZkZWYgWEY4OFIz MgorI2RlZmluZSBIRVJBTEQgIiBNb3Rvcm9sYSBVTklYIFN5c3RlbSBWLzg4IFIzMiIKKyNlbmRp ZiAvKiBYRjg4UjMyICovCisKKyNpZmRlZiBJMzg2SVgKKyNpZmRlZiBTVlIzSkMKKyNkZWZpbmUg SEVSQUxEICIgSW50ZXJhY3RpdmUgVU5JWCBTeXN0ZW0gVi8zODYgUjMuMiIKKyNlbHNlCisjZGVm aW5lIEhFUkFMRCAiIEludGVyYWN0aXZlIFN5c3RlbXMgQ29ycCAzODYvaXgiCisjZW5kaWYgLyog U1ZSM0pDICovCisjZW5kaWYgLyogSTM4NklYICovCisKKyNpZmRlZiBJUklYNjUKKyNkZWZpbmUg SEVSQUxEICIgU2lsaWNvbiBHcmFwaGljcyBJUklYIDYuNSIKKyNlbHNlCisjaWZkZWYgSVJJWDY0 CisjZGVmaW5lIEhFUkFMRCAiIFNpbGljb24gR3JhcGhpY3MgSVJJWCA2LjQiCisjZWxzZQorI2lm ZGVmIElSSVg2MworI2RlZmluZSBIRVJBTEQgIiBTaWxpY29uIEdyYXBoaWNzIElSSVggNi4zIgor I2Vsc2UKKyNpZmRlZiBJUklYNjIKKyNkZWZpbmUgSEVSQUxEICIgU2lsaWNvbiBHcmFwaGljcyBJ UklYIDYuMiIKKyNlbHNlCisjaWZkZWYgSVJJWDYwCisjZGVmaW5lIEhFUkFMRCAiIFNpbGljb24g R3JhcGhpY3MgSVJJWCA2LjAiCisjZWxzZQorI2lmZGVmIElSSVg1MworI2RlZmluZSBIRVJBTEQg IiBTaWxpY29uIEdyYXBoaWNzIElSSVggNS4zIgorI2Vsc2UKKyNpZmRlZiBJUklYNTIKKyNkZWZp bmUgSEVSQUxEICIgU2lsaWNvbiBHcmFwaGljcyBJUklYIDUuMiIKKyNlbHNlCisjaWZkZWYgSVJJ WDUxCisjZGVmaW5lIEhFUkFMRCAiIFNpbGljb24gR3JhcGhpY3MgSVJJWCA1LjEiCisjZWxzZQor I2lmZGVmIElSSVg0MAorI2RlZmluZSBIRVJBTEQgIiBTaWxpY29uIEdyYXBoaWNzIElSSVggNC4w IgorI2VuZGlmIC8qIElSSVg0MCAqLworI2VuZGlmIC8qIElSSVg1MSAqLworI2VuZGlmIC8qIElS SVg1MiAqLworI2VuZGlmIC8qIElSSVg1MyAqLworI2VuZGlmIC8qIElSSVg2MCAqLworI2VuZGlm IC8qIElSSVg2MiAqLworI2VuZGlmIC8qIElSSVg2MyAqLworI2VuZGlmIC8qIElSSVg2NCAqLwor I2VuZGlmIC8qIElSSVg2NSAqLworCisjaWZkZWYgSVNJSUkKKyNkZWZpbmUgSEVSQUxEICIgSW50 ZXJhY3RpdmUgU3lzdGVtcyBDb3JwIFN5c3RlbSBJSUkiCisjZW5kaWYgLyogSVNJSUkgKi8KKwor I2lmZGVmIElYMzcwCisjZGVmaW5lIEhFUkFMRCAiIElCTSBJWC8zNzAiCisjZW5kaWYgLyogSVgz NzAgKi8KKworI2lmZGVmIEhQVVgKKyNpZmRlZiBIUFVYNQorI2RlZmluZSBIRVJBTEQgIiBIUC1V WCA1LjAwIgorI2Vsc2UKKyNpZmRlZiBIUFVYNgorI2RlZmluZSBIRVJBTEQgIiBIUC1VWCA2LjAw IgorI2Vsc2UKKyNpZmRlZiBIUFVYNworI2RlZmluZSBIRVJBTEQgIiBIUC1VWCA3LjAwIgorI2Vs c2UKKyNpZmRlZiBIUFVYOAorI2RlZmluZSBIRVJBTEQgIiBIUC1VWCA4LjAwIgorI2Vsc2UKKyNp ZmRlZiBIUFVYOQorI2RlZmluZSBIRVJBTEQgIiBIUC1VWCA5LjAwIgorI2Vsc2UKKyNpZmRlZiBI UFVYMTEwMAorI2RlZmluZSBIRVJBTEQgIiBIUC1VWCAxMS4wMCIKKyNlbHNlCisjaWZkZWYgSFBV WDEwCisjaWZkZWYgSFBVWDEwMzAKKyNkZWZpbmUgSEVSQUxEICIgSFAtVVggMTAuMzAiCisjZWxz ZQorI2lmZGVmIEhQVVgxMDIwCisjZGVmaW5lIEhFUkFMRCAiIEhQLVVYIDEwLjIwIgorI2Vsc2UK KyNpZmRlZiBIUFVYMTAxMAorI2RlZmluZSBIRVJBTEQgIiBIUC1VWCAxMC4xMCIKKyNlbHNlCisj aWZkZWYgSFBVWDEweHgKKyNkZWZpbmUgSEVSQUxEICIgSFAtVVggMTAueHgiCisjZWxzZQorI2Rl ZmluZSBIRVJBTEQgIiBIUC1VWCAxMC4wMCIKKyNlbmRpZiAvKiBIUFVYMTBYWCAqLworI2VuZGlm IC8qIEhQVVgxMDEwICovCisjZW5kaWYgLyogSFBVWDEwMjAgKi8KKyNlbmRpZiAvKiBIUFVYMTAz MCAqLworI2Vsc2UKKyNkZWZpbmUgSEVSQUxEICIgSFAtVVgiCisjZW5kaWYgLyogSFBVWDEwICov CisjZW5kaWYgLyogSFBVWDExMDAgKi8KKyNlbmRpZiAvKiBIUFVYOSAgKi8KKyNlbmRpZiAvKiBI UFVYOCAgKi8KKyNlbmRpZiAvKiBIUFVYNyAgKi8KKyNlbmRpZiAvKiBIUFVYNiAgKi8KKyNlbmRp ZiAvKiBIUFVYNSAgKi8KKyNlbmRpZiAvKiBIUFVYICAgKi8KKworI2lmbmRlZiBNSU5JWAorI2lm ZGVmIE1JTklYMzE1CisjZGVmaW5lIE1JTklYCisjZW5kaWYJLyogTUlOSVgzMTUgKi8KKyNlbmRp ZgkvKiBNSU5JWCAqLworCisjaWZuZGVmIE1JTklYCisjaWZkZWYgTUlOSVgzCisjZGVmaW5lIE1J TklYCisjZW5kaWYJLyogTUlOSVgzICovCisjZW5kaWYJLyogTUlOSVggKi8KKworI2lmZGVmIE1J TklYCisjaWZkZWYgTUlOSVgzMTUKKyNkZWZpbmUgSEVSQUxEICIgTWluaXggMy4xLjUiCisjaWZu ZGVmIE1JTklYMworI2RlZmluZSBNSU5JWDMKKyNlbmRpZgkvKiBNSU5JWDMgKi8KKyNlbmRpZgkv KiBNSU5JWDMxNSAqLworI2lmZGVmIE1JTklYMworI2lmbmRlZiBNSU5JWDIKKyNkZWZpbmUgTUlO SVgyCisjZW5kaWYJLyogTUlOSVgyICovCisjaWZuZGVmIEhFUkFMRAorI2RlZmluZSBIRVJBTEQg IiBNaW5peCAzLjAiCisjZW5kaWYJLyogSEVSQUxEICovCisjZWxzZQorI2lmZGVmIE1JTklYMgor I2RlZmluZSBIRVJBTEQgIiBNaW5peCAyLjAiCisjZWxzZQorI2RlZmluZSBIRVJBTEQgIiBNaW5p eCAxLjAiCisjZW5kaWYgLyogTUlOSVgzICovCisjZW5kaWYgLyogTUlOSVgyICovCisjZW5kaWYg LyogTUlOSVggKi8KKworI2lmZGVmIE1JUFMKKyNkZWZpbmUgSEVSQUxEICIgTUlQUyBSSVNDL09T IFNWUjMiCisjZW5kaWYgLyogTUlQUyAqLworCisjaWZkZWYgTkVYVAorI2lmZGVmIE9QRU5TVEVQ NDIKKyNkZWZpbmUgSEVSQUxEICIgT1BFTlNURVAgNC4yIgorI2Vsc2UKKyNpZmRlZiBORVhUMzMK KyNkZWZpbmUgSEVSQUxEICIgTmVYVFNURVAgMy4zIgorI2Vsc2UKKyNkZWZpbmUgSEVSQUxEICIg TmVYVFNURVAiCisjZW5kaWYgLyogTkVYVDMzICovCisjZW5kaWYgLyogT1BFTlNURVA0MiAqLwor I2VuZGlmIC8qIE5FWFQgKi8KKworI2lmZGVmIE9TRgorI2lmZGVmIGkzODYKKyNkZWZpbmUgSEVS QUxEICIgREVDcGMgT1NGLzEiCisjaWZkZWYgX19HTlVDCisjZGVmaW5lIE9TRlBDCisjZW5kaWYg LyogX19HTlVDICovCisjZWxzZSAgLyogTm90IGkzODYgc28gQWxwaGEgKi8KKworI2lmZGVmIFRS VTY0CisKKyNpZmRlZiBPU0Y1MUIKKyNkZWZpbmUgSEVSQUxEICIgQ29tcGFxIFRydTY0IFVOSVgg NS4xQiIKKyNlbHNlCisjaWZkZWYgT1NGNTFBCisjZGVmaW5lIEhFUkFMRCAiIENvbXBhcSBUcnU2 NCBVTklYIDUuMUEiCisjZWxzZQorI2lmZGVmIE9TRjUwCisjZGVmaW5lIEhFUkFMRCAiIENvbXBh cSBUcnU2NCBVTklYIDUuMEEiCisjZWxzZQorI2lmZGVmIE9TRjQwRworI2RlZmluZSBIRVJBTEQg IiBDb21wYXEgVHJ1NjQgVU5JWCA0LjBHIgorI2Vsc2UKKyNpZmRlZiBPU0Y0MEYKKyNkZWZpbmUg SEVSQUxEICIgQ29tcGFxIFRydTY0IFVOSVggNC4wRiIKKyNlbHNlCisjaWZkZWYgT1NGNDBFCisj ZGVmaW5lIEhFUkFMRCAiIENvbXBhcSBUcnU2NCBVTklYIDQuMEUiCisjZW5kaWYgLyogT1NGNDBF ICovCisjZW5kaWYgLyogT1NGNDBGICovCisjZW5kaWYgLyogT1NGNDBHICovCisjZW5kaWYgLyog T1NGNTAgKi8KKyNlbmRpZiAvKiBPU0Y1MUEgKi8KKyNlbmRpZiAvKiBPU0Y1MUIgKi8KKworI2Vs c2UgIC8qIE5vdCBUUlU2NCAqLworCisjaWZkZWYgT1NGNDAKKyNkZWZpbmUgSEVSQUxEICIgRGln aXRhbCBVTklYIDQuMCIKKyNlbHNlCisjaWZkZWYgT1NGMzIKKyNkZWZpbmUgSEVSQUxEICIgRGln aXRhbCBVTklYIDMuMiIKKyNlbHNlCisjZGVmaW5lIEhFUkFMRCAiIERFQyBPU0YvMSBBbHBoYSIK KyNlbmRpZiAvKiBPU0Y0MCAqLworI2VuZGlmIC8qIE9TRjMyICovCisKKyNlbmRpZiAvKiBUUlU2 NCAqLworI2VuZGlmIC8qIGkzODYgKi8KKyNlbmRpZiAvKiBPU0YgKi8KKworI2lmZGVmIFBDSVgK KyNkZWZpbmUgSEVSQUxEICIgUEMvSVgiCisjZW5kaWYgLyogUENJWCAqLworCisjaWZkZWYgc3hh RTUwCisjZGVmaW5lIEhFUkFMRCAiIFBGVSBTWC9BIFYxMC9MNTAiCisjZW5kaWYgLyogc3hhRTUw ICovCisKKyNpZmRlZiBQUk9WWDEKKyNkZWZpbmUgSEVSQUxEICIgREVDIFByb2Zlc3Npb25hbCAz MDAgKFZlbml4IDEuMCkiCisjZW5kaWYgLyogUFJPVlgxICovCisKKyNpZmRlZiBQWVJBTUlECisj aWZkZWYgU1ZSNAorI2RlZmluZSBIRVJBTEQgIiBQeXJhbWlkIERDL09TeCIKKyNlbHNlCisjZGVm aW5lIEhFUkFMRCAiIFB5cmFtaWQgRHVhbCBQb3J0IE9TeCIKKyNlbmRpZiAvKiBTVlI0ICovCisj ZW5kaWYgLyogUFlSQU1JRCAqLworCisjaWZkZWYgUlRBSVgKKyNkZWZpbmUgSEVSQUxEICIgSUJN IFJUIFBDIChBSVggMi4yKSIKKyNlbmRpZiAvKiBSVEFJWCAqLworCisjaWZkZWYgUlRVCisjZGVm aW5lIEhFUkFMRCAiIE1hc3Njb21wL0NvbmN1cnJlbnQgUlRVIgorI2VuZGlmIC8qIFJUVSAqLwor CisjaWZkZWYgc29ueV9uZXdzCisjZGVmaW5lIEhFUkFMRCAiIFNPTlkgTkVXUyIKKyNlbmRpZiAv KiBzb255X25ld3MgKi8KKworI2lmZGVmIFNPTEFSSVMyNAorI2RlZmluZSBIRVJBTEQgIiBTb2xh cmlzIDIuNCIKKyNlbHNlCisjaWZkZWYgU09MQVJJUzIzCisjZGVmaW5lIEhFUkFMRCAiIFNvbGFy aXMgMi4zIgorI2Vsc2UKKyNpZmRlZiBTT0xBUklTCisjZGVmaW5lIEhFUkFMRCAiIFNvbGFyaXMg Mi54IgorI2VuZGlmIC8qIFNPTEFSSVMgKi8KKyNlbmRpZiAvKiBTT0xBUklTMjMgKi8KKyNlbmRp ZiAvKiBTT0xBUklTMjQgKi8KKworI2lmZGVmIFNVTk9TNAorI2lmZGVmIEJTRDQKKyNpZmRlZiBT VU5PUzQxCisjZGVmaW5lIEhFUkFMRCAiIFN1bk9TIDQuMSIKKyNlbHNlCisjZGVmaW5lIEhFUkFM RCAiIFN1bk9TIDQuMCIKKyNlbmRpZiAvKiBTVU5PUzQxICovCisjZW5kaWYgLyogQlNENCAqLwor I2VuZGlmIC8qIFNVTk9TNCAqLworCisjaWZkZWYgU1VONFM1CisjaWZkZWYgSERCVVVDUAorI2Rl ZmluZSBIRVJBTEQgIiBTdW5PUyA0LjEgKFNWUjMpIgorI2Vsc2UKKyNkZWZpbmUgSEVSQUxEICIg U3VuT1MgNC4wIChTVlIzKSIKKyNlbmRpZiAvKiBIREJVVUNQICovCisjZW5kaWYgLyogU1VONFM1 ICovCisKKyNpZmRlZiBTVFJBVFVTCisjZGVmaW5lIEhFUkFMRCAiIFN0cmF0dXMgVk9TIgorI2Vu ZGlmIC8qIFNUUkFUVVMgKi8KKworI2lmZGVmIFRPV0VSMQorI2RlZmluZSBIRVJBTEQgIiBOQ1Ig VG93ZXIgMTYzMiBPUyAxLjAyIgorI2VuZGlmIC8qIFRPV0VSMSAqLworCisjaWZkZWYgVFJTMTYK KyNkZWZpbmUgSEVSQUxEICIgVGFuZHkgMTYvNjAwMCBYZW5peCAzLjAiCisjaWZuZGVmIENLQ1BV CisjZGVmaW5lIENLQ1BVICJtYzY4MDAwIgorI2VuZGlmIC8qIENLQ1BVICovCisjZW5kaWYgLyog VFJTMTYgKi8KKworI2lmZGVmIHUzYjIKKyNpZm5kZWYgSEVSQUxECisjaWZkZWYgU1ZSMworI2Rl ZmluZSBIRVJBTEQgIiBBVCZUIDNCMiBTeXN0ZW0gViBSMyIKKyNlbHNlCisjZGVmaW5lIEhFUkFM RCAiIEFUJlQgM0IyIFN5c3RlbSBWIgorI2VuZGlmIC8qIFNWUjMgKi8KKyNlbmRpZiAvKiBIRVJB TEQgKi8KKyNlbmRpZiAvKiB1M2IyICovCisKKyNpZmRlZiB1bHRyaXgKKyNpZmRlZiB2YXgKKyNp ZmRlZiBVTFRSSVgzCisjZGVmaW5lIEhFUkFMRCAiIFZBWC9VTFRSSVggMy4wIgorI2Vsc2UKKyNk ZWZpbmUgSEVSQUxEICIgVkFYL1VMVFJJWCIKKyNlbmRpZiAvKiBVTFRSSVgzICovCisjZWxzZQor I2lmZGVmIG1pcHMKKyNpZmRlZiBVTFRSSVg0MworI2RlZmluZSBIRVJBTEQgIiBERUNzdGF0aW9u L1VMVFJJWCA0LjMiCisjZWxzZQorI2lmZGVmIFVMVFJJWDQ0CisjZGVmaW5lIEhFUkFMRCAiIERF Q3N0YXRpb24vVUxUUklYIDQuNCIKKyNlbHNlCisjaWZkZWYgVUxUUklYNDUKKyNkZWZpbmUgSEVS QUxEICIgREVDc3RhdGlvbi9VTFRSSVggNC41IgorI2Vsc2UKKyNkZWZpbmUgSEVSQUxEICIgREVD c3RhdGlvbi9VTFRSSVgiCisjZW5kaWYgLyogVUxUUklYNDUgKi8KKyNlbmRpZiAvKiBVTFRSSVg0 NCAqLworI2VuZGlmIC8qIFVMVFJJWDQzICovCisjZWxzZQorI2RlZmluZSBIRVJBTEQgIiBVTFRS SVgiCisjZW5kaWYgLyogbWlwcyAqLworI2VuZGlmIC8qIHZheCAqLworI2VuZGlmIC8qIHVsdHJp eCAqLworCisjaWZkZWYgT1hPUworI2RlZmluZSBIRVJBTEQgIiBPbGl2ZXR0aSBYL09TIgorI2Vu ZGlmIC8qIE9YT1MgKi8KKworI2lmZGVmIF8zODZCU0QKKyNkZWZpbmUgSEVSQUxEICIgMzg2QlNE IgorI2VuZGlmIC8qIF8zODZCU0QgKi8KKworI2lmZGVmIFBPU0lYCisjaWZkZWYgUFRYCisjaWZk ZWYgUFRYNAorI2RlZmluZSBIRVJBTEQgIiBEWU5JWC9wdHggVjQiCisjZWxzZQorI2RlZmluZSBI RVJBTEQgIiBEWU5JWC9wdHgiCisjZW5kaWYgLyogUFRYNCAqLworI2Vsc2UgIC8qIFBUWCAqLwor I2lmbmRlZiBPU0YJCS8qIExldCBPU0YgLURQT1NJWCBrZWVwIHByZXZpb3VzbHkgZGVmaW5lZCBI RVJBTEQgKi8KKyNpZmRlZiBIRVJBTEQKKyN1bmRlZiBIRVJBTEQKKyNlbmRpZiAvKiBIRVJBTEQg Ki8KKyNlbmRpZiAvKiBPU0YgKi8KKyNpZmRlZiBPVTgKKyNkZWZpbmUgSEVSQUxEICIgT3BlblVO SVggOCIKKyNlbHNlCisjaWZkZWYgVVc3CisjZGVmaW5lIEhFUkFMRCAiIFVuaXh3YXJlIDciCisj ZWxzZQorI2lmZGVmIFFOWAorI2lmZGVmIFFOWDE2CisjZGVmaW5lIEhFUkFMRCAiIFFOWCAxNi1i aXQiCisjZWxzZQorI2RlZmluZSBIRVJBTEQgIiBRTlggMzItYml0IgorI2VuZGlmIC8qIFFOWDE2 ICovCisjZWxzZQorI2lmZGVmIE5FVVRSSU5PCisjZGVmaW5lIEhFUkFMRCAiIFFOWCBOZXV0cmlu byAyIgorI2Vsc2UgIC8qIE5FVVRSSU5PICovCisjaWZkZWYgUU5YNgorI2RlZmluZSBIRVJBTEQg IiBRTlg2IgorI2Vsc2UgIC8qIFFOWDYgKi8KKyNpZmRlZiBfX2xpbnV4X18KKyNpZmRlZiBaU0w1 NTAwCisjZGVmaW5lIEhFUkFMRCAiIFNoYXJwIFphdXJ1cyBTTC01NTAwIgorI2Vsc2UKKyNpZmRl ZiBSSDkwCisjZGVmaW5lIEhFUkFMRCAiIFJlZCBIYXQgTGludXggOS4wIgorI2Vsc2UKKyNpZmRl ZiBSSDgwCisjZGVmaW5lIEhFUkFMRCAiIFJlZCBIYXQgTGludXggOC4wIgorI2Vsc2UKKyNpZmRl ZiBSSDczCisjZGVmaW5lIEhFUkFMRCAiIFJlZCBIYXQgTGludXggNy4zIgorI2Vsc2UKKyNpZmRl ZiBSSDcyCisjZGVmaW5lIEhFUkFMRCAiIFJlZCBIYXQgTGludXggNy4yIgorI2Vsc2UKKyNpZmRl ZiBSSDcxCisjZGVmaW5lIEhFUkFMRCAiIFJlZCBIYXQgTGludXggNy4xIgorI2Vsc2UKKyNkZWZp bmUgSEVSQUxEICIgTGludXgiCisjZW5kaWYgLyogUkg3MSAqLworI2VuZGlmIC8qIFJINzIgKi8K KyNlbmRpZiAvKiBSSDczICovCisjZW5kaWYgLyogUkg4MCAqLworI2VuZGlmIC8qIFJIOTAgKi8K KyNlbmRpZiAvKiBaU0w1NTAwICovCisjZWxzZSAgLyogX19saW51eF9fICovCisjaWZkZWYgXzM4 NkJTRAkJCQkvKiAzODZCU0QgSm9saXggKi8KKyNkZWZpbmUgSEVSQUxEICIgMzg2QlNEIgorI2Vs c2UKKyNpZmRlZiBMWU5YT1MJCQkJLyogTHlueCBPUyAyLjIgKi8KKyNkZWZpbmUgSEVSQUxEICIg THlueCBPUyIKKyNlbHNlCisjaWZkZWYgUGxhbjkKKyNkZWZpbmUgSEVSQUxEICIgUGxhbiA5IGZy b20gQmVsbCBMYWJzIgorI2Vsc2UKKyNpZmRlZiBTT0xBUklTMTEKKyNkZWZpbmUgSEVSQUxEICIg U29sYXJpcyAxMSIKKyNlbHNlCisjaWZkZWYgU09MQVJJUzEwCisjZGVmaW5lIEhFUkFMRCAiIFNv bGFyaXMgMTAiCisjZWxzZQorI2lmZGVmIFNPTEFSSVM5CisjZGVmaW5lIEhFUkFMRCAiIFNvbGFy aXMgOSIKKyNlbHNlCisjaWZkZWYgU09MQVJJUzgKKyNkZWZpbmUgSEVSQUxEICIgU29sYXJpcyA4 IgorI2Vsc2UKKyNpZmRlZiBTT0xBUklTNworI2RlZmluZSBIRVJBTEQgIiBTb2xhcmlzIDciCisj ZWxzZQorI2lmZGVmIFNPTEFSSVMyNgorI2RlZmluZSBIRVJBTEQgIiBTb2xhcmlzIDIuNiIKKyNl bHNlCisjaWZkZWYgU09MQVJJUzI1CisjZGVmaW5lIEhFUkFMRCAiIFNvbGFyaXMgMi41IgorI2Vs c2UKKyNpZmRlZiBTT0xBUklTMjQKKyNkZWZpbmUgSEVSQUxEICIgU29sYXJpcyAyLjQiCisjZWxz ZQorI2lmZGVmIFNPTEFSSVMKKyNkZWZpbmUgSEVSQUxEICIgU29sYXJpcyAyLngiCisjZW5kaWYg LyogU09MQVJJUyAqLworI2VuZGlmIC8qIFNPTEFSSVMyNCAqLworI2VuZGlmIC8qIFNPTEFSSVMy NSAqLworI2VuZGlmIC8qIFNPTEFSSVMyNiAqLworI2VuZGlmIC8qIFNPTEFSSVM3ICovCisjZW5k aWYgLyogU09MQVJJUzggKi8KKyNlbmRpZiAvKiBTT0xBUklTOSAqLworI2VuZGlmIC8qIFNPTEFS SVMxMCAqLworI2VuZGlmIC8qIFNPTEFSSVMxMSAqLworI2VuZGlmIC8qIFBsYW45ICovCisjZW5k aWYgLyogTFlOWE9TICovCisjZW5kaWYgLyogXzM4NkJTRCAqLworI2VuZGlmIC8qIF9fbGludXhf XyAqLworI2VuZGlmIC8qIFFOWDYgKi8KKyNlbmRpZiAvKiBORVVUUklOTyAqLworI2VuZGlmIC8q IFFOWCAqLworI2VuZGlmIC8qIFVXNyAqLworI2VuZGlmIC8qIE9VOCAqLworI2VuZGlmIC8qIFBU WCAqLworI2VuZGlmIC8qIFBPU0lYICovCisKKyNpZmRlZiBVVFMyNAorI2RlZmluZSBIRVJBTEQg IiBBbWRhaGwgVVRTIDIuNCIKKyNlbmRpZiAvKiBVVFMyNCAqLworCisjaWZkZWYgVVRTVgorI2Rl ZmluZSBIRVJBTEQgIiBBbWRhaGwgVVRTIFYiCisjZW5kaWYgLyogVVRTViAqLworCisjaWZkZWYg VlhWRQorI2RlZmluZSBIRVJBTEQgIiBDREMgVlgvVkUgNS4yLjEgU3lzdGVtIFYiCisjZW5kaWYg LyogVlhWRSAqLworCisjaWZkZWYgU0NPMjM0CisjaWZkZWYgSEVSQUxECisjdW5kZWYgSEVSQUxE CisjZW5kaWYgLyogSEVSQUxEICovCisjZGVmaW5lIEhFUkFMRCAiIFNDTyBYRU5JWCAyLjMuNCIK KyNlbHNlCisjaWZkZWYgQ0tfU0NPMzJWNAorI2lmZGVmIEhFUkFMRAorI3VuZGVmIEhFUkFMRAor I2VuZGlmIC8qIEhFUkFMRCAqLworI2lmZGVmIE9EVDMwCisjZGVmaW5lIEhFUkFMRCAiIFNDTyBP RFQgMy4wIgorI2Vsc2UKKyNkZWZpbmUgSEVSQUxEICIgU0NPIFVOSVgvMzg2IFY0IgorI2VuZGlm IC8qIE9EVDMwICovCisjZWxzZQorI2lmZGVmIENLX1NDT1Y1CisjaWZkZWYgSEVSQUxECisjdW5k ZWYgSEVSQUxECisjZW5kaWYgLyogSEVSQUxEICovCisjaWZkZWYgU0NPX09TUjUwNworI2RlZmlu ZSBIRVJBTEQgIiBTQ08gT3BlblNlcnZlciBSNS4wLjciCisjZWxzZQorI2lmZGVmIFNDT19PU1I1 MDZBCisjZGVmaW5lIEhFUkFMRCAiIFNDTyBPcGVuU2VydmVyIFI1LjAuNmEiCisjZWxzZQorI2lm ZGVmIFNDT19PU1I1MDYKKyNkZWZpbmUgSEVSQUxEICIgU0NPIE9wZW5TZXJ2ZXIgUjUuMC42Igor I2Vsc2UKKyNpZmRlZiBTQ09fT1NSNTA1CisjZGVmaW5lIEhFUkFMRCAiIFNDTyBPcGVuU2VydmVy IFI1LjAuNSIKKyNlbHNlCisjaWZkZWYgU0NPX09TUjUwNAorI2RlZmluZSBIRVJBTEQgIiBTQ08g T3BlblNlcnZlciBSNS4wLjQiCisjZWxzZQorI2lmZGVmIFNDT19PU1I1MDIKKyNkZWZpbmUgSEVS QUxEICIgU0NPIE9wZW5TZXJ2ZXIgUjUuMC4yIgorI2Vsc2UKKyNkZWZpbmUgSEVSQUxEICIgU0NP IE9wZW5TZXJ2ZXIgUjUuMCIKKyNlbmRpZiAvKiBTQ09fT1NSNTAyICovCisjZW5kaWYgLyogU0NP X09TUjUwNCAqLworI2VuZGlmIC8qIFNDT19PU1I1MDUgKi8KKyNlbmRpZiAvKiBTQ09fT1NSNTA2 ICovCisjZW5kaWYgLyogU0NPX09TUjUwNkEgKi8KKyNlbmRpZiAvKiBTQ09fT1NSNTA3ICovCisj ZWxzZQorI2lmZGVmIFhFTklYCisjaWZkZWYgSEVSQUxECisjdW5kZWYgSEVSQUxECisjZW5kaWYg LyogSEVSQUxEICovCisjaWZkZWYgTV9VTklYCisjZGVmaW5lIEhFUkFMRCAiIFNDTyBVTklYLzM4 NiIKKyNlbHNlCisjaWZkZWYgTV9JMzg2CisjZGVmaW5lIEhFUkFMRCAiIFhlbml4LzM4NiIKKyNl bHNlCisjaWZkZWYgTV9JMjg2CisjZGVmaW5lIEhFUkFMRCAiIFhlbml4LzI4NiIKKyNlbHNlCisj ZGVmaW5lIEhFUkFMRCAiIFhlbml4IgorI2VuZGlmIC8qIE1fSTI4NiAqLworI2VuZGlmIC8qIE1f STM4NiAqLworI2VuZGlmIC8qIE1fVU5JWCAqLworI2VuZGlmIC8qIFhFTklYICAqLworI2VuZGlm IC8qIENLX1NDT1Y1ICovCisjZW5kaWYgLyogQ0tfU0NPVjMyVjQgKi8KKyNlbmRpZiAvKiBTQ08y MzQgKi8KKworI2lmZGVmIFpJTE9HCisjZGVmaW5lIEhFUkFMRCAiIFppbG9nIFM4MDAwIFpldXMg My4yMSsiCisjZW5kaWYgLyogWklMT0cgKi8KKworI2lmZGVmIFVURUsKKyNkZWZpbmUgSEVSQUxE ICIgVVRlayIKKyNlbmRpZiAvKiBVVEVLICovCisKKy8qIENhdGNoLWFsbHMgZm9yIGFueXRoaW5n IG5vdCBkZWZpbmVkIGV4cGxpY2l0bHkgYWJvdmUgKi8KKworI2lmbmRlZiBIRVJBTEQKKyNpZmRl ZiBTVlI0CisjaWZkZWYgaTM4NgorI2RlZmluZSBIRVJBTEQgIiBBVCZUIFN5c3RlbSBWLzM4NiBS NCIKKyNlbHNlCisjaWZkZWYgQU1JWAorI2RlZmluZSBIRVJBTEQgIiBDb21tb2RvcmUgQW1pZ2Eg U3lzdGVtIFYvbTY4ayBSNCIKKyNlbHNlCisjZGVmaW5lIEhFUkFMRCAiIEFUJlQgU3lzdGVtIFYg UjQiCisjZW5kaWYgLyogQU1JWCAqLworI2VuZGlmIC8qIGkzODYgKi8KKyNlbHNlCisjaWZkZWYg U1ZSMworI2RlZmluZSBIRVJBTEQgIiBBVCZUIFN5c3RlbSBWIFIzIgorI2Vsc2UKKyNpZmRlZiBB VFRTVgorI2RlZmluZSBIRVJBTEQgIiBBVCZUIFN5c3RlbSBJSUkgLyBTeXN0ZW0gViIKKyNlbHNl CisjaWZkZWYgQlNENDMKKyNpZmRlZiBwZHAxMQorI2RlZmluZSBIRVJBTEQgIiAyLjEwIEJTRCBQ RFAtMTEiCisjZWxzZQorI2lmZGVmIHZheAorI2RlZmluZSBIRVJBTEQgIiA0LjMgQlNEIFZBWCIK KyNlbHNlCisjZGVmaW5lIEhFUkFMRCAiIDQuMyBCU0QiCisjZW5kaWYgLyogdmF4ICovCisjZW5k aWYgLyogcGRwMTEgKi8KKyNlbHNlCisjaWZkZWYgQlNENAorI2lmZGVmIHZheAorI2RlZmluZSBI RVJBTEQgIiA0LjIgQlNEIFZBWCIKKyNlbHNlCisjZGVmaW5lIEhFUkFMRCAiIDQuMiBCU0QiCisj ZW5kaWYgLyogdmF4ICovCisjZWxzZQorI2lmZGVmIFY3CisjZGVmaW5lIEhFUkFMRCAiIFVOSVgg VmVyc2lvbiA3IgorI2VuZGlmIC8qIFY3ICovCisjZW5kaWYgLyogQlNENCAqLworI2VuZGlmIC8q IEJTRDQzICovCisjZW5kaWYgLyogQVRUU1YgKi8KKyNlbmRpZiAvKiBTVlIzICovCisjZW5kaWYg LyogU1ZSNCAqLworI2VuZGlmIC8qIEhFUkFMRCAqLworI2VuZGlmIC8qIEhFUkFMRCAqLworCisj aWZkZWYgT1MyCisjaWZkZWYgSEVSQUxECisjdW5kZWYgSEVSQUxECisjZW5kaWYgLyogSEVSQUxE ICovCisjaWZkZWYgTlQKKyNkZWZpbmUgSEVSQUxEICIgMzItYml0IFdpbmRvd3MiCisjZWxzZSAv KiBOVCAqLworI2RlZmluZSBIRVJBTEQgIiAzMi1iaXQgT1MvMiIKKyNlbmRpZiAvKiBOVCAqLwor I2VuZGlmIC8qIE9TLzIgKi8KKworI2lmbmRlZiBIRVJBTEQKKyNkZWZpbmUgSEVSQUxEICIgVW5r bm93biBWZXJzaW9uIgorI2VuZGlmIC8qIEhFUkFMRCAqLworCisvKiBIYXJkd2FyZSB0eXBlICov CisKKyNpZmRlZiB2YXgJCQkJLyogREVDIFZBWCAqLworI2lmbmRlZiBDS0NQVQorI2RlZmluZSBD S0NQVSAidmF4IgorI2VuZGlmIC8qIENLQ1BVICovCisjZW5kaWYgLyogIHZheCAqLworI2lmZGVm IHBkcDExCQkJCS8qIERFQyBQRFAtMTEgKi8KKyNpZm5kZWYgQ0tDUFUKKyNkZWZpbmUgQ0tDUFUg InBkcDExIgorI2VuZGlmIC8qIENLQ1BVICovCisjZW5kaWYgLyogcGRwMTEgKi8KKworI2lmZGVm IF9fQUxQSEEJCQkJLyogREVDIEFscGhhICovCisjaWZuZGVmIENLQ1BVCisjZGVmaW5lIENLQ1BV ICJBbHBoYSIKKyNlbmRpZiAvKiBDS0NQVSAqLworI2VuZGlmIC8qIF9fQUxQSEEgKi8KKworI2lm ZGVmIF9fYWxwaGEJCQkJLyogT1NGLzEgdXNlcyBsb3dlcmNhc2UuLi4gKi8KKyNpZm5kZWYgQ0tD UFUKKyNkZWZpbmUgQ0tDUFUgIkFscGhhIgorI2VuZGlmIC8qIENLQ1BVICovCisjZW5kaWYgLyog X19hbHBoYSAqLworCisjaWZkZWYgREdVWAkJCQkvKiBPdmVycmlkZSBNb3Rvcm9sYSA4OGsgYXNz dW1wdGlvbiAqLworI2lmbmRlZiBDS0NQVQkJCQkvKiBOZXcgQVZpaU9OcyBhcmUgSW50ZWwgYmFz ZWQuLi4gKi8KKyNpZmRlZiBpNTg2CisjZGVmaW5lIENLQ1BVICJpNTg2IgorI2Vsc2UKKyNpZmRl ZiBpNDg2CisjZGVmaW5lIENLQ1BVICJpNDg2IgorI2Vsc2UKKyNpZmRlZiBpMzg2CisjZGVmaW5l IENLQ1BVICJpMzg2IgorI2VuZGlmIC8qIGkzODYgKi8KKyNlbmRpZiAvKiBpNDg2ICovCisjZW5k aWYgLyogaTU4NiAqLworI2VuZGlmIC8qIENLQ1BVICovCisjZW5kaWYgLyogREdVWCAqLworCisv KiBIUCA5MDAwICovCisKKyNpZmRlZiBfX2hwOTAwMHM3MDAKKyNpZm5kZWYgQ0tDUFUKKyNkZWZp bmUgQ0tDUFUgImhwOTAwMHM3MDAiCisjZW5kaWYgLyogQ0tDUFUgKi8KKyNlbmRpZiAvKiBfX2hw OTAwMHM3MDAgKi8KKworI2lmZGVmIF9faHA5MDAwczgwMAorI2lmbmRlZiBDS0NQVQorI2RlZmlu ZSBDS0NQVSAiaHA5MDAwczgwMCIKKyNlbmRpZiAvKiBDS0NQVSAqLworI2VuZGlmIC8qIF9faHA5 MDAwczgwMCAqLworCisjaWZkZWYgX19ocDkwMDBzNTAwCisjaWZuZGVmIENLQ1BVCisjZGVmaW5l IENLQ1BVICJocDkwMDBzNTAwIgorI2VuZGlmIC8qIENLQ1BVICovCisjZW5kaWYgLyogX19ocDkw MDBzNTAwICovCisKKyNpZmRlZiBfX2hwOTAwMHM0MDAKKyNpZm5kZWYgQ0tDUFUKKyNkZWZpbmUg Q0tDUFUgImhwOTAwMHM0MDAiCisjZW5kaWYgLyogQ0tDUFUgKi8KKyNlbmRpZiAvKiBfX2hwOTAw MHM0MDAgKi8KKworI2lmZGVmIF9faHA5MDAwczMwMAorI2lmbmRlZiBDS0NQVQorI2RlZmluZSBD S0NQVSAiaHA5MDAwczMwMCIKKyNlbmRpZiAvKiBDS0NQVSAqLworI2VuZGlmIC8qIF9faHA5MDAw czMwMCAqLworCisjaWZkZWYgX19ocDkwMDBzMjAwCisjaWZuZGVmIENLQ1BVCisjZGVmaW5lIENL Q1BVICJocDkwMDBzMjAwIgorI2VuZGlmIC8qIENLQ1BVICovCisjZW5kaWYgLyogX19ocDkwMDBz MjAwICovCisKKyNpZmRlZiBtODgwMDAJCQkJLyogTW90b3JvbGEgODgwMDAgKi8KKyNpZm5kZWYg Q0tDUFUKKyNkZWZpbmUgQ0tDUFUgIm1jODgwMDAiCisjZW5kaWYgLyogQ0tDUFUgKi8KKyNlbmRp ZiAvKiBtODgwMDAgKi8KKyNpZmRlZiBfX3VzaW5nX004OEtCQ1MJCQkvKiBERyBzeW1ib2wgZm9y IE1vdG9yb2xhIDg4MDAwICovCisjaWZuZGVmIENLQ1BVCisjZGVmaW5lIENLQ1BVICJtYzg4MDAw IgorI2VuZGlmIC8qIENLQ1BVICovCisjZW5kaWYgLyogX191c2luZ19NODhLQkNTICovCisjaWZk ZWYgbTg4awkJCQkvKiBNb3Rvcm9sYSBzeW1ib2wgZm9yIDg4MDAwICovCisjaWZuZGVmIENLQ1BV CisjZGVmaW5lIENLQ1BVICJtYzg4MDAwIgorI2VuZGlmIC8qIENLQ1BVICovCisjZW5kaWYgLyog bTg4ayAqLworI2lmZGVmIG1jNjgwNDAJCQkJLyogTW90b3JvbGEgNjgwNDAgKi8KKyNpZm5kZWYg Q0tDUFUKKyNkZWZpbmUgQ0tDUFUgIm1jNjgwNDAiCisjZW5kaWYgLyogQ0tDUFUgKi8KKyNlbmRp ZiAvKiBtYzY4MDQwICovCisjaWZkZWYgbWM2ODAzMAkJCQkvKiBNb3Rvcm9sYSA2ODAzMCAqLwor I2lmbmRlZiBDS0NQVQorI2RlZmluZSBDS0NQVSAibWM2ODAzMCIKKyNlbmRpZiAvKiBDS0NQVSAq LworI2VuZGlmIC8qIG1jNjgwMzAgKi8KKyNpZmRlZiBtYzY4MDIwCQkJCS8qIE1vdG9yb2xhIDY4 MDIwICovCisjaWZuZGVmIENLQ1BVCisjZGVmaW5lIENLQ1BVICJtYzY4MDIwIgorI2VuZGlmIC8q IENLQ1BVICovCisjZW5kaWYgLyogbWM2ODAyMCAqLworI2lmZGVmIG1jNjgwMTAJCQkJLyogTW90 b3JvbGEgNjgwMTAgKi8KKyNpZm5kZWYgQ0tDUFUKKyNkZWZpbmUgQ0tDUFUgIm1jNjgwMTAiCisj ZW5kaWYgLyogQ0tDUFUgKi8KKyNlbmRpZiAvKiBtYzY4MDEwICovCisjaWZkZWYgbWM2ODAwMAkJ CQkvKiBNb3Rvcm9sYSA2ODAwMCAqLworI2lmbmRlZiBDS0NQVQorI2RlZmluZSBDS0NQVSAibWM2 ODAwMCIKKyNlbmRpZiAvKiBDS0NQVSAqLworI2VuZGlmIC8qIG1jNjgwMDAgKi8KKyNpZmRlZiBt YzY4awkJCQkvKiBEaXR0byAodXNlZCBieSBESUFCIERTOTApICovCisjaWZuZGVmIENLQ1BVCisj ZGVmaW5lIENLQ1BVICJtYzY4MDAwIgorI2VuZGlmIC8qIENLQ1BVICovCisjZW5kaWYgLyogbWM2 OGsgKi8KKyNpZmRlZiBtNjgJCQkJLyogRGl0dG8gKi8KKyNpZm5kZWYgQ0tDUFUKKyNkZWZpbmUg Q0tDUFUgIm1jNjgwMDAiCisjZW5kaWYgLyogQ0tDUFUgKi8KKyNlbmRpZiAvKiBtNjggKi8KKyNp ZmRlZiBtNjhrCQkJCS8qIERpdHRvICovCisjaWZuZGVmIENLQ1BVCisjZGVmaW5lIENLQ1BVICJt YzY4MDAwIgorI2VuZGlmIC8qIENLQ1BVICovCisjZW5kaWYgLyogbTY4ayAqLworCisjaWZkZWYg aWE2NAkJCQkvKiBJQTY0IC8gSXRhbml1bSAqLworI2lmbmRlZiBDS0NQVQorI2RlZmluZSBDS0NQ VSAiaWE2NCIKKyNlbmRpZiAvKiBDS0NQVSAqLworI2VuZGlmIC8qIGk2ODYgKi8KKworI2lmZGVm IGk2ODYJCQkJLyogSW50ZWwgODA2ODYgKi8KKyNpZm5kZWYgQ0tDUFUKKyNkZWZpbmUgQ0tDUFUg Imk2ODYiCisjZW5kaWYgLyogQ0tDUFUgKi8KKyNlbmRpZiAvKiBpNjg2ICovCisKKyNpZmRlZiBp NTg2CQkJCS8qIEludGVsIDgwNTg2ICovCisjaWZuZGVmIENLQ1BVCisjZGVmaW5lIENLQ1BVICJp NTg2IgorI2VuZGlmIC8qIENLQ1BVICovCisjZW5kaWYgLyogaTU4NiAqLworCisjaWZkZWYgaTQ4 NgkJCQkvKiBJbnRlbCA4MDQ4NiAqLworI2lmbmRlZiBDS0NQVQorI2RlZmluZSBDS0NQVSAiaTQ4 NiIKKyNlbmRpZiAvKiBDS0NQVSAqLworI2VuZGlmIC8qIGk4MDQ4NiAqLworI2lmZGVmIGkzODYJ CQkJLyogSW50ZWwgODAzODYgKi8KKyNpZm5kZWYgQ0tDUFUKKyNkZWZpbmUgQ0tDUFUgImkzODYi CisjZW5kaWYgLyogQ0tDUFUgKi8KKyNlbmRpZiAvKiBpODAzODYgKi8KKyNpZmRlZiBpMjg2CQkJ CS8qIEludGVsIDgwMjg2ICovCisjaWZuZGVmIENLQ1BVCisjZGVmaW5lIENLQ1BVICJpMjg2Igor I2VuZGlmIC8qIENLQ1BVICovCisjZW5kaWYgLyogaTI4NiAqLworI2lmZGVmIGkxODYJCQkJLyog SW50ZWwgODAxODYgKi8KKyNpZm5kZWYgQ0tDUFUKKyNkZWZpbmUgQ0tDUFUgImkxODYiCisjZW5k aWYgLyogQ0tDUFUgKi8KKyNlbmRpZiAvKiBpMTg2ICovCisjaWZkZWYgTV9JNTg2CQkJCS8qIElu dGVsIDgwNTg2ICovCisjaWZuZGVmIENLQ1BVCisjZGVmaW5lIENLQ1BVICJpNTg2IgorI2VuZGlm IC8qIENLQ1BVICovCisjZW5kaWYgLyogTV9JNTg2ICovCisjaWZkZWYgTV9JNDg2CQkJCS8qIElu dGVsIDgwNDg2ICovCisjaWZuZGVmIENLQ1BVCisjZGVmaW5lIENLQ1BVICJpNDg2IgorI2VuZGlm IC8qIENLQ1BVICovCisjZW5kaWYgLyogTV9JNDg2ICovCisjaWZkZWYgX01fSTM4NgkJCQkvKiBJ bnRlbCA4MDM4NiAqLworI2lmbmRlZiBDS0NQVQorI2RlZmluZSBDS0NQVSAiaTM4NiIKKyNlbmRp ZiAvKiBDS0NQVSAqLworI2VuZGlmIC8qIF9NX0kzODYgKi8KKyNpZmRlZiBNX0kyODYJCQkJLyog SW50ZWwgODAyODYgKi8KKyNpZm5kZWYgQ0tDUFUKKyNkZWZpbmUgQ0tDUFUgImkyODYiCisjZW5k aWYgLyogQ0tDUFUgKi8KKyNlbmRpZiAvKiBNX0kyODYgKi8KKyNpZmRlZiBNX0k4NgkJCQkvKiBJ bnRlbCA4MHg4NiAqLworI2lmbmRlZiBDS0NQVQorI2RlZmluZSBDS0NQVSAiaXg4NiIKKyNlbmRp ZiAvKiBDS0NQVSAqLworI2VuZGlmIC8qIE1fSTg2ICovCisjaWZkZWYgc3BhcmMJCQkJLyogU1VO IFNQQVJDICovCisjaWZuZGVmIENLQ1BVCisjZGVmaW5lIENLQ1BVICJzcGFyYyIKKyNlbmRpZiAv KiBDS0NQVSAqLworI2VuZGlmIC8qIHNwYXJjICovCisjaWZkZWYgbWlwcwkJCQkvKiBNSVBTIFJJ U0MgcHJvY2Vzc29yICovCisjaWZuZGVmIENLQ1BVCisjZGVmaW5lIENLQ1BVICJtaXBzIgorI2Vu ZGlmIC8qIENLQ1BVICovCisjZW5kaWYgLyogbWlwcyAqLworI2lmZGVmIF9JQk1SMgkJCQkvKiBJ Qk0gUlMvNjAwMCAqLworI2lmbmRlZiBDS0NQVQkJCQkvKiAod2hhdCBkbyB0aGV5IGNhbGwgdGhl IGNoaXA/KSAqLworI2RlZmluZSBDS0NQVSAicnM2MDAwIgorI2VuZGlmIC8qIENLQ1BVICovCisj ZW5kaWYgLyogcnM2MDAwICovCisjaWZkZWYgdTNiNQkJCQkvKiBXRTMyMDAwIE1BQy0zMiwgQVQm VCAzQnggKi8KKyNpZm5kZWYgQ0tDUFUKKyNkZWZpbmUgQ0tDUFUgInUzYjUiCisjZW5kaWYgLyog Q0tDUFUgKi8KKyNlbmRpZiAvKiB1M2I1ICovCisjaWZkZWYgbjNiCisjaWZuZGVmIENLQ1BVCisj ZGVmaW5lIENLQ1BVICJuM2IiCisjZW5kaWYgLyogQ0tDUFUgKi8KKyNlbmRpZiAvKiBuM2IgKi8K KyNpZmRlZiB1M2IKKyNpZm5kZWYgQ0tDUFUKKyNkZWZpbmUgQ0tDUFUgInUzYiIKKyNlbmRpZiAv KiBDS0NQVSAqLworI2VuZGlmIC8qIHUzYiAqLworI2lmZGVmIG4xNgkJCQkvKiBFbmNvcmUgTXVs dGltYXggKi8KKyNpZm5kZWYgQ0tDUFUKKyNkZWZpbmUgQ0tDUFUgIm4xNiIKKyNlbmRpZiAvKiBD S0NQVSAqLworI2VuZGlmIC8qIG4xNiAqLworI2lmZGVmIHUzNzAJCQkJLyogSUJNIDM3MCAqLwor I2lmbmRlZiBDS0NQVQorI2RlZmluZSBDS0NQVSAidTM3MCIKKyNlbmRpZiAvKiBDS0NQVSAqLwor I2VuZGlmIC8qIHUzNzAgKi8KKyNpZmRlZiBNQUMJCQkJLyogTWFjaW50b3NoIGNhdGNoLWFsbCAq LworI2lmbmRlZiBDS0NQVQorI2RlZmluZSBDS0NQVSAibWM2ODAwMCIKKyNlbmRpZiAvKiBDS0NQ VSAqLworI2VuZGlmIC8qIE1BQyAqLworCisjaWZkZWYgU1RSQVRVUworI2lmbmRlZiBDS0NQVQor I2lmZGVmIF9fSTg2MF9fCisjZGVmaW5lIENLQ1BVICJJODYwIEZhbWlseSIKKyNlbHNlCisjaWZk ZWYgX19NQzY4S19fCisjZGVmaW5lIENLQ1BVICJNQzY4MHgwIEZhbWlseSIKKyNlbHNlCisjZGVm aW5lIENLQ1BVICJTdHJhdHVzIHVua25vd24gcHJvY2Vzc29yIgorI2VuZGlmIC8qIF9fTUM2OEtf XyAqLworI2VuZGlmIC8qIF9fSTg2MF9fICovCisjZW5kaWYgLyogQ0tDUFUgKi8KKyNlbmRpZiAv KiBTVFJBVFVTICovCisKKyNpZmRlZiBDT01NRU5UCisjaWZuZGVmIENLQ1BVCQkJCS8qIEFsbCBv dGhlcnMgKi8KKyNkZWZpbmUgQ0tDUFUgInVua25vd24iCisjZW5kaWYgLyogQ0tDUFUgKi8KKyNl bmRpZiAvKiBDT01NRU5UICovCisKKyNlbmRpZiAvKiBDS1VWRVJfSCAqLwoKZGlmZiAtLWdpdCBh L2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1eGxhLmMgYi9ja2VybWl0 LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdXhsYS5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAuLmQ1NTY2ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9ja2VybWl0LTku MC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdXhsYS5jCkBAIC0wLDAgKzEsNzU4OCBAQAor I2luY2x1ZGUgImNrY3N5bS5oIgorCisjaW5jbHVkZSAiY2tjZGViLmgiCQkJLyogSW5jbHVkZXMu Li4gKi8KKyNpbmNsdWRlICJja2NrZXIuaCIKKyNpbmNsdWRlICJja3VjbWQuaCIKKyNpbmNsdWRl ICJja2N4bGEuaCIKKworI2lmZGVmIE5PWEZFUgorI2RlZmluZSB6ZHN0dWZmKGEpCisjZW5kaWYg LyogTk9YRkVSICovCisKKyNpZm5kZWYgTk9DU0VUUworY2hhciAqeGxhdiA9ICJDaGFyYWN0ZXIg U2V0IFRyYW5zbGF0aW9uIDkuMC4wNDQsIDIgSnVuIDIwMTEiOworCisvKiAgQyBLIFUgWCBMIEEg ICovCisKKy8qICBDLUtlcm1pdCB0YWJsZXMgYW5kIGZ1bmN0aW9ucyBzdXBwb3J0aW5nIGNoYXJh Y3RlciBzZXQgdHJhbnNsYXRpb24uICAqLworLyoKKyAgQXV0aG9yOiBGcmFuayBkYSBDcnV6IDxm ZGNAY29sdW1iaWEuZWR1PiwKKyAgQ29sdW1iaWEgVW5pdmVyc2l0eSBBY2FkZW1pYyBJbmZvcm1h dGlvbiBTeXN0ZW1zLCBOZXcgWW9yayBDaXR5LgorCisgIENvcHlyaWdodCAoQykgMTk4NSwgMjAx MSwKKyAgICBUcnVzdGVlcyBvZiBDb2x1bWJpYSBVbml2ZXJzaXR5IGluIHRoZSBDaXR5IG9mIE5l dyBZb3JrLgorICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBTZWUgdGhlIEMtS2VybWl0IENPUFlJ TkcuVFhUIGZpbGUgb3IgdGhlCisgICAgY29weXJpZ2h0IHRleHQgaW4gdGhlIGNrY21haS5jIG1v ZHVsZSBmb3IgZGlzY2xhaW1lciBhbmQgcGVybWlzc2lvbnMuCisqLworCisvKiBDaGFyYWN0ZXIg c2V0IHRyYW5zbGF0aW9uIGRhdGEgYW5kIGZ1bmN0aW9ucyAqLworCitleHRlcm4gaW50IHppbmNu dDsJCQkvKiBGaWxlIGkvbyBtYWNyb3MgYW5kIHZhcmlhYmxlcyAqLworZXh0ZXJuIGNoYXIgKnpp bnB0cjsKK2V4dGVybiBpbnQgem91dGNudDsKK2V4dGVybiBjaGFyICp6b3V0cHRyOworZXh0ZXJu IGludCBieXRlb3JkZXI7CitleHRlcm4gaW50IHhmcnhsYTsKKworaW50IHRzbGV2ZWwgID0gVFNf TDA7CQkJLyogVHJhbnNmZXIgc3ludGF4IGxldmVsICgwLDEsMikgKi8KK2ludCB0Y2hhcnNldCA9 IFRDX1RSQU5TUDsJCS8qIFRyYW5zZmVyIHN5bnRheCBjaGFyYWN0ZXIgc2V0ICovCitpbnQgdGNz X3NhdmUgPSAtMTsJCQkvKiBGb3Igc2F2ZS9yZXN0b3JlIHRlcm0gY2hhcnNldCAqLworaW50IHRj c190cmFuc3AgPSAwOwkJCS8qIFRlcm0gY2hhcnNldCBpcyBUUkFOU1BBUkVOVCBmbGFnICovCisK KyNpZmRlZiBDS09VTkkKK2ludCB0Y3NyICAgICA9IFRYXzg4NTlfMTsJCS8qIFJlbW90ZSB0ZXJt aW5hbCBjaGFyYWN0ZXIgc2V0ICovCisjZWxzZSAvKiBDS09VTkkgKi8KK2ludCB0Y3NyICAgICA9 IEZDX1VTQVNDSUk7CisjZW5kaWYgLyogQ0tPVU5JICovCitpbnQgbGFuZ3VhZ2UgPSBMX1VTQVND SUk7CQkvKiBMYW5ndWFnZSAqLworCisjaWZkZWYgVU5JQ09ERQoraW50IHVjc2JvbSA9IDE7CQkJ CS8qIEFkZCBCT00gdG8gbmV3IFVDUyBmaWxlcz8gKi8KK2ludCB1Y3NvcmRlciA9IC0xOwkJCS8q IERlZmF1bHQgYnl0ZSBvcmRlciBmb3IgVUNTIGZpbGVzICovCitpbnQgZmlsZW9yZGVyID0gLTE7 CQkJLyogQnl0ZSBvcmRlciBvZiBjdXJyZW50IGZpbGUgKi8KKwkJCQkJLyogMCA9IEJFLCAxID0g TEUgKi8KKyNlbmRpZiAvKiBVTklDT0RFICovCisvKgorICBEZWZhdWx0IGxvY2FsIGZpbGUgYW5k IHRlcm1pbmFsIGNoYXJhY3RlciBzZXQuCisgIE5vcm1hbGx5IEFTQ0lJLCBidXQgZm9yIHNvbWUg c3lzdGVtcyB3ZSBrbm93IG90aGVyd2lzZS4KKyovCitpbnQgZmNzX3NhdmUgPSAtMTsKKyNpZmRl ZiBkYXRhZ2VuZXJhbAkJCS8qIERhdGEgR2VuZXJhbCBBT1MvVlMgKi8KK2ludCBmY2hhcnNldCA9 IEZDX0RHTUNTOwkJLyogdXNlcyB0aGUgREcgSW50ZXJuYXRpb25hbCBzZXQgKi8KK2ludCBkY3Nl dDggICA9IEZDX0RHTUNTOworaW50IGRjc2V0NyAgID0gRkNfVVNBU0NJSTsKK2ludCB0Y3NsICAg ICA9IEZDX0RHTUNTOworI2Vsc2UKKyNpZmRlZiBORVhUCQkJCS8qIFRoZSBOZVhUIHdvcmtzdGF0 aW9uICovCitpbnQgZmNoYXJzZXQgPSBGQ19ORVhUOwkJCS8qIHVzZXMgaXRzIG93biA4LWJpdCBz ZXQgKi8KK2ludCBkY3NldDggICA9IEZDX05FWFQ7CitpbnQgZGNzZXQ3ICAgPSBGQ19VU0FTQ0lJ OworaW50IHRjc2wgICAgID0gRkNfTkVYVDsKKyNlbHNlCisjaWZkZWYgTUFDCQkJCS8qIFRoZSBN YWNpbnRvc2ggKi8KK2ludCBmY2hhcnNldCA9IEZDX0FQUFFEOwkJLyogdXNlcyBhbiBleHRlbmRl ZCB2ZXJzaW9uIG9mICovCitpbnQgZGNzZXQ4ICAgPSBGQ19BUFBRRDsKK2ludCBkY3NldDcgICA9 IEZDX1VTQVNDSUk7CitpbnQgdGNzbCAgICAgPSBGQ19BUFBRRDsJCS8qIEFwcGxlIFF1aWNrZHJh dyAqLworI2Vsc2UKKyNpZmRlZiBBVVgKK2ludCBmY2hhcnNldCA9IEZDX0FQUFFEOwkJLyogRGl0 dG8gZm9yIEFwcGxlIEEvVVggKi8KK2ludCBkY3NldDggICA9IEZDX0FQUFFEOworaW50IGRjc2V0 NyAgID0gRkNfVVNBU0NJSTsKK2ludCB0Y3NsICAgICA9IEZDX0FQUFFEOworI2Vsc2UKKyNpZmRl ZiBBTUlHQQkJCQkvKiBUaGUgQ29tbW9kb3JlIEFtaWdhICovCitpbnQgZmNoYXJzZXQgPSBGQ18x TEFUSU47CQkvKiB1c2VzIExhdGluLTEgKi8KK2ludCBkY3NldDggICA9IEZDXzFMQVRJTjsKK2lu dCBkY3NldDcgICA9IEZDX1VTQVNDSUk7CitpbnQgdGNzbCAgICAgPSBGQ18xTEFUSU47CisjZWxz ZQkJCQkJLyogQWxsIG90aGVycyAqLworI2lmZGVmIENLT1VOSSAJCQkJLyogT1MvMiBVbmljb2Rl ICovCitpbnQgZmNoYXJzZXQgPSBGQ18xTEFUSU47CitpbnQgZGNzZXQ4ICAgPSBGQ18xTEFUSU47 CitpbnQgZGNzZXQ3ICAgPSBGQ19VU0FTQ0lJOworaW50IHRjc2wgICAgID0gVFhfODg1OV8xOwor aW50IHBybmNzICAgID0gVFhfQ1A0Mzc7CisjZWxzZQkJCQkJLyogQWxsIG90aGVycyAqLworaW50 IGZjaGFyc2V0ID0gRkNfVVNBU0NJSTsJCS8qIHVzZSBBU0NJSSBieSBkZWZhdWx0ICovCitpbnQg ZGNzZXQ4ICAgPSBGQ18xTEFUSU47CQkvKiBCdXQgZGVmYXVsdCA4LWJpdCBzZXQgaXMgTGF0aW4t MSAqLworaW50IGRjc2V0NyAgID0gRkNfVVNBU0NJSTsKK2ludCB0Y3NsICAgICA9IEZDX1VTQVND SUk7CitpbnQgcHJuY3MgICAgPSBGQ19DUDQzNzsKKyNlbmRpZiAvKiBDS09VTkkgKi8KKyNlbmRp ZiAvKiBBTUlHQSAqLworI2VuZGlmIC8qIEFVWCAqLworI2VuZGlmIC8qIE1BQyAqLworI2VuZGlm IC8qIE5FWFQgKi8KKyNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLworCitpbnQgc19jc2V0ID0gWE1P REVfQTsJCQkvKiBTRU5EIGNoYXJzZXQgc2VsZWN0aW9uID0gQVVUTyAqLworaW50IHJfY3NldCA9 IFhNT0RFX0E7CQkJLyogUkVDViBjaGFyc2V0IHNlbGVjdGlvbiA9IEFVVE8gKi8KK2ludCBhZmNz ZXRbTUFYRkNTRVRTKzFdOwkJLyogQ2hhcmFjdGVyLXNldCBhc3NvY2lhdGlvbnMgKi8KK2ludCBh eGNzZXRbTUFYVENTRVRTKzFdOworaW50IHhsYXR5cGUgPSBYTEFfTk9ORTsJCQkvKiBUcmFuc2xh dGlvbiB0eXBlICovCisKKyNpZmRlZiBVTklDT0RFCisjaWZkZWYgQ0tfQU5TSUMKK2V4dGVybiBp bnQgKCp4bF91dGNbTUFYVENTRVRTKzFdKShVU0hPUlQpOyAgLyogVW5pY29kZSB0byBUQ1MgKi8K K2V4dGVybiBpbnQgKCp4bF91ZmNbTUFYRkNTRVRTKzFdKShVU0hPUlQpOyAgLyogVW5pY29kZSB0 byBGQ1MgKi8KK2V4dGVybiBVU0hPUlQgKCp4bF90Y3VbTUFYVENTRVRTKzFdKShDSEFSKTsgLyog VENTIHRvIFVuaWNvZGUgKi8KK2V4dGVybiBVU0hPUlQgKCp4bF9mY3VbTUFYRkNTRVRTKzFdKShD SEFSKTsgLyogRkNTIHRvIFVuaWNvZGUgKi8KKyNlbHNlCitleHRlcm4gaW50ICgqeGxfdXRjW01B WFRDU0VUUysxXSkoKTsKK2V4dGVybiBpbnQgKCp4bF91ZmNbTUFYRkNTRVRTKzFdKSgpOworZXh0 ZXJuIFVTSE9SVCAoKnhsX3RjdVtNQVhUQ1NFVFMrMV0pKCk7CitleHRlcm4gVVNIT1JUICgqeGxf ZmN1W01BWEZDU0VUUysxXSkoKTsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworI2VuZGlmIC8qIFVO SUNPREUgKi8KKworLyogQnVyZWF1Y3JhY3kgc2VjdGlvbiAqLworCitfUFJPVE9UWVAoIENIQVIg eG5lbDEsIChDSEFSIGMpICk7CS8qIE5lWFQgdG8gTGF0aW4tMSAqLworX1BST1RPVFlQKCBDSEFS IHhsMTQzLCAoQ0hBUiBjKSApOwkvKiBMYXRpbi0xIHRvIElCTSBDUDQzNyAqLworX1BST1RPVFlQ KCBDSEFSIHhsMWFzLCAoQ0hBUiBjKSApOwkvKiBMYXRpbi0xIHRvIFVTIEFTQ0lJICovCitfUFJP VE9UWVAoIENIQVIgemwxYXMsIChDSEFSIGMpICk7CS8qIExhdGluLTEgdG8gVVMgQVNDSUkgKi8K KworI2lmZGVmIENZUklMTElDCitfUFJPVE9UWVAoIENIQVIgeGFzc2ssIChDSEFSIGMpICk7CS8q IEFTQ0lJIHRvIFNob3J0IEtPSSAqLworX1BST1RPVFlQKCBDSEFSIHhza2N5LCAoQ0hBUiBjKSAp OwkvKiBTaG9ydCBLT0kgdG8gTGF0aW4vQ3lyaWxsaWMgKi8KKyNlbmRpZiAvKiBDWVJJTExJQyAq LworCisjaWZkZWYgTEFUSU4yCitfUFJPVE9UWVAoIENIQVIgeG5lbDIsIChDSEFSIGMpICk7CS8q IE5lWFQgdG8gTGF0aW4tMiAqLworX1BST1RPVFlQKCBDSEFSIHhsMjQzLCAoQ0hBUiBjKSApOwkv KiBMYXRpbi0yIHRvIElCTSBDUDQzNyAqLworX1BST1RPVFlQKCBDSEFSIHhsMmFzLCAoQ0hBUiBj KSApOwkvKiBMYXRpbi0yIHRvIFVTIEFTQ0lJICovCitfUFJPVE9UWVAoIENIQVIgemwyYXMsIChD SEFSIGMpICk7CS8qIExhdGluLTIgdG8gVVMgQVNDSUkgKi8KK19QUk9UT1RZUCggQ0hBUiB4bDJy OCwgKENIQVIgYykgKTsJLyogTGF0aW4tMiB0byBIUCAqLworX1BST1RPVFlQKCBDSEFSIHhsMmw5 LCAoQ0hBUiBjKSApOwkvKiBMYXRpbi0yIHRvIExhdGluLTkgKi8KK19QUk9UT1RZUCggQ0hBUiB4 bDlsMiwgKENIQVIgYykgKTsJLyogTGF0aW4tOSB0byBMYXRpbi0yICovCitfUFJPVE9UWVAoIENI QVIgeGwybXosIChDSEFSIGMpICk7CS8qIExhdGluLTIgdG8gTWF6b3ZpYSAqLworX1BST1RPVFlQ KCBDSEFSIHhtemwyLCAoQ0hBUiBjKSApOwkvKiBNYXpvdmlhIHRvIExhdGluLTIgKi8KK19QUk9U T1RZUCggQ0hBUiB4bDFteiwgKENIQVIgYykgKTsJLyogTGF0aW4tMSB0byBNYXpvdmlhICovCitf UFJPVE9UWVAoIENIQVIgeG16bDEsIChDSEFSIGMpICk7CS8qIE1hem92aWEgdG8gTGF0aW4tMSAq LworX1BST1RPVFlQKCBDSEFSIHhtemw5LCAoQ0hBUiBjKSApOwkvKiBMYXRpbi05IHRvIE1hem92 aWEgKi8KK19QUk9UT1RZUCggQ0hBUiB4bDlteiwgKENIQVIgYykgKTsJLyogTWF6b3ZpYSB0byBM YXRpbi05ICovCisjZW5kaWYgLyogTEFUSU4yICovCisKKy8qIFRyYW5zZmVyIGNoYXJhY3Rlci1z ZXQgaW5mbyAqLworCitzdHJ1Y3QgY3NpbmZvIHRjc2luZm9bXSA9IHsKKy8qICBOYW1lICAgICAg ICAgICAgICBzaXplIGNvZGUgICAgICBkZXNpZ25hdG9yIGFscGhhYmV0IGtleXdvcmQgICAgICAg ICAgICAqLworICAiVFJBTlNQQVJFTlQiLCAgICAgICAyNTYsVENfVFJBTlNQLCAiIiwgICAgICBB TF9VTkssICAidHJhbnNwYXJlbnQiLCAgLyogMCAqLworICAiQVNDSUkiLCAgICAgICAgICAgICAx MjgsVENfVVNBU0NJSSwiIiwgICAgICBBTF9ST01BTiwiYXNjaWkiLCAgICAgICAgLyogMSAqLwor ICAiSVNPIDg4NTktMSBMYXRpbi0xIiwyNTYsVENfMUxBVElOLCAiSTYvMTAwIixBTF9ST01BTiwi bGF0aW4xLWlzbyIsICAgLyogMiAqLworI2lmZGVmIExBVElOMgorICAiSVNPIDg4NTktMiBMYXRp bi0yIiwyNTYsVENfMkxBVElOLCAiSTYvMTAxIixBTF9ST01BTiwibGF0aW4yLWlzbyIsICAgLyog MyAqLworI2VuZGlmIC8qIExBVElOMiAqLworI2lmZGVmIENZUklMTElDCisgIC8qIDQgKi8KKyAg IklTTyA4ODU5LTUgTGF0aW4vQ3lyaWxsaWMiLDI1NixUQ19DWVJJTEwsIkk2LzE0NCIsQUxfQ1lS SUwsImN5cmlsbGljLWlzbyIsCisjZW5kaWYgLyogQ1lSSUxMSUMgKi8KKyNpZmRlZiBLQU5KSQor ICAiSmFwYW5lc2UgRVVDIiwxNjM4NCxUQ19KRVVDLCAgIkkxNC84Ny8xMyIsIEFMX0pBUEFOLCAi ZXVjLWpwIiwgICAgICAgLyogNSAqLworI2VuZGlmIC8qIEtBTkpJICovCisjaWZkZWYgSEVCUkVX CisgIC8qIDYgKi8KKyAgIklTTyA4ODU5LTggTGF0aW4vSGVicmV3IiwyNTYsVENfSEVCUkVXLCJJ Ni8xMzgiLEFMX0hFQlJFVywiaGVicmV3LWlzbyIsCisjZW5kaWYgLyogSEVCUkVXICovCisjaWZk ZWYgR1JFRUsKKyAgIklTTyA4ODU5LTcgTGF0aW4vR3JlZWsiLDI1NixUQ19HUkVFSywiSTYvMTI2 IixBTF9HUkVFSywiZ3JlZWstaXNvIiwgLyogIDcgKi8KKyNlbmRpZiAvKiBHUkVFSyAqLworICAi SVNPIDg4NTktMTUgTGF0aW4tOSIsMjU2LFRDXzlMQVRJTiwiSTYvMjAzIixBTF9ST01BTiwibGF0 aW45LWlzbyIsICAvKiAgOCAqLworICAiSVNPIDEwNjQ2IC8gVW5pY29kZSBVQ1MtMiIsNjQwMDAs VENfVUNTMiwiSTE2MiIsQUxfVU5JViwidWNzMiIsICAgICAvKiAgOSAqLworICAiSVNPIDEwNjQ2 IC8gVW5pY29kZSBVVEYtOCIsNjQwMDAsVENfVVRGOCwiSTE5MCIsQUxfVU5JViwidXRmOCIsICAg ICAvKiAxMCAqLworICAiIiwwLDAsIiIsMCwiIgorfTsKK2ludCBudGNzZXRzID0gKHNpemVvZih0 Y3NpbmZvKSAvIHNpemVvZihzdHJ1Y3QgY3NpbmZvKSkgLSAxOworCitzdHJ1Y3Qga2V5dGFiIHRj c3RhYltdID0gewkJLyogS2V5d29yZCB0YWJsZSBmb3IgKi8KKyAgICAiYXNjaWkiLCAgICAgICAg IFRDX1VTQVNDSUksIDAsCS8qIFNFVCBUUkFOU0ZFUiBDSEFSQUNURVItU0VUICovCisjaWZkZWYg Q1lSSUxMSUMKKyAgICAiY3lyaWxsaWMtaXNvIiwgIFRDX0NZUklMTCwgIDAsCisjZW5kaWYgLyog Q1lSSUxMSUMgKi8KKyNpZmRlZiBHUkVFSworICAgICJlbG90OTI4LWdyZWVrIiwgVENfR1JFRUss ICAgQ01fSU5WLAorI2VuZGlmIC8qIEdSRUVLICovCisjaWZkZWYgS0FOSkkKKyAgICAiZXVjLWpw IiwgICAgICAgIFRDX0pFVUMsICAgIDAsCisjZW5kaWYgLyogS0FOSkkgKi8KKyNpZmRlZiBHUkVF SworICAgICJncmVlay1pc28iLCAgICAgVENfR1JFRUssICAgMCwKKyNlbmRpZiAvKiBHUkVFSyAq LworI2lmZGVmIEhFQlJFVworICAgICJoZWJyZXctaXNvIiwgICAgVENfSEVCUkVXLCAgMCwKKyNl bmRpZiAvKiBIRUJSRVcgKi8KKworI2lmZGVmIFVOSUNPREUKKyAgICAiaXNvLTEwNjQ2LXVjcy0y IiwgVENfVUNTMiwgICAgQ01fSU5WLCAvKiBJU08gMTA2NDYgLyBVbmljb2RlIFVDUy0yICovCisj ZW5kaWYgLyogVU5JQ09ERSAqLworICAgICJpc28tODg1OS0xIiwgICAgVENfMUxBVElOLCAgQ01f SU5WLCAvKiBJU08gTGF0aW4gQWxwaGFiZXQgMSAqLworICAgICJpc28tODg1OS0xNSIsICAgVENf OUxBVElOLCAgQ01fSU5WLCAvKiBJU08gTGF0aW4gQWxwaGFiZXQgOSAoeWVzKSAqLworICAgICJp c28tODg1OS0yIiwgICAgVENfMkxBVElOLCAgQ01fSU5WLCAvKiBJU08gTGF0aW4gQWxwaGFiZXQg MiAqLworI2lmZGVmIENZUklMTElDCisgICAgImlzby04ODU5LTUiLCAgICBUQ19DWVJJTEwsICBD TV9JTlYsIC8qIElTTyBMYXRpbi9DeXJpbGxpYyBBbHBoYWJldCAqLworI2VuZGlmIC8qIENZUklM TElDICovCisjaWZkZWYgR1JFRUsKKyAgICAiaXNvLTg4NTktNyIsICAgIFRDX0dSRUVLLCAgIENN X0lOViwgLyogSVNPIDg4NTktNyBMYXRpbi9HcmVlayAqLworI2VuZGlmIC8qIEdSRUVLICovCisj aWZkZWYgSEVCUkVXCisgICAgImlzby04ODU5LTgiLCAgICBUQ19IRUJSRVcsICBDTV9JTlYsIC8q IElTTyBMYXRpbi9IZWJyZXcgKi8KKyNlbmRpZiAvKiBIRUJSRVcgKi8KKworI2lmZGVmIEtBTkpJ CisgICAgImphcGFuZXNlLWV1YyIsICBUQ19KRVVDLCAgICBDTV9JTlYsCisjZW5kaWYgLyogS0FO SkkgKi8KKyAgICAibCIsICAgICAgICAgICAgIFRDXzFMQVRJTiwgIENNX0FCUnxDTV9JTlYsCisg ICAgImxhIiwgICAgICAgICAgICBUQ18xTEFUSU4sICBDTV9BQlJ8Q01fSU5WLAorICAgICJsYXQi LCAgICAgICAgICAgVENfMUxBVElOLCAgQ01fQUJSfENNX0lOViwKKyAgICAibGF0aSIsICAgICAg ICAgIFRDXzFMQVRJTiwgIENNX0FCUnxDTV9JTlYsCisgICAgImxhdGluIiwgICAgICAgICBUQ18x TEFUSU4sICBDTV9BQlJ8Q01fSU5WLAorICAgICJsYXRpbjEtaXNvIiwgICAgVENfMUxBVElOLCAg MCwKKyNpZmRlZiBMQVRJTjIKKyAgICAibGF0aW4yLWlzbyIsICAgIFRDXzJMQVRJTiwgIDAsCisj ZW5kaWYgLyogTEFUSU4yICovCisgICAgImxhdGluOS1pc28iLCAgICBUQ185TEFUSU4sICAwLAor ICAgICJ0cmFuc3BhcmVudCIsICAgVENfVFJBTlNQLCAgMCwKKyNpZmRlZiBVTklDT0RFCisgICAg InVjczIiLCAgICAgICAgICBUQ19VQ1MyLCAgICAwLAorI2VuZGlmIC8qIFVOSUNPREUgKi8KKyAg ICAidXMtYXNjaWkiLCAgICAgIFRDX1VTQVNDSUksIENNX0lOViwKKyAgICAidXNhc2NpaSIsICAg ICAgIFRDX1VTQVNDSUksIENNX0lOViwKKyNpZmRlZiBVTklDT0RFCisgICAgInV0Zi04IiwgICAg ICAgICBUQ19VVEY4LCAgICBDTV9JTlYsCisgICAgInV0ZjgiLCAgICAgICAgICBUQ19VVEY4LCAg ICAwLAorI2VuZGlmIC8qIFVOSUNPREUgKi8KKyAgICAiIiwgMCwgMAorfTsKK2ludCBudGNzID0g KHNpemVvZih0Y3N0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKSAtIDE7CisKKy8qIEZpbGUg Y2hhcmFjdGVyIHNldCBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUsIGluZGV4ZWQgYnkgY2hhcmFjdGVy IHNldCBjb2RlLCAqLworLyogYXMgZGVmaW5lZCBpbiBja3V4bGEuaC4gIFRoaXMgdGFibGUgbXVz dCBiZSBpbiBvcmRlciBvZiBmaWxlIGNoYXJhY3RlciAqLworLyogc2V0IG51bWJlciEgKi8KKwor c3RydWN0IGNzaW5mbyBmY3NpbmZvW10gPSB7IC8qIEZpbGUgY2hhcmFjdGVyIHNldCBpbmZvcm1h dGlvbi4uLiAqLworICAvKiBEZXNjcmlwdGl2ZSBOYW1lICAgICAgICAgICAgICBTaXplICBEZXNp Z25hdG9yICovCisgICJVUyBBU0NJSSIsICAgICAgICAgICAgICAgICAgICAgMTI4LCBGQ19VU0FT Q0lJLCBOVUxMLCBBTF9ST01BTiwgImFzY2lpIiwKKyAgIkJyaXRpc2gvVUsgSVNPLTY0NiIsICAg ICAgICAgICAxMjgsIEZDX1VLQVNDSUksIE5VTEwsIEFMX1JPTUFOLCAiYnJpdGlzaCIsCisgICJE dXRjaCBJU08tNjQ2IiwgICAgICAgICAgICAgICAgMTI4LCBGQ19EVUFTQ0lJLCBOVUxMLCBBTF9S T01BTiwgImR1dGNoIiwKKyAgIkZpbm5pc2ggSVNPLTY0NiIsICAgICAgICAgICAgICAxMjgsIEZD X0ZJQVNDSUksIE5VTEwsIEFMX1JPTUFOLCAiZmlubmlzaCIsCisgICJGcmVuY2ggSVNPLTY0NiIs ICAgICAgICAgICAgICAgMTI4LCBGQ19GUkFTQ0lJLCBOVUxMLCBBTF9ST01BTiwgImZyZW5jaCIs CisgICJDYW5hZGlhbi1GcmVuY2ggTlJDIiwgMTI4LCBGQ19GQ0FTQ0lJLCBOVUxMLCBBTF9ST01B TiwgImNhbmFkaWFuLWZyZW5jaCIsCisgICJHZXJtYW4gSVNPLTY0NiIsICAgICAgICAgICAgICAg MTI4LCBGQ19HRUFTQ0lJLCBOVUxMLCBBTF9ST01BTiwgImdlcm1hbiIsCisgICJIdW5nYXJpYW4g SVNPLTY0NiIsICAgICAgICAgICAgMTI4LCBGQ19IVUFTQ0lJLCBOVUxMLCBBTF9ST01BTiwgImh1 bmdhcmlhbiIsCisgICJJdGFsaWFuIElTTy02NDYiLCAgICAgICAgICAgICAgMTI4LCBGQ19JVEFT Q0lJLCBOVUxMLCBBTF9ST01BTiwgIml0YWxpYW4iLAorICAiTm9yd2VnaWFuL0RhbmlzaCBJU08t NjQ2IiwxMjgsRkNfTk9BU0NJSSxOVUxMLEFMX1JPTUFOLCJub3J3ZWdpYW4vZGFuaXNoIiwKKyAg IlBvcnR1Z3Vlc2UgSVNPLTY0NiIsICAgICAgICAgICAxMjgsIEZDX1BPQVNDSUksIE5VTEwsIEFM X1JPTUFOLCJwb3J0dWd1ZXNlIiwKKyAgIlNwYW5pc2ggSVNPLTY0NiIsICAgICAgICAgICAgICAx MjgsIEZDX1NQQVNDSUksIE5VTEwsIEFMX1JPTUFOLCAic3BhbmlzaCIsCisgICJTd2VkaXNoIElT Ty02NDYiLCAgICAgICAgICAgICAgMTI4LCBGQ19TV0FTQ0lJLCBOVUxMLCBBTF9ST01BTiwgInN3 ZWRpc2giLAorICAiU3dpc3MgTlJDIiwgICAgICAgICAgICAgICAgICAgIDEyOCwgRkNfQ0hBU0NJ SSwgTlVMTCwgQUxfUk9NQU4sICJzd2lzcyIsCisgICJJU08gODg1OS0xIExhdGluLTEiLCAgICAg ICAgICAgMjU2LCBGQ18xTEFUSU4sICBOVUxMLCBBTF9ST01BTiwibGF0aW4xLWlzbyIsCisgICJJ U08gODg1OS0yIExhdGluLTIiLCAgICAgICAgICAgMjU2LCBGQ18yTEFUSU4sICBOVUxMLCBBTF9S T01BTiwibGF0aW4yLWlzbyIsCisgICJERUMgTXVsdGluYXRpb25hbCIsIDI1NiwgIEZDX0RFQ01D UywgTlVMTCxBTF9ST01BTiwiZGVjLW11bHRpbmF0aW9uYWwiLAorICAiTmVYVCBNdWx0aW5hdGlv bmFsIiwgMjU2LCBGQ19ORVhULCAgIE5VTEwsQUxfUk9NQU4sIm5leHQtbXVsdGluYXRpb25hbCIs CisgICJQQyBDb2RlIFBhZ2UgNDM3IiwgICAgICAgICAgICAyNTYsIEZDX0NQNDM3LCAgIE5VTEws IEFMX1JPTUFOLCJjcDQzNyIsCisgICJQQyBDb2RlIFBhZ2UgODUwIiwgICAgICAgICAgICAyNTYs IEZDX0NQODUwLCAgIE5VTEwsIEFMX1JPTUFOLCJjcDg1MCIsCisgICJQQyBDb2RlIFBhZ2UgODUy IiwgICAgICAgICAgICAyNTYsIEZDX0NQODUyLCAgIE5VTEwsIEFMX1JPTUFOLCJjcDg1MiIsCisg ICJBcHBsZSBNYWNpbnRvc2ggTGF0aW4iLCAyNTYsIEZDX0FQUFFELCAgIE5VTEwsIEFMX1JPTUFO LCJtYWNpbnRvc2gtbGF0aW4iLAorICAiRGF0YSBHZW5lcmFsIEludGVybmF0aW9uYWwiLDI1NixG Q19ER01DUyxOVUxMLEFMX1JPTUFOLCJkZy1pbnRlcm5hdGlvbmFsIiwKKyAgIkhld2xldHQgUGFj a2FyZCBSb21hbjgiLCAgICAyNTYsIEZDX0hQUjgsICAgIE5VTEwsIEFMX1JPTUFOLCAiaHAtcm9t YW44IiwKKyAgIklTTyA4ODU5LTUgTGF0aW4vQ3lyaWxsaWMiLCAyNTYsIEZDX0NZUklMTCwgIE5V TEwsIEFMX0NZUklMLCJjeXJpbGxpYy1pc28iLAorICAiQ1A4NjYgQ3lyaWxsaWMiLAkgICAgICAg MjU2LCBGQ19DUDg2NiwgICBOVUxMLCBBTF9DWVJJTCwiY3A4NjYiLAorICAiU2hvcnQgS09JIiwg ICAgICAgICAgICAgICAgIDEyOCwgRkNfS09JNywgICAgTlVMTCwgQUxfQ1lSSUwsInNob3J0LWtv aSIsCisgICJPbGQgS09JLTggQ3lyaWxsaWMiLCAgICAgICAgMjU2LCBGQ19LT0k4LCAgICBOVUxM LCBBTF9DWVJJTCwia29pOC1jeXJpbGxpYyIsCisgICJKYXBhbmVzZSBKSVM3IiwJICAxNjM4NCwg RkNfSklTNywgICAgTlVMTCwgQUxfSkFQQU4sICJqaXM3LWthbmppIiwKKyAgIkphcGFuZXNlIFNo aWZ0IEpJUyIsCSAgMTYzODQsIEZDX1NISklTLCAgIE5VTEwsIEFMX0pBUEFOLCAic2hpZnQtamlz LWthbmppIiwKKyAgIkphcGFuZXNlIEVVQyIsCSAgMTYzODQsIEZDX0pFVUMsICAgIE5VTEwsIEFM X0pBUEFOLCAiZXVjLWpwIiwKKyAgIkphcGFuZXNlIERFQyBLYW5qaSIsCSAgMTYzODQsIEZDX0pE RUMsICAgIE5VTEwsIEFMX0pBUEFOLCAiZGVjLWthbmppIiwKKyAgIkhlYnJldy03IERFQyIsICAg ICAgICAgICAxMjgsIEZDX0hFNywgICAgIE5VTEwsIEFMX0hFQlJFVywgImhlYnJldy03IiwKKyAg IklTTyA4ODU5LTggTGF0aW4vSGVicmV3IiwyNTYsIEZDX0hFQlJFVywgIE5VTEwsIEFMX0hFQlJF VywgImhlYnJldy1pc28iLAorICAiQ1A4NjIgSGVicmV3IiwgICAgICAgICAgIDI1NiwgRkNfQ1A4 NjIsICAgTlVMTCwgQUxfSEVCUkVXLCAiY3A4NjItaGVicmV3IiwKKyAgIkVMT1QgOTI3IEdyZWVr IiwgICAgICAgICAxMjgsIEZDX0VMT1QsICAgIE5VTEwsIEFMX0dSRUVLLCAiZWxvdDkyNy1ncmVl ayIsCisgICJJU08gODg1OS03IExhdGluL0dyZWVrIiwgMjU2LCBGQ19HUkVFSywgICBOVUxMLCBB TF9HUkVFSywgImdyZWVrLWlzbyIsCisgICJDUDg2OSBHcmVlayIsICAgICAgICAgICAgMjU2LCBG Q19DUDg2OSwgICBOVUxMLCBBTF9HUkVFSywgImNwODY5LWdyZWVrIiwKKyAgIklTTyA4ODU5LTE1 IExhdGluLTkiLCAgICAyNTYsIEZDXzlMQVRJTiwgIE5VTEwsIEFMX1JPTUFOLCAibGF0aW45LWlz byIsCisgICJQQyBDb2RlIFBhZ2UgODU4IiwgICAgICAgMjU2LCBGQ19DUDg1MCwgICBOVUxMLCBB TF9ST01BTiwgImNwODU4IiwKKyAgIlBDIENvZGUgUGFnZSA4NTUiLCAgICAgICAyNTYsIEZDX0NQ ODU1LCAgIE5VTEwsIEFMX0NZUklMLCAiY3A4NTUtY3lyaWxsaWMiLAorICAiV2luZG93cyBDb2Rl IFBhZ2UgMTI1MSIsIDI1NiwgRkNfQ1AxMjUxLCAgTlVMTCwgQUxfQ1lSSUwsICJjcDEyNTEtY3ly aWxsaWMiLAorICAiQnVsZ2FyaWFuIFBDIENvZGUgUGFnZSIsIDI1NiwgRkNfQlVMR0FSLCAgTlVM TCwgQUxfQ1lSSUwsICJidWxnYXJpYS1wYyIsCisgICJXaW5kb3dzIENvZGUgUGFnZSAxMjUwIiwg MjU2LCBGQ19DUDEyNTAsICBOVUxMLCBBTF9ST01BTiwgImNwMTI1MCIsCisgICJQb2xpc2ggTWF6 b3ZpYSBQQyBDb2RlIFBhZ2UiLCAyNTYsIEZDX01BWk9WSUEsIE5VTEwsIEFMX1JPTUFOLCAibWF6 b3ZpYS1wYyIsCisgICJJU08gMTA2NDYgLyBVbmljb2RlIFVDUy0yIiwgNjQwMDAsIEZDX1VDUzIs IE5VTEwsIEFMX1VOSVYsICJ1Y3MyIiwKKyAgIklTTyAxMDY0NiAvIFVuaWNvZGUgVVRGLTgiLCA2 NDAwMCwgRkNfVUNTMiwgTlVMTCwgQUxfVU5JViwgInV0ZjgiLAorICAiS09JOC1SIFJ1c3NpYW4r Qm94ZHJhd2luZyIsMjU2LCAgRkNfS09JOFIsIE5VTEwsIEFMX0NZUklMLCJrb2k4ciIsCisgICJL T0k4LVUgVWtyYWluaWFuK0JveGRyYXdpbmciLDI1NixGQ19LT0k4VSwgTlVMTCwgQUxfQ1lSSUws ImtvaTh1IiwKKyAgIldpbmRvd3MgQ29kZSBQYWdlIDEyNTIiLCAyNTYsIEZDX0NQMTI1MiwgIE5V TEwsIEFMX1JPTUFOLCAiY3AxMjUyIiwKKyAgIiIsMCwwLE5VTEwsMCxOVUxMCit9OworCisvKiBM b2NhbCBmaWxlIGNoYXJhY3RlciBzZXRzICovCisvKiBJbmNsdWRlcyA3LWJpdCBOYXRpb25hbCBS ZXBsYWNlbWVudCBDaGFyYWN0ZXIgU2V0cyBvZiBJU08gNjQ2ICovCisvKiBQbHVzIElTTyBMYXRp bi0xLCBERUMgTXVsdGluYXRpb25hbCBDaGFyYWN0ZXIgU2V0IChNQ1MpLCBOZVhUIGNoYXIgc2V0 LCAqLworLyogVmFyaW91cyBQQyBhbmQgV2luZG93cyBjb2RlIHBhZ2VzLCBldGMuICovCisvKiBB cyBvZiBDLUtlcm1pdCA5LjAgTUlNRSBuYW1lcyBhcmUgaW5jbHVkZWQgYXMgaW52aXNpYmxlIHN5 bm9teW1zIGZvciAqLworLyogdGhvc2UgY2hhcmFjdGVyIHNldHMgdGhhdCBoYXZlIE1JTUUgbmFt ZXMuICovCisKK3N0cnVjdCBrZXl0YWIgZmNzdGFiW10gPSB7IC8qIEtleXdvcmQgdGFibGUgZm9y ICdzZXQgZmlsZSBjaGFyYWN0ZXItc2V0JyAqLworLyoKKyAgSU1QT1JUQU5UOiBUaGlzIHRhYmxl IGlzIHJlcGxpY2F0ZWQgYmVsb3cgYXMgdHRjc3RhYiAodGVybWluYWwgY2hhcmFjdGVyCisgIHNl dCB0YWJsZSkuICBUaGUgb25seSBkaWZmZXJlbmNlcyBhcmUgdGhlIGFkZGl0aW9uIG9mIFRSQU5T UEFSRU5UCisgIGFuZCB0aGUgcmVtb3ZhbCBvZiB0aGUgS2Fuamkgc2V0cywgd2hpY2ggYXJlIG5v dCBzdXBwb3J0ZWQgZm9yIHRlcm1pbmFsCisgIGVtdWxhdGlvbi4gIElmIHlvdSBtYWtlIGNoYW5n ZXMgdG8gdGhpcyB0YWJsZSwgYWxzbyBjaGFuZ2UgdHRjc3RhYi4KKyovCisKKy8qIEtleXdvcmQg ICAgICAgICAgICAgICBWYWx1ZSAgICAgICBGbGFncyAqLworICAgICJhcHBsZS1xdWlja2RyYXci LCAgICBGQ19BUFBRRCwgICBDTV9JTlYsIC8qIEFwcGxlIFF1aWNrZHJhdyAqLworICAgICJhc2Np aSIsICAgICAgICAgICAgICBGQ19VU0FTQ0lJLCAwLCAvKiBBU0NJSSAqLworICAgICJicml0aXNo IiwgICAgICAgICAgICBGQ19VS0FTQ0lJLCAwLCAvKiBCcml0aXNoIE5SQyAqLworICAgICJidWxn YXJpYS1wYyIsICAgICAgICBGQ19CVUxHQVIsICAwLCAvKiBCdWxnYXJpYW4gUEMgQ29kZSBQYWdl ICovCisgICAgImNhbmFkaWFuLWZyZW5jaCIsICAgIEZDX0ZDQVNDSUksIDAsIC8qIEZyZW5jaCBD YW5hZGlhbiBOUkMgKi8KKyNpZmRlZiBMQVRJTjIKKyAgICAiY3AxMjUwIiwgICAgICAgICAgICAg RkNfQ1AxMjUwLCAgMCwgLyogV2luZG93cyBDUCAxMjUwICovCisjZW5kaWYgLyogTEFUSU4yICov CisjaWZkZWYgQ1lSSUxMSUMKKyAgICAiY3AxMjUxLWN5cmlsbGljIiwgICAgRkNfQ1AxMjUxLCAg MCwgLyogV2luZG93cyBDUCAxMjUxICovCisjZW5kaWYgLyogQ1lSSUxMSUMgKi8KKyAgICAiY3Ax MjUyIiwgICAgICAgICAgICAgRkNfQ1AxMjUyLCAgMCwgLyogV2luZG93cyBDUCAxMjUyICovCisg ICAgImNwNDM3IiwgICAgICAgICAgICAgIEZDX0NQNDM3LCAgIDAsIC8qIFBDIENQNDM3ICovCisg ICAgImNwODUwIiwgICAgICAgICAgICAgIEZDX0NQODUwLCAgIDAsIC8qIFBDIENQODUwICovCisj aWZkZWYgTEFUSU4yCisgICAgImNwODUyIiwgICAgICAgICAgICAgIEZDX0NQODUyLCAgIDAsIC8q IFBDIENQODUyICovCisjZW5kaWYgLyogTEFUSU4yICovCisjaWZkZWYgQ1lSSUxMSUMKKyAgICAi Y3A4NTUtY3lyaWxsaWMiLCAgICAgRkNfQ1A4NTUsICAgMCwgLyogUEMgQ1A4NTUgKi8KKyNlbmRp ZiAvKiBDWVJJTExJQyAqLworICAgICJjcDg1OCIsICAgICAgICAgICAgICBGQ19DUDg1OCwgICAw LCAvKiBQQyBDUDg1OCAqLworI2lmZGVmIEhFQlJFVworICAgICJjcDg2Mi1oZWJyZXciLCAgICAg ICBGQ19DUDg2MiwgICAwLCAvKiBQQyBDUDg2MiAqLworI2VuZGlmIC8qIEhFQlJFVyAqLworI2lm ZGVmIENZUklMTElDCisgICAgImNwODY2LWN5cmlsbGljIiwgICAgIEZDX0NQODY2LCAgIDAsIC8q IENQODY2IEN5cmlsbGljICovCisjZW5kaWYgLyogQ1lSSUxMSUMgKi8KKyNpZmRlZiBHUkVFSwor ICAgICJjcDg2OS1ncmVlayIsICAgICAgICBGQ19DUDg2OSwgICAwLCAvKiBDUDg2OSBHcmVlayAq LworI2VuZGlmIC8qIEdSRUVLICovCisjaWZkZWYgQ1lSSUxMSUMKKyAgICAiY3lyaWxsaWMtaXNv IiwgICAgICAgRkNfQ1lSSUxMLCAgMCwgLyogSVNPIExhdGluL0N5cmlsbGljIEFscGhhYmV0ICov CisjZW5kaWYgLyogQ1lSSUxMSUMgKi8KKyAgICAiZGFuaXNoIiwgICAgICAgICAgICAgRkNfTk9B U0NJSSwgMCwgLyogTm9yd2VnaWFuIGFuZCBEYW5pc2ggTlJDICovCisjaWZkZWYgS0FOSkkKKyAg ICAiZGVjLWthbmppIiwgICAgICAgICAgRkNfSkRFQywgICAgMCwgLyogSmFwYW5lc2UgREVDIEth bmppICovCisjZW5kaWYgLyogS0FOSkkgKi8KKyAgICAiZGVjLW1jcyIsICAgICAgICAgICAgRkNf REVDTUNTLCAgQ01fSU5WLCAvKiBERUMgbXVsdGluYXRpb25hbCBjaGFyIHNldCAqLworICAgICJk ZWMtbXVsdGluYXRpb25hbCIsICBGQ19ERUNNQ1MsICAwLCAvKiBERUMgbXVsdGluYXRpb25hbCBj aGFyYWN0ZXIgc2V0ICovCisgICAgImRnLWludGVybmF0aW9uYWwiLCAgIEZDX0RHTUNTLCAgIDAs IC8qIERhdGEgR2VuZXJhbCBtdWx0aW5hdGlvbmFsICovCisgICAgImR1dGNoIiwgICAgICAgICAg ICAgIEZDX0RVQVNDSUksIDAsIC8qIER1dGNoIE5SQyAqLworI2lmZGVmIEdSRUVLCisgICAgImVs b3Q5MjctZ3JlZWsiLCAgICAgIEZDX0VMT1QsICAgIDAsIC8qIEVMT1QgOTI3IEdyZWVrICovCisg ICAgImVsb3Q5MjgtZ3JlZWsiLCAgICAgIEZDX0dSRUVLLCAgIDAsIC8qIFNhbWUgYXMgSVNPIDg4 NTktNyBMYXRpbi9HcmVlayAqLworI2VuZGlmIC8qIEdSRUVLICovCisjaWZkZWYgS0FOSkkKKyAg ICAiZXVjLWpwIiwgICAgICAgICAgICAgRkNfSkVVQywgICAgMCwgLyogSmFwYW5lc2UgRVVDICov CisjZW5kaWYgLyogS0FOSkkgKi8KKyAgICAiZmlubmlzaCIsICAgICAgICAgICAgRkNfRklBU0NJ SSwgMCwgLyogRmlubmlzaCBOUkMgKi8KKyAgICAiZnJlbmNoIiwgICAgICAgICAgICAgRkNfRlJB U0NJSSwgMCwgLyogRnJlbmNoIE5SQyAqLworICAgICJmci1jYW5hZGlhbiIsICAgICAgICBGQ19G Q0FTQ0lJLCBDTV9JTlYsIC8qIEZyZW5jaCBDYW5hZGlhbiBOUkMgKi8KKyAgICAiZ2VybWFuIiwg ICAgICAgICAgICAgRkNfR0VBU0NJSSwgMCwgLyogR2VybWFuIE5SQyAqLworI2lmZGVmIEdSRUVL CisgICAgImdyZWVrLWlzbyIsICAgICAgICAgIEZDX0dSRUVLLCAgIDAsIC8qIElTTyA4ODU5LTcg TGF0aW4vR3JlZWsgKi8KKyNlbmRpZiAvKiBHUkVFSyAqLworI2lmZGVmIEhFQlJFVworICAgICJo ZSIsICAgICAgICAgICAgICAgICBGQ19IRUJSRVcsICBDTV9BQlJ8Q01fSU5WLAorICAgICJoZWIi LCAgICAgICAgICAgICAgICBGQ19IRUJSRVcsICBDTV9BQlJ8Q01fSU5WLAorICAgICJoZWJyIiwg ICAgICAgICAgICAgICBGQ19IRUJSRVcsICBDTV9BQlJ8Q01fSU5WLAorICAgICJoZWJyZSIsICAg ICAgICAgICAgICBGQ19IRUJSRVcsICBDTV9BQlJ8Q01fSU5WLAorICAgICJoZWJyZXciLCAgICAg ICAgICAgICBGQ19IRUJSRVcsICBDTV9BQlJ8Q01fSU5WLAorICAgICJoZWJyZXctNyIsICAgICAg ICAgICBGQ19IRTcsICAgICAwLCAvKiBERUMgNy1CaXQgSGVicmV3ICovCisgICAgImhlYnJldy1p c28iLCAgICAgICAgIEZDX0hFQlJFVywgIDAsIC8qIElTTyBMYXRpbi9IZWJyZXcgKi8KKyNlbmRp ZiAvKiBIRUJSRVcgKi8KKyAgICAiaHAtcm9tYW44IiwgICAgICAgICAgRkNfSFBSOCwgICAgMCwg LyogSGV3bGV0dCBQYWNrYXJkIFJvbWFuOCAqLworICAgICJodW5nYXJpYW4iLCAgICAgICAgICBG Q19IVUFTQ0lJLCAwLCAvKiBIdW5nYXJpYW4gTlJDICovCisKKyAgICAiaWJtNDM3IiwgICAgICAg ICAgICAgRkNfQ1A0MzcsICAgQ01fSU5WLCAvKiBQQyBDUDQzNyAqLworICAgICJpYm04NTAiLCAg ICAgICAgICAgICBGQ19DUDg1MCwgICBDTV9JTlYsIC8qIFBDIENQODUwIChub3QgaW4gTUlNRSkg Ki8KKyNpZmRlZiBMQVRJTjIKKyAgICAiaWJtODUyIiwgICAgICAgICAgICAgRkNfQ1A4NTIsICAg Q01fSU5WLCAvKiBQQyBDUDg1MiAqLworI2VuZGlmIC8qIExBVElOMiAqLworI2lmZGVmIENZUklM TElDCisgICAgImlibTg1NSIsICAgICAgICAgICAgIEZDX0NQODU1LCAgIENNX0lOViwgLyogUEMg Q1A4NTUgKi8KKyNlbmRpZiAvKiBDWVJJTExJQyAqLworICAgICJpYm04NTgiLCAgICAgICAgICAg ICBGQ19DUDg1OCwgICBDTV9JTlYsIC8qIFBDIENQODU4IChub3QgaW4gTUlNRSkgKi8KKyNpZmRl ZiBIRUJSRVcKKyAgICAiaWJtODYyIiwgICAgICAgICAgICAgRkNfQ1A4NjIsICAgQ01fSU5WLCAv KiBQQyBDUDg2MiAobm90IGluIE1JTUUpICovCisjZW5kaWYgLyogSEVCUkVXICovCisjaWZkZWYg Q1lSSUxMSUMKKyAgICAiaWJtODY2IiwgICAgICAgICAgICAgRkNfQ1A4NjYsICAgQ01fSU5WLCAv KiBDUDg2NiBDeXJpbGxpYyAqLworI2VuZGlmIC8qIENZUklMTElDICovCisjaWZkZWYgR1JFRUsK KyAgICAiaWJtODY5IiwgICAgICAgICAgICAgRkNfQ1A4NjksICAgQ01fSU5WLCAvKiBDUDg2OSBH cmVlayAqLworI2VuZGlmIC8qIEdSRUVLICovCisKKyNpZmRlZiBVTklDT0RFCisgICAgImlzby0x MDY0Ni11Y3MtMiIsICAgIEZDX1VDUzIsICAgIENNX0lOViwgLyogSVNPIDEwNjQ2IC8gVW5pY29k ZSBVQ1MtMiAqLworI2VuZGlmIC8qIFVOSUNPREUgKi8KKyAgICAiaXNvLTg4NTktMSIsICAgICAg ICAgRkNfMUxBVElOLCAgQ01fSU5WLCAvKiBJU08gTGF0aW4gQWxwaGFiZXQgMSAqLworICAgICJp c28tODg1OS0xNSIsICAgICAgICBGQ185TEFUSU4sICBDTV9JTlYsIC8qIElTTyBMYXRpbiBBbHBo YWJldCA5ICh5ZXMpICovCisgICAgImlzby04ODU5LTIiLCAgICAgICAgIEZDXzJMQVRJTiwgIENN X0lOViwgLyogSVNPIExhdGluIEFscGhhYmV0IDIgKi8KKyNpZmRlZiBDWVJJTExJQworICAgICJp c28tODg1OS01IiwgICAgICAgICBGQ19DWVJJTEwsICBDTV9JTlYsIC8qIElTTyBMYXRpbi9DeXJp bGxpYyBBbHBoYWJldCAqLworI2VuZGlmIC8qIENZUklMTElDICovCisjaWZkZWYgR1JFRUsKKyAg ICAiaXNvLTg4NTktNyIsICAgICAgICAgRkNfR1JFRUssICAgQ01fSU5WLCAvKiBJU08gODg1OS03 IExhdGluL0dyZWVrICovCisjZW5kaWYgLyogR1JFRUsgKi8KKyNpZmRlZiBIRUJSRVcKKyAgICAi aXNvLTg4NTktOCIsICAgICAgICAgRkNfSEVCUkVXLCAgQ01fSU5WLCAvKiBJU08gTGF0aW4vSGVi cmV3ICovCisjZW5kaWYgLyogSEVCUkVXICovCisjaWZkZWYgS0FOSkkKKyAgICAiaXNvMjAyMmpw LWthbmppIiwgICAgRkNfSklTNywgICAgQ01fSU5WLCAvKiBTeW5vbnltIGZvciBKSVMtNyAqLwor I2VuZGlmIC8qIEtBTkpJICovCisKKyAgICAiaXNvNjQ2LWdiIiwgICAgICAgICAgRkNfVUtBU0NJ SSwgQ01fSU5WLCAvKiBCcml0aXNoIE5SQyAqLworICAgICJpc282NDYtY2EiLCAgICAgICAgICBG Q19GQ0FTQ0lJLCBDTV9JTlYsIC8qIEZyZW5jaCBDYW5hZGlhbiBOUkMgKi8KKyAgICAiaXNvNjQ2 LWRlIiwgICAgICAgICAgRkNfR0VBU0NJSSwgQ01fSU5WLCAvKiBHZXJtYW4gTlJDICovCisgICAg ImlzbzY0Ni1kayIsICAgICAgICAgIEZDX05PQVNDSUksIENNX0lOViwgLyogTm9yd2VnaWFuIGFu ZCBEYW5pc2ggTlJDICovCisgICAgImlzbzY0Ni1lcyIsICAgICAgICAgIEZDX1NQQVNDSUksIENN X0lOViwgLyogU3BhbmlzaCBOUkMgKi8KKyAgICAiaXNvNjQ2LWZpIiwgICAgICAgICAgRkNfRklB U0NJSSwgQ01fSU5WLCAvKiBGaW5uaXNoIE5SQyAqLworICAgICJpc282NDYtZnIiLCAgICAgICAg ICBGQ19GUkFTQ0lJLCBDTV9JTlYsIC8qIEZyZW5jaCBOUkMgKi8KKyAgICAiaXNvNjQ2LWh1Iiwg ICAgICAgICAgRkNfSFVBU0NJSSwgQ01fSU5WLCAvKiBIdW5nYXJpYW4gTlJDICovCisgICAgImlz bzY0Ni1pdCIsICAgICAgICAgIEZDX0lUQVNDSUksIENNX0lOViwgLyogSXRhbGlhbiBOUkMgKi8K KyAgICAiaXNvNjQ2LW5vIiwgICAgICAgICAgRkNfTk9BU0NJSSwgQ01fSU5WLCAvKiBOb3J3ZWdp YW4gYW5kIERhbmlzaCBOUkMgKi8KKyAgICAiaXNvNjQ2LXBvIiwgICAgICAgICAgRkNfUE9BU0NJ SSwgQ01fSU5WLCAvKiBQb3J0dWd1ZXNlIE5SQyAqLworICAgICJpc282NDYtc2UiLCAgICAgICAg ICBGQ19TV0FTQ0lJLCBDTV9JTlYsIC8qIFN3ZWRpc2ggTlJDICovCisKKyAgICAiaXRhbGlhbiIs ICAgICAgICAgICAgRkNfSVRBU0NJSSwgQ01fSU5WLCAvKiBJdGFsaWFuIE5SQyAqLworI2lmZGVm IEtBTkpJCisgICAgImphcGFuZXNlLWV1YyIsICAgICAgIEZDX0pFVUMsICAgIENNX0lOViwgLyog SmFwYW5lc2UgRVVDICovCisgICAgImppczcta2FuamkiLCAgICAgICAgIEZDX0pJUzcsICAgIDAs IC8qIEphcGFuZXNlIEpJUzcgN2JpdCBjb2RlICovCisjZW5kaWYgLyogS0FOSkkgKi8KKyNpZmRl ZiBDWVJJTExJQworICAgICJrIiwgICAgICAgICAgICAgICAgICBGQ19LT0k4LCAgICBDTV9BQlJ8 Q01fSU5WLAorICAgICJrbyIsICAgICAgICAgICAgICAgICBGQ19LT0k4LCAgICBDTV9BQlJ8Q01f SU5WLAorICAgICJrb2kiLCAgICAgICAgICAgICAgICBGQ19LT0k4LCAgICBDTV9BQlJ8Q01fSU5W LAorICAgICJrb2k3IiwgICAgICAgICAgICAgICBGQ19LT0k3LCAgICAwLCAvKiBTaG9ydCBLT0kg Q3lyaWxsaWMgKi8KKyAgICAia29pOCIsICAgICAgICAgICAgICAgRkNfS09JOCwgICAgMCwgLyog T2xkIEtPSS04IEN5cmlsbGljICovCisgICAgImtvaTgtZSIsICAgICAgICAgICAgIEZDX0tPSTgs ICAgIENNX0lOViwgLyogT2xkIEtPSS04IEN5cmlsbGljICovCisgICAgImtvaTgtY3lyaWxsaWMi LCAgICAgIEZDX0tPSTgsICAgIENNX0lOViwKKyAgICAia29pOC1yIiwgICAgICAgICAgICAgRkNf S09JOFIsICAgQ01fSU5WLCAvKiBLT0k4LVIgUkZDMTQ4OSAqLworICAgICJrb2k4LXUiLCAgICAg ICAgICAgICBGQ19LT0k4VSwgICBDTV9JTlYsIC8qIEtPSTgtVSBSRkMyMzE5ICovCisgICAgImtv aThyIiwgICAgICAgICAgICAgIEZDX0tPSThSLCAgIDAsIC8qIEtPSTgtUiBSRkMxNDg5ICovCisg ICAgImtvaTh1IiwgICAgICAgICAgICAgIEZDX0tPSThVLCAgIDAsIC8qIEtPSTgtVSBSRkMyMzE5 ICovCisjZW5kaWYgLyogQ1lSSUxMSUMgKi8KKyAgICAibCIsICAgICAgICAgICAgICAgICAgRkNf MUxBVElOLCAgQ01fQUJSfENNX0lOViwKKyAgICAibGEiLCAgICAgICAgICAgICAgICAgRkNfMUxB VElOLCAgQ01fQUJSfENNX0lOViwKKyAgICAibGF0IiwgICAgICAgICAgICAgICAgRkNfMUxBVElO LCAgQ01fQUJSfENNX0lOViwKKyAgICAibGF0aSIsICAgICAgICAgICAgICAgRkNfMUxBVElOLCAg Q01fQUJSfENNX0lOViwKKyAgICAibGF0aW4iLCAgICAgICAgICAgICAgRkNfMUxBVElOLCAgQ01f QUJSfENNX0lOViwKKyAgICAibGF0aW4xLWlzbyIsICAgICAgICAgRkNfMUxBVElOLCAgMCwgLyog SVNPIExhdGluIEFscGhhYmV0IDEgKi8KKyNpZmRlZiBMQVRJTjIKKyAgICAibGF0aW4yLWlzbyIs ICAgICAgICAgRkNfMkxBVElOLCAgMCwgLyogSVNPIExhdGluIEFscGhhYmV0IDIgKi8KKyNlbmRp ZiAvKiBMQVRJTjIgKi8KKyAgICAibGF0aW45LWlzbyIsICAgICAgICAgRkNfOUxBVElOLCAgMCwg LyogSVNPIExhdGluIEFscGhhYmV0IDkgKi8KKyAgICAibWFjaW50b3NoLWxhdGluIiwgICAgRkNf QVBQUUQsICAgMCwgLyogIkV4dGVuZGVkIE1hYyBMYXRpbiIgKi8KKyNpZmRlZiBMQVRJTjIKKyAg ICAibWF6b3ZpYS1wYyIsICAgICAgICAgRkNfTUFaT1ZJQSwgMCwgLyogUG9saXNoIE1hem92aWEg UEMgY29kZSBwYWdlICovCisjZW5kaWYgLyogTEFUSU4yICovCisgICAgIm5leHQtbXVsdGluYXRp b25hbCIsIEZDX05FWFQsICAgIDAsIC8qIE5lWFQgd29ya3N0YXRpb24gKi8KKyAgICAibm9yd2Vn aWFuIiwgICAgICAgICAgRkNfTk9BU0NJSSwgMCwgLyogTm9yd2VnaWFuIGFuZCBEYW5pc2ggTlJD ICovCisgICAgInBvcnR1Z3Vlc2UiLCAgICAgICAgIEZDX1BPQVNDSUksIDAsIC8qIFBvcnR1Z3Vl c2UgTlJDICovCisjaWZkZWYgS0FOSkkKKyAgICAic2hpZnQtamlzLWthbmppIiwgICAgRkNfU0hK SVMsICAgMCwgLyogSmFwYW5lc2UgS2FuamkgU2hpZnQtSklTICovCisgICAgInNoaWZ0X2ppcyIs ICAgICAgICAgIEZDX1NISklTLCAgIENNX0lOViwgLyogSmFwYW5lc2UgS2FuamkgU2hpZnQtSklT ICovCisjZW5kaWYgLyogS0FOSkkgKi8KKyNpZmRlZiBDWVJJTExJQworICAgICJzaG9ydC1rb2ki LCAgICAgICAgICBGQ19LT0k3LCAgICAwLCAvKiBTaG9ydCBLT0kgQ3lyaWxsaWMgKi8KKyNlbmRp ZiAvKiBDWVJJTExJQyAqLworICAgICJzcGFuaXNoIiwgICAgICAgICAgICBGQ19TUEFTQ0lJLCAw LCAvKiBTcGFuaXNoIE5SQyAqLworICAgICJzd2VkaXNoIiwgICAgICAgICAgICBGQ19TV0FTQ0lJ LCAwLCAvKiBTd2VkaXNoIE5SQyAqLworICAgICJzd2lzcyIsICAgICAgICAgICAgICBGQ19DSEFT Q0lJLCAwLCAvKiBTd2lzcyBOUkMgKi8KKyNpZmRlZiBVTklDT0RFCisgICAgInVjczIiLCAgICAg ICAgICAgICAgIEZDX1VDUzIsICAgIDAsIC8qIElTTyAxMDY0NiAvIFVuaWNvZGUgVUNTLTIgKi8K KyNlbmRpZiAvKiBVTklDT0RFICovCisgICAgInVzLWFzY2lpIiwgICAgICAgICAgIEZDX1VTQVND SUksIENNX0lOViwgLyogTUlNRSAqLworICAgICJ1c2FzY2lpIiwgICAgICAgICAgICBGQ19VU0FT Q0lJLCBDTV9JTlYsCisjaWZkZWYgVU5JQ09ERQorICAgICJ1dGYtOCIsICAgICAgICAgICAgICBG Q19VVEY4LCAgICBDTV9JTlYsIC8qIElTTyAxMDY0NiAvIFVuaWNvZGUgVVRGLTggKi8KKyAgICAi dXRmOCIsICAgICAgICAgICAgICAgRkNfVVRGOCwgICAgMCwgLyogSVNPIDEwNjQ2IC8gVW5pY29k ZSBVVEYtOCAqLworI2VuZGlmIC8qIFVOSUNPREUgKi8KKyNpZmRlZiBMQVRJTjIKKyAgICAid2lu ZG93cy0xMjUwIiwgICAgICAgRkNfQ1AxMjUwLCAgQ01fSU5WLCAvKiBXaW5kb3dzIENQIDEyNTAg Ki8KKyNlbmRpZiAvKiBMQVRJTjIgKi8KKyNpZmRlZiBDWVJJTExJQworICAgICJ3aW5kb3dzLTEy NTEiLCAgICAgICBGQ19DUDEyNTEsICBDTV9JTlYsIC8qIFdpbmRvd3MgQ1AgMTI1MSAqLworI2Vu ZGlmIC8qIENZUklMTElDICovCisgICAgIndpbmRvd3MtMTI1MiIsICAgICAgIEZDX0NQMTI1Miwg IENNX0lOViwgLyogV2luZG93cyBDUCAxMjUyICovCisgICAgIiIsIDAsIDAKK307CitpbnQgbmZp bGMgPSAoc2l6ZW9mKGZjc3RhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpIC0gMTsKKworc3Ry dWN0IGtleXRhYiB0dGNzdGFiW10gPSB7IC8qIEtleXdvcmQgdGFibGUgZm9yIFNFVCBURVJNSU5B TCBDSEFSQUNURVItU0VUICovCisvKgorICBJTVBPUlRBTlQ6IFRoaXMgdGFibGUgaXMgYSByZXBs aWNhIG9mIGZjc3RhYiwgaW1tZWRpYXRlbHkgYWJvdmUsIHdpdGggdGhlCisgIGFkZGl0aW9uIG9m IFRSQU5TUEFSRU5UIGFuZCBkZWxldGlvbiBvZiB0aGUgSmFwYW5lc2Ugc2V0cy4gIElmIHlvdSBt YWtlCisgIGNoYW5nZXMgdG8gdGhpcyB0YWJsZSwgbWFrZSB0aGUgY29ycmVzcG9uZGluZyBjaGFu Z2VzIHRvIGZjc3RhYi4KKyovCisvKiBLZXl3b3JkICAgICAgICAgICAgIFZhbHVlICAgICAgIEZs YWdzICovCisgICAgImFwcGxlLXF1aWNrZHJhdyIsICAgIEZDX0FQUFFELCAgIENNX0lOViwgLyog QXBwbGUgUXVpY2tkcmF3ICovCisgICAgImFzY2lpIiwgICAgICAgICAgICAgIEZDX1VTQVNDSUks IDAsIC8qIEFTQ0lJICovCisgICAgImJyaXRpc2giLCAgICAgICAgICAgIEZDX1VLQVNDSUksIDAs IC8qIEJyaXRpc2ggTlJDICovCisgICAgImJ1bGdhcmlhLXBjIiwgICAgICAgIEZDX0JVTEdBUiwg IDAsIC8qIEJ1bGdhcmlhbiBQQyBDb2RlIFBhZ2UgKi8KKyAgICAiY2FuYWRpYW4tZnJlbmNoIiwg ICAgRkNfRkNBU0NJSSwgMCwgLyogRnJlbmNoIENhbmFkaWFuIE5SQyAqLworI2lmZGVmIExBVElO MgorICAgICJjcDEyNTAiLCAgICAgICAgICAgICBGQ19DUDEyNTAsICAwLCAvKiBXaW5kb3dzIENQ IDEyNTAgKi8KKyNlbmRpZiAvKiBMQVRJTjIgKi8KKyNpZmRlZiBDWVJJTExJQworICAgICJjcDEy NTEtY3lyaWxsaWMiLCAgICBGQ19DUDEyNTEsICAwLCAvKiBXaW5kb3dzIENQIDEyNTEgKi8KKyNl bmRpZiAvKiBDWVJJTExJQyAqLworICAgICJjcDEyNTIiLCAgICAgICAgICAgICBGQ19DUDEyNTIs ICAwLCAvKiBXaW5kb3dzIENQIDEyNTIgKi8KKyAgICAiY3A0MzciLCAgICAgICAgICAgICAgRkNf Q1A0MzcsICAgMCwgLyogUEMgQ1A0MzcgKi8KKyAgICAiY3A4NTAiLCAgICAgICAgICAgICAgRkNf Q1A4NTAsICAgMCwgLyogUEMgQ1A4NTAgKi8KKyNpZmRlZiBMQVRJTjIKKyAgICAiY3A4NTIiLCAg ICAgICAgICAgICAgRkNfQ1A4NTIsICAgMCwgLyogUEMgQ1A4NTIgKi8KKyNlbmRpZiAvKiBMQVRJ TjIgKi8KKyNpZmRlZiBDWVJJTExJQworICAgICJjcDg1NS1jeXJpbGxpYyIsICAgICBGQ19DUDg1 NSwgICAwLCAvKiBQQyBDUDg1NSAqLworI2VuZGlmIC8qIENZUklMTElDICovCisgICAgImNwODU4 IiwgICAgICAgICAgICAgIEZDX0NQODU4LCAgIDAsIC8qIFBDIENQODU4ICovCisjaWZkZWYgSEVC UkVXCisgICAgImNwODYyLWhlYnJldyIsICAgICAgIEZDX0NQODYyLCAgIDAsIC8qIFBDIENQODYy ICovCisjZW5kaWYgLyogSEVCUkVXICovCisjaWZkZWYgQ1lSSUxMSUMKKyAgICAiY3A4NjYtY3ly aWxsaWMiLCAgICAgRkNfQ1A4NjYsICAgMCwgLyogQ1A4NjYgQ3lyaWxsaWMgKi8KKyNlbmRpZiAv KiBDWVJJTExJQyAqLworI2lmZGVmIEdSRUVLCisgICAgImNwODY5LWdyZWVrIiwgICAgICAgIEZD X0NQODY5LCAgIDAsIC8qIENQODY5IEdyZWVrICovCisjZW5kaWYgLyogR1JFRUsgKi8KKyNpZmRl ZiBDWVJJTExJQworICAgICJjeXJpbGxpYy1pc28iLCAgICAgICBGQ19DWVJJTEwsICAwLCAvKiBJ U08gTGF0aW4vQ3lyaWxsaWMgQWxwaGFiZXQgKi8KKyNlbmRpZiAvKiBDWVJJTExJQyAqLworICAg ICJkYW5pc2giLCAgICAgICAgICAgICBGQ19OT0FTQ0lJLCAwLCAvKiBOb3J3ZWdpYW4gYW5kIERh bmlzaCBOUkMgKi8KKyAgICAiZGVjLW1jcyIsICAgICAgICAgICAgRkNfREVDTUNTLCAgQ01fSU5W LCAvKiBERUMgbXVsdGluYXRpb25hbCBjaGFyIHNldCAqLworICAgICJkZWMtbXVsdGluYXRpb25h bCIsICBGQ19ERUNNQ1MsICAwLCAvKiBERUMgbXVsdGluYXRpb25hbCBjaGFyYWN0ZXIgc2V0ICov CisgICAgImRnLWludGVybmF0aW9uYWwiLCAgIEZDX0RHTUNTLCAgIDAsIC8qIERhdGEgR2VuZXJh bCBtdWx0aW5hdGlvbmFsICovCisgICAgImR1dGNoIiwgICAgICAgICAgICAgIEZDX0RVQVNDSUks IDAsIC8qIER1dGNoIE5SQyAqLworI2lmZGVmIEdSRUVLCisgICAgImVsb3Q5MjctZ3JlZWsiLCAg ICAgIEZDX0VMT1QsICAgIDAsIC8qIEVMT1QgOTI3IEdyZWVrICovCisgICAgImVsb3Q5MjgtZ3Jl ZWsiLCAgICAgIEZDX0dSRUVLLCAgIDAsIC8qIFNhbWUgYXMgSVNPIDg4NTktNyBMYXRpbi9HcmVl ayAqLworI2VuZGlmIC8qIEdSRUVLICovCisgICAgImZpbm5pc2giLCAgICAgICAgICAgIEZDX0ZJ QVNDSUksIDAsIC8qIEZpbm5pc2ggTlJDICovCisgICAgImZyZW5jaCIsICAgICAgICAgICAgIEZD X0ZSQVNDSUksIDAsIC8qIEZyZW5jaCBOUkMgKi8KKyAgICAiZnItY2FuYWRpYW4iLCAgICAgICAg RkNfRkNBU0NJSSwgQ01fSU5WLCAvKiBGcmVuY2ggQ2FuYWRpYW4gTlJDICovCisgICAgImdlcm1h biIsICAgICAgICAgICAgIEZDX0dFQVNDSUksIDAsIC8qIEdlcm1hbiBOUkMgKi8KKyNpZmRlZiBH UkVFSworICAgICJncmVlay1pc28iLCAgICAgICAgICBGQ19HUkVFSywgICAwLCAvKiBJU08gODg1 OS03IExhdGluL0dyZWVrICovCisjZW5kaWYgLyogR1JFRUsgKi8KKyNpZmRlZiBIRUJSRVcKKyAg ICAiaGUiLCAgICAgICAgICAgICAgICAgRkNfSEVCUkVXLCAgQ01fQUJSfENNX0lOViwKKyAgICAi aGViIiwgICAgICAgICAgICAgICAgRkNfSEVCUkVXLCAgQ01fQUJSfENNX0lOViwKKyAgICAiaGVi ciIsICAgICAgICAgICAgICAgRkNfSEVCUkVXLCAgQ01fQUJSfENNX0lOViwKKyAgICAiaGVicmUi LCAgICAgICAgICAgICAgRkNfSEVCUkVXLCAgQ01fQUJSfENNX0lOViwKKyAgICAiaGVicmV3Iiwg ICAgICAgICAgICAgRkNfSEVCUkVXLCAgQ01fQUJSfENNX0lOViwKKyAgICAiaGVicmV3LTciLCAg ICAgICAgICAgRkNfSEU3LCAgICAgMCwgLyogREVDIDctQml0IEhlYnJldyAqLworICAgICJoZWJy ZXctaXNvIiwgICAgICAgICBGQ19IRUJSRVcsICAwLCAvKiBJU08gTGF0aW4vSGVicmV3ICovCisj ZW5kaWYgLyogSEVCUkVXICovCisgICAgImhwLXJvbWFuOCIsICAgICAgICAgIEZDX0hQUjgsICAg IDAsIC8qIEhld2xldHQgUGFja2FyZCBSb21hbjggKi8KKyAgICAiaHVuZ2FyaWFuIiwgICAgICAg ICAgRkNfSFVBU0NJSSwgMCwgLyogSHVuZ2FyaWFuIE5SQyAqLworCisgICAgImlibTQzNyIsICAg ICAgICAgICAgIEZDX0NQNDM3LCAgIENNX0lOViwgLyogUEMgQ1A0MzcgKi8KKyAgICAiaWJtODUw IiwgICAgICAgICAgICAgRkNfQ1A4NTAsICAgQ01fSU5WLCAvKiBQQyBDUDg1MCAobm90IGluIE1J TUUpICovCisjaWZkZWYgTEFUSU4yCisgICAgImlibTg1MiIsICAgICAgICAgICAgIEZDX0NQODUy LCAgIENNX0lOViwgLyogUEMgQ1A4NTIgKi8KKyNlbmRpZiAvKiBMQVRJTjIgKi8KKyNpZmRlZiBD WVJJTExJQworICAgICJpYm04NTUiLCAgICAgICAgICAgICBGQ19DUDg1NSwgICBDTV9JTlYsIC8q IFBDIENQODU1ICovCisjZW5kaWYgLyogQ1lSSUxMSUMgKi8KKyAgICAiaWJtODU4IiwgICAgICAg ICAgICAgRkNfQ1A4NTgsICAgQ01fSU5WLCAvKiBQQyBDUDg1OCAobm90IGluIE1JTUUpICovCisj aWZkZWYgSEVCUkVXCisgICAgImlibTg2MiIsICAgICAgICAgICAgIEZDX0NQODYyLCAgIENNX0lO ViwgLyogUEMgQ1A4NjIgKG5vdCBpbiBNSU1FKSAqLworI2VuZGlmIC8qIEhFQlJFVyAqLworI2lm ZGVmIENZUklMTElDCisgICAgImlibTg2NiIsICAgICAgICAgICAgIEZDX0NQODY2LCAgIENNX0lO ViwgLyogQ1A4NjYgQ3lyaWxsaWMgKi8KKyNlbmRpZiAvKiBDWVJJTExJQyAqLworI2lmZGVmIEdS RUVLCisgICAgImlibTg2OSIsICAgICAgICAgICAgIEZDX0NQODY5LCAgIENNX0lOViwgLyogQ1A4 NjkgR3JlZWsgKi8KKyNlbmRpZiAvKiBHUkVFSyAqLworCisjaWZkZWYgVU5JQ09ERQorICAgICJp c28tMTA2NDYtdWNzLTIiLCAgICBGQ19VQ1MyLCAgICBDTV9JTlYsIC8qIElTTyAxMDY0NiAvIFVu aWNvZGUgVUNTLTIgKi8KKyNlbmRpZiAvKiBVTklDT0RFICovCisgICAgImlzby04ODU5LTEiLCAg ICAgICAgIEZDXzFMQVRJTiwgIENNX0lOViwgLyogSVNPIExhdGluIEFscGhhYmV0IDEgKi8KKyAg ICAiaXNvLTg4NTktMTUiLCAgICAgICAgRkNfOUxBVElOLCAgQ01fSU5WLCAvKiBJU08gTGF0aW4g QWxwaGFiZXQgOSAoeWVzKSAqLworICAgICJpc28tODg1OS0yIiwgICAgICAgICBGQ18yTEFUSU4s ICBDTV9JTlYsIC8qIElTTyBMYXRpbiBBbHBoYWJldCAyICovCisjaWZkZWYgQ1lSSUxMSUMKKyAg ICAiaXNvLTg4NTktNSIsICAgICAgICAgRkNfQ1lSSUxMLCAgQ01fSU5WLCAvKiBJU08gTGF0aW4v Q3lyaWxsaWMgQWxwaGFiZXQgKi8KKyNlbmRpZiAvKiBDWVJJTExJQyAqLworI2lmZGVmIEdSRUVL CisgICAgImlzby04ODU5LTciLCAgICAgICAgIEZDX0dSRUVLLCAgIENNX0lOViwgLyogSVNPIDg4 NTktNyBMYXRpbi9HcmVlayAqLworI2VuZGlmIC8qIEdSRUVLICovCisjaWZkZWYgSEVCUkVXCisg ICAgImlzby04ODU5LTgiLCAgICAgICAgIEZDX0hFQlJFVywgIENNX0lOViwgLyogSVNPIExhdGlu L0hlYnJldyAqLworI2VuZGlmIC8qIEhFQlJFVyAqLworCisgICAgImlzbzY0Ni1nYiIsICAgICAg ICAgIEZDX1VLQVNDSUksIENNX0lOViwgLyogQnJpdGlzaCBOUkMgKi8KKyAgICAiaXNvNjQ2LWNh IiwgICAgICAgICAgRkNfRkNBU0NJSSwgQ01fSU5WLCAvKiBGcmVuY2ggQ2FuYWRpYW4gTlJDICov CisgICAgImlzbzY0Ni1kZSIsICAgICAgICAgIEZDX0dFQVNDSUksIENNX0lOViwgLyogR2VybWFu IE5SQyAqLworICAgICJpc282NDYtZGsiLCAgICAgICAgICBGQ19OT0FTQ0lJLCBDTV9JTlYsIC8q IE5vcndlZ2lhbiBhbmQgRGFuaXNoIE5SQyAqLworICAgICJpc282NDYtZXMiLCAgICAgICAgICBG Q19TUEFTQ0lJLCBDTV9JTlYsIC8qIFNwYW5pc2ggTlJDICovCisgICAgImlzbzY0Ni1maSIsICAg ICAgICAgIEZDX0ZJQVNDSUksIENNX0lOViwgLyogRmlubmlzaCBOUkMgKi8KKyAgICAiaXNvNjQ2 LWZyIiwgICAgICAgICAgRkNfRlJBU0NJSSwgQ01fSU5WLCAvKiBGcmVuY2ggTlJDICovCisgICAg ImlzbzY0Ni1odSIsICAgICAgICAgIEZDX0hVQVNDSUksIENNX0lOViwgLyogSHVuZ2FyaWFuIE5S QyAqLworICAgICJpc282NDYtaXQiLCAgICAgICAgICBGQ19JVEFTQ0lJLCBDTV9JTlYsIC8qIEl0 YWxpYW4gTlJDICovCisgICAgImlzbzY0Ni1ubyIsICAgICAgICAgIEZDX05PQVNDSUksIENNX0lO ViwgLyogTm9yd2VnaWFuIGFuZCBEYW5pc2ggTlJDICovCisgICAgImlzbzY0Ni1wbyIsICAgICAg ICAgIEZDX1BPQVNDSUksIENNX0lOViwgLyogUG9ydHVndWVzZSBOUkMgKi8KKyAgICAiaXNvNjQ2 LXNlIiwgICAgICAgICAgRkNfU1dBU0NJSSwgQ01fSU5WLCAvKiBTd2VkaXNoIE5SQyAqLworCisg ICAgIml0YWxpYW4iLCAgICAgICAgICAgIEZDX0lUQVNDSUksIENNX0lOViwgLyogSXRhbGlhbiBO UkMgKi8KKworI2lmZGVmIENZUklMTElDCisgICAgImsiLCAgICAgICAgICAgICAgICAgIEZDX0tP STgsICAgIENNX0FCUnxDTV9JTlYsCisgICAgImtvIiwgICAgICAgICAgICAgICAgIEZDX0tPSTgs ICAgIENNX0FCUnxDTV9JTlYsCisgICAgImtvaSIsICAgICAgICAgICAgICAgIEZDX0tPSTgsICAg IENNX0FCUnxDTV9JTlYsCisgICAgImtvaTciLCAgICAgICAgICAgICAgIEZDX0tPSTcsICAgIDAs IC8qIFNob3J0IEtPSSBDeXJpbGxpYyAqLworICAgICJrb2k4IiwgICAgICAgICAgICAgICBGQ19L T0k4LCAgICAwLCAvKiBPbGQgS09JLTggQ3lyaWxsaWMgKi8KKyAgICAia29pOC1lIiwgICAgICAg ICAgICAgRkNfS09JOCwgICAgQ01fSU5WLCAvKiBPbGQgS09JLTggQ3lyaWxsaWMgKi8KKyAgICAi a29pOC1jeXJpbGxpYyIsICAgICAgRkNfS09JOCwgICAgQ01fSU5WLAorICAgICJrb2k4LXIiLCAg ICAgICAgICAgICBGQ19LT0k4UiwgICBDTV9JTlYsIC8qIEtPSTgtUiBSRkMxNDg5ICovCisgICAg ImtvaTgtdSIsICAgICAgICAgICAgIEZDX0tPSThVLCAgIENNX0lOViwgLyogS09JOC1VIFJGQzIz MTkgKi8KKyAgICAia29pOHIiLCAgICAgICAgICAgICAgRkNfS09JOFIsICAgMCwgLyogS09JOC1S IFJGQzE0ODkgKi8KKyAgICAia29pOHUiLCAgICAgICAgICAgICAgRkNfS09JOFUsICAgMCwgLyog S09JOC1VIFJGQzIzMTkgKi8KKyNlbmRpZiAvKiBDWVJJTExJQyAqLworICAgICJsIiwgICAgICAg ICAgICAgICAgICBGQ18xTEFUSU4sICBDTV9BQlJ8Q01fSU5WLAorICAgICJsYSIsICAgICAgICAg ICAgICAgICBGQ18xTEFUSU4sICBDTV9BQlJ8Q01fSU5WLAorICAgICJsYXQiLCAgICAgICAgICAg ICAgICBGQ18xTEFUSU4sICBDTV9BQlJ8Q01fSU5WLAorICAgICJsYXRpIiwgICAgICAgICAgICAg ICBGQ18xTEFUSU4sICBDTV9BQlJ8Q01fSU5WLAorICAgICJsYXRpbiIsICAgICAgICAgICAgICBG Q18xTEFUSU4sICBDTV9BQlJ8Q01fSU5WLAorICAgICJsYXRpbjEtaXNvIiwgICAgICAgICBGQ18x TEFUSU4sICAwLCAvKiBJU08gTGF0aW4gQWxwaGFiZXQgMSAqLworI2lmZGVmIExBVElOMgorICAg ICJsYXRpbjItaXNvIiwgICAgICAgICBGQ18yTEFUSU4sICAwLCAvKiBJU08gTGF0aW4gQWxwaGFi ZXQgMiAqLworI2VuZGlmIC8qIExBVElOMiAqLworICAgICJsYXRpbjktaXNvIiwgICAgICAgICBG Q185TEFUSU4sICAwLCAvKiBJU08gTGF0aW4gQWxwaGFiZXQgOSAqLworICAgICJtYWNpbnRvc2gt bGF0aW4iLCAgICBGQ19BUFBRRCwgICAwLCAvKiAiRXh0ZW5kZWQgTWFjIExhdGluIiAqLworI2lm ZGVmIExBVElOMgorICAgICJtYXpvdmlhLXBjIiwgICAgICAgICBGQ19NQVpPVklBLCAwLCAvKiBQ b2xpc2ggTWF6b3ZpYSBQQyBjb2RlIHBhZ2UgKi8KKyNlbmRpZiAvKiBMQVRJTjIgKi8KKyAgICAi bmV4dC1tdWx0aW5hdGlvbmFsIiwgRkNfTkVYVCwgICAgMCwgLyogTmVYVCB3b3Jrc3RhdGlvbiAq LworICAgICJub3J3ZWdpYW4iLCAgICAgICAgICBGQ19OT0FTQ0lJLCAwLCAvKiBOb3J3ZWdpYW4g YW5kIERhbmlzaCBOUkMgKi8KKyAgICAicG9ydHVndWVzZSIsICAgICAgICAgRkNfUE9BU0NJSSwg MCwgLyogUG9ydHVndWVzZSBOUkMgKi8KKworI2lmZGVmIENZUklMTElDCisgICAgInNob3J0LWtv aSIsICAgICAgICAgIEZDX0tPSTcsICAgIDAsIC8qIFNob3J0IEtPSSBDeXJpbGxpYyAqLworI2Vu ZGlmIC8qIENZUklMTElDICovCisgICAgInNwYW5pc2giLCAgICAgICAgICAgIEZDX1NQQVNDSUks IDAsIC8qIFNwYW5pc2ggTlJDICovCisgICAgInN3ZWRpc2giLCAgICAgICAgICAgIEZDX1NXQVND SUksIDAsIC8qIFN3ZWRpc2ggTlJDICovCisgICAgInN3aXNzIiwgICAgICAgICAgICAgIEZDX0NI QVNDSUksIDAsIC8qIFN3aXNzIE5SQyAqLworICAgICJ0cmFuc3BhcmVudCIsICAgICAgICBGQ19U UkFOU1AsICAwLCAvKiBUcmFuc3BhcmVudCAqLworI2lmZGVmIFVOSUNPREUKKyAgICAidWNzMiIs ICAgICAgICAgICAgICAgRkNfVUNTMiwgICAgMCwgLyogSVNPIDEwNjQ2IC8gVW5pY29kZSBVQ1Mt MiAqLworI2VuZGlmIC8qIFVOSUNPREUgKi8KKyAgICAidXMtYXNjaWkiLCAgICAgICAgICAgRkNf VVNBU0NJSSwgQ01fSU5WLCAvKiBNSU1FICovCisgICAgInVzYXNjaWkiLCAgICAgICAgICAgIEZD X1VTQVNDSUksIENNX0lOViwKKyNpZmRlZiBVTklDT0RFCisgICAgInV0Zi04IiwgICAgICAgICAg ICAgIEZDX1VURjgsICAgIENNX0lOViwgLyogSVNPIDEwNjQ2IC8gVW5pY29kZSBVVEYtOCAqLwor ICAgICJ1dGY4IiwgICAgICAgICAgICAgICBGQ19VVEY4LCAgICAwLCAvKiBJU08gMTA2NDYgLyBV bmljb2RlIFVURi04ICovCisjZW5kaWYgLyogVU5JQ09ERSAqLworI2lmZGVmIExBVElOMgorICAg ICJ3aW5kb3dzLTEyNTAiLCAgICAgICBGQ19DUDEyNTAsICBDTV9JTlYsIC8qIFdpbmRvd3MgQ1Ag MTI1MCAqLworI2VuZGlmIC8qIExBVElOMiAqLworI2lmZGVmIENZUklMTElDCisgICAgIndpbmRv d3MtMTI1MSIsICAgICAgIEZDX0NQMTI1MSwgIENNX0lOViwgLyogV2luZG93cyBDUCAxMjUxICov CisjZW5kaWYgLyogQ1lSSUxMSUMgKi8KKyAgICAid2luZG93cy0xMjUyIiwgICAgICAgRkNfQ1Ax MjUyLCAgQ01fSU5WLCAvKiBXaW5kb3dzIENQIDEyNTIgKi8KKyAgICAiIiwgMCwgMAorfTsKK2lu dCBudGVybWMgPSAoc2l6ZW9mKHR0Y3N0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKSAtIDE7 CisKKy8qIFRoaXMgdGFibGUgY29udGFpbnMgdGhlIGVxdWl2YWxlbnQgRkNTIG51bWJlciBmb3Ig ZWFjaCBUQ1MuICovCisvKiBJZiB0aGUgVENfeHh4IHN5bWJvbCBkZWZpbml0aW9ucyBhcmUgZXZl ciBjaGFuZ2VkLCBmaXggdGhpcyB0YWJsZS4gKi8KKy8qIERpdHRvIGlmIGFub3RoZXIgVENTIGlz IGFkZGVkLiAqLworCitpbnQKK2NzZXF0YWJbTUFYVENTRVRTKzFdID0gewkJLyogVENTL0ZDUyBl cXVpdmFsZW5jeSB0YWJsZSAqLworICAgIC0xLAkJCQkJLyogIDAgPSBUcmFuc3BhcmVudCAqLwor ICAgIEZDX1VTQVNDSUksCQkJCS8qICAxID0gQVNDSUkgKi8KKyAgICBGQ18xTEFUSU4sCQkJCS8q ICAyID0gTGF0aW4tMSAqLworICAgIEZDXzJMQVRJTiwJCQkJLyogIDMgPSBMYXRpbi0yICovCisg ICAgRkNfQ1lSSUxMLAkJCQkvKiAgNCA9IExhdGluL0N5cmlsbGljICovCisgICAgRkNfSkVVQywJ CQkJLyogIDUgPSBKYXBhbmVzZSBFVUMgKi8KKyAgICBGQ19IRUJSRVcsCQkJCS8qICA2ID0gTGF0 aW4vSGVicmV3ICovCisgICAgRkNfR1JFRUssCQkJCS8qICA3ID0gTGF0aW4vR3JlZWsgKi8KKyAg ICBGQ185TEFUSU4sCQkJCS8qICA4ID0gTGF0aW4tOSAqLworICAgIEZDX1VDUzIsCQkJCS8qICA5 ID0gVUNTLTIgKi8KKyAgICBGQ19VVEY4CQkJCS8qIDEwID0gVVRGLTggKi8KK307CisKKy8qCisg TGFuZ3VhZ2VzOgorCisgVGhpcyB0YWJsZSBhbGxvd3MgQy1LZXJtaXQgdG8gaGF2ZSBhIFNFVCBM QU5HVUFHRSBjb21tYW5kIHRvIGFwcGx5IHNwZWNpYWwKKyBsYW5ndWFnZS1zcGVjaWZpYyBydWxl cyB3aGVuIHRyYW5zbGF0aW5nIGZyb20gYSBjaGFyYWN0ZXIgc2V0IHRoYXQgY29udGFpbnMKKyBu YXRpb25hbCBjaGFyYWN0ZXJzIGludG8gcGxhaW4gQVNDSUksIGxpa2UgR2VybWFuIHVtbGF1dC1h IGJlY29tZXMgYWUuCisKKyBPcmlnaW5hbGx5LCBJIHRob3VnaHQgaXQgd291bGQgYmUgYSBnb29k IGlkZWEgdG8gbGV0IFNFVCBMQU5HVUFHRSBhbHNvIHNlbGVjdAorIGFuIGFwcHJvcHJpYXRlIEZJ TEUgQ0hBUkFDVEVSLVNFVCBhbmQgVFJBTlNGRVIgQ0hBUkFDVEVSLVNFVCBhdXRvbWF0aWNhbGx5 LAorIGFuZCB0aGVzZSBhcmUgaW5jbHVkZWQgaW4gdGhlIGxhbmdpbmZvIHN0cnVjdHVyZS4gIExh dGVyIEkgcmVhbGl6ZWQgdGhhdCB0aGlzCisgd2FzIGEgYmFkIGlkZWEuICBBbnkgcGFydGljdWxh ciBsYW5ndWFnZSAoZS5nLiBEdXRjaCkgY2FuIGJlIHJlcHJlc2VudGVkIGJ5CisgbWFueSBkaWZm ZXJlbnQgYW5kIGluY29tcGF0aWJsZSBjaGFyYWN0ZXIgc2V0cy4KKworIChCdXQgd2UgY291bGQg dXNlIHRoZSBuZXcgKDE5OTgpIEFTU09DSUFURSBjb21tYW5kIGZvciB0aGlzLi4uKQorKi8KKwor c3RydWN0IGxhbmdpbmZvIGxhbmdzW10gPSB7CisvKiAgTGFuZ3VhZ2UgY29kZSAgIEZpbGUgQ2hh cnNldCBYZmVyIENoYXJzZXQgTmFtZSAqLworICAgIExfVVNBU0NJSSwgICAgICBGQ19VU0FTQ0lJ LCAgVENfVVNBU0NJSSwgICJBU0NJSSAoQW1lcmljYW4gRW5nbGlzaCkiLAorICAgIExfREFOSVNI LCAgICAgICBGQ19OT0FTQ0lJLCAgVENfMUxBVElOLCAgICJEYW5pc2giLAorICAgIExfRFVUQ0gs ICAgICAgICBGQ19EVUFTQ0lJLCAgVENfMUxBVElOLCAgICJEdXRjaCIsCisgICAgTF9GSU5OSVNI LCAgICAgIEZDX0ZJQVNDSUksICBUQ18xTEFUSU4sICAgIkZpbm5pc2giLAorICAgIExfRlJFTkNI LCAgICAgICBGQ19GUkFTQ0lJLCAgVENfMUxBVElOLCAgICJGcmVuY2giLAorICAgIExfR0VSTUFO LCAgICAgICBGQ19HRUFTQ0lJLCAgVENfMUxBVElOLCAgICJHZXJtYW4iLAorI2lmZGVmIEdSRUVL CisgICAgTF9HUkVFSywgICAgICAgIEZDX0dSRUVLLCAgICBUQ19HUkVFSywgICAgIkdyZWVrIiwK KyNlbmRpZiAvKiBHUkVFSyAqLworI2lmZGVmIEhFQlJFVworICAgIExfSEVCUkVXLCAgICAgICBG Q19IRUJSRVcsICAgVENfSEVCUkVXLCAgICJIZWJyZXciLAorI2VuZGlmIC8qIEhFQlJFVyAqLwor ICAgIExfSFVOR0FSSUFOLCAgICBGQ19IVUFTQ0lJLCAgVENfMkxBVElOLCAgICJIdW5nYXJpYW4i LAorICAgIExfSUNFTEFORElDLCAgICBGQ19VU0FTQ0lJLCAgVENfMUxBVElOLCAgICJJY2VsYW5k aWMiLAorICAgIExfSVRBTElBTiwgICAgICBGQ19JVEFTQ0lJLCAgVENfMUxBVElOLCAgICJJdGFs aWFuIiwKKyNpZmRlZiBLQU5KSQorICAgIExfSkFQQU5FU0UsICAgICBGQ19KRVVDLCAgICAgVENf SkVVQywgICAgICJKYXBhbmVzZSIsCisjZW5kaWYgLyogS0FOSkkgKi8KKyAgICBMX05PUldFR0lB TiwgICAgRkNfTk9BU0NJSSwgIFRDXzFMQVRJTiwgICAiTm9yd2VnaWFuIiwKKyAgICBMX1BPUlRV R1VFU0UsICAgRkNfUE9BU0NJSSwgIFRDXzFMQVRJTiwgICAiUG9ydHVndWVzZSIsCisjaWZkZWYg Q1lSSUxMSUMKKyAgICBMX1JVU1NJQU4sICAgICAgRkNfQ1A4NjYsICAgIFRDX0NZUklMTCwgICAi UnVzc2lhbiIsCisjZW5kaWYgLyogQ1lSSUxMSUMgKi8KKyAgICBMX1NQQU5JU0gsICAgICAgRkNf U1BBU0NJSSwgIFRDXzFMQVRJTiwgICAiU3BhbmlzaCIsCisgICAgTF9TV0VESVNILCAgICAgIEZD X1NXQVNDSUksICBUQ18xTEFUSU4sICAgIlN3ZWRpc2giLAorICAgIExfU1dJU1MsICAgICAgICBG Q19DSEFTQ0lJLCAgVENfMUxBVElOLCAgICJTd2lzcyIKK307CitpbnQgbmxhbmdzID0gKHNpemVv ZihsYW5ncykgLyBzaXplb2Yoc3RydWN0IGxhbmdpbmZvKSk7CisKKy8qCisgIEtleXdvcmQgdGFi bGUgZm9yIHRoZSBTRVQgTEFOR1VBR0UgY29tbWFuZC4KKyAgT25seSBhIGZldyBvZiB0aGVzZSAo R2VybWFuLCBTY2FuZGluYXZpYW4sIGV0YykgYWN0dWFsbHkgZG8gYW55dGhpbmcuCisgIFRoZSBs YW5ndWFnZSBpcyB1c2VkIHRvIGludm9rZSBzcGVjaWFsIHRyYW5zbGF0aW9uIHJ1bGVzIHdoZW4g Y29udmVydGluZworICBmcm9tIGFuIDgtYml0IGNoYXJhY3RlciBzZXQgdG8gQVNDSUk7IGZvciBl eGFtcGxlLCBHZXJtYW4gdS1kaWFlcmVzaXMKKyAgYmVjb21lcyAidWUiLCBEdXRjaCB5LWRpYWVy ZXNpcyBiZWNvbWVzICJpaiIuICBMYW5ndWFnZXMgd2l0aG91dCBhc3NvY2lhdGVkCisgIHJ1bGVz IGFyZSBpbnZpc2libGUgKENNX0lOVikuCisqLworc3RydWN0IGtleXRhYiBsbmd0YWJbXSA9IHsK KyAgICAiYXNjaWkiLCAgICAgICAgICAgIExfVVNBU0NJSSwgICAgQ01fSU5WLAorICAgICJkYW5p c2giLCAgICAgICAgICAgTF9EQU5JU0gsICAgICAwLAorICAgICJkdXRjaCIsICAgICAgICAgICAg TF9EVVRDSCwgICAgICAwLAorICAgICJlbmdsaXNoIiwgICAgICAgICAgTF9VU0FTQ0lJLCAgICBD TV9JTlYsCisgICAgImZpbm5pc2giLCAgICAgICAgICBMX0ZJTk5JU0gsICAgIDAsCisgICAgImZy ZW5jaCIsICAgICAgICAgICBMX0ZSRU5DSCwgICAgIDAsCisgICAgImdlcm1hbiIsICAgICAgICAg ICBMX0dFUk1BTiwgICAgIDAsCisjaWZkZWYgR1JFRUsKKyAgICAiZ3JlZWsiLCAgICAgICAgICAg IExfR1JFRUssICAgICAgQ01fSU5WLAorI2VuZGlmIC8qIEdSRUVLICovCisjaWZkZWYgSEVCUkVX CisgICAgImhlYnJldyIsICAgICAgICAgICBMX0hFQlJFVywgICAgIENNX0lOViwKKyNlbmRpZiAv KiBIRUJSRVcgKi8KKyAgICAiaHVuZ2FyaWFuIiwgICAgICAgIExfSFVOR0FSSUFOLCAgQ01fSU5W LAorICAgICJpY2VsYW5kaWMiLCAgICAgICAgTF9JQ0VMQU5ESUMsICAwLAorICAgICJpdGFsaWFu IiwgICAgICAgICAgTF9JVEFMSUFOLCAgICBDTV9JTlYsCisjaWZkZWYgS0FOSkkKKyAgICAiamFw YW5lc2UiLCAgICAgICAgIExfSkFQQU5FU0UsICAgQ01fSU5WLAorI2VuZGlmIC8qIEtBTkpJICov CisgICAgIm5vcndlZ2lhbiIsICAgICAgICBMX05PUldFR0lBTiwgIDAsCisgICAgIm5vbmUiLCAg ICAgICAgICAgICBMX1VTQVNDSUksICAgIDAsCisgICAgInBvcnR1Z3Vlc2UiLCAgICAgICBMX1BP UlRVR1VFU0UsIENNX0lOViwKKyNpZmRlZiBDWVJJTExJQworICAgICJydXNzaWFuIiwgICAgICAg ICAgTF9SVVNTSUFOLCAgICAwLAorI2VuZGlmIC8qIENZUklMTElDICovCisgICAgInNwYW5pc2gi LCAgICAgICAgICBMX1NQQU5JU0gsICAgIENNX0lOViwKKyAgICAic3dlZGlzaCIsICAgICAgICAg IExfU1dFRElTSCwgICAgMCwKKyNpZmRlZiBDWVJJTExJQworICAgICJ1a3JhaW5pYW4iLCAgICAg ICAgTF9SVVNTSUFOLCAgICAwLAorI2VuZGlmIC8qIENZUklMTElDICovCisgICAgIiIsIDAsIDAK K307CitpbnQgbmxuZyA9IChzaXplb2YobG5ndGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSkg LSAxOyAvKiBob3cgbWFueSAqLworCisKKy8qIFRyYW5zbGF0aW9uIHRhYmxlcyAuLi4gKi8KKwor LyoKKyAgRm9yIGVhY2ggcGFpciBvZiAodHJhbnNmZXIsZmlsZSkgY2hhcmFjdGVyIHNldHMsIHdl IG5lZWQgdHdvIHRyYW5zbGF0aW9uCisgIGZ1bmN0aW9ucywgb25lIGZvciBzZW5kaW5nLCBvbmUg Zm9yIHJlY2VpdmluZy4KKyovCisKKy8qCisgIEhlcmUgaXMgdGhlIGZpcnN0IHRhYmxlLCBMYXRp bi0xIHRvIEFTQ0lJLCBmdWxseSBhbm5vdGF0ZWQuLi4KKyAgVGhpcyBvbmUgaXMgYWJzb2x1dGVs eSBOT1QgaW52ZXJ0aWJsZSwgc2luY2Ugd2UncmUgZ29pbmcgZnJvbSBhbiA4LWJpdAorICBzZXQg dG8gYSA3LWJpdCBzZXQuICBBY2NlbnRlZCBsZXR0ZXJzIGFyZSBtYXBwZWQgdG8gdW5hY2NlbnRl ZAorICBlcXVpdmFsZW50cywgQzEgY29udHJvbCBjaGFyYWN0ZXJzIGFyZSBhbGwgdHJhbnNsYXRl ZCB0byAiPyIsIGV0Yy4KKyovCitDT05TVCBDSEFSCit5bDFhc1tdID0geyAgLyogSVNPIDg4NTkt MSBMYXRpbiBBbHBoYWJldCAxIHRvIFVTIEFTQ0lJICovCisgICAgICAvKiAgU291cmNlIGNoYXJh Y3RlciAgICBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgID0+IFRyYW5zbGF0aW9uICovCisgICAg ICAvKiAgRGVjIHJvdy9jb2wgU2V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICovCisgIDAsICAvKiAgMDAwICAwMC8wMCAgQzAgTlVMICBDdHJsLUAgICAgICAgICAg ICAgICAgICAgID0+ICAoc2VsZikgICovCisgIDEsICAvKiAgMDAxICAwMC8wMSAgQzAgU09IICBD dHJsLUEgICAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCisgIDIsICAvKiAgMDAyICAw MC8wMiAgQzAgU1RYICBDdHJsLUIgICAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCisg IDMsICAvKiAgMDAzICAwMC8wMyAgQzAgRVRYICBDdHJsLUMgICAgICAgICAgICAgICAgICAgID0+ ICAoc2VsZikgICovCisgIDQsICAvKiAgMDA0ICAwMC8wNCAgQzAgRU9UICBDdHJsLUQgICAgICAg ICAgICAgICAgICAgID0+ICAoc2VsZikgICovCisgIDUsICAvKiAgMDA1ICAwMC8wNSAgQzAgRU5R ICBDdHJsLUUgICAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCisgIDYsICAvKiAgMDA2 ICAwMC8wNiAgQzAgQUNLICBDdHJsLUYgICAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICov CisgIDcsICAvKiAgMDA3ICAwMC8wNyAgQzAgQkVMICBDdHJsLUcgICAgICAgICAgICAgICAgICAg ID0+ICAoc2VsZikgICovCisgIDgsICAvKiAgMDA4ICAwMC8wOCAgQzAgQlMgICBDdHJsLUggICAg ICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCisgIDksICAvKiAgMDA5ICAwMC8wOSAgQzAg SFQgICBDdHJsLUkgICAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCisgMTAsICAvKiAg MDEwICAwMC8xMCAgQzAgTEYgICBDdHJsLUogICAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikg ICovCisgMTEsICAvKiAgMDExICAwMC8xMSAgQzAgVlQgICBDdHJsLUsgICAgICAgICAgICAgICAg ICAgID0+ICAoc2VsZikgICovCisgMTIsICAvKiAgMDEyICAwMC8xMiAgQzAgRkYgICBDdHJsLUwg ICAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCisgMTMsICAvKiAgMDEzICAwMC8xMyAg QzAgQ1IgICBDdHJsLU0gICAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCisgMTQsICAv KiAgMDE0ICAwMC8xNCAgQzAgU08gICBDdHJsLU4gICAgICAgICAgICAgICAgICAgID0+ICAoc2Vs ZikgICovCisgMTUsICAvKiAgMDE1ICAwMC8xNSAgQzAgU0kgICBDdHJsLU8gICAgICAgICAgICAg ICAgICAgID0+ICAoc2VsZikgICovCisgMTYsICAvKiAgMDE2ICAwMS8wMCAgQzAgRExFICBDdHJs LVAgICAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCisgMTcsICAvKiAgMDE3ICAwMS8w MSAgQzAgREMxICBDdHJsLVEgICAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCisgMTgs ICAvKiAgMDE4ICAwMS8wMiAgQzAgREMyICBDdHJsLVIgICAgICAgICAgICAgICAgICAgID0+ICAo c2VsZikgICovCisgMTksICAvKiAgMDE5ICAwMS8wMyAgQzAgREMzICBDdHJsLVMgICAgICAgICAg ICAgICAgICAgID0+ICAoc2VsZikgICovCisgMjAsICAvKiAgMDIwICAwMS8wNCAgQzAgREM0ICBD dHJsLVQgICAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCisgMjEsICAvKiAgMDIxICAw MS8wNSAgQzAgTkFLICBDdHJsLVUgICAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCisg MjIsICAvKiAgMDIyICAwMS8wNiAgQzAgU1lOICBDdHJsLVYgICAgICAgICAgICAgICAgICAgID0+ ICAoc2VsZikgICovCisgMjMsICAvKiAgMDIzICAwMS8wNyAgQzAgRVRCICBDdHJsLVcgICAgICAg ICAgICAgICAgICAgID0+ICAoc2VsZikgICovCisgMjQsICAvKiAgMDI0ICAwMS8wOCAgQzAgQ0FO ICBDdHJsLVggICAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCisgMjUsICAvKiAgMDI1 ICAwMS8wOSAgQzAgRU0gICBDdHJsLVkgICAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICov CisgMjYsICAvKiAgMDI2ICAwMS8xMCAgQzAgU1VCICBDdHJsLVogICAgICAgICAgICAgICAgICAg ID0+ICAoc2VsZikgICovCisgMjcsICAvKiAgMDI3ICAwMS8xMSAgQzAgRVNDICBDdHJsLVsgICAg ICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCisgMjgsICAvKiAgMDI4ICAwMS8xMiAgQzAg RlMgICBDdHJsLVwgICAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCisgMjksICAvKiAg MDI5ICAwMS8xMyAgQzAgR1MgICBDdHJsLV0gICAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikg ICovCisgMzAsICAvKiAgMDMwICAwMS8xNCAgQzAgUlMgICBDdHJsLV4gICAgICAgICAgICAgICAg ICAgID0+ICAoc2VsZikgICovCisgMzEsICAvKiAgMDMxICAwMS8xNSAgQzAgVVMgICBDdHJsLV8g ICAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCisgMzIsICAvKiAgMDMyICAwMi8wMCAg ICAgU1AgICBTcGFjZSAgICAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCisgMzMsICAv KiAgMDMzICAwMi8wMSAgRzAgISAgICBFeGNsYW1hdGlvbiBtYXJrICAgICAgICAgID0+ICAoc2Vs ZikgICovCisgMzQsICAvKiAgMDM0ICAwMi8wMiAgRzAgIiAgICBEb3VibGVxdW90ZSAgICAgICAg ICAgICAgID0+ICAoc2VsZikgICovCisgMzUsICAvKiAgMDM1ICAwMi8wMyAgRzAgIyAgICBOdW1i ZXIgc2lnbiAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCisgMzYsICAvKiAgMDM2ICAwMi8w NCAgRzAgJCAgICBEb2xsYXIgc2lnbiAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCisgMzcs ICAvKiAgMDM3ICAwMi8wNSAgRzAgJSAgICBQZXJjZW50IHNpZ24gICAgICAgICAgICAgID0+ICAo c2VsZikgICovCisgMzgsICAvKiAgMDM4ICAwMi8wNiAgRzAgJiAgICBBbXBlcnNhbmQgICAgICAg ICAgICAgICAgID0+ICAoc2VsZikgICovCisgMzksICAvKiAgMDM5ICAwMi8wNyAgRzAgJyAgICBB cG9zdHJvcGhlICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCisgNDAsICAvKiAgMDQwICAw Mi8wOCAgRzAgKCAgICBMZWZ0IHBhcmVudGhlc2lzICAgICAgICAgID0+ICAoc2VsZikgICovCisg NDEsICAvKiAgMDQxICAwMi8wOSAgRzAgKSAgICBSaWdodCBwYXJlbnRoZXNpcyAgICAgICAgID0+ ICAoc2VsZikgICovCisgNDIsICAvKiAgMDQyICAwMi8xMCAgRzAgKiAgICBBc3RlcmlzayAgICAg ICAgICAgICAgICAgID0+ICAoc2VsZikgICovCisgNDMsICAvKiAgMDQzICAwMi8xMSAgRzAgKyAg ICBQbHVzIHNpZ24gICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCisgNDQsICAvKiAgMDQ0 ICAwMi8xMiAgRzAgLCAgICBDb21tYSAgICAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICov CisgNDUsICAvKiAgMDQ1ICAwMi8xMyAgRzAgLSAgICBIeXBoZW4sIG1pbnVzIHNpZ24gICAgICAg ID0+ICAoc2VsZikgICovCisgNDYsICAvKiAgMDQ2ICAwMi8xNCAgRzAgLiAgICBQZXJpb2QsIGZ1 bGwgc3RvcCAgICAgICAgID0+ICAoc2VsZikgICovCisgNDcsICAvKiAgMDQ3ICAwMi8xNSAgRzAg LyAgICBTbGFzaCwgc29saWR1cyAgICAgICAgICAgID0+ICAoc2VsZikgICovCisgNDgsICAvKiAg MDQ4ICAwMy8wMCAgRzAgMCAgICBEaWdpdCAwICAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikg ICovCisgNDksICAvKiAgMDQ5ICAwMy8wMSAgRzAgMSAgICBEaWdpdCAxICAgICAgICAgICAgICAg ICAgID0+ICAoc2VsZikgICovCisgNTAsICAvKiAgMDUwICAwMy8wMiAgRzAgMiAgICBEaWdpdCAy ICAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCisgNTEsICAvKiAgMDUxICAwMy8wMyAg RzAgMyAgICBEaWdpdCAzICAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCisgNTIsICAv KiAgMDUyICAwMy8wNCAgRzAgNCAgICBEaWdpdCA0ICAgICAgICAgICAgICAgICAgID0+ICAoc2Vs ZikgICovCisgNTMsICAvKiAgMDUzICAwMy8wNSAgRzAgNSAgICBEaWdpdCA1ICAgICAgICAgICAg ICAgICAgID0+ICAoc2VsZikgICovCisgNTQsICAvKiAgMDU0ICAwMy8wNiAgRzAgNiAgICBEaWdp dCA2ICAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCisgNTUsICAvKiAgMDU1ICAwMy8w NyAgRzAgNyAgICBEaWdpdCA3ICAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCisgNTYs ICAvKiAgMDU2ICAwMy8wOCAgRzAgOCAgICBEaWdpdCA4ICAgICAgICAgICAgICAgICAgID0+ICAo c2VsZikgICovCisgNTcsICAvKiAgMDU3ICAwMy8wOSAgRzAgOSAgICBEaWdpdCA5ICAgICAgICAg ICAgICAgICAgID0+ICAoc2VsZikgICovCisgNTgsICAvKiAgMDU4ICAwMy8xMCAgRzAgOiAgICBD b2xvbiAgICAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCisgNTksICAvKiAgMDU5ICAw My8xMSAgRzAgOyAgICBTZW1pY29sb24gICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCisg NjAsICAvKiAgMDYwICAwMy8xMiAgRzAgPCAgICBMZXNzLXRoYW4gc2lnbiAgICAgICAgICAgID0+ ICAoc2VsZikgICovCisgNjEsICAvKiAgMDYxICAwMy8xMyAgRzAgPSAgICBFcXVhbHMgc2lnbiAg ICAgICAgICAgICAgID0+ICAoc2VsZikgICovCisgNjIsICAvKiAgMDYyICAwMy8xNCAgRzAgPiAg ICBHcmVhdGVyLXRoYW4gc2lnbiAgICAgICAgID0+ICAoc2VsZikgICovCisgNjMsICAvKiAgMDYz ICAwMy8xNSAgRzAgPyAgICBRdWVzdGlvbiBtYXJrICAgICAgICAgICAgID0+ICAoc2VsZikgICov CisgNjQsICAvKiAgMDY0ICAwNC8wMCAgRzAgQCAgICBDb21tZXJjaWFsIGF0IHNpZ24gICAgICAg ID0+ICAoc2VsZikgICovCisgNjUsICAvKiAgMDY1ICAwNC8wMSAgRzAgQSAgICBMZXR0ZXIgQSAg ICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCisgNjYsICAvKiAgMDY2ICAwNC8wMiAgRzAg QiAgICBMZXR0ZXIgQiAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCisgNjcsICAvKiAg MDY3ICAwNC8wMyAgRzAgQyAgICBMZXR0ZXIgQyAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikg ICovCisgNjgsICAvKiAgMDY4ICAwNC8wNCAgRzAgRCAgICBMZXR0ZXIgRCAgICAgICAgICAgICAg ICAgID0+ICAoc2VsZikgICovCisgNjksICAvKiAgMDY5ICAwNC8wNSAgRzAgRSAgICBMZXR0ZXIg RSAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCisgNzAsICAvKiAgMDcwICAwNC8wNiAg RzAgRiAgICBMZXR0ZXIgRiAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCisgNzEsICAv KiAgMDcxICAwNC8wNyAgRzAgRyAgICBMZXR0ZXIgRyAgICAgICAgICAgICAgICAgID0+ICAoc2Vs ZikgICovCisgNzIsICAvKiAgMDcyICAwNC8wOCAgRzAgSCAgICBMZXR0ZXIgSCAgICAgICAgICAg ICAgICAgID0+ICAoc2VsZikgICovCisgNzMsICAvKiAgMDczICAwNC8wOSAgRzAgSSAgICBMZXR0 ZXIgSSAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCisgNzQsICAvKiAgMDc0ICAwNC8x MCAgRzAgSiAgICBMZXR0ZXIgSiAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCisgNzUs ICAvKiAgMDc1ICAwNC8xMSAgRzAgSyAgICBMZXR0ZXIgSyAgICAgICAgICAgICAgICAgID0+ICAo c2VsZikgICovCisgNzYsICAvKiAgMDc2ICAwNC8xMiAgRzAgTCAgICBMZXR0ZXIgTCAgICAgICAg ICAgICAgICAgID0+ICAoc2VsZikgICovCisgNzcsICAvKiAgMDc3ICAwNC8xMyAgRzAgTSAgICBM ZXR0ZXIgTSAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCisgNzgsICAvKiAgMDc4ICAw NC8xNCAgRzAgTiAgICBMZXR0ZXIgTiAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCisg NzksICAvKiAgMDc5ICAwNC8xNSAgRzAgTyAgICBMZXR0ZXIgTyAgICAgICAgICAgICAgICAgID0+ ICAoc2VsZikgICovCisgODAsICAvKiAgMDgwICAwNS8wMCAgRzAgUCAgICBMZXR0ZXIgUCAgICAg ICAgICAgICAgICAgID0+ICAoc2VsZikgICovCisgODEsICAvKiAgMDgxICAwNS8wMSAgRzAgUSAg ICBMZXR0ZXIgUSAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCisgODIsICAvKiAgMDgy ICAwNS8wMiAgRzAgUiAgICBMZXR0ZXIgUiAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICov CisgODMsICAvKiAgMDgzICAwNS8wMyAgRzAgUyAgICBMZXR0ZXIgUyAgICAgICAgICAgICAgICAg ID0+ICAoc2VsZikgICovCisgODQsICAvKiAgMDg0ICAwNS8wNCAgRzAgVCAgICBMZXR0ZXIgVCAg ICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCisgODUsICAvKiAgMDg1ICAwNS8wNSAgRzAg VSAgICBMZXR0ZXIgVSAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCisgODYsICAvKiAg MDg2ICAwNS8wNiAgRzAgViAgICBMZXR0ZXIgViAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikg ICovCisgODcsICAvKiAgMDg3ICAwNS8wNyAgRzAgVyAgICBMZXR0ZXIgVyAgICAgICAgICAgICAg ICAgID0+ICAoc2VsZikgICovCisgODgsICAvKiAgMDg4ICAwNS8wOCAgRzAgWCAgICBMZXR0ZXIg WCAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCisgODksICAvKiAgMDg5ICAwNS8wOSAg RzAgWSAgICBMZXR0ZXIgWSAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCisgOTAsICAv KiAgMDkwICAwNS8xMCAgRzAgWiAgICBMZXR0ZXIgWiAgICAgICAgICAgICAgICAgID0+ICAoc2Vs ZikgICovCisgOTEsICAvKiAgMDkxICAwNS8xMSAgRzAgWyAgICBMZWZ0IHNxdWFyZSBicmFja2V0 ICAgICAgID0+ICAoc2VsZikgICovCisgOTIsICAvKiAgMDkyICAwNS8xMiAgRzAgXCAgICBSZXZl cnNlIHNsYXNoICAgICAgICAgICAgID0+ICAoc2VsZikgICovCisgOTMsICAvKiAgMDkzICAwNS8x MyAgRzAgXSAgICBSaWdodCBzcXVhcmUgYnJhY2tldCAgICAgID0+ICAoc2VsZikgICovCisgOTQs ICAvKiAgMDk0ICAwNS8xNCAgRzAgXiAgICBDaXJjdW1mbGV4IGFjY2VudCAgICAgICAgID0+ICAo c2VsZikgICovCisgOTUsICAvKiAgMDk1ICAwNS8xNSAgRzAgXyAgICBVbmRlcmxpbmUsIGxvdyBs aW5lICAgICAgID0+ICAoc2VsZikgICovCisgOTYsICAvKiAgMDk2ICAwNi8wMCAgRzAgYCAgICBH cmF2ZSBhY2NlbnQgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCisgOTcsICAvKiAgMDk3ICAw Ni8wMSAgRzAgYSAgICBMZXR0ZXIgYSAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCisg OTgsICAvKiAgMDk4ICAwNi8wMiAgRzAgYiAgICBMZXR0ZXIgYiAgICAgICAgICAgICAgICAgID0+ ICAoc2VsZikgICovCisgOTksICAvKiAgMDk5ICAwNi8wMyAgRzAgYyAgICBMZXR0ZXIgYyAgICAg ICAgICAgICAgICAgID0+ICAoc2VsZikgICovCisxMDAsICAvKiAgMTAwICAwNi8wNCAgRzAgZCAg ICBMZXR0ZXIgZCAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCisxMDEsICAvKiAgMTAx ICAwNi8wNSAgRzAgZSAgICBMZXR0ZXIgZSAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICov CisxMDIsICAvKiAgMTAyICAwNi8wNiAgRzAgZiAgICBMZXR0ZXIgZiAgICAgICAgICAgICAgICAg ID0+ICAoc2VsZikgICovCisxMDMsICAvKiAgMTAzICAwNi8wNyAgRzAgZyAgICBMZXR0ZXIgZyAg ICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCisxMDQsICAvKiAgMTA0ICAwNi8wOCAgRzAg aCAgICBMZXR0ZXIgaCAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCisxMDUsICAvKiAg MTA1ICAwNi8wOSAgRzAgaSAgICBMZXR0ZXIgaSAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikg ICovCisxMDYsICAvKiAgMTA2ICAwNi8xMCAgRzAgaiAgICBMZXR0ZXIgaiAgICAgICAgICAgICAg ICAgID0+ICAoc2VsZikgICovCisxMDcsICAvKiAgMTA3ICAwNi8xMSAgRzAgayAgICBMZXR0ZXIg ayAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCisxMDgsICAvKiAgMTA4ICAwNi8xMiAg RzAgbCAgICBMZXR0ZXIgbCAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCisxMDksICAv KiAgMTA5ICAwNi8xMyAgRzAgbSAgICBMZXR0ZXIgbSAgICAgICAgICAgICAgICAgID0+ICAoc2Vs ZikgICovCisxMTAsICAvKiAgMTEwICAwNi8xNCAgRzAgbiAgICBMZXR0ZXIgbiAgICAgICAgICAg ICAgICAgID0+ICAoc2VsZikgICovCisxMTEsICAvKiAgMTExICAwNi8xNSAgRzAgbyAgICBMZXR0 ZXIgbyAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCisxMTIsICAvKiAgMTEyICAwNy8w MCAgRzAgcCAgICBMZXR0ZXIgcCAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCisxMTMs ICAvKiAgMTEzICAwNy8wMSAgRzAgcSAgICBMZXR0ZXIgcSAgICAgICAgICAgICAgICAgID0+ICAo c2VsZikgICovCisxMTQsICAvKiAgMTE0ICAwNy8wMiAgRzAgciAgICBMZXR0ZXIgciAgICAgICAg ICAgICAgICAgID0+ICAoc2VsZikgICovCisxMTUsICAvKiAgMTE1ICAwNy8wMyAgRzAgcyAgICBM ZXR0ZXIgcyAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCisxMTYsICAvKiAgMTE2ICAw Ny8wNCAgRzAgdCAgICBMZXR0ZXIgdCAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCisx MTcsICAvKiAgMTE3ICAwNy8wNSAgRzAgdSAgICBMZXR0ZXIgdSAgICAgICAgICAgICAgICAgID0+ ICAoc2VsZikgICovCisxMTgsICAvKiAgMTE4ICAwNy8wNiAgRzAgdiAgICBMZXR0ZXIgdiAgICAg ICAgICAgICAgICAgID0+ICAoc2VsZikgICovCisxMTksICAvKiAgMTE5ICAwNy8wNyAgRzAgdyAg ICBMZXR0ZXIgdyAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCisxMjAsICAvKiAgMTIw ICAwNy8wOCAgRzAgeCAgICBMZXR0ZXIgeCAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICov CisxMjEsICAvKiAgMTIxICAwNy8wOSAgRzAgeSAgICBMZXR0ZXIgeSAgICAgICAgICAgICAgICAg ID0+ICAoc2VsZikgICovCisxMjIsICAvKiAgMTIyICAwNy8xMCAgRzAgeiAgICBMZXR0ZXIgeiAg ICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCisxMjMsICAvKiAgMTIzICAwNy8xMSAgRzAg eyAgICBMZWZ0IGN1cmx5IGJyYWNrZXQgICAgICAgID0+ICAoc2VsZikgICovCisxMjQsICAvKiAg MTI0ICAwNy8xMiAgRzAgfCAgICBWZXJ0aWNhbCBiYXIgICAgICAgICAgICAgID0+ICAoc2VsZikg ICovCisxMjUsICAvKiAgMTI1ICAwNy8xMyAgRzAgfSAgICBSaWdodCBjdXJseSBicmFja2V0ICAg ICAgID0+ICAoc2VsZikgICovCisxMjYsICAvKiAgMTI2ICAwNy8xNCAgRzAgfiAgICBUaWxkZSAg ICAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCisxMjcsICAvKiAgMTI3ICAwNy8xNSAg ICAgREVMICBEZWxldGUsIFJ1Ym91dCAgICAgICAgICAgID0+ICAoc2VsZikgICovCitVTkssICAv KiAgMTI4ICAwOC8wMCAgQzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICBVTksg ICAgICovCitVTkssICAvKiAgMTI5ICAwOC8wMSAgQzEgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgID0+ICBVTksgICAgICovCitVTkssICAvKiAgMTMwICAwOC8wMiAgQzEgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgID0+ICBVTksgICAgICovCitVTkssICAvKiAgMTMxICAwOC8w MyAgQzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICBVTksgICAgICovCitVTkss ICAvKiAgMTMyICAwOC8wNCAgQzEgSU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICBV TksgICAgICovCitVTkssICAvKiAgMTMzICAwOC8wNSAgQzEgTkVMICAgICAgICAgICAgICAgICAg ICAgICAgICAgID0+ICBVTksgICAgICovCitVTkssICAvKiAgMTM0ICAwOC8wNiAgQzEgU1NBICAg ICAgICAgICAgICAgICAgICAgICAgICAgID0+ICBVTksgICAgICovCitVTkssICAvKiAgMTM1ICAw OC8wNyAgQzEgRVNBICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICBVTksgICAgICovCitV TkssICAvKiAgMTM2ICAwOC8wOCAgQzEgSFRTICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ ICBVTksgICAgICovCitVTkssICAvKiAgMTM3ICAwOC8wOSAgQzEgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgID0+ICBVTksgICAgICovCitVTkssICAvKiAgMTM4ICAwOC8xMCAgQzEgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICBVTksgICAgICovCitVTkssICAvKiAgMTM5 ICAwOC8xMSAgQzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICBVTksgICAgICov CitVTkssICAvKiAgMTQwICAwOC8xMiAgQzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ID0+ICBVTksgICAgICovCitVTkssICAvKiAgMTQxICAwOC8xMyAgQzEgUkkgICAgICAgICAgICAg ICAgICAgICAgICAgICAgID0+ICBVTksgICAgICovCitVTkssICAvKiAgMTQyICAwOC8xNCAgQzEg U1MyICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICBVTksgICAgICovCitVTkssICAvKiAg MTQzICAwOC8xNSAgQzEgU1MzICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICBVTksgICAg ICovCitVTkssICAvKiAgMTQ0ICAwOS8wMCAgQzEgRENTICAgICAgICAgICAgICAgICAgICAgICAg ICAgID0+ICBVTksgICAgICovCitVTkssICAvKiAgMTQ1ICAwOS8wMSAgQzEgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgID0+ICBVTksgICAgICovCitVTkssICAvKiAgMTQ2ICAwOS8wMiAg QzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICBVTksgICAgICovCitVTkssICAv KiAgMTQ3ICAwOS8wMyAgQzEgU1RTICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICBVTksg ICAgICovCitVTkssICAvKiAgMTQ4ICAwOS8wNCAgQzEgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgID0+ICBVTksgICAgICovCitVTkssICAvKiAgMTQ5ICAwOS8wNSAgQzEgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgID0+ICBVTksgICAgICovCitVTkssICAvKiAgMTUwICAwOS8w NiAgQzEgU1BBICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICBVTksgICAgICovCitVTkss ICAvKiAgMTUxICAwOS8wNyAgQzEgRVBBICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICBV TksgICAgICovCitVTkssICAvKiAgMTUyICAwOS8wOCAgQzEgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgID0+ICBVTksgICAgICovCitVTkssICAvKiAgMTUzICAwOS8wOSAgQzEgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgID0+ICBVTksgICAgICovCitVTkssICAvKiAgMTU0ICAw OS8xMCAgQzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICBVTksgICAgICovCitV TkssICAvKiAgMTU1ICAwOS8xMSAgQzEgQ1NJICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ ICBVTksgICAgICovCitVTkssICAvKiAgMTU2ICAwOS8xMiAgQzEgU1QgICAgICAgICAgICAgICAg ICAgICAgICAgICAgID0+ICBVTksgICAgICovCitVTkssICAvKiAgMTU3ICAwOS8xMyAgQzEgT1ND ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICBVTksgICAgICovCitVTkssICAvKiAgMTU4 ICAwOS8xNCAgQzEgUE0gICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICBVTksgICAgICov CitVTkssICAvKiAgMTU5ICAwOS8xNSAgQzEgQVBDICAgICAgICAgICAgICAgICAgICAgICAgICAg ID0+ICBVTksgICAgICovCisgMzIsICAvKiAgMTYwICAxMC8wMCAgRzEgICAgICBOby1icmVhayBz cGFjZSAgICAgICAgICAgID0+ICBTUCAgICAgICovCisgMzMsICAvKiAgMTYxICAxMC8wMSAgRzEg ICAgICBJbnZlcnRlZCBleGNsYW1hdGlvbiAgICAgID0+ICAhICAgICAgICovCisgOTksICAvKiAg MTYyICAxMC8wMiAgRzEgICAgICBDZW50IHNpZ24gICAgICAgICAgICAgICAgID0+ICBjICAgICAg ICovCisgMzUsICAvKiAgMTYzICAxMC8wMyAgRzEgICAgICBQb3VuZCBzaWduICAgICAgICAgICAg ICAgID0+ICAjICAgICAgICovCisgMzYsICAvKiAgMTY0ICAxMC8wNCAgRzEgICAgICBDdXJyZW5j eSBzaWduICAgICAgICAgICAgID0+ICAkICAgICAgICovCisgODksICAvKiAgMTY1ICAxMC8wNSAg RzEgICAgICBZZW4gc2lnbiAgICAgICAgICAgICAgICAgID0+ICBZICAgICAgICovCisxMjQsICAv KiAgMTY2ICAxMC8wNiAgRzEgICAgICBCcm9rZW4gYmFyICAgICAgICAgICAgICAgID0+ICB8ICAg ICAgICovCisgODAsICAvKiAgMTY3ICAxMC8wNyAgRzEgICAgICBQYXJhZ3JhcGggc2lnbiAgICAg ICAgICAgID0+ICBQICAgICAgICovCisgMzQsICAvKiAgMTY4ICAxMC8wOCAgRzEgICAgICBEaWFl cmVzaXMgICAgICAgICAgICAgICAgID0+ICAiICAgICAgICovCisgNjcsICAvKiAgMTY5ICAxMC8w OSAgRzEgICAgICBDb3B5cmlnaHQgc2lnbiAgICAgICAgICAgID0+ICBDICAgICAgICovCisgOTcs ICAvKiAgMTcwICAxMC8xMCAgRzEgICAgICBGZW1pbmluZSBvcmRpbmFsICAgICAgICAgID0+ICBh ICAgICAgICovCisgMzQsICAvKiAgMTcxICAxMC8xMSAgRzEgICAgICBMZWZ0IGFuZ2xlIHF1b3Rh dGlvbiAgICAgID0+ICAiICAgICAgICovCisxMjYsICAvKiAgMTcyICAxMC8xMiAgRzEgICAgICBO b3Qgc2lnbiAgICAgICAgICAgICAgICAgID0+ICB+ICAgICAgICovCisgNDUsICAvKiAgMTczICAx MC8xMyAgRzEgICAgICBTb2Z0IGh5cGhlbiAgICAgICAgICAgICAgID0+ICAtICAgICAgICovCisg ODIsICAvKiAgMTc0ICAxMC8xNCAgRzEgICAgICBSZWdpc3RlcmVkIHRyYWRlIG1hcmsgICAgID0+ ICBSICAgICAgICovCisgOTUsICAvKiAgMTc1ICAxMC8xNSAgRzEgICAgICBNYWNyb24gICAgICAg ICAgICAgICAgICAgID0+ICBfICAgICAgICovCisxMTEsICAvKiAgMTc2ICAxMS8wMCAgRzEgICAg ICBEZWdyZWUgc2lnbiwgcmluZyBhYm92ZSAgID0+ICBvICAgICAgICovCitVTkssICAvKiAgMTc3 ICAxMS8wMSAgRzEgICAgICBQbHVzLW1pbnVzIHNpZ24gICAgICAgICAgID0+ICBVTksgICAgICov CisgNTAsICAvKiAgMTc4ICAxMS8wMiAgRzEgICAgICBTdXBlcnNjcmlwdCB0d28gICAgICAgICAg ID0+ICAyICAgICAgICovCisgNTEsICAvKiAgMTc5ICAxMS8wMyAgRzEgICAgICBTdXBlcnNjcmlw dCB0aHJlZSAgICAgICAgID0+ICAzICAgICAgICovCisgMzksICAvKiAgMTgwICAxMS8wNCAgRzEg ICAgICBBY3V0ZSBhY2NlbnQgICAgICAgICAgICAgID0+ICAnICAgICAgICovCisxMTcsICAvKiAg MTgxICAxMS8wNSAgRzEgICAgICBNaWNybyBzaWduICAgICAgICAgICAgICAgID0+ICB1ICAgICAg ICovCisgNDUsICAvKiAgMTgyICAxMS8wNiAgRzEgICAgICBQaWxjcm93IHNpZ24gICAgICAgICAg ICAgID0+ICAtICAgICAgICovCisgNDUsICAvKiAgMTgzICAxMS8wNyAgRzEgICAgICBNaWRkbGUg ZG90ICAgICAgICAgICAgICAgID0+ICAtICAgICAgICovCisgNDQsICAvKiAgMTg0ICAxMS8wOCAg RzEgICAgICBDZWRpbGxhICAgICAgICAgICAgICAgICAgID0+ICAsICAgICAgICovCisgNDksICAv KiAgMTg1ICAxMS8wOSAgRzEgICAgICBTdXBlcnNjcmlwdCBvbmUgICAgICAgICAgID0+ICAxICAg ICAgICovCisxMTEsICAvKiAgMTg2ICAxMS8xMCAgRzEgICAgICBNYXNjdWxpbmUgb3JkaW5hbCAg ICAgICAgID0+ICBvICAgICAgICovCisgMzQsICAvKiAgMTg3ICAxMS8xMSAgRzEgICAgICBSaWdo dCBhbmdsZSBxdW90YXRpb24gICAgID0+ICAiICAgICAgICovCitVTkssICAvKiAgMTg4ICAxMS8x MiAgRzEgICAgICBPbmUgcXVhcnRlciAgICAgICAgICAgICAgID0+ICBVTksgICAgICovCitVTkss ICAvKiAgMTg5ICAxMS8xMyAgRzEgICAgICBPbmUgaGFsZiAgICAgICAgICAgICAgICAgID0+ICBV TksgICAgICovCitVTkssICAvKiAgMTkwICAxMS8xNCAgRzEgICAgICBUaHJlZSBxdWFydGVycyAg ICAgICAgICAgID0+ICBVTksgICAgICovCisgNjMsICAvKiAgMTkxICAxMS8xNSAgRzEgICAgICBJ bnZlcnRlZCBxdWVzdGlvbiBtYXJrICAgID0+ICA/ICAgICAgICovCisgNjUsICAvKiAgMTkyICAx Mi8wMCAgRzEgICAgICBBIGdyYXZlICAgICAgICAgICAgICAgICAgID0+ICBBICAgICAgICovCisg NjUsICAvKiAgMTkzICAxMi8wMSAgRzEgICAgICBBIGFjdXRlICAgICAgICAgICAgICAgICAgID0+ ICBBICAgICAgICovCisgNjUsICAvKiAgMTk0ICAxMi8wMiAgRzEgICAgICBBIGNpcmN1bWZsZXgg ICAgICAgICAgICAgID0+ICBBICAgICAgICovCisgNjUsICAvKiAgMTk1ICAxMi8wMyAgRzEgICAg ICBBIHRpbGRlICAgICAgICAgICAgICAgICAgID0+ICBBICAgICAgICovCisgNjUsICAvKiAgMTk2 ICAxMi8wNCAgRzEgICAgICBBIGRpYWVyZXNpcyAgICAgICAgICAgICAgID0+ICBBICAgICAgICov CisgNjUsICAvKiAgMTk3ICAxMi8wNSAgRzEgICAgICBBIHJpbmcgYWJvdmUgICAgICAgICAgICAg ID0+ICBBICAgICAgICovCisgNjUsICAvKiAgMTk4ICAxMi8wNiAgRzEgICAgICBBIHdpdGggRSAg ICAgICAgICAgICAgICAgID0+ICBBICAgICAgICovCisgNjcsICAvKiAgMTk5ICAxMi8wNyAgRzEg ICAgICBDIENlZGlsbGEgICAgICAgICAgICAgICAgID0+ICBDICAgICAgICovCisgNjksICAvKiAg MjAwICAxMi8wOCAgRzEgICAgICBFIGdyYXZlICAgICAgICAgICAgICAgICAgID0+ICBFICAgICAg ICovCisgNjksICAvKiAgMjAxICAxMi8wOSAgRzEgICAgICBFIGFjdXRlICAgICAgICAgICAgICAg ICAgID0+ICBFICAgICAgICovCisgNjksICAvKiAgMjAyICAxMi8xMCAgRzEgICAgICBFIGNpcmN1 bWZsZXggICAgICAgICAgICAgID0+ICBFICAgICAgICovCisgNjksICAvKiAgMjAzICAxMi8xMSAg RzEgICAgICBFIGRpYWVyZXNpcyAgICAgICAgICAgICAgID0+ICBFICAgICAgICovCisgNzMsICAv KiAgMjA0ICAxMi8xMiAgRzEgICAgICBJIGdyYXZlICAgICAgICAgICAgICAgICAgID0+ICBJICAg ICAgICovCisgNzMsICAvKiAgMjA1ICAxMi8xMyAgRzEgICAgICBJIGFjdXRlICAgICAgICAgICAg ICAgICAgID0+ICBJICAgICAgICovCisgNzMsICAvKiAgMjA2ICAxMi8xNCAgRzEgICAgICBJIGNp cmN1bWZsZXggICAgICAgICAgICAgID0+ICBJICAgICAgICovCisgNzMsICAvKiAgMjA3ICAxMi8x NSAgRzEgICAgICBJIGRpYWVyZXNpcyAgICAgICAgICAgICAgID0+ICBJICAgICAgICovCisgNjgs ICAvKiAgMjA4ICAxMy8wMCAgRzEgICAgICBJY2VsYW5kaWMgRXRoICAgICAgICAgICAgID0+ICBE ICAgICAgICovCisgNzgsICAvKiAgMjA5ICAxMy8wMSAgRzEgICAgICBOIHRpbGRlICAgICAgICAg ICAgICAgICAgID0+ICBOICAgICAgICovCisgNzksICAvKiAgMjEwICAxMy8wMiAgRzEgICAgICBP IGdyYXZlICAgICAgICAgICAgICAgICAgID0+ICBPICAgICAgICovCisgNzksICAvKiAgMjExICAx My8wMyAgRzEgICAgICBPIGFjdXRlICAgICAgICAgICAgICAgICAgID0+ICBPICAgICAgICovCisg NzksICAvKiAgMjEyICAxMy8wNCAgRzEgICAgICBPIGNpcmN1bWZsZXggICAgICAgICAgICAgID0+ ICBPICAgICAgICovCisgNzksICAvKiAgMjEzICAxMy8wNSAgRzEgICAgICBPIHRpbGRlICAgICAg ICAgICAgICAgICAgID0+ICBPICAgICAgICovCisgNzksICAvKiAgMjE0ICAxMy8wNiAgRzEgICAg ICBPIGRpYWVyZXNpcyAgICAgICAgICAgICAgID0+ICBPICAgICAgICovCisxMjAsICAvKiAgMjE1 ICAxMy8wNyAgRzEgICAgICBNdWx0aXBsaWNhdGlvbiBzaWduICAgICAgID0+ICB4ICAgICAgICov CisgNzksICAvKiAgMjE2ICAxMy8wOCAgRzEgICAgICBPIG9ibGlxdWUgc3Ryb2tlICAgICAgICAg ID0+ICBPICAgICAgICovCisgODUsICAvKiAgMjE3ICAxMy8wOSAgRzEgICAgICBVIGdyYXZlICAg ICAgICAgICAgICAgICAgID0+ICBVICAgICAgICovCisgODUsICAvKiAgMjE4ICAxMy8xMCAgRzEg ICAgICBVIGFjdXRlICAgICAgICAgICAgICAgICAgID0+ICBVICAgICAgICovCisgODUsICAvKiAg MjE5ICAxMy8xMSAgRzEgICAgICBVIGNpcmN1bWZsZXggICAgICAgICAgICAgID0+ICBVICAgICAg ICovCisgODUsICAvKiAgMjIwICAxMy8xMiAgRzEgICAgICBVIGRpYWVyZXNpcyAgICAgICAgICAg ICAgID0+ICBVICAgICAgICovCisgODksICAvKiAgMjIxICAxMy8xMyAgRzEgICAgICBZIGFjdXRl ICAgICAgICAgICAgICAgICAgID0+ICBZICAgICAgICovCisgODQsICAvKiAgMjIyICAxMy8xNCAg RzEgICAgICBJY2VsYW5kaWMgVGhvcm4gICAgICAgICAgID0+ICBUICAgICAgICovCisxMTUsICAv KiAgMjIzICAxMy8xNSAgRzEgICAgICBHZXJtYW4gc2hhcnAgcyAgICAgICAgICAgID0+ICBzICAg ICAgICovCisgOTcsICAvKiAgMjI0ICAxNC8wMCAgRzEgICAgICBhIGdyYXZlICAgICAgICAgICAg ICAgICAgID0+ICBhICAgICAgICovCisgOTcsICAvKiAgMjI1ICAxNC8wMSAgRzEgICAgICBhIGFj dXRlICAgICAgICAgICAgICAgICAgID0+ICBhICAgICAgICovCisgOTcsICAvKiAgMjI2ICAxNC8w MiAgRzEgICAgICBhIGNpcmN1bWZsZXggICAgICAgICAgICAgID0+ICBhICAgICAgICovCisgOTcs ICAvKiAgMjI3ICAxNC8wMyAgRzEgICAgICBhIHRpbGRlICAgICAgICAgICAgICAgICAgID0+ICBh ICAgICAgICovCisgOTcsICAvKiAgMjI4ICAxNC8wNCAgRzEgICAgICBhIGRpYWVyZXNpcyAgICAg ICAgICAgICAgID0+ICBhICAgICAgICovCisgOTcsICAvKiAgMjI5ICAxNC8wNSAgRzEgICAgICBh IHJpbmcgYWJvdmUgICAgICAgICAgICAgID0+ICBhICAgICAgICovCisgOTcsICAvKiAgMjMwICAx NC8wNiAgRzEgICAgICBhIHdpdGggZSAgICAgICAgICAgICAgICAgID0+ICBhICAgICAgICovCisg OTksICAvKiAgMjMxICAxNC8wNyAgRzEgICAgICBjIGNlZGlsbGEgICAgICAgICAgICAgICAgID0+ ICBjICAgICAgICovCisxMDEsICAvKiAgMjMyICAxNC8wOCAgRzEgICAgICBlIGdyYXZlICAgICAg ICAgICAgICAgICAgID0+ICBlICAgICAgICovCisxMDEsICAvKiAgMjMzICAxNC8wOSAgRzEgICAg ICBlIGFjdXRlICAgICAgICAgICAgICAgICAgID0+ICBlICAgICAgICovCisxMDEsICAvKiAgMjM0 ICAxNC8xMCAgRzEgICAgICBlIGNpcmN1bWZsZXggICAgICAgICAgICAgID0+ICBlICAgICAgICov CisxMDEsICAvKiAgMjM1ICAxNC8xMSAgRzEgICAgICBlIGRpYWVyZXNpcyAgICAgICAgICAgICAg ID0+ICBlICAgICAgICovCisxMDUsICAvKiAgMjM2ICAxNC8xMiAgRzEgICAgICBpIGdyYXZlICAg ICAgICAgICAgICAgICAgID0+ICBpICAgICAgICovCisxMDUsICAvKiAgMjM3ICAxNC8xMyAgRzEg ICAgICBpIGFjdXRlICAgICAgICAgICAgICAgICAgID0+ICBpICAgICAgICovCisxMDUsICAvKiAg MjM4ICAxNC8xNCAgRzEgICAgICBpIGNpcmN1bWZsZXggICAgICAgICAgICAgID0+ICBpICAgICAg ICovCisxMDUsICAvKiAgMjM5ICAxNC8xNSAgRzEgICAgICBpIGRpYWVyZXNpcyAgICAgICAgICAg ICAgID0+ICBpICAgICAgICovCisxMDAsICAvKiAgMjQwICAxNS8wMCAgRzEgICAgICBJY2VsYW5k aWMgZXRoICAgICAgICAgICAgID0+ICBkICAgICAgICovCisxMTAsICAvKiAgMjQxICAxNS8wMSAg RzEgICAgICBuIHRpbGRlICAgICAgICAgICAgICAgICAgID0+ICBuICAgICAgICovCisxMTEsICAv KiAgMjQyICAxNS8wMiAgRzEgICAgICBvIGdyYXZlICAgICAgICAgICAgICAgICAgID0+ICBvICAg ICAgICovCisxMTEsICAvKiAgMjQzICAxNS8wMyAgRzEgICAgICBvIGFjdXRlICAgICAgICAgICAg ICAgICAgID0+ICBvICAgICAgICovCisxMTEsICAvKiAgMjQ0ICAxNS8wNCAgRzEgICAgICBvIGNp cmN1bWZsZXggICAgICAgICAgICAgID0+ICBvICAgICAgICovCisxMTEsICAvKiAgMjQ1ICAxNS8w NSAgRzEgICAgICBvIHRpbGRlICAgICAgICAgICAgICAgICAgID0+ICBvICAgICAgICovCisxMTEs ICAvKiAgMjQ2ICAxNS8wNiAgRzEgICAgICBvIGRpYWVyZXNpcyAgICAgICAgICAgICAgID0+ICBv ICAgICAgICovCisgNDcsICAvKiAgMjQ3ICAxNS8wNyAgRzEgICAgICBEaXZpc2lvbiBzaWduICAg ICAgICAgICAgID0+ICAvICAgICAgICovCisxMTEsICAvKiAgMjQ4ICAxNS8wOCAgRzEgICAgICBv IG9ibGlxdWUgc3Ryb2tlICAgICAgICAgID0+ICBvICAgICAgICovCisxMTcsICAvKiAgMjQ5ICAx NS8wOSAgRzEgICAgICB1IGdyYXZlICAgICAgICAgICAgICAgICAgID0+ICB1ICAgICAgICovCisx MTcsICAvKiAgMjUwICAxNS8xMCAgRzEgICAgICB1IGFjdXRlICAgICAgICAgICAgICAgICAgID0+ ICB1ICAgICAgICovCisxMTcsICAvKiAgMjUxICAxNS8xMSAgRzEgICAgICB1IGNpcmN1bWZsZXgg ICAgICAgICAgICAgID0+ICB1ICAgICAgICovCisxMTcsICAvKiAgMjUyICAxNS8xMiAgRzEgICAg ICB1IGRpYWVyZXNpcyAgICAgICAgICAgICAgID0+ICB1ICAgICAgICovCisxMjEsICAvKiAgMjUz ICAxNS8xMyAgRzEgICAgICB5IGFjdXRlICAgICAgICAgICAgICAgICAgID0+ICB5ICAgICAgICov CisxMTYsICAvKiAgMjU0ICAxNS8xNCAgRzEgICAgICBJY2VsYW5kaWMgdGhvcm4gICAgICAgICAg ID0+ICB0ICAgICAgICovCisxMjEgICAvKiAgMjU1ICAxNS8xNSAgRzEgICAgICB5IGRpYWVyZXNp cyAgICAgICAgICAgICAgID0+ICB5ICAgICAgICovCit9OworCisKKy8qIFRyYW5zbGF0aW9uIHRh YmxlcyBmb3IgSVNPIExhdGluIEFscGhhYmV0IDEgdG8gbG9jYWwgZmlsZSBjaGFyYWN0ZXIgc2V0 cyAqLworCisvKgorICBNb3N0IG9mIHRoZSByZW1haW5pbmcgdGFibGVzIGFyZSBub3QgYW5ub3Rh dGVkIGxpa2UgdGhlIG9uZSBhYm92ZSwgYmVjYXVzZQorICB0aGUgc2l6ZSBvZiB0aGUgcmVzdWx0 aW5nIHNvdXJjZSBmaWxlIHdvdWxkIGJlIHJpZGljdWxvdXMuICBFYWNoIHJvdyBpbiB0aGUKKyAg Zm9sbG93aW5nIHRhYmxlcyBjb3JyZXNwb25kcyB0byBhIGNvbHVtbiBvZiBJU08gODg1OS0xLgor Ki8KKworQ09OU1QgQ0hBUgoreWwxODVbXSA9IHsgIC8qIElTTyA4ODU5LTEgTGF0aW4gQWxwaGFi ZXQgMSAoTGF0aW4tMSkgdG8gSUJNIENvZGUgUGFnZSA4NTAgKi8KKy8qCisgIFRoaXMgaXMgYmFz ZWQgb24gSUJNJ3Mgb2ZmaWNpYWwgaW52ZXJ0aWJsZSB0cmFuc2xhdGlvbi4gIFJlZmVyZW5jZTog SUJNCisgIENoYXJhY3RlciBEYXRhIFJlcHJlc2VudGF0aW9uIEFyY2hpdGVjdHVyZSAoQ0RSQSks IExldmVsIDEsIFJlZ2lzdHJ5LAorICBTQzA5LTEyOTEtMDAgKDE5OTApLCBwLjE1Mi4gIChOb3Rl OiBMYXRpbi0xIGlzIElCTSBDb2RlIFBhZ2UgMDA4MTkuKSAgTm90ZToKKyAgSUJNJ3MgYml6YXJy ZSByZWFycmFuZ2VtZW50IG9mIEMwIGNvbnRyb2xzIGFuZCBERUwgaGFzIGJlZW4gdW5kb25lIGlu IHRoaXMKKyAgdGFibGUuCisqLworICAwLCAgIDEsICAgMiwgICAzLCAgIDQsICAgNSwgICA2LCAg IDcsICAgOCwgICA5LCAgMTAsICAxMSwgIDEyLCAgMTMsICAxNCwgIDE1LAorIDE2LCAgMTcsICAx OCwgIDE5LCAgMjAsICAyMSwgIDIyLCAgMjMsICAyNCwgIDI1LCAgMjYsICAyNywgIDI4LCAgMjks ICAzMCwgIDMxLAorIDMyLCAgMzMsICAzNCwgIDM1LCAgMzYsICAzNywgIDM4LCAgMzksICA0MCwg IDQxLCAgNDIsICA0MywgIDQ0LCAgNDUsICA0NiwgIDQ3LAorIDQ4LCAgNDksICA1MCwgIDUxLCAg NTIsICA1MywgIDU0LCAgNTUsICA1NiwgIDU3LCAgNTgsICA1OSwgIDYwLCAgNjEsICA2MiwgIDYz LAorIDY0LCAgNjUsICA2NiwgIDY3LCAgNjgsICA2OSwgIDcwLCAgNzEsICA3MiwgIDczLCAgNzQs ICA3NSwgIDc2LCAgNzcsICA3OCwgIDc5LAorIDgwLCAgODEsICA4MiwgIDgzLCAgODQsICA4NSwg IDg2LCAgODcsICA4OCwgIDg5LCAgOTAsICA5MSwgIDkyLCAgOTMsICA5NCwgIDk1LAorIDk2LCAg OTcsICA5OCwgIDk5LCAxMDAsIDEwMSwgMTAyLCAxMDMsIDEwNCwgMTA1LCAxMDYsIDEwNywgMTA4 LCAxMDksIDExMCwgMTExLAorMTEyLCAxMTMsIDExNCwgMTE1LCAxMTYsIDExNywgMTE4LCAxMTks IDEyMCwgMTIxLCAxMjIsIDEyMywgMTI0LCAxMjUsIDEyNiwgMTI3LAorMTg2LCAyMDUsIDIwMSwg MTg3LCAyMDAsIDE4OCwgMjA0LCAxODUsIDIwMywgMjAyLCAyMDYsIDIyMywgMjIwLCAyMTksIDI1 NCwgMjQyLAorMTc5LCAxOTYsIDIxOCwgMTkxLCAxOTIsIDIxNywgMTk1LCAxODAsIDE5NCwgMTkz LCAxOTcsIDE3NiwgMTc3LCAxNzgsIDIxMywgMTU5LAorMjU1LCAxNzMsIDE4OSwgMTU2LCAyMDcs IDE5MCwgMjIxLCAyNDUsIDI0OSwgMTg0LCAxNjYsIDE3NCwgMTcwLCAyNDAsIDE2OSwgMjM4LAor MjQ4LCAyNDEsIDI1MywgMjUyLCAyMzksIDIzMCwgMjQ0LCAyNTAsIDI0NywgMjUxLCAxNjcsIDE3 NSwgMTcyLCAxNzEsIDI0MywgMTY4LAorMTgzLCAxODEsIDE4MiwgMTk5LCAxNDIsIDE0MywgMTQ2 LCAxMjgsIDIxMiwgMTQ0LCAyMTAsIDIxMSwgMjIyLCAyMTQsIDIxNSwgMjE2LAorMjA5LCAxNjUs IDIyNywgMjI0LCAyMjYsIDIyOSwgMTUzLCAxNTgsIDE1NywgMjM1LCAyMzMsIDIzNCwgMTU0LCAy MzcsIDIzMiwgMjI1LAorMTMzLCAxNjAsIDEzMSwgMTk4LCAxMzIsIDEzNCwgMTQ1LCAxMzUsIDEz OCwgMTMwLCAxMzYsIDEzNywgMTQxLCAxNjEsIDE0MCwgMTM5LAorMjA4LCAxNjQsIDE0OSwgMTYy LCAxNDcsIDIyOCwgMTQ4LCAyNDYsIDE1NSwgMTUxLCAxNjMsIDE1MCwgMTI5LCAyMzYsIDIzMSwg MTUyCit9OworCitDT05TVCBDSEFSCit5ODVsMVtdID0geyAgLyogSUJNIENvZGUgUGFnZSA4NTAg dG8gTGF0aW4tMSAqLworLyoKKyAgVGhpcyBpcyBmcm9tIElCTSBDRFJBIHBhZ2UgMTUzLiAgSXQg aXMgdGhlIGludmVyc2Ugb2YgeWwxODVbXS4KKyAgQXMgb2YgZWRpdCAxODMsIHRoaXMgdGFibGUg aXMgbm8gbG9uZ2VyIHB1cmUgQ0RSQS4gIFRoZSB0cmFuc2xhdGlvbnMKKyAgaW52b2x2aW5nIEMw IGNvbnRyb2xzIGFuZCBERUwgaGF2ZSBiZWVuIHJlbW92ZWQuCisqLworICAwLCAgIDEsICAgMiwg ICAzLCAgIDQsICAgNSwgICA2LCAgIDcsICAgOCwgICA5LCAgMTAsICAxMSwgIDEyLCAgMTMsICAx NCwgIDE1LAorIDE2LCAgMTcsICAxOCwgIDE5LCAgMjAsICAyMSwgIDIyLCAgMjMsICAyNCwgIDI1 LCAgMjYsICAyNywgIDI4LCAgMjksICAzMCwgIDMxLAorIDMyLCAgMzMsICAzNCwgIDM1LCAgMzYs ICAzNywgIDM4LCAgMzksICA0MCwgIDQxLCAgNDIsICA0MywgIDQ0LCAgNDUsICA0NiwgIDQ3LAor IDQ4LCAgNDksICA1MCwgIDUxLCAgNTIsICA1MywgIDU0LCAgNTUsICA1NiwgIDU3LCAgNTgsICA1 OSwgIDYwLCAgNjEsICA2MiwgIDYzLAorIDY0LCAgNjUsICA2NiwgIDY3LCAgNjgsICA2OSwgIDcw LCAgNzEsICA3MiwgIDczLCAgNzQsICA3NSwgIDc2LCAgNzcsICA3OCwgIDc5LAorIDgwLCAgODEs ICA4MiwgIDgzLCAgODQsICA4NSwgIDg2LCAgODcsICA4OCwgIDg5LCAgOTAsICA5MSwgIDkyLCAg OTMsICA5NCwgIDk1LAorIDk2LCAgOTcsICA5OCwgIDk5LCAxMDAsIDEwMSwgMTAyLCAxMDMsIDEw NCwgMTA1LCAxMDYsIDEwNywgMTA4LCAxMDksIDExMCwgMTExLAorMTEyLCAxMTMsIDExNCwgMTE1 LCAxMTYsIDExNywgMTE4LCAxMTksIDEyMCwgMTIxLCAxMjIsIDEyMywgMTI0LCAxMjUsIDEyNiwg MTI3LAorMTk5LCAyNTIsIDIzMywgMjI2LCAyMjgsIDIyNCwgMjI5LCAyMzEsIDIzNCwgMjM1LCAy MzIsIDIzOSwgMjM4LCAyMzYsIDE5NiwgMTk3LAorMjAxLCAyMzAsIDE5OCwgMjQ0LCAyNDYsIDI0 MiwgMjUxLCAyNDksIDI1NSwgMjE0LCAyMjAsIDI0OCwgMTYzLCAyMTYsIDIxNSwgMTU5LAorMjI1 LCAyMzcsIDI0MywgMjUwLCAyNDEsIDIwOSwgMTcwLCAxODYsIDE5MSwgMTc0LCAxNzIsIDE4OSwg MTg4LCAxNjEsIDE3MSwgMTg3LAorMTU1LCAxNTYsIDE1NywgMTQ0LCAxNTEsIDE5MywgMTk0LCAx OTIsIDE2OSwgMTM1LCAxMjgsIDEzMSwgMTMzLCAxNjIsIDE2NSwgMTQ3LAorMTQ4LCAxNTMsIDE1 MiwgMTUwLCAxNDUsIDE1NCwgMjI3LCAxOTUsIDEzMiwgMTMwLCAxMzcsIDEzNiwgMTM0LCAxMjks IDEzOCwgMTY0LAorMjQwLCAyMDgsIDIwMiwgMjAzLCAyMDAsIDE1OCwgMjA1LCAyMDYsIDIwNywg MTQ5LCAxNDYsIDE0MSwgMTQwLCAxNjYsIDIwNCwgMTM5LAorMjExLCAyMjMsIDIxMiwgMjEwLCAy NDUsIDIxMywgMTgxLCAyNTQsIDIyMiwgMjE4LCAyMTksIDIxNywgMjUzLCAyMjEsIDE3NSwgMTgw LAorMTczLCAxNzcsIDE0MywgMTkwLCAxODIsIDE2NywgMjQ3LCAxODQsIDE3NiwgMTY4LCAxODMs IDE4NSwgMTc5LCAxNzgsIDE0MiwgMTYwCit9OworCisjaWZkZWYgQ09NTUVOVAorQ09OU1QgQ0hB UgoreWwxcjhbXSA9IHsgIC8qIExhdGluLTEgdG8gSGV3bGV0dCBQYWNrYXJkIFJvbWFuOCAqLwor LyogVGhpcyBpcyBIUCdzIG9mZmljaWFsIHRyYW5zbGF0aW9uLCBzdHJhaWdodCBmcm9tIGljb252 ICovCisvKiBJdCBpcyBOT1QgaW52ZXJ0aWJsZS4gKi8KKyAgMCwgICAxLCAgIDIsICAgMywgICA0 LCAgIDUsICAgNiwgICA3LCAgIDgsICAgOSwgIDEwLCAgMTEsICAxMiwgIDEzLCAgMTQsICAxNSwK KyAxNiwgIDE3LCAgMTgsICAxOSwgIDIwLCAgMjEsICAyMiwgIDIzLCAgMjQsICAyNSwgIDI2LCAg MjcsICAyOCwgIDI5LCAgMzAsICAzMSwKKyAzMiwgIDMzLCAgMzQsICAzNSwgIDM2LCAgMzcsICAz OCwgIDM5LCAgNDAsICA0MSwgIDQyLCAgNDMsICA0NCwgIDQ1LCAgNDYsICA0NywKKyA0OCwgIDQ5 LCAgNTAsICA1MSwgIDUyLCAgNTMsICA1NCwgIDU1LCAgNTYsICA1NywgIDU4LCAgNTksICA2MCwg IDYxLCAgNjIsICA2MywKKyA2NCwgIDY1LCAgNjYsICA2NywgIDY4LCAgNjksICA3MCwgIDcxLCAg NzIsICA3MywgIDc0LCAgNzUsICA3NiwgIDc3LCAgNzgsICA3OSwKKyA4MCwgIDgxLCAgODIsICA4 MywgIDg0LCAgODUsICA4NiwgIDg3LCAgODgsICA4OSwgIDkwLCAgOTEsICA5MiwgIDkzLCAgOTQs ICA5NSwKKyA5NiwgIDk3LCAgOTgsICA5OSwgMTAwLCAxMDEsIDEwMiwgMTAzLCAxMDQsIDEwNSwg MTA2LCAxMDcsIDEwOCwgMTA5LCAxMTAsIDExMSwKKzExMiwgMTEzLCAxMTQsIDExNSwgMTE2LCAx MTcsIDExOCwgMTE5LCAxMjAsIDEyMSwgMTIyLCAxMjMsIDEyNCwgMTI1LCAxMjYsIDEyNywKKzEy OCwgMTI5LCAxMzAsIDEzMSwgMTMyLCAxMzMsIDEzNCwgMTM1LCAxMzYsIDEzNywgMTM4LCAxMzks IDE0MCwgMTQxLCAxNDIsIDE0MywKKzE0NCwgMTQ1LCAxNDYsIDE0NywgMTQ4LCAxNDksIDE1MCwg MTUxLCAxNTIsIDE1MywgMTU0LCAxNTUsIDE1NiwgMTU3LCAxNTgsIDE1OSwKKzE2MCwgMTg0LCAx OTEsIDE4NywgMTg2LCAxODgsIDEyNCwgMTg5LCAxNzEsICA5OSwgMjQ5LCAyNTEsIDEyNiwgIDQ1 LCAgODIsIDE3NiwKKzE3OSwgMjU0LCAgNTAsICA1MSwgMTY4LCAyNDMsIDI0NCwgMjQyLCAgNDQs ICA0OSwgMjUwLCAyNTMsIDI0NywgMjQ4LCAyNDUsIDE4NSwKKzE2MSwgMjI0LCAxNjIsIDIyNSwg MjE2LCAyMDgsIDIxMSwgMTgwLCAxNjMsIDIyMCwgMTY0LCAxNjUsIDIzMCwgMjI5LCAxNjYsIDE2 NywKKzIyNywgMTgyLCAyMzIsIDIzMSwgMjIzLCAyMzMsIDIxOCwgMTIwLCAyMTAsIDE3MywgMjM3 LCAxNzQsIDIxOSwgMTc3LCAyNDAsIDIyMiwKKzIwMCwgMTk2LCAxOTIsIDIyNiwgMjA0LCAyMTIs IDIxNSwgMTgxLCAyMDEsIDE5NywgMTkzLCAyMDUsIDIxNywgMjEzLCAyMDksIDIyMSwKKzIyOCwg MTgzLCAyMDIsIDE5OCwgMTk0LCAyMzQsIDIwNiwgIDQ3LCAyMTQsIDIwMywgMTk5LCAxOTUsIDIw NywgMTc4LCAyNDEsIDIzOQorfTsKK0NPTlNUIENIQVIKK3lyOGwxW10gPSB7ICAvKiBIZXdsZXR0 IFBhY2thcmQgUm9tYW44IHRvIExhdGluLTEgKi8KKy8qIFRoaXMgaXMgSFAncyBvZmZpY2lhbCB0 cmFuc2xhdGlvbiwgc3RyYWlnaHQgZnJvbSBpY29udiAqLworLyogSXQgaXMgTk9UIGludmVydGli bGUuICovCisgIDAsICAgMSwgICAyLCAgIDMsICAgNCwgICA1LCAgIDYsICAgNywgICA4LCAgIDks ICAxMCwgIDExLCAgMTIsICAxMywgIDE0LCAgMTUsCisgMTYsICAxNywgIDE4LCAgMTksICAyMCwg IDIxLCAgMjIsICAyMywgIDI0LCAgMjUsICAyNiwgIDI3LCAgMjgsICAyOSwgIDMwLCAgMzEsCisg MzIsICAzMywgIDM0LCAgMzUsICAzNiwgIDM3LCAgMzgsICAzOSwgIDQwLCAgNDEsICA0MiwgIDQz LCAgNDQsICA0NSwgIDQ2LCAgNDcsCisgNDgsICA0OSwgIDUwLCAgNTEsICA1MiwgIDUzLCAgNTQs ICA1NSwgIDU2LCAgNTcsICA1OCwgIDU5LCAgNjAsICA2MSwgIDYyLCAgNjMsCisgNjQsICA2NSwg IDY2LCAgNjcsICA2OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAgNzMsICA3NCwgIDc1LCAgNzYsICA3 NywgIDc4LCAgNzksCisgODAsICA4MSwgIDgyLCAgODMsICA4NCwgIDg1LCAgODYsICA4NywgIDg4 LCAgODksICA5MCwgIDkxLCAgOTIsICA5MywgIDk0LCAgOTUsCisgOTYsICA5NywgIDk4LCAgOTks IDEwMCwgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3LCAxMDgsIDEwOSwgMTEwLCAx MTEsCisxMTIsIDExMywgMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgsIDExOSwgMTIwLCAxMjEsIDEy MiwgMTIzLCAxMjQsIDEyNSwgMTI2LCAxMjcsCisxMjgsIDEyOSwgMTMwLCAxMzEsIDEzMiwgMTMz LCAxMzQsIDEzNSwgMTM2LCAxMzcsIDEzOCwgMTM5LCAxNDAsIDE0MSwgMTQyLCAxNDMsCisxNDQs IDE0NSwgMTQ2LCAxNDcsIDE0OCwgMTQ5LCAxNTAsIDE1MSwgMTUyLCAxNTMsIDE1NCwgMTU1LCAx NTYsIDE1NywgMTU4LCAxNTksCisxNjAsIDE5MiwgMTk0LCAyMDAsIDIwMiwgMjAzLCAyMDYsIDIw NywgMTgwLCAgOTYsICA5NCwgMTY4LCAxMjYsIDIxNywgMjE5LCAxNjMsCisxNzUsIDIyMSwgMjUz LCAxNzYsIDE5OSwgMjMxLCAyMDksIDI0MSwgMTYxLCAxOTEsIDE2NCwgMTYzLCAxNjUsIDE2Nywg MTAyLCAxNjIsCisyMjYsIDIzNCwgMjQ0LCAyNTEsIDIyNSwgMjMzLCAyNDMsIDI1MCwgMjI0LCAy MzIsIDI0MiwgMjQ5LCAyMjgsIDIzNSwgMjQ2LCAyNTIsCisxOTcsIDIzOCwgMjE2LCAxOTgsIDIy OSwgMjM3LCAyNDgsIDIzMCwgMTk2LCAyMzYsIDIxNCwgMjIwLCAyMDEsIDIzOSwgMjIzLCAyMTIs CisxOTMsIDE5NSwgMjI3LCAyMDgsIDI0MCwgMjA1LCAyMDQsIDIxMSwgMjEwLCAyMTMsIDI0NSwg IDgzLCAxMTUsIDIxOCwgIDg5LCAyNTUsCisyMjIsIDI1NCwgMTgzLCAxODEsIDE4MiwgMTkwLCAg NDUsIDE4OCwgMTg5LCAxNzAsIDE4NiwgMTcxLCAgNDIsIDE4NywgMTc3LCAxNjAKK307CisjZWxz ZSAvKiAhQ09NTUVOVCAqLworLyogVGhpcyBpcyBhbiBpbnZlcnRpYmxlIG1hcHBpbmcsIGFwcHJv dmVkIGJ5IEhQIGluIEphbnVhcnkgMTk5NC4gKi8KK0NPTlNUIENIQVIKK3lsMXI4W10gPSB7ICAv KiBJU08gTGF0aW4tMSB0byBIUCBSb21hbjgsIEludmVydGlibGUgKi8KKyAgMCwgICAxLCAgIDIs ICAgMywgICA0LCAgIDUsICAgNiwgICA3LCAgIDgsICAgOSwgIDEwLCAgMTEsICAxMiwgIDEzLCAg MTQsICAxNSwKKyAxNiwgIDE3LCAgMTgsICAxOSwgIDIwLCAgMjEsICAyMiwgIDIzLCAgMjQsICAy NSwgIDI2LCAgMjcsICAyOCwgIDI5LCAgMzAsICAzMSwKKyAzMiwgIDMzLCAgMzQsICAzNSwgIDM2 LCAgMzcsICAzOCwgIDM5LCAgNDAsICA0MSwgIDQyLCAgNDMsICA0NCwgIDQ1LCAgNDYsICA0NywK KyA0OCwgIDQ5LCAgNTAsICA1MSwgIDUyLCAgNTMsICA1NCwgIDU1LCAgNTYsICA1NywgIDU4LCAg NTksICA2MCwgIDYxLCAgNjIsICA2MywKKyA2NCwgIDY1LCAgNjYsICA2NywgIDY4LCAgNjksICA3 MCwgIDcxLCAgNzIsICA3MywgIDc0LCAgNzUsICA3NiwgIDc3LCAgNzgsICA3OSwKKyA4MCwgIDgx LCAgODIsICA4MywgIDg0LCAgODUsICA4NiwgIDg3LCAgODgsICA4OSwgIDkwLCAgOTEsICA5Miwg IDkzLCAgOTQsICA5NSwKKyA5NiwgIDk3LCAgOTgsICA5OSwgMTAwLCAxMDEsIDEwMiwgMTAzLCAx MDQsIDEwNSwgMTA2LCAxMDcsIDEwOCwgMTA5LCAxMTAsIDExMSwKKzExMiwgMTEzLCAxMTQsIDEx NSwgMTE2LCAxMTcsIDExOCwgMTE5LCAxMjAsIDEyMSwgMTIyLCAxMjMsIDEyNCwgMTI1LCAxMjYs IDEyNywKKzEyOCwgMTI5LCAxMzAsIDEzMSwgMTMyLCAxMzMsIDEzNCwgMTM1LCAxMzYsIDEzNywg MTM4LCAxMzksIDE0MCwgMTQxLCAxNDIsIDE0MywKKzE0NCwgMTQ1LCAxNDYsIDE0NywgMTQ4LCAx NDksIDE1MCwgMTUxLCAxNTIsIDE1MywgMTU0LCAxNTUsIDE1NiwgMTU3LCAxNTgsIDE1OSwKKzE2 MCwgMTg0LCAxOTEsIDE4NywgMTg2LCAxODgsIDE2OSwgMTg5LCAxNzEsIDE3MCwgMjQ5LCAyNTEs IDE3MiwgMTc1LCAxOTAsIDE3NiwKKzE3OSwgMjU0LCAyMzUsIDIzNiwgMTY4LCAyNDMsIDI0NCwg MjQyLCAyMzgsIDI0NiwgMjUwLCAyNTMsIDI0NywgMjQ4LCAyNDUsIDE4NSwKKzE2MSwgMjI0LCAx NjIsIDIyNSwgMjE2LCAyMDgsIDIxMSwgMTgwLCAxNjMsIDIyMCwgMTY0LCAxNjUsIDIzMCwgMjI5 LCAxNjYsIDE2NywKKzIyNywgMTgyLCAyMzIsIDIzMSwgMjIzLCAyMzMsIDIxOCwgMjUyLCAyMTAs IDE3MywgMjM3LCAxNzQsIDIxOSwgMTc3LCAyNDAsIDIyMiwKKzIwMCwgMTk2LCAxOTIsIDIyNiwg MjA0LCAyMTIsIDIxNSwgMTgxLCAyMDEsIDE5NywgMTkzLCAyMDUsIDIxNywgMjEzLCAyMDksIDIy MSwKKzIyOCwgMTgzLCAyMDIsIDE5OCwgMTk0LCAyMzQsIDIwNiwgMjU1LCAyMTQsIDIwMywgMTk5 LCAxOTUsIDIwNywgMTc4LCAyNDEsIDIzOQorfTsKKworQ09OU1QgQ0hBUgoreXI4bDFbXSA9IHsg LyogSFAgUm9tYW44IHRvIElTTyBMYXRpbi0xLCBJbnZlcnRpYmxlICovCisgIDAsICAgMSwgICAy LCAgIDMsICAgNCwgICA1LCAgIDYsICAgNywgICA4LCAgIDksICAxMCwgIDExLCAgMTIsICAxMywg IDE0LCAgMTUsCisgMTYsICAxNywgIDE4LCAgMTksICAyMCwgIDIxLCAgMjIsICAyMywgIDI0LCAg MjUsICAyNiwgIDI3LCAgMjgsICAyOSwgIDMwLCAgMzEsCisgMzIsICAzMywgIDM0LCAgMzUsICAz NiwgIDM3LCAgMzgsICAzOSwgIDQwLCAgNDEsICA0MiwgIDQzLCAgNDQsICA0NSwgIDQ2LCAgNDcs CisgNDgsICA0OSwgIDUwLCAgNTEsICA1MiwgIDUzLCAgNTQsICA1NSwgIDU2LCAgNTcsICA1OCwg IDU5LCAgNjAsICA2MSwgIDYyLCAgNjMsCisgNjQsICA2NSwgIDY2LCAgNjcsICA2OCwgIDY5LCAg NzAsICA3MSwgIDcyLCAgNzMsICA3NCwgIDc1LCAgNzYsICA3NywgIDc4LCAgNzksCisgODAsICA4 MSwgIDgyLCAgODMsICA4NCwgIDg1LCAgODYsICA4NywgIDg4LCAgODksICA5MCwgIDkxLCAgOTIs ICA5MywgIDk0LCAgOTUsCisgOTYsICA5NywgIDk4LCAgOTksIDEwMCwgMTAxLCAxMDIsIDEwMywg MTA0LCAxMDUsIDEwNiwgMTA3LCAxMDgsIDEwOSwgMTEwLCAxMTEsCisxMTIsIDExMywgMTE0LCAx MTUsIDExNiwgMTE3LCAxMTgsIDExOSwgMTIwLCAxMjEsIDEyMiwgMTIzLCAxMjQsIDEyNSwgMTI2 LCAxMjcsCisxMjgsIDEyOSwgMTMwLCAxMzEsIDEzMiwgMTMzLCAxMzQsIDEzNSwgMTM2LCAxMzcs IDEzOCwgMTM5LCAxNDAsIDE0MSwgMTQyLCAxNDMsCisxNDQsIDE0NSwgMTQ2LCAxNDcsIDE0OCwg MTQ5LCAxNTAsIDE1MSwgMTUyLCAxNTMsIDE1NCwgMTU1LCAxNTYsIDE1NywgMTU4LCAxNTksCisx NjAsIDE5MiwgMTk0LCAyMDAsIDIwMiwgMjAzLCAyMDYsIDIwNywgMTgwLCAxNjYsIDE2OSwgMTY4 LCAxNzIsIDIxNywgMjE5LCAxNzMsCisxNzUsIDIyMSwgMjUzLCAxNzYsIDE5OSwgMjMxLCAyMDks IDI0MSwgMTYxLCAxOTEsIDE2NCwgMTYzLCAxNjUsIDE2NywgMTc0LCAxNjIsCisyMjYsIDIzNCwg MjQ0LCAyNTEsIDIyNSwgMjMzLCAyNDMsIDI1MCwgMjI0LCAyMzIsIDI0MiwgMjQ5LCAyMjgsIDIz NSwgMjQ2LCAyNTIsCisxOTcsIDIzOCwgMjE2LCAxOTgsIDIyOSwgMjM3LCAyNDgsIDIzMCwgMTk2 LCAyMzYsIDIxNCwgMjIwLCAyMDEsIDIzOSwgMjIzLCAyMTIsCisxOTMsIDE5NSwgMjI3LCAyMDgs IDI0MCwgMjA1LCAyMDQsIDIxMSwgMjEwLCAyMTMsIDI0NSwgMTc4LCAxNzksIDIxOCwgMTg0LCAy NTUsCisyMjIsIDI1NCwgMTgzLCAxODEsIDE4MiwgMTkwLCAxODUsIDE4OCwgMTg5LCAxNzAsIDE4 NiwgMTcxLCAyMTUsIDE4NywgMTc3LCAyNDcKK307CisjZW5kaWYgLyogQ09NTUVOVCAqLworCitD T05TVCBDSEFSCit5bDE0M1tdID0geyAgLyogTGF0aW4tMSB0byBJQk0gQ29kZSBQYWdlIDQzNyAq LworLyoKKyAgQWx0aG91Z2ggdGhlIElCTSBDRFJBIGRvZXMgbm90IGluY2x1ZGUgYW4gb2ZmaWNp YWwgdHJhbnNsYXRpb24gYmV0d2VlbiBDUDQzNworICBhbmQgSVNPIExhdGluIEFscGhhYmV0IDEs IGl0IGRvZXMgaW5jbHVkZSBhbiBvZmZpY2lhbCwgaW52ZXJ0aWJsZQorICB0cmFuc2xhdGlvbiBi ZXR3ZWVuIENQNDM3IGFuZCBDUDg1MCAocGFnZSAxOTYpLCBhbmQgYW5vdGhlciBmcm9tIENQODUw IHRvCisgIExhdGluLTEgKENQODE5KSAocGFnZSAxNTMpLiAgVGhpcyB0cmFuc2xhdGlvbiB3YXMg b2J0YWluZWQgd2l0aCBhIHR3by1zdGVwCisgIHByb2Nlc3MgYmFzZWQgb24gdGhvc2UgdGFibGVz LgorICBBcyBvZiBlZGl0IDE4MywgdGhlIHRyYW5zbGF0aW9uIGlzIG1vZGlmaWVkIHRvIGxlYXZl IEMwIGNvbnRyb2xzIGFsb25lLgorKi8KKyAgMCwgICAxLCAgIDIsICAgMywgICA0LCAgIDUsICAg NiwgICA3LCAgIDgsICAgOSwgIDEwLCAgMTEsICAxMiwgIDEzLCAgMTQsICAxNSwKKyAxNiwgIDE3 LCAgMTgsICAxOSwgIDIwLCAgMjEsICAyMiwgIDIzLCAgMjQsICAyNSwgIDI2LCAgMjcsICAyOCwg IDI5LCAgMzAsICAzMSwKKyAzMiwgIDMzLCAgMzQsICAzNSwgIDM2LCAgMzcsICAzOCwgIDM5LCAg NDAsICA0MSwgIDQyLCAgNDMsICA0NCwgIDQ1LCAgNDYsICA0NywKKyA0OCwgIDQ5LCAgNTAsICA1 MSwgIDUyLCAgNTMsICA1NCwgIDU1LCAgNTYsICA1NywgIDU4LCAgNTksICA2MCwgIDYxLCAgNjIs ICA2MywKKyA2NCwgIDY1LCAgNjYsICA2NywgIDY4LCAgNjksICA3MCwgIDcxLCAgNzIsICA3Mywg IDc0LCAgNzUsICA3NiwgIDc3LCAgNzgsICA3OSwKKyA4MCwgIDgxLCAgODIsICA4MywgIDg0LCAg ODUsICA4NiwgIDg3LCAgODgsICA4OSwgIDkwLCAgOTEsICA5MiwgIDkzLCAgOTQsICA5NSwKKyA5 NiwgIDk3LCAgOTgsICA5OSwgMTAwLCAxMDEsIDEwMiwgMTAzLCAxMDQsIDEwNSwgMTA2LCAxMDcs IDEwOCwgMTA5LCAxMTAsIDExMSwKKzExMiwgMTEzLCAxMTQsIDExNSwgMTE2LCAxMTcsIDExOCwg MTE5LCAxMjAsIDEyMSwgMTIyLCAxMjMsIDEyNCwgMTI1LCAxMjYsIDEyNywKKzE4NiwgMjA1LCAy MDEsIDE4NywgMjAwLCAxODgsIDIwNCwgMTg1LCAyMDMsIDIwMiwgMjA2LCAyMjMsIDIyMCwgMjE5 LCAyNTQsIDI0MiwKKzE3OSwgMTk2LCAyMTgsIDE5MSwgMTkyLCAyMTcsIDE5NSwgMTgwLCAxOTQs IDE5MywgMTk3LCAxNzYsIDE3NywgMTc4LCAyMTMsIDE1OSwKKzI1NSwgMTczLCAxNTUsIDE1Niwg MjA3LCAxNTcsIDIyMSwgMjQ1LCAyNDksIDE4NCwgMTY2LCAxNzQsIDE3MCwgMjQwLCAxNjksIDIz OCwKKzI0OCwgMjQxLCAyNTMsIDI1MiwgMjM5LCAyMzAsIDI0NCwgMjUwLCAyNDcsIDI1MSwgMTY3 LCAxNzUsIDE3MiwgMTcxLCAyNDMsIDE2OCwKKzE4MywgMTgxLCAxODIsIDE5OSwgMTQyLCAxNDMs IDE0NiwgMTI4LCAyMTIsIDE0NCwgMjEwLCAyMTEsIDIyMiwgMjE0LCAyMTUsIDIxNiwKKzIwOSwg MTY1LCAyMjcsIDIyNCwgMjI2LCAyMjksIDE1MywgMTU4LCAxOTAsIDIzNSwgMjMzLCAyMzQsIDE1 NCwgMjM3LCAyMzIsIDIyNSwKKzEzMywgMTYwLCAxMzEsIDE5OCwgMTMyLCAxMzQsIDE0NSwgMTM1 LCAxMzgsIDEzMCwgMTM2LCAxMzcsIDE0MSwgMTYxLCAxNDAsIDEzOSwKKzIwOCwgMTY0LCAxNDks IDE2MiwgMTQ3LCAyMjgsIDE0OCwgMjQ2LCAxODksIDE1MSwgMTYzLCAxNTAsIDEyOSwgMjM2LCAy MzEsIDE1MgorfTsKKworQ09OU1QgQ0hBUgoreTQzbDFbXSA9IHsgIC8qIElCTSBDb2RlIFBhZ2Ug NDM3IHRvIExhdGluLTEgKi8KKy8qCisgIFRoaXMgdGFibGUgaXMgdGhlIGludmVyc2Ugb2YgeWwx NDNbXS4KKyovCisgIDAsICAgMSwgICAyLCAgIDMsICAgNCwgICA1LCAgIDYsICAgNywgICA4LCAg IDksICAxMCwgIDExLCAgMTIsICAxMywgIDE0LCAgMTUsCisgMTYsICAxNywgIDE4LCAgMTksICAy MCwgIDIxLCAgMjIsICAyMywgIDI0LCAgMjUsICAyNiwgIDI3LCAgMjgsICAyOSwgIDMwLCAgMzEs CisgMzIsICAzMywgIDM0LCAgMzUsICAzNiwgIDM3LCAgMzgsICAzOSwgIDQwLCAgNDEsICA0Miwg IDQzLCAgNDQsICA0NSwgIDQ2LCAgNDcsCisgNDgsICA0OSwgIDUwLCAgNTEsICA1MiwgIDUzLCAg NTQsICA1NSwgIDU2LCAgNTcsICA1OCwgIDU5LCAgNjAsICA2MSwgIDYyLCAgNjMsCisgNjQsICA2 NSwgIDY2LCAgNjcsICA2OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAgNzMsICA3NCwgIDc1LCAgNzYs ICA3NywgIDc4LCAgNzksCisgODAsICA4MSwgIDgyLCAgODMsICA4NCwgIDg1LCAgODYsICA4Nywg IDg4LCAgODksICA5MCwgIDkxLCAgOTIsICA5MywgIDk0LCAgOTUsCisgOTYsICA5NywgIDk4LCAg OTksIDEwMCwgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3LCAxMDgsIDEwOSwgMTEw LCAxMTEsCisxMTIsIDExMywgMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgsIDExOSwgMTIwLCAxMjEs IDEyMiwgMTIzLCAxMjQsIDEyNSwgMTI2LCAxMjcsCisxOTksIDI1MiwgMjMzLCAyMjYsIDIyOCwg MjI0LCAyMjksIDIzMSwgMjM0LCAyMzUsIDIzMiwgMjM5LCAyMzgsIDIzNiwgMTk2LCAxOTcsCisy MDEsIDIzMCwgMTk4LCAyNDQsIDI0NiwgMjQyLCAyNTEsIDI0OSwgMjU1LCAyMTQsIDIyMCwgMTYy LCAxNjMsIDE2NSwgMjE1LCAxNTksCisyMjUsIDIzNywgMjQzLCAyNTAsIDI0MSwgMjA5LCAxNzAs IDE4NiwgMTkxLCAxNzQsIDE3MiwgMTg5LCAxODgsIDE2MSwgMTcxLCAxODcsCisxNTUsIDE1Niwg MTU3LCAxNDQsIDE1MSwgMTkzLCAxOTQsIDE5MiwgMTY5LCAxMzUsIDEyOCwgMTMxLCAxMzMsIDI0 OCwgMjE2LCAxNDcsCisxNDgsIDE1MywgMTUyLCAxNTAsIDE0NSwgMTU0LCAyMjcsIDE5NSwgMTMy LCAxMzAsIDEzNywgMTM2LCAxMzQsIDEyOSwgMTM4LCAxNjQsCisyNDAsIDIwOCwgMjAyLCAyMDMs IDIwMCwgMTU4LCAyMDUsIDIwNiwgMjA3LCAxNDksIDE0NiwgMTQxLCAxNDAsIDE2NiwgMjA0LCAx MzksCisyMTEsIDIyMywgMjEyLCAyMTAsIDI0NSwgMjEzLCAxODEsIDI1NCwgMjIyLCAyMTgsIDIx OSwgMjE3LCAyNTMsIDIyMSwgMTc1LCAxODAsCisxNzMsIDE3NywgMTQzLCAxOTAsIDE4MiwgMTY3 LCAyNDcsIDE4NCwgMTc2LCAxNjgsIDE4MywgMTg1LCAxNzksIDE3OCwgMTQyLCAxNjAKK307CisK K0NPTlNUIENIQVIKK3lsMWFxW10gPSB7ICAvKiBMYXRpbi0xIHRvIEV4dGVuZGVkIE1hYyBMYXRp biAoYmFzZWQgb24gQXBwbGUgUXVpY2tEcmF3KSAqLworICAwLCAgIDEsICAgMiwgICAzLCAgIDQs ICAgNSwgICA2LCAgIDcsICAgOCwgICA5LCAgMTAsICAxMSwgIDEyLCAgMTMsICAxNCwgIDE1LAor IDE2LCAgMTcsICAxOCwgIDE5LCAgMjAsICAyMSwgIDIyLCAgMjMsICAyNCwgIDI1LCAgMjYsICAy NywgIDI4LCAgMjksICAzMCwgIDMxLAorIDMyLCAgMzMsICAzNCwgIDM1LCAgMzYsICAzNywgIDM4 LCAgMzksICA0MCwgIDQxLCAgNDIsICA0MywgIDQ0LCAgNDUsICA0NiwgIDQ3LAorIDQ4LCAgNDks ICA1MCwgIDUxLCAgNTIsICA1MywgIDU0LCAgNTUsICA1NiwgIDU3LCAgNTgsICA1OSwgIDYwLCAg NjEsICA2MiwgIDYzLAorIDY0LCAgNjUsICA2NiwgIDY3LCAgNjgsICA2OSwgIDcwLCAgNzEsICA3 MiwgIDczLCAgNzQsICA3NSwgIDc2LCAgNzcsICA3OCwgIDc5LAorIDgwLCAgODEsICA4MiwgIDgz LCAgODQsICA4NSwgIDg2LCAgODcsICA4OCwgIDg5LCAgOTAsICA5MSwgIDkyLCAgOTMsICA5NCwg IDk1LAorIDk2LCAgOTcsICA5OCwgIDk5LCAxMDAsIDEwMSwgMTAyLCAxMDMsIDEwNCwgMTA1LCAx MDYsIDEwNywgMTA4LCAxMDksIDExMCwgMTExLAorMTEyLCAxMTMsIDExNCwgMTE1LCAxMTYsIDEx NywgMTE4LCAxMTksIDEyMCwgMTIxLCAxMjIsIDEyMywgMTI0LCAxMjUsIDEyNiwgMTI3LAorMTgy LCAxODMsIDE4NCwgMTg1LCAxODksIDE5NiwgMTk3LCAxOTgsIDIwNiwgMjA3LCAyMTAsIDIxMSwg MjE3LCAyMTgsIDE5NSwgMjEyLAorMjA5LCAyMTUsIDIxMywgMjI2LCAyMjcsIDIyOCwgMjQwLCAy NDUsIDI0NiwgMjQ3LCAyNDksIDI1MCwgMjUxLCAyNTMsIDI1NCwgMjU1LAorMjAyLCAxOTMsIDE2 MiwgMTYzLCAyMTksIDE4MCwgMjAxLCAxNjQsIDE3MiwgMTY5LCAxODcsIDE5OSwgMTk0LCAyMDgs IDE2OCwgMjQ4LAorMTYxLCAxNzcsIDE3MCwgMTczLCAxNzEsIDE4MSwgMTY2LCAyMjUsIDI1Miwg MTc2LCAxODgsIDIwMCwgMTc4LCAxNzksIDE4NiwgMTkyLAorMjAzLCAyMzEsIDIyOSwgMjA0LCAx MjgsIDEyOSwgMTc0LCAxMzAsIDIzMywgMTMxLCAyMzAsIDIzMiwgMjM3LCAyMzQsIDIzNSwgMjM2 LAorMjIwLCAxMzIsIDI0MSwgMjM4LCAyMzksIDIwNSwgMTMzLCAxNjUsIDE3NSwgMjQ0LCAyNDIs IDI0MywgMTM0LCAxNjAsIDIyMiwgMTY3LAorMTM2LCAxMzUsIDEzNywgMTM5LCAxMzgsIDE0MCwg MTkwLCAxNDEsIDE0MywgMTQyLCAxNDQsIDE0NSwgMTQ3LCAxNDYsIDE0OCwgMTQ5LAorMjIxLCAx NTAsIDE1MiwgMTUxLCAxNTMsIDE1NSwgMTU0LCAyMTQsIDE5MSwgMTU3LCAxNTYsIDE1OCwgMTU5 LCAyMjQsIDIyMywgMjE2Cit9OworCitDT05TVCBDSEFSCit5bDFkdVtdID0geyAgLyogTGF0aW4t MSB0byBEdXRjaCBJU08gNjQ2ICovCisgIDAsICAgMSwgICAyLCAgIDMsICAgNCwgICA1LCAgIDYs ICAgNywgICA4LCAgIDksICAxMCwgIDExLCAgMTIsICAxMywgIDE0LCAgMTUsCisgMTYsICAxNywg IDE4LCAgMTksICAyMCwgIDIxLCAgMjIsICAyMywgIDI0LCAgMjUsICAyNiwgIDI3LCAgMjgsICAy OSwgIDMwLCAgMzEsCisgMzIsICAzMywgIDM0LCBVTkssICAzNiwgIDM3LCAgMzgsICAzOSwgIDQw LCAgNDEsICA0MiwgIDQzLCAgNDQsICA0NSwgIDQ2LCAgNDcsCisgNDgsICA0OSwgIDUwLCAgNTEs ICA1MiwgIDUzLCAgNTQsICA1NSwgIDU2LCAgNTcsICA1OCwgIDU5LCAgNjAsICA2MSwgIDYyLCAg NjMsCitVTkssICA2NSwgIDY2LCAgNjcsICA2OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAgNzMsICA3 NCwgIDc1LCAgNzYsICA3NywgIDc4LCAgNzksCisgODAsICA4MSwgIDgyLCAgODMsICA4NCwgIDg1 LCAgODYsICA4NywgIDg4LCAgODksICA5MCwgVU5LLCBVTkssIFVOSywgIDk0LCAgOTUsCisgOTYs ICA5NywgIDk4LCAgOTksIDEwMCwgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3LCAx MDgsIDEwOSwgMTEwLCAxMTEsCisxMTIsIDExMywgMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgsIDEx OSwgMTIwLCAxMjEsIDEyMiwgVU5LLCBVTkssIFVOSywgIDM5LCAxMjcsCisxMjgsIDEyOSwgMTMw LCAxMzEsIDEzMiwgMTMzLCAxMzQsIDEzNSwgMTM2LCAxMzcsIDEzOCwgMTM5LCAxNDAsIDE0MSwg MTQyLCAxNDMsCisxNDQsIDE0NSwgMTQ2LCAxNDcsIDE0OCwgMTQ5LCAxNTAsIDE1MSwgMTUyLCAx NTMsIDE1NCwgMTU1LCAxNTYsIDE1NywgMTU4LCAxNTksCisgMzIsICAzMywgVU5LLCAgMzUsIDEy NCwgVU5LLCBVTkssICA5MywgMTIzLCAgNjcsIFVOSywgIDM0LCBVTkssICA0NSwgIDgyLCBVTkss CisgOTEsIFVOSywgVU5LLCBVTkssIDEyNiwgMTE3LCBVTkssIFVOSywgIDQ0LCBVTkssIFVOSywg IDM0LCAxMjUsICA5MiwgIDY0LCAgNjMsCisgNjUsICA2NSwgIDY1LCAgNjUsICA5MSwgIDY1LCAg NjUsICA2NywgIDY5LCAgNjksICA2OSwgIDY5LCAgNzMsICA3MywgIDczLCAgNzMsCitVTkssICA3 OCwgIDc5LCAgNzksICA3OSwgIDc5LCAgNzksIDEyMCwgIDc5LCAgODUsICA4NSwgIDg1LCAgODUs ICA4OSwgVU5LLCAxMTUsCisgOTcsICA5NywgIDk3LCAgOTcsICA5NywgIDk3LCAgOTcsICA5OSwg MTAxLCAxMDEsIDEwMSwgMTAxLCAxMDUsIDEwNSwgMTA1LCAxMDUsCitVTkssIDExMCwgMTExLCAx MTEsIDExMSwgMTExLCAxMTEsICA0NywgMTExLCAxMTcsIDExNywgMTE3LCAxMTcsIDEyMSwgVU5L LCAgOTEKK307CisKK0NPTlNUIENIQVIKK3lsMWZpW10gPSB7ICAvKiBMYXRpbi0xIHRvIEZpbm5p c2ggSVNPIE5SQyAoKm5vdCogSVNPIDY0NikgKi8KKyAgMCwgICAxLCAgIDIsICAgMywgICA0LCAg IDUsICAgNiwgICA3LCAgIDgsICAgOSwgIDEwLCAgMTEsICAxMiwgIDEzLCAgMTQsICAxNSwKKyAx NiwgIDE3LCAgMTgsICAxOSwgIDIwLCAgMjEsICAyMiwgIDIzLCAgMjQsICAyNSwgIDI2LCAgMjcs ICAyOCwgIDI5LCAgMzAsICAzMSwKKyAzMiwgIDMzLCAgMzQsICAzNSwgIDM2LCAgMzcsICAzOCwg IDM5LCAgNDAsICA0MSwgIDQyLCAgNDMsICA0NCwgIDQ1LCAgNDYsICA0NywKKyA0OCwgIDQ5LCAg NTAsICA1MSwgIDUyLCAgNTMsICA1NCwgIDU1LCAgNTYsICA1NywgIDU4LCAgNTksICA2MCwgIDYx LCAgNjIsICA2MywKKyA2NCwgIDY1LCAgNjYsICA2NywgIDY4LCAgNjksICA3MCwgIDcxLCAgNzIs ICA3MywgIDc0LCAgNzUsICA3NiwgIDc3LCAgNzgsICA3OSwKKyA4MCwgIDgxLCAgODIsICA4Mywg IDg0LCAgODUsICA4NiwgIDg3LCAgODgsICA4OSwgIDkwLCBVTkssIFVOSywgVU5LLCBVTkssICA5 NSwKK1VOSywgIDk3LCAgOTgsICA5OSwgMTAwLCAxMDEsIDEwMiwgMTAzLCAxMDQsIDEwNSwgMTA2 LCAxMDcsIDEwOCwgMTA5LCAxMTAsIDExMSwKKzExMiwgMTEzLCAxMTQsIDExNSwgMTE2LCAxMTcs IDExOCwgMTE5LCAxMjAsIDEyMSwgMTIyLCBVTkssIFVOSywgVU5LLCBVTkssIDEyNywKKzEyOCwg MTI5LCAxMzAsIDEzMSwgMTMyLCAxMzMsIDEzNCwgMTM1LCAxMzYsIDEzNywgMTM4LCAxMzksIDE0 MCwgMTQxLCAxNDIsIDE0MywKKzE0NCwgMTQ1LCAxNDYsIDE0NywgMTQ4LCAxNDksIDE1MCwgMTUx LCAxNTIsIDE1MywgMTU0LCAxNTUsIDE1NiwgMTU3LCAxNTgsIDE1OSwKKyAzMiwgIDMzLCBVTkss IFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCAgMzQsICA2NywgVU5LLCAgMzQsIFVOSywgIDQ1LCAg ODIsIFVOSywKK1VOSywgVU5LLCBVTkssIFVOSywgIDM5LCAxMTcsIFVOSywgVU5LLCAgNDQsIFVO SywgVU5LLCAgMzQsIFVOSywgVU5LLCBVTkssICA2MywKKyA2NSwgIDY1LCAgNjUsICA2NSwgIDkx LCAgOTMsICA2NSwgIDY3LCAgNjksICA2OSwgIDY5LCAgNjksICA3MywgIDczLCAgNzMsICA3MywK K1VOSywgIDc4LCAgNzksICA3OSwgIDc5LCAgNzksICA5MiwgMTIwLCAgNzksICA4NSwgIDg1LCAg ODUsICA5NCwgIDg5LCBVTkssIDExNSwKKyA5NywgIDk3LCAgOTcsICA5NywgMTIzLCAxMjUsICA5 NywgIDk5LCAxMDEsICA5NiwgMTAxLCAxMDEsIDEwNSwgMTA1LCAxMDUsIDEwNSwKK1VOSywgMTEw LCAxMTEsIDExMSwgMTExLCAxMTEsIDEyNCwgIDQ3LCAxMTEsIDExNywgMTE3LCAxMTcsIDEyNiwg MTIxLCBVTkssIDEyMQorfTsKKworQ09OU1QgQ0hBUgoreWwxZnJbXSA9IHsgIC8qIExhdGluLTEg dG8gRnJlbmNoIElTTyA2NDYgKi8KKyAgMCwgICAxLCAgIDIsICAgMywgICA0LCAgIDUsICAgNiwg ICA3LCAgIDgsICAgOSwgIDEwLCAgMTEsICAxMiwgIDEzLCAgMTQsICAxNSwKKyAxNiwgIDE3LCAg MTgsICAxOSwgIDIwLCAgMjEsICAyMiwgIDIzLCAgMjQsICAyNSwgIDI2LCAgMjcsICAyOCwgIDI5 LCAgMzAsICAzMSwKKyAzMiwgIDMzLCAgMzQsIFVOSywgIDM2LCAgMzcsICAzOCwgIDM5LCAgNDAs ICA0MSwgIDQyLCAgNDMsICA0NCwgIDQ1LCAgNDYsICA0NywKKyA0OCwgIDQ5LCAgNTAsICA1MSwg IDUyLCAgNTMsICA1NCwgIDU1LCAgNTYsICA1NywgIDU4LCAgNTksICA2MCwgIDYxLCAgNjIsICA2 MywKK1VOSywgIDY1LCAgNjYsICA2NywgIDY4LCAgNjksICA3MCwgIDcxLCAgNzIsICA3MywgIDc0 LCAgNzUsICA3NiwgIDc3LCAgNzgsICA3OSwKKyA4MCwgIDgxLCAgODIsICA4MywgIDg0LCAgODUs ICA4NiwgIDg3LCAgODgsICA4OSwgIDkwLCBVTkssIFVOSywgVU5LLCAgOTQsICA5NSwKKyA5Niwg IDk3LCAgOTgsICA5OSwgMTAwLCAxMDEsIDEwMiwgMTAzLCAxMDQsIDEwNSwgMTA2LCAxMDcsIDEw OCwgMTA5LCAxMTAsIDExMSwKKzExMiwgMTEzLCAxMTQsIDExNSwgMTE2LCAxMTcsIDExOCwgMTE5 LCAxMjAsIDEyMSwgMTIyLCBVTkssIFVOSywgVU5LLCBVTkssIDEyNywKKzEyOCwgMTI5LCAxMzAs IDEzMSwgMTMyLCAxMzMsIDEzNCwgMTM1LCAxMzYsIDEzNywgMTM4LCAxMzksIDE0MCwgMTQxLCAx NDIsIDE0MywKKzE0NCwgMTQ1LCAxNDYsIDE0NywgMTQ4LCAxNDksIDE1MCwgMTUxLCAxNTIsIDE1 MywgMTU0LCAxNTUsIDE1NiwgMTU3LCAxNTgsIDE1OSwKKyAzMiwgIDMzLCBVTkssICAzNSwgVU5L LCBVTkssIFVOSywgIDkzLCAgMzQsICA2NywgVU5LLCAgMzQsIFVOSywgIDQ1LCAgODIsIFVOSywK KyA5MSwgVU5LLCBVTkssIFVOSywgIDM5LCAxMTcsIFVOSywgVU5LLCAgNDQsIFVOSywgVU5LLCAg MzQsIFVOSywgVU5LLCBVTkssICA2MywKKyA2NSwgIDY1LCAgNjUsICA2NSwgIDY1LCAgNjUsICA2 NSwgIDY3LCAgNjksICA2OSwgIDY5LCAgNjksICA3MywgIDczLCAgNzMsICA3MywKK1VOSywgIDc4 LCAgNzksICA3OSwgIDc5LCAgNzksICA3OSwgMTIwLCAgNzksICA4NSwgIDg1LCAgODUsICA4NSwg IDg5LCBVTkssIDExNSwKKyA2NCwgIDk3LCAgOTcsICA5NywgIDk3LCAgOTcsICA5NywgIDkyLCAx MjUsIDEyMywgMTAxLCAxMDEsIDEwNSwgMTA1LCAxMDUsIDEwNSwKK1VOSywgMTEwLCAxMTEsIDEx MSwgMTExLCAxMTEsIDExMSwgIDQ3LCAxMTEsIDEyNCwgMTE3LCAxMTcsIDExNywgMTIxLCBVTkss IDEyMQorfTsKKworQ09OU1QgQ0hBUgoreWwxZmNbXSA9IHsgIC8qIExhdGluLTEgdG8gRnJlbmNo LUNhbmFkaWFuIElTTyA2NDYgKi8KKyAgMCwgICAxLCAgIDIsICAgMywgICA0LCAgIDUsICAgNiwg ICA3LCAgIDgsICAgOSwgIDEwLCAgMTEsICAxMiwgIDEzLCAgMTQsICAxNSwKKyAxNiwgIDE3LCAg MTgsICAxOSwgIDIwLCAgMjEsICAyMiwgIDIzLCAgMjQsICAyNSwgIDI2LCAgMjcsICAyOCwgIDI5 LCAgMzAsICAzMSwKKyAzMiwgIDMzLCAgMzQsICAzNSwgIDM2LCAgMzcsICAzOCwgIDM5LCAgNDAs ICA0MSwgIDQyLCAgNDMsICA0NCwgIDQ1LCAgNDYsICA0NywKKyA0OCwgIDQ5LCAgNTAsICA1MSwg IDUyLCAgNTMsICA1NCwgIDU1LCAgNTYsICA1NywgIDU4LCAgNTksICA2MCwgIDYxLCAgNjIsICA2 MywKK1VOSywgIDY1LCAgNjYsICA2NywgIDY4LCAgNjksICA3MCwgIDcxLCAgNzIsICA3MywgIDc0 LCAgNzUsICA3NiwgIDc3LCAgNzgsICA3OSwKKyA4MCwgIDgxLCAgODIsICA4MywgIDg0LCAgODUs ICA4NiwgIDg3LCAgODgsICA4OSwgIDkwLCBVTkssIFVOSywgVU5LLCBVTkssICA5NSwKK1VOSywg IDk3LCAgOTgsICA5OSwgMTAwLCAxMDEsIDEwMiwgMTAzLCAxMDQsIDEwNSwgMTA2LCAxMDcsIDEw OCwgMTA5LCAxMTAsIDExMSwKKzExMiwgMTEzLCAxMTQsIDExNSwgMTE2LCAxMTcsIDExOCwgMTE5 LCAxMjAsIDEyMSwgMTIyLCBVTkssIFVOSywgVU5LLCBVTkssIDEyNywKKzEyOCwgMTI5LCAxMzAs IDEzMSwgMTMyLCAxMzMsIDEzNCwgMTM1LCAxMzYsIDEzNywgMTM4LCAxMzksIDE0MCwgMTQxLCAx NDIsIDE0MywKKzE0NCwgMTQ1LCAxNDYsIDE0NywgMTQ4LCAxNDksIDE1MCwgMTUxLCAxNTIsIDE1 MywgMTU0LCAxNTUsIDE1NiwgMTU3LCAxNTgsIDE1OSwKKyAzMiwgIDMzLCBVTkssIFVOSywgVU5L LCBVTkssIFVOSywgVU5LLCAgMzQsICA2NywgVU5LLCAgMzQsIFVOSywgIDQ1LCAgODIsIFVOSywK K1VOSywgVU5LLCBVTkssIFVOSywgIDM5LCAxMTcsIFVOSywgVU5LLCAgNDQsIFVOSywgVU5LLCAg MzQsIFVOSywgVU5LLCBVTkssICA2MywKKyA2NSwgIDY1LCAgNjUsICA2NSwgIDY1LCAgNjUsICA2 NSwgIDY3LCAgNjksICA2OSwgIDY5LCAgNjksICA3MywgIDczLCAgNzMsICA3MywKK1VOSywgIDc4 LCAgNzksICA3OSwgIDc5LCAgNzksICA3OSwgMTIwLCAgNzksICA4NSwgIDg1LCAgODUsICA4NSwg IDg5LCBVTkssIDExNSwKKyA2NCwgIDk3LCAgOTEsICA5NywgIDk3LCAgOTcsICA5NywgIDkyLCAx MjUsIDEyMywgIDkzLCAxMDEsIDEwNSwgMTA1LCAgOTQsIDEwNSwKK1VOSywgMTEwLCAxMTEsIDEx MSwgIDk2LCAxMTEsIDExMSwgIDQ3LCAxMTEsIDEyNCwgMTE3LCAxMjYsIDExNywgMTIxLCBVTkss IDEyMQorfTsKKworQ09OU1QgQ0hBUgoreWwxZ2VbXSA9IHsgIC8qIExhdGluLTEgdG8gR2VybWFu IElTTyA2NDYgKi8KKyAgMCwgICAxLCAgIDIsICAgMywgICA0LCAgIDUsICAgNiwgICA3LCAgIDgs ICAgOSwgIDEwLCAgMTEsICAxMiwgIDEzLCAgMTQsICAxNSwKKyAxNiwgIDE3LCAgMTgsICAxOSwg IDIwLCAgMjEsICAyMiwgIDIzLCAgMjQsICAyNSwgIDI2LCAgMjcsICAyOCwgIDI5LCAgMzAsICAz MSwKKyAzMiwgIDMzLCAgMzQsICAzNSwgIDM2LCAgMzcsICAzOCwgIDM5LCAgNDAsICA0MSwgIDQy LCAgNDMsICA0NCwgIDQ1LCAgNDYsICA0NywKKyA0OCwgIDQ5LCAgNTAsICA1MSwgIDUyLCAgNTMs ICA1NCwgIDU1LCAgNTYsICA1NywgIDU4LCAgNTksICA2MCwgIDYxLCAgNjIsICA2MywKK1VOSywg IDY1LCAgNjYsICA2NywgIDY4LCAgNjksICA3MCwgIDcxLCAgNzIsICA3MywgIDc0LCAgNzUsICA3 NiwgIDc3LCAgNzgsICA3OSwKKyA4MCwgIDgxLCAgODIsICA4MywgIDg0LCAgODUsICA4NiwgIDg3 LCAgODgsICA4OSwgIDkwLCBVTkssIFVOSywgVU5LLCAgOTQsICA5NSwKKyA5NiwgIDk3LCAgOTgs ICA5OSwgMTAwLCAxMDEsIDEwMiwgMTAzLCAxMDQsIDEwNSwgMTA2LCAxMDcsIDEwOCwgMTA5LCAx MTAsIDExMSwKKzExMiwgMTEzLCAxMTQsIDExNSwgMTE2LCAxMTcsIDExOCwgMTE5LCAxMjAsIDEy MSwgMTIyLCBVTkssIFVOSywgVU5LLCBVTkssIDEyNywKKzEyOCwgMTI5LCAxMzAsIDEzMSwgMTMy LCAxMzMsIDEzNCwgMTM1LCAxMzYsIDEzNywgMTM4LCAxMzksIDE0MCwgMTQxLCAxNDIsIDE0MywK KzE0NCwgMTQ1LCAxNDYsIDE0NywgMTQ4LCAxNDksIDE1MCwgMTUxLCAxNTIsIDE1MywgMTU0LCAx NTUsIDE1NiwgMTU3LCAxNTgsIDE1OSwKKyAzMiwgIDMzLCBVTkssIFVOSywgVU5LLCBVTkssIFVO SywgIDY0LCAgMzQsICA2NywgVU5LLCAgMzQsIFVOSywgIDQ1LCAgODIsIFVOSywKK1VOSywgVU5L LCBVTkssIFVOSywgIDM5LCAxMTcsIFVOSywgVU5LLCAgNDQsIFVOSywgVU5LLCAgMzQsIFVOSywg VU5LLCBVTkssICA2MywKKyA2NSwgIDY1LCAgNjUsICA2NSwgIDkxLCAgNjUsICA2NSwgIDY3LCAg NjksICA2OSwgIDY5LCAgNjksICA3MywgIDczLCAgNzMsICA3MywKK1VOSywgIDc4LCAgNzksICA3 OSwgIDc5LCAgNzksICA5MiwgMTIwLCAgNzksICA4NSwgIDg1LCAgODUsICA5MywgIDg5LCBVTkss IDEyNiwKKyA5NywgIDk3LCAgOTcsICA5NywgMTIzLCAgOTcsICA5NywgIDk5LCAxMDEsIDEwMSwg MTAxLCAxMDEsIDEwNSwgMTA1LCAxMDUsIDEwNSwKK1VOSywgMTEwLCAxMTEsIDExMSwgMTExLCAx MTEsIDEyNCwgIDQ3LCAxMTEsIDExNywgMTE3LCAxMTcsIDEyNSwgMTIxLCBVTkssIDEyMQorfTsK KworQ09OU1QgQ0hBUgoreWwxaHVbXSA9IHsgIC8qIExhdGluLTEgdG8gSHVuZ2FyaWFuIElTTy02 NDYgKi8KKyAgMCwgICAxLCAgIDIsICAgMywgICA0LCAgIDUsICAgNiwgICA3LCAgIDgsICAgOSwg IDEwLCAgMTEsICAxMiwgIDEzLCAgMTQsICAxNSwKKyAxNiwgIDE3LCAgMTgsICAxOSwgIDIwLCAg MjEsICAyMiwgIDIzLCAgMjQsICAyNSwgIDI2LCAgMjcsICAyOCwgIDI5LCAgMzAsICAzMSwKKyAz MiwgIDMzLCAgMzQsICAzNSwgIDM2LCAgMzcsICAzOCwgIDM5LCAgNDAsICA0MSwgIDQyLCAgNDMs ICA0NCwgIDQ1LCAgNDYsICA0NywKKyA0OCwgIDQ5LCAgNTAsICA1MSwgIDUyLCAgNTMsICA1NCwg IDU1LCAgNTYsICA1NywgIDU4LCAgNTksICA2MCwgIDYxLCAgNjIsICA2MywKKyA2NCwgIDY1LCAg NjYsICA2NywgIDY4LCAgNjksICA3MCwgIDcxLCAgNzIsICA3MywgIDc0LCAgNzUsICA3NiwgIDc3 LCAgNzgsICA3OSwKKyA4MCwgIDgxLCAgODIsICA4MywgIDg0LCAgODUsICA4NiwgIDg3LCAgODgs ICA4OSwgIDkwLCAgOTEsICA5MiwgIDkzLCAgOTQsICA5NSwKKyA5NiwgIDk3LCAgOTgsICA5OSwg MTAwLCAxMDEsIDEwMiwgMTAzLCAxMDQsIDEwNSwgMTA2LCAxMDcsIDEwOCwgMTA5LCAxMTAsIDEx MSwKKzExMiwgMTEzLCAxMTQsIDExNSwgMTE2LCAxMTcsIDExOCwgMTE5LCAxMjAsIDEyMSwgMTIy LCAxMjMsIDEyNCwgMTI1LCAxMjYsIDEyNywKKzEyOCwgMTI5LCAxMzAsIDEzMSwgMTMyLCAxMzMs IDEzNCwgMTM1LCAxMzYsIDEzNywgMTM4LCAxMzksIDE0MCwgMTQxLCAxNDIsIDE0MywKKzE0NCwg MTQ1LCAxNDYsIDE0NywgMTQ4LCAxNDksIDE1MCwgMTUxLCAxNTIsIDE1MywgMTU0LCAxNTUsIDE1 NiwgMTU3LCAxNTgsIDE1OSwKKyAzMiwgIDMzLCBVTkssIFVOSywgIDM2LCBVTkssIFVOSywgVU5L LCAgMzQsICA2NywgVU5LLCAgMzQsIFVOSywgIDQ1LCAgODIsIFVOSywKK1VOSywgIDY0LCBVTkss IFVOSywgIDM5LCAxMTcsIFVOSywgVU5LLCAgNDQsIFVOSywgVU5LLCAgMzQsIFVOSywgVU5LLCBV TkssICA2MywKKyA2NSwgIDY1LCAgNjUsICA2NSwgIDY1LCAgNjUsICA2NSwgIDY3LCAgNjksICA5 MSwgIDY5LCAgNjksICA3MywgIDczLCAgNzMsICA3MywKK1VOSywgIDc4LCAgNzksICA3OSwgIDc5 LCAgNzksICA5MiwgMTIwLCAgNzksICA4NSwgIDg1LCAgODUsICA5MywgIDg5LCBVTkssIDExNSwK KyA5NywgIDk2LCAgOTcsICA5NywgIDk3LCAgOTcsICA5NywgIDk5LCAxMDEsIDEyMywgMTAxLCAx MDEsIDEwNSwgMTA1LCAxMDUsIDEwNSwKK1VOSywgMTEwLCAxMTEsIDExMSwgMTExLCAxMTEsIDEy NCwgIDQ3LCAxMTEsIDExNywgMTE3LCAxMTcsIDEyNSwgMTIxLCBVTkssIDEyMQorfTsKKworQ09O U1QgQ0hBUgoreWwxaXRbXSA9IHsgIC8qIExhdGluLTEgdG8gSXRhbGlhbiBJU08gNjQ2ICovCisg IDAsICAgMSwgICAyLCAgIDMsICAgNCwgICA1LCAgIDYsICAgNywgICA4LCAgIDksICAxMCwgIDEx LCAgMTIsICAxMywgIDE0LCAgMTUsCisgMTYsICAxNywgIDE4LCAgMTksICAyMCwgIDIxLCAgMjIs ICAyMywgIDI0LCAgMjUsICAyNiwgIDI3LCAgMjgsICAyOSwgIDMwLCAgMzEsCisgMzIsICAzMywg IDM0LCBVTkssICAzNiwgIDM3LCAgMzgsICAzOSwgIDQwLCAgNDEsICA0MiwgIDQzLCAgNDQsICA0 NSwgIDQ2LCAgNDcsCisgNDgsICA0OSwgIDUwLCAgNTEsICA1MiwgIDUzLCAgNTQsICA1NSwgIDU2 LCAgNTcsICA1OCwgIDU5LCAgNjAsICA2MSwgIDYyLCAgNjMsCitVTkssICA2NSwgIDY2LCAgNjcs ICA2OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAgNzMsICA3NCwgIDc1LCAgNzYsICA3NywgIDc4LCAg NzksCisgODAsICA4MSwgIDgyLCAgODMsICA4NCwgIDg1LCAgODYsICA4NywgIDg4LCAgODksICA5 MCwgVU5LLCBVTkssIFVOSywgIDk0LCAgOTUsCitVTkssICA5NywgIDk4LCAgOTksIDEwMCwgMTAx LCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3LCAxMDgsIDEwOSwgMTEwLCAxMTEsCisxMTIs IDExMywgMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgsIDExOSwgMTIwLCAxMjEsIDEyMiwgVU5LLCBV TkssIFVOSywgVU5LLCAxMjcsCisxMjgsIDEyOSwgMTMwLCAxMzEsIDEzMiwgMTMzLCAxMzQsIDEz NSwgMTM2LCAxMzcsIDEzOCwgMTM5LCAxNDAsIDE0MSwgMTQyLCAxNDMsCisxNDQsIDE0NSwgMTQ2 LCAxNDcsIDE0OCwgMTQ5LCAxNTAsIDE1MSwgMTUyLCAxNTMsIDE1NCwgMTU1LCAxNTYsIDE1Nywg MTU4LCAxNTksCisgMzIsICAzMywgVU5LLCAgMzUsIFVOSywgVU5LLCBVTkssICA2NCwgIDM0LCAg NjcsIFVOSywgIDM0LCBVTkssICA0NSwgIDgyLCBVTkssCisgOTEsIFVOSywgVU5LLCBVTkssICAz OSwgMTE3LCBVTkssIFVOSywgIDQ0LCBVTkssIFVOSywgIDM0LCBVTkssIFVOSywgVU5LLCAgNjMs CisgNjUsICA2NSwgIDY1LCAgNjUsICA2NSwgIDY1LCAgNjUsICA2NywgIDY5LCAgNjksICA2OSwg IDY5LCAgNzMsICA3MywgIDczLCAgNzMsCitVTkssICA3OCwgIDc5LCAgNzksICA3OSwgIDc5LCAg NzksIDEyMCwgIDc5LCAgODUsICA4NSwgIDg1LCAgODUsICA4OSwgVU5LLCAxMTUsCisxMjMsICA5 NywgIDk3LCAgOTcsICA5NywgIDk3LCAgOTcsICA5MiwgMTI1LCAgOTMsIDEwMSwgMTAxLCAxMjYs IDEwNSwgMTA1LCAxMDUsCitVTkssIDExMCwgMTI0LCAxMTEsIDExMSwgMTExLCAxMTEsICA0Nywg MTExLCAgOTYsIDExNywgMTE3LCAxMTcsIDEyMSwgVU5LLCAxMjEKK307CisKK0NPTlNUIENIQVIK K3lsMW5lW10gPSB7ICAvKiBMYXRpbi0xIHRvIE5lWFQgKi8KKy8qIE5FRUQgVE8gTUFLRSBUSElT IE9ORSBJTlZFUlRJQkxFLCBMSUtFIENQODUwICovCisvKgorICBXaGljaCBtZWFucyBmaW5kaW5n IGFsbCB0aGUgZ3JhcGhpYyBjaGFyYWN0ZXJzIGluIHRoZSBOZVhUIHNldCB0aGF0IGhhdmUKKyAg bm8gZXF1aXZhbGVudCBpbiBMYXRpbi0xIGFuZCBhc3NpZ25pbmcgdGhlbSB0byB0aGUgVU5LIHBv c2l0aW9ucyAobW9zdGx5CisgIExhdGluLTEgQzEgY29udHJvbHMpLiAgVGhlbiBtYWtlIHRoZSB5 bmVsMVtdIHRhYmxlIGJlIHRoZSBpbnZlcnNlIG9mIHRoaXMKKyAgb25lLiAgQnV0IGZpcnN0IHdl IHNob3VsZCB0cnkgdG8gZ2V0IGFuIG9mZmljaWFsIExhdGluLTEvTmVYVCB0cmFuc2xhdGlvbgor ICB0YWJsZSBmcm9tIE5lWFQsIEluYy4KKyovCisgIDAsICAgMSwgICAyLCAgIDMsICAgNCwgICA1 LCAgIDYsICAgNywgICA4LCAgIDksICAxMCwgIDExLCAgMTIsICAxMywgIDE0LCAgMTUsCisgMTYs ICAxNywgIDE4LCAgMTksICAyMCwgIDIxLCAgMjIsICAyMywgIDI0LCAgMjUsICAyNiwgIDI3LCAg MjgsICAyOSwgIDMwLCAgMzEsCisgMzIsICAzMywgIDM0LCAgMzUsICAzNiwgIDM3LCAgMzgsICAz OSwgIDQwLCAgNDEsICA0MiwgIDQzLCAgNDQsICA0NSwgIDQ2LCAgNDcsCisgNDgsICA0OSwgIDUw LCAgNTEsICA1MiwgIDUzLCAgNTQsICA1NSwgIDU2LCAgNTcsICA1OCwgIDU5LCAgNjAsICA2MSwg IDYyLCAgNjMsCisgNjQsICA2NSwgIDY2LCAgNjcsICA2OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAg NzMsICA3NCwgIDc1LCAgNzYsICA3NywgIDc4LCAgNzksCisgODAsICA4MSwgIDgyLCAgODMsICA4 NCwgIDg1LCAgODYsICA4NywgIDg4LCAgODksICA5MCwgIDkxLCAgOTIsICA5MywgIDk0LCAgOTUs CisgOTYsICA5NywgIDk4LCAgOTksIDEwMCwgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwg MTA3LCAxMDgsIDEwOSwgMTEwLCAxMTEsCisxMTIsIDExMywgMTE0LCAxMTUsIDExNiwgMTE3LCAx MTgsIDExOSwgMTIwLCAxMjEsIDEyMiwgMTIzLCAxMjQsIDEyNSwgMTI2LCAxMjcsCitVTkssIFVO SywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkss IFVOSywgVU5LLCBVTkssCitVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywg VU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssCisgMzIsIDE2MSwgMTYyLCAx NjMsIDE2OCwgMTY1LCAxODEsIDE2NywgMjAwLCAxNjAsIDIyNywgMTcxLCAxOTAsIFVOSywgMTc2 LCAxOTcsCisyMDIsIDIwOSwgMjAxLCAyMDQsIDE5NCwgMTU3LCAxODIsIDE4MywgMjAzLCAxOTIs IDIzNSwgMTg3LCAyMTAsIDIxMSwgMjEyLCAxOTEsCisxMjksIDEzMCwgMTMxLCAxMzIsIDEzMywg MTM0LCAyMjUsIDEzNSwgMTM2LCAxMzcsIDEzOCwgMTM5LCAxNDAsIDE0MSwgMTQyLCAxNDMsCisx NDQsIDE0NSwgMTQ2LCAxNDcsIDE0OCwgMTQ5LCAxNTAsIDE1OCwgMjMzLCAxNTEsIDE1MiwgMTUz LCAxNTQsIDE1NSwgMTU2LCAyNTEsCisyMTMsIDIxNCwgMjE1LCAyMTYsIDIxNywgMjE4LCAyNDEs IDIxOSwgMjIwLCAyMjEsIDIyMiwgMjIzLCAyMjQsIDIyNiwgMjI4LCAyMjksCisyMzAsIDIzMSwg MjM2LCAyMzcsIDIzOCwgMjM5LCAyNDAsIDE1OSwgMjQ5LCAyNDIsIDI0MywgMjQ0LCAyNDYsIDI0 NywgMjUyLCAyNTMKK307CisKK0NPTlNUIENIQVIKK3lsMW5vW10gPSB7ICAvKiBMYXRpbi0xIHRv IE5vcndlZ2lhbi9EYW5pc2ggSVNPIDY0NiAqLworICAwLCAgIDEsICAgMiwgICAzLCAgIDQsICAg NSwgICA2LCAgIDcsICAgOCwgICA5LCAgMTAsICAxMSwgIDEyLCAgMTMsICAxNCwgIDE1LAorIDE2 LCAgMTcsICAxOCwgIDE5LCAgMjAsICAyMSwgIDIyLCAgMjMsICAyNCwgIDI1LCAgMjYsICAyNywg IDI4LCAgMjksICAzMCwgIDMxLAorIDMyLCAgMzMsICAzNCwgIDM1LCAgMzYsICAzNywgIDM4LCAg MzksICA0MCwgIDQxLCAgNDIsICA0MywgIDQ0LCAgNDUsICA0NiwgIDQ3LAorIDQ4LCAgNDksICA1 MCwgIDUxLCAgNTIsICA1MywgIDU0LCAgNTUsICA1NiwgIDU3LCAgNTgsICA1OSwgIDYwLCAgNjEs ICA2MiwgIDYzLAorIDY0LCAgNjUsICA2NiwgIDY3LCAgNjgsICA2OSwgIDcwLCAgNzEsICA3Miwg IDczLCAgNzQsICA3NSwgIDc2LCAgNzcsICA3OCwgIDc5LAorIDgwLCAgODEsICA4MiwgIDgzLCAg ODQsICA4NSwgIDg2LCAgODcsICA4OCwgIDg5LCAgOTAsIFVOSywgVU5LLCBVTkssICA5NCwgIDk1 LAorIDk2LCAgOTcsICA5OCwgIDk5LCAxMDAsIDEwMSwgMTAyLCAxMDMsIDEwNCwgMTA1LCAxMDYs IDEwNywgMTA4LCAxMDksIDExMCwgMTExLAorMTEyLCAxMTMsIDExNCwgMTE1LCAxMTYsIDExNywg MTE4LCAxMTksIDEyMCwgMTIxLCAxMjIsIFVOSywgVU5LLCBVTkssIDEyNiwgMTI3LAorMTI4LCAx MjksIDEzMCwgMTMxLCAxMzIsIDEzMywgMTM0LCAxMzUsIDEzNiwgMTM3LCAxMzgsIDEzOSwgMTQw LCAxNDEsIDE0MiwgMTQzLAorMTQ0LCAxNDUsIDE0NiwgMTQ3LCAxNDgsIDE0OSwgMTUwLCAxNTEs IDE1MiwgMTUzLCAxNTQsIDE1NSwgMTU2LCAxNTcsIDE1OCwgMTU5LAorIDMyLCAgMzMsIFVOSywg VU5LLCBVTkssIFVOSywgVU5LLCBVTkssICAzNCwgIDY3LCBVTkssICAzNCwgVU5LLCAgNDUsICA4 MiwgVU5LLAorVU5LLCBVTkssIFVOSywgVU5LLCAgMzksIDExNywgVU5LLCBVTkssICA0NCwgVU5L LCBVTkssICAzNCwgVU5LLCBVTkssIFVOSywgIDYzLAorIDY1LCAgNjUsICA2NSwgIDY1LCAgNjUs ICA5MywgIDkxLCAgNjcsICA2OSwgIDY5LCAgNjksICA2OSwgIDczLCAgNzMsICA3MywgIDczLAor VU5LLCAgNzgsICA3OSwgIDc5LCAgNzksICA3OSwgIDc5LCAxMjAsICA5MiwgIDg1LCAgODUsICA4 NSwgIDg1LCAgODksIFVOSywgMTE1LAorIDk3LCAgOTcsICA5NywgIDk3LCAgOTcsIDEyNSwgMTIz LCAgOTksIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTA1LCAxMDUsIDEwNSwgMTA1LAorVU5LLCAxMTAs IDExMSwgMTExLCAxMTEsIDExMSwgMTExLCAgNDcsIDEyNCwgMTE3LCAxMTcsIDExNywgMTE3LCAx MjEsIFVOSywgMTIxCit9OworCitDT05TVCBDSEFSCit5bDFwb1tdID0geyAgLyogTGF0aW4tMSB0 byBQb3J0dWd1ZXNlIElTTyA2NDYgKi8KKyAgMCwgICAxLCAgIDIsICAgMywgICA0LCAgIDUsICAg NiwgICA3LCAgIDgsICAgOSwgIDEwLCAgMTEsICAxMiwgIDEzLCAgMTQsICAxNSwKKyAxNiwgIDE3 LCAgMTgsICAxOSwgIDIwLCAgMjEsICAyMiwgIDIzLCAgMjQsICAyNSwgIDI2LCAgMjcsICAyOCwg IDI5LCAgMzAsICAzMSwKKyAzMiwgIDMzLCAgMzQsICAzNSwgIDM2LCAgMzcsICAzOCwgIDM5LCAg NDAsICA0MSwgIDQyLCAgNDMsICA0NCwgIDQ1LCAgNDYsICA0NywKKyA0OCwgIDQ5LCAgNTAsICA1 MSwgIDUyLCAgNTMsICA1NCwgIDU1LCAgNTYsICA1NywgIDU4LCAgNTksICA2MCwgIDYxLCAgNjIs ICA2MywKKyA2NCwgIDY1LCAgNjYsICA2NywgIDY4LCAgNjksICA3MCwgIDcxLCAgNzIsICA3Mywg IDc0LCAgNzUsICA3NiwgIDc3LCAgNzgsICA3OSwKKyA4MCwgIDgxLCAgODIsICA4MywgIDg0LCAg ODUsICA4NiwgIDg3LCAgODgsICA4OSwgIDkwLCBVTkssIFVOSywgVU5LLCAgOTQsICA5NSwKKyA5 NiwgIDk3LCAgOTgsICA5OSwgMTAwLCAxMDEsIDEwMiwgMTAzLCAxMDQsIDEwNSwgMTA2LCAxMDcs IDEwOCwgMTA5LCAxMTAsIDExMSwKKzExMiwgMTEzLCAxMTQsIDExNSwgMTE2LCAxMTcsIDExOCwg MTE5LCAxMjAsIDEyMSwgMTIyLCBVTkssIFVOSywgVU5LLCAxMjYsIDEyNywKKzEyOCwgMTI5LCAx MzAsIDEzMSwgMTMyLCAxMzMsIDEzNCwgMTM1LCAxMzYsIDEzNywgMTM4LCAxMzksIDE0MCwgMTQx LCAxNDIsIDE0MywKKzE0NCwgMTQ1LCAxNDYsIDE0NywgMTQ4LCAxNDksIDE1MCwgMTUxLCAxNTIs IDE1MywgMTU0LCAxNTUsIDE1NiwgMTU3LCAxNTgsIDE1OSwKKyAzMiwgIDMzLCBVTkssIFVOSywg VU5LLCBVTkssIFVOSywgVU5LLCAgMzQsICA2NywgVU5LLCAgMzQsIFVOSywgIDQ1LCAgODIsIFVO SywKK1VOSywgVU5LLCBVTkssIFVOSywgIDM5LCAxMTcsIFVOSywgVU5LLCAgNDQsIFVOSywgVU5L LCAgMzQsIFVOSywgVU5LLCBVTkssICA2MywKKyA2NSwgIDY1LCAgNjUsICA5MSwgIDY1LCAgNjUs ICA2NSwgIDkyLCAgNjksICA2OSwgIDY5LCAgNjksICA3MywgIDczLCAgNzMsICA3MywKK1VOSywg IDc4LCAgNzksICA3OSwgIDc5LCAgOTMsICA3OSwgMTIwLCAgNzksICA4NSwgIDg1LCAgODUsICA4 NSwgIDg5LCBVTkssIDExNSwKKyA5NywgIDk3LCAgOTcsIDEyMywgIDk3LCAgOTcsICA5NywgMTI0 LCAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwNSwgMTA1LCAxMDUsIDEwNSwKK1VOSywgMTEwLCAxMTEs IDExMSwgMTExLCAxMjUsIDExMSwgIDQ3LCAxMTEsIDExNywgMTE3LCAxMTcsIDExNywgMTIxLCBV TkssIDEyMQorfTsKKworQ09OU1QgQ0hBUgoreWwxc3BbXSA9IHsgIC8qIExhdGluLTEgdG8gU3Bh bmlzaCBJU08gNjQ2ICovCisgIDAsICAgMSwgICAyLCAgIDMsICAgNCwgICA1LCAgIDYsICAgNywg ICA4LCAgIDksICAxMCwgIDExLCAgMTIsICAxMywgIDE0LCAgMTUsCisgMTYsICAxNywgIDE4LCAg MTksICAyMCwgIDIxLCAgMjIsICAyMywgIDI0LCAgMjUsICAyNiwgIDI3LCAgMjgsICAyOSwgIDMw LCAgMzEsCisgMzIsICAzMywgIDM0LCBVTkssICAzNiwgIDM3LCAgMzgsICAzOSwgIDQwLCAgNDEs ICA0MiwgIDQzLCAgNDQsICA0NSwgIDQ2LCAgNDcsCisgNDgsICA0OSwgIDUwLCAgNTEsICA1Miwg IDUzLCAgNTQsICA1NSwgIDU2LCAgNTcsICA1OCwgIDU5LCAgNjAsICA2MSwgIDYyLCAgNjMsCitV TkssICA2NSwgIDY2LCAgNjcsICA2OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAgNzMsICA3NCwgIDc1 LCAgNzYsICA3NywgIDc4LCAgNzksCisgODAsICA4MSwgIDgyLCAgODMsICA4NCwgIDg1LCAgODYs ICA4NywgIDg4LCAgODksICA5MCwgVU5LLCBVTkssIFVOSywgIDk0LCAgOTUsCisgOTYsICA5Nywg IDk4LCAgOTksIDEwMCwgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3LCAxMDgsIDEw OSwgMTEwLCAxMTEsCisxMTIsIDExMywgMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgsIDExOSwgMTIw LCAxMjEsIDEyMiwgIDk2LCBVTkssIFVOSywgMTI2LCAxMjcsCisxMjYsIDEyOSwgMTMwLCAxMzEs IDEzMiwgMTMzLCAxMzQsIDEzNSwgMTM2LCAxMzcsIDEzOCwgMTM5LCAxNDAsIDE0MSwgMTQyLCAx NDMsCisxNDQsIDE0NSwgMTQ2LCAxNDcsIDE0OCwgMTQ5LCAxNTAsIDE1MSwgMTUyLCAxNTMsIDE1 NCwgMTU1LCAxNTYsIDE1NywgMTU4LCAxNTksCisgMzIsICA5MSwgVU5LLCAgMzUsIFVOSywgVU5L LCBVTkssICA2NCwgIDM0LCAgNjcsIFVOSywgIDM0LCBVTkssICA0NSwgIDgyLCBVTkssCisxMjMs IFVOSywgVU5LLCBVTkssICAzOSwgMTE3LCBVTkssIFVOSywgIDQ0LCBVTkssIFVOSywgIDM0LCBV TkssIFVOSywgVU5LLCAgOTMsCisgNjUsICA2NSwgIDY1LCAgNjUsICA2NSwgIDY1LCAgNjUsICA2 NywgIDY5LCAgNjksICA2OSwgIDY5LCAgNzMsICA3MywgIDczLCAgNzMsCitVTkssICA5MiwgIDc5 LCAgNzksICA3OSwgIDc5LCAgNzksIDEyMCwgIDc5LCAgODUsICA4NSwgIDg1LCAgODUsICA4OSwg VU5LLCAxMTUsCisxMjQsICA5NywgIDk3LCAgOTcsICA5NywgIDk3LCAgOTcsIDEyNSwgMTAxLCAx MDEsIDEwMSwgMTAxLCAxMDUsIDEwNSwgMTA1LCAxMDUsCitVTkssIDEyNCwgMTExLCAxMTEsIDEx MSwgMTExLCAxMTEsICA0NywgMTExLCAxMTcsIDExNywgMTE3LCAxMTcsIDEyMSwgVU5LLCAxMjEK K307CisKK0NPTlNUIENIQVIKK3lsMXN3W10gPSB7ICAvKiBMYXRpbi0xIHRvIFN3ZWRpc2ggSVNP IDY0NiAqLworICAwLCAgIDEsICAgMiwgICAzLCAgIDQsICAgNSwgICA2LCAgIDcsICAgOCwgICA5 LCAgMTAsICAxMSwgIDEyLCAgMTMsICAxNCwgIDE1LAorIDE2LCAgMTcsICAxOCwgIDE5LCAgMjAs ICAyMSwgIDIyLCAgMjMsICAyNCwgIDI1LCAgMjYsICAyNywgIDI4LCAgMjksICAzMCwgIDMxLAor IDMyLCAgMzMsICAzNCwgIDM1LCAgMzYsICAzNywgIDM4LCAgMzksICA0MCwgIDQxLCAgNDIsICA0 MywgIDQ0LCAgNDUsICA0NiwgIDQ3LAorIDQ4LCAgNDksICA1MCwgIDUxLCAgNTIsICA1MywgIDU0 LCAgNTUsICA1NiwgIDU3LCAgNTgsICA1OSwgIDYwLCAgNjEsICA2MiwgIDYzLAorVU5LLCAgNjUs ICA2NiwgIDY3LCAgNjgsICA2OSwgIDcwLCAgNzEsICA3MiwgIDczLCAgNzQsICA3NSwgIDc2LCAg NzcsICA3OCwgIDc5LAorIDgwLCAgODEsICA4MiwgIDgzLCAgODQsICA4NSwgIDg2LCAgODcsICA4 OCwgIDg5LCAgOTAsIFVOSywgVU5LLCBVTkssIFVOSywgIDk1LAorVU5LLCAgOTcsICA5OCwgIDk5 LCAxMDAsIDEwMSwgMTAyLCAxMDMsIDEwNCwgMTA1LCAxMDYsIDEwNywgMTA4LCAxMDksIDExMCwg MTExLAorMTEyLCAxMTMsIDExNCwgMTE1LCAxMTYsIDExNywgMTE4LCAxMTksIDEyMCwgMTIxLCAx MjIsIFVOSywgVU5LLCBVTkssIFVOSywgMTI3LAorMTI4LCAxMjksIDEzMCwgMTMxLCAxMzIsIDEz MywgMTM0LCAxMzUsIDEzNiwgMTM3LCAxMzgsIDEzOSwgMTQwLCAxNDEsIDE0MiwgMTQzLAorMTQ0 LCAxNDUsIDE0NiwgMTQ3LCAxNDgsIDE0OSwgMTUwLCAxNTEsIDE1MiwgMTUzLCAxNTQsIDE1NSwg MTU2LCAxNTcsIDE1OCwgMTU5LAorIDMyLCAgMzMsIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBV TkssICAzNCwgIDY3LCBVTkssICAzNCwgVU5LLCAgNDUsICA4MiwgVU5LLAorVU5LLCBVTkssIFVO SywgVU5LLCAgMzksIDExNywgVU5LLCBVTkssICA0NCwgVU5LLCBVTkssICAzNCwgVU5LLCBVTkss IFVOSywgIDYzLAorIDY1LCAgNjUsICA2NSwgIDY1LCAgOTEsICA5MywgIDY1LCAgNjcsICA2OSwg IDY0LCAgNjksICA2OSwgIDczLCAgNzMsICA3MywgIDczLAorVU5LLCAgNzgsICA3OSwgIDc5LCAg NzksICA3OSwgIDkyLCAxMjAsICA3OSwgIDg1LCAgODUsICA4NSwgIDk0LCAgODksIFVOSywgMTE1 LAorIDk3LCAgOTcsICA5NywgIDk3LCAxMjMsIDEyNSwgIDk3LCAgOTksIDEwMSwgIDk2LCAxMDEs IDEwMSwgMTA1LCAxMDUsIDEwNSwgMTA1LAorVU5LLCAxMTAsIDExMSwgMTExLCAxMTEsIDExMSwg MTI0LCAgNDcsIDExMSwgMTE3LCAxMTcsIDExNywgMTI2LCAxMjEsIFVOSywgMTIxCit9OworCitD T05TVCBDSEFSCit5bDFjaFtdID0geyAgLyogTGF0aW4tMSB0byBTd2lzcyBJU08gNjQ2ICovCisg IDAsICAgMSwgICAyLCAgIDMsICAgNCwgICA1LCAgIDYsICAgNywgICA4LCAgIDksICAxMCwgIDEx LCAgMTIsICAxMywgIDE0LCAgMTUsCisgMTYsICAxNywgIDE4LCAgMTksICAyMCwgIDIxLCAgMjIs ICAyMywgIDI0LCAgMjUsICAyNiwgIDI3LCAgMjgsICAyOSwgIDMwLCAgMzEsCisgMzIsICAzMywg IDM0LCBVTkssICAzNiwgIDM3LCAgMzgsICAzOSwgIDQwLCAgNDEsICA0MiwgIDQzLCAgNDQsICA0 NSwgIDQ2LCAgNDcsCisgNDgsICA0OSwgIDUwLCAgNTEsICA1MiwgIDUzLCAgNTQsICA1NSwgIDU2 LCAgNTcsICA1OCwgIDU5LCAgNjAsICA2MSwgIDYyLCAgNjMsCitVTkssICA2NSwgIDY2LCAgNjcs ICA2OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAgNzMsICA3NCwgIDc1LCAgNzYsICA3NywgIDc4LCAg NzksCisgODAsICA4MSwgIDgyLCAgODMsICA4NCwgIDg1LCAgODYsICA4NywgIDg4LCAgODksICA5 MCwgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssCisgOTYsICA5NywgIDk4LCAgOTksIDEwMCwgMTAx LCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3LCAxMDgsIDEwOSwgMTEwLCAxMTEsCisxMTIs IDExMywgMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgsIDExOSwgMTIwLCAxMjEsIDEyMiwgVU5LLCBV TkssIFVOSywgVU5LLCAxMjcsCisxMjgsIDEyOSwgMTMwLCAxMzEsIDEzMiwgMTMzLCAxMzQsIDEz NSwgMTM2LCAxMzcsIDEzOCwgMTM5LCAxNDAsIDE0MSwgMTQyLCAxNDMsCisxNDQsIDE0NSwgMTQ2 LCAxNDcsIDE0OCwgMTQ5LCAxNTAsIDE1MSwgMTUyLCAxNTMsIDE1NCwgMTU1LCAxNTYsIDE1Nywg MTU4LCAxNTksCisgMzIsICAzMywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgIDM0LCAg NjcsIFVOSywgIDM0LCBVTkssICA0NSwgIDgyLCBVTkssCitVTkssIFVOSywgVU5LLCBVTkssICAz OSwgMTE3LCBVTkssIFVOSywgIDQ0LCBVTkssIFVOSywgIDM0LCBVTkssIFVOSywgVU5LLCAgNjMs CisgNjUsICA2NSwgIDY1LCAgNjUsICA2NSwgIDY1LCAgNjUsICA2NywgIDY5LCAgNjksICA2OSwg IDY5LCAgNzMsICA3MywgIDczLCAgNzMsCitVTkssICA3OCwgIDc5LCAgNzksICA3OSwgIDc5LCAg NzksIDEyMCwgIDc5LCAgODUsICA4NSwgIDg1LCAgODUsICA4OSwgVU5LLCAxMTUsCisgNjQsICA5 NywgIDk3LCAgOTcsIDEyMywgIDk3LCAgOTcsICA5MiwgIDk1LCAgOTEsICA5MywgMTAxLCAxMDUs IDEwNSwgIDk0LCAxMDUsCitVTkssIDExMCwgMTExLCAxMTEsICA5NiwgMTExLCAxMjQsICA0Nywg MTExLCAgMzUsIDExNywgMTI2LCAxMjUsIDEyMSwgVU5LLCAxMjEKK307CisKK0NPTlNUIENIQVIK K3lsMWRtW10gPSB7ICAvKiBMYXRpbi0xIHRvIERFQyBNdWx0aW5hdGlvbmFsIENoYXJhY3RlciBT ZXQgKi8KKyAgMCwgICAxLCAgIDIsICAgMywgICA0LCAgIDUsICAgNiwgICA3LCAgIDgsICAgOSwg IDEwLCAgMTEsICAxMiwgIDEzLCAgMTQsICAxNSwKKyAxNiwgIDE3LCAgMTgsICAxOSwgIDIwLCAg MjEsICAyMiwgIDIzLCAgMjQsICAyNSwgIDI2LCAgMjcsICAyOCwgIDI5LCAgMzAsICAzMSwKKyAz MiwgIDMzLCAgMzQsICAzNSwgIDM2LCAgMzcsICAzOCwgIDM5LCAgNDAsICA0MSwgIDQyLCAgNDMs ICA0NCwgIDQ1LCAgNDYsICA0NywKKyA0OCwgIDQ5LCAgNTAsICA1MSwgIDUyLCAgNTMsICA1NCwg IDU1LCAgNTYsICA1NywgIDU4LCAgNTksICA2MCwgIDYxLCAgNjIsICA2MywKKyA2NCwgIDY1LCAg NjYsICA2NywgIDY4LCAgNjksICA3MCwgIDcxLCAgNzIsICA3MywgIDc0LCAgNzUsICA3NiwgIDc3 LCAgNzgsICA3OSwKKyA4MCwgIDgxLCAgODIsICA4MywgIDg0LCAgODUsICA4NiwgIDg3LCAgODgs ICA4OSwgIDkwLCAgOTEsICA5MiwgIDkzLCAgOTQsICA5NSwKKyA5NiwgIDk3LCAgOTgsICA5OSwg MTAwLCAxMDEsIDEwMiwgMTAzLCAxMDQsIDEwNSwgMTA2LCAxMDcsIDEwOCwgMTA5LCAxMTAsIDEx MSwKKzExMiwgMTEzLCAxMTQsIDExNSwgMTE2LCAxMTcsIDExOCwgMTE5LCAxMjAsIDEyMSwgMTIy LCAxMjMsIDEyNCwgMTI1LCAxMjYsIDEyNywKKzEyOCwgMTI5LCAxMzAsIDEzMSwgMTMyLCAxMzMs IDEzNCwgMTM1LCAxMzYsIDEzNywgMTM4LCAxMzksIDE0MCwgMTQxLCAxNDIsIDE0MywKKzE0NCwg MTQ1LCAxNDYsIDE0NywgMTQ4LCAxNDksIDE1MCwgMTUxLCAxNTIsIDE1MywgMTU0LCAxNTUsIDE1 NiwgMTU3LCAxNTgsIDE1OSwKKyAzMiwgMTYxLCAxNjIsIDE2MywgMTY4LCAxNjUsIDEyNCwgMTY3 LCAgMzQsIDE2OSwgMTcwLCAxNzEsIDEyNiwgVU5LLCAgODIsIFVOSywKKzE3NiwgMTc3LCAxNzgs IDE3OSwgIDM5LCAxODEsIDE4MiwgMTgzLCAgNDQsIDE4NSwgMTg2LCAxODcsIDE4OCwgMTg5LCBV TkssIDE5MSwKKzE5MiwgMTkzLCAxOTQsIDE5NSwgMTk2LCAxOTcsIDE5OCwgMTk5LCAyMDAsIDIw MSwgMjAyLCAyMDMsIDIwNCwgMjA1LCAyMDYsIDIwNywKK1VOSywgMjA5LCAyMTAsIDIxMSwgMjEy LCAyMTMsIDIxNCwgMTIwLCAyMTYsIDIxNywgMjE4LCAyMTksIDIyMCwgMjIxLCBVTkssIDIyMywK KzIyNCwgMjI1LCAyMjYsIDIyNywgMjI4LCAyMjksIDIzMCwgMjMxLCAyMzIsIDIzMywgMjM0LCAy MzUsIDIzNiwgMjM3LCAyMzgsIDIzOSwKK1VOSywgMjQxLCAyNDIsIDI0MywgMjQ0LCAyNDUsIDI0 NiwgIDQ3LCAyNDgsIDI0OSwgMjUwLCAyNTEsIDI1MiwgVU5LLCBVTkssIDI1MworfTsKKworQ09O U1QgQ0hBUgoreWwxZGdbXSA9IHsgIC8qIExhdGluLTEgdG8gRGF0YSBHZW5lcmFsIEludGVybmF0 aW9uYWwgQ2hhcmFjdGVyIFNldCAqLworICAwLCAgIDEsICAgMiwgICAzLCAgIDQsICAgNSwgICA2 LCAgIDcsICAgOCwgICA5LCAgMTAsICAxMSwgIDEyLCAgMTMsICAxNCwgIDE1LAorIDE2LCAgMTcs ICAxOCwgIDE5LCAgMjAsICAyMSwgIDIyLCAgMjMsICAyNCwgIDI1LCAgMjYsICAyNywgIDI4LCAg MjksICAzMCwgIDMxLAorIDMyLCAgMzMsICAzNCwgIDM1LCAgMzYsICAzNywgIDM4LCAgMzksICA0 MCwgIDQxLCAgNDIsICA0MywgIDQ0LCAgNDUsICA0NiwgIDQ3LAorIDQ4LCAgNDksICA1MCwgIDUx LCAgNTIsICA1MywgIDU0LCAgNTUsICA1NiwgIDU3LCAgNTgsICA1OSwgIDYwLCAgNjEsICA2Miwg IDYzLAorIDY0LCAgNjUsICA2NiwgIDY3LCAgNjgsICA2OSwgIDcwLCAgNzEsICA3MiwgIDczLCAg NzQsICA3NSwgIDc2LCAgNzcsICA3OCwgIDc5LAorIDgwLCAgODEsICA4MiwgIDgzLCAgODQsICA4 NSwgIDg2LCAgODcsICA4OCwgIDg5LCAgOTAsICA5MSwgIDkyLCAgOTMsICA5NCwgIDk1LAorIDk2 LCAgOTcsICA5OCwgIDk5LCAxMDAsIDEwMSwgMTAyLCAxMDMsIDEwNCwgMTA1LCAxMDYsIDEwNywg MTA4LCAxMDksIDExMCwgMTExLAorMTEyLCAxMTMsIDExNCwgMTE1LCAxMTYsIDExNywgMTE4LCAx MTksIDEyMCwgMTIxLCAxMjIsIDEyMywgMTI0LCAxMjUsIDEyNiwgMTI3LAorMTI4LCAxMjksIDEz MCwgMTMxLCAxMzIsIDEzMywgMTM0LCAxMzUsIDEzNiwgMTM3LCAxMzgsIDEzOSwgMTQwLCAxNDEs IDE0MiwgMTQzLAorMTQ0LCAxNDUsIDE0NiwgMTQ3LCAxNDgsIDE0OSwgMTUwLCAxNTEsIDE1Miwg MTUzLCAxNTQsIDE1NSwgMTU2LCAxNTcsIDE1OCwgMTU5LAorMTYwLCAxNzEsIDE2NywgMTY4LCAx NjYsIDE4MSwgMTkxLCAxODcsIDE4OSwgMTczLCAxNjksIDE3NywgMTYxLCAyNTUsIDE3NCwgMTc1 LAorMTg4LCAxODIsIDE2NCwgMTY1LCAxOTAsIDE2MywgMTc4LCAxODUsIDE4NiwgMTc5LCAxNzAs IDE3NiwgMjIzLCAxNjIsIDIyMCwgMTcyLAorMTkzLCAxOTIsIDE5NCwgMTk2LCAxOTUsIDE5Nywg MTk4LCAxOTksIDIwMSwgMjAwLCAyMDIsIDIwMywgMjA1LCAyMDQsIDIwNiwgMjA3LAorMTg0LCAy MDgsIDIxMCwgMjA5LCAyMTEsIDIxMywgMjEyLCAyMTUsIDIxNCwgMjE3LCAyMTYsIDIxOCwgMjE5 LCAyMjEsIDIyMiwgMjUyLAorMjI1LCAyMjQsIDIyNiwgMjI4LCAyMjcsIDIyOSwgMjMwLCAyMzEs IDIzMywgMjMyLCAyMzQsIDIzNSwgMjM3LCAyMzYsIDIzOCwgMjM5LAorMTgzLCAyNDAsIDI0Miwg MjQxLCAyNDMsIDI0NSwgMjQ0LCAyNDcsIDI0NiwgMjQ5LCAyNDgsIDI1MCwgMjUxLCAxODAsIDI1 NCwgMjUzCit9OworCisKKy8qIExvY2FsIGZpbGUgY2hhcmFjdGVyIHNldHMgdG8gSVNPIExhdGlu IEFscGhhYmV0IDEgKi8KKworI2lmZGVmIE5PVFVTRUQKK0NPTlNUIENIQVIKK3lhc2wxW10gPSB7 ICAvKiBBU0NJSSB0byBMYXRpbi0xICovCisgIDAsICAgMSwgICAyLCAgIDMsICAgNCwgICA1LCAg IDYsICAgNywgICA4LCAgIDksICAxMCwgIDExLCAgMTIsICAxMywgIDE0LCAgMTUsCisgMTYsICAx NywgIDE4LCAgMTksICAyMCwgIDIxLCAgMjIsICAyMywgIDI0LCAgMjUsICAyNiwgIDI3LCAgMjgs ICAyOSwgIDMwLCAgMzEsCisgMzIsICAzMywgIDM0LCAgMzUsICAzNiwgIDM3LCAgMzgsICAzOSwg IDQwLCAgNDEsICA0MiwgIDQzLCAgNDQsICA0NSwgIDQ2LCAgNDcsCisgNDgsICA0OSwgIDUwLCAg NTEsICA1MiwgIDUzLCAgNTQsICA1NSwgIDU2LCAgNTcsICA1OCwgIDU5LCAgNjAsICA2MSwgIDYy LCAgNjMsCisgNjQsICA2NSwgIDY2LCAgNjcsICA2OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAgNzMs ICA3NCwgIDc1LCAgNzYsICA3NywgIDc4LCAgNzksCisgODAsICA4MSwgIDgyLCAgODMsICA4NCwg IDg1LCAgODYsICA4NywgIDg4LCAgODksICA5MCwgIDkxLCAgOTIsICA5MywgIDk0LCAgOTUsCisg OTYsICA5NywgIDk4LCAgOTksIDEwMCwgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3 LCAxMDgsIDEwOSwgMTEwLCAxMTEsCisxMTIsIDExMywgMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgs IDExOSwgMTIwLCAxMjEsIDEyMiwgMTIzLCAxMjQsIDEyNSwgMTI2LCAxMjcKK307CisjZW5kaWYg LyogTk9UVVNFRCAqLworCitDT05TVCBDSEFSCit5YXFsMVtdID0geyAgLyogRXh0ZW5kZWQgTWFj IExhdGluIChiYXNlZCBvbiBBcHBsZSBRdWlja2RyYXcpIHRvIExhdGluLTEgKi8KKyAgMCwgICAx LCAgIDIsICAgMywgICA0LCAgIDUsICAgNiwgICA3LCAgIDgsICAgOSwgIDEwLCAgMTEsICAxMiwg IDEzLCAgMTQsICAxNSwKKyAxNiwgIDE3LCAgMTgsICAxOSwgIDIwLCAgMjEsICAyMiwgIDIzLCAg MjQsICAyNSwgIDI2LCAgMjcsICAyOCwgIDI5LCAgMzAsICAzMSwKKyAzMiwgIDMzLCAgMzQsICAz NSwgIDM2LCAgMzcsICAzOCwgIDM5LCAgNDAsICA0MSwgIDQyLCAgNDMsICA0NCwgIDQ1LCAgNDYs ICA0NywKKyA0OCwgIDQ5LCAgNTAsICA1MSwgIDUyLCAgNTMsICA1NCwgIDU1LCAgNTYsICA1Nywg IDU4LCAgNTksICA2MCwgIDYxLCAgNjIsICA2MywKKyA2NCwgIDY1LCAgNjYsICA2NywgIDY4LCAg NjksICA3MCwgIDcxLCAgNzIsICA3MywgIDc0LCAgNzUsICA3NiwgIDc3LCAgNzgsICA3OSwKKyA4 MCwgIDgxLCAgODIsICA4MywgIDg0LCAgODUsICA4NiwgIDg3LCAgODgsICA4OSwgIDkwLCAgOTEs ICA5MiwgIDkzLCAgOTQsICA5NSwKKyA5NiwgIDk3LCAgOTgsICA5OSwgMTAwLCAxMDEsIDEwMiwg MTAzLCAxMDQsIDEwNSwgMTA2LCAxMDcsIDEwOCwgMTA5LCAxMTAsIDExMSwKKzExMiwgMTEzLCAx MTQsIDExNSwgMTE2LCAxMTcsIDExOCwgMTE5LCAxMjAsIDEyMSwgMTIyLCAxMjMsIDEyNCwgMTI1 LCAxMjYsIDEyNywKKzE5NiwgMTk3LCAxOTksIDIwMSwgMjA5LCAyMTQsIDIyMCwgMjI1LCAyMjQs IDIyNiwgMjI4LCAyMjcsIDIyOSwgMjMxLCAyMzMsIDIzMiwKKzIzNCwgMjM1LCAyMzcsIDIzNiwg MjM4LCAyMzksIDI0MSwgMjQzLCAyNDIsIDI0NCwgMjQ2LCAyNDUsIDI1MCwgMjQ5LCAyNTEsIDI1 MiwKKzIyMSwgMTc2LCAxNjIsIDE2MywgMTY3LCAyMTUsIDE4MiwgMjIzLCAxNzQsIDE2OSwgMTc4 LCAxODAsIDE2OCwgMTc5LCAxOTgsIDIxNiwKKzE4NSwgMTc3LCAxODgsIDE4OSwgMTY1LCAxODEs IDEyOCwgMTI5LCAxMzAsIDEzMSwgMTkwLCAxNzAsIDE4NiwgMTMyLCAyMzAsIDI0OCwKKzE5MSwg MTYxLCAxNzIsIDE0MiwgMTMzLCAxMzQsIDEzNSwgMTcxLCAxODcsIDE2NiwgMTYwLCAxOTIsIDE5 NSwgMjEzLCAxMzYsIDEzNywKKzE3MywgMTQ0LCAxMzgsIDEzOSwgMTQzLCAxNDYsIDI0NywgMTQ1 LCAyNTUsIDE0MCwgMTQxLCAxNjQsIDIwOCwgMjQwLCAyMjIsIDI1NCwKKzI1MywgMTgzLCAxNDcs IDE0OCwgMTQ5LCAxOTQsIDIwMiwgMTkzLCAyMDMsIDIwMCwgMjA1LCAyMDYsIDIwNywgMjA0LCAy MTEsIDIxMiwKKzE1MCwgMjEwLCAyMTgsIDIxOSwgMjE3LCAxNTEsIDE1MiwgMTUzLCAxNzUsIDE1 NCwgMTU1LCAxNTYsIDE4NCwgMTU3LCAxNTgsIDE1OQorfTsKKworQ09OU1QgQ0hBUgoreWR1bDFb XSA9IHsgIC8qIER1dGNoIElTTyA2NDYgdG8gTGF0aW4tMSAqLworICAwLCAgIDEsICAgMiwgICAz LCAgIDQsICAgNSwgICA2LCAgIDcsICAgOCwgICA5LCAgMTAsICAxMSwgIDEyLCAgMTMsICAxNCwg IDE1LAorIDE2LCAgMTcsICAxOCwgIDE5LCAgMjAsICAyMSwgIDIyLCAgMjMsICAyNCwgIDI1LCAg MjYsICAyNywgIDI4LCAgMjksICAzMCwgIDMxLAorIDMyLCAgMzMsICAzNCwgMTYzLCAgMzYsICAz NywgIDM4LCAgMzksICA0MCwgIDQxLCAgNDIsICA0MywgIDQ0LCAgNDUsICA0NiwgIDQ3LAorIDQ4 LCAgNDksICA1MCwgIDUxLCAgNTIsICA1MywgIDU0LCAgNTUsICA1NiwgIDU3LCAgNTgsICA1OSwg IDYwLCAgNjEsICA2MiwgIDYzLAorMTkwLCAgNjUsICA2NiwgIDY3LCAgNjgsICA2OSwgIDcwLCAg NzEsICA3MiwgIDczLCAgNzQsICA3NSwgIDc2LCAgNzcsICA3OCwgIDc5LAorIDgwLCAgODEsICA4 MiwgIDgzLCAgODQsICA4NSwgIDg2LCAgODcsICA4OCwgIDg5LCAgOTAsIDI1NSwgMTg5LCAxMjQs ICA5NCwgIDk1LAorIDk2LCAgOTcsICA5OCwgIDk5LCAxMDAsIDEwMSwgMTAyLCAxMDMsIDEwNCwg MTA1LCAxMDYsIDEwNywgMTA4LCAxMDksIDExMCwgMTExLAorMTEyLCAxMTMsIDExNCwgMTE1LCAx MTYsIDExNywgMTE4LCAxMTksIDEyMCwgMTIxLCAxMjIsIDE2OCwgMTY0LCAxODgsICAzOSwgMTI3 Cit9OworCitDT05TVCBDSEFSCit5ZmlsMVtdID0geyAgLyogRmlubmlzaCBOUkMgKCpub3QqIElT Ty02NDYpIHRvIExhdGluLTEgKi8KKyAgMCwgICAxLCAgIDIsICAgMywgICA0LCAgIDUsICAgNiwg ICA3LCAgIDgsICAgOSwgIDEwLCAgMTEsICAxMiwgIDEzLCAgMTQsICAxNSwKKyAxNiwgIDE3LCAg MTgsICAxOSwgIDIwLCAgMjEsICAyMiwgIDIzLCAgMjQsICAyNSwgIDI2LCAgMjcsICAyOCwgIDI5 LCAgMzAsICAzMSwKKyAzMiwgIDMzLCAgMzQsICAzNSwgIDM2LCAgMzcsICAzOCwgIDM5LCAgNDAs ICA0MSwgIDQyLCAgNDMsICA0NCwgIDQ1LCAgNDYsICA0NywKKyA0OCwgIDQ5LCAgNTAsICA1MSwg IDUyLCAgNTMsICA1NCwgIDU1LCAgNTYsICA1NywgIDU4LCAgNTksICA2MCwgIDYxLCAgNjIsICA2 MywKKyA2NCwgIDY1LCAgNjYsICA2NywgIDY4LCAgNjksICA3MCwgIDcxLCAgNzIsICA3MywgIDc0 LCAgNzUsICA3NiwgIDc3LCAgNzgsICA3OSwKKyA4MCwgIDgxLCAgODIsICA4MywgIDg0LCAgODUs ICA4NiwgIDg3LCAgODgsICA4OSwgIDkwLCAxOTYsIDIxNCwgMTk3LCAyMjAsICA5NSwKKzIzMywg IDk3LCAgOTgsICA5OSwgMTAwLCAxMDEsIDEwMiwgMTAzLCAxMDQsIDEwNSwgMTA2LCAxMDcsIDEw OCwgMTA5LCAxMTAsIDExMSwKKzExMiwgMTEzLCAxMTQsIDExNSwgMTE2LCAxMTcsIDExOCwgMTE5 LCAxMjAsIDEyMSwgMTIyLCAyMjgsIDI0NiwgMjI5LCAyNTIsIDEyNworfTsKKworQ09OU1QgQ0hB UgoreWZybDFbXSA9IHsgIC8qIEZyZW5jaCBJU08gNjQ2IHRvIExhdGluLTEgKi8KKyAgMCwgICAx LCAgIDIsICAgMywgICA0LCAgIDUsICAgNiwgICA3LCAgIDgsICAgOSwgIDEwLCAgMTEsICAxMiwg IDEzLCAgMTQsICAxNSwKKyAxNiwgIDE3LCAgMTgsICAxOSwgIDIwLCAgMjEsICAyMiwgIDIzLCAg MjQsICAyNSwgIDI2LCAgMjcsICAyOCwgIDI5LCAgMzAsICAzMSwKKyAzMiwgIDMzLCAgMzQsIDE2 MywgIDM2LCAgMzcsICAzOCwgIDM5LCAgNDAsICA0MSwgIDQyLCAgNDMsICA0NCwgIDQ1LCAgNDYs ICA0NywKKyA0OCwgIDQ5LCAgNTAsICA1MSwgIDUyLCAgNTMsICA1NCwgIDU1LCAgNTYsICA1Nywg IDU4LCAgNTksICA2MCwgIDYxLCAgNjIsICA2MywKKzIyNCwgIDY1LCAgNjYsICA2NywgIDY4LCAg NjksICA3MCwgIDcxLCAgNzIsICA3MywgIDc0LCAgNzUsICA3NiwgIDc3LCAgNzgsICA3OSwKKyA4 MCwgIDgxLCAgODIsICA4MywgIDg0LCAgODUsICA4NiwgIDg3LCAgODgsICA4OSwgIDkwLCAxNzYs IDIzMSwgMTY3LCAgOTQsICA5NSwKKyA5NiwgIDk3LCAgOTgsICA5OSwgMTAwLCAxMDEsIDEwMiwg MTAzLCAxMDQsIDEwNSwgMTA2LCAxMDcsIDEwOCwgMTA5LCAxMTAsIDExMSwKKzExMiwgMTEzLCAx MTQsIDExNSwgMTE2LCAxMTcsIDExOCwgMTE5LCAxMjAsIDEyMSwgMTIyLCAyMzMsIDI0OSwgMjMy LCAxNjgsIDEyNworfTsKKworQ09OU1QgQ0hBUgoreWZjbDFbXSA9IHsgIC8qIEZyZW5jaC1DYW5h ZGlhbiBJU08gNjQ2IHRvIExhdGluLTEgKi8KKyAgMCwgICAxLCAgIDIsICAgMywgICA0LCAgIDUs ICAgNiwgICA3LCAgIDgsICAgOSwgIDEwLCAgMTEsICAxMiwgIDEzLCAgMTQsICAxNSwKKyAxNiwg IDE3LCAgMTgsICAxOSwgIDIwLCAgMjEsICAyMiwgIDIzLCAgMjQsICAyNSwgIDI2LCAgMjcsICAy OCwgIDI5LCAgMzAsICAzMSwKKyAzMiwgIDMzLCAgMzQsICAzNSwgIDM2LCAgMzcsICAzOCwgIDM5 LCAgNDAsICA0MSwgIDQyLCAgNDMsICA0NCwgIDQ1LCAgNDYsICA0NywKKyA0OCwgIDQ5LCAgNTAs ICA1MSwgIDUyLCAgNTMsICA1NCwgIDU1LCAgNTYsICA1NywgIDU4LCAgNTksICA2MCwgIDYxLCAg NjIsICA2MywKKzIyNCwgIDY1LCAgNjYsICA2NywgIDY4LCAgNjksICA3MCwgIDcxLCAgNzIsICA3 MywgIDc0LCAgNzUsICA3NiwgIDc3LCAgNzgsICA3OSwKKyA4MCwgIDgxLCAgODIsICA4MywgIDg0 LCAgODUsICA4NiwgIDg3LCAgODgsICA4OSwgIDkwLCAyMjYsIDIzMSwgMjM0LCAyMzgsICA5NSwK KzI0NCwgIDk3LCAgOTgsICA5OSwgMTAwLCAxMDEsIDEwMiwgMTAzLCAxMDQsIDEwNSwgMTA2LCAx MDcsIDEwOCwgMTA5LCAxMTAsIDExMSwKKzExMiwgMTEzLCAxMTQsIDExNSwgMTE2LCAxMTcsIDEx OCwgMTE5LCAxMjAsIDEyMSwgMTIyLCAyMzMsIDI0OSwgMjMyLCAyNTEsIDEyNworfTsKKworQ09O U1QgQ0hBUgoreWdlbDFbXSA9IHsgIC8qIEdlcm1hbiBJU08gNjQ2IHRvIExhdGluLTEgKi8KKyAg MCwgICAxLCAgIDIsICAgMywgICA0LCAgIDUsICAgNiwgICA3LCAgIDgsICAgOSwgIDEwLCAgMTEs ICAxMiwgIDEzLCAgMTQsICAxNSwKKyAxNiwgIDE3LCAgMTgsICAxOSwgIDIwLCAgMjEsICAyMiwg IDIzLCAgMjQsICAyNSwgIDI2LCAgMjcsICAyOCwgIDI5LCAgMzAsICAzMSwKKyAzMiwgIDMzLCAg MzQsICAzNSwgIDM2LCAgMzcsICAzOCwgIDM5LCAgNDAsICA0MSwgIDQyLCAgNDMsICA0NCwgIDQ1 LCAgNDYsICA0NywKKyA0OCwgIDQ5LCAgNTAsICA1MSwgIDUyLCAgNTMsICA1NCwgIDU1LCAgNTYs ICA1NywgIDU4LCAgNTksICA2MCwgIDYxLCAgNjIsICA2MywKKzE2NywgIDY1LCAgNjYsICA2Nywg IDY4LCAgNjksICA3MCwgIDcxLCAgNzIsICA3MywgIDc0LCAgNzUsICA3NiwgIDc3LCAgNzgsICA3 OSwKKyA4MCwgIDgxLCAgODIsICA4MywgIDg0LCAgODUsICA4NiwgIDg3LCAgODgsICA4OSwgIDkw LCAxOTYsIDIxNCwgMjIwLCAgOTQsICA5NSwKKyA5NiwgIDk3LCAgOTgsICA5OSwgMTAwLCAxMDEs IDEwMiwgMTAzLCAxMDQsIDEwNSwgMTA2LCAxMDcsIDEwOCwgMTA5LCAxMTAsIDExMSwKKzExMiwg MTEzLCAxMTQsIDExNSwgMTE2LCAxMTcsIDExOCwgMTE5LCAxMjAsIDEyMSwgMTIyLCAyMjgsIDI0 NiwgMjUyLCAyMjMsIDEyNworfTsKKworQ09OU1QgQ0hBUgoreWl0bDFbXSA9IHsgIC8qIEl0YWxp YW4gSVNPIDY0NiB0byBMYXRpbi0xICovCisgIDAsICAgMSwgICAyLCAgIDMsICAgNCwgICA1LCAg IDYsICAgNywgICA4LCAgIDksICAxMCwgIDExLCAgMTIsICAxMywgIDE0LCAgMTUsCisgMTYsICAx NywgIDE4LCAgMTksICAyMCwgIDIxLCAgMjIsICAyMywgIDI0LCAgMjUsICAyNiwgIDI3LCAgMjgs ICAyOSwgIDMwLCAgMzEsCisgMzIsICAzMywgIDM0LCAxNjMsICAzNiwgIDM3LCAgMzgsICAzOSwg IDQwLCAgNDEsICA0MiwgIDQzLCAgNDQsICA0NSwgIDQ2LCAgNDcsCisgNDgsICA0OSwgIDUwLCAg NTEsICA1MiwgIDUzLCAgNTQsICA1NSwgIDU2LCAgNTcsICA1OCwgIDU5LCAgNjAsICA2MSwgIDYy LCAgNjMsCisxNjcsICA2NSwgIDY2LCAgNjcsICA2OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAgNzMs ICA3NCwgIDc1LCAgNzYsICA3NywgIDc4LCAgNzksCisgODAsICA4MSwgIDgyLCAgODMsICA4NCwg IDg1LCAgODYsICA4NywgIDg4LCAgODksICA5MCwgMTc2LCAyMzEsIDIzMywgIDk0LCAgOTUsCisy NDksICA5NywgIDk4LCAgOTksIDEwMCwgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3 LCAxMDgsIDEwOSwgMTEwLCAxMTEsCisxMTIsIDExMywgMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgs IDExOSwgMTIwLCAxMjEsIDEyMiwgMjI0LCAyNDIsIDIzMiwgMjM2LCAxMjcKK307CisKK0NPTlNU IENIQVIKK3luZWwxW10gPSB7ICAvKiBOZVhUIHRvIExhdGluLTEgKi8KKy8qIE5FRUQgVE8gTUFL RSBUSElTIE9ORSBJTlZFUlRJQkxFICovCisgIDAsICAgMSwgICAyLCAgIDMsICAgNCwgICA1LCAg IDYsICAgNywgICA4LCAgIDksICAxMCwgIDExLCAgMTIsICAxMywgIDE0LCAgMTUsCisgMTYsICAx NywgIDE4LCAgMTksICAyMCwgIDIxLCAgMjIsICAyMywgIDI0LCAgMjUsICAyNiwgIDI3LCAgMjgs ICAyOSwgIDMwLCAgMzEsCisgMzIsICAzMywgIDM0LCAgMzUsICAzNiwgIDM3LCAgMzgsICAzOSwg IDQwLCAgNDEsICA0MiwgIDQzLCAgNDQsICA0NSwgIDQ2LCAgNDcsCisgNDgsICA0OSwgIDUwLCAg NTEsICA1MiwgIDUzLCAgNTQsICA1NSwgIDU2LCAgNTcsICA1OCwgIDU5LCAgNjAsICA2MSwgIDYy LCAgNjMsCisgNjQsICA2NSwgIDY2LCAgNjcsICA2OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAgNzMs ICA3NCwgIDc1LCAgNzYsICA3NywgIDc4LCAgNzksCisgODAsICA4MSwgIDgyLCAgODMsICA4NCwg IDg1LCAgODYsICA4NywgIDg4LCAgODksICA5MCwgIDkxLCAgOTIsICA5MywgIDk0LCAgOTUsCisg OTYsICA5NywgIDk4LCAgOTksIDEwMCwgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3 LCAxMDgsIDEwOSwgMTEwLCAxMTEsCisxMTIsIDExMywgMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgs IDExOSwgMTIwLCAxMjEsIDEyMiwgMTIzLCAxMjQsIDEyNSwgMTI2LCAxMjcsCisxNjAsIDE5Miwg MTkzLCAxOTQsIDE5NSwgMTk2LCAxOTcsIDE5OSwgMjAwLCAyMDEsIDIwMiwgMjAzLCAyMDQsIDIw NSwgMjA2LCAyMDcsCisyMDgsIDIwOSwgMjEwLCAyMTEsIDIxMiwgMjEzLCAyMTQsIDIxNywgMjE4 LCAyMTksIDIyMCwgMjIxLCAyMjIsIDE4MSwgMjE1LCAyNDcsCisxNjksIDE2MSwgMTYyLCAxNjMs IFVOSywgMTY1LCBVTkssIDE2NywgMTY0LCBVTkssIFVOSywgMTcxLCBVTkssIFVOSywgVU5LLCBV TkssCisxNzQsIFVOSywgVU5LLCBVTkssIDE4MywgMTY2LCAxODIsIFVOSywgVU5LLCBVTkssIFVO SywgMTg3LCBVTkssIFVOSywgMTcyLCAxOTEsCisxODUsICA5NiwgMTgwLCAgOTQsIDEyNiwgMTc1 LCBVTkssIFVOSywgMTY4LCAxNzgsIDE3NiwgMTg0LCAxNzksIFVOSywgVU5LLCBVTkssCitVTkss IDE3NywgMTg4LCAxODksIDE5MCwgMjI0LCAyMjUsIDIyNiwgMjI3LCAyMjgsIDIyOSwgMjMxLCAy MzIsIDIzMywgMjM0LCAyMzUsCisyMzYsIDE5OCwgMjM3LCAxNzAsIDIzOCwgMjM5LCAyNDAsIDI0 MSwgVU5LLCAyMTYsIFVOSywgMTg2LCAyNDIsIDI0MywgMjQ0LCAyNDUsCisyNDYsIDIzMCwgMjQ5 LCAyNTAsIDI1MSwgVU5LLCAyNTIsIDI1MywgVU5LLCAyNDgsIFVOSywgMjIzLCAyNTQsIDI1NSwg VU5LLCBVTksKK307CisKK0NPTlNUIENIQVIKK3lub2wxW10gPSB7ICAvKiBOb3J3ZWdpYW4vRGFu aXNoIElTTyA2NDYgdG8gTGF0aW4tMSAqLworICAwLCAgIDEsICAgMiwgICAzLCAgIDQsICAgNSwg ICA2LCAgIDcsICAgOCwgICA5LCAgMTAsICAxMSwgIDEyLCAgMTMsICAxNCwgIDE1LAorIDE2LCAg MTcsICAxOCwgIDE5LCAgMjAsICAyMSwgIDIyLCAgMjMsICAyNCwgIDI1LCAgMjYsICAyNywgIDI4 LCAgMjksICAzMCwgIDMxLAorIDMyLCAgMzMsICAzNCwgIDM1LCAgMzYsICAzNywgIDM4LCAgMzks ICA0MCwgIDQxLCAgNDIsICA0MywgIDQ0LCAgNDUsICA0NiwgIDQ3LAorIDQ4LCAgNDksICA1MCwg IDUxLCAgNTIsICA1MywgIDU0LCAgNTUsICA1NiwgIDU3LCAgNTgsICA1OSwgIDYwLCAgNjEsICA2 MiwgIDYzLAorIDY0LCAgNjUsICA2NiwgIDY3LCAgNjgsICA2OSwgIDcwLCAgNzEsICA3MiwgIDcz LCAgNzQsICA3NSwgIDc2LCAgNzcsICA3OCwgIDc5LAorIDgwLCAgODEsICA4MiwgIDgzLCAgODQs ICA4NSwgIDg2LCAgODcsICA4OCwgIDg5LCAgOTAsIDE5OCwgMjE2LCAxOTcsICA5NCwgIDk1LAor IDk2LCAgOTcsICA5OCwgIDk5LCAxMDAsIDEwMSwgMTAyLCAxMDMsIDEwNCwgMTA1LCAxMDYsIDEw NywgMTA4LCAxMDksIDExMCwgMTExLAorMTEyLCAxMTMsIDExNCwgMTE1LCAxMTYsIDExNywgMTE4 LCAxMTksIDEyMCwgMTIxLCAxMjIsIDIzMCwgMjQ4LCAyMjksIDEyNiwgMTI3Cit9OworCitDT05T VCBDSEFSCit5cG9sMVtdID0geyAgLyogUG9ydHVndWVzZSBJU08gNjQ2IHRvIExhdGluLTEgKi8K KyAgMCwgICAxLCAgIDIsICAgMywgICA0LCAgIDUsICAgNiwgICA3LCAgIDgsICAgOSwgIDEwLCAg MTEsICAxMiwgIDEzLCAgMTQsICAxNSwKKyAxNiwgIDE3LCAgMTgsICAxOSwgIDIwLCAgMjEsICAy MiwgIDIzLCAgMjQsICAyNSwgIDI2LCAgMjcsICAyOCwgIDI5LCAgMzAsICAzMSwKKyAzMiwgIDMz LCAgMzQsICAzNSwgIDM2LCAgMzcsICAzOCwgIDM5LCAgNDAsICA0MSwgIDQyLCAgNDMsICA0NCwg IDQ1LCAgNDYsICA0NywKKyA0OCwgIDQ5LCAgNTAsICA1MSwgIDUyLCAgNTMsICA1NCwgIDU1LCAg NTYsICA1NywgIDU4LCAgNTksICA2MCwgIDYxLCAgNjIsICA2MywKKyA2NCwgIDY1LCAgNjYsICA2 NywgIDY4LCAgNjksICA3MCwgIDcxLCAgNzIsICA3MywgIDc0LCAgNzUsICA3NiwgIDc3LCAgNzgs ICA3OSwKKyA4MCwgIDgxLCAgODIsICA4MywgIDg0LCAgODUsICA4NiwgIDg3LCAgODgsICA4OSwg IDkwLCAxOTUsIDE5OSwgMjEzLCAgOTQsICA5NSwKKyA5NiwgIDk3LCAgOTgsICA5OSwgMTAwLCAx MDEsIDEwMiwgMTAzLCAxMDQsIDEwNSwgMTA2LCAxMDcsIDEwOCwgMTA5LCAxMTAsIDExMSwKKzEx MiwgMTEzLCAxMTQsIDExNSwgMTE2LCAxMTcsIDExOCwgMTE5LCAxMjAsIDEyMSwgMTIyLCAyMjcs IDIzMSwgMjQ1LCAxMjYsIDEyNworfTsKKworQ09OU1QgQ0hBUgoreXNwbDFbXSA9IHsgIC8qIFNw YW5pc2ggSVNPIDY0NiB0byBMYXRpbi0xICovCisgIDAsICAgMSwgICAyLCAgIDMsICAgNCwgICA1 LCAgIDYsICAgNywgICA4LCAgIDksICAxMCwgIDExLCAgMTIsICAxMywgIDE0LCAgMTUsCisgMTYs ICAxNywgIDE4LCAgMTksICAyMCwgIDIxLCAgMjIsICAyMywgIDI0LCAgMjUsICAyNiwgIDI3LCAg MjgsICAyOSwgIDMwLCAgMzEsCisgMzIsICAzMywgIDM0LCAxNjMsICAzNiwgIDM3LCAgMzgsICAz OSwgIDQwLCAgNDEsICA0MiwgIDQzLCAgNDQsICA0NSwgIDQ2LCAgNDcsCisgNDgsICA0OSwgIDUw LCAgNTEsICA1MiwgIDUzLCAgNTQsICA1NSwgIDU2LCAgNTcsICA1OCwgIDU5LCAgNjAsICA2MSwg IDYyLCAgNjMsCisxNjcsICA2NSwgIDY2LCAgNjcsICA2OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAg NzMsICA3NCwgIDc1LCAgNzYsICA3NywgIDc4LCAgNzksCisgODAsICA4MSwgIDgyLCAgODMsICA4 NCwgIDg1LCAgODYsICA4NywgIDg4LCAgODksICA5MCwgMTYxLCAyMDksIDE5MSwgIDk0LCAgOTUs CisgOTYsICA5NywgIDk4LCAgOTksIDEwMCwgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwg MTA3LCAxMDgsIDEwOSwgMTEwLCAxMTEsCisxMTIsIDExMywgMTE0LCAxMTUsIDExNiwgMTE3LCAx MTgsIDExOSwgMTIwLCAxMjEsIDEyMiwgMTc2LCAyNDEsIDIzMSwgMTI2LCAxMjcKK307CisKK0NP TlNUIENIQVIKK3lzd2wxW10gPSB7ICAvKiBTd2VkaXNoIElTTyA2NDYgdG8gTGF0aW4tMSAqLwor ICAwLCAgIDEsICAgMiwgICAzLCAgIDQsICAgNSwgICA2LCAgIDcsICAgOCwgICA5LCAgMTAsICAx MSwgIDEyLCAgMTMsICAxNCwgIDE1LAorIDE2LCAgMTcsICAxOCwgIDE5LCAgMjAsICAyMSwgIDIy LCAgMjMsICAyNCwgIDI1LCAgMjYsICAyNywgIDI4LCAgMjksICAzMCwgIDMxLAorIDMyLCAgMzMs ICAzNCwgIDM1LCAgMzYsICAzNywgIDM4LCAgMzksICA0MCwgIDQxLCAgNDIsICA0MywgIDQ0LCAg NDUsICA0NiwgIDQ3LAorIDQ4LCAgNDksICA1MCwgIDUxLCAgNTIsICA1MywgIDU0LCAgNTUsICA1 NiwgIDU3LCAgNTgsICA1OSwgIDYwLCAgNjEsICA2MiwgIDYzLAorMjAxLCAgNjUsICA2NiwgIDY3 LCAgNjgsICA2OSwgIDcwLCAgNzEsICA3MiwgIDczLCAgNzQsICA3NSwgIDc2LCAgNzcsICA3OCwg IDc5LAorIDgwLCAgODEsICA4MiwgIDgzLCAgODQsICA4NSwgIDg2LCAgODcsICA4OCwgIDg5LCAg OTAsIDE5NiwgMjE0LCAxOTcsIDIyMCwgIDk1LAorMjMzLCAgOTcsICA5OCwgIDk5LCAxMDAsIDEw MSwgMTAyLCAxMDMsIDEwNCwgMTA1LCAxMDYsIDEwNywgMTA4LCAxMDksIDExMCwgMTExLAorMTEy LCAxMTMsIDExNCwgMTE1LCAxMTYsIDExNywgMTE4LCAxMTksIDEyMCwgMTIxLCAxMjIsIDIyOCwg MjQ2LCAyMjksIDI1MiwgMTI3Cit9OworCitDT05TVCBDSEFSCit5Y2hsMVtdID0geyAgLyogU3dp c3MgSVNPIDY0NiB0byBMYXRpbi0xICovCisgIDAsICAgMSwgICAyLCAgIDMsICAgNCwgICA1LCAg IDYsICAgNywgICA4LCAgIDksICAxMCwgIDExLCAgMTIsICAxMywgIDE0LCAgMTUsCisgMTYsICAx NywgIDE4LCAgMTksICAyMCwgIDIxLCAgMjIsICAyMywgIDI0LCAgMjUsICAyNiwgIDI3LCAgMjgs ICAyOSwgIDMwLCAgMzEsCisgMzIsICAzMywgIDM0LCAyNDksICAzNiwgIDM3LCAgMzgsICAzOSwg IDQwLCAgNDEsICA0MiwgIDQzLCAgNDQsICA0NSwgIDQ2LCAgNDcsCisgNDgsICA0OSwgIDUwLCAg NTEsICA1MiwgIDUzLCAgNTQsICA1NSwgIDU2LCAgNTcsICA1OCwgIDU5LCAgNjAsICA2MSwgIDYy LCAgNjMsCisyMjQsICA2NSwgIDY2LCAgNjcsICA2OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAgNzMs ICA3NCwgIDc1LCAgNzYsICA3NywgIDc4LCAgNzksCisgODAsICA4MSwgIDgyLCAgODMsICA4NCwg IDg1LCAgODYsICA4NywgIDg4LCAgODksICA5MCwgMjMzLCAyMzEsIDIzNCwgMjM4LCAyMzIsCisy NDQsICA5NywgIDk4LCAgOTksIDEwMCwgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3 LCAxMDgsIDEwOSwgMTEwLCAxMTEsCisxMTIsIDExMywgMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgs IDExOSwgMTIwLCAxMjEsIDEyMiwgMjI4LCAyNDYsIDI1MiwgMjUxLCAxMjcKK307CisKK0NPTlNU IENIQVIKK3lodWwxW10gPSB7ICAvKiBIdW5nYXJpYW4gSVNPIDY0NiB0byBMYXRpbi0xICovCisg IDAsICAgMSwgICAyLCAgIDMsICAgNCwgICA1LCAgIDYsICAgNywgICA4LCAgIDksICAxMCwgIDEx LCAgMTIsICAxMywgIDE0LCAgMTUsCisgMTYsICAxNywgIDE4LCAgMTksICAyMCwgIDIxLCAgMjIs ICAyMywgIDI0LCAgMjUsICAyNiwgIDI3LCAgMjgsICAyOSwgIDMwLCAgMzEsCisgMzIsICAzMywg IDM0LCAgMzUsIDE2NCwgIDM3LCAgMzgsICAzOSwgIDQwLCAgNDEsICA0MiwgIDQzLCAgNDQsICA0 NSwgIDQ2LCAgNDcsCisgNDgsICA0OSwgIDUwLCAgNTEsICA1MiwgIDUzLCAgNTQsICA1NSwgIDU2 LCAgNTcsICA1OCwgIDU5LCAgNjAsICA2MSwgIDYyLCAgNjMsCisxOTMsICA2NSwgIDY2LCAgNjcs ICA2OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAgNzMsICA3NCwgIDc1LCAgNzYsICA3NywgIDc4LCAg NzksCisgODAsICA4MSwgIDgyLCAgODMsICA4NCwgIDg1LCAgODYsICA4NywgIDg4LCAgODksICA5 MCwgMjAxLCAyMTQsIDIyMCwgIDk0LCAgOTUsCisyMjUsICA5NywgIDk4LCAgOTksIDEwMCwgMTAx LCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3LCAxMDgsIDEwOSwgMTEwLCAxMTEsCisxMTIs IDExMywgMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgsIDExOSwgMTIwLCAxMjEsIDEyMiwgMjMzLCAy NDYsIDI1MiwgIDM0LCAxMjcKK307CisKK0NPTlNUIENIQVIKK3lkbWwxW10gPSB7ICAvKiBERUMg TXVsdGluYXRpb25hbCBDaGFyYWN0ZXIgU2V0IHRvIExhdGluLTEgKi8KKy8qIE5vdGU6IFRoaXMg aXMgYSBudWxsIHRyYW5zbGF0aW9uICovCisgIDAsICAgMSwgICAyLCAgIDMsICAgNCwgICA1LCAg IDYsICAgNywgICA4LCAgIDksICAxMCwgIDExLCAgMTIsICAxMywgIDE0LCAgMTUsCisgMTYsICAx NywgIDE4LCAgMTksICAyMCwgIDIxLCAgMjIsICAyMywgIDI0LCAgMjUsICAyNiwgIDI3LCAgMjgs ICAyOSwgIDMwLCAgMzEsCisgMzIsICAzMywgIDM0LCAgMzUsICAzNiwgIDM3LCAgMzgsICAzOSwg IDQwLCAgNDEsICA0MiwgIDQzLCAgNDQsICA0NSwgIDQ2LCAgNDcsCisgNDgsICA0OSwgIDUwLCAg NTEsICA1MiwgIDUzLCAgNTQsICA1NSwgIDU2LCAgNTcsICA1OCwgIDU5LCAgNjAsICA2MSwgIDYy LCAgNjMsCisgNjQsICA2NSwgIDY2LCAgNjcsICA2OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAgNzMs ICA3NCwgIDc1LCAgNzYsICA3NywgIDc4LCAgNzksCisgODAsICA4MSwgIDgyLCAgODMsICA4NCwg IDg1LCAgODYsICA4NywgIDg4LCAgODksICA5MCwgIDkxLCAgOTIsICA5MywgIDk0LCAgOTUsCisg OTYsICA5NywgIDk4LCAgOTksIDEwMCwgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3 LCAxMDgsIDEwOSwgMTEwLCAxMTEsCisxMTIsIDExMywgMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgs IDExOSwgMTIwLCAxMjEsIDEyMiwgMTIzLCAxMjQsIDEyNSwgMTI2LCAxMjcsCisxMjgsIDEyOSwg MTMwLCAxMzEsIDEzMiwgMTMzLCAxMzQsIDEzNSwgMTM2LCAxMzcsIDEzOCwgMTM5LCAxNDAsIDE0 MSwgMTQyLCAxNDMsCisxNDQsIDE0NSwgMTQ2LCAxNDcsIDE0OCwgMTQ5LCAxNTAsIDE1MSwgMTUy LCAxNTMsIDE1NCwgMTU1LCAxNTYsIDE1NywgMTU4LCAxNTksCisxNjAsIDE2MSwgMTYyLCAxNjMs IDE2NCwgMTY1LCAxNjYsIDE2NywgMTY4LCAxNjksIDE3MCwgMTcxLCAxNzIsIDE3MywgMTc0LCAx NzUsCisxNzYsIDE3NywgMTc4LCAxNzksIDE4MCwgMTgxLCAxODIsIDE4MywgMTg0LCAxODUsIDE4 NiwgMTg3LCAxODgsIDE4OSwgMTkwLCAxOTEsCisxOTIsIDE5MywgMTk0LCAxOTUsIDE5NiwgMTk3 LCAxOTgsIDE5OSwgMjAwLCAyMDEsIDIwMiwgMjAzLCAyMDQsIDIwNSwgMjA2LCAyMDcsCisyMDgs IDIwOSwgMjEwLCAyMTEsIDIxMiwgMjEzLCAyMTQsIDIxNSwgMjE2LCAyMTcsIDIxOCwgMjE5LCAy MjAsIDIyMSwgMjIyLCAyMjMsCisyMjQsIDIyNSwgMjI2LCAyMjcsIDIyOCwgMjI5LCAyMzAsIDIz MSwgMjMyLCAyMzMsIDIzNCwgMjM1LCAyMzYsIDIzNywgMjM4LCAyMzksCisyNDAsIDI0MSwgMjQy LCAyNDMsIDI0NCwgMjQ1LCAyNDYsIDI0NywgMjQ4LCAyNDksIDI1MCwgMjUxLCAyNTIsIDI1Mywg MjU0LCAyNTUKK307CisKK0NPTlNUIENIQVIKK3lkZ2wxW10gPSB7ICAvKiBEYXRhIEdlbmVyYWwg SW50ZXJuYXRpb25hbCB0byBMYXRpbi0xICovCisgIDAsICAgMSwgICAyLCAgIDMsICAgNCwgICA1 LCAgIDYsICAgNywgICA4LCAgIDksICAxMCwgIDExLCAgMTIsICAxMywgIDE0LCAgMTUsCisgMTYs ICAxNywgIDE4LCAgMTksICAyMCwgIDIxLCAgMjIsICAyMywgIDI0LCAgMjUsICAyNiwgIDI3LCAg MjgsICAyOSwgIDMwLCAgMzEsCisgMzIsICAzMywgIDM0LCAgMzUsICAzNiwgIDM3LCAgMzgsICAz OSwgIDQwLCAgNDEsICA0MiwgIDQzLCAgNDQsICA0NSwgIDQ2LCAgNDcsCisgNDgsICA0OSwgIDUw LCAgNTEsICA1MiwgIDUzLCAgNTQsICA1NSwgIDU2LCAgNTcsICA1OCwgIDU5LCAgNjAsICA2MSwg IDYyLCAgNjMsCisgNjQsICA2NSwgIDY2LCAgNjcsICA2OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAg NzMsICA3NCwgIDc1LCAgNzYsICA3NywgIDc4LCAgNzksCisgODAsICA4MSwgIDgyLCAgODMsICA4 NCwgIDg1LCAgODYsICA4NywgIDg4LCAgODksICA5MCwgIDkxLCAgOTIsICA5MywgIDk0LCAgOTUs CisgOTYsICA5NywgIDk4LCAgOTksIDEwMCwgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwg MTA3LCAxMDgsIDEwOSwgMTEwLCAxMTEsCisxMTIsIDExMywgMTE0LCAxMTUsIDExNiwgMTE3LCAx MTgsIDExOSwgMTIwLCAxMjEsIDEyMiwgMTIzLCAxMjQsIDEyNSwgMTI2LCAxMjcsCisxMjgsIDEy OSwgMTMwLCAxMzEsIDEzMiwgMTMzLCAxMzQsIDEzNSwgMTM2LCAxMzcsIDEzOCwgMTM5LCAxNDAs IDE0MSwgMTQyLCAxNDMsCisxNDQsIDE0NSwgMTQ2LCAxNDcsIDE0OCwgMTQ5LCAxNTAsIDE1MSwg MTUyLCAxNTMsIDE1NCwgMTU1LCAxNTYsIDE1NywgMTU4LCAxNTksCisxNjAsIDE3MiwgMTg5LCAx ODEsIDE3OCwgMTc5LCAxNjQsIDE2MiwgMTYzLCAxNzAsIDE4NiwgMTYxLCAxOTEsIDE2OSwgMTc0 LCAxNzUsCisxODcsIDE3MSwgMTgyLCAxODUsIDI1MywgMTY1LCAxNzcsIDI0MCwgMjA4LCAxODMs IDE4NCwgMTY3LCAxNzYsIDE2OCwgMTgwLCAxNjYsCisxOTMsIDE5MiwgMTk0LCAxOTYsIDE5NSwg MTk3LCAxOTgsIDE5OSwgMjAxLCAyMDAsIDIwMiwgMjAzLCAyMDUsIDIwNCwgMjA2LCAyMDcsCisy MDksIDIxMSwgMjEwLCAyMTIsIDIxNCwgMjEzLCAyMTYsIDIxNSwgMjE4LCAyMTcsIDIxOSwgMjIw LCAxOTAsIDIyMSwgMjIyLCAxODgsCisyMjUsIDIyNCwgMjI2LCAyMjgsIDIyNywgMjI5LCAyMzAs IDIzMSwgMjMzLCAyMzIsIDIzNCwgMjM1LCAyMzcsIDIzNiwgMjM4LCAyMzksCisyNDEsIDI0Mywg MjQyLCAyNDQsIDI0NiwgMjQ1LCAyNDgsIDI0NywgMjUwLCAyNDksIDI1MSwgMjUyLCAyMjMsIDI1 NSwgMjU0LCAxNzMKK307CisKKworLyogVHJhbnNsYXRpb24gdGFibGVzIGZvciBDeXJpbGxpYyBj aGFyYWN0ZXIgc2V0cyAqLworCisjaWZkZWYgQ1lSSUxMSUMKK0NPTlNUIENIQVIKK3lsY2FjW10g PSB7ICAvKiBMYXRpbi9DeXJpbGxpYyB0byBDUDg2NiAqLworICAwLCAgIDEsICAgMiwgICAzLCAg IDQsICAgNSwgICA2LCAgIDcsICAgOCwgICA5LCAgMTAsICAxMSwgIDEyLCAgMTMsICAxNCwgIDE1 LAorIDE2LCAgMTcsICAxOCwgIDE5LCAyMDgsIDIwOSwgIDIyLCAgMjMsICAyNCwgIDI1LCAgMjYs ICAyNywgIDI4LCAgMjksICAzMCwgIDMxLAorIDMyLCAgMzMsICAzNCwgIDM1LCAgMzYsICAzNywg IDM4LCAgMzksICA0MCwgIDQxLCAgNDIsICA0MywgIDQ0LCAgNDUsICA0NiwgIDQ3LAorIDQ4LCAg NDksICA1MCwgIDUxLCAgNTIsICA1MywgIDU0LCAgNTUsICA1NiwgIDU3LCAgNTgsICA1OSwgIDYw LCAgNjEsICA2MiwgIDYzLAorIDY0LCAgNjUsICA2NiwgIDY3LCAgNjgsICA2OSwgIDcwLCAgNzEs ICA3MiwgIDczLCAgNzQsICA3NSwgIDc2LCAgNzcsICA3OCwgIDc5LAorIDgwLCAgODEsICA4Miwg IDgzLCAgODQsICA4NSwgIDg2LCAgODcsICA4OCwgIDg5LCAgOTAsICA5MSwgIDkyLCAgOTMsICA5 NCwgIDk1LAorIDk2LCAgOTcsICA5OCwgIDk5LCAxMDAsIDEwMSwgMTAyLCAxMDMsIDEwNCwgMTA1 LCAxMDYsIDEwNywgMTA4LCAxMDksIDExMCwgMTExLAorMTEyLCAxMTMsIDExNCwgMTE1LCAxMTYs IDExNywgMTE4LCAxMTksIDEyMCwgMTIxLCAxMjIsIDEyMywgMTI0LCAxMjUsIDEyNiwgMTI3LAor MTk2LCAxNzksIDE5MiwgMjE3LCAxOTEsIDIxOCwgMTk1LCAxOTMsIDE4MCwgMTk0LCAxOTcsIDE3 NiwgMTc3LCAxNzgsIDIxMSwgMjE2LAorMjA1LCAxODYsIDIwMCwgMTg4LCAxODcsIDIwMSwgMjA0 LCAyMDIsIDE4NSwgMjAzLCAyMDYsIDIyMywgMjIwLCAyMTksIDI1NCwgVU5LLAorMjU1LCAyNDAs IDEzMiwgMTMxLCAyNDIsICA4MywgIDczLCAyNDQsICA3NCwgMTM5LCAxNDEsIDE1MSwgMTM4LCAg NDUsIDI0NiwgMTM1LAorMTI4LCAxMjksIDEzMCwgMTMxLCAxMzIsIDEzMywgMTM0LCAxMzUsIDEz NiwgMTM3LCAxMzgsIDEzOSwgMTQwLCAxNDEsIDE0MiwgMTQzLAorMTQ0LCAxNDUsIDE0NiwgMTQ3 LCAxNDgsIDE0OSwgMTUwLCAxNTEsIDE1MiwgMTUzLCAxNTQsIDE1NSwgMTU2LCAxNTcsIDE1OCwg MTU5LAorMTYwLCAxNjEsIDE2MiwgMTYzLCAxNjQsIDE2NSwgMTY2LCAxNjcsIDE2OCwgMTY5LCAx NzAsIDE3MSwgMTcyLCAxNzMsIDE3NCwgMTc1LAorMjI0LCAyMjUsIDIyNiwgMjI3LCAyMjgsIDIy OSwgMjMwLCAyMzEsIDIzMiwgMjMzLCAyMzQsIDIzNSwgMjM2LCAyMzcsIDIzOCwgMjM5LAorMjUy LCAyNDEsIDE2NCwgMTYzLCAyNDMsIDExNSwgMTA1LCAyNDUsIDEwNiwgMTcxLCAxNzMsIDIzMSwg MTcwLCAgMjEsIDI0NywgMTY3Cit9OworCitDT05TVCBDSEFSCit5bGM1NVtdID0geyAgLyogTGF0 aW4vQ3lyaWxsaWMgdG8gQ1A4NTUgKGludmVyc2Ugb2YgeTU1bGMpICovCisgIDAsICAgMSwgICAy LCAgIDMsICAgNCwgICA1LCAgIDYsICAgNywgICA4LCAgIDksICAxMCwgIDExLCAgMTIsICAxMywg IDE0LCAgMTUsCisgMTYsICAxNywgIDE4LCAgMTksICAyMCwgIDIxLCAgMjIsICAyMywgIDI0LCAg MjUsICAyNiwgIDI3LCAgMjgsICAyOSwgIDMwLCAgMzEsCisgMzIsICAzMywgIDM0LCAgMzUsICAz NiwgIDM3LCAgMzgsICAzOSwgIDQwLCAgNDEsICA0MiwgIDQzLCAgNDQsICA0NSwgIDQ2LCAgNDcs CisgNDgsICA0OSwgIDUwLCAgNTEsICA1MiwgIDUzLCAgNTQsICA1NSwgIDU2LCAgNTcsICA1OCwg IDU5LCAgNjAsICA2MSwgIDYyLCAgNjMsCisgNjQsICA2NSwgIDY2LCAgNjcsICA2OCwgIDY5LCAg NzAsICA3MSwgIDcyLCAgNzMsICA3NCwgIDc1LCAgNzYsICA3NywgIDc4LCAgNzksCisgODAsICA4 MSwgIDgyLCAgODMsICA4NCwgIDg1LCAgODYsICA4NywgIDg4LCAgODksICA5MCwgIDkxLCAgOTIs ICA5MywgIDk0LCAgOTUsCisgOTYsICA5NywgIDk4LCAgOTksIDEwMCwgMTAxLCAxMDIsIDEwMywg MTA0LCAxMDUsIDEwNiwgMTA3LCAxMDgsIDEwOSwgMTEwLCAxMTEsCisxMTIsIDExMywgMTE0LCAx MTUsIDExNiwgMTE3LCAxMTgsIDExOSwgMTIwLCAxMjEsIDEyMiwgMTIzLCAxMjQsIDEyNSwgMTI2 LCAxMjcsCisxNzQsIDE3NSwgMTc2LCAxNzcsIDE3OCwgMTc5LCAxODAsIDE4NSwgMTg2LCAxODcs IDE4OCwgMTkxLCAxOTIsIDE5MywgMTk0LCAxOTUsCisxOTYsIDE5NywgMjAwLCAyMDEsIDIwMiwg MjAzLCAyMDQsIDIwNSwgMjA2LCAyMDcsIDIxNywgMjE4LCAyMTksIDIyMCwgMjIzLCAyNTQsCisy NTUsIDEzMywgMTI5LCAxMzEsIDEzNSwgMTM3LCAxMzksIDE0MSwgMTQzLCAxNDUsIDE0NywgMTQ5 LCAxNTEsIDI0MCwgMTUzLCAxNTUsCisxNjEsIDE2MywgMjM2LCAxNzMsIDE2NywgMTY5LCAyMzQs IDI0NCwgMTg0LCAxOTAsIDE5OSwgMjA5LCAyMTEsIDIxMywgMjE1LCAyMjEsCisyMjYsIDIyOCwg MjMwLCAyMzIsIDE3MSwgMTgyLCAxNjUsIDI1MiwgMjQ2LCAyNTAsIDE1OSwgMjQyLCAyMzgsIDI0 OCwgMTU3LCAyMjQsCisxNjAsIDE2MiwgMjM1LCAxNzIsIDE2NiwgMTY4LCAyMzMsIDI0MywgMTgz LCAxODksIDE5OCwgMjA4LCAyMTAsIDIxMiwgMjE0LCAyMTYsCisyMjUsIDIyNywgMjI5LCAyMzEs IDE3MCwgMTgxLCAxNjQsIDI1MSwgMjQ1LCAyNDksIDE1OCwgMjQxLCAyMzcsIDI0NywgMTU2LCAy MjIsCisyMzksIDEzMiwgMTI4LCAxMzAsIDEzNCwgMTM2LCAxMzgsIDE0MCwgMTQyLCAxNDQsIDE0 NiwgMTQ4LCAxNTAsIDI1MywgMTUyLCAxNTQKK307CisKK0NPTlNUIENIQVIKK3lsYzEyNTFbXSA9 IHsgIC8qIExhdGluL0N5cmlsbGljIHRvIENQMTI1MSAoaW52ZXJzZSBvZiB5MTI1MWxjKSAqLwor ICAwLCAgIDEsICAgMiwgICAzLCAgIDQsICAgNSwgICA2LCAgIDcsICAgOCwgICA5LCAgMTAsICAx MSwgIDEyLCAgMTMsICAxNCwgIDE1LAorIDE2LCAgMTcsICAxOCwgIDE5LCAgMjAsICAyMSwgIDIy LCAgMjMsICAyNCwgIDI1LCAgMjYsICAyNywgIDI4LCAgMjksICAzMCwgIDMxLAorIDMyLCAgMzMs ICAzNCwgIDM1LCAgMzYsICAzNywgIDM4LCAgMzksICA0MCwgIDQxLCAgNDIsICA0MywgIDQ0LCAg NDUsICA0NiwgIDQ3LAorIDQ4LCAgNDksICA1MCwgIDUxLCAgNTIsICA1MywgIDU0LCAgNTUsICA1 NiwgIDU3LCAgNTgsICA1OSwgIDYwLCAgNjEsICA2MiwgIDYzLAorIDY0LCAgNjUsICA2NiwgIDY3 LCAgNjgsICA2OSwgIDcwLCAgNzEsICA3MiwgIDczLCAgNzQsICA3NSwgIDc2LCAgNzcsICA3OCwg IDc5LAorIDgwLCAgODEsICA4MiwgIDgzLCAgODQsICA4NSwgIDg2LCAgODcsICA4OCwgIDg5LCAg OTAsICA5MSwgIDkyLCAgOTMsICA5NCwgIDk1LAorIDk2LCAgOTcsICA5OCwgIDk5LCAxMDAsIDEw MSwgMTAyLCAxMDMsIDEwNCwgMTA1LCAxMDYsIDEwNywgMTA4LCAxMDksIDExMCwgMTExLAorMTEy LCAxMTMsIDExNCwgMTE1LCAxMTYsIDExNywgMTE4LCAxMTksIDEyMCwgMTIxLCAxMjIsIDEyMywg MTI0LCAxMjUsIDEyNiwgMTI3LAorMTMwLCAxMzIsIDEzMywgMTM0LCAxMzUsIDEzNiwgMTM3LCAx MzksIDE0NSwgMTQ2LCAxNDcsIDE0OCwgMTQ5LCAxNTAsIDE1MSwgMTUyLAorMTUzLCAxNTUsIDE2 NCwgMTY1LCAxNjYsIDE2OSwgMTcxLCAxNzIsIDE3NCwgMTc2LCAxNzcsIDE4MCwgMTgxLCAxODIs IDE4MywgMTg3LAorMTYwLCAxNjgsIDEyOCwgMTI5LCAxNzAsIDE4OSwgMTc4LCAxNzUsIDE2Mywg MTM4LCAxNDAsIDE0MiwgMTQxLCAxNzMsIDE2MSwgMTQzLAorMTkyLCAxOTMsIDE5NCwgMTk1LCAx OTYsIDE5NywgMTk4LCAxOTksIDIwMCwgMjAxLCAyMDIsIDIwMywgMjA0LCAyMDUsIDIwNiwgMjA3 LAorMjA4LCAyMDksIDIxMCwgMjExLCAyMTIsIDIxMywgMjE0LCAyMTUsIDIxNiwgMjE3LCAyMTgs IDIxOSwgMjIwLCAyMjEsIDIyMiwgMjIzLAorMjI0LCAyMjUsIDIyNiwgMjI3LCAyMjgsIDIyOSwg MjMwLCAyMzEsIDIzMiwgMjMzLCAyMzQsIDIzNSwgMjM2LCAyMzcsIDIzOCwgMjM5LAorMjQwLCAy NDEsIDI0MiwgMjQzLCAyNDQsIDI0NSwgMjQ2LCAyNDcsIDI0OCwgMjQ5LCAyNTAsIDI1MSwgMjUy LCAyNTMsIDI1NCwgMjU1LAorMTg1LCAxODQsIDE0NCwgMTMxLCAxODYsIDE5MCwgMTc5LCAxOTEs IDE4OCwgMTU0LCAxNTYsIDE1OCwgMTU3LCAxNjcsIDE2MiwgMTU5Cit9OworCitDT05TVCBDSEFS Cit5bGNidVtdID0geyAgLyogTGF0aW4vQ3lyaWxsaWMgdG8gQnVsZ2FyaWFuIFBDIENvZGUgUGFn ZSAqLworICAwLCAgIDEsICAgMiwgICAzLCAgIDQsICAgNSwgICA2LCAgIDcsICAgOCwgICA5LCAg MTAsICAxMSwgIDEyLCAgMTMsICAxNCwgIDE1LAorIDE2LCAgMTcsICAxOCwgIDE5LCAgMjAsICAy MSwgIDIyLCAgMjMsICAyNCwgIDI1LCAgMjYsICAyNywgIDI4LCAgMjksICAzMCwgIDMxLAorIDMy LCAgMzMsICAzNCwgIDM1LCAgMzYsICAzNywgIDM4LCAgMzksICA0MCwgIDQxLCAgNDIsICA0Mywg IDQ0LCAgNDUsICA0NiwgIDQ3LAorIDQ4LCAgNDksICA1MCwgIDUxLCAgNTIsICA1MywgIDU0LCAg NTUsICA1NiwgIDU3LCAgNTgsICA1OSwgIDYwLCAgNjEsICA2MiwgIDYzLAorIDY0LCAgNjUsICA2 NiwgIDY3LCAgNjgsICA2OSwgIDcwLCAgNzEsICA3MiwgIDczLCAgNzQsICA3NSwgIDc2LCAgNzcs ICA3OCwgIDc5LAorIDgwLCAgODEsICA4MiwgIDgzLCAgODQsICA4NSwgIDg2LCAgODcsICA4OCwg IDg5LCAgOTAsICA5MSwgIDkyLCAgOTMsICA5NCwgIDk1LAorIDk2LCAgOTcsICA5OCwgIDk5LCAx MDAsIDEwMSwgMTAyLCAxMDMsIDEwNCwgMTA1LCAxMDYsIDEwNywgMTA4LCAxMDksIDExMCwgMTEx LAorMTEyLCAxMTMsIDExNCwgMTE1LCAxMTYsIDExNywgMTE4LCAxMTksIDEyMCwgMTIxLCAxMjIs IDEyMywgMTI0LCAxMjUsIDEyNiwgMTI3LAorMjU1LCAxOTIsIDE5MywgMTk0LCAxOTUsIDE5Niwg MTk3LCAxOTgsIDE5OSwgMjAwLCAyMDEsIDIwMiwgMjAzLCAyMDQsIDIwNSwgMjA2LAorMTI4LCAx MjksIDEzMCwgMTMxLCAxMzIsIDEzMywgMTM0LCAxMzUsIDEzNiwgMTM3LCAxMzgsIDEzOSwgMTQw LCAxNDEsIDE0MiwgMTQzLAorMTQ0LCAxNDUsIDE0NiwgMTQ3LCAxNDgsIDE0OSwgMTUwLCAxNTEs IDE1MiwgMTUzLCAxNTQsIDE1NSwgMTU2LCAxNTcsIDE1OCwgMTU5LAorMTYwLCAxNjEsIDE2Miwg MTYzLCAxNjQsIDE2NSwgMTY2LCAxNjcsIDE2OCwgMTY5LCAxNzAsIDE3MSwgMTcyLCAxNzMsIDE3 NCwgMTc1LAorMTc2LCAxNzcsIDE3OCwgMTc5LCAxODAsIDE4MSwgMTgyLCAxODMsIDE4NCwgMTg1 LCAxODYsIDE4NywgMTg4LCAxODksIDE5MCwgMTkxLAorMjEzLCAyMDcsIDIwOCwgMjA5LCAyMTAs IDIxMSwgMjEyLCAyMTUsIDIxNiwgMjE3LCAyMTgsIDIxOSwgMjIwLCAyMjEsIDIyMiwgMjIzLAor MjI0LCAyMjUsIDIyNiwgMjI3LCAyMjgsIDIyOSwgMjMwLCAyMzEsIDIzMiwgMjMzLCAyMzQsIDIz NSwgMjM2LCAyMzcsIDIzOCwgMjM5LAorMjQwLCAyNDEsIDI0MiwgMjQzLCAyNDQsIDI0NSwgMjQ2 LCAyNDcsIDI0OCwgMjQ5LCAyNTAsIDI1MSwgMjUyLCAyMTQsIDI1MywgMjU0Cit9OworCitDT05T VCBDSEFSCit5bGNrOFtdID0geyAgLyogTGF0aW4vQ3lyaWxsaWMgdG8gT2xkIEtPSS04IEN5cmls bGljICovCisgIDAsICAgMSwgICAyLCAgIDMsICAgNCwgICA1LCAgIDYsICAgNywgICA4LCAgIDks ICAxMCwgIDExLCAgMTIsICAxMywgIDE0LCAgMTUsCisgMTYsICAxNywgIDE4LCAgMTksICAyMCwg IDIxLCAgMjIsICAyMywgIDI0LCAgMjUsICAyNiwgIDI3LCAgMjgsICAyOSwgIDMwLCAgMzEsCisg MzIsICAzMywgIDM0LCAgMzUsICAzNiwgIDM3LCAgMzgsICAzOSwgIDQwLCAgNDEsICA0MiwgIDQz LCAgNDQsICA0NSwgIDQ2LCAgNDcsCisgNDgsICA0OSwgIDUwLCAgNTEsICA1MiwgIDUzLCAgNTQs ICA1NSwgIDU2LCAgNTcsICA1OCwgIDU5LCAgNjAsICA2MSwgIDYyLCAgNjMsCisgNjQsICA2NSwg IDY2LCAgNjcsICA2OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAgNzMsICA3NCwgIDc1LCAgNzYsICA3 NywgIDc4LCAgNzksCisgODAsICA4MSwgIDgyLCAgODMsICA4NCwgIDg1LCAgODYsICA4NywgIDg4 LCAgODksICA5MCwgIDkxLCAgOTIsICA5MywgIDk0LCAgOTUsCisgOTYsICA5NywgIDk4LCAgOTks IDEwMCwgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3LCAxMDgsIDEwOSwgMTEwLCAx MTEsCisxMTIsIDExMywgMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgsIDExOSwgMTIwLCAxMjEsIDEy MiwgMTIzLCAxMjQsIDEyNSwgMTI2LCAxMjcsCisxMjgsIDEyOSwgMTMwLCAxMzEsIDEzMiwgMTMz LCAxMzQsIDEzNSwgMTM2LCAxMzcsIDEzOCwgMTM5LCAxNDAsIDE0MSwgMTQyLCAxNDMsCisxNDQs IDE0NSwgMTQ2LCAxNDcsIDE0OCwgMTQ5LCAxNTAsIDE1MSwgMTUyLCAxNTMsIDE1NCwgMTU1LCAx NTYsIDE1NywgMTU4LCAxNTksCitVTkssIDIyOSwgVU5LLCBVTkssIFVOSywgIDgzLCAgNzMsICA3 MywgIDc0LCBVTkssIFVOSywgVU5LLCAyMzUsIFVOSywgMjQ1LCBVTkssCisyMjUsIDIyNiwgMjQ3 LCAyMzEsIDIyOCwgMjI5LCAyNDYsIDI1MCwgMjMzLCAyMzQsIDIzNSwgMjM2LCAyMzcsIDIzOCwg MjM5LCAyNDAsCisyNDIsIDI0MywgMjQ0LCAyNDUsIDIzMCwgMjMyLCAyMjcsIDI1NCwgMjUxLCAy NTMsIDI1NSwgMjQ5LCAyNDgsIDI1MiwgMjI0LCAyNDEsCisxOTMsIDE5NCwgMjE1LCAxOTksIDE5 NiwgMTk3LCAyMTQsIDIxOCwgMjAxLCAyMDIsIDIwMywgMjA0LCAyMDUsIDIwNiwgMjA3LCAyMDgs CisyMTAsIDIxMSwgMjEyLCAyMTMsIDE5OCwgMjAwLCAxOTUsIDIyMiwgMjE5LCAyMjEsIDIyMywg MjE3LCAyMTYsIDIyMCwgMTkyLCAyMDksCitVTkssIDE5NywgVU5LLCBVTkssIFVOSywgMTE1LCAx MDUsIDEwNSwgMTA2LCBVTkssIFVOSywgVU5LLCAyMDMsIFVOSywgMjEzLCBVTksKK307CisKK0NP TlNUIENIQVIKK3lhY2xjW10gPSB7ICAvKiBDUDg2NiB0byBMYXRpbi9DeXJpbGxpYyAqLworLyog TkVFRCBUTyBNQUtFIFRISVMgT05FIElOVkVSVElCTEUgKi8KKyAgMCwgICAxLCAgIDIsICAgMywg ICA0LCAgIDUsICAgNiwgICA3LCAgIDgsICAgOSwgIDEwLCAgMTEsICAxMiwgIDEzLCAgMTQsICAx NSwKKyAxNiwgIDE3LCAgMTgsICAxOSwgIDIwLCAgMjEsICAyMiwgIDIzLCAgMjQsICAyNSwgIDI2 LCAgMjcsICAyOCwgIDI5LCAgMzAsICAzMSwKKyAzMiwgIDMzLCAgMzQsICAzNSwgIDM2LCAgMzcs ICAzOCwgIDM5LCAgNDAsICA0MSwgIDQyLCAgNDMsICA0NCwgIDQ1LCAgNDYsICA0NywKKyA0OCwg IDQ5LCAgNTAsICA1MSwgIDUyLCAgNTMsICA1NCwgIDU1LCAgNTYsICA1NywgIDU4LCAgNTksICA2 MCwgIDYxLCAgNjIsICA2MywKKyA2NCwgIDY1LCAgNjYsICA2NywgIDY4LCAgNjksICA3MCwgIDcx LCAgNzIsICA3MywgIDc0LCAgNzUsICA3NiwgIDc3LCAgNzgsICA3OSwKKyA4MCwgIDgxLCAgODIs ICA4MywgIDg0LCAgODUsICA4NiwgIDg3LCAgODgsICA4OSwgIDkwLCAgOTEsICA5MiwgIDkzLCAg OTQsICA5NSwKKyA5NiwgIDk3LCAgOTgsICA5OSwgMTAwLCAxMDEsIDEwMiwgMTAzLCAxMDQsIDEw NSwgMTA2LCAxMDcsIDEwOCwgMTA5LCAxMTAsIDExMSwKKzExMiwgMTEzLCAxMTQsIDExNSwgMTE2 LCAxMTcsIDExOCwgMTE5LCAxMjAsIDEyMSwgMTIyLCAxMjMsIDEyNCwgMTI1LCAxMjYsIDEyNywK KzE3NiwgMTc3LCAxNzgsIDE3OSwgMTgwLCAxODEsIDE4MiwgMTgzLCAxODQsIDE4NSwgMTg2LCAx ODcsIDE4OCwgMTg5LCAxOTAsIDE5MSwKKzE5MiwgMTkzLCAxOTQsIDE5NSwgMTk2LCAxOTcsIDE5 OCwgMTk5LCAyMDAsIDIwMSwgMjAyLCAyMDMsIDIwNCwgMjA1LCAyMDYsIDIwNywKKzIwOCwgMjA5 LCAyMTAsIDIxMSwgMjEyLCAyMTMsIDIxNCwgMjE1LCAyMTYsIDIxNywgMjE4LCAyMTksIDIyMCwg MjIxLCAyMjIsIDIyMywKK1VOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBV TkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywKK1VOSywgVU5LLCBVTkssIFVO SywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkss IFVOSywKK1VOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywg VU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywKKzIyNCwgMjI1LCAyMjYsIDIyNywgMjI4LCAy MjksIDIzMCwgMjMxLCAyMzIsIDIzMywgMjM0LCAyMzUsIDIzNiwgMjM3LCAyMzgsIDIzOSwKKzE2 MSwgMjQxLCAxNjQsIDI0NCwgMTY3LCAyNDcsIDE3NCwgMjU0LCBVTkssIFVOSywgVU5LLCBVTkss IDI0MCwgVU5LLCBVTkssIFVOSworfTsKKworQ09OU1QgQ0hBUgoreTU1bGNbXSA9IHsgIC8qIENQ ODU1IHRvIExhdGluL0N5cmlsbGljIChpbnZlcnNlIG9mIHlsYzU1KSAqLworICAwLCAgIDEsICAg MiwgICAzLCAgIDQsICAgNSwgICA2LCAgIDcsICAgOCwgICA5LCAgMTAsICAxMSwgIDEyLCAgMTMs ICAxNCwgIDE1LAorIDE2LCAgMTcsICAxOCwgIDE5LCAgMjAsICAyMSwgIDIyLCAgMjMsICAyNCwg IDI1LCAgMjYsICAyNywgIDI4LCAgMjksICAzMCwgIDMxLAorIDMyLCAgMzMsICAzNCwgIDM1LCAg MzYsICAzNywgIDM4LCAgMzksICA0MCwgIDQxLCAgNDIsICA0MywgIDQ0LCAgNDUsICA0NiwgIDQ3 LAorIDQ4LCAgNDksICA1MCwgIDUxLCAgNTIsICA1MywgIDU0LCAgNTUsICA1NiwgIDU3LCAgNTgs ICA1OSwgIDYwLCAgNjEsICA2MiwgIDYzLAorIDY0LCAgNjUsICA2NiwgIDY3LCAgNjgsICA2OSwg IDcwLCAgNzEsICA3MiwgIDczLCAgNzQsICA3NSwgIDc2LCAgNzcsICA3OCwgIDc5LAorIDgwLCAg ODEsICA4MiwgIDgzLCAgODQsICA4NSwgIDg2LCAgODcsICA4OCwgIDg5LCAgOTAsICA5MSwgIDky LCAgOTMsICA5NCwgIDk1LAorIDk2LCAgOTcsICA5OCwgIDk5LCAxMDAsIDEwMSwgMTAyLCAxMDMs IDEwNCwgMTA1LCAxMDYsIDEwNywgMTA4LCAxMDksIDExMCwgMTExLAorMTEyLCAxMTMsIDExNCwg MTE1LCAxMTYsIDExNywgMTE4LCAxMTksIDEyMCwgMTIxLCAxMjIsIDEyMywgMTI0LCAxMjUsIDEy NiwgMTI3LAorMjQyLCAxNjIsIDI0MywgMTYzLCAyNDEsIDE2MSwgMjQ0LCAxNjQsIDI0NSwgMTY1 LCAyNDYsIDE2NiwgMjQ3LCAxNjcsIDI0OCwgMTY4LAorMjQ5LCAxNjksIDI1MCwgMTcwLCAyNTEs IDE3MSwgMjUyLCAxNzIsIDI1NCwgMTc0LCAyNTUsIDE3NSwgMjM4LCAyMDYsIDIzNCwgMjAyLAor MjA4LCAxNzYsIDIwOSwgMTc3LCAyMzAsIDE5OCwgMjEyLCAxODAsIDIxMywgMTgxLCAyMjgsIDE5 NiwgMjExLCAxNzksIDEyOCwgMTI5LAorMTMwLCAxMzEsIDEzMiwgMTMzLCAxMzQsIDIyOSwgMTk3 LCAyMTYsIDE4NCwgMTM1LCAxMzYsIDEzNywgMTM4LCAyMTcsIDE4NSwgMTM5LAorMTQwLCAxNDEs IDE0MiwgMTQzLCAxNDQsIDE0NSwgMjE4LCAxODYsIDE0NiwgMTQ3LCAxNDgsIDE0OSwgMTUwLCAx NTEsIDE1MiwgMTUzLAorMjE5LCAxODcsIDIyMCwgMTg4LCAyMjEsIDE4OSwgMjIyLCAxOTAsIDIy MywgMTU0LCAxNTUsIDE1NiwgMTU3LCAxOTEsIDIzOSwgMTU4LAorMjA3LCAyMjQsIDE5MiwgMjI1 LCAxOTMsIDIyNiwgMTk0LCAyMjcsIDE5NSwgMjE0LCAxODIsIDIxMCwgMTc4LCAyMzYsIDIwNCwg MjQwLAorMTczLCAyMzUsIDIwMywgMjE1LCAxODMsIDIzMiwgMjAwLCAyMzcsIDIwNSwgMjMzLCAy MDEsIDIzMSwgMTk5LCAyNTMsIDE1OSwgMTYwCit9OworCitDT05TVCBDSEFSCit5MTI1MWxjW10g PSB7ICAvKiBDUDEyNTEgdG8gTGF0aW4vQ3lyaWxsaWMgKGludmVyc2Ugb2YgeWxjMTI1MSkgKi8K KyAgMCwgICAxLCAgIDIsICAgMywgICA0LCAgIDUsICAgNiwgICA3LCAgIDgsICAgOSwgIDEwLCAg MTEsICAxMiwgIDEzLCAgMTQsICAxNSwKKyAxNiwgIDE3LCAgMTgsICAxOSwgIDIwLCAgMjEsICAy MiwgIDIzLCAgMjQsICAyNSwgIDI2LCAgMjcsICAyOCwgIDI5LCAgMzAsICAzMSwKKyAzMiwgIDMz LCAgMzQsICAzNSwgIDM2LCAgMzcsICAzOCwgIDM5LCAgNDAsICA0MSwgIDQyLCAgNDMsICA0NCwg IDQ1LCAgNDYsICA0NywKKyA0OCwgIDQ5LCAgNTAsICA1MSwgIDUyLCAgNTMsICA1NCwgIDU1LCAg NTYsICA1NywgIDU4LCAgNTksICA2MCwgIDYxLCAgNjIsICA2MywKKyA2NCwgIDY1LCAgNjYsICA2 NywgIDY4LCAgNjksICA3MCwgIDcxLCAgNzIsICA3MywgIDc0LCAgNzUsICA3NiwgIDc3LCAgNzgs ICA3OSwKKyA4MCwgIDgxLCAgODIsICA4MywgIDg0LCAgODUsICA4NiwgIDg3LCAgODgsICA4OSwg IDkwLCAgOTEsICA5MiwgIDkzLCAgOTQsICA5NSwKKyA5NiwgIDk3LCAgOTgsICA5OSwgMTAwLCAx MDEsIDEwMiwgMTAzLCAxMDQsIDEwNSwgMTA2LCAxMDcsIDEwOCwgMTA5LCAxMTAsIDExMSwKKzEx MiwgMTEzLCAxMTQsIDExNSwgMTE2LCAxMTcsIDExOCwgMTE5LCAxMjAsIDEyMSwgMTIyLCAxMjMs IDEyNCwgMTI1LCAxMjYsIDEyNywKKzE2MiwgMTYzLCAxMjgsIDI0MywgMTI5LCAxMzAsIDEzMSwg MTMyLCAxMzMsIDEzNCwgMTY5LCAxMzUsIDE3MCwgMTcyLCAxNzEsIDE3NSwKKzI0MiwgMTM2LCAx MzcsIDEzOCwgMTM5LCAxNDAsIDE0MSwgMTQyLCAxNDMsIDE0NCwgMjQ5LCAxNDUsIDI1MCwgMjUy LCAyNTEsIDI1NSwKKzE2MCwgMTc0LCAyNTQsIDE2OCwgMTQ2LCAxNDcsIDE0OCwgMjUzLCAxNjEs IDE0OSwgMTY0LCAxNTAsIDE1MSwgMTczLCAxNTIsIDE2NywKKzE1MywgMTU0LCAxNjYsIDI0Niwg MTU1LCAxNTYsIDE1NywgMTU4LCAyNDEsIDI0MCwgMjQ0LCAxNTksIDI0OCwgMTY1LCAyNDUsIDI0 NywKKzE3NiwgMTc3LCAxNzgsIDE3OSwgMTgwLCAxODEsIDE4MiwgMTgzLCAxODQsIDE4NSwgMTg2 LCAxODcsIDE4OCwgMTg5LCAxOTAsIDE5MSwKKzE5MiwgMTkzLCAxOTQsIDE5NSwgMTk2LCAxOTcs IDE5OCwgMTk5LCAyMDAsIDIwMSwgMjAyLCAyMDMsIDIwNCwgMjA1LCAyMDYsIDIwNywKKzIwOCwg MjA5LCAyMTAsIDIxMSwgMjEyLCAyMTMsIDIxNCwgMjE1LCAyMTYsIDIxNywgMjE4LCAyMTksIDIy MCwgMjIxLCAyMjIsIDIyMywKKzIyNCwgMjI1LCAyMjYsIDIyNywgMjI4LCAyMjksIDIzMCwgMjMx LCAyMzIsIDIzMywgMjM0LCAyMzUsIDIzNiwgMjM3LCAyMzgsIDIzOQorfTsKKworQ09OU1QgQ0hB UgoreWJ1bGNbXSA9IHsgIC8qIEJ1bGdhcmlhbiBQQyBDb2RlIFBhZ2UgdG8gTGF0aW4vQ3lyaWxs aWMgKi8KKyAgMCwgICAxLCAgIDIsICAgMywgICA0LCAgIDUsICAgNiwgICA3LCAgIDgsICAgOSwg IDEwLCAgMTEsICAxMiwgIDEzLCAgMTQsICAxNSwKKyAxNiwgIDE3LCAgMTgsICAxOSwgIDIwLCAg MjEsICAyMiwgIDIzLCAgMjQsICAyNSwgIDI2LCAgMjcsICAyOCwgIDI5LCAgMzAsICAzMSwKKyAz MiwgIDMzLCAgMzQsICAzNSwgIDM2LCAgMzcsICAzOCwgIDM5LCAgNDAsICA0MSwgIDQyLCAgNDMs ICA0NCwgIDQ1LCAgNDYsICA0NywKKyA0OCwgIDQ5LCAgNTAsICA1MSwgIDUyLCAgNTMsICA1NCwg IDU1LCAgNTYsICA1NywgIDU4LCAgNTksICA2MCwgIDYxLCAgNjIsICA2MywKKyA2NCwgIDY1LCAg NjYsICA2NywgIDY4LCAgNjksICA3MCwgIDcxLCAgNzIsICA3MywgIDc0LCAgNzUsICA3NiwgIDc3 LCAgNzgsICA3OSwKKyA4MCwgIDgxLCAgODIsICA4MywgIDg0LCAgODUsICA4NiwgIDg3LCAgODgs ICA4OSwgIDkwLCAgOTEsICA5MiwgIDkzLCAgOTQsICA5NSwKKyA5NiwgIDk3LCAgOTgsICA5OSwg MTAwLCAxMDEsIDEwMiwgMTAzLCAxMDQsIDEwNSwgMTA2LCAxMDcsIDEwOCwgMTA5LCAxMTAsIDEx MSwKKzExMiwgMTEzLCAxMTQsIDExNSwgMTE2LCAxMTcsIDExOCwgMTE5LCAxMjAsIDEyMSwgMTIy LCAxMjMsIDEyNCwgMTI1LCAxMjYsIDEyNywKKzE0NCwgMTQ1LCAxNDYsIDE0NywgMTQ4LCAxNDks IDE1MCwgMTUxLCAxNTIsIDE1MywgMTU0LCAxNTUsIDE1NiwgMTU3LCAxNTgsIDE1OSwKKzE2MCwg MTYxLCAxNjIsIDE2MywgMTY0LCAxNjUsIDE2NiwgMTY3LCAxNjgsIDE2OSwgMTcwLCAxNzEsIDE3 MiwgMTczLCAxNzQsIDE3NSwKKzE3NiwgMTc3LCAxNzgsIDE3OSwgMTgwLCAxODEsIDE4MiwgMTgz LCAxODQsIDE4NSwgMTg2LCAxODcsIDE4OCwgMTg5LCAxOTAsIDE5MSwKKzE5MiwgMTkzLCAxOTQs IDE5NSwgMTk2LCAxOTcsIDE5OCwgMTk5LCAyMDAsIDIwMSwgMjAyLCAyMDMsIDIwNCwgMjA1LCAy MDYsIDIwNywKKzEyOSwgMTMwLCAxMzEsIDEzMiwgMTMzLCAxMzQsIDEzNSwgMTM2LCAxMzcsIDEz OCwgMTM5LCAxNDAsIDE0MSwgMTQyLCAxNDMsIDIwOSwKKzIxMCwgMjExLCAyMTIsIDIxMywgMjE0 LCAyMDgsIDI1MywgMjE1LCAyMTYsIDIxNywgMjE4LCAyMTksIDIyMCwgMjIxLCAyMjIsIDIyMywK KzIyNCwgMjI1LCAyMjYsIDIyNywgMjI4LCAyMjksIDIzMCwgMjMxLCAyMzIsIDIzMywgMjM0LCAy MzUsIDIzNiwgMjM3LCAyMzgsIDIzOSwKKzI0MCwgMjQxLCAyNDIsIDI0MywgMjQ0LCAyNDUsIDI0 NiwgMjQ3LCAyNDgsIDI0OSwgMjUwLCAyNTEsIDI1MiwgMjU0LCAyNTUsIDEyOAorfTsKKworQ09O U1QgQ0hBUgoreWs4bGNbXSA9IHsgIC8qIE9sZCBLT0ktOCBDeXJpbGxpYyB0byBMYXRpbi9DeXJp bGxpYyAqLworICAwLCAgIDEsICAgMiwgICAzLCAgIDQsICAgNSwgICA2LCAgIDcsICAgOCwgICA5 LCAgMTAsICAxMSwgIDEyLCAgMTMsICAxNCwgIDE1LAorIDE2LCAgMTcsICAxOCwgIDE5LCAgMjAs ICAyMSwgIDIyLCAgMjMsICAyNCwgIDI1LCAgMjYsICAyNywgIDI4LCAgMjksICAzMCwgIDMxLAor IDMyLCAgMzMsICAzNCwgIDM1LCAgMzYsICAzNywgIDM4LCAgMzksICA0MCwgIDQxLCAgNDIsICA0 MywgIDQ0LCAgNDUsICA0NiwgIDQ3LAorIDQ4LCAgNDksICA1MCwgIDUxLCAgNTIsICA1MywgIDU0 LCAgNTUsICA1NiwgIDU3LCAgNTgsICA1OSwgIDYwLCAgNjEsICA2MiwgIDYzLAorIDY0LCAgNjUs ICA2NiwgIDY3LCAgNjgsICA2OSwgIDcwLCAgNzEsICA3MiwgIDczLCAgNzQsICA3NSwgIDc2LCAg NzcsICA3OCwgIDc5LAorIDgwLCAgODEsICA4MiwgIDgzLCAgODQsICA4NSwgIDg2LCAgODcsICA4 OCwgIDg5LCAgOTAsICA5MSwgIDkyLCAgOTMsICA5NCwgIDk1LAorIDk2LCAgOTcsICA5OCwgIDk5 LCAxMDAsIDEwMSwgMTAyLCAxMDMsIDEwNCwgMTA1LCAxMDYsIDEwNywgMTA4LCAxMDksIDExMCwg MTExLAorMTEyLCAxMTMsIDExNCwgMTE1LCAxMTYsIDExNywgMTE4LCAxMTksIDEyMCwgMTIxLCAx MjIsIDEyMywgMTI0LCAxMjUsIDEyNiwgMTI3LAorMTI4LCAxMjksIDEzMCwgMTMxLCAxMzIsIDEz MywgMTM0LCAxMzUsIDEzNiwgMTM3LCAxMzgsIDEzOSwgMTQwLCAxNDEsIDE0MiwgMTQzLAorMTQ0 LCAxNDUsIDE0NiwgMTQ3LCAxNDgsIDE0OSwgMTUwLCAxNTEsIDE1MiwgMTUzLCAxNTQsIDE1NSwg MTU2LCAxNTcsIDE1OCwgMTU5LAorVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBV TkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLAorVU5LLCBVTkssIFVO SywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkss IFVOSywgVU5LLAorMjM4LCAyMDgsIDIwOSwgMjMwLCAyMTIsIDIxMywgMjI4LCAyMTEsIDIyOSwg MjE2LCAyMTcsIDIxOCwgMjE5LCAyMjAsIDIyMSwgMjIyLAorMjIzLCAyMzksIDIyNCwgMjI1LCAy MjYsIDIyNywgMjE0LCAyMTAsIDIzNiwgMjM1LCAyMTUsIDIzMiwgMjM3LCAyMzMsIDIzMSwgMjM0 LAorMjA2LCAxNzYsIDE3NywgMTk4LCAxODAsIDE4MSwgMTk2LCAxNzksIDE5NywgMTg0LCAxODUs IDE4NiwgMTg3LCAxODgsIDE4OSwgMTkwLAorMTkxLCAyMDcsIDE5MiwgMTkzLCAxOTQsIDE5NSwg MTgyLCAxNzgsIDIwNCwgMjAzLCAxODMsIDIwMCwgMjA1LCAyMDEsIDE5OSwgMTI3Cit9OworCitD T05TVCBDSEFSCit5bGNza1tdID0geyAgLyogTGF0aW4vQ3lyaWxsaWMgdG8gU2hvcnQgS09JICov CisgIDAsICAgMSwgICAyLCAgIDMsICAgNCwgICA1LCAgIDYsICAgNywgICA4LCAgIDksICAxMCwg IDExLCAgMTIsICAxMywgIDE0LCAgMTUsCisgMTYsICAxNywgIDE4LCAgMTksICAyMCwgIDIxLCAg MjIsICAyMywgIDI0LCAgMjUsICAyNiwgIDI3LCAgMjgsICAyOSwgIDMwLCAgMzEsCisgMzIsICAz MywgIDM0LCAgMzUsICAzNiwgIDM3LCAgMzgsICAzOSwgIDQwLCAgNDEsICA0MiwgIDQzLCAgNDQs ICA0NSwgIDQ2LCAgNDcsCisgNDgsICA0OSwgIDUwLCAgNTEsICA1MiwgIDUzLCAgNTQsICA1NSwg IDU2LCAgNTcsICA1OCwgIDU5LCAgNjAsICA2MSwgIDYyLCAgNjMsCisgNjQsICA2NSwgIDY2LCAg NjcsICA2OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAgNzMsICA3NCwgIDc1LCAgNzYsICA3NywgIDc4 LCAgNzksCisgODAsICA4MSwgIDgyLCAgODMsICA4NCwgIDg1LCAgODYsICA4NywgIDg4LCAgODks ICA5MCwgIDkxLCAgOTIsICA5MywgIDk0LCAgOTUsCisgNjQsICA2NSwgIDY2LCAgNjcsICA2OCwg IDY5LCAgNzAsICA3MSwgIDcyLCAgNzMsICA3NCwgIDc1LCAgNzYsICA3NywgIDc4LCAgNzksCisg ODAsICA4MSwgIDgyLCAgODMsICA4NCwgIDg1LCAgODYsICA4NywgIDg4LCAgODksICA5MCwgIDkx LCAgOTIsICA5MywgIDk0LCAxMjcsCisgIDAsICAgMSwgICAyLCAgIDMsICAgNCwgICA1LCAgIDYs ICAgNywgICA4LCAgIDksICAxMCwgIDExLCAgMTIsICAxMywgIDE0LCAgMTUsCisgMTYsICAxNywg IDE4LCAgMTksICAyMCwgIDIxLCAgMjIsICAyMywgIDI0LCAgMjUsICAyNiwgIDI3LCAgMjgsICAy OSwgIDMwLCAgMzEsCisgMzIsIDEwMSwgVU5LLCBVTkssIFVOSywgIDgzLCAgNzMsICA3MywgIDc0 LCBVTkssIFVOSywgVU5LLCAxMDcsICA0NSwgMTE3LCBVTkssCisgOTcsICA5OCwgMTE5LCAxMDMs IDEwMCwgMTAxLCAxMTgsIDEyMiwgMTA1LCAxMDYsIDEwNywgMTA4LCAxMDksIDExMCwgMTExLCAx MTIsCisxMTQsIDExNSwgMTE2LCAxMTcsIDEwMiwgMTA0LCAgOTksIDEyNiwgMTIzLCAxMjUsICAz OSwgMTIxLCAxMjAsIDEyNCwgIDk2LCAxMTMsCisgOTcsICA5OCwgMTE5LCAxMDMsIDEwMCwgMTAx LCAxMTgsIDEyMiwgMTA1LCAxMDYsIDEwNywgMTA4LCAxMDksIDExMCwgMTExLCAxMTIsCisxMTQs IDExNSwgMTE2LCAxMTcsIDEwMiwgMTA0LCAgOTksIDEyNiwgMTIzLCAxMjUsICAzOSwgMTIxLCAx MjAsIDEyNCwgIDk2LCAxMTMsCitVTkssIDEwMSwgVU5LLCBVTkssIFVOSywgIDgzLCAgNzMsICA3 MywgIDc0LCBVTkssIFVOSywgVU5LLCAxMDcsIFVOSywgMTE3LCBVTksKK307CisKK0NPTlNUIENI QVIgeXNrY3lbXSA9IHsgIC8qIFNob3J0IEtPSSB0byBMYXRpbi9DeXJpbGxpYyAqLworICAwLCAg IDEsICAgMiwgICAzLCAgIDQsICAgNSwgICA2LCAgIDcsICAgOCwgICA5LCAgMTAsICAxMSwgIDEy LCAgMTMsICAxNCwgIDE1LAorIDE2LCAgMTcsICAxOCwgIDE5LCAgMjAsICAyMSwgIDIyLCAgMjMs ICAyNCwgIDI1LCAgMjYsICAyNywgIDI4LCAgMjksICAzMCwgIDMxLAorIDMyLCAgMzMsICAzNCwg IDM1LCAgMzYsICAzNywgIDM4LCAgMzksICA0MCwgIDQxLCAgNDIsICA0MywgIDQ0LCAgNDUsICA0 NiwgIDQ3LAorIDQ4LCAgNDksICA1MCwgIDUxLCAgNTIsICA1MywgIDU0LCAgNTUsICA1NiwgIDU3 LCAgNTgsICA1OSwgIDYwLCAgNjEsICA2MiwgIDYzLAorIDY0LCAgNjUsICA2NiwgIDY3LCAgNjgs ICA2OSwgIDcwLCAgNzEsICA3MiwgIDczLCAgNzQsICA3NSwgIDc2LCAgNzcsICA3OCwgIDc5LAor IDgwLCAgODEsICA4MiwgIDgzLCAgODQsICA4NSwgIDg2LCAgODcsICA4OCwgIDg5LCAgOTAsICA5 MSwgIDkyLCAgOTMsICA5NCwgIDk1LAorMjA2LCAxNzYsIDE3NywgMTk4LCAxODAsIDE4MSwgMTk2 LCAxNzksIDE5NywgMTg0LCAxODUsIDE4NiwgMTg3LCAxODgsIDE4OSwgMTkwLAorMTkxLCAyMDcs IDE5MiwgMTkzLCAxOTQsIDE5NSwgMTgyLCAxNzgsIDIwNCwgMjAzLCAxODMsIDIwMCwgMjA1LCAy MDEsIDE5OSwgMTI3Cit9OworI2VuZGlmIC8qIENZUklMTElDICovCisKKyNpZmRlZiBMQVRJTjIK KworLyogTGF0aW4tMiB0YWJsZXMgKi8KKworQ09OU1QgQ0hBUgoreWwyNTJbXSA9IHsJCQkJLyog TGF0aW4tMiB0byBDb2RlIFBhZ2UgODUyICovCisgIDAsICAgMSwgICAyLCAgIDMsICAgNCwgICA1 LCAgIDYsICAgNywgICA4LCAgIDksICAxMCwgIDExLCAgMTIsICAxMywgIDE0LCAgMTUsCisgMTYs ICAxNywgIDE4LCAgMTksICAyMCwgIDIxLCAgMjIsICAyMywgIDI0LCAgMjUsICAyNiwgIDI3LCAg MjgsICAyOSwgIDMwLCAgMzEsCisgMzIsICAzMywgIDM0LCAgMzUsICAzNiwgIDM3LCAgMzgsICAz OSwgIDQwLCAgNDEsICA0MiwgIDQzLCAgNDQsICA0NSwgIDQ2LCAgNDcsCisgNDgsICA0OSwgIDUw LCAgNTEsICA1MiwgIDUzLCAgNTQsICA1NSwgIDU2LCAgNTcsICA1OCwgIDU5LCAgNjAsICA2MSwg IDYyLCAgNjMsCisgNjQsICA2NSwgIDY2LCAgNjcsICA2OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAg NzMsICA3NCwgIDc1LCAgNzYsICA3NywgIDc4LCAgNzksCisgODAsICA4MSwgIDgyLCAgODMsICA4 NCwgIDg1LCAgODYsICA4NywgIDg4LCAgODksICA5MCwgIDkxLCAgOTIsICA5MywgIDk0LCAgOTUs CisgOTYsICA5NywgIDk4LCAgOTksIDEwMCwgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwg MTA3LCAxMDgsIDEwOSwgMTEwLCAxMTEsCisxMTIsIDExMywgMTE0LCAxMTUsIDExNiwgMTE3LCAx MTgsIDExOSwgMTIwLCAxMjEsIDEyMiwgMTIzLCAxMjQsIDEyNSwgMTI2LCAxMjcsCisxNzQsIDE3 NSwgMTc2LCAxNzcsIDE3OCwgMTc5LCAxODAsIDE4NSwgMTg2LCAxODcsIDE4OCwgMTkxLCAxOTIs IDE5MywgMTk0LCAxOTUsCisxOTYsIDE5NywgMjAwLCAyMDEsIDIwMiwgMjAzLCAyMDQsIDIwNSwg MjA2LCAyMTcsIDIxOCwgMjE5LCAyMjAsIDIyMywgMjQwLCAyNTQsCisyNTUsIDE2NCwgMjQ0LCAx NTcsIDIwNywgMTQ5LCAxNTEsIDI0NSwgMjQ5LCAyMzAsIDE4NCwgMTU1LCAxNDEsIDE3MCwgMTY2 LCAxODksCisyNDgsIDE2NSwgMjQyLCAxMzYsIDIzOSwgMTUwLCAxNTIsIDI0MywgMjQ3LCAyMzEs IDE3MywgMTU2LCAxNzEsIDI0MSwgMTY3LCAxOTAsCisyMzIsIDE4MSwgMTgyLCAxOTgsIDE0Miwg MTQ1LCAxNDMsIDEyOCwgMTcyLCAxNDQsIDE2OCwgMjExLCAxODMsIDIxNCwgMjE1LCAyMTAsCisy MDksIDIyNywgMjEzLCAyMjQsIDIyNiwgMTM4LCAxNTMsIDE1OCwgMjUyLCAyMjIsIDIzMywgMjM1 LCAxNTQsIDIzNywgMjIxLCAyMjUsCisyMzQsIDE2MCwgMTMxLCAxOTksIDEzMiwgMTQ2LCAxMzQs IDEzNSwgMTU5LCAxMzAsIDE2OSwgMTM3LCAyMTYsIDE2MSwgMTQwLCAyMTIsCisyMDgsIDIyOCwg MjI5LCAxNjIsIDE0NywgMTM5LCAxNDgsIDI0NiwgMjUzLCAxMzMsIDE2MywgMjUxLCAxMjksIDIz NiwgMjM4LCAyNTAKK307CisKK0NPTlNUIENIQVIKK3k1MmwyW10gPSB7CQkJCS8qIENvZGUgUGFn ZSA4NTIgdG8gTGF0aW4tMiAqLworICAwLCAgIDEsICAgMiwgICAzLCAgIDQsICAgNSwgICA2LCAg IDcsICAgOCwgICA5LCAgMTAsICAxMSwgIDEyLCAgMTMsICAxNCwgIDE1LAorIDE2LCAgMTcsICAx OCwgIDE5LCAgMjAsICAyMSwgIDIyLCAgMjMsICAyNCwgIDI1LCAgMjYsICAyNywgIDI4LCAgMjks ICAzMCwgIDMxLAorIDMyLCAgMzMsICAzNCwgIDM1LCAgMzYsICAzNywgIDM4LCAgMzksICA0MCwg IDQxLCAgNDIsICA0MywgIDQ0LCAgNDUsICA0NiwgIDQ3LAorIDQ4LCAgNDksICA1MCwgIDUxLCAg NTIsICA1MywgIDU0LCAgNTUsICA1NiwgIDU3LCAgNTgsICA1OSwgIDYwLCAgNjEsICA2MiwgIDYz LAorIDY0LCAgNjUsICA2NiwgIDY3LCAgNjgsICA2OSwgIDcwLCAgNzEsICA3MiwgIDczLCAgNzQs ICA3NSwgIDc2LCAgNzcsICA3OCwgIDc5LAorIDgwLCAgODEsICA4MiwgIDgzLCAgODQsICA4NSwg IDg2LCAgODcsICA4OCwgIDg5LCAgOTAsICA5MSwgIDkyLCAgOTMsICA5NCwgIDk1LAorIDk2LCAg OTcsICA5OCwgIDk5LCAxMDAsIDEwMSwgMTAyLCAxMDMsIDEwNCwgMTA1LCAxMDYsIDEwNywgMTA4 LCAxMDksIDExMCwgMTExLAorMTEyLCAxMTMsIDExNCwgMTE1LCAxMTYsIDExNywgMTE4LCAxMTks IDEyMCwgMTIxLCAxMjIsIDEyMywgMTI0LCAxMjUsIDEyNiwgMTI3LAorMTk5LCAyNTIsIDIzMywg MjI2LCAyMjgsIDI0OSwgMjMwLCAyMzEsIDE3OSwgMjM1LCAyMTMsIDI0NSwgMjM4LCAxNzIsIDE5 NiwgMTk4LAorMjAxLCAxOTcsIDIyOSwgMjQ0LCAyNDYsIDE2NSwgMTgxLCAxNjYsIDE4MiwgMjE0 LCAyMjAsIDE3MSwgMTg3LCAxNjMsIDIxNSwgMjMyLAorMjI1LCAyMzcsIDI0MywgMjUwLCAxNjEs IDE3NywgMTc0LCAxOTAsIDIwMiwgMjM0LCAxNzMsIDE4OCwgMjAwLCAxODYsIDEyOCwgMTI5LAor MTMwLCAxMzEsIDEzMiwgMTMzLCAxMzQsIDE5MywgMTk0LCAyMDQsIDE3MCwgMTM1LCAxMzYsIDEz NywgMTM4LCAxNzUsIDE5MSwgMTM5LAorMTQwLCAxNDEsIDE0MiwgMTQzLCAxNDQsIDE0NSwgMTk1 LCAyMjcsIDE0NiwgMTQ3LCAxNDgsIDE0OSwgMTUwLCAxNTEsIDE1MiwgMTY0LAorMjQwLCAyMDgs IDIwNywgMjAzLCAyMzksIDIxMCwgMjA1LCAyMDYsIDIzNiwgMTUzLCAxNTQsIDE1NSwgMTU2LCAy MjIsIDIxNywgMTU3LAorMjExLCAyMjMsIDIxMiwgMjA5LCAyNDEsIDI0MiwgMTY5LCAxODUsIDE5 MiwgMjE4LCAyMjQsIDIxOSwgMjUzLCAyMjEsIDI1NCwgMTgwLAorMTU4LCAxODksIDE3OCwgMTgz LCAxNjIsIDE2NywgMjQ3LCAxODQsIDE3NiwgMTY4LCAyNTUsIDI1MSwgMjE2LCAyNDgsIDE1OSwg MTYwCit9OworCitDT05TVCBDSEFSCit5bDIxMjUwW10gPSB7CQkJCS8qIExhdGluLTIgdG8gQ29k ZSBQYWdlIDEyNTAgKi8KKyAgMCwgICAxLCAgIDIsICAgMywgICA0LCAgIDUsICAgNiwgICA3LCAg IDgsICAgOSwgIDEwLCAgMTEsICAxMiwgIDEzLCAgMTQsICAxNSwKKyAxNiwgIDE3LCAgMTgsICAx OSwgIDIwLCAgMjEsICAyMiwgIDIzLCAgMjQsICAyNSwgIDI2LCAgMjcsICAyOCwgIDI5LCAgMzAs ICAzMSwKKyAzMiwgIDMzLCAgMzQsICAzNSwgIDM2LCAgMzcsICAzOCwgIDM5LCAgNDAsICA0MSwg IDQyLCAgNDMsICA0NCwgIDQ1LCAgNDYsICA0NywKKyA0OCwgIDQ5LCAgNTAsICA1MSwgIDUyLCAg NTMsICA1NCwgIDU1LCAgNTYsICA1NywgIDU4LCAgNTksICA2MCwgIDYxLCAgNjIsICA2MywKKyA2 NCwgIDY1LCAgNjYsICA2NywgIDY4LCAgNjksICA3MCwgIDcxLCAgNzIsICA3MywgIDc0LCAgNzUs ICA3NiwgIDc3LCAgNzgsICA3OSwKKyA4MCwgIDgxLCAgODIsICA4MywgIDg0LCAgODUsICA4Niwg IDg3LCAgODgsICA4OSwgIDkwLCAgOTEsICA5MiwgIDkzLCAgOTQsICA5NSwKKyA5NiwgIDk3LCAg OTgsICA5OSwgMTAwLCAxMDEsIDEwMiwgMTAzLCAxMDQsIDEwNSwgMTA2LCAxMDcsIDEwOCwgMTA5 LCAxMTAsIDExMSwKKzExMiwgMTEzLCAxMTQsIDExNSwgMTE2LCAxMTcsIDExOCwgMTE5LCAxMjAs IDEyMSwgMTIyLCAxMjMsIDEyNCwgMTI1LCAxMjYsIDEyNywKKzEyOCwgMTI5LCAxMzAsIDEzMSwg MTMyLCAxMzMsIDEzNCwgMTM1LCAxMzYsIDEzNywgMTM5LCAxNDQsIDE0NSwgMTQ2LCAxNDcsIDE0 OCwKKzE0OSwgMTUwLCAxNTEsIDE1MiwgMTUzLCAxNTUsIDE2NiwgMTY5LCAxNzEsIDE3MiwgMTc0 LCAxNzcsIDE4MSwgMTgyLCAxODMsIDE4NywKKzE2MCwgMTY1LCAxNjIsIDE2MywgMTY0LCAxODgs IDE0MCwgMTY3LCAxNjgsIDEzOCwgMTcwLCAxNDEsIDE0MywgMTczLCAxNDIsIDE3NSwKKzE3Niwg MTg1LCAxNzgsIDE3OSwgMTgwLCAxOTAsIDE1NiwgMTYxLCAxODQsIDE1NCwgMTg2LCAxNTcsIDE1 OSwgMTg5LCAxNTgsIDE5MSwKKzE5MiwgMTkzLCAxOTQsIDE5NSwgMTk2LCAxOTcsIDE5OCwgMTk5 LCAyMDAsIDIwMSwgMjAyLCAyMDMsIDIwNCwgMjA1LCAyMDYsIDIwNywKKzIwOCwgMjA5LCAyMTAs IDIxMSwgMjEyLCAyMTMsIDIxNCwgMjE1LCAyMTYsIDIxNywgMjE4LCAyMTksIDIyMCwgMjIxLCAy MjIsIDIyMywKKzIyNCwgMjI1LCAyMjYsIDIyNywgMjI4LCAyMjksIDIzMCwgMjMxLCAyMzIsIDIz MywgMjM0LCAyMzUsIDIzNiwgMjM3LCAyMzgsIDIzOSwKKzI0MCwgMjQxLCAyNDIsIDI0MywgMjQ0 LCAyNDUsIDI0NiwgMjQ3LCAyNDgsIDI0OSwgMjUwLCAyNTEsIDI1MiwgMjUzLCAyNTQsIDI1NQor fTsKKworQ09OU1QgQ0hBUgoreTEyNTBsMltdID0gewkJCQkvKiBDb2RlIFBhZ2UgMTI1MCB0byBM YXRpbi0yICovCisgIDAsICAgMSwgICAyLCAgIDMsICAgNCwgICA1LCAgIDYsICAgNywgICA4LCAg IDksICAxMCwgIDExLCAgMTIsICAxMywgIDE0LCAgMTUsCisgMTYsICAxNywgIDE4LCAgMTksICAy MCwgIDIxLCAgMjIsICAyMywgIDI0LCAgMjUsICAyNiwgIDI3LCAgMjgsICAyOSwgIDMwLCAgMzEs CisgMzIsICAzMywgIDM0LCAgMzUsICAzNiwgIDM3LCAgMzgsICAzOSwgIDQwLCAgNDEsICA0Miwg IDQzLCAgNDQsICA0NSwgIDQ2LCAgNDcsCisgNDgsICA0OSwgIDUwLCAgNTEsICA1MiwgIDUzLCAg NTQsICA1NSwgIDU2LCAgNTcsICA1OCwgIDU5LCAgNjAsICA2MSwgIDYyLCAgNjMsCisgNjQsICA2 NSwgIDY2LCAgNjcsICA2OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAgNzMsICA3NCwgIDc1LCAgNzYs ICA3NywgIDc4LCAgNzksCisgODAsICA4MSwgIDgyLCAgODMsICA4NCwgIDg1LCAgODYsICA4Nywg IDg4LCAgODksICA5MCwgIDkxLCAgOTIsICA5MywgIDk0LCAgOTUsCisgOTYsICA5NywgIDk4LCAg OTksIDEwMCwgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3LCAxMDgsIDEwOSwgMTEw LCAxMTEsCisxMTIsIDExMywgMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgsIDExOSwgMTIwLCAxMjEs IDEyMiwgMTIzLCAxMjQsIDEyNSwgMTI2LCAxMjcsCisxMjgsIDEyOSwgMTMwLCAxMzEsIDEzMiwg MTMzLCAxMzQsIDEzNSwgMTM2LCAxMzcsIDE2OSwgMTM4LCAxNjYsIDE3MSwgMTc0LCAxNzIsCisx MzksIDE0MCwgMTQxLCAxNDIsIDE0MywgMTQ0LCAxNDUsIDE0NiwgMTQ3LCAxNDgsIDE4NSwgMTQ5 LCAxODIsIDE4NywgMTkwLCAxODgsCisxNjAsIDE4MywgMTYyLCAxNjMsIDE2NCwgMTYxLCAxNTAs IDE2NywgMTY4LCAxNTEsIDE3MCwgMTUyLCAxNTMsIDE3MywgMTU0LCAxNzUsCisxNzYsIDE1NSwg MTc4LCAxNzksIDE4MCwgMTU2LCAxNTcsIDE1OCwgMTg0LCAxNzcsIDE4NiwgMTU5LCAxNjUsIDE4 OSwgMTgxLCAxOTEsCisxOTIsIDE5MywgMTk0LCAxOTUsIDE5NiwgMTk3LCAxOTgsIDE5OSwgMjAw LCAyMDEsIDIwMiwgMjAzLCAyMDQsIDIwNSwgMjA2LCAyMDcsCisyMDgsIDIwOSwgMjEwLCAyMTEs IDIxMiwgMjEzLCAyMTQsIDIxNSwgMjE2LCAyMTcsIDIxOCwgMjE5LCAyMjAsIDIyMSwgMjIyLCAy MjMsCisyMjQsIDIyNSwgMjI2LCAyMjcsIDIyOCwgMjI5LCAyMzAsIDIzMSwgMjMyLCAyMzMsIDIz NCwgMjM1LCAyMzYsIDIzNywgMjM4LCAyMzksCisyNDAsIDI0MSwgMjQyLCAyNDMsIDI0NCwgMjQ1 LCAyNDYsIDI0NywgMjQ4LCAyNDksIDI1MCwgMjUxLCAyNTIsIDI1MywgMjU0LCAyNTUKK307CisK K0NPTlNUIENIQVIKK3lsMm16W10gPSB7CQkJICAgICAvKiBMYXRpbi0yIHRvIE1hem92aWEgKE5P VCBpbnZlcnRpYmxlKSAqLworICAwLCAgIDEsICAgMiwgICAzLCAgIDQsICAgNSwgICA2LCAgIDcs ICAgOCwgICA5LCAgMTAsICAxMSwgIDEyLCAgMTMsICAxNCwgIDE1LAorIDE2LCAgMTcsICAxOCwg IDE5LCAgMjAsICAyMSwgIDIyLCAgMjMsICAyNCwgIDI1LCAgMjYsICAyNywgIDI4LCAgMjksICAz MCwgIDMxLAorIDMyLCAgMzMsICAzNCwgIDM1LCAgMzYsICAzNywgIDM4LCAgMzksICA0MCwgIDQx LCAgNDIsICA0MywgIDQ0LCAgNDUsICA0NiwgIDQ3LAorIDQ4LCAgNDksICA1MCwgIDUxLCAgNTIs ICA1MywgIDU0LCAgNTUsICA1NiwgIDU3LCAgNTgsICA1OSwgIDYwLCAgNjEsICA2MiwgIDYzLAor IDY0LCAgNjUsICA2NiwgIDY3LCAgNjgsICA2OSwgIDcwLCAgNzEsICA3MiwgIDczLCAgNzQsICA3 NSwgIDc2LCAgNzcsICA3OCwgIDc5LAorIDgwLCAgODEsICA4MiwgIDgzLCAgODQsICA4NSwgIDg2 LCAgODcsICA4OCwgIDg5LCAgOTAsICA5MSwgIDkyLCAgOTMsICA5NCwgIDk1LAorIDk2LCAgOTcs ICA5OCwgIDk5LCAxMDAsIDEwMSwgMTAyLCAxMDMsIDEwNCwgMTA1LCAxMDYsIDEwNywgMTA4LCAx MDksIDExMCwgMTExLAorMTEyLCAxMTMsIDExNCwgMTE1LCAxMTYsIDExNywgMTE4LCAxMTksIDEy MCwgMTIxLCAxMjIsIDEyMywgMTI0LCAxMjUsIDEyNiwgMTI3LAorMTI4LCAxMjksIDEzMCwgMTMx LCAxMzIsIDEzMywgMTM0LCAxMzUsIDEzNiwgMTM3LCAxMzgsIDEzOSwgMTQwLCAxNDEsIDE0Miwg MTQzLAorMTQ0LCAxNDUsIDE0NiwgMTQ3LCAxNDgsIDE0OSwgMTUwLCAxNTEsIDE1MiwgMTUzLCAx NTQsIDE1NSwgMTU2LCAxNTcsIDE1OCwgMTU5LAorMjU1LCAxNDMsIFVOSywgMTU2LCAxNTUsICA3 NiwgMTUyLCAgMjEsICAzNCwgIDgzLCAgODMsICA4NCwgMTYwLCAgNDUsICA5MCwgMTYxLAorMjQ4 LCAxMzQsICA0NCwgMTQ2LCAgMzksIDEwOCwgMTU4LCBVTkssICA0NCwgMTE1LCAxMTUsIDExNiwg MTY2LCAgMzQsIDEyMiwgMTY3LAorIDgyLCAgNjUsICA2NSwgIDY1LCAxNDIsICA3NiwgMTQ5LCAx MjgsICA2NywgIDY5LCAxNDQsICA2OSwgIDY5LCAgNzMsICA3MywgIDY4LAorIDY4LCAxNjUsICA3 OCwgMTYzLCAgNzksIDE1MywgMTUzLCAyNTAsICA4MiwgIDg1LCAgODUsIDE1NCwgMTU0LCAgODks ICA4NCwgMjI1LAorMTE0LCAgOTcsIDEzMSwgIDk3LCAxMzIsIDEwOCwgMTQxLCAxMzUsICA5OSwg MTMwLCAxNDUsIDEzNywgMTAxLCAxMDUsIDE0MCwgMTAxLAorMTAwLCAxNjQsIDExMCwgMTYyLCAx NDcsIDE0OCwgMTQ4LCAyNDYsIDExNCwgMTE3LCAxMTcsIDEyOSwgMTI5LCAxMjEsIDExNiwgMjQ5 Cit9OworCitDT05TVCBDSEFSCit5bXpsMltdID0gewkJCSAgICAgLyogTWF6b3ZpYSB0byBMYXRp bi0yIChOT1QgSU5WRVJUSUJMRSkgKi8KKyAgMCwgICAxLCAgIDIsICAgMywgICA0LCAgIDUsICAg NiwgICA3LCAgIDgsICAgOSwgIDEwLCAgMTEsICAxMiwgIDEzLCAgMTQsICAxNSwKKyAxNiwgIDE3 LCAgMTgsICAxOSwgIDIwLCAgMjEsICAyMiwgIDIzLCAgMjQsICAyNSwgIDI2LCAgMjcsICAyOCwg IDI5LCAgMzAsICAzMSwKKyAzMiwgIDMzLCAgMzQsICAzNSwgIDM2LCAgMzcsICAzOCwgIDM5LCAg NDAsICA0MSwgIDQyLCAgNDMsICA0NCwgIDQ1LCAgNDYsICA0NywKKyA0OCwgIDQ5LCAgNTAsICA1 MSwgIDUyLCAgNTMsICA1NCwgIDU1LCAgNTYsICA1NywgIDU4LCAgNTksICA2MCwgIDYxLCAgNjIs ICA2MywKKyA2NCwgIDY1LCAgNjYsICA2NywgIDY4LCAgNjksICA3MCwgIDcxLCAgNzIsICA3Mywg IDc0LCAgNzUsICA3NiwgIDc3LCAgNzgsICA3OSwKKyA4MCwgIDgxLCAgODIsICA4MywgIDg0LCAg ODUsICA4NiwgIDg3LCAgODgsICA4OSwgIDkwLCAgOTEsICA5MiwgIDkzLCAgOTQsICA5NSwKKyA5 NiwgIDk3LCAgOTgsICA5OSwgMTAwLCAxMDEsIDEwMiwgMTAzLCAxMDQsIDEwNSwgMTA2LCAxMDcs IDEwOCwgMTA5LCAxMTAsIDExMSwKKzExMiwgMTEzLCAxMTQsIDExNSwgMTE2LCAxMTcsIDExOCwg MTE5LCAxMjAsIDEyMSwgMTIyLCAxMjMsIDEyNCwgMTI1LCAxMjYsIDEyNywKKzEyOCwgMjUyLCAy MzMsIDIyNiwgMjI4LCAgOTcsIDE3NywgMjMxLCAxMDEsIDIzNSwgMTAxLCAxMDUsIDIzOCwgMjMw LCAxOTYsIDE2MSwKKzIwMiwgMjM0LCAxNzksIDI0NCwgMjQ2LCAxOTgsIDExNywgMTE3LCAxNjYs IDIxNCwgMjIwLCAxNjQsIDE2MywgIDg5LCAxODIsIDEwMiwKKzE3MiwgMTc1LCAyNDMsIDIxMSwg MjQyLCAyMTAsIDE4OCwgMTkxLCAgNjMsIFVOSywgVU5LLCBVTkssIFVOSywgIDMzLCAgMzQsICAz NCwKK1VOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5L LCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywKK1VOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkss IFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywKK1VOSywg VU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVO SywgVU5LLCBVTkssIFVOSywKK1VOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5L LCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywKK1VOSywgVU5LLCBVTkss IFVOSywgVU5LLCBVTkssIDI0NywgVU5LLCAxNzYsIDI1NSwgMjE1LCBVTkssIFVOSywgVU5LLCBV TkssIDE2MAorfTsKKworQ09OU1QgQ0hBUgoreWwybDFbXSA9IHsJCQkJLyogTGF0aW4tMiB0byBM YXRpbi0xICovCisgIDAsICAgMSwgICAyLCAgIDMsICAgNCwgICA1LCAgIDYsICAgNywgICA4LCAg IDksICAxMCwgIDExLCAgMTIsICAxMywgIDE0LCAgMTUsCisgMTYsICAxNywgIDE4LCAgMTksICAy MCwgIDIxLCAgMjIsICAyMywgIDI0LCAgMjUsICAyNiwgIDI3LCAgMjgsICAyOSwgIDMwLCAgMzEs CisgMzIsICAzMywgIDM0LCAgMzUsICAzNiwgIDM3LCAgMzgsICAzOSwgIDQwLCAgNDEsICA0Miwg IDQzLCAgNDQsICA0NSwgIDQ2LCAgNDcsCisgNDgsICA0OSwgIDUwLCAgNTEsICA1MiwgIDUzLCAg NTQsICA1NSwgIDU2LCAgNTcsICA1OCwgIDU5LCAgNjAsICA2MSwgIDYyLCAgNjMsCisgNjQsICA2 NSwgIDY2LCAgNjcsICA2OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAgNzMsICA3NCwgIDc1LCAgNzYs ICA3NywgIDc4LCAgNzksCisgODAsICA4MSwgIDgyLCAgODMsICA4NCwgIDg1LCAgODYsICA4Nywg IDg4LCAgODksICA5MCwgIDkxLCAgOTIsICA5MywgIDk0LCAgOTUsCisgOTYsICA5NywgIDk4LCAg OTksIDEwMCwgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3LCAxMDgsIDEwOSwgMTEw LCAxMTEsCisxMTIsIDExMywgMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgsIDExOSwgMTIwLCAxMjEs IDEyMiwgMTIzLCAxMjQsIDEyNSwgMTI2LCAxMjcsCisxMjgsIDEyOSwgMTMwLCAxMzEsIDEzMiwg MTMzLCAxMzQsIDEzNSwgMTM2LCAxMzcsIDEzOCwgMTM5LCAxNDAsIDE0MSwgMTQyLCAxNDMsCisx NDQsIDE0NSwgMTQ2LCAxNDcsIDE0OCwgMTQ5LCAxNTAsIDE1MSwgMTUyLCAxNTMsIDE1NCwgMTU1 LCAxNTYsIDE1NywgMTU4LCAxNTksCisxNjAsICdBJywgVU5LLCAnTCcsIDE2NCwgJ0wnLCAnUycs IDE2NywgMTY4LCAnUycsICdTJywgJ1QnLCAnWicsIDE3MywgJ1onLCAnWicsCisxNzYsICdhJywg VU5LLCAnbCcsIDE4MCwgJ2wnLCAncycsIFVOSywgMTg0LCAncycsICdzJywgJ3QnLCAneicsIFVO SywgJ3onLCAneicsCisnUicsIDE5MywgMTk0LCAnQScsIDE5NiwgJ0wnLCAnQycsIDE5OSwgJ0Mn LCAyMDEsICdFJywgMjAzLCAnRScsIDIwNSwgJ0knLCAnRCcsCisyMDgsICdOJywgJ04nLCAyMTEs IDIxMiwgJ08nLCAyMTQsIDIxNSwgJ1InLCAnVScsIDIxOCwgJ1UnLCAyMjAsIDIyMSwgJ1QnLCAy MjMsCisncicsIDIyNSwgMjI2LCAnYScsIDIyOCwgJ2wnLCAnYycsIDIzMSwgJ2MnLCAyMzMsICdl JywgMjM1LCAnZScsIDIzNywgJ2knLCAnZCcsCisyNDAsICduJywgJ24nLCAyNDMsIDI0NCwgJ28n LCAyNDYsIDI0NywgJ3InLCAndScsIDI1MCwgJ3UnLCAyNTIsIDI1MywgJ3QnLCAnLicKK307CisK K0NPTlNUIENIQVIKK3lsMWwyW10gPSB7CQkJCS8qIExhdGluLTEgdG8gTGF0aW4tMiAqLworICAw LCAgIDEsICAgMiwgICAzLCAgIDQsICAgNSwgICA2LCAgIDcsICAgOCwgICA5LCAgMTAsICAxMSwg IDEyLCAgMTMsICAxNCwgIDE1LAorIDE2LCAgMTcsICAxOCwgIDE5LCAgMjAsICAyMSwgIDIyLCAg MjMsICAyNCwgIDI1LCAgMjYsICAyNywgIDI4LCAgMjksICAzMCwgIDMxLAorIDMyLCAgMzMsICAz NCwgIDM1LCAgMzYsICAzNywgIDM4LCAgMzksICA0MCwgIDQxLCAgNDIsICA0MywgIDQ0LCAgNDUs ICA0NiwgIDQ3LAorIDQ4LCAgNDksICA1MCwgIDUxLCAgNTIsICA1MywgIDU0LCAgNTUsICA1Niwg IDU3LCAgNTgsICA1OSwgIDYwLCAgNjEsICA2MiwgIDYzLAorIDY0LCAgNjUsICA2NiwgIDY3LCAg NjgsICA2OSwgIDcwLCAgNzEsICA3MiwgIDczLCAgNzQsICA3NSwgIDc2LCAgNzcsICA3OCwgIDc5 LAorIDgwLCAgODEsICA4MiwgIDgzLCAgODQsICA4NSwgIDg2LCAgODcsICA4OCwgIDg5LCAgOTAs ICA5MSwgIDkyLCAgOTMsICA5NCwgIDk1LAorIDk2LCAgOTcsICA5OCwgIDk5LCAxMDAsIDEwMSwg MTAyLCAxMDMsIDEwNCwgMTA1LCAxMDYsIDEwNywgMTA4LCAxMDksIDExMCwgMTExLAorMTEyLCAx MTMsIDExNCwgMTE1LCAxMTYsIDExNywgMTE4LCAxMTksIDEyMCwgMTIxLCAxMjIsIDEyMywgMTI0 LCAxMjUsIDEyNiwgMTI3LAorMTI4LCAxMjksIDEzMCwgMTMxLCAxMzIsIDEzMywgMTM0LCAxMzUs IDEzNiwgMTM3LCAxMzgsIDEzOSwgMTQwLCAxNDEsIDE0MiwgMTQzLAorMTQ0LCAxNDUsIDE0Niwg MTQ3LCAxNDgsIDE0OSwgMTUwLCAxNTEsIDE1MiwgMTUzLCAxNTQsIDE1NSwgMTU2LCAxNTcsIDE1 OCwgMTU5LAorMTYwLCAnQScsIFVOSywgJ0wnLCAxNjQsIFVOSywgVU5LLCAxNjcsIDE2OCwgJ0Mn LCAnYScsICc8JywgJz4nLCAxNzMsICdSJywgVU5LLAorMTc2LCBVTkssIFVOSywgVU5LLCAxODAs IFVOSywgVU5LLCBVTkssIDE4NCwgVU5LLCAnbycsICc+JywgVU5LLCBVTkssIFVOSywgVU5LLAor J0EnLCAxOTMsIDE5NCwgJ0EnLCAxOTYsICdBJywgJ0EnLCAxOTksICdFJywgMjAxLCAnRScsIDIw MywgJ0knLCAyMDUsICdJJywgJ0knLAorMjA4LCAnTicsICdPJywgMjExLCAyMTIsICdPJywgMjE0 LCAyMTUsICdPJywgJ1UnLCAyMTgsICdVJywgMjIwLCAyMjEsIFVOSywgMjIzLAorJ2EnLCAyMjUs IDIyNiwgJ2EnLCAyMjgsICdhJywgJ2EnLCAyMzEsICdlJywgMjMzLCAnZScsIDIzNSwgJ2knLCAy MzcsICdpJywgJ2knLAorMjQwLCAnbicsICdvJywgMjQzLCAyNDQsICdvJywgMjQ2LCAyNDcsICdv JywgJ3UnLCAyNTAsICd1JywgMjUyLCAyNTMsIFVOSywgJ3knCit9OworCitDT05TVCBDSEFSCit5 bDJhc1tdID0gewkJCQkvKiBMYXRpbi0yIHRvIEFTQ0lJICovCisgIDAsICAgMSwgICAyLCAgIDMs ICAgNCwgICA1LCAgIDYsICAgNywgICA4LCAgIDksICAxMCwgIDExLCAgMTIsICAxMywgIDE0LCAg MTUsCisgMTYsICAxNywgIDE4LCAgMTksICAyMCwgIDIxLCAgMjIsICAyMywgIDI0LCAgMjUsICAy NiwgIDI3LCAgMjgsICAyOSwgIDMwLCAgMzEsCisgMzIsICAzMywgIDM0LCAgMzUsICAzNiwgIDM3 LCAgMzgsICAzOSwgIDQwLCAgNDEsICA0MiwgIDQzLCAgNDQsICA0NSwgIDQ2LCAgNDcsCisgNDgs ICA0OSwgIDUwLCAgNTEsICA1MiwgIDUzLCAgNTQsICA1NSwgIDU2LCAgNTcsICA1OCwgIDU5LCAg NjAsICA2MSwgIDYyLCAgNjMsCisgNjQsICA2NSwgIDY2LCAgNjcsICA2OCwgIDY5LCAgNzAsICA3 MSwgIDcyLCAgNzMsICA3NCwgIDc1LCAgNzYsICA3NywgIDc4LCAgNzksCisgODAsICA4MSwgIDgy LCAgODMsICA4NCwgIDg1LCAgODYsICA4NywgIDg4LCAgODksICA5MCwgIDkxLCAgOTIsICA5Mywg IDk0LCAgOTUsCisgOTYsICA5NywgIDk4LCAgOTksIDEwMCwgMTAxLCAxMDIsIDEwMywgMTA0LCAx MDUsIDEwNiwgMTA3LCAxMDgsIDEwOSwgMTEwLCAxMTEsCisxMTIsIDExMywgMTE0LCAxMTUsIDEx NiwgMTE3LCAxMTgsIDExOSwgMTIwLCAxMjEsIDEyMiwgMTIzLCAxMjQsIDEyNSwgMTI2LCAxMjcs CitVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywg VU5LLCBVTkssIFVOSywgVU5LLCBVTkssCitVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBV TkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssCisgMzIsICdB JywgVU5LLCAnTCcsIFVOSywgJ0wnLCAnUycsIFVOSywgIDM0LCAnUycsICdTJywgJ1QnLCAnWics ICctJywgJ1onLCAnWicsCitVTkssICdhJywgVU5LLCAnbCcsICAzOSwgJ2wnLCAncycsIFVOSywg IDQ0LCAncycsICdzJywgJ3QnLCAneicsIFVOSywgJ3onLCAneicsCisnUicsICdBJywgJ0EnLCAn QScsICdBJywgJ0wnLCAnQycsICdDJywgJ0MnLCAnRScsICdFJywgJ0UnLCAnRScsICdJJywgJ0kn LCAnRCcsCisnRCcsICdOJywgJ04nLCAnTycsICdPJywgJ08nLCAnTycsICd4JywgJ1InLCAnVScs ICdVJywgJ1UnLCAnVScsICdZJywgJ1QnLCAncycsCisncicsICdhJywgJ2EnLCAnYScsICdhJywg J2wnLCAnYycsICdjJywgJ2MnLCAnZScsICdlJywgJ2UnLCAnZScsICdpJywgJ2knLCAnZCcsCisn ZCcsICduJywgJ24nLCAnbycsICdvJywgJ28nLCAnbycsICcvJywgJ3InLCAndScsICd1JywgJ3Un LCAndScsICd5JywgJ3QnLCAnLicKK307CisjZW5kaWYgLyogTEFUSU4yICovCisKKyNpZmRlZiBI RUJSRVcKKy8qCisgIDgtYml0IFRhYmxlcyBwcm92aWRpbmcgaW52ZXJ0aWJsZSB0cmFuc2xhdGlv biBiZXR3ZWVuIExhdGluL0hlYnJldyBhbmQgQ1A4NjIuCisqLworQ09OU1QgQ0hBUgoreTYybGhb XSA9IHsgIC8qIFBDIENvZGUgUGFnZSA4NjIgdG8gSVNPIDg4NTktOCBMYXRpbi9IZWJyZXcgKi8K KyAgMCwgICAxLCAgIDIsICAgMywgICA0LCAgIDUsICAgNiwgICA3LCAgIDgsICAgOSwgIDEwLCAg MTEsICAxMiwgIDEzLCAgMTQsICAxNSwKKyAxNiwgIDE3LCAgMTgsICAxOSwgIDIwLCAgMjEsICAy MiwgIDIzLCAgMjQsICAyNSwgIDI2LCAgMjcsICAyOCwgIDI5LCAgMzAsICAzMSwKKyAzMiwgIDMz LCAgMzQsICAzNSwgIDM2LCAgMzcsICAzOCwgIDM5LCAgNDAsICA0MSwgIDQyLCAgNDMsICA0NCwg IDQ1LCAgNDYsICA0NywKKyA0OCwgIDQ5LCAgNTAsICA1MSwgIDUyLCAgNTMsICA1NCwgIDU1LCAg NTYsICA1NywgIDU4LCAgNTksICA2MCwgIDYxLCAgNjIsICA2MywKKyA2NCwgIDY1LCAgNjYsICA2 NywgIDY4LCAgNjksICA3MCwgIDcxLCAgNzIsICA3MywgIDc0LCAgNzUsICA3NiwgIDc3LCAgNzgs ICA3OSwKKyA4MCwgIDgxLCAgODIsICA4MywgIDg0LCAgODUsICA4NiwgIDg3LCAgODgsICA4OSwg IDkwLCAgOTEsICA5MiwgIDkzLCAgOTQsICA5NSwKKyA5NiwgIDk3LCAgOTgsICA5OSwgMTAwLCAx MDEsIDEwMiwgMTAzLCAxMDQsIDEwNSwgMTA2LCAxMDcsIDEwOCwgMTA5LCAxMTAsIDExMSwKKzEx MiwgMTEzLCAxMTQsIDExNSwgMTE2LCAxMTcsIDExOCwgMTE5LCAxMjAsIDEyMSwgMTIyLCAxMjMs IDEyNCwgMTI1LCAxMjYsIDEyNywKKzIyNCwgMjI1LCAyMjYsIDIyNywgMjI4LCAyMjksIDIzMCwg MjMxLCAyMzIsIDIzMywgMjM0LCAyMzUsIDIzNiwgMjM3LCAyMzgsIDIzOSwKKzI0MCwgMjQxLCAy NDIsIDI0MywgMjQ0LCAyNDUsIDI0NiwgMjQ3LCAyNDgsIDI0OSwgMjUwLCAxNjIsIDE2MywgMTY1 LCAxMjgsIDEyOSwKKzEzMCwgMTMxLCAxMzIsIDEzMywgMTM0LCAxMzUsIDEzNiwgMTM3LCAxMzgs IDEzOSwgMTcyLCAxODksIDE4OCwgMTQwLCAxNzEsIDE4NywKKzE0MSwgMTQyLCAxNDMsIDE0NCwg MTQ1LCAxNDYsIDE0NywgMTQ4LCAxNDksIDE1MCwgMTUxLCAxNTIsIDE1MywgMTU0LCAxNTUsIDE1 NiwKKzE1NywgMTU4LCAxNTksIDE2MSwgMTY0LCAxNjYsIDE2NywgMTY4LCAxNjksIDE3MCwgMTcz LCAxNzQsIDE3NSwgMjIzLCAxNzksIDE4MCwKKzE4MiwgMTg0LCAxODUsIDE5MCwgMTkxLCAxOTIs IDE5MywgMTk0LCAxOTUsIDE5NiwgMTk3LCAxOTgsIDE5OSwgMjAwLCAyMDEsIDIwMiwKKzIwMywg MjA0LCAyMDUsIDIwNiwgMjA3LCAyMDgsIDE4MSwgMjA5LCAyMTAsIDIxMSwgMjEyLCAyMTMsIDIx NCwgMjE1LCAyMTYsIDIxNywKKzIxOCwgMTc3LCAyMTksIDIyMCwgMjIxLCAyMjIsIDE4NiwgMjUx LCAxNzYsIDE4MywgMjUyLCAyNTMsIDI1NCwgMTc4LCAyNTUsIDE2MAorfTsKKworQ09OU1QgQ0hB UgoreWxoNjJbXSA9IHsgIC8qIElTTyA4ODU5LTggTGF0aW4vSGVicmV3IHRvIFBDIENvZGUgUGFn ZSA4NjIgKi8KKyAgMCwgICAxLCAgIDIsICAgMywgICA0LCAgIDUsICAgNiwgICA3LCAgIDgsICAg OSwgIDEwLCAgMTEsICAxMiwgIDEzLCAgMTQsICAxNSwKKyAxNiwgIDE3LCAgMTgsICAxOSwgIDIw LCAgMjEsICAyMiwgIDIzLCAgMjQsICAyNSwgIDI2LCAgMjcsICAyOCwgIDI5LCAgMzAsICAzMSwK KyAzMiwgIDMzLCAgMzQsICAzNSwgIDM2LCAgMzcsICAzOCwgIDM5LCAgNDAsICA0MSwgIDQyLCAg NDMsICA0NCwgIDQ1LCAgNDYsICA0NywKKyA0OCwgIDQ5LCAgNTAsICA1MSwgIDUyLCAgNTMsICA1 NCwgIDU1LCAgNTYsICA1NywgIDU4LCAgNTksICA2MCwgIDYxLCAgNjIsICA2MywKKyA2NCwgIDY1 LCAgNjYsICA2NywgIDY4LCAgNjksICA3MCwgIDcxLCAgNzIsICA3MywgIDc0LCAgNzUsICA3Niwg IDc3LCAgNzgsICA3OSwKKyA4MCwgIDgxLCAgODIsICA4MywgIDg0LCAgODUsICA4NiwgIDg3LCAg ODgsICA4OSwgIDkwLCAgOTEsICA5MiwgIDkzLCAgOTQsICA5NSwKKyA5NiwgIDk3LCAgOTgsICA5 OSwgMTAwLCAxMDEsIDEwMiwgMTAzLCAxMDQsIDEwNSwgMTA2LCAxMDcsIDEwOCwgMTA5LCAxMTAs IDExMSwKKzExMiwgMTEzLCAxMTQsIDExNSwgMTE2LCAxMTcsIDExOCwgMTE5LCAxMjAsIDEyMSwg MTIyLCAxMjMsIDEyNCwgMTI1LCAxMjYsIDEyNywKKzE1OCwgMTU5LCAxNjAsIDE2MSwgMTYyLCAx NjMsIDE2NCwgMTY1LCAxNjYsIDE2NywgMTY4LCAxNjksIDE3MywgMTc2LCAxNzcsIDE3OCwKKzE3 OSwgMTgwLCAxODEsIDE4MiwgMTgzLCAxODQsIDE4NSwgMTg2LCAxODcsIDE4OCwgMTg5LCAxOTAs IDE5MSwgMTkyLCAxOTMsIDE5NCwKKzI1NSwgMTk1LCAxNTUsIDE1NiwgMTk2LCAxNTcsIDE5Nywg MTk4LCAxOTksIDIwMCwgMjAxLCAxNzQsIDE3MCwgMjAyLCAyMDMsIDIwNCwKKzI0OCwgMjQxLCAy NTMsIDIwNiwgMjA3LCAyMzAsIDIwOCwgMjQ5LCAyMDksIDIxMCwgMjQ2LCAxNzUsIDE3MiwgMTcx LCAyMTEsIDIxMiwKKzIxMywgMjE0LCAyMTUsIDIxNiwgMjE3LCAyMTgsIDIxOSwgMjIwLCAyMjEs IDIyMiwgMjIzLCAyMjQsIDIyNSwgMjI2LCAyMjcsIDIyOCwKKzIyOSwgMjMxLCAyMzIsIDIzMywg MjM0LCAyMzUsIDIzNiwgMjM3LCAyMzgsIDIzOSwgMjQwLCAyNDIsIDI0MywgMjQ0LCAyNDUsIDIw NSwKKzEyOCwgMTI5LCAxMzAsIDEzMSwgMTMyLCAxMzMsIDEzNCwgMTM1LCAxMzYsIDEzNywgMTM4 LCAxMzksIDE0MCwgMTQxLCAxNDIsIDE0MywKKzE0NCwgMTQ1LCAxNDYsIDE0NywgMTQ4LCAxNDks IDE1MCwgMTUxLCAxNTIsIDE1MywgMTU0LCAyNDcsIDI1MCwgMjUxLCAyNTIsIDI1NAorfTsKKy8q CisgIDctYml0IHRhYmxlIHByb3ZpZGluZyByZWFkYWJsZSB0cmFuc2xhdGlvbiBmcm9tIERFQyBI ZWJyZXctNyB0byBDUDg2Mi4KKyovCitDT05TVCBDSEFSCit5aDc2MltdID0geworICAwLCAgIDEs ICAgMiwgICAzLCAgIDQsICAgNSwgICA2LCAgIDcsICAgOCwgICA5LCAgMTAsICAxMSwgIDEyLCAg MTMsICAxNCwgIDE1LAorIDE2LCAgMTcsICAxOCwgIDE5LCAgMjAsICAyMSwgIDIyLCAgMjMsICAy NCwgIDI1LCAgMjYsICAyNywgIDI4LCAgMjksICAzMCwgIDMxLAorIDMyLCAgMzMsICAzNCwgIDM1 LCAgMzYsICAzNywgIDM4LCAgMzksICA0MCwgIDQxLCAgNDIsICA0MywgIDQ0LCAgNDUsICA0Niwg IDQ3LAorIDQ4LCAgNDksICA1MCwgIDUxLCAgNTIsICA1MywgIDU0LCAgNTUsICA1NiwgIDU3LCAg NTgsICA1OSwgIDYwLCAgNjEsICA2MiwgIDYzLAorIDY0LCAgNjUsICA2NiwgIDY3LCAgNjgsICA2 OSwgIDcwLCAgNzEsICA3MiwgIDczLCAgNzQsICA3NSwgIDc2LCAgNzcsICA3OCwgIDc5LAorIDgw LCAgODEsICA4MiwgIDgzLCAgODQsICA4NSwgIDg2LCAgODcsICA4OCwgIDg5LCAgOTAsICA5MSwg IDkyLCAgOTMsICA5NCwgIDk1LAorVU5LLCAgNjUsICA2NiwgIDY3LCAgNjgsICA2OSwgIDcwLCAg NzEsICA3MiwgIDczLCAgNzQsICA3NSwgIDc2LCAgNzcsICA3OCwgIDc5LAorIDgwLCAgODEsICA4 MiwgIDgzLCAgODQsICA4NSwgIDg2LCAgODcsICA4OCwgIDg5LCAgOTAsIDEyMywgMTI0LCAxMjUs IDEyNiwgMTI3Cit9OworLyoKKyAgOC1iaXQgdGFibGUgcHJvdmlkaW5nIHJlYWRhYmxlIHRyYW5z bGF0aW9uIGZyb20gQ1A4NjIgdG8gSGVicmV3LTcuCisqLworQ09OU1QgQ0hBUgoreTYyaDdbXSA9 IHsgIC8qIFBDIENvZGUgUGFnZSA4NjIgdG8gSGVicmV3LTcgKi8KKyAgMCwgICAxLCAgIDIsICAg MywgICA0LCAgIDUsICAgNiwgICA3LCAgIDgsICAgOSwgIDEwLCAgMTEsICAxMiwgIDEzLCAgMTQs ICAxNSwKKyAxNiwgIDE3LCAgMTgsICAxOSwgIDIwLCAgMjEsICAyMiwgIDIzLCAgMjQsICAyNSwg IDI2LCAgMjcsICAyOCwgIDI5LCAgMzAsICAzMSwKKyAzMiwgIDMzLCAgMzQsICAzNSwgIDM2LCAg MzcsICAzOCwgIDM5LCAgNDAsICA0MSwgIDQyLCAgNDMsICA0NCwgIDQ1LCAgNDYsICA0NywKKyA0 OCwgIDQ5LCAgNTAsICA1MSwgIDUyLCAgNTMsICA1NCwgIDU1LCAgNTYsICA1NywgIDU4LCAgNTks ICA2MCwgIDYxLCAgNjIsICA2MywKKyA2NCwgIDY1LCAgNjYsICA2NywgIDY4LCAgNjksICA3MCwg IDcxLCAgNzIsICA3MywgIDc0LCAgNzUsICA3NiwgIDc3LCAgNzgsICA3OSwKKyA4MCwgIDgxLCAg ODIsICA4MywgIDg0LCAgODUsICA4NiwgIDg3LCAgODgsICA4OSwgIDkwLCAgOTEsICA5MiwgIDkz LCAgOTQsICA5NSwKKyA2NCwgIDY1LCAgNjYsICA2NywgIDY4LCAgNjksICA3MCwgIDcxLCAgNzIs ICA3MywgIDc0LCAgNzUsICA3NiwgIDc3LCAgNzgsICA3OSwKKyA4MCwgIDgxLCAgODIsICA4Mywg IDg0LCAgODUsICA4NiwgIDg3LCAgODgsICA4OSwgIDkwLCAxMjMsIDEyNCwgMTI1LCAxMjYsIDEy NywKKyA5NiwgIDk3LCAgOTgsICA5OSwgMTAwLCAxMDEsIDEwMiwgMTAzLCAxMDQsIDEwNSwgMTA2 LCAxMDcsIDEwOCwgMTA5LCAxMTAsIDExMSwKKzExMiwgMTEzLCAxMTQsIDExNSwgMTE2LCAxMTcs IDExOCwgMTE5LCAxMjAsIDEyMSwgMTIyLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywKK1VOSywg VU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVO SywgVU5LLCBVTkssIFVOSywKK1VOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5L LCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywKK1VOSywgVU5LLCBVTkss IFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBV TkssIFVOSywKK1VOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVO SywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywKK1VOSywgVU5LLCBVTkssIFVOSywgVU5L LCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywK K1VOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBV TkssIFVOSywgVU5LLCBVTkssIFVOSworfTsKKy8qCisgIDctYml0IHRhYmxlIHByb3ZpZGluZyBy ZWFkYWJsZSB0cmFuc2xhdGlvbiBmcm9tIEhlYnJldy03IHRvIElTTyBMYXRpbi9IZWJyZXcuCisq LworQ09OU1QgQ0hBUgoreWg3bGhbXSA9IHsKKyAgMCwgICAxLCAgIDIsICAgMywgICA0LCAgIDUs ICAgNiwgICA3LCAgIDgsICAgOSwgIDEwLCAgMTEsICAxMiwgIDEzLCAgMTQsICAxNSwKKyAxNiwg IDE3LCAgMTgsICAxOSwgIDIwLCAgMjEsICAyMiwgIDIzLCAgMjQsICAyNSwgIDI2LCAgMjcsICAy OCwgIDI5LCAgMzAsICAzMSwKKyAzMiwgIDMzLCAgMzQsICAzNSwgIDM2LCAgMzcsICAzOCwgIDM5 LCAgNDAsICA0MSwgIDQyLCAgNDMsICA0NCwgIDQ1LCAgNDYsICA0NywKKyA0OCwgIDQ5LCAgNTAs ICA1MSwgIDUyLCAgNTMsICA1NCwgIDU1LCAgNTYsICA1NywgIDU4LCAgNTksICA2MCwgIDYxLCAg NjIsICA2MywKKyA2NCwgIDY1LCAgNjYsICA2NywgIDY4LCAgNjksICA3MCwgIDcxLCAgNzIsICA3 MywgIDc0LCAgNzUsICA3NiwgIDc3LCAgNzgsICA3OSwKKyA4MCwgIDgxLCAgODIsICA4MywgIDg0 LCAgODUsICA4NiwgIDg3LCAgODgsICA4OSwgIDkwLCAgOTEsICA5MiwgIDkzLCAgOTQsICA5NSwK KzIwOCwgMjA5LCAyMTAsIDIxMSwgMjEyLCAyMTMsIDIxNCwgMjE1LCAyMTYsIDIxNywgMjE4LCAy MTksIDIyMCwgMjIxLCAyMjIsIDIyMywKKzIyNCwgMjI1LCAyMjYsIDIyNywgMjI4LCAyMjksIDIz MCwgMjMxLCAyMzIsIDIzMywgMjM0LCAxMjMsIDEyNCwgMTI1LCAxMjYsIDEyNworfTsKKy8qCisg IDgtYml0IHRhYmxlIHByb3ZpZGluZyByZWFkYWJsZSB0cmFuc2xhdGlvbiBmcm9tIElTTyBMYXRp bi9IZWJyZXcgdG8gSGVicmV3LTcuCisqLworQ09OU1QgQ0hBUgoreWxoaDdbXSA9IHsgIC8qIExh dGluL0hlYnJldyB0byBIZWJyZXctNyAqLworICAwLCAgIDEsICAgMiwgICAzLCAgIDQsICAgNSwg ICA2LCAgIDcsICAgOCwgICA5LCAgMTAsICAxMSwgIDEyLCAgMTMsICAxNCwgIDE1LAorIDE2LCAg MTcsICAxOCwgIDE5LCAgMjAsICAyMSwgIDIyLCAgMjMsICAyNCwgIDI1LCAgMjYsICAyNywgIDI4 LCAgMjksICAzMCwgIDMxLAorIDMyLCAgMzMsICAzNCwgIDM1LCAgMzYsICAzNywgIDM4LCAgMzks ICA0MCwgIDQxLCAgNDIsICA0MywgIDQ0LCAgNDUsICA0NiwgIDQ3LAorIDQ4LCAgNDksICA1MCwg IDUxLCAgNTIsICA1MywgIDU0LCAgNTUsICA1NiwgIDU3LCAgNTgsICA1OSwgIDYwLCAgNjEsICA2 MiwgIDYzLAorIDY0LCAgNjUsICA2NiwgIDY3LCAgNjgsICA2OSwgIDcwLCAgNzEsICA3MiwgIDcz LCAgNzQsICA3NSwgIDc2LCAgNzcsICA3OCwgIDc5LAorIDgwLCAgODEsICA4MiwgIDgzLCAgODQs ICA4NSwgIDg2LCAgODcsICA4OCwgIDg5LCAgOTAsICA5MSwgIDkyLCAgOTMsICA5NCwgIDk1LAor IDY0LCAgNjUsICA2NiwgIDY3LCAgNjgsICA2OSwgIDcwLCAgNzEsICA3MiwgIDczLCAgNzQsICA3 NSwgIDc2LCAgNzcsICA3OCwgIDc5LAorIDgwLCAgODEsICA4MiwgIDgzLCAgODQsICA4NSwgIDg2 LCAgODcsICA4OCwgIDg5LCAgOTAsIDEyMywgMTI0LCAxMjUsIDEyNiwgMTI3LAorVU5LLCBVTkss IFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBV TkssIFVOSywgVU5LLAorVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVO SywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLAorVU5LLCBVTkssIFVOSywgVU5L LCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywg VU5LLAorVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBV TkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLAorVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVO SywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLAorVU5L LCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywg VU5LLCBVTkssIFVOSywgVU5LLAorIDk2LCAgOTcsICA5OCwgIDk5LCAxMDAsIDEwMSwgMTAyLCAx MDMsIDEwNCwgMTA1LCAxMDYsIDEwNywgMTA4LCAxMDksIDExMCwgMTExLAorMTEyLCAxMTMsIDEx NCwgMTE1LCAxMTYsIDExNywgMTE4LCAxMTksIDEyMCwgMTIxLCAxMjIsIFVOSywgVU5LLCBVTkss IFVOSywgVU5LCit9OworI2VuZGlmIC8qIEhFQlJFVyAqLworCisjaWZkZWYgR1JFRUsKKy8qCisg IDgtYml0IFRhYmxlcyBwcm92aWRpbmcgaW52ZXJ0aWJsZSB0cmFuc2xhdGlvbiBiZXR3ZWVuIExh dGluL0dyZWVrIGFuZCBDUDg2OS4KKyovCitDT05TVCBDSEFSCit5bGc2OVtdID0geyAgLyogSVNP IDg4NTktNyBMYXRpbi9HcmVlayB0byBQQyBDb2RlIFBhZ2UgODY5ICovCisgIDAsICAgMSwgICAy LCAgIDMsICAgNCwgICA1LCAgIDYsICAgNywgICA4LCAgIDksICAxMCwgIDExLCAgMTIsICAxMywg IDE0LCAgMTUsCisgMTYsICAxNywgIDE4LCAgMTksICAyMCwgIDIxLCAgMjIsICAyMywgIDI0LCAg MjUsICAyNiwgIDI3LCAgMjgsICAyOSwgIDMwLCAgMzEsCisgMzIsICAzMywgIDM0LCAgMzUsICAz NiwgIDM3LCAgMzgsICAzOSwgIDQwLCAgNDEsICA0MiwgIDQzLCAgNDQsICA0NSwgIDQ2LCAgNDcs CisgNDgsICA0OSwgIDUwLCAgNTEsICA1MiwgIDUzLCAgNTQsICA1NSwgIDU2LCAgNTcsICA1OCwg IDU5LCAgNjAsICA2MSwgIDYyLCAgNjMsCisgNjQsICA2NSwgIDY2LCAgNjcsICA2OCwgIDY5LCAg NzAsICA3MSwgIDcyLCAgNzMsICA3NCwgIDc1LCAgNzYsICA3NywgIDc4LCAgNzksCisgODAsICA4 MSwgIDgyLCAgODMsICA4NCwgIDg1LCAgODYsICA4NywgIDg4LCAgODksICA5MCwgIDkxLCAgOTIs ICA5MywgIDk0LCAgOTUsCisgOTYsICA5NywgIDk4LCAgOTksIDEwMCwgMTAxLCAxMDIsIDEwMywg MTA0LCAxMDUsIDEwNiwgMTA3LCAxMDgsIDEwOSwgMTEwLCAxMTEsCisxMTIsIDExMywgMTE0LCAx MTUsIDExNiwgMTE3LCAxMTgsIDExOSwgMTIwLCAxMjEsIDEyMiwgMTIzLCAxMjQsIDEyNSwgMTI2 LCAxMjcsCisxMzUsIDE0NywgMTQ4LCAxNzYsIDE3NywgMTc4LCAxNzksIDE4MCwgMTg1LCAxODYs IDE4NywgMTg4LCAxOTEsIDE5MiwgMTkzLCAxOTQsCisxOTUsIDE5NiwgMTk3LCAyMDAsIDIwMSwg MjAyLCAyMDMsIDIwNCwgMjA1LCAyMDYsIDIxNywgMjE4LCAyMTksIDIyMCwgMjIzLCAyNTQsCisy NTUsIDEzOSwgMTQwLCAxNTYsIDEyOCwgMTI5LCAxMzgsIDI0NSwgMjQ5LCAxNTEsIDEzMCwgMTc0 LCAxMzcsIDI0MCwgMTMxLCAxNDIsCisyNDgsIDI0MSwgMTUzLCAxNTQsIDIzOSwgMjQ3LCAxMzQs IDEzNiwgMTQxLCAxNDMsIDE0NCwgMTc1LCAxNDYsIDE3MSwgMTQ5LCAxNTIsCisxNjEsIDE2NCwg MTY1LCAxNjYsIDE2NywgMTY4LCAxNjksIDE3MCwgMTcyLCAxNzMsIDE4MSwgMTgyLCAxODMsIDE4 NCwgMTg5LCAxOTAsCisxOTgsIDE5OSwgMTMyLCAyMDcsIDIwOCwgMjA5LCAyMTAsIDIxMSwgMjEy LCAyMTMsIDE0NSwgMTUwLCAxNTUsIDE1NywgMTU4LCAxNTksCisyNTIsIDIxNCwgMjE1LCAyMTYs IDIyMSwgMjIyLCAyMjQsIDIyNSwgMjI2LCAyMjcsIDIyOCwgMjI5LCAyMzAsIDIzMSwgMjMyLCAy MzMsCisyMzQsIDIzNSwgMjM3LCAyMzYsIDIzOCwgMjQyLCAyNDMsIDI0NCwgMjQ2LCAyNTAsIDE2 MCwgMjUxLCAxNjIsIDE2MywgMjUzLCAxMzMKK307CisKK0NPTlNUIENIQVIKK3k2OWxnW10gPSB7 ICAvKiBQQyBDb2RlIFBhZ2UgODY5IHRvIElTTyA4ODU5LTcgTGF0aW4vR3JlZWsgKi8KKyAgMCwg ICAxLCAgIDIsICAgMywgICA0LCAgIDUsICAgNiwgICA3LCAgIDgsICAgOSwgIDEwLCAgMTEsICAx MiwgIDEzLCAgMTQsICAxNSwKKyAxNiwgIDE3LCAgMTgsICAxOSwgIDIwLCAgMjEsICAyMiwgIDIz LCAgMjQsICAyNSwgIDI2LCAgMjcsICAyOCwgIDI5LCAgMzAsICAzMSwKKyAzMiwgIDMzLCAgMzQs ICAzNSwgIDM2LCAgMzcsICAzOCwgIDM5LCAgNDAsICA0MSwgIDQyLCAgNDMsICA0NCwgIDQ1LCAg NDYsICA0NywKKyA0OCwgIDQ5LCAgNTAsICA1MSwgIDUyLCAgNTMsICA1NCwgIDU1LCAgNTYsICA1 NywgIDU4LCAgNTksICA2MCwgIDYxLCAgNjIsICA2MywKKyA2NCwgIDY1LCAgNjYsICA2NywgIDY4 LCAgNjksICA3MCwgIDcxLCAgNzIsICA3MywgIDc0LCAgNzUsICA3NiwgIDc3LCAgNzgsICA3OSwK KyA4MCwgIDgxLCAgODIsICA4MywgIDg0LCAgODUsICA4NiwgIDg3LCAgODgsICA4OSwgIDkwLCAg OTEsICA5MiwgIDkzLCAgOTQsICA5NSwKKyA5NiwgIDk3LCAgOTgsICA5OSwgMTAwLCAxMDEsIDEw MiwgMTAzLCAxMDQsIDEwNSwgMTA2LCAxMDcsIDEwOCwgMTA5LCAxMTAsIDExMSwKKzExMiwgMTEz LCAxMTQsIDExNSwgMTE2LCAxMTcsIDExOCwgMTE5LCAxMjAsIDEyMSwgMTIyLCAxMjMsIDEyNCwg MTI1LCAxMjYsIDEyNywKKzE2NCwgMTY1LCAxNzAsIDE3NCwgMjEwLCAyNTUsIDE4MiwgMTI4LCAx ODMsIDE3MiwgMTY2LCAxNjEsIDE2MiwgMTg0LCAxNzUsIDE4NSwKKzE4NiwgMjE4LCAxODgsIDEy OSwgMTMwLCAxOTAsIDIxOSwgMTY5LCAxOTEsIDE3OCwgMTc5LCAyMjAsIDE2MywgMjIxLCAyMjIs IDIyMywKKzI1MCwgMTkyLCAyNTIsIDI1MywgMTkzLCAxOTQsIDE5NSwgMTk2LCAxOTcsIDE5OCwg MTk5LCAxODksIDIwMCwgMjAxLCAxNzEsIDE4NywKKzEzMSwgMTMyLCAxMzMsIDEzNCwgMTM1LCAy MDIsIDIwMywgMjA0LCAyMDUsIDEzNiwgMTM3LCAxMzgsIDEzOSwgMjA2LCAyMDcsIDE0MCwKKzE0 MSwgMTQyLCAxNDMsIDE0NCwgMTQ1LCAxNDYsIDIwOCwgMjA5LCAxNDcsIDE0OCwgMTQ5LCAxNTAs IDE1MSwgMTUyLCAxNTMsIDIxMSwKKzIxMiwgMjEzLCAyMTQsIDIxNSwgMjE2LCAyMTcsIDIyNSwg MjI2LCAyMjcsIDE1NCwgMTU1LCAxNTYsIDE1NywgMjI4LCAyMjksIDE1OCwKKzIzMCwgMjMxLCAy MzIsIDIzMywgMjM0LCAyMzUsIDIzNiwgMjM3LCAyMzgsIDIzOSwgMjQwLCAyNDEsIDI0MywgMjQy LCAyNDQsIDE4MCwKKzE3MywgMTc3LCAyNDUsIDI0NiwgMjQ3LCAxNjcsIDI0OCwgMTgxLCAxNzYs IDE2OCwgMjQ5LCAyNTEsIDIyNCwgMjU0LCAxNTksIDE2MAorfTsKKy8qCisgIDctYml0IHRhYmxl IHByb3ZpZGluZyByZWFkYWJsZSB0cmFuc2xhdGlvbiBmcm9tIEVMT1QgOTI3IHRvIENQODY5Lgor Ki8KK0NPTlNUIENIQVIKK3llZzY5W10gPSB7CisgIDAsICAgMSwgICAyLCAgIDMsICAgNCwgICA1 LCAgIDYsICAgNywgICA4LCAgIDksICAxMCwgIDExLCAgMTIsICAxMywgIDE0LCAgMTUsCisgMTYs ICAxNywgIDE4LCAgMTksICAyMCwgIDIxLCAgMjIsICAyMywgIDI0LCAgMjUsICAyNiwgIDI3LCAg MjgsICAyOSwgIDMwLCAgMzEsCisgMzIsICAzMywgIDM0LCAgMzUsICAzNiwgIDM3LCAgMzgsICAz OSwgIDQwLCAgNDEsICA0MiwgIDQzLCAgNDQsICA0NSwgIDQ2LCAgNDcsCisgNDgsICA0OSwgIDUw LCAgNTEsICA1MiwgIDUzLCAgNTQsICA1NSwgIDU2LCAgNTcsICA1OCwgIDU5LCAgNjAsICA2MSwg IDYyLCAgNjMsCisgNjQsICA2NSwgIDY2LCAgNjcsICA2OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAg NzMsICA3NCwgIDc1LCAgNzYsICA3NywgIDc4LCAgNzksCisgODAsICA4MSwgIDgyLCAgODMsICA4 NCwgIDg1LCAgODYsICA4NywgIDg4LCAgODksICA5MCwgIDkxLCAgOTIsICA5MywgIDk0LCAgOTUs CisgOTYsIDE2NCwgMTY1LCAxNjYsIDE2NywgMTY4LCAxNjksIDE3MCwgMTcyLCAxNzMsIDE4MSwg MTgyLCAxODMsIDE4NCwgMTg5LCAxOTAsCisxOTgsIDE5OSwgMjA3LCAyMDgsIDIwOSwgMjEwLCAy MTEsIDIxMiwgMjEzLCAgMzIsICAzMiwgIDIzLCAxMjQsIDEyNSwgMTI2LCAxMjcKK307CisvKgor ICA4LWJpdCB0YWJsZSBwcm92aWRpbmcgcmVhZGFibGUgdHJhbnNsYXRpb24gZnJvbSBDUDg2OSB0 byBFTE9UIDkyNy4KKyovCitDT05TVCBDSEFSCit5NjllZ1tdID0geyAgLyogUEMgQ29kZSBQYWdl IDg2OSB0byBFTE9UIDkyNyAqLworICAwLCAgIDEsICAgMiwgICAzLCAgIDQsICAgNSwgICA2LCAg IDcsICAgOCwgICA5LCAgMTAsICAxMSwgIDEyLCAgMTMsICAxNCwgIDE1LAorIDE2LCAgMTcsICAx OCwgIDE5LCAgMjAsICAyMSwgIDIyLCAgMjMsICAyNCwgIDI1LCAgMjYsICAyNywgIDI4LCAgMjks ICAzMCwgIDMxLAorIDMyLCAgMzMsICAzNCwgIDM1LCAgMzYsICAzNywgIDM4LCAgMzksICA0MCwg IDQxLCAgNDIsICA0MywgIDQ0LCAgNDUsICA0NiwgIDQ3LAorIDQ4LCAgNDksICA1MCwgIDUxLCAg NTIsICA1MywgIDU0LCAgNTUsICA1NiwgIDU3LCAgNTgsICA1OSwgIDYwLCAgNjEsICA2MiwgIDYz LAorIDY0LCAgNjUsICA2NiwgIDY3LCAgNjgsICA2OSwgIDcwLCAgNzEsICA3MiwgIDczLCAgNzQs ICA3NSwgIDc2LCAgNzcsICA3OCwgIDc5LAorIDgwLCAgODEsICA4MiwgIDgzLCAgODQsICA4NSwg IDg2LCAgODcsICA4OCwgIDg5LCAgOTAsICA5MSwgIDkyLCAgOTMsICA5NCwgIDk1LAorIDk2LCAg NjUsICA2NiwgIDY3LCAgNjgsICA2OSwgIDcwLCAgNzEsICA3MiwgIDczLCAgNzQsICA3NSwgIDc2 LCAgNzcsICA3OCwgIDc5LAorIDgwLCAgODEsICA4MiwgIDgzLCAgODQsICA4NSwgIDg2LCAgODcs ICA4OCwgIDg5LCAgOTAsIDEyMywgMTI0LCAxMjUsIDEyNiwgMTI3LAorVU5LLCBVTkssIFVOSywg VU5LLCBVTkssIFVOSywgIDk3LCBVTkssICA0NiwgVU5LLCAxMjQsICAzOSwgIDM5LCAxMDEsICA0 NSwgMTAzLAorMTA1LCAxMDUsIDExMSwgVU5LLCBVTkssIDExNiwgMTE2LCBVTkssIDEyMCwgIDUw LCAgNTEsICA5NywgVU5LLCAxMDEsIDEwMywgMTA1LAorMTA1LCAxMDUsIDExMSwgMTE2LCAgOTcs ICA5OCwgIDk5LCAxMDAsIDEwMSwgMTAyLCAxMDMsIFVOSywgMTA0LCAxMDUsICAzNCwgIDM0LAor VU5LLCBVTkssIFVOSywgVU5LLCBVTkssIDEwNiwgMTA3LCAxMDgsIDEwOSwgVU5LLCBVTkssIFVO SywgVU5LLCAxMTAsIDExMSwgVU5LLAorVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgMTEy LCAxMTMsIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgMTE0LAorMTE1LCAxMTYs IDExNywgMTE4LCAxMTksIDEyMCwgIDk3LCAgOTgsICA5OSwgVU5LLCBVTkssIFVOSywgVU5LLCAx MDAsIDEwMSwgVU5LLAorMTAyLCAxMDMsIDEwNCwgMTA1LCAxMDYsIDEwNywgMTA4LCAxMDksIDEx MCwgMTExLCAxMTIsIDExMywgMTE0LCAxMTQsIDExNSwgIDM5LAorIDQ1LCBVTkssIDExNiwgMTE3 LCAxMTgsIFVOSywgMTE5LCBVTkssIFVOSywgVU5LLCAxMjAsIDExNiwgMTE2LCAxMjAsIFVOSywg IDMyCisKK307CisvKgorICA3LWJpdCB0YWJsZSBwcm92aWRpbmcgcmVhZGFibGUgdHJhbnNsYXRp b24gZnJvbSBFTE9UIDkyNyB0byBJU08gTGF0aW4vR3JlZWsuCisqLworQ09OU1QgQ0hBUgoreWVn bGdbXSA9IHsKKyAgMCwgICAxLCAgIDIsICAgMywgICA0LCAgIDUsICAgNiwgICA3LCAgIDgsICAg OSwgIDEwLCAgMTEsICAxMiwgIDEzLCAgMTQsICAxNSwKKyAxNiwgIDE3LCAgMTgsICAxOSwgIDIw LCAgMjEsICAyMiwgIDIzLCAgMjQsICAyNSwgIDI2LCAgMjcsICAyOCwgIDI5LCAgMzAsICAzMSwK KyAzMiwgIDMzLCAgMzQsICAzNSwgIDM2LCAgMzcsICAzOCwgIDM5LCAgNDAsICA0MSwgIDQyLCAg NDMsICA0NCwgIDQ1LCAgNDYsICA0NywKKyA0OCwgIDQ5LCAgNTAsICA1MSwgIDUyLCAgNTMsICA1 NCwgIDU1LCAgNTYsICA1NywgIDU4LCAgNTksICA2MCwgIDYxLCAgNjIsICA2MywKKyA2NCwgIDY1 LCAgNjYsICA2NywgIDY4LCAgNjksICA3MCwgIDcxLCAgNzIsICA3MywgIDc0LCAgNzUsICA3Niwg IDc3LCAgNzgsICA3OSwKKyA4MCwgIDgxLCAgODIsICA4MywgIDg0LCAgODUsICA4NiwgIDg3LCAg ODgsICA4OSwgIDkwLCAgOTEsICA5MiwgIDkzLCAgOTQsICA5NSwKKyA5NiwgMTkzLCAxOTQsIDE5 NSwgMTk2LCAxOTcsIDE5OCwgMTk5LCAyMDAsIDIwMSwgMjAyLCAyMDMsIDIwNCwgMjA1LCAyMDYs IDIwNywKKzIwOCwgMjA5LCAyMTEsIDIxMiwgMjEzLCAyMTQsIDIxNSwgMjE2LCAyMTcsICAzMiwg IDMyLCAxMjMsIDEyNCwgMTI1LCAxMjYsIDEyNworfTsKKy8qCisgIDgtYml0IHRhYmxlIHByb3Zp ZGluZyByZWFkYWJsZSB0cmFuc2xhdGlvbiBmcm9tIElTTyBMYXRpbi9HcmVlayB0byBFTE9UIDky Ny4KKyovCitDT05TVCBDSEFSCit5bGdlZ1tdID0geyAgLyogTGF0aW4vR3JlZWsgdG8gRUxPVCA5 MjcgKi8KKyAgMCwgICAxLCAgIDIsICAgMywgICA0LCAgIDUsICAgNiwgICA3LCAgIDgsICAgOSwg IDEwLCAgMTEsICAxMiwgIDEzLCAgMTQsICAxNSwKKyAxNiwgIDE3LCAgMTgsICAxOSwgIDIwLCAg MjEsICAyMiwgIDIzLCAgMjQsICAyNSwgIDI2LCAgMjcsICAyOCwgIDI5LCAgMzAsICAzMSwKKyAz MiwgIDMzLCAgMzQsICAzNSwgIDM2LCAgMzcsICAzOCwgIDM5LCAgNDAsICA0MSwgIDQyLCAgNDMs ICA0NCwgIDQ1LCAgNDYsICA0NywKKyA0OCwgIDQ5LCAgNTAsICA1MSwgIDUyLCAgNTMsICA1NCwg IDU1LCAgNTYsICA1NywgIDU4LCAgNTksICA2MCwgIDYxLCAgNjIsICA2MywKKyA2NCwgIDY1LCAg NjYsICA2NywgIDY4LCAgNjksICA3MCwgIDcxLCAgNzIsICA3MywgIDc0LCAgNzUsICA3NiwgIDc3 LCAgNzgsICA3OSwKKyA4MCwgIDgxLCAgODIsICA4MywgIDg0LCAgODUsICA4NiwgIDg3LCAgODgs ICA4OSwgIDkwLCAgOTEsICA5MiwgIDkzLCAgOTQsICA5NSwKKyA5NiwgIDY1LCAgNjYsICA2Nywg IDY4LCAgNjksICA3MCwgIDcxLCAgNzIsICA3MywgIDc0LCAgNzUsICA3NiwgIDc3LCAgNzgsICA3 OSwKKyA4MCwgIDgxLCAgODIsICA4MywgIDg0LCAgODUsICA4NiwgIDg3LCAgODgsICA4OSwgIDkw LCAxMjMsIDEyNCwgMTI1LCAxMjYsIDEyNywKK1VOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkss IFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywKK1VOSywg VU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVO SywgVU5LLCBVTkssIFVOSywKKyAzMiwgIDM5LCAgMzksIFVOSywgVU5LLCBVTkssIDEyNCwgVU5L LCAgMzQsIFVOSywgVU5LLCAgMzQsIFVOSywgIDQ1LCBVTkssICA0NSwKK1VOSywgVU5LLCAgNTAs ICA1MSwgIDM5LCBVTkssICA5NywgIDQ2LCAxMDEsIDEwMywgMTA1LCAgMzQsIDExMSwgVU5LLCAx MTYsIDEyMCwKK1VOSywgIDk3LCAgOTgsICA5OSwgMTAwLCAxMDEsIDEwMiwgMTAzLCAxMDQsIDEw NSwgMTA2LCAxMDcsIDEwOCwgMTA5LCAxMTAsIDExMSwKKzExMiwgMTEzLCBVTkssIDExNCwgMTE1 LCAxMTYsIDExNywgMTE4LCAxMTksIDEyMCwgMTA1LCAxMTYsICA5NywgMTAxLCAxMDMsIDEwNSwK KzExNiwgIDk3LCAgOTgsICA5OSwgMTAwLCAxMDEsIDEwMiwgMTAzLCAxMDQsIDEwNSwgMTA2LCAx MDcsIDEwOCwgMTA5LCAxMTAsIDExMSwKKzExMiwgMTEzLCAxMTQsIDExNCwgMTE1LCAxMTYsIDEx NywgMTE4LCAxMTksIDEyMCwgMTA1LCAxMTYsIDExMSwgMTE2LCAxMjAsIFVOSworfTsKKyNlbmRp ZiAvKiBHUkVFSyAqLworCisvKiBUcmFuc2xhdGlvbiBmdW5jdGlvbnMgLi4uICovCisKK0NIQVIJ CQkJCS8qIFRoZSBpZGVudGl0eSBmdW5jdGlvbi4uLiAqLworI2lmZGVmIENLX0FOU0lDCitpZGVu dChDSEFSIGMpCQkJCS8qIChubyBsb25nZXIgdXNlZCkgKi8KKyNlbHNlCitpZGVudChjKSBDSEFS IGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sgLyogaWRlbnQgKi8KKyAgICByZXR1cm4oYyk7 CQkJCS8qIEluc3RlYWQsIGVudGVyIE5VTEwgaW4gdGhlICAqLworfQkJCQkJLyogdGFibGUgb2Yg ZnVuY3Rpb25zIHRvIGF2b2lkICovCisJCQkJCS8qIG5lZWRsZXNzIGZ1bmN0aW9uIGNhbGxzLiAg ICAqLworCitDSEFSCisjaWZkZWYgQ0tfQU5TSUMKK3hsZWZ0MTI4KENIQVIgYykKKyNlbHNlCit4 bGVmdDEyOChjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sgLyogeGxlZnQxMjgg Ki8KKyAgICByZXR1cm4oKGMgPCAxMjgpID8gYyA6ICc/Jyk7Cit9CisKK0NIQVIKKyNpZmRlZiBD S19BTlNJQworeGxlZnQxNjAoQ0hBUiBjKQorI2Vsc2UKK3hsZWZ0MTYwKGMpIENIQVIgYzsKKyNl bmRpZiAvKiBDS19BTlNJQyAqLworeyAvKiB4bGVmdDE2MCAqLworICAgIHJldHVybigoYyA8IDE2 MCkgPyBjIDogJz8nKTsKK30KKworCitDSEFSCisjaWZkZWYgQ0tfQU5TSUMKK3hsMWFzKENIQVIg YykKKyNlbHNlCit4bDFhcyhjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sgLyog eGwxYXMgKi8gCQkJCS8qIExhdGluLTEgdG8gVVMgQVNDSUkuLi4gKi8KKyAgICBzd2l0Y2gobGFu Z3NbbGFuZ3VhZ2VdLmlkKSB7CisKKyAgICAgIGNhc2UgTF9EVVRDSDoKKwlpZiAoYyA9PSAyNTUp IHsJCQkvKiBEdXRjaCB1bWxhdXQteSAqLworCSAgICB6bXN0dWZmKCdqJyk7CQkvKiBiZWNvbWVz IGlqICovCisJICAgIHJldHVybignaScpOworCX0gZWxzZSByZXR1cm4oeWwxYXNbY10pOwkvKiBh bGwgb3RoZXJzIGJ5IHRoZSBib29rICovCisKKyAgICAgIGNhc2UgTF9HRVJNQU46CisJc3dpdGNo IChjKSB7CQkJLyogR2VybWFuLCBzcGVjaWFsIHJ1bGVzLiAqLworCSAgY2FzZSAxOTY6CQkJLyog dW1sYXV0LUEgLT4gQWUgKi8KKwkgICAgem1zdHVmZignZScpOworCSAgICByZXR1cm4oJ0EnKTsK KwkgIGNhc2UgMjE0OgkJCS8qIHVtbGF1dC1PIC0+IE9lICovCisJICAgIHptc3R1ZmYoJ2UnKTsK KwkgICAgcmV0dXJuKCdPJyk7CisJICBjYXNlIDIyMDoJCQkvKiB1bWxhdXQtVSAtPiBVZSAqLwor CSAgICB6bXN0dWZmKCdlJyk7CisJICAgIHJldHVybignVScpOworCSAgY2FzZSAyMjg6CQkJLyog dW1sYXV0LWEgLT4gYWUgKi8KKwkgICAgem1zdHVmZignZScpOworCSAgICByZXR1cm4oJ2EnKTsK KwkgIGNhc2UgMjQ2OgkJCS8qIHVtbGF1dC1vIC0+IG9lICovCisJICAgIHptc3R1ZmYoJ2UnKTsK KwkgICAgcmV0dXJuKCdvJyk7CisJICBjYXNlIDI1MjoJCQkvKiB1bWxhdXQtdSAtPiB1ZSAqLwor CSAgICB6bXN0dWZmKCdlJyk7CisJICAgIHJldHVybigndScpOworCSAgY2FzZSAyMjM6CQkJLyog ZXNzLXpldCAtPiBzcyAqLworCSAgICB6bXN0dWZmKCdzJyk7CisJICAgIHJldHVybigncycpOwor CSAgZGVmYXVsdDogcmV0dXJuKHlsMWFzW2NdKTsJLyogYWxsIG90aGVycyBieSB0aGUgYm9vayAq LworCX0KKyAgICAgIGNhc2UgTF9EQU5JU0g6CisgICAgICBjYXNlIExfRklOTklTSDoKKyAgICAg IGNhc2UgTF9OT1JXRUdJQU46CisgICAgICBjYXNlIExfU1dFRElTSDoKKwlzd2l0Y2ggKGMpIHsJ CQkvKiBTY2FuZGFuYXZpYW4gbGFuZ3VhZ2VzLiAqLworCSAgY2FzZSAxOTY6CQkJLyogdW1sYXV0 LUEgLT4gQWUgKi8KKyAgICAgICAgICBjYXNlIDE5ODoJCQkvKiBBRSBsaWdhdHVyZSBhbHNvIC0+ IEFlICovCisJICAgIHptc3R1ZmYoJ2UnKTsKKwkgICAgcmV0dXJuKCdBJyk7CisJICBjYXNlIDIx NDoJCQkvKiB1bWxhdXQtTyAtPiBPZSAqLworCSAgY2FzZSAyMTY6CQkJLyogTy1zbGFzaCAtPiBP ZSAqLworCSAgICB6bXN0dWZmKCdlJyk7CisJICAgIHJldHVybignTycpOworCSAgY2FzZSAyMjA6 CQkJLyogdW1sYXV0LVUgLT4gVWUgKi8KKwkgIC8qICByZXR1cm4oJ1knKTsgcmVwbGFjZWQgYnkg IlVlIiBieSBwb3B1bGFyIGRlbWFuZC4gKi8KKyAgICAgICAgICAvKiAgWSBmb3IgVW1sYXV0LVUg aXMgb25seSB1c2VkIGluIEdlcm1hbiBuYW1lcy4gKi8KKwkgICAgem1zdHVmZignZScpOworCSAg ICByZXR1cm4oJ1UnKTsKKwkgIGNhc2UgMjI4OgkJCS8qIHVtbGF1dC1hIC0+IGFlICovCisgICAg ICAgICAgY2FzZSAyMzA6CQkJLyogZGl0dG8gZm9yIGFlIGxpZ2F0dXJlICovCisJICAgIHptc3R1 ZmYoJ2UnKTsKKwkgICAgcmV0dXJuKCdhJyk7CisJICBjYXNlIDI0NjoJCQkvKiB1bWxhdXQtbyAt PiBvZSAqLworCSAgY2FzZSAyNDg6CQkJLyogby1zbGFzaCAtPiBvZSAqLworCSAgICB6bXN0dWZm KCdlJyk7CisJICAgIHJldHVybignbycpOworCSAgY2FzZSAyNTI6CQkJLyogdW1sYXV0LXUgLT4g dWUgKi8KKwkgIC8qICByZXR1cm4oJ3knKTsgcmVwbGFjZWQgYnkgInVlIiBieSBwb3B1bGFyIGRl bWFuZC4gKi8KKwkgICAgem1zdHVmZignZScpOworCSAgICByZXR1cm4oJ3UnKTsKKwkgIGNhc2Ug MTk3OgkJCS8qIEEtcmluZyAtPiBBYSAqLworCSAgICB6bXN0dWZmKCdhJyk7CisJICAgIHJldHVy bignQScpOworICAgICAgICAgIGNhc2UgMjI5OgkJCS8qIGEtcmluZyAtPiBhYSAqLworCSAgICB6 bXN0dWZmKCdhJyk7CisJICAgIHJldHVybignYScpOworCSAgZGVmYXVsdDogcmV0dXJuKHlsMWFz W2NdKTsJLyogQWxsIG90aGVycyBieSB0aGUgYm9vayAqLworCX0KKyAgICAgIGNhc2UgTF9JQ0VM QU5ESUM6CQkJLyogSWNlbGFuZGljLiAqLworCXN3aXRjaCAoYykgeworCSAgY2FzZSAxOTg6CQkJ LyogdXBwZXJjYXNlIEFFIC0+IEFFICovCisJICAgIHptc3R1ZmYoJ2UnKTsKKwkgICAgcmV0dXJu KCdBJyk7CisJICBjYXNlIDIwODoJCQkvKiB1cHBlcmNhc2UgRXRoIC0+IEQgKi8KKwkgICAgcmV0 dXJuKCdEJyk7CisJICBjYXNlIDIxNDoJCQkvKiB1cHBlcmNhc2UgTy1kaWFlcmVzaXMgLT4gT2Ug Ki8KKwkgICAgem1zdHVmZignZScpOworCSAgICByZXR1cm4oJ08nKTsKKwkgIGNhc2UgMjIyOgkJ CS8qIHVwcGVyY2FzZSBUaG9ybiAtPiBUaCAqLworCSAgICB6bXN0dWZmKCdoJyk7CisJICAgIHJl dHVybignVCcpOworCSAgY2FzZSAyMzA6CQkJLyogbG93ZXJjYXNlIGFlIC0+IGFlICovCisJICAg IHptc3R1ZmYoJ2UnKTsKKwkgICAgcmV0dXJuKCdhJyk7CisJICBjYXNlIDI0MDoJCQkvKiBsb3dl cmNhc2UgRXRoIC0+IGQgKi8KKwkgICAgcmV0dXJuKCdkJyk7CisJICBjYXNlIDI0NjoJCQkvKiBs b3dlcmNhc2UgTy1kaWFlcmVzaXMgLT4gb2UgKi8KKwkgICAgem1zdHVmZignZScpOworCSAgICBy ZXR1cm4oJ28nKTsKKwkgIGNhc2UgMjU0OgkJCS8qIGxvd2VyY2FzZSBUaG9ybiAtPiB0aCAqLwor CSAgICB6bXN0dWZmKCdoJyk7CisJICAgIHJldHVybigndCcpOworCSAgZGVmYXVsdDogcmV0dXJu KHlsMWFzW2NdKTsJLyogQWxsIG90aGVycyBieSB0aGUgYm9vayAqLworCX0KKyAgICAgIGRlZmF1 bHQ6CisJcmV0dXJuKHlsMWFzW2NdKTsJCS8qIE5vbmUgb2YgdGhlIGFib3ZlLCBieSB0aGUgdGFi bGUuICovCisgICAgfQorfQorCitDSEFSCQkJCQkvKiBDUDEyNTIgdG8gQVNDSUkgKi8KKyNpZmRl ZiBDS19BTlNJQworeHcxYXMoQ0hBUiBjKQorI2Vsc2UKK3h3MWFzKGMpIENIQVIgYzsKKyNlbmRp ZiAvKiBDS19BTlNJQyAqLworeyAvKiB4dzFhcyAqLworICAgIHN3aXRjaChjKSB7CQkJCS8qIE1p Y3Jvc29mdCBuYW1lLi4uICovCisgICAgICBjYXNlIDB4ODA6IHJldHVybignPycpOwkJLyogRXVy byBTaWduICovCisgICAgICBjYXNlIDB4ODI6IHJldHVybignXDA0NycpOwkvKiBTaW5nbGUgTG93 LTkgUXVvdGF0aW9uIE1hcmsgKi8KKyAgICAgIGNhc2UgMHg4MzogcmV0dXJuKCdmJyk7CQkvKiBM YXRpbiBTbWFsbCBMZXR0ZXIgZiB3aXRoIEhvb2sgKi8KKyAgICAgIGNhc2UgMHg4NDogcmV0dXJu KCciJyk7CQkvKiBEb3VibGUgbG93LTkgUXVvdGF0aW9uIE1hcmsgKi8KKyAgICAgIGNhc2UgMHg4 NTogcmV0dXJuKCctJyk7CQkvKiBIb3Jpem9udGFsIEVsbGlwc2lzICovCisgICAgICBjYXNlIDB4 ODY6IHJldHVybignKycpOwkJLyogRGFnZ2VyICovCisgICAgICBjYXNlIDB4ODc6IHJldHVybign KycpOwkJLyogRG91YmxlIERhZ2dlciAqLworICAgICAgY2FzZSAweDg4OiByZXR1cm4oJ14nKTsJ CS8qIE1vZGlmaWVyIExldHRlciBDaXJjdW1mbGV4IEFjY2VudCAqLworICAgICAgY2FzZSAweDg5 OiByZXR1cm4oJz8nKTsJCS8qIFBlciBNaWxsZSBTaWduICovCisgICAgICBjYXNlIDB4OEE6IHJl dHVybignUycpOwkJLyogTGF0aW4gQ2FwaXRhbCBMZXR0ZXIgUyB3aXRoIENhcm9uICovCisgICAg ICBjYXNlIDB4OEI6IHJldHVybignPCcpOwkJLyogU2luZ2xlIExlZnQgQW5nbGUgUXVvdGF0aW9u IE1hcmsgKi8KKyAgICAgIGNhc2UgMHg4QzogcmV0dXJuKCdPJyk7CQkvKiBMYXRpbiBDYXBpdGFs IExpZ2F0dXJlIE9FICovCisgICAgICBjYXNlIDB4OEU6IHJldHVybignWicpOwkJLyogTGF0aW4g Q2FwaXRhbCBMZXR0ZXIgWiB3aXRoIENhcm9uICovCisgICAgICBjYXNlIDB4OTE6IHJldHVybign XDA0NycpOwkvKiBMZWZ0IFNpbmdsZSBRdW90YXRpb24gTWFyayAqLworICAgICAgY2FzZSAweDky OiByZXR1cm4oJ1wwNDcnKTsJLyogUmlnaHQgU2luZ2xlIFF1b3RhdGlvbiBNYXJrICovCisgICAg ICBjYXNlIDB4OTM6IHJldHVybignIicpOwkJLyogTGVmdCBEb3VibGUgUXVvdGF0aW9uIE1hcmsg Ki8KKyAgICAgIGNhc2UgMHg5NDogcmV0dXJuKCciJyk7CQkvKiBSaWdodCBEb3VibGUgUXVvdGF0 aW9uIE1hcmsgKi8KKyAgICAgIGNhc2UgMHg5NTogcmV0dXJuKCcuJyk7CQkvKiBCdWxsZXQgKi8K KyAgICAgIGNhc2UgMHg5NjogcmV0dXJuKCctJyk7CQkvKiBFbiBEYXNoICovCisgICAgICBjYXNl IDB4OTc6IHJldHVybignLScpOwkJLyogRW0gRGFzaCAqLworICAgICAgY2FzZSAweDk4OiByZXR1 cm4oJ34nKTsJCS8qIFNtYWxsIFRpbGRlICovCisgICAgICBjYXNlIDB4OTk6IHJldHVybignVCcp OwkJLyogVHJhZGUgTWFyayBTaWduICovCisgICAgICBjYXNlIDB4OUE6IHJldHVybigncycpOwkJ LyogTGF0aW4gU21hbGwgTGV0dGVyIHMgd2l0aCBDYXJvbiAqLworICAgICAgY2FzZSAweDlCOiBy ZXR1cm4oJz4nKTsJCS8qIFNpbmdsZSBSaWdodCBBbmdsZSBRdW90YXRpb24gTWFyayAqLworICAg ICAgY2FzZSAweDlDOiByZXR1cm4oJ28nKTsJCS8qIExhdGluIFNtYWxsIExpZ2F0dXJlIE9FICov CisgICAgICBjYXNlIDB4OUU6IHJldHVybigneicpOwkJLyogTGF0aW4gU21hbGwgTGV0dGVyIHog d2l0aCBDYXJvbiAqLworICAgICAgY2FzZSAweDlGOiByZXR1cm4oJ1knKTsJCS8qIExhdGluIENh cGl0YWwgTGV0dGVyIFkgRGlhZXJlc2lzICovCisgICAgICBkZWZhdWx0OgorCWlmIChjID4gMHg4 MCAmJiBjIDwgMHhhMCkKKwkgIHJldHVybignPycpOworCWVsc2UKKwkgIHJldHVybih5bDFhc1tj XSk7CisgICAgfQorfQorCitDSEFSCQkJCQkvKiBDUDEyNTIgdG8gTGF0aW4tMSAqLworI2lmZGVm IENLX0FOU0lDCit4dzFsMShDSEFSIGMpCisjZWxzZQoreHcxbDEoYykgQ0hBUiBjOworI2VuZGlm IC8qIENLX0FOU0lDICovCit7IC8qIHh3MWwxICovCisgICAgaWYgKGMgPT0gMHg5NSkgcmV0dXJu KDB4YjcpOwkvKiBNaWRkbGUgZG90ICovCisgICAgcmV0dXJuKChjIDwgMTYwKSA/IHh3MWFzKGMp IDogYyk7Cit9CisKK0NIQVIJCQkJCS8qIExhdGluLTEgdG8gR2VybWFuICovCisjaWZkZWYgQ0tf QU5TSUMKK3hsMWdlKENIQVIgYykKKyNlbHNlCit4bDFnZShjKSBDSEFSIGM7CisjZW5kaWYgLyog Q0tfQU5TSUMgKi8KK3sgLyogeGwxZ2UgKi8KKyAgICByZXR1cm4oeWwxZ2VbY10pOworfQorCitD SEFSCQkJCQkvKiBHZXJtYW4gdG8gTGF0aW4tMSAqLworI2lmZGVmIENLX0FOU0lDCit4Z2VsMShD SEFSIGMpCisjZWxzZQoreGdlbDEoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7 IC8qIHhnZWwxICovCisgICAgaWYgKGMgJiAweDgwKQorICAgICAgcmV0dXJuKFVOSyk7CisgICAg cmV0dXJuKHlnZWwxW2NdKTsKK30KKworQ0hBUgorI2lmZGVmIENLX0FOU0lDCit4Z2VhcyhDSEFS IGMpCisjZWxzZQoreGdlYXMoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7IC8q IHhnZWFzICovCQkJCS8qIEdlcm1hbiBJU08gNjQ2IHRvIEFTQ0lJICovCisgICAgaWYgKGMgJiAw eDgwKQorICAgICAgcmV0dXJuKFVOSyk7CisgICAgc3dpdGNoIChjKSB7CisgICAgICBjYXNlIDkx OgkJCQkvKiB1bWxhdXQtQSAtPiBBZSAqLworCXptc3R1ZmYoJ2UnKTsKKwlyZXR1cm4oJ0EnKTsK KyAgICAgIGNhc2UgOTI6CQkJCS8qIHVtbGF1dC1PIC0+IE9lICovCisJem1zdHVmZignZScpOwor CXJldHVybignTycpOworICAgICAgY2FzZSA5MzoJCQkJLyogdW1sYXV0LVUgLT4gVWUgKi8KKwl6 bXN0dWZmKCdlJyk7CisJcmV0dXJuKCdVJyk7CisgICAgICBjYXNlIDEyMzoJCQkJLyogdW1sYXV0 LWEgLT4gYWUgKi8KKwl6bXN0dWZmKCdlJyk7CisJcmV0dXJuKCdhJyk7CisgICAgICBjYXNlIDEy NDoJCQkJLyogdW1sYXV0LW8gLT4gb2UgKi8KKwl6bXN0dWZmKCdlJyk7CisJcmV0dXJuKCdvJyk7 CisgICAgICBjYXNlIDEyNToJCQkJLyogdW1sYXV0LXUgLT4gdWUgKi8KKwl6bXN0dWZmKCdlJyk7 CisJcmV0dXJuKCd1Jyk7CisgICAgICBjYXNlIDEyNjoJCQkJLyogZXNzLXpldCAtPiBzcyAqLwor CXptc3R1ZmYoJ3MnKTsKKwlyZXR1cm4oJ3MnKTsKKyAgICAgIGRlZmF1bHQ6ICByZXR1cm4oYyk7 CQkvKiBhbGwgb3RoZXJzIHN0YXkgdGhlIHNhbWUgKi8KKyAgICB9Cit9CisKK0NIQVIKKyNpZmRl ZiBDS19BTlNJQworeGwxdzEoQ0hBUiBjKQorI2Vsc2UKK3hsMXcxKGMpIENIQVIgYzsKKyNlbmRp ZiAvKiBDS19BTlNJQyAqLworeyAvKiB4bDF3MSAqLwkJCQkvKiBMYXRpbi0xIHRvIENQMTI1MiAo V2luZG93cyBMMSkgKi8KKyAgICBpZiAoYyA+IDEyNyAmJiBjIDwgMTYwKQorICAgICAgcmV0dXJu KFVOSyk7CisgICAgZWxzZQorICAgICAgcmV0dXJuKGMpOworfQorCitDSEFSCisjaWZkZWYgQ0tf QU5TSUMKK3hkdWFzKENIQVIgYykKKyNlbHNlCit4ZHVhcyhjKSBDSEFSIGM7CisjZW5kaWYgLyog Q0tfQU5TSUMgKi8KK3sgLyogeGR1YXMgKi8JCQkJLyogRHV0Y2ggSVNPIDY0NiB0byBVUyBBU0NJ SSAqLworICAgIGlmIChjICYgMHg4MCkKKyAgICAgIHJldHVybihVTkspOworICAgIHN3aXRjaCAo YykgeworICAgICAgY2FzZSA2NDogIHJldHVybihVTkspOwkJLyogMy80ICovCisgICAgICBjYXNl IDkxOgkJCQkvKiB5LWRpYWVyZXNpcyAqLworCXptc3R1ZmYoJ2onKTsKKwlyZXR1cm4oJ2knKTsK KyAgICAgIGNhc2UgOTI6ICByZXR1cm4oVU5LKTsJCS8qIDEvMiAqLworICAgICAgY2FzZSA5Mzog IHJldHVybigxMjQpOwkJLyogdmVydGljYWwgYmFyICovCisgICAgICBjYXNlIDEyMzogcmV0dXJu KDM0KTsJCS8qIGRpYWVyZXNpcyAqLworICAgICAgY2FzZSAxMjQ6IHJldHVybihVTkspOwkJLyog RmxvcmluICovCisgICAgICBjYXNlIDEyNTogcmV0dXJuKFVOSyk7CQkvKiAxLzQgKi8KKyAgICAg IGNhc2UgMTI2OiByZXR1cm4oMzkpOwkJLyogQXBvc3Ryb3BoZSAqLworICAgICAgZGVmYXVsdDog IHJldHVybihjKTsKKyAgICB9Cit9CisKK0NIQVIKKyNpZmRlZiBDS19BTlNJQworeGZpYXMoQ0hB UiBjKQorI2Vsc2UKK3hmaWFzKGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeyAv KiB4ZmlhcyAqLwkJCQkvKiBGaW5uaXNoIElTTyA2NDYgdG8gVVMgQVNDSUkgKi8KKyAgICBpZiAo YyAmIDB4ODApCisgICAgICByZXR1cm4oVU5LKTsKKyAgICBzd2l0Y2ggKGMpIHsKKyAgICAgIGNh c2UgOTE6CQkJCS8qIEEtZGlhZXJlc2lzICovCisJem1zdHVmZignZScpOworCXJldHVybignQScp OworICAgICAgY2FzZSA5MjoJCQkJLyogTy1kaWFlcmVzaXMgKi8KKwl6bXN0dWZmKCdlJyk7CisJ cmV0dXJuKCdPJyk7CisgICAgICBjYXNlIDkzOgkJCQkvKiBBLXJpbmcgKi8KKwl6bXN0dWZmKCdh Jyk7CisJcmV0dXJuKCdBJyk7CisgICAgICBjYXNlIDk0OgkJCQkvKiBVLWRpYWVyZXNpcyAqLwor CS8qIHJldHVybignWScpOyAqLworCXptc3R1ZmYoJ2UnKTsKKwlyZXR1cm4oJ1UnKTsKKyAgICAg IGNhc2UgOTY6CQkJCS8qIGUtYWN1dGUgKi8KKwlyZXR1cm4oJ2UnKTsKKyAgICAgIGNhc2UgMTIz OgkJCQkvKiBhLWRpYWVyZXNpcyAqLworCXptc3R1ZmYoJ2UnKTsKKwlyZXR1cm4oJ2EnKTsKKyAg ICAgIGNhc2UgMTI0OgkJCQkvKiBvLWRpYWVyZXNpcyAqLworCXptc3R1ZmYoJ2UnKTsKKwlyZXR1 cm4oJ28nKTsKKyAgICAgIGNhc2UgMTI1OgkJCQkvKiBhLXJpbmcgKi8KKwl6bXN0dWZmKCdhJyk7 CisJcmV0dXJuKCdhJyk7CisgICAgICBjYXNlIDEyNjoJCQkJLyogdS1kaWFlcmVzaXMgKi8KKwkv KiByZXR1cm4oJ3knKTsgKi8KKwl6bXN0dWZmKCdlJyk7CisJcmV0dXJuKCdVJyk7CisgICAgICBk ZWZhdWx0OgorCXJldHVybihjKTsKKyAgICB9Cit9CisKK0NIQVIKKyNpZmRlZiBDS19BTlNJQwor eGZyYXMoQ0hBUiBjKQorI2Vsc2UKK3hmcmFzKGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJ QyAqLworeyAvKiB4ZnJhcyAqLwkJCQkvKiBGcmVuY2ggSVNPIDY0NiB0byBVUyBBU0NJSSAqLwor ICAgIGlmIChjICYgMHg4MCkKKyAgICAgIHJldHVybihVTkspOworICAgIHN3aXRjaCAoYykgewor ICAgICAgY2FzZSA2NDogIHJldHVybig5Nyk7CQkvKiBhIGdyYXZlICovCisgICAgICBjYXNlIDkx OiAgcmV0dXJuKFVOSyk7CQkvKiBkZWdyZWUgc2lnbiAqLworICAgICAgY2FzZSA5MjogIHJldHVy big5OSk7CQkvKiBjIGNlZGlsbGEgKi8KKyAgICAgIGNhc2UgOTM6ICByZXR1cm4oVU5LKTsJCS8q IHBhcmFncmFwaCBzaWduICovCisgICAgICBjYXNlIDEyMzogcmV0dXJuKDEwMSk7CQkvKiBlIGFj dXRlICovCisgICAgICBjYXNlIDEyNDogcmV0dXJuKDExNyk7CQkvKiB1IGdyYXZlICovCisgICAg ICBjYXNlIDEyNTogcmV0dXJuKDEwMSk7CQkvKiBlIGdyYXZlICovCisgICAgICBjYXNlIDEyNjog cmV0dXJuKDM0KTsJCS8qIGRpYWVyZXNpcyAqLworICAgICAgZGVmYXVsdDogIHJldHVybihjKTsK KyAgICB9Cit9CisKK0NIQVIKKyNpZmRlZiBDS19BTlNJQworeGZjYXMoQ0hBUiBjKQorI2Vsc2UK K3hmY2FzKGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeyAvKiB4ZmNhcyAqLwkJ CQkvKiBGcmVuY2ggQ2FuYWRpYW4gSVNPIDY0NiB0byBBU0NJSSAqLworICAgIGlmIChjICYgMHg4 MCkKKyAgICAgIHJldHVybihVTkspOworICAgIHN3aXRjaCAoYykgeworICAgICAgY2FzZSA2NDog IHJldHVybignYScpOwkJLyogYSBncmF2ZSAqLworICAgICAgY2FzZSA5MTogIHJldHVybignYScp OwkJLyogYSBjaXJjdW1mbGV4ICovCisgICAgICBjYXNlIDkyOiAgcmV0dXJuKCdjJyk7CQkvKiBj IGNlZGlsbGEgKi8KKyAgICAgIGNhc2UgOTM6ICByZXR1cm4oJ2UnKTsJCS8qIGUgY2lyY3VtZmxl eCAqLworICAgICAgY2FzZSA5NDogIHJldHVybignaScpOwkJLyogaSBjaXJjdW1mbGV4ICovCisg ICAgICBjYXNlIDk2OiAgcmV0dXJuKCdvJyk7CQkvKiBvIGNpcmN1bWZsZXggKi8KKyAgICAgIGNh c2UgMTIzOiByZXR1cm4oJ2UnKTsJCS8qIGUgYWN1dGUgKi8KKyAgICAgIGNhc2UgMTI0OiByZXR1 cm4oJ3UnKTsJCS8qIHUgZ3JhdmUgKi8KKyAgICAgIGNhc2UgMTI1OiByZXR1cm4oJ2UnKTsJCS8q IGUgZ3JhdmUgKi8KKyAgICAgIGNhc2UgMTI2OiByZXR1cm4oJ3UnKTsJCS8qIHUgY2lyY3VtZmxl eCAqLworICAgICAgZGVmYXVsdDogIHJldHVybihjKTsKKyAgICB9Cit9CisKK0NIQVIKKyNpZmRl ZiBDS19BTlNJQworeGl0YXMoQ0hBUiBjKQorI2Vsc2UKK3hpdGFzKGMpIENIQVIgYzsKKyNlbmRp ZiAvKiBDS19BTlNJQyAqLworeyAvKiB4aXRhcyAqLwkJCQkvKiBJdGFsaWFuIElTTyA2NDYgdG8g QVNDSUkgKi8KKyAgICBpZiAoYyAmIDB4ODApCisgICAgICByZXR1cm4oVU5LKTsKKyAgICBzd2l0 Y2ggKGMpIHsKKyAgICAgIGNhc2UgOTE6ICByZXR1cm4oVU5LKTsJCS8qIGRlZ3JlZSAqLworICAg ICAgY2FzZSA5MjogIHJldHVybignYycpOwkJLyogYyBjZWRpbGxhICovCisgICAgICBjYXNlIDkz OiAgcmV0dXJuKCdlJyk7CQkvKiBlIGFjdXRlICovCisgICAgICBjYXNlIDk2OiAgcmV0dXJuKCd1 Jyk7CQkvKiB1IGdyYXZlICovCisgICAgICBjYXNlIDEyMzogcmV0dXJuKCdhJyk7CQkvKiBhIGdy YXZlICovCisgICAgICBjYXNlIDEyNDogcmV0dXJuKCdvJyk7CQkvKiBvIGdyYXZlICovCisgICAg ICBjYXNlIDEyNTogcmV0dXJuKCdlJyk7CQkvKiBlIGdyYXZlICovCisgICAgICBjYXNlIDEyNjog cmV0dXJuKCdpJyk7CQkvKiBpIGdyYXZlICovCisgICAgICBkZWZhdWx0OiAgcmV0dXJuKGMpOwor ICAgIH0KK30KKworQ0hBUgorI2lmZGVmIENLX0FOU0lDCit4bmVhcyhDSEFSIGMpCisjZWxzZQor eG5lYXMoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7IC8qIHhuZWFzICovCQkJ CS8qIE5lWFQgdG8gQVNDSUkgKi8KKyAgICBpZiAobGFuZ3NbbGFuZ3VhZ2VdLmlkID09IExfRlJF TkNIKSB7IC8qIElmIFNFVCBMQU5HVUFHRSBGUkVOQ0ggKi8KKwlpZiAoYyA9PSAyMzQpIHsJCQkv KiBoYW5kbGUgT0UgZGlncmFwaC4gKi8KKwkgICAgem1zdHVmZignRScpOworCSAgICByZXR1cm4o J08nKTsKKwl9IGVsc2UgaWYgKGMgPT0gMjUwKSB7CQkvKiBBbHNvIGxvd2VyY2FzZSBvZS4gKi8K KwkgICAgem1zdHVmZignZScpOworCSAgICByZXR1cm4oJ28nKTsKKwl9CisgICAgfQorICAgIGMg PSB4bmVsMShjKTsJCQkvKiBDb252ZXJ0IHRvIExhdGluLTEgKi8KKyAgICByZXR1cm4oeWwxYXNb Y10pOwkJCS8qIENvbnZlcnQgTGF0aW4tMSB0byBBU0NJSSAqLworfQorCitDSEFSCisjaWZkZWYg Q0tfQU5TSUMKK3hub2FzKENIQVIgYykKKyNlbHNlCit4bm9hcyhjKSBDSEFSIGM7CisjZW5kaWYg LyogQ0tfQU5TSUMgKi8KK3sgLyogeG5vYXMgKi8JCQkJLyogTm9yZ2UvRGFuaXNoIElTTyA2NDYg dG8gQVNDSUkgKi8KKyAgICBpZiAoYyAmIDB4ODApCisgICAgICByZXR1cm4oVU5LKTsKKyAgICBz d2l0Y2ggKGMpIHsKKyAgICAgIGNhc2UgOTE6CisJem1zdHVmZignRScpOwkJCS8qIEFFIGRpZ3Jh cGggKi8KKwlyZXR1cm4oJ0EnKTsKKyAgICAgIGNhc2UgOTI6IHJldHVybignTycpOwkJLyogTyBz bGFzaCAqLworICAgICAgY2FzZSA5MzoJCQkJLyogQSByaW5nICovCisJem1zdHVmZignYScpOwor CXJldHVybignQScpOworICAgICAgY2FzZSAxMjM6CQkJCS8qIGFlIGRpZ3JhcGggKi8KKwl6bXN0 dWZmKCdlJyk7CisJcmV0dXJuKCdhJyk7CisgICAgICBjYXNlIDEyNDogcmV0dXJuKCdvJyk7CQkv KiBvIHNsYXNoICovCisgICAgICBjYXNlIDEyNToJCQkJLyogYSByaW5nICovCisJem1zdHVmZign YScpOworCXJldHVybignYScpOworICAgICAgZGVmYXVsdDogIHJldHVybihjKTsKKyAgICB9Cit9 CisKK0NIQVIKKyNpZmRlZiBDS19BTlNJQworeHBvYXMoQ0hBUiBjKQorI2Vsc2UKK3hwb2FzKGMp IENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeyAvKiB4cG9hcyAqLwkJCQkvKiBQb3J0 dWd1ZXNlIElTTyA2NDYgdG8gQVNDSUkgKi8KKyAgICBpZiAoYyAmIDB4ODApCisgICAgICByZXR1 cm4oVU5LKTsKKyAgICBzd2l0Y2ggKGMpIHsKKyAgICAgIGNhc2UgOTE6ICByZXR1cm4oJ0EnKTsJ CS8qIEEgdGlsZGUgKi8KKyAgICAgIGNhc2UgOTI6ICByZXR1cm4oJ0MnKTsJCS8qIEMgY2VkaWxs YSAqLworICAgICAgY2FzZSA5MzogIHJldHVybignTycpOwkJLyogTyB0aWxkZSAqLworICAgICAg Y2FzZSAxMjM6IHJldHVybignYScpOwkJLyogYSB0aWxkZSAqLworICAgICAgY2FzZSAxMjQ6IHJl dHVybignYycpOwkJLyogYyBjZWRpbGxhICovCisgICAgICBjYXNlIDEyNTogcmV0dXJuKCdvJyk7 CQkvKiBvIHRpbGRlICovCisgICAgICBkZWZhdWx0OiAgcmV0dXJuKGMpOworICAgIH0KK30KKwor Q0hBUgorI2lmZGVmIENLX0FOU0lDCit4c3BhcyhDSEFSIGMpCisjZWxzZQoreHNwYXMoYykgQ0hB UiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7IC8qIHhzcGFzICovCQkJCS8qIFNwYW5pc2gg SVNPIDY0NiB0byBBU0NJSSAqLworICAgIGlmIChjICYgMHg4MCkKKyAgICAgIHJldHVybihVTksp OworICAgIHN3aXRjaCAoYykgeworICAgICAgY2FzZSA5MTogIHJldHVybigzMyk7CQkvKiBJbnZl cnRlZCBleGNsYW1hdGlvbiAqLworICAgICAgY2FzZSA5MjogIHJldHVybignTicpOwkJLyogTiB0 aWxkZSAqLworICAgICAgY2FzZSA5MzogIHJldHVybig2Myk7CQkvKiBJbnZlcnRlZCBxdWVzdGlv biBtYXJrICovCisgICAgICBjYXNlIDEyMzogcmV0dXJuKFVOSyk7CQkvKiBkZWdyZWUgKi8KKyAg ICAgIGNhc2UgMTI0OiByZXR1cm4oJ24nKTsJCS8qIG4gdGlsZGUgKi8KKyAgICAgIGNhc2UgMTI1 OiByZXR1cm4oJ2MnKTsJCS8qIGMgY2VkaWxsYSAqLworICAgICAgZGVmYXVsdDogIHJldHVybihj KTsKKyAgICB9Cit9CisKK0NIQVIKKyNpZmRlZiBDS19BTlNJQworeHN3YXMoQ0hBUiBjKQorI2Vs c2UKK3hzd2FzKGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeyAvKiB4c3dhcyAq LwkJCQkvKiBTd2VkaXNoIElTTyA2NDYgdG8gQVNDSUkgKi8KKyAgICBpZiAoYyAmIDB4ODApCisg ICAgICByZXR1cm4oVU5LKTsKKyAgICBzd2l0Y2ggKGMpIHsKKyAgICAgIGNhc2UgNjQ6ICByZXR1 cm4oJ0UnKTsJCS8qIEUgYWN1dGUgKi8KKyAgICAgIGNhc2UgOTE6CQkJCS8qIEEgZGlhZXJlc2lz ICovCisJem1zdHVmZignZScpOworCXJldHVybignQScpOworICAgICAgY2FzZSA5MjoJCQkJLyog TyBkaWFlcmVzaXMgKi8KKwl6bXN0dWZmKCdlJyk7CisJcmV0dXJuKCdPJyk7CisgICAgICBjYXNl IDkzOgkJCQkvKiBBIHJpbmcgKi8KKwl6bXN0dWZmKCdhJyk7CisJcmV0dXJuKCdBJyk7CisgICAg ICBjYXNlIDk0OgkJCQkvKiBVIGRpYWVyZXNpcyAqLworCS8qIHJldHVybignWScpOyAqLworCXpt c3R1ZmYoJ2UnKTsKKwlyZXR1cm4oJ1UnKTsKKyAgICAgIGNhc2UgOTY6ICByZXR1cm4oJ2UnKTsJ CS8qIGUgYWN1dGUgKi8KKyAgICAgIGNhc2UgMTIzOgkJCQkvKiBhIGRpYWVyZXNpcyAqLworCXpt c3R1ZmYoJ2UnKTsKKwlyZXR1cm4oJ2EnKTsKKyAgICAgIGNhc2UgMTI0OgkJCQkvKiBvIGRpYWVy ZXNpcyAqLworCXptc3R1ZmYoJ2UnKTsKKwlyZXR1cm4oJ28nKTsKKyAgICAgIGNhc2UgMTI1OgkJ CQkvKiBhIHJpbmcgKi8KKwl6bXN0dWZmKCdhJyk7CisJcmV0dXJuKCdhJyk7CisgICAgICBjYXNl IDEyNjoJCQkJLyogdSBkaWFlcmVzaXMgKi8KKwkvKiByZXR1cm4oJ3knKTsgKi8KKwl6bXN0dWZm KCdlJyk7CisJcmV0dXJuKCd1Jyk7CisgICAgICBkZWZhdWx0OiAgcmV0dXJuKGMpOworICAgIH0K K30KKworQ0hBUgorI2lmZGVmIENLX0FOU0lDCit4Y2hhcyhDSEFSIGMpCisjZWxzZQoreGNoYXMo YykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7IC8qIHhjaGFzICovCQkJCS8qIFN3 aXNzIElTTyA2NDYgdG8gQVNDSUkgKi8KKyAgICBpZiAoYyAmIDB4ODApCisgICAgICByZXR1cm4o VU5LKTsKKyAgICBzd2l0Y2ggKGMpIHsKKyAgICAgIGNhc2UgMzU6ICByZXR1cm4oJ3UnKTsJCS8q IHUgZ3JhdmUgKi8KKyAgICAgIGNhc2UgNjQ6ICByZXR1cm4oJ2EnKTsJCS8qIGEgZ3JhdmUgKi8K KyAgICAgIGNhc2UgOTE6ICByZXR1cm4oJ2UnKTsJCS8qIGUgYWN1dGUgKi8KKyAgICAgIGNhc2Ug OTI6ICByZXR1cm4oJ2MnKTsJCS8qIGMgY2VkaWxsYSAqLworICAgICAgY2FzZSA5MzogIHJldHVy bignZScpOwkJLyogZSBjaXJjdW1mbGV4ICovCisgICAgICBjYXNlIDk0OiAgcmV0dXJuKCdpJyk7 CQkvKiBpIGNpcmN1bWZsZXggKi8KKyAgICAgIGNhc2UgOTU6ICByZXR1cm4oJ2UnKTsJCS8qIGUg Z3JhdmUgKi8KKyAgICAgIGNhc2UgOTY6ICByZXR1cm4oJ28nKTsJCS8qIG8gY2lyY3VtZmxleCAq LworICAgICAgY2FzZSAxMjM6CQkJCS8qIGEgZGlhZXJlc2lzICovCisJem1zdHVmZignZScpOwor CXJldHVybignYScpOworICAgICAgY2FzZSAxMjQ6CQkJCS8qIG8gZGlhZXJlc2lzICovCisJem1z dHVmZignZScpOworCXJldHVybignbycpOworICAgICAgY2FzZSAxMjU6CQkJCS8qIHUgZGlhZXJl c2lzICovCisJem1zdHVmZignZScpOworCXJldHVybigndScpOworICAgICAgY2FzZSAxMjY6IHJl dHVybigndScpOwkJLyogdSBjaXJjdW1mbGV4ICovCisgICAgICBkZWZhdWx0OiAgcmV0dXJuKGMp OworICAgIH0KK30KKworQ0hBUgorI2lmZGVmIENLX0FOU0lDCit4aHVhcyhDSEFSIGMpCisjZWxz ZQoreGh1YXMoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7IC8qIHhodWFzICov CQkJCS8qIEh1bmdhcmlhbiBJU08gNjQ2IHRvIEFTQ0lJICovCisgICAgaWYgKGMgJiAweDgwKQor ICAgICAgcmV0dXJuKFVOSyk7CisgICAgc3dpdGNoIChjKSB7CisgICAgICBjYXNlIDY0OiAgcmV0 dXJuKCdBJyk7CQkvKiBBIGFjdXRlICovCisgICAgICBjYXNlIDkxOiAgcmV0dXJuKCdFJyk7CQkv KiBFIGFjdXRlICovCisgICAgICBjYXNlIDkyOiAgcmV0dXJuKCdPJyk7CQkvKiBPIGRpYWVyZXNp cyAqLworICAgICAgY2FzZSA5MzogIHJldHVybignVScpOwkJLyogVSBkaWFlcmVzaXMgKi8KKyAg ICAgIGNhc2UgOTY6ICByZXR1cm4oJ2EnKTsJCS8qIGEgYWN1dGUgKi8KKyAgICAgIGNhc2UgMTIz OiByZXR1cm4oJ2UnKTsJCS8qIGUgYWN1dGUgKi8KKyAgICAgIGNhc2UgMTI0OiByZXR1cm4oJ28n KTsJCS8qIG8gYWN1dGUgKi8KKyAgICAgIGNhc2UgMTI1OiByZXR1cm4oJ3UnKTsJCS8qIHUgYWN1 dGUgKi8KKyAgICAgIGNhc2UgMTI2OiByZXR1cm4oMzQpOwkJLyogZG91YmxlIGFjdXRlIGFjY2Vu dCAqLworICAgICAgZGVmYXVsdDogIHJldHVybihjKTsKKyAgICB9Cit9CisKK0NIQVIKKyNpZmRl ZiBDS19BTlNJQworeGRtYXMoQ0hBUiBjKQorI2Vsc2UKK3hkbWFzKGMpIENIQVIgYzsKKyNlbmRp ZiAvKiBDS19BTlNJQyAqLworeyAvKiB4ZG1hcyAqLwkJCQkvKiBERUMgTUNTIHRvIEFTQ0lJICov CisgICAgaWYgKGxhbmdzW2xhbmd1YWdlXS5pZCA9PSBMX0ZSRU5DSCkgeyAvKiBJZiBTRVQgTEFO R1VBR0UgRlJFTkNIICovCisJaWYgKGMgPT0gMjE1KSB7CQkJLyogaGFuZGxlIE9FIGRpZ3JhcGgu ICovCisJICAgIHptc3R1ZmYoJ0UnKTsKKwkgICAgcmV0dXJuKCdPJyk7CisJfSBlbHNlIGlmIChj ID09IDI0NykgewkJLyogQWxzbyBsb3dlcmNhc2Ugb2UuICovCisJICAgIHptc3R1ZmYoJ2UnKTsK KwkgICAgcmV0dXJuKCdvJyk7CisJfQorICAgIH0KKyAgICByZXR1cm4oeWwxYXNbY10pOwkJCS8q IE90aGVyd2lzZSB0cmVhdCBsaWtlIExhdGluLTEgKi8KK30KKworQ0hBUgorI2lmZGVmIENLX0FO U0lDCit4ZGdhcyhDSEFSIGMpCisjZWxzZQoreGRnYXMoYykgQ0hBUiBjOworI2VuZGlmIC8qIENL X0FOU0lDICovCit7IC8qICB4ZGdhcyAqLwkJCQkvKiBEYXRhIEdlbmVyYWwgdG8gQVNDSUkgKi8K KyAgICBzd2l0Y2goYykgeworICAgICAgY2FzZSAxODA6IHJldHVybignZicpOwkJLyogRmxvcmlu ICovCisgICAgICBjYXNlIDE4MzogcmV0dXJuKCc8Jyk7CQkvKiBMZXNzLWVxdWFsICovCisgICAg ICBjYXNlIDE4NDogcmV0dXJuKCc+Jyk7CQkvKiBHcmVhdGVyLWVxdWFsICovCisgICAgICBjYXNl IDE4NjogcmV0dXJuKDk2KTsJCS8qIEdyYXZlIGFjY2VudCAqLworICAgICAgY2FzZSAxOTE6IHJl dHVybignXicpOwkJLyogVXBhcnJvdyAqLworICAgICAgY2FzZSAyMTU6CisJaWYgKGxhbmdzW2xh bmd1YWdlXS5pZCA9PSBMX0ZSRU5DSCkgeyAvKiBPRSBkaWdyYXBoICovCisJICAgIHptc3R1ZmYo J0UnKTsKKwkgICAgcmV0dXJuKCdPJyk7CisJfSBlbHNlIHJldHVybignTycpOworICAgICAgY2Fz ZSAyNDc6CisJaWYgKGxhbmdzW2xhbmd1YWdlXS5pZCA9PSBMX0ZSRU5DSCkgeyAvKiBvZSBkaWdy YXBoICovCisJICAgIHptc3R1ZmYoJ2UnKTsKKwkgICAgcmV0dXJuKCdvJyk7CisJfSBlbHNlIHJl dHVybignbycpOworICAgICAgY2FzZSAxNzU6IGNhc2UgMTc5OiBjYXNlIDIyMDogY2FzZSAyMjI6 CisgICAgICBjYXNlIDIyMzogY2FzZSAyNTQ6IGNhc2UgMjU1OgorCXJldHVybihVTkspOworICAg ICAgZGVmYXVsdDoJCQkJLyogVGhlIHJlc3QsIGNvbnZlcnQgdG8gTGF0aW4tMSAqLworCXJldHVy bih5bDFhc1t5ZGdsMVtjXV0pOwkvKiBhbmQgZnJvbSB0aGVyZSB0byBBU0NJSSAqLworICAgIH0K K30KKworQ0hBUgorI2lmZGVmIENLX0FOU0lDCit4cjhhcyhDSEFSIGMpCisjZWxzZQoreHI4YXMo YykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7IC8qICB4cjhhcyAqLwkJCQkvKiBI ZXdsZXR0IFBhY2thcmQgUm9tYW44IHRvIEFTQ0lJICovCisgICAgc3dpdGNoKGMpIHsKKyAgICAg IGNhc2UgMTc1OiByZXR1cm4oJ0wnKTsJCS8qIExpcmEgKi8KKyAgICAgIGNhc2UgMTkwOiByZXR1 cm4oJ2YnKTsJCS8qIEZsb3JpbiAqLworICAgICAgY2FzZSAyMzU6IHJldHVybignUycpOwkJLyog UyBjYXJvbiAqLworICAgICAgY2FzZSAyMzY6IHJldHVybigncycpOwkJLyogcyBjYXJvbiAqLwor ICAgICAgY2FzZSAyNDY6IHJldHVybignLScpOwkJLyogSG9yaXpvbnRhbCBiYXIgKi8KKyAgICAg IGNhc2UgMjUyOiByZXR1cm4oJyonKTsJCS8qIFNvbGlkIGJveCAqLworICAgICAgZGVmYXVsdDoJ CQkJLyogVGhlIHJlc3QsIGNvbnZlcnQgdG8gTGF0aW4tMSAqLworCXJldHVybih5bDFhc1t5cjhs MVtjXV0pOwkvKiBhbmQgZnJvbSB0aGVyZSB0byBBU0NJSSAqLworICAgIH0KK30KKworQ0hBUgor I2lmZGVmIENLX0FOU0lDCit4dWtsMShDSEFSIGMpCisjZWxzZQoreHVrbDEoYykgQ0hBUiBjOwor I2VuZGlmIC8qIENLX0FOU0lDICovCit7IC8qIHh1a2wxICovCQkJCS8qIFVLIEFTQ0lJIHRvIExh dGluLTEgKi8KKyAgICBpZiAoYyAmIDB4ODApCisgICAgICByZXR1cm4oVU5LKTsKKyAgICBpZiAo YyA9PSAzNSkKKyAgICAgIHJldHVybigxNjMpOworICAgIGVsc2UgcmV0dXJuKGMpOworfQorCitD SEFSCisjaWZkZWYgQ0tfQU5TSUMKK3hsMXVrKENIQVIgYykKKyNlbHNlCit4bDF1ayhjKSBDSEFS IGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sgLyogeGwxdWsgKi8JCQkJLyogTGF0aW4tMSB0 byBVSyBBU0NJSSAqLworICAgIGlmIChjID09IDE2MykKKyAgICAgIHJldHVybigzNSk7CisgICAg ZWxzZSByZXR1cm4oeWwxYXNbY10pOworfQorCitDSEFSCQkJCQkvKiBMYXRpbi0xIHRvIEZyZW5j aCBJU08gNjQ2ICovCisjaWZkZWYgQ0tfQU5TSUMKK3hsMWZyKENIQVIgYykKKyNlbHNlCit4bDFm cihjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sgLyogeGwxZnIgKi8KKyAgICBy ZXR1cm4oeWwxZnJbY10pOworfQorCisKK0NIQVIJCQkJCS8qIEZyZW5jaCBJU08gNjQ2IHRvIExh dGluLTEgKi8KKyNpZmRlZiBDS19BTlNJQworeGZybDEoQ0hBUiBjKQorI2Vsc2UKK3hmcmwxKGMp IENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeyAvKiB4ZnJsMSAqLworICAgIGlmIChj ICYgMHg4MCkKKyAgICAgIHJldHVybihVTkspOworICAgIHJldHVybih5ZnJsMVtjXSk7Cit9CisK K0NIQVIJCQkJCS8qIExhdGluLTEgdG8gRHV0Y2ggQVNDSUkgKi8KKyNpZmRlZiBDS19BTlNJQwor eGwxZHUoQ0hBUiBjKQorI2Vsc2UKK3hsMWR1KGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJ QyAqLworeyAvKiB4bDFkdSAqLworICAgIHJldHVybih5bDFkdVtjXSk7Cit9CisKK0NIQVIKKyNp ZmRlZiBDS19BTlNJQworeGR1bDEoQ0hBUiBjKQorI2Vsc2UKK3hkdWwxKGMpIENIQVIgYzsKKyNl bmRpZiAvKiBDS19BTlNJQyAqLworeyAvKiB4ZHVsMSAqLwkJCQkvKiBEdXRjaCBJU08gNjQ2IHRv IExhdGluLTEgKi8KKyAgICBpZiAoYyAmIDB4ODApCisgICAgICByZXR1cm4oVU5LKTsKKyAgICBy ZXR1cm4oeWR1bDFbY10pOworfQorCitDSEFSCisjaWZkZWYgQ0tfQU5TSUMKK3hmaWwxKENIQVIg YykKKyNlbHNlCit4ZmlsMShjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sgLyog eGZpbDEgKi8JCQkJLyogRmlubmlzaCBJU08gNjQ2IHRvIExhdGluLTEgKi8KKyAgICBpZiAoYyAm IDB4ODApCisgICAgICByZXR1cm4oVU5LKTsKKyAgICByZXR1cm4oeWZpbDFbY10pOworfQorCitD SEFSCisjaWZkZWYgQ0tfQU5TSUMKK3hsMWZpKENIQVIgYykKKyNlbHNlCit4bDFmaShjKSBDSEFS IGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sgLyogeGwxZmkgKi8JCQkJLyogTGF0aW4tMSB0 byBGaW5uaXNoIElTTyA2NDYgKi8KKyAgICByZXR1cm4oeWwxZmlbY10pOworfQorCitDSEFSCisj aWZkZWYgQ0tfQU5TSUMKK3hmY2wxKENIQVIgYykKKyNlbHNlCit4ZmNsMShjKSBDSEFSIGM7Cisj ZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sgLyogeGZjbDEgKi8JCQkJLyogRnJlbmNoIENhbmFkaWFu IElTTzY0NiB0byBMYXRpbi0xICovCisgICAgaWYgKGMgJiAweDgwKQorICAgICAgcmV0dXJuKFVO Syk7CisgICAgcmV0dXJuKHlmY2wxW2NdKTsKK30KKworQ0hBUgorI2lmZGVmIENLX0FOU0lDCit4 bDFmYyhDSEFSIGMpCisjZWxzZQoreGwxZmMoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lD ICovCit7IC8qIHhsMWZjICovCQkJCS8qIExhdGluLTEgdG8gRnJlbmNoIENhbmFkaWFuIElTTzY0 NiAqLworICAgIHJldHVybih5bDFmY1tjXSk7Cit9CisKK0NIQVIKKyNpZmRlZiBDS19BTlNJQwor eGl0bDEoQ0hBUiBjKQorI2Vsc2UKK3hpdGwxKGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJ QyAqLworeyAvKiB4aXRsMSAqLwkJCQkvKiBJdGFsaWFuIElTTyA2NDYgdG8gTGF0aW4tMSAqLwor ICAgIGlmIChjICYgMHg4MCkKKyAgICAgIHJldHVybihVTkspOworICAgIHJldHVybih5aXRsMVtj XSk7Cit9CisKK0NIQVIKKyNpZmRlZiBDS19BTlNJQworeGwxaXQoQ0hBUiBjKQorI2Vsc2UKK3hs MWl0KGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeyAvKiB4bDFpdCAqLwkJCQkv KiBMYXRpbi0xIHRvIEl0YWxpYW4gSVNPIDY0NiAqLworICAgIHJldHVybih5bDFpdFtjXSk7Cit9 CisKK0NIQVIKKyNpZmRlZiBDS19BTlNJQworeG5lbDEoQ0hBUiBjKQorI2Vsc2UKK3huZWwxKGMp IENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeyAvKiB4bmVsMSAqLwkJIAkJLyogTmVY VCB0byBMYXRpbi0xICovCisgICAgaWYgKGxhbmdzW2xhbmd1YWdlXS5pZCA9PSBMX0ZSRU5DSCkg eyAvKiBJZiBTRVQgTEFOR1VBR0UgRlJFTkNIICovCisJaWYgKGMgPT0gMjM0KSB7CQkJLyogaGFu ZGxlIE9FIGRpZ3JhcGguICovCisJICAgIHptc3R1ZmYoJ0UnKTsKKwkgICAgcmV0dXJuKCdPJyk7 CisJfSBlbHNlIGlmIChjID09IDI1MCkgewkJLyogQWxzbyBsb3dlcmNhc2Ugb2UuICovCisJICAg IHptc3R1ZmYoJ2UnKTsKKwkgICAgcmV0dXJuKCdvJyk7CisJfQorICAgIH0KKyAgICByZXR1cm4o eW5lbDFbY10pOworfQorCitDSEFSCisjaWZkZWYgQ0tfQU5TSUMKK3huZWw5KENIQVIgYykKKyNl bHNlCit4bmVsOShjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sgLyogeG5lbDkg Ki8JCSAJCS8qIE5lWFQgdG8gTGF0aW4tOSAqLworICAgIHN3aXRjaCAoYykgeworICAgICAgY2Fz ZSAyMzQ6IHJldHVybigxODgpOwkJLyogT0UgKi8KKyAgICAgIGNhc2UgMjUwOiByZXR1cm4oMTg5 KTsJCS8qIG9lICovCisgICAgICBjYXNlIDE4ODogcmV0dXJuKDIzNCk7CQkvKiBrZWVwIGl0IGlu dmVydGlibGUuLi4gKi8KKyAgICAgIGNhc2UgMTg5OiByZXR1cm4oMjUwKTsJCS8qIG9lICovCisg ICAgICBkZWZhdWx0OgorCXJldHVybih5bmVsMVtjXSk7CisgICAgfQorfQorCitDSEFSCisjaWZk ZWYgQ0tfQU5TSUMKK3hsMW5lKENIQVIgYykKKyNlbHNlCit4bDFuZShjKSBDSEFSIGM7CisjZW5k aWYgLyogQ0tfQU5TSUMgKi8KK3sgLyogeGwxbmUgKi8JCSAJCS8qIExhdGluLTEgdG8gTmVYVCAq LworICAgIHJldHVybih5bDFuZVtjXSk7Cit9CisKK0NIQVIKKyNpZmRlZiBDS19BTlNJQworeGw5 bmUoQ0hBUiBjKQorI2Vsc2UKK3hsOW5lKGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAq LworeyAvKiB4bDluZSAqLwkJIAkJLyogTGF0aW4tOSB0byBOZVhUICovCisgICAgc3dpdGNoIChj KSB7CisgICAgICBjYXNlIDE4ODogcmV0dXJuKDIzNCk7CQkvKiBPRSAqLworICAgICAgY2FzZSAx ODk6IHJldHVybigyNTApOwkJLyogb2UgKi8KKyAgICAgIGNhc2UgMjM0OiByZXR1cm4oMTg4KTsJ CS8qIE9FICovCisgICAgICBjYXNlIDI1MDogcmV0dXJuKDE4OSk7CQkvKiBvZSAqLworICAgICAg ZGVmYXVsdDoKKwlyZXR1cm4oeWwxbmVbY10pOworICAgIH0KK30KKworQ0hBUgorI2lmZGVmIENL X0FOU0lDCit4bm9sMShDSEFSIGMpCisjZWxzZQoreG5vbDEoYykgQ0hBUiBjOworI2VuZGlmIC8q IENLX0FOU0lDICovCit7IC8qIHhub2wxICovCQkgCQkvKiBOb3J3YXkvRGVubWFyayBJU08gNjQ2 IHRvIExhdGluLTEgKi8KKyAgICBpZiAoYyAmIDB4ODApCisgICAgICByZXR1cm4oVU5LKTsKKyAg ICByZXR1cm4oeW5vbDFbY10pOworfQorCitDSEFSCisjaWZkZWYgQ0tfQU5TSUMKK3hsMW5vKENI QVIgYykKKyNlbHNlCit4bDFubyhjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sg LyogeGwxbm8gKi8JCSAJCS8qIExhdGluLTEgdG8gTm9yd2F5L0Rlbm1hcmsgSVNPIDY0NiAqLwor ICAgIHJldHVybih5bDFub1tjXSk7Cit9CisKK0NIQVIKKyNpZmRlZiBDS19BTlNJQworeHBvbDEo Q0hBUiBjKQorI2Vsc2UKK3hwb2wxKGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLwor eyAvKiB4cG9sMSAqLwkJCQkvKiBQb3J0dWd1ZXNlIElTTyA2NDYgdG8gTGF0aW4tMSAqLworICAg IGlmIChjICYgMHg4MCkKKyAgICAgIHJldHVybihVTkspOworICAgIHJldHVybih5cG9sMVtjXSk7 Cit9CisKK0NIQVIKKyNpZmRlZiBDS19BTlNJQworeGwxcG8oQ0hBUiBjKQorI2Vsc2UKK3hsMXBv KGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeyAvKiB4bDFwbyAqLwkJCQkvKiBM YXRpbi0xIHRvIFBvcnR1Z3Vlc2UgSVNPIDY0NiAqLworICAgIHJldHVybih5bDFwb1tjXSk7Cit9 CisKK0NIQVIKKyNpZmRlZiBDS19BTlNJQworeHNwbDEoQ0hBUiBjKQorI2Vsc2UKK3hzcGwxKGMp IENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeyAvKiB4c3BsMSAqLwkJCQkvKiBTcGFu aXNoIElTTyA2NDYgdG8gTGF0aW4tMSAqLworICAgIGlmIChjICYgMHg4MCkKKyAgICAgIHJldHVy bihVTkspOworICAgIHJldHVybih5c3BsMVtjXSk7Cit9CisKK0NIQVIKKyNpZmRlZiBDS19BTlNJ QworeGwxc3AoQ0hBUiBjKQorI2Vsc2UKK3hsMXNwKGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19B TlNJQyAqLworeyAvKiB4bDFzcCAqLwkJCQkvKiBMYXRpbi0xIHRvIFNwYW5pc2ggSVNPIDY0NiAq LworICAgIHJldHVybih5bDFzcFtjXSk7Cit9CisKK0NIQVIKKyNpZmRlZiBDS19BTlNJQworeHN3 bDEoQ0hBUiBjKQorI2Vsc2UKK3hzd2wxKGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAq LworeyAvKiB4c3dsMSAqLwkJCQkvKiBTd2VkaXNoIElTTyA2NDYgdG8gTGF0aW4tMSAqLworICAg IGlmIChjICYgMHg4MCkKKyAgICAgIHJldHVybihVTkspOworICAgIHJldHVybih5c3dsMVtjXSk7 Cit9CisKK0NIQVIKKyNpZmRlZiBDS19BTlNJQworeGwxc3coQ0hBUiBjKQorI2Vsc2UKK3hsMXN3 KGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeyAvKiB4bDFzdyAqLwkJCQkvKiBM YXRpbi0xIHRvIFN3ZWRpc2ggSVNPIDY0NiAqLworICAgIHJldHVybih5bDFzd1tjXSk7Cit9CisK K0NIQVIKKyNpZmRlZiBDS19BTlNJQworeGNobDEoQ0hBUiBjKQorI2Vsc2UKK3hjaGwxKGMpIENI QVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeyAvKiB4Y2hsMSAqLwkJCQkvKiBTd2lzcyBJ U08gNjQ2IHRvIExhdGluLTEgKi8KKyAgICBpZiAoYyAmIDB4ODApCisgICAgICByZXR1cm4oVU5L KTsKKyAgICByZXR1cm4oeWNobDFbY10pOworfQorCitDSEFSCisjaWZkZWYgQ0tfQU5TSUMKK3hs MWNoKENIQVIgYykKKyNlbHNlCit4bDFjaChjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMg Ki8KK3sgLyogeGwxY2ggKi8JCQkJLyogTGF0aW4tMSB0byBTd2lzcyBJU08gNjQ2ICovCisgICAg cmV0dXJuKHlsMWNoW2NdKTsKK30KKworQ0hBUgorI2lmZGVmIENLX0FOU0lDCit4aHVsMShDSEFS IGMpCisjZWxzZQoreGh1bDEoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7IC8q IHhodWwxICovCQkJCS8qIEh1bmdhcmlhbiBJU08gNjQ2IHRvIExhdGluLTEgKi8KKyAgICBpZiAo YyAmIDB4ODApCisgICAgICByZXR1cm4oVU5LKTsKKyAgICByZXR1cm4oeWh1bDFbY10pOworfQor CitDSEFSCisjaWZkZWYgQ0tfQU5TSUMKK3hsMWh1KENIQVIgYykKKyNlbHNlCit4bDFodShjKSBD SEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sgLyogeGwxaHUgKi8JCQkJLyogTGF0aW4t MSB0byBIdW5nYXJpYW4gSVNPIDY0NiAqLworICAgIHJldHVybih5bDFodVtjXSk7Cit9CisKK0NI QVIKKyNpZmRlZiBDS19BTlNJQworeGwxZG0oQ0hBUiBjKQorI2Vsc2UKK3hsMWRtKGMpIENIQVIg YzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeyAvKiB4bDFkbSAqLwkJCQkvKiBMYXRpbi0xIHRv IERFQyBNQ1MgKi8KKyAgICByZXR1cm4oeWwxZG1bY10pOworfQorCitDSEFSCisjaWZkZWYgQ0tf QU5TSUMKK3hsOWRtKENIQVIgYykKKyNlbHNlCit4bDlkbShjKSBDSEFSIGM7CisjZW5kaWYgLyog Q0tfQU5TSUMgKi8KK3sgLyogeGw5ZG0gKi8JCQkJLyogTGF0aW4tOSB0byBERUMgTUNTICovCisg ICAgc3dpdGNoIChjKSB7CisgICAgICBjYXNlIDE4ODogcmV0dXJuKDIxNSk7CisgICAgICBjYXNl IDE4OTogcmV0dXJuKDI0Nyk7CisgICAgICBjYXNlIDIxNTogcmV0dXJuKDE4OCk7CisgICAgICBj YXNlIDI0NzogcmV0dXJuKDE4OSk7CisgICAgICBkZWZhdWx0OgorCXJldHVybih5bDFkbVtjXSk7 CisgICAgfQorfQorCitDSEFSCisjaWZkZWYgQ0tfQU5TSUMKK3hsOXcxKENIQVIgYykKKyNlbHNl Cit4bDl3MShjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sgLyogeGw5dzEgKi8J CQkJLyogTGF0aW4tOSB0byBDUDEyNTIgKi8KKyAgICBpZiAoYyA8IDEyOCkKKyAgICAgIHJldHVy bihjKTsKKyAgICBlbHNlIGlmIChjIDwgMTYwKQorICAgICAgcmV0dXJuKCc/Jyk7CisgICAgc3dp dGNoIChjKSB7CisgICAgICBjYXNlIDB4YTQ6IHJldHVybigweDgwKTsJCS8qIEV1cm8gKi8KKyAg ICAgIGNhc2UgMHhhNjogcmV0dXJuKDB4OGEpOwkJLyogUy1jYXJvbiAqLworICAgICAgY2FzZSAw eGE4OiByZXR1cm4oMHg5YSk7CQkvKiBzLWNhcm9uICovCisgICAgICBjYXNlIDB4YjQ6IHJldHVy bigweDhlKTsJCS8qIFotY2Fyb24gKi8KKyAgICAgIGNhc2UgMHhiODogcmV0dXJuKDB4OWUpOwkJ Lyogei1jYXJvbiAqLworICAgICAgY2FzZSAweGJjOiByZXR1cm4oMHg4Yyk7CQkvKiBPRSAqLwor ICAgICAgY2FzZSAweGJkOiByZXR1cm4oMHg5Yyk7CQkvKiBvZSAqLworICAgICAgY2FzZSAweGJl OiByZXR1cm4oMHg5Zik7CQkvKiBZLWRpYWVyZXNpcyAqLworICAgICAgZGVmYXVsdDoKKwlyZXR1 cm4oYyk7CisgICAgfQorfQorCitDSEFSCisjaWZkZWYgQ0tfQU5TSUMKK3hsMWRnKENIQVIgYykK KyNlbHNlCit4bDFkZyhjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sgLyogeGwx ZGcgKi8JCQkJLyogTGF0aW4tMSB0byBERyBJQ1MgKi8KKyAgICByZXR1cm4oeWwxZGdbY10pOwor fQorCitDSEFSCisjaWZkZWYgQ0tfQU5TSUMKK3hkbWwxKENIQVIgYykKKyNlbHNlCit4ZG1sMShj KSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sgLyogeGRtbDEgKi8JCQkJLyogREVD IE1DUyB0byBMYXRpbi0xICovCisgICAgaWYgKGxhbmdzW2xhbmd1YWdlXS5pZCA9PSBMX0ZSRU5D SCkgeyAvKiBJZiBTRVQgTEFOR1VBR0UgRlJFTkNIICovCisJaWYgKGMgPT0gMjE1KSB7CQkJLyog aGFuZGxlIE9FIGRpZ3JhcGguICovCisJICAgIHptc3R1ZmYoJ0UnKTsKKwkgICAgcmV0dXJuKCdP Jyk7CisJfSBlbHNlIGlmIChjID09IDI0NykgewkJLyogQWxzbyBsb3dlcmNhc2Ugb2UuICovCisJ ICAgIHptc3R1ZmYoJ2UnKTsKKwkgICAgcmV0dXJuKCdvJyk7CisJfQorICAgIH0KKyAgICByZXR1 cm4oeWRtbDFbY10pOworfQorCitDSEFSCisjaWZkZWYgQ0tfQU5TSUMKK3hkbWw5KENIQVIgYykK KyNlbHNlCit4ZG1sOShjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sgLyogeGRt bDkgKi8JCQkJLyogREVDIE1DUyB0byBMYXRpbi05ICovCisgICAgc3dpdGNoIChjKSB7CisgICAg ICBjYXNlIDIxNTogcmV0dXJuKDE4OCk7CQkvKiBPRSAqLworICAgICAgY2FzZSAyNDc6IHJldHVy bigxODkpOwkJLyogb2UgKi8KKyAgICAgIGNhc2UgMTg4OiByZXR1cm4oMjE1KTsJCS8qIGFuZCBz d2FwIHRoZSBvdGhlciB0d28uLi4gKi8KKyAgICAgIGNhc2UgMTg5OiByZXR1cm4oMjQ3KTsJCS8q ICgxLzQgYW5kIDEvMikgKi8KKyAgICAgIGRlZmF1bHQ6CQkJCS8qIHRvIGtlZXAgaXQgaW52ZXJ0 aWJsZSAqLworCXJldHVybih5ZG1sMVtjXSk7CisgICAgfQorfQorCitDSEFSCisjaWZkZWYgQ0tf QU5TSUMKK3hkZ2wxKENIQVIgYykKKyNlbHNlCit4ZGdsMShjKSBDSEFSIGM7CisjZW5kaWYgLyog Q0tfQU5TSUMgKi8KK3sgLyogeGRnbDEgKi8JCQkJLyogREcgSW50ZXJuYXRpb25hbCBDUyB0byBM YXRpbi0xICovCisgICAgaWYgKGxhbmdzW2xhbmd1YWdlXS5pZCA9PSBMX0ZSRU5DSCkgeyAvKiBJ ZiBTRVQgTEFOR1VBR0UgRlJFTkNIICovCisJaWYgKGMgPT0gMjE1KSB7CQkJLyogaGFuZGxlIE9F IGRpZ3JhcGguICovCisJICAgIHptc3R1ZmYoJ0UnKTsKKwkgICAgcmV0dXJuKCdPJyk7CisJfSBl bHNlIGlmIChjID09IDI0NykgewkJLyogQWxzbyBsb3dlcmNhc2Ugb2UuICovCisJICAgIHptc3R1 ZmYoJ2UnKTsKKwkgICAgcmV0dXJuKCdvJyk7CisJfQorICAgIH0KKyAgICByZXR1cm4oeWRnbDFb Y10pOworfQorCitDSEFSCisjaWZkZWYgQ0tfQU5TSUMKK3hyOGwxKENIQVIgYykKKyNlbHNlCit4 cjhsMShjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sgLyogeHI4bDEgKi8JCQkJ LyogSGV3bGV0dCBQYWNrYXJkIFJvbWFuOCB0byBMYXRpbi0xICovCisgICAgcmV0dXJuKHlyOGwx W2NdKTsKK30KKworQ0hBUgorI2lmZGVmIENLX0FOU0lDCit4bDFyOChDSEFSIGMpCisjZWxzZQor eGwxcjgoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7IC8qIHhsMXI4ICovCQkJ CS8qIExhdGluLTEgdG8gSGV3bGV0dCBQYWNrYXJkIFJvbWFuOCAqLworICAgIHJldHVybih5bDFy OFtjXSk7Cit9CisKKy8qIFRyYW5zbGF0aW9uIGZ1bmN0aW9ucyBmb3IgcmVjZWl2aW5nIGZpbGVz IGFuZCB0cmFuc2xhdGluZyB0aGVtIGludG8gQVNDSUkgKi8KKworQ0hBUgorI2lmZGVmIENLX0FO U0lDCit6bDFhcyhDSEFSIGMpCisjZWxzZQoremwxYXMoYykgQ0hBUiBjOworI2VuZGlmIC8qIENL X0FOU0lDICovCit7IC8qIHpsMWFzICovCisgICAgc3dpdGNoKGxhbmdzW2xhbmd1YWdlXS5pZCkg eworCisgICAgICBjYXNlIExfRFVUQ0g6CisJaWYgKGMgPT0gMjU1KSB7CQkJLyogRHV0Y2ggdW1s YXV0LXkgKi8KKwkgICAgemRzdHVmZignaicpOwkJLyogYmVjb21lcyBpaiAqLworCSAgICByZXR1 cm4oJ2knKTsKKwl9IGVsc2UgcmV0dXJuKHlsMWFzW2NdKTsJLyogYWxsIG90aGVycyBieSB0aGUg Ym9vayAqLworCisgICAgICBjYXNlIExfR0VSTUFOOgorCXN3aXRjaCAoYykgewkJCS8qIEdlcm1h biwgc3BlY2lhbCBydWxlcy4gKi8KKwkgIGNhc2UgMTk2OgkJCS8qIHVtbGF1dC1BIC0+IEFlICov CisJICAgIHpkc3R1ZmYoJ2UnKTsKKwkgICAgcmV0dXJuKCdBJyk7CisJICBjYXNlIDIxNDoJCQkv KiB1bWxhdXQtTyAtPiBPZSAqLworCSAgICB6ZHN0dWZmKCdlJyk7CisJICAgIHJldHVybignTycp OworCSAgY2FzZSAyMjA6CQkJLyogdW1sYXV0LVUgLT4gVWUgKi8KKwkgICAgemRzdHVmZignZScp OworCSAgICByZXR1cm4oJ1UnKTsKKwkgIGNhc2UgMjI4OgkJCS8qIHVtbGF1dC1hIC0+IGFlICov CisJICAgIHpkc3R1ZmYoJ2UnKTsKKwkgICAgcmV0dXJuKCdhJyk7CisJICBjYXNlIDI0NjoJCQkv KiB1bWxhdXQtbyAtPiBvZSAqLworCSAgICB6ZHN0dWZmKCdlJyk7CisJICAgIHJldHVybignbycp OworCSAgY2FzZSAyNTI6CQkJLyogdW1sYXV0LXUgLT4gdWUgKi8KKwkgICAgemRzdHVmZignZScp OworCSAgICByZXR1cm4oJ3UnKTsKKwkgIGNhc2UgMjIzOgkJCS8qIGVzcy16ZXQgLT4gc3MgKi8K KwkgICAgemRzdHVmZigncycpOworCSAgICByZXR1cm4oJ3MnKTsKKwkgIGRlZmF1bHQ6IHJldHVy bih5bDFhc1tjXSk7CS8qIGFsbCBvdGhlcnMgYnkgdGhlIGJvb2sgKi8KKwl9CisgICAgICBjYXNl IExfREFOSVNIOgorICAgICAgY2FzZSBMX0ZJTk5JU0g6CisgICAgICBjYXNlIExfTk9SV0VHSUFO OgorICAgICAgY2FzZSBMX1NXRURJU0g6CisJc3dpdGNoIChjKSB7CQkJLyogU2NhbmRhbmF2aWFu IGxhbmd1YWdlcy4gKi8KKwkgIGNhc2UgMTk2OgkJCS8qIHVtbGF1dC1BIC0+IEFlICovCisJICAg IHpkc3R1ZmYoJ2UnKTsKKwkgICAgcmV0dXJuKCdBJyk7CisJICBjYXNlIDIxNDoJCQkvKiB1bWxh dXQtTyAtPiBPZSAqLworCSAgY2FzZSAyMTY6CQkJLyogTy1zbGFzaCAtPiBPZSAqLworCSAgICB6 ZHN0dWZmKCdlJyk7CisJICAgIHJldHVybignTycpOworCSAgY2FzZSAyMjA6CQkJLyogdW1sYXV0 LVUgLT4gWSAqLworCSAgICAvKiByZXR1cm4oJ1knKTsgKi8KKwkgICAgemRzdHVmZignZScpOwor CSAgICByZXR1cm4oJ1UnKTsKKwkgIGNhc2UgMjI4OgkJCS8qIHVtbGF1dC1hIC0+IGFlICovCisJ ICAgIHpkc3R1ZmYoJ2UnKTsKKwkgICAgcmV0dXJuKCdhJyk7CisJICBjYXNlIDI0NjoJCQkvKiB1 bWxhdXQtbyAtPiBvZSAqLworCSAgY2FzZSAyNDg6CQkJLyogby1zbGFzaCAtPiBvZSAqLworCSAg ICB6ZHN0dWZmKCdlJyk7CisJICAgIHJldHVybignbycpOworCSAgY2FzZSAyNTI6CQkJLyogdW1s YXV0LXUgLT4geSAqLworCSAgICAvKiByZXR1cm4oJ3knKTsgKi8KKwkgICAgemRzdHVmZignZScp OworCSAgICByZXR1cm4oJ3UnKTsKKwkgIGNhc2UgMTk3OgkJCS8qIEEtcmluZyAtPiBBYSAqLwor CSAgICB6ZHN0dWZmKCdhJyk7CisJICAgIHJldHVybignQScpOworICAgICAgICAgIGNhc2UgMjI5 OgkJCS8qIGEtcmluZyAtPiBhYSAqLworCSAgICB6ZHN0dWZmKCdhJyk7CisJICAgIHJldHVybign YScpOworCSAgZGVmYXVsdDogcmV0dXJuKHlsMWFzW2NdKTsJLyogQWxsIG90aGVycyBieSB0aGUg Ym9vayAqLworCX0KKyAgICAgIGRlZmF1bHQ6CisJcmV0dXJuKHlsMWFzW2NdKTsJCS8qIE5vIGxh bmd1YWdlLCBnbyBieSB0aGUgdGFibGUuICovCisgICAgfQorfQorCitDSEFSCQkJCQkvKiBJQk0g Q1A0MzcgdG8gTGF0aW4tMSAqLworI2lmZGVmIENLX0FOU0lDCit4NDNsMShDSEFSIGMpCisjZWxz ZQoreDQzbDEoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7IC8qIHg0M2wxICov CisgICAgcmV0dXJuKHk0M2wxW2NdKTsKK30KKworQ0hBUgkJCQkJLyogSUJNIENQODUwIHRvIExh dGluLTEgKi8KKyNpZmRlZiBDS19BTlNJQworeDg1bDEoQ0hBUiBjKQorI2Vsc2UKK3g4NWwxKGMp IENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeyAvKiB4ODVsMSAqLworICAgIHJldHVy bih5ODVsMVtjXSk7Cit9CisKK0NIQVIJCQkJCS8qIExhdGluLTEgdG8gSUJNIENQNDM3ICovCisj aWZkZWYgQ0tfQU5TSUMKK3hsMTQzKENIQVIgYykKKyNlbHNlCit4bDE0MyhjKSBDSEFSIGM7Cisj ZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sgLyogeGwxNDMgKi8KKyAgICByZXR1cm4oeWwxNDNbY10p OworfQorCitDSEFSCQkJCQkvKiBMYXRpbi0xIHRvIENQODUwICovCisjaWZkZWYgQ0tfQU5TSUMK K3hsMTg1KENIQVIgYykKKyNlbHNlCit4bDE4NShjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5T SUMgKi8KK3sgLyogeGwxODUgKi8KKyAgICByZXR1cm4oeWwxODVbY10pOworfQorCitDSEFSCisj aWZkZWYgQ0tfQU5TSUMKK3g0M2FzKENIQVIgYykKKyNlbHNlCit4NDNhcyhjKSBDSEFSIGM7Cisj ZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sgLyogeDQzYXMgKi8JCQkJLyogQ1A0MzcgdG8gQVNDSUkg Ki8KKyAgICBjID0geTQzbDFbY107CQkJLyogVHJhbnNsYXRlIHRvIExhdGluLTEgKi8KKyAgICBy ZXR1cm4oeGwxNDMoYykpOwkJCS8qIGFuZCBmcm9tIExhdGluLTEgdG8gQVNDSUkuICovCit9CisK K0NIQVIKKyNpZmRlZiBDS19BTlNJQworeDg1YXMoQ0hBUiBjKQorI2Vsc2UKK3g4NWFzKGMpIENI QVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeyAvKiB4ODVhcyAqLwkJCQkvKiBDUDg1MCB0 byBBU0NJSSAqLworICAgIGMgPSB5ODVsMVtjXTsJCQkvKiBUcmFuc2xhdGUgdG8gTGF0aW4tMSAq LworICAgIHJldHVybih4bDFhcyhjKSk7CQkJLyogYW5kIGZyb20gTGF0aW4tMSB0byBBU0NJSS4g Ki8KK30KKworQ0hBUgkJCQkJLyogTWFjaW50b3NoIExhdGluIHRvIExhdGluLTEgKi8KKyNpZmRl ZiBDS19BTlNJQworeGFxbDEoQ0hBUiBjKQorI2Vsc2UKK3hhcWwxKGMpIENIQVIgYzsKKyNlbmRp ZiAvKiBDS19BTlNJQyAqLworeyAvKiB4YXFsMSAqLworICAgIGlmIChsYW5nc1tsYW5ndWFnZV0u aWQgPT0gTF9GUkVOQ0gpIHsgLyogSWYgU0VUIExBTkdVQUdFIEZSRU5DSCAqLworCWlmIChjID09 IDIwNikgewkJCS8qIGhhbmRsZSBPRSBkaWdyYXBoLiAqLworCSAgICB6bXN0dWZmKCdFJyk7CisJ ICAgIHJldHVybignTycpOworCX0gZWxzZSBpZiAoYyA9PSAyMDcpIHsJCS8qIEFsc28gbG93ZXJj YXNlIG9lLiAqLworCSAgICB6bXN0dWZmKCdlJyk7CisJICAgIHJldHVybignbycpOworCX0KKyAg ICB9CisgICAgcmV0dXJuKHlhcWwxW2NdKTsKK30KKworQ0hBUgkJCQkJLyogTWFjaW50b3NoIExh dGluIHRvIEFTQ0lJICovCisjaWZkZWYgQ0tfQU5TSUMKK3hhcWFzKENIQVIgYykKKyNlbHNlCit4 YXFhcyhjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sgLyogeGFxYXMgKi8KKyAg ICBpZiAobGFuZ3NbbGFuZ3VhZ2VdLmlkID09IExfRlJFTkNIKSB7IC8qIElmIFNFVCBMQU5HVUFH RSBGUkVOQ0ggKi8KKwlpZiAoYyA9PSAyMDYpIHsJCQkvKiBoYW5kbGUgT0UgZGlncmFwaC4gKi8K KwkgICAgem1zdHVmZignRScpOworCSAgICByZXR1cm4oJ08nKTsKKwl9IGVsc2UgaWYgKGMgPT0g MjA3KSB7CQkvKiBBbHNvIGxvd2VyY2FzZSBvZS4gKi8KKwkgICAgem1zdHVmZignZScpOworCSAg ICByZXR1cm4oJ28nKTsKKwl9CisgICAgfQorICAgIGMgPSB5YXFsMVtjXTsJCQkvKiBUcmFuc2xh dGUgdG8gTGF0aW4tMSAqLworICAgIHJldHVybih4bDFhcyhjKSk7CQkJLyogdGhlbiB0byBBU0NJ SS4gKi8KK30KKworQ0hBUgkJCQkJLyogTGF0aW4tMSB0byBNYWNpbnRvc2ggTGF0aW4gKi8KKyNp ZmRlZiBDS19BTlNJQworeGwxYXEoQ0hBUiBjKQorI2Vsc2UKK3hsMWFxKGMpIENIQVIgYzsKKyNl bmRpZiAvKiBDS19BTlNJQyAqLworeyAvKiB4bDFhcSAqLworICAgIHJldHVybih5bDFhcVtjXSk7 Cit9CisKKyNpZmRlZiBMQVRJTjIKKworLyogVHJhbnNsYXRpb24gZnVuY3Rpb25zIGZvciBMYXRp biBBbHBoYWJldCAyICovCisKK0NIQVIJCQkJCS8qIExhdGluLTIgdG8gTGF0aW4tMSAqLworI2lm ZGVmIENLX0FOU0lDCit4bDJsMShDSEFSIGMpCisjZWxzZQoreGwybDEoYykgQ0hBUiBjOworI2Vu ZGlmIC8qIENLX0FOU0lDICovCit7IC8qIHhsbDJsMSAqLworICAgIHJldHVybih5bDJsMVtjXSk7 Cit9CisKK0NIQVIKKyNpZmRlZiBDS19BTlNJQworeGwydzEoQ0hBUiBjKQorI2Vsc2UKK3hsMncx KGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeyAvKiB4bDJ3MSAqLwkJCQkvKiBM YXRpbi0yIHRvIENQMTI1MiAoV2luZG93cyBMMSkgKi8KKyAgICBpZiAoYyA+IDEyNyAmJiBjIDwg MTYwKQorICAgICAgcmV0dXJuKFVOSyk7CisgICAgZWxzZQorICAgICAgcmV0dXJuKHlsMmwxW2Nd KTsKK30KKworQ0hBUgkJCQkJLyogTGF0aW4tMSB0byBMYXRpbi0yICovCisjaWZkZWYgQ0tfQU5T SUMKK3hsMWwyKENIQVIgYykKKyNlbHNlCit4bDFsMihjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tf QU5TSUMgKi8KK3sgLyogeGxsMWwyICovCisgICAgcmV0dXJuKHlsMWwyW2NdKTsKK30KKworQ0hB UgkJCQkJLyogQ1AxMjUyIHRvIExhdGluLTEgKi8KKyNpZmRlZiBDS19BTlNJQworeHcxbDIoQ0hB UiBjKQorI2Vsc2UKK3h3MWwyKGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeyAv KiB4dzFsMiAqLworICAgIHN3aXRjaCAoYykgeworICAgICAgY2FzZSAweDhhOiByZXR1cm4oMHhh OSk7CQkvKiBTIGNhcm9uICovCisgICAgICBjYXNlIDB4OGU6IHJldHVybigweGFlKTsJCS8qIFog Y2Fyb24gKi8KKyAgICAgIGNhc2UgMHg5YTogcmV0dXJuKDB4YjkpOwkJLyogcyBjYXJvbiAqLwor ICAgICAgY2FzZSAweDllOiByZXR1cm4oMHhiZSk7CQkvKiB6IGNhcm9uICovCisgICAgICBkZWZh dWx0OgorCXJldHVybigoYyA8IDE2MCkgPyB4dzFhcyhjKSA6IHhsMWwyKGMpKTsKKyAgICB9Cit9 CisKKworQ0hBUgkJCQkJLyogTGF0aW4tMiB0byBBU0NJSSAqLworI2lmZGVmIENLX0FOU0lDCit4 bDJhcyhDSEFSIGMpCisjZWxzZQoreGwyYXMoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lD ICovCit7IC8qIHhsbDJhcyAqLworICAgIHJldHVybih5bDJhc1tjXSk7Cit9CisKK0NIQVIJCQkJ CS8qIExhdGluLTIgdG8gQ1A4NTIgKi8KKyNpZmRlZiBDS19BTlNJQworeGwyNTIoQ0hBUiBjKQor I2Vsc2UKK3hsMjUyKGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeyAvKiB4bGwy NTIgKi8KKyAgICByZXR1cm4oeWwyNTJbY10pOworfQorCitDSEFSCQkJCQkvKiBMYXRpbi0yIHRv IE1hem92aWEgKi8KKyNpZmRlZiBDS19BTlNJQworeGwybXooQ0hBUiBjKQorI2Vsc2UKK3hsMm16 KGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeyAvKiB4bGwybXogKi8KKyAgICBy ZXR1cm4oeWwybXpbY10pOworfQorCitDSEFSCQkJCQkvKiBMYXRpbi0xIHRvIE1hem92aWEgKi8K KyNpZmRlZiBDS19BTlNJQworeGwxbXooQ0hBUiBjKQorI2Vsc2UKK3hsMW16KGMpIENIQVIgYzsK KyNlbmRpZiAvKiBDS19BTlNJQyAqLworeyAvKiB4bGwxbXogKi8KKyAgICByZXR1cm4oeWwybXpb eWwxbDJbY11dKTsKK30KKworQ0hBUgkJCQkJLyogTWF6b3ZpYSB0byBMYXRpbi0xICovCisjaWZk ZWYgQ0tfQU5TSUMKK3htemwxKENIQVIgYykKKyNlbHNlCit4bXpsMShjKSBDSEFSIGM7CisjZW5k aWYgLyogQ0tfQU5TSUMgKi8KK3sgLyogeG16bDEgKi8KKyAgICByZXR1cm4oeWwybDFbeW16bDJb Y11dKTsKK30KKworQ0hBUgkJCQkJLyogTWF6b3ZpYSB0byBMYXRpbi05ICovCisjaWZkZWYgQ0tf QU5TSUMKK3htemw5KENIQVIgYykKKyNlbHNlCit4bXpsOShjKSBDSEFSIGM7CisjZW5kaWYgLyog Q0tfQU5TSUMgKi8KK3sgLyogeG16bDkgKi8KKyAgICByZXR1cm4oeGwybDkoeW16bDJbY10pKTsK K30KKworQ0hBUgkJCQkJLyogQ1A4NTIgdG8gTGF0aW4tMiAqLworI2lmZGVmIENLX0FOU0lDCit4 NTJsMihDSEFSIGMpCisjZWxzZQoreDUybDIoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lD ICovCit7IC8qIHg1MmwyICovCisgICAgcmV0dXJuKHk1MmwyW2NdKTsKK30KKworQ0hBUgkJCQkJ LyogTWF6b3ZpYSB0byBMYXRpbi0yICovCisjaWZkZWYgQ0tfQU5TSUMKK3htemwyKENIQVIgYykK KyNlbHNlCit4bXpsMihjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sgLyogeG16 bDIgKi8KKyAgICByZXR1cm4oeW16bDJbY10pOworfQorCitDSEFSCQkJCQkvKiBMYXRpbi0yIHRv IENQMTI1MCAqLworI2lmZGVmIENLX0FOU0lDCit4bDIxMjUwKENIQVIgYykKKyNlbHNlCit4bDIx MjUwKGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeyAvKiB4bGwyMTI1MCAqLwor ICAgIHJldHVybih5bDIxMjUwW2NdKTsKK30KKworQ0hBUgkJCQkJLyogQ1AxMjUwIHRvIExhdGlu LTIgKi8KKyNpZmRlZiBDS19BTlNJQworeDEyNTBsMihDSEFSIGMpCisjZWxzZQoreDEyNTBsMihj KSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sgLyogeDEyNTBsMiAqLworICAgIHJl dHVybih5MTI1MGwyW2NdKTsKK30KKworQ0hBUgkJCQkJLyogQ1A4NTIgdG8gQVNDSUkgKi8KKyNp ZmRlZiBDS19BTlNJQworeDUyYXMoQ0hBUiBjKQorI2Vsc2UKK3g1MmFzKGMpIENIQVIgYzsKKyNl bmRpZiAvKiBDS19BTlNJQyAqLworeyAvKiB4bDUyYXMgKi8KKyAgICByZXR1cm4oeWwyYXNbeTUy bDJbY11dKTsJCS8qIENQODUyIC0+IExhdGluLTIgLT4gQVNDSUkgKi8KK30KKworQ0hBUgkJCQkJ LyogQ1AxMjUwIHRvIEFTQ0lJICovCisjaWZkZWYgQ0tfQU5TSUMKK3gxMjUwYXMoQ0hBUiBjKQor I2Vsc2UKK3gxMjUwYXMoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7IC8qIHhs MTI1MGFzICovCisgICAgcmV0dXJuKHlsMmFzW3kxMjUwbDJbY11dKTsJCS8qIENQODEyNTAgLT4g TGF0aW4tMiAtPiBBU0NJSSAqLworfQorCisKK0NIQVIJCQkJCS8qIENQODUyIHRvIExhdGluLTEg Ki8KKyNpZmRlZiBDS19BTlNJQworeDUybDEoQ0hBUiBjKQorI2Vsc2UKK3g1MmwxKGMpIENIQVIg YzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeyAvKiB4bDUybDEgKi8KKyAgICByZXR1cm4oeWwy bDFbeTUybDJbY11dKTsJCS8qIENQODUyIC0+IExhdGluLTIgLT4gTGF0aW4tMSAqLworfQorCitD SEFSCQkJCQkvKiBDUDEyNTAgdG8gTGF0aW4tMSAqLworI2lmZGVmIENLX0FOU0lDCit4MTI1MGwx KENIQVIgYykKKyNlbHNlCit4MTI1MGwxKGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAq LworeyAvKiB4bDEyNTBsMSAqLworICAgIHJldHVybih5bDJsMVt5MTI1MGwyW2NdXSk7CQkvKiBD UDEyNTAgLT4gTGF0aW4tMiAtPiBMYXRpbi0xICovCit9CisKK0NIQVIJCQkJCS8qIENQMTI1MCB0 byBMYXRpbi05ICovCisjaWZkZWYgQ0tfQU5TSUMKK3gxMjUwbDkoQ0hBUiBjKQorI2Vsc2UKK3gx MjUwbDkoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7IC8qIHgxMjUwbDkgKi8K KyAgICBpZiAoYyA9PSAoQ0hBUikxMjgpCQkJLyogRXVybyAqLworICAgICAgcmV0dXJuKChDSEFS KTE2NCk7CisgICAgZWxzZQorICAgICAgcmV0dXJuKHhsMmw5KHkxMjUwbDJbY10pKTsJLyogQ1Ax MjUwIC0+IExhdGluLTIgLT4gTGF0aW4tOSAqLworfQorCitDSEFSCQkJCQkvKiBMYXRpbi0xIHRv IENQODUyICovCisjaWZkZWYgQ0tfQU5TSUMKK3hsMTUyKENIQVIgYykKKyNlbHNlCit4bDE1Mihj KSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sgLyogeGxsMTUyICovCisgICAgcmV0 dXJuKHlsMjUyW3lsMWwyW2NdXSk7CQkvKiBMYXRpbi0xIC0+IExhdGluLTIgLT4gQ1A4NTIgKi8K K30KKworQ0hBUgkJCQkJLyogTGF0aW4tMSB0byBDUDEyNTAgKi8KKyNpZmRlZiBDS19BTlNJQwor eGwxMTI1MChDSEFSIGMpCisjZWxzZQoreGwxMTI1MChjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tf QU5TSUMgKi8KK3sgLyogeGxsMTEyNTAgKi8KKyAgICByZXR1cm4oeWwyMTI1MFt5bDFsMltjXV0p OwkJLyogTGF0aW4tMSAtPiBMYXRpbi0yIC0+IENQMTI1MCAqLworfQorCitDSEFSCQkJCQkvKiBM YXRpbi05IHRvIENQMTI1MCAqLworI2lmZGVmIENLX0FOU0lDCit4bDkxMjUwKENIQVIgYykKKyNl bHNlCit4bDkxMjUwKGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeyAvKiB4bGw5 MTI1MCAqLworICAgIGlmIChjID09IChDSEFSKTE2NCkJCQkvKiBFdXJvICovCisgICAgICByZXR1 cm4oKENIQVIpMTI4KTsKKyAgICBlbHNlCisgICAgICByZXR1cm4oeWwyMTI1MFt4bDlsMihjKV0p OwkvKiBMYXRpbi05IC0+IExhdGluLTIgLT4gQ1AxMjUwICovCit9CisKK0NIQVIJCQkJCS8qIExh dGluLTkgdG8gTWF6b3ZpYSAqLworI2lmZGVmIENLX0FOU0lDCit4bDlteihDSEFSIGMpCisjZWxz ZQoreGw5bXooYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7IC8qIHhsbDlteiAq LworICAgIHJldHVybih5bDJtelt4bDlsMihjKV0pOwkJLyogTGF0aW4tOSAtPiBMYXRpbi0yIC0+ IE1hem92aWEgKi8KK30KKworQ0hBUgkJCQkJLyogTGF0aW4tOSB0byBNYXpvdmlhICovCisjaWZk ZWYgQ0tfQU5TSUMKK3htemFzKENIQVIgYykKKyNlbHNlCit4bXphcyhjKSBDSEFSIGM7CisjZW5k aWYgLyogQ0tfQU5TSUMgKi8KK3sgLyogeG16YXMgKi8KKyAgICByZXR1cm4oeWwyYXNbeG16bDIo YyldKTsJCS8qIE1hem92aWEgLT4gTGF0aW4tMiAtPiBBU0NJSSAqLworfQorCitDSEFSCQkJCQkv KiBMYXRpbi0yIHRvIE5lWFQgKi8KKyNpZmRlZiBDS19BTlNJQworeGwybmUoQ0hBUiBjKQorI2Vs c2UKK3hsMm5lKGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeyAvKiB4bGwybmUg Ki8KKyAgICBzd2l0Y2goYykgeworICAgICAgY2FzZSAxNjI6IHJldHVybigxOTgpOwkJLyogQnJl dmUgKi8KKyAgICAgIGNhc2UgMTYzOiByZXR1cm4oMjMyKTsJCS8qIEwgd2l0aCBzdHJva2UgKi8K KyAgICAgIGNhc2UgMTc4OiByZXR1cm4oMjA2KTsJCS8qIE9nb25layAqLworICAgICAgY2FzZSAx Nzk6IHJldHVybigyNDgpOwkJLyogbCB3aXRoIHN0cm9rZSAqLworICAgICAgY2FzZSAxODM6IHJl dHVybigyMDcpOwkJLyogQ2Fyb24gKi8KKyAgICAgIGNhc2UgMTg5OiByZXR1cm4oMjA1KTsJCS8q IERvdWJsZSBhY3V0ZSAqLworICAgICAgY2FzZSAyMDg6IHJldHVybigxNDQpOwkJLyogRCBzdHJv a2UgPSBFdGggKi8KKyAgICAgIGNhc2UgMjQwOiByZXR1cm4oMjMwKTsJCS8qIGQgc3Ryb2tlID0g ZXRoICovCisgICAgICBjYXNlIDI1NTogcmV0dXJuKDE5OSk7CQkvKiBEb3QgYWJvdmUgKi8KKyAg ICAgIGRlZmF1bHQ6ICByZXR1cm4oeWwxbmVbeWwybDFbY11dKTsKKyAgICB9Cit9CisKK0NIQVIJ CQkJCS8qIExhdGluLTIgdG8gQ1A0MzcgKi8KKyNpZmRlZiBDS19BTlNJQworeGwyNDMoQ0hBUiBj KQorI2Vsc2UKK3hsMjQzKGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeyAvKiB4 bGwyNDMgKi8KKyAgICByZXR1cm4oeWwxbDJbeTQzbDFbY11dKTsKK30KKworQ0hBUgkJCQkJLyog TGF0aW4tMiB0byBDUDg1MCAqLworI2lmZGVmIENLX0FOU0lDCit4bDI4NShDSEFSIGMpCisjZWxz ZQoreGwyODUoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7IC8qIHhsbDI4NSAq LworICAgIHJldHVybih5bDFsMlt5ODVsMVtjXV0pOworfQorCitDSEFSCQkJCQkvKiBMYXRpbi0y IHRvIEFwcGxlICovCisjaWZkZWYgQ0tfQU5TSUMKK3hsMmFxKENIQVIgYykKKyNlbHNlCit4bDJh cShjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sgLyogeGwyYXEgKi8KKyAgICBy ZXR1cm4oeWwxYXFbeWwybDFbY11dKTsJCS8qIENvdWxkIGRvIG1vcmUuLi4gKi8KK30KKworQ0hB UgkJCQkJLyogTGF0aW4tMiB0byBER0kgKi8KKyNpZmRlZiBDS19BTlNJQworeGwyZGcoQ0hBUiBj KQorI2Vsc2UKK3hsMmRnKGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeyAvKiB4 bGwyZGcgKi8KKyAgICByZXR1cm4oeWRnbDFbeWwxbDJbY11dKTsKK30KKworQ0hBUgkJCQkJLyog TGF0aW4tMiB0byBTaG9ydCBLT0kgKi8KKyNpZmRlZiBDS19BTlNJQworeGwyc2soQ0hBUiBjKQor I2Vsc2UKK3hsMnNrKGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeyAvKiB4bGwy c2sgKi8KKyAgICByZXR1cm4oaXNsb3dlcihjKSA/IHRvdXBwZXIoYykgOiBjKTsKK30KKworQ0hB UgkJCQkJLyogTmVYVCB0byBMYXRpbi0yICovCisjaWZkZWYgQ0tfQU5TSUMKK3huZWwyKENIQVIg YykKKyNlbHNlCit4bmVsMihjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sgLyog eG5lbDIgKi8KKyAgICBzd2l0Y2ggKGMpIHsKKyAgICAgIGNhc2UgMTQ0OiByZXR1cm4oMjA4KTsJ CS8qIEQgc3Ryb2tlID0gRXRoICovCisgICAgICBjYXNlIDE5ODogcmV0dXJuKDE2Mik7CQkvKiBC cmV2ZSAqLworICAgICAgY2FzZSAxOTk6IHJldHVybigyNTUpOwkJLyogRG90IGFib3ZlICovCisg ICAgICBjYXNlIDIwNTogcmV0dXJuKDE4OSk7CQkvKiBEb3VibGUgYWN1dGUgKi8KKyAgICAgIGNh c2UgMjA2OiByZXR1cm4oMTc4KTsJCS8qIE9nb25layAqLworICAgICAgY2FzZSAyMDc6IHJldHVy bigxODMpOwkJLyogQ2Fyb24gKi8KKyAgICAgIGNhc2UgMjMwOiByZXR1cm4oMjQwKTsJCS8qIGQg c3Ryb2tlID0gZXRoICovCisgICAgICBjYXNlIDIzMjogcmV0dXJuKDE2Myk7CQkvKiBMIHdpdGgg c3Ryb2tlICovCisgICAgICBjYXNlIDI0ODogcmV0dXJuKDE3OSk7CQkvKiBsIHdpdGggc3Ryb2tl ICovCisgICAgICBkZWZhdWx0OiAgcmV0dXJuKHlsMWwyW3luZWwxW2NdXSk7IC8qIE90aGVycywg Z28gdGhydSBMYXRpbi0xICovCisgICAgfQorfQorCitDSEFSCQkJCQkvKiBDUDQzNyB0byBMYXRp bi0yICovCisjaWZkZWYgQ0tfQU5TSUMKK3g0M2wyKENIQVIgYykKKyNlbHNlCit4NDNsMihjKSBD SEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sgLyogeGw0M2wyICovCisgICAgcmV0dXJu KHlsMWwyW3k0M2wxW2NdXSk7Cit9CisKK0NIQVIJCQkJCS8qIENQODUwIHRvIExhdGluLTIgKi8K KyNpZmRlZiBDS19BTlNJQworeDg1bDIoQ0hBUiBjKQorI2Vsc2UKK3g4NWwyKGMpIENIQVIgYzsK KyNlbmRpZiAvKiBDS19BTlNJQyAqLworeyAvKiB4bDg1bDIgKi8KKyAgICByZXR1cm4oeWwxbDJb eTg1bDFbY11dKTsKK30KKworQ0hBUgkJCQkJLyogQXBwbGUgdG8gTGF0aW4tMiAqLworI2lmZGVm IENLX0FOU0lDCit4YXFsMihDSEFSIGMpCisjZWxzZQoreGFxbDIoYykgQ0hBUiBjOworI2VuZGlm IC8qIENLX0FOU0lDICovCit7IC8qIHhsYXFsMiAqLworICAgIHN3aXRjaCAoYykgeworICAgICAg Y2FzZSAyNDk6IHJldHVybigxNjIpOwkJLyogQnJldmUgYWNjZW50ICovCisgICAgICBjYXNlIDI1 MDogcmV0dXJuKDI1NSk7CQkvKiBEb3QgYWNjZW50ICovCisgICAgICBjYXNlIDI1MzogcmV0dXJu KDE4OSk7CQkvKiBEb3VibGUgYWN1dGUgKi8KKyAgICAgIGRlZmF1bHQ6IHJldHVybih5bDFsMlt5 YXFsMVtjXV0pOworICAgIH0KK30KKworQ0hBUgkJCQkJLyogREdJIHRvIExhdGluLTIgKi8KKyNp ZmRlZiBDS19BTlNJQworeGRnbDIoQ0hBUiBjKQorI2Vsc2UKK3hkZ2wyKGMpIENIQVIgYzsKKyNl bmRpZiAvKiBDS19BTlNJQyAqLworeyAvKiB4bGRnbDIgKi8KKyAgICByZXR1cm4oeWwxbDJbeWRn bDFbY11dKTsJCS8qIChmb3Igbm93KSAqLworfQorCitDSEFSCQkJCQkvKiBTaG9ydCBLT0kgdG8g TGF0aW4tMiAqLworI2lmZGVmIENLX0FOU0lDCit4c2tsMihDSEFSIGMpCisjZWxzZQoreHNrbDIo YykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7IC8qIHhsc2tsMiAqLworICAgIHJl dHVybihpc2xvd2VyKGMpID8gdG91cHBlcihjKSA6IGMpOworfQorCitDSEFSCQkJCQkvKiBMYXRp bi0yIHRvIEdlcm1hbiAqLworI2lmZGVmIENLX0FOU0lDCit4bDJnZShDSEFSIGMpCisjZWxzZQor eGwyZ2UoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7IC8qIHhsbDJnZSAqLwor ICAgIHN3aXRjaChjKSB7CisgICAgICBjYXNlIDE2NzogcmV0dXJuKDY0KTsJCS8qIFBhcmFncmFw aCBzaWduICovCisgICAgICBjYXNlIDE5NjogcmV0dXJuKDkxKTsJCS8qIEEtZGlhZXJlc2lzICov CisgICAgICBjYXNlIDIxNDogcmV0dXJuKDkyKTsJCS8qIE8tZGlhZXJlc2lzICovCisgICAgICBj YXNlIDIyMDogcmV0dXJuKDkzKTsJCS8qIFUtZGlhZXJlc2lzICovCisgICAgICBjYXNlIDIyMzog cmV0dXJuKDEyNik7CQkvKiBkb3VibGUtcyAqLworICAgICAgY2FzZSAyMjg6IHJldHVybigxMjMp OwkJLyogYS1kaWFlcmVzaXMgKi8KKyAgICAgIGNhc2UgMjQ2OiByZXR1cm4oMTI0KTsJCS8qIG8t ZGlhZXJlc2lzICovCisgICAgICBjYXNlIDI1MjogcmV0dXJuKDEyNSk7CQkvKiB1LWRpYWVyZXNp cyAqLworICAgICAgZGVmYXVsdDogIHJldHVybih5bDJhc1tjXSk7CS8qIE90aGVycyAqLworICAg IH0KK30KKworQ0hBUgkJCQkJLyogR2VybWFuIHRvIExhdGluLTIgKi8KKyNpZmRlZiBDS19BTlNJ QworeGdlbDIoQ0hBUiBjKQorI2Vsc2UKK3hnZWwyKGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19B TlNJQyAqLworeyAvKiB4bGdlbDIgKi8KKyAgICBpZiAoYyAmIDB4ODApCisgICAgICByZXR1cm4o VU5LKTsKKyAgICBzd2l0Y2goYykgeworICAgICAgY2FzZSA2NDogIHJldHVybigxNjcpOwkJLyog UGFyYWdyYXBoIHNpZ24gKi8KKyAgICAgIGNhc2UgOTE6ICByZXR1cm4oMTk2KTsJCS8qIEEtZGlh ZXJlc2lzICovCisgICAgICBjYXNlIDkyOiAgcmV0dXJuKDIxNCk7CQkvKiBPLWRpYWVyZXNpcyAq LworICAgICAgY2FzZSA5MzogIHJldHVybigyMjApOwkJLyogVS1kaWFlcmVzaXMgKi8KKyAgICAg IGNhc2UgMTIzOiByZXR1cm4oMjI4KTsJCS8qIGEtZGlhZXJlc2lzICovCisgICAgICBjYXNlIDEy NjogcmV0dXJuKDIyMyk7CQkvKiBkb3VibGUtcyAqLworICAgICAgY2FzZSAxMjQ6IHJldHVybigy NDYpOwkJLyogby1kaWFlcmVzaXMgKi8KKyAgICAgIGNhc2UgMTI1OiByZXR1cm4oMjUyKTsJCS8q IHUtZGlhZXJlc2lzICovCisgICAgICBkZWZhdWx0OiAgcmV0dXJuKGMpOwkJLyogT3RoZXJzICov CisgICAgfQorfQorCitDSEFSCQkJCQkvKiBMYXRpbi0yIHRvIEh1bmdhcmlhbiAqLworI2lmZGVm IENLX0FOU0lDCit4bDJodShDSEFSIGMpCisjZWxzZQoreGwyaHUoYykgQ0hBUiBjOworI2VuZGlm IC8qIENLX0FOU0lDICovCit7IC8qIHhsbDJodSAqLworICAgIHN3aXRjaChjKSB7CisgICAgICBj YXNlIDE2NDogcmV0dXJuKDM2KTsJCS8qIEN1cnJlbmN5IHN5bWJvbCAqLworICAgICAgY2FzZSAx ODk6IHJldHVybigxMjYpOwkJLyogRG91YmxlIGFjdXRlIGFjY2VudCAqLworICAgICAgY2FzZSAx OTM6IHJldHVybig2NCk7CQkvKiBBLWFjdXRlICovCisgICAgICBjYXNlIDIwMTogcmV0dXJuKDkx KTsJCS8qIEUtYWN1dGUgKi8KKyAgICAgIGNhc2UgMjE0OiByZXR1cm4oOTIpOwkJLyogTy1kaWFl cmVzaXMgKi8KKyAgICAgIGNhc2UgMjIwOiByZXR1cm4oOTMpOwkJLyogVS1kaWFlcmVzaXMgKi8K KyAgICAgIGNhc2UgMjI1OiByZXR1cm4oOTYpOwkJLyogYS1hY3V0ZSAqLworICAgICAgY2FzZSAy MzM6IHJldHVybigxMjMpOwkJLyogZS1hY3V0ZSAqLworICAgICAgY2FzZSAyNDY6IHJldHVybigx MjQpOwkJLyogby1kaWFlcmVzaXMgKi8KKyAgICAgIGNhc2UgMjUyOiByZXR1cm4oMTI1KTsJCS8q IHUtZGlhZXJlc2lzICovCisgICAgICBkZWZhdWx0OiAgcmV0dXJuKHlsMmFzW2NdKTsJLyogT3Ro ZXJzICovCisgICAgfQorfQorCitDSEFSCQkJCQkvKiBIdW5nYXJpYW4gdG8gTGF0aW4tMiAqLwor I2lmZGVmIENLX0FOU0lDCit4aHVsMihDSEFSIGMpCisjZWxzZQoreGh1bDIoYykgQ0hBUiBjOwor I2VuZGlmIC8qIENLX0FOU0lDICovCit7IC8qIHhsaHVsMiAqLworICAgIGlmIChjICYgMHg4MCkK KyAgICAgIHJldHVybihVTkspOworICAgIHN3aXRjaChjKSB7CisgICAgICBjYXNlIDM2OiAgcmV0 dXJuKDE2NCk7CQkvKiBDdXJyZW5jeSBzeW1ib2wgKi8KKyAgICAgIGNhc2UgNjQ6ICByZXR1cm4o MTkzKTsJCS8qIEEtYWN1dGUgKi8KKyAgICAgIGNhc2UgOTE6ICByZXR1cm4oMjAxKTsJCS8qIEUt YWN1dGUgKi8KKyAgICAgIGNhc2UgOTI6ICByZXR1cm4oMjE0KTsJCS8qIE8tZGlhZXJlc2lzICov CisgICAgICBjYXNlIDkzOiAgcmV0dXJuKDIyMCk7CQkvKiBVLWRpYWVyZXNpcyAqLworICAgICAg Y2FzZSA5NjogIHJldHVybigyMjUpOwkJLyogYS1hY3V0ZSAqLworICAgICAgY2FzZSAxMjM6IHJl dHVybigyMzMpOwkJLyogZS1hY3V0ZSAqLworICAgICAgY2FzZSAxMjQ6IHJldHVybigyNDYpOwkJ Lyogby1kaWFlcmVzaXMgKi8KKyAgICAgIGNhc2UgMTI1OiByZXR1cm4oMjUyKTsJCS8qIHUtZGlh ZXJlc2lzICovCisgICAgICBjYXNlIDEyNjogcmV0dXJuKDE4OSk7CQkvKiBEb3VibGUgYWN1dGUg YWNjZW50ICovCisgICAgICBkZWZhdWx0OiAgcmV0dXJuKGMpOwkJLyogT3RoZXJzICovCisgICAg fQorfQorCitDSEFSCisjaWZkZWYgQ0tfQU5TSUMKK3hyOGwyKENIQVIgYykKKyNlbHNlCit4cjhs MihjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sgLyogeHI4bDIgKi8gLyogSGV3 bGV0dCBQYWNrYXJkIFJvbWFuOCB0byBMYXRpbi0yICovCisgICAgc3dpdGNoIChjKSB7CisgICAg ICBjYXNlIDIzNTogcmV0dXJuKDE2OSk7CQkvKiBTIGNhcm9uICovCisgICAgICBjYXNlIDIzNjog cmV0dXJuKDE4NSk7CQkvKiBzIGNhcm9uICovCisgICAgICBkZWZhdWx0OiAgcmV0dXJuKHlsMWwy W3lyOGwxW2NdXSk7CisgICAgfQorfQorCitDSEFSCisjaWZkZWYgQ0tfQU5TSUMKK3hsMnI4KENI QVIgYykKKyNlbHNlCit4bDJyOChjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sg LyogeGwycjggKi8gLyogTGF0aW4tMiB0byBIZXdsZXR0IFBhY2thcmQgUm9tYW44IENoYXJhY3Rl ciBTZXQgKi8KKyAgICBzd2l0Y2ggKGMpIHsKKyAgICAgIGNhc2UgMTY5OiByZXR1cm4oMjM1KTsJ CS8qIFMgY2Fyb24gKi8KKyAgICAgIGNhc2UgMTg1OiByZXR1cm4oMjM2KTsJCS8qIHMgY2Fyb24g Ki8KKyAgICAgIGRlZmF1bHQ6ICByZXR1cm4oeXI4bDFbeWwxbDJbY11dKTsKKyAgICB9Cit9CisK KyNlbHNlIC8qIE5PTEFUSU4yICovCisKKyNkZWZpbmUgeGwxbXogTlVMTAorI2RlZmluZSB4bXps MSBOVUxMCisjZGVmaW5lIHhsMm16IE5VTEwKKyNkZWZpbmUgeG16bDIgTlVMTAorI2RlZmluZSB4 bDlteiBOVUxMCisjZGVmaW5lIHhtemw5IE5VTEwKKyNkZWZpbmUgeG16YXMgTlVMTAorCisjZGVm aW5lIHhsMTEyNTAgTlVMTAorI2RlZmluZSB4bDIxMjUwIE5VTEwKKyNkZWZpbmUgeGw5MTI1MCBO VUxMCisKKyNkZWZpbmUgeDEyNTBhcyBOVUxMCisjZGVmaW5lIHgxMjUwbDEgTlVMTAorI2RlZmlu ZSB4MTI1MGwyIE5VTEwKKyNkZWZpbmUgeDEyNTBsOSBOVUxMCisKKyNkZWZpbmUgeGwybDEgTlVM TAorI2RlZmluZSB4bDJ3MSBOVUxMCisjZGVmaW5lIHhsMWwyIE5VTEwKKyNkZWZpbmUgeHcxbDIg TlVMTAorI2RlZmluZSB4bDJhcyBOVUxMCisjZGVmaW5lIHhsMjUyIE5VTEwKKyNkZWZpbmUgeDUy bDIgTlVMTAorI2RlZmluZSB4NTJhcyBOVUxMCisjZGVmaW5lIHg1MmwxIE5VTEwKKyNkZWZpbmUg eGwxNTIgTlVMTAorI2RlZmluZSB4bDJuZSBOVUxMCisjZGVmaW5lIHhsMjQzIE5VTEwKKyNkZWZp bmUgeGwyODUgTlVMTAorI2RlZmluZSB4bDJhcSBOVUxMCisjZGVmaW5lIHhsMmRnIE5VTEwKKyNk ZWZpbmUgeGwyc2sgTlVMTAorI2RlZmluZSB4bmVsMiBOVUxMCisjZGVmaW5lIHg0M2wyIE5VTEwK KyNkZWZpbmUgeDg1bDIgTlVMTAorI2RlZmluZSB4YXFsMiBOVUxMCisjZGVmaW5lIHhkZ2wyIE5V TEwKKyNkZWZpbmUgeHNrbDIgTlVMTAorI2RlZmluZSB4bDJnZSBOVUxMCisjZGVmaW5lIHhnZWwy IE5VTEwKKyNkZWZpbmUgeGwyaHUgTlVMTAorI2RlZmluZSB4aHVsMiBOVUxMCisjZGVmaW5lIHhs MnI4IE5VTEwKKyNkZWZpbmUgeHI4bDIgTlVMTAorI2VuZGlmIC8qIExBVElOMiAqLworCisvKiBU aGlzIG9uZSBjYW4gYWxzbyBiZSB1c2VkIGZvciBFTE9UIDkyNywgSGVicmV3IDcsIGV0YyAqLwor CitDSEFSCisjaWZkZWYgQ0tfQU5TSUMKK3hhc3NrKENIQVIgYykKKyNlbHNlCit4YXNzayhjKSBD SEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sgLyogeGFzc2sgKi8JCQkJLyogQVNDSUkg dG8gU2hvcnQgS09JICovCisgICAgaWYgKGMgJiAweDgwKQorICAgICAgcmV0dXJuKFVOSyk7Cisg ICAgcmV0dXJuKChjID4gOTUpID8gKGMgLSAzMikgOiBjKTsJLyogRm9sZCBjb2x1bW5zIDYtNyB0 byA0LTUgKi8KK30KKworI2lmZGVmIENZUklMTElDCisvKiBUcmFuc2xhdGlvbiBmdW5jdGlvbnMg Zm9yIEN5cmlsbGljIGNoYXJhY3RlciBzZXRzICovCisKK0NIQVIJCQkJCS8qIExhdGluL0N5cmls bGljIHRvIENQODY2ICovCisjaWZkZWYgQ0tfQU5TSUMKK3hsY2FjKENIQVIgYykKKyNlbHNlCit4 bGNhYyhjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sgLyogeGxjYWMgKi8JCQkJ LyogUEMgQ29kZSBQYWdlIDg2NiAqLworICAgIHJldHVybih5bGNhY1tjXSk7Cit9CisKK0NIQVIJ CQkJCS8qIExhdGluL0N5cmlsbGljIHRvICovCisjaWZkZWYgQ0tfQU5TSUMKK3hsYzU1KENIQVIg YykKKyNlbHNlCit4bGM1NShjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sgLyog eGxjNTUgKi8JCQkJLyogUEMgQ29kZSBQYWdlIDg1NSAqLworICAgIHJldHVybih5bGM1NVtjXSk7 Cit9CisKK0NIQVIJCQkJCS8qIExhdGluL0N5cmlsbGljIHRvICovCisjaWZkZWYgQ0tfQU5TSUMK K3hsYzEyNTEoQ0hBUiBjKQorI2Vsc2UKK3hsYzEyNTEoYykgQ0hBUiBjOworI2VuZGlmIC8qIENL X0FOU0lDICovCit7IC8qIHhsYzEyNTEgKi8JCQkJLyogUEMgQ29kZSBQYWdlIDEyNTEgKi8KKyAg ICByZXR1cm4oeWxjMTI1MVtjXSk7Cit9CisKK0NIQVIJCQkJCS8qIExhdGluL0N5cmlsbGljIHRv Li4uICovCisjaWZkZWYgQ0tfQU5TSUMKK3hsY2J1KENIQVIgYykKKyNlbHNlCit4bGNidShjKSBD SEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sgLyogeGxjYnUgKi8JCQkJLyogQnVsZ2Fy aWFuIFBDIENvZGUgUGFnZSAqLworICAgIHJldHVybih5bGNidVtjXSk7Cit9CisKK0NIQVIJCQkJ CS8qIExhdGluL0N5cmlsbGljIHRvIE9sZCBLT0ktOCAqLworI2lmZGVmIENLX0FOU0lDCit4bGNr OChDSEFSIGMpCisjZWxzZQoreGxjazgoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICov Cit7IC8qIHhsY2s4ICovCisgICAgcmV0dXJuKHlsY2s4W2NdKTsKK30KKworQ0hBUgkJCQkJLyog TGF0aW4vQ3lyaWxsaWMgdG8gS09JOC1SICovCisjaWZkZWYgQ0tfQU5TSUMKK3hsY2tyKENIQVIg YykKKyNlbHNlCit4bGNrcihjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sgLyog eGxja3IgKi8KKyAgICBzd2l0Y2goYykgeworICAgICAgY2FzZSAweGExOiByZXR1cm4oMHhiMyk7 CQkvKiBJbyAqLworICAgICAgY2FzZSAweGYxOiByZXR1cm4oMHhhMyk7CQkvKiBpbyAqLworICAg ICAgZGVmYXVsdDoKKwlpZiAoYyA+IDB4N2YgJiYgYyA8IDB4YzApCisJICByZXR1cm4oVU5LKTsK KwlyZXR1cm4oeWxjazhbY10pOworICAgIH0KK30KKworQ0hBUgkJCQkJLyogTGF0aW4vQ3lyaWxs aWMgdG8gIEtPSTgtVSAqLworI2lmZGVmIENLX0FOU0lDCit4bGNrdShDSEFSIGMpCisjZWxzZQor eGxja3UoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7IC8qIHhsY2t1ICovCisg ICAgc3dpdGNoKGMpIHsKKyAgICAgIGNhc2UgMHhhMTogcmV0dXJuKDB4YjMpOwkJLyogSW8gKi8K KyAgICAgIGNhc2UgMHhmMTogcmV0dXJuKDB4YTMpOwkJLyogaW8gKi8KKyAgICAgIGNhc2UgMHhm NDogcmV0dXJuKDB4YTQpOwkJLyogVWtyYWluaWFuIGllICovCisgICAgICBjYXNlIDB4ZjY6IHJl dHVybigweGE2KTsJCS8qIFVrcmFpbmlhbiBpICovCisgICAgICBjYXNlIDB4Zjc6IHJldHVybigw eGE3KTsJCS8qIFVrcmFpbmlhbiB5aSAqLworICAgICAgY2FzZSAweGYzOiByZXR1cm4oMHhhZCk7 CQkvKiBVa3JhaW5pYW4gZ2hlIHdpdGggdXB0dXJuICovCisgICAgICBjYXNlIDB4YTQ6IHJldHVy bigweGI0KTsJCS8qIFVrcmFpbmlhbiBJZSAqLworICAgICAgY2FzZSAweGE2OiByZXR1cm4oMHhi Nik7CQkvKiBVa3JhaW5pYW4gSSAqLworICAgICAgY2FzZSAweGE3OiByZXR1cm4oMHhiNyk7CQkv KiBVa3JhaW5pYW4gWWkgKi8KKyAgICAgIGNhc2UgMHhhMzogcmV0dXJuKDB4YmQpOwkJLyogVWty YWluaWFuIEdoZSB3aXRoIHVwdHVybiAqLworICAgICAgZGVmYXVsdDoKKwlpZiAoYyA+IDB4N2Yg JiYgYyA8IDB4YzApCisJICByZXR1cm4oVU5LKTsKKwlyZXR1cm4oeWxjazhbY10pOworICAgIH0K K30KKworQ0hBUgorI2lmZGVmIENLX0FOU0lDCit4bGNzayhDSEFSIGMpCisjZWxzZQoreGxjc2so YykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7IC8qIHhsY3NrICovCQkJCS8qIExh dGluL0N5cmlsbGljIHRvIFNob3J0IEtPSSAqLworICAgIHJldHVybih5bGNza1tjXSk7Cit9CisK K0NIQVIKKyNpZmRlZiBDS19BTlNJQworeGxjYXMoQ0hBUiBjKQorI2Vsc2UKK3hsY2FzKGMpIENI QVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeyAvKiB4bGNhcyAqLwkJCQkvKiBMYXRpbi9D eXJpbGxpYyB0byBBU0NJSSAqLworICAgIGlmIChsYW5nc1tsYW5ndWFnZV0uaWQgPT0gTF9SVVNT SUFOKQorICAgICAgcmV0dXJuKHlsY3NrW2NdKTsKKyAgICBlbHNlCisgICAgICByZXR1cm4oKGMg PiAxMjcpID8gJz8nIDogYyk7Cit9CisKK0NIQVIJCQkJCS8qIENQODY2ICovCisjaWZkZWYgQ0tf QU5TSUMKK3hhY2xjKENIQVIgYykKKyNlbHNlCit4YWNsYyhjKSBDSEFSIGM7CisjZW5kaWYgLyog Q0tfQU5TSUMgKi8KK3sgLyogeGFjbGMgKi8JCQkJLyogdG8gTGF0aW4vQ3lyaWxsaWMgKi8KKyAg ICByZXR1cm4oeWFjbGNbY10pOworfQorCitDSEFSCQkJCQkvKiBDUDg1NSAqLworI2lmZGVmIENL X0FOU0lDCit4NTVsYyhDSEFSIGMpCisjZWxzZQoreDU1bGMoYykgQ0hBUiBjOworI2VuZGlmIC8q IENLX0FOU0lDICovCit7IC8qIHg1NWxjICovCQkJCS8qIHRvIExhdGluL0N5cmlsbGljICovCisg ICAgcmV0dXJuKHk1NWxjW2NdKTsKK30KKworQ0hBUgkJCQkJLyogQnVsZ2FyaWFuIFBDIENvZGUg UGFnZSAuLi4gKi8KKyNpZmRlZiBDS19BTlNJQworeGJ1bGMoQ0hBUiBjKQorI2Vsc2UKK3hidWxj KGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeyAvKiB4YnVsYyAqLwkJCQkvKiB0 byBMYXRpbi9DeXJpbGxpYyAqLworICAgIHJldHVybih5YnVsY1tjXSk7Cit9CisKK0NIQVIJCQkJ CS8qIENQMTI1MSAqLworI2lmZGVmIENLX0FOU0lDCit4MTI1MWxjKENIQVIgYykKKyNlbHNlCit4 MTI1MWxjKGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeyAvKiB4MTI1MWxjICov CQkJCS8qIHRvIExhdGluL0N5cmlsbGljICovCisgICAgcmV0dXJuKHkxMjUxbGNbY10pOworfQor CitDSEFSCQkJCQkvKiBPbGQgS09JLTggdG8gTGF0aW4vQ3lyaWxsaWMgKi8KKyNpZmRlZiBDS19B TlNJQworeGs4bGMoQ0hBUiBjKQorI2Vsc2UKK3hrOGxjKGMpIENIQVIgYzsKKyNlbmRpZiAvKiBD S19BTlNJQyAqLworeyAvKiB4azhsYyAqLworICAgIHJldHVybih5azhsY1tjXSk7Cit9CisKK0NI QVIJCQkJCS8qIEtPSTgtUiB0byBMYXRpbi9DeXJpbGxpYyAqLworI2lmZGVmIENLX0FOU0lDCit4 a3JsYyhDSEFSIGMpCisjZWxzZQoreGtybGMoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lD ICovCit7IC8qIHhrcmxjICovCisgICAgaWYgKGMgPT0gMHhiMykgcmV0dXJuKDB4YTEpOworICAg IGVsc2UgaWYgKGMgPT0gMHhhMykgcmV0dXJuKDB4ZjEpOworICAgIGVsc2UgaWYgKGMgPiAweDdm ICYmIGMgPCAweGMwKQorICAgICAgcmV0dXJuKFVOSyk7CisgICAgcmV0dXJuKHlrOGxjW2NdKTsK K30KKworQ0hBUgkJCQkJLyogS09JOC1VIHRvIExhdGluL0N5cmlsbGljICovCisjaWZkZWYgQ0tf QU5TSUMKK3hrdWxjKENIQVIgYykKKyNlbHNlCit4a3VsYyhjKSBDSEFSIGM7CisjZW5kaWYgLyog Q0tfQU5TSUMgKi8KK3sgLyogeGt1bGMgKi8KKyAgICBzd2l0Y2ggKGMpIHsKKyAgICAgIGNhc2Ug MHhiMzogcmV0dXJuKDB4YTEpOwkJLyogSW8gKi8KKyAgICAgIGNhc2UgMHhhMzogcmV0dXJuKDB4 ZjEpOwkJLyogaW8gKi8KKyAgICAgIGNhc2UgMHhhNDogcmV0dXJuKDB4ZjQpOwkJLyogVWtyYWlu aWFuIGllICovCisgICAgICBjYXNlIDB4YTY6IHJldHVybigweGY2KTsJCS8qIFVrcmFpbmlhbiBp ICovCisgICAgICBjYXNlIDB4YTc6IHJldHVybigweGY3KTsJCS8qIFVrcmFpbmlhbiB5aSAqLwor ICAgICAgY2FzZSAweGFkOiByZXR1cm4oMHhmMyk7CQkvKiBVa3JhaW5pYW4gZ2hlIHdpdGggdXB0 dXJuICovCisgICAgICBjYXNlIDB4YjQ6IHJldHVybigweGE0KTsJCS8qIFVrcmFpbmlhbiBJZSAq LworICAgICAgY2FzZSAweGI2OiByZXR1cm4oMHhhNik7CQkvKiBVa3JhaW5pYW4gSSAqLworICAg ICAgY2FzZSAweGI3OiByZXR1cm4oMHhhNyk7CQkvKiBVa3JhaW5pYW4gWWkgKi8KKyAgICAgIGNh c2UgMHhiZDogcmV0dXJuKDB4YTMpOwkJLyogVWtyYWluaWFuIEdoZSB3aXRoIHVwdHVybiAqLwor ICAgICAgLyogTm90ZSBzdWJzdGl0dXRpb24gb2YgR2plIGZvciBHaGUtVXB0dXJuLCB3aGljaCBp cyBub3QgaW4gODg1OS01ICovCisgICAgICBkZWZhdWx0OgorCWlmIChjID4gMHg3ZiAmJiBjIDwg MHhjMCkKKwkgIHJldHVybihVTkspOworCXJldHVybih5azhsY1tjXSk7CisgICAgfQorfQorCitD SEFSCisjaWZkZWYgQ0tfQU5TSUMKK3hza2N5KENIQVIgYykKKyNlbHNlCit4c2tjeShjKSBDSEFS IGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sgLyogeHNrY3kgKi8JCQkvKiBTaG9ydCBLT0kg dG8gTGF0aW4vQ3lyaWxsaWMgKi8KKyAgICByZXR1cm4oeXNrY3lbYyAmIDB4N2ZdKTsKK30KKwor Q0hBUgorI2lmZGVmIENLX0FOU0lDCit4YXNjeShDSEFSIGMpCisjZWxzZQoreGFzY3koYykgQ0hB UiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7IC8qIHhhc2N5ICovCQkJLyogQVNDSUkgdG8g TGF0aW4vQ3lyaWxsaWMgKi8KKyAgICBpZiAobGFuZ3NbbGFuZ3VhZ2VdLmlkID09IExfUlVTU0lB TikgeyAvKiBJZiBMQU5HVUFHRSA9PSBSVVNTSUFOICAqLworCXJldHVybih5c2tjeVtjICYgMHg3 Zl0pOwkvKiB0cmVhdCBBU0NJSSBhcyBTaG9ydCBLT0kgKi8KKyAgICB9IGVsc2UgcmV0dXJuKChj ID4gMTI3KSA/ICc/JyA6IGMpOworfQorCitDSEFSCisjaWZkZWYgQ0tfQU5TSUMKK3hhY2FzKENI QVIgYykKKyNlbHNlCit4YWNhcyhjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sg LyogeGFjYXMgKi8JCQkvKiBDUDg2NiB0byBBU0NJSSAqLworICAgIGlmIChsYW5nc1tsYW5ndWFn ZV0uaWQgPT0gTF9SVVNTSUFOKSB7CisJYyA9IHlhY2xjW2NdOwkJCS8qIEZpcnN0IHRvIExhdGlu L0N5cmlsbGljICovCisJcmV0dXJuKHlsY3NrW2NdKTsJCS8qIFRoZW4gdG8gU2hvcnQgS09JICov CisgICAgfSBlbHNlIHJldHVybigoYyA+IDEyNykgPyAnPycgOiBjKTsKK30KKworQ0hBUgorI2lm ZGVmIENLX0FOU0lDCit4NTVhcyhDSEFSIGMpCisjZWxzZQoreDU1YXMoYykgQ0hBUiBjOworI2Vu ZGlmIC8qIENLX0FOU0lDICovCit7IC8qIHg1NWFzICovCQkJLyogQ1A4NTUgdG8gQVNDSUkgKi8K KyAgICBpZiAobGFuZ3NbbGFuZ3VhZ2VdLmlkID09IExfUlVTU0lBTikgeworCWMgPSB5NTVsY1tj XTsJCQkvKiBGaXJzdCB0byBMYXRpbi9DeXJpbGxpYyAqLworCXJldHVybih5bGNza1tjXSk7CQkv KiBUaGVuIHRvIFNob3J0IEtPSSAqLworICAgIH0gZWxzZSByZXR1cm4oKGMgPiAxMjcpID8gJz8n IDogYyk7Cit9CisKK0NIQVIKKyNpZmRlZiBDS19BTlNJQworeDEyNTFhcyhDSEFSIGMpCisjZWxz ZQoreDEyNTFhcyhjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sgLyogeDEyNTFh cyAqLwkJCS8qIENQODEyNTEgdG8gQVNDSUkgKi8KKyAgICBpZiAobGFuZ3NbbGFuZ3VhZ2VdLmlk ID09IExfUlVTU0lBTikgeworCWMgPSB5MTI1MWxjW2NdOwkJCS8qIEZpcnN0IHRvIExhdGluL0N5 cmlsbGljICovCisJcmV0dXJuKHlsY3NrW2NdKTsJCS8qIFRoZW4gdG8gU2hvcnQgS09JICovCisg ICAgfSBlbHNlIHJldHVybigoYyA+IDEyNykgPyAnPycgOiBjKTsKK30KKworQ0hBUgorI2lmZGVm IENLX0FOU0lDCit4c2thcyhDSEFSIGMpCisjZWxzZQoreHNrYXMoYykgQ0hBUiBjOworI2VuZGlm IC8qIENLX0FOU0lDICovCit7IC8qIHhza2FzICovCQkJCS8qIFNob3J0IEtPSSB0byBBU0NJSSAq LworICAgIHJldHVybigoYyA+IDk1KSA/ICc/JyA6IGMpOworfQorCitDSEFSCisjaWZkZWYgQ0tf QU5TSUMKK3hrOGFzKENIQVIgYykKKyNlbHNlCit4azhhcyhjKSBDSEFSIGM7CisjZW5kaWYgLyog Q0tfQU5TSUMgKi8KK3sgLyogeGs4YXMgKi8JCQkJLyogT2xkIEtPSS04IEN5cmlsbGljIHRvIEFT Q0lJICovCisgICAgaWYgKGxhbmdzW2xhbmd1YWdlXS5pZCA9PSBMX1JVU1NJQU4pIHsKKwljID0g eWs4bGNbY107CQkJLyogRmlyc3QgdG8gTGF0aW4vQ3lyaWxsaWMgKi8KKwlyZXR1cm4oeWxjc2tb Y10pOwkJLyogVGhlbiB0byBTaG9ydCBLT0kgKi8KKyAgICB9IGVsc2UgcmV0dXJuKChjID4gMTI3 KSA/ICc/JyA6IGMpOworfQorCitDSEFSCisjaWZkZWYgQ0tfQU5TSUMKK3hsMXNrKENIQVIgYykK KyNlbHNlCit4bDFzayhjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sgLyogeGwx c2sgKi8JCQkJLyogTGF0aW4tMSB0byBTaG9ydCBLT0kgKi8KKyAgICBjID0gemwxYXMoYyk7CQkJ LyogQ29udmVydCB0byBBU0NJSSAqLworICAgIHJldHVybihjID0geGFzc2soYykpOwkJLyogQ29u dmVydCBBU0NJSSB0byBTaG9ydCBLT0kgKi8KK30KKworQ0hBUgorI2lmZGVmIENLX0FOU0lDCit4 dzFsYyhDSEFSIGMpCisjZWxzZQoreHcxbGMoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lD ICovCit7IC8qIHh3MWxjICovCQkJCS8qIENQMTI1MiB0byBMYXRpbi9DeXJpbGxpYyAqLworICAg IHJldHVybigoYyA8IDE2MCkgPyB4dzFhcyhjKSA6IHpsMWFzKGMpKTsKK30KKworQ0hBUgorI2lm ZGVmIENLX0FOU0lDCit4YXNsYyhDSEFSIGMpCisjZWxzZQoreGFzbGMoYykgQ0hBUiBjOworI2Vu ZGlmIC8qIENLX0FOU0lDICovCit7IC8qIHhhc2xjICovCQkJLyogQVNDSUkgdG8gTGF0aW4vQ3ly aWxsaWMgKi8KKyAgICBpZiAobGFuZ3NbbGFuZ3VhZ2VdLmlkID09IExfUlVTU0lBTikKKyAgICAg IHJldHVybih5c2tjeVtjICYgMHg3Zl0pOworICAgIGVsc2UgcmV0dXJuKGMgJiAweDdmKTsKK30K KworQ0hBUgorI2lmZGVmIENLX0FOU0lDCit4YXNhYyhDSEFSIGMpCisjZWxzZQoreGFzYWMoYykg Q0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7IC8qIHhhc2FjICovCQkJLyogQVNDSUkg dG8gQ1A4NjYgKi8KKyAgICBpZiAoYyAmIDB4ODApCisgICAgICByZXR1cm4oVU5LKTsKKyAgICBp ZiAobGFuZ3NbbGFuZ3VhZ2VdLmlkID09IExfUlVTU0lBTikgeyAvKiBVc2UgU2hvcnQgS09JICov CisJYyA9IHhza2N5KGMpOwkJCS8qIFRyYW5zbGF0ZSB0byBMYXRpbi9DeXJpbGxpYyAqLworCXJl dHVybih5bGNhY1tjXSk7CQkvKiBUaGVuIHRvIENQODY2ICovCisgICAgfSBlbHNlIHJldHVybihj ICYgMHg3Zik7Cit9CisKK0NIQVIKKyNpZmRlZiBDS19BTlNJQworeGFzNTUoQ0hBUiBjKQorI2Vs c2UKK3hhczU1KGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeyAvKiB4YXM1NSAq LwkJCS8qIEFTQ0lJIHRvIENQODU1ICovCisgICAgaWYgKGMgJiAweDgwKQorICAgICAgcmV0dXJu KFVOSyk7CisgICAgaWYgKGxhbmdzW2xhbmd1YWdlXS5pZCA9PSBMX1JVU1NJQU4pIHsgLyogVXNl IFNob3J0IEtPSSAqLworCWMgPSB4c2tjeShjKTsJCQkvKiBUcmFuc2xhdGUgdG8gTGF0aW4vQ3ly aWxsaWMgKi8KKwlyZXR1cm4oeWxjNTVbY10pOwkJLyogVGhlbiB0byBDUDg2NiAqLworICAgIH0g ZWxzZSByZXR1cm4oYyAmIDB4N2YpOworfQorCitDSEFSCisjaWZkZWYgQ0tfQU5TSUMKK3hhczEy NTEoQ0hBUiBjKQorI2Vsc2UKK3hhczEyNTEoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lD ICovCit7IC8qIHhhczEyNTEgKi8JCQkvKiBBU0NJSSB0byBDUDgxMjUxICovCisgICAgaWYgKGMg JiAweDgwKQorICAgICAgcmV0dXJuKFVOSyk7CisgICAgaWYgKGxhbmdzW2xhbmd1YWdlXS5pZCA9 PSBMX1JVU1NJQU4pIHsgLyogVXNlIFNob3J0IEtPSSAqLworCWMgPSB4c2tjeShjKTsJCQkvKiBU cmFuc2xhdGUgdG8gTGF0aW4vQ3lyaWxsaWMgKi8KKwlyZXR1cm4oeWxjMTI1MVtjXSk7CQkvKiBU aGVuIHRvIENQODY2ICovCisgICAgfSBlbHNlIHJldHVybihjICYgMHg3Zik7Cit9CisKK0NIQVIK KyNpZmRlZiBDS19BTlNJQworeGFzazgoQ0hBUiBjKQorI2Vsc2UKK3hhc2s4KGMpIENIQVIgYzsK KyNlbmRpZiAvKiBDS19BTlNJQyAqLworeyAvKiB4YXNrOCAqLwkJCS8qIEFTQ0lJIHRvIEtPSS04 ICovCisgICAgaWYgKGMgJiAweDgwKQorICAgICAgcmV0dXJuKFVOSyk7CisgICAgaWYgKGxhbmdz W2xhbmd1YWdlXS5pZCA9PSBMX1JVU1NJQU4pIHsgLyogVXNlIFNob3J0IEtPSSAqLworCWMgPSB4 c2tjeShjKTsJCQkvKiBUcmFuc2xhdGUgdG8gTGF0aW4vQ3lyaWxsaWMgKi8KKwlyZXR1cm4oeWxj azhbY10pOwkJLyogVGhlbiB0byBLT0ktOCAqLworICAgIH0gZWxzZSByZXR1cm4oYyAmIDB4N2Yp OworfQorI2Vsc2UgLyogTm8gQ3lyaWxsaWMgKi8KKyNkZWZpbmUgeGFjYXMgTlVMTAorI2RlZmlu ZSB4NTVhcyBOVUxMCisjZGVmaW5lIHgxMjUxYXMgTlVMTAorI2RlZmluZSB4YWNsYyBOVUxMCisj ZGVmaW5lIHg1NWxjIE5VTEwKKyNkZWZpbmUgeDEyNTFsYyBOVUxMCisjZGVmaW5lIHhhc2FjIE5V TEwKKyNkZWZpbmUgeGFzNTUgTlVMTAorI2RlZmluZSB4YXMxMjUxIE5VTEwKKyNkZWZpbmUgeGFz Y3kgTlVMTAorI2RlZmluZSB4YXNrOCBOVUxMCisjZGVmaW5lIHhhc2xjIE5VTEwKKyNkZWZpbmUg eGFzc2sgTlVMTAorI2RlZmluZSB4azhhcyBOVUxMCisjZGVmaW5lIHhrOGxjIE5VTEwKKyNkZWZp bmUgeGtybGMgTlVMTAorI2RlZmluZSB4a3VsYyBOVUxMCisjZGVmaW5lIHhsMXNrIE5VTEwKKyNk ZWZpbmUgeHcxbGMgTlVMTAorI2RlZmluZSB4bGNhYyBOVUxMCisjZGVmaW5lIHhsYzU1IE5VTEwK KyNkZWZpbmUgeGxjMTI1MSBOVUxMCisjZGVmaW5lIHhsY2FzIE5VTEwKKyNkZWZpbmUgeGxjazgg TlVMTAorI2RlZmluZSB4bGNrciBOVUxMCisjZGVmaW5lIHhsY2t1IE5VTEwKKyNkZWZpbmUgeGxj aDcgTlVMTAorI2RlZmluZSB4bGNzayBOVUxMCisjZGVmaW5lIHhza2FzIE5VTEwKKyNkZWZpbmUg eHNrY3kgTlVMTAorI2RlZmluZSB4YnVsYyBOVUxMCisjZGVmaW5lIHhsY2J1IE5VTEwKKyNlbmRp ZiAvKiBDWVJJTExJQyAqLworCisvKiBUcmFuc2xhdGlvbiBmdW5jdGlvbnMgZm9yIEhlYnJldyBj aGFyYWN0ZXIgc2V0cyAqLworCisjaWZkZWYgSEVCUkVXCisKK0NIQVIKKyNpZmRlZiBDS19BTlNJ QworeGFzaDcoQ0hBUiBjKQorI2Vsc2UKK3hhc2g3KGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19B TlNJQyAqLworeyAvKiB4YXNoNyAqLwkJCS8qIEFTQ0lJIHRvIEhlYnJldy03ICovCisgICAgaWYg KGMgJiAweDgwKQorICAgICAgcmV0dXJuKFVOSyk7CisgICAgaWYgKGMgPT0gOTYpIHJldHVybign PycpOworICAgIGlmIChjID4gOTYgJiYgYyA8IDEyMykgcmV0dXJuKGMgLSAzMik7CisgICAgZWxz ZSByZXR1cm4oYyk7Cit9CisKK0NIQVIKKyNpZmRlZiBDS19BTlNJQworeGwxaDcoQ0hBUiBjKQor I2Vsc2UKK3hsMWg3KGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeyAvKiB4bDFo NyAqLwkJCS8qIExhdGluLTEgdG8gSGVicmV3LTcgKi8KKyAgICByZXR1cm4oeGFzaDcoeGwxYXMo YykpKTsKK30KKworQ0hBUgorI2lmZGVmIENLX0FOU0lDCit4bDFsaChDSEFSIGMpCisjZWxzZQor eGwxbGgoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7IC8qIHhsMWxoICovCQkJ CS8qIExhdGluLTEgdG8gTGF0aW4vSGVicmV3ICovCisgICAgc3dpdGNoKGMpIHsKKyAgICAgIGNh c2UgMTcwOiByZXR1cm4oJ2EnKTsJCS8qIEZlbWluaW5lIG9yZGluYWwgKi8KKyAgICAgIGNhc2Ug MTg2OiByZXR1cm4oJ28nKTsJCS8qIE1hc2N1bGluZSBvcmRpbmFsICovCisgICAgICBjYXNlIDIx NTogcmV0dXJuKDE3MCk7CQkvKiBUaW1lcyAqLworICAgICAgY2FzZSAyNDc6IHJldHVybigxODYp OwkJLyogRGl2aWRlICovCisgICAgICBkZWZhdWx0OiAgcmV0dXJuKCAoYyA+IDE5MCkgPyB4bDFh cyhjKSA6IGMgKTsKKyAgICB9Cit9CisKK0NIQVIKKyNpZmRlZiBDS19BTlNJQworeHcxbGgoQ0hB UiBjKQorI2Vsc2UKK3h3MWxoKGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeyAv KiB4dzFsaCAqLwkJCQkvKiBDUDEyNTIgdG8gTGF0aW4vSGVicmV3ICovCisgICAgc3dpdGNoKGMp IHsKKyAgICAgIGNhc2UgMTcwOiByZXR1cm4oJ2EnKTsJCS8qIEZlbWluaW5lIG9yZGluYWwgKi8K KyAgICAgIGNhc2UgMTg2OiByZXR1cm4oJ28nKTsJCS8qIE1hc2N1bGluZSBvcmRpbmFsICovCisg ICAgICBjYXNlIDIxNTogcmV0dXJuKDE3MCk7CQkvKiBUaW1lcyAqLworICAgICAgY2FzZSAyNDc6 IHJldHVybigxODYpOwkJLyogRGl2aWRlICovCisgICAgICBkZWZhdWx0OgorCWlmIChjIDwgMTYw KQorCSAgcmV0dXJuKHh3MWFzKGMpKTsKKwllbHNlCisJICByZXR1cm4oKGMgPiAxOTApID8geGwx YXMoYykgOiBjKTsKKyAgICB9Cit9CisKKyNpZmRlZiBMQVRJTjIKK0NIQVIKKyNpZmRlZiBDS19B TlNJQworeGwyaDcoQ0hBUiBjKQorI2Vsc2UKK3hsMmg3KGMpIENIQVIgYzsKKyNlbmRpZiAvKiBD S19BTlNJQyAqLworeyAvKiB4bDJoNyAqLwkJCQkvKiBMYXRpbi0yIHRvIEhlYnJldy03ICovCisg ICAgcmV0dXJuKHhhc2g3KHhsMmFzKGMpKSk7Cit9CisjZWxzZQorI2RlZmluZSB4bDJoNyBOVUxM CisjZW5kaWYgLyogTEFUSU4yICovCisKKyNpZm5kZWYgTk9DWVJJTAorQ0hBUgorI2lmZGVmIENL X0FOU0lDCit4bGNoNyhDSEFSIGMpCisjZWxzZQoreGxjaDcoYykgQ0hBUiBjOworI2VuZGlmIC8q IENLX0FOU0lDICovCit7IC8qIHhsY2g3ICovCQkJCS8qIExhdGluL0N5cmlsbGljIHRvIEhlYnJl dy03ICovCisgICAgcmV0dXJuKHhhc2g3KHhsY2FzKGMpKSk7Cit9CisjZW5kaWYgLyogTk9DWVJJ TCAqLworCitDSEFSCisjaWZkZWYgQ0tfQU5TSUMKK3hsaGFzKENIQVIgYykKKyNlbHNlCit4bGhh cyhjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sgLyogeGxoYXMgKi8JCQkvKiBM YXRpbi9IZWJyZXcgdG8gQVNDSUkgKi8KKyAgICByZXR1cm4oIChjID4gMTI3KSA/ICc/JyA6IGMg KTsKK30KKworQ0hBUgorI2lmZGVmIENLX0FOU0lDCit4bGhsMShDSEFSIGMpCisjZWxzZQoreGxo bDEoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7IC8qIHhsaGwxICovCQkJLyog TGF0aW4vSGVicmV3IHRvIExhdGluLTEgKi8KKyAgICBzd2l0Y2ggKGMpIHsKKyAgICAgIGNhc2Ug MTcwOiByZXR1cm4oMjE1KTsKKyAgICAgIGNhc2UgMTg2OiByZXR1cm4oMjQ3KTsKKyAgICAgIGRl ZmF1bHQ6IHJldHVybiggKGMgPiAxOTApID8gJz8nIDogYyApOworICAgIH0KK30KKworQ0hBUgor I2lmZGVmIENLX0FOU0lDCit4bGh3MShDSEFSIGMpCisjZWxzZQoreGxodzEoYykgQ0hBUiBjOwor I2VuZGlmIC8qIENLX0FOU0lDICovCit7IC8qIHhsaHcxICovCQkJLyogTGF0aW4vSGVicmV3IHRv IENQMTI1MiAqLworICAgIGlmIChjID4gMTI3ICYmIGMgPCAxNjApCisgICAgICByZXR1cm4oJz8n KTsKKyAgICBzd2l0Y2ggKGMpIHsKKyAgICAgIGNhc2UgMTcwOiByZXR1cm4oMjE1KTsKKyAgICAg IGNhc2UgMTg2OiByZXR1cm4oMjQ3KTsKKyAgICAgIGRlZmF1bHQ6IHJldHVybiggKGMgPiAxOTAp ID8gJz8nIDogYyApOworICAgIH0KK30KKworQ0hBUgorI2lmZGVmIENLX0FOU0lDCit4bGg2MihD SEFSIGMpCisjZWxzZQoreGxoNjIoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7 IC8qIHhsaDYyICovCQkJLyogTGF0aW4vSGVicmV3IHRvIENQODYyICovCisgICAgcmV0dXJuKHls aDYyW2NdKTsKK30KKworQ0hBUgorI2lmZGVmIENLX0FOU0lDCit4bDE2MihDSEFSIGMpCisjZWxz ZQoreGwxNjIoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7IC8qIHhsMTYyICov CQkJLyogTGF0aW4tMSB0byBDUDg2MiAqLworICAgIHJldHVybih4bGg2Mih4bDFsaChjKSkpOwkv KiBWaWEgTGF0aW4vSGVicmV3ICovCit9CisKK0NIQVIKKyNpZmRlZiBDS19BTlNJQworeGxoaDco Q0hBUiBjKQorI2Vsc2UKK3hsaGg3KGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLwor eyAvKiB4bGhoNyAqLwkJCS8qIExhdGluL0hlYnJldyB0byBIZWJyZXctNyAqLworICAgIHJldHVy bih5bGhoN1tjXSk7Cit9CisKK0NIQVIKKyNpZmRlZiBDS19BTlNJQworeGg3YXMoQ0hBUiBjKQor I2Vsc2UKK3hoN2FzKGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeyAvKiB4aDdh cyAqLwkJCS8qIEhlYnJldy03IHRvIEFTQ0lJICovCisgICAgaWYgKGMgJiAweDgwKQorICAgICAg cmV0dXJuKFVOSyk7CisgICAgcmV0dXJuKCAoYyA+IDk1ICYmIGMgPCAxMjMpID8gJz8nIDogYyAp OworfQorCitDSEFSCisjaWZkZWYgQ0tfQU5TSUMKK3g2MmxoKENIQVIgYykKKyNlbHNlCit4NjJs aChjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sgLyogeDYybGggKi8JCQkvKiBD UDg2MiB0byBMYXRpbi9IZWJyZXcgKi8KKyAgICByZXR1cm4oeTYybGhbY10pOworfQorCitDSEFS CisjaWZkZWYgQ0tfQU5TSUMKK3g2MmFzKENIQVIgYykKKyNlbHNlCit4NjJhcyhjKSBDSEFSIGM7 CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sgLyogeDYyYXMgKi8JCQkvKiBDUDg2MiB0byBBU0NJ SSAqLworICAgIHJldHVybiggeGxoYXMoeDYybGgoYykpICk7Cit9CisKK0NIQVIKKyNpZmRlZiBD S19BTlNJQworeDYybDEoQ0hBUiBjKQorI2Vsc2UKK3g2MmwxKGMpIENIQVIgYzsKKyNlbmRpZiAv KiBDS19BTlNJQyAqLworeyAvKiB4NjJsMSAqLwkJCS8qIENQODYyIHRvIExhdGluLTEgKi8KKyAg ICByZXR1cm4oIHhsaGwxKHg2MmxoKGMpKSApOworfQorCitDSEFSCisjaWZkZWYgQ0tfQU5TSUMK K3hoN2xoKENIQVIgYykKKyNlbHNlCit4aDdsaChjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5T SUMgKi8KK3sgLyogeGg3bGggKi8JCQkvKiBIZWJyZXctNyB0byBMYXRpbi9IZWJyZXcgKi8KKyAg ICBpZiAoYyAmIDB4ODApCisgICAgICByZXR1cm4oVU5LKTsKKyAgICByZXR1cm4oeWg3bGhbY10p OworfQorCisjZWxzZSAvKiBObyBIZWJyZXcgKi8KKworI2RlZmluZSB4YXNoNyBOVUxMCisjZGVm aW5lIHhsMWg3IE5VTEwKKyNkZWZpbmUgeGwyaDcgTlVMTAorI2RlZmluZSB4bGNoNyBOVUxMCisj ZGVmaW5lIHhsMWxoIE5VTEwKKyNkZWZpbmUgeHcxbGggTlVMTAorI2RlZmluZSB4bGhhcyBOVUxM CisjZGVmaW5lIHhsaGwxIE5VTEwKKyNkZWZpbmUgeGxodzEgTlVMTAorI2RlZmluZSB4bDE2MiBO VUxMCisjZGVmaW5lIHhsaGg3IE5VTEwKKyNkZWZpbmUgeGxoNjIgTlVMTAorI2RlZmluZSB4aDdh cyBOVUxMCisjZGVmaW5lIHg2MmFzIE5VTEwKKyNkZWZpbmUgeDYybDEgTlVMTAorI2RlZmluZSB4 aDdsaCBOVUxMCisjZGVmaW5lIHg2MmxoIE5VTEwKKworI2VuZGlmIC8qIEhFQlJFVyAqLworCisv KiBUcmFuc2xhdGlvbiBmdW5jdGlvbnMgZm9yIEdyZWVrIGNoYXJhY3RlciBzZXRzICovCisKKyNp ZmRlZiBHUkVFSworCitDSEFSCisjaWZkZWYgQ0tfQU5TSUMKK3hhc2VnKENIQVIgYykKKyNlbHNl Cit4YXNlZyhjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sgLyogeGFzZWcgKi8J CQkvKiBBU0NJSSB0byBFTE9UIDkyNyAqLworICAgIGlmIChjICYgMHg4MCkKKyAgICAgIHJldHVy bihVTkspOworICAgIGlmIChjID4gOTYgJiYgYyA8IDEyMykgcmV0dXJuKGMgLSAzMik7CisgICAg ZWxzZSByZXR1cm4oYyk7Cit9CisKK0NIQVIKKyNpZmRlZiBDS19BTlNJQworeGwxZWcoQ0hBUiBj KQorI2Vsc2UKK3hsMWVnKGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeyAvKiB4 bDFnZSAqLwkJCS8qIExhdGluLTEgdG8gRUxPVCA5MjcgKi8KKyAgICByZXR1cm4oeGFzZWcoeGwx YXMoYykpKTsKK30KKworQ0hBUgorI2lmZGVmIENLX0FOU0lDCit4bDJsZyhDSEFSIGMpCisjZWxz ZQoreGwybGcoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7IC8qIHhsMmxnICov CQkJLyogTGF0aW4tMSB0byBMYXRpbi9HcmVlayAqLworICAgIGlmIChjIDwgMTYwKSByZXR1cm4o Yyk7CisgICAgZWxzZSBpZiAoYyA9PSAxNjAgfHwgYyA9PSAxNjggfHwgYyA9PSAxNzMgfHwgYyA9 PSAxNzQpCisgICAgICByZXR1cm4oYyk7CisgICAgZWxzZSByZXR1cm4oJz8nKTsKK30KKworQ0hB UgorI2lmZGVmIENLX0FOU0lDCit4bDFsZyhDSEFSIGMpCisjZWxzZQoreGwxbGcoYykgQ0hBUiBj OworI2VuZGlmIC8qIENLX0FOU0lDICovCit7IC8qIHhsMWxnICovCQkJLyogTGF0aW4tMSB0byBM YXRpbi9HcmVlayAqLworICAgIGlmIChjIDwgMTYwKSByZXR1cm4oYyk7CisgICAgc3dpdGNoKGMp IHsKKyAgICAgIGNhc2UgMTYwOgkJCQkvKiBUaGVtc2VsdmVzICovCisgICAgICBjYXNlIDE2NDoK KyAgICAgIGNhc2UgMTY2OgorICAgICAgY2FzZSAxNjc6CisgICAgICBjYXNlIDE2ODoKKyAgICAg IGNhc2UgMTY5OgorICAgICAgY2FzZSAxNzE6CisgICAgICBjYXNlIDE3MjoKKyAgICAgIGNhc2Ug MTczOgorICAgICAgY2FzZSAxNzY6CisgICAgICBjYXNlIDE3NzoKKyAgICAgIGNhc2UgMTc4Ogor ICAgICAgY2FzZSAxNzk6CisgICAgICBjYXNlIDE4MDoKKyAgICAgIGNhc2UgMTg3OgorICAgICAg Y2FzZSAxODk6CisJcmV0dXJuKGMpOworICAgICAgY2FzZSAxODE6CQkJCS8qIExvd2VyY2FzZSBt dSAqLworCXJldHVybigyMzYpOworICAgICAgZGVmYXVsdDoKKwlyZXR1cm4oVU5LKTsKKyAgICB9 Cit9CisKK0NIQVIKKyNpZmRlZiBDS19BTlNJQworeHcxbGcoQ0hBUiBjKQorI2Vsc2UKK3h3MWxn KGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeyAvKiB4dzFsZyAqLwkJCQkvKiBD UDEyNTIgdG8gTGF0aW4vR3JlZWsgKi8KKyAgICByZXR1cm4oKGMgPCAxNjApID8geHcxYXMoYykg OiB4bDFsZyhjKSk7Cit9CisKKworI2lmZGVmIExBVElOMgorQ0hBUgorI2lmZGVmIENLX0FOU0lD Cit4bDJlZyhDSEFSIGMpCisjZWxzZQoreGwyZWcoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FO U0lDICovCit7IC8qIHhsMmVnICovCQkJCS8qIExhdGluLTIgdG8gRUxPVCA5MjcgKi8KKyAgICBy ZXR1cm4oeGFzZWcoeGwyYXMoYykpKTsKK30KKyNlbHNlCisjZGVmaW5lIHhsMmVnIE5VTEwKKyNl bmRpZiAvKiBMQVRJTjIgKi8KKworI2lmbmRlZiBOT0NZUklMCitDSEFSCisjaWZkZWYgQ0tfQU5T SUMKK3hsY2VnKENIQVIgYykKKyNlbHNlCit4bGNlZyhjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tf QU5TSUMgKi8KK3sgLyogeGxjZWcgKi8JCQkvKiBMYXRpbi9DeXJpbGxpYyB0byBFTE9UIDkyNyAq LworICAgIHJldHVybih4YXNlZyh4bGNhcyhjKSkpOworfQorI2VuZGlmIC8qIE5PQ1lSSUwgKi8K KworQ0hBUgorI2lmZGVmIENLX0FOU0lDCit4bGdhcyhDSEFSIGMpCisjZWxzZQoreGxnYXMoYykg Q0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7IC8qIHhsZ2FzICovCQkJLyogTGF0aW4v R3JlZWsgdG8gQVNDSUkgKi8KKyAgICByZXR1cm4oIChjID4gMTI3KSA/ICc/JyA6IGMgKTsKK30K KworQ0hBUgorI2lmZGVmIENLX0FOU0lDCit4bGdsMShDSEFSIGMpCisjZWxzZQoreGxnbDEoYykg Q0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7IC8qIHhsZ2wxICovCQkJLyogTGF0aW4v R3JlZWsgdG8gTGF0aW4tMSAqLworICAgIGlmIChjID09IDIzNikKKyAgICAgIHJldHVybigxODEp OworICAgIGVsc2UKKyAgICAgIHJldHVybih4bDFsZyhjKSk7Cit9CisKK0NIQVIKKyNpZmRlZiBD S19BTlNJQworeGxndzEoQ0hBUiBjKQorI2Vsc2UKK3hsZ3cxKGMpIENIQVIgYzsKKyNlbmRpZiAv KiBDS19BTlNJQyAqLworeyAvKiB4bGd3MSAqLwkJCS8qIExhdGluL0dyZWVrIHRvIExhdGluLTEg Ki8KKyAgICBpZiAoYyA+IDEyNyAmJiBjIDwgMTYwKQorICAgICAgcmV0dXJuKCc/Jyk7CisgICAg cmV0dXJuKHhsZ2wxKGMpKTsKK30KKworQ0hBUgorI2lmZGVmIENLX0FOU0lDCit4bGc2OShDSEFS IGMpCisjZWxzZQoreGxnNjkoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7IC8q IHhsZzY5ICovCQkJLyogTGF0aW4vR3JlZWsgdG8gQ1A4NjkgKi8KKyAgICByZXR1cm4oeWxnNjlb Y10pOworfQorCitDSEFSCisjaWZkZWYgQ0tfQU5TSUMKK3hsMTY5KENIQVIgYykKKyNlbHNlCit4 bDE2OShjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sgLyogeGwxNjkgKi8JCQkv KiBMYXRpbi0xIHRvIENQODY5ICovCisgICAgcmV0dXJuKHhsZzY5KHhsMWxnKGMpKSk7CS8qIFZp YSBMYXRpbi9HcmVlayAqLworfQorCitDSEFSCisjaWZkZWYgQ0tfQU5TSUMKK3hsZ2VnKENIQVIg YykKKyNlbHNlCit4bGdlZyhjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sgLyog eGxnZWcgKi8JCQkvKiBMYXRpbi9HcmVlayB0byBFTE9UIDkyNyAqLworICAgIHJldHVybih5bGdl Z1tjXSk7Cit9CisKK0NIQVIKKyNpZmRlZiBDS19BTlNJQworeGVnYXMoQ0hBUiBjKQorI2Vsc2UK K3hlZ2FzKGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeyAvKiB4ZWdhcyAqLwkJ CS8qIEVMT1QgOTI3IHRvIEFTQ0lJICovCisgICAgaWYgKGMgJiAweDgwKQorICAgICAgcmV0dXJu KFVOSyk7CisgICAgcmV0dXJuKCAoYyA+IDk2ICYmIGMgPCAxMjMpID8gJz8nIDogYyApOworfQor CitDSEFSCisjaWZkZWYgQ0tfQU5TSUMKK3g2OWxnKENIQVIgYykKKyNlbHNlCit4NjlsZyhjKSBD SEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sgLyogeDY5bGcgKi8JCQkvKiBDUDg2OSB0 byBMYXRpbi9HcmVlayAqLworICAgIHJldHVybih5NjlsZ1tjXSk7Cit9CisKK0NIQVIKKyNpZmRl ZiBDS19BTlNJQworeDY5YXMoQ0hBUiBjKQorI2Vsc2UKK3g2OWFzKGMpIENIQVIgYzsKKyNlbmRp ZiAvKiBDS19BTlNJQyAqLworeyAvKiB4NjlhcyAqLwkJCS8qIENQODY5IHRvIEFTQ0lJICovCisg ICAgcmV0dXJuKCB4bGdhcyh4NjlsZyhjKSkgKTsKK30KKworQ0hBUgorI2lmZGVmIENLX0FOU0lD Cit4NjlsMShDSEFSIGMpCisjZWxzZQoreDY5bDEoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FO U0lDICovCit7IC8qIHg2OWwxICovCQkJLyogQ1A4NjkgdG8gTGF0aW4tMSAqLworICAgIHJldHVy biggeGxnbDEoeDY5bGcoYykpICk7Cit9CisKK0NIQVIKKyNpZmRlZiBDS19BTlNJQworeGVnbGco Q0hBUiBjKQorI2Vsc2UKK3hlZ2xnKGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLwor eyAvKiB4ZWdsZyAqLwkJCS8qIEVMT1QgOTI3IHRvIExhdGluL0dyZWVrICovCisgICAgcmV0dXJu KHllZ2xnW2NdKTsKK30KKworI2Vsc2UgLyogTm8gR3JlZWsgKi8KKworI2RlZmluZSB4NjlhcyBO VUxMCisjZGVmaW5lIHg2OWwxIE5VTEwKKyNkZWZpbmUgeDY5bGcgTlVMTAorI2RlZmluZSB4YXNl ZyBOVUxMCisjZGVmaW5lIHhlZ2FzIE5VTEwKKyNkZWZpbmUgeGVnbGcgTlVMTAorI2RlZmluZSB4 bDE2OSBOVUxMCisjZGVmaW5lIHhsMWVnIE5VTEwKKyNkZWZpbmUgeGwxbGcgTlVMTAorI2RlZmlu ZSB4dzFsZyBOVUxMCisjZGVmaW5lIHhsMmdlIE5VTEwKKyNkZWZpbmUgeGwybGcgTlVMTAorI2Rl ZmluZSB4bGNnZSBOVUxMCisjZGVmaW5lIHhsZzY5IE5VTEwKKyNkZWZpbmUgeGxnYXMgTlVMTAor I2RlZmluZSB4bGdlZyBOVUxMCisjZGVmaW5lIHhsZ2dlIE5VTEwKKyNkZWZpbmUgeGxnbDEgTlVM TAorI2RlZmluZSB4bGd3MSBOVUxMCisKKyNlbmRpZiAvKiBHUkVFSyAqLworCisKKy8qIFRyYW5z bGF0aW9uIGZ1bmN0aW9ucyBmb3IgSmFwYW5lc2UgS2FuamkgY2hhcmFjdGVyIHNldHMgKi8KKwor I2lmZGVmIEtBTkpJCisvKgorICBUcmFuc2xhdGUgS2FuamkgVHJhbnNmZXIgQ2hhcmFjdGVyIFNl dCAoRVVDKSB0byBsb2NhbCBmaWxlIGNoYXJhY3RlciBzZXQsCisgIGNvbnRyaWJ1dGVkIGJ5IERy LiBIaXJvZnVtaSBGdWppaSwgSmFwYW4gSGlnaCBFbmVyZ3kgUmVzZWFyY2ggTGFib3JhdG9yeQor ICAoS0VLKSwgVG9reW8sIEphcGFuLgorCisgIGEgaXMgYSBieXRlIHRvIGJlIHRyYW5zbGF0ZWQs IHdoaWNoIG1heSBiZSBhIHNpbmdsZS1ieXRlIGNoYXJhY3RlciwKKyAgdGhlIEthdGFrYW5hIHBy ZWZpeCwgdGhlIGZpcnN0IGJ5dGUgb2YgYSB0d28tYnl0ZSBLYW5qaSBjaGFyYWN0ZXIsIG9yIHRo ZQorICBzZWNvbmQgYnl0ZSBvZiAyLWJ5dGUgS2FuamkgY2hhcmFjdGVyLgorCisgIGZuIGlzIHRo ZSBvdXRwdXQgZnVuY3Rpb24uCisKKyAgUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGZhaWx1 cmUuCisqLworCitfUFJPVE9UWVAoc3RhdGljIGludCBqcG54YXMsIChpbnQsIGludFtdKSApOwor X1BST1RPVFlQKHN0YXRpYyBpbnQganBueGt0LCAoaW50LCBpbnRbXSkgKTsKK19QUk9UT1RZUChz dGF0aWMgaW50IGpwbnhrbiwgKGludFtdLCBpbnRbXSkgKTsKKworc3RhdGljIGludCBqcG5jbnQ7 CQkJLyogQnl0ZSBjb3VudCBmb3IgSmFwYW5lc2UgKi8KK3N0YXRpYyBpbnQganBubHN0OwkJCS8q IExhc3Qgc3RhdHVzIChmb3IgSklTNykgKi8KKworc3RhdGljIGludAoranBueGFzKGEsIG9idWYp IGludCBhOyBpbnQgb2J1ZltdOyB7IC8qIFRyYW5zbGF0ZSBBU0NJSSB0byBsb2NhbCBmaWxlIGNv ZGUgKi8KKyAgICBpbnQgcjsKKworICAgIHIgPSAwOworICAgIGlmIChmY2hhcnNldCA9PSBGQ19K SVM3KSB7CisJc3dpdGNoIChqcG5sc3QpIHsKKwkgIGNhc2UgMToKKwkgICAgb2J1ZlswXSA9IDB4 MGY7CisJICAgIG9idWZbMV0gPSBhOworCSAgICByID0gMjsKKwkgICAgYnJlYWs7CisJICBjYXNl IDI6CisJICAgIG9idWZbMF0gPSAweDFiOworCSAgICBvYnVmWzFdID0gMHgyODsKKwkgICAgb2J1 ZlsyXSA9IDB4NGE7CisJICAgIG9idWZbM10gPSBhOworCSAgICByID0gNDsKKwkgICAgYnJlYWs7 CisJICBkZWZhdWx0OgorCSAgICBvYnVmWzBdID0gYTsKKwkgICAgciA9IDE7CisJICAgIGJyZWFr OworCX0KKyAgICB9IGVsc2UgeworCW9idWZbMF0gPSBhOworCXIgPSAxOworICAgIH0KKyAgICBy ZXR1cm4ocik7Cit9CisKK3N0YXRpYyBpbnQKK2pwbnhrdChhLCBvYnVmKSBpbnQgYTsgaW50IG9i dWZbXTsgeworLyogVHJhbnNsYXRlIEpJUyBYIDIwMSBLYXRha2FuYSB0byBsb2NhbCBjb2RlICov CisKKyAgICBpbnQgcjsKKworICAgIHIgPSAwOworICAgIGlmIChmY2hhcnNldCA9PSBGQ19KSVM3 KSB7CisJc3dpdGNoIChqcG5sc3QpIHsKKwkgIGNhc2UgMjoJCQkJLyogZnJvbSBLYW5qaSAqLwor CSAgICBvYnVmW3IrK10gPSAweDFiOworCSAgICBvYnVmW3IrK10gPSAweDI4OworCSAgICBvYnVm W3IrK10gPSAweDRhOworCSAgY2FzZSAwOgkJCQkvKiBmcm9tIFJvbWFuICovCisJICAgIG9idWZb cisrXSA9IDB4MGU7CisJICBkZWZhdWx0OgorCSAgICBvYnVmW3IrK10gPSAoYSAmIDB4N2YpOwor CSAgYnJlYWs7CisJfQorICAgIH0gZWxzZSB7CisJaWYgKGZjaGFyc2V0ID09IEZDX0pFVUMpCisJ ICBvYnVmW3IrK10gPSAweDhlOworCW9idWZbcisrXSA9IChhIHwgMHg4MCk7CisgICAgfQorICAg IHJldHVybihyKTsKK30KKworc3RhdGljIGludAoranBueGtuKGlidWYsIG9idWYpIGludCBpYnVm W10sIG9idWZbXTsgeworICAgIC8qIFRyYW5zbGF0ZSBKSVMgWCAwMjA4IEthbmppIHRvIGxvY2Fs IGNvZGUgKi8KKyAgICBpbnQgYzEsIGMyOworICAgIGludCByOworCisgICAgYzEgPSBpYnVmWzBd ICYgMHg3ZjsKKyAgICBjMiA9IGlidWZbMV0gJiAweDdmOworCisgICAgaWYgKGZjaGFyc2V0ID09 IEZDX1NISklTKSB7CisJaWYgKGMxICYgMSkKKwkgIGMyICs9IDB4MWY7CisJZWxzZQorCSAgYzIg Kz0gMHg3ZDsKKworICAgICAgICBpZiAoYzIgPj0gMHg3ZikgYzIrKzsKKworICAgICAgICBjMSA9 ICgoYzEgLSAweDIxKSA+PiAxKSArIDB4ODE7CisgICAgICAgIGlmIChjMSA+IDB4OWYpIGMxICs9 IDB4NDA7CisKKyAgICAgICAgb2J1ZlswXSA9IGMxOworICAgICAgICBvYnVmWzFdID0gYzI7Cisg ICAgICAgIHIgPSAyOworICAgIH0gZWxzZSBpZiAoZmNoYXJzZXQgPT0gRkNfSklTNykgeworICAg ICAgICByID0gMDsKKyAgICAgICAgc3dpdGNoIChqcG5sc3QpIHsKKyAgCSAgY2FzZSAxOgorCSAg ICBvYnVmW3IrK10gPSAweDBmOyAvKiBGcm9tIEthdGFrYW5hICovCisgIAkgIGNhc2UgMDoKKwkg ICAgb2J1ZltyKytdID0gMHgxYjsKKwkgICAgb2J1ZltyKytdID0gMHgyNDsKKwkgICAgb2J1Zlty KytdID0gMHg0MjsKKwkgIGRlZmF1bHQ6CisJICAgIG9idWZbcisrXSA9IGMxOworCSAgICBvYnVm W3IrK10gPSBjMjsKKwkgICAgYnJlYWs7CisJfQorICAgIH0gZWxzZSB7CisgICAgICAgIG9idWZb MF0gPSAoYzEgfCAweDgwKTsKKyAgICAgICAgb2J1ZlsxXSA9IChjMiB8IDB4ODApOworICAgICAg ICByID0gMjsKKyAgICB9CisgICAgcmV0dXJuKHIpOworfQorCitpbnQKK3hrYW5qZigpIHsKKy8q IEluaXRpYWxpemUgcGFyYW1ldGVycyBmb3IgeGthbmppICovCisvKiBUaGlzIGZ1bmN0aW9uIHNo b3VsZCBiZSBjYWxsZWQgd2hlbiBGL1gtcGFja2V0IGlzIHJlY2VpdmVkICovCisgICAganBuY250 ID0ganBubHN0ID0gMDsKKyAgICByZXR1cm4oMCk7Cit9CisKK2ludAorI2lmZGVmIENLX0FOU0lD Cit4a2FuanooaW50ICgqZm4pKGNoYXIpKQorI2Vsc2UKK3hrYW5qeihmbikgaW50ICgqZm4pKCk7 CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sgLyogeGthbmp6ICovCisvKgorICBUZXJtaW5hdGUg eGthbmppCisgIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgd2hlbiBaLXBhY2tldCBpcyBy ZWNlaXZlZAorICAoYmVmb3JlIGNsb3NpbmcgdGhlIGZpbGUpLgorKi8KKyAgICBzdGF0aWMgaW50 IG9idWZbNl07CisgICAgaW50IHIsIGksIGM7CisKKyAgICBpZiAoZmNoYXJzZXQgPT0gRkNfSklT NykgeworICAgICAgICBjID0gJ0EnOwkJCS8qIER1bW15IFJvbWFuIGNoYXJhY3RlciAqLworICAg ICAgICByID0ganBueGFzKGMsIG9idWYpIC0gMTsJLyogLTEgcmVtb3ZlcyBEdW1teSBjaGFyYWN0 ZXIgKi8KKyAgICAgICAgaWYgKHIgPiAwKSB7CisJICAgIGZvciAoaSA9IDA7IGkgPCByOyBpKysp CisJICAgICAgaWYgKCgoKmZuKSgoY2hhcikgb2J1ZltpXSkpIDwgMCkKKwkJcmV0dXJuKC0xKTsK Kwl9CisgICAgfQorICAgIHJldHVybigwKTsKK30KKworaW50CisjaWZkZWYgQ0tfQU5TSUMKK3hr YW5qaShpbnQgYSwgaW50ICgqZm4pKGNoYXIpKQorI2Vsc2UKK3hrYW5qaShhLCBmbikgaW50IGE7 IGludCAoKmZuKSgpOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7IC8qIHhrYW5qaSAqLworICAg IHN0YXRpYyBpbnQgeGJ1ZlsyXTsKKyAgICBzdGF0aWMgaW50IG9idWZbOF07CisKKyAgICBpbnQg aSwgcjsKKyAgICBpbnQgYzc7CisgICAgaW50IHN0YXRlPTA7CisKKyAgICByID0gMDsKKyAgICBp ZiAoanBuY250ID09IDApIHsKKwkvKiAxc3QgYnl0ZSAqLworCWlmICgoYSAmIDB4ODApID09IDAp IHsKKwkgICAgLyogOHRoIGJpdCBpcyAwLCBpLmUuLCBzaW5nbGUtYnl0ZSBjb2RlICovCisJICAg IHIgPSBqcG54YXMoYSwgb2J1Zik7CisJICAgIHN0YXRlID0gMDsKKwl9IGVsc2UgeworCSAgICAv KiA4dGggYml0IGlzIDEsIGNoZWNrIHRoZSByYW5nZSAqLworCSAgICBjNyA9IGEgJiAweDdmOwor CSAgICBpZiAoKChjNyA+IDB4MjApICYmIChjNyA8IDB4N2YpKSB8fCAoYzcgPT0gMHgwZSkpIHsK KwkgICAgICAgIC8qIGRvdWJsZSBieXRlIGNvZGUgKi8KKwkgICAgICAgIHhidWZbanBuY250Kytd ID0gYTsKKwkgICAgfSBlbHNlIHsKKwkgICAgICAgIC8qIHNpbmdsZSBieXRlIGNvZGUgKi8KKwkg ICAgICAgIHIgPSBqcG54YXMoYSwgb2J1Zik7CisJICAgICAgICBzdGF0ZSA9IDA7CisJICAgIH0K Kwl9CisgICAgfSBlbHNlIHsKKwkvKiBub3QgdGhlIDFzdCBieXRlICovCisJeGJ1ZltqcG5jbnQr K10gPSBhOworCWlmICh4YnVmWzBdID09IDB4OGUpIHsKKwkgICAgciA9IGpwbnhrdCh4YnVmWzFd LCBvYnVmKTsKKwkgICAgc3RhdGUgPSAxOworCX0gZWxzZSB7CisJICAgIHIgPSBqcG54a24oeGJ1 Ziwgb2J1Zik7CisJICAgIHN0YXRlID0gMjsKKwl9CisgICAgfQorICAgIGlmIChyID4gMCkgewor ICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcjsgaSsrICkKKwkgIGlmICgoKCpmbikoKGNoYXIpIG9i dWZbaV0pKSA8IDApCisJICAgIHJldHVybigtMSk7CisgICAgICAgIGpwbmxzdCA9IHN0YXRlOwor ICAgICAgICBqcG5jbnQgPSAwOworICAgIH0KKyAgICByZXR1cm4oMCk7Cit9CisKKy8qCisgIEZ1 bmN0aW9uIGZvciB0cmFuc2xhdGluZyBmcm9tIEphcGFuZXNlIGZpbGUgY2hhcmFjdGVyIHNldAor ICB0byBKYXBhbmVzZSBFVUMgdHJhbnNmZXIgY2hhcmFjdGVyIHNldC4KKyAgUmV0dXJucyBhIHBv aW50ZXIgdG8gYSBzdHJpbmcgY29udGFpbmluZyAwLCAxLCBvciAyIGJ5dGVzLgorKi8KKworLyog emthbmppICovCitzdGF0aWMgaW50IGpwbnN0ejsJCQkvKiBzdGF0dXMgZm9yIEpJUy03ICovCitz dGF0aWMgaW50IGpwbnBuZDsJCQkvKiBudW1iZXIgb2YgcGVuZGluZyBieXRlcyAqLworc3RhdGlj IGludCBqcG5wbnQ7CQkJLyogcGVuZGluZyBidWZmZXIgaW5kZXggKi8KK3N0YXRpYyBpbnQganBu cGJmWzhdOwkJCS8qIHBlbmRpbmcgYnVmZmVyICovCisKKy8qIFRoZXJlIGlzIHNvbWUgZHVwbGlj YXRpb24gaGVyZSBiZXR3ZWVuIHRoZSBvbGQgYW5kIG5ldyBKSVMtNyBwYXJzZXJzICovCisvKiB0 byBiZSBjbGVhbmVkIHVwIGxhdGVyLi4uICovCisKK1ZPSUQKK2o3aW5pdCgpIHsJCQkJLyogSW5p dGlhbGl6ZSBKSVMtNyBwYXJzZXIgKi8KKyAgICBqcG5zdHogPSAwOworICAgIGpwbnBuZCA9IDA7 CisgICAganBucG50ID0gMDsKK30KKworaW50CitnZXRqNygpIHsJCQkJLyogUmVhZHMgSklTLTcg cmV0dXJucyBuZXh0IEVVQyBieXRlICovCisgICAgaW50IHg7CisKKyAgICBpZiAoanBucG5kID4g MCkgewkJCS8qIElmIHNvbWV0aGluZyBpcyBwZW5kaW5nICovCisJeCA9ICh1bnNpZ25lZCkganBu cGJmW2pwbnBudCsrXTsgLyogR2V0IGl0ICovCisJanBucG5kLS07CisJaWYgKGpwbnBuZCA8IDAp IGpwbnBuZCA9IDA7CisJcmV0dXJuKCh1bnNpZ25lZCl4KTsKKyAgICB9CisgICAganBucG50ID0g MDsKKworICAgIGlmICgoeCA9IHptaW5jaGFyKCkpIDwgMCkgcmV0dXJuKHgpOworICAgIHdoaWxl IChqcG5wbmQgPT0gMCkgewkJLyogV2hpbGUgc29tZXRoaW5nIGlzIHBlbmRpbmcuLi4gKi8KKwlp ZiAoKHggPiAweDIwKSAmJiAoeCA8IDB4N2YpKSB7CS8qIDctYml0IGdyYXBoaWMgY2hhcmFjdGVy ICovCisJICAgIHN3aXRjaCAoanBuc3R6KSB7CisJICAgICAgY2FzZSAxOgkJCSAvKiBLYXRha2Fu YSAqLworI2lmZGVmIENPTU1FTlQKKwkJLyogVGhpcyBjYW4ndCBiZSByaWdodC4uLiAqLworCQlq cG5wYmZbanBucG5kKytdID0gMHg4MDsgLyogSW5zZXJ0IGZsYWcgKE5PVCBTUzI/Pz8pICovCisj ZWxzZQorCQlqcG5wYmZbanBucG5kKytdID0gMHg4ZTsgLyogSW5zZXJ0IFNTMiAqLworI2VuZGlm IC8qIENPTU1FTlQgKi8KKwkJanBucGJmW2pwbnBuZCsrXSA9ICh4IHwgMHg4MCk7IC8qIEluc2Vy dCBLYW5hICsgOHRoIGJpdCAqLworCQlicmVhazsKKwkgICAgICBjYXNlIDI6CQkJLyogS2Fuamkg Ki8KKwkJanBucGJmW2pwbnBuZCsrXSA9ICh4IHwgMHg4MCk7IC8qIEdldCBhbm90aGVyIGJ5dGUg Ki8KKwkJaWYgKCh4ID0gem1pbmNoYXIoKSkgPCAwKSByZXR1cm4oeCk7CisJCWpwbnBiZltqcG5w bmQrK10gPSAoeCB8IDB4ODApOworCQlicmVhazsKKwkgICAgICBkZWZhdWx0OgkJCS8qIEFTQ0lJ IC8gSklTIFJvbWFuICovCisJCWpwbnBiZltqcG5wbmQrK10gPSB4OworCQlicmVhazsKKwkgICAg fQorCX0gZWxzZSBpZiAoeCA9PSAweDBlKSB7CQkvKiBeTiA9IFNPICovCisJICAgIGpwbnN0eiA9 IDE7CQkJLyogS2F0YWthbmEgKi8KKwkgICAgaWYgKCh4ID0gem1pbmNoYXIoKSkgPCAwKSByZXR1 cm4oeCk7CisJfSBlbHNlIGlmICh4ID09IDB4MGYpIHsJCS8qIF5PID0gU0kgKi8KKwkgICAganBu c3R6ID0gMDsJCQkvKiBBU0NJSSAvIEpJUyBSb21hbiAqLworCSAgICBpZiAoKHggPSB6bWluY2hh cigpKSA8IDApIHJldHVybih4KTsKKwl9IGVsc2UgaWYgKHggPT0gMHgxYikgewkJLyogRXNjYXBl ICovCisJICAgIGpwbnBiZltqcG5wbmQrK10gPSB4OwkvKiBTYXZlIGluIGJ1ZmZlciAqLworCSAg ICBpZiAoKHggPSB6bWluY2hhcigpKSA8IDApIHJldHVybih4KTsKKwkgICAganBucGJmW2pwbnBu ZCsrXSA9IHg7CS8qIFNhdmUgaW4gYnVmZmVyICovCisJICAgIGlmICh4ID09ICckJykgewkJLyog PEVTQz4kICovCisJCWlmICgoeCA9IHptaW5jaGFyKCkpIDwgMCkgcmV0dXJuKHgpOworCQlqcG5w YmZbanBucG5kKytdID0geDsKKwkJaWYgKCh4ID09ICdAJykgfHwgKHggPT0gJ0InKSkgewkvKiBL YW5qaSAqLworCQkgICAganBuc3R6ID0gMjsKKwkJICAgIGpwbnBudCA9IGpwbnBuZCA9IDA7CisJ CSAgICBpZiAoKHggPSB6bWluY2hhcigpKSA8IDApIHJldHVybih4KTsKKwkJfQorCSAgICB9IGVs c2UgaWYgKHggPT0gJygnKSB7CS8qIDxFU0M+KCA9PSA5NC1ieXRlIHNpbmdsZS1ieXRlIHNldCAq LworCQlpZiAoKHggPSB6bWluY2hhcigpKSA8IDApIHJldHVybih4KTsKKwkJanBucGJmW2pwbnBu ZCsrXSA9IHg7CisJCWlmICgoeCA9PSAnQicpIHx8ICh4ID09ICdKJykpIHsJLyogQVNDSUkgb3Ig SklTIFJvbWFuICovCisJCSAgICBqcG5zdHogPSAwOwkJICAgICAgICAvKiBTZXQgc3RhdGUgKi8K KwkJICAgIGpwbnBudCA9IGpwbnBuZCA9IDA7ICAgICAgICAvKiBSZXNldCBwb2ludGVycyAqLwor CQkgICAgaWYgKCh4ID0gem1pbmNoYXIoKSkgPCAwKSByZXR1cm4oeCk7CisJCX0KKwkgICAgfSBl bHNlIGlmICh4ID09IDB4MWIpIHsJLyogPEVTQz48RVNDPiAqLworCQlqcG5wbnQgPSBqcG5wbmQg PSAwOwkvKiBSZXNldCBwb2ludGVycywgc3RheSBpbiBzdGF0ZSAqLworCQlpZiAoKHggPSB6bWlu Y2hhcigpKSA8IDApIHJldHVybih4KTsKKwkgICAgfQorCX0gZWxzZSB7CQkJLyogTm90IDxFU0M+ IC0ganVzdCBzYXZlIGl0ICovCisJICAgIGpwbnBiZltqcG5wbmQrK10gPSB4OworCX0KKyAgICB9 CisgICAganBucG50ID0gMDsKKyAgICB4ID0gKHVuc2lnbmVkKWpwbnBiZltqcG5wbnQrK107Cisg ICAganBucG5kLS07CisgICAgcmV0dXJuKCh1bnNpZ25lZCl4KTsKK30KKworVVNIT1JUCisjaWZk ZWYgQ0tfQU5TSUMKK2V1X3RvX3NqKFVTSE9SVCBldSkJCQkvKiBFVUMtSlAgdG8gU2hpZnQtSklT ICovCisjZWxzZQorZXVfdG9fc2ooZXUpIFVTSE9SVCBldTsKKyNlbmRpZiAvKiBDS19BTlNJQyAq LworeworICAgIGludCBjMSwgYzI7CisgICAgdW5pb24gY2tfc2hvcnQgamNvZGUsc2NvZGU7CisK KyAgICBqY29kZS54X3Nob3J0ID0gZXU7CisgICAgYzEgPSAoamNvZGUueF9jaGFyW2J5dGVvcmRl cl0gJiAweDdmKTsKKyAgICBjMiA9IChqY29kZS54X2NoYXJbMS1ieXRlb3JkZXJdICYgMHg3Zik7 CisKKyAgICBpZiAoYzEgJiAxKQorICAgICAgYzIgKz0gMHgxZjsKKyAgICBlbHNlCisgICAgICBj MiArPSAweDdkOworICAgIGlmIChjMiA+PSAweDdmKQorICAgICAgYzIrKzsKKyAgICBjMSA9ICgo YzEgLSAweDIxKSA+PiAxKSArIDB4ODE7CisgICAgaWYgKGMxID4gMHg5ZikKKyAgICAgIGMxICs9 IDB4NDA7CisKKyAgICBzY29kZS54X2NoYXJbYnl0ZW9yZGVyXSA9IGMxOworICAgIHNjb2RlLnhf Y2hhclsxLWJ5dGVvcmRlcl0gPSBjMjsKKyAgICByZXR1cm4oc2NvZGUueF9zaG9ydCk7Cit9CisK KworVVNIT1JUCisjaWZkZWYgQ0tfQU5TSUMKK3NqX3RvX2V1KFVTSE9SVCBzaikJCQkvKiBTaGlm dC1KSVMgdG8gRVVDLUpQICovCisjZWxzZQorc2pfdG9fZXUoc2opIFVTSE9SVCBzajsKKyNlbmRp ZiAvKiBDS19BTlNJQyAqLworeworICAgIHVuaW9uIGNrX3Nob3J0IGpjb2RlLCBzY29kZTsKKyAg ICBpbnQgYzAsIGMxOworCisgICAgc2NvZGUueF9zaG9ydCA9IHNqOworICAgIGMwID0gc2NvZGUu eF9jaGFyW2J5dGVvcmRlcl07CS8qIExlZnQgKGhpIG9yZGVyKSBieXRlICovCisgICAgYzEgPSBz Y29kZS54X2NoYXJbMS1ieXRlb3JkZXJdOwkvKiBSaWdodCAobG8gb3JkZXIpIGJ5dGUgKi8KKwor ICAgIGlmICgoKGMwID49IDB4ODEpICYmIChjMCA8PSAweDlmKSkgfHwgLyogSGlnaCBvcmRlciBi eXRlIGhhcyA4dGggYml0IHNldCAqLworICAgICAgICAoKGMwID49IDB4ZTApICYmIChjMCA8PSAw eGZjKSkpIHsgLyogS2FuamkgKi8KKwlpZiAoYzAgPD0gMHg5ZikJCQkgIC8qIFR3byBieXRlcyBp biAqLworCSAgYzAgLT0gMHg3MTsJCQkgIC8qIERvIHRoZSBzaGlmdGluZy4uLiAqLworCWVsc2UK KwkgIGMwIC09IDB4YjE7CisJYzAgPSBjMCAqIDIgKyAxOworCWlmIChjMSA+IDB4N2YpIGMxIC09 IDE7CisJaWYgKGMxID49IDB4OWUpIHsKKwkgICAgYzEgLT0gMHg3ZDsKKwkgICAgYzAgKz0gMTsK Kwl9IGVsc2UgeworCSAgICBjMSAtPSAweDFmOworCX0KKwlqY29kZS54X2NoYXJbYnl0ZW9yZGVy XSA9IChjMCB8IDB4ODApOyAvKiBUd28gYnl0ZXMgb3V0ICovCisJamNvZGUueF9jaGFyWzEtYnl0 ZW9yZGVyXSA9IChjMSB8IDB4ODApOworCisgICAgfSBlbHNlIGlmIChjMCA9PSAwKSB7CQkvKiBT aW5nbGUgYnl0ZSAqLworCWlmIChjMSA+PSAweGExICYmIGMxIDw9IDB4ZGYpIHsJLyogS2F0YWth bmEgKi8KKwkgICAgamNvZGUueF9jaGFyW2J5dGVvcmRlcl0gPSAweDhlOyAvKiBTUzIgKi8KKwkg ICAgamNvZGUueF9jaGFyWzEtYnl0ZW9yZGVyXSA9IGMxOyAvKiBLYW5hIGNvZGUgKi8KKwl9IGVs c2UgewkJCS8qIEFTQ0lJIG9yIEMwICovCisJICAgIGpjb2RlLnhfc2hvcnQgPSBjMTsKKwl9Cisg ICAgfSBlbHNlIHsJCQkJLyogU29tZXRoaW5nIGJhZCAqLworCWRlYnVnKEYwMDEsInNqX3RvX2V1 IGJhZCBzaiIsIiIsc2opOworCWpjb2RlLnhfc2hvcnQgPSAweGZmZmY7CisgICAgfQorICAgIHJl dHVybihqY29kZS54X3Nob3J0KTsKK30KKworaW50Cit6a2FuamYoKSB7CQkJCS8qIEluaXRpYWxp emUgKi8KKyAgICBqcG5zdHogPSBqcG5wbmQgPSBqcG5wbnQgPSAwOworICAgIHJldHVybigwKTsK K30KKworaW50Cit6a2FuanooKSB7CisgICAgcmV0dXJuKDApOworfQorCitpbnQKKyNpZmRlZiBD S19BTlNJQworemthbmppKGludCAoKmZuKSh2b2lkKSkKKyNlbHNlCit6a2FuamkoZm4pIGludCAo KmZuKSgpOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7IC8qIHprYW5qaSAqLworICAgIC8qIFJl YWQgSmFwYW5lc2UgbG9jYWwgY29kZSBhbmQgdHJhbnNsYXRlIHRvIEphcGFuZXNlIEVVQyAqLwor ICAgIGludCBhOworICAgIGludCBzY1szXTsKKworICAgIC8qIE5vIHBlbmRpbmcgY2hhcmFjdGVy cyAqLworICAgIGlmIChmY2hhcnNldCA9PSBGQ19TSEpJUykgewkJLyogVHJhbnNsYXRpbmcgZnJv bSBTaGlmdC1KSVMgKi8KKyAgICAgICAgaWYgKGpwbnBuZCkgeworICAgICAgICAgICAganBucG5k LS07CisgICAgICAgICAgICByZXR1cm4oanBucGJmW2pwbnBudCsrXSk7CisgICAgICAgIH0KKyAg ICAgICAgYSA9ICgqZm4pKCk7CisJanBucG5kID0ganBucG50ID0gMDsKKwlpZiAoKChhID49IDB4 ODEpICYmIChhIDw9IDB4OWYpKSB8fAorCSAgICAoKGEgPj0gMHhlMCkgJiYgKGEgPD0gMHhmYykp KSB7IC8qIDItYnl0ZSBLYW5qaSBjb2RlICovCisJICAgIHNjWzBdID0gYTsKKwkgICAgaWYgKChz Y1sxXSA9ICgqZm4pKCkpIDwgMCkJLyogR2V0IHNlY29uZCBieXRlICovCisJICAgICAgcmV0dXJu KHNjWzFdKTsKKwkgICAgaWYgKHNjWzBdIDw9IDB4OWYpCisJICAgICAgc2NbMF0gLT0gMHg3MTsK KwkgICAgZWxzZQorCSAgICAgIHNjWzBdIC09IDB4YjE7CisJICAgIHNjWzBdID0gc2NbMF0gKiAy ICsgMTsKKwkgICAgaWYgKHNjWzFdID4gMHg3ZikKKwkgICAgICBzY1sxXS0tOworCSAgICBpZiAo c2NbMV0gPj0gMHg5ZSkgeworCSAgICAgICAgc2NbMV0gLT0gMHg3ZDsKKwkgICAgICAgIHNjWzBd Kys7CisJICAgIH0gZWxzZSB7CisJICAgICAgICBzY1sxXSAtPSAweDFmOworCSAgICB9CisJICAg IGEgPSAoc2NbMF0gfCAweDgwKTsKKwkgICAganBucGJmWzBdID0gKHNjWzFdIHwgMHg4MCk7CisJ ICAgIGpwbnBuZCA9IDE7CisJICAgIGpwbnBudCA9IDA7CisJfSBlbHNlIGlmICgoYSA+PSAweGEx KSAmJiAoYSA8PSAweGRmKSkgeyAvKiBLYXRha2FuYSAqLworCSAgICBqcG5wYmZbMF0gPSBhOwor CSAgICBqcG5wbmQgPSAxOworCSAgICBqcG5wbnQgPSAwOworCSAgICBhID0gMHg4ZTsKKwl9CisJ cmV0dXJuKGEpOworICAgIH0gZWxzZSBpZiAoZmNoYXJzZXQgPT0gRkNfSklTNyApIHsJLyogNy1i aXQgSklTIFggMDIwOCAqLworICAgICAgICBpZiAoanBucG5kKSB7CisgICAgICAgICAgICBhID0g anBucGJmW2pwbnBudCsrXTsKKwkgICAganBucG5kLS07CisgICAgICAgICAgICByZXR1cm4oYSk7 CisgICAgICAgIH0KKyAgICAgICAganBucG50ID0gMDsKKyAgICAgICAgaWYgKChhID0gKCpmbiko KSkgPCAwKQorCSAgcmV0dXJuKGEpOworICAgICAgICB3aGlsZSAoanBucG5kID09IDApIHsKKyAg ICAgICAgICAgIGlmICgoYSA+IDB4MjApICYmIChhIDwgMHg3ZikpIHsKKyAgICAgICAgICAgICAg ICBzd2l0Y2ggKGpwbnN0eikgeworCQkgIGNhc2UgMToKKwkJICAgIGpwbnBiZltqcG5wbmQrK10g PSAweDgwOyAvKiBLYXRha2FuYSAqLworCQkgICAganBucGJmW2pwbnBuZCsrXSA9IChhIHwgMHg4 MCk7CisJCSAgICBicmVhazsKKwkJICBjYXNlIDI6CisJCSAgICBqcG5wYmZbanBucG5kKytdID0g KGEgfCAweDgwKTsgLyogS2FuamkgKi8KKwkJICAgIGlmICgoYSA9ICgqZm4pKCkpIDwgMCkKKwkJ ICAgICAgcmV0dXJuKGEpOworCQkgICAganBucGJmW2pwbnBuZCsrXSA9IChhIHwgMHg4MCk7CisJ CSAgICBicmVhazsKKwkJICBkZWZhdWx0OgorCQkgICAganBucGJmW2pwbnBuZCsrXSA9IGE7IC8q IFNpbmdsZSBieXRlICovCisJCSAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICB9IGVsc2UgaWYgKGEgPT0gMHgwZSkgeworICAgICAgICAgICAgICAgIGpwbnN0eiA9IDE7 CisgICAgICAgICAgICAgICAgaWYgKChhID0gKCpmbikoKSkgPCAwKQorCQkgIHJldHVybihhKTsK KyAgICAgICAgICAgIH0gZWxzZSBpZiAoYSA9PSAweDBmKSB7CisgICAgICAgICAgICAgICAganBu c3R6ID0gMDsKKyAgICAgICAgICAgICAgICBpZiAoKGEgPSAoKmZuKSgpKSA8IDApCisJCSAgcmV0 dXJuKGEpOworICAgICAgICAgICAgfSBlbHNlIGlmIChhID09IDB4MWIpIHsKKyAgICAgICAgICAg ICAgICBqcG5wYmZbanBucG5kKytdID0gYTsJLyogRXNjYXBlICovCisgICAgICAgICAgICAgICAg aWYgKChhID0gKCpmbikoKSkgPCAwKQorCQkgIHJldHVybihhKTsKKyAgICAgICAgICAgICAgICBq cG5wYmZbanBucG5kKytdID0gYTsKKyAgICAgICAgICAgICAgICBpZiAoYSA9PSAnJCcpIHsKKyAg ICAgICAgICAgICAgICAgICAgaWYgKChhID0gKCpmbikoKSkgPCAwKQorCQkgICAgICByZXR1cm4o YSk7CisgICAgICAgICAgICAgICAgICAgIGpwbnBiZltqcG5wbmQrK10gPSBhOworICAgICAgICAg ICAgICAgICAgICBpZiAoKGEgPT0gJ0AnKSB8fCAoYSA9PSAnQicpKSB7CisgICAgICAgICAgICAg ICAgICAgICAgICBqcG5zdHogPSAyOworCQkJanBucG50ID0ganBucG5kID0gMDsKKyAgICAgICAg ICAgICAgICAgICAgICAgIGlmICgoYSA9ICgqZm4pKCkpIDwgMCkKKwkJCSAgcmV0dXJuKGEpOwor ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhID09ICco JykgeworICAgICAgICAgICAgICAgICAgICBpZiAoKGEgPSAoKmZuKSgpKSA8IDApCisJCSAgICAg IHJldHVybihhKTsKKyAgICAgICAgICAgICAgICAgICAganBucGJmW2pwbnBuZCsrXSA9IGE7Cisg ICAgICAgICAgICAgICAgICAgIGlmICgoYSA9PSAnQicpIHx8IChhID09ICdKJykpIHsKKyAgICAg ICAgICAgICAgICAgICAgICAgIGpwbnN0eiA9IDA7CisJCQlqcG5wbnQgPSBqcG5wbmQgPSAwOwor ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChhID0gKCpmbikoKSkgPCAwKQorCQkJICByZXR1 cm4oYSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYg KGEgPT0gMHgxYikgeworICAgICAgICAgICAgICAgICAgICBqcG5wbnQgPSBqcG5wbmQgPSAwOwor ICAgICAgICAgICAgICAgICAgICBpZiAoKGEgPSAoKmZuKSgpKSA8IDApCisJCSAgICAgIHJldHVy bihhKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg ICAgICAgIGpwbnBiZltqcG5wbmQrK10gPSBhOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg ICAgICAgIGpwbnBudCA9IDA7CisgICAgICAgIGEgPSBqcG5wYmZbanBucG50KytdOworCWpwbnBu ZC0tOworICAgICAgICByZXR1cm4oYSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYSA9ICgqZm4p KCk7CisgICAgICAgIHJldHVybihhKTsKKyAgICB9Cit9CisjZW5kaWYgLyogS0FOSkkgKi8KKwor LyogRXVybyBmdW5jdGlvbnMgKi8KKworI2lmZGVmIExBVElOMgorQ0hBUgorI2lmZGVmIENLX0FO U0lDCit4bDJsOShDSEFSIGMpCisjZWxzZQoreGwybDkoYykgQ0hBUiBjOworI2VuZGlmIC8qIENL X0FOU0lDICovCit7IC8qIHhsMmw5ICovIAkJCQkvKiBMYXRpbi0yIHRvIExhdGluLTkuLi4gKi8K KyAgICBzd2l0Y2ggKGMpIHsKKyAgICAgIGNhc2UgMTY5OiByZXR1cm4oKENIQVIpMTY2KTsJLyog UyBjYXJvbiAqLworICAgICAgY2FzZSAxODU6IHJldHVybigoQ0hBUikxNjgpOwkvKiBzIGNhcm9u ICovCisgICAgICBjYXNlIDE3NDogcmV0dXJuKChDSEFSKTE4MCk7CS8qIFogY2Fyb24gKi8KKyAg ICAgIGNhc2UgMTkwOiByZXR1cm4oKENIQVIpMTg0KTsJLyogeiBjYXJvbiAqLworICAgICAgZGVm YXVsdDoKKwlyZXR1cm4oeWwybDFbY10pOworICAgIH0KKworfQorCitfUFJPVE9UWVAoIENIQVIg eGwyNTgsICggQ0hBUiApICk7CitDSEFSCisjaWZkZWYgQ0tfQU5TSUMKK3hsMjU4KENIQVIgYykK KyNlbHNlCit4bDI1OChjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sgLyogeGwy NTggKi8gCQkJCS8qIExhdGluLTIgdG8gQ1A4NTguLi4gKi8KKyAgICByZXR1cm4oYyk7Cit9Cisj ZWxzZQorI2RlZmluZSB4bDJsOSBOVUxMCisjZGVmaW5lIHhsMjU4IE5VTEwKKyNlbmRpZiAvKiBM QVRJTjIgKi8KKworQ0hBUgorI2lmZGVmIENLX0FOU0lDCit6bDlhcyhDSEFSIGMpCisjZWxzZQor emw5YXMoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7IC8qIHpsOWFzICovIAkJ CQkvKiBMYXRpbi05IHRvIFVTIEFTQ0lJLi4uICovCisgICAgaWYgKGMgPCAoQ0hBUikweDgwKSBy ZXR1cm4oYyk7CS8qIFNhdmUgYSBmdW5jdGlvbiBjYWxsICovCisgICAgc3dpdGNoIChjKSB7Cisg ICAgICBjYXNlIDB4YTQ6IHJldHVybihVTkspOwkJLyogRXVybyAqLworICAgICAgY2FzZSAweGE2 OiByZXR1cm4oJ1MnKTsJCS8qIFMgQ2Fyb24gKi8KKyAgICAgIGNhc2UgMHhhODogcmV0dXJuKCdz Jyk7CQkvKiBzIENhcm9uICovCisgICAgICBjYXNlIDB4YjQ6IHJldHVybignWicpOwkJLyogWiBD YXJvbiAqLworICAgICAgY2FzZSAweGJjOiByZXR1cm4oJ08nKTsJCS8qIE9FIGRpZ3JhcGggKi8K KyAgICAgIGNhc2UgMHhiZDogcmV0dXJuKCdvJyk7CQkvKiBvZSBkaWdyYXBoICovCisgICAgICBj YXNlIDB4YmU6IHJldHVybignWScpOwkJLyogWSBkaWFlcmVzaXMgKi8KKyAgICAgIGRlZmF1bHQ6 ICAgcmV0dXJuKHpsMWFzKGMpKTsJLyogVGhlIHJlc3QgaXMgbGlrZSBMYXRpbi0xICovCisgICAg fQorfQorCitfUFJPVE9UWVAoIENIQVIgeGw5YXMsICggQ0hBUiApICk7CitDSEFSCisjaWZkZWYg Q0tfQU5TSUMKK3hsOWFzKENIQVIgYykKKyNlbHNlCit4bDlhcyhjKSBDSEFSIGM7CisjZW5kaWYg LyogQ0tfQU5TSUMgKi8KK3sgLyogeGw5YXMgKi8gCQkJCS8qIExhdGluLTkgdG8gVVMgQVNDSUku Li4gKi8KKyAgICBpZiAoYyA8IChDSEFSKTB4ODApIHJldHVybihjKTsJLyogU2F2ZSBhIGZ1bmN0 aW9uIGNhbGwgKi8KKyAgICBzd2l0Y2ggKGMpIHsKKyAgICAgIGNhc2UgMHhhNDogcmV0dXJuKFVO Syk7CQkvKiBFdXJvICovCisgICAgICBjYXNlIDB4YTY6IHJldHVybignUycpOwkJLyogUyBDYXJv biAqLworICAgICAgY2FzZSAweGE4OiByZXR1cm4oJ3MnKTsJCS8qIHMgQ2Fyb24gKi8KKyAgICAg IGNhc2UgMHhiNDogcmV0dXJuKCdaJyk7CQkvKiBaIENhcm9uICovCisgICAgICBjYXNlIDB4Yjg6 IHJldHVybigneicpOwkJLyogeiBDYXJvbiAqLworICAgICAgY2FzZSAweGJjOiByZXR1cm4oJ08n KTsJCS8qIE9FIGRpZ3JhcGggKi8KKyAgICAgIGNhc2UgMHhiZDogcmV0dXJuKCdvJyk7CQkvKiBv ZSBkaWdyYXBoICovCisgICAgICBjYXNlIDB4YmU6IHJldHVybignWScpOwkJLyogWSBkaWFlcmVz aXMgKi8KKyAgICAgIGRlZmF1bHQ6ICAgcmV0dXJuKHhsMWFzKGMpKTsJLyogVGhlIHJlc3QgaXMg bGlrZSBMYXRpbi0xICovCisgICAgfQorfQorCitDSEFSCQkJCQkvKiBDUDEyNTIgdG8gTGF0aW4t OSAqLworI2lmZGVmIENLX0FOU0lDCit4dzFsOShDSEFSIGMpCisjZWxzZQoreHcxbDkoYykgQ0hB UiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7IC8qIHh3MWw5ICovCisgICAgc3dpdGNoIChj KSB7CisgICAgICBjYXNlIDB4ODA6IHJldHVybigweGE0KTsJCS8qIEV1cm8gc2lnbiAqLworICAg ICAgY2FzZSAweDhhOiByZXR1cm4oMHhhNik7CQkvKiBTIGNhcm9uICovCisgICAgICBjYXNlIDB4 OGM6IHJldHVybigweGJjKTsJCS8qIE9FICovCisgICAgICBjYXNlIDB4OGU6IHJldHVybigweGI0 KTsJCS8qIFogY2Fyb24gKi8KKyAgICAgIGNhc2UgMHg5YTogcmV0dXJuKDB4YTgpOwkJLyogcyBj YXJvbiAqLworICAgICAgY2FzZSAweDljOiByZXR1cm4oMHhiZCk7CQkvKiBvZSAqLworICAgICAg Y2FzZSAweDllOiByZXR1cm4oMHhiOCk7CQkvKiB6IGNhcm9uICovCisgICAgICBjYXNlIDB4OWY6 IHJldHVybigweGJlKTsJCS8qIFkgZGlhZXJlc2lzICovCisgICAgICBjYXNlIDB4YTQ6CQkJLyog Q3VycmVuY3kgc2lnbiAqLworICAgICAgY2FzZSAweGE2OgkJCS8qIEJyb2tlbiB2ZXJ0aWNhbCBi YXIgKi8KKyAgICAgIGNhc2UgMHhhODoJCQkvKiBEaWFlcmVzaXMgKi8KKyAgICAgIGNhc2UgMHhi NDoJCQkvKiBBY3V0ZSBhY2NlbnQgKi8KKyAgICAgIGNhc2UgMHhiODoJCQkvKiBDZWRpbGxhICov CisgICAgICBjYXNlIDB4YmM6CQkJLyogMS80ICovCisgICAgICBjYXNlIDB4YmQ6CQkJLyogMS8y ICovCisgICAgICBjYXNlIDB4YmU6IHJldHVybignPycpOwkJLyogMy80ICovCisgICAgICBkZWZh dWx0OiByZXR1cm4oKGMgPCAxNjApID8geHcxYXMoYykgOiBjKTsKKyAgICB9Cit9CisKKyNpZmRl ZiBMQVRJTjIKK0NIQVIKKyNpZmRlZiBDS19BTlNJQworeGw5bDIoQ0hBUiBjKQorI2Vsc2UKK3hs OWwyKGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeyAvKiB4bDlsMiAqLyAJCQkJ LyogTGF0aW4tOSB0byBMYXRpbi0yLi4uICovCisgICAgaWYgKGMgPCAoQ0hBUikweDgwKSByZXR1 cm4oYyk7CS8qIFNhdmUgYSBmdW5jdGlvbiBjYWxsICovCisgICAgc3dpdGNoIChjKSB7CisgICAg ICBjYXNlIDB4YTQ6IHJldHVybihVTkspOwkJLyogRXVybyAqLworICAgICAgY2FzZSAweGE2OiBy ZXR1cm4oKENIQVIpMHhhOSk7CS8qIFMgQ2Fyb24gKi8KKyAgICAgIGNhc2UgMHhhODogcmV0dXJu KChDSEFSKTB4YjkpOwkvKiBzIENhcm9uICovCisgICAgICBjYXNlIDB4YjQ6IHJldHVybigoQ0hB UikweGFlKTsJLyogWiBDYXJvbiAqLworICAgICAgY2FzZSAweGI4OiByZXR1cm4oKENIQVIpMHhh Zik7CS8qIHogQ2Fyb24gKi8KKyAgICAgIGNhc2UgMHhiYzogcmV0dXJuKCdPJyk7CQkvKiBPRSBk aWdyYXBoICovCisgICAgICBjYXNlIDB4YmQ6IHJldHVybignbycpOwkJLyogb2UgZGlncmFwaCAq LworICAgICAgY2FzZSAweGJlOiByZXR1cm4oJ1knKTsJCS8qIFkgZGlhZXJlc2lzICovCisgICAg ICBkZWZhdWx0OiAgIHJldHVybih4bDFsMihjKSk7CS8qIFRoZSByZXN0IGlzIGxpa2UgTGF0aW4t MSAqLworICAgIH0KK30KKyNlbHNlCisjZGVmaW5lIHhsOWwyIE5VTEwKKyNlbmRpZiAvKiBMQVRJ TjIgKi8KKworQ0hBUgorI2lmZGVmIENLX0FOU0lDCit4bDk1OChDSEFSIGMpCisjZWxzZQoreGw5 NTgoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7IC8qIHhsOTU4ICovIAkJCQkv KiBMYXRpbi05IHRvIENQODU4Li4uICovCisgICAgaWYgKGMgPT0gMHhhNCkJCQkvKiBFdXJvIFN5 bWJvbCAqLworICAgICAgcmV0dXJuKChDSEFSKTB4ZDUpOworICAgIGVsc2UgaWYgKGMgPT0gMHg5 ZSkJCQkvKiBUaGlzIHdhcyBjdXJyZW5jeSBzeW1ib2wgKi8KKyAgICAgIHJldHVybigoQ0hBUikw eGNmKTsKKyAgICBjID0geWwxODVbY107CisgICAgcmV0dXJuKGMpOworfQorCitDSEFSCisjaWZk ZWYgQ0tfQU5TSUMKK3g1OGFzKENIQVIgYykKKyNlbHNlCit4NThhcyhjKSBDSEFSIGM7CisjZW5k aWYgLyogQ0tfQU5TSUMgKi8KK3sgLyogeDU4YXMgKi8gCQkJCS8qIENQODU4IHRvIFVTIEFTQ0lJ Li4uICovCisgICAgaWYgKGMgPT0gMHhkNSkJCQkvKiBFdXJvIHJhdGhlciB0aGFuIGRvdGxlc3Mg aSAqLworICAgICAgcmV0dXJuKFVOSyk7CisgICAgZWxzZQorICAgICAgcmV0dXJuKHg4NWFzKGMp KTsJCQkvKiBUaGUgcmVzdCBpcyBsaWtlIENQODUwICovCit9CisKK0NIQVIKKyNpZmRlZiBDS19B TlNJQworeDU4bDEoQ0hBUiBjKQorI2Vsc2UKK3g1OGwxKGMpIENIQVIgYzsKKyNlbmRpZiAvKiBD S19BTlNJQyAqLworeyAvKiB4NThsMSAqLyAJCQkJLyogQ1A4NTggdG8gTGF0aW4tMS4uLiAqLwor ICAgIGlmIChjID09IDB4ZDUpCQkJLyogRXVybyByYXRoZXIgdGhhbiBkb3RsZXNzIGkgKi8KKyAg ICAgIHJldHVybigoQ0hBUikweGE0KTsJCS8qIFJldHVybiBjdXJyZW5jeSBzeW1ib2wgKi8KKyAg ICBlbHNlIGlmIChjID09IDB4Y2YpCQkJLyogVGhpcyBrZWVwcyBpdCBpbnZlcnRpYmxlICovCisg ICAgICByZXR1cm4oKENIQVIpMHg5ZSk7CisgICAgZWxzZQorICAgICAgcmV0dXJuKHg4NWwxKGMp KTsKK30KKworI2lmZGVmIExBVElOMgorQ0hBUgorI2lmZGVmIENLX0FOU0lDCit4NThsMihDSEFS IGMpCisjZWxzZQoreDU4bDIoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7IC8q IHg1OGwyICovIAkJCQkvKiBDUDg1OCB0byBMYXRpbi0yLi4uICovCisgICAgaWYgKGMgPT0gMHhk NSkJCQkvKiBFdXJvIHJhdGhlciB0aGFuIGRvdGxlc3MgaSAqLworICAgICAgcmV0dXJuKChDSEFS KTB4YTQpOwkJLyogUmV0dXJuIGN1cnJlbmN5IHN5bWJvbCAqLworICAgIGVsc2UgaWYgKGMgPT0g MHhjZikJCQkvKiBUaGlzIGtlZXBzIGl0IGludmVydGlibGUgKi8KKyAgICAgIHJldHVybigoQ0hB UikweDllKTsJCS8qIChpZiBpdCBldmVyIHdhcy4uLikgKi8KKyAgICBlbHNlCQkJCS8qIE90aGVy d2lzZSBsaWtlIENQODUwICovCisgICAgICByZXR1cm4oeDg1bDIoYykpOworfQorI2Vsc2UKKyNk ZWZpbmUgeDU4bDIgTlVMTAorI2VuZGlmIC8qIExBVElOMiAqLworCitDSEFSCisjaWZkZWYgQ0tf QU5TSUMKK3g1OGw5KENIQVIgYykKKyNlbHNlCit4NThsOShjKSBDSEFSIGM7CisjZW5kaWYgLyog Q0tfQU5TSUMgKi8KK3sgLyogeDU4bDkgKi8gCQkJCS8qIENQLTg1OCB0byBMYXRpbi05Li4uICov CisgICAgaWYgKGMgPT0gMHhkNSkJCQkvKiBFdXJvIHJhdGhlciB0aGFuIGRvdGxlc3MgaSAqLwor ICAgICAgcmV0dXJuKChDSEFSKTB4YTQpOwkJLyogUmV0dXJuIGN1cnJlbmN5IHN5bWJvbCAqLwor ICAgIGVsc2UgaWYgKGMgPT0gMHhjZikJCQkvKiBUaGlzIGtlZXBzIGl0IGludmVydGlibGUgKi8K KyAgICAgIHJldHVybigoQ0hBUikweDllKTsJCS8qIChpZiBpdCBldmVyIHdhcy4uLikgKi8KKyAg ICBlbHNlCQkJCS8qIE90aGVyd2lzZSBsaWtlIENQODUwICovCisgICAgICByZXR1cm4oeDg1bDEo YykpOwkJCS8qIHRvIExhdGluLTEgKi8KK30KKworLyogRW5kIEV1cm8gZnVuY3Rpb25zICovCisK KworLyogIFRBQkxFUyBPRiBUUkFOU0xBVElPTiBGVU5DVElPTlMgKi8KKworLyoKKyAgRmlyc3Qs IHRoZSB0YWJsZSBvZiB0cmFuc2xhdGlvbiBmdW5jdGlvbnMgZm9yIFJFQ0VJVklORyBmaWxlcy4g IFRoYXQgaXMsCisgICpmcm9tKiB0aGUgVFJBTlNGRVIgY2hhcmFjdGVyIHNldCAqdG8qIHRoZSBG SUxFIGNoYXJhY3RlciBzZXQsIGFuIGFycmF5IG9mCisgIHBvaW50ZXJzIHRvIGZ1bmN0aW9ucy4g IFRoZSBmaXJzdCBpbmRleCBpcyB0aGUgVFJBTlNGRVIgQ0hBUkFDVEVSLVNFVAorICBudW1iZXIs IHRoZSBzZWNvbmQgaW5kZXggaXMgdGhlIEZJTEUgQ0hBUkFDVEVSLVNFVCBudW1iZXIuCisKKyAg VGhlc2UgYXJyYXlzIG11c3QgYmUgZnVsbHkgcG9wdWxhdGVkLCBldmVuIGlmIChhcyBpcyB0aGUg Y2FzZSB3aXRoIEthbmppCisgIGNoYXJhY3RlciBzZXRzKSwgYWxsIHRoZSBlbnRyaWVzIGFyZSBO VUxMLiAgT3RoZXJ3aXNlLCBzdWJzY3JpcHQKKyAgY2FsY3VsYXRpb25zIHdpbGwgYmUgd3Jvbmcg YW5kIHdlJ2xsIHVzZSB0aGUgd3JvbmcgZnVuY3Rpb25zLgorKi8KKworLyogUG9pbnRlcnMgdG8g Ynl0ZS1mb3ItYnl0ZSB0cmFuc2xhdGlvbiBmdW5jdGlvbnMgKi8KKworX1BST1RPVFlQKCBDSEFS ICgqcngpLCAoQ0hBUikgKTsKK19QUk9UT1RZUCggQ0hBUiAoKnN4KSwgKENIQVIpICk7CisKKyNp ZmRlZiBVTklDT0RFCitfUFJPVE9UWVAoIGludCAoKnh1dCksIChVU0hPUlQpICk7CS8qIFRyYW5z bGF0aW9uIGZ1bmN0aW9uIFVDUyB0byBUQ1MgKi8KK19QUk9UT1RZUCggaW50ICgqeHVmKSwgKFVT SE9SVCkgKTsJLyogVHJhbnNsYXRpb24gZnVuY3Rpb24gVUNTIHRvIEZDUyAqLworX1BST1RPVFlQ KCBVU0hPUlQgKCp4dHUpLCAoQ0hBUikgKTsJLyogVHJhbnNsYXRpb24gZnVuY3Rpb24gVENTIHRv IFVDUyAqLworX1BST1RPVFlQKCBVU0hPUlQgKCp4ZnUpLCAoQ0hBUikgKTsJLyogVHJhbnNsYXRp b24gZnVuY3Rpb24gRkNTIHRvIFVDUyAqLworI2VuZGlmIC8qIFVOSUNPREUgKi8KKworI2lmZGVm IENLX0FOU0lDCitDSEFSICgqeGxyW01BWFRDU0VUUysxXVtNQVhGQ1NFVFMrMV0pKENIQVIpID0K KyNlbHNlCitDSEFSICgqeGxyW01BWFRDU0VUUysxXVtNQVhGQ1NFVFMrMV0pKCkgPQorI2VuZGlm IC8qIENLX0FOU0lDICovCit7CisgICAgTlVMTCwJCQkvKiAwLDAgdHJhbnNwYXJlbnQgdG8gdXMg YXNjaWkgKi8KKyAgICBOVUxMLAkJCS8qIDAsMSB0cmFuc3BhcmVudCB0byB1ayBhc2NpaSAqLwor ICAgIE5VTEwsCQkJLyogMCwyIHRyYW5zcGFyZW50IHRvIGR1dGNoIG5yYyAqLworICAgIE5VTEws CQkJLyogMCwzIHRyYW5zcGFyZW50IHRvIGZpbm5pc2ggbnJjICovCisgICAgTlVMTCwJCQkvKiAw LDQgdHJhbnNwYXJlbnQgdG8gZnJlbmNoIG5yYyAqLworICAgIE5VTEwsCQkJLyogMCw1IHRyYW5z cGFyZW50IHRvIGZyLWNhbmFkaWFuIG5yYyAqLworICAgIE5VTEwsCQkJLyogMCw2IHRyYW5zcGFy ZW50IHRvIGdlcm1hbiBucmMgKi8KKyAgICBOVUxMLAkJCS8qIDAsNyB0cmFuc3BhcmVudCB0byBo dW5nYXJpYW4gbnJjICovCisgICAgTlVMTCwJCQkvKiAwLDggdHJhbnNwYXJlbnQgdG8gaXRhbGlh biBucmMgKi8KKyAgICBOVUxMLAkJCS8qIDAsOSB0cmFuc3BhcmVudCB0byBub3JnZS9kYW5pc2gg bnJjICovCisgICAgTlVMTCwJCQkvKiAwLDEwIHRyYW5zcGFyZW50IHRvIHBvcnR1Z3Vlc2UgbnJj ICovCisgICAgTlVMTCwJCQkvKiAwLDExIHRyYW5zcGFyZW50IHRvIHNwYW5pc2ggbnJjICovCisg ICAgTlVMTCwJCQkvKiAwLDEyIHRyYW5zcGFyZW50IHRvIHN3ZWRpc2ggbnJjICovCisgICAgTlVM TCwJCQkvKiAwLDEzIHRyYW5zcGFyZW50IHRvIHN3aXNzIG5yYyAqLworICAgIE5VTEwsCQkJLyog MCwxNCB0cmFuc3BhcmVudCB0byBsYXRpbi0xICovCisgICAgTlVMTCwJCQkvKiAwLDE1IHRyYW5z cGFyZW50IHRvIGxhdGluLTIgKi8KKyAgICBOVUxMLAkJCS8qIDAsMTYgdHJhbnNwYXJlbnQgdG8g REVDIE1DUyAqLworICAgIE5VTEwsCQkJLyogMCwxNyB0cmFuc3BhcmVudCB0byBOZVhUICovCisg ICAgTlVMTCwJCQkvKiAwLDE4IHRyYW5zcGFyZW50IHRvIENQNDM3ICovCisgICAgTlVMTCwJCQkv KiAwLDE5IHRyYW5zcGFyZW50IHRvIENQODUwICovCisgICAgTlVMTCwJCQkvKiAwLDIwIHRyYW5z cGFyZW50IHRvIENQODUyICovCisgICAgTlVMTCwJCQkvKiAwLDIxIHRyYW5zcGFyZW50IHRvIE1h Y2ludG9zaCBMYXRpbiAqLworICAgIE5VTEwsCQkJLyogMCwyMiB0cmFuc3BhcmVudCB0byBER0kg Ki8KKyAgICBOVUxMLAkJCS8qIDAsMjMgdHJhbnNwYXJlbnQgdG8gSFAgKi8KKyAgICBOVUxMLAkJ CS8qIDAsMjQgdHJhbnNwYXJlbnQgdG8gTGF0aW4vQ3lyaWxsaWMgKi8KKyAgICBOVUxMLCAgICAg ICAgICAgICAgICAgICAgICAgLyogMCwyNSB0cmFuc3BhcmVudCB0byBDUDg2NiAqLworICAgIE5V TEwsCQkJLyogMCwyNiB0cmFuc3BhcmVudCB0byBTaG9ydCBLT0ktNyAqLworICAgIE5VTEwsICAg ICAgICAgICAgICAgICAgICAgICAvKiAwLDI3IHRyYW5zcGFyZW50IHRvIE9sZCBLT0ktOCBDeXJp bGxpYyAqLworICAgIE5VTEwsCQkJLyogMCwyOCB0cmFuc3BhcmVudCB0byBKSVMtNyAqLworICAg IE5VTEwsCQkJLyogMCwyOSB0cmFuc3BhcmVudCB0byBTaGlmdC1KSVMgKi8KKyAgICBOVUxMLAkJ CS8qIDAsMzAgdHJhbnNwYXJlbnQgdG8gSi1FVUMgKi8KKyAgICBOVUxMLAkJCS8qIDAsMzEgdHJh bnNwYXJlbnQgdG8gREVDIEthbmppICovCisgICAgTlVMTCwJCQkvKiAwLDMyIHRyYW5zcGFyZW50 IHRvIEhlYnJldy03ICovCisgICAgTlVMTCwJCQkvKiAwLDMzIHRyYW5zcGFyZW50IHRvIExhdGlu L0hlYnJldyAqLworICAgIE5VTEwsCQkJLyogMCwzNCB0cmFuc3BhcmVudCB0byBDUDg2MiBIZWJy ZXcgKi8KKyAgICBOVUxMLAkJCS8qIDAsMzUgdHJhbnNwYXJlbnQgdG8gRUxPVCA5MjcgR3JlZWsg Ki8KKyAgICBOVUxMLAkJCS8qIDAsMzYgdHJhbnNwYXJlbnQgdG8gTGF0aW4vR3JlZWsgKi8KKyAg ICBOVUxMLAkJCS8qIDAsMzcgdHJhbnNwYXJlbnQgdG8gQ1A4NjkgKi8KKyAgICBOVUxMLAkJCS8q IDAsMzggdHJhbnNwYXJlbnQgdG8gTGF0aW4tOSAqLworICAgIE5VTEwsCQkJLyogMCwzOSB0cmFu c3BhcmVudCB0byBDUDg1OCAqLworICAgIE5VTEwsCQkJLyogMCw0MCB0cmFuc3BhcmVudCB0byBD UDg1NSAqLworICAgIE5VTEwsCQkJLyogMCw0MSB0cmFuc3BhcmVudCB0byBDUDEyNTEgKi8KKyAg ICBOVUxMLAkJCS8qIDAsNDIgdHJhbnNwYXJlbnQgdG8gQnVsZ2FyaWFuICovCisgICAgTlVMTCwJ CQkvKiAwLDQzIHRyYW5zcGFyZW50IHRvIENQMTI1MCAqLworICAgIE5VTEwsCQkJLyogMCw0NCB0 cmFuc3BhcmVudCB0byBNYXpvdmlhICovCisgICAgTlVMTCwJCQkvKiAwLDQ1IHRyYW5zcGFyZW50 IHRvIFVDUy0yICovCisgICAgTlVMTCwJCQkvKiAwLDQ2IHRyYW5zcGFyZW50IHRvIFVURi04ICov CisgICAgTlVMTCwJCQkvKiAwLDQ3IHRyYW5zcGFyZW50IHRvIEtPSThSICovCisgICAgTlVMTCwJ CQkvKiAwLDQ4IHRyYW5zcGFyZW50IHRvIEtPSThVICovCisgICAgTlVMTCwJCQkvKiAwLDQ5IHRy YW5zcGFyZW50IHRvIENQMTI1MiAqLworICAgIE5VTEwsCQkJLyogMSwwIGFzY2lpIHRvIHVzIGFz Y2lpICovCisgICAgTlVMTCwJCQkvKiAxLDEgYXNjaWkgdG8gdWsgYXNjaWkgKi8KKyAgICBOVUxM LAkJCS8qIDEsMiBhc2NpaSB0byBkdXRjaCBucmMgKi8KKyAgICBOVUxMLAkJCS8qIDEsMyBhc2Np aSB0byBmaW5uaXNoIG5yYyAqLworICAgIE5VTEwsCQkJLyogMSw0IGFzY2lpIHRvIGZyZW5jaCBu cmMgKi8KKyAgICBOVUxMLAkJCS8qIDEsNSBhc2NpaSB0byBmci1jYW5hZGlhbiBucmMgKi8KKyAg ICBOVUxMLAkJCS8qIDEsNiBhc2NpaSB0byBnZXJtYW4gbnJjICovCisgICAgTlVMTCwJCQkvKiAx LDcgYXNjaWkgdG8gaHVuZ2FyaWFuIG5yYyAqLworICAgIE5VTEwsCQkJLyogMSw4IGFzY2lpIHRv IGl0YWxpYW4gbnJjICovCisgICAgTlVMTCwJCQkvKiAxLDkgYXNjaWkgdG8gbm9yZ2UvZGFuaXNo IG5yYyAqLworICAgIE5VTEwsCQkJLyogMSwxMCBhc2NpaSB0byBwb3J0dWd1ZXNlIG5yYyAqLwor ICAgIE5VTEwsCQkJLyogMSwxMSBhc2NpaSB0byBzcGFuaXNoIG5yYyAqLworICAgIE5VTEwsCQkJ LyogMSwxMiBhc2NpaSB0byBzd2VkaXNoIG5yYyAqLworICAgIE5VTEwsCQkJLyogMSwxMyBhc2Np aSB0byBzd2lzcyBucmMgKi8KKyAgICBOVUxMLAkJCS8qIDEsMTQgYXNjaWkgdG8gbGF0aW4tMSAq LworICAgIE5VTEwsCQkJLyogMSwxNSBhc2NpaSB0byBsYXRpbi0yICovCisgICAgTlVMTCwJCQkv KiAxLDE2IGFzY2lpIHRvIERFQyBNQ1MgKi8KKyAgICBOVUxMLAkJCS8qIDEsMTcgYXNjaWkgdG8g TmVYVCAqLworICAgIE5VTEwsCQkJLyogMSwxOCBhc2NpaSB0byBDUDQzNyAqLworICAgIE5VTEws CQkJLyogMSwxOSBhc2NpaSB0byBDUDg1MCAqLworICAgIE5VTEwsCQkJLyogMSwyMCBhc2NpaSB0 byBDUDg1MiAqLworICAgIE5VTEwsCQkJLyogMSwyMSBhc2NpaSB0byBNYWNpbnRvc2ggTGF0aW4g Ki8KKyAgICBOVUxMLAkJCS8qIDEsMjIgYXNjaWkgdG8gREdJICovCisgICAgTlVMTCwJCQkvKiAx LDIzIGFzY2lpIHRvIEhQICovCisgICAgeGFzbGMsICAgICAgICAgICAgICAgICAgICAgIC8qIDEs MjQgYXNjaWkgdG8gTGF0aW4vQ3lyaWxsaWMgKi8KKyAgICB4YXNhYywgICAgICAgICAgICAgICAg ICAgICAgLyogMSwyNSBhc2NpaSB0byBDUDg2NiAqLworICAgIHhhc3NrLCAgICAgICAgICAgICAg ICAgICAgICAvKiAxLDI2IGFzY2lpIHRvIFNob3J0IEtPSSAqLworICAgIHhhc2s4LCAgICAgICAg ICAgICAgICAgICAgICAvKiAxLDI3IGFzY2lpIHRvIE9sZCBLT0ktOCBDeXJpbGxpYyAqLworICAg IE5VTEwsCQkJLyogMSwyOCBhc2NpaSB0byBKSVMtNyAqLworICAgIE5VTEwsCQkJLyogMSwyOSBh c2NpaSB0byBTaGlmdC1KSVMgKi8KKyAgICBOVUxMLAkJCS8qIDEsMzAgYXNjaWkgdG8gSi1FVUMg Ki8KKyAgICBOVUxMLAkJCS8qIDEsMzEgYXNjaWkgdG8gREVDIEthbmppICovCisgICAgeGFzaDcs CQkJLyogMSwzMiBhc2NpaSB0byBIZWJyZXctNyAqLworICAgIE5VTEwsCQkJLyogMSwzMyBhc2Np aSB0byBMYXRpbi9IZWJyZXcgKi8KKyAgICBOVUxMLAkJCS8qIDEsMzQgYXNjaWkgdG8gQ1A4NjIg SGVicmV3ICovCisgICAgeGFzZWcsCQkJLyogMSwzNSBhc2NpaSB0byBFTE9UIDkyNyBHcmVlayAq LworICAgIE5VTEwsCQkJLyogMSwzNiBhc2NpaSB0byBMYXRpbi9HcmVlayAqLworICAgIE5VTEws CQkJLyogMSwzNyBhc2NpaSB0byBDUDg2OSAqLworICAgIE5VTEwsCQkJLyogMSwzOCBhc2NpaSB0 byBMYXRpbi05ICovCisgICAgTlVMTCwJCQkvKiAxLDM5IGFzY2lpIHRvIENQODU4ICovCisgICAg eGFzNTUsCQkJLyogMSw0MCBhc2NpaSB0byBDUDg1NSAqLworICAgIHhhczEyNTEsCQkJLyogMSw0 MSBhc2NpaSB0byBDUDEyNTEgKi8KKyAgICB4bGVmdDEyOCwJCQkvKiAxLDQyIGFzY2lpIHRvIGJ1 bGdhcmlhbiAqLworICAgIHhsZWZ0MTI4LAkJCS8qIDEsNDMgYXNjaWkgdG8gQ1AxMjUwICovCisg ICAgeGxlZnQxMjgsCQkJLyogMSw0NCBhc2NpaSB0byBNYXpvdmlhICovCisgICAgTlVMTCwJCQkv KiAxLDQ1IGFzY2lpIHRvIFVDUy0yICovCisgICAgTlVMTCwJCQkvKiAxLDQ2IGFzY2lpIHRvIFVU Ri04ICovCisgICAgTlVMTCwJCQkvKiAxLDQ3IGFzY2lpIHRvIEtPSTgtUiAqLworICAgIE5VTEws CQkJLyogMSw0OCBhc2NpaSB0byBLT0k4LVUgKi8KKyAgICBOVUxMLAkJCS8qIDEsNDkgYXNjaWkg dG8gQ1AxMjUyICovCisgICAgemwxYXMsCQkJLyogMiwwIGxhdGluLTEgdG8gdXMgYXNjaWkgKi8K KyAgICB4bDF1aywJCQkvKiAyLDEgbGF0aW4tMSB0byB1ayBhc2NpaSAqLworICAgIHhsMWR1LAkJ CS8qIDIsMiBsYXRpbi0xIHRvIGR1dGNoIG5yYyAqLworICAgIHhsMWZpLAkJCS8qIDIsMyBsYXRp bi0xIHRvIGZpbm5pc2ggbnJjICovCisgICAgeGwxZnIsCQkJLyogMiw0IGxhdGluLTEgdG8gZnJl bmNoIG5yYyAqLworICAgIHhsMWZjLAkJCS8qIDIsNSBsYXRpbi0xIHRvIGZyLWNhbmFkaWFuIG5y YyAqLworICAgIHhsMWdlLAkJCS8qIDIsNiBsYXRpbi0xIHRvIGdlcm1hbiBucmMgKi8KKyAgICB4 bDFpdCwJCQkvKiAyLDcgbGF0aW4tMSB0byBpdGFsaWFuIG5yYyAqLworICAgIHhsMWh1LAkJCS8q IDIsOCBsYXRpbi0xIHRvIGh1bmdhcmlhbiBucmMgKi8KKyAgICB4bDFubywJCQkvKiAyLDkgbGF0 aW4tMSB0byBub3JnZS9kYW5pc2ggbnJjICovCisgICAgeGwxcG8sCQkJLyogMiwxMCBsYXRpbi0x IHRvIHBvcnR1Z3Vlc2UgbnJjICovCisgICAgeGwxc3AsCQkJLyogMiwxMSBsYXRpbi0xIHRvIHNw YW5pc2ggbnJjICovCisgICAgeGwxc3csCQkJLyogMiwxMiBsYXRpbi0xIHRvIHN3ZWRpc2ggbnJj ICovCisgICAgeGwxY2gsCQkJLyogMiwxMyBsYXRpbi0xIHRvIHN3aXNzIG5yYyAqLworICAgIE5V TEwsCQkJLyogMiwxNCBsYXRpbi0xIHRvIGxhdGluLTEgKi8KKyAgICB4bDFsMiwJCQkvKiAyLDE1 IGxhdGluLTEgdG8gbGF0aW4tMiAqLworICAgIHhsMWRtLAkJCS8qIDIsMTYgbGF0aW4tMSB0byBE RUMgTUNTICovCisgICAgeGwxbmUsCQkJLyogMiwxNyBsYXRpbi0xIHRvIE5lWFQgKi8KKyAgICB4 bDE0MywJCQkvKiAyLDE4IGxhdGluLTEgdG8gQ1A0MzcgKi8KKyAgICB4bDE4NSwJCQkvKiAyLDE5 IGxhdGluLTEgdG8gQ1A4NTAgKi8KKyAgICB4bDE1MiwJCQkvKiAyLDIwIGxhdGluLTEgdG8gQ1A4 NTIgKi8KKyAgICB4bDFhcSwJCQkvKiAyLDIxIGxhdGluLTEgdG8gTWFjaW50b3NoIExhdGluICov CisgICAgeGwxZGcsCQkJLyogMiwyMiBsYXRpbi0xIHRvIERHSSAqLworICAgIHhsMXI4LAkJCS8q IDIsMjMgbGF0aW4tMSB0byBIUCBSb21hbjggKi8KKyAgICB6bDFhcywJCQkvKiAyLDI0IGxhdGlu LTEgdG8gTGF0aW4vQ3lyaWxsaWMgKi8KKyAgICB6bDFhcywgICAgICAgICAgICAgICAgICAgICAg LyogMiwyNSBsYXRpbi0xIHRvIENQODY2ICovCisgICAgeGwxc2ssICAgICAgICAgICAgICAgICAg ICAgIC8qIDIsMjYgbGF0aW4tMSB0byBTaG9ydCBLT0kgKi8KKyAgICB6bDFhcywJCSAgICAgICAJ LyogMiwyNyBsYXRpbi0xIHRvIE9sZCBLT0ktOCBDeXJpbGxpYyAqLworICAgIE5VTEwsCQkJLyog MiwyOCBsYXRpbi0xIHRvIEpJUy03ICovCisgICAgTlVMTCwJCQkvKiAyLDI5IGxhdGluLTEgdG8g U2hpZnQtSklTICovCisgICAgTlVMTCwJCQkvKiAyLDMwIGxhdGluLTEgdG8gSi1FVUMgKi8KKyAg ICBOVUxMLAkJCS8qIDIsMzEgbGF0aW4tMSB0byBERUMgS2FuamkgKi8KKyAgICB4bDFoNywJCQkv KiAyLDMyIGxhdGluLTEgdG8gSGVicmV3LTcgKi8KKyAgICB4bDFsaCwJCQkvKiAyLDMzIGxhdGlu LTEgdG8gTGF0aW4vSGVicmV3ICovCisgICAgeGwxNjIsCQkJLyogMiwzNCBsYXRpbi0xIHRvIENQ ODYyIEhlYnJldyAqLworICAgIHhsMWVnLAkJCS8qIDIsMzUgbGF0aW4tMSB0byBFTE9UIDkyNyBH cmVlayAqLworICAgIHhsMWxnLAkJCS8qIDIsMzYgbGF0aW4tMSB0byBMYXRpbi9HcmVlayAqLwor ICAgIHhsMTY5LAkJCS8qIDIsMzcgbGF0aW4tMSB0byBDUDg2OSAqLworICAgIE5VTEwsCQkJLyog MiwzOCBsYXRpbi0xIHRvIExhdGluOSAqLworICAgIHhsMTg1LAkJCS8qIDIsMzkgbGF0aW4tMSB0 byBDUDg1OCAqLworICAgIHpsMWFzLAkJCS8qIDIsNDAgbGF0aW4tMSB0byBDUDg1NSAqLworICAg IHpsMWFzLAkJCS8qIDIsNDEgbGF0aW4tMSB0byBDUDEyNTEgKi8KKyAgICB6bDFhcywJCQkvKiAy LDQyIGxhdGluLTEgdG8gQnVsZ2FyaWFuICovCisgICAgeGwxMTI1MCwJCQkvKiAyLDQzIGxhdGlu LTEgdG8gQ1AxMjUwICovCisgICAgeGwxbXosCQkJLyogMiw0NCBsYXRpbi0xIHRvIE1hem92aWEg Ki8KKyAgICBOVUxMLAkJCS8qIDIsNDUgbGF0aW4tMSB0byBVQ1MtMiAqLworICAgIE5VTEwsCQkJ LyogMiw0NiBsYXRpbi0xIHRvIFVURi04ICovCisgICAgemwxYXMsCQkJLyogMiw0NyBsYXRpbi0x IHRvIEtPSThSICovCisgICAgemwxYXMsCQkJLyogMiw0OCBsYXRpbi0xIHRvIEtPSThVICovCisg ICAgeGwxdzEsCQkJLyogMiw0OSBsYXRpbi0xIHRvIENQMTI1MiAqLworICAgIHhsMmFzLAkJCS8q IDMsMCBsYXRpbi0yIHRvIHVzIGFzY2lpICovCisgICAgeGwyYXMsCQkJLyogMywxIGxhdGluLTIg dG8gdWsgYXNjaWkgKi8KKyAgICB4bDJhcywJCQkvKiAzLDIgbGF0aW4tMiB0byBkdXRjaCBucmMg Ki8KKyAgICB4bDJhcywJCQkvKiAzLDMgbGF0aW4tMiB0byBmaW5uaXNoIG5yYyAqLworICAgIHhs MmFzLAkJCS8qIDMsNCBsYXRpbi0yIHRvIGZyZW5jaCBucmMgKi8KKyAgICB4bDJhcywJCQkvKiAz LDUgbGF0aW4tMiB0byBmci1jYW5hZGlhbiBucmMgKi8KKyAgICB4bDJhcywJCQkvKiAzLDYgbGF0 aW4tMiB0byBnZXJtYW4gbnJjICovCisgICAgeGwyYXMsCQkJLyogMyw3IGxhdGluLTIgdG8gaXRh bGlhbiBucmMgKi8KKyAgICB4bDJhcywJCQkvKiAzLDggbGF0aW4tMiB0byBodW5nYXJpYW4gbnJj ICovCisgICAgeGwyYXMsCQkJLyogMyw5IGxhdGluLTIgdG8gbm9yZ2UvZGFuaXNoIG5yYyAqLwor ICAgIHhsMmFzLAkJCS8qIDMsMTAgbGF0aW4tMiB0byBwb3J0dWd1ZXNlIG5yYyAqLworICAgIHhs MmFzLAkJCS8qIDMsMTEgbGF0aW4tMiB0byBzcGFuaXNoIG5yYyAqLworICAgIHhsMmFzLAkJCS8q IDMsMTIgbGF0aW4tMiB0byBzd2VkaXNoIG5yYyAqLworICAgIHhsMmFzLAkJCS8qIDMsMTMgbGF0 aW4tMiB0byBzd2lzcyBucmMgKi8KKyAgICB4bDJsMSwJCQkvKiAzLDE0IGxhdGluLTIgdG8gbGF0 aW4tMSAqLworICAgIE5VTEwsCQkJLyogMywxNSBsYXRpbi0yIHRvIGxhdGluLTIgKi8KKyAgICB4 bDJsMSwJCQkvKiAzLDE2IGxhdGluLTIgdG8gREVDIE1DUyAqLworICAgIHhsMm5lLAkJCS8qIDMs MTcgbGF0aW4tMiB0byBOZVhUICovCisgICAgeGwyNDMsCQkJLyogMywxOCBsYXRpbi0yIHRvIENQ NDM3ICovCisgICAgeGwyODUsCQkJLyogMywxOSBsYXRpbi0yIHRvIENQODUwICovCisgICAgeGwy NTIsCQkJLyogMywyMCBsYXRpbi0yIHRvIENQODUyICovCisgICAgeGwyYXEsCQkJLyogMywyMSBs YXRpbi0yIHRvIE1hY2ludG9zaCBMYXRpbiAqLworICAgIHhsMmRnLAkJCS8qIDMsMjIgbGF0aW4t MiB0byBER0kgKi8KKyAgICB4bDJyOCwJCQkvKiAzLDIzIGxhdGluLTIgdG8gSFAgKi8KKyAgICB4 bDJhcywJCQkvKiAzLDI0IGxhdGluLTIgdG8gTGF0aW4vQ3lyaWxsaWMgKi8KKyAgICB4bDJhcywg ICAgICAgICAgICAgICAgICAgICAgLyogMywyNSBsYXRpbi0yIHRvIENQODY2ICovCisgICAgeGwy c2ssICAgICAgICAgICAgICAgICAgICAgIC8qIDMsMjYgbGF0aW4tMiB0byBTaG9ydCBLT0kgKi8K KyAgICB4bDJhcywJCSAgICAgICAJLyogMywyNyBsYXRpbi0yIHRvIE9sZCBLT0ktOCBDeXJpbGxp YyAqLworICAgIE5VTEwsCQkJLyogMywyOCBsYXRpbi0yIHRvIEpJUy03ICovCisgICAgTlVMTCwJ CQkvKiAzLDI5IGxhdGluLTIgdG8gU2hpZnQtSklTICovCisgICAgTlVMTCwJCQkvKiAzLDMwIGxh dGluLTIgdG8gSi1FVUMgKi8KKyAgICBOVUxMLAkJCS8qIDMsMzEgbGF0aW4tMiB0byBERUMgS2Fu amkgKi8KKyAgICB4bDJoNywJCQkvKiAzLDMyIGxhdGluLTIgdG8gSGVicmV3LTcgKi8KKyAgICB4 bDJhcywJCQkvKiAzLDMzIGxhdGluLTIgdG8gTGF0aW4vSGVicmV3ICovCisgICAgeGwyYXMsCQkJ LyogMywzNCBsYXRpbi0yIHRvIENQODYyIEhlYnJldyAqLworICAgIHhhc3NrLAkJCS8qIDMsMzUg bGF0aW4tMiB0byBFTE9UIDkyNyBHcmVlayAqLworICAgIHhsMmFzLAkJCS8qIDMsMzYgbGF0aW4t MiB0byBMYXRpbi9HcmVlayAqLworICAgIHhsMmFzLAkJCS8qIDMsMzcgbGF0aW4tMiB0byBDUDg2 OSAqLworICAgIHhsMmw5LAkJCS8qIDMsMzggbGF0aW4tMiB0byBMYXRpbi05ICovCisgICAgeGwy NTgsCQkJLyogMywzOSBsYXRpbi0yIHRvIENQODU4ICovCisgICAgeGwyYXMsCQkJLyogMyw0MCBs YXRpbi0yIHRvIENQODU1ICovCisgICAgeGwyYXMsCQkJLyogMyw0MSBsYXRpbi0yIHRvIENQMTI1 MSAqLworICAgIHhsMmFzLAkJCS8qIDMsNDIgbGF0aW4tMiB0byBCdWxnYXJpYW4gKi8KKyAgICB4 bDIxMjUwLAkJCS8qIDMsNDMgbGF0aW4tMiB0byBDUDEyNTAgKi8KKyAgICB4bDJteiwJCQkvKiAz LDQ0IGxhdGluLTIgdG8gTWF6b3ZpYSAqLworICAgIE5VTEwsCQkJLyogMyw0NSBsYXRpbi0yIHRv IFVDUy0yICovCisgICAgTlVMTCwJCQkvKiAzLDQ2IGxhdGluLTIgdG8gVVRGLTggKi8KKyAgICB4 bDJhcywJCQkvKiAzLDQ3IGxhdGluLTIgdG8gS09JOFIgKi8KKyAgICB4bDJhcywJCQkvKiAzLDQ4 IGxhdGluLTIgdG8gS09JOFUgKi8KKyAgICB4bDJ3MSwJCQkvKiAzLDQ5IGxhdGluLTIgdG8gQ1Ax MjUyICovCisgICAgeGxjYXMsCQkJLyogNCwwIGxhdGluL2N5cmlsbGljIHRvIHVzIGFzY2lpICov CisgICAgeGxjYXMsCQkJLyogNCwxIGxhdGluL2N5cmlsbGljIHRvIHVrIGFzY2lpICovCisgICAg eGxjYXMsIAkJICAgICAgICAvKiA0LDIgbGF0aW4vY3lyaWxsaWMgdG8gZHV0Y2ggbnJjICovCisg ICAgeGxjYXMsCQkJLyogNCwzIGxhdGluL2N5cmlsbGljIHRvIGZpbm5pc2ggYXNjaWkgKi8KKyAg ICB4bGNhcywJCQkvKiA0LDQgbGF0aW4vY3lyaWxsaWMgdG8gZnJlbmNoIG5yYyAqLworICAgIHhs Y2FzLAkJCS8qIDQsNSBsYXRpbi9jeXJpbGxpYyB0byBmci1jYW5hZGlhbiBucmMgKi8KKyAgICB4 bGNhcywJCQkvKiA0LDYgbGF0aW4vY3lyaWxsaWMgdG8gZ2VybWFuIG5yYyAqLworICAgIHhsY2Fz LAkJCS8qIDQsNyBsYXRpbi9jeXJpbGxpYyB0byBpdGFsaWFuIG5yYyAqLworICAgIHhsY2FzLAkJ CS8qIDQsOCBsYXRpbi9jeXJpbGxpYyB0byBodW5nYXJpYW4gbnJjICovCisgICAgeGxjYXMsCQkJ LyogNCw5IGxhdGluL2N5cmlsbGljIHRvIG5vcmdlL2RhbmlzaCBucmMgKi8KKyAgICB4bGNhcywJ CQkvKiA0LDEwIGxhdGluL2N5cmlsbGljIHRvIHBvcnR1Z3Vlc2UgbnJjICovCisgICAgeGxjYXMs CQkJLyogNCwxMSBsYXRpbi9jeXJpbGxpYyB0byBzcGFuaXNoIG5yYyAqLworICAgIHhsY2FzLAkJ CS8qIDQsMTIgbGF0aW4vY3lyaWxsaWMgdG8gc3dlZGlzaCBucmMgKi8KKyAgICB4bGNhcywJCQkv KiA0LDEzIGxhdGluL2N5cmlsbGljIHRvIHN3aXNzIG5yYyAqLworICAgIHhsY2FzLAkJCS8qIDQs MTQgbGF0aW4vY3lyaWxsaWMgdG8gbGF0aW4tMSAqLworICAgIHhsY2FzLAkJCS8qIDQsMTUgbGF0 aW4vY3lyaWxsaWMgdG8gbGF0aW4tMiAqLworICAgIHhsY2FzLAkJCS8qIDQsMTYgbGF0aW4vY3ly aWxsaWMgdG8gREVDIE1DUyAqLworICAgIHhsY2FzLAkJCS8qIDQsMTcgbGF0aW4vY3lyaWxsaWMg dG8gTmVYVCAqLworICAgIHhsY2FzLAkJCS8qIDQsMTggbGF0aW4vY3lyaWxsaWMgdG8gQ1A0Mzcg Ki8KKyAgICB4bGNhcywJCQkvKiA0LDE5IGxhdGluL2N5cmlsbGljIHRvIENQODUwICovCisgICAg eGxjYXMsCQkJLyogNCwyMCBsYXRpbi9jeXJpbGxpYyB0byBDUDg1MiAqLworICAgIHhsY2FzLAkJ CS8qIDQsMjEgbGF0aW4vY3lyaWxsaWMgdG8gTWFjaW50b3NoIExhdGluICovCisgICAgeGxjYXMs CQkJLyogNCwyMiBsYXRpbi9jeXJpbGxpYyB0byBER0kgKi8KKyAgICB4bGNhcywJCQkvKiA0LDIz IGxhdGluL2N5cmlsbGljIHRvIEhQICovCisgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAg IC8qIDQsMjQgbGF0aW4vY3lyaWxsaWMgdG8gTGF0aW4vQ3lyaWxsaWMgKi8KKyAgICB4bGNhYywg ICAgICAgICAgICAgICAgICAgICAgLyogNCwyNSBsYXRpbi9jeXJpbGxpYyB0byBDUDg2NiAqLwor ICAgIHhsY3NrLCAgICAgICAgICAgICAgICAgICAgICAvKiA0LDI2IGxhdGluL2N5cmlsbGljIHRv IFNob3J0IEtPSSAqLworICAgIHhsY2s4LAkJICAgICAgIAkvKiA0LDI3IGxhdGluL2N5cmlsbGlj IHRvIE9sZCBLT0ktOCBDeXJpbGxpYyAqLworICAgIE5VTEwsCQkJLyogNCwyOCBsYXRpbi9jeXJp bCB0byBKSVMtNyAqLworICAgIE5VTEwsCQkJLyogNCwyOSBsYXRpbi9jeXJpbCB0byBTaGlmdC1K SVMgKi8KKyAgICBOVUxMLAkJCS8qIDQsMzAgbGF0aW4vY3lyaWwgdG8gSi1FVUMgKi8KKyAgICBO VUxMLAkJCS8qIDQsMzEgbGF0aW4vY3lyaWwgdG8gREVDIEthbmppICovCisgICAgeGxjaDcsCQkJ LyogNCwzMiBsYXRpbi9jeXJpbCB0byBIZWJyZXctNyAqLworICAgIHhsY2FzLAkJCS8qIDQsMzMg bGF0aW4vY3lyaWwgdG8gTGF0aW4vSGVicmV3ICovCisgICAgeGxjYXMsCQkJLyogNCwzNCBsYXRp bi9jeXJpbCB0byBDUDg2MiBIZWJyZXcgKi8KKyAgICB4YXNzaywJCQkvKiA0LDM1IGxhdGluL2N5 cmlsIHRvIEVMT1QgOTI3IEdyZWVrICovCisgICAgeGxlZnQxNjAsCQkJLyogNCwzNiBsYXRpbi9j eXJpbCB0byBMYXRpbi9HcmVlayAqLworICAgIHhsZWZ0MTI4LAkJCS8qIDQsMzcgbGF0aW4vY3ly aWwgdG8gQ1A4NjkgKi8KKyAgICB4bGNhcywJCQkvKiA0LDM4IGxhdGluL2N5cmlsIHRvIGxhdGlu LTkgKi8KKyAgICB4bGNhcywJCQkvKiA0LDM5IGxhdGluL2N5cmlsIHRvIENQODU4ICovCisgICAg eGxjNTUsCQkJLyogNCw0MCBsYXRpbi9jeXJpbCB0byBDUDg1NSAqLworICAgIHhsYzEyNTEsCQkJ LyogNCw0MSBsYXRpbi9jeXJpbCB0byBDUDEyNTEgKi8KKyAgICB4bGNidSwJCQkvKiA0LDQyIGxh dGluL2N5cmlsIHRvIEJ1bGdhcmlhbiAqLworICAgIHhsY2FzLAkJCS8qIDQsNDMgbGF0aW4vY3ly aWwgdG8gQ1AxMjUwICovCisgICAgeGxjYXMsCQkJLyogNCw0NCBsYXRpbi9jeXJpbCB0byBNYXpv dmlhICovCisgICAgTlVMTCwJCQkvKiA0LDQ1IGxhdGluL2N5cmlsIHRvIFVDUy0yICovCisgICAg TlVMTCwJCQkvKiA0LDQ2IGxhdGluL2N5cmlsIHRvIFVURi04ICovCisgICAgeGxja3IsCQkJLyog NCw0NyBsYXRpbi9jeXJpbCB0byBLT0k4UiAqLworICAgIHhsY2t1LAkJCS8qIDQsNDggbGF0aW4v Y3lyaWwgdG8gS09JOFUgKi8KKyAgICB4bGNhcywJCQkvKiA0LDQ5IGxhdGluL2N5cmlsIHRvIENQ MTI1MiAqLworICAgIE5VTEwsCQkJLyogNSwwMCAqLworICAgIE5VTEwsCQkJLyogNSwwMSAqLwor ICAgIE5VTEwsCQkJLyogNSwwMiAqLworICAgIE5VTEwsCQkJLyogNSwwMyAqLworICAgIE5VTEws CQkJLyogNSwwNCAqLworICAgIE5VTEwsCQkJLyogNSwwNSAqLworICAgIE5VTEwsCQkJLyogNSww NiAqLworICAgIE5VTEwsCQkJLyogNSwwNyAqLworICAgIE5VTEwsCQkJLyogNSwwOCAqLworICAg IE5VTEwsCQkJLyogNSwwOSAqLworICAgIE5VTEwsCQkJLyogNSwxMCAqLworICAgIE5VTEwsCQkJ LyogNSwxMSAqLworICAgIE5VTEwsCQkJLyogNSwxMiAqLworICAgIE5VTEwsCQkJLyogNSwxMyAq LworICAgIE5VTEwsCQkJLyogNSwxNCAqLworICAgIE5VTEwsCQkJLyogNSwxNSAqLworICAgIE5V TEwsCQkJLyogNSwxNiAqLworICAgIE5VTEwsCQkJLyogNSwxNyAqLworICAgIE5VTEwsCQkJLyog NSwxOCAqLworICAgIE5VTEwsCQkJLyogNSwxOSAqLworICAgIE5VTEwsCQkJLyogNSwyMCAqLwor ICAgIE5VTEwsCQkJLyogNSwyMSAqLworICAgIE5VTEwsCQkJLyogNSwyMiAqLworICAgIE5VTEws CQkJLyogNSwyMyAqLworICAgIE5VTEwsCQkJLyogNSwyNCAqLworICAgIE5VTEwsCQkJLyogNSwy NSAqLworICAgIE5VTEwsCQkJLyogNSwyNiAqLworICAgIE5VTEwsCQkJLyogNSwyNyAqLworICAg IE5VTEwsCQkJLyogNSwyOCAqLworICAgIE5VTEwsCQkJLyogNSwyOSAqLworICAgIE5VTEwsCQkJ LyogNSwzMCAqLworICAgIE5VTEwsCQkJLyogNSwzMSAqLworICAgIE5VTEwsCQkJLyogNSwzMiAq LworICAgIE5VTEwsCQkJLyogNSwzMyAqLworICAgIE5VTEwsCQkJLyogNSwzNCAqLworICAgIE5V TEwsCQkJLyogNSwzNSAqLworICAgIE5VTEwsCQkJLyogNSwzNiAqLworICAgIE5VTEwsCQkJLyog NSwzNyAqLworICAgIE5VTEwsCQkJLyogNSwzOCAqLworICAgIE5VTEwsCQkJLyogNSwzOSAqLwor ICAgIE5VTEwsCQkJLyogNSw0MCAqLworICAgIE5VTEwsCQkJLyogNSw0MSAqLworICAgIE5VTEws CQkJLyogNSw0MiAqLworICAgIE5VTEwsCQkJLyogNSw0MyAqLworICAgIE5VTEwsCQkJLyogNSw0 NCAqLworICAgIE5VTEwsCQkJLyogNSw0NSAqLworICAgIE5VTEwsCQkJLyogNSw0NiAqLworICAg IE5VTEwsCQkJLyogNSw0NyAqLworICAgIE5VTEwsCQkJLyogNSw0OCAqLworICAgIE5VTEwsCQkJ LyogNSw0OSAqLworICAgIHhsaGFzLAkJCS8qIDYsMCBsYXRpbi9oZWJyZXcgdG8gdXMgYXNjaWkg Ki8KKyAgICB4bGhhcywJCQkvKiA2LDEgbGF0aW4vaGVicmV3IHRvIHVrIGFzY2lpICovCisgICAg eGxoYXMsIAkJICAgICAgICAvKiA2LDIgbGF0aW4vaGVicmV3IHRvIGR1dGNoIG5yYyAqLworICAg IHhsaGFzLAkJCS8qIDYsMyBsYXRpbi9oZWJyZXcgdG8gZmlubmlzaCBhc2NpaSAqLworICAgIHhs aGFzLAkJCS8qIDYsNCBsYXRpbi9oZWJyZXcgdG8gZnJlbmNoIG5yYyAqLworICAgIHhsaGFzLAkJ CS8qIDYsNSBsYXRpbi9oZWJyZXcgdG8gZnItY2FuYWRpYW4gbnJjICovCisgICAgeGxoYXMsCQkJ LyogNiw2IGxhdGluL2hlYnJldyB0byBnZXJtYW4gbnJjICovCisgICAgeGxoYXMsCQkJLyogNiw3 IGxhdGluL2hlYnJldyB0byBpdGFsaWFuIG5yYyAqLworICAgIHhsaGFzLAkJCS8qIDYsOCBsYXRp bi9oZWJyZXcgdG8gaHVuZ2FyaWFuIG5yYyAqLworICAgIHhsaGFzLAkJCS8qIDYsOSBsYXRpbi9o ZWJyZXcgdG8gbm9yZ2UvZGFuaXNoIG5yYyAqLworICAgIHhsaGFzLAkJCS8qIDYsMTAgbGF0aW4v aGVicmV3IHRvIHBvcnR1Z3Vlc2UgbnJjICovCisgICAgeGxoYXMsCQkJLyogNiwxMSBsYXRpbi9o ZWJyZXcgdG8gc3BhbmlzaCBucmMgKi8KKyAgICB4bGhhcywJCQkvKiA2LDEyIGxhdGluL2hlYnJl dyB0byBzd2VkaXNoIG5yYyAqLworICAgIHhsaGFzLAkJCS8qIDYsMTMgbGF0aW4vaGVicmV3IHRv IHN3aXNzIG5yYyAqLworICAgIHhsaGwxLAkJCS8qIDYsMTQgbGF0aW4vaGVicmV3IHRvIGxhdGlu LTEgKi8KKyAgICB4bGhhcywJCQkvKiA2LDE1IGxhdGluL2hlYnJldyB0byBsYXRpbi0yICovCisg ICAgeGxobDEsCQkJLyogNiwxNiBsYXRpbi9oZWJyZXcgdG8gREVDIE1DUyAqLworICAgIHhsaGFz LAkJCS8qIDYsMTcgbGF0aW4vaGVicmV3IHRvIE5lWFQgKi8KKyAgICB4bGhhcywJCQkvKiA2LDE4 IGxhdGluL2hlYnJldyB0byBDUDQzNyAqLworICAgIHhsaGFzLAkJCS8qIDYsMTkgbGF0aW4vaGVi cmV3IHRvIENQODUwICovCisgICAgeGxoYXMsCQkJLyogNiwyMCBsYXRpbi9oZWJyZXcgdG8gQ1A4 NTIgKi8KKyAgICB4bGhhcywJCQkvKiA2LDIxIGxhdGluL2hlYnJldyB0byBNYWNpbnRvc2ggTGF0 aW4gKi8KKyAgICB4bGhhcywJCQkvKiA2LDIyIGxhdGluL2hlYnJldyB0byBER0kgKi8KKyAgICB4 bGhhcywgICAgICAgICAgICAgICAgICAgICAgLyogNiwyMyBsYXRpbi9oZWJyZXcgdG8gSFAgKi8K KyAgICB4bGhhcywgICAgICAgICAgICAgICAgICAgICAgLyogNiwyNCBsYXRpbi9oZWJyZXcgdG8g TGF0aW4vQ3lyaWxsaWMgKi8KKyAgICB4bGhhcywgICAgICAgICAgICAgICAgICAgICAgLyogNiwy NSBsYXRpbi9oZWJyZXcgdG8gQ1A4NjYgKi8KKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAg ICAgLyogNiwyNiBsYXRpbi9oZWJyZXcgdG8gU2hvcnQgS09JICovCisgICAgeGxoYXMsCQkgICAg ICAgCS8qIDYsMjcgbGF0aW4vaGVicmV3IHRvIE9sZCBLT0ktOCBDeXJpbGxpYyAqLworICAgIE5V TEwsCQkJLyogNiwyOCBsYXRpbi9oZWJyZXcgdG8gSklTLTcgKi8KKyAgICBOVUxMLAkJCS8qIDYs MjkgbGF0aW4vaGVicmV3IHRvIFNoaWZ0LUpJUyAqLworICAgIE5VTEwsCQkJLyogNiwzMCBsYXRp bi9oZWJyZXcgdG8gSi1FVUMgKi8KKyAgICBOVUxMLAkJCS8qIDYsMzEgbGF0aW4vaGVicmV3IHRv IERFQyBLYW5qaSAqLworICAgIHhsaGg3LAkJCS8qIDYsMzIgbGF0aW4vaGVicmV3IHRvIEhlYnJl dy03ICovCisgICAgTlVMTCwJCQkvKiA2LDMzIGxhdGluL2hlYnJldyB0byBMYXRpbi9IZWJyZXcg Ki8KKyAgICB4bGg2MiwJCQkvKiA2LDM0IGxhdGluL2hlYnJldyB0byBDUDg2MiBIZWJyZXcgKi8K KyAgICBOVUxMLAkJCS8qIDYsMzUgbGF0aW4vaGVicmV3IHRvIEVMT1QgOTI3IEdyZWVrICovCisg ICAgeGxoYXMsCQkJLyogNiwzNiBsYXRpbi9oZWJyZXcgdG8gTGF0aW4vR3JlZWsgKi8KKyAgICB4 bGhhcywJCQkvKiA2LDM3IGxhdGluL2hlYnJldyB0byBDUDg2OSAqLworICAgIHhsaGFzLAkJCS8q IDYsMzggbGF0aW4vaGVicmV3IHRvIExhdGluLTkgKi8KKyAgICB4bGhhcywJCQkvKiA2LDM5IGxh dGluL2hlYnJldyB0byBDUDg1OCAqLworICAgIHhsaGFzLAkJCS8qIDYsNDAgbGF0aW4vaGVicmV3 IHRvIENQODU1ICovCisgICAgeGxoYXMsCQkJLyogNiw0MSBsYXRpbi9oZWJyZXcgdG8gQ1AxMjUx ICovCisgICAgeGxoYXMsCQkJLyogNiw0MiBsYXRpbi9oZWJyZXcgdG8gQnVsZ2FyaWFuICovCisg ICAgeGxoYXMsCQkJLyogNiw0MyBsYXRpbi9oZWJyZXcgdG8gQ1AxMjUwICovCisgICAgeGxoYXMs CQkJLyogNiw0NCBsYXRpbi9oZWJyZXcgdG8gTWF6b3ZpYSAqLworICAgIE5VTEwsCQkJLyogNiw0 NSBsYXRpbi9oZWJyZXcgdG8gVUNTLTIgKi8KKyAgICBOVUxMLAkJCS8qIDYsNDYgbGF0aW4vaGVi cmV3IHRvIFVURi04ICovCisgICAgTlVMTCwJCQkvKiA2LDQ3IGxhdGluL2hlYnJldyB0byBLT0k4 UiAqLworICAgIE5VTEwsCQkJLyogNiw0OCBsYXRpbi9oZWJyZXcgdG8gS09JOFUgKi8KKyAgICB4 bGh3MSwJCQkvKiA2LDQ5IGxhdGluL2hlYnJldyB0byBDUDEyNTIgKi8KKyAgICB4bGdhcywJCQkv KiA3LDAgbGF0aW4vZ3JlZWsgdG8gdXMgYXNjaWkgKi8KKyAgICB4bGdhcywJCQkvKiA3LDEgbGF0 aW4vZ3JlZWsgdG8gdWsgYXNjaWkgKi8KKyAgICB4bGdhcywgCQkgICAgICAgIC8qIDcsMiBsYXRp bi9ncmVlayB0byBkdXRjaCBucmMgKi8KKyAgICB4bGdhcywJCQkvKiA3LDMgbGF0aW4vZ3JlZWsg dG8gZmlubmlzaCBhc2NpaSAqLworICAgIHhsZ2FzLAkJCS8qIDcsNCBsYXRpbi9ncmVlayB0byBm cmVuY2ggbnJjICovCisgICAgeGxnYXMsCQkJLyogNyw1IGxhdGluL2dyZWVrIHRvIGZyLWNhbmFk aWFuIG5yYyAqLworICAgIHhsZ2FzLAkJCS8qIDcsNiBsYXRpbi9ncmVlayB0byBnZXJtYW4gbnJj ICovCisgICAgeGxnYXMsCQkJLyogNyw3IGxhdGluL2dyZWVrIHRvIGl0YWxpYW4gbnJjICovCisg ICAgeGxnYXMsCQkJLyogNyw4IGxhdGluL2dyZWVrIHRvIGh1bmdhcmlhbiBucmMgKi8KKyAgICB4 bGdhcywJCQkvKiA3LDkgbGF0aW4vZ3JlZWsgdG8gbm9yZ2UvZGFuaXNoIG5yYyAqLworICAgIHhs Z2FzLAkJCS8qIDcsMTAgbGF0aW4vZ3JlZWsgdG8gcG9ydHVndWVzZSBucmMgKi8KKyAgICB4bGdh cywJCQkvKiA3LDExIGxhdGluL2dyZWVrIHRvIHNwYW5pc2ggbnJjICovCisgICAgeGxnYXMsCQkJ LyogNywxMiBsYXRpbi9ncmVlayB0byBzd2VkaXNoIG5yYyAqLworICAgIHhsZ2FzLAkJCS8qIDcs MTMgbGF0aW4vZ3JlZWsgdG8gc3dpc3MgbnJjICovCisgICAgeGxnYXMsCQkJLyogNywxNCBsYXRp bi9ncmVlayB0byBsYXRpbi0xICovCisgICAgeGxnYXMsCQkJLyogNywxNSBsYXRpbi9ncmVlayB0 byBsYXRpbi0yICovCisgICAgeGxnYXMsCQkJLyogNywxNiBsYXRpbi9ncmVlayB0byBERUMgTUNT ICovCisgICAgeGxnYXMsCQkJLyogNywxNyBsYXRpbi9ncmVlayB0byBOZVhUICovCisgICAgeGxn YXMsCQkJLyogNywxOCBsYXRpbi9ncmVlayB0byBDUDQzNyAqLworICAgIHhsZ2FzLAkJCS8qIDcs MTkgbGF0aW4vZ3JlZWsgdG8gQ1A4NTAgKi8KKyAgICB4bGdhcywJCQkvKiA3LDIwIGxhdGluL2dy ZWVrIHRvIENQODUyICovCisgICAgeGxnYXMsCQkJLyogNywyMSBsYXRpbi9ncmVlayB0byBNYWNp bnRvc2ggTGF0aW4gKi8KKyAgICB4bGdhcywJCQkvKiA3LDIyIGxhdGluL2dyZWVrIHRvIERHSSAq LworICAgIHhsZ2FzLAkJCS8qIDcsMjMgbGF0aW4vZ3JlZWsgdG8gSFAgKi8KKyAgICB4bGVmdDE2 MCwgICAgICAgICAgICAgICAgICAgLyogNywyNCBsYXRpbi9ncmVlayB0byBMYXRpbi9DeXJpbGxp YyAqLworICAgIHhsZWZ0MTI4LCAgICAgICAgICAgICAgICAgICAvKiA3LDI1IGxhdGluL2dyZWVr IHRvIENQODY2ICovCisgICAgeGFzc2ssICAgICAgICAgICAgICAgICAgICAgIC8qIDcsMjYgbGF0 aW4vZ3JlZWsgdG8gU2hvcnQgS09JICovCisgICAgeGxlZnQxNjAsCQkgICAgICAgCS8qIDcsMjcg bGF0aW4vZ3JlZWsgdG8gT2xkIEtPSS04IEdyZWVrICovCisgICAgTlVMTCwJCQkvKiA3LDI4IGxh dGluL2dyZWVrIHRvIEpJUy03ICovCisgICAgTlVMTCwJCQkvKiA3LDI5IGxhdGluL2dyZWVrIHRv IFNoaWZ0LUpJUyAqLworICAgIE5VTEwsCQkJLyogNywzMCBsYXRpbi9ncmVlayB0byBKLUVVQyAq LworICAgIE5VTEwsCQkJLyogNywzMSBsYXRpbi9ncmVlayB0byBERUMgS2FuamkgKi8KKyAgICBO VUxMLAkJCS8qIDcsMzIgbGF0aW4vZ3JlZWsgdG8gSGVicmV3LTcgKi8KKyAgICB4bGdhcywJCQkv KiA3LDMzIGxhdGluL2dyZWVrIHRvIExhdGluL0hlYnJldyAqLworICAgIHhsZ2FzLAkJCS8qIDcs MzQgbGF0aW4vZ3JlZWsgdG8gQ1A4NjIgSGVicmV3ICovCisgICAgeGxnZWcsCQkJLyogNywzNSBs YXRpbi9ncmVlayB0byBFTE9UIDkyNyBHcmVlayAqLworICAgIE5VTEwsCQkJLyogNywzNiBsYXRp bi9ncmVlayB0byBMYXRpbi9HcmVlayAqLworICAgIHhsZzY5LAkJCS8qIDcsMzcgbGF0aW4vZ3Jl ZWsgdG8gQ1A4NjkgKi8KKyAgICB4bGdhcywJCQkvKiA3LDM4IGxhdGluL2dyZWVrIHRvIExhdGlu LTkgKi8KKyAgICB4bGdhcywJCQkvKiA3LDM5IGxhdGluL2dyZWVrIHRvIENQODU4ICovCisgICAg eGxlZnQxMjgsCQkJLyogNyw0MCBsYXRpbi9ncmVlayB0byBDUDg1NSAqLworICAgIHhsZWZ0MTI4 LAkJCS8qIDcsNDEgbGF0aW4vZ3JlZWsgdG8gQ1AxMjUxICovCisgICAgeGxlZnQxMjgsCQkJLyog Nyw0MiBsYXRpbi9ncmVlayB0byBCdWxnYXJpYW4gKi8KKyAgICB4bGVmdDEyOCwJCQkvKiA3LDQz IGxhdGluL2dyZWVrIHRvIENQMTI1MCAqLworICAgIHhsZWZ0MTI4LAkJCS8qIDcsNDQgbGF0aW4v Z3JlZWsgdG8gTWF6b3ZpYSAqLworICAgIE5VTEwsCQkJLyogNyw0NSBsYXRpbi9ncmVlayB0byBV Q1MtMiAqLworICAgIE5VTEwsCQkJLyogNyw0NiBsYXRpbi9ncmVlayB0byBVVEYtOCAqLworICAg IE5VTEwsCQkJLyogNyw0NyBsYXRpbi9ncmVlayB0byBLT0k4UiAqLworICAgIE5VTEwsCQkJLyog Nyw0OCBsYXRpbi9ncmVlayB0byBLT0k4VSAqLworICAgIHhsZ3cxLAkJCS8qIDcsNDkgbGF0aW4v Z3JlZWsgdG8gQ1AxMjUyICovCisgICAgemw5YXMsCQkJLyogOCwwIGxhdGluLTkgdG8gdXMgYXNj aWkgKi8KKyAgICB4bDF1aywJCQkvKiA4LDEgbGF0aW4tOSB0byB1ayBhc2NpaSAqLworICAgIHhs MWR1LAkJCS8qIDgsMiBsYXRpbi05IHRvIGR1dGNoIG5yYyAqLworICAgIHhsMWZpLAkJCS8qIDgs MyBsYXRpbi05IHRvIGZpbm5pc2ggbnJjICovCisgICAgeGwxZnIsCQkJLyogOCw0IGxhdGluLTkg dG8gZnJlbmNoIG5yYyAqLworICAgIHhsMWZjLAkJCS8qIDgsNSBsYXRpbi05IHRvIGZyLWNhbmFk aWFuIG5yYyAqLworICAgIHhsMWdlLAkJCS8qIDgsNiBsYXRpbi05IHRvIGdlcm1hbiBucmMgKi8K KyAgICB4bDFpdCwJCQkvKiA4LDcgbGF0aW4tOSB0byBpdGFsaWFuIG5yYyAqLworICAgIHhsMWh1 LAkJCS8qIDgsOCBsYXRpbi05IHRvIGh1bmdhcmlhbiBucmMgKi8KKyAgICB4bDFubywJCQkvKiA4 LDkgbGF0aW4tOSB0byBub3JnZS9kYW5pc2ggbnJjICovCisgICAgeGwxcG8sCQkJLyogOCwxMCBs YXRpbi05IHRvIHBvcnR1Z3Vlc2UgbnJjICovCisgICAgeGwxc3AsCQkJLyogOCwxMSBsYXRpbi05 IHRvIHNwYW5pc2ggbnJjICovCisgICAgeGwxc3csCQkJLyogOCwxMiBsYXRpbi05IHRvIHN3ZWRp c2ggbnJjICovCisgICAgeGwxY2gsCQkJLyogOCwxMyBsYXRpbi05IHRvIHN3aXNzIG5yYyAqLwor ICAgIE5VTEwsCQkJLyogOCwxNCBsYXRpbi05IHRvIGxhdGluLTEgKi8KKyAgICB4bDFsMiwJCQkv KiA4LDE1IGxhdGluLTkgdG8gbGF0aW4tMiAqLworICAgIHhsOWRtLAkJCS8qIDgsMTYgbGF0aW4t OSB0byBERUMgTUNTICovCisgICAgeGw5bmUsCQkJLyogOCwxNyBsYXRpbi05IHRvIE5lWFQgKi8K KyAgICB4bDE0MywJCQkvKiA4LDE4IGxhdGluLTkgdG8gQ1A0MzcgKi8KKyAgICB4bDE4NSwJCQkv KiA4LDE5IGxhdGluLTkgdG8gQ1A4NTAgKi8KKyAgICB4bDE1MiwJCQkvKiA4LDIwIGxhdGluLTkg dG8gQ1A4NTIgKi8KKyAgICB4bDFhcSwJCQkvKiA4LDIxIGxhdGluLTkgdG8gTWFjaW50b3NoIExh dGluICovCisgICAgeGwxZGcsCQkJLyogOCwyMiBsYXRpbi05IHRvIERHSSAqLworICAgIHhsMXI4 LAkJCS8qIDgsMjMgbGF0aW4tOSB0byBIUCBSb21hbjggKi8KKyAgICB6bDFhcywJCQkvKiA4LDI0 IGxhdGluLTkgdG8gTGF0aW4vQ3lyaWxsaWMgKi8KKyAgICB6bDFhcywgICAgICAgICAgICAgICAg ICAgICAgLyogOCwyNSBsYXRpbi05IHRvIENQODY2ICovCisgICAgeGwxc2ssICAgICAgICAgICAg ICAgICAgICAgIC8qIDgsMjYgbGF0aW4tOSB0byBTaG9ydCBLT0kgKi8KKyAgICB6bDFhcywJCSAg ICAgICAJLyogOCwyNyBsYXRpbi05IHRvIE9sZCBLT0ktOCBDeXJpbGxpYyAqLworICAgIE5VTEws CQkJLyogOCwyOCBsYXRpbi05IHRvIEpJUy03ICovCisgICAgTlVMTCwJCQkvKiA4LDI5IGxhdGlu LTkgdG8gU2hpZnQtSklTICovCisgICAgTlVMTCwJCQkvKiA4LDMwIGxhdGluLTkgdG8gSi1FVUMg Ki8KKyAgICBOVUxMLAkJCS8qIDgsMzEgbGF0aW4tOSB0byBERUMgS2FuamkgKi8KKyAgICB4bDFo NywJCQkvKiA4LDMyIGxhdGluLTkgdG8gSGVicmV3LTcgKi8KKyAgICB4bDFsaCwJCQkvKiA4LDMz IGxhdGluLTkgdG8gTGF0aW4vSGVicmV3ICovCisgICAgeGwxNjIsCQkJLyogOCwzNCBsYXRpbi05 IHRvIENQODYyIEhlYnJldyAqLworICAgIHhsMWVnLAkJCS8qIDgsMzUgbGF0aW4tOSB0byBFTE9U IDkyNyBHcmVlayAqLworICAgIHhsMWxnLAkJCS8qIDgsMzYgbGF0aW4tOSB0byBMYXRpbi9HcmVl ayAqLworICAgIHhsMTY5LAkJCS8qIDgsMzcgbGF0aW4tOSB0byBDUDg2OSAqLworICAgIE5VTEws CQkJLyogOCwzOCBsYXRpbi05IHRvIExhdGluOSAqLworICAgIHhsOTU4LAkJCS8qIDgsMzkgbGF0 aW4tOSB0byBDUDg1OCAqLworICAgIHpsMWFzLAkJCS8qIDgsNDAgbGF0aW4tOSB0byBDUDg1NSAq LworICAgIHpsMWFzLAkJCS8qIDgsNDEgbGF0aW4tOSB0byBDUDEyNTEgKi8KKyAgICB4bDFhcywJ CQkvKiA4LDQyIGxhdGluLTkgdG8gQnVsZ2FyaWFuICovCisgICAgeGw5MTI1MCwJCQkvKiA4LDQz IGxhdGluLTkgdG8gQ1AxMjUwICovCisgICAgeGw5bXosCQkJLyogOCw0NCBsYXRpbi05IHRvIE1h em92aWEgKi8KKyAgICBOVUxMLAkJCS8qIDgsNDUgbGF0aW4tOSB0byBVQ1MtMiAqLworICAgIE5V TEwsCQkJLyogOCw0NiBsYXRpbi05IHRvIFVURi04ICovCisgICAgemwxYXMsCQkJLyogOCw0NyBs YXRpbi05IHRvIEtPSTgtUiAqLworICAgIHpsMWFzLAkJCS8qIDgsNDggbGF0aW4tOSB0byBLT0k4 LVUgKi8KKyAgICB4bDl3MSwJCQkvKiA4LDQ5IGxhdGluLTkgdG8gQ1AxMjUyICovCisgICAgTlVM TCwJCQkvKiA5LDAwIFVuaWNvZGUuLi4gKi8KKyAgICBOVUxMLAkJCS8qIDksMDEgKi8KKyAgICBO VUxMLAkJCS8qIDksMDIgKi8KKyAgICBOVUxMLAkJCS8qIDksMDMgKi8KKyAgICBOVUxMLAkJCS8q IDksMDQgKi8KKyAgICBOVUxMLAkJCS8qIDksMDUgKi8KKyAgICBOVUxMLAkJCS8qIDksMDYgKi8K KyAgICBOVUxMLAkJCS8qIDksMDcgKi8KKyAgICBOVUxMLAkJCS8qIDksMDggKi8KKyAgICBOVUxM LAkJCS8qIDksMDkgKi8KKyAgICBOVUxMLAkJCS8qIDksMTAgKi8KKyAgICBOVUxMLAkJCS8qIDks MTEgKi8KKyAgICBOVUxMLAkJCS8qIDksMTIgKi8KKyAgICBOVUxMLAkJCS8qIDksMTMgKi8KKyAg ICBOVUxMLAkJCS8qIDksMTQgKi8KKyAgICBOVUxMLAkJCS8qIDksMTUgKi8KKyAgICBOVUxMLAkJ CS8qIDksMTYgKi8KKyAgICBOVUxMLAkJCS8qIDksMTcgKi8KKyAgICBOVUxMLAkJCS8qIDksMTgg Ki8KKyAgICBOVUxMLAkJCS8qIDksMTkgKi8KKyAgICBOVUxMLAkJCS8qIDksMjAgKi8KKyAgICBO VUxMLAkJCS8qIDksMjEgKi8KKyAgICBOVUxMLAkJCS8qIDksMjIgKi8KKyAgICBOVUxMLAkJCS8q IDksMjMgKi8KKyAgICBOVUxMLAkJCS8qIDksMjQgKi8KKyAgICBOVUxMLAkJCS8qIDksMjUgKi8K KyAgICBOVUxMLAkJCS8qIDksMjYgKi8KKyAgICBOVUxMLAkJCS8qIDksMjcgKi8KKyAgICBOVUxM LAkJCS8qIDksMjggKi8KKyAgICBOVUxMLAkJCS8qIDksMjkgKi8KKyAgICBOVUxMLAkJCS8qIDks MzAgKi8KKyAgICBOVUxMLAkJCS8qIDksMzEgKi8KKyAgICBOVUxMLAkJCS8qIDksMzIgKi8KKyAg ICBOVUxMLAkJCS8qIDksMzMgKi8KKyAgICBOVUxMLAkJCS8qIDksMzQgKi8KKyAgICBOVUxMLAkJ CS8qIDksMzUgKi8KKyAgICBOVUxMLAkJCS8qIDksMzYgKi8KKyAgICBOVUxMLAkJCS8qIDksMzcg Ki8KKyAgICBOVUxMLAkJCS8qIDksMzggKi8KKyAgICBOVUxMLAkJCS8qIDksMzkgKi8KKyAgICBO VUxMLAkJCS8qIDksNDAgKi8KKyAgICBOVUxMLAkJCS8qIDksNDEgKi8KKyAgICBOVUxMLAkJCS8q IDksNDIgKi8KKyAgICBOVUxMLAkJCS8qIDksNDMgKi8KKyAgICBOVUxMLAkJCS8qIDksNDQgKi8K KyAgICBOVUxMLAkJCS8qIDksNDUgKi8KKyAgICBOVUxMLAkJCS8qIDksNDYgKi8KKyAgICBOVUxM LAkJCS8qIDksNDcgKi8KKyAgICBOVUxMLAkJCS8qIDksNDggKi8KKyAgICBOVUxMLAkJCS8qIDks NDkgKi8KKyAgICBOVUxMLAkJCS8qIDEwLDAwICovCisgICAgTlVMTCwJCQkvKiAxMCwwMSAqLwor ICAgIE5VTEwsCQkJLyogMTAsMDIgKi8KKyAgICBOVUxMLAkJCS8qIDEwLDAzICovCisgICAgTlVM TCwJCQkvKiAxMCwwNCAqLworICAgIE5VTEwsCQkJLyogMTAsMDUgKi8KKyAgICBOVUxMLAkJCS8q IDEwLDA2ICovCisgICAgTlVMTCwJCQkvKiAxMCwwNyAqLworICAgIE5VTEwsCQkJLyogMTAsMDgg Ki8KKyAgICBOVUxMLAkJCS8qIDEwLDA5ICovCisgICAgTlVMTCwJCQkvKiAxMCwxMCAqLworICAg IE5VTEwsCQkJLyogMTAsMTEgKi8KKyAgICBOVUxMLAkJCS8qIDEwLDEyICovCisgICAgTlVMTCwJ CQkvKiAxMCwxMyAqLworICAgIE5VTEwsCQkJLyogMTAsMTQgKi8KKyAgICBOVUxMLAkJCS8qIDEw LDE1ICovCisgICAgTlVMTCwJCQkvKiAxMCwxNiAqLworICAgIE5VTEwsCQkJLyogMTAsMTcgKi8K KyAgICBOVUxMLAkJCS8qIDEwLDE4ICovCisgICAgTlVMTCwJCQkvKiAxMCwxOSAqLworICAgIE5V TEwsCQkJLyogMTAsMjAgKi8KKyAgICBOVUxMLAkJCS8qIDEwLDIxICovCisgICAgTlVMTCwJCQkv KiAxMCwyMiAqLworICAgIE5VTEwsCQkJLyogMTAsMjMgKi8KKyAgICBOVUxMLAkJCS8qIDEwLDI0 ICovCisgICAgTlVMTCwJCQkvKiAxMCwyNSAqLworICAgIE5VTEwsCQkJLyogMTAsMjYgKi8KKyAg ICBOVUxMLAkJCS8qIDEwLDI3ICovCisgICAgTlVMTCwJCQkvKiAxMCwyOCAqLworICAgIE5VTEws CQkJLyogMTAsMjkgKi8KKyAgICBOVUxMLAkJCS8qIDEwLDMwICovCisgICAgTlVMTCwJCQkvKiAx MCwzMSAqLworICAgIE5VTEwsCQkJLyogMTAsMzIgKi8KKyAgICBOVUxMLAkJCS8qIDEwLDMzICov CisgICAgTlVMTCwJCQkvKiAxMCwzNCAqLworICAgIE5VTEwsCQkJLyogMTAsMzUgKi8KKyAgICBO VUxMLAkJCS8qIDEwLDM2ICovCisgICAgTlVMTCwJCQkvKiAxMCwzNyAqLworICAgIE5VTEwsCQkJ LyogMTAsMzggKi8KKyAgICBOVUxMLAkJCS8qIDEwLDM5ICovCisgICAgTlVMTCwJCQkvKiAxMCw0 MCAqLworICAgIE5VTEwsCQkJLyogMTAsNDEgKi8KKyAgICBOVUxMLAkJCS8qIDEwLDQyICovCisg ICAgTlVMTCwJCQkvKiAxMCw0MyAqLworICAgIE5VTEwsCQkJLyogMTAsNDQgKi8KKyAgICBOVUxM LAkJCS8qIDEwLDQ1ICovCisgICAgTlVMTCwJCQkvKiAxMCw0NiAqLworICAgIE5VTEwsCQkJLyog MTAsNDcgKi8KKyAgICBOVUxMLAkJCS8qIDEwLDQ4ICovCisgICAgTlVMTAkJCS8qIDEwLDQ5ICov Cit9OworaW50IG54bHIgPSAoc2l6ZW9mKHhscikgLyBzaXplb2YoQ0hBUiAqKSk7CisKKy8qCisg IFRyYW5zbGF0aW9uIGZ1bmN0aW9uIHRhYmxlIGZvciBzZW5kaW5nIGZpbGVzLgorICBBcnJheSBv ZiBwb2ludGVycyB0byBmdW5jdGlvbnMgZm9yIHRyYW5zbGF0aW5nIGZyb20gdGhlIGxvY2FsIGZp bGUKKyAgY2hhcmFjdGVyIHNldCB0byB0aGUgdHJhbnNmZXIgY2hhcmFjdGVyIHNldC4gIEluZGV4 ZWQgaW4gdGhlIHNhbWUKKyAgd2F5IGFzIHRoZSB4bHIgYXJyYXkgYWJvdmUsIGJ1dCB3aXRoIHRo ZSBpbmRpY2VzIHJldmVyc2VkLgorKi8KKyNpZmRlZiBDS19BTlNJQworQ0hBUiAoKnhsc1tNQVhU Q1NFVFMrMV1bTUFYRkNTRVRTKzFdKShDSEFSKSA9CisjZWxzZQorQ0hBUiAoKnhsc1tNQVhUQ1NF VFMrMV1bTUFYRkNTRVRTKzFdKSgpID0KKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworICAgIE5V TEwsCQkJLyogMCwwIHVzIGFzY2lpIHRvIHRyYW5zcGFyZW50ICovCisgICAgTlVMTCwJCQkvKiAw LDEgdWsgYXNjaWkgdG8gdHJhbnNwYXJlbnQgKi8KKyAgICBOVUxMLAkJCS8qIDAsMiBkdXRjaCBu cmMgdG8gdHJhbnNwYXJlbnQgKi8KKyAgICBOVUxMLAkJCS8qIDAsMyBmaW5uaXNoIG5yYyB0byB0 cmFuc3BhcmVudCAqLworICAgIE5VTEwsCQkJLyogMCw0IGZyZW5jaCBucmMgdG8gdHJhbnNwYXJl bnQgKi8KKyAgICBOVUxMLAkJCS8qIDAsNSBmci1jYW5hZGlhbiBucmMgdG8gdHJhbnNwYXJlbnQg Ki8KKyAgICBOVUxMLAkJCS8qIDAsNiBnZXJtYW4gbnJjIHRvIHRyYW5zcGFyZW50ICovCisgICAg TlVMTCwJCQkvKiAwLDcgaHVuZ2FyaWFuIG5yYyB0byB0cmFuc3BhcmVudCAqLworICAgIE5VTEws CQkJLyogMCw4IGl0YWxpYW4gbnJjIHRvIHRyYW5zcGFyZW50ICovCisgICAgTlVMTCwJCQkvKiAw LDkgbm9yZ2UvZGFuaXNoIG5yYyB0byB0cmFuc3BhcmVudCAqLworICAgIE5VTEwsCQkJLyogMCwx MCBwb3J0dWd1ZXNlIG5yYyB0byB0cmFuc3BhcmVudCAqLworICAgIE5VTEwsCQkJLyogMCwxMSBz cGFuaXNoIG5yYyB0byB0cmFuc3BhcmVudCAqLworICAgIE5VTEwsCQkJLyogMCwxMiBzd2VkaXNo IG5yYyB0byB0cmFuc3BhcmVudCAqLworICAgIE5VTEwsCQkJLyogMCwxMyBzd2lzcyBucmMgdG8g dHJhbnNwYXJlbnQgKi8KKyAgICBOVUxMLAkJCS8qIDAsMTQgbGF0aW4tMSB0byB0cmFuc3BhcmVu dCAqLworICAgIE5VTEwsCQkJLyogMCwxNSBsYXRpbi0yIHRvIHRyYW5zcGFyZW50ICovCisgICAg TlVMTCwJCQkvKiAwLDE2IERFQyBNQ1MgdG8gdHJhbnNwYXJlbnQgKi8KKyAgICBOVUxMLAkJCS8q IDAsMTcgTmVYVCB0byB0cmFuc3BhcmVudCAqLworICAgIE5VTEwsCQkJLyogMCwxOCBDUDQzNyB0 byB0cmFuc3BhcmVudCAqLworICAgIE5VTEwsCQkJLyogMCwxOSBDUDg1MCB0byB0cmFuc3BhcmVu dCAqLworICAgIE5VTEwsCQkJLyogMCwyMCBDUDg1MiB0byB0cmFuc3BhcmVudCAqLworICAgIE5V TEwsCQkJLyogMCwyMSBNYWNpbnRvc2ggTGF0aW4gdG8gdHJhbnNwYXJlbnQgKi8KKyAgICBOVUxM LAkJCS8qIDAsMjIgREdJIHRvIHRyYW5zcGFyZW50ICovCisgICAgTlVMTCwJCQkvKiAwLDIzIEhQ IHRvIHRyYW5zcGFyZW50ICovCisgICAgTlVMTCwJCQkvKiAwLDI0IExhdGluL0N5cmlsbGljIHRv IHRyYW5zcGFyZW50ICovCisgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgIC8qIDAsMjUg Q1A4NjYgdG8gdHJhbnNwYXJlbnQgKi8KKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAg LyogMCwyNiBTaG9ydCBLT0kgdG8gdHJhbnNwYXJlbnQgKi8KKyAgICBOVUxMLCAgICAgICAgICAg ICAgICAgICAgICAgLyogMCwyNyBPbGQgS09JLTggdG8gdHJhbnNwYXJlbnQgKi8KKyAgICBOVUxM LAkJCS8qIDAsMjggSklTLTcgdG8gdHJhbnNwYXJlbnQgKi8KKyAgICBOVUxMLAkJCS8qIDAsMjkg U2hpZnQgSklTIHRvIHRyYW5zcGFyZW50ICovCisgICAgTlVMTCwJCQkvKiAwLDMwIEphcGFuZXNl IEVVQyB0byB0cmFuc3BhcmVudCAqLworICAgIE5VTEwsCQkJLyogMCwzMSBERUMgS2FuamkgdG8g dHJhbnNwYXJlbnQgKi8KKyAgICBOVUxMLAkJCS8qIDAsMzIgSGVicmV3LTcgdG8gdHJhbnNwYXJl bnQgKi8KKyAgICBOVUxMLAkJCS8qIDAsMzMgTGF0aW4vSGVicmV3IHRvIHRyYW5zcGFyZW50ICov CisgICAgTlVMTCwJCQkvKiAwLDM0IENQODYyIEhlYnJldyB0byB0cmFuc3BhcmVudCAqLworICAg IE5VTEwsCQkJLyogMCwzNSBFTE9UIDkyNyBHcmVlayB0byB0cmFuc3BhcmVudCAqLworICAgIE5V TEwsCQkJLyogMCwzNiBMYXRpbi9HcmVlayB0byB0cmFuc3BhcmVudCAqLworICAgIE5VTEwsCQkJ LyogMCwzNyBDUDg2OSB0byB0cmFuc3BhcmVudCAqLworICAgIE5VTEwsCQkJLyogMCwzOCBMYXRp bi05IHRvIHRyYW5zcGFyZW50ICovCisgICAgTlVMTCwJCQkvKiAwLDM5IENQODU4IHRvIHRyYW5z cGFyZW50ICovCisgICAgTlVMTCwJCQkvKiAwLDQwIENQODU1IHRvIHRyYW5zcGFyZW50ICovCisg ICAgTlVMTCwJCQkvKiAwLDQxIENQMTI1MSB0byB0cmFuc3BhcmVudCAqLworICAgIE5VTEwsCQkJ LyogMCw0MiBCdWxnYXJpYW4gdG8gdHJhbnNwYXJlbnQgKi8KKyAgICBOVUxMLAkJCS8qIDAsNDMg Q1AxMjUwIHRvIHRyYW5zcGFyZW50ICovCisgICAgTlVMTCwJCQkvKiAwLDQ0IE1hem92aWEgdG8g dHJhbnNwYXJlbnQgKi8KKyAgICBOVUxMLAkJCS8qIDAsNDUgVUNTLTIgdG8gdHJhbnNwYXJlbnQg Ki8KKyAgICBOVUxMLAkJCS8qIDAsNDYgVVRGLTggdG8gdHJhbnNwYXJlbnQgKi8KKyAgICBOVUxM LAkJCS8qIDAsNDcgS09JOFIgdG8gdHJhbnNwYXJlbnQgKi8KKyAgICBOVUxMLAkJCS8qIDAsNDgg S09JOFUgdG8gdHJhbnNwYXJlbnQgKi8KKyAgICBOVUxMLAkJCS8qIDAsNDkgQ1AxMjUyIHRvIHRy YW5zcGFyZW50ICovCisgICAgTlVMTCwJCQkvKiAxLDAgdXMgYXNjaWkgdG8gYXNjaWkgKi8KKyAg ICBOVUxMLAkJCS8qIDEsMSB1ayBhc2NpaSB0byBhc2NpaSAqLworICAgIHhkdWFzLAkJCS8qIDEs MiBkdXRjaCBucmMgdG8gYXNjaWkgKi8KKyAgICB4ZmlhcywJCQkvKiAxLDMgZmlubmlzaCBucmMg dG8gYXNjaWkgKi8KKyAgICB4ZnJhcywJCQkvKiAxLDQgZnJlbmNoIG5yYyB0byBhc2NpaSAqLwor ICAgIHhmY2FzLAkJCS8qIDEsNSBmcmVuY2ggY2FuYWRpYW4gbnJjIHRvIGFzY2lpICovCisgICAg eGdlYXMsCQkJLyogMSw2IGdlcm1hbiBucmMgdG8gYXNjaWkgKi8KKyAgICB4aHVhcywJCQkvKiAx LDcgaHVuZ2FyaWFuIG5yYyB0byBhc2NpaSAqLworICAgIHhpdGFzLAkJCS8qIDEsOCBpdGFsaWFu IG5yYyB0byBhc2NpaSAqLworICAgIHhub2FzLAkJCS8qIDEsOSBub3J3ZWdpYW4vZGFuaXNoIG5y YyB0byBhc2NpaSAqLworICAgIHhwb2FzLAkJCS8qIDEsMTAgcG9ydHVndWVzZSBucmMgdG8gYXNj aWkgKi8KKyAgICB4c3BhcywJCQkvKiAxLDExIHNwYW5pc2ggbnJjIHRvIGFzY2lpICovCisgICAg eHN3YXMsCQkJLyogMSwxMiBzd2VkaXNoIG5yYyB0byBhc2NpaSAqLworICAgIHhjaGFzLAkJCS8q IDEsMTMgc3dpc3MgbnJjIHRvIGFzY2lpICovCisgICAgeGwxYXMsCQkJLyogMSwxNCBsYXRpbi0x IHRvIGFzY2lpICovCisgICAgeGwyYXMsCQkJLyogMSwxNSBsYXRpbi0yIHRvIGFzY2lpICovCisg ICAgeGRtYXMsCQkJLyogMSwxNiBkZWMgbWNzIHRvIGFzY2lpICovCisgICAgeG5lYXMsCQkJLyog MSwxNyBOZVhUIHRvIGFzY2lpICovCisgICAgeDQzYXMsCQkJLyogMSwxOCBDUDQzNyB0byBhc2Np aSAqLworICAgIHg4NWFzLAkJCS8qIDEsMTkgQ1A4NTAgdG8gYXNjaWkgKi8KKyAgICB4NTJhcywJ CQkvKiAxLDIwIENQODUwIHRvIGFzY2lpICovCisgICAgeGFxYXMsCQkJLyogMSwyMSBNYWNpbnRv c2ggTGF0aW4gdG8gYXNjaWkgKi8KKyAgICB4ZGdhcywJCQkvKiAxLDIyIERHSSB0byBhc2NpaSAq LworICAgIHhyOGFzLAkJCS8qIDEsMjMgSFAgdG8gQVNDSUkgKi8KKyAgICB4bGNhcywJCQkvKiAx LDI0IExhdGluL0N5cmlsbGljIHRvIEFTQ0lJICovCisgICAgeGFjYXMsICAgICAgICAgICAgICAg ICAgICAgIC8qIDEsMjUgQ1A4NjYgdG8gQVNDSUkgKi8KKyAgICB4c2thcywJCQkvKiAxLDI2IFNo b3J0IEtPSSB0byBBU0NJSSAqLworICAgIHhrOGFzLCAgICAgICAgICAgICAgICAgICAgICAvKiAx LDI3IE9sZCBLT0ktOCBDeXJpbGxpYyB0byBBU0NJSSAqLworICAgIE5VTEwsCQkJLyogMSwyOCAq LworICAgIE5VTEwsCQkJLyogMSwyOSAqLworICAgIE5VTEwsCQkJLyogMSwzMCAqLworICAgIE5V TEwsCQkJLyogMSwzMSAqLworICAgIHhoN2FzLAkJCS8qIDEsMzIgSGVicmV3LTcgdG8gQVNDSUkg Ki8KKyAgICB4bGhhcywJCQkvKiAxLDMzIExhdGluL0hlYnJldyB0byBBU0NJSSAqLworICAgIHg2 MmFzLAkJCS8qIDEsMzQgQ1A4NjIgSGVicmV3IHRvIEFTQ0lJICovCisgICAgeGVnYXMsCQkJLyog MSwzNSBFTE9UIDkyNyBHcmVlayB0byBBU0NJSSAqLworICAgIHhsZ2FzLAkJCS8qIDEsMzYgTGF0 aW4vR3JlZWsgdG8gQVNDSUkgKi8KKyAgICB4NjlhcywJCQkvKiAxLDM3IENQODY5IHRvIEFTQ0lJ ICovCisgICAgeGw5YXMsCQkJLyogMSwzOCBMYXRpbi05IHRvIEFTQ0lJICovCisgICAgeDU4YXMs CQkJLyogMSwzOSBDUDg1OCB0byBBU0NJSSAqLworICAgIHg1NWFzLAkJCS8qIDEsNDAgQ1A4NTUg dG8gQVNDSUkgKi8KKyAgICB4MTI1MWFzLAkJCS8qIDEsNDEgQ1AxMjUxIHRvIEFTQ0lJICovCisg ICAgeGxlZnQxMjgsCQkJLyogMSw0MiBCdWxnYXJpYW4gdG8gQVNDSUkgKi8KKyAgICB4MTI1MGFz LAkJCS8qIDEsNDMgQ1AxMjUwIHRvIEFTQ0lJICovCisgICAgeG16YXMsCQkJLyogMSw0NCBNYXpv dmlhIHRvIEFTQ0lJICovCisgICAgTlVMTCwJCQkvKiAxLDQ1IFVDUy0yIHRvIEFTQ0lJICovCisg ICAgTlVMTCwJCQkvKiAxLDQ2IFVURi04IHRvIEFTQ0lJICovCisgICAgeGs4YXMsCQkJLyogMSw0 NyBLT0k4UiB0byBBU0NJSSAqLworICAgIHhrOGFzLAkJCS8qIDEsNDggS09JOFUgdG8gQVNDSUkg Ki8KKyAgICB4dzFhcywJCQkvKiAxLDQ5IENQMTI1MiB0byBBU0NJSSAqLworICAgIE5VTEwsCQkJ LyogMiwwIHVzIGFzY2lpIHRvIGxhdGluLTEgKi8KKyAgICB4dWtsMSwJCQkvKiAyLDEgdWsgYXNj aWkgdG8gbGF0aW4tMSAqLworICAgIHhkdWwxLAkJCS8qIDIsMiBkdXRjaCBucmMgdG8gbGF0aW4t MSAqLworICAgIHhmaWwxLAkJCS8qIDIsMyBmaW5uaXNoIG5yYyB0byBsYXRpbi0xICovCisgICAg eGZybDEsCQkJLyogMiw0IGZyZW5jaCBucmMgdG8gbGF0aW4tMSAqLworICAgIHhmY2wxLAkJCS8q IDIsNSBmcmVuY2ggY2FuYWRpYW4gbnJjIHRvIGxhdGluLTEgKi8KKyAgICB4Z2VsMSwJCQkvKiAy LDYgZ2VybWFuIG5yYyB0byBsYXRpbi0xICovCisgICAgeGh1bDEsCQkJLyogMiw3IGh1bmdhcmlh biBucmMgdG8gbGF0aW4tMSAqLworICAgIHhpdGwxLAkJCS8qIDIsOCBpdGFsaWFuIG5yYyB0byBs YXRpbi0xICovCisgICAgeG5vbDEsCQkJLyogMiw5IG5vcndlZ2lhbi9kYW5pc2ggbnJjIHRvIGxh dGluLTEgKi8KKyAgICB4cG9sMSwJCQkvKiAyLDEwIHBvcnR1Z3Vlc2UgbnJjIHRvIGxhdGluLTEg Ki8KKyAgICB4c3BsMSwJCQkvKiAyLDExIHNwYW5pc2ggbnJjIHRvIGxhdGluLTEgKi8KKyAgICB4 c3dsMSwJCQkvKiAyLDEyIHN3ZWRpc2ggbnJjIHRvIGxhdGluLTEgKi8KKyAgICB4Y2hsMSwJCQkv KiAyLDEzIHN3aXNzIG5yYyB0byBsYXRpbi0xICovCisgICAgTlVMTCwJCQkvKiAyLDE0IGxhdGlu LTEgdG8gbGF0aW4tMSAqLworICAgIHhsMmwxLAkJCS8qIDIsMTUgbGF0aW4tMiB0byBsYXRpbi0x ICovCisgICAgeGRtbDEsCQkJLyogMiwxNiBkZWMgbWNzIHRvIGxhdGluLTEgKi8KKyAgICB4bmVs MSwgICAgICAgICAgICAgICAgICAgICAgLyogMiwxNyBOZVhUIHRvIExhdGluLTEgKi8KKyAgICB4 NDNsMSwgICAgICAgICAgICAgICAgICAgICAgLyogMiwxOCBDUDQzNyB0byBMYXRpbi0xICovCisg ICAgeDg1bDEsICAgICAgICAgICAgICAgICAgICAgIC8qIDIsMTkgQ1A4NTAgdG8gTGF0aW4tMSAq LworICAgIHg1MmwxLCAgICAgICAgICAgICAgICAgICAgICAvKiAyLDIwIENQODUyIHRvIExhdGlu LTEgKi8KKyAgICB4YXFsMSwgICAgICAgICAgICAgICAgICAgICAgLyogMiwyMSBNYWNpbnRvc2gg TGF0aW4gdG8gTGF0aW4tMSAqLworICAgIHhkZ2wxLCAgICAgICAgICAgICAgICAgICAgICAvKiAy LDIyIERHSSB0byBMYXRpbi0xICovCisgICAgeHI4bDEsICAgICAgICAgICAgICAgICAgICAgIC8q IDIsMjMgSFAgdG8gTGF0aW4tMSAqLworICAgIHhsY2FzLCAgICAgICAgICAgICAgICAgICAgICAv KiAyLDI0IExhdGluL0N5cmlsbGljIHRvIExhdGluLTEgKi8KKyAgICB4YWNhcywgICAgICAgICAg ICAgICAgICAgICAgLyogMiwyNSBDUDg2NiB0byBMYXRpbi0xICovCisgICAgeHNrYXMsICAgICAg ICAgICAgICAgICAgICAgIC8qIDIsMjYgU2hvcnQgS09JIHRvIExhdGluLTEgKi8KKyAgICB4azhh cywgICAgICAgICAgICAgICAgICAgICAgLyogMiwyNyBPbGQgS09JLTggQ3lyaWxsaWMgdG8gTGF0 aW4tMSAqLworICAgIE5VTEwsCQkJLyogMiwyOCBLYW5qaSAuLi4gKi8KKyAgICBOVUxMLAkJCS8q IDIsMjkgKi8KKyAgICBOVUxMLAkJCS8qIDIsMzAgKi8KKyAgICBOVUxMLAkJCS8qIDIsMzEgKi8K KyAgICB4aDdhcywJCQkvKiAyLDMyIEhlYnJldy03IHRvIExhdGluLTEgKi8KKyAgICB4bGhsMSwJ CQkvKiAyLDMzIExhdGluL0hlYnJldyB0byBMYXRpbi0xICovCisgICAgeDYybDEsCQkJLyogMiwz NCBDUDg2MiBIZWJyZXcgdG8gTGF0aW4tMSAqLworICAgIHhlZ2FzLAkJCS8qIDIsMzUgRUxPVCA5 MjcgR3JlZWsgdG8gTGF0aW4tMSAqLworICAgIHhsZ2wxLAkJCS8qIDIsMzYgTGF0aW4vR3JlZWsg dG8gTGF0aW4tMSAqLworICAgIE5VTEwsCQkJLyogMiwzNyBDUDg2OSB0byBMYXRpbi0xICovCisg ICAgTlVMTCwJCQkvKiAyLDM4IExhdGluLTkgdG8gTGF0aW4tMSAqLworICAgIHg1OGwxLAkJCS8q IDIsMzkgQ1A4NTggdG8gTGF0aW4tMSAqLworICAgIHg1NWFzLAkJCS8qIDIsNDAgQ1A4NTUgdG8g TGF0aW4tMSAqLworICAgIHgxMjUxYXMsCQkJLyogMiw0MSBDUDEyNTEgdG8gTGF0aW4tMSAqLwor ICAgIHhsZWZ0MTI4LAkJCS8qIDIsNDIgQnVsZ2FyaWFuIHRvIExhdGluLTEgKi8KKyAgICB4MTI1 MGwxLAkJCS8qIDIsNDMgQ1AxMjUwIHRvIExhdGluLTEgKi8KKyAgICB4bXpsMSwJCQkvKiAyLDQ0 IE1hem92aWEgdG8gTGF0aW4tMSAqLworICAgIE5VTEwsCQkJLyogMiw0NSBVQ1MtMiB0byBMYXRp bi0xICovCisgICAgTlVMTCwJCQkvKiAyLDQ2IFVURi04IHRvIExhdGluLTEgKi8KKyAgICB4azhh cywJCQkvKiAyLDQ3IEtPSThSIHRvIExhdGluLTEgKi8KKyAgICB4azhhcywJCQkvKiAyLDQ4IEtP SThVIHRvIExhdGluLTEgKi8KKyAgICB4dzFsMSwJCQkvKiAyLDQ5IENQMTI1MiB0byBMYXRpbi0x ICovCisgICAgTlVMTCwJCQkvKiAzLDAgdXMgYXNjaWkgdG8gbGF0aW4tMiAqLworICAgIE5VTEws CQkJLyogMywxIHVrIGFzY2lpIHRvIGxhdGluLTIgKi8KKyAgICB4ZHVhcywJCQkvKiAzLDIgZHV0 Y2ggbnJjIHRvIGxhdGluLTIgKi8KKyAgICB4ZmlhcywJCQkvKiAzLDMgZmlubmlzaCBucmMgdG8g bGF0aW4tMiAqLworICAgIHhmcmFzLAkJCS8qIDMsNCBmcmVuY2ggbnJjIHRvIGxhdGluLTIgKi8K KyAgICB4ZmNhcywJCQkvKiAzLDUgZnJlbmNoIGNhbmFkaWFuIG5yYyB0byBsYXRpbi0yICovCisg ICAgeGdlbDIsCQkJLyogMyw2IGdlcm1hbiBucmMgdG8gbGF0aW4tMiAqLworICAgIHhodWwyLAkJ CS8qIDMsNyBodW5nYXJpYW4gbnJjIHRvIGxhdGluLTIgKi8KKyAgICB4aXRhcywJCQkvKiAzLDgg aXRhbGlhbiBucmMgdG8gbGF0aW4tMiAqLworICAgIHhub2FzLAkJCS8qIDMsOSBub3J3ZWdpYW4v ZGFuaXNoIG5yYyB0byBsYXRpbi0yICovCisgICAgeHBvYXMsCQkJLyogMywxMCBwb3J0dWd1ZXNl IG5yYyB0byBsYXRpbi0yICovCisgICAgeHNwYXMsCQkJLyogMywxMSBzcGFuaXNoIG5yYyB0byBs YXRpbi0yICovCisgICAgeHN3YXMsCQkJLyogMywxMiBzd2VkaXNoIG5yYyB0byBsYXRpbi0yICov CisgICAgeGNoYXMsCQkJLyogMywxMyBzd2lzcyBucmMgdG8gbGF0aW4tMiAqLworICAgIHhsMWwy LAkJCS8qIDMsMTQgbGF0aW4tMSB0byBsYXRpbi0yICovCisgICAgTlVMTCwJCQkvKiAzLDE1IGxh dGluLTIgdG8gbGF0aW4tMiAqLworICAgIHhsMWwyLAkJCS8qIDMsMTYgZGVjIG1jcyB0byBsYXRp bi0yICovCisgICAgeG5lbDIsICAgICAgICAgICAgICAgICAgICAgIC8qIDMsMTcgTmVYVCB0byBM YXRpbi0yICovCisgICAgeDQzbDIsICAgICAgICAgICAgICAgICAgICAgIC8qIDMsMTggQ1A0Mzcg dG8gTGF0aW4tMiAqLworICAgIHg4NWwyLCAgICAgICAgICAgICAgICAgICAgICAvKiAzLDE5IENQ ODUwIHRvIExhdGluLTIgKi8KKyAgICB4NTJsMiwgICAgICAgICAgICAgICAgICAgICAgLyogMywy MCBDUDg1MiB0byBMYXRpbi0yICovCisgICAgeGFxbDIsICAgICAgICAgICAgICAgICAgICAgIC8q IDMsMjEgTWFjaW50b3NoIExhdGluIHRvIExhdGluLTIgKi8KKyAgICB4ZGdsMiwgICAgICAgICAg ICAgICAgICAgICAgLyogMywyMiBER0kgdG8gTGF0aW4tMiAqLworICAgIHhyOGwyLCAgICAgICAg ICAgICAgICAgICAgICAvKiAzLDIzIEhQIHRvIExhdGluLTIgKi8KKyAgICB4bGNhcywgICAgICAg ICAgICAgICAgICAgICAgLyogMywyNCBMYXRpbi9DeXJpbGxpYyB0byBMYXRpbi0yICovCisgICAg eGFjYXMsICAgICAgICAgICAgICAgICAgICAgIC8qIDMsMjUgQ1A4NjYgdG8gTGF0aW4tMiAqLwor ICAgIHhza2FzLCAgICAgICAgICAgICAgICAgICAgICAvKiAzLDI2IFNob3J0IEtPSSB0byBMYXRp bi0yICovCisgICAgeGs4YXMsICAgICAgICAgICAgICAgICAgICAgIC8qIDMsMjcgT2xkIEtPSS04 IEN5cmlsbGljIHRvIExhdGluLTIgKi8KKyAgICBOVUxMLAkJCS8qIDMsMjggS2FuamkgLi4uICov CisgICAgTlVMTCwJCQkvKiAzLDI5ICovCisgICAgTlVMTCwJCQkvKiAzLDMwICovCisgICAgTlVM TCwJCQkvKiAzLDMxICovCisgICAgeGg3YXMsCQkJLyogMywzMiBIZWJyZXctNyB0byBMYXRpbi0y ICovCisgICAgeGxoYXMsCQkJLyogMywzMyBMYXRpbi9IZWJyZXcgdG8gTGF0aW4tMiAqLworICAg IHg2MmFzLAkJCS8qIDMsMzQgQ1A4NjIgSGVicmV3IHRvIExhdGluLTIgKi8KKyAgICB4ZWdhcywJ CQkvKiAzLDM1IEVMT1QgOTI3IEdyZWVrIHRvIExhdGluLTIgKi8KKyAgICB4bDJsZywJCQkvKiAz LDM2IExhdGluL0dyZWVrIHRvIExhdGluLTIgKi8KKyAgICB4bGVmdDEyOCwJCQkvKiAzLDM3IENQ ODY5IHRvIExhdGluLTIgKi8KKyAgICB4bDlsMiwJCQkvKiAzLDM4IExhdGluLTkgdG8gTGF0aW4t MiAqLworICAgIHg1OGwyLAkJCS8qIDMsMzkgQ1A4NTggdG8gTGF0aW4tMiAqLworICAgIHg1NWFz LAkJCS8qIDMsNDAgQ1A4NTUgdG8gTGF0aW4tMiAqLworICAgIHgxMjUxYXMsCQkJLyogMyw0MSBD UDEyNTEgdG8gTGF0aW4tMiAqLworICAgIHhsZWZ0MTI4LAkJCS8qIDMsNDIgQnVsZ2FyaWFuIHRv IExhdGluLTIgKi8KKyAgICB4MTI1MGwyLAkJCS8qIDMsNDMgQ1AxMjUwIHRvIExhdGluLTIgKi8K KyAgICB4bXpsMiwJCQkvKiAzLDQ0IE1hem92aWEgdG8gTGF0aW4tMiAqLworICAgIE5VTEwsCQkJ LyogMyw0NSBVQ1MtMiB0byBMYXRpbi0yICovCisgICAgTlVMTCwJCQkvKiAzLDQ2IFVURi04IHRv IExhdGluLTIgKi8KKyAgICB4azhhcywJCQkvKiAzLDQ3IEtPSThSIHRvIExhdGluLTIgKi8KKyAg ICB4azhhcywJCQkvKiAzLDQ4IEtPSThVIHRvIExhdGluLTIgKi8KKyAgICB4dzFsMiwJCQkvKiAz LDQ5IENQMTI1MiB0byBsYXRpbi0yICovCisgICAgeGFzbGMsCQkJLyogNCwwIHVzIGFzY2lpIHRv IGxhdGluL2N5cmlsbGljICovCisgICAgeGFzbGMsCQkJLyogNCwxIHVrIGFzY2lpIHRvIGxhdGlu L2N5cmlsbGljICovCisgICAgeGR1YXMsCQkJLyogNCwyIGR1dGNoIG5yYyB0byBsYXRpbi9jeXJp bGxpYyAqLworICAgIHhmaWFzLAkJCS8qIDQsMyBmaW5uaXNoIG5yYyB0byBsYXRpbi9jeXJpbGxp YyAqLworICAgIHhmcmFzLAkJCS8qIDQsNCBmcmVuY2ggbnJjIHRvIGxhdGluL2N5cmlsbGljICov CisgICAgeGZjYXMsCQkJLyogNCw1IGZyZW5jaCBjYW5hZGlhbiBucmMgdG8gbGF0aW4vY3lyaWxs aWMgKi8KKyAgICB4Z2VhcywJCQkvKiA0LDYgZ2VybWFuIG5yYyB0byBsYXRpbi9jeXJpbGxpYyAq LworICAgIHhodWFzLAkJCS8qIDQsNyBodW5nYXJpYW4gbnJjIHRvIGxhdGluL2N5cmlsbGljICov CisgICAgeGl0YXMsCQkJLyogNCw4IGl0YWxpYW4gbnJjIHRvIGxhdGluL2N5cmlsbGljICovCisg ICAgeG5vYXMsCQkJLyogNCw5IG5vcmdlL2RhbmlzaCBucmMgdG8gbGF0aW4vY3lyaWxsaWMgKi8K KyAgICB4cG9hcywJCQkvKiA0LDEwIHBvcnR1Z3Vlc2UgbnJjIHRvIGxhdGluL2N5cmlsbGljICov CisgICAgeHNwYXMsCQkJLyogNCwxMSBzcGFuaXNoIG5yYyB0byBsYXRpbi9jeXJpbGxpYyAqLwor ICAgIHhzd2FzLAkJCS8qIDQsMTIgc3dlZGlzaCBucmMgdG8gbGF0aW4vY3lyaWxsaWMgKi8KKyAg ICB4Y2hhcywJCQkvKiA0LDEzIHN3aXNzIG5yYyB0byBsYXRpbi9jeXJpbGxpYyAqLworICAgIHhs MWFzLAkJCS8qIDQsMTQgbGF0aW4tMSB0byBsYXRpbi9jeXJpbGxpYyAqLworICAgIHhsMmFzLAkJ CS8qIDQsMTUgbGF0aW4tMiB0byBsYXRpbi9jeXJpbGxpYyAqLworICAgIHhkbWFzLAkJCS8qIDQs MTYgZGVjIG1jcyB0byBsYXRpbi9jeXJpbGxpYyAqLworICAgIHhuZWFzLAkJCS8qIDQsMTcgTmVY VCB0byBsYXRpbi9jeXJpbGxpYyAqLworICAgIHg0M2FzLAkJCS8qIDQsMTggQ1A0MzcgdG8gbGF0 aW4vY3lyaWxsaWMgKi8KKyAgICB4ODVhcywJCQkvKiA0LDE5IENQODUwIHRvIGxhdGluL2N5cmls bGljICovCisgICAgeDUyYXMsCQkJLyogNCwyMCBDUDg1MiB0byBsYXRpbi9jeXJpbGxpYyAqLwor ICAgIHhhcWFzLAkJCS8qIDQsMjEgTWFjaW50b3NoIExhdGluIHRvIGxhdGluL2N5cmlsbGljICov CisgICAgeGRnYXMsCQkJLyogNCwyMiBER0kgdG8gTGF0aW4vQ3lyaWxsaWMgKi8KKyAgICB4cjhh cywJCQkvKiA0LDIzIEhQIHRvIExhdGluL0N5cmlsbGljICovCisgICAgTlVMTCwgICAgICAgICAg ICAgICAgICAgICAgIC8qIDQsMjQgTGF0aW4vQ3lyaWxsaWMgdG8gTGF0aW4vQ3lyaWxsaWMgKi8K KyAgICB4YWNsYywgICAgICAgICAgICAgICAgICAgICAgLyogNCwyNSBDUDg2NiB0byBMYXRpbi9D eXJpbGxpYyAqLworICAgIHhza2N5LCAgICAgICAgICAgICAgICAgICAgICAvKiA0LDI2IFNob3J0 IEtPSSB0byBMYXRpbi9DeXJpbGxpYyAqLworICAgIHhrOGxjLCAgICAgICAgICAgICAgICAgICAg ICAvKiA0LDI3IE9sZCBLT0ktOCBDeXJpbGxpYyB0byBMYXRpbi9DeXJpbGxpYyAqLworICAgIE5V TEwsCQkJLyogNCwyOCBLYW5qaS4uLiAqLworICAgIE5VTEwsCQkJLyogNCwyOSAqLworICAgIE5V TEwsCQkJLyogNCwzMCAqLworICAgIE5VTEwsCQkJLyogNCwzMSAqLworICAgIHhoN2FzLAkJCS8q IDQsMzIgSGVicmV3LTcgdG8gTGF0aW4vQ3lyaWxsaWMgKi8KKyAgICB4bGhhcywJCQkvKiA0LDMz IExhdGluL0hlYnJldyB0byBMYXRpbi9DeXJpbGxpYyAqLworICAgIHg2MmFzLAkJCS8qIDQsMzQg Q1A4NjIgSGVicmV3IHRvIExhdGluL0N5cmlsbGljICovCisgICAgeGVnYXMsCQkJLyogNCwzNSBF TE9UIDkyNyBHcmVlayB0byBMYXRpbi9DeXJpbGxpYyAqLworICAgIHhsZWZ0MTYwLAkJCS8qIDQs MzYgTGF0aW4vR3JlZWsgdG8gTGF0aW4vQ3lyaWxsaWMgKi8KKyAgICB4bGVmdDEyOCwJCQkvKiA0 LDM3IENQODY5IHRvIExhdGluL0N5cmlsbGljICovCisgICAgeGwxYXMsCQkJLyogNCwzOCBsYXRp bi05IHRvIGxhdGluL2N5cmlsbGljICovCisgICAgeGxlZnQxMjgsCQkJLyogNCwzOSBDUDg1OCB0 byBMYXRpbi9DeXJpbGxpYyAqLworICAgIHg1NWxjLAkJCS8qIDQsNDAgQ1A4NTUgdG8gTGF0aW4v Q3lyaWxsaWMgKi8KKyAgICB4MTI1MWxjLAkJCS8qIDQsNDEgQ1AxMjUxIHRvIExhdGluL0N5cmls bGljICovCisgICAgeGJ1bGMsCQkJLyogNCw0MiBCdWxnYXJpYW4gdG8gTGF0aW4vQ3lyaWxsaWMg Ki8KKyAgICB4MTI1MGFzLAkJCS8qIDQsNDMgQ1AxMjUwIHRvIExhdGluL0N5cmlsbGljICovCisg ICAgeG16YXMsCQkJLyogNCw0NCBNYXpvdmlhIHRvIExhdGluL0N5cmlsbGljICovCisgICAgTlVM TCwJCQkvKiA0LDQ1IFVDUy0yIHRvIExhdGluL0N5cmlsbGljICovCisgICAgTlVMTCwJCQkvKiA0 LDQ2IFVURi04IHRvIExhdGluL0N5cmlsbGljICovCisgICAgeGtybGMsCQkJLyogNCw0NyBLT0k4 UiB0byBMYXRpbi9DeXJpbGxpYyAqLworICAgIHhrdWxjLAkJCS8qIDQsNDggS09JOFUgdG8gTGF0 aW4vQ3lyaWxsaWMgKi8KKyAgICB4dzFsYywJCQkvKiA0LDQ5IENQMTI1MiB0byBMYXRpbi9DeXJp bGxpYyAqLworICAgIE5VTEwsCQkJLyogNSwwMCAqLworICAgIE5VTEwsCQkJLyogNSwwMSAqLwor ICAgIE5VTEwsCQkJLyogNSwwMiAqLworICAgIE5VTEwsCQkJLyogNSwwMyAqLworICAgIE5VTEws CQkJLyogNSwwNCAqLworICAgIE5VTEwsCQkJLyogNSwwNSAqLworICAgIE5VTEwsCQkJLyogNSww NiAqLworICAgIE5VTEwsCQkJLyogNC4wNyAqLworICAgIE5VTEwsCQkJLyogNSwwOCAqLworICAg IE5VTEwsCQkJLyogNSwwOSAqLworICAgIE5VTEwsCQkJLyogNSwxMCAqLworICAgIE5VTEwsCQkJ LyogNSwxMSAqLworICAgIE5VTEwsCQkJLyogNSwxMiAqLworICAgIE5VTEwsCQkJLyogNSwxMyAq LworICAgIE5VTEwsCQkJLyogNSwxNCAqLworICAgIE5VTEwsCQkJLyogNSwxNSAqLworICAgIE5V TEwsCQkJLyogNSwxNiAqLworICAgIE5VTEwsCQkJLyogNSwxNyAqLworICAgIE5VTEwsCQkJLyog NSwxOCAqLworICAgIE5VTEwsCQkJLyogNSwxOSAqLworICAgIE5VTEwsCQkJLyogNSwyMCAqLwor ICAgIE5VTEwsCQkJLyogNSwyMSAqLworICAgIE5VTEwsCQkJLyogNSwyMiAqLworICAgIE5VTEws CQkJLyogNSwyMyAqLworICAgIE5VTEwsCQkJLyogNSwyNCAqLworICAgIE5VTEwsCQkJLyogNSwy NSAqLworICAgIE5VTEwsCQkJLyogNSwyNiAqLworICAgIE5VTEwsCQkJLyogNSwyNyAqLworICAg IE5VTEwsCQkJLyogNSwyOCAqLworICAgIE5VTEwsCQkJLyogNSwyOSAqLworICAgIE5VTEwsCQkJ LyogNSwzMCAqLworICAgIE5VTEwsCQkJLyogNSwzMSAqLworICAgIE5VTEwsCQkJLyogNSwzMiAq LworICAgIE5VTEwsCQkJLyogNSwzMyAqLworICAgIE5VTEwsCQkJLyogNSwzNCAqLworICAgIE5V TEwsCQkJLyogNSwzNSAqLworICAgIE5VTEwsCQkJLyogNSwzNiAqLworICAgIE5VTEwsCQkJLyog NSwzNyAqLworICAgIE5VTEwsCQkJLyogNSwzOCAqLworICAgIE5VTEwsCQkJLyogNSwzOSAqLwor ICAgIE5VTEwsCQkJLyogNSw0MCAqLworICAgIE5VTEwsCQkJLyogNSw0MSAqLworICAgIE5VTEws CQkJLyogNSw0MiAqLworICAgIE5VTEwsCQkJLyogNSw0MyAqLworICAgIE5VTEwsCQkJLyogNSw0 NCAqLworICAgIE5VTEwsCQkJLyogNSw0NSAqLworICAgIE5VTEwsCQkJLyogNSw0NiAqLworICAg IE5VTEwsCQkJLyogNSw0NyAqLworICAgIE5VTEwsCQkJLyogNSw0OCAqLworICAgIE5VTEwsCQkJ LyogNSw0OSAqLworICAgIE5VTEwsCQkJLyogNiwwIHVzIGFzY2lpIHRvIExhdGluL0hlYnJldyAq LworICAgIE5VTEwsCQkJLyogNiwxIHVrIGFzY2lpIHRvIExhdGluL0hlYnJldyAqLworICAgIHhk dWFzLAkJCS8qIDYsMiBkdXRjaCBucmMgdG8gTGF0aW4vSGVicmV3ICovCisgICAgeGZpYXMsCQkJ LyogNiwzIGZpbm5pc2ggbnJjIHRvIExhdGluL0hlYnJldyAqLworICAgIHhmcmFzLAkJCS8qIDYs NCBmcmVuY2ggbnJjIHRvIExhdGluL0hlYnJldyAqLworICAgIHhmY2FzLAkJCS8qIDYsNSBmcmVu Y2ggY2FuYWRpYW4gbnJjIHRvIExhdGluL0hlYnJldyAqLworICAgIHhnZWFzLAkJCS8qIDYsNiBn ZXJtYW4gbnJjIHRvIExhdGluL0hlYnJldyAqLworICAgIHhodWFzLAkJCS8qIDYsNyBodW5nYXJp YW4gbnJjIHRvIExhdGluL0hlYnJldyAqLworICAgIHhpdGFzLAkJCS8qIDYsOCBpdGFsaWFuIG5y YyB0byBMYXRpbi9IZWJyZXcgKi8KKyAgICB4bm9hcywJCQkvKiA2LDkgbm9yZ2UvZGFuaXNoIG5y YyB0byBMYXRpbi9IZWJyZXcgKi8KKyAgICB4cG9hcywJCQkvKiA2LDEwIHBvcnR1Z3Vlc2UgbnJj IHRvIExhdGluL0hlYnJldyAqLworICAgIHhzcGFzLAkJCS8qIDYsMTEgc3BhbmlzaCBucmMgdG8g TGF0aW4vSGVicmV3ICovCisgICAgeHN3YXMsCQkJLyogNiwxMiBzd2VkaXNoIG5yYyB0byBMYXRp bi9IZWJyZXcgKi8KKyAgICB4Y2hhcywJCQkvKiA2LDEzIHN3aXNzIG5yYyB0byBMYXRpbi9IZWJy ZXcgKi8KKyAgICB4bDFsaCwJCQkvKiA2LDE0IGxhdGluLTEgdG8gTGF0aW4vSGVicmV3ICovCisg ICAgeGwyYXMsCQkJLyogNiwxNSBsYXRpbi0yIHRvIExhdGluL0hlYnJldyAqLworICAgIHhkbWFz LAkJCS8qIDYsMTYgZGVjIG1jcyB0byBMYXRpbi9IZWJyZXcgKi8KKyAgICB4bmVhcywJCQkvKiA2 LDE3IE5lWFQgdG8gTGF0aW4vSGVicmV3ICovCisgICAgeDQzYXMsCQkJLyogNiwxOCBDUDQzNyB0 byBMYXRpbi9IZWJyZXcgKi8KKyAgICB4ODVhcywJCQkvKiA2LDE5IENQODUwIHRvIExhdGluL0hl YnJldyAqLworICAgIHg1MmFzLAkJCS8qIDYsMjAgQ1A4NTIgdG8gTGF0aW4vSGVicmV3ICovCisg ICAgeGFxYXMsCQkJLyogNiwyMSBNYWNpbnRvc2ggTGF0aW4gdG8gTGF0aW4vSGVicmV3ICovCisg ICAgeGRnYXMsCQkJLyogNiwyMiBER0kgdG8gTGF0aW4vSGVicmV3ICovCisgICAgeHI4YXMsCQkJ LyogNiwyMyBIUCB0byBMYXRpbi9IZWJyZXcgKi8KKyAgICB4bGNhcywgICAgICAgICAgICAgICAg ICAgICAgLyogNiwyNCBMYXRpbi9DeXJpbGxpYyB0byBMYXRpbi9IZWJyZXcgKi8KKyAgICB4YWNh cywgICAgICAgICAgICAgICAgICAgICAgLyogNiwyNSBDUDg2NiB0byBMYXRpbi9IZWJyZXcgKi8K KyAgICB4c2thcywgICAgICAgICAgICAgICAgICAgICAgLyogNiwyNiBTaG9ydCBLT0kgdG8gTGF0 aW4vSGVicmV3ICovCisgICAgeGs4YXMsICAgICAgICAgICAgICAgICAgICAgIC8qIDYsMjcgT2xk IEtPSS04IEN5cmlsbGljIHRvIExhdGluL0hlYnJldyAqLworICAgIE5VTEwsCQkJLyogNiwyOCBL YW5qaS4uLiAqLworICAgIE5VTEwsCQkJLyogNiwyOSAqLworICAgIE5VTEwsCQkJLyogNiwzMCAq LworICAgIE5VTEwsCQkJLyogNiwzMSAqLworICAgIHhoN2xoLAkJCS8qIDYsMzIgSGVicmV3LTcg dG8gTGF0aW4vSGVicmV3ICovCisgICAgTlVMTCwJCQkvKiA2LDMzIExhdGluL0hlYnJldyB0byBM YXRpbi9IZWJyZXcgKi8KKyAgICB4NjJsaCwJCQkvKiA2LDM0IENQODYyIEhlYnJldyB0byBMYXRp bi9IZWJyZXcgKi8KKyAgICB4ZWdhcywJCQkvKiA2LDM1IEVMT1QgOTI3IEdyZWVrIHRvIExhdGlu L0hlYnJldyAqLworICAgIHhsZ2FzLAkJCS8qIDYsMzYgTGF0aW4vR3JlZWsgdG8gTGF0aW4vSGVi cmV3ICovCisgICAgeDY5YXMsCQkJLyogNiwzNyBDUDg2OSB0byBMYXRpbi9IZWJyZXcgKi8KKyAg ICB4bDFhcywJCQkvKiA2LDM4IGxhdGluLTkgdG8gTGF0aW4vSGVicmV3ICovCisgICAgeDU4YXMs CQkJLyogNiwzOSBDUDg1OCB0byBMYXRpbi9IZWJyZXcgKi8KKyAgICB4NTVhcywJCQkvKiA2LDQw IENQODU1IHRvIExhdGluL0hlYnJldyAqLworICAgIHgxMjUxYXMsCQkJLyogNiw0MSBDUDEyNTEg dG8gTGF0aW4vSGVicmV3ICovCisgICAgeGxlZnQxMjgsCQkJLyogNiw0MiBCdWxnYXJpYW4gdG8g TGF0aW4vSGVicmV3ICovCisgICAgeDEyNTBhcywJCQkvKiA2LDQzIENQMTI1MCB0byBMYXRpbi9I ZWJyZXcgKi8KKyAgICB4bXphcywJCQkvKiA2LDQ0IE1hem92aWEgdG8gTGF0aW4vSGVicmV3ICov CisgICAgTlVMTCwJCQkvKiA2LDQ1IFVDUy0yIHRvIExhdGluL0hlYnJldyAqLworICAgIE5VTEws CQkJLyogNiw0NiBVVEYtOCB0byBMYXRpbi9IZWJyZXcgKi8KKyAgICBOVUxMLAkJCS8qIDYsNDcg S09JOFIgdG8gTGF0aW4vSGVicmV3ICovCisgICAgTlVMTCwJCQkvKiA2LDQ4IEtPSThVIHRvIExh dGluL0hlYnJldyAqLworICAgIHh3MWxoLAkJCS8qIDYsNDkgQ1AxMjUyIHRvIExhdGluL0hlYnJl dyAqLworICAgIE5VTEwsCQkJLyogNywwIHVzIGFzY2lpIHRvIExhdGluL0dyZWVrICovCisgICAg TlVMTCwJCQkvKiA3LDEgdWsgYXNjaWkgdG8gTGF0aW4vR3JlZWsgKi8KKyAgICB4ZHVhcywJCQkv KiA3LDIgZHV0Y2ggbnJjIHRvIExhdGluL0dyZWVrICovCisgICAgeGZpYXMsCQkJLyogNywzIGZp bm5pc2ggbnJjIHRvIExhdGluL0dyZWVrICovCisgICAgeGZyYXMsCQkJLyogNyw0IGZyZW5jaCBu cmMgdG8gTGF0aW4vR3JlZWsgKi8KKyAgICB4ZmNhcywJCQkvKiA3LDUgZnJlbmNoIGNhbmFkaWFu IG5yYyB0byBMYXRpbi9HcmVlayAqLworICAgIHhnZWFzLAkJCS8qIDcsNiBnZXJtYW4gbnJjIHRv IExhdGluL0dyZWVrICovCisgICAgeGh1YXMsCQkJLyogNyw3IGh1bmdhcmlhbiBucmMgdG8gTGF0 aW4vR3JlZWsgKi8KKyAgICB4aXRhcywJCQkvKiA3LDggaXRhbGlhbiBucmMgdG8gTGF0aW4vR3Jl ZWsgKi8KKyAgICB4bm9hcywJCQkvKiA3LDkgbm9yZ2UvZGFuaXNoIG5yYyB0byBMYXRpbi9HcmVl ayAqLworICAgIHhwb2FzLAkJCS8qIDcsMTAgcG9ydHVndWVzZSBucmMgdG8gTGF0aW4vR3JlZWsg Ki8KKyAgICB4c3BhcywJCQkvKiA3LDExIHNwYW5pc2ggbnJjIHRvIExhdGluL0dyZWVrICovCisg ICAgeHN3YXMsCQkJLyogNywxMiBzd2VkaXNoIG5yYyB0byBMYXRpbi9HcmVlayAqLworICAgIHhj aGFzLAkJCS8qIDcsMTMgc3dpc3MgbnJjIHRvIExhdGluL0dyZWVrICovCisgICAgeGwxbGcsCQkJ LyogNywxNCBsYXRpbi0xIHRvIExhdGluL0dyZWVrICovCisgICAgeGwybGcsCQkJLyogNywxNSBs YXRpbi0yIHRvIExhdGluL0dyZWVrICovCisgICAgeGwxbGcsCQkJLyogNywxNiBkZWMgbWNzIHRv IExhdGluL0dyZWVrICovCisgICAgeG5lYXMsCQkJLyogNywxNyBOZVhUIHRvIExhdGluL0dyZWVr ICovCisgICAgeGxlZnQxMjgsCQkJLyogNywxOCBDUDQzNyB0byBMYXRpbi9HcmVlayAqLworICAg IHg4NWFzLAkJCS8qIDcsMTkgQ1A4NTAgdG8gTGF0aW4vR3JlZWsgKi8KKyAgICB4NTJhcywJCQkv KiA3LDIwIENQODUyIHRvIExhdGluL0dyZWVrICovCisgICAgeGFxYXMsCQkJLyogNywyMSBNYWNp bnRvc2ggTGF0aW4gdG8gTGF0aW4vR3JlZWsgKi8KKyAgICB4ZGdhcywJCQkvKiA3LDIyIERHSSB0 byBMYXRpbi9HcmVlayAqLworICAgIHhyOGFzLAkJCS8qIDcsMjMgSFAgdG8gTGF0aW4vR3JlZWsg Ki8KKyAgICB4bGVmdDE2MCwgICAgICAgICAgICAgICAgICAgLyogNywyNCBMYXRpbi9DeXJpbGxp YyB0byBMYXRpbi9HcmVlayAqLworICAgIHhsZWZ0MTI4LCAgICAgICAgICAgICAgICAgICAvKiA3 LDI1IENQODY2IHRvIExhdGluL0dyZWVrICovCisgICAgeHNrYXMsICAgICAgICAgICAgICAgICAg ICAgIC8qIDcsMjYgU2hvcnQgS09JIHRvIExhdGluL0dyZWVrICovCisgICAgeGs4YXMsICAgICAg ICAgICAgICAgICAgICAgIC8qIDcsMjcgT2xkIEtPSS04IEN5cmlsbGljIHRvIExhdGluL0dyZWVr ICovCisgICAgTlVMTCwJCQkvKiA3LDI4IEthbmppLi4uICovCisgICAgTlVMTCwJCQkvKiA3LDI5 ICovCisgICAgTlVMTCwJCQkvKiA3LDMwICovCisgICAgTlVMTCwJCQkvKiA3LDMxICovCisgICAg eGg3YXMsCQkJLyogNywzMiBIZWJyZXctNyB0byBMYXRpbi9HcmVlayAqLworICAgIE5VTEwsCQkJ LyogNywzMyBMYXRpbi9IZWJyZXcgdG8gTGF0aW4vR3JlZWsgKi8KKyAgICB4NjJhcywJCQkvKiA3 LDM0IENQODYyIEhlYnJldyB0byBMYXRpbi9HcmVlayAqLworICAgIHhlZ2xnLAkJCS8qIDcsMzUg RUxPVCA5MjcgR3JlZWsgdG8gTGF0aW4vR3JlZWsgKi8KKyAgICBOVUxMLAkJCS8qIDcsMzYgTGF0 aW4vR3JlZWsgdG8gTGF0aW4vR3JlZWsgKi8KKyAgICB4NjlsZywJCQkvKiA3LDM3IENQODY5IHRv IExhdGluL0dyZWVrICovCisgICAgeGwxYXMsCQkJLyogNywzOCBsYXRpbi05IHRvIExhdGluL0dy ZWVrICovCisgICAgeGwxYXMsCQkJLyogNywzOSBsYXRpbi05IHRvIExhdGluL0hlYnJldyovCisg ICAgeGxlZnQxMjgsCQkJLyogNyw0MCBDUDg1NSB0byBMYXRpbi9HcmVlayAqLworICAgIHhsZWZ0 MTI4LAkJCS8qIDcsNDEgQ1AxMjUxIHRvIExhdGluL0dyZWVrICovCisgICAgeGxlZnQxMjgsCQkJ LyogNyw0MiBCdWxnYXJpYW4gdG8gTGF0aW4vR3JlZWsgKi8KKyAgICB4MTI1MGFzLAkJCS8qIDcs NDMgQ1AxMjUwIHRvIExhdGluL0dyZWVrICovCisgICAgeG16YXMsCQkJLyogNyw0NCBNYXpvdmlh IHRvIExhdGluL0dyZWVrICovCisgICAgTlVMTCwJCQkvKiA3LDQ1IFVDUy0yIHRvIExhdGluL0dy ZWVrICovCisgICAgTlVMTCwJCQkvKiA3LDQ2IFVURi04IHRvIExhdGluL0dyZWVrICovCisgICAg TlVMTCwJCQkvKiA3LDQ3IEtPSThSIHRvIExhdGluL0dyZWVrICovCisgICAgTlVMTCwJCQkvKiA3 LDQ4IEtPSThVIHRvIExhdGluL0dyZWVrICovCisgICAgeHcxbGcsCQkJLyogNyw0OSBDUDEyNTIg dG8gTGF0aW4vR3JlZWsgKi8KKyAgICBOVUxMLAkJCS8qIDgsMCB1cyBhc2NpaSB0byBsYXRpbi05 ICovCisgICAgeHVrbDEsCQkJLyogOCwxIHVrIGFzY2lpIHRvIGxhdGluLTkgKi8KKyAgICB4ZHVs MSwJCQkvKiA4LDIgZHV0Y2ggbnJjIHRvIGxhdGluLTkgKi8KKyAgICB4ZmlsMSwJCQkvKiA4LDMg ZmlubmlzaCBucmMgdG8gbGF0aW4tOSAqLworICAgIHhmcmwxLAkJCS8qIDgsNCBmcmVuY2ggbnJj IHRvIGxhdGluLTkgKi8KKyAgICB4ZmNsMSwJCQkvKiA4LDUgZnJlbmNoIGNhbmFkaWFuIG5yYyB0 byBsYXRpbi05ICovCisgICAgeGdlbDEsCQkJLyogOCw2IGdlcm1hbiBucmMgdG8gbGF0aW4tOSAq LworICAgIHhodWwxLAkJCS8qIDgsNyBodW5nYXJpYW4gbnJjIHRvIGxhdGluLTkgKi8KKyAgICB4 aXRsMSwJCQkvKiA4LDggaXRhbGlhbiBucmMgdG8gbGF0aW4tOSAqLworICAgIHhub2wxLAkJCS8q IDgsOSBub3J3ZWdpYW4vZGFuaXNoIG5yYyB0byBsYXRpbi05ICovCisgICAgeHBvbDEsCQkJLyog OCwxMCBwb3J0dWd1ZXNlIG5yYyB0byBsYXRpbi05ICovCisgICAgeHNwbDEsCQkJLyogOCwxMSBz cGFuaXNoIG5yYyB0byBsYXRpbi05ICovCisgICAgeHN3bDEsCQkJLyogOCwxMiBzd2VkaXNoIG5y YyB0byBsYXRpbi05ICovCisgICAgeGNobDEsCQkJLyogOCwxMyBzd2lzcyBucmMgdG8gbGF0aW4t OSAqLworICAgIE5VTEwsCQkJLyogOCwxNCBsYXRpbi0xIHRvIGxhdGluLTkgKi8KKyAgICB4bDJs OSwJCQkvKiA4LDE1IGxhdGluLTIgdG8gbGF0aW4tOSAqLworICAgIHhkbWw5LAkJCS8qIDgsMTYg ZGVjIG1jcyB0byBsYXRpbi05ICovCisgICAgeG5lbDksICAgICAgICAgICAgICAgICAgICAgIC8q IDgsMTcgTmVYVCBUbyBMYXRpbi05ICovCisgICAgeDQzbDEsICAgICAgICAgICAgICAgICAgICAg IC8qIDgsMTggQ1A0MzcgVG8gTGF0aW4tOSAqLworICAgIHg4NWwxLCAgICAgICAgICAgICAgICAg ICAgICAvKiA4LDE5IENQODUwIFRvIExhdGluLTkgKi8KKyAgICB4NTJsMSwgICAgICAgICAgICAg ICAgICAgICAgLyogOCwyMCBDUDg1MiBUbyBMYXRpbi05ICovCisgICAgeGFxbDEsICAgICAgICAg ICAgICAgICAgICAgIC8qIDgsMjEgTWFjaW50b3NoIExhdGluIFRvIExhdGluLTkgKi8KKyAgICB4 ZGdsMSwgICAgICAgICAgICAgICAgICAgICAgLyogOCwyMiBER0kgVG8gTGF0aW4tOSAqLworICAg IHhyOGwxLCAgICAgICAgICAgICAgICAgICAgICAvKiA4LDIzIEhQIFRvIExhdGluLTkgKi8KKyAg ICB4bGNhcywgICAgICAgICAgICAgICAgICAgICAgLyogOCwyNCBMYXRpbi9DeXJpbGxpYyBUbyBM YXRpbi05ICovCisgICAgeGFjYXMsICAgICAgICAgICAgICAgICAgICAgIC8qIDgsMjUgQ1A4NjYg VG8gTGF0aW4tOSAqLworICAgIHhza2FzLCAgICAgICAgICAgICAgICAgICAgICAvKiA4LDI2IFNo b3J0IEtPSSBUbyBMYXRpbi05ICovCisgICAgeGs4YXMsICAgICAgICAgICAgICAgICAgICAgIC8q IDgsMjcgT2xkIEtPSS04IEN5cmlsbGljIFRvIExhdGluLTkgKi8KKyAgICBOVUxMLAkJCS8qIDgs MjggS2FuamkgLi4uICovCisgICAgTlVMTCwJCQkvKiA4LDI5ICovCisgICAgTlVMTCwJCQkvKiA4 LDMwICovCisgICAgTlVMTCwJCQkvKiA4LDMxICovCisgICAgeGg3YXMsCQkJLyogOCwzMiBIZWJy ZXctNyBUbyBMYXRpbi05ICovCisgICAgeGxobDEsCQkJLyogOCwzMyBMYXRpbi9IZWJyZXcgVG8g TGF0aW4tOSAqLworICAgIHg2MmwxLAkJCS8qIDgsMzQgQ1A4NjIgSGVicmV3IFRvIExhdGluLTkg Ki8KKyAgICB4ZWdhcywJCQkvKiA4LDM1IEVMT1QgOTI3IEdyZWVrIFRvIExhdGluLTkgKi8KKyAg ICB4bGdsMSwJCQkvKiA4LDM2IExhdGluL0dyZWVrIFRvIExhdGluLTkgKi8KKyAgICB4bDE2OSwJ CQkvKiA4LDM3IENQODY5IFRvIExhdGluLTkgKi8KKyAgICBOVUxMLAkJCS8qIDgsMzggTGF0aW4t OSBUbyBMYXRpbi05ICovCisgICAgeDU4bDksCQkJLyogOCwzOSBjcDg1OCBUbyBMYXRpbi05ICov CisgICAgeDU1YXMsCQkJLyogOCw0MCBjcDg1NSBUbyBMYXRpbi05ICovCisgICAgeDU1YXMsCQkJ LyogOCw0MSBjcDEyNTEgVG8gTGF0aW4tOSAqLworICAgIHhsZWZ0MTI4LAkJCS8qIDgsNDIgQnVs Z2FyaWFuIFRvIExhdGluLTkgKi8KKyAgICB4MTI1MGw5LAkJCS8qIDgsNDMgQ1AxMjUwIFRvIExh dGluLTkgKi8KKyAgICB4bXpsOSwJCQkvKiA4LDQ0IE1hem92aWEgVG8gTGF0aW4tOSAqLworICAg IE5VTEwsCQkJLyogOCw0NSBVQ1MtMiB0byBMYXRpbi05ICovCisgICAgTlVMTCwJCQkvKiA4LDQ2 IFVURi04IHRvIExhdGluLTkgKi8KKyAgICBOVUxMLAkJCS8qIDgsNDcgS09JOFIgdG8gTGF0aW4t OSAqLworICAgIE5VTEwsCQkJLyogOCw0OCBLT0k4VSB0byBMYXRpbi05ICovCisgICAgeHcxbDks CQkJLyogOCw0OSBDUDEyNTIgdG8gTGF0aW4tOSAqLworICAgIE5VTEwsCQkJLyogOSwwMCBVbmlj b2RlLi4uICovCisgICAgTlVMTCwJCQkvKiA5LDAxICovCisgICAgTlVMTCwJCQkvKiA5LDAyICov CisgICAgTlVMTCwJCQkvKiA5LDAzICovCisgICAgTlVMTCwJCQkvKiA5LDA0ICovCisgICAgTlVM TCwJCQkvKiA5LDA1ICovCisgICAgTlVMTCwJCQkvKiA5LDA2ICovCisgICAgTlVMTCwJCQkvKiA5 LDA3ICovCisgICAgTlVMTCwJCQkvKiA5LDA4ICovCisgICAgTlVMTCwJCQkvKiA5LDA5ICovCisg ICAgTlVMTCwJCQkvKiA5LDEwICovCisgICAgTlVMTCwJCQkvKiA5LDExICovCisgICAgTlVMTCwJ CQkvKiA5LDEyICovCisgICAgTlVMTCwJCQkvKiA5LDEzICovCisgICAgTlVMTCwJCQkvKiA5LDE0 ICovCisgICAgTlVMTCwJCQkvKiA5LDE1ICovCisgICAgTlVMTCwJCQkvKiA5LDE2ICovCisgICAg TlVMTCwJCQkvKiA5LDE3ICovCisgICAgTlVMTCwJCQkvKiA5LDE4ICovCisgICAgTlVMTCwJCQkv KiA5LDE5ICovCisgICAgTlVMTCwJCQkvKiA5LDIwICovCisgICAgTlVMTCwJCQkvKiA5LDIxICov CisgICAgTlVMTCwJCQkvKiA5LDIyICovCisgICAgTlVMTCwJCQkvKiA5LDIzICovCisgICAgTlVM TCwJCQkvKiA5LDI0ICovCisgICAgTlVMTCwJCQkvKiA5LDI1ICovCisgICAgTlVMTCwJCQkvKiA5 LDI2ICovCisgICAgTlVMTCwJCQkvKiA5LDI3ICovCisgICAgTlVMTCwJCQkvKiA5LDI4ICovCisg ICAgTlVMTCwJCQkvKiA5LDI5ICovCisgICAgTlVMTCwJCQkvKiA5LDMwICovCisgICAgTlVMTCwJ CQkvKiA5LDMxICovCisgICAgTlVMTCwJCQkvKiA5LDMyICovCisgICAgTlVMTCwJCQkvKiA5LDMz ICovCisgICAgTlVMTCwJCQkvKiA5LDM0ICovCisgICAgTlVMTCwJCQkvKiA5LDM1ICovCisgICAg TlVMTCwJCQkvKiA5LDM2ICovCisgICAgTlVMTCwJCQkvKiA5LDM3ICovCisgICAgTlVMTCwJCQkv KiA5LDM4ICovCisgICAgTlVMTCwJCQkvKiA5LDM5ICovCisgICAgTlVMTCwJCQkvKiA5LDQwICov CisgICAgTlVMTCwJCQkvKiA5LDQxICovCisgICAgTlVMTCwJCQkvKiA5LDQyICovCisgICAgTlVM TCwJCQkvKiA5LDQzICovCisgICAgTlVMTCwJCQkvKiA5LDQ0ICovCisgICAgTlVMTCwJCQkvKiA5 LDQ1ICovCisgICAgTlVMTCwJCQkvKiA5LDQ2ICovCisgICAgTlVMTCwJCQkvKiA5LDQ3ICovCisg ICAgTlVMTCwJCQkvKiA5LDQ4ICovCisgICAgTlVMTCwJCQkvKiA5LDQ5ICovCisgICAgTlVMTCwJ CQkvKiAxMCwwMCAqLworICAgIE5VTEwsCQkJLyogMTAsMDEgKi8KKyAgICBOVUxMLAkJCS8qIDEw LDAyICovCisgICAgTlVMTCwJCQkvKiAxMCwwMyAqLworICAgIE5VTEwsCQkJLyogMTAsMDQgKi8K KyAgICBOVUxMLAkJCS8qIDEwLDA1ICovCisgICAgTlVMTCwJCQkvKiAxMCwwNiAqLworICAgIE5V TEwsCQkJLyogMTAsMDcgKi8KKyAgICBOVUxMLAkJCS8qIDEwLDA4ICovCisgICAgTlVMTCwJCQkv KiAxMCwwOSAqLworICAgIE5VTEwsCQkJLyogMTAsMTAgKi8KKyAgICBOVUxMLAkJCS8qIDEwLDEx ICovCisgICAgTlVMTCwJCQkvKiAxMCwxMiAqLworICAgIE5VTEwsCQkJLyogMTAsMTMgKi8KKyAg ICBOVUxMLAkJCS8qIDEwLDE0ICovCisgICAgTlVMTCwJCQkvKiAxMCwxNSAqLworICAgIE5VTEws CQkJLyogMTAsMTYgKi8KKyAgICBOVUxMLAkJCS8qIDEwLDE3ICovCisgICAgTlVMTCwJCQkvKiAx MCwxOCAqLworICAgIE5VTEwsCQkJLyogMTAsMTkgKi8KKyAgICBOVUxMLAkJCS8qIDEwLDIwICov CisgICAgTlVMTCwJCQkvKiAxMCwyMSAqLworICAgIE5VTEwsCQkJLyogMTAsMjIgKi8KKyAgICBO VUxMLAkJCS8qIDEwLDIzICovCisgICAgTlVMTCwJCQkvKiAxMCwyNCAqLworICAgIE5VTEwsCQkJ LyogMTAsMjUgKi8KKyAgICBOVUxMLAkJCS8qIDEwLDI2ICovCisgICAgTlVMTCwJCQkvKiAxMCwy NyAqLworICAgIE5VTEwsCQkJLyogMTAsMjggKi8KKyAgICBOVUxMLAkJCS8qIDEwLDI5ICovCisg ICAgTlVMTCwJCQkvKiAxMCwzMCAqLworICAgIE5VTEwsCQkJLyogMTAsMzEgKi8KKyAgICBOVUxM LAkJCS8qIDEwLDMyICovCisgICAgTlVMTCwJCQkvKiAxMCwzMyAqLworICAgIE5VTEwsCQkJLyog MTAsMzQgKi8KKyAgICBOVUxMLAkJCS8qIDEwLDM1ICovCisgICAgTlVMTCwJCQkvKiAxMCwzNiAq LworICAgIE5VTEwsCQkJLyogMTAsMzcgKi8KKyAgICBOVUxMLAkJCS8qIDEwLDM4ICovCisgICAg TlVMTCwJCQkvKiAxMCwzOSAqLworICAgIE5VTEwsCQkJLyogMTAsNDAgKi8KKyAgICBOVUxMLAkJ CS8qIDEwLDQxICovCisgICAgTlVMTCwJCQkvKiAxMCw0MiAqLworICAgIE5VTEwsCQkJLyogMTAs NDMgKi8KKyAgICBOVUxMLAkJCS8qIDEwLDQ0ICovCisgICAgTlVMTCwJCQkvKiAxMCw0NSAqLwor ICAgIE5VTEwsCQkJLyogMTAsNDYgKi8KKyAgICBOVUxMLAkJCS8qIDEwLDQ3ICovCisgICAgTlVM TCwJCQkvKiAxMCw0OCAqLworICAgIE5VTEwJCQkvKiAxMCw0OSAqLworfTsKK2ludCBueGxzID0g KHNpemVvZih4bHMpIC8gc2l6ZW9mKENIQVIgKikpOworCisjaWZuZGVmIE5PTE9DQUwKKy8qCisg IFRoZSBmb2xsb3dpbmcgcm91dGluZXMgYXJlIHVzZWZ1bCBvbmx5IGZvciB0ZXJtaW5hbCBjaGFy YWN0ZXIgc2V0cywgYW5kIHNvCisgIGlmZGVmJ2Qgb3V0IGZvciBOT0xPQ0FMIGNvbXBpbGF0aW9u cy4KKyovCisKKy8qCisgIEMgUyBfIEkgUyBfIE4gUiBDCisKKyAgUmV0dXJucyBub256ZXJvIGlm IGFyZ3VtZW50IGluZGljYXRlcyBhIDctYml0IG5hdGlvbmFsIGNoYXJhY3RlciBzZXQsCisgIHpl cm8gb3RoZXJ3aXNlLgorKi8KK2ludAorY3NfaXNfbnJjKHgpIGludCB4OyB7CisjaWZkZWYgVU5J Q09ERQorICAgIGlmICh4ID09IFRYX0oyMDFSIHx8IHggPT0gVFhfREVDU1BFQyB8fCB4ID09IFRY X0RFQ1RFQ0gKKyAgICAgICAgfHwgdHhyaW5mb1t4XSA9PSBOVUxMKQorICAgICAgcmV0dXJuKDAp OworICAgIGVsc2UKKyAgICAgIHJldHVybih0eHJpbmZvW3hdLT5mbGFncyAmIFgyVV9TVEQgJiYg dHhyaW5mb1t4XS0+c2l6ZSA9PSA5NCk7CisjZWxzZSAvKiBVTklDT0RFICovCisgICAgaWYgKChj c19zaXplKHgpID09IDk0KSkKKyAgICAgIHJldHVybigxKTsKKyAgICBlbHNlCisgICAgICByZXR1 cm4oMCk7CisjZW5kaWYgLyogVU5JQ09ERSAqLworfQorCisvKgorICBDIFMgXyBJIFMgXyBTIFQg RAorCisgIFJldHVybnMgbm9uemVybyBpZiBhcmd1bWVudCBpbmRpY2F0ZXMgYW4gSVNPIDQ4NzMt c3RhbmRhcmQtZm9ybWF0CisgIGNoYXJhY3RlciBzZXQsIGkuZS4gb25lIGluIHdoaWNoIHRoZSBj b250cm9sIHJlZ2lvbiBpcyBOT1QgdXNlZCBmb3IKKyAgZ3JhcGhpY3M7IHplcm8gb3RoZXJ3aXNl LgorKi8KK2ludAorY3NfaXNfc3RkKHgpIGludCB4OyB7CisjaWZkZWYgVU5JQ09ERQorICAgIGlm ICghdHhyaW5mb1t4XSkJCQkvKiBFdmVuIG1vcmUgc2FmZXR5ICovCisgICAgICByZXR1cm4oMCk7 CisgICAgZWxzZSBpZiAodHhyaW5mb1t4XS0+c2l6ZSA9PSAxMjgpCS8qIEp1c3QgZm9yIHNhZmV0 eSAqLworICAgICAgcmV0dXJuKDApOworICAgIGVsc2UKKyAgICAgIHJldHVybih0eHJpbmZvW3hd LT5mbGFncyAmIFgyVV9TVEQpOyAvKiBPbmx5IHRoaXMgc2hvdWxkIGJlIG5lZWRlZCAqLworI2Vs c2UKKyAgICBzd2l0Y2ggKHgpIHsKKyAgICAgIGNhc2UgRkNfQ1A0Mzc6CQkJLyogQ29kZSBwYWdl cyB1c2UgQzEgZ3JhcGhpY3MgKi8KKyAgICAgIGNhc2UgRkNfQ1A4NTA6CisgICAgICBjYXNlIEZD X0NQODUyOgorICAgICAgY2FzZSBGQ19DUDg2MjoKKyAgICAgIGNhc2UgRkNfQ1A4NjY6CisgICAg ICBjYXNlIEZDX0NQODY5OgorICAgICAgY2FzZSBGQ19DUDg1ODoKKyAgICAgIGNhc2UgRkNfQVBQ UUQ6CQkJLyogU28gZG8gQXBwbGUgYW5kIE5lWFRTVEVQICovCisgICAgICBjYXNlIEZDX05FWFQ6 CisJcmV0dXJuKDApOworICAgICAgZGVmYXVsdDoJCQkJLyogT3RoZXJzIGJlaGF2ZSAqLworCXJl dHVybigxKTsKKyAgICB9CisjZW5kaWYgLyogQ0tPVUlOSSAqLworfQorCitpbnQKK2NzX3NpemUo eCkgaW50IHg7IHsKKyNpZmRlZiBVTklDT0RFCisgICAgaWYgKCF0eHJpbmZvW3hdKQorICAgICAg cmV0dXJuKDEyOCk7CisgICAgcmV0dXJuKHR4cmluZm9beF0tPnNpemUpOworI2Vsc2UKKyAgICBz d2l0Y2goeCkgeworICAgICAgY2FzZSBGQ19VU0FTQ0lJOgorICAgICAgY2FzZSBGQ19VS0FTQ0lJ OgorICAgICAgY2FzZSBGQ19EVUFTQ0lJOgorICAgICAgY2FzZSBGQ19GSUFTQ0lJOgorICAgICAg Y2FzZSBGQ19GUkFTQ0lJOgorICAgICAgY2FzZSBGQ19GQ0FTQ0lJOgorICAgICAgY2FzZSBGQ19H RUFTQ0lJOgorICAgICAgY2FzZSBGQ19IVUFTQ0lJOgorICAgICAgY2FzZSBGQ19JVEFTQ0lJOgor ICAgICAgY2FzZSBGQ19OT0FTQ0lJOgorICAgICAgY2FzZSBGQ19QT0FTQ0lJOgorICAgICAgY2Fz ZSBGQ19TUEFTQ0lJOgorICAgICAgY2FzZSBGQ19TV0FTQ0lJOgorICAgICAgY2FzZSBGQ19DSEFT Q0lJOgorICAgICAgY2FzZSBGQ19LT0k3OgorICAgICAgY2FzZSBGQ19IRTc6CisgICAgICBjYXNl IEZDX0VMT1Q6CisJcmV0dXJuKDk0KTsKKworICAgICAgY2FzZSBGQ18xTEFUSU46CisgICAgICBj YXNlIEZDXzJMQVRJTjoKKyAgICAgIGNhc2UgRkNfREVDTUNTOgorICAgICAgY2FzZSBGQ19ER01D UzoKKyAgICAgIGNhc2UgRkNfSFBSODoKKyAgICAgIGNhc2UgRkNfQ1lSSUxMOgorICAgICAgY2Fz ZSBGQ19LT0k4OgorICAgICAgY2FzZSBGQ19IRUJSRVc6CisgICAgICBjYXNlIEZDX0dSRUVLOgor ICAgICAgY2FzZSBGQ185TEFUSU46CisJcmV0dXJuKDk2KTsKKworICAgICAgY2FzZSBGQ19ORVhU OgorICAgICAgY2FzZSBGQ19DUDQzNzoKKyAgICAgIGNhc2UgRkNfQ1A4NTA6CisgICAgICBjYXNl IEZDX0NQODUyOgorICAgICAgY2FzZSBGQ19DUDg1NToKKyAgICAgIGNhc2UgRkNfQ1A4NjI6Cisg ICAgICBjYXNlIEZDX0NQODY2OgorICAgICAgY2FzZSBGQ19DUDEyNTE6CisgICAgICBjYXNlIEZD X0FQUFFEOgorCXJldHVybigxMjgpOworI2lmZGVmIEtBTkpJCisgICAgICBjYXNlIEZDX0pJUzc6 CisJcmV0dXJuKC05NCk7CisgICAgICBjYXNlIEZDX1NISklTOgorCXJldHVybigtMTI4KTsKKyAg ICAgIGNhc2UgRkNfSkVVQzoKKyAgICAgIGNhc2UgRkNfSkRFQzoKKwlyZXR1cm4oLTk2KTsKKyNl bmRpZiAvKiBLQU5KSSAqLworICAgICAgY2FzZSBGQ19DUDg1ODoKKyAgICAgIGRlZmF1bHQ6CisJ cmV0dXJuKC0xKTsKKyAgICB9CisjZW5kaWYgLyogVU5JQ09ERSAqLworfQorI2VuZGlmIC8qIE5P TE9DQUwgKi8KKworLyoKKyAgUyBFIFQgWCBMIEEgVCBZIFAgRSAgLS0gIFNldCBUcmFuc2xhdGlv biBUeXBlCisKKyAgU2V0cyBnbG9iYWwgeGxhdHlwZSB0byBpbmRpY2F0ZSB3aGljaCBraW5kIG9m IHRyYW5zbGF0aW9uOgorCisgICAgWExBX05PTkUgICAgICBObyB0cmFuc2xhdGlvbgorICAgIFhM QV9CWVRFICAgICAgQnl0ZS1mb3ItQnl0ZSB0cmFuc2xhdGlvbgorICAgIFhMQV9KQVBBTiAgICAg SmFwYW5lc2UgS2FuamkgdHJhbnNsYXRpb24KKyAgICBYTEFfVU5JQ09ERSAgIFVuaWNvZGUgdHJh bnNsYXRpb25zCisKKyAgQW5kIHNldHMgdXAgdGhlIGFwcHJvcHJpYXRlIHRyYW5zbGF0aW9uIGZ1 bmN0aW9uIHBvaW50ZXJzIGFzIGZvbGxvd3M6CisKKyAgRm9yIG5vIHRyYW5zbGF0aW9uOgorICAg IEFsbCBmdW5jdGlvbiBwb2ludGVycyBhcmUgTlVMTC4KKworICBGb3IgQnl0ZS1mb3ItQnl0ZSB0 cmFuc2F0aW9uOgorICAgIHJ4ICA9IFRDUyB0byBGQ1MgKHRoZXNlIGZ1bmN0aW9ucyBhcmUgaW4g dGhpcyBtb2R1bGUuLi4pCisgICAgc3ggID0gRkNTIHRvIFRDUworCisgIEZvciBVbmljb2RlIHRy YW5zbGF0aW9uczoKKyAgICB4ZnUgPSBGQ1MgdG8gVUNTICh0aGVzZSBmdW5jdGlvbnMgYXJlIGlu IGNrY3VuaS5jLi4uKQorICAgIHh0dSA9IFRDUyB0byBVQ1MKKyAgICB4dWYgPSBVQ1MgdG8gRkNT CisgICAgeHV0ID0gVUNTIHRvIFRDUworKi8KK1ZPSUQKK3NldHhsYXR5cGUodGNzLCBmY3MpIGlu dCB0Y3MsIGZjczsgeworI2lmZGVmIFVOSUNPREUKKyAgICB4ZnUgPSBOVUxMOwkJCQkvKiBVbmlj b2RlIDwtPiBUQ1MvRkNTIGZ1bmN0aW9ucyAqLworICAgIHh0dSA9IE5VTEw7CisgICAgeHVmID0g TlVMTDsKKyAgICB4dXQgPSBOVUxMOworI2VuZGlmIC8qIFVOSUNPREUgKi8KKyAgICByeCA9IHN4 ID0gTlVMTDsKKyAgICBkZWJ1ZyhGMTAxLCJzZXR4bGF0eXBlIGZjcyIsIiIsZmNzKTsKKyAgICBk ZWJ1ZyhGMTAxLCJzZXR4bGF0eXBlIHRjcyIsIiIsdGNzKTsKKworICAgIGlmICh0Y3MgPCAwIHx8 IHRjcyA+IE1BWFRDU0VUUykgeworCWRlYnVnKEYxMDEsInNldHhsYXR5cGUgYmFkIHRjcyIsIiIs dGNzKTsKKwlyZXR1cm47CisgICAgfQorICAgIGlmIChmY3MgPCAwIHx8IGZjcyA+IE1BWEZDU0VU UykgeworCWRlYnVnKEYxMDEsInNldHhsYXR5cGUgYmFkIGZjcyIsIiIsZmNzKTsKKwlyZXR1cm47 CisgICAgfQorICAgIGlmICh0Y3MgPT0gVENfVFJBTlNQIHx8IHhmcnhsYSA9PSAwKSB7IC8qIFRy YW5zZmVyIGNoYXJzZXQgVFJBTlNQQVJFTlQgKi8KKwlkZWJ1ZyhGMTAxLCJzZXR4bGF0eXBlIHRy YW5zcGFyZW50IGJlY2F1c2UgVENTPT1UcmFuc3BhcmVudCIsIiIsdGNzKTsKKwl4bGF0eXBlID0g WExBX05PTkU7CQkvKiBUcmFuc2xhdGlvbiB0eXBlIGlzIE5vbmUgKi8KKyNpZmRlZiBVTklDT0RF CisgICAgLyogSWYgYW55IG9mIG91ciBjaGFyc2V0cyBpcyBVbmljb2RlIHdlIHVzZSBVbmljb2Rl IGZ1bmN0aW9ucyAqLworICAgIC8qIGV2ZW4gaWYgVENTIGFuZCBGQ1MgYXJlIHRoZSBzYW1lIGJl Y2F1c2Ugb2YgQk9NIGFuZCBieXRlIHN3YXBwaW5nICovCisgICAgfSBlbHNlIGlmICh0Y3MgPT0g VENfVUNTMiB8fCB0Y3MgPT0gVENfVVRGOCB8fAorCSAgICAgICBmY3MgPT0gRkNfVUNTMiB8fCBm Y3MgPT0gRkNfVVRGOCkgeworCWRlYnVnKEYxMDEsInNldHhsYXR5cGUgVW5pY29kZSB0Y3MiLCIi LHRjcyk7CisJZGVidWcoRjEwMSwic2V0eGxhdHlwZSBVbmljb2RlIGZjcyIsIiIsZmNzKTsKKwkv KiBVbmljb2RlIDwtPiBUQ1MvRkNTIGZ1bmN0aW9ucyAqLworCXhmdSA9IHhsX2ZjdVtmY3NdOwkJ LyogRkNTIC0+IFVDUyAqLworCXh0dSA9IHhsX3RjdVt0Y3NdOwkJLyogVENTIC0+IFVDUyAqLwor CXh1ZiA9IHhsX3VmY1tmY3NdOwkJLyogVUNTIC0+IEZDUyAqLworCXh1dCA9IHhsX3V0Y1t0Y3Nd OwkJLyogVUNTIC0+IFRDUyAqLworICAgICAgICB4bGF0eXBlID0gWExBX1VOSUNPREU7CQkvKiBU cmFuc2xhdGlvbiB0eXBlIGlzIFVuaWNvZGUgKi8KKyNpZmRlZiBDT01NRU5UCisJLyogVGhlc2Ug bWFrZSB0cm91YmxlIGluIDY0LWJpdCBsYW5kICovCisJZGVidWcoRjAwMSwic2V0eGxhdHlwZSBV bmljb2RlIHhmdSIsIiIsKHVuc2lnbmVkKXhmdSk7CisJZGVidWcoRjAwMSwic2V0eGxhdHlwZSBV bmljb2RlIHh1ZiIsIiIsKHVuc2lnbmVkKXh1Zik7CisjZW5kaWYgLyogQ09NTUVOVCAqLworI2Vu ZGlmIC8qIFVOSUNPREUgKi8KKyAgICB9IGVsc2UgaWYgKGNzZXF0YWJbdGNzXSA9PSBmY3MpIHsJ LyogT3IgaWYgVENTID09IEZDUyAqLworCWRlYnVnKEYxMDEsInNldHhsYXR5cGUgdHJhbnNwYXJl bnQgYmVjYXVzZSBUQ1M9PUZDUyIsIiIsdGNzKTsKKwl4bGF0eXBlID0gWExBX05PTkU7CQkvKiB0 cmFuc2xhdGlvbiB0eXBlIGlzIGFsc28gTm9uZSAqLworI2lmZGVmIEtBTkpJCisgICAgLyogT3Ro ZXJ3aXNlIGlmIGFueSBvZiB0aGVtIGlzIEphcGFuZXNlLCB3ZSB1c2UgS2FuamkgZnVuY3Rpb25z ICovCisgICAgfSBlbHNlIGlmICh0Y3MgPT0gVENfSkVVQyB8fCBmY3NpbmZvW2Zjc10uYWxwaGFi ZXQgPT0gQUxfSkFQQU4pIHsKKwlkZWJ1ZyhGMTAxLCJzZXR4bGF0eXBlIEphcGFuZXNlIHRjcyIs IiIsdGNzKTsKKwlkZWJ1ZyhGMTAxLCJzZXR4bGF0eXBlIEphcGFuZXNlIGZjcyIsIiIsZmNzKTsK KyAgICAgICAgeGxhdHlwZSA9IFhMQV9KQVBBTjsJCS8qIFRyYW5zbGF0aW9uIHR5cGUgaXMgSmFw YW5lc2UgKi8KKyNlbmRpZiAvKiBLQU5KSSAqLworICAgIC8qIE90aGVyd2lzZSB3ZSB1c2UgYnl0 ZSBmdW5jdGlvbnMgKi8KKyAgICB9IGVsc2UgewkJCQkvKiBPdGhlcndpc2UuLi4gKi8KKwlyeCA9 IHhsclt0Y3NdW2Zjc107CQkvKiBJbnB1dCB0cmFuc2xhdGlvbiBmdW5jdGlvbiAqLworCXN4ID0g eGxzW3Rjc11bZmNzXTsJCS8qIE91dHB1dCB0cmFuc2xhdGlvbiBmdW5jdGlvbiAqLworCWRlYnVn KEYxMDEsInNldHhsYXR5cGUgQnl0ZSB0Y3MiLCIiLHRjcyk7CisJZGVidWcoRjEwMSwic2V0eGxh dHlwZSBCeXRlIGZjcyIsIiIsZmNzKTsKKyAgICAgICAgeGxhdHlwZSA9IFhMQV9CWVRFOwkJLyog VHJhbnNsYXRpb24gdHlwZSBpcyBCeXRlICovCisgICAgfQorICAgIGRlYnVnKEYxMDEsInNldHhs YXR5cGUgeGxhdHlwZSIsIiIseGxhdHlwZSk7Cit9CisKKy8qIFNldCB1cCB0cmFuc2xhdGlvbiBi ZXR3ZWVuIHR3byBmaWxlIGNoYXJhY3RlciBzZXRzIHdpdGggVUNTIGludGVybWVkaWF0ZSAqLwor CisjaWZkZWYgVU5JQ09ERQorVk9JRAoraW5pdHhsYXRlKGNzaW4sIGNzb3V0KSBpbnQgY3Npbiwg Y3NvdXQ7IHsKKyAgICB4ZnUgPSBOVUxMOworICAgIHh0dSA9IE5VTEw7CisgICAgeHVmID0gTlVM TDsKKyAgICB4dXQgPSBOVUxMOworCisgICAgZGVidWcoRjEwMSwiaW5pdHhsYXRlIGNzaW4iLCIi LGNzaW4pOworICAgIGRlYnVnKEYxMDEsImluaXR4bGF0ZSBjc291dCIsIiIsY3NvdXQpOworCisg ICAgaWYgKGNzaW4gPCAwIHx8IGNzaW4gPiBNQVhGQ1NFVFMpIHsKKwlkZWJ1ZyhGMTAxLCJpbml0 eGxhdGUgYmFkIGNzaW4iLCIiLGNzaW4pOworCXJldHVybjsKKyAgICB9CisgICAgaWYgKGNzb3V0 IDwgMCB8fCBjc291dCA+IE1BWEZDU0VUUykgeworCWRlYnVnKEYxMDEsImluaXR4bGF0ZSBiYWQg Y3NvdXQiLCIiLGNzb3V0KTsKKwlyZXR1cm47CisgICAgfQorICAgIGlmIChjc2luID09IGNzb3V0 ICYmIGNzaW4gIT0gRkNfVUNTMikgeworCXhsYXR5cGUgPSBYTEFfTk9ORTsJCS8qIFRyYW5zbGF0 aW9uIHR5cGUgaXMgTm9uZSAqLworCXJldHVybjsKKyAgICB9CisgICAgeGxhdHlwZSA9IFhMQV9V TklDT0RFOwkJLyogVHJhbnNsYXRpb24gdHlwZSBpcyBVbmljb2RlICovCisgICAgeGZ1ID0geGxf ZmN1W2NzaW5dOwkJCS8qIEZDUyAtPiBVQ1MgKi8KKyAgICB4dWYgPSB4bF91ZmNbY3NvdXRdOwkJ LyogVUNTIC0+IEZDUyAqLworICAgIHhwbmJ5dGUoLTEsMCwwLE5VTEwpOwkJLyogUmVzZXQgVUNT LTIgKi8KKyNpZmRlZiBDT01NRU5UCisgICAgZGVidWcoRjAwMSwiaW5pdHhsYXRlIFVuaWNvZGUg eGZ1IiwiIiwodW5zaWduZWQpeGZ1KTsKKyAgICBkZWJ1ZyhGMDAxLCJpbml0eGxhdGUgVW5pY29k ZSB4dWYiLCIiLCh1bnNpZ25lZCl4dWYpOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICBkZWJ1 ZyhGMTAxLCJpbml0eGxhdGUgeGxhdHlwZSIsIiIseGxhdHlwZSk7Cit9CisjZW5kaWYgLyogVU5J Q09ERSAqLworCitpbnQgY3NldHNpbml0ZWQgPSAwOworCitWT0lECitpbml0Y3NldHMoKSB7CQkJ CS8qIFJvdXRpbmUgdG8gcmVzZXQgb3IgaW5pdGlhbGl6ZSAqLworICAgIGludCBpOwkJCQkvKiBj aGFyYWN0ZXItc2V0IGFzc29jaWF0aW9ucy4gKi8KKworI2lmZGVmIFVOSUNPREUKKyAgICBpZiAo dWNzb3JkZXIgPCAwKQkJCS8qIEZvciBjcmVhdGluZyBVQ1MtMiBmaWxlcy4gKi8KKyAgICAgIHVj c29yZGVyID0gYnl0ZW9yZGVyOworICAgIGlmICh1Y3NvcmRlciA8IDApCisgICAgICB1Y3NvcmRl ciA9IDA7CisgICAgaWYgKGZpbGVvcmRlciA8IDApCQkJLyogRm9yIHJlYWRpbmcgVUNTLTIgZmls ZXMuICovCisgICAgICBmaWxlb3JkZXIgPSB1Y3NvcmRlcjsKKyNlbmRpZiAvKiBVTklDT0RFICov CisKKyAgICBkZWJ1ZyhGMTAxLCJpbml0Y3NldHMgbnhscyIsIiIsbnhscyk7CisgICAgZGVidWco RjEwMSwiaW5pdGNzZXRzIG54bHIiLCIiLG54bHIpOworCisgICAgZGVidWcoRjEwMSwiaW5pdGNz ZXRzIFRFUk0gTE9DQUwgQ1NFVCIsIiIsdGNzbCk7CisgICAgZGVidWcoRjEwMSwiaW5pdGNzZXRz IFRFUk0gUkVNT1RFIENTRVQiLCIiLHRjc3IpOworCisgICAgZm9yIChpID0gMDsgaSA8PSBNQVhG Q1NFVFM7IGkrKykJLyogRmlyc3QgY2xlYXIgdGhlbSBhbGwuLi4gKi8KKyAgICAgIGFmY3NldFtp XSA9IC0xOworICAgIGZvciAoaSA9IDA7IGkgPD0gTUFYVENTRVRTOyBpKyspCisgICAgICBheGNz ZXRbaV0gPSAtMTsKKworICAgIC8qIE5vdyBzZXQgc3BlY2lmaWMgZGVmYXVsdHMgZm9yIGluY29t aW5nIGZpbGVzICovCisKKyAgICB4bGF0eXBlID0gWExBX05PTkU7CisKKyAgICBheGNzZXRbVENf VFJBTlNQXSAgPSBGQ19UUkFOU1A7CisgICAgYXhjc2V0W1RDX1VTQVNDSUldID0gRkNfVVNBU0NJ STsKKworI2lmZGVmIE9TMgorICAgIHN3aXRjaCAoZmNoYXJzZXQpIHsKKyAgICAgIGNhc2UgRkNf Q1A4NTA6CisgICAgICBjYXNlIEZDX0NQODU4OgorICAgICAgY2FzZSBGQ19DUDQzNzoKKyAgICAg IGNhc2UgRkNfMUxBVElOOgorCWF4Y3NldFtUQ18xTEFUSU5dICA9IGZjaGFyc2V0OworCWJyZWFr OworICAgICAgZGVmYXVsdDoKKwlheGNzZXRbVENfMUxBVElOXSAgPSBGQ19DUDg1MDsKKyAgICB9 CisjZWxzZQorI2lmZGVmIEhQVVgKKyAgICBheGNzZXRbVENfMUxBVElOXSAgPSBGQ19IUFI4Owor I2Vsc2UKKyNpZmRlZiBWTVMKKyAgICBheGNzZXRbVENfMUxBVElOXSAgPSBGQ19ERUNNQ1M7Cisj ZWxzZQorI2lmZGVmIE5FWFQKKyAgICBheGNzZXRbVENfMUxBVElOXSAgPSBGQ19ORVhUOworI2Vs c2UKKyNpZmRlZiBkYXRhZ2VuZXJhbAorICAgIGF4Y3NldFtUQ18xTEFUSU5dICA9IEZDX0RHTUNT OworI2Vsc2UKKyAgICAvKiBTaG91bGQgd2UgdXNlIGNvZGUgcGFnZXMgb24gc29tZSBQQyBiYXNl ZCBVTklYZXM/ICovCisgICAgYXhjc2V0W1RDXzFMQVRJTl0gID0gRkNfMUxBVElOOworI2VuZGlm IC8qIGRhdGFnZW5lcmFsICovCisjZW5kaWYgLyogTkVYVCAqLworI2VuZGlmIC8qIFZNUyAqLwor I2VuZGlmIC8qIEhQVVggKi8KKyNlbmRpZiAvKiBPUzIgKi8KKworI2lmZGVmIE9TMgorICAgIGF4 Y3NldFtUQ18yTEFUSU5dICA9IEZDX0NQODUyOworICAgIGF4Y3NldFtUQ19DWVJJTExdICA9IEZD X0NQODY2OworICAgIGF4Y3NldFtUQ19KRVVDXSAgICA9IEZDX1NISklTOworICAgIGF4Y3NldFtU Q19IRUJSRVddICA9IEZDX0NQODYyOworICAgIGF4Y3NldFtUQ19HUkVFS10gICA9IEZDX0NQODY5 OworICAgIGF4Y3NldFtUQ185TEFUSU5dICA9IEZDX0NQODU4OworICAgIGF4Y3NldFtUQ19VQ1My XSAgICA9IEZDX1VDUzI7CisgICAgYXhjc2V0W1RDX1VURjhdICAgID0gRkNfVUNTMjsKKyNlbHNl CisgICAgYXhjc2V0W1RDXzJMQVRJTl0gID0gRkNfMkxBVElOOworICAgIGF4Y3NldFtUQ19DWVJJ TExdICA9IEZDX0NZUklMTDsKKyAgICBheGNzZXRbVENfSkVVQ10gICAgPSBGQ19KRVVDOworICAg IGF4Y3NldFtUQ19IRUJSRVddICA9IEZDX0hFQlJFVzsKKyAgICBheGNzZXRbVENfR1JFRUtdICAg PSBGQ19HUkVFSzsKKyAgICBheGNzZXRbVENfOUxBVElOXSAgPSBGQ185TEFUSU47CisgICAgYXhj c2V0W1RDX1VDUzJdICAgID0gRkNfVVRGODsKKyAgICBheGNzZXRbVENfVVRGOF0gICAgPSBGQ19V VEY4OworI2VuZGlmIC8qIE9TMiAqLworCisgICAgLyogQW5kIGZvciBvdXRib3VuZCBmaWxlcyAq LworCisgICAgYWZjc2V0W0ZDX1VTQVNDSUldID0gVENfVVNBU0NJSTsKKyAgICBhZmNzZXRbRkNf VUtBU0NJSV0gPSBUQ18xTEFUSU47CisgICAgYWZjc2V0W0ZDX0RVQVNDSUldID0gVENfMUxBVElO OworICAgIGFmY3NldFtGQ19GSUFTQ0lJXSA9IFRDXzFMQVRJTjsKKyAgICBhZmNzZXRbRkNfRlJB U0NJSV0gPSBUQ18xTEFUSU47CisgICAgYWZjc2V0W0ZDX0ZDQVNDSUldID0gVENfMUxBVElOOwor ICAgIGFmY3NldFtGQ19HRUFTQ0lJXSA9IFRDXzFMQVRJTjsKKyAgICBhZmNzZXRbRkNfSFVBU0NJ SV0gPSBUQ18yTEFUSU47CisgICAgYWZjc2V0W0ZDX0lUQVNDSUldID0gVENfMUxBVElOOworICAg IGFmY3NldFtGQ19OT0FTQ0lJXSA9IFRDXzFMQVRJTjsKKyAgICBhZmNzZXRbRkNfUE9BU0NJSV0g PSBUQ18xTEFUSU47CisgICAgYWZjc2V0W0ZDX1NQQVNDSUldID0gVENfMUxBVElOOworICAgIGFm Y3NldFtGQ19TV0FTQ0lJXSA9IFRDXzFMQVRJTjsKKyAgICBhZmNzZXRbRkNfQ0hBU0NJSV0gPSBU Q18xTEFUSU47CisgICAgYWZjc2V0W0ZDXzFMQVRJTl0gID0gVENfMUxBVElOOworICAgIGFmY3Nl dFtGQ18yTEFUSU5dICA9IFRDXzJMQVRJTjsKKyAgICBhZmNzZXRbRkNfREVDTUNTXSAgPSBUQ18x TEFUSU47CisgICAgYWZjc2V0W0ZDX05FWFRdICAgID0gVENfMUxBVElOOworICAgIGFmY3NldFtG Q19DUDQzN10gICA9IFRDXzFMQVRJTjsKKyAgICBhZmNzZXRbRkNfQ1A4NTBdICAgPSBUQ18xTEFU SU47CisgICAgYWZjc2V0W0ZDX0NQODUyXSAgID0gVENfMkxBVElOOworICAgIGFmY3NldFtGQ19B UFBRRF0gICA9IFRDXzFMQVRJTjsKKyAgICBhZmNzZXRbRkNfREdNQ1NdICAgPSBUQ18xTEFUSU47 CisgICAgYWZjc2V0W0ZDX0hQUjhdICAgID0gVENfMUxBVElOOworICAgIGFmY3NldFtGQ19DWVJJ TExdICA9IFRDX0NZUklMTDsKKyAgICBhZmNzZXRbRkNfQ1A4NjZdICAgPSBUQ19DWVJJTEw7Cisg ICAgYWZjc2V0W0ZDX0tPSTddICAgID0gVENfQ1lSSUxMOworICAgIGFmY3NldFtGQ19LT0k4XSAg ICA9IFRDX0NZUklMTDsKKyAgICBhZmNzZXRbRkNfSklTN10gICAgPSBUQ19KRVVDOworICAgIGFm Y3NldFtGQ19TSEpJU10gICA9IFRDX0pFVUM7CisgICAgYWZjc2V0W0ZDX0pFVUNdICAgID0gVENf SkVVQzsKKyAgICBhZmNzZXRbRkNfSkRFQ10gICAgPSBUQ19KRVVDOworICAgIGFmY3NldFtGQ19I RTddICAgICA9IFRDX0hFQlJFVzsKKyAgICBhZmNzZXRbRkNfSEVCUkVXXSAgPSBUQ19IRUJSRVc7 CisgICAgYWZjc2V0W0ZDX0NQODYyXSAgID0gVENfSEVCUkVXOworICAgIGFmY3NldFtGQ19FTE9U XSAgICA9IFRDX0dSRUVLOworICAgIGFmY3NldFtGQ19HUkVFS10gICA9IFRDX0dSRUVLOworICAg IGFmY3NldFtGQ19DUDg2OV0gICA9IFRDX0dSRUVLOworICAgIGFmY3NldFtGQ185TEFUSU5dICA9 IFRDXzlMQVRJTjsKKyAgICBhZmNzZXRbRkNfQ1A5MjNdICAgPSBUQ185TEFUSU47CisgICAgYWZj c2V0W0ZDX0NQODU4XSAgID0gVENfOUxBVElOOworICAgIGFmY3NldFtGQ19DUDg1NV0gICA9IFRD X0NZUklMTDsKKyAgICBhZmNzZXRbRkNfQ1AxMjUxXSAgPSBUQ19DWVJJTEw7CisgICAgYWZjc2V0 W0ZDX0JVTEdBUl0gID0gVENfQ1lSSUxMOworICAgIGFmY3NldFtGQ19DUDEyNTBdICA9IFRDXzJM QVRJTjsKKyAgICBhZmNzZXRbRkNfTUFaT1ZJQV0gPSBUQ18yTEFUSU47CisgICAgYWZjc2V0W0ZD X1VDUzJdICAgID0gVENfVVRGODsKKyAgICBhZmNzZXRbRkNfVVRGOF0gICAgPSBUQ19VVEY4Owor CisgICAgYWZjc2V0W0ZDX0tPSThSXSAgID0gVENfQ1lSSUxMOworICAgIGFmY3NldFtGQ19LT0k4 VV0gICA9IFRDX0NZUklMTDsKKyAgICBhZmNzZXRbRkNfQ1AxMjUyXSAgPSBUQ18xTEFUSU47CisK KyAgICBjc2V0c2luaXRlZCsrOworICAgIHJldHVybjsKK30KKyNlbmRpZiAvKiBOT0NTRVRTICov CgpkaWZmIC0tZ2l0IGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3V4 bGEuaCBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1eGxhLmgKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNjZDFhNQotLS0gL2Rldi9udWxsCisr KyBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1eGxhLmgKQEAgLTAs MCArMSwxMTggQEAKKy8qCisgIEZpbGUgQ0tVWExBLkgKKworICBDLUtlcm1pdCBsYW5ndWFnZSBh bmQgY2hhcmFjdGVyLXNldCBzdXBwb3J0IGZvciBVTklYLCBWTVMsIE9TLzIsCisgIEFPUy9WUywg YW5kIG90aGVyIHN5c3RlbXMuCisKKyAgVGhpcyBmaWxlIHNob3VsZCBiZSB1c2VkIGFzIGEgdGVt cGxhdGUgZm9yIHRoZSBsYW5ndWFnZSBzdXBwb3J0IGZpbGVzCisgIGZvciBvdGhlciBDLUtlcm1p dCBpbXBsZW1lbnRhdGlvbnMgLS0gTWFjaW50b3NoLCBldGMuCisqLworLyoKKyAgQXV0aG9yOiBG cmFuayBkYSBDcnV6IDxmZGNAY29sdW1iaWEuZWR1PiwKKyAgQ29sdW1iaWEgVW5pdmVyc2l0eSBB Y2FkZW1pYyBJbmZvcm1hdGlvbiBTeXN0ZW1zLCBOZXcgWW9yayBDaXR5LgorCisgIENvcHlyaWdo dCAoQykgMTk4NSwgMjAwOSwKKyAgICBUcnVzdGVlcyBvZiBDb2x1bWJpYSBVbml2ZXJzaXR5IGlu IHRoZSBDaXR5IG9mIE5ldyBZb3JrLgorICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBTZWUgdGhl IEMtS2VybWl0IENPUFlJTkcuVFhUIGZpbGUgb3IgdGhlCisgICAgY29weXJpZ2h0IHRleHQgaW4g dGhlIGNrY21haS5jIG1vZHVsZSBmb3IgZGlzY2xhaW1lciBhbmQgcGVybWlzc2lvbnMuCisKKyov CisKKyNpZm5kZWYgQ0tVWExBX0gKKyNkZWZpbmUgQ0tVWExBX0gKKworLyogQ29kZXMgZm9yIGZp bGUgY2hhcmFjdGVyIHNldHMgKi8KKworLyogSVNPIDY0NiBhbmQgb3RoZXIgSVNPLTY0Ni1saWtl IDctYml0IHNldHMgKi8KKworI2RlZmluZSBGQ19VU0FTQ0lJIDAgICAvKiBVUyBBU0NJSSAqLwor I2RlZmluZSBGQ19VS0FTQ0lJIDEgICAvKiBVbml0ZWQgS2luZ2RvbSBBU0NJSSAqLworI2RlZmlu ZSBGQ19EVUFTQ0lJIDIgICAvKiBEdXRjaCBJU08gNjQ2IE5SQyAqLworI2RlZmluZSBGQ19GSUFT Q0lJIDMgICAvKiBGaW5uaXNoIElTTyA2NDYgTlJDICovCisjZGVmaW5lIEZDX0ZSQVNDSUkgNCAg IC8qIEZyZW5jaCBJU08gNjQ2IE5SQyAqLworI2RlZmluZSBGQ19GQ0FTQ0lJIDUgICAvKiBGcmVu Y2ggQ2FuYWRpYW4gSVNPIDY0NiBOUkMgKi8KKyNkZWZpbmUgRkNfR0VBU0NJSSA2ICAgLyogR2Vy bWFuIElTTyA2NDYgTlJDICovCisjZGVmaW5lIEZDX0hVQVNDSUkgNyAgIC8qIEh1bmdhcmlhbiBJ U08gNjQ2IE5SQyAqLworI2RlZmluZSBGQ19JVEFTQ0lJIDggICAvKiBJdGFsaWFuICpJU08gNjQ2 IE5SQyAqLworI2RlZmluZSBGQ19OT0FTQ0lJIDkgICAvKiBOb3J3ZWdpYW4gYW5kIERhbmlzaCBJ U08gNjQ2IE5SQyAqLworI2RlZmluZSBGQ19QT0FTQ0lJIDEwICAvKiBQb3J0dWd1ZXNlIElTTyA2 NDYgTlJDICovCisjZGVmaW5lIEZDX1NQQVNDSUkgMTEgIC8qIFNwYW5pc2ggSVNPIDY0NiBOUkMg Ki8KKyNkZWZpbmUgRkNfU1dBU0NJSSAxMiAgLyogU3dlZGlzaCBJU08gNjQ2IE5SQyAqLworI2Rl ZmluZSBGQ19DSEFTQ0lJIDEzICAvKiBTd2lzcyBJU08gNjQ2IE5SQyAqLworCisvKiA4LWJpdCBS b21hbiBjaGFyYWN0ZXIgc2V0cyAqLworCisjZGVmaW5lIEZDXzFMQVRJTiAgMTQgIC8qIElTTyA4 ODU5LTEgTGF0aW4gQWxwaGFiZXQgMSAqLworI2RlZmluZSBGQ18yTEFUSU4gIDE1ICAvKiBJU08g ODg1OS0yIExhdGluIEFscGhhYmV0IDIgKi8KKyNkZWZpbmUgRkNfREVDTUNTICAxNiAgLyogREVD IE11bHRpbmF0aW9uYWwgQ2hhcmFjdGVyIFNldCAqLworI2RlZmluZSBGQ19ORVhUICAgIDE3ICAv KiBOZVhUIHdvcmtzdGF0aW9uIGNoYXJhY3RlciBzZXQgKi8KKyNkZWZpbmUgRkNfQ1A0MzcgICAx OCAgLyogSUJNIFBDIENvZGUgUGFnZSA0MzcgKi8KKyNkZWZpbmUgRkNfQ1A4NTAgICAxOSAgLyog SUJNIFBDIENvZGUgUGFnZSA4NTAgKi8KKyNkZWZpbmUgRkNfQ1A4NTIgICAyMCAgLyogSUJNIFBD IENvZGUgUGFnZSA4NTIgKi8KKyNkZWZpbmUgRkNfQVBQUUQgICAyMSAgLyogQXBwbGUgUXVpY2tk cmF3ICovCisjZGVmaW5lIEZDX0RHTUNTICAgMjIgIC8qIERhdGEgR2VuZXJhbCBJbnRlcm5hdGlv bmFsIENoYXJhY3RlciBTZXQgKi8KKyNkZWZpbmUgRkNfSFBSOCAgICAyMyAgLyogSFAgUm9tYW44 ICovCisKKy8qIEN5cmlsbGljIHNldHMgKi8KKworI2RlZmluZSBGQ19DWVJJTEwgIDI0ICAvKiBJ U08gODg1OS01IExhdGluL0N5cmlsbGljICovCisjZGVmaW5lIEZDX0NQODY2ICAgMjUgIC8qIFBD IENvZGUgUGFnZSA4NjYgQ3lyaWxsaWMgKi8KKyNkZWZpbmUgRkNfS09JNyAgICAyNiAgLyogS09J LTcgPSBTaG9ydCBLT0kgKi8KKyNkZWZpbmUgRkNfS09JOCAgICAyNyAgLyogS09JLTggKi8KKwor LyogSmFwYW5lc2Ugc2V0cyAqLworCisjZGVmaW5lIEZDX0pJUzcgICAgMjggIC8qIEpJUy03ICov CisjZGVmaW5lIEZDX1NISklTICAgMjkgIC8qIFNoaWZ0ZWQgSklTID0gQ1A5MzIgKi8KKyNkZWZp bmUgRkNfSkVVQyAgICAzMCAgLyogSmFwYW5lc2UgRVVDIChKQUUpICovCisjZGVmaW5lIEZDX0pE RUMgICAgMzEgIC8qIEphcGFuZXNlIERFQyBLYW5qaSAqLworCisvKiBIZWJyZXcgc2V0cyAqLwor CisjZGVmaW5lIEZDX0hFNyAgICAgMzIgIC8qIDctQml0IERFQyBIZWJyZXcgKi8KKyNkZWZpbmUg RkNfSEVCUkVXICAzMyAgLyogOC1CaXQgSVNPIDg4NTktOCBMYXRpbi9IZWJyZXcgKi8KKyNkZWZp bmUgRkNfQ1A4NjIgICAzNCAgLyogSGVicmV3IFBDIENvZGUgUGFnZSAqLworCisvKiBHcmVlayBz ZXRzICovCisKKyNkZWZpbmUgRkNfRUxPVCAgICAzNSAgLyogNy1CaXQgRUxPVCA5MjcgR3JlZWsg Ki8KKyNkZWZpbmUgRkNfR1JFRUsgICAzNiAgLyogOC1CaXQgSVNPIDg4NTktNyBMYXRpbi9HcmVl ayAqLworI2RlZmluZSBGQ19DUDg2OSAgIDM3ICAvKiBHcmVlayBQQyBDb2RlIFBhZ2UgKi8KKwor LyogTmV3IFJvbWFuIHNldHMgd2l0aCBFdXJvIHN5bWJvbCAqLworCisjZGVmaW5lIEZDXzlMQVRJ TiAgMzggIC8qIElTTyA4ODU5LTE1IExhdGluIEFscGhhYmV0IDkgKi8KKyNkZWZpbmUgRkNfQ1A5 MjMgICAzOCAgLyogU2FtZSBhcyBMYXRpbi05ICovCisjZGVmaW5lIEZDX0NQODU4ICAgMzkgIC8q IFdlc3Rlcm4gRXVyb3BlIHdpdGggRXVybyAqLworCisvKiBPdGhlciBuZXcgYWRkaXRpb25zICov CisKKyNkZWZpbmUgRkNfQ1A4NTUgICA0MCAgLyogQ3lyaWxsaWMgUEMgQ29kZSBQYWdlICovCisj ZGVmaW5lIEZDX0NQMTI1MSAgNDEgIC8qIEN5cmlsbGljIFdpbmRvd3MgKi8KKyNkZWZpbmUgRkNf QlVMR0FSICA0MiAgLyogQnVsZ2FyaWFuIFBDIGNvZGUgcGFnZSAqLworI2RlZmluZSBGQ19DUDEy NTAgIDQzICAvKiBMYXRpbiAyIFdpbmRvd3MgKGRpZmZlcmVudCBmcm9tIExhdGluLTIpKi8KKyNk ZWZpbmUgRkNfTUFaT1ZJQSA0NCAgLyogUG9saXNoIE1hem92aWEgUEMgY29kZSBwYWdlICovCisK Ky8qIFVuaWNvZGUgKi8KKworI2RlZmluZSBGQ19VQ1MyICAgIDQ1ICAvKiBJU08tMTA2NDYgLyBV bmljb2RlIFVDUy0yICovCisjZGVmaW5lIEZDX1VURjggICAgNDYgIC8qIElTTy0xMDY0NiAvIFVu aWNvZGUgVVRGLTggKi8KKworLyogUmVjZW50IGFkZGl0aW9ucyAqLworCisjZGVmaW5lIEZDX0tP SThSICAgNDcgIC8qIEtPSTgtUiAoUkZDMTQ4OSkgLSBSdXNzaWFuICsgYm94ZHJhd2luZyAqLwor I2RlZmluZSBGQ19LT0k4VSAgIDQ4ICAvKiBLT0k4LVUgKFJGQzIzMTkpIC0gVWtyYWluaWFuICsg Ym94ZHJhd2luZyAqLworI2RlZmluZSBGQ19DUDEyNTIgIDQ5ICAvKiBMYXRpbiAxIFdpbmRvd3Mg Ki8KKworI2RlZmluZSBNQVhGQ1NFVFMgIDQ5ICAvKiBIaWdoZXN0IGZpbGUgY2hhcmFjdGVyIHNl dCBudW1iZXIgKi8KKworI2lmZGVmIE9TMgorI2RlZmluZSBGQ19ERUNTUEVDIDI1MyAvKiBOb3Qg cmVhbCBjaGFyYWN0ZXItc2V0cyAqLworI2RlZmluZSBGQ19ERUNURUNIIDI1MgorI2VuZGlmIC8q IE9TMiAqLworCisjaWZkZWYgVU5JQ09ERQorX1BST1RPVFlQKCBWT0lEIGluaXR4bGF0ZSwgKGlu dCwgaW50KSApOworI2VuZGlmIC8qIFVOSUNPREUgKi8KKworI2VuZGlmIC8qIENLVVhMQV9IICov CgpkaWZmIC0tZ2l0IGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3dh cnQuYyBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t3YXJ0LmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmYzYmI3NQotLS0gL2Rldi9udWxsCisr KyBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t3YXJ0LmMKQEAgLTAs MCArMSw3NDYgQEAKKyNpbmNsdWRlICJja2NzeW0uaCIKK2NoYXIgKndhcnR2ID0gIldhcnQgVmVy c2lvbiAyLjE0LCAxMCBOb3YgMTk5OSI7CisKKyNkZWZpbmUgQ0tXQVJUX0MKKworI2lmZGVmIE1E RUJVRworLyogVXNlIHRoZSByZWFsIG9uZXMgaW4gdGhpcyBtb2R1bGUgb25seSAqLworI2lmZGVm IG1hbGxvYworI3VuZGVmIG1hbGxvYworI2VuZGlmIC8qIG1hbGxvYyAqLworI2lmZGVmIGNhbGxv YworI3VuZGVmIGNhbGxvYworI2VuZGlmIC8qIGNhbGxvYyAqLworI2lmZGVmIHJlYWxsb2MKKyN1 bmRlZiByZWFsbG9jCisjZW5kaWYgLyogcmVhbGxvYyAqLworI2lmZGVmIGZyZWUKKyN1bmRlZiBm cmVlCisjZW5kaWYgLyogZnJlZSAqLworI2VuZGlmIC8qIE1ERUJVRyAqLworCisjaWZkZWYgTUFD CisjZGVmaW5lIFZPSUQgdm9pZAorI2VuZGlmIC8qIE1BQyAqLworCisvKiBXIEEgUiBUICovCisK Ky8qCisgIEEgc21hbGwgc3Vic2V0IG9mICJsZXgiLgorCisgIEF1dGhvcnM6IEplZmYgRGFtZW5z LCBGcmFuayBkYSBDcnV6CisgIENvbHVtYmlhIFVuaXZlcnNpdHkgQ2VudGVyIGZvciBDb21wdXRp bmcgQWN0aXZpdGVzLgorICBGaXJzdCByZWxlYXNlZCBOb3ZlbWJlciAxOTg0LgorICBDb3B5cmln aHQgKEMpIDE5ODQsIDIwMDksCisgICAgVHJ1c3RlZXMgb2YgQ29sdW1iaWEgVW5pdmVyc2l0eSBp biB0aGUgQ2l0eSBvZiBOZXcgWW9yay4KKyAgICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgU2VlIHRo ZSBDLUtlcm1pdCBDT1BZSU5HLlRYVCBmaWxlIG9yIHRoZQorICAgIGNvcHlyaWdodCB0ZXh0IGlu IHRoZSBja2NtYWkuYyBtb2R1bGUgZm9yIGRpc2NsYWltZXIgYW5kIHBlcm1pc3Npb25zLgorKi8K KworLyoKKyAqIGlucHV0IGZvcm1hdCBpczoKKyAqICBsaW5lcyB0byBiZSBjb3BpZWQgfCAlc3Rh dGUgPHN0YXRlIG5hbWVzLi4uPgorICogICUlCisgKiA8c3RhdGU+IHwgPHN0YXRlLHN0YXRlLC4u Lj4gQ0hBUiAgeyBhY3Rpb25zIH0KKyAqIC4uLgorICogICUlCisgKiAgbW9yZSBsaW5lcyB0byBi ZSBjb3BpZWQKKyAqLworCisjaW5jbHVkZSAiY2tjZGViLmgiCQkJLyogSW5jbHVkZXMgKi8KKwor I2lmZGVmIFNUUkFUVVMKKy8qIEFjdHVhbGx5IGNhbGwgcHJpbnRmLCBub3Qgb3VyIHByaW50Zi1j YXRjaGVyIGZvciBLZXJtaXQgKi8KKyNpZmRlZiBwcmludGYKKyN1bmRlZiBwcmludGYKKyNlbmRp ZiAvKiBwcmludGYgKi8KKyNpZmRlZiBmcHJpbnRmCisjdW5kZWYgZnByaW50ZgorI2VuZGlmIC8q IGZwcmludGYgKi8KKyNlbmRpZiAvKiBTVFJBVFVTICovCisKKyNpZmRlZiBNQUMKKy8qIFNhbWUg ZGVhbCBmb3IgTWFjaW50b3NoICovCisjaWZkZWYgcHJpbnRmCisjdW5kZWYgcHJpbnRmCisjZW5k aWYgLyogcHJpbnRmICovCisjaWZkZWYgZnByaW50ZgorI3VuZGVmIGZwcmludGYKKyNlbmRpZiAv KiBmcHJpbnRmICovCisjZW5kaWYgLyogTUFDICovCisKKyNpZmRlZiBVTklYCisvKiBBbmQgVU5J WCAqLworI2lmZGVmIHByaW50ZgorI3VuZGVmIHByaW50ZgorI2VuZGlmIC8qIHByaW50ZiAqLwor I2lmZGVmIGZwcmludGYKKyN1bmRlZiBmcHJpbnRmCisjZW5kaWYgLyogZnByaW50ZiAqLworI2Vu ZGlmIC8qIFVOSVggKi8KKy8qCisgIFRoZSBmb2xsb3dpbmcgImNoYXIiIHNob3VsZCBiZSBjaGFu Z2VkIHRvICJzaG9ydCIsICJpbnQiLCBvciAibG9uZyIgaWYgeW91cgorICB3YXJ0IHByb2dyYW0g d2lsbCBnZW5lcmF0ZSBtb3JlIHRoYW4gMTI3IHN0YXRlcy4gIFNpbmNlIHdhcnQgaXMgdXNlZCBt YWlubHkKKyAgd2l0aCBDLUtlcm1pdCwgd2hpY2ggaGFzIGFib3V0IDgwIHN0YXRlcywgImNoYXIi IGlzIGFkZXF1YXRlLiAgVGhpcyBrZWVwcworICB0aGUgcHJvZ3JhbSBhYm91dCAzSy00SyBzbWFs bGVyLCB3aGljaCBjYW4gYmUgY3JpdGljYWwgb24gMTYtYml0CisgIGFyY2hpdGVjdHVyZXMuCisq LworI2lmZGVmIElSSVg2MAorLyoKKyAgQWxzbyB1c2Ugc2hvcnQgb3IgaW50IGlmIHlvdXIgY29t cGlsZXIgY29tcGxhaW5zIGlub3JkaW5hdGVseSBhYm91dAorICAiaW50ZWdlciBjb252ZXJzaW9u IHJlc3VsdGVkIGluIGEgY2hhbmdlIG9mIHNpZ24iLi4uCisqLworI2RlZmluZSBUQkxfVFlQRSAi c2hvcnQiCQkvKiBDIGRhdGEgdHlwZSBvZiBzdGF0ZSB0YWJsZSAqLworI2Vsc2UKKyNkZWZpbmUg VEJMX1RZUEUgImNoYXIiCQkJLyogQyBkYXRhIHR5cGUgb2Ygc3RhdGUgdGFibGUgKi8KKyNlbmRp ZiAvKiBJUklYNjAgKi8KKworI2RlZmluZSBDX0wgMDE0CQkJCS8qIEZvcm1mZWVkICovCisKKyNk ZWZpbmUgU0VQIDEJCQkJLyogVG9rZW4gdHlwZXMgKi8KKyNkZWZpbmUgTEJSQUNLIDIKKyNkZWZp bmUgUkJSQUNLIDMKKyNkZWZpbmUgV09SRCA0CisjZGVmaW5lIENPTU1BIDUKKworLyogU3RvcmFn ZSBzaXplcyAqLworCisjZGVmaW5lIE1BWFNUQVRFUyA1MAkJCS8qIG1heCBudW1iZXIgb2Ygc3Rh dGVzICovCisjZGVmaW5lIE1BWFdPUkQgNTAJCQkvKiBtYXggIyBvZiBjaGFycy93b3JkICovCisj ZGVmaW5lIFNCWVRFUyAoKE1BWFNUQVRFUys2KS84KQkvKiAjIG9mIGJ5dGVzIGZvciBzdGF0ZSBi aXRtYXNrICovCisKKy8qIE5hbWUgb2Ygd2FydCBmdW5jdGlvbiBpbiBnZW5lcmF0ZWQgcHJvZ3Jh bSAqLworCisjaWZuZGVmIEZOQU1FCisjZGVmaW5lIEZOQU1FICJ3YXJ0IgorI2VuZGlmIC8qIEZO QU1FICovCisKKy8qIFN0cnVjdHVyZSBmb3Igc3RhdGUgaW5mb3JtYXRpb24gKi8KKworc3RydWN0 IHRyYW5zeCB7CisgICAgQ0hBUiBzdGF0ZXNbU0JZVEVTXTsJCS8qIGluY2x1ZGVkIHN0YXRlcyAq LworICAgIGludCBhbnlzdDsJCQkJLyogdHJ1ZSBpZiB0aGlzIGdvb2QgZnJvbSBhbnkgc3RhdGUg Ki8KKyAgICBDSEFSIGluY2hyOwkJCQkvKiBpbnB1dCBjaGFyYWN0ZXIgKi8KKyAgICBpbnQgYWN0 bm87CQkJCS8qIGFzc29jaWF0ZWQgYWN0aW9uICovCisgICAgc3RydWN0IHRyYW5zeCAqbnh0Owor fTsJCQkJCS8qIG5leHQgdHJhbnNpdGlvbiAqLwordHlwZWRlZiBzdHJ1Y3QgdHJhbnN4ICp0cmFu czsKKworLyogRnVuY3Rpb24gcHJvdG90eXBlcyAqLworCitfUFJPVE9UWVAoIFZPSUQgc2V0d3N0 YXRlLCAoaW50LCB0cmFucykgKTsKK19QUk9UT1RZUCggaW50IHRlc3RzdGF0ZSwgKGludCwgdHJh bnMpICk7CitfUFJPVE9UWVAoIHRyYW5zIHJkaW5wdXQsIChGSUxFICosIEZJTEUgKikgKTsKK19Q Uk9UT1RZUCggVk9JRCBpbml0aWFsLCAoRklMRSAqLCBGSUxFICopICk7CitfUFJPVE9UWVAoIGlu dCBpc2luLCAoY2hhciAqLCBpbnQpICk7CitfUFJPVE9UWVAoIGludCBpc3dvcmQsIChpbnQpICk7 CitfUFJPVE9UWVAoIFZPSUQgcmR3b3JkLCAoRklMRSAqLCBjaGFyICopICk7CitfUFJPVE9UWVAo IFZPSUQgcmRzdGF0ZXMsIChGSUxFICosIEZJTEUgKikgKTsKK19QUk9UT1RZUCggdHJhbnMgbmV3 dHJhbnMsICh2b2lkKSApOworX1BST1RPVFlQKCB0cmFucyByZHJ1bGVzLCAoRklMRSAqLCBGSUxF ICopICk7CitfUFJPVE9UWVAoIFZPSUQgc3RhdGVsaXN0LCAoRklMRSAqLCB0cmFucykgKTsKK19Q Uk9UT1RZUCggVk9JRCBjb3B5YWN0LCAoRklMRSAqLCBGSUxFICosIGludCkgKTsKK19QUk9UT1RZ UCggaW50IGZhY3Rpb24sICh0cmFucywgaW50LCBpbnQpICk7CitfUFJPVE9UWVAoIFZPSUQgZW1w dHl0YmwsICh2b2lkKSApOworX1BST1RPVFlQKCBWT0lEIGFkZGFjdGlvbiwgKGludCwgaW50LCBp bnQpICk7CitfUFJPVE9UWVAoIFZPSUQgd3JpdGV0YmwsIChGSUxFICopICk7CitfUFJPVE9UWVAo IFZPSUQgd2FycmF5LCAoRklMRSAqLCBjaGFyICosIGludCBbXSwgaW50LCBjaGFyICopICk7Citf UFJPVE9UWVAoIFZPSUQgcHJvbG9nLCAoRklMRSAqKSApOworX1BST1RPVFlQKCBWT0lEIGVwaWxv Z3VlLCAoRklMRSAqKSApOworX1BST1RPVFlQKCBWT0lEIGNvcHlyZXN0LCAoRklMRSAqLCBGSUxF ICopICk7CitfUFJPVE9UWVAoIGludCBnZXR0b2tlbiwgKEZJTEUgKikgKTsKK19QUk9UT1RZUCgg Vk9JRCByZGNtbnQsIChGSUxFICopICk7CitfUFJPVE9UWVAoIFZPSUQgY2xyaGFzaCwgKHZvaWQp ICk7CitfUFJPVE9UWVAoIGludCBoYXNoLCAoY2hhciAqKSApOworX1BST1RPVFlQKCBWT0lEIGVu dGVyLCAoY2hhciAqLCBpbnQpICk7CitfUFJPVE9UWVAoIGludCBsa3VwLCAoY2hhciAqKSApOwor X1BST1RPVFlQKCBzdGF0aWMgY2hhciogY29weSwgKGNoYXIgKnMpICk7CisKKy8qIFZhcmlhYmxl cyBhbmQgdGFibGVzICovCisKKy8qIGx0IDE5OTItMTAtMDggQmVnaW4KKyAqIHByb3ZpZGUgZGVm aW5pdGlvbiBmb3IgZGVibG9nIHZhcmlhYmxlCisgKiBja2NkZWIuaCBkZWNsYXJlcyBhcyBleHRl cm4uIERFQ0MgQVhQIGlzIHN0cmljdCBhYm91dCByZWYvZGVmIG1vZGVsCisgKiBWYXJpYWJsZSBp cyB1bnVzZWQgaGVyZWluLCB0byB0aGUgYmVzdCBvZiBteSBrbm93bGVkZ2UuCisgKi8KKyNpZmRl ZiBWTVMKK2ludCBkZWJsb2c7CisjZW5kaWYgLyogVk1TICovCisvKiBsdCAxOTkyLTEwLTA4IEVu ZAorICovCisKK3N0YXRpYyBpbnQgbGluZXMsIG5zdGF0ZXMsIG5hY3RzOworCitzdGF0aWMgY2hh ciB0b2t2YWxbTUFYV09SRF07CisKK3N0YXRpYyBpbnQgdGJsW01BWFNUQVRFUyo5Nl07CisKK2No YXIgKnRibF90eXBlID0gVEJMX1RZUEU7CisKK2NoYXIgKnR4dDEgPSAiXG4jZGVmaW5lIEJFR0lO IHN0YXRlID1cblxuaW50IHN0YXRlID0gMDtcblxuaW50XG4iOworCitjaGFyICpmbmFtZSA9IEZO QU1FOwkJCS8qIEdlbmVyYXRlZCBmdW5jdGlvbiBuYW1lIGdvZXMgaGVyZSAqLworCisvKiByZXN0 IG9mIHByb2dyYW0uLi4gKi8KKworY2hhciAqdHh0MiA9ICIoKVxuXAore1xuXAorICAgIGludCBj LGFjdG5vO1xuXAorICAgIGV4dGVybiAiOworCisvKiBEYXRhIHR5cGUgb2Ygc3RhdGUgdGFibGUg aXMgaW5zZXJ0ZWQgaGVyZSAoc2hvcnQgb3IgaW50KSAqLworCitjaGFyICp0eHQyYSA9CisiIHRi bFtdO1xuXAorICAgIHdoaWxlICgxKSB7XG5cCisJYyA9IGlucHV0KCkgLSAzMjtcblwKKwlkZWJ1 ZyhGMDAwLFwiUFJPVE8gaW5wdXRcIixja2l0b2Eoc3RhdGUpLGMrMzIpO1xuXAorCWlmIChjIDwg MCB8fCBjID4gOTUpIGMgPSAwO1xuIjsKKworY2hhciAqdHh0MmIgPSAiCWlmICgoYWN0bm8gPSB0 YmxbYyArIHN0YXRlKjk2XSkgIT0gLTEpXG5cCisJICAgIHN3aXRjaChhY3Rubykge1xuIjsKKwor LyogdGhpcyBwcm9ncmFtJ3Mgb3V0cHV0IGdvZXMgaGVyZSwgZm9sbG93ZWQgYnkgZmluYWwgdGV4 dC4uLiAqLworCitjaGFyICp0eHQzID0gIlxuCSAgICB9XG4gICAgfVxufVxuXG4iOworCisKKy8q CisgKiB0dXJuIG9uIHRoZSBiaXQgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBzdGF0ZQorICoK KyAqLworVk9JRAorc2V0d3N0YXRlKHN0YXRlLHQpIGludCBzdGF0ZTsgdHJhbnMgdDsgeworICAg IGludCBpZHgsbXNrOworICAgIGlkeCA9IHN0YXRlLzg7CQkJLyogYnl0ZSBhc3NvY2lhdGVkIHdp dGggc3RhdGUgKi8KKyAgICBtc2sgPSAweDgwID4+IChzdGF0ZSAlIDgpOwkJLyogYml0IG1hc2sg Zm9yIHN0YXRlICovCisgICAgdC0+c3RhdGVzW2lkeF0gfD0gbXNrOworfQorCisvKgorICogc2Vl IGlmIHRoZSBzdGF0ZSBpcyBpbnZvbHZlZCBpbiB0aGUgdHJhbnNpdGlvbgorICoKKyAqLworaW50 Cit0ZXN0c3RhdGUoc3RhdGUsdCkgaW50IHN0YXRlOyB0cmFucyB0OyB7CisgICAgaW50IGlkeCxt c2s7CisgICAgaWR4ID0gc3RhdGUvODsKKyAgICBtc2sgPSAweDgwID4+IChzdGF0ZSAlIDgpOwor ICAgIHJldHVybih0LT5zdGF0ZXNbaWR4XSAmIG1zayk7Cit9CisKKworLyoKKyAqIHJlYWQgaW5w dXQgZnJvbSBoZXJlLi4uCisgKgorICovCisKK3RyYW5zCityZGlucHV0KGluZnAsb3V0ZnApIEZJ TEUgKmluZnAsKm91dGZwOyB7CisgICAgdHJhbnMgeDsKKyAgICBsaW5lcyA9IDE7CQkJCS8qIGxp bmUgY291bnRlciAqLworICAgIG5zdGF0ZXMgPSAwOwkJCS8qIG5vIHN0YXRlcyAqLworICAgIG5h Y3RzID0gMDsJCQkJLyogbm8gYWN0aW9ucyB5ZXQgKi8KKyAgICBmcHJpbnRmKG91dGZwLCJcbiVj KiBXQVJOSU5HIC0tIFRoaXMgQyBzb3VyY2UgcHJvZ3JhbSBnZW5lcmF0ZWQgYnkgIiwnLycpOwor ICAgIGZwcmludGYob3V0ZnAsIldhcnQgcHJlcHJvY2Vzc29yLiAqL1xuIik7CisgICAgZnByaW50 ZihvdXRmcCwiJWMqIERvIG5vdCBlZGl0IHRoaXMgZmlsZTsgZWRpdCB0aGUgV2FydC1mb3JtYXQg IiwnLycpOworICAgIGZwcmludGYob3V0ZnAsInNvdXJjZSBmaWxlIGluc3RlYWQsICovXG4iKTsK KyAgICBmcHJpbnRmKG91dGZwLCIlYyogYW5kIHRoZW4gcnVuIGl0IHRocm91Z2ggV2FydCB0byBw cm9kdWNlIGEgbmV3ICIsJy8nKTsKKyAgICBmcHJpbnRmKG91dGZwLCJDIHNvdXJjZSBmaWxlLiAg ICAgKi9cblxuIik7CisgICAgZnByaW50ZihvdXRmcCwiJWMqIFdhcnQgVmVyc2lvbiBJbmZvOiAq L1xuIiwnLycpOworICAgIGZwcmludGYob3V0ZnAsImNoYXIgKndhcnR2ID0gXCIlc1wiO1xuXG4i LHdhcnR2KTsKKworICAgIGluaXRpYWwoaW5mcCxvdXRmcCk7CQkvKiByZWFkIHN0YXRlIG5hbWVz LCBpbml0aWFsIGRlZnMgKi8KKyAgICBwcm9sb2cob3V0ZnApOwkJCS8qIHdyaXRlIG91dCBvdXIg aW5pdGlhbCBjb2RlICovCisgICAgeCA9IHJkcnVsZXMoaW5mcCxvdXRmcCk7CQkvKiByZWFkIHJ1 bGVzICovCisgICAgZXBpbG9ndWUob3V0ZnApOwkJCS8qIHdyaXRlIG91dCBlcGlsb2d1ZSBjb2Rl ICovCisgICAgcmV0dXJuKHgpOworfQorCisKKy8qCisgKiBpbml0aWFsIC0gcmVhZCBpbml0aWFs IGRlZmluaXRpb25zIGFuZCBzdGF0ZSBuYW1lcy4gIFJldHVybnMKKyAqIG9uIEVPRiBvciAlJS4K KyAqCisgKi8KK1ZPSUQKK2luaXRpYWwoaW5mcCxvdXRmcCkgRklMRSAqaW5mcCwgKm91dGZwOyB7 CisgICAgaW50IGM7CisgICAgY2hhciB3b3JkYnVmW01BWFdPUkRdOworICAgIHdoaWxlICgoYyA9 IGdldGMoaW5mcCkpICE9IEVPRikgeworCWlmIChjID09ICclJykgeworCSAgICByZHdvcmQoaW5m cCx3b3JkYnVmKTsKKwkgICAgaWYgKHN0cmNtcCh3b3JkYnVmLCJzdGF0ZXMiKSA9PSAwKQorCSAg ICAgIHJkc3RhdGVzKGluZnAsb3V0ZnApOworCSAgICBlbHNlIGlmIChzdHJjbXAod29yZGJ1Ziwi JSIpID09IDApIHJldHVybjsKKwkgICAgZWxzZSBmcHJpbnRmKG91dGZwLCIlJSVzIix3b3JkYnVm KTsKKwl9CisJZWxzZSBwdXRjKGMsb3V0ZnApOworCWlmIChjID09ICdcbicpIGxpbmVzKys7Cisg ICAgfQorfQorCisvKgorICogYm9vbGVhbiBmdW5jdGlvbiB0byB0ZWxsIGlmIHRoZSBnaXZlbiBj aGFyYWN0ZXIgY2FuIGJlIHBhcnQgb2YKKyAqIGEgd29yZC4KKyAqCisgKi8KK2ludAoraXNpbihz LGMpIGNoYXIgKnM7IGludCBjOyB7CisgICAgZm9yICg7ICpzICE9ICdcMCc7IHMrKykKKyAgICAg IGlmICgqcyA9PSAoY2hhcikgYykgcmV0dXJuKDEpOworICAgIHJldHVybigwKTsKK30KK2ludAor aXN3b3JkKGMpIGludCBjOyB7CisgICAgc3RhdGljIGNoYXIgc3BlY2lhbFtdID0gIi4lXy0kQCI7 CS8qIHRoZXNlIGFyZSBhbGxvd2FibGUgKi8KKyAgICByZXR1cm4oaXNhbG51bShjKSB8fCBpc2lu KHNwZWNpYWwsYykpOworfQorCisvKgorICogcmVhZCB0aGUgbmV4dCB3b3JkIGludG8gdGhlIGdp dmVuIGJ1ZmZlci4KKyAqCisgKi8KK1ZPSUQKK3Jkd29yZChmcCxidWYpIEZJTEUgKmZwOyBjaGFy ICpidWY7IHsKKyAgICBpbnQgbGVuID0gMCxjOworICAgIHdoaWxlIChpc3dvcmQoYyA9IGdldGMo ZnApKSAmJiArK2xlbiA8IE1BWFdPUkQpICpidWYrKyA9IChjaGFyKSBjOworICAgICpidWYrKyA9 ICdcMCc7CQkJLyogdGllIG9mZiB3b3JkICovCisgICAgdW5nZXRjKGMsZnApOwkJCS8qIHB1dCBi cmVhayBjaGFyIGJhY2sgKi8KK30KKworLyoKKyAqIHJlYWQgc3RhdGUgbmFtZXMsIHVwIHRvIGEg bmV3bGluZS4KKyAqCisgKi8KK1ZPSUQKK3Jkc3RhdGVzKGZwLG9mcCkgRklMRSAqZnAsKm9mcDsg eworICAgIGludCBjOworICAgIGNoYXIgd29yZGJ1ZltNQVhXT1JEXTsKKyAgICB3aGlsZSAoKGMg PSBnZXRjKGZwKSkgIT0gRU9GICYmIGMgIT0gJ1xuJykgeworCWlmIChpc3NwYWNlKGMpIHx8IGMg PT0gQ19MKSBjb250aW51ZTsJLyogc2tpcCB3aGl0ZXNwYWNlICovCisJdW5nZXRjKGMsZnApOwkJ CS8qIHB1dCBjaGFyIGJhY2sgKi8KKwlyZHdvcmQoZnAsd29yZGJ1Zik7CQkvKiByZWFkIHRoZSB3 aG9sZSB3b3JkICovCisJZW50ZXIod29yZGJ1ZiwrK25zdGF0ZXMpOwkvKiBwdXQgaW50byBzeW1i b2wgdGJsICovCisJZnByaW50ZihvZnAsIiNkZWZpbmUgJXMgJWRcbiIsd29yZGJ1Zixuc3RhdGVz KTsKKyAgICB9CisgICAgbGluZXMrKzsKK30KKworLyoKKyAqIGFsbG9jYXRlIGEgbmV3LCBlbXB0 eSB0cmFuc2l0aW9uIG5vZGUKKyAqCisgKi8KK3RyYW5zCituZXd0cmFucygpIHsKKyAgICB0cmFu cyBuZXc7CisgICAgaW50IGk7CisgICAgbmV3ID0gKHRyYW5zKSBtYWxsb2Moc2l6ZW9mIChzdHJ1 Y3QgdHJhbnN4KSk7CisgICAgZm9yIChpPTA7IGk8U0JZVEVTOyBpKyspIG5ldy0+c3RhdGVzW2ld ID0gMDsKKyAgICBuZXctPmFueXN0ID0gMDsKKyAgICBuZXctPm54dCA9IE5VTEw7CisgICAgcmV0 dXJuKG5ldyk7Cit9CisKKworLyoKKyAqIHJlYWQgYWxsIHRoZSBydWxlcy4KKyAqCisgKi8KKwor dHJhbnMKK3JkcnVsZXMoZnAsb3V0KSBGSUxFICpmcCwqb3V0OyB7CisgICAgdHJhbnMgaGVhZCxj dXIscHJldjsKKyAgICBpbnQgY3VydG9rOworICAgIGhlYWQgPSBjdXIgPSBwcmV2ID0gTlVMTDsK KyAgICB3aGlsZSAoKGN1cnRvayA9IGdldHRva2VuKGZwKSkgIT0gU0VQKQorCisgICAgICBzd2l0 Y2goY3VydG9rKSB7CisJY2FzZSBMQlJBQ0s6CisJICBpZiAoY3VyID09IE5VTEwpCisJICAgIGN1 ciA9IG5ld3RyYW5zKCk7CisJICBlbHNlCisJICAgIGZhdGFsKCJkdXBsaWNhdGUgc3RhdGUgbGlz dCIpOworCSAgc3RhdGVsaXN0KGZwLGN1cik7CQkvKiBzZXQgc3RhdGVzICovCisJICBjb250aW51 ZTsJCQkvKiBwcmVwYXJlIHRvIHJlYWQgY2hhciAqLworCisJY2FzZSBXT1JEOgorCSAgaWYgKChp bnQpc3RybGVuKHRva3ZhbCkgIT0gMSkKKwkgICAgZmF0YWwoIm11bHRpcGxlIGNoYXJzIGluIHN0 YXRlIik7CisJICBpZiAoY3VyID09IE5VTEwpIHsKKwkgICAgICBjdXIgPSBuZXd0cmFucygpOwor CSAgICAgIGN1ci0+YW55c3QgPSAxOworCSAgfQorCSAgY3VyLT5hY3RubyA9ICsrbmFjdHM7CisJ ICBjdXItPmluY2hyID0gKGNoYXIpICh0b2t2YWxbMF0gLSAzMik7CisJICBpZiAoaGVhZCA9PSBO VUxMKQorCSAgICBoZWFkID0gY3VyOworCSAgZWxzZQorCSAgICBwcmV2LT5ueHQgPSBjdXI7CisJ ICBwcmV2ID0gY3VyOworCSAgY3VyID0gTlVMTDsKKwkgIGNvcHlhY3QoZnAsb3V0LG5hY3RzKTsK KwkgIGJyZWFrOworCWRlZmF1bHQ6IGZhdGFsKCJiYWQgaW5wdXQgZm9ybWF0Iik7CisgICAgICB9 CisgICAgcmV0dXJuKGhlYWQpOworfQorCisvKgorICogcmVhZCBhIGxpc3Qgb2YgKGNvbW1hLXNl cGFyYXRlZCkgc3RhdGVzLCBzZXQgdGhlbSBpbiB0aGUKKyAqIGdpdmVuIHRyYW5zaXRpb24uCisg KgorICovCitWT0lECitzdGF0ZWxpc3QoZnAsdCkgRklMRSAqZnA7IHRyYW5zIHQ7IHsKKyAgICBp bnQgY3VydG9rLHN2YWw7CisgICAgY3VydG9rID0gQ09NTUE7CisgICAgd2hpbGUgKGN1cnRvayAh PSBSQlJBQ0spIHsKKwlpZiAoY3VydG9rICE9IENPTU1BKSBmYXRhbCgibWlzc2luZyBjb21tYSIp OworCWlmICgoY3VydG9rID0gZ2V0dG9rZW4oZnApKSAhPSBXT1JEKSBmYXRhbCgibWlzc2luZyBz dGF0ZSBuYW1lIik7CisJaWYgKChzdmFsID0gbGt1cCh0b2t2YWwpKSA9PSAtMSkgeworCSAgICBm cHJpbnRmKHN0ZGVyciwic3RhdGUgJXMgdW5kZWZpbmVkXG4iLHRva3ZhbCk7CisJICAgIGZhdGFs KCJ1bmRlZmluZWQgc3RhdGUiKTsKKwl9CisJc2V0d3N0YXRlKHN2YWwsdCk7CisJY3VydG9rID0g Z2V0dG9rZW4oZnApOworICAgIH0KK30KKworLyoKKyAqIGNvcHkgYW4gYWN0aW9uIGZyb20gdGhl IGlucHV0IHRvIHRoZSBvdXRwdXQgZmlsZQorICoKKyAqLworVk9JRAorY29weWFjdChpbnAsb3V0 cCxhY3RubykgRklMRSAqaW5wLCpvdXRwOyBpbnQgYWN0bm87IHsKKyAgICBpbnQgYyxiY250Owor ICAgIGZwcmludGYob3V0cCwiY2FzZSAlZDpcbiIsYWN0bm8pOworICAgIHdoaWxlIChjID0gZ2V0 YyhpbnApLCAoaXNzcGFjZShjKSB8fCBjID09IENfTCkpCisgICAgICBpZiAoYyA9PSAnXG4nKSBs aW5lcysrOworICAgIGlmIChjID09ICd7JykgeworCWJjbnQgPSAxOworCWZwdXRzKCIgICAgeyIs b3V0cCk7CisJd2hpbGUgKGJjbnQgPiAwICYmIChjID0gZ2V0YyhpbnApKSAhPSBFT0YpIHsKKwkg ICAgaWYgKGMgPT0gJ3snKSBiY250Kys7CisJICAgIGVsc2UgaWYgKGMgPT0gJ30nKSBiY250LS07 CisJICAgIGVsc2UgaWYgKGMgPT0gJ1xuJykgbGluZXMrKzsKKwkgICAgcHV0YyhjLG91dHApOwor CX0KKwlpZiAoYmNudCA+IDApIGZhdGFsKCJhY3Rpb24gZG9lc24ndCBlbmQiKTsKKyAgICB9IGVs c2UgeworCXdoaWxlIChjICE9ICdcbicgJiYgYyAhPSBFT0YpIHsKKwkgICAgcHV0YyhjLG91dHAp OworCSAgICBjID0gZ2V0YyhpbnApOworCX0KKwlsaW5lcysrOworICAgIH0KKyAgICBmcHJpbnRm KG91dHAsIlxuICAgIGJyZWFrO1xuIik7Cit9CisKKy8qCisgKiBmaW5kIHRoZSBhY3Rpb24gYXNz b2NpYXRlZCB3aXRoIGEgZ2l2ZW4gY2hhcmFjdGVyIGFuZCBzdGF0ZS4KKyAqIHJldHVybnMgLTEg aWYgb25lIGNhbid0IGJlIGZvdW5kLgorICoKKyAqLworaW50CitmYWN0aW9uKGhkLHN0YXRlLGNo cikgdHJhbnMgaGQ7IGludCBzdGF0ZSxjaHI7IHsKKyAgICB3aGlsZSAoaGQgIT0gTlVMTCkgewor CWlmIChoZC0+YW55c3QgfHwgdGVzdHN0YXRlKHN0YXRlLGhkKSkKKwkgIGlmIChoZC0+aW5jaHIg PT0gKCcuJyAtIDMyKSB8fCBoZC0+aW5jaHIgPT0gKGNoYXIpIGNocikKKwkgICAgcmV0dXJuKGhk LT5hY3Rubyk7CisJaGQgPSBoZC0+bnh0OworICAgIH0KKyAgICByZXR1cm4oLTEpOworfQorCisv KgorICogZW1wdHkgdGhlIHRhYmxlLi4uCisgKgorICovCitWT0lECitlbXB0eXRibCgpIHsKKyAg ICBpbnQgaTsKKyAgICBmb3IgKGk9MDsgaTxuc3RhdGVzKjk2OyBpKyspIHRibFtpXSA9IC0xOwor fQorCisvKgorICogYWRkIHRoZSBzcGVjaWZpZWQgYWN0aW9uIHRvIHRoZSBvdXRwdXQgZm9yIHRo ZSBnaXZlbiBzdGF0ZSBhbmQgY2hyLgorICoKKyAqLworVk9JRAorYWRkYWN0aW9uKGFjdCxzdGF0 ZSxjaHIpIGludCBhY3Qsc3RhdGUsY2hyOyB7CisgICAgdGJsW3N0YXRlKjk2ICsgY2hyXSA9IGFj dDsKK30KKworVk9JRAord3JpdGV0YmwoZnApIEZJTEUgKmZwOyB7CisgICAgd2FycmF5KGZwLCJ0 YmwiLHRibCw5NioobnN0YXRlcysxKSxUQkxfVFlQRSk7Cit9CisKKworLyoKKyAqIHdyaXRlIGFu IGFycmF5IHRvIHRoZSBvdXRwdXQgZmlsZSwgZ2l2ZW4gaXRzIG5hbWUgYW5kIHNpemUuCisgKgor ICovCitWT0lECit3YXJyYXkoZnAsbmFtLGNvbnQsc2l6LHR5cCkgRklMRSAqZnA7IGNoYXIgKm5h bTsgaW50IGNvbnRbXSxzaXo7IGNoYXIgKnR5cDsgeworICAgIGludCBpOworICAgIGZwcmludGYo ZnAsIiVzICVzW10gPSB7XG4iLHR5cCxuYW0pOworICAgIGZvciAoaSA9IDA7IGkgPCBzaXogLSAx OyApIHsKKwlmcHJpbnRmKGZwLCIgJTJkLCIsY29udFtpXSk7CisJaWYgKCgrK2kgJSAxNikgPT0g MCkgcHV0YygnXG4nLGZwKTsKKyAgICB9CisgICAgZnByaW50ZihmcCwiJTJkXG59O1xuIixjb250 W3Npei0xXSk7Cit9CisKKyNpZm5kZWYgU1RSQVRVUworI2lmZGVmIE1BSU5UWVBFCisvKgorICBJ ZiB5b3UgZ2V0IGNvbXBsYWludHMgYWJvdXQgIm1haW46IHJldHVybiB0eXBlIGlzIG5vdCBibGFo IiwKKyAgZGVmaW5lIE1BSU5UWVBFIG9uIHRoZSBDQyBjb21tYW5kIGxpbmUsIGUuZy4gIkNGTEFH Uz0tRE1BSU5UWVBFPWludCIuCisqLworTUFJTlRZUEUKKyNlbHNlCisjaWZkZWYgQ0tfU0NPVjUK K2ludAorI2Vsc2UKKyNpZmRlZiBfX0RFQ0MKKyNpZmRlZiBfX0FMUEhBCitpbnQKKyNlbHNlCitW T0lECisjZW5kaWYgLyogX19BTFBIQSAqLworI2Vsc2UKKyNpZmRlZiBTVFJBVFVTCitpbnQKKyNp ZmRlZiBfX0dOVUNfXworaW50CisjZWxzZQorLyoKKyAgVGhlIGRlZmF1bHQgY2FzZSBzaG91bGQg YmUgaW50LCBub3QgVk9JRCwgYnV0IGl0J3MgYmVlbiB0aGlzIHdheSBmb3IKKyAgeWVhcnMgKG5v IGRvdWJ0IGZvciBhIHJlYXNvbikgYW5kIHdobyBrbm93cyBob3cgbWFueSBidWlsZHMgd291bGQg YnJlYWsKKyAgaWYgSSBjaGFuZ2VkIGl0LgorKi8KK1ZPSUQKKyNlbmRpZiAvKiBfX0dOVUNfXyAq LworI2VuZGlmIC8qIFNUUkFUVVMgKi8KKyNlbmRpZiAvKiBfX0RFQ0MgKi8KKyNlbmRpZiAvKiBD S19TQ09WNSAqLworI2VuZGlmIC8qIE1BSU5UWVBFICovCisjZW5kaWYgLyogU1RSQVRVUyAqLwor bWFpbihhcmdjLGFyZ3YpIGludCBhcmdjOyBjaGFyICoqYXJndjsgeworICAgIHRyYW5zIGhlYWQ7 CisgICAgaW50IHN0YXRlLGM7CisgICAgRklMRSAqaW5maWxlLCpvdXRmaWxlOworCisgICAgaWYg KGFyZ2MgPiAxKSB7CisJaWYgKChpbmZpbGUgPSBmb3Blbihhcmd2WzFdLCJyIikpID09IE5VTEwp IHsKKwkgICAgZnByaW50ZihzdGRlcnIsIkNhbid0IG9wZW4gJXNcbiIsYXJndlsxXSk7CisJICAg IGZhdGFsKCJ1bnJlYWRhYmxlIGlucHV0IGZpbGUiKTsKKwl9CisgICAgfSBlbHNlIGluZmlsZSA9 IHN0ZGluOworCisgICAgaWYgKGFyZ2MgPiAyKSB7CisJaWYgKChvdXRmaWxlID0gZm9wZW4oYXJn dlsyXSwidyIpKSA9PSBOVUxMKSB7CisJICAgIGZwcmludGYoc3RkZXJyLCJDYW4ndCB3cml0ZSB0 byAlc1xuIixhcmd2WzJdKTsKKwkgICAgZmF0YWwoImJhZCBvdXRwdXQgZmlsZSIpOworCX0KKyAg ICB9IGVsc2Ugb3V0ZmlsZSA9IHN0ZG91dDsKKworICAgIGNscmhhc2goKTsJCQkJLyogZW1wdHkg aGFzaCB0YWJsZSAqLworICAgIGhlYWQgPSByZGlucHV0KGluZmlsZSxvdXRmaWxlKTsJLyogcmVh ZCBpbnB1dCBmaWxlICovCisgICAgZW1wdHl0YmwoKTsJCQkJLyogZW1wdHkgb3VyIHRhYmxlcyAq LworICAgIGZvciAoc3RhdGUgPSAwOyBzdGF0ZSA8PSBuc3RhdGVzOyBzdGF0ZSsrKQorICAgICAg Zm9yIChjID0gMTsgYyA8IDk2OyBjKyspCQkvKiBmaW5kIGFjdGlvbnMsICovCisJYWRkYWN0aW9u KGZhY3Rpb24oaGVhZCxzdGF0ZSxjKSxzdGF0ZSxjKTsgLyogYWRkIHRvIHRibCAqLworICAgIHdy aXRldGJsKG91dGZpbGUpOworICAgIGNvcHlyZXN0KGluZmlsZSxvdXRmaWxlKTsKKyAgICBwcmlu dGYoIiVkIHN0YXRlcywgJWQgYWN0aW9uc1xuIixuc3RhdGVzLG5hY3RzKTsKKyAgICBleGl0KEdP T0RfRVhJVCk7Cit9CisKKworLyoKKyAqIGZhdGFsIGVycm9yIGhhbmRsZXIKKyAqCisgKi8KKwor Vk9JRAorZmF0YWwobXNnKSBjaGFyICptc2c7IHsKKyAgICBmcHJpbnRmKHN0ZGVyciwiZXJyb3Ig aW4gbGluZSAlZDogJXNcbiIsbGluZXMsbXNnKTsKKyAgICBleGl0KEJBRF9FWElUKTsKK30KKwor Vk9JRAorcHJvbG9nKG91dGZwKSBGSUxFICpvdXRmcDsgeworICAgIGludCBjOworICAgIHdoaWxl ICgoYyA9ICp0eHQxKyspICAgICAhPSAnXDAnKSBwdXRjKGMsb3V0ZnApOworICAgIHdoaWxlICgo YyA9ICpmbmFtZSsrKSAgICAhPSAnXDAnKSBwdXRjKGMsb3V0ZnApOworICAgIHdoaWxlICgoYyA9 ICp0eHQyKyspICAgICAhPSAnXDAnKSBwdXRjKGMsb3V0ZnApOworICAgIHdoaWxlICgoYyA9ICp0 YmxfdHlwZSsrKSAhPSAnXDAnKSBwdXRjKGMsb3V0ZnApOworICAgIHdoaWxlICgoYyA9ICp0eHQy YSsrKSAgICAhPSAnXDAnKSBwdXRjKGMsb3V0ZnApOworICAgIHdoaWxlICgoYyA9ICp0eHQyYisr KSAgICAhPSAnXDAnKSBwdXRjKGMsb3V0ZnApOworfQorCitWT0lECitlcGlsb2d1ZShvdXRmcCkg RklMRSAqb3V0ZnA7IHsKKyAgICBpbnQgYzsKKyAgICB3aGlsZSAoKGMgPSAqdHh0MysrKSAhPSAn XDAnKSBwdXRjKGMsb3V0ZnApOworfQorCitWT0lECitjb3B5cmVzdChpbixvdXQpIEZJTEUgKmlu LCpvdXQ7IHsKKyAgICBpbnQgYzsKKyAgICB3aGlsZSAoKGMgPSBnZXRjKGluKSkgIT0gRU9GKSBw dXRjKGMsb3V0KTsKK30KKworLyoKKyAqIGdldHRva2VuIC0gcmV0dXJucyB0b2tlbiB0eXBlIG9m IG5leHQgdG9rZW4sIHNldHMgdG9rdmFsCisgKiB0byB0aGUgc3RyaW5nIHZhbHVlIG9mIHRoZSB0 b2tlbiBpZiBhcHByb3ByaWF0ZS4KKyAqCisgKi8KKworaW50CitnZXR0b2tlbihmcCkgRklMRSAq ZnA7IHsKKyAgICBpbnQgYzsKKyAgICB3aGlsZSAoMSkgewkJCQkvKiBsb29wIGlmIHJlYWRpbmcg Y29tbWVudHMuLi4gKi8KKwlkbyB7CisJICAgIGMgPSBnZXRjKGZwKTsKKwkgICAgaWYgKGMgPT0g J1xuJykgbGluZXMrKzsKKwl9IHdoaWxlICgoaXNzcGFjZShjKSB8fCBjID09IENfTCkpOyAvKiBz a2lwIHdoaXRlc3BhY2UgKi8KKwlzd2l0Y2goYykgeworCSAgY2FzZSBFT0Y6CisJICAgIHJldHVy bihTRVApOworCSAgY2FzZSAnJSc6CisJICAgIGlmICgoYyA9IGdldGMoZnApKSA9PSAnJScpIHJl dHVybihTRVApOworCSAgICB0b2t2YWxbMF0gPSAnJSc7CisJICAgIHRva3ZhbFsxXSA9IChjaGFy KSBjOworCSAgICByZHdvcmQoZnAsdG9rdmFsKzIpOworCSAgICByZXR1cm4oV09SRCk7CisJICBj YXNlICc8JzoKKwkgICAgcmV0dXJuKExCUkFDSyk7CisJICBjYXNlICc+JzoKKwkgICAgcmV0dXJu KFJCUkFDSyk7CisJICBjYXNlICcsJzoKKwkgICAgcmV0dXJuKENPTU1BKTsKKwkgIGNhc2UgJy8n OgorCSAgICBpZiAoKGMgPSBnZXRjKGZwKSkgPT0gJyonKSB7CisJCXJkY21udChmcCk7CQkvKiBz a2lwIG92ZXIgdGhlIGNvbW1lbnQgKi8KKwkJY29udGludWU7CisJICAgIH0gZWxzZSB7CQkJLyog YW5kIGtlZXAgbG9vcGluZyAqLworCQl1bmdldGMoYyxmcCk7CQkvKiBwdXQgdGhpcyBiYWNrIGlu dG8gaW5wdXQgKi8KKwkJYyA9ICcvJzsJCS8qIHB1dCBjaGFyYWN0ZXIgYmFjaywgZmFsbCB0aHJ1 ICovCisJICAgIH0KKworCSAgZGVmYXVsdDoKKwkgICAgaWYgKGlzd29yZChjKSkgeworCQl1bmdl dGMoYyxmcCk7CisJCXJkd29yZChmcCx0b2t2YWwpOworCQlyZXR1cm4oV09SRCk7CisJICAgIH0g ZWxzZSBmYXRhbCgiSW52YWxpZCBjaGFyYWN0ZXIgaW4gaW5wdXQiKTsKKwl9CisgICAgfQorfQor CisvKgorICogc2tpcCBvdmVyIGEgY29tbWVudAorICoKKyAqLworCitWT0lECityZGNtbnQoZnAp IEZJTEUgKmZwOyB7CisgICAgaW50IGMsc3RhcixwcmNudDsKKyAgICBwcmNudCA9IHN0YXIgPSAw OwkJCS8qIG5vIHN0YXIgc2VlbiB5ZXQgKi8KKyAgICB3aGlsZSAoISgoYyA9IGdldGMoZnApKSA9 PSAnLycgJiYgc3RhcikpIHsKKwlpZiAoYyA9PSBFT0YgfHwgKHByY250ICYmIGMgPT0gJyUnKSkg ZmF0YWwoIlVudGVybWluYXRlZCBjb21tZW50Iik7CisJcHJjbnQgPSAoYyA9PSAnJScpOworCXN0 YXIgPSAoYyA9PSAnKicpOworCWlmIChjID09ICdcbicpIGxpbmVzKys7CisgICAgfQorfQorCisv KgorICogc3ltYm9sIHRhYmxlIG1hbmFnZW1lbnQgZm9yIHdhcnQKKyAqCisgKiBlbnRyeSBwb2lu dHM6CisgKiAgIGNscmhhc2ggLSBlbXB0eSBoYXNoIHRhYmxlLgorICogICBlbnRlciAtIGVudGVy IGEgbmFtZSBpbnRvIHRoZSBzeW1ib2wgdGFibGUKKyAqICAgbGt1cCAtIGZpbmQgYSBuYW1lJ3Mg dmFsdWUgaW4gdGhlIHN5bWJvbCB0YWJsZS4KKyAqCisgKi8KKworI2RlZmluZSBIQVNIU0laRSAx MDEJCQkvKiAjIG9mIGVudHJpZXMgaW4gaGFzaCB0YWJsZSAqLworCitzdHJ1Y3Qgc3ltIHsKKyAg ICBjaGFyICpuYW1lOwkJCQkvKiBzeW1ib2wgbmFtZSAqLworICAgIGludCB2YWw7CQkJCS8qIHZh bHVlICovCisgICAgc3RydWN0IHN5bSAqaG54dDsJCQkvKiBuZXh0IG9uIGNvbGxpc2lvbiBjaGFp biAqLworfSAqaHRhYltIQVNIU0laRV07CQkJLyogdGhlIGhhc2ggdGFibGUgKi8KKworLyoKKyAq IGVtcHR5IHRoZSBoYXNoIHRhYmxlIGJlZm9yZSB1c2luZyBpdC4uLgorICoKKyAqLworVk9JRAor Y2xyaGFzaCgpIHsKKyAgICBpbnQgaTsKKyAgICBmb3IgKGk9MDsgaTxIQVNIU0laRTsgaSsrKSBo dGFiW2ldID0gTlVMTDsKK30KKworLyoKKyAqIGNvbXB1dGUgdGhlIHZhbHVlIG9mIHRoZSBoYXNo IGZvciBhIHN5bWJvbAorICoKKyAqLworaW50CitoYXNoKG5hbWUpIGNoYXIgKm5hbWU7IHsKKyAg ICBpbnQgc3VtOworICAgIGZvciAoc3VtID0gMDsgKm5hbWUgIT0gJ1wwJzsgbmFtZSsrKSBzdW0g Kz0gKHN1bSArICpuYW1lKTsKKyAgICBzdW0gJT0gSEFTSFNJWkU7CQkJLyogdGFrZSBzdW0gbW9k IGhhc2hzaXplICovCisgICAgaWYgKHN1bSA8IDApIHN1bSArPSBIQVNIU0laRTsJLyogZGlzYWxs b3cgbmVnYXRpdmUgaGFzaCB2YWx1ZSAqLworICAgIHJldHVybihzdW0pOworfQorCisvKgorICog bWFrZSBhIHByaXZhdGUgY29weSBvZiBhIHN0cmluZy4uLgorICoKKyAqLworc3RhdGljIGNoYXIq Citjb3B5KHMpIGNoYXIgKnM7IHsKKyAgICBjaGFyICpuZXc7CisgICAgbmV3ID0gKGNoYXIgKikg bWFsbG9jKChpbnQpc3RybGVuKHMpICsgMSk7CisgICAgc3RyY3B5KG5ldyxzKTsKKyAgICByZXR1 cm4obmV3KTsKK30KKworLyoKKyAqIGVudGVyIHN0YXRlIG5hbWUgaW50byB0aGUgaGFzaCB0YWJs ZQorICoKKyAqLworVk9JRAorZW50ZXIobmFtZSxzdmFsdWUpIGNoYXIgKm5hbWU7IGludCBzdmFs dWU7IHsKKyAgICBpbnQgaDsKKyAgICBzdHJ1Y3Qgc3ltICpjdXI7CisgICAgaWYgKGxrdXAobmFt ZSkgIT0gLTEpIHsKKwlmcHJpbnRmKHN0ZGVyciwic3RhdGUgXCIlc1wiIGFwcGVhcnMgdHdpY2Uu Li5cbiIsIG5hbWUpOworCWV4aXQoQkFEX0VYSVQpOworICAgIH0KKyAgICBoID0gaGFzaChuYW1l KTsKKyAgICBjdXIgPSAoc3RydWN0IHN5bSAqKW1hbGxvYyhzaXplb2YgKHN0cnVjdCBzeW0pKTsK KyAgICBjdXItPm5hbWUgPSBjb3B5KG5hbWUpOworICAgIGN1ci0+dmFsID0gc3ZhbHVlOworICAg IGN1ci0+aG54dCA9IGh0YWJbaF07CisgICAgaHRhYltoXSA9IGN1cjsKK30KKworLyoKKyAqIGZp bmQgbmFtZSBpbiB0aGUgc3ltYm9sIHRhYmxlLCByZXR1cm4gaXRzIHZhbHVlLiAgUmV0dXJucyAt MQorICogaWYgbm90IGZvdW5kLgorICoKKyAqLworaW50Citsa3VwKG5hbWUpIGNoYXIgKm5hbWU7 IHsKKyAgICBzdHJ1Y3Qgc3ltICpjdXI7CisgICAgZm9yIChjdXIgPSBodGFiW2hhc2gobmFtZSld OyBjdXIgIT0gTlVMTDsgY3VyID0gY3VyLT5obnh0KQorICAgICAgaWYgKHN0cmNtcChjdXItPm5h bWUsbmFtZSkgPT0gMCkgcmV0dXJuKGN1ci0+dmFsKTsKKyAgICByZXR1cm4oLTEpOworfQoKZGlm ZiAtLWdpdCBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvbWFrZWZpbGUg Yi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL21ha2VmaWxlCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllZmUyNjIKLS0tIC9kZXYvbnVsbAorKysgYi9j a2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL21ha2VmaWxlCkBAIC0wLDAgKzEs ODYyNiBAQAorIyBtYWtlZmlsZSAvIE1ha2VmaWxlIC8gY2t1a2VyLm1hayAvIENLVUtFUi5NQUsK KyMKKyMgU3VuIEF1ZyAyMSAxMDozMzowOCAyMDExCitCVUlMRElEPTIwMTEwODIxCitDS1ZFUj0g IjkuMC4zMDIiCisjCisjIC0tIE1ha2VmaWxlIHRvIGJ1aWxkIEMtS2VybWl0IGZvciBVTklYIGFu ZCBVTklYLWxpa2UgcGxhdGZvcm1zIC0tCisjCisjIENvcHlyaWdodCAoQykgMTk4NSwgMjAxMSwK KyMgICBUcnVzdGVlcyBvZiBDb2x1bWJpYSBVbml2ZXJzaXR5IGluIHRoZSBDaXR5IG9mIE5ldyBZ b3JrLgorIyAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBTZWUgdGhlIEMtS2VybWl0IENPUFlJTkcu VFhUIGZpbGUgb3IgdGhlCisjICAgY29weXJpZ2h0IHRleHQgaW4gdGhlIGNrY21haS5jIG1vZHVs ZSBmb3IgZGlzY2xhaW1lciBhbmQgcGVybWlzc2lvbnMuCisjICAgSW4gY2FzZSB5b3UgY2FuJ3Qg ZmluZCB0aGUgQ09QWUlORy5UWFQgZmlsZSwgaXQgY29udGFpbnMgdGhlIAorIyAgIFNpbXBsaWZp ZWQgMy1DbGF1c2UgQlNEIExpY2Vuc2UsIHdoaWNoIGlzIGFuIE9wZW4gU291cmNlIGxpY2Vuc2Uu CisjCisjIEF1dGhvcjogRnJhbmsgZGEgQ3J1eiwgQ29sdW1iaWEgVW5pdmVyc2l0eQorIyA2MTIg V2VzdCAxMTV0aCBTdHJlZXQsIE5ldyBZb3JrIE5ZIDEwMDI1LTc3OTksIFVTQQorIyBFbWFpbDog ZmRjQGNvbHVtYmlhLmVkdQorIyBXZWI6ICAgaHR0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUvCisj IEZUUDogICBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC8KKyMKKyMgTm90ZTogQXV0 aG9yIGlzIG5vIGxvbmdlciBhdCBDb2x1bWJpYSBVbml2ZXJzaXR5IG9yIGF0IHRoZSAxMTV0aCBT dHJlZXQKKyMgYWRkcmVzcyBlZmZlY3RpdmUgMSBKdWx5IDIwMTEuICBUaGUgZW1haWwgYWRkcmVz cyBzaG91bGQgc3RpbGwgd29yaywKKyMgYXMgd2VsbCBhcyB0aGUgd2Vic2l0ZSBhbmQgRlRQIGFk ZHJlc3NlcywgZm9yIHRoZSBmb3Jlc2VlYWJsZSBmdXR1cmUuCisjIEZvciBuZXcgZGV2ZWxvcG1l bnRzLCBhbHNvIGNoZWNrOgorIworIyAgICBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9+ZmRjL2tl cm1pdC8KKyMKKyMgQ29udHJpYnV0aW9ucyBmcm9tIG1hbnkgb3RoZXJzLiAgU3BlY2lhbCB0aGFu a3MgdG8gSmVmZiBBbHRtYW4gZm9yIHRoZQorIyBzZWN1cmUtYnVpbGQgdGFyZ2V0cywgUGV0ZXIg RWljaGhvcm4sIGFzc3lzdCBHbWJILCBmb3IgdGhlIGNvbnNvbGlkYXRlZAorIyBIUC1VWCB0YXJn ZXRzIGFuZCB0aGUgInVuaW5zdGFsbCIgdGFyZ2V0LCB0byBSb2JlcnQgTGlwZSBmb3IgdGhlIHVw ZGF0ZWQKKyMgYW5kIGNvbnNvbGlkYXRlZCBTQ08gVU5JWCAvIE9EVCAvIE9TUjUgdGFyZ2V0cywg dG8gUmljIEFuZGVyc29uIGZvciB0aGUKKyMgSVJJWCA2LnggdGFyZ2V0cywgdG8gU2V0aCBUaGVy aWF1bHQgZm9yIG1ham9yIGltcHJvdmVtZW50cyB0byB0aGUKKyMgTWFjIE9TIFggdGFyZ2V0cywg YW5kIHRvIEFsZXhleSBEb2t1Y2hhZXYgZm9yIEZyZWVCU0QgOS4wLgorIworIyBDLUtlcm1pdCBp cyB3cml0dGVuIGFuZCBwcm9kdWNlZCBieSBoYW5kIHdpdGhvdXQgYW55IGF1dG9tYXRlZCBwcm9j ZWR1cmVzCisjIHN1Y2ggYXMgYXV0b2NvbmYgLyBhdXRvbWFrZSAvIGNvbmZpZ3VyZSwgYWx0aG91 Z2ggc29tZSBvZiB0aGUgdGFyZ2V0cyBiZWxvdworIyAoZXNwZWNpYWxseSB0aGUgbGludXggdGFy Z2V0KSBpbnNwZWN0IHRoZSBlbnZpcm9ubWVudCBhbmQgbWFrZSBzb21lCisjIGRlY2lzaW9ucyBp biB0aGUgbW9zdCBwb3J0YWJsZSB3YXkgcG9zc2libGUuIFRoZSBhdXRvbWF0ZWQgdG9vbHMgYXJl IG5vdAorIyB1c2VkIGJlY2F1c2UgKGEpIEMtS2VybWl0IHByZWRhdGVzIHRoZW0sIGFuZCAoYikg dGhleSBhcmUgbm90IHBvcnRhYmxlIHRvCisjIGFsbCB0aGUgcGxhdGZvcm1zIHdoZXJlIEMtS2Vy bWl0IG11c3QgYmUgKG9yIG9uY2Ugd2FzKSBidWlsdCwgYW5kIChjKSB0bworIyBrZWVwIEMtS2Vy bWl0IGFzIGluZGVwZW5kZW50IGFzIHBvc3NpYmxlIGZyb20gZXh0ZXJuYWwgdG9vbHMgb3ZlciB3 aGljaAorIyB3ZSBoYXZlIG5vIGNvbnRyb2wuCisjCisjIE1vc3QgZW50cmllcyB1c2UgdGhlICJ4 ZXJtaXQiIHRhcmdldCwgd2hpY2ggdXNlcyB0aGUgc2VsZWN0KCktYmFzZWQgQ09OTkVDVAorIyBt b2R1bGUsIGNrdWNucy5jLiAgVGhlICJ3ZXJtaXQiIHRhcmdldCB1c2VzIHRoZSBvcmlnaW5hbCBm b3JrKCktYmFzZWQgQ09OTkVDVAorIyBtb2R1bGUsIGNrdWNvbi5jLCB3aGljaCBoYXMgc29tZSBk cmF3YmFja3MgYnV0IHdhcyBwb3J0YWJsZSB0byBldmVyeSBVbml4CisjIHZhcmlhbnQgd2hldGhl ciBpdCBoYWQgVENQL0lQIG9yIG5vdCAoc2VsZWN0KCkgaXMgcGFydCBvZiB0aGUgVENQL0lQCisj IGxpYnJhcnksIHdoaWNoIHdhcyBub3Qgc3RhbmRhcmQgb24gb2xkZXIgVW5peGVzKS4gIElmIHlv dXIgdGFyZ2V0IHN0aWxsIHVzZXMKKyMgdGhlICJ3ZXJtaXQiIHRhcmdldCwgcGxlYXNlIHRyeSBz dWJzdGl0dXRpbmcgdGhlICJ4ZXJtaXQiIG9uZSBhbmQgaWYgaXQKKyMgd29ya3MsIGxldCB1cyBr bm93IChtYWlsdG86a2VybWl0LXN1cHBvcnRAY29sdW1iaWEuZWR1KS4gIFdoZW4gY2hhbmdpbmcg YQorIyB0YXJnZXQgb3ZlciBmcm9tIHdlcm1pdCB0byB4ZXJtaXQsIGFsc28gcmVtb3ZlIC1ETk9M T0VBUk4uCisjCisjIENBUkVGVUw6IERvbid0IHB1dCB0aGUgbG93ZXJjYXNlIHdvcmQgImlmIiwg ImRlZmluZSIsIG9yICJlbmQiIGFzIHRoZSBmaXJzdAorIyB3b3JkIGFmdGVyIHRoZSAiIyIgY29t bWVudCBpbnRyb2R1Y2VyIGluIHRoZSBtYWtlZmlsZSwgZXZlbiBpZiBpdCBpcworIyBzZXBhcmF0 ZWQgYnkgd2hpdGVzcGFjZS4gIFNvbWUgdmVyc2lvbnMgb2YgIm1ha2UiIHVuZGVyc3RhbmQgdGhl c2UgYXMKKyMgZGlyZWN0aXZlcy4gIFVwcGVyY2FzZSBsZXR0ZXJzIHJlbW92ZSB0aGUgZGFuZ2Vy LCBlLmcuICIjIElmIHlvdSBoYXZlLi4uIgorIyAKKyMgV0FSTklORzogVGhpcyBpcyBhIGh1Z2Ug bWFrZWZpbGUuICBBbHRob3VnaCB0aGlzIGlzIGxlc3MgbGlrZWx5IHNpbmNlIHRoZQorIyB0dXJu IG9mIHRoZSBjZW50dXJ5LCBzb21lICJtYWtlIiBwcm9ncmFtcyBtaWdodCBydW4gb3V0IG9mIG1l bW9yeS4gIElmIHRoaXMKKyMgaGFwcGVucyB0byB5b3UsIGVkaXQgYXdheSB0aGUgcGFydHMgdGhh dCBkbyBub3QgYXBwbHkgdG8geW91ciBwbGF0Zm9ybSBhbmQKKyMgdHJ5IGFnYWluLgorIworIyBX QVJOSU5HIDI6IEluIG1hbnkgY2FzZXMgdGhpcyBmaWxlIGludm9rZXMgaXRzZWxmIHJlY3Vyc2l2 ZWx5LCBzb21ldGltZXMKKyMgc2V2ZXJhbCBsZXZlbHMgZGVlcCAoYXMgaW4gdGhlIExpbnV4IHRh cmdldHMpOyBpLmUuIHNvbWUgdGFyZ2V0cyBhcmUgdXNlZAorIyBhcyAnc3Vicm91dGluZXMnIG9m IG90aGVyIHRhcmdldHMsIHdpdGggcGFyYW1ldGVycyBwYXNzZWQgYnkgc2V0dGluZworIyBlbnZp cm9ubWVudCB2YXJpYWJsZXMuICBGb3IgdGhhdCByZWFzb24sIGRvbid0IHVzZSAnbWFrZSAtZScu CisjCisjIENlcnRhaW4gVU5JWCB2YXJpYXRpb25zIGhhdmUgdGhlaXIgb3duIHNlcGFyYXRlIG1h a2VmaWxlczoKKyMgIC4gRm9yIDIuMTAgb3IgMi4xMSBCU0Qgb24gdGhlIERFQyBQRFAtMTEsIHVz ZSBja3ViczIubWFrLgorIyAgLiBGb3IgUGxhbiA5LCB1c2UgY2twa2VyLm1rLgorIworIyBTZXBh cmF0ZSBidWlsZCBwcm9jZWR1cmVzIGFyZSBwcm92aWRlZCBub24tVU5JWCBwbGF0Zm9ybXM6IFZN UywgVk9TLAorIyBBT1MvVlMsIGV0Yy4gIFNlZSB0aGUgY2thYWFhLnR4dCBmaWxlIG9yIHRoZSBL ZXJtaXQgd2Vic2l0ZSBmb3IgZGV0YWlscy4KKyMKKyMKKyMgRElSRUNUSU9OUyBGT1IgVU5JWAor IworIyBSZW5hbWUgdGhpcyBmaWxlIHRvICJtYWtlZmlsZSIgb3IgIk1ha2VmaWxlIiBpZiBuZWNl c3NhcnkuICBQaWNrIG91dCB0aGUKKyMgZW50cnkgbW9zdCBhcHByb3ByaWF0ZSBmb3IgeW91ciBV TklYIHZlcnNpb24gZnJvbSB0aGUgbGlzdCBiZWxvdyBhbmQgdGhlbgorIyBnaXZlIHRoZSBhcHBy b3ByaWF0ZSAibWFrZSIgY29tbWFuZCwgZm9yIGV4YW1wbGUgIm1ha2UgYWl4IiwgIm1ha2UgbWFj b3N4IiwKKyMgIm1ha2UgbGludXgiLiAgSWYgeW91IGV4cGVyaWVuY2UgYW55IGRpZmZpY3VsdGll cyB3aXRoIHRoZSBidWlsZCBwcm9jZWR1cmUsCisjIHRoZW4gcGxlYXNlIGFsc28gcmVhZCBhbnkg Y29tbWVudHMgdGhhdCBhY2NvbXBhbnkgdGhlIG1ha2UgZW50cnkgaXRzZWxmCisjIChzZWFyY2gg Zm9yIHRoZSBtYWtlIGVudHJ5IG5hbWUgb24gdGhlIGxlZnQgbWFyZ2luKS4KKyMKKyMgT3RoZXIg dGFyZ2V0czoKKyMgICdtYWtlIGluc3RhbGwnIGlzIGFuIGluc3RhbGxhdGlvbiBzY3JpcHQgKHJl YWQgYWNjb21wYW55aW5nIGNvbW1lbnRzISkuCisjICAnbWFrZSB1bmluc3RhbGwnIHVuZG9lcyAn bWFrZSBpbnN0YWxsJyAocmVhZCBhY2NvbXBhbnlpbmcgY29tbWVudHMhKS4KKyMgICdtYWtlIGNs ZWFuJyByZW1vdmVzIGludGVybWVkaWF0ZSBhbmQgb2JqZWN0IGZpbGVzLgorIyAgJ21ha2Ugc2hv dycgdGVsbHMgdGhlIGRlZmF1bHQgaW5jbHVkZSBhbmQgbGliIHBhdGhzIGZvciBzZWN1cmUgYnVp bGRzLgorIworIyBJTVBPUlRBTlQ6CisjICAgRm9yIG1vcmUgZGV0YWlsZWQgaW5zdGFsbGF0aW9u IGluc3RydWN0aW9ucywgcmVhZCB0aGUgZmlsZXMgY2t1aW5zLnR4dAorIyAgIGFuZCBja2NjZmcu dHh0LCBhbHNvIGF2YWlsYWJsZSBhdCB0aGUgS2VybWl0IHdlYnNpdGUgaW4gSFRNTCBmb3JtOgor IyAgIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbAorIyAgIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NjZmcuaHRtbAorIworIyAgRm9yIGRlc2NyaXB0 aW9ucyBvZiBrbm93biBwcm9ibGVtcyBhbmQgbGltaXRhdGlvbnMsCisjICAgcmVhZCB0aGUgZmls ZXMgY2tjYndyLnR4dCBhbmQgY2t1YndyLnR4dCAodGhlICJiZXdhcmUgZmlsZXMiKSBvcjoKKyMg ICBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjYndyLmh0bWwKKyMgICBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwKKyMKKyMgTW9zdCB0YXJnZXRzIGJ1 aWxkIEMtS2VybWl0IHdpdGggaXRzIHN5bWJvbCB0YWJsZSBpbmNsdWRlZC4gIFRvIHJlZHVjZSB0 aGUKKyMgc2l6ZSBvZiB0aGUgZXhlY3V0YWJsZSBwcm9ncmFtLCBhZGQgIkxOS0ZMQUdTPS1zIiB0 byB0aGUgZW5kIG9mIHlvdXIgJ21ha2UnCisjIGNvbW1hbmQgb3IgdG8gdGhlIG1ha2VmaWxlIGVu dHJ5LCBvciAnc3RyaXAnIHRoZSBleGVjdXRhYmxlIGFmdGVyCisjIGJ1aWxkaW5nLiAgVG8gZnVy dGhlciByZWR1Y2UgdGhlIHNpemUgYWZ0ZXIgYnVpbGRpbmcsIHVzZSAnbWNzIC1kJyBpZiB5b3Vy CisjIFVuaXggdmVyc2lvbiBoYXMgc3VjaCBhIGNvbW1hbmQuICBGb3IgZnVydGhlciBkZXRhaWxz IG9uIHNpemUgcmVkdWN0aW9uLCByZWFkCisjIGNrY2NmZy50eHQgdG8gZmluZCBvdXQgaG93IHRv IHJlbW92ZSBmZWF0dXJlcyB0aGF0IHlvdSBkb24ndCBuZWVkLgorIworIyBUQ1AvSVAgbmV0d29y a2luZyBzdXBwb3J0OiBJZiB5b3VyIEMtS2VybWl0IHZlcnNpb24gZG9lcyBub3QgaW5jbHVkZSBU Q1AvSVAKKyMgbmV0d29ya2luZywgYnV0IHlvdXIgVU5JWCBzeXN0ZW0gZG9lcywgdHJ5IGFkZGlu ZyAtRFRDUFNPQ0tFVCB0byB0aGUgQ0ZMQUdTCisjIG9mIHlvdXIgbWFrZWZpbGUgZW50cnkuICBJ ZiB0aGF0IGRvZXNuJ3Qgd29yaywgbG9vayBhdCBzb21lIG9mIHRoZSBvdGhlcgorIyB0YXJnZXRz IHRoYXQgaW5jbHVkZSB0aGlzIGZsYWcgZm9yIGlkZWFzIGFib3V0IHdoYXQgbGlicmFyaWVzIG1p Z2h0IG5lZWQgdG8KKyMgYmUgaW5jbHVkZWQgKHR5cGljYWxseSAtbHNvY2tldCBhbmQvb3IgLWxC U0QgYW5kL29yIC1sbnNsIGFuZC9vciAtbGluZXQpLgorIyBOT1RFOiBJbiBzb21lIGNhc2VzIChv bGQgdmVyc2lvbnMgb2YgU0NPIG9yIEhQLVVYKSwgeW91IG1pZ2h0IG5lZWQgbm90IG9ubHkKKyMg YSBDIGNvbXBpbGVyLCBidXQgYWxzbyBhICJUQ1AvSVAgZGV2ZWxvcGVycyBraXQiIGZvciB0aGUg cmVxdWlyZWQgb2JqZWN0CisjIGxpYnJhcmllcyBhbmQgaGVhZGVyIGZpbGVzLgorIworIyBQbGVh c2UgcmVwb3J0IG1vZGlmaWNhdGlvbnMsIGZhaWx1cmVzIChwcmVmZXJhYmx5IHdpdGggZml4ZXMp IG9yIHN1Y2Nlc3NlcworIyB0byB0aGUgYXV0aG9yLCBmZGNAY29sdW1iaWEuZWR1LgorIworIyBU QVJHRVRTIEZPUiBESUZGRVJFTlQgVU5JWCBQTEFURk9STVMgQU5EIFZFUlNJT05TOgorIworIyAr IE1hcmtzIHRob3NlIHRoYXQgaGF2ZSBiZWVuIGJ1aWx0IHN1Y2Nlc3NmdWxseSBmb3IgQy1LZXJt aXQgOS4wIG9yIGxhdGVyLgorIyAtIFRob3NlIHRoYXQgb25jZSBidWlsdCBPSyBidXQgbm8gbG9u Z2VyIGRvIChlLmcuIHRvbyBiaWcpLgorIyA/IFRob3NlIHRoYXQgd29ya2VkIGluIGEgcHJldmlv dXMgdmVyc2lvbiBidXQgaGF2ZSBub3QgYmVlbiB0ZXN0ZWQgcmVjZW50bHkuCisjIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisjIFNvbWUgY29tbW9ubHkgdXNlZCB0YXJnZXRzOgorIworIyAr ICJtYWtlIGxpbnV4IiBzaG91bGQgd29yayBmb3IgYW55IHZlcnNpb24gb2YgTGludXggb24gYW55 IGhhcmR3YXJlLgorIyArICJtYWtlIGxpbnV4K3NzbCIgZGl0dG8sIHdpdGggT3BlblNTTCBzZWN1 cml0eSBhZGRlZC4KKyMgKyAibWFrZSBsaW51eCtrcmI1IiBkaXR0bywgd2l0aCBLZXJiZXJvcyA1 IHNlY3VyaXR5IGFkZGVkLgorIyArICJtYWtlIGxpbnV4K2tyYjUrc3NsIiBMaW51eCB3aXRoIE9w ZW5TU0wgYW5kIEtlcmJlcm9zIDUuCisjICsgIm1ha2UgbmV0YnNkIiwgTmV0QlNELCBhbnkgdmVy c2lvbi4KKyMgKyAibWFrZSBuZXRic2Qrc3NsIiwgTmV0QlNEIHdpdGggT3BlblNTTCAwLjkuNyBv ciBsYXRlci4KKyMgKyAibWFrZSBuZXRic2Qra3JiNSIsIE5ldEJTRCB3aXRoIEtlcmJlcm9zIDUu CisjICsgIm1ha2UgbmV0YnNkK2tyYjUrc3NsIiwgTmV0QlNEIHdpdGggS2VyYmVyb3MgNSBhbmQg T3BlblNTTCAwLjkuNyBvciBsYXRlci4KKyMgPyAibWFrZSBmcmVlYnNkMSIgZm9yIEZyZWVCU0Qg MS54CisjID8gIm1ha2UgZnJlZWJzZDIiIGZvciBGcmVlQlNEIDIueAorIyArICJtYWtlIGZyZWVi c2QzIiBmb3IgRnJlZUJTRCAzLngKKyMgPyAibWFrZSBmcmVlYnNkNCIgZm9yIEZyZWVCU0QgNC4w CisjICsgIm1ha2UgZnJlZWJzZCIsIEZyZWVCU0QgNC4xIG9yIGxhdGVyLgorIyArICJtYWtlIGZy ZWVic2Qrc3NsIiwgRnJlZUJTRCA1LjAgb3IgbGF0ZXIgd2l0aCBPcGVuU1NMIDAuOS43IG9yIGxh dGVyLgorIyArICJtYWtlIG9wZW5ic2QiLCBPcGVuQlNEIDIuMyBvciBsYXRlci4KKyMgKyAibWFr ZSBvcGVuYnNkK3NzbCIsIE9wZW5CU0QgMi4zIG9yIGxhdGVyIHdpdGggT3BlblNTTCAwLjkuNyBv ciBsYXRlci4KKyMgKyAibWFrZSBtaXJic2QiLCBNaXJCU0QuCisjICsgIm1ha2UgbWlyYnNkK3Nz bCIsIE1pckJTRCB3aXRoIE9wZW5TU0wgMC45Ljcgb3IgbGF0ZXIuCisjICsgIm1ha2UgbWFjb3N4 IiBzaG91bGQgd29yayBmb3IgYW55IE1hYyBPUyBYIHZlcnNpb24gMTAuMy45IG9yIGxhdGVyLgor IyArICJtYWtlIG1hY29zeCtrcmI1K29wZW5zc2wiIE1hYyBPUyBYIDEwLjMuOSBvciBsYXRlciAr IEtlcmJlcm9zIFYgKyBPcGVuU1NMLgorIyArICJtYWtlIGFpeCIgc2hvdWxkIHdvcmsgZm9yIGFu eSB2ZXJzaW9uIG9mIEFJWCA0LjIgb3IgbGF0ZXIuCisjICsgIm1ha2UgYWl4ZyIgc2hvdWxkIHdv cmsgZm9yIGFueSB2ZXJzaW9uIG9mIEFJWCA0LjIgb3IgbGF0ZXIsIHVzaW5nIGdjYy4KKyMgKyAi bWFrZSBhaXgrc3NsIiBkaXR0bywgd2l0aCBPcGVuU1NMIChzcGVjaWZ5aW5nIFNTTExJQiBhbmQg U1NMSU5DKQorIyArICJtYWtlIGFpeCtpYm1zc2wiIGRpdHRvLCB3aXRoIElCTSBPcGVuU1NMCisj ICsgIm1ha2Ugc29sYXJpczkiLCAibWFrZSBzb2xhcmlzMTAiIGZvciBTb2xhcmlzIDkgb3IgMTAg d2l0aCBTdW4gY2MuCisjICsgIm1ha2Ugc29sYXJpczlnIiwgIm1ha2Ugc29sYXJpczEwZyIgZm9y IFNvbGFyaXMgOSBvciAxMCB3aXRoIGdjYy4KKyMgKyAibWFrZSBzb2xhcmlzMTEiIGZvciBTb2xh cmlzIDExIHdpdGggU3VuIENDCisjICsgIm1ha2Ugc29sYXJpczExZyIgZm9yIFNvbGFyaXMgMTEg d2l0aCBnY2MKKyMgKyAibWFrZSBzY29fb3NyNjAwIiBmb3IgU0NPIE9wZW5TZXJ2ZXIgNi4wLjAu CisjCisjIEZvciBvdGhlciBjdXJyZW50IE9TcyBzdWNoIGFzIFNvbGFyaXMsIEhQLVVYLCBhbmQg U0NPIHRoZXJlIGFyZSBzZXBhcmF0ZQorIyB0YXJnZXRzIGZvciBkaWZmZXJlbnQgY29tYmluYXRp b25zIG9mIE9TIHZlcnNpb24gYW5kIGNvbXBpbGVyOyBzZWUgdGhlCisjIGNvbXBsZXRlIGxpc3Qu ICBGb3Igb2xkZXIgT1MncyBzZWUgdGhlIGNvbXBsZXRlIGxpc3QuICBJZiBhbiBvbGQgdGFyZ2V0 CisjIGRvZXNuJ3Qgd29yayBpbiB0aGlzIHJlbGVhc2Ugb2YgQy1LZXJtaXQgeW91IGNhbiBnZXQg YSBwcmV2aW91cyByZWxlYXNlIGZyb20KKyMgdGhlIEtlcm1pdCBGVFAgc2l0ZTogZnRwOi8va2Vy bWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvCisjCisjIFNFQ1VSRSBUQVJHRVRTICh2ZXJzaW9ucyB0 aGF0IHN1cHBvcnQgYXV0aGVudGljYXRpb24gYW5kIGVuY3J5cHRpb24pCisjICBhcmUgZGVzY3Jp YmVkIGFmdGVyIHRoZSBmb2xsb3dpbmcgbGlzdC4gIFNlYXJjaCBmb3IgKioqKioqKiBiZWxvdy4K KyMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29tcGxldGUgbGlzdCAoYWxwaGFi ZXRpY2FsKToKKyMgPyBmb3IgMzg2QlNEIChKb2xpeCkgMC4wLCAwLjEsICJtYWtlIDM4NmJzZCIg KHNlZSBjb21tZW50cyBpbiBlbnRyeSksCisjICAgICBvciAocHJlZmVyYWJseSwgaWYgaXQgd29y a3MpICJtYWtlIGJzZDQ0IiBvciAibWFrZSBic2Q0NGMiLgorIyA/IGZvciBBY29ybiBSSVNDaVgs ICJtYWtlIHJpc2NpeCIgb3IgIm1ha2UgcmlzY2l4LWdjYyIKKyMgPyBmb3IgQWxsaWFudCBGWC84 IHdpdGggQ29uY2VudHJpeCA0LjEgb3IgbGF0ZXIsICJtYWtlIGJzZGxjayIKKyMgPyBmb3IgQWx0 b3MgNDg2LCA1ODYsIDk4NiB3aXRoIFhlbml4IDMuMCwgIm1ha2UgYWx0b3MiCisjID8gZm9yIEFs dG9zIEFDUzY4MDAwLCA4TWh6IDY4MDAwLCBVTklYIFN5c3RlbSAzIFJlbCAyLCA1MTJLLCAibWFr ZSBhbHRvczMiCisjID8gZm9yIEFtZGFobCBVVFMgMi40IG9uIElCTSAzNzAgc2VyaWVzICYgY29t cGF0aWJsZSBtYWluZnJhbWVzLCAibWFrZSB1dHMyNCIKKyMgPyBmb3IgQW1kYWhsIFVUU1YgSUJN IDM3MCBzZXJpZXMgJiBjb21wYXRpYmxlIG1haW5mcmFtZXMsICJtYWtlIHV0c3YiCisjID8gZm9y IEFtZGFobCBVVFNWIElCTSAzNzAgc2VyaWVzIG1haW5mcmFtZXMgd2l0aCBUQ1AvSVAsICJtYWtl IHV0c3Z0Y3AiCisjID8gZm9yIEFtZGFobCBtYWluZnJhbWVzIHdpdGggVU5JWCBTeXN0ZW0gViBS IDUuMi42YiA1ODAsICJtYWtlIHN5czMiCisjID8gZm9yIEFwb2xsbyBBZWdpcyA5LngsIERPTUFJ Ti9JWCA5LngsICJtYWtlIGFlZ2lzIgorIyAgICAoTGFzdCB0ZXN0ZWQgaW4gQy1LZXJtaXQgNUEo MTg5KSkKKyMgPyBmb3IgQXBvbGxvIERPTUFJTi9JWCwgaWYgdGhlIGFib3ZlIGZhaWxzLCB0cnkg Im1ha2UgYXBvbGxvYnNkIgorIyA/IGZvciBBcG9sbG8gd2l0aCBTUjEwLjAgb3IgbGF0ZXIsIEJT RCBlbnZpcm9ubWVudCwgIm1ha2Ugc3IxMC1ic2QiCisjID8gZm9yIEFwb2xsbyB3aXRoIFNSMTAu MCBvciBsYXRlciwgU3lzdGVtIFYgZW52aXJvbm1lbnQsICJtYWtlIHNyMTAtczVyMyIKKyMgPyBm b3IgQXBwbGUgTWFjaW50b3NoIElJIHdpdGggQS9VWCBwcmUtMy4wLCAibWFrZSBhdXgiLCAiYXV4 Z2NjIiBvciAiYXV4dWZzIgorIyA/IGZvciBBcHBsZSBNYWNpbnRvc2ggd2l0aCBBL1VYIDMuMCBh bmQgZ2NjLCAibWFrZSBhdXgzZ2NjIiBvciBhdXgzZ2NjYworIyA/IGZvciBBcHBsZSBQb3dlck1h YyB3aXRoIE1rTGludXgsICJtYWtlIG1rbGludXgiIChyZWFkIExpbnV4IGVudHJ5IGZpcnN0KQor IyA/IGZvciBBcHBsZSBQb3dlck1hYyB3aXRoIExpbnV4UFBDLCAibWFrZSBsaW51eHBwYyIKKyMg PyBmb3IgQXBwbGUgTWFjaW50b3NoIHdpdGggTWluaXggMS41LjEwLCAibWFrZSBtaW5peDY4ayIg b3IgIm1ha2UgbWluaXhjNjgiCisjID8gZm9yIEFwcGxlIE1hY2ludG9zaCB3aXRoIE1hYyBPUyBY IDEuMCAoUmhhcHNvZHkpLCAibWFrZSBtYWNvc3gxMCIKKyMgICAgIChubyBjdXJzZXMpLCAibWFr ZSBtYWNvc3gxMGMiIChjdXJzZXMpLCBvciAibWFrZSBtYWNvc3gxMG5jIiAobmN1cnNlcykuCisj ICAgICBPciAibWFrZSBtYWNvc3gxMG5jeCIgKG5jdXJzZXMgYnV0ICJtYWtlIG1hY29zeDEwbmMi IGRvZXNuJ3Qgd29yaykuCisjID8gZm9yIEFwcGxlIE1hY2ludG9zaCB3aXRoIE1hYyBPUyBYIDEw LjIsICJtYWtlIG1hY29zeDEwMm5jIiAobmN1cnNlcykuCisjID8gZm9yIEFwcGxlIE1hY2ludG9z aCB3aXRoIE1hYyBPUyBYIDEwLjMsICJtYWtlIG1hY29zeDEwMyIKKyMgPyBmb3IgQXBwbGUgTWFj aW50b3NoIHdpdGggTWFjIE9TIFggMTAuMy45IG9yIGxhdGVyLCAibWFrZSBtYWNvc3giCisjID8g Zm9yIEFyaXggU3lzdGVtIDkwIHdpdGggQVQmVCBTVlIzLCAibWFrZSBzeXM1cjNuYSIKKyMgLSBm b3IgQVQmVCA2MzAwIHdpdGggSU4vaXgsICJtYWtlIHN5czUiCisjIC0gZm9yIEFUJlQgNjMwMCBQ TFVTLCAibWFrZSBhdHQ2MzAwIiBvciAod2l0aCBubyBkZWJ1Z2dpbmcpICJtYWtlIGF0dDYzMDBu ZCIKKyMgPyBmb3IgQVQmVCA2Mzg2IFdHUyBVTklYIFBDLCAibWFrZSBzeXM1cjMiCisjID8gZm9y IEFUJlQgM0IyLCAzQjIwIHN5c3RlbXMsICJtYWtlIGF0dDNiMiIuCisjICAgZm9yIEFUJlQgM0Ix LCA3MzAwIFVOSVggUEMgKHNlZSBub3RlcyB3aXRoIHRoZSBlbnRyaWVzKToKKyMgICAgIEluIEMt S2VybWl0IDcuMCwgb25seSB0aGUgZ2NjIGVudHJpZXMgd29yazoKKyMgPyAgICJtYWtlIHN5czN1 cGNnIiwgIm1ha2Ugc3lzM3VwY2djIiwgIm1ha2UgYXR0MzUxZ20iCisjICAgIFRoZSBvdGhlcnMg ZmFpbCB3aXRoICJ0b28gbWFueSBkZWZpbmVzIiAodXN1YWxseSBpbiBja3V1c3IuaCk6CisjIC0g ICAibWFrZSBzeXMzdXBjIiwgIm1ha2Ugc3lzM3VwY29sZCIsICJtYWtlIHN5czN1cGNjIiwgIm1h a2Ugc3lzM3VwY3giLAorIyAgICAgICAibWFrZSBzeXMzdXBjbSIsICJtYWtlIGF0dDM1MW0iCisj ID8gZm9yIEFUJlQgU3lzdGVtIElJSS9TeXN0ZW0gViBSMiBvciBlYXJsaWVyLCAibWFrZSBzeXMz IiBvciAibWFrZSBzeXMzbmlkIgorIyA/IGZvciBBVCZUIFN5c3RlbSBJSUkvU3lzdGVtIFYgd2l0 aCBIb25leSBEYW5CZXIgVVVDUCwgIm1ha2Ugc3lzM2hkYiIKKyMgPyBmb3IgQVQmVCBTeXN0ZW0g ViBvbiBERUMgVkFYLCAibWFrZSBzeXMzIiBvciAibWFrZSBzeXM1cjMiCisjID8gZm9yIEFUJlQg U3lzdGVtIFYgUjMsIHVzZSAibWFrZSBzeXM1cjMiIG9yICJtYWtlIHN5czVyM2MiCisjID8gZm9y IEFUJlQgU3lzdGVtIFYvMzg2IFIzLjIgYnVpbHQgb24gSW50ZXJhY3RpdmUgNC4xLjEsICJtYWtl IHN5czVyMzJpcyIuCisjID8gZm9yIEFUJlQgU3lzdGVtIFYvMzg2IFIzMjAuMCBWZXJzeXNzIFN5 c3RlbXMsIHVzZSAibWFrZSBzeXM1cjMiCisjICAgICBvciAibWFrZSBzeXM1cjNjIi4KKyMgPyBm b3IgQVQmVCBTeXN0ZW0gViBSNCwgIm1ha2Ugc3lzNXI0IiwgIm1ha2Ugc3lzNXI0c3giLCBvciAi bWFrZSBzeXM1cjRueCIsCisjICAgICBvciBpZiB0aGUgQU5TSSBDIGZ1bmN0aW9uIHByb3RvdHlw aW5nIG1ha2VzIHRyb3VibGUsIGFkZCAtRE5PQU5TSSwKKyMgICAgIGFzIGluICJzeXM1cjRzeG5h IiBlbnRyeQorIyA/IGZvciBBVCZUIChVU0wpIFN5c3RlbSBWIFI0LjIgdXNlIHRoZSBzeXM1cjQq IGVudHJpZXMuCisjID8gZm9yIEF0YXJpIEZhbGNvbiB3aXRoIE1pTlQsICJtYWtlIHBvc2l4Igor IyA/IGZvciBBdGFyaSBTVCB3aXRoIE1pbml4IFNUIDEuNS4xMC4zLCAibWFrZSBtaW5peDY4ayIg b3IgIm1ha2UgbWluaXhjNjgiCisjID8gZm9yIEJCTiBDLzcwIHdpdGggSU9TIDIuMCwgIm1ha2Ug YzcwIgorIyA/IGZvciBCZUJveCB3aXRoIEJlIE9TIDEueCBEUjcsICJtYWtlIGJlYm94ZHI3Igor IyAgICAgQ29tcGlsZXMgT0sgYnV0IGRvZXNuJ3QgbGluayB3aXRoIGRlZmF1bHQgbGlua2VyIHdo aWNoIGlzIGxpbWl0ZWQgdG8gNjRLLgorIyAgICAgTGlua3MgT0sgd2l0aCAiQ29kZSBXYXJyaW9y IEdvbGQiLiAgTWFueSBoYWNrcyBpbiB0aGUgc291cmNlIGNvZGUgbmVlZAorIyAgICAgdG8gYmUg cmVtb3ZlZCB3aGVuIERSOCBhbmQgbGF0ZXIgY29tZSBvdXQuCisjICAgICAoTGFzdCB0ZXN0ZWQg aW4gQy1LZXJtaXQgNi4wKQorIyAtIGZvciBCZUJveCB3aXRoIEJlIE9TIDEueCBEUjgsICJtYWtl IGJlYm94IgorIyAgICAgKE5lZWRlZCBmdW5jdGlvbnMgbWlzc2luZyBmcm9tIG9wZXJhdGluZyBz eXN0ZW0gYW5kL29yIG5vdCB3b3JraW5nLikKKyMgLSBmb3IgQmVsbCBMYWJzIFVOSVggVmVyc2lv biA2ICg2dGggRWRpdGlvbiksIHRoZXJlIGlzIG5vIG1ha2VmaWxlIGVudHJ5LgorIyA/IGZvciBC ZWxsIExhYnMgVU5JWCBWZXJzaW9uIDcgKDd0aCBFZGl0aW9uKSwgIm1ha2UgdjciIChidXQgc2Vl IG5vdGVzIGJlbG93KQorIyAgICAobGFzdCBidWlsdCBzdWNjZXNzZnVsbHkgaW4gQy1LZXJtaXQg NUExODgpCisjID8gZm9yIEJlbGwgTGFicyBSZXNlYXJjaCBVTklYIFZlcnNpb24gMTAsICJtYWtl IGJlbGx2MTAiCisjICAgIChsYXN0IGJ1aWx0IHN1Y2Nlc3NmdWxseSBpbiBDLUtlcm1pdCA2LjAp CisjID8gZm9yIEJlbGwgTGFicyAvIEx1Y2VudCBQbGFuIDksIHVzZSBzZXBhcmF0ZSBtYWtlZmls ZSBja3BrZXIubWs6CisjICAgIGNhbiBiZSBidWlsdCBmb3IgSW50ZWwsIE1JUFMsIDY4MHgwLCBh bmQgUG93ZXJQQyAobGFzdCBidWlsdCBDLUtlcm1pdCA3LjApCisjID8gZm9yIEJTREkgQlNELzM4 NiAxLngsICJtYWtlIGJzZGkiCisjID8gZm9yIEJTREkgQlNEL09TIDIueCwgIm1ha2UgYnNkaTIi CisjID8gZm9yIEJTREkgQlNEL09TIDMuMCBvciAzLjEsICJtYWtlIGJzZGkzIgorIyA/IGZvciBC U0RJIEJTRC9PUyA0LngsICJtYWtlIGJzZGk0IgorIyA/IGZvciBCU0RJIEJTRC9PUyA0LngsIHRv IGJ1aWxkIGEgYmluYXJ5IHRoYXQgYWxzbyB3b3JrcyBvbiBGcmVlQlNELAorIyAgICAgIm1ha2Ug YnNkaXgiLgorIyA/IGZvciBCZXJrZWxleSBVbml4IDIuNCwgIm1ha2UgdjciIChidXQgcmVhZCB2 NyBtYXRlcmlhbCBiZWxvdykKKyMgPyBmb3IgQmVya2VsZXkgVW5peCAyLjkgKERFQyBQRFAtMTEg b3IgUHJvLTN4eCksICJtYWtlIGJzZDI5IgorIyAtIGZvciBCZXJrZWxleSBVbml4IDIuMTAsIHVz ZSBja3ViczIubWFrIChhIHNlcGFyYXRlIG1ha2VmaWxlKQorIyAtIGZvciBCZXJrZWxleSBVbml4 IDIuMTEsIHVzZSBja3ViczIubWFrIChhIHNlcGFyYXRlIG1ha2VmaWxlKQorIyAgICAgVGhpcyBt YWtlZmlsZSBpcyB0b28gYmlnLiAgUmVhZCB0aGUgaW5zdHJ1Y3Rpb25zIGluIGNrdWJzMi5tYWsu CisjICAgICAibWFrZSAtZiBja3ViczIubWFrIGJzZDIxMCIgb3IgIm1ha2UgLWYgY2t1YnMyLm1h ayBic2QyMTEiLgorIyAgICAgKGxhc3QgYnVpbHQgc3VjY2Vzc2Z1bGx5IGluIEMtS2VybWl0IDYu MCAtIGxhdGVyIHZlcnNpb25zIHRvbyBiaWcpCisjID8gZm9yIEJlcmtlbGV5IFVuaXggMi4xMSAi bWFrZSAtZiBja3ViczIubWFrIGJzZDIxMG5vaWNwIiAobm8gY29tbWFuZCBwYXJzZXIpCisjID8g Zm9yIEJlcmtlbGV5IFVuaXggNC4xLCAibWFrZSBic2Q0MSIKKyMgPyBmb3IgQmVya2VsZXkgVW5p eCA0LjIgb24gVkFYLCAibWFrZSBic2Q0MiIgb3IgIm1ha2UgYnNkNDJjIgorIyA/IGZvciBCZXJr ZWxleSBVbml4IDQuMiBvciA0LjMgd2l0aCBIb25leURhbkJlciBVVUNQLCAibWFrZSBic2RoZGIi CisjID8gZm9yIEJlcmtlbGV5IFVuaXggNC4zIG9uIFZBWCwgIm1ha2UgYnNkNDMiLCAibWFrZSBi c2Q0M25jIi4KKyMgPyBmb3IgQmVya2VsZXkgVW5peCA0LjMgb24gVkFYLCBubyBuZXR3b3JraW5n ICJtYWtlIGJzZDQzbm9uZXQuCisjID8gZm9yIEJlcmtlbGV5IFVuaXggNC4zIHdpdGhvdXQgYWN1 Y250cmwgcHJvZ3JhbSwgIm1ha2UgYnNkNDIiIG9yICJic2Q0MmMiCisjICAgICBOT1RFOiBhbGwg dGhlIEMtS2VybWl0IDcuMCBmdWxsIGJ1aWxkcyBmb3Igb2xkIEJTRHMgZmFpbCB3aXRoCisjICAg ICAidG9vIG1hbnkgZGVmaW5lcyIgaW4gQ1BQLCBldmVuIG9uIGJpZyBhcmNoaXRlY3R1cmVzIGxp a2UgVkFYLiAgVGhpcworIyAgICAgY2FuIGJlIHdvcmtlZCBhcm91bmQgd2l0aCBhIGNsZXZlciBy dXNlLiAgU2VlIGNvbW1lbnRzIGF0IHRhcmdldC4KKyMgPyBmb3IgQmVya2VsZXkgVW5peCA0LjMs IGNvbW1hbmQtbGluZSBvbmx5LCAibWFrZSBic2RtIi4KKyMgPyBmb3IgQmVya2VsZXkgVW5peCA0 LjMtVGFob2UsIHNhbWUgYXMgNC4zIEJTRAorIyA/IGZvciBCZXJrZWxleSBVbml4IDQuMy1SZW5v LCAibWFrZSBic2Q0MyIgb3IgIm1ha2UgYnNkNDQiIG9yICJtYWtlIGJzZDQ0YyIKKyMgPyBmb3Ig QmVya2VsZXkgVW5peCA0LjMtQ2Fyc29uIENpdHksICJtYWtlIGJzZDQ0IiBvciAibWFrZSBic2Q0 NGMiCisjID8gZm9yIEJlcmtlbGV5IFVuaXggNC40LU5ldHdvcmtpbmcvMiBvciAtQWxwaGEsICJt YWtlIGJzZDQ0IiBvciAibWFrZSBic2Q0NGMiCisjID8gZm9yIEJlcmtlbGV5IFVuaXggNC40LCAi bWFrZSBic2Q0NCIgb3IgIm1ha2UgYnNkNDRjIgorIyA/IGZvciBCZXJrZWxleSBVbml4IDQuNC1M aXRlLCAibWFrZSBic2Q0NCIgb3IgIm1ha2UgYnNkNDRjIgorIyA/IGZvciBCdWxsIERQWC8yIHdp dGggQk9TL1gsICJtYWtlIGJ1bGxkcHgyIgorIyA/IGZvciBDYWRtdXMsICJtYWtlIHN5czMiCisj ICAgZm9yIENhbGRlcmEsIHNlZSBTQ08sIExpbnV4LgorIyA/IGZvciBDYWxsYW4gVW5pc3Rhciwg Im1ha2Ugc3lzMyIKKyMgPyBmb3IgQ0RDIFZYL1ZFIDUuMi4xIFN5c3RlbSBWIGVtdWxhdGlvbiwg Im1ha2Ugdnh2ZSIKKyMgPyBmb3IgQ2hhcmxlcyBSaXZlciBEYXRhIFN5c3RlbXMgVW5pdmVyc2Ug NjgweDAgd2l0aCBVTk9TIDkuMiwgbWF5YmUKKyMgICAgIGFsc28gb3RoZXIgVU5PUyB2ZXJzaW9u cywgIm1ha2UgY3JkcyIKKyMgPyBmb3IgQ0lFIFN5c3RlbXMgNjgwLzIwIHdpdGggUmVndWx1cywg Im1ha2UgY2llIgorIyA/IGZvciBDb21tb2RvcmUgQW1pZ2EgMzAwMFVYIFN5cyBWIFI0LCAibWFr ZSBzeXM1cjRzeCIKKyMgPyBmb3IgQ29tbW9kb3JlIEFtaWdhIDMwMDBVWCBTeXMgViBSNCBhbmQg VENQL0lQLCAibWFrZSBzdnI0YW1pZ2FuZXQiCisjID8gZm9yIENvbW1vZG9yZSBBbWlnYSB3aXRo IE1pbml4IDEuNS4xMCwgIm1ha2UgbWluaXg2OGsiIG9mICJtYWtlIG1pbml4YzY4IgorIyA/IGZv ciBDb25jdXJyZW50L01hc3Njb21wIHdpdGggUlRVIDQuMCBvciBsYXRlciwgQlNEIGVudmlyb25t ZW50LCAibWFrZQorIyAgICAgcnR1YnNkIiwgIm1ha2UgcnR1YnNkMiIsICJtYWtlIHJ0dWJzZDMi IChkZXBlbmRpbmcgb24gd2hlcmUgbmRpci5oCisjICAgICBpcyBzdG9yZWQsIHNlZSBlbnRyaWVz IGJlbG93KS4KKyMgPyBmb3IgQ29uY3VycmVudC9NYXNzY29tcCB3aXRoIFJUVSA0LjAgb3IgbGF0 ZXIsIFN5c3RlbSBWIFIyLCAibWFrZSBydHVzNSIKKyMgPyBmb3IgQ29uY3VycmVudCAoUGVya2lu LUVsbWVyKSAzMjAwIHNlcmllcywgIm1ha2Ugc3lzNSIuCisjID8gZm9yIENvbmN1cnJlbnQgKFBl cmtpbi1FbG1lcikgMzIwMCBzZXJpZXMgd2l0aCA8ZGlyZW50Lmg+LCAibWFrZSBjY29wMSIKKyMg PyBmb3IgQ29uY3VycmVudCBQb3dlck1BWCBPUyBTVlI0LCAibWFrZSBwb3dlcm1heCIKKyMgPyBm b3IgQ29uc2Vuc3lzIFVOSVggU1YvMzg2IFI0VjMsICJtYWtlIHN5czVyNHN4dGNwYyIgb3IgIm1h a2Ugc3lzNXI0c3giCisjID8gZm9yIENvbnZlcmdlbnQgd2l0aCBDVElYIFN5cyBWIFIyLCAibWFr ZSBzeXM1IgorIyA/IGZvciBDb252ZXJnZW50IHdpdGggQ1RJWCA2LjQuMSwgIm1ha2UgY3RpeCIK KyMgPyBmb3IgQ29udmV4IEMxLCAibWFrZSBjb252ZXgiCisjID8gZm9yIENvbnZleCBDMjEwIHdp dGggQ29udmV4L09TIDgsICJtYWtlIGNvbnZleDgiCisjID8gZm9yIENvbnZleCBDMiB3aXRoIENv bnZleC9PUyA5LjEsICJtYWtlIGNvbnZleDkiCisjID8gZm9yIENvbnZleCBDMiB3aXRoIENvbnZl eC9PUyAxMC4xIGFuZCBnY2MgMi54LCAibWFrZSBjb252ZXgxMGdjYyIKKyMgPyBmb3IgQ3JheSBS ZXNlYXJjaCBYL01QIG9yIFlNUCBvciBDOTAgd2l0aCBVTklDT1MgNi54IChTeXN0ZW0gViBSMyks CisjCSJtYWtlIGNyYXkiCisjID8gZm9yIENyYXkgUmVzZWFyY2ggWC9NUCBvciBZTVAgb3IgQzkw IHdpdGggVU5JQ09TIDcueCAoU3lzdGVtIFYgUjQpLAorIwkibWFrZSBjcmF5IgorIyA/IGZvciBD cmF5IFJlc2VhcmNoIFgvTVAgb3IgWU1QIG9yIEM5MCB3aXRoIFVOSUNPUyA4LjAgQWxwaGEsICJt YWtlIGNyYXk4IgorIyA/IGZvciBDcmF5IFJlc2VhcmNoIFgvTVAgb3IgWS1NUCBvciBDOTAgd2l0 aCBVTklDT1MgOS4wLCAibWFrZSBjcmF5OSIKKyMgPyBmb3IgQ3JheSBDb21wdXRlciBDcmF5LTIg b3IgQ3JheTMgd2l0aCBDU09TLCAibWFrZSBjcmF5Y3NvcyIKKyMgPyBmb3IgQ3liZXIgOTEwIChT aWxpY29uLUdyYXBoaWNzIElyaXMpIHdpdGggSXJpeCAzLjMsICJpcml4MzMiCisjID8gZm9yIERh dGEgR2VuZXJhbCBBVmlpT04gd2l0aCBERy9VWCA1LjQgYmVmb3JlIFIzLjAwLCAibWFrZSBkZ3V4 NTQwIgorIyAgICAgb3IgIm1ha2UgZGd1eDU0MGMiIChjb21waWxlIGNrd2FydCBzZXBhcmF0ZWx5 IGlmIG5lY2Vzc2FyeSkKKyMgPyBmb3IgREcvVVggNS40IG9uIEFWaWlPTiBJbnRlbCBtb2RlbHMs ICJtYWtlIGRndXg1NDBpIiBvciBkZ3V4NTQwaWMuCisjID8gZm9yIERHL1VYIDUuNFI0LjExIG9u IEFWaWlPTiwgYWxsIG1vZGVscywgIm1ha2UgZGd1eDU0NDExIgorIyA/IGZvciBERy9VWCA1LjRS NC4yMCBvbiBBVmlpT04sIGFsbCBtb2RlbHMsICJtYWtlIGRndXg1NDQyMCIKKyMgPyBmb3IgRGF0 YSBHZW5lcmFsIEFWaWlPTiB3aXRoIERHL1VYIDQuM3ggdXNpbmcgU3lzIFYtaXNtcywgIm1ha2Ug ZGd1eDQzMCIKKyMgPyBmb3IgRGF0YSBHZW5lcmFsIEFWaWlPTiB3aXRoIERHL1VYIDQuM3ggdXNp bmcgQlNELWlzbXMsICJtYWtlIGRndXg0MzBic2QiCisjID8gZm9yIERhdGEgR2VuZXJhbCBBVmlp T04sIGVhcmxpZXIgVU5JWCB2ZXJzaW9ucywKKyMgICAgICJtYWtlIHN5czVyMyIgKG1heWJlIGNv bXBpbGUgY2t3YXJ0IHNlcGFyYXRlbHksIG9yICJ0b3VjaCBja2Nwcm8uYyIpCisjID8gZm9yIERh dGEgR2VuZXJhbCBNViBzeXN0ZW1zIHdpdGggREcvVVgsID8/PworIyA/IGZvciBEYXRhIEdlbmVy YWwgTVYgc3lzdGVtcyB3aXRoIE1WL1VYLCB1c2UgQU9TL1ZTIEMtS2VybWl0IChDS0RLRVIuTUFL KQorIyA/IGZvciBEYXRhIEdlbmVyYWwgTVYgc3lzdGVtcyB3aXRoIEFPUy9WUywgdXNlIENLREtF Ui5NQUsgKGxhc3QgPSBDLUsgNy4wKQorIyA/IGZvciBERUMgUERQLTExIHdpdGggQmVya2VsZXkg VU5JWCAyLngsIHNlZSBCZXJrZWxleSBVTklYIDIueC4KKyMgPyBmb3IgREVDIFBEUC0xMSB3aXRo IE1pbmktVU5JWCAoQmVsbCA2dGggRWRpdGlvbiBmb3IgUERQLTExIHdpdGggbm8gTU1VKSwKKyMg ICAgIHByb2JhYmx5IG5vIHdheSB0byBmaXQgQy1LZXJtaXQgd2l0aG91dCBJJkQgc3BhY2UuCisj ID8gZm9yIERFQyBQRFAtMTEgd2l0aCBVbHRyaXgtMTEgMy54LCA/Pz8gKHByb2JhYmx5IG5lZWRz IG92ZXJsYXlzKQorIyA/IGZvciBERUMgVkFYIHdpdGggVWx0cml4IDEueCAibWFrZSBic2QiCisj ID8gZm9yIERFQyBWQVggd2l0aCBVbHRyaXggMi54ICJtYWtlIHVsdHJpeDJ4IgorIyA/IGZvciBE RUMgVkFYIG9yIERFQ3N0YXRpb24gd2l0aCBVbHRyaXggMy4wLCAzLjEsICJtYWtlIHVsdHJpeDN4 IgorIyA/IGZvciBERUNzdGF0aW9uIG9yIFZBWCB3aXRoIFVsdHJpeCA0LjAgb3IgNC4xLCAibWFr ZSB1bHRyaXg0MCIKKyMgPyBmb3IgREVDc3RhdGlvbiBvciBWQVggd2l0aCBVbHRyaXggNC4yLCAi bWFrZSB1bHRyaXg0MiIgb3IgIm1ha2UgdWx0cml4NDJjIgorIyA/IGZvciBERUNzdGF0aW9uIG9y IFZBWCB3aXRoIFVsdHJpeCA0LngsIFBPU0lYIHdvcmxkLCAibWFrZSBwb3NpeCIKKyMgPyBmb3Ig REVDc3RhdGlvbiBvciBWQVggd2l0aCBVbHRyaXggNC4zLCAibWFrZSB1bHRyaXg0MyIuCisjID8g Zm9yIERFQ3N0YXRpb24gb3IgVkFYIHdpdGggVWx0cml4IDQuNCwgIm1ha2UgdWx0cml4NDQiLgor IyA/IGZvciBERUNzdGF0aW9uIDUwMDAvNTAsIC8xNTAgb3IgLzI2MCAoUjR4MDAgTUlQUyBDUFUp LCBVbHRyaXggNC4zQSBvciBsYXRlcgorIyAgICAgIm1ha2UgdWx0cml4NDMtbWlwczMiIG9yICJt YWtlIHVsdHJpeDQzYy1taXBzMyIKKyMgPyBmb3IgREVDc3RhdGlvbiAoTUlQUykgd2l0aCBCZXJr ZWxleSBTcHJpdGUsICJtYWtlIGJzZDQ0Ij8KKyMgPyBmb3IgREVDc3RhdGlvbiAoTUlQUykgd2l0 aCBPU0YvMSBWMS4wIHRvIDEuMywgIm1ha2UgZGVjLW9zZiIKKyMgPyBmb3IgREVDIEFscGhhIHdp dGggT1NGLzEgMS4wIHRvIDEuMywgIm1ha2UgZGVjLW9zZiIKKyMgPyBmb3IgREVDIFBDIDQ4NiB3 aXRoIE9TRi8xLCAibWFrZSBkZWMtb3NmIgorIyA/IGZvciBERUMgQWxwaGEgd2l0aCBPU0YvMSAy LngsICJtYWtlIGRlYy1vc2YyMCIKKyMgPyBmb3IgREVDIEFscGhhIHdpdGggT1NGLzEgMy4wLCAi bWFrZSBkZWMtb3NmMzAiCisjID8gZm9yIERFQyBBbHBoYSB3aXRoIERpZ2l0YWwgVU5JWCAzLjIs ICJtYWtlIGR1MzIiCisjID8gZm9yIERFQyBBbHBoYSB3aXRoIERpZ2l0YWwgVU5JWCA0LjAtNC4w RCwgIm1ha2UgZHU0MCIgb3IgIm1ha2UgZHU0MGdjYyIKKyMgPyBmb3IgREVDIEFscGhhIHdpdGgg RGlnaXRhbCBVTklYIDQuMEUgb3IgaGlnaGVyLCBzZWUgVHJ1NjQuCisjICsgZm9yIERFQyBBbHBo YSB3aXRoIGFueSB2ZXJzaW9uIG9mIERVIG9yIE9TRi8xLCAibWFrZSBkZWMtb3NmMSIKKyMgLSBm b3IgREVDIFByby0zNTAgd2l0aCBQcm8vVmVuaXggVjEueCwgIm1ha2UgcHJvdngxIiAodmVyc2lv biA1QSBpcyB0b28gYmlnKQorIyA/IGZvciBERUMgUHJvLTM4MCB3aXRoIFByby9WZW5peCBWMi4w IChTeXMgViksICJtYWtlIHN5czMiIG9yICJtYWtlIHN5czNuaWQiCisjID8gZm9yIERFQyBQcm8t MzgwIHdpdGggMi45LCAyLjEwLCBvciAyLjExIEJTRCwgIm1ha2UgYnNkMjkiIG9yICJtYWtlIGJz ZDIxMCIKKyMgICBmb3IgREVDIFBEUC0xMSB3aXRoIDIueEJTRCAodXNlIHNlcGFyYXRlIG1ha2Vm aWxlIGNrdWJzMi5tYWspCisjID8gZm9yIERlbGwgVU5JWCBJc3N1ZSAyLnggKD0gVVNMIFN5cyBW LzM4NiBSNC54ICsgZml4ZXMpLCAibWFrZSBkZWxsc3lzNXI0IgorIyAgICAgb3IgIm1ha2UgZGVs bHN5czVyNGMiIChsYXN0IHRlc3RlZCBpbiBDLUtlcm1pdCA1QSkuCisjID8gZm9yIERJQUIgRFM5 MCB3aXRoIEROSVggKGFueSB2ZXJzaW9uKSBjcmVhdGUgYW4gZW1wdHkgPHN5cy9maWxlLmg+IGlm CisjICAgICB0aGlzIGZpbGUgZG9lcyBub3QgYWxyZWFkeSBleGlzdCAob3IgYWRkIC1ETk9GSUxF SCB0byB0aGUgbWFrZSBlbnRyeSkuCisjID8gZm9yIERJQUIgRFM5MCB3aXRoIEROSVggNS4yIChT eXMgVi4yKSBvciBlYXJsaWVyLCAibWFrZSBkbml4IiwKKyMgICAgICJtYWtlIGRuaXhuZCIsIG9y ICh0byBhZGQgY3Vyc2VzIGFuZCBUQ1AvSVApICJtYWtlIGRuaXhuZXRjIiwKKyMgPyBmb3IgRElB QiBEUzkwIHdpdGggRE5JWCA1LjMgKFN5cyBWLjMpLCAibWFrZSBkbml4NXIzIgorIyA/IGZvciBE SUFCIERTOTAgd2l0aCBETklYIDUuMyAoU3lzIFYuMykgYW5kIFRDUC9JUCwgIm1ha2UgZG5peDVy M25ldCIKKyMgPyBmb3IgRElBQiBEUzkwIHdpdGggRE5JWCA1LjMgMi4yIChTeXMgVi4zKSwgQU5T SSBDLCAibWFrZSBkbml4NXIzYW5zaSIKKyMgICAgIG9yLCB0byBpbmNsdWRlIFRDUC9JUCwgIm1h a2UgZG5peDVyM2Fuc2luZXQiLAorIyAgICAgYnV0IHlvdSBoYXZlIHRvIGZpeCBhIGJ1ZyBpbiAv dXNyL2luY2x1ZGUvc3RkbGliLmggZmlyc3Q6CisjICAgICBjaGFuZ2UgImV4dGVybiB2b2lkIGZy ZWUoY2hhciAqc3RyKTsiIHRvICJleHRlcm4gdm9pZCBmcmVlKHZvaWQgKnN0cik7IgorIyA/IGZv ciBEb2xwaGluIFNlcnZlciBUZWNobm9sb2d5IFRyaXRvbiA4OC8xNyB3aXRoIFNWLzg4IFIzLjIs ICJtYWtlIHN2ODhyMzIiCisjID8gZm9yIEVuY29yZSBNdWx0aW1heCAzMTAsIDUxMCB3aXRoIFVt YXggNC4yLCAibWFrZSB1bWF4NDIiCisjID8gZm9yIEVuY29yZSBNdWx0aW1heCAzMTAsIDUxMCB3 aXRoIFVtYXggNC4zLCAibWFrZSB1bWF4NDMiCisjID8gZm9yIEVuY29yZSBNdWx0aW1heCAzMTAs IDUxMCB3aXRoIFVtYXggViAyLjIsIHVzZSBCZXJrZWxleSBjYywgIm1ha2UgYnNkIgorIyA/IGZv ciBFbmNvcmUgODhLIHdpdGggVW1heCBWIDUuMiwgIm1ha2UgZW5jb3JlODhrIgorIyA/IGZvciBF U0lYIFN5c3RlbSBWIFI0LjAuMyBvciA0LjA0IHdpdGggVENQL0lQIHN1cHBvcnQsICJtYWtlIGVz aXhyNCIKKyMgICAgIE5PVEU6IFlvdSBjYW4gYWxzbyBidWlsZCBvbiBVbml4d2FyZSAyLnggd2l0 aCAibWFrZSBlc2l4cjQiLCBhbmQgcnVuCisjICAgICBvbiBFU0lYLCBidXQgdGhlcmUgeW91IG11 c3QgZmlyc3Q6CisjICAgICAgIGxuIC91c3IvbGliL2xpYnNvY2tldC5zbyAvdXNyL2xpYi9saWJz b2NrZXQuc28uMQorIyAgICAgICBsbiAvdXNyL2xpYi9saWJuc2wuc28gL3Vzci9saWIvbGlibnNs LnNvLjEKKyMgICAgIChUaGlzIHdvcmtlZCBmb3IgQy1LZXJtaXQgNi4wIGJ1dCBkb2VzIG5vdCB3 b3JrIGZvciA3LjApCisjICAgICAoQnV0IHlvdSBjYW4gcHJvYmFibHkgc3RpbGwgYnVpbGQgYSBu b24tbmV0d29ya2luZyB2ZXJzaW9uIHRoaXMgd2F5KQorIyA/IGZvciBFdmVyZXggU1RFUCAzODYv MjUgUmV2IEcgd2l0aCBFU0lYIFN5cyBWIFIzLjJELCAibWFrZSBzeXM1cjMiCisjID8gZm9yIEZv cnR1bmUgMzI6MTYsIEZvcjpQcm8gMS44LCAibWFrZSBmdDE4IgorIyA/IGZvciBGb3J0dW5lIDMy OjE2LCBGb3I6UHJvIDIuMSwgIm1ha2UgZnQyMSIKKyMgPyBmb3IgRlBTIDUwMCB3aXRoIEZQWCA0 LjEsICJtYWRlIGJzZCIKKyMgPyBmb3IgRnJlZUJTRCAxLjAsICJtYWtlIGZyZWVic2QxIgorIyA/ IGZvciBGcmVlQlNEIDIueCwgIm1ha2UgZnJlZWJzZDIiIChuY3Vyc2VzKSBvciAibWFrZSBmcmVl YnNkMmMiIChjdXJzZXMpCisjID8gZm9yIEZyZWVCU0QgMy54LCAibWFrZSBmcmVlYnNkMyIgKG5j dXJzZXMpIG9yICJtYWtlIGZyZWVic2QzYyIgKGN1cnNlcykKKyMgPyBmb3IgRnJlZUJTRCA0LjAs ICJtYWtlIGZyZWVic2Q0MCIKKyMgPyBmb3IgRnJlZUJTRCA0LjEgb3IgbGF0ZXIsICJtYWtlIGZy ZWVic2QiCisjICsgTk9URTogSnVzdCB1c2UgIm1ha2UgZnJlZWJzZCIgZm9yIGFueSByZWFzb25h Ymx5IHJlY2VudCBGcmVlQlNEIHZlcnNpb24uCisjID8gZm9yIEhhcnJpcyBIQ1gtMjkwMCwgIm1h a2Ugc3lzNXIzIgorIyA/IGZvciBIYXJyaXMgTmlnaHQgSGF3ayA4OEsgb3IgNjhLIHdpdGggQ1gv VVggcHJlLTYuMSwgIm1ha2Ugc3lzNXIzIgorIyA/IGZvciBIYXJyaXMgTmlnaHQgSGF3ayA4OEsg b3IgNjhLIHdpdGggQ1gvVVggNi4xIG9yIGxhdGVyLCAibWFrZSBjeF91eCIKKyMgPyBmb3IgSGV1 cmlrb24sICJtYWtlIHN5czMiCisjID8gZm9yIEhQLTMwMDAsIE1QRS9peCwgIm1ha2UgcG9zaXgi PworIyA/IGZvciBIUC05MDAwIFNlcmllcyAzMDAgd2l0aCA0LjRCU0QsICJtYWtlIGJzZDQ0Igor CisjIE5PVEU6IE1vc3Qgb2YgdGhlIEhQLVVYIHRhcmdldHMgd2VyZSB0ZXN0ZWQgc3VjY2Vzc2Z1 bGx5IGluIDIwMTAuCisjIFZlcmlmaWNhdGlvbiBuZWVkZWQgZm9yIEMtS2VybWl0IDkuMCBCZXRh LjAxLi4uCisKKyMgPyBmb3IgSFAtOTAwMCBTZXJpZXMgNTAwLCBIUC1VWCA1LjIxIGFuZCBubyBu ZXR3b3JraW5nICJtYWtlIGhwdXgwNTAwIgorIyA/IGZvciBIUC05MDAwIFNlcmllcyA1MDAsIEhQ LVVYIDUuMjEgd2l0aCBXSU4vVENQIDEuMiAibWFrZSBocHV4MDUwMHdpbnRjcCIKKyMgPyBmb3Ig SFAtOTAwMCBTZXJpZXMsIEhQLVVYIDYuNSwgd2l0aG91dCBsb25nIGZpbGVuYW1lcywKKyMgICAg ICJtYWtlIGhwdXgwNjUwIiwgIm1ha2UgaHB1eDA2NTBjIiBvciAibWFrZSBocHV4MDY1MHRjcGMi CisjID8gZm9yIEhQLTkwMDAgU2VyaWVzLCBIUC1VWCA3LjAgb3IgbGF0ZXIgbm8gbG9uZyBmaWxl bmFtZXMsICJtYWtlIGhwdXgwNzAwc2YiCisjICAgICBvciAodG8gaW5jbHVkZSB0Y3AvaXAsIGN1 cnNlcywgZXRjKSAibWFrZSBocHV4MDcwMHNmdGNwYyIKKyMgPyBmb3IgSFAtOTAwMCBTZXJpZXMg d2l0aCBIUC1VWCA3LjAsIFRDUC9JUCxsb25nIGZpbGVuYW1lcywibWFrZSBocHV4MDcwMGxmbiIK KyMgPyBmb3IgSFAtOTAwMCAzMDAvNDAwIFNlcmllcyAoNjgweDApIHdpdGggSFAtVVggOC4wLCBU Q1AvSVAsICJtYWtlIGhwdXgwODAwIgorIyAgICAgIG9yICJtYWtlIGhwdXgwODAwYyIKKyMgPyBm b3IgSFAtOTAwMCA3MDAvODAwIFNlcmllcyAoUEEtUklTQyksIEhQLVVYIDguMCwgVENQL0lQLCAi bWFrZSBocHV4MDgwMHBhIgorIyAgICAgIG9yICJtYWtlIGhwdXgwODAwcGFjIgorIyA/IGZvciBI UC05MDAwIFNlcmllcyB3aXRoIEhQLVVYIDguMCwgbm8gVENQL0lQLCBsb25nIGZpbGVuYW1lcywK KyMgICAgICAibWFrZSBocHV4MDgwMG5vdGNwIgorIyA/IGZvciBIUC05MDAwIFNlcmllcywgSFAt VVggOS4wIC0gOS4xMCwgVENQL0lQLCBjdXJzZXMsIHJlc3RyaWN0ZWQgY29tcGlsZXIKKyMgICAg IChubyBvcHRpbWl6YXRpb24sIG5vIEFOU0kpLCBhbGwgbW9kZWxzLCAibWFrZSBocHV4MDkwMCIu ICBSZWFkIHRoZQorIyAgICAgaHB1eDA5MDAgZW50cnkgYmVsb3cgZm9yIG1vcmUgaW5mby4KKyMg PyBmb3IgSFAtOTAwMCA3MDAgYW5kIDgwMCBTZXJpZXMsIEhQLVVYIDkueCwgVENQL0lQLCBjdXJz ZXMsCisjICAgICBIUCBvcHRpbWl6aW5nIEFOU0kgQyBjb21waWxlciwgIm1ha2UgaHB1eDA5MDBv NzAwIi4KKyMgPyBmb3IgSFAtOTAwMCB3aXRoIE1vdG9yb2xhIENQVXMsIEhQLVVYIDkueCwgVENQ L0lQLCBjdXJzZXMsCisjICAgICBIUCBvcHRpbWl6aW5nIEFOU0kgQyBjb21waWxlciwgIm1ha2Ug aHB1eDA5MDBtb3QiLgorIyA/IGZvciBIUC05MDAwIG9uIG90aGVyIENQVXMsIEhQLVVYIDkueCwg VENQL0lQLCBjdXJzZXMsCisjICAgICBIUCBvcHRpbWl6aW5nIEFOU0kgQyBjb21waWxlciwgIm1h a2UgaHB1eDA5MDBvIi4KKyMgPyBmb3IgSFAtOTAwMCBzZXJpZXMsIEhQLVVYIDkueCwgVENQL0lQ LCBjdXJzZXMsIGdjYywgYWxsIG1vZGVscywKKyMgICAgICJtYWtlIGhwdXgwOTAwZ2NjIgorIyA/ IGZvciBIUC05MDAwIDcwMC84MDAgU2VyaWVzLCBIUC1VWCAxMC4wMCwxMC4wMSwxMC4xMCwxMC4y MCwxMC4zMCwgVENQL0lQLAorIyAgICAgY3Vyc2VzLCByZXN0cmljdGVkIGNvbXBpbGVyIChubyBv cHRpbWl6YXRpb24sIG5vIEFOU0kpICJtYWtlIGhwdXgxMDAwIi4KKyMgPyBmb3IgSFAtOTAwMCA3 MDAvODAwIFNlcmllcywgSFAtVVggMTAuMDAsMTAuMDEsMTAuMTAsMTAuMjAsMTAuMzAsIFRDUC9J UCwKKyMgICAgIGN1cnNlcywgSFAgQU5TSS9vcHRpbWl6aW5nIGNvbXBpbGVyICJtYWtlIGhwdXgx MDAwbyIgb3IgIm1ha2UgaHB1eDEwMDBvKyIKKyMgPyBmb3IgSFAtOTAwMCBIUC1VWCAxMC4wMCBv ciBsYXRlciB3aXRoIGdjYywgIm1ha2UgaHB1eDEwMDBnY2MiCisjID8gZm9yIFRydXN0ZWQgSFAt VVggMTAueHggIm1ha2UgaHB1eDEwMDB0IiwgIm1ha2UgaHB1eDEwMDB0byIsCisjICAgICBvciBt YWtlIGhwdXgxMDAwdG8rIgorIyA/IGZvciBIUC05MDAwIDcwMC84MDAgU2VyaWVzLCBIUC1VWCAx MS4wMCxUQ1AvSVAsY3Vyc2VzLCByZXN0cmljdGVkIGNvbXBpbGVyCisjICAgICAobm8gb3B0aW1p emF0aW9uLCBubyBBTlNJKSAibWFrZSBocHV4MTEwMCIuCisjID8gZm9yIEhQLTkwMDAgNzAwLzgw MCBTZXJpZXMsIEhQLVVYIDExLjAwLFRDUC9JUCxjdXJzZXMsIHJlc3RyaWN0ZWQgY29tcGlsZXIK KyMgICAgIEhQIEFOU0kvb3B0aW1pemluZyBjb21waWxlciAibWFrZSBocHV4MTEwMG8iIG9yICJt YWtlIGhwdXgxMTAwbysiCisjID8gZm9yIFRydXN0ZWQgSFAtVVggMTEueHggIm1ha2UgaHB1eDEx MDB0IiwgIm1ha2UgaHB1eDExMDB0byIsCisjICAgICBtYWtlIGhwdXgxMTAwdG8rIgorIyA/IGZv ciBIUC05MDAwIFBBLVJJU0MgbW9kZWxzIHdpdGggTmVYVFNURVAgMy4zLCAibWFrZSBuZXh0cXVh ZGZhdCIuCisjID8gZm9yIEhQLTkwMDAgUEEtUklTQyBtb2RlbHMgd2l0aCBPUEVOU1RFUC9NYWNo IDQuMSwgIm1ha2UgbmV4dHF1YWRmYXQiLgorIyA/IGZvciBJQk0gMzcwIFNlcmllcyB3aXRoIElY LzM3MCwgIm1ha2UgaXgzNzAiCisjID8gZm9yIElCTSAzNzAgU2VyaWVzIHdpdGggQUlYLzM3MCAx LjIsICJtYWtlIGFpeDM3MCIKKyMgPyBmb3IgSUJNIDM3MCBTZXJpZXMgd2l0aCBBSVgvMzcwIDMu MCwgIm1ha2UgYWl4MzcwIgorIyA/IGZvciBJQk0gMzcwIFNlcmllcyB3aXRoIEFJWC9FU0EgMi4x LCAibWFrZSBhaXhlc2EiCisjIC0gZm9yIElCTSBQQy9BVCAyODYgJiBjb21wYXRpYmxlcyB3aXRo IE1hcmsgV2lsbGlhbXMgQ29oZXJlbnQgT1MsCisjICAgICBjb21tYW5kLWxpbmUtb25seSB2ZXJz aW9uLCAibWFrZSBjb2hlcmVudCIgKHZlcnNpb24gNUEgJiBsYXRlciB0b28gYmlnKQorIyA/IGZv ciBJQk0gUEMgMzg2ICYgY29tcGF0aWJsZXMgd2l0aCBNYXJrIFdpbGxpYW1zIENvaGVyZW50IE9T LAorIyAgICAgbWluaW11bSBpbnRlcmFjdGl2ZSB2ZXJzaW9uLCAibWFrZSBjb2hlcmVudG1pIgor IyA/IGZvciBJQk0gUEMgMzg2ICYgY29tcGF0aWJsZXMgd2l0aCBNYXJrIFdpbGxpYW1zIENvaGVy ZW50IE9TLAorIyAgICAgZnVsbCBpbnRlcmFjdGl2ZSB2ZXJzaW9uLCBwcmlvciB0byB2NC4yLCAi bWFrZSBjb2hlcmVudG1heCIKKyMgPyBmb3IgSUJNIFBDIDM4NiAmIGNvbXBhdGlibGVzIHdpdGgg TWFyayBXaWxsaWFtcyBDb2hlcmVudCBPUyA0LjIsCisjICAgICAibWFrZSBjb2hlcmVudDQyIgor IyA/IGZvciBJQk0gUEMgMzg2ICYgY29tcGF0aWJsZXMgd2l0aCBMeW54T1MgMi4wIG9yIDIuMSwg Im1ha2UgbHlueDIxIgorIyA/IGZvciBJQk0gUEMgMzg2ICYgY29tcGF0aWJsZXMgd2l0aCBMeW54 T1MgMi4yLCAibWFrZSBseW54IgorIyAtIGZvciBJQk0gUEMvQVQgJiBjb21wYXRpYmxlcyB3aXRo IG9yaWdpbmFsIE1JTklYLCAibWFrZSBtaW5peCIgKHRvbyBiaWcpCisjID8gZm9yIElCTSBQQyBm YW1pbHksIDM4Ni1iYXNlZCwgd2l0aCBNSU5JWC8zODYgMS41LCAibWFrZSBtaW5peDM4NiIKKyMg ICAgIG9yIGlmIHlvdSBoYXZlIEdOVSBDQywgIm1ha2UgbWluaXgzODZnY2MiCisjID8gZm9yIElC TSBQQyBmYW1pbHksIDM4Ni1iYXNlZCwgd2l0aCBNSU5JWCAyLjAsICJtYWtlIG1pbml4MjAiCisj ID8gZm9yIElCTSBQQyBmYW1pbHksIDM4Ni1iYXNlZCwgd2l0aCBNSU5JWCAzLjAsICJtYWtlIG1p bml4MyIKKyMgKyBmb3IgSUJNIFBDIGZhbWlseSwgMzg2LWJhc2VkLCB3aXRoIE1JTklYIDMuMCwg Im1ha2UgbWluaXgzMTUiCisjID8gZm9yIElCTSBQUy8yIHdpdGggUFMvMiBBSVggMS4wLCAxLjEs IG9yIDEuMiwgIm1ha2UgcHMyYWl4IiBvciBwczJhaXhuZXRjLgorIyA/IGZvciBJQk0gUFMvMiB3 aXRoIFBTLzIgQUlYIDEuMywgIm1ha2UgcHMyYWl4MyIKKyMgPyBmb3IgSUJNIFJJU0MgU3lzdGVt LzYwMDAgd2l0aCBBSVggMy4wLCAibWFrZSBhaXgzMCIKKyMgPyBmb3IgSUJNIFJJU0MgU3lzdGVt LzYwMDAgd2l0aCBBSVggMy4xLngsICJtYWtlIGFpeDMxIgorIyA/IGZvciBJQk0gUklTQyBTeXN0 ZW0vNjAwMCB3aXRoIEFJWCAzLjIuMCB0aHJ1IDMuMi41LCAibWFrZSBhaXgzMiIKKyMgPyBmb3Ig SUJNIFJTLzYwMDAgb3IgUG93ZXIgU2VyaWVzIHdpdGggQUlYIDQuMS54LCAibWFrZSBhaXg0MSIK KyMgPyBmb3IgSUJNIFJTLzYwMDAgb3IgUG93ZXIgU2VyaWVzIHdpdGggQUlYIDQuMS54IHdpdGgg Z2NjLCAibWFrZSBhaXg0MWciCisjID8gZm9yIElCTSBSUy82MDAwIG9yIFBvd2VyIFNlcmllcyB3 aXRoIEFJWCA0LjEgd2l0aCBYLjI1LCAibWFrZSBhaXg0MXgyNSIKKyMgPyBmb3IgSUJNIFJTLzYw MDAgb3IgUG93ZXIgU2VyaWVzIHdpdGggQUlYIDQuMiBvciBsYXRlcjogIm1ha2UgYWl4IgorIyAg KHRoZSBmb2xsb3dpbmcgIm1ha2UgYWl4bm4iIHRhcmdldHMgYXJlIG5vIGxvbmdlciBuZWNlc3Nh cnkgZXhjZXB0IGZvciBnY2MpCisjID8gZm9yIElCTSBSUy82MDAwIG9yIFBvd2VyIFNlcmllcyB3 aXRoIEFJWCA0LjIsICJtYWtlIGFpeDQyIgorIyA/IGZvciBJQk0gUlMvNjAwMCBvciBQb3dlciBT ZXJpZXMgd2l0aCBBSVggNC4zLCAibWFrZSBhaXg0MyIgKG9yIGFpeDQzZ2NjKQorIyA/IGZvciBJ Qk0gUlMvNjAwMCBvciBQb3dlciBTZXJpZXMgd2l0aCBBSVggNC40LCAibWFrZSBhaXg0NCIgKG9y IGFpeDQ0Z2NjKQorIyA/IGZvciBJQk0gUlMvNjAwMCBvciBQb3dlciBTZXJpZXMgd2l0aCBBSVgg NC41LCAibWFrZSBhaXg0NSIgKG9yIGFpeDQ1Z2NjKQorIyA/IGZvciBJQk0gUlMvNjAwMCBvciBQ b3dlciBTZXJpZXMgd2l0aCBBSVggNS4wLCAibWFrZSBhaXg1MCIgKG9yIGFpeDUwZ2NjKQorIyA/ IGZvciBJQk0gUlMvNjAwMCBvciBQb3dlciBTZXJpZXMgd2l0aCBBSVggNS4xLCAibWFrZSBhaXg1 MSIgKG9yIGFpeDUxZ2NjKQorIyA/IGZvciBJQk0gUlMvNjAwMCBvciBQb3dlciBTZXJpZXMgd2l0 aCBBSVggNS4yLCAibWFrZSBhaXg1MiIgKG9yIGFpeDUyZ2NjKQorIyA/IGZvciBJQk0gUlMvNjAw MCBvciBQb3dlciBTZXJpZXMgd2l0aCBBSVggNS4zLCAibWFrZSBhaXg1MyIgKG9yIGFpeDUzZ2Nj KQorIyA/IGZvciBJQk0gUlMvNjAwMCBvciBQb3dlciBTZXJpZXMgd2l0aCBBSVggNi4xLCAibWFr ZSBhaXg2MSIgKG9yIGFpeDUzZ2NjKQorIyA/IGZvciBJQk0gUlQgUEMgd2l0aCBBSVggMi4xLCAi bWFrZSBzeXMzIgorIyA/IGZvciBJQk0gUlQgUEMgd2l0aCBBSVggMi4yLjEsICJtYWtlIHJ0YWl4 IiBvciAibWFrZSBydGFpeGMiCisjID8gZm9yIElCTSBSVCBQQyB3aXRoIEFDSVMgNC4yLCAibWFr ZSBic2QiCisjID8gZm9yIElCTSBSVCBQQyB3aXRoIEFDSVMgNC4zLCAibWFrZSBydGFjaXMiIG9y ICJtYWtlIGJzZCBLRkxBR1M9LUROT0FOU0kiCisjID8gZm9yIElCTSBSVCBQQyB3aXRoIDQuM0JT RC9SZW5vLCAibWFrZSBic2Q0NCIgb3IgIm1ha2UgYnNkNDRjIgorIyA/IGZvciBJQ0wgRFJTNDAw IG9yIDQwMEUsICJtYWtlIGljbHN5czVyMyIKKyMgPyBmb3IgSUNMIERSUzMwMDAgKDgwNDg2KSB3 aXRoIERSUy9OWCwgIm1ha2UgaWNsc3lzNXI0XzQ4NiIKKyMgPyBmb3IgSUNMIERSUzYwMDAgKFNQ QVJDKSB3aXRoIERSUy9OWCwgIm1ha2UgaWNsc3lzNXI0IgorIyA/IGZvciBJQ0wgRFJTNjAwMCAo U1BBUkMpIHdpdGggRFJTL05YIDQuMk1QIDdNUGx1cywgIm1ha2UgaWNsc3lzNXI0bSsiCisjID8g ICAgIERpdHRvIGJ1dCB3aXRoIElLU0Qgc3VwcG9ydCBpbmNsdWRlZCwgIm1ha2UgaWNsc3lzNXI0 bStpa3NkIgorIyA/IGZvciBJbnRlZ3JhdGVkIFNvbHV0aW9ucyBJbmMgVjhTIFZNRSA2ODAyMCwg Im1ha2UgaXNpIgorIyA/IGZvciBJbnRlbCAzMDIgd2l0aCBCZWxsIFRlY2ggU3lzIFYvMzg2IFIz LjIsICJtYWtlIHN5czVyMyIKKyMgPyBmb3IgSW50ZWwgWGVuaXgvMjg2LCAibWFrZSBzY28yODYi CisjID8gZm9yIEludGVyYWN0aXZlIFN5c3RlbSBJSUkgKFBDL0lYKSwgIm1ha2UgcGNpeCIgb3Ig Im1ha2UgaXMzIgorIyA/IGZvciBJbnRlcmFjdGl2ZSBTeXN0ZW0gSUlJIChQQy9JWCkgd2l0aCBn Y2MsICJtYWtlIGlzM2djYyIKKyMgPyBmb3IgSW50ZXJhY3RpdmUgMzg2L2l4IDEuMC42IHdpdGgg VENQL0lQIG5ldHdvcmtpbmcsICJtYWtlIGlzNXIzbmV0MiIKKyMgPyBmb3IgSW50ZXJhY3RpdmUg Mzg2L2l4IDIuMC54LCAibWFrZSBpczVyMyIgb3IgKFBPU0lYKSAibWFrZSBpczVyM3AiCisjID8g Zm9yIEludGVyYWN0aXZlIDM4Ni9peCAyLjAueCB3aXRoIFRDUC9JUCBuZXR3b3JraW5nLCAibWFr ZSBpczVyM25ldCIKKyMgICAgIG9yICJtYWtlIGlzNXIzbmV0MiIKKyMgPyBmb3IgSW50ZXJhY3Rp dmUgMzg2L2l4IDIuMi4xLCBqb2IgY29udHJvbCwgY3Vyc2VzLCBubyBuZXQsIGdjYywKKyMgICAg ICJtYWtlIGlzNXIzZ2NjIgorIyA/IGZvciBJbnRlcmFjdGl2ZSBVTklYIFN5cyBWIFIzLjIgVjIu MiAtIDQuMCB3aXRob3V0IFRDUC9JUCwgIm1ha2UgaXM1cjNqYyIKKyMgPyBmb3IgSW50ZXJhY3Rp dmUgVU5JWCBTeXMgViBSMy4yIFYyLjIgLSA0LjAgd2l0aCBUQ1AvSVAsICJtYWtlIGlzNXIzbmV0 amMiCisjID8gZm9yIEludGVyZ3JhcGggQ2xpcHBlciwgIm1ha2UgY2xpeCIgb3IgIm1ha2UgY2xp eG5ldCIKKyMgPyBmb3IgSm9saXggKHNlZSAzODZCU0QpCisjICsgZm9yIExpbnV4IDEuMiBhbmQg bGF0ZXIsICJtYWtlIGxpbnV4Ii4gIFVzZXMgbmN1cnNlcy4gIFRoaXMgdmVyc2lvbgorIyAgICAg aGFuZGxlcyBzZXJpYWwgc3BlZWRzIHVwIHRvIDQ2MDgwMCBicHMsIExpbnV4IEZTU1REIDEuMiwg VENQL0lQLCBhbmQKKyMgICAgIHNob3VsZCB3b3JrIG9uIGJvdGggbGliYyBhbmQgZ2xpYmMgc3lz dGVtcy4gIEZvciBzdGF0aWMgbGlua2luZywgdXNlCisjICAgICAibWFrZSBsaW51eCBMTktGTEFH Uz0tc3RhdGljIi4gIFBsZWFzZSByZWFkIHRoZSBjb21tZW50cyB0aGF0IGFjY29tcGFueQorIyAg ICAgdGhlIGxpbnV4IGVudHJ5LiAgQXMgb2YgOC4wLjIxMiBEZXYuMTAsIHRoaXMgYWxzbyBpbmNs dWRlcyBMYXJnZSBGaWxlCisjICAgICBTdXBwb3J0IChMRlMpLgorIyArIGZvciBMaW51eCBidWls ZHMgdGhhdCBmYWlsIHdpdGggInN5cy9zZWxlY3QuaDogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9y eSIsCisjICAgICAibWFrZSBsaW51eG5zIgorIyArIGZvciBMaW51eCAxLjIgYW5kIGxhdGVyIGJ1 dCB3aXRoIGN1cnNlcy5oIGFuZCBsaWJjdXJzZXMgKHJhdGhlciB0aGFuCisjICAgICBuY3Vyc2Vz LmggYW5kIGxpYm5jdXJzZXMpLCB1c2UgIm1ha2UgbGludXhjIi4KKyMgKyBmb3IgTGludXggMS4y IGFuZCBsYXRlciB3aXRoIG5vIGN1cnNlcyBzdXBwb3J0IGF0IGFsbCwgIm1ha2UgbGludXhuYyIu CisjICsgZm9yIExpbnV4IHdpdGggbm8gVENQL0lQLCAibWFrZSBsaW51eG5vdGNwIgorIyAoVGhl IGZvbGxvd2luZyBMaW51eCB0YXJnZXRzIGFyZSBoaXN0b3JpYyBhbmQgbWlnaHQgbm90IHdvcmsu Li4pCisjID8gZm9yIFJlZCBIYXQgTGludXggNy4xIHRocm91Z2ggUkg5LCBmdWxseSBjb25maWd1 cmVkIChrcmI1LCBTU0wsIGV0Yyk6CisjICAgICAibWFrZSByZWRoYXQ3MSIsICJtYWtlIHJlZGhh dDcyIiwgIm1ha2UgcmVkaGF0NzMiLCAibWFrZSByZWRoYXQ4MCIKKyMgICAgICJtYWtlIHJlZGhh dDkiCisjICAgICBOT1RFOiBZb3UgbXVzdCB1c2UgdGhpcyB0YXJnZXQgZm9yIFJlZCBIYXQgNy4x IHNpbmNlIGl0CisjICAgICBhbHNvIGluY2x1ZGVzIGEgd29ya2Fyb3VuZCBmb3IgaXRzIGJyb2tl biBjdXJzZXMgbGlicmFyeS4KKyMgICAgIFdBUk5JTkc6IFRoZXNlIHRhcmdldHMgY3JlYXRlIGJp bmFyaWVzIHRoYXQgaW5jbHVkZSBjb2RlIGZvcgorIyAgICAgc3Ryb25nIGVuY3J5cHRpb24gYW5k IGFyZSB0aGVyZWZvcmUgbm90IGV4cG9ydGFibGUuIERPIE5PVCBQVVQKKyMgICAgIFRIRVNFIEJJ TkFSSUVTIE9OIFVTIE9SIENBTkFESUFOIFdFQiBPUiBGVFAgU0lURVMuCisjID8gZm9yIExpbnV4 IG9uIFBvd2VyTWFjIChNa2xpbnV4IERSMyksICJtYWtlIG1rbGludXgiLgorIyA/IGZvciBMaW51 eCAxLjIgYW5kIGxhdGVyLCB0byBidWlsZCB3aXRoIGVnY3MsICJtYWtlIGxpbnV4ZWdjcyIuCisj ID8gZm9yIExpbnV4IHdpdGggbGNjIGNvbXBpbGVyLCBubyBUQ1AvSVAsICJtYWtlIGxpbnV4bm90 Y3AtbGNjIgorIyA/IGZvciBMaW51eCAxLjAgb3IgZWFybGllciwgIm1ha2UgbGludXgxMCIuCisj IChFbmQgb2xkIGxpbnV4IHRhcmdldHMpCisjID8gZm9yIE1hY2ggMi42IG9uIChhbnl0aGluZywg ZS5nLiBERUNzdGF0aW9uKSwgIm1ha2UgYnNkNDIiIG9yICJtYWtlIGJzZDQzIi4KKyMgPyBmb3Ig TWFjaFRlbiAoVGVub24pIDIuMS4xLkQgb24gKGUuZy4pIEFwcGxlIFBvd2VyYm9vaywgIm1ha2Ug bWFjaHRlbiIuCisjID8gZm9yIE1hc3Njb21wIFJUVSBBVCZUIFN5c3RlbSBJSUksICJtYWtlIHJ0 dSIKKyMgICBmb3Igb3RoZXIgTWFzc2NvbXAsIHNlZSBDb25jdXJyZW50LgorIyA/IGZvciBNaWNy b3BvcnQgU1YvQVQgKFN5c3RlbSBWIFIyKSwgIm1ha2UgbXBzeXN2IiAobGFzdCBlZGl0IHRlc3Rl ZDogMTQ0KQorIyA/IGZvciBNaWNyb3BvcnQgU1ZSNCAyLjIsIDMuMSwgb3IgNC4xICJtYWtlIHN5 czVyNHN4IgorIyA/IGZvciBNaWNyb3NvZnQsSUJNIFhlbml4ICgvMjg2LCBQQy9BVCwgZXRjKSwg Im1ha2UgeGVuaXgiIG9yICJtYWtlIHNjbzI4NiIKKyMgPyBmb3IgTUlQUyBTeXN0ZW0gd2l0aCBS SVNDL29zIChVTUlQUykgNC41MiA9IEFUJlQgU1ZSMywgIm1ha2UgbWlwcyIKKyMgICAgIG9yICJt YWtlIG1pcHN0Y3BjIgorIyA/IGZvciBNa0xpbnV4IG9uIFBvd2VyIE1hY2ludG9zaCwgIm1ha2Ug bWtsaW51eCIKKyMgPyBmb3IgTW9kY29tcCA5NzMwLCBSZWFsL0lYLCAibWFrZSBzeXM1cjMiIChv ciBtb2RpZnkgdG8gdXNlIGdjYyA9IEdMUyBjYykKKyMgPyBmb3IgTW9kY29tcCBSZWFsc3RhciAx MDAwIHdpdGggUkVBTC9JWCBELjEsICJtYWtlIHN2ODhyMzIiCisjID8gZm9yIE1vdG9yb2xhIEZv dXIgUGhhc2UsICJtYWtlIHN5czMiIG9yICJtYWtlIHN5czNuaWQiCisjID8gZm9yIE1vdG9yb2xh IERlbHRhIFN5c3RlbSBWLzY4IFIzLCAibWFrZSBzdjY4cjMiCisjID8gZm9yIE1vdG9yb2xhIERl bHRhIFN5c3RlbSBWLzY4IFIzVjUsICJtYWtlIHN2NjhyM3Y1IgorIyA/IGZvciBNb3Rvcm9sYSBE ZWx0YSBTeXN0ZW0gVi82OCBSM1Y1LjEsICJtYWtlIHN2NjhyM3Y1MSIKKyMgPyBmb3IgTW90b3Jv bGEgRGVsdGEgU3lzdGVtIFYvNjggUjNWNiB3aXRoIE5TRSBUQ1AvSVAsICJtYWtlIHN2NjhyM3Y2 IgorIyA/IGZvciBNb3Rvcm9sYSBEZWx0YSBTeXN0ZW0gVi84OCBSMzIsICJtYWtlIHN2ODhyMzIi CisjID8gZm9yIE1vdG9yb2xhIERlbHRhIFN5c3RlbSBWLzg4IFI0MCwgIm1ha2Ugc3Y4OHI0MCIK KyMgPyBmb3IgTXQgWGludSBNYWNoMzg2IG9uIDM4Ni80ODYtYmFzZWQgUENzLCAibWFrZSBic2Q0 MyIKKyMgPyBmb3IgTkNSIFRvd2VyIDE2MzIsIE9TIDEuMDIsICJtYWtlIHRvd2VyMSIKKyMgPyBm b3IgTkNSIFRvd2VyIDE2MzIgb3IgTWluaXRvd2VyIHdpdGggU3lzdGVtIFYgUjIsICJtYWtlIHN5 czMiCisjICAgICBvciAibWFrZSBzeXMzbnYiCisjID8gZm9yIE5DUiBUb3dlciAzMiwgT1MgUmVs ZWFzZSAxLnh4Lnh4LCAibWFrZSB0b3dlcjMyLTEiCisjID8gZm9yIE5DUiBUb3dlciAzMiwgT1Mg UmVsZWFzZSAyLnh4Lnh4LCAibWFrZSB0b3dlcjMyLTIiCisjID8gZm9yIE5DUiBUb3dlciAzMiwg T1MgUmVsZWFzZXMgYmFzZWQgb24gU3lzIFYgUjMsICJtYWtlIHRvd2VyMzIiCisjID8gZm9yIE5D UiBUb3dlciAzMiwgT1MgUmVsZWFzZXMgYmFzZWQgb24gU3lzIFYgUjMgd2l0aCBnY2MgIm1ha2Ug dG93ZXIzMmciCisjID8gZm9yIE5DUiBTeXN0ZW0gMzAwMCwgQVQmVCBVTklYIFN5c3RlbSBWIFI0 IDIuMCwgIm1ha2Ugc3lzNXI0c3huYSIKKyMgPyBmb3IgTkNSIFN5c3RlbSAzMDAwLCBBVCZUIFVO SVggU3lzdGVtIFYgUjQgMi4wIHdpdGggV29sbG9uZ29uZyBUQ1AvSVAsCisjICAgICAibWFrZSBz eXM1cjRuZXQyIiBvciAibWFrZSBzeXM1cjRuZXQyYyIuCisjICAgICAgU29tZSBoZWFkZXIgZmls ZXMgbWlnaHQgYmUgbWlzcGxhY2VkOyB0cnkgdGhpczoKKyMgICAgICAgbG4gL3Vzci9pbmNsdWRl L25ldGluZXQvaW4uaCAvdXNyL2luY2x1ZGUvc3lzL2luLmgKKyMgICAgICAgbG4gL3Vzci9pbmNs dWRlL2FycGEvaW5ldC5oIC91c3IvaW5jbHVkZS9zeXMvaW5ldC5oCisjICAgICAgIGxuIC91c3Iv aW5jbHVkZS9zeXMvdGVybWlveC5oIC91c3IvaW5jbHVkZS90ZXJtaW94LmgKKyMgPyBmb3IgTkNS IFN5c3RlbSAzMDAwLCBOQ1IgVU5JWCAwMi4wMi4wMSwgc2FtZSBhcyBhYm92ZS4KKyMgPyBmb3Ig TkNSIE1QLVJBUyBTeXN0ZW0gViBSNCBWMi4wMyBvciAzLjAyLCAibWFrZSBtcHJhcyIgb3IgIm1h a2UgbXByYXN0Y3BjIgorIyArIGZvciBOZXRCU0QgYW55IHZlcnNpb24gb24gYW55IGFyY2hpdGVj dHVyZSwgIm1ha2UgbmV0YnNkIgorIyArIGZvciBOZXRCU0Qgd2l0aCBPcGVuU1NMLCAibWFrZSBu ZXRic2Qrc3NsIgorIyA/IGZvciBOZXRCU0Qgd2l0aCBuY3Vyc2VzIHNwZWNpZmllZCBpbnN0ZWFk IG9mIGN1cnNlcywgIm1ha2UgbmV0YnNkbiIKKyMgPyBmb3IgTmV0QlNEIHdpdGggYWxsIGN1cnNl cyBzdXBwb3J0IG9taXR0ZWQsICJtYWtlIG5ldGJzZG5jIgorIyA/IGZvciBOZVhUIHdpdGggTmVY VFNURVAgMS4wIHRocm91Z2ggMy4yLCAibWFrZSBuZXh0IiAob24gYSBOZVhUKQorIyA/IGZvciBO ZVhUIHdpdGggTmVYVFNURVAgMy4zLCAibWFrZSBuZXh0MzMiCisjID8gZm9yIE5lWFQgd2l0aCBP UEVOU1RFUC9NYWNoIDQuMSwgIm1ha2UgbmV4dHF1YWRmYXQiLgorIyA/IGZvciBOZVhUIHdpdGgg T1BFTlNURVAvTWFjaCA0LjIsICJtYWtlIG9wZW5zdGVwNDIiLgorIyA/IGZvciBOZVhUU1RFUC80 ODYsICJtYWtlIG5leHQiIChvbiBhIFBDKQorIyA/IGZvciBOZVhUU1RFUCBwb3J0YWJsZSBiaW5h cnkgKHJ1bnMgb24gSW50ZWwgb3IgTW90b3JvbGEpLCAibWFrZSBuZXh0ZmF0IgorIyA/IGZvciBO ZVhUU1RFUCBwb3J0YWJsZSBiaW5hcnkgKEludGVsLCBNb3Rvcm9sYSwgSFAgUEEtUklTQywgb3Ig U1BBUkMpLAorIyAgICAgIm1ha2UgbmV4dHF1YWRmYXQiCisjID8gZm9yIE5peGRvcmYgVGFyZ29u LzMxLCAibWFrZSB0MzF0b3M0MHgiCisjID8gZm9yIE5vcnNrIERhdGEgVW5pbGluZSA4OC8xNyB3 aXRoIFNWLzg4IFIzLjIsICJtYWtlIHN2ODhyMzIiCisjICAgZm9yIE5vdmVsbCBVbml4V2FyZSAt IHNlZSBVbml4V2FyZQorIyA/IGZvciBPU0YvMSAodmFuaWxsYSwgZnJvbSBPUy9GKSwgIm1ha2Ug cG9zaXgiCisjID8gZm9yIE9raVN0YXRpb24gNzMwMCBTZXJpZXMsICJtYWtlIHN5czVyNHN4dGNw IgorIyA/IGZvciBPbGl2ZXR0aSBMU1gtMzAyMCB3aXRoIFgvT1MgUi4yLjMsICJtYWtlIHhvczIz IiBvciAibWFrZSB4b3MyM2MiCisjICsgZm9yIE9wZW5CU0QsICJtYWtlIG9wZW5ic2QiIChhbHNv IHNlZSBzZWN1cmUgdGFyZ2V0cyBsaXN0ZWQgYmVsb3cpLgorIyA/IGZvciBPUEVOU1RFUC9NYWNo IDQuMSwgIm1ha2UgbmV4dHF1YWRmYXQiIChOZVhULCBJbnRlbCwgUEEtUklTQywgU1BBUkMpCisj ID8gZm9yIE9QRU5TVEVQL01hY2ggNC4yLCAibWFrZSBvcGVuc3RlcDQyIiAodGVzdGVkIG9uIE5l WFQpCisjID8gZm9yIFBlcmtpbi1FbG1lciAoQ29uY3VycmVudCkgMzIwMCBzZXJpZXMsICJtYWtl IHN5czUiLgorIyA/IGZvciBQZXJraW4tRWxtZXIgKENvbmN1cnJlbnQpIDMyMDAgc2VyaWVzIHdp dGggPGRpcmVudC5oPiwgIm1ha2UgY2NvcDEiCisjID8gZm9yIFBlcmtpbi1FbG1lci9Db25jdXJy ZW50IDMyMDAgd2l0aCBYZWxvcyBSMDIsICJtYWtlIGNjb3AxIgorIyA/IGZvciBQRlUgQ29tcGFj dCBBIFNlcmllcyBTWC9BIFRJU1AgVjEwL0U1MCAoSmFwYW4pLCAibWFrZSBzeGFlNTAiCisjID8g Zm9yIFBsZXh1cywgIm1ha2Ugc3lzMyIKKyMgPyBmb3IgUHlyYW1pZCA5WFhYIChlLmcuIDk4NDUp IG9yIE1JU2VydmVyIFQgc2VyaWVzLCBPU3ggNC40YiB0aHJ1IDUuMSwKKyMgICAgICJ1Y2IgbWFr ZSBweXJhbWlkIiBvciBmb3IgSERCIFVVQ1AsICJ1Y2IgbWFrZSBweXJhbWlkLWhkYiIgb3I6Cisj ID8gZm9yIFB5cmFtaWQgTUlTZXJ2ZXIgUyBvciBFUyBTZXJpZXMsIERhdGFDZW50ZXIvT1N4LCAi bWFrZSBweXJkY29zeCIKKyMgPyBmb3IgUHlyYW1pZCBNSVMtUyBNSVBTIFIzMDAwLCBEYXRhQ2Vu dGVyIE9TeCBTeXN0ZW0gViBSNCwgIm1ha2UgcHlyZGNvc3giCisjID8gZm9yIFBPU0lYIG9uIGFu eXRoaW5nLCAibWFrZSBwb3NpeCIgKGJ1dCBhZGp1c3RtZW50cyBtaWdodCBiZSBuZWNlc3Nhcnkp LgorIyAgICAgIE5PVEU6IHRoaXMgdGFyZ2V0IGlzIG5vdCB2ZXJ5IHVzZWZ1bCAtIG1hbnkgZmVh dHVyZXMgYXJlIG1pc3NpbmcuCisjID8gZm9yIFByaW1lIDgwMDAgTUlQUywgU1ZSMywgIm1ha2Ug bWlwcyIgb3IgIm1ha2UgbWlwc3RjcGMiCisjIC0gZm9yIFFOWCAyLnggKHNvcnJ5IHdlIGRvbid0 IGhhdmUgYSB2ZXJzaW9uIG9mIEMtS2VybWl0IGZvciBRTlggMi54KQorIyA/IGZvciBRTlggNC4w IG9yIDQuMSwgMTYtYml0LCBvbiAyODYgUEMsIFdhdGNvbSBDIDguNSwgIm1ha2UgcW54MTZfNDEi CisjID8gZm9yIFFOWCA0LjIxIC0gNC4yMkEgKDI4NispLCBhbmQgNC4yMyAoMzg2KyksIG9yIGhp Z2hlciwgMTYtYml0LAorIyAgICAgV2F0Y29tIEMgOS41eCBvciBoaWdoZXIsICJtYWtlIHFueDE2 IgorIyArIGZvciBRTlggNC4yMS00LjI1LCAzMi1iaXQsIDM4NiBvciBhYm92ZSwgV2F0Y29tIEMg MTAuNiwgIm1ha2UgcW54MzIiCisjICAgICBOT1RFOiAoIm1ha2UgcW54IiA9PSAibWFrZSBxbngz MiIpCisjID8gZm9yIFFOWCBOZXV0cmlubyAyKywgIm1ha2UgcW54X250bzIrIiAoY3Jvc3Njb21w aWxlZCBvbiBRTlg0IHdpdGggV2F0Y29tIEMpCisjID8gZm9yIFFOWCA2ID0gTmV1dHJpbm8gMi54 eCwgIm1ha2UgcW54NiIKKyMgPyBmb3IgUmlkZ2UgMzIgKFJPUzMuMiksICJtYWtlIHJpZGdlMzIi CisjID8gZm9yIFNhbXN1bmcgTWFnaWNTdGF0aW9uLCAibWFrZSBzeXM1cjQiCisjID8gZm9yIFND TyBYZW5peCAyLjIuMSB3aXRoIGRldmVsb3BtZW50IHN5c3RlbSAyLjIgb24gODA4Ni84ICJtYWtl IHNjbzg2IgorIyA/IGZvciBTQ08gWGVuaXgvMjg2IDIuMi4xIHdpdGggZGV2ZWxvcG1lbnQgc3lz dGVtIDIuMiBvbiA4MDI4NiwgIm1ha2Ugc2NvMjg2IgorIyAgICAgTk9URTogcmVwb3J0ZWRseSB0 aGlzIG1ha2VmaWxlIGlzIHRvbyBsb25nIGZvciBTQ08gWGVuaXgvMjg2IG1ha2UsIGJ1dCBpdAor IyAgICAgd29ya3Mgd2l0aCAibWFrZUwiLCBvciBpZiBzb21lIG9mIHRoZSBvdGhlciBtYWtlIGVu dHJpZXMgYXJlIGVkaXRlZCBvdXQuCisjID8gZm9yIFNDTyBYZW5peC8zODYgMi4yLjIsICJtYWtl IHNjbzM4NiIKKyMgPyBmb3IgU0NPIFhlbml4LzM4NiAyLjMueCwgIm1ha2Ugc2NvM3IyIgorIyA/ IGZvciBTQ08gWGVuaXgvMzg2IFNDTyAyLjMuMyBvciAyLjMuNCB3aXRoIGdjYyAxLjM3IG9yIGxh dGVyLAorIyAgICAgIm1ha2Ugc2NvMzg2Z2NjIiBvciAodG8gYWRkIGN1cnNlcykgIm1ha2Ugc2Nv Mzg2Z2NjYyIuCisjID8gZm9yIFNDTyBYZW5peC8zODYgb3IgVU5JWC8zODYgd2l0aCBFeGNlbGFu IFRDUC9JUCwgIm1ha2Ugc2NvM3IybmV0IgorIyAgICAgb3IgKHRvIGFkZCBjdXJzZXMgc3VwcG9y dCkgIm1ha2Ugc2NvM3IybmV0YyIgb3IgInNjbzM4Nm5ldGMiCisjICsgZm9yIFNDTyBYRU5JWCAy LjMuNCwgIm1ha2Ugc2NvMjM0IiBvciAibWFrZSBzY28yMzRjIiB0byBhZGQgY3Vyc2VzLgorIyA/ IGZvciBTQ08gWEVOSVggMi4zLjQgd2l0aCBTQ08gVENQL0lQICYgY3Vyc2VzLCAibWFrZSBzY28y MzRuZXRjIi4KKyMgPyBmb3IgU0NPIFhlbml4IDIuMy54IHdpdGggUmFjYWwtSW50ZXJMYW4gVENQ L0lQLCAibWFrZSBzY28zcjJuZXRyaSIKKyMgICBmb3Igb3RoZXIgVU5JWCB2YXJpZXRpZXMgd2l0 aCBSYWNhbCBJbnRlcmxhbiBUQ1AvSVAsIHJlYWQgc2NvM3IybmV0cmkgZW50cnkKKyMgPyBmb3Ig U0NPIFhlbml4IDIuMy54IHdpdGggU0NPIChMYWNobWFuKSBUQ1AvSVAsICJtYWtlIHNjbzNyMmxh aSIKKyMgICAgIG9yICh0byBhZGQgY3Vyc2VzKSAibWFrZSBzY28zcjJsYWljIgorIyAgIGZvciBT Q08gVU5JWC4uLiAgQUxTTyBSRUFEIENPTU1FTlRTIGluIHRoZSBTQ08gVU5JWCBlbnRyaWVzIGZv ciBtb3JlIGluZm8hCisjID8gZm9yIFNDTyBVTklYLzM4NiAzLjIuMCBvciAzLjIuMSwgIm1ha2Ug c2NvM3IyIiBvciAibWFrZSBzY28zcjJ4IgorIyA/IGZvciBTQ08gVU5JWC8zODYgMy4yLjIsICJt YWtlIHNjbzNyMjIiIG9yICJtYWtlIHNjbzNyMjJnY2MiCisjICAgICBvciAibWFrZSBzY28zcjIy YyIKKyMgPyBmb3IgU0NPIFVOSVgvMzg2IDMuMi4yIHdpdGggU0NPIFRDUC9JUCwgIm1ha2Ugc2Nv M3IyMm5ldCIKKyMgICAgIG9yICJtYWtlIHNjbzNyMjJuZXRjIiAoY3Vyc2VzKQorIyA/IGZvciBT Q08gT0RUIDEuMSwgIm1ha2Ugc2NvM3IyMm5ldCIgb3IgIm1ha2Ugc2NvM3IyMm5ldGMiIChjdXJz ZXMpCisjID8gZm9yIFNDTyBVTklYLzM4NiAzLjIgVjQueCwgbm8gbmV0d29yayBzdXBwb3J0LCAi bWFrZSBzY28zMnY0IgorIyA/ICAgb3IgIm1ha2Ugc2NvMzJ2NG5zIiAodGhpcyBvbmUgdXNlcyBu byBzZWxlY3QoKSBvciBzb2NrZXRzIGxpYnJhcnkpCisjID8gZm9yIFNDTyBVTklYLzM4NiAzLjIg VjQueCB3aXRoIFRDUC9JUCwgIm1ha2Ugc2NvMzJ2NG5ldCIKKyMgICAgIChhbHNvIHNjbzMydjRn Y2MsIHNjbzMydjRuZXRnY2MpCisjID8gZm9yIFNDTyBVTklYLzM4NiAzLjIgVjUuMCAtIHNlZSBT Q08gT3BlblNlcnZlci4KKyMgPyBmb3IgU0NPIFVOSVggMy4ydjQueCB3aXRoIFRDUC9JUCwgPGRp cmVudC5oPiBmb3IgRXh0ZW5kZWQgQWNlciBGaWxlCisjICAgICBTeXN0ZW0gKEVBRlMpLCBjdXJz ZXMsIEFOU0kgQyBjb21waWxhdGlvbiwgIm1ha2Ugc2NvMzJ2NG5ldCIKKyMgPyAgIG9yICh0byB1 c2Ugc2VsZWN0KCktYmFzZWQgQ09OTkVDVCBtb2R1bGUpICJtYWtlIHNjbzMydjRuZXR4Ii4KKyMg PyBmb3IgU0NPIFVOSVggMy4ydjQuMiwgIm1ha2Ugc2NvLW9kdDMwIiAoaW5jbHVkZXMgVENQL0lQ KS4KKyMgPyBmb3IgU0NPIE1QWCAzLjAgLSBUaGUgU0NPIFVOSVggYmluYXJ5IHJ1bnMgb24gdGhl IGNvcnJlc3BvbmRpbmcgTVBYIHN5c3RlbS4KKyMKKyMgTk9URTogQWxzbyBzZWUgYmVsb3cgZm9y IG90aGVyIGVudHJpZXMgdGhhdCBhcmUgdmFyaWF0aW9ucyBvbiB0aGVzZS4KKyMgQWxzbyBiZSBz dXJlIHRvIHJlYWQgdGhlIGNvbW1lbnRzIGFjY29tcGFueWluZyBlYWNoIFNDTyBlbnRyeS4KKyMg QWxzbyBzZWUgVW5peHdhcmUgc2VjdGlvbi4KKyMKKyMgPyBmb3IgU0NPIE9EVCAyLjAsICJtYWtl IHNjbzMydjRuZXQiCisjID8gZm9yIFNDTyBPRFQgMy4wLCAibWFrZSBzY28tb2R0MzAiCisjID8g Zm9yIFNDTyBPcGVuU2VydmVyIDUuMCAoT1NSNSksICJtYWtlIHNjbzMydjUwMCIKKyMgPyBmb3Ig U0NPIE9wZW5TZXJ2ZXIgNS4wIChPU1I1KSB3aXRoIG5ldHdvcmtpbmcsICJtYWtlIHNjbzMydjUw MG5ldCIKKyMgPyBmb3IgU0NPIE9wZW5TZXJ2ZXIgNS4wIChPU1I1KSwgZ2NjLCAibWFrZSBzY28z MnY1MDBnY2MiCisjID8gZm9yIFNDTyBPcGVuU2VydmVyIDUuMCAoT1NSNSksIGdjYywgd2l0aCBu ZXR3b3JraW5nLCAibWFrZSBzY28zMnY1MDBuZXRnY2MiCisjID8gZm9yIFNDTyBPcGVuU2VydmVy IDUuMCAoT1NSNSksIGFzIGFib3ZlLCBFTEYsICJtYWtlIHNjbzMydjUwMG5ldGdjY2VsZiIKKyMg PyBmb3IgU0NPIE9wZW5TZXJ2ZXIgNS4wLjIsIHVzZSAibWFrZSBzY28zMnY1MDJ4eHgiIGVudHJp ZXMgYXMgYWJvdmUuCisjID8gZm9yIFNDTyBPcGVuU2VydmVyIDUuMC40LCB1c2UgIm1ha2Ugc2Nv MzJ2NTA0eHh4IiBlbnRyaWVzIGFzIGFib3ZlLgorIyA/IGZvciBTQ08gT3BlblNlcnZlciA1LjAu NSwgdXNlICJtYWtlIHNjbzMydjUwNXh4eCIgZW50cmllcyBhcyBhYm92ZS4KKyMgICAgIFVzZSB0 aGUgc2NvMzJ2NTA1dWRreHh4IGVudHJpZXMgaWYgeW91IGhhdmUgdGhlIFVESyByYXRoZXIgdGhh biAvYmluL2NjLgorIyA/IGZvciBTQ08gT3BlblNlcnZlciA1LjAuNiwgdXNlICJtYWtlIHNjbzMy djUwNnh4eCIgZW50cmllcyBhcyBhYm92ZS4KKyMgPyBmb3IgU0NPIE9wZW5TZXJ2ZXIgNS4wLjZh LHVzZSAibWFrZSBzY28zMnY1MDZheHh4IiBlbnRyaWVzIGFzIGFib3ZlLgorIyA/IGZvciBTQ08g T3BlblNlcnZlciA1LjAuNywgdXNlICJtYWtlIHNjbzMydjUwNyIsICJtYWtlIHNjbzMydjUwN25l dCIKKyMgPyBmb3IgU0NPIChVbml2ZWwpIFVuaXhXYXJlIDEueCwgIm1ha2UgdW5peHdhcmUiIG9y ICJtYWtlIHVuaXh3YXJlbmV0YyIuCisjICAgICBJZiB0aGVyZSBhcmUgcHJvYmxlbXMgd2l0aCB0 aGlzIGluIEMtSyA3KyBzZWUgbm90ZXMgYXQgdW5peHdhcmUgZW50cnkuCisjICsgZm9yIFNDTyBP cGVuU2VydmVyIDYuMC4wLCAibWFrZSBzY29fb3NyNjAwIgorIyA/IGZvciBTQ08gVW5peFdhcmUg Mi4wLngsICJtYWtlIHV3MjAiCisjID8gZm9yIFNDTyBVbml4V2FyZSAyLjEuMCwgIm1ha2UgdXcy MSIKKyMgPyBmb3IgU0NPIFVuaXhXYXJlIDIuMS4zLCAibWFrZSB1dzIxMyIKKyMgKyBmb3IgU0NP IFVuaXhXYXJlIDcsICJtYWtlIHV3NyIgKGluY2x1ZGVzIGxhcmdlIGZpbGUgc3VwcG9ydCkKKyMg PyBmb3IgU0NPIFVuaXhXYXJlIDcgd2l0aCBJS1NEIHN1cHBvcnQsICJtYWtlIHV3N2lrc2QiIG9y ICJtYWtlIHV3N2lrc2R1ZGsiCisjID8gZm9yIFNDTyBVbml4V2FyZSA3IHdpdGggT3BlblNTTCwg Im1ha2UgdXc3c3NsIgorIyA/IGZvciBTQ08gKENhbGRlcmEpIE9wZW4gVU5JWCA4LCAibWFrZSBv dTgiCisjID8gZm9yIFNoYXJwIFphdXJ1cyBTTDU1MDAgUERBLCAibWFrZSB6c2w1NTAwIi4KKyMg PyBmb3IgU2VxdWVudCB3aXRoIERZTklYL3B0eCAxLjIuMSwgIm1ha2UgZHluaXhwdHgxMiIKKyMg PyBmb3IgU2VxdWVudCB3aXRoIERZTklYL3B0eCAxLjMgb3IgMS40IHdpdGggVENQL0lQLCAibWFr ZSBkeW5peHB0eDEzIgorIyA/IGZvciBTZXF1ZW50IHdpdGggRFlOSVgvcHR4IDIuMCBvciAyLjEg d2l0aCBUQ1AvSVAsICJtYWtlIGR5bml4cHR4MjAiCisjICAgICBvciAiZHluaXhwdHgyMGMiCisj ID8gZm9yIFNlcXVlbnQgd2l0aCBEWU5JWC9wdHggMi4xLjYgb24gaTQ4NiwgImR5bml4cHR4MjE2 YyIKKyMgPyBmb3IgU2VxdWVudCB3aXRoIERZTklYL3B0eCBWNC4xLjMgd2l0aCBUQ1AvSVAsICJt YWtlIGR5bml4cHR4NDFjIgorIyA/IGZvciBTZXF1ZW50IHdpdGggRFlOSVgvcHR4IFY0LjQuMiB3 aXRoIFRDUC9JUCwgIm1ha2UgZHluaXhwdHg0NCIKKyMgPyBmb3IgU2VxdWVudCBCYWxhbmNlIDgw MDAgb3IgQjggd2l0aCBEWU5JWCAzLjAueHgsICJtYWtlIGR5bml4MyIKKyMgICAgb3IgIm1ha2Ug ZHluaXgzbm9hY3UiCisjID8gZm9yIFNlcXVlbnQgU3ltbWV0cnkgUzgxIHdpdGggRFlOSVggMy4w Lnh4LCAibWFrZSBkeW5peDMiCisjID8gZm9yIFNlcXVlbnQgRFlOSVggMy4xLnh4LCAibWFrZSBk eW5peDMxIiBvciAibWFrZSBkeW5peDMxYyIKKyMgPyBmb3IgU2llbWVucy9OaXhkb3JmIFNJTklY LUwgSW50ZWwgVjUuNDEsICJtYWtlIHNpbml4NTQxaSIKKyMgKyBmb3IgU2llbWVucy9OaXhkb3Jm IFNJTklYLU4gTUlQUyBWNS40MiwgIm1ha2Ugc2luaXg1NDIiCisjID8gZm9yIFNpZW1lbnMvTml4 ZG9yZiBTSU5JWC1QIE1JUFMgVjUuNDIgd2l0aCBnY2MsICJtYWtlIHNpbml4NTQyZyIKKyMgPyBm b3IgU2llbWVucy9OaXhkb3JmIFNJTklYLVogSW50ZWwgVjUuNDIsICJtYWtlIHNpbml4NTQyaSIK KyMgPyBmb3IgU2llbWVucy9OaXhkb3JmIFJlbGlhbnQgVU5JWCBWNS40MywgIm1ha2Ugc25pNTQz IgorIyA/IGZvciBTaWVtZW5zL05peGRvcmYgUmVsaWFudCBVTklYIFY1LjQ0LCAibWFrZSBzbmk1 NDQiCisjID8gZm9yIFNpbGljb24gR3JhcGhpY3MgSXJpcyBTeXN0ZW0gViBJUklYIDMuMiBvciBl YXJsaWVyLCAibWFrZSBpcmlzIgorIyA/IGZvciBTaWxpY29uIEdyYXBoaWNzIFN5cyBWIFIzIHdp dGggSVJJWCAzLjMgb3IgbGF0ZXIsICJtYWtlIHN5czVyMyIKKyMgPyBmb3IgU2lsaWNvbiBHcmFw aGljcyBJcmlzIEluZGlnbyB3aXRoIElSSVggNC4wIG9yIDUuMCwgIm1ha2UgaXJpeDQwIiBvcgor IyAgICAgKHRvIGluY2x1ZGUgWWVsbG93IFBhZ2VzIGFuZCBDdXJzZXMpICJtYWtlIGlyaXg0MHlw YyIKKyMgPyBmb3IgU2lsaWNvbiBHcmFwaGljcyBJcmlzIEluZGlnbyBvciBFbGFuIHdpdGggSVJJ WCA0LjAueCB3aXRoIG1pY3JvY29kZQorIyAgICAgb3B0aW1pemF0aW9uIGFuZCAtTzQsICJtYWtl IGlyaXg0MHUiIG9yICJpcml4NDB1YyIgKGFuZCByZWFkIG5vdGVzCisjICAgICBhY2NvbXBhbnlp bmcgdGhlc2UgZW50cmllcykuCisjID8gZm9yIFNpbGljb24gR3JhcGhpY3MgSVJJWCA1LjEsICJt YWtlIGlyaXg1MSIgb3IgImlyaXg1MXgiIChubyBvcHRpbWl6ZSkKKyMgPyBmb3IgU2lsaWNvbiBH cmFwaGljcyBJUklYIDUuMiwgIm1ha2UgaXJpeDUyIgorIyA/IGZvciBTaWxpY29uIEdyYXBoaWNz IElSSVggNS4zLCAibWFrZSBpcml4NTMiIG9yICJpcml4NTN4IiAobm8gb3B0aW1pemUpCisjID8g Zm9yIFNpbGljb24gR3JhcGhpY3MgSVJJWCA2LjAsICJtYWtlIGlyaXg2MCIuCisjID8gZm9yIFNp bGljb24gR3JhcGhpY3MgSVJJWCA2LjIsICJtYWtlIGlyaXg2MiIuCisjID8gZm9yIFNpbGljb24g R3JhcGhpY3MgSVJJWCA2LjMsICJtYWtlIGlyaXg2MyIuCisjID8gZm9yIFNpbGljb24gR3JhcGhp Y3MgSVJJWCA2LjQsICJtYWtlIGlyaXg2NCIgb3IgIm1ha2UgaXJpeDY0Z2NjIi4KKyMgKyBmb3Ig U2lsaWNvbiBHcmFwaGljcyAoU0dJKSBJUklYIDYuNSwgIm1ha2UgaXJpeDY1IgorIyArICAgb3Ig Im1ha2UgaXJpeDY1bWlwczIiIHRvIGZvcmNlIE1JUFMyLCBvciAibWFrZSBpcml4NjVnY2MiIGZv ciBHQ0MuCisjICsgZm9yIFNpbGljb24gR3JhcGhpY3MgKFNHSSkgSVJJWCA2LjUsICJtYWtlIGly aXg2NSIgb3IgIm1ha2UgaXJpeDY1bWlwczIiCisjID8gZm9yIFNHSSBJUklYIDYuNSB3aXRoIFNT TC9UTFMsIFNSUCwgYW5kIFpMSUIgIm1ha2UgaXJpeDY1K3NzbCtzcnAremxpYiIKKyMgPyBmb3Ig U29sYXJpcyAyLjAtMi4zIG9uIFNQQVJDIG9yIEludGVsLCBTdW5Qcm8gQ0MsICJtYWtlIHNvbGFy aXMyeCIsCisjID8gICBvciB0byBhZGQgU3VuTGluayBYLjI1IDguMHggc3VwcG9ydCwgIm1ha2Ug c29sYXJpczJ4MjUiLgorIyA/IGZvciBTb2xhcmlzIDIuNCBidWlsdCB3aXRoIGdjYywgIm1ha2Ug c29sYXJpczI0ZyIuCisjID8gZm9yIFNvbGFyaXMgMi4wLTIuMyBvbiBTUEFSQyBvciBJbnRlbCwg R05VIENDLCAibWFrZSBzb2xhcmlzMnhnIi4KKyMgPyBmb3IgU29sYXJpcyAyLjQgd2l0aCBYLjI1 LCAibWFrZSBzb2xhcmlzMjR4MjUiLgorIyA/IGZvciBTb2xhcmlzIDIuNSBvbiBTUEFSQyBvciBJ bnRlbCwgU3VuUHJvIENDLCAibWFrZSBzb2xhcmlzMjUiLgorIyA/ICAgb3IgdG8gYWRkIFN1bkxp bmsgWC4yNSA4LjB4IHN1cHBvcnQsICJtYWtlIHNvbGFyaXMyNXgyNSIuCisjID8gZm9yIFNvbGFy aXMgMi41IG9uIFNQQVJDIG9yIEludGVsLCBHTlUgQ0MsICJtYWtlIHNvbGFyaXMyNWciLgorIyA/ IGZvciBTb2xhcmlzIDIuNiBvbiBTUEFSQyBvciBJbnRlbCwgIm1ha2Ugc29sYXJpczI2Ii4KKyMg PyBmb3IgU29sYXJpcyA3IG9uIFNQQVJDIG9yIEludGVsLCBTdW5Qcm8gQ0MsICJtYWtlIHNvbGFy aXM3Ii4KKyMgPyBmb3IgU29sYXJpcyA3IG9uIFNQQVJDIG9yIEludGVsLCBHTlUgQ0MsICJtYWtl IHNvbGFyaXM3ZyIuCisjID8gZm9yIFNvbGFyaXMgOCBvbiBTUEFSQyBvciBJbnRlbCwgU3VuUHJv IENDLCAibWFrZSBzb2xhcmlzOCIuCisjID8gZm9yIFNvbGFyaXMgOCBvbiBTUEFSQyBvciBJbnRl bCwgR05VIENDLCAibWFrZSBzb2xhcmlzOGciLgorIyArIGZvciBTb2xhcmlzIDkgb24gU1BBUkMg KG9yIEludGVsPyksIDMyLWJpdCwgU3VuUHJvIENDLCAibWFrZSBzb2xhcmlzOSIuCisjICsgZm9y IFNvbGFyaXMgOSBvbiBTUEFSQyAob3IgSW50ZWw/KSwgMzItYml0LCBHTlUgQ0MsICJtYWtlIHNv bGFyaXM5ZyIuCisjID8gZm9yIFNvbGFyaXMgOSBvbiBTUEFSQyAob3IgSW50ZWw/KSwgNjQtYml0 LCBHTlUgQ0MsICJtYWtlIHNvbGFyaXM5ZzY0Ii4KKyMgKyBmb3IgU29sYXJpcyAxMCBvbiBTUEFS QyAob3IgSW50ZWw/KSwgMzItYml0LCBTdW5Qcm8gQ0MsICJtYWtlIHNvbGFyaXMxMCIuCisjICsg Zm9yIFNvbGFyaXMgMTAgb24gU1BBUkMgNjQtYml0LCBTdW5Qcm8gQ0MsICJtYWtlIHNvbGFyaXMx MF82NCIuCisjICsgZm9yIFNvbGFyaXMgMTAgb24gU1BBUkMgKG9yIEludGVsPyksIDMyLWJpdCwg R05VIENDLCAibWFrZSBzb2xhcmlzMTBnIi4KKyMgPyBmb3IgU29sYXJpcyAxMCBvbiBTUEFSQyAo b3IgSW50ZWw/KSwgNjQtYml0LCBHTlUgQ0MsICJtYWtlIHNvbGFyaXMxMGc2NCIuCisjID8gZm9y IFNvbGJvdXJuZSA0LzUwMCB3aXRoIE9TL01QIDQgIm1ha2Ugc3Vub3M0IgorIyA/IGZvciBTb2xi b3VybmUgNC81MDAgd2l0aCBPUy9NUCA0LjEgIm1ha2Ugc3Vub3M0MSIgb3IgIm1ha2Ugc3Vub3M0 MWMiCisjID8gZm9yIFNPTlkgTkVXUyB3aXRoIE5FV1MtT1MgNC4wLjFDLCAibWFrZSBzb255bmV3 cyIKKyMgPyBmb3IgU09OWSBORVdTIHdpdGggTkVXUy1PUyA0LjEuMkMsICJtYWtlIHNvbnluZXdz IgorIyA/IGZvciBTcGVycnkvVU5JU1lTIDUwMDAvMjAsIFVUUyBWIDUuMiAzUjEsICJtYWtlIHN5 czUiCisjID8gZm9yIFNwZXJyeS9VTklTWVMgNTAwMC8zMC8zNS81MC81NSwgVVRTIFYgNS4yIDIu MDEsICJtYWtlIHVuaXN5czVyMiIKKyMgPyBmb3IgU3BlcnJ5L1VOSVNZUyA1MDAwLzgwIHdpdGgg U3lzdGVtIFYgUjMsICJtYWtlIHN5czVyMyIKKyMgPyBmb3IgU3BlcnJ5L1VOSVNZUyA1MDAwLzk1 IHdpdGggU3lzdGVtIFYgUjMsICJtYWtlIHN5czVyMyIKKyMgICAgIEZvciBVTklTWVMgU1ZSMyBp dCBtaWdodCBiZSBuZWNlc3NhcnkgdG8gIm1ha2Ugc3lzNXIzIEtGTEFHUz0tVURZTkFNSUMiCisj ID8gZm9yIFN0YXJkZW50IDE1MjAsICJtYWtlIHN5czVyMyIKKyMgPyBmb3IgU3RyYXR1cyBGVFgg Mi54LCB0cnkgIm1ha2UgZnR4IiBvciBlbHNlICJtYWtlIHN5czVyNCIgb3IgInN5czVyNHN4Igor IyA/IGZvciBTdHJhdHVzIEZUWCAzLngsIFBBLVJJU0MgMS4wIG9yIDIuMCwgIm1ha2UgZnR4IiBv ciAibWFrZSBmdHh0Y3AiCisjID8gZm9yIFN1biB3aXRoIFN1biBVTklYIDMuNSBhbmQgZ2NjLCAi bWFrZSBzdW5vczNnY2MiCisjID8gZm9yIFN1biB3aXRoIHByZS00LjAgU3VuT1MgdmVyc2lvbnMs ICJtYWtlIGJzZCIgKG9yIGFwcHJvcHJpYXRlIHZhcmlhbnQpCisjID8gZm9yIFN1biB3aXRoIFN1 bk9TIDQuMCwgQlNEIGVudmlyb25tZW50LCAibWFrZSBzdW5vczQiCisjID8gZm9yIFN1biB3aXRo IFN1bk9TIDQuMCwgQlNELCB3aXRoIFN1bkxpbmsgWC4yNSwgbWFrZSBzdW5vczR4MjUKKyMgPyBm b3IgU3VuIHdpdGggU3VuT1MgNC4xIG9yIDQuMS4xLCBCU0QgZW52aXJvbm1lbnQsICJtYWtlIHN1 bm9zNDEiCisjICAgICBvciAibWFrZSBzdW5vczQxYyIgKGN1cnNlcykgb3IgIm1ha2Ugc3Vub3M0 MWdjYyIgKGNvbXBpbGUgd2l0aCBnY2MpCisjID8gZm9yIFN1biB3aXRoIFN1bk9TIDQuMS54LCBC U0QsIHdpdGggU3VuTGluayBYLjI1IDcuMDAgb3IgZWFybGllciwKKyMgICAgICJtYWtlIHN1bm9z NDF4MjUiIG9yICJtYWtlIHN1bm9zNDF4MjVjIiAoY3Vyc2VzKQorIyA/IGZvciBTdW4gd2l0aCBT dW5PUyA0LjEsIDQuMS4xLCBBVCZUIFN5cyBWIFIzIGVudmlyb25tZW50LCAibWFrZSBzdW5vczQx czUiCisjID8gZm9yIFN1biB3aXRoIFN1bk9TIDQuMS4yLCAibWFrZSBzdW5vczQxIiBvciBhbnkg b2YgaXRzIHZhcmlhdGlvbnMuCisjICAgICBOT1RFOiAgQWxsIFN1bk9TIDQueCBzeXN0ZW1zIC0t IFNoYXJlZCBsaWJyYXJpZXMgYXJlIHVzZWQgYnkgZGVmYXVsdC4KKyMgICAgICAgSWYgdGhpcyBj YXVzZXMgcHJvYmxlbXMsIGFkZCAtQnN0YXRpYyB0byBDRkxBR1MuCisjICAgICBOT1RFMjogV2hl biBidWlsZGluZyBDLUtlcm1pdCB1bmRlciBTdW5PUyBmb3IgdGhlIEJTRCB1bml2ZXJzZSwKKyMg ICAgICAgYnV0IC91c3IvNWJpbi9jYyBpcyBhaGVhZCBvZiAvdXNyL3VjYi9jYyBpbiB5b3VyIFBB VEgsIGFkZAorIyAgICAgICAiQ0M9L3Vzci91Y2IvY2MgQ0MyPS91c3IvdWNiL2NjIiB0byB0aGUg bWFrZSBlbnRyeS4KKyMgICAgIE5PVEUzOiBJZiBhbiBleGVjdXRhYmxlIGJ1aWx0IG9uIG9uZSB0 eXBlIG9mIFN1biBoYXJkd2FyZSBkb2VzIG5vdCB3b3JrCisjICAgICAgIG9uIGFub3RoZXIgdHlw ZSwgcmVidWlsZCB0aGUgcHJvZ3JhbSBmcm9tIHNvdXJjZSBvbiB0aGUgdGFyZ2V0IG1hY2hpbmUu CisjICAgZm9yIFN1biB3aXRoIFNvbGFyaXMgMS54IHVzZSBTdW5PUyA0LjEgZW50cmllcy4KKyMg ICBmb3IgU3VuIHdpdGggU29sYXJpcyAyLjAgYW5kIGhpZ2hlciB1c2UgU29sYXJpcyBlbnRyaWVz LgorIyArIGZvciBTdW4gU1BBUkMgd2l0aCBMaW51eCwgIm1ha2UgbGludXgiCisjID8gZm9yIFN1 biBTUEFSQyB3aXRoIE9QRU5TVEVQL01hY2ggNC4xLCAibWFrZSBuZXh0cXVhZGZhdCIKKyMgPyBm b3IgU3VuIFNQQVJDIHdpdGggT1BFTlNURVAvTWFjaCA0LjIsICJtYWtlIG9wZW5zdGVwNDIiCisj IC0gZm9yIFRhbmR5IDE2LzYwMDAgd2l0aCBYZW5peCAzLjAsICJtYWtlIHRyczE2IiAoQy1LZXJt aXQgNy4wIGlzIHRvbyBiaWcpCisjID8gZm9yIFRla3Ryb25peCA2MTMwLzQxMzIvNDN4eCAoZS5n LjQzMDEpIHdpdGggVVRlayBPUywgIm1ha2UgdXRlayIKKyMgICAgIG9yIChmb3IgbW9kZWxzIHdp dGhvdXQgaGFyZHdhcmUgZmxvdyBjb250cm9sKSwgIm1ha2UgdXRla25vaHdmYyIKKyMgPyBmb3Ig VGVrdHJvbml4IFhEODggc2VyaWVzIHdpdGggVVRla1YgT1MsICJtYWtlIHV0ZWt2cjMiCisjID8g Zm9yIFRyaSBTdGFyIEZsYXNoIENhY2hlIHdpdGggRXNpeCBTVlIzLjIsICJtYWtlIHN5czVyMyIK KyMgTk9URTogVGhlIFRydTY0IGJ1aWxkcyBoYXZlIGJlZW4gZmFpbGluZyBzaW5jZSAyMDEwLCBi dXQgIm1ha2UgZGVjLW9zZiIgaXMgT0sKKyMgPyBmb3IgVHJ1NjQgVU5JWCA0LjBFLCAibWFrZSB0 cnU2NC00MGUiCisjID8gZm9yIFRydTY0IFVOSVggNC4wRiwgIm1ha2UgdHJ1NjQtNDBmIgorIyA/ IGZvciBUcnU2NCBVTklYIDQuMEcsICJtYWtlIHRydTY0LTQwZyIKKyMgPyBmb3IgVHJ1NjQgVU5J WCA1LjBBLCAibWFrZSB0cnU2NC01MGEiCisjID8gZm9yIFRydTY0IFVOSVggNS4xQSwgIm1ha2Ug dHJ1NjQtNTFhIgorIyA/IGZvciBUcnU2NCBVTklYIDUuMUIsICJtYWtlIHRydTY0LTUxYiIKKyMg PyBmb3IgVW5pc3RhciwgIm1ha2Ugc3lzNSIKKyMgPyBmb3IgVW5pc3lzIFMvNDA0MCA2ODA0MCBD VElYIFNWUjMuMiA2LjQuMSwgIm1ha2UgY3RpeCIgb3IgIm1ha2Ugc3lzNXIzIgorIyA/IGZvciBV bmlzeXMgVTUwMDAgVU5JWCBTVlIzIDYueCwgIm1ha2Ugc3lzNXIzIiBvciAibWFrZSBzeXM1cjNj IgorIyA/IGZvciBVbmlzeXMgVTYwMDAgVU5JWCBTVlI0IDEueCwgIm1ha2Ugc3lzNXI0bngiIG9y ICJtYWtlIHN5czVyNG54bmV0YyIKKyMgICBmb3IgVW5pc3lzIC4uLiAoYWxzbyBzZWUgU3BlcnJ5 KQorIyAgIGZvciBVbml2ZWwgLSBzZWUgVW5peFdhcmUKKyMgICBmb3IgVW5peHdhcmUgLSBzZWUg U0NPCisjID8gZm9yIFZhbGlkIFNjYWxkc3RhciwgIm1ha2UgdmFsaWQiCisjID8gZm9yIFdoaXRl Y2hhcGVsIE1HMDEgR2VuaXggMS4zLCAibWFrZSB3aGl0ZSIKKyMgPyBmb3IgWmlsb2cgWkVVUyAz LjIxLCAibWFrZSB6aWxvZyIKKyMKKyMgVGhlIHJlc3VsdCBzaG91bGQgYmUgYSBydW5uYWJsZSBw cm9ncmFtIGNhbGxlZCAid2VybWl0IiBpbiB0aGUgY3VycmVudAorIyBkaXJlY3RvcnkuICBBZnRl ciBzYXRpc2ZhY3RvcnkgdGVzdGluZywgeW91IGNhbiByZW5hbWUgd2VybWl0IHRvICJrZXJtaXQi CisjIGFuZCBwdXQgaXQgaW4gc29tZSBkaXJlY3RvcnkgdGhhdCdzIGluIGV2ZXJ5Ym9keSdzIFBB VEgsIHN1Y2ggYXMKKyMgL3Vzci9sb2NhbCBvciAvb3B0L2xvY2FsLgorIworIyBUbyByZW1vdmUg aW50ZXJtZWRpYXRlIGFuZCBvYmplY3QgZmlsZXMsICJtYWtlIGNsZWFuIi4KKyMgSWYgeW91ciBD IGNvbXBpbGVyIHByb2R1Y2VzIGZpbGVzIHdpdGggYW4gZXh0ZW5zaW9uIG90aGVyIHRoYW4gIm8i LAorIyB0aGVuICJtYWtlIGNsZWFuIEVYVD11IiwgIm1ha2UgY2xlYW4gRVhUPXMiLCBvciB3aGF0 ZXZlci4KKyMKKyMgVG8gcnVuIGxpbnQgb24gdGhlIHNvdXJjZSBmaWxlcywgIm1ha2UgbGludHN1 biIsICJtYWtlIGxpbnRic2QiLAorIyAibWFrZSBsaW50czUiLCBhcyBhcHByb3ByaWF0ZS4KKyMK KyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjIFNFQ1VSRSBUQVJHRVRTCisjCisj IEJlZ2lubmluZyB3aXRoIEMtS2VybWl0IDcuMCwgc2VjdXJlIHRhcmdldHMgYXJlIGluY2x1ZGVk LCBhcyBhcmUgdGhlCisjIHNvdXJjZSBtb2R1bGVzIChja3VhdCouW2NoXSwgY2tfKi5bY2hdKSBu ZWVkZWQgdG8gYnVpbGQgdGhlbS4gIFNlY3VyZQorIyB0YXJnZXQgbmFtZXMgYXJlIGxpa2UgdGhl IHJlZ3VsYXIgbmFtZXMsIGJ1dCB3aXRoIHNlY3VyaXR5IGZlYXR1cmVzCisjIGluZGljYXRlZCBi eSBwbHVzICgrKSBzaWducy4gIFRoZSBmZWF0dXJlcyBhcmU6CisjCisjIGtyYjQgICAgIE1JVCBL ZXJiZXJvcyBJVgorIyBrcmI1ICAgICBNSVQgS2VyYmVyb3MgVgorIyBvcGVuc3NsICBPcGVuU1NM IChTU0wvVExTKQorIyB6bGliICAgICBaTElCIGNvbXByZXNzaW9uIGZvciBTU0wvVExTCisjIHNy cCAgICAgIFN0YW5mb3JkIFNlY3VyZSBSZW1vdGUgUGFzc3dvcmQKKyMgcGFtICAgICAgUEFNIChw bHVnZ2FibGUgYXV0aGVudGljYXRpb24gbW9kdWxlKQorIyBzaGFkb3cgICBTaGFkb3cgUGFzc3dv cmQgRmlsZQorIworIyBZb3UgY2FuIGJ1aWxkIHRoZXNlIHRhcmdldHMgaWYgeW91IGhhdmUgdGhl IEtlcm1pdCBzb3VyY2UgZmlsZXMgYW5kIHRoZQorIyByZXF1aXJlZCBsaWJyYXJpZXMgKEtlcmJl cm9zLCBPcGVuU1NMLCBTUlAsIGV0YykgYW5kIGhlYWRlciBmaWxlcy4gIFNlZToKKyMgICBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvc2VjdXJpdHkuaHRtbAorIyBmb3Igc3BlY2lmaWMg ZGV0YWlscyByZWdhcmRpbmcgc3VwcG9ydGVkIHZlcnNpb25zLgorIworIyBOT1RFOiBPcGVuU1NM IDAuOS42IGFuZCBlYXJsaWVyIGFyZSBub3QgY29tcGF0aWJsZSB3aXRoIDAuOS43IGFuZCBsYXRl ci4KKyMgQy1LZXJtaXQgY29kZSB3YXMgb3JpZ2luYWxseSBkZXNpZ25lZCBmb3IgMC45LjYuICBU byBidWlsZCB3aXRoIDAuOS43IHlvdQorIyBtdXN0IGFkZCAtRE9QRU5TU0xfMDk3IHRvIGF2b2lk IG1pc3Npbmcgc3ltYm9scyBpbiB0aGUgREVTIGxpYnJhcnkgYW5kIHRvCisjIHVzZSB0aGUgZW50 cnkgcG9pbnRzIHRoYXQgd2VyZSByZW5hbWVkIHRvIGF2b2lkIGNvbmZsaWN0IHdpdGggS2VyYmVy b3MgNC4KKyMgSWYgeW91IGhhdmUgT3BlblNTTCAwLjkuOCwgYWRkIC1ET1BFTlNTTF8wOTgsIHdo aWNoIGlzIGEgc3lub255bSBmb3IKKyMgLURPUEVOU1NMXzA5Ny4gIElmIHlvdSBoYXZlIDEuMC4w IG9yIGxhdGVyLCBhZGQgLURPUEVOU1NMXzEwMCwgd2hpY2ggaXMKKyMgYW5vdGhlciBzeW5vbnlt LgorCisjIEluIE9wZW5TU0wgYnVpbGRzIGFkZCAtbGRsIGlmIHlvdSBnZXQgdW5yZXNvbHZlZCBy ZWZlcmVuY2VzIGZvcgorIyBkbG9wZW4sIGRsY2xvc2UsIGRsc3ltLCBhbmQvb3IgZGxlcnJvci4K KyMKKyMgSW4gb3JkZXIgdG8gYnVpbGQgYSBzZWN1cmUgdmVyc2lvbiBvZiBLZXJtaXQsIHlvdSBu ZWVkIHRvIGtub3cgdGhlIGxvY2F0aW9uCisjIG9mIHRoZSBoZWFkZXIgKGluY2x1ZGUpIGZpbGVz IGFuZCBsaWJyYXJpZXMgZm9yIHRoZSBkZXNpcmVkIGZvcm0gb2YKKyMgc2VjdXJpdHkuICBVbmxl c3MgeW91IHNwZWNpZnkgYSBsb2NhdGlvbiwgdGhpcyBtYWtlZmlsZSBsb29rcyBpbiAvdXNyL2xv Y2FsCisjIGFuZCBpZiB0aGUgcmVxdWlyZWQgZmlsZXMgYXJlIG5vdCBmb3VuZCwgdGhlIGJ1aWxk IGZhaWxzLgorIworIyBJZiB0aGUgc2VjdXJlIGhlYWRlcnMgYW5kIGxpYnJhcmllcyBhcmUgbm90 IG9uIHlvdXIgY29tcHV0ZXIsIHlvdSBoYXZlCisjIHRvIGRvd25sb2FkIGFuZCBpbnN0YWxsIHRo ZW0sIGZvciBleGFtcGxlIGZyb20gaHR0cDovL3d3dy5vcGVuc3NsLm9yZyAuCisjCisjIFRoZSBm b2xsb3dpbmcgc3ltYm9scyBhcmUgdXNlZCB0byBzcGVjaWZ5IGxpYnJhcnkgYW5kIGhlYWRlciBm aWxlIGxvY2F0aW9uczoKKyMgCitwcmVmaXggID0gL3Vzci9sb2NhbAorc3Jwcm9vdCA9ICQocHJl Zml4KQorc3Nscm9vdCA9ICQocHJlZml4KQorbWFucm9vdCA9ICQocHJlZml4KQorCitLNExJQj0t TC91c3Iva2VyYmVyb3MvbGliCitLNElOQz0tSS91c3Iva2VyYmVyb3MvaW5jbHVkZQorSzVMSUI9 LUwvdXNyL2tlcmJlcm9zL2xpYgorSzVJTkM9LUkvdXNyL2tlcmJlcm9zL2luY2x1ZGUKK1NSUExJ Qj0tTCQoc3Jwcm9vdCkvbGliCitTUlBJTkM9LUkkKHNycHJvb3QpL2luY2x1ZGUKK1NTTExJQj0t TCQoc3Nscm9vdCkvc3NsL2xpYgorU1NMSU5DPS1JJChzc2xyb290KS9zc2wvaW5jbHVkZQorCisj IFRvIG92ZXJyaWRlIHRoZXNlIGFzc2lnbm1lbnRzOyBmb3IgZXhhbXBsZSwgaWYgeW91ciBPcGVu U1NMIGZpbGVzIGFyZQorIyBub3QgaW4gL3Vzci9sb2NhbC9zc2wsIGludm9rZSB0aGUgZGVzaXJl ZCB0YXJnZXQgbGlrZSB0aGlzOgorIyAKKyMgIG1ha2Ugc29sYXJpczkrb3BlbnNzbCAiU1NMSU5D PS1JL29wdC9vcGVuc3NsLTAuOS44ay9pbmNsdWRlIiBcCisjICAgIlNTTExJQj0tTC9vcHQvb3Bl bnNzbC0wLjkuOGsvbGliIgorIworIyAoZG9uJ3Qgc2V0IHRoZSB2YXJpYWJsZXMgYW5kIHRoZW4g ZG8gIm1ha2UgLWUiIGJlY2F1c2UgdGhhdCBicmVha3MgCisjIGNoYWluaW5nIG9mIG1ha2VmaWxl IHRhcmdldHMuKQorIworIyBIZXJlIGFyZSBzb21lIHVwLXRvLWRhdGUgc2VjdXJlIHRhcmdldHMg YXMgb2YgU2VwIDIwMDk6IAorIworIyBhaXgrb3BlbnNzbDogICAgICAgICAgICAgICAgICAgICAg ICBJQk0gQUlYIDQuMiBvciBsYXRlciB3aXRoIE9wZW5TU0wKKyMgZnJlZWJzZDQ0K3NycCtvcGVu c3NsICAgICAgICAgICAgICAgRnJlZUJTRCA0LjQgd2l0aCBTUlAgYW5kIE9wZW5TU0wKKyMgZnJl ZWJzZDUwK29wZW5zc2wgICAgICAgICAgICAgICAgICAgRnJlZUJTRCA1LjAgd2l0aCBPcGVuU1NM CisjIGhwdXgxMTAwbytvcGVuc3NsOiAgICAgICAgICAgICAgICAgIEhQLVVYIDExLnh4IHdpdGgg T3BlblNTTAorIyBocHV4MTAwMGdjYytvcGVuc3NsOiAgICAgICAgICAgICAgICBIUC1VWCAxMC54 eCB3aXRoIE9wZW5TU0wgKGJ1aWxkIHdpdGggZ2NjKQorIyBocHV4MTEwMGdjYytvcGVuc3NsOiAg ICAgICAgICAgICAgICBIUC1VWCAxMS54eCB3aXRoIE9wZW5TU0wgKGJ1aWxkIHdpdGggZ2NjKQor IyBpcml4Nngra3JiNTogICAgICAgICAgICAgICAgICAgICAgICBJUklYIDYueCB3aXRoIEtlcmJl cm9zIFYKKyMgaXJpeDY1K2tyYjU6ICAgICAgICAgICAgICAgICAgICAgICAgZXRjIGV0Yy4uLgor IyBzb2xhcmlzOStvcGVuc3NsICAgICAgICAgICAgICAgICAgICBTb2xhcmlzIDksMTAsIG9yIDEx IHdpdGggT3BlbnNzbCAoU3VuIGNjKQorIyBzb2xhcmlzOWcrb3BlbnNzbCAgICAgICAgICAgICAg ICAgICBTb2xhcmlzIDksMTAsIG9yIDExIHdpdGggT3BlbnNzbCAoZ2NjKQorIyBsaW51eCtzc2wg ICAgICAgICAgICAgICAgICAgICAgICAgICBPcGVuU1NMIG9ubHkKKyMgbGludXgra3JiNStzc2wg ICAgICAgICAgICAgICAgICAgICAgTGludXggd2l0aCBLZXJiZXJvcyA1IGFuZCBPcGVuU1NMCisj IGxpbnV4K2tyYjU6ICAgICAgICAgICAgICAgICAgICAgICAgIEtlcmJlcm9zIDUgb25seQorIyAK KyMgVGhlIGZvbGxvd2luZyBzZWN1cmUgTGludXggdGFyZ2V0cyBoYXZlIG5vdCBiZWVuIHVwZGF0 ZWQgb3IgdGVzdGVkIHJlY2VudGx5LgorIyBsaW51eCtrcmI1K2tyYjQ6CisjIGxpbnV4K3NycDoK KyMgbGludXgrc3JwK3BhbToKKyMgbGludXgrc3JwK2dtcDoKKyMgbGludXgrc3JwK2dtcCtuby1k ZXM6CisjIGxpbnV4K3NycCtnbXAtZXhwb3J0OgorIyBsaW51eCtzcnArZ21wK3BhbToKKyMgbGlu dXgrc2hhZG93K3BhbToKKyMgbGludXgrb3BlbnNzbDoKKyMgbGludXgrb3BlbnNzbCtzaGFkb3c6 CisjIGxpbnV4K29wZW5zc2wremxpYitzaGFkb3crcGFtOgorIyBsaW51eCtzcnArb3BlbnNzbDoK KyMgbGludXgra3JiNStrcmI0K3NycDoKKyMgbGludXgra3JiNStrcmI0K3NycCtvcGVuc3NsOgor IyBsaW51eCtrcmI1K2tyYjQrb3BlbnNzbDoKKyMgbGludXgra3JiNStrcmI0K29wZW5zc2wrc2hh ZG93OgorIyBsaW51eCtrcmI1K2tyYjQrb3BlbnNzbCt6bGliK3NoYWRvdzoKKyMgbGludXgra3Ji NStrcmI0K3NycC1leHBvcnQ6CisjIGxpbnV4K2tyYjUra3JiNCtzcnArcGFtOgorIyBsaW51eCtr cmI1K2tyYjQrc3JwK29wZW5zc2wrcGFtLWRlYnVnOgorIyBsaW51eCtrcmI1K2tyYjQrc3JwK29w ZW5zc2wrcGFtOgorIyBsaW51eCtrcmI1K2tyYjQrc3JwK29wZW5zc2wremxpYitwYW06CisjIGxp bnV4K2tyYjUra3JiNCtvcGVuc3NsK3NoYWRvdytwYW06CisjIGxpbnV4K2tyYjUrb3BlbnNzbCt6 bGliK3NoYWRvdytwYW06CisjIAorIyBUaGUgZm9sbG93aW5nIGhhdmUgbm90IGJlZW4gdGVzdGVk IHJlY2VudGx5IGVpdGhlciBhbmQgbWlnaHQKKyMgbmVlZCBhZGp1c3RtZW50LgorIworIyBtYWNv c3gra3JiNStzc2w6ICAgICBNYWMgT1MgWCAxMC4zLjkgb3IgbGF0ZXIgKyBPcGVuU1NMIGFuZCBL ZXJiZXJvcyA1CisjIG1hY29zeDEwMytzZWN1cmU6ICAgIFRoaXMgb25lIGlzIHByb2JhYmx5IHJl ZHVuZGFudAorIyBuZXRic2Qrb3BlbnNzbDogICAgICBOZXRCU0Qgd2l0aCBPcGVuU1NMCisjIG9w ZW5ic2QzMCtzc2w6ICAgICAgIE9wZW5CU0QgMy4wIHdpdGggT3BlblNTTAorIyByZWRoYXQ3MSxy ZWRoYXQ3MixyZWRoYXQ3MyxyZWRoYXQ4MCxyZWRoYXQ5IChLcmI1LE9wZW5TU0wsU2hvd2RvdyxQ QU0sWmxpYikKKyMgc2NvMzJ2NTAwbmV0K3NzbDoKKyMgc2NvMzJ2NTA1bmV0K3NzbDoKKyMgc29s YXJpczJ4K2tyYjQ6CisjIHNvbGFyaXMyeGcra3JiNDoKKyMgc29sYXJpczJ4ZytvcGVuc3NsK3Bh bStzaGFkb3c6CisjIHNvbGFyaXMyeGcrb3BlbnNzbCt6bGliK3BhbStzaGFkb3c6CisjIHNvbGFy aXMyeGcra3JiNStrcmI0K29wZW5zc2wrc2hhZG93OgorIyBzb2xhcmlzMjUra3JiNDoKKyMgc29s YXJpczI1ZytrcmI0OgorIyBzb2xhcmlzMjZnK29wZW5zc2w6CisjIHNvbGFyaXM4ZytvcGVuc3Ns K3psaWIrcGFtK3NoYWRvdzoKKyMgc29sYXJpczhnK2tyYjQ6CisjIHNvbGFyaXM5ZytvcGVuc3Ns K3psaWIrcGFtK3NoYWRvdzoKKyMgc29sYXJpczlnK29wZW5zc2wrc2hhZG93K3BhbSt6bGliCisj IHN1bm9zNDFnY2Mra3JiNDogICAgICAgICAgICAgICAgICAgIFN1bk9TIDQuMSBidWlsdCB3aXRo IGdjYyB3aXRoIEtlcmJlcm9zIElWCisjIHN1bm9zNDFnY2Mrb3BlbnNzbDogICAgICAgICAgICAg ICAgIFN1bk9TIDQuMSBidWlsdCB3aXRoIGdjYyB3aXRoIE9wZW5TU0wKKyMgc3Vub3M0MWdjYytr cmI0K29wZW5zc2w6ICAgICAgICAgICAgLi4ud2l0aCBLZXJiZXJvcyBJViBhbmQgT3BlblNTTAor IyBzdW5vczQxZ2NjK2tyYjQrb3BlbnNzbCt6bGliOiAgICAgICBkaXR0bywgcGx1cyBaTElCIGNv bXByZXNzaW9uCisjIHN1bm9zNDFnY2Mra3JiNCtzcnArb3BlbnNzbCt6bGliOiAgIGRpdHRvLCBw bHVzIFNSUAorIyBzdW5vczQxZ2NjK3NycCtvcGVuc3NsK3psaWI6CisjIHRydTY0LTUxYi1vcGVu c3NsOiAgICAgICAgICAgICAgICAgIFRydTY0IChEaWdpdGFsKSBVbml4IDUuMUIgd2l0aCBPcGVu U1NMCisjIHV3N3NzbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVuaXh3YXJlIDcgd2l0 aCBTU0wKKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyAgQ29tcGlsZSBhbmQgTGluayB2YXJp YWJsZXM6CisjCisjICBFWFQgaXMgdGhlIGV4dGVuc2lvbiAoZmlsZSB0eXBlKSBmb3Igb2JqZWN0 IGZpbGVzLCBub3JtYWxseSBvLgorIyAgU2VlIE1JTklYIGVudHJ5IGZvciB3aGF0IHRvIGRvIGlm IGFub3RoZXIgZmlsZXR5cGUgbXVzdCBiZSB1c2VkLgorIworRVhUPW8KKyNMTktGTEFHUz0KK1NI QVJFRExJQj0KK0NDPSBjYworQ0MyPSBjYworTUFLRT0gbWFrZQorU0hFTEw9L2Jpbi9zaAorCisj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMKKyMgKEFuY2llbnQpIFVOSVggVjctc3BlY2lmaWMgdmFyaWFibGVz LgorIyBUaGVzZSBhcmUgc2V0IHVwIGZvciBQZXJraW4tRWxtZXIgMzIzMCBWNyBVbml4OgorIwor UFJPQz1wcm9jCitESVJFQ1Q9CitOUFJPQz1ucHJvYworTlBUWVBFPWludAorQk9PVEZJTEU9L2Vk aXRpb243CisjCisjICggRm9yIG9sZCBUYW5keSBUUlMtODAgTW9kZWwgMTZBIG9yIDYwMDAgVjct YmFzZWQgWGVuaXgsIHVzZSBQUk9DPV9wcm9jLAorIyAgIERJUkVDVD0tRERJUkVDVCwgTlBST0M9 X05wcm9jLCBOUFRZUEU9c2hvcnQsIEJPT1RGSUxFPS94ZW5peCApCisjCisKKyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIworIyBTQU1QTEUgSU5TVEFMTEFUSU9OIFNDUklQVAorIworIyBNb2RpZnkgdG8gc3Vp dCB5b3VyIG93biBjb21wdXRlcidzIGZpbGUgb3JnYW5pemF0aW9uIGFuZCBwZXJtaXNzaW9ucy4g IElmCisjIHlvdSBkb24ndCBoYXZlIHdyaXRlIGFjY2VzcyB0byB0aGUgZGVzdGluYXRpb24gZGly ZWN0b3JpZXMsICJtYWtlIGluc3RhbGwiCisjIGZhaWxzLiAgSW4gbW9zdCBjYXNlcywgYSByZWFs IGluc3RhbGxhdGlvbiBhbHNvIHJlcXVpcmVzIHlvdSB0byBjaG93biAvCisjIGNoZ3JwIHRoZSBL ZXJtaXQgYmluYXJ5IGZvciB0aGUgVVVDUCBsb2NrZmlsZSBhbmQvb3IgdHR5IGRldmljZXMsIGFu ZAorIyBwZXJoYXBzIGFsc28gdG8gY2htb2QgK3MgdGhlIGNvcnJlc3BvbmRpbmcgcGVybWlzc2lv biBmaWVsZHMuCisjCisjIERlZmF1bHQgYmluYXJ5LCBtYW4sIGFuZCBkb2MgZGlyZWN0b3JpZXMg YXJlIHN1cHBsaWVkIGJlbG93LiAgWW91IGNhbgorIyBvdmVycmlkZSB0aGVtIGluIHlvdXIgJ21h a2UnIGNvbW1hbmQuICBFeGFtcGxlczoKKyMKKyMgICBtYWtlIGluc3RhbGwgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICMgQWNjZXB0IGRlZmF1bHRzLgorIyAgIG1ha2UgIklORk9E SVI9L3Vzci9zaGFyZS9saWIva2VybWl0IiBpbnN0YWxsICAgIyBPdmVycmlkZSBJTkZPRElSIGRl ZmF1bHQuCisjCisjIFlvdSBjYW4gYWxzbyBidWlsZCBhbmQgaW5zdGFsbCBpbiBvbmUgc3RlcCwg ZS5nLjoKKyMKKyMgICBtYWtlIGxpbnV4IGluc3RhbGwKKyMKKyMgSWYgeW91IHVzZSB0aGUgJ2lu c3RhbGwnIHRhcmdldCB0byBpbnN0YWxsIEMtS2VybWl0LCBpdCBjcmVhdGVzIGFuCisjIFVOSU5T VEFMTCBzY3JpcHQgdGhhdCBjYW4gYmUgdXNlZCB0byB1bmluc3RhbGwgaXQuCisjCitXRVJNSVQg PSBtYWtld2hhdAorQklOQVJZID0gd2VybWl0CitERVNURElSID0KK0JJTkRJUiA9ICQocHJlZml4 KS9iaW4KK01BTkRJUiA9ICQobWFucm9vdCkvbWFuL21hbjEKK01BTkVYVCA9IDEKK1NSQ0RJUiA9 CitJTkZPRElSID0KK0NFUlRESVIgPQorCitURVhURklMRVMgPSBDT1BZSU5HLlRYVCBja2Nid3Iu dHh0IGNrdWJ3ci50eHQgY2t1aW5zLnR4dCBja2NjZmcudHh0IFwKKwkJY2tjcGxtLnR4dCBja2Vy bWl0LmluaSBja2VybW9kLmluaSBja2VybWl0NzAudHh0IGNrZXJtaXQ4MC50eHQKKworQUxMID0g JChXRVJNSVQpCisKK2FsbDogJChBTEwpCisKKy5jLm86CisJJChDQykgJChDRkxBR1MpIC1ES1RB UkdFVD1cIiQoS1RBUkdFVClcIiAtYyAkPAorCisjQ2xlYW4gdXAgaW50ZXJtZWRpYXRlIGFuZCBv YmplY3QgZmlsZXMKK2NsZWFuOgorCUBlY2hvICdSZW1vdmluZyBvYmplY3QgZmlsZXMuLi4nCisJ LXJtIC1mIGNrY21haS4kKEVYVCkgY2t1Y21kLiQoRVhUKSBja3V1c3IuJChFWFQpIGNrdXVzMi4k KEVYVCkgXAorY2t1dXMzLiQoRVhUKSBja3V1czQuJChFWFQpIGNrdXVzNS4kKEVYVCkgY2tjcHJv LiQoRVhUKSBja2NmbnMuJChFWFQpIFwKK2NrY2ZuMi4kKEVYVCkgY2tjZm4zLiQoRVhUKSBja3V4 bGEuJChFWFQpIGNrdWNvbi4kKEVYVCkgY2t1dGlvLiQoRVhUKSBcCitja3VmaW8uJChFWFQpIGNr dWRpYS4kKEVYVCkgY2t1c2NyLiQoRVhUKSBja3dhcnQuJChFWFQpIGNrdXVzeC4kKEVYVCkgXAor Y2t1dXN5LiQoRVhUKSBja2NuZXQuJChFWFQpIGNrdXVzNi4kKEVYVCkgY2t1dXM3LiQoRVhUKSBj a3VzaWcuJChFWFQpIFwKK2NrdWNucy4kKEVYVCkgY2tjbWRiLiQoRVhUKSBja3VhdGguJChFWFQp IGNrY3RlbC4kKEVYVCkgY2tjbGliLiQoRVhUKSBcCitja2N1bmkuJChFWFQpIGNrX2NycC4kKEVY VCkgY2tfc3NsLiQoRVhUKSBja3VwdHkuJChFWFQpIGNrY2Z0cC4kKEVYVCkgXAorY2tjcHJvLmMg d2FydAorCitzaG93OgorCUBlY2hvIHByZWZpeD0kKHByZWZpeCkKKwlAZWNobyBzcnByb290PSQo c3Jwcm9vdCkKKwlAZWNobyBzc2xyb290PSQoc3Nscm9vdCkKKwlAZWNobyBtYW5yb290PSQobWFu cm9vdCkKKwlAZWNobyBLNExJQj0kKEs0TElCKQorCUBlY2hvIEs0SU5DPSQoSzRJTkMpCisJQGVj aG8gSzVMSUI9JChLNUxJQikKKwlAZWNobyBLNUlOQz0kKEs1SU5DKQorCUBlY2hvIFNSUExJQj0k KFNSUExJQikKKwlAZWNobyBTUlBJTkM9JChTUlBJTkMpCisJQGVjaG8gU1NMTElCPSQoU1NMTElC KQorCUBlY2hvIFNTTElOQz0kKFNTTElOQykKKwlAZXhpdAorCisjIEluc3RhbGwgQy1LZXJtaXQg YWZ0ZXIgYnVpbGRpbmcgLS0gSU1QT1JUQU5UOiBSZWFkIHRoZSBpbnN0cnVjdGlvbnMgYWJvdmUK KyMgKFNBTVBMRSBJTlNUQUxMQVRJT04gU0NSSVBUKS4gIEZvciBTU0wvVExTIHZlcnNpb25zLCBj YV9jZXJ0cy5wZW0gZmlsZQorIyBzaG91bGQgYmUgaW5zdGFsbGVkIGluIHRoZSBhcHByb3ByaWF0 ZSBwbGFjZSBmb3IgeW91ciBPcGVuU1NMIGxpYnJhcnksIGUuZy46CisjCisjICAgY3AgY2FfY2Vy dHMucGVtIC91c3IvbG9jYWwvc3NsLworIyAgIGNwIGNhX2NlcnRzLnBlbSAvdXNyL3NoYXJlL3Nz bC8KKyMKKyMgVG8gbWFrZSBzdXJlICdtYW4nIG5vdGljZXMgdGhlIG5ldyBzb3VyY2UgZmlsZSBh bmQgZG9lc24ndCBrZWVwCisjIHNob3dpbmcgdGhlIG9sZCBmb3JtYXR0ZWQgdmVyc2lvbiwgcmVt b3ZlIHRoZSBvbGQgZm9ybWF0dGVkIHZlcnNpb24sCisjIHNvbWV0aGluZyBsaWtlIHRoaXM6Cisj CQlybSAtZiAkKE1BTkRJUikvLi4vY2F0JChNQU5FWFQpL2tlcm1pdC4kKE1BTkVYVCkKKyMgb3Ig dGhpcyAod2hpY2ggcmVxdWlyZXMgQ0FURElSIHRvIGJlIGRlZmluZWQpOgorIwkJcm0gLWYgJChD QVRESVIpL2tlcm1pdC4kKE1BTkVYVCkKKyMKKyMgQXMgb2YgQy1LZXJtaXQgOC4wLjIwNSB0aGlz IHRhcmdldCBhbHNvIGJ1aWxkcyBhbiBVTklOU1RBTEwgc2NyaXB0LCBhbmQKKyMgc28gaXQgbWln aHQgYmUgdG9vIGxvbmcgZm9yIHNvbWUgb2xkIEJvdXJuZSBzaGVsbHMsIGluIHdoaWNoIGNhc2Ug eW91IGNhbgorIyB1c2UgYSBkaWZmZXJlbnQgc2hlbGw6CisjCisjICAgbWFrZSBTSEVMTD1rc2gg aW5zdGFsbAorIyAgIG1ha2UgU0hFTEw9L2Jpbi9wb3NpeC9zaCBpbnN0YWxsCisjCitpbnN0YWxs OgorCUBlY2hvIEluc3RhbGxpbmcgQy1LZXJtaXQgdmVyc2lvbiAkKENLVkVSKS4uLjtcCisJcm0g LWYgVU5JTlNUQUxMO1wKKwlleGVjIDM+Li9VTklOU1RBTEw7XAorCWVjaG8gIiMgQy1LZXJtaXQg VU5JTlNUQUxMIHNjcmlwdCIgPiYzO1wKKwllY2hvICIjIGBkYXRlYFxuIiA+JjM7XAorCWVjaG8g IkNLVkVSPSQoQ0tWRVIpIiA+JjM7XAorCWVjaG8gIlByTiBVbmluc3RhbGxpbmcgQy1LZXJtaXQg dmVyc2lvbiAkKENLVkVSKS4uLiIgPiYzO1wKKwllY2hvIERFU1RESVI9JChERVNURElSKTtcCisJ aWYgdGVzdCAtbiAiJChERVNURElSKSI7IHRoZW5cCisJCWlmIHRlc3QgLWQgJChERVNURElSKTsg dGhlblwKKwkJCWVjaG8gICIkKERFU1RESVIpIGV4aXN0cy4uLlxuIjtcCisJCWVsc2VcCisJCQll Y2hvICJDcmVhdGluZyAkKERFU1RESVIpLi4uIjtcCisJCQlERVNURElSPWBlY2hvICQoREVTVERJ UikgfCBzZWQgJ3MhLyokJCEhJ2A7XAorCQkJbWtkaXIgJCRERVNURElSICB8fCBleGl0IDE7XAor CQlmaTtcCisJCWNobW9kIDc1NSAkKERFU1RESVIpIHx8IGV4aXQgMTtcCisJZmk7XAorCWVjaG8g QklOQVJZPSQoQklOQVJZKTtcCisJaWYgdGVzdCAtZiAkKEJJTkFSWSk7IHRoZW5cCisJCWxzIC1s ICQoQklOQVJZKTtcCisJZWxzZVwKKwkJZWNobyAiPyQoQklOQVJZKSBub3QgZm91bmQiO1wKKwkJ ZXhpdCAxO1wKKwlmaTtcCisJaWYgdGVzdCAteiAiJChERVNURElSKSQoQklORElSKSI7IHRoZW5c CisJCWVjaG8gIkJpbmFyeSBkaXJlY3Rvcnkgbm90IHNwZWNpZmllZCI7XAorCQlleGl0IDE7XAor CWZpO1wKKwlpZiB0ZXN0IC1kICQoREVTVERJUikkKEJJTkRJUik7IHRoZW5cCisJCWVjaG8gICIk KERFU1RESVIpJChCSU5ESVIpIGV4aXN0cy4uLiI7XAorCWVsc2VcCisJCWVjaG8gIkNyZWF0aW5n ICQoREVTVERJUikkKEJJTkRJUikvLi4uIjtcCisJCW1rZGlyICAgICAkKERFU1RESVIpJChCSU5E SVIpIHx8IGV4aXQgMTtcCisJCWNobW9kIDc1NSAkKERFU1RESVIpJChCSU5ESVIpO1wKKwlmaTtc CisJcm0gLWYgJChERVNURElSKSQoQklORElSKS9rZXJtaXQ7XAorCWNwICQoQklOQVJZKSAkKERF U1RESVIpJChCSU5ESVIpL2tlcm1pdCB8fCBleGl0IDE7XAorCWNobW9kIDc1NSAgICAkKERFU1RE SVIpJChCSU5ESVIpL2tlcm1pdCB8fCBleGl0IDE7XAorCXJtIC1mICAgICAgICAkKERFU1RESVIp JChCSU5ESVIpL2tlcm1pdC1zc2hzdWI7XAorCWxuIC1zICAgICAgICAkKERFU1RESVIpJChCSU5E SVIpL2tlcm1pdFwKKwkJICAgICAkKERFU1RESVIpJChCSU5ESVIpL2tlcm1pdC1zc2hzdWIgfHwg ZXhpdCAxO1wKKwllY2hvICdzZXQgZmxhZz1mXG5QckMgUmVtb3ZpbmcgYmluYXJpZXMnID4mMztc CisJZWNobyAiUm1GICQoREVTVERJUikkKEJJTkRJUikva2VybWl0LXNzaHN1YiIgPiYzO1wKKwll Y2hvICJSbUYgJChERVNURElSKSQoQklORElSKS9rZXJtaXQiID4mMztcCisJaWYgdGVzdCAtZiBj a2VybWl0LmluaTsgdGhlblwKKwkJZWNobyAiIyEkKEJJTkRJUikva2VybWl0IiA+XAorCQkJJChE RVNURElSKSQoQklORElSKS9fdG1wLmluaTtcCisJCWNhdCBja2VybWl0LmluaSA+PiAkKERFU1RE SVIpJChCSU5ESVIpL190bXAuaW5pO1wKKwkJbXYgJChERVNURElSKSQoQklORElSKS9fdG1wLmlu aVwKKwkJICAgJChERVNURElSKSQoQklORElSKS9ja2VybWl0LmluaTtcCisJCWNobW9kIDc1NSAk KERFU1RESVIpJChCSU5ESVIpL2NrZXJtaXQuaW5pO1wKKwkJZWNobyAiUm1GICQoREVTVERJUikk KEJJTkRJUikvY2tlcm1pdC5pbmkiID4mMztcCisJZmk7XAorCWVjaG87XAorCWVjaG8gJ0VmTScg PiYzO1wKKwllY2hvICJLZXJtaXQgYmluYXJ5IGluc3RhbGxlZDoiO1wKKwlscyAtbCAkKERFU1RE SVIpJChCSU5ESVIpL2tlcm1pdFwKKwkgICAgICAkKERFU1RESVIpJChCSU5ESVIpL2tlcm1pdC1z c2hzdWJcCisJICAgICAgJChERVNURElSKSQoQklORElSKS9ja2VybWl0LmluaTtcCisJZWNobztc CisJZWNobyAiIFdBUk5JTkc6IElmIEMtS2VybWl0IGlzIHRvIGJlIHVzZWQgZm9yIGRpYWxpbmcg b3V0LCI7XAorCWVjaG8gIiB5b3UgbXVzdCBjaGFuZ2UgaXRzIG93bmVyIGFuZCBncm91cCBhbmQg cGVybWlzc2lvbnMiO1wKKwllY2hvICIgdG8gbWF0Y2ggdGhlICdjdScgcHJvZ3JhbS4gIFNlZSB0 aGUgY2t1aW5zLnR4dCBmaWxlIjtcCisJZWNobyAiIGZvciBkZXRhaWxzLiI7XAorCWVjaG87XAor CWVjaG8gTUFORElSPSQoTUFORElSKTtcCisJaWYgdGVzdCAtbiAiJChERVNURElSKSQoTUFORElS KSI7IHRoZW5cCisJCWlmIHRlc3QgLWQgJChERVNURElSKSQoTUFORElSKTsgdGhlblwKKwkJCWVj aG8gICIkKERFU1RESVIpJChNQU5ESVIpIGV4aXN0cy4uLiI7XAorCQllbHNlXAorCQkJZWNobyAi Q3JlYXRpbmcgJChNQU5ESVIpLi4uIjtcCisJCQlta2RpciAkKE1BTkRJUikgfHwgZXhpdCAxO1wK KwkJCWNobW9kIDc1NSAkKE1BTkRJUikgfHwgZXhpdCAxO1wKKwkJZmk7XAorCQlybSAtZiAkKERF U1RESVIpJChNQU5ESVIpL2tlcm1pdC4kKE1BTkVYVCk7XAorCQljcCBja3VrZXIubnIgJChERVNU RElSKSQoTUFORElSKS9rZXJtaXQuJChNQU5FWFQpIHx8IGV4aXQgMTtcCisJCWNobW9kIDY0NCAk KERFU1RESVIpJChNQU5ESVIpL2tlcm1pdC4kKE1BTkVYVCkgfHwgZXhpdCAxO1wKKwkJZWNobyAn c2V0IGZsYWc9ZlxuUHJDIFJlbW92aW5nIG1hbiBwYWdlcycgPiYzO1wKKwkJZWNobyAiUm1GICQo REVTVERJUikkKE1BTkRJUikva2VybWl0LiQoTUFORVhUKSIgPiYzO1wKKwkJZWNobyAnRWZNJyA+ JjM7XAorCQllY2hvO1wKKwllbHNlXAorCQllY2hvICJOb3QgaW5zdGFsbGluZyBtYW4gcGFnZSFc biI7XAorCWZpO1wKKwllY2hvIENFUlRESVI9JChDRVJURElSKTtcCisJaWYgdGVzdCAtbiAiJChD RVJURElSKSI7IHRoZW5cCisJCWlmIHRlc3QgLWYgY2FfY2VydHMucGVtOyB0aGVuXAorCQkJaWYg dGVzdCAtZCAkKENFUlRESVIpOyB0aGVuXAorCQkJCWVjaG8gICIkKENFUlRESVIpIGV4aXN0cy4u LiI7XAorCQkJZWxzZVwKKwkJCQllY2hvICJDcmVhdGluZyAkKENFUlRESVIpLi4uIjtcCisJCQkJ bWtkaXIgJChDRVJURElSKSB8fCBleGl0IDE7XAorCQkJCWNobW9kIDc1NSAkKENFUlRESVIpIHx8 IGV4aXQgMTtcCisJCQlmaTtcCisJCQllY2hvICJJbnN0YWxsaW5nIGNlcnRpZmljYXRlcyBmaWxl Li4uIjtcCisJCQljcCBjYV9jZXJ0cy5wZW0gJChDRVJURElSKSB8fCBleGl0IDE7XAorCQkJZWNo byAnc2V0IGZsYWc9ZicgPiYzO1wKKwkJCWVjaG8gJ1ByQyBSZW1vdmluZyBjZXJ0aWZpY2F0ZXMg ZmlsZScgPiYzO1wKKwkJCWVjaG8gIlJtRiAkKENFUlRESVIpL2NhX2NlcnRzLnBlbSIgPiYzO1wK KwkJCWVjaG8gJ0VmTScgPiYzO1wKKwkJCWVjaG87XAorCQlmaTtcCisJZWxzZVwKKwkJZWNobyAi Tm90IGluc3RhbGxpbmcgY2VydGlmaWNhdGVzIGZpbGUhXG4iO1wKKwlmaTtcCisJZWNobyBTUkNE SVI9JChERVNURElSKSQoU1JDRElSKTtcCisJaWYgdGVzdCAtbiAiJChTUkNESVIpIjsgdGhlblwK KwkJZWNobyAiSW5zdGFsbGluZyBzb3VyY2UgZmlsZXMuLi4iO1wKKwkJaWYgdGVzdCAtZCAkKERF U1RESVIpJChTUkNESVIpOyB0aGVuXAorCQkJZWNobyAgIiQoREVTVERJUikkKFNSQ0RJUikgZXhp c3RzLi4uIjtcCisJCWVsc2VcCisJCQllY2hvICJDcmVhdGluZyAkKERFU1RESVIpJChTUkNESVIp Ly4uLiI7XAorCQkJbWtkaXIgICAgICQoREVTVERJUikkKFNSQ0RJUikgfHwgZXhpdCAxO1wKKwkJ CWNobW9kIDc1NSAkKERFU1RESVIpJChTUkNESVIpO1wKKwkJZmk7XAorCQllY2hvICJDb3B5aW5n IHNvdXJjZSBmaWxlcyB0byAkKERFU1RESVIpJChTUkNESVIpLi4uIjtcCisJCWVjaG8gJ3NldCBm bGFnPWZcblByQyBSZW1vdmluZyBzb3VyY2UgZmlsZXMnID4mMztcCisJCWZvciBUZXh0RmlsZSBp biBDT1BZSU5HLlRYVCBja1tjdXdfXSouW2N3aF0gbWFrZWZpbGU7IGRvXAorCQkJY3AgJCRUZXh0 RmlsZSAkKERFU1RESVIpJChTUkNESVIpLyAmJiBlY2hvICIuXGMiO1wKKwkJCWVjaG8gIlJtRiAk KERFU1RESVIpJChTUkNESVIpLyQkVGV4dEZpbGUiID4mMztcCisJCWRvbmU7IGVjaG87XAorCQll Y2hvICdFZk0nID4mMztcCisJCSggY2QgJChERVNURElSKSQoU1JDRElSKS8gJiZcCisJCWxzIC1s IENPUFlJTkcuVFhUIGNrW2N1d19dKi5bY3doXSBtYWtlZmlsZSApO2VjaG87XAorCWVsc2VcCisJ CWVjaG8gIk5vdCBpbnN0YWxsaW5nIHNvdXJjZSBjb2RlIVxuIjtcCisJZmk7XAorCWVjaG8gSU5G T0RJUj0kKERFU1RESVIpJChJTkZPRElSKTtcCisJaWYgdGVzdCAtbiAiJChJTkZPRElSKSI7IHRo ZW5cCisJCWVjaG8gIkluc3RhbGxpbmcgaW5mbyBmaWxlcy4uLiI7XAorCQlpZiB0ZXN0IC1kICQo REVTVERJUikkKElORk9ESVIpOyB0aGVuXAorCQkJZWNobyAgIiQoREVTVERJUikkKElORk9ESVIp IGV4aXN0cy4uLiI7XAorCQllbHNlXAorCQkJZWNobyAiQ3JlYXRpbmcgJChERVNURElSKSQoSU5G T0RJUikvLi4uIjtcCisJCQlta2RpciAgICAgJChERVNURElSKSQoSU5GT0RJUikgfHwgZXhpdCAx O1wKKwkJCWNobW9kIDc1NSAkKERFU1RESVIpJChJTkZPRElSKTtcCisJCWZpO1wKKwkJZWNobyAi Q29weWluZyB0ZXh0IGZpbGVzIHRvICQoREVTVERJUikkKElORk9ESVIpLi4uIjtcCisJCWVjaG8g J3NldCBmbGFnPWZcblByQyBSZW1vdmluZyB0ZXh0IGZpbGVzJyA+JjM7XAorCQlGaWxlQ29weUxp c3Q9Jyc7XAorCQlmb3IgVGV4dEZpbGUgaW4gJChURVhURklMRVMpOyBkb1wKKwkJCXRlc3QgLWYg JCRUZXh0RmlsZSB8fCBjb250aW51ZTtcCisJCQljcCAkJFRleHRGaWxlICQoREVTVERJUikkKElO Rk9ESVIpICYmIGVjaG8gIi5cYyIgJiZcCisJCQlGaWxlQ29weUxpc3Q9IiQkRmlsZUNvcHlMaXN0 ICQkVGV4dEZpbGUiO1wKKwkJCWVjaG8gIlJtRiAkKERFU1RESVIpJChJTkZPRElSKS8kJFRleHRG aWxlIiA+JjM7XAorCQlkb25lOyBlY2hvO1wKKwkJZWNobyAnRWZNJyA+JjM7XAorCQkoIGNkICQo REVTVERJUikkKElORk9ESVIpLyAmJiBjaG1vZCAgNjQ0ICAgJCRGaWxlQ29weUxpc3QgKTtcCisJ CSggY2QgJChERVNURElSKSQoSU5GT0RJUikvICYmIHB3ZCAmJiBscyAtbCAkJEZpbGVDb3B5TGlz dCApO1wKKwllbHNlXAorCQllY2hvICJOb3QgaW5zdGFsbGluZyB0ZXh0IGZpbGVzIVxuIjtcCisJ Zmk7XAorCWVjaG8gInNldCBmbGFnPWRcblByTiBSZW1vdmluZyBlbXB0eSBkaXJzLi4uIiA+JjM7 XAorCWVjaG8gIlJtRCAkKERFU1RESVIpJChCSU5ESVIpIiA+JjM7XAorCWVjaG8gIlJtRCAkKERF U1RESVIpJChTUkNESVIpIiA+JjM7XAorCWVjaG8gIlJtRCAkKERFU1RESVIpJChJTkZPRElSKSIg PiYzO1wKKwllY2hvICJSbUQgJChDRVJURElSKSIgPiYzO1wKKwllY2hvICJSbUQgJChNQU5ESVIp IiA+JjM7XAorCWVjaG8gIlJtRCAkKERFU1RESVIpIiA+JjM7XAorCWVjaG8gIkVmTSIgPiYzO1wK KwllY2hvICJQck4gQy1LZXJtaXQgdmVyc2lvbiAkKENLVkVSKSBpcyB1bmluc3RhbGxlZCEiID4m MztcCisJZWNobyBDLUtlcm1pdCB2ZXJzaW9uICQoQ0tWRVIpIGluc3RhbGxlZCEKKworIyBVTi1J bnN0YWxsIEMtS2VybWl0IGFmdGVyIGJ1aWxkaW5nCisjIFBsZWFzZSB0byBub3QgcmVtb3ZlIHRo ZSBleHRyYSBibGFua3MgYmVmb3JlIGFuZCBhZnRlciAne30nIHdpdGhpbiB0aGUKKyMgZnVuY3Rp b25zLiBZb3Ugd291bGQgZ2V0IHN5bnRheCBlcnJvcnMgZm9yIHNvbWUgb2xkZXIgQm91cm5lIHNo ZWxscyEgQmVzdCBpcyAKKyMgeW91IGRvbid0IGNoYW5nZSBvciByZW1vdmUgYW55dGhpbmcuCisj Cit1bmluc3RhbGw6CisJQGlmIHRlc3QgISAtZiBVTklOU1RBTEw7IHRoZW5cCisJCWVjaG8gIj9D LUtlcm1pdCBVTklOU1RBTEwgZGF0YSBmaWxlIG5vdCBmb3VuZCEiO1wKKwkJZXhpdCAxO1wKKwlm aTsgXAorCVg9YGdyZXAgJ15DS1ZFUj0nJChDS1ZFUiknJCQnIC4vVU5JTlNUQUxMIHx8IDpgO1wK KwlpZiB0ZXN0IC16ICIkJFgiOyB0aGVuXAorCQllY2hvICI/VU5JTlNUQUxMIGZpbGUgaXMgbm90 IGZvciBDLUtlcm1pdCB2ZXJzaW9uICQoQ0tWRVIpIjtcCisJCWV4aXQgMjtcCisJZmk7XAorCVBy TiAoKSB7IGVjaG8gIiQkKiI7IH07XAorCVByQyAoKSB7IGVjaG8gIiQkKiBcYyI7IH07XAorCVJt RiAoKSB7IHRlc3QgLWYgIiQkMSIgJiYgcm0gLWYgIiQkMSIgJiYgZWNobyAiLlxjIiAmJiBmbGFn PUYgOyB9O1wKKwlSbUQgKCkgeyBcCisJZGlyPSQkMTtcCisJd2hpbGUgdGVzdCAtZCAiJCRkaXIi OyBkb1wKKwkJcm1kaXIgIiQkZGlyIiAyPiYtIHx8IHJldHVybiAmJiBlY2hvICIkJGRpciIgJiYg ZmxhZz1EO1wKKwkJZGlyPWBlY2hvICIkJGRpciIgfCBzZWQgJ3MhL1teL10qLyokJCEhJ2A7XAor CWRvbmU7IFwKKwl9O1wKKwlFZk0gKCkgeyBcCisJY2FzZSAiJCRmbGFnIiBpblwKKwkJZikgZWNo byAiLSBOb3RoaW5nIHRvIHJlbW92ZSEiOztcCisJCWQpIGVjaG8gIk5vdGhpbmcgdG8gcmVtb3Zl ISI7O1wKKwkJRikgZWNobyAiIGRvbmUiOztcCisJCUQpIGVjaG8gImRvbmUiOztcCisJZXNhYzsg XAorCX07XAorCXdoaWxlIHJlYWQgQWN0IEFyZ3M7IGRvXAorCQljYXNlICQkQWN0IGluXAorCQkJ RWZNKSBFZk07O1wKKwkJCVJtRCkgUm1EICQkQXJnczs7XAorCQkJUm1GKSBSbUYgJCRBcmdzOztc CisJCQlQck4pIFByTiAkJEFyZ3M7O1wKKwkJCVByQykgUHJDICQkQXJnczs7XAorCQkJc2V0KSBl dmFsICQkQXJnczs7XAorCQllc2FjO1wKKwlkb25lIDwgLi9VTklOU1RBTEwKKworbWFrZXdoYXQ6 CisJQGVjaG8gJ21ha2Ugd2hhdD8gIFlvdSBtdXN0IHRlbGwgd2hpY2ggcGxhdGZvcm0gdG8gbWFr ZSBDLUtlcm1pdCBmb3IuJworCUBlY2hvIEV4YW1wbGVzOiBtYWtlIGxpbnV4LCBtYWtlIGFpeCwg bWFrZSBzb2xhcmlzMTAsIG1ha2UgaHB1eDExMDAuCisJQGVjaG8gUGxlYXNlIHJlYWQgdGhlIGNv bW1lbnRzIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIG1ha2VmaWxlLgorCisjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMKKyMKKyMgRGVwZW5kZW5jaWVzIFNlY3Rpb246CisKK3dlcm1pdDoJY2tjbWFpLiQoRVhU KSBja2NsaWIuJChFWFQpIGNrdWNtZC4kKEVYVCkgY2t1dXNyLiQoRVhUKSBja3V1czIuJChFWFQp IFwKKwkJY2t1dXMzLiQoRVhUKSBja3V1czQuJChFWFQpIGNrdXVzNS4kKEVYVCkgY2t1dXM2LiQo RVhUKSBcCisJCWNrdXVzNy4kKEVYVCkgY2t1dXN4LiQoRVhUKSBja3V1c3kuJChFWFQpIGNrY3By by4kKEVYVCkgXAorCQlja2NmbnMuJChFWFQpIGNrY2ZuMi4kKEVYVCkgY2tjZm4zLiQoRVhUKSBj a3V4bGEuJChFWFQpIFwKKwkJY2t1Y29uLiQoRVhUKSBja3V0aW8uJChFWFQpIGNrdWZpby4kKEVY VCkgY2t1ZGlhLiQoRVhUKSBcCisJCWNrdXNjci4kKEVYVCkgY2tjbmV0LiQoRVhUKSBja2N0ZWwu JChFWFQpIGNrdXNpZy4kKEVYVCkgXAorCQlja2N1bmkuJChFWFQpIGNrdXB0eS4kKEVYVCkgY2tj ZnRwLiQoRVhUKQorCSQoQ0MyKSAkKExOS0ZMQUdTKSAtbyB3ZXJtaXQgXAorCQlja2NtYWkuJChF WFQpIGNrY2xpYi4kKEVYVCkgY2t1dGlvLiQoRVhUKSBja3VmaW8uJChFWFQpIFwKKwkJY2tjZm5z LiQoRVhUKSBja2NmbjIuJChFWFQpIGNrY2ZuMy4kKEVYVCkgY2t1eGxhLiQoRVhUKSBcCisJCWNr Y3Byby4kKEVYVCkgY2t1Y21kLiQoRVhUKSBja3V1czIuJChFWFQpIGNrdXVzMy4kKEVYVCkgXAor CQlja3V1czQuJChFWFQpIGNrdXVzNS4kKEVYVCkgY2t1dXM2LiQoRVhUKSBja3V1czcuJChFWFQp IFwKKwkJY2t1dXN4LiQoRVhUKSBja3V1c3kuJChFWFQpIGNrdXVzci4kKEVYVCkgY2t1Y29uLiQo RVhUKSBcCisJCWNrdWRpYS4kKEVYVCkgY2t1c2NyLiQoRVhUKSBja2NuZXQuJChFWFQpIGNrY3Rl bC4kKEVYVCkgXAorCQlja3VzaWcuJChFWFQpIGNrY3VuaS4kKEVYVCkgY2t1cHR5LiQoRVhUKSBj a2NmdHAuJChFWFQpIFwKKwkJJChMSUJTKQorCisjIFByZWZlcnJlZCBjb25maWd1cmF0aW9uIHdp dGggc2VsZWN0KCktYmFzZWQgQ09OTkVDVAorCit4ZXJtaXQ6CWNrY21haS4kKEVYVCkgY2tjbGli LiQoRVhUKSBja3VjbWQuJChFWFQpIGNrdXVzci4kKEVYVCkgY2t1dXMyLiQoRVhUKSBcCisJCWNr dXVzMy4kKEVYVCkgY2t1dXM0LiQoRVhUKSBja3V1czUuJChFWFQpIGNrdXVzNi4kKEVYVCkgXAor CQlja3V1czcuJChFWFQpIGNrdXVzeC4kKEVYVCkgY2t1dXN5LiQoRVhUKSBja2Nwcm8uJChFWFQp IFwKKwkJY2tjZm5zLiQoRVhUKSBja2NmbjIuJChFWFQpIGNrY2ZuMy4kKEVYVCkgY2t1eGxhLiQo RVhUKSBcCisJCWNrdWNucy4kKEVYVCkgY2t1dGlvLiQoRVhUKSBja3VmaW8uJChFWFQpIGNrdWRp YS4kKEVYVCkgXAorCQlja3VzY3IuJChFWFQpIGNrY25ldC4kKEVYVCkgY2tjdGVsLiQoRVhUKSBj a3VzaWcuJChFWFQpIFwKKwkJY2tjdW5pLiQoRVhUKSBja3VwdHkuJChFWFQpIGNrY2Z0cC4kKEVY VCkgY2t1YXRoLiQoRVhUKSBcCisJCWNrX2NycC4kKEVYVCkgY2tfc3NsLiQoRVhUKQorCSQoQ0My KSAkKExOS0ZMQUdTKSAtbyB3ZXJtaXQgXAorCQlja2NtYWkuJChFWFQpIGNrY2xpYi4kKEVYVCkg Y2t1dGlvLiQoRVhUKSBja3VmaW8uJChFWFQpIFwKKwkJY2tjZm5zLiQoRVhUKSBja2NmbjIuJChF WFQpIGNrY2ZuMy4kKEVYVCkgY2t1eGxhLiQoRVhUKSBcCisJCWNrY3Byby4kKEVYVCkgY2t1Y21k LiQoRVhUKSBja3V1czIuJChFWFQpIGNrdXVzMy4kKEVYVCkgXAorCQlja3V1czQuJChFWFQpIGNr dXVzNS4kKEVYVCkgY2t1dXM2LiQoRVhUKSBja3V1czcuJChFWFQpIFwKKwkJY2t1dXN4LiQoRVhU KSBja3V1c3kuJChFWFQpIGNrdXVzci4kKEVYVCkgY2t1Y25zLiQoRVhUKSBcCisJCWNrdWRpYS4k KEVYVCkgY2t1c2NyLiQoRVhUKSBja2NuZXQuJChFWFQpIGNrdXNpZy4kKEVYVCkgXAorCQlja2N0 ZWwuJChFWFQpIGNrY3VuaS4kKEVYVCkgY2t1cHR5LiQoRVhUKSBja2NmdHAuJChFWFQpIFwKKwkJ Y2t1YXRoLiQoRVhUKSBja19jcnAuJChFWFQpIGNrX3NzbC4kKEVYVCkgJChMSUJTKQorCisjIE1h bGxvYyBEZWJ1Z2dpbmcgdmVyc2lvbgorCittZXJtaXQ6CWNrY21kYi4kKEVYVCkgY2tjbWFpLiQo RVhUKSBja2NsaWIuJChFWFQpIGNrdWNtZC4kKEVYVCkgY2t1dXNyLiQoRVhUKSBcCisJCWNrdXVz Mi4kKEVYVCkgY2t1dXMzLiQoRVhUKSBja3V1czQuJChFWFQpIGNrdXVzNS4kKEVYVCkgXAorCQlj a3V1czYuJChFWFQpIGNrdXVzNy4kKEVYVCkgY2t1dXN4LiQoRVhUKSBja3V1c3kuJChFWFQpIFwK KwkJY2tjcHJvLiQoRVhUKSBja2NmbnMuJChFWFQpIGNrY2ZuMi4kKEVYVCkgY2tjZm4zLiQoRVhU KSBcCisJCWNrdXhsYS4kKEVYVCkgY2t1Y29uLiQoRVhUKSBja3V0aW8uJChFWFQpIGNrdWZpby4k KEVYVCkgXAorCQlja3VkaWEuJChFWFQpIGNrdXNjci4kKEVYVCkgY2tjbmV0LiQoRVhUKSBja2N0 ZWwuJChFWFQpIFwKKwkJY2t1c2lnLiQoRVhUKSBja2N1bmkuJChFWFQpIGNrdXB0eS4kKEVYVCkg Y2tjZnRwLiQoRVhUKQorCSQoQ0MyKSAkKExOS0ZMQUdTKSAtbyBtZXJtaXQgY2tjbWRiLiQoRVhU KSBja2NsaWIuJChFWFQpIGNrY21haS4kKEVYVClcCisJCWNrdXRpby4kKEVYVCkgY2t1ZmlvLiQo RVhUKSBja2NmbnMuJChFWFQpIGNrY2ZuMi4kKEVYVCkgXAorCQlja2NmbjMuJChFWFQpIGNrdXhs YS4kKEVYVCkgY2tjcHJvLiQoRVhUKSBja3VjbWQuJChFWFQpIFwKKwkJY2t1dXMyLiQoRVhUKSBj a3V1czMuJChFWFQpIGNrdXVzNC4kKEVYVCkgY2t1dXM1LiQoRVhUKSBcCisJCWNrdXVzNi4kKEVY VCkgY2t1dXM3LiQoRVhUKSBja3V1c3guJChFWFQpIGNrdXVzeS4kKEVYVCkgXAorCQlja3V1c3Iu JChFWFQpIGNrdWNvbi4kKEVYVCkgY2t1ZGlhLiQoRVhUKSBja3VzY3IuJChFWFQpIFwKKwkJY2tj bmV0LiQoRVhUKSBja2N0ZWwuJChFWFQpIGNrdXNpZy4kKEVYVCkgY2tjdW5pLiQoRVhUKSBcCisJ CWNrdXB0eS4kKEVYVCkgY2tjZnRwLiQoRVhUKSAkKExJQlMpCisKKyMgS2VyYmVyaXplZCBWZXJz aW9uIC0gU3ViamVjdCB0byBVU0EgZXhwb3J0IHJlc3RyaWN0aW9ucy4KKworIyBOT1RFOiBXZSBk b24ndCB1c2UgdGhpcyBhbnkgbW9yZSAtLSBBcyBvZiAxNSBGZWIgMjAwMywgdGhlICJ4ZXJtaXQi CisjIHRhcmdldCBpcyB1c2VkIGZvciBib3RoIHNlY3VyZSBhbmQgcmVndWxhciB2ZXJzaW9uLgor CitrcmJtaXQ6CWNrY21haS4kKEVYVCkgY2tjbGliLiQoRVhUKSBja3VjbWQuJChFWFQpIGNrdXVz ci4kKEVYVCkgY2t1dXMyLiQoRVhUKSBcCisJCWNrdXVzMy4kKEVYVCkgY2t1dXM0LiQoRVhUKSBj a3V1czUuJChFWFQpIGNrdXVzNi4kKEVYVCkgXAorCQlja3V1czcuJChFWFQpIGNrdXVzeC4kKEVY VCkgY2t1dXN5LiQoRVhUKSBja2Nwcm8uJChFWFQpIFwKKwkJY2tjZm5zLiQoRVhUKSBja2NmbjIu JChFWFQpIGNrY2ZuMy4kKEVYVCkgY2t1eGxhLiQoRVhUKSBcCisJCWNrdWNucy4kKEVYVCkgY2t1 dGlvLiQoRVhUKSBja3VmaW8uJChFWFQpIGNrdWRpYS4kKEVYVCkgXAorCQlja3VzY3IuJChFWFQp IGNrY25ldC4kKEVYVCkgY2tjdGVsLiQoRVhUKSBja3VzaWcuJChFWFQpIFwKKwkJY2t1YXRoLiQo RVhUKSBja19jcnAuJChFWFQpIGNrY3VuaS4kKEVYVCkgY2t1cHR5LiQoRVhUKSBcCisJCWNrY2Z0 cC4kKEVYVCkgY2tfc3NsLiQoRVhUKQorCSQoQ0MyKSAkKExOS0ZMQUdTKSAtbyBrcmJtaXQgY2tj bWFpLiQoRVhUKSBja2NsaWIuJChFWFQpIFwKKwkJY2t1dGlvLiQoRVhUKSBja3VmaW8uJChFWFQp IGNrY2Zucy4kKEVYVCkgY2tjZm4yLiQoRVhUKSBcCisJCWNrY2ZuMy4kKEVYVCkgY2t1eGxhLiQo RVhUKSBja2Nwcm8uJChFWFQpIGNrdWNtZC4kKEVYVCkgXAorCQlja3V1czIuJChFWFQpIGNrdXVz My4kKEVYVCkgY2t1dXM0LiQoRVhUKSBja3V1czUuJChFWFQpIFwKKwkJY2t1dXM2LiQoRVhUKSBj a3V1czcuJChFWFQpIGNrdXVzeC4kKEVYVCkgY2t1dXN5LiQoRVhUKSBcCisJCWNrdXVzci4kKEVY VCkgY2t1Y25zLiQoRVhUKSBja3VkaWEuJChFWFQpIGNrdXNjci4kKEVYVCkgXAorCQlja2NuZXQu JChFWFQpIGNrY3RlbC4kKEVYVCkgY2t1c2lnLiQoRVhUKSBja3VhdGguJChFWFQpIFwKKwkJY2tf Y3JwLiQoRVhUKSBja2N1bmkuJChFWFQpIGNrdXB0eS4kKEVYVCkgY2tjZnRwLiQoRVhUKSBcCisJ CWNrX3NzbC4kKEVYVCkgJChMSUJTKQorCitrcmJtaXQtZGVidWc6CWNrY21haS4kKEVYVCkgY2tj bGliLiQoRVhUKSBja3VjbWQuJChFWFQpIGNrdXVzci4kKEVYVCkgXAorCQlja3V1czIuJChFWFQp IGNrdXVzMy4kKEVYVCkgY2t1dXM0LiQoRVhUKSBja3V1czUuJChFWFQpIFwKKwkJY2t1dXM2LiQo RVhUKSBja3V1czcuJChFWFQpIGNrdXVzeC4kKEVYVCkgY2t1dXN5LiQoRVhUKSBcCisJCWNrY3By by4kKEVYVCkgY2tjZm5zLiQoRVhUKSBja2NmbjIuJChFWFQpIGNrY2ZuMy4kKEVYVCkgXAorCQlj a3V4bGEuJChFWFQpIGNrdWNucy4kKEVYVCkgY2t1dGlvLiQoRVhUKSBja3VmaW8uJChFWFQpIFwK KwkJY2t1ZGlhLiQoRVhUKSBja3VzY3IuJChFWFQpIGNrY25ldC4kKEVYVCkgY2tjdGVsLiQoRVhU KSBcCisJCWNrdXNpZy4kKEVYVCkgY2t1YXRoLiQoRVhUKSBja19jcnAuJChFWFQpIGNrY3VuaS4k KEVYVCkgXAorCQlja3VwdHkuJChFWFQpIGNrX3NzbC4kKEVYVCkgY2tjbWRiLiQoRVhUKSBja2Nm dHAuJChFWFQpCisJJChDQzIpICQoTE5LRkxBR1MpIC1vIGtyYm1pdCBja2NtZGIuJChFWFQpIGNr Y21haS4kKEVYVCkgXAorCQlja2NsaWIuJChFWFQpIGNrdXRpby4kKEVYVCkgY2t1ZmlvLiQoRVhU KSBja2NmbnMuJChFWFQpIFwKKwkJY2tjZm4yLiQoRVhUKSBja2NmbjMuJChFWFQpIGNrdXhsYS4k KEVYVCkgY2tjcHJvLiQoRVhUKSBcCisJCWNrdWNtZC4kKEVYVCkgY2t1dXMyLiQoRVhUKSBja3V1 czMuJChFWFQpIGNrdXVzNC4kKEVYVCkgXAorCQlja3V1czUuJChFWFQpIGNrdXVzNi4kKEVYVCkg Y2t1dXM3LiQoRVhUKSBja3V1c3guJChFWFQpIFwKKwkJY2t1dXN5LiQoRVhUKSBja3V1c3IuJChF WFQpIGNrdWNucy4kKEVYVCkgY2t1ZGlhLiQoRVhUKSBcCisJCWNrdXNjci4kKEVYVCkgY2tjbmV0 LiQoRVhUKSBja2N0ZWwuJChFWFQpIGNrdXNpZy4kKEVYVCkgXAorCQlja3VhdGguJChFWFQpIGNr X2NycC4kKEVYVCkgY2tjdW5pLiQoRVhUKSBja3VwdHkuJChFWFQpIFwKKwkJY2tjZnRwLiQoRVhU KSBja19zc2wuJChFWFQpICQoTElCUykKKworIyBTUlAoVE0pIFZlcnNpb24gLSBTdWJqZWN0IHRv IFVTQSBleHBvcnQgcmVzdHJpY3Rpb25zLgorCitzcnBtaXQ6CWNrY21haS4kKEVYVCkgY2tjbGli LiQoRVhUKSBja3VjbWQuJChFWFQpIGNrdXVzci4kKEVYVCkgY2t1dXMyLiQoRVhUKSBcCisJCWNr dXVzMy4kKEVYVCkgY2t1dXM0LiQoRVhUKSBja3V1czUuJChFWFQpIGNrdXVzNi4kKEVYVCkgXAor CQlja3V1czcuJChFWFQpIGNrdXVzeC4kKEVYVCkgY2t1dXN5LiQoRVhUKSBja2Nwcm8uJChFWFQp IFwKKwkJY2tjZm5zLiQoRVhUKSBja2NmbjIuJChFWFQpIGNrY2ZuMy4kKEVYVCkgY2t1eGxhLiQo RVhUKSBcCisJCWNrdWNucy4kKEVYVCkgY2t1dGlvLiQoRVhUKSBja3VmaW8uJChFWFQpIGNrdWRp YS4kKEVYVCkgXAorCQlja3VzY3IuJChFWFQpIGNrY25ldC4kKEVYVCkgY2tjdGVsLiQoRVhUKSBj a3VzaWcuJChFWFQpIFwKKwkJY2t1YXRoLiQoRVhUKSBja19jcnAuJChFWFQpIGNrY3VuaS4kKEVY VCkgY2t1cHR5LiQoRVhUKSBcCisJCWNrY2Z0cC4kKEVYVCkgY2tfc3NsLiQoRVhUKQorCSQoQ0My KSAkKExOS0ZMQUdTKSAtbyBzcnBtaXQgY2tjbWFpLiQoRVhUKSBja2NsaWIuJChFWFQpIFwKKwkJ Y2t1dGlvLiQoRVhUKSBja3VmaW8uJChFWFQpIGNrY2Zucy4kKEVYVCkgY2tjZm4yLiQoRVhUKSBc CisJCWNrY2ZuMy4kKEVYVCkgY2t1eGxhLiQoRVhUKSBja2Nwcm8uJChFWFQpIGNrdWNtZC4kKEVY VCkgXAorCQlja3V1czIuJChFWFQpIGNrdXVzMy4kKEVYVCkgY2t1dXM0LiQoRVhUKSBja3V1czUu JChFWFQpIFwKKwkJY2t1dXM2LiQoRVhUKSBja3V1czcuJChFWFQpIGNrdXVzeC4kKEVYVCkgY2t1 dXN5LiQoRVhUKSBcCisJCWNrdXVzci4kKEVYVCkgY2t1Y25zLiQoRVhUKSBja3VkaWEuJChFWFQp IGNrdXNjci4kKEVYVCkgXAorCQlja2NuZXQuJChFWFQpIGNrY3RlbC4kKEVYVCkgY2t1c2lnLiQo RVhUKSBja3VhdGguJChFWFQpIFwKKwkJY2tfY3JwLiQoRVhUKSBja2N1bmkuJChFWFQpIGNrdXB0 eS4kKEVYVCkgY2tfc3NsLiQoRVhUKSBcCisJCWNrY2Z0cC4kKEVYVCkgJChMSUJTKQorCisjIEtl cmJlcml6ZWQgVmVyc2lvbiAtIE5vdCBzdWJqZWN0IHRvIFVTQSBleHBvcnQgcmVzdHJpY3Rpb25z LgorCitrcmJtaXQtZXhwb3J0Oglja2NtYWkuJChFWFQpIFwKKwkJY2tjbGliLiQoRVhUKSBja3Vj bWQuJChFWFQpIGNrdXVzci4kKEVYVCkgY2t1dXMyLiQoRVhUKSBcCisJCWNrdXVzMy4kKEVYVCkg Y2t1dXM0LiQoRVhUKSBja3V1czUuJChFWFQpIGNrdXVzNi4kKEVYVCkgXAorCQlja3V1czcuJChF WFQpIGNrdXVzeC4kKEVYVCkgY2t1dXN5LiQoRVhUKSBja2Nwcm8uJChFWFQpIFwKKwkJY2tjZm5z LiQoRVhUKSBja2NmbjIuJChFWFQpIGNrY2ZuMy4kKEVYVCkgY2t1eGxhLiQoRVhUKSBcCisJCWNr dWNucy4kKEVYVCkgY2t1dGlvLiQoRVhUKSBja3VmaW8uJChFWFQpIGNrdWRpYS4kKEVYVCkgXAor CQlja3VzY3IuJChFWFQpIGNrY25ldC4kKEVYVCkgY2tjdGVsLiQoRVhUKSBja3VzaWcuJChFWFQp IFwKKwkJY2t1YXRoLiQoRVhUKSBja2N1bmkuJChFWFQpIGNrdXB0eS4kKEVYVCkgY2tjZnRwLiQo RVhUKQorCSQoQ0MyKSAkKExOS0ZMQUdTKSAtbyBrcmJtaXQtZXhwb3J0IGNrY21haS4kKEVYVCkg Y2tjbGliLiQoRVhUKSBcCisJCWNrdXRpby4kKEVYVCkgY2t1ZmlvLiQoRVhUKSBja2NmbnMuJChF WFQpIGNrY2ZuMi4kKEVYVCkgXAorCQlja2NmbjMuJChFWFQpIGNrdXhsYS4kKEVYVCkgY2tjcHJv LiQoRVhUKSBja3VjbWQuJChFWFQpIFwKKwkJY2t1dXMyLiQoRVhUKSBja3V1czMuJChFWFQpIGNr dXVzNC4kKEVYVCkgY2t1dXM1LiQoRVhUKSBcCisJCWNrdXVzNi4kKEVYVCkgY2t1dXM3LiQoRVhU KSBja3V1c3guJChFWFQpIGNrdXVzeS4kKEVYVCkgXAorCQlja3V1c3IuJChFWFQpIGNrdWNucy4k KEVYVCkgY2t1ZGlhLiQoRVhUKSBja3VzY3IuJChFWFQpIFwKKwkJY2tjbmV0LiQoRVhUKSBja2N0 ZWwuJChFWFQpIGNrdXNpZy4kKEVYVCkgY2t1YXRoLiQoRVhUKSBcCisJCWNrY3VuaS4kKEVYVCkg Y2t1cHR5LiQoRVhUKSBja2NmdHAuJChFWFQpICQoTElCUykKKworIyBTUlAoVE0pIFZlcnNpb24g LSBOb3Qgc3ViamVjdCB0byBVU0EgZXhwb3J0IHJlc3RyaWN0aW9ucy4KKworc3JwbWl0LWV4cG9y dDoJY2tjbWFpLiQoRVhUKSBcCisJCWNrY2xpYi4kKEVYVCkgY2t1Y21kLiQoRVhUKSBja3V1c3Iu JChFWFQpIGNrdXVzMi4kKEVYVCkgXAorCQlja3V1czMuJChFWFQpIGNrdXVzNC4kKEVYVCkgY2t1 dXM1LiQoRVhUKSBja3V1czYuJChFWFQpIFwKKwkJY2t1dXM3LiQoRVhUKSBja3V1c3guJChFWFQp IGNrdXVzeS4kKEVYVCkgY2tjcHJvLiQoRVhUKSBcCisJCWNrY2Zucy4kKEVYVCkgY2tjZm4yLiQo RVhUKSBja2NmbjMuJChFWFQpIGNrdXhsYS4kKEVYVCkgXAorCQlja3VjbnMuJChFWFQpIGNrdXRp by4kKEVYVCkgY2t1ZmlvLiQoRVhUKSBja3VkaWEuJChFWFQpIFwKKwkJY2t1c2NyLiQoRVhUKSBj a2NuZXQuJChFWFQpIGNrY3RlbC4kKEVYVCkgY2t1c2lnLiQoRVhUKSBcCisJCWNrdWF0aC4kKEVY VCkgY2tjdW5pLiQoRVhUKSBja3VwdHkuJChFWFQpIGNrY2Z0cC4kKEVYVCkKKwkkKENDMikgJChM TktGTEFHUykgLW8gc3JwbWl0LWV4cG9ydCBja2NtYWkuJChFWFQpIGNrY2xpYi4kKEVYVCkgXAor CQlja3V0aW8uJChFWFQpIGNrdWZpby4kKEVYVCkgY2tjZm5zLiQoRVhUKSBja2NmbjIuJChFWFQp IFwKKwkJY2tjZm4zLiQoRVhUKSBja3V4bGEuJChFWFQpIGNrY3Byby4kKEVYVCkgY2t1Y21kLiQo RVhUKSBcCisJCWNrdXVzMi4kKEVYVCkgY2t1dXMzLiQoRVhUKSBja3V1czQuJChFWFQpIGNrdXVz NS4kKEVYVCkgXAorCQlja3V1czYuJChFWFQpIGNrdXVzNy4kKEVYVCkgY2t1dXN4LiQoRVhUKSBj a3V1c3kuJChFWFQpIFwKKwkJY2t1dXNyLiQoRVhUKSBja3VjbnMuJChFWFQpIGNrdWRpYS4kKEVY VCkgY2t1c2NyLiQoRVhUKSBcCisJCWNrY25ldC4kKEVYVCkgY2tjdGVsLiQoRVhUKSBja3VzaWcu JChFWFQpIGNrdWF0aC4kKEVYVCkgXAorCQlja2N1bmkuJChFWFQpIGNrdXB0eS4kKEVYVCkgY2tj ZnRwLiQoRVhUKSAkKExJQlMpCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBtYW4gcGFnZS4uLgor IworY2t1a2VyLm5yOgorCUBlY2hvIFRoaXMgdGFyZ2V0IGlzIG9ic29sZXRlLgorCUBlY2hvIFRo ZSBja3VrZXIubnIgZmlsZSBubyBsb25nZXIgbmVlZHMgYW55IHByZXByb2Nlc3NpbmcuCisKKyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIworIyBEZXBlbmRlbmNpZXMgZm9yIGVhY2ggbW9kdWxlLi4uCisjCitj a2NtYWkuJChFWFQpOiBja2NtYWkuYyBja2NrZXIuaCBja2NkZWIuaCBja2NzeW0uaCBja2Nhc2Mu aCBja2NuZXQuaCBja2NzaWcuaCBcCisJCWNrdXVzci5oIGNrY3RlbC5oIGNrY2xpYi5oCisKK2Nr Y2xpYi4kKEVYVCk6IGNrY2xpYi5jIGNrY2xpYi5oIGNrY2RlYi5oIGNrY2FzYy5oIGNrY3N5bS5o CisKK2NrY3Byby4kKEVYVCk6IGNrY3Byby5jIGNrY2tlci5oIGNrY2RlYi5oIGNrY3N5bS5oIGNr Y2FzYy5oIGNrY2xpYi5oCisKK2NrY3Byby5jOiBja2Nwcm8udyB3YXJ0IGNrY2RlYi5oIGNrY3N5 bS5oIGNrY2FzYy5oIGNrY2tlci5oIGNrY25ldC5oIGNrY3RlbC5oIFwKKwkgY2tjbGliLmgKKwku L3dhcnQgY2tjcHJvLncgY2tjcHJvLmMKKworY2tjZm5zLiQoRVhUKTogY2tjZm5zLmMgY2tja2Vy LmggY2tjZGViLmggY2tjc3ltLmggY2tjYXNjLmggY2tjeGxhLmggY2tjdW5pLmggXAorCQlja3V4 bGEuaCBja2NsaWIuaCBja2NuZXQuaAorCitja2NmbjIuJChFWFQpOiBja2NmbjIuYyBja2NrZXIu aCBja2NkZWIuaCBja2NzeW0uaCBja2Nhc2MuaCBja2N4bGEuaCBcCisJCWNrdXhsYS5oIGNrY3Rl bC5oIGNrY2xpYi5oIGNrY25ldC5oIGNrY3VuaS5oCisKK2NrY2ZuMy4kKEVYVCk6IGNrY2ZuMy5j IGNrY2tlci5oIGNrY2RlYi5oIGNrY3N5bS5oIGNrY2FzYy5oIGNrY3hsYS5oIFwKKwkJY2t1eGxh LmggY2tjbGliLmggY2tjdW5pLmgKKworY2t1eGxhLiQoRVhUKTogY2t1eGxhLmMgY2tja2VyLmgg Y2tjc3ltLmggY2tjZGViLmggY2tjeGxhLmggY2t1eGxhLmggY2tjbGliLmggXAorCQkgY2tjdW5p LmgKKworY2tjdW5pLiQoRVhUKTogY2tjdW5pLmMgY2tjZGViLmggY2tja2VyLmggY2t1Y21kLmgg Y2tjdW5pLmggY2tjeGxhLmggY2t1eGxhLmgKKworY2t1dXNyLiQoRVhUKTogY2t1dXNyLmMgY2t1 Y21kLmggY2tja2VyLmggY2t1dXNyLmggY2tjc3ltLmggY2tjZGViLmggY2tjeGxhLmggXAorCQlj a3V4bGEuaCBja2Nhc2MuaCBja2NuZXQuaCBja2N0ZWwuaCBja2NsaWIuaCBja2N1bmkuaAorCitj a3V1czIuJChFWFQpOiBja3V1czIuYyBja3VjbWQuaCBja2NrZXIuaCBja3V1c3IuaCBja2NkZWIu aCBja2N4bGEuaCBja3V4bGEuaCBcCisJCWNrY2FzYy5oIGNrY25ldC5oIGNrY3N5bS5oIGNrY3Rl bC5oIGNrY2xpYi5oIGNrY3VuaS5oCisKK2NrdXVzMy4kKEVYVCk6IGNrdXVzMy5jIGNrdWNtZC5o IGNrY2tlci5oIGNrdXVzci5oIGNrY2RlYi5oIGNrY3hsYS5oIGNrdXhsYS5oIFwKKwkJY2tjYXNj LmggY2tjbmV0LmggY2tjc3ltLmggY2tjdGVsLmggY2tjbGliLmggY2tjdW5pLmgKKworY2t1dXM0 LiQoRVhUKTogY2t1dXM0LmMgY2t1Y21kLmggY2tja2VyLmggY2t1dXNyLmggY2tjZGViLmggY2tj eGxhLmggY2t1eGxhLmggXAorCQlja2Nhc2MuaCBja2NuZXQuaCBja3V2ZXIuaCBja2NzeW0uaCBj a2N0ZWwuaCBja2NsaWIuaCBja2N1bmkuaAorCitja3V1czUuJChFWFQpOiBja3V1czUuYyBja3Vj bWQuaCBja2NrZXIuaCBja3V1c3IuaCBja2NkZWIuaCBja2Nhc2MuaCBja2NuZXQuaCBcCisJCSBj a2NzeW0uaCBja2N0ZWwuaCBja2NsaWIuaCBja2N4bGEuaCBja3V4bGEuaCBja2N1bmkuaAorCitj a3V1czYuJChFWFQpOiBja3V1czYuYyBja3VjbWQuaCBja2NrZXIuaCBja3V1c3IuaCBja2NkZWIu aCBja2Nhc2MuaCBja2NuZXQuaCBcCisJCSBja2NzeW0uaCBja2N0ZWwuaCBja2NsaWIuaAorCitj a3V1czcuJChFWFQpOiBja3V1czcuYyBja3VjbWQuaCBja2NrZXIuaCBja3V1c3IuaCBja2NkZWIu aCBja2N4bGEuaCBja3V4bGEuaCBcCisJCWNrY2FzYy5oIGNrY25ldC5oIGNrY3N5bS5oIGNrY3Rl bC5oIGNrY2xpYi5oIGNrY3VuaS5oCisKK2NrdXVzeC4kKEVYVCk6IGNrdXVzeC5jIGNrY2tlci5o IGNrdXVzci5oIGNrY2RlYi5oIGNrY2FzYy5oIGNrY3N5bS5oIFwKKwkJY2tjc2lnLmggY2tjbmV0 LmggY2tjdGVsLmggY2tjbGliLmggY2tjeGxhLmggY2t1eGxhLmggY2tjdW5pLmgKKworY2t1dXN5 LiQoRVhUKTogY2t1dXN5LmMgY2tja2VyLmggY2tjZGViLmggY2tjYXNjLmggY2tjbmV0LmggY2tj c3ltLmggY2tjdGVsLmggXAorCQkgY2tjbGliLmgKKworY2t1Y21kLiQoRVhUKTogY2t1Y21kLmMg Y2tjYXNjLmggY2t1Y21kLmggY2tjZGViLmggY2tjc3ltLmggY2tjdGVsLmggY2tjbGliLmgKKwor Y2t1ZmlvLiQoRVhUKTogY2t1ZmlvLmMgY2tjZGViLmggY2t1dmVyLmggY2tjc3ltLmggY2tjbGli LmggXAorCQlja2N4bGEuaCBja3V4bGEuaCBja2N1bmkuaAorCitja3V0aW8uJChFWFQpOiBja3V0 aW8uYyBja2NkZWIuaCBja2NuZXQuaCBja3V2ZXIuaCBja2NzeW0uaCBja2N0ZWwuaCBja2NsaWIu aAorCitja3Vjb24uJChFWFQpOiBja3Vjb24uYyBja2NrZXIuaCBja2NkZWIuaCBja2Nhc2MuaCBj a2NuZXQuaCBja2NzeW0uaCBja2N0ZWwuaCBcCisJCSBja2NsaWIuaAorCitja3VjbnMuJChFWFQp OiBja3VjbnMuYyBja2NrZXIuaCBja2NkZWIuaCBja2Nhc2MuaCBja2NuZXQuaCBja2NzeW0uaCBj a2N0ZWwuaCBcCisJCSBja2NsaWIuaCBja2N4bGEuaCBja3V4bGEuaCBja2N1bmkuaAorCitja2Nu ZXQuJChFWFQpOiBja2NuZXQuYyBja2NkZWIuaCBja2NrZXIuaCBja2NuZXQuaCBja2NzeW0uaCBj a2NzaWcuaCBja2N0ZWwuaCBcCisJCSBja2NsaWIuaAorCitja2N0ZWwuJChFWFQpOiBja2NzeW0u aCBja2NkZWIuaCBja2NrZXIuaCBja2NuZXQuaCBja2N0ZWwuaCBja2NsaWIuaAorCisjIGNrX29m Zl90OiBja19vZmZfdC4kKEVYVCkKKyMJJChDQykgLW8gY2tfb2ZmX3QgY2tfb2ZmX3QuJChFWFQp CisKK3dhcnQ6IGNrd2FydC4kKEVYVCkKKwkkKENDKSAkKExOS0ZMQUdTKSAtbyB3YXJ0IGNrd2Fy dC4kKEVYVCkgJChMSUJTKQorCitja2NtZGIuJChFWFQpOiBja2NtZGIuYyBja2NkZWIuaCBja2Nz eW0uaCBja2NsaWIuaAorCitja3dhcnQuJChFWFQpOiBja3dhcnQuYworCitja3VkaWEuJChFWFQp OiBja3VkaWEuYyBja2NrZXIuaCBja2NkZWIuaCBja3VjbWQuaCBja2Nhc2MuaCBja2NzeW0uaCBj a2NzaWcuaCBcCisJCWNrY25ldC5oIGNrY3RlbC5oIGNrY2xpYi5oCisKK2NrdXNjci4kKEVYVCk6 IGNrdXNjci5jIGNrY2tlci5oIGNrY2RlYi5oIGNrY2FzYy5oIGNrY3N5bS5oIGNrY3NpZy5oIFwK KwkJY2tjbmV0LmggY2tjdGVsLmggY2tjbGliLmgKKworY2t1c2lnLiQoRVhUKTogY2t1c2lnLmMg Y2tjYXNjLmggY2tjZGViLmggY2tja2VyLmggY2tjbmV0LmggY2t1dXNyLmggXAorCQlja2NzaWcu aCBja2N0ZWwuaCBja2NsaWIuaAorCitja2NmdHAuJChFWFQpOiBja2NmdHAuYyBja2NkZWIuaCBj a2Nhc2MuaCBja2NrZXIuaCBja3VjbWQuaCBja3V1c3IuaCBcCisJCWNrY25ldC5oIGNrY3RlbC5o IGNrY3hsYS5oIGNrdXhsYS5oIGNrY3VuaS5oCisKK2NrdXB0eS4kKEVYVCk6IGNrdXB0eS5jIGNr dXB0eS5oIGNrY2RlYi5oCisKK2NrdWF0aC4kKEVYVCk6IGNrdWF0aC5jIGNrY2RlYi5oIGNrdWNt ZC5oIGNrdWF0aC5oIGNrdWF0Mi5oIGNrY3RlbC5oIFwKKwkJIGNrY2xpYi5oIGNrY25ldC5oCisK K2NrX2NycC4kKEVYVCk6IGNrX2NycC5jIGNrY2RlYi5oIGNrY25ldC5oIGNrdWF0aC5oIGNrY2xp Yi5oCisKK2NrX3NzbC4kKEVYVCk6IGNrX3NzbC5jIGNrY2RlYi5oIGNrdWNtZC5oIGNrdWF0aC5o IGNrdWF0Mi5oIGNrY3RlbC5oIFwKKwkJIGNrY2xpYi5oIGNrX3NzbC5oCisKKyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIworIworIyBFbnRyaWVzIHRvIG1ha2UgQy1LZXJtaXQgZm9yIHNwZWNpZmljIHN5c3Rl bXMuCisjCisjIFB1dCB0aGUgb25lcyB0aGF0IG5lZWQgc2hvcnQgbWFrZWZpbGVzIGZpcnN0Lgor CisjQXBvbGxvIEFlZ2lzIDkueC4gIEluY2x1ZGVzIFRDUC9JUCBzdXBwb3J0LgorI1lvdSBjYW4g YWxzbyBhZGQgcHJvY2Vzc29yLWRlcGVuZGVudCBvcHRpbWl6YXRpb24gc3dpdGNoZXMgbGlrZSAt TTU3MC4KK2FlZ2lzOgorCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgQXBvbGxv IEFlZ2lzIDkueC4uLgorCSQoTUFLRSkgd2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0g XAorCSJDRkxBR1M9IC1EQlNENCAtRFRDUFNPQ0tFVCAtRE5PQ1NFVFMgLURDS19DVVJTRVMgLU8g JChLRkxBR1MpIiBcCisJIkxJQlMgPSAtbGN1cnNlcyAtbHRlcm1jYXAiCisKKyNBcHBsZSBNYWMg SUksIEEvVVggcHJlLTMuMAorI1dhcm5pbmcsIGlmICJzZW5kICoiIGRvZXNuJ3Qgd29yaywgdHJ5 IHRoZSBhdXh1ZnMgbWFrZWZpbGUgZW50cnkgYmVsb3cuCithdXg6CisJQGVjaG8gTWFraW5nIEMt S2VybWl0ICQoQ0tWRVIpIGZvciBNYWNpbnRvc2ggQS9VWC4uLgorCSQoTUFLRSkgd2VybWl0IEtU QVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1MgPSAtREFVWCAtRFRDUFNPQ0tFVCAk KEtGTEFHUykgLWkgLU8iICJMTktGTEFHUyA9IC1pIgorCisjQXBwbGUgTWFjIElJLCBBL1VYIHBy ZS0zLjAsIGNvbXBpbGVkIHdpdGggZ2NjCithdXhnY2M6CisJQGVjaG8gTWFraW5nIEMtS2VybWl0 ICQoQ0tWRVIpIGZvciBNYWNpbnRvc2ggQS9VWC4uLgorCSQoTUFLRSkgd2VybWl0IEtUQVJHRVQ9 JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1MgPSAtREFVWCAtRFRDUFNPQ0tFVCAtdHJhZGl0 aW9uYWwgJChLRkxBR1MpIC1pIC1PIiBcCisJIkxOS0ZMQUdTID0gIiAiQ0MgPSBnY2MiICJDQzIg PSBnY2MiCisKKyNBcHBsZSBNYWMgSUksIEEvVVgsIHByZS0zLjAsIGJ1dCB3aXRoIHVmcyBmaWxl IHZvbHVtZXMsIHVzZXMgPGRpcmVudC5oPi4KK2F1eHVmczoKKwlAZWNobyBNYWtpbmcgQy1LZXJt aXQgJChDS1ZFUikgZm9yIE1hY2ludG9zaCBBL1VYLi4uCisJJChNQUtFKSB3ZXJtaXQgS1RBUkdF VD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUyA9IC1EQVVYIC1EVENQU09DS0VUIC1ERElS RU5UICQoS0ZMQUdTKSAtaSAtTyIgIkxOS0ZMQUdTID0gLWkiCisKKyNBcHBsZSBNYWMgSUksIEEv VVggMy4wLCBjb21waWxlZCB3aXRoIGdjYworYXV4M2djYzoKKwlAZWNobyBNYWtpbmcgQy1LZXJt aXQgJChDS1ZFUikgZm9yIE1hY2ludG9zaCBBL1VYIDMuMC4uLgorCSQoTUFLRSkgd2VybWl0IEtU QVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1MgPSAtREFVWCAtREhEQlVVQ1AgLURM RkRFVk5PIC1EVENQU09DS0VUIC1ERElSRU5UICQoS0ZMQUdTKSIgXAorCSJMTktGTEFHUyA9IC1z IiAiTElCUyA9ICQoTElCUykiIFwKKwkiQ0M9Z2NjIC1waXBlIC10cmFkaXRpb25hbCIgIkNDMj1n Y2MgLXBpcGUgLXRyYWRpdGlvbmFsIgorCisjQXBwbGUgTWFjIElJLCBBL1VYIDMuMCwgY29tcGls ZWQgd2l0aCBnY2MsIHVzZXMgY3Vyc2VzCithdXgzY2djYzoKKwlAZWNobyBNYWtpbmcgQy1LZXJt aXQgJChDS1ZFUikgZm9yIE1hY2ludG9zaCBBL1VYIDMuMC4uLgorCSQoTUFLRSkgIk1BS0U9JChN QUtFKSIgQ0M9JChDQykgQ0MyPSQoQ0MyKSBhdXgzZ2NjIFwKKwlLVEFSR0VUPSQke0tUQVJHRVQ6 LSQoQCl9IFwKKwkiS0ZMQUdTPSQoS0ZMQUdTKSAtRENLX0NVUlNFUyIgIkxJQlMgPSAtbGN1cnNl cyAkKExJQlMpIgorCisjIFRlbm9uIE1hY2hUZW4sIHRlc3RlZCBvbiBBcHBsZSBQb3dlcmJvb2sg d2l0aCBNYWNoVGVuIDIuMS4xLkQuCisjIE5PVEU6IFRoaXMgZG9lc24ndCBkbyBhbnl0aGluZyBh Ym91dCBVVUNQLiAgSXQgb25seSB3b3JrcyBpZiAvdXNyL3Nwb29sL3V1Y3AKKyMgaGFzIHBlcm1p c3Npb24gb2YgNzc3LCBhbmQgZGlhbG91dCBkZXZpY2UgaXMgd29ybGQgcmVhZC93cml0ZWFibGUu CittYWNodGVuOgorCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgTWFjaFRlbi4u LgorCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1M9 IC1EQlNENDMgLURUQ1BTT0NLRVQgLURTSUdfViAtRE5ER1BXTkFNIC1EQ0tfQ1VSU0VTIC1PIFwK KwkkKEtGTEFHUykiICAiTElCUz0tbGN1cnNlcyAtbHRlcm1jYXAiCisKKyNCZWxsIExhYnMgUmVz ZWFyY2ggVU5JWCBWMTAKKyNDYW4ndCBhZGQgVENQL0lQIGJlY2F1c2UgdGhlcmUgaXMgbm8gc29j a2V0cyBsaWJyYXJ5LiAgSXQgd291bGQgaGF2ZSB0bworI2JlIGRvbmUgdXNpbmcgc3RyZWFtcywg YnV0IHRoZXJlIGlzIG5vIGNvZGUgaW4gQy1LZXJtaXQgZm9yIHRoYXQuCisjUmVtb3ZlIC1ETk9K QyBpZiBkZXNpcmVkIChpZiB5b3VyIHN5c3RlbSBoYXMgY3NoLCBrc2gsIG9yIGJhc2gpLgorYmVs bHYxMDoKKwlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIEJlbGwgTGFicyBSZXNl YXJjaCBVTklYIFYxMC4uLgorCSQoTUFLRSkgd2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVC0kKEAp fSBcCisJIkNGTEFHUz0gLURCRUxMVjEwIC1EQlNENCAtRE5ESVIgLUROT0pDIC1ETk9TWVNJT0NU TEggLUROT1NFVFJFVSBcCisJLUROT0NTRVRTIC1NSU5JRElBTCAkKEtGTEFHUykiCisKKyMgV0FS TklORzogVGhlIGVhcmx5IEJTRCBlbnRyaWVzIGRvIG5vdCBidWlsZCBpbiB2ZXJzaW9uIDcuMCB3 aXRoIHRoZSBzdG9jaworIyBCU0QgY29tcGlsZXI6ICJUb28gbWFueSBkZWZpbmVzIi4gIFVubGVz cyB5b3UgY2FuIHJlYnVpbGQgY3BwIHRvIGhhdmUgbW9yZQorIyBzcGFjZSBmb3IgZGVmaW5lcywg dGhlc2UgYnVpbGRzIG11c3QgYmUgYWNjb21wbGlzaGVkIGJ5OgorIyBjb3B5aW5nIHRoZSAvdXNy L2luY2x1ZGUgdHJlZSB0byBzb21lcGxhY2UgZWxzZSwgcHJlcHJvY2Vzc2luZyB0aGVyZSB3aXRo IGNjCisjIC1FIC1JLi9pbmNsdWRlIG9yIHdoYXRldmVyIChwbHVzIGFsbCB0aGUgc2FtZSAtRCdz LCBhZGRpbmcgYW55IG5lY2Vzc2FyeQorIyAtVS8tRCB0byBvdmVycmlkZSB0aGUgYXJjaGl0ZWN0 dXJlKSksIHJlbmFtaW5nIHRoZSB0aGUgcmVzdWx0aW5nIGZpbGVzIGJhY2sKKyMgdG8gdGhlaXIg b3JpZ2luYWwgbmFtZXMsIGJyaW5naW5nIHRoZW0gYmFjayB0byB0aGUgb3JpZ2luYWwgQlNEIHN5 c3RlbSwgYW5kCisjIHJ1bm5pbmcgdGhlIG1ha2UgdGFyZ2V0IHRoZXJlLiAgVGhpcyB0ZWNobmlx dWUgd2FzIHVzZWQgZm9yIDQuMiBhbmQgNC4zIEJTRAorIyBvbiBhIFZBWCBpbiBDLUtlcm1pdCA3 LjAgKGxhdGVyLCBjcHAgb24gdGhhdCBtYWNoaW5lIHdhcyByZWJ1aWx0IHRvIGFsbG93CisjIG1v cmUgc3ltYm9scywgc28gdGhlIEMtS2VybWl0IDguMCBidWlsZCBwcm9jZWVkcyBub3JtYWxseSku CisKKyNCZXJrZWxleSBVbml4IDQuMQorYnNkNDE6CisJQGVjaG8gTWFraW5nIEMtS2VybWl0ICQo Q0tWRVIpIGZvciA0LjFCU0QuLi4KKwkkKE1BS0UpIHdlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQt JChAKX0gXAorCSJDRkxBR1M9IC1EQlNENDEiICJMSUJTID0gLWxqb2JzIgorCisjQmVya2VsZXkg NC4yLCA0LjMsIGFsc28gVWx0cml4LTMyIDEueCwgMi54LCAzLngsIG1hbnkgb3RoZXJzCisjIEFk ZCAtTywgLXMsIGV0YywgaWYgdGhleSB3b3JrLgorIyBJZiB5b3UgaGF2ZSBhIHZlcnNpb24gb2Yg QlNEIGJ1dCBzaWduYWwoKSBpcyB2b2lkIHJhdGhlciB0aGFuIGludCwKKyMgIm1ha2UgYnNkIEtG TEFHUz0tRFNJR19WIi4KK2JzZDQyOgorCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBm b3IgNC4yQlNELi4uCisJJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VULSQoQCl9IFwK KwkiQ0ZMQUdTPSAtREJTRDQgLURUQ1BTT0NLRVQgLUROT1JFQUxQQVRIIC1ETk9USU1FSCAtRE5P SUtTRCBcCisJLURDS19DVVJTRVMgLURTWVNUSU1FQkggLUROT1BVVEVOViAtRE5PQU5TSSAtREJJ R0JVRk9LIC1EQlNENDJIQUNLIFwKKwkkKEtGTEFHUykiICJMSUJTPS1sY3Vyc2VzIC1sdGVybWNh cCAkKExJQlMpIgorCitic2Q6CisJJChNQUtFKSBDQz0kKENDKSBDQzI9JChDQzIpIGJzZDQyIEtU QVJHRVQ9JCR7S1RBUkdFVC0kKEApfQorCisjQmVya2VsZXkgVW5peCA0LjIgb3IgNC4zIHdpdGgg SG9uZXlEYW5CZXIgVVVDUAorYnNkaGRiOgorCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVS KSBmb3IgNC4yQlNEIHdpdGggSERCIFVVQ1AuLi4KKwkkKE1BS0UpIENDPSQoQ0MpIENDMj0kKEND MikgYnNkIEtUQVJHRVQ9JCR7S1RBUkdFVC0kKEApfSBcCisJIktGTEFHUz0gLURIREJVVUNQICQo S0ZMQUdTKSIKKworI0JlcmtlbGV5IFVuaXggNC4zIHdpdGggYWN1Y250cmwgcHJvZ3JhbSwgY3Vy c2VzLCBUQ1AvSVAgaW5jbHVkZWQuCitic2Q0MzoKKwlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChD S1ZFUikgZm9yIDQuM0JTRC4uLgorCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVC0k KEApfSBcCisJIkNGTEFHUz0gLURCU0Q0IC1EQlNENDMgLURUQ1BTT0NLRVQgLUROT1JFQUxQQVRI IC1ETk9USU1FSCAtRE5PSUtTRCBcCisJLURDS19DVVJTRVMgLURBQ1VDTlRSTCAtRFNZU1RJTUVC SCAtRE5PUFVURU5WIC1ETk9BTlNJIC1EQklHQlVGT0sgXAorCS1EQlNENDJIQUNLICQoS0ZMQUdT KSIgIkxJQlM9LWxjdXJzZXMgLWx0ZXJtY2FwICQoTElCUykiCisKKyM0LjNCU0QsIGN1cnNlcyBl eGNsdWRlZAorYnNkNDNuYzoKKwlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIDQu M0JTRC4uLgorCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVC0kKEApfSBcCisJIkNG TEFHUz0gLURCU0Q0IC1EQlNENDMgLURUQ1BTT0NLRVQgLUROT1JFQUxQQVRIIC1ETk9USU1FSCBc CisJLURBQ1VDTlRSTCAtRFNZU1RJTUVCSCAtRE5PSUtTRCAtRE5PUFVURU5WIC1ETk9BTlNJIC1E QklHQlVGT0sgXAorCS1EQlNENDJIQUNLICQoS0ZMQUdTKSIgIkxJQlM9JChMSUJTKSIKKworIzQu M0JTRCwgVENQL0lQIGV4Y2x1ZGVkLgorYnNkNDNub25ldDoKKwlAZWNobyBNYWtpbmcgQy1LZXJt aXQgJChDS1ZFUikgZm9yIDQuM0JTRCArIGN1cnNlcy4uLgorCSQoTUFLRSkgeGVybWl0IEtUQVJH RVQ9JCR7S1RBUkdFVC0kKEApfSBcCisJIkNGTEFHUz0gLURCU0Q0IC1EQlNENDMgLURUQ1BTT0NL RVQgLUROT1JFQUxQQVRIIC1ETk9USU1FSCAtRE5PSUtTRCBcCisJLURDS19DVVJTRVMgLURBQ1VD TlRSTCAtRFNZU1RJTUVCSCAtRE5PUFVURU5WIC1ETk9BTlNJIC1EQklHQlVGT0sgXAorCS1EQlNE NDJIQUNLIC1ETk9ORVQgJChLRkxBR1MpIiAiTElCUz0tbGN1cnNlcyAtbHRlcm1jYXAgJChMSUJT KSIKKworI0JlcmtlbGV5IFVuaXggNC4yIG9yIDQuMyB3aXRoIGxvY2sgZGlyZWN0b3J5IC91c3Iv c3Bvb2wvdXVjcC9MQ0svTENLLi50dHl4eCwKKyNidXQgd2l0aG91dCBhY3VjbnRybCBwcm9ncmFt Citic2RsY2s6CisJQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciA0LjJCU0QsIC91 c3Ivc3Bvb2wvdXVjcC9MQ0svLi4uCisJJChNQUtFKSBDQz0kKENDKSBDQzI9JChDQzIpIGJzZCBL VEFSR0VUPSQke0tUQVJHRVQtJChAKX0gXAorCSJLRkxBR1M9IC1ETENLRElSICQoS0ZMQUdTKSIK KworI0JlcmtlbGV5IFVOSVggNC40LUxpdGUsIDQuNC1FbmN1bWJlcmVkLCBOZXQvMiwgZXRjIChQ b3N0LVJlbm8pLAorI3dpdGggVENQL0lQIG5ldHdvcmtpbmcuICBUaGlzIHdhcyB0aGUgYmFzaXMg Zm9yIEZyZWVCU0QsIE5ldEJTRCwgT3BlbkJTRCwKKyNCU0RJLCBCU0QvT1MsIGFuZCBNYWMgT1Mg WCAoZWFjaCBvZiB3aGljaCBoYXMgaXRzIG93biBzZXQgb2YgdGFyZ2V0cyB0aGF0CisjYXJlIG5l d2VyIHRoYW4gdGhpcyBvbmUpLgorIworI05PVEU6IFRoaXMgaXMgbm90IGEgcHVyZSBQT1NJWCBj b25maWd1cmF0aW9uLiAgVXNpbmcgLURQT1NJWCBpbnN0ZWFkIG9mCisjIC1EQlNENDQgcHJldmVu dHMgYW55IGtpbmQgb2YgZGlyZWN0b3J5LXJlYWRpbmcgKGZvciB3aWxkY2FyZCBleHBhbnNpb24p LAorI2FuZCBkaXNhbGxvd3MgdXNlIG9mIEVOT1RDT05OIHN5bWJvbCBmb3IgZGV0ZWN0aW5nIGJy b2tlbiBuZXR3b3JrCisjY29ubmVjdGlvbnMsIGFuZCBkaXNhbGxvd3MgUlRTL0NUUyBmbG93IGNv bnRyb2wsIGFuZCB3b3VsZCBhbHNvIHJlcXVpcmUKKyNkZWZpbml0aW9uIG9mIHRoZSBhcHByb3By aWF0ZSBVVUNQIGxvY2tmaWxlIGNvbnZlbnRpb24uCisjRG8gbm90IGFkZCAtRENLX1BPU0lYX1NJ RyB3aXRob3V0IHJlYWRpbmcgPHNpZ25hbC5oPiBmaXJzdCEgIEZvciBleGFtcGxlLAorI3NpZ3Nl dGptcCgpLCBldGMsIHRlbmQgdG8gYmUgZGVmaW5lZCBidXQgbm90IGltcGxlbWVudGVkLgorIwor I05PVEU6IG9yaWdpbmFsbHkgY3J5cHQgd2FzIGluIGxpYmMgLSBsYXRlciBpdCB3YXMgdW5idW5k bGVkLgorI1JlbW92ZSB0aGUgTElCUyBjbGF1c2UgdG8gYnVpbGQgb24gYW4gZWFybHkgNC40QlNE IHBsYXRmb3JtLgorIworYnNkNDQ6CisJQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZv ciA0LjRCU0QuLi4KKwkkKE1BS0UpIENDPSQoQ0MpIENDMj0kKENDMikgeGVybWl0IEtUQVJHRVQ9 JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1M9IC1EQlNENDQgLURUQ1BTT0NLRVQgJChLRkxB R1MpIC1PIiAiTElCUz0tbGNyeXB0IgorCisjQmVya2VsZXkgVU5JWCA0LjQsIGFzIGFib3ZlLCBi dXQgd2l0aCBjdXJzZXMgZm9yIGZ1bGxzY3JlZW4gZGlzcGxheQorI1BsZWFzZSByZWFkIG5vdGVz IGZvciBic2Q0NCBlbnRyeSBqdXN0IGFib3ZlLgorIyBOT1RFOiBUaGlzIG9uZSBkdW1wZWQgY29y ZSBvbiB0aGUgcmVhbCA0LjRCU0QgZGV2ZWxvcG1lbnQgc3lzdGVtIGF0CisjIFVDIEJlcmtlbGV5 IChhbiBIUC05MDAwLzMwMCksIHNvIHRoZSBuby1jdXJzZXMgdmVyc2lvbiB3YXMgdXNlZAorIyBm b3IgdGhhdCBvbmUsIHdoaWNoIHdhcyB1bnBsdWdnZWQgeWVhcnMgYWdvLgorYnNkNDRjOgorCUBl Y2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgNC40QlNEIHdpdGggY3Vyc2VzLi4uCisJ JChNQUtFKSBDQz0kKENDKSBDQzI9JChDQzIpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQo QCl9IFwKKwkiQ0ZMQUdTPSAtREJTRDQ0IC1EQ0tfQ1VSU0VTIC1EVENQU09DS0VUICQoS0ZMQUdT KSAtTyIgXAorCSJMSUJTPSAtbGN1cnNlcyAtbHRlcm1jYXAgLWxjcnlwdCAkKExJQlMpIgorCisj Rm9yIEZyZWVCU0QgMS54LgorZnJlZWJzZDE6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENL VkVSKSBmb3IgRnJlZUJTRC4uLicKKwkkKE1BS0UpIENDPSQoQ0MpIENDMj0kKENDMikgeGVybWl0 IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1M9IC1EQlNENDQgLURDS19DVVJT RVMgLURUQ1BTT0NLRVQgLUROT0NPVEZNQyAtZnVuc2lnbmVkLWNoYXIgXAorCS1ERk5GTE9BVCAt RE5PSFRFUk1DQVAgLUROT1JFQUxQQVRIIC1ETk9TWVNDT05GICQoS0ZMQUdTKSAtTyAtcGlwZSIg XAorCSJMSUJTPSAtbGN1cnNlcyAtbHRlcm1jYXAgLWxtICQoTElCUykiCisKKyNGcmVlQlNEIDIu eCB3aXRoIG5jdXJzZXMKK2ZyZWVic2QyOgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZF UikgZm9yIEZyZWVCU0QgMi54IHdpdGggbmN1cnNlcy4uLicKKwkkKE1BS0UpIENDPSQoQ0MpIEND Mj0kKENDMikgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1M9IC1E QlNENDQgLURDS19OQ1VSU0VTIC1EVENQU09DS0VUIC1ETk9DT1RGTUMgLURVU0VfU1RSRVJST1Ig XAorCS1EVFBVVFNBUkdUWVBFPWludCAtRFRQVVRTQVJHMUNPTlNUIC1ERlJFRUJTRDIgLWZ1bnNp Z25lZC1jaGFyIFwKKwktREZORkxPQVQgJChLRkxBR1MpIC1PIC1waXBlIiBcCisJIkxJQlM9IC1s bmN1cnNlcyAtbHRlcm1saWIgLWxjcnlwdCAtbG0gJChMSUJTKSIKKworI0ZvciBGcmVlQlNEIDIu eCAtLSBVc2VzIGN1cnNlcyByYXRoZXIgdGhhbiBuY3Vyc2VzCitmcmVlYnNkMmM6CisJQGVjaG8g J01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgRnJlZUJTRCAyLnggd2l0aCBjdXJzZXMuLi4n CisJJChNQUtFKSBDQz0kKENDKSBDQzI9JChDQzIpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6 LSQoQCl9IFwKKwkiQ0ZMQUdTPSAtREJTRDQ0IC1EQ0tfQ1VSU0VTIC1EVENQU09DS0VUIC1ETk9D T1RGTUMgLURVU0VfU1RSRVJST1IgXAorCS1EVFBVVFNBUkdUWVBFPWludCAtRFRQVVRTQVJHMUNP TlNUIC1ERlJFRUJTRDIgLURGTkZMT0FUIFwKKwktZnVuc2lnbmVkLWNoYXIgJChLRkxBR1MpIC1P IC1waXBlIiBcCisJIkxJQlM9IC1sY3Vyc2VzIC1sdGVybWxpYiAtbGNyeXB0IC1sbSAkKExJQlMp IgorCisjRnJlZUJTRCAzLnggd2l0aCBuY3Vyc2VzIGFuZCB1dV9sb2NrKCkKKyMoTm90ZTogdXVf bG9jaygpIGdvZXMgYmFjayB0byAyLjIuMiwgYnV0IG5vdCBuZWNlc3NhcmlseSAyLjApCisjT0sg MjAxMS8wOC8yMCBGcmVlQlNEIDMuMworZnJlZWJzZDM6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1p dCAkKENLVkVSKSBmb3IgRnJlZUJTRCAzLnggd2l0aCBuY3Vyc2VzLi4uJworCSQoTUFLRSkgQ0M9 JChDQykgQ0MyPSQoQ0MyKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNG TEFHUz0gLURCU0Q0NCAtRENLX05DVVJTRVMgLURUQ1BTT0NLRVQgLUROT0NPVEZNQyAtZnVuc2ln bmVkLWNoYXIgXAorCS1EVFBVVFNBUkdUWVBFPWludCAtRFVTRV9TVFJFUlJPUiAtREZSRUVCU0Qz IC1EVVNFX1VVX0xPQ0sgLURGTkZMT0FUIFwKKwkkKEtGTEFHUykgLU8gLXBpcGUiIFwKKwkiTElC Uz0gLWxuY3Vyc2VzIC1sY3J5cHQgLWx1dGlsIC1sbSAkKExJQlMpIgorCisjQXMgYWJvdmUgYnV0 IHdpdGggY3Vyc2VzIHJhdGhlciB0aGFuIG5jdXJzZXMuCitmcmVlYnNkM2M6CisJQGVjaG8gJ01h a2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgRnJlZUJTRCAzLnggd2l0aCBjdXJzZXMuLi4nCisJ JChNQUtFKSBDQz0kKENDKSBDQzI9JChDQzIpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQo QCl9IFwKKwkiQ0ZMQUdTPSAtREJTRDQ0IC1EQ0tfQ1VSU0VTIC1EVENQU09DS0VUIC1ETk9DT1RG TUMgLURVU0VfVVVfTE9DSyBcCisJLURUUFVUU0FSR1RZUEU9aW50IC1EVVNFX1NUUkVSUk9SIC1E RlJFRUJTRDMgJChLRkxBR1MpIC1ERk5GTE9BVCBcCisJLWZ1bnNpZ25lZC1jaGFyIC1waXBlIC1P IiBcCisJIkxJQlM9IC1sY3Vyc2VzIC1sY3J5cHQgLWx1dGlsIC1sbSAkKExJQlMpIgorCisjRnJl ZUJTRCA0LjAgd2l0aCBuY3Vyc2VzIGFuZCB1dV9sb2NrKCkuICBOb3RlIC0gdGhlcmUgaXMgbm8g Y3Vyc2VzIGluIDQuMC4KKyNuY3Vyc2VzIDUuMCBpcyBicm9rZW4gcmVxdWlyaW5nIHVzIHRvIHdv cmsgYXJvdW5kIHdpdGggc2V0YnVmKCkuCitmcmVlYnNkNDA6CisJQGVjaG8gJ01ha2luZyBDLUtl cm1pdCAkKENLVkVSKSBmb3IgRnJlZUJTRCA0Lnggd2l0aCBuY3Vyc2VzLi4uJworCSQoTUFLRSkg Q0M9JChDQykgQ0MyPSQoQ0MyKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJ IkNGTEFHUz0gLURCU0Q0NCAtRENLX05DVVJTRVMgLURUQ1BTT0NLRVQgLUROT0NPVEZNQyAtREZO RkxPQVQgXAorCS1mdW5zaWduZWQtY2hhciAtRFRQVVRTQVJHVFlQRT1pbnQgLURVU0VfU1RSRVJS T1IgLURGUkVFQlNENCBcCisJLUROT05PU0VUQlVGIC1EVVNFX1VVX0xPQ0sgJChLRkxBR1MpIC1P IC1waXBlIiBcCisJIkxJQlM9IC1sbmN1cnNlcyAtbGNyeXB0IC1sdXRpbCAtbG0gJChMSUJTKSIK KworI0ZyZWVCU0QgNC4xIGFuZCBhYm92ZQorI0xpa2UgRnJlZUJTRCA0LjAgYnV0IHdpdGhvdXQg dGhlIE5PTk9TRVRCVUYgaGFjayBhbmQgd2l0aCBDS19ORVdURVJNLgorI05PVEU6IFRoaXMgdGFy Z2V0IGRlZmluaXRlbHkgZG9lcyBub3Qgd29yayBmb3IgRnJlZUJTRCAzLjMgaW4gOS4wLjMwMi4K KyNhbmQgaXQgaGFzIG5vdCBiZWVuIHRlc3RlZCBvbiA0IG9yIDUuCisjT0sgMjAxMS8wNi94eCBG cmVlQlNEIDMuMywgNCw0LCA0LjcsIGFuZCA4LjIKKyNPSyAyMDExLzA4LzIxIEZyZWVCU0QgMy4z LCA0LjQsIDYuNCwgOS4wCitmcmVlYnNkIGZyZWVic2Q0MSBmcmVlYnNkNzIgZnJlZWJzZDUgZnJl ZWJzZDYgZnJlZWJzZDcgZnJlZWJzZDggZnJlZWJzZDk6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1p dCAkKENLVkVSKSBmb3IgRnJlZUJTRCA0LjEgb3IgbGF0ZXIuLi4nCisJQGlmIHRlc3QgYHVuYW1l IC1yIHwgY3V0IC1kIC4gLWYgMWAgLWdlIDg7IHRoZW4gXAorCSAgIEhBVkVfRkJTRDg9Jy1ERlJF RUJTRDgnOyBcCisJZWxzZSBIQVZFX0ZCU0Q4PScnOyBmaTsgXAorCWlmIHRlc3QgYHVuYW1lIC1y IHwgY3V0IC1kIC4gLWYgMWAgLWdlIDk7IHRoZW4gXAorCSAgIEhBVkVfRkJTRDk9Jy1ERlJFRUJT RDknOyBcCisJZWxzZSBIQVZFX0ZCU0Q5PScnOyAgZmk7IFwKKwlpZiB0ZXN0IC1mIC91c3IvaW5j bHVkZS91dG1weC5oIDsgXAorCXRoZW4gSEFWRV9VVE1QWD0nLURIQVZFVVRNUFgnIDsgXAorCWVs c2UgSEFWRV9VVE1QWD0nJyA7IGZpOyBcCisJJChNQUtFKSBDQz0kKENDKSBDQzI9JChDQzIpIHhl cm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTPSAtREJTRDQ0IC1EQ0tf TkNVUlNFUyAtRENLX05FV1RFUk0gLURUQ1BTT0NLRVQgLUROT0NPVEZNQyBcCisJLURGUkVFQlNE NCAkJEhBVkVfRkJTRDggJCRIQVZFX0ZCU0Q5IC1EVVNFX1VVX0xPQ0sgLURGTkZMT0FUIFwKKwkk JEhBVkVfVVRNUFggLURIRVJBTEQ9XCJcXFwiIGB1bmFtZSAtcnNgXFxcIlwiIFwKKwktZnVuc2ln bmVkLWNoYXIgLURUUFVUU0FSR1RZUEU9aW50IC1EVVNFX1NUUkVSUk9SICQoS0ZMQUdTKSBcCisJ LU8yIC1waXBlIlwKKwkiTElCUz0gLWxuY3Vyc2VzIC1sY3J5cHQgLWx1dGlsIC1sbSAkKExJQlMp IgorCisjRnJlZUJTRCA1LjAgb3IgbGF0ZXIgd2l0aCBPcGVuU1NMLgorI09LIDIwMTEvMDYvMTUg RnJlZUJTRCA0LjcgYW5kIDguMgorI09LIDIwMTEvMDgvMjAgRnJlZUJTRCA5LjAtQ1VSUkVOVAor ZnJlZWJzZCtzc2wgZnJlZWJzZCtvcGVuc3NsIGZyZWVic2Q1MCtvcGVuc3NsOgorCUBlY2hvICdN YWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIEZyZWVCU0Qgd2l0aCBLZXJiZXJvcyA1Li4uJwor CUBjYXNlIGBvcGVuc3NsIHZlcnNpb25gIGluIFwKKwkgICowLjkuNyopIE9QRU5TU0xPUFRJT049 Ii1ET1BFTlNTTF8wOTciIDs7IFwKKwkgICowLjkuOCopIE9QRU5TU0xPUFRJT049Ii1ET1BFTlNT TF8wOTgiIDs7IFwKKwkgICoxLlswLTldLlswLTldKikgT1BFTlNTTE9QVElPTj0iLURPUEVOU1NM XzEwMCIgOzsgXAorCSAgKikgT1BFTlNTTE9QVElPTj0iIiA7OyBcCisJZXNhYzsgXAorCUhBVkVf REVTPScnOyBcCisJREVTX0xJQj0nJzsgXAorCWlmIGxzIC91c3IvbGliL2xpYmRlcyogPiAvZGV2 L251bGwgMj4gL2Rldi9udWxsIHx8IFwKKwkgICBscyAkKFNTTExJQikvbGliZGVzKiA+IC9kZXYv bnVsbCAyPiAvZGV2L251bGw7IHRoZW4gXAorCSAgICAgIERFU19MSUI9Jy1sZGVzJzsgXAorCSAg ICAgIEhBVkVfREVTPSctRENLX0RFUyAtRExJQkRFUyc7IFwKKyAgICAgICAgICAgICAgZWNobyAi SEFWRSBERVMiOyBcCisgICAgICAgICAgIGVsc2UgZWNobyAiTk8gREVTIjsgXAorCWZpOyBcCisJ JChNQUtFKSBmcmVlYnNkIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gIkNDID0gJChDQykiICJD QzIgPSAkKENDMikiIFwKKwlLRkxBR1M9Ii1EQ0tfQVVUSEVOVElDQVRJT04gLURDS19TU0wgJChT U0xJTkMpIC1EWkxJQiAkJE9QRU5TU0xPUFRJT04gXAorCSQkSEFWRV9ERVMgJChLRkxBR1MpIiAg IkxOS0ZMQUdTID0gJChMTktGTEFHUykiIFwKKwkiTElCUz0gLWxuY3Vyc2VzIC1sY3J5cHQgLWxz c2wgLWxjcnlwdG8gLWx1dGlsIC1sbSBcCisJJChTU0xMSUIpICQkREVTX0xJQiAkKExJQlMpIjsg XAorCWlmIFsgISAtZiAuL3dlcm1pdCBdIHx8IFsgLi9ja2NtYWkubyAtbnQgLi93ZXJtaXQgXSA7 IHRoZW4gXAorCQllY2hvICIiOyBcCisJCWVjaG8gIklmIGJ1aWxkIGZhaWxlZCB0cnk6IjsgXAor CQllY2hvICIiOyBcCisJCWVjaG8gIiAgbWFrZSBjbGVhbiA7IG1ha2UgJCR7S1RBUkdFVDotJChA KX0gS0ZMQUdTPS1VQ0tfREVTIjsgXAorCQllY2hvICIiOyBcCisJZmkKKworI05ldEJTRCAxLjQu MSBvciBsYXRlciB3aXRoIHZhbml0eSBiYW5uZXIgYXV0b21hdGVkIHdpdGggdW5hbWUKKyNhbmQg YXV0b21hdGljIGluY2x1c2lvbiBvZiBsYXJnZSBmaWxlIHN1cHBvcnQgaWYgaXQgaXMgYXZhaWxh YmxlLgorI1RoaXMgdGFyZ2V0IHRlc3RlZCBzdWNjZXNzZnVsbHkgb24gTmV0QlNEIDEuNC4xLCAx LjUuMiwgYW5kIDIuMC4zIChKYW4gMjAwNikuCisjRmFpbHMgb24gTmV0QlNEIDIuMCBvbiBTdW4v MyBtYzY4MDMwIHdpdGggZ2NjIDMuMy4zIHVubGVzcyBvcHRpbWl6YXRpb24gaXMKKyNkaXNhYmxl ZCBvbiBja2NmbjIuYyAoIktGTEFHUz0tTzAiKSAoTGV0dGVyIE8gRGlnaXQgWmVybykuCisjKFRo aXMgY291bGQgYmUgYXV0b21hdGVkIGJ5IHRlc3RpbmcgYHVuYW1lIC1tYCBmb3IgInN1bjMiLikK KyNPSzogMjAxMS8wNi8xNSBvbiBOZXRCU0QgMS41LjIgYW5kIDUuMS4KKyNPSzogMjAxMS8wOC8y MSBvbiA1LjEuCituZXRic2QgbmV0YnNkMiBuZXRic2QxNSBuZXRic2QxNiBvbGQtbmV0YnNkOgor CUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgTmV0QlNEIHdpdGggY3Vyc2VzLi4u CisJJChNQUtFKSBDQz0kKENDKSBDQzI9JChDQzIpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6 LSQoQCl9IFwKKwkiQ0ZMQUdTPWBncmVwIGZzZWVrbyAvdXNyL2luY2x1ZGUvc3RkaW8uaCA+IC9k ZXYvbnVsbCAmJiBcCisJZWNobyAnLURfTEFSR0VGSUxFX1NPVVJDRSAtRF9GSUxFX09GRlNFVF9C SVRTPTY0J2AgXAorCS1EQlNENDQgLURDS19DVVJTRVMgLURUQ1BTT0NLRVQgLURVU0VfU1RSRVJS T1IgLURIQVZFX09QRU5QVFkgXAorCS1mdW5zaWduZWQtY2hhciAtREhFUkFMRD1cIlxcXCIgTmV0 QlNEIGB1bmFtZSAtcmBcXFwiXCIgXAorCS1EQ0tfRFRSQ0QgLURDS19EVFJDVFMgLURUUFVUU0FS R1RZUEU9aW50IC1ERk5GTE9BVCAkKEtGTEFHUykgLU8iIFwKKwkiTElCUz0gLWxjdXJzZXMgLWxj cnlwdCAtbG0gLWx1dGlsICQoTElCUykiCisKKyNOZXRCU0QgMS40LjEgb3IgbGF0ZXIgd2l0aCBP cGVuU1NMCisjT0s6IDIwMTEvMDYvMTUgb24gTmV0QlNEIDUuMSAoYnV0IG5vdCAxLjUuMiB3aXRo IE9wZW5TU0wgMC45LjVhKQorI09LOiAyMDExLzA4LzIxIG9uIDUuMS4KK25ldGJzZCtzc2wgbmV0 YnNkK29wZW5zc2w6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgTmV0QlNE K09wZW5TU0wgU1NMTElCPSQoU1NMTElCKScKKwlAY2FzZSBgb3BlbnNzbCB2ZXJzaW9uYCBpbiBc CisJICAqMC45LjcqKSBPUEVOU1NMT1BUSU9OPSItRE9QRU5TU0xfMDk3IiA7OyBcCisJICAqMC45 LjgqKSBPUEVOU1NMT1BUSU9OPSItRE9QRU5TU0xfMDk4IiA7OyBcCisJICAqMS5bMC05XS5bMC05 XSopIE9QRU5TU0xPUFRJT049Ii1ET1BFTlNTTF8xMDAiIDs7IFwKKwkgICopIE9QRU5TU0xPUFRJ T049IiIgOzsgXAorCWVzYWM7IFwKKwlIQVZFX0RFUz0nJzsgXAorCURFU19MSUI9Jyc7IFwKKwlp ZiBscyAvdXNyL2xpYi9saWJkZXMqID4gL2Rldi9udWxsIDI+IC9kZXYvbnVsbCB8fCBcCisJICAg bHMgJChTU0xMSUIpL2xpYmRlcyogPiAvZGV2L251bGwgMj4gL2Rldi9udWxsOyB0aGVuIFwKKwkg ICAgICBERVNfTElCPSctbGRlcyc7IFwKKwkgICAgICBIQVZFX0RFUz0nLURDS19ERVMgLURMSUJE RVMnOyBcCisgICAgICAgICAgICAgIGVjaG8gIkhBVkUgREVTIjsgXAorICAgICAgICAgICBlbHNl IGVjaG8gIk5PIERFUyI7IFwKKwlmaTsgXAorCSQoTUFLRSkgbmV0YnNkIEtUQVJHRVQ9JCR7S1RB UkdFVDotJChAKX0gIkNDID0gJChDQykiICJDQzIgPSAkKENDMikiIFwKKwkiS0ZMQUdTPSAtRENL X0FVVEhFTlRJQ0FUSU9OIC1EQ0tfRU5DUllQVElPTiAtRENLX0NBU1QgJCRIQVZFX0RFUyBcCisJ LURDS19TU0wgLURDS19QQU0gLURaTElCIC1ETk9fRENMX0lORVRfQVRPTiAkJE9QRU5TU0xPUFRJ T04gXAorCSQoS0ZMQUdTKSIgIkxOS0ZMQUdTID0gJChMTktGTEFHUykiIFwKKwkiTElCUz0gLUwv dXNyL3BrZy9saWIgLVIvdXNyL3BrZy9saWIgLWxzc2wgJCRERVNfTElCIC1sY3Vyc2VzIFwKKwkt bGNyeXB0byAtbGNyeXB0IC1seiAtbG0gLWxwYW0gLWx1dGlsICQoTElCUykiCisKKyNOZXRCU0Qg d2l0aCBNSVQgS2VyYmVyb3MgNToKKyMgT0sgMjAxMS8wNi8xNSAob25jZSBLNUlOQyBhbmQgSzVM SUIgd2VyZSBzZXQgcmlnaHQpLgorIyBOT1QgT0sgZm9yIEhlaW1kYWwgLSBIZWltZGFsIEtlcmJl cm9zIHN1cHBvcnQgaW4gQy1LZXJtaXQgbmVlZHMgd29yay4KKyMgT0s6IDIwMTEvMDgvMjEgb24g NS4xLgorbmV0YnNkK2tyYjU6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3Ig TmV0QlNEIHdpdGggS2VyYmVyb3MgNS4uLicKKwlAY2FzZSBgb3BlbnNzbCB2ZXJzaW9uYCBpbiBc CisJICAqMC45LjcqKSBPUEVOU1NMT1BUSU9OPSItRE9QRU5TU0xfMDk3IiA7OyBcCisJICAqMC45 LjgqKSBPUEVOU1NMT1BUSU9OPSItRE9QRU5TU0xfMDk4IiA7OyBcCisJICAqMS5bMC05XS5bMC05 XSopIE9QRU5TU0xPUFRJT049Ii1ET1BFTlNTTF8xMDAiIDs7IFwKKwkgICopIE9QRU5TU0xPUFRJ T049IiIgOzsgXAorCWVzYWM7IFwKKwlIQVZFX0RFUz0nJzsgXAorCURFU19MSUI9Jyc7IFwKKwlp ZiBscyAvdXNyL2xpYi9saWJkZXMqID4gL2Rldi9udWxsIDI+IC9kZXYvbnVsbCB8fCBcCisJICAg bHMgJChTU0xMSUIpL2xpYmRlcyogPiAvZGV2L251bGwgMj4gL2Rldi9udWxsOyB0aGVuIFwKKwkg ICAgICBERVNfTElCPSctbGRlcyc7IFwKKwkgICAgICBIQVZFX0RFUz0nLURDS19ERVMgLURMSUJE RVMnOyBcCisgICAgICAgICAgICAgIGVjaG8gIkhBVkUgREVTIjsgXAorICAgICAgICAgICBlbHNl IGVjaG8gIk5PIERFUyI7IFwKKwlmaTsgXAorCSQoTUFLRSkgbmV0YnNkIEtUQVJHRVQ9JCR7S1RB UkdFVDotJChAKX0gIkNDID0gJChDQykiICJDQzIgPSAkKENDMikiIFwKKwkiS0ZMQUdTPSAtRENL X0FVVEhFTlRJQ0FUSU9OIC1EQ0tfRU5DUllQVElPTiAtRENLX0tFUkJFUk9TIC1ES1JCNSBcCisJ LURDS19DQVNUICQkSEFWRV9ERVMgLUROT0ZUUF9HU1NBUEkgJChLNUlOQykgJChLNUlOQykva3Ji NSBcCisJJChLRkxBR1MpIiBcCisJIkxJQlM9ICQoSzVMSUIpIC1ML3Vzci9wa2cvbGliIC1SL3Vz ci9wa2cvbGliIC1sY3Vyc2VzICQkREVTX0xJQiBcCisJLWxjcnlwdG8gLWxnc3NhcGkgLWxrcmI1 IC1sbSAtbHV0aWwgJChMSUJTKSIKKworIyBOZXRCU0QgLSBXaXRoIEtlcmJlcm9zIDUgYW5kIFNT TCBhbmQgWmxpYi4KKyMgT0s6IDIwMTEvMDgvMjEgb24gNS4xIHdpdGggTUlUIEtlcmJlcm9zLgor bmV0YnNkK2tyYjUrc3NsIG5ldGJzZCtrcmI1K29wZW5zc2wremxpYjoKKwlAZWNobyAnTWFraW5n IEMtS2VybWl0ICQoQ0tWRVIpIGZvciBOZXRCU0QrT3BlblNTTCtLZXJiZXJvczUuLi4nCisJQGNh c2UgYG9wZW5zc2wgdmVyc2lvbmAgaW4gXAorCSAgKjAuOS43KikgT1BFTlNTTE9QVElPTj0iLURP UEVOU1NMXzA5NyIgOzsgXAorCSAgKjAuOS44KikgT1BFTlNTTE9QVElPTj0iLURPUEVOU1NMXzA5 OCIgOzsgXAorCSAgKjEuWzAtOV0uWzAtOV0qKSBPUEVOU1NMT1BUSU9OPSItRE9QRU5TU0xfMTAw IiA7OyBcCisJICAqKSBPUEVOU1NMT1BUSU9OPSIiIDs7IFwKKwllc2FjOyBcCisJSEFWRV9ERVM9 Jyc7IFwKKwlERVNfTElCPScnOyBcCisJaWYgbHMgL3Vzci9saWIvbGliZGVzKiA+IC9kZXYvbnVs bCAyPiAvZGV2L251bGwgfHwgXAorCSAgIGxzICQoU1NMTElCKS9saWJkZXMqID4gL2Rldi9udWxs IDI+IC9kZXYvbnVsbDsgdGhlbiBcCisJICAgICAgREVTX0xJQj0nLWxkZXMnOyBcCisJICAgICAg SEFWRV9ERVM9Jy1EQ0tfREVTIC1ETElCREVTJzsgXAorICAgICAgICAgICAgICBlY2hvICJIQVZF IERFUyI7IFwKKyAgICAgICAgICAgZWxzZSBlY2hvICJOTyBERVMiOyBcCisJZmk7IFwKKwkkKE1B S0UpIG5ldGJzZCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9ICJDQyA9ICQoQ0MpIiAiQ0MyID0g JChDQzIpIiBcCisJIktGTEFHUz0gLURDS19BVVRIRU5USUNBVElPTiAtRENLX0VOQ1JZUFRJT04g LURDS19DQVNUICQkSEFWRV9ERVMgXAorCS1EQ0tfS0VSQkVST1MgLURLUkI1IC1ETk9GVFBfR1NT QVBJICQoSzVJTkMpICQoSzVJTkMpL2tyYjUgXAorCS1EQ0tfU1NMIC1EQ0tfUEFNIC1EWkxJQiAt RE5PX0RDTF9JTkVUX0FUT04gJCRPUEVOU1NMT1BUSU9OIFwKKwkkKEtGTEFHUykiICJMTktGTEFH UyA9ICQoTE5LRkxBR1MpIiBcCisJIkxJQlM9ICQoSzVMSUIpIC1ML3Vzci9wa2cvbGliIC1SL3Vz ci9wa2cvbGliIC1sc3NsICQkREVTX0xJQiBcCisJLWxjcnlwdG8gLWxjcnlwdCAtbGdzc2FwaSAt bGtyYjUgLWx6IC1sbSAtbHBhbSAtbHV0aWwgLWxjdXJzZXMgJChMSUJTKSIKKworI1NwZWNpYWwg U2VjdXJpdHkgRW5oYW5jZWQgTmV0QlNEIHRhcmdldCB3aXRoIFNSUCwgU1NMLCBhbmQgemxpYiBz dXBwb3J0LgorI1RvIGJ1aWxkIHRoaXMsIHlvdSBuZWVkIHRvIEJVSUxEIHRoZSBwa2dzcmMgc3Jw X2NsaWVudCBwYWNrYWdlLiAgQWZ0ZXIKKyN5b3UgYnVpbGQgaXQsIHlvdSBtdXN0IGdvIGludG8g d29yay9zcnAteC55LnovbGlia3J5cHRvIGFuZCAiYm1ha2UgaW5zdGFsbCIKKyN0aGVuIGdvIHRv IHdvcmsvc3JwLXgueS56L2xpYnNycCBhbmQgImJtYWtlIGluc3RhbGwiLiAgQXMgb2YgMjAwNVEz LCB0aGUKKyNwa2dzcmMgaW5zdGFsbCBvbmx5IGluc3RhbGxlZCB0aGUgc3RhdGljYWxseSBsaW5r ZWQgY2xpZW50IGFwcGxpY2F0aW9ucy4gIFlvdQorI25lZWQgdG8gbWFudWFsbHkgaW5zdGFsbCB0 aGUgbGlicmFyaWVzIHRvIGJ1aWxkIHlvdXIgb3duIGFwcGxpY2F0aW9ucy4KKyNOT1QgVEVTVEVE IFJFQ0VOVExZIC0gcHJvYmFibHkgbmVlZHMgd29yay4KK25ldGJzZCtzc2wrc3JwK3psaWI6CisJ QGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBOZXRCU0Qgd2l0aCBjdXJzZXMuLi4K KwkkKE1BS0UpIENDPSQoQ0MpIENDMj0kKENDMikgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDot JChAKX0gXAorCSJDRkxBR1M9IC1EQlNENDQgLURDS19DVVJTRVMgLURUQ1BTT0NLRVQgLURVU0Vf U1RSRVJST1IgLURORVRCU0QxNSBcCisJLURDS19EVFJDRCAtRENLX0RUUkNUUyAtRFRQVVRTQVJH VFlQRT1pbnQgLURIQVZFX09QRU5QVFkgXAorCS1JL3Vzci9pbmNsdWRlL29wZW5zc2wgLUkvdXNy L3BrZy9pbmNsdWRlIFwKKwktRENLX0FVVEhFTlRJQ0FUSU9OIC1EQ0tfU1JQIC1EUFJFX1NSUF8x XzRfNSAtRENLX0VOQ1JZUFRJT04gXAorCS1EQ0tfQ0FTVCAtRENLX0RFUyAtRExJQkRFUyAtRENL X1NTTCAtRFpMSUIgLURGTkZMT0FUICQoS0ZMQUdTKSAtTyIgXAorCSJMSUJTPSAtTC91c3IvcGtn L2xpYiAtUi91c3IvcGtnL2xpYiAtbGN1cnNlcyAtbHNycCAtbGdtcCAtbGRlcyBcCisJLWxzc2wg LWxrcnlwdG8gLWxjcnlwdG8gLWxjcnlwdCAtbHogLWxtIC1sdXRpbCAkKExJQlMpIgorCisjTmV0 QlNEIHdpdGggY3Vyc2VzIGxlZnQgb3V0IChlLmcuIGZvciB1c2UgYXMgSUtTRCkuCituZXRic2Ru YzoKKwlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIE5ldEJTRCB3aXRoIG5vIGN1 cnNlcy4uLgorCSQoTUFLRSkgQ0M9JChDQykgQ0MyPSQoQ0MyKSBuZXRic2QgS1RBUkdFVD0kJHtL VEFSR0VUOi0kKEApfSBcCisJIktGTEFHUz0tRE5PQ1VSU0VTIgorCisjTmV0QlNEIHdpdGggbmN1 cnNlcyByZXF1ZXN0ZWQgZXhwbGljaXRseSByYXRoZXIgdGhhbiBjdXJzZXMtd2hpY2gtaXMtbmN1 cnNlcworbmV0YnNkbjoKKwlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIE5ldEJT RCB3aXRoIGN1cnNlcy4uLgorCSQoTUFLRSkgQ0M9JChDQykgQ0MyPSQoQ0MyKSB4ZXJtaXQgS1RB UkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUz1gZ3JlcCBmc2Vla28gL3Vzci9pbmNs dWRlL3N0ZGlvLmggPiAvZGV2L251bGwgJiYgXAorCWVjaG8gJy1EX0xBUkdFRklMRV9TT1VSQ0Ug LURfRklMRV9PRkZTRVRfQklUUz02NCdgIFwKKwktREJTRDQ0IC1EQ0tfQ1VSU0VTIC1EVENQU09D S0VUIC1EVVNFX1NUUkVSUk9SIC1ESEFWRV9PUEVOUFRZIFwKKwktREhFUkFMRD1cIlxcXCIgTmV0 QlNEIGB1bmFtZSAtcmBcXFwiXCIgXAorCS1EQ0tfRFRSQ0QgLURDS19EVFJDVFMgLURUUFVUU0FS R1RZUEU9aW50IC1ERk5GTE9BVCAkKEtGTEFHUykgLU8iIFwKKwkiTElCUz0gLUwvdXNyL3BrZy9s aWIgLWxuY3Vyc2VzIC1sY3J5cHQgLWxtIC1sdXRpbCAkKExJQlMpIgorCisjT3BlbkJTRCBiZWZv cmUgMi4zLgorI1VzZXMgbmN1cnNlcyBhcyBpdHMgY3Vyc2VzIHNvIHVzZSAtbHRlcm1saWIsIG5v dCAtbHRlcm1jYXAKKyNCdXQgaXQgZG9lc24ndCB1c2UgdXVfbG9jaygpIHdoaWNoIHdhcyBpbnRy b2R1Y2VkIGluIE9wZW5CU0QgMi4zLgorI0ZvciB0aGF0IHVzZSB0aGUgbmV4dCBlbnRyeS4KKyNB ZGQgLURNQUlOVFlQRT1pbnQgaWYgeW91IGdldCBjb21wbGFpbnRzIGFib3V0IG1haW46IHJldHVy biB0eXBlIGlzIG5vdCBpbnQuCitvcGVuYnNkb2xkOgorCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAk KENLVkVSKSBmb3IgT3BlbkJTRC4uLgorCSQoTUFLRSkgQ0M9JChDQykgQ0MyPSQoQ0MyKSB4ZXJt aXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUz0gLURCU0Q0NCAtRENLX0NV UlNFUyAtRENLX05FV1RFUk0gLURUQ1BTT0NLRVQgLURPUEVOQlNEIFwKKwktREZORkxPQVQgLURO RFNZU0VSUkxJU1QgJChLRkxBR1MpIC1PIiAiTElCUz0gLWxjdXJzZXMgLWx0ZXJtbGliIC1sbSIK KworI09wZW5CU0QgMi4zIG9yIGxhdGVyCisjQWRkIC1ETUFJTlRZUEU9aW50IGlmIHlvdSBnZXQg Y29tcGxhaW50cyBhYm91dCBtYWluOiByZXR1cm4gdHlwZSBpcyBub3QgaW50LgorI0ZvciBDLUtl cm1pdCA4LjAgKENocmlzdGlhbiBXZWlzZ2VyYmVyKToKKyMgLWx0ZXJtbGliIHJlbW92ZWQgKHBy ZXN1bWFibHkgYmVjYXVzZSAtbGN1cnNlcz09bmN1cnNlcyBhbHJlYWR5IGluY2x1ZGVzIGl0KQor IyAtRFVTRV9VVV9MT0NLIGFuZCAtbHV0aWwgYWRkZWQgZm9yIHV1X2xvY2soKQorIyAtRE5EU1lT RVJSTElTVCBjaGFuZ2VkIHRvIC1EVVNFX1NUUkVSUk9SCisjSWYgdGhpcyBnaXZlcyB5b3UgdHJv dWJsZSB1c2UgdGhlIHByZXZpb3VzIGVudHJ5LgorI05PVEU6IFRoZSBvcGVuYnNkIGFuZCBvcGVu YnNkK3NzbCBzaG91bGQgYmUgcmV3b3JrZWQgdG8gYmUgbGlrZSB0aGUKKyNjb3JyZXNwb25kaW5n IEZyZWVCU0QgYW5kIE5ldEJTRCB0YXJnZXRzLiAgVGhlIG1pcmJzZCB0YXJnZXRzIHNob3VsZAor b3BlbmJzZDoKKwlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIE9wZW5CU0QgMi4z IG9yIGxhdGVyLi4uCisJJChNQUtFKSBDQz0kKENDKSBDQzI9JChDQzIpIHhlcm1pdCBLVEFSR0VU PSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTPSAtREJTRDQ0IC1EQ0tfQ1VSU0VTIC1EQ0tf TkVXVEVSTSAtRFRDUFNPQ0tFVCAtRE9QRU5CU0QgXAorCS1ESEVSQUxEPVwiXFxcIiBPcGVuQlNE IGB1bmFtZSAtcmBcXFwiXCIgXAorCS1EVVNFX1VVX0xPQ0sgLURGTkZMT0FUIC1EVVNFX1NUUkVS Uk9SICQoS0ZMQUdTKSAtTyIgXAorCSJMSUJTPSAtbGN1cnNlcyAtbHV0aWwgLWxtIgorCisjQmV0 dGVyIHRvIGNoYWluIHRvIHRoZSBvcGVuYnNkIHRhcmdldCBidXQuLi4KK21pcmJzZDoKKwlAZWNo byBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIE9wZW5CU0QgMi4zIG9yIGxhdGVyLi4uCisJ JChNQUtFKSBDQz0kKENDKSBDQzI9JChDQzIpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQo QCl9IFwKKwkiQ0ZMQUdTPSAtREJTRDQ0IC1EQ0tfQ1VSU0VTIC1EQ0tfTkVXVEVSTSAtRFRDUFNP Q0tFVCAtRE9QRU5CU0QgXAorCS1ESEVSQUxEPVwiXFxcIiBNaXJCU0QgYHVuYW1lIC1yYFxcXCJc IiBcCisJLURVU0VfVVVfTE9DSyAtREZORkxPQVQgLURVU0VfU1RSRVJST1IgJChLRkxBR1MpIC1P IiBcCisJIkxJQlM9IC1sY3Vyc2VzIC1sdXRpbCAtbG0iCisKKyNPcGVuQlNEIDMuMCBvciBsYXRl ciBpbmNsdWRlcyBPcGVuU1NMCisjQWRkIC1ETUFJTlRZUEU9aW50IGlmIHlvdSBnZXQgY29tcGxh aW50cyBhYm91dCBtYWluOiByZXR1cm4gdHlwZSBpcyBub3QgaW50LgorI0ZvciBDLUtlcm1pdCA4 LjAgKENocmlzdGlhbiBXZWlzZ2VyYmVyKToKKyMgLWx0ZXJtbGliIHJlbW92ZWQgKHByZXN1bWFi bHkgYmVjYXVzZSAtbGN1cnNlcz09bmN1cnNlcyBhbHJlYWR5IGluY2x1ZGVzIGl0KQorIyAtRFVT RV9VVV9MT0NLIGFuZCAtbHV0aWwgYWRkZWQgZm9yIHV1X2xvY2soKQorIyAtRE5EU1lTRVJSTElT VCBjaGFuZ2VkIHRvIC1EVVNFX1NUUkVSUk9SCisjSWYgdGhpcyBnaXZlcyB5b3UgdHJvdWJsZSB1 c2UgdGhlIHByZXZpb3VzIGVudHJ5Lgorb3BlbmJzZCtzc2w6CisJQGVjaG8gTWFraW5nIEMtS2Vy bWl0ICQoQ0tWRVIpIGZvciBPcGVuQlNEIDMuMCBvciBsYXRlci4uLgorCSQoTUFLRSkgQ0M9JChD QykgQ0MyPSQoQ0MyKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFH Uz0gLURCU0Q0NCAtRENLX0NVUlNFUyAtRENLX05FV1RFUk0gLURUQ1BTT0NLRVQgLURPUEVOQlNE IFwKKwktREhFUkFMRD1cIlxcXCIgT3BlbkJTRCBgdW5hbWUgLXJgXFxcIlwiIFwKKwktRFVTRV9V VV9MT0NLIC1ERk5GTE9BVCAtRFVTRV9TVFJFUlJPUiAtRENLX0FVVEhFTlRJQ0FUSU9OIFwKKwkt RENLX1NTTCAkKEtGTEFHUykgLU8iIFwKKwkiTElCUz0gLWxjdXJzZXMgLWx1dGlsIC1sbSAtbHNz bCAtbGNyeXB0byIKKworbWlyYnNkK3NzbDoKKwlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZF UikgZm9yIE9wZW5CU0QgMy4wIG9yIGxhdGVyLi4uCisJJChNQUtFKSBDQz0kKENDKSBDQzI9JChD QzIpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTPSAtREJTRDQ0 IC1EQ0tfQ1VSU0VTIC1EQ0tfTkVXVEVSTSAtRFRDUFNPQ0tFVCAtRE9QRU5CU0QgXAorCS1ESEVS QUxEPVwiXFxcIiBNaXJCU0QgYHVuYW1lIC1yYFxcXCJcIiBcCisJLURVU0VfVVVfTE9DSyAtREZO RkxPQVQgLURVU0VfU1RSRVJST1IgLURDS19BVVRIRU5USUNBVElPTiBcCisJLURDS19TU0wgLURO T19EQ0xfSU5FVF9BVE9OICQoS0ZMQUdTKSAtTyIgXAorCSJMSUJTPSAtbGN1cnNlcyAtbHV0aWwg LWxtIC1sc3NsIC1sY3J5cHRvIgorCisjIG1ha2UgMzg2YnNkIDAuMG5ldywgcG9zaXgKKyMgZm9y ICAzODZic2QgMC4xLjI0LCBjaGFuZ2UgL3Vzci9pbmNsdWRlL3Rlcm1pb3MuaCB0byAjZGVmaW5l IE5DQ1MgaWYKKyMgIF9QT1NJWF9TT1VSQ0UgaXMgI2RlZmluZWQuIChzb3VyY2U6IGxld2luZSwg cG9zaXggcHJnbXJzIGd1aWRlLCBvYHJlaWxseSkKKyNOT1RFOiBMb2NrIGRpcmVjdG9yeSBpcyAv dmFyL3Nwb29sL2xvY2suICBGb3JtZXJseSwgaXQgd2FzIC92YXIvc3Bvb2wvdXVjcCwKKyNidXQg cmVwb3J0ZWRseSA8d2pvbmVzQGhhbGN5b24uY29tPiB0aGF0IHdhcyBkdWUgdG8gYSB0eXBvIGlu ICdtYW4gdGlwJy4KKzM4NmJzZDoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZv ciBqb2xpeCAzODZCU0QgMC4wbmV3IGFuZCAwLjEuMjQuLi4nCisJJChNQUtFKSBDQz0kKENDKSBD QzI9JChDQzIpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTPSAt RFBPU0lYIC1EU0VUUkVVSUQgLURQSURTVFJJTkcgLURVU0xFRVAgXAorCS1EXzM4NkJTRCAtRENL X0NVUlNFUyAtRFRDUFNPQ0tFVCBcCisJLURMT0NLX0RJUj1cXFwiL3Zhci9zcG9vbC9sb2NrXFxc IiBcCisJJChLRkxBR1MpIC1PIiAiTE5LRkxBR1MgPSAtcyIgIkxJQlMgPSAtbGN1cnNlcyAtbHRl cm1jYXAiCisKKyMgTWFjIE9TIFggMTAgZWFybHkgdmVyc2lvbnMuCisjIEZvciAxMC4zLjkgYW5k IGxhdGVyLCB1c2UgdGhlIG1hY29zeCB0YXJnZXQgYmVsb3cuCisKKyNNYWMgT1MgWCAxLjAgKFJo YXBzb2R5LCBEYXJ3aW4pIC0tIFRDUC9JUCBidXQgbm8gY3Vyc2VzLgorb2xkbWFjb3N4MTA6CisJ QGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBgdW5hbWUgLXNgLi4uCisJJChNQUtF KSBDQz0kKENDKSBDQzI9JChDQzIpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwK KwkiQ0ZMQUdTPSAtRE1BQ09TWDEwIC1EVENQU09DS0VUIC1EVVNFX1NUUkVSUk9SIC1PICQoS0ZM QUdTKSIKKworI01hYyBPUyBYIDEuMCAoUmhhcHNvZHksIERhcndpbikgLS0gVENQL0lQIGFuZCBj dXJzZXMuCisjTm90ZTogY3Vyc2VzIG11c3QgYmUgb2J0YWluZWQgc2VwYXJhdGVseS4gIFNlZSBu ZXh0IGVudHJ5IGZvciBuY3Vyc2VzLgorI0FkZCAiTElCUyA9IC1sY3Vyc2VzIC1sdGVybWNhcCIg aWYgbmVjZXNzYXJ5IChidXQgcmVwb3J0ZWRseSBpdCBpcyBub3QpLgorb2xkbWFjb3N4MTBjOgor CUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgYHVuYW1lIC1zYCArIGN1cnNlcy4u LgorCSQoTUFLRSkgQ0M9JChDQykgQ0MyPSQoQ0MyKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VU Oi0kKEApfSBcCisJIkNGTEFHUz0gLURNQUNPU1gxMCAtRENLX0NVUlNFUyAtRFRQVVRTRk5UWVBF PXZvaWQgLURUUFVUU0lTVk9JRCBcCisJLURUQ1BTT0NLRVQgLURVU0VfU1RSRVJST1IgLU8gJChL RkxBR1MpIgorCisjTWFjIE9TIFggMS4wIChSaGFwc29keSwgRGFyd2luKSAtLSBUQ1AvSVAgYW5k IG5jdXJzZXMuCisjTm90ZTogbmN1cnNlcyBtdXN0IGJlIG9idGFpbmVkIHNlcGFyYXRlbHkuCisj SW4gdGhlIGV2ZW50IG9mIHRyb3VibGUgd2l0aCB0aGlzIG9uZSB0cnkgdGhlIG5leHQgb25lLgor b2xkbWFjb3N4MTBuYzoKKwlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIGB1bmFt ZSAtc2AgKyBuY3Vyc2VzLi4uCisJJChNQUtFKSBDQz0kKENDKSBDQzI9JChDQzIpIHhlcm1pdCBL VEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTPSAtRE1BQ09TWDEwIC1EQ0tfTkNV UlNFUyAtRFRDUFNPQ0tFVCAtRFVTRV9TVFJFUlJPUiAtTyBcCisJJChLRkxBR1MpIiAiTElCUz0g LWxuY3Vyc2VzICQoTElCUykiCisKKyNNYWMgT1MgWCAxMC4yIChKYWd1YXIpIG5jdXJzZXMuCitv bGRtYWNvc3gxMDJuYzoKKwlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIGB1bmFt ZSAtc2AgKyBuY3Vyc2VzLi4uCisJJChNQUtFKSBDQz0kKENDKSBDQzI9JChDQzIpIHhlcm1pdCBL VEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTPSAtRE1BQ09TWDEwIC1EQ0tfTkNV UlNFUyAtRFRDUFNPQ0tFVCAtRFVTRV9TVFJFUlJPUiAtTyBcCisJJChLRkxBR1MpICIgIkxJQlM9 IC1sbmN1cnNlcyAkKExJQlMpIgorCisjVGhlIHByb2JsZW0gaGVyZSBpcyB0aGF0IGlmIGN1cnNl cy5oIGFsc28gZXhpc3RzLCBpdCBjb25mbGljdHMgd2l0aAorI25jdXJzZXMuaCBhbmQgYW5kIHdl IGhhdmUgZmF0YWwgZXJyb3JzLiAgSWYgdGhpcyBoYXBwZW5zIHRvIHlvdSwgdGhlbgorI3RyeSB0 aGlzIHRhcmdldC4KK29sZG1hY29zeDEwbmN4OgorCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENL VkVSKSBmb3IgYHVuYW1lIC1zYCArIG5jdXJzZXMuLi4KKwlAcm0gLWYgLi9jdXJzZXMuaDsgdG91 Y2ggLi9jdXJzZXMuaAorCSQoTUFLRSkgQ0M9JChDQykgQ0MyPSQoQ0MyKSB4ZXJtaXQgS1RBUkdF VD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUz0gLURNQUNPU1gxMCAtRENLX05DVVJTRVMg LURUQ1BTT0NLRVQgLURVU0VfU1RSRVJST1IgXAorCS1JLiAtTyAkKEtGTEFHUykgIiBcCisJIkxJ QlM9IC1sbmN1cnNlcyAkKExJQlMpIgorCUBybSAtZiAuL2N1cnNlcy5oCisKKyNNYWMgT1MgWCAx MC4zIChQYW50aGVyKSAtIEFzc3VtZXMgbmN1cnNlcyBpcyBpbnN0YWxsZWQuCitvbGRtYWNvc3gx MDM6IAorCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgYHVuYW1lIC1zYCArIG5j dXJzZXMuLi4KKwkkKE1BS0UpIENDPSQoQ0MpIENDMj0kKENDMikgeGVybWl0IEtUQVJHRVQ9JCR7 S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1M9IC1ETUFDT1NYMTAgLURNQUNPU1gxMDMgLURDS19O Q1VSU0VTIC1EVENQU09DS0VUIC1EQ0tIVFRQIFwKKwktRFVTRV9TVFJFUlJPUiAtRFVTRV9OQU1F U0VSX0NPTVBBVCAtTyBcCisJJChLRkxBR1MpICIgIkxJQlM9IC1sbmN1cnNlcyAtbHJlc29sdiAk KExJQlMpIgorCisjTWFjIE9TIFggMTAuMyAoUGFudGhlcikgd2l0aCBLZXJiZXJvcyA1IGFuZCBT U0wsIGFzc3VtZXMgbmN1cnNlcyBpcyBpbnN0YWxsZWQuCitvbGRtYWNvc3gxMDMrc2VjdXJlOgor CUBlY2hvIE1ha2luZyBTZWN1cmUgQy1LZXJtaXQgJChDS1ZFUikgZm9yIGB1bmFtZSAtc2AgKyBu Y3Vyc2VzLi4uCisJJChNQUtFKSBDQz0kKENDKSBDQzI9JChDQzIpIHhlcm1pdCBLVEFSR0VUPSQk e0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTPSAtRE1BQ09TWDEwIC1ETUFDT1NYMTAzIC1EQ0tf TkNVUlNFUyAtRFRDUFNPQ0tFVCBcCisJLURVU0VfU1RSRVJST1IgLURVU0VfTkFNRVNFUl9DT01Q QVQgLU8gLURDS19QQU0gXAorCS1EQ0tfQVVUSEVOVElDQVRJT04gLURDS19LRVJCRVJPUyAtREtS QjUgLURaTElCIFwKKwktRENLX0VOQ1JZUFRJT04gLURDS19DQVNUIC1EQ0tfREVTIC1ETElCREVT IC1EQ0tfU1NMIFwKKwkkKEtGTEFHUykgIiAiTElCUz0gLWxzc2wgLWxjcnlwdG8gLWxrcmI1IC1s Y29tX2VyciBcCisJLWxrNWNyeXB0byAtbGdzc2FwaV9rcmI1IC1scGFtIC1sbmN1cnNlcyAtbHJl c29sdiAkKExJQlMpIgorCisjIFRISVMgSVMgVEhFIE1BSU4gTUFDIE9TIFggVEFSR0VUICh0aGUg bmV4dCBvbmUgaXMgZm9yIEtlcmJlcm9zL1NTTCBidWlsZHMpLgorIyBVc2UgdGhpcyB0YXJnZXQg Zm9yIDEwLjMuOSAob3IgbWF5YmUgZWFybGllcikgdGhyb3VnaCAxMC42IChtYXliZSBsYXRlcikK KyMgb24gYm90aCBQb3dlciBhbmQgSW50ZWwgYXJjaGl0ZWN0dXJlcy4gIFRoaXMgb25lIHVzZXMg dXRtcC5oIG9uIDEwLjQgYW5kCisjIGVhcmxpZXIgYW5kIHV0bXB4Lmggb24gMTAuNSBvbndhcmRz LgorIyBOb3RlOiBNYWMgT1MgWCAxMC41IGFuZCBlYXJsaWVyIGFyZSAzMi1iaXQ7IDEwLjYgYW5k IGxhdGVyIDY0LWJpdC4KKyMgTm90ZSAyOiBBcyBvZiBDLUtlcm1pdCA5LjAgLU5PVVVDUCBpcyBp bmNsdWRlZCBieSBkZWZhdWx0IGJlY2F1c2UKKyMgTWFjIE9TIFggZG9lc24ndCBzdXBwb3J0IFVV Q1AuICBUbyB1bmRvIHRoaXMsIHVzZSBLRkxBR1M9LVVOT1VVQ1AuCisjT0s6IDIwMTEvMDYvMTQg KGZvciAxMC40LjExLCAxMC41LjgsIDEwLjYuNykKK21hY29zeCBtYWNvc3gxMCBtYWNvc3gxMC4z LjkgbWFjb3N4MTAuNCBtYWNvc3gxMC41IG1hY29zeDEwLjY6CisJQE1BQ09TTkFNRT1gL3Vzci9i aW4vc3dfdmVycyAtcHJvZHVjdE5hbWVgOyBcCisJTUFDT1NWPWAvdXNyL2Jpbi9zd192ZXJzIC1w cm9kdWN0VmVyc2lvbmA7IFwKKwllY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgJCRN QUNPU05BTUUgJCRNQUNPU1YuLi4gOyBcCisJTUFDQ1BVPSQkSE9TVFRZUEU7IFwKKwlpZiB0ZXN0 IGB1bmFtZSAtciB8IGN1dCAtZCAuIC1mIDFgIC1ndCA4OyBcCisJdGhlbiBpZiB0ZXN0IC1mIC91 c3IvaW5jbHVkZS91dG1weC5oIDsgXAorCXRoZW4gSEFWRV9VVE1QWD0nLURIQVZFVVRNUFggLURf VVRNUFhfQ09NUEFUJyA7IFwKKwllbHNlIEhBVkVfVVRNUFg9JycgOyBmaSA7IGZpOyBcCisJJChN QUtFKSBDQz0kKENDKSBDQzI9JChDQzIpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9 IFwKKwkiQ0ZMQUdTPSAtRE1BQ09TWDEwIC1ETUFDT1NYMTAzIC1EQ0tfTkNVUlNFUyAtRFRDUFNP Q0tFVCAtRENLSFRUUCBcCisJLURVU0VfU1RSRVJST1IgLURVU0VfTkFNRVNFUl9DT01QQVQgLURO T0NIRUNLT1ZFUkZMT1cgLURGTkZMT0FUIFwKKwktRF9MQVJHRUZJTEVfU09VUkNFIC1EX0ZJTEVf T0ZGU0VUX0JJVFM9NjQgJCRIQVZFX1VUTVBYIFwKKwktZnVuc2lnbmVkLWNoYXIgLUROT0RDTElO SVRHUk9VUFMgXAorCS1ETk9VVUNQIC1PIC1ESEVSQUxEPVwiXFxcIiAkJHtNQUNPU05BTUV9ICQk e01BQ09TVn1cXFwiXCIgXAorCS1EQ0tDUFU9XCJcXFwiJCR7TUFDQ1BVfVxcXCJcIiBcCisJJChL RkxBR1MpIiAiTElCUz0gLWxuY3Vyc2VzIC1scmVzb2x2ICQoTElCUykiCisKKyMgTWFjIE9TIFgg MTAuMy45IG9yIGxhdGVyIHdpdGggS2VyYmVyb3MgNSBhbmQgT3BlblNTTC4uLgorIyBOT1RFOiBB cHBsZSBoYXMgcmVtb3ZlZCBhbGwgc3VwcG9ydCBmb3IgREVTIGluIE9wZW5TU0wgYW5kIEtlcmJl cm9zCisjICAgaW4gTWFjIE9TIFggMTAuNiBhbmQgbGF0ZXIuICBUaGUgREVTIGZsYWdzIGFyZSBp bmNsdWRlZCBvciBsZWZ0IG91dAorIyAgIGF1dG9tYXRpY2FsbHkgYmFzZWQgb24gdGhlIE1hYyBP UyBYIHZlcnNpb24gbnVtYmVyLgorIyBTZWUgbm90ZSBhYm91dCBVVUNQIGluIHByZXZpb3VzIHRh cmdldC4KKyNPSzogMjAwOS8xMS8xNiAoZm9yIDEwLjMuOSwgMTAuNC4xMSwgMTAuNS44LCAxMC42 LjEpCisjT0s6IDIwMTEvMDYvMTQgKGZvciAxMC40LjExLCAxMC41LjgsIDEwLjYuNykKK21hY29z eCtrcmI1K3NzbCBtYWNvc3gxMC41K2tyYjUrc3NsIG1hY29zeDEwLjYra3JiNStzc2wgXAorbWFj b3N4K2tyYjUrb3BlbnNzbCBtYWNvc3gxMC41K2tyYjUrb3BlbnNzbCBtYWNvc3gxMC42K2tyYjUr b3BlbnNzbDoKKwlATUFDT1NOQU1FPWAvdXNyL2Jpbi9zd192ZXJzIC1wcm9kdWN0TmFtZWA7IFwK KwlNQUNPU1Y9YC91c3IvYmluL3N3X3ZlcnMgLXByb2R1Y3RWZXJzaW9uYDsgXAorCWVjaG8gTWFr aW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciAkJE1BQ09TTkFNRSAkJE1BQ09TVi4uLiA7IFwKKwlN QUNDUFU9JCRIT1NUVFlQRTsgXAorCWlmIHRlc3QgYHVuYW1lIC1yIHwgY3V0IC1kIC4gLWYgMWAg LWd0IDg7IFwKKwl0aGVuIGlmIHRlc3QgLWYgL3Vzci9pbmNsdWRlL3V0bXB4LmggOyBcCisJdGhl biBIQVZFX1VUTVBYPSctREhBVkVVVE1QWCAtRF9VVE1QWF9DT01QQVQnIDsgXAorCWVsc2UgSEFW RV9VVE1QWD0nJyA7IGZpIDsgZmk7IFwKKwlpZiB0ZXN0IGB1bmFtZSAtciB8IGN1dCAtZCAuIC1m IDFgIC1lcSA3OyBcCisJdGhlbiBJU19NQUNPU1gxMDM9Jy1ETUFDT1NYMTAzJyA7IFwKKwllbHNl IElTX01BQ09TWDEwMz0nJyA7IGZpOyBcCisJY2FzZSAkJE1BQ09TViBpbiBcCisJICAxMC5bMDEy MzQ1XS4qKSBIQVZFX0RFUz0nLURDS19ERVMgLURMSUJERVMnIDs7IFwKKwkgICouKikgSEFWRV9E RVM9JycgOzsgXAorCWVzYWMgOyBcCisJaWYgdGVzdCAteCAvdXNyL2Jpbi9rcmI1LWNvbmZpZyA7 IFwKKwl0aGVuIEhBVkVfS1JCNUNPTkZJRz1gL3Vzci9iaW4va3JiNS1jb25maWcgLS1saWJzIGty YjUgZ3NzYXBpYCA7IFwKKwllbHNlIEhBVkVfS1JCNUNPTkZJRz0nLWxnc3NhcGlfa3JiNSAtbGty YjUgLWxrNWNyeXB0byBcCisJLWxjb21fZXJyIC1scmVzb2x2JyA7IGZpOyBcCisJJChNQUtFKSBD Qz0kKENDKSBDQzI9JChDQzIpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwki Q0ZMQUdTPSAtRE1BQ09TWDEwICQkSVNfTUFDT1NYMTAzIC1EQ0tfTkNVUlNFUyAtRFRDUFNPQ0tF VCBcCisJLURVU0VfU1RSRVJST1IgLURVU0VfTkFNRVNFUl9DT01QQVQgLUROT0NIRUNLT1ZFUkZM T1cgLURGTkZMT0FUIFwKKwktRENLSFRUUCAtRF9MQVJHRUZJTEVfU09VUkNFIC1EX0ZJTEVfT0ZG U0VUX0JJVFM9NjQgJCRIQVZFX1VUTVBYIFwKKwktRE5PRENMSU5JVEdST1VQUyAtRENLX0FVVEhF TlRJQ0FUSU9OIC1EQ0tfS0VSQkVST1MgLURLUkI1IC1EWkxJQiBcCisJLURDS19FTkNSWVBUSU9O IC1EQ0tfQ0FTVCAtRENLX1NTTCAtRE9QRU5TU0xfMDk4ICQkSEFWRV9ERVMgXAorCS1ETk9VVUNQ IC1ESEVSQUxEPVwiXFxcIiAkJHtNQUNPU05BTUV9ICQke01BQ09TVn1cXFwiXCIgXAorCS1EQ0tD UFU9XCJcXFwiJCR7TUFDQ1BVfVxcXCJcIiBcCisJLWZ1bnNpZ25lZC1jaGFyIC1PICQoS0ZMQUdT KSIgXAorCSJMSUJTPSAkJEhBVkVfS1JCNUNPTkZJRyAtbHNzbCAtbGNyeXB0byAtbHBhbSAtbG5j dXJzZXMgJChMSUJTKSIKKworIyBFbmQgb2YgTWFjIE9TIFggU2VjdGlvbgorCisjQWNvcm4gUklT Q2lYLCBiYXNlZCBvbiAuLi4KKyNCZXJrZWxleSBVbml4IDQuMiBvciA0LjMgd2l0aCBsb2NrIGRp cmVjdG9yeSAvdXNyL3Nwb29sL3V1Y3AvTENLL0xDSy4udHR5eHgsCisjYnV0IHdpdGhvdXQgYWN1 Y250cmwgcHJvZ3JhbQorcmlzY2l4OgorCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBm b3IgUklTQ2lYLCAvdXNyL3Nwb29sL3V1Y3AvTENLLi50dHl4eAorCSQoTUFLRSkgd2VybWl0IEtU QVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCQkiQ0ZMQUdTPSAtREJTRDQyIC1EQlNENCAtRFJJ U0NJWCAtRE5PQ1NFVFMgXAorCQktRExPQ0tfRElSPVxcXCIvdXNyL3Nwb29sL3V1Y3BcXFwiIC1E RElSRU5UIC1EQ0tfQ1VSU0VTIFwKKwkJLURNQVhTUD05MDI0IC1ETUFYUkQ9OTAyNCAtRFNCU0la PTkwNTAgLURSQlNJWj05MDUwIFwKKwkJLURERlRUWT1cXFwiL2Rldi9zZXJpYWxcXFwiIC1ETk9D U0VUUyAtRE5PQ1lSSUwgXAorCQktRE5PQU5TSSAtdyAtTzIgLWZvbWl0LWZyYW1lLXBvaW50ZXIi IFwKKwkJIkxJQlM9IC1sY3Vyc2VzIC1sdGVybWNhcCAiIFwKKwkJIkNDPSAvdXNyL3VjYi9jYyIg XAorCQkiQ0MyPSAvdXNyL3VjYi9jYyIKKworI0Fjb3JuIFJJU0NpWCwgYXMgYWJvdmUsIGJ1dCB1 c2luZyBnY2MKK3Jpc2NpeC1nY2M6CisJQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZv ciBSSVNDaVgsIC91c3Ivc3Bvb2wvdXVjcC9MQ0suLnR0eXh4CisJJChNQUtFKSB3ZXJtaXQgS1RB UkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJCSJDRkxBR1M9IC1EQlNENDIgLURCU0Q0IC1EUklT Q0lYIC1ETk9DU0VUUyBcCisJCS1ETE9DS19ESVI9XFxcIi91c3Ivc3Bvb2wvdXVjcFxcXCIgLURE SVJFTlQgLURDS19DVVJTRVMgXAorCQktRE1BWFNQPTkwMjQgLURNQVhSRD05MDI0IC1EU0JTSVo9 OTA1MCAtRFJCU0laPTkwNTAgXAorCQktRERGVFRZPVxcXCIvZGV2L3NlcmlhbFxcXCIgLUROT0NT RVRTIC1ETk9DWVJJTCBcCisJCS1ETk9BTlNJIC13IC1PMiAtZm9taXQtZnJhbWUtcG9pbnRlciIg XAorCQkiTElCUz0gLWxjdXJzZXMgLWx0ZXJtY2FwICIgXAorCQkiQ0M9IGdjYyAtbWJzZCIgXAor CQkiQ0MyPSBnY2MgLW1ic2QiCisKKyNDb252ZXJnZW50IENUSVggNi40LjEKK2N0aXg6CisJQGVj aG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgQ29udmVyZ2VudCBDVElYIDYuNC4xJwor CSQoTUFLRSkgd2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1M9IC1E U1ZSMyAtRERJUkVOVCAtRFRDUFNPQ0tFVCAtREhEQlVVQ1AgLURDS19DVVJTRVMgXAorCS1ETk9O QVdTIC1ETk9MRUFSTiAtRE5PTE9OR0xPTkcgJChLRkxBR1MpIC1YTyIgXAorCSJMTktGTEFHUz0t cyIgIkxJQlM9LWxzb2NrZXQgLWxjdXJzZXMgLWxjX3MiCisJbWNzIC1kIHdlcm1pdAorCisjIFRo ZSBmb2xsb3dpbmcgbWFrZWZpbGUgZW50cnkgc2hvdWxkIHdvcmsgZm9yIGFueSBIYXJyaXMgTmln aHQgSGF3ayBzeXN0ZW0KKyMgKGVpdGhlciA4OGsgb3IgNjhrIGJhc2VkKSBydW5uaW5nIHJlbGVh c2UgNi4xIG9yIGxhdGVyIG9mIHRoZSBDWC9VWAorIyBvcGVyYXRpbmcgc3lzdGVtLiBUaGlzIGlz IGEgUE9TSVggYW5kIEFOU0ktQyBjb21wbGlhbnQgc3lzdGVtIHdoaWNoIGFsc28KKyMgc3VwcG9y dHMgQlNEIG5ldHdvcmtpbmcuIChFYXJsaWVyIENYL1VYIHJlbGVhc2VzIHdpbGwgcHJvYmFibHkg d29yayB3aXRoCisjIHN5czVyMywgYnV0IHRoaXMgaGFzIG5vdCBiZWVuIHZlcmlmaWVkKS4KKyMK K2N4X3V4OgorCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgSGFycmlzIE5pZ2h0 IEhhd2sgQ1gvVVggNi4xIG9yIGxhdGVyCisJJChNQUtFKSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFS R0VUOi0kKEApfSBcCisJIkNGTEFHUz0tRFBPU0lYIC1EVENQU09DS0VUIC1ESERCVVVDUCAtRFBJ RF9UPXBpZF90IC1EV0FJVF9UPWludCBcCisJLURkX2lubz1kX2ZpbGVubyAtRFVJRF9UPXVpZF90 IC1ER0lEX1Q9Z2lkX3QgLUROT0xPTkdMT05HIFwKKwkkKEtGTEFHUykgLVhhIC1PMyAtZyIgIkxO S0ZMQUdTPS1PMyIKKworI0ludGVyZ3JhcGggQ2xpcHBlciwgQ0xJWCwgam9iIGNvbnRyb2wsIEhE QiBVVUNQLgorY2xpeDoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBJbnRl cmdyYXBoIENMSVguLi4nCisJJChNQUtFKSB3ZXJtaXQgIkNDPWFjYyIgIkNDMj1hY2MiIEtUQVJH RVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1M9IC13IC1EU1ZSMyAtRENMSVggLURESVJF TlQgLURIREJVVUNQIC1ETk9TWVNMT0cgLURVU0VfTUVNQ1BZIFwKKwktRE5PR0VUVVNFUlNIRUxM IC1ETk9SRUFMUEFUSCAtRE5PTEVBUk4gJChLRkxBR1MpIC1PIiBcCisJIkxOS0ZMQUdTPSIgIkxJ QlM9IC1sYnNkIgorCisjQXMgYWJvdmUgKyBUQ1AvSVAuLi4KK2NsaXhuZXQ6CisJQGVjaG8gJ01h a2luZyBuZXR3b3JrZWQgQy1LZXJtaXQgJChDS1ZFUikgZm9yIEludGVyZ3JhcGggQ0xJWC4uLicK KwkkKE1BS0UpIHdlcm1pdCAiQ0M9YWNjIiAiQ0MyPWFjYyIgS1RBUkdFVD0kJHtLVEFSR0VUOi0k KEApfSBcCisJIkNGTEFHUz0gLXcgLURTVlIzIC1EQ0xJWCAtRERJUkVOVCAtREhEQlVVQ1AgLURO T1NZU0xPRyAtRFVTRV9NRU1DUFkgXAorCS1EVENQU09DS0VUIC1ETk9HRVRVU0VSU0hFTEwgLURO T0xFQVJOIC1ETk9SRUFMUEFUSCAkKEtGTEFHUykgLU8iIFwKKwkiTE5LRkxBR1M9IiAiTElCUz0g LWxic2QiCisKKyNNYXJrIFdpbGxpYW1zIENvaGVyZW50IDI4NiBvciAzODYgb24gSUJNIFBDIGZh bWlseS4KKyNUaGVyZSBpcyBhIDY0SyBsaW1pdCBvbiBwcm9ncmFtIHNpemUsIHNvIHRoaXMgaXMg YSBjb21tYW5kLWxpbmUgb25seSB2ZXJzaW9uLgorY29oZXJlbnQ6CisJJChNQUtFKSAiQ0ZMQUdT ID0gLU8gLURDT0hFUkVOVCAtRE5PQU5TSSAtRE5PSUNQIC1ETk9TRVRLRVkgLUROT0xFQVJOIFwK KwktRE5PQ1NFVFMgLUROT0hFTFAgLUROT0RJQUwgLUROT1NDUklQVCAtRE5PREVCVUcgLUROT1RM T0cgLUROT1hNSVQgXAorCS1ETk9NU0VORCAtRE5PRlJJTExTIC1ETk9TWVNJT0NUTEggLURTRUxF Q1RfSCAkKEtGTEFHUykgLVZTVVZBUiIgXAorCS1ETk9GTE9BVCBLVEFSR0VUPSQke0tUQVJHRVQ6 LSQoQCl9IHdlcm1pdAorCisjTWFyayBXaWxsaWFtcyBDb2hlcmVudCAzODYgb24gSUJNIFBDIGZh bWlseS4KKyNUaGlzIHdpbGwgbWFrZSBhICJtaW5pbXVtIGludGVyYWN0aXZlIiB2ZXJzaW9uIC0g bm8gc2NyaXB0cywKKyNubyBjaGFyYWN0ZXIgc2V0cywgbm8gaGVscCwgbm8gZGlhbCwgbm8gZGVi dWcvdHJhbnNhY3Rpb24gbG9nZ2luZywgbm8KKyN0cmFuc21pdCwgbXNlbmQsIG1haWwsIHR5cGUs IGV0Yy4KK2NvaGVyZW50bWk6CisJJChNQUtFKSAiQ0ZMQUdTID0gLU8gLURDT0hFUkVOVCAtRE5P QU5TSSAtRE5PU0VUS0VZIC1ETk9MRUFSTiBcCisJLUROT1NIT1cgLUROT0NTRVRTIC1ETk9IRUxQ IC1ETk9ESUFMIC1ETk9TQ1JJUFQgLUROT0RFQlVHIC1ETk9UTE9HIFwKKwktRE5PWE1JVCAtRE5P TVNFTkQgLUROT0ZSSUxMUyAtRE5PU1lTSU9DVExIIC1ETk9TRVJWRVIgLUROT1VVQ1AgXAorCS1E Tk9TUEwgLUROT1BVU0ggLUROT01ETUhVUCAtRE5PSkMgLUROT0ZEWkVSTyAtRE5PRVNDU0VRIC1E Tk9GTE9BVCBcCisJLUROT0NNREwgJChLRkxBR1MpIC1WU1VWQVIgLURTRUxFQ1RfSCIgS1RBUkdF VD0kJHtLVEFSR0VUOi0kKEApfSBcCisJd2VybWl0CisKKyNNYXJrIFdpbGxpYW1zIENvaGVyZW50 IDM4NiBvbiBJQk0gUEMvQVQgZmFtaWx5LgorY29oZXJlbnRtYXg6CisJJChNQUtFKSAiQ0ZMQUdT ID0gLU8gLURDT0hFUkVOVCAtRE5PQU5TSSAtRFNFTEVDVF9IIC1ETk9MRUFSTiBcCisJLUROT0ZM T0FUIC1ETk9TWVNJT0NUTEggJChLRkxBR1MpIC1WU1VWQVIiICJMTktGTEFHUyA9IC1PIC1zIiBc CisJS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSB3ZXJtaXQKKworI01hcmsgV2lsbGlhbXMgQ29o ZXJlbnQgMzg2IDQuMi4gIEluY2x1ZGVzIGN1cnNlcyBidXQgbm90IFRDUC9JUC4KKyNSZXF1aXJl cyB1cGRhdGVzIHRvIHRoZSA0LjIuMTAgY29tcGlsZXI7IHRoZSByZWd1bGFyIGNvbXBpbGVyIGZh aWxzIHRvCisjdG8gaGFuZGxlICJjb21wbGV4IGV4cHJlc3Npb25zIi4gIE5PRkxPQVQgaXMgc28g aXQgY2FuIHdvcmsgb24gb2xkIFBDcworI3dpdGhvdXQgZmxvYXRpbmctcG9pbnQgaGFyZHdhcmUu Citjb2hlcmVudDQyOgorCSQoTUFLRSkgIkNGTEFHUyA9IC1UNTAwMDAwIC1ETk9GTE9BVCAtRENP SEVSRU5UIC1ETk9BTlNJIC1EU0VMRUNUIFwKKwktRE5PU1lTTE9HIC1ERElSRU5UIC1EQ0tfQ1VS U0VTIC1EQ0tfTkVXVEVSTSAtRENLX1dSRUZSRVNIIC1WU1VWQVIgXAorCS1ERENMR0VUQ1dEIC1E Tk9TWVNJT0NUTEggLUROT0lOSVRHUk9VUFMgLUROT1NZTUxJTksgLURTRUxFQ1RfSCBcCisJLURE Q0xHRVRDV0QgLU8gJChLRkxBR1MpIiBcCisJIkxOS0ZMQUdTID0gLU8gLXMiIEtUQVJHRVQ9JCR7 S1RBUkdFVDotJChAKX0gXAorCSJMSUJTICA9IC1sc29ja2V0IC1sY3Vyc2VzIiB3ZXJtaXQKKwor I0RFQyBVbHRyaXggMi54CisjIEFkZCAtTywgLUREWU5BTUlDLCAtcywgZXRjLCBpZiB0aGV5IHdv cmsuCit1bHRyaXgyeDoKKwlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFVsdHJp eCAyLnggLi4uCisJJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VULSQoQCl9IFwKKwki Q0ZMQUdTPSAtREJTRDQgLURUQ1BTT0NLRVQgLUREVTIgLUROT0dFVFVTRVJTSEVMTCAkKEtGTEFH UykiCisKK2R1MjoKKwkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIEtUQVJHRVQ9JCR7S1RBUkdFVC0k KEApfSB1bHRyaXgyeAorCisjREVDIFVsdHJpeCAzLjAgYW5kIDMuMQordWx0cml4MzA6CisJQGVj aG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBVbHRyaXggMy4wLi4uCisJJChNQUtFKSB4 ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VULSQoQCl9IFwKKwkiQ0ZMQUdTPSAtREJTRDQgLURUQ1BT T0NLRVQgLURESVJFTlQgLURTSUdfViAtRE5PR0VUVVNFUlNIRUxMIFwKKwktRFVMVFJJWDMgLURD S19DVVJTRVMgJChLRkxBR1MpIC1PIiAiTElCUz0gLWxjdXJzZXMgLWx0ZXJtY2FwIgorCitkdTM6 CisJJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBLVEFSR0VUPSQke0tUQVJHRVQtJChAKX0gdWx0cml4 MzAKKwordWx0cml4M3g6CisJJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBLVEFSR0VUPSQke0tUQVJH RVQtJChAKX0gdWx0cml4MzAKKworI0RFQyBVbHRyaXggNC4wIG9yIDQuMSBvbiBERUNzdGF0aW9u LCBWQVhzdGF0aW9uLCBWQVgsIGV0Yy4KK3VsdHJpeDQwOgorCUBlY2hvIE1ha2luZyBDLUtlcm1p dCAkKENLVkVSKSBmb3IgVWx0cml4IDQuMCBvciA0LjEuLi4KKwkkKE1BS0UpIHhlcm1pdCBLVEFS R0VUPSQke0tUQVJHRVQtJChAKX0gXAorCSJDRkxBR1M9IC1EQlNENCAtRFRDUFNPQ0tFVCAtRFNJ R19WIC1ERFU0IC1ETk9HRVRVU0VSU0hFTEwgXAorCSQoS0ZMQUdTKSAtT2xpbWl0IDE0NTAiICJM TktGTEFHUyA9IC1zIgorCisjREVDIFVsdHJpeCA0LjItNC41IG9uIERFQ3N0YXRpb24sIERFQ3N5 c3RlbSwgVkFYc3RhdGlvbiwgVkFYLCBldGMuCisjTGlrZSB1bHRyaXg0MCwgZXhjZXB0IG5vdyBD IGNvbXBpbGVyIHN1cHBvcnRzIC1PMiBvcHRpbWl6YXRpb24uCit1bHRyaXg0MjoKKwlAZWNobyBN YWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFVsdHJpeCA0LjIgb3IgbGF0ZXIuLi4KKwkkKE1B S0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQtJChAKX0gXAorCSJDRkxBR1M9IC1EQlNENCAt RFRDUFNPQ0tFVCAtRFNJR19WIC1ETk9HRVRVU0VSU0hFTEwgJChLRkxBR1MpIFwKKwktTzIgLU9s aW1pdCAxNzUwIiAiTE5LRkxBR1MgPSAtcyIKKworZHU0MjoKKwkkKE1BS0UpICJNQUtFPSQoTUFL RSkiIEtUQVJHRVQ9JCR7S1RBUkdFVC0kKEApfSB1bHRyaXg0MgorCisjREVDIFVsdHJpeCA0LjIt NC41IG9uIERFQ3N0YXRpb24sIERFQ3N5c3RlbSwgVkFYc3RhdGlvbiwgVkFYLCBldGMuCisjTGlr ZSBkdTQyLCBidXQgd2l0aCBjdXJzZXMgc3VwcG9ydCBhZGRlZCBhbmQgYSBjb3VwbGUgZmVhdHVy ZXMuCit1bHRyaXg0MmM6CisJQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBVbHRy aXggNC4yIG9yIGxhdGVyLi4uCisJJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VULSQo QCl9IFwKKwkiQ0ZMQUdTPSAtREJTRDQgLURUQ1BTT0NLRVQgLURTSUdfViAtRE5PR0VUVVNFUlNI RUxMIFwKKwktRENLX0NVUlNFUyAtRE5PSUtTRCAkKEtGTEFHUyktRzYgLU8yIC1PbGltaXQgMzAw MCAiIFwKKwkiTE5LRkxBR1MgPSAtcyIgIkxJQlM9IC1sY3Vyc2VzIC1sdGVybWNhcCIKKwordWx0 cml4NDM6CisJJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBDQz0kKENDKSBDQzI9JChDQzIpIFwKKwki S0ZMQUdTPS1EVUxUUklYNDMgJChLRkxBR1MpIiBLVEFSR0VUPSQke0tUQVJHRVQtJChAKX0gdWx0 cml4NDJjCisKK3VsdHJpeDQzbm90Y3A6CisJJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBDQz0kKEND KSBDQzI9JChDQzIpIFwKKwkiS0ZMQUdTPS1EVUxUUklYNDMgLUROT05FVCAkKEtGTEFHUykiIFwK KwlLVEFSR0VUPSQke0tUQVJHRVQtJChAKX0gdWx0cml4NDJjCisKKyMgTk9URTogbmVlZCAtRE5P REVCVUcgb24gTUlQUyB0byBhdm9pZCByZWxvY2F0aW9uIGVycm9ycyBhdCBsaW5rIHRpbWUuCisj IEFjdHVhbGx5IG5vdyAoOC4wKSB0aGF0IHdlIGhhdmUgZGlzY292ZXJlZCB0aGUgLUcgb3B0aW9u IG1heWJlIGRlYnVnZ2luZworIyBjYW4gYmUgcHV0IGJhY2suCit1bHRyaXg0NDoKKwkkKE1BS0Up ICJNQUtFPSQoTUFLRSkiIENDPSQoQ0MpIENDMj0kKENDMikgXAorCSJLRkxBR1M9LURVTFRSSVg0 NCAtRzcgLUROT0RFQlVHIC1ETkVUUFRZIC1ETk9fREVWVFRZICQoS0ZMQUdTKSIgXAorCUtUQVJH RVQ9JCR7S1RBUkdFVC0kKEApfSB1bHRyaXg0MmMKKwordWx0cml4NDU6CisJJChNQUtFKSAiTUFL RT0kKE1BS0UpIiBDQz0kKENDKSBDQzI9JChDQzIpIFwKKwkiS0ZMQUdTPS1EVUxUUklYNDUgJChL RkxBR1MpLURORVRQVFkgLUROT19ERVZUVFkgJChLRkxBR1MpIiBcCisJS1RBUkdFVD0kJHtLVEFS R0VULSQoQCl9IHVsdHJpeDQyYworCitkdTQyYzoKKwkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIEND PSQoQ0MpIENDMj0kKENDMikgXAorCUtUQVJHRVQ9JCR7S1RBUkdFVC0kKEApfSB1bHRyaXg0MmMK KworI0RFQyBVbHRyaXggNC4zQSBvciBsYXRlciBvbiBERUNzeXN0ZW0gYW5kIERFQ3N0YXRpb24g NTAwMC81MCwgLzE1MCBvciAvMjYwCisjd2l0aCBNSVBTIFI0eDAwIHByb2Nlc3Nvci4gIFRoZSAi LW1pcHMzIiBzd2l0Y2ggZ2VuZXJhdGVzIFI0MDAwLXNwZWNpZmljCisjY29kZSwgd2hpY2ggaXMg ZmFzdGVyIGFuZCBtb3JlIGNvbXBhY3QsIGJ1dCAqd29uJ3QqIHJ1biBvbiBlYXJsaWVyCisjREVD c3lzdGVtcyBhbmQgREVDc3RhdGlvbnMuCit1bHRyaXg0My1taXBzMzoKKwlAZWNobyBNYWtpbmcg Qy1LZXJtaXQgJChDS1ZFUikgZm9yIFVsdHJpeCA0LjNBIG9yIGxhdGVyLCBSNDAwMCBjcHUuLi4K KwkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQtJChAKX0gXAorCSJDRkxBR1M9IC1E QlNENCAtRFRDUFNPQ0tFVCAtRFNJR19WIC1ETk9HRVRVU0VSU0hFTEwgXAorCSQoS0ZMQUdTKSAt TzIgLU9saW1pdCAxNzUwIC1taXBzMyIgIkxOS0ZMQUdTID0gLXMgLW1pcHMzIgorCitkdTQzLW1p cHMzOgorCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgQ0M9JChDQykgQ0MyPSQoQ0MyKSB1bHRyaXg0 My1taXBzMworCisjREVDIFVsdHJpeCA0LjNBIG9yIGxhdGVyIG9uIE1JUFMgUjR4MDAwIGJhc2Vk IHN5c3RlbXMuCisjTGlrZSB1bHRyaXg0My1taXBzMyBidXQgd2l0aCBjdXJzZXMgc3VwcG9ydCBh ZGRlZAordWx0cml4NDNjLW1pcHMzOgorCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBm b3IgVWx0cml4IDQuM0Egb3IgbGF0ZXIsIFI0MDAwIGNwdS4uLgorCSQoTUFLRSkgeGVybWl0IEtU QVJHRVQ9JCR7S1RBUkdFVC0kKEApfSBcCisJIkNGTEFHUz0gLURCU0Q0IC1EVENQU09DS0VUIC1E U0lHX1YgLUROT0dFVFVTRVJTSEVMTCAtRENLX0NVUlNFUyBcCisJJChLRkxBR1MpIC1PMiAtT2xp bWl0IDMwMDAgLW1pcHMzIiAiTE5LRkxBR1MgPSAtcyAtbWlwczMiIFwKKwkiTElCUz0gLWxjdXJz ZXMgLWx0ZXJtY2FwIgorCitkdTQzYy1taXBzMzoKKwkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIEND PSQoQ0MpIENDMj0kKENDMikgXAorCUtUQVJHRVQ9JCR7S1RBUkdFVC0kKEApfSB1bHRyaXg0M2Mt bWlwczMKKworI0RFQyBVbHRyaXggNC40IG9uIERFQ3N0YXRpb24gNTAwMC81MCBvciAvMTUwIHdp dGggUjQwMDAgTUlQUyBwcm9jZXNzb3IsCisjb3IgNTAwMC8yNjAgd2l0aCBSNDQwMC4gIFRoZSAi LW1pcHMzIiBzd2l0Y2ggZ2VuZXJhdGVzIFI0MDAwLXNwZWNpZmljIGNvZGUsCisjd2hpY2ggaXMg ZmFzdGVyIGFuZCBtb3JlIGNvbXBhY3QgYnV0ICp3b24ndCogcnVuIG9uIGVhcmxpZXIgREVDc3Rh dGlvbnMuCit1bHRyaXg0NC1taXBzMzoKKwlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikg Zm9yIFVsdHJpeCA0LjQsIFI0MDAwIGNwdSAuLi4KKwkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQk e0tUQVJHRVQtJChAKX0gXAorCSJDRkxBR1M9IC1EQlNENCAtRFRDUFNPQ0tFVCAtRFNJR19WIC1E Tk9HRVRVU0VSU0hFTEwgXAorCSQoS0ZMQUdTKSAtTzIgLU9saW1pdCAxNDUwIC1taXBzMyIgIkxO S0ZMQUdTID0gLXMgLW1pcHMzIgorCitkdTQ0LW1pcHMzOgorCSQoTUFLRSkgIk1BS0U9JChNQUtF KSIgQ0M9JChDQykgQ0MyPSQoQ0MyKSBcCisJS1RBUkdFVD0kJHtLVEFSR0VULSQoQCl9IHVsdHJp eDQ0Yy1taXBzMworCisjREVDIFVsdHJpeCA0LjIgb24gREVDc3RhdGlvbiwgVkFYc3RhdGlvbiwg VkFYLCBldGMsIFN5c3RlbSBWIFI0IGVudmlyb25tZW50Cit1bHRyaXg0MnM1cjQ6CisJQGVjaG8g J01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgQVQmVCBVTklYIFN5c3RlbSBWIFI0IG9uIFVs dHJpeC4uLicKKwkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQtJChAKX0gXAorCSJD RkxBR1MgPSAtTzIgLU9saW1pdCAxNTAwIC1EU1ZSNCAtRERJUkVOVCAtREhEQlVVQ1AgLUROT0dF VFVTRVJTSEVMTCBcCisJLURUQ1BTT0NLRVQgJChLRkxBR1MpIiAiTE5LRkxBR1MgPSAtcyIKKwor I09TRi8xCitvc2Ygb3NmMToKKwkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQo QCl9IFwKKwkiQ0ZMQUdTPSAtREJTRDQgLURPU0YgLURfQlNEIC1EVENQU09DS0VUIC1EQ0tfQU5T SUMgLURTSUdfViBcCisJLURDS19DVVJTRVMgLURDS19SVFNDVFMgLURGTkZMT0FUICQoS0ZMQUdT KSIgXAorCSJMTktGTEFHUyA9IC1zIiAiTElCUyA9ICQoTElCUykgLWxic2QgLWxjdXJzZXMgLWx0 ZXJtY2FwIC1sbSIKKworI0RFQyBPU0YvMSBWMS4wLTEuMyBvbiBERUNzdGF0aW9uLCBWQVgsIEFs cGhhLCBvciBQQy4KK2RlYy1vc2YgZGVjLW9zZjE6CisJJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0k JHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUz0gLURCU0Q0IC1ET1NGIC1ET1NGMTMgLURfQlNE IC1EVENQU09DS0VUIC1EQ0tfQU5TSUMgLURTSUdfViBcCisJLUROT1JFQUxQQVRIIC1ETk9JS1NE IC1EQ0tfQ1VSU0VTIC1EQ0tfUlRTQ1RTIC1ERk5GTE9BVCAtRE5PREVCVUcgXAorCS1ETk9VTklD T0RFICQoS0ZMQUdTKSIgXAorCSJMTktGTEFHUyA9IC1ub25fc2hhcmVkIiAiTElCUyA9IC1sYnNk IC1sY3Vyc2VzIC1sdGVybWNhcCAtbG0iCisKKyMgVGhpcyBvbmUgY2F1c2VzICJyZWxvY2F0aW9u IG91dC1vZi1yYW5nZSIgZXJyb3JzIGluIHRoZSBsaW5rZXIuCitvbGQtZGVjLW9zZjoKKwlAZWNo byBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIERFQyBPU0YvMSBWMS54Li4uCisJQGVjaG8g SWYgeW91IGFyZSBidWlsZGluZyBmb3IgREVDIE9TRi8xIDIuMCwgcGxlYXNlIHVzZSBkZWMtb3Nm MjAuCisJQGVjaG8gUmVtb3ZlIG9yIGFkanVzdCAtTzIgYW5kL29yIC1PbGltaXQgaWYgdGhleSBj YXVzZSB0cm91YmxlLgorCSQoTUFLRSkgQ0M9JChDQykgQ0MyPSQoQ0MyKSBvc2YgS1RBUkdFVD0k JHtLVEFSR0VUOi0kKEApfSBcCisJIktGTEFHUz0gLU8yIC1PbGltaXQgMjQwMCAkKEtGTEFHUyki CisKKyNERUMgT1NGLzEgMi4wIG9uIEFscGhhIGFuZCBwcm9iYWJseSBub3doZXJlIGVsc2UuCisj VGhlIG9ubHkgZGlmZmVyZW5jZSBmcm9tIE9TRi8xIGlzIHRoYXQgb3B0aW1pemF0aW9uIGlzIG9t aXR0ZWQuCisjVGhlIG9wdGltaXplZCB2ZXJzaW9uIGdldHMgc3RyYW5nZSBydW50aW1lIGVycm9y cywgbGlrZSB0aGUgUEFVU0UgY29tbWFuZAorI25vdCB3b3JraW5nLiAgQWRkICItdW5zaWduZWQi IHRvIG1ha2UgYWxsIGNoYXJzIHVuc2lnbmVkLgorZGVjLW9zZjIwOgorCUBlY2hvIE1ha2luZyBD LUtlcm1pdCAkKENLVkVSKSBmb3IgREVDIE9TRi8xIFYyLjAuLi4KKwlAZWNobyBPcHRpbWl6YXRp b24gb21pdHRlZCBiZWNhdXNlIGl0IGNhdXNlcyBydW50aW1lIGVycm9ycy4KKwlAZWNobyBTZWUg Y29tbWVudHMgaW4gbWFrZWZpbGUuCisJJChNQUtFKSBDQz0kKENDKSBDQzI9JChDQzIpIG9zZiBL VEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiS0ZMQUdTPSAtRE9TRjIwICQoS0ZMQUdTKSIK KworZGVjLW9zZjMwOgorCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgREVDIE9T Ri8xIFYzLjAuLi4KKwkkKE1BS0UpIENDPSQoQ0MpIENDMj0kKENDMikgb3NmIEtUQVJHRVQ9JCR7 S1RBUkdFVDotJChAKX0gXAorCSJLRkxBR1M9IC1ET1NGMzAgLU8yIC1PbGltaXQgMjQwMCAkKEtG TEFHUykiCisKKyNEaWdpdGFsIFVOSVggMy4yCisjIE11c3QgY29tcGlsZSBja3V1c1s2eF0uYyBz ZXBhcmF0ZWx5IHdpdGhvdXQgb3B0aW1pemF0aW9uIG90aGVyd2lzZQorIyB0aGUgb3B0aW1pemVy IGR1bXBzIGNvcmUgLSBrZWVwIENGTEFHUyBoZXJlIGluIHN5bmMgd2l0aCB0aG9zZSBmcm9tIG9z Zi4KK2R1MzI6CisJQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBEaWdpdGFsIFVO SVggMy4yLi4uCisJJChNQUtFKSBDQz0kKENDKSBDQzI9JChDQzIpIGNrdXVzNi4kKEVYVCkgXAor CSJDRkxBR1M9IC1EQlNENCAtRE9TRiAtRF9CU0QgLURUQ1BTT0NLRVQgLURDS19BTlNJQyAtRFNJ R19WIFwKKwktRENLX0NVUlNFUyAtRENLX1JUU0NUUyAtREZORkxPQVQgLURPU0YzMiAtREhEQlVV Q1AgJChLRkxBR1MpIgorCSQoTUFLRSkgQ0M9JChDQykgQ0MyPSQoQ0MyKSBja3V1c3guJChFWFQp IFwKKwkiQ0ZMQUdTPSAtREJTRDQgLURPU0YgLURfQlNEIC1EVENQU09DS0VUIC1EQ0tfQU5TSUMg LURTSUdfViBcCisJLURDS19DVVJTRVMgLURDS19SVFNDVFMgLURGTkZMT0FUIC1ET1NGMzIgLURI REJVVUNQICQoS0ZMQUdTKSIKKwkkKE1BS0UpIENDPSQoQ0MpIENDMj0kKENDMikgb3NmIFwKKwki S0ZMQUdTPSAtRE9TRjMyIC1ESERCVVVDUCAtTzIgLU9saW1pdCAzMjAwICQoS0ZMQUdTKSIKKwor ZGVjLW9zZjMyOgorCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgQ0M9JChDQykgQ0MyPSQoQ0MyKSBk dTMyIFwKKwlLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9CisKKyNEaWdpdGFsIFVOSVggNC4wIHRo cm91Z2ggNC4wRCAodXNlIHRydTY0IHRhcmdldHMgZm9yIDQuMEUgYW5kIGFib3ZlKS4uLgorZHU0 MDoKKwlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIERpZ2l0YWwgVU5JWCA0LjAu Li4KKwkkKE1BS0UpIENDPSQoQ0MpIENDMj0kKENDMikgb3NmIEtUQVJHRVQ9JCR7S1RBUkdFVDot JChAKX0gXAorCSJLRkxBR1M9IC1ET1NGNDAgLURIREJVVUNQIC1ERk5GTE9BVCBcCisJLXVuc2ln bmVkIC1zdGQxIC1PMyAtT2xpbWl0IDI0MDAgJChLRkxBR1MpIiAiTElCUz0tbG0iCisKK2R1NDBn Y2M6CisJQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBEaWdpdGFsIFVOSVggNC4w IHdpdGggZ2NjIC4uLgorCSQoTUFLRSkgb3NmIENDPWdjYyBDQzI9Z2NjIEtUQVJHRVQ9JCR7S1RB UkdFVDotJChAKX0gXAorCSJLRkxBR1M9IC1ET1NGNDAgLURIREJVVUNQICQoS0ZMQUdTKSIKKwor I1RydTY0IFVuaXggNC4wRQordHJ1NjQtNDBlOgorCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENL VkVSKSBmb3IgVHJ1NjQgVU5JWCA0LjBFLi4uCisJJChNQUtFKSBDQz0kKENDKSBDQzI9JChDQzIp IG9zZiBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiS0ZMQUdTPSAtRE9TRjQwIC1ET1NG NDBFIC1EVFJVNjQgLURIREJVVUNQIC1ERk5GTE9BVCAtRE5PQ09URk1DIFwKKwktdW5zaWduZWQg LXN0ZDEgLU8zIC1PbGltaXQgMjQwMCAkKEtGTEFHUykiICJMSUJTPS1sbSIKKwordHJ1NjQtNDBm OgorCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgVHJ1NjQgVU5JWCA0LjBGLi4u CisJJChNQUtFKSBDQz0kKENDKSBDQzI9JChDQzIpIG9zZiBLVEFSR0VUPSQke0tUQVJHRVQ6LSQo QCl9IFwKKwkiS0ZMQUdTPSAtRE9TRjQwIC1ET1NGNDBGIC1EVFJVNjQgLURIREJVVUNQIC1ERk5G TE9BVCAtRE5PQ09URk1DIFwKKwktdW5zaWduZWQgLXN0ZDEgLU8zIC1PbGltaXQgMjQwMCAkKEtG TEFHUykiICJMSUJTPS1sbSIKKwordHJ1NjQtNDBnOgorCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAk KENLVkVSKSBmb3IgVHJ1NjQgVU5JWCA0LjBHLi4uCisJJChNQUtFKSBDQz0kKENDKSBDQzI9JChD QzIpIG9zZiBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiS0ZMQUdTPSAtRE9TRjQwIC1E T1NGNDBHIC1EVFJVNjQgLURIREJVVUNQIC1ERk5GTE9BVCAtRE5PQ09URk1DIFwKKwktdW5zaWdu ZWQgLXN0ZDEgLU8zIC1PbGltaXQgMjQwMCAkKEtGTEFHUykiICJMSUJTPS1sbSIKKwordHJ1NjQt NTBhOgorCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgVHJ1NjQgVU5JWCA1LjBB Li4uCisJJChNQUtFKSBDQz0kKENDKSBDQzI9JChDQzIpIG9zZiBLVEFSR0VUPSQke0tUQVJHRVQ6 LSQoQCl9IFwKKwkiS0ZMQUdTPSAtRFRSVTY0IC1ET1NGNTAgLURIREJVVUNQIFwKKwktdW5zaWdu ZWQgLXN0ZDEgLU8zIC1PbGltaXQgMjQwMCAkKEtGTEFHUykiCisKK3RydTY0LTUxYToKKwlAZWNo byBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFRydTY0IFVOSVggNS4xQS4uLgorCSQoTUFL RSkgQ0M9JChDQykgQ0MyPSQoQ0MyKSBvc2YgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJ IktGTEFHUz0gLURUUlU2NCAtRE9TRjUwIC1ET1NGNTFBIC1ESERCVVVDUCBcCisJLXVuc2lnbmVk IC1zdGQxIC1PMyAtT2xpbWl0IDI0MDAgJChLRkxBR1MpIgorCit0cnU2NC01MWI6CisJQGVjaG8g TWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBUcnU2NCBVTklYIDUuMUIuLi4KKwkkKE1BS0Up IENDPSQoQ0MpIENDMj0kKENDMikgb3NmIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJL RkxBR1M9IC1EVFJVNjQgLURPU0Y1MCAtRE9TRjUxQSAtRE9TRjUxQiAtREhEQlVVQ1AgXAorCS11 bnNpZ25lZCAtc3RkMSAtTzMgLU9saW1pdCAyNDAwICQoS0ZMQUdTKSIKKworIyBBZGRlZCA1LjFi IHZlcnNpb24gd2l0aCBPcGVuU1NMIC0gQ0RXIDYtMTMtMjAwNS4uLgordHJ1NjQtNTFiK29wZW5z c2w6CisJQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBUcnU2NCBVTklYIDUuMWIK KwlAZWNobyAgaW5jbHVkaW5nIE9wZW5TU0wuLi4KKwkkKE1BS0UpIENDPSQoQ0MpIENDMj0kKEND Mikgb3NmIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJLRkxBR1M9IC1EVFJVNjQgLURP U0Y1MCAtRE9TRjUxQSAtRE9TRjUxQiAtREhEQlVVQ1AgXAorCS11bnNpZ25lZCAtc3RkMSAtTzMg LU9saW1pdCAyNDAwIFwKKwktRENLX0FVVEhFTlRJQ0FUSU9OIC1EQ0tfU1NMICQoU1NMSU5DKSAk KEtGTEFHUykiIFwKKwkiTElCUz0gJChTU0xMSUIpIC1ycGF0aCAkKHNzbHJvb3QpL3NzbC9saWIg LWxzc2wgLWxjcnlwdG8iCisKK2R1NTA6CisJJChNQUtFKSBDQz0kKENDKSBDQzI9JChDQzIpIHRy dTY0LTUwYSBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9CisKK2R1NDAtcmlkaWN1bG91cy1jaGVj a2luZzoKKwlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIERpZ2l0YWwgVU5JWCA0 LjAuCisJQGVjaG8gQ2hlY2tpbmcgZXZlcnl0aGluZyAtIGFzc3VtZXMgREVDQy4uLgorCSQoTUFL RSkgQ0M9JChDQykgQ0MyPSQoQ0MyKSBvc2YgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJ IktGTEFHUz0gLURPU0Y0MCAtREhEQlVVQ1AgLXcwIC13YXJucHJvdG9zIC1jaGVjayAtcG9ydGFi bGUgXAorCS11bnNpZ25lZCAtc3RkMSAtTzMgLU9saW1pdCAxNzYwICQoS0ZMQUdTKSIKKworI1Nl cXVlbnQgRFlOSVgvcHR4IDEuMi4xCitkeW5peHB0eDEyOgorCUBlY2hvIE1ha2luZyBDLUtlcm1p dCAkKENLVkVSKSBmb3IgU2VxdWVudCBEWU5JWC9wdHggMS4yLjEuLi4KKwkkKE1BS0UpIHdlcm1p dCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTPSAtRFNWUjMgLURESVJFTlQg LURIREJVVUNQIC1EUFRYIC1ETk9HRVRVU0VSU0hFTEwgLUROT0xFQVJOIFwKKwktRFBJRF9UPXBp ZF90IC1EVUlEX1Q9dWlkX3QgLURHSURfVD1naWRfdCAkKEtGTEFHUykgLWkgLU8iIFwKKwkiTE5L RkxBR1MgPSAtaSIKKworI1NlcXVlbnQgRFlOSVgvcHR4IDEuMyBvciAxLjQKK2R5bml4cHR4MTM6 CisJQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTZXF1ZW50IERZTklYL3B0eCAx LjMgVENQL0lQLi4uCisJJChNQUtFKSB4ZXJtaXQgIkNGTEFHUz0gLU8gS1RBUkdFVD0kJHtLVEFS R0VUOi0kKEApfSBcCisJLURTVlIzIC1ERElSRU5UIC1ESERCVVVDUCAtRFBUWCAtRENLX1BPTEwg LUROT0dFVFVTRVJTSEVMTCBcCisJLURQSURfVD1waWRfdCAtRFVJRF9UPXVpZF90IC1ER0lEX1Q9 Z2lkX3QgLURUQ1BTT0NLRVQgJChLRkxBR1MpIC1pIiBcCisJIkxOS0ZMQUdTID0gLWkiICJMSUJT ID0gLWxzb2NrZXQgLWxpbmV0IC1sbnNsIgorCisjU2VxdWVudCBEWU5JWC9wdHggMi4wLCBBTlNJ IEMgY29tcGlsYXRpb24KKyNTaG91bGQgd29yayBvbiBhbnkgaGFyZHdhcmUgcGxhdGZvcm0gd2hl biBEWU5JWC9wdHggcnVucywgaW5jbHVkaW5nCisjMzg2LCA0ODYsIFBlbnRpdW0uCitkeW5peHB0 eDIwOgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFBPU0lYLCBTZXF1ZW50 IERZTklYL3B0eCAyLjAuLi4nCisJJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0k KEApfSBcCisJIkNGTEFHUz0gLURQT1NJWCAtREhEQlVVQ1AgLURUQ1BTT0NLRVQgXAorCS1EV0FJ VF9UPWludCAtRFBUWCAtRE5PR0VUVVNFUlNIRUxMICQoS0ZMQUdTKSAtTyIgXAorCSJMSUJTID0g LWxzb2NrZXQgLWxpbmV0IC1sbnNsIgorCisjU2VxdWVudCBEWU5JWC9wdHggMi4wLCBBTlNJIEMg Y29tcGlsYXRpb24sIHdpdGggY3Vyc2VzCitkeW5peHB0eDIwYzoKKwlAZWNobyAnTWFraW5nIEMt S2VybWl0ICQoQ0tWRVIpIGZvciBQT1NJWCwgU2VxdWVudCBEWU5JWC9wdHggMi4wLi4uJworCSQo TUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1M9IC1EUE9T SVggLURIREJVVUNQIC1EVENQU09DS0VUIC1EV0FJVF9UPWludCAtRFBUWCAtRENLX0NVUlNFUyBc CisJLURDS19ORVdURVJNIC1ETk9HRVRVU0VSU0hFTEwgJChLRkxBR1MpIC1PIiBcCisJIkxJQlMg PSAtbHNvY2tldCAtbGluZXQgLWxuc2wgLWxjdXJzZXMgLWx0ZXJtY2FwIgorCisjU2VxdWVudCBE WU5JWC9wdHggMi4xLjYsIDgwNDg2LCBBTlNJIEMgY29tcGlsYXRpb24sIHdpdGggY3Vyc2VzOgor IyAtWGEgLS0gdXNlIEFOU0kgY29tcGlsZXIuCisjIC1XYywtcHcgLS0gc3VwcHJlc3MgcG9ydGFi aWxpdHkgd2FybmluZ3MuCisjIC1XYywtaTM4NiAtLSA4MDM4NiBjcHUuCisjIC1XYywtaTQ4NiAt LSA4MDQ4NiBjcHUuCisjIC1XYywtUDUgLS0gUGVudGl1bSAoZGVmYXVsdCkuCisjIC1XYywtTzMg LS0gaGlnaGVzdCBvcHRpbWl6YXRpb24uCisjIC1XYSwtTjE3MDYxIC0tIGluY3JlYXNlIHN5bWJv bCB0YWJsZSBmcm9tIGRlZmF1bHQgb2YgMTUwMTMgZm9yIGNrY3VuaS5jLgorIyBFYXJseSB2ZXJz aW9ucyBvZiBEWU5JWC9wdHggMi4xLnggbWF5IG5lZWQgLURDS19QT0xMIGluc3RlYWQgb2YgLURT RUxFQ1QuCisjIEFkZCAiJCYiIGFmdGVyIHRoZSBjb2xvbiBpbiB0aGUgInhlcm1pdCIgdGFyZ2V0 IGZvciBwYXJhbGxlbCBtYWtlcy4KK2R5bml4cHR4MjE2YzoKKwlAZWNobyAnTWFraW5nIEMtS2Vy bWl0ICQoQ0tWRVIpIGZvciBQT1NJWCwgU2VxdWVudCBEWU5JWC9wdHggMi4xLjYnCisJJChNQUtF KSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUz0gLURQT1NJWCAt REhEQlVVQ1AgLUREWU5BTUlDIC1EVENQU09DS0VUIFwKKwktRFNFTEVDVCAtRENLX1JFRElSIC1E Q0tfTkFXUyAtRENLX1dSRUZSRVNIIC1EU1dfQUNDX0lEIFwKKwktRFRDUF9OT0RFTEFZPTEgLURU Uk1CVUZMPTIwNDggLURCSUdCVUZPSyAtREhBRERSTElTVCBcCisJLURQVFggIC1EQ0tfQ1VSU0VT IC1EQ0tfTkVXVEVSTSAtRE5PR0VUVVNFUlNIRUxMIC1ETk9SRUFMUEFUSCBcCisJJChLRkxBR1Mp IC1YYSAtV2MsLXB3IC1XYywtaTQ4NiAtV2MsLU8zIC1XYSwtTjE3MDYxIiBcCisJIkxJQlMgPSAt bFhic2QgLWxzZXEgLWxzb2NrZXQgLWxpbmV0IC1sbnNsIC1sbWFsbG9jIC1sbSAtbGN1cnNlcyIg XAorCSJMTktGTEFHUyA9IC1zIgorCisjU2VxdWVudCBEWU5JWC9wdHggMi4xLjYsIGdjYyAyLjcu Mi4yLCB3aXRoIGN1cnNlczoKK2R5bml4cHR4MjE2Y2djYzoKKwlAZWNobyAnTWFraW5nIEMtS2Vy bWl0ICQoQ0tWRVIpIGZvciBQT1NJWCwgU2VxdWVudCBEWU5JWC9wdHggMi4xLjYgZ2NjJworCSQo TUFLRSkgeGVybWl0ICJDQyA9IGdjYyIgIkNDMiA9IGdjYyIgS1RBUkdFVD0kJHtLVEFSR0VUOi0k KEApfSBcCisJIkNGTEFHUz0gLURQT1NJWCAtREhEQlVVQ1AgLUREWU5BTUlDIC1EVENQU09DS0VU IFwKKwktRFNFTEVDVCAtRENLX1JFRElSIC1EQ0tfTkFXUyAtRENLX1dSRUZSRVNIIC1EU1dfQUND X0lEIFwKKwktRFRDUF9OT0RFTEFZPTEgLURUUk1CVUZMPTIwNDggLURCSUdCVUZPSyAtREhBRERS TElTVCBcCisJLURQVFggIC1EQ0tfQ1VSU0VTIC1EQ0tfTkVXVEVSTSAtRE5PR0VUVVNFUlNIRUxM IC1ETk9SRUFMUEFUSCBcCisJJChLRkxBR1MpIC1PMyAtcGlwZSAtZnVuc2lnbmVkLWNoYXIiIFwK KwkiTElCUyA9IC1sWGJzZCAtbHNlcSAtbHNvY2tldCAtbGluZXQgLWxuc2wgLWxtYWxsb2MgLWxt IC1sY3Vyc2VzIiBcCisJIkxOS0ZMQUdTID0gLXMiCisKKyNTZXF1ZW50IERZTklYL3B0eCA0LjAs IEFOU0kgQyBjb21waWxhdGlvbiwgd2l0aCBjdXJzZXMKK2R5bml4cHR4NDFjOgorCUBlY2hvICdN YWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFBPU0lYLCBTZXF1ZW50IERZTklYL3B0eCA0LjAu Li4nCisJJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFH Uz0gLURQT1NJWCAtREhEQlVVQ1AgLURUQ1BTT0NLRVQgXAorCS1EV0FJVF9UPWludCAtRFBUWCAt RFBUWDQgLURDS19DVVJTRVMgLURDS19ORVdURVJNIFwKKwktRE5PR0VUVVNFUlNIRUxMICQoS0ZM QUdTKSAtTyIgXAorCSJMSUJTID0gLWxzb2NrZXQgLWxuc2wgLWxjdXJzZXMgLWx0ZXJtY2FwIgor CisjU2VxdWVudCBEWU5JWC9wdHggNC40LCBBTlNJIEMgY29tcGlsYXRpb24sIHdpdGggY3Vyc2Vz CitkeW5peHB0eDQ0OgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFBPU0lY LCBTZXF1ZW50IERZTklYL3B0eCA0LjQuLi4nCisJJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtL VEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUz0gLURQVFggLURQVFg0IC1EUE9TSVggLURIREJVVUNQ IC1EVENQU09DS0VUIC1EV0FJVF9UPWludCBcCisJLURDS19DVVJTRVMgLURDS19ORVdURVJNIC1E QklHQlVGT0sgLURTRUxFQ1QgLUROT0dFVFVTRVJTSEVMTCBcCisJJChLRkxBR1MpIC1PIiAiTElC UyA9IC1sc29ja2V0IC1sbnNsIC1sY3Vyc2VzIC1sdGVybWNhcCIKKworI1NlcXVlbnQgRFlOSVgg My4wLngKK2R5bml4MzoKKwlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFNlcXVl bnQgRFlOSVggMy4wLnguLi4KKwkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQo QCl9IFwKKwkiQ0ZMQUdTPSAtREJTRDQzIC1EQUNVQ05UUkwgLURUQ1BTT0NLRVQgLU8gXAorCS1E UFdVSURfVD1pbnQgLURHSURfVD1pbnQgJChLRkxBR1MpIgorCisjU2VxdWVudCBEWU5JWCAzLjAu eCwgbm8gQUNVQ05UUkwKK2R5bml4M25vYWN1OgorCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENL VkVSKSBmb3IgU2VxdWVudCBEWU5JWCAzLjAueC4uLgorCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9 JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1M9IC1EQlNENDMgLURMQ0tESVIgLURUQ1BTT0NL RVQgLU8gXAorCS1EVUlEX1Q9aW50IC1ER0lEX1Q9aW50ICQoS0ZMQUdTKSIKKworI1NlcXVlbnQg RFlOSVggMy4xLngKK2R5bml4MzE6CisJQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZv ciBTZXF1ZW50IERZTklYIDMuMS54Li4uCisJJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFS R0VUOi0kKEApfSBcCisJIkNGTEFHUz0gLU8gLUREQ0xQT1BFTiAtRExDS0RJUiAtREJTRDQgLURU Q1BTT0NLRVQgJChLRkxBR1MpIgorCisjU2VxdWVudCBEWU5JWCAzLjEuMiwgYXMgYWJvdmUgYnV0 IHdpdGggY3Vyc2VzLCB0byBiZSBjb21waWxlZCBieSBnY2MgMi4zLjMuCitkeW5peDMxYzoKKwlA ZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTZXF1ZW50IERZTklYIDMuMS4yLCBj dXJzZXMuLi4nCisJJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJ IkNGTEFHUz0gLU8yIC1ERENMUE9QRU4gLURBQ1VDTlRSTCBcCisJLURCU0Q0MyAtRFRDUFNPQ0tF VCAtRENLX0NVUlNFUyAtRFVJRF9UPWludCBcCisJJChLRkxBR1MpIiAiTElCUz0gLWxjdXJzZXMg LWx0ZXJtY2FwIgorCisjQ29udmV4IEMxIHdpdGggQmVya2VsZXkgVW5peAorY29udmV4OgorCUBl Y2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgQ29udmV4IEMxIC8gQlNELi4uCisJJChN QUtFKSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUz0gLURCU0Q0 IC1ETk9MRUFSTiAkKEtGTEFHUykgLURtc2xlZXA9bW5hcCIKKworI0NvbnZleCBDMjEwIHdpdGgg Q29udmV4L09TIDgKK2NvbnZleDg6CisJQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZv ciBDb252ZXggQzIxMCB3aXRoIE9TIDgKKwkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJH RVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTPSAtREJTRDQgLURUQ1BTT0NLRVQgLUROT0RFQlVHIC1ERElS RU5UIC1ETk9GSUxFSCBcCisJJChLRkxBR1MpIC1EU0lHX1YgLURtc2xlZXA9bW5hcCIKKworI0Nv bnZleCBDMiB3aXRoIENvbnZleCBPUyA5LjEgKHNob3VsZCBhbHNvIHdvcmsgd2l0aCA4LjEgb3Ig bGF0ZXIpCisjd2l0aCBBTlNJIEMgY29tcGlsZXIsIHVzZXMgQlNEIDQuMyB1dWNwIGxvY2tmaWxl IGNvbnZlbnRpb24uCitjb252ZXg5OgorCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBm b3IgQ29udmV4IEMyMTAgd2l0aCBPUyA5LjEKKwkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tU QVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTPSAtRFBPU0lYIC1EQ09OVkVYOSAtRE5PSUVYVEVOIC1E RElSRU5UIC1ETk9GSUxFSCAtRFRDUFNPQ0tFVCBcCisJLURfX1NURENfXyAtRExDS0RJUiAtRG1z bGVlcD1tbmFwIC1PIC1leHQgLXRtIGMxICQoS0ZMQUdTKSIgXAorCSJMTktGTEFHUyA9IC1leHQi CisKKyNDb252ZXggQzIgd2l0aCBDb252ZXggT1MgMTAuMSBvciBsYXRlcgorI3dpdGggZ2NjIDIu eCBDIGNvbXBpbGVyCitjb252ZXgxMGdjYzoKKwlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZF UikgZm9yIENvbnZleCBDMiB3aXRoIE9TIDEwLjEgdXNpbmcgZ2NjCisJJChNQUtFKSB4ZXJtaXQg S1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUz0gLURQT1NJWCAtRENPTlZFWDkg LUROT0lFWFRFTiAtRERJUkVOVCAtRE5PRklMRUggLURUQ1BTT0NLRVQgXAorCS1EX19TVERDX18g IC1EbXNsZWVwPW1uYXAgLU8yICQoS0ZMQUdTKSIgQ0M9Z2NjIENDMj1nY2MKKworI0NyYXkgWC1N UCBvciBZLU1QIFVOSUNPUyA2Lnggb3IgNy54LgorI05PVEU6IE5QUk9DIHRlbGxzIGhvdyBtYW55 IHBhcmFsbGVsIG1ha2VzIHRvIHJ1bi4gIElmIHlvdXIgQ3JheSBoYXMgbXVsdGlwbGUKKyNwcm9j ZXNzb3JzLCB5b3UgY2FuIHNldCBOUFJPQyB1cCB0byB0aGUgbnVtYmVyIG9mIENQVXMsIGUuZy4g TlBST0M9MTYuCitjcmF5OgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIENy YXkgWC9ZLU1QIFVOSUNPUyA2Lnggb3IgNy4wLi4uCisJJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0k JHtLVEFSR0VUOi0kKEApfSBOUFJPQz0xIFwKKwkiQ0ZMQUdTPSAtRFNWUjMgLURESVJFTlQgLURI REJVVUNQIC1EVENQU09DS0VUICQoS0ZMQUdTKSAtTzEiCisKKyNDcmF5IFgtTVAgb3IgWS1NUCBV TklDT1MgOC4wIEFscGhhLgorY3JheTg6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVS KSBmb3IgQ3JheSBYL1ktTVAgVU5JQ09TIDguMCBBbHBoYS4uLgorCSQoTUFLRSkgeGVybWl0IEtU QVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gTlBST0M9MSBcCisJIkNGTEFHUz0gLURTVlI0IC1ERElS RU5UIC1ESERCVVVDUCAtRFRDUFNPQ0tFVCAkKEtGTEFHUykgLU8xIgorCisjQ3JheSBYLU1QIG9y IFktTVAgVU5JQ09TIDkuMC4KKyNUaGlzIG9uZSB3YXMgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5IGZv ciBDLUtlcm1pdCA4LjAuMjA5LgorI0VhcmxpZXIgdmVyc2lvbnMgb2YgVW5pY29zIHdpbGwgcHJv YmFibHkgbmVlZCB0aGUgc2FtZSBmbGFncy4KK2NyYXk5OgorCUBlY2hvICdNYWtpbmcgQy1LZXJt aXQgJChDS1ZFUikgZm9yIENyYXkgWC9ZLU1QIFVOSUNPUyA5LjAuLi4KKwkkKE1BS0UpIHhlcm1p dCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IE5QUk9DPTEgXAorCSJDRkxBR1M9IC1EU1ZSNCAt RERJUkVOVCAtREhEQlVVQ1AgLUROT0xGREVWTk8gXAorCS1EVENQU09DS0VUICQoS0ZMQUdTKSAt TzEiCisKKyNDcmF5LTIgb3IgQ3JheSAzLUNTT1MKKyNOT1RFOiBOUFJPQyB0ZWxscyBob3cgbWFu eSBwYXJhbGxlbCBtYWtlcyB0byBydW4uICBJZiB5b3VyIENyYXkgaGFzIG11bHRpcGxlCisjcHJv Y2Vzc29ycywgeW91IGNhbiBzZXQgTlBST0MgdXAgdG8gdGhlIG51bWJlciBvZiBDUFVzLCBlLmcu IE5QUk9DPTE2LgorY3JheWNzb3M6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBm b3IgQ3JheS0yLzMgQ1NPUworCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChA KX0gTlBST0M9MSBcCisJIkNGTEFHUz0gLURTVlIzIC1ERElSRU5UIC1ESERCVVVDUCAtRFRDUFNP Q0tFVCBcCisJJChLRkxBR1MpIC1EQ0tfQU5TSUMgLURDS19DVVJTRVMiICJMSUJTPS1sbmV0Igor CisjTmVYVFNURVAgMS4wIHRocm91Z2ggMy4yLgorI0luY2x1ZGVzIGZ1bGxzY3JlZW4gZmlsZSB0 cmFuc2ZlciBkaXNwbGF5IChjdXJzZXMpIGFuZCBUQ1AvSVAgc3VwcG9ydC4KKyNVc2VzIHNoYXJl ZCBsaWJyYXJ5IHRvIG1ha2UgZXhlY3V0YWJsZSBwcm9ncmFtIGFib3V0IDgwSyBzbWFsbGVyLgor I1JlbW92ZSAiTElCUyA9IC1sc3lzX3MiIGlmIHRoaXMgY2F1c2VzIHRyb3VibGUuCituZXh0Ogor CUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgTmVYVFNURVAuLi4KKwlAZWNobyAn SWYgeW91IGdldCBlcnJvcnMgaW4gY2t1dGlvLmMgYWJvdXQgd19TLCB3X1QsIGV0YywnCisJQGVj aG8gJ2FkZCBLRkdMQUdTPS1ETk9SRURJUkVDVCB0byB5b3VyIG1ha2UgY29tbWFuZC4nCisJJChN QUtFKSB4ZXJtaXQgQ0M9JChDQykgQ0MyPSQoQ0MyKSBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9 IFwKKwkiQ0ZMQUdTPSAtRE5FWFQgLURUQ1BTT0NLRVQgLURMQ0tESVIgLUROT1BVVEVOViAtREZO RkxPQVQgXAorCS1waXBlIC1EQ0tfQ1VSU0VTICQoS0ZMQUdTKSAtTyAtdyIgIkxJQlMgPSAtbHN5 c19zIC1sY3Vyc2VzIC1sdGVybWNhcCIKKworbmV4dGM6CisJJChNQUtFKSAiTUFLRT0kKE1BS0Up IiBDQz0kKENDKSBDQzI9JChDQzIpIG5leHQgXAorCUtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0K KworbmV4dGc6CisJJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBDQz0kKENDKSBDQzI9JChDQzIpIG5l eHQgXAorCUtGTEFHUz0tV2FsbCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9CisKK25leHRnYzoK KwkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIENDPSQoQ0MpIENDMj0kKENDMikgbmV4dCBcCisJS0ZM QUdTPS1XYWxsIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0KKworI05lWFRTVEVQIDMuMy4KKyNJ bmNsdWRlcyBmdWxsc2NyZWVuIGZpbGUgdHJhbnNmZXIgZGlzcGxheSBhbmQgVENQL0lQLgorIyBZ b3UgbWlnaHQgaGF2ZSB0byBhZGQgMSBsaW5lIHRvIDEgTmVYVCBoZWFkZXIgZmlsZSA8aXAuaD4K KyMgdG8gZGVjbGFyZSBuX2xvbmcgYXMgdV9sb25nIGJ5IGFkZGluZyAjaW5jbHVkZSA8YnNkL25l dGluZXQvaW5fc3lzdG0uaD4KKworbmV4dDMzOgorCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENL VkVSKSBmb3IgTmVYVFNURVAgMy4zLi4uCisJJChNQUtFKSB4ZXJtaXQgQ0M9JChDQykgQ0MyPSQo Q0MyKSBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTPSAtRE5FWFQzMyAtRFRD UFNPQ0tFVCAtRExDS0RJUiAtRE5PUFVURU5WIC1ERk5GTE9BVCBcCisJLXBpcGUgLURDS19DVVJT RVMgJChLRkxBR1MpIC1PIC13IiAiTElCUyA9IC1sc3lzX3MgLWxjdXJzZXMgLWx0ZXJtY2FwIgor CisjT1BFTlNURVAgNC4yIGZvciBTcGFyYywgbTY4MHgwLCBIUCBQQS1SSVNDLCBhbmQgSW50ZWwu CisjSW5jbHVkZXMgZnVsbHNjcmVlbiBmaWxlIHRyYW5zZmVyIGRpc3BsYXkgYW5kIFRDUC9JUC4K KyNja2Nwcm8uYyBjb21waWxlZCB3aXRob3V0IG9wdGltaXphdGlvbiBiZWNhdXNlIGl0IGNyYXNo ZXMgdGhlIGNvbXBpbGVyLgorb3BlbnN0ZXA0MjoKKwlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChD S1ZFUikgZm9yIE9QRU5TVEVQIDQuMi4uLgorCSQoTUFLRSkgY2tjcHJvLiQoRVhUKSBcCisJIkNG TEFHUz0gLURPUEVOU1RFUDQyIC1ETkVYVDMzIC1EVENQU09DS0VUIC1ETENLRElSIC1ETk9QVVRF TlYgXAorCS1ERk5GTE9BVCAtcGlwZSAtRENLX0NVUlNFUyAkKEtGTEFHUykgLXciCisJJChNQUtF KSB4ZXJtaXQgQ0M9JChDQykgQ0MyPSQoQ0MyKSBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwK KwkiQ0ZMQUdTPSAtRE9QRU5TVEVQNDIgLURORVhUMzMgLURUQ1BTT0NLRVQgLURMQ0tESVIgLURO T1BVVEVOViBcCisJLURGTkZMT0FUIC1waXBlIC1EQ0tfQ1VSU0VTICQoS0ZMQUdTKSAtTyAtdyIg XAorCSJMSUJTID0gLWxzeXNfcyAtbGN1cnNlcyAtbHRlcm1jYXAiCisKKyNOZVhUIHdpdGggbWFs bG9jIGRlYnVnZ2VyCituZXh0bWQ6CisJQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZv ciBOZVhUIHdpdGggbWFsbG9jIGRlYnVnZ2luZy4uLgorCSQoTUFLRSkgbWVybWl0IEtUQVJHRVQ9 JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1M9IC1ETkVYVCAtRFRDUFNPQ0tFVCAtRExDS0RJ UiAtRE5PUFVURU5WIC1ERk5GTE9BVCBcCisJLURDS19DVVJTRVMgJChLRkxBR1MpIC1PIC13IC1E bWFsbG9jPWRtYWxsb2MgLURmcmVlPWRmcmVlIC1ETURFQlVHIiBcCisJIkxJQlMgPSAtbHN5c19z IC1sY3Vyc2VzIC1sdGVybWNhcCIKKworI0J1aWxkIGZvciBOZVhUU1RFUCB3aXRoICJmYXQiIGJp bmFyaWVzIChNQUJzKSB0aGF0IHJ1biBvbiBib3RoIE1vdG9yb2xhCisjYW5kIEludGVsIHBsYXRm b3Jtcy4KK25leHRmYXQ6CisJJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBDQz0kKENDKSBDQzI9JChD QzIpIFwKKwluZXh0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJLRkxBR1M9LVdhbGwg LWFyY2ggbTY4ayAtYXJjaCBpMzg2IiAiTE5LRkxBR1MgPSAtYXJjaCBtNjhrIC1hcmNoIGkzODYi CisKKyNOZVhUU1RFUCBvbiBJbnRlbCBQbGF0Zm9ybXMuCituZXh0NDg2OgorCUBlY2hvIE1ha2lu ZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgTmVYVFNURVAgb24gSW50ZWwgUGxhdGZvcm1zLi4uCisJ QGVjaG8gJ0lmIHlvdSBnZXQgZXJyb3JzIGluIGNrdXRpby5jIGFib3V0IHdfUywgd19ULCBldGMs JworCUBlY2hvICdhZGQgS0ZHTEFHUz1ELUROT1JFRElSRUNUIHRvIHlvdXIgbWFrZSBjb21tYW5k LicKKwkkKE1BS0UpIHhlcm1pdCBDQz0kKENDKSBDQzI9JChDQzIpIEtUQVJHRVQ9JCR7S1RBUkdF VDotJChAKX0gXAorCSJDRkxBR1M9IC1ETkVYVCAtRFRDUFNPQ0tFVCAtRExDS0RJUiAtRE5PUFVU RU5WIC1ERk5GTE9BVCBcCisJLUROT0RFQlVHIC1PMyAtZm5vLW9taXQtZnJhbWUtcG9pbnRlciAt ZnNjaGVkdWxlLWluc25zMiAtcGlwZSBcCisJLURDS19DVVJTRVMgJChLRkxBR1MpIC13IiAiTElC UyA9IC1sc3lzX3MgLWxjdXJzZXMgLWx0ZXJtY2FwIgorCisjU2luZ2xlIGJpbmFyeSB0aGF0IHJ1 bnMgb24gTmVYVCA2ODAzMCBhbmQgNjgwNDAsIEludGVsLCBIUCwgYW5kIFNwYXJjLAorI2FzIHdl bGwgYXMgb24gT3BlblN0ZXAvTWFjaC4KK25leHRxdWFkZmF0OgorCSQoTUFLRSkgIk1BS0U9JChN QUtFKSIgQ0M9JChDQykgQ0MyPSQoQ0MyKSBuZXh0IFwKKwlLVEFSR0VUPSQke0tUQVJHRVQ6LSQo QCl9IFwKKwkiS0ZMQUdTPS1XYWxsIC1hcmNoIG02OGsgLWFyY2ggaTM4NiAtYXJjaCBocHBhIC1h cmNoIHNwYXJjIiBcCisJIkxOS0ZMQUdTID0gLWFyY2ggbTY4ayAtYXJjaCBpMzg2IC1hcmNoIGhw cGEgLWFyY2ggc3BhcmMiCisKKyNCZUJveAorYmVib3hkcjc6CisJQGVjaG8gJ01ha2luZyBDLUtl cm1pdCAkKENLVkVSKSBmb3IgdGhlIEJlQm94Li4uJworCUBlY2hvICdMaW5rIHN0ZXAgd2lsbCBm YWlsIHdpdGggZGVmYXVsdCBNZXRyb3dvcmtzIGxpbmtlciA2NEsgbGltaXQuJworCUBlY2hvICdD b2RlIFdhcnJpb3IgR29sZCByZXF1aXJlZCB0byBsaW5rIGJpZyBwcm9ncmFtcy4nCisJJChNQUtF KSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNDPS9ib290L2RldmVsb3Av dG9vbHMvbXdjYyIgIkNDMj0vYm9vdC9kZXZlbG9wL3Rvb2xzL213bGQiIFwKKwkiQ0ZMQUdTPSAt REJFQk9YIC1EQkVfRFJfNyAtRFBPU0lYIC1ETk9VVUNQIC1ETk9MRUFSTiAkKEtGTEFHUykgLU8i CisKKyNCZUJveCBCZU9TIERSNyBvbmx5CitiZWJveDoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0 ICQoQ0tWRVIpIGZvciBCZUJveC4uLicKKwlAZWNobyAnTGluayBzdGVwIHdpbGwgZmFpbCB3aXRo IGRlZmF1bHQgTWV0cm93b3JrcyBsaW5rZXIgNjRLIGxpbWl0LicKKwlAZWNobyAnQ29kZSBXYXJy aW9yIFBybyAzLjAgZm9yIEJlQm94IHJlcXVpcmVkIHRvIGxpbmsgYmlnIHByb2dyYW1zLicKKwkk KE1BS0UpIHdlcm1pdCAiQ0M9bXdjYyIgIkNDMj1td2xkIiBLVEFSR0VUPSQke0tUQVJHRVQ6LSQo QCl9IFwKKwkiQ0ZMQUdTPSAtREJFQk9YIC1EUE9TSVggLUROT0xFQVJOIC1ETk9VVUNQICQoS0ZM QUdTKSAtTyIKKworI0JlT1MgNC41CisjV2UgaGF2ZSB0byB1c2UgdGhlIHdlcm1pdCB0YXJnZXQg YmVjYXVzZSAnZmRfc2V0JyBpcyB1bmtub3duLgorYmVvczQ1OgorCSQoTUFLRSkgd2VybWl0ICJD Qz0kKENDKSIgIkNDMj0kKENDMikiIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxB R1M9IC1EQkVPUyAtREJFT1M0NSAtRFBPU0lYIC1ETk9JS1NEIC1ETk9SRUFMUEFUSCAtRFNZU1RJ TUVIIFwKKwktRE5PQ09URk1DIC1ETk9VVUNQIC1ETk9MRUFSTiAkKEtGTEFHUykgLU8iIFwKKwki TElCUyA9ICQoTElCUykiCisKKyNCZU9TIDQuNQorYmVvczQ1bmV0OgorCSQoTUFLRSkgQ0M9JChD QykgQ0MyPSQoQ0MyKSBiZW9zNDUgXAorCSJLRkxBR1M9LURUQ1BTT0NLRVQgLUROT19ETlNfU1JW ICQoS0ZMQUdTKSIgIkxJQlM9LWxuZXQgLWxuZXRhcGkiCisKKyNQbGFuIDkgZnJvbSBCZWxsIExh YnMKK3BsYW45OgorCUBlY2hvICdDLUtlcm1pdCBmb3IgUGxhbiA5IGZyb20gQmVsbCBMYWJzIC0g Y2FsbGluZyBja3BrZXIubWsuLi4nCisJbWFrZSAtZiBja3BrZXIubWsKKworI1BPU0lYCitwb3Np eDoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBwdXJlIFBPU0lYLi4uJwor CSQoTUFLRSkgd2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1M9IC1E UE9TSVggLUROT1VVQ1AgLUROT0xFQVJOICQoS0ZMQUdTKSAtTyIKKworIyBQb3dlck1BWCBPUyAo U1ZSNCkgZnJvbSBDb25jdXJyZW50ICh0ZXN0ZWQgb24gUG93ZXJNQVggNS4xKQorcG93ZXJtYXg6 CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgQ29uY3VycmVudCBQb3dlck1B WCBPUy4uLicKKwkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwki Q0ZMQUdTID0gLU8gLURTVlI0IC1ERElSRU5UIC1ESERCVVVDUCAtRFBPV0VSTUFYIFwKKwktRE5F VFBUWSAtREhBVkVfU1RSRUFNUyAtREhBVkVfR1JBTlRQVCAtREhBVkVfUFRTTkFNRSAtRFBVU0hf UFRFTSBcCisJLURQVVNIX0xEVEVSTSAtRFBVU0hfVFRDT01QQVQgXAorCS1EU1RFUk1JT1ggLURU Q1BTT0NLRVQgLURDS19DVVJTRVMgJChLRkxBR1MpIiBcCisJIkxJQlM9IC1sc29ja2V0IC1sbnNs IC1scmVzb2x2IC1sY3Vyc2VzIC1sZ2VuIC1sYyAtbHVjYmMiCisKKyNCZXJrZWxleSBTb2Z0d2Fy ZSBEZXNpZ24gSW5jLiBCU0RJCisjIFN1YnN0aXR1dGUgIkxJQlM9IC1sbmV3Y3Vyc2VzIC1sdGVy bWNhcCIgaWYgZGVzaXJlZC4KK2JzZGk6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVS KSBmb3IgQlNESSAuLi4nCisJJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEAp fSBcCisJIkNGTEFHUz0gLURCU0Q0NCAtRFNFVFJFVUlEIC1EU1dfQUNDX0lEIC1EQklHQlVGT0sg LURGSVhDUlRTQ1RTIFwKKwktRFRDUFNPQ0tFVCAtRENLX0NVUlNFUyAtREZORkxPQVQgJChLRkxB R1MpIC1PIiBcCisJIkxJQlM9IC1sY3Vyc2VzIC1sdGVybWNhcCAtbG0iCisKKyNCZXJrZWxleSBT b2Z0d2FyZSBEZXNpZ24gSW5jLiBCU0RJIC0gaGFzIGhpZ2hlciBzZXJpYWwgc3BlZWRzIHRoYW4g MS54LgorYnNkaTI6CisJJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBDQz0kKENDKSBDQzI9JChDQzIp IGJzZGkgXAorCUtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gIktGTEFHUz0tREJTREkyICQoS0ZM QUdTKSIKKworYnNkaTM6CisJJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBDQz0kKENDKSBDQzI9JChD QzIpIGJzZGkgXAorCUtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gIktGTEFHUz0tREJTREkyIC1E QlNESTMgJChLRkxBR1MpIgorCitic2RpNDoKKwkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIENDPSQo Q0MpIENDMj0kKENDMikgYnNkaSBcCisJS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIktG TEFHUz0tREJTREkyIC1EQlNESTMgLURCU0RJNCAtRFRQVVRTRk5UWVBFPXZvaWQgLURUUFVUU0lT Vk9JRCBcCisJLURDS0hUVFAgLW00ODYgJChLRkxBR1MpIgorCisjIChvbGQgbmFtZSBmb3IgdGhl IGFib3ZlKQorYnNkaXBvc2l4OgorCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgQ0M9JChDQykgQ0My PSQoQ0MyKSBic2RpCisKKworI0J1aWxkIGEgQlNESSA0LnggYmluYXJ5IHRoYXQgYWxzbyBydW5z IHVuZGVyIEZyZWVCU0QgKFRlcnJ5IEtlbm5lZHkpLgorI0J1dCB3YXRjaCBvdXQgZm9yIGRldGFp bHMgbGlrZSBzZXJpYWwtcG9ydCBsb2NraW5nLgorYnNkaXg6CisJJChNQUtFKSAiTUFLRT0kKE1B S0UpIiBDQz0kKENDKSBDQzI9JChDQzIpIGJzZGkgXAorCUtUQVJHRVQ9JCR7S1RBUkdFVDotJChA KX0gXAorCSJLRkxBR1M9LURCU0RJMiAtREJTREkzIC1EQlNESTQgLURUUFVUU0ZOVFlQRT12b2lk IC1EVFBVVFNJU1ZPSUQgXAorCS1tNDg2ICQoS0ZMQUdTKSIgIkxOS0ZMQUdTPS1zdGF0aWMgLVds LC1tLGkzODZic2RpIC1XbCwtZSxfc3RhcnQiCisKKyNQeXJhbWlkIDlYWFggKGUuZy4gOTg0NSkg b3IgTUlTZXJ2ZXIgVCBzZXJpZXMsIE9TeCA0LjRiIHRocnUgNS4xCitweXJhbWlkOgorCUBlY2hv IE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgUHlyYW1pZCBEdWFsIFBvcnQgT1N4CisJdWNi ICQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1M9IC1E QlNENDMgLURUQ1BTT0NLRVQgLURQWVJBTUlEIC1PICQoS0ZMQUdTKSIgIkxOS0ZMQUdTID0gLXMi CisKKyNQeXJhbWlkIER1YWwgUG9ydCBPU3ggdXNpbmcgSG9uZXlEYW5CZXIgVVVDUCwgY3Vyc2Vz IGFuZCBUQ1AKK3B5cmFtaWQtaGRiOgorCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBm b3IgUHlyYW1pZCBEdWFsIFBvcnQgT1N4CisJdWNiICQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7 S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1M9IC1EQlNENDMgLURUQ1BTT0NLRVQgLURIQkRVVUNQ IC1EQ0tfQ1VSU0VTIC1PICQoS0ZMQUdTKSIgXAorCSJMTktGTEFHUyA9IC1zIiAiTElCUyA9IC1s Y3Vyc2VzIC1sdGVybWNhcCIKKworI1B5cmFtaWQgREMvT1N4IChVTklYIFN5c3RlbSBWIFI0KS4K KyNIYXMgPHN5cy90ZXJtaW94Lmg+LCByZWd1bGFyIEJlcmtlbGV5IHNvY2tldHMgbGlicmFyeSwg aS5lLiBpbi5oIGFuZCBpbmV0LmgKKyNhcmUgbm90IG1pc3BsYWNlZCBpbiBzeXMgKHJhdGhlciB0 aGFuIG5ldGluZXQgYW5kIGFycGEsIHJlc3BlY3RpdmVseSkuCisjVXNlcyBBTlNJIEMuCisjTk9U RTogUmVtb3ZlIC1PIGFuZCBPbGltaXQ6MjUwMCBmcm9tIENGTEFHUyBpZiBURUxORVQgY29ubmVj dGlvbnMgZG8gbm90IHdvcmsuCitweXJkY29zeDoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQo Q0tWRVIpIGZvciBQeXJhbWlkIERDL09TeC4uLicKKwkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQk e0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTID0gLVhhIC1PIC1EU1ZSNCAtRERJUkVOVCAtREhE QlVVQ1AgLURTRUxFQ1QgLUROT0dFVFVTRVJTSEVMTCBcCisJLURDS19DVVJTRVMgLURTVEVSTUlP WCAtRFRDUFNPQ0tFVCAtRFBZUkFNSUQgLUsgT2xpbWl0OjMxMDAgXAorCS1ETk9fRE5TX1NSViAk KEtGTEFHUykiICJMSUJTPSAtbGN1cnNlcyAtbHNvY2tldCAtbG5zbCIgIkxOS0ZMQUdTID0gLXMi CisKKyNJQk0ncyBBSVggMy4wIG9uIElCTSAzNzAgbWFpbmZyYW1lLCB0ZXN0ZWQgb24gQUlYIEY0 NCB0aHJ1IEY1MC4KK2FpeDM3MDoKKwlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9y IElCTSBTeXN0ZW0vMzcwIEFJWCAzLjAuLi4KKwkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tU QVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTPSAtREFJWDM3MCAtRFRDUFNPQ0tFVCAtRExDS0RJUiAt RERJUkVOVCAkKEtGTEFHUykiIFwKKwkiTElCUyA9IC1sYnNkIgorCisjSUJNJ3MgQUlYL0VTQSAy LjEgKE9TRi8xKSBvbiBJQk0gbWFpbmZyYW1lCithaXhlc2E6CisJQGVjaG8gTWFraW5nIEMtS2Vy bWl0ICQoQ0tWRVIpIGZvciBJQk0gQUlYL0VTQS4uLgorCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9 JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1M9IC1EQUlYRVNBIC1EVENQU09DS0VUICQoS0ZM QUdTKSAtTyIKKworI0lCTSBQUy8yIHdpdGggQUlYIDEuMCB0aHJ1IDEuMy4KKyMgIFJlcG9ydHMg aW5kaWNhdGUgdGhhdCAtTyBzd2l0Y2ggbXVzdCBiZSBvbWl0dGVkLgorIyAgSXQgaXMgYWxzbyBw b3NzaWJsZSB0aGF0ICJtYWtlIGJzZCIgd2lsbCB3b3JrIChyZXBvcnRzIHdlbGNvbWUpLgorIyAg T25lIHJlcG9ydCBzYWlkICJtYWtlIExJQlM9LWxic2QgYnNkIiBkaWQgdGhlIHRyaWNrLgorIyAg Tk9UTE9HIGlzIHRvIGdldCBhcm91bmQgYSAndGxvZycgc3ltYm9sIGRlZmluZWQgaW4gb25lIG9m IHRoZSBoZWFkZXJzLgorcHMyYWl4OgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikg Zm9yIElCTSBBSVggMS54IFBTLzIuLi4nCisJJChNQUtFKSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFS R0VUOi0kKEApfSBcCisJIkNGTEFHUyA9IC1EQVRUU1YgLUROT1JFQUxQQVRIIC1EUFMyQUlYMTAg LURTSUdfViBcCisJLUROT1VOSUNPREUgLUROT1RMT0cgLUROT0xFQVJOICQoS0ZMQUdTKSAtaSIg XAorCSJMTktGTEFHUyA9IC1pIgorCitwczJhaXhuZXRjOgorCUBlY2hvICdNYWtpbmcgQy1LZXJt aXQgJChDS1ZFUikgZm9yIElCTSBBSVggMS54IFBTLzIuLi4nCisJJChNQUtFKSB3ZXJtaXQgS1RB UkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUyA9IC1EQVRUU1YgLUROT1JFQUxQQVRI IC1EUFMyQUlYMTAgLURUQ1BTT0NLRVQgLURDS19DVVJTRVMgXAorCS1EU0lHX1YgLUROT1VOSUNP REUgLUROT1RMT0cgLUROT0xFQVJOICQoS0ZMQUdTKSAtaSIgXAorCSJMSUJTID0gLWxjdXJzZXMi ICJMTktGTEFHUyA9IC1pIgorCitwczJhaXgzOgorCSQoTUFLRSkgcHMyYWl4IEtUQVJHRVQ9JCR7 S1RBUkdFVDotJChAKX0KKworI0lCTSBSVCBQQyB3aXRoIEFJWCAyLjIuMSwgdmFsaWQgYXMgb2Yg Qy1LZXJtaXQgOC4wLgorI05PVExPRyBiZWNhdXNlIG9mIGEgY29uZmxpY3QgaW4gPHN5cy90ZXJt aW8uaD4uCisjVGhpcyBvbmUgaGFzIHVuaXF1ZSBhbmQgc3RyYW5nZSBsb2NrZmlsZXMuCisjICAt TyByZW1vdmVkIG9uIHB1cnBvc2UgKDguMCkuCisjICBJbiBjYXNlIG9mICJjb21waWxlciBlcnJv cjogc3ltYm9sIHRhYmxlIGZ1bGwiLCBpbmNyZWFzZSB0aGUgLU5uIG51bWJlci4KKyMgIEluIGNh c2Ugb2YgImNvbXBpbGVyIGVycm9yOiBDb25zdGFudCBwb29sIHRvbyBiaWciLCBib29zdCB0aGUg LU5wIG51bWJlci4KKyMgIEFkZCAtRE5PUFVURU5WIGlmIHB1dGVudigpIGNhdXNlcyB0cm91Ymxl LgorIyAgUHV0IC1ETk9JS1NEIGJhY2sgaWYgSUtTRC1yZWxhdGVkIHByb2JsZW1zIG9jY3VyLgor cnRhaXg6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgSUJNIFJUIFBDLCBB SVggMi4yLjEuLi4nCisJJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VULSQoQCl9IFwK KwkiQ0ZMQUdTID0gLURBVFRTViAtRFJUQUlYIC1ESERCVVVDUCAtRERJUkVOVCAtRE5PVExPRyAt RFRDUFNPQ0tFVCBcCisJLUROT0dFVFVTRVJTSEVMTCAtRENMU09QTiAtRE5PUkVBTFBBVEggLURO T1VOSUNPREUgLURCU0RfSU5DTFVERVMgXAorCS1EVVNFX0xTVEFUIC1ERk5GTE9BVCAtTm4yNTAw IC1OcDEwMDAgLVdxLC1TSjIgLWEgLXcgJChLRkxBR1MpIiBcCisJIkxJQlMgPSAtbG0gJChMSUJT KSIgIkxOS0ZMQUdTID0gLXMiCisKKyMjIyMgSUJNIFJUIFBDIC0gdGhlc2UgdGFyZ2V0cyB3ZXJl IGxhc3QgdmVyaWZpZWQgaW4gQy1LZXJtaXQgOC4wLjIxMS4KKworI0lCTSBSVCBQQyB3aXRoIEFJ WCAyLjIuMSArIGN1cnNlcworcnRhaXhjOgorCSQoTUFLRSkgcnRhaXggQ0M9JChDQykgQ0MyPSQo Q0MyKSAiS0ZMQUdTPS1EQ0tfQ1VSU0VTIiAiTElCUz0tbGN1cnNlcyIKKworI0lCTSBSVCBQQyB3 aXRoIEFJWCAoQUNJUykgMi4yLjEgKEJTRCA0LjMpCisjIEFkZCAtTywgLUREWU5BTUlDLCAtcywg ZXRjLCBpZiB0aGV5IHdvcmsuCitydGFjaXM6CisJQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tW RVIpIGZvciBSVCBQQyB3aXRoIEFDSVMgMi4yLjEgPSBCU0QgNC4zLi4uCisJJChNQUtFKSB4ZXJt aXQgS1RBUkdFVD0kJHtLVEFSR0VULSQoQCl9IFwKKwkiQ0ZMQUdTPSAtREJTRDQgLURUQ1BTT0NL RVQgLUROT1JFQUxQQVRIIC1ETk9JS1NEIC1ETk9QVVRFTlYgXAorCSQoS0ZMQUdTKSAtVV9fU1RE Q19fIiAiTE5LRkxBR1MgPSAtcyIKKworIyMjIyBJQk0gQUlYLiAgVGhlIGZpcnN0IHR3byB0YXJn ZXRzIHNob3VsZCB3b3JrIGZvciBhbnkgdmVyc2lvbiBvZiBBSVgKKyMjIyMgZnJvbSA0LjIgb253 YXJkcy4gIFRoZSBvbmVzIGFmdGVyIHRoYXQgYXJlIGZvciBvbGRlciB2ZXJzaW9ucyBvcgorIyMj IyBzcGVjaWZpYyBjb25maWd1cmF0aW9ucywgYW5kL29yIHdpdGggZ2NjLgorCisjIFRoaXMgb25l IHNob3VsZCB3b3JrIGZvciBhbnkgQUlYIDQuMiBvciBsYXRlcjogIm1ha2UgYWl4Ii4KKyMgT3Ro ZXIgdGFncyBhcmUgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvbGQgbWFrZWZpbGUgdGFyZ2V0cy4K KyNPSzogMjAxMS8wNi8xMQorYWl4IGFpeDQyIGFpeDQzIGFpeDQ0IGFpeDQ1IGFpeDUwIGFpeDUx IGFpeDUyIGFpeDUzIGFpeDU0IGFpeDYxOgorCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVS KSBmb3IgSUJNIEFJWC4uLgorCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChA KX0gXAorCSJDRkxBR1M9IC1EQUlYUlMgLURBSVg0MSAtREFJWDQyIC1EU1ZSNCAtRFNURVJNSU9Y IC1EVENQU09DS0VUIFwKKwktRERJUkVOVCAtRENLX0FOU0lDIC1EQ0xTT1BOIC1EQ0tfQ1VSU0VT IC1EQ0tfTkVXVEVSTSAtREZORkxPQVQgXAorCS1EU0VMRUNUIC1EU0VMRUNUX0ggLUROT0dFVFVT RVJTSEVMTCAtcW1heG1lbT0xNjAwMCAtTyBcCisJLURDS0NQVT1cXFwiYHVuYW1lIC1wYFxcXCIg XAorCS1ESEVSQUxEPVwiXFxcIiBJQk0gQUlYIGB1bmFtZSAtdmAuYHVuYW1lIC1yYFxcXCJcIiBc CisJLURfTEFSR0VfRklMRVMgJChLRkxBR1MpIiAiTE5LRkxBR1MgPSAtcyIgIkxJQlM9LWxjdXJz ZXMgLWxtIgorCisjIFNhbWUgYnV0IHVzaW5nIGdjYyBpbnN0ZWFkIG9mIGNjCisjIFRoaXMgd29y a3MgYnV0IHdlIGdldCAiZ2NjOiB1bnJlY29nbml6ZWQgb3B0aW9uICctcW1heG1lbS0uLiciIGVh Y2ggbW9kdWxlLgorYWl4ZzoKKwlAZWNobyAiVXNpbmcgZ2NjLi4uIgorCSQoTUFLRSkgYWl4IEtU QVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCUNDPWdjYyBDQzI9Z2NjICJLRkxBR1M9LXBpcGUg LWZ1bnNpZ25lZC1jaGFyIgorCisjIEFJWCA0LjIgb3IgbGF0ZXIgd2l0aCBPcGVuU1NMIDAuOS43 IG9yIGxhdGVyOiAibWFrZSBhaXgrc3NsIgorIyBGb3IgZWFybGllciBPcGVuU1NMIHJlbW92ZSAt RE9QRU5TU0xfMDk3IG9yIGFkZCAiS0ZMQUdTPS1VT1BFTlNTTF8wOTciLgorIyBTeW5vbnltIHRh cmdldCBuYW1lcyBhZGRlZCB0byBjb3ZlciBvbGQgcmVkdW5kYW50IHRhcmdldHMgdGhhdCB3ZXJl IHJlbW92ZWQuCisjIElmIFNTTCBpcyBub3QgaW5zdGFsbGVkIGluIHRoZSAvdXNyL2xvY2FsIHRy ZWUgKHNlZSBTU0xJTkMgYW5kIFNTTExJQgorIyBkZWZpbml0aW9ucyBuZWFyIHRoZSB0b3ApLCB5 b3UgY2FuIHNwZWNpZnkgdGhlIGxvY2F0aW9ucyBpbiB5b3VyIG1ha2UKKyMgY29tbWFuZCBhcyBp biB0aGlzIGV4YW1wbGU6CisjCisjICBTU0xJTkM9LUkvb3B0L3NzbC9pbmNsdWRlIFNTTExJQj0t TC9vcHQvc3NsL2xpYiBtYWtlIC1lIGFpeCtzc2wKKyMKKyMgVG8gYnVpbGQgd2l0aCBnY2MgdXNl ICJtYWtlIGFpeCBDQz1nY2MgQ0MyPWdjYyIsIG9yICJtYWtlIGFpeGciCisjCisjT0s6IDIwMTEv MDYvMTUKK2FpeCtzc2wgYWl4NTErb3BlbnNzbCBhaXg1MitvcGVuc3NsIGFpeDUzK29wZW5zc2w6 CisJQGVjaG8gIk1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgSUJNIEFJWCB3aXRoIE9wZW5T U0wuLi4iCisJQGVjaG8gIlNTTElOQz0kKFNTTElOQykgU1NMTElCPSQoU1NMTElCKSIKKwkkKE1B S0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwlDQz0kKENDKSBDQzI9JChD QzIpIFwKKwkiQ0ZMQUdTPS1EQUlYUlMgLURBSVg0MSAtREFJWDQyIC1EU1ZSNCAtRFNURVJNSU9Y IC1EVENQU09DS0VUIFwKKwktRERJUkVOVCAtRENLX0FOU0lDIC1EQ0xTT1BOIC1EQ0tfQ1VSU0VT IC1EQ0tfTkVXVEVSTSAtREZORkxPQVQgXAorCS1EX0xBUkdFX0ZJTEVTIC1EU0VMRUNUIC1EU0VM RUNUX0ggLUROT0dFVFVTRVJTSEVMTCBcCisJLURDS0NQVT1cXFwiYHVuYW1lIC1wYFxcXCIgXAor CS1ESEVSQUxEPVwiXFxcIiBJQk0gQUlYIGB1bmFtZSAtdmAuYHVuYW1lIC1yYFxcXCJcIiBcCisJ LURDS19BVVRIRU5USUNBVElPTiAtRENLX1NTTCAtRE9QRU5TU0xfMDk3ICQoU1NMSU5DKSAkKEtG TEFHUykiIFwKKwkiTE5LRkxBR1M9LXMiICJMSUJTPSQoU1NMTElCKSAtbHNzbCAtbGNyeXB0byAt bGN1cnNlcyAtbG0gLWxjcnlwdCIKKworIyBBSVggNS4zIG9yIDYuMSBvciBsYXRlciB3aXRoIElC TSBPcGVuU1NMLCB3aGljaCBpcyBhbHdheXMgaW4gdGhlIGRpcmVjdG9yaWVzCisjIHNob3duIGJl bG93IHNvIHlvdSBkb24ndCBoYXZlIHRvIHNldCBTU0xJTkMgYW5kIFNTTExJQi4gIElmIGZvciBz b21lIHJlYXNvbgorIyB0aGUgU1NMIGluY2x1ZGUgZmlsZXMgYW5kIGxpYnJhcmllcyBhcmUgbm90 IGluIHRoZSBwbGFjZXMgYXNzdW1lZCwgdGhlbiB1c2UKKyMgIm1ha2UgYWl4K3NzbCIgKGp1c3Qg YWJvdmUpIGFuZCBzZXQgU1NMSU5DIGFuZCBTU0xMSUIgdG8gaW5kaWNhdGUgd2hlcmUgdGhlCisj IFNTTCBmaWxlcyBhcmUuICBUbyBidWlsZCB3aXRoIGdjYyB1c2UgIm1ha2UgYWl4K2libXNzbCBD Qz1nY2MgQ0MyPWdjYyIuCithaXgraWJtc3NsOgorCUBlY2hvICJNYWtpbmcgQy1LZXJtaXQgJChD S1ZFUikgZm9yIElCTSBBSVggNi4xIHdpdGggT3BlblNTTC4uLiIKKwlAZWNobyAiSWYgdGhpcyBm YWlscyB1c2UgJ21ha2UgYWl4K3NzJyBhbmQgc3BlY2lmeSBTU0xJTkMgYW5kIFNTTExJQiIKKwkk KE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwlDQz0kKENDKSBDQzI9 JChDQzIpIFwKKwkiQ0ZMQUdTPS1EQUlYUlMgLURBSVg0MSAtREFJWDQyIC1EU1ZSNCAtRFNURVJN SU9YIC1EVENQU09DS0VUIFwKKwktRERJUkVOVCAtRENLX0FOU0lDIC1EQ0xTT1BOIC1EQ0tfQ1VS U0VTIC1EQ0tfTkVXVEVSTSAtREZORkxPQVQgXAorCS1EX0xBUkdFX0ZJTEVTIC1EU0VMRUNUIC1E U0VMRUNUX0ggLUROT0dFVFVTRVJTSEVMTCBcCisJLURDS0NQVT1cXFwiYHVuYW1lIC1wYFxcXCIg XAorCS1ESEVSQUxEPVwiXFxcIiBJQk0gQUlYIGB1bmFtZSAtdmAuYHVuYW1lIC1yYFxcXCJcIiBc CisJLURDS19BVVRIRU5USUNBVElPTiAtRENLX1NTTCAtRE9QRU5TU0xfMDk4IFwKKwktSS91c3Iv aW5jbHVkZS9vcGVuc3NsICQoS0ZMQUdTKSIgXAorCSJMTktGTEFHUz0tcyIgXAorCSJMSUJTPS1M L3Vzci9saWIvb3BlbnNzbCAtbHNzbCAtbGNyeXB0byAtbGN1cnNlcyAtbG0gLWxjcnlwdCIKKwor IyBPbGQgQUlYIHZlcnNpb25zLi4uCisKKyNJQk0gQUlYIDMuMCwgMy4xLCBvciAzLjIgZm9yIFJJ U0MgU3lzdGVtLzYwMDAuCityczYwMDA6CisJQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIp IGZvciBJQk0gQUlYIDMuMCBvciAzLjEsIFJTLzYwMDAuLi4KKwkkKE1BS0UpIHhlcm1pdCBLVEFS R0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTPSAtREFJWFJTIC1EVENQU09DS0VUIC1E U1ZSMyAtRERJUkVOVCAtRENLX0FOU0lDIFwKKwktRENLX1BPTEwgLURDTFNPUE4gLURTRUxFQ1Rf SCAtRE5PVFRZTE9DSyAtTyAkKEtGTEFHUykiIFwKKwkiTE5LRkxBR1MgPSAtcyIKKworI0lCTSBB SVggMy4wLCAzLjEsIG9yIDMuMiBmb3IgUklTQyBTeXN0ZW0vNjAwMCwgd2l0aCBjdXJzZXMuCity czYwMDBjOgorCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgSUJNIEFJWCAzLjAg b3IgMy4xLCBSUy82MDAwLi4uCisJJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0k KEApfSBcCisJIkNGTEFHUz0gLURBSVhSUyAtRFRDUFNPQ0tFVCAtRFNWUjMgLURESVJFTlQgLURD S19BTlNJQyBcCisJLURDS19QT0xMIC1EQ0xTT1BOIC1EQ0tfQ1VSU0VTIC1EU0VMRUNUX0ggLURO T1RUWUxPQ0sgLUROT1JFQUxQQVRIIFwKKwktTyAkKEtGTEFHUykiICJMSUJTPSAtbGN1cnNlcyAt bHRlcm1jYXAiICJMTktGTEFHUyA9IC1zIgorCithaXgzMDoKKwkkKE1BS0UpIHJzNjAwMCBDQz0k KENDKSBDQzI9JChDQzIpIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0KKworYWl4MzE6CisJJChN QUtFKSByczYwMDAgQ0M9JChDQykgQ0MyPSQoQ0MyKSBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9 CisKKyNJQk0gQUlYIDMuMiBmb3IgUklTQyBTeXN0ZW0vNjAwMC4KKyNJbiBjYXNlIG9mICJzdWJw cm9ncmFtIHRvbyBjb21wbGV4IiB3YXJuaW5ncywgYWRkICItcW1heG1lbT0xNjAwMCIgdG8gQ0ZM QUdTLgorcnM2YWl4MzI6CisJQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBJQk0g QUlYIDMuMiwgUlMvNjAwMC4uLgorCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDot JChAKX0gXAorCSJDRkxBR1M9IC1EQUlYUlMgLURUQ1BTT0NLRVQgLURTVlI0IC1ERElSRU5UIC1E Q0tfQU5TSUMgLUROT1JFQUxQQVRIIFwKKwktRFNFTEVDVF9IIC1EQ0xTT1BOIC1ETk9UVFlMT0NL IC1PICQoS0ZMQUdTKSIgIkxOS0ZMQUdTID0gLXMiCisKKyNJQk0gQUlYIDMuMiBmb3IgUklTQyBT eXN0ZW0vNjAwMC4KK3JzNmFpeDMyYzoKKwlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikg Zm9yIElCTSBBSVggMy4yLCBSUy82MDAwLCBUQ1ArY3Vyc2VzLi4uCisJQGVjaG8gSW4gY2FzZSBv ZiBTdWJwcm9ncmFtIFRvbyBDb21wbGV4IHdhcm5pbmdzLAorCUBlY2hvIGFkZCAtcW1heG1lbT0x NjAwMCB0byBDRkxBR1MuCisJJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEAp fSBcCisJIkNGTEFHUz0gLURBSVhSUyAtRFRDUFNPQ0tFVCAtRFNWUjQgLURESVJFTlQgLURDS19B TlNJQyAtRE5PUkVBTFBBVEggXAorCS1EQ0xTT1BOIC1EQ0tfQ1VSU0VTIC1EU0VMRUNUX0ggLURO T1RUWUxPQ0sgLU8gJChLRkxBR1MpIiBcCisJIkxOS0ZMQUdTID0gLXMiICJMSUJTPS1sY3Vyc2Vz IgorCithaXgzMjoKKwkkKE1BS0UpIHJzNmFpeDMyYyBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9 CisKKyNJQk0gQUlYIDQuMSwgNC4xLnggb24gUklTQyBTeXN0ZW0vNjAwMCBvciBQb3dlciBTZXJp ZXMuCisjR2VuZXJhdGVzIGNvbW1vbiBiaW5hcnkgZm9yIGFsbCBwbGF0Zm9ybXMgaWYgdXNpbmcg eGxjIChJQk0gQyBjb21waWxlcikuCisjV2hlbiB1c2luZyBnY2MsIGFkZCAtbWNwdT1jb21tb24g dG8gZ2VuZXJhdGUgY29tbW9uIGJpbmFyeS4KKyNOb3RlIHRoYXQgdGhpcyBvbmUgbmVlZHMgQ0tf TkVXVEVSTS4KKyMgQWRkIC1iYmlndG9jIGluIGNhc2UgbGQgZmFpbHMgd2l0aCBUT0Mgb3ZlcmZs b3cuCithaXg0MToKKwlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIElCTSBBSVgg NC4xLjEgUlMvNjAwMCBvciBQb3dlclBDLi4uCisJJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtL VEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUz0gLURBSVhSUyAtREFJWDQxIC1EU1ZSNCAtRFNURVJN SU9YIC1EVENQU09DS0VUIC1ERElSRU5UIFwKKwktRENLX0FOU0lDIC1EQ0xTT1BOIC1EQ0tfQ1VS U0VTIC1EQ0tfTkVXVEVSTSAtRFNFTEVDVCAtRFNFTEVDVF9IIFwKKwktRE5PR0VUVVNFUlNIRUxM IC1xbWF4bWVtPTE2MDAwIC1PICQoS0ZMQUdTKSIgXAorCSJMTktGTEFHUyA9IC1zIiAiTElCUz0t bGN1cnNlcyIKKworI0RpdHRvIGJ1dCB3aXRoIGdjYy4KKyNSZW1vdmUgIkNDPWdjYyBDQzI9Z2Nj IiBpZiB5b3UgaGF2ZSBnY2MgaW5zdGFsbGVkIGFzIGNjLgorYWl4NDFnOgorCUBlY2hvIE1ha2lu ZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgSUJNIEFJWCA0LjEuMSBSUy82MDAwIG9yIFBvd2VyUEMu Li4KKwkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9ICJDQz1nY2MiICJD QzI9Z2NjIiBcCisJIkNGTEFHUz0gLURBSVhSUyAtREFJWDQxIC1EU1ZSNCAtRFNURVJNSU9YIC1E VENQU09DS0VUIC1ERElSRU5UIFwKKwktRENLX0FOU0lDIC1EQ0xTT1BOIC1EQ0tfQ1VSU0VTIC1E Q0tfTkVXVEVSTSAtRFNFTEVDVCAtRFNFTEVDVF9IIFwKKwktRE5PR0VUVVNFUlNIRUxMIC1PICQo S0ZMQUdTKSIgXAorCSJMTktGTEFHUyA9IC1zIC1YbGlua2VyIC1iYmlndG9jIiAiTElCUz0tbGN1 cnNlcyIKKworIyBBZGQgLWJiaWd0b2MgaW4gY2FzZSBsZCBmYWlscyB3aXRoIFRPQyBvdmVyZmxv dy4KK2FpeDQxK2tyYjUra3JiNDoKKwlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9y IElCTSBBSVggNC4xLjEgUlMvNjAwMCBvciBQb3dlclBDLi4uCisJJChNQUtFKSB4ZXJtaXQgS1RB UkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUz0gLURBSVhSUyAtREFJWDQxIC1EU1ZS NCAtRFNURVJNSU9YIC1EVENQU09DS0VUIC1ERElSRU5UIFwKKwktRENLX0FOU0lDIC1EQ0xTT1BO IC1EQ0tfQ1VSU0VTIC1EQ0tfTkVXVEVSTSAtRFNFTEVDVCAtRFNFTEVDVF9IIFwKKwktRENLX0FV VEhFTlRJQ0FUSU9OIC1EQ0tfS0VSQkVST1MgLURLUkI1IC1ES1JCNCAtREtSQjUyNCBcCisJLURD S19FTkNSWVBUSU9OIC1EQ0tfREVTICQoSzVJTkMpICQoSzVJTkMpL2tyYjUgIFwKKwktRE5PR0VU VVNFUlNIRUxMIC1xbWF4bWVtPTE2MDAwIC1PICQoS0ZMQUdTKSIgXAorCSJMTktGTEFHUyA9IC1z IiBcCisJIkxJQlMgPSAkKEs1TElCKSAtbGN1cnNlcyAtbGtyYjQgLWxkZXM0MjUgLWxrcmI1IFwK KwktbGNvbV9lcnIgLWxrNWNyeXB0byAtbGdzc2FwaV9rcmI1IgorCisjT2xkIG5hbWUgZm9yICJh aXg0MSIuCityczZhaXg0MWM6CisJJChNQUtFKSBhaXg0MSBLVEFSR0VUPSQke0tUQVJHRVQ6LSQo QCl9CisKKyNJQk0gQUlYIDQuMSwgNC4xLngsIG9yIDQuMiBvbiBSSVNDIFN5c3RlbS82MDAwIG9y IFBvd2VyIFNlcmllcywKKyMgd2l0aCBYLjI1IHN1cHBvcnQKKyNHZW5lcmF0ZXMgY29tbW9uIGJp bmFyeSBmb3IgYWxsIHBsYXRmb3JtcyBpZiB1c2luZyB4bGMgKElCTSBDIGNvbXBpbGVyKS4KKyNX aGVuIHVzaW5nIGdjYywgYWRkIC1tY3B1PWNvbW1vbiB0byBnZW5lcmF0ZSBjb21tb24gYmluYXJ5 LgorIyBBZGQgLWJiaWd0b2MgaW4gY2FzZSBsZCBmYWlscyB3aXRoIFRPQyBvdmVyZmxvdy4KK2Fp eDQxeDI1OgorCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgSUJNIEFJWCA0LjEu MSBSUy82MDAwIG9yIFBvd2VyUEMuLi4KKwkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJH RVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTPSAtREFJWFJTIC1EQUlYNDEgLURTVlI0IC1EU1RFUk1JT1gg LURUQ1BTT0NLRVQgLURESVJFTlQgXAorCS1EQ0tfQU5TSUMgLURDTFNPUE4gLURDS19DVVJTRVMg LURDS19ORVdURVJNIC1EU0VMRUNUIC1EU0VMRUNUX0ggXAorCS1ESUJNWDI1IC1EREVCVUcgLURO T0dFVFVTRVJTSEVMTCAtcW1heG1lbT0xNjAwMCAtZyAkKEtGTEFHUykiIFwKKwkiTE5LRkxBR1Mg PSAtZyAtYkk6L2xpYi9wc2UuZXhwIiAiTElCUz0tbGN1cnNlcyAtbG9kbSAtbGNmZyIKKwktQGVj aG8gIhtdMDtrZXJtaXQgZG9uZQdcYyIKKworI0FzIGFib3ZlIGJ1dCB3aXRob3V0IC1nIGluIExO S0ZMQUdTLgorIyBBZGQgLWJiaWd0b2MgaW4gY2FzZSBsZCBmYWlscyB3aXRoIFRPQyBvdmVyZmxv dy4KK2FpeDQxeDI1bzoKKwlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIElCTSBB SVggNC4xLjEgUlMvNjAwMCBvciBQb3dlclBDLi4uCisJJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0k JHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUz0gLURBSVhSUyAtREFJWDQxIC1EU1ZSNCAtRFNU RVJNSU9YIC1EVENQU09DS0VUIC1ERElSRU5UIFwKKwktRENLX0FOU0lDIC1EQ0xTT1BOIC1EQ0tf Q1VSU0VTIC1EQ0tfTkVXVEVSTSAtRFNFTEVDVCAtRFNFTEVDVF9IIFwKKwktRElCTVgyNSAtRE5P REVCVUcgLUROT0dFVFVTRVJTSEVMTCAtcW1heG1lbT0xNjAwMCAkKEtGTEFHUykiIFwKKwkiTE5L RkxBR1MgPSAtYkk6L2xpYi9wc2UuZXhwIiAiTElCUz0tbGN1cnNlcyAtbG9kbSAtbGNmZyIKKwkt QGVjaG8gIhtdMDtrZXJtaXQgZG9uZQdcYyIKKworI0FJWCA0LjIgLS0gVXNlIHRoaXMgdGFyZ2V0 IGlmIHRoZSByZWd1bGFyICJtYWtlIGFpeCIgZG9lc24ndCB3b3JrLgorIyBNdXN0IGhhdmUgQ0tf TkVXVEVSTSBvciBlY2hvaW5nIGlzIGxvc3QgYWZ0ZXIgY3Vyc2VzLgorIyBBZGQgLWJiaWd0b2Mg aW4gY2FzZSBsZCBmYWlscyB3aXRoIFRPQyBvdmVyZmxvdy4gIEFzIG9mIEMtS2VybWl0IDguMC4y MTIsCisjIGFsbCBBSVggYnVpbGRzIDQuMiBhbmQgbGF0ZXIgaW5jbHVkZSBsYXJnZSBmaWxlIHN1 cHBvcnQuCitvbGRhaXg0MjoKKwlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIElC TSBBSVggNC4yIG9yIGhpZ2hlci4uLgorCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdF VDotJChAKX0gXAorCSJDRkxBR1M9IC1EQUlYUlMgLURBSVg0MSAtREFJWDQyIC1EU1ZSNCAtRFNU RVJNSU9YIC1EVENQU09DS0VUIFwKKwktRERJUkVOVCAtRENLX0FOU0lDIC1EQ0xTT1BOIC1EQ0tf Q1VSU0VTIC1EQ0tfTkVXVEVSTSAtREZORkxPQVQgXAorCS1EU0VMRUNUIC1EU0VMRUNUX0ggLURO T0dFVFVTRVJTSEVMTCAtcW1heG1lbT0xNjAwMCAtTyBcCisJLURDS0NQVT1cXFwiYHVuYW1lIC1w YFxcXCIgXAorCS1ESEVSQUxEPVxcXCJcIElCTVwgQUlYXCBgdW5hbWUgLXZgLmB1bmFtZSAtcmBc XFwiIFwKKwktRF9MQVJHRV9GSUxFUyAkKEtGTEFHUykiICJMTktGTEFHUyA9IC1zIiAiTElCUz0t bGN1cnNlcyAtbG0iCisKKyNBSVggNC4zIC0gVXNlIHRoaXMgdGFyZ2V0IGlmIHRoZSByZWd1bGFy ICJtYWtlIGFpeCIgZG9lc24ndCB3b3JrLgorIyBNdXN0IE5PVCBoYXZlIENLX05FV1RFUk0gb3Ig ZWxzZSBDLUtlcm1pdCBoYW5ncyBhZnRlciBjdXJzZXMuCisjIC1iYmlndG9jIG5lZWRlZCBvbiBz b21lIHN5c3RlbXMgYnV0IG5vdCBvdGhlcnMgdG8gYXZvaWQgVE9DIG92ZXJmbG93LgorIyAibWFu IGxkIiBzYXlzIC1iYmlndG9jIG1ha2VzIHByb2dyYW0gcnVuIHNsb3dlci4KK29sZGFpeDQzOgor CUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgSUJNIEFJWCA0LjMgb3IgaGlnaGVy Li4uCisJJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFH Uz0gLURBSVhSUyAtREFJWDQxIC1EQUlYNDMgLURTVlI0IC1EU1RFUk1JT1ggLURUQ1BTT0NLRVQg XAorCS1ERElSRU5UIC1EQ0tfQU5TSUMgLURDTFNPUE4gLURDS19DVVJTRVMgLURTRUxFQ1QgLURT RUxFQ1RfSCBcCisJLURGTkZMT0FUIC1ETk9HRVRVU0VSU0hFTEwgLXFtYXhtZW09MTYwMDAgLWJi aWd0b2MgLU8gJChLRkxBR1MpIiBcCisJIkxOS0ZMQUdTID0gLXMiICJMSUJTPS1sY3Vyc2VzIC1s bSIKKworI0FJWCA0LjMgd2l0aCBJQk0gWC4yNS4KK2FpeDQzeDI1OgorCUBlY2hvICJNYWtpbmcg Qy1LZXJtaXQgJChDS1ZFUikgZm9yIElCTSBBSVggNC4zIHdpdGggWC4yNS4uLiIKKwkkKE1BS0Up IHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTPSAtREFJWFJTIC1E QUlYNDEgLURBSVg0MyAtRFNWUjQgLURTVEVSTUlPWCAtRFRDUFNPQ0tFVCBcCisJLURESVJFTlQg LURDS19BTlNJQyAtRENMU09QTiAtRENLX0NVUlNFUyAtRFNFTEVDVCAtRFNFTEVDVF9IIFwKKwkt REZORkxPQVQgLUROT0dFVFVTRVJTSEVMTCAtRElCTVgyNSBcCisJLXFtYXhtZW09MTYwMDAgLWJi aWd0b2MgLU8gJChLRkxBR1MpIiBcCisJIkxOS0ZMQUdTID0gLWJJOi9saWIvcHNlLmV4cCIgIkxJ QlM9LWxjdXJzZXMgLWxvZG0gLWxjZmcgLWxtIgorCisjQUlYIDQuMyAtLSBNdXN0IE5PVCBoYXZl IENLX05FV1RFUk0gb3IgZWxzZSBDLUtlcm1pdCBoYW5ncyBhZnRlciBjdXJzZXMuCisjIC1tbWlu aW1hbC10b2MgbmVlZGVkIG9uIHNvbWUgc3lzdGVtcyBidXQgbm90IG90aGVycyB0byBhdm9pZCBU T0Mgb3ZlcmZsb3cuCisjICJtYW4gbGQiIHNheXMgLWJiaWd0b2MgbWFrZXMgcHJvZ3JhbSBydW4g c2xvd2VyLgorYWl4NDNnOgorCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgSUJN IEFJWCA0LjMgZ2NjLi4uCisJJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEAp fSBDQz1nY2MgQ0MyPWdjYyBcCisJIkNGTEFHUz0gLW1taW5pbWFsLXRvYyAtZyAtTyAtREFJWFJT IC1EQUlYNDEgLURBSVg0MyAtRFNWUjQgXAorCS1ERElSRU5UIC1EQ0tfQU5TSUMgLURDTFNPUE4g LURDS19DVVJTRVMgLURTRUxFQ1QgLURTRUxFQ1RfSCBcCisJLURTVEVSTUlPWCAtRFRDUFNPQ0tF VCAtREZORkxPQVQgLUROT0dFVFVTRVJTSEVMTCAkKEtGTEFHUykiIFwKKwkiTElCUz0tbGN1cnNl cyAtbG0iCisKK2FpeDQzZ2NjOgorCSQoTUFLRSkgYWl4NDNnCisKKyMgTm9uZSBvZiB0aGUgZm9s bG93aW5nIGFpeDQzZ2NjIGF0dGVtcHRzIHdvcmsgb24gYSBnY2Mtb25seSBBSVggNC4zLjMgYm94 LgorIyBJdCBqdXN0IHBsYWluIGNhbid0IGZpbmQgdGhlIG1hdGggcm91dGluZXMgKGZtb2QsIHBv dywgZXhwLCBzcXJ0LCBsb2cxMCwuLi4pCisjIFdoaWNoIGlzIG9kZCBiZWNhdXNlIG5tIC91c3Iv bGliL2xpYkMuYSBmaW5kcyB0aGVtLi4uCisKKyNpbiBjYXNlIGFpeDQzZ2NjIGNhbid0IGZpbmQg aXRzIG1hdGggbGlicmFyeS4uLgorYWl4NDNnY2N4OgorCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAk KENLVkVSKSBmb3IgSUJNIEFJWCA0LjMgZ2NjLi4uCisJJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0k JHtLVEFSR0VUOi0kKEApfSBDQz1nY2MgQ0MyPWdjYyBcCisJIkNGTEFHUz0gLW1taW5pbWFsLXRv YyAtZyAtTyAtREFJWFJTIC1EQUlYNDEgLURBSVg0MyAtRFNWUjQgXAorCS1ERElSRU5UIC1EQ0tf QU5TSUMgLURDTFNPUE4gLURDS19DVVJTRVMgLURTRUxFQ1QgLURTRUxFQ1RfSCBcCisJLURTVEVS TUlPWCAtRFRDUFNPQ0tFVCAtREZORkxPQVQgLUROT0dFVFVTRVJTSEVMTCAkKEtGTEFHUykiIFwK KwkiTElCUz0gLUwvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDQuMy4xLjAv Mi45NS4yIFwKKwktbGN1cnNlcyAtYmxvYWRtYXAgLWJub3F1aWV0IgorCisjaW4gY2FzZSBhaXg0 M2djY3ggY2FuJ3QgZmluZCBpdHMgbWF0aCBsaWJyYXJ5Li4uCithaXg0M2djY3k6CisJQGVjaG8g TWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBJQk0gQUlYIDQuMyBnY2MuLi4KKwkkKE1BS0Up IHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IENDPWdjYyBDQzI9Z2NjIFwKKwkiQ0ZM QUdTPSAtbW1pbmltYWwtdG9jIC1nIC1PIC1EQUlYUlMgLURBSVg0MSAtREFJWDQzIC1EU1ZSNCBc CisJLURESVJFTlQgLURDS19BTlNJQyAtRENMU09QTiAtRENLX0NVUlNFUyAtRFNFTEVDVCAtRFNF TEVDVF9IIFwKKwktRFNURVJNSU9YIC1EVENQU09DS0VUIC1ERk5GTE9BVCAtRE5PR0VUVVNFUlNI RUxMICQoS0ZMQUdTKSIgXAorCSJMSUJTPSAtbGN1cnNlcyAtYmxvYWRtYXAgLWJub3F1aWV0Igor CisjaW4gY2FzZSBhaXg0M2djY3ggY2FuJ3QgZmluZCBpdHMgbWF0aCBsaWJyYXJ5Li4uCithaXg0 M2djY3o6CisJQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBJQk0gQUlYIDQuMyBn Y2MuLi4KKwkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IENDPWdjYyBD QzI9Z2NjIFwKKwkiQ0ZMQUdTPSAtbW1pbmltYWwtdG9jIC1nIC1PIC1EQUlYUlMgLURBSVg0MSAt REFJWDQzIC1EU1ZSNCBcCisJLURESVJFTlQgLURDS19BTlNJQyAtRENMU09QTiAtRENLX0NVUlNF UyAtRFNFTEVDVCAtRFNFTEVDVF9IIFwKKwktRFNURVJNSU9YIC1EVENQU09DS0VUIC1ERk5GTE9B VCAtRE5PR0VUVVNFUlNIRUxMICQoS0ZMQUdTKSIgXAorCSJMSUJTPSAtTC4gLWxjdXJzZXMgLWJs b2FkbWFwIC1ibm9xdWlldCIKKworI0FJWCA0LjMgd2l0aCBNSVQgS2VyYmVyb3MgNSBhbmQgS2Vy YmVyb3MgNCBjb21wYXRpYmlsaXR5IG1vZGUKKyMgTXVzdCBOT1QgaGF2ZSBDS19ORVdURVJNIG9y IGVsc2UgQy1LZXJtaXQgaGFuZ3MgYWZ0ZXIgY3Vyc2VzLgorIyAtbW1pbmltYWwtdG9jIG5lZWRl ZCBvbiBzb21lIHN5c3RlbXMgYnV0IG5vdCBvdGhlcnMgdG8gYXZvaWQgVE9DIG92ZXJmbG93Lgor IyAibWFuIGxkIiBzYXlzIC1iYmlndG9jIG1ha2VzIHByb2dyYW0gcnVuIHNsb3dlci4KK2FpeDQz Z2NjK2tyYjUra3JiNDoKKwlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIElCTSBB SVggNC4zIG9yIGhpZ2hlciB3L0tlcmJlcm9zLi4uCisJJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0k JHtLVEFSR0VUOi0kKEApfSBDQz1nY2MgQ0MyPWdjYyBcCisJIkNGTEFHUz0gLW1taW5pbWFsLXRv YyAtZyAtTyAtREFJWFJTIC1EQUlYNDEgLURBSVg0MyAtRFNWUjQgXAorCS1ERElSRU5UIC1EQ0tf QU5TSUMgLURDTFNPUE4gLURDS19DVVJTRVMgLURTRUxFQ1QgLURTRUxFQ1RfSCBcCisJLURTVEVS TUlPWCAtRFRDUFNPQ0tFVCAtREZORkxPQVQgLUROT0dFVFVTRVJTSEVMTCBcCisJLURDS19BVVRI RU5USUNBVElPTiAtRENLX0tFUkJFUk9TIC1ES1JCNSAtREtSQjQgLURLUkI1MjQgXAorCS1EQ0tf RU5DUllQVElPTiAtRENLX0RFUyAtZnVuc2lnbmVkLWNoYXIgJChLNUlOQykgJChLNUlOQykva3Ji NSBcCisJJChLRkxBR1MpIiBcCisJIkxJQlM9JChLNUxJQikgLWxjdXJzZXMgLWxtIC1sa3JiNCAt bGRlczQyNSAtbGtyYjUgXAorCS1sY29tX2VyciAtbGs1Y3J5cHRvIC1sY3J5cHQgLWxnc3NhcGlf a3JiNSIKKworI0FJWCA0LjMgd2l0aCBNSVQgS2VyYmVyb3MgNSwgS2VyYmVyb3MgNCBjb21wYXRp YmlsaXR5IG1vZGUgYW5kIE9wZW5TU0wKKyMgTXVzdCBOT1QgaGF2ZSBDS19ORVdURVJNIG9yIGVs c2UgQy1LZXJtaXQgaGFuZ3MgYWZ0ZXIgY3Vyc2VzLgorIyAtbW1pbmltYWwtdG9jIG5lZWRlZCBv biBzb21lIHN5c3RlbXMgYnV0IG5vdCBvdGhlcnMgdG8gYXZvaWQgVE9DIG92ZXJmbG93LgorIyAi bWFuIGxkIiBzYXlzIC1iYmlndG9jIG1ha2VzIHByb2dyYW0gcnVuIHNsb3dlci4KK2FpeDQzZ2Nj K2tyYjUra3JiNCtvcGVuc3NsOgorCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3Ig SUJNIEFJWCA0LjMgb3IgaGlnaGVyIHcvS2VyYmVyb3MuLi4KKwkkKE1BS0UpIHhlcm1pdCBLVEFS R0VUPSQke0tUQVJHRVQ6LSQoQCl9IENDPWdjYyBDQzI9Z2NjIFwKKwkiQ0ZMQUdTPSAtbW1pbmlt YWwtdG9jIC1nIC1PIC1EQUlYUlMgLURBSVg0MSAtREFJWDQzIC1EU1ZSNCBcCisJLURESVJFTlQg LURDS19BTlNJQyAtRENMU09QTiAtRENLX0NVUlNFUyAtRFNFTEVDVCAtRFNFTEVDVF9IIFwKKwkt RFNURVJNSU9YIC1EVENQU09DS0VUIC1ERk5GTE9BVCAtRE5PR0VUVVNFUlNIRUxMIFwKKwktRENL X0FVVEhFTlRJQ0FUSU9OIC1EQ0tfS0VSQkVST1MgLURLUkI1IC1ES1JCNCAtREtSQjUyNCBcCisJ LURDS19FTkNSWVBUSU9OIC1EQ0tfREVTIC1EQ0tfQ0FTVCAtRExJQkRFUyAtRENLX1NTTCBcCisJ LWZ1bnNpZ25lZC1jaGFyICQoSzVJTkMpICQoSzVJTkMpL2tyYjUgJChTU0xJTkMpICQoS0ZMQUdT KSIgXAorCSJMSUJTPSQoSzVMSUIpICQoU1NMTElCKSAtbHNzbCAtbGNyeXB0byBcCisJLWxjdXJz ZXMgLWxtIC1sa3JiNCAtbGRlczQyNSAtbGtyYjUgLWxjb21fZXJyIC1sazVjcnlwdG8gLWxjcnlw dCBcCisJLWxnc3NhcGlfa3JiNSIKKworYWl4NDNnY2Mrb3BlbnNzbDoKKwlAZWNobyBNYWtpbmcg Qy1LZXJtaXQgJChDS1ZFUikgZm9yIElCTSBBSVggNC4zIG9yIGhpZ2hlciB3L09wZW5TU0wuLi4K KwkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IENDPWdjYyBDQzI9Z2Nj IFwKKwkiQ0ZMQUdTPSAtbW1pbmltYWwtdG9jIC1nIC1PIC1EQUlYUlMgLURBSVg0MSAtREFJWDQz IC1EU1ZSNCBcCisJLURESVJFTlQgLURDS19BTlNJQyAtRENMU09QTiAtRENLX0NVUlNFUyAtRFNF TEVDVCAtRFNFTEVDVF9IIFwKKwktRFNURVJNSU9YIC1EVENQU09DS0VUIC1ERk5GTE9BVCAtRE5P R0VUVVNFUlNIRUxMIFwKKwktRENLX0FVVEhFTlRJQ0FUSU9OIC1EQ0tfU1NMIC1mdW5zaWduZWQt Y2hhciAkKFNTTElOQykgJChLRkxBR1MpIiBcCisJIkxJQlM9JChTU0xMSUIpIC1sc3NsIC1sY3J5 cHRvIC1sY3Vyc2VzIC1sbSAtbGNyeXB0IgorCithaXg0NGdjYzoKKwkkKE1BS0UpIGFpeDQzZyAi S0ZMQUdTPS1EQUlYNDQgJChLRkxBR1MpIiBcCisJS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfQor CithaXg0NWdjYzoKKwkkKE1BS0UpIGFpeDQzZyAiS0ZMQUdTPS1EQUlYNDUgJChLRkxBR1MpIiBc CisJS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfQorCithaXg1MGdjYzoKKwkkKE1BS0UpIGFpeDQz ZyAiS0ZMQUdTPS1EQUlYNTAgJChLRkxBR1MpIiBcCisJS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEAp fQorCithaXg1MWdjYzoKKwkkKE1BS0UpIGFpeDQzZyAiS0ZMQUdTPS1EQUlYNTEgJChLRkxBR1Mp IiBcCisJS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfQorCithaXg1MmdjYzoKKwkkKE1BS0UpIGFp eDQzZyAiS0ZMQUdTPS1EQUlYNTIgJChLRkxBR1MpIiBcCisJS1RBUkdFVD0kJHtLVEFSR0VUOi0k KEApfQorCithaXg1M2djYzoKKwkkKE1BS0UpIGFpeDQzZyAiS0ZMQUdTPS1EQUlYNTMgJChLRkxB R1MpIiBcCisJS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfQorCisjQnVsbCBEUFgvMiB3aXRoIEJP Uy9YLCBsaWtlIEFJWC9SUzYwMDAKK2J1bGxkcHgyOgorCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAk KENLVkVSKSBmb3IgQnVsbCBEUFgvMiB3aXRoIEJPUy9YLi4uCisJJChNQUtFKSB3ZXJtaXQgS1RB UkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUz0gLURTVlIzIC1ERElSRU5UIC1EQ0tf QU5TSUMgLURDS1RZUF9IPTxzeXMvdHlwZXMuaD4gXAorCS1EQ0tfUE9MTCAtRE5PR0VUVVNFUlNI RUxMIC1EQ0xTT1BOIC1ETk9MRUFSTiAtTyAkKEtGTEFHUykiIFwKKwkiTE5LRkxBR1MgPSAtcyIK KworI1N1biBVTklYIDMuNSB3aXRoIGdjYyAyLjMuMy4KK3N1bm9zM2djYzoKKwlAZWNobyBNYWtp bmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFN1biBVTklYIDMuNSBhbmQgZ2NjLi4uCisJJChNQUtF KSB4ZXJtaXQgQ0M9Z2NjIENDMj1nY2MgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJQ0ZM QUdTPSItZyAtTyAtREJTRDQgLURUQ1BTT0NLRVQgJChLRkxBR1MpIgorCisjU3VuT1MgdmVyc2lv biA0LjAsIEJTRCBlbnZpcm9ubWVudCwgaGFzIHNhdmVkIG9yaWdpbmFsIGV1aWQgZmVhdHVyZS4K KyMgQWRkICJDQz0vdXNyL3VjYi9jYyBDQzI9L3Vzci91Y2IvY2MiIGlmIG5lY2Vzc2FyeS4KKyMg Tm90ZTogSW5jbHVkaW5nIFVuaWNvZGUgY3Jhc2hlcyB0aGUgYXNzZW1ibGVyIGluIGNrY3VuaS5j Lgorc3Vub3M0OgorCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgU3VuT1MgNC4w LCBCU0QgZW52aXJvbm1lbnQuLi4KKwkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6 LSQoQCl9IFwKKwkiQ0ZMQUdTPSAtTyAtRFNVTk9TNCAtREZORkxPQVQgLUROT1VOSUNPREUgJChL RkxBR1MpIiBcCisJIkxJQlM9LWxtIgorCisjQXMgYWJvdmUsIGJ1dCB3aXRoIFN1bkxpbmsgWC4y NSBzdXBwb3J0CitzdW5vczR4MjU6CisJQGVjaG8gU3VuTGluayBYLjI1IHN1cHBvcnQKKwkkKE1B S0UpICJNQUtFPSQoTUFLRSkiIHN1bm9zNCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwki S0ZMQUdTPSQoS0ZMQUdTKSAtREZORkxPQVQgLURTVU5YMjUiIFwKKwkiTElCUz0tbG0iCisKKyNT VU4gT1MgdmVyc2lvbiA0LjEgLSA0LjEuMywgQlNEIGVudmlyb25tZW50LCBoYXMgc2F2ZWQgb3Jp Z2luYWwgZXVpZCBmZWF0dXJlLgorI1VzZXMgSG9uZXkgRGFuQmVyIFVVQ1AuICBSZXF1aXJlcyBw cmVzZW5jZSBvZiAvdXNyL3Nwb29sL2xvY2tzIGRpcmVjdG9yeS4KKyMgL3Zhci9zcG9vbC8gc2hv dWxkIGJlIGEgc3ltYm9saWMgbGluayB0byAgL3Vzci9zcG9vbC8uCisjIC4uLiBvciAnbWFrZSB4 ZXJtaXQgIkNDPSAvdXNyL3VjYi9jYyAiIFwnCisjIE5vdGU6ICJ4ZXJtaXQiIG1lYW5zIHVzZSB0 aGUgc2VsZWN0KCkgdmVyc2lvbiBvZiB0aGUgQ09OTkVDVCBtb2R1bGUuCisjIE5vdGUgZm9yIEMt S2VybWl0IDkuMDogUmVwb3J0ZWRseSAneW91IG5lZWQgdG8gbW9kaWZ5IHRoZSBzeXMvaW9jdGwu aAorIyBpbmNsdWRlIGZpbGUsIGkuZS4gY29tbWVudCBvdXQgdGhlICJzdHJ1Y3Qgd2luc2l6ZSIg YW5kICJzdHJ1Y3QKKyMgdHR5c2l6ZSIuIE90aGVyd2lzZSB0aGVyZSB3aWxsIGJlIGEgY29uZmxp Y3Qgd2l0aCBzeXMvdHR5Y29tLmggKGluY2x1ZGVkIGJ5CisjIHRlcm1pb3MuaCkgd2hpY2ggYWxz byBkZWNsYXJlcyB0aGVzZSBzdHJ1Y3RzLiBCdXQgeW91IG5lZWQgYm90aCBpbmNsdWRlcy4nCitz dW5vczQxOgorCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgU3VuT1MgNC4xIC8g QlNELi4uCisJJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNG TEFHUz0gLU8gLURTVU5PUzQxIC1ESERCVVVDUCAtRE5PVU5JQ09ERSAkKEtGTEFHUykiIFwKKwki TElCUz0gJChMSUJTKSAtbHJlc29sdiAtbG0iCisKKyNBcyBhYm92ZSwgYnV0IGNvbXBpbGVkIHdp dGggZ2NjLiAgR2l2ZXMgMjQtMzJLIHNpemUgcmVkdWN0aW9uCisjd2l0aCBnY2MgMi4xIG9yIDIu Mi4yLiAgQ0FVVElPTjogbWFrZSBzdXJlICJmaXhpbmNsdWRlcyIgaGFzIGJlZW4gcnVuIG9uCisj dGhlIGluY2x1ZGUgZmlsZXMsIHNvIGdjYydzIGFyZSBpbiBzeW5jIHdpdGggdGhlIHJlZ3VsYXIg U3VuIG9uZXMuCisjVGhpcyBpbmNsdWRlcyB0aGUgY3Vyc2VzIGxpYnJhcnkgZm9yIGZ1bGxzY3Jl ZW4gZmlsZSB0cmFuc2ZlciBkaXNwbGF5LgorI05ER1BXTkFNIG5lZWRlZCBmb3IgR0NDIDIuNS42 LCBub3QgbmVlZGVkIGZvciAyLjQuMCwgYnV0IGl0J3MgdW5jZXJ0YWluCisjd2hldGhlciBpdCB3 aWxsIGRvIGFueSBoYXJtIGZvciAyLjQuMCBjb21waWxhdGlvbiAtLSBpZiBzbywgcmVtb3ZlIGl0 Lgorc3Vub3M0MWdjYzoKKwlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFN1bk9T IDQuMSB3aXRoIGdjYyBhbmQgY3Vyc2VzLi4uCisJJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtL VEFSR0VUOi0kKEApfSAiQ0M9IGdjYyIgIkNDMj0gZ2NjIiBcCisJIkNGTEFHUz0gLU8gLURTVU5P UzQxIC1ESERCVVVDUCAtRE5ER1BXTkFNIC1EQ0tfQ1VSU0VTIC1ERk5GTE9BVCBcCisJLWZ1bnNp Z25lZC1jaGFyICQoS0ZMQUdTKSIgIkxJQlM9IC1sY3Vyc2VzIC1sdGVybWNhcCAtbHJlc29sdiAt bG0iCisKKyMgQXMgYWJvdmUsIGJ1dCB3aXRob3V0IC1mdW5zaWduZWQtY2hhciBzbyBJIGNhbiBz ZWUgdGhlIHdhcm5pbmdzIHRoYXQKKyMgZXZlcnlib2R5IGVsc2Ugd2lsbCBnZXQgd2hlbiB0aGV5 IHVzZSBBTlNJIGNvbXBpbGVycyB0aGF0IGRvbid0IGhhdmUgdGhpcworIyBvcHRpb24gKGdzYyA9 IGdjYyBzaWduZWQgY2hhcikuCitzdW5vczQxZ3NjOgorCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAk KENLVkVSKSBmb3IgU3VuT1MgNC4xIHdpdGggZ2NjIGFuZCBjdXJzZXMuLi4KKwkkKE1BS0UpIHhl cm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9ICJDQz0gZ2NjIiAiQ0MyPSBnY2MiIFwKKwki Q0ZMQUdTPSAtTyAtRFNVTk9TNDEgLURIREJVVUNQIC1ETkRHUFdOQU0gLURDS19DVVJTRVMgLURG TkZMT0FUIFwKKwkkKEtGTEFHUykiICJMSUJTPSAtbGN1cnNlcyAtbHRlcm1jYXAgLWxyZXNvbHYg LWxtIgorCisjQXMgYWJvdmUgYnV0IHdpdGggY2t1Y29uLmMgcmF0aGVyIHRoYW4gY2t1Y25zLmMg KGZvciB0ZXN0aW5nIG9ubHkpCitzdW5vczQxZ2NjZm9yazoKKwlAZWNobyBNYWtpbmcgQy1LZXJt aXQgJChDS1ZFUikgZm9yIFN1bk9TIDQuMSB3aXRoIGdjYyBhbmQgY3Vyc2VzLi4uCisJJChNQUtF KSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSAiQ0M9IGdjYyIgIkNDMj0gZ2NjIiBc CisJIkNGTEFHUz0gLU8gLURTVU5PUzQxIC1ESERCVVVDUCAtRE5ER1BXTkFNIC1EQ0tfQ1VSU0VT IC1ERk5GTE9BVCBcCisJLUROT0xFQVJOIC1mdW5zaWduZWQtY2hhciAkKEtGTEFHUykiIFwKKwki TElCUz0gLWxjdXJzZXMgLWx0ZXJtY2FwIC1scmVzb2x2IC1sbSIKKworI2FzIGFib3ZlIGJ1dCBj b25maWd1cmVkIGZvciBLZXJiZXJvcyBJVgorc3Vub3M0MWdjYytrcmI0OgorCUBlY2hvIE1ha2lu ZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgU3VuT1MgNC4xLCBnY2MsIGN1cnNlcywga3JiNC4uLgor CSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gIkNDPSBnY2MiICJDQzI9 IGdjYyIgXAorCSJDRkxBR1M9IC1PIC1EU1VOT1M0MSAtREhEQlVVQ1AgLUROREdQV05BTSAtRENL X0NVUlNFUyAtREZORkxPQVQgXAorCS1EVENQU09DS0VUIC1EQ0tfQVVUSEVOVElDQVRJT04gLURD S19LRVJCRVJPUyAgLURLUkI0IFwKKwktRENLX0VOQ1JZUFRJT04gLURDS19ERVMgLURDS19DQVNU IC1EQklHQlVGT0sgLWZ1bnNpZ25lZC1jaGFyIFwKKwkkKEs0SU5DKSAkKEtGTEFHUykiIFwKKwki TElCUz0gJChLNExJQikgLWxjdXJzZXMgLWx0ZXJtY2FwIC1scmVzb2x2IC1sbSAtbGtyYiAtbGRl cyIKKworI2FzIGFib3ZlIGJ1dCBjb25maWd1cmVkIGZvciBTU0wvVExTCitzdW5vczQxZ2NjK29w ZW5zc2w6CisJQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTdW5PUyA0LjEsIGdj YywgY3Vyc2VzLCBzc2wuLi4KKwkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQo QCl9ICJDQz0gZ2NjIiAiQ0MyPSBnY2MiIFwKKwkiQ0ZMQUdTPSAtTyAtRFNVTk9TNDEgLURIREJV VUNQIC1ETkRHUFdOQU0gLURDS19DVVJTRVMgLURGTkZMT0FUIFwKKwktRENLX0FVVEhFTlRJQ0FU SU9OIC1mdW5zaWduZWQtY2hhciBcCisJLURDS19TU0wgLURUQ1BTT0NLRVQgLURCSUdCVUZPSyAk KFNTTElOQykgJChLRkxBR1MpIiBcCisJIkxJQlM9ICQoU1NMTElCKSAtbGN1cnNlcyAtbHRlcm1j YXAgLWxyZXNvbHYgLWxtIC1sc3NsIC1sY3J5cHRvIgorCisjYXMgYWJvdmUgYnV0IGNvbmZpZ3Vy ZWQgZm9yIEtlcmJlcm9zIElWIGFuZCBTU0wvVExTCitzdW5vczQxZ2NjK2tyYjQrb3BlbnNzbDoK KwlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFN1bk9TIDQuMSwgZ2NjLCBjdXJz ZXMsIGtyYjQuLi4KKwkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9ICJD Qz0gZ2NjIiAiQ0MyPSBnY2MiIFwKKwkiQ0ZMQUdTPSAtTyAtRFNVTk9TNDEgLURIREJVVUNQIC1E TkRHUFdOQU0gLURDS19DVVJTRVMgLURGTkZMT0FUIFwKKwktRENLX0FVVEhFTlRJQ0FUSU9OIC1E Q0tfS0VSQkVST1MgLURLUkI0IC1EQ0tfRU5DUllQVElPTiAtRENLX0RFUyBcCisJLURDS19DQVNU IC1EQ0tfU1NMIC1ETElCREVTIC1EVENQU09DS0VUIC1EQklHQlVGT0sgLWZ1bnNpZ25lZC1jaGFy IFwKKwkkKEs0SU5DKSAkKFNTTElOQykgJChLRkxBR1MpIiBcCisJIkxJQlM9ICQoSzRMSUIpICQo U1NMTElCKSBcCisJLWxjdXJzZXMgLWx0ZXJtY2FwIC1scmVzb2x2IC1sbSAtbGtyYiAtbHNzbCAt bGNyeXB0byIKKworI2FzIGFib3ZlIGJ1dCBjb25maWd1cmVkIGZvciBLZXJiZXJvcyBJViBhbmQg WkxJQiBlbmFibGVkIFNTTC9UTFMKK3N1bm9zNDFnY2Mra3JiNCtvcGVuc3NsK3psaWI6CisJQGVj aG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTdW5PUyA0LjEsIGdjYywgY3Vyc2VzLCBr cmI0Li4uCisJJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSAiQ0M9IGdj YyIgIkNDMj0gZ2NjIiBcCisJIkNGTEFHUz0gLU8gLURTVU5PUzQxIC1ESERCVVVDUCAtRE5ER1BX TkFNIC1EQ0tfQ1VSU0VTIC1ERk5GTE9BVCBcCisJLURDS19BVVRIRU5USUNBVElPTiAtRENLX0tF UkJFUk9TIC1ES1JCNCAtRENLX0VOQ1JZUFRJT04gLURDS19ERVMgXAorCS1EQ0tfQ0FTVCAtRENL X1NTTCAtRExJQkRFUyAtRFRDUFNPQ0tFVCAtREJJR0JVRk9LIC1mdW5zaWduZWQtY2hhciBcCisJ LURaTElCICQoSzRJTkMpICQoU1NMSU5DKSBcCisJJChLRkxBR1MpIiBcCisJIkxJQlM9ICQoSzRM SUIpICQoU1NMTElCKSBcCisJLWxjdXJzZXMgLWx0ZXJtY2FwIC1scmVzb2x2IC1sbSAtbGtyYiAt bHNzbCAtbGNyeXB0byAtbHoiCisKKyNhcyBhYm92ZSBidXQgY29uZmlndXJlZCBmb3IgS2VyYmVy b3MgSVYgYW5kIFNSUCBhbmQgWkxJQiBlbmFibGVkIFNTTC9UTFMKK3N1bm9zNDFnY2Mra3JiNCtz cnArb3BlbnNzbCt6bGliOgorCUBlY2hvICJDLUtlcm1pdCAkKENLVkVSKSBTdW5PUyA0LjE6IGdj YyxjdXJzZXMsa3JiNCxzcnAsc3NsLHpsaWIuLi4iCisJJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0k JHtLVEFSR0VUOi0kKEApfSAiQ0M9IGdjYyIgIkNDMj0gZ2NjIiBcCisJIkNGTEFHUz0gLU8gLURT VU5PUzQxIC1ESERCVVVDUCAtRE5ER1BXTkFNIC1EQ0tfQ1VSU0VTIC1ERk5GTE9BVCBcCisJLURD S19BVVRIRU5USUNBVElPTiAtRENLX0tFUkJFUk9TIC1ES1JCNCAtRENLX0VOQ1JZUFRJT04gLURD S19ERVMgXAorCS1EQ0tfQ0FTVCAtRENLX1NTTCAtRExJQkRFUyAtRFRDUFNPQ0tFVCAtREJJR0JV Rk9LIC1mdW5zaWduZWQtY2hhciBcCisJLURaTElCIC1EQ0tfU1JQICQoSzRJTkMpICQoU1JQSU5D KSAkKFNTTElOQykgJChLRkxBR1MpIiBcCisJIkxJQlM9ICQoSzRMSUIpICQoU1JQTElCKSAkKFNT TExJQikgXAorCS1sY3Vyc2VzIC1sdGVybWNhcCAtbHJlc29sdiAtbG0gLWxrcmIgLWxrcnlwdG8g XAorCS1sc3JwIC1sc3NsIC1sY3J5cHRvIC1seiIKKworI2FzIGFib3ZlIGJ1dCBjb25maWd1cmVk IGZvciBLZXJiZXJvcyBJViBhbmQgU1JQIGFuZCBaTElCIGVuYWJsZWQgU1NML1RMUworc3Vub3M0 MWdjYytzcnArb3BlbnNzbCt6bGliOgorCUBlY2hvICJDLUtlcm1pdCAkKENLVkVSKSBTdW5PUyA0 LjE6IGdjYyxjdXJzZXMsc3JwLHNzbCx6bGliLi4uIgorCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9 JCR7S1RBUkdFVDotJChAKX0gIkNDPSBnY2MiICJDQzI9IGdjYyIgXAorCSJDRkxBR1M9IC1PIC1E U1VOT1M0MSAtREhEQlVVQ1AgLUROREdQV05BTSAtRENLX0NVUlNFUyAtREZORkxPQVQgXAorCS1E Q0tfQVVUSEVOVElDQVRJT04gLURDS19FTkNSWVBUSU9OIC1EQ0tfREVTIFwKKwktRENLX0NBU1Qg LURDS19TU0wgLURMSUJERVMgLURUQ1BTT0NLRVQgLURCSUdCVUZPSyAtZnVuc2lnbmVkLWNoYXIg XAorCS1EWkxJQiAtRENLX1NSUCAkKFNSUElOQykgJChTU0xJTkMpIFwKKwkkKEtGTEFHUykiIFwK KwkiTElCUz0gJChTUlBMSUIpICQoU1NMTElCKSBcCisJLWxjdXJzZXMgLWx0ZXJtY2FwIC1scmVz b2x2IC1sbSAtbGtyeXB0byAtbHNycCAtbHNzbCAtbGNyeXB0byAtbHogIgorCisjU1VOT1MgNC4x IGFzIHN1bm9zNDEgYWJvdmUsIGJ1dCBhbHNvIHdpdGggY3Vyc2VzIHN1cHBvcnQKK3N1bm9zNDFj OgorCUBlY2hvIEN1cnNlcyBzdXBwb3J0CisJJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBzdW5vczQx IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJLRkxBR1M9JChLRkxBR1MpIC1EQ0tfQ1VS U0VTIC1ERk5GTE9BVCAiIFwKKwkiTElCUz0gLWxjdXJzZXMgLWx0ZXJtY2FwIgorCisjQXMgU3Vu T1MgNC4xLngsIGdjYywgY29uZmlndXJlZCBhcyBJbnRlcm5ldCBLZXJtaXQgU2VydmVyLgorIyAu IE5PTE9DQUwgcmVtb3ZlcyBjYXBhYmlsaXR5IHRvIG1ha2UgY29ubmVjdGlvbnMKKyMgLiBUTkNP REUgYWxsb3dzIHNlcnZlci1zaWRlIFRlbG5ldCBuZWdvdGlhdGlvbi4KKyMgLiB1c2VkIHRvIGlu Y2x1ZGUgLWxwd2VudCwgd2h5PworIyAuIHVzZWQgdG8gaW5jbHVkZSAtTC91c3IvbG9jYWwvbGli IC1sbSwgd2h5Pworc3Vub3M0MWdpa3M6CisJQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIp IGZvciBTdW5PUyA0LjEgd2l0aCBnY2MgZm9yIElLUy4uLgorCSQoTUFLRSkgeGVybWl0IEtUQVJH RVQ9JCR7S1RBUkdFVDotJChAKX0gIkNDPSBnY2MiICJDQzI9IGdjYyIgXAorCSJDRkxBR1M9IC1P IC1EU1VOT1M0MSAtRE5ER1BXTkFNIC1ERk5GTE9BVCBcCisJLUROT0xPQ0FMIC1EVENQU09DS0VU IC1EVE5DT0RFIC1ETk9QVVNIICQoS0ZMQUdTKSIgXAorCSJMSUJTPSAtbG0gLWxyZXNvbHYiCisK KyNTVU5PUyA0LjEgd2l0aCBTdW5MaW5rIFguMjUgc3VwcG9ydAorc3Vub3M0MXgyNToKKwlAZWNo byBTdW5MaW5rIFguMjUgc3VwcG9ydAorCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgd2VybWl0IEtU QVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1M9IC1PIC1EU1VOT1M0MSAtREhEQlVV Q1AgLUROT1VOSUNPREUgLURGTkZMT0FUIC1EU1VOWDI1IFwKKwktRE5PTEVBUk4gJChLRkxBR1Mp IiAiTElCUz0gJChMSUJTKSAtbHJlc29sdiAtbG0iCisKKyNTVU5PUyA0LjEgd2l0aCBTdW5MaW5r IFguMjUgc3VwcG9ydCBhbmQgY3Vyc2VzCitzdW5vczQxeDI1YzoKKwlAZWNobyBTdW5MaW5rIFgu MjUgc3VwcG9ydCArIGN1cnNlcworCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgd2VybWl0IEtUQVJH RVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1M9IC1PIC1EU1VOT1M0MSAtREhEQlVVQ1Ag LUROT1VOSUNPREUgLURGTkZMT0FUIC1EU1VOWDI1IFwKKwktRENLX0NVUlNFUyAtRE5PTEVBUk4g JChLRkxBR1MpIiBcCisJIkxJQlM9ICQoTElCUykgLWxjdXJzZXMgLWx0ZXJtY2FwIC1scmVzb2x2 IC1sbSIKKworI1NVTiB3aXRoIFNvbGFyaXMgMi4wID0gU3VuT1MgNS4wLgorI01vc3RseSB0aGUg c2FtZSBhcyBTeXN0ZW0gViBSNC4gIERvbid0IHVzZSB0aGlzIHdpdGggbGF0ZXIgU29sYXJpcyB2 ZXJzaW9ucy4KK3NvbGFyaXMyMDoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZv ciBTdW4gd2l0aCBTb2xhcmlzIDIuMCBhbmQgY3Vyc2VzLi4uJworCSQoTUFLRSkgeGVybWl0IEtU QVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1MgPSAtTyAtRFNWUjQgLURTT0xBUklT IC1ERElSRU5UIC1ESERCVVVDUCAtRFNURVJNSU9YIFwKKwktRFRDUFNPQ0tFVCAtRENLX0NVUlNF UyAtREZORkxPQVQgLURDS19QT0xMICQoS0ZMQUdTKSIgXAorCSJMSUJTPSAtbHNvY2tldCAtbG5z bCAtbGN1cnNlcyAtbHRlcm1saWIgLWxtIiAiTE5LRkxBR1MgPSAtcyIKKworI1NVTiB3aXRoIFNv bGFyaXMgMi4wLgorI0FzIGFib3ZlLCBidXQgYnVpbHQgd2l0aCB0aGUgZ2NjIGNvbXBpbGVyIGZy b20gdGhlIEN5Z251cyBDRC1ST00uCitzb2xhcmlzMjBnOgorCUBlY2hvICdNYWtpbmcgQy1LZXJt aXQgJChDS1ZFUikgZm9yIFN1biBTb2xhcmlzIDIuMCwgZ2NjLCBhbmQgY3Vyc2VzLi4nCisJJChN QUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUyA9IC1PIC1E U1ZSNCAtRFNPTEFSSVMgLURESVJFTlQgLURIREJVVUNQIC1EU1RFUk1JT1ggXAorCS1EVENQU09D S0VUIC1EQ0tfQ1VSU0VTIC1EQ0tfUE9MTCAtREZORkxPQVQgJChLRkxBR1MpIiBcCisJIkxJQlM9 IC1sc29ja2V0IC1sbnNsIC1sY3Vyc2VzIC1sdGVybWxpYiAtbG0iICJMTktGTEFHUyA9IC1zIiBc CisJQ0M9L29wdC9jeWdudXMtc29sMi0xLjEvYmluL2djYyBDQzI9L29wdC9jeWdudXMtc29sMi0x LjEvYmluL2djYworCisjU3VuT1MgNS4xID0gU29sYXJpcyAyLjEuCisjTk9URTogQSBDIGNvbXBp bGVyIGlzIG5vIGxvbmdlciBidW5kbGVkIHdpdGggU3VuT1MgNS4xLCBzbyB0byBjb21waWxlIEMK KyNwcm9ncmFtcywgeW91IG1pZ2h0IGhhdmUgdG8gY2hhbmdlIHlvdXIgUEFUSCB0byBpbmNsdWRl IHRoZSBkaXJlY3RvcnkKKyMvdXNyL2Njcy9iaW4gQUZURVIgdGhlIGRpcmVjdG9yeSBjb250YWlu aW5nIHRoZSBjb21waWxlci4gIFN1blBSTyBDIGlzCisjaW5zdGFsbGVkIGJ5IGRlZmF1bHQgaW4g L29wdC9TVU5Xc3Byby9iaW4uICBTbyBhIHNhbXBsZSBQQVRIIG1pZ2h0IGJlOgorIworIyAvdXNy L2xvY2FsL2JpbjovdXNyL2Jpbjovb3B0L1NVTldzcHJvL2JpbjovdXNyL2Njcy9iaW46XAorIyAv dXNyL3VjYjovdXNyL3NiaW46L3NiaW46LgorIworIyBvcjoKKyMKKyMgL3Vzci9vcGVud2luL2Jp bjovZXhwb3J0L2hvbWUvU1VOV3Nwcm8vYmluOi91c3IvY2NzL2JpbjovdXNyL3NiaW46L3Vzci9i aW4uCisjCisjTk9URSAyOiBDb21waWxhdGlvbiB3aXRoIHRoZSBBcG9nZWUgQyBjb21waWxlciAo YXBjYykgbWlnaHQgbm90IHdvcmssCisjYmVjYXVzZSBpdCByZWZ1c2VzIHRvIGFsbG93ICItVXN1 biIuICBSZXBvcnRlZGx5LCBuZXdlciByZWxlYXNlcyBvZiBhcGNjCisjKHN1Y2ggYXMgMS4yLjE3 KSB3b3JrIE9LLCB1c2U6ICJtYWtlIC1lIHN1bm9zNTEgQ0M9YXBjYyBDQzI9YXBjYyIuCitzb2xh cmlzMjE6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgU3VuT1MgNS54Li4u LicKKwkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdT ID0gLU8gLVVzdW4gLURTVlI0IC1EU09MQVJJUyAtRERJUkVOVCAtREhEQlVVQ1AgLURGTkZMT0FU IFwKKwktRFNFTEVDVCAtRE5PREVCVUcgLURTVEVSTUlPWCAkKEtGTEFHUykiICJMSUJTID0gLWxt IiAiTE5LRkxBR1MgPSAtcyIKKworI1NvbGFyaXMgMi4wIC0gMi40LCBTdW5Qcm8gY29tcGlsZXIs IGluY2x1ZGVzIGN1cnNlcyBhbmQgVENQL0lQLgorI1doZW4gdXNpbmcgU1VOV3Nwcm8gQ0MgMi4w LjEgdW5kZXIgU29sYXJpcyAyLjMsIGJlIHN1cmUgYWxsIGNjIHBhdGNoZXMKKyNhcmUgYXBwbGll ZCwgb3RoZXJ3aXNlIGNvcnJ1cHQgb3IgdHJ1bmNhdGVkIG9iamVjdCBmaWxlcyBjYW4gcmVzdWx0 LgorI1RvIGJ1aWxkLCBzZXQgeW91ciBQQVRIIGFzIGZvbGxvd3M6CisjICAvdXNyL2xvY2FsL2Jp bjovdXNyL2Jpbjovb3B0L1NVTldzcHJvL2JpbjovdXNyL2Njcy9iaW46XAorIyAgL3Vzci91Y2I6 L3Vzci9zYmluOi9zYmluOi4KKyMgb3IgKGRlcGVuZGluZyBvbiB3aGVyZSB0aGUgY29tcGlsZXIg aGFzIGJlZW4gaW5zdGFsbGVkKToKKyMgIC91c3Ivb3Blbndpbi9iaW46L2V4cG9ydC9ob21lL1NV TldzcHJvL2JpbjovdXNyL2Njcy9iaW46L3Vzci9zYmluOi91c3IvYmluLgorI0ZvciBhZGRpdGlv bmFsIG9wdGltaXphdGlvbiB0cnkgdXNpbmcgIi1mYXN0IC14TzQgLXhkZXBlbmQiLgorc29sYXJp czJ4OgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFNvbGFyaXMgMi54IHdp dGggU3VuUHJvIGNjLi4uJworCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChA KX0gXAorCSJDRkxBR1MgPSAtTyAtVXN1biAtaSAtRFNWUjQgLURESVJFTlQgLURTT0xBUklTIC1E SERCVVVDUCAtREZORkxPQVQgXAorCS1EU0VMRUNUIC1EQ0tfQ1VSU0VTIC1EQ0tfTkVXVEVSTSAt RFNURVJNSU9YIC1EVENQU09DS0VUICQoS0ZMQUdTKSIgXAorCSJMTktGTEFHUyA9IC1zIiAiTElC Uz0gLWx0ZXJtbGliIC1sc29ja2V0IC1sbnNsIC1sbSAtbHJlc29sdiIKKworI2FzIGFib3ZlIGJ1 dCBjb25maWd1cmVkIGZvciBLZXJiZXJvcyBJVgorc29sYXJpczJ4K2tyYjQ6CisJQGVjaG8gJ01h a2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgU29sYXJpcyAyLngsIFN1blBybyBjYywga3JiNC4u LicKKwkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdT ID0gLU8gLVVzdW4gLWkgLURTVlI0IC1ERElSRU5UIC1EU09MQVJJUyAtREhEQlVVQ1AgLURGTkZM T0FUIFwKKwktRFNFTEVDVCAtRENLX0NVUlNFUyAtRENLX05FV1RFUk0gLURTVEVSTUlPWCAtRFRD UFNPQ0tFVCAgXAorCS1EQ0tfQVVUSEVOVElDQVRJT04gLURDS19LRVJCRVJPUyAgLURLUkI0IFwK KwktRENLX0VOQ1JZUFRJT04gLURDS19ERVMgLURDS19DQVNUICQoSzRJTkMpICQoS0ZMQUdTKSIg XAorCSJMTktGTEFHUyA9IC1zIiBcCisJIkxJQlM9ICQoSzRMSUIpIC1sdGVybWxpYiAtbHNvY2tl dCAtbG5zbCAtbG0gLWxyZXNvbHYgLWxrcmIgLWxkZXMiCisKKyNDLUtlcm1pdCBmb3IgU29sYXJp cyAyLjAtMi40IGNvbXBpbGVkIHdpdGggZ2NjLCBpbmNsdWRlcyBjdXJzZXMgYW5kIFRDUC9JUC4K KyNDaGFuZ2UgLU8yIHRvIC1PIGlmIC1PMiBnaXZlcyB0cm91YmxlLgorI1JlbW92ZSAtVXN1biBp ZiBpdCBjYXVzZXMgdHJvdWJsZS4KKyNZb3VyIFBBVEggc2hvdWxkIHN0YXJ0IHdpdGggc29tZXRo aW5nIGxpa2U6CisjICAvdXNyL2xvY2FsL2dudS9iaW46L3Vzci9jY3MvYmluOgorI1Byb2R1Y2Vz IGEgaHVnZSBleGVjdXRhYmxlIC0tIHN0cmlwIHdpdGggL3Vzci9jY3MvYmluL3N0cmlwIChub3Qg R251IHN0cmlwKS4KKyNBbHNvIGRvbid0IGFkZCAiTE5LRkxBR1MgPSAtcyIgLS0gc3RyaXAgbWFu dWFsbHkgaW5zdGVhZC4KKyNBbHNvIG5vdGU6IHRoaXMgY2FuIE5PVCBiZSBsaW5rZWQgc3RhdGlj YWxseSAtIFN1biBtYWtlcyBpdCBpbXBvc3NpYmxlLgorI0FuZCBmb3IgU29sYXJpcyAyLjQsIHlv dSBtaWdodCBoYXZlIHRvIHJlcGxhY2U6CisjIC91c3IvbG9jYWwvbGliL2djYy1saWIvaTQ4Ni1z dW4tc29sYXJpczIvMi40LjUvaW5jbHVkZS9zeXMvc3RhdC5oCisjd2l0aCAvdXNyL2luY2x1ZGUv c3lzL3N0YXQuaC4KK3NvbGFyaXMyeGc6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVS KSBmb3IgU29sYXJpcyAyLnggd2l0aCBHTlUgY2MuLi4nCisJQGVjaG8gJ1BsZWFzZSByZWFkIHRo ZSBjb21tZW50cyB0aGF0IGFjY29tcGFueSB0aGUgc29sYXJpczJ4ZyB0YXJnZXQuJworCSQoTUFL RSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gQ0M9Z2NjIENDMj1nY2MgXAorCSJD RkxBR1MgPSAtZyAtTyAtVXN1biAtRFNWUjQgLURTT0xBUklTIC1EU1RFUk1JT1ggLURTRUxFQ1Qg LURGTkZMT0FUIFwKKwktRENLX0NVUlNFUyAtRENLX05FV1RFUk0gLURESVJFTlQgLURIREJVVUNQ IC1EVENQU09DS0VUICQoS0ZMQUdTKSIgXAorCSJMSUJTPSAtbHRlcm1saWIgLWxzb2NrZXQgLWxu c2wgLWxtIC1scmVzb2x2ICQoTElCUykiCisKKyNkaXR0byBidXQgbm8gY3Vyc2VzLgorc29sYXJp czJ4Z25jOgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFNvbGFyaXMgMi54 IHdpdGggR05VIGNjLi4uJworCUBlY2hvICdQbGVhc2UgcmVhZCB0aGUgY29tbWVudHMgdGhhdCBh Y2NvbXBhbnkgdGhlIHNvbGFyaXMyeGcgdGFyZ2V0LicKKwkkKE1BS0UpIHhlcm1pdCBLVEFSR0VU PSQke0tUQVJHRVQ6LSQoQCl9IENDPWdjYyBDQzI9Z2NjIFwKKwkiQ0ZMQUdTID0gLWcgLU8gLVVz dW4gLURTVlI0IC1EU09MQVJJUyAtRFNURVJNSU9YIC1EU0VMRUNUIC1ERk5GTE9BVCBcCisJLURE SVJFTlQgLURIREJVVUNQIC1EVENQU09DS0VUICQoS0ZMQUdTKSIgXAorCSJMSUJTPSAtbHNvY2tl dCAtbG5zbCAtbG0gLWxyZXNvbHYgJChMSUJTKSIKKworI2FuZCB3aXRoIEtlcmJlcm9zIElWCitz b2xhcmlzMnhnK2tyYjQ6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgU29s YXJpcyAyLnggd2l0aCBHTlUgY2MsIGtyYjQuLi4nCisJQGVjaG8gJ1BsZWFzZSByZWFkIHRoZSBj b21tZW50cyB0aGF0IGFjY29tcGFueSB0aGUgc29sYXJpczJ4ZyB0YXJnZXQuJworCSQoTUFLRSkg eGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gQ0M9Z2NjIENDMj1nY2MgXAorCSJDRkxB R1MgPSAtZyAtTyAtVXN1biAtRFNWUjQgLURTT0xBUklTIC1EU1RFUk1JT1ggLURTRUxFQ1QgLURG TkZMT0FUIFwKKwktRENLX0NVUlNFUyAtRENLX05FV1RFUk0gLURESVJFTlQgLURIREJVVUNQIC1E VENQU09DS0VUIFwKKwktRENLX0FVVEhFTlRJQ0FUSU9OIC1EQ0tfS0VSQkVST1MgIC1ES1JCNCAt RENLX0VOQ1JZUFRJT04gXAorCS1EQ0tfREVTIC1EQ0tfQ0FTVCAtREJJR0JVRk9LICQoSzRJTkMp ICQoS0ZMQUdTKSIgXAorCSJMSUJTPSAkKEs0TElCKSAtbHRlcm1saWIgLWxzb2NrZXQgLWxuc2wg LWxtIC1scmVzb2x2IC1sa3JiIC1sZGVzIFwKKwkkKExJQlMpIgorCisjYW5kIHdpdGggT3BlblNT TCxaTElCLFBBTSxTSEFET1cKK3NvbGFyaXMyeGcrb3BlbnNzbCt6bGliK3BhbStzaGFkb3c6CisJ QGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgU29sYXJpcyAyLnggd2l0aCBnY2Ms IE9wZW5TU0wuLi4nCisJQGVjaG8gJ1BsZWFzZSByZWFkIHRoZSBjb21tZW50cyB0aGF0IGFjY29t cGFueSB0aGUgc29sYXJpczJ4ZyB0YXJnZXQuJworCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7 S1RBUkdFVDotJChAKX0gQ0M9Z2NjIENDMj1nY2MgXAorCSJDRkxBR1MgPSAtZyAtTyAtVXN1biAt RFNWUjQgLURTT0xBUklTIC1EU1RFUk1JT1ggLURTRUxFQ1QgLURGTkZMT0FUIFwKKwktRENLX0NV UlNFUyAtRENLX05FV1RFUk0gLURESVJFTlQgLURIREJVVUNQIC1EVENQU09DS0VUIFwKKwktRENL X0FVVEhFTlRJQ0FUSU9OIC1EQ0tfU1NMIC1EQ0tfUEFNIC1EQ0tfU0hBRE9XICAtRFpMSUIgXAor CS1EQklHQlVGT0sgJChTU0xJTkMpICQoS0ZMQUdTKSIgXAorCSJMSUJTPSAkKFNTTExJQikgLWx0 ZXJtbGliIFwKKwktbHNvY2tldCAtbG5zbCAtbG0gLWxyZXNvbHYgLWxzc2wgLWxjcnlwdG8gLWxw YW0gLWx6IgorCisjRGl0dG8gYnV0IHdpdGggR0NDIDMuMSBpbiB3aGljaCB5b3UgaGF2ZSB0byBz cGVjaWZ5IDMyLWJpdCB3aXRoIC1tMzIuCisjSW4gU29sYXJpcyA5IChhbmQgbWF5YmUgOCkgeW91 J2xsIGFsc28gbmVlZCBzcGVjaWZpeSB0aGUgTGlicmFyeSBwYXRoLgorI1JlcG9ydGVkbHkgdGhp cyBjYW4gYmUgZG9uZSBoZXJlLCBidXQgb25seSB3aXRoOgorIyBjcmxlIC1sIC91c3IvbGliOi91 c3IvbG9jYWwvc3NsL2xpYgorI3ByaW9yIHRvIGJ1aWxkaW5nLiAgTm90ZTogNjQtYml0IG5vdCB0 ZXN0ZWQgd2l0aCBTU0wuCisjRm9yIG5vLWNyeXB0byA2NC1iaXQgYnVpbGRzIHNlZSB0aGUgc29s YXJpczlnNjQgdGFyZ2V0Lgorc29sYXJpczJ4ZzMyK29wZW5zc2wremxpYitwYW0rc2hhZG93Ogor CUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFNvbGFyaXMgMi54IHdpdGggZ2Nj LCBPcGVuU1NMLi4uJworCUBlY2hvICdQbGVhc2UgcmVhZCB0aGUgY29tbWVudHMgdGhhdCBhY2Nv bXBhbnkgdGhlIHNvbGFyaXMyeGcgdGFyZ2V0LicKKwkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQk e0tUQVJHRVQ6LSQoQCl9IENDPSJnY2MgLW0zMiIgQ0MyPSJnY2MgLW0zMiIgXAorCSJDRkxBR1Mg PSAtZyAtTyAtVXN1biAtRFNWUjQgLURTT0xBUklTIC1EU1RFUk1JT1ggLURTRUxFQ1QgLURGTkZM T0FUIFwKKwktRENLX0NVUlNFUyAtRENLX05FV1RFUk0gLURESVJFTlQgLURIREJVVUNQIC1EVENQ U09DS0VUIFwKKwktRENLX0FVVEhFTlRJQ0FUSU9OIC1EQ0tfU1NMIC1EQ0tfUEFNIC1EQ0tfU0hB RE9XICAtRFpMSUIgXAorCS1EQklHQlVGT0sgJChTU0xJTkMpICQoS0ZMQUdTKSIgXAorCSJMSUJT PSAkKFNTTExJQikgLWx0ZXJtbGliIFwKKwktbHNvY2tldCAtbG5zbCAtbG0gLWxyZXNvbHYgLWxz c2wgLWxjcnlwdG8gLWxwYW0gLWx6IgorCisjYW5kIHdpdGggS3JiNSxLcmI0LE9wZW5TU0wsU0hB RE9XCitzb2xhcmlzMnhnK2tyYjUra3JiNCtvcGVuc3NsK3NoYWRvdzoKKwlAZWNobyAnTWFraW5n IEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTb2xhcmlzIDIueCB3aXRoIGdjYyxrNSxrNCxzc2wuLi4n CisJQGVjaG8gJ1BsZWFzZSByZWFkIHRoZSBjb21tZW50cyB0aGF0IGFjY29tcGFueSB0aGUgc29s YXJpczJ4ZyB0YXJnZXQuJworCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChA KX0gQ0M9Z2NjIENDMj1nY2MgXAorCSJDRkxBR1MgPSAtTyAtVXN1biAtRFNWUjQgLURTT0xBUklT IC1EU1RFUk1JT1ggLURTRUxFQ1QgLURGTkZMT0FUIFwKKwktRENLX0NVUlNFUyAtRENLX05FV1RF Uk0gLURESVJFTlQgLURIREJVVUNQIC1EVENQU09DS0VUIFwKKwktRENLX0FVVEhFTlRJQ0FUSU9O IC1EQ0tfS0VSQkVST1MgLURLUkI1IC1ES1JCNCAtREtSQjUyNCBcCisJLURDS19FTkNSWVBUSU9O IC1EQ0tfU1NMIC1EQ0tfREVTIC1EQ0tfQ0FTVCAtREJJR0JVRk9LIFwKKwkkKEs1SU5DKSAkKEs1 SU5DKS9rcmI1ICQoU1NMSU5DKSAkKEtGTEFHUykiIFwKKwkiTElCUz0gJChLNUxJQikgJChTU0xM SUIpIC1sdGVybWxpYiAtbHNvY2tldCAtbG5zbCAtbG0gLWxyZXNvbHYgXAorCS1sa3JiNCAtbHNz bCAtbGNyeXB0byAtbGdzc2FwaV9rcmI1IC1sa3JiNSAtbGNvbV9lcnIgLWxrNWNyeXB0byBcCisJ LWxkZXMgJChMSUJTKSIKKworI2FuZCB3aXRoIE9wZW5TU0wKK3NvbGFyaXMyeGcrb3BlbnNzbCtw YW0rc2hhZG93OgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFNvbGFyaXMg Mi54IHdpdGggZ2NjLCBPcGVuU1NMLi4uJworCUBlY2hvICdQbGVhc2UgcmVhZCB0aGUgY29tbWVu dHMgdGhhdCBhY2NvbXBhbnkgdGhlIHNvbGFyaXMyeGcgdGFyZ2V0LicKKwkkKE1BS0UpIHhlcm1p dCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IENDPWdjYyBDQzI9Z2NjIFwKKwkiQ0ZMQUdTID0g LWcgLU8gLVVzdW4gLURTVlI0IC1EU09MQVJJUyAtRFNURVJNSU9YIC1EU0VMRUNUIC1ERk5GTE9B VCBcCisJLURDS19DVVJTRVMgLURDS19ORVdURVJNIC1ERElSRU5UIC1ESERCVVVDUCAtRFRDUFNP Q0tFVCBcCisJLURDS19BVVRIRU5USUNBVElPTiAtRENLX1NTTCAtRENLX1BBTSAtRENLX1NIQURP VyBcCisJLURCSUdCVUZPSyAkKFNTTElOQykgJChLRkxBR1MpIiBcCisJIkxJQlM9ICQoU1NMTElC KSAtbHRlcm1saWIgXAorCS1sc29ja2V0IC1sbnNsIC1sbSAtbHJlc29sdiAtbHNzbCAtbGNyeXB0 byAtbHBhbSIKKworc29sYXJpczJ4ZytvcGVuc3NsK3psaWIrc3JwK3BhbStzaGFkb3c6CQorCUBl Y2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFNvbGFyaXMgMi54IHdpdGggZ2NjLCBP cGVuU1NMLi4uJworCUBlY2hvICdQbGVhc2UgcmVhZCB0aGUgY29tbWVudHMgdGhhdCBhY2NvbXBh bnkgdGhlIHNvbGFyaXMyeGcgdGFyZ2V0LicKKwkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tU QVJHRVQ6LSQoQCl9IENDPWdjYyBDQzI9Z2NjIFwKKwkiQ0ZMQUdTID0gLWcgLU8gLVVzdW4gLURT VlI0IC1EU09MQVJJUyAtRFNURVJNSU9YIC1EU0VMRUNUIC1ERk5GTE9BVCBcCisJLURDS19DVVJT RVMgLURDS19ORVdURVJNIC1ERElSRU5UIC1ESERCVVVDUCAtRFRDUFNPQ0tFVCAtREJJR0JVRk9L IFwKKwktRENLX0FVVEhFTlRJQ0FUSU9OIC1EQ0tfRU5DUllQVElPTiAtRENLX0RFUyAtRExJQkRF UyAtRENLX0NBU1QgXAorCS1EQ0tfU1NMIC1EQ0tfUEFNIC1EQ0tfU0hBRE9XIC1EWkxJQiAtRENL X1NSUCAkKFNTTElOQykgJChLRkxBR1MpIiBcCisJIkxJQlM9ICQoU1NMTElCKSAtbHRlcm1saWIg LWxzb2NrZXQgLWxuc2wgLWxtIC1scmVzb2x2IC1sc3JwIC1sc3NsIFwKKwktbGRlcyAtbGtyeXB0 byAtbGNyeXB0byAtbHBhbSAtbHoiCisKK3NvbGFyaXMyMmc6CisJJChNQUtFKSAiTUFLRT0kKE1B S0UpIiAiS0ZMQUdTPS1EUE9TSVhfQ1JUU0NUUyAkKEtGTEFHUykiIHNvbGFyaXMyeGcgXAorCUtU QVJHRVQ9JCR7S1RBUkdFVDotJChAKX0KKworc29sYXJpczIzZzoKKwkkKE1BS0UpICJNQUtFPSQo TUFLRSkiICJLRkxBR1M9LURQT1NJWF9DUlRTQ1RTICQoS0ZMQUdTKSIgc29sYXJpczJ4ZyBcCisJ S1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfQorCisjU29sYXJpcyAyLjQgYnVpbHQgd2l0aCBnY2MK K3NvbGFyaXMyNGc6CisJJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBLVEFSR0VUPSQke0tUQVJHRVQ6 LSQoQCl9IFwKKwlzb2xhcmlzMnhnICJLRkxBR1M9LURTT0xBUklTMjQgLURQT1NJWF9DUlRTQ1RT ICQoS0ZMQUdTKSIKKworI1NvbGFyaXMgMi4wLTIuMywgU3VuUHJvIGNvbXBpbGVyLCB3aXRoIFN1 bkxpbmsgWC4yNSBzdXBwb3J0LgorI1RoaXMgd2lsbCBvbmx5IHJ1biBpZiB1c2VyIGhhcyAvb3B0 L1NVTldjb25uL2xpYi9saWJzb2NreDI1LnNvLjEKKyNleGlzdHMgYW5kIGNhbiBiZSBkeW5hbWlj YWxseSBsaW5rZWQuCisjTk9URTogRG8gbm90IGNoYW5nZSB0YXJnZXQgdG8geGVybWl0IC0tIGl0 IGRvZXNuJ3Qgc3VwcG9ydCBYLjI1Lgorc29sYXJpczJ4MjU6CisJQGVjaG8gJ01ha2luZyBDLUtl cm1pdCAkKENLVkVSKSBmb3IgU29sYXJpcyAyLngrWC4yNSB3aXRoIFN1blBybyBjYy4uLicKKwkk KE1BS0UpIHdlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTID0gLU8g LWkgLVVzdW4gLURTVlI0IC1EU09MQVJJUyAtRERJUkVOVCBcCisJLURTVU5YMjUgLURUQ1BTT0NL RVQgLURIREJVVUNQIC1ERk5GTE9BVCAtRE5PTEVBUk4gXAorCS1EU0VMRUNUIC1EQ0tfQ1VSU0VT IC1EQ0tfTkVXVEVSTSAtRFNURVJNSU9YICQoS0ZMQUdTKSIgXAorCSJMTktGTEFHUyA9IC1zIiBc CisJIkxJQlM9IC1sdGVybWxpYiAtTC9vcHQvU1VOV2Nvbm4vbGliIC1SL29wdC9TVU5XY29ubi9s aWIgXAorCS1sc29ja3gyNSAtbHNvY2tldCAtbG5zbCAtbG0gLWxyZXNvbHYiCisKKyNTb2xhcmlz IDIuMC0yLjQsIGdjYywgU3VuTGluayBYLjI1IGFkZGVkLgorI05PVEU6IENhbid0IHVzZSB4ZXJt aXQgdGFyZ2V0IHdpdGggWC4yNS4KK3NvbGFyaXMyeGd4MjU6CisJQGVjaG8gJ01ha2luZyBDLUtl cm1pdCAkKENLVkVSKSBmb3IgU29sYXJpcyAyLnggKyBYLjI1IHdpdGggR05VIGNjLi4uJworCUBl Y2hvICdQbGVhc2UgcmVhZCB0aGUgY29tbWVudHMgdGhhdCBhY2NvbXBhbnkgdGhlIHNvbGFyaXMy eGcgZW50cnkuJworCSQoTUFLRSkgd2VybWl0IENDPWdjYyBDQzI9Z2NjIEtUQVJHRVQ9JCR7S1RB UkdFVDotJChAKX0gXAorCSJDRkxBR1MgPSAtZyAtTyAtVXN1biAtRFNWUjQgLURTT0xBUklTIC1E U1RFUk1JT1ggLURTRUxFQ1QgLURTVU5YMjUgXAorCS1EQ0tfQ1VSU0VTIC1EQ0tfTkVXVEVSTSAt RERJUkVOVCAtREhEQlVVQ1AgLURUQ1BTT0NLRVQgLURGTkZMT0FUIFwKKwktRE5PTEVBUk4gJChL RkxBR1MpIiBcCisJIkxJQlM9IC1sdGVybWxpYiAtbG0gLUwvb3B0L1NVTldjb25uL2xpYiAtUi9v cHQvU1VOV2Nvbm4vbGliIFwKKwktbHNvY2t4MjUgLWxzb2NrZXQgLWxuc2wiCisKKyNTb2xhcmlz IDIuNCwgU3VuUHJvIGNvbXBpbGVyLCB3aXRoIFN1bkxpbmsgWC4yNSBzdXBwb3J0LgorI1RoaXMg d2lsbCBvbmx5IHJ1biBpZiB1c2VyIGhhcyAvb3B0L1NVTldjb25uL2xpYi9saWJzb2NreDI1LnNv LjEKKyNleGlzdHMgYW5kIGNhbiBiZSBkeW5hbWljYWxseSBsaW5rZWQuCitzb2xhcmlzMjR4MjU6 CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgU29sYXJpcyAyLjQrWC4yNSB3 aXRoIFN1blBybyBjYy4uLicKKwkkKE1BS0UpIHdlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQo QCl9IFwKKwkiQ0ZMQUdTID0gLU8gLWkgLVVzdW4gLURTVlI0IC1EU09MQVJJUyAtRFNPTEFSSVMy NCAtRERJUkVOVCAtRE5PTEVBUk4gXAorCS1EU1VOWDI1IC1EVENQU09DS0VUIC1ESERCVVVDUCAt REZORkxPQVQgLURQT1NJWF9DUlRTQ1RTIFwKKwktRFNFTEVDVCAtRENLX0NVUlNFUyAtRENLX05F V1RFUk0gLURTVEVSTUlPWCAkKEtGTEFHUykiIFwKKwkiTE5LRkxBR1MgPSAtcyIgXAorCSJMSUJT PSAtbHRlcm1saWIgLUwvb3B0L1NVTldjb25uL2xpYiAtUi9vcHQvU1VOV2Nvbm4vbGliIFwKKwkt bHNvY2t4MjUgLWxzb2NrZXQgLWxuc2wgLWxtIC1scmVzb2x2IgorCisjU29sYXJpcyAyLjUsIFN1 blBybyBjb21waWxlciwgd2l0aCBTdW5MaW5rIFguMjUgc3VwcG9ydC4KK3NvbGFyaXMyNXgyNToK KwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTb2xhcmlzIDIuNStYLjI1IHdp dGggU3VuUHJvIGNjLi4uJworCSQoTUFLRSkgd2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChA KX0gXAorCSJDRkxBR1MgPSAtTyAtaSAtVXN1biAtRFNWUjQgLURTT0xBUklTMjUgLURESVJFTlQg LURTVU5YMjUgXAorCS1EVENQU09DS0VUIC1ESERCVVVDUCAtRFNFTEVDVCAtRENLX0NVUlNFUyBc CisJLURDS19ORVdURVJNIC1EU1RFUk1JT1ggLURGTkZMT0FUIC1EUE9TSVhfQ1JUU0NUUyAtRE5P TEVBUk4gXAorCS1JL29wdC9TVU5XY29ubi9pbmNsdWRlICQoS0ZMQUdTKSIgXAorCSJMSUJTPSAt bHRlcm1saWIgLUwvb3B0L1NVTldjb25uL2xpYiAtUi9vcHQvU1VOV2Nvbm4vbGliIFwKKwktbHNv Y2t4MjUgLWxzb2NrZXQgLWxuc2wgLWxtIC1scmVzb2x2IgorCitzb2xhcmlzMjM6CisJJChNQUtF KSAiTUFLRT0kKE1BS0UpIiBzb2xhcmlzMnggS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJ IktGTEFHUz0kKEtGTEFHUykiCisKK3NvbGFyaXMyNDoKKwkkKE1BS0UpICJNQUtFPSQoTUFLRSki IHNvbGFyaXMyeCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiS0ZMQUdTPS1EU09MQVJJ UzI0IC1EUE9TSVhfQ1JUU0NUUyAkKEtGTEFHUykiCisKKyMgdGVtcGxhdGUgZm9yIFNvbGFyaXMg Mi41IGFuZCBhYm92ZS4KK3NvbGFyaXMyNXg6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENL VkVSKSBmb3IgU29sYXJpcyAyLnggd2l0aCBTdW5Qcm8gY2MuLi4nCisJJChNQUtFKSB4ZXJtaXQg S1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUyA9IC1ERk5GTE9BVCAtTyAtVXN1 biAtaSAkKEtGTEFHUykiIFwKKwkiTE5LRkxBR1MgPSAtcyIgXAorCSJMSUJTPSAtbHRlcm1saWIg LWxzb2NrZXQgLWxuc2wgLWxtIC1scmVzb2x2ICQoTElCUykiCisKKyNTb2xhcmlzIDIuNSwgU3Vu UHJvIGNvbXBpbGVyLCBjdXJzZXMsIFRDUC9JUAorc29sYXJpczI1OgorCSQoTUFLRSkgIk1BS0U9 JChNQUtFKSIgc29sYXJpczI1eCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiS0ZMQUdT PS1EU09MQVJJUzI1ICQoS0ZMQUdTKSIKKworI1NvbGFyaXMgMi41LCBTdW5Qcm8gY29tcGlsZXIs IGN1cnNlcywgVENQL0lQLCBLZXJiZXJvcyBJVgorc29sYXJpczI1K2tyYjQ6CisJJChNQUtFKSAi TUFLRT0kKE1BS0UpIiBzb2xhcmlzMjV4K2tyYjQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBc CisJIktGTEFHUz0tRFNPTEFSSVMyNSAkKEtGTEFHUykiCisKKyNTb2xhcmlzIDIuNSBidWlsdCB3 aXRoIGdjYworc29sYXJpczI1ZzoKKwkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIHNvbGFyaXMyeGcg S1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIktGTEFHUz0tZnVuc2lnbmVkLWNoYXIgLURT T0xBUklTMjUgJChLRkxBR1MpIgorCisjU29sYXJpcyAyLjUgYnVpbHQgd2l0aCBnY2MgYW5kIEtl cmJlcm9zIElWCitzb2xhcmlzMjVnK2tyYjQ6CisJJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBzb2xh cmlzMnhnK2tyYjQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIktGTEFHUz0tZnVuc2ln bmVkLWNoYXIgLURTT0xBUklTMjUgJChLRkxBR1MpIgorCisjU29sYXJpcyAyLjUgYnVpbHQgd2l0 aCBnY2MgYW5kIEtlcmJlcm9zIFYvSVYsIFNTTCwgLi4uCitzb2xhcmlzMjVnK2tyYjUra3JiNCtv cGVuc3NsK3NoYWRvdzoKKwkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIHNvbGFyaXMyeGcra3JiNStr cmI0K29wZW5zc2wrc2hhZG93IFwKKwlLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiS0ZM QUdTPS1mdW5zaWduZWQtY2hhciAtRFNPTEFSSVMyNSAkKEtGTEFHUykiCisKKyNTb2xhcmlzIDIu NSwgZ2NjLCBTdW5MaW5rIFguMjUgYWRkZWQuCitzb2xhcmlzMjVneDI1OgorCSQoTUFLRSkgIk1B S0U9JChNQUtFKSIgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBzb2xhcmlzMnhneDI1IFwKKwki S0ZMQUdTPS1EU09MQVJJUzI1ICQoS0ZMQUdTKSIKKworI1NvbGFyaXMgMi42LCBnY2MsIFN1bkxp bmsgWC4yNSBhZGRlZC4KK3NvbGFyaXMyNmd4MjU6CisJJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBL VEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IHNvbGFyaXMyeGd4MjUgXAorCSJLRkxBR1M9LURTT0xB UklTMjYgLURDS19QQU0gLURDS19TSEFET1cgJChLRkxBR1MpIiBcCisJIkxJQlM9IC1scGFtIgor CisjU29sYXJpcyAyLjYsIFN1blBybyBjb21waWxlciwgY3Vyc2VzLCBUQ1AvSVAKK3NvbGFyaXMy NjoKKwkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIHNvbGFyaXMyNXggS1RBUkdFVD0kJHtLVEFSR0VU Oi0kKEApfSBcCisJIktGTEFHUz0tRFNPTEFSSVMyNiAtRENLX1BBTSAtRENLX1NIQURPVyAkKEtG TEFHUykiIFwKKwkiTElCUz0gLWxwYW0iCisKKyNTb2xhcmlzIDIuNiB3aXRoIGdjYworc29sYXJp czI2ZzoKKwkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0g c29sYXJpczJ4ZyBcCisJIktGTEFHUz0gLURTT0xBUklTMjYgLURDS19QQU0gLURDS19TSEFET1cg JChLRkxBR1MpIiBcCisJIkxJQlMgPSAtbHBhbSIKKworI1NvbGFyaXMgMi42IHdpdGggZ2NjIGFu ZCBTU0wKK3NvbGFyaXMyNmcrb3BlbnNzbDoKKwkkKE1BS0UpICJNQUtFPSQoTUFLRSkiICBzb2xh cmlzMnhnK29wZW5zc2wrcGFtK3NoYWRvdyBcCisJS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSAi S0ZMQUdTPSAtRFNPTEFSSVMyNiAkKEtGTEFHUykiCisKKyNTb2xhcmlzIDIuNiB3aXRoIGdjYywg bm8gY3Vyc2VzIChlLmcuIGJlY2F1c2UgbGlidGVybWxpYiBpcyBtaXNzaW5nKS4KK3NvbGFyaXMy NmduYzoKKwkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0g c29sYXJpczJ4Z25jIFwKKwkiS0ZMQUdTPSAtRFNPTEFSSVMyNiAtRENLX1BBTSAtRENLX1NIQURP VyAkKEtGTEFHUykiIFwKKwkiTElCUz0gLWxwYW0iCisKKyNTb2xhcmlzIDIuNiwgU3VuUHJvIGNv bXBpbGVyLCB3aXRoIFN1bkxpbmsgWC4yNSBzdXBwb3J0Lgorc29sYXJpczI2eDI1OgorCUBlY2hv ICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFNvbGFyaXMgMi42K1guMjUgd2l0aCBTdW5Q cm8gY2MuLi4nCisJJChNQUtFKSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJ IkNGTEFHUyA9IC1PIC1pIC1Vc3VuIC1EU1ZSNCAtRFNPTEFSSVMyNiAtRERJUkVOVCAtRFNVTlgy NSBcCisJLURUQ1BTT0NLRVQgLURIREJVVUNQIC1EU0VMRUNUIC1EQ0tfQ1VSU0VTIC1EQ0tfUEFN IC1EQ0tfU0hBRE9XIFwKKwktRENLX05FV1RFUk0gLURTVEVSTUlPWCAtREZORkxPQVQgLURQT1NJ WF9DUlRTQ1RTIC1ETk9MRUFSTiBcCisJLUkvb3B0L1NVTldjb25uL2luY2x1ZGUgJChLRkxBR1Mp IiBcCisJIkxJQlM9IC1sdGVybWxpYiAtTC9vcHQvU1VOV2Nvbm4vbGliIC1SL29wdC9TVU5XY29u bi9saWIgXAorCS1sc29ja3gyNSAtbHNvY2tldCAtbG5zbCAtbG0gLWxyZXNvbHYgLWxwYW0iCisK KyNTb2xhcmlzIDcgKDIuNykgd2l0aCBTdW4gQ0MKK3NvbGFyaXM3OgorCSQoTUFLRSkgIk1BS0U9 JChNQUtFKSIgc29sYXJpczI1eCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiS0ZMQUdT PS1EU09MQVJJUzcgLURDS19QQU0gLURDS19TSEFET1cgJChLRkxBR1MpIiBcCisJIkxJQlM9IC1s cGFtIgorCisjU29sYXJpcyA3IHdpdGggZ2NjICgzMi1iaXQpCitzb2xhcmlzN2c6CisJJChNQUtF KSAiTUFLRT0kKE1BS0UpIiBzb2xhcmlzMnhnIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAor CSJLRkxBR1M9LURTT0xBUklTNyAtRENLX1BBTSAtRENLX1NIQURPVyAkKEtGTEFHUykiIFwKKwki TElCUz0gLWxwYW0iCisKKyNTb2xhcmlzIDcgd2l0aCBnY2MgKyBLZXJiZXJvcyBJViAoMzItYml0 KQorc29sYXJpczdnK2tyYjQ6CisJJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBzb2xhcmlzMnhnK2ty YjQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIktGTEFHUz0tRFNPTEFSSVM3IC1EQ0tf UEFNIC1EQ0tfU0hBRE9XICQoS0ZMQUdTKSIgXAorCSJMSUJTPSAtbHBhbSIKKworc29sYXJpczdn K29wZW5zc2wremxpYitwYW0rc2hhZG93OgorCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgc29sYXJp czJ4ZytvcGVuc3NsK3psaWIrcGFtK3NoYWRvdyBcCisJS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEAp fSBcCisJIktGTEFHUz0tRFNPTEFSSVM3IC1EQ0tfUEFNIC1EQ0tfU0hBRE9XICQoS0ZMQUdTKSIK KworI1NvbGFyaXMgNyB3aXRoIGdjYyArIE9wZW5TU0wgKDMyLWJpdCkKK3NvbGFyaXM3ZytvcGVu c3NsK3psaWIrc3JwK3BhbStzaGFkb3c6CisJJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBzb2xhcmlz MnhnK29wZW5zc2wremxpYitzcnArcGFtK3NoYWRvdyBcCisJS1RBUkdFVD0kJHtLVEFSR0VUOi0k KEApfSBcCisJIktGTEFHUz0tRFNPTEFSSVM3IC1EQ0tfUEFNIC1EQ0tfU0hBRE9XICQoS0ZMQUdT KSIKKworI1NvbGFyaXMgOAorc29sYXJpczg6CisJJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBzb2xh cmlzMjV4IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJLRkxBR1M9LURTT0xBUklTOCAt RENLX1BBTSAtRENLX1NIQURPVyAkKEtGTEFHUykiIFwKKwkiTElCUz0gLWxwYW0iCisKKyNTb2xh cmlzIDggd2l0aCBnY2MgKDMyLWJpdCkKK3NvbGFyaXM4ZzoKKwkkKE1BS0UpICJNQUtFPSQoTUFL RSkiIHNvbGFyaXMyeGcgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIktGTEFHUz0tRFNP TEFSSVM4IC1EQ0tfUEFNIC1EQ0tfU0hBRE9XICQoS0ZMQUdTKSIgXAorCSJMSUJTPSAtbHBhbSIK KworIyBJbiBPcGVuU1NMIGJ1aWxkcyBhZGQgLWxkbCBpZiB5b3UgZ2V0IHVucmVzb2x2ZWQgcmVm ZXJlbmNlcyBmb3IKKyMgZGxjbG9zZSwgZGxzeW0sIGRsb3BlbiwgZGxlcnJvci4KKworI1NvbGFy aXMgOCB3aXRoIGdjYyArIE9wZW5TU0wgKDMyLWJpdCkKK3NvbGFyaXM4ZytvcGVuc3NsK3psaWIr cGFtK3NoYWRvdzoKKwkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIHNvbGFyaXMyeGcrb3BlbnNzbCt6 bGliK3BhbStzaGFkb3cgXAorCUtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gIktGTEFHUz0tRFNP TEFSSVM4ICQoS0ZMQUdTKSIKKworI1NvbGFyaXMgOCB3aXRoIGdjYyArIEtlcmJlcm9zIElWICgz Mi1iaXQpCitzb2xhcmlzOGcra3JiNDoKKwkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIHNvbGFyaXMy eGcra3JiNCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiS0ZMQUdTPS1EU09MQVJJUzgg LURDS19QQU0gLURDS19TSEFET1cgJChLRkxBR1MpIiBcCisJIkxJQlM9IC1scGFtIgorCitzb2xh cmlzOW5vbGZzOgorCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgc29sYXJpczI1eCBLVEFSR0VUPSQk e0tUQVJHRVQ6LSQoQCl9IFwKKwkiS0ZMQUdTPS1EU09MQVJJUzkgLURDS19QQU0gLURDS19TSEFE T1cgLURVU0VfU1RSRVJST1IgJChLRkxBR1MpIiBcCisJIkxJQlM9IC1scGFtIgorCisjU29sYXJp cyA5IHdpdGggbWFsbG9jIGRlYnVnZ2luZworc29sYXJpczltZDoKKwkkKE1BS0UpIG1lcm1pdCBL VEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTID0gLURGTkZMT0FUIC1PIC1Vc3Vu IC1pIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQgXAorCS1EU09MQVJJUzkgLURtYWxsb2M9ZG1hbGxv YyAtRGZyZWU9ZGZyZWUgLURNREVCVUcgXAorCS1EQ0tfUEFNIC1EQ0tfU0hBRE9XIC1EVVNFX1NU UkVSUk9SICQoS0ZMQUdTKSIgXAorCSJMSUJTPSAtbHBhbSAtbHRlcm1saWIgLWxzb2NrZXQgLWxu c2wgLWxtIC1scmVzb2x2IgorCisjU29sYXJpcyA5IHdpdGggZ2NjICsgT3BlblNTTCArIFNoYWRv dyAoMzItYml0KQorI0FkZCAtRE9QRU5TU0xfMDk3IGZvciBPcGVuU1NMIDAuOS43IG9yIGxhdGVy Lgorc29sYXJpczlnK29wZW5zc2wrc2hhZG93K3BhbSt6bGliOgorCSQoTUFLRSkgIk1BS0U9JChN QUtFKSIgc29sYXJpczJ4ZytvcGVuc3NsK3psaWIrcGFtK3NoYWRvdyBcCisJS1RBUkdFVD0kJHtL VEFSR0VUOi0kKEApfSBcCisJIktGTEFHUz0tRFNPTEFSSVM5IC1ESERCVVVDUCAtRERJUkVOVCAt RF9GSUxFX09GRlNFVF9CSVRTPTY0IFwKKwktRE5PX0RDTF9JTkVUX0FUT04gLURaTElCIC1EQ0tf UEFNIC1EQ0tfU0hBRE9XIC1ETElCREVTICQoS0ZMQUdTKSIgXAorCSJMSUJTPSAtbHBhbSAtbGRl czQyNSAtbHogJChMSUJTKSIKKworI1NvbGFyaXMgOSB3aXRoIGdjYyArIE9wZW5TU0wgKyBLZXJi ZXJvcyA1ICsgS3JiNCArIFNoYWRvdyAoMzItYml0KQorI0FkZCAtRE9QRU5TU0xfMDk3IGZvciBP cGVuU1NMIDAuOS43IG9yIGxhdGVyLgorc29sYXJpczlnK2tyYjUra3JiNCtvcGVuc3NsK3NoYWRv dytwYW0remxpYjoKKwkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIHNvbGFyaXMyeGcra3JiNStrcmI0 K29wZW5zc2wrc2hhZG93IFwKKwlLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiS0ZMQUdT PS1EU09MQVJJUzkgLURIREJVVUNQIC1ERElSRU5UIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQgXAor CS1ETk9fRENMX0lORVRfQVRPTiAtRFpMSUIgLURDS19QQU0gLURDS19TSEFET1cgLURMSUJERVMg JChLRkxBR1MpIiBcCisJIkxJQlM9IC1scGFtIC1sZGVzIC1seiAkKExJQlMpIgorCisjU29sYXJp cyA5IHdpdGggZ2NjICsgS2VyYmVyb3MgNCBhbmQgNToKK3NvbGFyaXM5ZytrcmI1K2tyYjQ6CisJ JChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBDQz1nY2MgQ0MyPWdjYyBc CisJIkNGTEFHUyA9IC1PIC1Vc3VuIC1EU1ZSNCAtRFNPTEFSSVM5IC1EU1RFUk1JT1ggLURTRUxF Q1QgLURGTkZMT0FUIFwKKwktRENLX0NVUlNFUyAtRENLX05FV1RFUk0gLURESVJFTlQgLURIREJV VUNQIC1EVENQU09DS0VUIFwKKwktRENLX0FVVEhFTlRJQ0FUSU9OIC1EQ0tfS0VSQkVST1MgLURL UkI1IC1ES1JCNCAtREtSQjUyNCBcCisJLURfRklMRV9PRkZTRVRfQklUUz02NCBcCisJLURDS19F TkNSWVBUSU9OIC1EQ0tfREVTIC1EQ0tfQ0FTVCAtREJJR0JVRk9LIFwKKwkkKEs1SU5DKSAkKEs1 SU5DKS9rcmI1ICQoS0ZMQUdTKSIgXAorCSJMSUJTPSAkKEs1TElCKSAtbHRlcm1saWIgLWxzb2Nr ZXQgLWxuc2wgLWxtIC1scmVzb2x2IFwKKwktbGtyYjQgLWxjcnlwdG8gLWxnc3NhcGlfa3JiNSAt bGtyYjUgLWxjb21fZXJyIC1sazVjcnlwdG8gXAorCS1sZGVzICQoTElCUykiCisKKyNTb2xhcmlz IDksIDEwLCBvciAxMSB3aXRoIGdjYy4uLiAgCisjVXNlcyBzdHJlYW1zIFBUWXMgcmF0aGVyIHRo YW4gQlNEIHB0eXMgYXMgaW4gQy1LZXJtaXQgOC4wIGFuZCBlYXJsaWVyLgorI1RoaXMgdGFyZ2V0 IGlzIGNoYWluZWQgdG8gYmUgdGhlIHNlY3VyZSBzb2xhcmlzOWcreHh4IHRhcmdldHMgYmVsb3cu Citzb2xhcmlzOWcgc29sYXJpczEwZyBzb2xhcmlzMTFnOgorCUBlY2hvICdNYWtpbmcgQy1LZXJt aXQgJChDS1ZFUikgZm9yIFNvbGFyaXMgOSBvciBsYXRlciB3aXRoIGdjYycKKwlAY2FzZSBgdW5h bWUgLXJgIGluIFwKKwkgIDUuOSkgU09MQVJJU1ZFUlNJT049Ii1EU09MQVJJUzkiIDs7IFwKKwkg IDUuMTApIFNPTEFSSVNWRVJTSU9OPSItRFNPTEFSSVMxMCIgOzsgXAorCSAgNS4xMSkgU09MQVJJ U1ZFUlNJT049Ii1EU09MQVJJUzExIiA7OyBcCisJICAqKSBTT0xBUklTVkVSU0lPTj0iLURTT0xB UklTIiA7OyBcCisJZXNhYyA7IFwKKwkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIENDPSJnY2MgLW0z MiIgQ0MyPSJnY2MgLW0zMiIgeGVybWl0IFwKKwlLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwK KwkiQ0ZMQUdTID0gLWcgLU8gLVVzdW4gLURTVlI0ICQkU09MQVJJU1ZFUlNJT04gLURVU0VfU1RS RVJST1IgXAorCS1EU1RFUk1JT1ggLURTRUxFQ1QgLURGTkZMT0FUIC1EQ0tfUEFNIC1EQ0tfU0hB RE9XIC1mdW5zaWduZWQtY2hhciBcCisJLURIQVZFX1NUUkVBTVMgLURIQVZFX0dSQU5UUFQgLURI QVZFX1BUU05BTUUgLURQVVNIX1BURU0gXAorCS1EUFVTSF9MRFRFUk0gLURQVVNIX1RUQ09NUEFU IFwKKwktRENLX0NVUlNFUyAtRENLX05FV1RFUk0gLURESVJFTlQgLURIREJVVUNQIC1EVENQU09D S0VUIFwKKwktRF9GSUxFX09GRlNFVF9CSVRTPTY0ICQoS0ZMQUdTKSIgXAorCSJMSUJTPSAtbHRl cm1saWIgLWxzb2NrZXQgLWxuc2wgLWxtIC1scmVzb2x2IC1scGFtICQoTElCUykiCisKKyNTb2xh cmlzIDksIDEwLCBvciAxMSB3aXRoIGdjYyArIEtlcmJlcm9zIDUgKyBPcGVuU1NMLgorI09LIEMt S2VybWl0IDkuMC4zMDEuCitzb2xhcmlzOWcra3JiNStzc2wgc29sYXJpczEwZytrcmI1K3NzbCBz b2xhcmlzMTFnK2tyYjUrc3NsOgorCUBjYXNlIGBvcGVuc3NsIHZlcnNpb25gIGluIFwKKwkgICow LjkuNyopIE9QRU5TU0xPUFRJT049Ii1ET1BFTlNTTF8wOTciIDs7IFwKKwkgICowLjkuOCopIE9Q RU5TU0xPUFRJT049Ii1ET1BFTlNTTF8wOTgiIDs7IFwKKwkgICoxLlswLTldLlswLTldKikgT1BF TlNTTE9QVElPTj0iLURPUEVOU1NMXzEwMCIgOzsgXAorCSAgKikgT1BFTlNTTE9QVElPTj0iIiA7 OyBcCisJZXNhYyA7IFwKKwlIQVZFX0RFUz0nJzsgXAorCURFU19MSUI9Jyc7IFwKKwlpZiBscyAk KFNTTExJQikvbGliZGVzKiA+IC9kZXYvbnVsbCAyPiAvZGV2L251bGw7IHRoZW4gXAorCSAgICAg IERFU19MSUI9Jy1sZGVzNDI1JzsgXAorCSAgICAgIEhBVkVfREVTPSctRENLX0RFUyAtRExJQkRF Uyc7IFwKKyAgICAgICAgICAgICAgZWNobyAiSEFWRSBERVMiOyBcCisgICAgICAgICAgIGVsc2Ug ZWNobyAiTk8gREVTIjsgXAorCWZpOyBcCisJR1NTQVBJTElCPScnOyBcCisJSzVESVI9YGVjaG8g JChLNUxJQikgfCBzZWQgJ3N8LUx8fCdgOyBcCisJZWNobyBLNURJUj0kJEs1RElSOyBcCisJaWYg bHMgJCRLNURJUi9saWJnc3NhcGlfa3JiNSogPiAvZGV2L251bGwgMj4gL2Rldi9udWxsOyB0aGVu IFwKKyAgICAgICAgICAgICAgR1NTQVBJTElCPSctbGdzc2FwaV9rcmI1JzsgXAorICAgICAgICAg IGVsc2UgR1NTQVBJTElCPSctbGdzc2FwaSc7IFwKKyAgICAgICAgZmk7IFwKKwkkKE1BS0UpIHhl cm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IENDPWdjYyBDQzI9Z2NjIFwKKwkiQ0ZMQUdT ID0gLU8gLVVzdW4gLURTVlI0IC1EU09MQVJJUzkgLURTVEVSTUlPWCAtRFNFTEVDVCAtREZORkxP QVQgXAorCS1EQ0tfQ1VSU0VTIC1EQ0tfTkVXVEVSTSAtRERJUkVOVCAtREhEQlVVQ1AgLURUQ1BT T0NLRVQgIC1EQklHQlVGT0sgXAorCS1EQ0tfQVVUSEVOVElDQVRJT04gLURDS19TU0wgLURaTElC IC1EQ0tfS0VSQkVST1MgLURLUkI1IFwKKwktRENLX0VOQ1JZUFRJT04gLURDS19DQVNUICQkT1BF TlNTTE9QVElPTiBcCisJJCRIQVZFX0RFUyAkKFNTTElOQykgJChLNUlOQykgJChLNUlOQykva3Ji NSAkKEtGTEFHUykiIFwKKwkiTElCUz0gJChTU0xMSUIpICQoSzVMSUIpIC1seiAtbHNzbCAtbHRl cm1saWIgLWxzb2NrZXQgLWxuc2wgLWxtIFwKKwktbHJlc29sdiAtbGNyeXB0byBcCisJJCRHU1NB UElMSUIgLWxrcmI1IC1sY29tX2VyciAtbGs1Y3J5cHRvICQkREVTX0xJQiAkKExJQlMpIgorCisj U29sYXJpcyA5LCAxMCwgb3IgMTEgd2l0aCBnY2MsIDY0IGJpdCBidWlsZC4KKyNQZWVraW5nIGlu c2lkZSBGSUxFIHN0cnVjdCBub3QgYWxsb3dlZCBpbiA2NC1iaXQgd29ybGQuCisjRE9OJ1QgVVNF IFRISVMgT05FIE9OIFBDIEFSQ0hJVEVDVFVSRSAtIEl0IGNvbXBpbGVzIGFuZCBsaW5rcyBidXQg d29uJ3QgcnVuLgorI09LOiAyMDA5LzA5LzI1IChidXQgbm90IHRlc3RlZCBvbiBTb2xhcmlzIDEx KQorc29sYXJpczlnNjQgc29sYXJpczEwZzY0IHNvbGFyaXMxMWc2NDoKKwlAZWNobyAnTWFraW5n IEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTb2xhcmlzIDkrKyB3aXRoIGdjYyA2NC1iaXQnCisJQGNh c2UgYHVuYW1lIC1yYCBpbiBcCisJICA1LjkpIFNPTEFSSVNWRVJTSU9OPSItRFNPTEFSSVM5IiA7 OyBcCisJICA1LjEwKSBTT0xBUklTVkVSU0lPTj0iLURTT0xBUklTMTAiIDs7IFwKKwkgIDUuMTEp IFNPTEFSSVNWRVJTSU9OPSItRFNPTEFSSVMxMSIgOzsgXAorCSAgKikgU09MQVJJU1ZFUlNJT049 Ii1EU09MQVJJUyIgOzsgXAorCWVzYWMgOyBcCisJJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBDQz0i Z2NjIC1tNjQiIENDMj0iZ2NjIC1tNjQiIHhlcm1pdCBcCisJS1RBUkdFVD0kJHtLVEFSR0VUOi0k KEApfSBcCisJIkNGTEFHUyA9IC1nIC1PIC1Vc3VuIC1mdW5zaWduZWQtY2hhciBcCisJLURTVlI0 ICQkU09MQVJJU1ZFUlNJT04gLUROT0FSUk9XS0VZUyBcCisJLURTVEVSTUlPWCAtRFNFTEVDVCAt REZORkxPQVQgLURVU0VfU1RSRVJST1IgLURDS19QQU0gLURDS19TSEFET1cgXAorCS1ESEFWRV9T VFJFQU1TIC1ESEFWRV9HUkFOVFBUIC1ESEFWRV9QVFNOQU1FIC1EUFVTSF9QVEVNIFwKKwktRFBV U0hfTERURVJNIC1EUFVTSF9UVENPTVBBVCBcCisJLURDS19DVVJTRVMgLURDS19ORVdURVJNIC1E RElSRU5UIC1ESERCVVVDUCAtRFRDUFNPQ0tFVCAkKEtGTEFHUykiIFwKKwkiTElCUz0gLWx0ZXJt bGliIC1sc29ja2V0IC1sbnNsIC1sbSAtbHJlc29sdiAtbHBhbSAkKExJQlMpIgorCisjU29sYXJp cyA5LCAxMCwgb3IgMTEgd2l0aCBTdW5Qcm8gQ0MKKyNVc2VzIHN0cmVhbXMgUFRZcyByYXRoZXIg dGhhbiBCU0QgcHR5cyBhcyBpbiBDLUtlcm1pdCA4LjAgYW5kIGVhcmxpZXIuCisjVGhpcyB0YXJn ZXQgaXMgY2hhaW5lZCB0byBieSB0aGUgc2VjdXJlIHRhcmdldHMgYmVsb3cuCisjT0sgQy1LZXJt aXQgOS4wCitzb2xhcmlzOSBzb2xhcmlzMTAgc29sYXJpczExOgorCUBlY2hvICdNYWtpbmcgQy1L ZXJtaXQgJChDS1ZFUikgZm9yIFNvbGFyaXMgOSBvciBsYXRlciB3aXRoIFN1biBDQycKKwlAY2Fz ZSBgdW5hbWUgLXJgIGluIFwKKwkgIDUuOSkgU09MQVJJU1ZFUlNJT049Ii1EU09MQVJJUzkiIDs7 IFwKKwkgIDUuMTApIFNPTEFSSVNWRVJTSU9OPSItRFNPTEFSSVMxMCIgOzsgXAorCSAgNS4xMSkg U09MQVJJU1ZFUlNJT049Ii1EU09MQVJJUzExIiA7OyBcCisJICAqKSBTT0xBUklTVkVSU0lPTj0i LURTT0xBUklTIiA7OyBcCisJZXNhYyA7IFwKKwkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIHhlcm1p dCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTID0gLU8gLVVzdW4gLURTVlI0 ICQkU09MQVJJU1ZFUlNJT04gLURVU0VfU1RSRVJST1IgXAorCS1EU1RFUk1JT1ggLURTRUxFQ1Qg LURGTkZMT0FUIC1EQ0tfUEFNIC1EQ0tfU0hBRE9XIFwKKwktREhBVkVfU1RSRUFNUyAtREhBVkVf R1JBTlRQVCAtREhBVkVfUFRTTkFNRSAtRFBVU0hfUFRFTSBcCisJLURQVVNIX0xEVEVSTSAtRFBV U0hfVFRDT01QQVQgXAorCS1EQ0tfQ1VSU0VTIC1EQ0tfTkVXVEVSTSAtRERJUkVOVCAtREhEQlVV Q1AgLURUQ1BTT0NLRVQgXAorCS1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQgJChLRkxBR1MpIiBcCisJ IkxJQlM9ICQoTElCUykgLWx0ZXJtbGliIC1sc29ja2V0IC1sbnNsIC1sbSAtbHJlc29sdiAtbHBh bSIKKworIyBTb2xhcmlzIDksIDEwLCBvciAxMSB3aXRoIE9wZW5TU0wgYnVpbHQgd2l0aCBTdW4g Q0MuCisjIEhlcmUncyBhbiBleGFtcGxlIG9mIGhvdyB0byBpbnZva2UgdGhpcyB0YXJnZXQgaW4g Y2FzZSB5b3VyIE9wZW5TU0wKKyMgaGVhZGVycyBhbmQgbGlicmFyaWVzIGFyZSBub3QgaW4gL3Vz ci9sb2NhbDoKKyMKKyMgbWFrZSBzb2xhcmlzOStvcGVuc3NsICJTU0xJTkM9IiAiU1NMTElCPSIg XAorIyAgIktGTEFHUz0gLUkvb3B0L29wZW5zc2wtMC45LjhrL2luY2x1ZGUgLUwvb3B0L29wZW5z c2wtMC45LjhrL2xpYiIKKyMKKyMgRG9uJ3QgdXNlICdtYWtlIC1lJyBiZWNhdXNlIHRoYXQgaW5o aWJpdHMgcGFzc2luZyBvZiBLRkxBR1MgdG8KKyMgdGhlIGJhc2UgKHNvbGFyaXM5KSB0YXJnZXQu CisjCisjT0sgQy1LZXJtaXQgOS4wCitzb2xhcmlzOStzc2wgc29sYXJpczEwK3NzbCBzb2xhcmlz MTErc3NsIFwKK3NvbGFyaXM5K29wZW5zc2wgc29sYXJpczEwK29wZW5zc2wgc29sYXJpczExK29w ZW5zc2w6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgU29sYXJpcyA5LzEw LzExIHdpdGggT3BlblNTTDogY2MnCisJQGNhc2UgYG9wZW5zc2wgdmVyc2lvbmAgaW4gXAorCSAg KjAuOS43KikgT1BFTlNTTE9QVElPTj0iLURPUEVOU1NMXzA5NyIgOzsgXAorCSAgKjAuOS44Kikg T1BFTlNTTE9QVElPTj0iLURPUEVOU1NMXzA5OCIgOzsgXAorCSAgKjEuWzAtOV0uWzAtOV0qKSBP UEVOU1NMT1BUSU9OPSItRE9QRU5TU0xfMTAwIiA7OyBcCisJICAqKSBPUEVOU1NMT1BUSU9OPSIi IDs7IFwKKwllc2FjIDsgXAorCUhBVkVfREVTPScnOyBcCisJREVTX0xJQj0nJzsgXAorCWlmIGxz ICQoU1NMTElCKS9saWJkZXMqID4gL2Rldi9udWxsIDI+IC9kZXYvbnVsbDsgdGhlbiBcCisJICAg ICAgREVTX0xJQj0nLWxkZXM0MjUnOyBcCisJICAgICAgSEFWRV9ERVM9Jy1EQ0tfREVTIC1ETElC REVTJzsgXAorICAgICAgICAgICAgICBlY2hvICJIQVZFIERFUyI7IFwKKyAgICAgICAgICAgZWxz ZSBlY2hvICJOTyBERVMiOyBcCisJZmk7IFwKKwkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIHNvbGFy aXM5IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJLRkxBR1M9LURDS19BVVRIRU5USUNB VElPTiAtRENLX1NTTCAtRFpMSUIgJCRIQVZFX0RFUyBcCisJLUROT19EQ0xfSU5FVF9BVE9OICQk T1BFTlNTTE9QVElPTiAkKFNTTElOQykgJChLRkxBR1MpIiBcCisJIkxJQlM9ICQoU1NMTElCKSAt bHogLWxzc2wgJCRERVNfTElCIC1sY3J5cHRvICAkKExJQlMpIgorCisjIFNvbGFyaXMgOSBvciBs YXRlciB3aXRoIE9wZW5TU0wsIGJ1aWx0IHdpdGggZ2NjLgorIyBSZW1vdmUgLUROT19EQ0xfSU5F VF9BVE9OIGlmIGluZXRfYXRvbiBjb21lcyB1cCBtaXNzaW5nLiAgVGhpcyB0YXJnZXQgbmljZWx5 CisjIGNoYWlucyB0byB0aGUgc29sYXJpc3s5LDEwLDExfWcgdGFyZ2V0IGJ1dCBmb3Igc29tZSBy ZWFzb24gaXQgZG9lc24ndCB3b3JrIGlmCisjIHlvdSBhZGQgdGhlIC1ERk9SV0FSRF9YIG9wdGlv biwgdGh1cyB0aGUgc29sYXJpczlnK29wZW5zc2wrZm9yd2FyZF94IHRhcmdldC4KKyMKKyNPSzog MjAxMS8wNi8xNAorc29sYXJpczlnK3NzbCBzb2xhcmlzMTBnK3NzbCBzb2xhcmlzMTFnK3NzbCBc Citzb2xhcmlzOWcrb3BlbnNzbCBzb2xhcmlzMTBnK29wZW5zc2wgc29sYXJpczExZytvcGVuc3Ns OgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFNvbGFyaXMgOS8xMC8xMSB3 aXRoIE9wZW5TU0w6IGdjYycKKwlAY2FzZSBgb3BlbnNzbCB2ZXJzaW9uYCBpbiBcCisJICAqMC45 LjcqKSBPUEVOU1NMT1BUSU9OPSItRE9QRU5TU0xfMDk3IiA7OyBcCisJICAqMC45LjgqKSBPUEVO U1NMT1BUSU9OPSItRE9QRU5TU0xfMDk4IiA7OyBcCisJICAqMS5bMC05XS5bMC05XSopIE9QRU5T U0xPUFRJT049Ii1ET1BFTlNTTF8xMDAiIDs7IFwKKwkgICopIE9QRU5TU0xPUFRJT049IiIgOzsg XAorCWVzYWMgOyBcCisJSEFWRV9ERVM9Jyc7IFwKKwlERVNfTElCPScnOyBcCisJaWYgbHMgJChT U0xMSUIpL2xpYmRlcyogPiAvZGV2L251bGwgMj4gL2Rldi9udWxsOyB0aGVuIFwKKwkgICAgICBE RVNfTElCPSctbGRlczQyNSc7IFwKKwkgICAgICBIQVZFX0RFUz0nLURDS19ERVMgLURMSUJERVMn OyBcCisgICAgICAgICAgICAgIGVjaG8gIkhBVkUgREVTIjsgXAorICAgICAgICAgICBlbHNlIGVj aG8gIk5PIERFUyI7IFwKKwlmaTsgXAorCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgc29sYXJpczln IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJLRkxBR1M9LURDS19BVVRIRU5USUNBVElP TiAtRENLX1NTTCAtRFpMSUIgJCRIQVZFX0RFUyBcCisJLUROT19EQ0xfSU5FVF9BVE9OICQkT1BF TlNTTE9QVElPTiAkKFNTTElOQykgJChLRkxBR1MpIiBcCisJIkxJQlM9ICQoU1NMTElCKSAtbHog LWxzc2wgJCRERVNfTElCIC1sY3J5cHRvICAkKExJQlMpIgorCisjIFNvbGFyaXMgOSBvciBsYXRl ciB3aXRoIGdjYyArIE9wZW5TU0wgKyBTaGFkb3cgKDMyLWJpdCkuCisjIFJlbW92ZSAtRE5PX0RD TF9JTkVUX0FUT04gaWYgaW5ldF9hdG9uIGNvbWVzIHVwIG1pc3NpbmcuCisjIEluY2x1ZGVzIGxv bmcgZmlsZSBzdXBwb3J0IC0gbm90IHN1cmUgaWYgdGhpcyB3YXMgYXZhaWxhYmxlIGJlZm9yZSBT b2xhcmlzIDkuCisjIERldGVjdHMgU29sYXJpcyB2ZXJzaW9uIGF1dG9tYXRpY2FsbHkuCisjCitz b2xhcmlzOWcrb3BlbnNzbCtmb3J3YXJkX3g6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENL VkVSKSBmb3IgU29sYXJpcyA5IG9yIGxhdGVyIHdpdGggT3BlblNTTC4uLicKKwlAY2FzZSBgb3Bl bnNzbCB2ZXJzaW9uYCBpbiBcCisJICAqMC45LjcqKSBPUEVOU1NMT1BUSU9OPSItRE9QRU5TU0xf MDk3IiA7OyBcCisJICAqMC45LjgqKSBPUEVOU1NMT1BUSU9OPSItRE9QRU5TU0xfMDk4IiA7OyBc CisJICAqMS5bMC05XS5bMC05XSopIE9QRU5TU0xPUFRJT049Ii1ET1BFTlNTTF8xMDAiIDs7IFwK KwkgICopIE9QRU5TU0xPUFRJT049IiIgOzsgXAorCWVzYWMgOyBjYXNlIGB1bmFtZSAtcmAgaW4g XAorCSAgNS45KSBTT0xBUklTVkVSU0lPTj0iLURTT0xBUklTOSIgOzsgXAorCSAgNS4xMCkgU09M QVJJU1ZFUlNJT049Ii1EU09MQVJJUzEwIiA7OyBcCisJICA1LjExKSBTT0xBUklTVkVSU0lPTj0i LURTT0xBUklTMTEiIDs7IFwKKwkgICopIFNPTEFSSVNWRVJTSU9OPSItRFNPTEFSSVMiIDs7IFwK Kwllc2FjIDsgXAorCSQoTUFLRSkgeGVybWl0IAlLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IEND PWdjYyBDQzI9Z2NjIFwKKwkiQ0ZMQUdTID0gLWcgLU8gLVVzdW4gLURTVlI0ICQkU09MQVJJU1ZF UlNJT04gXAorCS1ESEFWRV9TVFJFQU1TIC1ESEFWRV9HUkFOVFBUIC1ESEFWRV9QVFNOQU1FIC1E UFVTSF9QVEVNIFwKKwktRFBVU0hfTERURVJNIC1EUFVTSF9UVENPTVBBVCBcCisJLURTVEVSTUlP WCAtRFNFTEVDVCAtREZORkxPQVQgLURCSUdCVUZPSyAtRF9GSUxFX09GRlNFVF9CSVRTPTY0IFwK KwktRENLX0FVVEhFTlRJQ0FUSU9OIC1EQ0tfU1NMIC1EQ0tfUEFNIC1EQ0tfU0hBRE9XIC1EWkxJ QiAtRExJQkRFUyBcCisJLURGT1JXQVJEX1ggJCRPUEVOU1NMT1BUSU9OICQoU1NMSU5DKSAkKEtG TEFHUykiIFwKKwkiTElCUz0gJChTU0xMSUIpIC1scGFtIC1sZGVzNDI1IC1seiAtbHRlcm1saWIg XAorCS1sc29ja2V0IC1sbnNsIC1sbSAtbHJlc29sdiAtbHNzbCAtbGNyeXB0byAtbHBhbSAtbHog JChMSUJTKSIKKworIyBUaGVzZSB0d28gc2hvdWxkIGJlIGZvbGRlZCBpbiB3aXRoIHRoZSBvbmVz IGp1c3QgYWJvdmUuCisKKyNTb2xhcmlzIDkgd2l0aCBnY2MgMy4xICsgT3BlblNTTCAoMzItYml0 KQorc29sYXJpczlnK29wZW5zc2wremxpYitwYW0rc2hhZG93OgorCSQoTUFLRSkgIk1BS0U9JChN QUtFKSIgc29sYXJpczJ4ZzMyK29wZW5zc2wremxpYitwYW0rc2hhZG93IFwKKwlLVEFSR0VUPSQk e0tUQVJHRVQ6LSQoQCl9IFwKKwkiS0ZMQUdTPS1EU09MQVJJUzkgLURVU0VfU1RSRVJST1IgJChL RkxBR1MpIgorCisjU29sYXJpcyAxMCB3aXRoIGdjYyAzLjEgKyBPcGVuU1NMICgzMi1iaXQpCitz b2xhcmlzMTBnK29wZW5zc2wremxpYitwYW0rc2hhZG93OgorCSQoTUFLRSkgIk1BS0U9JChNQUtF KSIgc29sYXJpczJ4ZzMyK29wZW5zc2wremxpYitwYW0rc2hhZG93IFwKKwlLVEFSR0VUPSQke0tU QVJHRVQ6LSQoQCl9IFwKKwkiS0ZMQUdTPS1EU09MQVJJUzEwIC1EVVNFX1NUUkVSUk9SICQoS0ZM QUdTKSIKKworI1RoZSBmb2xsb3dpbmcgKG9sZCwgb2xkKSBzdW5vc3h4eCBlbnRyaWVzIGFyZSBm b3IgZGVidWdnaW5nIGFuZCB0ZXN0aW5nIG9ubHkuCisKK3N1bm9zNDF4OgorCSQoTUFLRSkgeGVy bWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1M9IC1PIC1EU1VOT1M0MSAt RERJUkVOVCAtRE5PVExPRyAtRE5PTVNFTkQgXAorCS1ETk9VVUNQIC1ETk9TSUdXSU5DSCAtRE5P UkVESVJFQ1QgLUROT1BVU0ggLUROT0NDVFJBUCBcCisJLUROT0lDUCAtRE5PTE9DQUwgJChLRkxB R1MpIgorCisjU3VuT1MgNC4xLngsIGRlYnVnZ2luZyB3aXRoIFB1cmUgU29mdHdhcmUsIEluYy4s IFB1cmlmeSAyIChjb21tZXJjaWFsIHJ1bnRpbWUKKyNlcnJvci1kZXRlY3Rpb24gc29mdHdhcmUg Zm9yIGNhdGNoaW5nIHdpbGQgYXJyYXkgcmVmZXJlbmNlcywgZXRjKS4KKyNCZWZvcmUgcnVubmlu ZyB0aGUgcmVzdWx0aW5nIHdlcm1pdCwgeW91J2xsIGFsc28gbmVlZCB0byBkZWZpbmUgYW5kIGV4 cG9ydAorI3RoZSBmb2xsb3dpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzIChhcyBpbiB0aGlzIGV4 YW1wbGUpOgorI1BVUklGWUhPTUU9L3Vzci9sb2NhbC9wdXJpZnkgOyBleHBvcnQgUFVSSUZZSE9N RQorI1BVUklGWUNBQ0hFRElSPS90bXAgOyBleHBvcnQgUFVSSUZZQ0FDSEVESVIKK3N1bm9zNDFj cDoKKwlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFN1bk9TIDQuMSAvIEJTRCAv IEN1cnNlcyAvIFB1cmlmeS4uLgorCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDot JChAKX0gXAorCSJDQzI9IHB1cmlmeSAtY2FjaGVfZGlyPS91c3IvdG1wIGNjIiBcCisJIkNGTEFH Uz0gLWcgLURTVU5PUzQxIC1ESERCVVVDUCAtRERJUkVOVCAtRFRDUFNPQ0tFVCBcCisJLURTQVZF RFVJRCAtRENLX0NVUlNFUyAkKEtGTEFHUykiIFwKKwkiTElCUz0gLWxjdXJzZXMgLWx0ZXJtY2Fw IgorCisjU3VuT1MgNC4xIHdpdGggbWFsbG9jIGRlYnVnZ2VyCitzdW5vczQxbWQ6CisJQGVjaG8g TWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTdW5PUyA0LjEgbWFsbG9jIGRlYnVnLi4uCisJ JChNQUtFKSBtZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUz0gLU8g LURTVU5PUzQxIC1ESERCVVVDUCAtRERJUkVOVCAtRFRDUFNPQ0tFVCBcCisJLURTQVZFRFVJRCAk KEtGTEFHUykgLURtYWxsb2M9ZG1hbGxvYyAtRGZyZWU9ZGZyZWUgLURNREVCVUciCisKK3N1bm9z NDFnbWQ6CisJQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTdW5PUyA0LjEgd2l0 aCBnY2MgYW5kIGN1cnNlcy4uLgorCSQoTUFLRSkgbWVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDot JChAKX0gIkNDPSBnY2MgIiAiQ0MyPSBnY2MiIFwKKwkiQ0ZMQUdTPSAtZyAtRFNVTk9TNDEgLURI REJVVUNQIC1ERElSRU5UIC1EVENQU09DS0VUIFwKKwktRE5ER1BXTkFNIC1EU0FWRURVSUQgLURD S19DVVJTRVMgLURSTE9HQ09ERSBcCisJJChLRkxBR1MpIC1EbWFsbG9jPWRtYWxsb2MgLURmcmVl PWRmcmVlIC1ETURFQlVHIiBcCisJIkxJQlM9IC1sY3Vyc2VzIC1sdGVybWNhcCIKKworI1N1bk9T IHZlcnNpb24gNC4xLCBnY2MsIHByb2ZpbGluZyB3aXRoIGdwcm9mLCBubyBkZWJ1Z2dpbmcuCisj VG8gZ2V0IHByb2ZpbGUsICJtYWtlIHN1bm9zNDFwIiAob24gU3VuKSwgdGhlbiAiLi93ZXJtaXQi LiAgQWZ0ZXIgcnVubmluZworI3dlcm1pdCwgImdwcm9mIC4vd2VybWl0IHwgbHByIiAob3Igd2hh dGV2ZXIpIHRvIGdldCBleGVjdXRpb24gcHJvZmlsZS4KK3N1bm9zNDFwOgorCUBlY2hvIE1ha2lu ZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgU3VuT1MgNC54IHdpdGggcHJvZmlsaW5nLi4uCisJJChN QUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSAiQ0M9IGdjYyAiICJDQzI9IGdj YyIgXAorCSJDRkxBR1M9IC1EU1VOT1M0MSAtRE5PREVCVUcgLURTQVZFRFVJRCAtRERJUkVOVCAt RFRDUFNPQ0tFVCBcCisJLUROREdQV05BTSAkKEtGTEFHUykgLXBnIiAiTE5LRkxBR1MgPSAtcGci CisKKyNTdW5PUyB2ZXJzaW9uIDQuMSBvciBsYXRlciwgQlNEIGVudmlyb25tZW50LCBtaW5pbXVt IGZlYXR1cmVzLgorc3Vub3M0MW1pbjoKKwlAZWNobyBNaW5pbXVtIGludGVyYWN0aXZlCisJJChN QUtFKSAiTUFLRT0kKE1BS0UpIiBzdW5vczQxIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAor CSJLRkxBR1M9LUROT1NQTCAtRE5PWE1JVCAtRE5PTVNFTkQgLUROT0ZSSUxMUyAtRE5PUkVUUlkg XAorCS1ETk9ESUFMIC1ETk9IRUxQIC1ETk9ERUJVRyAtRE5PVExPRyAtRE5PU0NSSVBUIC1ETk9D U0VUUyBcCisJLUROT1NIT1cgLUROT1NFVEtFWSAtRE5PVVVDUCAtRE5PUkVDQUxMIC1ETk9SRURJ UkVDVCBcCisJLUROT1BVU0ggLUROT01ETUhVUCAtRE5PSkMgLUROT0ZEWkVSTyAtRE5PRVNDU0VR IFwKKwktRE5PTkVUIC1EQ0tfU01BTEwgLUROT0NLU1BFRUQgLUROT0NLVElNRVJTIC1ETk9MT0dJ TiBcCisJLUROT0NLWFlaIC1ETk9LRVJCRVJPUyAtRE5PTUtESVIgLUROT1BBVFRFUk5TIC1ETk9Q RVJNUyAtRE5PUElQRVNFTkQgXAorCS1ETk9SRUNVUlNJVkUgLUROT1JFTkFNRSAtRE5PUkVTRU5E IC1ETk9TRVRLRVkgXAorCS1ETk9UUklHR0VSIC1ETk9UVU5JTkcgJChLRkxBR1MpIiAiTE5LRkxB R1MgPSAtcyIKKworI1N1bk9TIHZlcnNpb24gNC4xLCBCU0QgZW52aXJvbm1lbnQsIG1pbiBzaXpl LCBjb21tYW5kLWxpbmUgb25seS4uLgorc3Vub3M0MW06CisJQGVjaG8gTWluaW11bSBzaXplCisJ JChNQUtFKSAiTUFLRT0kKE1BS0UpIiBzdW5vczQxbWluIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChA KX0gXAorCSJLRkxBR1M9LUROT0lDUCAkKEtGTEFHUykiCisKKyNTdW5PUyB2ZXJzaW9uIDQuMSwg QlNEIGVudmlyb25tZW50LCBtaW4gc2l6ZSwgY21kLWxpbmUgb25seSwgcmVtb3RlIG9ubHkuLi4K KyMKK3N1bm9zNDFtcjoKKwlAZWNobyBNaW5pbXVtIHNpemUKKwkkKE1BS0UpICJNQUtFPSQoTUFL RSkiIHN1bm9zNDFtaW4gS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIktGTEFHUz0tRE5P SUNQIC1ETk9MT0NBTCAkKEtGTEFHUykiCisKKyNTdW5PUyB2ZXJzaW9uIDQuMSwgQlNEIGVudmly b25tZW50LCBtaW4gc2l6ZSwgaW50ZXJhY3RpdmUuLi4KK3N1bm9zNDFtaToKKwlAZWNobyBNaW5p bXVtIHNpemUKKwkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIHN1bm9zNDFtaW4gS1RBUkdFVD0kJHtL VEFSR0VUOi0kKEApfSBcCisJIktGTEFHUz0tRE5PQ01ETCAkKEtGTEFHUykiCisKKyNTdW5PUyB2 ZXJzaW9uIDQuMSwgQlNEIGVudmlyb25tZW50LCBtaW4gc2l6ZSwgaW50ZXJhY3RpdmUsIHJlbW90 ZSBvbmx5Li4uCitzdW5vczQxbWlyOgorCUBlY2hvIE1pbmltdW0gc2l6ZQorCSQoTUFLRSkgIk1B S0U9JChNQUtFKSIgc3Vub3M0MW1pbiBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiS0ZM QUdTPS1ETk9DTURMIC1ETk9MT0NBTCAkKEtGTEFHUykiCisKKyNTdW5PUyA0LjEsIFN5c3RlbSBW IFIzIGVudmlyb25tZW50ICgtaSBvcHRpb24gb21pdHRlZCkuCitzdW5vczQxczU6CisJQGVjaG8g TWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTdW5PUyA0LjEgU3lzdGVtIFYgUjMuLi4KKwlA ZWNobyBGb3IgdGVzdGluZyBwdXJwb3NlcyBvbmx5IC0gTk9UIGZvciBwcm9kdWN0aW9uIHVzZS4K KwlAZWNobyBGb3IgYSB1c2VhYmxlIHZlcnNpb24sIG1ha2Ugc3Vub3M0MSBpbnN0ZWFkLgorCSQo TUFLRSkgd2VybWl0ICJDQz0gL3Vzci81YmluL2NjICIgIkNDMj0vdXNyLzViaW4vY2MgIiBcCisJ S1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUyA9IC1EU1VONFM1IC1ERElSRU5U IC1ESERCVVVDUCAtRE5PTEVBUk4gLURDS19QT0xMICQoS0ZMQUdTKSAtTyIKKworI0FzIGFib3Zl LCBidXQgd2l0aCBjdXJzZXMgc3VwcG9ydAorc3Vub3M0MXM1YzoKKwlAZWNobyBNYWtpbmcgQy1L ZXJtaXQgJChDS1ZFUikgZm9yIFN1bk9TIDQuMSBTeXN0ZW0gViBSMy4uLgorCUBlY2hvIEN1cnNl cyBpbmNsdWRlZC4KKwlAZWNobyBGb3IgdGVzdGluZyBwdXJwb3NlcyBvbmx5IC0gTk9UIGZvciBw cm9kdWN0aW9uIHVzZS4KKwlAZWNobyBGb3IgYSB1c2VhYmxlIHZlcnNpb24sIG1ha2Ugc3Vub3M0 MSBpbnN0ZWFkLgorCSQoTUFLRSkgd2VybWl0ICJDQz0gL3Vzci81YmluL2NjICIgIkNDMj0vdXNy LzViaW4vY2MgIiBcCisJS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUyA9IC1E U1VONFM1IC1ERElSRU5UIC1ESERCVVVDUCAtRE5PTEVBUk4gXAorCS1EQ0tfUE9MTCAtRENLX0NV UlNFUyAtRENLX05FV1RFUk0gJChLRkxBR1MpIC1PIiAiTElCUz0gLWxjdXJzZXMiCisKKyNBcyBh Ym92ZSwgYnV0IHdpdGggY3Vyc2VzIHN1cHBvcnQgQU5EIG5ldCBzdXBwb3J0CitzdW5vczQxczV0 Y3BjOgorCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgU3VuT1MgNC4xIFN5c3Rl bSBWIFIzLi4uCisJQGVjaG8gVENQL0lQIGFuZCBjdXJzZXMgaW5jbHVkZWQuICBObyBkZWJ1ZyBs b2cuCisJQGVjaG8gRm9yIHRlc3RpbmcgcHVycG9zZXMgb25seSAtIE5PVCBmb3IgcHJvZHVjdGlv biB1c2UuCisJQGVjaG8gRm9yIGEgdXNlYWJsZSB2ZXJzaW9uLCBtYWtlIHN1bm9zNDEgaW5zdGVh ZC4KKwkkKE1BS0UpIHhlcm1pdCAiQ0M9IC91c3IvNWJpbi9jYyAiICJDQzI9L3Vzci81YmluL2Nj ICIgXAorCUtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1MgPSAtRFNVTjRTNSAt RERJUkVOVCAtREhEQlVVQ1AgLURDS19QT0xMIFwKKwktRE5PREVCVUcgLURDS19DVVJTRVMgLURD S19ORVdURVJNIC1EVENQU09DS0VUICQoS0ZMQUdTKSAtTyIgXAorCSJMSUJTPSAtbGN1cnNlcyAt bHJlc29sdiIKKworIyAoRW5kIG9mIFN1bk9TIHRlc3QgZW50cmllcy4uLikKKworI0Fwb2xsbyB3 aXRoIERvbWFpbiBTUjEwLjAgb3IgbGF0ZXIsIEJTRCBlbnZpcm9ubWVudAorI1JlcG9ydGVkbHks IGl0IG1pZ2h0IGFsc28gaGVscCB0byBhZGQgJy1BLHN5c3R5cGU9YnNkNC4zJyB0byBDRkxBR1Mu CisjUmVwb3J0ZWRseSwgdGhlcmUgaXMgYWxzbyBhIHByb2JsZW0gd2l0aCBnZXRjICYgcHV0YyBt YWNyb3MgdGhhdCBjYW4KKyNiZSBoYW5kbGVkIGJ5IHVzaW5nICcjaWZkZWYgYXBvbGxvJyBzb21l d2hlcmUgdG8gcmVkZWZpbmUgdGhlbT8/PworI09uIHRoZSBvdGhlciBoYW5kLCBvdGhlciByZXBv cnRzIGluZGljYXRlIHRoYXQgaXQgd29ya3MgZmluZSBhcy1pcy4KKyNOT1RFOiBUaGlzIGVudHJ5 IHdhcyBwcmV2aW91c2x5IGxpa2UgdGhpczoKKyMJJChNQUtFKSB3ZXJtaXQgIkNGTEFHUz0gLURO T0ZJTEVIIC1EQlNENCAkKEtGTEFHUykgLVVhZWdpcyBcCisjCS1EVENQU09DS0VUIC1VX19TVERD X18iCisjUmVwb3J0cyAoRGVjIDkxKSBpbmRpY2F0ZSBTUjEwIGhhcyBhbiBBTlNJLWNvbXBsaWFu dCBDIGNvbXBpbGVyLAorI2luIGFkZGl0aW9uIHRvIGFuIG9sZGVyIG9uZSB0aGF0IGNsYWltZWQg dG8gYmUgQU5TSS1jb21wbGlhbnQgYnV0IHdhc24ndC4KKyNUaGUgZm9sbG93aW5nIG1ha2UgZW50 cnkgKHBsdXMgY2hlY2tzIHRoYXQgYXJlIG1hZGUgaW4gY2tjZGViLmgpIGRldGVjdAorI3doaWNo IGNvbXBpbGVyIGlzIHVzZWQgYW5kIGRlZmluZSB0aGUgQ0tfQU5TSUMgb3IgTk9BTlNJIGZsYWdz IGFjY29yZGluZ2x5Lgorc3IxMC1ic2Q6CisJQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIp IGZvciBBcG9sbG8gU1IxMC4wIC8gQlNEIC4uLgorCSQoTUFLRSkgd2VybWl0IEtUQVJHRVQ9JCR7 S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1M9IC1PIC1EQVBPTExPU1IxMCAtREJTRDQzIC1EVENQ U09DS0VUIC1EQ0tfQ1VSU0VTIC1ETk9MRUFSTiBcCisJLVVhZWdpcyAkKEtGTEFHUykiICJMSUJT PSAtbGN1cnNlcyAtbHRlcm1jYXAiCisKKyNBcG9sbG8gd2l0aCBEb21haW4gU1IxMC4wIG9yIGxh dGVyLCBTeXN0ZW0gViBSMyBlbnZpcm9ubWVudC4KKyNEb24ndCB1c2UgdGhlIG9wdGltaXplciAo LU8pLCBpdCBjYXVzZXMgcHJvYmxlbXMgYXQgcnVudGltZS4KK3NyMTAtczVyMzoKKwlAZWNobyBN YWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIEFwb2xsbyBTUjEwLjAgLyBTeXMgViBSMyAuLi4K KwkkKE1BS0UpIHdlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTPSAt RE5PRklMRUggLURTVlIzIC1EQVBPTExPU1IxMCAtRE5PTEVBUk4gJChLRkxBR1MpIFwKKwktVWFl Z2lzIC1VX19TVERDX18iCisKKyNBcG9sbG8gRG9tYWluL0lYICh1bnRlc3RlZCwgdHJ5IHRoaXMg aWYgc3IxMC1ic2QgZG9lc24ndCB3b3JrKQorIyAtRFRDUFNPQ0tFVCBjYW4gcHJvYmFibHkgYmUg YWRkZWQgaGVyZS4KK2Fwb2xsb2JzZDoKKwlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikg Zm9yIEFwb2xsbyBEb21haW4vSVguLi4KKwkkKE1BS0UpIHdlcm1pdCBLVEFSR0VUPSQke0tUQVJH RVQ6LSQoQCl9IFwKKwkiQ0M9IC9iaW4vY2MgIiAiQ0MyPSAvYmluL2NjICIgXAorCSJDRkxBR1M9 IC1ETk9GSUxFSCAtREJTRDQgLURBUE9MTE9CU0QgLUROT0xFQVJOICQoS0ZMQUdTKSAtVWFlZ2lz IgorCisjVmVyc2lvbiA3IFVuaXggKHNlZSBjb21tZW50cyBuZWFyIHRvcCBvZiBtYWtlZmlsZSkK K3Y3OgorCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgVU5JWCBWZXJzaW9uIDcu CisJQGVjaG8gUmVhZCB0aGUgbWFrZWZpbGUgaWYgeW91IGhhdmUgdHJvdWJsZSB3aXRoIHRoaXMu Li4KKwkkKE1BS0UpIHdlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdT PS1EVjcgLURQUk9DTkFNRT1cXFwiJChQUk9DKVxcXCIgXAorCS1EQk9PVE5BTUU9XFxcIiQoQk9P VEZJTEUpXFxcIiAtRE5QUk9DTkFNRT1cXFwiJChOUFJPQylcXFwiIFwKKwktRE5QVFlQRT0kKE5Q VFlQRSkgJChESVJFQ1QpIC1ET19SRFdSPTIgLURPX05ERUxBWT0wIC1ET19TQ0NTX0lEIFwKKwkt RE5PTEVBUk4gJChLRkxBR1MpIgorCisjQVQmVCBVTklYIFN5c3RlbSBWIFIzLCBzaWduYWwoKSBp cyB2b2lkIHJhdGhlciB0aGFuIGludC4KKyNVc2VzIGRpcmVudC5oIGFuZCBIb25leSBEYW5CZXIg VVVDUC4KKyNBZGQgdGhlIC1pIGxpbmsgb3B0aW9uIGlmIG5lY2Vzc2FyeS4KKyNJZiB5b3UgZ2V0 IGVycm9ycyBsaWtlICJ3c19yb3cgdW5kZWZpbmVkIiBpbiBja3V0aW8uYywgYWRkIC1ETk9OQVdT Lgorc3lzNXIzOgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIEFUJlQgVU5J WCBTeXN0ZW0gViBSMy4uLicKKwkkKE1BS0UpIHdlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQo QCl9IFwKKwkiQ0ZMQUdTPSAtRFNWUjMgLURESVJFTlQgLURIREJVVUNQIC1ETk9MRUFSTiAkKEtG TEFHUykgLU8iIFwKKwkiTE5LRkxBR1M9IgorCisjQXMgYWJvdmUsIHBsdXMgY3Vyc2VzLgorc3lz NXIzYzoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBBVCZUIFVOSVggU3lz dGVtIFYgUjMgKyBjdXJzZXMuLi4nCisJJChNQUtFKSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VU Oi0kKEApfSBcCisJIkNGTEFHUz0gLURTVlIzIC1ERElSRU5UIC1ESERCVVVDUCAtRENLX0NVUlNF UyAtRE5PTkFXUyAtRE5PTEVBUk4gXAorCSQoS0ZMQUdTKSAtTyIgIkxOS0ZMQUdTPSIgIkxJQlMg PSAtbHRlcm1saWIiCisKKyNTeXN0ZW0gViBSMy4yIGZvciBQQ3MgYnVpbHQgb24gSW50ZXJhY3Rp dmUgVU5JWCBTVi8zODYgUjQueAorI2J1dCB3aXRoIGFsbCBjYWxscyB0byBkdXAyKCkgZGlzYWJs ZWQgYmVjYXVzZSBnZW5lcmljIFNWUjMgZG9lcyBub3QgaGF2ZSBkdXAyLgorIyAoVGhlIC1saW5l dCBsaWJyYXJ5IG1pZ2h0IG5vdCBuZWVkIHRvIGJlIGluIHRoaXMgb25lLikKK3N5czVyMzJpczoK KwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTeXN0ZW0gVi8zODYgUjMyCisJ JChNQUtFKSB3ZXJtaXQgQ0M9IiQoQ0MpIiBDQzI9IiQoQ0MyKSIgXAorCSJDRkxBR1MgPSAtRFNW UjMgLURESVJFTlQgLURIREJVVUNQIC1PIC1ETk9DU0VUUyAtRE5PUkVBTFBBVEggXAorCS1EVUlE X1Q9dXNob3J0IC1ER0lEX1Q9dXNob3J0IC1ESTM4NklYIC1EU1ZSM0pDIC1EQ0tfQ1VSU0VTIC1E Tk9OQVdTIFwKKwktRFBPU0lYX0pDIC1EQ0tfUkVESVIgLURDS19QT0xMIC1ERENMR0VUQ1dEIC1E Tk9GRFpFUk8gLUROT1JFRElSRUNUIFwKKwktRE5PWkVYRUMgLUROT0xFQVJOICQoS0ZMQUdTKSIg IkxJQlM9LWxjdXJzZXMgLWxjX3MgLWxpbmV0IgorCisjU3lzdGVtIFYgUjMuMiBmb3IgUENzIGJ1 aWx0IG9uIEludGVyYWN0aXZlIFVOSVggU1YvMzg2IFI0LngKKyNidXQgd2l0aCBhbGwgY2FsbHMg dG8gZHVwMigpIGRpc2FibGVkIGJlY2F1c2UgZ2VuZXJpYyBTVlIzIGRvZXMgbm90IGhhdmUgZHVw Mi4KKyNXaXRoIFRDUC9JUCBhZGRlZC4KK3N5czVyMzJpc25ldDoKKwlAZWNobyAnTWFraW5nIEMt S2VybWl0ICQoQ0tWRVIpIGZvciBTeXN0ZW0gVi8zODYgUjMyICsgVENQL0lQCisJJChNQUtFKSB3 ZXJtaXQgQ0M9IiQoQ0MpIiBDQzI9IiQoQ0MyKSIgXAorCSJDRkxBR1MgPSAtRFNWUjMgLURESVJF TlQgLURIREJVVUNQIC1PIC1ETk9DU0VUUyAtRE5PUkVBTFBBVEggXAorCS1EVUlEX1Q9dXNob3J0 IC1ER0lEX1Q9dXNob3J0IC1ESTM4NklYIC1EU1ZSM0pDIC1EQ0tfQ1VSU0VTIC1ETk9OQVdTIFwK KwktRFBPU0lYX0pDIC1EQ0tfUkVESVIgLURDS19QT0xMIC1ERENMR0VUQ1dEIC1ETk9GRFpFUk8g LUROT1JFRElSRUNUIFwKKwktRE5PTEVBUk4gLUROT1pFWEVDIC1EVENQU09DS0VUICQoS0ZMQUdT KSIgIkxJQlM9LWxjdXJzZXMgLWxjX3MgLWxpbmV0IgorCitpY2xzeXM1cjM6CisJbWFrZSBzeXM1 cjMgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBLRkxBR1M9LURJQ0xTVlIzCisKKyNBVCZUIFVO SVggU3lzdGVtIFYgUjMuICBBcyBhYm92ZSwgYnV0IG5vIEFOU0kgcHJvdG90eXBpbmcuCitzeXM1 cjNuYToKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBBVCZUIFVOSVggU3lz dGVtIFYgUjMuLi4nCisJJChNQUtFKSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBc CisJIkNGTEFHUz0gLURTVlIzIC1ERElSRU5UIC1ESERCVVVDUCAtRE5PQU5TSSAtRE5PTEVBUk4g JChLRkxBR1MpIC1PIiBcCisJIkxOS0ZMQUdTPSIKKworI0FUJlQgVU5JWCBTeXN0ZW0gViBSMywg Zm9yIDNCIGNvbXB1dGVycyB3aXRoIFdvbGxvbmdvbmcgVENQL0lQLgorc3lzNXIzbmV0M2I6CisJ QGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgQVQmVCBVTklYIFNWUjMvM0IvV29s bG9uZ29uZy4uLicKKwkkKE1BS0UpIHdlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwK KwkiQ0ZMQUdTID0gLURTVlIzIC1ERElSRU5UIC1ESERCVVVDUCAtRFdPTExPTkdPTkcgLUROT0xF QVJOICQoS0ZMQUdTKSBcCisJLU8iICJMSUJTPSAtbG5ldCAtbG5zbF9zIiAiTE5LRkxBR1MgPSIK KworI0FUJlQgVU5JWCBTeXN0ZW0gViBSMywgc2lnbmFsKCkgaXMgdm9pZCByYXRoZXIgdGhhbiBp bnQuCisjVXNlcyBkaXJlbnQuaCBhbmQgSG9uZXkgRGFuQmVyIHV1Y3AsIGhhcyA8dGVybWlveC5o Pi4KKyNIYXMgPHRlcm1pb3guaD4gZm9yIFJUUy9DVFMgZmxvdyBjb250cm9sLgorc3lzNXIzdHg6 CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgQVQmVCBVTklYIFN5c3RlbSBW IFIzLi4uJworCSQoTUFLRSkgd2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJD RkxBR1MgPSAtRFNWUjMgLURESVJFTlQgLURIREJVVUNQIC1EVEVSTUlPWCAtRE5PTEVBUk4gXAor CSQoS0ZMQUdTKSAtaSAtTyIgIkxOS0ZMQUdTID0iCisKKyNBVCZUIFVOSVggU3lzdGVtIFYgUjMs IHNpZ25hbCgpIGlzIHZvaWQgcmF0aGVyIHRoYW4gaW50LgorI1VzZXMgZGlyZW50LmggYW5kIEhv bmV5IERhbkJlciB1dWNwLCBoYXMgPHRlcm1pb3guaD4uCisjSGFzIDxzeXMvdGVybWlveC5oPiBm b3IgUlRTL0NUUyBmbG93IGNvbnRyb2wuCitzeXM1cjNzeDoKKwlAZWNobyAnTWFraW5nIEMtS2Vy bWl0ICQoQ0tWRVIpIGZvciBBVCZUIFVOSVggU3lzdGVtIFYgUjMuLi4nCisJJChNQUtFKSB3ZXJt aXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUyA9IC1EU1ZSMyAtRERJUkVO VCAtREhEQlVVQ1AgLURTVEVSTUlPWCAtRE5PTEVBUk4gXAorCSQoS0ZMQUdTKSAtaSAtTyIgIkxO S0ZMQUdTID0iCisKKyNBVCZUIFVOSVggU3lzdGVtIFYgUjQuCisjSGFzIDx0ZXJtaW94Lmg+Lgor c3lzNXI0OgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIEFUJlQgVU5JWCBT eXN0ZW0gViBSNC4uLicKKwkkKE1BS0UpIHdlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9 IFwKKwkiQ0ZMQUdTID0gLU8gLURTVlI0IC1ERElSRU5UIC1ESERCVVVDUCAtRFRFUk1JT1ggLURO T0xFQVJOICQoS0ZMQUdTKSIgXAorCSJMTktGTEFHUyA9IC1zIgorCisjQVQmVCBVTklYIFN5c3Rl bSBWIFI0IHdpdGggV29sbG9uZ29uZyBUQ1AvSVAuCisjSGFzIDx0ZXJtaW94Lmg+Lgorc3lzNXI0 bmV0OgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFN5c3RlbSBWIFI0ICsg V29sbG9uZ29uZyBUQ1AvSVAuLi4nCisJQGVjaG8gJyBJZiBzb2NrZXRzLWxpYnJhcnkgcm91dGlu ZXMgYXJlIG1pc3NpbmcgYXQgbGluayB0aW1lLCB0aGVuJworCUBlY2hvICcgdHJ5IHRoZSBzeXM1 cjRuZXQyIGVudHJ5LicKKwkkKE1BS0UpIHdlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9 IFwKKwkiQ0ZMQUdTID0gLU8gLURTVlI0IC1ERElSRU5UIC1ESERCVVVDUCAtRE5PTEVBUk4gXAor CS1EVEVSTUlPWCAtRFdPTExPTkdPTkcgJChLRkxBR1MpIiAiTE5LRkxBR1MgPSAtcyIKKworI0Fz IGFib3ZlLCBidXQgbmVlZHMgbGlicyBpbmNsdWRlZC4KK3N5czVyNG5ldDI6CisJQGVjaG8gJyBQ TEVBU0UgUkVBRCBja3VpbnMudHh0IElGIFlPVSBHRVQgTUlTU0lORyBIRUFERVIgRklMRVMuJwor CUBlY2hvICcgKFNlYXJjaCBmb3IgV09MTE9OR09ORy4uLiknCisJJChNQUtFKSBzeXM1cjRuZXQg S1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSAiTElCUz0gLWxzb2NrZXQgLWxuc2wiCisKKyNBcyBh Ym92ZSBwbHVzIGN1cnNlcy4KK3N5czVyNG5ldDJjOgorCWVjaG8gJ01ha2luZyBDLUtlcm1pdCAk KENLVkVSKSBmb3IgU3lzdGVtIFYgUjQgKyBXb2xsb25nb25nIFRDUC9JUC4uLicKKwlAZWNobyAn IFBMRUFTRSBSRUFEIGNrdWlucy50eHQgSUYgWU9VIEdFVCBNSVNTSU5HIEhFQURFUiBGSUxFUy4n CisJQGVjaG8gJyAoU2VhcmNoIGZvciBXT0xMT05HT05HLi4uKScKKwkkKE1BS0UpIHdlcm1pdCBL VEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTID0gLU8gLURTVlI0IC1ERElSRU5U IC1ESERCVVVDUCAtRE5PTEVBUk4gXAorCS1EVEVSTUlPWCAtRFdPTExPTkdPTkcgLURDS19DVVJT RVMgJChLRkxBR1MpIiAiTE5LRkxBR1MgPSAtcyIgXAorCSJMSUJTPSAtbHNvY2tldCAtbG5zbCAt bGN1cnNlcyIKKworI0RFTEwgVU5JWCBTeXN0ZW0gViBSNC4KKyNIYXMgPHN5cy90ZXJtaW94Lmg+ LCByZWd1bGFyIEJlcmtlbGV5IHNvY2tldHMgbGlicmFyeSwgaS5lLiBpbi5oIGFuZCBpbmV0LmgK KyNhcmUgbm90IG1pc3BsYWNlZCBpbiBzeXMgKHJhdGhlciB0aGFuIG5ldGluZXQgYW5kIGFycGEs IHJlc3BlY3RpdmVseSkuCisjVXNlcyBBTlNJIEMgY29uc3RydWN0cywgYWR2aXNvcnkgZmlsZSBs b2NraW5nIG9uIGRldmljZXMsIGV0Yy4KKyNXYXJuaW5nOiAtRFNURVJNSU9YIGVuYWJsZXMgaGFy ZHdhcmUgZmxvdyBjb250cm9sIChSVFMvQ1RTKSwgYnV0IHJlcG9ydGVkbHkKKyN0aGlzIGRvZXMg bm90IHdvcmsgd2l0aCB0aGUgbm9ybWFsIGRyaXZlcnMuICBIb3dldmVyLCBpdCBtaWdodCBzdGls bCB3b3JrCisjb24gbm9uLURlbGwgc3lzdGVtcywgb3IgZXZlbiBEZWxsIHN5c3RlbXMgd2l0aCBk aWZmZXJlbnQgZHJpdmVycyBpbnN0YWxsZWQuCitkZWxsc3lzNXI0OgorCUBlY2hvICdNYWtpbmcg Qy1LZXJtaXQgJChDS1ZFUikgZm9yIERFTEwgVU5JWCBTeXN0ZW0gViBSNC4uLicKKwkkKE1BS0Up IHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTID0gLU8gLURTVlI0 IC1EREVMTF9TVlI0IC1ERElSRU5UIC1ESERCVVVDUCBcCisJLURUQ1BTT0NLRVQgLURTVEVSTUlP WCAtRENLX1BPTEwgJChLRkxBR1MpIiBcCisJIkxJQlM9IC1sc29ja2V0IC1sbnNsIiAiTE5LRkxB R1MgPSAtcyIKKworI0FzIGFib3ZlLCBjdXJzZXMgc3VwcG9ydCBhZGRlZC4uLgorZGVsbHN5czVy NGM6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgREVMTCBVTklYIFN5c3Rl bSBWIFI0Li4uJworCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAor CSJDRkxBR1MgPSAtTyAtRFNWUjQgLURERUxMX1NWUjQgLURESVJFTlQgLURIREJVVUNQIFwKKwkt RFRDUFNPQ0tFVCAtRFNURVJNSU9YIC1EQ0tfQ1VSU0VTIC1EQ0tfUE9MTCBcCisJJChLRkxBR1Mp IiAiTElCUz0gLWxzb2NrZXQgLWxuc2wgLWxjdXJzZXMgLWx0ZXJtY2FwIiAiTE5LRkxBR1MgPSAt cyIKKworI01pbmltdW0gaW50ZXJhY3RpdmU6IEFzIGFib3ZlLCBidXQgd2l0aCBldmVyeSBjb25j ZWl2YWJsZSBvcHRpb24gcmVtb3ZlZC4KK2RlbGxzeXM1cjRtaToKKwlAZWNobyAnTWFraW5nIEMt S2VybWl0ICQoQ0tWRVIpIGZvciBERUxMIFVOSVggU3lzdGVtIFYgUjQuLi4nCisJQGVjaG8gJ01p bmltdW0tc2l6ZSBpbnRlcmFjdGl2ZScKKwkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJH RVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTID0gLU8gLURTVlI0IC1EREVMTF9TVlI0IC1ERElSRU5UIFwK KwktVVRDUFNPQ0tFVCAtRE5PQ01ETCAtRE5PU1BMIC1ETk9YTUlUIC1EQ0tfUE9MTCBcCisJLURO T01TRU5EIC1ETk9GUklMTFMgLUROT0RJQUwgLUROT0hFTFAgLUROT0RFQlVHIC1ETk9UTE9HIFwK KwktRE5PU0NSSVBUIC1ETk9DU0VUUyAtRE5PU0hPVyAtRE5PU0VUS0VZIC1ETk9TRVJWRVIgLURO T1VVQ1AgXAorCS1ETk9QVVNIIC1ETk9NRE1IVVAgLUROT0pDIC1ETk9GRFpFUk8gLUROT0VTQ1NF USAgXAorCSQoS0ZMQUdTKSIgIkxOS0ZMQUdTID0gLXMiCisKKyNDb21tYW5kLWxpbmUgb25seSB2 ZXJzaW9uLgorZGVsbHN5czVyNG06CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBm b3IgREVMTCBVTklYIFN5c3RlbSBWIFI0Li4uJworCUBlY2hvICdDb21tYW5kLWxpbmUgb25seScK KwkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTID0g LU8gLURTVlI0IC1EREVMTF9TVlI0IC1ERElSRU5UIFwKKwktVVRDUFNPQ0tFVCAtRE5PSUNQIC1E Tk9GUklMTFMgLUROT0RJQUwgLUROT0RFQlVHIC1ETk9UTE9HIC1ETk9DU0VUUyBcCisJLUROT1NF VEtFWSAtRE5PRVNDU0VRIC1ETk9KQyAtRE5PRkRaRVJPIC1EQ0tfUE9MTCBcCisJJChLRkxBR1Mp IiAiTE5LRkxBR1MgPSAtcyIKKworI0FUJlQgVU5JWCBTeXN0ZW0gViBSNC4KKyNIYXMgPHN5cy90 ZXJtaW94Lmg+Lgorc3lzNXI0c3g6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBm b3IgQVQmVCBVTklYIFN5c3RlbSBWIFI0Li4uJworCSQoTUFLRSkgd2VybWl0IEtUQVJHRVQ9JCR7 S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1MgPSAtTyAtRFNWUjQgLURESVJFTlQgLURIREJVVUNQ IC1EU1RFUk1JT1ggLUROT0xFQVJOIFwKKwkkKEtGTEFHUykiICJMTktGTEFHUyA9IC1zIiAiTElC Uz0kKExJQlMpIgorCisjQVQmVCBVTklYIFN5c3RlbSBWIFI0LgorI0hhcyA8c3lzL3Rlcm1pb3gu aD4sIHJlZ3VsYXIgQmVya2VsZXkgc29ja2V0cyBsaWJyYXJ5LCBpLmUuIGluLmggYW5kIGluZXQu aAorI2FyZSBub3QgbWlzcGxhY2VkIGluIHN5cyAocmF0aGVyIHRoYW4gbmV0aW5ldCBhbmQgYXJw YSwgcmVzcGVjdGl2ZWx5KS4KKyNVc2VzIEFOU0kgQyBjb25zdHJ1Y3RzLCA8c3lzL3Rlcm1pb3gu aD4sIGV0YyBldGMuCitzeXM1cjRzeHRjcDoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tW RVIpIGZvciBBVCZUIFVOSVggU3lzdGVtIFYgUjQuLi4nCisJJChNQUtFKSB4ZXJtaXQgS1RBUkdF VD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUyA9IC1PIC1EU1ZSNCAtRERJUkVOVCAtREhE QlVVQ1AgXAorCS1EU1RFUk1JT1ggLURUQ1BTT0NLRVQgJChLRkxBR1MpIiBcCisJIkxJQlM9IC1s c29ja2V0IC1sbnNsICQoTElCUykiICJMTktGTEFHUz0gLXMiCisKKyNBVCZUIFVOSVggU3lzdGVt IFYgUjQuCisjQXMgYWJvdmUgKyBjdXJzZXMuCitzeXM1cjRzeHRjcGM6CisJQGVjaG8gJ01ha2lu ZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgQVQmVCBVTklYIFN5c3RlbSBWIFI0Li4uJworCSQoTUFL RSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1MgPSAtTyAtRFNW UjQgLURESVJFTlQgLURIREJVVUNQIFwKKwktRFNURVJNSU9YICAtRENLX0NVUlNFUyAtRFRDUFNP Q0tFVCAkKEtGTEFHUykiIFwKKwkiTElCUz0gLWxzb2NrZXQgLWxuc2wgLWxjdXJzZXMgLWx0ZXJt Y2FwICQoTElCUykiICJMTktGTEFHUyA9IC1zIgorCisjQVQmVCBVTklYIFN5c3RlbSBWIFI0LiAg Q09OU0VOU1lTIFNWUjQuMi0xLgorI0hhcyA8c3lzL3Rlcm1pb3guaD4sIHJlZ3VsYXIgQmVya2Vs ZXkgc29ja2V0cyBsaWJyYXJ5LCBpLmUuIGluLmggYW5kIGluZXQuaAorI2FyZSBub3QgbWlzcGxh Y2VkIGluIHN5cyAocmF0aGVyIHRoYW4gbmV0aW5ldCBhbmQgYXJwYSwgcmVzcGVjdGl2ZWx5KS4K KyNVc2VzIEFOU0kgQyBjb25zdHJ1Y3RzLCA8c3lzL3Rlcm1pb3guaD4sIGV0Yy4KKyMgRnVsbHNj cmVlbiAtRENLX0NVUlNFUyBhZGRlZCAod2l0aCBjdXJzZXMgJiB0ZXJtY2FwIGxpYnMpCisjIFN1 Ym1pc3Npb24gYnkgUm9iZXJ0IFdlaW5lci9Qcm9ncmFtbWluZyBQbHVzLCByd2VpbmVyQHdhdHN1 bi5jYy5jb2x1bWJpYS5lZHUKK3N5czVyNHN4dGNwZjoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0 ICQoQ0tWRVIpIGZvciBBVCZUIFVOSVggU3lzdGVtIFYgUjQuLi4nCisJJChNQUtFKSB4ZXJtaXQg S1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUyA9IC1PIC1EU1ZSNCAtRERJUkVO VCAtREhEQlVVQ1AgXAorCS1EU1RFUk1JT1ggLURUQ1BTT0NLRVQgLURDS19DVVJTRVMgJChLRkxB R1MpIiBcCisJIkxJQlM9IC1sc29ja2V0IC1sbnNsIC1ML3Vzci9jY3MvbGliIC1sY3Vyc2VzIC1s dGVybWNhcCIgXAorCSJMSUJTPSQoTElCUykiICJMTktGTEFHUyA9IC1zIgorCisjU21hbGxlc3Qg cG9zc2libGUgdmVyc2lvbiBmb3IgU3lzdGVtIFYgUjQKK3M1cjRtOgorCUBlY2hvIE1pbmltdW0g c2l6ZQorCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgc3lzNXI0c3ggS1RBUkdFVD0kJHtLVEFSR0VU Oi0kKEApfSBcCisJIktGTEFHUz0kKEtGTEFHUykgLUROT0RJQUwgLUROT0hFTFAgLUROT0RFQlVH IC1ETk9UTE9HIFwKKwktRE5PU0NSSVBUIC1ETk9DU0VUUyAtRE5PSUNQIC1ETk9NU0VORCAtVVRD UFNPQ0tFVCIgIkxOS0ZMQUdTID0gLXMiCisKKyNTbWFsbGVzdCBwb3NzaWJsZSBpbnRlcmFjdGl2 ZSB2ZXJzaW9uIG9mIGFib3ZlCitzNXI0bWk6CisJQGVjaG8gTWluaW11bSBpbnRlcmFjdGl2ZQor CSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgc3lzNXI0c3ggXAorCSJLRkxBR1M9LUROT1NQTCAtRE5P WE1JVCAtRE5PTVNFTkQgLUROT0ZSSUxMUyAtRE5PU0hPVyBcCisJLUROT0RJQUwgLUROT0hFTFAg LUROT0RFQlVHIC1ETk9UTE9HIC1ETk9TQ1JJUFQgLUROT0NTRVRTIC1ETk9TRVRLRVkgXAorCS1V VENQU09DS0VUICQoS0ZMQUdTKSIgIkxOS0ZMQUdTID0gLXMiCisKKyNBVCZUIFVOSVggU3lzdGVt IFYgUjQsIGhhcyA8c3lzL3Rlcm1pb3guaD4KKyNBTlNJIEMgZnVuY3Rpb24gcHJvdG90eXBpbmcg ZGlzYWJsZWQuCitzeXM1cjRzeG5hOgorCUBlY2hvIE5vIEFOU0kgQyBwcm90b3R5cGluZy4uLgor CSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgc3lzNXI0c3ggS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEAp fSBcCisJIktGTEFHUz0kKEtGTEFHUykgLUROT0FOU0kiCisKKyNTdHJhdHVzIEZUWC4KK2Z0eDoK KwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTdHJhdHVzIEZUWCAzLnguLi4n CisJJChNQUtFKSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUyA9 IC1PIC1EU1ZSNCAtREZUWCAtRERJUkVOVCAtREhEQlVVQ1AgLURTVEVSTUlPWCBcCisJLUROT0dF VFVTRVJTSEVMTCAtRE5PTEVBUk4gK0RBMS4xICQoS0ZMQUdTKSIgXAorCSJMTktGTEFHUyA9IC1z IiAiTElCUz0kKExJQlMpIgorCisjU3RyYXR1cyBGVFggKyBUQ1AvSVAuCitmdHh0Y3A6CisJQGVj aG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgU3RyYXR1cyBGVFggMy54Li4uJworCSQo TUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1MgPSAtTyAt RFNWUjQgLURGVFggLURESVJFTlQgLURIREJVVUNQIC1ETk9HRVRVU0VSU0hFTEwgXAorCS1EU1RF Uk1JT1ggLURUQ1BTT0NLRVQgLUROT19ETlNfU1JWICtEQTEuMSAkKEtGTEFHUykiIFwKKwkiTElC Uz0gLWxzb2NrZXQgLWxuc2wgJChMSUJTKSIgIkxOS0ZMQUdTPSAtcyIKKworI05DUiBNUC1SQVMg Mi4wMyBvciAzLjAyCittcHJhczoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZv ciBOQ1IgTVAtUkFTLi4uJworCSQoTUFLRSkgd2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChA KX0gXAorCSJDRkxBR1MgPSAtTyAtRFNWUjQgLUROQ1JNUFJBUyAtRERJUkVOVCAtREhEQlVVQ1Ag LURTVEVSTUlPWCBcCisJLUROT0dFVFVTRVJTSEVMTCAtRFVTRV9GSUxFX19DTlQgLUROT0xFQVJO IC1ETk9fRE5TX1NSViAkKEtGTEFHUykiIFwKKwkiTE5LRkxBR1MgPSAtcyIgIkxJQlM9JChMSUJT KSIKKworI05DUiBNUC1SQVMgMi4wMyBvciAzLjAyIHdpdGggVENQL0lQIGFuZCBjdXJzZXMKK21w cmFzdGNwYzoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBOQ1IgTVAtUkFT ICsgVENQL0lQICsgY3Vyc2VzLi4uJworCSQoTUFLRSkgd2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdF VDotJChAKX0gIkNGTEFHUz0tRFRDUFNPQ0tFVCBcCisJLURDS19DVVJTRVMgLURTVlI0IC1ETkNS TVBSQVMgLURESVJFTlQgLURIREJVVUNQIC1EU1RFUk1JT1ggLUROT0xFQVJOIFwKKwktRE5PR0VU VVNFUlNIRUxMIC1ETk9fRE5TX1NSViBEVVNFX0ZJTEVfX0NOVCAtTyAkKEtGTEFHUykiIFwKKwki TE5LRkxBR1MgPSAtcyIgIkxJQlM9IC1sc29ja2V0IC1sbnNsIC1sY3Vyc2VzIC1sdGVybWNhcCAk KExJQlMpIgorCisjU0lOSVgtTCBWNS40MSAtIGluY2x1ZGVzIGN1cnNlcywgdGNwL2lwIC0gVXNl IHRoaXMgb25lIGZvciBpMzg2LgorI1RoaXMgdmVyc2lvbiBvZiBTSU5JWCBkb2Vzbid0IGxpa2Ug ZmRvcGVuKCkgb3IgcG9wZW4oKS4KK3Npbml4NTQxOgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQg JChDS1ZFUikgZm9yIFNpZW1lbnMvTml4ZG9yZiBTSU5JWCBWNS40MS9pMzg2JworCSQoTUFLRSkg Y2tjcHJvLiQoRVhUKSAiQ0ZMQUdTID0gLURTSU5JWCAtRFNWUjQgLURESVJFTlQgLURIREJVVUNQ IFwKKwktRFNURVJNSU9YIC1EQ0tfQ1VSU0VTIC1EVENQU09DS0VUIC1EU0VMRUNUIC1EQ0tfQU5T SUMgLUROT19ETlNfU1JWIFwKKwktRFNOSTU0MSAtRE5PR0VUVVNFUlNIRUxMIC1ETk9ORVRDTUQg LUROT1BPUEVOIC1rYW5zaSAtVzAgJChLRkxBR1MpIgorCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9 JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1MgPSAtRFNJTklYIC1EU1ZSNCAtRERJUkVOVCAt REhEQlVVQ1AgLUROT19ETlNfU1JWIC1ETk9QT1BFTiBcCisJLURGTkZMT0FUIC1EU1RFUk1JT1gg LURDS19DVVJTRVMgLURUQ1BTT0NLRVQgLURTRUxFQ1QgLURDS19BTlNJQyBcCisJLURTTkk1NDEg LUROT0dFVFVTRVJTSEVMTCAtRE5PTkVUQ01EIC1rYW5zaSAtVzAgLU8gJChLRkxBR1MpIiBcCisJ IkxJQlM9IC1sc29ja2V0IC1sbnNsIC1sY3Vyc2VzIC1sdGVybWNhcCAtbG0iICJMTktGTEFHUyA9 IC1zIgorCitzaW5peDU0MWk6CisJJChNQUtFKSAiTUFLRT0kKE1BS0UpIiAiS0ZMQUdTPSQoS0ZM QUdTKSIgc2luaXg1NDEKKworI1NJTklYIFY1LjQyIC0gaW5jbHVkZXMgY3Vyc2VzLCB0Y3AvaXAs IGV2ZXJ5dGhpbmcgLSBVc2UgdGhpcyBvbmUgZm9yIE1JUFMuCisjIEFzIG9mIEMtS2VybWl0IDcu MSwgb3B0aW1pemF0aW9uIHJlbW92ZWQgLS0gdGFrZXMgKGxpdGVyYWxseSkgZm9yZXZlci4KK3Np bml4NTQyOgorCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJD RkxBR1MgPSAtRFNJTklYIC1EU1ZSNCAtRERJUkVOVCAtREhEQlVVQ1AgLUROT19ETlNfU1JWIFwK KwktREZORkxPQVQgLURTVEVSTUlPWCAtRENLX0NVUlNFUyAtRFRDUFNPQ0tFVCAtRFNFTEVDVCAt RENLX0FOU0lDIFwKKwktRFNOSTU0MiAtRE5PR0VUVVNFUlNIRUxMIC1rYW5zaSAtVzAgJChLRkxB R1MpIiBcCisJIkxJQlM9IC1sc29ja2V0IC1sbnNsIC1sY3Vyc2VzIC1sdGVybWNhcCAtbG0iICJM TktGTEFHUyA9IC1zIgorCisjU0lOSVggVjUuNDIgZ2NjIC0gaW5jbHVkZXMgY3Vyc2VzLCB0Y3Av aXAsIGV2ZXJ5dGhpbmcuCisjVGhpcyBvbmUgd2FzIHVzZWQgdG8gYnVpbGQgdGhlIFB5cmFtaWQt YXJjaGl0ZWN0dXJlIFJNNjAwIHZlcnNpb24KKyNvbiBTSU5JWC1QIDUuNDIgQTEwIHdpdGggZ2Nj IGJ1dCBzaG91bGQgd29yayBmb3IgU0lOSVggNS40MiBvbiBhbnkgb3RoZXIKKyNhcmNoaXRlY3R1 cmUgd2l0aCBnY2MuCitzaW5peDU0Mmc6CisJJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFS R0VUOi0kKEApfSAiQ0M9Z2NjIiAiQ0MyPWdjYyIgXAorCSJDRkxBR1MgPSAtRFNJTklYIC1EU1ZS NCAtRERJUkVOVCAtREhEQlVVQ1AgLUROT19ETlNfU1JWIFwKKwktREZORkxPQVQgLURTVEVSTUlP WCAtRENLX0NVUlNFUyAtRFRDUFNPQ0tFVCAtRFNFTEVDVCAtRENLX0FOU0lDIFwKKwktRFNOSTU0 MiAtRE5PR0VUVVNFUlNIRUxMICQoS0ZMQUdTKSIgXAorCSJMSUJTPSAtbHNvY2tldCAtbG5zbCAt bGN1cnNlcyAtbHRlcm1jYXAgLWxtIiBcCisJIkxOS0ZMQUdTID0gLXMiCisKKyNTSU5JWCBWNS40 MiAtIGluY2x1ZGVzIGN1cnNlcywgdGNwL2lwLCBldmVyeXRoaW5nIC0gVXNlIHRoaXMgb25lIGZv ciBJbnRlbC4KKyMgKE5vdGU6IFNOSSBkaXNjb250aW51ZWQgSW50ZWwgc3VwcG9ydCBhZnRlciA1 LjQyLikKK3Npbml4NTQyaToKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBT aWVtZW5zL05peGRvcmYgU0lOSVgtWiBWNS40Mi4uLicKKwkkKE1BS0UpIHhlcm1pdCBLVEFSR0VU PSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTID0gLURTSU5JWCAtRFNWUjQgLURESVJFTlQg LURIREJVVUNQIC1ERk5GTE9BVCAtRFNURVJNSU9YIFwKKwktRENLX0NVUlNFUyAtRFRDUFNPQ0tF VCAtRFNFTEVDVCAtRENLX0FOU0lDIC1ETk9fRE5TX1NSViAta2Fuc2kgXAorCS1EU05JNTQyICQo S0ZMQUdTKSIgXAorCSJMSUJTPSAtbHNvY2tldCAtbG5zbCAtbGN1cnNlcyAtbHRlcm1jYXAgLWxt IiBcCisJIkxOS0ZMQUdTID0gLXMiCisKKyNTaWVtZW5zIE5peGRvcmYgUmVsaWFudCBVTklYIFY1 LjQzIC0gaW5jbHVkZXMgY3Vyc2VzLCB0Y3AvaXAsIGV2ZXJ5dGhpbmc6CisjIC4gZ2V0dGltZW9m ZGF5KCkgc3VkZGVubHkgaGFzIG9ubHkgb25lIGFyZyBpbnN0ZWFkIG9mIHR3byAoR1RPRE9ORUFS RykuCisjIC4gVGhlIHN5bnRheCBvZiB0aGUgT2xpbWl0IHNwZWNpZmllciBjaGFuZ2VkLgorIyAu IFRoZSBuYW1lIHdhcyBjaGFuZ2VkIGZyb20gU0lOSVggdG8gUmVsaWFudCBVTklYIGluIHZlcnNp b24gNS40M0MuCitzbmk1NDM6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3Ig U2llbWVucy9OaXhkb3JmIFJlbGlhbnQgVU5JWCBWNS40MycKKwkkKE1BS0UpIHhlcm1pdCBLVEFS R0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTID0gLURTSU5JWCAtRFNOSTU0MyAtRFNW UjQgLURESVJFTlQgLURIREJVVUNQIFwKKwktRFNURVJNSU9YIC1EQ0tfQ1VSU0VTIC1EVENQU09D S0VUIC1EU0VMRUNUIC1EQ0tfQU5TSUMgLURHVE9ET05FQVJHIFwKKwktRE5PX0ROU19TUlYgLWth bnNpIC1XMCAtTyAtRiBPbGltaXQsMzEwMCAkKEtGTEFHUykiIFwKKwkiTElCUz0gLWxzb2NrZXQg LWxuc2wgLWxjdXJzZXMgLWx0ZXJtY2FwIiAiTE5LRkxBR1MgPSAtcyIKKworI1NpZW1lbnMgTml4 ZG9yZiBSZWxpYW50IFVOSVggVjUuNDQgLSBMaWtlIDUuNDMgYnV0IHdpdGggZGlmZmVyZW50IGJh bm5lci4KK3NuaTU0NDoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTaWVt ZW5zL05peGRvcmYgUmVsaWFudCBVTklYIFY1LjQ0JworCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9 JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1MgPSAtRFNJTklYIC1EU05JNTQ0IC1EU1ZSNCAt RERJUkVOVCAtREhEQlVVQ1AgXAorCS1EU1RFUk1JT1ggLURDS19DVVJTRVMgLURUQ1BTT0NLRVQg LURTRUxFQ1QgLURDS19BTlNJQyAtREdUT0RPTkVBUkcgXAorCS1ETk9fRE5TX1NSViAta2Fuc2kg LVcwIC1PIC1LIE9saW1pdCwzMTAwICQoS0ZMQUdTKSIgXAorCSJMSUJTPSAtbHNvY2tldCAtbG5z bCAtbGN1cnNlcyAtbHRlcm1jYXAiICJMTktGTEFHUyA9IC1zIgorCisjQ29tbW9kb3JlIEFtaWdh IHdpdGggQVQmVCBVTklYIFN5c3RlbSBWIFI0IGFuZCBUQ1AvSVAgc3VwcG9ydC4KKyNIYXMgPHN5 cy90ZXJtaW94Lmg+Lgorc3ZyNGFtaWdhbmV0OgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChD S1ZFUikgZm9yIEFtaWdhIFNWUjQgKyBUQ1AvSVAuLi4nCisJJChNQUtFKSB4ZXJtaXQgS1RBUkdF VD0kJHtLVEFSR0VUOi0kKEApfSAiQ0M9Z2NjIiAiQ0MyPWdjYyIgXAorCSJDRkxBR1MgPSAtTyAt RFNWUjQgLURESVJFTlQgLURIREJVVUNQIC1EU1RFUk1JT1ggXAorCS1EVENQU09DS0VUIC1EQ0tf Q1VSU0VTICQoS0ZMQUdTKSIgIkxOS0ZMQUdTID0gLXMiIFwKKwkiTElCUyA9IC1sc29ja2V0IC1s bnNsIC1sdGVybWxpYiIKKworI1NDTyAoTm92ZWxsIChVbml2ZWwpKSBVbml4V2FyZSAxLnggb3Ig Mi4wLCBubyBUQ1AvSVAuCisjVGhpcyBhc3N1bWVzIHRoZSBOb3ZlbGwgU0RLIDEuMCwgd2hpY2gg aGFzIDxzeXMvdGVybWlveC5oPi4KKyNVbml4V2FyZSB1c2VycyB3aXRoIHRoZSAiUHJpbWUgVGlt ZSBGcmVld2FyZSIgQ0QtUk9NIFNESyB3aWxsIHByb2JhYmx5IGhhdmUKKyN0byB1c2UgdGhlIHN5 czVyNCBlbnRyeSAobm8gdGVybWlveC5oIGZpbGUsIHNvIG5vIGhhcmR3YXJlIGZsb3cgY29udHJv bCkuCisjQ2hhbmdlIC1EU0VMRUNUIHRvIC1EQ0tfUE9MTCBpZiAtRFNFTEVDVCBjYXVzZXMgcHJv YmxlbXMuCisjIE5PVEU6IFVuaXh3YXJlIDEueCBidWlsZHMgaGF2ZSBub3QgYmVlbiB0cmllZCBp biBDLUtlcm1pdCA3LjAuCit1bml4d2FyZToKKwkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIHN5czVy NHN4IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJLRkxBR1M9LURPTERfVU5JWFdBUkUg LURDS19ORVdURVJNIC1EU0VMRUNUIC1ETk9HRVRVU0VSU0hFTEwgXAorCS1ETk9TWVNMT0cgJChL RkxBR1MpIiAiTElCUz0tbGNyeXB0IgorCisjVW5peFdhcmUgMS54IG9yIDIuMCB3aXRoIFRDUC9J UCBhbmQgY3Vyc2VzLgorI2ZvcmsoKS1iYXNlZCBDT05ORUNUIC0gbm8gaGlnaCBzZXJpYWwgc3Bl ZWRzLgordW5peHdhcmVuZXRjOgorCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgc3lzNXI0c3h0Y3Bj IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJLRkxBR1M9LURPTERfVU5JWFdBUkUgLURD S19ORVdURVJNIC1EU0VMRUNUIC1ETk9HRVRVU0VSU0hFTEwgXAorCS1ETk9TWVNMT0cgJChLRkxB R1MpIiAiTElCUz0tbGNyeXB0IC1scmVzb2x2IgorCit1dzEwOgorCSQoTUFLRSkgdW5peHdhcmVu ZXRjIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gIktGTEFHUz0kKEtGTEFHUykiCisKKyNUaGlz IGlzIGZvciBVbml4d2FyZSAyLjAueCBvbmx5IC0gdXNlIHVuaXh3YXJlMjEgZm9yIFVXIDIuMS54 LgorI0hhcyBzcGVjaWFsIGxpYnJhcnkgc2VhcmNoIGFuZCBlbmFibGVzIHNwZWNpYWwga2x1ZGdl IGFyb3VuZCBsaWJyYXJ5CisjZm91bHVwIHJlZ2FyZGluZyB2Zm9yaygpICh3aGljaCBLZXJtaXQg ZG9lc24ndCB1c2UpLiAgRm9yY2VzIFBPU0lYLXN0eWxlCisjaGFuZ3VwLgordW5peHdhcmUyMDoK KwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBVbml4V2FyZSAyLjAueC4uLicK KwkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTID0g LU8gLURPTERfVU5JWFdBUkUgLURVTklYV0FSRTIgLURTRUxFQ1QgLURTVlI0IC1ERElSRU5UIFwK KwktREhEQlVVQ1AgLURCSUdCVUZPSyAtRE5PR0VUVVNFUlNIRUxMIC1EU1RFUk1JT1ggIC1EQ0tf Q1VSU0VTIFwKKwktRFRDUFNPQ0tFVCAtRFVXMjAwIC1ERk5GTE9BVCAtRENLX05FV1RFUk0gLURO T1NZU0xPRyAkKEtGTEFHUykiIFwKKwkiTElCUz0gLWxzb2NrZXQgLWxuc2wgLWxjdXJzZXMgLWx0 ZXJtY2FwIC1sY3J5cHQgLWxnZW4gLWxtIC1scmVzb2x2IiBcCisJIkxOS0ZMQUdTID0gLXMiCisK K3V3MjA6CisJJChNQUtFKSB1bml4d2FyZTIwIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gIktG TEFHUz0kKEtGTEFHUykiCisKKyNBZGRzIGJpZyBidWZmZXJzICgibGFyZ2UgbWVtb3J5IG1vZGVs IikgLSBvdGhlcndpc2UgdGhlIHNhbWUgYXMgVW5peFdhcmUgMS54LgordW5peHdhcmUyMToKKwlA ZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBVbml4V2FyZSAyLjEueC4uLicKKwkk KE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTID0gLU8g LURVTklYV0FSRSAtRFNFTEVDVCAtRFNWUjQgLURESVJFTlQgLURIREJVVUNQIC1EQklHQlVGT0sg XAorCS1ETk9TWVNMT0cgLURTVEVSTUlPWCAgLURDS19DVVJTRVMgLURUQ1BTT0NLRVQgXAorCS1E Q0tfTkVXVEVSTSAtREZORkxPQVQgLURVTklYV0FSRTIgJChLRkxBR1MpIiBcCisJIkxJQlM9IC1s c29ja2V0IC1sbnNsIC1sY3Vyc2VzIC1sdGVybWNhcCAtbGNyeXB0IC1sbSAtbHJlc29sdiBcCisJ JChMSUJTKSIgIkxOS0ZMQUdTID0gLXMiCisKKyNVbml4d2FyZSAyLjEuMAordXcyMToKKwkkKE1B S0UpIHVuaXh3YXJlMjEgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSAiS0ZMQUdTPSQoS0ZMQUdT KSIKKworI1VuaXh3YXJlIDIuMS4zCit1dzIxMzoKKwkkKE1BS0UpIHVuaXh3YXJlMjEgS1RBUkdF VD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIktGTEFHUz0tRFVTRV9GSUxFX19DTlQgJChLRkxBR1Mp IgorCisjVW5peHdhcmUgMi4xIHdpdGggSUtTRCBzdXBwb3J0Cit1dzIxaWtzZDoKKwkkKE1BS0Up IHVuaXh3YXJlMjEgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIktGTEFHUz0tRENLX1NI QURPVyAkKEtGTEFHUykiICJMSUJTPSAtbGdlbiIKKworI1VuaXhXYXJlIDcgd2l0aCB0Y1tnc11l dHNwZWVkKCkgaGlnaCBzZXJpYWwgc3BlZWRzICYgc2VsZWN0KCktYmFzZWQgQ09OTkVDVAorI2Fu ZCBhcyBvZiBDLUtlcm1pdCA4LjAuMjEyLCBsYXJnZSBmaWxlIHN1cHBvcnQgKExGUykuCisjTk9U RTogVGhpcyBpcyB0aGUgb25lIHdlIHVzZS4KK3VuaXh3YXJlN3Q6CisJQGVjaG8gJ01ha2luZyBD LUtlcm1pdCAkKENLVkVSKSBmb3IgVW5peFdhcmUgNyB3aXRoIFBPU0lYIGkvby4uLicKKwkkKE1B S0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTID0gLU8gLURV TklYV0FSRSAtRFNFTEVDVCAtRFNWUjQgLURESVJFTlQgLURIREJVVUNQIC1EQklHQlVGT0sgXAor CS1ERk5GTE9BVCAtRE5PR0VUVVNFUlNIRUxMIC1EU1RFUk1JT1ggLURDS19DVVJTRVMgLURUQ1BT T0NLRVQgLURQT1NJWCBcCisJLURVVzcgLURVU0VUQ1NFVFNQRUVEIC1EQ0tfTkVXVEVSTSAtRE5P TFNUQVQgLUREQ0xUSU1FVkFMIFwKKwktRF9MQVJHRUZJTEVfU09VUkNFIC1EX0ZJTEVfT0ZGU0VU X0JJVFM9NjQgLURORUVETURNREVGUyAkKEtGTEFHUykiIFwKKwkiTElCUz0tbHNvY2tldCAtbG5z bCAtbGN1cnNlcyAtbHRlcm1jYXAgLWxjcnlwdCAtbG0gLWxyZXNvbHYgJChMSUJTKSIgXAorCSJM TktGTEFHUyA9IC1zIgorCisjVW5peFdhcmUgNyAtIHNlbGVjdCgpLWJhc2VkIENPTk5FQ1QgLSBu byBQT1NJWCBpL28gLSBubyBoaWdoIHNlcmlhbCBzcGVlZHMuCisjSW4gb3RoZXIgd29yZHMsIGp1 c3QgbGlrZSB0aGUgVW5peFdhcmUgMSBhbmQgMiBidWlsZHMuCit1bml4d2FyZTd4OgorCUBlY2hv ICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFVuaXhXYXJlIDcuLi4nCisJJChNQUtFKSB4 ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUyA9IC1PIC1EVU5JWFdB UkUgLURTRUxFQ1QgLURTVlI0IC1ERElSRU5UIC1ESERCVVVDUCAtREJJR0JVRk9LIFwKKwktRFVX NyAtRE5PR0VUVVNFUlNIRUxMIC1EU1RFUk1JT1ggLURDS19DVVJTRVMgLURUQ1BTT0NLRVQgLURO T0xTVEFUIFwKKwktREZORkxPQVQgLURDS19ORVdURVJNICQoS0ZMQUdTKSIgXAorCSJMSUJTPS1s c29ja2V0IC1sbnNsIC1sY3Vyc2VzIC1sdGVybWNhcCAtbGNyeXB0IC1sbSAtbHJlc29sdiAkKExJ QlMpIiBcCisJIkxOS0ZMQUdTID0gLXMiCisKKyNVbml4V2FyZSA3IHdpdGggUE9TSVggY2ZzZXRb b2ldc3BlZWQoKSB0byBhbGxvdyBoaWdoIHNlcmlhbCBzcGVlZHMuCisjKGJ1dCB0aGUgaGlnaCBz cGVlZHMgZG9uJ3Qgd29yaykKK3VuaXh3YXJlN3A6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAk KENLVkVSKSBmb3IgVW5peFdhcmUgNyB3aXRoIFBPU0lYIGkvby4uLicKKwkkKE1BS0UpIHhlcm1p dCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTID0gLU8gLURVTklYV0FSRSAt RFNFTEVDVCAtRFNWUjQgLURESVJFTlQgLURIREJVVUNQIC1EQklHQlVGT0sgXAorCS1EVVc3IC1E Tk9HRVRVU0VSU0hFTEwgLURTVEVSTUlPWCAtRENLX0NVUlNFUyAtRFRDUFNPQ0tFVCAtRFBPU0lY IFwKKwktREZORkxPQVQgLURDS19ORVdURVJNIC1ETk9MU1RBVCAkKEtGTEFHUykiIFwKKwkiTElC Uz0tbHNvY2tldCAtbG5zbCAtbGN1cnNlcyAtbHRlcm1jYXAgLWxjcnlwdCAtbG0gLWxyZXNvbHYg JChMSUJTKSIgXAorCSJMTktGTEFHUyA9IC1zIgorCisjIFVuaXhXYXJlIDcgYnVpbHQgd2l0aCBn Y2MgLSBUaGlzIGRvZXMgbm90IHdvcmsgYXQgYWxsLi4uCisjIFJlcG9ydGVkbHkgZ2NjIDIuOC4x IGlzIGJyb2tlbiBvbiBVbml4d2FyZSA3LiAgVHJ5IGVnY3M/Cit1bml4d2FyZTdnOgorCUBlY2hv ICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFVuaXhXYXJlIDcgd2l0aCBnY2MuLi4nCisJ JChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNDID0gZ2NjIiAi Q0MyID0gZ2NjIiAiTE5LRkxBR1MgPSAtcyAtc2hsaWIiCisJIkNGTEFHUyA9IC1PIC1EVU5JWFdB UkUgLURTRUxFQ1QgLURTVlI0IC1ERElSRU5UIC1ESERCVVVDUCAtREJJR0JVRk9LIFwKKwktRFVX NyAtRE5PR0VUVVNFUlNIRUxMIC1EU1RFUk1JT1ggIC1EQ0tfQ1VSU0VTIC1EVENQU09DS0VUIC1E Tk9MU1RBVCBcCisJLURGTkZMT0FUIC1EQ0tfTkVXVEVSTSAkKEtGTEFHUykiIFwKKwkiTElCUz0t bHNvY2tldCAtbG5zbCAtbGN1cnNlcyAtbHRlcm1jYXAgLWxjcnlwdCAtbG0gLWxyZXNvbHYgJChM SUJTKSIgXAorCSJMTktGTEFHUyA9IC1zIgorCit1bml4d2FyZTc6CisJJChNQUtFKSAiTUFLRT0k KE1BS0UpIiAiS0ZMQUdTPSQoS0ZMQUdTKSIgdW5peHdhcmU3dCBcCisJS1RBUkdFVD0kJHtLVEFS R0VUOi0kKEApfQorCit1dzc6CisJJChNQUtFKSAiTUFLRT0kKE1BS0UpIiAiS0ZMQUdTPSQoS0ZM QUdTKSIgdW5peHdhcmU3dCBcCisJS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfQorCisjU0NPIE9w ZW5VTklYIDguMAorb3U4OgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIE9w ZW4gVU5JWCA4Li4uJworCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgIktGTEFHUz0tRE9VOCAkKEtG TEFHUykiIHVuaXh3YXJlN3QgXAorCUtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0KKworI1VuaXhX YXJlIDcgd2l0aCBPcGVuU1NMCit1dzdzc2wgdXc3K3NzbDoKKwlAZWNobyAnTWFraW5nIEMtS2Vy bWl0ICQoQ0tWRVIpIGZvciBVbml4V2FyZSA3IGFuZCBPcGVuU1NMLi4uJworCSQoTUFLRSkgeGVy bWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1MgPSAtTyAtRENLX0FVVEhF TlRJQ0FUSU9OIC1EQ0tfU1NMIC1EQ0tfU0hBRE9XIFwKKwktRFVOSVhXQVJFIC1EU0VMRUNUIC1E U1ZSNCAtRERJUkVOVCAtREhEQlVVQ1AgLURCSUdCVUZPSyBcCisJLURGTkZMT0FUIC1ETk9HRVRV U0VSU0hFTEwgLURTVEVSTUlPWCAtRENLX0NVUlNFUyAtRFRDUFNPQ0tFVCAtRFBPU0lYIFwKKwkt RFVXNyAtRFVTRVRDU0VUU1BFRUQgLURDS19ORVdURVJNIC1ETk9MU1RBVCAtRERDTFRJTUVWQUwg XAorCSQoU1NMSU5DKSAkKEtGTEFHUykiIFwKKwkiTElCUz0tbHNvY2tldCAtbG5zbCAtbGN1cnNl cyAtbHRlcm1jYXAgLWxjcnlwdCAtbG0gLWxyZXNvbHYgXAorCS1sZ2VuIC1sY3VkazcwICQoU1NM TElCKSAtbHNzbCAtbGNyeXB0byAkKExJQlMpIiBcCisJIkxOS0ZMQUdTID0gLXMiCisKKyNBcyBh Ym92ZSBidXQgaW5jbHVkZXMgU2hhZG93IHBhc3N3b3JkIHN1cHBvcnQgbmVlZGVkIGZvciBJS1NE LgordXc3aWtzZDoKKwkkKE1BS0UpICJNQUtFPSQoTUFLRSkiICJLRkxBR1M9LURDS19TSEFET1cg JChLRkxBR1MpIiBcCisJS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSAiTElCUz0gLWxnZW4iIHVu aXh3YXJlN3QKKworI0FzIGFib3ZlIGJ1dCBsaW5rcyB3aXRoIHN0YXRpYyBBUEkgZm9yIHJlYWxw YXRoKCkgc28gYSBiaW5hcnkgYnVpbHQKKyN3aXRoIHRoaXMgdGFyZ2V0IG9uIFVXNy4xIHdpbGwg YWxzbyB3b3JrIG9uIDcuMC4gIFJlcXVpcmVzIFNDTyBVREsKKyNyYXRoZXIgdGhhbiB0aGUgc3Rv Y2sgY29tcGlsZXIuCit1dzdpa3NkdWRrOgorCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgIktGTEFH Uz0tRENLX1NIQURPVyAkKEtGTEFHUykiIFwKKwlLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9ICJM SUJTPSAtbGdlbiAtbGN1ZGs3MCIgdW5peHdhcmU3dAorCisjRVNJWCBTVlI0LjAuMyBvciA0LjA0 IHdpdGggVENQL0lQIHN1cHBvcnQuCisjSGFzIDxzeXMvdGVybWlveC5oPiwgQU5TSSBDIGZ1bmN0 aW9uIHByb3RvdHlwaW5nIGRpc2FibGVkLgorI0FkZCAtbTQ4NiB0byBDRkxBR1MgaWYgZGVzaXJl ZC4KK2VzaXhyNDoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBFU0lYIFNW UjQgKyBUQ1AvSVAuLi4nCisJJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEAp fSBcCisJIkNGTEFHUyA9IC1PIC1EU1ZSNCAtRERJUkVOVCAtREhEQlVVQ1AgLUROT0FOU0kgXAor CS1EU1RFUk1JT1ggLURUQ1BTT0NLRVQgJChLRkxBR1MpIiAiTE5LRkxBR1MgPSAtcyIgXAorCSJM SUJTID0gLWxzb2NrZXQgLWxuc2wiCisKKyNBVCZUIFVOSVggU3lzdGVtIFYgUjQuCisjSGFzIDxz eXMvdGVybWlveC5oPiwgV29sbG9uZ29uZyBXSU4vVENQIFRDUC9JUC4KK3N5czVyNHN4bmV0Ogor CUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIEFUJlQgVU5JWCBTeXN0ZW0gViBS NC4uLicKKwkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZM QUdTID0gLU8gLURTVlI0IC1ERElSRU5UIC1ESERCVVVDUCBcCisJLURTVEVSTUlPWCAtRFdPTExP TkdPTkcgJChLRkxBR1MpIiAiTE5LRkxBR1MgPSAtcyIKKworI0FUJlQgVU5JWCBTeXN0ZW0gViBS NCwgbm8gPHRlcm1pby54PiBvciA8c3lzL3Rlcm1pby54Pi4KK3N5czVyNG54OgorCUBlY2hvICdN YWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIEFUJlQgVU5JWCBTeXN0ZW0gViBSNC4uLicKKwkk KE1BS0UpIHdlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTID0gLU8g LURTVlI0IC1ERElSRU5UIC1ESERCVVVDUCAtRE5PTEVBUk4gJChLRkxBR1MpIiBcCisJIkxOS0ZM QUdTID0gLXMiCisKKyNBVCZUIFVOSVggU3lzdGVtIFYgUjQsIG5vIDx0ZXJtaW8ueD4gb3IgPHN5 cy90ZXJtaW8ueD4sIGN1cnNlcywgVENQL0lQLgorc3lzNXI0bnhuZXRjOgorCUBlY2hvICdNYWtp bmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIEFUJlQgVU5JWCBTeXN0ZW0gViBSNC4uLicKKwkkKE1B S0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTID0gLU8gLURT VlI0IC1ERElSRU5UIC1ESERCVVVDUCBcCisJLURDS19DVVJTRVMgLURUQ1BTT0NLRVQgJChLRkxB R1MpIiBcCisJIkxJQlMgPSAtbGN1cnNlcyAtbHNvY2tldCAtbG5zbCAtbHRjcGlwIiBcCisJIkxO S0ZMQUdTID0gLXMiCisKKyNBVCZUIFVOSVggU3lzdGVtIFYgUjQsIG5vIDx0ZXJtaW8ueD4gb3Ig PHN5cy90ZXJtaW8ueD4sIFdvbGxvbmdvbmcgVENQL0lQLgorc3lzNXI0bnh0d2c6CisJQGVjaG8g J01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgQVQmVCBVTklYIFN5c3RlbSBWIFI0Li4uJwor CSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1MgPSAt TyAtRFNWUjQgLURESVJFTlQgLURIREJVVUNQIC1EV09MTE9OR09ORyAkKEtGTEFHUykiCisJIkxO S0ZMQUdTID0gLXMiCisKKyNJQ0wgVU5JWCBTeXN0ZW0gViBSNC4oRFJTIE4vWCkgdmVyc2lvbiA6 LQorI1VOSVggU3lzdGVtIFYgUmVsZWFzZSA0LjAgSUNMIERSUyA2MDAwIChTUEFSQykKKyNEUlMv TlggNjAwMCBTVlI0IFZlcnNpb24gNSAgTGV2ZWwgMSAgSW5jcmVtZW50IDQKKyNIYXMgPHN5cy90 ZXJtaW94Lmg+LCByZWd1bGFyIEJlcmtlbGV5IHNvY2tldHMgbGlicmFyeSwgaS5lLiBpbi5oIGFu ZCBpbmV0LmgKKyNhcmUgbm90IG1pc3BsYWNlZCBpbiBzeXMgKHJhdGhlciB0aGFuIG5ldGluZXQg YW5kIGFycGEsIHJlc3BlY3RpdmVseSkuCisjVXNlcyBBTlNJIEMgY29uc3RydWN0cywgYWR2aXNv cnkgZmlsZSBsb2NraW5nIG9uIGRldmljZXMsIGV0Yy4KKyNSZW1vdmUgLWxuc2wgaWYgaXQgY2F1 c2VzIHRyb3VibGUuCitpY2xzeXM1cjQ6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVS KSBmb3IgSUNMIFVOSVggU3lzdGVtIFYgUjQgKERSUyBOL1gpJworCSQoTUFLRSkgeGVybWl0IEtU QVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1MgPSAtTyAtRFNWUjQgLURJQ0xfU1ZS NCAtRERJUkVOVCAtREhEQlVVQ1AgLUROT0dFVFVTRVJTSEVMTCBcCisJLURTVEVSTUlPWCAtRFRD UFNPQ0tFVCAkKEtGTEFHUykiIFwKKwkiTElCUz0gLWxzb2NrZXQgLWxuc2wgLWxyZXNvbHYgIiAi TE5LRkxBR1MgPSAtcyIKKworI0FzIGFib3ZlIGJ1dCBmb3IgRFJTL05YIDQuMk1QIDdNUGx1cy4K K2ljbHN5czVyNG0rOgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIElDTCBV TklYIFN5c3RlbSBWIFI0IERSUy9OWCA0LjJNUCsnCisJJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0k JHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUyA9IC1PIC1EU1ZSNCAtRElDTF9TVlI0IC1ERElS RU5UIC1ESERCVVVDUCAtRE5PSUtTRCBcCisJLURTVEVSTUlPWCAtRFRDUFNPQ0tFVCAkKEtGTEFH UykiIFwKKwkiTElCUz0gLWxzb2NrZXQgLWxuc2wgLWxtIC1sYyAtZyAtbGdlbiAiICJMTktGTEFH UyA9IC1zIgorCisjQXMgYWJvdmUgYnV0IGZvciBEUlMvTlggNC4yTVAgN01QbHVzIHdpdGggSUtT RCBzdXBwb3J0LgoraWNsc3lzNXI0bStpa3NkOgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChD S1ZFUikgZm9yIElDTCBVTklYIFN5c3RlbSBWIFI0IERSUy9OWCA0LjJNUCsnCisJJChNQUtFKSB4 ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUyA9IC1PIC1EU1ZSNCAt RElDTF9TVlI0IC1ERElSRU5UIC1ESERCVVVDUCAtRE5PR0VUVVNFUlNIRUxMIFwKKwktRFNURVJN SU9YIC1EVENQU09DS0VUICQoS0ZMQUdTKSIgXAorCSJMSUJTPSAtbHNvY2tldCAtbG5zbCAtbG0g LWxjIC1nIC1sZ2VuIC1scmVzb2x2ICIgIkxOS0ZMQUdTID0gLXMiCisKK2ljbHN5czVyNF80ODY6 CisJJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBpY2xzeXM1cjQgS1RBUkdFVD0kJHtLVEFSR0VUOi0k KEApfQorCisjRGF0YSBHZW5lcmFsIERHL1VYIDQuMzAgKFN5c3RlbSBWIFIzKSBmb3IgREcgQVZp aU9OLCB3aXRoIFRDUC9JUCBzdXBwb3J0LgorZGd1eDQzMDoKKwlAZWNobyAnTWFraW5nIEMtS2Vy bWl0ICQoQ0tWRVIpIGZvciBERyBBVmlpT04gREcvVVggNC4zMC4uLicKKwkkKE1BS0UpIHhlcm1p dCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTID0gLU8gLURER1VYNDMwIC1E U1ZSMyAtRERJUkVOVCAtRFRDUFNPQ0tFVCBcCisJLUROT0lOQUREUlggLUROT0dFVFVTRVJTSEVM TCAkKEtGTEFHUykiCisKKyNEYXRhIEdlbmVyYWwgREcvVVggNC4zMCBmb3IgREcgQVZpaU9OLCB3 aXRoIFRDUC9JUCBzdXBwb3J0IHdpdGggQlNEaXNtcy4KK2RndXg0MzBic2Q6CisJQGVjaG8gJ01h a2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgREcgQVZpaU9OIERHL1VYIDQuMzAuLi4nCisJJChN QUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUyA9IC1PIC1E REdVWDQzMCAtRF9CU0RfU09VUkNFIC1EQlNENCBcCisJLUROT0lOQUREUlggLURUQ1BTT0NLRVQg LUROT0dFVFVTRVJTSEVMTCAkKEtGTEFHUykiCisKKyNEYXRhIEdlbmVyYWwgREcvVVggNS40IChT eXN0ZW0gViBSNCkgZm9yIERHIEFWaWlPTiwgd2l0aCBUQ1AvSVAgc3VwcG9ydC4KKyNBZGQgLWxz b2NrZXQgLWxuc2wgaWYgaW5ldF9hZGRyIGNvbWVzIHVwIG1pc3NpbmcuLi4KKyNIbW1tIC0gSSBy ZWFsbHkgdGhpbmsgQ0tfUE9MTCBjYW4gYmUgcmVtb3ZlZCBmcm9tIHRoaXMgb25lIGluIHdoaWNo IGNhc2UKKyN0aGVyZSBpcyBubyBkaWZmZXJlbmNlIGJldHdlZW4gZGd1eDU0MCBhbmQgZGd1eDU0 MGkuCitkZ3V4NTQwOgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIERHIEFW aWlPTiBERy9VWCA1LjQwLi4uJworCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDot JChAKX0gXAorCSJDRkxBR1MgPSAtTyAtRERHVVg1NDAgLURESVJFTlQgLURIREJVVUNQIC1ETk9J TkFERFJYIFwKKwktRFNURVJNSU9YIC1EVENQU09DS0VUIC1EQ0tfUE9MTCAtRE5PR0VUVVNFUlNI RUxMICQoS0ZMQUdTKSIKKworI0RhdGEgR2VuZXJhbCBERy9VWCA1LjQwIChTeXN0ZW0gViBSNCkg Zm9yIEludGVsIEFWaWlPTiwgd2l0aCBUQ1AvSVAgc3VwcG9ydC4KK2RndXg1NDBpOgorCUBlY2hv ICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIERHIEFWaWlPTiBERy9VWCA1LjQwLi4uJwor CSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1MgPSAt TyAtRERHVVg1NDAgLURESVJFTlQgLURIREJVVUNQIC1ETk9JTkFERFJYIFwKKwktRFNURVJNSU9Y IC1EVENQU09DS0VUIC1ETk9HRVRVU0VSU0hFTEwgJChLRkxBR1MpIiBcCisJIkxJQlMgPSAtbHNv Y2tldCAtbG5zbCIKKworZGd1eDU0OgorCW1ha2UgZGd1eDU0MCBLVEFSR0VUPSQke0tUQVJHRVQ6 LSQoQCl9CisKKyNEYXRhIEdlbmVyYWwgREcvVVggNS40ICg9IFN5c3RlbSBWIFI0KSBmb3IgREcg QVZpaU9OLCB3aXRoIFRDUC9JUCBzdXBwb3J0LgorIyBBbmQgY3Vyc2VzLgorZGd1eDU0MGM6CisJ QGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgREcgQVZpaU9OIERHL1VYIDUuNC4u LicKKwkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdT ID0gLU8gLURER1VYNTQwIC1ERElSRU5UIC1ESERCVVVDUCAtRE5PSU5BRERSWCBcCisJLURTVEVS TUlPWCAtRFRDUFNPQ0tFVCAtRENLX0NVUlNFUyAtRENLX05FV1RFUk0gLUROT0dFVFVTRVJTSEVM TCBcCisJJChLRkxBR1MpIiAiTElCUz0gLWxjdXJzZXM4IC1sdGVybWNhcCIgIkxOS0ZMQUdTID0g LXMiCisKKyNBcyBhYm92ZSBidXQgZm9yIEludGVsIC0gb25seSBkaWZmZXJlbmNlIGlzIG5hbWUg bGlicmFyeSBuYW1lcy4KK2RndXg1NDBpYzoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tW RVIpIGZvciBERyBBVmlpT04gREcvVVggNS40MC4uLicKKwkkKE1BS0UpIHhlcm1pdCBLVEFSR0VU PSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTID0gLU8gLURER1VYNTQwIC1ERElSRU5UIC1E SERCVVVDUCAtRE5PSU5BRERSWCBcCisJLURTVEVSTUlPWCAtRFRDUFNPQ0tFVCAtRENLX0NVUlNF UyAtRENLX05FV1RFUk0gLUROT0dFVFVTRVJTSEVMTCBcCisJJChLRkxBR1MpIiAiTElCUyA9IC1s c29ja2V0IC1sbnNsIC1sY3Vyc2VzIC1sdGVybWNhcCIKKworZGd1eDU0YzoKKwltYWtlIGRndXg1 NDBjIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0KKworI0RHL1VYIDUuNFIzLjEwCitkZ3V4NTQz MTA6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgREcgQVZpaU9OIERHL1VY IDUuNFIzLi4uJworCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAor CSJDRkxBR1MgPSAtRERHVVg1NDAgLURER1VYNTQzMTAgLURESVJFTlQgLURIREJVVUNQIC1EU0VM RUNUIFwKKwktRFNURVJNSU9YIC1EVENQU09DS0VUIC1EQ0tfQ1VSU0VTIC1EQ0tfTkVXVEVSTQkt RE5PR0VUVVNFUlNIRUxMIFwKKwktRE5PSU5BRERSWCAkKEtGTEFHUykiICJMSUJTPSAtbGN1cnNl czggLWx0ZXJtY2FwIiAiTE5LRkxBR1MgPSAtcyIKKworI0RHL1VYIDUuNFI0LjEwIC0gSW5jbHVk ZXMgZXZlcnl0aGluZy4KK2RndXg1NDQxMDoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tW RVIpIGZvciBERy9VWCA1LjRSNC4xMC4uLicKKwkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tU QVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTID0gLU8gLURER1VYNTQwIC1EREdVWDU0NDEwIC1ERElS RU5UIC1ESERCVVVDUCAtRFNFTEVDVCBcCisJLURTVEVSTUlPWCAtRFRDUFNPQ0tFVCAtRENLX0NV UlNFUyAtRENLX05FV1RFUk0gLUROT0dFVFVTRVJTSEVMTCBcCisJLUROT0lOQUREUlggJChLRkxB R1MpIiAiTElCUyA9IC1sc29ja2V0IC1sbnNsIC1sY3Vyc2VzIC1sdGVybWNhcCIKKworI0RHL1VY IDUuNFI0LjExIC0gSW5jbHVkZXMgZXZlcnl0aGluZy4KK2RndXg1NDQxMToKKwlAZWNobyAnTWFr aW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBERy9VWCA1LjRSNC4xMS4uLicKKwkkKE1BS0UpIHhl cm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTID0gLU8gLURER1VYNTQw IC1EREdVWDU0NDExIC1ERElSRU5UIC1ESERCVVVDUCAtRFNFTEVDVCBcCisJLURTVEVSTUlPWCAt RFRDUFNPQ0tFVCAtRENLX0NVUlNFUyAtRENLX05FV1RFUk0gLUROT0dFVFVTRVJTSEVMTCBcCisJ LUROT0lOQUREUlggJChLRkxBR1MpIiAiTElCUyA9IC1sc29ja2V0IC1sbnNsIC1sY3Vyc2VzIC1s dGVybWNhcCIKKworI0RHL1VYIDUuNFI0LjIwIC0gSW5jbHVkZXMgZXZlcnl0aGluZy4KK2RndXg1 NDQyMDoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBERy9VWCA1LjRSNC4y MC4uLicKKwkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZM QUdTID0gLU8gLURER1VYNTQwIC1EREdVWDU0NDIwIC1ERElSRU5UIC1ESERCVVVDUCAtRFNFTEVD VCBcCisJLURTVEVSTUlPWCAtRFRDUFNPQ0tFVCAtRENLX0NVUlNFUyAtRENLX05FV1RFUk0gLURO T0dFVFVTRVJTSEVMTCBcCisJLUROT0lOQUREUlggJChLRkxBR1MpIiBcCisJIkxJQlMgPSAtbHNv Y2tldCAtbHJlc29sdiAtbG5zbCAtbGN1cnNlcyAtbHRlcm1jYXAiCisKKyNTaWxpY29uIEdyYXBo aWNzIFN5c3RlbSBWIFIzIHdpdGggQlNEIGZpbGUgc3lzdGVtIChJUklTKQoraXJpczoKKwlAZWNo byBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFNpbGljb24gR3JhcGhpY3MgSVJJWCBwcmUt My4zLi4uCisJJChNQUtFKSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNG TEFHUyA9IC1PIC1EU1ZSMyAtRExPTkdGTiAtRE5PTEVBUk4gJChLRkxBR1MpIC1JL3Vzci9pbmNs dWRlL2JzZCIgXAorCSJMSUJTID0gLWxic2QiCisKKyNTaWxpY29uIEdyYXBoaWNzIElSSVMgU3lz dGVtIFYgUjMKK2lyaXgzMzoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBT aWxpY29uIEdyYXBoaWNzIElSSVggMy4zLi4uJworCSQoTUFLRSkgd2VybWl0IEtUQVJHRVQ9JCR7 S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1MgPSAtRFNWUjMgLURESVJFTlQgLURIREJVVUNQIC1E Tk9MRUFSTiAkKEtGTEFHUykgLU8iIFwKKwkiTE5LRkxBR1MgPSAtcyIKKworI1NpbGljb24gR3Jh cGhpY3MgSXJpcyBJbmRpZ28gd2l0aCBJUklYIDQuMC4wIG9yIDUuMC4uLgorI1N0cmljdCBBTlNJ IEMgY29tcGlsYXRpb24sIFRDUC9JUCBzdXBwb3J0IGluY2x1ZGVkCitpcml4NDA6CisJQGVjaG8g J01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgU2lsaWNvbiBHcmFwaGljcyBJUklYIDQuMC4u LicKKwkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdT ID0gLURJUklYNDAgLURTVlIzIC1ERElSRU5UIC1ESERCVVVDUCAtRFBXSURfVD11aWRfdCBcCisJ LURDS19BTlNJQyAtRFRDUFNPQ0tFVCAkKEtGTEFHUykgLU8gLU9saW1pdCAxNjAwIC1JL3Vzci9p bmNsdWRlL2JzZCIgXAorCSJMTktGTEFHUyA9IC1zIgorCisjQXMgYWJvdmUsIGJ1dCB3aXRoIGZ1 bGxzY3JlZW4gZGlzcGxheSAoY3Vyc2VzKSBhbmQgU3VuIFllbGxvdyBQYWdlcyBzdXBwb3J0Lgor I05PVEU6IElSSVggdmVyc2lvbnMgcHJpb3IgdG8gNSBydW4gQ09GRiBiaW5hcmllcy4KK2lyaXg0 MHlwYzoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTaWxpY29uIEdyYXBo aWNzIElSSVggNC4wLicKKwlAZWNobyAnSW5jbHVkZXMgZnVsbHNjcmVlbiBmaWxlIGRpc3BsYXkg YW5kIFN1biBZZWxsb3cgUGFnZXMuLi4nCisJJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFS R0VUOi0kKEApfSBcCisJIkNGTEFHUyA9IC1ESVJJWDQwIC1EU1ZSMyAtRERJUkVOVCAtREhEQlVV Q1AgLURDS19DVVJTRVMgXAorCS1EUFdJRF9UPXVpZF90IC1EQ0tfQU5TSUMgLURUQ1BTT0NLRVQg JChLRkxBR1MpIFwKKwktTyAtT2xpbWl0IDE2MDAgLUkvdXNyL2luY2x1ZGUvYnNkIiBcCisJIkxJ QlMgPSAtbGN1cnNlcyAtbHN1biIgIkxOS0ZMQUdTID0gLXMiCisKKyMgU2lsaWNvbiBHcmFwaGlj cyBJcmlzIFNlcmllcyA0RC8qLCBJUklYIDQuMC54LCAtTzQgdWNvZGUgb3B0aW1pemVkLgorIyBI dWdlIHRlbXBvcmFyeSBmaWxlIHNwYWNlIG5lZWRlZCBmb3IgdWNvZGUgb3B0aW1pemVyLiAgSWYg eW91IGdldCBhbiBlcnJvcgorIyBsaWtlICJ1Z2VuOiBpbnRlcm5hbCBlcnJvciB3cml0aW5nIHRv IC90bXAvY3RtY2EwODc3NzogRXJyb3IgMCIsIGRlZmluZSB0aGUKKyMgdGhlIFRNUERJUiBlbnZp cm9ubWVudCB2YXJpYWJsZSB0byBwb2ludCB0byBhIGZpbGUgc3lzdGVtIHRoYXQgaGFzIG1vcmUK KyMgc3BhY2UgYXZhaWxhYmxlLCBlLmcuICJzZXRlbnYgVE1QRElSIC91c3IvdG1wIi4KK2lyaXg0 MHU6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgU2lsaWNvbiBHcmFwaGlj cyBJUklYIDQuMC4uLicKKwkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9 IFwKKwkiQ0ZMQUdTID0gLURJUklYNDAgLURTVlIzIC1ERElSRU5UIC1ESERCVVVDUCAtRFBXSURf VD11aWRfdCBcCisJLURDS19BTlNJQyAtRFRDUFNPQ0tFVCAkKEtGTEFHUykgLU80IC1PbGltaXQg MTYwMCIgXAorCSJMTktGTEFHUz0tTzQgLU9saW1pdCAxNjAwIC1zIiAiRVhUPXUiCisKKyMgQXMg YWJvdmUsIHdpdGggQ3Vyc2VzIFN1cHBvcnQgYWRkZWQKK2lyaXg0MHVjOgorCUBlY2hvICdNYWtp bmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFNpbGljb24gR3JhcGhpY3MgSVJJWCA0LjAuLi4nCisJ JChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUyA9IC1E SVJJWDQwIC1EU1ZSMyAtRERJUkVOVCAtREhEQlVVQ1AgLURQV0lEX1Q9dWlkX3QgXAorCS1EQ0tf QU5TSUMgLURDS19DVVJTRVMgLURUQ1BTT0NLRVQgJChLRkxBR1MpIC1PNCAtT2xpbWl0IDE2MDAi IFwKKwkiTE5LRkxBR1M9LU80IC1PbGltaXQgMTYwMCAtcyIgIkVYVD11IiAiTElCUz0gLWxjdXJz ZXMgLWx0ZXJtY2FwIgorCisjU2lsaWNvbiBHcmFwaGljcyBJUklYIDUueC4KKyNZZWxsb3cgUGFn ZXMgYW5kIEN1cnNlcyBzdXBwb3J0IGluY2x1ZGVkLgorI0lSSVggdmVyc2lvbiA1LnggY2FuIHJ1 biBDT0ZGIG9yIEVMRiBiaW5hcmllcy4KK2lyaXg1MToKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0 ICQoQ0tWRVIpIGZvciBTaWxpY29uIEdyYXBoaWNzIElSSVggNS54JworCUBlY2hvICdJbmNsdWRl cyBmdWxsc2NyZWVuIGZpbGUgZGlzcGxheSBhbmQgWWVsbG93IFBhZ2VzLi4uJworCUBlY2hvICdB ZGQgLW1pcHM8bj4gdG8gQ0ZMQUdTIHNwZWNpZnkgYSBwYXJ0aWN1bGFyIGhhcmR3YXJlIHRhcmdl dC4nCisJJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFH UyA9IC1ESVJJWDUxIC1EU1ZSNCAtRERJUkVOVCAtREhEQlVVQ1AgLURDS19DVVJTRVMgLURDS19O RVdURVJNIFwKKwktRFBXSURfVD11aWRfdCAtRENLX0FOU0lDIC1EVENQU09DS0VUIC1EU0VMRUNU IC1ETk9HRVRVU0VSU0hFTEwgXAorCS1EU1lTVElNRUggLUREQ0xQT1BFTiAtRERDTEZET1BFTiAk KEtGTEFHUykgLWFuc2kgLU8gLU9saW1pdCAzMDAwIiBcCisJIkxJQlMgPSAtbGN1cnNlcyIgIkxO S0ZMQUdTID0gLXMiCisKKyNVc2UgdGhpcyBvbmUgaWYgaXJpeDUxIGJsb3dzIHVwIGR1ZSB0byBs YWNrIG9mIHN3YXAgc3BhY2Ugb3Igd2hhdGV2ZXIuCitpcml4NTF4OgorCUBlY2hvICdNYWtpbmcg Qy1LZXJtaXQgJChDS1ZFUikgZm9yIFNpbGljb24gR3JhcGhpY3MgSVJJWCA1LngnCisJQGVjaG8g J0luY2x1ZGVzIGZ1bGxzY3JlZW4gZmlsZSBkaXNwbGF5IGFuZCBZZWxsb3cgUGFnZXMuLi4nCisJ QGVjaG8gJ0FkZCAtbWlwczxuPiB0byBDRkxBR1Mgc3BlY2lmeSBhIHBhcnRpY3VsYXIgaGFyZHdh cmUgdGFyZ2V0LicKKwkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwK KwkiQ0ZMQUdTID0gLURJUklYNTEgLURTVlI0IC1ERElSRU5UIC1ESERCVVVDUCAtRENLX0NVUlNF UyAtRENLX05FV1RFUk0gXAorCS1EUFdJRF9UPXVpZF90IC1EQ0tfQU5TSUMgLURUQ1BTT0NLRVQg LURTRUxFQ1QgLUROT0dFVFVTRVJTSEVMTCBcCisJLURTWVNUSU1FSCAtRERDTFBPUEVOIC1ERENM RkRPUEVOICQoS0ZMQUdTKSIgXAorCSJMSUJTID0gLWxjdXJzZXMiICJMTktGTEFHUyA9IC1zIgor Citpcml4NTF5cGM6CisJJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBpcml4NTEgS1RBUkdFVD0kJHtL VEFSR0VUOi0kKEApfSBcCisJIktGTEFHUz0gJChLRkxBR1MpIgorCisjSVJJWCA1LjIgYWRkcyBS VFMvQ1RTCitpcml4NTI6CisJJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBpcml4NTEgS1RBUkdFVD0k JHtLVEFSR0VUOi0kKEApfSBcCisJIktGTEFHUz0tRElSSVg1MiAtRENLX1JUU0NUUyAkKEtGTEFH UykiCisKK2lyaXg1MzoKKwkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIGlyaXg1MSBLVEFSR0VUPSQk e0tUQVJHRVQ6LSQoQCl9IFwKKwkiS0ZMQUdTPS1ESVJJWDUyIC1ESVJJWDUzIC1EQ0tfUlRTQ1RT ICQoS0ZMQUdTKSIKKworaXJpeDUzeDoKKwkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIGlyaXg1MXgg S1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIktGTEFHUz0tRElSSVg1MiAtRElSSVg1MyAt RENLX1JUU0NUUyAkKEtGTEFHUykiCisKKyNTaWxpY29uIEdyYXBoaWNzIElSSVggNi5bMDI0XSBj b21tb24gc3R1ZmYuCisjWWVsbG93IFBhZ2VzIGFuZCBDdXJzZXMgc3VwcG9ydCBpbmNsdWRlZC4K KyNJUklYIHZlcnNpb24gNi4wIGFuZCBsYXRlciBydW5zIG9ubHkgRUxGIGJpbmFyaWVzLgorI0Rl cGVuZHMgb24gY29kZSBjaGFuZ2VzIGluIGNrY2RlYi5oIHRoYXQgbWFrZSAtRElSSVg2eCBkZWZp bmUgYWxsCisjbG93ZXIgSVJJWDZ4IHZhbHVlcyBhbmQgSVJJWDUxLgoraXJpeDZ4OgorCUBlY2hv ICdJbmNsdWRlcyBmdWxsc2NyZWVuIGZpbGUgZGlzcGxheSBhbmQgWWVsbG93IFBhZ2VzLi4uJwor CUBlY2hvICdBZGQgLW1pcHM8bj4gdG8gc3BlY2lmeSBhIHBhcnRpY3VsYXIgaGFyZHdhcmUgdGFy Z2V0LicKKwkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZM QUdTID0gLURTVlI0IC1ERElSRU5UIC1ESERCVVVDUCAtRE5PR0VUVVNFUlNIRUxMIFwKKwktRENL X0NVUlNFUyAtRENLX05FV1RFUk0gLURQV0lEX1Q9dWlkX3QgLURDS19BTlNJQyAtRFRDUFNPQ0tF VCBcCisJLURTRUxFQ1QgLURDS19SVFNDVFMgLU8gJChLRkxBR1MpIiBcCisJIkxJQlMgPSAtbGN1 cnNlcyIgIkxOS0ZMQUdTID0gLXMgJChMTktGTEFHUykiCisKKyNTaWxpY29uIEdyYXBoaWNzIElS SVggNi4wLgoraXJpeDYwOgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFNp bGljb24gR3JhcGhpY3MgSVJJWCA2LjAnCisJQCQoTUFLRSkgIk1BS0U9JChNQUtFKSIgXAorCSJL RkxBR1M9LURJUklYNjAgLU9saW1pdCAyMTM4ICQoS0ZMQUdTKSIgXAorCWlyaXg2eCBLVEFSR0VU PSQke0tUQVJHRVQ6LSQoQCl9CisKKyNTaWxpY29uIEdyYXBoaWNzIElSSVggNi4yLgorI1Nlcmlh bCBzcGVlZHMgPiAzODQwMCBhcmUgYXZhaWxhYmxlIGluIElSSVggNi4yIG9uIE8tY2xhc3MgbWFj aGluZXMgb25seS4KKyNOb3RlOiBPbGltaXQgbXVzdCBiZSBhIG51bWJlciA+IDAuCitpcml4NjI6 CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgU2lsaWNvbiBHcmFwaGljcyBJ UklYIDYuMicKKwlAJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBcCisJTE5LRkxBR1M9Ii1XbCwtd29m Ziw4NCIgXAorCSJLRkxBR1M9LURJUklYNjIgLU9saW1pdCA0NzAwICQoS0ZMQUdTKSIgXAorCWly aXg2eCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9CisKKyNTaWxpY29uIEdyYXBoaWNzIElSSVgg Ni4zLgoraXJpeDYzOgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFNpbGlj b24gR3JhcGhpY3MgSVJJWCA2LjMnCisJQCQoTUFLRSkgIk1BS0U9JChNQUtFKSIgaXJpeDYyIEtU QVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJLRkxBR1M9LURJUklYNjMiCisKKyNTaWxpY29u IEdyYXBoaWNzIElSSVggNi40LgorIyAtd29mZiw4NCB0byBsaW5rZXIgc3RvcHMgY29tcGxhaW50 cyBhYm91dCBubyBzeW1ib2xzIGxvYWRlZCBmcm9tCisjIGN1cnNlcywgYW5kIC13b2ZmIDExMTAg c3RvcHMgY29tcGxhaW50cyBhYm91dCB1bnJlYWNoYWJsZSAiYnJlYWs7IgorIyBzdGF0ZW1lbnRz IGluIGNrY3Byby5jIGFtb25nIG90aGVycy4KKyMgdGVzdGVkIG9uIFNHSSBPY3RhbmUsIHJ1bm5p bmcgSVJJWCA2LjQgdXAgdG8gMTE1MjAwIGJwcy4KKyMgLU9saW1pdCAwIG1lYW5zIGluZmluaXRl LgoraXJpeDY0OgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFNpbGljb24g R3JhcGhpY3MgSVJJWCA2LjQnCisJQCQoTUFLRSkgIk1BS0U9JChNQUtFKSIgXAorCUxOS0ZMQUdT PSItV2wsLXdvZmYsODQiIFwKKwkiS0ZMQUdTPS1ESVJJWDY0IC1EQ0tfUlRTQ1RTIC1PbGltaXQg MzAwMCAtd29mZiAxMTEwICQoS0ZMQUdTKSIgXAorCWlyaXg2eCBLVEFSR0VUPSQke0tUQVJHRVQ6 LSQoQCl9CisKK2lyaXg2NGdjYzoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZv ciBTaWxpY29uIEdyYXBoaWNzIElSSVggNi40IGdjYycKKwkkKE1BS0UpIHhlcm1pdCBLVEFSR0VU PSQke0tUQVJHRVQ6LSQoQCl9ICJDQyA9IGdjYyIgIkNDMiA9IGdjYyIgXAorCSJDRkxBR1M9IC1E U1ZSNCAtRElSSVg2NCAtRERJUkVOVCAtREhEQlVVQ1AgLUROT0dFVFVTRVJTSEVMTCBcCisJLURT RUxFQ1QgLURQV0lEX1Q9dWlkX3QgLURUQ1BTT0NLRVQgLUROT0NPVEZNQyBcCisJLURDS19BTlNJ QyAtRENLX1JUU0NUUyAtRENLX05FV1RFUk0gLURDS19DVVJTRVMgXAorCSQoS0ZMQUdTKSAtTyIg IkxJQlM9IC1sY3Vyc2VzIC1sdGVybWNhcCAtbGNyeXB0IgorCisjTm90ZSB0aGUgbmV3IE9wdGlt aXphdGlvbiBvcHRpb24gc3ludGF4IGZvciBNSVBTcHJvIENDIDcuMi4xLjJtLgorI1NlZSBub3Rl IG9uIGlyaXg2NWdjYyB0YXJnZXQgYWJvdXQgTGFyZ2UgRmlsZSBTdXBwb3J0IChMRlMpLgoraXJp eDY1OgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFNHSSBJUklYIDYuNScK KwlAJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBMTktGTEFHUz0iLVdsLC13b2ZmLDg0IiBcCisJIktG TEFHUz0tRElSSVg2NSAtRF9MQVJHRUZJTEVfU09VUkNFIC1EQ0tfUlRTQ1RTIC1PUFQ6T2xpbWl0 PTAgXAorCS13b2ZmIDExMTAsMTU1MiwxMTc0ICQoS0ZMQUdTKSIgXAorCWlyaXg2eCBLVEFSR0VU PSQke0tUQVJHRVQ6LSQoQCl9CisKKyNCdWlsZCBmb3IgdGhvc2UgdGhhdCBoYXZlIEdDQyBpbnN0 ZWFkIG9mIE1JUFNwcm8uCisjCisjIExhcmdlIEZpbGUgU3VwcG9ydCBub3RlOiB1c2UgdGhlIGRl ZmluZSBfTEFSR0VGSUxFX1NPVVJDRSB0byBlbmFibGUgc3VwcG9ydAorIyBmb3IgZmlsZXMgbGFy Z2VyIHRoYW4gMkdCLiAgVGhpcyBtYXkgd29yayBvbiByZWxlYXNlcyBvZiBJcml4IHByaW9yIHRv CisjIDYuNS54eC4gIFRvIHZlcmlmeSwgY2hlY2sgdGhlIG1hbiBwYWdlIGZvciBmc3RhdCBhbmQg dmVyaWZ5IHRoYXQgb2ZmX3QgaXMgYQorIyA2NCBiaXQgdmFsdWUgZm9yIGFuIC1uMzIgYnVpbGQu ICBBbHNvIGNoZWNrIHRoZSBtYW5wYWdlIGZvciBmc2VlayBhbmQgZnRlbGwKKyMgdG8gdmVyaWZ5 IHRoYXQgdGhlIGZzZWVrNjQgYW5kIGZ0ZWxsNjQgZnVuY3Rpb25zIGFyZSBwcm92aWRlZC4gIElm IHNvLCB0aGVuCisjIExGUyBzdXBwb3J0IHNob3VsZCB3b3JrIGFuZCB5b3UgY2FuIHRyeSBhZGRp bmcgLURfTEFSR0VGSUxFX1NPVVJDRSB0byBDRkxBR1MKKyMgZm9yIHlvdXIgc2VsZWN0ZWQgSXJp eCB0YXJnZXQuCisjCitpcml4NjVnY2M6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVS KSBmb3IgU0dJIElSSVggNi41IHdpdGggZ2NjJworCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7 S1RBUkdFVDotJChAKX0gXAorCSJDQyA9IGdjYyIgIkNDMiA9IGdjYyIgXAorCSJDRkxBR1M9IC1E U1ZSNCAtRElSSVg2NSAtRF9MQVJHRUZJTEVfU09VUkNFIC1ERElSRU5UIC1ESERCVVVDUCBcCisJ LUROT0dFVFVTRVJTSEVMTCAtRFNFTEVDVCAtRFBXSURfVD11aWRfdCAtRFRDUFNPQ0tFVCAtRE5P Q09URk1DIFwKKwktRENLX0FOU0lDIC1EQ0tfUlRTQ1RTIC1EQ0tfTkVXVEVSTSAtRENLX0NVUlNF UyBcCisJJChLRkxBR1MpIC1PIiAiTElCUz0gLWxjdXJzZXMiCisKKyMgVGhlIDY0LWJpdCBJUklY IHRhcmdldCB3b3JrcyBidXQgcHJlc3VtYWJseSBpcyBubyBsb25nZXIgbmVlZGVkIGdpdmVuIHRo ZQorIyBsYXJnZSBmaWxlIHN1cHBvcnQgaW4gdGhlIG1vcmUgcG9ydGFibGUgYW5kIGNvbXBhY3Qg MzItYml0IHZlcnNpb24uCitpcml4NjVfNjQ6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENL VkVSKSA2NC1iaXQgZm9yIFNHSSBJUklYIDYuNScKKwlAJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBM TktGTEFHUz0iLVdsLC13b2ZmLDg0IiBcCisJIktGTEFHUz0tRElSSVg2NSAtNjQgLURDS19SVFND VFMgLU9QVDpPbGltaXQ9MCAtd29mZiAxMTEwLDE1NTIsMTE3NCBcCisJLURDS182NEJJVCAkKEtG TEFHUykiIFwKKwlpcml4NnggS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfQorCisjRHVtYiBkb3du IHRvIE1JUFMtMiBpZiBidWlsZGluZyBvbiBSNTAwMCBvciBoaWdoZXIuLi4KK2lyaXg2NW1pcHMy OgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFNHSSBJUklYIDYuNSBNSVBT LTInCisJQCQoTUFLRSkgIk1BS0U9JChNQUtFKSIgTE5LRkxBR1M9Ii1vMzIgLW1pcHMyIC1XbCwt d29mZiw4NCIgXAorCSJLRkxBR1M9LURJUklYNjUgLURDS19SVFNDVFMgLU9QVDpPbGltaXQ9MCAt bzMyIC1taXBzMiBcCisJLXdvZmYgMTExMCwxNTUyLDExNzQgJChLRkxBR1MpIiBcCisJaXJpeDZ4 IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0KKworI1NwZWNpYWwgdGFyZ2V0IHRoYXQgYWRkcyBz cnAsIHNzbCwgYW5kIHpsaWIgc3VwcG9ydC4gIFRoaXMgcmVxdWlyZXMKKyN0aGF0IHlvdSBoYXZl IHBrZ3NyYyBpbnN0YWxsZWQgaW5zdGVhZCBvZiBJcml4IEZyZWV3YXJlLiAgU2VlCisjTmV0QlNE Lm9yZyBmb3IgcGtnc3JjIGZvciBJcml4LiAgWW91IHdpbGwgbmVlZCB0byBCVUlMRCB0aGUgc3Jw X2NsaWVudAorI3BhY2thZ2UgeW91cnNlbGYuICBJbnN0YWxsIGl0IG1hbnVhbGx5IHVzaW5nIHRo ZSBkaXJlY3Rpb25zIGZvdW5kCisjaW4gdGhlIG5ldGJzZHMrc3NsK3NycCt6bGliIHRhcmdldCBj b21tZW50cy4KK2lyaXg2NStzc2wrc3JwK3psaWI6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAk KENLVkVSKSBmb3IgSVJJWCA2LjUgd2l0aCBnY2MgYW5kIFNTTCBTUlAgWkxJQicKKwkkKE1BS0Up IHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0MgPSBnY2MiICJDQzIgPSBn Y2MiIFwKKwkiQ0ZMQUdTPSAtRElSSVg2NSAtRFNWUjQgLURESVJFTlQgLURIREJVVUNQIC1ETk9H RVRVU0VSU0hFTEwgLURTRUxFQ1QgXAorCS1EVENQU09DS0VUIC1ETk9DT1RGTUMgLURDS19ORVdU RVJNIC1EUFdJRF9UPXVpZF90IC1EQ0tfQU5TSUMgXAorCS1JL3Vzci9wa2cvaW5jbHVkZSAtRENL X0FVVEhFTlRJQ0FUSU9OIC1EQ0tfU1JQIC1EUFJFX1NSUF8xXzRfNSBcCisJLURDS19SVFNDVFMg LURDS19OQ1VSU0VTIC1EQ0tfRU5DUllQVElPTiAtRENLX0NBU1QgLURDS19ERVMgLURDS19TU0wg XAorCS1ETElCREVTIC1EWkxJQiAtREZORkxPQVQgLUkvdXNyL3BrZy9pbmNsdWRlL29wZW5zc2wg JChLRkxBR1MpIC1PIiBcCisJIkxJQlM9IC1ML3Vzci9wa2cvbGliIC1ycGF0aCAvdXNyL3BrZy9s aWIgLWxuY3Vyc2VzIC1sc3JwIC1sZ21wIC1sZGVzIFwKKwktbHNzbCAtbGtyeXB0byAtbGNyeXB0 byAtbGNyeXB0IC1seiAtbG0iCisKK2lyaXg2eCtrcmI1OgorCUBlY2hvICdJbmNsdWRlcyBmdWxs c2NyZWVuIGZpbGUgZGlzcGxheSBhbmQgWWVsbG93IFBhZ2VzLi4uJworCUBlY2hvICdBZGQgLW1p cHM8bj4gdG8gc3BlY2lmeSBhIHBhcnRpY3VsYXIgaGFyZHdhcmUgdGFyZ2V0LicKKwkkKE1BS0Up IHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTID0gLURTVlI0IC1E RElSRU5UIC1ESERCVVVDUCAtRE5PR0VUVVNFUlNIRUxMIFwKKwktRENLX0NVUlNFUyAtRENLX05F V1RFUk0gLURQV0lEX1Q9dWlkX3QgLURDS19BTlNJQyAtRFRDUFNPQ0tFVFwKKwktRFNFTEVDVCAt RENLX1JUU0NUUyAtTyBcCisJLURDS19BVVRIRU5USUNBVElPTiAtRENLX0tFUkJFUk9TIC1ES1JC NSAtRENLX0VOQ1JZUFRJT04gLURDS19ERVMgXAorCSQoSzVJTkMpICQoSzVJTkMpL2tyYjUgJChL RkxBR1MpIiBcCisJIkxJQlMgPSAtbGN1cnNlcyAkKEs1TElCKSAtbGRlczQyNSAtbGtyYjUgXAor CS1sY29tX2VyciAtbGNyeXB0byAtbGNyeXB0IC1sZ3NzYXBpX2tyYjUiIFwKKwkiTE5LRkxBR1Mg PSAtcyAkKExOS0ZMQUdTKSIKKworaXJpeDY1K2tyYjU6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1p dCAkKENLVkVSKSBmb3IgU0dJIElSSVggNi41JworCUAkKE1BS0UpICJNQUtFPSQoTUFLRSkiIFwK KwlMTktGTEFHUz0iLVdsLC13b2ZmLDg0IiBcCisJIktGTEFHUz0tRElSSVg2NSAtRENLX1JUU0NU UyAtT1BUOk9saW1pdD0wIC13b2ZmIDExMTAsMTU1MiwxMTc0IFwKKwkkKEtGTEFHUykiIFwKKwlp cml4Nngra3JiNSBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9CisKKyNJbiBjYXNlIHRoZXkgdHlw ZSAibWFrZSBzeXM1Ii4uLgorc3lzNToKKwkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIHN5czMgS1RB UkdFVD0kJHtLVEFSR0VUOi0kKEApfQorCisjR2VuZXJpYyBBVFQgU3lzdGVtIElJSSBvciBTeXN0 ZW0gViAod2l0aCBJJkQgc3BhY2UpCitzeXMzOgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChD S1ZFUikgZm9yIEFUJlQgVU5JWCBTeXN0ZW0gSUlJJworCUBlY2hvICdvciBTeXN0ZW0gViBSMiBv ciBlYXJsaWVyLi4uJworCUBlY2hvICdhZGQgLUROT01LRElSIGlmIG1rZGlyIGlzIGFuIHVuZGVm aW5lZCBzeW1ib2wuJworCSQoTUFLRSkgd2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0g XAorCSJDRkxBR1MgPSAtREFUVFNWIC1ETk9VTklDT0RFIC1ETk9TWVNMT0cgLUROT1NZTUxJTksg LUROT0dFVFVTRVJTSEVMTCBcCisJLUROT0lOSVRHUk9VUFMgLUROT0ZUUlVOQ0FURSAtRE5PUkVB TFBBVEggLUROT0xFQVJOICQoS0ZMQUdTKSAtaSAtTyIgXAorCSJMTktGTEFHUyA9IC1pIgorCisj R2VuZXJpYyBBVFQgU3lzdGVtIElJSSBvciBTeXN0ZW0gViAobm8gSSZEIHNwYWNlKQorc3lzM25p ZDoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBBVCZUIFVOSVggU3lzdGVt IElJSScKKwlAZWNobyAnb3IgU3lzdGVtIFYgUjIgb3IgZWFybGllciwgbm8gSSZEIHNwYWNlLi4u JworCSQoTUFLRSkgd2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1Mg PSAtREFUVFNWIC1ETk9SRUFMUEFUSCAtRE5PVU5JQ09ERSAtRE5PU1lTTE9HIC1ETk9TWU1MSU5L IFwKKwktRE5PR0VUVVNFUlNIRUxMIC1ETk9JTklUR1JPVVBTIC1ETk9GVFJVTkNBVEUgLUROT0xF QVJOICQoS0ZMQUdTKSAtTyIgXAorCSJMTktGTEFHUyA9IgorCisjR2VuZXJpYyBBVFQgU3lzdGVt IElJSSBvciBTeXN0ZW0gViBSMiBvciBlYXJsaWVyLCAibm8gdm9pZCI6Cisjc3BlY2lhbCBlbnRy eSB0byByZW1vdmUgIklsbGVnYWwgcG9pbnRlciBjb21iaW5hdGlvbiIgd2FybmluZ3MuCitzeXMz bnY6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgQVQmVCBVTklYIFN5c3Rl bSBJSUknCisJQGVjaG8gJ29yIFN5c3RlbSBWIFIyIG9yIGVhcmxpZXIuLi4nCisJJChNQUtFKSB3 ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUz0gLURBVFRTViAtRE5P UkVBTFBBVEggLUROT1VOSUNPREUgLUROT1NZU0xPRyAtRE5PR0VUVVNFUlNIRUxMIFwKKwktRE5P U1lNTElOSyAtRE5PRlRSVU5DQVRFIC1ETk9JTklUR1JPVVBTIC1ETk9MRUFSTiBcCisJLUR2b2lk PWludCAkKEtGTEFHUykgLWkgLU8iIFwKKwkiTE5LRkxBR1MgPSAtaSIKKworIyBBVCZUIDczMDAg VU5JWCBQQy4gIEFzIG9mIEMtS2VybWl0IDYuMSwgbWFueSBvZiB0aGVzZSBlbnRyaWVzIGRvbid0 IHdvcmsKKyMgYW55IG1vcmUgZHVlIHRvICJPdXQgb2YgbWVtb3J5IiBvciAiVG9vIG1hbnkgZGVm aW5lcyIgZXJyb3JzIGR1cmluZworIyBjb21waWxhdGlvbiwgYXQgbGVhc3Qgbm90IG9uIHN5c3Rl bXMgd2l0aG91dCBsb3RzIG9mIG1lbW9yeS4gIFRoZSBzeXMzdXBjZ2MKKyMgZW50cnkgd29ya3Mg KHVzaW5nIGdjYykgd2l0aCBvcHRpbWl6YXRpb24gcmVtb3ZlZCwgYW5kIG1pZ2h0IGFsc28gd29y aworIyB3aXRoIG9wdGltaXphdGlvbiBlbmFibGVkIG9uIG1hY2hpbmVzIHdpdGggbGFyZ2VyIG1l bW9yaWVzLgorCisjQVQmVCA3MzAwL1VOSVggUEMgKDNCMSkgc3lzdGVtcywgc3lzMyBidXQgc3Bl Y2lhbCBoYW5kbGluZyBmb3IgaW50ZXJuYWwgbW9kZW0uCisjTGluayB3aXRoIHRoZSBzaGFyZWQg bGlicmFyeSAtLSB0aGUgY29uZmxpY3Qgd2l0aCBvcGVuaSBpbiBzaGFyZWQgbGlicmFyeQorI2lz IHNvbHZlZCB3aXRoIC1Eb3Blbmk9eG9wZW5pLiAgTm90ZSB0aGF0IHRoZSB4ZXJtaXQgdGFyZ2V0 IGNhbid0IGJlIHVzZWQKKyNmb3IgdGhlIFVuaXggUEM7IHRoZXJlIGlzIG5vIHNlbGVjdCgpLgor c3lzM3VwYzoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBBVCZUIDczMDAg VU5JWCBQQywgc2hhcmVkIGxpYi4uLicKKwlAZWNobyAnSWYgc2hhcmVkIGxpYiBjYXVzZXMgdHJv dWJsZSwgdXNlIG1ha2Ugc3lzM3VwY29sZC4nCisJJChNQUtFKSB3ZXJtaXQgS1RBUkdFVD0kJHtL VEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUyA9IC1PIC1EQVRUNzMwMCAtRE5PTUtESVIgLURVU0Vf TUVNQ1BZIC1ETk9SRUFMUEFUSCAtRE5PTEVBUk4gXAorCS1ETk9TWVNMT0cgLUROT1NZTUxJTksg LUROT0dFVFVTRVJTSEVMTCAtRE5PSU5JVEdST1VQUyAtRE5PRlRSVU5DQVRFIFwKKwktRE5PUkVE SVJFQ1QgLUROT0dGVElNRVIgLUROT1VOSUNPREUgJChLRkxBR1MpIC1Eb3Blbmk9eG9wZW5pIiBc CisJIkNDMiA9IGxkIC9saWIvY3J0MHMubyAvbGliL3NobGliLmlmaWxlIiAiTE5LRkxBR1MgPSAt cyIKKworI0FUJlQgNzMwMC9Vbml4IFBDIHN5c3RlbXMsIG1pbmltdW0ga2VybWl0IGZvciB0aG9z ZSB3aXRoIHNtYWxsZXIgYW1vdW50cworI29mIG1lbW9yeS4KK3N5czN1cGNtOgorCUBlY2hvIE1p bmltdW0gaW50ZXJhY3RpdmUKKwkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIHN5czN1cGMgS1RBUkdF VD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIktGTEFHUz0tRE5PU1BMIC1ETk9GUklMTFMgLUROT0hF TFAgLUROT0RFQlVHIC1ETk9UTE9HIC1ETk9DU0VUUyBcCisJLUROT1NZU0xPRyAtRE5PU0VUS0VZ IC1ETk9SRUFMUEFUSCIKKworI0FUJlQgNzMwMC9VTklYIFBDICgzQjEpIHN5c3RlbXMsIHdpdGgg Y3Vyc2VzIHN1cHBvcnQuCisjQ3Vyc2VzIGFuZCB0aGUgc2hhcmVkIGxpYnJhcnkgZG9uJ3QgZ2V0 IGFsb25nLCBzbyB3ZSBkb24ndCB1c2UgdGhlCisjc2hhcmVkIGxpYnJhcnkuICBXZSBuZWVkIHRv IGluY2x1ZGUgQ0tfTkVXVEVSTSB0byBhdm9pZCBhIGNvbmZsaWN0Cisjd2l0aCBjdXJzZXMgYW5k IGJ1ZmZlcmluZyBvbiBzdGRvdXQuICBNZXJnZWQgd2l0aCBzdWJtaXNzaW9uIGJ5CisjUm9iZXJ0 IFdlaW5lci9Qcm9ncmFtbWluZyBQbHVzLCByd2VpbmVyQHdhdHN1bi5jYy5jb2x1bWJpYS5lZHUu CisjV2UgZG9uJ3QgbmVlZCAtRG9wZW5pPXhvcGVuaSBzaW5jZSB3ZSdyZSBub3QgdXNpbmcgdGhl IHNoYXJlZCBsaWJyYXJ5LAorI2J1dCB3ZSBrZWVwIGl0IHRvIGJlIGNvbnNpc3RlbnQgd2l0aCB0 aGUgb3RoZXIgZW50cmllcy4KK3N5czN1cGNjOgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChD S1ZFUikgZm9yIEFUJlQgNzMwMCBVTklYIFBDLCBjdXJzZXMuLi4nCisJJChNQUtFKSB3ZXJtaXQg S1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUyA9IC1PIC1EQVRUNzMwMCAtRE5P UkVBTFBBVEggXAorCS1EQ0tfQ1VSU0VTIC1EQ0tfTkVXVEVSTSAtRE5PTUtESVIgLUROT1JFRElS RUNUIC1ETk9HRlRJTUVSIC1ETk9MRUFSTiBcCisJLUROT1NZU0xPRyAtRE5PU1lNTElOSyAtRE5P R0VUVVNFUlNIRUxMIC1ETk9JTklUR1JPVVBTIC1ETk9GVFJVTkNBVEUgXAorCS1EVVNFX01FTUNQ WSAtRE5PVU5JQ09ERSAkKEtGTEFHUykgLURvcGVuaT14b3BlbmkiIFwKKwkiTElCUyA9IC1sY3Vy c2VzIiAiTE5LRkxBR1MgPSAtcyIKKworI0xpa2Ugc3lzM3VwY2MgYnV0IGZvciBBVCZUIFVOSVgg My41MW0gKHJlbGVhc2VkIGFzIGEgcGF0Y2ggb24gRml4IERpc2sgMiksCisjYWRkcyBoYXJkd2Fy ZSBmbG93IGNvbnRyb2wuCithdHQzNTFtOgorCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgc3lzM3Vw Y2MgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIktGTEFHUz0tRENLX1JUU0NUUyAtRFVO SVgzNTFNIgorCisjQXMgYWJvdmUgYnV0IHdpdGggZ2NjLgorYXR0MzUxZ206CisJJChNQUtFKSAi TUFLRT0kKE1BS0UpIiBzeXMzdXBjZ2MgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIktG TEFHUz0tRENLX1JUU0NUUyAtRFVOSVgzNTFNIgorCisjQVQmVCA3MzAwIFVOSVggUEMgKDNCMSks IGFzIGFib3ZlLCBidXQgbm8gbmV3dGVybSgpLgorc3lzM3VwY3g6CisJQGVjaG8gJ01ha2luZyBD LUtlcm1pdCAkKENLVkVSKSBmb3IgQVQmVCA3MzAwIFVOSVggUEMsIGN1cnNlcy4uLicKKwkkKE1B S0UpIHdlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTID0gLU8gLURB VFQ3MzAwIC1ETk9SRUFMUEFUSCAtRE5PVU5JQ09ERSAtRE5PTEVBUk4gXAorCS1ETk9TWVNMT0cg LUROT1NZTUxJTksgLUROT0dFVFVTRVJTSEVMTCAtRE5PSU5JVEdST1VQUyAtRE5PRlRSVU5DQVRF IFwKKwktRENLX0NVUlNFUyAtRE5PTUtESVIgLUROT1JFRElSRUNUIC1ETk9HRlRJTUVSIC1EVVNF X01FTUNQWSAkKEtGTEFHUykgXAorCS1Eb3Blbmk9eG9wZW5pIiAiTElCUyA9IC1sY3Vyc2VzIC1s dGVybWNhcCIgIkxOS0ZMQUdTID0gLXMiCisKKyNBVCZUIDczMDAvVU5JWCBQQyAoM0IxKSBzeXN0 ZW1zLCB3aXRoIGN1cnNlcyBhbmQgc2hhcmVkIGxpYnJhcnkgc3VwcG9ydC4KK3N5czN1cGNzaGNj OgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIEFUJlQgNzMwMCBVTklYIFBD LCBzaGFyZWQgbGliLi4uJworCUBlY2hvICdXaXRoIGN1cnNlcy4gIFJlcXVpcmVzIHNoY2MuJwor CSQoTUFLRSkgd2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1MgPSAt TyAtREFUVDczMDAgLUROT01LRElSIC1ETk9SRUFMUEFUSCAtRE5PTEVBUk4gXAorCS1ETk9TWVNM T0cgLUROT1NZTUxJTksgLUROT0dFVFVTRVJTSEVMTCAtRE5PSU5JVEdST1VQUyAtRE5PRlRSVU5D QVRFIFwKKwktRENLX05FV1RFUk0gLURDS19DVVJTRVMgIC1ETk9SRURJUkVDVCAtRE5PR0ZUSU1F UiBcCisJLURVU0VfTUVNQ1BZIC1ETk9VTklDT0RFICQoS0ZMQUdTKSAtRG9wZW5pPXhvcGVuaSIg XAorCSJMTktGTEFHUyA9IC1pIC1zIiAiQ0MgPSBzaGNjIiAiQ0MyID0gc2hjYyIgIkxJQlMgPSAt bGN1cnNlcyIKKworI0FUJlQgNzMwMC9VTklYIFBDICgzQjEpIHN5c3RlbXMsIGFzIGFib3ZlLCBu byBjdXJzZXMsIGJ1dCB1c2UgZ2NjLgorc3lzM3VwY2c6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1p dCAkKENLVkVSKSBmb3IgQVQmVCA3MzAwIFVOSVggUEMuLi4nCisJJChNQUtFKSB3ZXJtaXQgS1RB UkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUyA9IC1EQVRUNzMwMCAtRE5PUkVESVJF Q1QgLURVU0VfTUVNQ1BZIC1ETk9VTklDT0RFIC1ETk9MRUFSTiBcCisJLUROT1NZU0xPRyAtRE5P U1lNTElOSyAtRE5PR0VUVVNFUlNIRUxMIC1ETk9JTklUR1JPVVBTIC1ETk9GVFJVTkNBVEUgXAor CS1ETk9HRlRJTUVSIC1ETk9NS0RJUiAtRE5PUkVBTFBBVEggJChLRkxBR1MpIC1Eb3Blbmk9eG9w ZW5pIiBcCisJIkNDID0gZ2NjIiAiQ0MyID0gZ2NjIiAiTE5LRkxBR1MgPSAtcyAtc2hsaWIiCisK KyNBVCZUIDczMDAvVU5JWCBQQyAoM0IxKSBzeXN0ZW1zLCBjdXJzZXMgYW5kIGdjYy4KKyNPcHRp bWl6YXRpb24gb21pdHRlZCAtLSBhZGQgaXQgYmFjayBpbiBpZiB5b3VyIG1hY2hpbmUgaGFzIGxv dHMgb2YgbWVtb3J5Lgorc3lzM3VwY2djOgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZF UikgZm9yIEFUJlQgNzMwMCBVTklYIFBDLCBjdXJzZXMuLi4nCisJJChNQUtFKSB3ZXJtaXQgS1RB UkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUyA9IC1EQVRUNzMwMCAtRE5PUkVESVJF Q1QgLURVU0VfTUVNQ1BZIC1ETk9HRlRJTUVSIC1ETk9VTklDT0RFIFwKKwktRE5PU1lTTE9HIC1E Tk9TWU1MSU5LIC1ETk9HRVRVU0VSU0hFTEwgLUROT0lOSVRHUk9VUFMgLUROT0ZUUlVOQ0FURSBc CisJLURDS19DVVJTRVMgLURDS19ORVdURVJNIC1ETk9NS0RJUiAtRE5PUkVBTFBBVEggLUROT0xF QVJOICQoS0ZMQUdTKSIgXAorCSJDQyA9IGdjYyIgIkNDMiA9IGdjYyIgIkxJQlMgPSAtbGN1cnNl cyIgIkxOS0ZMQUdTID0gLXMiCisKKyNBVCZUIDczMDAvVU5JWCBQQyAoM0IxKSBzeXN0ZW1zLCBz cGVjaWFsIGhhbmRsaW5nIGZvciBpbnRlcm5hbCBtb2RlbS4KKyNObyBGVUxMU0NSRUVOIGZpbGUg dHJhbnNmZXIgZGlzcGxheSAoY3Vyc2VzKS4KK3N5czN1cGNvbGQ6CisJQGVjaG8gJ01ha2luZyBD LUtlcm1pdCAkKENLVkVSKSBmb3IgQVQmVCA3MzAwIFVOSVggUEMuLi4nCisJJChNQUtFKSB3ZXJt aXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUyA9IC1EQVRUNzMwMCAtRE5P TUtESVIgLURVU0VfTUVNQ1BZIC1ETk9VTklDT0RFIC1ETk9MRUFSTiBcCisJLUROT1NZU0xPRyAt RE5PU1lNTElOSyAtRE5PR0VUVVNFUlNIRUxMIC1ETk9JTklUR1JPVVBTIC1ETk9GVFJVTkNBVEUg XAorCS1ETk9HRlRJTUVSIC1ETk9SRURJUkVDVCAtRE5PUkVBTFBBVEggJChLRkxBR1MpIC1PIiAi TE5LRkxBR1MgPSAtaSIKKworI0FzIGFib3ZlLCBidXQgd2l0aCBnY2MuIG1pbmludW0gZmVhdHVy ZXMgLSBmaXRzIG9uIGEgNDAwSyBVTklYIFBDIGZsb3BweQorI2FmdGVyIGNvbXByZXNzaW9uIHdp dGggcm9vbSB0byBzcGFyZTsgYWRkIC1ETk9TSE9XIG9yIG90aGVyIC1ETk94eHh4IGl0ZW1zCisj dG8gcmVkdWNlIHNpemUgZXZlbiBmdXJ0aGVyLgorc3lzM3VwY2dtOgorCUBlY2hvIE1pbmltdW0g aW50ZXJhY3RpdmUKKwkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIHN5czN1cGNnIEtUQVJHRVQ9JCR7 S1RBUkdFVDotJChAKX0gXAorCSJLRkxBR1M9LUROT1NQTCAtRE5PRlJJTExTIC1ETk9IRUxQIC1E Tk9ERUJVRyAtRE5PVExPRyAtRE5PQ1NFVFMgXAorCS1ETk9TRVRLRVkgJChLRkxBR1MpIgorCisj VGhpcyB0YXJnZXQgaXMgZGVzaWduZWQgdG8gY3JlYXRlIGEgdmVyc2lvbiB3aXRoIHRoZSBtb3N0 IGZlYXR1cmVzIHBvc3NpYmxlCisjdGhhdCwgYWZ0ZXIgY29tcHJlc3Npb24sIHN0aWxsIGZpdHMg b24gYSA0MDBLIFVOSVggUEMgZmxvcHB5Lgorc3lzM3VwY2dmZDoKKwlAZWNobyAnTWFraW5nIEMt S2VybWl0ICQoQ0tWRVIpIGZvciBBVCZUIDczMDAgVU5JWCBQQyBmbG9wcHkuLi4nCisJJChNQUtF KSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUyA9IC1EQVRUNzMw MCAtRE5PUkVESVJFQ1QgLURVU0VfTUVNQ1BZIC1ETk9TUEwgLUROT0xFQVJOIFwKKwktRE5PU1lT TE9HIC1ETk9TWU1MSU5LIC1ETk9HRVRVU0VSU0hFTEwgLUROT0lOSVRHUk9VUFMgLUROT0ZUUlVO Q0FURSBcCisJLUROT0dGVElNRVIgLUROT1JFQUxQQVRIIC1Eb3Blbmk9eG9wZW5pIFwKKwktRE5P SEVMUCAtRE5PREVCVUcgLUROT1RMT0cgLUROT0NTRVRTIC1ETk9TRVRLRVkgLUROT01LRElSICQo S0ZMQUdTKSIgXAorCSJDQyA9IGdjYyIgIkNDMiA9IGdjYyIgIkxOS0ZMQUdTID0gLXMiCisKKyNB VCZUIDYzMDAgUExVUyAod2FybmluZywgLU8gbWlnaHQgbWFrZSBpdCBydW4gb3V0IG9mIHNwYWNl KS4KKyNOT1RFOiBSZW1vdmUgLURIREJVVUNQIGlmIG5vdCB1c2luZyBIb25leSBEYW5CZXIgVVVD UC4KK2F0dDYzMDA6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgQVQmVCA2 MzAwIFBMVVMuLi4nCisJJChNQUtFKSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBc CisJIkNGTEFHUyA9IC1EQVRUNjMwMCAtREhEQlVVQ1AgLUROT0ZJTEVIIC1ETk9SRUFMUEFUSCAt RE5PTEVBUk4gXAorCS1ETk9TWVNMT0cgLUROT1NZTUxJTksgLUROT0dFVFVTRVJTSEVMTCAtRE5P SU5JVEdST1VQUyAtRE5PRlRSVU5DQVRFIFwKKwktRE5PVU5JQ09ERSAkKEtGTEFHUykgLU8gLU1s IC1pIiAiTE5LRkxBR1MgPSAtaSAtTWwiCisKKyNBcyBhYm92ZSwgYnV0IHdpdGggY3Vyc2VzIHN1 cHBvcnQuICBEZWJ1Z2dpbmcgZGlzYWJsZWQgdG8gcHJldmVudCB0aHJhc2hpbmcuCithdHQ2MzAw YzoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBBVCZUIDYzMDAgUExVUy4u LicKKwkkKE1BS0UpIHdlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdT ID0gLURBVFQ2MzAwIC1ESERCVVVDUCAtRE5PRklMRUggLUROT0NTRVRTIC1ETk9SRUFMUEFUSCBc CisJLUROT1NZU0xPRyAtRE5PU1lNTElOSyAtRE5PR0VUVVNFUlNIRUxMIC1ETk9JTklUR1JPVVBT IC1ETk9GVFJVTkNBVEUgXAorCS1EQ0tfQ1VSU0VTIC1ETk9ERUJVRyAtRE5PVU5JQ09ERSAtRE5P TEVBUk4gJChLRkxBR1MpIC1PIC1NbCAtaSIgXAorCSJMTktGTEFHUyA9IC1pIC1NbCIgIkxJQlMg PSAtbGN1cnNlcyIKKworI0FUJlQgNjMwMCBQTFVTIHdpdGggbm8gY3Vyc2VzLCBubyBkZWJ1Z2dp bmcgKGFib3V0IDM0SyBzbWFsbGVyKQorIyAtT3B0aW1pemF0aW9uIHNhdmVzIGFib3V0IDIwSyB0 b28uCithdHQ2MzAwbmQ6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgQVQm VCA2MzAwIFBMVVMsIG5vIGRlYnVnZ2luZy4uLicKKwkkKE1BS0UpIHdlcm1pdCBLVEFSR0VUPSQk e0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTID0gLURBVFQ2MzAwIC1ESERCVVVDUCAtRE5PREVC VUcgLUROT0ZJTEVIIC1ETk9SRUFMUEFUSCBcCisJLUROT1NZU0xPRyAtRE5PU1lNTElOSyAtRE5P R0VUVVNFUlNIRUxMIC1ETk9JTklUR1JPVVBTIC1ETk9GVFJVTkNBVEUgXAorCS1ETk9VTklDT0RF IC1ETk9MRUFSTiAkKEtGTEFHUykgLU8gLWkgLU1sIiAiTE5LRkxBR1MgPSAtaSAtTWwiCisKKyNB VCZUIDNCMiBhbmQgbWF5YmUgM0IyMC1zZXJpZXMgY29tcHV0ZXJzIHJ1bm5pbmcgQVQmVCBVTklY IFN5c3RlbSBWIFIzLgorI1RoaXMgb25lIHdhcyBhY3R1YWxseSB1c2VkIHRvIGJ1aWxkIEMtS2Vy bWl0IDcuMCBzdWNjZXNzZnVsbHkgb24gYSAzQjIvMzAwLgorYXR0M2IyOgorCUBlY2hvICdNYWtp bmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIEFUJlQgM0IyJworCSQoTUFLRSkgd2VybWl0IEtUQVJH RVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1MgPSAtREFUVFNWIC1ETk9SRURJUkVDVCAt RFVTRV9NRU1DUFkgXAorCS1ETk9USU1FVkFMIC1ETk9USU1FWk9ORSAtRE1JTklESUFMIC1ETk9D SEFOTkVMSU8gLUROT0JJR0JVRiBcCisJLUROT1NZU0xPRyAtRE5PU1lNTElOSyAtRE5PR0VUVVNF UlNIRUxMIC1ETk9JTklUR1JPVVBTIC1ETk9GVFJVTkNBVEUgXAorCS1ETk9HRlRJTUVSIC1ETk9S RUFMUEFUSCAtRG9wZW5pPXhvcGVuaSAtRE5PRlJJTExTIC1ETk9MRUFSTiBcCisJLUROT0hFTFAg LUROT0RFQlVHIC1ETk9UTE9HIC1ETk9DU0VUUyAtRE5PU0VUS0VZIC1ETk9NS0RJUiAkKEtGTEFH UykiIFwKKwkiQ0MgPSBnY2MiICJDQzIgPSBnY2MiICJMTktGTEFHUyA9IC1zIgorCisjIFRoZSBu ZXh0IHR3byBhcmUgbGlrZWx5IG5vdCB0byB3b3JrIGFzLWlzLgorCisjQVQmVCAzQjIsIDNCMjAt c2VyaWVzIGNvbXB1dGVycyBydW5uaW5nIEFUJlQgVU5JWCBTeXN0ZW0gVi4KKyNUaGlzIGlzIGp1 c3QgZ2VuZXJpYyBTeXN0ZW0gViB3aXRoIEhvbmV5IERhbkJlciBVVUNQLCBzbyByZWZlciB0byBz eXMzaGRiLgorI1JlbW92ZSAtRE5PTkFXUyBpZiB5b3UgY2FuIGdldCBhd2F5IHdpdGggaXQuCith dHQzYng6CisJJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBzeXMzaGRiIEtUQVJHRVQ9JCR7S1RBUkdF VDotJChAKX0gXAorCSJLRkxBR1M9JChLRkxBR1MpIC1ETk9OQVdTIC1ETk9USU1FVkFMIgorCisj IDNCeCB3aXRoIGNoYXJzZXRzIChleGNlcHQgVW5pY29kZSkgYnV0IG5vIGN1cnNlcy4KK2F0dDNi eDE6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgQVQmVCAzQjIgb3IgM0Iy MCcKKwlAZWNobyAnd2l0aCBIb25leSBEYW5CZXIgVVVDUCAgbm8gY3Vyc2VzLi4uJworCSQoTUFL RSkgd2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1MgPSAtREFUVFNW IC1ESERCVVVDUCAkKEtGTEFHUykgLUROT1JFRElSRUNUIFwKKwktRE5PVElNRVZBTCAtRE5PVElN RVpPTkUgLURNSU5JRElBTCAtRE5PQ0hBTk5FTElPIC1ETk9CSUdCVUYgXAorCS1ETk9IRUxQIC1E Tk9ERUJVRyAtRE5PR0ZUSU1FUiAtRE5PTEVBUk4gXAorCS1ETk9TWVNMT0cgLUROT1NZTUxJTksg LUROT0dFVFVTRVJTSEVMTCAtRE5PSU5JVEdST1VQUyAtRE5PRlRSVU5DQVRFIFwKKwktRE5PUkVB TFBBVEggLUROT1VOSUNPREUgLWkiIFwKKwkiQ0MgPSBnY2MiICJDQzIgPSBnY2MiICJMTktGTEFH UyA9IC1pIC1zIgorCisjQVQmVCAzQjIsIDNCMjAtc2VyaWVzIGNvbXB1dGVycyBydW5uaW5nIEFU JlQgVU5JWCBTeXN0ZW0gViwKKyN3aXRoIGZ1bGxzY3JlZW4gZmlsZSB0cmFuc2ZlciBkaXNwbGF5 LgorYXR0M2J4YzoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBBVCZUIDNC MiBvciAzQjIwJworCUBlY2hvICd3aXRoIEhvbmV5IERhbkJlciBVVUNQIGFuZCBjdXJzZXMuLi4n CisJJChNQUtFKSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUyA9 IC1EQVRUU1YgLURIREJVVUNQIC1ETk9OQVdTIC1ETk9USU1FVkFMICQoS0ZMQUdTKSBcCisJLURO T1NZU0xPRyAtRE5PU1lNTElOSyAtRE5PR0VUVVNFUlNIRUxMIC1ETk9JTklUR1JPVVBTIC1ETk9G VFJVTkNBVEUgXAorCS1ETk9SRUFMUEFUSCAtRENLX0NVUlNFUyAtRENLX05FV1RFUk0gLUROT1VO SUNPREUgLUROT0xFQVJOIC1pIC1PIiBcCisJIkxOS0ZMQUdTID0gLWkiICJMSUJTPS1sY3Vyc2Vz IgorCisjM2J4IHdpdGggY3Vyc2VzIGJ1dCBubyBjaGFyc2V0cworYXR0M2J4YzM6CisJQGVjaG8g J01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgQVQmVCAzQjIgb3IgM0IyMCcKKwlAZWNobyAn d2l0aCBIb25leSBEYW5CZXIgVVVDUCB3aXRoIGN1cnNlcy4uLiAgbm8gQ1NFVFMnCisJJChNQUtF KSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUyA9IC1EQVRUU1Yg LURIREJVVUNQICQoS0ZMQUdTKSAtRE5PUkVESVJFQ1QgXAorCS1ETk9USU1FVkFMIC1ETk9USU1F Wk9ORSAtRE1JTklESUFMIC1ETk9DSEFOTkVMSU8gLUROT0JJR0JVRiBcCisJLUROT0hFTFAgLURO T0RFQlVHIC1ETk9HRlRJTUVSIC1ETk9MRUFSTiBcCisJLUROT1NZU0xPRyAtRE5PU1lNTElOSyAt RE5PR0VUVVNFUlNIRUxMIC1ETk9JTklUR1JPVVBTIC1ETk9GVFJVTkNBVEUgXAorCS1ETk9SRUFM UEFUSCAtRE5PQ1NFVFMgLURDS19DVVJTRVMgLURDS19ORVdURVJNIC1pIiBcCisJIkNDID0gZ2Nj IiAiQ0MyID0gZ2NjIiAiTE5LRkxBR1MgPSAtaSAtcyIgIkxJQlMgPSAtbGN1cnNlcyIKKworI0Fu eSBTeXN0ZW0gViBSMiBvciBlYXJsaWVyIHdpdGggSG9uZXkgRGFuQmVyIFVVQ1AgKHNhbWUgYXMg YWJvdmUpCitzeXMzaGRiOgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIEFU JlQgVU5JWCBTeXN0ZW0gSUlJJworCUBlY2hvICdvciBTeXN0ZW0gViBSMiBvciBlYXJsaWVyIHdp dGggSG9uZXkgRGFuQmVyIFVVQ1AuLi4nCisJJChNQUtFKSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFS R0VUOi0kKEApfSBcCisJIkNGTEFHUyA9IC1EQVRUU1YgLURIREJVVUNQIC1ETk9SRUFMUEFUSCAt RE5PVU5JQ09ERSAtRE5PTEVBUk4gXAorCS1ETk9TWVNMT0cgLUROT1NZTUxJTksgLUROT0dFVFVT RVJTSEVMTCAtRE5PSU5JVEdST1VQUyAtRE5PRlRSVU5DQVRFIFwKKwkkKEtGTEFHUykgLWkgLU8i ICJMTktGTEFHUyA9IC1pIgorCisjU3BlcnJ5L1VOSVNZUyA1MDAwIFVUUyBWIDUuMiAoU3lzdGVt IFYgUjIpLCBIb25leSBEYW5CZXIgVVVDUAordW5pc3lzNXIyOgorCUBlY2hvICdNYWtpbmcgQy1L ZXJtaXQgJChDS1ZFUikgZm9yIFNwZXJyeS9VTklTWVMgNTAwMCBVVFMgViA1LjIuLi4nCisJJChN QUtFKSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUyA9IC1EQVRU U1YgLURVTklTWVM1MiAtREhEQlVVQ1AgLUROT1JFQUxQQVRIIC1ETk9VTklDT0RFIFwKKwktRE5P U1lTTE9HIC1ETk9TWU1MSU5LIC1ETk9HRVRVU0VSU0hFTEwgLUROT0lOSVRHUk9VUFMgLUROT0ZU UlVOQ0FURSBcCisJLUROT0xFQVJOICQoS0ZMQUdTKSAtaSAtTyIgIkxOS0ZMQUdTID0gLWkiCisK KyNJbiBjYXNlIHRoZXkgc2F5ICJtYWtlIHN5czVoZGIiIGluc3RlYWQgb2YgIm1ha2Ugc3lzM2hk YiIuLi4KK3N5czVoZGI6CisJJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBzeXMzaGRiCisKKyNDcmVh dGUgdGhlIGNvbW1vbiBoZWFkZXIgbGluZSBmb3IgYWxsIGhwdXhbNS0xMV0qIGVudHJpZXMgYW5k IGFib3ZlLiBUaGlzIAorI2V4dHJhIGVudHJ5IGlzIGhlcmUgYmVjYXVzZSBvdXIgaGVhZGVyIG1l c3NhZ2UgbGVuZ3RoIG1heSBkaWZmZXIgZm9yIGVhY2ggCisjQy1LZXJtaXQgdmVyc2lvbi4gRG9u J3QgdXNlICdmb2xkIC1zJyBmb3IgSFAtVVggNS54IC0gNy54ISBUaGlzIG9wdGlvbiBpcyAKKyNh dmFpbGFibGUgb25seSBmb3IgSFAtVVggOC4wIGFuZCBhYm92ZSEKK2hwdXgtaGVhZGVyOgorCUBI UFVYPWB1bmFtZSAtciB8IHNlZCAtZSAncy9eW14xLTldKi8vJyAtZSAncy9cLjAwJCQvLjAvJ2Ag OyBcCisJWyAiJChNRVNTQUdFMCkiIF0gJiYgTUVTU0FHRTE9IiQoTUVTU0FHRTApIiA7IFwKKwlN ZXNzYWdlMD0nTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBIUDkwMDAgSFAtVVgnIDsgXAor CU1lc3NhZ2UxPSQke01FU1NBR0UxOj0nd2l0aG91dCBhbnkgZXh0cmEgY29tcGlsZXIgb3B0aW1p emF0aW9uJ30gOyBcCisJTWVzc2FnZUg9IiQkTWVzc2FnZTAgJCRIUFVYIiA7IFwKKwljYXNlICQk SFBVWCBpbiBcCisJICBbNTY3XS4qKSBlY2hvICIkJE1lc3NhZ2VIXG4kJE1lc3NhZ2UxIiA7OyBc CisJICAgICAgKi4qKSBlY2hvICIkJE1lc3NhZ2VIICQke01lc3NhZ2UxfSQoTUVTU0FHRTFBKSIg fCBmb2xkIC1zIDs7IFwKKwllc2FjIHwgc2VkIC1lICdzL14gLy8nIC1lICdzLyAqJCQvLycKKwor IyBQZXRlciBFJ3MgdXBkYXRlZCBIUC1VWCA1Lnh4IGVudHJpZXMgT2N0IDIwMDEuCisKKyNIUC05 MDAwIDUwMCBIUC1VWCA1Lnh4LCBubyBUQ1AvSVAuCisjIExhc3Qga25vd24gc3VjY2Vzc2Z1bCBi dWlsZDogQy1LZXJtaXQgOC4wLjIwNiAyMDAyLzIwLzI3LgoraHB1eDA1MDA6CisJQE1FU1NBR0Uw PSJubyBUQ1AvSVAgYW5kIG5vIGNvbXBpbGVyIG9wdGltaXphdGlvbiI7XAorCU1FU1NBR0UwPSQk e01FU1NBR0UxOi0kJE1FU1NBR0UwfSBcCisJJChNQUtFKSBocHV4LWhlYWRlcgorCSQoTUFLRSkg d2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1MgPSAtREhQVVggLURI UFVYNSAtREhQVVhQUkU2NSAtRE5PUkVESVJFQ1QgLUREQ0xHRVRDV0QgXAorCS1ETk9HRVRVU0VS U0hFTEwgLUROT0dGVElNRVIgLUROT1NZU0xPRyAtRE5PVE9NQUNST1MgLUROT0xTVEFUIFwKKwkt RE5PU1lNTElOSyAtRE5PSU5JVEdST1VQUyAtRE5PVU5JQ09ERSAtRE5PTEVBUk4gLUROT0xPTkdM T05HIFwKKwktRFZPSUQ9aW50IC1EQ0tWT0lEPWludCAkKEtGTEFHUykiICJMSUJTID0gJChMSUJT KSIgIkxOS0ZMQUdTID0gIgorCisjSFAtOTAwMCA1MDAgSFAtVVggNS4yMSB3aXRoIFdvbGxvbmdv bmcgV0lOL1RDUCAxLjIgVENQL0lQLgorI1JlcXVpcmVzIC91c3Ivd2lucy91c3IvaW5jbHVkZSBh bmQgL3Vzci9saWIvbGlibmV0LmEgZnJvbSBXb2xsb25nb25nLgorI09wdGltaXphdGlvbiBza2lw cGVkIC0gdGFrZXMgZm9yZXZlci4JUmVhbGx5LgorIyBXQVJOSU5HOiB0aGlzIGRvZXNuJ3Qgd29y ayBpZiBhIGZpbGUgY2FsbGVkICJocHV4MDUwMCIgaXMgb24gdGhlIGRpc2suCisjIExhc3Qga25v d24gc3VjY2Vzc2Z1bCBidWlsZDogQy1LZXJtaXQgOC4wLjIwNiAyMDAyLzIwLzI3LgoraHB1eDA1 MDB3aW50Y3A6CisJQE1FU1NBR0UxPSJ3aXRoIFdJTi9UQ1AgYnV0IHdpdGhvdXQgYW55IGV4dHJh IGNvbXBpbGVyIG9wdGltaXphdGlvbiIgXAorCSQoTUFLRSkgaHB1eDA1MDAgS1RBUkdFVD0kJHtL VEFSR0VUOi0kKEApfSBcCisJIktGTEFHUyA9IC1EVENQU09DS0VUIC1ESFBVWDVXSU5UQ1AgLURJ TkFERFJYIC1ETk9fRE5TX1NSViBcCisJLUROT01ISE9TVCAtRFZPSUQ9aW50IC1EQ0tWT0lEPWlu dCAtRE5PSEFERFJMSVNUIC1ETk9MT05HTE9ORyBcCisJLUkvdXNyL3dpbnMvdXNyL2luY2x1ZGUg JChLRkxBR1MpIiAiTElCUyA9IC91c3IvbGliL2xpYm5ldC5hIgorCisjSFAtVVggNi41LCBzaG9y dCBmaWxlbmFtZXMsIG5vIG5ldHdvcmsgYW5kIG5vIGN1cnNlcyBzdXBwb3J0LgorI2NrY3Bybywg Y2t1dXNyLCBja3V1czMgYW5kIG90aGVycyBhcmUgYnJva2VuIG91dCBiZWNhdXNlIHRoZXkgbWFr ZSB0aGUKKyNvcHRpbWl6ZXIgcnVuIGF3YXkuICBOb3RlIHRoYXQgdGhlIFhFUk1JVCB0YXJnZXQg ZG9lcyBub3Qgd29yayB3aXRoIEhQLVVYIDYuNSEKKyMKKyNJZiB5b3UgZ2V0IGNvbXBpbGVyIHdh cm5pbmdzIGxpa2U6CisjJ1N3aXRjaCB0YWJsZSBvdmVyZmxvdy4gVHJ5IHRoZSAtV2MsLU53IG9w dGlvbi4nIChmb3IgY2tjdW5pLmMsIG9yCisjb3RoZXIgZmlsZXMpIGluY3JlYXNlIHRoZSAnLi4u JyB2YWx1ZSBpbiAnLVdjLC1Ody4uLichIFRoZSBkZWZhdWx0IG1heGltdW0KKyNzd2l0Y2ggdGFi bGUgc3RhY2sgKC1OdykgaXMgMjUwIHRhYmxlIGVudHJpZXMuIGNrY3VuaS5jIGZyb20gT2N0IDE2 IDIwMDkKKyNuZWVkcyAyNTcgdGFibGUgZW50cmllcyAoQy1LZXJtaXQgVmVyc2lvbiAiOS4wLjI5 OSIpLgorI09LOiAyMDEwLzAzLzI2CitocHV4MDY1MDoKKwlAJChNQUtFKSBocHV4LWhlYWRlcgor CUBNRVNTQUdFMj0kJHtNRVNTQUdFMjotJ2FuZCBOTyBuZXR3b3JrJ307IFwKKwllY2hvICJzdXBw b3J0aW5nOiBOTyBsb25nIGZpbGVuYW1lcyAkJE1FU1NBR0UyLiIKKworCSQoTUFLRSkgS1RBUkdF VD0kJHtLVEFSR0VUOi0kKEApfSBcCisJCWNrdXVzMy4kKEVYVCkgY2t1dXM0LiQoRVhUKSBja3V1 czUuJChFWFQpIGNrdXVzNi4kKEVYVCkgXAorCQlja3V1c3IuJChFWFQpIGNrdXhsYS4kKEVYVCkg Y2tjZnRwLiQoRVhUKSBja2Nwcm8uJChFWFQpIFwKKwkiQ0ZMQUdTID0gLURIUFVYIC1ESFBVWDYg LURTSUdfViAtRE5PU1lTTE9HIC1ETk9TRUxFQ1QgLURGTkZMT0FUIFwKKwktRERDTEdFVENXRCAt RE5PR0VUVVNFUlNIRUxMIC1ETk9fRE5TX1NSViAtRE5PTEVBUk4gLUROT0xPTkdMT05HIFwKKwkk KEtGTEFHUykiCisKKwkkKE1BS0UpIHdlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwK KwkiQ0ZMQUdTID0gLURIUFVYIC1ESFBVWDYgLURTSUdfViAtRE5PU1lTTE9HIC1ETk9TRUxFQ1Qg LURGTkZMT0FUIFwKKwktRERDTEdFVENXRCAtRE5PR0VUVVNFUlNIRUxMIC1ETk9fRE5TX1NSViAt RE5PTEVBUk4gLUROT0xPTkdMT05HIFwKKwkkKEtGTEFHUykgLVdjLC1OdzI2MCAkKE9GTEFHUyki ICJMTktGTEFHUyA9IC1zIiAiTElCUyA9IC1sbSAkKExJQlMpIgorCisjRXhhY3RseSBhcyBhYm92 ZSwgcGx1cyBjdXJzZXM6CisjT0s6IDIwMDkvMTAvMDYKK2hwdXgwNjUwYzoKKwlATUVTU0FHRTI9 ImFuZCBOTyBuZXR3b3JrIGJ1dCB3aXRoIGN1cnNlcyIgXAorCSQoTUFLRSkgaHB1eDA2NTAgS1RB UkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIktGTEFHUyA9IC1EQ0tfQ1VSU0VTICQoS0ZMQUdT KSIgXAorCSJMSUJTID0gLWxjdXJzZXMiCisKKyNFeGFjdGx5IGFzIGFib3ZlLCBwbHVzIGN1cnNl cyArIG5ldHdvcms6CisjT0s6IDIwMDkvMTAvMDIKK2hwdXgwNjUwdGNwYzoKKwlATUVTU0FHRTI9 ImJ1dCB3aXRoIGN1cnNlcyBhbmQgd2l0aCBUQ1AvSVAiIFwKKwkkKE1BS0UpIGhwdXgwNjUwIEtU QVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJLRkxBR1M9LURDS19DVVJTRVMgLURUQ1BTT0NL RVQgLUROT0hBRERSTElTVCBcCisJLURJTlRTRUxFQ1QgLUROT0NLR0VURlFIT1NUICQoS0ZMQUdT KSIgXAorCSJMSUJTPS1sY3Vyc2VzIgorCisjRXhhY3RseSBhcyBocHV4MDY1MCBidXQgd2l0aCBj b21waWxlciBvcHRpbWl6YXRpb246CisjT0s6IDIwMDkvMTAvMDYKK2hwdXgwNjUwbzoKKwlATUVT U0FHRTE9IndpdGggY29tcGlsZXIgb3B0aW1pemF0aW9uIiBcCisJJChNQUtFKSBocHV4MDY1MCBL VEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiS0ZMQUdTID0gJChLRkxBR1MpIiAiT0ZMQUdT ID0gLU8iCisKKyNFeGFjdGx5IGFzIGhwdXgwNjUwYyBidXQgd2l0aCBjb21waWxlciBvcHRpbWl6 YXRpb246CisjT0s6IDIwMDkvMTAvMDYKK2hwdXgwNjUwb2M6CisJQE1FU1NBR0UxPSJ3aXRoIGNv bXBpbGVyIG9wdGltaXphdGlvbiIgXAorCSQoTUFLRSkgaHB1eDA2NTBjIEtUQVJHRVQ9JCR7S1RB UkdFVDotJChAKX0gXAorCSJLRkxBR1MgPSAkKEtGTEFHUykiICJPRkxBR1MgPSAtTyIKKworI0V4 YWN0bHkgYXMgaHB1eDA2NTB0Y3BjIGJ1dCB3aXRoIGNvbXBpbGVyIG9wdGltaXphdGlvbjoKKyNP SzogMjAwOS8xMC8wNgoraHB1eDA2NTBvdGNwYzoKKwlATUVTU0FHRTE9IndpdGggY29tcGlsZXIg b3B0aW1pemF0aW9uIiBcCisJJChNQUtFKSBocHV4MDY1MHRjcGMgS1RBUkdFVD0kJHtLVEFSR0VU Oi0kKEApfSBcCisJIktGTEFHUyA9ICQoS0ZMQUdTKSIgIk9GTEFHUyA9IC1PIgorCisjVGFrZSB0 aGlzIGFzIHN0YXJ0dXAgZW50cnkgZm9yIGFsbCAnbm9uLW9wdGltaXplZCcgZmlsZXMgdW5kZXIg SFAtVVggNy54IQorI01ha2Ugc3VyZSB3ZSBkb24ndCBjYWxsIGl0IHdpdGggdGhlICctTycgb3B0 aW9uIGJlY2F1c2UgdGhpcyB3aWxsIGJsb3cgdXAKKyN0aGUgY29tcGlsZXIhCisjT0s6IDIwMDkv MDkvMzAKK2hwdXgwNzAwbm9vcHQ6CisJQGNhc2UgIiQoQ0ZMQUdTKSIgaW4gXAorCSotTyopIGVj aG8gIkRvbid0IHVzZSBDRkxBR1M9IC1PIGhlcmUhIiA7OyBcCisJICAgKikgJChNQUtFKSBLVEFS R0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkgICAgICBja3V1c3IuJChFWFQpIGNrdXVzMy4kKEVY VCkgY2t1dXM0LiQoRVhUKSBja3V1czUuJChFWFQpIFwKKwkgICAgICBja3V1czYuJChFWFQpIGNr dXVzNy4kKEVYVCkgY2t1eGxhLiQoRVhUKSBcCisJICAgICAgY2tjdW5pLiQoRVhUKSBja2NmdHAu JChFWFQpIGNrY3Byby4kKEVYVCkgXAorCSAgICAgIDs7IFwKKwllc2FjCisKKyNIUC1VWCA3LjAs IG5vIGxvbmcgZmlsZW5hbWVzLCBubyBuZXR3b3JrIHN1cHBvcnQsIG5vIGN1cnNlcy4KKyNJZiB5 b3UgZ2V0IGNvbXBpbGVyIHdhcm5pbmdzIGxpa2U6CisjJ1N3aXRjaCB0YWJsZSBvdmVyZmxvdy4g VHJ5IHRoZSAtV2MsLU53IG9wdGlvbi4nIChmb3IgY2tjdW5pLmMsIG9yCisjb3RoZXIgZmlsZXMp IGluY3JlYXNlIHRoZSAnLi4uJyB2YWx1ZSBpbiAnLVdjLC1Ody4uLichIFRoZSBkZWZhdWx0IG1h eGltdW0KKyNzd2l0Y2ggdGFibGUgc3RhY2sgKC1OdykgaXMgMjUwIHRhYmxlIGVudHJpZXMuIGNr Y3VuaS5jIGZyb20gT2N0IDE2IDIwMDkKKyNuZWVkcyAyNTcgdGFibGUgZW50cmllcyAoQy1LZXJt aXQgVmVyc2lvbiAiOS4wLjI5OSIpLgorI09LOiAyMDEwLzEwLzI2CitocHV4MDcwMHNmOgorCUAk KE1BS0UpIGhwdXgtaGVhZGVyCisJQGVjaG8gJ3N1cHBvcnRpbmc6IE5PIGxvbmcgZmlsZW5hbWVz LCBOTyBuZXR3b3JrLCBOTyBjdXJzZXMuJworCSQoTUFLRSkgaHB1eDA3MDBub29wdCBLVEFSR0VU PSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTID0gLURIUFVYIC1ESFBVWDcgLURTSUdfViAt RE5PR0VUVVNFUlNIRUxMIC1ERk5GTE9BVCBcCisJLUROT19ETlNfU1JWICQoS0ZMQUdTKSAtV2Ms LU53MjYwIgorCisJJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJ IkNGTEFHUyA9IC1ESFBVWCAtREhQVVg3IC1EU0lHX1YgLUROT0dFVFVTRVJTSEVMTCAtREZORkxP QVQgXAorCS1ETk9fRE5TX1NSViAkKEtGTEFHUykgLVdjLC1OdzI2MCAkKE9GTEFHUykiIFwKKwki TE5LRkxBR1MgPSAtcyIgIkxJQlMgPSAtbG0gJChMSUJTKSIKKworI0V4YWN0bHkgYXMgaHB1eDA3 MDBzZiBidXQgd2l0aCBjb21waWxlciBvcHRpbWl6YXRpb246CisjT0s6IDIwMDkvMDkvMzAKK2hw dXgwNzAwb3NmOgorCUBNRVNTQUdFMT0id2l0aCBjb21waWxlciBvcHRpbWl6YXRpb24iIFwKKwkk KE1BS0UpIGhwdXgwNzAwc2YgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIktGTEFHUyA9 ICQoS0ZMQUdTKSIgIk9GTEFHUyA9IC1PIgorCisjSFAtVVggNy4wLCBzaG9ydCBmaWxlbmFtZXMs IGJ1dCB3aXRoIHRjcC9pcCBhbmQgY3Vyc2VzLgorI1RvIHVzZSB0aGlzLCB5b3UgbXVzdCBoYXZl IGJvdWdodCB0aGUgQVJQQSBTZXJ2aWNlcyBQcm9kdWN0IGZyb20gSFAsIGFuZCB5b3UKKyNtdXN0 IGhhdmUgL3Vzci9saWIvbGliQlNELmEuCisjCisjSWYgeW91IGdldCBjb21waWxlciB3YXJuaW5n cyBsaWtlOgorIydTeW1ib2wgdGFibGUgb3ZlcmZsb3cuIFRyeSB0aGUgLVdjLC1OcyBvcHRpb24u JyAoYXMgZm9yIGNrdXVzNC5jIG9yCisjb3RoZXIgZmlsZXMpIGluY3JlYXNlIHRoZSAnLi4uJyB2 YWx1ZSBpbiAnLVdjLC1Ocy4uLichIFRoZSBkZWZhdWx0IG1heGltdW0KKyNzeW1ib2wgdGFibGUg c2l6ZSAoLU5zKSBpcyAyMDAwIHRhYmxlIGVudHJpZXMuIGNrdXVzNC5jIGZyb20gTWFyIDEyIDIw MTAKKyNuZWVkcyAyMDMxIHRhYmxlIGVudHJpZXMgKEMtS2VybWl0IFZlcnNpb24gIjkuMC4yOTki KS4KKyNPSzogMjAxMC8wMy8yNAoraHB1eDA3MDBzZnRjcGM6CisJQCQoTUFLRSkgaHB1eC1oZWFk ZXIKKwlAZWNobyAnc3VwcG9ydGluZzogTk8gbG9uZyBmaWxlbmFtZXMsIFxjJworCUBlY2hvICdi dXQgd2l0aCBuZXR3b3JraW5nLCBjdXJzZXMsIEhEQiB1dWNwLi4uJworCSQoTUFLRSkgaHB1eDA3 MDBub29wdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTID0gIC1ESFBVWERF QlVHIC1ESFBVWCAtREhQVVg3IC1EVENQU09DS0VUIC1EU0lHX1YgXAorCS1EQ0tfUkVESVIgLURD S19SVFNDVFMgLURDS19DVVJTRVMgLUROT0dFVFVTRVJTSEVMTCAtREZORkxPQVQgXAorCS1ETk9f RE5TX1NSViAtREhEQlVVQ1AgLURMT0NLX0RJUj1cXFwiL3Vzci9zcG9vbC91dWNwXFxcIiBcCisJ LUROT0xPTkdMT05HICQoS0ZMQUdTKSAtV2MsLU53MjYwLC1OczIwNDAiCisKKwkkKE1BS0UpIHhl cm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTID0gIC1ESFBVWERFQlVH IC1ESFBVWCAtREhQVVg3IC1EVENQU09DS0VUIC1EU0lHX1YgXAorCS1EQ0tfUkVESVIgLURDS19S VFNDVFMgLURDS19DVVJTRVMgLUROT0dFVFVTRVJTSEVMTCAtREZORkxPQVQgXAorCS1ETk9fRE5T X1NSViAtREhEQlVVQ1AgLURMT0NLX0RJUj1cXFwiL3Vzci9zcG9vbC91dWNwXFxcIiBcCisJLURO T0xPTkdMT05HICQoS0ZMQUdTKSAtV2MsLU53MjYwLC1OczIwNDAgJChPRkxBR1MpIiBcCisJIkxO S0ZMQUdTID0gLXMiICJMSUJTID0gLWxtIC1sQlNEIC1sY3Vyc2VzIgorCisjRXhhY3RseSBhcyBh Ym92ZSBidXQgd2l0aCBjb21waWxlciBvcHRpbWl6YXRpb246CisjT0s6IDIwMDkvMDkvMzAKK2hw dXgwNzAwb3NmdGNwYzoKKwlATUVTU0FHRTE9IndpdGggY29tcGlsZXIgb3B0aW1pemF0aW9uIiBc CisJJChNQUtFKSBocHV4MDcwMHNmdGNwYyBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwki S0ZMQUdTID0gJChLRkxBR1MpIiAiT0ZMQUdTID0gLU8iCisKKyNIUCA5MDAwIHNlcmllcyAzMDAv ODAwIEhQLVVYIDcuMCwgbG9uZyBmaWxlbmFtZXMsIG5ldHdvcmsgc3VwcG9ydCwgSERCIHV1Y3As CisjYnV0IE5PIGN1cnNlcy4gU2VlIGNvbW1lbnRzIGluIGhwdXgwNzAwc2Z0Y3BjIGFib3V0IFRD UC9JUCBzdXBwb3J0LgorIworI0lmIHlvdSBnZXQgY29tcGlsZXIgd2FybmluZ3MgbGlrZToKKyMn U3ltYm9sIHRhYmxlIG92ZXJmbG93LiBUcnkgdGhlIC1XYywtTnMgb3B0aW9uLicgKGFzIGZvciBj a3V1czQuYyBvcgorI290aGVyIGZpbGVzKSBpbmNyZWFzZSB0aGUgJy4uLicgdmFsdWUgaW4gJy1X YywtTnMuLi4nISBUaGUgZGVmYXVsdCBtYXhpbXVtCisjc3ltYm9sIHRhYmxlIHNpemUgKC1Ocykg aXMgMjAwMCB0YWJsZSBlbnRyaWVzLiBja3V1czQuYyBmcm9tIE1hciAxMiAyMDEwCisjbmVlZHMg MjAzMSB0YWJsZSBlbnRyaWVzIChDLUtlcm1pdCBWZXJzaW9uICI5LjAuMjk5IikuCisjT0s6IDIw MTAvMDMvMjQKK2hwdXgwNzAwbGZuOgorCUAkKE1BS0UpIGhwdXgtaGVhZGVyCisJQGVjaG8gJ3N1 cHBvcnRpbmc6IGxvbmcgZmlsZW5hbWVzLCBuZXR3b3JraW5nLCBIREIgdXVjcCQoTUVTU0FHRTIp Li4uJworCSQoTUFLRSkgaHB1eDA3MDBub29wdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwK KwkiQ0ZMQUdTID0gIC1ESFBVWERFQlVHIC1ESFBVWCAtREhQVVg3IC1EVENQU09DS0VUIC1EU0lH X1YgLURGTkZMT0FUIFwKKwktRE5PR0VUVVNFUlNIRUxMIC1ETk9TRVRCVUYgLURDS19SRURJUiAt RENLX1JUU0NUUyAtRExPTkdGTiBcCisJLUROT19ETlNfU1JWIC1ERElSRU5UIC1ESERCVVVDUCAt RExPQ0tfRElSPVxcXCIvdXNyL3Nwb29sL3V1Y3BcXFwiIFwKKwktRE5PTE9OR0xPTkcgJChLRkxB R1MpIC1XYywtTncyNjAsLU5zMjA0MCIKKworCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RB UkdFVDotJChAKX0gXAorCSJDRkxBR1MgPSAgLURIUFVYREVCVUcgLURIUFVYIC1ESFBVWDcgLURU Q1BTT0NLRVQgLURTSUdfViAtREZORkxPQVQgXAorCS1ETk9HRVRVU0VSU0hFTEwgLUROT1NFVEJV RiAtRENLX1JFRElSIC1EQ0tfUlRTQ1RTIC1ETE9OR0ZOIFwKKwktRE5PX0ROU19TUlYgLURESVJF TlQgLURIREJVVUNQIC1ETE9DS19ESVI9XFxcIi91c3Ivc3Bvb2wvdXVjcFxcXCIgXAorCS1ETk9M T05HTE9ORyAkKEtGTEFHUykgLVdjLC1OdzI2MCwtTnMyMDQwICQoT0ZMQUdTKSIgXAorCSJMTktG TEFHUyA9IC1zIiAiTElCUyA9IC1sbSAtbEJTRCAkKExJQlMpIgorCisjRXhhY3RseSBhcyBhYm92 ZSArIGN1cnNlcy4KKyNPSzogMjAwOS8wOS8zMAoraHB1eDA3MDBsZm5jOgorCUBNRVNTQUdFMj0n LCBjdXJzZXMnIFwKKwkkKE1BS0UpIGhwdXgwNzAwbGZuIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChA KX0gXAorCSJLRkxBR1MgPSAtRENLX0NVUlNFUyAkKEtGTEFHUykiIFwKKwkiTElCUyA9IC1sY3Vy c2VzIgorCisjRXhhY3RseSBhcyBhYm92ZSBocHV4MDcwMGxmbiBidXQgd2l0aCBjb21waWxlciBv cHRpbWl6YXRpb246CisjT0s6IDIwMDkvMDkvMzAKK2hwdXgwNzAwb2xmbjoKKwlATUVTU0FHRTE9 IndpdGggY29tcGlsZXIgb3B0aW1pemF0aW9uIiBcCisJJChNQUtFKSBocHV4MDcwMGxmbiBLVEFS R0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiS0ZMQUdTID0gJChLRkxBR1MpIiAiT0ZMQUdTID0g LU8iCisKKyNFeGFjdGx5IGFzIGFib3ZlIGhwdXgwNzAwbGZuYyBidXQgd2l0aCBjb21waWxlciBv cHRpbWl6YXRpb246CisjT0s6IDIwMDkvMDkvMzAKK2hwdXgwNzAwb2xmbmM6CisJQE1FU1NBR0Ux PSJ3aXRoIGNvbXBpbGVyIG9wdGltaXphdGlvbiIgXAorCSQoTUFLRSkgaHB1eDA3MDBsZm5jIEtU QVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJLRkxBR1MgPSAkKEtGTEFHUykiICJPRkxBR1Mg PSAtTyIKKworI0hQIDkwMDAgU2VyaWVzIDMwMCBvciA0MDAsIEhQLVVYIDguMCwgbG9uZyBmaWxl bmFtZXMgYW5kIFRDUC9JUCBzdXBwb3J0LgorI1RoaXMgb25lIHNob3VsZCBhbHNvIHdvcmsgb24g NzAwLzgwMCwgYnV0IHdpdGhvdXQgUEEtc3BlY2lmaWMgb3B0aW1pemF0aW9uLgorI0luIGNhc2Ug LURDS19SVFNDVFMgYW5kIC1EQ0tfUkVESVIgbWFrZSB0cm91YmxlLCByZW1vdmUgdGhlbS4KKyNO T1RFOiBja2Nwcm8uYywgY2t1dXNyLmMgYW5kIGNrdXVzMy5jIGJsb3cgdXAgdGhlIG9wdGltaXpl ciwgc28gZG9uJ3Qgb3B0aW1pemUKKyN0aGVtLgorI0ZvciBIUC1VWCA4LjAgb24gTW90b3JvbGEg Q1BVcywgeW91IG1pZ2h0IGhhdmUgdG8gcmVpbnN0YWxsIHlvdXIga2VybmVsIHdpdGgKKyNtYXhk c2l6ID49IDB4MDMwMDAwMDAuICBCdXQgaWYgcGh5c2ljYWwgbWVtb3J5IGlzIHNtYWxsLCB0aGF0 IHN0aWxsIHdpbGwgbm90CisjaGVscCBtdWNoLgorI09LOiAyMDA5LzEwLzAxCitocHV4MDgwMDoK KwlAJChNQUtFKSBocHV4LWhlYWRlcgorCUBNRVNTQUdFMz0kJHtNRVNTQUdFMzo9J1RDUC9JUCd9 OyBcCisJZWNobyAic3VwcG9ydGluZzogbG9uZyBmaWxlbmFtZXMsICQkTUVTU0FHRTMsIEhEQiBV VUNQJChNRVNTQUdFMikuLi4iCisJJChNQUtFKSAtQiAiQ0M9JChDQykiICJDQzI9JChDQzIpIiBL VEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwlja2Nwcm8uJChFWFQpIGNrdXVzci4kKEVYVCkg Y2t1dXMzLiQoRVhUKSBcCisJIkNGTEFHUyA9ICAtRENLX1JFRElSIC1ESFBVWERFQlVHIC1ESFBV WCAtREhQVVg4IC1EUkVOQU1FIC1EU0lHX1YgXAorCS1ETk9TRVRCVUYgLURESVJFTlQgLURDS19S VFNDVFMgLURTVEVSTUlPWCAtRExPTkdGTiAtRFRDUFNPQ0tFVCBcCisJLURIREJVVUNQICAtRE5P X0ROU19TUlYgLURMT0NLX0RJUj1cXFwiL3Vzci9zcG9vbC91dWNwXFxcIiAtREZORkxPQVQgXAor CS1ETk9MT05HTE9ORyAkKEtGTEFHUykiCisKKwkkKE1BS0UpIC1CICJDQz0kKENDKSIgIkNDMj0k KENDMikiIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTID0gIC1E Q0tfUkVESVIgLURIUFVYREVCVUcgLURIUFVYIC1ESFBVWDggLURSRU5BTUUgLURTSUdfViBcCisJ LUROT1NFVEJVRiAtRERJUkVOVCAtRENLX1JUU0NUUyAtRFNURVJNSU9YIC1ETE9OR0ZOIC1EVENQ U09DS0VUIFwKKwktREhEQlVVQ1AgIC1ETk9fRE5TX1NSViAtRExPQ0tfRElSPVxcXCIvdXNyL3Nw b29sL3V1Y3BcXFwiIC1ERk5GTE9BVCBcCisJLUROT0xPTkdMT05HIC1ETk9EQ0xFTkRVU0VSU0hF TEwgJChLRkxBR1MpICQoT0ZMQUdTKSIgXAorCSJMTktGTEFHUyA9IC1zIiAiTElCUyA9IC1sbSAt bEJTRCAkKExJQlMpIgorCisjRXhhY3RseSBhcyBhYm92ZSBocHV4MDgwMCArIGN1cnNlcy4KKyNP SzogMjAwOS8xMC8wMQoraHB1eDA4MDBjOgorCUBNRVNTQUdFMj0nLCBjdXJzZXMnIFwKKwkkKE1B S0UpIGhwdXgwODAwICBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiS0ZMQUdTID0gJChL RkxBR1MpIC1EQ0tfQ1VSU0VTIiAiTElCUyA9IC1sY3Vyc2VzIgorCisjSFAgOTAwMCBIUC1VWCA4 LjAsIG5vIFRDUC9JUCBiZWNhdXNlIC91c3IvbGliL2xpYkJTRC5hIGNhbid0IGJlIGZvdW5kLAor I29yIFRDUC9JUCBoZWFkZXIgZmlsZXMgbWlzc2luZy4KKyNPSzogMjAwOS8xMC8wMQoraHB1eDA4 MDBub3RjcDoKKwlATUVTU0FHRTM9J05PIG5ldHdvcmssIE5PIGN1cnNlcycgXAorCSQoTUFLRSkg Ik1BS0U9JChNQUtFKSIgaHB1eDA4MDAgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIktG TEFHUyA9ICQoS0ZMQUdTKSAtVVRDUFNPQ0tFVCIKKworI05vdyB0aGUgc2FtZSBhcyBhYm92ZSBo cHV4MDgwMCBidXQgd2l0aCBjb21waWxlciBvcHRpbWl6YXRpb24KKyNPSzogMjAwOS8xMC8wMQor aHB1eDA4MDBvOgorCUBNRVNTQUdFMT0id2l0aCBjb21waWxlciBvcHRpbWl6YXRpb24iIFwKKwkk KE1BS0UpIGhwdXgwODAwIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJLRkxBR1MgPSAk KEtGTEFHUykiICJPRkxBR1MgPSAtTyIKKworI0V4YWN0bHkgYXMgYWJvdmUgaHB1eDA4MDAgKyBj dXJzZXMgYW5kIHdpdGggY29tcGlsZXIgb3B0aW1pemF0aW9uLgorI09LOiAyMDA5LzEwLzAxCito cHV4MDgwMG9jOgorCUBNRVNTQUdFMT0id2l0aCBjb21waWxlciBvcHRpbWl6YXRpb24iIFwKKwkk KE1BS0UpIGhwdXgwODAwYyBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiS0ZMQUdTID0g JChLRkxBR1MpIiAiT0ZMQUdTID0gLU8iICJMSUJTID0gLWxjdXJzZXMiCisKKyNFeGFjdGx5IGFz IGFib3ZlIGhwdXgwODAwbm90Y3AgYnV0IHdpdGggY29tcGlsZXIgb3B0aW1pemF0aW9uCisjT0s6 IDIwMDkvMTAvMDEKK2hwdXgwODAwb25vdGNwOgorCUBNRVNTQUdFMT0id2l0aCBjb21waWxlciBv cHRpbWl6YXRpb24iIFwKKwkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIGhwdXgwODAwbm90Y3AgS1RB UkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIktGTEFHUyA9ICQoS0ZMQUdTKSIgIk9GTEFHUyA9 IC1PIgorCisjSFAgOTAwMCBTZXJpZXMgNzAwIG9yIDgwMCwgSFAtVVggOC4wLCBsb25nIGZpbGVu YW1lcyBhbmQgVENQL0lQIHN1cHBvcnQuCisjIExpa2UgdGhlIHByZXZpb3VzIGVudHJpZXMsIGJ1 dCB3aXRoIFBBLVJJU0Mtc3BlY2lmaWMgb3B0aW1pemF0aW9uLgorI09LOiAyMDA5LzEwLzAxCito cHV4MDgwMHBhOgorCUBNRVNTQUdFMT0id2l0aCBQQS1SSVNDLXNwZWNpZmljIG9wdGltaXphdGlv biIgXAorCSQoTUFLRSkgaHB1eDA4MDAgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIktG TEFHUyA9ICQoS0ZMQUdTKSArT2JiMTEwMCIKKworI0FzIGFib3ZlLCBidXQgd2l0aCBjdXJzZXMu CisjT0s6IDIwMDkvMTAvMDEKK2hwdXgwODAwcGFjOgorCUBNRVNTQUdFMT0id2l0aCBQQS1SSVND LXNwZWNpZmljIG9wdGltaXphdGlvbiIgXAorCSQoTUFLRSkgaHB1eDA4MDBjIEtUQVJHRVQ9JCR7 S1RBUkdFVDotJChAKX0gXAorCSJLRkxBR1MgPSAkKEtGTEFHUykgK09iYjExMDAiCisKKyNBcyBh Ym92ZSwgYnV0IGNvbXBpbGVkIHdpdGggR0NDIDIuMy4zLgorI09LOiAyMDA5LzEwLzAxCitocHV4 MDgwMHBhZ2NjOgorCUBNRVNTQUdFMT0ndXNpbmcgdGhlIGdjYyBjb21waWxlcicgXAorCSQoTUFL RSkgaHB1eDA4MDAgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNDPWdjYyIgIkNDMj1n Y2MiICJLRkxBR1MgPSAtZnVuc2lnbmVkLWNoYXIgJChLRkxBR1MpIgorCisjSFAtVVggOS4wLCA5 LjAxLCA5LjAzLCA5LjA0LCA5LjA1LCA5LjA3LCA5LjEwIC4uLiwgKyBUQ1AvSVAgKyBjdXJzZXMs IGZ1bGx5CisjY29uZmlndXJlZC4gIFVzZSB0aGlzIGVudHJ5IHdpdGggdGhlIHJlc3RyaWN0ZWQg Y29tcGlsZXI6IG5vIG9wdGltaXphdGlvbiwgbm8KKyNBTlNJIHN1cHBvcnQuICBJZiB5b3UgZ2V0 IHVucmVzb2x2ZWQgc29ja2V0cyBsaWJyYXJ5IHJlZmVyZW5jZXMgYXQgbGluayB0aW1lLAorI3Ro ZW4gdHJ5IGFkZGluZyAtbEJTRCB0byBMSUJTLCBvciBlbHNlIHJlbW92ZSAtRFRDUFNPQ0tFVCB0 byBidWlsZCBhIHZlcnNpb24KKyN3aXRob3V0IFRDUC9JUCBzdXBwb3J0LgorIworI1BsZWFzZSBu b3RlIHRoYXQgd2UgaGF2ZSB0byBhZGQgdGhlIGNvbXBpbGVyIG9wdGlvbiArREExLjAvK0RBMS4x IHRvIGF2b2lkCisjY29yZS1kdW1wcyBmb3IgbGFyZ2UgYXJndW1lbnRzIGluIElGIE1BVENILiBU aGUgbWFuIHBhZ2Ugc2F5cyB0aGVzZSBvcHRpb25zCisjYXJlIGRlZmF1bHQgYnV0IEMtS2VybWl0 IGR1bXBzIGNvcmUgd2l0aG91dCB0aGVtISBUaGVyZWZvcmUga2VlcCB0aGVtCisjdW50b3VjaGVk LiBJZiB5b3Ugd2FudCB0byBvdmVyd3JpdGUgb3IgZGlzYWJsZSB0aGUgK0RBMS4wLytEQTEuMSBv cHRpb24gdXNlCisjJ21ha2UgaHB1eDA5MDAgT0ZMQUdTPS4uLicuIEFuIG90aGVyIHBvc3NpYmls aXR5IHdvdWxkIGJlIHRvIGNyZWF0ZSBhIG5ldworI2tlcm5lbCB3aXRoIG1heHNzaXogPj0gMHgw MTE4NTAwMCAoZGVmYXVsdCBtYXhzc2l6PTB4MDA4MDAwMDApLgorI09LOiAyMDA5LzA5LzI0Cito cHV4MDkwMDoKKwlATUVTU0FHRTFBPScuIFJlYWQgaHB1eDA5MDAgZW50cnkgY29tbWVudHMgaWYg eW91IGhhdmUgdHJvdWJsZS4nIFwKKwkkKE1BS0UpIGhwdXgtaGVhZGVyCisJQGNhc2UgYHVuYW1l IC1tYCBpbiBcCisJICAqL1szNF0qKSBLRkxBR1M9Jy1ETk9MT05HTE9ORyAkKEtGTEFHUyknIDs7 IFwKKwkgICovNyopICAgIEFGTEFHUz0nK0RBMS4xJyA7OyBcCisJICAqLzgqKSAgICBBRkxBR1M9 JytEQTEuMCcgOzsgXAorCWVzYWMgOyBcCisJT0ZMQUdTPSQke09GTEFHUzotJCRBRkxBR1N9IDsg XAorCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1Mg PSAtREhQVVhERUJVRyAtREhQVVg5IC1EU1RFUk1JT1ggLURESVJFTlQgLURVVElNRUggXAorCS1E Tk9TRVRCVUYgLURDS19DVVJTRVMgLURUQ1BTT0NLRVQgLURSRU5BTUUgLURDS19SRURJUiAtRExP TkdGTiBcCisJLURIREJVVUNQIC1ETE9DS19ESVI9XFxcIi91c3Ivc3Bvb2wvdXVjcFxcXCIgLURG TkZMT0FUIFwKKwktRE5PRENMRU5EVVNFUlNIRUxMICQkS0ZMQUdTICQkT0ZMQUdTIiBcCisJIkxO S0ZMQUdTID0gLXMiICJMSUJTID0gLWxtIC1sY3Vyc2VzIiAiQ0M9JChDQykiICJDQzI9JChDQzIp IgorCisjTGlrZSBocHV4MDkwMCwgYnV0IGZvciB0aGUgInZhbHVlLWFkZGVkIiBjb21waWxlciBv biBhbGwgSFAgOTAwMCBtb2RlbHMuCisjQWRkcyBvcHRpbWl6YXRpb24gYW5kIEFOU0kgY29tcGls YXRpb246CisjICtPMiBtYWtlcyBzbWFsbGVyIGV4ZWN1dGFibGUgKD0gLU8gPSBMZXZlbC0xIGFu ZCBnbG9iYWwgb3B0aW1pemF0aW9uKQorIyArTzMgYWRkcyBpbnRlcnByb2NlZHVyYWwgZ2xvYmFs IG9wdGltaXphdGlvbiwgbWFrZXMgYmlnZ2VyIGV4ZWN1dGFibGUuCisjIFBsZWFzZSBub3RlOiBU byBzdXBwb3J0IGxvbmctbG9uZyB3ZSB3b3VsZCBuZWVkIGNvbXBpbGVyIHN3aXRjaCAnLUFlJyBi dXQKKyMgdGhpcyBvbmUgd29ya3Mgb25seSBvbiBSaXNjIHN5c3RlbXMuIEJ1dCB0aGUgZXF1aXZh bGFudCBjb21waWxlciBmbGFncworIyAnLUFhIC1EX0hQVVhfU09VUkNFICtlJyB3b3JrcyBmb3Ig TW90b3JvbGEgYW5kIFJpc2MuCisjIElmIG9wdGltaXphdGlvbiBmYWlscyBvbiBzb21lIG1vZHVs ZXMsIHlvdSBjYW4gYWRkOgorIyAgK09iYjxuPiwgK09saW1pdCA8bj4sIG9yICtPbm9saW1pdCwg ZGVwZW5kaW5nIG9uIHlvdXIgY2MgdmVyc2lvbiwKKyMgd2hlcmUgPG4+IGlzIGEgbnVtYmVyLCBl LmcuICtPYmIxMjAwLiAgSW4gb3RoZXIgd29yZHMsIGlmIHlvdSBnZXQgb3B0aW1pemVyCisjIHdh cm5pbmdzLCBhZGQgKGZvciBleGFtcGxlKSArT2JiMTIwMDsgaWYgeW91IHN0aWxsIGdldCBvcHRp bWl6ZXIgd2FybmluZ3MsCisjIGluY3JlYXNlIHRoZSBudW1iZXIuICBSZXBlYXQgdW50aWwgd2Fy bmluZ3MgZ28gYXdheS4gIElmIHlvdXIgY29tcGlsZXIKKyMgcGVybWl0cyBpdCwgdXNlICtPbm9s aW1pdC4gSWYgb3B0aW1pemVyIGJsb3dzIHVwIG9uIGNrY3Byby5jLCBzZWUgbmV4dCBlbnRyeS4K KyMgUmVwb3J0ZWRseSwgb24gc29tZSBjb25maWd1cmF0aW9ucywgc3VjaCBhcyBIUDkwMDAvNDI1 ZSBvciAvMzQwLCBwZXJoYXBzCisjIGRlcGVuZGluZyBvbiB0aGUgYW1vdW50IG9mIG1haW4gbWVt b3J5LCB0aGlzIGVudHJ5IG1pZ2h0IGZhaWwgbm8gbWF0dGVyIHdoYXQKKyMgeW91IGRvICgiT3V0 IG9mIE1lbW9yeSIsICJjYzogRmF0YWwgZXJyb3IgaW4gL2xpYi9jLmMxIiwgZXRjKS4gIEluIHRo YXQgY2FzZQorIyB1c2UgIm1ha2UgaHB1eDA5MDAiIChubyAibyIpLgorI09LOiAyMDA5LzA5LzI0 CitocHV4MDkwMG86CisJQE1FU1NBR0UxPSQke01FU1NBR0UxOi0id2l0aCBjb21waWxlciBvcHRp bWl6YXRpb24ifSBcCisJJChNQUtFKSBocHV4MDkwMCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9 IFwKKwkiS0ZMQUdTID0gJChLRkxBR1MpIC1BYSAtRENLX0FOU0lDIC1EX0hQVVhfU09VUkNFICtP MiArZSIKKworIyBGb3IgSFAtVVggOS4wIG9uIE1vdG9yb2xhIENQVXMsIG9wdGltaXphdGlvbiBv ZiBja2Nwcm8uYyB0ZW5kcyB0byBibG93IHVwCisjIHRoZSBjb21waWxlci4gIFlvdSBtaWdodCBo YXZlIHRvIHJlaW5zdGFsbCB5b3VyIGtlcm5lbCB3aXRoIG1heGRzaXogPj0KKyMgMHgwMzAwMDAw MC4gIEJ1dCBpZiBwaHlzaWNhbCBtZW1vcnkgaXMgc21hbGwsIHRoYXQgc3RpbGwgd2lsbCBub3Qg aGVscCBtdWNoLgorIyBJbiB0aGF0IGNhc2UsIHVzZSB0aGlzIGVudHJ5IHRvIHNraXAgb3B0aW1p emF0aW9uIG9mIGNrY3Byby5jLiAgQnV0IGZvcgorIyBDLUtlcm1pdCA4LjAuMjA4IHlvdSBuZWVk IGEga2VybmVsIHdpdGggbWF4ZHNpeiA+PSAweDAyMDAwMDAwIHRvIGNvbXBpbGUgYW4KKyMgb3B0 aW1pemVkIGNrY2Z0cC5jLgorIyBQbGVhc2Ugbm90ZTogVG8gc3VwcG9ydCBsb25nLWxvbmcgd2Ug d291bGQgbmVlZCBjb21waWxlciBzd2l0Y2ggJy1BZScgYnV0CisjIHRoaXMgb25lIHdvcmtzIG9u bHkgb24gUmlzYyBzeXN0ZW1zLiBCdXQgdGhlIGVxdWl2YWxhbnQgY29tcGlsZXIgZmxhZ3MKKyMg Jy1BYSAtRF9IUFVYX1NPVVJDRSArZScgd29ya3MgZm9yIE1vdG9yb2xhIGFuZCBSaXNjLgoraHB1 eDA5MDBtNjhrbzoKKwlATUVTU0FHRTE9J3dpdGhvdXQgY29tcGlsZXIgb3B0aW1pemF0aW9uIGZv ciBja2Nwcm8uJChFWFQpIC4uLicgXAorCSQoTUFLRSkgaHB1eC1oZWFkZXIKKwkkKE1BS0UpIGNr dXVzci4kKEVYVCkgY2t1dXMzLiQoRVhUKSBja3V1czQuJChFWFQpIFwKKwlja2NmdHAuJChFWFQp IGNrY3Byby4kKEVYVCkgXAorCSJDRkxBR1MgPSAtREhQVVhERUJVRyAtREhQVVg5IC1EU1RFUk1J T1ggLURESVJFTlQgXAorCS1ETk9TRVRCVUYgLURDS19DVVJTRVMgLURUQ1BTT0NLRVQgLURSRU5B TUUgIC1EQ0tfUkVESVIgLURMT05HRk4gXAorCS1ESERCVVVDUCAtRExPQ0tfRElSPVxcXCIvdXNy L3Nwb29sL3V1Y3BcXFwiIC1ERk5GTE9BVCAkKEtGTEFHUykiCisJQGVjaG8KKwlATUVTU0FHRTE9 IndpdGggY29tcGlsZXIgb3B0aW1pemF0aW9uIGZvciB0aGUgcmVzdCIgXAorCSQoTUFLRSkgaHB1 eDA5MDAgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIktGTEFHUyA9ICQoS0ZMQUdTKSAt QWEgLURDS19BTlNJQyAtRF9IUFVYX1NPVVJDRSArTzIgK2UiCisKKyMgT2xkIG5hbWUgZm9yIGhw dXgwOTAwbTY4a28uCitocHV4MDkwMG1vdDoKKwkkKE1BS0UpIGhwdXgwOTAwbTY4a28gS1RBUkdF VD0kJHtLVEFSR0VUOi0kKEApfSAiS0ZMQUdTID0gJChLRkxBR1MpIgorCisjTGlrZSBocHV4MDkw MG8gYnV0IHdpdGggYWRkaXRpb25hbCBtb2RlbC03MDAvODAwLXNwZWNpZmljIG9wdGltaXphdGlv bnMuCisjICtFU2xpdCA9IGNvbnNvbGlkYXRlIHN0cmluZ3MgaW4gcmVhZC1vbmx5IG1lbW9yeS4K KyMgK0VTZnNjID0gaW5saW5lIG1pbGxpY29kZSBjYWxscyB3aGVuIGNvbXBhcmluZyBwb2ludGVy cy4KK2hwdXgwOTAwbzcwMDoKKwlAZWNobyAnSWYgeW91IGdldCBvcHRpbWl6ZXIgd2FybmluZ3Mg XGMnCisJQGVjaG8gJ3RyeSAibWFrZSBocHV4MDkwMG83MDAgS0ZMQUdTPStPYmIxMjAwIicKKwlA TUVTU0FHRTE9IndpdGggUEEtUklTQy1zcGVjaWZpYyBvcHRpbWl6YXRpb25zIiBcCisJJChNQUtF KSBocHV4MDkwMG8gS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIktGTEFHUyA9ICQoS0ZM QUdTKSArRVNsaXQgK0VTc2ZjIgorCisjSFAtVVggOS4wLCA5LjAxLCA5LjAzLCA5LjA0LCA5LjA1 LCA5LjA3LCA5LjEwIC4uLiwgKyBUQ1AvSVAgKyBjdXJzZXMsIGZ1bGx5CisjY29uZmlndXJlZCwg YnVpbHQgd2l0aCBnY2MsIGFsbCBtb2RlbHMgZXhjZXB0IDgwMCBzZXJpZXMuCisjWW91IG1pZ2h0 IG5lZWQgdG8gYWRkIHRoZSBpbmNsdWRlIHBhdGggZm9yIGdjYyBoZWFkZXJzLCBmb3IgZXhhbXBs ZToKKyMgJ0tGTEFHUz0tSS91c3IvZ251L2xpYi9nY2MtbGliL2hwcGExLjEtaHAtaHB1eC8yLjQu NS9pbmNsdWRlLycKK2hwdXgwOTAwZ2NjOgorCUBNRVNTQUdFMT0ndXNpbmcgdGhlIGdjYyBjb21w aWxlcicgXAorCSQoTUFLRSkgaHB1eDA5MDAgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBDQz1n Y2MgQ0MyPWdjYyBcCisJIktGTEFHUyA9IC1EQ0tfQU5TSUMgJChLRkxBR1MpIiBcCisJIk9GTEFH UyA9IC1mdW5zaWduZWQtY2hhciAtTzIgJChPRkxBR1MpIgorCisjSFAtOTAwMCBIUC1VWCAxMC4w ICsgVENQL0lQICsgY3Vyc2VzLCBmdWxseSBjb25maWd1cmVkLgorI1VzZSB3aXRoIHJlc3RyaWN0 ZWQgKGJ1bmRsZWQpIGNvbXBpbGVyOiBubyBvcHRpbWl6YXRpb24sIG5vIEFOU0kgc3VwcG9ydC4K KyNsaWJjdXJzZXMgbmVlZGVkIGZvciBmdWxsc2NyZWVuIGZpbGUgeGZlciBkaXNwbGF5IGluIEhQ LVVYIDEwLjAwIGFuZCAxMC4wMS4KKyNsaWJIY3Vyc2VzIChOT1QgbGliY3Vyc2VzISkgZm9yIGZ1 bGxzY3JlZW4gZGlzcGxheSwgdG8gd29yayBhcm91bmQgZmF0YWwgYnVncworI2luIEhQLVVYIDEw LjEwIGFuZCAxMC4yMCBjdXJzZXMuIE1heWJlIHdlIGNvdWxkIHVzZSBsY3Vyc2VzIGZvciAxMC4z MCwgc2luY2UKKyN0aGUgMTAuMTAgY3Vyc2VzIHByb2JsZW0gaXMgc3VwcG9zZWRseSBmaXhlZCBp biAxMC4zMC4KKyMgK0RBMS4wID0gR2VuZXJhdGUgUEEtUklTQyAxLjAgY29kZSB0aGF0IHJ1bnMg b24gYm90aCA3MDAgYW5kIDgwMCBtb2RlbHMuCisjICtEQTEuMSA9IEdlbmVyYXRlIFBBLVJJU0Mg MS4xIGNvZGUgdGhhdCBydW5zIG9uIGJvdGggNzAwIGFuZCA4MDAgbW9kZWxzLgorIyBOb3RlIHRo YXQgSFAtVVggMTAuMjAgYW5kIHVwd2FyZHMgZG8gbm90IHN1cHBvcnQgUEEtUklTQyAxLjAgc3lz dGVtcy4KKyMgQW5kIHRoYXQgYXMgb2YgRGVjIDIwMDEsIDExLjAwIGFuZCAxMS4xMSBhcmUgUEEt b25seSBhbmQgMTEuMjAgaXMgSUE2NC1vbmx5LgorIyBMYXRlciAxMS4yeCByZWxlYXNlcyBhcmUg ZXhwZWN0ZWQgdG8gYmUgZm9yIGJvdGguICBBcmNoaXRlY3R1cmUgY2FuIGJlCisjIGRldGVybWlu ZWQgd2l0aCB0aGUgbW9kZWwgY29tbWFuZCwgYXQgbGVhc3QgaW4gMTAuMjAgYW5kIGxhdGVyLi4u CisjRm9yIGZ1dHVyZSByZWxlYXNlcywgd2UgbmVlZCB0byBpbmNsdWRlICtEQTEuMSBmb3IgUEEg YnVpbGRzLCBzbyB0aGF0IGEKKyNiaW5hcnkgYnVpbHQgb24gUEEgMi4wIHdpbGwgc3RpbGwgd29y ayBvbiBQQSAxLjEgbWFjaGluZXMsIHdoZXJlYXMgK0RBMS4xCisjbXVzdCBOT1QgYmUgaW5jbHVk ZWQgZm9yIElBNjQgYnVpbGRzLgorIzQgSmFuIDIwMDYgLSBBZGRlZCBMYXJnZSBGaWxlIFN1cHBv cnQgKExGUykuICBMYXJnZSBmaWxlcyAoPjJHQikgYXJlCisjcG9zc2libGUgaW4gSFAtVVggMTAu MjAgYW5kIGxhdGVyLiAgVGhlIG9ubHkgY2hhbmdlIGlzIHRvIGFkZDoKKyMgLURfTEFSR0VGSUxF X1NPVVJDRSAtRF9GSUxFX09GRlNFVF9CSVRTPTY0CisjdG8gS0ZMQUdTLiAgVGhlc2Ugc2hvdWxk IGJlIGhhcm1sZXNzIGluIDEwLjAwIGFuZCAxMC4xMCwgaWYgYW55IG9mIGV4YW1wbGVzCisjb2Yg dGhvc2Ugc3RpbGwgZXhpc3QsIGJ1dCBJIGhhdmUgbm8gd2F5IHRvIHRlc3QgdGhpcyBoeXBvdGhl c2lzLgorI09LOiAyMDA5LzExLzE2CitocHV4MTAwMDoKKwlAJChNQUtFKSBocHV4LWhlYWRlcgor CUBMSUJTPSctbEhjdXJzZXMnIDsgXAorCUFGTEFHUz0nK0RBMS4xJyA7IFwKKwljYXNlIGB1bmFt ZSAtcmAgaW4gXAorCSAgIFtBQl0uMTAuMCopICBLRkxBR1M9Jy1ESFBVWDEwMDAgJChLRkxBR1Mp JyA7IFwKKwkgICAgICAgICAgICAgICAgQUZMQUdTPScrREExLjAnIDsgTElCUz0nLWxjdXJzZXMn ICA7OyBcCisJICAgW0FCXS4xMC4xKikgIEtGTEFHUz0nLURIUFVYMTAxMCAtRF9fSFBfQ1VSU0VT ICQoS0ZMQUdTKScgOyBcCisJICAgICAgICAgICAgICAgIDs7IFwKKwkgICBbQUJdLjEwLjIqKSAg S0ZMQUdTPSctREhQVVgxMDIwIC1EX19IUF9DVVJTRVMgJChLRkxBR1MpJyA7IFwKKwkgICAgICAg ICAgICAgICAgOzsgXAorCSAgIFtBQl0uMTAuMyopICBLRkxBR1M9Jy1ESFBVWDEwMzAgLURfX0hQ X0NVUlNFUyAkKEtGTEFHUyknIDsgXAorCSAgICAgICAgICAgICAgICA7OyBcCisJICAgW0FCXS4x MC4/KikgIEtGTEFHUz0nLURIUFVYMTBYWCAtRF9fSFBfQ1VSU0VTICQoS0ZMQUdTKScgOyBcCisJ ICAgICAgICAgICAgICAgIDs7IFwKKwkgICBbQUJdLjExLjAqKSAgS0ZMQUdTPSctREhQVVgxMTAw IC1EX19IUF9DVVJTRVMgJChLRkxBR1MpJyA7IFwKKwkgICAgICAgICAgICAgICAgOzsgXAorCSAg IFtBQl0uMTEuMSopICBLRkxBR1M9Jy1ESFBVWDExMDAgLURfX0hQX0NVUlNFUyAkKEtGTEFHUykn IDsgXAorCSAgICAgICAgICAgICAgICA7OyBcCisJICAgW0FCXS4xMS4/KikgIEtGTEFHUz0nLURI UFVYMTEwMCAtRF9fSFBfQ1VSU0VTICQoS0ZMQUdTKScgOyBcCisJICAgICAgICAgICAgICAgIEFG TEFHUz0nJyA7IExJQlM9Jy1sY3Vyc2VzJyA7OyBcCisJZXNhYyA7IFwKKwlPRkxBR1M9JCR7T0ZM QUdTOi0kJEFGTEFHU30gOyBcCisJJChNQUtFKSAiU0hFTEw9L3Vzci9iaW4vc2giIHhlcm1pdCBL VEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0M9JChDQykiICJDQzI9JChDQzIpIiBcCisJ IkNGTEFHUyA9IC1ESFBVWDEwIC1ERElSRU5UIC1EU1RFUk1JT1ggLURDS19EU1lTSU5JIC1ESERC VVVDUCBcCisJLURDS19DVVJTRVMgLURDS19XUkVGUkVTSCAtRFRDUFNPQ0tFVCAtRENLX1JFRElS IC1EUkVOQU1FIC1ERk5GTE9BVCBcCisJLURfTEFSR0VGSUxFX1NPVVJDRSAtRF9GSUxFX09GRlNF VF9CSVRTPTY0IFwKKwkkJEtGTEFHUyAkJE9GTEFHUyIgXAorCSJMTktGTEFHUz0tcyAkKExOS0ZM QUdTKSIgIkxJQlMgPSAtbG0gJCRMSUJTICQoS0xJQlMpIgorCisjIFRoaXMgaXMgYSBrbHVkZ2Us IGNvcHlpbmcgaHB1eDA5MDBnY2MgYW5kIGFkYXB0aW5nIGhwdXgxMDAwCisjIChhZGQgQ0MgYW5k IENDMiwgZHJvcCB0aGUgQTEuWzB8fDFdKQorIyBCdWlsZHMgdy8gbm8gY29tcGlsZXIgd2Fybmlu Z3MgYnV0IG1pbmltYWxseSB0ZXN0ZWQuCisjCisjT0s6IDIwMDkvMDkvMjEKK2hwdXgxMDAwZ2Nj OgorCUBNRVNTQUdFMT0idXNpbmcgdGhlIGdjYyBjb21waWxlciAkKE1FU1NBR0UxKSIgXAorCSQo TUFLRSkgaHB1eDEwMDAgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBDQz1nY2MgQ0MyPWdjYyBc CisJIktGTEFHUyA9ICQoS0ZMQUdTKSIgIk9GTEFHUyA9IC1EQ0tfQU5TSUMgLWZ1bnNpZ25lZC1j aGFyIC1PMiIKKworIyBUcnVzdGVkIEhQLVVYIDEwCisjIGVjaG8gS0ZMQUdTPSQoS0ZMQUdTKSBZ VEFSR0VUIFlUQVJHRVQ9JChZVEFSR0VUKSAkKFhUQVJHRVQpIDsKK2hwdXgxMDAwdDoKKwlAY2Fz ZSAiJChLVEFSR0VUKSIgaW4gXAorCSAgICorb3BlbnNzbCB8ICorc3NsKSBcCisJCUtFTlRSWT1o cHV4MTAwMG8rb3BlbnNzbCA7OyBcCisJICAgKmdjYykgXAorCQlLRU5UUlk9aHB1eDEwMDBnY2Mg OzsgXAorCSAgICpvKykgS0VOVFJZPWhwdXgxMDAwbysgOzsgXAorCSAgICpvKQlLRU5UUlk9aHB1 eDEwMDBvIDs7IFwKKwkgICAqKQlLRU5UUlk9aHB1eDEwMDAgOzsgXAorCWVzYWMgOyBcCisJTUVT U0FHRTE9ImFuZCBzdXBwb3J0IGZvciAnVHJ1c3RlZCBIUC1VWCciIFwKKwkkKE1BS0UpICQkS0VO VFJZIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJLRkxBR1MgPSAkKEtGTEFHUykgLURI UFVYMTBfVFJVU1RFRCIgIktMSUJTPS1sc2VjIgorCitocHV4MTAwMHRvOgorCSQoTUFLRSkgaHB1 eDEwMDB0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0KKworaHB1eDEwMDB0bys6CisJJChNQUtF KSBocHV4MTAwMHQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfQorCitocHV4MTAwMHRnY2M6CisJ JChNQUtFKSBocHV4MTAwMHQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfQorCitocHV4MTAwMHRv K3NzbCBocHV4MTAwMHRvK29wZW5zc2w6CisJJChNQUtFKSBocHV4MTAwMHQgS1RBUkdFVD0kJHtL VEFSR0VUOi0kKEApfQorCitocHV4MTAwMHRnY2Mrc3NsIGhwdXgxMDAwdGdjYytvcGVuc3NsOgor CSQoTUFLRSkgaHB1eDEwMDB0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0KKworI0hQLTkwMDAg SFAtVVggMTAuMDAgYW5kIGhpZ2hlciB3aXRoIEFOU0kgcHJvdG90eXBpbmcgYW5kIG9wdGltaXph dGlvbi4KKyNQQS1SSVNDIG9ubHksIG5vIE1vdG9yb2xhIG9yIG90aGVyIGhhcmR3YXJlIGlzIHN1 cHBvcnQgaW4gSFAtVVggMTAuMDArKy4KKyNUaGUgdW5idW5kbGVkIG9wdGlvbmFsIGNvbXBpbGVy IGlzIHJlcXVpcmVkLgorI1lvdXIgcGF0aCBzaG91bGQgc3RhcnQgd2l0aCAvb3B0L2Fuc2ljL2Jp bi4KKyMgLVdsLC1GdyA9IFJlbW92ZSBzdGFjayB1bndpbmQgdGFibGUgKGluZm8gdXNlZCBieSBk ZWJ1Z2dlcnMpLgorIyArTzIgbWFrZXMgYSBzbWFsbGVyIGV4ZWN1dGFibGUgKD0gLU8gPSBMZXZl bC0xIGFuZCBnbG9iYWwgb3B0aW1pemF0aW9uKS4KKyMgK08zIGFkZHMgaW50ZXJwcm9jZWR1cmFs IGdsb2JhbCBvcHRpbWl6YXRpb24sIG1ha2VzIGEgYmlnZ2VyIGV4ZWN1dGFibGUuCisjICtPbm9s aW1pdCBhbGxvd3MgYWxsIG1vZHVsZXMgdG8gYmUgb3B0aW1pemVkLCBubyBtYXR0ZXIgaG93IGNv bXBsZXguICBCdXQ6CisjICAoYSkgK09ub2xpbWl0IGRvZXMgbm90IHNlZW0gdG8gYWx3YXlzIGJl IHRoZXJlIGluIEhQLVVYIDEwLjAwLCBhbmQ6CisjICAoYikgc29tZSBtb2R1bGVzIG1pZ2h0IHRh a2UgaG91cnMgb24gbG93LW1lbW9yeSBhbmQvb3Igc2xvdyBzeXN0ZW1zLgorIyBUaGUgZm9sbG93 aW5nIGFyZSBQQS1SSVNDLXNwZWNpZmljIG9wdGltaXphdGlvbnM6CisjICtFU2xpdCA9IENvbnNv bGlkYXRlIHN0cmluZ3MgaW4gcmVhZC1vbmx5IG1lbW9yeS4KKyMgK0VTZnNjID0gSW5saW5lIG1p bGxpY29kZSBjYWxscyB3aGVuIGNvbXBhcmluZyBwb2ludGVycy4KKyMgWW91IG1pZ2h0IG5lZWQg dG8gY29uZmlndXJlIHlvdXIga2VybmVsIGZvciBhIG1heGRzaXogb2YgMHgwQjAwMDAwMCAoMTc2 TUIpCisjIG9yIGdyZWF0ZXIgdG8gcHJldmVudCB0aGUgb3B0aW1pemVyIGZyb20gcnVubmluZyBv dXQgb2Ygc3BhY2UuCisjIERlY2VtYmVyIDIwMDE6ICtFU2xpdCArRVNzZmMgcmVtb3ZlZCBiZWNh dXNlIG5vdCBzdXBwb3J0ZWQgb24gSUE2NC4KKyMgU29tZWJvZHkgd2hvIGNhcmVzIGNhbiB1c2Ug J21vZGVsJyB0byBzZWUgd2hldGhlciBpdCdzIFBBLVJJU0Mgb3IgSUE2NAorIyBhbmQgaW5jbHVk ZSB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIG9wdGltaXphdGlvbiBmbGFncy4gIEFsc28gbm90 ZToKKyMgK0RBMS4xIGlzIFBBLW9ubHkuICBJZiB0aGlzIGlzIGluY2x1ZGVkIGluIGluIEhQLVVY IDExLjAwIG9yIGxhdGVyLAorIyB0aGVuICtEUzIuMCBzaG91bGQgYmUgaW5jbHVkZWQgdG9vIChi dXQgZG9uJ3QgdXNlICtEUzIuMCB3aXRob3V0ICtEQTEuMSwKKyMgb3IgZWxzZSB0aGUgYmluYXJ5 IHdvbid0IHJ1biBvbiBvbGRlciBQQSBoYXJkd2FyZSkuCisjT0s6IDIwMDkvMDkvMjEKK2hwdXgx MDAwbzoKKwlAY2FzZSBgdW5hbWUgLW1gIGluIFwKKwkgIGlhNjQpIDs7IFwKKwkgICopIE1GTEFH Uz0nK0VTbGl0ICtFU3NmYycgOzsgXAorCWVzYWMgOyBcCisJTUVTU0FHRTE9IndpdGggUEEtUklT Qy1zcGVjaWZpYyBvcHRpbWl6YXRpb25zICQoTUVTU0FHRTEpIiBcCisJJChNQUtFKSAiU0hFTEw9 L3Vzci9iaW4vc2giICJQQVRIPS9vcHQvYW5zaWMvYmluOiQkUEFUSCIgaHB1eDEwMDAgXAorCUtU QVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gIktGTEFHUyA9ICQoS0ZMQUdTKSBcCisJLUFlIC1EX0hQ VVhfU09VUkNFIC1EQ0tfQU5TSUMgLURVVElNRUggXAorCStPMiAtV2wsLUZ3ICQkTUZMQUdTIgor CisjTGlrZSBocHV4MTAwMG8gYnV0IHdpdGggIitPbm9saW1pdCIuCisjT24gNzAwIHNlcmllcyBz ZXQga2VybmVsIHBhcmFtZXRlciBtYXhkc2l6ID49IDB4MEQwMDAwMDAgKD0yMDhNQikuCisjVGFr ZXMgYSBsb25nIHRpbWUuCitocHV4MTAwMG8rOgorCUBNRVNTQUdFMT0iYW5kICtPbm9saW1pdCAk KE1FU1NBR0UxKSIgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJJChNQUtFKSBocHV4MTAw MG8gXAorCSJLRkxBR1MgPSAkKEtGTEFHUykgK09ub2xpbWl0IgorCisjSFAtVVggMTAueHggKyAx MS54eCB3aXRoIG9wdGltaXppbmcgQU5TSSBjb21waWxlciBhbmQgT3BlblNTTC4KKyNEZWZpbmUg U1NMTElCIGFuZCBTU0xJTkMgYXBwcm9wcmlhdGVseSBmb3IgeW91ciBPcGVuU1NMIGluc3RhbGxh dGlvbi4KKyNUbyBvdmVyd3JpdGUgdGhlIGRlZmF1bHQgU1NMTElCIGFuZCBTU0xJTkMgc2V0dGlu Z3MgeW91IGNhbiBhbHNvIHVzZSB0aGUKKyNjb21tYW5kLWxpbmUgdmFyaWFibGUgS1NTTExJQiBh bmQgS1NTTElOQyBsaWtlOgorI21ha2UgaHB1eDEwMDBvK29wZW5zc2wgS1NTTExJQj0tTC9vcHQv b3BlbnNzbC9saWIgS1NTTElOQz0tSS8uLi4KKyNEaXR0byBmb3IgdGhlIFpsaWIgbG9jYXRpb24u CisjVGhpcyBlbnRyeSB3b3JrcyBmb3IgQy1LZXJtaXQgOC4wLjIwNiBvbiBIUC1VWCAxMC4yMCAr IDExLjExCisjd2l0aCBPcGVuU1NMIDAuOS42ICsgMC45LjcKKyNOT1RFOiBhbiBBTlNJIEMgY29t cGlsZXIgaXMgcmVxdWlyZWQgZm9yIHRoZSBTU0wgaW50ZXJmYWNlLiAgSWYgeW91IGRvbid0Cisj aGF2ZSB0aGUgSFAgT3B0aW1pemluZyBBTlNJIGNvbXBpbGVyLCBzZWUgdGhlIGhwdXgxMDAwZ2Nj K29wZW5zc2wgdGFyZ2V0CisjYmVsb3cuCitocHV4MTAwMG8rc3NsIGhwdXgxMDAwbytvcGVuc3Ns OgorCUBjYXNlICIkKEtUQVJHRVQpIiBpbiBcCisJICAgKmdjYysqKSBcCisJICAgICAgICBLRU5U Ulk9aHB1eDEwMDBnY2MgOzsgXAorCSAgICopICAgS0VOVFJZPWhwdXgxMDAwbyA7OyBcCisJZXNh YyA7IFwKKwljYXNlICIkKEtUQVJHRVQpIiBpbiBcCisJICAgKi16bGliKikgXAorCSAgICAgICAg RFpMSUI9IExaTElCPSA7OyBcCisJICAgKikgICBEWkxJQj0tRFpMSUIgTFpMSUI9Jy1ML29wdC96 bGliL2xpYiAtbHonIDs7IFwKKwllc2FjIDsgXAorCVNTTElOQz0kJHtLU1NMSU5DOi0kKFNTTElO Qyl9OyBcCisJU1NMTElCPSQke0tTU0xMSUI6LSQoU1NMTElCKX07IFwKKwlNRVNTQUdFMT0iYW5k IHdpdGggT3BlblNTTCAkKE1FU1NBR0UxKSIgXAorCSQoTUFLRSkgJCRLRU5UUlkgS1RBUkdFVD0k JHtLVEFSR0VUOi0kKEApfSBcCisJS0ZMQUdTPSItRENLX0FVVEhFTlRJQ0FUSU9OIC1EQ0tfU1NM IC1ET1BFTlNTTF8wOTcgJCREWkxJQiBcCisJJCRTU0xJTkMgJChLRkxBR1MpIiBcCisJS0xJQlM9 IiQoS0xJQlMpIFwKKwkkJFNTTExJQiAtbHNzbCAtbGNyeXB0byBcCisJJCRMWkxJQiBcCisJIgor CisjIERpdHRvIGJ1dCB3aXRob3V0IFpsaWI6CitocHV4MTAwMG8rc3NsLXpsaWIgaHB1eDEwMDBv K29wZW5zc2wtemxpYjoKKwlATUVTU0FHRTE9ImJ1dCB3aXRob3V0IFpsaWIgJChNRVNTQUdFMSki IFwKKwkkKE1BS0UpIGhwdXgxMDAwbytzc2wgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfQorCisj SFAtVVggMTAuMDAgb3IgaGlnaGVyIHdpdGggT3BlblNTTCAwLjkuNy4gIENvbXBpbGVkIHdpdGgg Z2NjLgorI0Zyb20gQ2hyaXMgQ2hhbmV5LCBORUMgQW1lcmljYSBJbmMuICBIaXMgaW5zdHJ1Y3Rp b25zOgorIyAoMSkgSW5zdGFsbCBnY2MgdmVyc2lvbiAzLjIuMyAmIGJpbnV0aWxzIHZlcnNpb24g Mi4xMy4yCisjICAgICAodXNlZCBiaW5hcnkgZGVwb3QgZnJvbSBodHRwOi8vaHB1eC5jcy51dGFo LmVkdS8pCisjICgyKSBJbnN0YWxsIGdjYyBtYWtlIHZlcnNpb24gMy44MCBmcm9tIGh0dHA6Ly9o cHV4LmNzLnV0YWguZWR1LworIworIyBvcjogZ2NjIDIuOS4yMDAwLTEyLTEgZnJvbSAiTGludXgg dG8gaHAtdXggMTEuMC8xMWkgcG9ydGluZyBraXQgdmVyc2lvbiAxLjAKKyMgICAgICgyQ0QpIiBm cmVlIGZyb206ICBodHRwOi8vd3d3LnNvZnR3YXJlLmhwLmNvbQorIworIyAoMykgSW5zdGFsbCBv cGVuU1NMIHZlcnNpb24gMC45LjdiIGZyb20gaHR0cDovL3d3dy5zb2Z0d2FyZS5ocC5jb20KKyMg KDQpIEluc3RhbGwgZmxleCB2ZXJzaW9uIDIuNS40IGZyb20gaHR0cDovL2hwdXguY3MudXRhaC5l ZHUvCisjICg1KSBJbnN0YWxsIGdtcCB2ZXJzaW9uIDMuMS4xIGZyb20gaHR0cDovL2hwdXguY3Mu dXRhaC5lZHUvCisjCisjTm90ZSBmcm9tIFBldGVyIEVpY2hob3JuLCBhc3N5c3QgTXVuaWNoLiBJ dCB3b3JrcyBhbHNvIHdpdGhvdXQgZ2NjIG1ha2UhCitocHV4MTAwMGdjYytzc2wgaHB1eDEwMDBn Y2Mrb3BlbnNzbDoKKwkkKE1BS0UpIGhwdXgxMDAwbytvcGVuc3NsIEtUQVJHRVQ9JCR7S1RBUkdF VDotJChAKX0KKworIyBEaXR0byBidXQgd2l0aG91dCBabGliOgoraHB1eDEwMDBnY2Mrc3NsLXps aWIgaHB1eDEwMDBnY2Mrb3BlbnNzbC16bGliOgorCSQoTUFLRSkgaHB1eDEwMDBvK29wZW5zc2wt emxpYiBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9CisKKyMgU2FtZSBmb3IgSFAtVVggMTEKK2hw dXgxMTAwbytzc2wgaHB1eDExMDBvK29wZW5zc2w6CisJJChNQUtFKSBocHV4MTAwMG8rb3BlbnNz bCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9CisKKyNPSzogMjAwOS8wOS8yNgoraHB1eDExMDBn Y2Mrc3NsIGhwdXgxMTAwZ2NjK29wZW5zc2w6CisJJChNQUtFKSBocHV4MTAwMGdjYytvcGVuc3Ns IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0KKworaHB1eDExMDBvK3NzbC16bGliIGhwdXgxMTAw bytvcGVuc3NsLXpsaWI6CisJJChNQUtFKSBocHV4MTAwMG8rb3BlbnNzbC16bGliIEtUQVJHRVQ9 JCR7S1RBUkdFVDotJChAKX0KKworaHB1eDExMDBnY2Mrc3NsLXpsaWIgaHB1eDExMDBnY2Mrb3Bl bnNzbC16bGliOgorCSQoTUFLRSkgaHB1eDEwMDBnY2Mrb3BlbnNzbC16bGliIEtUQVJHRVQ9JCR7 S1RBUkdFVDotJChAKX0KKworIyBIUC1VWCAxMQorIyBOb3RlOiB0aGVzZSBhcmUgMzItYml0IGJ1 aWxkcyBldmVuIG9uIElBNjQuCisjIEFkZGluZyArREQ2NCB0byBDRkxBR1MgcHJvZHVjZXMgNjQt Yml0IG9iamVjdCBmaWxlcywKKyMgYnV0IHRoZSBsaW5rZXIgZmFpbHMgdG8gZmluZCB0aGUgbmVl ZGVkIDY0LWJpdCBsaWJzLgorI09LOiAyMDA5LzA5LzI2CitocHV4MTEwMDoKKwkkKE1BS0UpIGhw dXgxMDAwIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0KKworI09LOiAyMDA5LzA5LzI2CitocHV4 MTEwMG86CisJJChNQUtFKSBocHV4MTAwMG8gS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfQorCito cHV4MTEwMG8rOgorCSQoTUFLRSkgaHB1eDEwMDBvKyBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9 CisKKyNPSzogMjAwOS8wOS8yNgoraHB1eDExMDBnY2M6CisJJChNQUtFKSBocHV4MTAwMGdjYyBL VEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9CisKKyMgVHJ1c3RlZCBIUC1VWCAxMQoraHB1eDExMDB0 OgorCSQoTUFLRSkgaHB1eDEwMDB0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0KKworaHB1eDEx MDB0bzoKKwkkKE1BS0UpIGhwdXgxMDAwdG8gS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfQorCito cHV4MTEwMHRvKzoKKwkkKE1BS0UpIGhwdXgxMDAwdG8rIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChA KX0KKworaHB1eDExMDB0Z2NjOgorCSQoTUFLRSkgaHB1eDEwMDB0Z2NjIEtUQVJHRVQ9JCR7S1RB UkdFVDotJChAKX0KKworaHB1eDExMDB0bytzc2wgaHB1eDExMDB0bytvcGVuc3NsOgorCSQoTUFL RSkgaHB1eDEwMDB0bytvcGVuc3NsIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0KKworaHB1eDEx MDB0Z2NjK3NzbCBocHV4MTEwMHRnY2Mrb3BlbnNzbDoKKwkkKE1BS0UpIGhwdXgxMDAwdGdjYytv cGVuc3NsIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0KKworI1JlZ3VsdXMgb24gQ0lFIFN5c3Rl bXMgNjgwLzIwCitjaWU6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgQ0lF IFN5c3RlbXMgNjgwLzIwIFJlZ3VsdXMuLi4nCisJJChNQUtFKSB3ZXJtaXQgS1RBUkdFVD0kJHtL VEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUyA9IC1EQVRUU1YgLUROT0ZJTEVIIC1EQ0lFIC1ETk9M RUFSTiAkKEtGTEFHUykgLU8iICJMTktGTEFHUyA9IgorCisjIExpbnV4IDEuMiBvciBsYXRlciB3 aXRoIGdjYywgZHluYW1pYyBsaWJyYXJpZXMsIG5jdXJzZXMsIFRDUC9JUC4KKyMKKyMgSWYgeW91 ciBMaW51eCBzeXN0ZW0gaGFzIGN1cnNlcyByYXRoZXIgdGhhbiBuY3Vyc2VzLCB1c2UgdGhlIGxp bnV4YworIyBlbnRyeSwgb3IgaWYgdGhhdCBkb2Vzbid0IHdvcmssIGxpbnV4bmMuCisjCisjIFRo ZSBLZXJtaXQgImxhcmdlIG1lbW9yeSBtb2RlbCIgaXMgdXNlZCBieSBkZWZhdWx0IHRvIGNvbmZp Z3VyZSBiaWcgcGFja2V0CisjIGFuZCBzY3JpcHQgYnVmZmVycywgZXRjLiAgRm9yIHNtYWxsLW1l bW9yeSBvciBsaW1pdGVkLXJlc291cmNlIHN5c3RlbXMsCisjICJtYWtlIGxpbnV4IEtGTEFHUz0t RE5PQklHQlVGIi4KKyMKKyMgLURMSU5VWEZTU1RORCAoTGludXggRmlsZSBTeXN0ZW0gU3RhbmRh cmQgMS4yKSBnaXZlcyBVVUNQIGxvY2tmaWxlIC92YXIvbG9jaworIyB3aXRoIHN0cmluZyBwaWQu ICBSZW1vdmUgdGhpcyB0byBnZXQgL3Vzci9zcG9vbC91dWNwIHdpdGggaW50IHBpZCwgdXNlZCBp bgorIyB2ZXJ5IGVhcmx5IExpbnV4IHZlcnNpb25zLiAgRlNTVE5EIDEuMiBhbHNvIHNheXMgdGhh dCB0aGUgUElEIHN0cmluZyBpbiB0aGUKKyMgVVVDUCBsb2NrIGZpbGUgaGFzIGxlYWRpbmcgc3Bh Y2VzLiAgVGhpcyBpcyBhIGNoYW5nZSBmcm9tIEZTU1RORCAxLjAsIHdoaWNoCisjIHVzZWQgbGVh ZGluZyB6ZXJvcy4gIEFkZCAtREZTU1RORDEwIHRvIHN1cHBvcnQgRlNTVE5EIDEuMCBpbnN0ZWFk IG9mIDEuMi4KKyMgSSBob3BlIHN1YnNlcXVlbnQgZWRpdGlvbnMgb2YgdGhlIGZpbGUtc3lzdGVt IHN0YW5kYXJkIGRpZCBub3QgY2hhbmdlIHRoZXNlCisjIGFnYWluLgorIworIyBBZGQgLURPTElO VVhISVNQRUVEIChPbGQgTGludXggSGlnaCBTcGVlZCBzdXBwb3J0KSB0byB0dXJuIG9uIGFuIHVn bHkga2x1ZGdlCisjIGluIExpbnV4IDEuMCBhbmQgZWFybGllciB0byBzdXBwb3J0IHNwZWVkcyBv ZiA1NzYwMCBhbmQgMTE1MjAwLiAgRXh0cmVtZWx5CisjIG9sZCBMaW51eCBzeXN0ZW1zIChwcmUt MC45OXBsMTUpIHdpbGwgbm90IHN1cHBvcnQgdGhpcy4gIElmIE9MSU5VWEhJU1BFRUQgaXMKKyMg bm90IGRlZmluZWQsIHRoZW4gb25seSB0aGUgc3RhbmRhcmQgUE9TSVggdGVybWlvcyBtZXRob2Rz IG9mIHNldHRpbmcgdGhlIHBvcnQKKyMgc3BlZWQgd2lsbCBiZSB1c2VkLCBhbmQgaW4gdGhpcyBj YXNlIHNwZWVkcyBjYW4gYmUgYXMgaGlnaCBhcyA0NjA4MDAgaW4gbW9zdAorIyBtb2Rlcm4gTGlu dXggdmVyc2lvbnMuCisjCisjIC1EQ0tfUE9TSVhfU0lHIChQT1NJWCBzaWduYWwgaGFuZGxpbmcp IGlzIGdvb2QgZm9yIExpbnV4IHJlbGVhc2VzIGJhY2sgdG8gYXQKKyMgbGVhc3QgMC45OS4xNDsg aWYgaXQgY2F1c2VzIHRyb3VibGUgZm9yIHlvdSwgcmVtb3ZlIGl0IGZyb20gdGhlIENGTEFHUy4K KyMKKyMgLXBpcGUgcmVtb3ZlcyB0aGUgbmVlZCBmb3IgdGVtcCBmaWxlcyAtIHJlbW92ZSBpdCBp ZiBpdCBjYXVzZXMgdHJvdWJsZS4KKyMKKyMgLWZ1bnNpZ25lZC1jaGFyIG1ha2VzIGFsbCBjaGFy YWN0ZXJzIHVuc2lnbmVkLCBhcyB0aGV5IHNob3VsZCBoYXZlIGJlZW4KKyMgIGluIHRoZSBmaXJz dCBwbGFjZS4KKyMKKyMgQWRkIC1EQ0tfRFNZU0lOSSBpZiB5b3Ugd2FudCBhIHNoYXJlZCBzeXN0 ZW0td2lkZSBpbml0IGZpbGUuCisjCisjIFNlZSBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2t1YndyLmh0bWwgYWJvdXQgLUROT0NPVEZNQy4KKyMgQmV0dGVyIHN0aWxsLCBzaG91bGQg cmVhZCB0aGUgZW50aXJlIExpbnV4IHNlY3Rpb24gb2YgdGhhdCBkb2N1bWVudC4KKyMKKyMgVGhl ICJsaW51eGEiIGVudHJ5IGNhbiBiZSByZWZlcmVuY2VkIGRpcmVjdGx5IG9uIExJQkMgc3lzdGVt cywgYnV0IG5vdAorIyBHTElCQywgd2hlcmUgLWxjcnlwdCBpcyByZXF1aXJlZC4gIFRoZSAibWFr ZSBsaW51eCIgZW50cnkgc2hvdWxkIG5vcm1hbGx5CisjIGJlIHVzZWQgZm9yIGFsbCBidWlsZHMg b24gYWxsIExpbnV4IGRpc3RyaWJ1dGlvbnMgdW5sZXNzIHlvdSBoYXZlIHNwZWNpYWwKKyMgcmVx dWlyZW1lbnRzLCBpbiB3aGljaCBjYXNlIGtlZXAgcmVhZGluZy4gIENLX05FV1RFUk0gYWRkZWQg YWZ0ZXIgNy4wYjA0CisjIGR1ZSB0byBuZXcgY29tcGxhaW50cyBhYm91dCBuY3Vyc2VzIGNoYW5n aW5nIGJ1ZmZlcmluZyBvZiB0dHkuCisKK2xpbnV4YToKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0 ICQoQ0tWRVIpIGZvciBMaW51eCAxLjIgb3IgbGF0ZXIuLi4nCisJQGVjaG8gJ0lNUE9SVEFOVDog UmVhZCB0aGUgY29tbWVudHMgaW4gdGhlIGxpbnV4IHNlY3Rpb24gb2YgdGhlJworCUBlY2hvICdt YWtlZmlsZSBpZiB5b3UgaGF2ZSB0cm91YmxlLicKKwkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQk e0tUQVJHRVQ6LSQoQCl9ICJDQyA9IGdjYyIgIkNDMiA9IGdjYyIgXAorCSJDRkxBR1MgPSAtTyAt RExJTlVYIC1waXBlIC1mdW5zaWduZWQtY2hhciAtREZORkxPQVQgLURDS19QT1NJWF9TSUcgXAor CS1EQ0tfTkVXVEVSTSAtRFRDUFNPQ0tFVCAtRExJTlVYRlNTVE5EIC1ETk9DT1RGTUMgLURQT1NJ WCBcCisJLURVU0VfU1RSRVJST1IgJChLRkxBR1MpIiAiTE5LRkxBR1MgPSAkKExOS0ZMQUdTKSIg XAorCSJMSUJTID0gJChMSUJTKSAtbG0iCisKKyMgQXMgYWJvdmUgYnV0IHdpdGggcHJvZmlsaW5n CitsaW51eHA6CisJJChNQUtFKSBsaW51eGEgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSAiS0ZM QUdTPSQoS0ZMQUdTKSAtcGciIFwKKwkiTElCUz0tcGcgLWxjcnlwdCAtbHJlc29sdiIKKworI0xp bnV4LiAgVGhpcyBlbnRyeSBzaG91bGQgd29yayBmb3IgYW55IExpbnV4IGRpc3RyaWJ1dGlvbiBv biBhbnkgcGxhdGZvcm0sCisjMzItYml0IG9yIDY0LWJpdCwgZXhjZXB0IGZvciBleHRyZW1lbHkg YW5jaWVudCBvbmVzLiAgQXV0b21hdGljYWxseSBkZXRlY3RzOgorIyAuIGN1cnNlcywgbmN1cnNl cywgb3Igbm8gY3Vyc2VzCisjIC4gT2xkIHZlcnN1cyBuZXcgcHR5IGhhbmRsaW5nIChuZXcgPT0g Z2xpYmMgMi4xKyspCisjIC4gUHJlc2VuY2Ugb3IgYWJzZW5jZSBvZiBsaWJjcnlwdC5hIGFuZCA8 Y3J5cHQuaD4KKyMgLiBQcmVzZW5jZSBvciBhYnNlbmNlIG9mIGxpYnJlc29sdi5hCisjIC4gVHJh bnNpdGlvbmFsIExvbmcgRmlsZSBBUEkgZm9yIDMyLWJpdCBwbGF0Zm9ybXMgKFNVUyBWMiBVTklY IDk4IExGUykuCisjTm90ZTogVGhlIEhBVkVfUFRNWCB0ZXN0IHdhcyBwcmV2aW91c2x5ICJpZiB0 ZXN0IC1jIC9kZXYvcHRteCIgYnV0IHRoaXMgd2FzCisjbm90IHN1ZmZpY2llbnQgZm9yIERlYmlh biAyLjEsIGJlY2F1c2UgYWx0aG91Z2ggaXQgaGFkIC9kZXYvcHRteCwgaXQgZGlkIG5vdAorI2hh dmUgZ3JhbnRwdCgpLCB1bmxvY2twdCgpLCBvciBwdHNuYW1lKCksIHNvIGhhcyBiZWVuIGNoYW5n ZWQgdG8gbG9vayBmb3IgYQorI2dyYW50cHQoKSBwcm90b3R5cGUgaW4gdGhlIGhlYWRlciBmaWxl cy4gIE1vZGlmaWVkIGluIDguMC4yMDYgdG8gYWxsb3cgZm9yCisjbGlicmFyaWVzIHRoYXQgY29u dGFpbiAuc28ncyBidXQgbm8gLmEncywgZS5nLiBNYW5kcmFrZSA5LjAuCisjSEFWRV9CQVVEQk9Z IGFkZGVkIGluIDguMC4yMTAgZm9yIFJlZCBIYXQgLS0gaXQncyBsaWtlIEFJWCB0dHlsb2NrKCku CisjTW9kaWZpZWQgMTcgQXVnIDIwMDUgdG8gdXNlIG9wZW5wdHkoKSBpZiBhdmFpbGFibGUgYmVj YXVzZSB0aGUgb3RoZXIgc3R1ZmYKKyNkdW1wcyBjb3JlIGluIDY0LWJpdCBpYTY0IGFuZCB4ODZf NjQgYnVpbGRzLgorI0xvbmcgZmlsZSBzdXBwb3J0IGZvciAzMi1iaXQgYnVpbGRzIGFkZGVkIGlu IDguMC4yMTIgLSBpZiBmZWF0dXJlcy5oIGNvbnRhaW5zCisjX19VU0VfTEFSR0VGSUxFNjQgdGhl biB3ZSBzZXQgdGhlIGZsYWdzIHRoYXQgbXVzdCBiZSBzZXQgYmVmb3JlIHJlYWRpbmcgYW55Cisj aGVhZGVyIGZpbGVzOyBvbiAzMi1iaXQgcGxhdGZvcm1zIHN1Y2ggYXMgaTM4NiwgdGhpcyBwcm9k dWNlcyBhIDMyLWJpdCBidWlsZAorI2NhcGFibGUgb2YgYWNjZXNzaW5nLCBzZW5kaW5nLCByZWNl aXZpbmcsIGFuZCBtYW5hZ2luZyBsb25nICg+IDJHQikgZmlsZXMuCisjT24gNjQtYml0IHBsYXRm b3JtcywgaXQgZG9lcyBubyBoYXJtLgorI0FzIG9mIDMgTWFyY2ggMjAwOSB3ZSBkZXRlY3QgYXV0 b21hdGljYWxseSBpZiB3ZSBoYXZlIGN1cnNlcywgbmN1cnNlcywKKyNvciBubyBjdXJzZXMgYXQg YWxsLgorI0FkZGVkIEhBVkVfTE9DS0RFViBhcyBvcGVuU3VTRSA+PSAxMS4zIHVzZXMgdHR5bG9j ayBkaXJlY3RseSBpbnN0ZWFkIG9mCisjYmF1ZGJveSAyMDEwLzA4LzIzCisjT0s6IDIwMTEvMDYv MTgKK2xpbnV4OgorCUBpZiB0ZXN0IFwKKwlgZ3JlcCBncmFudHB0IC91c3IvaW5jbHVkZS8qLmgg L3Vzci9pbmNsdWRlL3N5cy8qLmggfCB3YyAtbGAgLWd0IDA7IFwKKwl0aGVuIGlmIHRlc3QgLWMg L2Rldi9wdG14OyB0aGVuIEhBVkVfUFRNWD0nLURIQVZFX1BUTVgnOyBcCisJZWxzZSBIQVZFX1BU TVg9Jyc7IGZpOyBmaSA7IFwKKwlpZiB0ZXN0IGBncmVwIG9wZW5wdHkgL3Vzci9pbmNsdWRlL3B0 eS5oIHwgd2MgLWxgIC1ndCAwOyBcCisJdGhlbiBIQVZFX09QRU5QVFk9Jy1ESEFWRV9PUEVOUFRZ JzsgXAorCWVsc2UgSEFWRV9PUEVOUFRZPScnOyBmaSA7IFwKKwlIQVZFX0xJQkNVUlNFUz0nJzsg XAorCWlmIHRlc3QgLWYgL3Vzci9saWI2NC9saWJuY3Vyc2VzLnNvIHx8IFwKKwkgICB0ZXN0IC1m IC91c3IvbGliL2xpYm5jdXJzZXMuYSAgfHwgXAorCSAgIHRlc3QgLWYgL3Vzci9saWIvbGlibmN1 cnNlcy5zbzsgdGhlbiBcCisJICBIQVZFX0xJQkNVUlNFUz0nLWxuY3Vyc2VzJzsgXAorCWVsc2Ug aWYgdGVzdCAtZiAvdXNyL2xpYjY0L2xpYmN1cnNlcy5zbyB8fCBcCisJICAgdGVzdCAtZiAvdXNy L2xpYi9saWJjdXJzZXMuYSB8fCBcCisJICAgdGVzdCAtZiAvdXNyL2xpYi9saWJjdXJzZXMuc287 IHRoZW4gXAorCSAgICAgSEFWRV9MSUJDVVJTRVM9Jy1sY3Vyc2VzJzsgZmk7IGZpOyBcCisJSEFW RV9DVVJTRVM9Jyc7IFwKKwlpZiB0ZXN0IC1uICckJEhBVkVfTElCQ1VSU0VTJzsgdGhlbiBcCisJ ICBpZiB0ZXN0IC1mIC91c3IvaW5jbHVkZS9uY3Vyc2VzLmg7IHRoZW4gXAorCSAgICBIQVZFX0NV UlNFUz0nLURDS19OQ1VSU0VTICAtSS91c3IvaW5jbHVkZS9uY3Vyc2VzJzsgXAorCSAgZWxzZSBp ZiB0ZXN0IC1mIC91c3IvaW5jbHVkZS9jdXJzZXMuaDsgdGhlbiBcCisJICAgIEhBVkVfQ1VSU0VT PSctRENLX0NVUlNFUyc7IFwKKwlmaTsgZmk7IGZpOyBcCisJaWYgdGVzdCAtZiAvdXNyL2luY2x1 ZGUvYmF1ZGJveS5oIHx8IHRlc3QgLWYgL3Vzci9pbmNsdWRlL3R0eWxvY2suaDsgXAorCXRoZW4g SEFWRV9MT0NLREVWPSctREhBVkVfTE9DS0RFVicgOyBcCisJZWxzZSBIQVZFX0xPQ0tERVY9Jycg OyBmaSA7IFwKKwlpZiB0ZXN0IC1mIC91c3IvaW5jbHVkZS9iYXVkYm95LmggOyBcCisJdGhlbiBI QVZFX0JBVURCT1k9Jy1ESEFWRV9CQVVEQk9ZJyA7IFwKKwllbHNlIEhBVkVfQkFVREJPWT0nJyA7 IGZpIDsgXAorCSQoTUFLRSkgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIktGTEFHUz0k JEhBVkVfQ1VSU0VTICQkSEFWRV9QVE1YICQkSEFWRV9MT0NLREVWIFwKKwkkJEhBVkVfQkFVREJP WSAkJEhBVkVfT1BFTlBUWSBcCisJYGdyZXAgX19VU0VfTEFSR0VGSUxFNjQgL3Vzci9pbmNsdWRl L2ZlYXR1cmVzLmggPiAvZGV2L251bGwgJiYgXAorCWVjaG8gJy1EX0xBUkdFRklMRV9TT1VSQ0Ug LURfRklMRV9PRkZTRVRfQklUUz02NCdgIFwKKwlgaWYgdGVzdCAtZiAvdXNyL2luY2x1ZGUvY3J5 cHQuaDsgdGhlbiBlY2hvIC1ESEFWRV9DUllQVF9IOyBmaWAgXAorCSQoS0ZMQUdTKSIgXAorCSJM SUJTPSQoTElCUykgJCRIQVZFX0xJQkNVUlNFUyBcCisJYGlmIHRlc3QgLW4gJyQkSEFWRV9PUEVO UFRZJzsgdGhlbiBlY2hvIC1sdXRpbDsgZmlgIFwKKwlgaWYgdGVzdCAtZiAvdXNyL2xpYjY0L2xp YnJlc29sdi5hIHx8IHRlc3QgLWYgL3Vzci9saWI2NC9saWJyZXNvbHYuc28gXAorCXx8IHRlc3Qg LWYgL3Vzci9saWIvbGlicmVzb2x2LmEgfHwgdGVzdCAtZiAvdXNyL2xpYi9saWJyZXNvbHYuc28g XAorCXx8IHRlc3QgLWYgL3Vzci9saWIvaTM4Ni1saW51eC1nbnUvbGlicmVzb2x2LmEgXAorCXx8 IHRlc3QgLWYgL3Vzci9saWIvaTM4Ni1saW51eC1nbnUvbGlicmVzb2x2LnNvIFwKKwl8fCBscyAv bGliL3g4Nl82NC1saW51eC1nbnUvbGlicmVzb2x2LiogPiAvZGV2L251bGwgMj4gL2Rldi9udWxs OyBcCisJdGhlbiBlY2hvIC1scmVzb2x2OyBmaWAgXAorCWBpZiB0ZXN0IC1mIC91c3IvbGliNjQv bGliY3J5cHQuYSB8fCB0ZXN0IC1mIC91c3IvbGliNjQvbGliY3J5cHQuc28gXAorCXx8IHRlc3Qg LWYgL3Vzci9saWIvbGliY3J5cHQuYSB8fCB0ZXN0IC1mIC91c3IvbGliL2xpYmNyeXB0LnNvIFwK Kwl8fCBscyAvbGliL3g4Nl82NC1saW51eC1nbnUvbGliY3J5cHQuKiA+IC9kZXYvbnVsbCAyPiAv ZGV2L251bGw7IFwKKwl0aGVuIGVjaG8gLWxjcnlwdDsgZmlgIFwKKwlgaWYgdGVzdCAtZiAvdXNy L2xpYjY0L2xpYmxvY2tkZXYuYSB8fCBcCisJdGVzdCAtZiAvdXNyL2xpYjY0L2xpYmxvY2tkZXYu c28gfHwgXAorCXRlc3QgLWYgL3Vzci9saWIvbGlibG9ja2Rldi5hIHx8IFwKKwl0ZXN0IC1mIC91 c3IvbGliL2xpYmxvY2tkZXYuc287IFwKKwl0aGVuIGVjaG8gLWxsb2NrZGV2OyBmaWAiIFwKKwls aW51eGEKKworIyBMaW51eCArIFNoYWRvdyBwYXNzd29yZHMgKyBQQU0KKyMgT0sgMjAxMS8wNi8x OAorbGludXgrc2hhZG93K3BhbToKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZv ciBMaW51eCtTaGFkb3crUEFNLi4uJworCSQoTUFLRSkgbGludXggS1RBUkdFVD0kJHtLVEFSR0VU Oi0kKEApfSBcCisJS0ZMQUdTPSItRENLX1NIQURPVyAtRENLX1BBTSAkKEtGTEFHUykiIFwKKwki TE5LRkxBR1MgPSAkKExOS0ZMQUdTKSIgXAorCSJMSUJTID0gLWxwYW0iCisKKyMgTGludXggc3lz dGVtcyB0aGF0IGhhdmUgbm8gPHN5cy9zZWxlY3QuaD4uCisjIChub3QgdGVzdGVkIGluIHJlY2Vu dCB5ZWFycywgcGVyaGFwcyBubyBsb25nZXIgbmVlZGVkKQorbGludXhuczoKKwkkKE1BS0UpIGxp bnV4IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gS0ZMQUdTPS1ETk9fU1lTX1NFTEVDVF9ICisK KyMgTGludXgtc2NyaXB0LW9ubHk6CisjIEEgbWluaW11bS1zaXplIHZlcnNpb24gZm9yIExpbnV4 IHRoYXQgZG9lcyBvbmx5IHNjcmlwdGluZyBhbmQKKyMgc2VyaWFsIGNvbW11bmljYXRpb24gLS0g bm8gbmV0d29ya3MsIG5vIGZpbGUgdHJhbnNmZXIsIG5vIHNlY3VyaXR5LgorIyBPSyAyMDExLzA2 LzE4CitsaW51eHNvOgorCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0g IkNDID0gZ2NjIiAiQ0MyID0gZ2NjIiBcCisJIkNGTEFHUyA9IC1PIC1ETElOVVggLXBpcGUgLWZ1 bnNpZ25lZC1jaGFyIC1EUE9TSVggLURDS19QT1NJWF9TSUcgXAorCS1ETElOVVhGU1NUTkQgLURO T0NPVEZNQyAtRE5PWEZFUiAtRE5PREVCVUcgLUROT0NTRVRTIC1ETk9IRUxQIFwKKwktRE5PTkVU IC1ETUlOSURJQUwgLUROT1NDUklQVCAtRE5PSUtTRCAtRE5PUFVTSCAkKEtGTEFHUykiIFwKKwki TE5LRkxBR1MgPSAkKExOS0ZMQUdTKSIgIkxJQlMgPSAiCisKKyMgU2VjdXJlIHRhcmdldHMgZm9y IExpbnV4LiAgVGhlc2Ugd29yayBvbiBSSEFTNCwgUkhFTDQsIGFuZCBSSEVMNSwKKyMgdW5saWtl IHNvbWUgb2YgdGhlIG9sZGVyIHRhcmdldHMgdGhhdCBmb2xsb3cuICBUaGV5IGhvb2sgaW50byB0 aGUgbWFpbiBMaW51eAorIyB0YXJnZXQgc28gd2UgcGljayB1cCBhbGwgdGhlIG90aGVyIG5ldyBz dHVmZiAtIGxhcmdlIGZpbGVzLCBiYXVkYm95LmgsIHRoZQorIyBhcHByb3ByaWF0ZSBwdHkgaW50 ZXJmYWNlLCBldGMuCisKKyMgTGludXggd2l0aCBLZXJiZXJvcyA1LgorIyBVc2UgIm1ha2UgbGlu dXgra3JiNSBLRkxBR1M9LUROT19LUkI1X0lOSVRfRVRTIiBpZiBuZWNlc3NhcnkuCisjT0sgMjAx MS8wNi8xNiBvbiBGZWRvcmEgMTQgd2l0aDoKKyMgbWFrZSBsaW51eCtrcmI1ICJMSUJTPSRMSUJT IC9saWIvbGliazVjcnlwdG8uc28uMyAvbGliL2xpYmNvbV9lcnIuc28uMiIKKyMgT24gUkhFTDU6 IG1ha2UgbGludXgra3JiNSAtVUNLX0RFUworbGludXgra3JiNToKKwlAZWNobyAnTWFraW5nIEMt S2VybWl0ICQoQ0tWRVIpIGZvciBMaW51eCB3aXRoIEtlcmJlcm9zIDUuLi4nCisJQGNhc2UgYG9w ZW5zc2wgdmVyc2lvbmAgaW4gXAorCSAgKjAuOS43KikgT1BFTlNTTE9QVElPTj0iLURPUEVOU1NM XzA5NyIgOzsgXAorCSAgKjAuOS44KikgT1BFTlNTTE9QVElPTj0iLURPUEVOU1NMXzA5OCIgOzsg XAorCSAgKjEuWzAtOV0uWzAtOV0qKSBPUEVOU1NMT1BUSU9OPSItRE9QRU5TU0xfMTAwIiA7OyBc CisJICAqKSBPUEVOU1NMT1BUSU9OPSIiIDs7IFwKKwllc2FjOyBcCisJSEFWRV9ERVM9Jyc7IFwK KwlERVNfTElCPScnOyBcCisJaWYgbHMgL3Vzci9saWIvbGliZGVzKiA+IC9kZXYvbnVsbCAyPiAv ZGV2L251bGwgfHwgXAorCSAgIGxzICQoU1NMTElCKS9saWJkZXMqID4gL2Rldi9udWxsIDI+IC9k ZXYvbnVsbDsgdGhlbiBcCisJICAgICAgREVTX0xJQj0nLWxkZXM0MjUnOyBcCisJICAgICAgSEFW RV9ERVM9Jy1EQ0tfREVTIC1ETElCREVTJzsgXAorICAgICAgICAgICAgICBlY2hvICJIQVZFIERF UyI7IFwKKyAgICAgICAgICAgZWxzZSBlY2hvICJOTyBERVMiOyBcCisJZmk7IFwKKwlLNUNSWVBU Tz0nJzsgXAorICAgICAgICBpZiBscyAvbGliL2xpYms1Y3J5cHRvKiA+IC9kZXYvbnVsbCAyPiAv ZGV2L251bGw7IHRoZW4gXAorICAgICAgICAgICAgICAgIEs1Q1JZUFRPPSctbGs1Y3J5cHRvJzsg XAorCWVsc2UgaWYgbHMgL3Vzci9saWIvbGliazVjcnlwdG8qID4gL2Rldi9udWxsIDI+IC9kZXYv bnVsbDsgdGhlbiBcCisJCUs1Q1JZUFRPPSctbGs1Y3J5cHRvJzsgXAorICAgICAgICBlbHNlIGlm IGxzIC91c3IvbGliNjQvbGliazVjcnlwdG8qID4gL2Rldi9udWxsIDI+IC9kZXYvbnVsbDsgdGhl biBcCisgICAgICAgICAgICAgICAgSzVDUllQVE89Jy1sazVjcnlwdG8nOyBcCisgICAgICAgIGZp OyBmaTsgZmk7IFwKKwlDT01fRVJSPScnOyBcCisJaWYgbHMgL2xpYi9saWJjb21fZXJyKiA+IC9k ZXYvbnVsbCAyPiAvZGV2L251bGw7IHRoZW4gXAorCQlDT01fRVJSPSctbGNvbV9lcnInOyBcCisJ Zmk7IFwKKwlHU1NBUElMSUI9Jy1sZ3NzYXBpJzsgXAorCWlmIGxzIC9saWIvbGliZ3NzYXBpX2ty YjUqID4gL2Rldi9udWxsIDI+IC9kZXYvbnVsbDsgdGhlbiBcCisJCUdTU0FQSUxJQj0nLWxnc3Nh cGlfa3JiNSc7IFwKKwllbHNlIGlmIGxzIC91c3IvbGliL2xpYmdzc2FwaV9rcmI1KiA+IC9kZXYv bnVsbCAyPiAvZGV2L251bGw7IHRoZW4gXAorCQlHU1NBUElMSUI9Jy1sZ3NzYXBpX2tyYjUnOyBc CisJZWxzZSBLNURJUj1gZWNobyAkKEs1TElCKSB8IHNlZCAnc3wtTHx8J2A7IFwKKwkJaWYgbHMg JCRLNURJUi9saWJnc3NhcGlfa3JiNSogPiAvZGV2L251bGwgMj4gL2Rldi9udWxsOyB0aGVuIFwK KwkJCUdTU0FQSUxJQj0nLWxnc3NhcGlfa3JiNSc7IFwKKwlmaTsgZmk7IGZpOyBcCisJJChNQUtF KSBsaW51eCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9ICJDQyA9IGdjYyIgIkNDMiA9IGdjYyIg XAorCSJLRkxBR1M9IC1EQ0tfQVVUSEVOVElDQVRJT04gLURDS19LRVJCRVJPUyAtREtSQjUgJCRP UEVOU1NMT1BUSU9OIFwKKwktRENLX0VOQ1JZUFRJT04gJCRIQVZFX0RFUyAkKEs1SU5DKSAkKEs1 SU5DKS9rcmI1IFwKKwktSS91c3IvaW5jbHVkZS9ldCAkKEtGTEFHUykiICJMTktGTEFHUyA9ICQo TE5LRkxBR1MpIiBcCisJIkxJQlMgPSAkKEs1TElCKSAkJERFU19MSUIgLWxjcnlwdG8gJCRHU1NB UElMSUIgLWxrcmI1IFwKKwkkJEs1Q1JZUFRPICQkQ09NX0VSUiAkKExJQlMpIiA7IFwKKwlpZiBb ICEgLWYgLi93ZXJtaXQgXSB8fCBbIC4vY2tjbWFpLm8gLW50IC4vd2VybWl0IF0gOyB0aGVuIFwK KwkJZWNobyAiIjsgXAorCQllY2hvICJJZiBidWlsZCBmYWlsZWQgdHJ5OiI7IFwKKwkJZWNobyAi IjsgXAorCQllY2hvICIgIG1ha2UgY2xlYW4gOyBtYWtlICQke0tUQVJHRVQ6LSQoQCl9IEtGTEFH Uz0tVUNLX0RFUyI7IFwKKwkJZWNobyAiIjsgXAorCWZpCisKKyMgTGludXggd2l0aCBLZXJiZXJv cyA1IGFuZCBLZXJiZXJvcyA0LgorIyBVc2UgIm1ha2UgbGludXgra3JiNSBLRkxBR1M9LUROT19L UkI1X0lOSVRfRVRTIiBpZiBuZWNlc3NhcnkuCisjIEFkZCAiS0ZMQUdTPS1VQ0tfREVTIiBpZiBm YWlsdXJlIG1lc3NhZ2VzIGxvb2sgREVTLXJlbGF0ZWQuCisjIFVOVEVTVEVEIChiZWNhdXNlIEkg Y2FuJ3QgZmluZCBhIGJveCB3aXRoIEtyYjQgYW5kIEtyYjUgaW5zdGFsbGVkKQorbGludXgra3Ji NStrcmI0OgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgZm9yIExpbnV4IHdpdGggS2VyYmVyb3Mg NCBhbmQgS2VyYmVyb3MgNScKKwkkKE1BS0UpIGxpbnV4K2tyYjUgS1RBUkdFVD0kJHtLVEFSR0VU Oi0kKEApfSBcCisJIktGTEFHUz0tREtSQjQgLURLUkI1MjQgJChLRkxBR1MpIiAiTElCUz0kKExJ QlMpIC1sa3JiNCIKKworIyBMaW51eCB3aXRoIE9wZW5TU0wgCisjIEluIExpbnV4LCBTU0wgbGli cyBhcmUgb2Z0ZW4gaW4gL2xpYiBvciAvdXNyL2xpYiBhbmQgc28gZm91bmQgYnkgZGVmYXVsdC4K KyMgVGhpcyB0YXJnZXRzIHRha2VzIGludG8gYWNjb3VudCB0aGUgREVTIGxpYnJhcnkgbWlnaHQg b3IgbWlnaHQgbm90CisjIGV4aXN0LiAgSWYgaXQgZG9lcyBleGlzdCwgaG93ZXZlciwgdGhlIHRh cmdldCB3aWxsIHJlcXVpcmUgc29tZSBlZGl0aW5nCisjIGlmIGl0cyBiYXNlbmFtZSBpcyBub3Qg bGliZGVzNDI1LiAgLSBmZGMgVHVlIFNlcCAyMSAxNDoyODowMCAyMDEwCisjIElNUE9SVEFOVDog U29tZSBMaW51eCBwbGF0Zm9ybXMgaGF2ZSBERVMgbGlicmFyaWVzIGJ1dCB0aGV5IGFyZSBtaXNz aW5nCisjIGZ1bmN0aW9ucyB1c2VkIGJ5IEtlcm1pdC4gIEluIHRoYXQgY2FzZSB5b3Ugd2lsbCBn ZXQgZmF0YWwgZXJyb3JzIGF0CisjIGxpbmsgdGltZSBpbnZvbHZpbmcgcm91dGluZXMgc3VjaCBh cyBkZXNfZWNiM19lbmNyeXB0LCBkZXNfcmFuZG9tX3NlZWQsCisjIGFuZCBkZXNfc2V0X29kZF9w YXJpdHkuICBJbiB0aGF0IGNhc2UsICJtYWtlIGxpbnV4IEtGTEFHUz0tVUNLX0RFUyIKKyMgVGhl cmUncyBhIG5ldyB3YXJuaW5nIGF0IHRoZSBlbmQgdGhhdCBzaG91bGQgY29tZSBvdXQgaWYgdGhp cyBoYXBwZW5zLAorIyBhbmQgdGhhdCBzaG91bGQgbm90IGNvbWUgb3V0IGlmIGl0IGRpZG4ndC4K KyMKK2xpbnV4K3NzbCBsaW51eCtvcGVuc3NsIGxpbnV4K29wZW5zc2wremxpYitzaGFkb3crcGFt IGxpbnV4K29wZW5zc2wrc2hhZG93OgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikg Zm9yIExpbnV4K09wZW5TU0wgU1NMTElCPSQoU1NMTElCKScKKwlAY2FzZSBgb3BlbnNzbCB2ZXJz aW9uYCBpbiBcCisJICAqMC45LjcqKSBPUEVOU1NMT1BUSU9OPSItRE9QRU5TU0xfMDk3IiA7OyBc CisJICAqMC45LjgqKSBPUEVOU1NMT1BUSU9OPSItRE9QRU5TU0xfMDk4IiA7OyBcCisJICAqMS5b MC05XS5bMC05XSopIE9QRU5TU0xPUFRJT049Ii1ET1BFTlNTTF8xMDAiIDs7IFwKKwkgICopIE9Q RU5TU0xPUFRJT049IiIgOzsgXAorCWVzYWM7IFwKKwlIQVZFX0RFUz0nJzsgXAorCURFU19MSUI9 Jyc7IFwKKwlpZiBscyAvdXNyL2xpYi9saWJkZXMqID4gL2Rldi9udWxsIDI+IC9kZXYvbnVsbCB8 fCBcCisJICAgbHMgJChTU0xMSUIpL2xpYmRlcyogPiAvZGV2L251bGwgMj4gL2Rldi9udWxsOyB0 aGVuIFwKKwkgICAgICBERVNfTElCPSctbGRlczQyNSc7IFwKKwkgICAgICBIQVZFX0RFUz0nLURD S19ERVMgLURMSUJERVMnOyBcCisJICAgICAgZWNobyAiSEFWRSBERVMiOyBcCisJICAgZWxzZSBl Y2hvICJOTyBERVMiOyBcCisJZmk7IFwKKwkkKE1BS0UpIGxpbnV4IEtUQVJHRVQ9JCR7S1RBUkdF VDotJChAKX0gIkNDID0gZ2NjIiAiQ0MyID0gZ2NjIiBcCisJIktGTEFHUz0gLURDS19BVVRIRU5U SUNBVElPTiAtRENLX0VOQ1JZUFRJT04gLURDS19DQVNUICQkSEFWRV9ERVMgXAorCS1EQ0tfU1NM IC1EQ0tfUEFNIC1EWkxJQiAtRENLX1NIQURPVyAkJE9QRU5TU0xPUFRJT04gJChTU0xJTkMpIFwK KwkkKEtGTEFHUykiICJMTktGTEFHUyA9ICQoTE5LRkxBR1MpIiBcCisJIkxJQlMgPSAkKFNTTExJ QikgLWxzc2wgJCRERVNfTElCIC1sY3J5cHRvIC1scGFtIC1sZGwgLWx6ICQoTElCUykiIDsgXAor CWlmIFsgISAtZiAuL3dlcm1pdCBdIHx8IFsgLi9ja2NtYWkubyAtbnQgLi93ZXJtaXQgXSA7IHRo ZW4gXAorCQllY2hvICIiOyBcCisJCWVjaG8gIklmIGJ1aWxkIGZhaWxlZCB0cnk6IjsgXAorCQll Y2hvICIiOyBcCisJCWVjaG8gIiAgbWFrZSBjbGVhbiA7IG1ha2UgJCR7S1RBUkdFVDotJChAKX0g S0ZMQUdTPS1VQ0tfREVTIjsgXAorCQllY2hvICIiOyBcCisJZmkKKworIyBMaW51eCB3aXRoIEtl cmJlcm9zIDUgYW5kIE9wZW5TU0wKKyMgT0sgMjAxMS8wNS8xNgorIyBBZGQgLVVDS19ERVMgaWYg ZnVuY3Rpb25zIGxpa2UgZGVzX2VjYjNfZW5jcnlwdCwgZXNfcmFuZG9tX3NlZWQsCisjIGNvbWUg dXAgbWlzc2luZyBhdCBsaW5rIHRpbWUuCitsaW51eCtrcmI1K3NzbCBsaW51eCtrcmI1K29wZW5z c2w6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgTGludXggd2l0aCBLcmI1 IGFuZCBPcGVuU1NMLi4uJworCUBjYXNlIGBvcGVuc3NsIHZlcnNpb25gIGluIFwKKwkgICowLjku NyopIE9QRU5TU0xPUFRJT049Ii1ET1BFTlNTTF8wOTciIDs7IFwKKwkgICowLjkuOCopIE9QRU5T U0xPUFRJT049Ii1ET1BFTlNTTF8wOTgiIDs7IFwKKwkgICoxLlswLTldLlswLTldKikgT1BFTlNT TE9QVElPTj0iLURPUEVOU1NMXzEwMCIgOzsgXAorCSAgKikgT1BFTlNTTE9QVElPTj0iIiA7OyBc CisJZXNhYzsgXAorCUhBVkVfREVTPScnOyBcCisJREVTX0xJQj0nJzsgXAorCWlmIGxzIC91c3Iv bGliL2xpYmRlcyogPiAvZGV2L251bGwgMj4gL2Rldi9udWxsIHx8IFwKKwkgICBscyAkKFNTTExJ QikvbGliZGVzKiA+IC9kZXYvbnVsbCAyPiAvZGV2L251bGw7IHRoZW4gXAorCSAgICAgIERFU19M SUI9Jy1sZGVzNDI1JzsgXAorCSAgICAgIEhBVkVfREVTPSctRENLX0RFUyAtRExJQkRFUyc7IFwK KwkgICAgICBlY2hvICJIQVZFIERFUyI7IFwKKwkgICBlbHNlIGVjaG8gIk5PIERFUyI7IFwKKwlm aTsgXAorCUs1Q1JZUFRPPScnOyBcCisgICAgICAgIGlmIGxzIC9saWIvbGliazVjcnlwdG8qID4g L2Rldi9udWxsIDI+IC9kZXYvbnVsbDsgdGhlbiBcCisgICAgICAgICAgICAgICAgSzVDUllQVE89 Jy1sazVjcnlwdG8nOyBcCisJZWxzZSBpZiBscyAvdXNyL2xpYi9saWJrNWNyeXB0byogPiAvZGV2 L251bGwgMj4gL2Rldi9udWxsOyB0aGVuIFwKKwkJSzVDUllQVE89Jy1sazVjcnlwdG8nOyBcCisg ICAgICAgIGVsc2UgaWYgbHMgL3Vzci9saWI2NC9saWJrNWNyeXB0byogPiAvZGV2L251bGwgMj4g L2Rldi9udWxsOyB0aGVuIFwKKyAgICAgICAgICAgICAgICBLNUNSWVBUTz0nLWxrNWNyeXB0byc7 IFwKKwlmaTsgZmk7IGZpOyBcCisJQ09NX0VSUj0nJzsgXAorCWlmIGxzIC9saWIvbGliY29tX2Vy ciogPiAvZGV2L251bGwgMj4gL2Rldi9udWxsOyB0aGVuIFwKKwkJQ09NX0VSUj0nLWxjb21fZXJy JzsgXAorCWZpOyBcCisJR1NTQVBJTElCPSctbGdzc2FwaSc7IFwKKwlpZiBscyAvbGliL2xpYmdz c2FwaV9rcmI1KiA+IC9kZXYvbnVsbCAyPiAvZGV2L251bGw7IHRoZW4gXAorCQlHU1NBUElMSUI9 Jy1sZ3NzYXBpX2tyYjUnOyBcCisJZWxzZSBpZiBscyAvdXNyL2xpYi9saWJnc3NhcGlfa3JiNSog PiAvZGV2L251bGwgMj4gL2Rldi9udWxsOyB0aGVuIFwKKwkJR1NTQVBJTElCPSctbGdzc2FwaV9r cmI1JzsgXAorCWVsc2UgSzVESVI9YGVjaG8gJChLNUxJQikgfCBzZWQgJ3N8LUx8fCdgOyBcCisJ CWlmIGxzICQkSzVESVIvbGliZ3NzYXBpX2tyYjUqID4gL2Rldi9udWxsIDI+IC9kZXYvbnVsbDsg dGhlbiBcCisJCQlHU1NBUElMSUI9Jy1sZ3NzYXBpX2tyYjUnOyBcCisJZmk7IGZpOyBmaTsgXAor CSQoTUFLRSkgbGludXggS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSAiQ0MgPSBnY2MiICJDQzIg PSBnY2MiIFwKKwkiS0ZMQUdTPSAtRENLX0FVVEhFTlRJQ0FUSU9OIC1EQ0tfS0VSQkVST1MgLURL UkI1IFwKKwktRENLX1NTTCAtRENLX1BBTSAtRFpMSUIgLURDS19TSEFET1cgJCRPUEVOU1NMT1BU SU9OICQoU1NMSU5DKSBcCisJLURDS19FTkNSWVBUSU9OICQkSEFWRV9ERVMgJChLNUlOQykgJChL NUlOQykva3JiNSBcCisJLUkvdXNyL2luY2x1ZGUvZXQgJChLRkxBR1MpIiAiTE5LRkxBR1MgPSAk KExOS0ZMQUdTKSIgXAorCSJMSUJTID0gJChLNUxJQikgJChTU0xMSUIpIC1sc3NsICQkREVTX0xJ QiAtbHBhbSAtbHogXAorCS1sY3J5cHRvICQkR1NTQVBJTElCIC1sa3JiNSAkJEs1Q1JZUFRPICQk Q09NX0VSUiAkKExJQlMpIiA7IFwKKwlpZiBbICEgLWYgLi93ZXJtaXQgXSB8fCBbIC4vY2tjbWFp Lm8gLW50IC4vd2VybWl0IF0gOyB0aGVuIFwKKwkJZWNobyAiIjsgXAorCQllY2hvICJJZiBidWls ZCBmYWlsZWQgdHJ5OiI7IFwKKwkJZWNobyAiIjsgXAorCQllY2hvICIgIG1ha2UgY2xlYW4gOyBt YWtlICQke0tUQVJHRVQ6LSQoQCl9IEtGTEFHUz0tVUNLX0RFUyI7IFwKKwkJZWNobyAiIjsgXAor CWZpCisKKyMgOjpCRUdJTl9PTERfTElOVVhfVEFSR0VUUzo6CisKKyMgVGhlIHJlbWFpbmluZyBM aW51eCBlbnRyaWVzIGFyZSBmb3Igc3BlY2lhbCBvciBjdXN0b21pemVkIGJ1aWxkcy4gIFRoZXkg aGF2ZQorIyBub3QgYmVlbiBnZW5lcmFsaXplZCAoInN1YnJvdXRpbml6ZWQiKSBsaWtlIHRoZSBv bmVzIGFib3ZlLiAgSWRlYWxseSwgd2UKKyMgc2hvdWxkIGFsbG93IGZvciBldmVyeSBjb21iaW5h dGlvbiBvZiBsaWJjIHZzIGdsaWJjLCBnY2MgdnMgZWdjcywgY3Vyc2VzIHZzCisjIG5jdXJzZXMs IEtlcmJlcm9zIElWIHZzIEtlcmJlcm9zIFYgdnMgU1JQIChpbiBhbnkgY29tYmluYXRpb24pLCBh bmQgc28gb24uCisjIFRoZSBiZXN0IHdheSB0byBkbyB0aGlzIGlzIHRvIHNldCBLRkxBR1MgYW5k IExJQlMgdmFsdWVzIGFuZCB0aGVuIGNoYWluIHRvCisjIHRoZSBtYWluICJsaW51eCIgdGFyZ2V0 LCBhcyBpbiB0aGUgZXhhbXBsZXMganVzdCBhYm92ZS4gIFRvIHNraXAgcGFzdCBhbGwgb2YKKyMg dGhlc2Ugb2xkIHRhcmdldHMgKGFuZCB0aGVyZSBhcmUgbWFueSkgc2VhcmNoIGZvciA6OkVORF9P TERfTElOVVhfVEFSR0VUUzo6CisjIChhZnRlciB0aGlzIGxpbmUpLgorCisjU2hhcnAgWmF1cnVz IFNMLTU1MDAgLSBMaW51eCBiYXNlZAorenNsNTUwMDoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0 ICQoQ0tWRVIpIGZvciBTaGFycCBaYXVydXMgU0wtNTUwMC4uLicKKwlAdG91Y2ggY2tjcHJvLmMK KwlAdG91Y2ggd2FydAorCSQoTUFLRSkgbGludXhuYyBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9 ICJLRkxBR1M9LURaU0w1NTAwIiBcCisJIkNDID0gZ2NjIiAiQ0MyID0gZ2NjIgorCisjTWtsaW51 eCBEUjMgaGFzIGhvcnJpYmxlIGJ1ZyBpbiA8dXRtcGJpdHMuaD4gLSBzZWUgY2t1ZmlvLmMuCitt a2xpbnV4OgorCSQoTUFLRSkgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSAiS0ZMQUdTPS1EVVRN UEJVRyIgXAorCSJMSUJTPS1sY3J5cHQgLWxyZXNvbHYiIGxpbnV4YQorCisjTGludXhQUEMgMTk5 OQorbGludXhwcGM6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgTGludXhQ UEMgMTk5OS4uLicKKwlAaWYgdGVzdCAtZiAvdXNyL2xpYi9saWJjcnlwdC5hOyB0aGVuIFwKKwkg ICAgaWYgdGVzdCAtZiAvdXNyL2xpYi9saWJyZXNvbHYuYTsgdGhlbiBcCisJICAgICAgICAkKE1B S0UpIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCQkiS0ZMQUdTPSQoTkNVUlNFU19DUFAp IC1ESEFWRV9DUllQVF9IIFwKKwkJLURMT0NLX0RJUj1cXFxcXFwiXCIvdmFyL2xvY2svbW9kZW1c XFxcXFwiXCIgJChLRkxBR1MpIiBcCisJICAgICAgICAiTElCUz0tbG5jdXJzZXMgLWxyZXNvbHYg LWxjcnlwdCIgbGludXhhIDsgXAorCSAgICBlbHNlIFwKKwkgICAgICAgICQoTUFLRSkgS1RBUkdF VD0kJHtLVEFSR0VUOi0kKEApfSBcCisJCSJLRkxBR1M9JChOQ1VSU0VTX0NQUCkgLURIQVZFX0NS WVBUX0ggXAorCQktRExPQ0tfRElSPVxcXFxcXCJcIi92YXIvbG9jay9tb2RlbVxcXFxcXCJcIiAk KEtGTEFHUykiIFwKKwkgICAgICAgICJMSUJTPS1sbmN1cnNlcyAtbGNyeXB0IiBsaW51eGEgOyBc CisJICAgIGZpIFwKKwllbHNlIFwKKwkgICAgaWYgdGVzdCAtZiAvdXNyL2xpYi9saWJyZXNvbHYu YTsgdGhlbiBcCisJICAgICAgICAkKE1BS0UpIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAor CQkiS0ZMQUdTPSQoTkNVUlNFU19DUFApIFwKKwkJLURMT0NLX0RJUj1cXFxcXFwiXCIvdmFyL2xv Y2svbW9kZW1cXFxcXFwiXCIgJChLRkxBR1MpIiBcCisJICAgICAgICAiTElCUz0tbG5jdXJzZXMg LWxyZXNvbHYiIGxpbnV4YSA7IFwKKwkgICAgZWxzZSBcCisJICAgICAgICAkKE1BS0UpIEtUQVJH RVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCQkiS0ZMQUdTPSQoTkNVUlNFU19DUFApIFwKKwkJLURM T0NLX0RJUj1cXFxcXFwiXCIvdmFyL2xvY2svbW9kZW1cXFxcXFwiXCIgJChLRkxBR1MpIiBcCisJ ICAgICAgICAiTElCUz0tbG5jdXJzZXMiIGxpbnV4YSA7IFwKKwkgICAgZmkgXAorCWZpCisKKwor IyBMaWtlICJtYWtlIGxpbnV4IiBidXQgYnVpbHQgd2l0aCBlZ2NzIHJhdGhlciB0aGFuIGdjYy4K KyMgSWYgeW91IGdldCAiSW50ZXJuYWwgY29tcGlsZXIgZXJyb3IgeHh4LCBvdXRwdXQgcGlwZSBo YXMgYmVlbiBjbG9zZWQiLAorIyB0cnkgcmVtb3ZpbmcgLXBpcGUuCitsaW51eGVnY3M6CisJQGVj aG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgTGludXggMS4yIG9yIGxhdGVyIHdpdGgg ZWdjcy4uLicKKwkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9ICJDQyA9 IGVnY3MiICJDQzIgPSBlZ2NzIiBcCisJIkNGTEFHUyA9IC1PIC1ETElOVVggLXBpcGUgLWZ1bnNp Z25lZC1jaGFyIFwKKwktRFBPU0lYIC1EQ0tfUE9TSVhfU0lHIC1EQ0tfTkNVUlNFUyAtRE5PQ09U Rk1DIFwKKwktRFRDUFNPQ0tFVCAtRExJTlVYRlNTVE5EICQoS0ZMQUdTKSIgXAorCSJMTktGTEFH UyA9ICQoTE5LRkxBR1MpIiAiTElCUyA9IC1sbmN1cnNlcyAtbGNyeXB0IC1scmVzb2x2IgorCisj TGludXggb24gSW50ZWwgUEMgd2l0aCBDeWdudXMgb3IgTUlUIEtlcmJlcm9zIDUgMS4yLjEgKG5v IEs0IGNvbXBhdGliaWxpdHkpLgorbGludXgra3JiNS1vbGQ6CisJQGVjaG8gJ01ha2luZyBDLUtl cm1pdCAkKENLVkVSKSBmb3IgTGludXggb24gSW50ZWwgd2l0aCBLZXJiZXJvcy4uLicKKwkkKE1B S0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9ICJDQyA9IGdjYyIgIkNDMiA9IGdj YyIgXAorCSJDRkxBR1MgPSAtTyAtZnVuc2lnbmVkLWNoYXIgLXBpcGUgLURQT1NJWCAtRExJTlVY IC1ETk9DT1RGTUMgXAorCS1EQ0tfQVVUSEVOVElDQVRJT04gLURDS19LRVJCRVJPUyAtREtSQjUg XAorCS1EQ0tfRU5DUllQVElPTiAtRENLX0RFUyAtRENLX0NVUlNFUyAtRENLX1BPU0lYX1NJRyBc CisJLURUQ1BTT0NLRVQgLURMSU5VWEZTU1RORCAtREhBVkVfQ1JZUFRfSCAkKEs1SU5DKSAkKEs1 SU5DKS9rcmI1IFwKKwkkKEtGTEFHUykiICJMTktGTEFHUyA9ICQoTE5LRkxBR1MpIiBcCisJIkxJ QlMgPSAkKEs1TElCKSAtbG5jdXJzZXMgLWx0ZXJtY2FwIC1sZGVzNDI1IC1sa3JiNSBcCisJLWxj b21fZXJyIC1sazVjcnlwdG8gLWxnc3NhcGlfa3JiNSAtbGNyeXB0IC1scmVzb2x2IgorCisjIExp bnV4IG9uIEludGVsIFBDIHdpdGggU1JQIDEuNy40IHVzaW5nIEdOVSBNUCwgS3J5cHRvLCBhbmQg RXJpYyBZb3VuZydzCisjIERFUyBsaWJyYXJ5LiAgUmVtb3ZlIHRoZSAtRENLX0RFUywgLURMSUJE RVMgYW5kIC1sZGVzIGlmIHlvdSBkbyBub3QgaGF2ZQorIyBFcmljIFlvdW5nJ3MjIGxpYmRlcy5h IGluc3RhbGxlZC4KKyMKK2xpbnV4K3NycCtnbXA6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAk KENLVkVSKSBmb3IgTGludXggb24gaTM4NiB3aXRoIFNSUC4uLicKKwkkKE1BS0UpIHNycG1pdCBL VEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9ICJDQyA9IGdjYyIgIkNDMiA9IGdjYyIgXAorCSJDRkxB R1MgPSAtTyAtZnVuc2lnbmVkLWNoYXIgLXBpcGUgLURQT1NJWCAtRExJTlVYIC1ETk9DT1RGTUMg XAorCS1EQ0tfQVVUSEVOVElDQVRJT04gLURDS19TUlAgXAorCS1EQ0tfRU5DUllQVElPTiAtRENL X0NBU1QgLURDS19ERVMgLURMSUJERVMgXAorCS1EQ0tfQ1VSU0VTIC1EQ0tfUE9TSVhfU0lHIC1E VENQU09DS0VUIC1ETElOVVhGU1NUTkQgLURIQVZFX0NSWVBUX0ggXAorCSQoU1JQSU5DKSAkKEtG TEFHUykiICJMTktGTEFHUyA9ICQoTE5LRkxBR1MpIiBcCisJIkxJQlMgPSAkKFNSUExJQikgXAor CS1sbmN1cnNlcyAtbHRlcm1jYXAgLWxzcnAgLWxnbXAgLWxkZXMgLWxrcnlwdG8gLWxjcnlwdCAt bHJlc29sdiIKKworbGludXgrc3JwK2dtcCtuby1kZXM6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1p dCAkKENLVkVSKSBmb3IgTGludXggb24gaTM4NiB3aXRoIFNSUCAuLi4nCisJJChNQUtFKSBzcnBt aXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSAiQ0MgPSBnY2MiICJDQzIgPSBnY2MiIFwKKwki Q0ZMQUdTID0gLU8gLWZ1bnNpZ25lZC1jaGFyIC1waXBlIC1EUE9TSVggLURMSU5VWCAtRE5PQ09U Rk1DIFwKKwktRENLX0FVVEhFTlRJQ0FUSU9OIC1EQ0tfU1JQIFwKKwktRENLX0VOQ1JZUFRJT04g LURDS19DQVNUIFwKKwktRENLX0NVUlNFUyAtRENLX1BPU0lYX1NJRyAtRFRDUFNPQ0tFVCAtRExJ TlVYRlNTVE5EIC1ESEFWRV9DUllQVF9IIFwKKwkkKFNSUElOQykgJChLRkxBR1MpIiAiTE5LRkxB R1MgPSAkKExOS0ZMQUdTKSIgXAorCSJMSUJTID0gJChTUlBMSUIpIFwKKwktbG5jdXJzZXMgLWx0 ZXJtY2FwIC1sc3JwIC1sZ21wIC1sa3J5cHRvIC1sY3J5cHQgLWxyZXNvbHYiCisKK2xpbnV4K3Ny cCtnbXAtZXhwb3J0OgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIExpbnV4 IG9uIGkzODYgd2l0aCBTUlAuLi4nCisJJChNQUtFKSBzcnBtaXQtZXhwb3J0IEtUQVJHRVQ9JCR7 S1RBUkdFVDotJChAKX0gXAorCSJDQyA9IGdjYyIgIkNDMiA9IGdjYyIgXAorCSJDRkxBR1MgPSAt TyAtZnVuc2lnbmVkLWNoYXIgLXBpcGUgLURQT1NJWCAtRExJTlVYIC1ETk9DT1RGTUMgXAorCS1E Q0tfQVVUSEVOVElDQVRJT04gLURDS19TUlAgLURGTkZMT0FUIFwKKwktRENLX0NVUlNFUyAtRENL X1BPU0lYX1NJRyAtRFRDUFNPQ0tFVCAtRExJTlVYRlNTVE5EIC1ESEFWRV9DUllQVF9IIFwKKwkk KFNSUElOQykgJChLRkxBR1MpIiAiTE5LRkxBR1MgPSAkKExOS0ZMQUdTKSIgXAorCSJMSUJTID0g JChTUlBMSUIpIFwKKwktbG5jdXJzZXMgLWx0ZXJtY2FwIC1sc3JwIC1sZ21wIC1sa3J5cHRvIC1s Y3J5cHQgLWxtIC1scmVzb2x2IgorCitsaW51eCtzcnArZ21wK3BhbToKKwlAZWNobyAnTWFraW5n IEMtS2VybWl0ICQoQ0tWRVIpIGZvciBMaW51eCBvbiBpMzg2IHdpdGggU1JQLi4uJworCSQoTUFL RSkgc3JwbWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gIkNDID0gZ2NjIiAiQ0MyID0gZ2Nj IiBcCisJIkNGTEFHUyA9IC1PIC1mdW5zaWduZWQtY2hhciAtcGlwZSAtRFBPU0lYIC1ETElOVVgg LUROT0NPVEZNQyBcCisJLURDS19BVVRIRU5USUNBVElPTiAtRENLX1NSUCBcCisJLURDS19FTkNS WVBUSU9OIC1EQ0tfQ0FTVCAtRENLX0RFUyAtRExJQkRFUyBcCisJLURDS19DVVJTRVMgLURDS19Q T1NJWF9TSUcgLURUQ1BTT0NLRVQgLURMSU5VWEZTU1RORCAtREhBVkVfQ1JZUFRfSCBcCisJLURD S19QQU0gLURGTkZMT0FUICQoU1JQSU5DKSAkKEtGTEFHUykiICJMTktGTEFHUyA9ICQoTE5LRkxB R1MpIiBcCisJIkxJQlMgPSAkKFNSUExJQikgLWxuY3Vyc2VzIC1sdGVybWNhcCAtbHNycCAtbGdt cCAtbGRlcyAtbGtyeXB0byBcCisJLWxjcnlwdCAtbHBhbSAtbGRsIC1sbSAtbHJlc29sdiIKKwor I0xpbnV4IG9uIEludGVsIFBDIHdpdGggU1JQIDEuNy40IGJ1aWx0IHdpdGggT3BlblNTTCBmb3Ig QmlnIE51bWJlciBNYXRoCisjYW5kIENyeXB0b2dyYXBoaWMgZnVuY3Rpb25hbGl0eS4KKyMKK2xp bnV4K3NycDoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBMaW51eCBvbiBp Mzg2IHdpdGggU1JQLi4uJworCSQoTUFLRSkgc3JwbWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChA KX0gIkNDID0gZ2NjIiAiQ0MyID0gZ2NjIiBcCisJIkNGTEFHUyA9IC1PIC1mdW5zaWduZWQtY2hh ciAtcGlwZSAtRFBPU0lYIC1ETElOVVggLUROT0NPVEZNQyBcCisJLURDS19BVVRIRU5USUNBVElP TiAtRENLX1NSUCBcCisJLURDS19FTkNSWVBUSU9OIC1EQ0tfQ0FTVCAtRENLX0RFUyAtRExJQkRF UyBcCisJLURDS19DVVJTRVMgLURDS19QT1NJWF9TSUcgLURUQ1BTT0NLRVQgLURMSU5VWEZTU1RO RCAtREhBVkVfQ1JZUFRfSCBcCisJJChTUlBJTkMpICQoU1NMSU5DKSAkKEtGTEFHUykiICJMTktG TEFHUyA9ICQoTE5LRkxBR1MpIiBcCisJIkxJQlMgPSAkKFNSUExJQikgJChTU0xMSUIpIFwKKwkt bG5jdXJzZXMgLWx0ZXJtY2FwIC1sc3JwIC1sa3J5cHRvIC1sY3J5cHRvIC1sY3J5cHQgLWxyZXNv bHYiCisKK2xpbnV4K3NycCtwYW06CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBm b3IgTGludXggb24gaTM4NiB3aXRoIFNSUC4uLicKKwkkKE1BS0UpIHNycG1pdCBLVEFSR0VUPSQk e0tUQVJHRVQ6LSQoQCl9ICJDQyA9IGdjYyIgIkNDMiA9IGdjYyIgXAorCSJDRkxBR1MgPSAtTyAt ZnVuc2lnbmVkLWNoYXIgLXBpcGUgLURQT1NJWCAtRExJTlVYIC1ETk9DT1RGTUMgXAorCS1EQ0tf QVVUSEVOVElDQVRJT04gLURDS19TUlAgXAorCS1EQ0tfRU5DUllQVElPTiAtRENLX0NBU1QgLURD S19ERVMgLURMSUJERVMgXAorCS1EQ0tfQ1VSU0VTIC1EQ0tfUE9TSVhfU0lHIC1EVENQU09DS0VU IC1ETElOVVhGU1NUTkQgLURIQVZFX0NSWVBUX0ggXAorCS1EQ0tfUEFNIC1ERk5GTE9BVCAkKFNS UElOQykgJChTU0xJTkMpICQoS0ZMQUdTKSIgXAorCSJMTktGTEFHUyA9ICQoTE5LRkxBR1MpIiBc CisJIkxJQlMgPSAkKFNSUExJQikgJChTU0xMSUIpIC1sbmN1cnNlcyAtbHRlcm1jYXAgLWxzcnAg LWxrcnlwdG8gXAorCS1sY3J5cHRvIC1sY3J5cHQgLWxwYW0gLWxkbCAtbG0gLWxyZXNvbHYiCisK KyNMaW51eCBvbiBJbnRlbCBQQyB3aXRoIFNSUCBhbmQgU1NML1RMUy4KKyMKKyMgbGlic3JwLmEg c2hvdWxkIGJlIGJ1aWxkIHdpdGggT3BlblNTTAorIyBSZXF1aXJlcyB0aGUgS2VyYmVyb3MgMS4y LjIgb3IgaGlnaGVyIHRvIGJlIGNvbXBpbGVkIHdpdGggS1JCNCBjb21wYXRpYmlsaXR5LgorI1Jl bW92ZSAtbHRlcm1jYXAgaWYgaXQgY2F1c2VzIHRyb3VibGUgZS5nLiBpbiBEZWJpYW4gMi4yLgor I0lmIHlvdSBoYXZlIE9wZW5TU0wgMC45Ljcgb3IgbGF0ZXIsIGFkZCAtRE9QRU5TU0xfMDk3IHRv IEtGTEFHUy4KK2xpbnV4K3NycCtvcGVuc3NsOgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChD S1ZFUikgZm9yIExpbnV4IG9uIGkzODYgd2l0aCBLUkIsU1JQLFNTTC4uLicKKwkkKE1BS0UpIHhl cm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9ICJDQyA9IGdjYyIgIkNDMiA9IGdjYyIgXAor CSJDRkxBR1MgPSAtTyAtZnVuc2lnbmVkLWNoYXIgLXBpcGUgLURQT1NJWCAtRExJTlVYIC1ETk9D T1RGTUMgXAorCS1EQ0tfQVVUSEVOVElDQVRJT04gLURDS19TUlAgXAorCS1EQ0tfRU5DUllQVElP TiAtRENLX0NBU1QgLURDS19ERVMgLURMSUJERVMgLURDS19TU0wgXAorCS1EQ0tfQ1VSU0VTIC1E Q0tfUE9TSVhfU0lHIC1EVENQU09DS0VUIC1ETElOVVhGU1NUTkQgLURIQVZFX0NSWVBUX0ggXAor CSQoU1JQSU5DKSAkKFNTTElOQykgJChLRkxBR1MpIiAiTE5LRkxBR1MgPSAkKExOS0ZMQUdTKSIg XAorCSJMSUJTID0gJChTUlBMSUIpICQoU1NMTElCKSBcCisJLWxuY3Vyc2VzIC1sdGVybWNhcCAt bHNycCAtbHNzbCAtbGtyeXB0byAtbGNyeXB0byBcCisJLWxjcnlwdCAtbHJlc29sdiIKKworI0xp bnV4IG9uIEludGVsIFBDIHdpdGggQ3lnbnVzIG9yIE1JVCBLZXJiZXJvcyA1IDEuMi4yIGFuZCBT UlAuCisjCisjIGxpYnNycC5hIHNob3VsZCBiZSBidWlsZCB3aXRoIEdOVSBNUCAobGliZ21wLmEp CisjIGluc3RlYWQgb2YgQVQmVCBDcnlwdG9MaWIgKGxpYmNyeXB0LmEpIGR1ZSB0byBuYW1pbmcg Y29uZmxpY3RzIHdpdGgKKyMgc3RhbmRhcmQgZGlzdHJpYnV0aW9uIExpbnV4IGxpYnJhcmllcy4K KyMgUmVxdWlyZXMgdGhlIEtlcmJlcm9zIDEuMi4yIG9yIGhpZ2hlciB0byBiZSBjb21waWxlZCB3 aXRoIEtSQjQgY29tcGF0aWJpbGl0eS4KK2xpbnV4K2tyYjUra3JiNCtzcnA6CisJQGVjaG8gJ01h a2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgTGludXggb24gaTM4NiB3aXRoIEtSQjU0K1NSUC4u LicKKwkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9ICJDQyA9IGdjYyIg IkNDMiA9IGdjYyIgXAorCSJDRkxBR1MgPSAtTyAtZnVuc2lnbmVkLWNoYXIgLXBpcGUgLURQT1NJ WCAtRExJTlVYIC1ETk9DT1RGTUMgXAorCS1EQ0tfQVVUSEVOVElDQVRJT04gLURDS19TUlAgLURD S19LRVJCRVJPUyAgLURLUkI1IC1ES1JCNCAtREtSQjUyNCBcCisJLURDS19FTkNSWVBUSU9OIC1E Q0tfQ0FTVCAtRENLX0RFUyAtRExJQkRFUyBcCisJLURDS19DVVJTRVMgLURDS19QT1NJWF9TSUcg LURUQ1BTT0NLRVQgLURMSU5VWEZTU1RORCAtREhBVkVfQ1JZUFRfSCBcCisJJChLNUlOQykgJChL NUlOQykva3JiNSAkKFNSUElOQykgXAorCSQoS0ZMQUdTKSIgIkxOS0ZMQUdTID0gJChMTktGTEFH UykiIFwKKwkiTElCUyA9ICQoSzVMSUIpICQoU1JQTElCKSBcCisJLWxuY3Vyc2VzIC1sdGVybWNh cCAtbHNycCAtbGdtcCAtbGdzc2FwaV9rcmI1IC1sa3J5cHRvIFwKKwktbGRlcyAtbGtyYjQgLWxk ZXM0MjUgLWxrcmI1IC1sY29tX2VyciAtbGs1Y3J5cHRvIC1sY3J5cHQgLWxyZXNvbHYiCisKKyNM aW51eCBvbiBJbnRlbCBQQyB3aXRoIEN5Z251cyBvciBNSVQgS2VyYmVyb3MgNSAxLjIuMiwgU1JQ IGFuZCBTU0wvVExTLgorIworIyBsaWJzcnAuYSBzaG91bGQgYmUgYnVpbGQgd2l0aCBPcGVuU1NM CisjIFJlcXVpcmVzIHRoZSBLZXJiZXJvcyAxLjIuMiBvciBoaWdoZXIgdG8gYmUgY29tcGlsZWQg d2l0aCBLUkI0IGNvbXBhdGliaWxpdHkuCisjIFJlcXVpcmVzIE9wZW5TU0wgMC45LjZhIG9yIGhp Z2hlcgorI0lmIHlvdSBoYXZlIE9wZW5TU0wgMC45Ljcgb3IgbGF0ZXIsIGFkZCAtRE9QRU5TU0xf MDk3IHRvIEtGTEFHUy4KK2xpbnV4K2tyYjUra3JiNCtzcnArb3BlbnNzbDoKKwlAZWNobyAnTWFr aW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBMaW51eCBvbiBpMzg2IHdpdGggS1JCLFNSUCxTU0wu Li4nCisJJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSAiQ0MgPSBnY2Mi ICJDQzIgPSBnY2MiIFwKKwkiQ0ZMQUdTID0gLU8gLWZ1bnNpZ25lZC1jaGFyIC1waXBlIC1EUE9T SVggLURMSU5VWCAtRE5PQ09URk1DIFwKKwktRENLX0FVVEhFTlRJQ0FUSU9OIC1EQ0tfU1JQIC1E Q0tfS0VSQkVST1MgIC1ES1JCNSAtREtSQjQgLURLUkI1MjQgXAorCS1EQ0tfRU5DUllQVElPTiAt RENLX0NBU1QgLURDS19ERVMgLURMSUJERVMgLURDS19TU0wgXAorCS1EQ0tfQ1VSU0VTIC1EQ0tf UE9TSVhfU0lHIC1EVENQU09DS0VUIC1ETElOVVhGU1NUTkQgLURIQVZFX0NSWVBUX0ggXAorCSQo SzVJTkMpICQoSzVJTkMpL2tyYjUgJChTUlBJTkMpICQoU1NMSU5DKSBcCisJJChLRkxBR1MpIiAi TE5LRkxBR1MgPSAkKExOS0ZMQUdTKSIgXAorCSJMSUJTID0gJChLNUxJQikgJChTUlBMSUIpICQo U1NMTElCKSBcCisJLWxuY3Vyc2VzIC1sdGVybWNhcCAtbHNycCBcCisJLWxrcmI0IC1sc3NsIC1s a3J5cHRvIC1sY3J5cHRvIFwKKwktbGtyYjUgLWxjb21fZXJyIC1sazVjcnlwdG8gLWxnc3NhcGlf a3JiNSAtbGNyeXB0IC1scmVzb2x2IgorCisjTGludXggb24gSW50ZWwgUEMgd2l0aCBDeWdudXMg b3IgTUlUIEtlcmJlcm9zIDUgMS4yLjIsIFNTTC9UTFMuCisjCisjIGxpYnNycC5hIHNob3VsZCBi ZSBidWlsZCB3aXRoIE9wZW5TU0wKKyMgUmVxdWlyZXMgdGhlIEtlcmJlcm9zIDEuMi4yIGJlIGNv bXBpbGVkIHdpdGggS1JCNCBjb21wYXRpYmlsaXR5LgorI0lmIHlvdSBoYXZlIE9wZW5TU0wgMC45 Ljcgb3IgbGF0ZXIsIGFkZCAtRE9QRU5TU0xfMDk3IHRvIEtGTEFHUy4KK2xpbnV4K2tyYjUra3Ji NCtvcGVuc3NsOgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIExpbnV4IG9u IGkzODYgd2l0aCBLUkIsU1NMLi4uJworCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdF VDotJChAKX0gIkNDID0gZ2NjIiAiQ0MyID0gZ2NjIiBcCisJIkNGTEFHUyA9IC1PIC1mdW5zaWdu ZWQtY2hhciAtcGlwZSAtRFBPU0lYIC1ETElOVVggLUROT0NPVEZNQyBcCisJLURDS19BVVRIRU5U SUNBVElPTiAtRENLX0tFUkJFUk9TICAtREtSQjUgLURLUkI0IC1ES1JCNTI0IFwKKwktRENLX0VO Q1JZUFRJT04gLURDS19DQVNUIC1EQ0tfREVTIC1ETElCREVTIC1EQ0tfU1NMIFwKKwktRENLX0NV UlNFUyAtRENLX1BPU0lYX1NJRyAtRFRDUFNPQ0tFVCAtRExJTlVYRlNTVE5EIC1ESEFWRV9DUllQ VF9IIFwKKwkkKEs1SU5DKSAkKEs1SU5DKS9rcmI1ICQoU1NMSU5DKSBcCisJJChLRkxBR1MpIiAi TE5LRkxBR1MgPSAkKExOS0ZMQUdTKSIgXAorCSJMSUJTID0gJChLNUxJQikgJChTU0xMSUIpIFwK KwktbG5jdXJzZXMgLWx0ZXJtY2FwIFwKKwktbGtyYjQgLWxzc2wgLWxjcnlwdG8gLWxrcmI1IC1s Y29tX2VyciBcCisJLWxrNWNyeXB0byAtbGdzc2FwaV9rcmI1IC1sY3J5cHQgLWxyZXNvbHYiCisK KyNMaW51eCBvbiBJbnRlbCBQQyB3aXRoIEN5Z251cyBvciBNSVQgS2VyYmVyb3MgNSAxLjIuMSwg U1NML1RMUy4KKyMKKyMgbGlic3JwLmEgc2hvdWxkIGJlIGJ1aWxkIHdpdGggT3BlblNTTAorIyBS ZXF1aXJlcyB0aGUgS2VyYmVyb3MgMS4yLjIgYmUgY29tcGlsZWQgd2l0aCBLUkI0IGNvbXBhdGli aWxpdHkuCisjIElmIHlvdSBoYXZlIE9wZW5TU0wgMC45Ljcgb3IgbGF0ZXIsIGFkZCAtRE9QRU5T U0xfMDk3IHRvIEtGTEFHUy4KK2xpbnV4K2tyYjUra3JiNCtvcGVuc3NsK3NoYWRvdzoKKwlAZWNo byAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBMaW51eCBvbiBpMzg2IHdpdGggS1JCLFNT TC4uLicKKwkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9ICJDQyA9IGdj YyIgIkNDMiA9IGdjYyIgXAorCSJDRkxBR1MgPSAtTyAtZnVuc2lnbmVkLWNoYXIgLXBpcGUgLURQ T1NJWCAtRExJTlVYIC1ETk9DT1RGTUMgXAorCS1EQ0tfQVVUSEVOVElDQVRJT04gLURDS19LRVJC RVJPUyAgLURLUkI1IC1ES1JCNCAtREtSQjUyNCBcCisJLURDS19FTkNSWVBUSU9OIC1EQ0tfQ0FT VCAtRENLX0RFUyAtRExJQkRFUyAtRENLX1NTTCAtRENLX1NIQURPVyBcCisJLURDS19DVVJTRVMg LURDS19QT1NJWF9TSUcgLURUQ1BTT0NLRVQgLURMSU5VWEZTU1RORCAtREhBVkVfQ1JZUFRfSCBc CisJJChLNUlOQykgJChLNUlOQykva3JiNSAkKFNTTElOQykgXAorCSQoS0ZMQUdTKSIgIkxOS0ZM QUdTID0gJChMTktGTEFHUykiIFwKKwkiTElCUyA9ICQoSzVMSUIpICQoU1NMTElCKSAgXAorCS1s bmN1cnNlcyAtbHRlcm1jYXAgXAorCS1sa3JiNCAtbHNzbCAtbGNyeXB0byAtbGtyYjUgLWxjb21f ZXJyIFwKKwktbGs1Y3J5cHRvIC1sZ3NzYXBpX2tyYjUgLWxjcnlwdCAtbHJlc29sdiIKKworI0xp bnV4IG9uIEludGVsIFBDIHdpdGggQ3lnbnVzIG9yIE1JVCBLZXJiZXJvcyA1IDEuMiwgU1NML1RM Uy4KKyMKKyMgbGlic3JwLmEgc2hvdWxkIGJlIGJ1aWxkIHdpdGggT3BlblNTTAorIyBSZXF1aXJl cyB0aGUgS2VyYmVyb3MgMS4yLjIgYmUgY29tcGlsZWQgd2l0aCBLUkI0IGNvbXBhdGliaWxpdHku CisjIElmIHlvdSBoYXZlIE9wZW5TU0wgMC45Ljcgb3IgbGF0ZXIsIGFkZCAtRE9QRU5TU0xfMDk3 IHRvIEtGTEFHUy4KK2xpbnV4K2tyYjUra3JiNCtvcGVuc3NsK3psaWIrc2hhZG93OgorCUBlY2hv ICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIExpbnV4IG9uIGkzODYgd2l0aCBLUkIsU1NM Li4uJworCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gIkNDID0gZ2Nj IiAiQ0MyID0gZ2NjIiBcCisJIkNGTEFHUyA9IC1PIC1mdW5zaWduZWQtY2hhciAtcGlwZSAtRFBP U0lYIC1ETElOVVggLUROT0NPVEZNQyBcCisJLURDS19BVVRIRU5USUNBVElPTiAtRENLX0tFUkJF Uk9TICAtREtSQjUgLURLUkI0IC1ES1JCNTI0IC1EWkxJQiBcCisJLURDS19FTkNSWVBUSU9OIC1E Q0tfQ0FTVCAtRENLX0RFUyAtRExJQkRFUyAtRENLX1NTTCAtRENLX1NIQURPVyBcCisJLURDS19D VVJTRVMgLURDS19QT1NJWF9TSUcgLURUQ1BTT0NLRVQgLURMSU5VWEZTU1RORCAtREhBVkVfQ1JZ UFRfSCBcCisJJChLNUlOQykgJChLNUlOQykva3JiNSAkKFNTTElOQykgXAorCSQoS0ZMQUdTKSIg IkxOS0ZMQUdTID0gJChMTktGTEFHUykiIFwKKwkiTElCUyA9ICQoSzVMSUIpICQoU1NMTElCKSBc CisJLWxuY3Vyc2VzIC1sdGVybWNhcCBcCisJLWxrcmI0IC1sc3NsIC1sY3J5cHRvIC1sa3JiNSAt bGNvbV9lcnIgXAorCS1sazVjcnlwdG8gLWxnc3NhcGlfa3JiNSAtbGNyeXB0IC1scmVzb2x2IC1s eiIKKworbGludXgra3JiNStrcmI0K3NycC1leHBvcnQ6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1p dCAkKENLVkVSKSBmb3IgTGludXggb24gaTM4NiB3aXRoIFNSUC4uLicKKwkkKE1BS0UpIHhlcm1p dC1leHBvcnQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNDID0gZ2NjIiAiQ0MyID0g Z2NjIiBcCisJIkNGTEFHUyA9IC1PIC1mdW5zaWduZWQtY2hhciAtcGlwZSAtRFBPU0lYIC1ETElO VVggLUROT0NPVEZNQyBcCisJLURDS19BVVRIRU5USUNBVElPTiAtRENLX1NSUCAtRENLX0tFUkJF Uk9TICAtREtSQjUgLURLUkI0IC1ES1JCNTI0IFwKKwktRENLX0NVUlNFUyAtRENLX1BPU0lYX1NJ RyAtRFRDUFNPQ0tFVCAtRExJTlVYRlNTVE5EIC1ESEFWRV9DUllQVF9IIFwKKwkkKEs1SU5DKSAk KEs1SU5DKS9rcmI1ICQoU1JQSU5DKSBcCisJJChLRkxBR1MpIiAiTE5LRkxBR1MgPSAkKExOS0ZM QUdTKSIgXAorCSJMSUJTID0gJChTUlBMSUIpICQoSzVMSUIpIFwKKwktbG5jdXJzZXMgLWx0ZXJt Y2FwIC1sc3JwIC1sZ21wIC1sa3JiNCAtbGRlczQyNSAtbGtyYjUgLWxnc3NhcGlfa3JiNSBcCisJ LWxjb21fZXJyIC1sazVjcnlwdG8gLWxrcnlwdG8gLWxjcnlwdCAtbHJlc29sdiIKKworbGludXgr a3JiNStrcmI0K3NycCtwYW06CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3Ig TGludXggb24gaTM4NiB3aXRoIFNSUC4uLicKKwkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tU QVJHRVQ6LSQoQCl9ICJDQyA9IGdjYyIgIkNDMiA9IGdjYyIgXAorCSJDRkxBR1MgPSAtTyAtZnVu c2lnbmVkLWNoYXIgLXBpcGUgLURQT1NJWCAtRExJTlVYIC1ETk9DT1RGTUMgXAorCS1EQ0tfQVVU SEVOVElDQVRJT04gLURDS19TUlAgLURDS19LRVJCRVJPUyAgLURLUkI1IC1ES1JCNCAtREtSQjUy NCBcCisJLURDS19FTkNSWVBUSU9OIC1EQ0tfQ0FTVCAtRENLX0RFUyAtRExJQkRFUyBcCisJLURD S19DVVJTRVMgLURDS19QT1NJWF9TSUcgLURUQ1BTT0NLRVQgLURMSU5VWEZTU1RORCAtREhBVkVf Q1JZUFRfSCBcCisJLURDS19QQU0gJChLNUlOQykgJChLNUlOQykva3JiNSAkKFNSUElOQykgXAor CSQoS0ZMQUdTKSIgIkxOS0ZMQUdTID0gJChMTktGTEFHUykiIFwKKwkiTElCUyA9ICQoU1JQTElC KSAkKEs1TElCKSBcCisJLWxuY3Vyc2VzIC1sdGVybWNhcCAtbHNycCAtbGdtcCAtbGRlcyAtbGty YjQgLWxkZXM0MjUgLWxrcmI1IFwKKwktbGNvbV9lcnIgLWxrNWNyeXB0byAtbGdzc2FwaV9rcmI1 IC1sa3J5cHRvIC1sY3J5cHQgLWxwYW0gLWxkbCBcCisJLWxyZXNvbHYiCisKKyNMaW51eCBvbiBJ bnRlbCBQQyB3aXRoIEN5Z251cyBvciBNSVQgS2VyYmVyb3MgNSAxLjIuMiwgU1JQIGFuZCBTU0wv VExTLgorIyBhbmQgUEFNLgorIworIyBsaWJzcnAuYSBzaG91bGQgYmUgYnVpbGQgd2l0aCBPcGVu U1NMCisjIFJlcXVpcmVzIHRoZSBLZXJiZXJvcyAxLjIuMiBiZSBjb21waWxlZCB3aXRoIEtSQjQg Y29tcGF0aWJpbGl0eS4KKyMgSWYgeW91IGhhdmUgT3BlblNTTCAwLjkuNyBvciBsYXRlciwgYWRk IC1ET1BFTlNTTF8wOTcgdG8gS0ZMQUdTLgorbGludXgra3JiNStrcmI0K3NycCtvcGVuc3NsK3Bh bS1kZWJ1ZzoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBMaW51eCBvbiBp Mzg2IHdpdGggS1JCLFNSUCxTU0wuLi4nCisJJChNQUtFKSB4ZXJtaXQtZGVidWcgS1RBUkdFVD0k JHtLVEFSR0VUOi0kKEApfSAiQ0MgPSBnY2MiICJDQzIgPSBnY2MiIFwKKwkiQ0ZMQUdTID0gLWcg LU8gLWZ1bnNpZ25lZC1jaGFyIC1waXBlIC1EUE9TSVggLURMSU5VWCAtRE5PQ09URk1DIFwKKwkt RENLX0FVVEhFTlRJQ0FUSU9OIC1EQ0tfU1JQIC1EQ0tfS0VSQkVST1MgIC1ES1JCNSAtREtSQjQg LURLUkI1MjQgXAorCS1EQ0tfRU5DUllQVElPTiAtRENLX0NBU1QgLURDS19ERVMgLURMSUJERVMg LURDS19TU0wgLURDS19QQU0gXAorCS1EQ0tfQ1VSU0VTIC1EQ0tfUE9TSVhfU0lHIC1EVENQU09D S0VUIC1ETElOVVhGU1NUTkQgLURIQVZFX0NSWVBUX0ggXAorCS13IC1EbWFsbG9jPWRtYWxsb2Mg LURmcmVlPWRmcmVlIC1ETURFQlVHICQoSzVJTkMpICQoSzVJTkMpL2tyYjUgXAorCSQoU1JQSU5D KSAkKFNTTElOQykgJChLRkxBR1MpIiAiTE5LRkxBR1MgPSAkKExOS0ZMQUdTKSIgXAorCSJMSUJT ID0gJChTUlBMSUIpICQoSzVMSUIpICQoU1NMTElCKSBcCisJLWxuY3Vyc2VzIC1sdGVybWNhcCAt bHNycCAtbGtyYjQgLWxzc2wgLWxrcnlwdG8gLWxjcnlwdG8gXAorCS1sa3JiNSAtbGNvbV9lcnIg LWxrNWNyeXB0byAtbGdzc2FwaV9rcmI1IC1sY3J5cHQgLWxyZXNvbHYgLWxwYW0gLWxkbCIKKwor I0xpbnV4IG9uIEludGVsIFBDIHdpdGggQ3lnbnVzIG9yIE1JVCBLZXJiZXJvcyA1IDEuMi4xLCBT UlAgYW5kIFNTTC9UTFMuCisjIGFuZCBQQU0uCisjCisjIGxpYnNycC5hIHNob3VsZCBiZSBidWls ZCB3aXRoIE9wZW5TU0wKKyMgUmVxdWlyZXMgdGhlIEtlcmJlcm9zIDEuMi4yIGJlIGNvbXBpbGVk IHdpdGggS1JCNCBjb21wYXRpYmlsaXR5LgorIyBJZiB5b3UgaGF2ZSBPcGVuU1NMIDAuOS43IG9y IGxhdGVyLCBhZGQgLURPUEVOU1NMXzA5NyB0byBLRkxBR1MuCitsaW51eCtrcmI1K2tyYjQrc3Jw K29wZW5zc2wrcGFtOgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIExpbnV4 IG9uIGkzODYgd2l0aCBLUkIsU1JQLFNTTC4uLicKKwkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQk e0tUQVJHRVQ6LSQoQCl9ICJDQyA9IGdjYyIgIkNDMiA9IGdjYyIgXAorCSJDRkxBR1MgPSAtZyAt TyAtZnVuc2lnbmVkLWNoYXIgLXBpcGUgLURQT1NJWCAtRExJTlVYIC1ETk9DT1RGTUMgXAorCS1E Q0tfQVVUSEVOVElDQVRJT04gLURDS19TUlAgLURDS19LRVJCRVJPUyAgLURLUkI1IC1ES1JCNCAt REtSQjUyNCBcCisJLURDS19FTkNSWVBUSU9OIC1EQ0tfQ0FTVCAtRENLX0RFUyAtRExJQkRFUyAt RENLX1NTTCAtRENLX1BBTSBcCisJLURDS19DVVJTRVMgLURDS19QT1NJWF9TSUcgLURUQ1BTT0NL RVQgLURMSU5VWEZTU1RORCAtREhBVkVfQ1JZUFRfSCBcCisJJChLNUlOQykgJChLNUlOQykva3Ji NSAkKFNSUElOQykgJChTU0xJTkMpIFwKKwkkKEtGTEFHUykiICJMTktGTEFHUyA9ICQoTE5LRkxB R1MpIiBcCisJIkxJQlMgPSAkKFNSUExJQikgJChLNUxJQikgJChTU0xMSUIpICBcCisJLWxtIC1s bmN1cnNlcyAtbHRlcm1jYXAgLWxzcnAgXAorCS1sa3JiNCAtbHNzbCAtbGtyeXB0byAgLWxjcnlw dG8gLWxnc3NhcGlfa3JiNSBcCisJLWxrcmI1IC1sY29tX2VyciAtbGs1Y3J5cHRvIC1sY3J5cHQg LWxyZXNvbHYgLWxwYW0gLWxkbCIKKworI0xpbnV4IG9uIEludGVsIFBDIHdpdGggQ3lnbnVzIG9y IE1JVCBLZXJiZXJvcyA1IDEuMi4yLCBTUlAsIE9wZW5TU0wKKyMgd2l0aCBaTElCIGFuZCBQQU0K KyMKKyMgbGlic3JwLmEgc2hvdWxkIGJlIGJ1aWxkIHdpdGggT3BlblNTTAorIyBSZXF1aXJlcyB0 aGUgS2VyYmVyb3MgMS4yLjIgYmUgY29tcGlsZWQgd2l0aCBLUkI0IGNvbXBhdGliaWxpdHkuCisj IElmIHlvdSBoYXZlIE9wZW5TU0wgMC45Ljcgb3IgbGF0ZXIsIGFkZCAtRE9QRU5TU0xfMDk3IHRv IEtGTEFHUy4KK2xpbnV4K2tyYjUra3JiNCtzcnArb3BlbnNzbCt6bGliK3BhbToKKwlAZWNobyAn TWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBMaW51eCBvbiBpMzg2IHdpdGggS1JCLFNSUCxT U0wuLi4nCisJJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSAiQ0MgPSBn Y2MiICJDQzIgPSBnY2MiIFwKKwkiQ0ZMQUdTID0gLWcgLU8gLWZ1bnNpZ25lZC1jaGFyIC1waXBl IC1EUE9TSVggLURMSU5VWCAtRE5PQ09URk1DIFwKKwktRENLX0FVVEhFTlRJQ0FUSU9OIC1EQ0tf U1JQIC1EQ0tfS0VSQkVST1MgIC1ES1JCNSAtREtSQjQgLURLUkI1MjQgXAorCS1EQ0tfRU5DUllQ VElPTiAtRENLX0NBU1QgLURDS19ERVMgLURMSUJERVMgLURDS19TU0wgLURDS19QQU0gLURaTElC IFwKKwktRENLX0NVUlNFUyAtRENLX1BPU0lYX1NJRyAtRFRDUFNPQ0tFVCAtRExJTlVYRlNTVE5E IC1ESEFWRV9DUllQVF9IIFwKKwkkKEs1SU5DKSAkKEs1SU5DKS9rcmI1ICQoU1JQSU5DKSAkKFNT TElOQykgXAorCSQoS0ZMQUdTKSIgIkxOS0ZMQUdTID0gJChMTktGTEFHUykiIFwKKwkiTElCUyA9 ICQoU1JQTElCKSAkKEs1TElCKSAkKFNTTExJQikgXAorCS1sbSAtbG5jdXJzZXMgLWx0ZXJtY2Fw IC1sc3JwIFwKKwktbGtyYjQgLWxzc2wgLWxrcnlwdG8gIC1sY3J5cHRvIC1sZ3NzYXBpX2tyYjUg XAorCS1sa3JiNSAtbGNvbV9lcnIgLWxrNWNyeXB0byAtbGNyeXB0IC1scmVzb2x2IC1scGFtIC1s ZGwgLWx6IgorCisjTGludXggb24gSW50ZWwgUEMgd2l0aCBDeWdudXMgb3IgTUlUIEtlcmJlcm9z IDUgMS4yLjIsIFNSUCwgT3BlblNTTAorIyB3aXRoIFpMSUIsIFNoYWRvdyBQYXNzd29yZHMsIGFu ZCBQQU0KKyMKKyMgbGlic3JwLmEgc2hvdWxkIGJlIGJ1aWxkIHdpdGggT3BlblNTTAorIyBSZXF1 aXJlcyB0aGUgS2VyYmVyb3MgMS4yLjIgYmUgY29tcGlsZWQgd2l0aCBLUkI0IGNvbXBhdGliaWxp dHkuCisjIElmIHlvdSBoYXZlIE9wZW5TU0wgMC45Ljcgb3IgbGF0ZXIsIGFkZCAtRE9QRU5TU0xf MDk3IHRvIEtGTEFHUy4KK2xpbnV4K2tyYjUra3JiNCtzcnArb3BlbnNzbCt6bGliK3NoYWRvdytw YW06CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgTGludXggb24gaTM4NiB3 aXRoIEtSQixTUlAsU1NMLi4uJworCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDot JChAKX0gIkNDID0gZ2NjIiAiQ0MyID0gZ2NjIiBcCisJIkNGTEFHUyA9IC1nIC1PIC1mdW5zaWdu ZWQtY2hhciAtcGlwZSAtRFBPU0lYIC1ETElOVVggLUROT0NPVEZNQyBcCisJLURDS19BVVRIRU5U SUNBVElPTiAtRENLX1NSUCAtRENLX0tFUkJFUk9TICAtREtSQjUgLURLUkI0IC1ES1JCNTI0IFwK KwktRENLX0VOQ1JZUFRJT04gLURDS19DQVNUIC1EQ0tfREVTIC1ETElCREVTIC1EQ0tfU1NMIC1E Q0tfUEFNIC1EWkxJQiBcCisJLURDS19DVVJTRVMgLURDS19QT1NJWF9TSUcgLURUQ1BTT0NLRVQg LURMSU5VWEZTU1RORCAtREhBVkVfQ1JZUFRfSCBcCisJLURDS19TSEFET1cgJChLNUlOQykgJChL NUlOQykva3JiNSAkKFNSUElOQykgJChTU0xJTkMpIFwKKwkkKEtGTEFHUykiICJMTktGTEFHUyA9 ICQoTE5LRkxBR1MpIiBcCisJIkxJQlMgPSAkKFNSUExJQikgJChLNUxJQikgJChTU0xMSUIpIFwK KwktbG0gLWxuY3Vyc2VzIC1sdGVybWNhcCAtbHNycCAtbGtyeXB0byBcCisJLWxrcmI0IC1sc3Ns IC1sY3J5cHRvIC1sZ3NzYXBpX2tyYjUgXAorCS1sa3JiNSAtbGNvbV9lcnIgLWxrNWNyeXB0byAt bGNyeXB0IC1scmVzb2x2IC1scGFtIC1sZGwgLWx6IgorCisjTGludXggb24gSW50ZWwgUEMgd2l0 aCBDeWdudXMgb3IgTUlUIEtlcmJlcm9zIDUgMS4yLjIsIE9wZW5TU0wKKyMgd2l0aCBTaGFkb3cg UGFzc3dvcmRzLCBQQU0KKyMKKyMgUmVxdWlyZXMgdGhlIEtlcmJlcm9zIDEuMi4yIGJlIGNvbXBp bGVkIHdpdGggS1JCNCBjb21wYXRpYmlsaXR5LgorbGludXgra3JiNStrcmI0K29wZW5zc2wrc2hh ZG93K3BhbToKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBMaW51eCBvbiBp Mzg2IHdpdGggS1JCLFNTTCwuLi4nCisJJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VU Oi0kKEApfSAiQ0MgPSBnY2MiICJDQzIgPSBnY2MiIFwKKwkiQ0ZMQUdTID0gLWcgLU8gLWZ1bnNp Z25lZC1jaGFyIC1waXBlIC1EUE9TSVggLURMSU5VWCAtRE5PQ09URk1DIFwKKwktRENLX0FVVEhF TlRJQ0FUSU9OIC1EQ0tfS0VSQkVST1MgIC1ES1JCNSAtREtSQjQgLURLUkI1MjQgXAorCS1EQ0tf RU5DUllQVElPTiAtRENLX0NBU1QgLURDS19ERVMgLURMSUJERVMgLURDS19TU0wgLURDS19QQU0g XAorCS1EQ0tfQ1VSU0VTIC1EQ0tfUE9TSVhfU0lHIC1EVENQU09DS0VUIC1ETElOVVhGU1NUTkQg LURIQVZFX0NSWVBUX0ggXAorCS1EQ0tfU0hBRE9XICQoSzVJTkMpICQoSzVJTkMpL2tyYjUgJChT U0xJTkMpIFwKKwkkKEtGTEFHUykiICJMTktGTEFHUyA9ICQoTE5LRkxBR1MpIiBcCisJIkxJQlMg PSAkKEs1TElCKSAkKFNTTExJQikgXAorCS1sbSAtbG5jdXJzZXMgLWx0ZXJtY2FwIFwKKwktbGty YjQgLWxzc2wgLWxjcnlwdG8gLWxnc3NhcGlfa3JiNSBcCisJLWxrcmI1IC1sY29tX2VyciAtbGs1 Y3J5cHRvIC1sY3J5cHQgLWxyZXNvbHYgLWxwYW0gLWxkbCIKKworI0xpbnV4IG9uIEludGVsIFBD IHdpdGggQ3lnbnVzIG9yIE1JVCBLZXJiZXJvcyA1IDEuMi4yLCBPcGVuU1NMCisjIHdpdGggWkxJ QiwgU2hhZG93IFBhc3N3b3JkcywgUEFNCisjCisjIGxpYnNycC5hIHNob3VsZCBiZSBidWlsZCB3 aXRoIE9wZW5TU0wKKyMgUmVxdWlyZXMgdGhlIEtlcmJlcm9zIDEuMi4yIGJlIGNvbXBpbGVkIHdp dGggS1JCNCBjb21wYXRpYmlsaXR5LgorIyBJZiB5b3UgaGF2ZSBPcGVuU1NMIDAuOS43IG9yIGxh dGVyLCBhZGQgLURPUEVOU1NMXzA5NyB0byBLRkxBR1MuCitsaW51eCtrcmI1K2tyYjQrb3BlbnNz bCt6bGliK3NoYWRvdytwYW06CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3Ig TGludXggb24gaTM4NiB3aXRoIEtSQixTUlAsU1NMLi4uJworCSQoTUFLRSkgeGVybWl0IEtUQVJH RVQ9JCR7S1RBUkdFVDotJChAKX0gIkNDID0gZ2NjIiAiQ0MyID0gZ2NjIiBcCisJIkNGTEFHUyA9 IC1nIC1PIC1mdW5zaWduZWQtY2hhciAtcGlwZSAtRFBPU0lYIC1ETElOVVggLUROT0NPVEZNQyBc CisJLURDS19BVVRIRU5USUNBVElPTiAtRENLX0tFUkJFUk9TICAtREtSQjUgLURLUkI0IC1ES1JC NTI0IFwKKwktRENLX0VOQ1JZUFRJT04gLURDS19DQVNUIC1EQ0tfREVTIC1ETElCREVTIC1EQ0tf U1NMIC1EQ0tfUEFNIC1EWkxJQiBcCisJLURDS19DVVJTRVMgLURDS19QT1NJWF9TSUcgLURUQ1BT T0NLRVQgLURMSU5VWEZTU1RORCAtREhBVkVfQ1JZUFRfSCBcCisJLURDS19TSEFET1cgJChLNUlO QykgJChLNUlOQykva3JiNSAkKFNTTElOQykgXAorCSQoS0ZMQUdTKSIgIkxOS0ZMQUdTID0gJChM TktGTEFHUykiIFwKKwkiTElCUyA9ICQoSzVMSUIpICQoU1NMTElCKSBcCisJLWxtIC1sbmN1cnNl cyAtbHRlcm1jYXAgXAorCS1sa3JiNCAtbHNzbCAtbGNyeXB0byAtbGdzc2FwaV9rcmI1IFwKKwkt bGtyYjUgLWxjb21fZXJyIC1sazVjcnlwdG8gLWxjcnlwdCAtbHJlc29sdiAtbHBhbSAtbGRsIC1s eiIKKworI1JlZCBIYXQgOSAtIGZ1bGwgaW5zdGFsbCBpbmNsdWRlcyBLZXJiZXJvcyA1ICg0IGNv bXBhdCksIFBBTSwgU1NMLgorI0Fsc28gd29ya3MgYXJvdW5kIGJ1ZyBpbiBjdXJzZXMgaW4gd2hp Y2ggdGVybWluYWwgZ29lcyBkZWFkIGFmdGVyCisjcmV0dXJuaW5nIGZyb20gZmlsZS10cmFuc2Zl ciBkaXNwbGF5LiAgQXNzdW1lcyBPcGVuU1NMIDAuOS43IG9yIGxhdGVyLgorcmVkaGF0OToKKwlA ZWNobyAiQnVpbGRpbmcgU0VDVVJFIEtlcm1pdCBmb3IgUmVkIEhhdCA5LjAuLi4iCisJJChNQUtF KSBsaW51eCtrcmI1K2tyYjQrb3BlbnNzbCt6bGliK3NoYWRvdytwYW0gXAorCUtUQVJHRVQ9JCR7 S1RBUkdFVDotJChAKX0gIktGTEFHUyA9IC1EUkg5MCAtRE9QRU5TU0xfMDk3ICQoS0ZMQUdTKSIK KworI0RpdHRvIHBsdXMgU1JQICh3aGljaCBpcyBub3Qgbm9ybWFsbHkgaW5jbHVkZWQgd2l0aCBS SCBMaW51eCkuCityZWRoYXQ5K3NycDoKKwlAZWNobyAiQnVpbGRpbmcgU0VDVVJFIEtlcm1pdCBm b3IgUmVkIEhhdCA5LjAuLi4iCisJJChNQUtFKSBsaW51eCtrcmI1K2tyYjQrc3JwK29wZW5zc2wr emxpYitzaGFkb3crcGFtIFwKKwlLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9ICJLRkxBR1MgPSAt RFJIOTAgLURPUEVOU1NMXzA5NyAkKEtGTEFHUykiCisKKyNGb3IgUmVkIEhhdCBBUyAyLjEgd2l0 aCBPcGVuU1NMCityZWRoYXQyMStzc2w6CisJQGVjaG8gIkJ1aWxkaW5nIFNFQ1VSRSBLZXJtaXQg Zm9yIFJlZCBIYXQgMi4xLi4uIgorCSQoTUFLRSkgbGludXgrb3BlbnNzbCt6bGliK3NoYWRvdytw YW0gXAorCUtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gIktGTEFHUyA9ICAkKEtGTEFHUykiCisK KyNSZWQgSGF0IExpbnV4IDguMCAtIGZ1bGwgaW5zdGFsbCBpbmNsdWRlcyBLZXJiZXJvcyA1ICg0 IGNvbXBhdCksIFBBTSwgU1NMLgorI0Fsc28gd29ya3MgYXJvdW5kIGJ1ZyBpbiBjdXJzZXMgaW4g d2hpY2ggdGVybWluYWwgZ29lcyBkZWFkIGFmdGVyCisjcmV0dXJuaW5nIGZyb20gZmlsZS10cmFu c2ZlciBkaXNwbGF5LgorcmVkaGF0ODA6CisJQGVjaG8gIkJ1aWxkaW5nIFNFQ1VSRSBLZXJtaXQg Zm9yIFJlZCBIYXQgOC4wLi4uIgorCSQoTUFLRSkgbGludXgra3JiNStrcmI0K29wZW5zc2wremxp YitzaGFkb3crcGFtIFwKKwlLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9ICJLRkxBR1MgPSAtRFJI ODAgJChLRkxBR1MpIgorCityZWRoYXQ4MCtzcnA6CisJQGVjaG8gIkJ1aWxkaW5nIFNFQ1VSRSBL ZXJtaXQgZm9yIFJlZCBIYXQgOC4wLi4uIgorCSQoTUFLRSkgbGludXgra3JiNStrcmI0K3NycCtv cGVuc3NsK3psaWIrc2hhZG93K3BhbSBcCisJS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSAiS0ZM QUdTID0gLURSSDgwICQoS0ZMQUdTKSIKKworI1JlZCBIYXQgTGludXggNy4zIC0gZnVsbCBpbnN0 YWxsIGluY2x1ZGVzIEtlcmJlcm9zIDUgKDQgY29tcGF0KSwgUEFNLCBTU0wuCisjQWxzbyB3b3Jr cyBhcm91bmQgYnVnIGluIGN1cnNlcyBpbiB3aGljaCB0ZXJtaW5hbCBnb2VzIGRlYWQgYWZ0ZXIK KyNyZXR1cm5pbmcgZnJvbSBmaWxlLXRyYW5zZmVyIGRpc3BsYXkuCityZWRoYXQ3MzoKKwlAZWNo byAiQnVpbGRpbmcgU0VDVVJFIEtlcm1pdCBmb3IgUmVkIEhhdCA3LjMuLi4iCisJJChNQUtFKSBs aW51eCtrcmI1K2tyYjQrb3BlbnNzbCt6bGliK3NoYWRvdytwYW0gXAorCUtUQVJHRVQ9JCR7S1RB UkdFVDotJChAKX0gIktGTEFHUyA9IC1EUkg3MyAkKEtGTEFHUykiCisKK3JlZGhhdDczK3NycDoK KwlAZWNobyAiQnVpbGRpbmcgU0VDVVJFIEtlcm1pdCBmb3IgUmVkIEhhdCA3LjMuLi4iCisJJChN QUtFKSBsaW51eCtrcmI1K2tyYjQrc3JwK29wZW5zc2wremxpYitzaGFkb3crcGFtIFwKKwlLVEFS R0VUPSQke0tUQVJHRVQ6LSQoQCl9ICJLRkxBR1MgPSAtRFJINzMgJChLRkxBR1MpIgorCisjUmVk IEhhdCBMaW51eCA3LjIgLSBmdWxsIGluc3RhbGwgaW5jbHVkZXMgS2VyYmVyb3MgNSAoNCBjb21w YXQpLCBQQU0sIFNTTC4KKyNBbHNvIHdvcmtzIGFyb3VuZCBidWcgaW4gY3Vyc2VzIGluIHdoaWNo IHRlcm1pbmFsIGdvZXMgZGVhZCBhZnRlcgorI3JldHVybmluZyBmcm9tIGZpbGUtdHJhbnNmZXIg ZGlzcGxheS4KK3JlZGhhdDcyOgorCUBlY2hvICJCdWlsZGluZyBTRUNVUkUgS2VybWl0IGZvciBS ZWQgSGF0IDcuMi4uLiIKKwkkKE1BS0UpIGxpbnV4K2tyYjUra3JiNCtvcGVuc3NsK3psaWIrc2hh ZG93K3BhbSBcCisJS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSAiS0ZMQUdTID0gLURSSDcyICQo S0ZMQUdTKSIKKworcmVkaGF0NzIrc3JwOgorCUBlY2hvICJCdWlsZGluZyBTRUNVUkUgS2VybWl0 IGZvciBSZWQgSGF0IDcuMi4uLiIKKwkkKE1BS0UpIGxpbnV4K2tyYjUra3JiNCtzcnArb3BlbnNz bCt6bGliK3NoYWRvdytwYW0gXAorCUtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gIktGTEFHUyA9 IC1EUkg3MiAkKEtGTEFHUykiCisKKyNSZWQgSGF0IExpbnV4IDcuMSAtIGZ1bGwgaW5zdGFsbCBp bmNsdWRlcyBLZXJiZXJvcyA1ICg0IGNvbXBhdCksIFBBTSwgU1NMLgorI0Fsc28gd29ya3MgYXJv dW5kIGJ1ZyBpbiBjdXJzZXMgaW4gd2hpY2ggdGVybWluYWwgZ29lcyBkZWFkIGFmdGVyCisjcmV0 dXJuaW5nIGZyb20gZmlsZS10cmFuc2ZlciBkaXNwbGF5LgorcmVkaGF0NzE6CisJQGVjaG8gIkJ1 aWxkaW5nIFNFQ1VSRSBLZXJtaXQgZm9yIFJlZCBIYXQgNy4xLi4uIgorCSQoTUFLRSkgbGludXgr a3JiNStrcmI0K29wZW5zc2wremxpYitzaGFkb3crcGFtIFwKKwlLVEFSR0VUPSQke0tUQVJHRVQ6 LSQoQCl9ICJLRkxBR1MgPSAtRFJINzEgJChLRkxBR1MpIgorCityZWRoYXQ3MStzcnA6CisJQGVj aG8gIkJ1aWxkaW5nIFNFQ1VSRSBLZXJtaXQgZm9yIFJlZCBIYXQgNy4xLi4uIgorCSQoTUFLRSkg bGludXgra3JiNStrcmI0K3NycCtvcGVuc3NsK3psaWIrc2hhZG93K3BhbSBcCisJS1RBUkdFVD0k JHtLVEFSR0VUOi0kKEApfSAiS0ZMQUdTID0gLURSSDcxICQoS0ZMQUdTKSIKKworI0xpbnV4IG9u IEludGVsIFBDIHdpdGggQ3lnbnVzIG9yIE1JVCBLZXJiZXJvcyA1IDEuMi4yLCBPcGVuU1NMCisj IHdpdGggWkxJQiBhbmQgUEFNIGFuZCBTaGFkb3cgcGFzc3dvcmRzCitsaW51eCtrcmI1K29wZW5z c2wremxpYitzaGFkb3crcGFtOgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9y IExpbnV4IG9uIGkzODYgd2l0aCBLUkI1LFNTTC4uLicKKwkkKE1BS0UpIHhlcm1pdCBLVEFSR0VU PSQke0tUQVJHRVQ6LSQoQCl9ICJDQyA9IGdjYyIgIkNDMiA9IGdjYyIgXAorCSJDRkxBR1MgPSAt ZyAtTyAtZnVuc2lnbmVkLWNoYXIgLXBpcGUgLURQT1NJWCAtRExJTlVYIC1ETk9DT1RGTUMgXAor CS1EQ0tfQVVUSEVOVElDQVRJT04gLURDS19LRVJCRVJPUyAgLURLUkI1IC1EQ0tfU0hBRE9XIC1E SEFWRV9QVE1YIFwKKwktRENLX0VOQ1JZUFRJT04gLURDS19DQVNUIC1EQ0tfREVTIC1ETElCREVT IC1EQ0tfU1NMIC1EQ0tfUEFNIC1EWkxJQiBcCisJLURDS19DVVJTRVMgLURDS19QT1NJWF9TSUcg LURUQ1BTT0NLRVQgLURMSU5VWEZTU1RORCAtREhBVkVfQ1JZUFRfSCBcCisJJChLNUlOQykgJChL NUlOQykva3JiNSAkKFNTTElOQykgXAorCSQoS0ZMQUdTKSIgIkxOS0ZMQUdTID0gJChMTktGTEFH UykiIFwKKwkiTElCUyA9ICQoSzVMSUIpICQoU1NMTElCKSBcCisJLWxtIC1sbmN1cnNlcyAtbHRl cm1jYXAgLWxzc2wgLWxjcnlwdG8gLWxnc3NhcGlfa3JiNSBcCisJLWxrcmI1IC1sY29tX2VyciAt bGs1Y3J5cHRvIC1sY3J5cHQgLWxyZXNvbHYgLWxwYW0gLWxkbCAtbHoiCisKK2xpbnV4bm90Y3A6 CisJJChNQUtFKSBsaW51eCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9ICJLRkxBR1MgPSAtRE5P TkVUICQoS0ZMQUdTKSIKKworIyAibWFrZSBsaW51eG5vdGNwIiB3aXRoIGxjYyAoc2VlIGh0dHA6 Ly93d3cuY3MucHJpbmNldG9uLmVkdS9zb2Z0d2FyZS9sY2MpCisjIGxjYyBkb2VzIG5vdCB1bmRl cnN0YW5kIHZhcmlvdXMgZ2NjIGV4dGVuc2lvbnM6CisjICAiX19pbmxpbmVfXyIgLS0gY2FuIGJl IGVsaW1pbmF0ZWQgYnkgYWRkaW5nICItRF9faW5saW5lX189IgorIyAgIl9fYXNtX18gYW5kICJs b25nIGxvbmciIC0tIGluIGhlYWRlciBmaWxlcywgc2hvdWxkIGJlIHN1cnJvdW5kZWQgYnkKKyMg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiI2lmbmRlZihfX1NUUklDVF9BTlNJX18pIi8i I2VuZGlmIgorIyAgaG93ZXZlciwgVENQIHJlcXVpcmVzIHNvbWUgX19hc21fXyBmdW5jdGlvbnMs IHNvIGNhbm5vdCBiZSBjb21waWxlZAorbGludXhub3RjcC1sY2M6CisJQGVjaG8gJ01ha2luZyBD LUtlcm1pdCAkKENLVkVSKSBmb3IgTGludXggd2l0aCBsY2MgLi4uJworCUBlY2hvICdSZWFkIGNv bW1lbnRzIGluIG1ha2VmaWxlIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLicKKwkkKE1BS0Up IHdlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9ICJDQyA9IGxjYyIgIkNDMiA9IGxjYyIg XAorCSJDRkxBR1MgPSAtRExJTlVYIC1EUE9TSVggLURDS19DVVJTRVMgLURDS19QT1NJWF9TSUcg XAorCS1VVENQU09DS0VUIC1ETElOVVhGU1NUTkQgLUROT0xFQVJOICQoS0ZMQUdTKSIgXAorCSJM TktGTEFHUyA9ICQoTE5LRkxBR1MpIiAiTElCUyA9IC1sY3Vyc2VzIC1sdGVybWNhcCIKKworIyBM aW51eCAwLjk5LjE0IHRocnUgMS4wIHdpdGggZ2NjLCBkeW5hbWljIGxpYnJhcmllcywgY3Vyc2Vz LCBUQ1AvSVAuCisjIEZvciBMaW51eCAxLjIgb3IgbGF0ZXIsIHVzZSAibWFrZSBsaW51eCIgKGFi b3ZlKS4KKyMKKyMgLURMSU5VWEZTU1RORCAoTGludXggRmlsZSBTeXN0ZW0gU3RhbmRhcmQpIGdp dmVzIFVVQ1AgbG9ja2ZpbGUgL3Zhci9sb2NrIHdpdGgKKyMgc3RyaW5nIHBpZC4gIFJlbW92ZSB0 aGlzIGFuZCBnZXQgL3Vzci9zcG9vbC91dWNwIHdpdGggaW50IHBpZCwgd2hpY2ggd2FzIHVzZWQK KyMgaW4gZWFybHkgTGludXggdmVyc2lvbnMuCisjCisjIElmIHlvdSBnZXQgY29tcGlsZXIgZXJy b3JzIHJlZ2FyZGluZyA8bGludXgvc2VyaWFsLmg+LCBhZGQgLUROT0hJU1BFRUQuCisjCisjIC1E Q0tfUE9TSVhfU0lHIChQT1NJWCBzaWduYWwgaGFuZGxpbmcpIGlzIGdvb2QgZm9yIExpbnV4IHJl bGVhc2VzIGJhY2sgdG8gYXQKKyMgbGVhc3QgMC45OS4xNDsgaWYgaXQgY2F1c2VzIHRyb3VibGUg Zm9yIHlvdSwganVzdCByZW1vdmUgaXQuCisjCisjIC1EQ0tfQ1VSU0VTOiBIZXJlIHdlIGxpbmsg d2l0aCB0aGUgcmVndWxhciBjdXJzZXMgbGlicmFyeS4gIEJ1dCB5b3Ugc2hvdWxkCisjIGJlIHVz aW5nIG5jdXJzZXMuICBJbnRlcm5hbGx5LCB0aGUgY2t1dXN4LmMgbW9kdWxlIGluY2x1ZGVzIDxj dXJzZXMuaD4sIGJ1dAorIyB0aGlzIHJlYWxseSBzaG91bGQgYmUgPG5jdXJzZXMuaD4uICBUaHVz IGlmIHlvdSBoYXZlIHRoZSBuZXcgY3Vyc2VzCisjIG1hdGVyaWFsLCB5b3Ugc2hvdWxkIGVpdGhl ciBpbnN0YWxsIGl0IHdpdGggdGhlIHN0YW5kYXJkIG5hbWVzLCBvciBlbHNlCisjIGNyZWF0ZSBz eW1ib2xpYyBsaW5rcyBmcm9tIHRoZSBzdGFuZGFyZCBuYW1lcyB0byB0aGUgbmV3IG9uZXMuICBJ ZiB5b3UgZ2V0CisjIGNvbXBpbGUtdGltZSBlcnJvcnMgY29tcGxhaW5pbmcgYWJvdXQgZGF0YSBk ZWZpbml0aW9ucyBpbiB0ZXJtY2FwLmgsIGl0CisjIG1lYW5zIHlvdSBoYXZlIG5ldyBrZXJuZWwg bWF0ZXJpYWwgbWl4ZWQgd2l0aCBvbGRlciBsaWJjIGhlYWRlciBmaWxlcy4gIFRvCisjIGZpeCwg YWRkICIjaW5jbHVkZSA8dGVybWlvcy5oPiIgdG8gdGhlIDx0ZXJtY2FwLmg+IGZpbGUuICBPciBp ZiBhbGwgdGhpcyBpcworIyB0b28gY29uZnVzaW5nLCBjcmVhdGUgYSBuZXcgbWFrZWZpbGUgZW50 cnkgYmFzZWQgb24gdGhpcyBvbmUsIGJ1dCB3aXRoCisjIC1EQ0tfQ1VSU0VTIHJlbW92ZWQgZnJv bSBDRkxBR1MgYW5kIHRoZSBlbnRpcmUgTElCUz0gY2xhdXNlIHJlbW92ZWQuCisjCisjIEJ1dCB3 YWl0LCB0aGVyZSdzIG1vcmUuICBPbiBtb3N0IExpbnV4IHN5c3RlbXMsIC1sdGVybWNhcCBtdXN0 IGJlIGluY2x1ZGVkCisjIGluIExJQlMuICBCdXQgb24gb3RoZXJzLCB0aGUgbGlua2VyIGNvbXBs YWlucyB0aGF0IGxpYnRlcm1jYXAgY2FuJ3QgYmUKKyMgZm91bmQuICBJbiB0aGF0IGNhc2UsIHRy eSByZW1vdmluZyAtbHRlcm1jYXAgZnJvbSBMSUJTPS4KKyMKKyMgQnV0IHdhaXQsIHRoZXJlJ3Mg bW9yZS4gIFRoZSBmb3JtYXQgb2YgdGhlIFBJRCBzdHJpbmcgaW4gdGhlIFVVQ1AgbG9ja2ZpbGUK KyMgY2hhbmdlZCBiZXR3ZWVuIExpbnV4IEZTU1RORCAxLjAgYW5kIDEuMi4gIEluIHRoZSBlYXJs aWVyIHN0YW5kYXJkLCBpdCBoYWQKKyMgbGVhZGluZyB6ZXJvczsgaW4gdGhlIHNlY29uZCwgaXQg aGFzIGxlYWRpbmcgc3BhY2VzLiAgQnkgZGVmYXVsdCB0aGlzIGVudHJ5CisjIHVzZXMgdGhlIG5l d2VyIHN0YW5kYXJkLiAgVG8gZm9yY2UgdGhlIG9sZGVyIG9uZSwgYWRkIC1ERlNTVE5EMTAuCisj CisjICJUaGUgbmljZSB0aGluZyBhYm91dCB0aGUgTGludXggc3RhbmRhcmQgaXMgdGhlcmUgYXJl IHNvIG1hbnkgdG8gY2hvb3NlIGZyb20iCisjCisjIE5PVEU6IFJlbW92ZSAtREJJR0JVRk9LIGZv ciBzbWFsbC1tZW1vcnkgb3IgbGltaXRlZC1yZXNvdXJjZSBzeXN0ZW1zLgorbGludXgxMDoKKwlA ZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBMaW51eCAxLjAgb3IgZWFybGllci4u LicKKwlAZWNobyAnSU1QT1JUQU5UOiBSZWFkIHRoZSBjb21tZW50cyBpbiB0aGUgbGludXggc2Vj dGlvbiBvZiB0aGUnCisJQGVjaG8gJ21ha2VmaWxlIGlmIHlvdSBnZXQgY29tcGlsYXRpb24gb3Ig bGluayBlcnJvcnMuJworCSQoTUFLRSkgd2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0g IkNDID0gZ2NjIiAiQ0MyID0gZ2NjIiBcCisJIkNGTEFHUyA9IC1PIC1EUE9TSVggLURDS19DVVJT RVMgLURDS19QT1NJWF9TSUcgLURMSU5VWCBcCisJLURUQ1BTT0NLRVQgLURMSU5VWEZTU1RORCAt RE9MSU5VWEhJU1BFRUQgLUROT0xFQVJOICQoS0ZMQUdTKSIgXAorCSJMTktGTEFHUyA9ICQoTE5L RkxBR1MpIiAiTElCUyA9IC1sY3Vyc2VzIC1sdGVybWNhcCIKKworI1RoaXMgdmVyc2lvbiB3YXMg dXNlZCBmb3IgTGludXggcHJpb3IgdG8gQy1LZXJtaXQgNi4wLjE5Mi4KKyNOb3cgdGhlICJMaW51 eCBGaWxlIFN5c3RlbSBTdGFuZGFyZCIgaXMgY29uc2lkZXJlZCBzdGFuZGFyZCwgZGl0dG8gVENQ L0lQLgorbGludXhvbGQ6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgTGlu dXguLi4nCisJQGVjaG8gJ0ZvciBGU1NUTkQtcmVjb21tZW5kZWQgVVVDUCBsb2NrZmlsZXMsIHVz ZTonCisJQGVjaG8gJyAgbWFrZSBsaW51eCAiS0ZMQUdTPS1ETElOVVhGU1NUTkQiLicKKwlAZWNo byAnUmVhZCBjb21tZW50cyBpbiBtYWtlZmlsZSBmb3IgYWRkaXRpb25hbCBvcHRpb25zLicKKwkk KE1BS0UpIHdlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9ICJDQyA9IGdjYyIgIkNDMiA9 IGdjYyIgXAorCSJDRkxBR1MgPSAtTyAtRExJTlVYIC1EUE9TSVggLURDS19DVVJTRVMgLURDS19Q T1NJWF9TSUcgLUROT0xFQVJOIFwKKwkkKEtGTEFHUykiICJMTktGTEFHUyA9ICQoTE5LRkxBR1Mp IiAiTElCUyA9IC1sY3Vyc2VzIC1sdGVybWNhcCIKKworIyA6OkVORF9PTERfTElOVVhfVEFSR0VU Uzo6CisKKyMgTHlueE9TIDIuMiB3aXRoIEdDQyBjb21waWxlciwgVENQL0lQIGFuZCBmdWxsc2Ny ZWVuIGRpc3BsYXkuCisjIFByb2JhYmx5IGFsc28gd29ya3Mgd2l0aCBMeW54IDIuMSwgYW5kIG1h eWJlIGV2ZW4gTHlueCAyLjAuCisjIC1YIG1lYW5zIHVzZSB0ZXJtaW9zIHNlcmlhbCBkcml2ZXJz IHJhdGhlciB0aGFuIEJTRDQuMy1zdHlsZSBzZ3R0eSBkcml2ZXJzLgorIyBJZiB5b3UgaGF2ZSB0 cm91YmxlIHdpdGggdGhpcywgdHJ5ICJtYWtlIGJzZCBLRkxBR1M9LUROT0ZEWkVSTyIuCitseW54 OgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIEx5bnhPUyAyLjIgd2l0aCBU Q1AvSVAnCisJJChNQUtFKSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSAiQ0MgPSBn Y2MiICJDQzIgPSBnY2MiIFwKKwkiQ0ZMQUdTPSAtTyAtRFBPU0lYIC1ERElSRU5UIC1EU0VUUkVV SUQgLURDS19DVVJTRVMgLURUQ1BTT0NLRVQgXAorCS1EQ0tfQU5TSUMgLURMWU5YT1MgLUROT0xF QVJOIiAiTE5LRkxBR1MgPSAtWCIgIkxJQlMgPSAtbGN1cnNlcyAtbGJzZCIKKworbHlueDIyOgor CSQoTUFLRSkgbHlueCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9ICJLRkxBR1M9JChLRkxBR1Mp IgorCisjIEx5bnhPUyAyLjEgd2l0aCBHQ0MgY29tcGlsZXIgMS40MCBhbmQgVENQL0lQLgorbHlu eDIxOgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIEx5bnhPUyAyLjEgd2l0 aCBUQ1AvSVAnCisJJChNQUtFKSBrZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSAiQ0Mg PSBnY2MiICJDQzIgPSBnY2MiIFwKKwkiQ0ZMQUdTPSAtTyAtRFNFVFJFVUlEIC1EVENQU09DS0VU IC1EQ0tfQU5TSUMgLURCU0Q0IC1ETFlOWE9TIiBcCisJIkxJQlMgPSAtbGJzZCIKKworI1NDTyBY ZW5peCAyLjIuMSBmb3IgSUJNIFBDLCBYVCwgUFMyLzMwLCBvciBvdGhlciA4MDg4IG9yIDgwODYg bWFjaGluZQorI1Nob3VsZCB0aGlzIG5vdCB3b3JrLCB0cnkgc29tZSBvZiB0aGUgdHJpY2tzIGZy b20gc2NvMjg2LgorI05PVEU6IC1EUkVOQU1FIGlzIG9taXR0ZWQgZm9yIGVhcmx5IFNDTyBYZW5p eCByZWxlYXNlcyBiZWNhdXNlIGl0IGRpZG4ndAorI2V4aXN0LCBvciBpdHMgc2VtYW50aWNzIHdl cmUgZGlmZmVyZW50IGZyb20gdGhlIGxhdGVyIFBPU0lYLWNvbXBsaWFudAorI3ZlcnNpb24gb2Yg cmVuYW1lKCkuCitzY284NjoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBT Q08gWGVuaXgvODYuLi4nCisJJChNQUtFKSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEAp fSBcCisJIkNGTEFHUz0gLURYRU5JWCAtRE5PRklMRUggLUROT0lLU0QgLUROT1VOSUNPREUgLURO T0xFQVJOIFwKKwkkKEtGTEFHUykgLUR1bml4IC1GIDMwMDAgLWkgLU0wbWUiIFwKKwkiTE5LRkxB R1MgPSAtRiAzMDAwIC1pIC1zIC1NMG1lIiAiTElCUyA9IC1seCIKKworI1NDTyBYZW5peC8yODYg Mi4yLjEsIGUuZy4gZm9yIElCTSBQQy9BVCwgUFMvMiBNb2RlbCA1MCwgZXRjLgorI1JlcG9ydGVk bHksIHRoaXMgIm1ha2UiIGNhbiBmYWlsIHNpbXBseSBiZWNhdXNlIG9mIHRoZSBzaXplIG9mIHRo aXMKKyNtYWtlZmlsZS4gIElmIHRoYXQgaGFwcGVucywgdXNlICJtYWtlTCIsIG9yIGVkaXQgb3V0 IHNvbWUgb2YgdGhlCisjb3RoZXIgZW50cmllcy4gIE5vIGRlYnVnZ2luZyBvciBjaGFyYWN0ZXIt c2V0IHRyYW5zbGF0aW9uLgorc2NvMjg2OgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZF UikgZm9yIFNDTyBYZW5peC8yODYuLi4nCisJQGVjaG8gJ0lmIG1ha2UgZmFpbHMsIHRyeSB1c2lu ZyBtYWtlTC4nCisJJChNQUtFKSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJ IkNGTEFHUz0gLXhlbml4IC1zIC1PIC1MQVJHRSAtRFhFTklYIC1ETk9GSUxFSCAtRHVuaXggLURS RENISyAtRE5BUCBcCisJLUROT0lLU0QgLUROT0RFQlVHIC1ETk9UTE9HIC1ETk9DU0VUUyAtRE5P TEVBUk4gXAorCSQoS0ZMQUdTKSAtRiAzMDAwIC1pIC1NMmxldDE2IiBcCisJIkxJQlMgPSAtbHgi ICJMTktGTEFHUyA9IC14ZW5peCAtcyAtTyAtTEFSR0UgLUYgMzAwMCAtaSAtTTJsZXQxNiIKKwor I1NDTyBYZW5peC8yODYgMi4yLjEsIGUuZy4gZm9yIElCTSBQQy9BVCwgUFMvMiBNb2RlbCA1MCwg ZXRjLgorI0FzIGFib3ZlLCBidXQgd2l0aCBIREJVVUNQIChUaGlzIG9uZSBtaWdodCBuZWVkIGZp eGluZyAtLSBzZWUgc2NvMjg2KS4KK3NjbzI4NmhkYjoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0 ICQoQ0tWRVIpIGZvciBTQ08gWGVuaXgvMjg2IHdpdGggSERCIFVVQ1AuLi4nCisJQGVjaG8gJ0lm IG1ha2UgZmFpbHMsIHRyeSB1c2luZyBtYWtlTC4nCisJJChNQUtFKSB3ZXJtaXQgS1RBUkdFVD0k JHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUz0gLXMgLU8gLUxBUkdFIC1EWEVOSVggLUROT0ZJ TEVIIC1EdW5peCAtRFJEQ0hLIC1ETkFQIFwKKwktREhEQlVVQ1AgLUROT0lLU0QgLUROT1VOSUNP REUgLUROT0xFQVJOIFwKKwkkKEtGTEFHUykgLUYgMzAwMCAtaSAtTTJsZXQzMiIgXAorCSJMSUJT ID0gLWx4IiAiTE5LRkxBR1MgPSAtcyAtTyAtTEFSR0UgLUYgMzAwMCAtaSAtTTJsZXQzMiIKKwor I1NDTyBYZW5peC8zODYgMi4yLjIgYW5kIDIuMi4zCitzY28zODY6CisJQGVjaG8gJ01ha2luZyBD LUtlcm1pdCAkKENLVkVSKSBmb3IgU0NPIFhlbml4LzM4NiAyLjIuMi4uLicKKwkkKE1BS0UpIHdl cm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTPSAtRFhFTklYIC1ETk9G SUxFSCAtRE5PSUtTRCAtRE5PUkVESVJFQ1QgLUROT0xFQVJOIFwKKwktRHVuaXggLURSRENISyAt RE5BUCAtRE5PVU5JQ09ERSAkKEtGTEFHUykgLU90Y2wgLU0zZSIgXAorCSJMTktGTEFHUyA9IC1z IiAiTElCUyA9IC1seCIKKworI1NDTyBYRU5JWC8zODYgMi4yLjMgd2l0aCBFeGNlbGFuIFRDUC9J UCArIGN1cnNlcy4KKyMgTk9URTogVGhpcyBvbmUgbWlnaHQgbmVlZCBzb21lIHdvcmsgaW4gQy1L ZXJtaXQgNi4wLgorIyBZb3UgbWlnaHQgbmVlZCB0byBpbmNsdWRlIC91c3IvaW5jbHVkZS9zeXMv dHlwZXMuaAorIyBjb250YWluaW5nICJ0eXBlZGVmIGNoYXIgKmNhZGRyX3Q7Ii4gIFRoZW4gYXQg bGVhc3QgaXQgY29tcGlsZXMuCitzY28zODZuZXRjOgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQg JChDS1ZFUikgZm9yIFNDTyBYZW5peC8zODYgMi4yLjMgKyBFeGNlbGFuIFRDUCcKKwkkKE1BS0Up IHdlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTPSAtSS91c3IvaW5j bHVkZS9leG9zIC1EWEVOSVggLURDS19DVVJTRVMgLUROT1VOSUNPREUgXAorCS1EdW5peCAtRFJE Q0hLIC1ETkFQIC1EVENQU09DS0VUIC1ERVhDRUxBTiAtRE5PSkMgLUROT01LRElSIC1ETk9GSUxF SCBcCisJLUROT0xFQVJOIC1ETk9SRURJUkVDVCAtRE5PSUtTRCAtRE5PX0ROU19TUlYgJChLRkxB R1MpIC1PdGNsIC1NM2UiIFwKKwkiTE5LRkxBR1MgPSAtcyIgIkxJQlMgPSAtbGMgLWx4IC1sc29j a2V0IC1sY3Vyc2VzIC1sdGVybWNhcCIKKworI1NDTyBYRU5JWC8zODYgMi4zLjMgd2l0aCBnY2Mg MS4zNyBvciBsYXRlci4uLgorc2NvMzg2Z2NjOgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChD S1ZFUikgZm9yIFNDTyBYZW5peC8zODYgMi4zLjMsIGdjYy4uLicKKwlAZWNobyAnQWRkIC1EX05P X1BST1RPVFlQRSBpZiB5b3UgaGF2ZSB0cm91YmxlIHdpdGggWGVuaXggaGVhZGVyIGZpbGVzJwor CSQoTUFLRSkgd2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gIkNDID0gZ2NjIiAiQ0My ID0gZ2NjIiBcCisJIkNGTEFHUz0gLU8gLURYRU5JWCAtRFNWUjMgLUROT0ZJTEVIIC1ESERCVVVD UCAtRFJEQ0hLIC1ETkFQIFwKKwktRE5PSkMgLUROT0RFQlVHIC1ETk9VTklDT0RFIC1ETk9MRUFS TiAkKEtGTEFHUykgXAorCS10cmFkaXRpb25hbCAtZnBjYy1zdHJ1Y3QtcmV0dXJuIC1mc3RyZW5n dGgtcmVkdWNlIFwKKwktRE1fQklURklFTERTIC1ETV9DT0ZGIC1ETV9JMzg2IC1ETV9JODYgLURN X0k4NlNNIFwKKwktRE1fSU5URVJOQVQgLURNX1NEQVRBIC1ETV9TVEVYVCAtRE1fU1lTMyAtRE1f U1lTNSBcCisJLURNX1NZU0lJSSAtRE1fU1lTViAtRE1fV09SRFNXQVAgLURNX1hFTklYIC1ETk9J S1NEIC1ETk9SRURJUkVDVCBcCisJLURQV0lEX1Q9aW50ICIgIkxOS0ZMQUdTID0gLXMiICJMSUJT ID0gLWx4IgorCisjQXMgYWJvdmUsIGJ1dCB3aXRoIGN1cnNlcy4uLgorc2NvMzg2Z2NjYzoKKwlA ZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTQ08gWGVuaXgvMzg2IDIuMy4zLCBn Y2MuLi4nCisJQGVjaG8gJ0FkZCAtRF9OT19QUk9UT1RZUEUgaWYgeW91IGhhdmUgdHJvdWJsZSB3 aXRoIFhlbml4IGhlYWRlciBmaWxlcycKKwkkKE1BS0UpIHdlcm1pdCBLVEFSR0VUPSQke0tUQVJH RVQ6LSQoQCl9ICJDQyA9IGdjYyIgIkNDMiA9IGdjYyIgXAorCSJDRkxBR1M9IC1PIC1EWEVOSVgg LURTVlIzIC1ETk9GSUxFSCAtREhEQlVVQ1AgLURSRENISyAtRE5BUCBcCisJLUROT0pDIC1ETk9E RUJVRyAtRENLX0NVUlNFUyAtRE5PVU5JQ09ERSAtRE5PTEVBUk4gJChLRkxBR1MpIFwKKwktdHJh ZGl0aW9uYWwgLWZwY2Mtc3RydWN0LXJldHVybiAtZnN0cmVuZ3RoLXJlZHVjZSBcCisJLURNX0JJ VEZJRUxEUyAtRE1fQ09GRiAtRE1fSTM4NiAtRE1fSTg2IC1ETV9JODZTTSAtRE5PUkVESVJFQ1Qg XAorCS1ETV9JTlRFUk5BVCAtRE1fU0RBVEEgLURNX1NURVhUIC1ETV9TWVMzIC1ETV9TWVM1IFwK KwktRE1fU1lTSUlJIC1ETV9TWVNWIC1ETV9XT1JEU1dBUCAtRE1fWEVOSVggLUROT0lLU0QgXAor CS1EUFdJRF9UPWludCAiICJMTktGTEFHUyA9IC1zIiAiTElCUyA9IC1seCAtbGN1cnNlcyAtbHRl cm1saWIiCisKKyNTQ08gVU5JWCAoYW5kIE9EVCkgZW50cmllcy4uLgorIworI05PVEU6IEFsbCBT Q08gVU5JWCBlbnRyeSBMSUJTIHNob3VsZCBoYXZlICItbGNfcyAtbGMgLWx4IiBJTiBUSEFUIE9S REVSIChpZgorI3NoYXJlZCBDIGxpYnJhcnkgaXMgZGVzaXJlZCksIG9yIGVsc2UgIi1sYyAtbHgi IElOIFRIQVQgT1JERVIuICBVc2Ugc2hhcmVkIEMKKyNsaWJyYXJpZXMgdG8gc2F2ZSBtZW1vcnks IGJ1dCB0aGVuIGRvbid0IGV4cGVjdCB0byBydW4gdGhlIHJlc3VsdGluZyBiaW5hcnkKKyNvbiBh IGRpZmZlcmVudCBtYWNoaW5lLiAgV2hlbiB1c2luZyAtbGNfcywgeW91IG11c3QgYWxzbyB1c2Ug LWxjLCBiZWNhdXNlIHRoZQorI3NoYXJlZCBDIGxpYnJhcnkgZG9lcyBub3QgY29udGFpbiBhbGwg b2YgbGliYy5hLiAgQW5kIGluIGFsbCBjYXNlcywgLWxjIG11c3QKKyNBTFdBWVMgcHJlY2VkZSAt bHguCisjCisjQU5PVEhFUiBOT1RFOiAtRFJFTkFNRSBpcyBpbmNsdWRlZCBpbiBhbGwgU0NPIFVO SVggZW50cmllcy4gIFJlbW92ZSBpdCBpZiBpdAorI2NhdXNlcyB0cm91YmxlLiAgTm8gaGFybSBp cyBkb25lIGJ5IHJlbW92aW5nIGl0IChzZWUgY2t1aW5zLnR4dCkuCisjCisjQU5EIEFOT1RIRVI6 IEluIHRoZW9yeSwgaXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIHJ1biBTQ08gVU5JWCBiaW5hcmll cyBvbgorI1NDTyBYZW5peCAyLjMgYW5kIGxhdGVyLiAgSW4gcHJhY3RpY2UsIHRoaXMgbWlnaHQg bm90IHdvcmsgYmVjYXVzZSBvZiB0aGUKKyNsaWJyYXJpZXMsIGV0Yy4gIEFsc28sIGRvbid0IGFk ZCB0aGUgLWxpbmsgLXogc3dpdGNoICh3aGljaCBpcyBzdXBwb3NlZCB0bworI3Jvb3Qgb3V0IHJl ZmVyZW5jZXMgdG8gbnVsbCBwb2ludGVycykgYmVjYXVzZSBpdCBtYWtlcyBVTklYIGJpbmFyaWVz IGNvcmUKKyNkdW1wIHdoZW4gdGhleSBhcmUgcnVuIHVuZGVyIFhlbml4LgorCisjTk9URTogLU90 Y2wgcmVtb3ZlZCBhbmQgcmVwbGFjZWQgYnkgLU8sIHNpbmNlIC1PdGNsIHByb2R1Y2VkIGluY29y cmVjdCBjb2RlLgorI1NDTyBVTklYLzM4NiAzLjIuMCwgMy4yLjEsIGFuZCBTQ08gWGVuaXggMi4z LngKK3NjbzNyMjoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTQ08gVU5J WC8zODYgMy4yLjAgb3IgMy4yLjEgLi4uJworCUBlY2hvICdXYXJuaW5nOiBJZiBtYWtlIGJsb3dz IHVwLCBlZGl0IHRoZSBtYWtlZmlsZSB0byBqb2luJworCUBlY2hvICd0aGUgZm9sbG93aW5nIHRo cmVlIGNvbnRpbnVlZCBsaW5lcyBpbnRvIG9uZSBsaW5lLicKKwlAZWNobyAnQWxzbywgcmVtb3Zl IC1EUkVOQU1FIGlmIF9yZW5hbWUgdW5yZXNvbHZlZCBhdCBsaW5rIHRpbWUuJworCSQoTUFLRSkg d2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1M9IC1EWEVOSVggLURT VlIzIC1ETk9GSUxFSCAtREhEQlVVQ1AgLURSRENISyAtRE5BUCAtRE5PTEVBUk4gXAorCS1EUkVO QU1FIC1ETk9JS1NEIC1ETk9KQyAkKEtGTEFHUykgLU8iIFwKKwkiTE5LRkxBR1MgPSAtcyIgIkxJ QlMgPSAtbGMgLWx4IgorCisjU0NPIFVOSVgvMzg2IDMuMi4wIGFuZCBTQ08gWGVuaXggMi4zLngg d2l0aCBFeGNlbGFuIFRDUC9JUCBzdXBwb3J0LgorI0luIGNhc2Ugb2YgY29tcGlsYXRpb24gb3Ig cnVudGltZSBwcm9ibGVtcywgdHJ5IGFkZGluZworIyItRFVJRF9UPWludCAtREdJRF9UPWludCIg dG8gdGhlIENGTEFHUy4gIElmIHRoYXQgZG9lc24ndCB3b3JrLCB0cnkKKyMiLURVSURfVD11aWRf dCAtREdJRF9UPWdpZF90Ii4KK3NjbzNyMm5ldDoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQo Q0tWRVIpIGZvciBTQ08gVU5JWC8zODYgLyBFeGNlbGFuLi4uJworCSQoTUFLRSkgd2VybWl0IEtU QVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1M9IC1JL3Vzci9pbmNsdWRlL2V4b3Mg LURYRU5JWCAtRFNWUjMgLUROT0ZJTEVIIC1ETk9MRUFSTiBcCisJLURIREJVVUNQIC1EUkRDSEsg LUROQVAgLURSRU5BTUUgLURUQ1BTT0NLRVQgLURFWENFTEFOIC1ETk9KQyBcCisJLUROT0lLU0Qg LUROT1JFRElSRUNUICQoS0ZMQUdTKSAtTyIgXAorCSJMTktGTEFHUyA9IC1zIiAiTElCUyA9IC1s YyAtbHggLWxzb2NrZXQiCisKKyNTQ08gVU5JWC8zODYgMy4yLjAgYW5kIFNDTyBYZW5peCAyLjMu eCB3aXRoIEV4Y2VsYW4gVENQL0lQIHN1cHBvcnQuCisjQXMgYWJvdmUsIHdpdGggY3Vyc2VzIGFk ZGVkLgorc2NvM3IybmV0YzoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBT Q08gVU5JWC8zODYgLyBFeGNlbGFuIC8gY3Vyc2VzLi4uJworCSQoTUFLRSkgd2VybWl0IEtUQVJH RVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1M9IC1JL3Vzci9pbmNsdWRlL2V4b3MgLURY RU5JWCAtRFNWUjMgLUROT0ZJTEVIIC1ETk9MRUFSTiBcCisJLURIREJVVUNQIC1EUkRDSEsgLURO QVAgLURUQ1BTT0NLRVQgLURFWENFTEFOIC1ETk9KQyAkKEtGTEFHUykgXAorCS1EUkVOQU1FIC1E Q0tfQ1VSU0VTIC1ETk9SRURJUkVDVCAtRE5PSUtTRCAtTyIgIkxOS0ZMQUdTID0gLXMiIFwKKwki TElCUyA9IC1sYyAtbHggLWxzb2NrZXQgLWxjdXJzZXMgLWx0ZXJtY2FwIgorCisjU0NPIFVOSVgg My4yLnggb3IgU0NPIFhlbml4IDIuMy54IHdpdGggUmFjYWwgSW50ZXJMYW4gVENQL0lQIHN1cHBv cnQKKyMgRXh0cmEgY29tcGlsZSBmbGFncyBmb3Igb3RoZXIgdmVyc2lvbiBvZiBSYWNhbCBJbnRl ckxhbiBUQ1AvSVA6CisjIFhlbml4Mjg2L05QNjIxLTI4NiwgdXNlIC1NbCAtRFBBUkFNSCAtRElO VEVSTEFOIC1EaTI4NiAtRFNZU1YKKyMgWGVuaXgzODYvTlA2MjEtMzg2LCB1c2UgLURQQVJBTUgg LURJTlRFUkxBTiAtRGkzODYgLURTWVNWCisjIElTQzM4Nml4L05QNjIySSwgdXNlIC1EU1lTViAt RGkzODYKKyMgU0NPIFVuaXgzLjIvTlA2MjJTLCB1c2UgLURTWVNWIC1EaTM4NiAtRFNDT19VTklY CisjIEFUJlQgU1ZSMy4yL05QNjIyQSwgdXNlIC1EU1lTViAtRGkzODYgLURBVFQKK3NjbzNyMm5l dHJpOgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFNDTyBVTklYLzM4NiAv IFJhY2FsIEludGVyTGFuLi4uJworCSQoTUFLRSkgd2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDot JChAKX0gXAorCSJDRkxBR1M9IC1JL3Vzci9pbmNsdWRlL2ludGVybGFuIC1EWEVOSVggLUROT0ZJ TEVIIC1ESERCVVVDUCBcCisJLURTVlIzIC1EUkRDSEsgLUROQVAgLURUQ1BTT0NLRVQgLURQQVJB TUggLURJTlRFUkxBTiAtRGkzODYgLURTWVNWIFwKKwktRFJFTkFNRSAtRE5PUkVESVJFQ1QgLURO T0lLU0QgLUROT0pDIC1ETk9MRUFSTiAkKEtGTEFHUykgLU90Y2wgLU0zZSIgXAorCSJMTktGTEFH UyA9IC1zIiAiTElCUyA9IC1sYyAtbHggLWx0Y3AiCisKKyMgU0NPIFhFTklYLzM4NiAyLjMuMyBT eXNWIHdpdGggU0NPIFRDUC9JUAorIyBTeXN0ZW0gViBTVFJFQU1TIFRDUCBkZXZlbG9wZWQgYnkg TGFjaG1hbiBBc3NvY2lhdGVzIEluYyBhbmQKKyMgQ29udmVyZ2VudCBUZWNobm9sb2dpZXMuCisj IC1EUkVOQU1FIHJlbW92ZWQgc2luY2Ugc29tZSByZXBvcnRzIGluZGljYXRlIGl0IGlzIG5vdCBz dXBwb3J0ZWQKKyMgKHdoZXJlYXMgb3RoZXJzIHNheSBpdCBpcy4pCitzY28zcjJsYWk6CisJQGVj aG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgU0NPIFhFTklYLzM4NiAyLjMuMyArIFRD UC9JUC4uLicKKwkkKE1BS0UpIHdlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwki Q0ZMQUdTPSAtRExBSV9UQ1AgLURpMzg2IC1EWEVOSVggLURTVlIzIC1ETk9GSUxFSCAtREhEQlVV Q1AgLURSRENISyBcCisJLUROQVAgLURUQ1BTT0NLRVQgLURQV0lEX1Q9aW50IC1ETk9SRURJUkVD VCAtRE5PSUtTRCAtRE5PTEVBUk4gXAorCSQoS0ZMQUdTKSAtT3RjbCAtaSAtTTNlIiBcCisJIkxO S0ZMQUdTID0gLWkgLXMiICJMSUJTID0gLWxjIC1seCAtbHNvY2tldCIKKworc2NvM3IybGFpYzoK KwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTQ08gWEVOSVgvMzg2IDIuMy4z ICsgVENQL0lQLi4uJworCSQoTUFLRSkgd2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0g XAorCSJDRkxBR1M9IC1ETEFJX1RDUCAtRGkzODYgLURYRU5JWCAtRFNWUjMgLUROT0ZJTEVIIC1E SERCVVVDUCAtRFJEQ0hLIFwKKwktRE5BUCAtRFRDUFNPQ0tFVCAtRENLX0FOU0lDIC1EQ0tfQ1VS U0VTIC1ETV9URVJNSU5GTyAtRE5PTEVBUk4gXAorCS1EUFdJRF9UPWludCAtRE5PUkVESVJFQ1Qg LUROT0lLU0QgJChLRkxBR1MpIC1PdGNsIC1pIC1NM2UiIFwKKwkiTE5LRkxBR1MgPSAtaSAtcyIg IkxJQlMgPSAtbHRpbmZvIC1sYyAtbHggLWxzb2NrZXQiCisKKyNTQ08gVU5JWC8zODYgMy4ydjIg KFBPU0lYIGpvYiBjb250cm9sKSwgc2hhcmVkIGxpYnJhcmllcy4KK3NjbzNyMjI6CisJQGVjaG8g J01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgU0NPIFVOSVgvMzg2IDMuMnYyIC4uLicKKwlt YWtlIHdlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTPSAtRFhFTklY IC1EU1ZSMyAtRE5PRklMRUggLURIREJVVUNQIC1EUkRDSEsgLUROT0xFQVJOIFwKKwktRE5BUCAt RFJFTkFNRSAtRFBJRF9UPXBpZF90IC1EUFdJRF9UPWludCAtRERJUkVOVCAtRE5PSUtTRCBcCisJ LUROT1JFRElSRUNUICQoS0ZMQUdTKSAtTyIgXAorCSJMTktGTEFHUyA9IC1zIiAiTElCUyA9IC1s Y19zIC1sYyAtbHgiCisKKyNTQ08gVU5JWC8zODYgMy4ydjIsIFBPU0lYIGpvYiBjb250cm9sLCBm dWxsc2NyZWVuIGZpbGUgdHJhbnNmZXIgZGlzcGxheSwKKyNkeW5hbWljIG1lbW9yeSBhbGxvY2F0 aW9uLCBzaGFyZWQgQyBsaWJyYXJ5CitzY28zcjIyYzoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0 ICQoQ0tWRVIpIGZvciBTQ08gVU5JWC8zODYgMy4ydjIgLi4uJworCUBlY2hvICdXYXJuaW5nOiBJ ZiBtYWtlIGJsb3dzIHVwLCBlZGl0IHRoZSBtYWtlZmlsZSB0byBqb2luJworCUBlY2hvICd0aGUg Zm9sbG93aW5nIGZvdXIgY29udGludWVkIGxpbmVzIGludG8gb25lIGxpbmUuJworCW1ha2Ugd2Vy bWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1M9IC1EWEVOSVggLURTVlIz IC1ETk9GSUxFSCAtREhEQlVVQ1AgLURSRENISyAtRE5BUCAtRE5PTEVBUk4gXAorCS1EQ0tfQ1VS U0VTIC1ERElSRU5UIC1EUkVOQU1FIC1ETk9SRURJUkVDVCAtRE5PSUtTRCBcCisJLURQSURfVD1w aWRfdCAtRFBXSURfVD1pbnQgJChLRkxBR1MpIC1PIiBcCisJIkxOS0ZMQUdTID0gLXMiICJMSUJT ID0gLWxjdXJzZXMgLWxjX3MgLWxjIC1seCIKKworI1NDTyBVTklYLzM4NiAzLjJ2MiB3aXRoIGdj YyAxLjQwIG9yIGxhdGVyIChQT1NJWCBqb2IgY29udHJvbCkKK3NjbzNyMjJnY2M6CisJQGVjaG8g J01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgU0NPIFVOSVgvMzg2IDMuMnYyLCBnY2MnCisJ QGVjaG8gJ1dhcm5pbmc6IElmIG1ha2UgYmxvd3MgdXAsIGVkaXQgdGhlIG1ha2VmaWxlIHRvIGpv aW4nCisJQGVjaG8gJ3RoZSBmb2xsb3dpbmcgc2V2ZW4gY29udGludWVkIGxpbmVzIGludG8gb25l IGxpbmUuJworCW1ha2Ugd2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gIkNDID0gZ2Nj IiBcCisJIkNGTEFHUz0gLU8gLURQT1NJWCAtRFhFTklYIC1EU1ZSMyAtRE5PRklMRUggLURIREJV VUNQIC1EUkRDSEsgLUROQVAgXAorCS1ETk9MRUFSTiAtRFJFTkFNRSAtdHJhZGl0aW9uYWwgLWZw Y2Mtc3RydWN0LXJldHVybiAtZnN0cmVuZ3RoLXJlZHVjZSBcCisJLURNX0JJVEZJRUxEUyAtRE1f Q09GRiAtRE1fSTM4NiAtRE1fSTg2IC1ETV9JODZTTSBcCisJLURNX0lOVEVSTkFUIC1ETV9TREFU QSAtRE1fU1RFWFQgLURNX1NZUzMgLURNX1NZUzUgXAorCS1ETV9TWVNJSUkgLURNX1NZU1YgLURN X1VOSVggLURNX1dPUkRTV0FQIC1ETV9YRU5JWCAtRHVuaXggXAorCS1EUElEX1Q9cGlkX3QgLURQ V0lEX1Q9aW50IC1ETk9SRURJUkVDVCAtRE5PSUtTRCAkKEtGTEFHUykgIiBcCisJIkxOS0ZMQUdT ID0gLXMiICJMSUJTID0gLWxjX3MgLWxjIC1seCIKKworI1NDTyBVTklYLzM4NiAzLjJ2MiAoT0RU IDEuMSkgKFBPU0lYIGpvYiBjb250cm9sKSB3aXRoIFNDTyBUQ1AvSVAsIHNoYXJlZCBsaWJzCisj UmVxdWlyZXMgU0NPIFRDUC9JUCBvciBPRFQgZGV2ZWxvcG1lbnQgc3lzdGVtIGZvciB0ZWxuZXQu aCwgZXRjLgorc2NvM3IyMm5ldDoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZv ciBTQ08gVU5JWC8zODYgMy4yLjIgKyBUQ1AvSVAuLi4nCisJQGVjaG8gJ1dhcm5pbmc6IElmIG1h a2UgYmxvd3MgdXAsIGVkaXQgdGhlIG1ha2VmaWxlIHRvIGpvaW4nCisJQGVjaG8gJ3RoZSBmb2xs b3dpbmcgdGhyZWUgY29udGludWVkIGxpbmVzIGludG8gb25lIGxpbmUuJworCW1ha2UgeGVybWl0 IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1M9IC1EWEVOSVggLURTVlIzIC1E Tk9GSUxFSCAtREhEQlVVQ1AgLURSRENISyAtRE5BUCAtRFRDUFNPQ0tFVCBcCisJLURSRU5BTUUg LURQSURfVD1waWRfdCAtRFBXSURfVD1pbnQgLURESVJFTlQgLUROT1JFRElSRUNUIC1ETk9JS1NE IFwKKwkkKEtGTEFHUykgLU8iICJMTktGTEFHUyA9IC1zIiAiTElCUyA9IC1sc29ja2V0IC1sY19z IC1sYyAtbHgiCisKKyNBcyBhYm92ZSwgYnV0IHdpdGggY3Vyc2VzIGZvciBmdWxsc2NyZWVuIGZp bGUgdHJhbnNmZXIgZGlzcGxheS4KKyNSZXF1aXJlcyBTQ08gVENQL0lQIG9yIE9EVCBkZXZlbG9w bWVudCBzeXN0ZW0gZm9yIHRlbG5ldC5oLCBldGMuCitzY28zcjIybmV0YzoKKwlAZWNobyAnTWFr aW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTQ08gVU5JWC8zODYgMy4ydjIgKyBUQ1AvSVAuLi4n CisJQGVjaG8gJ1dhcm5pbmc6IElmIG1ha2UgYmxvd3MgdXAsIGVkaXQgdGhlIG1ha2VmaWxlIHRv IGpvaW4nCisJQGVjaG8gJ3RoZSBmb2xsb3dpbmcgdGhyZWUgY29udGludWVkIGxpbmVzIGludG8g b25lIGxpbmUuJworCW1ha2UgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gIkNGTEFH Uz0gXAorCS1EWEVOSVggLURTVlIzIC1ETk9GSUxFSCAtREhEQlVVQ1AgLURSRENISyAtRE5BUCAt RFRDUFNPQ0tFVCAtRFJFTkFNRSBcCisJLURDS19DVVJTRVMgLURESVJFTlQgLUROT0lLU0QgLURO T1JFRElSRUNUIFwKKwktRFBJRF9UPXBpZF90IC1EUFdJRF9UPWludCAtTyAkKEtGTEFHUykiIFwK KwkiTE5LRkxBR1MgPSAtcyIgIkxJQlMgPSAtbGN1cnNlcyAtbHNvY2tldCAtbGNfcyAtbGMgLWx4 IgorCisjU0NPIFhFTklYIDIuMy40LCBubyBjdXJzZXMsIG5vIFRDUC9JUCwgbm8gSUtTRC4KKyNU aGlzIG9uZSBidWlsdCBhbmQgdGVzdGVkIGluIEMtS2VybWl0IDcuMC4KKyNsY2ZwIGlzIEMgbGli cmFyeSBmbG9hdGluZy1wb2ludCBzdXBwb3J0LgorI1VzZSAtTTMgdG8gZ2VuZXJhdGUgMzItYml0 IGkzODYgY29kZSBpbnN0ZWFkIG9mIDE2LWJpdCBzZWdtZW50ZWQgaTI4NiBjb2RlLgorI1VzZSAt TWUgdG8gZW5hYmxlIE1TIG5vbnN0YW5kYXJkIGtleXdvcmRzIGluIHN5c3RlbSBoZWFkZXJzLgor I1VzZSAtVzIgb3IgVzMgdG8gaW5jcmVhc2UgdGhlIHdhcm5pbmcgbGV2ZWwuCisjT0s6IDIwMTEv MDYvMTUKK3NjbzIzNDoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTQ08g WEVOSVggMi4zLjQuLi4nCisJJChNQUtFKSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEAp fSBcCisJIkNGTEFHUz0gLURTQ08zMiAtRFhFTklYIC1ETk9GSUxFSCAtREhEQlVVQ1AgLURSRENI SyAtRE5PTEVBUk4gXAorCS1ETkFQIC1ETk9KQyAtRE5PQ09URk1DIC1ETk9JS1NEIC1ETk9SRURJ UkVDVCAtRE5PVE5DT0RFIC1ETk9HRlRJTUVSIFwKKwktRE5PVElNRVZBTCAtRE5PVElNRVpPTkUg LUROT1NZTUxJTksgLURTQ08yMzQgLUREQ0xHRVRDV0QgJChLRkxBR1MpIFwKKwktT3RjbCIgIkxO S0ZMQUdTID0gLXMiICJMSUJTID0gLWxjZnAgLWxjIC1seCIKKworI1NDTyBYRU5JWCAyLjMuNCwg bm8gVENQL0lQLCBubyBJS1NELCBidXQgd2l0aCBjdXJzZXMuCisjIEJ1aWx0IGFuZCB0ZXN0ZWQg aW4gQy1LZXJtaXQgNy4wLgorIyBOb3RlOiBYRU5JWCAyLjMuNCBkb2VzIG5vdCBoYXZlIG5ld3Rl cm0oKSBzbyBubyBwb2ludCBpbiBhZGRpbmcgLURDS19ORVdURVJNLgorc2NvMjM0YzoKKwlAZWNo byAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTQ08gWEVOSVggMi4zLjQgKyBjdXJzZXMu Li4nCisJJChNQUtFKSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFH Uz0gLURTQ08zMiAtRFhFTklYIC1ETk9GSUxFSCAtREhEQlVVQ1AgLURSRENISyAtRE5PTEVBUk4g XAorCS1ETkFQIC1ETk9KQyAtRE5PQ09URk1DIC1ETk9JS1NEIC1ETk9SRURJUkVDVCAtRE5PVE5D T0RFIC1ETk9HRlRJTUVSIFwKKwktRE5PVElNRVZBTCAtRE5PVElNRVpPTkUgLUROT1NZTUxJTksg LURDS19DVVJTRVMgLURTQ08yMzQgXAorCS1ERENMR0VUQ1dEICQoS0ZMQUdTKSAtT3RjbCIgXAor CSJMTktGTEFHUyA9IC1zIiAiTElCUyA9IC1sY2ZwIC1sYyAtbHRpbmZvIC1seCIKKworI1NDTyBY RU5JWCAyLjMuNCB3aXRoIFNDTyBUQ1AvSVAgYW5kIGN1cnNlcywgbm8gSUtTRC4KKyMgQnVpbHQg YW5kIHRlc3RlZCBpbiBDLUtlcm1pdCA3LjAuICBUQ1AvSVAgd29ya3MgYW5kIGN1cnNlcyB3b3Jr cy4KKyMgUHJldmlvdXMgdmVyc2lvbnMgb2YgdGhpcyB0YXJnZXQgaW5jbHVkZWQgLWxtYWxsb2Ms IGJ1dCB0aGlzIGNhdXNlZCAiZXJyb3I6CisjICIgX2NhbGxvYyA6IHN5bWJvbCBkZWZpbmVkIG1v cmUgdGhhbiBvbmNlIiBhdCBsaW5rIHRpbWUgc28gSSByZW1vdmVkIGl0LgorIyBSZXN1bHRzIGFy ZSBsaWtlbHkgdG8gdmFyeSBkZXBlbmRpbmcgb24gZXhhY3RseSB3aGljaCB2ZXJzaW9uIG9mIHRo ZSBTREsKKyMgYW5kIFRDUC9JUCBTREsgeW91IGhhdmUuCitzY28yMzRuZXRjOgorCUBlY2hvICdN YWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFNDTyBYRU5JWCAyLjMuNCArIFRDUCArIGN1cnNl cy4uLicKKwkkKE1BS0UpIHdlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZM QUdTPSAtRFNDTzMyIC1EWEVOSVggLUROT0ZJTEVIIC1ESERCVVVDUCAtRFJEQ0hLIC1ETk9MRUFS TiBcCisJLUROQVAgLUROT0pDIC1ETk9DT1RGTUMgLUROT0lLU0QgLUROT1JFRElSRUNUIC1ETk9U TkNPREUgLUROT0dGVElNRVIgXAorCS1ETk9USU1FVkFMIC1ETk9USU1FWk9ORSAtRE5PU1lNTElO SyAtRENLX0NVUlNFUyAtRFNDTzIzNCBcCisJLUREQ0xHRVRDV0QgLURUQ1BTT0NLRVQgLUROT19E TlNfU1JWICQoS0ZMQUdTKSAtT3RjbCIgXAorCSJMTktGTEFHUyA9IC1zIiAiTElCUyA9IC1sdGlu Zm8gLWxzb2NrZXQgLWxjZnAgLWxjIC1seCIKKworIyBTQ08gMy4ydjQueCB0YXJnZXRzLi4uCisK KyMgIE5PVEU6IEFkZCAtRERDTFBPUEVOIGFuZC9vciAtRERDTEZET1BFTiB0byBhbnlTQ08gMy4y djQueCBub24tZ2NjIGVudHJpZXMKKyMgIHRoYXQgY29tcGxhaW4gYWJvdXQgZmRvcGVuKCkgb3Ig cG9wZW4oKSBhdCBjb21waWxlIHRpbWUuICBUaGV5IGNvbXBpbGUgT0sKKyMgIHdpdGhvdXQgdGhl c2UgZmxhZ3MgYXMgb2YgSnVseSAxOTk5LiAgSG93ZXZlciwgdGhlIGdjYyBlbnRyaWVzIHNlZW0g dG8KKyMgIG5lZWQgdGhlbSwgYXQgbGVhc3QgZm9yIGdjYyAyLjcuMi4yLgorCisjICBOT1RFIDI6 IFRvIGVuYWJsZSBJS1NEIHN1cHBvcnQsIGFkZDoKKyMgIC1EQ0tfTE9HSU4gLUROT0dFVFVTRVJT SEVMTCAtRE5PSU5JVEdST1VQUworIyAgdG8gQ0ZMQUdTIChub3QgdGVzdGVkKS4KKworI1NDTyBV TklYLzM4NiAzLjJ2NCAoUE9TSVggam9iIGNvbnRyb2wpLCBjdXJzZXMsIEFOU0kgQyBjb21waWxh dGlvbiwKKyM8ZGlyZW50Lmg+IChFQUZTKSBmaWxlIHN5c3RlbS4gIFJlbW92ZSAtbG1hbGxvYyBp ZiBpdCBjYXVzZXMgdHJvdWJsZS4gIEl0IHdhcworI3B1dCB0aGVyZSB0byBhdm9pZCBjb3JlIGR1 bXBzIGNhdXNlZCBieSByZWd1bGFyIGxpYmMuYSBtYWxsb2MuICBBZGQgLUogdG8gbWFrZQorI2Fs bCBjaGFycyB1bnNpZ25lZC4gIFRoaXMgdmVyc2lvbiB1c2VzIHNlbGVjdCgpIGZvciBDT05ORUNU IGFuZCBhbHNvIGhhcworI2hpZ2gtcHJlY2lzaW9uIHRpbWVycyBhbmQgc28gbWlnaHQgbm90IHdv cmsgb24gbm9uLVRDUCBzeXN0ZW1zLCBpbiB3aGljaCBjYXNlCisjc2NvMzJ2NG5zIHNob3VsZCBi ZSB1c2VkIGluc3RlYWQuCisjIElmIHlvdSBnZXQgX2Z0aW1lIHJlZGVmaW5pdGlvbl8gY29tcGxh aW50LCB0cnkgYWRkaW5nIC1ET0RUMzAgdG8gQ0ZMQUdTLgorc2NvMzJ2NDoKKwlAZWNobyAnTWFr aW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTQ08gVU5JWC8zODYgMy4ydjQuLi4nCisJbWFrZSB4 ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUz0gLURDS19TQ08zMlY0 IC1ETk9GSUxFSCAtREhEQlVVQ1AgLURDS19DVVJTRVMgLURNX1RFUk1JTkZPIFwKKwktRE5PQU5T SSAtRFNFTEVDVCAtRE5PSUtTRCAtRERDTEdFVENXRCAtTk9MU1RBVCBcCisJLUROT0xJTktCSVRT IC1ERENMR0VUQ1dEICQoS0ZMQUdTKSAtTyIgXAorCSJMTktGTEFHUyA9IC1zIiAiTElCUyA9IC1s Y3Vyc2VzIC1sbWFsbG9jIC1sc29ja2V0IC1sY19zIC1sYyAtbHgiCisKKyMgQXMgYWJvdmUsIGJ1 dCB3aXRoIG5vIGRlcGVuZGVuY2Ugb24gc29ja2V0cyBsaWJyYXJ5IG9yIHNlbGVjdCgpLgorc2Nv MzJ2NG5zOgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFNDTyBVTklYLzM4 NiAzLjJ2NC4uLicKKwlAZWNobyAnTm8gc2VsZWN0KCkgYW5kIG5vIHNvY2tldHMgbGlicmFyeS4n CisJbWFrZSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUz0gLURD S19TQ08zMlY0IC1ETk9GSUxFSCAtREhEQlVVQ1AgLURDS19DVVJTRVMgLURNX1RFUk1JTkZPIFwK KwktRE5PQU5TSSAtRE5PSUtTRCAtRE5PR0ZUSU1FUiAtRENLX1BPTEwgLUROQVAgLUREQ0xHRVRD V0QgLUROT0xTVEFUIFwKKwktRE5PTElOS0JJVFMgLUREQ0xHRVRDV0QgLUROT0xFQVJOIC1PICQo S0ZMQUdTKSIgXAorCSJMTktGTEFHUyA9IC1zIiAiTElCUyA9IC1sY3Vyc2VzIC1sbWFsbG9jIC1s Y19zIC1sYyAtbHgiCisKKyNTQ08gVU5JWC8zODYgMy4ydjQgKFBPU0lYIGpvYiBjb250cm9sKSwg VENQL0lQLCBjdXJzZXMsIEFOU0kgQyBjb21waWxhdGlvbiwKKyM8ZGlyZW50Lmg+IChFQUZTKSBm aWxlIHN5c3RlbS4gIFdpdGggRElSRU5ULCAtbGMgbXVzdCBjb21lIGJlZm9yZSAtbHguCisjUmVw b3J0ZWRseSBpdCdzIE9LIHRvIGFkZCAtRENLX1JFRElSIGFuZCAtRENLX1dSRUZSRVNILCBhbmQg dG8gcmVtb3ZlIC1sY19zLgorI1JlcXVpcmVzIFNDTyBUQ1AvSVAgZGV2ZWxvcG1lbnQgc3lzdGVt IG9yIE9EVCBmb3IgdGVsbmV0LmgsIGV0Yy4KKyNTZWUgc2NvMzJ2NCBhYm92ZSBmb3IgYWRkaXRp b25hbCBjb21tZW50cy4KKyNOT1RFOiBObyBtb3JlIHJvb20gZm9yIC1EeHh4IC0tIDI1IHNlZW1z IHRvIGJlIHRoZSBsaW1pdC4gIE1vdmUgc29tZSB0bworI2NrY2RlYi5oIG9yIHNvbWV3aGVyZS4u Lgorc2NvMzJ2NG5ldDoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTQ08g VU5JWC8zODYgMy4ydjQuLi4nCisJQGVjaG8gJ0lmIHlvdSBnZXQgX2Z0aW1lIHJlZGVmaW5pdGlv bl8gY29tcGxhaW50LCcKKwlAZWNobyAndXNlIG1ha2Ugc2NvLW9kdDMwLicKKwkkKE1BS0UpIHhl cm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTPSAtRE5PRklMRUggLURI REJVVUNQIC1EVENQU09DS0VUIC1EQ0tfQU5TSUMgLURDS19DVVJTRVMgXAorCS1ETkFQIC1EQ0tf V1JFRlJFU0ggLUROT0xJTktCSVRTIC1EX0lCQ1MyIC1EU0VMRUNUIC1ETk9MU1RBVCBcCisJLURE Q0xHRVRDV0QgLURDS19TQ08zMlY0IC1ETk9JS1NEIC1PIFwKKwkkKEtGTEFHUykiICJMTktGTEFH UyA9ICQoTE5LRkxBR1MpIC1zIiBcCisJIkxJQlMgPSAkKExJQlMpIC1sY3Vyc2VzIC1sc29ja2V0 IC1sbWFsbG9jIC1sc29ja2V0IC1sY19zIC1sYyAtbHgiCisKKyNTQ08gVU5JWC8zODYgMy4ydjQg d2l0aCBnY2MgMS40MCBvciBsYXRlciwgUE9TSVggam9iIGNvbnRyb2wuCisjQWxzbyBzZWUgY29t bWVudHMgaW4gc2NvMzJyNCBlbnRyeS4KK3NjbzMydjRnY2M6CisJbWFrZSB4ZXJtaXQgS1RBUkdF VD0kJHtLVEFSR0VUOi0kKEApfSAiQ0MgPSBnY2MiIFwKKwkiQ0ZMQUdTPSAtTyAtRE5PRklMRUgg LURIREJVVUNQIC1ETk9BTlNJIC1EQ0tfQ1VSU0VTIC1ETV9URVJNSU5GTyBcCisJLXRyYWRpdGlv bmFsIC1mcGNjLXN0cnVjdC1yZXR1cm4gLWZzdHJlbmd0aC1yZWR1Y2UgLWZ1bnNpZ25lZC1jaGFy IFwKKwktRF9LUiAtRF9OT19QUk9UT1RZUEUgLURfU1ZJRCAtRE5PSUtTRCAtRENLX1NDTzMyVjQg LUROT0xJTktCSVRTIFwKKwktRE1fQklURklFTERTIC1ETV9DT0ZGIC1ETV9JMzg2IC1ETV9JODYg LURNX0k4NlNNIC1EU0VMRUNUIC1ETk9MU1RBVCBcCisJLURNX0lOVEVSTkFUIC1ETV9TREFUQSAt RE1fU1RFWFQgLURNX1NZUzMgLURNX1NZUzUgLUREQ0xHRVRDV0QgXAorCS1ETV9TWVNJSUkgLURN X1NZU1YgLURNX1VOSVggLURNX1dPUkRTV0FQIC1ETV9YRU5JWCAtRHVuaXggXAorCS1ERENMUE9Q RU4gLUREQ0xGRE9QRU4gJChLRkxBR1MpICIgXAorCSJMTktGTEFHUyA9IC1zIiAiTElCUyA9IC1s Y3Vyc2VzIC1sc29ja2V0IC1sY19zIC1sYyAtbHgiCisKKyNTQ08gVU5JWC8zODYgMy4ydjQgKFBP U0lYIGpvYiBjb250cm9sKSwgVENQL0lQLCBjdXJzZXMsIEFOU0kgQyBjb21waWxhdGlvbiwKKyNS ZXF1aXJlcyBTQ08gVENQL0lQIG9yIE9EVCBkZXZlbG9wbWVudCBzeXN0ZW0gZm9yIHRlbG5ldC5o LCBldGMuCisjPGRpcmVudC5oPiAoRUFGUykgZmlsZSBzeXN0ZW0uICBXaXRoIERJUkVOVCwgLWxj IG11c3QgY29tZSBiZWZvcmUgLWx4LgorI2djYyAxLjQwIG9yIGxhdGVyLiAgQWxzbyBzZWUgY29t bWVudHMgaW4gc2NvMzJyNCBlbnRyeS4KK3NjbzMydjRuZXRnY2M6CisJbWFrZSB4ZXJtaXQgS1RB UkdFVD0kJHtLVEFSR0VUOi0kKEApfSAiQ0MgPSBnY2MiICJDQzI9Z2NjIiBcCisJIkNGTEFHUz0g LU8yIC1ETk9GSUxFSCAtREhEQlVVQ1AgLURTRUxFQ1QgLUROT0xTVEFUIFwKKwktRE5PQU5TSSAt RFRDUFNPQ0tFVCAtRENLX0NVUlNFUyAtRE1fVEVSTUlORk8gXAorCS1EX0tSIC1EX05PX1BST1RP VFlQRSAtRF9TVklEIC1ETk9JS1NEIC1EQ0tfU0NPMzJWNCAtRE5PTElOS0JJVFMgXAorCS1ETV9C SVRGSUVMRFMgLURNX0NPRkYgLURNX0kzODYgLURNX0k4NiAtRE1fSTg2U00gLUREQ0xHRVRDV0Qg XAorCS1ETV9JTlRFUk5BVCAtRE1fU0RBVEEgLURNX1NURVhUIC1ETV9TWVMzIC1ETV9TWVM1IFwK KwktRE1fU1lTSUlJIC1ETV9TWVNWIC1ETV9VTklYIC1ETV9XT1JEU1dBUCAtRE1fWEVOSVggLUR1 bml4IFwKKwktRERDTFBPUEVOIC1ERENMRkRPUEVOICQoS0ZMQUdTKSIgXAorCSJMTktGTEFHUyA9 IC1zIiAiTElCUyA9IC1sY3Vyc2VzIC1sc29ja2V0IC1sY19zIC1sYyAtbHgiCisKKyNBcyBhYm92 ZSBidXQgd2l0aCBiZ2NjIEJPVU5EUyBDSEVDS0lORyAoZm9yIGRldmVsb3BlcnMgb25seSkuICAt bGNoZWNrIGhhcworI2JvdW5kcy1jaGVja2luZyByZXBsYWNlbWVudHMgZm9yIG1hbGxvYywgbWVt Y3B5LCBiY29weSwgZXRjLCBzbyBtdXN0IGNvbWUKKyNiZWZvcmUgLWxzb2NrZXQgYW5kIC1sYy4K K3NjbzMydjRuZXRiZ2NjOgorCW1ha2UgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0g XAorCSJDQyA9IGJnY2MgLXBpcGUgLW0zODYiICJDQzI9YmdjYyAtcGlwZSAtbTM4NiIgXAorCSJD RkxBR1M9IC1PMSAtZyAtRE5PRklMRUggLURIREJVVUNQIC1EU0VMRUNUIFwKKwktRE5PQU5TSSAt RFRDUFNPQ0tFVCAtRENLX0NVUlNFUyAtRE1fVEVSTUlORk8gXAorCS1EX0tSIC1EX05PX1BST1RP VFlQRSAtRF9TVklEIC1ETk9JS1NEIC1EQ0tfU0NPMzJWNCAtRE5PTFNUQVQgXAorCS1ETV9CSVRG SUVMRFMgLURNX0NPRkYgLURNX0kzODYgLURNX0k4NiAtRE1fSTg2U00gLUROT0xJTktCSVRTIFwK KwktRE1fSU5URVJOQVQgLURNX1NEQVRBIC1ETV9TVEVYVCAtRE1fU1lTMyAtRE1fU1lTNSAtRERD TEdFVENXRCBcCisJLURNX1NZU0lJSSAtRE1fU1lTViAtRE1fVU5JWCAtRE1fV09SRFNXQVAgLURN X1hFTklYIC1EdW5peCBcCisJLUREQ0xQT1BFTiAtRERDTEZET1BFTiAkKEtGTEFHUykgIiBcCisJ IkxOS0ZMQUdTID0gLWciICJMSUJTID0gLWxjdXJzZXMgLWxjaGVjayAtbHNvY2tldCAtbHgiCisK K3NjbzMydjRuZXRuZDoKKwlAZWNobyBzY28zMnY0bmV0IHdpdGggbm8gZGVidWcKKwkkKE1BS0Up ICJNQUtFPSQoTUFLRSkiIHNjbzMydjRuZXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJ IktGTEFHUz0kKEtGTEFHUykgLUROT0RFQlVHIC1ETk9UTE9HIiAiTElCUz0kKExJQlMpIgorCitz Y28zcjJuZXRuZDoKKwlAZWNobyBzY28zMnY0bmV0bmQgYnVpbHQgZm9yIFNDTyBYRU5JWCAyLjMg dW5kZXIgU0NPIFVOSVguLi4KKwlAZWNobyAgIHJlcXVpcmVzIGNvcHlpbmcgL2xpYi8zODYvU2xp YmMuYSB0byAvbGliLzM4Ni9TbGliY19zLmEgYW5kCisJQGVjaG8gICBnZXR0aW5nIC9saWIvMzg2 L1NsaWJzb2NrZXQuYSBmcm9tIGEgWEVOSVggZGV2a2l0LgorCUBlY2hvICAgV0FSTklORzogcG9s bC9DS19QT0xMIHN1cHBvcnRlZCBvbmx5IG9uIFhFTklYIDIuMy40CisJZWNobyAgICBGb3IgZWFy bGllciBYRU5JWCBzeXN0ZW1zLCByZXBsYWNlIENLX1BPTEwgd2l0aCBSRENISy4KKwkkKE1BS0Up ICJNQUtFPSQoTUFLRSkiIHNjbzMydjRuZXRuZCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwK KwkiS0ZMQUdTPSQoS0ZMQUdTKSAteDIuMyAtRE5PUkVOQU1FIC1ETk9TWU1MSU5LIiBcCisJIkxO S0ZMQUdTID0gJChMTktGTEFHUykgLXgyLjMiIFwKKwkiTElCUz0tbGRpciAtbGNmcCAkKExJQlMp IgorCisjU0NPIFVOSVgvMzg2IDMuMnY0IChQT1NJWCBqb2IgY29udHJvbCksIFRDUC9JUCwgY3Vy c2VzLCBBTlNJIEMgY29tcGlsYXRpb24sCisjPGRpcmVudC5oPiAoRUFGUykgZmlsZSBzeXN0ZW0u ICBXaXRoIERJUkVOVCwgLWxjIG11c3QgY29tZSBiZWZvcmUgLWx4LgorI1JlcG9ydGVkbHkgaXQn cyBPSyB0byBhZGQgLURDS19SRURJUiBhbmQgLURDS19XUkVGUkVTSCwgYW5kIHRvIHJlbW92ZSAt bGNfcy4KKyNSZXF1aXJlcyBTQ08gVENQL0lQIGRldmVsb3BtZW50IHN5c3RlbSBvciBPRFQgZm9y IHRlbG5ldC5oLCBldGMuCisjU2VlIHNjbzMydjQgYWJvdmUgZm9yIGFkZGl0aW9uYWwgY29tbWVu dHMuCisjIE5vdGU6ICJ4ZXJtaXQiIG1lYW5zIHVzZSB0aGUgc2VsZWN0KCkgdmVyc2lvbiBvZiB0 aGUgQ09OTkVDVCBtb2R1bGUuCitzY28zMnY0bmV0eDoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0 ICQoQ0tWRVIpIGZvciBTQ08gVU5JWC8zODYgMy4ydjQuLi4nCisJQGVjaG8gJ0lmIHlvdSBnZXQg X2Z0aW1lIHJlZGVmaW5pdGlvbl8gY29tcGxhaW50LCcKKwlAZWNobyAndXNlIG1ha2Ugc2NvLW9k dDMwLicKKwkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZM QUdTPSAtRE5PRklMRUggLURIREJVVUNQIC1EVENQU09DS0VUIC1EQ0tfQU5TSUMgLURDS19DVVJT RVMgLUROQVAgXAorCS1EQ0tfV1JFRlJFU0ggLUROT0xJTktCSVRTIC1EX0lCQ1MyIC1EU0VMRUNU IC1ERENMR0VUQ1dEIFwKKwktRENLX1NDTzMyVjQgLUROT0lLU0QgLUROT0xTVEFUIC1PICQoS0ZM QUdTKSIgXAorCSJMTktGTEFHUyA9ICQoTE5LRkxBR1MpIC1zIiBcCisJIkxJQlMgPSAkKExJQlMp IC1sY3Vyc2VzIC1sc29ja2V0IC1sbWFsbG9jIC1sc29ja2V0IC1sY19zIC1sYyAtbHgiCisKK3Nj bzMydjRuZXRuZHg6CisJQGVjaG8gc2NvMzJ2NG5ldHggd2l0aCBubyBkZWJ1ZworCSQoTUFLRSkg Ik1BS0U9JChNQUtFKSIgc2NvMzJ2NG5ldHggS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJ IktGTEFHUz0kKEtGTEFHUykgLUROT0RFQlVHIC1ETk9UTE9HIiAiTElCUz0kKExJQlMpIgorCitz Y28zcjJuZXRuZHg6CisJQGVjaG8gc2NvMzJ2NG5ldG5keCBidWlsdCBmb3IgU0NPIFhFTklYIDIu MyB1bmRlciBTQ08gVU5JWC4uLgorCUBlY2hvICAgcmVxdWlyZXMgY29weWluZyAvbGliLzM4Ni9T bGliYy5hIHRvIC9saWIvMzg2L1NsaWJjX3MuYSBhbmQKKwlAZWNobyAgIGdldHRpbmcgL2xpYi8z ODYvU2xpYnNvY2tldC5hIGZyb20gYSBYRU5JWCBkZXZraXQuCisJQGVjaG8gICBXQVJOSU5HOiBw b2xsL0NLX1BPTEwgc3VwcG9ydGVkIG9ubHkgb24gWEVOSVggMi4zLjQKKwllY2hvICAgIEZvciBl YXJsaWVyIFhFTklYIHN5c3RlbXMsIHJlcGxhY2UgQ0tfUE9MTCB3aXRoIFJEQ0hLLgorCSQoTUFL RSkgIk1BS0U9JChNQUtFKSIgc2NvMzJ2NG5ldG5keCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9 IFwKKwkiS0ZMQUdTPSQoS0ZMQUdTKSAteDIuMyAtRE5PUkVOQU1FIC1ETk9TWU1MSU5LIiBcCisJ IkxOS0ZMQUdTID0gJChMTktGTEFHUykgLXgyLjMiIFwKKwkiTElCUz0tbGRpciAtbGNmcCAkKExJ QlMpIgorCitzY28tb2R0MzA6CisJQGVjaG8gU0NPIE9EVCAzLjAKKwkkKE1BS0UpICJNQUtFPSQo TUFLRSkiIHNjbzMydjRuZXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIktGTEFHUz0k KEtGTEFHUykgLURPRFQzMCIKKworI1NDTyBPcGVuU2VydmVyIDUuMCAoU0NPIFVOSVggMy4ydjUu MCkgd2l0aCBTQ08gZGV2ZWxvcG1lbnQgdG9vbHMsIG5vIFRDUC9JUC4KKyNTQ08gT1NSNSBpcyBt dWNoIG1vcmUgbGlrZSBzdGFuZGFyZCBTeXN0ZW0gViB0aGFuIHByZXZpb3VzIFNDTyByZWxlYXNl cy4KKyNUaGUgU0NPIGRldmVsb3BtZW50IHRvb2xzIGluY2x1ZGUgVENQL0lQLCBzbyB0aGlzIHRh cmdldCBpcyBvbmx5IGZvciBjcmVhdGluZworI2FydGlmaWNpYWxseSBsaW1pdGVkIHZlcnNpb25z IG9mIGtlcm1pdCByZXF1aXJlZCBieSBzaXRlIHBvbGljeSByYXRoZXIgdGhhbgorI3RoZSBvcGVy YXRpbmcgc3lzdGVtLiAgTk9TWVNMT0cgaXMgaW5jbHVkZWQgYmVjYXVzZSBzeXNsb2coKSByZXF1 aXJlcyB0aGUKKyNzb2NrZXRzIGxpYnJhcnkuCitzY28zMnY1MDA6CisJQGVjaG8gTWFraW5nIEMt S2VybWl0ICQoQ0tWRVIpIGZvciBTQ08gT3BlblNlcnZlciBSZWxlYXNlIDUuLi4KKwkkKE1BS0Up IHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTPSAtTyAtRERJUkVO VCAtREhEQlVVQ1AgLURTVlI0IC1EQ0tfU0NPVjUgLURDS19SVFNDVFMgXAorCS1EQ0tfQ1VSU0VT IC1EQ0tfV1JFRlJFU0ggLURDS19ORVdURVJNIC1EU0VMRUNUIC1EU0VMRUNUX0ggXAorCS1ETk9H RVRVU0VSU0hFTEwgLUROT0xTVEFUIC1ETk9MSU5LQklUUyAtRE5PU1lTTE9HIFwKKwkkKEtGTEFH UykiIFwKKwkiTElCUz0tbGN1cnNlcyAkKExJQlMpIiAiTE5LRkxBR1M9JChMTktGTEFHUykiCisK K3NjbzMydjU6CisJJChNQUtFKSAiTUFLRT0kKE1BS0UpIiAiS0ZMQUdTPSQoS0ZMQUdTKSIgc2Nv MzJ2NTAwCisKKworI1NDTyBPcGVuU2VydmVyIDUuMCB3aXRoIG5ldHdvcmtpbmcsIFNDTyBkZXZl bG9wbWVudCB0b29scy4KKyNOZXR3b3JraW5nIGxpYnJhcmllcyBhcmUgbm93IHByb3ZpZGVkIHdp dGggdGhlIE9TLgorc2NvMzJ2NTAwbmV0OgorCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVS KSBmb3IgU0NPIE9wZW5TZXJ2ZXIgUmVsZWFzZSA1Li4uCisJJChNQUtFKSB4ZXJtaXQgS1RBUkdF VD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUz0gLU8gLURESVJFTlQgLURIREJVVUNQIC1E U1ZSNCAtRENLX1NDT1Y1IC1EQ0tfUlRTQ1RTIFwKKwktRENLX0NVUlNFUyAtRENLX1dSRUZSRVNI IC1EQ0tfTkVXVEVSTSAtRFNFTEVDVCAtRFNFTEVDVF9IIFwKKwktRE5PR0VUVVNFUlNIRUxMIC1E Tk9MU1RBVCAtRE5PTElOS0JJVFMgLURUQ1BTT0NLRVQgXAorCS1ETk9fRE5TX1NSViAkKEtGTEFH UykiIFwKKwkiTElCUz0tbGN1cnNlcyAtbHNvY2tldCAkKExJQlMpIiAiTE5LRkxBR1M9JChMTktG TEFHUykiCisKK3NjbzMydjVuZXQ6CisJJChNQUtFKSAiTUFLRT0kKE1BS0UpIiAiS0ZMQUdTPSQo S0ZMQUdTKSIgc2NvMzJ2NTAwbmV0CisKKyNTQ08gT3BlblNlcnZlciA1LjAgd2l0aCBuZXR3b3Jr aW5nIGFuZCBPcGVuU1NMLCBTQ08gZGV2ZWxvcG1lbnQgdG9vbHMuCisjTmV0d29ya2luZyBsaWJy YXJpZXMgYXJlIG5vdyBwcm92aWRlZCB3aXRoIHRoZSBPUy4KK3NjbzMydjUwMG5ldCtzc2w6CisJ QGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTQ08gT1NSNSB3aXRoIE9wZW5TU0wu Li4KKwkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdT PSAtTyAtRERJUkVOVCAtREhEQlVVQ1AgLURTVlI0IC1EQ0tfU0NPVjUgLURDS19SVFNDVFMgXAor CS1EQ0tfQ1VSU0VTIC1EQ0tfV1JFRlJFU0ggLURDS19ORVdURVJNIC1EU0VMRUNUIC1EU0VMRUNU X0ggXAorCS1ETk9HRVRVU0VSU0hFTEwgLUROT0xTVEFUIC1ETk9MSU5LQklUUyAtRFRDUFNPQ0tF VCBcCisJLUROT19ETlNfU1JWIC1EQ0tfQVVUSEVOVElDQVRJT04gLURDS19TU0wgLURDS19UUklH R0VSIFwKKwkkKFNTTElOQykgJChTU0xMSUIpICQoS0ZMQUdTKSIgXAorCSJMSUJTPSQoU1NMTElC KSAtbGN1cnNlcyAtbHNvY2tldCAtbHNzbCAtbGNyeXB0byAkKExJQlMpIiBcCisJIkxOS0ZMQUdT PSQoTE5LRkxBR1MpIgorCisjU0NPIE9wZW5TZXJ2ZXIgNS4wIHdpdGggZ2NjLCBubyBuZXR3b3Jr aW5nLgorI05vdGU6IE5PU1lTTE9HIHJlcXVpcmVkIGZvciBub24tbmV0IGVudHJpZXMgYmVjYXVz ZSBpdCByZXF1aXJlcyA8c29ja2V0Lmg+CitzY28zMnY1MDBnY2M6CisJQGVjaG8gVXNpbmcgZ2Nj Li4uCisJJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBzY28zMnY1MDBDQz1nY2MgQ0MyPWdjYyBcCisJ S1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSAiS0ZMQUdTPSAkKEtGTEFHUykiCisKKyNTQ08gT3Bl blNlcnZlciA1LjAgd2l0aCBuZXR3b3JraW5nLCBnY2MuCitzY28zMnY1MDBuZXRnY2M6CisJQGVj aG8gVENQL0lQIG5ldHdvcmtpbmcgYWRkZWQgLSB1c2luZyBnY2MuLi4KKwkkKE1BS0UpICJNQUtF PSQoTUFLRSkiIHNjbzMydjUwMG5ldCBDQz1nY2MgQ0MyPWdjYyBcCisJS1RBUkdFVD0kJHtLVEFS R0VUOi0kKEApfSAiS0ZMQUdTPSQoS0ZMQUdTKSIKKworI1NDTyBPcGVuU2VydmVyIDUuMCB3aXRo IG5ldHdvcmtpbmcsIGdjYywgZWxmLgorc2NvMzJ2NTAwbmV0Z2NjZWxmOgorCUBlY2hvIFRDUC9J UCBuZXR3b3JraW5nIGFkZGVkIC0gdXNpbmcgZ2NjLCBkeW5hbWljIGVsZiBsaWJyYXJ5CisJJChN QUtFKSAiTUFLRT0kKE1BS0UpIiBzY28zMnY1MDBuZXQgIkNDPWdjYyIgIkNDMj1nY2MiIFwKKwlL VEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9ICJLRkxBR1M9LU8zIC1iZWxmIiAiTE5LRkxBR1M9LWJl bGYiCisKK3NjbzMydjUwMjoKKwkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIHNjbzMydjUwMCBLVEFS R0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiS0ZMQUdTPS1EU0NPX09TUjUwMiAkKEtGTEFHUyki CisKKyNTQ08gT3BlblNlcnZlciA1LjAuMiB3aXRoIG5ldHdvcmtpbmcsIFNDTyBkZXZlbG9wbWVu dCB0b29scy4KK3NjbzMydjUwMm5ldDoKKwlAZWNobyBUQ1AvSVAgbmV0d29ya2luZyBhZGRlZC4u LgorCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgc2NvMzJ2NTAwbmV0IEtUQVJHRVQ9JCR7S1RBUkdF VDotJChAKX0gXAorCSJLRkxBR1M9LWIgZWxmIC1EU0NPX09TUjUwMiAkKEtGTEFHUykiCisKKyNT Q08gT3BlblNlcnZlciA1LjAuNCAoU0NPIFVOSVggMy4ydjUuMC40KSB3aXRoIFNDTyBkZXZlbG9w bWVudCB0b29scy4KKyNMaWtlIDUuMCwgYnV0IGFkZHMgaGlnaCBzZXJpYWwgc3BlZWRzLiAgRmly c3QgUE9TSVgtYmFzZWQgU0NPIHZlcnNpb24uCisjTm90ZTogdGhlIC1PIGZsYWcgaXMgZGVsaWJl cmF0ZWx5IG9taXR0ZWQgZm9yIC9iaW4vY2MgKD0gL3Vzci9jY3MvYmluL2NjKS4KK3NjbzMydjUw NDoKKwlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFNDTyBPcGVuU2VydmVyIFJl bGVhc2UgNS4wLjQuLi4KKwkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9 IFwKKwkiQ0ZMQUdTPSAtRERJUkVOVCAtREhEQlVVQ1AgLURTVlI0IC1EQ0tfU0NPVjUgLURDS19S VFNDVFMgXAorCS1EU0NPX09TUjUwNCAtYiBlbGYgLURQT1NJWCBcCisJLURDS19DVVJTRVMgLURD S19XUkVGUkVTSCAtRENLX05FV1RFUk0gLURTRUxFQ1QgLURTRUxFQ1RfSCBcCisJLUROT0dFVFVT RVJTSEVMTCAtRE5PTFNUQVQgLUROT0xJTktCSVRTIC1ETk9TWVNMT0cgJChLRkxBR1MpIiBcCisJ IkxJQlM9LWxjdXJzZXMgJChMSUJTKSIgIkxOS0ZMQUdTPSQoTE5LRkxBR1MpIgorCisjU0NPIE9w ZW5TZXJ2ZXIgNS4wLjQgd2l0aCBnY2MsIG5vIG5ldHdvcmtpbmcuCitzY28zMnY1MDRnY2M6CisJ QGVjaG8gVXNpbmcgZ2NjLi4uCisJJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBzY28zMnY1MDQgIkND PWdjYyIgIkNDMj1nY2MiIFwKKwlLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9ICJLRkxBR1M9ICQo S0ZMQUdTKSIKKworI1NDTyBPcGVuU2VydmVyIDUuMC40IHdpdGggbmV0d29ya2luZy4KKyNTQ08g ZGV2ZWxvcG1lbnQgdG9vbHMgKC9iaW4vY2MgPSAvdXNyL2Njcy9iaW4vY2MpLgorI09wdGltaXph dGlvbiBkZWxpYmVyYXRlbHkgc3VwcHJlc3NlZC4KK3NjbzMydjUwNG5ldDoKKwlAZWNobyBNYWtp bmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFNDTyBPcGVuU2VydmVyIFJlbGVhc2UgNS4wLjQuLi4K KwkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTPSAt RERJUkVOVCAtREhEQlVVQ1AgLURTVlI0IC1EQ0tfU0NPVjUgLURDS19SVFNDVFMgXAorCS1EQ0tf Q1VSU0VTIC1EQ0tfV1JFRlJFU0ggLURDS19ORVdURVJNIC1EU0VMRUNUIC1EU0VMRUNUX0ggXAor CS1ETk9HRVRVU0VSU0hFTEwgLUROT0xTVEFUIC1ETk9MSU5LQklUUyAtRFRDUFNPQ0tFVCBcCisJ LWIgZWxmIC1EU0NPX09TUjUwNCAtRFBPU0lYIC1ETk9fRE5TX1NSViAkKEtGTEFHUykiIFwKKwki TElCUz0tbGN1cnNlcyAtbHNvY2tldCAkKExJQlMpIiAiTE5LRkxBR1M9JChMTktGTEFHUykiCisK KyNTQ08gT3BlblNlcnZlciA1LjAuNCB3aXRoIG5ldHdvcmtpbmcsIGdjYy4KK3NjbzMydjUwNG5l dGdjYzoKKwlAZWNobyBUQ1AvSVAgbmV0d29ya2luZyBhZGRlZCAtIHVzaW5nIGdjYy4uLgorCUBl Y2hvIElmIGdjYyBjcmFzaGVzIG9uIGNrd2FydC5jIHRoZW4gYnVpbGQgaXQgYnkgaGFuZDoKKwlA ZWNobyAiIGdjYyAtbyB3YXJ0IC1EQ0tfU0NPVjUgY2t3YXJ0LmMiCisJJChNQUtFKSAiTUFLRT0k KE1BS0UpIiBzY28zMnY1MDBuZXQgIkNDPWdjYyIgIkNDMj1nY2MiIFwKKwlLVEFSR0VUPSQke0tU QVJHRVQ6LSQoQCl9ICJLRkxBR1M9LURTQ09fT1NSNTA0IC1EUE9TSVggJChLRkxBR1MpIgorCisj U0NPIE9wZW5TZXJ2ZXIgNS4wLjQgd2l0aCBuZXR3b3JraW5nLCBnY2MsIGVsZi4KK3NjbzMydjUw NG5ldGdjY2VsZjoKKwlAZWNobyBUQ1AvSVAgbmV0d29ya2luZyBhZGRlZCAtIHVzaW5nIGdjYywg ZHluYW1pYyBlbGYgbGlicmFyeQorCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgc2NvMzJ2NTAwbmV0 ICJDQz1nY2MiICJDQzI9Z2NjIgorCUtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJLRkxB R1M9LURTQ09fT1NSNTA0IC1EUE9TSVggLU8zIC1iZWxmICQoS0ZMQUdTKSIgXAorCUxOS0ZMQUdT PSItYmVsZiIKKworI1NDTyBPcGVuU2VydmVyIDUuMC41IChTQ08gVU5JWCAzLjJ2NS4wLjUpIHdp dGggU0NPIC9iaW4vY2MuCisjTGlrZSA1LjAsIGJ1dCBhZGRzIGhpZ2ggc2VyaWFsIHNwZWVkcy4g IEZpcnN0IFBPU0lYLWJhc2VkIFNDTyB2ZXJzaW9uLgorI1lvdSBtaWdodCBoYXZlIHRvIGFkZCAi TElCUz0tbHRpbmZvIiAoc29tZSBkbywgc29tZSBkb24ndCkuCitzY28zMnY1MDU6CisJJChNQUtF KSAiTUFLRT0kKE1BS0UpIiBzY28zMnY1MDAgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJ IktGTEFHUz0tRFNDT19PU1I1MDUgLUROT1NIQURPVyAtYiBlbGYgLURQT1NJWCAkKEtGTEFHUyki CisKKyNTQ08gT3BlblNlcnZlciA1LjAuNSAoU0NPIFVOSVggMy4ydjUuMC41KSB3aXRoIFNDTyBV REsuCisjVGhpcyBvbmUgY2FuJ3Qgc2VlIHRoZSBoaWdoIHNlcmlhbCBzcGVlZHMgYW5kIGFueXRo aW5nIHRvIGRvIHdpdGggbW9kZW0KKyNzaWduYWxzIGRvZXNuJ3Qgd29yayBiZWNhdXNlIFVLRCBj YyBoYXMgaXRzIG93biBhbHRlcm5hdGl2ZSB1bml2ZXJzZSBvZgorI2hlYWRlciBmaWxlcy4KK3Nj bzMydjUwNXVkazoKKwkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIHNjbzMydjUwMCBLVEFSR0VUPSQk e0tUQVJHRVQ6LSQoQCl9IFwKKwkiS0ZMQUdTPS1EU0NPX09TUjUwNSAtRERDTFRJTUVWQUwgLURO T1NIQURPVyAtYiBlbGYgLURQT1NJWCAkKEtGTEFHUykiCisKKyNTQ08gT3BlblNlcnZlciA1LjAu NSB3aXRoIG5ldHdvcmtpbmcsIFNDTyAvYmluL2NjLgorI1NlZSBjb21tZW50cyB3aXRoIHNjbzMy djUwNSB0YXJnZXRzLgorc2NvMzJ2NTA1bmV0OgorCUBlY2hvIFRDUC9JUCBuZXR3b3JraW5nIGFk ZGVkLi4uCisJJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBzY28zMnY1MDBuZXQgS1RBUkdFVD0kJHtL VEFSR0VUOi0kKEApfSBcCisJIktGTEFHUz0tRFNDT19PU1I1MDUgLUROT1NIQURPVyAtYiBlbGYg LURQT1NJWCAkKEtGTEFHUykiCisKKyNTQ08gT3BlblNlcnZlciA1LjAuNSB3aXRoIG5ldHdvcmtp bmcgYW5kIE9wZW5TU0wsIFNDTyAvYmluL2NjLgorI1NlZSBjb21tZW50cyB3aXRoIHNjbzMydjUw NSB0YXJnZXRzLgorc2NvMzJ2NTA1bmV0K3NzbDoKKwlAZWNobyBUQ1AvSVAgbmV0d29ya2luZyBh bmQgT3BlblNTTCBhZGRlZC4uLgorCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgc2NvMzJ2NTAwbmV0 K3NzbCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiS0ZMQUdTPS1EU0NPX09TUjUwNSAt RE5PU0hBRE9XIC1iIGVsZiAtRFBPU0lYICQoS0ZMQUdTKSAiIFwKKwkiTElCUz0kKFNTTExJQikg LWxjdXJzZXMgLWxzb2NrZXQgLWxzc2wgLWxjcnlwdG8gJChMSUJTKSIgXAorCSJMTktGTEFHUz0k KExOS0ZMQUdTKSIKKworI1NDTyBPcGVuU2VydmVyIDUuMC41IHdpdGggbmV0d29ya2luZywgU0NP IFVESy4KKyNTZWUgY29tbWVudHMgd2l0aCBhYm92ZSBzY28zMnY1MDUgdGFyZ2V0cy4KK3NjbzMy djUwNXVka25ldDoKKwlAZWNobyBUQ1AvSVAgbmV0d29ya2luZyBhZGRlZC4uLgorCSQoTUFLRSkg Ik1BS0U9JChNQUtFKSIgc2NvMzJ2NTAwbmV0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAor CSJLRkxBR1M9LURTQ09fT1NSNTA1IC1ERENMVElNRVZBTCAtRE5PU0hBRE9XIC1iIGVsZiAtRFBP U0lYICQoS0ZMQUdTKSIKKworI1NDTyBPcGVuU2VydmVyIDUuMC41IHdpdGggZ2NjLCBubyBuZXR3 b3JraW5nLgorc2NvMzJ2NTA1Z2NjOgorCUBlY2hvIFVzaW5nIGdjYy4uLgorCSQoTUFLRSkgIk1B S0U9JChNQUtFKSIgc2NvMzJ2NTAwICJDQz1nY2MiICJDQzI9Z2NjIiBcCisJS1RBUkdFVD0kJHtL VEFSR0VUOi0kKEApfSBcCisJIktGTEFHUz0tRFNDT19PU1I1MDUgLURQT1NJWCAtZnVuc2lnbmVk LWNoYXIgJChLRkxBR1MpIgorCisjU0NPIE9wZW5TZXJ2ZXIgNS4wLjUgd2l0aCBnY2MsIG5vIG5l dHdvcmtpbmcsIG5vIHNoYWRvdyBwYXNzd29yZHMuCitzY28zMnY1MDV4Z2NjOgorCUBlY2hvIFVz aW5nIGdjYy4uLgorCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgc2NvMzJ2NTAwICJDQz1nY2MiICJD QzI9Z2NjIiBcCisJS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIktGTEFHUz0tRFNDT19P U1I1MDUgLUROT1NIQURPVyAtRFBPU0lYIC1mdW5zaWduZWQtY2hhciAkKEtGTEFHUykiCisKKyNT Q08gT3BlblNlcnZlciA1LjAuNSB3aXRoIG5ldHdvcmtpbmcsIGdjYy4KK3NjbzMydjUwNW5ldGdj YzoKKwlAZWNobyBUQ1AvSVAgbmV0d29ya2luZyBhZGRlZCAtIHVzaW5nIGdjYy4uLgorCUBlY2hv IElmIGdjYyBjcmFzaGVzIG9uIGNrd2FydC5jIHRoZW4gYnVpbGQgaXQgYnkgaGFuZDoKKwlAZWNo byAiIGdjYyAtbyB3YXJ0IC1EQ0tfU0NPVjUgY2t3YXJ0LmMiCisJJChNQUtFKSAiTUFLRT0kKE1B S0UpIiBzY28zMnY1MDBuZXQgIkNDPWdjYyIgIkNDMj1nY2MiIFwKKwlLVEFSR0VUPSQke0tUQVJH RVQ6LSQoQCl9IFwKKwkiS0ZMQUdTPS1EU0NPX09TUjUwNSAtRE5PU0hBRE9XIC1EUE9TSVggLWZ1 bnNpZ25lZC1jaGFyICQoS0ZMQUdTKSIKKworI2VnY3MgaXMganVzdCBsaWtlIGdjYyBidXQgZ2Vu ZXJhdGVzIEVMRiBieSBkZWZhdWx0LgorI09yIHlvdSBjYW4gaW5jbHVkZSAtbWVsZiAobm90IC1i ZWxmKSB0byBmb3JjZSBpdC4KK3NjbzMydjUwNW5ldGVnY3M6CisJJChNQUtFKSAiTUFLRT0kKE1B S0UpIiAiS0ZMQUdTPSQoS0ZMQUdTKSIgc2NvMzJ2NTA1bmV0Z2NjIFwKKwlLVEFSR0VUPSQke0tU QVJHRVQ6LSQoQCl9CisKKyNTQ08gT3BlblNlcnZlciA1LjAuNSB3aXRoIG5ldHdvcmtpbmcsIGdj YywgZWxmLgorc2NvMzJ2NTA1bmV0Z2NjZWxmOgorCUBlY2hvIFRDUC9JUCBuZXR3b3JraW5nIGFk ZGVkIC0gdXNpbmcgZ2NjLCBkeW5hbWljIGVsZiBsaWJyYXJ5CisJJChNQUtFKSAiTUFLRT0kKE1B S0UpIiBzY28zMnY1MDBuZXQgIkNDPWdjYyIgIkNDMj1nY2MiIFwKKwkiS0ZMQUdTPS1EU0NPX09T UjUwNSAtRFBPU0lYIC1mdW5zaWduZWQtY2hhciAtTzMgLWJlbGYgJChLRkxBR1MpIiBcCisJS1RB UkdFVD0kJHtLVEFSR0VUOi0kKEApfSBMTktGTEFHUz0iLWJlbGYiCisKKyNTQ08gT3BlblNlcnZl ciA1LjAuNiB3aXRoIFNDTyAvYmluL2NjLgorIyBBZGQgLUREQ0xUSU1FVkFMIHdoZW4gYnVpbGRp bmcgd2l0aCBVREsuCisjTGlrZSA1LjAuNS4gICBJTVBPUlRBTlQ6IFVzZSBzY28zMnY1MDZhIHRh cmdldCBmb3IgNS4wLjZhLgorc2NvMzJ2NTA2OgorCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgc2Nv MzJ2NTAwIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJLRkxBR1M9LURTQ09fT1NSNTA1 IC1EU0NPX09TUjUwNiAtYiBlbGYgLURQT1NJWCAkKEtGTEFHUykiCisKKyNTQ08gT3BlblNlcnZl ciA1LjAuNiB3aXRoIG5ldHdvcmtpbmcsIFNDTyAvYmluL2NjLgorIyBBZGQgLUREQ0xUSU1FVkFM IHdoZW4gYnVpbGRpbmcgd2l0aCBVREsuCisjIElNUE9SVEFOVDogVXNlIHNjbzMydjUwNmEgdGFy Z2V0IGZvciA1LjAuNmEuCitzY28zMnY1MDZuZXQ6CisJQGVjaG8gVENQL0lQIG5ldHdvcmtpbmcg YWRkZWQuLi4KKwkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIHNjbzMydjUwMG5ldCBLVEFSR0VUPSQk e0tUQVJHRVQ6LSQoQCl9IFwKKwkiS0ZMQUdTPS1EU0NPX09TUjUwNSAtRFNDT19PU1I1MDYgLWIg ZWxmIC1EUE9TSVggJChLRkxBR1MpIgorCisjU0NPIE9wZW5TZXJ2ZXIgNS4wLjZhLCBubyBuZXR3 b3JraW5nLCBTQ08gZGV2ZWxvcG1lbnQgdG9vbHMuCisjVGhpcyBvbmUgaGFzIHBhdGNoZWQgc2lv IGRyaXZlcnMgdGhhdCwgZm9yIHRoZSBmaXJzdCB0aW1lLAorI2FjdHVhbGx5IGhhbmRsZSBtb2Rl bSBzaWduYWxzIGNvcnJlY3RseS4KKyMgQWRkIC1ERENMVElNRVZBTCB3aGVuIGJ1aWxkaW5nIHdp dGggVURLLgorc2NvMzJ2NTA2YToKKwkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIHNjbzMydjUwMCBL VEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiS0ZMQUdTPS1EU0NPX09TUjUwNSAtRFNDT19P U1I1MDYgLURTQ09fT1NSNTA2QSAtRE5FRURNRE1ERUZTIFwKKwktYiBlbGYgLURQT1NJWCAkKEtG TEFHUykiCisKKyNTQ08gT3BlblNlcnZlciA1LjAuNmEgd2l0aCBuZXR3b3JraW5nLCBTQ08gZGV2 ZWxvcG1lbnQgdG9vbHMuCisjIEFkZCAtRERDTFRJTUVWQUwgd2hlbiBidWlsZGluZyB3aXRoIFVE Sy4KK3NjbzMydjUwNmFuZXQ6CisJQGVjaG8gVENQL0lQIG5ldHdvcmtpbmcgYWRkZWQuLi4KKwkk KE1BS0UpICJNQUtFPSQoTUFLRSkiIHNjbzMydjUwMG5ldCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQo QCl9IFwKKwkiS0ZMQUdTPS1EU0NPX09TUjUwNSAtRFNDT19PU1I1MDYgLURTQ09fT1NSNTA2QSAt RE5FRURNRE1ERUZTIFwKKwktYiBlbGYgLURQT1NJWCAkKEtGTEFHUykiCisKKyNTQ08gT3BlblNl cnZlciA1LjAuNywgbm8gbmV0d29ya2luZywgU0NPIGRldmVsb3BtZW50IHRvb2xzLgorI0FkZHMg ZmxhZ3MgdG8gbWFrZSBQVFkgYW5kIFNTSCBjb21tYW5kcyB3b3JrLiAgVGhlc2UgaGF2ZSBiZWVu IHRlc3RlZAorI29ubHkgaW4gNS4wLjcgYnV0IHByb2JhYmx5IHRoZXkgY2FuIGFsc28gYmUgYWRk ZWQgdG8gZWFybGllciBPU1I1IHRhcmdldHMuCitzY28zMnY1MDc6CisJJChNQUtFKSAiTUFLRT0k KE1BS0UpIiBzY28zMnY1MDAgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIktGTEFHUz0t RFNDT19PU1I1MDUgLURTQ09fT1NSNTA2IC1EU0NPX09TUjUwNyAtRE5FRURNRE1ERUZTIFwKKwkt REhBVkVfUFRTTkFNRSAtREhBVkVfUFRNWCAtREhBVkVfR1JBTlRQVCBcCisJLWIgZWxmIC1EUE9T SVggJChLRkxBR1MpIgorCisjU0NPIE9wZW5TZXJ2ZXIgNS4wLjcgYXMgYWJvdmUgYnV0IHdpdGgg bmV0d29ya2luZy4KK3NjbzMydjUwN25ldDoKKwlAZWNobyBUQ1AvSVAgbmV0d29ya2luZyBhZGRl ZC4uLgorCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgc2NvMzJ2NTAwbmV0IEtUQVJHRVQ9JCR7S1RB UkdFVDotJChAKX0gXAorCSJLRkxBR1M9LURTQ09fT1NSNTA1IC1EU0NPX09TUjUwNiAtRFNDT19P U1I1MDcgLURORUVETURNREVGUyBcCisJLURIQVZFX1BUU05BTUUgLURIQVZFX1BUTVggLURIQVZF X0dSQU5UUFQgXAorCS1iIGVsZiAtRFBPU0lYICQoS0ZMQUdTKSIKKworI1NDTyBPcGVuU2VydmVy IDYgKG5ldyB0YXJnZXQgMzAgSmFuIDIwMDYpCitzY29fb3NyNjAwIHNjbzYwMDoKKwlAZWNobyBN YWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFNDTyBPcGVuU2VydmVyIDYuMC4wLi4uCisJJChN QUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUz0gLU8gLURE SVJFTlQgLURIREJVVUNQIC1EU1ZSNCAtRENLX1NDT1Y1IC1EQ0tfUlRTQ1RTIFwKKwktRENLX0NV UlNFUyAtRENLX1dSRUZSRVNIIC1EQ0tfTkVXVEVSTSAtRFNFTEVDVCAtRFNFTEVDVF9IIFwKKwkt RE5PR0VUVVNFUlNIRUxMIC1ETk9MU1RBVCAtRE5PTElOS0JJVFMgLURUQ1BTT0NLRVQgXAorCS1E Tk9fRE5TX1NSViAtRFNDT19PU1I1MDUgLURTQ09fT1NSNTA2IC1EU0NPX09TUjUwNyAtRE5FRURN RE1ERUZTIFwKKwktREhBVkVfUFRTTkFNRSAtREhBVkVfUFRNWCAtREhBVkVfR1JBTlRQVCAtRERD TFRJTUVWQUwgXAorCS1EX0xBUkdFRklMRV9TT1VSQ0UgLURfRklMRV9PRkZTRVRfQklUUz02NCBc CisJLURTT0NLT1BUX1Q9c29ja2xlbl90IC1ER1NPQ0tOQU1FX1Q9c2l6ZV90IC1ER1BFRVJOQU1F X1Q9c2l6ZV90IFwKKwktREhFUkFMRD1cIlxcXCIgU0NPIE9wZW5TZXJ2ZXIgYHVuYW1lIC12YFxc XCJcIiBcCisJLWIgZWxmIC1EUE9TSVggJChLRkxBR1MpIiBcCisJIkxJQlM9LWxjdXJzZXMgLWxz b2NrZXQgJChMSUJTKSIgIkxOS0ZMQUdTPSQoTE5LRkxBR1MpIgorCisjVGFuZHkgMTYvNjAwMCB3 aXRoIFhlbml4IDMuMCAoMTYgYml0cykKKyNDLUtlcm1pdCA3LjAgKGFuZCBsYXRlcikgZG8gbm90 IGJ1aWxkIGhlcmU7ICJ0b28gbWFueSBkZWZpbmVzIi4KKyNBZGQgbW9yZSAtRE5PeHh4IG9wdGlv bnMgdG8gcmVtb3ZlIGZlYXR1cmVzIGlmIHByb2dyYW0gd29uJ3QgbG9hZC4KKyNTdWNjZXNzZnVs IG9wZXJhdGlvbiBpcyBhIGZ1bmN0aW9uIG9mIHByb2dyYW0gc2l6ZSwgcGh5c2ljYWwgbWVtb3J5 LAorI2F2YWlsYWJsZSBzd2FwIHNwYWNlLCBldGMuICBUaGUgZm9sbG93aW5nIHN0cmlwcGVkLWRv d24gY29uZmlndXJhdGlvbgorI3NlZW1zIHRvIHdvcmsgb24gbW9zdCBUYW5keSA2MDAwcy4gIE5P VEU6ICItKyIgbWVhbnMgYWxsb3cgbG9uZyB2YXJpYWJsZQorI25hbWVzLCBuZWVkZWQgZm9yIEMt S2VybWl0IDYuMCBiZWNhdXNlIHNvbWUgaWRlbnRpZmllcnMgYXJlIG5vdCB1bmlxdWUKKyN3aXRo aW4gdGhlIGZpcnN0IHNpeCBjaGFyYWN0ZXJzLgordHJzMTY6CisJQGVjaG8gJ01ha2luZyBDLUtl cm1pdCAkKENLVkVSKSBmb3IgVGFuZHkgMTYvNjAwMCwgWGVuaXggMy4wLi4uJworCSQoTUFLRSkg d2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1MgPSAtKyAtREFUVFNW IC1EVFJTMTYgLUROT01LRElSIC1ERENMUE9QRU4gLURDS19DVVJTRVMgXAorCS1ETk9ERUJVRyAt RE5PVExPRyAtRE5PSEVMUCAtRE5PU0NSSVBUIC1ETk9DU0VUUyAtRE5PSUtTRCBcCisJLUROT1JF RElSRUNUIC1ETk9TWVNMT0cgLUROT1BVVEVOViAtRE5PUkVBTFBBVEggLUROT0xFQVJOIFwKKwkk KEtGTEFHUykgLU8iICJMSUJTPSAtbGN1cnNlcyAtbHRlcm1jYXAiICJMTktGTEFHUyA9IC0rIC1u IC1zIgorCisjIFFOWCA0LjIxIGFuZCBhYm92ZSwgMzItYml0IHZlcnNpb24sIFdhdGNvbSBDMzIg MTAuNiwgZnVsbHkgY29uZmlndXJlZCwKKyMgZXhjZXB0IG5vIGpvYiBjb250cm9sIGJlY2F1c2Ug UU5YIDQueCBkb2VzIG5vdCBzdXBwb3J0IGl0LiAgTmV3IE5DVVJTRVMKKyMgbGlicmFyeSB1c2Vk IGluc3RlYWQgb2YgQ1VSU0VTLgorIworIyAtT2F0eCBvcHRpbWl6ZXMgdG8gZmF2b3Igc3BlZWQg b3ZlciBzaXplOiBsb29wIG9wdGltaXphdGlvbiwgaW5saW5lIGZuJ3MuCisjIC1PcyBmYXZvcnMg c2l6ZSBvdmVyIHNwZWVkLiAgU2F2ZXMgMzAtNDBLIG91dCBvZiBhYm91dCAxLjc1TS4KKyMgLTNy ID0gZ2VuZXJhdGUgMzg2IGNvZGUgd2l0aCByZWdpc3Rlci1iYXNlZCBhcmcgcGFzc2luZy4KKyMg LTNzID0gZ2VuZXJhdGUgMzg2IGNvZGUgd2l0aCBzdGFjay1iYXNlZCBhcmcgcGFzc2luZy4KKyMg LW1zID0gc2VwYXJhdGUgY29kZSAmIGRhdGEgNEdCIHNlZ21lbnRzICgzMi1iaXQgYnVpbGRzIG9u bHkpLgorIyAtbWYgPSBmbGF0IG1lbW9yeSBtb2RlbCBjb2RlK2RhdGEgaW4gb25lIDRHQiBzZWdt ZW50IChkaXR0bykuCisjIC16YyA9IHBsYWNlIGxpdGVyYWwgc3RyaW5ncyBpbiBjb2RlIHNlZ21l bnQuCisjIC1ONE0gPSBCaWcgc3RhY2sgKGluY3JlYXNlIHRoZSBkaWdpdCB1cG9uIFNJR1NFR1Zz IGF0IHJ1bnRpbWUpLgorIyBjaGFycyBhcmUgdW5zaWduZWQgYnkgZGVmYXVsdCAoLWogbWFrZXMg dGhlbSBzaWduZWQgYnkgZGVmYXVsdCkuCisjIC1OT1VVQ1AgaXMgaW5jbHVkZWQgYmVjYXVzZSBR TlggZG9lc24ndCB1c2UgaXQuCisjIEFkZCB0aGVzZSB0byB0aGUgZW5kIGlmIHlvdSBsaWtlIGJ1 dCB0aGV5IGR1bXAgY29yZSBvbiBteSBRTlggNC4yNSBzeXN0ZW06CisjCisjCUB3ZXJtaXQgLWgg PnVzZS5xbngKKyMJQHVzZW1zZyB3ZXJtaXQgdXNlLnFueAorIwlAcm0gdXNlLnFueAorIworIyBJ ZiB5b3UgZ2V0IHdhcm5pbmdzIGFib3V0IEhFQURFUiBvciBDX0lOIGFkZCAtRE5PX0ROU19TUlYu CisjIE9LIDIwMTEvMDYvMTQKK3FueDMyOgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZF UikgZm9yIFFOWCA0LjJ4LCAzMi1iaXQuLi4nCisJJChNQUtFKSB4ZXJtaXQgXAorCSJMTktGTEFH UyA9IC1ONE0gLTNyIiBcCisJIkNGTEFHUyA9IC1tcyAtM3IgLURRTlggLURUQ1BTT0NLRVQgLURD S19DVVJTRVMgLUROT0dFVFVTRVJTSEVMTCBcCisJLURDS19XUkVGUkVTSCAtRENLX1JFRElSIC1E U0VMRUNUIC1EU0VMRUNUX0ggLURDS19SVFNDVFMgLUROT0pDIFwKKwktRE5PSU5JVEdST1VQUyAt RE5PVVVDUCAtRENLX0FOU0lDIC1EUElEX1Q9cGlkX3QgLU9hdHggLXpjICQoS0ZMQUdTKSIgXAor CSJMSUJTPSAtbHNvY2tldCAtbG5jdXJzZXMgLWx0ZXJtY2FwIgorCisjIEFzIGFib3ZlIGJ1dCBu byBuZXR3b3JraW5nIHNpbmNlIHNvbWUgUU5YIHN5c3RlbXMgZG8gbm90IGhhdmUgVENQL0lQCisj IGluc3RhbGxlZCwgb3IgdGhlIFRDUC9JUCBkZXZlbG9wZXJzIGtpdCwgd2hpY2ggaW5jbHVkZXMg YWxsIHRoZSBuZWVkZWQKKyMgaGVhZGVyIGZpbGVzLiAgVGhpcyBlbnRyeSBoYXMgbm90IGJlZW4g dGVzdGVkIG9uIGEgUU5YIHN5c3RlbSB0aGF0LCBpbgorIyBmYWN0LCBkb2VzIG5vdCBoYXZlIFRD UC9JUCBpbnN0YWxsZWQ7IHNvbWUgYWRqdXN0bWVudHMgbWlnaHQgYmUgbmVjZXNzYXJ5LAorIyBp biBwYXJ0aWN1bGFyIHJlZ2FyZGluZyB0aGUgdXNlIG9mIHNlbGVjdCgpOiBpcyAtbHNvY2tldCBu ZWVkZWQsIGNhbiB3ZQorIyBnZXQgdGhlIG5lZWRlZCBkZWZpbml0aW9ucyBmcm9tIG5vbi1UQ1Av SVAgaGVhZGVyIGZpbGVzIChGRF9TRVQsIGV0Yyk/CitxbngzMm5vbmV0OgorCUBlY2hvICdNYWtp bmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFFOWCA0LjJ4LCAzMi1iaXQsIG5vIG5ldC4uLicKKwkk KE1BS0UpIHhlcm1pdCBcCisJIkxOS0ZMQUdTID0gLU40TSAtM3IiIFwKKwkiQ0ZMQUdTID0gLTNy IC1tcyAtRFFOWCAtRE5PTkVUIC1ETk9JS1NEIC1EQ0tfQ1VSU0VTIFwKKwktRENLX1dSRUZSRVNI IC1EQ0tfUkVESVIgLURTRUxFQ1QgLURTRUxFQ1RfSCAtRENLX1JUU0NUUyAtRE5PSkMgXAorCS1E Tk9VVUNQIC1EQ0tfQU5TSUMgLURQSURfVD1waWRfdCAtT2F0eCAtemMgJChLRkxBR1MpIiBcCisJ IkxJQlM9IC1sc29ja2V0IC1sbmN1cnNlcyAtbHRlcm1jYXAiCisJQHdlcm1pdCAtaCA+dXNlLnFu eAorCUB1c2Vtc2cgd2VybWl0IHVzZS5xbngKKwlAcm0gdXNlLnFueAorCisjIFN5bm9ueW0gZm9y IHFueDMyLgorcW54OgorCSQoTUFLRSkgcW54MzIgIktGTEFHUz0kKEtGTEFHUykiCisKKyMgUU5Y IDQuMjEgYW5kIGFib3ZlLCAxNi1iaXQgdmVyc2lvbiwgV2F0Y29tIEMgOC41IC0gYW5kIGhpZ2hl ciBvbiBpMjg2IFBDcworIyBhbmQgYWJvdmUuCisjCisjCUlNUE9SVEFOVDogRG8gbm90IHVzZSBX YXRjb20gQyAxMC42ISEhCisjCUlmIHlvdSBoYXZlIGl0IGluc3RhbGxlZCwgYWRkICItdjkuNTIg dG8gQ0ZMQUdTIgorIworIyBOT1RFOiBRTlggNC4yMyBvbndhcmQgZG9lcyBub3Qgd29yayBvbiAy ODYncyBhbnl3YXkuCisjIFN0YWNrc2l6ZSAyNjAwMCwgb2JqZWN0cyBsYXJnZXIgdGhhbiAxMDAg Ynl0ZXMgaW4gdGhlaXIgb3duIHNlZ21lbnRzLAorIyBzdHJpbmcgY29uc3RhbnRzIHRvIHRoZSBj b2Rlc2VnbWVudCwgZXRjLiAgRnVsbHkgY29uZmlndXJlZCBleGNlcHQgam9iIGN0cmwuCisjIFRo aXMgZW50cnkgd29ya3MgZm9yIGJ1aWxkaW5nIGEgMTYtYml0IGV4ZWN1dGFibGUgb24gYSAzMi1i aXQgc3lzdGVtLCBidXQKKyMgaGFzIG5vdCBiZWVuIHRlc3RlZCBvbiBhIDE2LWJpdCBzeXN0ZW0u ICBVc2VzIGxhcmdlIG1lbW9yeSBtb2RlbCwgbGlua3MKKyMgZXhwbGljaXRseSB3aXRoIGxhcmdl LW1vZGVsIHNvY2tldHMgbGlicmFyeS4gIENvcnJlY3QtbW9kZWwgY3Vyc2VzIGxpYnJhcnkKKyMg aXMgY2hvc2VuIGF1dG9tYXRpY2FsbHkuICBTZWUgY29tbWVudCBpbiBxbngzMiBlbnRyeSBhYm91 dCAtRE5PVVVDUC4KKyMKKyMgV0FSTklORzoKKyMKKyMgV2F0Y29tIEMgcHJpb3IgdG8gMTAuNiBu ZXZlciBoYWQgcmVsZWFzZWQgY3Vyc2VzIGxpYnJhcnkuIFRvIGxpbmsgYWdhaW5zdCBpdCwKKyMg eW91IG11c3Qgb2J0YWluIHBvcnRlZCBmcmVlIGN1cnNlcyBzb3VyY2UgZnJvbSBmdHA6Ly9mdHAu cW54LmNvbS91c3IvZnJlZSwKKyMgdGhlbiBjb21waWxlIGFuZCBidWlsZCBsaWJyYXJ5IChjdXJz ZXNsLmxpYikgYW5kIHBsYWNlIGl0IGluIC91c3IvbGliLiAgWW91CisjIG11c3QgYWxzbyBjb3B5 IGN1cnNlcy5oIHRvIC91c3IvaW5jbHVkZS4gIEJlIGF3YXJlIHRoYXQgaWYgeW91IGhhdmUgV2F0 Y29tCisjIDEwLjYgaW5zdGFsbGVkLCB5b3Ugc2hvdWxkIGFscmVhZHkgaGF2ZSBjdXJzZXMuaCwg d2hpY2ggaXMgdGhlIG5ldyBuY3Vyc2VzCisjIGxpYnJhcnkuIFlvdSBtdXN0IGJhY2sgaXQgdXAg YW5kIHVzZSBmcmVlIGN1cnNlcy5oIGluc3RlYWQsIHNpbmNlIG5jdXJzZXMgaXMKKyMgb25seSBm b3IgMzItYml0IGFwcGxpY2F0aW9ucyBhbmQgc29tZSBkZWZpbml0aW9ucyBpbiB0aGVzZSBmaWxl cyBhcmUKKyMgZGlmZmVyZW50IChlLmcuLCBjbGVhcm9rKCkpLiAgRm9yIHNhZmV0eSwgY3Vyc2Vz IGlzIG5vdCBkZWZpbmVkIGluIGJ1aWxkLgorIworIyBJbiA3LjAgLUROT0hFTFAgYWRkZWQgdG8g a2VlcCBja3V1czIuYyBmcm9tIGJsb3dpbmcgdXA7IE5PQ1NFVFMgYW5kIE5PU1BMCisjIGFkZGVk IGJlY2F1c2UgY2t1dXM0IHdhcyBibG93aW5nIHVwLCBhbmQgTk9GTE9BVCBqdXN0IGJlY2F1c2Ug aXQgc2VlbWVkCisjIGRhbmdlcm91cyAocmVtb3ZlIC1ETk9GTE9BVCBpZiB5b3Ugd2FudCB0byB0 cnkgaXQpLCBUaGUgcmVzdWx0IHdvcmtzIE9LCisjIGV4Y2VwdCBmb3Igc29tZSBteXN0ZXJpb3Vz IGJlZXBzIHVwb24gdGVybWluYXRpb24gb2YgdGhlIHRvcC1sZXZlbCBrZXl3b3JkLgorIworIyBU aGluZ3MgdG8gdHJ5IG5leHQgdGltZSB3ZSBnZXQgaW4gdHJvdWJsZToKKyMgIC4gQ2hhbmdlIC16 dDEwMCB0byBzb21ldGhpbmcgc21hbGxlciBsaWtlIC16dDI1CisjICAuIENoYW5nZSAtT2F0eCB0 byAtT21pbGVyYXQgKGVuYWJsZSBzdGFjayBjaGVja2luZykKKyMgIC4gTWF5YmUgZ2V0IHJpZCBv ZiAtdjkuNTIgLS0gaXQncyBvbmx5IHRoZXJlIGJlY2F1c2Ugd2Ugd2VyZSB3YXJuZWQuCisjCitx bngxNjoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBRTlggNC4yMSwgMTYt Yml0Li4uJworCSQoTUFLRSkgeGVybWl0IFwKKwkiTE5LRkxBR1MgPSAtMiAtbWwgLU4gMjYwMDAi IFwKKwkiQ0ZMQUdTID0gLTIgLU9hdHggLXpjIC16dDEwMCAtbWwgLURRTlggLURRTlgxNiAtRE5P VVVDUCAtRE5PSEVMUCBcCisJLURDS19SRURJUiAtRFNFTEVDVCAtRFNFTEVDVF9IIC1ETk9KQyAt RE5PR0VUVVNFUlNIRUxMIC1ETk9DU0VUUyBcCisJLXY5LjUyIC1EVENQU09DS0VUIC1EQ0tfUlRT Q1RTIC1EQ0tfQU5TSUMgLUROT0lOSVRHUk9VUFMgLUROT0tWRVJCUyBcCisJLUROT1JBTkRPTSAt RE5PQ1NFVFMgLUROT1NQTCAtRE5PRkxPQVQgLURQSURfVD1waWRfdCAkKEtGTEFHUykiCisKKyMg UU5YIDQuMSwgMTYtYml0IHZlcnNpb24sIHdpdGggV2F0Y29tIEMgOC41IG9uIGkyODYgUENzIGFu ZCBhYm92ZS4KKyMgc3RhY2tzaXplIDI2MDAwLCBvYmplY3RzIGxhcmdlciB0aGFuIDEwMCBieXRl cyBpbiB0aGVpciBvd24gc2VnbWVudHMsCisjIHN0cmluZyBjb25zdGFudHMgdG8gdGhlIGNvZGVz ZWdtZW50LCBldGMuICBBZGQgLUROT1VVQ1AgaWYgZGVzaXJlZC4KK3FueDE2XzQxOgorCUBlY2hv ICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFFOWCA0LjEsIDE2LWJpdC4uLicKKwkkKE1B S0UpIHhlcm1pdCBcCisJIkxOS0ZMQUdTID0gLW1oIC1OIDI2MDAwIiAiQ0ZMQUdTID0gLVdjLC1m cGMgLVdjLC1qIC1ETk9HRVRVU0VSU0hFTEwgXAorCS1XYywtT2xzIC1XYywtemRmIC1XYywtemMg LVdjLC16dDEwMCAtbWggLURQT1NJWCAtRFFOWCAtRERJUkVOVCBcCisJLUROT0NZUklMIC1ETk9E RUJVRyAtRE5PTVNFTkQgLURNSU5JRElBTCAtRE5PWE1JVCAtRE5PU0NSSVBUIC1ETk9TUEwgXAor CS1ETk9TRVRLRVkgLUROT0lOSVRHUk9VUFMgLURRTlgxNiAtRFBJRF9UPXBpZF90ICQoS0ZMQUdT KSIKKworIyBRTlggTmV1dHJpbm8gMiAocHdhZWNodGxlckBxbnguZGUpIGNyb3NzY29tcGlsZWQg b24gUU5YIDQuMjUuCisjIEdldHMgbG90cyBvZiBjb21waWxlciB3YXJuaW5ncy4KK3FueF9udG8y KzoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBRTlggTmV1dHJpbm8gMisg JworCWNjIC1vIHdhcnQgY2t3YXJ0LmMKKwkkKE1BS0UpIHhlcm1pdCBcCisJIkNDID0gcWNjIC1W Z2NjX250b3g4NiIgXAorCSJDQzIgPSBxY2MgLVZnY2NfbnRveDg2IiBcCisJIkxOS0ZMQUdTID0g IiBcCisJIkNGTEFHUyA9IC1ETkVVVFJJTk8gLURUQ1BTT0NLRVQgLURDS19DVVJTRVMgLUROT0dF VFVTRVJTSEVMTCBcCisJLUROT1VVQ1AgLURDS19XUkVGUkVTSCAtRENLX1JFRElSIC1EU0VMRUNU IC1EU0VMRUNUX0ggLURDS19SVFNDVFMgXAorCS1ETk9KQyAtRE5PSU5JVEdST1VQUyAtRENLX0FO U0lDIC1EUElEX1Q9cGlkX3QgLURVTklYIC1ERElSRU5UIFwKKwktRE1ZUkVBRCAtREJTRDQ0T1JQ T1NJWCAtRFNWT1JQT1NJWCAtRE5ER1BXTkFNICQoS0ZMQUdTKSIgXAorCSJMSUJTPSAtbHNvY2tl dCAtbG5jdXJzZXMgIgorCisjIFFOWCA2ICg9IE5ldXRyaW5vIDIueHgpIG5hdGl2ZSBidWlsZCAo a2lydXNzZWxAY2lzY28uY29tKS4KK3FueDY6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENL VkVSKSBmb3IgUU5YNicKKwkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPVFOWDYgXAorCSJDRkxBR1Mg PSAtRFBPU0lYIC1EQ0tfUE9TSVhfU0lHIC1ETkVUUFRZIC1ETk9BUlJPV0tFWVMgXAorCS1EVVNF X1RJT0NTRFRSIC1EQklHQlVGT0sgLURDS01BWE9QRU49MTAwIC1EUkxPR0NPREUgLUROT1JFQUxQ QVRIIFwKKwktRE1BWE5BTUxFTj00OCAtRFFOWDYgLURVU0VfVEVSTUlPIC1ESU5JVF9TUFRZIFwK KwktRENLX0NVUlNFUyAtRENLX1dSRUZSRVNIIC1EQ0tfTkVXVEVSTSAtRERZTkFNSUMgXAorCS1E VENQU09DS0VUIC1ETk9HRVRVU0VSU0hFTEwgLURDS19SRURJUiAtRFNFTEVDVCAtRFNFTEVDVF9I IFwKKwktRENLX1JUU0NUUyAtRE5PSkMgLURTVk9SUE9TSVggLURCU0Q0NE9SUE9TSVggLUROT1VV Q1AgLURDS19BTlNJQyBcCisJJChLRkxBR1MpIC1PIiBcCisJIkxJQlM9IC1sc29ja2V0ICAtbG5j dXJzZXMiCisKKyNNSU5JWC8yLjAgMzIgQml0IHZlcnNpb24gZm9yIGludGVsIDM4NisgcnVubmlu ZyB0aGUgUE9TSVgtY29tcGxpYW50IE1JTklYCisjIHZlcnNpb24gMi4wIChUaGUgZGVmaW5pdGlv biBvZiBmYXRhbCBhdm9pZHMgYSBjb25mbGljdCB3aXRoIGEgc3ltYm9sIGJ5CisjIHRoZSBzYW1l IG5hbWUgaW4gdGhlIGN1cnNlcyBsaWJyYXJ5LikgSXQgaXMgaW1wb3NzaWJsZSB0byBjb21waWxl IHdpdGgKKyMgbmV0d29yayBzdXBwb3J0IHNpbmNlIE1pbml4IGRvZXMgbm90IHN1cHBvcnQgQmVy a2VsZXkgc29ja2V0cy4KKyMgTm90ZTogdXNlIGNobWVtIGxpYmVyYWxseSBvbiB0aGUgY29tcGls ZXIgcGFzc2VzLCBtYWtlLCBhbmQgdGhlIGZpbmFsCisjIGtlcm1pdCBleGVjdXRhYmxlLiAoMyBt ZWdhYnl0ZXMgb2YgbWVtb3J5IGZvciBlYWNoIGlzIHN1ZmZpY2llbnQuKQorIyBGcm9tIFRlcnJ5 IE1jQ29ubmVsbCwgU3lyYWN1c2UgVSwgYW5kIFdpbGwgUm9zZS4gIFdpbGwgc2F5czoKKyMgVGhl IHN0YWNrcyBmb3IgbWFrZSBhbmQgc29tZSBjb21waWxlciBwYXNzZXMgbmVlZGVkIHRvIGJlIGlu Y3JlYXNlZAorIyB3aXRoIGNobWVtIGFzIGZvbGxvd3M6CisjICAgbWFrZSAxTUIKKyMgICAvdXNy L2xpYi9lbV9jZW1jb20uYW5zaSAzTUIKKyMgICAvdXNyL2xpYi9lbV9vcHQgMU1CCisjICAgL3Vz ci9saWIvaTM4Ni9jZyAxTUIKKyMgICAvdXNyL2xpYi9pMzg2L2FzIDFNQgorIyBUaGUgY29tcGls ZXIgdGVtcG9yYXJ5IGRpcmVjdG9yeSB3YXMgc2V0IHRvIC91c3IvdG1wIHZpYSB0aGUgVE1QRElS CisjIGVudmlyb25tZW50IHZhcmlhYmxlOyBtb3JlIHRoYW4gMU1CIG9mIHRlbXBvcmFyeSBzcGFj ZSB3YXMgbmVlZGVkLgorIyBLZXJtaXQgaXRzZWxmIG5lZWRzIGF0IGxlYXN0IDFNQiBvZiBzdGFj ay4KK21pbml4MjA6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgTUlOSVgg Mi4wLzM4Ni4uLicKKwkkKE1BS0UpIHdlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IEVY VD1vIFwKKwkiQ0ZMQUdTPSAgLXdvIC1EVjcgLURNSU5JWDIgLURNSU5JWCAtRFNJR19WIC1EX1BP U0lYX1NPVVJDRSBcCisJLURDS0NQVT1cXFwiaS0zODZcXFwiIC1ETk9JS1NEIC1EZmF0YWw9bXlm YXRhbCAtRENLX0NVUlNFUyAtRE5PTEVBUk4gXAorCS1ETk9TWVNMT0cgLURVU0VfTUVNQ1BZIC1E Tk9SRUFMUEFUSCAkKEtGTEFHUykiICJMSUJTPSAtbGN1cnNlcyIKKworI01JTklYLzM4NiAoUEMg TWluaXggbW9kaWZpZWQgYnkgQnJ1Y2UgRXZhbnMgaW4gQXVzdHJhbGlhIGZvciAzODYgYWRkcmVz c2luZykKKyMgRm9yIE1JTklYIDEuNSsgKGJ1dCA8IDIuMCkKK21pbml4Mzg2OgorCUBlY2hvICdN YWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIE1JTklYLzM4Ni4uLicKKwlAZWNobyAnVE9UQUxM WSBVTlRFU1RFRCEnCisJJChNQUtFKSB3ZXJtaXQgRVhUPXMgS1RBUkdFVD0kJHtLVEFSR0VUOi0k KEApfSBcCisJIkNGTEFHUz0gLURWNyAtRE1JTklYIC1EX1BPU0lYX1NPVVJDRSAtRE5PTEVBUk4g JChLRkxBR1MpIgorCisjTUlOSVgvMzg2IE1pbml4IG1vZGlmaWVkIGJ5IEJydWNlIEV2YW5zIGlu IEF1c3RyYWxpYSB0byB1c2UgMzg2IGFkZHJlc3NpbmcKK21pbml4Mzg2Z2NjOgorCUBlY2hvICdN YWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIE1JTklYLzM4NiB3aXRoIGdjYy4uLicKKwlAZWNo byAnVE9UQUxMWSBVTlRFU1RFRCEnCisJJChNQUtFKSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VU Oi0kKEApfSAiQ0M9Z2NjIC1nIC1PIiAiQ0MyPWdjYyAtZyIgXAorCSJDRkxBR1M9IC1EVjcgLURN SU5JWCAtRF9QT1NJWF9TT1VSQ0UgLUROT0xFQVJOICQoS0ZMQUdTKSIKKworI01JTklYIC0gNjhr IHZlcnNpb24gd2l0aCBBQ0sgY29tcGlsZXIuCisjIElmIHlvdSBoYXZlIHRyb3VibGUgY29tcGls aW5nIG9yIHJ1bm5pbmcgd2FydCwgInRvdWNoIHdhcnQiLgorIyBJZiBpdCBzdGlsbCBkb2Vzbid0 IHdvcmssICJ0b3VjaCBja2Nwcm8uYyIuCisjIFRoZSB2ZXJzaW9uIGNvbmZpZ3VyZWQgYmVsb3cg aGFzIG1hbnkgZmVhdHVyZXMgcmVtb3ZlZCwgaW5jbHVkaW5nCisjIHRoZSBUUkFOU01JVCwgTVNF TkQsIEhFTFAsIGFuZCBTQ1JJUFQgY29tbWFuZHMsIGludGVybmF0aW9uYWwKKyMgY2hhcmFjdGVy IHNldCBzdXBwb3J0LCBhbmQgdGhlIGVudGlyZSBzY3JpcHQgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2Uu CisjIEJ1dCBpdCBkb2VzIGhhdmUgYW4gaW50ZXJhY3RpdmUgY29tbWFuZCBwYXJzZXIuCisjIE1h a2Ugc3VyZSBtYWtlKDEpIGhhcyAoYXQgbGVhc3QpIDEwMDAwMCBjaG1lbW9yeSEKKyMgSWYgeW91 IGFyZSB1c2luZyB0aGUgQW1zdGVyZGFtIEMgY29tcGlsZXIsIHlvdSBtaWdodCBoYXZlIHRvIGFk ZCAiLURfX0FDS19fIi4KK21pbml4NjhrOgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZF UikgZm9yIE1JTklYIDY4ayB3aXRoIEFDSy4uLicKKwkkKE1BS0UpIHdlcm1pdCBLVEFSR0VUPSQk e0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTPSAtRFY3IC1ETUlOSVggLURfTUlOSVggLURfUE9T SVhfU09VUkNFIC1ETk9MRUFSTiBcCisJLUROT0RJQUwgLUROT0hFTFAgLUROT0RFQlVHIC1ETk9U TE9HIFwKKwktRE5PU0NSSVBUIC1ETk9DU0VUUyAtRE5PU1BMICQoS0ZMQUdTKSBcCisJLURQSURf VD1waWRfdCAtRFVJRF9UPXVpZF90IC1ER0lEX1Q9Z2lkX3QgLURTSUdfViIKKworI01JTklYIC0g NjhrIHZlcnNpb24gd2l0aCBjNjggY29tcGlsZXIuCisjIElmIHlvdSBoYXZlIHRyb3VibGUgY29t cGlsaW5nIG9yIHJ1bm5pbmcgd2FydCwgInRvdWNoIHdhcnQiIG9yCisjICJ0b3VjaCBja2Nwcm8u YyIuIENvbXBpbGluZyBja3VkaWEuYyAobm8gLUROT0RJQUwhKSBtaWdodCBmYWlsLiA6LSgKKyMg R2l2ZSBjNjggMjUwMDAwIGJ5dGVzIG9mIHN0YWNrK2hlYXA7IG1ha2Ugc3VyZSBtYWtlKDEpIGhh cyBhdCBsZWFzdAorIyAxMDAwMDAgY2htZW1vcnkuICBPbiBhIDFNQiBBdGFyaSBTVCB0aGlzIG1l YW5zIHRoYXQgdGhlIHJlY3Vyc2l2ZQorIyBjYWxsIG9mIG1ha2UgZmFpbHMgZHVlIHRvIG1lbW9y eSBzaG9ydGFnZS4gIFRyeSAibWFrZSAtbiBtaW5peGM2OCA+bWFrZWl0IiwKKyMgZm9sbG93ZWQg YnkgIi4gbWFrZWl0Ii4gIE90aGVyd2lzZSwgYXMgYWJvdmUuCittaW5peGM2ODoKKwlAZWNobyAn TWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBNSU5JWCA2OGsgd2l0aCBjNjguLi4nCisJJChN QUtFKSB3ZXJtaXQgIkNDPSBjYyAtYzY4IiBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwki Q0ZMQUdTPSAtRFY3IC1ETUlOSVggLURfTUlOSVggLURfUE9TSVhfU09VUkNFIC1ETk9MRUFSTiBc CisJLUROT0RJQUwgLUROT0hFTFAgLUROT0RFQlVHIC1ETk9UTE9HIFwKKwktRE5PU0NSSVBUIC1E Tk9DU0VUUyAtRE5PU1BMICQoS0ZMQUdTKSBcCisJLURQSURfVD1waWRfdCAtRFVJRF9UPXVpZF90 IC1ER0lEX1Q9Z2lkX3QgLURTSUdfViIKKworI01JTklYIC0gNjhrIHZlcnNpb24gd2l0aCBjNjgg Y29tcGlsZXIuCisjQSB2YXJpYXRpb24gb24gdGhlIGFib3ZlIHRoYXQgd2FzIHJlY2VudGx5IChT ZXAgOTUpIHJlcG9ydGVkIHRvIHdvcmsuCittaW5peGM2OGE6CisJQGVjaG8gJ01ha2luZyBDLUtl cm1pdCAkKENLVkVSKSBmb3IgTUlOSVggNjhrIHdpdGggYzY4Li4uJworCSQoTUFLRSkgd2VybWl0 ICJDQz0gY2MgLWM2OCIgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUz0gLURW NyAtRE1JTklYIC1EX01JTklYIC1EX1BPU0lYX1NPVVJDRSBcCisJLURDS19BTlNJQyAtRE5PREVC VUcgLUROT1RMT0cgLURNSU5JRElBTCAtREVYVEVOIC1ETVlDVVJTRVMgXAorCS1ETk9TQ1JJUFQg LUROT0NTRVRTIC1ETk9TUEwgLUROT0pDIC1ERElSRU5UIC1ETk9MRUFSTiBcCisJLUROT1NFVEtF WSAtRE5PRVNDU0VRICQoS0ZMQUdTKSBcCisJLURQSURfVD1waWRfdCAtRFVJRF9UPXVpZF90IC1E R0lEX1Q9Z2lkX3QgLURTSUdfViIKKworI01JUFMgQ29tcHV0ZXIgU3lzdGVtcyB3aXRoIFVNSVBT IFJJU0MvT1MgNC41MiA9IEFUJlQgVU5JWCBTeXN0ZW0gViBSMy4wLgorI1JlbW92ZSAtRE5PSkMg aWYgam9iIGNvbnRyb2wgY2FuIGJlIHNhZmVseSB1c2VkLgorbWlwczoKKwlAZWNobyAnTWFraW5n IEMtS2VybWl0ICQoQ0tWRVIpIGZvciBNSVBTIFJJU0MvT1MuLi4nCisJJChNQUtFKSB3ZXJtaXQg S1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUyA9IC1ETUlQUyAtRERJUkVOVCAt RENLX1BPTEwgLUROT0pDIC1ETk9MRUFSTiAtRFBJRF9UPWludCBcCisJLURHSURfVD1naWRfdCAt RFVJRF9UPXVpZF90IC1pIC1PMTUwMCAkKEtGTEFHUykiCisKKyNBcyBhYm92ZSwgYnV0IHdpdGgg VENQL0lQIGFuZCBmdWxsc2NyZWVuIHN1cHBvcnQuCittaXBzdGNwYzoKKwlAZWNobyAnTWFraW5n IEMtS2VybWl0ICQoQ0tWRVIpIGZvciBNSVBTIFJJU0MvT1MuLi4nCisJJChNQUtFKSB4ZXJtaXQg S1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUyA9IC1ETUlQUyAtRERJUkVOVCAt RENLX1BPTEwgLUROT0pDIFwKKwktRFRDUFNPQ0tFVCAtRENLX0NVUlNFUyAtSS91c3IvaW5jbHVk ZS9ic2QgXAorCS1EUElEX1Q9aW50IC1ER0lEX1Q9Z2lkX3QgLURVSURfVD11aWRfdCAtaSAtTzE1 MDAgJChLRkxBR1MpIiBcCisJIkxJQlMgPSAtbGN1cnNlcyAtbGJzZCIKKworI01vdG9yb2xhIERl bHRhIFN5c3RlbSBWLzY4IFIzLCBzaWduYWwoKSBpcyB2b2lkIHJhdGhlciB0aGFuIGludC4KKyNV c2VzIGRpcmVudC5oIGFuZCBIb25leSBEYW5CZXIgdXVjcC4gIFN1cHBvcnRzIFRDUC9JUC4KKyNB ZnRlciBidWlsZGluZywgdXNlICJtY3MgLWQiIHRvIHJlZHVjZSBzaXplIG9mIHRoZSBleGVjdXRh YmxlIHByb2dyYW0uCitzdjY4cjM6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBm b3IgTW90b3JvbGEgVU5JWCBTeXN0ZW0gVi82OCBSMy4uLicKKwkkKE1BS0UpIHdlcm1pdCBLVEFS R0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTID0gLURTVlIzIC1EU1Y2OCAtRERJUkVO VCAtREhEQlVVQ1AgLUROT19ETlNfU1JWIC1EVENQU09DS0VUIFwKKwktRE5PVU5JQ09ERSAtRE5P TEVBUk4gLURVU0VfTUVNQ1BZICQoS0ZMQUdTKSAtTyIgIkxOS0ZMQUdTID0iCisKKyNNb3Rvcm9s YSBEZWx0YSBTeXN0ZW0gVi82OCBSM1Y1LCBzaWduYWwoKSBpcyB2b2lkIHJhdGhlciB0aGFuIGlu dC4KKyNVc2VzIGRpcmVudC5oIGFuZCBIb25leSBEYW5CZXIgVVVDUC4gIFN1cHBvcnRzIFRDUC9J UC4KKyNBZnRlciBidWlsZGluZywgdXNlICJtY3MgLWQiIHRvIHJlZHVjZSBzaXplIG9mIHRoZSBl eGVjdXRhYmxlIHByb2dyYW0uCitzdjY4cjN2NToKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQo Q0tWRVIpIGZvciBNb3Rvcm9sYSBVTklYIFN5c3RlbSBWLzY4IFIzVjUnCisJJChNQUtFKSB3ZXJt aXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUyA9IC1EU1ZSMyAtRFNWNjgg LURESVJFTlQgLURIREJVVUNQIC1ETk9fRE5TX1NSViAtRFVTRV9NRU1DUFkgXAorCS1EVENQU09D S0VUIC1ESU5BRERSWCAtRE5PVU5JQ09ERSAtREZORkxPQVQgLUROT0xFQVJOICQoS0ZMQUdTKSAt TyIgXAorCSJMTktGTEFHUyA9IiAiTElCUyA9IC1saW5ldCAtbG0iCisKKyNNb3Rvcm9sYSBNVk1F MTQ3IFN5c3RlbSBWLzY4IFIzIFY1LjEuIFJlcXVpcmVzIGdjYyAyLjEgdG8gY29tcGlsZS4KKyNB ZnRlciBidWlsZGluZywgdXNlICJtY3MgLWQiIHRvIHJlZHVjZSBzaXplIG9mIHRoZSBleGVjdXRh YmxlIHByb2dyYW0uCitzdjY4cjN2NTE6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVS KSBmb3IgTW90b3JvbGEgVU5JWCBTeXN0ZW0gVi82OCBSM1Y1LjEnCisJJChNQUtFKSB3ZXJtaXQg IkNDPWdjYy1kZWx0YSIgIkNDMj1nY2MtZGVsdGEiIFwKKwlLVEFSR0VUPSQke0tUQVJHRVQ6LSQo QCl9IFwKKwkiQ0ZMQUdTID0gLURTVlIzIC1ERElSRU5UIC1ESERCVVVDUCAtRE5PREVCVUcgLURO T19ETlNfU1JWIC1ETk9MRUFSTiBcCisJLUROT1VOSUNPREUgLURGTkZMT0FUIC1EU1Y2OCAtRFVT RV9NRU1DUFkgJChLRkxBR1MpIFwKKwktTzIgLXYgLWZ0cmFkaXRpb25hbCIgXAorCSJMTktGTEFH UyA9IC1zIC12IiAiTElCUyA9IC1sbTg4MSAtbG0iCisKKyNNb3Rvcm9sYSBNVk1FMTQ3IFN5c3Rl bSBWLzY4IFIzVjYuIGRlcml2ZWQgZnJvbSBNb3Rvcm9sYSBEZWx0YSBTeXN0ZW0gUjNWNS4KKyND aGVja2VkIG9uIGxhcmdlciBNb3Rvcm9sYSBTeXN0ZW0gVi82OCBSM1Y2ICh3aXRoIE5TRSBOZXR3 b3JrIFNlcnZpY2VzIEV4dC4pCisjQWZ0ZXIgYnVpbGRpbmcsIHVzZSAic3RyaXAiIHRvIHJlZHVj ZSBzaXplIG9mIHRoZSBleGVjdXRhYmxlIHByb2dyYW0uCisjICJMSUJTID0gLWxuc2wiIHJlbW92 ZWQgaW4gQy1LZXJtaXQgNi4xIC0gcHV0IGJhY2sgaWYgbmVlZGVkLgorIyAiTElCUyA9IGxtIiBh ZGRlZCBpbiA3LjEvOC4wIGZvciBmbG9hdGluZy1wb2ludCBtYXRoLgorIyBja3V1c3IuYyBjbG9i YmVycyB0aGUgb3B0aW1pemVyLgorc3Y2OHIzdjY6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAk KENLVkVSKSBmb3IgTW90b3JvbGEgVU5JWCBTeXN0ZW0gVi82OCBSM1Y2JworCSQoTUFLRSkgY2t1 dXNyLiQoRVhUKSBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTID0gLURTVjY4 UjNWNiAtRERJUkVOVCAtREhEQlVVQ1AgLUROT0xPR0lOIC1ETk9JTklUR1JPVVBTIFwKKwktRE5P U1lNTElOSyAtRE5PUkVESVJFQ1QgLUROT0dGVElNRVIgLURUQ1BTT0NLRVQgLUREQ0xHRVRDV0Qg LURTVjY4IFwKKwktRE5PX0ROU19TUlYgLUROT1VOSUNPREUgLURGTkZMT0FUIC1EU0VMRUNUIC1E VVNFX01FTUNQWSAkKEtGTEFHUykiCisJJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VU Oi0kKEApfSBcCisJIkNGTEFHUyA9IC1PIC1EU1Y2OFIzVjYgLURESVJFTlQgLURIREJVVUNQIC1E Tk9MT0dJTiAtRE5PSU5JVEdST1VQUyBcCisJLUROT1NZTUxJTksgLUROT1JFRElSRUNUIC1ETk9H RlRJTUVSIC1EVENQU09DS0VUIC1ERENMR0VUQ1dEIC1EU1Y2OCBcCisJLUROT19ETlNfU1JWIC1E Tk9VTklDT0RFIC1ERk5GTE9BVCAtRFNFTEVDVCAtRFVTRV9NRU1DUFkgJChLRkxBR1MpIiBcCisJ IkxOS0ZMQUdTID0iICJMSUJTID0gLWxtIgorCisjTW90b3JvbGEgRGVsdGEgU3lzdGVtIFYvODgg UjMyLCBzaWduYWwoKSBpcyB2b2lkIHJhdGhlciB0aGFuIGludC4KKyNVc2VzIGRpcmVudC5oIGFu ZCBIb25leSBEYW5CZXIgdXVjcC4gIE5lZWRzIDxzeXMvdXRpbWUuaD4gZm9yIHNldHRpbmcKKyNm aWxlIGRhdGVzLiAgU3VwcG9ydHMgVENQL0lQLgorI0FmdGVyIGJ1aWxkaW5nLCB1c2UgIm1jcyAt ZCIgdG8gcmVkdWNlIHNpemUgb2YgdGhlIGV4ZWN1dGFibGUgcHJvZ3JhbS4KK3N2ODhyMzI6CisJ QGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgTW90b3JvbGEgVU5JWCBTeXN0ZW0g Vi84OCBSMzIuLi4nCisJJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBc CisJIkNGTEFHUyA9IC1EU1Y4OFIzMiAtRERJUkVOVCAtREhEQlVVQ1AgLURUQ1BTT0NLRVQgXAor CS1EU1lTVVRJTUVIIC1EQ0tfQ1VSU0VTIC1ETk9HRVRVU0VSU0hFTEwgLURHVE9ET05FQVJHICQo S0ZMQUdTKSAtTyIgXAorCSJMSUJTPSAtbGN1cnNlcyAtbHJlc29sdiIgIkxOS0ZMQUdTID0gLXMi CisKKyNNb3Rvcm9sYSBEZWx0YSBTeXN0ZW0gVi84OCBSNDAuICBIYXMgPHN5cy90ZXJtaW94Lmg+ LCByZWd1bGFyIEJlcmtlbGV5Cisjc29ja2V0cyBsaWJyYXJ5LCBpLmUuIGluLmggYW5kIGluZXQu aCBhcmUgbm90IG1pc3BsYWNlZCBpbiBzeXMgKHJhdGhlciB0aGFuCisjbmV0aW5ldCBhbmQgYXJw YSwgcmVzcGVjdGl2ZWx5KS4gIFVzZXMgQU5TSSBDIGNvbnN0cnVjdHMsIGFkdmlzb3J5IGZpbGUK KyNsb2NraW5nIG9uIGRldmljZXMsIGV0Yy4gIGN1cnNlcyBzdXBwb3J0IGFkZGVkLiAgUmVwb3J0 ZWRseSwgdGhlCisjL3Vzci9pbmNsdWRlL3N5cy92bm9kZS5oIGZpbGUgaGFzIGEgYnVnIHdoaWNo IG11c3QgYmUgZml4ZWQgYmVmb3JlIHRoaXMKKyNtYWtlZmlsZSBlbnRyeSBjYW4gd29yayBjb3Jy ZWN0bHkuICBUaGUgImlmIERFQlVHIiBkaXJlY3RpdmUgYXQgYWJvdXQgbGluZQorIzMyMCBtdXN0 IGJlIGNoYW5nZWQgdG8gImlmZGVmIERFQlVHIiAoUmVwb3J0ZWRseSwgdGhpcyB3YXMgZml4ZWQg aW4KKyNpbiBTeXN0ZW0gVi84OCBSNC4zKS4KKyNBZnRlciBidWlsZGluZywgdXNlICJtY3MgLWQi IHRvIHJlZHVjZSBzaXplIG9mIHRoZSBleGVjdXRhYmxlIHByb2dyYW0uCitzdjg4cjQwOgorCUBl Y2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIE1vdG9yb2xhIFVOSVggU3lzdGVtIFYv ODggUjQwLi4uJworCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAor CSJDRkxBR1MgPSAtTyAtRFNWUjQgLURNT1RTVjg4UjQgLURESVJFTlQgLURIREJVVUNQIC1EU1RF Uk1JT1ggXAorCS1EVENQU09DS0VUIC1EQ0tfQ1VSU0VTIC1ETk9HRVRVU0VSU0hFTEwgLURHVE9E T05FQVJHIC1ERk5GTE9BVCBcCisJJChLRkxBR1MpIiBcCisJIkxJQlM9IC1sc29ja2V0IC1sbnNs IC1sY3Vyc2VzIC1scmVzb2x2IC1sbSIgIkxOS0ZMQUdTID0gLXMiCisKKyNBcyBhYm92ZSBidXQg d2l0aG91dCB0aGUgZmxvYXRpbmctcG9pbnQgbWF0aCBsaWJyYXJ5Lgorc3Y4OHI0MG5tOgorCUBl Y2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIE1vdG9yb2xhIFVOSVggU3lzdGVtIFYv ODggUjQwLi4uJworCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAor CSJDRkxBR1MgPSAtTyAtRFNWUjQgLURNT1RTVjg4UjQgLURESVJFTlQgLURIREJVVUNQIC1EU1RF Uk1JT1ggXAorCS1EVENQU09DS0VUIC1EQ0tfQ1VSU0VTIC1ETk9HRVRVU0VSU0hFTEwgLURHVE9E T05FQVJHICQoS0ZMQUdTKSIgXAorCSJMSUJTPSAtbHNvY2tldCAtbG5zbCAtbGN1cnNlcyAtbHJl c29sdiIgIkxOS0ZMQUdTID0gLXMiCisKKyNBcyBhYm92ZSBidXQgd2l0aCBmbG9hdGluZy1wb2lu dCBtYXRoIGxpYnJhcnkgc3VwcG9ydCBcZmZwLi4uKCkgZnVuY3Rpb25zCisjYW5kIFMtRXhwcmVz c2lvbnMuCisKKyNPbGl2ZXR0aSBYL09TIFIyLjMsIDMueC4KKyNOT1RFUzoKKyMgLiBJZiB5b3Ug YnVpbGQgdGhlIGV4ZWN1dGFibGUgb24gMi54IFgvT1MsIGl0IHdpbGwgYWxzbyBydW4gb24gMy54 LgorIyAuIElmIHlvdSBidWlsZCBpdCBvbiAzLnggWC9PUywgaXQgd2lsbCBOT1QgcnVuIG9uIDIu eC4KKyMgLiBLZXJtaXQgY2FuIHJ1biB3aXRoIG5vIHByaXZpbGVnZXMgdW5sZXNzIHRoZSB1dWNw IGxpbmVzIGFyZSBwcm90ZWN0ZWQsCisjICAgaW4gd2hpY2ggY2FzZSBrZXJtaXQgbXVzdCBiZSBv d25lZCBieSB1dWNwIHdpdGggc3VpZCBiaXQgc2V0OgorIyAgIGNob3duIHV1Y3Aga2VybWl0IDsg Y2htb2QgNDExMSBrZXJtaXQuCit4b3MyMzoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tW RVIpIGZvciBPbGl2ZXR0aSBYL09TLi4uJworCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RB UkdFVDotJChAKX0gXAorCSdDRkxBR1M9LU9MTSAtRE9YT1MgLURUQ1BTT0NLRVQgLURIREJVVUNQ ICQoS0ZMQUdTKScgXAorCSJMSUJTPSIgIkxOS0ZMQUdTPSIKKworI0FzIGFib3ZlLCBidXQgd2l0 aCBjdXJzZXMuCit4b3MyM2M6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3Ig T2xpdmV0dGkgWC9PUyB3aXRoIGN1cnNlcy4uLicKKwkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQk e0tUQVJHRVQ6LSQoQCl9IFwKKwknQ0ZMQUdTPS1PTE0gLURPWE9TIC1EVENQU09DS0VUIC1ESERC VVVDUCAtRENLX0NVUlNFUyAkKEtGTEFHUyknIFwKKwkiTElCUz0tbGN1cnNlcyIgIkxOS0ZMQUdT PSIKKworY2t1dWlkOgorCUBlY2hvICdidWlsZGluZyBDLUtlcm1pdCAkKENLVkVSKSBzZXQtVUlE L3NldC1HSUQgdGVzdCBwcm9ncmFtcycKKwkkKENDKSAtREFOWUJTRCAtRFNBVkVEVUlEIC1vIGNr dXVpZDEgY2t1dWlkLmMKKwkkKENDKSAtREFOWUJTRCAtbyBja3V1aWQyIGNrdXVpZC5jCisJJChD QykgLURBTllCU0QgLUROT1NFVFJFVSAtbyBja3V1aWQzIGNrdXVpZC5jCisJJChDQykgLURBTllC U0QgLURTRVRFVUlEIC1ETk9TRVRSRVUgLW8gY2t1dWlkNCBja3V1aWQuYworCSQoQ0MpIC1vIGNr dXVpZDUgY2t1dWlkLmMKKwlAZWNobyAnUmVhZCB0aGUgdG9wIG9mIGNrdXVpZC5jIGZvciBkaXJl Y3Rpb25zLi4uZm9yIHRlc3RpbmcnCisJQGVjaG8gJ3lvdSBtdXN0IG1ha2UgdGhlc2UgcHJvZ3Jh bXMgc2V0dWlkIGFuZCBzZXRnaWQnCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQSBOIFQgSSBR IFUgSSBUIEkgRSBTCisjCisjIFRoZSBmb2xsb3dpbmcgYXJlIGFudGlxdWUgdGFyZ2V0cyBmcm9t IEMtS2VybWl0IDVBIG9yIGVhcmxpZXIuICBUaGV5IGhhdmUKKyMgbm90IGJlZW4gdXBkYXRlZCBv ciB0ZXN0ZWQgaW4geWVhcnMuICBNb3N0IG9mIHRoZW0gd2lsbCBuZWVkIHJlY2VudCBmZWF0dXJl cworIyBkaXNhYmxlZCwgdXN1YWxseSB3aXRoIHNvbWUgY29tYmluYXRpb24gb2YgLUROT1VOSUNP REUsIC1ETk9JS1NELCAtRE5PQU5TSSwKKyMgLUROT0NLR0hOTEhPU1QsIC1ETk9fRE5TX1NSViwg LUROT1JFRElSRUNULCAtRE5PUkVBTFBBVEgsIC1ETk9DVVJTRVMsIGV0Yy4KKyMgVGhleSBhcmUg YWxzbyBtaXNzaW5nIHRoZSBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IGJ1c2luZXNzLgorIyBG b3IgZGV0YWlscyBzZWUgY2t1aW5zLnR4dCBhbmQgY2tjY2ZnLnR4dC4KKyMKKyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMKKworI0JlcmtlbGV5IFVuaXggMi44LCAyLjkgZm9yIFBEUC0xMXMgd2l0aCBJJkQg c3BhY2UsIG1heWJlIGFsc28gVWx0cml4LTExPz8/CisjQy1LZXJtaXQoNUEpIGlzIHNpbXBseSB0 b28gbGFyZ2UgKGV2ZW4gdHVybmluZyBvZmYgYWxtb3N0IGV2ZXJ5IGZlYXR1cmUKKyNhdmFpbGFi bGUpIHRvIHJ1biB3aXRob3V0IGJvdGggSSZEIHNwYWNlIHBsdXMgb3ZlcmxheXMuICBUaGUgb2xk IGNvbW1lbnQKKyNzdWdnZXN0ZWQgcnVubmluZyAncGNjJyBidXQgdGhhdCB3b24ndCBoZWxwLiAg Q2hhbmdpbmcgJ2NjJyB0byAnY2t1c3RyLnNlZCcKKyN3aWxsIGNhdXNlIGEgc3RyaW5nIGV4dHJh Y3Rpb24gdG8gYmUgZG9uZSwgc2F2aW5nIEQgc3BhY2UgYnkgbW92aW5nIHN0cmluZ3MKKyN0byBh IGZpbGUuCitic2QyOToKKwlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIDIuOCBv ciAyLjlCU0QuCisJQGVjaG8gUmVhZCB0aGUgbWFrZWZpbGUgaWYgeW91IGhhdmUgdHJvdWJsZSB3 aXRoIHRoaXMuLi4KKwkkKE1BS0UpIG92d2VybWl0IFwKKwkiQ0ZMQUdTPSAtREJTRDI5IC1ETk9E RUJVRyAtRE5PVExPRyAtRE5PQ1NFVFMgLUROT0hFTFAgXAorCS1ETk9TQ1JJUFQgLUROT1NQTCAt RE5PWE1JVCAtRE5PRElBTCAkKEtGTEFHUykiIFwKKwkiTE5LRkxBR1M9IC1pIC1sbmRpciIgIkND PSBjYyAiICJDQzI9IGNjIgorCitic2QyMTA6CisJQGVjaG8gUGxlYXNlIHVzZSBja3ViczIubWFr IHRvIGJ1aWxkIEMtS2VybWl0ICQoQ0tWRVIpIGZvciAyLjEwQlNELgorCitic2QyMTE6CisJQGVj aG8gUGxlYXNlIHVzZSBja3ViczIubWFrIHRvIGJ1aWxkIEMtS2VybWl0ICQoQ0tWRVIpIGZvciAy LjExQlNELgorCisjQ2hhcmxlcyBSaXZlciBEYXRhIFN5c3RlbXMgVW5pdmVyc2Ugd2l0aCBVTk9T IFZlcnNpb24gOS4yCitjcmRzOgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9y IENoYXJsZXMgUml2ZXIgRGF0YSBTeXN0ZW1zLi4uJworCW1ha2UgeGVybWl0IFwKKwkiQ0ZMQUdT ID0gLURBVFRTViAtRE5PQU5TSSAtRERJUkVOVCAtRExPTkdGTiAtRFRDUFNPQ0tFVCBcCisJLURM T0NLX0RJUj1cXFwiL3Vzci9zcG9vbC91dWNwXFxcIiAtRE5PU0VUUkVVIFwKKwktRHN1c3BlbmQ9 a3N1c3BlbmQgJChLRkxBR1MpIC1PIiAiTE5LRkxBR1MgPSIKKworI01pY3JvcG9ydCBTVi9BVCBm b3IgSUJNIFBDL0FUIDI4NiBhbmQgY2xvbmVzLCBTeXN0ZW0gViBSMi4KKyNUaGUgLU8gZmxhZyBt YXkgZmFpbCBvbiBzb21lIG1vZHVsZXMgKGxpa2UgY2t1dXMyLmMpLCBpbiB3aGljaCBjYXNlIHlv dQorI3Nob3VsZCBjb21waWxlIHRoZW0gYnkgaGFuZCwgb21pdHRpbmcgdGhlIC1PLiAgSWYgeW91 IGdldCAiaGFzaCB0YWJsZQorI292ZXJmbG93IiwgdHJ5IGFkZGluZyAtRE5PREVCVUcuCisjQWxz bywgcmVwb3J0ZWRseSB0aGlzIGNvbXBpbGVzIGJldHRlciB3aXRoIGdjYyB0aGFuIHdpdGggY2Mu CittcHN5c3Y6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgTWljcm9wb3J0 IFNWL0FUIDI4Ni4uLicKKwkkKE1BS0UpIHdlcm1pdCBcCisJIkNGTEFHUz0gLURBVFRTViAtRE5P TEVBUk4gJChLRkxBR1MpIC1PIC1NbCIgIkxOS0ZMQUdTID0gLU1sIgorCisjTWljcm9zb2Z0ICJY ZW5peC8yODYiIGUuZy4gZm9yIElCTSBQQy9BVAoreGVuaXg6CisJQGVjaG8gJ01ha2luZyBDLUtl cm1pdCAkKENLVkVSKSBmb3IgWGVuaXgvMjg2JworCSQoTUFLRSkgd2VybWl0IFwKKwkiQ0ZMQUdT PSAtRFhFTklYIC1ETk9GSUxFSCAtRE5PTEVBUk4gJChLRkxBR1MpIC1EdW5peCAtRiAzMDAwIC1p IiBcCisJIkxOS0ZMQUdTID0gLUYgMzAwMCAtaSIKKworI1BDL0lYLCBJbnRlcmFjdGl2ZSBDb3Jw IFN5c3RlbSBJSUkgZm9yIElCTSBQQy9YVAorcGNpeDoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0 ICQoQ0tWRVIpIGZvciBQQy9JWC4uLicKKwkkKE1BS0UpIHdlcm1pdCBcCisJIkNGTEFHUz0gLURQ Q0lYIC1ESVNJSUkgLUROT0xFQVJOICQoS0ZMQUdTKSBcCisJLURzZGF0YT1zZGF0YXggLU8gLWki ICJMTktGTEFHUyA9IC1pIgorCisjSW50ZWdyYXRlZCBTb2x1dGlvbnMgSW5jIFY4UyBWTUUgNjgw MjAKK2lzaToKKwlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIDQuMkJTRCBvbiBJ U0kuLi4KKwkkKE1BS0UpIHdlcm1pdCAiQ0MgPSBjYyIgXAorCSJDRkxBR1M9IC1EQlNENCAtRFRD UFNPQ0tFVCAtRElOQUREUlggLUREQ0xQT1BFTiAtRERFQlVHIC1ETk9TRVRSRVUgXAorCS1EQ0tf Q1VSU0VTIC1ETk9MRUFSTiAkKEtGTEFHUykiICJMSUJTID0gLWxjdXJzZXMgLWx0ZXJtY2FwIgor CisjSW50ZXJhY3RpdmUgQ29ycCB2ZXJzaW9uIG9mIEFUJlQgU3lzdGVtIElJSQorI2lzMzogKHZl cnkgb2xkLCBwcm9iYWJseSBub3Qgc3VmZmljaWVudCBmb3IgNUEgb3IgbGF0ZXIpCisjCUBlY2hv ICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIEludGVyYWN0aXZlIFN5c3RlbSBJSUkuLi4n CisjCW1ha2Ugd2VybWl0ICJDRkxBR1MgPSAtRElTSUlJIC1EZGF0YT1kYXRheCAtTyAtaSIgIkxO S0ZMQUdTID0gLWkiCisjVGhlIGZvbGxvd2luZyBzaG91bGQgd29yaywgdXNlIGl0IGlmIHlvdSBk b24ndCBoYXZlIGdjYy4KKyNVc2UgaXMzZ2NjIGlmIHlvdSBoYXZlIGdjYy4KK2lzMzoKKwlAZWNo byAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBJbnRlcmFjdGl2ZSBTeXN0ZW0gSUlJLi4u JworCSQoTUFLRSkgd2VybWl0IFwKKwkiQ0ZMQUdTPSAtRElTSUlJICQoS0ZMQUdTKSAtRGRhdGE9 ZGF0YXggLUROQVAgLURIREJVVUNQCisJLURMT0NLX0RJUj1cIi91c3Ivc3Bvb2wvdXVjcFwiIC1E U0lHVFlQPXZvaWQgLU8gLWkiICJMTktGTEFHUyA9IC1pIgorCisjSW50ZXJhY3RpdmUgVU5JWCBT eXN0ZW0gViBSMywgbm8gbmV0d29yayBzdXBwb3J0LiAgVXNlcyA8ZGlyZW50Lmg+IGFuZCBIb25l eQorI0RhbkJlciBVVUNQLiAgSWYgdGhpcyBlbnRyeSBkb2VzIG5vdCBjb21waWxlIGNvcnJlY3Rs eSwgdHJ5IGFueSBvciBhbGwgb2YgdGhlCisjZm9sbG93aW5nLiAgVGhlc2Ugc3VnZ2VzdGlvbnMg YWxzbyBhcHBseSBtb3JlIG9yIGxlc3MgdG8gdGhlIG90aGVyIGlzNXIzeHh4CisjZW50cmllcyB0 aGF0IGZvbGxvdyB0aGlzIG9uZS4KKyMgLiBSZW1vdmUgdGhlIFVJRF9UIGFuZCBHSURfVCBkZWZp bml0aW9ucywgb3IgY2hhbmdlIHRoZW0gYXMgcmVxdWlyZWQuCisjIC4gQ2hhbmdlIC1ERElSRU5U IHRvIC1EU0RJUkVOVC4KKyMgLiBBZGQgLURTSUdUWVA9dm9pZC4KKyMgLiBSZW1vdmUgLWcgZnJv bSBMTktGTEFHUy4KKyMgLiBBZGQgLUROT0FOU0kgdG8gcmVtb3ZlIGNvbXBpbGVyIGNvbXBsYWlu dHMgYWJvdXQgQU5TSSBDIGNvbnN0cnVjdGlvbnMKKyMgLiBBZGQgb3RoZXIgLUROT3h4eCdzIHRv IHNhdmUgc3BhY2UgKGUuZy4gLUROT0NTRVRTKQorIyBTZWUgdGhlIG5leHQgZmV3IG1ha2VmaWxl IGVudHJpZXMgZm9yIHJlbGF0ZWQgZXhhbXBsZXMuCisjIEFsc28gc2VlIHN5czVyMzJpcyBmb3Ig bWFraW5nIGEgcG9ydGFibGUgaTM4NiBTVlIzIGJpbmFyeS4KK2lzNXIzOgorCUBlY2hvICdNYWtp bmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIEludGVyYWN0aXZlIDM4Ni9peCBvciBsYXRlci4uLicK KwlAZWNobyAnSWYgdGhpcyBkb2VzIG5vdCB3b3JrIHBsZWFzZSByZWFkIHRoZSBtYWtlZmlsZSBl bnRyeS4nCisJJChNQUtFKSB3ZXJtaXQgXAorCSJDRkxBR1MgPSAtRFNWUjMgLURESVJFTlQgLURI REJVVUNQIC1nIC1ETk9DU0VUUyAtRE5PUkVBTFBBVEggXAorCS1EVUlEX1Q9dXNob3J0IC1ER0lE X1Q9dXNob3J0IC1ESTM4NklYICQoS0ZMQUdTKSIgXAorCSJMTktGTEFHUyA9IC1nIgorCisjSW50 ZXJhY3RpdmUgQ29ycCBTeXN0ZW0gU3lzdGVtIFYgUjMgd2l0aCBnY2MKK2lzM2djYzoKKwlAZWNo byAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBJbnRlcmFjdGl2ZSBTeXN0ZW0gViBSMyAv IGdjYy4uLicKKwkkKE1BS0UpIHdlcm1pdCBDQz1nY2MgQ0MyPWdjYyBcCisJJ0NGTEFHUyA9IC1E X1NZU1YzIC1ESVNJSUkgLURkYXRhPWRhdGF4IC1ETkFQIC1ESERCVVVDUCAtRE5PUkVBTFBBVEgg XAorCS1ETE9DS19ESVI9XCIvdXNyL3Nwb29sL3V1Y3BcIiAtRFNJR1RZUD12b2lkIC1PJyAiTE5L RkxBR1MgPSIKKworI0ludGVyYWN0aXZlIFVOSVggU3lzdGVtIFYgUjMsIFBPU0lYIHZhcmlhbnQu ICBVbnRlc3RlZC4KKyNVc2VzIGRpcmVudC5oIGFuZCBIb25leSBEYW5CZXIgdXVjcC4gIFJlYWQg Y29tbWVudHMgaW4gaXM1cjMgZW50cnkuCitpczVyM3A6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1p dCAkKENLVkVSKSBmb3IgSW50ZXJhY3RpdmUgMzg2L2l4IG9yIGxhdGVyLi4uJworCSQoTUFLRSkg d2VybWl0IFwKKwkiQ0ZMQUdTPSAtRFNWUjMgLURESVJFTlQgLURIREJVVUNQIC1nIC1ETk9DU0VU UyAtRE5PUkVBTFBBVEggXAorCS1ESTM4NklYIC1EUE9TSVggJChLRkxBR1MpIiAiTE5LRkxBR1M9 IiAiTElCUz0tbGNwb3NpeCIKKworI0ludGVyYWN0aXZlIFVOSVggU1ZSMyAyLjIuMSwgam9iIGNv bnRyb2wsIGN1cnNlcywgbm8gbmV0LCBnY2MuCitpczVyM2djYzoKKwkkKE1BS0UpIHdlcm1pdCBD Qz1nY2MgQ0MyPWdjYyBcCisJIkNGTEFHUz0tZyAtcG9zaXggLURTVlIzIC1ERElSRU5UIC1ETk9S RUFMUEFUSCBcCisJLURIREJVVUNQIC1PIC1ETk9DU0VUUyAtREkzODZJWCAtRFNWUjNKQyAtRENL X0NVUlNFUyBcCisJJChLRkxBR1MpIiBMTktGTEFHUz0iLXBvc2l4IiBMSUJTPSItbGN1cnNlcyAt bGNfcyIKKworI0ludGVyYWN0aXZlIFVOSVggU3lzdGVtIFYgUjMgd2l0aCBUQ1AvSVAgbmV0d29y ayBzdXBwb3J0LgorI05lZWRzIC1saW5ldCBmb3IgbmV0IGZ1bmN0aW9ucy4gIHNpZ25hbCgpIGlz IHZvaWQgcmF0aGVyIHRoYW4gaW50LgorI1VzZXMgZGlyZW50LmggYW5kIEhvbmV5IERhbkJlciB1 dWNwLiBSZWFkIGNvbW1lbnRzIGluIGlzNXIzIGVudHJ5LgorI0Fsc28gc2VlIGlzNXIzbmV0MiBp ZiB5b3UgaGF2ZSB0cm91YmxlIHdpdGggdGhpcyBlbnRyeS4KK2lzNXIzbmV0OgorCUBlY2hvICdN YWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIEludGVyYWN0aXZlIDM4Ni9peC4uLicKKwlAZWNo byAnSWYgdGhpcyBkb2VzIG5vdCB3b3JrIHBsZWFzZSByZWFkIHRoZSBtYWtlZmlsZSBlbnRyeS4n CisJJChNQUtFKSB3ZXJtaXQgQ0M9IiQoQ0MpIiBDQzI9IiQoQ0MyKSIgXAorCSJDRkxBR1MgPSAt RFNWUjMgLURESVJFTlQgLURIREJVVUNQIC1EVENQU09DS0VUIC1ETk9SRUFMUEFUSCBcCisJLURJ Mzg2SVggJChLRkxBR1MpIC1PIiAiTElCUyA9IC1saW5ldCIKKworaXM1cjNuZXRnY2M6CisJJChN QUtFKSBpczVyM25ldCBDQz1nY2MgQ0MyPWdjYworCisjSW50ZXJhY3RpdmUgVU5JWCBTeXN0ZW0g ViBSMywgbm8gam9iIGNvbnRyb2wsIHNpZ25hbCgpIHZvaWQgcmF0aGVyIHRoYW4gaW50LgorI1Vz ZXMgZGlyZW50LmggYW5kIEhvbmV5IERhbkJlciB1dWNwLiAgTmVlZHMgLWxpbmV0IGZvciBuZXQg ZnVuY3Rpb25zLgorI1JlYWQgY29tbWVudHMgaW4gaXM1cjMgZW50cnkuICBVc2UgdGhpcyBlbnRy eSBpZiBpczVyM25ldCBmYWlscy4KKyNTYXZlcyBzb21lIHNwYWNlIGJ5IHN0cmlwcGluZyAoLXMp IGFuZCB1c2luZyBzaGFyZWQgbGlicmFyeSAoLWxjX3MpLgoraXM1cjNuZXQyOgorCUBlY2hvICdN YWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIEludGVyYWN0aXZlIDM4Ni9peC4uLicKKwkkKE1B S0UpIHdlcm1pdCBcCisJIkNGTEFHUyA9IC1EU1ZSMyAtRERJUkVOVCAtREhEQlVVQ1AgLURUQ1BT T0NLRVQgLUROT0pDIC1ETk9SRUFMUEFUSCBcCisJLURTSUdUWVA9dm9pZCAtRE5PQU5TSSAtREkz ODZJWCAkKEtGTEFHUykgLU8iIFwKKwkiTE5LRkxBR1M9IC1zIiAiTElCUyA9IC1saW5ldCAtbGNf cyIKKworI0ludGVyYWN0aXZlIFVOSVggU3lzdGVtIFYgUjMgKHZlcnNpb24gMi4yIG9yIGxhdGVy KSB3aXRoIGpvYiBjb250cm9sICYgY3Vyc2VzLgorI1VzZXMgZGlyZW50LmggYW5kIEhvbmV5IERh bkJlciBVVUNQLgoraXM1cjNqYzoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZv ciBJbnRlcmFjdGl2ZSBVbml4IDIuMiBvciBsYXRlci4uLicKKwkkKE1BS0UpIHdlcm1pdCBDQz0i JChDQykiIENDMj0iJChDQzIpIiBcCisJIkNGTEFHUyA9IC1EU1ZSMyAtRERJUkVOVCAtREhEQlVV Q1AgLU8gLUROT0NTRVRTIC1ETk9SRUFMUEFUSCBcCisJLURVSURfVD11c2hvcnQgLURHSURfVD11 c2hvcnQgLURJMzg2SVggLURTVlIzSkMgLURDS19DVVJTRVMgXAorCS1EUE9TSVhfSkMgLURDS19S RURJUiAtRENLX1BPTEwgLUREQ0xHRVRDV0QgXAorCSQoS0ZMQUdTKSIgIkxJQlM9LWxjdXJzZXMg LWxjX3MgLWxpbmV0IgorCitpczVyM2pjZ2NjOgorCSQoTUFLRSkgaXM1cjNqYyBDQz0iZ2NjIC1E Q0tfQU5TSUxJQlMgLUREQ0dQV05BTSAtTzQiIENDMj1nY2MgXAorCUtGTEFHUz0iJChLRkxBR1Mp IiBMTktGTEFHUz0iJChMTktGTEFHUykiCisKKyNTdW5zb2Z0L0ludGVyYWN0aXZlIFVOSVggU3lz dGVtIFYgUjMgKHZlcnNpb24gMi4yIG9yIGxhdGVyKQorI3dpdGggam9iIGNvbnRyb2wsIGN1cnNl cywgYW5kIFRDUC9JUCBuZXR3b3JraW5nLgorI1VzZXMgZGlyZW50LmggYW5kIEhvbmV5IERhbkJl ciBVVUNQLgoraXM1cjNuZXRqYzoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZv ciBJbnRlcmFjdGl2ZSBVbml4IDIuMiBvciBsYXRlci4uLicKKwkkKE1BS0UpIHdlcm1pdCBDQz0i JChDQykiIENDMj0iJChDQzIpIiBcCisJIkNGTEFHUyA9IC1EU1ZSMyAtRERJUkVOVCAtREhEQlVV Q1AgLU8gLUROT0NTRVRTIC1ETk9SRUFMUEFUSCBcCisJLURVSURfVD11c2hvcnQgLURHSURfVD11 c2hvcnQgLURJMzg2SVggLURTVlIzSkMgLURDS19DVVJTRVMgXAorCS1EUE9TSVhfSkMgLURDS19S RURJUiAtRFRDUFNPQ0tFVCAtRFNFTEVDVCBcCisJJChLRkxBR1MpIiAiTElCUz0tbGluZXQgLWxj dXJzZXMgLWxjX3MiCisKK2lzNXIzbmV0amNnY2M6CisJJChNQUtFKSBpczVyM25ldGpjIENDPSJn Y2MgLURDS19BTlNJTElCUyAtRERDR1BXTkFNIC1PNCIgQ0MyPWdjYyBcCisJS0ZMQUdTPSIkKEtG TEFHUykiIExOS0ZMQUdTPSIkKExOS0ZMQUdTKSIKKworI01hc3Njb21wIFN5c3RlbSBJSUkKK3J0 dToKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBNYXNzY29tcCBSVFUgU3lz dGVtIElJSS4uLicKKwkkKE1BS0UpIHdlcm1pdCBcCisJIkNGTEFHUz0gLVVGSU9OUkVBRCAtREFU VFNWICQoS0ZMQUdTKSAtTyIgIkxOS0ZMQUdTID0iICJMSUJTPSAtbGpvYnMiCisKKyNNYXNzY29t cC9Db25jdXJyZW50IFJUVSA0LjAgb3IgbGF0ZXIsIEJlcmtlbGV5IGVudmlyb25tZW50LgorI0lu Y2x1ZGVzIDxuZGlyLmg+ID0gL3Vzci9pbmNsdWRlL25kaXIuaAorI05vdGUgIkxJQlMgPSAtbG5k aXIiIG1pZ2h0IG5vdCBiZSBuZWNlc3NhcnkgYmVjYXVzZSBvZiAidWNiIG1ha2UiLgorcnR1YnNk OgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIE1hc3Njb21wIFJUVSA0LjFB Li4uJworCXVjYiBtYWtlIHdlcm1pdCBcCisJIkNGTEFHUz0gLURCU0Q0IC1EUlRVIC1ETkRJUiAt REhEQlVVQ1AgLURUQ1BTT0NLRVQgJChLRkxBR1MpIiBcCisJIkxJQlMgPSAtbG5kaXIiCisKKyNN YXNzY29tcC9Db25jdXJyZW50IFJUVSA0LjAgb3IgbGF0ZXIsIHNhbWUgYXMgYWJvdmUsCisjSW5j bHVkZXMgInVzci9saWIvbmRpci5oIgorI05vdGUgIkxJQlMgPSAtbG5kaXIiIG1pZ2h0IG5vdCBi ZSBuZWNlc3NhcnkgYmVjYXVzZSBvZiAidWNiIG1ha2UiLgorcnR1YnNkMjoKKwlAZWNobyAnTWFr aW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBNYXNzY29tcCBSVFUgNC4xQS4uLicKKwl1Y2IgbWFr ZSB3ZXJtaXQgXAorCSJDRkxBR1M9IC1EQlNENCAtRFJUVSAtRFhORElSIC1ESERCVVVDUCAkKEtG TEFHUykiIFwKKwkiTElCUyA9IC1sbmRpciIKKworI01hc3Njb21wL0NvbmN1cnJlbnQgUlRVIDQu MCBvciBsYXRlciwgc2FtZSBhcyBhYm92ZSwKKyNJbmNsdWRlcyA8c3lzL25kaXIuaD4KKyNOb3Rl ICJMSUJTID0gLWxuZGlyIiBtaWdodCBub3QgYmUgbmVjZXNzYXJ5IGJlY2F1c2Ugb2YgInVjYiBt YWtlIi4KK3J0dWJzZDM6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgTWFz c2NvbXAgUlRVIDQueCBCU0QuLi4nCisJdWNiIG1ha2Ugd2VybWl0ICJDRkxBR1M9IC1EQlNENCAt RFJUVSAtREhEQlVVQ1AgJChLRkxBR1MpIiBcCisJIkxJQlMgPSAtbG5kaXIiCisKKyNNYXNzY29t cC9Db25jdXJyZW50IFJUVSA0LjAgb3IgbGF0ZXIsIFN5c3RlbSBWIFIyLCB1c2luZyA8ZGlyZW50 Lmg+LgorI0luIGNhc2Ugb2YgcHJvYmxlbXMsIGFkZCBiYWNrIHRoZSAtRFJUVSBzd2l0Y2guCisj SW4gY2FzZSAtRFRDUFNPQ0tFVCBnaXZlcyB0cm91YmxlLCByZW1vdmUgaXQuCitydHVzNToKKwlA ZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBNYXNzY29tcCBSVFUgNC54Li4uJwor CSQoTUFLRSkgd2VybWl0IFwKKwkiQ0ZMQUdTPSAtREFUVFNWIC1ESERCVVVDUCAtRERJUkVOVCAt RFRDUFNPQ0tFVCAkKEtGTEFHUykiCisKKyNNYXNzY29tcC9Db25jdXJyZW50IFJUVSA0LngsIFN5 c3RlbSBWIFIzLCB1c2luZyA8ZGlyZW50Lmg+LgorI1VzZSB0aGlzIG9uZSBpZiBydHVzNSBnaXZl cyB3YXJuaW5ncyBhYm91dCBwb2ludGVyIHR5cGUgbWlzbWF0Y2hlcy4KKyNJbiBjYXNlIG9mIHBy b2JsZW1zLCBhZGQgYmFjayB0aGUgLURSVFUgc3dpdGNoLgorcnR1czVyMzoKKwlAZWNobyAnTWFr aW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBNYXNzY29tcCBSVFUgU3lzIFYgUjMuLi4nCisJJChN QUtFKSB3ZXJtaXQgIkNGTEFHUz0gLURTVlIzIC1ESERCVVVDUCAtRERJUkVOVCAkKEtGTEFHUyki CisKKyNERUMgUHJvLTN4eCB3aXRoIFByby9WZW5peCBWMS4wIG9yIFYxLjEKKyMgUmVxdWlyZXMg Y29kZS1tYXBwaW5nIG9uIG5vbi1JJkQtc3BhY2UgMTEvMjMgcHJvY2Vzc29yLCBwbHVzIHNvbWUK KyMgZmlkZGxpbmcgdG8gZ2V0IGludGVycnVwdCB0YXJnZXRzIGludG8gcmVzaWRlbnQgY29kZSBz ZWN0aW9uLgorIyBUaGlzIGFsbW9zdCBjZXJ0YWlubHkgZG9lc24ndCB3b3JrIGFueSBtb3JlLgor cHJvdngxOgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIERFQyBQcm8tM3h4 LCBQcm8vVmVuaXggMS54Li4uJworCSQoTUFLRSkgd2FydCAiQ0ZMQUdTPSAtRFBST1ZYMSAkKEtG TEFHUykiICJMTktGTEFHUz0gIgorCSQoTUFLRSkgd2VybWl0ICJDRkxBR1MgPSAtRFBST1ZYMSAt RE5PRklMRUggLW1kNzgwIiBcCisJCSJMTktGTEFHUz0gLXUgX3NsZWVwIC1sYyAtbWQ3ODAiCisK KyNOaXhkb3JmIFRhcmdvbi8zMS4KKyNBVCZUIFVOSVggU3lzdGVtIFYgUjMsIHNpZ25hbCgpIGlz IHZvaWQgcmF0aGVyIHRoYW4gaW50LgorI1VzZXMgZGlyZW50Lmggd2l0aG91dCBIb25leSBEYW5C ZXIgdXVjcC4KK3QzMXRvczQweDoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZv ciBUYXJnb24vMzEgd2l0aCBUT1MgNC4wLnh4Li4uJworCQkkKE1BS0UpIHdlcm1pdCBcCisJCSJD RkxBR1M9IC1EU1ZSMyAtRERJUkVOVCAkKEtGTEFHUykgLU8iIFwKKwkJIkxOS0ZMQUdTPSIKKwor I05DUiBUb3dlciAxNjMyLCBPUyAxLjAyCit0b3dlcjE6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1p dCAkKENLVkVSKSBmb3IgTkNSIFRvd2VyIDE2MzIsIE9TIDEuMDIuLi4nCisJJChNQUtFKSB3ZXJt aXQgIkNGTEFHUz0gLURUT1dFUjEgJChLRkxBR1MpIgorCisjTkNSIFRvd2VyIDMyLCBPUyBSZWxl YXNlIDEueHgueHgKK3Rvd2VyMzItMToKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIp IGZvciBOQ1IgVG93ZXIgMzIgUmVsIDEgU3lzdGVtIFYgUjIuLi4nCisJQGVjaG8gJ0FkZCBLRkxB R1M9LURJU0RJUkJVRyBpZiB5b3UgZ2V0IGVycm9ycyBhYm91dCBTX0lTUkVHL1NfSVNESVIuJwor CSQoTUFLRSkgd2VybWl0IFwKKwkiQ0ZMQUdTID0gLURBVFRTViAkKEtGTEFHUykgLU8iICJMTktG TEFHUyA9IC1uIgorCisjTkNSIFRvd2VyIDMyLCBPUyBSZWxlYXNlIDIueHgueHgKK3Rvd2VyMzIt MjoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBOQ1IgVG93ZXIgMzIgUmVs IDIgU3lzdGVtIFYgUjIuLi4nCisJJChNQUtFKSB3ZXJtaXQgXAorCSJDRkxBR1MgPSAtREFUVFNW IC1ESERCVVVDUCAkKEtGTEFHUykgLU8yIiBcCisJIkxOS0ZMQUdTID0gLW4iCisKKyNOQ1IgVG93 ZXIgMzIsIE9TIFJlbGVhc2VzIGJhc2VkIG9uIFN5c3RlbSBWIFIzCisjRG9uJ3QgYWRkIC1ETkFQ IChkb2Vzbid0IHdvcmsgcmlnaHQpIG9yIC1EUkRDSEsgKG5vdCBhdmFpbGFibGUgaW4gbGliYyku Cit0b3dlcjMyOgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIE5DUiBUb3dl ciAzMiBTeXN0ZW0gViBSMy4uLicKKwkkKE1BS0UpIHdlcm1pdCBcCisJIkNGTEFHUyA9IC1EU1ZS MyAtRERJUkVOVCAtREhEQlVVQ1AgLUROT1NZU0lPQ1RMSCAkKEtGTEFHUykgXAorCS1EVUlEX1Q9 dXNob3J0IC1ER0lEX1Q9dXNob3J0IC1PMSIKKworI05DUiBUb3dlciAzMiwgT1MgUmVsZWFzZXMg YmFzZWQgb24gU3lzdGVtIFYgUjMKK3Rvd2VyMzJnOgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQg JChDS1ZFUikgZm9yIE5DUiBUb3dlciAzMiBTeXN0ZW0gViBSMywgZ2NjLi4uJworCSQoTUFLRSkg d2VybWl0ICJDQyA9IGdjYyIgXAorCSJDRkxBR1MgPSAtRFNWUjMgLURESVJFTlQgLURIREJVVUNQ IC1ETk9TWVNJT0NUTEggJChLRkxBR1MpIFwKKwlEVUlEX1Q9dXNob3J0IC1ER0lEX1Q9dXNob3J0 IC1PIC1mc3RyZW5ndGgtcmVkdWNlIC1mb21pdC1mcmFtZS1wb2ludGVyIgorCisjRm9ydHVuZSAz MjoxNiwgRm9yOlBybyAxLjggKG1vc3RseSBsaWtlIDQuMWJzZCkKK2Z0MTg6CisJQGVjaG8gJ01h a2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgRm9ydHVuZSAzMjoxNiBGb3I6UHJvIDEuOC4uLicK KwkkKE1BS0UpIHdlcm1pdCBcCisJIkNGTEFHUz0gLUROT0RFQlVHIC1EQlNENCAtREZUMTggLURO T0ZJTEVIICQoS0ZMQUdTKSBcCisJLURQSURfVD1zaG9ydCIKKworI0ZvcnR1bmUgMzI6MTYsIEZv cjpQcm8gMi4xIChtb3N0bHkgbGlrZSA0LjFic2QpLgorI1RoZSBtb2R1bGVzIHRoYXQgYnJlYWsg dGhlIG9wdGltaXplciBhcmUgY29tcGlsZWQgc2VwYXJhdGVseS4KK2Z0MjE6CisJQGVjaG8gJ01h a2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgRm9ydHVuZSAzMjoxNiBGb3I6UHJvIDIuMS4uLicK KwkkKE1BS0UpIGNrdXVzeC4kKEVYVCkgIkNGTEFHUz0gLUROT0RFQlVHIC1EQlNENCAtREZUMjEg LUROT0ZJTEVIIFwKKwktU1lNIDgwMCAgLURDS19DVVJTRVMgJChLRkxBR1MpIC1EUElEX1Q9c2hv cnQiIFwKKwkiTE5LRkxBR1M9IC1uIC1zIiAiTElCUz0gLWxjdXJzZXMgLWx0ZXJtY2FwIC1sdiAt bG5ldCIKKwkkKE1BS0UpIGNrdXhsYS4kKEVYVCkgIkNGTEFHUz0gLUROT0RFQlVHIC1EQlNENCAt REZUMjEgLUROT0ZJTEVIIFwKKwktU1lNIDgwMCAgLURDS19DVVJTRVMgJChLRkxBR1MpIC1EUElE X1Q9c2hvcnQiIFwKKwkiTE5LRkxBR1M9IC1uIC1zIiAiTElCUz0gLWxjdXJzZXMgLWx0ZXJtY2Fw IC1sdiAtbG5ldCIKKwkkKE1BS0UpIGNrdWRpYS4kKEVYVCkgIkNGTEFHUz0gLUROT0RFQlVHIC1E QlNENCAtREZUMjEgLUROT0ZJTEVIIFwKKwktU1lNIDgwMCAgLURDS19DVVJTRVMgJChLRkxBR1Mp IC1EUElEX1Q9c2hvcnQiIFwKKwkiTE5LRkxBR1M9IC1uIC1zIiAiTElCUz0gLWxjdXJzZXMgLWx0 ZXJtY2FwIC1sdiAtbG5ldCIKKwkkKE1BS0UpIHdlcm1pdCBcCisJIkNGTEFHUz0gLU8gLUROT0RF QlVHIC1EQlNENCAtREZUMjEgLUROT0ZJTEVIIC1TWU0gODAwIFwKKwktRENLX0NVUlNFUyAkKEtG TEFHUykgLURQSURfVD1zaG9ydCIgXAorCSJMTktGTEFHUz0gLW4gLXMiICJMSUJTPSAtbGN1cnNl cyAtbHRlcm1jYXAgLWx2IC1sbmV0IgorCisjVmFsaWQgU2NhbGRzdGFyCisjQmVya2VsZXlpc2gs IGJ1dCBuZWVkIHRvIGNoYW5nZSBzb21lIHZhcmlhYmxlIG5hbWVzLgordmFsaWQ6CisJQGVjaG8g J01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgVmFsaWQgU2NhbGRzdGFyLi4uJworCSQoTUFL RSkgd2VybWl0IFwKKwkiQ0ZMQUdTPSAtREJTRDQgLUROT0RFQlVHIC1ETk9UTE9HIC1EY2M9Y2N4 IC1ERlJFQUQ9MSAkKEtGTEFHUykiCisKKyNJQk0gSVgvMzcwIG9uIElCTSAzNzAgU2VyaWVzIG1h aW5mcmFtZXMKKyNNb3N0bHkgbGlrZSBzeXMzLCBidXQgc2hvdWxkIGJ1ZmZlciBwYWNrZXRzLgor aXgzNzA6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgSUJNIElYLzM3MC4u LicKKwkkKE1BS0UpIHdlcm1pdCAiQ0ZMQUdTID0gLURJWDM3MCAtREFUVFNWICQoS0ZMQUdTKSAt aSAtTyIgXAorCSJMTktGTEFHUyA9IC1pIgorCisjQW1kYWhsIFVUUyAyLjQgb24gSUJNIDM3MCBz ZXJpZXMgY29tcGF0aWJsZSBtYWluZnJhbWVzLgorI01vc3RseSBsaWtlIFY3LCBidXQgY2FuJ3Qg ZG8gaW5pdHJhd3EoKSBidWZmZXIgcGVla2luZy4KK3V0czI0OgorCUBlY2hvICdNYWtpbmcgQy1L ZXJtaXQgJChDS1ZFUikgZm9yIEFtZGFobCBVVFMgMi40Li4uJworCSQoTUFLRSkgd2VybWl0ICJD RkxBR1M9LURWNyAtRFBST0NOQU1FPVxcXCIkKFBST0MpXFxcIiBcCisJLURVVFMyNCAtREJPT1RO QU1FPVxcXCIkKEJPT1RGSUxFKVxcXCIgLUROUFJPQ05BTUU9XFxcIiQoTlBST0MpXFxcIiBcCisJ LUROUFRZUEU9JChOUFRZUEUpICQoRElSRUNUKSAkKEtGTEFHUykiCisKKyNBbWRhaGwgVVRTViBV TklYIFN5c3RlbSBWID0gU3lzdGVtIFYgUjIgb3IgZWFybGllci4KK3V0c3Y6CisJQGVjaG8gJ01h a2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgQW1kYWhsIFVUU1YuLi4nCisJJChNQUtFKSB3ZXJt aXQgXAorCSJDRkxBR1MgPSAtRFVUU1YgJChLRkxBR1MpIC1pIC1PIiAiTE5LRkxBR1MgPSAtaSIK KworI0FtZGFobCBVVFNWIFVOSVggU3lzdGVtIFYgPSBTeXN0ZW0gViBSMiBvciBlYXJsaWVyLCB3 aXRoIFRDUCBzb2NrZXRzIGxpYnJhcnkuCit1dHN2dGNwOgorCUBlY2hvICdNYWtpbmcgQy1LZXJt aXQgJChDS1ZFUikgZm9yIEFtZGFobCBVVFNWIHcvdGNwLi4uJworCSQoTUFLRSkgd2VybWl0ICJD RkxBR1MgPSBcCisJLURUQ1BTT0NLRVQgLURVVFNWICQoS0ZMQUdTKSAtaSAtTyIgIkxOS0ZMQUdT ID0gLWkiIFwKKwkiTElCUyA9IC1sc29ja2V0IgorCisjQkJOIEMvNzAgd2l0aCBJT1MgMi4wCisj TW9zdGx5IEJlcmtlbGV5LWxpa2UsIGJ1dCB3aXRoIHNvbWUgQVRUaXNtcworYzcwOgorCUBlY2hv ICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIEJCTiBDLzcwIElPUyAyLjAuLi4nCisJJChN QUtFKSB3ZXJtaXQgIkNGTEFHUz0gLURCU0Q0IC1EQzcwICQoS0ZMQUdTKSIKKworI1ppbG9nIFpF VVMgMy4yMQoremlsb2c6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgWmls b2cgWmV1cyAzLjIxLi4uJworCSQoTUFLRSkgd2VybWl0IFwKKwkiQ0ZMQUdTID0gLURBVFRTViAt RFpJTE9HIC1ETk9ERUJVRyAkKEtGTEFHUykgLWkgLU8iIFwKKwkiTE5LRkxBR1MgPSAtaSAtbHB3 IgorCisjV2hpdGVjaGFwZWwgTUctMSBHZW5peCAxLjMKK3doaXRlOgorCUBlY2hvICdNYWtpbmcg Qy1LZXJtaXQgJChDS1ZFUikgZm9yIFdoaXRlY2hhcGVsIE1HLTEgR2VuaXggMS4zLi4uJworCUB0 b3VjaCBja2Nwcm8uYworCSQoTUFLRSkgd2VybWl0ICJDRkxBR1M9IC1EQlNENCAtRHprc2VsZigp PTAgICQoS0ZMQUdTKSIKKworI1BpeGVsIDEwMDAKK3BpeGVsOgorCUBlY2hvICdNYWtpbmcgQy1L ZXJtaXQgJChDS1ZFUikgZm9yIFBpeGVsIDEwMDAuLi4nCisJJChNQUtFKSB3ZXJtaXQgIkNGTEFH Uz0gLURCU0Q0IC1EemtzZWxmKCk9MCAkKEtGTEFHUykiCisKK3B0eDoKKwkkKE1BS0UpICJNQUtF PSQoTUFLRSkiIGR5bml4cHR4MTIKKworI0NEQyBWWC9WRSA1LjIuMQordnh2ZToKKwlAZWNobyAn TWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBDREMgVlgvVkUgNS4yLjEuLi4nCisJJChNQUtF KSB3ZXJtaXQgXAorCSJDRkxBR1MgPSAtREFUVFNWIC1EVlhWRSAtRE5PREVCVUcgLUROT1RMT0cg JChLRkxBR1MpIC1pIC1PIiBcCisJIkxOS0ZMQUdTID0gLWkiCisKKyNESUFCIERTOTAgb3IgTFVY T1IgQUJDLTkwMDAgd2l0aCBwcmUtNS4yIEROSVguICBTeXMgViB3aXRoIG5hcCgpIGFuZCByZGNo aygpLgorIyBuZCA9IG5vIG9wZW5kaXIoKSwgcmVhZGRpcigpLCBjbG9zZWRpcigpLCBldGMuCisj IFNvbWUgb2YgdGhlIG1vZHVsZXMgZmFpbCB0byBjb21waWxlIHdpdGggLU8uCitkbml4bmQ6CisJ QGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgRElBQiBEUzkwIHdpdGggdmVyeSBv bGQgRE5JWCA1LjIuJworCSQoTUFLRSkgd2VybWl0IFwKKwkiQ0ZMQUdTID0gLURBVFRTViAtRE5B UCAtRFJEQ0hLIC1ERENMUE9QRU4gXAorCS1VX19TVERDX18gJChLRkxBR1MpIgorCisjRElBQiBE UzkwIHdpdGggRE5JWCA1LjIuICBTeXMgViB3aXRoIG5hcCgpIGFuZCByZGNoaygpLgorIyBUaGlz IG9uZSBoYXMgb3BlbmRpcigpLCByZWFkZGlyKCksIGNsb3NlZGlyKCksIGV0Yy4KKyMgU29tZSBv ZiB0aGUgbW9kdWxlcyBmYWlsIHRvIGNvbXBpbGUgd2l0aCAtTy4KK2RuaXg6CisJQGVjaG8gJ01h a2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgRElBQiBEUzkwIHdpdGggb2xkIEROSVggNS4yLi4u JworCSQoTUFLRSkgd2VybWl0IFwKKwkiQ0ZMQUdTID0gLURBVFRTViAtRE5BUCAtRFJEQ0hLIC1E RElSRU5UICBcCisJLVVfX1NURENfXyAkKEtGTEFHUykiCisKKyNESUFCIERTOTAgd2l0aCBETklY IDUuMi4gIFN5cyBWIHdpdGggbmFwKCkgYW5kIHJkY2hrKCkuCisjIEFzIGFib3ZlLCBidXQgd2l0 aCBjdXJzZXMgYW5kIFRDUC9JUC4KKyMgWW91IG1pZ2h0IGdldCBjb21wbGFpbnRzIGFib3V0IHJl ZGVmaW5pdGlvbiBvZiBPX1JET05MWSwgZXRjLCBiZWNhdXNlCisjIG9mIGJ1Z3MgaW4gdGhlIERO SVggaGVhZGVyIGZpbGVzLCB3aGljaCBjYW4gYmUgZml4ZWQgYnkgYWRkaW5nICNpZm5kZWYuLi4K KyMgYXJvdW5kIHRoZSBvZmZlbmRpbmcgZGVmaW5pdGlvbnMgaW4gdGhlIGhlYWRlciBmaWxlcy4K K2RuaXhuZXRjOgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIERJQUIgRFM5 MCB3aXRoIG9sZCBETklYIDUuMi4uLicKKwkkKE1BS0UpIHdlcm1pdCBcCisJIkNGTEFHUyA9IC1E QVRUU1YgLUROQVAgLURSRENISyAtRERJUkVOVCAgXAorCS1EVENQU09DS0VUIC1EQ0tfQ1VSU0VT IC1JL3Vzci9pbmNsdWRlL2JzZCAtVV9fU1REQ19fICQoS0ZMQUdTKSIgXAorCSJMSUJTID0gLWxu IC1sY3Vyc2VzIgorCisjRElBQiBEUzkwIHdpdGggRE5JWCA1LjMgb3IgbGF0ZXIsIHdpdGggSERC IFVVQ1AsIG5hcCgpIGFuZCByZGNoaygpLgorZG5peDVyMzoKKwlAZWNobyAnTWFraW5nIEMtS2Vy bWl0ICQoQ0tWRVIpIGZvciBESUFCIERTOTAgd2l0aCBETklYIDUuMy4uLicKKwlAZWNobyAnd2l0 aCBIb25leSBEYW5CZXIgVVVDUCcKKwkkKE1BS0UpIHdlcm1pdCBcCisJIkNGTEFHUyA9IC1EU1ZS MyAtREhEQlVVQ1AgLUROQVAgLURSRENISyAtRERJUkVOVCBcCisJLURDS19DVVJTRVMgLURSRU5B TUUgJChLRkxBR1MpIC1PIiAiTElCUz0gLWxjdXJzZXMiCisKKyNESUFCIERTOTAgd2l0aCBETklY IDUuMyBvciBsYXRlciwgd2l0aCBIREIgVVVDUCwgbmFwKCkgYW5kIHJkY2hrKCkgKyBUQ1AvSVAK K2RuaXg1cjNuZXQ6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgRElBQiBE UzkwIHdpdGggRE5JWCA1LjMuLi4nCisJQGVjaG8gJ3dpdGggSG9uZXkgRGFuQmVyIFVVQ1AgYW5k IFRDUC9JUCcKKwkkKE1BS0UpIHdlcm1pdCBcCisJIkNGTEFHUyA9IC1EU1ZSMyAtREhEQlVVQ1Ag LUROQVAgLURSRENISyAtRERJUkVOVCBcCisJLURUQ1BTT0NLRVQgLURDS19DVVJTRVMgLURSRU5B TUUgJChLRkxBR1MpIC1PIFwKKwktSS91c3IvaW5jbHVkZS9ic2QiICJMSUJTID0gLWxuIC1sY3Vy c2VzIgorCisjRElBQiBEUzkwIHdpdGggRE5JWCA1LjMgMi4yIG9yIGxhdGVyLCB3aXRoIEhEQiBV VUNQLCBuYXAoKSBhbmQgcmRjaGsoKSwKKyNBTlNJIEMgY29tcGlsYXRpb24gYW5kIGxpYnJhcmll cy4KKyNOb3RlIHRoYXQgZm9yIEROSVggNS4zIDIuMiB5b3UgaGF2ZSB0byBjb3JyZWN0IGEgYnVn IGluIC91c3IvaW5jbHVkZS9zdGRsaWIuaDoKKyNjaGFuZ2UgImV4dGVybgl2b2lkIGZyZWUoY2hh ciAqc3RyKTsiCisjdG8gICAgICJleHRlcm4gdm9pZCBmcmVlKHZvaWQgKnN0cik7IgorI05PVEU6 IFRoaXMgYnVnIGlzIHJlcG9ydGVkbHkgZml4ZWQgaW4gRE5JWCA1LjMgMi4yLjEuCisjU2hvdWxk IHlvdSBnZXQgZmF0YWwgZXJyb3JzIGNhdXNlZCBieSBoYXJtbGVzcyBwb2ludGVyLXR5cGUgbWlz bWF0Y2hlcywKKyNsaWtlIGJldHdlZW4gc2lnbmVkIGFuZCB1bnNpZ25lZCBjaGFyLCBqdXN0IHJl bW92ZSAtWDcuCitkbml4NXIzYW5zaToKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIp IGZvciBESUFCIERTOTAgd2l0aCBETklYIDUuMy4uLicKKwlAZWNobyAnd2l0aCBBTlNJIEMgSG9u ZXkgRGFuQmVyIFVVQ1AnCisJJChNQUtFKSB3ZXJtaXQgXAorCSJDRkxBR1MgPSAtRFNWUjMgLURE SUFCIC1ESERCVVVDUCAtRE5BUCAtRFJEQ0hLIC1ERElSRU5UIFwKKwktRENLX0FOU0lMSUJTIC1E Q0tfQ1VSU0VTIC1EUkVOQU1FIC1PIC1YNyAtWDkgJChLRkxBR1MpIiBcCisJIkxJQlM9IC1sY3Vy c2VzIgorCisjRElBQiBEUzkwIHdpdGggRE5JWCA1LjMgMi4yIG9yIGxhdGVyLCB3aXRoIEhEQiBV VUNQLCBuYXAoKSBhbmQgcmRjaGsoKSwKKyMgKyBUQ1AvSVAsIEFOU0kgQyBjb21waWxhdGlvbiBh bmQgbGlicmFyaWVzLgorI1Nob3VsZCB5b3UgZ2V0IGZhdGFsIGVycm9ycyBjYXVzZWQgYnkgaGFy bWxlc3MgcG9pbnRlci10eXBlIG1pc21hdGNoZXMsCisjbGlrZSBiZXR3ZWVuIHNpZ25lZCBhbmQg dW5zaWduZWQgY2hhciwganVzdCByZW1vdmUgLVg3LgorZG5peDVyM2Fuc2luZXQ6CisJQGVjaG8g J01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgRElBQiBEUzkwIHdpdGggRE5JWCA1LjMuLi4n CisJQGVjaG8gJ3dpdGggQU5TSSBDIEhvbmV5IERhbkJlciBVVUNQJworCSQoTUFLRSkgd2VybWl0 IFwKKwkiQ0ZMQUdTID0gLURTVlIzIC1ERElBQiAtREhEQlVVQ1AgLUROQVAgLURSRENISyAtRERJ UkVOVCBcCisJLURUQ1BTT0NLRVQgLURDS19BTlNJTElCUyAtRENLX0NVUlNFUyAtRFJFTkFNRSAt TyAtWDcgLVg5ICQoS0ZMQUdTKSBcCisJLUkvdXNyL2luY2x1ZGUvYnNkIiAiTElCUz0gLWxuIC1s Y3Vyc2VzIgorCisjUmlkZ2UgMzIgd2l0aCBST1MgMy4yCityaWRnZTMyOgorCUBlY2hvICdNYWtp bmcgQy1LZXJtaXQgJChDS1ZFUikgUmlkZ2UgMzIgUk9TIDMuMicKKwkkKE1BS0UpIHdlcm1pdCBc CisJIkNGTEFHUyA9IC1EQVRUU1YgLUROT0ZJTEVIIC1ETk9ERUJVRyAtRE5PVExPRyAkKEtGTEFH UykgLWkgLU8iIFwKKwkiTE5LRkxBR1MgPSAtaSIKKworI0FsdG9zIDQ4NiwgNTg2LCBvciA5ODYg d2l0aCBYZW5peCAzLjAKK2FsdG9zOgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikg Zm9yIEFsdG9zIHg4NiB3aXRoIFhlbml4IDMuMC4uLicKKwkkKE1BS0UpIHdlcm1pdCBcCisJIkNG TEFHUz0gLURBVFRTViAtREE5ODYgLUROT0RFQlVHIC1ETk9UTE9HICQoS0ZMQUdTKSAtaSAtTyIg XAorCSJMTktGTEFHUz0gLWkiCisKKyNBbHRvcyA5ODYgd2l0aCBYZW5peCAzLjAsIGFzIGFib3Zl LCBidXQgY29tbWFuZC1saW5lIG9ubHksIG1pbmltYWwgc2l6ZS4KKyNGb3Igc3lzdGVtcyB3aXRo IHNtYWxsIG1lbW9yaWVzLiAgSXQgbWlnaHQgYWxzbyBiZSBuZWNlc3NhcnkgdG8gY2hvcCBjZXJ0 YWluCisjbW9kdWxlcyB1cCBpbnRvIHNtYWxsZXIgcGllY2VzLCBlLmcuIGNrdXVzMy02LCBiZWNh dXNlIG9mIHN5bWJvbCB0YWJsZQorI292ZXJmbG93LiAgIElmIHRoaXMgbWFrZWZpbGUgaXMgdG9v IGJpZyBvciBjb21wbGV4IGZvciB0aGUgQWx0b3MsIGNvbXBpbGUKKyNhbmQgbGluayBieSBoYW5k IG9yIHdyaXRlIHNoZWxsIHNjcmlwdHMuCithbHRvc2M6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1p dCAkKENLVkVSKSBmb3IgQWx0b3MgeDg2IFhlbml4IDMuMCwgcmVtb3RlLi4uJworCSQoTUFLRSkg d2VybWl0IFwKKwkiQ0ZMQUdTPSAtREFUVFNWIC1EQTk4NiAtRE5PREVCVUcgLUROT1RMT0cgLURO T1NDUklQVCAtRE5PRElBTCBcCisJLUROT0NTRVRTIC1ETk9BTlNJIC1ETk9NU0VORCAtRE5PU1BM IC1ETk9JQ1AgJChLRkxBR1MpIC1NbSAtTyIgXAorCSJMTktGTEFHUz0gLU1tIC1zIgorCisjQWx0 b3MgOTg2IHdpdGggWGVuaXggMy4wLCBhcyBhYm92ZSwgYnV0IGludGVyYWN0aXZlIG9ubHksIG1p bmltYWwgc2l6ZS4KK2FsdG9zaToKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZv ciBBbHRvcyB4ODYgWGVuaXggMy4wLCBsb2NhbC4uLicKKwkkKE1BS0UpIHdlcm1pdCBcCisJIkNG TEFHUz0gLURBVFRTViAtREE5ODYgLUROT0RFQlVHIC1ETk9UTE9HIC1ETk9TQ1JJUFQgLUROT0RJ QUwgXAorCS1ETk9DU0VUUyAtRE5PQU5TSSAtRE5PTVNFTkQgLUROT1NQTCAtRE5PQ01ETCAtRE5P RlJJTExTIC1ETk9IRUxQIFwKKwktRE5PU0VUS0VZICQoS0ZMQUdTKSAtTW0gLU8iICJMTktGTEFH Uz0gLU1tIC1zIgorCisjIEFsdG9zIEFDUzY4MDAwIDY4MDAwIFN5c3RlbSwgVU5JWCBTeXN0ZW0g MyBSZWxlYXNlIDIsIDUxMmsgbWVtb3J5LgorIyBhbHNvIG5lZWRzIGdldGN3ZCgpIGV4dGVybmFs IGZ1bmN0aW9uOyBzZWUgY2t1aW5zLnR4dCBmaWxlLgorIyBhbHNvLCBzeXMvdHlwZXMuaCBuZWVk ZWQgbW9kaWZ5aW5nOgorIyAgICNpZmRlZiBfX1NZU19UWVBFU19IX18sICNkZWZpbmUgLi4uLCAj ZW5kaWYKKyMgYWxzbywgY2t1dXMyLmMgTVVTVCBiZSBjb21waWxlZCBOT09QVCBlbHNlIHN5bWJv bCB0YWJsZSBpcyBkZXN0cm95ZWQhCisjIFN1Ym1pc3Npb24gYnkgUm9iZXJ0IFdlaW5lci9Qcm9n cmFtbWluZyBQbHVzLCByd2VpbmVyQHByb2dwbHVzLmNvbS4KKyMKK2FsdG9zMzoKKwlAZWNobyAn TWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBBbHRvcyBBQ1M2OGsgVU5JWCBTeXN0ZW0gSUlJ JworCSQoTUFLRSkgY2t1dXMyLiQoRVhUKSAiQ0ZMQUdTID0gLURBVFRTViAtRE5PQ1NFVFMgLURO T1NFVEtFWSAtRE5PSkMgXAorCS1ETk9ESUFMIC1ERENMUE9QRU4gLUROT1NDUklQVCAtRE5PSEVM UCAkKEtGTEFHUykgLWkiCisJJChNQUtFKSB3ZXJtaXQgXAorCSJDRkxBR1MgPSAtREFUVFNWIC1E Tk9DU0VUUyAtRE5PU0VUS0VZIC1ETk9KQyBcCisJLUROT0RJQUwgLUREQ0xQT1BFTiAtRE5PU0NS SVBUIC1ETk9IRUxQICQoS0ZMQUdTKSAtaSAtTyIgXAorCSJMTktGTEFHUyA9IC1pIiAiTElCUyA9 IGdldGN3ZC4kKEVYVCkiCisKKyNNSU5JWCAtIE9yaWdpbmFsIFBDIHZlcnNpb24gd2l0aCA2NEsr NjRLIGxpbWl0LgorIyBSZXBvcnRlZGx5LCB0aGUgbGlua2VyIChhc2xkKSBjYW4gcnVuIG91dCBv ZiBzcGFjZSB3aGlsZSBsaW5raW5nLiAgVGhlIG9ubHkKKyMgd2F5IGFyb3VuZCB0aGlzIGlzIHRv IG1ha2UgYSBjb3B5IG9mIGxpYmMuYSBmcm9tIHdoaWNoIGFsbCBtb2R1bGVzIHRoYXQgYXJlCisj IG5vdCB1c2VkIGJ5IEtlcm1pdCBhcmUgcmVtb3ZlZC4gIElmIHlvdSBoYXZlIHRyb3VibGUgY29t cGlsaW5nIG9yIHJ1bm5pbmcKKyMgd2FydCwgInRvdWNoIHdhcnQiLiAgSWYgdGhhdCBkb2Vzbid0 IGhlbHAsICJ0b3VjaCBja2Nwcm8uYyIuCisjIFRoZSB2ZXJzaW9uIGNvbmZpZ3VyZWQgYmVsb3cg aGFzIG5vIGludGVyYWN0aXZlIGNvbW1hbmQgcGFyc2VyLgorIyBJZiB5b3UgY2FuIGJ1aWxkIHRo aXMgdmVyc2lvbiBzdWNjZXNzZnVsbHksIG1heWJlIHRoZXJlIHdpbGwgYmUgcm9vbSBmb3IKKyMg YSBtaW5pbWFsIGludGVyYWN0aXZlIGNvbW1hbmQgcGFyc2VyIHRvbzsgdHJ5IHJlcGxhY2luZyAt RE5PSUNQIHdpdGgKKyMgLUROT1NQTCwgcGx1cyBldmVyeSBvdGhlciAtRE5PeHh4IGZsYWcgdGhl cmUgaXMsIGV4Y2VwdCBmb3IgLUROT0lDUAorIyAoc2VlIGNrY2NmZy50eHQpLgorbWluaXg6CisJ QGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgTUlOSVgsIG5vIGNvbW1hbmQgcGFy c2VyLi4uJworCUBlY2hvICdUT1RBTExZIFVOVEVTVEVEIScKKwkkKE1BS0UpIHdlcm1pdCBFWFQ9 cyBcCisJIkNGTEFHUz0gLURWNyAtRE1JTklYIC1pIC1EX01JTklYIC1EX1BPU0lYX1NPVVJDRSBc CisJLURQSURfVD1waWRfdCAtRFVJRF9UPXVpZF90IC1ER0lEX1Q9Z2lkX3QgLURTSUdfViBcCisJ LUROT1hNSVQgLUROT01TRU5EIC1ETk9GUklMTFMgLUROT0RJQUwgLUROT0hFTFAgLUROT0RFQlVH IC1ETk9UTE9HIFwKKwktRE5PU0NSSVBUIC1ETk9DU0VUUyAtRE5PSUNQIC1ETk9TRVRLRVkgJChL RkxBR1MpIiBcCisJIkxOS0ZMQUdTPSAtaSAtVCIKKworI01JTklYIC0gUEMgdmVyc2lvbiB3aXRo IDY0Sys2NEsgbGltaXQsIG5ldyAoYXMgeWV0IHVucmVsZWFzZWQpIEFDSyAyLjAgYmV0YSBDCisj Y29tcGlsZXIsIHdoaWNoIG91dHB1dHMgLm8gb2JqZWN0IGZpbGVzLCByYXRoZXIgdGhhbiAucy4g IEJ1dCAnbWFrZScgc3RpbGwKKyNleHBlY3RzIC5zIGZpbGVzLCBzbyBtdXN0IGJlIHBhdGNoZWQg dG8gdXNlIC5vLiAgVGVzdGVkIG9uIE1pbml4IDEuNS4xMC4KK21pbml4MTU6CisJQGVjaG8gJ01h a2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgTUlOSVggKG5ldyBBQ0sgMi4wIGNvbXBpbGVyKSwn CisJQGVjaG8gJ25vIGNvbW1hbmQgcGFyc2VyLi4uICBUT1RBTExZIFVOVEVTVEVEIScKKwkkKE1B S0UpIHdlcm1pdCBcCisJIkNGTEFHUz0gLURWNyAtRE1JTklYIC1pIC1EX01JTklYIC1EX1BPU0lY X1NPVVJDRSBcCisJLURQSURfVD1waWRfdCAtRFVJRF9UPXVpZF90IC1ER0lEX1Q9Z2lkX3QgLURT SUdfViAtRE5PRElBTCBcCisJLUROT0hFTFAgLUROT0RFQlVHIC1ETk9UTE9HIC1ETk9TQ1JJUFQg LUROT0NTRVRTIC1ETk9JQ1AgJChLRkxBR1MpIiBcCisJIkxOS0ZMQUdTPSAtaSAtVCIKKworI01J TklYMyAtIE1JTklYIDMuMCAobm8gVk0pIC0gTWF5LUF1ZyAyMDA1IChub3Qgc3VyZSBpZiB0aGlz IGV2ZXIgd29ya2VkLi4uKQorbWluaXgzOgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZF UikgZm9yIE1JTklYMy4uLicKKwkkKE1BS0UpIHdlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQo QCl9IFwKKwkiQ0ZMQUdTPSAtRFBPU0lYIC1ETk9VVUNQIC1ETk9MRUFSTiAkKEtGTEFHUykgLURN SU5JWDIgXAorCS1ETUlOSVgzIC1ETk9fUEFSQU1fSCAtRE5PU1lTTE9HIC1ETk9HRVRVU0VSU0hF TEwgXAorCS1ETk9JTklUR1JPVVBTIC1ETk9GVFJVTkNBVEUgLUROT0FSUk9XS0VZUyAtREROT1JF QUxQQVRIIFwKKwktRFRDUFNPQ0tFVCAtRE5PVElNRVpPTkUgLUROT0ZUUCAtRE5PX0ROU19TUlYg LU8iCisKKyNNSU5JWDMxNSAtIE1JTklYIDMgMS41IC0gSmFudWFyeSAyMDEwCittaW5peDMxNToK KwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBNaW5peCAzIDEuNS4uLicKKwkk KE1BS0UpIHdlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTPSAtRE1J TklYMzE1IC1EUE9TSVggLUROT1VVQ1AgLUROT0pDIC1ETk9MRUFSTiAkKEtGTEFHUykgXAorCS1E SEFWRV9PUEVOUFRZIC1ETk9fUEFSQU1fSCAtRE5PU1lTTE9HIC1ETk9HRVRVU0VSU0hFTEwgXAor CS1EU1lTVElNRUggLUROT0lOSVRHUk9VUFMgLUROT0ZUUlVOQ0FURSAtRE5PQVJST1dLRVlTIC1E Tk9SRUFMUEFUSCBcCisJLURUQ1BTT0NLRVQgLUROT1RJTUVaT05FIC1ETk9fRE5TX1NSViAtRE5P RlRQIC1PIgorCisjUEZVIENvbXBhY3QgQSBTZXJpZXMgVU5JWCBTeXN0ZW0gViBSMywgU1gvQSBU SVNQIFYxMC9MNTAgKEphcGFuKQorI01heWJlIHRoZSAtaSBsaW5rIG9wdGlvbiBzaG91bGQgYmUg cmVtb3ZlZD8KK3N4YWU1MDoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBQ RlUgU1gvQSBWMTAvTDUwLi4uJworCSQoTUFLRSkgeGVybWl0IFwKKwkiQ0ZMQUdTPSAtRFNWUjMg LURESVJFTlQgLURzeGFFNTAgLURUQ1BTT0NLRVQgJChLRkxBR1MpIC1pIC1PIiBcCisJIkxOS0ZM QUdTPSAiCisKKyNUZWt0cm9uaXggNjEzMCwgNDMxOSwgNDMwMSwgZXRjLCB3aXRoIFVUZWsgT1Ms IC91c3Ivc3Bvb2wvdXVjcC9MQ0suLy4uLgorI1RoZSBtb2RlbHMgdGhhdCBzdXBwb3J0IGhhcmR3 YXJlIGZsb3cgY29udHJvbC4KK3V0ZWs6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVS KSBmb3IgNC4yQlNEL1VUZWssIGhhcmR3YXJlIGZsb3cgY29udHJvbCcKKwkkKE1BS0UpIHdlcm1p dCBcCisJIkNGTEFHUz0gLU8gLURMQ0tESVIgLURCU0Q0IC1EVENQU09DS0VUIFwKKwktRFVURUsg LUREQ0xQT1BFTiAtRExPQ0tfRElSPVxcXCIvdXNyL3Nwb29sL3V1Y3AvTENLLlxcXCIgXAorCS1E VFJNQlVGTD0yMDQ4IC1EQ0tfRFRSQ1RTICQoS0ZMQUdTKSIKKworI1Rla3Ryb25peCA0MzE1LCA0 MzE2LCA0MzE3IHdpdGggVVRlayBPUywgL3Vzci9zcG9vbC91dWNwL0xDSy4vLi4uCisjVGhlIG1v ZGVscyB0aGF0IGRvIG5vdCBmdWxseSBzdXBwb3J0IGhhcmR3YXJlIGZsb3cgY29udHJvbC4KK3V0 ZWtub2h3ZmM6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgNC4yQlNEL1VU ZWssIG5vIGgvdyBmbG93IGNvbnRyb2wnCisJJChNQUtFKSB3ZXJtaXQgXAorCSJDRkxBR1M9IC1P IC1ETENLRElSIC1EQlNENCAtRFRDUFNPQ0tFVCBcCisJLURVVEVLIC1ERENMUE9QRU4gLURMT0NL X0RJUj1cXFwiL3Vzci9zcG9vbC91dWNwL0xDSy5cXFwiIFwKKwktRFRSTUJVRkw9MjA0OCAkKEtG TEFHUykiCisKKyNUZWt0cm9uaXggWEQ4OCB3aXRoICBVVGVrViBPUwordXRla3ZyMzoKKwlAZWNo byAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBUZWt0cm9uaXggWEQ4OCBVVGVrViBSMy4u LicKKwkkKE1BS0UpIHdlcm1pdCBcCisJIkNGTEFHUz0gLURTVlIzIC1ERElSRU5UIC1ESERCVVVD UCBcCisJLURUQ1BTT0NLRVQgLURTWVNVVElNRUggLURDS19DVVJTRVMgJChLRkxBR1MpIC1PIiBc CisJIkxJQlM9IC1sY3Vyc2VzIiAiTE5LRkxBR1M9IC1zIgorCisjUGVya2luLUVsbWVyIDMyMDAg WGVsb3MgUjAyIG9yIGVhcmxpZXIKK2Njb3AxOgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChD S1ZFUikgZm9yIFhlbG9zICYgUHVibGljIERvbWFpbiBEaXJlbnQgY2FsbHMnCisJQGVjaG8gJ29y IFN5c3RlbSBWIFIyIG9yIGVhcmxpZXIuLi4nCisJJChNQUtFKSB3ZXJtaXQgXAorCSJDRkxBR1Mg PSAtREFUVFNWIC1Edm9pZD1pbnQgLURESVJFTlQgLURDS19DVVJTRVMgXAorCSQoS0ZMQUdTKSAt TyIgIkxOS0ZMQUdTID0iICJMSUJTPSAtbGN1cnNlcyAtbHRlcm1saWIiCisKKyNFbmNvcmUsIFVN QVggNC4zIChCU0QpIGJ1dCB3aXRob3V0IGFjdWNudHJsIHByb2dyYW0uCitlbmNvcmU6CisJJChN QUtFKSAiTUFLRT0kKE1BS0UpIiB1bWF4NDMgIktGTEFHUz0kKEtGTEFHUykiCisKKyNFbmNvcmUs IGFzIGFib3ZlLCBidXQgd2l0aCBjdXJzZXMgZmlsZSB0cmFuc2ZlciBkaXNwbGF5IGluY2x1ZGVk LgorZW5jb3JlYzoKKwkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIHVtYXg0MyAiS0ZMQUdTPS1EQ0tf Q1VSU0VTICQoS0ZMQUdTKSIgXAorCSJMSUJTPSAtbGN1cnNlcyAtbHRlcm1jYXAiCisKKyNFbmNv cmUsIFVNQVggNC4zIChCU0QpIGJ1dCB3aXRob3V0IGFjdWNudHJsIHByb2dyYW0uCit1bWF4NDM6 CisJQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBFbmNvcmUgVU1BWCA0LjMuLi4K KwkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIFBBUkFMTEVMPTQgeGVybWl0IFwKKwkiQ0ZMQUdTPSAt REJTRDQzIC1ERU5DT1JFIC1EVENQU09DS0VUICQoS0ZMQUdTKSAtTyIKKworI0VuY29yZSwgVU1B WCA0LjIgKEJTRCkKK3VtYXg0MjoKKwlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9y IEVuY29yZSBVTUFYIDQuMi4uLgorCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgUEFSQUxMRUw9NCB4 ZXJtaXQgXAorCSJDRkxBR1M9IC1EQlNENCAtREVOQ09SRSAtRFRDUFNPQ0tFVCAkKEtGTEFHUykg LU8iCisKKyNFbmNvcmUgODhLIFVNQVggNS4zIHdpdGggVENQL0lQIHN1cHBvcnQKK2VuY29yZTg4 azoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBFbmNvcmUgODhLIFVNQVgg ViwgVENQL0lQLi4uJworCSQoTUFLRSkgeGVybWl0IFwKKwkiQ0ZMQUdTID0gLXEgZXh0PXBjYyAt RFNWUjMgLURUQ1BTT0NLRVQgLURESVJFTlQgXAorCS1ETk9HRVRJRF9QUk9UT1MgLURIREJVVUNQ ICQoS0ZMQUdTKSAtTyIgIkxOS0ZMQUdTID0iCisKKyNFbmNvcmUgODhLIFVNQVggNS4zIHdpdGgg VENQL0lQIHN1cHBvcnQKK2VuY29yZTg4a2djYzoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQo Q0tWRVIpIGZvciBFbmNvcmUgODhLIFVNQVggViwgVENQL0lQLCBnY2MuLi4nCisJJChNQUtFKSB4 ZXJtaXQgQ0M9Z2NjIENDMj1nY2MgXAorCSJDRkxBR1MgPSAtRFNWUjMgLURUQ1BTT0NLRVQgLURE SVJFTlQgXAorCS1ETk9HRVRJRF9QUk9UT1MgLURIREJVVUNQICQoS0ZMQUdTKSAtTyIgIkxOS0ZM QUdTID0iCisKKyNTT05ZIE5FV1MsIE5FV1MtT1MgNC4wMUMKK3NvbnluZXdzOgorCUBlY2hvIE1h a2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgU09OWSBORVdTLU9TIDQuMDFDLi4uCisJJChNQUtF KSB4ZXJtaXQgIkNGTEFHUz0gLURCU0Q0MyAtREFDVUNOVFJMIC1EVENQU09DS0VUIC1PIgorCisj UnVuIExpbnQgb24gdGhpcyBtZXNzIGZvciBzZWxlY3RlZCB2ZXJzaW9ucy4KKyNUaGVzZSBhcmUg cHJldHR5IG11Y2ggb2Jzb2xldGUgc2luY2UgQU5TSSBDIC8gZ2NjLgorbGludHN1bjoKKwlAZWNo byAnUnVubmluZyBMaW50IG9uIEMtS2VybWl0ICQoQ0tWRVIpIHNvdXJjZXMgZm9yIFN1bk9TIHZl cnNpb24uLi4nCisJbGludCAteCAtRFNVTk9TNCAtRERJUkVOVCAtRFRDUFNPQ0tFVCAtRFNBVkVE VUlEIFwKKwlja1tjdV0qLmMgPiBja3VrZXIubGludC5zdW4KKworbGludGJzZDoKKwlAZWNobyAn UnVubmluZyBMaW50IG9uIEMtS2VybWl0ICQoQ0tWRVIpIHNvdXJjZXMgZm9yIEJTRCA0LjIgdmVy c2lvbi4uJworCWxpbnQgLXggLURCU0Q0IC1EVENQU09DS0VUIGNrW2N1XSouYyA+IGNrdWtlci5s aW50LmJzZDQyCisKK2xpbnRzNToKKwlAZWNobyAnUnVubmluZyBMaW50IG9uIEMtS2VybWl0ICQo Q0tWRVIpIHNvdXJjZXMgZm9yIFN5cyBWIHZlcnNpb24uLi4nCisJbGludCAteCAtREFUVFNWIGNr W2N1XSouYyA+IGNrdWtlci5saW50LnM1CisKKyNXaG8gcmVtZW1iZXJzIFRFQ08/Citsb3ZlOgor CUBlY2hvICdOb3Qgd2FyPycKCmRpZmYgLS1naXQgYS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tl cm1pdC05LjAuMzAyL29ja2VybWl0LmluaSBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0 LTkuMC4zMDIvb2NrZXJtaXQuaW5pCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu LmYwMDc1NjEKLS0tIC9kZXYvbnVsbAorKysgYi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1p dC05LjAuMzAyL29ja2VybWl0LmluaQpAQCAtMCwwICsxLDYxOCBAQAorQ09NTUVOVCAtIFN0YW5k YXJkIEMtS2VybWl0IGluaXRpYWxpemF0aW9uIGZpbGUKKzsKKzsgRm9yIEMtS2VybWl0IFZlcnNp b246IDguMAorOworOyBGaWxlbmFtZToKKzsgICAua2VybXJjICAgICAoVU5JWCwgT1MtOSwgQWVn aXMpCis7ICAgQ0tFUk1JVC5JTkkgKE9TLzIsIFZNUywgT3BlblZNUywgQU9TL1ZTLCBBdGFyaSBT VCwgQ29tbW9kb3JlIEFtaWdhKQorOyAgIGNrZXJtaXQuaW5pIChTdHJhdHVzIFZPUykKKzsgICBL OTUuSU5JICAgICAoS2VybWl0IDk1IC0tIGJ1dCB0aGlzIGJpZyB2ZXJzaW9uIGlzIG5vdCB1c2Vk IHRoZXJlKQorOyAgIEsyLklOSSAgICAgIChLZXJtaXQvMiAgLS0gYnV0IGRpdHRvKQorOworOyBB dXRob3JzOgorOyAgIEZyYW5rIGRhIENydXosIENocmlzdGluZSBNLiBHaWFub25lLCBKZWZmcmV5 IEFsdG1hbgorOyAgIENvbHVtYmlhIFVuaXZlcnNpdHksIE5ldyBZb3JrLCBOWSAxMDAyNS03Nzk5 LCBVU0EKKzsKKzsgVGhpcyBpcyB0aGUgc3RhbmRhcmQgYW5kIHJlY29tbWVuZGVkIEMtS2VybWl0 IDguMCBpbml0aWFsaXphdGlvbiBmaWxlLiAgVG8KKzsgb3ZlcnJpZGUgc2V0dGluZ3Mgb3IgZGVm aW5pdGlvbnMgbWFkZSBpbiB0aGlzIGZpbGUsIHRvIGFkZCBuZXcgc2V0dGluZ3Mgb3IKKzsgZGVm aW5pdGlvbnMsIG9yIHRvIG1ha2UgYW55IG90aGVyIGRlc2lyZWQgY3VzdG9taXphdGlvbnMsIGNy ZWF0ZSBhIHNlcGFyYXRlLAorOyBwZXJzb25hbCBjdXN0b21pemF0aW9uIGZpbGUgY2FsbGVkOgor OworOyAgIC5teWtlcm1yYyAgICAgKFVOSVgsIE9TLTksIEFlZ2lzLCBCZUJveCwgUGxhbiA5KQor OyAgIENLRVJNT0QuSU5JICAgKE9TLzIsIFZNUywgT3BlblZNUywgQU9TL1ZTLCBBdGFyaSBTVCwg Q29tbW9kb3JlIEFtaWdhKQorOyAgIGNrZXJtb2QuaW5pICAgKFZPUykKKzsKKzsgWW91IGNhbiBh bHNvIGRlZmluZSB0aGUgY3VzdG9taXphdGlvbiBmaWxlbmFtZSBpbiBhbiBlbnZpcm9ubWVudAor OyB2YXJpYWJsZSAobG9naWNhbCBuYW1lIGluIFZNUyksIENLRVJNT0QsIHdoaWNoIHRha2VzIHBy ZWNlZGVuY2Ugb3ZlcgorOyB0aGUgbmFtZXMgc2hvd24gYWJvdmUuCis7Cis7IFdIQVQgVEhJUyBG SUxFIERPRVM6Cis7Cis7IC4gRGVmaW5lcyB5b3VyIGRlZmF1bHQgZGlhbGluZyBkaXJlY3Rvcnkg bmFtZToKKzsgICAgIC5rZGQgZm9yIFVOSVgsIE9TLTkgYW5kIEFlZ2lzOyBDS0VSTUlULktERCBm b3Igb3RoZXIgb3BlcmF0aW5nIHN5c3RlbXMuCis7ICAgICAgICBZb3UgY2FuIG92ZXJyaWRlIHRo aXMgd2l0aCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgS19ESUFMX0RJUkVDVE9SWQorOyAuIERl ZmluZXMgeW91ciBkZWZhdWx0IG5ldHdvcmsgZGlyZWN0b3J5IG5hbWU6Cis7ICAgICAua25kIGZv ciBVTklYLCBPUy05IGFuZCBBZWdpczsgQ0tFUk1JVC5LTkQgZm9yIG90aGVyIG9wZXJhdGluZyBz eXN0ZW1zLgorOyAgICAgICAgWW91IGNhbiBvdmVycmlkZSB0aGlzIHdpdGggdGhlIGVudmlyb25t ZW50IHZhcmlhYmxlIEtfTkVUX0RJUkVDVE9SWQorOyAuIERlZmluZXMgeW91ciBkZWZhdWx0IHNl cnZpY2VzIGRpcmVjdG9yeSBuYW1lOgorOyAgICAgLmtzZCBmb3IgVU5JWCwgT1MtOSBhbmQgQWVn aXM7IENLRVJNSVQuS1NEIGZvciBvdGhlciBvcGVyYXRpbmcgc3lzdGVtcy4KKzsgICAgICAgIFlv dSBjYW4gb3ZlcnJpZGUgdGhpcyB3aXRoIGVudmlyb25tZW50IHZhcmlhYmxlIEtfU0VSVklDRV9E SVJFQ1RPUlkuCis7IC4gRGVmaW5lcyB5b3VyIGN1c3RvbWl6YXRpb24gZmlsZSBuYW1lIChuYW1l IGdpdmVuIGFib3ZlKQorOyAuIFBlcmZvcm1zIHN5c3RlbS1kZXBlbmRlbnQgc2V0dXBzIGZvciBV TklYLCBWTVMsIE9TLzIsIGV0Yy4KKzsgLiBEZWZpbmVzIFZUUFJJTlQgbWFjcm9zIGZvciB1c2Ug d2l0aCBLOTUsIE1TLURPUyBLZXJtaXQsIGV0Yy4KKzsgLiBJZiB5b3UgaGF2ZSBhIHNlcnZpY2Vz IGRpcmVjdG9yeSwgYWxsIHRoZSBtYWNyb3MgbmVlZGVkIHRvIHVzZSBpdCBhcmUKKzsgICAgIGRl ZmluZWQuICBJZiB5b3UgZG9uJ3QgaGF2ZSBhIHNlcnZpY2VzIGRpcmVjdG9yeSwgdGhlIG1hY3Jv cyBhcmUgbm90Cis7ICAgICBkZWZpbmVkIGFuZCBLZXJtaXQgc3RhcnRzIGZhc3Rlci4KKzsgLiBF eGVjdXRlcyB5b3VyIHBlcnNvbmFsIGN1c3RvbWl6YXRpb24gZmlsZSwgaWYgeW91IGhhdmUgb25l LgorOyAgIE5PVEU6IFlvdXIgY3VzdG9taXphdGlvbiBmaWxlIGlzIE5PVCBleGVjdXRlZCBieSBL ZXJtaXQgaXRzZWxmOyBpdCBpcworOyAgIGV4ZWN1dGVkIGJ5IHRoaXMgZmlsZS4KKzsKKzsgSW4g VU5JWCwgd2l0aCBDLUtlcm1pdCA3LjAgYW5kIGxhdGVyLCB5b3UgY2FuIHN0b3JlIHRoaXMgZmls ZSB3aXRoIGEgbmFtZQorOyBvdGhlciB0aGFuIC5rZXJtcmMsIGFuZCBpdCB3aWxsIG5vdCBiZSBl eGVjdXRlZCBhdXRvbWF0aWNhbGx5LCBidXQsIGlmIHlvdQorOyBnaXZlIHRoaXMgZmlsZSBleGVj dXRlIHBlcm1pc3Npb24sIHlvdSBjYW4gZXhlY3V0ZSBkaXJlY3RseSBiZWNhdXNlIG9mIHRoZQor OyAia2VyYmFuZyBsaW5lIiBhdCB0aGUgdG9wLCB3aGVuZXZlciB5b3Ugd2FudCBhbGwgb2YgdGhl IGFib3ZlIGFjdGlvbnMgdG8KKzsgb2NjdXIuICBUaGUga2VyYmFuZyBsaW5lIG11c3QgcmVmbGVj dCB0aGUgYWN0dWFsIGZ1bGwgcGF0aCBvZiB0aGUgS2VybWl0Cis7IDcuMC1vci1sYXRlciBleGVj dXRhYmxlLgorOworOyBDLUtlcm1pdCA2LjAgaXMgZG9jdW1lbnRlZCBpbiB0aGUgYm9vayAiVXNp bmcgQy1LZXJtaXQiLCAybmQgRWRpdGlvbiwKKzsgYnkgRnJhbmsgZGEgQ3J1eiBhbmQgQ2hyaXN0 aW5lIE0uIEdpYW5vbmUsIDE5OTcsIERpZ2l0YWwgUHJlc3MgLworOyBCdXR0ZXJ3b3J0aC1IZWlu ZW1hbm4sIElTQk4gMS01NTU1OC0xNjQtMS4gIE5ldyBmZWF0dXJlcyBvZiBzdWJzZXF1ZW50Cis7 IHZlcnNpb25zIGFyZSBkb2N1bWVudGVkIGF0IHRoZSBLZXJtaXQgd2Vic2l0ZToKKzsgaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0LworOworOyBFdmVyeXRoaW5nIGFmdGVyIHRoaXMgcG9p bnQgZGVwZW5kcyBvbiB0aGUgc2NyaXB0IHByb2dyYW1taW5nIGxhbmd1YWdlLgorOyBUaGUgQ0hF Q0sgY29tbWFuZCB0ZXJtaW5hdGVzIHRoaXMgY29tbWFuZCBmaWxlIGltbWVkaWF0ZWx5IGlmIHRo ZSBzY3JpcHQKKzsgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UgKElGIGNvbW1hbmQpIGlzIG5vdCBjb25m aWd1cmVkLgorOworc2V0IHRha2UgZXJyb3Igb24JCTsgVGhpcyBtYWtlcyBDSEVDSyBxdWl0IGlm IG5vIHNjcmlwdCBsYW5ndWFnZS4KK2NoZWNrIGlmCQkJOyBEbyB3ZSBoYXZlIGFuIElGIGNvbW1h bmQ/ICBJZiBub3QsIHF1aXQgbm93Lgorc2V0IHRha2UgZXJyb3Igb2ZmCQk7IEJhY2sgdG8gbm9y bWFsLgorCitsb2NhbCBfc2QgX3NlcnZpY2VkaXIgX3hwICAgICAgIDsgRGVjbGFyZSBsb2NhbCB2 YXJpYWJsZXMuCisKK0NPTU1FTlQgLSBDLUtlcm1pdCB2ZXJzaW9uIDYuMCBvciBsYXRlciByZXF1 aXJlZC4KKzsKKworYXNnIF94cCBcdih4cHJvZ3JhbSkKK2lmIG5vdCBkZWYgX3hwIGFzZyBfeHAg XHYocHJvZ3JhbSkKK2lmIG5vdCBlcXVhbCAiXG0oX3hwKSIgIkMtS2VybWl0IiAtCisgIHN0b3Ag MSBcdihjbWRmaWxlKTogVGhpcyBpbml0aWFsaXphdGlvbiBmaWxlIGlzIG9ubHkgZm9yIEMtS2Vy bWl0LgorZWNobyBFeGVjdXRpbmcgXHYoY21kZmlsZSkgZm9yIFx2KHN5c3RlbSkuLi4KK2lmIDwg XHYodmVyc2lvbikgNjAwMDAgLQorICBzdG9wIDEgXHYoY21kZmlsZSk6IEMtS2VybWl0IDYuMCBv ciBsYXRlciByZXF1aXJlZC4KKworZm9yd2FyZCBcdihzeXN0ZW0pCQk7IEZpcnN0IGRvIHN5c3Rl bS1kZXBlbmRlbnQgaXRlbXMuLi4KKworOnVua25vd24JCQk7IFNob3VsZCBub3QgaGFwcGVuCitT dG9wIDEgRXJyb3I6IFN5c3RlbSB0eXBlIHVua25vd24hCisKKzpBZWdpcwkJCQk7IEFwb2xsbyBB ZWdpcyBhbmQKKzpVTklYCQkJCTsgVU5JWCwgYWxsIHZlcnNpb25zCithc2cgX215aW5pdCAtCisg IFx2KGhvbWUpLm15a2VybXJjCQk7IEN1c3RvbWl6YXRpb24gZmlsZW5hbWUKK2lmIHJlbW90ZSBm b3J3YXJkIENPTU1PTiAgICAgICAgOyBTa2lwIGxvY2FsLW1vZGUgaXRlbXMgaWYgIi1SIgorYXNn IF9kaWFsZGlyIC0KKyAgXHYoaG9tZSkua2RkCQkJOyBDLUtlcm1pdCBkaWFsaW5nIGRpcmVjdG9y eQorYXNnIF9uZXRkaXIgLQorICBcdihob21lKS5rbmQJCQk7IEMtS2VybWl0IG5ldHdvcmsgZGly ZWN0b3J5Cithc2cgX3NlcnZpY2VkaXIgLQorICBcdihob21lKS5rc2QJCQk7IEMtS2VybWl0IHNl cnZpY2VzIGRpcmVjdG9yeQorZm9yd2FyZCBDT01NT04gICAgICAgICAgICAgICAgICA7IEVuZCBv ZiBVTklYIHNlY3Rpb24KKworOk9TOS82OEsJCQk7IE9TLTkKK2FzZyBfbXlpbml0IC0KKyAgXHYo aG9tZSkubXlrZXJtcmMJCTsgQ3VzdG9taXphdGlvbiBmaWxlbmFtZQoraWYgcmVtb3RlIGZvcndh cmQgQ09NTU9OCithc2cgX2RpYWxkaXIgLQorICBcdihob21lKS5rZGQJCQk7IEMtS2VybWl0IGRp YWxpbmcgZGlyZWN0b3J5Cithc2cgX25ldGRpciAtCisgIFx2KGhvbWUpLmtuZAkJCTsgQy1LZXJt aXQgbmV0d29yayBkaXJlY3RvcnkKK2FzZyBfc2VydmljZWRpciAtCisgIFx2KGhvbWUpLmtzZAkJ CTsgQy1LZXJtaXQgc2VydmljZXMgZGlyZWN0b3J5CitlbHNlIHNldCBmaWxlIGRpc3BsYXkgY3J0 Citmb3J3YXJkIENPTU1PTgkJCTsgRW5kIG9mIE9TLTkgc2VjdGlvbgorCis6Vk1TCQkJCTsgVk1T IGFuZCBPcGVuVk1TCitmb3J3YXJkIENPTU1PTgorCis6T1MvMgkJCQk7IEtlcm1pdCA5NQorOldJ TjMyCitlY2hvIFRoaXMgaW5pdGlhbGl6YXRpb24gZmlsZSBpcyBub3QgZm9yIHVzZSB3aXRoIEs5 NS4KK2ZvcndhcmQgQ09NTU9OICAgICAgICAgICAgICAgICAgOyBFbmQgb2YgT1MvMiBzZWN0aW9u CisKKzpBT1MvVlMJCQkJOyBEYXRhIEdlbmVyYWwgQU9TL1ZTCitzZXQgd2luZG93IDEJCQk7IFNs aWRpbmcgd2luZG93cyBkb24ndCB3b3JrCitzZXQgZmlsZSBjaGFyIGRnLWludGVybmF0aW9uYWwJ OyBGaWxlIGNoYXJhY3Rlci1zZXQKK3NldCB4ZmVyIGNoYXIgbGF0aW4xCQk7IFRyYW5zZmVyIGNo YXJhY3Rlci1zZXQKK3NldCBmaWxlIGRpc3BsYXkgY3J0ICAgICAgICAgICAgOyBGaWxlIHRyYW5z ZmVyIGZpc3BsYXkKK2RlZiBjbGkgcHVzaAkJCTsgRXNjYXBlIHRvIENMSQorZGVmIHJlc2V0IC0J CQk7IE1hY3JvIHRvIHJlc2V0IERHIERBU0hFUiB0ZXJtaW5hbAorIHJ1biB3cml0ZSBbIWFzY2lp IDIzNiAzMDYgMzAxXQorZm9yd2FyZCBDT01NT04gICAgICAgICAgICAgICAgICA7IEVuZCBvZiBB T1MvVlMgc2VjdGlvbgorCis6QW1pZ2EJCQkJOyBDb21tb2RvcmUgQW1pZ2EKK2RlZiBjbHMgZWNo byBcMjdbSFwyN1sySgk7IENMUyBjb21tYW5kIHRvIGNsZWFyIHRoZSBzY3JlZW4KK3NldCBmaWxl IGNoYXIgbGF0aW4xCQk7IFVzZSBMYXRpbiBBbHBoYWJldCAxIGZvciBmaWxlIHRyYW5zZmVyCitz ZXQgeGZlciBjaGFyIGxhdGluMQkJOyAuLi4KK2ZvcndhcmQgQ09NTU9OICAgICAgICAgICAgICAg ICAgOyBFbmQgb2YgQW1pZ2Egc2VjdGlvbgorCis6QXRhcmlfU1QJCQk7IEF0YXJpIFNUCitkZWYg Y2xzIGVjaG8gXDI3SFwyN0oJCTsgQ2xlYXIgc2NyZWVuIGFgbGEgVlQ1Mgorc2V0IHNlcnZlciBk aXNwbGF5IG9uCQk7IFNob3cgZmlsZSB4ZmVyIGRpc3BsYXkgaW4gc2VydmVyIG1vZGUgdG9vCitz ZXQgc2VydmVyIHRpbWVvdXQgMTUJCTsgTm9uemVybyByZXF1aXJlZCBmb3IgXkMgaW50ZXJydXB0 aW9uIQorZm9yd2FyZCBDT01NT04gICAgICAgICAgICAgICAgICA7IEVuZCBvZiBBdGFyaSBTVCBz ZWN0aW9uCisKKzpNYWNpbnRvc2gJCQk7IEFwcGxlIE1hY2ludG9zaAorc2V0IHNlcnZlciBkaXNw bGF5IG9uCQk7IFNob3cgZmlsZSB4ZmVyIGRpc3BsYXkgaW4gc2VydmVyIG1vZGUgdG9vLgorZm9y d2FyZCBDT01NT04KKworOlN0cmF0dXNfVk9TICAgICAgICAgICAgICAgICAgICA7IFN0cmF0dXMg Vk9TCithc2cgX215aW5pdCBcdihob21lKWNrZXJtb2QuaW5pCitpZiByZW1vdGUgZm9yd2FyZCBD T01NT04KK2FzZyBfZGlhbGRpciBcdihob21lKWNrZXJtaXQua2RkCithc2cgX25ldGRpciBcdiho b21lKWNrZXJtaXQua25kCithc2cgX3NlcnZpY2VkaXIgXHYoaG9tZSlja2VybWl0LmtzZAorZm9y d2FyZCBDT01NT04gICAgICAgICAgICAgICAgICA7IEVuZCBvZiBTdHJhdHVzIFZPUyBzZWN0aW9u CisKKzpDT01NT04JCQkJOyBGb3IgYWxsIHN5c3RlbXMKKworOyBEZWZpbmUgbWFjcm9zIHRoYXQg YXJlIHVzZWZ1bCB3aGVuIHJ1bm5pbmcgQy1LZXJtaXQgaW4gcmVtb3RlIG1vZGUuCis7IFRoZXNl IG1hY3JvcyBzZXJ2ZSBubyBwdXJwb3NlIG9uIGxvY2FsLW1vZGUtb25seSB2ZXJzaW9ucyBzdWNo IGFzCis7IE9TLzIsIE1hY2ludG9zaCwgQW1pZ2EsIGFuZCBBdGFyaSBTVCBLZXJtaXQsIHNvIHdl IHNraXAgZGVmaW5pbmcgdGhlbQorOyBmb3IgdGhvc2Ugc3lzdGVtcy4KKzsKK2lmIG5vdCA9IDAg XGZpbmRleChcdihzeXN0ZW0pLFdJTjMyOk9TLzI6TWFjaW50b3NoOkFtaWdhOkF0YXJpX1NUKSAt CisgIGZvcndhcmQgZmlsZXMKKworOyBWVFBSSU5UIG1hY3JvLiAgUHJpbnQgYSBmaWxlIG9uIHlv dXIgUEMncyBsb2NhbCBwcmludGVyLgorCitkZWYgVlRQUklOVCBlY2hvIFwyN1s1aSwgdHlwZSBc JTEsIGVjaG8gXDI3WzRpCis7IG9yIGlmIHlvdXIgcHJpbnRlciBuZWVkcyBhIGZvcm1mZWVkIHRv IGZvcmNlIHRoZSBwYWdlIG91dDoKKzsgZGVmIFZUUFJJTlQgIGRlZiBlY2hvIFwyN1s1aSwgdHlw ZSBcJTEsIGVjaG8gXDEyXDI3WzRpCisKKzsgTWFjcm9zIGZvciBob3N0LWluaXRpYXRlZCBmaWxl IHRyYW5zZmVyIHVzaW5nIEFQQzoKKzsgICBOT1QgTkVFREVEIEFOWSBNT1JFIGJlY2F1c2Ugb2Yg YXV0b2Rvd25sb2FkL2F1dG91cGxvYWQuCis7ICAgUmVtb3ZlIHRoZSBmb2xsb3dpbmcgRk9SV0FS RCBjb21tYW5kIHRvIHJlaW5zdGF0ZSB0aGVzZSBkZWZpbml0aW9uczoKKworOkZJTEVTCisKKzsg R2V0IGN1c3RvbWl6YXRpb24gYW5kIGRpcmVjdG9yeSBmaWxlIG5hbWVzLiAgRW52aXJvbm1lbnQg dmFyaWFibGVzIHRha2UKKzsgcHJlY2VkZW5jZSwgc28geW91IGRvIG5vdCBoYXZlIHRvIGVkaXQg dGhpcyBmaWxlIHRvIGNoYW5nZSB0aGVzZSBmaWxlbmFtZXMuCis7CitpZiBkZWYgXCQoQ0tFUk1P RCkgYXNzaWduIF9teWluaXQgXCQoQ0tFUk1PRCkKK2lmIG5vdCBkZWYgX215aW5pdCBhc3NpZ24g X215aW5pdCBcdihob21lKUNLRVJNT0QuSU5JCisKK2lmIHJlbW90ZSBmb3J3YXJkIENVU1RPTSA7 IFNraXAgYWxsIHRoaXMgaWYgLVIgZ2l2ZW4gb24gY29tbWFuZCBsaW5lCisKK2lmIGRlZiBcJChL X05FVF9ESVJFQ1RPUlkpIGFzc2lnbiBfbmV0ZGlyIFwkKEtfTkVUX0RJUkVDVE9SWSkKK2lmIG5v dCBkZWYgX25ldGRpciBhc3NpZ24gX25ldGRpciBcdihob21lKUNLRVJNSVQuS05ECisKK2lmIGRl ZiBcJChLX0RJQUxfRElSRUNUT1JZKSBhc3NpZ24gX2RpYWxkaXIgXCQoS19ESUFMX0RJUkVDVE9S WSkKK2lmIG5vdCBkZWYgX2RpYWxkaXIgYXNzaWduIF9kaWFsZGlyIFx2KGhvbWUpQ0tFUk1JVC5L REQKKworQ0hFQ0sgRElBTAkJCTsgSXMgdGhlcmUgYSBESUFMIGNvbW1hbmQ/Cit4aWYgZmFpbCB7 IAkJCTsgTm8uCisgICAgZWNobyBESUFMIGRpc2FibGVkCisgICAgZm9yd2FyZCBDVVNUT00KK30K KworQ0hFQ0sgTkVUV09SSworeGlmIHN1Y2Nlc3MgeworICAgIHhpZiBleGlzdCBcbShfbmV0ZGly KSB7CisJc2V0IG5ldCBkaXJlY3RvcnkgXG0oX25ldGRpcikKKwllY2hvIHsgTmV0d29yayBkaXJl Y3RvcnkgaXMgXG0oX25ldGRpcikgfQorICAgIH0KK30KKworaWYgZXEgIlx2KG5hbWUpIiAidGVs bmV0IiBmb3J3YXJkIENVU1RPTQorCit4aWYgZXhpc3QgXG0oX2RpYWxkaXIpIHsKKyAgICBzZXQg ZGlhbCBkaXJlY3RvcnkgXG0oX2RpYWxkaXIpCisgICAgZWNobyB7IERpYWwgZGlyZWN0b3J5IGlz IFxtKF9kaWFsZGlyKSB9Cit9CisKK0NPTU1FTlQgLSBTZXJ2aWNlcyBkaXJlY3RvcnkKKworaWYg ZGVmIFwkKEtfU0VSVklDRV9ESVJFQ1RPUlkpIGFzc2lnbiBfc2VydmljZWRpciBcJChLX1NFUlZJ Q0VfRElSRUNUT1JZKQoraWYgbm90IGRlZiBfc2VydmljZWRpciBhc3NpZ24gX3NlcnZpY2VkaXIg XHYoaG9tZSlDS0VSTUlULktTRAorCis7IElmIG5vIHNlcnZpY2VzIGRpcmVjdG9yeSBpcyBmb3Vu ZCBza2lwIGFsbCB0aGUgYmlnIG1hY3JvIGRlZmluaXRpb25zIGFuZAorOyBnbyBzdHJhaWdodCB0 byB0aGUgYm90dG9tLCB3aGVyZSB3ZSBleGVjdXRlIHRoZSBjdXN0b21pemF0aW9uIGZpbGUuCisK K2lmIG5vdCBleGlzdCBcbShfc2VydmljZWRpcikgZm9yd2FyZCBjdXN0b20KKworZWNobyB7IFNl cnZpY2VzIGRpcmVjdG9yeSBpcyBcbShfc2VydmljZWRpcil9CisKK2RlZiBNQVhfU1ZDUyAyMDAg ICAgICAgICAgICAgICA7IEFkanVzdCB0aGlzIGlmIHlvdSBoYXZlIG1vcmUgZW50cmllcworZGVm aW5lIF9zZCAwICAgICAgICAgICAgICAgICAgIDsgQXNzdW1lIG5vIHNlcnZpY2VzIGRpcmVjdG9y eQorb3BlbiByZWFkIFxtKF9zZXJ2aWNlZGlyKSAgICAgIDsgVHJ5IHRvIG9wZW4gc2VydmljZXMg ZGlyZWN0b3J5IGZpbGUKK3hpZiBzdWNjZXNzIHsKKyAgICBkZWNsYXJlIFwmZFtcbShNQVhfU1ZD UyldICA7IEl0J3Mgb3BlbiwgZGVjbGFyZSBkaXJlY3RvcnkgYXJyYXkKKyAgICBmb3IgXCVpIDEg XG0oTUFYX1NWQ1MpIDEgeyA7IFJlYWQgdGhlIGxpbmVzIGludG8gdGhlIGFycmF5CisJcmVhZCBc JmRbXCVpXQorCWlmIGZhaWwgYnJlYWsKKyAgICB9CisgICAgY2xvc2UgcmVhZAorICAgIHhpZiA+ IFwlaSAgXG0oTUFYX1NWQ1MpIHsKKwllY2hvIFRvbyBtYW55IGVudHJpZXMgaW4gc2VydmljZXMg ZGlyZWN0b3J5CisJZWNobyB7IE1heGltdW0gaXMgXG0oTUFYX1NWQ1MpLn0KKwllY2hvIHsgQ2hh bmdlIGRlZmluaXRpb24gb2YgTUFYX1NWQ1MgaW4gXHYoY21kZmlsZSkgdG8gYWxsb3cgbW9yZS4g fQorCWVjaG8geyBTZXJ2aWNlcyBkaXJlY3RvcnkgZGlzYWJsZWQufQorICAgIH0gZWxzZSB7Cisg ICAgICAgIGFzZyBcJmRbMF0gXGZldmFsKFwlaSAtIDEpCisgICAgICAgIGRlZmluZSBfc2QgMQor ICAgIH0KK30KKworeGlmIG5vdCBcbShfc2QpIHsKKyAgICBkZWYgYWNjZXNzIGVjaG8geyBTZXJ2 aWNlcyBkaXJlY3Rvcnkgbm90IGF2YWlsYWJsZS59CisgICAgYXNnIGxpc3QgXG0oYWNjZXNzKQor fSBlbHNlIHsKKyAgICBkZWYgRklORCB7CisJc2V0IGNhc2Ugb2ZmCisJZm9yIFwlaSAxIFwmZFsw XSAxIHsKKwkgICAgaWYgZXEge1wlMX0ge1xmc3Vic3RyKFwmZFtcJWldLDEsXGZsZW4oXCUxKSl9 IGJyZWFrCisJfQorCWlmIG5vdCA+IFwlaSBcJmRbMF0gcmV0dXJuIFwmZFtcJWldCisgICAgfQor ICAgIGRlZiBMSVNUIHsKKwl4aWYgPiBcdihhcmdjKSAxIHsKKwkgICAgZG8gZmluZCBcJTEKKwkg ICAgaWYgZGVmIFx2KHJldHVybikgZWNobyBcdihyZXR1cm4pCisJICAgIGVsc2UgZWNobyBcJTE6 IE5vdCBmb3VuZAorCX0gZWxzZSB7CisJICAgIGVjaG8gXCZkWzBdIGl0ZW1zIGluIHNlcnZpY2Vz IGRpcmVjdG9yeToKKwkgICAgZm9yIFwlaSAxIFwmZFswXSAxIHsgZWNobyBcZmNvbnQoXCZkW1wl aV0pIH0KKwl9CisgICAgfQorICAgIGRlZiBTUExJVCB7IGFzZyBfd29yZDEgXCUxLCBhc2cgX3dv cmQyIFwlMiB9CisgICAgZGVmIERPQUNDRVNTIHsgICAgICAgICAgICAgICA7IChVc2VkIGludGVy bmFsbHkgYnkgQUNDRVNTIG1hY3JvKQorCWRvIFwlNSBcJTYgXCU3IFwlOCBcJTkgICA7IERvIHRo ZSBjb25uZWN0aW9uIG1hY3JvCisJaWYgZmFpbCBlbmQgMQorICAgICAgICBzcGxpdCBcJTMgICAg ICAgICAgICAgICAgOyBHZXQgd29yZHMgZnJvbSBcJTMKKwlhc2cgXCUzIFxtKF93b3JkMSkKKwlh c2cgXCUyIFxtKF93b3JkMikKKwlkbyBcJTMgXCU0IHtcJTF9IFwlMiAgICAgOyBMb2dpbiBtYWNy bywgdXNlcmlkLCBwYXNzd29yZCwgcHJvbXB0CisgICAgfQorICAgIGRlZiBBQ0NFU1MgeworCWlm IG5vdCBkZWZpbmVkIFwlMSBlbmQgMSBhY2Nlc3Mgd2hhdD8gICAgICAgIDsgQ2hlY2sgc2Vydmlj ZQorCWRvIGZpbmQgXCUxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgTG9vayBp dCB1cAorCWlmIHN1Y2Nlc3MgZG9hY2Nlc3Mge1wlMn0gXHYocmV0dXJuKSAgICAgICAgIDsgT0ss IHRyeSBpdAorCWVsc2UgZW5kIDEgIlwlMSIgbm90IGluIHNlcnZpY2VzIGRpcmVjdG9yeSAgIDsg Tm90IGZvdW5kCisJaWYgZmFpbCBlbmQgMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OyBET0FDQ0VTUyBmYWlsZWQ/CisJeGlmIGVxIFx2KGNtZGxldmVsKSAxIHsKKwkgICAgZWNobwor CSAgICBlY2hvIEFDQ0VTUzogTG9naW4gc3VjY2VlZGVkIC0gQ09OTkVDVGluZy4uLgorICAgICAg ICAgICAgc2hvdyBlc2NhcGUKKyAgICAgICAgICAgIG91dHB1dCBcMTMKKwkgICAgY29ubmVjdCAv cXVpZXRseQorICAgICAgICB9CisgICAgfQorfQorCis6Q09OTkVDVElPTiA7IE1hY3JvcyBmb3Ig bWFraW5nIGNvbm5lY3Rpb25zCisKK0NPTU1FTlQgLSBTRVJJQUwgbWFjcm8uICBBcmd1bWVudHM6 Cis7IFwlMSA9IGRldmljZSBuYW1lCis7IFwlMiA9IHNwZWVkCis7CitkZWYgU0VSSUFMIHsKKyAg ICBpZiA8IFx2KGFyZ2MpIDMgICAgICAgICAgICAgICAgICAgICAgICAgOyBBbGwgYXJndW1lbnRz IGdpdmVuPworICAgICAgZW5kIDEgVXNhZ2U6IFNFUklBTCBkZXZpY2Ugc3BlZWQgICAgICA7IE5v LgorICAgIHNldCBsaW5lIFwlMSAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IE9LLCB0cnkg dG8gU0VUIExJTkUuCisgICAgaWYgZmFpbHVyZSAtICAgICAgICAgICAgICAgICAgICAgICAgICAg IDsgSWYgdGhpcyBmYWlsZWQsCisgICAgICBlbmQgMSBDYW4ndCBvcGVuIGRldmljZTogXCUxICAg ICAgICAgIDsgcHJpbnQgbWVzc2FnZSBhbmQgcXVpdC4KKyAgICBzZXQgc3BlZWQgXCUyICAgICAg ICAgICAgICAgICAgICAgICAgICAgOyBUcnkgdG8gc2V0IHRoZSBzcGVlZC4KKyAgICBpZiBmYWls IGVuZCAxIFVuc3VwcG9ydGVkIHNwZWVkOiBcJTIgICAgOyBGYWlsZWQuCisgICAgZWNobyBDb25u ZWN0aW9uIHN1Y2Nlc3NmdWwuICAgICAgICAgICAgIDsgU3VjY2VlZGVkLgorfQorCitDT01NRU5U IC0gTkVUIG1hY3JvLiAgQXJndW1lbnRzOgorOyBcJTEgPSBuZXR3b3JrIHR5cGUKKzsgXCUyID0g aG9zdCBuYW1lIG9yIGFkZHJlc3MKKzsKK2RlZiBORVQgeworICAgIGlmIDwgXHYoYXJnYykgMyBl bmQgMSBVc2FnZTogTkVUIG5ldHdvcmsgaG9zdAorICAgIHNldCBuZXR3b3JrIHR5cGUgXCUxCisg ICAgaWYgZmFpbCBlbmQgMSB1bnN1cHBvcnRlZCBuZXR3b3JrOiBcJTEKKyAgICBzZXQgbG9naW4g dXNlciAgICAgICAgICAgICAgICA7IERvbid0IHNlbmQgdXNlciBJRC4KKyAgICBzZXQgaG9zdCBc JTIKKyAgICBpZiBmYWlsIGVuZCAxIENhbid0IHJlYWNoIGhvc3Q6IFwlMgorICAgIGVjaG8gQ29u bmVjdGlvbiBzdWNjZXNzZnVsLgorfQorCitDT01NRU5UIC0gQ0FMTCBtYWNyby4gIEFyZ3VtZW50 czoKKzsKKzsgXCUxID0gbW9kZW0gdHlwZQorOyBcJTIgPSBkZXZpY2UgbmFtZQorOyBcJTMgPSBz cGVlZAorOyBcJTQgPSBwaG9uZSBudW1iZXIKKzsKK2RlZiBDQUxMIHsKKyAgICBpZiA8IFx2KGFy Z2MpIDUgLSAgICAgICAgIDsgQWxsIGFyZ3VtZW50cyBwcmVzZW50PworICAgICAgZW5kIDEgVXNh Z2U6IENBTEwgbW9kZW0gZGV2aWNlIHNwZWVkIG51bWJlcgorICAgIHhpZiBub3QgZXF1YWwge1x2 KG1vZGVtKX0ge1wlMX0geyA7IFNldCBtb2RlbSB0eXBlCisgICAgICAgIHNldCBtb2RlbSBcJTEK KyAgICAgICAgaWYgZmFpbCBlbmQgMSB1bmtub3duIG1vZGVtIHR5cGU6IFwlMQorICAgIH0KKyAg ICB4aWYgbm90IGVxdWFsIHtcdihsaW5lKX0ge1wlMn0geyA7IENvbW11bmljYXRpb24gZGV2aWNl CisgICAgICAgIHNldCBsaW5lIFwlMgorICAgICAgICBpZiBmYWlsIGVuZCAxIGNhbid0IG9wZW4g ZGV2aWNlOiBcJTIKKyAgICB9CisgICAgeGlmIG5vdCBlcXVhbCB7XHYoc3BlZWQpfSB7XCUzfSB7 IDsgQ29tbXVuaWNhdGlvbiBzcGVlZAorICAgICAgICBzZXQgc3BlZWQgXCUzCisgICAgICAgIGlm IGZhaWwgZW5kIDEgdW5zdXBwb3J0ZWQgc3BlZWQ6IFwlMworICAgIH0KKyAgICBkaWFsIFwlNCAg ICAgICAgICAgICAgICAgIDsgRGlhbCB0aGUgbnVtYmVyCisgICAgaWYgZmFpbCBlbmQgMSBDYW4n dCBwbGFjZSBjYWxsOiBcJTQKKyAgICBlbmQgMCBDb25uZWN0aW9uIHN1Y2Nlc3NmdWwuCit9CisK K0NPTU1FTlQgLSBUQ1BDQUxMIG1hY3JvLiAgQXJndW1lbnRzOgorOworOyBcJTEgPSBzZXJ2ZXIg bmFtZTpwb3J0Cis7IFwlMiA9IG1vZGVtIHR5cGUKKzsgXCUzID0gcGhvbmUgbnVtYmVyCis7Citk ZWYgVENQQ0FMTCB7CisgICAgaWYgPCBcdihhcmdjKSA0IC0gICAgICAgICA7IEFsbCBhcmd1bWVu dHMgcHJlc2VudD8KKyAgICAgIGVuZCAxIFVzYWdlOiBUQ1BDQUxMIHNlcnZlcls6cG9ydF0gbW9k ZW0gbnVtYmVyCisgICAgc2V0IG5ldCB0eXBlIHRjcC9pcCAgICAgICA7IFdoaWNoIG5ldHdvcmsg dG8gdXNlCisgICAgaWYgZmFpbCBlbmQgMSB1bnN1cHBvcnRlZCBuZXR3b3JrOiB0Y3AvaXAKKyAg ICBzZXQgaG9zdCBcJTEgICAgICAgICAgICAgIDsgQWNjZXNzIHNlcnZlciBhbmQgcG9ydAorICAg IGlmIGZhaWwgZW5kIDEgY2FuJ3QgYWNjZXNzIHNlcnZlciBcJTEKKyAgICBzZXQgbW9kZW0gXCUy ICAgICAgICAgICAgIDsgU2V0IG1vZGVtIHR5cGUKKyAgICBpZiBmYWlsIGVuZCAxIHVua25vd24g bW9kZW0gdHlwZTogXCUyCisgICAgZGlhbCBcJTMgICAgICAgICAgICAgICAgICA7IERpYWwgdGhl IG51bWJlcgorICAgIGlmIGZhaWwgZW5kIDEgQ2FuJ3QgcGxhY2UgY2FsbDogXCUzCisgICAgZW5k IDAgQ29ubmVjdGlvbiBzdWNjZXNzZnVsLgorfQorCitDT01NRU5UIC0gU1BSSU5UIG1hY3JvLiAg QXJndW1lbnRzOgorOyBcJTEgPSBTZXJ2aWNlIG5hbWUgb3IgYWRkcmVzcworOworZGVmIFNQUklO VCB7CisgICAgaWYgPCBcdihhcmdjKSAyIGVuZCAxIFVzYWdlOiBcJTAgc2VydmljZQorICAgIHNl dCBpbnB1dCB0aW1lb3V0IHByb2NlZWQKKyAgICBvdXRwdXQgQERcMTMKKyAgICBpbnB1dCAxMCBU RVJNSU5BTD0KKyAgICBpZiBmYWlsIGVuZCAxIE5vIHRlcm1pbmFsIHByb21wdAorICAgIG91dCBE MVwxMworICAgIGlucCAxMCBACisgICAgaWYgZmFpbCBlbmQgMSBObyBhdHNpZ24gcHJvbXB0Cisg ICAgb3V0cHV0IGMgXCUxXDEzCisgICAgaW5wdXQgMTAgQ09OTkVDVEVECisgICAgaWYgZmFpbCBl bmQgMSBDYW4ndCBhY2Nlc3MgXCUxIGZyb20gU3ByaW50TmV0Cit9CisKK0NPTU1FTlQgLSBVTE9H SU4gbWFjcm8uICBGb3IgbG9nZ2luZyBpbnRvIHN5c3RlbXMgd2hlcmUgdXNlciBJRCBpcyByZXF1 aXJlZAorOyBidXQgdGhlcmUgaXMgbm8gcGFzc3dvcmQuICBBcmd1bWVudHM6Cis7IFwlMSA9IFVO SVggdXNlciBJRAorOworZGVmaW5lIFVMT0dJTiB7CisgICAgaWYgPCBcdihhcmdjKSAyIGVuZCAx IFVzYWdlOiBcJTAgdXNlcmlkCisgICAgc2V0IGlucHV0IHRpbWVvdXQgcHJvY2VlZCAgICAgOyBI YW5kbGUgdGltZW91dHMgb3Vyc2VsdmVzCisgICAgc2V0IGNhc2Ugb24gICAgICAgICAgICAgICAg ICAgOyBDYXNlIGlzIGltcG9ydGFudCBpbiBVTklYCisgICAgbWlucHV0IDUgbG9naW46IFVzZXJu YW1lOiB7VXNlciBJRDp9IHtVc2VyIE5hbWU6fQorICAgIG91dCBcJTFcMTMgICAgICAgICAgICAg ICAgICAgIDsgU2VuZCB1c2VybmFtZSwgY2FycmlhZ2UgcmV0dXJuCisgICAgZW5kIDAKK30KKwor Q09NTUVOVCAtIFZNU0xPR0lOIG1hY3JvLiAgQXJndW1lbnRzOgorOyBcJTEgPSBWTVMgdXNlciBJ RAorOyBcJTIgPSBQYXNzd29yZC4gIElmIHBhc3N3b3JkIG5vdCBzdXBwbGllZCwgaXQgaXMgcHJv bXB0ZWQgZm9yLgorOyBcJTMgPSBTeXN0ZW0gcHJvbXB0LiAgSWYgb21pdHRlZCBhIGRlZmF1bHQg aXMgc3VwcGxpZWQuCis7CitkZWZpbmUgVk1TTE9HSU4geworICAgIGlmIDwgXHYoYXJnYykgMiBl bmQgMSBVc2FnZTogXCUwIHVzZXJpZCBbIHBhc3N3b3JkIFsgcHJvbXB0IF0gXQorICAgIHdoaWxl IG5vdCBkZWZpbmVkIFwlMiB7CisgICAgICAgIGFza3EgXCUyIHsgXCUxJ3MgcGFzc3dvcmQ6IH0K KyAgICB9CisgICAgc2V0IHBhcml0eSBub25lICAgICAgICAgICAgICAgOyBTZXQgY29tbXVuaWNh dGlvbiBwYXJhbWV0ZXJzCisgICAgc2V0IGR1cGxleCBmdWxsCisgICAgc2V0IGhhbmRzaGFrZSBu b25lCisgICAgc2V0IGlucHV0IHRpbWVvdXQgcHJvY2VlZCAgICAgOyBIYW5kbGUgdGltZW91dHMg b3Vyc2VsdmVzCisgICAgaW4gNSBVc2VybmFtZTogICAgICAgICAgICAgICAgOyBJcyBwcm9tcHQg YWxyZWFkeSB0aGVyZT8KKyAgICB4aWYgZmFpbCB7ICAgICAgICAgICAgICAgICAgICA7IE5vLgor ICAgICAgICBmb3IgXCVpIDEgMyAxIHsgICAgICAgICAgIDsgVHJ5IDMgdGltZXMgdG8gZ2V0IGl0 LgorICAgICAgICAgICAgb3V0IFwxMyAgICAgICAgICAgICAgIDsgU2VuZCBjYXJyaWFnZSByZXR1 cm4KKyAgICAgICAgICAgIGluIDUgVXNlcm5hbWU6ICAgICAgICA7IExvb2sgZm9yIHByb21wdAor ICAgICAgICAgICAgaWYgc3VjY2VzcyBicmVhayAgICAgIDsgU3VjY2VzcywgZ28gbG9nIGluCisg ICAgICAgIH0KKyAgICAgICAgaWYgPiBcJWkgMyBlbmQgMSBObyBVc2VybmFtZSBwcm9tcHQKKyAg ICB9CisgICAgb3V0IFwlMVwxMyAgICAgICAgICAgICAgICAgICAgOyBTZW5kIHVzZXJuYW1lLCBj YXJyaWFnZSByZXR1cm4KKyAgICBpbnAgNSBQYXNzd29yZDogICAgICAgICAgICAgICA7IFdhaXQg NSBzZWMgZm9yIHRoaXMgcHJvbXB0CisgICAgaWYgZmFpbCBlbmQgMSBObyBwYXNzd29yZCBwcm9t cHQKKyAgICBwYXVzZSAgICAgICAgICAgICAgICAgICAgICAgICA7IFdhaXQgYSBzZWMKKyAgICBv dXQgXCUyXDEzICAgICAgICAgICAgICAgICAgICA7IFNlbmQgcGFzc3dvcmQKKyAgICB4aWYgbm90 IGVtdWxhdGlvbiB7ICAgICAgICAgICA7IE5vIGVtdWxhdG9yIGJ1aWx0IGluPworICAgICAgICBz ZXQgaW5wdXQgZWNobyBvZmYgICAgICAgIDsgUHJvdGVjdCB0ZXJtaW5hbCBmcm9tIHRoaXMKKyAg ICAgICAgbWlucHV0IDEwIHtcMjdafSB7XDI3W2N9IHtcMjdbMGN9IDsgR2V0IHRlcm1pbmFsIElE IHF1ZXJ5CisgICAgICAgIHhpZiBzdWNjZXNzIHsgICAgICAgICAgICAgICAgICAgICA7IEdvdCBv bmUKKyAgICAgICAgICAgIG91dHB1dCBcMjdbXD8xYyAgICAgICAgICAgICAgIDsgU2VuZCBWVDEw MCB0ZXJtaW5hbCBJRAorICAgICAgICAgICAgaW4gMiBcMjdbNm4gICAgICAgICAgICAgICAgICAg OyBTY3JlZW4gZGltZW5zaW9uIHF1ZXJ5PworICAgICAgICAgICAgaWYgc3VjYyBvdXQgXDI3W1x2 KHJvd3MpO1x2KGNvbHMpUiA7IFNlbmQgZGltZW5zaW9ucworICAgICAgICB9CisgICAgICAgIHNl dCBpbnB1dCBlY2hvIG9uICAgICAgICAgOyBFY2hvIGlucHV0IGFnYWluCisgICAgfQorICAgIGlm IG5vdCBkZWYgXCUzIC0gICAgICAgICAgICAgIDsgSWYgd2Ugd2VyZSBub3QgZ2l2ZW4gYSBwcm9t cHQKKyAgICAgIGFzZyBcJTMge1x2KHByb21wdCl9ICAgICAgICA7IHVzZSB0aGUgU0VUIExPR0lO IFBST01QVCB2YWx1ZQorICAgIGlmIG5vdCBkZWYgXCUzIC0gICAgICAgICAgICAgIDsgSWYgd2Ug c3RpbGwgZG9uJ3QgaGF2ZSBhIHByb21wdAorICAgICAgYXNnIFwlMyB7XDEzJFwzMn0gICAgICAg ICAgIDsgdXNlIHRoaXMgb25lIGFzIHRoZSBkZWZhdWx0CisgICAgcmVpbnAgMCBcJTMgICAgICAg ICAgICAgICAgICAgOyBEaWQgd2UgSU5QVVQgdGhlIHByb21wdCBhbHJlYWR5PworICAgIGlmIGZh aWwgaW5wIDYwIFwlMyAgICAgICAgICAgIDsgTm8sIGxvb2sgbm93LgorICAgIGlmIGZhaWwgZW5k IDEKK30KKworQ09NTUVOVCAtIFVOSVhMT0dJTiBtYWNyby4gIEFyZ3VtZW50czoKKzsgXCUxID0g VU5JWCB1c2VyIElECis7IFwlMiA9IFBhc3N3b3JkLiAgSWYgcGFzc3dvcmQgbm90IHN1cHBsaWVk LCBpdCBpcyBwcm9tcHRlZCBmb3IuCis7IFwlMyA9IFN5c3RlbSBwcm9tcHQuICBJZiBvbWl0dGVk IGEgZGVmYXVsdCBpcyBzdXBwbGllZC4KKzsKK2RlZmluZSBVTklYTE9HSU4geworICAgIGxvY2Fs IFwlbSBcJWkKKyAgICBpZiA8IFx2KGFyZ2MpIDIgLQorICAgICAgZW5kIDEgVXNhZ2U6IFwlMCB1 c2VyaWQgWyBwYXNzd29yZCBbIHByb21wdCBdIF0KKyAgICB3aGlsZSBub3QgZGVmaW5lZCBcJTIg eworICAgICAgICBhc2txIFwlMiB7IFwlMSdzIHBhc3N3b3JkOiB9CisgICAgfQorICAgIHNldCBp bnB1dCBlY2hvIG9uCisgICAgc2V0IHBhcml0eSBub25lICAgICAgICAgICAgICAgOyBTZXQgY29t bXVuaWNhdGlvbiBwYXJhbWV0ZXJzLgorICAgIHNldCBkdXBsZXggZnVsbAorICAgIHNldCBoYW5k c2hha2Ugbm9uZQorICAgIHNldCBpbnB1dCB0aW1lb3V0IHByb2NlZWQgICAgIDsgSGFuZGxlIHRp bWVvdXRzIG91cnNlbHZlcworICAgIHNldCBjYXNlIG9uICAgICAgICAgICAgICAgICAgIDsgQ2Fz ZSBpcyBpbXBvcnRhbnQgaW4gVU5JWAorICAgIGRlZiBcJW0gMTAgICAgICAgICAgICAgICAgICAg IDsgV2FpdGluZyB0aW1lIGZvciBJTlBVVAorICAgIGZvciBcJWkgMSA1IDEgeworICAgICAgICBt aW5wdXQgXCVtIGxvZ2luOiB7c3N3b3JkOn0ge1Bhc3N3b3JkIGZvciBcJTE6fQorCWlmIHN1Y2Nl c3MgYnJlYWsKKwlvdXRwdXQgXEJcMTMKKyAgICAgICAgXCVtIDo6PSA2LVwlMQorICAgIH0KKyAg ICBpZiA+IFwlaSA1IGVuZCAxIHtObyByZXNwb25zZSBmcm9tIGhvc3R9CisgICAgeGlmID0gXHYo bWlucHV0KSAxIHsJICA7IEhhdmUgdXNlcm5hbWUgcHJvbXB0CisJb3V0cHV0IFwlMVwxMwkJICA7 IFNlbmQgdXNlcm5hbWUKKyAgICAgICAgbWlucHV0IDUge3Nzd29yZDp9IHtzc3dvcmQgZm9yIFwl MTp9IDsgV2FpdCBmb3IgcGFzc3dvcmQgcHJvbXB0CisJaWYgZmFpbCBlbmQgMSB7Tm8gcGFzc3dv cmQgcHJvbXB0fQorICAgIH0KKyAgICBwYXVzZSAgICAgICAgICAgICAgICAgICAgICAgICA7IFdh aXQgYSBzZWMKKyAgICBvdXQgXCUyXDEzICAgICAgICAgICAgICAgICAgICA7IFNlbmQgcGFzc3dv cmQKKyAgICBpZiBub3QgZGVmIFwlMyAtICAgICAgICAgICAgICA7IElmIHdlIHdlcmUgbm90IGdp dmVuIGEgcHJvbXB0CisgICAgICBhc2cgXCUzIHtcdihwcm9tcHQpfSAgICAgICAgOyB1c2UgdGhl IFNFVCBMT0dJTiBQUk9NUFQgdmFsdWUKKyAgICBpZiBub3QgZGVmIFwlMyAtICAgICAgICAgICAg ICA7IElmIHdlIHN0aWxsIGRvbid0IGhhdmUgYSBwcm9tcHQKKyAgICAgIGFzZyBcJTMge1wxMCQg fSAgICAgICAgICAgICA7IHVzZSB0aGlzIG9uZSBhcyB0aGUgZGVmYXVsdAorICAgIHJlaW5wIDAg XCUzICAgICAgICAgICAgICAgICAgIDsgRGlkIHdlIElOUFVUIHRoZSBwcm9tcHQgYWxyZWFkeT8K KyAgICBpZiBmYWlsIGlucCA2MCBcJTMgICAgICAgICAgICA7IE5vLCBsb29rIG5vdy4KKyAgICBp ZiBmYWlsIGVuZCAxCit9CisKK0NPTU1FTlQgLSBWTUxJTkVMT0dJTiBtYWNyby4gIEFyZ3VtZW50 czoKKzsgXCUxID0gVXNlciBJRAorOyBcJTIgPSBQYXNzd29yZAorOworZGVmaW5lIFZNTElORUxP R0lOIHsKKyAgICBpZiA8IFx2KGFyZ2MpIDIgLQorICAgICAgZW5kIDEgVXNhZ2U6IFwlMCB1c2Vy aWQgWyBwYXNzd29yZCBdCisgICAgd2hpbGUgbm90IGRlZmluZWQgXCUyIHsKKyAgICAgICAgYXNr cSBcJTIgeyBcJTEncyBwYXNzd29yZDogfQorICAgIH0KKyAgICBzZXQgcGFyaXR5IG1hcmsgICAg ICAgICAgICAgICA7IFNldCBjb21tdW5pY2F0aW9uIHBhcmFtZXRlcnMKKyAgICBzZXQgZmxvdyBu b25lCisgICAgc2V0IGhhbmRzaGFrZSB4b24KKyAgICBzZXQgZHVwbGV4IGhhbGYKKyAgICBzZXQg aW5wdXQgdGltZW91dCBxdWl0ICAgICAgICA7IERvbid0IGJvdGhlciB3aXRoIElGIEZBSUxVUkUK KyAgICBpbnB1dCAxMCBCUkVBSyBLRVkgICAgICAgICAgICA7IExvb2sgZm9yIEJSRUFLIEtFWSBw cm9tcHQKKyAgICBwYXVzZSAxICAgICAgICAgICAgICAgICAgICAgICA7IFdhaXQgYSBzZWNvbmQK KyAgICBvdXRwdXQgXEIgICAgICAgICAgICAgICAgICAgICA7IFNlbmQgQlJFQUsKKyAgICBpbnB1 dCAxMCAuXDE3LCBvdXRwdXQgbG9nb24gXCUxXDEzICAgIDsgTm93IGxvZyBpbgorICAgIGlucHV0 IDEwIC5cMTcsIG91dHB1dCBcJTJcMTMgICAgICAgICAgOyBTZW5kIHBhc3N3b3JkCisgICAgaW5w dXQgMTAgLlwxNywgb3V0cHV0IFwxMyAgICAgICAgICAgICA7IFNlbmQgY2FycmlhZ2UgcmV0dXJu CisgICAgaW5wdXQgMTAgLlwxNywgb3V0cHV0IFwxMyAgICAgICAgICAgICA7IFNlbmQgYW5vdGhl ciBvbmUKKyAgICBlbmQgMAorfQorCitDT01NRU5UIC0gVk1GVUxMT0dJTiBtYWNyby4gIEFyZ3Vt ZW50czoKKzsgXCUxID0gVXNlciBJRAorOyBcJTIgPSBQYXNzd29yZAorOworZGVmaW5lIFZNRlVM TE9HSU4geworICAgIGlmIDwgXHYoYXJnYykgMiAtCisgICAgICBlbmQgMSBVc2FnZTogXCUwIHVz ZXJpZCBbIHBhc3N3b3JkIF0KKyAgICB3aGlsZSBub3QgZGVmaW5lZCBcJTIgeworICAgICAgICBh c2txIFwlMiB7IFwlMSdzIHBhc3N3b3JkOiB9CisgICAgfQorICAgIHNldCBpbnB1dCB0aW1lb3V0 IHF1aXQgICAgICA7IFF1aXQgaWYgSU5QVVQgZmFpbHMKKyAgICBzZXQgcGFyaXR5IGV2ZW4gICAg ICAgICAgICAgOyBTZXQgY29tbXVuaWNhdGlvbiBwYXJhbWV0ZXJzCisgICAgc2V0IGR1cGxleCBm dWxsCisgICAgc2V0IGhhbmRzaGFrZSBub25lCisgICAgc2V0IGZsb3cgeG9uL3hvZmYKKyAgICBv dXQgXDEzICAgICAgICAgICAgICAgICAgICAgOyBTZW5kIGNhcnJpYWdlIHJldHVybgorICAgIGlu cCA1IFRFUk1JTkFMIFRZUEU6ICAgICAgICA7IEdldCB0ZXJtaW5hbC10eXBlIHByb21wdAorICAg IG91dCB2dC0xMDBcMTMgICAgICAgICAgICAgICA7IEp1c3Qgc2VuZCAidnQtMTAwIgorICAgIGlu cCAyMCBSVU5OSU5HICAgICAgICAgICAgICA7IEdldCBSVU5OSU5HIG1lc3NhZ2UKKyAgICBwYXUg MSAgICAgICAgICAgICAgICAgICAgICAgOyBXYWl0IG9uZSBzZWNvbmQKKyAgICBvdXQgXCUxXDlc JTJcMTMgICAgICAgICAgICAgOyBTZW5kIHVzZXIgSUQsIHRhYiwgcGFzc3dvcmQKKyAgICBvdXQg XDEzXDEzICAgICAgICAgICAgICAgICAgOyBUd28gbW9yZSBjYXJyaWFnZSByZXR1cm5zCisgICAg ZW5kIDAKK30KKworQ09NTUVOVCAtIENJU0xPR0lOIG1hY3JvLiAgQXJndW1lbnRzOgorOyBcJTEg PSBDb21wdVNlcnZlIFVzZXIgSUQKKzsgXCUyID0gUGFzc3dvcmQKKzsgXCUzID0gUHJvbXB0Cis7 CitkZWZpbmUgQ0lTTE9HSU4geworICAgIGlmIDwgXHYoYXJnYykgMiAtCisgICAgICBlbmQgMSBV c2FnZTogXCUwIHVzZXJpZCBbIHBhc3N3b3JkIFsgcHJvbXB0IF0gXQorICAgIHdoaWxlIG5vdCBk ZWZpbmVkIFwlMiB7CisgICAgICAgIGFza3EgXCUyIHsgXCUxJ3MgcGFzc3dvcmQ6IH0KKyAgICB9 CisgICAgc2V0IHRlcm1pbmFsIGJ5dGVzaXplIDcgICAgIDsgTm8gOC1iaXQgY2hhcmFjdGVycwor ICAgIHNldCBpbnB1dCB0aW1lb3V0IHF1aXQgICAgICA7IFNraXAgdGhlIElGIEZBSUxVUkUncwor ICAgIG91dHB1dCBcMTMgICAgICAgICAgICAgICAgICA7IFNlbmQgaW5pdGlhbCBjYXJyaWFnZSBy ZXR1cm4KKyAgICBpbnB1dCA1IEhvc3QgTmFtZTogICAgICAgICAgOyBMb29rIGZvciBIb3N0IE5h bWUgcHJvbXB0CisgICAgb3V0cHV0IGNpc1wxMyAgICAgICAgICAgICAgIDsgU2VuZCAiY2lzIiBh bmQgY2FycmlhZ2UgcmV0dXJuCisgICAgaW5wdXQgNSBVc2VyIElEOiAgICAgICAgICAgIDsgTG9v ayBmb3IgVXNlciBJRCBwcm9tcHQKKyAgICBvdXRwdXQgXCUxXDEzICAgICAgICAgICAgICAgOyBT ZW5kIElEIGFuZCBjYXJyaWFnZSByZXR1cm4KKyAgICBpbnB1dCBQYXNzd29yZDogICAgICAgICAg ICAgOyBMb29rIGZvciBQYXNzd29yZCBwcm9tcHQKKyAgICBvdXRwdXQgXCUyXDEzICAgICAgICAg ICAgICAgOyBTZW5kIHBhc3N3b3JkIGFuZCBDUgorICAgIGlmIG5vdCBkZWYgXCUzIGFzZyBcJTMg XHYocHJvbXB0KQorICAgIGlmIG5vdCBkZWYgXCUzIGFzZyBcJTMge0NvbXB1U2VydmUgSW5mb3Jt YXRpb24gU2VydmljZX0KKyAgICBpbnB1dCAzMCBcJTMKKyAgICBlbmQgMAorfQorCitDT01NRU5U IC0gRE9XTE9HSU4gbWFjcm8uICBBcmd1bWVudHM6Cis7IFwlMSA9IERvdyBKb25lcyBQYXNzd29y ZAorOworZGVmaW5lIERPV0xPR0lOIHsKKyAgICB3aGlsZSBub3QgZGVmaW5lZCBcJTEgeyAgICAg ICAgICAgICAgOyBHZXQgcGFzc3dvcmQKKyAgICAgICAgYXNrcSBcJTEgeyBEb3cgSm9uZXMgcGFz c3dvcmQ6IH0KKyAgICB9CisgICAgc2V0IGlucHV0IHRpbWVvdXQgcHJvY2VlZAorICAgIGlucHV0 IDIwIFNFUlZJQ0UgUExFQVNFXD9cP1w/XD8gICAgICA7IExvb2sgZm9yIERvdyBwcm9tcHQKKyAg ICBpZiBmYWlsIGVuZCAxIE5vIHNlcnZpY2UgcHJvbXB0CisgICAgb3V0IGRqbnJcMTMgICAgICAg ICAgICAgICAgICAgICAgICAgIDsgU2VsZWN0IERKTlIKKyAgICBpbnB1dCAxMCBAQEBAQEBAQCAg ICAgICAgICAgICAgICAgICAgICAgIDsgR2V0IHBhc3N3b3JkIHByb21wdAorICAgIGlmIGZhaWwg ZW5kIDEgTm8gcGFzc3dvcmQgcHJvbXB0CisgICAgcGF1c2UgMSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDsgV2FpdCBhIHNlY29uZCwgdGhlbi4uLgorICAgIG91dHB1dCBcJTFcMTMgICAg ICAgICAgICAgICAgICAgICAgICA7IHNlbmQgcGFzc3dvcmQgYW5kIENSCisgICAgaW5wdXQgMzAg RU5URVIgUVVFUlkgICAgICAgICAgICAgICAgIDsgR2V0IERKTlIgcXVlcnkgcHJvbXB0CisgICAg aWYgZmFpbCBlbmQgMSBObyBtYWluIHF1ZXJ5IHByb21wdAorICAgIHBhdXNlIDEKK30KKworQ09N TUVOVCAtIERKTlJTUFJJTlQgbWFjcm86IExvZyBpbiB0byBEb3cgSm9uZXMgdmlhIFNwcmludE5l dC4KKzsKK2RlZiBkam5yc3ByaW50IHNwcmludCBkb3csIGlmIHN1Y2Nlc3MgZG93bG9naW4KKwor Q09NTUVOVCAtIE5PTE9HSU4gbWFjcm8uICBEb2VzIG5vdGhpbmcuICBVc2Ugd2hlbiBsb2dpbiBu b3QgcmVxdWlyZWQuCis7CitkZWYgbm9sb2dpbiBjb21tZW50CisKKzpDVVNUT00gOyBDdXN0b21p emF0aW9uIGZpbGUKKworOyBJbiBWTVMgYW5kIE9wZW5WTVMsIGFsbG93IGZvciBzeXN0ZW0td2lk ZSBzaXRlIGN1c3RvbWl6YXRpb25zCisKK3hpZiBlcXVhbCAiXHYoc3lzdGVtKSIgIlZNUyIgewor ICAgIHhpZiBleGlzdCBDS0VSTUlUX0lOSTpDS0VSTUlULlNZUyB7CisJZWNobyBFeGVjdXRpbmcg Q0tFUk1JVF9JTkk6Q0tFUk1JVC5TWVMKKwl0YWtlIENLRVJNSVRfSU5JOkNLRVJNSVQuU1lTCisg ICAgfQorfQorCis7IEV4ZWN1dGUgdXNlcidzIHBlcnNvbmFsIGN1c3RvbWl6YXRpb24gZmlsZQor Cit4aWYgZXhpc3QgXG0oX215aW5pdCkgIHsJCTsgSWYgaXQgZXhpc3RzLAorICAgIGVjaG8gRXhl Y3V0aW5nIFxtKF9teWluaXQpLi4uCTsgcHJpbnQgbWVzc2FnZSwKKyAgICB0YWtlIFxtKF9teWlu aXQpCQkJOyBhbmQgVEFLRSB0aGUgZmlsZS4KK30KKworOyBGaW5pc2ggdXAgd2l0aCB0cmFkaXRp b25hbCBncmVldGluZy4KKworaWYgPCBcdihudGltZSkgNDMyMDAgZWNobyBHb29kIE1vcm5pbmch CisgIGVsc2UgaWYgPCBcdihudGltZSkgNjEyMDAgZWNobyBHb29kIEFmdGVybm9vbiEKKyAgZWxz ZSBlY2hvIEdvb2QgRXZlbmluZy4KKworRW5kIDsgb2YgQy1LZXJtaXQgOC4wIGluaXRpYWxpemF0 aW9uIGZpbGUuCgpkaWZmIC0tZ2l0IGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4w LjMwMi9vY2tlcm1vZC5pbmkgYi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAy L29ja2VybW9kLmluaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODQ4YzNm Ci0tLSAvZGV2L251bGwKKysrIGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMw Mi9vY2tlcm1vZC5pbmkKQEAgLTAsMCArMSwxNDQgQEAKKzsgRmlsZSBDS0VSTU9ELklOSSwgU2Ft cGxlIEMtS2VybWl0IDcuMCBjdXN0b21pemF0aW9uIGZpbGUuCis7Cis7IFRoaXMgZmlsZSwgd2hp Y2ggaXMgT05MWSBBIFNBTVBMRSwgc2hvdWxkIGJlIGNhbGxlZDoKKzsKKzsgICAubXlrZXJtcmMg ICAoVU5JWCwgT1MtOSwgQWVnaXMsIEJlQm94LCBQbGFuIDkpCis7ICAgQ0tFUk1PRC5JTkkgKFZN UywgT3BlblZNUywgQU9TL1ZTLCBPUy8yLCBBbWlnYSwgQXRhcmkgU1QpCis7ICAgY2tlcm1vZC5p bmkgKFN0cmF0dXMgVk9TKQorOworOyBUaGlzIGZpbGUgaXMgZXhlY3V0ZWQgYXV0b21hdGljYWxs eSBieSB0aGUgc3RhbmRhcmQgQy1LZXJtaXQgaW5pdGlhbGl6YXRpb24KKzsgZmlsZSwgQ0tFUk1J VC5JTkkgKG9yIC5rZXJtcmMpLiAgVGhpcyBmaWxlIGlzIG5vdCBleGVjdXRlZCBieSBDLUtlcm1p dCBpdHNlbGYKKzsgdW5sZXNzIHRoZSBpbml0aWFsaXphdGlvbiBmaWxlIGlzIG5vdCBmb3VuZC4K KzsKKzsgTU9EaWZ5IHRoaXMgZmlsZSB0byBzdWl0IHlvdXIgbmVlZHMgYW5kIHByZWZlcmVuY2Vz LCBhbmQgaW5zdGFsbCBpdCBpbiB5b3VyCis7IGhvbWUgZGlyZWN0b3J5LiAgT3IgcmVwbGFjZSBp dCBlbnRpcmVseSB3aXRoIGEgbmV3IGZpbGUuCis7Cis7IFRoZSBkZXNpZ24gb2YgdGhpcyBzYW1w bGUgY3VzdG9taXphdGlvbiBmaWxlIGxldHMgeW91IGZpbGwgaW4gYSBzZWN0aW9uIGZvcgorOyBl YWNoIGRpZmZlcmVudCBvcGVyYXRpbmcgc3lzdGVtIHdoZXJlIHlvdSBydW4gQy1LZXJtaXQuCis7 Cis7IEluIFVOSVgsIGlmIHlvdSBnaXZlIHRoaXMgZmlsZSBleGVjdXRlIHBlcm1pc3Npb24gYW5k IG1ha2Ugc3VyZSB0aGUgdG9wCis7IGxpbmUgaW5kaWNhdGVzIHRoZSBmdWxsIHBhdGggb2YgdGhl IEMtS2VybWl0IDcuMC1vci1sYXRlciBleGVjdXRhYmxlLCB5b3UKKzsgY2FuIGV4ZWN1dGUgdGhp cyBmaWxlIGRpcmVjdGx5LCBhcyBpZiBpdCB3YXMgYSBzaGVsbCBzY3JpcHQsIGV4Y2VwdCBpdCBp cworOyBpbnRlcnByZXRlZCBieSBLZXJtaXQgcmF0aGVyIHRoYW4gdGhlIHNoZWxsLiAgVGhpcyBs ZXRzIHlvdSBoYXZlIGFzIG1hbnkKKzsgZGlmZmVyZW50IHN0YXJ0dXAgZmlsZXMgYXMgeW91IGxp a2UsIGVhY2ggc3VpdGVkIHRvIGEgcGFydGljdWxhciBwdXJwb3NlLgorOworOyBBdXRob3JzOiAg Q2hyaXN0aW5lIEdpYW5vbmUsIEZyYW5rIGRhIENydXosIEplZmZyZXkgQWx0bWFuLAorOyAgICAg ICAgICAgVGhlIEtlcm1pdCBQcm9qZWN0LCBDb2x1bWJpYSBVbml2ZXJzaXR5LgorOyBDcmVhdGlv bjogMjMgTm92ZW1iZXIgMTk5MiBmb3IgQy1LZXJtaXQgNUEoMTg4KS4KKzsgTW9kaWZpZWQ6IDMw IEp1bmUgMTk5MyBmb3IgZWRpdCAxODkuCis7ICAgICAgICAgICAwNCBPY3RvYmVyIDE5OTQgZm9y IGVkaXQgMTkwLgorOyAgICAgICAgICAgMTcgQXByaWwgMTk5NSBmb3IgZWRpdCAxOTEuCis7ICAg ICAgICAgICAgNiBTZXB0ZW1iZXIgMTk5NiBmb3IgdmVyc2lvbiA2LjAsIGVkaXQgMTkyLgorOyAg ICAgICAgICAgIDEgSmFudWFyeSAyMDAwIGZvciB2ZXJzaW9uIDcuMCwgZWRpdCAxOTYuCis7ICAg ICAgICAgICAxNCBPY3RvYmVyIDIwMDEgZm9yIHZlcnNpb24gOC4wLCBlZGl0IDIwMC4KKworRUNI TworRUNITyBFeGVjdXRpbmcgU0FNUExFIEMtS2VybWl0IGN1c3RvbWl6YXRpb24gZmlsZSBcdihj bWRmaWxlKSBmb3IgXHYoc3lzdGVtKS4uLgorRUNITyB7IFBsZWFzZSBlZGl0IHRoaXMgZmlsZSB0 byByZWZsZWN0IHlvdXIgbmVlZHMgYW5kIHByZWZlcmVuY2VzLn0KK0VDSE8KKzsKKzsgLi4uIGFu ZCB0aGVuIHJlbW92ZSB0aGUgRUNITyBjb21tYW5kcyBhYm92ZS4KKworQ09NTUVOVCAtIFNldHRp bmdzIHRoYXQgYXBwbHkgdG8gYWxsIHRoZSBzeXN0ZW1zIEkgdXNlOgorOworc2V0IGRlbGF5IDEg ICAgICAgICAgICAgICAgICA7IEkgZXNjYXBlIGJhY2sgcXVpY2tseQorc2V0IGRpYWwgZGlzcGxh eSBvbiAgICAgICAgICA7IEkgbGlrZSB0byB3YXRjaCBDLUtlcm1pdCBkaWFsCisKKzsgRGlhbGlu ZyBsb2NhbGUgYW5kIG1ldGhvZAorOworOyBTRVQgRElBTCBDT1VOVFJZLUNPREUgMSAgICA7IFVu Y29tbWVudCBhbmQgcmVwbGFjZSB3aXRoIHlvdXJzCis7IFNFVCBESUFMIEFSRUEtQ09ERSAwMDAg ICAgIDsgVW5jb21tZW50IGFuZCByZXBsYWNlIHdpdGggeW91cnMKKzsgU0VUIERJQUwgTEQtUFJF RklYIDEgICAgICAgOyBVbmNvbW1lbnQgYW5kIHJlcGxhY2Ugd2l0aCB5b3VycworOyBTRVQgRElB TCBJTlRMLVBSRUZJWCAwMTEgICA7IFVuY29tbWVudCBhbmQgcmVwbGFjZSB3aXRoIHlvdXJzCis7 IFNFVCBESUFMIE1FVEhPRCBUT05FICAgICAgIDsgVW5jb21tZW50IGFuZCByZXBsYWNlIHdpdGgg UFVMU0UgaWYgbmVjZXNzYXJ5Cis7IFNFVCBESUFMIERJUkVDVE9SWSAuLi4gLi4uIDsgTGlzdCBk aWFsaW5nIGRpcmVjdG9yeSBmaWxlcyBoZXJlCisKK2lmIDwgXHYodmVyc2lvbikgNjAwMTkyIC0K KyAgc3RvcCAxIFx2KGNtZGZpbGUpOiBDLUtlcm1pdCA2LjAuMTkyIG9yIGxhdGVyIHJlcXVpcmVk LgorCitzZXQgdGFrZSBlcnJvciBvbiAgICAgICAgICAgIDsgTWFrZSBlcnJvcnMgZmF0YWwgdGVt cG9yYXJpbHkKK2NoZWNrIGlmICAgICAgICAgICAgICAgICAgICAgOyBEbyB3ZSBoYXZlIGFuIElG IGNvbW1hbmQ/CitzZXQgdGFrZSBlcnJvciBvZmYgICAgICAgICAgIDsgWWVzIHdlIGRvLCBiYWNr IHRvIG5vcm1hbAorCis7IFRoZSBPTl9FWElUIG1hY3JvIGlzIGV4ZWN1dGVkIGF1dG9tYXRpY2Fs bHkgd2hlbiBDLUtlcm1pdCBleGl0cy4KKzsgRGVmaW5lIGFzIGRlc2lyZWQuCis7CitkZWZpbmUg T05fRVhJVCBlY2hvIFJldHVybmluZyB5b3UgdG8gXHYoc3lzdGVtKSBub3cuCisKKzsgU3lzdGVt LWluZGVwZW5kZW50IHF1aWNrIGRpYWxpbmcgbWFjcm8uICBEZXBlbmRzIG9uIGhhdmluZyB0aGUK KzsgbWFjcm9zIE1ZTU9ERU0sIE1ZUE9SVCwgYW5kIChvcHRpb25hbGx5KSBNWVNQRUVEIGRlZmlu ZWQgaW4gdGhlCis7IHN5c3RlbS1kZXBlbmRlbnQgc2VjdGlvbnMgYmVsb3cuCis7CitkZWZpbmUg TVlESUFMIHsKKyAgICBpZiBub3QgZGVmaW5lZCBNWU1PREVNIGVuZCAxIHtcJTA6IE1vZGVtIHR5 cGUgbm90IGRlZmluZWQufQorICAgIHNldCBtb2RlbSB0eXBlIFxtKE1ZTU9ERU0pCisgICAgaWYg ZmFpbCBlbmQgMSB7XCUwOiBcbShNWU1PREVNKTogVW5zdXBwb3J0ZWQgbW9kZW0gdHlwZS59Cisg ICAgaWYgbm90IGRlZmluZWQgTVlQT1JUIGVuZCAxIHtcJTA6IENvbW11bmljYXRpb24gcG9ydCBu b3QgZGVmaW5lZC59CisgICAgc2V0IHBvcnQgXG0oTVlQT1JUKQorICAgIGlmIGZhaWwgZW5kIDEg e1wlMDogU0VUIFBPUlQgXG0oTVlQT1JUKSBmYWlsZWQufQorICAgIGlmIGRlZmluZWQgTVlGTE9X IHNldCBmbG93IFxtKE1ZRkxPVykKKyAgICBpZiBmYWlsIGVuZCAxIHtcJTA6IFNFVCBGTE9XIFxt KE1ZRkxPVykgZmFpbGVkLn0KKyAgICBpZiBkZWZpbmVkIE1ZU1BFRUQgc2V0IHNwZWVkIFxtKE1Z U1BFRUQpCisgICAgaWYgZmFpbCBlbmQgMSB7XCUwOiBTRVQgU1BFRUQgXG0oTVlTUEVFRCkgZmFp bGVkLn0KKyAgICBkaWFsIFwlMVwlMlwlM1wlNFwlNVwlNlwlN1wlOFwlOQorICAgIGVuZCBcdihz dGF0dXMpCit9CisKK2ZvcndhcmQgXHYoc3lzdGVtKSAgICAgICAgICAgICAgOyBHbyBleGVjdXRl IHN5c3RlbS1kZXBlbmRlbnQgY29tbWFuZHMKKworOlVOSVggICAgICAgICAgICAgICAgICAgICAg ICAgICA7IFVOSVgsIGFsbCB2ZXJzaW9ucy4uLgorZGVmaW5lIE1ZUE9SVCAvZGV2L2N1YSAgICAg ICAgICA7IE15IGRpYWxpbmcgZW52aXJvbm1lbnQKK2RlZmluZSBNWU1PREVNIHVzciAgICAgICAg ICAgICAgOyBSZXBsYWNlIHRoZXNlIGJ5IHdoYXQgeW91IGFjdHVhbGx5IGhhdmUKK2RlZmluZSBN WVNQRUVEIDU3NjAwCis7Cis7IElmIHlvdSB3YW50IGFsbCB5b3VyIGRvd25sb2FkcyB0byBnbyB0 byB0aGUgc2FtZSBkaXJlY3RvcnksIG5vIG1hdHRlcgorOyB3aGF0IHlvdXIgY3VycmVudCBkaXJl Y3RvcnkgaXMsIHVuY29tbWVudCBhbmQgZWRpdCB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6Cis7Cis7 ICAgc2V0IGZpbGUgZG93bmxvYWQtZGlyZWN0b3J5IH4vZG93bmxvYWQgOyBEb3dubG9hZCBkaXJl Y3RvcnkgZm9yIFVOSVgKKworOyBQdXQgb3RoZXIgVU5JWC1zcGVjaWZpYyBjb21tYW5kcyBoZXJl Li4uCitlbmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgRW5kIG9mIFVOSVggc2VjdGlv bgorCis6Vk1TICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgVk1TIGFuZCBPcGVuVk1TCitk ZWZpbmUgTVlQT1JUIFRYQTA6ICAgICAgICAgICAgIDsgTXkgZGlhbGluZyBlbnZpcm9ubWVudAor ZGVmaW5lIE1ZTU9ERU0gdXNyICAgICAgICAgICAgICA7IFJlcGxhY2UgdGhlc2UgYnkgd2hhdCB5 b3UgYWN0dWFsbHkgaGF2ZQorZGVmaW5lIE1ZU1BFRUQgNTc2MDAKKzsgc2V0IGZpbGUgZG93bmxv YWQtZGlyZWN0b3J5IFtcJChVU0VSKS5ET1dOTE9BRF0gOyBEb3dubG9hZCBkaXJlY3RvcnkgZm9y IFZNUworOyBQdXQgb3RoZXIgVk1TLXNwZWNpZmljIGNvbW1hbmRzIGhlcmUuLi4KK2VuZCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOyBFbmQgb2YgVk1TIHNlY3Rpb24KKworOldJTjMyICAg ICAgICAgICAgICAgICAgICAgICAgICA7IFdpbmRvd3MgYW5kIE9TLzIgY3VzdG9taXphdGlvbnMu Li4KKzpPUy8yCitkZWZpbmUgTVlQT1JUIENPTTEgICAgICAgICAgICAgIDsgTXkgZGlhbGluZyBl bnZpcm9ubWVudAorZGVmaW5lIE1ZTU9ERU0gdXNyICAgICAgICAgICAgICA7IFJlcGxhY2UgdGhl c2UgYnkgd2hhdCB5b3UgYWN0dWFsbHkgaGF2ZQorZGVmaW5lIE1ZU1BFRUQgNTc2MDAKK3NldCBj b21tYW5kIGJ5dGUgOCAgICAgICAgICAgICAgOyBVc2UgOCBiaXRzIGJldHdlZW4gS2VybWl0IGFu ZCBjb25zb2xlCitzZXQgeGZlciBjaGFyIGxhdGluMSAgICAgICAgICAgIDsgVXNlIExhdGluLTEg Zm9yIHRleHQgZmlsZSB0cmFuc2Zlcgorc2V0IHRlcm0gY2hhciBsYXRpbjEgICAgICAgICAgICA7 IEFuZCB1c2UgTGF0aW4tMSBkdXJpbmcgQ09OTkVDVCBtb2RlCis7IHNldCBmaWxlIGRvd25sb2Fk LWRpcmVjdG9yeSBDOlxET1dOTE9BRFMKK2VuZAorCis6T1M5LzY4SyAgICAgICAgICAgICAgICAg ICAgICAgIDsgT1MtOS82ODAwMAorZGVmaW5lIE1ZUE9SVCAvdDMgICAgICAgICAgICAgICA7IE15 IGRpYWxpbmcgZW52aXJvbm1lbnQKK2RlZmluZSBNWU1PREVNIHVzciAgICAgICAgICAgICAgOyBS ZXBsYWNlIHRoZXNlIGJ5IHdoYXQgeW91IGFjdHVhbGx5IGhhdmUKK2RlZmluZSBNWVNQRUVEIDk2 MDAKKzsgc2V0IGZpbGUgZG93bmxvYWQtZGlyZWN0b3J5IH4vZG93bmxvYWRzCitlbmQgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDsgRW5kIG9mIE9TLTkgc2VjdGlvbgorCis6QU9TL1ZTICAg ICAgICAgICAgICAgICAgICAgICAgIDsgRGF0YSBHZW5lcmFsIEFPUy9WUworZGVmaW5lIE1ZUE9S VCBAY29uMyAgICAgICAgICAgICA7IE15IGRpYWxpbmcgZW52aXJvbm1lbnQKK2RlZmluZSBNWU1P REVNIHVzciAgICAgICAgICAgICAgOyBSZXBsYWNlIHRoZXNlIGJ5IHdoYXQgeW91IGFjdHVhbGx5 IGhhdmUKK2RlZmluZSBNWVNQRUVEIDk2MDAKKzsgc2V0IGZpbGUgZG93bmxvYWQtZGlyZWN0b3J5 IFx2KGhvbWUpRE9XTkxPQURTCitlbmQKKworOyBBbmQgc28gb24sIHlvdSBnZXQgdGhlIGlkZWEu Li4KKzsgRmlsbCBpbiB0aGUgc2VjdGlvbnMgdGhhdCBhcHBseSB0byB5b3UuCisKKzpTdHJhdHVz X1ZPUwkJCTsgU3RyYXR1cyBWT1MKKzpBbWlnYSAgICAgICAgICAgICAgICAgICAgICAgICAgOyBD b21tb2RvcmUgQW1pZ2EKKzpBdGFyaV9TVCAgICAgICAgICAgICAgICAgICAgICAgOyBBdGFyaSBT VAorOk1hY2ludG9zaCAgICAgICAgICAgICAgICAgICAgICA7IEFwcGxlIE1hY2ludG9zaAorOnVu a25vd24gICAgICAgICAgICAgICAgICAgICAgICA7IE90aGVycworCis7IChFbmQgb2YgQ0tFUk1P RC5JTkkpCgpkaWZmIC0tZ2l0IGEvY2tlcm1pdC5zcGVjIGIvY2tlcm1pdC5zcGVjCmluZGV4IDZl ODUzMTEuLjVmYjIyMWIgMTAwNjQ0Ci0tLSBhL2NrZXJtaXQuc3BlYworKysgYi9ja2VybWl0LnNw ZWMKQEAgLTMsNyArMyw3IEBACiBTdW1tYXJ5OiAgICAgICBUaGUgcXVpbnRlc3NlbnRpYWwgYWxs LXB1cnBvc2UgY29tbXVuaWNhdGlvbnMgcHJvZ3JhbQogTmFtZTogICAgICAgICAgY2tlcm1pdAog VmVyc2lvbjogICAgICAgOS4wLiV7cGF0Y2hsZXZlbH0KLVJlbGVhc2U6ICAgICAgIDM2JXs/ZGlz dH0KK1JlbGVhc2U6ICAgICAgIDM3JXs/ZGlzdH0KICMgTW9zdCBvZiB0aGUgcGFja2FnZSBpcyB1 bmRlciBhIHRocmVlLWNsYXVzZSBCU0QgbGljZW5zZSwgYnV0IHRoZSBmaWxlCiAjIGNrYXV0Mi5o IGFwcGVhcnMgdG8gYmUgY292ZXJlZCBieSB0aHJlZSBsaWNlbnNlczoKICMgICBUaGUgYmxhbmtl dCBsaWNlbnNlIGluIENPUFlJTkcuVFhUIGFuZCBja2NtYWkuYywgd2hpY2ggaXMgQlNEIHRocmVl LWNsYXVzZQpAQCAtNTMsNyArNTMsNyBAQCBjcCAle1NPVVJDRTZ9IC4KIAogJWJ1aWxkCiAlbWFr ZV9idWlsZCBsaW51eCBcCi0gICAgICAgIEtGTEFHUz0iLU8wICRSUE1fT1BUX0ZMQUdTIC1XYWxs IC1ET1BFTlNTTF8wOTcgLURzZGF0YT1zX2RhdGEgLURIQVZFX09QRU5QVFkgLUQna3JiNV9pbml0 X2V0cyhfX2N0eCk9JyAtRE1BSU5UWVBFPWludCIgXAorICAgICAgICBLRkxBR1M9Ii1PMCAkUlBN X09QVF9GTEFHUyAtV2FsbCAtYW5zaSAtRF9ERUZBVUxUX1NPVVJDRSAtRE9QRU5TU0xfMDk3IC1E c2RhdGE9c19kYXRhIC1ESEFWRV9PUEVOUFRZIC1EJ2tyYjVfaW5pdF9ldHMoX19jdHgpPScgLURN QUlOVFlQRT1pbnQiIFwKICAgICAgICAgTE5LRkxBR1M9IiV7P29wdGZsYWdzfSAlez9fX2dsb2Jh bF9sZGZsYWdzfSIgXAogICAgICAgICBLNExJQj0gXAogICAgICAgICBLNElOQz0gXApAQCAtODks NiArODksOSBAQCBpbnN0YWxsIC1EIC1tIDA2NDQgJXtTT1VSQ0U1fSAle2J1aWxkcm9vdH0le19z eXNjb25mZGlyfS9rZXJtaXQvY2tlcm1pdC5waG9uZQogJXtfbWFuZGlyfS9tYW4xL2tlcm1pdC4x KgogCiAlY2hhbmdlbG9nCisqIFdlZCBKYW4gMjIgMjAyNSBEYXZpZCBDYW50cmVsbCA8ZGNhbnRy ZWxsQHJlZGhhdC5jb20+IC0gOS4wLjMwMi0zNworLSBBZGQgJy1hbnNpIC1EX0RFRkFVTFRfU09V UkNFJyB0byBLRkxBRyB2YXJpYWJsZSB0byBmaXggRlRCRlMgKCMyMzM5OTcxKQorCiAqIFRodSBK YW4gMTYgMjAyNSBGZWRvcmEgUmVsZWFzZSBFbmdpbmVlcmluZyA8cmVsZW5nQGZlZG9yYXByb2pl Y3Qub3JnPiAtIDkuMC4zMDItMzYKIC0gUmVidWlsdCBmb3IgaHR0cHM6Ly9mZWRvcmFwcm9qZWN0 Lm9yZy93aWtpL0ZlZG9yYV80Ml9NYXNzX1JlYnVpbGQKIAoKZGlmZiAtLWdpdCBhL2xvZyBiL2xv ZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Mjk2ZDZkCi0tLSAvZGV2L251 bGwKKysrIGIvbG9nCkBAIC0wLDAgKzEsNDIgQEAKK1VwbG9hZGluZyBzcnBtOiBja2VybWl0LTku MC4zMDItMzcuZmM0Mi5zcmMucnBtCitbICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXSAgMDAlIDAwOjAwOjAwICAgICAwLjAwIEIgICAgICAgIC0gQi9zZWMNWz09PT09PT09PT09 ICAgICAgICAgICAgICAgICAgICAgICAgIF0gIDMzJSAwMDowMDowMCAgIDEuMDAgTWlCICAxMC4x MCBNaUIvc2VjDVs9PT09PT09PT09PT09PT09PT09PT09PSAgICAgICAgICAgICBdICA2NiUgMDA6 MDA6MDAgICAyLjAwIE1pQiAgMzEuNzkgTWlCL3NlYw1bPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0gXSAgOTklIDAwOjAwOjAwICAgMy4wMCBNaUIgIDMxLjkwIE1pQi9zZWMNWz09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PV0gMTAwJSAwMDowMDowMCAgIDMuMDEg TWlCICAxNi40MCBNaUIvc2VjDQorQ3JlYXRlZCB0YXNrOiAxMjgzMjM2NDgKK1Rhc2sgaW5mbzog aHR0cHM6Ly9rb2ppLmZlZG9yYXByb2plY3Qub3JnL2tvamkvdGFza2luZm8/dGFza0lEPTEyODMy MzY0OAorV2F0Y2hpbmcgdGFza3MgKHRoaXMgbWF5IGJlIHNhZmVseSBpbnRlcnJ1cHRlZCkuLi4K KzEyODMyMzY0OCBidWlsZCAocmF3aGlkZSwgY2tlcm1pdC05LjAuMzAyLTM3LmZjNDIuc3JjLnJw bSk6IGZyZWUKKzEyODMyMzY0OCBidWlsZCAocmF3aGlkZSwgY2tlcm1pdC05LjAuMzAyLTM3LmZj NDIuc3JjLnJwbSk6IGZyZWUgLT4gYXNzaWduZWQgKGJ1aWxkaHcteDg2LTEwLmlhZDIuZmVkb3Jh cHJvamVjdC5vcmcpCisxMjgzMjM2NDggYnVpbGQgKHJhd2hpZGUsIGNrZXJtaXQtOS4wLjMwMi0z Ny5mYzQyLnNyYy5ycG0pOiBhc3NpZ25lZCAoYnVpbGRody14ODYtMTAuaWFkMi5mZWRvcmFwcm9q ZWN0Lm9yZykgLT4gb3BlbiAoYnVpbGRody14ODYtMTAuaWFkMi5mZWRvcmFwcm9qZWN0Lm9yZykK KyAgMTI4MzIzNjk0IHJlYnVpbGRTUlBNIChzMzkweCk6IGZyZWUKKyAgMTI4MzIzNjk0IHJlYnVp bGRTUlBNIChzMzkweCk6IGZyZWUgLT4gYXNzaWduZWQgKGJ1aWxkdm0tczM5MHgtMDIuczM5MC5m ZWRvcmFwcm9qZWN0Lm9yZykKKyAgMTI4MzIzNjk0IHJlYnVpbGRTUlBNIChzMzkweCk6IGFzc2ln bmVkIChidWlsZHZtLXMzOTB4LTAyLnMzOTAuZmVkb3JhcHJvamVjdC5vcmcpIC0+IG9wZW4gKGJ1 aWxkdm0tczM5MHgtMDIuczM5MC5mZWRvcmFwcm9qZWN0Lm9yZykKKyAgMTI4MzIzNjk0IHJlYnVp bGRTUlBNIChzMzkweCk6IG9wZW4gKGJ1aWxkdm0tczM5MHgtMDIuczM5MC5mZWRvcmFwcm9qZWN0 Lm9yZykgLT4gY2xvc2VkCisgIDAgZnJlZSAgMSBvcGVuICAxIGRvbmUgIDAgZmFpbGVkCisgIDEy ODMyMzc0OCBidWlsZEFyY2ggKGNrZXJtaXQtOS4wLjMwMi0zNy5mYzQyLnNyYy5ycG0sIGk2ODYp OiBmcmVlCisgIDEyODMyMzc1MiBidWlsZEFyY2ggKGNrZXJtaXQtOS4wLjMwMi0zNy5mYzQyLnNy Yy5ycG0sIHMzOTB4KTogZnJlZQorICAxMjgzMjM3NDkgYnVpbGRBcmNoIChja2VybWl0LTkuMC4z MDItMzcuZmM0Mi5zcmMucnBtLCB4ODZfNjQpOiBmcmVlCisgIDEyODMyMzc1MCBidWlsZEFyY2gg KGNrZXJtaXQtOS4wLjMwMi0zNy5mYzQyLnNyYy5ycG0sIGFhcmNoNjQpOiBmcmVlCisgIDEyODMy Mzc1MSBidWlsZEFyY2ggKGNrZXJtaXQtOS4wLjMwMi0zNy5mYzQyLnNyYy5ycG0sIHBwYzY0bGUp OiBmcmVlCisgIDEyODMyMzc0OCBidWlsZEFyY2ggKGNrZXJtaXQtOS4wLjMwMi0zNy5mYzQyLnNy Yy5ycG0sIGk2ODYpOiBmcmVlIC0+IGFzc2lnbmVkIChidWlsZGh3LXg4Ni0wMS5pYWQyLmZlZG9y YXByb2plY3Qub3JnKQorICAxMjgzMjM3NTIgYnVpbGRBcmNoIChja2VybWl0LTkuMC4zMDItMzcu ZmM0Mi5zcmMucnBtLCBzMzkweCk6IGZyZWUgLT4gYXNzaWduZWQgKGJ1aWxkdm0tczM5MHgtMDMu czM5MC5mZWRvcmFwcm9qZWN0Lm9yZykKKyAgMTI4MzIzNzQ5IGJ1aWxkQXJjaCAoY2tlcm1pdC05 LjAuMzAyLTM3LmZjNDIuc3JjLnJwbSwgeDg2XzY0KTogZnJlZSAtPiBhc3NpZ25lZCAoYnVpbGRo dy14ODYtMDIuaWFkMi5mZWRvcmFwcm9qZWN0Lm9yZykKKyAgMTI4MzIzNzUwIGJ1aWxkQXJjaCAo Y2tlcm1pdC05LjAuMzAyLTM3LmZjNDIuc3JjLnJwbSwgYWFyY2g2NCk6IGZyZWUgLT4gYXNzaWdu ZWQgKGJ1aWxkdm0tYTY0LTA5LmlhZDIuZmVkb3JhcHJvamVjdC5vcmcpCisgIDEyODMyMzc1MSBi dWlsZEFyY2ggKGNrZXJtaXQtOS4wLjMwMi0zNy5mYzQyLnNyYy5ycG0sIHBwYzY0bGUpOiBmcmVl IC0+IGFzc2lnbmVkIChidWlsZHZtLXBwYzY0bGUtMjAuaWFkMi5mZWRvcmFwcm9qZWN0Lm9yZykK KyAgMTI4MzIzNzUyIGJ1aWxkQXJjaCAoY2tlcm1pdC05LjAuMzAyLTM3LmZjNDIuc3JjLnJwbSwg czM5MHgpOiBhc3NpZ25lZCAoYnVpbGR2bS1zMzkweC0wMy5zMzkwLmZlZG9yYXByb2plY3Qub3Jn KSAtPiBvcGVuIChidWlsZHZtLXMzOTB4LTAzLnMzOTAuZmVkb3JhcHJvamVjdC5vcmcpCisgIDEy ODMyMzc0OSBidWlsZEFyY2ggKGNrZXJtaXQtOS4wLjMwMi0zNy5mYzQyLnNyYy5ycG0sIHg4Nl82 NCk6IGFzc2lnbmVkIChidWlsZGh3LXg4Ni0wMi5pYWQyLmZlZG9yYXByb2plY3Qub3JnKSAtPiBv cGVuIChidWlsZGh3LXg4Ni0wMi5pYWQyLmZlZG9yYXByb2plY3Qub3JnKQorICAxMjgzMjM3NTAg YnVpbGRBcmNoIChja2VybWl0LTkuMC4zMDItMzcuZmM0Mi5zcmMucnBtLCBhYXJjaDY0KTogYXNz aWduZWQgKGJ1aWxkdm0tYTY0LTA5LmlhZDIuZmVkb3JhcHJvamVjdC5vcmcpIC0+IG9wZW4gKGJ1 aWxkdm0tYTY0LTA5LmlhZDIuZmVkb3JhcHJvamVjdC5vcmcpCisgIDEyODMyMzc0OCBidWlsZEFy Y2ggKGNrZXJtaXQtOS4wLjMwMi0zNy5mYzQyLnNyYy5ycG0sIGk2ODYpOiBhc3NpZ25lZCAoYnVp bGRody14ODYtMDEuaWFkMi5mZWRvcmFwcm9qZWN0Lm9yZykgLT4gb3BlbiAoYnVpbGRody14ODYt MDEuaWFkMi5mZWRvcmFwcm9qZWN0Lm9yZykKKyAgMTI4MzIzNzUxIGJ1aWxkQXJjaCAoY2tlcm1p dC05LjAuMzAyLTM3LmZjNDIuc3JjLnJwbSwgcHBjNjRsZSk6IGFzc2lnbmVkIChidWlsZHZtLXBw YzY0bGUtMjAuaWFkMi5mZWRvcmFwcm9qZWN0Lm9yZykgLT4gb3BlbiAoYnVpbGR2bS1wcGM2NGxl LTIwLmlhZDIuZmVkb3JhcHJvamVjdC5vcmcpCisgIDEyODMyMzc0OSBidWlsZEFyY2ggKGNrZXJt aXQtOS4wLjMwMi0zNy5mYzQyLnNyYy5ycG0sIHg4Nl82NCk6IG9wZW4gKGJ1aWxkaHcteDg2LTAy LmlhZDIuZmVkb3JhcHJvamVjdC5vcmcpIC0+IGNsb3NlZAorICAwIGZyZWUgIDUgb3BlbiAgMiBk b25lICAwIGZhaWxlZAorICAxMjgzMjM3NDggYnVpbGRBcmNoIChja2VybWl0LTkuMC4zMDItMzcu ZmM0Mi5zcmMucnBtLCBpNjg2KTogb3BlbiAoYnVpbGRody14ODYtMDEuaWFkMi5mZWRvcmFwcm9q ZWN0Lm9yZykgLT4gY2xvc2VkCisgIDAgZnJlZSAgNCBvcGVuICAzIGRvbmUgIDAgZmFpbGVkCisg IDEyODMyMzc1MiBidWlsZEFyY2ggKGNrZXJtaXQtOS4wLjMwMi0zNy5mYzQyLnNyYy5ycG0sIHMz OTB4KTogb3BlbiAoYnVpbGR2bS1zMzkweC0wMy5zMzkwLmZlZG9yYXByb2plY3Qub3JnKSAtPiBj bG9zZWQKKyAgMCBmcmVlICAzIG9wZW4gIDQgZG9uZSAgMCBmYWlsZWQKKyAgMTI4MzIzNzUwIGJ1 aWxkQXJjaCAoY2tlcm1pdC05LjAuMzAyLTM3LmZjNDIuc3JjLnJwbSwgYWFyY2g2NCk6IG9wZW4g KGJ1aWxkdm0tYTY0LTA5LmlhZDIuZmVkb3JhcHJvamVjdC5vcmcpIC0+IGNsb3NlZAorICAwIGZy ZWUgIDIgb3BlbiAgNSBkb25lICAwIGZhaWxlZAorICAxMjgzMjM3NTEgYnVpbGRBcmNoIChja2Vy bWl0LTkuMC4zMDItMzcuZmM0Mi5zcmMucnBtLCBwcGM2NGxlKTogb3BlbiAoYnVpbGR2bS1wcGM2 NGxlLTIwLmlhZDIuZmVkb3JhcHJvamVjdC5vcmcpIC0+IGNsb3NlZAorICAwIGZyZWUgIDEgb3Bl biAgNiBkb25lICAwIGZhaWxlZAorMTI4MzIzNjQ4IGJ1aWxkIChyYXdoaWRlLCBja2VybWl0LTku MC4zMDItMzcuZmM0Mi5zcmMucnBtKTogb3BlbiAoYnVpbGRody14ODYtMTAuaWFkMi5mZWRvcmFw cm9qZWN0Lm9yZykgLT4gY2xvc2VkCisgIDAgZnJlZSAgMCBvcGVuICA3IGRvbmUgIDAgZmFpbGVk CisKKzEyODMyMzY0OCBidWlsZCAocmF3aGlkZSwgY2tlcm1pdC05LjAuMzAyLTM3LmZjNDIuc3Jj LnJwbSkgY29tcGxldGVkIHN1Y2Nlc3NmdWxseQo=